ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtdXNiLWdhZGdldCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtdXNiLWdhZGdldAppbmRleCAzNzU1OWEwLi45NWEzNjU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXVzYi1nYWRnZXQKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy11c2ItZ2FkZ2V0CkBAIC02Miw2ICs2Miw0MCBAQAogRGVzY3JpcHRpb246CiAJCVRoaXMgZ3JvdXAgY29udGFpbnMgZnVuY3Rpb25zIGF2YWlsYWJsZSB0byB0aGlzIFVTQiBnYWRnZXQuCiAKK1doYXQ6CQkvY29uZmlnL3VzYi1nYWRnZXQvZ2FkZ2V0L2Z1bmN0aW9ucy88ZnVuYz4uPGluc3Q+L2ludGVyZmFjZS48bj4KK0RhdGU6CQlNYXkgMjAxNAorS2VybmVsVmVyc2lvbjoJMy4xNgorRGVzY3JpcHRpb246CisJCVRoaXMgZ3JvdXAgY29udGFpbnMgIkZlYXR1cmUgRGVzY3JpcHRvcnMiIHNwZWNpZmljIGZvciBvbmUKKwkJZ2FkZ2V0J3MgVVNCIGludGVyZmFjZSBvciBvbmUgaW50ZXJmYWNlIGdyb3VwIGRlc2NyaWJlZAorCQlieSBhbiBJQUQuCisKKwkJVGhlIGF0dHJpYnV0ZXM6CisKKwkJY29tcGF0aWJsZV9pZAkJLSA4LWJ5dGUgc3RyaW5nIGZvciAiQ29tcGF0aWJsZSBJRCIKKwkJc3ViX2NvbXBhdGlibGVfaWQJLSA4LWJ5dGUgc3RyaW5nIGZvciAiU3ViIENvbXBhdGlibGUgSUQiCisKK1doYXQ6CQkvY29uZmlnL3VzYi1nYWRnZXQvZ2FkZ2V0L2Z1bmN0aW9ucy88ZnVuYz4uPGluc3Q+L2ludGVyZmFjZS48bj4vPHByb3BlcnR5PgorRGF0ZToJCU1heSAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE2CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBncm91cCBjb250YWlucyAiRXh0ZW5kZWQgUHJvcGVydHkgRGVzY3JpcHRvcnMiIHNwZWNpZmljIGZvciBvbmUKKwkJZ2FkZ2V0J3MgVVNCIGludGVyZmFjZSBvciBvbmUgaW50ZXJmYWNlIGdyb3VwIGRlc2NyaWJlZAorCQlieSBhbiBJQUQuCisKKwkJVGhlIGF0dHJpYnV0ZXM6CisKKwkJdHlwZQkJLSB2YWx1ZSAxLi43IGZvciBpbnRlcnByZXRpbmcgdGhlIGRhdGEKKwkJCQkxOiB1bmljb2RlIHN0cmluZworCQkJCTI6IHVuaWNvZGUgc3RyaW5nIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUKKwkJCQkzOiBiaW5hcnkKKwkJCQk0OiBsaXR0bGUtZW5kaWFuIDMyLWJpdAorCQkJCTU6IGJpZy1lbmRpYW4gMzItYml0CisJCQkJNjogdW5pY29kZSBzdHJpbmcgd2l0aCBhIHN5bWJvbGljIGxpbmsKKwkJCQk3OiBtdWx0aXBsZSB1bmljb2RlIHN0cmluZ3MKKwkJZGF0YQkJLSBibG9iIG9mIGRhdGEgdG8gYmUgaW50ZXJwcmV0ZWQgZGVwZW5kaW5nIG9uCisJCQkJdHlwZQorCiBXaGF0OgkJL2NvbmZpZy91c2ItZ2FkZ2V0L2dhZGdldC9zdHJpbmdzCiBEYXRlOgkJSnVuIDIwMTMKIEtlcm5lbFZlcnNpb246CTMuMTEKQEAgLTc5LDMgKzExMywxNCBAQAogCQlwcm9kdWN0CQktIGdhZGdldCdzIHByb2R1Y3QgZGVzY3JpcHRpb24KIAkJbWFudWZhY3R1cmVyCS0gZ2FkZ2V0J3MgbWFudWZhY3R1cmVyIGRlc2NyaXB0aW9uCiAKK1doYXQ6CQkvY29uZmlnL3VzYi1nYWRnZXQvZ2FkZ2V0L29zX2Rlc2MKK0RhdGU6CQlNYXkgMjAxNAorS2VybmVsVmVyc2lvbjoJMy4xNgorRGVzY3JpcHRpb246CisJCVRoaXMgZ3JvdXAgY29udGFpbnMgIk9TIFN0cmluZyIgZXh0ZW5zaW9uIGhhbmRsaW5nIGF0dHJpYnV0ZXMuCisKKwkJdXNlCQktIGZsYWcgdHVybmluZyAiT1MgRGVzY3RpcHRvcnMiIHN1cHBvcnQgb24vb2ZmCisJCWJfdmVuZG9yX2NvZGUJLSBvbmUtYnl0ZSB2YWx1ZSB1c2VkIGZvciBjdXN0b20gcGVyLWRldmljZSBhbmQKKwkJCQlwZXItaW50ZXJmYWNlIHJlcXVlc3RzCisJCXF3X3NpZ24JCS0gYW4gaWRlbnRpZmllciB0byBiZSByZXBvcnRlZCBhcyAiT1MgU3RyaW5nIgorCQkJCXByb3BlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtaWlvIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtaWlvCmluZGV4IDZlMDJjNTAuLmE5NzU3ZGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWlpbworKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1paW8KQEAgLTExNCwxNCArMTE0LDE3IEBACiBXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fdGVtcFhfcmF3CiBXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fdGVtcF94X3JhdwogV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2lpbzpkZXZpY2VYL2luX3RlbXBfeV9yYXcKLVdoYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9pbl90ZW1wX3pfcmF3CitXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fdGVtcF9hbWJpZW50X3JhdworV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2lpbzpkZXZpY2VYL2luX3RlbXBfb2JqZWN0X3JhdwogS2VybmVsVmVyc2lvbjoJMi42LjM1CiBDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoKIAkJUmF3ICh1bnNjYWxlZCBubyBiaWFzIHJlbW92YWwgZXRjLikgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQuCiAJCUlmIGFuIGF4aXMgaXMgc3BlY2lmaWVkIGl0IGdlbmVyYWxseSBtZWFucyB0aGF0IHRoZSB0ZW1wZXJhdHVyZQogCQlzZW5zb3IgaXMgYXNzb2NpYXRlZCB3aXRoIG9uZSBwYXJ0IG9mIGEgY29tcG91bmQgZGV2aWNlIChlLmcuCi0JCWEgZ3lyb3Njb3BlIGF4aXMpLiBVbml0cyBhZnRlciBhcHBsaWNhdGlvbiBvZiBzY2FsZSBhbmQgb2Zmc2V0CisJCWEgZ3lyb3Njb3BlIGF4aXMpLiBUaGUgYW1iaWVudCBhbmQgb2JqZWN0IG1vZGlmaWVycyBkaXN0aW5ndWlzaAorCQliZXR3ZWVuIGFtYmllbnQgKHJlZmVyZW5jZSkgYW5kIGRpc3RhbnQgdGVtcGVyYXR1cmUgZm9yIGNvbnRhY3QtCisJCWxlc3MgbWVhc3VyZW1lbnRzLiBVbml0cyBhZnRlciBhcHBsaWNhdGlvbiBvZiBzY2FsZSBhbmQgb2Zmc2V0CiAJCWFyZSBtaWxsaSBkZWdyZWVzIENlbHNpdXMuCiAKIFdoYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9pbl90ZW1wWF9pbnB1dApAQCAtMjEwLDYgKzIxMywxNCBAQAogRGVzY3JpcHRpb246CiAJCVNjYWxlZCBodW1pZGl0eSBtZWFzdXJlbWVudCBpbiBtaWxsaSBwZXJjZW50LgogCitXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fWF9tZWFuX3JhdworS2VybmVsVmVyc2lvbjoJMy41CitDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJQXZlcmFnZWQgcmF3IG1lYXN1cmVtZW50IGZyb20gY2hhbm5lbCBYLiBUaGUgbnVtYmVyIG9mIHZhbHVlcworCQl1c2VkIGZvciBhdmVyYWdpbmcgaXMgZGV2aWNlIHNwZWNpZmljLiBUaGUgY29udmVydGluZyBydWxlcyBmb3IKKwkJbm9ybWFsIHJhdyB2YWx1ZXMgYWxzbyBhcHBsaWVzIHRvIHRoZSBhdmVyYWdlZCByYXcgdmFsdWVzLgorCiBXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fYWNjZWxfb2Zmc2V0CiBXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fYWNjZWxfeF9vZmZzZXQKIFdoYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9pbl9hY2NlbF95X29mZnNldApAQCAtNzg0LDYgKzc5NSw3IEBACiBXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvc2Nhbl9lbGVtZW50cy9pbl9pbmNsaV95X2VuCiBXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvc2Nhbl9lbGVtZW50cy9pbl9wcmVzc3VyZVlfZW4KIFdoYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9zY2FuX2VsZW1lbnRzL2luX3ByZXNzdXJlX2VuCitXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvc2Nhbl9lbGVtZW50cy9pbl9yb3RfcXVhdGVybmlvbl9lbgogS2VybmVsVmVyc2lvbjoJMi42LjM3CiBDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoKQEAgLTc5OSw2ICs4MTEsNyBAQAogV2hhdDoJCS9zeXMvLi4uL2lpbzpkZXZpY2VYL3NjYW5fZWxlbWVudHMvaW5fdGltZXN0YW1wX3R5cGUKIFdoYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9zY2FuX2VsZW1lbnRzL2luX3ByZXNzdXJlWV90eXBlCiBXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvc2Nhbl9lbGVtZW50cy9pbl9wcmVzc3VyZV90eXBlCitXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvc2Nhbl9lbGVtZW50cy9pbl9yb3RfcXVhdGVybmlvbl90eXBlCiBLZXJuZWxWZXJzaW9uOgkyLjYuMzcKIENvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKIERlc2NyaXB0aW9uOgpAQCAtODQ1LDYgKzg1OCw3IEBACiBXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvc2Nhbl9lbGVtZW50cy9pbl90aW1lc3RhbXBfaW5kZXgKIFdoYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9zY2FuX2VsZW1lbnRzL2luX3ByZXNzdXJlWV9pbmRleAogV2hhdDoJCS9zeXMvLi4uL2lpbzpkZXZpY2VYL3NjYW5fZWxlbWVudHMvaW5fcHJlc3N1cmVfaW5kZXgKK1doYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9zY2FuX2VsZW1lbnRzL2luX3JvdF9xdWF0ZXJuaW9uX2luZGV4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMzcKIENvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKIERlc2NyaXB0aW9uOgpAQCAtODgxLDYgKzg5NSwyNSBAQAogCQlvbi1jaGlwIEVFUFJPTS4gQWZ0ZXIgcG93ZXItdXAgb3IgY2hpcCByZXNldCB0aGUgZGV2aWNlIHdpbGwKIAkJYXV0b21hdGljYWxseSBsb2FkIHRoZSBzYXZlZCBjb25maWd1cmF0aW9uLgogCitXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvaW5faWxsdW1pbmFuY2VZX2lucHV0CitXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvaW5faWxsdW1pbmFuY2VZX3JhdworV2hhdDoJCS9zeXMvLi4uL2lpbzpkZXZpY2VYL2luX2lsbHVtaW5hbmNlWV9tZWFuX3JhdworS2VybmVsVmVyc2lvbjoJMy40CitDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJSWxsdW1pbmFuY2UgbWVhc3VyZW1lbnQsIHVuaXRzIGFmdGVyIGFwcGxpY2F0aW9uIG9mIHNjYWxlCisJCWFuZCBvZmZzZXQgYXJlIGx1eC4KKworV2hhdDoJCS9zeXMvLi4uL2lpbzpkZXZpY2VYL2luX2ludGVuc2l0eVlfcmF3CitXaGF0OgkJL3N5cy8uLi4vaWlvOmRldmljZVgvaW5faW50ZW5zaXR5WV9pcl9yYXcKK1doYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9pbl9pbnRlbnNpdHlZX2JvdGhfcmF3CitLZXJuZWxWZXJzaW9uOgkzLjQKK0NvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlVbml0LWxlc3MgbGlnaHQgaW50ZW5zaXR5LiBNb2RpZmllcnMgYm90aCBhbmQgaXIgaW5kaWNhdGUKKwkJdGhhdCBtZWFzdXJlbWVudHMgY29udGFpbnMgdmlzaWJsZSBhbmQgaW5mcmFyZWQgbGlnaHQKKwkJY29tcG9uZW50cyBvciBqdXN0IGluZnJhcmVkIGxpZ2h0LCByZXNwZWN0aXZlbHkuCisKIFdoYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9pbl9pbnRlbnNpdHlfcmVkX2ludGVncmF0aW9uX3RpbWUKIFdoYXQ6CQkvc3lzLy4uLi9paW86ZGV2aWNlWC9pbl9pbnRlbnNpdHlfZ3JlZW5faW50ZWdyYXRpb25fdGltZQogV2hhdDoJCS9zeXMvLi4uL2lpbzpkZXZpY2VYL2luX2ludGVuc2l0eV9ibHVlX2ludGVncmF0aW9uX3RpbWUKQEAgLTg5MSwzICs5MjQsMTIgQEAKIERlc2NyaXB0aW9uOgogCQlUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIGdldC9zZXQgdGhlIGludGVncmF0aW9uIHRpbWUgaW4KIAkJc2Vjb25kcy4KKworV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2lpbzpkZXZpY2VYL2luX3JvdF9xdWF0ZXJuaW9uX3JhdworS2VybmVsVmVyc2lvbjoJMy4xNQorQ29udGFjdDoJbGludXgtaWlvQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisJCVJhdyB2YWx1ZSBvZiBxdWF0ZXJuaW9uIGNvbXBvbmVudHMgdXNpbmcgYSBmb3JtYXQKKwkJeCB5IHogdy4gSGVyZSB4LCB5LCBhbmQgeiBjb21wb25lbnQgcmVwcmVzZW50cyB0aGUgYXhpcyBhYm91dAorCQl3aGljaCBhIHJvdGF0aW9uIHdpbGwgb2NjdXIgYW5kIHcgY29tcG9uZW50IHJlcHJlc2VudHMgdGhlCisJCWFtb3VudCBvZiByb3RhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWlpby1wcm94aW1pdHktYXMzOTM1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtaWlvLXByb3hpbWl0eS1hczM5MzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwOGM1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWlpby1wcm94aW1pdHktYXMzOTM1CkBAIC0wLDAgKzEsMTYgQEAKK1doYXQJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2lpbzpkZXZpY2VYL2luX3Byb3hpbWl0eV9yYXcKK0RhdGU6CQlNYXJjaCAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE1CitDb250YWN0OglNYXR0IFJhbm9zdGF5IDxtcmFub3N0YXlAZ21haWwuY29tPgorRGVzY3JpcHRpb246CisJCUdldCB0aGUgY3VycmVudCBkaXN0YW5jZSBpbiBtZXRlcnMgb2Ygc3Rvcm0gKDFrbSBzdGVwcykKKwkJMTAwMC00MDAwMCA9IGRpc3RhbmNlIGluIG1ldGVycworCitXaGF0CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9zZW5zb3Jfc2Vuc2l0aXZpdHkKK0RhdGU6CQlNYXJjaCAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE1CitDb250YWN0OglNYXR0IFJhbm9zdGF5IDxtcmFub3N0YXlAZ21haWwuY29tPgorRGVzY3JpcHRpb246CisJCVNob3cgb3Igc2V0IHRoZSBnYWluIGJvb3N0IG9mIHRoZSBhbXAsIGZyb20gMC0zMSByYW5nZS4KKwkJMTggPSBpbmRvb3JzIChkZWZhdWx0KQorCQkxNCA9IG91dGRvb3JzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKaW5kZXggYWI4ZDc2ZC4uNjYxNWZkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQpAQCAtMjUwLDMgKzI1MCwyNCBAQAogCQl2YWxpZC4gIEZvciBleGFtcGxlLCB3cml0aW5nIGEgMiB0byB0aGlzIGZpbGUgd2hlbiBzcmlvdl9udW12ZnMKIAkJaXMgbm90IDAgYW5kIG5vdCAyIGFscmVhZHkgd2lsbCByZXR1cm4gYW4gZXJyb3IuIFdyaXRpbmcgYSAxMAogCQl3aGVuIHRoZSB2YWx1ZSBvZiBzcmlvdl90b3RhbHZmcyBpcyA4IHdpbGwgcmV0dXJuIGFuIGVycm9yLgorCitXaGF0OgkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL2RyaXZlcl9vdmVycmlkZQorRGF0ZToJCUFwcmlsIDIwMTQKK0NvbnRhY3Q6CUFsZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGFsbG93cyB0aGUgZHJpdmVyIGZvciBhIGRldmljZSB0byBiZSBzcGVjaWZpZWQgd2hpY2gKKwkJd2lsbCBvdmVycmlkZSBzdGFuZGFyZCBzdGF0aWMgYW5kIGR5bmFtaWMgSUQgbWF0Y2hpbmcuICBXaGVuCisJCXNwZWNpZmllZCwgb25seSBhIGRyaXZlciB3aXRoIGEgbmFtZSBtYXRjaGluZyB0aGUgdmFsdWUgd3JpdHRlbgorCQl0byBkcml2ZXJfb3ZlcnJpZGUgd2lsbCBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIGJpbmQgdG8gdGhlCisJCWRldmljZS4gIFRoZSBvdmVycmlkZSBpcyBzcGVjaWZpZWQgYnkgd3JpdGluZyBhIHN0cmluZyB0byB0aGUKKwkJZHJpdmVyX292ZXJyaWRlIGZpbGUgKGVjaG8gcGNpLXN0dWIgPiBkcml2ZXJfb3ZlcnJpZGUpIGFuZAorCQltYXkgYmUgY2xlYXJlZCB3aXRoIGFuIGVtcHR5IHN0cmluZyAoZWNobyA+IGRyaXZlcl9vdmVycmlkZSkuCisJCVRoaXMgcmV0dXJucyB0aGUgZGV2aWNlIHRvIHN0YW5kYXJkIG1hdGNoaW5nIHJ1bGVzIGJpbmRpbmcuCisJCVdyaXRpbmcgdG8gZHJpdmVyX292ZXJyaWRlIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgdW5iaW5kIHRoZQorCQlkZXZpY2UgZnJvbSBpdHMgY3VycmVudCBkcml2ZXIgb3IgbWFrZSBhbnkgYXR0ZW1wdCB0bworCQlhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIHNwZWNpZmllZCBkcml2ZXIuICBJZiBubyBkcml2ZXIgd2l0aCBhCisJCW1hdGNoaW5nIG5hbWUgaXMgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUga2VybmVsLCB0aGUgZGV2aWNlCisJCXdpbGwgbm90IGJpbmQgdG8gYW55IGRyaXZlci4gIFRoaXMgYWxzbyBhbGxvd3MgZGV2aWNlcyB0bworCQlvcHQtb3V0IG9mIGRyaXZlciBiaW5kaW5nIHVzaW5nIGEgZHJpdmVyX292ZXJyaWRlIG5hbWUgc3VjaCBhcworCQkibm9uZSIuICBPbmx5IGEgc2luZ2xlIGRyaXZlciBtYXkgYmUgc3BlY2lmaWVkIGluIHRoZSBvdmVycmlkZSwKKwkJdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgcGFyc2luZyBkZWxpbWl0ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXRoaW5nbSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC10aGluZ20KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiY2ZmZWUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXRoaW5nbQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvYmxpbmsxOjo8c2VyaWFsPi9yZ2IKLURhdGU6CQlKYW51YXJ5IDIwMTMKLUNvbnRhY3Q6CVZpdmllbiBEaWRlbG90IDx2aXZpZW4uZGlkZWxvdEBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KLURlc2NyaXB0aW9uOglUaGUgVGhpbmdNIGJsaW5rMSBpcyBhbiBVU0IgUkdCIExFRC4gVGhlIGNvbG9yIG5vdGF0aW9uIGlzCi0JCTMtYnl0ZSBoZXhhZGVjaW1hbC4gUmVhZCB0aGlzIGF0dHJpYnV0ZSB0byBnZXQgdGhlIGxhc3Qgc2V0Ci0JCWNvbG9yLiBXcml0ZSB0aGUgMjQtYml0IGhleGFkZWNpbWFsIGNvbG9yIHRvIGNoYW5nZSB0aGUgY3VycmVudAotCQlMRUQgY29sb3IuIFRoZSBkZWZhdWx0IGNvbG9yIGlzIGZ1bGwgd2hpdGUgKDB4RkZGRkZGKS4KLQkJRm9yIGluc3RhbmNlLCBzZXQgdGhlIGNvbG9yIHRvIGdyZWVuIHdpdGg6IGVjaG8gMDBGRjAwID4gcmdiCi0KLVdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvYmxpbmsxOjo8c2VyaWFsPi9mYWRlCi1EYXRlOgkJSmFudWFyeSAyMDEzCi1Db250YWN0OglWaXZpZW4gRGlkZWxvdCA8dml2aWVuLmRpZGVsb3RAc2F2b2lyZmFpcmVsaW51eC5jb20+Ci1EZXNjcmlwdGlvbjoJVGhpcyBhdHRyaWJ1dGUgYWxsb3dzIHRvIHNldCBhIGZhZGUgdGltZSBpbiBtaWxsaXNlY29uZHMgZm9yCi0JCXRoZSBuZXh0IGNvbG9yIGNoYW5nZS4gUmVhZCB0aGUgYXR0cmlidXRlIHRvIGtub3cgdGhlIGN1cnJlbnQKLQkJZmFkZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gMCAobm8gZmFkZSB0aW1lKS4gRm9yCi0JCWluc3RhbmNlLCBzZXQgYSBmYWRlIHRpbWUgb2YgMiBzZWNvbmRzIHdpdGg6IGVjaG8gMjAwMCA+IGZhZGUKLQotV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy9ibGluazE6OjxzZXJpYWw+L3BsYXkKLURhdGU6CQlKYW51YXJ5IDIwMTMKLUNvbnRhY3Q6CVZpdmllbiBEaWRlbG90IDx2aXZpZW4uZGlkZWxvdEBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KLURlc2NyaXB0aW9uOglUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHBsYXkvcGF1c2UgdGhlIGxpZ2h0IHBhdHRlcm5zLiBXcml0ZSAxCi0JCXRvIHN0YXJ0IHBsYXlpbmcsIDAgdG8gc3RvcC4gUmVhZGluZyB0aGlzIGF0dHJpYnV0ZSByZXR1cm5zIHRoZQotCQljdXJyZW50IHBsYXlpbmcgc3RhdHVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1icmNtc3RiLWdpc2ItYXJiIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1icmNtc3RiLWdpc2ItYXJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmFkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWJyY21zdGItZ2lzYi1hcmIKQEAgLTAsMCArMSw4IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLy4uL2dpc2JfYXJiX3RpbWVvdXQKK0RhdGU6CQlNYXkgMjAxNAorS2VybmVsVmVyc2lvbjoJMy4xNworQ29udGFjdDoJRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoKKwkJUmV0dXJucyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgcmF3IHRpbWVvdXQgdmFsdWUgb2YgdGhlCisJCUJyb2FkY29tIFNldCBUb3AgQm94IGludGVybmFsIEdJU0IgYnVzIGFyYml0ZXIuIE1pbmltdW0gdmFsdWUKKwkJaXMgMSwgYW5kIG1heGltdW0gdmFsdWUgaXMgMHhmZmZmZmZmZi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tY2hpcGlkZWEtdXNiLW90ZyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tY2hpcGlkZWEtdXNiLW90ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTFjNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1jaGlwaWRlYS11c2Itb3RnCkBAIC0wLDAgKzEsNTYgQEAKK1doYXQ6CQkvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYV9idXNfcmVxCitEYXRlOgkJRmViIDIwMTQKK0NvbnRhY3Q6CUxpIEp1biA8YjQ3NjI0QGZyZWVzY2FsZS5jb20+CitEZXNjcmlwdGlvbjoKKwkJQ2FuIGJlIHNldCBhbmQgcmVhZC4KKwkJU2V0IGFfYnVzX3JlcShBLWRldmljZSBidXMgcmVxdWVzdCkgaW5wdXQgdG8gYmUgMSBpZgorCQl0aGUgYXBwbGljYXRpb24gcnVubmluZyBvbiB0aGUgQS1kZXZpY2Ugd2FudHMgdG8gdXNlIHRoZSBidXMsCisJCWFuZCB0byBiZSAwIHdoZW4gdGhlIGFwcGxpY2F0aW9uIG5vIGxvbmdlciB3YW50cyB0byB1c2UKKwkJdGhlIGJ1cyhvciB3YW50cyB0byB3b3JrIGFzIHBlcmlwaGVyYWwpLiBhX2J1c19yZXEgY2FuIGFsc28KKwkJYmUgc2V0IHRvIDEgYnkga2VybmVsIGluIHJlc3BvbnNlIHRvIHJlbW90ZSB3YWtldXAgc2lnbmFsaW5nCisJCWZyb20gdGhlIEItZGV2aWNlLCB0aGUgQS1kZXZpY2Ugc2hvdWxkIGRlY2lkZSB0byByZXN1bWUgdGhlIGJ1cy4KKworCQlWYWxpZCB2YWx1ZXMgYXJlICIxIiBhbmQgIjAiLgorCisJCVJlYWRpbmc6IHJldHVybnMgMSBpZiB0aGUgYXBwbGljYXRpb24gcnVubmluZyBvbiB0aGUgQS1kZXZpY2UKKwkJaXMgdXNpbmcgdGhlIGJ1cyBhcyBob3N0IHJvbGUsIG90aGVyd2lzZSAwLgorCitXaGF0OgkJL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy9jaV9oZHJjLjAvaW5wdXRzL2FfYnVzX2Ryb3AKK0RhdGU6CQlGZWIgMjAxNAorQ29udGFjdDoJTGkgSnVuIDxiNDc2MjRAZnJlZXNjYWxlLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlDYW4gYmUgc2V0IGFuZCByZWFkCisJCVRoZSBhX2J1c19kcm9wKEEtZGV2aWNlIGJ1cyBkcm9wKSBpbnB1dCBpcyAxIHdoZW4gdGhlCisJCWFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gdGhlIEEtZGV2aWNlIHdhbnRzIHRvIHBvd2VyIGRvd24KKwkJdGhlIGJ1cywgYW5kIGlzIDAgb3RoZXJ3aXNlLCBXaGVuIGFfYnVzX2Ryb3AgaXMgMSwgdGhlbgorCQl0aGUgYV9idXNfcmVxIHNoYWxsIGJlIDAuCisKKwkJVmFsaWQgdmFsdWVzIGFyZSAiMSIgYW5kICIwIi4KKworCQlSZWFkaW5nOiByZXR1cm5zIDEgaWYgdGhlIGJ1cyBpcyBvZmYodmJ1cyBpcyB0dXJuZWQgb2ZmKSBieQorCQkJIEEtZGV2aWNlLCBvdGhlcndpc2UgMC4KKworV2hhdDoJCS9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXMvY2lfaGRyYy4wL2lucHV0cy9iX2J1c19yZXEKK0RhdGU6CQlGZWIgMjAxNAorQ29udGFjdDoJTGkgSnVuIDxiNDc2MjRAZnJlZXNjYWxlLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlDYW4gYmUgc2V0IGFuZCByZWFkLgorCQlUaGUgYl9idXNfcmVxKEItZGV2aWNlIGJ1cyByZXF1ZXN0KSBpbnB1dCBpcyAxIGR1cmluZyB0aGUgdGltZQorCQl0aGF0IHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIG9uIHRoZSBCLWRldmljZSB3YW50cyB0byB1c2UgdGhlCisJCWJ1cyBhcyBob3N0LCBhbmQgaXMgMCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBubyBsb25nZXIgd2FudHMgdG8KKwkJd29yayBhcyBob3N0IGFuZCBkZWNpZGVzIHRvIHN3aXRjaCBiYWNrIHRvIGJlIHBlcmlwaGVyYWwuCisKKwkJVmFsaWQgdmFsdWVzIGFyZSAiMSIgYW5kICIwIi4KKworCQlSZWFkaW5nOiByZXR1cm5zIGlmIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIG9uIHRoZSBCIGRldmljZQorCQlpcyB1c2luZyB0aGUgYnVzIGFzIGhvc3Qgcm9sZSwgb3RoZXJ3aXNlIDAuCisKK1doYXQ6CQkvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYV9jbHJfZXJyCitEYXRlOgkJRmViIDIwMTQKK0NvbnRhY3Q6CUxpIEp1biA8YjQ3NjI0QGZyZWVzY2FsZS5jb20+CitEZXNjcmlwdGlvbjoKKwkJT25seSBjYW4gYmUgc2V0LgorCQlUaGUgYV9jbHJfZXJyKEEtZGV2aWNlIFZidXMgZXJyb3IgY2xlYXIpIGlucHV0IGlzIHVzZWQgdG8gY2xlYXIKKwkJdmJ1cyBlcnJvciwgdGhlbiBBLWRldmljZSB3aWxsIHBvd2VyIGRvd24gdGhlIGJ1cy4KKworCQlWYWxpZCB2YWx1ZSBpcyAiMSIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCAwN2M3NWQxLi4yMjU0ZGIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCkBAIC03Myw2ICs3MywxMSBAQAogWW91IHdpbGwgbmVlZCBwZXJsIDUgYW5kIHRoZSBmb2xsb3dpbmcgbW9kdWxlczogR2V0b3B0OjpMb25nLCBHZXRvcHQ6OlN0ZCwKIEZpbGU6OkJhc2VuYW1lLCBhbmQgRmlsZTo6RmluZCB0byBidWlsZCB0aGUga2VybmVsLgogCitCQworLS0KKworWW91IHdpbGwgbmVlZCBiYyB0byBidWlsZCBrZXJuZWxzIDMuMTAgYW5kIGhpZ2hlcgorCiAKIFN5c3RlbSB1dGlsaXRpZXMKID09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEktSE9XVE8udHh0CmluZGV4IDVlOTgzMDMuLmRjYmJlMzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS1IT1dUTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLUhPV1RPLnR4dApAQCAtOSwxNiArOSw3NiBAQAogd2l0aCBleGFtcGxlIHBzZXVkby1jb2RlLiAgRm9yIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLCBzZWUKIERNQS1BUEkudHh0LgogCi1Nb3N0IG9mIHRoZSA2NGJpdCBwbGF0Zm9ybXMgaGF2ZSBzcGVjaWFsIGhhcmR3YXJlIHRoYXQgdHJhbnNsYXRlcyBidXMKLWFkZHJlc3NlcyAoRE1BIGFkZHJlc3NlcykgaW50byBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8KLWhvdyBwYWdlIHRhYmxlcyBhbmQvb3IgYSBUTEIgdHJhbnNsYXRlcyB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbAotYWRkcmVzc2VzIG9uIGEgQ1BVLiAgVGhpcyBpcyBuZWVkZWQgc28gdGhhdCBlLmcuIFBDSSBkZXZpY2VzIGNhbgotYWNjZXNzIHdpdGggYSBTaW5nbGUgQWRkcmVzcyBDeWNsZSAoMzJiaXQgRE1BIGFkZHJlc3MpIGFueSBwYWdlIGluIHRoZQotNjRiaXQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gIFByZXZpb3VzbHkgaW4gTGludXggdGhvc2UgNjRiaXQKLXBsYXRmb3JtcyBoYWQgdG8gc2V0IGFydGlmaWNpYWwgbGltaXRzIG9uIHRoZSBtYXhpbXVtIFJBTSBzaXplIGluIHRoZQotc3lzdGVtLCBzbyB0aGF0IHRoZSB2aXJ0X3RvX2J1cygpIHN0YXRpYyBzY2hlbWUgd29ya3MgKHRoZSBETUEgYWRkcmVzcwotdHJhbnNsYXRpb24gdGFibGVzIHdlcmUgc2ltcGx5IGZpbGxlZCBvbiBib290dXAgdG8gbWFwIGVhY2ggYnVzCi1hZGRyZXNzIHRvIHRoZSBwaHlzaWNhbCBwYWdlIF9fcGEoYnVzX3RvX3ZpcnQoKSkpLgorICAgICAgICAgICAgICAgICAgICAgICBDUFUgYW5kIERNQSBhZGRyZXNzZXMKKworVGhlcmUgYXJlIHNldmVyYWwga2luZHMgb2YgYWRkcmVzc2VzIGludm9sdmVkIGluIHRoZSBETUEgQVBJLCBhbmQgaXQncworaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzLgorCitUaGUga2VybmVsIG5vcm1hbGx5IHVzZXMgdmlydHVhbCBhZGRyZXNzZXMuICBBbnkgYWRkcmVzcyByZXR1cm5lZCBieQora21hbGxvYygpLCB2bWFsbG9jKCksIGFuZCBzaW1pbGFyIGludGVyZmFjZXMgaXMgYSB2aXJ0dWFsIGFkZHJlc3MgYW5kIGNhbgorYmUgc3RvcmVkIGluIGEgInZvaWQgKiIuCisKK1RoZSB2aXJ0dWFsIG1lbW9yeSBzeXN0ZW0gKFRMQiwgcGFnZSB0YWJsZXMsIGV0Yy4pIHRyYW5zbGF0ZXMgdmlydHVhbAorYWRkcmVzc2VzIHRvIENQVSBwaHlzaWNhbCBhZGRyZXNzZXMsIHdoaWNoIGFyZSBzdG9yZWQgYXMgInBoeXNfYWRkcl90IiBvcgorInJlc291cmNlX3NpemVfdCIuICBUaGUga2VybmVsIG1hbmFnZXMgZGV2aWNlIHJlc291cmNlcyBsaWtlIHJlZ2lzdGVycyBhcworcGh5c2ljYWwgYWRkcmVzc2VzLiAgVGhlc2UgYXJlIHRoZSBhZGRyZXNzZXMgaW4gL3Byb2MvaW9tZW0uICBUaGUgcGh5c2ljYWwKK2FkZHJlc3MgaXMgbm90IGRpcmVjdGx5IHVzZWZ1bCB0byBhIGRyaXZlcjsgaXQgbXVzdCB1c2UgaW9yZW1hcCgpIHRvIG1hcAordGhlIHNwYWNlIGFuZCBwcm9kdWNlIGEgdmlydHVhbCBhZGRyZXNzLgorCitJL08gZGV2aWNlcyB1c2UgYSB0aGlyZCBraW5kIG9mIGFkZHJlc3M6IGEgImJ1cyBhZGRyZXNzIiBvciAiRE1BIGFkZHJlc3MiLgorSWYgYSBkZXZpY2UgaGFzIHJlZ2lzdGVycyBhdCBhbiBNTUlPIGFkZHJlc3MsIG9yIGlmIGl0IHBlcmZvcm1zIERNQSB0byByZWFkCitvciB3cml0ZSBzeXN0ZW0gbWVtb3J5LCB0aGUgYWRkcmVzc2VzIHVzZWQgYnkgdGhlIGRldmljZSBhcmUgYnVzIGFkZHJlc3Nlcy4KK0luIHNvbWUgc3lzdGVtcywgYnVzIGFkZHJlc3NlcyBhcmUgaWRlbnRpY2FsIHRvIENQVSBwaHlzaWNhbCBhZGRyZXNzZXMsIGJ1dAoraW4gZ2VuZXJhbCB0aGV5IGFyZSBub3QuICBJT01NVXMgYW5kIGhvc3QgYnJpZGdlcyBjYW4gcHJvZHVjZSBhcmJpdHJhcnkKK21hcHBpbmdzIGJldHdlZW4gcGh5c2ljYWwgYW5kIGJ1cyBhZGRyZXNzZXMuCisKK0hlcmUncyBhIHBpY3R1cmUgYW5kIHNvbWUgZXhhbXBsZXM6CisKKyAgICAgICAgICAgICAgIENQVSAgICAgICAgICAgICAgICAgIENQVSAgICAgICAgICAgICAgICAgIEJ1cworICAgICAgICAgICAgIFZpcnR1YWwgICAgICAgICAgICAgIFBoeXNpY2FsICAgICAgICAgICAgIEFkZHJlc3MKKyAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgICAgU3BhY2UKKyAgICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgICAgU3BhY2UKKworICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgICAgICAgICstLS0tLS0rICAgICAgICAgICAgICstLS0tLS0rCisgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgfE1NSU8gIHwgICBPZmZzZXQgICAgfCAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgVmlydHVhbCAgICB8U3BhY2UgfCAgIGFwcGxpZWQgICB8ICAgICAgfAorICAgICAgICAgIEMgKy0tLS0tLS0rIC0tLS0tLS0tPiBCICstLS0tLS0rIC0tLS0tLS0tLS0+ICstLS0tLS0rIEEKKyAgICAgICAgICAgIHwgICAgICAgfCAgbWFwcGluZyAgICB8ICAgICAgfCAgIGJ5IGhvc3QgICB8ICAgICAgfAorICArLS0tLS0rICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgYnJpZGdlICAgIHwgICAgICB8ICAgKy0tLS0tLS0tKworICB8ICAgICB8ICAgfCAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0rICAgICAgICAgICAgIHwgICAgICB8ICAgfCAgICAgICAgfAorICB8IENQVSB8ICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgUkFNICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgfCBEZXZpY2UgfAorICB8ICAgICB8ICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgfCAgICAgICAgfAorICArLS0tLS0rICAgKy0tLS0tLS0rICAgICAgICAgICAgICstLS0tLS0rICAgICAgICAgICAgICstLS0tLS0rICAgKy0tLS0tLS0tKworICAgICAgICAgICAgfCAgICAgICB8ICBWaXJ0dWFsICAgIHxCdWZmZXJ8ICAgTWFwcGluZyAgIHwgICAgICB8CisgICAgICAgICAgWCArLS0tLS0tLSsgLS0tLS0tLS0+IFkgKy0tLS0tLSsgPC0tLS0tLS0tLS0gKy0tLS0tLSsgWgorICAgICAgICAgICAgfCAgICAgICB8ICBtYXBwaW5nICAgIHwgUkFNICB8ICAgYnkgSU9NTVUKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgfAorICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8CisgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgICAgICAgKy0tLS0tLSsKKworRHVyaW5nIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzLCB0aGUga2VybmVsIGxlYXJucyBhYm91dCBJL08gZGV2aWNlcyBhbmQKK3RoZWlyIE1NSU8gc3BhY2UgYW5kIHRoZSBob3N0IGJyaWRnZXMgdGhhdCBjb25uZWN0IHRoZW0gdG8gdGhlIHN5c3RlbS4gIEZvcgorZXhhbXBsZSwgaWYgYSBQQ0kgZGV2aWNlIGhhcyBhIEJBUiwgdGhlIGtlcm5lbCByZWFkcyB0aGUgYnVzIGFkZHJlc3MgKEEpCitmcm9tIHRoZSBCQVIgYW5kIGNvbnZlcnRzIGl0IHRvIGEgQ1BVIHBoeXNpY2FsIGFkZHJlc3MgKEIpLiAgVGhlIGFkZHJlc3MgQgoraXMgc3RvcmVkIGluIGEgc3RydWN0IHJlc291cmNlIGFuZCB1c3VhbGx5IGV4cG9zZWQgdmlhIC9wcm9jL2lvbWVtLiAgV2hlbiBhCitkcml2ZXIgY2xhaW1zIGEgZGV2aWNlLCBpdCB0eXBpY2FsbHkgdXNlcyBpb3JlbWFwKCkgdG8gbWFwIHBoeXNpY2FsIGFkZHJlc3MKK0IgYXQgYSB2aXJ0dWFsIGFkZHJlc3MgKEMpLiAgSXQgY2FuIHRoZW4gdXNlLCBlLmcuLCBpb3JlYWQzMihDKSwgdG8gYWNjZXNzCit0aGUgZGV2aWNlIHJlZ2lzdGVycyBhdCBidXMgYWRkcmVzcyBBLgorCitJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIERNQSwgdGhlIGRyaXZlciBzZXRzIHVwIGEgYnVmZmVyIHVzaW5nIGttYWxsb2MoKSBvcgorYSBzaW1pbGFyIGludGVyZmFjZSwgd2hpY2ggcmV0dXJucyBhIHZpcnR1YWwgYWRkcmVzcyAoWCkuICBUaGUgdmlydHVhbAorbWVtb3J5IHN5c3RlbSBtYXBzIFggdG8gYSBwaHlzaWNhbCBhZGRyZXNzIChZKSBpbiBzeXN0ZW0gUkFNLiAgVGhlIGRyaXZlcgorY2FuIHVzZSB2aXJ0dWFsIGFkZHJlc3MgWCB0byBhY2Nlc3MgdGhlIGJ1ZmZlciwgYnV0IHRoZSBkZXZpY2UgaXRzZWxmCitjYW5ub3QgYmVjYXVzZSBETUEgZG9lc24ndCBnbyB0aHJvdWdoIHRoZSBDUFUgdmlydHVhbCBtZW1vcnkgc3lzdGVtLgorCitJbiBzb21lIHNpbXBsZSBzeXN0ZW1zLCB0aGUgZGV2aWNlIGNhbiBkbyBETUEgZGlyZWN0bHkgdG8gcGh5c2ljYWwgYWRkcmVzcworWS4gIEJ1dCBpbiBtYW55IG90aGVycywgdGhlcmUgaXMgSU9NTVUgaGFyZHdhcmUgdGhhdCB0cmFuc2xhdGVzIGJ1cworYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgZS5nLiwgaXQgdHJhbnNsYXRlcyBaIHRvIFkuICBUaGlzIGlzIHBhcnQKK29mIHRoZSByZWFzb24gZm9yIHRoZSBETUEgQVBJOiB0aGUgZHJpdmVyIGNhbiBnaXZlIGEgdmlydHVhbCBhZGRyZXNzIFggdG8KK2FuIGludGVyZmFjZSBsaWtlIGRtYV9tYXBfc2luZ2xlKCksIHdoaWNoIHNldHMgdXAgYW55IHJlcXVpcmVkIElPTU1VCittYXBwaW5nIGFuZCByZXR1cm5zIHRoZSBidXMgYWRkcmVzcyBaLiAgVGhlIGRyaXZlciB0aGVuIHRlbGxzIHRoZSBkZXZpY2UgdG8KK2RvIERNQSB0byBaLCBhbmQgdGhlIElPTU1VIG1hcHMgaXQgdG8gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzIFkgaW4gc3lzdGVtCitSQU0uCiAKIFNvIHRoYXQgTGludXggY2FuIHVzZSB0aGUgZHluYW1pYyBETUEgbWFwcGluZywgaXQgbmVlZHMgc29tZSBoZWxwIGZyb20gdGhlCiBkcml2ZXJzLCBuYW1lbHkgaXQgaGFzIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgRE1BIGFkZHJlc3NlcyBzaG91bGQgYmUKQEAgLTI5LDE3ICs4OSwxNyBAQAogaGFyZHdhcmUgZXhpc3RzLgogCiBOb3RlIHRoYXQgdGhlIERNQSBBUEkgd29ya3Mgd2l0aCBhbnkgYnVzIGluZGVwZW5kZW50IG9mIHRoZSB1bmRlcmx5aW5nCi1taWNyb3Byb2Nlc3NvciBhcmNoaXRlY3R1cmUuIFlvdSBzaG91bGQgdXNlIHRoZSBETUEgQVBJIHJhdGhlciB0aGFuCi10aGUgYnVzIHNwZWNpZmljIERNQSBBUEkgKGUuZy4gcGNpX2RtYV8qKS4KK21pY3JvcHJvY2Vzc29yIGFyY2hpdGVjdHVyZS4gWW91IHNob3VsZCB1c2UgdGhlIERNQSBBUEkgcmF0aGVyIHRoYW4gdGhlCitidXMtc3BlY2lmaWMgRE1BIEFQSSwgaS5lLiwgdXNlIHRoZSBkbWFfbWFwXyooKSBpbnRlcmZhY2VzIHJhdGhlciB0aGFuIHRoZQorcGNpX21hcF8qKCkgaW50ZXJmYWNlcy4KIAogRmlyc3Qgb2YgYWxsLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQogCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotaXMgaW4geW91ciBkcml2ZXIuIFRoaXMgZmlsZSB3aWxsIG9idGFpbiBmb3IgeW91IHRoZSBkZWZpbml0aW9uIG9mIHRoZQotZG1hX2FkZHJfdCAod2hpY2ggY2FuIGhvbGQgYW55IHZhbGlkIERNQSBhZGRyZXNzIGZvciB0aGUgcGxhdGZvcm0pCi10eXBlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGV2ZXJ5d2hlcmUgeW91IGhvbGQgYSBETUEgKGJ1cykgYWRkcmVzcwotcmV0dXJuZWQgZnJvbSB0aGUgRE1BIG1hcHBpbmcgZnVuY3Rpb25zLgoraXMgaW4geW91ciBkcml2ZXIsIHdoaWNoIHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGRtYV9hZGRyX3QuICBUaGlzIHR5cGUKK2NhbiBob2xkIGFueSB2YWxpZCBETUEgb3IgYnVzIGFkZHJlc3MgZm9yIHRoZSBwbGF0Zm9ybSBhbmQgc2hvdWxkIGJlIHVzZWQKK2V2ZXJ5d2hlcmUgeW91IGhvbGQgYSBETUEgYWRkcmVzcyByZXR1cm5lZCBmcm9tIHRoZSBETUEgbWFwcGluZyBmdW5jdGlvbnMuCiAKIAkJCSBXaGF0IG1lbW9yeSBpcyBETUEnYWJsZT8KIApAQCAtMTIzLDkgKzE4Myw5IEBACiBpcyBhIGJpdCBtYXNrIGRlc2NyaWJpbmcgd2hpY2ggYml0cyBvZiBhbiBhZGRyZXNzIHlvdXIgZGV2aWNlCiBzdXBwb3J0cy4gIEl0IHJldHVybnMgemVybyBpZiB5b3VyIGNhcmQgY2FuIHBlcmZvcm0gRE1BIHByb3Blcmx5IG9uCiB0aGUgbWFjaGluZSBnaXZlbiB0aGUgYWRkcmVzcyBtYXNrIHlvdSBwcm92aWRlZC4gIEluIGdlbmVyYWwsIHRoZQotZGV2aWNlIHN0cnVjdCBvZiB5b3VyIGRldmljZSBpcyBlbWJlZGRlZCBpbiB0aGUgYnVzIHNwZWNpZmljIGRldmljZQotc3RydWN0IG9mIHlvdXIgZGV2aWNlLiAgRm9yIGV4YW1wbGUsIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdCBvZgoteW91ciBQQ0kgZGV2aWNlIGlzIHBkZXYtPmRldiAocGRldiBpcyBhIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2UKK2RldmljZSBzdHJ1Y3Qgb2YgeW91ciBkZXZpY2UgaXMgZW1iZWRkZWQgaW4gdGhlIGJ1cy1zcGVjaWZpYyBkZXZpY2UKK3N0cnVjdCBvZiB5b3VyIGRldmljZS4gIEZvciBleGFtcGxlLCAmcGRldi0+ZGV2IGlzIGEgcG9pbnRlciB0byB0aGUKK2RldmljZSBzdHJ1Y3Qgb2YgYSBQQ0kgZGV2aWNlIChwZGV2IGlzIGEgcG9pbnRlciB0byB0aGUgUENJIGRldmljZQogc3RydWN0IG9mIHlvdXIgZGV2aWNlKS4KIAogSWYgaXQgcmV0dXJucyBub24temVybywgeW91ciBkZXZpY2UgY2Fubm90IHBlcmZvcm0gRE1BIHByb3Blcmx5IG9uCkBAIC0xNDcsOCArMjA3LDcgQEAKIFRoZSBzdGFuZGFyZCAzMi1iaXQgYWRkcmVzc2luZyBkZXZpY2Ugd291bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKIAogCWlmIChkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CisJCWRldl93YXJuKGRldiwgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBpZ25vcmVfdGhpc19kZXZpY2U7CiAJfQogCkBAIC0xNzAsOCArMjI5LDcgQEAKIAl9IGVsc2UgaWYgKCFkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKSkgewogCQl1c2luZ19kYWMgPSAwOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlkZXZfd2FybihkZXYsICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwogCX0KIApAQCAtMTg3LDIyICsyNDUsMjAgQEAKIAkJdXNpbmdfZGFjID0gMDsKIAkJY29uc2lzdGVudF91c2luZ19kYWMgPSAwOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlkZXZfd2FybihkZXYsICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwogCX0KIAotVGhlIGNvaGVyZW50IGNvaGVyZW50IG1hc2sgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBzZXQgdGhlIHNhbWUgb3IgYQotc21hbGxlciBtYXNrIGFzIHRoZSBzdHJlYW1pbmcgbWFzay4gSG93ZXZlciBmb3IgdGhlIHJhcmUgY2FzZSB0aGF0IGEKLWRldmljZSBkcml2ZXIgb25seSB1c2VzIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMsIG9uZSB3b3VsZCBoYXZlIHRvCi1jaGVjayB0aGUgcmV0dXJuIHZhbHVlIGZyb20gZG1hX3NldF9jb2hlcmVudF9tYXNrKCkuCitUaGUgY29oZXJlbnQgbWFzayB3aWxsIGFsd2F5cyBiZSBhYmxlIHRvIHNldCB0aGUgc2FtZSBvciBhIHNtYWxsZXIgbWFzayBhcwordGhlIHN0cmVhbWluZyBtYXNrLiBIb3dldmVyIGZvciB0aGUgcmFyZSBjYXNlIHRoYXQgYSBkZXZpY2UgZHJpdmVyIG9ubHkKK3VzZXMgY29uc2lzdGVudCBhbGxvY2F0aW9ucywgb25lIHdvdWxkIGhhdmUgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tCitkbWFfc2V0X2NvaGVyZW50X21hc2soKS4KIAogRmluYWxseSwgaWYgeW91ciBkZXZpY2UgY2FuIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIG9mCiBhZGRyZXNzIHlvdSBtaWdodCBkbyBzb21ldGhpbmcgbGlrZToKIAogCWlmIChkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soMjQpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAibXlkZXY6IDI0LWJpdCBETUEgYWRkcmVzc2luZyBub3QgYXZhaWxhYmxlLlxuIik7CisJCWRldl93YXJuKGRldiwgIm15ZGV2OiAyNC1iaXQgRE1BIGFkZHJlc3Npbmcgbm90IGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwogCX0KIApAQCAtMjMyLDE0ICsyODgsMTQgQEAKIAkJY2FyZC0+cGxheWJhY2tfZW5hYmxlZCA9IDE7CiAJfSBlbHNlIHsKIAkJY2FyZC0+cGxheWJhY2tfZW5hYmxlZCA9IDA7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQbGF5YmFjayBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zLlxuIiwKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IFBsYXliYWNrIGRpc2FibGVkIGR1ZSB0byBETUEgbGltaXRhdGlvbnNcbiIsCiAJCSAgICAgICBjYXJkLT5uYW1lKTsKIAl9CiAJaWYgKCFkbWFfc2V0X21hc2soZGV2LCBSRUNPUkRfQUREUkVTU19CSVRTKSkgewogCQljYXJkLT5yZWNvcmRfZW5hYmxlZCA9IDE7CiAJfSBlbHNlIHsKIAkJY2FyZC0+cmVjb3JkX2VuYWJsZWQgPSAwOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVjb3JkIGRpc2FibGVkIGR1ZSB0byBETUEgbGltaXRhdGlvbnMuXG4iLAorCQlkZXZfd2FybihkZXYsICIlczogUmVjb3JkIGRpc2FibGVkIGR1ZSB0byBETUEgbGltaXRhdGlvbnNcbiIsCiAJCSAgICAgICBjYXJkLT5uYW1lKTsKIAl9CiAKQEAgLTMzMSw3ICszODcsNyBAQAogU2l6ZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSByZWdpb24geW91IHdhbnQgdG8gYWxsb2NhdGUsIGluIGJ5dGVzLgogCiBUaGlzIHJvdXRpbmUgd2lsbCBhbGxvY2F0ZSBSQU0gZm9yIHRoYXQgcmVnaW9uLCBzbyBpdCBhY3RzIHNpbWlsYXJseSB0bwotX19nZXRfZnJlZV9wYWdlcyAoYnV0IHRha2VzIHNpemUgaW5zdGVhZCBvZiBhIHBhZ2Ugb3JkZXIpLiAgSWYgeW91cgorX19nZXRfZnJlZV9wYWdlcygpIChidXQgdGFrZXMgc2l6ZSBpbnN0ZWFkIG9mIGEgcGFnZSBvcmRlcikuICBJZiB5b3VyCiBkcml2ZXIgbmVlZHMgcmVnaW9ucyBzaXplZCBzbWFsbGVyIHRoYW4gYSBwYWdlLCB5b3UgbWF5IHByZWZlciB1c2luZwogdGhlIGRtYV9wb29sIGludGVyZmFjZSwgZGVzY3JpYmVkIGJlbG93LgogCkBAIC0zNDMsMTEgKzM5OSwxMSBAQAogZG1hX3NldF9jb2hlcmVudF9tYXNrKCkuICBUaGlzIGlzIHRydWUgb2YgdGhlIGRtYV9wb29sIGludGVyZmFjZSBhcwogd2VsbC4KIAotZG1hX2FsbG9jX2NvaGVyZW50IHJldHVybnMgdHdvIHZhbHVlczogdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGljaCB5b3UKK2RtYV9hbGxvY19jb2hlcmVudCgpIHJldHVybnMgdHdvIHZhbHVlczogdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGljaCB5b3UKIGNhbiB1c2UgdG8gYWNjZXNzIGl0IGZyb20gdGhlIENQVSBhbmQgZG1hX2hhbmRsZSB3aGljaCB5b3UgcGFzcyB0byB0aGUKIGNhcmQuCiAKLVRoZSBjcHUgcmV0dXJuIGFkZHJlc3MgYW5kIHRoZSBETUEgYnVzIG1hc3RlciBhZGRyZXNzIGFyZSBib3RoCitUaGUgQ1BVIHZpcnR1YWwgYWRkcmVzcyBhbmQgdGhlIERNQSBidXMgYWRkcmVzcyBhcmUgYm90aAogZ3VhcmFudGVlZCB0byBiZSBhbGlnbmVkIHRvIHRoZSBzbWFsbGVzdCBQQUdFX1NJWkUgb3JkZXIgd2hpY2gKIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIHNpemUuICBUaGlzIGludmFyaWFudAogZXhpc3RzIChmb3IgZXhhbXBsZSkgdG8gZ3VhcmFudGVlIHRoYXQgaWYgeW91IGFsbG9jYXRlIGEgY2h1bmsKQEAgLTM1OSwxMyArNDE1LDEzIEBACiAJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CiAKIHdoZXJlIGRldiwgc2l6ZSBhcmUgdGhlIHNhbWUgYXMgaW4gdGhlIGFib3ZlIGNhbGwgYW5kIGNwdV9hZGRyIGFuZAotZG1hX2hhbmRsZSBhcmUgdGhlIHZhbHVlcyBkbWFfYWxsb2NfY29oZXJlbnQgcmV0dXJuZWQgdG8geW91LgorZG1hX2hhbmRsZSBhcmUgdGhlIHZhbHVlcyBkbWFfYWxsb2NfY29oZXJlbnQoKSByZXR1cm5lZCB0byB5b3UuCiBUaGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgogCiBJZiB5b3VyIGRyaXZlciBuZWVkcyBsb3RzIG9mIHNtYWxsZXIgbWVtb3J5IHJlZ2lvbnMsIHlvdSBjYW4gd3JpdGUKLWN1c3RvbSBjb2RlIHRvIHN1YmRpdmlkZSBwYWdlcyByZXR1cm5lZCBieSBkbWFfYWxsb2NfY29oZXJlbnQsCitjdXN0b20gY29kZSB0byBzdWJkaXZpZGUgcGFnZXMgcmV0dXJuZWQgYnkgZG1hX2FsbG9jX2NvaGVyZW50KCksCiBvciB5b3UgY2FuIHVzZSB0aGUgZG1hX3Bvb2wgQVBJIHRvIGRvIHRoYXQuICBBIGRtYV9wb29sIGlzIGxpa2UKLWEga21lbV9jYWNoZSwgYnV0IGl0IHVzZXMgZG1hX2FsbG9jX2NvaGVyZW50IG5vdCBfX2dldF9mcmVlX3BhZ2VzLgorYSBrbWVtX2NhY2hlLCBidXQgaXQgdXNlcyBkbWFfYWxsb2NfY29oZXJlbnQoKSwgbm90IF9fZ2V0X2ZyZWVfcGFnZXMoKS4KIEFsc28sIGl0IHVuZGVyc3RhbmRzIGNvbW1vbiBoYXJkd2FyZSBjb25zdHJhaW50cyBmb3IgYWxpZ25tZW50LAogbGlrZSBxdWV1ZSBoZWFkcyBuZWVkaW5nIHRvIGJlIGFsaWduZWQgb24gTiBieXRlIGJvdW5kYXJpZXMuCiAKQEAgLTM3MywzNyArNDI5LDM3IEBACiAKIAlzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2w7CiAKLQlwb29sID0gZG1hX3Bvb2xfY3JlYXRlKG5hbWUsIGRldiwgc2l6ZSwgYWxpZ24sIGFsbG9jKTsKKwlwb29sID0gZG1hX3Bvb2xfY3JlYXRlKG5hbWUsIGRldiwgc2l6ZSwgYWxpZ24sIGJvdW5kYXJ5KTsKIAogVGhlICJuYW1lIiBpcyBmb3IgZGlhZ25vc3RpY3MgKGxpa2UgYSBrbWVtX2NhY2hlIG5hbWUpOyBkZXYgYW5kIHNpemUKIGFyZSBhcyBhYm92ZS4gIFRoZSBkZXZpY2UncyBoYXJkd2FyZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIHRoaXMKIHR5cGUgb2YgZGF0YSBpcyAiYWxpZ24iICh3aGljaCBpcyBleHByZXNzZWQgaW4gYnl0ZXMsIGFuZCBtdXN0IGJlIGEKIHBvd2VyIG9mIHR3bykuICBJZiB5b3VyIGRldmljZSBoYXMgbm8gYm91bmRhcnkgY3Jvc3NpbmcgcmVzdHJpY3Rpb25zLAotcGFzcyAwIGZvciBhbGxvYzsgcGFzc2luZyA0MDk2IHNheXMgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIHRoaXMgcG9vbAorcGFzcyAwIGZvciBib3VuZGFyeTsgcGFzc2luZyA0MDk2IHNheXMgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIHRoaXMgcG9vbAogbXVzdCBub3QgY3Jvc3MgNEtCeXRlIGJvdW5kYXJpZXMgKGJ1dCBhdCB0aGF0IHRpbWUgaXQgbWF5IGJlIGJldHRlciB0bwotZ28gZm9yIGRtYV9hbGxvY19jb2hlcmVudCBkaXJlY3RseSBpbnN0ZWFkKS4KK3VzZSBkbWFfYWxsb2NfY29oZXJlbnQoKSBkaXJlY3RseSBpbnN0ZWFkKS4KIAotQWxsb2NhdGUgbWVtb3J5IGZyb20gYSBkbWEgcG9vbCBsaWtlIHRoaXM6CitBbGxvY2F0ZSBtZW1vcnkgZnJvbSBhIERNQSBwb29sIGxpa2UgdGhpczoKIAogCWNwdV9hZGRyID0gZG1hX3Bvb2xfYWxsb2MocG9vbCwgZmxhZ3MsICZkbWFfaGFuZGxlKTsKIAotZmxhZ3MgYXJlIFNMQUJfS0VSTkVMIGlmIGJsb2NraW5nIGlzIHBlcm1pdHRlZCAobm90IGluX2ludGVycnVwdCBub3IKLWhvbGRpbmcgU01QIGxvY2tzKSwgU0xBQl9BVE9NSUMgb3RoZXJ3aXNlLiAgTGlrZSBkbWFfYWxsb2NfY29oZXJlbnQsCitmbGFncyBhcmUgR0ZQX0tFUk5FTCBpZiBibG9ja2luZyBpcyBwZXJtaXR0ZWQgKG5vdCBpbl9pbnRlcnJ1cHQgbm9yCitob2xkaW5nIFNNUCBsb2NrcyksIEdGUF9BVE9NSUMgb3RoZXJ3aXNlLiAgTGlrZSBkbWFfYWxsb2NfY29oZXJlbnQoKSwKIHRoaXMgcmV0dXJucyB0d28gdmFsdWVzLCBjcHVfYWRkciBhbmQgZG1hX2hhbmRsZS4KIAogRnJlZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGZyb20gYSBkbWFfcG9vbCBsaWtlIHRoaXM6CiAKIAlkbWFfcG9vbF9mcmVlKHBvb2wsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKIAotd2hlcmUgcG9vbCBpcyB3aGF0IHlvdSBwYXNzZWQgdG8gZG1hX3Bvb2xfYWxsb2MsIGFuZCBjcHVfYWRkciBhbmQKLWRtYV9oYW5kbGUgYXJlIHRoZSB2YWx1ZXMgZG1hX3Bvb2xfYWxsb2MgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24KK3doZXJlIHBvb2wgaXMgd2hhdCB5b3UgcGFzc2VkIHRvIGRtYV9wb29sX2FsbG9jKCksIGFuZCBjcHVfYWRkciBhbmQKK2RtYV9oYW5kbGUgYXJlIHRoZSB2YWx1ZXMgZG1hX3Bvb2xfYWxsb2MoKSByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbgogbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KIAogRGVzdHJveSBhIGRtYV9wb29sIGJ5IGNhbGxpbmc6CiAKIAlkbWFfcG9vbF9kZXN0cm95KHBvb2wpOwogCi1NYWtlIHN1cmUgeW91J3ZlIGNhbGxlZCBkbWFfcG9vbF9mcmVlIGZvciBhbGwgbWVtb3J5IGFsbG9jYXRlZAorTWFrZSBzdXJlIHlvdSd2ZSBjYWxsZWQgZG1hX3Bvb2xfZnJlZSgpIGZvciBhbGwgbWVtb3J5IGFsbG9jYXRlZAogZnJvbSBhIHBvb2wgYmVmb3JlIHlvdSBkZXN0cm95IHRoZSBwb29sLiBUaGlzIGZ1bmN0aW9uIG1heSBub3QKIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KIApAQCAtNDE4LDcgKzQ3NCw3IEBACiAgRE1BX0ZST01fREVWSUNFCiAgRE1BX05PTkUKIAotT25lIHNob3VsZCBwcm92aWRlIHRoZSBleGFjdCBETUEgZGlyZWN0aW9uIGlmIHlvdSBrbm93IGl0LgorWW91IHNob3VsZCBwcm92aWRlIHRoZSBleGFjdCBETUEgZGlyZWN0aW9uIGlmIHlvdSBrbm93IGl0LgogCiBETUFfVE9fREVWSUNFIG1lYW5zICJmcm9tIG1haW4gbWVtb3J5IHRvIHRoZSBkZXZpY2UiCiBETUFfRlJPTV9ERVZJQ0UgbWVhbnMgImZyb20gdGhlIGRldmljZSB0byBtYWluIG1lbW9yeSIKQEAgLTQ4OSwxNCArNTQ1LDE0IEBACiAJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CiAKIFlvdSBzaG91bGQgY2FsbCBkbWFfbWFwcGluZ19lcnJvcigpIGFzIGRtYV9tYXBfc2luZ2xlKCkgY291bGQgZmFpbCBhbmQgcmV0dXJuCi1lcnJvci4gTm90IGFsbCBkbWEgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgZG1hX21hcHBpbmdfZXJyb3IoKSBpbnRlcmZhY2UuCitlcnJvci4gTm90IGFsbCBETUEgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlIGRtYV9tYXBwaW5nX2Vycm9yKCkgaW50ZXJmYWNlLgogSG93ZXZlciwgaXQgaXMgYSBnb29kIHByYWN0aWNlIHRvIGNhbGwgZG1hX21hcHBpbmdfZXJyb3IoKSBpbnRlcmZhY2UsIHdoaWNoCiB3aWxsIGludm9rZSB0aGUgZ2VuZXJpYyBtYXBwaW5nIGVycm9yIGNoZWNrIGludGVyZmFjZS4gRG9pbmcgc28gd2lsbCBlbnN1cmUKLXRoYXQgdGhlIG1hcHBpbmcgY29kZSB3aWxsIHdvcmsgY29ycmVjdGx5IG9uIGFsbCBkbWEgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQKK3RoYXQgdGhlIG1hcHBpbmcgY29kZSB3aWxsIHdvcmsgY29ycmVjdGx5IG9uIGFsbCBETUEgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQKIGFueSBkZXBlbmRlbmN5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFVzaW5nIHRoZQogcmV0dXJuZWQgYWRkcmVzcyB3aXRob3V0IGNoZWNraW5nIGZvciBlcnJvcnMgY291bGQgcmVzdWx0IGluIGZhaWx1cmVzIHJhbmdpbmcKIGZyb20gcGFuaWNzIHRvIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24uIEEgY291cGxlIG9mIGV4YW1wbGVzIG9mIGluY29ycmVjdCB3YXlzCi10byBjaGVjayBmb3IgZXJyb3JzIHRoYXQgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdW5kZXJseWluZyBkbWEKK3RvIGNoZWNrIGZvciBlcnJvcnMgdGhhdCBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSB1bmRlcmx5aW5nIERNQQogaW1wbGVtZW50YXRpb24gYXJlIGFzIGZvbGxvd3MgYW5kIHRoZXNlIGFyZSBhcHBsaWNhYmxlIHRvIGRtYV9tYXBfcGFnZSgpIGFzCiB3ZWxsLgogCkBAIC01MTYsMTMgKzU3MiwxMyBAQAogCQlnb3RvIG1hcF9lcnJvcjsKIAl9CiAKLVlvdSBzaG91bGQgY2FsbCBkbWFfdW5tYXBfc2luZ2xlIHdoZW4gdGhlIERNQSBhY3Rpdml0eSBpcyBmaW5pc2hlZCwgZS5nLgorWW91IHNob3VsZCBjYWxsIGRtYV91bm1hcF9zaW5nbGUoKSB3aGVuIHRoZSBETUEgYWN0aXZpdHkgaXMgZmluaXNoZWQsIGUuZy4sCiBmcm9tIHRoZSBpbnRlcnJ1cHQgd2hpY2ggdG9sZCB5b3UgdGhhdCB0aGUgRE1BIHRyYW5zZmVyIGlzIGRvbmUuCiAKLVVzaW5nIGNwdSBwb2ludGVycyBsaWtlIHRoaXMgZm9yIHNpbmdsZSBtYXBwaW5ncyBoYXMgYSBkaXNhZHZhbnRhZ2UsCitVc2luZyBDUFUgcG9pbnRlcnMgbGlrZSB0aGlzIGZvciBzaW5nbGUgbWFwcGluZ3MgaGFzIGEgZGlzYWR2YW50YWdlOgogeW91IGNhbm5vdCByZWZlcmVuY2UgSElHSE1FTSBtZW1vcnkgaW4gdGhpcyB3YXkuICBUaHVzLCB0aGVyZSBpcyBhCi1tYXAvdW5tYXAgaW50ZXJmYWNlIHBhaXIgYWtpbiB0byBkbWFfe21hcCx1bm1hcH1fc2luZ2xlLiAgVGhlc2UKLWludGVyZmFjZXMgZGVhbCB3aXRoIHBhZ2Uvb2Zmc2V0IHBhaXJzIGluc3RlYWQgb2YgY3B1IHBvaW50ZXJzLgorbWFwL3VubWFwIGludGVyZmFjZSBwYWlyIGFraW4gdG8gZG1hX3ttYXAsdW5tYXB9X3NpbmdsZSgpLiAgVGhlc2UKK2ludGVyZmFjZXMgZGVhbCB3aXRoIHBhZ2Uvb2Zmc2V0IHBhaXJzIGluc3RlYWQgb2YgQ1BVIHBvaW50ZXJzLgogU3BlY2lmaWNhbGx5OgogCiAJc3RydWN0IGRldmljZSAqZGV2ID0gJm15X2Rldi0+ZGV2OwpAQCAtNTUwLDcgKzYwNiw3IEBACiBZb3Ugc2hvdWxkIGNhbGwgZG1hX21hcHBpbmdfZXJyb3IoKSBhcyBkbWFfbWFwX3BhZ2UoKSBjb3VsZCBmYWlsIGFuZCByZXR1cm4KIGVycm9yIGFzIG91dGxpbmVkIHVuZGVyIHRoZSBkbWFfbWFwX3NpbmdsZSgpIGRpc2N1c3Npb24uCiAKLVlvdSBzaG91bGQgY2FsbCBkbWFfdW5tYXBfcGFnZSB3aGVuIHRoZSBETUEgYWN0aXZpdHkgaXMgZmluaXNoZWQsIGUuZy4KK1lvdSBzaG91bGQgY2FsbCBkbWFfdW5tYXBfcGFnZSgpIHdoZW4gdGhlIERNQSBhY3Rpdml0eSBpcyBmaW5pc2hlZCwgZS5nLiwKIGZyb20gdGhlIGludGVycnVwdCB3aGljaCB0b2xkIHlvdSB0aGF0IHRoZSBETUEgdHJhbnNmZXIgaXMgZG9uZS4KIAogV2l0aCBzY2F0dGVybGlzdHMsIHlvdSBtYXAgYSByZWdpb24gZ2F0aGVyZWQgZnJvbSBzZXZlcmFsIHJlZ2lvbnMgYnk6CkBAIC01ODgsMTggKzY0NCwxNiBAQAogCSAgICAgIGl0IHNob3VsZCBfTk9UXyBiZSB0aGUgJ2NvdW50JyB2YWx1ZSBfcmV0dXJuZWRfIGZyb20gdGhlCiAgICAgICAgICAgICAgIGRtYV9tYXBfc2cgY2FsbC4KIAotRXZlcnkgZG1hX21hcF97c2luZ2xlLHNnfSBjYWxsIHNob3VsZCBoYXZlIGl0cyBkbWFfdW5tYXBfe3NpbmdsZSxzZ30KLWNvdW50ZXJwYXJ0LCBiZWNhdXNlIHRoZSBidXMgYWRkcmVzcyBzcGFjZSBpcyBhIHNoYXJlZCByZXNvdXJjZSAoYWx0aG91Z2gKLWluIHNvbWUgcG9ydHMgdGhlIG1hcHBpbmcgaXMgcGVyIGVhY2ggQlVTIHNvIGxlc3MgZGV2aWNlcyBjb250ZW5kIGZvciB0aGUKLXNhbWUgYnVzIGFkZHJlc3Mgc3BhY2UpIGFuZCB5b3UgY291bGQgcmVuZGVyIHRoZSBtYWNoaW5lIHVudXNhYmxlIGJ5IGVhdGluZwotYWxsIGJ1cyBhZGRyZXNzZXMuCitFdmVyeSBkbWFfbWFwX3tzaW5nbGUsc2d9KCkgY2FsbCBzaG91bGQgaGF2ZSBpdHMgZG1hX3VubWFwX3tzaW5nbGUsc2d9KCkKK2NvdW50ZXJwYXJ0LCBiZWNhdXNlIHRoZSBidXMgYWRkcmVzcyBzcGFjZSBpcyBhIHNoYXJlZCByZXNvdXJjZSBhbmQKK3lvdSBjb3VsZCByZW5kZXIgdGhlIG1hY2hpbmUgdW51c2FibGUgYnkgY29uc3VtaW5nIGFsbCBidXMgYWRkcmVzc2VzLgogCiBJZiB5b3UgbmVlZCB0byB1c2UgdGhlIHNhbWUgc3RyZWFtaW5nIERNQSByZWdpb24gbXVsdGlwbGUgdGltZXMgYW5kIHRvdWNoCiB0aGUgZGF0YSBpbiBiZXR3ZWVuIHRoZSBETUEgdHJhbnNmZXJzLCB0aGUgYnVmZmVyIG5lZWRzIHRvIGJlIHN5bmNlZAotcHJvcGVybHkgaW4gb3JkZXIgZm9yIHRoZSBjcHUgYW5kIGRldmljZSB0byBzZWUgdGhlIG1vc3QgdXB0b2RhdGUgYW5kCitwcm9wZXJseSBpbiBvcmRlciBmb3IgdGhlIENQVSBhbmQgZGV2aWNlIHRvIHNlZSB0aGUgbW9zdCB1cC10by1kYXRlIGFuZAogY29ycmVjdCBjb3B5IG9mIHRoZSBETUEgYnVmZmVyLgogCi1TbywgZmlyc3RseSwganVzdCBtYXAgaXQgd2l0aCBkbWFfbWFwX3tzaW5nbGUsc2d9LCBhbmQgYWZ0ZXIgZWFjaCBETUEKK1NvLCBmaXJzdGx5LCBqdXN0IG1hcCBpdCB3aXRoIGRtYV9tYXBfe3NpbmdsZSxzZ30oKSwgYW5kIGFmdGVyIGVhY2ggRE1BCiB0cmFuc2ZlciBjYWxsIGVpdGhlcjoKIAogCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKQEAgLTYxMSw3ICs2NjUsNyBAQAogYXMgYXBwcm9wcmlhdGUuCiAKIFRoZW4sIGlmIHlvdSB3aXNoIHRvIGxldCB0aGUgZGV2aWNlIGdldCBhdCB0aGUgRE1BIGFyZWEgYWdhaW4sCi1maW5pc2ggYWNjZXNzaW5nIHRoZSBkYXRhIHdpdGggdGhlIGNwdSwgYW5kIHRoZW4gYmVmb3JlIGFjdHVhbGx5CitmaW5pc2ggYWNjZXNzaW5nIHRoZSBkYXRhIHdpdGggdGhlIENQVSwgYW5kIHRoZW4gYmVmb3JlIGFjdHVhbGx5CiBnaXZpbmcgdGhlIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgY2FsbCBlaXRoZXI6CiAKIAlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CkBAIC02MjMsOSArNjc3LDkgQEAKIGFzIGFwcHJvcHJpYXRlLgogCiBBZnRlciB0aGUgbGFzdCBETUEgdHJhbnNmZXIgY2FsbCBvbmUgb2YgdGhlIERNQSB1bm1hcCByb3V0aW5lcwotZG1hX3VubWFwX3tzaW5nbGUsc2d9LiBJZiB5b3UgZG9uJ3QgdG91Y2ggdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgZG1hX21hcF8qCi1jYWxsIHRpbGwgZG1hX3VubWFwXyosIHRoZW4geW91IGRvbid0IGhhdmUgdG8gY2FsbCB0aGUgZG1hX3N5bmNfKgotcm91dGluZXMgYXQgYWxsLgorZG1hX3VubWFwX3tzaW5nbGUsc2d9KCkuIElmIHlvdSBkb24ndCB0b3VjaCB0aGUgZGF0YSBmcm9tIHRoZSBmaXJzdAorZG1hX21hcF8qKCkgY2FsbCB0aWxsIGRtYV91bm1hcF8qKCksIHRoZW4geW91IGRvbid0IGhhdmUgdG8gY2FsbCB0aGUKK2RtYV9zeW5jXyooKSByb3V0aW5lcyBhdCBhbGwuCiAKIEhlcmUgaXMgcHNldWRvIGNvZGUgd2hpY2ggc2hvd3MgYSBzaXR1YXRpb24gaW4gd2hpY2ggeW91IHdvdWxkIG5lZWQKIHRvIHVzZSB0aGUgZG1hX3N5bmNfKigpIGludGVyZmFjZXMuCkBAIC02OTAsMTIgKzc0NCwxMiBAQAogCQl9CiAJfQogCi1Ecml2ZXJzIGNvbnZlcnRlZCBmdWxseSB0byB0aGlzIGludGVyZmFjZSBzaG91bGQgbm90IHVzZSB2aXJ0X3RvX2J1cyBhbnkKLWxvbmdlciwgbm9yIHNob3VsZCB0aGV5IHVzZSBidXNfdG9fdmlydC4gU29tZSBkcml2ZXJzIGhhdmUgdG8gYmUgY2hhbmdlZCBhCi1saXR0bGUgYml0LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGxvbmdlciBhbiBlcXVpdmFsZW50IHRvIGJ1c190b192aXJ0IGluIHRoZQorRHJpdmVycyBjb252ZXJ0ZWQgZnVsbHkgdG8gdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG5vdCB1c2UgdmlydF90b19idXMoKSBhbnkKK2xvbmdlciwgbm9yIHNob3VsZCB0aGV5IHVzZSBidXNfdG9fdmlydCgpLiBTb21lIGRyaXZlcnMgaGF2ZSB0byBiZSBjaGFuZ2VkIGEKK2xpdHRsZSBiaXQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbG9uZ2VyIGFuIGVxdWl2YWxlbnQgdG8gYnVzX3RvX3ZpcnQoKSBpbiB0aGUKIGR5bmFtaWMgRE1BIG1hcHBpbmcgc2NoZW1lIC0geW91IGhhdmUgdG8gYWx3YXlzIHN0b3JlIHRoZSBETUEgYWRkcmVzc2VzCi1yZXR1cm5lZCBieSB0aGUgZG1hX2FsbG9jX2NvaGVyZW50LCBkbWFfcG9vbF9hbGxvYywgYW5kIGRtYV9tYXBfc2luZ2xlCi1jYWxscyAoZG1hX21hcF9zZyBzdG9yZXMgdGhlbSBpbiB0aGUgc2NhdHRlcmxpc3QgaXRzZWxmIGlmIHRoZSBwbGF0Zm9ybQorcmV0dXJuZWQgYnkgdGhlIGRtYV9hbGxvY19jb2hlcmVudCgpLCBkbWFfcG9vbF9hbGxvYygpLCBhbmQgZG1hX21hcF9zaW5nbGUoKQorY2FsbHMgKGRtYV9tYXBfc2coKSBzdG9yZXMgdGhlbSBpbiB0aGUgc2NhdHRlcmxpc3QgaXRzZWxmIGlmIHRoZSBwbGF0Zm9ybQogc3VwcG9ydHMgZHluYW1pYyBETUEgbWFwcGluZyBpbiBoYXJkd2FyZSkgaW4geW91ciBkcml2ZXIgc3RydWN0dXJlcyBhbmQvb3IKIGluIHRoZSBjYXJkIHJlZ2lzdGVycy4KIApAQCAtNzA5LDkgKzc2Myw5IEBACiBETUEgYWRkcmVzcyBzcGFjZSBpcyBsaW1pdGVkIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyBhbmQgYW4gYWxsb2NhdGlvbgogZmFpbHVyZSBjYW4gYmUgZGV0ZXJtaW5lZCBieToKIAotLSBjaGVja2luZyBpZiBkbWFfYWxsb2NfY29oZXJlbnQgcmV0dXJucyBOVUxMIG9yIGRtYV9tYXBfc2cgcmV0dXJucyAwCistIGNoZWNraW5nIGlmIGRtYV9hbGxvY19jb2hlcmVudCgpIHJldHVybnMgTlVMTCBvciBkbWFfbWFwX3NnIHJldHVybnMgMAogCi0tIGNoZWNraW5nIHRoZSByZXR1cm5lZCBkbWFfYWRkcl90IG9mIGRtYV9tYXBfc2luZ2xlIGFuZCBkbWFfbWFwX3BhZ2UKKy0gY2hlY2tpbmcgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgZnJvbSBkbWFfbWFwX3NpbmdsZSgpIGFuZCBkbWFfbWFwX3BhZ2UoKQogICBieSB1c2luZyBkbWFfbWFwcGluZ19lcnJvcigpOgogCiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwpAQCAtNzk0LDcgKzg0OCw3IEBACiAJCWRtYV91bm1hcF9zaW5nbGUoYXJyYXlbaV0uZG1hX2FkZHIpOwogCX0KIAotTmV0d29ya2luZyBkcml2ZXJzIG11c3QgY2FsbCBkZXZfa2ZyZWVfc2tiIHRvIGZyZWUgdGhlIHNvY2tldCBidWZmZXIKK05ldHdvcmtpbmcgZHJpdmVycyBtdXN0IGNhbGwgZGV2X2tmcmVlX3NrYigpIHRvIGZyZWUgdGhlIHNvY2tldCBidWZmZXIKIGFuZCByZXR1cm4gTkVUREVWX1RYX09LIGlmIHRoZSBETUEgbWFwcGluZyBmYWlscyBvbiB0aGUgdHJhbnNtaXQgaG9vawogKG5kb19zdGFydF94bWl0KS4gVGhpcyBtZWFucyB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIGp1c3QgZHJvcHBlZCBpbgogdGhlIGZhaWx1cmUgY2FzZS4KQEAgLTgzMSw3ICs4ODUsNyBAQAogCQlERUZJTkVfRE1BX1VOTUFQX0xFTihsZW4pOwogCX07CiAKLTIpIFVzZSBkbWFfdW5tYXBfe2FkZHIsbGVufV9zZXQgdG8gc2V0IHRoZXNlIHZhbHVlcy4KKzIpIFVzZSBkbWFfdW5tYXBfe2FkZHIsbGVufV9zZXQoKSB0byBzZXQgdGhlc2UgdmFsdWVzLgogICAgRXhhbXBsZSwgYmVmb3JlOgogCiAJcmluZ3AtPm1hcHBpbmcgPSBGT087CkBAIC04NDIsNyArODk2LDcgQEAKIAlkbWFfdW5tYXBfYWRkcl9zZXQocmluZ3AsIG1hcHBpbmcsIEZPTyk7CiAJZG1hX3VubWFwX2xlbl9zZXQocmluZ3AsIGxlbiwgQkFSKTsKIAotMykgVXNlIGRtYV91bm1hcF97YWRkcixsZW59IHRvIGFjY2VzcyB0aGVzZSB2YWx1ZXMuCiszKSBVc2UgZG1hX3VubWFwX3thZGRyLGxlbn0oKSB0byBhY2Nlc3MgdGhlc2UgdmFsdWVzLgogICAgRXhhbXBsZSwgYmVmb3JlOgogCiAJZG1hX3VubWFwX3NpbmdsZShkZXYsIHJpbmdwLT5tYXBwaW5nLCByaW5ncC0+bGVuLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dCBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKaW5kZXggZTg2NTI3OS4uNTIwODg0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CkBAIC00LDIyICs0LDI2IEBACiAgICAgICAgIEphbWVzIEUuSi4gQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tPgogCiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgRE1BIEFQSS4gIEZvciBhIG1vcmUgZ2VudGxlIGludHJvZHVjdGlvbgotb2YgdGhlIEFQSSAoYW5kIGFjdHVhbCBleGFtcGxlcykgc2VlCi1Eb2N1bWVudGF0aW9uL0RNQS1BUEktSE9XVE8udHh0Lgorb2YgdGhlIEFQSSAoYW5kIGFjdHVhbCBleGFtcGxlcyksIHNlZSBEb2N1bWVudGF0aW9uL0RNQS1BUEktSE9XVE8udHh0LgogCi1UaGlzIEFQSSBpcyBzcGxpdCBpbnRvIHR3byBwaWVjZXMuICBQYXJ0IEkgZGVzY3JpYmVzIHRoZSBBUEkuICBQYXJ0IElJCi1kZXNjcmliZXMgdGhlIGV4dGVuc2lvbnMgdG8gdGhlIEFQSSBmb3Igc3VwcG9ydGluZyBub24tY29uc2lzdGVudAotbWVtb3J5IG1hY2hpbmVzLiAgVW5sZXNzIHlvdSBrbm93IHRoYXQgeW91ciBkcml2ZXIgYWJzb2x1dGVseSBoYXMgdG8KLXN1cHBvcnQgbm9uLWNvbnNpc3RlbnQgcGxhdGZvcm1zICh0aGlzIGlzIHVzdWFsbHkgb25seSBsZWdhY3kKLXBsYXRmb3JtcykgeW91IHNob3VsZCBvbmx5IHVzZSB0aGUgQVBJIGRlc2NyaWJlZCBpbiBwYXJ0IEkuCitUaGlzIEFQSSBpcyBzcGxpdCBpbnRvIHR3byBwaWVjZXMuICBQYXJ0IEkgZGVzY3JpYmVzIHRoZSBiYXNpYyBBUEkuCitQYXJ0IElJIGRlc2NyaWJlcyBleHRlbnNpb25zIGZvciBzdXBwb3J0aW5nIG5vbi1jb25zaXN0ZW50IG1lbW9yeQorbWFjaGluZXMuICBVbmxlc3MgeW91IGtub3cgdGhhdCB5b3VyIGRyaXZlciBhYnNvbHV0ZWx5IGhhcyB0byBzdXBwb3J0Citub24tY29uc2lzdGVudCBwbGF0Zm9ybXMgKHRoaXMgaXMgdXN1YWxseSBvbmx5IGxlZ2FjeSBwbGF0Zm9ybXMpIHlvdQorc2hvdWxkIG9ubHkgdXNlIHRoZSBBUEkgZGVzY3JpYmVkIGluIHBhcnQgSS4KIAogUGFydCBJIC0gZG1hXyBBUEkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVG8gZ2V0IHRoZSBkbWFfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CitUbyBnZXQgdGhlIGRtYV8gQVBJLCB5b3UgbXVzdCAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4uICBUaGlzCitwcm92aWRlcyBkbWFfYWRkcl90IGFuZCB0aGUgaW50ZXJmYWNlcyBkZXNjcmliZWQgYmVsb3cuCiAKK0EgZG1hX2FkZHJfdCBjYW4gaG9sZCBhbnkgdmFsaWQgRE1BIG9yIGJ1cyBhZGRyZXNzIGZvciB0aGUgcGxhdGZvcm0uICBJdAorY2FuIGJlIGdpdmVuIHRvIGEgZGV2aWNlIHRvIHVzZSBhcyBhIERNQSBzb3VyY2Ugb3IgdGFyZ2V0LiAgQSBDUFUgY2Fubm90CityZWZlcmVuY2UgYSBkbWFfYWRkcl90IGRpcmVjdGx5IGJlY2F1c2UgdGhlcmUgbWF5IGJlIHRyYW5zbGF0aW9uIGJldHdlZW4KK2l0cyBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGFuZCB0aGUgYnVzIGFkZHJlc3Mgc3BhY2UuCiAKLVBhcnQgSWEgLSBVc2luZyBsYXJnZSBkbWEtY29oZXJlbnQgYnVmZmVycworUGFydCBJYSAtIFVzaW5nIGxhcmdlIERNQS1jb2hlcmVudCBidWZmZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCAqCkBAIC0zMywyMCArMzcsMjEgQEAKIGRldmljZXMgdG8gcmVhZCB0aGF0IG1lbW9yeS4pCiAKIFRoaXMgcm91dGluZSBhbGxvY2F0ZXMgYSByZWdpb24gb2YgPHNpemU+IGJ5dGVzIG9mIGNvbnNpc3RlbnQgbWVtb3J5LgotSXQgYWxzbyByZXR1cm5zIGEgPGRtYV9oYW5kbGU+IHdoaWNoIG1heSBiZSBjYXN0IHRvIGFuIHVuc2lnbmVkCi1pbnRlZ2VyIHRoZSBzYW1lIHdpZHRoIGFzIHRoZSBidXMgYW5kIHVzZWQgYXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKLWJhc2Ugb2YgdGhlIHJlZ2lvbi4KIAotUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgcmVnaW9uIChpbiB0aGUgcHJvY2Vzc29yJ3MgdmlydHVhbAorSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCByZWdpb24gKGluIHRoZSBwcm9jZXNzb3IncyB2aXJ0dWFsCiBhZGRyZXNzIHNwYWNlKSBvciBOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KIAorSXQgYWxzbyByZXR1cm5zIGEgPGRtYV9oYW5kbGU+IHdoaWNoIG1heSBiZSBjYXN0IHRvIGFuIHVuc2lnbmVkIGludGVnZXIgdGhlCitzYW1lIHdpZHRoIGFzIHRoZSBidXMgYW5kIGdpdmVuIHRvIHRoZSBkZXZpY2UgYXMgdGhlIGJ1cyBhZGRyZXNzIGJhc2Ugb2YKK3RoZSByZWdpb24uCisKIE5vdGU6IGNvbnNpc3RlbnQgbWVtb3J5IGNhbiBiZSBleHBlbnNpdmUgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCB0aGUKIG1pbmltdW0gYWxsb2NhdGlvbiBsZW5ndGggbWF5IGJlIGFzIGJpZyBhcyBhIHBhZ2UsIHNvIHlvdSBzaG91bGQKIGNvbnNvbGlkYXRlIHlvdXIgcmVxdWVzdHMgZm9yIGNvbnNpc3RlbnQgbWVtb3J5IGFzIG11Y2ggYXMgcG9zc2libGUuCiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gdXNlIHRoZSBkbWFfcG9vbCBjYWxscyAoc2VlIGJlbG93KS4KIAotVGhlIGZsYWcgcGFyYW1ldGVyIChkbWFfYWxsb2NfY29oZXJlbnQgb25seSkgYWxsb3dzIHRoZSBjYWxsZXIgdG8KLXNwZWNpZnkgdGhlIEdGUF8gZmxhZ3MgKHNlZSBrbWFsbG9jKSBmb3IgdGhlIGFsbG9jYXRpb24gKHRoZQorVGhlIGZsYWcgcGFyYW1ldGVyIChkbWFfYWxsb2NfY29oZXJlbnQoKSBvbmx5KSBhbGxvd3MgdGhlIGNhbGxlciB0bworc3BlY2lmeSB0aGUgR0ZQXyBmbGFncyAoc2VlIGttYWxsb2MoKSkgZm9yIHRoZSBhbGxvY2F0aW9uICh0aGUKIGltcGxlbWVudGF0aW9uIG1heSBjaG9vc2UgdG8gaWdub3JlIGZsYWdzIHRoYXQgYWZmZWN0IHRoZSBsb2NhdGlvbiBvZgogdGhlIHJldHVybmVkIG1lbW9yeSwgbGlrZSBHRlBfRE1BKS4KIApAQCAtNjEsMjQgKzY2LDI0IEBACiBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIAotRnJlZSB0aGUgcmVnaW9uIG9mIGNvbnNpc3RlbnQgbWVtb3J5IHlvdSBwcmV2aW91c2x5IGFsbG9jYXRlZC4gIGRldiwKLXNpemUgYW5kIGRtYV9oYW5kbGUgbXVzdCBhbGwgYmUgdGhlIHNhbWUgYXMgdGhvc2UgcGFzc2VkIGludG8gdGhlCi1jb25zaXN0ZW50IGFsbG9jYXRlLiAgY3B1X2FkZHIgbXVzdCBiZSB0aGUgdmlydHVhbCBhZGRyZXNzIHJldHVybmVkIGJ5Ci10aGUgY29uc2lzdGVudCBhbGxvY2F0ZS4KK0ZyZWUgYSByZWdpb24gb2YgY29uc2lzdGVudCBtZW1vcnkgeW91IHByZXZpb3VzbHkgYWxsb2NhdGVkLiAgZGV2LAorc2l6ZSBhbmQgZG1hX2hhbmRsZSBtdXN0IGFsbCBiZSB0aGUgc2FtZSBhcyB0aG9zZSBwYXNzZWQgaW50bworZG1hX2FsbG9jX2NvaGVyZW50KCkuICBjcHVfYWRkciBtdXN0IGJlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcmV0dXJuZWQgYnkKK3RoZSBkbWFfYWxsb2NfY29oZXJlbnQoKS4KIAogTm90ZSB0aGF0IHVubGlrZSB0aGVpciBzaWJsaW5nIGFsbG9jYXRpb24gY2FsbHMsIHRoZXNlIHJvdXRpbmVzCiBtYXkgb25seSBiZSBjYWxsZWQgd2l0aCBJUlFzIGVuYWJsZWQuCiAKIAotUGFydCBJYiAtIFVzaW5nIHNtYWxsIGRtYS1jb2hlcmVudCBidWZmZXJzCitQYXJ0IEliIC0gVXNpbmcgc21hbGwgRE1BLWNvaGVyZW50IGJ1ZmZlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUbyBnZXQgdGhpcyBwYXJ0IG9mIHRoZSBkbWFfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KIAotTWFueSBkcml2ZXJzIG5lZWQgbG90cyBvZiBzbWFsbCBkbWEtY29oZXJlbnQgbWVtb3J5IHJlZ2lvbnMgZm9yIERNQQorTWFueSBkcml2ZXJzIG5lZWQgbG90cyBvZiBzbWFsbCBETUEtY29oZXJlbnQgbWVtb3J5IHJlZ2lvbnMgZm9yIERNQQogZGVzY3JpcHRvcnMgb3IgSS9PIGJ1ZmZlcnMuICBSYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGluIHVuaXRzIG9mIGEgcGFnZQogb3IgbW9yZSB1c2luZyBkbWFfYWxsb2NfY29oZXJlbnQoKSwgeW91IGNhbiB1c2UgRE1BIHBvb2xzLiAgVGhlc2Ugd29yawotbXVjaCBsaWtlIGEgc3RydWN0IGttZW1fY2FjaGUsIGV4Y2VwdCB0aGF0IHRoZXkgdXNlIHRoZSBkbWEtY29oZXJlbnQgYWxsb2NhdG9yLAorbXVjaCBsaWtlIGEgc3RydWN0IGttZW1fY2FjaGUsIGV4Y2VwdCB0aGF0IHRoZXkgdXNlIHRoZSBETUEtY29oZXJlbnQgYWxsb2NhdG9yLAogbm90IF9fZ2V0X2ZyZWVfcGFnZXMoKS4gIEFsc28sIHRoZXkgdW5kZXJzdGFuZCBjb21tb24gaGFyZHdhcmUgY29uc3RyYWludHMKIGZvciBhbGlnbm1lbnQsIGxpa2UgcXVldWUgaGVhZHMgbmVlZGluZyB0byBiZSBhbGlnbmVkIG9uIE4tYnl0ZSBib3VuZGFyaWVzLgogCkBAIC04Nyw3ICs5Miw3IEBACiAJZG1hX3Bvb2xfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIHNpemVfdCBhbGxvYyk7CiAKLVRoZSBwb29sIGNyZWF0ZSgpIHJvdXRpbmVzIGluaXRpYWxpemUgYSBwb29sIG9mIGRtYS1jb2hlcmVudCBidWZmZXJzCitkbWFfcG9vbF9jcmVhdGUoKSBpbml0aWFsaXplcyBhIHBvb2wgb2YgRE1BLWNvaGVyZW50IGJ1ZmZlcnMKIGZvciB1c2Ugd2l0aCBhIGdpdmVuIGRldmljZS4gIEl0IG11c3QgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGljaAogY2FuIHNsZWVwLgogCkBAIC0xMDIsMjUgKzEwNywyNiBAQAogCXZvaWQgKmRtYV9wb29sX2FsbG9jKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX2ZsYWdzLAogCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CiAKLVRoaXMgYWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBwb29sOyB0aGUgcmV0dXJuZWQgbWVtb3J5IHdpbGwgbWVldCB0aGUgc2l6ZQotYW5kIGFsaWdubWVudCByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uIHRpbWUuICBQYXNzIEdGUF9BVE9NSUMgdG8KLXByZXZlbnQgYmxvY2tpbmcsIG9yIGlmIGl0J3MgcGVybWl0dGVkIChub3QgaW5faW50ZXJydXB0LCBub3QgaG9sZGluZyBTTVAgbG9ja3MpLAotcGFzcyBHRlBfS0VSTkVMIHRvIGFsbG93IGJsb2NraW5nLiAgTGlrZSBkbWFfYWxsb2NfY29oZXJlbnQoKSwgdGhpcyByZXR1cm5zCi10d28gdmFsdWVzOiAgYW4gYWRkcmVzcyB1c2FibGUgYnkgdGhlIGNwdSwgYW5kIHRoZSBkbWEgYWRkcmVzcyB1c2FibGUgYnkgdGhlCi1wb29sJ3MgZGV2aWNlLgorVGhpcyBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIHBvb2w7IHRoZSByZXR1cm5lZCBtZW1vcnkgd2lsbCBtZWV0IHRoZQorc2l6ZSBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYXQgY3JlYXRpb24gdGltZS4gIFBhc3MKK0dGUF9BVE9NSUMgdG8gcHJldmVudCBibG9ja2luZywgb3IgaWYgaXQncyBwZXJtaXR0ZWQgKG5vdAoraW5faW50ZXJydXB0LCBub3QgaG9sZGluZyBTTVAgbG9ja3MpLCBwYXNzIEdGUF9LRVJORUwgdG8gYWxsb3cKK2Jsb2NraW5nLiAgTGlrZSBkbWFfYWxsb2NfY29oZXJlbnQoKSwgdGhpcyByZXR1cm5zIHR3byB2YWx1ZXM6ICBhbgorYWRkcmVzcyB1c2FibGUgYnkgdGhlIENQVSwgYW5kIHRoZSBETUEgYWRkcmVzcyB1c2FibGUgYnkgdGhlIHBvb2wncworZGV2aWNlLgogCiAKIAl2b2lkIGRtYV9wb29sX2ZyZWUoc3RydWN0IGRtYV9wb29sICpwb29sLCB2b2lkICp2YWRkciwKIAkJCWRtYV9hZGRyX3QgYWRkcik7CiAKIFRoaXMgcHV0cyBtZW1vcnkgYmFjayBpbnRvIHRoZSBwb29sLiAgVGhlIHBvb2wgaXMgd2hhdCB3YXMgcGFzc2VkIHRvCi10aGUgcG9vbCBhbGxvY2F0aW9uIHJvdXRpbmU7IHRoZSBjcHUgKHZhZGRyKSBhbmQgZG1hIGFkZHJlc3NlcyBhcmUgd2hhdAorZG1hX3Bvb2xfYWxsb2MoKTsgdGhlIENQVSAodmFkZHIpIGFuZCBETUEgYWRkcmVzc2VzIGFyZSB3aGF0CiB3ZXJlIHJldHVybmVkIHdoZW4gdGhhdCByb3V0aW5lIGFsbG9jYXRlZCB0aGUgbWVtb3J5IGJlaW5nIGZyZWVkLgogCiAKIAl2b2lkIGRtYV9wb29sX2Rlc3Ryb3koc3RydWN0IGRtYV9wb29sICpwb29sKTsKIAotVGhlIHBvb2wgZGVzdHJveSgpIHJvdXRpbmVzIGZyZWUgdGhlIHJlc291cmNlcyBvZiB0aGUgcG9vbC4gIFRoZXkgbXVzdCBiZQorZG1hX3Bvb2xfZGVzdHJveSgpIGZyZWVzIHRoZSByZXNvdXJjZXMgb2YgdGhlIHBvb2wuICBJdCBtdXN0IGJlCiBjYWxsZWQgaW4gYSBjb250ZXh0IHdoaWNoIGNhbiBzbGVlcC4gIE1ha2Ugc3VyZSB5b3UndmUgZnJlZWQgYWxsIGFsbG9jYXRlZAogbWVtb3J5IGJhY2sgdG8gdGhlIHBvb2wgYmVmb3JlIHlvdSBkZXN0cm95IGl0LgogCkBAIC0xODcsOSArMTkzLDkgQEAKIAkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogCiBNYXBzIGEgcGllY2Ugb2YgcHJvY2Vzc29yIHZpcnR1YWwgbWVtb3J5IHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBieSB0aGUKLWRldmljZSBhbmQgcmV0dXJucyB0aGUgcGh5c2ljYWwgaGFuZGxlIG9mIHRoZSBtZW1vcnkuCitkZXZpY2UgYW5kIHJldHVybnMgdGhlIGJ1cyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkuCiAKLVRoZSBkaXJlY3Rpb24gZm9yIGJvdGggYXBpJ3MgbWF5IGJlIGNvbnZlcnRlZCBmcmVlbHkgYnkgY2FzdGluZy4KK1RoZSBkaXJlY3Rpb24gZm9yIGJvdGggQVBJcyBtYXkgYmUgY29udmVydGVkIGZyZWVseSBieSBjYXN0aW5nLgogSG93ZXZlciB0aGUgZG1hXyBBUEkgdXNlcyBhIHN0cm9uZ2x5IHR5cGVkIGVudW1lcmF0b3IgZm9yIGl0cwogZGlyZWN0aW9uOgogCkBAIC0xOTgsMzEgKzIwNCwzMCBAQAogRE1BX0ZST01fREVWSUNFCQlkYXRhIGlzIGNvbWluZyBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIG1lbW9yeQogRE1BX0JJRElSRUNUSU9OQUwJZGlyZWN0aW9uIGlzbid0IGtub3duCiAKLU5vdGVzOiAgTm90IGFsbCBtZW1vcnkgcmVnaW9ucyBpbiBhIG1hY2hpbmUgY2FuIGJlIG1hcHBlZCBieSB0aGlzCi1BUEkuICBGdXJ0aGVyLCByZWdpb25zIHRoYXQgYXBwZWFyIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cyBpbgota2VybmVsIHZpcnR1YWwgc3BhY2UgbWF5IG5vdCBiZSBjb250aWd1b3VzIGFzIHBoeXNpY2FsIG1lbW9yeS4gIFNpbmNlCi10aGlzIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFueSBzY2F0dGVyL2dhdGhlciBjYXBhYmlsaXR5LCBpdCB3aWxsIGZhaWwKLWlmIHRoZSB1c2VyIHRyaWVzIHRvIG1hcCBhIG5vbi1waHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGllY2Ugb2YgbWVtb3J5LgotRm9yIHRoaXMgcmVhc29uLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IG1lbW9yeSBtYXBwZWQgYnkgdGhpcyBBUEkgYmUKLW9idGFpbmVkIG9ubHkgZnJvbSBzb3VyY2VzIHdoaWNoIGd1YXJhbnRlZSBpdCB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKLShsaWtlIGttYWxsb2MpLgorTm90ZXM6ICBOb3QgYWxsIG1lbW9yeSByZWdpb25zIGluIGEgbWFjaGluZSBjYW4gYmUgbWFwcGVkIGJ5IHRoaXMgQVBJLgorRnVydGhlciwgY29udGlndW91cyBrZXJuZWwgdmlydHVhbCBzcGFjZSBtYXkgbm90IGJlIGNvbnRpZ3VvdXMgYXMKK3BoeXNpY2FsIG1lbW9yeS4gIFNpbmNlIHRoaXMgQVBJIGRvZXMgbm90IHByb3ZpZGUgYW55IHNjYXR0ZXIvZ2F0aGVyCitjYXBhYmlsaXR5LCBpdCB3aWxsIGZhaWwgaWYgdGhlIHVzZXIgdHJpZXMgdG8gbWFwIGEgbm9uLXBoeXNpY2FsbHkKK2NvbnRpZ3VvdXMgcGllY2Ugb2YgbWVtb3J5LiAgRm9yIHRoaXMgcmVhc29uLCBtZW1vcnkgdG8gYmUgbWFwcGVkIGJ5Cit0aGlzIEFQSSBzaG91bGQgYmUgb2J0YWluZWQgZnJvbSBzb3VyY2VzIHdoaWNoIGd1YXJhbnRlZSBpdCB0byBiZQorcGh5c2ljYWxseSBjb250aWd1b3VzIChsaWtlIGttYWxsb2MpLgogCi1GdXJ0aGVyLCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IG11c3QgYmUgd2l0aGluIHRoZQotZG1hX21hc2sgb2YgdGhlIGRldmljZSAodGhlIGRtYV9tYXNrIHJlcHJlc2VudHMgYSBiaXQgbWFzayBvZiB0aGUKLWFkZHJlc3NhYmxlIHJlZ2lvbiBmb3IgdGhlIGRldmljZS4gIEkuZS4sIGlmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mCi10aGUgbWVtb3J5IGFuZGVkIHdpdGggdGhlIGRtYV9tYXNrIGlzIHN0aWxsIGVxdWFsIHRvIHRoZSBwaHlzaWNhbAotYWRkcmVzcywgdGhlbiB0aGUgZGV2aWNlIGNhbiBwZXJmb3JtIERNQSB0byB0aGUgbWVtb3J5KS4gIEluIG9yZGVyIHRvCitGdXJ0aGVyLCB0aGUgYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBtdXN0IGJlIHdpdGhpbiB0aGUKK2RtYV9tYXNrIG9mIHRoZSBkZXZpY2UgKHRoZSBkbWFfbWFzayBpcyBhIGJpdCBtYXNrIG9mIHRoZQorYWRkcmVzc2FibGUgcmVnaW9uIGZvciB0aGUgZGV2aWNlLCBpLmUuLCBpZiB0aGUgYnVzIGFkZHJlc3Mgb2YKK3RoZSBtZW1vcnkgQU5EZWQgd2l0aCB0aGUgZG1hX21hc2sgaXMgc3RpbGwgZXF1YWwgdG8gdGhlIGJ1cworYWRkcmVzcywgdGhlbiB0aGUgZGV2aWNlIGNhbiBwZXJmb3JtIERNQSB0byB0aGUgbWVtb3J5KS4gIFRvCiBlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBrbWFsbG9jIGlzIHdpdGhpbiB0aGUgZG1hX21hc2ssCiB0aGUgZHJpdmVyIG1heSBzcGVjaWZ5IHZhcmlvdXMgcGxhdGZvcm0tZGVwZW5kZW50IGZsYWdzIHRvIHJlc3RyaWN0Ci10aGUgcGh5c2ljYWwgbWVtb3J5IHJhbmdlIG9mIHRoZSBhbGxvY2F0aW9uIChlLmcuIG9uIHg4NiwgR0ZQX0RNQQotZ3VhcmFudGVlcyB0byBiZSB3aXRoaW4gdGhlIGZpcnN0IDE2TWIgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIG1lbW9yeSwKK3RoZSBidXMgYWRkcmVzcyByYW5nZSBvZiB0aGUgYWxsb2NhdGlvbiAoZS5nLiwgb24geDg2LCBHRlBfRE1BCitndWFyYW50ZWVzIHRvIGJlIHdpdGhpbiB0aGUgZmlyc3QgMTZNQiBvZiBhdmFpbGFibGUgYnVzIGFkZHJlc3NlcywKIGFzIHJlcXVpcmVkIGJ5IElTQSBkZXZpY2VzKS4KIAogTm90ZSBhbHNvIHRoYXQgdGhlIGFib3ZlIGNvbnN0cmFpbnRzIG9uIHBoeXNpY2FsIGNvbnRpZ3VpdHkgYW5kCiBkbWFfbWFzayBtYXkgbm90IGFwcGx5IGlmIHRoZSBwbGF0Zm9ybSBoYXMgYW4gSU9NTVUgKGEgZGV2aWNlIHdoaWNoCi1zdXBwbGllcyBhIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWFwcGluZyBiZXR3ZWVuIHRoZSBJL08gbWVtb3J5IGJ1cyBhbmQKLXRoZSBkZXZpY2UpLiAgSG93ZXZlciwgdG8gYmUgcG9ydGFibGUsIGRldmljZSBkcml2ZXIgd3JpdGVycyBtYXkgKm5vdCoKLWFzc3VtZSB0aGF0IHN1Y2ggYW4gSU9NTVUgZXhpc3RzLgorbWFwcyBhbiBJL08gYnVzIGFkZHJlc3MgdG8gYSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcykuICBIb3dldmVyLCB0byBiZQorcG9ydGFibGUsIGRldmljZSBkcml2ZXIgd3JpdGVycyBtYXkgKm5vdCogYXNzdW1lIHRoYXQgc3VjaCBhbiBJT01NVQorZXhpc3RzLgogCiBXYXJuaW5nczogIE1lbW9yeSBjb2hlcmVuY3kgb3BlcmF0ZXMgYXQgYSBncmFudWxhcml0eSBjYWxsZWQgdGhlIGNhY2hlCiBsaW5lIHdpZHRoLiAgSW4gb3JkZXIgZm9yIG1lbW9yeSBtYXBwZWQgYnkgdGhpcyBBUEkgdG8gb3BlcmF0ZQpAQCAtMjgxLDkgKzI4Niw5IEBACiBpbnQKIGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKIAotSW4gc29tZSBjaXJjdW1zdGFuY2VzIGRtYV9tYXBfc2luZ2xlIGFuZCBkbWFfbWFwX3BhZ2Ugd2lsbCBmYWlsIHRvIGNyZWF0ZQorSW4gc29tZSBjaXJjdW1zdGFuY2VzIGRtYV9tYXBfc2luZ2xlKCkgYW5kIGRtYV9tYXBfcGFnZSgpIHdpbGwgZmFpbCB0byBjcmVhdGUKIGEgbWFwcGluZy4gQSBkcml2ZXIgY2FuIGNoZWNrIGZvciB0aGVzZSBlcnJvcnMgYnkgdGVzdGluZyB0aGUgcmV0dXJuZWQKLWRtYSBhZGRyZXNzIHdpdGggZG1hX21hcHBpbmdfZXJyb3IoKS4gQSBub24temVybyByZXR1cm4gdmFsdWUgbWVhbnMgdGhlIG1hcHBpbmcKK0RNQSBhZGRyZXNzIHdpdGggZG1hX21hcHBpbmdfZXJyb3IoKS4gQSBub24temVybyByZXR1cm4gdmFsdWUgbWVhbnMgdGhlIG1hcHBpbmcKIGNvdWxkIG5vdCBiZSBjcmVhdGVkIGFuZCB0aGUgZHJpdmVyIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiAoZS5nLgogcmVkdWNlIGN1cnJlbnQgRE1BIG1hcHBpbmcgdXNhZ2Ugb3IgZGVsYXkgYW5kIHRyeSBhZ2FpbiBsYXRlcikuCiAKQEAgLTI5MSw3ICsyOTYsNyBAQAogCWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIAotUmV0dXJuczogdGhlIG51bWJlciBvZiBwaHlzaWNhbCBzZWdtZW50cyBtYXBwZWQgKHRoaXMgbWF5IGJlIHNob3J0ZXIKK1JldHVybnM6IHRoZSBudW1iZXIgb2YgYnVzIGFkZHJlc3Mgc2VnbWVudHMgbWFwcGVkICh0aGlzIG1heSBiZSBzaG9ydGVyCiB0aGFuIDxuZW50cz4gcGFzc2VkIGluIGlmIHNvbWUgZWxlbWVudHMgb2YgdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgYXJlCiBwaHlzaWNhbGx5IG9yIHZpcnR1YWxseSBhZGphY2VudCBhbmQgYW4gSU9NTVUgbWFwcyB0aGVtIHdpdGggYSBzaW5nbGUKIGVudHJ5KS4KQEAgLTI5OSw3ICszMDQsNyBAQAogUGxlYXNlIG5vdGUgdGhhdCB0aGUgc2cgY2Fubm90IGJlIG1hcHBlZCBhZ2FpbiBpZiBpdCBoYXMgYmVlbiBtYXBwZWQgb25jZS4KIFRoZSBtYXBwaW5nIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBkZXN0cm95IGluZm9ybWF0aW9uIGluIHRoZSBzZy4KIAotQXMgd2l0aCB0aGUgb3RoZXIgbWFwcGluZyBpbnRlcmZhY2VzLCBkbWFfbWFwX3NnIGNhbiBmYWlsLiBXaGVuIGl0CitBcyB3aXRoIHRoZSBvdGhlciBtYXBwaW5nIGludGVyZmFjZXMsIGRtYV9tYXBfc2coKSBjYW4gZmFpbC4gV2hlbiBpdAogZG9lcywgMCBpcyByZXR1cm5lZCBhbmQgYSBkcml2ZXIgbXVzdCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4gSXQgaXMKIGNyaXRpY2FsIHRoYXQgdGhlIGRyaXZlciBkbyBzb21ldGhpbmcsIGluIHRoZSBjYXNlIG9mIGEgYmxvY2sgZHJpdmVyCiBhYm9ydGluZyB0aGUgcmVxdWVzdCBvciBldmVuIG9vcHNpbmcgaXMgYmV0dGVyIHRoYW4gZG9pbmcgbm90aGluZyBhbmQKQEAgLTMzNSw3ICszNDAsNyBAQAogQVBJLgogCiBOb3RlOiA8bmVudHM+IG11c3QgYmUgdGhlIG51bWJlciB5b3UgcGFzc2VkIGluLCAqbm90KiB0aGUgbnVtYmVyIG9mCi1waHlzaWNhbCBlbnRyaWVzIHJldHVybmVkLgorYnVzIGFkZHJlc3MgZW50cmllcyByZXR1cm5lZC4KIAogdm9pZAogZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLApAQCAtMzUwLDcgKzM1NSw3IEBACiBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKIAkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIAotU3luY2hyb25pc2UgYSBzaW5nbGUgY29udGlndW91cyBvciBzY2F0dGVyL2dhdGhlciBtYXBwaW5nIGZvciB0aGUgY3B1CitTeW5jaHJvbmlzZSBhIHNpbmdsZSBjb250aWd1b3VzIG9yIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcgZm9yIHRoZSBDUFUKIGFuZCBkZXZpY2UuIFdpdGggdGhlIHN5bmNfc2cgQVBJLCBhbGwgdGhlIHBhcmFtZXRlcnMgbXVzdCBiZSB0aGUgc2FtZQogYXMgdGhvc2UgcGFzc2VkIGludG8gdGhlIHNpbmdsZSBtYXBwaW5nIEFQSS4gV2l0aCB0aGUgc3luY19zaW5nbGUgQVBJLAogeW91IGNhbiB1c2UgZG1hX2hhbmRsZSBhbmQgc2l6ZSBwYXJhbWV0ZXJzIHRoYXQgYXJlbid0IGlkZW50aWNhbCB0bwpAQCAtMzkxLDEwICszOTYsMTAgQEAKIHdpdGhvdXQgdGhlIF9hdHRycyBzdWZmaXhlcywgZXhjZXB0IHRoYXQgdGhleSBwYXNzIGFuIG9wdGlvbmFsCiBzdHJ1Y3QgZG1hX2F0dHJzKi4KIAotc3RydWN0IGRtYV9hdHRycyBlbmNhcHN1bGF0ZXMgYSBzZXQgb2YgImRtYSBhdHRyaWJ1dGVzIi4gRm9yIHRoZQorc3RydWN0IGRtYV9hdHRycyBlbmNhcHN1bGF0ZXMgYSBzZXQgb2YgIkRNQSBhdHRyaWJ1dGVzIi4gRm9yIHRoZQogZGVmaW5pdGlvbiBvZiBzdHJ1Y3QgZG1hX2F0dHJzIHNlZSBsaW51eC9kbWEtYXR0cnMuaC4KIAotVGhlIGludGVycHJldGF0aW9uIG9mIGRtYSBhdHRyaWJ1dGVzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYW5kCitUaGUgaW50ZXJwcmV0YXRpb24gb2YgRE1BIGF0dHJpYnV0ZXMgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhbmQKIGVhY2ggYXR0cmlidXRlIHNob3VsZCBiZSBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24vRE1BLWF0dHJpYnV0ZXMudHh0LgogCiBJZiBzdHJ1Y3QgZG1hX2F0dHJzKiBpcyBOVUxMLCB0aGUgc2VtYW50aWNzIG9mIGVhY2ggb2YgdGhlc2UKQEAgLTQ1OCw3ICs0NjMsNyBAQAogZ3VhcmFudGVlIHRoYXQgdGhlIHN5bmMgcG9pbnRzIGJlY29tZSBub3BzLgogCiBXYXJuaW5nOiAgSGFuZGxpbmcgbm9uLWNvbnNpc3RlbnQgbWVtb3J5IGlzIGEgcmVhbCBwYWluLiAgWW91IHNob3VsZAotb25seSBldmVyIHVzZSB0aGlzIEFQSSBpZiB5b3UgcG9zaXRpdmVseSBrbm93IHlvdXIgZHJpdmVyIHdpbGwgYmUKK29ubHkgdXNlIHRoaXMgQVBJIGlmIHlvdSBwb3NpdGl2ZWx5IGtub3cgeW91ciBkcml2ZXIgd2lsbCBiZQogcmVxdWlyZWQgdG8gd29yayBvbiBvbmUgb2YgdGhlIHJhcmUgKHVzdWFsbHkgbm9uLVBDSSkgYXJjaGl0ZWN0dXJlcwogdGhhdCBzaW1wbHkgY2Fubm90IG1ha2UgY29uc2lzdGVudCBtZW1vcnkuCiAKQEAgLTQ5MiwzMCArNDk3LDI5IEBACiBib3VuZGFyaWVzIHdoZW4gZG9pbmcgdGhpcy4KIAogaW50Ci1kbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAorZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGh5c19hZGRyLAogCQkJICAgIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQKIAkJCSAgICBmbGFncykKIAotRGVjbGFyZSByZWdpb24gb2YgbWVtb3J5IHRvIGJlIGhhbmRlZCBvdXQgYnkgZG1hX2FsbG9jX2NvaGVyZW50IHdoZW4KK0RlY2xhcmUgcmVnaW9uIG9mIG1lbW9yeSB0byBiZSBoYW5kZWQgb3V0IGJ5IGRtYV9hbGxvY19jb2hlcmVudCgpIHdoZW4KIGl0J3MgYXNrZWQgZm9yIGNvaGVyZW50IG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UuCiAKLWJ1c19hZGRyIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRvIHdoaWNoIHRoZSBtZW1vcnkgaXMgY3VycmVudGx5Ci1hc3NpZ25lZCBpbiB0aGUgYnVzIHJlc3BvbmRpbmcgcmVnaW9uICh0aGlzIHdpbGwgYmUgdXNlZCBieSB0aGUKLXBsYXRmb3JtIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcpLgorcGh5c19hZGRyIGlzIHRoZSBDUFUgcGh5c2ljYWwgYWRkcmVzcyB0byB3aGljaCB0aGUgbWVtb3J5IGlzIGN1cnJlbnRseQorYXNzaWduZWQgKHRoaXMgd2lsbCBiZSBpb3JlbWFwcGVkIHNvIHRoZSBDUFUgY2FuIGFjY2VzcyB0aGUgcmVnaW9uKS4KIAotZGV2aWNlX2FkZHIgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgdGhlIGRldmljZSBuZWVkcyB0byBiZSBwcm9ncmFtbWVkCi13aXRoIGFjdHVhbGx5IHRvIGFkZHJlc3MgdGhpcyBtZW1vcnkgKHRoaXMgd2lsbCBiZSBoYW5kZWQgb3V0IGFzIHRoZQorZGV2aWNlX2FkZHIgaXMgdGhlIGJ1cyBhZGRyZXNzIHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZAord2l0aCB0byBhY3R1YWxseSBhZGRyZXNzIHRoaXMgbWVtb3J5ICh0aGlzIHdpbGwgYmUgaGFuZGVkIG91dCBhcyB0aGUKIGRtYV9hZGRyX3QgaW4gZG1hX2FsbG9jX2NvaGVyZW50KCkpLgogCiBzaXplIGlzIHRoZSBzaXplIG9mIHRoZSBhcmVhIChtdXN0IGJlIG11bHRpcGxlcyBvZiBQQUdFX1NJWkUpLgogCi1mbGFncyBjYW4gYmUgb3InZCB0b2dldGhlciBhbmQgYXJlOgorZmxhZ3MgY2FuIGJlIE9SZWQgdG9nZXRoZXIgYW5kIGFyZToKIAogRE1BX01FTU9SWV9NQVAgLSByZXF1ZXN0IHRoYXQgdGhlIG1lbW9yeSByZXR1cm5lZCBmcm9tCiBkbWFfYWxsb2NfY29oZXJlbnQoKSBiZSBkaXJlY3RseSB3cml0YWJsZS4KIAogRE1BX01FTU9SWV9JTyAtIHJlcXVlc3QgdGhhdCB0aGUgbWVtb3J5IHJldHVybmVkIGZyb20KLWRtYV9hbGxvY19jb2hlcmVudCgpIGJlIGFkZHJlc3NhYmxlIHVzaW5nIHJlYWQvd3JpdGUvbWVtY3B5X3RvaW8gZXRjLgorZG1hX2FsbG9jX2NvaGVyZW50KCkgYmUgYWRkcmVzc2FibGUgdXNpbmcgcmVhZCgpL3dyaXRlKCkvbWVtY3B5X3RvaW8oKSBldGMuCiAKIE9uZSBvciBib3RoIG9mIHRoZXNlIGZsYWdzIG11c3QgYmUgcHJlc2VudC4KIApAQCAtNTcyLDcgKzU3Niw3IEBACiBQYXJ0IElJSSAtIERlYnVnIGRyaXZlcnMgdXNlIG9mIHRoZSBETUEtQVBJCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBETUEtQVBJIGFzIGRlc2NyaWJlZCBhYm92ZSBhcyBzb21lIGNvbnN0cmFpbnRzLiBETUEgYWRkcmVzc2VzIG11c3QgYmUKK1RoZSBETUEtQVBJIGFzIGRlc2NyaWJlZCBhYm92ZSBoYXMgc29tZSBjb25zdHJhaW50cy4gRE1BIGFkZHJlc3NlcyBtdXN0IGJlCiByZWxlYXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2l6ZSBmb3IgZXhhbXBsZS4gV2l0aAogdGhlIGFkdmVudCBvZiBoYXJkd2FyZSBJT01NVXMgaXQgYmVjb21lcyBtb3JlIGFuZCBtb3JlIGltcG9ydGFudCB0aGF0IGRyaXZlcnMKIGRvIG5vdCB2aW9sYXRlIHRob3NlIGNvbnN0cmFpbnRzLiBJbiB0aGUgd29yc3QgY2FzZSBzdWNoIGEgdmlvbGF0aW9uIGNhbgpAQCAtNjkwLDExICs2OTQsMTEgQEAKIHZvaWQgZGVidWdfZG1hcF9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CiAKIGRtYS1kZWJ1ZyBpbnRlcmZhY2UgZGVidWdfZG1hX21hcHBpbmdfZXJyb3IoKSB0byBkZWJ1ZyBkcml2ZXJzIHRoYXQgZmFpbAotdG8gY2hlY2sgZG1hIG1hcHBpbmcgZXJyb3JzIG9uIGFkZHJlc3NlcyByZXR1cm5lZCBieSBkbWFfbWFwX3NpbmdsZSgpIGFuZAordG8gY2hlY2sgRE1BIG1hcHBpbmcgZXJyb3JzIG9uIGFkZHJlc3NlcyByZXR1cm5lZCBieSBkbWFfbWFwX3NpbmdsZSgpIGFuZAogZG1hX21hcF9wYWdlKCkgaW50ZXJmYWNlcy4gVGhpcyBpbnRlcmZhY2UgY2xlYXJzIGEgZmxhZyBzZXQgYnkKIGRlYnVnX2RtYV9tYXBfcGFnZSgpIHRvIGluZGljYXRlIHRoYXQgZG1hX21hcHBpbmdfZXJyb3IoKSBoYXMgYmVlbiBjYWxsZWQgYnkKIHRoZSBkcml2ZXIuIFdoZW4gZHJpdmVyIGRvZXMgdW5tYXAsIGRlYnVnX2RtYV91bm1hcCgpIGNoZWNrcyB0aGUgZmxhZyBhbmQgaWYKIHRoaXMgZmxhZyBpcyBzdGlsbCBzZXQsIHByaW50cyB3YXJuaW5nIG1lc3NhZ2UgdGhhdCBpbmNsdWRlcyBjYWxsIHRyYWNlIHRoYXQKIGxlYWRzIHVwIHRvIHRoZSB1bm1hcC4gVGhpcyBpbnRlcmZhY2UgY2FuIGJlIGNhbGxlZCBmcm9tIGRtYV9tYXBwaW5nX2Vycm9yKCkKLXJvdXRpbmVzIHRvIGVuYWJsZSBkbWEgbWFwcGluZyBlcnJvciBjaGVjayBkZWJ1Z2dpbmcuCityb3V0aW5lcyB0byBlbmFibGUgRE1BIG1hcHBpbmcgZXJyb3IgY2hlY2sgZGVidWdnaW5nLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1JU0EtTFBDLnR4dCBiL0RvY3VtZW50YXRpb24vRE1BLUlTQS1MUEMudHh0CmluZGV4IGU3Njc4MDUuLmIxYTE5ODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLUlTQS1MUEMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLUlTQS1MUEMudHh0CkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCiBUaGUgZmlyc3QgaXMgdGhlIGdlbmVyaWMgRE1BIEFQSSB1c2VkIHRvIGNvbnZlcnQgdmlydHVhbCBhZGRyZXNzZXMgdG8KLXBoeXNpY2FsIGFkZHJlc3NlcyAoc2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGRldGFpbHMpLgorYnVzIGFkZHJlc3NlcyAoc2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGRldGFpbHMpLgogCiBUaGUgc2Vjb25kIGNvbnRhaW5zIHRoZSByb3V0aW5lcyBzcGVjaWZpYyB0byBJU0EgRE1BIHRyYW5zZmVycy4gU2luY2UKIHRoaXMgaXMgbm90IHByZXNlbnQgb24gYWxsIHBsYXRmb3JtcyBtYWtlIHN1cmUgeW91IGNvbnN0cnVjdCB5b3VyCkBAIC01MCw3ICs1MCw3IEBACiBQYXJ0IElJSSAtIEFkZHJlc3MgdHJhbnNsYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UbyB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhIHBoeXNpY2FsIHVzZSB0aGUgbm9ybWFsIERNQQorVG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYSBidXMgYWRkcmVzcywgdXNlIHRoZSBub3JtYWwgRE1BCiBBUEkuIERvIF9ub3RfIHVzZSBpc2FfdmlydF90b19waHlzKCkgZXZlbiB0aG91Z2ggaXQgZG9lcyB0aGUgc2FtZQogdGhpbmcuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXNhX3ZpcnRfdG9fcGh5cygpCiB3aWxsIHJlcXVpcmUgYSBLY29uZmlnIGRlcGVuZGVuY3kgdG8gSVNBLCBub3QganVzdCBJU0FfRE1BX0FQSSB3aGljaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ETUEtYXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1hdHRyaWJ1dGVzLnR4dAppbmRleCBjYzI0NTBkLi4xOGRjNTJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RNQS1hdHRyaWJ1dGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0RNQS1hdHRyaWJ1dGVzLnR4dApAQCAtOTgsNSArOTgsNSBAQAogQnkgZGVmYXVsdCBETUEtbWFwcGluZyBzdWJzeXN0ZW0gaXMgYWxsb3dlZCB0byBhc3NlbWJsZSB0aGUgYnVmZmVyCiBhbGxvY2F0ZWQgYnkgZG1hX2FsbG9jX2F0dHJzKCkgZnVuY3Rpb24gZnJvbSBpbmRpdmlkdWFsIHBhZ2VzIGlmIGl0IGNhbgogYmUgbWFwcGVkIGFzIGNvbnRpZ3VvdXMgY2h1bmsgaW50byBkZXZpY2UgZG1hIGFkZHJlc3Mgc3BhY2UuIEJ5Ci1zcGVjaWZpbmcgdGhpcyBhdHRyaWJ1dGUgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgZm9yY2VkIHRvIGJlIGNvbnRpZ3VvdXMKK3NwZWNpZnlpbmcgdGhpcyBhdHRyaWJ1dGUgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgZm9yY2VkIHRvIGJlIGNvbnRpZ3VvdXMKIGFsc28gaW4gcGh5c2ljYWwgbWVtb3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IGI0NDRmMmUuLmJlYzA2NjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDggQEAKIAkgICAgZ2VuZXJpY2lycS54bWwgczM5MC1kcml2ZXJzLnhtbCB1aW8taG93dG8ueG1sIHNjc2kueG1sIFwKIAkgICAgODAyMTEueG1sIGRlYnVnb2JqZWN0cy54bWwgc2gueG1sIHJlZ3VsYXRvci54bWwgXAogCSAgICBhbHNhLWRyaXZlci1hcGkueG1sIHdyaXRpbmctYW4tYWxzYS1kcml2ZXIueG1sIFwKLQkgICAgdHJhY2Vwb2ludC54bWwgZHJtLnhtbCBtZWRpYV9hcGkueG1sIHcxLnhtbAorCSAgICB0cmFjZXBvaW50LnhtbCBkcm0ueG1sIG1lZGlhX2FwaS54bWwgdzEueG1sIFwKKwkgICAgd3JpdGluZ19tdXNiX2dsdWVfbGF5ZXIueG1sCiAKIGluY2x1ZGUgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL01ha2VmaWxlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKaW5kZXggNGY2NzY4My4uYmNkZmRiOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKQEAgLTYyLDcgKzYyLDcgQEAKICFFZnMvbXBhZ2UuYwogIUVmcy9uYW1laS5jCiAhRWZzL2J1ZmZlci5jCi0hRWZzL2Jpby5jCishRWJsb2NrL2Jpby5jCiAhRWZzL3NlcV9maWxlLmMKICFFZnMvZmlsZXN5c3RlbXMuYwogIUVmcy9mcy13cml0ZWJhY2suYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmdfbXVzYl9nbHVlX2xheWVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZ19tdXNiX2dsdWVfbGF5ZXIudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdlY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmdfbXVzYl9nbHVlX2xheWVyLnRtcGwKQEAgLTAsMCArMSw4NzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iV3JpdGluZy1NVVNCLUdsdWUtTGF5ZXIiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPldyaXRpbmcgYW4gTVVTQiBHbHVlIExheWVyPC90aXRsZT4KKworICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+QXBlbGV0ZTwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPlNla2V0ZWxpPC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+YXBlbGV0ZSBhdCBzZWtldGVsaS5uZXQ8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDE0PC95ZWFyPgorICAgPGhvbGRlcj5BcGVsZXRlIFNla2V0ZWxpPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKyAgICAgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgYWxvbmcgd2l0aCB0aGlzIGRvY3VtZW50YXRpb247IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgICAgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UKKyAgICAgdHJlZS4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRyb2R1Y3Rpb24iPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIExpbnV4IE1VU0Igc3Vic3lzdGVtIGlzIHBhcnQgb2YgdGhlIGxhcmdlciBMaW51eCBVU0IKKyAgICAgIHN1YnN5c3RlbS4gSXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZW1iZWRkZWQgVVNCIERldmljZSBDb250cm9sbGVycworICAgICAgKFVEQykgdGhhdCBkbyBub3QgdXNlIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChVSENJKQorICAgICAgb3IgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBJbnN0ZWFkLCB0aGVzZSBlbWJlZGRlZCBVREMgcmVseSBvbiB0aGUgVVNCIE9uLXRoZS1HbyAoT1RHKQorICAgICAgc3BlY2lmaWNhdGlvbiB3aGljaCB0aGV5IGltcGxlbWVudCBhdCBsZWFzdCBwYXJ0aWFsbHkuIFRoZSBzaWxpY29uCisgICAgICByZWZlcmVuY2UgZGVzaWduIHVzZWQgaW4gbW9zdCBjYXNlcyBpcyB0aGUgTXVsdGlwb2ludCBVU0IKKyAgICAgIEhpZ2hzcGVlZCBEdWFsLVJvbGUgQ29udHJvbGxlciAoTVVTQiBIRFJDKSBmb3VuZCBpbiB0aGUgTWVudG9yCisgICAgICBHcmFwaGljcyBJbnZlbnRyYeKEoiBkZXNpZ24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQXMgYSBzZWxmLXRhdWdodCBleGVyY2lzZSBJIGhhdmUgd3JpdHRlbiBhbiBNVVNCIGdsdWUgbGF5ZXIgZm9yCisgICAgICB0aGUgSW5nZW5pYyBKWjQ3NDAgU29DLCBtb2RlbGxlZCBhZnRlciB0aGUgbWFueSBNVVNCIGdsdWUgbGF5ZXJzCisgICAgICBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGlzIGxheWVyIGNhbiBiZSBmb3VuZCBhdAorICAgICAgZHJpdmVycy91c2IvbXVzYi9qejQ3NDAuYy4gSW4gdGhpcyBkb2N1bWVudGF0aW9uIEkgd2lsbCB3YWxrCisgICAgICB0aHJvdWdoIHRoZSBiYXNpY3Mgb2YgdGhlIGp6NDc0MC5jIGdsdWUgbGF5ZXIsIGV4cGxhaW5pbmcgdGhlCisgICAgICBkaWZmZXJlbnQgcGllY2VzIGFuZCB3aGF0IG5lZWRzIHRvIGJlIGRvbmUgaW4gb3JkZXIgdG8gd3JpdGUgeW91cgorICAgICAgb3duIGRldmljZSBnbHVlIGxheWVyLgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJsaW51eC1tdXNiLWJhc2ljcyI+CisgICAgPHRpdGxlPkxpbnV4IE1VU0IgQmFzaWNzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRvIGdldCBzdGFydGVkIG9uIHRoZSB0b3BpYywgcGxlYXNlIHJlYWQgVVNCIE9uLXRoZS1HbyBCYXNpY3MgKHNlZQorICAgICAgUmVzb3VyY2VzKSB3aGljaCBwcm92aWRlcyBhbiBpbnRyb2R1Y3Rpb24gb2YgVVNCIE9URyBvcGVyYXRpb24gYXQKKyAgICAgIHRoZSBoYXJkd2FyZSBsZXZlbC4gQSBjb3VwbGUgb2Ygd2lraSBwYWdlcyBieSBUZXhhcyBJbnN0cnVtZW50cworICAgICAgYW5kIEFuYWxvZyBEZXZpY2VzIGFsc28gcHJvdmlkZSBhbiBvdmVydmlldyBvZiB0aGUgTGludXgga2VybmVsCisgICAgICBNVVNCIGNvbmZpZ3VyYXRpb24sIGFsYmVpdCBmb2N1c2VkIG9uIHNvbWUgc3BlY2lmaWMgZGV2aWNlcworICAgICAgcHJvdmlkZWQgYnkgdGhlc2UgY29tcGFuaWVzLiBGaW5hbGx5LCBnZXR0aW5nIGFjcXVhaW50ZWQgd2l0aCB0aGUKKyAgICAgIFVTQiBzcGVjaWZpY2F0aW9uIGF0IFVTQiBob21lIHBhZ2UgbWF5IGNvbWUgaW4gaGFuZHksIHdpdGgKKyAgICAgIHByYWN0aWNhbCBpbnN0YW5jZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBXcml0aW5nIFVTQiBEZXZpY2UgRHJpdmVycworICAgICAgZG9jdW1lbnRhdGlvbiAoYWdhaW4sIHNlZSBSZXNvdXJjZXMpLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIExpbnV4IFVTQiBzdGFjayBpcyBhIGxheWVyZWQgYXJjaGl0ZWN0dXJlIGluIHdoaWNoIHRoZSBNVVNCCisgICAgICBjb250cm9sbGVyIGhhcmR3YXJlIHNpdHMgYXQgdGhlIGxvd2VzdC4gVGhlIE1VU0IgY29udHJvbGxlciBkcml2ZXIKKyAgICAgIGFic3RyYWN0IHRoZSBNVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUgdG8gdGhlIExpbnV4IFVTQiBzdGFjay4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgJmx0Oy0tLS0tLS0gZHJpdmVycy91c2IvZ2FkZ2V0CisgICAgICB8IExpbnV4IFVTQiBDb3JlIFN0YWNrIHwgJmx0Oy0tLS0tLS0gZHJpdmVycy91c2IvaG9zdAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICZsdDstLS0tLS0tIGRyaXZlcnMvdXNiL2NvcmUKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICDirI0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgJmx0Oy0tLS0tLSBkcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKyAgICAgfCBNVVNCIENvbnRyb2xsZXIgZHJpdmVyIHwgJmx0Oy0tLS0tLSBkcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICZsdDstLS0tLS0gZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICDirI0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHwgTVVTQiBQbGF0Zm9ybSBTcGVjaWZpYyBEcml2ZXIgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJmx0Oy0tIGRyaXZlcnMvdXNiL211c2Ivano0NzQwLmMKKyAgfCAgICAgICBha2EgJnF1b3Q7R2x1ZSBMYXllciZxdW90OyAgICAgICAgfAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg4qyNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB8ICAgTVVTQiBDb250cm9sbGVyIEhhcmR3YXJlICAgIHwKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIEFzIG91dGxpbmVkIGFib3ZlLCB0aGUgZ2x1ZSBsYXllciBpcyBhY3R1YWxseSB0aGUgcGxhdGZvcm0KKyAgICAgIHNwZWNpZmljIGNvZGUgc2l0dGluZyBpbiBiZXR3ZWVuIHRoZSBjb250cm9sbGVyIGRyaXZlciBhbmQgdGhlCisgICAgICBjb250cm9sbGVyIGhhcmR3YXJlLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEp1c3QgbGlrZSBhIExpbnV4IFVTQiBkcml2ZXIgbmVlZHMgdG8gcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlCisgICAgICBMaW51eCBVU0Igc3Vic3lzdGVtLCB0aGUgTVVTQiBnbHVlIGxheWVyIG5lZWRzIGZpcnN0IHRvIHJlZ2lzdGVyCisgICAgICBpdHNlbGYgd2l0aCB0aGUgTVVTQiBjb250cm9sbGVyIGRyaXZlci4gVGhpcyB3aWxsIGFsbG93IHRoZQorICAgICAgY29udHJvbGxlciBkcml2ZXIgdG8ga25vdyBhYm91dCB3aGljaCBkZXZpY2UgdGhlIGdsdWUgbGF5ZXIKKyAgICAgIHN1cHBvcnRzIGFuZCB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB3aGVuIGEgc3VwcG9ydGVkIGRldmljZSBpcworICAgICAgZGV0ZWN0ZWQgb3IgcmVsZWFzZWQ7IHJlbWVtYmVyIHdlIGFyZSB0YWxraW5nIGFib3V0IGFuIGVtYmVkZGVkCisgICAgICBjb250cm9sbGVyIGNoaXAgaGVyZSwgc28gbm8gaW5zZXJ0aW9uIG9yIHJlbW92YWwgYXQgcnVuLXRpbWUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQWxsIG9mIHRoaXMgaW5mb3JtYXRpb24gaXMgcGFzc2VkIHRvIHRoZSBNVVNCIGNvbnRyb2xsZXIgZHJpdmVyCisgICAgICB0aHJvdWdoIGEgcGxhdGZvcm1fZHJpdmVyIHN0cnVjdHVyZSBkZWZpbmVkIGluIHRoZSBnbHVlIGxheWVyIGFzOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgano0NzQwX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gano0NzQwX3Byb2JlLAorCS5yZW1vdmUJCT0gano0NzQwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXVzYi1qejQ3NDAiLAorCX0sCit9OworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgcHJvYmUgYW5kIHJlbW92ZSBmdW5jdGlvbiBwb2ludGVycyBhcmUgY2FsbGVkIHdoZW4gYSBtYXRjaGluZworICAgICAgZGV2aWNlIGlzIGRldGVjdGVkIGFuZCwgcmVzcGVjdGl2ZWx5LCByZWxlYXNlZC4gVGhlIG5hbWUgc3RyaW5nCisgICAgICBkZXNjcmliZXMgdGhlIGRldmljZSBzdXBwb3J0ZWQgYnkgdGhpcyBnbHVlIGxheWVyLiBJbiB0aGUgY3VycmVudAorICAgICAgY2FzZSBpdCBtYXRjaGVzIGEgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZSBkZWNsYXJlZCBpbgorICAgICAgYXJjaC9taXBzL2p6NDc0MC9wbGF0Zm9ybS5jLiBOb3RlIHRoYXQgd2UgYXJlIG5vdCB1c2luZyBkZXZpY2UKKyAgICAgIHRyZWUgYmluZGluZ3MgaGVyZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBJbiBvcmRlciB0byByZWdpc3RlciBpdHNlbGYgdG8gdGhlIGNvbnRyb2xsZXIgZHJpdmVyLCB0aGUgZ2x1ZQorICAgICAgbGF5ZXIgZ29lcyB0aHJvdWdoIGEgZmV3IHN0ZXBzLCBiYXNpY2FsbHkgYWxsb2NhdGluZyB0aGUKKyAgICAgIGNvbnRyb2xsZXIgaGFyZHdhcmUgcmVzb3VyY2VzIGFuZCBpbml0aWFsaXNpbmcgYSBjb3VwbGUgb2YKKyAgICAgIGNpcmN1aXRzLiBUbyBkbyBzbywgaXQgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZAorICAgICAgdGhyb3VnaG91dCB0aGVzZSBzdGVwcy4gVGhpcyBpcyBkb25lIGJ5IGRlZmluaW5nIGEgcHJpdmF0ZQorICAgICAgano0NzQwX2dsdWUgc3RydWN0dXJlOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RydWN0IGp6NDc0MF9nbHVlIHsKKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICptdXNiOworCXN0cnVjdCBjbGsJCSpjbGs7Cit9OworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgZGV2IGFuZCBtdXNiIG1lbWJlcnMgYXJlIGJvdGggZGV2aWNlIHN0cnVjdHVyZSB2YXJpYWJsZXMuIFRoZQorICAgICAgZmlyc3Qgb25lIGhvbGRzIGdlbmVyaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSwgc2luY2UgaXQncworICAgICAgdGhlIGJhc2ljIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCB0aGUgbGF0dGVyIGhvbGRzIGluZm9ybWF0aW9uIG1vcmUKKyAgICAgIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgc3Vic3lzdGVtIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB0by4gVGhlCisgICAgICBjbGsgdmFyaWFibGUga2VlcHMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZGV2aWNlIGNsb2NrCisgICAgICBvcGVyYXRpb24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgTGV0J3MgZ28gdGhyb3VnaCB0aGUgc3RlcHMgb2YgdGhlIHByb2JlIGZ1bmN0aW9uIHRoYXQgbGVhZHMgdGhlCisgICAgICBnbHVlIGxheWVyIHRvIHJlZ2lzdGVyIGl0c2VsZiB0byB0aGUgY29udHJvbGxlciBkcml2ZXIuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgTi5CLjogRm9yIHRoZSBzYWtlIG9mIHJlYWRhYmlsaXR5IGVhY2ggZnVuY3Rpb24gd2lsbCBiZSBzcGxpdCBpbgorICAgICAgbG9naWNhbCBwYXJ0cywgZWFjaCBwYXJ0IGJlaW5nIHNob3duIGFzIGlmIGl0IHdhcyBpbmRlcGVuZGVudCBmcm9tCisgICAgICB0aGUgb3RoZXJzLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIGludCBqejQ3NDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqbXVzYjsKKwlzdHJ1Y3Qgano0NzQwX2dsdWUJCSpnbHVlOworCXN0cnVjdCBjbGsgICAgICAgICAgICAgICAgICAgICAgKmNsazsKKwlpbnQJCQkJcmV0OworCisJZ2x1ZSA9IGRldm1fa3phbGxvYygmYW1wO3BkZXYtPmRldiwgc2l6ZW9mKCpnbHVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbHVlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11c2IgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIm11c2ItaGRyYyIsIFBMQVRGT1JNX0RFVklEX0FVVE8pOworCWlmICghbXVzYikgeworCQlkZXZfZXJyKCZhbXA7cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG11c2IgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2xrID0gZGV2bV9jbGtfZ2V0KCZhbXA7cGRldi0+ZGV2LCAidWRjIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCWRldl9lcnIoJmFtcDtwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlnb3RvIGVycl9wbGF0Zm9ybV9kZXZpY2VfcHV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmYW1wO3BkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgY2xvY2tcbiIpOworCQlnb3RvIGVycl9wbGF0Zm9ybV9kZXZpY2VfcHV0OworCX0KKworCW11c2ItPmRldi5wYXJlbnQJCT0gJmFtcDtwZGV2LT5kZXY7CisKKwlnbHVlLT5kZXYJCQk9ICZhbXA7cGRldi0+ZGV2OworCWdsdWUtPm11c2IJCQk9IG11c2I7CisJZ2x1ZS0+Y2xrCQkJPSBjbGs7CisKKwlyZXR1cm4gMDsKKworZXJyX3BsYXRmb3JtX2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChtdXNiKTsKKwlyZXR1cm4gcmV0OworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgZmlyc3QgZmV3IGxpbmVzIG9mIHRoZSBwcm9iZSBmdW5jdGlvbiBhbGxvY2F0ZSBhbmQgYXNzaWduIHRoZQorICAgICAgZ2x1ZSwgbXVzYiBhbmQgY2xrIHZhcmlhYmxlcy4gVGhlIEdGUF9LRVJORUwgZmxhZyAobGluZSA4KSBhbGxvd3MKKyAgICAgIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIG1lbW9yeSwgdGh1cyBiZWluZworICAgICAgdXNhYmxlIGluIGEgYmxvY2tpbmcgc2l0dWF0aW9uLiBUaGUgUExBVEZPUk1fREVWSURfQVVUTyBmbGFnIChsaW5lCisgICAgICAxMikgYWxsb3dzIGF1dG9tYXRpYyBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGRldmljZSBJRHMgaW4KKyAgICAgIG9yZGVyIHRvIGF2b2lkIGRldmljZSBuYW1lc3BhY2UgY29sbGlzaW9ucyB3aXRoIGV4cGxpY2l0IElEcy4gV2l0aAorICAgICAgZGV2bV9jbGtfZ2V0KCkgKGxpbmUgMTgpIHRoZSBnbHVlIGxheWVyIGFsbG9jYXRlcyB0aGUgY2xvY2sgLS0gdGhlCisgICAgICA8bGl0ZXJhbD5kZXZtXzwvbGl0ZXJhbD4gcHJlZml4IGluZGljYXRlcyB0aGF0IGNsa19nZXQoKSBpcworICAgICAgbWFuYWdlZDogaXQgYXV0b21hdGljYWxseSBmcmVlcyB0aGUgYWxsb2NhdGVkIGNsb2NrIHJlc291cmNlIGRhdGEKKyAgICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZCAtLSBhbmQgZW5hYmxlIGl0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZW4gY29tZXMgdGhlIHJlZ2lzdHJhdGlvbiBzdGVwczoKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nIGxpbmVudW1iZXJpbmc9Im51bWJlcmVkIj4KK3N0YXRpYyBpbnQgano0NzQwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9ICZhbXA7ano0NzQwX211c2JfcGxhdGZvcm1fZGF0YTsKKworCXBkYXRhLT5wbGF0Zm9ybV9vcHMJCT0gJmFtcDtqejQ3NDBfbXVzYl9vcHM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBnbHVlKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKG11c2IsIHBkZXYtPnJlc291cmNlLAorCQkJCQkgICAgcGRldi0+bnVtX3Jlc291cmNlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZhbXA7cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEobXVzYiwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmFtcDtwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIHBsYXRmb3JtX2RhdGFcbiIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOworZXJyX3BsYXRmb3JtX2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChtdXNiKTsKKwlyZXR1cm4gcmV0OworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgZmlyc3Qgc3RlcCBpcyB0byBwYXNzIHRoZSBkZXZpY2UgZGF0YSBwcml2YXRlbHkgaGVsZCBieSB0aGUKKyAgICAgIGdsdWUgbGF5ZXIgb24gdG8gdGhlIGNvbnRyb2xsZXIgZHJpdmVyIHRocm91Z2gKKyAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKCkgKGxpbmUgNykuIE5leHQgaXMgcGFzc2luZyBvbiB0aGUgZGV2aWNlCisgICAgICByZXNvdXJjZXMgaW5mb3JtYXRpb24sIGFsc28gcHJpdmF0ZWx5IGhlbGQgYXQgdGhhdCBwb2ludCwgdGhyb3VnaAorICAgICAgcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMoKSAobGluZSA5KS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBGaW5hbGx5IGNvbWVzIHBhc3Npbmcgb24gdGhlIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgdG8gdGhlCisgICAgICBjb250cm9sbGVyIGRyaXZlciAobGluZSAxNikuIFBsYXRmb3JtIGRhdGEgd2lsbCBiZSBkaXNjdXNzZWQgaW4KKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImRldmljZS1wbGF0Zm9ybS1kYXRhIj5DaGFwdGVyIDQ8L2xpbms+LCBidXQgaGVyZQorICAgICAgd2UgYXJlIGxvb2tpbmcgYXQgdGhlIHBsYXRmb3JtX29wcyBmdW5jdGlvbiBwb2ludGVyIChsaW5lIDUpIGluCisgICAgICBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBzdHJ1Y3R1cmUgKGxpbmUgMykuICBUaGlzIGZ1bmN0aW9uCisgICAgICBwb2ludGVyIGFsbG93cyB0aGUgTVVTQiBjb250cm9sbGVyIGRyaXZlciB0byBrbm93IHdoaWNoIGZ1bmN0aW9uCisgICAgICB0byBjYWxsIGZvciBkZXZpY2Ugb3BlcmF0aW9uOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIGNvbnN0IHN0cnVjdCBtdXNiX3BsYXRmb3JtX29wcyBqejQ3NDBfbXVzYl9vcHMgPSB7CisJLmluaXQJCT0gano0NzQwX211c2JfaW5pdCwKKwkuZXhpdAkJPSBqejQ3NDBfbXVzYl9leGl0LAorfTsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgSGVyZSB3ZSBoYXZlIHRoZSBtaW5pbWFsIGNhc2Ugd2hlcmUgb25seSBpbml0IGFuZCBleGl0IGZ1bmN0aW9ucworICAgICAgYXJlIGNhbGxlZCBieSB0aGUgY29udHJvbGxlciBkcml2ZXIgd2hlbiBuZWVkZWQuIEZhY3QgaXMgdGhlCisgICAgICBKWjQ3NDAgTVVTQiBjb250cm9sbGVyIGlzIGEgYmFzaWMgY29udHJvbGxlciwgbGFja2luZyBzb21lCisgICAgICBmZWF0dXJlcyBmb3VuZCBpbiBvdGhlciBjb250cm9sbGVycywgb3RoZXJ3aXNlIHdlIG1heSBhbHNvIGhhdmUKKyAgICAgIHBvaW50ZXJzIHRvIGEgZmV3IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGEgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbgorICAgICAgb3IgYSBmdW5jdGlvbiB0byBzd2l0Y2ggYmV0d2VlbiBPVEcgYW5kIG5vbi1PVEcgbW9kZXMsIGZvcgorICAgICAgaW5zdGFuY2UuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQXQgdGhhdCBwb2ludCBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIHRoZSBjb250cm9sbGVyIGRyaXZlcgorICAgICAgYWN0dWFsbHkgY2FsbHMgdGhlIGluaXQgZnVuY3Rpb246CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZyBsaW5lbnVtYmVyaW5nPSJudW1iZXJlZCI+CitzdGF0aWMgaW50IGp6NDc0MF9tdXNiX2luaXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJbXVzYi0+eGNlaXYgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7CisJaWYgKCFtdXNiLT54Y2VpdikgeworCQlwcl9lcnIoIkhTIFVEQzogbm8gdHJhbnNjZWl2ZXIgY29uZmlndXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNpbGljb24gZG9lcyBub3QgaW1wbGVtZW50IENvbmZpZ0RhdGEgcmVnaXN0ZXIuCisJICogU2V0IGR5bl9maWZvIHRvIGF2b2lkIHJlYWRpbmcgRVAgY29uZmlnIGZyb20gaGFyZHdhcmUuCisJICovCisJbXVzYi0+ZHluX2ZpZm8gPSB0cnVlOworCisJbXVzYi0+aXNyID0gano0NzQwX211c2JfaW50ZXJydXB0OworCisJcmV0dXJuIDA7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBnb2FsIG9mIGp6NDc0MF9tdXNiX2luaXQoKSBpcyB0byBnZXQgaG9sZCBvZiB0aGUgdHJhbnNjZWl2ZXIKKyAgICAgIGRyaXZlciBkYXRhIG9mIHRoZSBNVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUgYW5kIHBhc3MgaXQgb24gdG8gdGhlCisgICAgICBNVVNCIGNvbnRyb2xsZXIgZHJpdmVyLCBhcyB1c3VhbC4gVGhlIHRyYW5zY2VpdmVyIGlzIHRoZSBjaXJjdWl0cnkKKyAgICAgIGluc2lkZSB0aGUgY29udHJvbGxlciBoYXJkd2FyZSByZXNwb25zaWJsZSBmb3Igc2VuZGluZy9yZWNlaXZpbmcKKyAgICAgIHRoZSBVU0IgZGF0YS4gU2luY2UgaXQgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHBoeXNpY2FsIGxheWVyCisgICAgICBvZiB0aGUgT1NJIG1vZGVsLCB0aGUgdHJhbnNjZWl2ZXIgaXMgYWxzbyByZWZlcnJlZCB0byBhcyBQSFkuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgR2V0dGluZyBob2xkIG9mIHRoZSBNVVNCIFBIWSBkcml2ZXIgZGF0YSBpcyBkb25lIHdpdGgKKyAgICAgIHVzYl9nZXRfcGh5KCkgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZQorICAgICAgY29udGFpbmluZyB0aGUgZHJpdmVyIGluc3RhbmNlIGRhdGEuIFRoZSBuZXh0IGNvdXBsZSBvZgorICAgICAgaW5zdHJ1Y3Rpb25zIChsaW5lIDEyIGFuZCAxNCkgYXJlIHVzZWQgYXMgYSBxdWlyayBhbmQgdG8gc2V0dXAKKyAgICAgIElSUSBoYW5kbGluZyByZXNwZWN0aXZlbHkuIFF1aXJrcyBhbmQgSVJRIGhhbmRsaW5nIHdpbGwgYmUKKyAgICAgIGRpc2N1c3NlZCBsYXRlciBpbiA8bGluayBsaW5rZW5kPSJkZXZpY2UtcXVpcmtzIj5DaGFwdGVyCisgICAgICA1PC9saW5rPiBhbmQgPGxpbmsgbGlua2VuZD0iaGFuZGxpbmctaXJxcyI+Q2hhcHRlciAzPC9saW5rPi4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nIGxpbmVudW1iZXJpbmc9Im51bWJlcmVkIj4KK3N0YXRpYyBpbnQgano0NzQwX211c2JfZXhpdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwl1c2JfcHV0X3BoeShtdXNiLT54Y2Vpdik7CisKKwlyZXR1cm4gMDsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgQWN0aW5nIGFzIHRoZSBjb3VudGVycGFydCBvZiBpbml0LCB0aGUgZXhpdCBmdW5jdGlvbiByZWxlYXNlcyB0aGUKKyAgICAgIE1VU0IgUEhZIGRyaXZlciB3aGVuIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIGl0c2VsZiBpcyBhYm91dCB0byBiZQorICAgICAgcmVsZWFzZWQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQWdhaW4sIG5vdGUgdGhhdCBpbml0IGFuZCBleGl0IGFyZSBmYWlybHkgc2ltcGxlIGluIHRoaXMgY2FzZSBkdWUKKyAgICAgIHRvIHRoZSBiYXNpYyBzZXQgb2YgZmVhdHVyZXMgb2YgdGhlIEpaNDc0MCBjb250cm9sbGVyIGhhcmR3YXJlLgorICAgICAgV2hlbiB3cml0aW5nIGFuIG11c2IgZ2x1ZSBsYXllciBmb3IgYSBtb3JlIGNvbXBsZXggY29udHJvbGxlcgorICAgICAgaGFyZHdhcmUsIHlvdSBtaWdodCBuZWVkIHRvIHRha2UgY2FyZSBvZiBtb3JlIHByb2Nlc3NpbmcgaW4gdGhvc2UKKyAgICAgIHR3byBmdW5jdGlvbnMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgUmV0dXJuaW5nIGZyb20gdGhlIGluaXQgZnVuY3Rpb24sIHRoZSBNVVNCIGNvbnRyb2xsZXIgZHJpdmVyIGp1bXBzCisgICAgICBiYWNrIGludG8gdGhlIHByb2JlIGZ1bmN0aW9uOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIGludCBqejQ3NDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG11c2IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmYW1wO3BkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBtdXNiIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCX0KKworCXJldHVybiAwOworCitlcnJfY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CitlcnJfcGxhdGZvcm1fZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG11c2IpOworCXJldHVybiByZXQ7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgaXMgdGhlIGxhc3QgcGFydCBvZiB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdoZXJlIHRoZQorICAgICAgZ2x1ZSBsYXllciBhZGRzIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIGRldmljZSB0byBMaW51eCBrZXJuZWwKKyAgICAgIGRldmljZSBoaWVyYXJjaHk6IGF0IHRoaXMgc3RhZ2UsIGFsbCBrbm93biBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgIGRldmljZSBpcyBwYXNzZWQgb24gdG8gdGhlIExpbnV4IFVTQiBjb3JlIHN0YWNrLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIGludCBqejQ3NDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGp6NDc0MF9nbHVlCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihnbHVlLT5tdXNiKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZ2x1ZS0+Y2xrKTsKKworCXJldHVybiAwOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBBY3RpbmcgYXMgdGhlIGNvdW50ZXJwYXJ0IG9mIHByb2JlLCB0aGUgcmVtb3ZlIGZ1bmN0aW9uIHVucmVnaXN0ZXIKKyAgICAgIHRoZSBNVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUgKGxpbmUgNSkgYW5kIGRpc2FibGUgdGhlIGNsb2NrIChsaW5lCisgICAgICA2KSwgYWxsb3dpbmcgaXQgdG8gYmUgZ2F0ZWQuCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImhhbmRsaW5nLWlycXMiPgorICAgIDx0aXRsZT5IYW5kbGluZyBJUlFzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEFkZGl0aW9uYWxseSB0byB0aGUgTVVTQiBjb250cm9sbGVyIGhhcmR3YXJlIGJhc2ljIHNldHVwIGFuZAorICAgICAgcmVnaXN0cmF0aW9uLCB0aGUgZ2x1ZSBsYXllciBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUKKyAgICAgIElSUXM6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZyBsaW5lbnVtYmVyaW5nPSJudW1iZXJlZCI+CitzdGF0aWMgaXJxcmV0dXJuX3Qgano0NzQwX211c2JfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKl9faGNpKQoreworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlpcnFyZXR1cm5fdCAgICAgcmV0dmFsID0gSVJRX05PTkU7CisJc3RydWN0IG11c2IgICAgICptdXNiID0gX19oY2k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO211c2ItPmxvY2ssIGZsYWdzKTsKKworCW11c2ItPmludF91c2IgPSBtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0lOVFJVU0IpOworCW11c2ItPmludF90eCA9IG11c2JfcmVhZHcobXVzYi0+bXJlZ3MsIE1VU0JfSU5UUlRYKTsKKwltdXNiLT5pbnRfcnggPSBtdXNiX3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX0lOVFJSWCk7CisKKwkvKgorCSAqIFRoZSBjb250cm9sbGVyIGlzIGdhZGdldCBvbmx5LCB0aGUgc3RhdGUgb2YgdGhlIGhvc3QgbW9kZSBJUlEgYml0cyBpcworCSAqIHVuZGVmaW5lZC4gTWFzayB0aGVtIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtdXNiIGRyaXZlciBjb3JlIHdpbGwKKwkgKiBuZXZlciBzZWUgdGhlbSBzZXQKKwkgKi8KKwltdXNiLT5pbnRfdXNiICZhbXA7PSBNVVNCX0lOVFJfU1VTUEVORCB8IE1VU0JfSU5UUl9SRVNVTUUgfAorCSAgICBNVVNCX0lOVFJfUkVTRVQgfCBNVVNCX0lOVFJfU09GOworCisJaWYgKG11c2ItPmludF91c2IgfHwgbXVzYi0+aW50X3R4IHx8IG11c2ItPmludF9yeCkKKwkJcmV0dmFsID0gbXVzYl9pbnRlcnJ1cHQobXVzYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bXVzYi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgSGVyZSB0aGUgZ2x1ZSBsYXllciBtb3N0bHkgaGFzIHRvIHJlYWQgdGhlIHJlbGV2YW50IGhhcmR3YXJlCisgICAgICByZWdpc3RlcnMgYW5kIHBhc3MgdGhlaXIgdmFsdWVzIG9uIHRvIHRoZSBjb250cm9sbGVyIGRyaXZlciB3aGljaAorICAgICAgd2lsbCBoYW5kbGUgdGhlIGFjdHVhbCBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgSVJRLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBjcml0aWNhbCBzZWN0aW9uIGlzIHByb3RlY3RlZCBieSB0aGUKKyAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCkgYW5kIGNvdW50ZXJwYXJ0IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoKQorICAgICAgZnVuY3Rpb25zIChsaW5lIDcgYW5kIDI0IHJlc3BlY3RpdmVseSksIHdoaWNoIHByZXZlbnQgdGhlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBjb2RlIHRvIGJlIHJ1biBieSB0d28gZGlmZmVyZW50IHRocmVhZHMgYXQgdGhlCisgICAgICBzYW1lIHRpbWUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlbiB0aGUgcmVsZXZhbnQgaW50ZXJydXB0IHJlZ2lzdGVycyBhcmUgcmVhZCAobGluZSA5IHRvIDExKToKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTVVTQl9JTlRSVVNCOiBpbmRpY2F0ZXMgd2hpY2ggVVNCIGludGVycnVwdHMgYXJlIGN1cnJlbnRseQorICAgICAgICAgIGFjdGl2ZSwKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTVVTQl9JTlRSVFg6IGluZGljYXRlcyB3aGljaCBvZiB0aGUgaW50ZXJydXB0cyBmb3IgVFgKKyAgICAgICAgICBlbmRwb2ludHMgYXJlIGN1cnJlbnRseSBhY3RpdmUsCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1VU0JfSU5UUlJYOiBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGludGVycnVwdHMgZm9yIFRYCisgICAgICAgICAgZW5kcG9pbnRzIGFyZSBjdXJyZW50bHkgYWN0aXZlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDxwYXJhPgorICAgICAgTm90ZSB0aGF0IG11c2JfcmVhZGIoKSBpcyB1c2VkIHRvIHJlYWQgOC1iaXQgcmVnaXN0ZXJzIGF0IG1vc3QsCisgICAgICB3aGlsZSBtdXNiX3JlYWR3KCkgYWxsb3dzIHVzIHRvIHJlYWQgYXQgbW9zdCAxNi1iaXQgcmVnaXN0ZXJzLgorICAgICAgVGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGRlcGVuZGluZyBvbiB0aGUgc2l6ZQorICAgICAgb2YgeW91ciBkZXZpY2UgcmVnaXN0ZXJzLiBTZWUgbXVzYl9pby5oIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluc3RydWN0aW9uIG9uIGxpbmUgMTggaXMgYW5vdGhlciBxdWlyayBzcGVjaWZpYyB0byB0aGUgSlo0NzQwCisgICAgICBVU0IgZGV2aWNlIGNvbnRyb2xsZXIsIHdoaWNoIHdpbGwgYmUgZGlzY3Vzc2VkIGxhdGVyIGluIDxsaW5rCisgICAgICBsaW5rZW5kPSJkZXZpY2UtcXVpcmtzIj5DaGFwdGVyIDU8L2xpbms+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBnbHVlIGxheWVyIHN0aWxsIG5lZWRzIHRvIHJlZ2lzdGVyIHRoZSBJUlEgaGFuZGxlciB0aG91Z2guCisgICAgICBSZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb24gb24gbGluZSAxNCBvZiB0aGUgaW5pdCBmdW5jdGlvbjoKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nIGxpbmVudW1iZXJpbmc9Im51bWJlcmVkIj4KK3N0YXRpYyBpbnQgano0NzQwX211c2JfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwltdXNiLT5pc3IgPSBqejQ3NDBfbXVzYl9pbnRlcnJ1cHQ7CisKKwlyZXR1cm4gMDsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBpbnN0cnVjdGlvbiBzZXRzIGEgcG9pbnRlciB0byB0aGUgZ2x1ZSBsYXllciBJUlEgaGFuZGxlcgorICAgICAgZnVuY3Rpb24sIGluIG9yZGVyIGZvciB0aGUgY29udHJvbGxlciBoYXJkd2FyZSB0byBjYWxsIHRoZSBoYW5kbGVyCisgICAgICBiYWNrIHdoZW4gYW4gSVJRIGNvbWVzIGZyb20gdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUuIFRoZSBpbnRlcnJ1cHQKKyAgICAgIGhhbmRsZXIgaXMgbm93IGltcGxlbWVudGVkIGFuZCByZWdpc3RlcmVkLgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkZXZpY2UtcGxhdGZvcm0tZGF0YSI+CisgICAgPHRpdGxlPkRldmljZSBQbGF0Zm9ybSBEYXRhPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEluIG9yZGVyIHRvIHdyaXRlIGFuIE1VU0IgZ2x1ZSBsYXllciwgeW91IG5lZWQgdG8gaGF2ZSBzb21lIGRhdGEKKyAgICAgIGRlc2NyaWJpbmcgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvZiB5b3VyIGNvbnRyb2xsZXIgaGFyZHdhcmUsCisgICAgICB3aGljaCBpcyBjYWxsZWQgdGhlIHBsYXRmb3JtIGRhdGEuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgUGxhdGZvcm0gZGF0YSBpcyBzcGVjaWZpYyB0byB5b3VyIGhhcmR3YXJlLCB0aG91Z2ggaXQgbWF5IGNvdmVyIGEKKyAgICAgIGJyb2FkIHJhbmdlIG9mIGRldmljZXMsIGFuZCBpcyBnZW5lcmFsbHkgZm91bmQgc29tZXdoZXJlIGluIHRoZQorICAgICAgYXJjaC8gZGlyZWN0b3J5LCBkZXBlbmRpbmcgb24geW91ciBkZXZpY2UgYXJjaGl0ZWN0dXJlLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEZvciBpbnN0YW5jZSwgcGxhdGZvcm0gZGF0YSBmb3IgdGhlIEpaNDc0MCBTb0MgaXMgZm91bmQgaW4KKyAgICAgIGFyY2gvbWlwcy9qejQ3NDAvcGxhdGZvcm0uYy4gSW4gdGhlIHBsYXRmb3JtLmMgZmlsZSBlYWNoIGRldmljZSBvZgorICAgICAgdGhlIEpaNDc0MCBTb0MgaXMgZGVzY3JpYmVkIHRocm91Z2ggYSBzZXQgb2Ygc3RydWN0dXJlcy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBIZXJlIGlzIHRoZSBwYXJ0IG9mIGFyY2gvbWlwcy9qejQ3NDAvcGxhdGZvcm0uYyB0aGF0IGNvdmVycyB0aGUKKyAgICAgIFVTQiBEZXZpY2UgQ29udHJvbGxlciAoVURDKToKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nIGxpbmVudW1iZXJpbmc9Im51bWJlcmVkIj4KKy8qIFVTQiBEZXZpY2UgQ29udHJvbGxlciAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSBqejQ3NDBfdWRjX3hjZWl2X2RldmljZSA9IHsKKwkubmFtZSA9ICJ1c2JfcGh5X2dlbl94Y2VpdiIsCisJLmlkICAgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBqejQ3NDBfdWRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gSlo0NzQwX1VEQ19CQVNFX0FERFIsCisJCS5lbmQgICA9IEpaNDc0MF9VRENfQkFTRV9BRERSICsgMHgxMDAwMCAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBKWjQ3NDBfSVJRX1VEQywKKwkJLmVuZCAgID0gSlo0NzQwX0lSUV9VREMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZSAgPSAibWMiLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGp6NDc0MF91ZGNfZGV2aWNlID0geworCS5uYW1lID0gIm11c2Itano0NzQwIiwKKwkuaWQgICA9IC0xLAorCS5kZXYgID0geworCQkuZG1hX21hc2sgICAgICAgICAgPSAmYW1wO2p6NDc0MF91ZGNfZGV2aWNlLmRldi5jb2hlcmVudF9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShqejQ3NDBfdWRjX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgPSBqejQ3NDBfdWRjX3Jlc291cmNlcywKK307CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBqejQ3NDBfdWRjX3hjZWl2X2RldmljZSBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlIChsaW5lIDIpCisgICAgICBkZXNjcmliZXMgdGhlIFVEQyB0cmFuc2NlaXZlciB3aXRoIGEgbmFtZSBhbmQgaWQgbnVtYmVyLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgbm90ZSB0aGF0CisgICAgICAmcXVvdDt1c2JfcGh5X2dlbl94Y2VpdiZxdW90OyBpcyB0aGUgc3BlY2lmaWMgbmFtZSB0byBiZSB1c2VkIGZvcgorICAgICAgYWxsIHRyYW5zY2VpdmVycyB0aGF0IGFyZSBlaXRoZXIgYnVpbHQtaW4gd2l0aCByZWZlcmVuY2UgVVNCIElQIG9yCisgICAgICBhdXRvbm9tb3VzIGFuZCBkb2Vzbid0IHJlcXVpcmUgYW55IFBIWSBwcm9ncmFtbWluZy4gWW91IHdpbGwgbmVlZAorICAgICAgdG8gc2V0IENPTkZJR19OT1BfVVNCX1hDRUlWPXkgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIG1ha2UKKyAgICAgIHVzZSBvZiB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2NlaXZlciBkcml2ZXIuIFRoZSBpZCBmaWVsZCBjb3VsZCBiZQorICAgICAgc2V0IHRvIC0xIChlcXVpdmFsZW50IHRvIFBMQVRGT1JNX0RFVklEX05PTkUpLCAtMiAoZXF1aXZhbGVudCB0bworICAgICAgUExBVEZPUk1fREVWSURfQVVUTykgb3Igc3RhcnQgd2l0aCAwIGZvciB0aGUgZmlyc3QgZGV2aWNlIG9mIHRoaXMKKyAgICAgIGtpbmQgaWYgd2Ugd2FudCBhIHNwZWNpZmljIGlkIG51bWJlci4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgano0NzQwX3VkY19yZXNvdXJjZXMgcmVzb3VyY2Ugc3RydWN0dXJlIChsaW5lIDcpIGRlZmluZXMgdGhlCisgICAgICBVREMgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzc2VzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBmaXJzdCBhcnJheSAobGluZSA5IHRvIDExKSBkZWZpbmVzIHRoZSBVREMgcmVnaXN0ZXJzIGJhc2UKKyAgICAgIG1lbW9yeSBhZGRyZXNzZXM6IHN0YXJ0IHBvaW50cyB0byB0aGUgZmlyc3QgcmVnaXN0ZXIgbWVtb3J5CisgICAgICBhZGRyZXNzLCBlbmQgcG9pbnRzIHRvIHRoZSBsYXN0IHJlZ2lzdGVyIG1lbW9yeSBhZGRyZXNzIGFuZCB0aGUKKyAgICAgIGZsYWdzIG1lbWJlciBkZWZpbmVzIHRoZSB0eXBlIG9mIHJlc291cmNlIHdlIGFyZSBkZWFsaW5nIHdpdGguIFNvCisgICAgICBJT1JFU09VUkNFX01FTSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgcmVnaXN0ZXJzIG1lbW9yeSBhZGRyZXNzZXMuCisgICAgICBUaGUgc2Vjb25kIGFycmF5IChsaW5lIDE0IHRvIDE3KSBkZWZpbmVzIHRoZSBVREMgSVJRIHJlZ2lzdGVycworICAgICAgYWRkcmVzc2VzLiBTaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBJUlEgcmVnaXN0ZXIgYXZhaWxhYmxlIGZvciB0aGUKKyAgICAgIEpaNDc0MCBVREMsIHN0YXJ0IGFuZCBlbmQgcG9pbnQgYXQgdGhlIHNhbWUgYWRkcmVzcy4gVGhlCisgICAgICBJT1JFU09VUkNFX0lSUSBmbGFnIHRlbGxzIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBJUlEgcmVzb3VyY2VzLAorICAgICAgYW5kIHRoZSBuYW1lICZxdW90O21jJnF1b3Q7IGlzIGluIGZhY3QgaGFyZC1jb2RlZCBpbiB0aGUgTVVTQiBjb3JlCisgICAgICBpbiBvcmRlciBmb3IgdGhlIGNvbnRyb2xsZXIgZHJpdmVyIHRvIHJldHJpZXZlIHRoaXMgSVJRIHJlc291cmNlCisgICAgICBieSBxdWVyeWluZyBpdCBieSBpdHMgbmFtZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBGaW5hbGx5LCB0aGUgano0NzQwX3VkY19kZXZpY2UgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSAobGluZSAyMSkKKyAgICAgIGRlc2NyaWJlcyB0aGUgVURDIGl0c2VsZi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgJnF1b3Q7bXVzYi1qejQ3NDAmcXVvdDsgbmFtZSAobGluZSAyMikgZGVmaW5lcyB0aGUgTVVTQgorICAgICAgZHJpdmVyIHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBkZXZpY2U7IHJlbWVtYmVyIHRoaXMgaXMgaW4gZmFjdAorICAgICAgdGhlIG5hbWUgdGhhdCB3ZSB1c2VkIGluIHRoZSBqejQ3NDBfZHJpdmVyIHBsYXRmb3JtIGRyaXZlcgorICAgICAgc3RydWN0dXJlIGluIDxsaW5rIGxpbmtlbmQ9ImxpbnV4LW11c2ItYmFzaWNzIj5DaGFwdGVyCisgICAgICAyPC9saW5rPi4gVGhlIGlkIGZpZWxkIChsaW5lIDIzKSBpcyBzZXQgdG8gLTEgKGVxdWl2YWxlbnQgdG8KKyAgICAgIFBMQVRGT1JNX0RFVklEX05PTkUpIHNpbmNlIHdlIGRvIG5vdCBuZWVkIGFuIGlkIGZvciB0aGUgZGV2aWNlOgorICAgICAgdGhlIE1VU0IgY29udHJvbGxlciBkcml2ZXIgd2FzIGFscmVhZHkgc2V0IHRvIGFsbG9jYXRlIGFuCisgICAgICBhdXRvbWF0aWMgaWQgaW4gPGxpbmsgbGlua2VuZD0ibGludXgtbXVzYi1iYXNpY3MiPkNoYXB0ZXIKKyAgICAgIDI8L2xpbms+LiBJbiB0aGUgZGV2IGZpZWxkIHdlIGNhcmUgZm9yIERNQSByZWxhdGVkIGluZm9ybWF0aW9uCisgICAgICBoZXJlLiBUaGUgZG1hX21hc2sgZmllbGQgKGxpbmUgMjUpIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBETUEKKyAgICAgIG1hc2sgdGhhdCBpcyBnb2luZyB0byBiZSB1c2VkLCBhbmQgY29oZXJlbnRfZG1hX21hc2sgKGxpbmUgMjYpCisgICAgICBoYXMgdGhlIHNhbWUgcHVycG9zZSBidXQgZm9yIHRoZSBhbGxvY19jb2hlcmVudCBETUEgbWFwcGluZ3M6IGluCisgICAgICBib3RoIGNhc2VzIHdlIGFyZSB1c2luZyBhIDMyIGJpdHMgbWFzay4gVGhlbiB0aGUgcmVzb3VyY2UgZmllbGQKKyAgICAgIChsaW5lIDI5KSBpcyBzaW1wbHkgYSBwb2ludGVyIHRvIHRoZSByZXNvdXJjZSBzdHJ1Y3R1cmUgZGVmaW5lZAorICAgICAgYmVmb3JlLCB3aGlsZSB0aGUgbnVtX3Jlc291cmNlcyBmaWVsZCAobGluZSAyOCkga2VlcHMgdHJhY2sgb2YKKyAgICAgIHRoZSBudW1iZXIgb2YgYXJyYXlzIGRlZmluZWQgaW4gdGhlIHJlc291cmNlIHN0cnVjdHVyZSAoaW4gdGhpcworICAgICAgY2FzZSB0aGVyZSB3ZXJlIHR3byByZXNvdXJjZSBhcnJheXMgZGVmaW5lZCBiZWZvcmUpLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFdpdGggdGhpcyBxdWljayBvdmVydmlldyBvZiB0aGUgVURDIHBsYXRmb3JtIGRhdGEgYXQgdGhlIGFyY2gvCisgICAgICBsZXZlbCBub3cgZG9uZSwgbGV0J3MgZ2V0IGJhY2sgdG8gdGhlIE1VU0IgZ2x1ZSBsYXllciBzcGVjaWZpYworICAgICAgcGxhdGZvcm0gZGF0YSBpbiBkcml2ZXJzL3VzYi9tdXNiL2p6NDc0MC5jOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIGp6NDc0MF9tdXNiX2NvbmZpZyA9IHsKKwkvKiBTaWxpY29uIGRvZXMgbm90IGltcGxlbWVudCBVU0IgT1RHLiAqLworCS5tdWx0aXBvaW50ID0gMCwKKwkvKiBNYXggRVBzIHNjYW5uZWQsIGRyaXZlciB3aWxsIGRlY2lkZSB3aGljaCBFUCBjYW4gYmUgdXNlZC4gKi8KKwkubnVtX2VwcyAgICA9IDQsCisJLyogUkFNYml0cyBuZWVkZWQgdG8gY29uZmlndXJlIEVQcyBmcm9tIHRhYmxlICovCisJLnJhbV9iaXRzICAgPSA5LAorCS5maWZvX2NmZyA9IGp6NDc0MF9tdXNiX2ZpZm9fY2ZnLAorCS5maWZvX2NmZ19zaXplID0gQVJSQVlfU0laRShqejQ3NDBfbXVzYl9maWZvX2NmZyksCit9OworCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIGp6NDc0MF9tdXNiX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgICA9IE1VU0JfUEVSSVBIRVJBTCwKKwkuY29uZmlnID0gJmFtcDtqejQ3NDBfbXVzYl9jb25maWcsCit9OworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBGaXJzdCB0aGUgZ2x1ZSBsYXllciBjb25maWd1cmVzIHNvbWUgYXNwZWN0cyBvZiB0aGUgY29udHJvbGxlcgorICAgICAgZHJpdmVyIG9wZXJhdGlvbiByZWxhdGVkIHRvIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIHNwZWNpZmljcy4KKyAgICAgIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBqejQ3NDBfbXVzYl9jb25maWcgbXVzYl9oZHJjX2NvbmZpZworICAgICAgc3RydWN0dXJlLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIERlZmluaW5nIHRoZSBPVEcgY2FwYWJpbGl0eSBvZiB0aGUgY29udHJvbGxlciBoYXJkd2FyZSwgdGhlCisgICAgICBtdWx0aXBvaW50IG1lbWJlciAobGluZSAzKSBpcyBzZXQgdG8gMCAoZXF1aXZhbGVudCB0byBmYWxzZSkKKyAgICAgIHNpbmNlIHRoZSBKWjQ3NDAgVURDIGlzIG5vdCBPVEcgY29tcGF0aWJsZS4gVGhlbiBudW1fZXBzIChsaW5lCisgICAgICA1KSBkZWZpbmVzIHRoZSBudW1iZXIgb2YgVVNCIGVuZHBvaW50cyBvZiB0aGUgY29udHJvbGxlcgorICAgICAgaGFyZHdhcmUsIGluY2x1ZGluZyBlbmRwb2ludCAwOiBoZXJlIHdlIGhhdmUgMyBlbmRwb2ludHMgKworICAgICAgZW5kcG9pbnQgMC4gTmV4dCBpcyByYW1fYml0cyAobGluZSA3KSB3aGljaCBpcyB0aGUgd2lkdGggb2YgdGhlCisgICAgICBSQU0gYWRkcmVzcyBidXMgZm9yIHRoZSBNVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUuIFRoaXMKKyAgICAgIGluZm9ybWF0aW9uIGlzIG5lZWRlZCB3aGVuIHRoZSBjb250cm9sbGVyIGRyaXZlciBjYW5ub3QKKyAgICAgIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIGVuZHBvaW50cyBieSByZWFkaW5nIHRoZSByZWxldmFudAorICAgICAgY29udHJvbGxlciBoYXJkd2FyZSByZWdpc3RlcnMuIFRoaXMgaXNzdWUgd2lsbCBiZSBkaXNjdXNzZWQgd2hlbgorICAgICAgd2UgZ2V0IHRvIGRldmljZSBxdWlya3MgaW4gPGxpbmsgbGlua2VuZD0iZGV2aWNlLXF1aXJrcyI+Q2hhcHRlcgorICAgICAgNTwvbGluaz4uIExhc3QgdHdvIGZpZWxkcyAobGluZSA4IGFuZCA5KSBhcmUgYWxzbyBhYm91dCBkZXZpY2UKKyAgICAgIHF1aXJrczogZmlmb19jZmcgcG9pbnRzIHRvIHRoZSBVU0IgZW5kcG9pbnRzIGNvbmZpZ3VyYXRpb24gdGFibGUKKyAgICAgIGFuZCBmaWZvX2NmZ19zaXplIGtlZXBzIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBudW1iZXIgb2YKKyAgICAgIGVudHJpZXMgaW4gdGhhdCBjb25maWd1cmF0aW9uIHRhYmxlLiBNb3JlIG9uIHRoYXQgbGF0ZXIgaW4gPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImRldmljZS1xdWlya3MiPkNoYXB0ZXIgNTwvbGluaz4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlbiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgZW1iZWRkZWQgaW5zaWRlCisgICAgICBqejQ3NDBfbXVzYl9wbGF0Zm9ybV9kYXRhIG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIHN0cnVjdHVyZSAobGluZQorICAgICAgMTEpOiBjb25maWcgaXMgYSBwb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBpdHNlbGYsCisgICAgICBhbmQgbW9kZSB0ZWxscyB0aGUgY29udHJvbGxlciBkcml2ZXIgaWYgdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUKKyAgICAgIG1heSBiZSB1c2VkIGFzIE1VU0JfSE9TVCBvbmx5LCBNVVNCX1BFUklQSEVSQUwgb25seSBvciBNVVNCX09URworICAgICAgd2hpY2ggaXMgYSBkdWFsIG1vZGUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgUmVtZW1iZXIgdGhhdCBqejQ3NDBfbXVzYl9wbGF0Zm9ybV9kYXRhIGlzIHRoZW4gdXNlZCB0byBjb252ZXkKKyAgICAgIHBsYXRmb3JtIGRhdGEgaW5mb3JtYXRpb24gYXMgd2UgaGF2ZSBzZWVuIGluIHRoZSBwcm9iZSBmdW5jdGlvbgorICAgICAgaW4gPGxpbmsgbGlua2VuZD0ibGludXgtbXVzYi1iYXNpY3MiPkNoYXB0ZXIgMjwvbGluaz4KKyAgICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZGV2aWNlLXF1aXJrcyI+CisgICAgPHRpdGxlPkRldmljZSBRdWlya3M8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQ29tcGxldGluZyB0aGUgcGxhdGZvcm0gZGF0YSBzcGVjaWZpYyB0byB5b3VyIGRldmljZSwgeW91IG1heSBhbHNvCisgICAgICBuZWVkIHRvIHdyaXRlIHNvbWUgY29kZSBpbiB0aGUgZ2x1ZSBsYXllciB0byB3b3JrIGFyb3VuZCBzb21lCisgICAgICBkZXZpY2Ugc3BlY2lmaWMgbGltaXRhdGlvbnMuIFRoZXNlIHF1aXJrcyBtYXkgYmUgZHVlIHRvIHNvbWUKKyAgICAgIGhhcmR3YXJlIGJ1Z3MsIG9yIHNpbXBseSBiZSB0aGUgcmVzdWx0IG9mIGFuIGluY29tcGxldGUKKyAgICAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBVU0IgT24tdGhlLUdvIHNwZWNpZmljYXRpb24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIEpaNDc0MCBVREMgZXhoaWJpdHMgc3VjaCBxdWlya3MsIHNvbWUgb2Ygd2hpY2ggd2Ugd2lsbCBkaXNjdXNzCisgICAgICBoZXJlIGZvciB0aGUgc2FrZSBvZiBpbnNpZ2h0IGV2ZW4gdGhvdWdoIHRoZXNlIG1pZ2h0IG5vdCBiZSBmb3VuZAorICAgICAgaW4gdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgeW91IGFyZSB3b3JraW5nIG9uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIExldCdzIGdldCBiYWNrIHRvIHRoZSBpbml0IGZ1bmN0aW9uIGZpcnN0OgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIGludCBqejQ3NDBfbXVzYl9pbml0KHN0cnVjdCBtdXNiICptdXNiKQoreworCW11c2ItPnhjZWl2ID0gdXNiX2dldF9waHkoVVNCX1BIWV9UWVBFX1VTQjIpOworCWlmICghbXVzYi0+eGNlaXYpIHsKKwkJcHJfZXJyKCJIUyBVREM6IG5vIHRyYW5zY2VpdmVyIGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBTaWxpY29uIGRvZXMgbm90IGltcGxlbWVudCBDb25maWdEYXRhIHJlZ2lzdGVyLgorCSAqIFNldCBkeW5fZmlmbyB0byBhdm9pZCByZWFkaW5nIEVQIGNvbmZpZyBmcm9tIGhhcmR3YXJlLgorCSAqLworCW11c2ItPmR5bl9maWZvID0gdHJ1ZTsKKworCW11c2ItPmlzciA9IGp6NDc0MF9tdXNiX2ludGVycnVwdDsKKworCXJldHVybiAwOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBJbnN0cnVjdGlvbiBvbiBsaW5lIDEyIGhlbHBzIHRoZSBNVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRvIHdvcmsKKyAgICAgIGFyb3VuZCB0aGUgZmFjdCB0aGF0IHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIGlzIG1pc3NpbmcgcmVnaXN0ZXJzCisgICAgICB0aGF0IGFyZSB1c2VkIGZvciBVU0IgZW5kcG9pbnRzIGNvbmZpZ3VyYXRpb24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgV2l0aG91dCB0aGVzZSByZWdpc3RlcnMsIHRoZSBjb250cm9sbGVyIGRyaXZlciBpcyB1bmFibGUgdG8gcmVhZAorICAgICAgdGhlIGVuZHBvaW50cyBjb25maWd1cmF0aW9uIGZyb20gdGhlIGhhcmR3YXJlLCBzbyB3ZSB1c2UgbGluZSAxMgorICAgICAgaW5zdHJ1Y3Rpb24gdG8gYnlwYXNzIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBzaWxpY29uLCBhbmQKKyAgICAgIHJlbHkgb24gYSBoYXJkLWNvZGVkIHRhYmxlIHRoYXQgZGVzY3JpYmVzIHRoZSBlbmRwb2ludHMKKyAgICAgIGNvbmZpZ3VyYXRpb24gaW5zdGVhZDoKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nIGxpbmVudW1iZXJpbmc9Im51bWJlcmVkIj4KK3N0YXRpYyBzdHJ1Y3QgbXVzYl9maWZvX2NmZyBqejQ3NDBfbXVzYl9maWZvX2NmZ1tdID0geworeyAuaHdfZXBfbnVtID0gMSwgLnN0eWxlID0gRklGT19UWCwgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9IDEsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAyLCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0gNjQsIH0sCit9OworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIHRhYmxlIGFib3ZlLCB3ZSBzZWUgdGhhdCBlYWNoCisgICAgICBlbmRwb2ludHMgaXMgZGVzY3JpYmVkIGJ5IHRocmVlIGZpZWxkczogaHdfZXBfbnVtIGlzIHRoZSBlbmRwb2ludAorICAgICAgbnVtYmVyLCBzdHlsZSBpcyBpdHMgZGlyZWN0aW9uIChlaXRoZXIgRklGT19UWCBmb3IgdGhlIGNvbnRyb2xsZXIKKyAgICAgIGRyaXZlciB0byBzZW5kIHBhY2tldHMgaW4gdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUsIG9yIEZJRk9fUlggdG8KKyAgICAgIHJlY2VpdmUgcGFja2V0cyBmcm9tIGhhcmR3YXJlKSwgYW5kIG1heHBhY2tldCBkZWZpbmVzIHRoZSBtYXhpbXVtCisgICAgICBzaXplIG9mIGVhY2ggZGF0YSBwYWNrZXQgdGhhdCBjYW4gYmUgdHJhbnNtaXR0ZWQgb3ZlciB0aGF0CisgICAgICBlbmRwb2ludC4gUmVhZGluZyBmcm9tIHRoZSB0YWJsZSwgdGhlIGNvbnRyb2xsZXIgZHJpdmVyIGtub3dzIHRoYXQKKyAgICAgIGVuZHBvaW50IDEgY2FuIGJlIHVzZWQgdG8gc2VuZCBhbmQgcmVjZWl2ZSBVU0IgZGF0YSBwYWNrZXRzIG9mIDUxMgorICAgICAgYnl0ZXMgYXQgb25jZSAodGhpcyBpcyBpbiBmYWN0IGEgYnVsayBpbi9vdXQgZW5kcG9pbnQpLCBhbmQKKyAgICAgIGVuZHBvaW50IDIgY2FuIGJlIHVzZWQgdG8gc2VuZCBkYXRhIHBhY2tldHMgb2YgNjQgYnl0ZXMgYXQgb25jZQorICAgICAgKHRoaXMgaXMgaW4gZmFjdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQpLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhYm91dCBlbmRwb2ludCAwIGhlcmU6IHRoYXQgb25lCisgICAgICBpcyBpbXBsZW1lbnRlZCBieSBkZWZhdWx0IGluIGV2ZXJ5IHNpbGljb24gZGVzaWduLCB3aXRoIGEKKyAgICAgIHByZWRlZmluZWQgY29uZmlndXJhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLiBGb3IKKyAgICAgIG1vcmUgZXhhbXBsZXMgb2YgZW5kcG9pbnQgY29uZmlndXJhdGlvbiB0YWJsZXMsIHNlZSBtdXNiX2NvcmUuYy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBMZXQncyBub3cgZ2V0IGJhY2sgdG8gdGhlIGludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3RpbmcgbGluZW51bWJlcmluZz0ibnVtYmVyZWQiPgorc3RhdGljIGlycXJldHVybl90IGp6NDc0MF9tdXNiX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpfX2hjaSkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJaXJxcmV0dXJuX3QgICAgIHJldHZhbCA9IElSUV9OT05FOworCXN0cnVjdCBtdXNiICAgICAqbXVzYiA9IF9faGNpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttdXNiLT5sb2NrLCBmbGFncyk7CisKKwltdXNiLT5pbnRfdXNiID0gbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9JTlRSVVNCKTsKKwltdXNiLT5pbnRfdHggPSBtdXNiX3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX0lOVFJUWCk7CisJbXVzYi0+aW50X3J4ID0gbXVzYl9yZWFkdyhtdXNiLT5tcmVncywgTVVTQl9JTlRSUlgpOworCisJLyoKKwkgKiBUaGUgY29udHJvbGxlciBpcyBnYWRnZXQgb25seSwgdGhlIHN0YXRlIG9mIHRoZSBob3N0IG1vZGUgSVJRIGJpdHMgaXMKKwkgKiB1bmRlZmluZWQuIE1hc2sgdGhlbSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbXVzYiBkcml2ZXIgY29yZSB3aWxsCisJICogbmV2ZXIgc2VlIHRoZW0gc2V0CisJICovCisJbXVzYi0+aW50X3VzYiAmYW1wOz0gTVVTQl9JTlRSX1NVU1BFTkQgfCBNVVNCX0lOVFJfUkVTVU1FIHwKKwkgICAgTVVTQl9JTlRSX1JFU0VUIHwgTVVTQl9JTlRSX1NPRjsKKworCWlmIChtdXNiLT5pbnRfdXNiIHx8IG11c2ItPmludF90eCB8fCBtdXNiLT5pbnRfcngpCisJCXJldHZhbCA9IG11c2JfaW50ZXJydXB0KG11c2IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO211c2ItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIEluc3RydWN0aW9uIG9uIGxpbmUgMTggYWJvdmUgaXMgYSB3YXkgZm9yIHRoZSBjb250cm9sbGVyIGRyaXZlciB0bworICAgICAgd29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBzb21lIGludGVycnVwdCBiaXRzIHVzZWQgZm9yIFVTQiBob3N0CisgICAgICBtb2RlIG9wZXJhdGlvbiBhcmUgbWlzc2luZyBpbiB0aGUgTVVTQl9JTlRSVVNCIHJlZ2lzdGVyLCB0aHVzIGxlZnQKKyAgICAgIGluIGFuIHVuZGVmaW5lZCBoYXJkd2FyZSBzdGF0ZSwgc2luY2UgdGhpcyBNVVNCIGNvbnRyb2xsZXIKKyAgICAgIGhhcmR3YXJlIGlzIHVzZWQgaW4gcGVyaXBoZXJhbCBtb2RlIG9ubHkuIEFzIGEgY29uc2VxdWVuY2UsIHRoZQorICAgICAgZ2x1ZSBsYXllciBtYXNrcyB0aGVzZSBtaXNzaW5nIGJpdHMgb3V0IHRvIGF2b2lkIHBhcmFzaXRlCisgICAgICBpbnRlcnJ1cHRzIGJ5IGRvaW5nIGEgbG9naWNhbCBBTkQgb3BlcmF0aW9uIGJldHdlZW4gdGhlIHZhbHVlIHJlYWQKKyAgICAgIGZyb20gTVVTQl9JTlRSVVNCIGFuZCB0aGUgYml0cyB0aGF0IGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbgorICAgICAgdGhlIHJlZ2lzdGVyLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZXNlIGFyZSBvbmx5IGEgY291cGxlIG9mIHRoZSBxdWlya3MgZm91bmQgaW4gdGhlIEpaNDc0MCBVU0IKKyAgICAgIGRldmljZSBjb250cm9sbGVyLiBTb21lIG90aGVycyB3ZXJlIGRpcmVjdGx5IGFkZHJlc3NlZCBpbiB0aGUgTVVTQgorICAgICAgY29yZSBzaW5jZSB0aGUgZml4ZXMgd2VyZSBnZW5lcmljIGVub3VnaCB0byBwcm92aWRlIGEgYmV0dGVyCisgICAgICBoYW5kbGluZyBvZiB0aGUgaXNzdWVzIGZvciBvdGhlcnMgY29udHJvbGxlciBoYXJkd2FyZSBldmVudHVhbGx5LgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJjb25jbHVzaW9uIj4KKyAgICA8dGl0bGU+Q29uY2x1c2lvbjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBXcml0aW5nIGEgTGludXggTVVTQiBnbHVlIGxheWVyIHNob3VsZCBiZSBhIG1vcmUgYWNjZXNzaWJsZSB0YXNrLAorICAgICAgYXMgdGhpcyBkb2N1bWVudGF0aW9uIHRyaWVzIHRvIHNob3cgdGhlIGlucyBhbmQgb3V0cyBvZiB0aGlzCisgICAgICBleGVyY2lzZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgSlo0NzQwIFVTQiBkZXZpY2UgY29udHJvbGxlciBiZWluZyBmYWlybHkgc2ltcGxlLCBJIGhvcGUgaXRzCisgICAgICBnbHVlIGxheWVyIHNlcnZlcyBhcyBhIGdvb2QgZXhhbXBsZSBmb3IgdGhlIGN1cmlvdXMgbWluZC4gVXNlZAorICAgICAgd2l0aCB0aGUgY3VycmVudCBNVVNCIGdsdWUgbGF5ZXJzLCB0aGlzIGRvY3VtZW50YXRpb24gc2hvdWxkCisgICAgICBwcm92aWRlIGVub3VnaCBndWlkYW5jZSB0byBnZXQgc3RhcnRlZDsgc2hvdWxkIGFueXRoaW5nIGdldHMgb3V0CisgICAgICBvZiBoYW5kLCB0aGUgbGludXgtdXNiIG1haWxpbmcgbGlzdCBhcmNoaXZlIGlzIGFub3RoZXIgaGVscGZ1bAorICAgICAgcmVzb3VyY2UgdG8gYnJvd3NlIHRocm91Z2guCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImFja25vd2xlZGdlbWVudHMiPgorICAgIDx0aXRsZT5BY2tub3dsZWRnZW1lbnRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIE1hbnkgdGhhbmtzIHRvIExhcnMtUGV0ZXIgQ2xhdXNlbiBhbmQgTWFhcnRlbiB0ZXIgSHV1cm5lIGZvcgorICAgICAgYW5zd2VyaW5nIG15IHF1ZXN0aW9ucyB3aGlsZSBJIHdhcyB3cml0aW5nIHRoZSBKWjQ3NDAgZ2x1ZSBsYXllcgorICAgICAgYW5kIGZvciBoZWxwaW5nIG1lIG91dCBnZXR0aW5nIHRoZSBjb2RlIGluIGdvb2Qgc2hhcGUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSSB3b3VsZCBhbHNvIGxpa2UgdG8gdGhhbmsgdGhlIFFpLUhhcmR3YXJlIGNvbW11bml0eSBhdCBsYXJnZSBmb3IKKyAgICAgIGl0cyBjaGVlcmZ1bCBndWlkYW5jZSBhbmQgc3VwcG9ydC4KKyAgICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icmVzb3VyY2VzIj4KKyAgICA8dGl0bGU+UmVzb3VyY2VzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFVTQiBIb21lIFBhZ2U6CisgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnVzYi5vcmciPmh0dHA6Ly93d3cudXNiLm9yZzwvdWxpbms+CisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgbGludXgtdXNiIE1haWxpbmcgTGlzdCBBcmNoaXZlczoKKyAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9tYXJjLmluZm8vP2w9bGludXgtdXNiIj5odHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LXVzYjwvdWxpbms+CisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVVNCIE9uLXRoZS1HbyBCYXNpY3M6CisgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm1heGltaW50ZWdyYXRlZC5jb20vYXBwLW5vdGVzL2luZGV4Lm12cC9pZC8xODIyIj5odHRwOi8vd3d3Lm1heGltaW50ZWdyYXRlZC5jb20vYXBwLW5vdGVzL2luZGV4Lm12cC9pZC8xODIyPC91bGluaz4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBXcml0aW5nIFVTQiBEZXZpY2UgRHJpdmVyczoKKyAgICAgIDx1bGluayB1cmw9Imh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWxkb2NzL3dyaXRpbmdfdXNiX2RyaXZlci9pbmRleC5odG1sIj5odHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sZG9jcy93cml0aW5nX3VzYl9kcml2ZXIvaW5kZXguaHRtbDwvdWxpbms+CisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGV4YXMgSW5zdHJ1bWVudHMgVVNCIENvbmZpZ3VyYXRpb24gV2lraSBQYWdlOgorICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3Byb2Nlc3NvcnMud2lraS50aS5jb20vaW5kZXgucGhwL1VzYmdlbmVyYWxwYWdlIj5odHRwOi8vcHJvY2Vzc29ycy53aWtpLnRpLmNvbS9pbmRleC5waHAvVXNiZ2VuZXJhbHBhZ2U8L3VsaW5rPgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIE1VU0IgQ29uZmlndXJhdGlvbjoKKyAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWxpbnV4LWtlcm5lbDpkcml2ZXJzOm11c2IiPmh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWxpbnV4LWtlcm5lbDpkcml2ZXJzOm11c2I8L3VsaW5rPgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCmluZGV4IGZhNTcxMzkuLmY3NzNhMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCkBAIC0xMiw2ICsxMiw4IEBACiAJLSBSQ1UgTG9ja2RlcCBzcGxhdHMgZXhwbGFpbmVkLgogTk1JLVJDVS50eHQKIAktIFVzaW5nIFJDVSB0byBQcm90ZWN0IER5bmFtaWMgTk1JIEhhbmRsZXJzCityY3VfZGVyZWZlcmVuY2UudHh0CisJLSBQcm9wZXIgY2FyZSBhbmQgZmVlZGluZyBvZiByZXR1cm4gdmFsdWVzIGZyb20gcmN1X2RlcmVmZXJlbmNlKCkKIHJjdWJhcnJpZXIudHh0CiAJLSBSQ1UgYW5kIFVubG9hZGFibGUgTW9kdWxlcwogcmN1bGlzdF9udWxscy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CmluZGV4IDlkMTBkMWQuLjg3Nzk0NzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dApAQCAtMTE0LDEyICsxMTQsMTYgQEAKIAkJCWh0dHA6Ly93d3cub3BlbnZtcy5jb21wYXEuY29tL3dpemFyZC93aXpfMjYzNy5odG1sCiAKIAkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyBhbHNvIGFuIGV4Y2VsbGVudAotCQlkb2N1bWVudGF0aW9uIGFpZCwgbGV0dGluZyB0aGUgcGVyc29uIHJlYWRpbmcgdGhlIGNvZGUKLQkJa25vdyBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgorCQlkb2N1bWVudGF0aW9uIGFpZCwgbGV0dGluZyB0aGUgcGVyc29uIHJlYWRpbmcgdGhlCisJCWNvZGUga25vdyBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgogCQlQbGVhc2Ugbm90ZSB0aGF0IGNvbXBpbGVycyBjYW4gYWxzbyByZW9yZGVyIGNvZGUsIGFuZAogCQl0aGV5IGFyZSBiZWNvbWluZyBpbmNyZWFzaW5nbHkgYWdncmVzc2l2ZSBhYm91dCBkb2luZwotCQlqdXN0IHRoYXQuICBUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIHRoZXJlZm9yZQotCQlhbHNvIHByZXZlbnRzIGRlc3RydWN0aXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCisJCWp1c3QgdGhhdC4gIFRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgdGhlcmVmb3JlIGFsc28KKwkJcHJldmVudHMgZGVzdHJ1Y3RpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4gIEhvd2V2ZXIsCisJCXdpdGggYSBiaXQgb2YgZGV2aW91cyBjcmVhdGl2aXR5LCBpdCBpcyBwb3NzaWJsZSB0bworCQltaXNoYW5kbGUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHJjdV9kZXJlZmVyZW5jZSgpLgorCQlQbGVhc2Ugc2VlIHJjdV9kZXJlZmVyZW5jZS50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yCisJCW1vcmUgaW5mb3JtYXRpb24uCiAKIAkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyB1c2VkIGJ5IHRoZQogCQl2YXJpb3VzICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdV9kZXJlZmVyZW5jZS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3VfZGVyZWZlcmVuY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYjA1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3VfZGVyZWZlcmVuY2UudHh0CkBAIC0wLDAgKzEsMzcxIEBACitQUk9QRVIgQ0FSRSBBTkQgRkVFRElORyBPRiBSRVRVUk4gVkFMVUVTIEZST00gcmN1X2RlcmVmZXJlbmNlKCkKKworTW9zdCBvZiB0aGUgdGltZSwgeW91IGNhbiB1c2UgdmFsdWVzIGZyb20gcmN1X2RlcmVmZXJlbmNlKCkgb3Igb25lIG9mCit0aGUgc2ltaWxhciBwcmltaXRpdmVzIHdpdGhvdXQgd29ycmllcy4gIERlcmVmZXJlbmNpbmcgKHByZWZpeCAiKiIpLAorZmllbGQgc2VsZWN0aW9uICgiLT4iKSwgYXNzaWdubWVudCAoIj0iKSwgYWRkcmVzcy1vZiAoIiYiKSwgYWRkaXRpb24gYW5kCitzdWJ0cmFjdGlvbiBvZiBjb25zdGFudHMsIGFuZCBjYXN0cyBhbGwgd29yayBxdWl0ZSBuYXR1cmFsbHkgYW5kIHNhZmVseS4KKworSXQgaXMgbmV2ZXJ0aGVsZXNzIHBvc3NpYmxlIHRvIGdldCBpbnRvIHRyb3VibGUgd2l0aCBvdGhlciBvcGVyYXRpb25zLgorRm9sbG93IHRoZXNlIHJ1bGVzIHRvIGtlZXAgeW91ciBSQ1UgY29kZSB3b3JraW5nIHByb3Blcmx5OgorCitvCVlvdSBtdXN0IHVzZSBvbmUgb2YgdGhlIHJjdV9kZXJlZmVyZW5jZSgpIGZhbWlseSBvZiBwcmltaXRpdmVzCisJdG8gbG9hZCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIG90aGVyd2lzZSBDT05GSUdfUFJPVkVfUkNVCisJd2lsbCBjb21wbGFpbi4gIFdvcnNlIHlldCwgeW91ciBjb2RlIGNhbiBzZWUgcmFuZG9tIG1lbW9yeS1jb3JydXB0aW9uCisJYnVncyBkdWUgdG8gZ2FtZXMgdGhhdCBjb21waWxlcnMgYW5kIERFQyBBbHBoYSBjYW4gcGxheS4KKwlXaXRob3V0IG9uZSBvZiB0aGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlcywgY29tcGlsZXJzCisJY2FuIHJlbG9hZCB0aGUgdmFsdWUsIGFuZCB3b24ndCB5b3VyIGNvZGUgaGF2ZSBmdW4gd2l0aCB0d28KKwlkaWZmZXJlbnQgdmFsdWVzIGZvciBhIHNpbmdsZSBwb2ludGVyISAgV2l0aG91dCByY3VfZGVyZWZlcmVuY2UoKSwKKwlERUMgQWxwaGEgY2FuIGxvYWQgYSBwb2ludGVyLCBkZXJlZmVyZW5jZSB0aGF0IHBvaW50ZXIsIGFuZAorCXJldHVybiBkYXRhIHByZWNlZGluZyBpbml0aWFsaXphdGlvbiB0aGF0IHByZWNlZGVkIHRoZSBzdG9yZSBvZgorCXRoZSBwb2ludGVyLgorCisJSW4gYWRkaXRpb24sIHRoZSB2b2xhdGlsZSBjYXN0IGluIHJjdV9kZXJlZmVyZW5jZSgpIHByZXZlbnRzIHRoZQorCWNvbXBpbGVyIGZyb20gZGVkdWNpbmcgdGhlIHJlc3VsdGluZyBwb2ludGVyIHZhbHVlLiAgUGxlYXNlIHNlZQorCXRoZSBzZWN0aW9uIGVudGl0bGVkICJFWEFNUExFIFdIRVJFIFRIRSBDT01QSUxFUiBLTk9XUyBUT08gTVVDSCIKKwlmb3IgYW4gZXhhbXBsZSB3aGVyZSB0aGUgY29tcGlsZXIgY2FuIGluIGZhY3QgZGVkdWNlIHRoZSBleGFjdAorCXZhbHVlIG9mIHRoZSBwb2ludGVyLCBhbmQgdGh1cyBjYXVzZSBtaXNvcmRlcmluZy4KKworbwlEbyBub3QgdXNlIHNpbmdsZS1lbGVtZW50IFJDVS1wcm90ZWN0ZWQgYXJyYXlzLiAgVGhlIGNvbXBpbGVyCisJaXMgd2l0aGluIGl0cyByaWdodCB0byBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgb2YgYW4gaW5kZXggaW50bworCXN1Y2ggYW4gYXJyYXkgbXVzdCBuZWNlc3NhcmlseSBldmFsdWF0ZSB0byB6ZXJvLiAgVGhlIGNvbXBpbGVyCisJY291bGQgdGhlbiBzdWJzdGl0dXRlIHRoZSBjb25zdGFudCB6ZXJvIGZvciB0aGUgY29tcHV0YXRpb24sIHNvCisJdGhhdCB0aGUgYXJyYXkgaW5kZXggbm8gbG9uZ2VyIGRlcGVuZGVkIG9uIHRoZSB2YWx1ZSByZXR1cm5lZAorCWJ5IHJjdV9kZXJlZmVyZW5jZSgpLiAgSWYgdGhlIGFycmF5IGluZGV4IG5vIGxvbmdlciBkZXBlbmRzCisJb24gcmN1X2RlcmVmZXJlbmNlKCksIHRoZW4gYm90aCB0aGUgY29tcGlsZXIgYW5kIHRoZSBDUFUKKwlhcmUgd2l0aGluIHRoZWlyIHJpZ2h0cyB0byBvcmRlciB0aGUgYXJyYXkgYWNjZXNzIGJlZm9yZSB0aGUKKwlyY3VfZGVyZWZlcmVuY2UoKSwgd2hpY2ggY2FuIGNhdXNlIHRoZSBhcnJheSBhY2Nlc3MgdG8gcmV0dXJuCisJZ2FyYmFnZS4KKworbwlBdm9pZCBjYW5jZWxsYXRpb24gd2hlbiB1c2luZyB0aGUgIisiIGFuZCAiLSIgaW5maXggYXJpdGhtZXRpYworCW9wZXJhdG9ycy4gIEZvciBleGFtcGxlLCBmb3IgYSBnaXZlbiB2YXJpYWJsZSAieCIsIGF2b2lkCisJIih4LXgpIi4gIFRoZXJlIGFyZSBzaW1pbGFyIGFyaXRobWV0aWMgcGl0ZmFsbHMgZnJvbSBvdGhlcgorCWFyaXRobWV0aWMgb3BlcmF0aW9ycywgc3VjaCBhcyAiKHgqMCkiLCAiKHgvKHgrMSkpIiBvciAiKHglMSkiLgorCVRoZSBjb21waWxlciBpcyB3aXRoaW4gaXRzIHJpZ2h0cyB0byBzdWJzdGl0dXRlIHplcm8gZm9yIGFsbCBvZgorCXRoZXNlIGV4cHJlc3Npb25zLCBzbyB0aGF0IHN1YnNlcXVlbnQgYWNjZXNzZXMgbm8gbG9uZ2VyIGRlcGVuZAorCW9uIHRoZSByY3VfZGVyZWZlcmVuY2UoKSwgYWdhaW4gcG9zc2libHkgcmVzdWx0aW5nIGluIGJ1Z3MgZHVlCisJdG8gbWlzb3JkZXJpbmcuCisKKwlPZiBjb3Vyc2UsIGlmICJwIiBpcyBhIHBvaW50ZXIgZnJvbSByY3VfZGVyZWZlcmVuY2UoKSwgYW5kICJhIgorCWFuZCAiYiIgYXJlIGludGVnZXJzIHRoYXQgaGFwcGVuIHRvIGJlIGVxdWFsLCB0aGUgZXhwcmVzc2lvbgorCSJwK2EtYiIgaXMgc2FmZSBiZWNhdXNlIGl0cyB2YWx1ZSBzdGlsbCBuZWNlc3NhcmlseSBkZXBlbmRzIG9uCisJdGhlIHJjdV9kZXJlZmVyZW5jZSgpLCB0aHVzIG1haW50YWluaW5nIHByb3BlciBvcmRlcmluZy4KKworbwlBdm9pZCBhbGwtemVybyBvcGVyYW5kcyB0byB0aGUgYml0d2lzZSAiJiIgb3BlcmF0b3IsIGFuZAorCXNpbWlsYXJseSBhdm9pZCBhbGwtb25lcyBvcGVyYW5kcyB0byB0aGUgYml0d2lzZSAifCIgb3BlcmF0b3IuCisJSWYgdGhlIGNvbXBpbGVyIGlzIGFibGUgdG8gZGVkdWNlIHRoZSB2YWx1ZSBvZiBzdWNoIG9wZXJhbmRzLAorCWl0IGlzIHdpdGhpbiBpdHMgcmlnaHRzIHRvIHN1YnN0aXR1dGUgdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQKKwlmb3IgdGhlIGJpdHdpc2Ugb3BlcmF0aW9uLiAgT25jZSBhZ2FpbiwgdGhpcyBjYXVzZXMgc3Vic2VxdWVudAorCWFjY2Vzc2VzIHRvIG5vIGxvbmdlciBkZXBlbmQgb24gdGhlIHJjdV9kZXJlZmVyZW5jZSgpLCBjYXVzaW5nCisJYnVncyBkdWUgdG8gbWlzb3JkZXJpbmcuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IHNpbmdsZS1iaXQgb3BlcmFuZHMgdG8gYml0d2lzZSAiJiIgY2FuIGFsc28KKwliZSBkYW5nZXJvdXMuICBBdCB0aGlzIHBvaW50LCB0aGUgY29tcGlsZXIga25vd3MgdGhhdCB0aGUKKwlyZXN1bHRpbmcgdmFsdWUgY2FuIG9ubHkgdGFrZSBvbiBvbmUgb2YgdHdvIHBvc3NpYmxlIHZhbHVlcy4KKwlUaGVyZWZvcmUsIGEgdmVyeSBzbWFsbCBhbW91bnQgb2YgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3aWxsCisJYWxsb3cgdGhlIGNvbXBpbGVyIHRvIGRlZHVjZSB0aGUgZXhhY3QgdmFsdWUsIHdoaWNoIGFnYWluIGNhbgorCXJlc3VsdCBpbiBtaXNvcmRlcmluZy4KKworbwlJZiB5b3UgYXJlIHVzaW5nIFJDVSB0byBwcm90ZWN0IEpJVGVkIGZ1bmN0aW9ucywgc28gdGhhdCB0aGUKKwkiKCkiIGZ1bmN0aW9uLWludm9jYXRpb24gb3BlcmF0b3IgaXMgYXBwbGllZCB0byBhIHZhbHVlIG9idGFpbmVkCisJKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGZyb20gcmN1X2RlcmVmZXJlbmNlKCksIHlvdSBtYXkgbmVlZCB0bworCWludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlIHRvIGZsdXNoIGluc3RydWN0aW9uIGNhY2hlcy4KKwlUaGlzIGlzc3VlIGFyaXNlcyBvbiBzb21lIHN5c3RlbXMgd2hlbiBhIG5ld2x5IEpJVGVkIGZ1bmN0aW9uIGlzCisJdXNpbmcgdGhlIHNhbWUgbWVtb3J5IHRoYXQgd2FzIHVzZWQgYnkgYW4gZWFybGllciBKSVRlZCBmdW5jdGlvbi4KKworbwlEbyBub3QgdXNlIHRoZSByZXN1bHRzIGZyb20gdGhlIGJvb2xlYW4gIiYmIiBhbmQgInx8IiB3aGVuCisJZGVyZWZlcmVuY2luZy4JRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgKHJhdGhlciBpbXByb2JhYmxlKQorCWNvZGUgaXMgYnVnZ3k6CisKKwkJaW50IGFbMl07CisJCWludCBpbmRleDsKKwkJaW50IGZvcmNlX3plcm9faW5kZXggPSAxOworCisJCS4uLgorCisJCXIxID0gcmN1X2RlcmVmZXJlbmNlKGkxKQorCQlyMiA9IGFbcjEgJiYgZm9yY2VfemVyb19pbmRleF07ICAvKiBCVUdHWSEhISAqLworCisJVGhlIHJlYXNvbiB0aGlzIGlzIGJ1Z2d5IGlzIHRoYXQgIiYmIiBhbmQgInx8IiBhcmUgb2Z0ZW4gY29tcGlsZWQKKwl1c2luZyBicmFuY2hlcy4gIFdoaWxlIHdlYWstbWVtb3J5IG1hY2hpbmVzIHN1Y2ggYXMgQVJNIG9yIFBvd2VyUEMKKwlkbyBvcmRlciBzdG9yZXMgYWZ0ZXIgc3VjaCBicmFuY2hlcywgdGhleSBjYW4gc3BlY3VsYXRlIGxvYWRzLAorCXdoaWNoIGNhbiByZXN1bHQgaW4gbWlzb3JkZXJpbmcgYnVncy4KKworbwlEbyBub3QgdXNlIHRoZSByZXN1bHRzIGZyb20gcmVsYXRpb25hbCBvcGVyYXRvcnMgKCI9PSIsICIhPSIsCisJIj4iLCAiPj0iLCAiPCIsIG9yICI8PSIpIHdoZW4gZGVyZWZlcmVuY2luZy4gIEZvciBleGFtcGxlLAorCXRoZSBmb2xsb3dpbmcgKHF1aXRlIHN0cmFuZ2UpIGNvZGUgaXMgYnVnZ3k6CisKKwkJaW50IGFbMl07CisJCWludCBpbmRleDsKKwkJaW50IGZsaXBfaW5kZXggPSAwOworCisJCS4uLgorCisJCXIxID0gcmN1X2RlcmVmZXJlbmNlKGkxKQorCQlyMiA9IGFbcjEgIT0gZmxpcF9pbmRleF07ICAvKiBCVUdHWSEhISAqLworCisJQXMgYmVmb3JlLCB0aGUgcmVhc29uIHRoaXMgaXMgYnVnZ3kgaXMgdGhhdCByZWxhdGlvbmFsIG9wZXJhdG9ycworCWFyZSBvZnRlbiBjb21waWxlZCB1c2luZyBicmFuY2hlcy4gIEFuZCBhcyBiZWZvcmUsIGFsdGhvdWdoCisJd2Vhay1tZW1vcnkgbWFjaGluZXMgc3VjaCBhcyBBUk0gb3IgUG93ZXJQQyBkbyBvcmRlciBzdG9yZXMKKwlhZnRlciBzdWNoIGJyYW5jaGVzLCBidXQgY2FuIHNwZWN1bGF0ZSBsb2Fkcywgd2hpY2ggY2FuIGFnYWluCisJcmVzdWx0IGluIG1pc29yZGVyaW5nIGJ1Z3MuCisKK28JQmUgdmVyeSBjYXJlZnVsIGFib3V0IGNvbXBhcmluZyBwb2ludGVycyBvYnRhaW5lZCBmcm9tCisJcmN1X2RlcmVmZXJlbmNlKCkgYWdhaW5zdCBub24tTlVMTCB2YWx1ZXMuICBBcyBMaW51cyBUb3J2YWxkcworCWV4cGxhaW5lZCwgaWYgdGhlIHR3byBwb2ludGVycyBhcmUgZXF1YWwsIHRoZSBjb21waWxlciBjb3VsZAorCXN1YnN0aXR1dGUgdGhlIHBvaW50ZXIgeW91IGFyZSBjb21wYXJpbmcgYWdhaW5zdCBmb3IgdGhlIHBvaW50ZXIKKwlvYnRhaW5lZCBmcm9tIHJjdV9kZXJlZmVyZW5jZSgpLiAgRm9yIGV4YW1wbGU6CisKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZShncCk7CisJCWlmIChwID09ICZkZWZhdWx0X3N0cnVjdCkKKwkJCWRvX2RlZmF1bHQocC0+YSk7CisKKwlCZWNhdXNlIHRoZSBjb21waWxlciBub3cga25vd3MgdGhhdCB0aGUgdmFsdWUgb2YgInAiIGlzIGV4YWN0bHkKKwl0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgImRlZmF1bHRfc3RydWN0IiwgaXQgaXMgZnJlZSB0bworCXRyYW5zZm9ybSB0aGlzIGNvZGUgaW50byB0aGUgZm9sbG93aW5nOgorCisJCXAgPSByY3VfZGVyZWZlcmVuY2UoZ3ApOworCQlpZiAocCA9PSAmZGVmYXVsdF9zdHJ1Y3QpCisJCQlkb19kZWZhdWx0KGRlZmF1bHRfc3RydWN0LmEpOworCisJT24gQVJNIGFuZCBQb3dlciBoYXJkd2FyZSwgdGhlIGxvYWQgZnJvbSAiZGVmYXVsdF9zdHJ1Y3QuYSIKKwljYW4gbm93IGJlIHNwZWN1bGF0ZWQsIHN1Y2ggdGhhdCBpdCBtaWdodCBoYXBwZW4gYmVmb3JlIHRoZQorCXJjdV9kZXJlZmVyZW5jZSgpLiAgVGhpcyBjb3VsZCByZXN1bHQgaW4gYnVncyBkdWUgdG8gbWlzb3JkZXJpbmcuCisKKwlIb3dldmVyLCBjb21wYXJpc29ucyBhcmUgT0sgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKKworCW8JVGhlIGNvbXBhcmlzb24gd2FzIGFnYWluc3QgdGhlIE5VTEwgcG9pbnRlci4gIElmIHRoZQorCQljb21waWxlciBrbm93cyB0aGF0IHRoZSBwb2ludGVyIGlzIE5VTEwsIHlvdSBoYWQgYmV0dGVyCisJCW5vdCBiZSBkZXJlZmVyZW5jaW5nIGl0IGFueXdheS4gIElmIHRoZSBjb21wYXJpc29uIGlzCisJCW5vbi1lcXVhbCwgdGhlIGNvbXBpbGVyIGlzIG5vbmUgdGhlIHdpc2VyLiAgVGhlcmVmb3JlLAorCQlpdCBpcyBzYWZlIHRvIGNvbXBhcmUgcG9pbnRlcnMgZnJvbSByY3VfZGVyZWZlcmVuY2UoKQorCQlhZ2FpbnN0IE5VTEwgcG9pbnRlcnMuCisKKwlvCVRoZSBwb2ludGVyIGlzIG5ldmVyIGRlcmVmZXJlbmNlZCBhZnRlciBiZWluZyBjb21wYXJlZC4KKwkJU2luY2UgdGhlcmUgYXJlIG5vIHN1YnNlcXVlbnQgZGVyZWZlcmVuY2VzLCB0aGUgY29tcGlsZXIKKwkJY2Fubm90IHVzZSBhbnl0aGluZyBpdCBsZWFybmVkIGZyb20gdGhlIGNvbXBhcmlzb24KKwkJdG8gcmVvcmRlciB0aGUgbm9uLWV4aXN0ZW50IHN1YnNlcXVlbnQgZGVyZWZlcmVuY2VzLgorCQlUaGlzIHNvcnQgb2YgY29tcGFyaXNvbiBvY2N1cnMgZnJlcXVlbnRseSB3aGVuIHNjYW5uaW5nCisJCVJDVS1wcm90ZWN0ZWQgY2lyY3VsYXIgbGlua2VkIGxpc3RzLgorCisJbwlUaGUgY29tcGFyaXNvbiBpcyBhZ2FpbnN0IGEgcG9pbnRlciB0aGF0IHJlZmVyZW5jZXMgbWVtb3J5CisJCXRoYXQgd2FzIGluaXRpYWxpemVkICJhIGxvbmcgdGltZSBhZ28uIiAgVGhlIHJlYXNvbgorCQl0aGlzIGlzIHNhZmUgaXMgdGhhdCBldmVuIGlmIG1pc29yZGVyaW5nIG9jY3VycywgdGhlCisJCW1pc29yZGVyaW5nIHdpbGwgbm90IGFmZmVjdCB0aGUgYWNjZXNzZXMgdGhhdCBmb2xsb3cKKwkJdGhlIGNvbXBhcmlzb24uICBTbyBleGFjdGx5IGhvdyBsb25nIGFnbyBpcyAiYSBsb25nCisJCXRpbWUgYWdvIj8gIEhlcmUgYXJlIHNvbWUgcG9zc2liaWxpdGllczoKKworCQlvCUNvbXBpbGUgdGltZS4KKworCQlvCUJvb3QgdGltZS4KKworCQlvCU1vZHVsZS1pbml0IHRpbWUgZm9yIG1vZHVsZSBjb2RlLgorCisJCW8JUHJpb3IgdG8ga3RocmVhZCBjcmVhdGlvbiBmb3Iga3RocmVhZCBjb2RlLgorCisJCW8JRHVyaW5nIHNvbWUgcHJpb3IgYWNxdWlzaXRpb24gb2YgdGhlIGxvY2sgdGhhdAorCQkJd2Ugbm93IGhvbGQuCisKKwkJbwlCZWZvcmUgbW9kX3RpbWVyKCkgdGltZSBmb3IgYSB0aW1lciBoYW5kbGVyLgorCisJCVRoZXJlIGFyZSBtYW55IG90aGVyIHBvc3NpYmlsaXRpZXMgaW52b2x2aW5nIHRoZSBMaW51eAorCQlrZXJuZWwncyB3aWRlIGFycmF5IG9mIHByaW1pdGl2ZXMgdGhhdCBjYXVzZSBjb2RlIHRvCisJCWJlIGludm9rZWQgYXQgYSBsYXRlciB0aW1lLgorCisJbwlUaGUgcG9pbnRlciBiZWluZyBjb21wYXJlZCBhZ2FpbnN0IGFsc28gY2FtZSBmcm9tCisJCXJjdV9kZXJlZmVyZW5jZSgpLiAgSW4gdGhpcyBjYXNlLCBib3RoIHBvaW50ZXJzIGRlcGVuZAorCQlvbiBvbmUgcmN1X2RlcmVmZXJlbmNlKCkgb3IgYW5vdGhlciwgc28geW91IGdldCBwcm9wZXIKKwkJb3JkZXJpbmcgZWl0aGVyIHdheS4KKworCQlUaGF0IHNhaWQsIHRoaXMgc2l0dWF0aW9uIGNhbiBtYWtlIGNlcnRhaW4gUkNVIHVzYWdlCisJCWJ1Z3MgbW9yZSBsaWtlbHkgdG8gaGFwcGVuLiAgV2hpY2ggY2FuIGJlIGEgZ29vZCB0aGluZywKKwkJYXQgbGVhc3QgaWYgdGhleSBoYXBwZW4gZHVyaW5nIHRlc3RpbmcuICBBbiBleGFtcGxlCisJCW9mIHN1Y2ggYW4gUkNVIHVzYWdlIGJ1ZyBpcyBzaG93biBpbiB0aGUgc2VjdGlvbiB0aXRsZWQKKwkJIkVYQU1QTEUgT0YgQU1QTElGSUVEIFJDVS1VU0FHRSBCVUciLgorCisJbwlBbGwgb2YgdGhlIGFjY2Vzc2VzIGZvbGxvd2luZyB0aGUgY29tcGFyaXNvbiBhcmUgc3RvcmVzLAorCQlzbyB0aGF0IGEgY29udHJvbCBkZXBlbmRlbmN5IHByZXNlcnZlcyB0aGUgbmVlZGVkIG9yZGVyaW5nLgorCQlUaGF0IHNhaWQsIGl0IGlzIGVhc3kgdG8gZ2V0IGNvbnRyb2wgZGVwZW5kZW5jaWVzIHdyb25nLgorCQlQbGVhc2Ugc2VlIHRoZSAiQ09OVFJPTCBERVBFTkRFTkNJRVMiIHNlY3Rpb24gb2YKKwkJRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGZvciBtb3JlIGRldGFpbHMuCisKKwlvCVRoZSBwb2ludGVycyBhcmUgbm90IGVxdWFsIC1hbmQtIHRoZSBjb21waWxlciBkb2VzCisJCW5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkZWR1Y2UgdGhlIHZhbHVlIG9mIHRoZQorCQlwb2ludGVyLiAgTm90ZSB0aGF0IHRoZSB2b2xhdGlsZSBjYXN0IGluIHJjdV9kZXJlZmVyZW5jZSgpCisJCXdpbGwgbm9ybWFsbHkgcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBrbm93aW5nIHRvbyBtdWNoLgorCitvCURpc2FibGUgYW55IHZhbHVlLXNwZWN1bGF0aW9uIG9wdGltaXphdGlvbnMgdGhhdCB5b3VyIGNvbXBpbGVyCisJbWlnaHQgcHJvdmlkZSwgZXNwZWNpYWxseSBpZiB5b3UgYXJlIG1ha2luZyB1c2Ugb2YgZmVlZGJhY2stYmFzZWQKKwlvcHRpbWl6YXRpb25zIHRoYXQgdGFrZSBkYXRhIGNvbGxlY3RlZCBmcm9tIHByaW9yIHJ1bnMuICBTdWNoCisJdmFsdWUtc3BlY3VsYXRpb24gb3B0aW1pemF0aW9ucyByZW9yZGVyIG9wZXJhdGlvbnMgYnkgZGVzaWduLgorCisJVGhlcmUgaXMgb25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6ICBWYWx1ZS1zcGVjdWxhdGlvbgorCW9wdGltaXphdGlvbnMgdGhhdCBsZXZlcmFnZSB0aGUgYnJhbmNoLXByZWRpY3Rpb24gaGFyZHdhcmUgYXJlCisJc2FmZSBvbiBzdHJvbmdseSBvcmRlcmVkIHN5c3RlbXMgKHN1Y2ggYXMgeDg2KSwgYnV0IG5vdCBvbiB3ZWFrbHkKKwlvcmRlcmVkIHN5c3RlbXMgKHN1Y2ggYXMgQVJNIG9yIFBvd2VyKS4gIENob29zZSB5b3VyIGNvbXBpbGVyCisJY29tbWFuZC1saW5lIG9wdGlvbnMgd2lzZWx5IQorCisKK0VYQU1QTEUgT0YgQU1QTElGSUVEIFJDVS1VU0FHRSBCVUcKKworQmVjYXVzZSB1cGRhdGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIFJDVSByZWFkZXJzLCBSQ1UgcmVhZGVycyBjYW4KK3NlZSBzdGFsZSBhbmQvb3IgaW5jb25zaXN0ZW50IHZhbHVlcy4gIElmIFJDVSByZWFkZXJzIG5lZWQgZnJlc2ggb3IKK2NvbnNpc3RlbnQgdmFsdWVzLCB3aGljaCB0aGV5IHNvbWV0aW1lcyBkbywgdGhleSBuZWVkIHRvIHRha2UgcHJvcGVyCitwcmVjYXV0aW9ucy4gIFRvIHNlZSB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6CisKKwlzdHJ1Y3QgZm9vIHsKKwkJaW50IGE7CisJCWludCBiOworCQlpbnQgYzsKKwl9OworCXN0cnVjdCBmb28gKmdwMTsKKwlzdHJ1Y3QgZm9vICpncDI7CisKKwl2b2lkIHVwZGF0ZXIodm9pZCkKKwl7CisJCXN0cnVjdCBmb28gKnA7CisKKwkJcCA9IGttYWxsb2MoLi4uKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCWRlYWxfd2l0aF9pdCgpOworCQlwLT5hID0gNDI7ICAvKiBFYWNoIGZpZWxkIGluIGl0cyBvd24gY2FjaGUgbGluZS4gKi8KKwkJcC0+YiA9IDQzOworCQlwLT5jID0gNDQ7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihncDEsIHApOworCQlwLT5iID0gMTQzOworCQlwLT5jID0gMTQ0OworCQlyY3VfYXNzaWduX3BvaW50ZXIoZ3AyLCBwKTsKKwl9CisKKwl2b2lkIHJlYWRlcih2b2lkKQorCXsKKwkJc3RydWN0IGZvbyAqcDsKKwkJc3RydWN0IGZvbyAqcTsKKwkJaW50IHIxLCByMjsKKworCQlwID0gcmN1X2RlcmVmZXJlbmNlKGdwMik7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm47CisJCXIxID0gcC0+YjsgIC8qIEd1YXJhbnRlZWQgdG8gZ2V0IDE0My4gKi8KKwkJcSA9IHJjdV9kZXJlZmVyZW5jZShncDEpOyAgLyogR3VhcmFudGVlZCBub24tTlVMTC4gKi8KKwkJaWYgKHAgPT0gcSkgeworCQkJLyogVGhlIGNvbXBpbGVyIGRlY2lkZXMgdGhhdCBxLT5jIGlzIHNhbWUgYXMgcC0+Yy4gKi8KKwkJCXIyID0gcC0+YzsgLyogQ291bGQgZ2V0IDQ0IG9uIHdlYWtseSBvcmRlciBzeXN0ZW0uICovCisJCX0KKwkJZG9fc29tZXRoaW5nX3dpdGgocjEsIHIyKTsKKwl9CisKK1lvdSBtaWdodCBiZSBzdXJwcmlzZWQgdGhhdCB0aGUgb3V0Y29tZSAocjEgPT0gMTQzICYmIHIyID09IDQ0KSBpcyBwb3NzaWJsZSwKK2J1dCB5b3Ugc2hvdWxkIG5vdCBiZS4gIEFmdGVyIGFsbCwgdGhlIHVwZGF0ZXIgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQKK2Egc2Vjb25kIHRpbWUgYmV0d2VlbiB0aGUgdGltZSByZWFkZXIoKSBsb2FkZWQgaW50byAicjEiIGFuZCB0aGUgdGltZQordGhhdCBpdCBsb2FkZWQgaW50byAicjIiLiAgVGhlIGZhY3QgdGhhdCB0aGlzIHNhbWUgcmVzdWx0IGNhbiBvY2N1ciBkdWUKK3RvIHNvbWUgcmVvcmRlcmluZyBmcm9tIHRoZSBjb21waWxlciBhbmQgQ1BVcyBpcyBiZXNpZGUgdGhlIHBvaW50LgorCitCdXQgc3VwcG9zZSB0aGF0IHRoZSByZWFkZXIgbmVlZHMgYSBjb25zaXN0ZW50IHZpZXc/CisKK1RoZW4gb25lIGFwcHJvYWNoIGlzIHRvIHVzZSBsb2NraW5nLCBmb3IgZXhhbXBsZSwgYXMgZm9sbG93czoKKworCXN0cnVjdCBmb28geworCQlpbnQgYTsKKwkJaW50IGI7CisJCWludCBjOworCQlzcGlubG9ja190IGxvY2s7CisJfTsKKwlzdHJ1Y3QgZm9vICpncDE7CisJc3RydWN0IGZvbyAqZ3AyOworCisJdm9pZCB1cGRhdGVyKHZvaWQpCisJeworCQlzdHJ1Y3QgZm9vICpwOworCisJCXAgPSBrbWFsbG9jKC4uLik7CisJCWlmIChwID09IE5VTEwpCisJCQlkZWFsX3dpdGhfaXQoKTsKKwkJc3Bpbl9sb2NrKCZwLT5sb2NrKTsKKwkJcC0+YSA9IDQyOyAgLyogRWFjaCBmaWVsZCBpbiBpdHMgb3duIGNhY2hlIGxpbmUuICovCisJCXAtPmIgPSA0MzsKKwkJcC0+YyA9IDQ0OworCQlzcGluX3VubG9jaygmcC0+bG9jayk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihncDEsIHApOworCQlzcGluX2xvY2soJnAtPmxvY2spOworCQlwLT5iID0gMTQzOworCQlwLT5jID0gMTQ0OworCQlzcGluX3VubG9jaygmcC0+bG9jayk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihncDIsIHApOworCX0KKworCXZvaWQgcmVhZGVyKHZvaWQpCisJeworCQlzdHJ1Y3QgZm9vICpwOworCQlzdHJ1Y3QgZm9vICpxOworCQlpbnQgcjEsIHIyOworCisJCXAgPSByY3VfZGVyZWZlcmVuY2UoZ3AyKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJc3Bpbl9sb2NrKCZwLT5sb2NrKTsKKwkJcjEgPSBwLT5iOyAgLyogR3VhcmFudGVlZCB0byBnZXQgMTQzLiAqLworCQlxID0gcmN1X2RlcmVmZXJlbmNlKGdwMSk7ICAvKiBHdWFyYW50ZWVkIG5vbi1OVUxMLiAqLworCQlpZiAocCA9PSBxKSB7CisJCQkvKiBUaGUgY29tcGlsZXIgZGVjaWRlcyB0aGF0IHEtPmMgaXMgc2FtZSBhcyBwLT5jLiAqLworCQkJcjIgPSBwLT5jOyAvKiBMb2NraW5nIGd1YXJhbnRlZXMgcjIgPT0gMTQ0LiAqLworCQl9CisJCXNwaW5fdW5sb2NrKCZwLT5sb2NrKTsKKwkJZG9fc29tZXRoaW5nX3dpdGgocjEsIHIyKTsKKwl9CisKK0FzIGFsd2F5cywgdXNlIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iIQorCisKK0VYQU1QTEUgV0hFUkUgVEhFIENPTVBJTEVSIEtOT1dTIFRPTyBNVUNICisKK0lmIGEgcG9pbnRlciBvYnRhaW5lZCBmcm9tIHJjdV9kZXJlZmVyZW5jZSgpIGNvbXBhcmVzIG5vdC1lcXVhbCB0byBzb21lCitvdGhlciBwb2ludGVyLCB0aGUgY29tcGlsZXIgbm9ybWFsbHkgaGFzIG5vIGNsdWUgd2hhdCB0aGUgdmFsdWUgb2YgdGhlCitmaXJzdCBwb2ludGVyIG1pZ2h0IGJlLiAgVGhpcyBsYWNrIG9mIGtub3dsZWRnZSBwcmV2ZW50cyB0aGUgY29tcGlsZXIKK2Zyb20gY2Fycnlpbmcgb3V0IG9wdGltaXphdGlvbnMgdGhhdCBvdGhlcndpc2UgbWlnaHQgZGVzdHJveSB0aGUgb3JkZXJpbmcKK2d1YXJhbnRlZXMgdGhhdCBSQ1UgZGVwZW5kcyBvbi4gIEFuZCB0aGUgdm9sYXRpbGUgY2FzdCBpbiByY3VfZGVyZWZlcmVuY2UoKQorc2hvdWxkIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gZ3Vlc3NpbmcgdGhlIHZhbHVlLgorCitCdXQgd2l0aG91dCByY3VfZGVyZWZlcmVuY2UoKSwgdGhlIGNvbXBpbGVyIGtub3dzIG1vcmUgdGhhbiB5b3UgbWlnaHQKK2V4cGVjdC4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDoKKworCXN0cnVjdCBmb28geworCQlpbnQgYTsKKwkJaW50IGI7CisJfTsKKwlzdGF0aWMgc3RydWN0IGZvbyB2YXJpYWJsZTE7CisJc3RhdGljIHN0cnVjdCBmb28gdmFyaWFibGUyOworCXN0YXRpYyBzdHJ1Y3QgZm9vICpncCA9ICZ2YXJpYWJsZTE7CisKKwl2b2lkIHVwZGF0ZXIodm9pZCkKKwl7CisJCWluaXRpYWxpemVfZm9vKCZ2YXJpYWJsZTIpOworCQlyY3VfYXNzaWduX3BvaW50ZXIoZ3AsICZ2YXJpYWJsZTIpOworCQkvKgorCQkgKiBUaGUgYWJvdmUgaXMgdGhlIG9ubHkgc3RvcmUgdG8gZ3AgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LAorCQkgKiBhbmQgdGhlIGFkZHJlc3Mgb2YgZ3AgaXMgbm90IGV4cG9ydGVkIGluIGFueSB3YXkuCisJCSAqLworCX0KKworCWludCByZWFkZXIodm9pZCkKKwl7CisJCXN0cnVjdCBmb28gKnA7CisKKwkJcCA9IGdwOworCQliYXJyaWVyKCk7CisJCWlmIChwID09ICZ2YXJpYWJsZTEpCisJCQlyZXR1cm4gcC0+YTsgLyogTXVzdCBiZSB2YXJpYWJsZTEuYS4gKi8KKwkJZWxzZQorCQkJcmV0dXJuIHAtPmI7IC8qIE11c3QgYmUgdmFyaWFibGUyLmIuICovCisJfQorCitCZWNhdXNlIHRoZSBjb21waWxlciBjYW4gc2VlIGFsbCBzdG9yZXMgdG8gImdwIiwgaXQga25vd3MgdGhhdCB0aGUgb25seQorcG9zc2libGUgdmFsdWVzIG9mICJncCIgYXJlICJ2YXJpYWJsZTEiIG9uIHRoZSBvbmUgaGFuZCBhbmQgInZhcmlhYmxlMiIKK29uIHRoZSBvdGhlci4gIFRoZSBjb21wYXJpc29uIGluIHJlYWRlcigpIHRoZXJlZm9yZSB0ZWxscyB0aGUgY29tcGlsZXIKK3RoZSBleGFjdCB2YWx1ZSBvZiAicCIgZXZlbiBpbiB0aGUgbm90LWVxdWFscyBjYXNlLiAgVGhpcyBhbGxvd3MgdGhlCitjb21waWxlciB0byBtYWtlIHRoZSByZXR1cm4gdmFsdWVzIGluZGVwZW5kZW50IG9mIHRoZSBsb2FkIGZyb20gImdwIiwKK2luIHR1cm4gZGVzdHJveWluZyB0aGUgb3JkZXJpbmcgYmV0d2VlbiB0aGlzIGxvYWQgYW5kIHRoZSBsb2FkcyBvZiB0aGUKK3JldHVybiB2YWx1ZXMuICBUaGlzIGNhbiByZXN1bHQgaW4gInAtPmIiIHJldHVybmluZyBwcmUtaW5pdGlhbGl6YXRpb24KK2dhcmJhZ2UgdmFsdWVzLgorCitJbiBzaG9ydCwgcmN1X2RlcmVmZXJlbmNlKCkgaXMgLW5vdC0gb3B0aW9uYWwgd2hlbiB5b3UgYXJlIGdvaW5nIHRvCitkZXJlZmVyZW5jZSB0aGUgcmVzdWx0aW5nIHBvaW50ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dAppbmRleCA2ZjNhMDA1Li42OGZlM2FkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKQEAgLTI0LDcgKzI0LDcgQEAKIAl0aW1pbmcgb2YgdGhlIG5leHQgd2FybmluZyBmb3IgdGhlIGN1cnJlbnQgc3RhbGwuCiAKIAlTdGFsbC13YXJuaW5nIG1lc3NhZ2VzIG1heSBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCBjb21wbGV0ZWx5IHZpYQotCS9zeXMvbW9kdWxlL3JjdXRyZWUvcGFyYW1ldGVycy9yY3VfY3B1X3N0YWxsX3N1cHByZXNzLgorCS9zeXMvbW9kdWxlL3JjdXBkYXRlL3BhcmFtZXRlcnMvcmN1X2NwdV9zdGFsbF9zdXBwcmVzcy4KIAogQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAppbmRleCAwZjBmYjdjLi40OWI4NTUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKQEAgLTMyNiwxMSArMzI2LDExIEBACiBhLglzeW5jaHJvbml6ZV9yY3UoKQlyY3VfcmVhZF9sb2NrKCkgLyByY3VfcmVhZF91bmxvY2soKQogCWNhbGxfcmN1KCkJCXJjdV9kZXJlZmVyZW5jZSgpCiAKLWIuCWNhbGxfcmN1X2JoKCkJCXJjdV9yZWFkX2xvY2tfYmgoKSAvIHJjdV9yZWFkX3VubG9ja19iaCgpCi0JCQkJcmN1X2RlcmVmZXJlbmNlX2JoKCkKK2IuCXN5bmNocm9uaXplX3JjdV9iaCgpCXJjdV9yZWFkX2xvY2tfYmgoKSAvIHJjdV9yZWFkX3VubG9ja19iaCgpCisJY2FsbF9yY3VfYmgoKQkJcmN1X2RlcmVmZXJlbmNlX2JoKCkKIAogYy4Jc3luY2hyb25pemVfc2NoZWQoKQlyY3VfcmVhZF9sb2NrX3NjaGVkKCkgLyByY3VfcmVhZF91bmxvY2tfc2NoZWQoKQotCQkJCXByZWVtcHRfZGlzYWJsZSgpIC8gcHJlZW1wdF9lbmFibGUoKQorCWNhbGxfcmN1X3NjaGVkKCkJcHJlZW1wdF9kaXNhYmxlKCkgLyBwcmVlbXB0X2VuYWJsZSgpCiAJCQkJbG9jYWxfaXJxX3NhdmUoKSAvIGxvY2FsX2lycV9yZXN0b3JlKCkKIAkJCQloYXJkaXJxIGVudGVyIC8gaGFyZGlycSBleGl0CiAJCQkJTk1JIGVudGVyIC8gTk1JIGV4aXQKQEAgLTc5NCwxMCArNzk0LDIyIEBACiAKIFJDVSBsaXN0IHRyYXZlcnNhbDoKIAorCWxpc3RfZW50cnlfcmN1CisJbGlzdF9maXJzdF9lbnRyeV9yY3UKKwlsaXN0X25leHRfcmN1CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UKLQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdQorCWhsaXN0X2ZpcnN0X3JjdQorCWhsaXN0X25leHRfcmN1CisJaGxpc3RfcHByZXZfcmN1CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1X2JoCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1X2JoCisJaGxpc3RfbnVsbHNfZmlyc3RfcmN1CisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1CisJaGxpc3RfYmxfZmlyc3RfcmN1CisJaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1CiAKIFJDVSBwb2ludGVyL2xpc3QgdXBkYXRlOgogCkBAIC04MDYsMjggKzgxOCwzOCBAQAogCWxpc3RfYWRkX3RhaWxfcmN1CiAJbGlzdF9kZWxfcmN1CiAJbGlzdF9yZXBsYWNlX3JjdQotCWhsaXN0X2RlbF9yY3UKIAlobGlzdF9hZGRfYWZ0ZXJfcmN1CiAJaGxpc3RfYWRkX2JlZm9yZV9yY3UKIAlobGlzdF9hZGRfaGVhZF9yY3UKKwlobGlzdF9kZWxfcmN1CisJaGxpc3RfZGVsX2luaXRfcmN1CiAJaGxpc3RfcmVwbGFjZV9yY3UKIAlsaXN0X3NwbGljZV9pbml0X3JjdSgpCisJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1CisJaGxpc3RfbnVsbHNfZGVsX3JjdQorCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdQorCWhsaXN0X2JsX2FkZF9oZWFkX3JjdQorCWhsaXN0X2JsX2RlbF9pbml0X3JjdQorCWhsaXN0X2JsX2RlbF9yY3UKKwlobGlzdF9ibF9zZXRfZmlyc3RfcmN1CiAKIFJDVToJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCiAKIAlyY3VfcmVhZF9sb2NrCQlzeW5jaHJvbml6ZV9uZXQJCXJjdV9iYXJyaWVyCiAJcmN1X3JlYWRfdW5sb2NrCQlzeW5jaHJvbml6ZV9yY3UKIAlyY3VfZGVyZWZlcmVuY2UJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQKLQkJCQljYWxsX3JjdQotCQkJCWtmcmVlX3JjdQotCisJcmN1X3JlYWRfbG9ja19oZWxkCWNhbGxfcmN1CisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrCWtmcmVlX3JjdQorCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQKIAogYmg6CUNyaXRpY2FsIHNlY3Rpb25zCUdyYWNlIHBlcmlvZAkJQmFycmllcgogCiAJcmN1X3JlYWRfbG9ja19iaAljYWxsX3JjdV9iaAkJcmN1X2JhcnJpZXJfYmgKIAlyY3VfcmVhZF91bmxvY2tfYmgJc3luY2hyb25pemVfcmN1X2JoCiAJcmN1X2RlcmVmZXJlbmNlX2JoCXN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQKLQorCXJjdV9kZXJlZmVyZW5jZV9iaF9jaGVjaworCXJjdV9kZXJlZmVyZW5jZV9iaF9wcm90ZWN0ZWQKKwlyY3VfcmVhZF9sb2NrX2JoX2hlbGQKIAogc2NoZWQ6CUNyaXRpY2FsIHNlY3Rpb25zCUdyYWNlIHBlcmlvZAkJQmFycmllcgogCkBAIC04MzUsNyArODU3LDEyIEBACiAJcmN1X3JlYWRfdW5sb2NrX3NjaGVkCWNhbGxfcmN1X3NjaGVkCiAJW3ByZWVtcHRfZGlzYWJsZV0Jc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkCiAJW2FuZCBmcmllbmRzXQorCXJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZQorCXJjdV9yZWFkX3VubG9ja19zY2hlZF9ub3RyYWNlCiAJcmN1X2RlcmVmZXJlbmNlX3NjaGVkCisJcmN1X2RlcmVmZXJlbmNlX3NjaGVkX2NoZWNrCisJcmN1X2RlcmVmZXJlbmNlX3NjaGVkX3Byb3RlY3RlZAorCXJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZAogCiAKIFNSQ1U6CUNyaXRpY2FsIHNlY3Rpb25zCUdyYWNlIHBlcmlvZAkJQmFycmllcgpAQCAtODQzLDYgKzg3MCw4IEBACiAJc3JjdV9yZWFkX2xvY2sJCXN5bmNocm9uaXplX3NyY3UJc3JjdV9iYXJyaWVyCiAJc3JjdV9yZWFkX3VubG9jawljYWxsX3NyY3UKIAlzcmN1X2RlcmVmZXJlbmNlCXN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkCisJc3JjdV9kZXJlZmVyZW5jZV9jaGVjaworCXNyY3VfcmVhZF9sb2NrX2hlbGQKIAogU1JDVToJSW5pdGlhbGl6YXRpb24vY2xlYW51cAogCWluaXRfc3JjdV9zdHJ1Y3QKQEAgLTg1MCw5ICs4NzksMTMgQEAKIAogQWxsOiAgbG9ja2RlcC1jaGVja2VkIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciBhY2Nlc3MKIAotCXJjdV9kZXJlZmVyZW5jZV9jaGVjawotCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQKKwlyY3VfYWNjZXNzX2luZGV4CiAJcmN1X2FjY2Vzc19wb2ludGVyCisJcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrCisJcmN1X2RlcmVmZXJlbmNlX3JhdworCXJjdV9sb2NrZGVwX2Fzc2VydAorCXJjdV9zbGVlcF9jaGVjaworCVJDVV9OT05JRExFCiAKIFNlZSB0aGUgY29tbWVudCBoZWFkZXJzIGluIHRoZSBzb3VyY2UgY29kZSAob3IgdGhlIGRvY2Jvb2sgZ2VuZXJhdGVkCiBmcm9tIHRoZW0pIGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hY3BpL2VudW1lcmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vYWNwaS9lbnVtZXJhdGlvbi50eHQKaW5kZXggMmExNTE5Yi4uZmQ3ODZlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY3BpL2VudW1lcmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FjcGkvZW51bWVyYXRpb24udHh0CkBAIC0yOTYsNyArMjk2LDcgQEAKIHdlIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgTGludXggR1BJTyBkZXNjcmlwdG9ycy4KIAogVGhlcmUgaXMgYSBzdGFuZGFyZCBHUElPIEFQSSBmb3IgdGhhdCBhbmQgaXMgZG9jdW1lbnRlZCBpbgotRG9jdW1lbnRhdGlvbi9ncGlvLnR4dC4KK0RvY3VtZW50YXRpb24vZ3Bpby8uCiAKIEluIHRoZSBhYm92ZSBleGFtcGxlIHdlIGNhbiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgdHdvIEdQSU8gZGVzY3JpcHRvcnMgd2l0aAogYSBjb2RlIGxpa2UgdGhpczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL01hcnZlbGwvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9hcm0vTWFydmVsbC9SRUFETUUKaW5kZXggOTYzZWM0NC4uMmNjZTU0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vTWFydmVsbC9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vTWFydmVsbC9SRUFETUUKQEAgLTIzNCw2ICsyMzQsMTEgQEAKIAkJQ29yZToJCU1hcnZlbGwgUEo0QiAoQVJNdjcpLCBUYXVyb3MzIEwyQ0MKIAkJSG9tZXBhZ2U6CWh0dHA6Ly93d3cubWFydmVsbC5jb20vZGlnaXRhbC1lbnRlcnRhaW5tZW50L2FybWFkYS0xNTAwLwogCQlQcm9kdWN0IEJyaWVmOglodHRwOi8vd3d3Lm1hcnZlbGwuY29tL2RpZ2l0YWwtZW50ZXJ0YWlubWVudC9hcm1hZGEtMTUwMC9hc3NldHMvTWFydmVsbC1BUk1BREEtMTUwMC1Qcm9kdWN0LUJyaWVmLnBkZgorCTg4REUzMTE0LCBBcm1hZGEgMTUwMCBQcm8KKwkJRGVzaWduIG5hbWU6CUJHMi1RCisJCUNvcmU6CQlRdWFkIENvcmUgQVJNIENvcnRleC1BOSwgUEwzMTAgTDJDQworCQlIb21lcGFnZToJaHR0cDovL3d3dy5tYXJ2ZWxsLmNvbS9kaWdpdGFsLWVudGVydGFpbm1lbnQvYXJtYWRhLTE1MDAtcHJvLworCQlQcm9kdWN0IEJyaWVmOglodHRwOi8vd3d3Lm1hcnZlbGwuY29tL2RpZ2l0YWwtZW50ZXJ0YWlubWVudC9hcm1hZGEtMTUwMC1wcm8vYXNzZXRzL01hcnZlbGxfQVJNQURBXzE1MDBfUFJPLTAxX3Byb2R1Y3RfYnJpZWYucGRmCiAJODhERT8/Pz8KIAkJRGVzaWduIG5hbWU6CUJHMwogCQlDb3JlOgkJQVJNIENvcnRleC1BMTUsIENBMTUgaW50ZWdyYXRlZCBMMkNDCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9zdGkvc3RpaDQwNy1vdmVydmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9zdGkvc3RpaDQwNy1vdmVydmlldy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0M2YzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3N0aS9zdGloNDA3LW92ZXJ2aWV3LnR4dApAQCAtMCwwICsxLDE4IEBACisJCQlTVGlINDA3IE92ZXJ2aWV3CisJCQk9PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgU1RpSDQwNyBpcyB0aGUgbmV3IGdlbmVyYXRpb24gb2YgU29DIGZvciBNdWx0aS1IRCwgQVZDIHNldC10b3AgYm94ZXMKKyAgICBhbmQgc2VydmVyL2Nvbm5lY3RlZCBjbGllbnQgYXBwbGljYXRpb24gZm9yIHNhdGVsbGl0ZSwgY2FibGUsIHRlcnJlc3RyaWFsCisgICAgYW5kIElQLVNUQiBtYXJrZXRzLgorCisgICAgRmVhdHVyZXMKKyAgICAtIEFSTSBDb3J0ZXgtQTkgMS41IEdIeiBkdWFsIGNvcmUgQ1BVICgyOG5tKQorICAgIC0gU0FUQTIsIFVTQiAzLjAsIFBDSWUsIEdiaXQgRXRoZXJuZXQKKworICBEb2N1bWVudCBBdXRob3IKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgTWF4aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5Ac3QuY29tPiwgKGMpIDIwMTQgU1QgTWljcm9lbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKaW5kZXggZDljYTViZS4uNjg1NDJmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0CkBAIC0yODUsMTUgKzI4NSwxMyBAQAogb3BlcmF0aW9uIHdoaWNoIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLCBhIHNldCBvZiBpbnRlcmZhY2VzIGFyZQogZGVmaW5lZCB3aGljaCBhY2NvbXBsaXNoIHRoaXM6CiAKLQl2b2lkIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWModm9pZCk7Ci0Jdm9pZCBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWModm9pZCk7Ci0Jdm9pZCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKHZvaWQpOwotCXZvaWQgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKHZvaWQpOworCXZvaWQgc21wX21iX19iZWZvcmVfYXRvbWljKHZvaWQpOworCXZvaWQgc21wX21iX19hZnRlcl9hdG9taWModm9pZCk7CiAKLUZvciBleGFtcGxlLCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgY2FuIGJlIHVzZWQgbGlrZSBzbzoKK0ZvciBleGFtcGxlLCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBjYW4gYmUgdXNlZCBsaWtlIHNvOgogCiAJb2JqLT5kZWFkID0gMTsKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJYXRvbWljX2RlYygmb2JqLT5yZWZfY291bnQpOwogCiBJdCBtYWtlcyBzdXJlIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIHByZWNlZGluZyB0aGUgYXRvbWljX2RlYygpCkBAIC0zMDIsMTUgKzMwMCwxMCBAQAogIjEiIHRvIG9iai0+ZGVhZCB3aWxsIGJlIGdsb2JhbGx5IHZpc2libGUgdG8gb3RoZXIgY3B1cyBiZWZvcmUgdGhlCiBhdG9taWMgY291bnRlciBkZWNyZW1lbnQuCiAKLVdpdGhvdXQgdGhlIGV4cGxpY2l0IHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSBjYWxsLCB0aGUKK1dpdGhvdXQgdGhlIGV4cGxpY2l0IHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGNhbGwsIHRoZQogaW1wbGVtZW50YXRpb24gY291bGQgbGVnYWxseSBhbGxvdyB0aGUgYXRvbWljIGNvdW50ZXIgdXBkYXRlIHZpc2libGUKIHRvIG90aGVyIGNwdXMgYmVmb3JlIHRoZSAib2JqLT5kZWFkID0gMTsiIGFzc2lnbm1lbnQuCiAKLVRoZSBvdGhlciB0aHJlZSBpbnRlcmZhY2VzIGxpc3RlZCBhcmUgdXNlZCB0byBwcm92aWRlIGV4cGxpY2l0Ci1vcmRlcmluZyB3aXRoIHJlc3BlY3QgdG8gbWVtb3J5IG9wZXJhdGlvbnMgYWZ0ZXIgYW4gYXRvbWljX2RlYygpIGNhbGwKLShzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKSkgYW5kIGFyb3VuZCBhdG9taWNfaW5jKCkgY2FsbHMKLShzbXBfbWJfX3tiZWZvcmUsYWZ0ZXJ9X2F0b21pY19pbmMoKSkuCi0KIEEgbWlzc2luZyBtZW1vcnkgYmFycmllciBpbiB0aGUgY2FzZXMgd2hlcmUgdGhleSBhcmUgcmVxdWlyZWQgYnkgdGhlCiBhdG9taWNfdCBpbXBsZW1lbnRhdGlvbiBhYm92ZSBjYW4gaGF2ZSBkaXNhc3Ryb3VzIHJlc3VsdHMuICBIZXJlIGlzCiBhbiBleGFtcGxlLCB3aGljaCBmb2xsb3dzIGEgcGF0dGVybiBvY2N1cnJpbmcgZnJlcXVlbnRseSBpbiB0aGUgTGludXgKQEAgLTQ4NywxMiArNDgwLDEyIEBACiBXaGljaCByZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGJpdCAibnIiIGlzIHNldCBpbiB0aGUgYml0bWFzawogcG9pbnRlZCB0byBieSAiYWRkciIuCiAKLUlmIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVycyBhcmUgcmVxdWlyZWQgYXJvdW5kIGNsZWFyX2JpdCgpICh3aGljaAotZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUsIGFuZCB0aHVzIGRvZXMgbm90IG5lZWQgdG8gcHJvdmlkZSBtZW1vcnkKLWJhcnJpZXIgc2VtYW50aWNzKSwgdHdvIGludGVyZmFjZXMgYXJlIHByb3ZpZGVkOgorSWYgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIGFyZSByZXF1aXJlZCBhcm91bmQge3NldCxjbGVhcn1fYml0KCkgKHdoaWNoIGRvCitub3QgcmV0dXJuIGEgdmFsdWUsIGFuZCB0aHVzIGRvZXMgbm90IG5lZWQgdG8gcHJvdmlkZSBtZW1vcnkgYmFycmllcgorc2VtYW50aWNzKSwgdHdvIGludGVyZmFjZXMgYXJlIHByb3ZpZGVkOgogCi0Jdm9pZCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQodm9pZCk7Ci0Jdm9pZCBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYmVmb3JlX2F0b21pYyh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKHZvaWQpOwogCiBUaGV5IGFyZSB1c2VkIGFzIGZvbGxvd3MsIGFuZCBhcmUgYWtpbiB0byB0aGVpciBhdG9taWNfdCBvcGVyYXRpb24KIGJyb3RoZXJzOgpAQCAtNTAwLDEzICs0OTMsMTMgQEAKIAkvKiBBbGwgbWVtb3J5IG9wZXJhdGlvbnMgYmVmb3JlIHRoaXMgY2FsbCB3aWxsCiAJICogYmUgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUgdGhlIGNsZWFyX2JpdCgpLgogCSAqLwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdCggLi4uICk7CiAKIAkvKiBUaGUgY2xlYXJfYml0KCkgd2lsbCBiZSB2aXNpYmxlIGJlZm9yZSBhbGwKIAkgKiBzdWJzZXF1ZW50IG1lbW9yeSBvcGVyYXRpb25zLgogCSAqLwotCSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCSBzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgYml0b3BzIHdpdGggbG9jayBiYXJyaWVyIHNlbWFudGljcyAoYWNxdWlyZS9yZWxlYXNlLAogc2FtZSBhcyBzcGlubG9ja3MpLiBUaGVzZSBvcGVyYXRlIGluIHRoZSBzYW1lIHdheSBhcyB0aGVpciBub24tX2xvY2svdW5sb2NrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jb25uZWN0b3IudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dAppbmRleCBlNWM1ZjVlLi5mNjIxNWY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jb25uZWN0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQKQEAgLTI0LDcgKzI0LDggQEAKIGVhc2llciB3YXk6CiAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IGNuX21zZyAqLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKikpOwotdm9pZCBjbl9uZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqbXNnLCB1MzIgX19ncm91cCwgaW50IGdmcF9tYXNrKTsKK3ZvaWQgY25fbmV0bGlua19zZW5kX211bHRpKHN0cnVjdCBjbl9tc2cgKm1zZywgdTE2IGxlbiwgdTMyIHBvcnRpZCwgdTMyIF9fZ3JvdXAsIGludCBnZnBfbWFzayk7Cit2b2lkIGNuX25ldGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICptc2csIHUzMiBwb3J0aWQsIHUzMiBfX2dyb3VwLCBpbnQgZ2ZwX21hc2spOwogCiBzdHJ1Y3QgY2JfaWQKIHsKQEAgLTcxLDE1ICs3MiwyMSBAQAogIHN0cnVjdCBjYl9pZCAqaWQJCS0gdW5pcXVlIGNvbm5lY3RvcidzIHVzZXIgaWRlbnRpZmllci4KIAogCi1pbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZywgdTMyIF9fZ3JvdXBzLCBpbnQgZ2ZwX21hc2spOworaW50IGNuX25ldGxpbmtfc2VuZF9tdWx0aShzdHJ1Y3QgY25fbXNnICptc2csIHUxNiBsZW4sIHUzMiBwb3J0aWQsIHUzMiBfX2dyb3VwcywgaW50IGdmcF9tYXNrKTsKK2ludCBjbl9uZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgX19ncm91cHMsIGludCBnZnBfbWFzayk7CiAKICBTZW5kcyBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXBzLiAgSXQgY2FuIGJlIHNhZmVseSBjYWxsZWQgZnJvbQogIHNvZnRpcnEgY29udGV4dCwgYnV0IG1heSBzaWxlbnRseSBmYWlsIHVuZGVyIHN0cm9uZyBtZW1vcnkgcHJlc3N1cmUuCiAgSWYgdGhlcmUgYXJlIG5vIGxpc3RlbmVycyBmb3IgZ2l2ZW4gZ3JvdXAgLUVTUkNIIGNhbiBiZSByZXR1cm5lZC4KIAogIHN0cnVjdCBjbl9tc2cgKgkJLSBtZXNzYWdlIGhlYWRlcih3aXRoIGF0dGFjaGVkIGRhdGEpLgorIHUxNiBsZW4JCQktIGZvciAqX211bHRpIG11bHRpcGxlIGNuX21zZyBtZXNzYWdlcyBjYW4gYmUgc2VudAorIHUzMiBwb3J0CQkJLSBkZXN0aW5hdGlvbiBwb3J0LgorIAkJCQkgIElmIG5vbi16ZXJvIHRoZSBtZXNzYWdlIHdpbGwgYmUgc2VudCB0byB0aGUKKwkJCQkgIGdpdmVuIHBvcnQsIHdoaWNoIHNob3VsZCBiZSBzZXQgdG8gdGhlCisJCQkJICBvcmlnaW5hbCBzZW5kZXIuCiAgdTMyIF9fZ3JvdXAJCQktIGRlc3RpbmF0aW9uIGdyb3VwLgotCQkJCSAgSWYgX19ncm91cCBpcyB6ZXJvLCB0aGVuIGFwcHJvcHJpYXRlIGdyb3VwIHdpbGwKKwkJCQkgIElmIHBvcnQgYW5kIF9fZ3JvdXAgaXMgemVybywgdGhlbiBhcHByb3ByaWF0ZSBncm91cCB3aWxsCiAJCQkJICBiZSBzZWFyY2hlZCB0aHJvdWdoIGFsbCByZWdpc3RlcmVkIGNvbm5lY3RvciB1c2VycywKIAkJCQkgIGFuZCBtZXNzYWdlIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBncm91cCB3aGljaCB3YXMKIAkJCQkgIGNyZWF0ZWQgZm9yIHVzZXIgd2l0aCB0aGUgc2FtZSBJRCBhcyBpbiBtc2cuCkBAIC0xMTEsNyArMTE4LDcgQEAKIElmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGFuZCBpdHMgc2VxdWVuY2UgbnVtYmVyIGlzIG5vdCBlcXVhbCB0byBvbmUgd2UKIGFyZSBleHBlY3RpbmcsIHRoZW4gaXQgaXMgYSBuZXcgbWVzc2FnZS4gIElmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGFuZAogaXRzIHNlcXVlbmNlIG51bWJlciBpcyB0aGUgc2FtZSBhcyBvbmUgd2UgYXJlIGV4cGVjdGluZywgYnV0IGl0cwotYWNrbm93bGVkZ2UgaXMgbm90IGVxdWFsIHRvIHRoZSBhY2tub3dsZWRnZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsCithY2tub3dsZWRnZSBpcyBub3QgZXF1YWwgdG8gdGhlIHNlcXVlbmNlIG51bWJlciBpbiB0aGUgb3JpZ2luYWwKIG1lc3NhZ2UgKyAxLCB0aGVuIGl0IGlzIGEgbmV3IG1lc3NhZ2UuCiAKIE9idmlvdXNseSwgdGhlIHByb3RvY29sIGhlYWRlciBjb250YWlucyB0aGUgYWJvdmUgaWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybWFkYS0zNzAteHAtcG1zdS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybWFkYS0zNzAteHAtcG1zdS50eHQKaW5kZXggOTI2YjRkNi4uMjY3OTllZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm1hZGEtMzcwLXhwLXBtc3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtYWRhLTM3MC14cC1wbXN1LnR4dApAQCAtMSwyMCArMSwyMSBAQAogUG93ZXIgTWFuYWdlbWVudCBTZXJ2aWNlIFVuaXQoUE1TVSkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BdmFpbGFibGUgb24gTWFydmVsbCBTT0NzOiBBcm1hZGEgMzcwIGFuZCBBcm1hZGEgWFAKK0F2YWlsYWJsZSBvbiBNYXJ2ZWxsIFNPQ3M6IEFybWFkYSAzNzAsIEFybWFkYSAzOHggYW5kIEFybWFkYSBYUAogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogCi0tIGNvbXBhdGlibGU6ICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAtcG1zdSIKKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlIG9uZSBvZjoKKyAgLSAibWFydmVsbCxhcm1hZGEtMzcwLXBtc3UiIGZvciBBcm1hZGEgMzcwIG9yIEFybWFkYSBYUAorICAtICJtYXJ2ZWxsLGFybWFkYS0zODAtcG1zdSIgZm9yIEFybWFkYSAzOHgKKyAgLSAibWFydmVsbCxhcm1hZGEtMzcwLXhwLXBtc3UiIHdhcyB1c2VkIGZvciBBcm1hZGEgMzcwL1hQIGJ1dCBpcyBub3cKKyAgICBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQKIAotLSByZWc6IFNob3VsZCBjb250YWluIFBNU1UgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGguIEZpcnN0IHBhaXIKLSAgZm9yIHRoZSBwZXItQ1BVIFNXIFJlc2V0IENvbnRyb2wgcmVnaXN0ZXJzLCBzZWNvbmQgcGFpciBmb3IgdGhlCi0gIFBvd2VyIE1hbmFnZW1lbnQgU2VydmljZSBVbml0LgorLSByZWc6IFNob3VsZCBjb250YWluIFBNU1UgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGguCiAKIEV4YW1wbGU6CiAKLWFybWFkYS0zNzAteHAtcG1zdUBkMDAyMjAwMCB7Ci0JY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAtcG1zdSI7Ci0JcmVnID0gPDB4ZDAwMjIxMDAgMHg0MzA+LAotCSAgICAgIDwweGQwMDIwODAwIDB4MjA+OworYXJtYWRhLTM3MC14cC1wbXN1QDIyMDAwIHsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC1wbXN1IjsKKwlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OwogfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm1hZGEtY3B1LXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtYWRhLWNwdS1yZXNldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYTdiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtYWRhLWNwdS1yZXNldC50eHQKQEAgLTAsMCArMSwxNCBAQAorTWFydmVsbCBBcm1hZGEgQ1BVIHJlc2V0IGNvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJtYXJ2ZWxsLGFybWFkYS0zNzAtY3B1LXJlc2V0Ii4KKworLSByZWc6IHNob3VsZCBiZSByZWdpc3RlciBiYXNlIGFuZCBsZW5ndGggYXMgZG9jdW1lbnRlZCBpbiB0aGUKKyAgZGF0YXNoZWV0IGZvciB0aGUgQ1BVIHJlc2V0IHJlZ2lzdGVycworCitjcHVyc3Q6IGNwdXJzdEAyMDgwMCB7CisgICAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAtY3B1LXJlc2V0IjsKKyAgICAgICByZWcgPSA8MHgyMDgwMCAweDIwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2F4eGlhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXh4aWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNGVmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2F4eGlhLnR4dApAQCAtMCwwICsxLDEyIEBACitBeHhpYSBBWE01NXh4IGRldmljZSB0cmVlIGJpbmRpbmdzCisKK0JvYXJkcyB1c2luZyB0aGUgQVhNNTV4eCBTb0MgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKworUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorCisgIC0gY29tcGF0aWJsZSA9ICJsc2ksYXhtNTUxNiIKKworQm9hcmRzOgorCisgIExTSSBBWE01NTE2IFZhbGlkYXRpb24gYm9hcmQgKEFtYXJpbGxvKQorCWNvbXBhdGlibGUgPSAibHNpLGF4bTU1MTYtYW1hcmlsbG8iLCAibHNpLGF4bTU1MTYiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NvaGVyZW5jeS1mYWJyaWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9jb2hlcmVuY3ktZmFicmljLnR4dAppbmRleCAxN2Q4Y2QxLi44ZGQ0NjYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NvaGVyZW5jeS1mYWJyaWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY29oZXJlbmN5LWZhYnJpYy50eHQKQEAgLTEsMTYgKzEsMzMgQEAKIENvaGVyZW5jeSBmYWJyaWMKIC0tLS0tLS0tLS0tLS0tLS0KLUF2YWlsYWJsZSBvbiBNYXJ2ZWxsIFNPQ3M6IEFybWFkYSAzNzAgYW5kIEFybWFkYSBYUAorQXZhaWxhYmxlIG9uIE1hcnZlbGwgU09DczogQXJtYWRhIDM3MCwgQXJtYWRhIDM3NSwgQXJtYWRhIDM4eCBhbmQgQXJtYWRhIFhQCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLS0gY29tcGF0aWJsZTogIm1hcnZlbGwsY29oZXJlbmN5LWZhYnJpYyIKKy0gY29tcGF0aWJsZTogdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6CisKKyAqICJtYXJ2ZWxsLGNvaGVyZW5jeS1mYWJyaWMiLCB0byBiZSB1c2VkIGZvciB0aGUgY29oZXJlbmN5IGZhYnJpYyBvZgorICAgdGhlIEFybWFkYSAzNzAgYW5kIEFybWFkYSBYUC4KKworICogIm1hcnZlbGwsYXJtYWRhLTM3NS1jb2hlcmVuY3ktZmFicmljIiwgZm9yIHRoZSBBcm1hZGEgMzc1IGNvaGVyZW5jeQorICAgZmFicmljLgorCisgKiAibWFydmVsbCxhcm1hZGEtMzgwLWNvaGVyZW5jeS1mYWJyaWMiLCBmb3IgdGhlIEFybWFkYSAzOHggY29oZXJlbmN5CisgICBmYWJyaWMuCiAKIC0gcmVnOiBTaG91bGQgY29udGFpbiBjb2hlcmVuY3kgZmFicmljIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQKLSAgbGVuZ3RoLiBGaXJzdCBwYWlyIGZvciB0aGUgY29oZXJlbmN5IGZhYnJpYyByZWdpc3RlcnMsIHNlY29uZCBwYWlyCi0gIGZvciB0aGUgcGVyLUNQVSBmYWJyaWMgcmVnaXN0ZXJzIHJlZ2lzdGVycy4KKyAgbGVuZ3RoLgogCi1FeGFtcGxlOgorICogRm9yICJtYXJ2ZWxsLGNvaGVyZW5jeS1mYWJyaWMiLCB0aGUgZmlyc3QgcGFpciBmb3IgdGhlIGNvaGVyZW5jeQorICAgZmFicmljIHJlZ2lzdGVycywgc2Vjb25kIHBhaXIgZm9yIHRoZSBwZXItQ1BVIGZhYnJpYyByZWdpc3RlcnMuCisKKyAqIEZvciAibWFydmVsbCxhcm1hZGEtMzc1LWNvaGVyZW5jeS1mYWJyaWMiLCBvbmx5IG9uZSBwYWlyIGlzIG5lZWRlZAorICAgZm9yIHRoZSBwZXItQ1BVIGZhYnJpYyByZWdpc3RlcnMuCisKKyAqIEZvciAibWFydmVsbCxhcm1hZGEtMzgwLWNvaGVyZW5jeS1mYWJyaWMiLCBvbmx5IG9uZSBwYWlyIGlzIG5lZWRlZAorICAgZm9yIHRoZSBwZXItQ1BVIGZhYnJpYyByZWdpc3RlcnMuCisKK0V4YW1wbGVzOgogCiBjb2hlcmVuY3ktZmFicmljQGQwMDIwMjAwIHsKIAljb21wYXRpYmxlID0gIm1hcnZlbGwsY29oZXJlbmN5LWZhYnJpYyI7CkBAIC0xOSwzICszNiw4IEBACiAKIH07CiAKK2NvaGVyZW5jeS1mYWJyaWNAMjE4MTAgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LWNvaGVyZW5jeS1mYWJyaWMiOworCXJlZyA9IDwweDIxODEwIDB4MWM+OworfTsKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9jcHVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQKaW5kZXggMzMzZjRhZS4uMWZlNzJhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9jcHVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CkBAIC0xNzgsMTMgKzE3OCwxOSBAQAogCQlVc2FnZSBhbmQgZGVmaW5pdGlvbiBkZXBlbmQgb24gQVJNIGFyY2hpdGVjdHVyZSB2ZXJzaW9uLgogCQkJIyBPbiBBUk0gdjggNjQtYml0IHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgYW5kIG11c3QKIAkJCSAgYmUgb25lIG9mOgotCQkJICAgICAic3Bpbi10YWJsZSIKIAkJCSAgICAgInBzY2kiCisJCQkgICAgICJzcGluLXRhYmxlIgogCQkJIyBPbiBBUk0gMzItYml0IHN5c3RlbXMgdGhpcyBwcm9wZXJ0eSBpcyBvcHRpb25hbCBhbmQKIAkJCSAgY2FuIGJlIG9uZSBvZjoKKwkJCSAgICAiYWxsd2lubmVyLHN1bjZpLWEzMSIKKwkJCSAgICAiYXJtLHBzY2kiCisJCQkgICAgIm1hcnZlbGwsYXJtYWRhLTM3NS1zbXAiCisJCQkgICAgIm1hcnZlbGwsYXJtYWRhLTM4MC1zbXAiCisJCQkgICAgIm1hcnZlbGwsYXJtYWRhLXhwLXNtcCIKIAkJCSAgICAicWNvbSxnY2MtbXNtODY2MCIKIAkJCSAgICAicWNvbSxrcHNzLWFjYy12MSIKIAkJCSAgICAicWNvbSxrcHNzLWFjYy12MiIKKwkJCSAgICAicm9ja2NoaXAscmszMDY2LXNtcCIKIAogCS0gY3B1LXJlbGVhc2UtYWRkcgogCQlVc2FnZTogcmVxdWlyZWQgZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGFuICJlbmFibGUtbWV0aG9kIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9leHlub3Mvc21wLXN5c3JhbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2V4eW5vcy9zbXAtc3lzcmFtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBhNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9leHlub3Mvc21wLXN5c3JhbS50eHQKQEAgLTAsMCArMSwzOCBAQAorU2Ftc3VuZyBFeHlub3MgU1lTUkFNIGZvciBTTVAgYnJpbmd1cDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTYW1zdW5nIFNNUC1jYXBhYmxlIEV4eW5vcyBTb0NzIHVzZSBwYXJ0IG9mIHRoZSBTWVNSQU0gZm9yIHRoZSBicmluZ3VwCitvZiB0aGUgc2Vjb25kYXJ5IGNvcmVzLiBPbmNlIHRoZSBjb3JlIGdldHMgcG93ZXJlZCB1cCBpdCBleGVjdXRlcyB0aGUKK2NvZGUgdGhhdCBpcyByZXNpZGluZyBhdCBzb21lIHNwZWNpZmljIGxvY2F0aW9uIG9mIHRoZSBTWVNSQU0uCisKK1RoZXJlZm9yZSByZXNlcnZlZCBzZWN0aW9uIHN1Yi1ub2RlcyBoYXZlIHRvIGJlIGFkZGVkIHRvIHRoZSBtbWlvLXNyYW0KK2RlY2xhcmF0aW9uLiBUaGVzZSBub2RlcyBhcmUgb2YgdHdvIHR5cGVzIGRlcGVuZGluZyB1cG9uIHNlY3VyZSBvcgorbm9uLXNlY3VyZSBleGVjdXRpb24gZW52aXJvbm1lbnQuCisKK1JlcXVpcmVkIHN1Yi1ub2RlIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiBkZXBlbmRpbmcgdXBvbiBib290IG1vZGUsIHNob3VsZCBiZQorCQkic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbSIgOiBmb3IgU2VjdXJlIFNZU1JBTQorCQkic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbS1ucyIgOiBmb3IgTm9uLXNlY3VyZSBTWVNSQU0KKworVGhlIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMgc2hvdWxkIGZvbGxvdyB0aGUgZ2VuZXJpYyBtbWlvLXNyYW0gZGlzY3JpcHRpb24KK2ZvdW5kIGluIC4uLy4uL21pc2Mvc3lzcmFtLnR4dAorCitFeGFtcGxlOgorCisJc3lzcmFtQDAyMDIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQlyZWcgPSA8MHgwMjAyMDAwMCAweDU0MDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDAyMDIwMDAwIDB4NTQwMDA+OworCisJCXNtcC1zeXNyYW1AMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0iOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQl9OworCisJCXNtcC1zeXNyYW1ANTMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtLW5zIjsKKwkJCXJlZyA9IDwweDUzMDAwIDB4MTAwMD47CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWFydmVsbCxiZXJsaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tYXJ2ZWxsLGJlcmxpbi50eHQKaW5kZXggNzM3YWZhNS4uOTQwMTNhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tYXJ2ZWxsLGJlcmxpbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tYXJ2ZWxsLGJlcmxpbi50eHQKQEAgLTEyLDYgKzEyLDcgQEAKICAgICAibWFydmVsbCxiZXJsaW4yIiAgICAgIGZvciBNYXJ2ZWxsIEFybWFkYSAxNTAwIChCRzIsIDg4REUzMTAwKSwKICAgICAibWFydmVsbCxiZXJsaW4yY2QiICAgIGZvciBNYXJ2ZWxsIEFybWFkYSAxNTAwLW1pbmkgKEJHMkNELCA4OERFMzAwNSkKICAgICAibWFydmVsbCxiZXJsaW4yY3QiICAgIGZvciBNYXJ2ZWxsIEFybWFkYSA/IChCRzJDVCwgODhERT8/Pz8pCisgICAgIm1hcnZlbGwsYmVybGluMnEiICAgICBmb3IgTWFydmVsbCBBcm1hZGEgMTUwMC1wcm8gKEJHMlEsIDg4REUzMTE0KQogICAgICJtYXJ2ZWxsLGJlcmxpbjMiICAgICAgZm9yIE1hcnZlbGwgQXJtYWRhID8gKEJHMywgODhERT8/Pz8pCiAKICogRXhhbXBsZToKQEAgLTIyLDMgKzIzLDEwNCBAQAogCiAJLi4uCiB9CisKKyogTWFydmVsbCBCZXJsaW4yIGNoaXAgY29udHJvbCBiaW5kaW5nCisKK01hcnZlbGwgQmVybGluIFNvQ3MgaGF2ZSBhIGNoaXAgY29udHJvbCByZWdpc3RlciBzZXQgcHJvdmlkaW5nIHNldmVyYWwKK2luZGl2aWR1YWwgcmVnaXN0ZXJzIGRlYWxpbmcgd2l0aCBwaW5tdXgsIHBhZG11eCwgY2xvY2ssIHJlc2V0LCBhbmQgc2Vjb25kYXJ5CitDUFUgYm9vdCBhZGRyZXNzLiBVbmZvcnR1bmF0ZWx5LCB0aGUgaW5kaXZpZHVhbCByZWdpc3RlcnMgYXJlIHNwcmVhZCBhbW9uZyB0aGUKK2NoaXAgY29udHJvbCByZWdpc3RlcnMsIHNvIHRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBEVCBub2RlIG9ubHkgcHJvdmlkaW5nIHRoZQorZGlmZmVyZW50IGZ1bmN0aW9ucyB3aGljaCBhcmUgZGVzY3JpYmVkIGJlbG93LgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaGFsbCBiZSBvbmUgb2YKKwkibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCIgZm9yIEJHMgorCSJtYXJ2ZWxsLGJlcmxpbjJjZC1jaGlwLWN0cmwiIGZvciBCRzJDRAorCSJtYXJ2ZWxsLGJlcmxpbjJxLWNoaXAtY3RybCIgZm9yIEJHMlEKKy0gcmVnOiBhZGRyZXNzIGFuZCBsZW5ndGggb2YgZm9sbG93aW5nIHJlZ2lzdGVyIHNldHMgZm9yCisgIEJHMi9CRzJDRDogY2hpcCBjb250cm9sIHJlZ2lzdGVyIHNldAorICBCRzJROiBjaGlwIGNvbnRyb2wgcmVnaXN0ZXIgc2V0IGFuZCBjcHUgcGxsIHJlZ2lzdGVycworCisqIE1hcnZlbGwgQmVybGluMiBzeXN0ZW0gY29udHJvbCBiaW5kaW5nCisKK01hcnZlbGwgQmVybGluIFNvQ3MgaGF2ZSBhIHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyIHNldCBwcm92aWRpbmcgc2V2ZXJhbAoraW5kaXZpZHVhbCByZWdpc3RlcnMgZGVhbGluZyB3aXRoIHBpbm11eCwgcGFkbXV4LCBhbmQgcmVzZXQuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IHNob3VsZCBiZSBvbmUgb2YKKwkibWFydmVsbCxiZXJsaW4yLXN5c3RlbS1jdHJsIiBmb3IgQkcyCisJIm1hcnZlbGwsYmVybGluMmNkLXN5c3RlbS1jdHJsIiBmb3IgQkcyQ0QKKwkibWFydmVsbCxiZXJsaW4ycS1zeXN0ZW0tY3RybCIgZm9yIEJHMlEKKy0gcmVnOiBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyIHNldAorCisqIENsb2NrIHByb3ZpZGVyIGJpbmRpbmcKKworQXMgY2xvY2sgcmVsYXRlZCByZWdpc3RlcnMgYXJlIHNwcmVhZCBhbW9uZyB0aGUgY2hpcCBjb250cm9sIHJlZ2lzdGVycywgdGhlCitjaGlwIGNvbnRyb2wgbm9kZSBhbHNvIHByb3ZpZGVzIHRoZSBjbG9ja3MuIE1hcnZlbGwgQmVybGluMiAoQkcyLCBCRzJDRCwgQkcyUSkKK1NvQ3Mgc2hhcmUgdGhlIHNhbWUgSVAgZm9yIFBMTHMgYW5kIGNsb2Nrcywgd2l0aCBzb21lIG1pbm9yIGRpZmZlcmVuY2VzIGluCitmZWF0dXJlcyBhbmQgcmVnaXN0ZXIgbGF5b3V0LgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSAjY2xvY2stY2VsbHM6IHNoYWxsIGJlIHNldCB0byAxCistIGNsb2NrczogY2xvY2sgc3BlY2lmaWVycyByZWZlcmVuY2luZyB0aGUgY29yZSBjbG9jayBpbnB1dCBjbG9ja3MKKy0gY2xvY2stbmFtZXM6IGFycmF5IG9mIHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgaW5wdXQgY2xvY2sgc3BlY2lmaWVycyBhYm92ZS4KKyAgICBBbGxvd2VkIGNsb2NrLW5hbWVzIGZvciB0aGUgcmVmZXJlbmNlIGNsb2NrcyBhcmUKKyAgICAgICJyZWZjbGsiIGZvciB0aGUgU29DcyBvc2NpYWxsYXRvciBpbnB1dCBvbiBhbGwgU29DcywKKyAgICBhbmQgU29DLXNwZWNpZmljIGlucHV0IGNsb2NrcyBmb3IKKyAgICAgIEJHMi9CRzJDRDogInZpZGVvX2V4dDAiIGZvciB0aGUgZXh0ZXJuYWwgdmlkZW8gY2xvY2sgaW5wdXQKKworQ2xvY2tzIHByb3ZpZGVkIGJ5IGNvcmUgY2xvY2tzIHNoYWxsIGJlIHJlZmVyZW5jZWQgYnkgYSBjbG9jayBzcGVjaWZpZXIKK2luZGV4aW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgY2xvY2tzLiBSZWZlciB0byBkdC1iaW5kaW5ncy9jbG9jay9iZXJsaW48c29jPi5oCitmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggbWFwcGluZy4KKworKiBQaW4gY29udHJvbGxlciBiaW5kaW5nCisKK1BpbiBjb250cm9sIHJlZ2lzdGVycyBhcmUgcGFydCBvZiBib3RoIHJlZ2lzdGVyIHNldHMsIGNoaXAgY29udHJvbCBhbmQgc3lzdGVtCitjb250cm9sLiBUaGUgcGlucyBjb250cm9sbGVkIGFyZSBvcmdhbml6ZWQgaW4gZ3JvdXBzLCBzbyBubyBhY3R1YWwgcGluCitpbmZvcm1hdGlvbiBpcyBuZWVkZWQuCisKK0EgcGluLWNvbnRyb2xsZXIgbm9kZSBzaG91bGQgY29udGFpbiBzdWJub2RlcyByZXByZXNlbnRpbmcgdGhlIHBpbiBncm91cAorY29uZmlndXJhdGlvbnMsIG9uZSBwZXIgZnVuY3Rpb24uIEVhY2ggc3Vibm9kZSBoYXMgdGhlIGdyb3VwIG5hbWUgYW5kIHRoZSBtdXhpbmcKK2Z1bmN0aW9uIHVzZWQuCisKK0JlIGF3YXJlIHRoZSBNYXJ2ZWxsIEJlcmxpbiBkYXRhc2hlZXRzIHVzZSB0aGUga2V5d29yZCAnbW9kZScgZm9yIHdoYXQgaXMgY2FsbGVkCithICdmdW5jdGlvbicgaW4gdGhlIHBpbi1jb250cm9sbGVyIHN1YnN5c3RlbS4KKworUmVxdWlyZWQgc3Vibm9kZS1wcm9wZXJ0aWVzOgorLSBncm91cHM6IGEgbGlzdCBvZiBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIGdyb3VwIG5hbWVzLgorLSBmdW5jdGlvbjogYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gdXNlZCB0byBtdXggdGhlIGdyb3Vwcy4KKworRXhhbXBsZToKKworY2hpcDogY2hpcC1jb250cm9sQGVhMDAwMCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItY2hpcC1jdHJsIjsKKwkjY2xvY2stY2VsbHMgPSA8MT47CisJcmVnID0gPDB4ZWEwMDAwIDB4NDAwPjsKKwljbG9ja3MgPSA8JnJlZmNsaz4sIDwmZXh0ZXJuYWxkZXYgMD47CisJY2xvY2stbmFtZXMgPSAicmVmY2xrIiwgInZpZGVvX2V4dDAiOworCisJc3BpMV9wbXV4OiBzcGkxLXBtdXggeworCQlncm91cHMgPSAiRzAiOworCQlmdW5jdGlvbiA9ICJzcGkxIjsKKwl9OworfTsKKworc3lzY3RybDogc3lzdGVtLWNvbnRyb2xsZXJAZDAwMCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItc3lzdGVtLWN0cmwiOworCXJlZyA9IDwweGQwMDAgMHgxMDA+OworCisJdWFydDBfcG11eDogdWFydDAtcG11eCB7CisJCWdyb3VwcyA9ICJHU000IjsKKwkJZnVuY3Rpb24gPSAidWFydDAiOworCX07CisKKwl1YXJ0MV9wbXV4OiB1YXJ0MS1wbXV4IHsKKwkJZ3JvdXBzID0gIkdTTTUiOworCQlmdW5jdGlvbiA9ICJ1YXJ0MSI7CisJfTsKKworCXVhcnQyX3BtdXg6IHVhcnQyLXBtdXggeworCQlncm91cHMgPSAiR1NNMyI7CisJCWZ1bmN0aW9uID0gInVhcnQyIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9sMy1ub2MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL2wzLW5vYy50eHQKaW5kZXggYzAxMDVkZS4uOTc0NjI0ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL2wzLW5vYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL2wzLW5vYy50eHQKQEAgLTYsNiArNiw4IEBACiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJ0aSxvbWFwMy1sMy1zbXgiIGZvciBPTUFQMyBmYW1pbHkKICAgICAgICAgICAgICAgIFNob3VsZCBiZSAidGksb21hcDQtbDMtbm9jIiBmb3IgT01BUDQgZmFtaWx5CisJICAgICAgIFNob3VsZCBiZSAidGksZHJhNy1sMy1ub2MiIGZvciBEUkE3IGZhbWlseQorICAgICAgICAgICAgICAgU2hvdWxkIGJlICJ0aSxhbTQzNzItbDMtbm9jIiBmb3IgQU00MyBmYW1pbHkKIC0gcmVnOglDb250YWlucyBMMyByZWdpc3RlciBhZGRyZXNzIHJhbmdlIGZvciBlYWNoIG5vYyBkb21haW4uCiAtIHRpLGh3bW9kczogImwzX21haW5fMSIsIC4uLiBPbmUgaHdtb2QgZm9yIGVhY2ggbm9jIGRvbWFpbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL29tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL29tYXAudHh0CmluZGV4IDM2ZWRlMTkuLmQyMmIyMTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9vbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL29tYXAvb21hcC50eHQKQEAgLTgwLDcgKzgwLDEwIEBACiAgIGNvbXBhdGlibGUgPSAidGksb21hcDU0MzIiLCAidGksb21hcDUiCiAKIC0gRFJBNzQyCi0gIGNvbXBhdGlibGUgPSAidGksZHJhN3h4IiwgInRpLGRyYTciCisgIGNvbXBhdGlibGUgPSAidGksZHJhNzQyIiwgInRpLGRyYTc0IiwgInRpLGRyYTciCisKKy0gRFJBNzIyCisgIGNvbXBhdGlibGUgPSAidGksZHJhNzIyIiwgInRpLGRyYTcyIiwgInRpLGRyYTciCiAKIC0gQU00MzcyCiAgIGNvbXBhdGlibGUgPSAidGksYW00MzcyIiwgInRpLGFtNDMiCkBAIC0xMDIsNiArMTA1LDEyIEBACiAtIE9NQVA0IER1b1Zlcm8gd2l0aCBQYXJsb3IgOiBDb21tZXJjaWFsIGV4cGFuc2lvbiBib2FyZCB3aXRoIGRhdWdodGVyIGJvYXJkCiAgIGNvbXBhdGlibGUgPSAiZ3Vtc3RpeCxvbWFwNC1kdW92ZXJvLXBhcmxvciIsICJndW1zdGl4LG9tYXA0LWR1b3Zlcm8iLCAidGksb21hcDQ0MzAiLCAidGksb21hcDQiOwogCistIE9NQVA0IFZBUi1TVEstT000NCA6IENvbW1lcmNpYWwgZGV2IGtpdCB3aXRoIFZBUi1PTTQ0Q3VzdG9tQm9hcmQgYW5kIFZBUi1TT00tT000NCB3L1dMQU4KKyAgY29tcGF0aWJsZSA9ICJ2YXJpc2NpdGUsdmFyLXN0ay1vbTQ0IiwgInZhcmlzY2l0ZSx2YXItc29tLW9tNDQiLCAidGksb21hcDQ0NjAiLCAidGksb21hcDQiOworCistIE9NQVA0IFZBUi1EVkstT000NCA6IENvbW1lcmNpYWwgZGV2IGtpdCB3aXRoIFZBUi1PTTQ0Q3VzdG9tQm9hcmQsIFZBUi1TT00tT000NCB3L1dMQU4gYW5kIExDRCB0b3VjaHNjcmVlbgorICBjb21wYXRpYmxlID0gInZhcmlzY2l0ZSx2YXItZHZrLW9tNDQiLCAidmFyaXNjaXRlLHZhci1zb20tb200NCIsICJ0aSxvbWFwNDQ2MCIsICJ0aSxvbWFwNCI7CisKIC0gT01BUDMgRVZNIDogU29mdHdhcmUgRGV2ZWxvcG1lbnQgQm9hcmQgZm9yIE9NQVAzNXgsIEFNL0RNMzd4CiAgIGNvbXBhdGlibGUgPSAidGksb21hcDMtZXZtIiwgInRpLG9tYXAzIgogCkBAIC0xMjAsNSArMTI5LDggQEAKIC0gQU00Mzd4IEdQIEVWTQogICBjb21wYXRpYmxlID0gInRpLGFtNDM3eC1ncC1ldm0iLCAidGksYW00MzcyIiwgInRpLGFtNDMiCiAKLS0gRFJBNyBFVk06ICBTb2Z0d2FyZSBEZXZlbG9wZW1lbnQgQm9hcmQgZm9yIERSQTdYWAotICBjb21wYXRpYmxlID0gInRpLGRyYTctZXZtIiwgInRpLGRyYTciCistIERSQTc0MiBFVk06ICBTb2Z0d2FyZSBEZXZlbG9wbWVudCBCb2FyZCBmb3IgRFJBNzQyCisgIGNvbXBhdGlibGUgPSAidGksZHJhNy1ldm0iLCAidGksZHJhNzQyIiwgInRpLGRyYTc0IiwgInRpLGRyYTciCisKKy0gRFJBNzIyIEVWTTogU29mdHdhcmUgRGV2ZWxvcG1lbnQgQm9hcmQgZm9yIERSQTcyMgorICBjb21wYXRpYmxlID0gInRpLGRyYTcyLWV2bSIsICJ0aSxkcmE3MjIiLCAidGksZHJhNzIiLCAidGksZHJhNyIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vcHNjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3BzY2kudHh0CmluZGV4IDQzM2FmZTkuLmI0YTU4ZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vcHNjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9wc2NpLnR4dApAQCAtMjEsNyArMjEsMTUgQEAKIAogTWFpbiBub2RlIHJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLSAtIGNvbXBhdGlibGUgICAgOiBNdXN0IGJlICJhcm0scHNjaSIKKyAtIGNvbXBhdGlibGUgICAgOiBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUgb2Y6CisKKwkJCQkgKiAiYXJtLHBzY2kiIDogZm9yIGltcGxlbWVudGF0aW9ucyBjb21wbHlpbmcgdG8gUFNDSSB2ZXJzaW9ucyBwcmlvciB0bworCQkJCQkwLjIuIEZvciB0aGVzZSBjYXNlcyBmdW5jdGlvbiBJRHMgbXVzdCBiZSBwcm92aWRlZC4KKworCQkJCSAqICJhcm0scHNjaS0wLjIiIDogZm9yIGltcGxlbWVudGF0aW9ucyBjb21wbHlpbmcgdG8gUFNDSSAwLjIuIEZ1bmN0aW9uCisJCQkJCUlEcyBhcmUgbm90IHJlcXVpcmVkIGFuZCBzaG91bGQgYmUgaWdub3JlZCBieSBhbiBPUyB3aXRoIFBTQ0kgMC4yCisJCQkJCXN1cHBvcnQsIGJ1dCBhcmUgcGVybWl0dGVkIHRvIGJlIHByZXNlbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCQkJCQlleGlzdGluZyBzb2Z0d2FyZSB3aGVuICJhcm0scHNjaSIgaXMgbGF0ZXIgaW4gdGhlIGNvbXBhdGlibGUgbGlzdC4KIAogIC0gbWV0aG9kICAgICAgICA6IFRoZSBtZXRob2Qgb2YgY2FsbGluZyB0aGUgUFNDSSBmaXJtd2FyZS4gUGVybWl0dGVkCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZToKQEAgLTQ1LDYgKzUzLDggQEAKIAogRXhhbXBsZToKIAorQ2FzZSAxOiBQU0NJIHYwLjEgb25seS4KKwogCXBzY2kgewogCQljb21wYXRpYmxlCT0gImFybSxwc2NpIjsKIAkJbWV0aG9kCQk9ICJzbWMiOwpAQCAtNTMsMyArNjMsMjggQEAKIAkJY3B1X29uCQk9IDwweDk1YzEwMDAyPjsKIAkJbWlncmF0ZQkJPSA8MHg5NWMxMDAwMz47CiAJfTsKKworCitDYXNlIDI6IFBTQ0kgdjAuMiBvbmx5CisKKwlwc2NpIHsKKwkJY29tcGF0aWJsZQk9ICJhcm0scHNjaS0wLjIiOworCQltZXRob2QJCT0gInNtYyI7CisJfTsKKworQ2FzZSAzOiBQU0NJIHYwLjIgYW5kIFBTQ0kgdjAuMS4KKworCUEgRFRCIG1heSBwcm92aWRlIElEcyBmb3IgdXNlIGJ5IGtlcm5lbHMgd2l0aG91dCBQU0NJIDAuMiBzdXBwb3J0LAorCWVuYWJsaW5nIGZpcm13YXJlIGFuZCBoeXBlcnZpc29ycyB0byBzdXBwb3J0IGV4aXN0aW5nIGFuZCBuZXcga2VybmVscy4KKwlUaGVzZSBJRHMgd2lsbCBiZSBpZ25vcmVkIGJ5IGtlcm5lbHMgd2l0aCBQU0NJIDAuMiBzdXBwb3J0LCB3aGljaCB3aWxsCisJdXNlIHRoZSBzdGFuZGFyZCBQU0NJIDAuMiBJRHMgZXhjbHVzaXZlbHkuCisKKwlwc2NpIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scHNjaS0wLjIiLCAiYXJtLHBzY2kiOworCQltZXRob2QgPSAiaHZjIjsKKworCQljcHVfb24gPSA8IGFyYml0cmFyeSB2YWx1ZSA+OworCQljcHVfb2ZmID0gPCBhcmJpdHJhcnkgdmFsdWUgPjsKKworCQkuLi4KKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3JvY2tjaGlwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdmMTI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQKQEAgLTAsMCArMSwxMCBAQAorUm9ja2NoaXAgcGxhdGZvcm1zIGRldmljZSB0cmVlIGJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBicSBDdXJpZSAyIHRhYmxldDoKKyAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKKyAgICAgIC0gY29tcGF0aWJsZSA9ICJtdW5kb3JlYWRlcixicS1jdXJpZTIiLCAicm9ja2NoaXAscmszMDY2YSI7CisKKy0gUmFkeGEgUm9jayBib2FyZDoKKyAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKKyAgICAgIC0gY29tcGF0aWJsZSA9ICJyYWR4YSxyb2NrIiwgInJvY2tjaGlwLHJrMzE4OCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmcvcG11LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy9wbXUudHh0CmluZGV4IGYxZjE1NTIuLjJhNGFiMDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy9wbXUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy9wbXUudHh0CkBAIC0yLDYgKzIsMTAgQEAKIAogUHJvcGVydGllczoKICAtIGNvbXBhdGlibGUgOiBzaG91bGQgY29udGFpbiB0d28gdmFsdWVzLiBGaXJzdCB2YWx1ZSBtdXN0IGJlIG9uZSBmcm9tIGZvbGxvd2luZyBsaXN0OgorCQkgICAtICJzYW1zdW5nLGV4eW5vczMyNTAtcG11IiAtIGZvciBFeHlub3MzMjUwIFNvQywKKwkJICAgLSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIgLSBmb3IgRXh5bm9zNDIxMCBTb0MsCisJCSAgIC0gInNhbXN1bmcsZXh5bm9zNDIxMi1wbXUiIC0gZm9yIEV4eW5vczQyMTIgU29DLAorCQkgICAtICJzYW1zdW5nLGV4eW5vczQ0MTItcG11IiAtIGZvciBFeHlub3M0NDEyIFNvQywKIAkJICAgLSAic2Ftc3VuZyxleHlub3M1MjUwLXBtdSIgLSBmb3IgRXh5bm9zNTI1MCBTb0MsCiAJCSAgIC0gInNhbXN1bmcsZXh5bm9zNTQyMC1wbXUiIC0gZm9yIEV4eW5vczU0MjAgU29DLgogCQlzZWNvbmQgdmFsdWUgbXVzdCBiZSBhbHdheXMgInN5c2NvbiIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmcvc3lzcmVnLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy9zeXNyZWcudHh0CmluZGV4IDBhYjMyNTEuLjRmY2VkNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy9zeXNyZWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy9zeXNyZWcudHh0CkBAIC0xLDggKzEsMTAgQEAKIFNBTVNVTkcgUzVQL0V4eW5vcyBTb0Mgc2VyaWVzIFN5c3RlbSBSZWdpc3RlcnMgKFNZU1JFRykKIAogUHJvcGVydGllczoKLSAtIGNvbXBhdGlibGUgOiBzaG91bGQgY29udGFpbiAic2Ftc3VuZyw8Y2hpcCBuYW1lPi1zeXNyZWciLCAic3lzY29uIjsKLSAgIEZvciBFeHlub3M0IFNvQyBzZXJpZXMgaXQgc2hvdWxkIGJlICJzYW1zdW5nLGV4eW5vczQtc3lzcmVnIiwgInN5c2NvbiI7CisgLSBjb21wYXRpYmxlIDogc2hvdWxkIGNvbnRhaW4gdHdvIHZhbHVlcy4gRmlyc3QgdmFsdWUgbXVzdCBiZSBvbmUgZnJvbSBmb2xsb3dpbmcgbGlzdDoKKwkJLSAic2Ftc3VuZyxleHlub3M0LXN5c3JlZyIgLSBmb3IgRXh5bm9zNCBiYXNlZCBTb0NzLAorCQktICJzYW1zdW5nLGV4eW5vczUtc3lzcmVnIiAtIGZvciBFeHlub3M1IGJhc2VkIFNvQ3MuCisJCXNlY29uZCB2YWx1ZSBtdXN0IGJlIGFsd2F5cyAic3lzY29uIi4KICAtIHJlZyA6IG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQuCiAKIEV4YW1wbGU6CkBAIC0xMCwzICsxMiw4IEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0LXN5c3JlZyIsICJzeXNjb24iOwogCQlyZWcgPSA8MHgxMDAxMDAwMCAweDQwMD47CiAJfTsKKworCXN5c2NvbkAxMDA1MDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1LXN5c3JlZyIsICJzeXNjb24iOworCQlyZWcgPSA8MHgxMDA1MDAwMCAweDUwMDA+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3N0aS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3N0aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmMTZjNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RpLnR4dApAQCAtMCwwICsxLDE1IEBACitTVCBTVGkgUGxhdGZvcm1zIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQm9hcmRzIHdpdGggdGhlIFNUIFNUaUg0MTUgU29DIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorY29tcGF0aWJsZSA9ICJzdCxzdGloNDE1IjsKKworQm9hcmRzIHdpdGggdGhlIFNUIFNUaUg0MTYgU29DIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2IjsKKworQm9hcmRzIHdpdGggdGhlIFNUIFNUaUg0MDcgU29DIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3IjsKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS92ZXhwcmVzcy1zeXNyZWcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS92ZXhwcmVzcy1zeXNyZWcudHh0CmluZGV4IDU1ODBlOWMuLjAwMzE4ZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdmV4cHJlc3Mtc3lzcmVnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3ZleHByZXNzLXN5c3JlZy50eHQKQEAgLTgsNiArOCw4IEBACiBSZXF1aXJlZCBub2RlIHByb3BlcnRpZXM6CiAtIGNvbXBhdGlibGUgdmFsdWUgOiA9ICJhcm0sdmV4cHJlc3Msc3lzcmVnIjsKIC0gcmVnIDogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFuZCB0aGUgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzIHdpbmRvdworCitEZXByZWNhdGVkIHByb3BlcnRpZXMsIHJlcGxhY2VkIGJ5IEdQSU8gc3Vibm9kZXMgKHNlZSBiZWxvdyk6CiAtIGdwaW8tY29udHJvbGxlciA6IHNwZWNpZmllcyB0aGF0IHRoZSBub2RlIGlzIGEgR1BJTyBjb250cm9sbGVyCiAtICNncGlvLWNlbGxzIDogc2l6ZSBvZiB0aGUgR1BJTyBzcGVjaWZpZXIsIHNob3VsZCBiZSAyOgogICAtIGZpcnN0IGNlbGwgaXMgdGhlIHBzZXVkby1HUElPIGxpbmUgbnVtYmVyOgpAQCAtMTYsMzUgKzE4LDg2IEBACiAgICAgMiAtIE5PUiBGTEFTSCBXUG4KICAgLSBzZWNvbmQgY2VsbCBjYW4gdGFrZSBzdGFuZGFyZCBHUElPIGZsYWdzIChjdXJyZW50bHkgaWdub3JlZCkuCiAKK0NvbnRyb2wgcmVnaXN0ZXJzIHByb3ZpZGluZyBwc2V1ZG8tR1BJTyBsaW5lcyBtdXN0IGJlIHJlcHJlc2VudGVkCitieSBzdWJub2RlcywgZWFjaCBvZiB0aGVtIHJlcXVpcmluZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgdmFsdWUgOiBvbmUgb2YKKwkJCSJhcm0sdmV4cHJlc3Mtc3lzcmVnLHN5c19sZWQiCisJCQkiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbWNpIgorCQkJImFybSx2ZXhwcmVzcy1zeXNyZWcsc3lzX2ZsYXNoIgorLSBncGlvLWNvbnRyb2xsZXIgOiBtYWtlcyB0aGUgbm9kZSBhIEdQSU8gY29udHJvbGxlcgorLSAjZ3Bpby1jZWxscyA6IHNpemUgb2YgdGhlIEdQSU8gc3BlY2lmaWVyLCBtdXN0IGJlIDI6CisgIC0gZmlyc3QgY2VsbCBpcyB0aGUgZnVuY3Rpb24gbnVtYmVyOgorICAgIC0gZm9yIHN5c19sZWQgOiAwLi43ID0gTEVEIDAuLjcKKyAgICAtIGZvciBzeXNfbWNpIDogMCA9IE1NQyBDQVJESU4sIDEgPSBNTUMgV1BST1QKKyAgICAtIGZvciBzeXNfZmxhc2ggOiAwID0gTk9SIEZMQVNIIFdQbgorICAtIHNlY29uZCBjZWxsIGNhbiB0YWtlIHN0YW5kYXJkIEdQSU8gZmxhZ3MgKGN1cnJlbnRseSBpZ25vcmVkKS4KKwogRXhhbXBsZToKIAl2Mm1fc3lzcmVnOiBzeXNyZWdAMTAwMDAwMDAgewogIAkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3Mtc3lzcmVnIjsKICAJCXJlZyA9IDwweDEwMDAwMDAwIDB4MTAwMD47Ci0JCWdwaW8tY29udHJvbGxlcjsKLQkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJdjJtX2xlZF9ncGlvczogc3lzX2xlZEAwOCB7CisJCQljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1zeXNyZWcsc3lzX2xlZCI7CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQl2Mm1fbW1jX2dwaW9zOiBzeXNfbWNpQDQ4IHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbWNpIjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXYybV9mbGFzaF9ncGlvczogc3lzX2ZsYXNoQDRjIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfZmxhc2giOworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CiAgCX07CiAKIFRoaXMgYmxvY2sgYWxzbyBjYW4gYWxzbyBhY3QgYSBicmlkZ2UgdG8gdGhlIHBsYXRmb3JtJ3MgY29uZmlndXJhdGlvbgogYnVzIHZpYSAic3lzdGVtIGNvbnRyb2wiIGludGVyZmFjZSwgYWRkcmVzc2luZyBkZXZpY2VzIHdpdGggc2l0ZSBudW1iZXIsCiBwb3NpdGlvbiBpbiB0aGUgYm9hcmQgc3RhY2ssIGNvbmZpZyBjb250cm9sbGVyLCBmdW5jdGlvbiBhbmQgZGV2aWNlCi1udW1iZXJzIC0gc2VlIG1vdGhlcmJvYXJkJ3MgVFJNIGZvciBtb3JlIGRldGFpbHMuCi0KLVRoZSBub2RlIGRlc2NyaWJpbmcgYSBjb25maWcgZGV2aWNlIG11c3QgcmVmZXIgdG8gdGhlIHN5c3JlZyBub2RlIHZpYQotImFybSx2ZXhwcmVzcyxjb25maWctYnJpZGdlIiBwaGFuZGxlIChjYW4gYmUgYWxzbyBkZWZpbmVkIGluIHRoZSBub2RlJ3MKLXBhcmVudCkgYW5kIHJlbGllcyBvbiB0aGUgYm9hcmQgdG9wb2xvZ3kgcHJvcGVydGllcyAtIHNlZSBtYWluIHZleHByZXNzCi1ub2RlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4gSXQgbXVzdCBhbHNvIGRlZmluZSB0aGUgZm9sbG93aW5nCi1wcm9wZXJ0eToKLS0gYXJtLHZleHByZXNzLXN5c3JlZyxmdW5jIDogbXVzdCBjb250YWluIHR3byBjZWxsczoKLSAgLSBmaXJzdCBjZWxsIGRlZmluZXMgZnVuY3Rpb24gbnVtYmVyIChlZy4gMSBmb3IgY2xvY2sgZ2VuZXJhdG9yLAotICAgIDIgZm9yIHZvbHRhZ2UgcmVndWxhdG9ycyBldGMuKQotICAtIGRldmljZSBudW1iZXIgKGVnLiBvc2MgMCwgb3NjIDEgZXRjLikKK251bWJlcnMgLSBzZWUgbW90aGVyYm9hcmQncyBUUk0gZm9yIG1vcmUgZGV0YWlscy4gQWxsIGNvbmZpZ3VyYXRpb24KK2NvbnRyb2xsZXIgYWNjZXNzaWJsZSB2aWEgdGhpcyBpbnRlcmZhY2UgbXVzdCByZWZlcmVuY2UgdGhlIHN5c3JlZworbm9kZSB2aWEgImFybSx2ZXhwcmVzcyxjb25maWctYnJpZGdlIiBwaGFuZGxlIGFuZCBkZWZpbmUgYXBwcm9wcmlhdGUKK3RvcG9sb2d5IHByb3BlcnRpZXMgLSBzZWUgbWFpbiB2ZXhwcmVzcyBub2RlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUKK2RldGFpbHMuIEVhY2ggY2hpbGQgb2Ygc3VjaCBub2RlIGRlc2NyaWJlcyBvbmUgZnVuY3Rpb24gYW5kIG11c3QKK2RlZmluZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgdmFsdWUgOiBtdXN0IGJlIG9uZSBvZiAoY29ycmVzcG9uZGluZyB0byB0aGUgVFJNKToKKwkiYXJtLHZleHByZXNzLWFtcCIKKwkiYXJtLHZleHByZXNzLWR2aW1vZGUiCisJImFybSx2ZXhwcmVzcy1lbmVyZ3kiCisJImFybSx2ZXhwcmVzcy1tdXhmcGdhIgorCSJhcm0sdmV4cHJlc3Mtb3NjIgorCSJhcm0sdmV4cHJlc3MtcG93ZXIiCisJImFybSx2ZXhwcmVzcy1yZWJvb3QiCisJImFybSx2ZXhwcmVzcy1yZXNldCIKKwkiYXJtLHZleHByZXNzLXNjYyIKKwkiYXJtLHZleHByZXNzLXNodXRkb3duIgorCSJhcm0sdmV4cHJlc3MtdGVtcCIKKwkiYXJtLHZleHByZXNzLXZvbHQiCistIGFybSx2ZXhwcmVzcy1zeXNyZWcsZnVuYyA6IG11c3QgY29udGFpbiBhIHNldCBvZiB0d28gY2VsbHMgbG9uZyBncm91cHM6CisgIC0gZmlyc3QgY2VsbCBvZiBlYWNoIGdyb3VwIGRlZmluZXMgdGhlIGZ1bmN0aW9uIG51bWJlcgorICAgIChlZy4gMSBmb3IgY2xvY2sgZ2VuZXJhdG9yLCAyIGZvciB2b2x0YWdlIHJlZ3VsYXRvcnMgZXRjLikKKyAgLSBzZWNvbmQgY2VsbCBvZiBlYWNoIGdyb3VwIGRlZmluZXMgZGV2aWNlIG51bWJlciAoZWcuIG9zYyAwLAorICAgIG9zYyAxIGV0Yy4pCisgIC0gc29tZSBmdW5jdGlvbnMgKGVnLiBlbmVyZ3kgbWV0ZXIsIHdpdGggaXRzIDY0IGJpdCBsb25nIGNvdW50ZXIpCisgICAgYXJlIHVzaW5nIG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24vZGV2aWNlIG51bWJlciBwYWlyCiAKIEV4YW1wbGU6CiAJbWNjIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3MsY29uZmlnLWJ1cyI7CiAJCWFybSx2ZXhwcmVzcyxjb25maWctYnJpZGdlID0gPCZ2Mm1fc3lzcmVnPjsKIAogCQlvc2NAMCB7CiAJCQljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1vc2MiOwogCQkJYXJtLHZleHByZXNzLXN5c3JlZyxmdW5jID0gPDEgMD47CiAJCX07CisKKwkJZW5lcmd5QDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3MtZW5lcmd5IjsKKwkJCWFybSx2ZXhwcmVzcy1zeXNyZWcsZnVuYyA9IDwxMyAwPiwgPDEzIDE+OworCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3ZleHByZXNzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdmV4cHJlc3MudHh0CmluZGV4IGFlNDkxNjEuLjM5ODQ0Y2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdmV4cHJlc3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdmV4cHJlc3MudHh0CkBAIC04MCwxMiArODAsMTcgQEAKIGVudmlyb25tZW50YWwgZGF0YSBsaWtlIHRlbXBlcmF0dXJlLCBwb3dlciBjb25zdW1wdGlvbiBldGMuIEV2ZW4KIHRoZSB2aWRlbyBvdXRwdXQgc3dpdGNoIChGUEdBKSBpcyBjb250cm9sbGVkIHRoYXQgd2F5LgogCi1Ob2RlcyBkZXNjcmliaW5nIGRldmljZXMgY29udHJvbGxlZCBieSB0aGlzIGluZnJhc3RydWN0dXJlIHNob3VsZAotcG9pbnQgYXQgdGhlIGJyaWRnZSBkZXZpY2Ugbm9kZToKK1RoZSBjb250cm9sbGVycyBhcmUgbm90IG1hcHBlZCBpbnRvIG5vcm1hbCBtZW1vcnkgYWRkcmVzcyBzcGFjZQorYW5kIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCBicmlkZ2VzIC0gb3RoZXIgZGV2aWNlcyBjYXBhYmxlCitvZiBnZW5lcmF0aW5nIHRyYW5zYWN0aW9ucyBvbiB0aGUgY29uZmlndXJhdGlvbiBidXMuCisKK1RoZSBub2RlcyBkZXNjcmliaW5nIGNvbmZpZ3VyYXRpb24gY29udHJvbGxlcnMgbXVzdCBkZWZpbmUKK3RoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSB2YWx1ZToKKwljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcyxjb25maWctYnVzIjsKIC0gYnJpZGdlIHBoYW5kbGU6CiAJYXJtLHZleHByZXNzLGNvbmZpZy1icmlkZ2UgPSA8cGhhbmRsZT47Ci1UaGlzIHByb3BlcnR5IGNhbiBiZSBhbHNvIGRlZmluZWQgaW4gYSBwYXJlbnQgbm9kZSAoZWcuIGZvciBhIERDQykKLWFuZCBpcyBlZmZlY3RpdmUgZm9yIGFsbCBjaGlsZHJlbi4KK2FuZCBjaGlsZHJlbiBkZXNjcmliaW5nIGF2YWlsYWJsZSBmdW5jdGlvbnMuCiAKIAogUGxhdGZvcm0gdG9wb2xvZ3kKQEAgLTE5Nyw3ICsyMDIsNyBAQAogCX07CiAKIAlkY2MgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcyxjb25maWctYnVzIjsKIAkJYXJtLHZleHByZXNzLGNvbmZpZy1icmlkZ2UgPSA8JnYybV9zeXNyZWc+OwogCiAJCW9zY0AwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvYnJjbSxnaXNiLWFyYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL2JyY20sZ2lzYi1hcmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDUwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL2JyY20sZ2lzYi1hcmIudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0Jyb2FkY29tIEdJU0IgYnVzIEFyYml0ZXIgY29udHJvbGxlcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCistIGNvbXBhdGlibGU6IHNob3VsZCBiZSAiYnJjbSxnaXNiLWFyYiIKKy0gcmVnOiBzcGVjaWZpZXMgdGhlIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzCistIGludGVycnVwdC1wYXJlbnQ6IHNwZWNpZmllcyB0aGUgcGhhbmRsZSB0byB0aGUgcGFyZW50IGludGVycnVwdCBjb250cm9sbGVyCisgIHRoaXMgYXJiaXRlciBnZXRzIGludGVycnVwdCBsaW5lIGZyb20KKy0gaW50ZXJydXB0czogc3BlY2lmaWVzIHRoZSB0d28gaW50ZXJydXB0cyAodGltZW91dCBhbmQgVEVBKSB0byBiZSB1c2VkIGZyb20KKyAgdGhlIHBhcmVudCBpbnRlcnJ1cHQgY29udHJvbGxlcgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCistIGJyY20sZ2lzYi1hcmItbWFzdGVyLW1hc2s6IDMyLWJpdHMgd2lkZSBiaXRtYXNrIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHSVNCCisgIG1hc3RlcnMgYXJlIHZhbGlkIGF0IHRoZSBzeXN0ZW0gbGV2ZWwKKy0gYnJjbSxnaXNiLWFyYi1tYXN0ZXItbmFtZXM6IHN0cmluZyBsaXN0IG9mIHRoZSBsaXR0ZXJhbCBuYW1lIG9mIHRoZSBHSVNCCisgIG1hc3RlcnMuIFNob3VsZCBtYXRjaCB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluIGJyY20sZ2lzYi1tYXN0ZXItbWFzayBhbmQKKyAgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyCisKK0V4YW1wbGU6CisKK2dpc2ItYXJiQGYwNDAwMDAwIHsKKwljb21wYXRpYmxlID0gImJyY20sZ2lzYi1hcmIiOworCXJlZyA9IDwweGYwNDAwMDAwIDB4ODAwPjsKKwlpbnRlcnJ1cHRzID0gPDA+LCA8Mj47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmc3VuX2wyX2ludGM+OworCisJYnJjbSxnaXNiLWFyYi1tYXN0ZXItbWFzayA9IDwweDc+OworCWJyY20sZ2lzYi1hcmItbWFzdGVyLW5hbWVzID0gImJzcF8wIiwgInNjcHVfMCIsICJjcHVfMCI7Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9tdmVidS1tYnVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvbXZlYnUtbWJ1cy50eHQKaW5kZXggNzU4NmZiNi4uNWZhNDRmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9tdmVidS1tYnVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL212ZWJ1LW1idXMudHh0CkBAIC0xOTcsNyArMTk3LDcgQEAKIHdpdGggb25lIGFub3RoZXIgb3Igd2l0aCB0aGUgc3lzdGVtIG1lbW9yeSByYW5nZXMuCiAKIEVhY2ggZW50cnkgaW4gdGhlIHByb3BlcnR5IHJlZmVycyB0byBleGFjdGx5IG9uZSB3aW5kb3cuIElmIHRoZSBvcGVyYXRpbmcgc3lzdGVtCi1jaG9zZXMgdG8gdXNlIGEgZGlmZmVyZW50IHNldCBvZiBtYnVzIHdpbmRvd3MsIGl0IG11c3QgZW5zdXJlIHRoYXQgYW55IGFkZHJlc3MKK2Nob29zZXMgdG8gdXNlIGEgZGlmZmVyZW50IHNldCBvZiBtYnVzIHdpbmRvd3MsIGl0IG11c3QgZW5zdXJlIHRoYXQgYW55IGFkZHJlc3MKIHRyYW5zbGF0aW9ucyBwZXJmb3JtZWQgZnJvbSBkb3duc3RyZWFtIGRldmljZXMgYXJlIGFkYXB0ZWQgYWNjb3JkaW5nbHkuCiAKIFRoZSBvcGVyYXRpbmcgc3lzdGVtIG1heSBpbnNlcnQgYWRkaXRpb25hbCBtYnVzIHdpbmRvd3MgdGhhdCBkbyBub3QgY29uZmxpY3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9hbHRyX3NvY2ZwZ2EudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2FsdHJfc29jZnBnYS50eHQKaW5kZXggNWRmZDE0NS4uZjcyZTgwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2FsdHJfc29jZnBnYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2FsdHJfc29jZnBnYS50eHQKQEAgLTIxLDggKzIxLDggQEAKIC0gZml4ZWQtZGl2aWRlciA6IElmIGNsb2NrcyBoYXZlIGEgZml4ZWQgZGl2aWRlciB2YWx1ZSwgdXNlIHRoaXMgcHJvcGVydHkuCiAtIGNsay1nYXRlIDogRm9yICJzb2NmcGdhLWdhdGUtY2xrIiwgY2xrLWdhdGUgY29udGFpbnMgdGhlIGdhdGluZyByZWdpc3RlcgogICAgICAgICBhbmQgdGhlIGJpdCBpbmRleC4KLS0gZGl2LXJlZyA6IEZvciAic29jZnBnYS1nYXRlLWNsayIsIGRpdi1yZWcgY29udGFpbnMgdGhlIGRpdmlkZXIgcmVnaXN0ZXIsIGJpdCBzaGlmdCwKLSAgICAgICAgYW5kIHdpZHRoLgorLSBkaXYtcmVnIDogRm9yICJzb2NmcGdhLWdhdGUtY2xrIiBhbmQgInNvY2ZwZ2EtcGVyaXBoLWNsb2NrIiwgZGl2LXJlZyBjb250YWlucworCXRoZSBkaXZpZGVyIHJlZ2lzdGVyLCBiaXQgc2hpZnQsIGFuZCB3aWR0aC4KIC0gY2xrLXBoYXNlIDogRm9yIHRoZSBzZG1tY19jbGssIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgY2xvY2sgcGhhc2UgdGhhdCBjb250cm9scwogCXRoZSBTRE1NQyBDSVUgY2xvY2suIFRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgY2xrX3NhbXBsZShzbXBzZWwpLCBhbmQgdGhlIHNlY29uZAogCXZhbHVlIGlzIHRoZSBjY2xrX2luX2RydihkcnZzZWwpLiBUaGUgY2xrLXBoYXNlIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBjb3JyZWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svYXQ5MS1jbG9jay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svYXQ5MS1jbG9jay50eHQKaW5kZXggNjc5NGNkYy4uYjNkNTQ0YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2F0OTEtY2xvY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9hdDkxLWNsb2NrLnR4dApAQCAtNiw2ICs2LDE2IEBACiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAtIGNvbXBhdGlibGUgOiBzaGFsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkiYXRtZWwsYXQ5MXNhbTl4NS1zY2tjIjoKKwkJYXQ5MSBTQ0tDIChTbG93IENsb2NrIENvbnRyb2xsZXIpCisJCVRoaXMgbm9kZSBjb250YWlucyB0aGUgc2xvdyBjbG9jayBkZWZpbml0aW9ucy4KKworCSJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93LW9zYyI6CisJCWF0OTEgc2xvdyBvc2NpbGxhdG9yCisKKwkiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdy1yYy1vc2MiOgorCQlhdDkxIGludGVybmFsIHNsb3cgUkMgb3NjaWxsYXRvcgorCiAJImF0bWVsLGF0OTFybTkyMDAtcG1jIiBvcgogCSJhdG1lbCxhdDkxc2FtOWc0NS1wbWMiIG9yCiAJImF0bWVsLGF0OTFzYW05bjEyLXBtYyIgb3IKQEAgLTE1LDggKzI1LDE4IEBACiAJCUFsbCBhdDkxIHNwZWNpZmljIGNsb2NrcyAoY2xvY2tzIGRlZmluZWQgYmVsb3cpIG11c3QgYmUgY2hpbGQKIAkJbm9kZSBvZiB0aGUgUE1DIG5vZGUuCiAKKwkiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdyIgKHVuZGVyIHNja2Mgbm9kZSkKKwlvcgorCSJhdG1lbCxhdDkxc2FtOTI2MC1jbGstc2xvdyIgKHVuZGVyIHBtYyBub2RlKToKKwkJYXQ5MSBzbG93IGNsaworCisJImF0bWVsLGF0OTFybTkyMDAtY2xrLW1haW4tb3NjIgorCSJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluLXJjLW9zYyIKKwkJYXQ5MSBtYWluIGNsayBzb3VyY2VzCisKKwkiYXRtZWwsYXQ5MXNhbTl4NS1jbGstbWFpbiIKIAkiYXRtZWwsYXQ5MXJtOTIwMC1jbGstbWFpbiI6Ci0JCWF0OTEgbWFpbiBvc2NpbGxhdG9yCisJCWF0OTEgbWFpbiBjbG9jawogCiAJImF0bWVsLGF0OTFybTkyMDAtY2xrLW1hc3RlciIgb3IKIAkiYXRtZWwsYXQ5MXNhbTl4NS1jbGstbWFzdGVyIjoKQEAgLTU0LDYgKzc0LDYzIEBACiAJImF0bWVsLGF0OTFzYW05eDUtY2xrLXV0bWkiOgogCQlhdDkxIHV0bWkgY2xvY2sKIAorUmVxdWlyZWQgcHJvcGVydGllcyBmb3IgU0NLQyBub2RlOgorLSByZWcgOiBkZWZpbmVzIHRoZSBJTyBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHRoZSBTQ0tDLgorLSAjc2l6ZS1jZWxscyA6IHNoYWxsIGJlIDAgKHJlZyBpcyB1c2VkIHRvIGVuY29kZSBjbGsgaWQpLgorLSAjYWRkcmVzcy1jZWxscyA6IHNoYWxsIGJlIDEgKHJlZyBpcyB1c2VkIHRvIGVuY29kZSBjbGsgaWQpLgorCisKK0ZvciBleGFtcGxlOgorCXNja2M6IHNja2NAZmZmZmZlNTAgeworCQljb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtcG1jIjsKKwkJcmVnID0gPDB4ZmZmZmZlNTAgMHg0PgorCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwkJLyogcHV0IGF0OTEgc2xvdyBjbG9ja3MgaGVyZSAqLworCX07CisKKworUmVxdWlyZWQgcHJvcGVydGllcyBmb3IgaW50ZXJuYWwgc2xvdyBSQyBvc2NpbGxhdG9yOgorLSAjY2xvY2stY2VsbHMgOiBmcm9tIGNvbW1vbiBjbG9jayBiaW5kaW5nOyBzaGFsbCBiZSBzZXQgdG8gMC4KKy0gY2xvY2stZnJlcXVlbmN5IDogZGVmaW5lIHRoZSBpbnRlcm5hbCBSQyBvc2NpbGxhdG9yIGZyZXF1ZW5jeS4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gY2xvY2stYWNjdXJhY3kgOiBkZWZpbmUgdGhlIGludGVybmFsIFJDIG9zY2lsbGF0b3IgYWNjdXJhY3kuCisKK0ZvciBleGFtcGxlOgorCXNsb3dfcmNfb3NjOiBzbG93X3JjX29zYyB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdy1yYy1vc2MiOworCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCQljbG9jay1hY2N1cmFjeSA9IDw1MDAwMDAwMD47CisJfTsKKworUmVxdWlyZWQgcHJvcGVydGllcyBmb3Igc2xvdyBvc2NpbGxhdG9yOgorLSAjY2xvY2stY2VsbHMgOiBmcm9tIGNvbW1vbiBjbG9jayBiaW5kaW5nOyBzaGFsbCBiZSBzZXQgdG8gMC4KKy0gY2xvY2tzIDogc2hhbGwgZW5jb2RlIHRoZSBtYWluIG9zYyBzb3VyY2UgY2xrIHNvdXJjZXMgKHNlZSBhdG1lbCBkYXRhc2hlZXQpLgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBhdG1lbCxvc2MtYnlwYXNzIDogYm9vbGVhbiBwcm9wZXJ0eS4gU2V0IHRoaXMgd2hlbiBhIGNsb2NrIHNpZ25hbCBpcyBkaXJlY3RseQorICBwcm92aWRlZCBvbiBYSU4uCisKK0ZvciBleGFtcGxlOgorCXNsb3dfb3NjOiBzbG93X29zYyB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstc2xvdy1vc2MiOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrcyA9IDwmc2xvd194dGFsPjsKKwl9OworCitSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBzbG93IGNsb2NrOgorLSAjY2xvY2stY2VsbHMgOiBmcm9tIGNvbW1vbiBjbG9jayBiaW5kaW5nOyBzaGFsbCBiZSBzZXQgdG8gMC4KKy0gY2xvY2tzIDogc2hhbGwgZW5jb2RlIHRoZSBzbG93IGNsayBzb3VyY2VzIChzZWUgYXRtZWwgZGF0YXNoZWV0KS4KKworRm9yIGV4YW1wbGU6CisJY2xrMzJrOiBzbGNrIHsKKwkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93IjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9ja3MgPSA8JnNsb3dfcmNfb3NjICZzbG93X29zYz47CisJfTsKKwogUmVxdWlyZWQgcHJvcGVydGllcyBmb3IgUE1DIG5vZGU6CiAtIHJlZyA6IGRlZmluZXMgdGhlIElPIG1lbW9yeSByZXNlcnZlZCBmb3IgdGhlIFBNQy4KIC0gI3NpemUtY2VsbHMgOiBzaGFsbCBiZSAwIChyZWcgaXMgdXNlZCB0byBlbmNvZGUgY2xrIGlkKS4KQEAgLTg1LDI0ICsxNjIsNTcgQEAKIAkJLyogcHV0IGF0OTEgY2xvY2tzIGhlcmUgKi8KIAl9OwogCitSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBtYWluIGNsb2NrIGludGVybmFsIFJDIG9zY2lsbGF0b3I6CistIGludGVycnVwdC1wYXJlbnQgOiBtdXN0IHJlZmVyZW5jZSB0aGUgUE1DIG5vZGUuCistIGludGVycnVwdHMgOiBzaGFsbCBiZSBzZXQgdG8gIjwwPiIuCistIGNsb2NrLWZyZXF1ZW5jeSA6IGRlZmluZSB0aGUgaW50ZXJuYWwgUkMgb3NjaWxsYXRvciBmcmVxdWVuY3kuCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGNsb2NrLWFjY3VyYWN5IDogZGVmaW5lIHRoZSBpbnRlcm5hbCBSQyBvc2NpbGxhdG9yIGFjY3VyYWN5LgorCitGb3IgZXhhbXBsZToKKwltYWluX3JjX29zYzogbWFpbl9yY19vc2MgeworCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2xrLW1haW4tcmMtb3NjIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmcG1jPjsKKwkJaW50ZXJydXB0cyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwkJY2xvY2stYWNjdXJhY3kgPSA8NTAwMDAwMDA+OworCX07CisKK1JlcXVpcmVkIHByb3BlcnRpZXMgZm9yIG1haW4gY2xvY2sgb3NjaWxsYXRvcjoKKy0gaW50ZXJydXB0LXBhcmVudCA6IG11c3QgcmVmZXJlbmNlIHRoZSBQTUMgbm9kZS4KKy0gaW50ZXJydXB0cyA6IHNoYWxsIGJlIHNldCB0byAiPDA+Ii4KKy0gI2Nsb2NrLWNlbGxzIDogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzsgc2hhbGwgYmUgc2V0IHRvIDAuCistIGNsb2NrcyA6IHNoYWxsIGVuY29kZSB0aGUgbWFpbiBvc2Mgc291cmNlIGNsayBzb3VyY2VzIChzZWUgYXRtZWwgZGF0YXNoZWV0KS4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gYXRtZWwsb3NjLWJ5cGFzcyA6IGJvb2xlYW4gcHJvcGVydHkuIFNwZWNpZmllZCBpZiBhIGNsb2NrIHNpZ25hbCBpcyBwcm92aWRlZAorICBvbiBYSU4uCisKKyAgY2xvY2sgc2lnbmFsIGlzIGRpcmVjdGx5IHByb3ZpZGVkIG9uIFhJTiBwaW4uCisKK0ZvciBleGFtcGxlOgorCW1haW5fb3NjOiBtYWluX29zYyB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstbWFpbi1vc2MiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwbWM+OworCQlpbnRlcnJ1cHRzID0gPDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrcyA9IDwmbWFpbl94dGFsPjsKKwl9OworCiBSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBtYWluIGNsb2NrOgogLSBpbnRlcnJ1cHQtcGFyZW50IDogbXVzdCByZWZlcmVuY2UgdGhlIFBNQyBub2RlLgogLSBpbnRlcnJ1cHRzIDogc2hhbGwgYmUgc2V0IHRvICI8MD4iLgogLSAjY2xvY2stY2VsbHMgOiBmcm9tIGNvbW1vbiBjbG9jayBiaW5kaW5nOyBzaGFsbCBiZSBzZXQgdG8gMC4KLS0gY2xvY2tzIChvcHRpb25hbCBpZiBjbG9jay1mcmVxdWVuY3kgaXMgcHJvdmlkZWQpIDogc2hhbGwgYmUgdGhlIHNsb3cgY2xvY2sKLQlwaGFuZGxlLiBUaGlzIGNsb2NrIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBtYWluIGNsb2NrIHJhdGUgaWYKLQkiY2xvY2stZnJlcXVlbmN5IiBpcyBub3QgcHJvdmlkZWQuCi0tIGNsb2NrLWZyZXF1ZW5jeSA6IHRoZSBtYWluIG9zY2lsbGF0b3IgZnJlcXVlbmN5LlByZWZlciB0aGUgdXNlIG9mCi0JImNsb2NrLWZyZXF1ZW5jeSIgb3ZlciBhdXRvbWF0aWMgY2xvY2sgcmF0ZSBjYWxjdWxhdGlvbi4KKy0gY2xvY2tzIDogc2hhbGwgZW5jb2RlIHRoZSBtYWluIGNsayBzb3VyY2VzIChzZWUgYXRtZWwgZGF0YXNoZWV0KS4KIAogRm9yIGV4YW1wbGU6CiAJbWFpbjogbWFpbmNrIHsKLQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWNsay1tYWluIjsKKwkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluIjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmcG1jPjsKIAkJaW50ZXJydXB0cyA9IDwwPjsKIAkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljbG9ja3MgPSA8JmNrMzJrPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDAwPjsKKwkJY2xvY2tzID0gPCZtYWluX3JjX29zYyAmbWFpbl9vc2M+OwogCX07CiAKIFJlcXVpcmVkIHByb3BlcnRpZXMgZm9yIG1hc3RlciBjbG9jazoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3MzMjUwLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3MzMjUwLWNsb2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRjOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2V4eW5vczMyNTAtY2xvY2sudHh0CkBAIC0wLDAgKzEsNDEgQEAKKyogU2Ftc3VuZyBFeHlub3MzMjUwIENsb2NrIENvbnRyb2xsZXIKKworVGhlIEV4eW5vczMyNTAgY2xvY2sgY29udHJvbGxlciBnZW5lcmF0ZXMgYW5kIHN1cHBsaWVzIGNsb2NrIHRvIHZhcmlvdXMKK2NvbnRyb2xsZXJzIHdpdGhpbiB0aGUgRXh5bm9zMzI1MCBTb0MuCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nLgorICAtICJzYW1zdW5nLGV4eW5vczMyNTAtY211IiAtIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIEV4eW5vczMyNTAgU29DLgorCistIHJlZzogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sbGVyIGFuZCBsZW5ndGggb2YgbWVtb3J5IG1hcHBlZAorICByZWdpb24uCisKKy0gI2Nsb2NrLWNlbGxzOiBzaG91bGQgYmUgMS4KKworRWFjaCBjbG9jayBpcyBhc3NpZ25lZCBhbiBpZGVudGlmaWVyIGFuZCBjbGllbnQgbm9kZXMgY2FuIHVzZSB0aGlzIGlkZW50aWZpZXIKK3RvIHNwZWNpZnkgdGhlIGNsb2NrIHdoaWNoIHRoZXkgY29uc3VtZS4KKworQWxsIGF2YWlsYWJsZSBjbG9ja3MgYXJlIGRlZmluZWQgYXMgcHJlcHJvY2Vzc29yIG1hY3JvcyBpbgorZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zMzI1MC5oIGhlYWRlciBhbmQgY2FuIGJlIHVzZWQgaW4gZGV2aWNlCit0cmVlIHNvdXJjZXMuCisKK0V4YW1wbGUgMTogQW4gZXhhbXBsZSBvZiBhIGNsb2NrIGNvbnRyb2xsZXIgbm9kZSBpcyBsaXN0ZWQgYmVsb3cuCisKKwljbXU6IGNsb2NrLWNvbnRyb2xsZXJAMTAwMzAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1jbXUiOworCQlyZWcgPSA8MHgxMDAzMDAwMCAweDIwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKK0V4YW1wbGUgMjogVUFSVCBjb250cm9sbGVyIG5vZGUgdGhhdCBjb25zdW1lcyB0aGUgY2xvY2sgZ2VuZXJhdGVkIGJ5IHRoZSBjbG9jaworCSAgIGNvbnRyb2xsZXIuIFJlZmVyIHRvIHRoZSBzdGFuZGFyZCBjbG9jayBiaW5kaW5ncyBmb3IgaW5mb3JtYXRpb24KKwkgICBhYm91dCAnY2xvY2tzJyBhbmQgJ2Nsb2NrLW5hbWVzJyBwcm9wZXJ0eS4KKworCXNlcmlhbEAxMzgwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXVhcnQiOworCQlyZWcgPSA8MHgxMzgwMDAwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxMDkgMD47CisJCWNsb2NrcyA9IDwmY211IENMS19VQVJUMD4sIDwmY211IENMS19TQ0xLX1VBUlQwPjsKKwkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3M1MjYwLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3M1MjYwLWNsb2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDk2YjJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2V4eW5vczUyNjAtY2xvY2sudHh0CkBAIC0wLDAgKzEsMTkwIEBACisqIFNhbXN1bmcgRXh5bm9zNTI2MCBDbG9jayBDb250cm9sbGVyCisKK0V4eW5vczUyNjAgaGFzIDEzIGNsb2NrIGNvbnRyb2xsZXJzIHdoaWNoIGFyZSBpbnN0YW50aWF0ZWQKK2luZGVwZW5kZW50bHkgZnJvbSB0aGUgZGV2aWNlLXRyZWUuIFRoZXNlIGNsb2NrIGNvbnRyb2xsZXJzCitnZW5lcmF0ZSBhbmQgc3VwcGx5IGNsb2NrcyB0byB2YXJpb3VzIGhhcmR3YXJlIGJsb2NrcyB3aXRoaW4KK3RoZSBTb0MuCisKK0VhY2ggY2xvY2sgaXMgYXNzaWduZWQgYW4gaWRlbnRpZmllciBhbmQgY2xpZW50IG5vZGVzIGNhbiB1c2UKK3RoaXMgaWRlbnRpZmllciB0byBzcGVjaWZ5IHRoZSBjbG9jayB3aGljaCB0aGV5IGNvbnN1bWUuIEFsbAorYXZhaWxhYmxlIGNsb2NrcyBhcmUgZGVmaW5lZCBhcyBwcmVwcm9jZXNzb3IgbWFjcm9zIGluCitkdC1iaW5kaW5ncy9jbG9jay9leHlub3M1MjYwLWNsay5oIGhlYWRlciBhbmQgY2FuIGJlIHVzZWQgaW4KK2RldmljZSB0cmVlIHNvdXJjZXMuCisKK0V4dGVybmFsIGNsb2NrczoKKworVGhlcmUgYXJlIHNldmVyYWwgY2xvY2tzIHRoYXQgYXJlIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBTb0MuIEl0CitpcyBleHBlY3RlZCB0aGF0IHRoZXkgYXJlIGRlZmluZWQgdXNpbmcgc3RhbmRhcmQgY2xvY2sgYmluZGluZ3MKK3dpdGggZm9sbG93aW5nIGNsb2NrLW91dHB1dC1uYW1lczoKKworIC0gImZpbl9wbGwiIC0gUExMIGlucHV0IGNsb2NrIGZyb20gWFhUSQorIC0gInhydGN4dGkiIC0gaW5wdXQgY2xvY2sgZnJvbSBYUlRDWFRJCisgLSAiaW9jbGtfcGNtX2V4dGNsayIgLSBwY20gZXh0ZXJuYWwgb3BlcmF0aW9uIGNsb2NrCisgLSAiaW9jbGtfc3BkaWZfZXh0Y2xrIiAtIHNwZGlmIGV4dGVybmFsIG9wZXJhdGlvbiBjbG9jaworIC0gImlvY2xrX2kyc19jZGNsayIgLSBpMnMwIGNvZGVjIGNsb2NrCisKK1BoeSBjbG9ja3M6CisKK1RoZXJlIGFyZSBzZXZlcmFsIGNsb2NrcyB3aGljaCBhcmUgZ2VuZXJhdGVkIGJ5IHNwZWNpZmljIFBIWXMuCitUaGVzZSBjbG9ja3MgYXJlIGZlZCBpbnRvIHRoZSBjbG9jayBjb250cm9sbGVyIGFuZCB0aGVuIHJvdXRlZCB0bwordGhlIGhhcmR3YXJlIGJsb2Nrcy4gVGhlc2UgY2xvY2tzIGFyZSBkZWZpbmVkIGFzIGZpeGVkIGNsb2NrcyBpbiB0aGUKK2RyaXZlciB3aXRoIGZvbGxvd2luZyBuYW1lczoKKworIC0gInBoeWNsa19kcHR4X3BoeV9jaDNfdHhkX2NsayIgLSBkcCBwaHkgY2xvY2sgZm9yIGNoYW5uZWwgMworIC0gInBoeWNsa19kcHR4X3BoeV9jaDJfdHhkX2NsayIgLSBkcCBwaHkgY2xvY2sgZm9yIGNoYW5uZWwgMgorIC0gInBoeWNsa19kcHR4X3BoeV9jaDFfdHhkX2NsayIgLSBkcCBwaHkgY2xvY2sgZm9yIGNoYW5uZWwgMQorIC0gInBoeWNsa19kcHR4X3BoeV9jaDBfdHhkX2NsayIgLSBkcCBwaHkgY2xvY2sgZm9yIGNoYW5uZWwgMAorIC0gInBoeWNsa19oZG1pX3BoeV90bWRzX2Nsa28iIC0gaGRtaSBwaHkgdG1kcyBjbG9jaworIC0gInBoeWNsa19oZG1pX3BoeV9waXhlbF9jbGtvIiAtIGhkbWkgcGh5IHBpeGVsIGNsb2NrCisgLSAicGh5Y2xrX2hkbWlfbGlua19vX3RtZHNfY2xraGkiIC0gaGRtaSBwaHkgZm9yIGhkbWkgbGluaworIC0gInBoeWNsa19kcHR4X3BoeV9vX3JlZl9jbGtfMjRtIiAtIGRwIHBoeSByZWZlcmVuY2UgY2xvY2sKKyAtICJwaHljbGtfZHB0eF9waHlfY2xrX2RpdjIiCisgLSAicGh5Y2xrX21pcGlfZHBoeV80bF9tX3J4Y2xrZXNjMCIKKyAtICJwaHljbGtfdXNiaG9zdDIwX3BoeV9waHljbG9jayIgLSB1c2IgMi4wIHBoeSBjbG9jaworIC0gInBoeWNsa191c2Job3N0MjBfcGh5X2ZyZWVjbGsiCisgLSAicGh5Y2xrX3VzYmhvc3QyMF9waHlfY2xrNDhtb2hjaSIKKyAtICJwaHljbGtfdXNiZHJkMzBfdWRyZDMwX3BpcGVfcGNsayIKKyAtICJwaHljbGtfdXNiZHJkMzBfdWRyZDMwX3BoeWNsb2NrIiAtIHVzYiAzLjAgcGh5IGNsb2NrCisKK1JlcXVpcmVkIFByb3BlcnRpZXMgZm9yIENsb2NrIENvbnRyb2xsZXI6CisKKyAtIGNvbXBhdGlibGU6IHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZy4KKwkxKSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLXRvcCIKKwkyKSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLXBlcmkiCisJMykgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1lZ2wiCisJNCkgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1rZmMiCisJNSkgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1nMmQiCisJNikgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1taWYiCisJNykgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1tZmMiCisJOCkgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1nM2QiCisJOSkgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1mc3lzIgorCTEwKSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWF1ZCIKKwkxMSkgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1pc3AiCisJMTIpICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2stZ3NjbCIKKwkxMykgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1kaXNwIgorCisgLSByZWc6IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbGxlciBhbmQgdGhlIGxlbmd0aCBvZgorCW1lbW9yeSBtYXBwZWQgcmVnaW9uLgorCisgLSAjY2xvY2stY2VsbHM6IHNob3VsZCBiZSAxLgorCisgLSBjbG9ja3M6IGxpc3Qgb2YgY2xvY2sgaWRlbnRpZmllcnMgd2hpY2ggYXJlIGZlZCBhcyB0aGUgaW5wdXQgdG8KKwl0aGUgZ2l2ZW4gY2xvY2sgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRoZSBuZXh0IHNlY3Rpb24gdG8gZmluZAorCXRoZSBpbnB1dCBjbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbGxlci4KKworIC0gY2xvY2stbmFtZXM6IGxpc3Qgb2YgbmFtZXMgb2YgY2xvY2tzIHdoaWNoIGFyZSBmZWQgYXMgdGhlIGlucHV0CisJdG8gdGhlIGdpdmVuIGNsb2NrIGNvbnRyb2xsZXIuCisKK0lucHV0IGNsb2NrcyBmb3IgdG9wIGNsb2NrIGNvbnRyb2xsZXI6CisJLSBmaW5fcGxsCisJLSBkb3V0X21lbV9wbGwKKwktIGRvdXRfYnVzX3BsbAorCS0gZG91dF9tZWRpYV9wbGwKKworSW5wdXQgY2xvY2tzIGZvciBwZXJpIGNsb2NrIGNvbnRyb2xsZXI6CisJLSBmaW5fcGxsCisJLSBpb2Nsa19wY21fZXh0Y2xrCisJLSBpb2Nsa19pMnNfY2RjbGsKKwktIGlvY2xrX3NwZGlmX2V4dGNsaworCS0gcGh5Y2xrX2hkbWlfcGh5X3JlZl9ja28KKwktIGRvdXRfYWNsa19wZXJpXzY2CisJLSBkb3V0X3NjbGtfcGVyaV91YXJ0MAorCS0gZG91dF9zY2xrX3BlcmlfdWFydDEKKwktIGRvdXRfc2Nsa19wZXJpX3VhcnQyCisJLSBkb3V0X3NjbGtfcGVyaV9zcGkwX2IKKwktIGRvdXRfc2Nsa19wZXJpX3NwaTFfYgorCS0gZG91dF9zY2xrX3Blcmlfc3BpMl9iCisJLSBkb3V0X2FjbGtfcGVyaV9hdWQKKwktIGRvdXRfc2Nsa19wZXJpX3NwaTBfYgorCitJbnB1dCBjbG9ja3MgZm9yIGVnbCBjbG9jayBjb250cm9sbGVyOgorCS0gZmluX3BsbAorCS0gZG91dF9idXNfcGxsCisKK0lucHV0IGNsb2NrcyBmb3Iga2ZjIGNsb2NrIGNvbnRyb2xsZXI6CisJLSBmaW5fcGxsCisJLSBkb3V0X21lZGlhX3BsbAorCitJbnB1dCBjbG9ja3MgZm9yIGcyZCBjbG9jayBjb250cm9sbGVyOgorCS0gZmluX3BsbAorCS0gZG91dF9hY2xrX2cyZF8zMzMKKworSW5wdXQgY2xvY2tzIGZvciBtaWYgY2xvY2sgY29udHJvbGxlcjoKKwktIGZpbl9wbGwKKworSW5wdXQgY2xvY2tzIGZvciBtZmMgY2xvY2sgY29udHJvbGxlcjoKKwktIGZpbl9wbGwKKwktIGRvdXRfYWNsa19tZmNfMzMzCisKK0lucHV0IGNsb2NrcyBmb3IgZzNkIGNsb2NrIGNvbnRyb2xsZXI6CisJLSBmaW5fcGxsCisKK0lucHV0IGNsb2NrcyBmb3IgZnN5cyBjbG9jayBjb250cm9sbGVyOgorCS0gZmluX3BsbAorCS0gcGh5Y2xrX3VzYmhvc3QyMF9waHlfcGh5Y2xvY2sKKwktIHBoeWNsa191c2Job3N0MjBfcGh5X2ZyZWVjbGsKKwktIHBoeWNsa191c2Job3N0MjBfcGh5X2NsazQ4bW9oY2kKKwktIHBoeWNsa191c2JkcmQzMF91ZHJkMzBfcGlwZV9wY2xrCisJLSBwaHljbGtfdXNiZHJkMzBfdWRyZDMwX3BoeWNsb2NrCisJLSBkb3V0X2FjbGtfZnN5c18yMDAKKworSW5wdXQgY2xvY2tzIGZvciBhdWQgY2xvY2sgY29udHJvbGxlcjoKKwktIGZpbl9wbGwKKwktIGZvdXRfYXVkX3BsbAorCS0gaW9jbGtfaTJzX2NkY2xrCisJLSBpb2Nsa19wY21fZXh0Y2xrCisKK0lucHV0IGNsb2NrcyBmb3IgaXNwIGNsb2NrIGNvbnRyb2xsZXI6CisJLSBmaW5fcGxsCisJLSBkb3V0X2FjbGtfaXNwMV8yNjYKKwktIGRvdXRfYWNsa19pc3AxXzQwMAorCS0gbW91dF9hY2xrX2lzcDFfMjY2CisKK0lucHV0IGNsb2NrcyBmb3IgZ3NjbCBjbG9jayBjb250cm9sbGVyOgorCS0gZmluX3BsbAorCS0gZG91dF9hY2xrX2dzY2xfNDAwCisJLSBkb3V0X2FjbGtfZ3NjbF8zMzMKKworSW5wdXQgY2xvY2tzIGZvciBkaXNwIGNsb2NrIGNvbnRyb2xsZXI6CisJLSBmaW5fcGxsCisJLSBwaHljbGtfZHB0eF9waHlfY2gzX3R4ZF9jbGsKKwktIHBoeWNsa19kcHR4X3BoeV9jaDJfdHhkX2NsaworCS0gcGh5Y2xrX2RwdHhfcGh5X2NoMV90eGRfY2xrCisJLSBwaHljbGtfZHB0eF9waHlfY2gwX3R4ZF9jbGsKKwktIHBoeWNsa19oZG1pX3BoeV90bWRzX2Nsa28KKwktIHBoeWNsa19oZG1pX3BoeV9yZWZfY2xrbworCS0gcGh5Y2xrX2hkbWlfcGh5X3BpeGVsX2Nsa28KKwktIHBoeWNsa19oZG1pX2xpbmtfb190bWRzX2Nsa2hpCisJLSBwaHljbGtfbWlwaV9kcGh5XzRsX21fdHhieXRlX2Nsa2hzCisJLSBwaHljbGtfZHB0eF9waHlfb19yZWZfY2xrXzI0bQorCS0gcGh5Y2xrX2RwdHhfcGh5X2Nsa19kaXYyCisJLSBwaHljbGtfbWlwaV9kcGh5XzRsX21fcnhjbGtlc2MwCisJLSBwaHljbGtfaGRtaV9waHlfcmVmX2NrbworCS0gaW9jbGtfc3BkaWZfZXh0Y2xrCisJLSBkb3V0X2FjbGtfcGVyaV9hdWQKKwktIGRvdXRfYWNsa19kaXNwXzIyMgorCS0gZG91dF9zY2xrX2Rpc3BfcGl4ZWwKKwktIGRvdXRfYWNsa19kaXNwXzMzMworCitFeGFtcGxlIDE6IEFuIGV4YW1wbGUgb2YgYSBjbG9jayBjb250cm9sbGVyIG5vZGUgaXMgbGlzdGVkIGJlbG93LgorCisJY2xvY2tfbWZjOiBjbG9jay1jb250cm9sbGVyQDExMDkwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2stbWZjIjsKKwkJY2xvY2sgPSA8JmZpbl9wbGw+LCA8JmNsb2NrX3RvcCBUT1BfRE9VVF9BQ0xLX01GQ18zMzM+OworCQljbG9jay1uYW1lcyA9ICJmaW5fcGxsIiwgImRvdXRfYWNsa19tZmNfMzMzIjsKKwkJcmVnID0gPDB4MTEwOTAwMDAgMHgxMDAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCitFeGFtcGxlIDI6IFVBUlQgY29udHJvbGxlciBub2RlIHRoYXQgY29uc3VtZXMgdGhlIGNsb2NrIGdlbmVyYXRlZCBieSB0aGUKKwkJcGVyaSBjbG9jayBjb250cm9sbGVyLiBSZWZlciB0byB0aGUgc3RhbmRhcmQgY2xvY2sgYmluZGluZ3MgZm9yCisJCWluZm9ybWF0aW9uIGFib3V0ICdjbG9ja3MnIGFuZCAnY2xvY2stbmFtZXMnIHByb3BlcnR5LgorCisJc2VyaWFsQDEyQzAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCXJlZyA9IDwweDEyQzAwMDAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDE0NiAwPjsKKwkJY2xvY2tzID0gPCZjbG9ja19wZXJpIFBFUklfUENMS19VQVJUMD4sIDwmY2xvY2tfcGVyaSBQRVJJX1NDTEtfVUFSVDA+OworCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwl9OworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZXh5bm9zNTQxMC1jbG9jay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZXh5bm9zNTQxMC1jbG9jay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhYjYzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3M1NDEwLWNsb2NrLnR4dApAQCAtMCwwICsxLDQ1IEBACisqIFNhbXN1bmcgRXh5bm9zNTQxMCBDbG9jayBDb250cm9sbGVyCisKK1RoZSBFeHlub3M1NDEwIGNsb2NrIGNvbnRyb2xsZXIgZ2VuZXJhdGVzIGFuZCBzdXBwbGllcyBjbG9jayB0byB2YXJpb3VzCitjb250cm9sbGVycyB3aXRoaW4gdGhlIEV4eW5vczU0MTAgU29DLgorCitSZXF1aXJlZCBQcm9wZXJ0aWVzOgorCistIGNvbXBhdGlibGU6IHNob3VsZCBiZSAic2Ftc3VuZyxleHlub3M1NDEwLWNsb2NrIgorCistIHJlZzogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sbGVyIGFuZCBsZW5ndGggb2YgbWVtb3J5IG1hcHBlZAorICByZWdpb24uCisKKy0gI2Nsb2NrLWNlbGxzOiBzaG91bGQgYmUgMS4KKworQWxsIGF2YWlsYWJsZSBjbG9ja3MgYXJlIGRlZmluZWQgYXMgcHJlcHJvY2Vzc29yIG1hY3JvcyBpbgorZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTQxMC5oIGhlYWRlciBhbmQgY2FuIGJlIHVzZWQgaW4gZGV2aWNlCit0cmVlIHNvdXJjZXMuCisKK0V4dGVybmFsIGNsb2NrOgorCitUaGVyZSBpcyBjbG9jayB0aGF0IGlzIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBTb0MuIEl0CitpcyBleHBlY3RlZCB0aGF0IGl0IGlzIGRlZmluZWQgdXNpbmcgc3RhbmRhcmQgY2xvY2sgYmluZGluZ3MKK3dpdGggZm9sbG93aW5nIGNsb2NrLW91dHB1dC1uYW1lOgorCisgLSAiZmluX3BsbCIgLSBQTEwgaW5wdXQgY2xvY2sgZnJvbSBYWFRJCisKK0V4YW1wbGUgMTogQW4gZXhhbXBsZSBvZiBhIGNsb2NrIGNvbnRyb2xsZXIgbm9kZSBpcyBsaXN0ZWQgYmVsb3cuCisKKwljbG9jazogY2xvY2stY29udHJvbGxlckAweDEwMDEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MTAtY2xvY2siOworCQlyZWcgPSA8MHgxMDAxMDAwMCAweDMwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKK0V4YW1wbGUgMjogVUFSVCBjb250cm9sbGVyIG5vZGUgdGhhdCBjb25zdW1lcyB0aGUgY2xvY2sgZ2VuZXJhdGVkIGJ5IHRoZSBjbG9jaworCSAgIGNvbnRyb2xsZXIuIFJlZmVyIHRvIHRoZSBzdGFuZGFyZCBjbG9jayBiaW5kaW5ncyBmb3IgaW5mb3JtYXRpb24KKwkgICBhYm91dCAnY2xvY2tzJyBhbmQgJ2Nsb2NrLW5hbWVzJyBwcm9wZXJ0eS4KKworCXNlcmlhbEAxMkMyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXVhcnQiOworCQlyZWcgPSA8MHgxMkMwMDAwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCA1MSAwPjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfVUFSVDA+LCA8JmNsb2NrIENMS19TQ0xLX1VBUlQwPjsKKwkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3M1NDIwLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9leHlub3M1NDIwLWNsb2NrLnR4dAppbmRleCBjYTg4Yzk3Li5kNTRmNDJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZXh5bm9zNTQyMC1jbG9jay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2V4eW5vczU0MjAtY2xvY2sudHh0CkBAIC0xLDEyICsxLDEzIEBACiAqIFNhbXN1bmcgRXh5bm9zNTQyMCBDbG9jayBDb250cm9sbGVyCiAKIFRoZSBFeHlub3M1NDIwIGNsb2NrIGNvbnRyb2xsZXIgZ2VuZXJhdGVzIGFuZCBzdXBwbGllcyBjbG9jayB0byB2YXJpb3VzCi1jb250cm9sbGVycyB3aXRoaW4gdGhlIEV4eW5vczU0MjAgU29DLgorY29udHJvbGxlcnMgd2l0aGluIHRoZSBFeHlub3M1NDIwIFNvQyBhbmQgZm9yIHRoZSBFeHlub3M1ODAwIFNvQy4KIAogUmVxdWlyZWQgUHJvcGVydGllczoKIAogLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcuCiAgIC0gInNhbXN1bmcsZXh5bm9zNTQyMC1jbG9jayIgLSBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCBFeHlub3M1NDIwIFNvQy4KKyAgLSAic2Ftc3VuZyxleHlub3M1ODAwLWNsb2NrIiAtIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIEV4eW5vczU4MDAgU29DLgogCiAtIHJlZzogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sbGVyIGFuZCBsZW5ndGggb2YgbWVtb3J5IG1hcHBlZAogICByZWdpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svaW14MjUtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2lteDI1LWNsb2NrLnR4dAppbmRleCBkYjRmMmYwLi5iYTZiMzEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svaW14MjUtY2xvY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9pbXgyNS1jbG9jay50eHQKQEAgLTEzOSw2ICsxMzksOSBAQAogCXVhcnQ1X2lwZwkJMTI0CiAJcmVzZXJ2ZWQJCTEyNQogCXdkdF9pcGcJCQkxMjYKKwlja29fZGl2CQkJMTI3CisJY2tvX3NlbAkJCTEyOAorCWNrbwkJCTEyOQogCiBFeGFtcGxlczoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2lteDI3LWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9pbXgyNy1jbG9jay50eHQKaW5kZXggN2EyMDcwMy4uNmJjOWZkMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2lteDI3LWNsb2NrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svaW14MjctY2xvY2sudHh0CkBAIC05OCw3ICs5OCwxMiBAQAogCWZwbSAgICAgICAgICAgICAgICAgIDgzCiAJbXBsbF9vc2Nfc2VsICAgICAgICAgODQKIAltcGxsX3NlbCAgICAgICAgICAgICA4NQotCXNwbGxfZ2F0ZQkgICAgIDg2CisJc3BsbF9nYXRlICAgICAgICAgICAgODYKKwltc2hjX2RpdiAgICAgICAgICAgICA4NworCXJ0aWNfaXBnX2dhdGUgICAgICAgIDg4CisJbXNoY19pcGdfZ2F0ZSAgICAgICAgODkKKwlydGljX2FoYl9nYXRlICAgICAgICA5MAorCW1zaGNfYmF1ZF9nYXRlICAgICAgIDkxCiAKIEV4YW1wbGVzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svaW14NnEtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2lteDZxLWNsb2NrLnR4dAppbmRleCA2YWFiNzJiLi45MGVjOTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svaW14NnEtY2xvY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9pbXg2cS1jbG9jay50eHQKQEAgLTIyMCw2ICsyMjAsNyBAQAogCWx2ZHMyX3NlbAkJMjA1CiAJbHZkczFfZ2F0ZQkJMjA2CiAJbHZkczJfZ2F0ZQkJMjA3CisJZXNhaV9haGIJCTIwOAogCiBFeGFtcGxlczoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2lteDZzeC1jbG9jay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svaW14NnN4LWNsb2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM2MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2lteDZzeC1jbG9jay50eHQKQEAgLTAsMCArMSwxMyBAQAorKiBDbG9jayBiaW5kaW5ncyBmb3IgRnJlZXNjYWxlIGkuTVg2IFNvbG9YCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IFNob3VsZCBiZSAiZnNsLGlteDZzeC1jY20iCistIHJlZzogQWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQKKy0gI2Nsb2NrLWNlbGxzOiBTaG91bGQgYmUgPDE+CistIGNsb2NrczogbGlzdCBvZiBjbG9jayBzcGVjaWZpZXJzLCBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIGVhY2ggcmVxdWlyZWQKKyAgZW50cnkgaW4gY2xvY2stbmFtZXMKKy0gY2xvY2stbmFtZXM6IHNob3VsZCBpbmNsdWRlIGVudHJpZXMgImNraWwiLCAib3NjIiwgImlwcF9kaTAiIGFuZCAiaXBwX2RpMSIKKworVGhlIGNsb2NrIGNvbnN1bWVyIHNob3VsZCBzcGVjaWZ5IHRoZSBkZXNpcmVkIGNsb2NrIGJ5IGhhdmluZyB0aGUgY2xvY2sKK0lEIGluIGl0cyAiY2xvY2tzIiBwaGFuZGxlIGNlbGwuICBTZWUgaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9pbXg2c3gtY2xvY2suaAorZm9yIHRoZSBmdWxsIGxpc3Qgb2YgaS5NWDYgU29sb1ggY2xvY2sgSURzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3JlbmVzYXMsY3BnLW1zdHAtY2xvY2tzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9yZW5lc2FzLGNwZy1tc3RwLWNsb2Nrcy50eHQKaW5kZXggMDJhMjVkOS4uNmMzYzA4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3JlbmVzYXMsY3BnLW1zdHAtY2xvY2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svcmVuZXNhcyxjcGctbXN0cC1jbG9ja3MudHh0CkBAIC0xMCw2ICsxMCw3IEBACiBSZXF1aXJlZCBQcm9wZXJ0aWVzOgogCiAgIC0gY29tcGF0aWJsZTogTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgIC0gInJlbmVzYXMscjdzNzIxMDAtbXN0cC1jbG9ja3MiIGZvciBSN1M3MjEwMCAoUlopIE1TVFAgZ2F0ZSBjbG9ja3MKICAgICAtICJyZW5lc2FzLHI4YTc3OTAtbXN0cC1jbG9ja3MiIGZvciBSOEE3NzkwIChSLUNhciBIMikgTVNUUCBnYXRlIGNsb2NrcwogICAgIC0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIgZm9yIFI4QTc3OTEgKFItQ2FyIE0yKSBNU1RQIGdhdGUgY2xvY2tzCiAgICAgLSAicmVuZXNhcyxjcGctbXN0cC1jbG9jayIgZm9yIGdlbmVyaWMgTVNUUCBnYXRlIGNsb2NrcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3NhbXN1bmcsczNjMjQxMC1jbG9jay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc2Ftc3VuZyxzM2MyNDEwLWNsb2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjI1MDVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3NhbXN1bmcsczNjMjQxMC1jbG9jay50eHQKQEAgLTAsMCArMSw1MCBAQAorKiBTYW1zdW5nIFMzQzI0MTAgQ2xvY2sgQ29udHJvbGxlcgorCitUaGUgUzNDMjQxMCBjbG9jayBjb250cm9sbGVyIGdlbmVyYXRlcyBhbmQgc3VwcGxpZXMgY2xvY2sgdG8gdmFyaW91cyBjb250cm9sbGVycword2l0aGluIHRoZSBTb0MuIFRoZSBjbG9jayBiaW5kaW5nIGRlc2NyaWJlZCBoZXJlIGlzIGFwcGxpY2FibGUgdG8gdGhlIHMzYzI0MTAsCitzM2MyNDQwIGFuZCBzM2MyNDQyIFNvQ3MgaW4gdGhlIHMzYzI0eCBmYW1pbHkuCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nLgorICAtICJzYW1zdW5nLHMzYzI0MTAtY2xvY2siIC0gY29udHJvbGxlciBjb21wYXRpYmxlIHdpdGggUzNDMjQxMCBTb0MuCisgIC0gInNhbXN1bmcsczNjMjQ0MC1jbG9jayIgLSBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCBTM0MyNDQwIFNvQy4KKyAgLSAic2Ftc3VuZyxzM2MyNDQyLWNsb2NrIiAtIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIFMzQzI0NDIgU29DLgorLSByZWc6IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbGxlciBhbmQgbGVuZ3RoIG9mIG1lbW9yeSBtYXBwZWQKKyAgcmVnaW9uLgorLSAjY2xvY2stY2VsbHM6IHNob3VsZCBiZSAxLgorCitFYWNoIGNsb2NrIGlzIGFzc2lnbmVkIGFuIGlkZW50aWZpZXIgYW5kIGNsaWVudCBub2RlcyBjYW4gdXNlIHRoaXMgaWRlbnRpZmllcgordG8gc3BlY2lmeSB0aGUgY2xvY2sgd2hpY2ggdGhleSBjb25zdW1lLiBTb21lIG9mIHRoZSBjbG9ja3MgYXJlIGF2YWlsYWJsZSBvbmx5CitvbiBhIHBhcnRpY3VsYXIgU29DLgorCitBbGwgYXZhaWxhYmxlIGNsb2NrcyBhcmUgZGVmaW5lZCBhcyBwcmVwcm9jZXNzb3IgbWFjcm9zIGluCitkdC1iaW5kaW5ncy9jbG9jay9zM2MyNDEwLmggaGVhZGVyIGFuZCBjYW4gYmUgdXNlZCBpbiBkZXZpY2UKK3RyZWUgc291cmNlcy4KKworRXh0ZXJuYWwgY2xvY2tzOgorCitUaGUgeHRpIGNsb2NrIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSBwbGxzIGlzIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBTb0MuIEl0IGlzCitleHBlY3RlZCB0aGF0IGlzIGFyZSBkZWZpbmVkIHVzaW5nIHN0YW5kYXJkIGNsb2NrIGJpbmRpbmdzIHdpdGggYQorY2xvY2stb3V0cHV0LW5hbWVzIHZhbHVlIG9mICJ4dGkiLgorCitFeGFtcGxlOiBDbG9jayBjb250cm9sbGVyIG5vZGU6CisKKwljbG9ja3M6IGNsb2NrLWNvbnRyb2xsZXJANGMwMDAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQxMC1jbG9jayI7CisJCXJlZyA9IDwweDRjMDAwMDAwIDB4MjA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworRXhhbXBsZTogVUFSVCBjb250cm9sbGVyIG5vZGUgdGhhdCBjb25zdW1lcyB0aGUgY2xvY2sgZ2VuZXJhdGVkIGJ5IHRoZSBjbG9jaworICBjb250cm9sbGVyIChyZWZlciB0byB0aGUgc3RhbmRhcmQgY2xvY2sgYmluZGluZ3MgZm9yIGluZm9ybWF0aW9uIGFib3V0CisgICJjbG9ja3MiIGFuZCAiY2xvY2stbmFtZXMiIHByb3BlcnRpZXMpOgorCisJc2VyaWFsQDUwMDA0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtdWFydCI7CisJCXJlZyA9IDwweDUwMDA0MDAwIDB4NDAwMD47CisJCWludGVycnVwdHMgPSA8MSAyMyAzIDQ+LCA8MSAyMyA0IDQ+OworCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQyIjsKKwkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19VQVJUMD4sIDwmY2xvY2tzIFBDTEtfVUFSVDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc2Ftc3VuZyxzM2MyNDEyLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zYW1zdW5nLHMzYzI0MTItY2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDMwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc2Ftc3VuZyxzM2MyNDEyLWNsb2NrLnR4dApAQCAtMCwwICsxLDUwIEBACisqIFNhbXN1bmcgUzNDMjQxMiBDbG9jayBDb250cm9sbGVyCisKK1RoZSBTM0MyNDEyIGNsb2NrIGNvbnRyb2xsZXIgZ2VuZXJhdGVzIGFuZCBzdXBwbGllcyBjbG9jayB0byB2YXJpb3VzIGNvbnRyb2xsZXJzCit3aXRoaW4gdGhlIFNvQy4gVGhlIGNsb2NrIGJpbmRpbmcgZGVzY3JpYmVkIGhlcmUgaXMgYXBwbGljYWJsZSB0byB0aGUgczNjMjQxMgorYW5kIHMzYzI0MTMgU29DcyBpbiB0aGUgczNjMjR4IGZhbWlseS4KKworUmVxdWlyZWQgUHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgInNhbXN1bmcsczNjMjQxMi1jbG9jayIKKy0gcmVnOiBwaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2xsZXIgYW5kIGxlbmd0aCBvZiBtZW1vcnkgbWFwcGVkCisgIHJlZ2lvbi4KKy0gI2Nsb2NrLWNlbGxzOiBzaG91bGQgYmUgMS4KKworRWFjaCBjbG9jayBpcyBhc3NpZ25lZCBhbiBpZGVudGlmaWVyIGFuZCBjbGllbnQgbm9kZXMgY2FuIHVzZSB0aGlzIGlkZW50aWZpZXIKK3RvIHNwZWNpZnkgdGhlIGNsb2NrIHdoaWNoIHRoZXkgY29uc3VtZS4gU29tZSBvZiB0aGUgY2xvY2tzIGFyZSBhdmFpbGFibGUgb25seQorb24gYSBwYXJ0aWN1bGFyIFNvQy4KKworQWxsIGF2YWlsYWJsZSBjbG9ja3MgYXJlIGRlZmluZWQgYXMgcHJlcHJvY2Vzc29yIG1hY3JvcyBpbgorZHQtYmluZGluZ3MvY2xvY2svczNjMjQxMi5oIGhlYWRlciBhbmQgY2FuIGJlIHVzZWQgaW4gZGV2aWNlCit0cmVlIHNvdXJjZXMuCisKK0V4dGVybmFsIGNsb2NrczoKKworVGhlcmUgYXJlIHNldmVyYWwgY2xvY2tzIHRoYXQgYXJlIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBTb0MuIEl0IGlzIGV4cGVjdGVkCit0aGF0IHRoZXkgYXJlIGRlZmluZWQgdXNpbmcgc3RhbmRhcmQgY2xvY2sgYmluZGluZ3Mgd2l0aCBmb2xsb3dpbmcKK2Nsb2NrLW91dHB1dC1uYW1lczoKKyAtICJ4dGkiIC0gY3J5c3RhbCBpbnB1dCAtIHJlcXVpcmVkLAorIC0gImV4dCIgLSBleHRlcm5hbCBjbG9jayBzb3VyY2UgLSBvcHRpb25hbCwKKworRXhhbXBsZTogQ2xvY2sgY29udHJvbGxlciBub2RlOgorCisJY2xvY2tzOiBjbG9jay1jb250cm9sbGVyQDRjMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0MTItY2xvY2siOworCQlyZWcgPSA8MHg0YzAwMDAwMCAweDIwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKK0V4YW1wbGU6IFVBUlQgY29udHJvbGxlciBub2RlIHRoYXQgY29uc3VtZXMgdGhlIGNsb2NrIGdlbmVyYXRlZCBieSB0aGUgY2xvY2sKKyAgY29udHJvbGxlciAocmVmZXIgdG8gdGhlIHN0YW5kYXJkIGNsb2NrIGJpbmRpbmdzIGZvciBpbmZvcm1hdGlvbiBhYm91dAorICAiY2xvY2tzIiBhbmQgImNsb2NrLW5hbWVzIiBwcm9wZXJ0aWVzKToKKworCXNlcmlhbEA1MDAwNDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDEyLXVhcnQiOworCQlyZWcgPSA8MHg1MDAwNDAwMCAweDQwMDA+OworCQlpbnRlcnJ1cHRzID0gPDEgMjMgMyA0PiwgPDEgMjMgNCA0PjsKKwkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMiIsICJjbGtfdWFydF9iYXVkMyI7CisJCWNsb2NrcyA9IDwmY2xvY2tzIFBDTEtfVUFSVDA+LCA8JmNsb2NrcyBQQ0xLX1VBUlQwPiwKKwkJCSA8JmNsb2NrcyBTQ0xLX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc2Ftc3VuZyxzM2MyNDQzLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9zYW1zdW5nLHMzYzI0NDMtY2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2N2JiMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svc2Ftc3VuZyxzM2MyNDQzLWNsb2NrLnR4dApAQCAtMCwwICsxLDU2IEBACisqIFNhbXN1bmcgUzNDMjQ0MyBDbG9jayBDb250cm9sbGVyCisKK1RoZSBTM0MyNDQzIGNsb2NrIGNvbnRyb2xsZXIgZ2VuZXJhdGVzIGFuZCBzdXBwbGllcyBjbG9jayB0byB2YXJpb3VzIGNvbnRyb2xsZXJzCit3aXRoaW4gdGhlIFNvQy4gVGhlIGNsb2NrIGJpbmRpbmcgZGVzY3JpYmVkIGhlcmUgaXMgYXBwbGljYWJsZSB0byBhbGwgU29DcyBpbgordGhlIHMzYzI0eCBmYW1pbHkgc3RhcnRpbmcgd2l0aCB0aGUgczNjMjQ0My4KKworUmVxdWlyZWQgUHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcuCisgIC0gInNhbXN1bmcsczNjMjQxNi1jbG9jayIgLSBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCBTM0MyNDE2IFNvQy4KKyAgLSAic2Ftc3VuZyxzM2MyNDQzLWNsb2NrIiAtIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIFMzQzI0NDMgU29DLgorICAtICJzYW1zdW5nLHMzYzI0NTAtY2xvY2siIC0gY29udHJvbGxlciBjb21wYXRpYmxlIHdpdGggUzNDMjQ1MCBTb0MuCistIHJlZzogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sbGVyIGFuZCBsZW5ndGggb2YgbWVtb3J5IG1hcHBlZAorICByZWdpb24uCistICNjbG9jay1jZWxsczogc2hvdWxkIGJlIDEuCisKK0VhY2ggY2xvY2sgaXMgYXNzaWduZWQgYW4gaWRlbnRpZmllciBhbmQgY2xpZW50IG5vZGVzIGNhbiB1c2UgdGhpcyBpZGVudGlmaWVyCit0byBzcGVjaWZ5IHRoZSBjbG9jayB3aGljaCB0aGV5IGNvbnN1bWUuIFNvbWUgb2YgdGhlIGNsb2NrcyBhcmUgYXZhaWxhYmxlIG9ubHkKK29uIGEgcGFydGljdWxhciBTb0MuCisKK0FsbCBhdmFpbGFibGUgY2xvY2tzIGFyZSBkZWZpbmVkIGFzIHByZXByb2Nlc3NvciBtYWNyb3MgaW4KK2R0LWJpbmRpbmdzL2Nsb2NrL3MzYzI0NDMuaCBoZWFkZXIgYW5kIGNhbiBiZSB1c2VkIGluIGRldmljZQordHJlZSBzb3VyY2VzLgorCitFeHRlcm5hbCBjbG9ja3M6CisKK1RoZXJlIGFyZSBzZXZlcmFsIGNsb2NrcyB0aGF0IGFyZSBnZW5lcmF0ZWQgb3V0c2lkZSB0aGUgU29DLiBJdCBpcyBleHBlY3RlZAordGhhdCB0aGV5IGFyZSBkZWZpbmVkIHVzaW5nIHN0YW5kYXJkIGNsb2NrIGJpbmRpbmdzIHdpdGggZm9sbG93aW5nCitjbG9jay1vdXRwdXQtbmFtZXM6CisgLSAieHRpIiAtIGNyeXN0YWwgaW5wdXQgLSByZXF1aXJlZCwKKyAtICJleHQiIC0gZXh0ZXJuYWwgY2xvY2sgc291cmNlIC0gb3B0aW9uYWwsCisgLSAiZXh0X2kycyIgLSBleHRlcm5hbCBJMlMgY2xvY2sgLSBvcHRpb25hbCwKKyAtICJleHRfdWFydCIgLSBleHRlcm5hbCB1YXJ0IGNsb2NrIC0gb3B0aW9uYWwsCisKK0V4YW1wbGU6IENsb2NrIGNvbnRyb2xsZXIgbm9kZToKKworCWNsb2NrczogY2xvY2stY29udHJvbGxlckA0YzAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDE2LWNsb2NrIjsKKwkJcmVnID0gPDB4NGMwMDAwMDAgMHg0MD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCitFeGFtcGxlOiBVQVJUIGNvbnRyb2xsZXIgbm9kZSB0aGF0IGNvbnN1bWVzIHRoZSBjbG9jayBnZW5lcmF0ZWQgYnkgdGhlIGNsb2NrCisgIGNvbnRyb2xsZXIgKHJlZmVyIHRvIHRoZSBzdGFuZGFyZCBjbG9jayBiaW5kaW5ncyBmb3IgaW5mb3JtYXRpb24gYWJvdXQKKyAgImNsb2NrcyIgYW5kICJjbG9jay1uYW1lcyIgcHJvcGVydGllcyk6CisKKwlzZXJpYWxANTAwMDQwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC11YXJ0IjsKKwkJcmVnID0gPDB4NTAwMDQwMDAgMHg0MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxIDIzIDMgND4sIDwxIDIzIDQgND47CisJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDIiLAorCQkJCSJjbGtfdWFydF9iYXVkMyI7CisJCWNsb2NrcyA9IDwmY2xvY2tzIFBDTEtfVUFSVDA+LCA8JmNsb2NrcyBQQ0xLX1VBUlQwPiwKKwkJCQk8JmNsb2NrcyBTQ0xLX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svdGkta2V5c3RvbmUtcGxsY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svdGkta2V5c3RvbmUtcGxsY3RybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2YTgxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay90aS1rZXlzdG9uZS1wbGxjdHJsLnR4dApAQCAtMCwwICsxLDIwIEBACisqIERldmljZSB0cmVlIGJpbmRpbmdzIGZvciBUZXhhcyBJbnN0cnVtZW50cyBrZXlzdG9uZSBwbGwgY29udHJvbGxlcgorCitUaGUgbWFpbiBwbGwgY29udHJvbGxlciB1c2VkIHRvIGRyaXZlIHRoZUM2NnggQ29yZVBhY3MsIHRoZSBzd2l0Y2ggZmFicmljLAorYW5kIGEgbWFqb3JpdHkgb2YgdGhlIHBlcmlwaGVyYWwgY2xvY2tzIChhbGwgYnV0IHRoZSBBUk0gQ29yZVBhY3MsIEREUjMgYW5kCit0aGUgTkVUQ1AgbW9kdWxlcykgcmVxdWlyZXMgYSBQTEwgQ29udHJvbGxlciB0byBtYW5hZ2UgdGhlIHZhcmlvdXMgY2xvY2sKK2RpdmlzaW9ucywgZ2F0aW5nLCBhbmQgc3luY2hyb25pemF0aW9uLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCistIGNvbXBhdGlibGU6CQkidGksa2V5c3RvbmUtcGxsY3RybCIsICJzeXNjb24iCisKKy0gcmVnOgkJCWNvbnRhaW5zIG9mZnNldC9sZW5ndGggdmFsdWUgZm9yIHBsbCBjb250cm9sbGVyCisJCQlyZWdpc3RlcnMgc3BhY2UuCisKK0V4YW1wbGU6CisKK3BsbGN0cmw6IHBsbC1jb250cm9sbGVyQDB4MDIzMTAwMDAgeworCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcGxsY3RybCIsICJzeXNjb24iOworCXJlZyA9IDwweDAyMzEwMDAwIDB4MjAwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL2RtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL2RtYS50eHQKaW5kZXggOGY1MDRlNi4uODIxMDQyNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS9kbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEvZG1hLnR4dApAQCAtMTQsNyArMTQsNyBAQAogCiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogLSBkbWEtY2hhbm5lbHM6IAlOdW1iZXIgb2YgRE1BIGNoYW5uZWxzIHN1cHBvcnRlZCBieSB0aGUgY29udHJvbGxlci4KLS0gZG1hLXJlcXVlc3RzOiAJTnVtYmVyIG9mIERNQSByZXF1ZXN0cyBzaWduYWxzIHN1cHBvcnRlZCBieSB0aGUKKy0gZG1hLXJlcXVlc3RzOiAJTnVtYmVyIG9mIERNQSByZXF1ZXN0IHNpZ25hbHMgc3VwcG9ydGVkIGJ5IHRoZQogCQkJY29udHJvbGxlci4KIAogRXhhbXBsZToKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJCSAgI2RtYS1jZWxscyBwcm9wZXJ0eSBpbiB0aGUgbm9kZSByZWZlcmVuY2VkIGJ5IHBoYW5kbGUKIAkJCSAgY29udGFpbmluZyBETUEgY29udHJvbGxlciBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gVGhpcwogCQkJICB0eXBpY2FsbHkgY29udGFpbnMgYSBETUEgcmVxdWVzdCBsaW5lIG51bWJlciBvciBhCi0JCQkgIGNoYW5uZWwgbnVtYmVyLCBidXQgY2FuIGNvbnRhaW4gYW55IGRhdGEgdGhhdCBpcyB1c2VkCisJCQkgIGNoYW5uZWwgbnVtYmVyLCBidXQgY2FuIGNvbnRhaW4gYW55IGRhdGEgdGhhdCBpcwogCQkJICByZXF1aXJlZCBmb3IgY29uZmlndXJpbmcgYSBjaGFubmVsLgogLSBkbWEtbmFtZXM6IAkJQ29udGFpbnMgb25lIGlkZW50aWZpZXIgc3RyaW5nIGZvciBlYWNoIERNQSBzcGVjaWZpZXIgaW4KIAkJCXRoZSBkbWFzIHByb3BlcnR5LiBUaGUgc3BlY2lmaWMgc3RyaW5ncyB0aGF0IGNhbiBiZSB1c2VkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL2ZzbC1pbXgtc2RtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL2ZzbC1pbXgtc2RtYS50eHQKaW5kZXggZWU5YmU5OS4uZTU3NzE5NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS9mc2wtaW14LXNkbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEvZnNsLWlteC1zZG1hLnR4dApAQCAtOCw3ICs4LDcgQEAKICAgICAgICJmc2wsaW14NTEtc2RtYSIKICAgICAgICJmc2wsaW14NTMtc2RtYSIKICAgICAgICJmc2wsaW14NnEtc2RtYSIKLSAgVGhlIC10byB2YXJpYW50cyBzaG91bGQgYmUgcHJlZmVycmVkIHNpbmNlIHRoZXkgYWxsb3cgdG8gZGV0ZXJtbmluZSB0aGUKKyAgVGhlIC10byB2YXJpYW50cyBzaG91bGQgYmUgcHJlZmVycmVkIHNpbmNlIHRoZXkgYWxsb3cgdG8gZGV0ZXJtaW5lIHRoZQogICBjb3JyZWN0IFJPTSBzY3JpcHQgYWRkcmVzc2VzIG5lZWRlZCBmb3IgdGhlIGRyaXZlciB0byB3b3JrIHdpdGhvdXQgYWRkaXRpb25hbAogICBmaXJtd2FyZS4KIC0gcmVnIDogU2hvdWxkIGNvbnRhaW4gU0RNQSByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS90aS1lZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEvdGktZWRtYS50eHQKaW5kZXggNjhmZjIxMy4uNWJhNTI1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS90aS1lZG1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3RpLWVkbWEudHh0CkBAIC0yLDExICsyLDggQEAKIAogUmVxdWlyZWQgcHJvcGVydGllczoKIC0gY29tcGF0aWJsZSA6ICJ0aSxlZG1hMyIKLS0gdGksZWRtYS1yZWdpb25zOiBOdW1iZXIgb2YgcmVnaW9ucwotLSB0aSxlZG1hLXNsb3RzOiBOdW1iZXIgb2Ygc2xvdHMKIC0gI2RtYS1jZWxsczogU2hvdWxkIGJlIHNldCB0byA8MT4KICAgICAgICAgICAgICAgQ2xpZW50cyBzaG91bGQgdXNlIGEgc2luZ2xlIGNoYW5uZWwgbnVtYmVyIHBlciBETUEgcmVxdWVzdC4KLS0gZG1hLWNoYW5uZWxzOiBTcGVjaWZ5IHRvdGFsIERNQSBjaGFubmVscyBwZXIgQ0MKIC0gcmVnOiBNZW1vcnkgbWFwIGZvciBhY2Nlc3NpbmcgbW9kdWxlCiAtIGludGVycnVwdC1wYXJlbnQ6IEludGVycnVwdCBjb250cm9sbGVyIHRoZSBpbnRlcnJ1cHQgaXMgcm91dGVkIHRocm91Z2gKIC0gaW50ZXJydXB0czogRXhhY3RseSAzIGludGVycnVwdHMgbmVlZCB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIG9yZGVyOgpAQCAtMTcsNiArMTQsMTMgQEAKIC0gdGksaHdtb2RzOiBOYW1lIG9mIHRoZSBod21vZHMgYXNzb2NpYXRlZCB0byB0aGUgRURNQQogLSB0aSxlZG1hLXhiYXItZXZlbnQtbWFwOiBDcm9zc2JhciBldmVudCB0byBjaGFubmVsIG1hcAogCitEZXByZWNhdGVkIHByb3BlcnRpZXM6CitMaXN0ZWQgaGVyZSBpbiBjYXNlIG9uZSB3YW50cyB0byBib290IGFuIG9sZCBrZXJuZWwgd2l0aCBuZXcgRFRCLiBUaGVzZQorcHJvcGVydGllcyBtaWdodCBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBuZXcgRFRTIGZpbGVzLgorLSB0aSxlZG1hLXJlZ2lvbnM6IE51bWJlciBvZiByZWdpb25zCistIHRpLGVkbWEtc2xvdHM6IE51bWJlciBvZiBzbG90cworLSBkbWEtY2hhbm5lbHM6IFNwZWNpZnkgdG90YWwgRE1BIGNoYW5uZWxzIHBlciBDQworCiBFeGFtcGxlOgogCiBlZG1hOiBlZG1hQDQ5MDAwMDAwIHsKQEAgLTI2LDkgKzMwLDYgQEAKIAljb21wYXRpYmxlID0gInRpLGVkbWEzIjsKIAl0aSxod21vZHMgPSAidHBjYyIsICJ0cHRjMCIsICJ0cHRjMSIsICJ0cHRjMiI7CiAJI2RtYS1jZWxscyA9IDwxPjsKLQlkbWEtY2hhbm5lbHMgPSA8NjQ+OwotCXRpLGVkbWEtcmVnaW9ucyA9IDw0PjsKLQl0aSxlZG1hLXNsb3RzID0gPDI1Nj47CiAJdGksZWRtYS14YmFyLWV2ZW50LW1hcCA9IC9iaXRzLyAxNiA8MSAxMgogCQkJCQkgICAgMiAxMz47CiB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby1tY3AyM3MwOC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLW1jcDIzczA4LnR4dAppbmRleCAzZGRjN2NjLi5jMzA2YTJkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby1tY3AyM3MwOC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby1tY3AyM3MwOC50eHQKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgSU8gOC0xNSBhcmUgYmFuayAyLiBUaGVzZSBjaGlwcyBoYXZlIHR3byBkaWZmZXJlbnQgaW50ZXJydXB0IG91dHB1dHM6CiAgICAgICAgIE9uZSBmb3IgYmFuayAxIGFuZCBhbm90aGVyIGZvciBiYW5rIDIuIElmIGlycS1taXJyb3IgaXMgc2V0LCBib3RoCiAgICAgICAgIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZCByZWdhcmRsZXNzIG9mIHRoZSBiYW5rIHRoYXQgYW4gaW5wdXQgY2hhbmdlCi0gICAgICAgIG9jY3VyZWQgb24uIElmIGl0IGlzIG5vdCBzZXQsIHRoZSBpbnRlcnJ1cHQgYXJlIG9ubHkgZ2VuZXJhdGVkIGZvciB0aGUKKyAgICAgICAgb2NjdXJyZWQgb24uIElmIGl0IGlzIG5vdCBzZXQsIHRoZSBpbnRlcnJ1cHQgYXJlIG9ubHkgZ2VuZXJhdGVkIGZvciB0aGUKICAgICAgICAgYmFuayB0aGV5IGJlbG9uZyB0by4KICAgICAgICAgT24gZGV2aWNlcyB3aXRoIG9ubHkgb25lIGludGVycnVwdCBvdXRwdXQgdGhpcyBwcm9wZXJ0eSBpcyB1c2VsZXNzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9yZW5lc2FzLGdwaW8tcmNhci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9yZW5lc2FzLGdwaW8tcmNhci50eHQKaW5kZXggZjYxY2VmNy4uOTQxYTI2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vcmVuZXNhcyxncGlvLXJjYXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL3JlbmVzYXMsZ3Bpby1yY2FyLnR4dApAQCAtMjEsNiArMjEsMTIgQEAKICAgICBHUElPX0FDVElWRV9ISUdIIGFuZCBHUElPX0FDVElWRV9MT1cgZmxhZ3MgYXJlIHN1cHBvcnRlZC4KICAgLSBncGlvLXJhbmdlczogUmFuZ2Ugb2YgcGlucyBtYW5hZ2VkIGJ5IHRoZSBHUElPIGNvbnRyb2xsZXIuCiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CisKKyAgLSBjbG9ja3M6IE11c3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25hbCBjbG9jay4gIFRoZSBwcm9wZXJ0eSBpcworICAgIG1hbmRhdG9yeSBpZiB0aGUgaGFyZHdhcmUgaW1wbGVtZW50cyBhIGNvbnRyb2xsYWJsZSBmdW5jdGlvbmFsIGNsb2NrIGZvcgorICAgIHRoZSBHUElPIGluc3RhbmNlLgorCiBQbGVhc2UgcmVmZXIgdG8gZ3Bpby50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGRldGFpbHMgb2YgZ3Bpby1yYW5nZXMgcHJvcGVydHkKIGFuZCB0aGUgY29tbW9uIEdQSU8gYmluZGluZ3MgdXNlZCBieSBjbGllbnQgZGV2aWNlcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2hzaS9jbGllbnQtZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaHNpL2NsaWVudC1kZXZpY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDRjOWEzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2hzaS9jbGllbnQtZGV2aWNlcy50eHQKQEAgLTAsMCArMSw0NCBAQAorRWFjaCBIU0kgcG9ydCBpcyBzdXBwb3NlZCB0byBoYXZlIG9uZSBjaGlsZCBub2RlLCB3aGljaAorc3ltYm9scyB0aGUgcmVtb3RlIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIEhTSSBwb3J0LiBUaGUKK2ZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBzdGFuZGFyZGl6ZWQgZm9yIEhTSSBjbGllbnRzOgorCitSZXF1aXJlZCBIU0kgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzOgorCistIGhzaS1jaGFubmVsLWlkczoJQSBsaXN0IG9mIGNoYW5uZWwgaWRzCisKKy0gaHNpLXJ4LW1vZGU6CQlSZWNlaXZlciBCaXQgdHJhbnNtaXNzaW9uIG1vZGUgKCJzdHJlYW0iIG9yICJmcmFtZSIpCistIGhzaS10eC1tb2RlOgkJVHJhbnNtaXR0ZXIgQml0IHRyYW5zbWlzc2lvbiBtb2RlICgic3RyZWFtIiBvciAiZnJhbWUiKQorLSBoc2ktbW9kZToJCU1heSBiZSB1c2VkIGluc3RlYWQgaHNpLXJ4LW1vZGUgYW5kIGhzaS10eC1tb2RlIGlmCisJCQl0aGUgdHJhbnNtaXNzaW9uIG1vZGUgaXMgdGhlIHNhbWUgZm9yIHJlY2VpdmVyIGFuZAorCQkJdHJhbnNtaXR0ZXIKKy0gaHNpLXNwZWVkLWticHM6CU1heCBiaXQgdHJhbnNtaXNzaW9uIHNwZWVkIGluIGtiaXQvcworLSBoc2ktZmxvdzoJCVJYIGZsb3cgdHlwZSAoInN5bmNocm9uaXplZCIgb3IgInBpcGVsaW5lIikKKy0gaHNpLWFyYi1tb2RlOgkJQXJiaXRyYXRpb24gbW9kZSBmb3IgVFggZnJhbWUgKCJyb3VuZC1yb2JpbiIsICJwcmlvcml0eSIpCisKK09wdGlvbmFsIEhTSSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXM6CisKKy0gaHNpLWNoYW5uZWwtbmFtZXM6CUEgbGlzdCB3aXRoIG9uZSBuYW1lIHBlciBjaGFubmVsIHNwZWNpZmllZCBpbiB0aGUKKwkJCWhzaS1jaGFubmVsLWlkcyBwcm9wZXJ0eQorCisKK0RldmljZSBUcmVlIG5vZGUgZXhhbXBsZSBmb3IgYW4gSFNJIGNsaWVudDoKKworaHNpLWNvbnRyb2xsZXIgeworCWhzaS1wb3J0IHsKKwkJbW9kZW06IGhzaS1jbGllbnQgeworCQkJY29tcGF0aWJsZSA9ICJub2tpYSxuOTAwLW1vZGVtIjsKKworCQkJaHNpLWNoYW5uZWwtaWRzID0gPDA+LCA8MT4sIDwyPiwgPDM+OworCQkJaHNpLWNoYW5uZWwtbmFtZXMgPSAibWNzYWFiLWNvbnRyb2wiLAorCQkJCQkgICAgInNwZWVjaC1jb250cm9sIiwKKwkJCQkJICAgICJzcGVlY2gtZGF0YSIsCisJCQkJCSAgICAibWNzYWFiLWRhdGEiOworCQkJaHNpLXNwZWVkLWticHMgPSA8NTUwMDA+OworCQkJaHNpLW1vZGUgPSAiZnJhbWUiOworCQkJaHNpLWZsb3cgPSAic3luY2hyb25pemVkIjsKKwkJCWhzaS1hcmItbW9kZSA9ICJyb3VuZC1yb2JpbiI7CisKKwkJCS8qIG1vcmUgY2xpZW50IHNwZWNpZmljIHByb3BlcnRpZXMgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9oc2kvbm9raWEtbW9kZW0udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2hzaS9ub2tpYS1tb2RlbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5Nzk3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9oc2kvbm9raWEtbW9kZW0udHh0CkBAIC0wLDAgKzEsNTcgQEAKK05va2lhIG1vZGVtIGNsaWVudCBiaW5kaW5ncworCitUaGUgTm9raWEgbW9kZW0gSFNJIGNsaWVudCBmb2xsb3dzIHRoZSBjb21tb24gSFNJIGNsaWVudCBiaW5kaW5nCithbmQgaW5oZXJpdHMgYWxsIHJlcXVpcmVkIHByb3BlcnRpZXMuIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbAorcHJvcGVydGllcyBhcmUgbmVlZGVkIGJ5IHRoZSBOb2tpYSBtb2RlbSBIU0kgY2xpZW50OgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOgkJU2hvdWxkIGJlIG9uZSBvZgorICAgICAgIm5va2lhLG45MDAtbW9kZW0iCistIGhzaS1jaGFubmVsLW5hbWVzOglTaG91bGQgY29udGFpbiB0aGUgZm9sbG93aW5nIHN0cmluZ3MKKyAgICAgICJtY3NhYWItY29udHJvbCIKKyAgICAgICJzcGVlY2gtY29udHJvbCIKKyAgICAgICJzcGVlY2gtZGF0YSIKKyAgICAgICJtY3NhYWItZGF0YSIKKy0gZ3Bpb3M6CQlTaG91bGQgcHJvdmlkZSBhIEdQSU8gaGFuZGxlciBmb3IgZWFjaCBHUElPIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpby1uYW1lcworLSBncGlvLW5hbWVzOgkJU2hvdWxkIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBzdHJpbmdzCisgICAgICAiY210X2FwZXNscHgiCisgICAgICAiY210X3JzdF9ycSIKKyAgICAgICJjbXRfZW4iCisgICAgICAiY210X3JzdCIKKyAgICAgICJjbXRfYnNpIgorLSBpbnRlcnJ1cHRzOgkJU2hvdWxkIGJlIElSUSBoYW5kbGUgZm9yIG1vZGVtJ3MgcmVzZXQgaW5kaWNhdGlvbgorCitFeGFtcGxlOgorCismc3NpX3BvcnQgeworCW1vZGVtOiBoc2ktY2xpZW50IHsKKwkJY29tcGF0aWJsZSA9ICJub2tpYSxuOTAwLW1vZGVtIjsKKworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8Jm1vZGVtX3BpbnM+OworCisJCWhzaS1jaGFubmVsLWlkcyA9IDwwPiwgPDE+LCA8Mj4sIDwzPjsKKwkJaHNpLWNoYW5uZWwtbmFtZXMgPSAibWNzYWFiLWNvbnRyb2wiLAorCQkJCSAgICAic3BlZWNoLWNvbnRyb2wiLAorCQkJCSAgICAic3BlZWNoLWRhdGEiLAorCQkJCSAgICAibWNzYWFiLWRhdGEiOworCQloc2ktc3BlZWQta2JwcyA9IDw1NTAwMD47CisJCWhzaS1tb2RlID0gImZyYW1lIjsKKwkJaHNpLWZsb3cgPSAic3luY2hyb25pemVkIjsKKwkJaHNpLWFyYi1tb2RlID0gInJvdW5kLXJvYmluIjsKKworCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlvMyA4IElSUV9UWVBFX0VER0VfRkFMTElORz47IC8qIDcyICovCisKKwkJZ3Bpb3MgPSA8JmdwaW8zICA2IEdQSU9fQUNUSVZFX0hJR0g+LCAvKiA3MCAqLworCQkJPCZncGlvMyAgOSBHUElPX0FDVElWRV9ISUdIPiwgLyogNzMgKi8KKwkJCTwmZ3BpbzMgMTAgR1BJT19BQ1RJVkVfSElHSD4sIC8qIDc0ICovCisJCQk8JmdwaW8zIDExIEdQSU9fQUNUSVZFX0hJR0g+LCAvKiA3NSAqLworCQkJPCZncGlvNSAyOSBHUElPX0FDVElWRV9ISUdIPjsgLyogMTU3ICovCisJCWdwaW8tbmFtZXMgPSAiY210X2FwZXNscHgiLAorCQkJICAgICAiY210X3JzdF9ycSIsCisJCQkgICAgICJjbXRfZW4iLAorCQkJICAgICAiY210X3JzdCIsCisJCQkgICAgICJjbXRfYnNpIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9oc2kvb21hcC1zc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2hzaS9vbWFwLXNzaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2NjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9oc2kvb21hcC1zc2kudHh0CkBAIC0wLDAgKzEsOTcgQEAKK09NQVAgU1NJIGNvbnRyb2xsZXIgYmluZGluZ3MKKworT01BUCBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIChTU0kpIGNvbnRyb2xsZXIgaW1wbGVtZW50cyBhIGxlZ2FjeQordmFyaWFudCBvZiBNSVBJJ3MgSGlnaCBTcGVlZCBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIChIU0kpLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOgkJU2hvdWxkIGluY2x1ZGUgInRpLG9tYXAzLXNzaSIuCistIHJlZy1uYW1lczoJCUNvbnRhaW5zIHRoZSB2YWx1ZXMgInN5cyIgYW5kICJnZGQiIChpbiB0aGlzIG9yZGVyKS4KKy0gcmVnOgkJCUNvbnRhaW5zIGEgbWF0Y2hpbmcgcmVnaXN0ZXIgc3BlY2lmaWVyIGZvciBlYWNoIGVudHJ5CisJCQlpbiByZWctbmFtZXMuCistIGludGVycnVwdC1uYW1lczoJQ29udGFpbnMgdGhlIHZhbHVlICJnZGRfbXB1Ii4KKy0gaW50ZXJydXB0czogCQlDb250YWlucyBtYXRjaGluZyBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZm9yIGVhY2ggZW50cnkKKwkJCWluIGludGVycnVwdC1uYW1lcy4KKy0gcmFuZ2VzOgkJUmVwcmVzZW50cyB0aGUgYnVzIGFkZHJlc3MgbWFwcGluZyBiZXR3ZWVuIHRoZSBtYWluCisJCQljb250cm9sbGVyIG5vZGUgYW5kIHRoZSBjaGlsZCBub2RlcyBiZWxvdy4KKy0gY2xvY2stbmFtZXM6CQlNdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBlbnRyaWVzOgorICAic3NpX3Nzcl9mY2siOiBUaGUgT01BUCBjbG9jayBvZiB0aGF0IG5hbWUKKyAgInNzaV9zc3RfZmNrIjogVGhlIE9NQVAgY2xvY2sgb2YgdGhhdCBuYW1lCisgICJzc2lfaWNrIjogVGhlIE9NQVAgY2xvY2sgb2YgdGhhdCBuYW1lCistIGNsb2NrczoJCUNvbnRhaW5zIGEgbWF0Y2hpbmcgY2xvY2sgc3BlY2lmaWVyIGZvciBlYWNoIGVudHJ5IGluCisJCQljbG9jay1uYW1lcy4KKy0gI2FkZHJlc3MtY2VsbHM6CVNob3VsZCBiZSBzZXQgdG8gPDE+CistICNzaXplLWNlbGxzOgkJU2hvdWxkIGJlIHNldCB0byA8MT4KKworRWFjaCBwb3J0IGlzIHJlcHJlc2VudGVkIGFzIGEgc3ViLW5vZGUgb2YgdGhlIHRpLG9tYXAzLXNzaSBkZXZpY2UuCisKK1JlcXVpcmVkIFBvcnQgc3ViLW5vZGUgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZToJCVNob3VsZCBiZSBzZXQgdG8gdGhlIGZvbGxvd2luZyB2YWx1ZQorCQkJdGksb21hcDMtc3NpLXBvcnQgKGFwcGxpY2FibGUgdG8gT01BUDM0eHggZGV2aWNlcykKKy0gcmVnLW5hbWVzOgkJQ29udGFpbnMgdGhlIHZhbHVlcyAidHgiIGFuZCAicngiIChpbiB0aGlzIG9yZGVyKS4KKy0gcmVnOgkJCUNvbnRhaW5zIGEgbWF0Y2hpbmcgcmVnaXN0ZXIgc3BlY2lmaWVyIGZvciBlYWNoIGVudHJ5CisJCQlpbiByZWctbmFtZXMuCistIGludGVycnVwdC1wYXJlbnQJU2hvdWxkIGJlIGEgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyCistIGludGVycnVwdHM6CQlTaG91bGQgY29udGFpbiBpbnRlcnJ1cHQgc3BlY2lmaWVycyBmb3IgbXB1IGludGVycnVwdHMKKwkJCTAgYW5kIDEgKGluIHRoaXMgb3JkZXIpLgorLSB0aSxzc2ktY2F3YWtlLWdwaW86CURlZmluZXMgd2hpY2ggR1BJTyBwaW4gaXMgdXNlZCB0byBzaWduaWZ5IENBV0FLRQorCQkJZXZlbnRzIGZvciB0aGUgcG9ydC4gVGhpcyBpcyBhbiBvcHRpb25hbCBib2FyZC1zcGVjaWZpYworCQkJcHJvcGVydHkuIElmIGl0J3MgbWlzc2luZyB0aGUgcG9ydCB3aWxsIG5vdCBiZQorCQkJZW5hYmxlZC4KKworRXhhbXBsZSBmb3IgTm9raWEgTjkwMDoKKworc3NpLWNvbnRyb2xsZXJANDgwNTgwMDAgeworCWNvbXBhdGlibGUgPSAidGksb21hcDMtc3NpIjsKKworCS8qIG5lZWRlZCB1bnRpbCBod21vZCBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgKi8KKwl0aSxod21vZHMgPSAic3NpIjsKKworCXJlZyA9IDwweDQ4MDU4MDAwIDB4MTAwMD4sCisJICAgICAgPDB4NDgwNTkwMDAgMHgxMDAwPjsKKwlyZWctbmFtZXMgPSAic3lzIiwKKwkJICAgICJnZGQiOworCisJaW50ZXJydXB0cyA9IDw1NT47CisJaW50ZXJydXB0LW5hbWVzID0gImdkZF9tcHUiOworCisJY2xvY2tzID0gPCZzc2lfc3NyX2Zjaz4sCisJCSA8JnNzaV9zc3RfZmNrPiwKKwkJIDwmc3NpX2ljaz47CisJY2xvY2stbmFtZXMgPSAic3NpX3Nzcl9mY2siLAorCQkgICAgICAic3NpX3NzdF9mY2siLAorCQkgICAgICAic3NpX2ljayI7CisKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlyYW5nZXM7CisKKwlzc2ktcG9ydEA0ODA1YTAwMCB7CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtc3NpLXBvcnQiOworCisJCXJlZyA9IDwweDQ4MDVhMDAwIDB4ODAwPiwKKwkJICAgICAgPDB4NDgwNWE4MDAgMHg4MDA+OworCQlyZWctbmFtZXMgPSAidHgiLAorCQkJICAgICJyeCI7CisKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisJCWludGVycnVwdHMgPSA8Njc+LAorCQkJICAgICA8Njg+OworCisJCXRpLHNzaS1jYXdha2UtZ3BpbyA9IDwmZ3BpbzUgMjMgR1BJT19BQ1RJVkVfSElHSD47IC8qIDE1MSAqLworCX0KKworCXNzaS1wb3J0QDQ4MDVhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1zc2ktcG9ydCI7CisKKwkJcmVnID0gPDB4NDgwNWIwMDAgMHg4MDA+LAorCQkgICAgICA8MHg0ODA1YjgwMCAweDgwMD47CisJCXJlZy1uYW1lcyA9ICJ0eCIsCisJCQkgICAgInJ4IjsKKworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKwkJaW50ZXJydXB0cyA9IDw2OT4sCisJCQkgICAgIDw3MD47CisKKwkJc3RhdHVzID0gImRpc2FibGVkIjsgLyogc2Vjb25kIHBvcnQgaXMgbm90IHVzZWQgb24gTjkwMCAqLworCX0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9paW8vcHJveGltaXR5L2FzMzkzNS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaWlvL3Byb3hpbWl0eS9hczM5MzUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjNkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaWlvL3Byb3hpbWl0eS9hczM5MzUudHh0CkBAIC0wLDAgKzEsMjggQEAKK0F1c3RyaWFuIE1pY3Jvc3lzdGVtcyBBUzM5MzUgRnJhbmtsaW4gbGlnaHRuaW5nIHNlbnNvciBkZXZpY2UgZHJpdmVyCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisJLSBjb21wYXRpYmxlOiBtdXN0IGJlICJhbXMsYXMzOTM1IgorCS0gcmVnOiBTUEkgY2hpcCBzZWxlY3QgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisJLSBzcGktY3BoYTogU1BJIE1vZGUgMS4gUmVmZXIgdG8gc3BpL3NwaS1idXMudHh0IGZvciBnZW5lcmljIFNQSQorCXNsYXZlIG5vZGUgYmluZGluZ3MuCisJLSBpbnRlcnJ1cHQtcGFyZW50IDogc2hvdWxkIGJlIHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKwktIGludGVycnVwdHMgOiB0aGUgc29sZSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IHRoZSBkZXZpY2UKKworCVJlZmVyIHRvIGludGVycnVwdC1jb250cm9sbGVyL2ludGVycnVwdHMudHh0IGZvciBnZW5lcmljCisJaW50ZXJydXB0IGNsaWVudCBub2RlIGJpbmRpbmdzLgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCS0gYW1zLHR1bmluZy1jYXBhY2l0b3ItcGY6IENhbGlicmF0aW9uIHR1bmluZyBjYXBhY2l0b3Igc3RlcHBpbmcKKwkgIHZhbHVlIDAgLSAxMjBwRi4gVGhpcyB3aWxsIHJlcXVpcmUgdXNpbmcgdGhlIGNhbGlicmF0aW9uIGRhdGEgZnJvbQorCSAgdGhlIG1hbnVmYWN0dXJlci4KKworRXhhbXBsZToKKworYXMzOTM1QDAgeworCWNvbXBhdGlibGUgPSAiYW1zLGFzMzkzNSI7CisJcmVnID0gPDA+OworCXNwaS1jcGhhOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8xPjsKKwlpbnRlcnJ1cHRzID0gPDE2IDE+OworCWFtcyx0dW5pbmctY2FwYWNpdG9yLXBmID0gPDgwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL212ZWJ1LWRldmJ1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL212ZWJ1LWRldmJ1cy50eHQKaW5kZXggNjUzYzkwYy4uMWVlM2JjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lbW9yeS1jb250cm9sbGVycy9tdmVidS1kZXZidXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZW1vcnktY29udHJvbGxlcnMvbXZlYnUtZGV2YnVzLnR4dApAQCAtNiwxMCArNiwxMSBAQAogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogCi0gLSBjb21wYXRpYmxlOiAgICAgICAgICBDdXJyZW50bHkgb25seSBBcm1hZGEgMzcwL1hQIFNvQyBhcmUgc3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGlzIGNvbXBhdGlibGUgc3RyaW5nOgorIC0gY29tcGF0aWJsZTogICAgICAgICAgQXJtYWRhIDM3MC9YUCBTb0MgYXJlIHN1cHBvcnRlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYXJ2ZWxsLG12ZWJ1LWRldmJ1cyIgY29tcGF0aWJsZSBzdHJpbmcuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcnZlbGwsbXZlYnUtZGV2YnVzCisgICAgICAgICAgICAgICAgICAgICAgICBPcmlvbjV4IFNvQyBhcmUgc3VwcG9ydGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIm1hcnZlbGwsb3Jpb24tZGV2YnVzIiBjb21wYXRpYmxlIHN0cmluZy4KIAogIC0gcmVnOiAgICAgICAgICAgICAgICAgQSByZXNvdXJjZSBzcGVjaWZpZXIgZm9yIHRoZSByZWdpc3RlciBzcGFjZS4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBhIGNoaXAgc2VsZWN0IHdpdGhpbgpAQCAtMjIsNyArMjMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIgdmFsdWVzIGZvciBlYWNoIGNoaXAtc2VsZWN0IGxpbmUgaW4gdXNlOgogICAgICAgICAgICAgICAgICAgICAgICAgMCA8cGh5c2ljYWwgYWRkcmVzcyBvZiBtYXBwaW5nPiA8c2l6ZT4KIAotTWFuZGF0b3J5IHRpbWluZyBwcm9wZXJ0aWVzIGZvciBjaGlsZCBub2RlczoKK09wdGlvbmFsIHByb3BlcnRpZXM6CisKKyAtIGRldmJ1cyxrZWVwLWNvbmZpZyAgIFRoaXMgcHJvcGVydHkgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBrZWVwCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgdGltaW5nIHBhcmFtZXRlcnMgc2V0IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlci4gSXQgbWFrZXMgYWxsIHRoZSB0aW1pbmcgcHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGJlbG93IHVudXNlZC4KKworVGltaW5nIHByb3BlcnRpZXMgZm9yIGNoaWxkIG5vZGVzOgogCiBSZWFkIHBhcmFtZXRlcnM6CiAKQEAgLTMwLDIxICszOCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgdGhlIEFEIGJ1cyBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIGRldmljZSByZWFkLgogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwcmV2ZW50cyBjb250ZW50aW9ucyBvbiB0aGUgRGV2aWNlIEJ1cyBhZnRlciBhIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlIGZyb20gYSBzbG93IGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSwgZXhjZXB0IGlmIGRldmJ1cyxrZWVwLWNvbmZpZyBpcyB1c2VkLgogCi0gLSBkZXZidXMsYnVzLXdpZHRoOiAgICBEZWZpbmVzIHRoZSBidXMgd2lkdGggKGUuZy4gPDE2PikKKyAtIGRldmJ1cyxidXMtd2lkdGg6ICAgIERlZmluZXMgdGhlIGJ1cyB3aWR0aCwgaW4gYml0cyAoZS5nLiA8MTY+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSwgZXhjZXB0IGlmIGRldmJ1cyxrZWVwLWNvbmZpZyBpcyB1c2VkLgogCiAgLSBkZXZidXMsYmFkci1za2V3LXBzOiBEZWZpbmVzIHRoZSB0aW1lIGRlbGF5IGZyb20gZnJvbSBBWzI6MF0gdG9nZ2xlLAogICAgICAgICAgICAgICAgICAgICAgICAgdG8gcmVhZCBkYXRhIHNhbXBsZS4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25vdXMgcGlwZWxpbmVkIGRldmljZXMsIHdoZXJlIHRoZSBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRlcyB0aGUgcmVhZCBkYXRhIGJ5IG9uZSBvciB0d28gY3ljbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5LCBleGNlcHQgaWYgZGV2YnVzLGtlZXAtY29uZmlnIGlzIHVzZWQuCiAKICAtIGRldmJ1cyxhY2MtZmlyc3QtcHM6IERlZmluZXMgdGhlIHRpbWUgZGVsYXkgZnJvbSB0aGUgbmVnYXRpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgIEFMRVswXSB0byB0aGUgY3ljbGUgdGhhdCB0aGUgZmlyc3QgcmVhZCBkYXRhIGlzIHNhbXBsZWQKICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBjb250cm9sbGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5LCBleGNlcHQgaWYgZGV2YnVzLGtlZXAtY29uZmlnIGlzIHVzZWQuCiAKICAtIGRldmJ1cyxhY2MtbmV4dC1wczogIERlZmluZXMgdGhlIHRpbWUgZGVsYXkgYmV0d2VlbiB0aGUgY3ljbGUgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyBkYXRhIE4gYW5kIHRoZSBjeWNsZSB0aGF0IHNhbXBsZXMgZGF0YSBOKzEKICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBidXJzdCBhY2Nlc3NlcykuCisgICAgICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnksIGV4Y2VwdCBpZiBkZXZidXMsa2VlcC1jb25maWcgaXMgdXNlZC4KIAogIC0gZGV2YnVzLHJkLXNldHVwLXBzOiAgRGVmaW5lcyB0aGUgdGltZSBkZWxheSBiZXR3ZWVuIERFVl9DU24gYXNzZXJ0aW9uIHRvCiAJCQlERVZfT0VuIGFzc2VydGlvbi4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpLApAQCAtNTIsNiArNjUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGFmZmVjdCBvbiA8YWNjLWZpcnN0LXBzPiBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIChubyBhZmZlY3Qgb24gZmlyc3QgZGF0YSBzYW1wbGUpLiBTZXQgPHJkLXNldHVwLXBzPgogICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSB2YWx1ZSBzbWFsbGVyIHRoYW4gPGFjYy1maXJzdC1wcz4uCisgICAgICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnkgZm9yICJtYXJ2ZWxsLG12ZWJ1LWRldmJ1cyIgY29tcGF0aWJsZSBzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaWYgZGV2YnVzLGtlZXAtY29uZmlnIGlzIHVzZWQuCiAKICAtIGRldmJ1cyxyZC1ob2xkLXBzOiAgIERlZmluZXMgdGhlIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBkYXRhIHNhbXBsZSB0byB0aGUKIAkJCWRlLWFzc2VydGlvbiBvZiBERVZfQ1NuLiBJZiBzZXQgdG8gMCAoZGVmYXVsdCksCkBAIC02MiwxNiArNzcsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgZGF0YSBzYW1wbGVkLiBBbHNvIHRoaXMgcGFyYW1ldGVyIGhhcyBubwogICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0IG9uIDx0dXJuLW9mZi1wcz4gcGFyYW1ldGVyLgogICAgICAgICAgICAgICAgICAgICAgICAgU2V0IDxyZC1ob2xkLXBzPiB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiA8dHVybi1vZmYtcHM+LgorICAgICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5IGZvciAibWFydmVsbCxtdmVidS1kZXZidXMiIGNvbXBhdGlibGUgc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGlmIGRldmJ1cyxrZWVwLWNvbmZpZyBpcyB1c2VkLgogCiBXcml0ZSBwYXJhbWV0ZXJzOgogCiAgLSBkZXZidXMsYWxlLXdyLXBzOiAgICBEZWZpbmVzIHRoZSB0aW1lIGRlbGF5IGZyb20gdGhlIEFMRVswXSBuZWdhdGlvbiBjeWNsZQogCQkJdG8gdGhlIERFVl9XRW4gYXNzZXJ0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5LgogCiAgLSBkZXZidXMsd3ItbG93LXBzOiAgICBEZWZpbmVzIHRoZSB0aW1lIGR1cmluZyB3aGljaCBERVZfV0VuIGlzIGFjdGl2ZS4KICAgICAgICAgICAgICAgICAgICAgICAgIEFbMjowXSBhbmQgRGF0YSBhcmUga2VwdCB2YWxpZCBhcyBsb25nIGFzIERFVl9XRW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFjdGl2ZS4gVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2V0dXAgdGltZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBhbmQgZGF0YSB0byBERVZfV0VuIHJpc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnkuCiAKICAtIGRldmJ1cyx3ci1oaWdoLXBzOiAgIERlZmluZXMgdGhlIHRpbWUgZHVyaW5nIHdoaWNoIERFVl9XRW4gaXMga2VwdAogICAgICAgICAgICAgICAgICAgICAgICAgaW5hY3RpdmUgKGhpZ2gpIGJldHdlZW4gZGF0YSBiZWF0cyBvZiBhIGJ1cnN0IHdyaXRlLgpAQCAtNzksMTAgKzk4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8d3ItaGlnaC1wcz4gLSA8dGljaz4gcHMuCiAJCQlUaGlzIHBhcmFtZXRlciBkZWZpbmVzIHRoZSBob2xkIHRpbWUgb2YgYWRkcmVzcyBhbmQKIAkJCWRhdGEgYWZ0ZXIgREVWX1dFbiByaXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5LgogCiAgLSBkZXZidXMsc3luYy1lbmFibGU6IFN5bmNocm9ub3VzIGRldmljZSBlbmFibGUuCiAgICAgICAgICAgICAgICAgICAgICAgIDE6IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgMDogRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5IGZvciAibWFydmVsbCxtdmVidS1kZXZidXMiIGNvbXBhdGlibGUgc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaWYgZGV2YnVzLGtlZXAtY29uZmlnIGlzIHVzZWQuCiAKIEFuIGV4YW1wbGUgZm9yIGFuIEFybWFkYSBYUCBHUCBib2FyZCwgd2l0aCBhIDE2IE1pQiBOT1IgZGV2aWNlIGFzIGNoaWxkCiBpcyBzaG93ZWQgYmVsb3cuIE5vdGUgdGhhdCB0aGUgRGV2aWNlIEJ1cyBkcml2ZXIgaXMgaW4gY2hhcmdlIG9mIGFsbG9jYXRpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvYmNtNTkweHgudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9iY201OTB4eC50eHQKaW5kZXggMWZlMzBlMi4uYmU1MWExNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9iY201OTB4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9iY201OTB4eC50eHQKQEAgLTE5LDcgKzE5LDkgQEAKICAgVGhlIHZhbGlkIHJlZ3VsYXRvciBub2RlIG5hbWVzIGZvciBCQ001OTA1NiBhcmU6CiAgIAlyZmxkbywgY2FtbGRvMSwgY2FtbGRvMiwgc2ltbGRvMSwgc2ltbGRvMiwgc2RsZG8sIHNkeGxkbywKIAltbWNsZG8xLCBtbWNsZG8yLCBhdWRsZG8sIG1pY2xkbywgdXNibGRvLCB2aWJsZG8sCi0JY3NyLCBpb3NyMSwgaW9zcjIsIG1zciwgc2RzcjEsIHNkc3IyLCB2c3IKKwljc3IsIGlvc3IxLCBpb3NyMiwgbXNyLCBzZHNyMSwgc2RzcjIsIHZzciwKKwlncGxkbzEsIGdwbGRvMiwgZ3BsZG8zLCBncGxkbzQsIGdwbGRvNSwgZ3BsZG82LAorCXZidXMKIAogRXhhbXBsZToKIAlwbXU6IGJjbTU5MDU2QDggewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9zMm1wczExLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvczJtcHMxMS50eHQKaW5kZXggODAyZTgzOS4uZDgxYmEzMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9zMm1wczExLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3MybXBzMTEudHh0CkBAIC01Niw2ICs1NiwyMCBAQAogR3JvdXBpbmcgb2YgQlVDS3Mgc2hhcmluZyByYW1wIHJhdGUgc2V0dGluZyBpcyBhcyBmb2xsb3cgOiBCVUNLWzEsIDZdLAogQlVDS1szLCA0XSwgYW5kIEJVQ0tbNywgOCwgMTBdCiAKK09uIFMyTVBTMTQgdGhlIExETzEwLCBMRE8xMSBhbmQgTERPMTIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZXh0ZXJuYWwgY29udHJvbAorb3ZlciBHUElPLiBUbyB0dXJuIHRoaXMgZmVhdHVyZSBvbiB0aGlzIHByb3BlcnR5IG11c3QgYmUgYWRkZWQgdG8gdGhlIHJlZ3VsYXRvcgorc3ViLW5vZGU6CisJLSBzYW1zdW5nLGV4dC1jb250cm9sLWdwaW9zOiBHUElPIHNwZWNpZmllciBmb3Igb25lIEdQSU8KKwkJY29udHJvbGxpbmcgdGhpcyByZWd1bGF0b3IgKGVuYWJsZS9kaXNhYmxlKTsKK0V4YW1wbGU6CisJTERPMTIgeworCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0VNTUNfMi44ViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJc2Ftc3VuZyxleHQtY29udHJvbC1ncGlvcyA9IDwmZ3BrMCAyIDA+OworCX07CisKKwogVGhlIHJlZ3VsYXRvciBjb25zdHJhaW50cyBpbnNpZGUgdGhlIHJlZ3VsYXRvciBub2RlcyB1c2UgdGhlIHN0YW5kYXJkIHJlZ3VsYXRvcgogYmluZGluZ3Mgd2hpY2ggYXJlIGRvY3VtZW50ZWQgZWxzZXdoZXJlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWlzYy9hcm0tY2hhcmxjZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWlzYy9hcm0tY2hhcmxjZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4ZTJhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9taXNjL2FybS1jaGFybGNkLnR4dApAQCAtMCwwICsxLDE4IEBACitBUk0gVmVyc2F0aWxlIENoYXJhY3RlciBMQ0QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGJpbmRpbmcgZGVmaW5lcyB0aGUgY2hhcmFjdGVyIExDRCBpbnRlcmZhY2UgZm91bmQgb24gQVJNIFZlcnNhdGlsZSBBQgorYW5kIFBCIHJlZmVyZW5jZSBwbGF0Zm9ybXMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiAiYXJtLHZlcnNhdGlsZS1jbGNkIgorLSByZWcgOiBMb2NhdGlvbiBhbmQgc2l6ZSBvZiBjaGFyYWN0ZXIgTENEIHJlZ2lzdGVycworCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBpbnRlcnJ1cHRzIC0gc2luZ2xlIGludGVycnVwdCBmb3IgY2hhcmFjdGVyIExDRC4gVGhlIGNoYXJhY3RlciBMQ0QgY2FuCisgIG9wZXJhdGUgaW4gcG9sbGVkIG1vZGUgd2l0aG91dCBhbiBpbnRlcnJ1cHQuCisKK0V4YW1wbGU6CisJbGNkQDEwMDA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sdmVyc2F0aWxlLWxjZCI7CisJCXJlZyA9IDwweDEwMDA4MDAwIDB4MTAwMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvazMtZHctbXNoYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2szLWR3LW1zaGMudHh0CmluZGV4IGI4NjUzZWEuLmU1YmM0OWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvazMtZHctbXNoYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9rMy1kdy1tc2hjLnR4dApAQCAtMTIsNyArMTIsNyBAQAogUmVxdWlyZWQgUHJvcGVydGllczoKIAogKiBjb21wYXRpYmxlOiBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcuCi0gIC0gImhpc2lsaWNvbixoaTQ1MTEtZHctbXNoYyI6IGZvciBjb250cm9sbGVycyB3aXRoIGhpNDUxMSBzcGVjaWZpYyBleHRlbnRpb25zLgorICAtICJoaXNpbGljb24saGk0NTExLWR3LW1zaGMiOiBmb3IgY29udHJvbGxlcnMgd2l0aCBoaTQ1MTEgc3BlY2lmaWMgZXh0ZW5zaW9ucy4KIAogRXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWNpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jaS50eHQKaW5kZXggMmI1ODRjYS4uMDM3OTZjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tY2kudHh0CkBAIC00LDEyICs0LDU4IEBACiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIE11bHRpTWVkaWEgYW5kIFNEIGNhcmRzIGFsaWtlLgogCiBUaGlzIGZpbGUgZG9jdW1lbnRzIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGNvcmUgcHJvcGVydGllcyBkZXNjcmliZWQKLWJ5IG1tYy50eHQgYW5kIHRoZSBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIG1tY2kgZHJpdmVyLgorYnkgbW1jLnR4dCBhbmQgdGhlIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgbW1jaSBkcml2ZXIuIFVzaW5nICJzdCIgYXMKK3RoZSBwcmVmaXggZm9yIGEgcHJvcGVydHksIGluZGljYXRlcyBzdXBwb3J0IGJ5IHRoZSBTVCBNaWNybyB2YXJpYW50LgogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogLSBjb21wYXRpYmxlICAgICAgICAgICAgIDogY29udGFpbnMgImFybSxwbDE4eCIsICJhcm0scHJpbWVjZWxsIi4KLS0gYXJtLHByaW1lY2VsbC1wZXJpcGhpZCA6IGNvbnRhaW5zIHRoZSBQcmltZUNlbGwgUGVyaXBoZXJhbCBJRC4KKy0gdm1tYy1zdXBwbHkgICAgICAgICAgICA6IHBoYW5kbGUgdG8gdGhlIHJlZ3VsYXRvciBkZXZpY2UgdHJlZSBub2RlLCBtZW50aW9uZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBWQ0MvVkREIHN1cHBseSBpbiB0aGUgZU1NQy9TRCBzcGVjcy4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKLS0gbW1jLWNhcC1tbWMtaGlnaHNwZWVkICA6IGluZGljYXRlcyB3aGV0aGVyIE1NQyBpcyBoaWdoIHNwZWVkIGNhcGFibGUKLS0gbW1jLWNhcC1zZC1oaWdoc3BlZWQgICA6IGluZGljYXRlcyB3aGV0aGVyIFNEIGlzIGhpZ2ggc3BlZWQgY2FwYWJsZQorLSBhcm0scHJpbWVjZWxsLXBlcmlwaGlkIDogY29udGFpbnMgdGhlIFByaW1lQ2VsbCBQZXJpcGhlcmFsIElELCBpdCBvdmVycmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJRCBwcm92aWRlZCBieSB0aGUgSFcKKy0gdnFtbWMtc3VwcGx5ICAgICAgICAgICA6IHBoYW5kbGUgdG8gdGhlIHJlZ3VsYXRvciBkZXZpY2UgdHJlZSBub2RlLCBtZW50aW9uZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBWQ0NRL1ZERF9JTyBzdXBwbHkgaW4gdGhlIGVNTUMvU0Qgc3BlY3MuCistIHN0LHNpZy1kaXItZGF0MCAgICAgICAgOiBidXMgc2lnbmFsIGRpcmVjdGlvbiBwaW4gdXNlZCBmb3IgREFUWzBdLgorLSBzdCxzaWctZGlyLWRhdDIgICAgICAgIDogYnVzIHNpZ25hbCBkaXJlY3Rpb24gcGluIHVzZWQgZm9yIERBVFsyXS4KKy0gc3Qsc2lnLWRpci1kYXQzMSAgICAgICA6IGJ1cyBzaWduYWwgZGlyZWN0aW9uIHBpbiB1c2VkIGZvciBEQVRbM10gYW5kIERBVFsxXS4KKy0gc3Qsc2lnLWRpci1kYXQ3NCAgICAgICA6IGJ1cyBzaWduYWwgZGlyZWN0aW9uIHBpbiB1c2VkIGZvciBEQVRbNF0gdG8gREFUWzddLgorLSBzdCxzaWctZGlyLWNtZCAgICAgICAgIDogY21kIHNpZ25hbCBkaXJlY3Rpb24gcGluIHVzZWQgZm9yIENNRC4KKy0gc3Qsc2lnLXBpbi1mYmNsayAgICAgICA6IGZlZWRiYWNrIGNsb2NrIHNpZ25hbCBwaW4gdXNlZC4KKworRGVwcmVjYXRlZCBwcm9wZXJ0aWVzOgorLSBtbWMtY2FwLW1tYy1oaWdoc3BlZWQgIDogaW5kaWNhdGVzIHdoZXRoZXIgTU1DIGlzIGhpZ2ggc3BlZWQgY2FwYWJsZS4KKy0gbW1jLWNhcC1zZC1oaWdoc3BlZWQgICA6IGluZGljYXRlcyB3aGV0aGVyIFNEIGlzIGhpZ2ggc3BlZWQgY2FwYWJsZS4KKworRXhhbXBsZToKKworc2RpMF9wZXIxQDgwMTI2MDAwIHsKKwljb21wYXRpYmxlID0gImFybSxwbDE4eCIsICJhcm0scHJpbWVjZWxsIjsKKwlyZWcgPSA8MHg4MDEyNjAwMCAweDEwMDA+OworCWludGVycnVwdHMgPSA8MCA2MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCWRtYXMgPSA8JmRtYSAyOSAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLworCSAgICAgICA8JmRtYSAyOSAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLworCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisKKwljbG9ja3MgPSA8JnByY2Nfa2NsayAxIDU+LCA8JnByY2NfcGNsayAxIDU+OworCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisKKwltYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJYnVzLXdpZHRoID0gPDQ+OworCWNhcC1zZC1oaWdoc3BlZWQ7CisJY2FwLW1tYy1oaWdoc3BlZWQ7CisJY2QtZ3Bpb3MgID0gPCZncGlvMiAzMSAweDQ+OyAvLyA5NQorCXN0LHNpZy1kaXItZGF0MDsKKwlzdCxzaWctZGlyLWRhdDI7CisJc3Qsc2lnLWRpci1jbWQ7CisJc3Qsc2lnLXBpbi1mYmNsazsKKworCXZtbWMtc3VwcGx5ID0gPCZhYjg1MDBfbGRvX2F1eDNfcmVnPjsKKwl2cW1tYy1zdXBwbHkgPSA8JnZtbWNpPjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZzZGkwX2RlZmF1bHRfbW9kZT47CisJcGluY3RybC0xID0gPCZzZGkwX3NsZWVwX21vZGU+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2Ftc3VuZy1zZGhjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NhbXN1bmctc2RoY2kudHh0CmluZGV4IDMyOGU5OTAuLjQyZTBhOWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NhbXN1bmctc2RoY2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2Ftc3VuZy1zZGhjaS50eHQKQEAgLTMsNyArMyw3IEBACiBTYW1zdW5nJ3MgU0RIQ0kgY29udHJvbGxlciBpcyB1c2VkIGFzIGEgY29ubmVjdGl2aXR5IGludGVyZmFjZSB3aXRoIGV4dGVybmFsCiBNTUMsIFNEIGFuZCBlTU1DIHN0b3JhZ2UgbWVkaXVtcy4gVGhpcyBmaWxlIGRvY3VtZW50cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQogY29yZSBtbWMgcHJvcGVydGllcyBkZXNjcmliZWQgYnkgbW1jLnR4dCBhbmQgdGhlIHByb3BlcnRpZXMgdXNlZCBieSB0aGUKLVNhbXN1bmcgaW1wbG1lbnRhdGlvbiBvZiB0aGUgU0RIQ0kgY29udHJvbGxlci4KK1NhbXN1bmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNESENJIGNvbnRyb2xsZXIuCiAKIFJlcXVpcmVkIFNvQyBTcGVjaWZpYyBQcm9wZXJ0aWVzOgogLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1uYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1uYW5kLnR4dAppbmRleCA1ZTFmMzFiLi5lYjA1MjU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2dwbWMtbmFuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9ncG1jLW5hbmQudHh0CkBAIC00Myw3ICs0Myw3IEBACiAJCUVMTSBoYXJkd2FyZSBlbmdpbmVzIHNob3VsZCBzcGVjaWZ5IHRoaXMgZGV2aWNlIG5vZGUgaW4gLmR0c2kKIAkJVXNpbmcgRUxNIGZvciBFQ0MgZXJyb3IgY29ycmVjdGlvbiBmcmVlcyBzb21lIENQVSBjeWNsZXMuCiAKLUZvciBpbmxpbmUgcGFydGl0b24gdGFibGUgcGFyc2luZyAob3B0aW9uYWwpOgorRm9yIGlubGluZSBwYXJ0aXRpb24gdGFibGUgcGFyc2luZyAob3B0aW9uYWwpOgogCiAgLSAjYWRkcmVzcy1jZWxsczogc2hvdWxkIGJlIHNldCB0byAxCiAgLSAjc2l6ZS1jZWxsczogc2hvdWxkIGJlIHNldCB0byAxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2dwbWMtbm9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1ub3IudHh0CmluZGV4IDQyMGIzYWIuLjQ4MjhjMTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1ub3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1ub3IudHh0CkBAIC0zMCw3ICszMCw3IEBACiAtIGdwbWMsWFhYCQlBZGRpdGlvbmFsIEdQTUMgdGltaW5ncyBhbmQgc2V0dGluZ3MgcGFyYW1ldGVycy4gU2VlCiAJCQlEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL3RpLWdwbWMudHh0CiAKLU9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIHBhcnRpdG9uIHRhYmxlIHBhcnNpbmc6CitPcHRpb25hbCBwcm9wZXJ0aWVzIGZvciBwYXJ0aXRpb24gdGFibGUgcGFyc2luZzoKIC0gI2FkZHJlc3MtY2VsbHM6IHNob3VsZCBiZSBzZXQgdG8gMQogLSAjc2l6ZS1jZWxsczogc2hvdWxkIGJlIHNldCB0byAxCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1vbmVuYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZ3BtYy1vbmVuYW5kLnR4dAppbmRleCBiNzUyOTQyLi41ZDhmYTUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2dwbWMtb25lbmFuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9ncG1jLW9uZW5hbmQudHh0CkBAIC0xNyw3ICsxNyw3IEBACiAKICAtIGRtYS1jaGFubmVsOgkJRE1BIENoYW5uZWwgaW5kZXgKIAotRm9yIGlubGluZSBwYXJ0aXRvbiB0YWJsZSBwYXJzaW5nIChvcHRpb25hbCk6CitGb3IgaW5saW5lIHBhcnRpdGlvbiB0YWJsZSBwYXJzaW5nIChvcHRpb25hbCk6CiAKICAtICNhZGRyZXNzLWNlbGxzOiBzaG91bGQgYmUgc2V0IHRvIDEKICAtICNzaXplLWNlbGxzOiBzaG91bGQgYmUgc2V0IHRvIDEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvaG9zdC1nZW5lcmljLXBjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2hvc3QtZ2VuZXJpYy1wY2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjA0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2hvc3QtZ2VuZXJpYy1wY2kudHh0CkBAIC0wLDAgKzEsMTAwIEBACisqIEdlbmVyaWMgUENJIGhvc3QgY29udHJvbGxlcgorCitGaXJtd2FyZS1pbml0aWFsaXNlZCBQQ0kgaG9zdCBjb250cm9sbGVycyBhbmQgUENJIGVtdWxhdGlvbnMsIHN1Y2ggYXMgdGhlCit2aXJ0aW8tcGNpIGltcGxlbWVudGF0aW9ucyBmb3VuZCBpbiBrdm10b29sIGFuZCBvdGhlciBwYXJhLXZpcnR1YWxpc2VkCitzeXN0ZW1zLCBkbyBub3QgcmVxdWlyZSBkcml2ZXIgc3VwcG9ydCBmb3IgY29tcGxleGl0aWVzIHN1Y2ggYXMgcmVndWxhdG9yCithbmQgY2xvY2sgbWFuYWdlbWVudC4gSW4gZmFjdCwgdGhlIGNvbnRyb2xsZXIgbWF5IG5vdCBldmVuIHJlcXVpcmUgdGhlCitjb25maWd1cmF0aW9uIG9mIGEgY29udHJvbCBpbnRlcmZhY2UgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGluc3RlYWQKK3ByZXNlbnRpbmcgYSBzZXQgb2YgZml4ZWQgd2luZG93cyBkZXNjcmliaW5nIGEgc3Vic2V0IG9mIElPLCBNZW1vcnkgYW5kCitDb25maWd1cmF0aW9uIFNwYWNlcy4KKworU3VjaCBhIGNvbnRyb2xsZXIgY2FuIGJlIGRlc2NyaWJlZCBwdXJlbHkgaW4gdGVybXMgb2YgdGhlIHN0YW5kYXJkaXplZCBkZXZpY2UKK3RyZWUgYmluZGluZ3MgY29tbXVuaWNhdGVkIGluIHBjaS50eHQ6CisKKworUHJvcGVydGllcyBvZiB0aGUgaG9zdCBjb250cm9sbGVyIG5vZGU6CisKKy0gY29tcGF0aWJsZSAgICAgOiBNdXN0IGJlICJwY2ktaG9zdC1jYW0tZ2VuZXJpYyIgb3IgInBjaS1ob3N0LWVjYW0tZ2VuZXJpYyIKKyAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGxheW91dCBvZiBjb25maWd1cmF0aW9uIHNwYWNlIChDQU0gdnMKKyAgICAgICAgICAgICAgICAgICBFQ0FNIHJlc3BlY3RpdmVseSkuCisKKy0gZGV2aWNlX3R5cGUgICAgOiBNdXN0IGJlICJwY2kiLgorCistIHJhbmdlcyAgICAgICAgIDogQXMgZGVzY3JpYmVkIGluIElFRUUgU3RkIDEyNzUtMTk5NCwgYnV0IG11c3QgcHJvdmlkZQorICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IGEgZGVmaW5pdGlvbiBvZiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeS4gT25lCisgICAgICAgICAgICAgICAgICAgb3IgYm90aCBvZiBwcmVmZXRjaGFibGUgTWVtb3J5IGFuZCBJTyBTcGFjZSBtYXkgYWxzbworICAgICAgICAgICAgICAgICAgIGJlIHByb3ZpZGVkLgorCistIGJ1cy1yYW5nZSAgICAgIDogT3B0aW9uYWwgcHJvcGVydHkgKGFsc28gZGVzY3JpYmVkIGluIElFRUUgU3RkIDEyNzUtMTk5NCkKKyAgICAgICAgICAgICAgICAgICB0byBpbmRpY2F0ZSB0aGUgcmFuZ2Ugb2YgYnVzIG51bWJlcnMgZm9yIHRoaXMgY29udHJvbGxlci4KKyAgICAgICAgICAgICAgICAgICBJZiBhYnNlbnQsIGRlZmF1bHRzIHRvIDwwIDI1NT4gKGkuZS4gYWxsIGJ1c2VzKS4KKworLSAjYWRkcmVzcy1jZWxscyA6IE11c3QgYmUgMy4KKworLSAjc2l6ZS1jZWxscyAgICA6IE11c3QgYmUgMi4KKworLSByZWcgICAgICAgICAgICA6IFRoZSBDb25maWd1cmF0aW9uIFNwYWNlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSwgYXMgYWNjZXNzZWQKKyAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBwYXJlbnQgYnVzLgorCisKK1Byb3BlcnRpZXMgb2YgdGhlIC9jaG9zZW4gbm9kZToKKworLSBsaW51eCxwY2ktcHJvYmUtb25seQorICAgICAgICAgICAgICAgICA6IE9wdGlvbmFsIHByb3BlcnR5IHdoaWNoIHRha2VzIGEgc2luZ2xlLWNlbGwgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICAgSWYgJzAnLCB0aGVuIExpbnV4IHdpbGwgYXNzaWduIGRldmljZXMgaW4gaXRzIHVzdWFsIG1hbm5lciwKKyAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgaXQgd2lsbCBub3QgdHJ5IHRvIGFzc2lnbiBkZXZpY2VzIGFuZCBpbnN0ZWFkIHVzZQorICAgICAgICAgICAgICAgICAgIHRoZW0gYXMgdGhleSBhcmUgY29uZmlndXJlZCBhbHJlYWR5LgorCitDb25maWd1cmF0aW9uIFNwYWNlIGlzIGFzc3VtZWQgdG8gYmUgbWVtb3J5LW1hcHBlZCAoYXMgb3Bwb3NlZCB0byBiZWluZworYWNjZXNzZWQgdmlhIGFuIGlvcG9ydCkgYW5kIGxhaWQgb3V0IHdpdGggYSBkaXJlY3QgY29ycmVzcG9uZGVuY2UgdG8gdGhlCitnZW9ncmFwaHkgb2YgYSBQQ0kgYnVzIGFkZHJlc3MgYnkgY29uY2F0ZW5hdGluZyB0aGUgdmFyaW91cyBjb21wb25lbnRzIHRvCitmb3JtIGFuIG9mZnNldC4KKworRm9yIENBTSwgdGhpcyAyNC1iaXQgb2Zmc2V0IGlzOgorCisgICAgICAgIGNmZ19vZmZzZXQoYnVzLCBkZXZpY2UsIGZ1bmN0aW9uLCByZWdpc3RlcikgPQorICAgICAgICAgICAgICAgICAgIGJ1cyA8PCAxNiB8IGRldmljZSA8PCAxMSB8IGZ1bmN0aW9uIDw8IDggfCByZWdpc3RlcgorCitXaGlsc3QgRUNBTSBleHRlbmRzIHRoaXMgYnkgNCBiaXRzIHRvIGFjY29tb2RhdGUgNGsgb2YgZnVuY3Rpb24gc3BhY2U6CisKKyAgICAgICAgY2ZnX29mZnNldChidXMsIGRldmljZSwgZnVuY3Rpb24sIHJlZ2lzdGVyKSA9CisgICAgICAgICAgICAgICAgICAgYnVzIDw8IDIwIHwgZGV2aWNlIDw8IDE1IHwgZnVuY3Rpb24gPDwgMTIgfCByZWdpc3RlcgorCitJbnRlcnJ1cHQgbWFwcGluZyBpcyBleGFjdGx5IGFzIGRlc2NyaWJlZCBpbiBgT3BlbiBGaXJtd2FyZSBSZWNvbW1lbmRlZAorUHJhY3RpY2U6IEludGVycnVwdCBNYXBwaW5nJyBhbmQgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCistICNpbnRlcnJ1cHQtY2VsbHMgICA6IE11c3QgYmUgMQorCistIGludGVycnVwdC1tYXAgICAgICA6IDxzZWUgYWZvcmVtZW50aW9uZWQgc3BlY2lmaWNhdGlvbj4KKworLSBpbnRlcnJ1cHQtbWFwLW1hc2sgOiA8c2VlIGFmb3JlbWVudGlvbmVkIHNwZWNpZmljYXRpb24+CisKKworRXhhbXBsZToKKworcGNpIHsKKyAgICBjb21wYXRpYmxlID0gInBjaS1ob3N0LWNhbS1nZW5lcmljIgorICAgIGRldmljZV90eXBlID0gInBjaSI7CisgICAgI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgICAgI3NpemUtY2VsbHMgPSA8Mj47CisgICAgYnVzLXJhbmdlID0gPDB4MCAweDE+OworCisgICAgLy8gQ1BVX1BIWVNJQ0FMKDIpICBTSVpFKDIpCisgICAgcmVnID0gPDB4MCAweDQwMDAwMDAwICAweDAgMHgxMDAwMDAwPjsKKworICAgIC8vIEJVU19BRERSRVNTKDMpICBDUFVfUEhZU0lDQUwoMikgIFNJWkUoMikKKyAgICByYW5nZXMgPSA8MHgwMTAwMDAwMCAweDAgMHgwMTAwMDAwMCAgMHgwIDB4MDEwMDAwMDAgIDB4MCAweDAwMDEwMDAwPiwKKyAgICAgICAgICAgICA8MHgwMjAwMDAwMCAweDAgMHg0MTAwMDAwMCAgMHgwIDB4NDEwMDAwMDAgIDB4MCAweDNmMDAwMDAwPjsKKworCisgICAgI2ludGVycnVwdC1jZWxscyA9IDwweDE+OworCisgICAgLy8gUENJX0RFVklDRSgzKSAgSU5UIygxKSAgQ09OVFJPTExFUihQSEFORExFKSAgQ09OVFJPTExFUl9EQVRBKDMpCisgICAgaW50ZXJydXB0LW1hcCA9IDwgIDB4MCAweDAgMHgwICAweDEgICZnaWMgIDB4MCAweDQgMHgxCisgICAgICAgICAgICAgICAgICAgICAweDgwMCAweDAgMHgwICAweDEgICZnaWMgIDB4MCAweDUgMHgxCisgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAweDAgMHgwICAweDEgICZnaWMgIDB4MCAweDYgMHgxCisgICAgICAgICAgICAgICAgICAgIDB4MTgwMCAweDAgMHgwICAweDEgICZnaWMgIDB4MCAweDcgMHgxPjsKKworICAgIC8vIFBDSV9ERVZJQ0UoMykgIElOVCMoMSkKKyAgICBpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgIDB4Nz47Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL3BjaS1yY2FyLWdlbjIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9wY2ktcmNhci1nZW4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGVmNWJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9wY2ktcmNhci1nZW4yLnR4dApAQCAtMCwwICsxLDY2IEBACitSZW5lc2FzIEFIQiB0byBQQ0kgYnJpZGdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGJyaWRnZSB1c2VkIGludGVybmFsbHkgdG8gY29ubmVjdCB0aGUgVVNCIGNvbnRyb2xsZXJzIHRvIHRoZQorQUhCLiBUaGVyZSBpcyBvbmUgYnJpZGdlIGluc3RhbmNlIHBlciBVU0IgcG9ydCBjb25uZWN0ZWQgdG8gdGhlIGludGVybmFsCitPSENJIGFuZCBFSENJIGNvbnRyb2xsZXJzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAicmVuZXNhcyxwY2ktcjhhNzc5MCIgZm9yIHRoZSBSOEE3NzkwIFNvQzsKKwkgICAgICAicmVuZXNhcyxwY2ktcjhhNzc5MSIgZm9yIHRoZSBSOEE3NzkxIFNvQy4KKy0gcmVnOglBIGxpc3Qgb2YgcGh5c2ljYWwgcmVnaW9ucyB0byBhY2Nlc3MgdGhlIGRldmljZTogdGhlIGZpcnN0IGlzCisJdGhlIG9wZXJhdGlvbmFsIHJlZ2lzdGVycyBmb3IgdGhlIE9IQ0kvRUhDSSBjb250cm9sbGVycyBhbmQgdGhlCisJc2Vjb25kIGlzIGZvciB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLgorLSBpbnRlcnJ1cHRzOiBpbnRlcnJ1cHQgZm9yIHRoZSBkZXZpY2UuCistIGNsb2NrczogVGhlIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGNsb2NrLgorLSBidXMtcmFuZ2U6IFRoZSBQQ0kgYnVzIG51bWJlciByYW5nZTsgYXMgdGhpcyBpcyBhIHNpbmdsZSBidXMsIHRoZSByYW5nZQorCSAgICAgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyB0aGUgc2FtZSB2YWx1ZSB0d2ljZS4KKy0gI2FkZHJlc3MtY2VsbHM6IG11c3QgYmUgMy4KKy0gI3NpemUtY2VsbHM6IG11c3QgYmUgMi4KKy0gI2ludGVycnVwdC1jZWxsczogbXVzdCBiZSAxLgorLSBpbnRlcnJ1cHQtbWFwOiBzdGFuZGFyZCBwcm9wZXJ0eSB1c2VkIHRvIGRlZmluZSB0aGUgbWFwcGluZyBvZiB0aGUgUENJCisgIGludGVycnVwdHMgdG8gdGhlIEdJQyBpbnRlcnJ1cHRzLgorLSBpbnRlcnJ1cHQtbWFwLW1hc2s6IHN0YW5kYXJkIHByb3BlcnR5IHRoYXQgaGVscHMgdG8gZGVmaW5lIHRoZSBpbnRlcnJ1cHQKKyAgbWFwcGluZy4KKworRXhhbXBsZSBTb0MgY29uZmlndXJhdGlvbjoKKworCXBjaTA6IHBjaUBlZTA5MDAwMCAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscGNpLXI4YTc3OTAiOworCQljbG9ja3MgPSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfRUhDST47CisJCXJlZyA9IDwweDAgMHhlZTA5MDAwMCAweDAgMHhjMDA+LAorCQkgICAgICA8MHgwIDB4ZWUwODAwMDAgMHgwIDB4MTEwMD47CisJCWludGVycnVwdHMgPSA8MCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZmYwMCAwIDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweDAwMDAgMCAwIDEgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDB4MDgwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMHgxMDAwIDAgMCAyICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJcGNpQDAsMSB7CisJCQlyZWcgPSA8MHg4MDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNicGh5IDAgMD47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKKworCQlwY2lAMCwyIHsKKwkJCXJlZyA9IDwweDEwMDAgMCAwIDAgMD47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcGh5cyA9IDwmdXNicGh5IDAgMD47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKKwl9OworCitFeGFtcGxlIGJvYXJkIHNldHVwOgorCismcGNpMCB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmdXNiMF9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvcmNhci1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9yY2FyLXBjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkM2I5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvcmNhci1wY2kudHh0CkBAIC0wLDAgKzEsNDcgQEAKKyogUmVuZXNhcyBSQ2FyIFBDSWUgaW50ZXJmYWNlCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IHNob3VsZCBjb250YWluIG9uZSBvZiB0aGUgZm9sbG93aW5nCisJInJlbmVzYXMscGNpZS1yOGE3Nzc5IiwgInJlbmVzYXMscGNpZS1yOGE3NzkwIiwgInJlbmVzYXMscGNpZS1yOGE3NzkxIgorLSByZWc6IGJhc2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSBwY2llIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgorLSAjYWRkcmVzcy1jZWxsczogc2V0IHRvIDwzPgorLSAjc2l6ZS1jZWxsczogc2V0IHRvIDwyPgorLSBidXMtcmFuZ2U6IFBDSSBidXMgbnVtYmVycyBjb3ZlcmVkCistIGRldmljZV90eXBlOiBzZXQgdG8gInBjaSIKKy0gcmFuZ2VzOiByYW5nZXMgZm9yIHRoZSBQQ0kgbWVtb3J5IGFuZCBJL08gcmVnaW9ucy4KKy0gZG1hLXJhbmdlczogcmFuZ2VzIGZvciB0aGUgaW5ib3VuZCBtZW1vcnkgcmVnaW9ucy4KKy0gaW50ZXJydXB0czogdHdvIGludGVycnVwdCBzb3VyY2VzIGZvciBNU0kgaW50ZXJydXB0cywgZm9sbG93ZWQgYnkgaW50ZXJydXB0CisJc291cmNlIGZvciBoYXJkd2FyZSByZWxhdGVkIGludGVycnVwdHMgKGUuZy4gbGluayBzcGVlZCBjaGFuZ2UpLgorLSAjaW50ZXJydXB0LWNlbGxzOiBzZXQgdG8gPDE+CistIGludGVycnVwdC1tYXAtbWFzayBhbmQgaW50ZXJydXB0LW1hcDogc3RhbmRhcmQgUENJIHByb3BlcnRpZXMKKwl0byBkZWZpbmUgdGhlIG1hcHBpbmcgb2YgdGhlIFBDSWUgaW50ZXJmYWNlIHRvIGludGVycnVwdAorCW51bWJlcnMuCistIGNsb2NrczogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzogY2xvY2sgc3BlY2lmaWVycyBmb3IgdGhlIFBDSWUgY29udHJvbGxlcgorCWFuZCBQQ0llIGJ1cyBjbG9ja3MuCistIGNsb2NrLW5hbWVzOiBmcm9tIGNvbW1vbiBjbG9jayBiaW5kaW5nOiBzaG91bGQgYmUgInBjaWUiIGFuZCAicGNpZV9idXMiLgorCitFeGFtcGxlOgorCitTb0Mgc3BlY2lmaWMgRFQgRW50cnk6CisKKwlwY2llOiBwY2llQGZlMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBjaWUtcjhhNzc5MSI7CisJCXJlZyA9IDwwIDB4ZmUwMDAwMDAgMCAweDgwMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJcmFuZ2VzID0gPDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDAgMHhmZTEwMDAwMCAwIDB4MDAxMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4ZmUyMDAwMDAgMCAweGZlMjAwMDAwIDAgMHgwMDIwMDAwMAorCQkJICAweDAyMDAwMDAwIDAgMHgzMDAwMDAwMCAwIDB4MzAwMDAwMDAgMCAweDA4MDAwMDAwCisJCQkgIDB4NDIwMDAwMDAgMCAweDM4MDAwMDAwIDAgMHgzODAwMDAwMCAwIDB4MDgwMDAwMDA+OworCQlkbWEtcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDQwMDAwMDAwIDAgMHg0MDAwMDAwMCAwIDB4NDAwMDAwMDAKKwkJCSAgICAgIDB4NDIwMDAwMDAgMiAweDAwMDAwMDAwIDIgMHgwMDAwMDAwMCAwIDB4NDAwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTE2IDQ+LCA8MCAxMTcgND4sIDwwIDExOCA0PjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDA+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDAgJmdpYyAwIDExNiA0PjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTFfQ0xLX1BDSUU+LCA8JnBjaWVfYnVzX2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInBjaWUiLCAicGNpZV9idXMiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3NhbXN1bmctcGh5LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvc2Ftc3VuZy1waHkudHh0CmluZGV4IGI0MjJlMzguLjIwNDkyNjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvc2Ftc3VuZy1waHkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvc2Ftc3VuZy1waHkudHh0CkBAIC0xMTQsMyArMTE0LDUwIEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3Mtc2F0YXBoeS1pMmMiOwogCQlyZWcgPSA8MHgzOD47CiAJfTsKKworU2Ftc3VuZyBFeHlub3M1IFNvQyBzZXJpZXMgVVNCIERSRCBQSFkgY29udHJvbGxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgc3VwcG9ydGVkIHZhbHVlczoKKwktICJzYW1zdW5nLGV4eW5vczUyNTAtdXNiZHJkLXBoeSIgLSBmb3IgZXh5bm9zNTI1MCBTb0MsCisJLSAic2Ftc3VuZyxleHlub3M1NDIwLXVzYmRyZC1waHkiIC0gZm9yIGV4eW5vczU0MjAgU29DLgorLSByZWcgOiBSZWdpc3RlciBvZmZzZXQgYW5kIGxlbmd0aCBvZiBVU0IgRFJEIFBIWSByZWdpc3RlciBzZXQ7CistIGNsb2NrczogQ2xvY2sgSURzIGFycmF5IGFzIHJlcXVpcmVkIGJ5IHRoZSBjb250cm9sbGVyCistIGNsb2NrLW5hbWVzOiBuYW1lcyBvZiBjbG9ja3MgY29ycmVzZXBvbmRpbmcgdG8gSURzIGluIHRoZSBjbG9jayBwcm9wZXJ0eTsKKwkgICAgICAgUmVxdWlyZWQgY2xvY2tzOgorCS0gcGh5OiBtYWluIFBIWSBjbG9jayAoc2FtZSBhcyBVU0IgRFJEIGNvbnRyb2xsZXIgaS5lLiBEV0MzIElQIGNsb2NrKSwKKwkgICAgICAgdXNlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzLgorCS0gcmVmOiBQSFkncyByZWZlcmVuY2UgY2xvY2sgKHVzdWFsbHkgY3J5c3RhbCBjbG9jayksIHVzZWQgZm9yCisJICAgICAgIFBIWSBvcGVyYXRpb25zLCBhc3NvY2lhdGVkIGJ5IHBoeSBuYW1lLiBJdCBpcyB1c2VkIHRvCisJICAgICAgIGRldGVybWluZSBiaXQgdmFsdWVzIGZvciBjbG9jayBzZXR0aW5ncyByZWdpc3Rlci4KKwkgICAgICAgRm9yIEV4eW5vczU0MjAgdGhpcyBpcyBnaXZlbiBhcyAnc2Nsa191c2JwaHkzMCcgaW4gQ01VLgorLSBzYW1zdW5nLHBtdS1zeXNjb246IHBoYW5kbGUgZm9yIFBNVSBzeXN0ZW0gY29udHJvbGxlciBpbnRlcmZhY2UsIHVzZWQgdG8KKwkJICAgICAgY29udHJvbCBwbXUgcmVnaXN0ZXJzIGZvciBwb3dlciBpc29sYXRpb24uCistICNwaHktY2VsbHMgOiBmcm9tIHRoZSBnZW5lcmljIFBIWSBiaW5kaW5ncywgbXVzdCBiZSAxOworCitGb3IgInNhbXN1bmcsZXh5bm9zNTI1MC11c2JkcmQtcGh5IiBhbmQgInNhbXN1bmcsZXh5bm9zNTQyMC11c2JkcmQtcGh5IgorY29tcGF0aWJsZSBQSFlzLCB0aGUgc2Vjb25kIGNlbGwgaW4gdGhlIFBIWSBzcGVjaWZpZXIgaWRlbnRpZmllcyB0aGUKK1BIWSBpZCwgd2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKyAgMCAtIFVUTUkrIHR5cGUgcGh5LAorICAxIC0gUElQRTMgdHlwZSBwaHksCisKK0V4YW1wbGU6CisJdXNiZHJkX3BoeTogdXNicGh5QDEyMTAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtdXNiZHJkLXBoeSI7CisJCXJlZyA9IDwweDEyMTAwMDAwIDB4MTAwPjsKKwkJY2xvY2tzID0gPCZjbG9jayAyODY+LCA8JmNsb2NrIDE+OworCQljbG9jay1uYW1lcyA9ICJwaHkiLCAicmVmIjsKKwkJc2Ftc3VuZyxwbXUtc3lzY29uID0gPCZwbXVfc3lzdGVtX2NvbnRyb2xsZXI+OworCQkjcGh5LWNlbGxzID0gPDE+OworCX07CisKKy0gYWxpYXNlczogRm9yIFNvQ3MgbGlrZSBFeHlub3M1NDIwIGhhdmluZyBtdWx0aXBsZSBVU0IgMy4wIERSRCBQSFkgY29udHJvbGxlcnMsCisJICAgJ3VzYmRyZF9waHknIG5vZGVzIHNob3VsZCBoYXZlIG51bWJlcmVkIGFsaWFzIGluIHRoZSBhbGlhc2VzIG5vZGUsCisJICAgaW4gdGhlIGZvcm0gb2YgdXNiZHJkcGh5TiwgTiA9IDAsIDEuLi4gKGRlcGVuZGluZyBvbiBudW1iZXIgb2YKKwkgICBjb250cm9sbGVycykuCitFeGFtcGxlOgorCWFsaWFzZXMgeworCQl1c2JkcmRwaHkwID0gJnVzYjNfcGh5MDsKKwkJdXNiZHJkcGh5MSA9ICZ1c2IzX3BoeTE7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvc3VuNGktdXNiLXBoeS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3N1bjRpLXVzYi1waHkudHh0CmluZGV4IGE4MjM2MWIuLjE2NTI4YjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvc3VuNGktdXNiLXBoeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9zdW40aS11c2ItcGh5LnR4dApAQCAtMiwxNSArMiwyNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSBvbmUgb2YgImFsbHdpbm5lcixzdW40aS1hMTAtdXNiLXBoeSIsCi0gICJhbGx3aW5uZXIsc3VuNWktYTEzLXVzYi1waHkiIG9yICJhbGx3aW5uZXIsc3VuN2ktYTIwLXVzYi1waHkiCistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgb25lIG9mCisgICogYWxsd2lubmVyLHN1bjRpLWExMC11c2ItcGh5CisgICogYWxsd2lubmVyLHN1bjVpLWExMy11c2ItcGh5CisgICogYWxsd2lubmVyLHN1bjZpLWEzMS11c2ItcGh5CisgICogYWxsd2lubmVyLHN1bjdpLWEyMC11c2ItcGh5CiAtIHJlZyA6IGEgbGlzdCBvZiBvZmZzZXQgKyBsZW5ndGggcGFpcnMKLS0gcmVnLW5hbWVzIDogInBoeV9jdHJsIiwgInBtdTEiIGFuZCBmb3Igc3VuNGkgb3Igc3VuN2kgInBtdTIiCistIHJlZy1uYW1lcyA6CisgICogInBoeV9jdHJsIgorICAqICJwbXUxIgorICAqICJwbXUyIiBmb3Igc3VuNGksIHN1bjZpIG9yIHN1bjdpCiAtICNwaHktY2VsbHMgOiBmcm9tIHRoZSBnZW5lcmljIHBoeSBiaW5kaW5ncywgbXVzdCBiZSAxCi0tIGNsb2NrcyA6IHBoYW5kbGUgKyBjbG9jayBzcGVjaWZpZXIgZm9yIHRoZSBwaHkgY2xvY2sKLS0gY2xvY2stbmFtZXMgOiAidXNiX3BoeSIKKy0gY2xvY2tzIDogcGhhbmRsZSArIGNsb2NrIHNwZWNpZmllciBmb3IgdGhlIHBoeSBjbG9ja3MKKy0gY2xvY2stbmFtZXMgOgorICAqICJ1c2JfcGh5IiBmb3Igc3VuNGksIHN1bjVpIG9yIHN1bjdpCisgICogInVzYjBfcGh5IiwgInVzYjFfcGh5IiBhbmQgInVzYjJfcGh5IiBmb3Igc3VuNmkKIC0gcmVzZXRzIDogYSBsaXN0IG9mIHBoYW5kbGUgKyByZXNldCBzcGVjaWZpZXIgcGFpcnMKLS0gcmVzZXQtbmFtZXMgOiAidXNiMF9yZXNldCIsICJ1c2IxX3Jlc2V0IiBhbmQgZm9yIHN1bjRpIG9yIHN1bjdpICJ1c2IyX3Jlc2V0IgorLSByZXNldC1uYW1lcyA6CisgICogInVzYjBfcmVzZXQiCisgICogInVzYjFfcmVzZXQiCisgICogInVzYjJfcmVzZXQiIGZvciBzdW40aSwgc3VuNmkgb3Igc3VuN2kKIAogRXhhbXBsZToKIAl1c2JwaHk6IHBoeUAweDAxYzEzNDAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvdGktcGh5LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvdGktcGh5LnR4dAppbmRleCA3ODhmYjBmLi45Y2U0NThmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3RpLXBoeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS90aS1waHkudHh0CkBAIC0zMiw2ICszMiwxMSBAQAogIC0gcmVnIDogQWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UuCiAgLSAjcGh5LWNlbGxzOiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjZWxscyB0aGF0IHNob3VsZCBiZSBnaXZlbiBpbiB0aGUKICAgIHBoYW5kbGUgd2hpbGUgcmVmZXJlbmNpbmcgdGhpcyBwaHkuCisgLSBjbG9ja3M6IGEgbGlzdCBvZiBwaGFuZGxlcyBhbmQgY2xvY2stc3BlY2lmaWVyIHBhaXJzLCBvbmUgZm9yIGVhY2ggZW50cnkgaW4KKyAgIGNsb2NrLW5hbWVzLgorIC0gY2xvY2stbmFtZXM6IHNob3VsZCBpbmNsdWRlOgorICAgKiAid2t1cGNsayIgLSB3YWtldXAgY2xvY2suCisgICAqICJyZWZjbGsiIC0gcmVmZXJlbmNlIGNsb2NrIChvcHRpb25hbCkuCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAgLSBjdHJsLW1vZHVsZSA6IHBoYW5kbGUgb2YgdGhlIGNvbnRyb2wgbW9kdWxlIHVzZWQgYnkgUEhZIGRyaXZlciB0byBwb3dlciBvbgpAQCAtNDQsNiArNDksOCBAQAogCXJlZyA9IDwweDRhMGFkMDgwIDB4NTg+OwogCWN0cmwtbW9kdWxlID0gPCZvbWFwX2NvbnRyb2xfdXNiPjsKIAkjcGh5LWNlbGxzID0gPDA+OworCWNsb2NrcyA9IDwmdXNiX3BoeV9jbV9jbGszMms+LCA8JnVzYl9vdGdfc3NfcmVmY2xrOTYwbT47CisJY2xvY2stbmFtZXMgPSAid2t1cGNsayIsICJyZWZjbGsiOwogfTsKIAogVEkgUElQRTMgUEhZCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9hbGx3aW5uZXIsc3VueGktcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9hbGx3aW5uZXIsc3VueGktcGluY3RybC50eHQKaW5kZXggZGZmMGU1Zi4uZDhkMDY1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvYWxsd2lubmVyLHN1bnhpLXBpbmN0cmwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2FsbHdpbm5lcixzdW54aS1waW5jdHJsLnR4dApAQCAtNiw4ICs2LDEzIEBACiB0aGUgcGlucyBpbmNsdWRlcyBkcml2ZSBzdHJlbmd0aCBhbmQgcHVsbC11cC4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZTogImFsbHdpbm5lciw8c29jPi1waW5jdHJsIi4gU3VwcG9ydGVkIFNvQ3MgZm9yIG5vdyBhcmU6Ci0gIHN1bjVpLWExMy4KKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5ncyAoZGVwZW5kaW5nIG9uIHlvdSBTb0MpOgorICAiYWxsd2lubmVyLHN1bjRpLWExMC1waW5jdHJsIgorICAiYWxsd2lubmVyLHN1bjVpLWExMHMtcGluY3RybCIKKyAgImFsbHdpbm5lcixzdW41aS1hMTMtcGluY3RybCIKKyAgImFsbHdpbm5lcixzdW42aS1hMzEtcGluY3RybCIKKyAgImFsbHdpbm5lcixzdW42aS1hMzEtci1waW5jdHJsIgorICAiYWxsd2lubmVyLHN1bjdpLWEyMC1waW5jdHJsIgogLSByZWc6IFNob3VsZCBjb250YWluIHRoZSByZWdpc3RlciBwaHlzaWNhbCBhZGRyZXNzIGFuZCBsZW5ndGggZm9yIHRoZQogICBwaW4gY29udHJvbGxlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvYnJjbSxiY20xMTM1MS1waW5jdHJsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2JyY20sYmNtMTEzNTEtcGluY3RybC50eHQKaW5kZXggNjdhNWRiOS4uNGVhYWUzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvYnJjbSxiY20xMTM1MS1waW5jdHJsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9icmNtLGJjbTExMzUxLXBpbmN0cmwudHh0CkBAIC03Myw5ICs3Myw5IEBACiAJCQkJT3RoZXJ3aXNlOgogCQkJCQkwOiBmYXN0IHNsZXcgcmF0ZQogCQkJCQkxOiBub3JtYWwgc2xldyByYXRlCi0tIGlucHV0LWVuYWJsZToJCQlObyBhcmd1ZW1lbnRzLiBFbmFibGUgaW5wdXQgKGRvZXMgbm90IGFmZmVjdAorLSBpbnB1dC1lbmFibGU6CQkJTm8gYXJndW1lbnRzLiBFbmFibGUgaW5wdXQgKGRvZXMgbm90IGFmZmVjdAogCQkJCW91dHB1dC4pCi0tIGlucHV0LWRpc2FibGU6CQlObyBhcmd1ZW1lbnRzLiBEaXNhYmxlIGlucHV0IChkb2VzIG5vdCBhZmZlY3QKKy0gaW5wdXQtZGlzYWJsZToJCU5vIGFyZ3VtZW50cy4gRGlzYWJsZSBpbnB1dCAoZG9lcyBub3QgYWZmZWN0CiAJCQkJb3V0cHV0LikKIC0gZHJpdmUtc3RyZW5ndGg6CQlJbnRlZ2VyLiBEcml2ZSBzdHJlbmd0aCBpbiBtQS4gIFZhbGlkIHZhbHVlcyBhcmUKIAkJCQkyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiBtQS4KQEAgLTk5LDkgKzk5LDkgQEAKIAkJCQlPdGhlcndpc2U6CiAJCQkJCTA6IGZhc3Qgc2xldyByYXRlCiAJCQkJCTE6IG5vcm1hbCBzbGV3IHJhdGUKLS0gaW5wdXQtZW5hYmxlOgkJCU5vIGFyZ3VlbWVudHMuIEVuYWJsZSBpbnB1dCAoZG9lcyBub3QgYWZmZWN0CistIGlucHV0LWVuYWJsZToJCQlObyBhcmd1bWVudHMuIEVuYWJsZSBpbnB1dCAoZG9lcyBub3QgYWZmZWN0CiAJCQkJb3V0cHV0LikKLS0gaW5wdXQtZGlzYWJsZToJCU5vIGFyZ3VlbWVudHMuIERpc2FibGUgaW5wdXQgKGRvZXMgbm90IGFmZmVjdAorLSBpbnB1dC1kaXNhYmxlOgkJTm8gYXJndW1lbnRzLiBEaXNhYmxlIGlucHV0IChkb2VzIG5vdCBhZmZlY3QKIAkJCQlvdXRwdXQuKQogCiBPcHRpb25hbCBQcm9wZXJ0aWVzIChmb3IgSERNSSBwaW5zKToKQEAgLTExMSw5ICsxMTEsOSBAQAogLSBzbGV3LXJhdGU6CQkJSW50ZWdlci4gQ29udHJvbHMgc2xldyByYXRlLgogCQkJCQkwOiBTdGFuZGFyZCgxMDBrYnBzKSYgRmFzdCg0MDBrYnBzKSBtb2RlCiAJCQkJCTE6IEhpZ2hzcGVlZCAoMy40TWJwcykgbW9kZQotLSBpbnB1dC1lbmFibGU6CQkJTm8gYXJndWVtZW50cy4gRW5hYmxlIGlucHV0IChkb2VzIG5vdCBhZmZlY3QKKy0gaW5wdXQtZW5hYmxlOgkJCU5vIGFyZ3VtZW50cy4gRW5hYmxlIGlucHV0IChkb2VzIG5vdCBhZmZlY3QKIAkJCQlvdXRwdXQuKQotLSBpbnB1dC1kaXNhYmxlOgkJTm8gYXJndWVtZW50cy4gRGlzYWJsZSBpbnB1dCAoZG9lcyBub3QgYWZmZWN0CistIGlucHV0LWRpc2FibGU6CQlObyBhcmd1bWVudHMuIERpc2FibGUgaW5wdXQgKGRvZXMgbm90IGFmZmVjdAogCQkJCW91dHB1dC4pCiAKIEV4YW1wbGU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9mc2wsaW14NnN4LXBpbmN0cmwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvZnNsLGlteDZzeC1waW5jdHJsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI1OTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvZnNsLGlteDZzeC1waW5jdHJsLnR4dApAQCAtMCwwICsxLDM2IEBACisqIEZyZWVzY2FsZSBpLk1YNiBTb2xvWCBJT01VWCBDb250cm9sbGVyCisKK1BsZWFzZSByZWZlciB0byBmc2wsaW14LXBpbmN0cmwudHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBjb21tb24gYmluZGluZyBwYXJ0CithbmQgdXNhZ2UuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6ICJmc2wsaW14NnN4LWlvbXV4YyIKKy0gZnNsLHBpbnM6IGVhY2ggZW50cnkgY29uc2lzdHMgb2YgNiBpbnRlZ2VycyBhbmQgcmVwcmVzZW50cyB0aGUgbXV4IGFuZCBjb25maWcKKyAgc2V0dGluZyBmb3Igb25lIHBpbi4gIFRoZSBmaXJzdCA1IGludGVnZXJzIDxtdXhfcmVnIGNvbmZfcmVnIGlucHV0X3JlZyBtdXhfdmFsCisgIGlucHV0X3ZhbD4gYXJlIHNwZWNpZmllZCB1c2luZyBhIFBJTl9GVU5DX0lEIG1hY3JvLCB3aGljaCBjYW4gYmUgZm91bmQgaW4KKyAgaW14NnN4LXBpbmZ1bmMuaCB1bmRlciBkZXZpY2UgdHJlZSBzb3VyY2UgZm9sZGVyLiAgVGhlIGxhc3QgaW50ZWdlciBDT05GSUcgaXMKKyAgdGhlIHBhZCBzZXR0aW5nIHZhbHVlIGxpa2UgcHVsbC11cCBvbiB0aGlzIHBpbi4gIFBsZWFzZSByZWZlciB0byBpLk1YNiBTb2xvWAorICBSZWZlcmVuY2UgTWFudWFsIGZvciBkZXRhaWxlZCBDT05GSUcgc2V0dGluZ3MuCisKK0NPTkZJRyBiaXRzIGRlZmluaXRpb246CitQQURfQ1RMX0hZUyAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorUEFEX0NUTF9QVVNfMTAwS19ET1dOICAgICAgICAgICAoMCA8PCAxNCkKK1BBRF9DVExfUFVTXzQ3S19VUCAgICAgICAgICAgICAgKDEgPDwgMTQpCitQQURfQ1RMX1BVU18xMDBLX1VQICAgICAgICAgICAgICgyIDw8IDE0KQorUEFEX0NUTF9QVVNfMjJLX1VQICAgICAgICAgICAgICAoMyA8PCAxNCkKK1BBRF9DVExfUFVFICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCitQQURfQ1RMX1BLRSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorUEFEX0NUTF9PREUgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKK1BBRF9DVExfU1BFRURfTE9XICAgICAgICAgICAgICAgKDAgPDwgNikKK1BBRF9DVExfU1BFRURfTUVEICAgICAgICAgICAgICAgKDEgPDwgNikKK1BBRF9DVExfU1BFRURfSElHSCAgICAgICAgICAgICAgKDMgPDwgNikKK1BBRF9DVExfRFNFX0RJU0FCTEUgICAgICAgICAgICAgKDAgPDwgMykKK1BBRF9DVExfRFNFXzI2MG9obSAgICAgICAgICAgICAgKDEgPDwgMykKK1BBRF9DVExfRFNFXzEzMG9obSAgICAgICAgICAgICAgKDIgPDwgMykKK1BBRF9DVExfRFNFXzg3b2htICAgICAgICAgICAgICAgKDMgPDwgMykKK1BBRF9DVExfRFNFXzY1b2htICAgICAgICAgICAgICAgKDQgPDwgMykKK1BBRF9DVExfRFNFXzUyb2htICAgICAgICAgICAgICAgKDUgPDwgMykKK1BBRF9DVExfRFNFXzQzb2htICAgICAgICAgICAgICAgKDYgPDwgMykKK1BBRF9DVExfRFNFXzM3b2htICAgICAgICAgICAgICAgKDcgPDwgMykKK1BBRF9DVExfU1JFX0ZBU1QgICAgICAgICAgICAgICAgKDEgPDwgMCkKK1BBRF9DVExfU1JFX1NMT1cgICAgICAgICAgICAgICAgKDAgPDwgMCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL21hcnZlbGwsb3Jpb24tcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9tYXJ2ZWxsLG9yaW9uLXBpbmN0cmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTcwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9tYXJ2ZWxsLG9yaW9uLXBpbmN0cmwudHh0CkBAIC0wLDAgKzEsOTEgQEAKKyogTWFydmVsbCBPcmlvbiBTb0MgcGluY3RybCBkcml2ZXIgZm9yIG1wcAorCitQbGVhc2UgcmVmZXIgdG8gbWFydmVsbCxtdmVidS1waW5jdHJsLnR4dCBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgY29tbW9uIGJpbmRpbmcKK3BhcnQgYW5kIHVzYWdlLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAibWFydmVsbCw4OGY1MTgxbC1waW5jdHJsIiwgIm1hcnZlbGwsODhmNTE4Mi1waW5jdHJsIiwKKyAgICAgICAgICAgICAgIm1hcnZlbGwsODhmNTI4MS1waW5jdHJsIgorCistIHJlZzogdHdvIHJlZ2lzdGVyIGFyZWFzLCB0aGUgZmlyc3Qgb25lIGRlc2NyaWJpbmcgdGhlIGZpcnN0IHR3bworICBjb250aWd1b3VzIE1QUCByZWdpc3RlcnMsIGFuZCB0aGUgc2Vjb25kIG9uZSBkZXNjcmliaW5nIHRoZSBzaW5nbGUKKyAgZmluYWwgTVBQIHJlZ2lzdGVyLCBzZXBhcmF0ZWQgZnJvbSB0aGUgcHJldmlvdXMgb25lLgorCitBdmFpbGFibGUgbXBwIHBpbnMvZ3JvdXBzIGFuZCBmdW5jdGlvbnM6CitOb3RlOiBicmFja2V0cyAoeCkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBtcHAgbmFtZSBmb3IgbWFydmVsbCxmdW5jdGlvbiBhbmQgZ2l2ZW4KK29ubHkgZm9yIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gaW4gdGhpcyBkb2N1bWVudC4KKworKiBNYXJ2ZWxsIE9yaW9uIDg4ZjUxODFsCisKK25hbWUgICAgICAgICAgcGlucyAgICAgZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbXBwMCAgICAgICAgICAwICAgICAgICBwY2llKHJzdG91dCksIHBjaShyZXEyKSwgZ3BpbworbXBwMSAgICAgICAgICAxICAgICAgICBncGlvLCBwY2koZ250MikKK21wcDIgICAgICAgICAgMiAgICAgICAgZ3BpbywgcGNpKHJlcTMpLCBwY2ktMShwbWUpCittcHAzICAgICAgICAgIDMgICAgICAgIGdwaW8sIHBjaShnbnQzKQorbXBwNCAgICAgICAgICA0ICAgICAgICBncGlvLCBwY2kocmVxNCkKK21wcDUgICAgICAgICAgNSAgICAgICAgZ3BpbywgcGNpKGdudDQpCittcHA2ICAgICAgICAgIDYgICAgICAgIGdwaW8sIHBjaShyZXE1KSwgcGNpLTEoY2xrKQorbXBwNyAgICAgICAgICA3ICAgICAgICBncGlvLCBwY2koZ250NSksIHBjaS0xKGNsaykKK21wcDggICAgICAgICAgOCAgICAgICAgZ3BpbywgZ2UoY29sKQorbXBwOSAgICAgICAgICA5ICAgICAgICBncGlvLCBnZShyeGVycikKK21wcDEwICAgICAgICAgMTAgICAgICAgZ3BpbywgZ2UoY3JzKQorbXBwMTEgICAgICAgICAxMSAgICAgICBncGlvLCBnZSh0eGVycikKK21wcDEyICAgICAgICAgMTIgICAgICAgZ3BpbywgZ2UodHhkNCkKK21wcDEzICAgICAgICAgMTMgICAgICAgZ3BpbywgZ2UodHhkNSkKK21wcDE0ICAgICAgICAgMTQgICAgICAgZ3BpbywgZ2UodHhkNikKK21wcDE1ICAgICAgICAgMTUgICAgICAgZ3BpbywgZ2UodHhkNykKK21wcDE2ICAgICAgICAgMTYgICAgICAgZ2UocnhkNCkKK21wcDE3ICAgICAgICAgMTcgICAgICAgZ2UocnhkNSkKK21wcDE4ICAgICAgICAgMTggICAgICAgZ2UocnhkNikKK21wcDE5ICAgICAgICAgMTkgICAgICAgZ2UocnhkNykKKworKiBNYXJ2ZWxsIE9yaW9uIDg4ZjUxODIKKworbmFtZSAgICAgICAgICBwaW5zICAgICBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittcHAwICAgICAgICAgIDAgICAgICAgIHBjaWUocnN0b3V0KSwgcGNpKHJlcTIpLCBncGlvCittcHAxICAgICAgICAgIDEgICAgICAgIGdwaW8sIHBjaShnbnQyKQorbXBwMiAgICAgICAgICAyICAgICAgICBncGlvLCBwY2kocmVxMyksIHBjaS0xKHBtZSkKK21wcDMgICAgICAgICAgMyAgICAgICAgZ3BpbywgcGNpKGdudDMpCittcHA0ICAgICAgICAgIDQgICAgICAgIGdwaW8sIHBjaShyZXE0KSwgYm9vdG5hbmQocmUpLCBzYXRhMChwcnNudCkKK21wcDUgICAgICAgICAgNSAgICAgICAgZ3BpbywgcGNpKGdudDQpLCBib290bmFuZCh3ZSksIHNhdGExKHByc250KQorbXBwNiAgICAgICAgICA2ICAgICAgICBncGlvLCBwY2kocmVxNSksIG5hbmQocmUwKSwgc2F0YTAoYWN0KQorbXBwNyAgICAgICAgICA3ICAgICAgICBncGlvLCBwY2koZ250NSksIG5hbmQod2UwKSwgc2F0YTEoYWN0KQorbXBwOCAgICAgICAgICA4ICAgICAgICBncGlvLCBnZShjb2wpCittcHA5ICAgICAgICAgIDkgICAgICAgIGdwaW8sIGdlKHJ4ZXJyKQorbXBwMTAgICAgICAgICAxMCAgICAgICBncGlvLCBnZShjcnMpCittcHAxMSAgICAgICAgIDExICAgICAgIGdwaW8sIGdlKHR4ZXJyKQorbXBwMTIgICAgICAgICAxMiAgICAgICBncGlvLCBnZSh0eGQ0KSwgbmFuZChyZTEpLCBzYXRhMChsZWRwcnNudCkKK21wcDEzICAgICAgICAgMTMgICAgICAgZ3BpbywgZ2UodHhkNSksIG5hbmQod2UxKSwgc2F0YTEobGVkcHJzbnQpCittcHAxNCAgICAgICAgIDE0ICAgICAgIGdwaW8sIGdlKHR4ZDYpLCBuYW5kKHJlMiksIHNhdGEwKGxlZGFjdCkKK21wcDE1ICAgICAgICAgMTUgICAgICAgZ3BpbywgZ2UodHhkNyksIG5hbmQod2UyKSwgc2F0YTEobGVkYWN0KQorbXBwMTYgICAgICAgICAxNiAgICAgICB1YXJ0MShyeGQpLCBnZShyeGQ0KSwgZ3BpbworbXBwMTcgICAgICAgICAxNyAgICAgICB1YXJ0MSh0eGQpLCBnZShyeGQ1KSwgZ3BpbworbXBwMTggICAgICAgICAxOCAgICAgICB1YXJ0MShjdHMpLCBnZShyeGQ2KSwgZ3BpbworbXBwMTkgICAgICAgICAxOSAgICAgICB1YXJ0MShydHMpLCBnZShyeGQ3KSwgZ3BpbworCisqIE1hcnZlbGwgT3Jpb24gODhmNTI4MQorCituYW1lICAgICAgICAgIHBpbnMgICAgIGZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21wcDAgICAgICAgICAgMCAgICAgICAgcGNpZShyc3RvdXQpLCBwY2kocmVxMiksIGdwaW8KK21wcDEgICAgICAgICAgMSAgICAgICAgZ3BpbywgcGNpKGdudDIpCittcHAyICAgICAgICAgIDIgICAgICAgIGdwaW8sIHBjaShyZXEzKSwgcGNpKHBtZSkKK21wcDMgICAgICAgICAgMyAgICAgICAgZ3BpbywgcGNpKGdudDMpCittcHA0ICAgICAgICAgIDQgICAgICAgIGdwaW8sIHBjaShyZXE0KSwgYm9vdG5hbmQocmUpCittcHA1ICAgICAgICAgIDUgICAgICAgIGdwaW8sIHBjaShnbnQ0KSwgYm9vdG5hbmQod2UpCittcHA2ICAgICAgICAgIDYgICAgICAgIGdwaW8sIHBjaShyZXE1KSwgbmFuZChyZTApCittcHA3ICAgICAgICAgIDcgICAgICAgIGdwaW8sIHBjaShnbnQ1KSwgbmFuZCh3ZTApCittcHA4ICAgICAgICAgIDggICAgICAgIGdwaW8sIGdlKGNvbCkKK21wcDkgICAgICAgICAgOSAgICAgICAgZ3BpbywgZ2UocnhlcnIpCittcHAxMCAgICAgICAgIDEwICAgICAgIGdwaW8sIGdlKGNycykKK21wcDExICAgICAgICAgMTEgICAgICAgZ3BpbywgZ2UodHhlcnIpCittcHAxMiAgICAgICAgIDEyICAgICAgIGdwaW8sIGdlKHR4ZDQpLCBuYW5kKHJlMSkKK21wcDEzICAgICAgICAgMTMgICAgICAgZ3BpbywgZ2UodHhkNSksIG5hbmQod2UxKQorbXBwMTQgICAgICAgICAxNCAgICAgICBncGlvLCBnZSh0eGQ2KSwgbmFuZChyZTIpCittcHAxNSAgICAgICAgIDE1ICAgICAgIGdwaW8sIGdlKHR4ZDcpLCBuYW5kKHdlMikKK21wcDE2ICAgICAgICAgMTYgICAgICAgdWFydDEocnhkKSwgZ2UocnhkNCkKK21wcDE3ICAgICAgICAgMTcgICAgICAgdWFydDEodHhkKSwgZ2UocnhkNSkKK21wcDE4ICAgICAgICAgMTggICAgICAgdWFydDEoY3RzKSwgZ2UocnhkNikKK21wcDE5ICAgICAgICAgMTkgICAgICAgdWFydDEocnRzKSwgZ2UocnhkNykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3BpbmN0cmwtYmluZGluZ3MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcGluY3RybC1iaW5kaW5ncy50eHQKaW5kZXggNDQxNDE2My4uZmE0MGExNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcGluY3RybC1iaW5kaW5ncy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcGluY3RybC1iaW5kaW5ncy50eHQKQEAgLTE1Niw2ICsxNTYsNyBAQAogaW5wdXQtc2NobWl0dC1lbmFibGUJLSBlbmFibGUgc2NobWl0dC10cmlnZ2VyIG1vZGUKIGlucHV0LXNjaG1pdHQtZGlzYWJsZQktIGRpc2FibGUgc2NobWl0dC10cmlnZ2VyIG1vZGUKIGlucHV0LWRlYm91bmNlCQktIGRlYm91bmNlIG1vZGUgd2l0aCBkZWJvdW5kIHRpbWUgWAorcG93ZXItc291cmNlCQktIHNlbGVjdCBiZXR3ZWVuIGRpZmZlcmVudCBwb3dlciBzdXBwbGllcwogbG93LXBvd2VyLWVuYWJsZQktIGVuYWJsZSBsb3cgcG93ZXIgbW9kZQogbG93LXBvd2VyLWRpc2FibGUJLSBkaXNhYmxlIGxvdyBwb3dlciBtb2RlCiBvdXRwdXQtbG93CQktIHNldCB0aGUgcGluIHRvIG91dHB1dCBtb2RlIHdpdGggbG93IGxldmVsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGFwcTgwNjQtcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGFwcTgwNjQtcGluY3RybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4MWY5MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sYXBxODA2NC1waW5jdHJsLnR4dApAQCAtMCwwICsxLDg4IEBACitRdWFsY29tbSBBUFE4MDY0IFRMTU0gYmxvY2sKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogInFjb20sYXBxODA2NC1waW5jdHJsIgorLSByZWc6IFNob3VsZCBiZSB0aGUgYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIFRMTU0gYmxvY2suCistIGludGVycnVwdHM6IFNob3VsZCBiZSB0aGUgcGFyZW50IElSUSBvZiB0aGUgVExNTSBibG9jay4KKy0gaW50ZXJydXB0LWNvbnRyb2xsZXI6IE1hcmtzIHRoZSBkZXZpY2Ugbm9kZSBhcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlci4KKy0gI2ludGVycnVwdC1jZWxsczogU2hvdWxkIGJlIHR3by4KKy0gZ3Bpby1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIG5vZGUgYXMgYSBHUElPIGNvbnRyb2xsZXIuCistICNncGlvLWNlbGxzIDogU2hvdWxkIGJlIHR3by4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgZ3BpbyBwaW4gbnVtYmVyIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBzZWNvbmQgY2VsbCBpcyB1c2VkIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzLgorCitQbGVhc2UgcmVmZXIgdG8gLi4vZ3Bpby9ncGlvLnR4dCBhbmQgLi4vaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50eHQgZm9yCithIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgR1BJTyBhbmQgaW50ZXJydXB0IGJpbmRpbmdzLgorCitQbGVhc2UgcmVmZXIgdG8gcGluY3RybC1iaW5kaW5ncy50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGRldGFpbHMgb2YgdGhlCitjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCitwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgorCitRdWFsY29tbSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYWJpdHJhcnkgbnVtYmVyIG9mCitzdWJub2Rlcy4gRWFjaCBvZiB0aGVzZSBzdWJub2RlcyByZXByZXNlbnRzIHNvbWUgZGVzaXJlZCBjb25maWd1cmF0aW9uIGZvciBhCitwaW4sIGEgZ3JvdXAsIG9yIGEgbGlzdCBvZiBwaW5zIG9yIGdyb3Vwcy4gVGhpcyBjb25maWd1cmF0aW9uIGNhbiBpbmNsdWRlIHRoZQorbXV4IGZ1bmN0aW9uIHRvIHNlbGVjdCBvbiB0aG9zZSBwaW4ocykvZ3JvdXAocyksIGFuZCB2YXJpb3VzIHBpbiBjb25maWd1cmF0aW9uCitwYXJhbWV0ZXJzLCBzdWNoIGFzIHB1bGwtdXAsIGRyaXZlIHN0cmVuZ3RoLCBldGMuCisKK1RoZSBuYW1lIG9mIGVhY2ggc3Vibm9kZSBpcyBub3QgaW1wb3J0YW50OyBhbGwgc3Vibm9kZXMgc2hvdWxkIGJlIGVudW1lcmF0ZWQKK2FuZCBwcm9jZXNzZWQgcHVyZWx5IGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuCisKK0VhY2ggc3Vibm9kZSBvbmx5IGFmZmVjdHMgdGhvc2UgcGFyYW1ldGVycyB0aGF0IGFyZSBleHBsaWNpdGx5IGxpc3RlZC4gSW4KK290aGVyIHdvcmRzLCBhIHN1Ym5vZGUgdGhhdCBsaXN0cyBhIG11eCBmdW5jdGlvbiBidXQgbm8gcGluIGNvbmZpZ3VyYXRpb24KK3BhcmFtZXRlcnMgaW1wbGllcyBubyBpbmZvcm1hdGlvbiBhYm91dCBhbnkgcGluIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KK1NpbWlsYXJseSwgYSBwaW4gc3Vibm9kZSB0aGF0IGRlc2NyaWJlcyBhIHB1bGx1cCBwYXJhbWV0ZXIgaW1wbGllcyBubworaW5mb3JtYXRpb24gYWJvdXQgZS5nLiB0aGUgbXV4IGZ1bmN0aW9uLgorCisKK1RoZSBmb2xsb3dpbmcgZ2VuZXJpYyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gcGluY3RybC1iaW5kaW5ncy50eHQgYXJlIHZhbGlkCit0byBzcGVjaWZ5IGluIGEgcGluIGNvbmZpZ3VyYXRpb24gc3Vibm9kZToKKworIHBpbnMsIGZ1bmN0aW9uLCBiaWFzLWRpc2FibGUsIGJpYXMtcHVsbC1kb3duLCBiaWFzLXB1bGwsdXAsIGRyaXZlLXN0cmVuZ3RoLAorIG91dHB1dC1sb3csIG91dHB1dC1oaWdoLgorCitOb24tZW1wdHkgc3Vibm9kZXMgbXVzdCBzcGVjaWZ5IHRoZSAncGlucycgcHJvcGVydHkuCisKK1ZhbGlkIHZhbHVlcyBmb3IgcGlucyBhcmU6CisgIGdwaW8wLWdwaW84OQorCitWYWxpZCB2YWx1ZXMgZm9yIGZ1bmN0aW9uIGFyZToKKyAgY2FtX21jbGssIGNvZGVjX21pY19pMnMsIGNvZGVjX3Nwa3JfaTJzLCBnc2JpMSwgZ3NiaTIsIGdzYmkzLCBnc2JpNCwKKyAgZ3NiaTRfY2FtX2kyYywgZ3NiaTUsIGdzYmk1X3NwaV9jczEsIGdzYmk1X3NwaV9jczIsIGdzYmk1X3NwaV9jczMsIGdzYmk2LAorICBnc2JpNl9zcGlfY3MxLCBnc2JpNl9zcGlfY3MyLCBnc2JpNl9zcGlfY3MzLCBnc2JpNywgZ3NiaTdfc3BpX2NzMSwKKyAgZ3NiaTdfc3BpX2NzMiwgZ3NiaTdfc3BpX2NzMywgZ3NiaV9jYW1faTJjLCBoZG1pLCBtaTJzLCByaXZhX2J0LCByaXZhX2ZtLAorICByaXZhX3dsYW4sIHNkYzIsIHNkYzQsIHNsaW1idXMsIHNwa3JfaTJzLCB0c2lmMSwgdHNpZjIsIHVzYjJfaHNpYywKKworRXhhbXBsZToKKworCW1zbWdwaW86IHBpbmN0cmxAODAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJxY29tLGFwcTgwNjQtcGluY3RybCI7CisJCXJlZyA9IDwweDgwMDAwMCAweDQwMDA+OworCisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDAgMzIgMHg0PjsKKworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmdzYmk1X3VhcnRfZGVmYXVsdD47CisKKwkJZ3NiaTVfdWFydF9kZWZhdWx0OiBnc2JpNV91YXJ0X2RlZmF1bHQgeworCQkJbXV4IHsKKwkJCQlwaW5zID0gImdwaW81MSIsICJncGlvNTIiOworCQkJCWZ1bmN0aW9uID0gImdzYmk1IjsKKwkJCX07CisKKwkJCXR4IHsKKwkJCQlwaW5zID0gImdwaW81MSI7CisJCQkJZHJpdmUtc3RyZW5ndGggPSA8ND47CisJCQkJYmlhcy1kaXNhYmxlOworCQkJfTsKKworCQkJcnggeworCQkJCXBpbnMgPSAiZ3BpbzUyIjsKKwkJCQlkcml2ZS1zdHJlbmd0aCA9IDwyPjsKKwkJCQliaWFzLXB1bGwtdXA7CisJCQl9OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGlwcTgwNjQtcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLGlwcTgwNjQtcGluY3RybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkMzVhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20saXBxODA2NC1waW5jdHJsLnR4dApAQCAtMCwwICsxLDk1IEBACitRdWFsY29tbSBJUFE4MDY0IFRMTU0gYmxvY2sKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogInFjb20saXBxODA2NC1waW5jdHJsIgorLSByZWc6IFNob3VsZCBiZSB0aGUgYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIFRMTU0gYmxvY2suCistIGludGVycnVwdHM6IFNob3VsZCBiZSB0aGUgcGFyZW50IElSUSBvZiB0aGUgVExNTSBibG9jay4KKy0gaW50ZXJydXB0LWNvbnRyb2xsZXI6IE1hcmtzIHRoZSBkZXZpY2Ugbm9kZSBhcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlci4KKy0gI2ludGVycnVwdC1jZWxsczogU2hvdWxkIGJlIHR3by4KKy0gZ3Bpby1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIG5vZGUgYXMgYSBHUElPIGNvbnRyb2xsZXIuCistICNncGlvLWNlbGxzIDogU2hvdWxkIGJlIHR3by4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgZ3BpbyBwaW4gbnVtYmVyIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBzZWNvbmQgY2VsbCBpcyB1c2VkIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzLgorCitQbGVhc2UgcmVmZXIgdG8gLi4vZ3Bpby9ncGlvLnR4dCBhbmQgLi4vaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50eHQgZm9yCithIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgR1BJTyBhbmQgaW50ZXJydXB0IGJpbmRpbmdzLgorCitQbGVhc2UgcmVmZXIgdG8gcGluY3RybC1iaW5kaW5ncy50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGRldGFpbHMgb2YgdGhlCitjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCitwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgorCitRdWFsY29tbSdzIHBpbiBjb25maWd1cmF0aW9uIG5vZGVzIGFjdCBhcyBhIGNvbnRhaW5lciBmb3IgYW4gYWJpdHJhcnkgbnVtYmVyIG9mCitzdWJub2Rlcy4gRWFjaCBvZiB0aGVzZSBzdWJub2RlcyByZXByZXNlbnRzIHNvbWUgZGVzaXJlZCBjb25maWd1cmF0aW9uIGZvciBhCitwaW4sIGEgZ3JvdXAsIG9yIGEgbGlzdCBvZiBwaW5zIG9yIGdyb3Vwcy4gVGhpcyBjb25maWd1cmF0aW9uIGNhbiBpbmNsdWRlIHRoZQorbXV4IGZ1bmN0aW9uIHRvIHNlbGVjdCBvbiB0aG9zZSBwaW4ocykvZ3JvdXAocyksIGFuZCB2YXJpb3VzIHBpbiBjb25maWd1cmF0aW9uCitwYXJhbWV0ZXJzLCBzdWNoIGFzIHB1bGwtdXAsIGRyaXZlIHN0cmVuZ3RoLCBldGMuCisKK1RoZSBuYW1lIG9mIGVhY2ggc3Vibm9kZSBpcyBub3QgaW1wb3J0YW50OyBhbGwgc3Vibm9kZXMgc2hvdWxkIGJlIGVudW1lcmF0ZWQKK2FuZCBwcm9jZXNzZWQgcHVyZWx5IGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuCisKK0VhY2ggc3Vibm9kZSBvbmx5IGFmZmVjdHMgdGhvc2UgcGFyYW1ldGVycyB0aGF0IGFyZSBleHBsaWNpdGx5IGxpc3RlZC4gSW4KK290aGVyIHdvcmRzLCBhIHN1Ym5vZGUgdGhhdCBsaXN0cyBhIG11eCBmdW5jdGlvbiBidXQgbm8gcGluIGNvbmZpZ3VyYXRpb24KK3BhcmFtZXRlcnMgaW1wbGllcyBubyBpbmZvcm1hdGlvbiBhYm91dCBhbnkgcGluIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KK1NpbWlsYXJseSwgYSBwaW4gc3Vibm9kZSB0aGF0IGRlc2NyaWJlcyBhIHB1bGx1cCBwYXJhbWV0ZXIgaW1wbGllcyBubworaW5mb3JtYXRpb24gYWJvdXQgZS5nLiB0aGUgbXV4IGZ1bmN0aW9uLgorCisKK1RoZSBmb2xsb3dpbmcgZ2VuZXJpYyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gcGluY3RybC1iaW5kaW5ncy50eHQgYXJlIHZhbGlkCit0byBzcGVjaWZ5IGluIGEgcGluIGNvbmZpZ3VyYXRpb24gc3Vibm9kZToKKworIHBpbnMsIGZ1bmN0aW9uLCBiaWFzLWRpc2FibGUsIGJpYXMtcHVsbC1kb3duLCBiaWFzLXB1bGwsdXAsIGRyaXZlLXN0cmVuZ3RoLAorIG91dHB1dC1sb3csIG91dHB1dC1oaWdoLgorCitOb24tZW1wdHkgc3Vibm9kZXMgbXVzdCBzcGVjaWZ5IHRoZSAncGlucycgcHJvcGVydHkuCisKK1ZhbGlkIHZhbHVlcyBmb3IgcWNvbSxwaW5zIGFyZToKKyAgZ3BpbzAtZ3BpbzY4CisgICBTdXBwb3J0cyBtdXgsIGJpYXMsIGFuZCBkcml2ZS1zdHJlbmd0aAorCisgIHNkYzNfY2xrLCBzZGMzX2NtZCwgc2RjM19kYXRhCisgICBTdXBwb3J0cyBiaWFzIGFuZCBkcml2ZS1zdHJlbmd0aAorCisKK1ZhbGlkIHZhbHVlcyBmb3IgZnVuY3Rpb24gYXJlOgorICBtZGlvLCBtaTJzLCBwZG0sIHNzYmksIHNwbWksIGF1ZGlvX3BjbSwgZ3NiaTEsIGdzYmkyLCBnc2JpNCwgZ3NiaTUsCisgIGdzYmk1X3NwaV9jczEsIGdzYmk1X3NwaV9jczIsIGdzYmk1X3NwaV9jczMsIGdzYmk2LCBnc2JpNywgbnNzX3NwaSwgc2RjMSwKKyAgc3BkaWYsIG5hbmQsIHRzaWYxLCB0c2lmMiwgdXNiX2ZzX24sIHVzYl9mcywgdXNiMl9oc2ljLCByZ21paTIsIHNhdGEsCisgIHBjaWUxX3JzdCwgcGNpZTFfcHJzbnQsIHBjaWUxX3B3cmVuX24sIHBjaWUxX3B3cmVuLCBwY2llMV9wd3JmbHQsCisgIHBjaWUxX2Nsa19yZXEsIHBjaWUyX3JzdCwgcGNpZTJfcHJzbnQsIHBjaWUyX3B3cmVuX24sIHBjaWUyX3B3cmVuLAorICBwY2llMl9wd3JmbHQsIHBjaWUyX2Nsa19yZXEsIHBjaWUzX3JzdCwgcGNpZTNfcHJzbnQsIHBjaWUzX3B3cmVuX24sCisgIHBjaWUzX3B3cmVuLCBwY2llM19wd3JmbHQsIHBjaWUzX2Nsa19yZXEsIHBzX2hvbGQKKworRXhhbXBsZToKKworCXBpbm11eDogcGluY3RybEA4MDAwMDAgeworCQljb21wYXRpYmxlID0gInFjb20saXBxODA2NC1waW5jdHJsIjsKKwkJcmVnID0gPDB4ODAwMDAwIDB4NDAwMD47CisKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MCAzMiAweDQ+OworCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZ3NiaTVfdWFydF9kZWZhdWx0PjsKKworCQlnc2JpNV91YXJ0X2RlZmF1bHQ6IGdzYmk1X3VhcnRfZGVmYXVsdCB7CisJCQltdXggeworCQkJCXBpbnMgPSAiZ3BpbzE4IiwgImdwaW8xOSI7CisJCQkJZnVuY3Rpb24gPSAiZ3NiaTUiOworCQkJfTsKKworCQkJdHggeworCQkJCXBpbnMgPSAiZ3BpbzE4IjsKKwkJCQlkcml2ZS1zdHJlbmd0aCA9IDw0PjsKKwkJCQliaWFzLWRpc2FibGU7CisJCQl9OworCisJCQlyeCB7CisJCQkJcGlucyA9ICJncGlvMTkiOworCQkJCWRyaXZlLXN0cmVuZ3RoID0gPDI+OworCQkJCWJpYXMtcHVsbC11cDsKKwkJCX07CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sbXNtODk3NC1waW5jdHJsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sbXNtODk3NC1waW5jdHJsLnR4dAppbmRleCA5ZmI4OWUzLi43MzI2MmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLG1zbTg5NzQtcGluY3RybC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvcWNvbSxtc204OTc0LXBpbmN0cmwudHh0CkBAIC01MCw3ICs1MCwyNyBAQAogICAgIFN1cHBvcnRzIGJpYXMgYW5kIGRyaXZlLXN0cmVuZ3RoCiAKIFZhbGlkIHZhbHVlcyBmb3IgZnVuY3Rpb24gYXJlOgotICBibHNwX2kyYzIsIGJsc3BfaTJjNiwgYmxzcF9pMmMxMSwgYmxzcF9zcGkxLCBibHNwX3VhcnQyLCBibHNwX3VhcnQ4LCBzbGltYnVzCisgIGNjaV9pMmMwLCBjY2lfaTJjMSwgdWltMSwgdWltMiwgdWltX2JhdHRfYWxhcm0sCisgIGJsc3BfdWltMSwgYmxzcF91YXJ0MSwgYmxzcF9pMmMxLCBibHNwX3NwaTEsCisgIGJsc3BfdWltMiwgYmxzcF91YXJ0MiwgYmxzcF9pMmMyLCBibHNwX3NwaTIsCisgIGJsc3BfdWltMywgYmxzcF91YXJ0MywgYmxzcF9pMmMzLCBibHNwX3NwaTMsCisgIGJsc3BfdWltNCwgYmxzcF91YXJ0NCwgYmxzcF9pMmM0LCBibHNwX3NwaTQsCisgIGJsc3BfdWltNSwgYmxzcF91YXJ0NSwgYmxzcF9pMmM1LCBibHNwX3NwaTUsCisgIGJsc3BfdWltNiwgYmxzcF91YXJ0NiwgYmxzcF9pMmM2LCBibHNwX3NwaTYsCisgIGJsc3BfdWltNywgYmxzcF91YXJ0NywgYmxzcF9pMmM3LCBibHNwX3NwaTcsCisgIGJsc3BfdWltOCwgYmxzcF91YXJ0OCwgYmxzcF9pMmM4LCBibHNwX3NwaTgsCisgIGJsc3BfdWltOSwgYmxzcF91YXJ0OSwgYmxzcF9pMmM5LCBibHNwX3NwaTksCisgIGJsc3BfdWltMTAsIGJsc3BfdWFydDEwLCBibHNwX2kyYzEwLCBibHNwX3NwaTEwLAorICBibHNwX3VpbTExLCBibHNwX3VhcnQxMSwgYmxzcF9pMmMxMSwgYmxzcF9zcGkxMSwKKyAgYmxzcF91aW0xMiwgYmxzcF91YXJ0MTIsIGJsc3BfaTJjMTIsIGJsc3Bfc3BpMTIsCisgIGJsc3Bfc3BpMV9jczEsIGJsc3Bfc3BpMl9jczIsIGJsc3Bfc3BpX2NzMywgYmxzcF9zcGkyX2NzMSwgYmxzcF9zcGkyX2NzMgorICBibHNwX3NwaTJfY3MzLCBibHNwX3NwaTEwX2NzMSwgYmxzcF9zcGkxMF9jczIsIGJsc3Bfc3BpMTBfY3MzLAorICBzZGMzLCBzZGM0LCBnY2NfZ3BfY2xrMSwgZ2NjX2dwX2NsazIsIGdjY19ncF9jbGszLCBjY2lfdGltZXIwLCBjY2lfdGltZXIxLAorICBjY2lfdGltZXIyLCBjY2lfdGltZXIzLCBjY2lfYXN5bmNfaW4wLCBjY2lfYXN5bmNfaW4xLCBjY2lfYXN5bmNfaW4yLAorICBjYW1fbWNrbDAsIGNhbV9tY2xrMSwgY2FtX21jbGsyLCBjYW1fbWNsazMsIG1kcF92c3luYywgaGRtaV9jZWMsIGhkbWlfZGRjLAorICBoZG1pX2hwZCwgZWRwX2hwZCwgZ3BfcGRtMCwgZ3BfcGRtMSwgZ3BfcGRtMiwgZ3BfcGRtMywgZ3AwX2NsaywgZ3AxX2NsaywKKyAgZ3BfbW4sIHRzaWYxLCB0c2lmMiwgaHNpYywgZ3JmYywgYXVkaW9fcmVmX2NsaywgcXVhX21pMnMsIHByaV9taTJzLCBzcGtyX21pMnMsCisgIHRlcl9taTJzLCBzZWNfbWkycywgYnQsIGZtLCB3bGFuLCBzbGltYnVzCiAKICAgKE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB5ZXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgZnVuY3Rpb25zKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcCxwaW5jdHJsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLHBpbmN0cmwudHh0CmluZGV4IGYzNzhkMzQuLmNlZmVmNzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLHBpbmN0cmwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLHBpbmN0cmwudHh0CkBAIC0yMSwxMyArMjEsMjMgQEAKIFJlcXVpcmVkIHByb3BlcnRpZXMgZm9yIGlvbXV4IGNvbnRyb2xsZXI6CiAgIC0gY29tcGF0aWJsZTogb25lIG9mICJyb2NrY2hpcCxyazI5MjgtcGluY3RybCIsICJyb2NrY2hpcCxyazMwNjZhLXBpbmN0cmwiCiAJCSAgICAgICAicm9ja2NoaXAscmszMDY2Yi1waW5jdHJsIiwgInJvY2tjaGlwLHJrMzE4OC1waW5jdHJsIgorICAtIHJvY2tjaGlwLGdyZjogcGhhbmRsZSByZWZlcmVuY2luZyBhIHN5c2NvbiBwcm92aWRpbmcgdGhlCisJICJnZW5lcmFsIHJlZ2lzdGVyIGZpbGVzIgorCitPcHRpb25hbCBwcm9wZXJ0aWVzIGZvciBpb211eCBjb250cm9sbGVyOgorICAtIHJvY2tjaGlwLHBtdTogcGhhbmRsZSByZWZlcmVuY2luZyBhIHN5c2NvbiBwcm92aWRpbmcgdGhlIHBtdSByZWdpc3RlcnMKKwkgYXMgc29tZSBTb0NzIGNhcnJ5IHBhcnRzIG9mIHRoZSBpb211eCBjb250cm9sbGVyIHJlZ2lzdGVycyB0aGVyZS4KKwkgUmVxdWlyZWQgZm9yIGF0IGxlYXN0IHJrMzE4OCBhbmQgcmszMjg4LgorCitEZXByZWNhdGVkIHByb3BlcnRpZXMgZm9yIGlvbXV4IGNvbnRyb2xsZXI6CiAgIC0gcmVnOiBmaXJzdCBlbGVtZW50IGlzIHRoZSBnZW5lcmFsIHJlZ2lzdGVyIHNwYWNlIG9mIHRoZSBpb211eCBjb250cm9sbGVyCi0JIHNlY29uZCBlbGVtZW50IGlzIHRoZSBzZXBhcmF0ZSBwdWxsIHJlZ2lzdGVyIHNwYWNlIG9mIHRoZSByazMxODgKKwkgSXQgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIGFsc28gc2VwYXJhdGUgcHVsbCByZWdpc3RlcnMuCisJIHNlY29uZCBlbGVtZW50IGlzIHRoZSBzZXBhcmF0ZSBwdWxsIHJlZ2lzdGVyIHNwYWNlIG9mIHRoZSByazMxODguCisJIFVzZSByb2NrY2hpcCxncmYgYW5kIHJvY2tjaGlwLHBtdSBkZXNjcmliZWQgYWJvdmUgaW5zdGVhZC4KIAogUmVxdWlyZWQgcHJvcGVydGllcyBmb3IgZ3BpbyBzdWIgbm9kZXM6CiAgIC0gY29tcGF0aWJsZTogInJvY2tjaGlwLGdwaW8tYmFuayIsICJyb2NrY2hpcCxyazMxODgtZ3Bpby1iYW5rMCIKICAgLSByZWc6IHJlZ2lzdGVyIG9mIHRoZSBncGlvIGJhbmsgKGRpZmZlcmVudCB0aGFuIHRoZSBpb211eCByZWdpc3RlcnNldCkKLSAgICAgICAgIHNlY29uZCBlbGVtZW50OiBzZXBhcmF0ZSBwdWxsIHJlZ2lzdGVyIGZvciByazMxODggYmFuazAKICAgLSBpbnRlcnJ1cHRzOiBiYXNlIGludGVycnVwdCBvZiB0aGUgZ3BpbyBiYW5rIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgogICAtIGNsb2NrczogY2xvY2sgdGhhdCBkcml2ZXMgdGhpcyBiYW5rCiAgIC0gZ3Bpby1jb250cm9sbGVyOiBpZGVudGlmaWVzIHRoZSBub2RlIGFzIGEgZ3BpbyBjb250cm9sbGVyIGFuZCBwaW4gYmFuay4KQEAgLTM5LDYgKzQ5LDEwIEBACiAgICAgY2VsbHMgc2hvdWxkIHVzZSB0aGUgc3RhbmRhcmQgdHdvLWNlbGwgc2NoZW1lIGRlc2NyaWJlZCBpbgogICAgIGJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2ludGVycnVwdHMudHh0CiAKK0RlcHJlY2F0ZWQgcHJvcGVydGllcyBmb3IgZ3BpbyBzdWIgbm9kZXM6CisgIC0gcmVnOiBzZWNvbmQgZWxlbWVudDogc2VwYXJhdGUgcHVsbCByZWdpc3RlciBmb3IgcmszMTg4IGJhbmswLCB1c2UKKwkgcm9ja2NoaXAscG11IGRlc2NyaWJlZCBhYm92ZSBpbnN0ZWFkCisKIFJlcXVpcmVkIHByb3BlcnRpZXMgZm9yIHBpbiBjb25maWd1cmF0aW9uIG5vZGU6CiAgIC0gcm9ja2NoaXAscGluczogMyBpbnRlZ2VycyBhcnJheSwgcmVwcmVzZW50cyBhIGdyb3VwIG9mIHBpbnMgbXV4IGFuZCBjb25maWcKICAgICBzZXR0aW5nLiBUaGUgZm9ybWF0IGlzIHJvY2tjaGlwLHBpbnMgPSA8UElOX0JBTksgUElOX0JBTktfSURYIE1VWCAmcGhhbmRsZT4uCkBAIC01NCw3ICs2OCw4IEBACiAKIHBpbmN0cmxAMjAwMDgwMDAgewogCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2YS1waW5jdHJsIjsKLQlyZWcgPSA8MHgyMDAwODAwMCAweDE1MD47CisJcm9ja2NoaXAsZ3JmID0gPCZncmY+OworCiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CiAJcmFuZ2VzOwpAQCAtMTAzLDE2ICsxMTgsMTUgQEAKIAogCXBpbmN0cmxAMjAwMDgwMDAgewogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzE4OC1waW5jdHJsIjsKLQkJcmVnID0gPDB4MjAwMDgwMDAgMHhhMD4sCi0JCSAgICAgIDwweDIwMDA4MTY0IDB4MWEwPjsKKwkJcm9ja2NoaXAsZ3JmID0gPCZncmY+OworCQlyb2NrY2hpcCxwbXUgPSA8JnBtdT47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzOwogCiAJCWdwaW8wOiBncGlvMEAweDIwMDBhMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMTg4LWdwaW8tYmFuazAiOwotCQkJcmVnID0gPDB4MjAwMGEwMDAgMHgxMDA+LAotCQkJICAgICAgPDB4MjAwMDQwNjQgMHg4PjsKKwkJCXJlZyA9IDwweDIwMDBhMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCWNsb2NrcyA9IDwmY2xrX2dhdGVzOCA5PjsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Jlc2V0L2tleXN0b25lLXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9yZXNldC9rZXlzdG9uZS1yZXNldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZjEyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9yZXNldC9rZXlzdG9uZS1yZXNldC50eHQKQEAgLTAsMCArMSw2NyBAQAorKiBEZXZpY2UgdHJlZSBiaW5kaW5ncyBmb3IgVGV4YXMgSW5zdHJ1bWVudHMga2V5c3RvbmUgcmVzZXQKKworVGhpcyBub2RlIGlzIGludGVuZGVkIHRvIGFsbG93IFNvQyByZXNldCBpbiBjYXNlIG9mIHNvZnR3YXJlIHJlc2V0CitvZiBzZWxlY3RlZCB3YXRjaGRvZ3MuCisKK1RoZSBLZXlzdG9uZSBTb0NzIGNhbiBjb250YWluIHVwIHRvIDQgd2F0Y2hkb2cgdGltZXJzIHRvIHJlc2V0CitTb0MuIEVhY2ggd2F0Y2hkb2cgdGltZXIgZXZlbnQgaW5wdXQgaXMgY29ubmVjdGVkIHRvIHRoZSBSZXNldCBNdXgKK2Jsb2NrLiBUaGUgUmVzZXQgTXV4IGJsb2NrIGNhbiBiZSBjb25maWd1cmVkIHRvIGNhdXNlIHJlc2V0IG9yIG5vdC4KKworQWRkaXRpb25hbGx5IHNvZnQgb3IgaGFyZCByZXNldCBjYW4gYmUgY29uZmlndXJlZC4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOgkJdGksa2V5c3RvbmUtcmVzZXQKKworLSB0aSxzeXNjb24tcGxsOglwaGFuZGxlL29mZnNldCBwYWlyLiBUaGUgcGhhbmRsZSB0byBzeXNjb24gdXNlZCB0bworCQkJYWNjZXNzIHBsbCBjb250cm9sbGVyIHJlZ2lzdGVycyBhbmQgdGhlIG9mZnNldCB0byB1c2UKKwkJCXJlc2V0IGNvbnRyb2wgcmVnaXN0ZXJzLgorCistIHRpLHN5c2Nvbi1kZXY6CXBoYW5kbGUvb2Zmc2V0IHBhaXIuIFRoZSBwaGFuZGxlIHRvIHN5c2NvbiB1c2VkIHRvCisJCQlhY2Nlc3MgZGV2aWNlIHN0YXRlIGNvbnRyb2wgcmVnaXN0ZXJzIGFuZCB0aGUgb2Zmc2V0CisJCQlpbiBvcmRlciB0byB1c2UgbXV4IGJsb2NrIHJlZ2lzdGVycyBmb3IgYWxsIHdhdGNoZG9ncy4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKworLSB0aSxzb2Z0LXJlc2V0OglCb29sZWFuIG9wdGlvbiBpbmRpY2F0aW5nIHNvZnQgcmVzZXQuCisJCQlCeSBkZWZhdWx0IGhhcmQgcmVzZXQgaXMgdXNlZC4KKworLSB0aSx3ZHQtbGlzdDoJCVdEVCBsaXN0IHRoYXQgY2FuIGNhdXNlIFNvQyByZXNldC4gSXQncyBub3QgcmVsYXRlZAorCQkJdG8gV0RUIGRyaXZlciwgaXQncyBqdXN0IG5lZWRlZCB0byBlbmFibGUgYSBTb0MgcmVsYXRlZAorCQkJcmVzZXQgdGhhdCdzIHRyaWdnZXJlZCBieSBvbmUgb2YgV0RUcy4gVGhlIGxpc3QgaXMKKwkJCWluIGZvcm1hdDogPDA+LCA8Mj47IEl0IGNhbiBiZSBpbiByYW5kb20gb3JkZXIgYW5kCisJCQliZWdpbnMgZnJvbSAwIHRvIDMsIGFzIGtleXN0b25lIGNhbiBjb250YWluIHVwIHRvIDQgU29DCisJCQlyZXNldCB3YXRjaGRvZ3MgYW5kIGNhbiBiZSBpbiByYW5kb20gb3JkZXIuCisKK0V4YW1wbGUgMToKK1NldHVwIGtleXN0b25lIHJlc2V0IHNvIHRoYXQgaW4gY2FzZSBzb2Z0d2FyZSByZXNldCBvcgorV0RUMCBpcyB0cmlnZ2VyZWQgaXQgaXNzdWVzIGhhcmQgcmVzZXQgZm9yIFNvQy4KKworcGxsY3RybDogcGxsLWNvbnRyb2xsZXJAMDIzMTAwMDAgeworCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcGxsY3RybCIsICJzeXNjb24iOworCXJlZyA9IDwweDAyMzEwMDAwIDB4MjAwPjsKK307CisKK2RldmN0cmw6IGRldmljZS1zdGF0ZS1jb250cm9sQDAyNjIwMDAwIHsKKwljb21wYXRpYmxlID0gInRpLGtleXN0b25lLWRldmN0cmwiLCAic3lzY29uIjsKKwlyZWcgPSA8MHgwMjYyMDAwMCAweDEwMDA+OworfTsKKworcnN0Y3RybDogcmVzZXQtY29udHJvbGxlciB7CisJY29tcGF0aWJsZSA9ICJ0aSxrZXlzdG9uZS1yZXNldCI7CisJdGksc3lzY29uLXBsbCA9IDwmcGxsY3RybCAweGU0PjsKKwl0aSxzeXNjb24tZGV2ID0gPCZkZXZjdHJsIDB4MzI4PjsKKwl0aSx3ZHQtbGlzdCA9IDwwPjsKK307CisKK0V4YW1wbGUgMjoKK1NldHVwIGtleXN0b25lIHJlc2V0IHNvIHRoYXQgaW4gY2FzZSBvZiBzb2Z0d2FyZSByZXNldCBvcgorV0RUMCBvciBXRFQyIGlzIHRyaWdnZXJlZCBpdCBpc3N1ZXMgc29mdCByZXNldCBmb3IgU29DLgorCityc3RjdHJsOiByZXNldC1jb250cm9sbGVyIHsKKwljb21wYXRpYmxlID0gInRpLGtleXN0b25lLXJlc2V0IjsKKwl0aSxzeXNjb24tcGxsID0gPCZwbGxjdHJsIDB4ZTQ+OworCXRpLHN5c2Nvbi1kZXYgPSA8JmRldmN0cmwgMHgzMjg+OworCXRpLHdkdC1saXN0ID0gPDA+LCA8Mj47CisJdGksc29mdC1yZXNldDsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJfc3VwcGx5L2F4eGlhLXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcl9zdXBwbHkvYXh4aWEtcmVzZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTcyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJfc3VwcGx5L2F4eGlhLXJlc2V0LnR4dApAQCAtMCwwICsxLDIwIEBACitBeHhpYSBSZXN0YXJ0IERyaXZlcgorCitUaGlzIGRyaXZlciBjYW4gZG8gcmVzZXQgb2YgdGhlIEF4eGlhIFNvQy4gSXQgdXNlcyB0aGUgcmVnaXN0ZXJzIGluIHRoZSBzeXNjb24KK2Jsb2NrIHRvIGluaXRpYXRlIGEgY2hpcCByZXNldC4KKworUmVxdWlyZWQgUHJvcGVydGllczoKKyAgLWNvbXBhdGlibGU6ICJsc2ksYXhtNTV4eC1yZXNldCIKKyAgLXN5c2NvbjogcGhhbmRsZSB0byB0aGUgc3lzY29uIG5vZGUuCisKK0V4YW1wbGU6CisKKwlzeXNjb246IHN5c2NvbkAyMDEwMDMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJsc2ksYXh4aWEtc3lzY29uIiwgInN5c2NvbiI7CisJCXJlZyA9IDwweDIwIDB4MTAwMzAwMDAgMCAweDIwMDA+OworCX07CisKKwlyZXNldDogcmVzZXRAMjAxMDAzMTAwMCB7CisJCWNvbXBhdGlibGUgPSAibHNpLGF4bTU1eHgtcmVzZXQiOworCQlzeXNjb24gPSA8JnN5c2Nvbj47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9yZWJvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3JlYm9vdC50eHQKaW5kZXggZDcyMTcyNi4uNWJjNjM1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3JlYm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3JlYm9vdC50eHQKQEAgLTEsNyArMSw3IEBACiBSZWJvb3QgcHJvcGVydHkgdG8gY29udHJvbCBzeXN0ZW0gcmVib290IG9uIFBQQzR4eCBzeXN0ZW1zOgogCiBCeSBzZXR0aW5nICJyZXNldF90eXBlIiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMsIHRoZSBkZWZhdWx0Ci1zb2Z0d2FyZSByZXNldCBtZWNoYW5pc20gbWF5IGJlIG92ZXJpZGRlbi4gSGVyZSB0aGUgcG9zc2libGUgdmFsdWVzIG9mCitzb2Z0d2FyZSByZXNldCBtZWNoYW5pc20gbWF5IGJlIG92ZXJyaWRkZW4uIEhlcmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZgogInJlc2V0X3R5cGUiOgogCiAgICAgICAxIC0gUFBDNHh4IGNvcmUgcmVzZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kY3NyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kY3NyLnR4dAppbmRleCA5ZDU0ZWI1Li4xOGE4ODEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZGNzci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2Rjc3IudHh0CkBAIC04Miw3ICs4Miw3IEBACiAJV2hpY2ggZXZlbnQgc291cmNlIGFzc2VydGVkIHRoZSBpbnRlcnJ1cHQgaXMgY2FwdHVyZWQgaW4gYW4gRVBVCiAJSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAoRVBJU1IwLEVQSVNSMSkuCiAKLQlJbnRlcnJ1cHQgbnVtYmVycyBhcmUgbGlzZWQgaW4gb3JkZXIgKHBlcmZtb24sIGV2ZW50MCwgZXZlbnQxKS4KKwlJbnRlcnJ1cHQgbnVtYmVycyBhcmUgbGlzdGVkIGluIG9yZGVyIChwZXJmbW9uLCBldmVudDAsIGV2ZW50MSkuCiAKIAktIGludGVycnVwdC1wYXJlbnQKIAlVc2FnZTogcmVxdWlyZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvbHRjMzU4OS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2x0YzM1ODkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTA1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2x0YzM1ODkudHh0CkBAIC0wLDAgKzEsOTkgQEAKK0xpbmVhciBUZWNobm9sb2d5IExUQzM1ODksIExUQzM1ODktMSwgYW5kIExUQzM1ODktMiA4LW91dHB1dCByZWd1bGF0b3JzCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6ICJsbHRjLGx0YzM1ODkiLCAibGx0YyxsdGMzNTg5LTEiIG9yICJsbHRjLGx0YzM1ODktMiIKKy0gcmVnOiBJMkMgc2xhdmUgYWRkcmVzcworCitSZXF1aXJlZCBjaGlsZCBub2RlOgorLSByZWd1bGF0b3JzOiBDb250YWlucyBlaWdodCByZWd1bGF0b3IgY2hpbGQgbm9kZXMgc3cxLCBzdzIsIHN3MywgYmItb3V0LAorICBsZG8xLCBsZG8yLCBsZG8zLCBhbmQgbGRvNCwgc3BlY2lmeWluZyB0aGUgaW5pdGlhbGl6YXRpb24gZGF0YSBhcworICBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dC4KKworRWFjaCByZWd1bGF0b3IgaXMgZGVmaW5lZCB1c2luZyB0aGUgc3RhbmRhcmQgYmluZGluZyBmb3IgcmVndWxhdG9ycy4gVGhlCitub2RlcyBmb3Igc3cxLCBzdzIsIHN3MywgYmItb3V0LCBsZG8xLCBhbmQgbGRvMiBhZGRpdGlvbmFsbHkgbmVlZCB0byBzcGVjaWZ5Cit0aGUgcmVzaXN0b3IgdmFsdWVzIG9mIHRoZWlyIGV4dGVybmFsIGZlZWRiYWNrIHZvbHRhZ2UgZGl2aWRlcnM6CisKK1JlcXVpcmVkIHByb3BlcnRpZXMgKG5vdCBvbiBsZG8zLCBsZG80KToKKy0gbGx0YyxmYi12b2x0YWdlLWRpdmlkZXI6IEFuIGFycmF5IG9mIHR3byBpbnRlZ2VycyBjb250YWluaW5nIHRoZSByZXNpc3RvcgorICB2YWx1ZXMgUjEgYW5kIFIyIG9mIHRoZSBmZWVkYmFjayB2b2x0YWdlIGRpdmlkZXIgaW4gb2htcy4KKworUmVndWxhdG9ycyBzdzEsIHN3Miwgc3czLCBhbmQgbGRvMiBjYW4gcmVndWxhdGUgdGhlIGZlZWRiYWNrIHJlZmVyZW5jZSBmcm9tCiswLjM2MjUgViB0byAwLjc1IFYgaW4gMTIuNSBtViBzdGVwcy4gVGhlIG91dHB1dCB2b2x0YWdlIHRodXMgcmFuZ2VzIGJldHdlZW4KKzAuMzYyNSAqICgxICsgUjEvUjIpIFYgYW5kIDAuNzUgKiAoMSArIFIxL1IyKSBWLiBSZWd1bGF0b3JzIGJiLW91dCBhbmQgbGRvMQoraGF2ZSBhIGZpeGVkIDAuOCBWIHJlZmVyZW5jZSBhbmQgdGh1cyBvdXRwdXQgMC44ICogKDEgKyBSMS9SMikgVi4gVGhlIGxkbzMKK3JlZ3VsYXRvciBpcyBmaXhlZCB0byAxLjggViBvbiBMVEMzNTg5IGFuZCB0byAyLjggViBvbiBMVEMzNTg5LTEsMi4gVGhlIGxkbzQKK3JlZ3VsYXRvciBjYW4gb3V0cHV0IGJldHdlZW4gMS44IFYgYW5kIDMuMyBWIG9uIExUQzM1ODkgYW5kIGJldHdlZW4gMS4yIFYKK2FuZCAzLjIgViBvbiBMVEMzNTg5LTEsMiBpbiBmb3VyIHN0ZXBzLiBUaGUgbGRvMSBzdGFuZGJ5IHJlZ3VsYXRvciBjYW4gbm90CitiZSBkaXNhYmxlZCBhbmQgdGh1cyBzaG91bGQgaGF2ZSB0aGUgcmVndWxhdG9yLWFsd2F5cy1vbiBwcm9wZXJ0eSBzZXQuCisKK0V4YW1wbGU6CisKKwlsdGMzNTg5OiBwbWljQDM0IHsKKwkJY29tcGF0aWJsZSA9ICJsbHRjLGx0YzM1ODktMSI7CisJCXJlZyA9IDwweDM0PjsKKworCQlyZWd1bGF0b3JzIHsKKwkJCXN3MV9yZWc6IHN3MSB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTkxOTMwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjI0NjcxPjsKKwkJCQlsbHRjLGZiLXZvbHRhZ2UtZGl2aWRlciA9IDwxMDAwMDAgMTU4MDAwPjsKKwkJCQlyZWd1bGF0b3ItcmFtcC1kZWxheSA9IDw3MDAwPjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJc3cyX3JlZzogc3cyIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDQxMjM+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE0NTY4MDM+OworCQkJCWxsdGMsZmItdm9sdGFnZS1kaXZpZGVyID0gPDE4MDAwMCAxOTEwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDcwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlzdzNfcmVnOiBzdzMgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNDEyNTA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI3NzUwMDA+OworCQkJCWxsdGMsZmItdm9sdGFnZS1kaXZpZGVyID0gPDI3MDAwMCAxMDAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDcwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQliYl9vdXRfcmVnOiBiYi1vdXQgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzODczNDE+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzODczNDE+OworCQkJCWxsdGMsZmItdm9sdGFnZS1kaXZpZGVyID0gPDUxMTAwMCAxNTgwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG8xX3JlZzogbGRvMSB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTMwNjMyOT47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwNjMyOT47CisJCQkJbGx0YyxmYi12b2x0YWdlLWRpdmlkZXIgPSA8MTAwMDAwIDE1ODAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzJfcmVnOiBsZG8yIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDQxMjM+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE0NTY4MDY+OworCQkJCWxsdGMsZmItdm9sdGFnZS1kaXZpZGVyID0gPDE4MDAwMCAxOTEwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDcwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG8zX3JlZzogbGRvMyB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCisJCQlsZG80X3JlZzogbGRvNCB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzIwMDAwMD47CisJCQl9OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKaW5kZXggZTJjN2YxZS4uODYwNzQzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dApAQCAtMTIsNyArMTIsNyBAQAogLSByZWd1bGF0b3ItYWxsb3ctYnlwYXNzOiBhbGxvdyB0aGUgcmVndWxhdG9yIHRvIGdvIGludG8gYnlwYXNzIG1vZGUKIC0gPG5hbWU+LXN1cHBseTogcGhhbmRsZSB0byB0aGUgcGFyZW50IHN1cHBseS9yZWd1bGF0b3Igbm9kZQogLSByZWd1bGF0b3ItcmFtcC1kZWxheTogcmFtcCBkZWxheSBmb3IgcmVndWxhdG9yKGluIHVWL3VTKQotICBGb3IgaGFyZHdhcmVzIHdoaWNoIHN1cHBvcnQgZGlzYWJsaW5nIHJhbXAgcmF0ZSwgaXQgc2hvdWxkIGJlIGV4cGxpY2l0bHkKKyAgRm9yIGhhcmR3YXJlIHdoaWNoIHN1cHBvcnRzIGRpc2FibGluZyByYW1wIHJhdGUsIGl0IHNob3VsZCBiZSBleHBsaWNpdGx5CiAgIGludGlhbGlzZWQgdG8gemVybyAocmVndWxhdG9yLXJhbXAtZGVsYXkgPSA8MD4pIGZvciBkaXNhYmxpbmcgcmFtcCBkZWxheS4KIC0gcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5OiBUaGUgdGltZSB0YWtlbiwgaW4gbWljcm9zZWNvbmRzLCBmb3IgdGhlIHN1cHBseQogICByYWlsIHRvIHJlYWNoIHRoZSB0YXJnZXQgdm9sdGFnZSwgcGx1cy9taW51cyB3aGF0ZXZlciB0b2xlcmFuY2UgdGhlIGJvYXJkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3RwczY1MDkwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvdHBzNjUwOTAudHh0CmluZGV4IDMxM2E2MGIuLjM0MDk4MDIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3RwczY1MDkwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3RwczY1MDkwLnR4dApAQCAtMjEsNiArMjEsMTAgQEAKICAgbnVtYmVyIHNob3VsZCBiZSBwcm92aWRlZC4gSWYgaXQgaXMgZXh0ZXJuYWxseSBjb250cm9sbGVkIGFuZCBubyBHUElPCiAgIGVudHJ5IHRoZW4gZHJpdmVyIHdpbGwganVzdCBjb25maWd1cmUgdGhpcyByYWlscyBhcyBleHRlcm5hbCBjb250cm9sCiAgIGFuZCB3aWxsIG5vdCBwcm92aWRlIGFueSBlbmFibGUvZGlzYWJsZSBBUElzLgorLSB0aSxvdmVyY3VycmVudC13YWl0OiBUaGlzIGlzIGFwcGxpY2FibGUgdG8gRkVUIHJlZ2lzdGVycywgd2hpY2ggaGF2ZSBhCisgIHBvb3JseSBkZWZpbmVkICJvdmVyY3VycmVudCB3YWl0IiBmaWVsZC4gIElmIHRoaXMgcHJvcGVydHkgaXMgcHJlc2VudCBpdAorICBzaG91bGQgYmUgYmV0d2VlbiAwIC0gMy4gIElmIHRoaXMgcHJvcGVydHkgaXNuJ3QgcHJlc2VudCB3ZSB3b24ndCB0b3VjaCB0aGUKKyAgIm92ZXJjdXJyZW50IHdhaXQiIGZpZWxkIGFuZCB3ZSdsbCBsZWF2ZSBpdCB0byB0aGUgQklPUy9FQyB0byBkZWFsIHdpdGguCiAKIEVhY2ggcmVndWxhdG9yIGlzIGRlZmluZWQgdXNpbmcgdGhlIHN0YW5kYXJkIGJpbmRpbmcgZm9yIHJlZ3VsYXRvcnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9hbGx3aW5uZXIsc3VueGktY2xvY2stcmVzZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L2FsbHdpbm5lcixzdW54aS1jbG9jay1yZXNldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmNzc1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9hbGx3aW5uZXIsc3VueGktY2xvY2stcmVzZXQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0FsbHdpbm5lciBzdW54aSBQZXJpcGhlcmFsIFJlc2V0IENvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUGxlYXNlIGFsc28gcmVmZXIgdG8gcmVzZXQudHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBjb21tb24gcmVzZXQKK2NvbnRyb2xsZXIgYmluZGluZyB1c2FnZS4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAiYWxsd2lubmVyLHN1bjZpLWEzMS1haGIxLXJlc2V0IgorICAiYWxsd2lubmVyLHN1bjZpLWEzMS1jbG9jay1yZXNldCIKKy0gcmVnOiBzaG91bGQgYmUgcmVnaXN0ZXIgYmFzZSBhbmQgbGVuZ3RoIGFzIGRvY3VtZW50ZWQgaW4gdGhlCisgIGRhdGFzaGVldAorLSAjcmVzZXQtY2VsbHM6IDEsIHNlZSBiZWxvdworCitleGFtcGxlOgorCithaGIxX3JzdDogcmVzZXRAMDFjMjAyYzAgeworCSNyZXNldC1jZWxscyA9IDwxPjsKKwljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtYWhiMS1yZXNldCI7CisJcmVnID0gPDB4MDFjMjAyYzAgMHhjPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FsdGVyYS9zb2NmcGdhLXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9zb2NmcGdhLXJlc2V0LnR4dApzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FsdGVyYS9zb2NmcGdhLXJlc2V0LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L3NvY2ZwZ2EtcmVzZXQudHh0CmluZGV4IGVjZGI1N2QuLjMyYzFjOGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYWx0ZXJhL3NvY2ZwZ2EtcmVzZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9zb2NmcGdhLXJlc2V0LnR4dApAQCAtMyw5ICszLDExIEBACiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogLSBjb21wYXRpYmxlIDogImFsdHIscnN0LW1nciIKIC0gcmVnIDogU2hvdWxkIGNvbnRhaW4gMSByZWdpc3RlciByYW5nZXMoYWRkcmVzcyBhbmQgbGVuZ3RoKQorLSAjcmVzZXQtY2VsbHM6IDEKIAogRXhhbXBsZToKIAkgcnN0bWdyQGZmZDA1MDAwIHsKKwkJI3Jlc2V0LWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImFsdHIscnN0LW1nciI7CiAJCXJlZyA9IDwweGZmZDA1MDAwIDB4MTAwMD47CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zZXJpYWwvYXRtZWwtdXNhcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlhbC9hdG1lbC11c2FydC50eHQKaW5kZXggMTdjMTA0Mi4uYTYzOTFlNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlhbC9hdG1lbC11c2FydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlhbC9hdG1lbC11c2FydC50eHQKQEAgLTEzLDggKzEzLDkgQEAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGF0bWVsLHVzZS1kbWEtcng6IHVzZSBvZiBQREMgb3IgRE1BIGZvciByZWNlaXZpbmcgZGF0YQogLSBhdG1lbCx1c2UtZG1hLXR4OiB1c2Ugb2YgUERDIG9yIERNQSBmb3IgdHJhbnNtaXR0aW5nIGRhdGEKLS0gcnRzLWdwaW9zOiBzcGVjaWZ5IGEgR1BJTyBmb3IgUlRTIGxpbmUuIEl0IHdpbGwgdXNlIHNwZWNpZmllZCBQSU8gaW5zdGVhZCBvZiB0aGUgcGVyaXBoZXJhbAotICBmdW5jdGlvbiBwaW4gZm9yIHRoZSBVU0FSVCBSVFMgZmVhdHVyZS4gSWYgdW5zdXJlLCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuCistIHtydHMsY3RzLGR0cixkc3Iscm5nLGRjZH0tZ3Bpb3M6IHNwZWNpZnkgYSBHUElPIGZvciBSVFMvQ1RTL0RUUi9EU1IvUkkvRENEIGxpbmUgcmVzcGVjdGl2ZWx5LgorICBJdCB3aWxsIHVzZSBzcGVjaWZpZWQgUElPIGluc3RlYWQgb2YgdGhlIHBlcmlwaGVyYWwgZnVuY3Rpb24gcGluIGZvciB0aGUgVVNBUlQgZmVhdHVyZS4KKyAgSWYgdW5zdXJlLCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuCiAtIGFkZCBkbWEgYmluZGluZ3MgZm9yIGRtYSB0cmFuc2ZlcjoKIAktIGRtYXM6IERNQSBzcGVjaWZpZXIsIGNvbnNpc3Rpbmcgb2YgYSBwaGFuZGxlIHRvIERNQSBjb250cm9sbGVyIG5vZGUsCiAJCW1lbW9yeSBwZXJpcGhlcmFsIGludGVyZmFjZSBhbmQgVVNBUlQgRE1BIGNoYW5uZWwgSUQsIEZJRk8gY29uZmlndXJhdGlvbi4KQEAgLTM1LDcgKzM2LDEyIEBACiAJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJYXRtZWwsdXNlLWRtYS1yeDsKIAkJYXRtZWwsdXNlLWRtYS10eDsKLQkJcnRzLWdwaW9zID0gPCZwaW9EIDE1IDA+OworCQlydHMtZ3Bpb3MgPSA8JnBpb0QgMTUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJY3RzLWdwaW9zID0gPCZwaW9EIDE2IEdQSU9fQUNUSVZFX0xPVz47CisJCWR0ci1ncGlvcyA9IDwmcGlvRCAxNyBHUElPX0FDVElWRV9MT1c+OworCQlkc3ItZ3Bpb3MgPSA8JnBpb0QgMTggR1BJT19BQ1RJVkVfTE9XPjsKKwkJZGNkLWdwaW9zID0gPCZwaW9EIDIwIEdQSU9fQUNUSVZFX0xPVz47CisJCXJuZy1ncGlvcyA9IDwmcGlvRCAxOSBHUElPX0FDVElWRV9MT1c+OwogCX07CiAKIC0gdXNlIERNQToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zZXJpYWwvbnhwLHNjMTZpczd4eC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL254cCxzYzE2aXM3eHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmM3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL254cCxzYzE2aXM3eHgudHh0CkBAIC0wLDAgKzEsMzMgQEAKKyogTlhQIFNDMTZJUzd4eCBhZHZhbmNlZCBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyLVRyYW5zbWl0dGVyIChVQVJUKQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgIC0gIm54cCxzYzE2aXM3NDAiIGZvciBOWFAgU0MxNklTNzQwLAorICAtICJueHAsc2MxNmlzNzQxIiBmb3IgTlhQIFNDMTZJUzc0MSwKKyAgLSAibnhwLHNjMTZpczc1MCIgZm9yIE5YUCBTQzE2SVM3NTAsCisgIC0gIm54cCxzYzE2aXM3NTIiIGZvciBOWFAgU0MxNklTNzUyLAorICAtICJueHAsc2MxNmlzNzYwIiBmb3IgTlhQIFNDMTZJUzc2MCwKKyAgLSAibnhwLHNjMTZpczc2MiIgZm9yIE5YUCBTQzE2SVM3NjIuCistIHJlZzogSTJDIGFkZHJlc3Mgb2YgdGhlIFNDMTZJUzd4eCBkZXZpY2UuCistIGludGVycnVwdC1wYXJlbnQ6IFRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIElDLgorLSBpbnRlcnJ1cHRzOiBTaG91bGQgY29udGFpbiB0aGUgVUFSVCBpbnRlcnJ1cHQKKy0gY2xvY2tzOiBSZWZlcmVuY2UgdG8gdGhlIElDIHNvdXJjZSBjbG9jay4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZ3Bpby1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIG5vZGUgYXMgYSBHUElPIGNvbnRyb2xsZXIuCistICNncGlvLWNlbGxzOiBTaG91bGQgYmUgdHdvLiBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgR1BJTyBudW1iZXIgYW5kCisgIHRoZSBzZWNvbmQgY2VsbCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIEdQSU8gcG9sYXJpdHk6CisgICAgMCA9IGFjdGl2ZSBoaWdoLAorICAgIDEgPSBhY3RpdmUgbG93LgorCitFeGFtcGxlOgorICAgICAgICBzYzE2aXM3NTA6IHNjMTZpczc1MEA1MSB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzUwIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MHg1MT47CisgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZjbGsyMG0+OworICAgICAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8zPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsKKyAgICAgICAgICAgICAgICBncGlvLWNvbnRyb2xsZXI7CisgICAgICAgICAgICAgICAgI2dwaW8tY2VsbHMgPSA8Mj47CisgICAgICAgIH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL29mLXNlcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL29mLXNlcmlhbC50eHQKaW5kZXggMTkyOGEzZS4uNzcwNTQ3NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlhbC9vZi1zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zZXJpYWwvb2Ytc2VyaWFsLnR4dApAQCAtMzcsNiArMzcsNyBAQAogLSBhdXRvLWZsb3ctY29udHJvbDogb25lIHdheSB0byBlbmFibGUgYXV0b21hdGljIGZsb3cgY29udHJvbCBzdXBwb3J0LiBUaGUKICAgZHJpdmVyIGlzIGFsbG93ZWQgdG8gZGV0ZWN0IHN1cHBvcnQgZm9yIHRoZSBjYXBhYmlsaXR5IGV2ZW4gd2l0aG91dCB0aGlzCiAgIHByb3BlcnR5LgorLSBoYXMtaHctZmxvdy1jb250cm9sOiB0aGUgaGFyZHdhcmUgaGFzIGZsb3cgY29udHJvbCBjYXBhYmlsaXR5LgogCiBFeGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL3JlbmVzYXMsc2NpLXNlcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL3JlbmVzYXMsc2NpLXNlcmlhbC50eHQKaW5kZXggNTNlNmMxNy4uNjRmZDdkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlhbC9yZW5lc2FzLHNjaS1zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zZXJpYWwvcmVuZXNhcyxzY2ktc2VyaWFsLnR4dApAQCAtNCw2ICs0LDcgQEAKIAogICAtIGNvbXBhdGlibGU6IE11c3QgY29udGFpbiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAorICAgIC0gInJlbmVzYXMsc2NpZi1yOGE3Nzc5IiBmb3IgUjhBNzc3OSAoUi1DYXIgSDEpIFNDSUYgY29tcGF0aWJsZSBVQVJULgogICAgIC0gInJlbmVzYXMsc2NpZi1yOGE3NzkwIiBmb3IgUjhBNzc5MCAoUi1DYXIgSDIpIFNDSUYgY29tcGF0aWJsZSBVQVJULgogICAgIC0gInJlbmVzYXMsc2NpZmEtcjhhNzc5MCIgZm9yIFI4QTc3OTAgKFItQ2FyIEgyKSBTQ0lGQSBjb21wYXRpYmxlIFVBUlQuCiAgICAgLSAicmVuZXNhcyxzY2lmYi1yOGE3NzkwIiBmb3IgUjhBNzc5MCAoUi1DYXIgSDIpIFNDSUZCIGNvbXBhdGlibGUgVUFSVC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb2MvcWNvbS9xY29tLGdzYmkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvYy9xY29tL3Fjb20sZ3NiaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlMjRkNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb2MvcWNvbS9xY29tLGdzYmkudHh0CkBAIC0wLDAgKzEsNzggQEAKK1FDT00gR1NCSSAoR2VuZXJhbCBTZXJpYWwgQnVzIEludGVyZmFjZSkgRHJpdmVyCisKK1RoZSBHU0JJIGNvbnRyb2xsZXIgaXMgbW9kZWxlZCBhcyBhIG5vZGUgd2l0aCB6ZXJvIG9yIG1vcmUgY2hpbGQgbm9kZXMsIGVhY2gKK3JlcHJlc2VudGluZyBhIHNlcmlhbCBzdWItbm9kZSBkZXZpY2UgdGhhdCBpcyBtdXgnZCBhcyBwYXJ0IG9mIHRoZSBHU0JJCitjb25maWd1cmF0aW9uIHNldHRpbmdzLiAgVGhlIG1vZGUgc2V0dGluZyB3aWxsIGdvdmVybiB0aGUgaW5wdXQvb3V0cHV0IG1vZGUgb2YKK3RoZSA0IEdTQkkgSU9zLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBtdXN0IGNvbnRhaW4gInFjb20sZ3NiaS12MS4wLjAiIGZvciBBUFE4MDY0L0lQUTgwNjQKKy0gcmVnOiBBZGRyZXNzIHJhbmdlIGZvciBHU0JJIHJlZ2lzdGVycworLSBjbG9ja3M6IHJlcXVpcmVkIGNsb2NrCistIGNsb2NrLW5hbWVzOiBtdXN0IGNvbnRhaW4gImlmYWNlIiBlbnRyeQorLSBxY29tLG1vZGUgOiBpbmRpY2F0ZXMgTVVYIHZhbHVlIGZvciBjb25maWd1cmF0aW9uIG9mIHRoZSBzZXJpYWwgaW50ZXJmYWNlLgorICBQbGVhc2UgcmVmZXJlbmNlIGR0LWJpbmRpbmdzL3NvYy9xY29tLGdzYmkuaCBmb3IgdmFsaWQgbXV4IHZhbHVlcy4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gcWNvbSxjcmNpIDogaW5kaWNhdGVzIENSQ0kgTVVYIHZhbHVlIGZvciBRVVAgQ1JDSSBwb3J0cy4gIFBsZWFzZSByZWZlcmVuY2UKKyAgZHQtYmluZGluZ3Mvc29jL3Fjb20sZ3NiaS5oIGZvciB2YWxpZCBDUkNJIG11eCB2YWx1ZXMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXMgaWYgY2hpbGQgbm9kZSBleGlzdHM6CistICNhZGRyZXNzLWNlbGxzOiBNdXN0IGJlIDEKKy0gI3NpemUtY2VsbHM6IE11c3QgYmUgMQorLSByYW5nZXM6IE11c3QgYmUgcHJlc2VudAorCitQcm9wZXJ0aWVzIGZvciBjaGlsZHJlbjoKKworQSBHU0JJIGNvbnRyb2xsZXIgbm9kZSBjYW4gY29udGFpbiAwIG9yIG1vcmUgY2hpbGQgbm9kZXMgcmVwcmVzZW50aW5nIHNlcmlhbAorZGV2aWNlcy4gIFRoZXNlIHNlcmlhbCBkZXZpY2VzIGNhbiBiZSBhIFFDT00gVUFSVCwgSTJDIGNvbnRyb2xsZXIsIHNwaQorY29udHJvbGxlciwgb3Igc29tZSBjb21iaW5hdGlvbiBvZiBhZm9yZW1lbnRpb25lZCBkZXZpY2VzLgorCitTZWUgdGhlIGZvbGxvd2luZyBmb3IgY2hpbGQgbm9kZSBkZWZpbml0aW9uczoKK0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvcWNvbSxpMmMtcXVwLnR4dAorRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9xY29tLHNwaS1xdXAudHh0CitEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaWFsL3Fjb20sbXNtLXVhcnRkbS50eHQKKworRXhhbXBsZSBmb3IgQVBRODA2NDoKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3NvYy9xY29tLGdzYmkuaD4KKworCWdzYmk0QDE2MzAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJxY29tLGdzYmktdjEuMC4wIjsKKwkJcmVnID0gPDB4MTYzMDAwMDAgMHgxMDA+OworCQljbG9ja3MgPSA8JmdjYyBHU0JJNF9IX0NMSz47CisJCWNsb2NrLW5hbWVzID0gImlmYWNlIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCXFjb20sbW9kZSA9IDxHU0JJX1BST1RfSTJDX1VBUlQ+OworCQlxY29tLGNyY2kgPSA8R1NCSV9DUkNJX1FVUD47CisKKwkJLyogY2hpbGQgbm9kZXMgZ28gdW5kZXIgaGVyZSAqLworCisJCWkyY19xdXA0OiBpMmNAMTYzODAwMDAgeworCQkgICAgICAgIGNvbXBhdGlibGUgPSAicWNvbSxpMmMtcXVwLXYxLjEuMSI7CisJCSAgICAgICAgcmVnID0gPDB4MTYzODAwMDAgMHgxMDAwPjsKKwkJICAgICAgICBpbnRlcnJ1cHRzID0gPDAgMTUzIDA+OworCisJCSAgICAgICAgY2xvY2tzID0gPCZnY2MgR1NCSTRfUVVQX0NMSz4sIDwmZ2NjIEdTQkk0X0hfQ0xLPjsKKwkJICAgICAgICBjbG9jay1uYW1lcyA9ICJjb3JlIiwgImlmYWNlIjsKKworCQkgICAgICAgIGNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDA+OworCisJCSAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSAgICAgICAgI3NpemUtY2VsbHMgPSA8MD47CisKKwkJIH07CisKKwkJdWFydDQ6CXNlcmlhbEAxNjM0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sbXNtLXVhcnRkbS12MS4zIiwgInFjb20sbXNtLXVhcnRkbSI7CisJCQlyZWcgPSA8MHgxNjM0MDAwMCAweDEwMDA+LAorCQkJCTwweDE2MzAwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTUyIDB4MD47CisJCQljbG9ja3MgPSA8JmdjYyBHU0JJNF9VQVJUX0NMSz4sIDwmZ2NjIEdTQkk0X0hfQ0xLPjsKKwkJCWNsb2NrLW5hbWVzID0gImNvcmUiLCAiaWZhY2UiOworCQkJc3RhdHVzID0gIm9rIjsKKwkJfTsKKwl9OworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL2ZzbC1zcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9mc2wtc3BpLnR4dAppbmRleCBiMDMyZGQ3Li5hMjMzMTM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL2ZzbC1zcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvZnNsLXNwaS50eHQKQEAgLTQyLDYgKzQyLDEwIEBACiAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiBlU1BJIGludGVycnVwdCwgdGhlIGRldmljZSBoYXMgb25lIGludGVycnVwdC4KIC0gZnNsLGVzcGktbnVtLWNoaXBzZWxlY3RzIDogdGhlIG51bWJlciBvZiB0aGUgY2hpcHNlbGVjdCBzaWduYWxzLgogCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBmc2wsY3NiZWY6IGNoaXAgc2VsZWN0IGFzc2VydGlvbiB0aW1lIGluIGJpdHMgYmVmb3JlIGZyYW1lIHN0YXJ0cworLSBmc2wsY3NhZnQ6IGNoaXAgc2VsZWN0IG5lZ2F0aW9uIHRpbWUgaW4gYml0cyBhZnRlciBmcmFtZSBlbmRzCisKIEV4YW1wbGU6CiAJc3BpQDExMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNTEsNCArNTUsNiBAQAogCQlpbnRlcnJ1cHRzID0gPDUzIDB4Mj47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlmc2wsZXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8ND47CisJCWZzbCxjc2JlZiA9IDwxPjsKKwkJZnNsLGNzYWZ0ID0gPDE+OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1idXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktYnVzLnR4dAppbmRleCBlNWE0ZDFiLi5iYmFhODU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1idXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWJ1cy50eHQKQEAgLTU1LDEzICs1NSwxNSBAQAogICAgIAkJY2hpcCBzZWxlY3QgYWN0aXZlIGhpZ2gKIC0gc3BpLTN3aXJlICAgICAgIC0gKG9wdGlvbmFsKSBFbXB0eSBwcm9wZXJ0eSBpbmRpY2F0aW5nIGRldmljZSByZXF1aXJlcwogICAgIAkJICAgIDMtd2lyZSBtb2RlLgorLSBzcGktbHNiLWZpcnN0ICAgLSAob3B0aW9uYWwpIEVtcHR5IHByb3BlcnR5IGluZGljYXRpbmcgZGV2aWNlIHJlcXVpcmVzCisJCUxTQiBmaXJzdCBtb2RlLgogLSBzcGktdHgtYnVzLXdpZHRoIC0gKG9wdGlvbmFsKSBUaGUgYnVzIHdpZHRoKG51bWJlciBvZiBkYXRhIHdpcmVzKSB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgTU9TSS4gRGVmYXVsdHMgdG8gMSBpZiBub3QgcHJlc2VudC4KIC0gc3BpLXJ4LWJ1cy13aWR0aCAtIChvcHRpb25hbCkgVGhlIGJ1cyB3aWR0aChudW1iZXIgb2YgZGF0YSB3aXJlcykgdGhhdAogICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIE1JU08uIERlZmF1bHRzIHRvIDEgaWYgbm90IHByZXNlbnQuCiAKIFNvbWUgU1BJIGNvbnRyb2xsZXJzIGFuZCBkZXZpY2VzIHN1cHBvcnQgRHVhbCBhbmQgUXVhZCBTUEkgdHJhbnNmZXIgbW9kZS4KLUl0IGFsbG93cyBkYXRhIGluIFNQSSBzeXN0ZW0gdHJhbnNmZXJlZCBpbiAyIHdpcmVzKERVQUwpIG9yIDQgd2lyZXMoUVVBRCkuCitJdCBhbGxvd3MgZGF0YSBpbiB0aGUgU1BJIHN5c3RlbSB0byBiZSB0cmFuc2ZlcnJlZCBpbiAyIHdpcmVzKERVQUwpIG9yIDQgd2lyZXMoUVVBRCkuCiBOb3cgdGhlIHZhbHVlIHRoYXQgc3BpLXR4LWJ1cy13aWR0aCBhbmQgc3BpLXJ4LWJ1cy13aWR0aCBjYW4gcmVjZWl2ZSBpcwogb25seSAxKFNJTkdMRSksIDIoRFVBTCkgYW5kIDQoUVVBRCkuCiBEdWFsL1F1YWQgbW9kZSBpcyBub3QgYWxsb3dlZCB3aGVuIDMtd2lyZSBtb2RlIGlzIHVzZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1jYWRlbmNlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWNhZGVuY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjA5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1jYWRlbmNlLnR4dApAQCAtMCwwICsxLDMxIEBACitDYWRlbmNlIFNQSSBjb250cm9sbGVyIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUJCTogU2hvdWxkIGJlICJjZG5zLHNwaS1yMXA2IiBvciAieGxueCx6eW5xLXNwaS1yMXA2Ii4KKy0gcmVnCQkJOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgb2YgU1BJIHJlZ2lzdGVycyBtYXAuCistIGludGVycnVwdHMJCTogUHJvcGVydHkgd2l0aCBhIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGludGVycnVwdAorCQkJICBudW1iZXIuCistIGludGVycnVwdC1wYXJlbnQJOiBNdXN0IGJlIGNvcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKy0gY2xvY2stbmFtZXMJCTogTGlzdCBvZiBpbnB1dCBjbG9jayBuYW1lcyAtICJyZWZfY2xrIiwgInBjbGsiCisJCQkgIChTZWUgY2xvY2sgYmluZGluZ3MgZm9yIGRldGFpbHMpLgorLSBjbG9ja3MJCTogQ2xvY2sgcGhhbmRsZXMgKHNlZSBjbG9jayBiaW5kaW5ncyBmb3IgZGV0YWlscykuCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIG51bS1jcwkJOiBOdW1iZXIgb2YgY2hpcCBzZWxlY3RzIHVzZWQuCisJCQkgIElmIGEgZGVjb2RlciBpcyB1c2VkLCB0aGlzIHdpbGwgYmUgdGhlIG51bWJlciBvZgorCQkJICBjaGlwIHNlbGVjdHMgYWZ0ZXIgdGhlIGRlY29kZXIuCistIGlzLWRlY29kZWQtY3MJCTogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGRlY29kZXIgaXMgdXNlZCBvciBub3QuCisKK0V4YW1wbGU6CisKKwlzcGlAZTAwMDcwMDAgeworCQljb21wYXRpYmxlID0gInhsbngsenlucS1zcGktcjFwNiI7CisJCWNsb2NrLW5hbWVzID0gInJlZl9jbGsiLCAicGNsayI7CisJCWNsb2NrcyA9IDwmY2xrYyAyNj4sIDwmY2xrYyAzNT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OworCQlpbnRlcnJ1cHRzID0gPDAgNDkgND47CisJCW51bS1jcyA9IDw0PjsKKwkJaXMtZGVjb2RlZC1jcyA9IDwwPjsKKwkJcmVnID0gPDB4ZTAwMDcwMDAgMHgxMDAwPjsKKwl9IDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWR3LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWR3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjYzZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktZHcudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1N5bm9wc3lzIERlc2lnbldhcmUgU1BJIG1hc3RlcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgInNucHMsZGVzaWdud2FyZS1zcGkiCistICNhZGRyZXNzLWNlbGxzOiBzZWUgc3BpLWJ1cy50eHQKKy0gI3NpemUtY2VsbHM6IHNlZSBzcGktYnVzLnR4dAorLSByZWc6IGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgc3BpIG1hc3RlciByZWdpc3RlcnMKKy0gaW50ZXJydXB0czogc2hvdWxkIGNvbnRhaW4gb25lIGludGVycnVwdAorLSBjbG9ja3M6IHNwaSBjbG9jayBwaGFuZGxlCistIG51bS1jczogc2VlIHNwaS1idXMudHh0CisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGNzLWdwaW9zOiBzZWUgc3BpLWJ1cy50eHQKKworRXhhbXBsZToKKworc3BpOiBzcGlANDAyMGEwMDAgeworCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLXNwaSI7CisJaW50ZXJydXB0cyA9IDwxMSAxPjsKKwlyZWcgPSA8MHg0MDIwYTAwMCAweDEwMDA+OworCWNsb2NrcyA9IDwmcGNsaz47CisJbnVtLWNzID0gPDI+OworCWNzLWdwaW9zID0gPCZiYW5rYSAwIDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcG1pL3NwbWkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwbWkvc3BtaS50eHQKaW5kZXggNDYyYTQyZi4uNGJiMTBkMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwbWkvc3BtaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwbWkvc3BtaS50eHQKQEAgLTI2LDcgKzI2LDcgQEAKIAkJcmVnID0gPC4uLj47CiAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzIDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJY2hpbGRAMCB7CiAJCQljb21wYXRpYmxlID0gIi4uLiI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3RhZ2luZy9pbXgtZHJtL2ZzbC1pbXgtZHJtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zdGFnaW5nL2lteC1kcm0vZnNsLWlteC1kcm0udHh0CmluZGV4IDNiZTVjZTcuLmU3NWYwZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zdGFnaW5nL2lteC1kcm0vZnNsLWlteC1kcm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zdGFnaW5nL2lteC1kcm0vZnNsLWlteC1kcm0udHh0CkBAIC02MSw2ICs2MSw3IEBACiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogLSBpbnRlcmZhY2VfcGl4X2ZtdDogSG93IHRoaXMgZGlzcGxheSBpcyBjb25uZWN0ZWQgdG8gdGhlCiAgIGRpc3BsYXkgaW50ZXJmYWNlLiBDdXJyZW50bHkgc3VwcG9ydGVkIHR5cGVzOiAicmdiMjQiLCAicmdiNTY1IiwgImJncjY2NiIKKyAgYW5kICJsdmRzNjY2Ii4KIC0gZWRpZDogdmVyYmF0aW0gRURJRCBkYXRhIGJsb2NrIGRlc2NyaWJpbmcgYXR0YWNoZWQgZGlzcGxheS4KIC0gZGRjOiBwaGFuZGxlIGRlc2NyaWJpbmcgdGhlIGkyYyBidXMgaGFuZGxpbmcgdGhlIGRpc3BsYXkgZGF0YQogICBjaGFubmVsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2NpLWhkcmMtcWNvbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2NpLWhkcmMtcWNvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4OTliNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvY2ktaGRyYy1xY29tLnR4dApAQCAtMCwwICsxLDE3IEBACitRdWFsY29tbSBDSTEzeHh4IChDaGlwaWRlYSkgVVNCIGNvbnRyb2xsZXJzCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6ICAgc2hvdWxkIGNvbnRhaW4gInFjb20sY2ktaGRyYyIKKy0gcmVnOiAgICAgICAgICBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGluIHRoZSBtZW1vcnkgbWFwCistIGludGVycnVwdHM6ICAgaW50ZXJydXB0LXNwZWNpZmllciBmb3IgdGhlIGNvbnRyb2xsZXIgaW50ZXJydXB0LgorLSB1c2ItcGh5OiAgICAgIHBoYW5kbGUgZm9yIHRoZSBQSFkgZGV2aWNlCistIGRyX21vZGU6ICAgICAgU2hvdWxkIGJlICJwZXJpcGhlcmFsIgorCitFeGFtcGxlczoKKwlnYWRnZXRAZjlhNTUwMDAgeworCQljb21wYXRpYmxlID0gInFjb20sY2ktaGRyYyI7CisJCXJlZyA9IDwweGY5YTU1MDAwIDB4NDAwPjsKKwkJZHJfbW9kZSA9ICJwZXJpcGhlcmFsIjsKKwkJaW50ZXJydXB0cyA9IDwwIDEzNCAwPjsKKwkJdXNiLXBoeSA9IDwmdXNicGh5MD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZWhjaS1vcmlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2VoY2ktb3Jpb24udHh0CmluZGV4IDZiYzA5ZWMuLjE3YzNiYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZWhjaS1vcmlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9laGNpLW9yaW9uLnR4dApAQCAtNiw2ICs2LDExIEBACiAgIHJlZ2lvbi4KIC0gaW50ZXJydXB0czogVGhlIEVIQ0kgaW50ZXJydXB0CiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGNsb2NrczogcmVmZXJlbmNlIHRvIHRoZSBjbG9jaworLSBwaHlzOiByZWZlcmVuY2UgdG8gdGhlIFVTQiBQSFkKKy0gcGh5LW5hbWVzOiBuYW1lIG9mIHRoZSBVU0IgUEhZLCBzaG91bGQgYmUgInVzYiIKKwogRXhhbXBsZToKIAogCWVoY2lANTAwMDAgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9leHlub3MtdXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZXh5bm9zLXVzYi50eHQKaW5kZXggZDk2N2JhMS4uYTNiNTk5MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9leHlub3MtdXNiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2V4eW5vcy11c2IudHh0CkBAIC0xMiw2ICsxMiwxMyBAQAogIC0gaW50ZXJydXB0czogaW50ZXJydXB0IG51bWJlciB0byB0aGUgY3B1LgogIC0gY2xvY2tzOiBmcm9tIGNvbW1vbiBjbG9jayBiaW5kaW5nOiBoYW5kbGUgdG8gdXNiIGNsb2NrLgogIC0gY2xvY2stbmFtZXM6IGZyb20gY29tbW9uIGNsb2NrIGJpbmRpbmc6IFNoYWxsIGJlICJ1c2Job3N0Ii4KKyAtIHBvcnQ6IGlmIGluIHRoZSBTb0MgdGhlcmUgYXJlIEVIQ0kgcGh5cywgdGhleSBzaG91bGQgYmUgbGlzdGVkIGhlcmUuCisgICBPbmUgcGh5IHBlciBwb3J0LiBFYWNoIHBvcnQgc2hvdWxkIGhhdmUgZm9sbG93aW5nIGVudHJpZXM6CisJLSByZWc6IHBvcnQgbnVtYmVyIG9uIEVIQ0kgY29udHJvbGxlciwgZS5nCisJICAgICAgIE9uIEV4eW5vczUyNTAsIHBvcnQgMCBpcyBVU0IyLjAgb3RnIHBoeQorCQkJICAgICAgcG9ydCAxIGlzIEhTSUMgcGh5MAorCQkJICAgICAgcG9ydCAyIGlzIEhTSUMgcGh5MQorCS0gcGh5czogZnJvbSB0aGUgKkdlbmVyaWMgUEhZKiBiaW5kaW5nczsgc3BlY2lmeWluZyBwaHkgdXNlZCBieSBwb3J0LgogCiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogIC0gc2Ftc3VuZyx2YnVzLWdwaW86ICBpZiBwcmVzZW50LCBzcGVjaWZpZXMgdGhlIEdQSU8gdGhhdApAQCAtMjcsNiArMzQsMTQgQEAKIAogCQljbG9ja3MgPSA8JmNsb2NrIDI4NT47CiAJCWNsb2NrLW5hbWVzID0gInVzYmhvc3QiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9ydEAwIHsKKwkJICAgIHJlZyA9IDwwPjsKKwkJICAgIHBoeXMgPSA8JnVzYjJwaHkgMT47CisJCSAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OwogCX07CiAKIE9IQ0kKQEAgLTM4LDYgKzUzLDEzIEBACiAgLSBpbnRlcnJ1cHRzOiBpbnRlcnJ1cHQgbnVtYmVyIHRvIHRoZSBjcHUuCiAgLSBjbG9ja3M6IGZyb20gY29tbW9uIGNsb2NrIGJpbmRpbmc6IGhhbmRsZSB0byB1c2IgY2xvY2suCiAgLSBjbG9jay1uYW1lczogZnJvbSBjb21tb24gY2xvY2sgYmluZGluZzogU2hhbGwgYmUgInVzYmhvc3QiLgorIC0gcG9ydDogaWYgaW4gdGhlIFNvQyB0aGVyZSBhcmUgT0hDSSBwaHlzLCB0aGV5IHNob3VsZCBiZSBsaXN0ZWQgaGVyZS4KKyAgIE9uZSBwaHkgcGVyIHBvcnQuIEVhY2ggcG9ydCBzaG91bGQgaGF2ZSBmb2xsb3dpbmcgZW50cmllczoKKwktIHJlZzogcG9ydCBudW1iZXIgb24gT0hDSSBjb250cm9sbGVyLCBlLmcKKwkgICAgICAgT24gRXh5bm9zNTI1MCwgcG9ydCAwIGlzIFVTQjIuMCBvdGcgcGh5CisJCQkgICAgICBwb3J0IDEgaXMgSFNJQyBwaHkwCisJCQkgICAgICBwb3J0IDIgaXMgSFNJQyBwaHkxCisJLSBwaHlzOiBmcm9tIHRoZSAqR2VuZXJpYyBQSFkqIGJpbmRpbmdzLCBzcGVjaWZ5aW5nIHBoeSB1c2VkIGJ5IHBvcnQuCiAKIEV4YW1wbGU6CiAJdXNiQDEyMTIwMDAwIHsKQEAgLTQ3LDYgKzY5LDE1IEBACiAKIAkJY2xvY2tzID0gPCZjbG9jayAyODU+OwogCQljbG9jay1uYW1lcyA9ICJ1c2Job3N0IjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvcnRAMCB7CisJCSAgICByZWcgPSA8MD47CisJCSAgICBwaHlzID0gPCZ1c2IycGh5IDE+OworCQkgICAgc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCX07CiAKIERXQzMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZ3ItdWRjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZ3ItdWRjLnR4dAppbmRleCAwYzUxMThmLi5lOTQ0NTIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2dyLXVkYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9nci11ZGMudHh0CkBAIC0xMiwxNyArMTIsMjMgQEAKIAogLSByZWcgOiBBZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQogCi0tIGludGVycnVwdHMgOiBJbnRlcnJ1cHQgbnVtYmVycyBmb3IgdGhpcyBkZXZpY2UKKy0gaW50ZXJydXB0cyA6IEludGVycnVwdCBudW1iZXJzIGZvciB0aGlzIGRldmljZS4gRWl0aGVyIG9uZSBpbnRlcnJ1cHQgbnVtYmVyCisJZm9yIGFsbCBpbnRlcnJ1cHRzLCBvciBvbmUgZm9yIHN0YXR1cyByZWxhdGVkIGludGVycnVwdHMsIG9uZSBmb3IgSU4KKwllbmRwb2ludCByZWxhdGVkIGludGVycnVwdHMgYW5kIG9uZSBmb3IgT1VUIGVuZHBvaW50IHJlbGF0ZWQgaW50ZXJydXB0cy4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKIAotLSBlcG9idWZzaXplcyA6IEFuIGFycmF5IG9mIGJ1ZmZlciBzaXplcyBmb3IgT1VUIGVuZHBvaW50cy4gSWYgdGhlIHByb3BlcnR5IGlzCi0Jbm90IHByZXNlbnQsIG9yIGZvciBlbmRwb2ludHMgb3V0c2lkZSBvZiB0aGUgYXJyYXksIDEwMjQgaXMgYXNzdW1lZCBieQotCXRoZSBkcml2ZXIuCistIGVwb2J1ZnNpemVzIDogQXJyYXkgb2YgYnVmZmVyIHNpemVzIGZvciBPVVQgZW5kcG9pbnRzIHdoZW4gdGhleSBkaWZmZXIKKwlmcm9tIHRoZSBkZWZhdWx0IHNpemUgb2YgMTAyNC4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkgdGhlIE9VVCBlbmRwb2ludAorCW51bWJlci4gSWYgdGhlIHByb3BlcnR5IGlzIHByZXNlbnQgaXQgdHlwaWNhbGx5IGNvbnRhaW5zIG9uZSBlbnRyeSBmb3IKKwllYWNoIE9VVCBlbmRwb2ludCBvZiB0aGUgY29yZS4gRmV3ZXIgZW50cmllcyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2l6ZXMKKwlvbmx5IGZvciBhcyBtYW55IGVuZHBvaW50cyBhcyB0aGUgYXJyYXkgY29udGFpbnMuCiAKLS0gZXBpYnVmc2l6ZXMgOiBBbiBhcnJheSBvZiBidWZmZXIgc2l6ZXMgZm9yIElOIGVuZHBvaW50cy4gSWYgdGhlIHByb3BlcnR5IGlzCi0Jbm90IHByZXNlbnQsIG9yIGZvciBlbmRwb2ludHMgb3V0c2lkZSBvZiB0aGUgYXJyYXksIDEwMjQgaXMgYXNzdW1lZCBieQotCXRoZSBkcml2ZXIuCistIGVwaWJ1ZnNpemVzIDogQXJyYXkgb2YgYnVmZmVyIHNpemVzIGZvciBJTiBlbmRwb2ludHMgd2hlbiB0aGV5IGRpZmZlcgorCWZyb20gdGhlIGRlZmF1bHQgc2l6ZSBvZiAxMDI0LiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieSB0aGUgSU4gZW5kcG9pbnQKKwludW1iZXIuIElmIHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50IGl0IHR5cGljYWxseSBjb250YWlucyBvbmUgZW50cnkgZm9yCisJZWFjaCBJTiBlbmRwb2ludCBvZiB0aGUgY29yZS4gRmV3ZXIgZW50cmllcyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2l6ZXMKKwlvbmx5IGZvciBhcyBtYW55IGVuZHBvaW50cyBhcyB0aGUgYXJyYXkgY29udGFpbnMuCiAKIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGxvb2sgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBHTElCIElQIGNvcmUgbGlicmFyeToKIGh0dHA6Ly93d3cuZ2Fpc2xlci5jb20vcHJvZHVjdHMvZ3JsaWIvZ3JpcC5wZGYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvbXNtLWhzdXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvbXNtLWhzdXNiLnR4dAppbmRleCA1ZWEyNmM2Li4yODI2ZjJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL21zbS1oc3VzYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9tc20taHN1c2IudHh0CkBAIC0xNSwzICsxNSw4MSBAQAogCQl1c2ItcGh5ID0gPCZ1c2Jfb3RnPjsKIAl9OwogCitVU0IgUEhZIHdpdGggb3B0aW9uYWwgT1RHOgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAgIFNob3VsZCBjb250YWluOgorICAicWNvbSx1c2Itb3RnLWNpIiBmb3IgY2hpcHNldHMgd2l0aCBDaGlwSWRlYSA0NW5tIFBIWQorICAicWNvbSx1c2Itb3RnLXNucHMiIGZvciBjaGlwc2V0cyB3aXRoIFN5bm9wc3lzIDI4bm0gUEhZCisKKy0gcmVnczogICAgICAgICBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGluIHRoZSBtZW1vcnkgbWFwCistIGludGVycnVwdHM6ICAgaW50ZXJydXB0LXNwZWNpZmllciBmb3IgdGhlIE9URyBpbnRlcnJ1cHQuCisKKy0gY2xvY2tzOiAgICAgICBBIGxpc3Qgb2YgcGhhbmRsZSArIGNsb2NrLXNwZWNpZmllciBwYWlycyBmb3IgdGhlCisgICAgICAgICAgICAgICAgY2xvY2tzIGxpc3RlZCBpbiBjbG9jay1uYW1lcworLSBjbG9jay1uYW1lczogIFNob3VsZCBjb250YWluIHRoZSBmb2xsb3dpbmc6CisgICJwaHkiICAgICAgICAgVVNCIFBIWSByZWZlcmVuY2UgY2xvY2sKKyAgImNvcmUiICAgICAgICBQcm90b2NvbCBlbmdpbmUgY2xvY2sKKyAgImlmYWNlIiAgICAgICBJbnRlcmZhY2UgYnVzIGNsb2NrCisgICJhbHRfY29yZSIgICAgUHJvdG9jb2wgZW5naW5lIGNsb2NrIGZvciB0YXJnZXRzIHdpdGggYXN5bmNocm9ub3VzCisgICAgICAgICAgICAgICAgcmVzZXQgbWV0aG9kb2xvZ3kuIChvcHRpb25hbCkKKworLSB2ZGNjeC1zdXBwbHk6IHBoYW5kbGUgdG8gdGhlIHJlZ3VsYXRvciBmb3IgdGhlIHZkZCBzdXBwbHkgZm9yCisgICAgICAgICAgICAgICAgZGlnaXRhbCBjaXJjdWl0IG9wZXJhdGlvbi4KKy0gdjFwOC1zdXBwbHk6ICBwaGFuZGxlIHRvIHRoZSByZWd1bGF0b3IgZm9yIHRoZSAxLjhWIHN1cHBseQorLSB2M3AzLXN1cHBseTogIHBoYW5kbGUgdG8gdGhlIHJlZ3VsYXRvciBmb3IgdGhlIDMuM1Ygc3VwcGx5CisKKy0gcmVzZXRzOiAgICAgICBBIGxpc3Qgb2YgcGhhbmRsZSArIHJlc2V0LXNwZWNpZmllciBwYWlycyBmb3IgdGhlCisgICAgICAgICAgICAgICAgcmVzZXRzIGxpc3RlZCBpbiByZXNldC1uYW1lcworLSByZXNldC1uYW1lczogIFNob3VsZCBjb250YWluIHRoZSBmb2xsb3dpbmc6CisgICJwaHkiICAgICAgICAgVVNCIFBIWSBjb250cm9sbGVyIHJlc2V0CisgICJsaW5rIiAgICAgICAgVVNCIExJTksgY29udHJvbGxlciByZXNldAorCistIHFjb20sb3RnLWNvbnRyb2w6IE9URyBjb250cm9sIChWQlVTIGFuZCBJRCBub3RpZmljYXRpb25zKSBjYW4gYmUgb25lIG9mCisgICAgICAgICAgICAgICAgMSAtIFBIWSBjb250cm9sCisgICAgICAgICAgICAgICAgMiAtIFBNSUMgY29udHJvbAorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBkcl9tb2RlOiAgICAgIE9uZSBvZiAiaG9zdCIsICJwZXJpcGhlcmFsIiBvciAib3RnIi4gRGVmYXVsdHMgdG8gIm90ZyIKKworLSBxY29tLHBoeS1pbml0LXNlcXVlbmNlOiBQSFkgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMuIFRoaXMgaXMgcmVsYXRlZCB0byBEZXZpY2UKKyAgICAgICAgICAgICAgICBNb2RlIEV5ZSBEaWFncmFtIHRlc3QuIFN0YXJ0IGFkZHJlc3MgYXQgd2hpY2ggdGhlc2UgdmFsdWVzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICB3cml0dGVuIGlzIFVMUElfRVhUX1ZFTkRPUl9TUEVDSUZJQy4gVmFsdWUgb2YgLTEgaXMgcmVzZXJ2ZWQgYXMKKyAgICAgICAgICAgICAgICAiZG8gbm90IG92ZXJ3cml0ZSBkZWZhdWx0IHZhbHVlIGF0IHRoaXMgYWRkcmVzcyIuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6IHFjb20scGh5LWluaXQtc2VxdWVuY2UgPSA8IC0xIDB4NjMgPjsKKyAgICAgICAgICAgICAgICBXaWxsIHVwZGF0ZSBvbmx5IHZhbHVlIGF0IGFkZHJlc3MgVUxQSV9FWFRfVkVORE9SX1NQRUNJRklDICsgMS4KKworLSBxY29tLHBoeS1udW06IFNlbGVjdCBudW1iZXIgb2YgcHljby1waHkgdG8gdXNlLCBjYW4gYmUgb25lIG9mCisgICAgICAgICAgICAgICAgMCAtIFBIWSBvbmUsIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAxIC0gU2Vjb25kIFBIWQorICAgICAgICAgICAgICAgIFNvbWUgcGxhdGZvcm1zIG1heSBoYXZlIGNvbmZpZ3VyYXRpb24gdG8gYWxsb3cgVVNCCisgICAgICAgICAgICAgICAgY29udHJvbGxlciB3b3JrIHdpdGggYW55IG9mIHRoZSB0d28gSFNQSFlzIHByZXNlbnQuCisKKy0gcWNvbSx2ZGQtbGV2ZWxzOiBUaGlzIHByb3BlcnR5IG11c3QgYmUgYSBsaXN0IG9mIHRocmVlIGludGVnZXIgdmFsdWVzCisgICAgICAgICAgICAgICAgKG5vLCBtaW4sIG1heCkgd2hlcmUgZWFjaCB2YWx1ZSByZXByZXNlbnRzIGVpdGhlciBhIHZvbHRhZ2UKKyAgICAgICAgICAgICAgICBpbiBtaWNyb3ZvbHRzIG9yIGEgdmFsdWUgY29ycmVzcG9uZGluZyB0byB2b2x0YWdlIGNvcm5lci4KKworRXhhbXBsZSBIU1VTQiBPVEcgY29udHJvbGxlciBkZXZpY2Ugbm9kZToKKworICAgIHVzYkBmOWE1NTAwMCB7CisgICAgICAgIGNvbXBhdGlibGUgPSAicWNvbSx1c2Itb3RnLXNucHMiOworICAgICAgICByZWcgPSA8MHhmOWE1NTAwMCAweDQwMD47CisgICAgICAgIGludGVycnVwdHMgPSA8MCAxMzQgMD47CisgICAgICAgIGRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisKKyAgICAgICAgY2xvY2tzID0gPCZnY2MgR0NDX1hPX0NMSz4sIDwmZ2NjIEdDQ19VU0JfSFNfU1lTVEVNX0NMSz4sCisgICAgICAgICAgICAgICAgPCZnY2MgR0NDX1VTQl9IU19BSEJfQ0xLPjsKKworICAgICAgICBjbG9jay1uYW1lcyA9ICJwaHkiLCAiY29yZSIsICJpZmFjZSI7CisKKyAgICAgICAgdmRkY3gtc3VwcGx5ID0gPCZwbTg4NDFfczJfY29ybmVyPjsKKyAgICAgICAgdjFwOC1zdXBwbHkgPSA8JnBtODk0MV9sNj47CisgICAgICAgIHYzcDMtc3VwcGx5ID0gPCZwbTg5NDFfbDI0PjsKKworICAgICAgICByZXNldHMgPSA8JmdjYyBHQ0NfVVNCMkFfUEhZX0JDUj4sIDwmZ2NjIEdDQ19VU0JfSFNfQkNSPjsKKyAgICAgICAgcmVzZXQtbmFtZXMgPSAicGh5IiwgImxpbmsiOworCisgICAgICAgIHFjb20sb3RnLWNvbnRyb2wgPSA8MT47CisgICAgICAgIHFjb20scGh5LWluaXQtc2VxdWVuY2UgPSA8IC0xIDB4NjMgPjsKKyAgICAgICAgcWNvbSx2ZGQtbGV2ZWxzID0gPDEgNSA3PjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9vbWFwLXVzYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL29tYXAtdXNiLnR4dAppbmRleCAzOGIyZmFlLi4zOGQ5YmI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL29tYXAtdXNiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL29tYXAtdXNiLnR4dApAQCAtNDQsNyArNDQsOSBAQAogfTsKIAogT01BUCBEV0MzIEdMVUUKLSAtIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgInRpLGR3YzMiCisgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlCisJKiAidGksZHdjMyIgZm9yIE9NQVA1IGFuZCBEUkE3CisJKiAidGksYW00Mzd4LWR3YzMiIGZvciBBTTQzN3gKICAtIHRpLGh3bW9kcyA6IFNob3VsZCBiZSAidXNiX290Z19zcyIKICAtIHJlZyA6IEFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlLgogIC0gaW50ZXJydXB0cyA6IFRoZSBpcnEgbnVtYmVyIG9mIHRoaXMgZGV2aWNlIHRoYXQgaXMgdXNlZCB0byBpbnRlcnJ1cHQgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL3VzYi1laGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLWVoY2kudHh0CmluZGV4IGZmMTUxZWMwLi40M2MxYTRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL3VzYi1laGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL3VzYi1laGNpLnR4dApAQCAtMTUsNiArMTUsNyBAQAogIC0gY2xvY2tzIDogYSBsaXN0IG9mIHBoYW5kbGUgKyBjbG9jayBzcGVjaWZpZXIgcGFpcnMKICAtIHBoeXMgOiBwaGFuZGxlICsgcGh5IHNwZWNpZmllciBwYWlyCiAgLSBwaHktbmFtZXMgOiAidXNiIgorIC0gcmVzZXRzIDogcGhhbmRsZSArIHJlc2V0IHNwZWNpZmllciBwYWlyCiAKIEV4YW1wbGUgKFNlcXVvaWEgNDQwRVB4KToKICAgICBlaGNpQGUwMDAwMzAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLW9oY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2Itb2hjaS50eHQKaW5kZXggNDVmNjdkOS4uYjk2OGExYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2Itb2hjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2Itb2hjaS50eHQKQEAgLTEyLDYgKzEyLDcgQEAKIC0gY2xvY2tzIDogYSBsaXN0IG9mIHBoYW5kbGUgKyBjbG9jayBzcGVjaWZpZXIgcGFpcnMKIC0gcGh5cyA6IHBoYW5kbGUgKyBwaHkgc3BlY2lmaWVyIHBhaXIKIC0gcGh5LW5hbWVzIDogInVzYiIKKy0gcmVzZXRzIDogcGhhbmRsZSArIHJlc2V0IHNwZWNpZmllciBwYWlyCiAKIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLXhoY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2IteGhjaS50eHQKaW5kZXggOTBmOGY2MC4uNWE3OTM3NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2IteGhjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2IteGhjaS50eHQKQEAgLTEsMTEgKzEsMTcgQEAKIFVTQiB4SENJIGNvbnRyb2xsZXJzCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6Ci0gIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJnZW5lcmljLXhoY2kiIChkZXByZWNhdGVkOiAieGhjaS1wbGF0Zm9ybSIpLgorICAtIGNvbXBhdGlibGU6IHNob3VsZCBiZSBvbmUgb2YgImdlbmVyaWMteGhjaSIsCisgICAgIm1hcnZlbGwsYXJtYWRhLTM3NS14aGNpIiwgIm1hcnZlbGwsYXJtYWRhLTM4MC14aGNpIiwKKyAgICAicmVuZXNhcyx4aGNpLXI4YTc3OTAiLCAicmVuZXNhcyx4aGNpLXI4YTc3OTEiIChkZXByZWNhdGVkOgorICAgICJ4aGNpLXBsYXRmb3JtIikuCiAgIC0gcmVnOiBzaG91bGQgY29udGFpbiBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHN0YW5kYXJkIFhIQ0kKICAgICByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UuCiAgIC0gaW50ZXJydXB0czogb25lIFhIQ0kgaW50ZXJydXB0IHNob3VsZCBiZSBkZXNjcmliZWQgaGVyZS4KIAorT3B0aW9uYWwgcHJvcGVydHk6CisgIC0gY2xvY2tzOiByZWZlcmVuY2UgdG8gYSBjbG9jaworCiBFeGFtcGxlOgogCXVzYkBmMDkzMTAwMCB7CiAJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYy14aGNpIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiMzUwMy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL3VzYjM1MDMudHh0CmluZGV4IGEwMThkYTQuLjIyMWFjMGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiMzUwMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2IzNTAzLnR4dApAQCAtMTUsNiArMTUsMTQgQEAKIC0gcmVzZXQtZ3Bpb3M6IFNob3VsZCBzcGVjaWZ5IEdQSU8gZm9yIHJlc2V0LgogLSBpbml0aWFsLW1vZGU6IFNob3VsZCBzcGVjaWZ5IGluaXRpYWwgbW9kZS4KICAgICAgICAgICAgICAgICAoMSBmb3IgSFVCIG1vZGUsIDIgZm9yIFNUQU5EQlkgbW9kZSkKKy0gcmVmY2xrOiBDbG9jayB1c2VkIGZvciBkcml2aW5nIFJFRkNMSyBzaWduYWwgKG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQKKwl0aGUgZHJpdmVyIGFzc3VtZXMgdGhhdCBjbG9jayBzaWduYWwgaXMgYWx3YXlzIGF2YWlsYWJsZSwgaXRzCisJcmF0ZSBpcyBzcGVjaWZpZWQgYnkgUkVGX1NFTCBwaW5zIGFuZCBhIHZhbHVlIGZyb20gdGhlIHByaW1hcnkKKwlyZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmNpZXMgdGFibGUgaXMgdXNlZCkKKy0gcmVmY2xrLWZyZXF1ZW5jeTogRnJlcXVlbmN5IG9mIHRoZSBSRUZDTEsgc2lnbmFsIGFzIGRlZmluZWQgYnkgUkVGX1NFTAorCXBpbnMgKG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQsIGRyaXZlciB3aWxsIG5vdCBzZXQgcmF0ZSBvZiB0aGUKKwlSRUZDTEsgc2lnbmFsIGFuZCBhc3N1bWUgdGhhdCBhIHZhbHVlIGZyb20gdGhlIHByaW1hcnkgcmVmZXJlbmNlCisJY2xvY2sgZnJlcXVlbmNpZXMgdGFibGUgaXMgdXNlZCkKIAogRXhhbXBsZXM6CiAJdXNiMzUwM0AwOCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CmluZGV4IGFiYzMwODAuLjk0MTk4MDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CkBAIC0xMyw2ICsxMyw3IEBACiBhbHRyCUFsdGVyYSBDb3JwLgogYW1jYwlBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uIChBUE0sIGZvcm1hbGx5IEFNQ0MpCiBhbWQJQWR2YW5jZWQgTWljcm8gRGV2aWNlcyAoQU1EKSwgSW5jLgorYW1zCUFNUyBBRwogYW1zdGFvcwlBTVMtVGFvcyBJbmMuCiBhcG0JQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbiAoQVBNKQogYXJtCUFSTSBMdGQuCkBAIC03MywxMiArNzQsMTQgQEAKIGxnCUxHIENvcnBvcmF0aW9uCiBsaW51eAlMaW51eC1zcGVjaWZpYyBiaW5kaW5nCiBsc2kJTFNJIENvcnAuIChMU0kgTG9naWMpCitsbHRjCUxpbmVhciBUZWNobm9sb2d5IENvcnBvcmF0aW9uCiBtYXJ2ZWxsCU1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCiBtYXhpbQlNYXhpbSBJbnRlZ3JhdGVkIFByb2R1Y3RzCiBtaWNyb2NoaXAJTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLgogbW9zYWl4dGVjaAlNb3NhaXggVGVjaG5vbG9naWVzLCBJbmMuCiBtb3hhCU1veGEKIG1wbAlNUEwgQUcKK211bmRvcmVhZGVyCU11bmRvIFJlYWRlciBTLkwuCiBteGljeQlNYWNyb25peCBJbnRlcm5hdGlvbmFsIENvLiwgTHRkLgogbmF0aW9uYWwJTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgogbmVvbm9kZQkJTmVvbm9kZSBJbmMuCkBAIC05OCw2ICsxMDEsNyBAQAogcWNhCVF1YWxjb21tIEF0aGVyb3MsIEluYy4KIHFjb20JUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMKIHFuYXAJUU5BUCBTeXN0ZW1zLCBJbmMuCityYWR4YQlSYWR4YQogcmFpZHNvbmljCVJhaWRTb25pYyBUZWNobm9sb2d5IEdtYkgKIHJhbGluawlNZWRpYXRlay9SYWxpbmsgVGVjaG5vbG9neSBDb3JwLgogcmFtdHJvbglSYW10cm9uIEludGVybmF0aW9uYWwKQEAgLTEyMywxMCArMTI3LDEyIEBACiBzeW5vbG9neQlTeW5vbG9neSwgSW5jLgogdGkJVGV4YXMgSW5zdHJ1bWVudHMKIHRsbQlUcnVzdGVkIExvZ2ljIE1vYmlsaXR5Cit0b3JhZGV4CVRvcmFkZXggQUcKIHRvc2hpYmEJVG9zaGliYSBDb3Jwb3JhdGlvbgogdG91bWF6CVRvdW1hegogdXNpCVVuaXZlcnNhbCBTY2llbnRpZmMgSW5kdXN0cmlhbCBDby4sIEx0ZC4KIHYzCVYzIFNlbWljb25kdWN0b3IKK3ZhcmlzY2l0ZQlWYXJpc2NpdGUgTHRkLgogdmlhCVZJQSBUZWNobm9sb2dpZXMsIEluYy4KIHZvaXBhYwlWb2lwYWMgVGVjaG5vbG9naWVzIHMuci5vLgogd2luYm9uZCBXaW5ib25kIEVsZWN0cm9uaWNzIGNvcnAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RtYS1idWYtc2hhcmluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2RtYS1idWYtc2hhcmluZy50eHQKaW5kZXggNTA1ZTcxMS4uNjdhNDA4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kbWEtYnVmLXNoYXJpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZG1hLWJ1Zi1zaGFyaW5nLnR4dApAQCAtNjYsNyArNjYsNyBAQAogCiAgICBFeHBvcnRpbmcgbW9kdWxlcyB3aGljaCBkbyBub3Qgd2lzaCB0byBwcm92aWRlIGFueSBzcGVjaWZpYyBuYW1lIG1heSB1c2UgdGhlCiAgICBoZWxwZXIgZGVmaW5lICdkbWFfYnVmX2V4cG9ydCgpJywgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgYXMgYWJvdmUsIGJ1dAotICAgd2l0aG91dCB0aGUgbGFzdCBhcmd1bWVudDsgYSBfX0ZJTEVfXyBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZSB3aWxsIGJlCisgICB3aXRob3V0IHRoZSBsYXN0IGFyZ3VtZW50OyBhIEtCVUlMRF9NT0ROQU1FIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlIHdpbGwgYmUKICAgIGluc2VydGVkIGluIHBsYWNlIG9mICdleHBfbmFtZScgaW5zdGVhZC4KIAogMi4gVXNlcnNwYWNlIGdldHMgYSBoYW5kbGUgdG8gcGFzcyBhcm91bmQgdG8gcG90ZW50aWFsIGJ1ZmZlci11c2VycwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgYW5kIHRoZW4gYWxsb3cgZnVydGhlciB7bWFwLHVubWFwfV9kbWFfYnVmIG9wZXJhdGlvbnMgZnJvbSBhbnkgYnVmZmVyLXVzZXIKICAgICBmcm9tIHRoZSBtaWdyYXRlZCBiYWNraW5nLXN0b3JhZ2UuCiAKLSAgIElmIHRoZSBleHBvcnRlciBjYW5ub3QgZnVsZmlsIHRoZSBiYWNraW5nLXN0b3JhZ2UgY29uc3RyYWludHMgb2YgdGhlIG5ldworICAgSWYgdGhlIGV4cG9ydGVyIGNhbm5vdCBmdWxmaWxsIHRoZSBiYWNraW5nLXN0b3JhZ2UgY29uc3RyYWludHMgb2YgdGhlIG5ldwogICAgYnVmZmVyLXVzZXIgZGV2aWNlIGFzIHJlcXVlc3RlZCwgZG1hX2J1Zl9hdHRhY2goKSB3b3VsZCByZXR1cm4gYW4gZXJyb3IgdG8KICAgIGRlbm90ZSBub24tY29tcGF0aWJpbGl0eSBvZiB0aGUgbmV3IGJ1ZmZlci1zaGFyaW5nIHJlcXVlc3Qgd2l0aCB0aGUgY3VycmVudAogICAgYnVmZmVyLgpAQCAtMzUyLDcgKzM1Miw3IEBACiAKICAgIE5vIHNwZWNpYWwgaW50ZXJmYWNlcywgdXNlcnNwYWNlIHNpbXBseSBjYWxscyBtbWFwIG9uIHRoZSBkbWEtYnVmIGZkLgogCi0yLiBTdXBwb3J0aW5nIGV4aXN0aW5nIG1tYXAgaW50ZXJmYWNlcyBpbiBleHBvcnRlcnMKKzIuIFN1cHBvcnRpbmcgZXhpc3RpbmcgbW1hcCBpbnRlcmZhY2VzIGluIGltcG9ydGVycwogCiAgICBTaW1pbGFyIHRvIHRoZSBtb3RpdmF0aW9uIGZvciBrZXJuZWwgY3B1IGFjY2VzcyBpdCBpcyBhZ2FpbiBpbXBvcnRhbnQgdGhhdAogICAgdGhlIHVzZXJzcGFjZSBjb2RlIG9mIGEgZ2l2ZW4gaW1wb3J0aW5nIHN1YnN5c3RlbSBjYW4gdXNlIHRoZSBzYW1lIGludGVyZmFjZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZyZXMudHh0CmluZGV4IDRmNzg5N2UuLjg5NDcyNTU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZyZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJlcy50eHQKQEAgLTIzNiw2ICsyMzYsOSBAQAogTUVNCiAgIGRldm1fa3phbGxvYygpCiAgIGRldm1fa2ZyZWUoKQorICBkZXZtX2ttZW1kdXAoKQorICBkZXZtX2dldF9mcmVlX3BhZ2VzKCkKKyAgZGV2bV9mcmVlX3BhZ2VzKCkKIAogSUlPCiAgIGRldm1faWlvX2RldmljZV9hbGxvYygpCkBAIC0zMDgsMyArMzExLDEwIEBACiAKIFNQSQogICBkZXZtX3NwaV9yZWdpc3Rlcl9tYXN0ZXIoKQorCitHUElPCisgIGRldm1fZ3Bpb2RfZ2V0KCkKKyAgZGV2bV9ncGlvZF9nZXRfaW5kZXgoKQorICBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgpCisgIGRldm1fZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKCkKKyAgZGV2bV9ncGlvZF9wdXQoKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQKaW5kZXggNDYzMjVlYi4uOTQxNzg3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0CkBAIC0zMjEsNyArMzIxLDcgQEAKIG51bGxhcmJvcjp+ICMgZWNobyAtbiAnZm9ybWF0ICJuZnNkOiBSRUFEIiArcCcgPgogCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKIAotLy8gZW5hYmxlIG1lc3NhZ2VzIGluIGZpbGVzIG9mIHdoaWNoIHRoZSBwYXRoZXMgaW5jbHVkZSBzdHJpbmcgInVzYiIKKy8vIGVuYWJsZSBtZXNzYWdlcyBpbiBmaWxlcyBvZiB3aGljaCB0aGUgcGF0aHMgaW5jbHVkZSBzdHJpbmcgInVzYiIKIG51bGxhcmJvcjp+ICMgZWNobyAtbiAnKnVzYiogK3AnID4gPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAogCiAvLyBlbmFibGUgYWxsIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMudHh0IGIvRG9jdW1lbnRhdGlvbi9lZGFjLnR4dAppbmRleCBjYjRjMmNlZi4uNzNmZmYxMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMudHh0CkBAIC01NTAsNyArNTUwLDcgQEAKIAkvc3lzL2RldmljZXMvc3lzdG0vZWRhYy90ZXN0LWluc3RhbmNlCiAKIGluIHRoaXMgZGlyZWN0b3J5IGFyZSB2YXJpb3VzIGNvbnRyb2xzLCBhIHN5bWxpbmsgYW5kIG9uZSBvciBtb3JlICdpbnN0YW5jZScKLWRpcmVjdG9yeXMuCitkaXJlY3Rvcmllcy4KIAogVGhlIHN0YW5kYXJkIGRlZmF1bHQgY29udHJvbHMgYXJlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3NtNTAxLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvc201MDEudHh0CmluZGV4IDhkMTdhZWIuLjE4N2YzYjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmIvc201MDEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvc201MDEudHh0CkBAIC0zLDcgKzMsNyBAQAogWW91IGNhbiBwYXNzIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHNtNTAxIHZpZGVvZnJhbWVidWZmZXI6CiAKIAlzbTUwMWZiLmJwcD0JU001MDEgRGlzcGxheSBkcml2ZXI6Ci0JCQlTcGVjaWZpeSBiaXRzLXBlci1waXhlbCBpZiBub3Qgc3BlY2lmaWVkIGJ5ICdtb2RlJworCQkJU3BlY2lmeSBiaXRzLXBlci1waXhlbCBpZiBub3Qgc3BlY2lmaWVkIGJ5ICdtb2RlJwogCiAJc201MDFmYi5tb2RlPQlTTTUwMSBEaXNwbGF5IGRyaXZlcjoKIAkJCVNwZWNpZnkgcmVzb2x1dGlvbiBhcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9zc3RmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dAppbmRleCA1NTBjYTc3Li4xM2RiMTA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dApAQCAtMTAsNyArMTAsNyBAQAogCSAgVGhlIG1haW4gcGFnZSBpcyBsb2NhdGVkIGF0IDxodHRwOi8vc3N0ZmIuc291cmNlZm9yZ2UubmV0PiwgYW5kIGlmCiAJeW91IHdhbnQgdGhlIGxhdGVzdCB2ZXJzaW9uLCBjaGVjayBvdXQgdGhlIENWUywgYXMgdGhlIGRyaXZlciBpcyBhIHdvcmsKIAlpbiBwcm9ncmVzcywgSSBmZWVsIHVuY29tZm9ydGFibGUgd2l0aCByZWxlYXNpbmcgdGFyYmFsbHMgb2Ygc29tZXRoaW5nCi0Jbm90IGNvbXBsZXRlbHkgd29ya2luZy4uLkRvbid0IHdvcnJ5LCBpdCdzIHN0aWxsIG1vcmUgdGhhbiB1c2VhYmxlCisJbm90IGNvbXBsZXRlbHkgd29ya2luZy4uLkRvbid0IHdvcnJ5LCBpdCdzIHN0aWxsIG1vcmUgdGhhbiB1c2FibGUKIAkoSSBlYXQgbXkgb3duIGRvZyBmb29kKQogCiAJICBQbGVhc2UgcmVhZCB0aGUgQnVnIHNlY3Rpb24sIGFuZCByZXBvcnQgYW55IHN1Y2Nlc3Mgb3IgZmFpbHVyZSB0byBtZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKaW5kZXggMjY0YmNkZS4uZGRjNTMxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CkBAIC0yMzQsNyArMjM0LDcgQEAKICBTaGRQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHNoYXJlZCBwZW5kaW5nIHNpZ25hbHMgZm9yIHRoZSBwcm9jZXNzCiAgU2lnQmxrICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBibG9ja2VkIHNpZ25hbHMKICBTaWdJZ24gICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIGlnbm9yZWQgc2lnbmFscwotIFNpZ0NndCAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgb2YgY2F0Y2hlZCBzaWduYWxzCisgU2lnQ2d0ICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBjYXVnaHQgc2lnbmFscwogIENhcEluaCAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgb2YgaW5oZXJpdGFibGUgY2FwYWJpbGl0aWVzCiAgQ2FwUHJtICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBwZXJtaXR0ZWQgY2FwYWJpbGl0aWVzCiAgQ2FwRWZmICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBlZmZlY3RpdmUgY2FwYWJpbGl0aWVzCkBAIC0zMDAsNyArMzAwLDcgQEAKICAgcGVuZGluZyAgICAgICBiaXRtYXAgb2YgcGVuZGluZyBzaWduYWxzCiAgIGJsb2NrZWQgICAgICAgYml0bWFwIG9mIGJsb2NrZWQgc2lnbmFscwogICBzaWdpZ24gICAgICAgIGJpdG1hcCBvZiBpZ25vcmVkIHNpZ25hbHMKLSAgc2lnY2F0Y2ggICAgICBiaXRtYXAgb2YgY2F0Y2hlZCBzaWduYWxzCisgIHNpZ2NhdGNoICAgICAgYml0bWFwIG9mIGNhdWdodCBzaWduYWxzCiAgIHdjaGFuICAgICAgICAgYWRkcmVzcyB3aGVyZSBwcm9jZXNzIHdlbnQgdG8gc2xlZXAKICAgMCAgICAgICAgICAgICAocGxhY2UgaG9sZGVyKQogICAwICAgICAgICAgICAgIChwbGFjZSBob2xkZXIpCkBAIC04NTQsNyArODU0LDggQEAKICAgICAgICAgICAgICAgaWYgc3RyaWN0IG92ZXJjb21taXQgYWNjb3VudGluZyBpcyBlbmFibGVkIChtb2RlIDIgaW4KICAgICAgICAgICAgICAgJ3ZtLm92ZXJjb21taXRfbWVtb3J5JykuCiAgICAgICAgICAgICAgIFRoZSBDb21taXRMaW1pdCBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtdWxhOgotICAgICAgICAgICAgICBDb21taXRMaW1pdCA9ICgndm0ub3ZlcmNvbW1pdF9yYXRpbycgKiBQaHlzaWNhbCBSQU0pICsgU3dhcAorICAgICAgICAgICAgICBDb21taXRMaW1pdCA9IChbdG90YWwgUkFNIHBhZ2VzXSAtIFt0b3RhbCBodWdlIFRMQiBwYWdlc10pICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmNvbW1pdF9yYXRpbyAvIDEwMCArIFt0b3RhbCBzd2FwIHBhZ2VzXQogICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb24gYSBzeXN0ZW0gd2l0aCAxRyBvZiBwaHlzaWNhbCBSQU0gYW5kIDdHCiAgICAgICAgICAgICAgIG9mIHN3YXAgd2l0aCBhIGB2bS5vdmVyY29tbWl0X3JhdGlvYCBvZiAzMCBpdCB3b3VsZAogICAgICAgICAgICAgICB5aWVsZCBhIENvbW1pdExpbWl0IG9mIDcuM0cuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NoYXJlZHN1YnRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zaGFyZWRzdWJ0cmVlLnR4dAppbmRleCA0ZWRlNDIxLi4zMmExNzNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NoYXJlZHN1YnRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2hhcmVkc3VidHJlZS50eHQKQEAgLTcyNyw3ICs3MjcsNyBAQAogCQkJICBta2RpciAtcCAvdG1wL20zCiAJCQkgIG1vdW50IC0tcmJpbmQgL3Jvb3QgL3RtcC9tMwogCi0JCQkgIEkgd29udCcgZHJhdyB0aGUgdHJlZS4uYnV0IGl0IGhhcyAyNCB2ZnNtb3VudHMKKwkJCSAgSSB3b24ndCBkcmF3IHRoZSB0cmVlLi5idXQgaXQgaGFzIDI0IHZmc21vdW50cwogCiAKIAkJYXQgc3RlcCBpIHRoZSBudW1iZXIgb2YgdmZzbW91bnRzIGlzIFZbaV0gPSBpKlZbaS0xXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby9jb25zdW1lci50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8vY29uc3VtZXIudHh0CmluZGV4IDA5ODU0ZmUuLmQ4YWJmYzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby9jb25zdW1lci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvL2NvbnN1bWVyLnR4dApAQCAtNDEsNyArNDEsNyBAQAogd2l0aCBJU19FUlIoKSAodGhleSB3aWxsIG5ldmVyIHJldHVybiBhIE5VTEwgcG9pbnRlcikuIC1FTk9FTlQgd2lsbCBiZSByZXR1cm5lZAogaWYgYW5kIG9ubHkgaWYgbm8gR1BJTyBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgZGV2aWNlL2Z1bmN0aW9uL2luZGV4IHRyaXBsZXQsCiBvdGhlciBlcnJvciBjb2RlcyBhcmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgYSBHUElPIGhhcyBiZWVuIGFzc2lnbmVkIGJ1dCBhbiBlcnJvcgotb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gYWNxdWlyZSBpdC4gVGhpcyBpcyB1c2VmdWwgdG8gZGlzY3JpbWluYXRlIGJldHdlZW4gbWVyZQorb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGFjcXVpcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHRvIGRpc2NyaW1pbmF0ZSBiZXR3ZWVuIG1lcmUKIGVycm9ycyBhbmQgYW4gYWJzZW5jZSBvZiBHUElPIGZvciBvcHRpb25hbCBHUElPIHBhcmFtZXRlcnMuCiAKIERldmljZS1tYW5hZ2VkIHZhcmlhbnRzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxzbyBkZWZpbmVkOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncGlvL2RyaXZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8vZHJpdmVyLnR4dAppbmRleCBmNzNjYzdiLi5mYTlhMGE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwaW8vZHJpdmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dwaW8vZHJpdmVyLnR4dApAQCAtNzMsNiArNzMsNjUgQEAKIHRoZSBoZWFkZXIgPGxpbnV4L2lycS5oPi4gU28gYmFzaWNhbGx5IHN1Y2ggYSBkcml2ZXIgaXMgdXRpbGl6aW5nIHR3byBzdWItCiBzeXN0ZW1zIHNpbXVsdGFuZW91c2x5OiBncGlvIGFuZCBpcnEuCiAKK0dQSU8gaXJxY2hpcHMgdXN1YWxseSBmYWxsIGluIG9uZSBvZiB0d28gY2F0ZWdvcmllczoKKworKiBDSEFJTkVEIEdQSU8gaXJxY2hpcHM6IHRoZXNlIGFyZSB1c3VhbGx5IHRoZSB0eXBlIHRoYXQgaXMgZW1iZWRkZWQgb24KKyAgYW4gU29DLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBmYXN0IElSUSBoYW5kbGVyIGZvciB0aGUgR1BJT3MgdGhhdAorICBnZXRzIGNhbGxlZCBpbiBhIGNoYWluIGZyb20gdGhlIHBhcmVudCBJUlEgaGFuZGxlciwgbW9zdCB0eXBpY2FsbHkgdGhlCisgIHN5c3RlbSBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhpcyBtZWFucyB0aGUgR1BJTyBpcnFjaGlwIGlzIHJlZ2lzdGVyZWQKKyAgdXNpbmcgaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoKSBvciB0aGUgY29ycmVzcG9uZGluZworICBncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCkgaGVscGVyIGZ1bmN0aW9uLCBhbmQgdGhlIEdQSU8gaXJxY2hpcAorICBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGZyb20gdGhlIHBhcmVudCBpcnFjaGlwLCB3aGlsZQorICBob2xkaW5nIHRoZSBJUlFzIGRpc2FibGVkLiBUaGUgR1BJTyBpcnFjaGlwIHdpbGwgdGhlbiBlbmQgdXAgY2FsbGluZworICBzb21ldGhpbmcgbGlrZSB0aGlzIHNlcXVlbmNlIGluIGl0cyBpbnRlcnJ1cHQgaGFuZGxlcjoKKworICBzdGF0aWMgaXJxcmV0dXJuX3QgdGMzNTg5eF9ncGlvX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQorICAgICAgY2hhaW5lZF9pcnFfZW50ZXIoLi4uKTsKKyAgICAgIGdlbmVyaWNfaGFuZGxlX2lycSguLi4pOworICAgICAgY2hhaW5lZF9pcnFfZXhpdCguLi4pOworCisgIENoYWluZWQgR1BJTyBpcnFjaGlwcyB0eXBpY2FsbHkgY2FuIE5PVCBzZXQgdGhlIC5jYW5fc2xlZXAgZmxhZyBvbgorICBzdHJ1Y3QgZ3Bpb19jaGlwLCBhcyBldmVyeXRoaW5nIGhhcHBlbnMgZGlyZWN0bHkgaW4gdGhlIGNhbGxiYWNrcy4KKworKiBORVNURUQgVEhSRUFERUQgR1BJTyBpcnFjaGlwczogdGhlc2UgYXJlIG9mZi1jaGlwIEdQSU8gZXhwYW5kZXJzIGFuZCBhbnkKKyAgb3RoZXIgR1BJTyBpcnFjaGlwIHJlc2lkaW5nIG9uIHRoZSBvdGhlciBzaWRlIG9mIGEgc2xlZXBpbmcgYnVzLiBPZiBjb3Vyc2UKKyAgc3VjaCBkcml2ZXJzIHRoYXQgbmVlZCBzbG93IGJ1cyB0cmFmZmljIHRvIHJlYWQgb3V0IElSUSBzdGF0dXMgYW5kIHNpbWlsYXIsCisgIHRyYWZmaWMgd2hpY2ggbWF5IGluIHR1cm4gaW5jdXIgb3RoZXIgSVJRcyB0byBoYXBwZW4sIGNhbm5vdCBiZSBoYW5kbGVkCisgIGluIGEgcXVpY2sgSVJRIGhhbmRsZXIgd2l0aCBJUlFzIGRpc2FibGVkLiBJbnN0ZWFkIHRoZXkgbmVlZCB0byBzcGF3biBhCisgIHRocmVhZCBhbmQgdGhlbiBtYXNrIHRoZSBwYXJlbnQgSVJRIGxpbmUgdW50aWwgdGhlIGludGVycnVwdCBpcyBoYW5kbGVkCisgIGJ5IHRoZSBkcml2ZXIuIFRoZSBoYWxsbWFyayBvZiB0aGlzIGRyaXZlciBpcyB0byBjYWxsIHNvbWV0aGluZyBsaWtlCisgIHRoaXMgaW4gaXRzIGludGVycnVwdCBoYW5kbGVyOgorCisgIHN0YXRpYyBpcnFyZXR1cm5fdCB0YzM1ODl4X2dwaW9faXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCisgICAgICAuLi4KKyAgICAgIGhhbmRsZV9uZXN0ZWRfaXJxKGlycSk7CisKKyAgVGhlIGhhbGxtYXJrIG9mIHRocmVhZGVkIEdQSU8gaXJxY2hpcHMgaXMgdGhhdCB0aGV5IHNldCB0aGUgLmNhbl9zbGVlcAorICBmbGFnIG9uIHN0cnVjdCBncGlvX2NoaXAgdG8gdHJ1ZSwgaW5kaWNhdGluZyB0aGF0IHRoaXMgY2hpcCBtYXkgc2xlZXAKKyAgd2hlbiBhY2Nlc3NpbmcgdGhlIEdQSU9zLgorCitUbyBoZWxwIG91dCBpbiBoYW5kbGluZyB0aGUgc2V0LXVwIGFuZCBtYW5hZ2VtZW50IG9mIEdQSU8gaXJxY2hpcHMgYW5kIHRoZQorYXNzb2NpYXRlZCBpcnFkb21haW4gYW5kIHJlc291cmNlIGFsbG9jYXRpb24gY2FsbGJhY2tzLCB0aGUgZ3Bpb2xpYiBoYXMKK3NvbWUgaGVscGVycyB0aGF0IGNhbiBiZSBlbmFibGVkIGJ5IHNlbGVjdGluZyB0aGUgR1BJT0xJQl9JUlFDSElQIEtjb25maWcKK3N5bWJvbDoKKworKiBncGlvY2hpcF9pcnFjaGlwX2FkZCgpOiBhZGRzIGFuIGlycWNoaXAgdG8gYSBncGlvY2hpcC4gSXQgd2lsbCBwYXNzCisgIHRoZSBzdHJ1Y3QgZ3Bpb19jaGlwKiBmb3IgdGhlIGNoaXAgdG8gYWxsIElSUSBjYWxsYmFja3MsIHNvIHRoZSBjYWxsYmFja3MKKyAgbmVlZCB0byBlbWJlZCB0aGUgZ3Bpb19jaGlwIGluIGl0cyBzdGF0ZSBjb250YWluZXIgYW5kIG9idGFpbiBhIHBvaW50ZXIKKyAgdG8gdGhlIGNvbnRhaW5lciB1c2luZyBjb250YWluZXJfb2YoKS4KKyAgKFNlZSBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXNpZ24tcGF0dGVybnMudHh0KQorCisqIGdwaW9jaGlwX3NldF9jaGFpbmVkX2lycWNoaXAoKTogc2V0cyB1cCBhIGNoYWluZWQgaXJxIGhhbmRsZXIgZm9yIGEKKyAgZ3Bpb19jaGlwIGZyb20gYSBwYXJlbnQgSVJRIGFuZCBwYXNzZXMgdGhlIHN0cnVjdCBncGlvX2NoaXAqIGFzIGhhbmRsZXIKKyAgZGF0YS4gKE5vdGljZSBoYW5kbGVyIGRhdGEsIHNpbmNlIHRoZSBpcnFjaGlwIGRhdGEgaXMgbGlrZWx5IHVzZWQgYnkgdGhlCisgIHBhcmVudCBpcnFjaGlwISkgVGhpcyBpcyBmb3IgdGhlIGNoYWluZWQgdHlwZSBvZiBjaGlwLgorCitUbyB1c2UgdGhlIGhlbHBlcnMgcGxlYXNlIGtlZXAgdGhlIGZvbGxvd2luZyBpbiBtaW5kOgorCistIE1ha2Ugc3VyZSB0byBhc3NpZ24gYWxsIHJlbGV2YW50IG1lbWJlcnMgb2YgdGhlIHN0cnVjdCBncGlvX2NoaXAgc28gdGhhdAorICB0aGUgaXJxY2hpcCBjYW4gaW5pdGlhbGl6ZS4gRS5nLiAuZGV2IGFuZCAuY2FuX3NsZWVwIHNoYWxsIGJlIHNldCB1cAorICBwcm9wZXJseS4KKwogSXQgaXMgbGVnYWwgZm9yIGFueSBJUlEgY29uc3VtZXIgdG8gcmVxdWVzdCBhbiBJUlEgZnJvbSBhbnkgaXJxY2hpcCBubyBtYXR0ZXIKIGlmIHRoYXQgaXMgYSBjb21iaW5lZCBHUElPK0lSUSBkcml2ZXIuIFRoZSBiYXNpYyBwcmVtaXNlIGlzIHRoYXQgZ3Bpb19jaGlwIGFuZAogaXJxX2NoaXAgYXJlIG9ydGhvZ29uYWwsIGFuZCBvZmZlcmluZyB0aGVpciBzZXJ2aWNlcyBpbmRlcGVuZGVudCBvZiBlYWNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hpZC91aGlkLnR4dCBiL0RvY3VtZW50YXRpb24vaGlkL3VoaWQudHh0CmluZGV4IGVlNjU5MzYuLjU0YzhmOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaGlkL3VoaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaGlkL3VoaWQudHh0CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogcmVhZCgpCiAtLS0tLS0KLXJlYWQoKSB3aWxsIHJldHVybiBhIHF1ZXVlZCBvdXB1dCByZXBvcnQuIFRoZXNlIG91dHB1dCByZXBvcnRzIGNhbiBiZSBvZiB0eXBlCityZWFkKCkgd2lsbCByZXR1cm4gYSBxdWV1ZWQgb3V0cHV0IHJlcG9ydC4gVGhlc2Ugb3V0cHV0IHJlcG9ydHMgY2FuIGJlIG9mIHR5cGUKIFVISURfU1RBUlQsIFVISURfU1RPUCwgVUhJRF9PUEVOLCBVSElEX0NMT1NFLCBVSElEX09VVFBVVCBvciBVSElEX09VVFBVVF9FVi4gTm8KIHJlYWN0aW9uIGlzIHJlcXVpcmVkIHRvIGFueSBvZiB0aGVtIGJ1dCB5b3Ugc2hvdWxkIGhhbmRsZSB0aGVtIGFjY29yZGluZyB0byB5b3VyCiBuZWVkcy4gT25seSBVSElEX09VVFBVVCBhbmQgVUhJRF9PVVRQVVRfRVYgaGF2ZSBwYXlsb2Fkcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHNpLnR4dCBiL0RvY3VtZW50YXRpb24vaHNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM2Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9oc2kudHh0CkBAIC0wLDAgKzEsNzUgQEAKK0hTSSAtIEhpZ2gtc3BlZWQgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZQorCisxLiBJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fn5+fgorCitIaWdoIFNwZWVkIFN5bmNyb25vdXMgSW50ZXJmYWNlIChIU0kpIGlzIGEgZnVsbGR1cGxleCwgbG93IGxhdGVuY3kgcHJvdG9jb2wsCit0aGF0IGlzIG9wdGltaXplZCBmb3IgZGllLWxldmVsIGludGVyY29ubmVjdCBiZXR3ZWVuIGFuIEFwcGxpY2F0aW9uIFByb2Nlc3NvcgorYW5kIGEgQmFzZWJhbmQgY2hpcHNldC4gSXQgaGFzIGJlZW4gc3BlY2lmaWVkIGJ5IHRoZSBNSVBJIGFsbGlhbmNlIGluIDIwMDMgYW5kCitpbXBsZW1lbnRlZCBieSBtdWx0aXBsZSB2ZW5kb3JzIHNpbmNlIHRoZW4uCisKK1RoZSBIU0kgaW50ZXJmYWNlIHN1cHBvcnRzIGZ1bGwgZHVwbGV4IGNvbW11bmljYXRpb24gb3ZlciBtdWx0aXBsZSBjaGFubmVscworKHR5cGljYWxseSA4KSBhbmQgaXMgY2FwYWJsZSBvZiByZWFjaGluZyBzcGVlZHMgdXAgdG8gMjAwIE1iaXQvcy4KKworVGhlIHNlcmlhbCBwcm90b2NvbCB1c2VzIHR3byBzaWduYWxzLCBEQVRBIGFuZCBGTEFHIGFzIGNvbWJpbmVkIGRhdGEgYW5kIGNsb2NrCitzaWduYWxzIGFuZCBhbiBhZGRpdGlvbmFsIFJFQURZIHNpZ25hbCBmb3IgZmxvdyBjb250cm9sLiBBbiBhZGRpdGlvbmFsIFdBS0UKK3NpZ25hbCBjYW4gYmUgdXNlZCB0byB3YWtldXAgdGhlIGNoaXBzIGZyb20gc3RhbmRieSBtb2Rlcy4gVGhlIHNpZ25hbHMgYXJlCitjb21tb25seSBwcmVmaXhlZCBieSBBQyBmb3Igc2lnbmFscyBnb2luZyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBkaWUgdG8gdGhlCitjZWxsdWxhciBkaWUgYW5kIENBIGZvciBzaWduYWxzIGdvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisrLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rCit8ICBDZWxsdWxhciAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEFwcGxpY2F0aW9uICB8Cit8ICAgIERpZSAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBEaWUgICAgICB8Cit8ICAgICAgICAgICAgfCAtIC0gLSAtIC0gLSBDQVdBS0UgLSAtIC0gLSAtIC0gPnwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBUfC0tLS0tLS0tLS0tLSBDQURBVEEgLS0tLS0tLS0tLS0tPnxSICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBYfC0tLS0tLS0tLS0tLSBDQUZMQUcgLS0tLS0tLS0tLS0tPnxYICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfDwtLS0tLS0tLS0tLSBBQ1JFQURZIC0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfDwgLSAtIC0gLSAtICBBQ1dBS0UgLSAtIC0gLSAtIC0gLXwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBSfDwtLS0tLS0tLS0tLSBBQ0RBVEEgLS0tLS0tLS0tLS0tLXxUICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBYfDwtLS0tLS0tLS0tLSBBQ0ZMQUcgLS0tLS0tLS0tLS0tLXxYICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfC0tLS0tLS0tLS0tLSBDQVJFQURZIC0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rCisKKzIuIEhTSSBTdWJzeXN0ZW0gaW4gTGludXgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSW4gdGhlIExpbnV4IGtlcm5lbCB0aGUgaHNpIHN1YnN5c3RlbSBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGZvciBIU0kgZGV2aWNlcy4KK1RoZSBoc2kgc3Vic3lzdGVtIGNvbnRhaW5zIGRyaXZlcnMgZm9yIGhzaSBjb250cm9sbGVycyBpbmNsdWRpbmcgc3VwcG9ydCBmb3IKK211bHRpLXBvcnQgY29udHJvbGxlcnMgYW5kIHByb3ZpZGVzIGEgZ2VuZXJpYyBBUEkgZm9yIHVzaW5nIHRoZSBIU0kgcG9ydHMuCisKK0l0IGFsc28gY29udGFpbnMgSFNJIGNsaWVudCBkcml2ZXJzLCB3aGljaCBtYWtlIHVzZSBvZiB0aGUgZ2VuZXJpYyBBUEkgdG8KK2ltcGxlbWVudCBhIHByb3RvY29sIHVzZWQgb24gdGhlIEhTSSBpbnRlcmZhY2UuIFRoZXNlIGNsaWVudCBkcml2ZXJzIGNhbgordXNlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgY2hhbm5lbHMuCisKKzMuIGhzaS1jaGFyIERldmljZQorfn5+fn5+fn5+fn5+fn5+fn5+CisKK0VhY2ggcG9ydCBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVycyBhIGdlbmVyaWMgY2xpZW50IGRyaXZlciBjYWxsZWQgaHNpX2NoYXIsCit3aGljaCBwcm92aWRlcyBhIGNoYXJlY3RlciBkZXZpY2UgZm9yIHVzZXJzcGFjZSByZXByZXNlbnRpbmcgdGhlIEhTSSBwb3J0LgorSXQgY2FuIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgdmlhIEhTSSBmcm9tIHVzZXJzcGFjZS4gVXNlcnNwYWNlIG1heQorY29uZmlndXJlIHRoZSBoc2lfY2hhciBkZXZpY2UgdXNpbmcgdGhlIGZvbGxvd2luZyBpb2N0bCBjb21tYW5kczoKKworKiBIU0NfUkVTRVQ6CisgLSBmbHVzaCB0aGUgSFNJIHBvcnQKKworKiBIU0NfU0VUX1BNCisgLSBlbmFibGUgb3IgZGlzYWJsZSB0aGUgY2xpZW50LgorCisqIEhTQ19TRU5EX0JSRUFLCisgLSBzZW5kIGJyZWFrCisKKyogSFNDX1NFVF9SWAorIC0gc2V0IFJYIGNvbmZpZ3VyYXRpb24KKworKiBIU0NfR0VUX1JYCisgLSBnZXQgUlggY29uZmlndXJhdGlvbgorCisqIEhTQ19TRVRfVFgKKyAtIHNldCBUWCBjb25maWd1cmF0aW9uCisKKyogSFNDX0dFVF9UWAorIC0gZ2V0IFRYIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vZW1jMTQwMyBiL0RvY3VtZW50YXRpb24vaHdtb24vZW1jMTQwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY5YjBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9lbWMxNDAzCkBAIC0wLDAgKzEsNTkgQEAKK0tlcm5lbCBkcml2ZXIgZW1jMTQwMworPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBTTVNDIC8gTWljcm9jaGlwIEVNQzE0MDIsIEVNQzE0MTIKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4MWMsIDB4MjksIDB4NGMsIDB4NGQsIDB4NWMKKyAgICBQcmVmaXg6ICdlbWMxNDAyJworICAgIERhdGFzaGVldHM6CisJaHR0cDovL3d3MS5taWNyb2NoaXAuY29tL2Rvd25sb2Fkcy9lbi9EZXZpY2VEb2MvMTQxMi5wZGYKKwlodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURvYy8xNDAyLnBkZgorICAqIFNNU0MgLyBNaWNyb2NoaXAgRU1DMTQwMywgRU1DMTQwNCwgRU1DMTQxMywgRU1DMTQxNAorICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCwgMHgyOSwgMHg0YywgMHg0ZAorICAgIFByZWZpeDogJ2VtYzE0MDMnLCAnZW1jMTQwNCcKKyAgICBEYXRhc2hlZXRzOgorCWh0dHA6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvZW4vRGV2aWNlRG9jLzE0MDNfMTQwNC5wZGYKKwlodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURvYy8xNDEzXzE0MTQucGRmCisgICogU01TQyAvIE1pY3JvY2hpcCBFTUMxNDIyCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCisgICAgUHJlZml4OiAnZW1jMTQyMicKKyAgICBEYXRhc2hlZXQ6CisJaHR0cDovL3d3MS5taWNyb2NoaXAuY29tL2Rvd25sb2Fkcy9lbi9EZXZpY2VEb2MvMTQyMi5wZGYKKyAgKiBTTVNDIC8gTWljcm9jaGlwIEVNQzE0MjMsIEVNQzE0MjQKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKKyAgICBQcmVmaXg6ICdlbWMxNDIzJywgJ2VtYzE0MjQnCisgICAgRGF0YXNoZWV0OgorCWh0dHA6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvZW4vRGV2aWNlRG9jLzE0MjNfMTQyNC5wZGYKKworQXV0aG9yOgorICAgIEthbGhhbiBUcmlzYWwgPGthbGhhbi50cmlzYWxAaW50ZWwuY29tCisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycG9yYXRpb24gKFNNU0MpIC8gTWljcm9jaGlwIEVNQzE0eHggY2hpcHMKK2NvbnRhaW4gdXAgdG8gZm91ciB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBFTUMxNHgyIHN1cHBvcnQgdHdvIHNlbnNvcnMKKyhvbmUgaW50ZXJuYWwsIG9uZSBleHRlcm5hbCkuIEVNQzE0eDMgc3VwcG9ydCB0aHJlZSBzZW5zb3JzIChvbmUgaW50ZXJuYWwsCit0d28gZXh0ZXJuYWwpLCBhbmQgRU1DMTR4NCBzdXBwb3J0IGZvdXIgc2Vuc29ycyAob25lIGludGVybmFsLCB0aHJlZQorZXh0ZXJuYWwpLgorCitUaGUgY2hpcHMgaW1wbGVtZW50IHRocmVlIGxpbWl0cyBmb3IgZWFjaCBzZW5zb3I6IGxvdyAodGVtcFhfbWluKSwgaGlnaAorKHRlbXBYX21heCkgYW5kIGNyaXRpY2FsICh0ZW1wWF9jcml0LikgVGhlIGNoaXBzIGFsc28gaW1wbGVtZW50IGFuCitoeXN0ZXJlc2lzIG1lY2hhbmlzbSB3aGljaCBhcHBsaWVzIHRvIGFsbCBsaW1pdHMuIFRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlCitpcyBzdG9yZWQgaW4gYSBzaW5nbGUgcmVnaXN0ZXIgb24gdGhlIGNoaXAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHJlbGF0aXZlCitkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxpbWl0IGFuZCBpdHMgaHlzdGVyZXNpcyBpcyBhbHdheXMgdGhlIHNhbWUgZm9yCithbGwgdGhyZWUgbGltaXRzLgorCitUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBpbXBsaWVzIHRoZSBmb2xsb3dpbmc6CisqIFdoZW4gc2V0dGluZyBhIGxpbWl0LCBpdHMgaHlzdGVyZXNpcyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93LCB0aGUKKyAgZGlmZmVyZW5jZSBzdGF5aW5nIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBvbGQgY3JpdGljYWwgbGltaXQKKyAgd2FzIDgwIGRlZ3JlZXMgQywgYW5kIHRoZSBoeXN0ZXJlc2lzIHdhcyA3NSBkZWdyZWVzIEMsIGFuZCB5b3UgY2hhbmdlCisgIHRoZSBjcml0aWNhbCBsaW1pdCB0byA5MCBkZWdyZWVzIEMsIHRoZW4gdGhlIGh5c3RlcmVzaXMgd2lsbAorICBhdXRvbWF0aWNhbGx5IGNoYW5nZSB0byA4NSBkZWdyZWVzIEMuCisqIFRoZSBoeXN0ZXJlc2lzIHZhbHVlcyBjYW4ndCBiZSBzZXQgaW5kZXBlbmRlbnRseS4gV2UgZGVjaWRlZCB0byBtYWtlCisgIG9ubHkgdGVtcDFfY3JpdF9oeXN0IHdyaXRhYmxlLCB3aGlsZSBhbGwgb3RoZXIgaHlzdGVyZXNpcyBhdHRyaWJ1dGVzCisgIGFyZSByZWFkLW9ubHkuIFNldHRpbmcgdGVtcDFfY3JpdF9oeXN0IHdyaXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgIHRlbXAxX2NyaXRfaHlzdCBhbmQgdGVtcDFfY3JpdCBpbnRvIHRoZSBjaGlwLCBhbmQgdGhlIHNhbWUgcmVsYXRpdmUKKyAgaHlzdGVyZXNpcyBhcHBsaWVzIGF1dG9tYXRpY2FsbHkgdG8gYWxsIG90aGVyIGxpbWl0cy4KKyogVGhlIGxpbWl0cyBzaG91bGQgYmUgc2V0IGJlZm9yZSB0aGUgaHlzdGVyZXNpcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vaHdtb24ta2VybmVsLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2h3bW9uLWtlcm5lbC1hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlY2RiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2h3bW9uLWtlcm5lbC1hcGkudHh0CkBAIC0wLDAgKzEsMTA3IEBACitUaGUgTGludXggSGFyZHdhcmUgTW9uaXRvcmluZyBrZXJuZWwgQVBJLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworR3VlbnRlciBSb2VjaworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgQVBJIHRoYXQgY2FuIGJlIHVzZWQgYnkgaGFyZHdhcmUgbW9uaXRvcmluZworZHJpdmVycyB0aGF0IHdhbnQgdG8gdXNlIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nIGZyYW1ld29yay4KKworVGhpcyBkb2N1bWVudCBkb2VzIG5vdCBkZXNjcmliZSB3aGF0IGEgaGFyZHdhcmUgbW9uaXRvcmluZyAoaHdtb24pIERyaXZlciBvcgorRGV2aWNlIGlzLiBJdCBhbHNvIGRvZXMgbm90IGRlc2NyaWJlIHRoZSBBUEkgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdXNlciBzcGFjZQordG8gY29tbXVuaWNhdGUgd2l0aCBhIGhhcmR3YXJlIG1vbml0b3JpbmcgZGV2aWNlLiBJZiB5b3Ugd2FudCB0byBrbm93IHRoaXMKK3RoZW4gcGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBmaWxlOiBEb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZS4KKworRm9yIGFkZGl0aW9uYWwgZ3VpZGVsaW5lcyBvbiBob3cgdG8gd3JpdGUgYW5kIGltcHJvdmUgaHdtb24gZHJpdmVycywgcGxlYXNlCithbHNvIHJlYWQgRG9jdW1lbnRhdGlvbi9od21vbi9zdWJtaXR0aW5nLXBhdGNoZXMuCisKK1RoZSBBUEkKKy0tLS0tLS0KK0VhY2ggaGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXIgbXVzdCAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4gYW5kLCBpbiBtb3N0CitjYXNlcywgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+LiBsaW51eC9od21vbi5oIGRlY2xhcmVzIHRoZSBmb2xsb3dpbmcKK3JlZ2lzdGVyL3VucmVnaXN0ZXIgZnVuY3Rpb25zOgorCitzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0cnVjdCBkZXZpY2UgKgoraHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgIHZvaWQgKmRydmRhdGEsCisJCQkJICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTsKKworc3RydWN0IGRldmljZSAqCitkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRydmRhdGEsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMpOworCit2b2lkIGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIGRldm1faHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KTsKKworaHdtb25fZGV2aWNlX3JlZ2lzdGVyIHJlZ2lzdGVycyBhIGhhcmR3YXJlIG1vbml0b3JpbmcgZGV2aWNlLiBUaGUgcGFyYW1ldGVyCitvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRldmljZS4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaGFyZHdhcmUgbW9uaXRvcmluZyBkZXZpY2UKK29yIFBUUl9FUlIgZm9yIGZhaWx1cmUuIElmIHRoaXMgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQsIGhhcmR3YXJlCittb25pdG9yaW5nIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBhdHRhY2hlZCB0bwordGhlIHBhcmVudCBkZXZpY2UgcHJpb3IgdG8gY2FsbGluZyBod21vbl9kZXZpY2VfcmVnaXN0ZXIuIEEgbmFtZSBhdHRyaWJ1dGUgbXVzdAoraGF2ZSBiZWVuIGNyZWF0ZWQgYnkgdGhlIGNhbGxlci4KKworaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzIGlzIHNpbWlsYXIgdG8gaHdtb25fZGV2aWNlX3JlZ2lzdGVyLiBIb3dldmVyLAoraXQgaGFzIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gVGhlIG5hbWUgcGFyYW1ldGVyIGlzIGEgcG9pbnRlciB0byB0aGUgaHdtb24KK2RldmljZSBuYW1lLiBUaGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHdpbCBjcmVhdGUgYSBuYW1lIHN5c2ZzIGF0dHJpYnV0ZQorcG9pbnRpbmcgdG8gdGhpcyBuYW1lLiBUaGUgZHJ2ZGF0YSBwYXJhbWV0ZXIgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGxvY2FsCitkcml2ZXIgZGF0YS4gIGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyB3aWxsIGF0dGFjaCB0aGlzIHBvaW50ZXIKK3RvIHRoZSBuZXdseSBhbGxvY2F0ZWQgaHdtb24gZGV2aWNlLiBUaGUgcG9pbnRlciBjYW4gYmUgcmV0cmlldmVkIGJ5IHRoZSBkcml2ZXIKK3VzaW5nIGRldl9nZXRfZHJ2ZGF0YSgpIG9uIHRoZSBod21vbiBkZXZpY2UgcG9pbnRlci4gVGhlIGdyb3VwcyBwYXJhbWV0ZXIgaXMKK2EgcG9pbnRlciB0byBhIGxpc3Qgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3Vwcy4gVGhlIGxpc3QgbXVzdCBiZSBOVUxMIHRlcm1pbmF0ZWQuCitod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMgY3JlYXRlcyB0aGUgaHdtb24gZGV2aWNlIHdpdGggbmFtZSBhdHRyaWJ1dGUKK2FzIHdlbGwgYXMgYWxsIHN5c2ZzIGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gdGhlIGh3bW9uIGRldmljZS4KKworZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMgaXMgc2ltaWxhciB0bworaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzLiBIb3dldmVyLCBpdCBpcyBkZXZpY2UgbWFuYWdlZCwgbWVhbmluZyB0aGUKK2h3bW9uIGRldmljZSBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlbW92ZWQgZXhwbGljaXRseSBieSB0aGUgcmVtb3ZhbCBmdW5jdGlvbi4KKworaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIgZGVyZWdpc3RlcnMgYSByZWdpc3RlcmVkIGhhcmR3YXJlIG1vbml0b3JpbmcgZGV2aWNlLgorVGhlIHBhcmFtZXRlciBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBwb2ludGVyIHRvIHRoZSByZWdpc3RlcmVkIGhhcmR3YXJlCittb25pdG9yaW5nIGRldmljZSBzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgZHJpdmVyCityZW1vdmUgZnVuY3Rpb24gaWYgdGhlIGhhcmR3YXJlIG1vbml0b3JpbmcgZGV2aWNlIHdhcyByZWdpc3RlcmVkIHdpdGgKK2h3bW9uX2RldmljZV9yZWdpc3RlciBvciB3aXRoIGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3Vwcy4KKworZGV2bV9od21vbl9kZXZpY2VfdW5yZWdpc3RlciBkb2VzIG5vdCBub3JtYWxseSBoYXZlIHRvIGJlIGNhbGxlZC4gSXQgaXMgb25seQorbmVlZGVkIGZvciBlcnJvciBoYW5kbGluZywgYW5kIG9ubHkgbmVlZGVkIGlmIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgYWZ0ZXIKK3RoZSBjYWxsIHRvIGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzLgorCitUaGUgaGVhZGVyIGZpbGUgbGludXgvaHdtb24tc3lzZnMuaCBwcm92aWRlcyBhIG51bWJlciBvZiB1c2VmdWwgbWFjcm9zIHRvCitkZWNsYXJlIGFuZCB1c2UgaGFyZHdhcmUgbW9uaXRvcmluZyBzeXNmcyBhdHRyaWJ1dGVzLgorCitJbiBtYW55IGNhc2VzLCB5b3UgY2FuIHVzZSB0aGUgZXhzdGluZyBkZWZpbmUgREVWSUNFX0FUVFIgdG8gZGVjbGFyZSBzdWNoCithdHRyaWJ1dGVzLiBUaGlzIGlzIGZlYXNpYmxlIGlmIGFuIGF0dHJpYnV0ZSBoYXMgbm8gYWRkaXRpb25hbCBjb250ZXh0LiBIb3dldmVyLAoraW4gbWFueSBjYXNlcyB0aGVyZSB3aWxsIGJlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBhIHNlbnNvciBpbmRleCB3aGljaAord2lsbCBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgc3lzZnMgYXR0cmlidXRlIGhhbmRsaW5nIGZ1bmN0aW9uLgorCitTRU5TT1JfREVWSUNFX0FUVFIgYW5kIFNFTlNPUl9ERVZJQ0VfQVRUUl8yIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhdHRyaWJ1dGVzCit3aGljaCBuZWVkIHN1Y2ggYWRkaXRpb25hbCBjb250ZXh0IGluZm9ybWF0aW9uLiBTRU5TT1JfREVWSUNFX0FUVFIgcmVxdWlyZXMKK29uZSBhZGRpdGlvbmFsIGFyZ3VtZW50LCBTRU5TT1JfREVWSUNFX0FUVFJfMiByZXF1aXJlcyB0d28uCisKK1NFTlNPUl9ERVZJQ0VfQVRUUiBkZWZpbmVzIGEgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHZhcmlhYmxlLgorVGhpcyBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzLgorCitzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgeworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyOworCWludCBpbmRleDsKK307CisKK1lvdSBjYW4gdXNlIHRvX3NlbnNvcl9kZXZfYXR0ciB0byBnZXQgdGhlIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgZnJvbSB0aGUKK2F0dHJpYnV0ZSByZWFkIG9yIHdyaXRlIGZ1bmN0aW9uLiBJdHMgcGFyYW1ldGVyIGlzIHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlCithdHRyaWJ1dGUgaXMgYXR0YWNoZWQuCisKK1NFTlNPUl9ERVZJQ0VfQVRUUl8yIGRlZmluZXMgYSBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiB2YXJpYWJsZSwKK3doaWNoIGlzIGRlZmluZWQgYXMgZm9sbG93cy4KKworc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgeworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyOworCXU4IGluZGV4OworCXU4IG5yOworfTsKKworVXNlIHRvX3NlbnNvcl9kZXZfYXR0cl8yIHRvIGdldCB0aGUgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gSXRzIHBhcmFtZXRlcgoraXMgdGhlIGRldmljZSB0byB3aGljaCB0aGUgYXR0cmlidXRlIGlzIGF0dGFjaGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyIGIvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCmluZGV4IDg2OGQ3NGQuLmYzODkzZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vamM0MgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKQEAgLTUsOSArNSwxMiBAQAogICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0MDgKICAgICBEYXRhc2hlZXRzOgogCWh0dHA6Ly93d3cuYW5hbG9nLmNvbS9zdGF0aWMvaW1wb3J0ZWQtZmlsZXMvZGF0YV9zaGVldHMvQURUNzQwOC5wZGYKLSAgKiBBdG1lbCBBVDMwVFMwMAorICAqIEF0bWVsIEFUMzBUUzAwLCBBVDMwVFMwMDJBL0IsIEFUMzBUU0UwMDRBCiAgICAgRGF0YXNoZWV0czoKIAlodHRwOi8vd3d3LmF0bWVsLmNvbS9JbWFnZXMvZG9jODU4NS5wZGYKKwlodHRwOi8vd3d3LmF0bWVsLmNvbS9JbWFnZXMvZG9jODcxMS5wZGYKKwlodHRwOi8vd3d3LmF0bWVsLmNvbS9JbWFnZXMvQXRtZWwtODg1Mi1TRUVQUk9NLUFUMzBUU0UwMDJBLURhdGFzaGVldC5wZGYKKwlodHRwOi8vd3d3LmF0bWVsLmNvbS9JbWFnZXMvQXRtZWwtODg2OC1EVFMtQVQzMFRTRTAwNEEtRGF0YXNoZWV0LnBkZgogICAqIElEVCBUU0UyMDAyQjMsIFRTRTIwMDJHQjIsIFRTMzAwMEIzLCBUUzMwMDBHQjIKICAgICBEYXRhc2hlZXRzOgogCWh0dHA6Ly93d3cuaWR0LmNvbS9zaXRlcy9kZWZhdWx0L2ZpbGVzL2RvY3VtZW50cy9JRFRfVFNFMjAwMkIzQ19EU1RfMjAxMDA1MTJfMTIwMzAzMTUyMDU2LnBkZgpAQCAtMzQsMTIgKzM3LDEzIEBACiAgICAgRGF0YXNoZWV0OgogCWh0dHA6Ly93d3cub25zZW1pLmNvbS9wdWJfbGluay9Db2xsYXRlcmFsL0NBVDM0VFMwMi1ELlBERgogCWh0dHA6Ly93d3cub25zZW1pLmNvbS9wdWIvQ29sbGF0ZXJhbC9DQVQ2MDk1LUQuUERGCi0gICogU1QgTWljcm9lbGVjdHJvbmljcyBTVFRTNDI0LCBTVFRTNDI0RTAyLCBTVFRTMjAwMiwgU1RUUzMwMDAKKyAgKiBTVCBNaWNyb2VsZWN0cm9uaWNzIFNUVFM0MjQsIFNUVFM0MjRFMDIsIFNUVFMyMDAyLCBTVFRTMjAwNCwgU1RUUzMwMDAKICAgICBEYXRhc2hlZXRzOgotCWh0dHA6Ly93d3cuc3QuY29tL2ludGVybmV0L2NvbS9URUNITklDQUxfUkVTT1VSQ0VTL1RFQ0hOSUNBTF9MSVRFUkFUVVJFL0RBVEFTSEVFVC9DRDAwMTU3NTU2LnBkZgotCWh0dHA6Ly93d3cuc3QuY29tL2ludGVybmV0L2NvbS9URUNITklDQUxfUkVTT1VSQ0VTL1RFQ0hOSUNBTF9MSVRFUkFUVVJFL0RBVEFTSEVFVC9DRDAwMTU3NTU4LnBkZgotCWh0dHA6Ly93d3cuc3QuY29tL2ludGVybmV0L2NvbS9URUNITklDQUxfUkVTT1VSQ0VTL1RFQ0hOSUNBTF9MSVRFUkFUVVJFL0RBVEFTSEVFVC9DRDAwMjI1Mjc4LnBkZgotCWh0dHA6Ly93d3cuc3QuY29tL2ludGVybmV0L2NvbS9URUNITklDQUxfUkVTT1VSQ0VTL1RFQ0hOSUNBTF9MSVRFUkFUVVJFL0RBVEFfQlJJRUYvQ0QwMDI3MDkyMC5wZGYKKwlodHRwOi8vd3d3LnN0LmNvbS93ZWIvZW4vcmVzb3VyY2UvdGVjaG5pY2FsL2RvY3VtZW50L2RhdGFzaGVldC9DRDAwMTU3NTU2LnBkZgorCWh0dHA6Ly93d3cuc3QuY29tL3dlYi9lbi9yZXNvdXJjZS90ZWNobmljYWwvZG9jdW1lbnQvZGF0YXNoZWV0L0NEMDAxNTc1NTgucGRmCisJaHR0cDovL3d3dy5zdC5jb20vd2ViL2VuL3Jlc291cmNlL3RlY2huaWNhbC9kb2N1bWVudC9kYXRhc2hlZXQvQ0QwMDI2NjYzOC5wZGYKKwlodHRwOi8vd3d3LnN0LmNvbS93ZWIvZW4vcmVzb3VyY2UvdGVjaG5pY2FsL2RvY3VtZW50L2RhdGFzaGVldC9DRDAwMjI1Mjc4LnBkZgorCWh0dHA6Ly93d3cuc3QuY29tL3dlYi9lbi9yZXNvdXJjZS90ZWNobmljYWwvZG9jdW1lbnQvZGF0YXNoZWV0L0RNMDAwNzY3MDkucGRmCiAgICogSkVERUMgSkMgNDIuNCBjb21wbGlhbnQgdGVtcGVyYXR1cmUgc2Vuc29yIGNoaXBzCiAgICAgRGF0YXNoZWV0OgogCWh0dHA6Ly93d3cuamVkZWMub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvZG9jcy80XzAxXzA0UjE5LnBkZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc3CmluZGV4IDU3YzNhNDYuLmJmYzkxNWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG03NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtNzcKQEAgLTE4LDUgKzE4LDIxIEBACiAxMC1iaXQgQURDLCBhbmQgYSBkaWdpdGFsIGNvbXBhcmF0b3Igd2l0aCB1c2VyLXByb2dyYW1tYWJsZSB1cHBlcgogYW5kIGxvd2VyIGxpbWl0IHZhbHVlcy4KIAotTGltaXRzIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUgT3ZlcnRlbXBlcmF0dXJlIFNodXRkb3duIHJlZ2lzdGVyIGFuZAotSHlzdGVyZXNpcyByZWdpc3Rlci4KK1RoZSBMTTc3IGltcGxlbWVudHMgMyBsaW1pdHM6IGxvdyAodGVtcDFfbWluKSwgaGlnaCAodGVtcDFfbWF4KSBhbmQKK2NyaXRpY2FsICh0ZW1wMV9jcml0LikgSXQgYWxzbyBpbXBsZW1lbnRzIGFuIGh5c3RlcmVzaXMgbWVjaGFuaXNtIHdoaWNoCithcHBsaWVzIHRvIGFsbCAzIGxpbWl0cy4gVGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgaXMgc3RvcmVkIGluIGEgc2luZ2xlCityZWdpc3RlciBvbiB0aGUgY2hpcCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuCit0aGUgbGltaXQgYW5kIGl0cyBoeXN0ZXJlc2lzIGlzIGFsd2F5cyB0aGUgc2FtZSBmb3IgYWxsIDMgbGltaXRzLgorCitUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBpbXBsaWVzIHRoZSBmb2xsb3dpbmc6CisqIFdoZW4gc2V0dGluZyBhIGxpbWl0LCBpdHMgaHlzdGVyZXNpcyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93LCB0aGUKKyAgZGlmZmVyZW5jZSBzdGF5aW5nIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBvbGQgY3JpdGljYWwgbGltaXQKKyAgd2FzIDgwIGRlZ3JlZXMgQywgYW5kIHRoZSBoeXN0ZXJlc2lzIHdhcyA3NSBkZWdyZWVzIEMsIGFuZCB5b3UgY2hhbmdlCisgIHRoZSBjcml0aWNhbCBsaW1pdCB0byA5MCBkZWdyZWVzIEMsIHRoZW4gdGhlIGh5c3RlcmVzaXMgd2lsbAorICBhdXRvbWF0aWNhbGx5IGNoYW5nZSB0byA4NSBkZWdyZWVzIEMuCisqIEFsbCAzIGh5c3RlcmVzaXMgY2FuJ3QgYmUgc2V0IGluZGVwZW5kZW50bHkuIFdlIGRlY2lkZWQgdG8gbWFrZQorICB0ZW1wMV9jcml0X2h5c3Qgd3JpdGFibGUsIHdoaWxlIHRlbXAxX21pbl9oeXN0IGFuZCB0ZW1wMV9tYXhfaHlzdCBhcmUKKyAgcmVhZC1vbmx5LiBTZXR0aW5nIHRlbXAxX2NyaXRfaHlzdCB3cml0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICB0ZW1wMV9jcml0X2h5c3QgYW5kIHRlbXAxX2NyaXQgaW50byB0aGUgY2hpcCwgYW5kIHRoZSBzYW1lIHJlbGF0aXZlCisgIGh5c3RlcmVzaXMgYXBwbGllcyBhdXRvbWF0aWNhbGx5IHRvIHRoZSBsb3cgYW5kIGhpZ2ggbGltaXRzLgorKiBUaGUgbGltaXRzIHNob3VsZCBiZSBzZXQgYmVmb3JlIHRoZSBoeXN0ZXJlc2lzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q2NjgzIGIvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q2NjgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzAxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDY2ODMKQEAgLTAsMCArMSw1NyBAQAorS2VybmVsIGRyaXZlciBuY3Q2NjgzCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE51dm90b24gTkNUNjY4M0QKKyAgICBQcmVmaXg6ICduY3Q2NjgzJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAorCitBdXRob3JzOgorICAgICAgICBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBOdXZvdG9uIE5DVDY2ODNEIGVTSU8gY2hpcC4KKworVGhlIGNoaXBzIGltcGxlbWVudCB1cCB0byBzaGFyZWQgMzIgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2Ugc2Vuc29ycy4KK0l0IHN1cHBvcnRzIHVwIHRvIDE2IGZhbiByb3RhdGlvbiBzZW5zb3JzIGFuZCB1cCB0byA4IGZhbiBjb250cm9sIGVuZ2luZXMuCisKK1RlbXBlcmF0dXJlcyBhcmUgbWVhc3VyZWQgaW4gZGVncmVlcyBDZWxzaXVzLiBNZWFzdXJlbWVudCByZXNvbHV0aW9uIGlzCiswLjUgZGVncmVlcyBDLgorCitWb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiBtaWxsaXZvbHRzLgorCitGYW4gcm90YXRpb24gc3BlZWRzIGFyZSByZXBvcnRlZCBpbiBSUE0gKHJvdGF0aW9ucyBwZXIgbWludXRlKS4KKworVXNhZ2UgTm90ZQorLS0tLS0tLS0tLQorCitMaW1pdCByZWdpc3RlciBsb2NhdGlvbnMgb24gSW50ZWwgYm9hcmRzIHdpdGggRUMgZmlybXdhcmUgdmVyc2lvbiAxLjAKK2J1aWxkIGRhdGUgMDQvMDMvMTMgZG8gbm90IG1hdGNoIHRoZSByZWdpc3RlciBsb2NhdGlvbnMgaW4gdGhlIE51dm90b24KK2RhdGFzaGVldC4gTnV2b3RvbiBjb25maXJtcyB0aGF0IEludGVsIHVzZXMgYSBzcGVjaWFsIGZpcm13YXJlIHZlcnNpb24KK3dpdGggZGlmZmVyZW50IHJlZ2lzdGVyIGFkZHJlc3Nlcy4gVGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmluZyB0aGUgSW50ZWwKK2Zpcm13YXJlIGlzIGhlbGQgdW5kZXIgTkRBIGJ5IE51dm90b24gYW5kIEludGVsIGFuZCBub3QgYXZhaWxhYmxlCit0byB0aGUgcHVibGljLgorCitTb21lIG9mIHRoZSByZWdpc3RlciBsb2NhdGlvbnMgY2FuIGJlIHJldmVyc2UgZW5naW5lZXJlZDsgb3RoZXJzIGFyZSB0b28KK3dlbGwgaGlkZGVuLiBHaXZlbiB0aGlzLCB3cml0aW5nIGFueSB2YWx1ZXMgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcworY29uc2lkZXJlZCB0b28gcmlza3kgd2l0aCB0aGlzIGZpcm13YXJlIGFuZCBoYXMgYmVlbiBkaXNhYmxlZC4gQWxsIGxpbWl0cworbXVzdCBhbGwgYmUgd3JpdHRlbiBmcm9tIHRoZSBCSU9TLgorCitUaGUgZHJpdmVyIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGggdGhlIEludGVsIGZpcm13YXJlLCBhbmQgYnkgZGVmYXVsdAorb25seSBpbnN0YW50aWF0ZXMgb24gSW50ZWwgYm9hcmRzLiBUbyBlbmFibGUgaXQgb24gbm9uLUludGVsIGJvYXJkcywKK3NldCB0aGUgJ2ZvcmNlJyBtb2R1bGUgcGFyYW1ldGVyIHRvIDEuCisKK1Rlc3RlZCBCb2FyZHMgYW5kIEZpcm13YXJlIFZlcnNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIGhhcyBiZWVuIHJlcG9ydGVkIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIGJvYXJkcyBhbmQKK2Zpcm13YXJlIHZlcnNpb25zLgorCitCb2FyZAkJRmlybXdhcmUgdmVyc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbnRlbCBESDg3UkwJTkNUNjY4M0QgRUMgZmlybXdhcmUgdmVyc2lvbiAxLjAgYnVpbGQgMDQvMDMvMTMKK0ludGVsIERIODdNQwlOQ1Q2NjgzRCBFQyBmaXJtd2FyZSB2ZXJzaW9uIDEuMCBidWlsZCAwNC8wMy8xMworSW50ZWwgREI4NUZMCU5DVDY2ODNEIEVDIGZpcm13YXJlIHZlcnNpb24gMS4wIGJ1aWxkIDA0LzAzLzEzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2FscHMudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hbHBzLnR4dAppbmRleCBlNTQ0YzdmLi45MGJjYTZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L2FscHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvYWxwcy50eHQKQEAgLTk0LDcgKzk0LDcgQEAKIAogTm90ZSB0aGF0IHRoZSBkZXZpY2UgbmV2ZXIgc2lnbmFscyBvdmVyZmxvdyBjb25kaXRpb24uCiAKLUFMUFMgQWJzb2x1dGUgTW9kZSAtIFByb3RvY29sIFZlcmlvbiAxCitBTFBTIEFic29sdXRlIE1vZGUgLSBQcm90b2NvbCBWZXJzaW9uIDEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICBieXRlIDA6ICAxICAgIDAgICAgMCAgICAwICAgIDEgICB4OSAgIHg4ICAgeDcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQKaW5kZXggNjY2YzA2Yy4uMGFjZmRkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQKQEAgLTIyNiw3ICsyMjYsNyBAQAogfn5+fn5+fn5+fn4KICAgZXZkZXYgaXMgdGhlIGdlbmVyaWMgaW5wdXQgZXZlbnQgaW50ZXJmYWNlLiBJdCBwYXNzZXMgdGhlIGV2ZW50cwogZ2VuZXJhdGVkIGluIHRoZSBrZXJuZWwgc3RyYWlnaHQgdG8gdGhlIHByb2dyYW0sIHdpdGggdGltZXN0YW1wcy4gVGhlCi1BUEkgaXMgc3RpbGwgZXZvbHZpbmcsIGJ1dCBzaG91bGQgYmUgdXNlYWJsZSBub3cuIEl0J3MgZGVzY3JpYmVkIGluCitBUEkgaXMgc3RpbGwgZXZvbHZpbmcsIGJ1dCBzaG91bGQgYmUgdXNhYmxlIG5vdy4gSXQncyBkZXNjcmliZWQgaW4KIHNlY3Rpb24gNS4gCiAKICAgVGhpcyBzaG91bGQgYmUgdGhlIHdheSBmb3IgR1BNIGFuZCBYIHRvIGdldCBrZXlib2FyZCBhbmQgbW91c2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMDkzM2VjNC4uYWY1NWUxMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTg5Niw2ICs4OTYsNyBAQAogCQkJd2hpY2ggYXJlIG5vdCB1bm1hcHBlZC4KIAogCWVhcmx5Y29uPQlbS05MXSBPdXRwdXQgZWFybHkgY29uc29sZSBkZXZpY2UgYW5kIG9wdGlvbnMuCisKIAkJdWFydFs4MjUwXSxpbyw8YWRkcj5bLG9wdGlvbnNdCiAJCXVhcnRbODI1MF0sbW1pbyw8YWRkcj5bLG9wdGlvbnNdCiAJCXVhcnRbODI1MF0sbW1pbzMyLDxhZGRyPlssb3B0aW9uc10KQEAgLTkwNSw3ICs5MDYsMTUgQEAKIAkJCShtbWlvKSBvciAzMi1iaXQgKG1taW8zMikuCiAJCQlUaGUgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIHR0eVMsIGFib3ZlLgogCi0JZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU4sQVJNXQorCQlwbDAxMSw8YWRkcj4KKwkJCVN0YXJ0IGFuIGVhcmx5LCBwb2xsZWQtbW9kZSBjb25zb2xlIG9uIGEgcGwwMTEgc2VyaWFsCisJCQlwb3J0IGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gVGhlIHBsMDExIHNlcmlhbCBwb3J0CisJCQltdXN0IGFscmVhZHkgYmUgc2V0dXAgYW5kIGNvbmZpZ3VyZWQuIE9wdGlvbnMgYXJlIG5vdAorCQkJeWV0IHN1cHBvcnRlZC4KKworCQlzbWgJVXNlIEFSTSBzZW1paG9zdGluZyBjYWxscyBmb3IgZWFybHkgY29uc29sZS4KKworCWVhcmx5cHJpbnRrPQlbWDg2LFNILEJMQUNLRklOLEFSTSxNNjhrXQogCQkJZWFybHlwcmludGs9dmdhCiAJCQllYXJseXByaW50az1lZmkKIAkJCWVhcmx5cHJpbnRrPXhlbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IDU1NmY5NTEuLjQ2NDEyYmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTE1ODMsMjAgKzE1ODMsMjEgQEAKICAgICAgaW5zZXJ0IGFueXRoaW5nIG1vcmUgdGhhbiBhIGNvbXBpbGVyIGJhcnJpZXIgaW4gYSBVUCBjb21waWxhdGlvbi4KIAogCi0gKCopIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKLSAoKikgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7Ci0gKCopIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKLSAoKikgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisgKCopIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworICgqKSBzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCi0gICAgIFRoZXNlIGFyZSBmb3IgdXNlIHdpdGggYXRvbWljIGFkZCwgc3VidHJhY3QsIGluY3JlbWVudCBhbmQgZGVjcmVtZW50Ci0gICAgIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHJldHVybiBhIHZhbHVlLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCBmb3IgcmVmZXJlbmNlCi0gICAgIGNvdW50aW5nLiAgVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBpbXBseSBtZW1vcnkgYmFycmllcnMuCisgICAgIFRoZXNlIGFyZSBmb3IgdXNlIHdpdGggYXRvbWljIChzdWNoIGFzIGFkZCwgc3VidHJhY3QsIGluY3JlbWVudCBhbmQKKyAgICAgZGVjcmVtZW50KSBmdW5jdGlvbnMgdGhhdCBkb24ndCByZXR1cm4gYSB2YWx1ZSwgZXNwZWNpYWxseSB3aGVuIHVzZWQgZm9yCisgICAgIHJlZmVyZW5jZSBjb3VudGluZy4gIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgaW1wbHkgbWVtb3J5IGJhcnJpZXJzLgorCisgICAgIFRoZXNlIGFyZSBhbHNvIHVzZWQgZm9yIGF0b21pYyBiaXRvcCBmdW5jdGlvbnMgdGhhdCBkbyBub3QgcmV0dXJuIGEKKyAgICAgdmFsdWUgKHN1Y2ggYXMgc2V0X2JpdCBhbmQgY2xlYXJfYml0KS4KIAogICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBhIHBpZWNlIG9mIGNvZGUgdGhhdCBtYXJrcyBhbiBvYmplY3QgYXMgYmVpbmcgZGVhZAogICAgICBhbmQgdGhlbiBkZWNyZW1lbnRzIHRoZSBvYmplY3QncyByZWZlcmVuY2UgY291bnQ6CiAKIAlvYmotPmRlYWQgPSAxOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfZGVjKCZvYmotPnJlZl9jb3VudCk7CiAKICAgICAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGRlYXRoIG1hcmsgb24gdGhlIG9iamVjdCBpcyBwZXJjZWl2ZWQgdG8gYmUgc2V0CkBAIC0xNjA2LDI3ICsxNjA3LDYgQEAKICAgICAgb3BlcmF0aW9ucyIgc3Vic2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdG8gdXNlIHRoZXNlLgogCiAKLSAoKikgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KHZvaWQpOwotICgqKSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCh2b2lkKTsKLQotICAgICBUaGVzZSBhcmUgZm9yIHVzZSBzaW1pbGFyIHRvIHRoZSBhdG9taWMgaW5jL2RlYyBiYXJyaWVycy4gIFRoZXNlIGFyZQotICAgICB0eXBpY2FsbHkgdXNlZCBmb3IgYml0d2lzZSB1bmxvY2tpbmcgb3BlcmF0aW9ucywgc28gY2FyZSBtdXN0IGJlIHRha2VuIGFzCi0gICAgIHRoZXJlIGFyZSBubyBpbXBsaWNpdCBtZW1vcnkgYmFycmllcnMgaGVyZSBlaXRoZXIuCi0KLSAgICAgQ29uc2lkZXIgaW1wbGVtZW50aW5nIGFuIHVubG9jayBvcGVyYXRpb24gb2Ygc29tZSBuYXR1cmUgYnkgY2xlYXJpbmcgYQotICAgICBsb2NraW5nIGJpdC4gIFRoZSBjbGVhcl9iaXQoKSB3b3VsZCB0aGVuIG5lZWQgdG8gYmUgYmFycmllcmVkIGxpa2UgdGhpczoKLQotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNsZWFyX2JpdCggLi4uICk7Ci0KLSAgICAgVGhpcyBwcmV2ZW50cyBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGNsZWFyIGxlYWtpbmcgdG8gYWZ0ZXIgaXQuICBTZWUKLSAgICAgdGhlIHN1YnNlY3Rpb24gb24gIkxvY2tpbmcgRnVuY3Rpb25zIiB3aXRoIHJlZmVyZW5jZSB0byBSRUxFQVNFIG9wZXJhdGlvbgotICAgICBpbXBsaWNhdGlvbnMuCi0KLSAgICAgU2VlIERvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBTZWUgdGhlICJBdG9taWMKLSAgICAgb3BlcmF0aW9ucyIgc3Vic2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdG8gdXNlIHRoZXNlLgotCi0KIE1NSU8gV1JJVEUgQkFSUklFUgogLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIyODMsMTEgKzIyNjMsMTEgQEAKIAljaGFuZ2VfYml0KCk7CiAKIFdpdGggdGhlc2UgdGhlIGFwcHJvcHJpYXRlIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVyIHNob3VsZCBiZSB1c2VkIGlmIG5lY2Vzc2FyeQotKHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGZvciBpbnN0YW5jZSkuCisoc21wX21iX19iZWZvcmVfYXRvbWljKCkgZm9yIGluc3RhbmNlKS4KIAogCiBUaGUgZm9sbG93aW5nIGFsc28gZG8gX25vdF8gaW1wbHkgbWVtb3J5IGJhcnJpZXJzLCBhbmQgc28gbWF5IHJlcXVpcmUgZXhwbGljaXQKLW1lbW9yeSBiYXJyaWVycyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMgKHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSBmb3IKK21lbW9yeSBiYXJyaWVycyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMgKHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGZvcgogaW5zdGFuY2UpOgogCiAJYXRvbWljX2FkZCgpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tdGQvbmFuZC9weGEzeHgtbmFuZC50eHQgYi9Eb2N1bWVudGF0aW9uL210ZC9uYW5kL3B4YTN4eC1uYW5kLnR4dAppbmRleCA4NDBmZDQxLi4xMDc0Y2JjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL210ZC9uYW5kL3B4YTN4eC1uYW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL210ZC9uYW5kL3B4YTN4eC1uYW5kLnR4dApAQCAtNDgsNyArNDgsNyBAQAogTm90ZSB0aGF0IHRoZSBhY3R1YWwgQkNIIG1vZGU6IEJDSC00IG9yIEJDSC04IHdpbGwgZGVwZW5kIG9uIHRoZSB3YXkKIHRoZSBjb250cm9sbGVyIGlzIGNvbmZpZ3VyZWQgdG8gdHJhbnNmZXIgdGhlIGRhdGEuCiAKLUluIHRoZSBCQ0ggbW9kZSB0aGUgRUNDIGNvZGUgd2lsbCBiZSBjYWxjdWxhdGVkIGZvciBlYWNoIHRyYW5zZmVyZWQgY2h1bmsKK0luIHRoZSBCQ0ggbW9kZSB0aGUgRUNDIGNvZGUgd2lsbCBiZSBjYWxjdWxhdGVkIGZvciBlYWNoIHRyYW5zZmVycmVkIGNodW5rCiBhbmQgZXhwZWN0ZWQgdG8gYmUgbG9jYXRlZCAod2hlbiByZWFkaW5nL3Byb2dyYW1taW5nKSByaWdodCBhZnRlciB0aGUgc3BhcmUKIGJ5dGVzIGFzIHRoZSBmaWd1cmUgYWJvdmUgc2hvd3MuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKaW5kZXggMmZhNDRjYi4uNGY3YWU1MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKQEAgLTcwNiw3ICs3MDYsNyBAQAogCiAgICAgUlhfTk9fQVVUT1RJTUVSOiAgICBQcmV2ZW50IGF1dG9tYXRpY2FsbHkgc3RhcnRpbmcgdGhlIHRpbWVvdXQgbW9uaXRvci4KIAotICAgIFJYX0FOTk9VTkNFX1JFU1VNRTogSWYgcGFzc2VkIGF0IFJYX1NFVFVQIGFuZCBhIHJlY2VpdmUgdGltZW91dCBvY2N1cmVkLCBhCisgICAgUlhfQU5OT1VOQ0VfUkVTVU1FOiBJZiBwYXNzZWQgYXQgUlhfU0VUVVAgYW5kIGEgcmVjZWl2ZSB0aW1lb3V0IG9jY3VycmVkLCBhCiAgICAgICBSWF9DSEFOR0VEIG1lc3NhZ2Ugd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiB0aGUgKGN5Y2xpYykgcmVjZWl2ZSByZXN0YXJ0cy4KIAogICAgIFRYX1JFU0VUX01VTFRJX0lEWDogUmVzZXQgdGhlIGluZGV4IGZvciB0aGUgbXVsdGlwbGUgZnJhbWUgdHJhbnNtaXNzaW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CmluZGV4IGJmNWRiZTMuLjU1YzU3NWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKQEAgLTg2LDcgKzg2LDcgQEAKIAogRENDUF9TT0NLT1BUX0NDSUQgaXMgd3JpdGUtb25seSBhbmQgc2V0cyBib3RoIHRoZSBUWCBhbmQgUlggQ0NJRHMgYXQgdGhlIHNhbWUKIHRpbWUsIGNvbWJpbmluZyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXh0IHR3byBzb2NrZXQgb3B0aW9ucy4gVGhpcyBvcHRpb24gaXMKLXByZWZlcnJhYmxlIG92ZXIgdGhlIGxhdHRlciB0d28sIHNpbmNlIG9mdGVuIGFwcGxpY2F0aW9ucyB3aWxsIHVzZSB0aGUgc2FtZQorcHJlZmVyYWJsZSBvdmVyIHRoZSBsYXR0ZXIgdHdvLCBzaW5jZSBvZnRlbiBhcHBsaWNhdGlvbnMgd2lsbCB1c2UgdGhlIHNhbWUKIHR5cGUgb2YgQ0NJRCBmb3IgYm90aCBkaXJlY3Rpb25zOyBhbmQgbWl4ZWQgdXNlIG9mIENDSURzIGlzIG5vdCBjdXJyZW50bHkgd2VsbAogdW5kZXJzdG9vZC4gVGhpcyBzb2NrZXQgb3B0aW9uIHRha2VzIGFzIGFyZ3VtZW50IGF0IGxlYXN0IG9uZSB1aW50OF90IHZhbHVlLCBvcgogYW4gYXJyYXkgb2YgdWludDhfdCB2YWx1ZXMsIHdoaWNoIG11c3QgbWF0Y2ggYXZhaWxhYmxlIENDSURTIChzZWUgYWJvdmUpLiBDQ0lEcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3RyYW5zYWN0aW9uYWxfbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy90cmFuc2FjdGlvbmFsX21lbW9yeS50eHQKaW5kZXggZGMyM2U1OC4uOTc5MWU5OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3RyYW5zYWN0aW9uYWxfbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvdHJhbnNhY3Rpb25hbF9tZW1vcnkudHh0CkBAIC0xNjAsNyArMTYwLDcgQEAKIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIGNoZWNrcG9pbnRlZCBzdGF0ZSwgcmF0aGVyIHRoYW4gdGhlIHNwZWN1bGF0ZWQKIHN0YXRlLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHNpZ25hbCBjb250ZXh0ICh3cml0dGVuIHRtIHN1c3BlbmRlZCkgd2lsbCBiZQogd3JpdHRlbiBiZWxvdyB0aGUgc3RhY2sgcmVxdWlyZWQgZm9yIHRoZSByb2xsYmFjay4gIFRoZSB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkCi1iZWN1YXNlIG9mIHRoZSB0cmVjbGFpbSwgc28gYW55IG1lbW9yeSB3cml0dGVuIGJldHdlZW4gdGhlIHRiZWdpbiBhbmQgdGhlCitiZWNhdXNlIG9mIHRoZSB0cmVjbGFpbSwgc28gYW55IG1lbW9yeSB3cml0dGVuIGJldHdlZW4gdGhlIHRiZWdpbiBhbmQgdGhlCiBzaWduYWwgd2lsbCBiZSByb2xsZWQgYmFjayBhbnl3YXkuCiAKIEZvciBzaWduYWxzIHRha2VuIGluIG5vbi1UTSBvciBzdXNwZW5kZWQgbW9kZSwgd2UgdXNlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmludGstZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByaW50ay1mb3JtYXRzLnR4dAppbmRleCA2ZjRlYjMyLi5iNDQ5ODIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ByaW50ay1mb3JtYXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ByaW50ay1mb3JtYXRzLnR4dApAQCAtMTk5LDExICsxOTksMTEgQEAKIAlEbyBub3QgdXNlIHRoaXMgZmVhdHVyZSB3aXRob3V0IHNvbWUgbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGUKIAljb3JyZWN0bmVzcyBvZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQgdmFfbGlzdCBhcmd1bWVudHMuCiAKLXU2NCBTSE9VTEQgYmUgcHJpbnRlZCB3aXRoICVsbHUvJWxseCwgKHVuc2lnbmVkIGxvbmcgbG9uZyk6Cit1NjQgU0hPVUxEIGJlIHByaW50ZWQgd2l0aCAlbGx1LyVsbHg6CiAKIAlwcmludGsoIiVsbHUiLCB1NjRfdmFyKTsKIAotczY0IFNIT1VMRCBiZSBwcmludGVkIHdpdGggJWxsZC8lbGx4LCAobG9uZyBsb25nKToKK3M2NCBTSE9VTEQgYmUgcHJpbnRlZCB3aXRoICVsbGQvJWxseDoKIAogCXByaW50aygiJWxsZCIsIHM2NF92YXIpOwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3JidHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL3JidHJlZS50eHQKaW5kZXggNjFiNmM0OC4uMzk4NzNlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9yYnRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmJ0cmVlLnR4dApAQCAtMjU1LDcgKzI1NSw3IEBACiB3YXkgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGRvIGVmZmljaWVudCBsb29rdXAgYW5kIGV4YWN0IG1hdGNoLgogCiBUaGlzICJleHRyYSBpbmZvcm1hdGlvbiIgc3RvcmVkIGluIGVhY2ggbm9kZSBpcyB0aGUgbWF4aW11bSBoaQotKG1heF9oaSkgdmFsdWUgYW1vbmcgYWxsIHRoZSBub2RlcyB0aGF0IGFyZSBpdHMgZGVzY2VuZGVudHMuIFRoaXMKKyhtYXhfaGkpIHZhbHVlIGFtb25nIGFsbCB0aGUgbm9kZXMgdGhhdCBhcmUgaXRzIGRlc2NlbmRhbnRzLiBUaGlzCiBpbmZvcm1hdGlvbiBjYW4gYmUgbWFpbnRhaW5lZCBhdCBlYWNoIG5vZGUganVzdCBiZSBsb29raW5nIGF0IHRoZSBub2RlCiBhbmQgaXRzIGltbWVkaWF0ZSBjaGlsZHJlbi4gQW5kIHRoaXMgd2lsbCBiZSB1c2VkIGluIE8obG9nIG4pIGxvb2t1cAogZm9yIGxvd2VzdCBtYXRjaCAobG93ZXN0IHN0YXJ0IGFkZHJlc3MgYW1vbmcgYWxsIHBvc3NpYmxlIG1hdGNoZXMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jma2lsbC50eHQgYi9Eb2N1bWVudGF0aW9uL3Jma2lsbC50eHQKaW5kZXggZjQzMDAwNC4uNDI3ZTg5NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmZraWxsLnR4dApAQCAtMjEsNyArMjEsNyBAQAogVGhlIHJma2lsbCBzdWJzeXN0ZW0gaGFzIGEgY29uY2VwdCBvZiAiaGFyZCIgYW5kICJzb2Z0IiBibG9jaywgd2hpY2gKIGRpZmZlciBsaXR0bGUgaW4gdGhlaXIgbWVhbmluZyAoYmxvY2sgPT0gdHJhbnNtaXR0ZXJzIG9mZikgYnV0IHJhdGhlciBpbgogd2hldGhlciB0aGV5IGNhbiBiZSBjaGFuZ2VkIG9yIG5vdDoKLSAtIGhhcmQgYmxvY2s6IHJlYWQtb25seSByYWRpbyBibG9jayB0aGF0IGNhbm5vdCBiZSBvdmVycmlkZW4gYnkgc29mdHdhcmUKKyAtIGhhcmQgYmxvY2s6IHJlYWQtb25seSByYWRpbyBibG9jayB0aGF0IGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IHNvZnR3YXJlCiAgLSBzb2Z0IGJsb2NrOiB3cml0YWJsZSByYWRpbyBibG9jayAobmVlZCBub3QgYmUgcmVhZGFibGUpIHRoYXQgaXMgc2V0IGJ5CiAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIHNvZnR3YXJlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3JvYnVzdC1mdXRleGVzLnR4dCBiL0RvY3VtZW50YXRpb24vcm9idXN0LWZ1dGV4ZXMudHh0CmluZGV4IDBhOTQ0NmEuLmFmNmZjZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcm9idXN0LWZ1dGV4ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcm9idXN0LWZ1dGV4ZXMudHh0CkBAIC0yMTAsNyArMjEwLDcgQEAKIHRlc3RlZCB0aGUgbmV3IGdsaWJjIGNvZGUgKG9uIHg4Nl82NCBhbmQgaTM4NiksIGFuZCBpdCB3b3JrcyBmb3IgaGlzCiByb2J1c3QtbXV0ZXggdGVzdGNhc2VzLgogCi1BbGwgb3RoZXIgYXJjaGl0ZWN0dXJlcyBzaG91bGQgYnVpbGQganVzdCBmaW5lIHRvbyAtIGJ1dCB0aGV5IHdvbnQgaGF2ZQorQWxsIG90aGVyIGFyY2hpdGVjdHVyZXMgc2hvdWxkIGJ1aWxkIGp1c3QgZmluZSB0b28gLSBidXQgdGhleSB3b24ndCBoYXZlCiB0aGUgbmV3IHN5c2NhbGxzIHlldC4KIAogQXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGltcGxlbWVudCB0aGUgbmV3IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9tb25yZWFkZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQKaW5kZXggYmVlYWE0Yi4uZDM3Mjk1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQKQEAgLTEwLDcgKzEwLDcgQEAKIERlc2NyaXB0aW9uCiA9PT09PT09PT09PQogVGhpcyBpdGVtIGRlbGl2ZXJzIGEgbmV3IExpbnV4IEFQSSBpbiB0aGUgZm9ybSBvZiBhIG1pc2MgY2hhciBkZXZpY2UgdGhhdCBpcwotdXNlYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGFsbG93cyByZWFkIGFjY2VzcyB0byB0aGUgei9WTSBNb25pdG9yIFJlY29yZHMKK3VzYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGFsbG93cyByZWFkIGFjY2VzcyB0byB0aGUgei9WTSBNb25pdG9yIFJlY29yZHMKIGNvbGxlY3RlZCBieSB0aGUgKk1PTklUT1IgU3lzdGVtIFNlcnZpY2Ugb2Ygei9WTS4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvemZjcGR1bXAudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL3pmY3BkdW1wLnR4dAppbmRleCBjZjQ1ZDI3Li5kYzkyOWJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvemZjcGR1bXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQKQEAgLTEsMTUgKzEsMTUgQEAKLXMzOTAgU0NTSSBkdW1wIHRvb2wgKHpmY3BkdW1wKQorVGhlIHMzOTAgU0NTSSBkdW1wIHRvb2wgKHpmY3BkdW1wKQogCiBTeXN0ZW0geiBtYWNoaW5lcyAoejkwMCBvciBoaWdoZXIpIHByb3ZpZGUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY3JlYXRpbmcgc3lzdGVtCiBkdW1wcyBvbiBTQ1NJIGRpc2tzLiBUaGUgZHVtcCBwcm9jZXNzIGlzIGluaXRpYXRlZCBieSBib290aW5nIGEgZHVtcCB0b29sLCB3aGljaAogaGFzIHRvIGNyZWF0ZSBhIGR1bXAgb2YgdGhlIGN1cnJlbnQgKHByb2JhYmx5IGNyYXNoZWQpIExpbnV4IGltYWdlLiBJbiBvcmRlciB0bwogbm90IG92ZXJ3cml0ZSBtZW1vcnkgb2YgdGhlIGNyYXNoZWQgTGludXggd2l0aCBkYXRhIG9mIHRoZSBkdW1wIHRvb2wsIHRoZQotaGFyZHdhcmUgc2F2ZXMgc29tZSBtZW1vcnkgcGx1cyB0aGUgcmVnaXN0ZXIgc2V0cyBvZiB0aGUgYm9vdCBjcHUgYmVmb3JlIHRoZQoraGFyZHdhcmUgc2F2ZXMgc29tZSBtZW1vcnkgcGx1cyB0aGUgcmVnaXN0ZXIgc2V0cyBvZiB0aGUgYm9vdCBDUFUgYmVmb3JlIHRoZQogZHVtcCB0b29sIGlzIGxvYWRlZC4gVGhlcmUgZXhpc3RzIGFuIFNDTFAgaGFyZHdhcmUgaW50ZXJmYWNlIHRvIG9idGFpbiB0aGUgc2F2ZWQKIG1lbW9yeSBhZnRlcndhcmRzLiBDdXJyZW50bHkgMzIgTUIgYXJlIHNhdmVkLgogCiBUaGlzIHpmY3BkdW1wIGltcGxlbWVudGF0aW9uIGNvbnNpc3RzIG9mIGEgTGludXggZHVtcCBrZXJuZWwgdG9nZXRoZXIgd2l0aAotYSB1c2Vyc3BhY2UgZHVtcCB0b29sLCB3aGljaCBhcmUgbG9hZGVkIHRvZ2V0aGVyIGludG8gdGhlIHNhdmVkIG1lbW9yeSByZWdpb24KK2EgdXNlciBzcGFjZSBkdW1wIHRvb2wsIHdoaWNoIGFyZSBsb2FkZWQgdG9nZXRoZXIgaW50byB0aGUgc2F2ZWQgbWVtb3J5IHJlZ2lvbgogYmVsb3cgMzIgTUIuIHpmY3BkdW1wIGlzIGluc3RhbGxlZCBvbiBhIFNDU0kgZGlzayB1c2luZyB6aXBsIChhcyBjb250YWluZWQgaW4KIHRoZSBzMzkwLXRvb2xzIHBhY2thZ2UpIHRvIG1ha2UgdGhlIGRldmljZSBib290YWJsZS4gVGhlIG9wZXJhdG9yIG9mIGEgTGludXgKIHN5c3RlbSBjYW4gdGhlbiB0cmlnZ2VyIGEgU0NTSSBkdW1wIGJ5IGJvb3RpbmcgdGhlIFNDU0kgZGlzaywgd2hlcmUgemZjcGR1bXAKQEAgLTE5LDY4ICsxOSwzMyBAQAogd2hpY2ggZXhwb3J0cyBtZW1vcnkgYW5kIHJlZ2lzdGVycyBvZiB0aGUgY3Jhc2hlZCBMaW51eCBpbiBhbiBzMzkwCiBzdGFuZGFsb25lIGR1bXAgZm9ybWF0LiBJdCBjYW4gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZS5nLiAvZGV2L21lbS4gVGhlCiBkdW1wIGZvcm1hdCBkZWZpbmVzIGEgNEsgaGVhZGVyIGZvbGxvd2VkIGJ5IHBsYWluIHVuY29tcHJlc3NlZCBtZW1vcnkuIFRoZQotcmVnaXN0ZXIgc2V0cyBhcmUgc3RvcmVkIGluIHRoZSBwcmVmaXggcGFnZXMgb2YgdGhlIHJlc3BlY3RpdmUgY3B1cy4gVG8gYnVpbGQgYQorcmVnaXN0ZXIgc2V0cyBhcmUgc3RvcmVkIGluIHRoZSBwcmVmaXggcGFnZXMgb2YgdGhlIHJlc3BlY3RpdmUgQ1BVcy4gVG8gYnVpbGQgYQogZHVtcCBlbmFibGVkIGtlcm5lbCB3aXRoIHRoZSB6Y29yZSBkcml2ZXIsIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbgotQ09ORklHX1pGQ1BEVU1QIGhhcyB0byBiZSBzZXQuIFdoZW4gcmVhZGluZyBmcm9tICJ6Y29yZS9tZW0iLCB0aGUgcGFydCBvZgorQ09ORklHX0NSQVNIX0RVTVAgaGFzIHRvIGJlIHNldC4gV2hlbiByZWFkaW5nIGZyb20gInpjb3JlL21lbSIsIHRoZSBwYXJ0IG9mCiBtZW1vcnksIHdoaWNoIGhhcyBiZWVuIHNhdmVkIGJ5IGhhcmR3YXJlIGlzIHJlYWQgYnkgdGhlIGRyaXZlciB2aWEgdGhlIFNDTFAKIGhhcmR3YXJlIGludGVyZmFjZS4gVGhlIHNlY29uZCBwYXJ0IGlzIGp1c3QgY29waWVkIGZyb20gdGhlIG5vbiBvdmVyd3JpdHRlbiByZWFsCiBtZW1vcnkuCiAKLVRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gb2YgemZjcGR1bXAgY2FuIHJlc2lkZSBlLmcuIGluIGFuIGludGl0cmFtZnMgb3IgYW4KLWluaXRyZC4gSXQgcmVhZHMgZnJvbSB6Y29yZS9tZW0gYW5kIHdyaXRlcyB0aGUgc3lzdGVtIGR1bXAgdG8gYSBmaWxlIG9uIGEKLVNDU0kgZGlzay4KK1NpbmNlIGtlcm5lbCB2ZXJzaW9uIDMuMTIgYWxzbyB0aGUgL3Byb2Mvdm1jb3JlIGZpbGUgY2FuIGFsc28gYmUgdXNlZCB0byBhY2Nlc3MKK3RoZSBkdW1wLgogCi1UbyBidWlsZCBhIHpmY3BkdW1wIGtlcm5lbCB1c2UgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyBpbiB5b3VyIGtlcm5lbAotY29uZmlndXJhdGlvbjoKLSAqIENPTkZJR19aRkNQRFVNUD15Ci0gKiBFbmFibGUgWkZDUCBkcml2ZXIKLSAqIEVuYWJsZSBTQ1NJIGRyaXZlcgotICogRW5hYmxlIGV4dDIgYW5kIGV4dDMgZmlsZXN5c3RlbXMKLSAqIERpc2FibGUgYXMgbWFueSBmZWF0dXJlcyBhcyBwb3NzaWJsZSB0byBrZWVwIHRoZSBrZXJuZWwgc21hbGwuCi0gICBFLmcuIG5ldHdvcmsgc3VwcG9ydCBpcyBub3QgbmVlZGVkIGF0IGFsbC4KK1RvIGdldCBhIHZhbGlkIHpmY3BkdW1wIGtlcm5lbCBjb25maWd1cmF0aW9uIHVzZSAibWFrZSB6ZmNwZHVtcF9kZWZjb25maWciLgogCi1UbyB1c2UgdGhlIHpmY3BkdW1wIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBpbiBhbiBpbml0cmFtZnMgeW91IGhhdmUgdG8gZG8gdGhlCi1mb2xsb3dpbmc6CitUaGUgczM5MCB6aXBsIHRvb2wgbG9va3MgZm9yIHRoZSB6ZmNwZHVtcCBrZXJuZWwgYW5kIG9wdGlvbmFsIGluaXRyZC9pbml0cmFtZnMKK3VuZGVyIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogCi0gKiBDb3B5IHRoZSB6ZmNwZHVtcCBleGVjdXRhYmxlIHNvbWV3aGVyZSBpbnRvIHlvdXIgTGludXggdHJlZS4KLSAgIEUuZy4gdG8gImFyY2gvczM5MC9ib290L3pmY3BkdW1wLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gaW5jbHVkZQotICAgc2hhcmVkIGxpYnJhcmllcywgY29tcGlsZSB0aGUgdG9vbCB3aXRoIHRoZSAiLXN0YXRpYyIgZ2NjIG9wdGlvbi4KLSAqIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgZTJmc2NrLCBhZGQgaXQgdG8geW91ciBzb3VyY2UgdHJlZSwgdG9vLiBUaGUgemZjcGR1bXAKLSAgIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIHN0YXJ0IC9zYmluL2UyZnNjayBmcm9tIHRoZSByYW1kaXNrLgotICogVXNlIGFuIGluaXRyYW1mcyBjb25maWcgZmlsZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisqIGtlcm5lbDogIDx6ZmNwZHVtcCBkaXJlY3Rvcnk+L3pmY3BkdW1wLmltYWdlCisqIHJhbWRpc2s6IDx6ZmNwZHVtcCBkaXJlY3Rvcnk+L3pmY3BkdW1wLnJkCiAKLSAgIGRpciAvZGV2IDc1NSAwIDAKLSAgIG5vZCAvZGV2L2NvbnNvbGUgNjQ0IDAgMCBjIDUgMQotICAgbm9kIC9kZXYvbnVsbCA2NDQgMCAwIGMgMSAzCi0gICBub2QgL2Rldi9zZGExIDY0NCAwIDAgYiA4IDEKLSAgIG5vZCAvZGV2L3NkYTIgNjQ0IDAgMCBiIDggMgotICAgbm9kIC9kZXYvc2RhMyA2NDQgMCAwIGIgOCAzCi0gICBub2QgL2Rldi9zZGE0IDY0NCAwIDAgYiA4IDQKLSAgIG5vZCAvZGV2L3NkYTUgNjQ0IDAgMCBiIDggNQotICAgbm9kIC9kZXYvc2RhNiA2NDQgMCAwIGIgOCA2Ci0gICBub2QgL2Rldi9zZGE3IDY0NCAwIDAgYiA4IDcKLSAgIG5vZCAvZGV2L3NkYTggNjQ0IDAgMCBiIDggOAotICAgbm9kIC9kZXYvc2RhOSA2NDQgMCAwIGIgOCA5Ci0gICBub2QgL2Rldi9zZGExMCA2NDQgMCAwIGIgOCAxMAotICAgbm9kIC9kZXYvc2RhMTEgNjQ0IDAgMCBiIDggMTEKLSAgIG5vZCAvZGV2L3NkYTEyIDY0NCAwIDAgYiA4IDEyCi0gICBub2QgL2Rldi9zZGExMyA2NDQgMCAwIGIgOCAxMwotICAgbm9kIC9kZXYvc2RhMTQgNjQ0IDAgMCBiIDggMTQKLSAgIG5vZCAvZGV2L3NkYTE1IDY0NCAwIDAgYiA4IDE1Ci0gICBmaWxlIC9pbml0IGFyY2gvczM5MC9ib290L3pmY3BkdW1wIDc1NSAwIDAKLSAgIGZpbGUgL3NiaW4vZTJmc2NrIGFyY2gvczM5MC9ib290L2UyZnNjayA3NTUgMCAwCi0gICBkaXIgL3Byb2MgNzU1IDAgMAotICAgZGlyIC9zeXMgNzU1IDAgMAotICAgZGlyIC9tbnQgNzU1IDAgMAotICAgZGlyIC9zYmluIDc1NSAwIDAKK1RoZSB6ZmNwZHVtcCBkaXJlY3RvcnkgaXMgZGVmaW5lZCBpbiB0aGUgczM5MC10b29scyBwYWNrYWdlLgogCi0gKiBJc3N1ZSAibWFrZSBpbWFnZSIgdG8gYnVpbGQgdGhlIHpmY3BkdW1wIGltYWdlIHdpdGggaW5pdHJhbWZzLgorVGhlIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gb2YgemZjcGR1bXAgY2FuIHJlc2lkZSBpbiBhbiBpbnRpdHJhbWZzIG9yIGFuCitpbml0cmQuIEl0IGNhbiBhbHNvIGJlIGluY2x1ZGVkIGluIGEgYnVpbHQtaW4ga2VybmVsIGluaXRyYW1mcy4gVGhlIGFwcGxpY2F0aW9uCityZWFkcyBmcm9tIC9wcm9jL3ZtY29yZSBvciB6Y29yZS9tZW0gYW5kIHdyaXRlcyB0aGUgc3lzdGVtIGR1bXAgdG8gYSBTQ1NJIGRpc2suCiAKLUluIGEgTGludXggZGlzdHJpYnV0aW9uIHRoZSB6ZmNwZHVtcCBlbmFibGVkIGtlcm5lbCBpbWFnZSBtdXN0IGJlIGNvcGllZCB0bwotL3Vzci9zaGFyZS96ZmNwZHVtcC96ZmNwZHVtcC5pbWFnZSwgd2hlcmUgdGhlIHMzOTAgemlwbCB0b29sIGlzIGxvb2tpbmcgZm9yIHRoZQotZHVtcCBrZXJuZWwgd2hlbiBwcmVwYXJpbmcgYSBTQ1NJIGR1bXAgZGlzay4KLQotSWYgeW91IHVzZSBhIHJhbWRpc2sgY29weSBpdCB0byAiL3Vzci9zaGFyZS96ZmNwZHVtcC96ZmNwZHVtcC5yZCIuCitUaGUgczM5MC10b29scyBwYWNrYWdlIHZlcnNpb24gMS4yNC4wIGFuZCBhYm92ZSBidWlsZHMgYW4gZXh0ZXJuYWwgemZjcGR1bXAKK2luaXRyYW1mcyB3aXRoIGEgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiB0aGF0IHdyaXRlcyB0aGUgZHVtcCB0byBhIFNDU0kKK3BhcnRpdGlvbi4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB6ZmNwZHVtcCByZWZlciB0byB0aGUgczM5MCAnVXNpbmcgdGhlIER1bXAKIFRvb2xzIGJvb2snLCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9ZYW1hLnR4dCBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvWWFtYS50eHQKaW5kZXggZGQ5MDhjZi4uMjI3YTYzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9ZYW1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1lhbWEudHh0CkBAIC0zNyw3ICszNyw3IEBACiBJbiBtb2RlIDEsIHNvZnR3YXJlIHRoYXQgaGFzIGRlZmluZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgcmVsYXRpb25zaGlwcwogYmV0d2VlbiBhIGRlYnVnZ2luZyBwcm9jZXNzIGFuZCBpdHMgaW5mZXJpb3IgKGNyYXNoIGhhbmRsZXJzLCBldGMpLAogcHJjdGwoUFJfU0VUX1BUUkFDRVIsIHBpZCwgLi4uKSBjYW4gYmUgdXNlZC4gQW4gaW5mZXJpb3IgY2FuIGRlY2xhcmUgd2hpY2gKLW90aGVyIHByb2Nlc3MgKGFuZCBpdHMgZGVzY2VuZGVudHMpIGFyZSBhbGxvd2VkIHRvIGNhbGwgUFRSQUNFX0FUVEFDSAorb3RoZXIgcHJvY2VzcyAoYW5kIGl0cyBkZXNjZW5kYW50cykgYXJlIGFsbG93ZWQgdG8gY2FsbCBQVFJBQ0VfQVRUQUNICiBhZ2FpbnN0IGl0LiBPbmx5IG9uZSBzdWNoIGRlY2xhcmVkIGRlYnVnZ2luZyBwcm9jZXNzIGNhbiBleGlzdHMgZm9yCiBlYWNoIGluZmVyaW9yIGF0IGEgdGltZS4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgdXNlZCBieSBLREUsIENocm9taXVtLCBhbmQKIEZpcmVmb3gncyBjcmFzaCBoYW5kbGVycywgYW5kIGJ5IFdpbmUgZm9yIGFsbG93aW5nIG9ubHkgV2luZSBwcm9jZXNzZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlciBiL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgppbmRleCBjM2E3Njg5Li4zYmJhMWFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCkBAIC00MjksMyArNDI5LDI4IEBACiAJCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKIAkJaW50CQkJbXlfc3R1ZmY7CiAJfTsKKworTW9kZW0gY29udHJvbCBsaW5lcyB2aWEgR1BJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIGhlbHBlcnMgYXJlIHByb3ZpZGVkIGluIG9yZGVyIHRvIHNldC9nZXQgbW9kZW0gY29udHJvbCBsaW5lcyB2aWEgR1BJTy4KKworbWN0cmxfZ3Bpb19pbml0KGRldiwgaWR4KToKKwlUaGlzIHdpbGwgZ2V0IHRoZSB7Y3RzLHJ0cywuLi59LWdwaW9zIGZyb20gZGV2aWNlIHRyZWUgaWYgdGhleSBhcmUKKwlwcmVzZW50IGFuZCByZXF1ZXN0IHRoZW0sIHNldCBkaXJlY3Rpb24gZXRjLCBhbmQgcmV0dXJuIGFuCisJYWxsb2NhdGVkIHN0cnVjdHVyZS4gZGV2bV8qIGZ1bmN0aW9ucyBhcmUgdXNlZCwgc28gdGhlcmUncyBubyBuZWVkCisJdG8gY2FsbCBtY3RybF9ncGlvX2ZyZWUoKS4KKworbWN0cmxfZ3Bpb19mcmVlKGRldiwgZ3Bpb3MpOgorCVRoaXMgd2lsbCBmcmVlIHRoZSByZXF1ZXN0ZWQgZ3Bpb3MgaW4gbWN0cmxfZ3Bpb19pbml0KCkuCisJQXMgZGV2bV8qIGZ1bmN0aW9uIGFyZSB1c2VkLCB0aGVyZSdzIGdlbmVyYWxseSBubyBuZWVkIHRvIGNhbGwKKwl0aGlzIGZ1bmN0aW9uLgorCittY3RybF9ncGlvX3RvX2dwaW9kKGdwaW9zLCBnaWR4KQorCVRoaXMgcmV0dXJucyB0aGUgZ3BpbyBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB0byB0aGUgbW9kZW0gbGluZSBpbmRleC4KKworbWN0cmxfZ3Bpb19zZXQoZ3Bpb3MsIG1jdHJsKToKKwlUaGlzIHdpbGwgc2V0cyB0aGUgZ3Bpb3MgYWNjb3JkaW5nIHRvIHRoZSBtY3RybCBzdGF0ZS4KKworbWN0cmxfZ3Bpb19nZXQoZ3Bpb3MsIG1jdHJsKToKKwlUaGlzIHdpbGwgdXBkYXRlIG1jdHJsIHdpdGggdGhlIGdwaW9zIHZhbHVlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggYjhkZDBkZi4uN2NjZjkzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTk0OCw3ICs5NDgsNyBAQAogICAgIGF2b2lkZWQgYXMgbXVjaCBhcyBwb3NzaWJsZS4uLgogICAgIAogICAgIE1PUkUgTk9URVMgT04gImF6eF9nZXRfcmVzcG9uc2UgdGltZW91dCIgUFJPQkxFTVM6Ci0gICAgT24gc29tZSBoYXJkd2FyZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgYSBwcm9wZXIgcHJvYmVfbWFzayBvcHRpb24KKyAgICBPbiBzb21lIGhhcmR3YXJlLCB5b3UgbWF5IG5lZWQgdG8gYWRkIGEgcHJvcGVyIHByb2JlX21hc2sgb3B0aW9uCiAgICAgdG8gYXZvaWQgdGhlICJhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQiIHByb2JsZW0gYWJvdmUsIGluc3RlYWQuCiAgICAgVGhpcyBvY2N1cnMgd2hlbiB0aGUgYWNjZXNzIHRvIG5vbi1leGlzdGluZyBvciBub24td29ya2luZyBjb2RlYyBzbG90CiAgICAgKGxpa2VseSBhIG1vZGVtIG9uZSkgY2F1c2VzIGEgc3RhbGwgb2YgdGhlIGNvbW11bmljYXRpb24gdmlhIEhELWF1ZGlvCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogICAgIGJ1Z2d5X2lycSAgICAgLSBFbmFibGUgd29ya2Fyb3VuZCBmb3IgYnVnZ3kgaW50ZXJydXB0cyBvbiBzb21lCiAgICAgICAgICAgICAgICAgICAgIG1vdGhlcmJvYXJkcyAoZGVmYXVsdCB5ZXMgb24gbkZvcmNlIGNoaXBzLAogCQkgICAgb3RoZXJ3aXNlIG9mZikKLSAgICBidWdneV9zZW1hcGhvcmUgLSBFbmFibGUgd29ya2Fyb3VuZCBmb3IgaGFyZHdhcmVzIHdpdGggYnVnZ3kKKyAgICBidWdneV9zZW1hcGhvcmUgLSBFbmFibGUgd29ya2Fyb3VuZCBmb3IgaGFyZHdhcmUgd2l0aCBidWdneQogCQkgICAgc2VtYXBob3JlcyAoZS5nLiBvbiBzb21lIEFTVVMgbGFwdG9wcykKIAkJICAgIChkZWZhdWx0IG9mZikKICAgICBzcGRpZl9hY2xpbmsgIC0gVXNlIFMvUERJRiBvdmVyIEFDLWxpbmsgaW5zdGVhZCBvZiBkaXJlY3QgY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0CmluZGV4IGM5NDQzNWQuLjc1ZDI1YTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQKQEAgLTQ0Myw3ICs0NDMsNyBAQAogICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgY3JlYXRlcyBhIHNuYXBzaG90IGV2ZXJ5IHRpbWUgYSBibG9jayByZXF1ZXN0CiAgIHF1ZXVlIGlzIHVucGx1Z2dlZCB3aXRoIGEgZGVwdGggPiAxLiAgSWYgeW91IHdlcmUgdHJhY2luZyBhIHNldCBvZgogICBldmVudHMgb3IgZnVuY3Rpb25zIGF0IHRoZSB0aW1lLCB0aGUgc25hcHNob3QgdHJhY2UgYnVmZmVyIHdvdWxkCi0gIGNhcHR1cmUgdGhvc2UgZXZlbnRzIHdoZW4gdGhlIHRyaWdnZXIgZXZlbnQgb2NjdXJlZDoKKyAgY2FwdHVyZSB0aG9zZSBldmVudHMgd2hlbiB0aGUgdHJpZ2dlciBldmVudCBvY2N1cnJlZDoKIAogICAjIGVjaG8gJ3NuYXBzaG90IGlmIG5yX3JxID4gMScgPiBcCiAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2Jsb2NrL2Jsb2NrX3VucGx1Zy90cmlnZ2VyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9jaGlwaWRlYS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9jaGlwaWRlYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1YzhiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2NoaXBpZGVhLnR4dApAQCAtMCwwICsxLDcxIEBACisxLiBIb3cgdG8gdGVzdCBPVEcgRlNNKEhOUCBhbmQgU1JQKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHNob3cgaG93IHRvIGRlbW8gT1RHIEhOUCBhbmQgU1JQIGZ1bmN0aW9ucyB2aWEgc3lzIGlucHV0IGZpbGVzCit3aXRoIDIgRnJlZXNjYWxlIGkuTVg2USBzYWJyZSBTRCBib2FyZHMuCisKKzEuMSBIb3cgdG8gZW5hYmxlIE9URyBGU00gaW4gbWVudWNvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZWxlY3QgQ09ORklHX1VTQl9PVEdfRlNNLCByZWJ1aWxkIGtlcm5lbCBJbWFnZSBhbmQgbW9kdWxlcy4KK0lmIHlvdSB3YW50IHRvIGNoZWNrIHNvbWUgaW50ZXJuYWwgdmFyaWFibGVzIGZvciBvdGcgZnNtLAorc2VsZWN0IENPTkZJR19VU0JfQ0hJUElERUFfREVCVUcsIHRoZXJlIGFyZSAyIGZpbGVzIHdoaWNoCitjYW4gc2hvdyBvdGcgZnNtIHZhcmlhYmxlcyBhbmQgc29tZSBjb250cm9sbGVyIHJlZ2lzdGVycyB2YWx1ZToKK2NhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9jaV9oZHJjLjAvb3RnCitjYXQgL3N5cy9rZXJuZWwvZGVidWcvY2lfaGRyYy4wL3JlZ2lzdGVycworCisxLjIgVGVzdCBvcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tCisxKSBQb3dlciB1cCAyIEZyZWVzY2FsZSBpLk1YNlEgc2FicmUgU0QgYm9hcmRzIHdpdGggZ2FkZ2V0IGNsYXNzIGRyaXZlciBsb2FkZWQKKyAgIChlLmcuIGdfbWFzc19zdG9yYWdlKS4KKworMikgQ29ubmVjdCAyIGJvYXJkcyB3aXRoIHVzYiBjYWJsZSB3aXRoIG9uZSBlbmQgaXMgbWljcm8gQSBwbHVnLCB0aGUgb3RoZXIgZW5kCisgICBpcyBtaWNybyBCIHBsdWcuCisKKyAgIFRoZSBBLWRldmljZSh3aXRoIG1pY3JvIEEgcGx1ZyBpbnNlcnRlZCkgc2hvdWxkIGVudW1yYXRlIEItZGV2aWNlLgorCiszKSBSb2xlIHN3aXRjaAorICAgT24gQi1kZXZpY2U6CisgICBlY2hvIDEgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYl9idXNfcmVxCisKKyAgIGlmIEhOUCBwb2xsaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIGFsc28gbmVlZDoKKyAgIE9uIEEtZGV2aWNlOgorICAgZWNobyAwID4gL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy9jaV9oZHJjLjAvaW5wdXRzL2FfYnVzX3JlcQorCisgICBCLWRldmljZSBzaG91bGQgdGFrZSBob3N0IHJvbGUgYW5kIGVudW1yYXRlIEEtZGV2aWNlLgorCis0KSBBLWRldmljZSBzd2l0Y2ggYmFjayB0byBob3N0LgorICAgT24gQi1kZXZpY2U6CisgICBlY2hvIDAgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYl9idXNfcmVxCisKKyAgIEEtZGV2aWNlIHNob3VsZCBzd2l0Y2ggYmFjayB0byBob3N0IGFuZCBlbnVtcmF0ZSBCLWRldmljZS4KKworNSkgUmVtb3ZlIEItZGV2aWNlKHVucGx1ZyBtaWNybyBCIHBsdWcpIGFuZCBpbnNlcnQgYWdhaW4gaW4gMTAgc2Vjb25kcywKKyAgIEEtZGV2aWNlIHNob3VsZCBlbnVtcmF0ZSBCLWRldmljZSBhZ2Fpbi4KKworNikgUmVtb3ZlIEItZGV2aWNlKHVucGx1ZyBtaWNybyBCIHBsdWcpIGFuZCBpbnNlcnQgYWdhaW4gYWZ0ZXIgMTAgc2Vjb25kcywKKyAgIEEtZGV2aWNlIHNob3VsZCBOT1QgZW51bXJhdGUgQi1kZXZpY2UuCisKKyAgIGlmIEEtZGV2aWNlIHdhbnRzIHRvIHVzZSBidXM6CisgICBPbiBBLWRldmljZToKKyAgIGVjaG8gMCA+IC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXMvY2lfaGRyYy4wL2lucHV0cy9hX2J1c19kcm9wCisgICBlY2hvIDEgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYV9idXNfcmVxCisKKyAgIGlmIEItZGV2aWNlIHdhbnRzIHRvIHVzZSBidXM6CisgICBPbiBCLWRldmljZToKKyAgIGVjaG8gMSA+IC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXMvY2lfaGRyYy4wL2lucHV0cy9iX2J1c19yZXEKKworNykgQS1kZXZpY2UgcG93ZXIgZG93biB0aGUgYnVzLgorICAgT24gQS1kZXZpY2U6CisgICBlY2hvIDEgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYV9idXNfZHJvcAorCisgICBBLWRldmljZSBzaG91bGQgZGlzY29ubmVjdCB3aXRoIEItZGV2aWNlIGFuZCBwb3dlciBkb3duIHRoZSBidXMuCisKKzgpIEItZGV2aWNlIGRvZXMgZGF0YSBwdWxzZSBmb3IgU1JQLgorICAgT24gQi1kZXZpY2U6CisgICBlY2hvIDEgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL2NpX2hkcmMuMC9pbnB1dHMvYl9idXNfcmVxCisKKyAgIEEtZGV2aWNlIHNob3VsZCByZXN1bWUgdXNiIGJ1cyBhbmQgZW51bXJhdGUgQi1kZXZpY2UuCisKKzEuMyBSZWZlcmVuY2UgZG9jdW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyJPbi1UaGUtR28gYW5kIEVtYmVkZGVkIEhvc3QgU3VwcGxlbWVudCB0byB0aGUgVVNCIFJldmlzaW9uIDIuMCBTcGVjaWZpY2F0aW9uCitKdWx5IDI3LCAyMDEyIFJldmlzaW9uIDIuMCB2ZXJzaW9uIDEuMWEiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9tYXNzLXN0b3JhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvbWFzcy1zdG9yYWdlLnR4dAppbmRleCA1OTA2M2FkLi5lODk4MDNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9tYXNzLXN0b3JhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL21hc3Mtc3RvcmFnZS50eHQKQEAgLTEzLDcgKzEzLDcgQEAKICAgb3BlcmF0aW9uLgogCiAgIE5vdGUgdGhhdCB0aGUgZHJpdmVyIGlzIHNsaWdodGx5IG5vbi1wb3J0YWJsZSBpbiB0aGF0IGl0IGFzc3VtZXMKLSAgYSBzaW5nbGUgbWVtb3J5L0RNQSBidWZmZXIgd2lsbCBiZSB1c2VhYmxlIGZvciBidWxrLWluIGFuZCBidWxrLW91dAorICBhIHNpbmdsZSBtZW1vcnkvRE1BIGJ1ZmZlciB3aWxsIGJlIHVzYWJsZSBmb3IgYnVsay1pbiBhbmQgYnVsay1vdXQKICAgZW5kcG9pbnRzLiAgV2l0aCBtb3N0IGRldmljZSBjb250cm9sbGVycyB0aGlzIGlzIG5vdCBhbiBpc3N1ZSwgYnV0CiAgIHRoZXJlIG1heSBiZSBzb21lIHdpdGggaGFyZHdhcmUgcmVzdHJpY3Rpb25zIHRoYXQgcHJldmVudCBhIGJ1ZmZlcgogICBmcm9tIGJlaW5nIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBlbmRwb2ludC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dAppbmRleCBiNGY1MzY1Li4wZmUzNjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9hcGkudHh0CkBAIC0xNzk0LDYgKzE3OTQsMTEgQEAKICAgUFBDICAgfCBLVk1fUkVHX1BQQ19NTUNSMCAgICAgfCA2NAogICBQUEMgICB8IEtWTV9SRUdfUFBDX01NQ1IxICAgICB8IDY0CiAgIFBQQyAgIHwgS1ZNX1JFR19QUENfTU1DUkEgICAgIHwgNjQKKyAgUFBDICAgfCBLVk1fUkVHX1BQQ19NTUNSMiAgICAgfCA2NAorICBQUEMgICB8IEtWTV9SRUdfUFBDX01NQ1JTICAgICB8IDY0CisgIFBQQyAgIHwgS1ZNX1JFR19QUENfU0lBUiAgICAgIHwgNjQKKyAgUFBDICAgfCBLVk1fUkVHX1BQQ19TREFSICAgICAgfCA2NAorICBQUEMgICB8IEtWTV9SRUdfUFBDX1NJRVIgICAgICB8IDY0CiAgIFBQQyAgIHwgS1ZNX1JFR19QUENfUE1DMSAgICAgIHwgMzIKICAgUFBDICAgfCBLVk1fUkVHX1BQQ19QTUMyICAgICAgfCAzMgogICBQUEMgICB8IEtWTV9SRUdfUFBDX1BNQzMgICAgICB8IDMyCkBAIC0xODY4LDYgKzE4NzMsNyBAQAogICBQUEMgICB8IEtWTV9SRUdfUFBDX1BQUgl8IDY0CiAgIFBQQyAgIHwgS1ZNX1JFR19QUENfQVJDSF9DT01QQVQgMzIKICAgUFBDICAgfCBLVk1fUkVHX1BQQ19EQUJSWCAgICAgfCAzMgorICBQUEMgICB8IEtWTV9SRUdfUFBDX1dPUlQgICAgICB8IDY0CiAgIFBQQyAgIHwgS1ZNX1JFR19QUENfVE1fR1BSMAl8IDY0CiAgICAgICAgICAgLi4uCiAgIFBQQyAgIHwgS1ZNX1JFR19QUENfVE1fR1BSMzEJfCA2NApAQCAtMjA2Niw3ICsyMDcyLDcgQEAKIFRoaXMgY2FuIGluIHR1cm4gYmUgdXNlZCBieSB1c2Vyc3BhY2UgdG8gZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlCiBkZXZpY2UtdHJlZSBwcm9wZXJ0aWVzIGZvciB0aGUgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbS4KIAotVGhlIHN0cnVjdHVyZSBjb250YWlucyBzb21lIGdsb2JhbCBpbmZvcm1hdGlvbnMsIGZvbGxvd2VkIGJ5IGFuCitUaGUgc3RydWN0dXJlIGNvbnRhaW5zIHNvbWUgZ2xvYmFsIGluZm9ybWF0aW9uLCBmb2xsb3dlZCBieSBhbgogYXJyYXkgb2Ygc3VwcG9ydGVkIHNlZ21lbnQgcGFnZSBzaXplczoKIAogICAgICAgc3RydWN0IGt2bV9wcGNfc21tdV9pbmZvIHsKQEAgLTIyMTEsNiArMjIxNyw4IEBACiBLVk1fUzM5MF9QUk9HUkFNX0lOVCAodmNwdSkgLSBwcm9ncmFtIGNoZWNrOyBjb2RlIGluIHBhcm0KIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWCAodmNwdSkgLSBzaWdwIHNldCBwcmVmaXg7IHByZWZpeCBhZGRyZXNzIGluIHBhcm0KIEtWTV9TMzkwX1JFU1RBUlQgKHZjcHUpIC0gcmVzdGFydAorS1ZNX1MzOTBfSU5UX0NMT0NLX0NPTVAgKHZjcHUpIC0gY2xvY2sgY29tcGFyYXRvciBpbnRlcnJ1cHQKK0tWTV9TMzkwX0lOVF9DUFVfVElNRVIgKHZjcHUpIC0gQ1BVIHRpbWVyIGludGVycnVwdAogS1ZNX1MzOTBfSU5UX1ZJUlRJTyAodm0pIC0gdmlydGlvIGV4dGVybmFsIGludGVycnVwdDsgZXh0ZXJuYWwgaW50ZXJydXB0CiAJCQkgICBwYXJhbWV0ZXJzIGluIHBhcm0gYW5kIHBhcm02NAogS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgKHZtKSAtIHNjbHAgZXh0ZXJuYWwgaW50ZXJydXB0OyBzY2xwIHBhcmFtZXRlciBpbiBwYXJtCkBAIC0yMzE0LDggKzIzMjIsOCBAQAogCiA0LjgwIEtWTV9TRVRfREVWSUNFX0FUVFIvS1ZNX0dFVF9ERVZJQ0VfQVRUUgogCi1DYXBhYmlsaXR5OiBLVk1fQ0FQX0RFVklDRV9DVFJMCi1UeXBlOiBkZXZpY2UgaW9jdGwKK0NhcGFiaWxpdHk6IEtWTV9DQVBfREVWSUNFX0NUUkwsIEtWTV9DQVBfVk1fQVRUUklCVVRFUyBmb3Igdm0gZGV2aWNlCitUeXBlOiBkZXZpY2UgaW9jdGwsIHZtIGlvY3RsCiBQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyCiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCiBFcnJvcnM6CkBAIC0yMzQwLDggKzIzNDgsOCBAQAogCiA0LjgxIEtWTV9IQVNfREVWSUNFX0FUVFIKIAotQ2FwYWJpbGl0eTogS1ZNX0NBUF9ERVZJQ0VfQ1RSTAotVHlwZTogZGV2aWNlIGlvY3RsCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0RFVklDRV9DVFJMLCBLVk1fQ0FQX1ZNX0FUVFJJQlVURVMgZm9yIHZtIGRldmljZQorVHlwZTogZGV2aWNlIGlvY3RsLCB2bSBpb2N0bAogUGFyYW1ldGVyczogc3RydWN0IGt2bV9kZXZpY2VfYXR0cgogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgogRXJyb3JzOgpAQCAtMjM3Niw2ICsyMzg0LDggQEAKIAkgIERlcGVuZHMgb24gS1ZNX0NBUF9BUk1fUFNDSS4KIAktIEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQ6IFN0YXJ0cyB0aGUgQ1BVIGluIGEgMzJiaXQgbW9kZS4KIAkgIERlcGVuZHMgb24gS1ZNX0NBUF9BUk1fRUwxXzMyQklUIChhcm02NCBvbmx5KS4KKwktIEtWTV9BUk1fVkNQVV9QU0NJXzBfMjogRW11bGF0ZSBQU0NJIHYwLjIgZm9yIHRoZSBDUFUuCisJICBEZXBlbmRzIG9uIEtWTV9DQVBfQVJNX1BTQ0lfMF8yLgogCiAKIDQuODMgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VUCkBAIC0yNzM4LDYgKzI3NDgsMjEgQEAKIGV4dGVybmFsIGludGVycnVwdCBoYXMganVzdCBiZWVuIGRlbGl2ZXJlZCBpbnRvIHRoZSBndWVzdC4gVXNlciBzcGFjZQogc2hvdWxkIHB1dCB0aGUgYWNrbm93bGVkZ2VkIGludGVycnVwdCB2ZWN0b3IgaW50byB0aGUgJ2VwcicgZmllbGQuCiAKKwkJLyogS1ZNX0VYSVRfU1lTVEVNX0VWRU5UICovCisJCXN0cnVjdCB7CisjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04gICAgICAgMQorI2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1JFU0VUICAgICAgICAgIDIKKwkJCV9fdTMyIHR5cGU7CisJCQlfX3U2NCBmbGFnczsKKwkJfSBzeXN0ZW1fZXZlbnQ7CisKK0lmIGV4aXRfcmVhc29uIGlzIEtWTV9FWElUX1NZU1RFTV9FVkVOVCB0aGVuIHRoZSB2Y3B1IGhhcyB0cmlnZ2VyZWQKK2Egc3lzdGVtLWxldmVsIGV2ZW50IHVzaW5nIHNvbWUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG1lY2hhbmlzbSAoaHlwZXJjYWxsCitvciBzb21lIHNwZWNpYWwgaW5zdHJ1Y3Rpb24pLiBJbiBjYXNlIG9mIEFSTS9BUk02NCwgdGhpcyBpcyB0cmlnZ2VyZWQgdXNpbmcKK0hWQyBpbnN0cnVjdGlvbiBiYXNlZCBQU0NJIGNhbGwgZnJvbSB0aGUgdmNwdS4gVGhlICd0eXBlJyBmaWVsZCBkZXNjcmliZXMKK3RoZSBzeXN0ZW0tbGV2ZWwgZXZlbnQgdHlwZS4gVGhlICdmbGFncycgZmllbGQgZGVzY3JpYmVzIGFyY2hpdGVjdHVyZQorc3BlY2lmaWMgZmxhZ3MgZm9yIHRoZSBzeXN0ZW0tbGV2ZWwgZXZlbnQuCisKIAkJLyogRml4IHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gKi8KIAkJY2hhciBwYWRkaW5nWzI1Nl07CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vZGV2aWNlcy92bS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2RldmljZXMvdm0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTZmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2RldmljZXMvdm0udHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dlbmVyaWMgdm0gaW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHZpcnR1YWwgbWFjaGluZSAiZGV2aWNlIiBhbHNvIGFjY2VwdHMgdGhlIGlvY3RscyBLVk1fU0VUX0RFVklDRV9BVFRSLAorS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgYW5kIEtWTV9IQVNfREVWSUNFX0FUVFIuIFRoZSBpbnRlcmZhY2UgdXNlcyB0aGUgc2FtZQorc3RydWN0IGt2bV9kZXZpY2VfYXR0ciBhcyBvdGhlciBkZXZpY2VzLCBidXQgdGFyZ2V0cyBWTS13aWRlIHNldHRpbmdzCithbmQgY29udHJvbHMuCisKK1RoZSBncm91cHMgYW5kIGF0dHJpYnV0ZXMgcGVyIHZpcnR1YWwgbWFjaGluZSwgaWYgYW55LCBhcmUgYXJjaGl0ZWN0dXJlCitzcGVjaWZpYy4KKworMS4gR1JPVVA6IEtWTV9TMzkwX1ZNX01FTV9DVFJMCitBcmNoaXRlY3R1cmVzOiBzMzkwCisKKzEuMS4gQVRUUklCVVRFOiBLVk1fUzM5MF9WTV9NRU1fQ1RSTAorUGFyYW1ldGVyczogbm9uZQorUmV0dXJuczogLUVCVVNZIGlmIGFscmVhZHkgYSB2Y3B1cyBpcyBkZWZpbmVkLCBvdGhlcndpc2UgMAorCitFbmFibGVzIENNTUEgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUKKworMS4yLiBBVFRSSUJVVEU6IEtWTV9TMzkwX1ZNX0NMUl9DTU1BCitQYXJhbWV0ZXJlczogbm9uZQorUmV0dXJuczogMAorCitDbGVhciB0aGUgQ01NQSBzdGF0dXMgZm9yIGFsbCBndWVzdCBwYWdlcywgc28gYW55IHBhZ2VzIHRoZSBndWVzdCBtYXJrZWQKK2FzIHVudXNlZCBhcmUgYWdhaW4gdXNlZCBhbnkgbWF5IG5vdCBiZSByZWNsYWltZWQgYnkgdGhlIGhvc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3BwYy1wdi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3BwYy1wdi50eHQKaW5kZXggNDY0M2NkZS4uMzE5NTYwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9wcGMtcHYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vcHBjLXB2LnR4dApAQCAtOTQsMTAgKzk0LDI0IEBACiBUaGUgZm9sbG93aW5nIGVuaGFuY2VtZW50cyB0byB0aGUgbWFnaWMgcGFnZSBhcmUgY3VycmVudGx5IGF2YWlsYWJsZToKIAogICBLVk1fTUFHSUNfRkVBVF9TUgkJTWFwcyBTUiByZWdpc3RlcnMgci93IGluIHRoZSBtYWdpYyBwYWdlCisgIEtWTV9NQUdJQ19GRUFUX01BUzBfVE9fU1BSRzcJTWFwcyBNQVNuLCBFU1IsIFBJUiBhbmQgaGlnaCBTUFJHcwogCiBGb3IgZW5oYW5jZWQgZmVhdHVyZXMgaW4gdGhlIG1hZ2ljIHBhZ2UsIHBsZWFzZSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUKIGZlYXR1cmUgYmVmb3JlIHVzaW5nIHRoZW0hCiAKK01hZ2ljIHBhZ2UgZmxhZ3MKKz09PT09PT09PT09PT09PT0KKworSW4gYWRkaXRpb24gdG8gZmVhdHVyZXMgdGhhdCBpbmRpY2F0ZSB3aGV0aGVyIGEgaG9zdCBpcyBjYXBhYmxlIG9mIGEgcGFydGljdWxhcgorZmVhdHVyZSB3ZSBhbHNvIGhhdmUgYSBjaGFubmVsIGZvciBhIGd1ZXN0IHRvIHRlbGwgdGhlIGd1ZXN0IHdoZXRoZXIgaXQncyBjYXBhYmxlCitvZiBzb21ldGhpbmcuIFRoaXMgaXMgd2hhdCB3ZSBjYWxsICJmbGFncyIuCisKK0ZsYWdzIGFyZSBwYXNzZWQgdG8gdGhlIGhvc3QgaW4gdGhlIGxvdyAxMiBiaXRzIG9mIHRoZSBFZmZlY3RpdmUgQWRkcmVzcy4KKworVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgYSBndWVzdCB0byBleHBvc2U6CisKKyAgTUFHSUNfUEFHRV9GTEFHX05PVF9NQVBQRURfTlggR3Vlc3QgaGFuZGxlcyBOWCBiaXRzIGNvcnJlY2x0eSB3cnQgbWFnaWMgcGFnZQorCiBNU1IgYml0cwogPT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9zMzkwLWRpYWcudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9zMzkwLWRpYWcudHh0CmluZGV4IGYxZGU0ZmIuLjQ4YzQ5MjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vczM5MC1kaWFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3MzOTAtZGlhZy50eHQKQEAgLTc4LDMgKzc4LDUgQEAKIAogSWYgdGhlIGZ1bmN0aW9uIGNvZGUgc3BlY2lmaWVzIDB4NTAxLCBicmVha3BvaW50IGZ1bmN0aW9ucyBtYXkgYmUgcGVyZm9ybWVkLgogVGhpcyBmdW5jdGlvbiBjb2RlIGlzIGhhbmRsZWQgYnkgdXNlcnNwYWNlLgorCitUaGlzIGRpYWdub3NlIGZ1bmN0aW9uIGNvZGUgaGFzIG5vIHN1YmZ1bmN0aW9ucyBhbmQgdXNlcyBubyBwYXJhbWV0ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS90cmFuc2h1Z2UudHh0IGIvRG9jdW1lbnRhdGlvbi92bS90cmFuc2h1Z2UudHh0CmluZGV4IDRhNjM5NTMuLjZiMzFjZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vdHJhbnNodWdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3RyYW5zaHVnZS50eHQKQEAgLTM2MCwxMyArMzYwLDEzIEBACiBnZXRfdXNlcl9wYWdlcyB3aGljaCBpcyB1bmFjY2VwdGFibGUgYXMgdG9vIG1hbnkgZ3VwIHVzZXJzIGFyZQogcGVyZm9ybWFuY2UgY3JpdGljYWwgYW5kIHRoZXkgbXVzdCB3b3JrIG5hdGl2ZWx5IG9uIGh1Z2VwYWdlcyBsaWtlCiB0aGV5IHdvcmsgbmF0aXZlbHkgb24gaHVnZXRsYmZzIGFscmVhZHkgKGh1Z2V0bGJmcyBpcyBzaW1wbGVyIGJlY2F1c2UKLWh1Z2V0bGJmcyBwYWdlcyBjYW5ub3QgYmUgc3BsaXR0ZWQgc28gdGhlcmUgd291bGRuJ3QgYmUgcmVxdWlyZW1lbnQgb2YKK2h1Z2V0bGJmcyBwYWdlcyBjYW5ub3QgYmUgc3BsaXQgc28gdGhlcmUgd291bGRuJ3QgYmUgcmVxdWlyZW1lbnQgb2YKIGFjY291bnRpbmcgdGhlIHBpbnMgb24gdGhlIHRhaWwgcGFnZXMgZm9yIGh1Z2V0bGJmcykuIElmIHdlIHdvdWxkbid0CiBhY2NvdW50IHRoZSBndXAgcmVmY291bnRzIG9uIHRoZSB0YWlsIHBhZ2VzIGR1cmluZyBndXAsIHdlIHdvbid0IGtub3cKIGFueW1vcmUgd2hpY2ggdGFpbCBwYWdlIGlzIHBpbm5lZCBieSBndXAgYW5kIHdoaWNoIGlzIG5vdCB3aGlsZSB3ZSBydW4KIHNwbGl0X2h1Z2VfcGFnZS4gQnV0IHdlIHN0aWxsIGhhdmUgdG8gYWRkIHRoZSBndXAgcGluIHRvIHRoZSBoZWFkIHBhZ2UKIHRvbywgdG8ga25vdyB3aGVuIHdlIGNhbiBmcmVlIHRoZSBjb21wb3VuZCBwYWdlIGluIGNhc2UgaXQncyBuZXZlcgotc3BsaXR0ZWQgZHVyaW5nIGl0cyBsaWZldGltZS4gVGhhdCByZXF1aXJlcyBjaGFuZ2luZyBub3QganVzdAorc3BsaXQgZHVyaW5nIGl0cyBsaWZldGltZS4gVGhhdCByZXF1aXJlcyBjaGFuZ2luZyBub3QganVzdAogZ2V0X3BhZ2UsIGJ1dCBwdXRfcGFnZSBhcyB3ZWxsIHNvIHRoYXQgd2hlbiBwdXRfcGFnZSBydW5zIG9uIGEgdGFpbAogcGFnZSAoYW5kIG9ubHkgb24gYSB0YWlsIHBhZ2UpIGl0IHdpbGwgZmluZCBpdHMgcmVzcGVjdGl2ZSBoZWFkIHBhZ2UsCiBhbmQgdGhlbiBpdCB3aWxsIGRlY3JlYXNlIHRoZSBoZWFkIHBhZ2UgcmVmY291bnQgaW4gYWRkaXRpb24gdG8gdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMKaW5kZXggYTMxYzVhMi4uYjIwMzNjNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljCisrKyBiL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYwpAQCAtODIsNyArODIsNyBAQAogdzFfbWFzdGVyX2FkZCAgICAgIC0gTWFudWFsbHkgcmVnaXN0ZXIgYSBzbGF2ZSBkZXZpY2UKIHcxX21hc3Rlcl9hdHRlbXB0cyAtIHRoZSBudW1iZXIgb2YgdGltZXMgYSBzZWFyY2ggd2FzIGF0dGVtcHRlZAogdzFfbWFzdGVyX21heF9zbGF2ZV9jb3VudAotICAgICAgICAgICAgICAgICAgIC0gdGhlIG1heGltdW0gc2xhdmVzIHRoYXQgbWF5IGJlIGF0dGFjaGVkIHRvIGEgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgLSBtYXhpbXVtIG51bWJlciBvZiBzbGF2ZXMgdG8gc2VhcmNoIGZvciBhdCBhIHRpbWUKIHcxX21hc3Rlcl9uYW1lICAgICAtIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UgKHcxX2J1c19tYXN0ZXJYKQogdzFfbWFzdGVyX3B1bGx1cCAgIC0gNVYgc3Ryb25nIHB1bGx1cCAwIGVuYWJsZWQsIDEgZGlzYWJsZWQKIHcxX21hc3Rlcl9yZW1vdmUgICAtIE1hbnVhbGx5IHJlbW92ZSBhIHNsYXZlIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS93MS5uZXRsaW5rIGIvRG9jdW1lbnRhdGlvbi93MS93MS5uZXRsaW5rCmluZGV4IDkyN2E1MmMuLmVmMjcyNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvdzEubmV0bGluaworKysgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLm5ldGxpbmsKQEAgLTMwLDcgKzMwLDcgQEAKIAkJCVcxX1NMQVZFX0NNRAogCQkJCXVzZXJzcGFjZSBjb21tYW5kIGZvciBzbGF2ZSBkZXZpY2UKIAkJCQkocmVhZC93cml0ZS90b3VjaCkKLQlfX3U4IHJlcwktIHJlc2VydmVkCisJX191OCBzdGF0dXMJLSBlcnJvciBpbmRpY2F0aW9uIGZyb20ga2VybmVsCiAJX191MTYgbGVuCS0gc2l6ZSBvZiBkYXRhIGF0dGFjaGVkIHRvIHRoaXMgaGVhZGVyIGRhdGEKIAl1bmlvbiB7CiAJCV9fdTggaWRbOF07CQkJIC0gc2xhdmUgdW5pcXVlIGRldmljZSBpZApAQCAtNDQsMTAgKzQ0LDE0IEBACiAJX191OCBjbWQJLSBjb21tYW5kIG9wY29kZS4KIAkJCVcxX0NNRF9SRUFEIAktIHJlYWQgY29tbWFuZAogCQkJVzFfQ01EX1dSSVRFCS0gd3JpdGUgY29tbWFuZAotCQkJVzFfQ01EX1RPVUNICS0gdG91Y2ggY29tbWFuZAotCQkJCSh3cml0ZSBhbmQgc2FtcGxlIGRhdGEgYmFjayB0byB1c2Vyc3BhY2UpCiAJCQlXMV9DTURfU0VBUkNICS0gc2VhcmNoIGNvbW1hbmQKIAkJCVcxX0NNRF9BTEFSTV9TRUFSQ0ggLSBhbGFybSBzZWFyY2ggY29tbWFuZAorCQkJVzFfQ01EX1RPVUNICS0gdG91Y2ggY29tbWFuZAorCQkJCSh3cml0ZSBhbmQgc2FtcGxlIGRhdGEgYmFjayB0byB1c2Vyc3BhY2UpCisJCQlXMV9DTURfUkVTRVQJLSBzZW5kIGJ1cyByZXNldAorCQkJVzFfQ01EX1NMQVZFX0FERAktIGFkZCBzbGF2ZSB0byBrZXJuZWwgbGlzdAorCQkJVzFfQ01EX1NMQVZFX1JFTU9WRQktIHJlbW92ZSBzbGF2ZSBmcm9tIGtlcm5lbCBsaXN0CisJCQlXMV9DTURfTElTVF9TTEFWRVMJLSBnZXQgc2xhdmVzIGxpc3QgZnJvbSBrZXJuZWwKIAlfX3U4IHJlcwktIHJlc2VydmVkCiAJX191MTYgbGVuCS0gbGVuZ3RoIG9mIGRhdGEgZm9yIHRoaXMgY29tbWFuZAogCQlGb3IgcmVhZCBjb21tYW5kIGRhdGEgbXVzdCBiZSBhbGxvY2F0ZWQgbGlrZSBmb3Igd3JpdGUgY29tbWFuZApAQCAtODcsOCArOTEsNyBAQAogCWlkMCAuLi4gaWROCiAKIAlFYWNoIG1lc3NhZ2UgaXMgYXQgbW9zdCA0ayBpbiBzaXplLCBzbyBpZiBudW1iZXIgb2YgbWFzdGVyIGRldmljZXMKLQlleGNlZWRzIHRoaXMsIGl0IHdpbGwgYmUgc3BsaXQgaW50byBzZXZlcmFsIG1lc3NhZ2VzLAotCWNuLnNlcSB3aWxsIGJlIGluY3JlYXNlZCBmb3IgZWFjaCBvbmUuCisJZXhjZWVkcyB0aGlzLCBpdCB3aWxsIGJlIHNwbGl0IGludG8gc2V2ZXJhbCBtZXNzYWdlcy4KIAogVzEgc2VhcmNoIGFuZCBhbGFybSBzZWFyY2ggY29tbWFuZHMuCiByZXF1ZXN0OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0CmluZGV4IGYxOTgwMmMuLjY4OGUzZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni9lYXJseXByaW50ay50eHQKQEAgLTMzLDcgKzMzLDcgQEAKICAuLi4KIAogKCBJZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBsaXN0IGEgZGVidWcgcG9ydCBjYXBhYmlsaXR5IHRoZW4geW91IHByb2JhYmx5Ci0gIHdvbnQgYmUgYWJsZSB0byB1c2UgdGhlIFVTQiBkZWJ1ZyBrZXkuICkKKyAgd29uJ3QgYmUgYWJsZSB0byB1c2UgdGhlIFVTQiBkZWJ1ZyBrZXkuICkKIAogIGIuKSBZb3UgYWxzbyBuZWVkIGEgTmV0Y2hpcCBVU0IgZGVidWcgY2FibGUva2V5OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni9pMzg2L0lPLUFQSUMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvaTM4Ni9JTy1BUElDLnR4dAppbmRleCAzMGI0YzcxLi4xNWY1YmFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni9pMzg2L0lPLUFQSUMudHh0CisrKyBiL0RvY3VtZW50YXRpb24veDg2L2kzODYvSU8tQVBJQy50eHQKQEAgLTg3LDcgKzg3LDcgQEAKIAogCWVjaG8gLW4gcGlycT07IGVjaG8gYHNjYW5wY2kgfCBncmVwIFRfTCB8IGN1dCAtYzU2LWAgfCBzZWQgJ3MvIC8sL2cnCiAKLW5vdGUgdGhhdCB0aGlzIHNjcmlwdCB3b250IHdvcmsgaWYgeW91IGhhdmUgc2tpcHBlZCBhIGZldyBzbG90cyBvciBpZiB5b3VyCitub3RlIHRoYXQgdGhpcyBzY3JpcHQgd29uJ3Qgd29yayBpZiB5b3UgaGF2ZSBza2lwcGVkIGEgZmV3IHNsb3RzIG9yIGlmIHlvdXIKIGJvYXJkIGRvZXMgbm90IGRvIGRlZmF1bHQgZGFpc3ktY2hhaW5pbmcuIChvciB0aGUgSU8tQVBJQyBoYXMgdGhlIFBJUlEgcGlucwogY29ubmVjdGVkIGluIHNvbWUgc3RyYW5nZSB3YXkpLiBFLmcuIGlmIGluIHRoZSBhYm92ZSBjYXNlIHlvdSBoYXZlIHlvdXIgU0NTSQogY2FyZCAoSVJRMTEpIGluIFNsb3QzLCBhbmQgaGF2ZSBTbG90MSBlbXB0eToKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMTZjMTIxMC4uYjFiZjkyZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTM1NSw3ICszNTUsNyBAQAogRjoJZHJpdmVycy9od21vbi9hZG0xMDI1LmMKIAogQURNMTAyOSBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgotTToJQ29yZW50aW4gTGFiYmUgPGNvcmVudGluLmxhYmJlQGdlb21hdHlzLmZyPgorTToJQ29yZW50aW4gTGFiYmUgPGNsYWJiZS5tb250am9pZUBnbWFpbC5jb20+CiBMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpAQCAtMTYxNywxMiArMTYxNyw2IEBACiBGOglkcml2ZXJzL21pc2MvYXRtZWxfdGNsaWIuYwogRjoJZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKIAotQVRNRUwgVFNBRENDIERSSVZFUgotTToJSm9zaCBXdSA8am9zaC53dUBhdG1lbC5jb20+Ci1MOglsaW51eC1pbnB1dEB2Z2VyLmtlcm5lbC5vcmcKLVM6CVN1cHBvcnRlZAotRjoJZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYwotCiBBVE1FTCBVU0JBIFVEQyBEUklWRVIKIE06CU5pY29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAYXRtZWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKQEAgLTIxOTQsNiArMjE4OCw3IEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvY2hhci8qCiBGOglkcml2ZXJzL21pc2MvKgorRjoJaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKIAogQ0hFQ0tQQVRDSAogTToJQW5keSBXaGl0Y3JvZnQgPGFwd0BjYW5vbmljYWwuY29tPgpAQCAtMjc4MiwxMiArMjc3NywxNCBAQAogCiBESUdJIE5FTyBBTkQgQ0xBU1NJQyBQQ0kgUFJPRFVDVFMKIE06CUxpZHphIExvdWluYSA8bGlkemEubG91aW5hQGdtYWlsLmNvbT4KK006CU1hcmsgSG91bnNjaGVsbCA8bWFya2hAY29tcHJvLm5ldD4KIEw6CWRyaXZlcmRldi1kZXZlbEBsaW51eGRyaXZlcnByb2plY3Qub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3N0YWdpbmcvZGduYy8KIAogRElHSSBFUENBIFBDSSBQUk9EVUNUUwogTToJTGlkemEgTG91aW5hIDxsaWR6YS5sb3VpbmFAZ21haWwuY29tPgorTToJTWFyayBIb3Vuc2NoZWxsIDxtYXJraEBjb21wcm8ubmV0PgogTDoJZHJpdmVyZGV2LWRldmVsQGxpbnV4ZHJpdmVycHJvamVjdC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvc3RhZ2luZy9kZ2FwLwpAQCAtNDIwMiw5ICs0MTk5LDExIEBACiBGOglmcy9ocGZzLwogCiBIU0kgU1VCU1lTVEVNCi1NOglTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGRlYmlhbi5vcmc+CitNOglTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGtlcm5lbC5vcmc+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NyZS9saW51eC1oc2kuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1oc2kKK0Y6CURvY3VtZW50YXRpb24vaHNpLnR4dAogRjoJZHJpdmVycy9oc2kvCiBGOglpbmNsdWRlL2xpbnV4L2hzaS8KIEY6CWluY2x1ZGUvdWFwaS9saW51eC9oc2kvCkBAIC02NDE2LDYgKzY0MTUsNyBAQAogRjoJYXJjaC9hcm0vKm9tYXAqL3VzYioKIAogT01BUCBHUElPIERSSVZFUgorTToJSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAZG93aGlsZTAub3JnPgogTToJU2FudG9zaCBTaGlsaW1rYXIgPHNhbnRvc2guc2hpbGlta2FyQHRpLmNvbT4KIE06CUtldmluIEhpbG1hbiA8a2hpbG1hbkBkZWVwcm9vdHN5c3RlbXMuY29tPgogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKQEAgLTY3MDUsNiArNjcwNSw3IEBACiBGOglkcml2ZXJzL3BjaS8KIEY6CWluY2x1ZGUvbGludXgvcGNpKgogRjoJYXJjaC94ODYvcGNpLworRjoJYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCiAKIFBDSSBEUklWRVIgRk9SIElNWDYKIE06CVJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4KQEAgLTY3NTIsNiArNjc1MywxNCBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wY2kvaG9zdC8qZGVzaWdud2FyZSoKIAorUENJIERSSVZFUiBGT1IgR0VORVJJQyBPRiBIT1NUUworTToJV2lsbCBEZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+CitMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9ob3N0LWdlbmVyaWMtcGNpLnR4dAorRjoJZHJpdmVycy9wY2kvaG9zdC9wY2ktaG9zdC1nZW5lcmljLmMKKwogUENNQ0lBIFNVQlNZU1RFTQogUDoJTGludXggUENNQ0lBIFRlYW0KIEw6CWxpbnV4LXBjbWNpYUBsaXN0cy5pbmZyYWRlYWQub3JnCkBAIC04NDgxLDcgKzg0OTAsNyBAQAogRjoJZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi8KIAogU1RBR0lORyAtIE9aTU8gREVWSUNFUyBVU0IgT1ZFUiBXSUZJIERSSVZFUgotTToJUnVwZXNoIEd1amFyZSA8cnVwZXNoLmd1amFyZUBhdG1lbC5jb20+CitNOglTaGlnZWthdHN1IFRhdGVubyA8c2hpZ2VrYXRzdS50YXRlbm9AYXRtZWwuY29tPgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9zdGFnaW5nL296d3Bhbi8KIApAQCAtODQ5Niw2ICs4NTA1LDEzIEBACiBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvc3RhZ2luZy9ydGw4NzEyLwogCitTVEFHSU5HIC0gUkVBTFRFSyBSVEw4NzIzVSBXSVJFTEVTUyBEUklWRVIKK006CUxhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KK006CUplcyBTb3JlbnNlbiA8SmVzLlNvcmVuc2VuQHJlZGhhdC5jb20+CitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvCisKIFNUQUdJTkcgLSBTSUxJQ09OIE1PVElPTiBTTTdYWCBGUkFNRSBCVUZGRVIgRFJJVkVSCiBNOglUZWRkeSBXYW5nIDx0ZWRkeS53YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgogUzoJT2RkIEZpeGVzCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA3OGIwM2VmLi5lZDYwYTFlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTI5Miw5ICsyOTIsNCBAQAogI2RlZmluZSBhdG9taWNfZGVjKHYpIGF0b21pY19zdWIoMSwodikpCiAjZGVmaW5lIGF0b21pYzY0X2RlYyh2KSBhdG9taWM2NF9zdWIoMSwodikpCiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQotCiAjZW5kaWYgLyogX0FMUEhBX0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBhMTliYTVlLi40YmRmYmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTUzLDkgKzUzLDYgQEAKIAkqbSB8PSAxIDw8IChuciAmIDMxKTsKIH0KIAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9tYigpCi0KIHN0YXRpYyBpbmxpbmUgdm9pZAogY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggZDAxYWZiNy4uZjdmNjgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC01OSwxMSArNTksNiBAQAogCiBleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAvKiBJT01NVSBjb250cm9scy4gICovCiAKIC8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIG5vdCBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UuCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggM2Q2Y2U2ZC4uNDhiYmVhNiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNzMsMTIgKzczLDE0IEBACiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTQJLyogc3lzY2FsbCBhdWRpdCBhY3RpdmUgKi8KICNkZWZpbmUgVElGX0RJRV9JRl9LRVJORUwJOQkvKiBkaWsgcmVjdXJzaW9uIGxvY2sgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTMJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE0CS8qIGlkbGUgaXMgcG9sbGluZyBmb3IgVElGX05FRURfUkVTQ0hFRCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogCiAvKiBXb3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuLiAgKi8KICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCShfVElGX1NJR1BFTkRJTkcgfCBfVElGX05FRURfUkVTQ0hFRCB8IFwKQEAgLTkyLDggKzk0LDYgQEAKICNkZWZpbmUgVFNfVUFDX05PRklYCQkweDAwMDIJLyogISBmbGFncyBhcyB0aGV5IG1hdGNoICAgICAgICAgICovCiAjZGVmaW5lIFRTX1VBQ19TSUdCVVMJCTB4MDAwNAkvKiAhIHVzZXJzcGFjZSBwYXJ0IG9mICdvc2Zfc3lzaW5mbycgKi8KICNkZWZpbmUgVFNfUkVTVE9SRV9TSUdNQVNLCTB4MDAwOAkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCi0jZGVmaW5lIFRTX1BPTExJTkcJCTB4MDAxMAkvKiBpZGxlIHRhc2sgcG9sbGluZyBuZWVkX3Jlc2NoZWQsCi0JCQkJCSAgIHNraXAgc2VuZGluZyBpbnRlcnJ1cHQgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgSEFWRV9TRVRfUkVTVE9SRV9TSUdNQVNLCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggMDNlNDk0Zi4uODNmMDNjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTE5MCwxMSArMTkwLDYgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfQVJDX0hBU19MTFNDICovCiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLQogLyoqCiAgKiBfX2F0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNjQ3YTgzYS4uZWJjMGNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAvKgogICogSGFyZHdhcmUgYXNzaXN0ZWQgcmVhZC1tb2RpZnktd3JpdGUgdXNpbmcgQVJDNzAwIExMT0NLL1NDT05EIGluc25zLgpAQCAtNDk2LDEwICs0OTcsNiBAQAogICovCiAjZGVmaW5lIGZmeih4KQlfX2Zmcyh+KHgpKQogCi0vKiBUT0RPIGRvZXMgdGhpcyBhZmZlY3QgdW5pLXByb2Nlc3NvciBjb2RlICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpICBiYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKSAgIGJhcnJpZXIoKQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGRiM2M1NDEuLjA3MWRjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMzE0LDYgKzMxNCw3IEBACiAJc2VsZWN0IENMS1NSQ19PRgogCXNlbGVjdCBDT01NT05fQ0xLCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlzZWxlY3QgTVVMVElfSVJRX0hBTkRMRVIKIAlzZWxlY3QgU1BBUlNFX0lSUQogCXNlbGVjdCBVU0VfT0YKQEAgLTM3Niw3ICszNzcsNiBAQAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IElSUV9ET01BSU4KLQlzZWxlY3QgTkVFRF9NQUNIX0dQSU9fSAogCXNlbGVjdCBORUVEX01BQ0hfSU9fSCBpZiBQQ0NBUkQKIAlzZWxlY3QgUElOQ1RSTAogCXNlbGVjdCBQSU5DVFJMX0FUOTEgaWYgVVNFX09GCkBAIC03NTUsNyArNzU1LDcgQEAKIAlzZWxlY3QgQVRBR1MKIAlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCXNlbGVjdCBDTEtTUkNfU0FNU1VOR19QV00KLQlzZWxlY3QgQ09NTU9OX0NMSworCXNlbGVjdCBDT01NT05fQ0xLX1NBTVNVTkcKIAlzZWxlY3QgQ1BVX1Y2SwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEdQSU9fU0FNU1VORwpAQCAtODI5LDI1ICs4MjksNiBAQAogCWhlbHAKIAkgIFNhbXN1bmcgUzVQVjIxMC9TNVBDMTEwIHNlcmllcyBiYXNlZCBzeXN0ZW1zCiAKLWNvbmZpZyBBUkNIX0VYWU5PUwotCWJvb2wgIlNhbXN1bmcgRVhZTk9TIgotCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCi0Jc2VsZWN0IEFSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMCi0Jc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCi0Jc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQotCXNlbGVjdCBBUk1fR0lDCi0Jc2VsZWN0IENPTU1PTl9DTEsKLQlzZWxlY3QgQ1BVX1Y3Ci0Jc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQlzZWxlY3QgSEFWRV9TM0MyNDEwX0kyQyBpZiBJMkMKLQlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HIGlmIFdBVENIRE9HCi0Jc2VsZWN0IEhBVkVfUzNDX1JUQyBpZiBSVENfQ0xBU1MKLQlzZWxlY3QgTkVFRF9NQUNIX01FTU9SWV9ICi0Jc2VsZWN0IFNQQVJTRV9JUlEKLQlzZWxlY3QgVVNFX09GCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgU0FNU1VORydzIEVYWU5PUyBTb0NzIChFWFlOT1M0LzUpCi0KIGNvbmZpZyBBUkNIX0RBVklOQ0kKIAlib29sICJUSSBEYVZpbmNpIgogCXNlbGVjdCBBUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTApAQCAtOTUxLDYgKzkzMiw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1heHhpYS9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtYmNtL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1iZXJsaW4vS2NvbmZpZyIKQEAgLTE2NDYsOSArMTYyOSw5IEBACiAJaW50CiAJZGVmYXVsdCAxMDI0IGlmIEFSQ0hfU0hNT0JJTEUgfHwgQVJDSF9URUdSQQogCWRlZmF1bHQgNTEyIGlmIEFSQ0hfRVhZTk9TIHx8IEFSQ0hfS0VZU1RPTkUgfHwgU09DX09NQVA1IHx8IFNPQ19EUkE3WFggfHwgQVJDSF9TM0MyNFhYIHx8IEFSQ0hfUzNDNjRYWAorCWRlZmF1bHQgNDE2IGlmIEFSQ0hfU1VOWEkKIAlkZWZhdWx0IDM5MiBpZiBBUkNIX1U4NTAwCiAJZGVmYXVsdCAzNTIgaWYgQVJDSF9WVDg1MDAKLQlkZWZhdWx0IDI4OCBpZiBBUkNIX1NVTlhJCiAJZGVmYXVsdCAyNjQgaWYgTUFDSF9INDcwMAogCWRlZmF1bHQgMAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IGVhYjhlY2IuLjhmOTA1OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMzE3LDYgKzMxNywxMyBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAogCQkgIG9uIGkuTVg2U0wuCiAKKwljb25maWcgREVCVUdfSU1YNlNYX1VBUlQKKwkJYm9vbCAiaS5NWDZTWCBEZWJ1ZyBVQVJUIgorCQlkZXBlbmRzIG9uIFNPQ19JTVg2U1gKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIG9uIGkuTVg2U1guCisKIAljb25maWcgREVCVUdfS0VZU1RPTkVfVUFSVDAKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgb24gS0VZU1RPTkUyIHVzaW5nIFVBUlQwIgogCQlkZXBlbmRzIG9uIEFSQ0hfS0VZU1RPTkUKQEAgLTM0OSw1NiArMzU2LDQwIEBACiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CiAJCSAgb24gTU1QIFVBUlQzLgogCi0JY29uZmlnIERFQlVHX01TTV9VQVJUMQotCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgTVNNIFVBUlQxIgotCQlkZXBlbmRzIG9uIEFSQ0hfTVNNN1gwMEEgfHwgQVJDSF9NU003WDMwIHx8IEFSQ0hfUVNEOFg1MAotCQlzZWxlY3QgREVCVUdfTVNNX1VBUlQKKwljb25maWcgREVCVUdfTVNNX1VBUlQKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIE1TTSBVQVJUIgorCQlkZXBlbmRzIG9uIEFSQ0hfTVNNCiAJCWhlbHAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKLQkJICB0aGVpciBvdXRwdXQgdG8gdGhlIGZpcnN0IHNlcmlhbCBwb3J0IG9uIE1TTSBkZXZpY2VzLgorCQkgIHRoZWlyIG91dHB1dCB0byB0aGUgc2VyaWFsIHBvcnQgb24gTVNNIGRldmljZXMuCiAKLQljb25maWcgREVCVUdfTVNNX1VBUlQyCi0JCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBNU00gVUFSVDIiCi0JCWRlcGVuZHMgb24gQVJDSF9NU003WDAwQSB8fCBBUkNIX01TTTdYMzAgfHwgQVJDSF9RU0Q4WDUwCi0JCXNlbGVjdCBERUJVR19NU01fVUFSVAotCQloZWxwCi0JCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0Ci0JCSAgdGhlaXIgb3V0cHV0IHRvIHRoZSBzZWNvbmQgc2VyaWFsIHBvcnQgb24gTVNNIGRldmljZXMuCisJCSAgQVJDSCAgICAgICAgICAgICAgICBERUJVR19VQVJUX1BIWVMgICBERUJVR19VQVJUX0JBU0UgICAjCisJCSAgTVNNN1gwMEEsIFFTRDhYNTAgICAweGE5YTAwMDAwICAgICAgICAweGUxMDAwMDAwICAgICAgICBVQVJUMQorCQkgIE1TTTdYMDBBLCBRU0Q4WDUwICAgMHhhOWIwMDAwMCAgICAgICAgMHhlMTAwMDAwMCAgICAgICAgVUFSVDIKKwkJICBNU003WDAwQSwgUVNEOFg1MCAgIDB4YTljMDAwMDAgICAgICAgIDB4ZTEwMDAwMDAgICAgICAgIFVBUlQzCiAKLQljb25maWcgREVCVUdfTVNNX1VBUlQzCi0JCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBNU00gVUFSVDMiCi0JCWRlcGVuZHMgb24gQVJDSF9NU003WDAwQSB8fCBBUkNIX01TTTdYMzAgfHwgQVJDSF9RU0Q4WDUwCi0JCXNlbGVjdCBERUJVR19NU01fVUFSVAotCQloZWxwCi0JCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0Ci0JCSAgdGhlaXIgb3V0cHV0IHRvIHRoZSB0aGlyZCBzZXJpYWwgcG9ydCBvbiBNU00gZGV2aWNlcy4KKwkJICBNU003WDMwICAgICAgICAgICAgIDB4YWNhMDAwMDAgICAgICAgIDB4ZTEwMDAwMDAgICAgICAgIFVBUlQxCisJCSAgTVNNN1gzMCAgICAgICAgICAgICAweGFjYjAwMDAwICAgICAgICAweGUxMDAwMDAwICAgICAgICBVQVJUMgorCQkgIE1TTTdYMzAgICAgICAgICAgICAgMHhhY2MwMDAwMCAgICAgICAgMHhlMTAwMDAwMCAgICAgICAgVUFSVDMKIAotCWNvbmZpZyBERUJVR19NU004NjYwX1VBUlQKLQkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIE1TTSA4NjYwIFVBUlQiCi0JCWRlcGVuZHMgb24gQVJDSF9NU004WDYwCi0JCXNlbGVjdCBNU01fSEFTX0RFQlVHX1VBUlRfSFMKLQkJc2VsZWN0IERFQlVHX01TTV9VQVJUCi0JCWhlbHAKLQkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKLQkJICB0aGVpciBvdXRwdXQgdG8gdGhlIHNlcmlhbCBwb3J0IG9uIE1TTSA4NjYwIGRldmljZXMuCisJCSAgUGxlYXNlIGFkanVzdCBERUJVR19VQVJUX1BIWVMgYW5kIERFQlVHX1VBUlRfQkFTRSBjb25maWd1cmF0aW9uCisJCSAgb3B0aW9ucyBiYXNlZCBvbiB5b3VyIG5lZWRzLgogCi0JY29uZmlnIERFQlVHX01TTTg5NjBfVUFSVAotCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgTVNNIDg5NjAgVUFSVCIKLQkJZGVwZW5kcyBvbiBBUkNIX01TTTg5NjAKLQkJc2VsZWN0IE1TTV9IQVNfREVCVUdfVUFSVF9IUwotCQlzZWxlY3QgREVCVUdfTVNNX1VBUlQKKwljb25maWcgREVCVUdfUUNPTV9VQVJURE0KKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFFDT00gVUFSVERNIgorCQlkZXBlbmRzIG9uIEFSQ0hfUUNPTQogCQloZWxwCiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0Ci0JCSAgdGhlaXIgb3V0cHV0IHRvIHRoZSBzZXJpYWwgcG9ydCBvbiBNU00gODk2MCBkZXZpY2VzLgorCQkgIHRoZWlyIG91dHB1dCB0byB0aGUgc2VyaWFsIHBvcnQgb24gUXVhbGNvbW0gZGV2aWNlcy4KIAotCWNvbmZpZyBERUJVR19NU004OTc0X1VBUlQKLQkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIE1TTSA4OTc0IFVBUlQiCi0JCWRlcGVuZHMgb24gQVJDSF9NU004OTc0Ci0JCXNlbGVjdCBNU01fSEFTX0RFQlVHX1VBUlRfSFMKLQkJc2VsZWN0IERFQlVHX01TTV9VQVJUCi0JCWhlbHAKLQkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKLQkJICB0aGVpciBvdXRwdXQgdG8gdGhlIHNlcmlhbCBwb3J0IG9uIE1TTSA4OTc0IGRldmljZXMuCisJCSAgQVJDSCAgICAgIERFQlVHX1VBUlRfUEhZUyAgIERFQlVHX1VBUlRfQkFTRQorCQkgIEFQUTgwODQgICAweGY5OTVlMDAwICAgICAgICAweGZhNzVlMDAwCisJCSAgTVNNOFg2MCAgIDB4MTljNDAwMDAgICAgICAgIDB4ZjAwNDAwMDAKKwkJICBNU004OTYwICAgMHgxNjQ0MDAwMCAgICAgICAgMHhmMDA0MDAwMAorCQkgIE1TTTg5NzQgICAweGY5OTFlMDAwICAgICAgICAweGZhNzFlMDAwCisKKwkJICBQbGVhc2UgYWRqdXN0IERFQlVHX1VBUlRfUEhZUyBhbmQgREVCVUdfVUFSVF9CQVNFIGNvbmZpZ3VyYXRpb24KKwkJICBvcHRpb25zIGJhc2VkIG9uIHlvdXIgbmVlZHMuCiAKIAljb25maWcgREVCVUdfTVZFQlVfVUFSVAogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgTVZFQlUgVUFSVCAob2xkIGJvb3Rsb2FkZXJzKSIKQEAgLTYyNSw2ICs2MTYsNyBAQAogCWNvbmZpZyBERUJVR19TM0NfVUFSVDAKIAkJZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKIAkJc2VsZWN0IERFQlVHX0VYWU5PU19VQVJUIGlmIEFSQ0hfRVhZTk9TCisJCXNlbGVjdCBERUJVR19TM0MyNFhYX1VBUlQgaWYgQVJDSF9TM0MyNFhYCiAJCWJvb2wgIlVzZSBTM0MgVUFSVCAwIGZvciBsb3ctbGV2ZWwgZGVidWciCiAJCWhlbHAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKQEAgLTYzNyw2ICs2MjksNyBAQAogCWNvbmZpZyBERUJVR19TM0NfVUFSVDEKIAkJZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKIAkJc2VsZWN0IERFQlVHX0VYWU5PU19VQVJUIGlmIEFSQ0hfRVhZTk9TCisJCXNlbGVjdCBERUJVR19TM0MyNFhYX1VBUlQgaWYgQVJDSF9TM0MyNFhYCiAJCWJvb2wgIlVzZSBTM0MgVUFSVCAxIGZvciBsb3ctbGV2ZWwgZGVidWciCiAJCWhlbHAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKQEAgLTY0OSw2ICs2NDIsNyBAQAogCWNvbmZpZyBERUJVR19TM0NfVUFSVDIKIAkJZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKIAkJc2VsZWN0IERFQlVHX0VYWU5PU19VQVJUIGlmIEFSQ0hfRVhZTk9TCisJCXNlbGVjdCBERUJVR19TM0MyNFhYX1VBUlQgaWYgQVJDSF9TM0MyNFhYCiAJCWJvb2wgIlVzZSBTM0MgVUFSVCAyIGZvciBsb3ctbGV2ZWwgZGVidWciCiAJCWhlbHAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKQEAgLTY3MCw2ICs2NjQsMzMgQEAKIAkJICBUaGUgdW5jb21wcmVzc29yIGNvZGUgcG9ydCBjb25maWd1cmF0aW9uIGlzIG5vdyBoYW5kbGVkCiAJCSAgYnkgQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQuCiAKKwljb25maWcgREVCVUdfUzNDMjQxMF9VQVJUMAorCQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjRYWAorCQlzZWxlY3QgREVCVUdfUzNDMjQxMF9VQVJUCisJCWJvb2wgIlVzZSBTM0MyNDEwL1MzQzI0MTIgVUFSVCAwIGZvciBsb3ctbGV2ZWwgZGVidWciCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKKwkJICB0aGVpciBvdXRwdXQgdG8gVUFSVCAwLiBUaGUgcG9ydCBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZAorCQkgIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgorCisJY29uZmlnIERFQlVHX1MzQzI0MTBfVUFSVDEKKwkJZGVwZW5kcyBvbiBBUkNIX1MzQzI0WFgKKwkJc2VsZWN0IERFQlVHX1MzQzI0MTBfVUFSVAorCQlib29sICJVc2UgUzNDMjQxMC9TM0MyNDEyIFVBUlQgMSBmb3IgbG93LWxldmVsIGRlYnVnIgorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0CisJCSAgdGhlaXIgb3V0cHV0IHRvIFVBUlQgMS4gVGhlIHBvcnQgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQKKwkJICBieSB0aGUgYm9vdC1sb2FkZXIgYmVmb3JlIHVzZS4KKworCWNvbmZpZyBERUJVR19TM0MyNDEwX1VBUlQyCisJCWRlcGVuZHMgb24gQVJDSF9TM0MyNFhYCisJCXNlbGVjdCBERUJVR19TM0MyNDEwX1VBUlQKKwkJYm9vbCAiVXNlIFMzQzI0MTAvUzNDMjQxMiBVQVJUIDIgZm9yIGxvdy1sZXZlbCBkZWJ1ZyIKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGRlYnVnIHByaW50IHJvdXRpbmVzIHRvIGRpcmVjdAorCQkgIHRoZWlyIG91dHB1dCB0byBVQVJUIDIuIFRoZSBwb3J0IG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkCisJCSAgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCisKIAljb25maWcgREVCVUdfU09DRlBHQV9VQVJUCiAJCWRlcGVuZHMgb24gQVJDSF9TT0NGUEdBCiAJCWJvb2wgIlVzZSBTT0NGUEdBIFVBUlQgZm9yIGxvdy1sZXZlbCBkZWJ1ZyIKQEAgLTkyMSw2ICs5NDIsMTMgQEAKIGNvbmZpZyBERUJVR19FWFlOT1NfVUFSVAogCWJvb2wKIAorY29uZmlnIERFQlVHX1MzQzI0MTBfVUFSVAorCWJvb2wKKwlzZWxlY3QgREVCVUdfUzNDMjRYWF9VQVJUCisKK2NvbmZpZyBERUJVR19TM0MyNFhYX1VBUlQKKwlib29sCisKIGNvbmZpZyBERUJVR19PTUFQMlBMVVNfVUFSVAogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTCkBAIC05MzUsMTMgKzk2MywyMyBAQAogCQkJCQkJREVCVUdfSU1YNTFfVUFSVCB8fCBcCiAJCQkJCQlERUJVR19JTVg1M19VQVJUIHx8IFwKIAkJCQkJCURFQlVHX0lNWDZRX1VBUlQgfHwgXAotCQkJCQkJREVCVUdfSU1YNlNMX1VBUlQKKwkJCQkJCURFQlVHX0lNWDZTTF9VQVJUIHx8IFwKKwkJCQkJCURFQlVHX0lNWDZTWF9VQVJUCiAJZGVmYXVsdCAxCiAJZGVwZW5kcyBvbiBBUkNIX01YQwogCWhlbHAKIAkgIENob29zZSBVQVJUIHBvcnQgb24gd2hpY2gga2VybmVsIGxvdy1sZXZlbCBkZWJ1ZyBtZXNzYWdlcwogCSAgc2hvdWxkIGJlIG91dHB1dC4KIAorY29uZmlnIERFQlVHX1ZGX1VBUlRfUE9SVAorCWludCAiVnlicmlkIERlYnVnIFVBUlQgUG9ydCBTZWxlY3Rpb24iIGlmIERFQlVHX1ZGX1VBUlQKKwlkZWZhdWx0IDEKKwlyYW5nZSAwIDMKKwlkZXBlbmRzIG9uIFNPQ19WRjYxMAorCWhlbHAKKwkgIENob29zZSBVQVJUIHBvcnQgb24gd2hpY2gga2VybmVsIGxvdy1sZXZlbCBkZWJ1ZyBtZXNzYWdlcworCSAgc2hvdWxkIGJlIG91dHB1dC4KKwogY29uZmlnIERFQlVHX1RFR1JBX1VBUlQKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1RFR1JBCkBAIC05NTAsMTAgKzk4OCw2IEBACiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9TVEkKIAotY29uZmlnIERFQlVHX01TTV9VQVJUCi0JYm9vbAotCWRlcGVuZHMgb24gQVJDSF9NU00gfHwgQVJDSF9RQ09NCi0KIGNvbmZpZyBERUJVR19MTF9JTkNMVURFCiAJc3RyaW5nCiAJZGVmYXVsdCAiZGVidWcvODI1MC5TIiBpZiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF84MjUwCkBAIC05NzAsOSArMTAwNCwxMSBAQAogCQkJCSBERUJVR19JTVg1MV9VQVJUIHx8IFwKIAkJCQkgREVCVUdfSU1YNTNfVUFSVCB8fFwKIAkJCQkgREVCVUdfSU1YNlFfVUFSVCB8fCBcCi0JCQkJIERFQlVHX0lNWDZTTF9VQVJUCi0JZGVmYXVsdCAiZGVidWcvbXNtLlMiIGlmIERFQlVHX01TTV9VQVJUCisJCQkJIERFQlVHX0lNWDZTTF9VQVJUIHx8IFwKKwkJCQkgREVCVUdfSU1YNlNYX1VBUlQKKwlkZWZhdWx0ICJkZWJ1Zy9tc20uUyIgaWYgREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0KIAlkZWZhdWx0ICJkZWJ1Zy9vbWFwMnBsdXMuUyIgaWYgREVCVUdfT01BUDJQTFVTX1VBUlQKKwlkZWZhdWx0ICJkZWJ1Zy9zM2MyNHh4LlMiIGlmIERFQlVHX1MzQzI0WFhfVUFSVAogCWRlZmF1bHQgImRlYnVnL3NpcmYuUyIgaWYgREVCVUdfU0lSRlBSSU1BMl9VQVJUMSB8fCBERUJVR19TSVJGTUFSQ09fVUFSVDEKIAlkZWZhdWx0ICJkZWJ1Zy9zdGkuUyIgaWYgREVCVUdfU1RJX1VBUlQKIAlkZWZhdWx0ICJkZWJ1Zy90ZWdyYS5TIiBpZiBERUJVR19URUdSQV9VQVJUCkBAIC0xMDI5LDEyICsxMDY1LDE5IEBACiAJZGVmYXVsdCAweDQwMDkwMDAwIGlmIEFSQ0hfTFBDMzJYWAogCWRlZmF1bHQgMHg0MDEwMDAwMCBpZiBERUJVR19QWEFfVUFSVDEKIAlkZWZhdWx0IDB4NDIwMDAwMDAgaWYgQVJDSF9HRU1JTkkKKwlkZWZhdWx0IDB4NTAwMDAwMDAgaWYgREVCVUdfUzNDMjRYWF9VQVJUICYmIChERUJVR19TM0NfVUFSVDAgfHwgXAorCQkJCURFQlVHX1MzQzI0MTBfVUFSVDApCisJZGVmYXVsdCAweDUwMDA0MDAwIGlmIERFQlVHX1MzQzI0WFhfVUFSVCAmJiAoREVCVUdfUzNDX1VBUlQxIHx8IFwKKwkJCQlERUJVR19TM0MyNDEwX1VBUlQxKQorCWRlZmF1bHQgMHg1MDAwODAwMCBpZiBERUJVR19TM0MyNFhYX1VBUlQgJiYgKERFQlVHX1MzQ19VQVJUMiB8fCBcCisJCQkJREVCVUdfUzNDMjQxMF9VQVJUMikKIAlkZWZhdWx0IDB4N2MwMDAzZjggaWYgRk9PVEJSSURHRQogCWRlZmF1bHQgMHg4MDA3MDAwMCBpZiBERUJVR19JTVgyM19VQVJUCiAJZGVmYXVsdCAweDgwMDc0MDAwIGlmIERFQlVHX0lNWDI4X1VBUlQKIAlkZWZhdWx0IDB4ODAyMzAwMDAgaWYgREVCVUdfUElDT1hDRUxMX1VBUlQKIAlkZWZhdWx0IDB4ODA4YzAwMDAgaWYgQVJDSF9FUDkzWFgKIAlkZWZhdWx0IDB4OTAwMjAwMDAgaWYgREVCVUdfTlNQSVJFX0NMQVNTSUNfVUFSVCB8fCBERUJVR19OU1BJUkVfQ1hfVUFSVAorCWRlZmF1bHQgMHhhOWEwMDAwMCBpZiBERUJVR19NU01fVUFSVAogCWRlZmF1bHQgMHhiMDA5MDAwMCBpZiBERUJVR19WRVhQUkVTU19VQVJUMF9DUlgKIAlkZWZhdWx0IDB4YzAwMTMwMDAgaWYgREVCVUdfVTMwMF9VQVJUCiAJZGVmYXVsdCAweGM4MDAwMDAwIGlmIEFSQ0hfSVhQNFhYICYmICFDUFVfQklHX0VORElBTgpAQCAtMTA1MCw2ICsxMDkzLDcgQEAKIAkJCQlBUkNIX09SSU9ONVgKIAlkZWZhdWx0IDB4ZjdmYzkwMDAgaWYgREVCVUdfQkVSTElOX1VBUlQKIAlkZWZhdWx0IDB4ZjhiMDAwMDAgaWYgREVCVUdfSEkzNzE2X1VBUlQKKwlkZWZhdWx0IDB4Zjk5MWUwMDAgaWYgREVCVUdfUUNPTV9VQVJURE0KIAlkZWZhdWx0IDB4ZmNiMDAwMDAgaWYgREVCVUdfSEkzNjIwX1VBUlQKIAlkZWZhdWx0IDB4ZmU4MDAwMDAgaWYgQVJDSF9JT1AzMlgKIAlkZWZhdWx0IDB4ZmZjMDIwMDAgaWYgREVCVUdfU09DRlBHQV9VQVJUCkBAIC0xMDU4LDExICsxMTAyLDEzIEBACiAJZGVmYXVsdCAweGZmZmZmNzAwIGlmIEFSQ0hfSU9QMzNYCiAJZGVwZW5kcyBvbiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfTExfVUFSVF9QTDAxWCB8fCBcCiAJCURFQlVHX0xMX1VBUlRfRUZNMzIgfHwgXAotCQlERUJVR19VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF9QTDAxWAorCQlERUJVR19VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF9QTDAxWCB8fCBcCisJCURFQlVHX01TTV9VQVJUIHx8IERFQlVHX1FDT01fVUFSVERNIHx8IERFQlVHX1MzQzI0WFhfVUFSVAogCiBjb25maWcgREVCVUdfVUFSVF9WSVJUCiAJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiBkZWJ1ZyBVQVJUIgogCWRlZmF1bHQgMHhlMDAxMGZlMCBpZiBBUkNIX1JQQworCWRlZmF1bHQgMHhlMTAwMDAwMCBpZiBERUJVR19NU01fVUFSVAogCWRlZmF1bHQgMHhmMDAwMGJlMCBpZiBBUkNIX0VCU0ExMTAKIAlkZWZhdWx0IDB4ZjAwMDkwMDAgaWYgREVCVUdfQ05TM1hYWAogCWRlZmF1bHQgMHhmMDFmYjAwMCBpZiBERUJVR19OT01BRElLX1VBUlQKQEAgLTEwNzUsOSArMTEyMSwxNiBAQAogCWRlZmF1bHQgMHhmMjEwMDAwMCBpZiBERUJVR19QWEFfVUFSVDEKIAlkZWZhdWx0IDB4ZjQwOTAwMDAgaWYgQVJDSF9MUEMzMlhYCiAJZGVmYXVsdCAweGY0MjAwMDAwIGlmIEFSQ0hfR0VNSU5JCisJZGVmYXVsdCAweGY3MDAwMDAwIGlmIERFQlVHX1MzQzI0WFhfVUFSVCAmJiAoREVCVUdfUzNDX1VBUlQwIHx8IFwKKwkJCQlERUJVR19TM0MyNDEwX1VBUlQwKQorCWRlZmF1bHQgMHhmNzAwNDAwMCBpZiBERUJVR19TM0MyNFhYX1VBUlQgJiYgKERFQlVHX1MzQ19VQVJUMSB8fCBcCisJCQkJREVCVUdfUzNDMjQxMF9VQVJUMSkKKwlkZWZhdWx0IDB4ZjcwMDgwMDAgaWYgREVCVUdfUzNDMjRYWF9VQVJUICYmIChERUJVR19TM0NfVUFSVDIgfHwgXAorCQkJCURFQlVHX1MzQzI0MTBfVUFSVDIpCiAJZGVmYXVsdCAweGY3ZmM5MDAwIGlmIERFQlVHX0JFUkxJTl9VQVJUCiAJZGVmYXVsdCAweGY4MDA5MDAwIGlmIERFQlVHX1ZFWFBSRVNTX1VBUlQwX0NBOQogCWRlZmF1bHQgMHhmODA5MDAwMCBpZiBERUJVR19WRVhQUkVTU19VQVJUMF9SUzEKKwlkZWZhdWx0IDB4ZmE3MWUwMDAgaWYgREVCVUdfUUNPTV9VQVJURE0KIAlkZWZhdWx0IDB4ZmIwMDkwMDAgaWYgREVCVUdfUkVBTFZJRVdfU1REX1BPUlQKIAlkZWZhdWx0IDB4ZmIxMGMwMDAgaWYgREVCVUdfUkVBTFZJRVdfUEIxMTc2X1BPUlQKIAlkZWZhdWx0IDB4ZmQwMDAwMDAgaWYgQVJDSF9TUEVBUjNYWCB8fCBBUkNIX1NQRUFSNlhYCkBAIC0xMTE2LDcgKzExNjksOCBAQAogCWRlZmF1bHQgMHhmZjAwMzAwMCBpZiBERUJVR19VMzAwX1VBUlQKIAlkZWZhdWx0IERFQlVHX1VBUlRfUEhZUyBpZiAhTU1VCiAJZGVwZW5kcyBvbiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfTExfVUFSVF9QTDAxWCB8fCBcCi0JCURFQlVHX1VBUlRfODI1MCB8fCBERUJVR19VQVJUX1BMMDFYCisJCURFQlVHX1VBUlRfODI1MCB8fCBERUJVR19VQVJUX1BMMDFYIHx8IFwKKwkJREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0gfHwgREVCVUdfUzNDMjRYWF9VQVJUCiAKIGNvbmZpZyBERUJVR19VQVJUXzgyNTBfU0hJRlQKIAlpbnQgIlJlZ2lzdGVyIG9mZnNldCBzaGlmdCBmb3IgdGhlIDgyNTAgZGVidWcgVUFSVCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggNDFjMTkzMS4uNjcyMWZhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTEzOCwxMCArMTM4LDEyIEBACiB0ZXh0b2ZzLSQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgOj0gMHgwMDIwODAwMAogdGV4dG9mcy0kKENPTkZJR19BUkNIX01TTThYNjApIDo9IDB4MDAyMDgwMDAKIHRleHRvZnMtJChDT05GSUdfQVJDSF9NU004OTYwKSA6PSAweDAwMjA4MDAwCit0ZXh0b2ZzLSQoQ09ORklHX0FSQ0hfQVhYSUEpIDo9IDB4MDAzMDgwMDAKIAogIyBNYWNoaW5lIGRpcmVjdG9yeSBuYW1lLiAgVGhpcyBsaXN0IGlzIHNvcnRlZCBhbHBoYW51bWVyaWNhbGx5CiAjIGJ5IENPTkZJR18qIG1hY3JvIG5hbWUuCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQVQ5MSkJCSs9IGF0OTEKK21hY2hpbmUtJChDT05GSUdfQVJDSF9BWFhJQSkJCSs9IGF4eGlhCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQkNNKQkJKz0gYmNtCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQkVSTElOKQkJKz0gYmVybGluCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpCQkrPSBjbHBzNzExeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggMDY2YjAzNC4uM2E4YjMyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC02MCwxMSArNjAsNiBAQAogCQlhZGQJXHJiLCBccmIsICMweDAwMDEwMDAwCUAgU2VyMQogI2VuZGlmCiAJCS5lbmRtCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzI0WFgpCi0JCS5tYWNybyBsb2Fkc3AsIHJiLCB0bXAKLQkJbW92CVxyYiwgIzB4NTAwMDAwMDAKLQkJYWRkCVxyYiwgXHJiLCAjMHg0MDAwICogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQKLQkJLmVuZG0KICNlbHNlCiAJCS5tYWNybwlsb2Fkc3AsCXJiLCB0bXAKIAkJYWRkcnVhcnQgXHJiLCBcdG1wCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvZHRzL01ha2VmaWxlCmluZGV4IDM3N2I3YzMuLjU5ODZmZjYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQpAQCAtNTAsMTMgKzUwLDE1IEBACiBkdGItJChDT05GSUdfQVJDSF9BVDkxKQkrPSBzYW1hNWQzNmVrLmR0YgogCiBkdGItJChDT05GSUdfQVJDSF9BVExBUzYpICs9IGF0bGFzNi1ldmIuZHRiCitkdGItJChDT05GSUdfQVJDSF9BWFhJQSkgKz0gYXhtNTUxNi1hbWFyaWxsby5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0JDTTI4MzUpICs9IGJjbTI4MzUtcnBpLWIuZHRiCiBkdGItJChDT05GSUdfQVJDSF9CQ01fNTMwMVgpICs9IGJjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0JDTV9NT0JJTEUpICs9IGJjbTI4MTU1LWFwLmR0YiBcCiAJYmNtMjE2NjQtZ2FybmV0LmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfQkVSTElOKSArPSBcCiAJYmVybGluMi1zb255LW5zei1nczcuZHRiCVwKLQliZXJsaW4yY2QtZ29vZ2xlLWNocm9tZWNhc3QuZHRiCisJYmVybGluMmNkLWdvb2dsZS1jaHJvbWVjYXN0LmR0YglcCisJYmVybGluMnEtbWFydmVsbC1kbXAuZHRiCiBkdGItJChDT05GSUdfQVJDSF9EQVZJTkNJKSArPSBkYTg1MC1lbmJ3LWNtYy5kdGIgXAogCWRhODUwLWV2bS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0VGTTMyKSArPSBlZm0zMmdnLWRrMzc1MC5kdGIKQEAgLTcyLDEwICs3NCwxNCBAQAogCWV4eW5vczUyNTAtYXJuZGFsZS5kdGIgXAogCWV4eW5vczUyNTAtc21kazUyNTAuZHRiIFwKIAlleHlub3M1MjUwLXNub3cuZHRiIFwKKwlleHlub3M1MjYwLXh5cmVmNTI2MC5kdGIgXAorCWV4eW5vczU0MTAtc21kazU0MTAuZHRiIFwKIAlleHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdGIgXAorCWV4eW5vczU0MjAtcGVhY2gtcGl0LmR0YiBcCiAJZXh5bm9zNTQyMC1zbWRrNTQyMC5kdGIgXAogCWV4eW5vczU0NDAtc2Q1djEuZHRiIFwKLQlleHlub3M1NDQwLXNzZGs1NDQwLmR0YgorCWV4eW5vczU0NDAtc3NkazU0NDAuZHRiIFwKKwlleHlub3M1ODAwLXBlYWNoLXBpLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfSEkzeHh4KSArPSBoaTM2MjAtaGk0NTExLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfSElHSEJBTkspICs9IGhpZ2hiYW5rLmR0YiBcCiAJZWN4LTIwMDAuZHRiCkBAIC0xMjcsNiArMTMzLDkgQEAKIAlraXJrd29vZC1uc2EzMTBhLmR0YiBcCiAJa2lya3dvb2Qtb3BlbmJsb2Nrc19hNi5kdGIgXAogCWtpcmt3b29kLW9wZW5ibG9ja3NfYTcuZHRiIFwKKwlraXJrd29vZC1vcGVucmQtYmFzZS5kdGIgXAorCWtpcmt3b29kLW9wZW5yZC1jbGllbnQuZHRiIFwKKwlraXJrd29vZC1vcGVucmQtdWx0aW1hdGUuZHRiIFwKIAlraXJrd29vZC1yZDg4ZjYxOTIuZHRiIFwKIAlraXJrd29vZC1yZDg4ZjYyODEtYTAuZHRiIFwKIAlraXJrd29vZC1yZDg4ZjYyODEtYTEuZHRiIFwKQEAgLTE1NywxMCArMTY2LDEyIEBACiAJaW14MjctcGh5dGVjLXBoeWNhcmQtcy1yZGsuZHRiIFwKIAlpbXgzMS1idWcuZHRiIFwKIAlpbXgzNS1ldWtyZWEtbWJpbXhzZDM1LWJhc2Vib2FyZC5kdGIgXAorCWlteDM1LXBkay5kdGIgXAogCWlteDUwLWV2ay5kdGIgXAogCWlteDUxLWFwZjUxLmR0YiBcCiAJaW14NTEtYXBmNTFkZXYuZHRiIFwKIAlpbXg1MS1iYWJiYWdlLmR0YiBcCisJaW14NTEtZGlnaS1jb25uZWN0Y29yZS1qc2suZHRiIFwKIAlpbXg1MS1ldWtyZWEtbWJpbXhzZDUxLWJhc2Vib2FyZC5kdGIgXAogCWlteDUzLWFyZC5kdGIgXAogCWlteDUzLW01M2V2ay5kdGIgXApAQCAtMTc5LDYgKzE5MCw4IEBACiAJaW14NmRsLWd3NTR4eC5kdGIgXAogCWlteDZkbC1odW1taW5nYm9hcmQuZHRiIFwKIAlpbXg2ZGwtbml0cm9nZW42eC5kdGIgXAorCWlteDZkbC1waHl0ZWMtcGJhYjAxLmR0YiBcCisJaW14NmRsLXJpb3Rib2FyZC5kdGIgXAogCWlteDZkbC1zYWJyZWF1dG8uZHRiIFwKIAlpbXg2ZGwtc2FicmVsaXRlLmR0YiBcCiAJaW14NmRsLXNhYnJlc2QuZHRiIFwKQEAgLTIwMyw2ICsyMTYsNyBAQAogCWlteDZxLXVkb28uZHRiIFwKIAlpbXg2cS13YW5kYm9hcmQuZHRiIFwKIAlpbXg2c2wtZXZrLmR0YiBcCisJdmY2MTAtY29saWJyaS5kdGIgXAogCXZmNjEwLWNvc21pYy5kdGIgXAogCXZmNjEwLXR3ci5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX01YUykgKz0gaW14MjMtZXZrLmR0YiBcCkBAIC0yMzAsNzYgKzI0NCw4NCBAQAogZHRiLSQoQ09ORklHX0FSQ0hfTlNQSVJFKSArPSBuc3BpcmUtY3guZHRiIFwKIAluc3BpcmUtdHAuZHRiIFwKIAluc3BpcmUtY2xwLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfT01BUDJQTFVTKSArPSBvbWFwMjQyMC1oNC5kdGIgXAotCW9tYXAyNDMwLXNkcC5kdGIgXAorZHRiLSQoQ09ORklHX0FSQ0hfT01BUDIpICs9IG9tYXAyNDIwLWg0LmR0YiBcCiAJb21hcDI0MjAtbjgwMC5kdGIgXAogCW9tYXAyNDIwLW44MTAuZHRiIFwKIAlvbWFwMjQyMC1uODEwLXdpbWF4LmR0YiBcCisJb21hcDI0MzAtc2RwLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfT01BUDMpICs9IGFtMzUxNy1jcmFuZWJvYXJkLmR0YiBcCisJYW0zNTE3LWV2bS5kdGIgXAorCWFtMzUxN19tdF92ZW50b3V4LmR0YiBcCiAJb21hcDM0MzAtc2RwLmR0YiBcCiAJb21hcDMtYmVhZ2xlLmR0YiBcCi0Jb21hcDMtY20tdDM1MTcuZHRiIFwKLQlvbWFwMy1zYmMtdDM1MTcuZHRiIFwKLQlvbWFwMy1jbS10MzUzMC5kdGIgXAotCW9tYXAzLXNiYy10MzUzMC5kdGIgXAotCW9tYXAzLWNtLXQzNzMwLmR0YiBcCi0Jb21hcDMtc2JjLXQzNzMwLmR0YiBcCi0Jb21hcDMtZGV2a2l0ODAwMC5kdGIgXAogCW9tYXAzLWJlYWdsZS14bS5kdGIgXAogCW9tYXAzLWJlYWdsZS14bS1hYi5kdGIgXAorCW9tYXAzLWNtLXQzNTE3LmR0YiBcCisJb21hcDMtY20tdDM1MzAuZHRiIFwKKwlvbWFwMy1jbS10MzczMC5kdGIgXAorCW9tYXAzLWRldmtpdDgwMDAuZHRiIFwKIAlvbWFwMy1ldm0uZHRiIFwKIAlvbWFwMy1ldm0tMzd4eC5kdGIgXAorCW9tYXAzLWd0YTA0LmR0YiBcCisJb21hcDMtaWdlcDAwMjAuZHRiIFwKKwlvbWFwMy1pZ2VwMDAzMC5kdGIgXAogCW9tYXAzLWxkcC5kdGIgXAorCW9tYXAzLWxpbGx5LWRiYjA1Ni5kdGIgXAogCW9tYXAzLW45MDAuZHRiIFwKIAlvbWFwMy1uOS5kdGIgXAogCW9tYXAzLW45NTAuZHRiIFwKIAlvbWFwMy1vdmVyby1hbHRvMzUuZHRiIFwKLQlvbWFwMy1vdmVyby1zdG9ybS1hbHRvMzUuZHRiIFwKIAlvbWFwMy1vdmVyby1jaGVzdG51dDQzLmR0YiBcCi0Jb21hcDMtb3Zlcm8tc3Rvcm0tY2hlc3RudXQ0My5kdGIgXAogCW9tYXAzLW92ZXJvLWdhbGxvcDQzLmR0YiBcCi0Jb21hcDMtb3Zlcm8tc3Rvcm0tZ2FsbG9wNDMuZHRiIFwKIAlvbWFwMy1vdmVyby1wYWxvNDMuZHRiIFwKKwlvbWFwMy1vdmVyby1zdG9ybS1hbHRvMzUuZHRiIFwKKwlvbWFwMy1vdmVyby1zdG9ybS1jaGVzdG51dDQzLmR0YiBcCisJb21hcDMtb3Zlcm8tc3Rvcm0tZ2FsbG9wNDMuZHRiIFwKIAlvbWFwMy1vdmVyby1zdG9ybS1wYWxvNDMuZHRiIFwKLQlvbWFwMy1vdmVyby1zdW1taXQuZHRiIFwKIAlvbWFwMy1vdmVyby1zdG9ybS1zdW1taXQuZHRiIFwKLQlvbWFwMy1vdmVyby10b2JpLmR0YiBcCiAJb21hcDMtb3Zlcm8tc3Rvcm0tdG9iaS5kdGIgXAotCW9tYXAzLWd0YTA0LmR0YiBcCi0Jb21hcDMtaWdlcDAwMjAuZHRiIFwKLQlvbWFwMy1pZ2VwMDAzMC5kdGIgXAotCW9tYXAzLWxpbGx5LWRiYjA1Ni5kdGIgXAotCW9tYXAzLXpvb20zLmR0YiBcCi0Jb21hcDQtZHVvdmVyby1wYXJsb3IuZHRiIFwKKwlvbWFwMy1vdmVyby1zdW1taXQuZHRiIFwKKwlvbWFwMy1vdmVyby10b2JpLmR0YiBcCisJb21hcDMtc2JjLXQzNTE3LmR0YiBcCisJb21hcDMtc2JjLXQzNTMwLmR0YiBcCisJb21hcDMtc2JjLXQzNzMwLmR0YiBcCisJb21hcDMtem9vbTMuZHRiCitkdGItJChDT05GSUdfU09DX0FNMzNYWCkgKz0gYW0zMzV4LWJhc2UwMDMzLmR0YiBcCisJYW0zMzV4LWJvbmUuZHRiIFwKKwlhbTMzNXgtYm9uZWJsYWNrLmR0YiBcCisJYW0zMzV4LWV2bS5kdGIgXAorCWFtMzM1eC1ldm1zay5kdGIgXAorCWFtMzM1eC1uYW5vLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfT01BUDQpICs9IG9tYXA0LWR1b3Zlcm8tcGFybG9yLmR0YiBcCiAJb21hcDQtcGFuZGEuZHRiIFwKIAlvbWFwNC1wYW5kYS1hNC5kdGIgXAogCW9tYXA0LXBhbmRhLWVzLmR0YiBcCi0Jb21hcDQtdmFyLXNvbS5kdGIgXAogCW9tYXA0LXNkcC5kdGIgXAogCW9tYXA0LXNkcC1lczIzcGx1cy5kdGIgXAotCW9tYXA1LXVldm0uZHRiIFwKLQlhbTMzNXgtZXZtLmR0YiBcCi0JYW0zMzV4LWV2bXNrLmR0YiBcCi0JYW0zMzV4LWJvbmUuZHRiIFwKLQlhbTMzNXgtYm9uZWJsYWNrLmR0YiBcCi0JYW0zMzV4LW5hbm8uZHRiIFwKLQlhbTMzNXgtYmFzZTAwMzMuZHRiIFwKLQlhbTM1MTctY3JhbmVib2FyZC5kdGIgXAotCWFtMzUxNy1ldm0uZHRiIFwKLQlhbTM1MTdfbXRfdmVudG91eC5kdGIgXAotCWFtNDN4LWVwb3MtZXZtLmR0YiBcCi0JYW00Mzd4LWdwLWV2bS5kdGIgXAotCWRyYTctZXZtLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfT1JJT041WCkgKz0gb3Jpb241eC1sYWNpZS1ldGhlcm5ldC1kaXNrLW1pbmktdjIuZHRiCisJb21hcDQtdmFyLWR2ay1vbTQ0LmR0YiBcCisJb21hcDQtdmFyLXN0ay1vbTQ0LmR0YgorZHRiLSQoQ09ORklHX1NPQ19BTTQzWFgpICs9IGFtNDN4LWVwb3MtZXZtLmR0YiBcCisJYW00Mzd4LWdwLWV2bS5kdGIKK2R0Yi0kKENPTkZJR19TT0NfT01BUDUpICs9IG9tYXA1LWNtLXQ1NC5kdGIgXAorCW9tYXA1LXNiYy10NTQuZHRiIFwKKwlvbWFwNS11ZXZtLmR0YgorZHRiLSQoQ09ORklHX1NPQ19EUkE3WFgpICs9IGRyYTctZXZtLmR0YiBcCisJZHJhNzItZXZtLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfT1JJT041WCkgKz0gb3Jpb241eC1sYWNpZS1kMi1uZXR3b3JrLmR0YiBcCisJb3Jpb241eC1sYWNpZS1ldGhlcm5ldC1kaXNrLW1pbmktdjIuZHRiIFwKKwlvcmlvbjV4LW1heHRvci1zaGFyZWQtc3RvcmFnZS0yLmR0YiBcCisJb3Jpb241eC1yZDg4ZjUxODItbmFzLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfUFJJTUEyKSArPSBwcmltYTItZXZiLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfUUNPTSkgKz0gcWNvbS1tc204NjYwLXN1cmYuZHRiIFwKLQlxY29tLW1zbTg5NjAtY2RwLmR0YiBcCi0JcWNvbS1hcHE4MDc0LWRyYWdvbmJvYXJkLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfUUNPTSkgKz0gXAorCXFjb20tYXBxODA2NC1pZmM2NDEwLmR0YiBcCisJcWNvbS1hcHE4MDc0LWRyYWdvbmJvYXJkLmR0YiBcCisJcWNvbS1hcHE4MDg0LW10cC5kdGIgXAorCXFjb20tbXNtODY2MC1zdXJmLmR0YiBcCisJcWNvbS1tc204OTYwLWNkcC5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1MzQzI0WFgpICs9IHMzYzI0MTYtc21kazI0MTYuZHRiCiBkdGItJChDT05GSUdfQVJDSF9TM0M2NFhYKSArPSBzM2M2NDEwLW1pbmk2NDEwLmR0YiBcCiAJczNjNjQxMC1zbWRrNjQxMC5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWSkgKz0gZW1ldjIta3ptOWQuZHRiIFwKLQlyN3M3MjEwMC1nZW5tYWkuZHRiIFwKLQlyN3M3MjEwMC1nZW5tYWktcmVmZXJlbmNlLmR0YiBcCitkdGItJChDT05GSUdfQVJDSF9TSE1PQklMRV9MRUdBQ1kpICs9IHI3czcyMTAwLWdlbm1haS5kdGIgXAogCXI4YTc3NDAtYXJtYWRpbGxvODAwZXZhLmR0YiBcCiAJcjhhNzc3OC1ib2Nrdy5kdGIgXAogCXI4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0YiBcCkBAIC0zMTQsMTIgKzMzNiwxNCBAQAogCXI4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRiIFwKIAlzaDczNzItbWFja2VyZWwuZHRiCiBkdGItJChDT05GSUdfQVJDSF9TSE1PQklMRV9NVUxUSSkgKz0gZW1ldjIta3ptOWQuZHRiIFwKLQlyN3M3MjEwMC1nZW5tYWktcmVmZXJlbmNlLmR0YiBcCisJcjdzNzIxMDAtZ2VubWFpLmR0YiBcCisJcjhhNzc5MS1oZW5uaW5nZXIuZHRiIFwKIAlyOGE3NzkxLWtvZWxzY2guZHRiIFwKIAlyOGE3NzkwLWxhZ2VyLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfU09DRlBHQSkgKz0gc29jZnBnYV9hcnJpYTVfc29jZGsuZHRiIFwKIAlzb2NmcGdhX2N5Y2xvbmU1X3NvY2RrLmR0YiBcCiAJc29jZnBnYV9jeWNsb25lNV9zb2NraXQuZHRiIFwKKwlzb2NmcGdhX2N5Y2xvbmU1X3NvY3JhdGVzLmR0YiBcCiAJc29jZnBnYV92dC5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1NQRUFSMTNYWCkgKz0gc3BlYXIxMzEwLWV2Yi5kdGIgXAogCXNwZWFyMTM0MC1ldmIuZHRiCkBAIC0zMjgsMjQgKzM1MiwzMyBAQAogCXNwZWFyMzIwLWV2Yi5kdGIgXAogCXNwZWFyMzIwLWhtaS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1NQRUFSNlhYKSs9IHNwZWFyNjAwLWV2Yi5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX1NUSSkrPSBzdGloNDE1LWIyMDAwLmR0YiBcCi0Jc3RpaDQxNi1iMjAwMC5kdGIgXAorZHRiLSQoQ09ORklHX0FSQ0hfU1RJKSs9IHN0aWg0MDctYjIxMjAuZHRiIFwKKwlzdGloNDE1LWIyMDAwLmR0YiBcCiAJc3RpaDQxNS1iMjAyMC5kdGIgXAotCXN0aWg0MTYtYjIwMjAuZHRiCi1kdGItJChDT05GSUdfQVJDSF9TVU5YSSkgKz0gXAorCXN0aWg0MTYtYjIwMDAuZHRiIFwKKwlzdGloNDE2LWIyMDIwLmR0YiBcCisJc3RpaDQxNi1iMjAyMC1yZXZFLmR0YgorZHRiLSQoQ09ORklHX01BQ0hfU1VONEkpICs9IFwKIAlzdW40aS1hMTAtYTEwMDAuZHRiIFwKIAlzdW40aS1hMTAtY3ViaWVib2FyZC5kdGIgXAogCXN1bjRpLWExMC1taW5pLXhwbHVzLmR0YiBcCiAJc3VuNGktYTEwLWhhY2tiZXJyeS5kdGIgXAogCXN1bjRpLWExMC1pbmV0OTdmdjIuZHRiIFwKIAlzdW40aS1hMTAtb2xpbnV4aW5vLWxpbWUuZHRiIFwKLQlzdW40aS1hMTAtcGNkdWluby5kdGIgXAorCXN1bjRpLWExMC1wY2R1aW5vLmR0YgorZHRiLSQoQ09ORklHX01BQ0hfU1VONUkpICs9IFwKIAlzdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdGIgXAorCXN1bjVpLWExMHMtcjctdHYtZG9uZ2xlLmR0YiBcCiAJc3VuNWktYTEzLW9saW51eGluby5kdGIgXAotCXN1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRiIFwKKwlzdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0YgorZHRiLSQoQ09ORklHX01BQ0hfU1VONkkpICs9IFwKKwlzdW42aS1hMzEtYXBwNC1ldmIxLmR0YiBcCiAJc3VuNmktYTMxLWNvbG9tYnVzLmR0YiBcCisJc3VuNmktYTMxLW05LmR0YgorZHRiLSQoQ09ORklHX01BQ0hfU1VON0kpICs9IFwKIAlzdW43aS1hMjAtY3ViaWVib2FyZDIuZHRiIFwKIAlzdW43aS1hMjAtY3ViaWV0cnVjay5kdGIgXAorCXN1bjdpLWEyMC1pMTItdHZib3guZHRiIFwKIAlzdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfVEVHUkEpICs9IHRlZ3JhMjAtaGFybW9ueS5kdGIgXAogCXRlZ3JhMjAtaXJpcy01MTIuZHRiIFwKQEAgLTM2MCw3ICszOTMsMTEgQEAKIAl0ZWdyYTMwLWJlYXZlci5kdGIgXAogCXRlZ3JhMzAtY2FyZGh1LWEwMi5kdGIgXAogCXRlZ3JhMzAtY2FyZGh1LWEwNC5kdGIgXAorCXRlZ3JhMzAtY29saWJyaS1ldmFsLXYzLmR0YiBcCiAJdGVncmExMTQtZGFsbW9yZS5kdGIgXAorCXRlZ3JhMTE0LXJvdGguZHRiIFwKKwl0ZWdyYTExNC10bjcuZHRiIFwKKwl0ZWdyYTEyNC1qZXRzb24tdGsxLmR0YiBcCiAJdGVncmExMjQtdmVuaWNlMi5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1UzMDApICs9IHN0ZS11MzAwLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfVTg1MDApICs9IHN0ZS1zbm93YmFsbC5kdGIgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWJvbmUtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtYm9uZS1jb21tb24uZHRzaQppbmRleCAyZTdkOTMyLi5iZGUxNzc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtYm9uZS1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtYm9uZS1jb21tb24uZHRzaQpAQCAtMTgyLDMxICsxODIsMzEgQEAKIAogJnVzYiB7CiAJc3RhdHVzID0gIm9rYXkiOworfTsKIAotCWNvbnRyb2xANDRlMTA2MjAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZ1c2JfY3RybF9tb2QgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2ItcGh5QDQ3NDAxMzAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismdXNiMF9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2ItcGh5QDQ3NDAxYjAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismdXNiMV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2JANDc0MDEwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZ1c2IwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwogCi0JdXNiQDQ3NDAxODAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlkcl9tb2RlID0gImhvc3QiOwotCX07CismdXNiMSB7CisJc3RhdHVzID0gIm9rYXkiOworCWRyX21vZGUgPSAiaG9zdCI7Cit9OwogCi0JZG1hLWNvbnRyb2xsZXJANDc0MDIwMDAgIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismY3BwaTQxZG1hICB7CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmkyYzAgewpAQCAtMjgwLDEzICsyODAsMTQgQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOwogCXBpbmN0cmwtMCA9IDwmY3Bzd19kZWZhdWx0PjsKIAlwaW5jdHJsLTEgPSA8JmNwc3dfc2xlZXA+OwotCisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmRhdmluY2lfbWRpbyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKIAlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKIAlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJm1tYzEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWJvbmVibGFjay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtYm9uZWJsYWNrLmR0cwppbmRleCA2YjcxYWQ5Li4zMDU5NzVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtYm9uZWJsYWNrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtYm9uZWJsYWNrLmR0cwpAQCAtMjYsNyArMjYsNiBAQAogCXBpbmN0cmwtMCA9IDwmZW1tY19waW5zPjsKIAlidXMtd2lkdGggPSA8OD47CiAJc3RhdHVzID0gIm9rYXkiOwotCXRpLHZjYy1hdXgtZGlzYWJsZS1pcy1zbGVlcDsKIH07CiAKICZhbTMzeHhfcGlubXV4IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWV2bS5kdHMKaW5kZXggNjAyODIxNy4uZWNiMjY3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWV2bS5kdHMKQEAgLTI2OCwzNCArMjY4LDM0IEBACiAKIAlsY2RfcGluc19zMDogbGNkX3BpbnNfczAgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgyMCAweDAxCS8qIGdwbWNfYWQ4LmxjZF9kYXRhMTYsIE9VVFBVVCB8IE1PREUxICovCi0JCQkweDI0IDB4MDEJLyogZ3BtY19hZDkubGNkX2RhdGExNywgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4MjggMHgwMQkvKiBncG1jX2FkMTAubGNkX2RhdGExOCwgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4MmMgMHgwMQkvKiBncG1jX2FkMTEubGNkX2RhdGExOSwgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4MzAgMHgwMQkvKiBncG1jX2FkMTIubGNkX2RhdGEyMCwgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4MzQgMHgwMQkvKiBncG1jX2FkMTMubGNkX2RhdGEyMSwgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4MzggMHgwMQkvKiBncG1jX2FkMTQubGNkX2RhdGEyMiwgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4M2MgMHgwMQkvKiBncG1jX2FkMTUubGNkX2RhdGEyMywgT1VUUFVUIHwgTU9ERTEgKi8KLQkJCTB4YTAgMHgwMAkvKiBsY2RfZGF0YTAubGNkX2RhdGEwLCBPVVRQVVQgfCBNT0RFMCAqLwotCQkJMHhhNCAweDAwCS8qIGxjZF9kYXRhMS5sY2RfZGF0YTEsIE9VVFBVVCB8IE1PREUwICovCi0JCQkweGE4IDB4MDAJLyogbGNkX2RhdGEyLmxjZF9kYXRhMiwgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4YWMgMHgwMAkvKiBsY2RfZGF0YTMubGNkX2RhdGEzLCBPVVRQVVQgfCBNT0RFMCAqLwotCQkJMHhiMCAweDAwCS8qIGxjZF9kYXRhNC5sY2RfZGF0YTQsIE9VVFBVVCB8IE1PREUwICovCi0JCQkweGI0IDB4MDAJLyogbGNkX2RhdGE1LmxjZF9kYXRhNSwgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4YjggMHgwMAkvKiBsY2RfZGF0YTYubGNkX2RhdGE2LCBPVVRQVVQgfCBNT0RFMCAqLwotCQkJMHhiYyAweDAwCS8qIGxjZF9kYXRhNy5sY2RfZGF0YTcsIE9VVFBVVCB8IE1PREUwICovCi0JCQkweGMwIDB4MDAJLyogbGNkX2RhdGE4LmxjZF9kYXRhOCwgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4YzQgMHgwMAkvKiBsY2RfZGF0YTkubGNkX2RhdGE5LCBPVVRQVVQgfCBNT0RFMCAqLwotCQkJMHhjOCAweDAwCS8qIGxjZF9kYXRhMTAubGNkX2RhdGExMCwgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4Y2MgMHgwMAkvKiBsY2RfZGF0YTExLmxjZF9kYXRhMTEsIE9VVFBVVCB8IE1PREUwICovCi0JCQkweGQwIDB4MDAJLyogbGNkX2RhdGExMi5sY2RfZGF0YTEyLCBPVVRQVVQgfCBNT0RFMCAqLwotCQkJMHhkNCAweDAwCS8qIGxjZF9kYXRhMTMubGNkX2RhdGExMywgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4ZDggMHgwMAkvKiBsY2RfZGF0YTE0LmxjZF9kYXRhMTQsIE9VVFBVVCB8IE1PREUwICovCi0JCQkweGRjIDB4MDAJLyogbGNkX2RhdGExNS5sY2RfZGF0YTE1LCBPVVRQVVQgfCBNT0RFMCAqLwotCQkJMHhlMCAweDAwCS8qIGxjZF92c3luYy5sY2RfdnN5bmMsIE9VVFBVVCB8IE1PREUwICovCi0JCQkweGU0IDB4MDAJLyogbGNkX2hzeW5jLmxjZF9oc3luYywgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4ZTggMHgwMAkvKiBsY2RfcGNsay5sY2RfcGNsaywgT1VUUFVUIHwgTU9ERTAgKi8KLQkJCTB4ZWMgMHgwMAkvKiBsY2RfYWNfYmlhc19lbi5sY2RfYWNfYmlhc19lbiwgT1VUUFVUIHwgTU9ERTAgKi8KKwkJCTB4MjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTEpCQkvKiBncG1jX2FkOC5sY2RfZGF0YTIzICovCisJCQkweDI0IChQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkJLyogZ3BtY19hZDkubGNkX2RhdGEyMiAqLworCQkJMHgyOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJCS8qIGdwbWNfYWQxMC5sY2RfZGF0YTIxICovCisJCQkweDJjIChQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkJLyogZ3BtY19hZDExLmxjZF9kYXRhMjAgKi8KKwkJCTB4MzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTEpCQkvKiBncG1jX2FkMTIubGNkX2RhdGExOSAqLworCQkJMHgzNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJCS8qIGdwbWNfYWQxMy5sY2RfZGF0YTE4ICovCisJCQkweDM4IChQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkJLyogZ3BtY19hZDE0LmxjZF9kYXRhMTcgKi8KKwkJCTB4M2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTEpCQkvKiBncG1jX2FkMTUubGNkX2RhdGExNiAqLworCQkJMHhhMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIGxjZF9kYXRhMC5sY2RfZGF0YTAgKi8KKwkJCTB4YTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTEubGNkX2RhdGExICovCisJCQkweGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogbGNkX2RhdGEyLmxjZF9kYXRhMiAqLworCQkJMHhhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIGxjZF9kYXRhMy5sY2RfZGF0YTMgKi8KKwkJCTB4YjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTQubGNkX2RhdGE0ICovCisJCQkweGI0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogbGNkX2RhdGE1LmxjZF9kYXRhNSAqLworCQkJMHhiOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIGxjZF9kYXRhNi5sY2RfZGF0YTYgKi8KKwkJCTB4YmMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTcubGNkX2RhdGE3ICovCisJCQkweGMwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogbGNkX2RhdGE4LmxjZF9kYXRhOCAqLworCQkJMHhjNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIGxjZF9kYXRhOS5sY2RfZGF0YTkgKi8KKwkJCTB4YzggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTEwLmxjZF9kYXRhMTAgKi8KKwkJCTB4Y2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTExLmxjZF9kYXRhMTEgKi8KKwkJCTB4ZDAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTEyLmxjZF9kYXRhMTIgKi8KKwkJCTB4ZDQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTEzLmxjZF9kYXRhMTMgKi8KKwkJCTB4ZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTE0LmxjZF9kYXRhMTQgKi8KKwkJCTB4ZGMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfZGF0YTE1LmxjZF9kYXRhMTUgKi8KKwkJCTB4ZTAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBsY2RfdnN5bmMubGNkX3ZzeW5jICovCisJCQkweGU0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogbGNkX2hzeW5jLmxjZF9oc3luYyAqLworCQkJMHhlOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIGxjZF9wY2xrLmxjZF9wY2xrICovCisJCQkweGVjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogbGNkX2FjX2JpYXNfZW4ubGNkX2FjX2JpYXNfZW4gKi8KIAkJPjsKIAl9OwogCkBAIC0zMzAsMzEgKzMzMCwzMSBAQAogCiAmdXNiIHsKIAlzdGF0dXMgPSAib2theSI7Cit9OwogCi0JY29udHJvbEA0NGUxMDYyMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworJnVzYl9jdHJsX21vZCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKIAotCXVzYi1waHlANDc0MDEzMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZ1c2IwX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKIAotCXVzYi1waHlANDc0MDFiMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZ1c2IxX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKIAotCXVzYkA0NzQwMTAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworJnVzYjAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2JANDc0MDE4MDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCWRyX21vZGUgPSAiaG9zdCI7Ci0JfTsKKyZ1c2IxIHsKKwlzdGF0dXMgPSAib2theSI7CisJZHJfbW9kZSA9ICJob3N0IjsKK307CiAKLQlkbWEtY29udHJvbGxlckA0NzQwMjAwMCAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZjcHBpNDFkbWEgIHsKKwlzdGF0dXMgPSAib2theSI7CiB9OwogCiAmaTJjMSB7CkBAIC02MTQsMTIgKzYxNCwxNCBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CiAJcGluY3RybC0wID0gPCZjcHN3X2RlZmF1bHQ+OwogCXBpbmN0cmwtMSA9IDwmY3Bzd19zbGVlcD47CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmRhdmluY2lfbWRpbyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKIAlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKIAlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmNwc3dfZW1hYzAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWV2bXNrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm1zay5kdHMKaW5kZXggYWIyMzg4NS4uYWI5YTM0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWV2bXNrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtc2suZHRzCkBAIC01Nyw2ICs1NywxNyBAQAogCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJfTsKIAorCXZ0dF9maXhlZDogZml4ZWRyZWd1bGF0b3JAMyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidnR0IjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQlncGlvID0gPCZncGlvMCA3IEdQSU9fQUNUSVZFX0hJR0g+OworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCX07CisKIAlsZWRzIHsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZ1c2VyX2xlZHNfczA+OwpAQCAtMzYzLDMxICszNzQsMzEgQEAKIAogJnVzYiB7CiAJc3RhdHVzID0gIm9rYXkiOworfTsKIAotCWNvbnRyb2xANDRlMTA2MjAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZ1c2JfY3RybF9tb2QgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2ItcGh5QDQ3NDAxMzAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismdXNiMF9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2ItcGh5QDQ3NDAxYjAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismdXNiMV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQl1c2JANDc0MDEwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKKyZ1c2IwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwogCi0JdXNiQDQ3NDAxODAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlkcl9tb2RlID0gImhvc3QiOwotCX07CismdXNiMSB7CisJc3RhdHVzID0gIm9rYXkiOworCWRyX21vZGUgPSAiaG9zdCI7Cit9OwogCi0JZG1hLWNvbnRyb2xsZXJANDc0MDIwMDAgIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismY3BwaTQxZG1hICB7CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmVwd21zczIgewpAQCAtNDg0LDEyICs0OTUsMTQgQEAKIAlwaW5jdHJsLTAgPSA8JmNwc3dfZGVmYXVsdD47CiAJcGluY3RybC0xID0gPCZjcHN3X3NsZWVwPjsKIAlkdWFsX2VtYWMgPSA8MT47CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmRhdmluY2lfbWRpbyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKIAlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKIAlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmNwc3dfZW1hYzAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtaWdlcDAwMzMuZHRzaQppbmRleCA5ZjIyYzE4Li44YTBhNzJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtaWdlcDAwMzMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtaWdlcDAwMzMuZHRzaQpAQCAtOTUsNiArOTUsMTQgQEAKIAl9OwogfTsKIAorJm1hYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmRhdmluY2lfbWRpbyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmNwc3dfZW1hYzAgewogCXBoeV9pZCA9IDwmZGF2aW5jaV9tZGlvPiwgPDA+OwogfTsKQEAgLTIwMCwzMSArMjA4LDMxIEBACiAKICZ1c2IgewogCXN0YXR1cyA9ICJva2F5IjsKK307CiAKLQljb250cm9sQDQ0ZTEwNjIwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismdXNiX2N0cmxfbW9kIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwogCi0JdXNiLXBoeUA0NzQwMTMwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworJnVzYjBfcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwogCi0JdXNiLXBoeUA0NzQwMWIwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworJnVzYjFfcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwogCi0JdXNiQDQ3NDAxMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07CismdXNiMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKIAotCXVzYkA0NzQwMTgwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQkJZHJfbW9kZSA9ICJob3N0IjsKLQl9OworJnVzYjEgeworCXN0YXR1cyA9ICJva2F5IjsKKwlkcl9tb2RlID0gImhvc3QiOworfTsKIAotCWRtYS1jb250cm9sbGVyQDQ3NDAyMDAwICB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworJmNwcGk0MWRtYSAgeworCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICNpbmNsdWRlICJ0cHM2NTkxMC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LW5hbm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LW5hbm8uZHRzCmluZGV4IDk5MDdiNDkuLmEzNDY2NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1uYW5vLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtbmFuby5kdHMKQEAgLTM0NCw2ICszNDQsMTEgQEAKIAogJm1hYyB7CiAJZHVhbF9lbWFjID0gPDE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZkYXZpbmNpX21kaW8geworCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZjcHN3X2VtYWMwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC1jbG9ja3MuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC1jbG9ja3MuZHRzaQppbmRleCA5Y2NmZTUwLi43MTJlZGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTMzeHgtY2xvY2tzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LWNsb2Nrcy5kdHNpCkBAIC05Niw0NyArOTYsMjkgQEAKIAkJY2xvY2stZGl2ID0gPDE+OwogCX07CiAKLQllaHJwd20wX2dhdGVfdGJjbGs6IGVocnB3bTBfZ2F0ZV90YmNsayB7CisJZWhycHdtMF90YmNsazogZWhycHdtMF90YmNsa0A0NGUxMDY2NCB7CiAJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbm8td2FpdC1nYXRlLWNsb2NrIjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3Blcl9tMl9jaz47CiAJCXRpLGJpdC1zaGlmdCA9IDwwPjsKIAkJcmVnID0gPDB4MDY2ND47CiAJfTsKIAotCWVocnB3bTBfdGJjbGs6IGVocnB3bTBfdGJjbGsgeworCWVocnB3bTFfdGJjbGs6IGVocnB3bTFfdGJjbGtANDRlMTA2NjQgewogCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZlaHJwd20wX2dhdGVfdGJjbGs+OwotCX07Ci0KLQllaHJwd20xX2dhdGVfdGJjbGs6IGVocnB3bTFfZ2F0ZV90YmNsayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbm8td2FpdC1nYXRlLWNsb2NrIjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3Blcl9tMl9jaz47CiAJCXRpLGJpdC1zaGlmdCA9IDwxPjsKIAkJcmVnID0gPDB4MDY2ND47CiAJfTsKIAotCWVocnB3bTFfdGJjbGs6IGVocnB3bTFfdGJjbGsgeworCWVocnB3bTJfdGJjbGs6IGVocnB3bTJfdGJjbGtANDRlMTA2NjQgewogCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZlaHJwd20xX2dhdGVfdGJjbGs+OwotCX07Ci0KLQllaHJwd20yX2dhdGVfdGJjbGs6IGVocnB3bTJfZ2F0ZV90YmNsayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbm8td2FpdC1nYXRlLWNsb2NrIjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3Blcl9tMl9jaz47CiAJCXRpLGJpdC1zaGlmdCA9IDwyPjsKIAkJcmVnID0gPDB4MDY2ND47CiAJfTsKLQotCWVocnB3bTJfdGJjbGs6IGVocnB3bTJfdGJjbGsgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZlaHJwd20yX2dhdGVfdGJjbGs+OwotCX07CiB9OwogJnByY21fY2xvY2tzIHsKIAljbGtfMzI3NjhfY2s6IGNsa18zMjc2OF9jayB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpCmluZGV4IDdhZDc1YjQuLjlmNTNlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpCkBAIC0xNDcsOSArMTQ3LDYgQEAKIAkJCQk8MHg0NGUxMGY5MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MTIgMTMgMTQ+OwogCQkJI2RtYS1jZWxscyA9IDwxPjsKLQkJCWRtYS1jaGFubmVscyA9IDw2ND47Ci0JCQl0aSxlZG1hLXJlZ2lvbnMgPSA8ND47Ci0JCQl0aSxlZG1hLXNsb3RzID0gPDI1Nj47CiAJCX07CiAKIAkJZ3BpbzA6IGdwaW9ANDRlMDcwMDAgewpAQCAtNjg4LDYgKzY4NSw3IEBACiAJCQkgKi8KIAkJCWludGVycnVwdHMgPSA8NDAgNDEgNDIgNDM+OwogCQkJcmFuZ2VzOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAogCQkJZGF2aW5jaV9tZGlvOiBtZGlvQDRhMTAxMDAwIHsKIAkJCQljb21wYXRpYmxlID0gInRpLGRhdmluY2lfbWRpbyI7CkBAIC02OTYsNiArNjk0LDcgQEAKIAkJCQl0aSxod21vZHMgPSAiZGF2aW5jaV9tZGlvIjsKIAkJCQlidXNfZnJlcSA9IDwxMDAwMDAwPjsKIAkJCQlyZWcgPSA8MHg0YTEwMTAwMCAweDEwMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKIAkJCWNwc3dfZW1hYzA6IHNsYXZlQDRhMTAwMjAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kKaW5kZXggZDFmODcwNy4uNzk0YzczZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kKQEAgLTY3LDExICs2NywxNSBAQAogCX07CiAKIAlvY3AgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQljb21wYXRpYmxlID0gInRpLGFtNDM3Mi1sMy1ub2MiLCAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzOwogCQl0aSxod21vZHMgPSAibDNfbWFpbiI7CisJCXJlZyA9IDwweDQ0MDAwMDAwIDB4NDAwMDAwCisJCSAgICAgICAweDQ0ODAwMDAwIDB4NDAwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCiAJCXByY206IHByY21ANDRkZjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTQtcHJjbSI7CkBAIC0xMDgsOSArMTEyLDYgQEAKIAkJCQkJPEdJQ19TUEkgMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJCTxHSUNfU1BJIDE0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJI2RtYS1jZWxscyA9IDwxPjsKLQkJCWRtYS1jaGFubmVscyA9IDw2ND47Ci0JCQl0aSxlZG1hLXJlZ2lvbnMgPSA8ND47Ci0JCQl0aSxlZG1hLXNsb3RzID0gPDI1Nj47CiAJCX07CiAKIAkJdWFydDA6IHNlcmlhbEA0NGUwOTAwMCB7CkBAIC01MjEsNiArNTIyLDEyIEBACiAJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJfTsKKworCQkJcGh5X3NlbDogY3Bzdy1waHktc2VsQDQ0ZTEwNjUwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLGFtNDN4eC1jcHN3LXBoeS1zZWwiOworCQkJCXJlZz0gPDB4NDRlMTA2NTAgMHg0PjsKKwkJCQlyZWctbmFtZXMgPSAiZ21paS1zZWwiOworCQkJfTsKIAkJfTsKIAogCQllcHdtc3MwOiBlcHdtc3NANDgzMDAwMDAgewpAQCAtNzM1LDYgKzc0MiwxMjEgQEAKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKKworCQlhbTQzeHhfY29udHJvbF91c2IycGh5MTogY29udHJvbC1waHlANDRlMTA2MjAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxjb250cm9sLXBoeS11c2IyLWFtNDM3IjsKKwkJCXJlZyA9IDwweDQ0ZTEwNjIwIDB4ND47CisJCQlyZWctbmFtZXMgPSAicG93ZXIiOworCQl9OworCisJCWFtNDN4eF9jb250cm9sX3VzYjJwaHkyOiBjb250cm9sLXBoeUAweDQ0ZTEwNjI4IHsKKwkJCWNvbXBhdGlibGUgPSAidGksY29udHJvbC1waHktdXNiMi1hbTQzNyI7CisJCQlyZWcgPSA8MHg0NGUxMDYyOCAweDQ+OworCQkJcmVnLW5hbWVzID0gInBvd2VyIjsKKwkJfTsKKworCQlvY3Ayc2NwMDogb2NwMnNjcEA0ODNhODAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLG9tYXAtb2NwMnNjcCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCQkJdGksaHdtb2RzID0gIm9jcDJzY3AwIjsKKworCQkJdXNiMl9waHkxOiBwaHlANDgzYTgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAidGksYW00Mzd4LXVzYjIiOworCQkJCXJlZyA9IDwweDQ4M2E4MDAwIDB4ODAwMD47CisJCQkJY3RybC1tb2R1bGUgPSA8JmFtNDN4eF9jb250cm9sX3VzYjJwaHkxPjsKKwkJCQljbG9ja3MgPSA8JnVzYl9waHkwX2Fsd2F5c19vbl9jbGszMms+LAorCQkJCQkgPCZ1c2Jfb3RnX3NzMF9yZWZjbGs5NjBtPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ3a3VwY2xrIiwgInJlZmNsayI7CisJCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJfTsKKworCQlvY3Ayc2NwMTogb2NwMnNjcEA0ODNlODAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLG9tYXAtb2NwMnNjcCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCQkJdGksaHdtb2RzID0gIm9jcDJzY3AxIjsKKworCQkJdXNiMl9waHkyOiBwaHlANDgzZTgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAidGksYW00Mzd4LXVzYjIiOworCQkJCXJlZyA9IDwweDQ4M2U4MDAwIDB4ODAwMD47CisJCQkJY3RybC1tb2R1bGUgPSA8JmFtNDN4eF9jb250cm9sX3VzYjJwaHkyPjsKKwkJCQljbG9ja3MgPSA8JnVzYl9waHkxX2Fsd2F5c19vbl9jbGszMms+LAorCQkJCQkgPCZ1c2Jfb3RnX3NzMV9yZWZjbGs5NjBtPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ3a3VwY2xrIiwgInJlZmNsayI7CisJCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJfTsKKworCQlkd2MzXzE6IG9tYXBfZHdjM0A0ODM4MDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtNDM3eC1kd2MzIjsKKwkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMCI7CisJCQlyZWcgPSA8MHg0ODM4MDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJdXRtaS1tb2RlID0gPDE+OworCQkJcmFuZ2VzOworCisJCQl1c2IxOiB1c2JANDgzOTAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic3lub3BzeXMsZHdjMyI7CisJCQkJcmVnID0gPDB4NDgzOTAwMDAgMHgxNzAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQlwaHlzID0gPCZ1c2IyX3BoeTE+OworCQkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSI7CisJCQkJbWF4aW11bS1zcGVlZCA9ICJoaWdoLXNwZWVkIjsKKwkJCQlkcl9tb2RlID0gIm90ZyI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJZHdjM18yOiBvbWFwX2R3YzNANDgzYzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTQzN3gtZHdjMyI7CisJCQl0aSxod21vZHMgPSAidXNiX290Z19zczEiOworCQkJcmVnID0gPDB4NDgzYzAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXV0bWktbW9kZSA9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJdXNiMjogdXNiQDQ4M2QwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInN5bm9wc3lzLGR3YzMiOworCQkJCXJlZyA9IDwweDQ4M2QwMDAwIDB4MTcwMDA+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJcGh5cyA9IDwmdXNiMl9waHkyPjsKKwkJCQlwaHktbmFtZXMgPSAidXNiMi1waHkiOworCQkJCW1heGltdW0tc3BlZWQgPSAiaGlnaC1zcGVlZCI7CisJCQkJZHJfbW9kZSA9ICJvdGciOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCXFzcGk6IHFzcGlANDc5MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTQzNzItcXNwaSI7CisJCQlyZWcgPSA8MHg0NzkwMDAwMCAweDEwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJdGksaHdtb2RzID0gInFzcGkiOworCQkJaW50ZXJydXB0cyA9IDwwIDEzOCAweDQ+OworCQkJbnVtLWNzID0gPDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQloZHE6IGhkcUA0ODM0NzAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtNDN4eC1oZHEiOworCQkJcmVnID0gPDB4NDgzNDcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmZ1bmNfMTJtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJdGksaHdtb2RzID0gImhkcTF3IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3eC1ncC1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00Mzd4LWdwLWV2bS5kdHMKaW5kZXggYTA1NWY3Zi4uYzI1ZDE1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00Mzd4LWdwLWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00Mzd4LWdwLWV2bS5kdHMKQEAgLTI3LDYgKzI3LDE3IEBACiAJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAl9OwogCisJdnR0X2ZpeGVkOiBmaXhlZHJlZ3VsYXRvci12dHQgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZ0dF9maXhlZCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmZ3BpbzUgNyBHUElPX0FDVElWRV9ISUdIPjsKKwl9OworCiAJYmFja2xpZ2h0IHsKIAkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKIAkJcHdtcyA9IDwmZWNhcDAgMCA1MDAwMCBQV01fUE9MQVJJVFlfSU5WRVJURUQ+OwpAQCAtODEsNiArOTIsODUgQEAKIAkJCTB4MTY0IE1VWF9NT0RFMCAgICAgICAvKiBlQ0FQMF9pbl9QV00wX291dC5lQ0FQMF9pbl9QV00wX291dCBNT0RFMCAqLwogCQk+OwogCX07CisKKwlwaXhjaXJfdHNfcGluczogcGl4Y2lyX3RzX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyNjQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTcpICAvKiBzcGkyX2QwLmdwaW8zXzIyICovCisJCT47CisJfTsKKworCWNwc3dfZGVmYXVsdDogY3Bzd19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCS8qIFNsYXZlIDEgKi8KKwkJCTB4MTE0IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3R4ZW4ucmdtaWkxX3R4ZW4gKi8KKwkJCTB4MTE4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTIpCS8qIG1paTFfcnhkdi5yZ21paTFfcnhjdGwgKi8KKwkJCTB4MTFjIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3R4ZDEucmdtaWkxX3R4ZDMgKi8KKwkJCTB4MTIwIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3R4ZDAucmdtaWkxX3R4ZDIgKi8KKwkJCTB4MTI0IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3R4ZDEucmdtaWkxX3R4ZDEgKi8KKwkJCTB4MTI4IChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3R4ZDAucmdtaWkxX3R4ZDAgKi8KKwkJCTB4MTJjIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3R4Y2xrLnJtaWkxX3RjbGsgKi8KKwkJCTB4MTMwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTIpCS8qIG1paTFfcnhjbGsucm1paTFfcmNsayAqLworCQkJMHgxMzQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMikJLyogbWlpMV9yeGQxLnJnbWlpMV9yeGQzICovCisJCQkweDEzOCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUyKQkvKiBtaWkxX3J4ZDAucmdtaWkxX3J4ZDIgKi8KKwkJCTB4MTNjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTIpCS8qIG1paTFfcnhkMS5yZ21paTFfcnhkMSAqLworCQkJMHgxNDAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMikJLyogbWlpMV9yeGQwLnJnbWlpMV9yeGQwICovCisJCT47CisJfTsKKworCWNwc3dfc2xlZXA6IGNwc3dfc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMSByZXNldCB2YWx1ZSAqLworCQkJMHgxMTQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJCTB4MTE4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCisJCQkweDExYyAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQorCQkJMHgxMjAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJCTB4MTI0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCisJCQkweDEyOCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQorCQkJMHgxMmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJCTB4MTMwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCisJCQkweDEzNCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQorCQkJMHgxMzggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJCTB4MTNjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCisJCQkweDE0MCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQorCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fZGVmYXVsdDogZGF2aW5jaV9tZGlvX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogTURJTyAqLworCQkJMHgxNDggKFBJTl9JTlBVVF9QVUxMVVAgfCBTTEVXQ1RSTF9GQVNUIHwgTVVYX01PREUwKQkvKiBtZGlvX2RhdGEubWRpb19kYXRhICovCisJCQkweDE0YyAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkJLyogbWRpb19jbGsubWRpb19jbGsgKi8KKwkJPjsKKwl9OworCisJZGF2aW5jaV9tZGlvX3NsZWVwOiBkYXZpbmNpX21kaW9fc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogTURJTyByZXNldCB2YWx1ZSAqLworCQkJMHgxNDggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJCTB4MTRjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCisJCT47CisJfTsKKworCW5hbmRfZmxhc2hfeDg6IG5hbmRfZmxhc2hfeDggeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyNmMoUElOX09VVFBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogc3BpMl9jczAuZ3Bpby9lTU1Db3JOQU5Ec2VsICovCisJCQkweDAgIChQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkMC5ncG1jX2FkMCAqLworCQkJMHg0ICAoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDEuZ3BtY19hZDEgKi8KKwkJCTB4OCAgKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQyLmdwbWNfYWQyICovCisJCQkweGMgIChQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkMy5ncG1jX2FkMyAqLworCQkJMHgxMCAoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDQuZ3BtY19hZDQgKi8KKwkJCTB4MTQgKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQ1LmdwbWNfYWQ1ICovCisJCQkweDE4IChQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkNi5ncG1jX2FkNiAqLworCQkJMHgxYyAoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDcuZ3BtY19hZDcgKi8KKwkJCTB4NzAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGdwbWNfd2FpdDAuZ3BtY193YWl0MCAqLworCQkJMHg3NCAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTcpCS8qIGdwbWNfd3BuLmdwbWNfd3BuICovCisJCQkweDdjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogZ3BtY19jc24wLmdwbWNfY3NuMCAgKi8KKwkJCTB4OTAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBncG1jX2Fkdm5fYWxlLmdwbWNfYWR2bl9hbGUgKi8KKwkJCTB4OTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBncG1jX29lbl9yZW4uZ3BtY19vZW5fcmVuICovCisJCQkweDk4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogZ3BtY193ZW4uZ3BtY193ZW4gKi8KKwkJCTB4OWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiBncG1jX2JlMG5fY2xlLmdwbWNfYmUwbl9jbGUgKi8KKwkJPjsKKwl9OwogfTsKIAogJmkyYzAgewpAQCAtOTMsNiArMTgzLDIwIEBACiAgICAgICAgIHN0YXR1cyA9ICJva2F5IjsKICAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKICAgICAgICAgcGluY3RybC0wID0gPCZpMmMxX3BpbnM+OworCisJcGl4Y2lyX3RzQDVjIHsKKwkJY29tcGF0aWJsZSA9ICJwaXhjaXIscGl4Y2lyX3RhbmdvYyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGl4Y2lyX3RzX3BpbnM+OworCQlyZWcgPSA8MHg1Yz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8zPjsKKwkJaW50ZXJydXB0cyA9IDwyMiAwPjsKKworCQlhdHRiLWdwaW8gPSA8JmdwaW8zIDIyIEdQSU9fQUNUSVZFX0hJR0g+OworCisJCXgtc2l6ZSA9IDwxMDI0PjsKKwkJeS1zaXplID0gPDYwMD47CisJfTsKIH07CiAKICZlcHdtc3MwIHsKQEAgLTEzMCwzICsyMzQsMTI4IEBACiAJcGluY3RybC0wID0gPCZtbWMxX3BpbnM+OwogCWNkLWdwaW9zID0gPCZncGlvMCA2IEdQSU9fQUNUSVZFX0hJR0g+OwogfTsKKworJnVzYjJfcGh5MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjEgeworCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjJfcGh5MiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjIgeworCWRyX21vZGUgPSAiaG9zdCI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1hYyB7CisJc2xhdmVzID0gPDE+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZjcHN3X2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmY3Bzd19zbGVlcD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmRhdmluY2lfbWRpbyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKKwlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmNwc3dfZW1hYzAgeworCXBoeV9pZCA9IDwmZGF2aW5jaV9tZGlvPiwgPDA+OworCXBoeS1tb2RlID0gInJnbWlpIjsKK307CisKKyZlbG0geworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZncG1jIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm5hbmRfZmxhc2hfeDg+OworCXJhbmdlcyA9IDwwIDAgMCAweDAxMDAwMDAwPjsJLyogbWluaW11bSBHUE1DIHBhcnRpdGlvbiA9IDE2TUIgKi8KKwluYW5kQDAsMCB7CisJCXJlZyA9IDwwIDAgND47CQkvKiBkZXZpY2UgSU8gcmVnaXN0ZXJzICovCisJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKKwkJdGksZWxtLWlkID0gPCZlbG0+OworCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8MT47CisJCWdwbWMsc3luYy1jbGstcHMgPSA8MD47CisJCWdwbWMsY3Mtb24tbnMgPSA8MD47CisJCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDQwPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8NDA+OworCQlncG1jLGFkdi1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDI1PjsKKwkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDI1PjsKKwkJZ3BtYyx3ZS1vbi1ucyA9IDwwPjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MjA+OworCQlncG1jLG9lLW9uLW5zID0gPDM+OworCQlncG1jLG9lLW9mZi1ucyA9IDwzMD47CisJCWdwbWMsYWNjZXNzLW5zID0gPDMwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDw0MD47CisJCWdwbWMsd3ItY3ljbGUtbnMgPSA8NDA+OworCQlncG1jLHdhaXQtcGluID0gPDA+OworCQlncG1jLHdhaXQtb24tcmVhZDsKKwkJZ3BtYyx3YWl0LW9uLXdyaXRlOworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDA+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdhaXQtbW9uaXRvcmluZy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8NDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKKwkJLyogTVREIHBhcnRpdGlvbiB0YWJsZSAqLworCQkvKiBBbGwgU1BMLSogcGFydGl0aW9ucyBhcmUgc2l6ZWQgdG8gbWluaW1hbCBsZW5ndGgKKwkJICogd2hpY2ggY2FuIGJlIGluZGVwZW5kZW50bHkgcHJvZ3JhbW1hYmxlLiBGb3IKKwkJICogTkFORCBmbGFzaCB0aGlzIGlzIGVxdWFsIHRvIHNpemUgb2YgZXJhc2UtYmxvY2sgKi8KKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMSI7CisJCQlyZWcgPSA8MHgwMDA0MDAwMCAweDAwMDQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDIgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMiI7CisJCQlyZWcgPSA8MHgwMDA4MDAwMCAweDAwMDQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDMgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMyI7CisJCQlyZWcgPSA8MHgwMDBjMDAwMCAweDAwMDQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDQgeworCQkJbGFiZWwgPSAiTkFORC51LWJvb3Qtc3BsLW9zIjsKKwkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDAwODAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANSB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdCI7CisJCQlyZWcgPSA8MHgwMDE4MDAwMCAweDAwMTAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDYgeworCQkJbGFiZWwgPSAiTkFORC51LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDAwMjgwMDAwIDB4MDAwNDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANyB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1lbnYuYmFja3VwMSI7CisJCQlyZWcgPSA8MHgwMDJjMDAwMCAweDAwMDQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDggeworCQkJbGFiZWwgPSAiTkFORC5rZXJuZWwiOworCQkJcmVnID0gPDB4MDAzMDAwMDAgMHgwMDcwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA5IHsKKwkJCWxhYmVsID0gIk5BTkQuZmlsZS1zeXN0ZW0iOworCQkJcmVnID0gPDB4MDBhMDAwMDAgMHgxZjYwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTQzeC1lcG9zLWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzeC1lcG9zLWV2bS5kdHMKaW5kZXggMTY3ZGJjOC4uYWQzNjJjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3gtZXBvcy1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4LWVwb3MtZXZtLmR0cwpAQCAtMTM4LDYgKzEzOCwyOSBAQAogCQkJCTB4MTYwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTcpIC8qIHNwaTBfY3MxLmdwaW8wXzYgKi8KIAkJCT47CiAJCX07CisKKwkJcXNwaTFfZGVmYXVsdDogcXNwaTFfZGVmYXVsdCB7CisJCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJCTB4N2MgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTMpCisJCQkJMHg4OCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMikKKwkJCQkweDkwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQorCQkJCTB4OTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTMpCisJCQkJMHg5OCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMykKKwkJCQkweDljIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQorCQkJPjsKKwkJfTsKKworCQlwaXhjaXJfdHNfcGluczogcGl4Y2lyX3RzX3BpbnMgeworCQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCQkweDQ0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREU3KQkvKiBncG1jX2ExLmdwaW8xXzE3ICovCisJCQk+OworCQl9OworCisJCWhkcV9waW5zOiBwaW5tdXhfaGRxX3BpbnMgeworCQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCQkweDIzNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgICAgLyogY2FtMV93ZW4uaGRxX2dwaW8gKi8KKwkJCT47CisJCX07CiAJfTsKIAogCW1hdHJpeF9rZXlwYWQ6IG1hdHJpeF9rZXlwYWRAMCB7CkBAIC0yMjYsNyArMjQ5LDkgQEAKIAl9OwogCiAJcGl4Y2lyX3RzQDVjIHsKLQkJY29tcGF0aWJsZSA9ICJwaXhjaXIscGl4Y2lyX3RzIjsKKwkJY29tcGF0aWJsZSA9ICJwaXhjaXIscGl4Y2lyX3RhbmdvYyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGl4Y2lyX3RzX3BpbnM+OwogCQlyZWcgPSA8MHg1Yz47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8xPjsKIAkJaW50ZXJydXB0cyA9IDwxNyAwPjsKQEAgLTIzNCw3ICsyNTksNyBAQAogCQlhdHRiLWdwaW8gPSA8JmdwaW8xIDE3IEdQSU9fQUNUSVZFX0hJR0g+OwogCiAJCXgtc2l6ZSA9IDwxMDI0PjsKLQkJeS1zaXplID0gPDc2OD47CisJCXktc2l6ZSA9IDw2MDA+OwogCX07CiB9OwogCkBAIC0zNDEsNyArMzY2LDcgQEAKIAkJfTsKIAkJcGFydGl0aW9uQDkgewogCQkJbGFiZWwgPSAiTkFORC5maWxlLXN5c3RlbSI7Ci0JCQlyZWcgPSA8MHgwMDgwMDAwMCAweDFGNjAwMDAwPjsKKwkJCXJlZyA9IDwweDAwYTAwMDAwIDB4MWY2MDAwMDA+OwogCQl9OwogCX07CiB9OwpAQCAtMzY3LDMgKzM5Miw3OSBAQAogCXBpbmN0cmwtMCA9IDwmc3BpMV9waW5zPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismdXNiMl9waHkxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMSB7CisJZHJfbW9kZSA9ICJwZXJpcGhlcmFsIjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMl9waHkyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMiB7CisJZHJfbW9kZSA9ICJob3N0IjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcXNwaSB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZxc3BpMV9kZWZhdWx0PjsKKworCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKKwltMjVwODBAMCB7CisJCWNvbXBhdGlibGUgPSAibXg2Nmw1MTIzNWwiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CisJCXJlZyA9IDwwPjsKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCQlzcGktdHgtYnVzLXdpZHRoID0gPDE+OworCQlzcGktcngtYnVzLXdpZHRoID0gPDQ+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJLyogTVREIHBhcnRpdGlvbiB0YWJsZS4KKwkJICogVGhlIFJPTSBjaGVja3MgdGhlIGZpcnN0IDUxMktpQgorCQkgKiBmb3IgYSB2YWxpZCBmaWxlIHRvIGJvb3QoWElQKS4KKwkJICovCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIlFTUEkuVV9CT09UIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEgeworCQkJbGFiZWwgPSAiUVNQSS5VX0JPT1QuYmFja3VwIjsKKwkJCXJlZyA9IDwweDAwMDgwMDAwIDB4MDAwODAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMiB7CisJCQlsYWJlbCA9ICJRU1BJLlUtQk9PVC1TUExfT1MiOworCQkJcmVnID0gPDB4MDAxMDAwMDAgMHgwMDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAzIHsKKwkJCWxhYmVsID0gIlFTUEkuVV9CT09UX0VOViI7CisJCQlyZWcgPSA8MHgwMDExMDAwMCAweDAwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDQgeworCQkJbGFiZWwgPSAiUVNQSS5VLUJPT1QtRU5WLmJhY2t1cCI7CisJCQlyZWcgPSA8MHgwMDEyMDAwMCAweDAwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDUgeworCQkJbGFiZWwgPSAiUVNQSS5LRVJORUwiOworCQkJcmVnID0gPDB4MDAxMzAwMDAgMHgwODAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDYgeworCQkJbGFiZWwgPSAiUVNQSS5GSUxFU1lTVEVNIjsKKwkJCXJlZyA9IDwweDAwOTMwMDAwIDB4MzZEMDAwMD47CisJCX07CisJfTsKK307CisKKyZoZHEgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaGRxX3BpbnM+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4eC1jbG9ja3MuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4eC1jbG9ja3MuZHRzaQppbmRleCAxNDIwMDljLi5jN2RjOWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzeHgtY2xvY2tzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3h4LWNsb2Nrcy5kdHNpCkBAIC0xMSw2ICsxMSwyMiBAQAogCXN5c19jbGtpbl9jazogc3lzX2Nsa2luX2NrIHsKIAkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInRpLG11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmc3lzYm9vdF9mcmVxX3NlbF9jaz4sIDwmY3J5c3RhbF9mcmVxX3NlbF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwzMT47CisJCXJlZyA9IDwweDAwNDA+OworCX07CisKKwljcnlzdGFsX2ZyZXFfc2VsX2NrOiBjcnlzdGFsX2ZyZXFfc2VsX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmdmlydF8xOTIwMDAwMF9jaz4sIDwmdmlydF8yNDAwMDAwMF9jaz4sIDwmdmlydF8yNTAwMDAwMF9jaz4sIDwmdmlydF8yNjAwMDAwMF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyOT47CisJCXJlZyA9IDwweDAwNDA+OworCX07CisKKwlzeXNib290X2ZyZXFfc2VsX2NrOiBzeXNib290X2ZyZXFfc2VsX2NrQDQ0ZTEwMDQwIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG11eC1jbG9jayI7CiAJCWNsb2NrcyA9IDwmdmlydF8xOTIwMDAwMF9jaz4sIDwmdmlydF8yNDAwMDAwMF9jaz4sIDwmdmlydF8yNTAwMDAwMF9jaz4sIDwmdmlydF8yNjAwMDAwMF9jaz47CiAJCXRpLGJpdC1zaGlmdCA9IDwyMj47CiAJCXJlZyA9IDwweDAwNDA+OwpAQCAtODcsNiArMTAzLDU0IEBACiAJCWNsb2NrLW11bHQgPSA8MT47CiAJCWNsb2NrLWRpdiA9IDwxPjsKIAl9OworCisJZWhycHdtMF90YmNsazogZWhycHdtMF90YmNsayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZkcGxsX3Blcl9tMl9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwwPjsKKwkJcmVnID0gPDB4MDY2ND47CisJfTsKKworCWVocnB3bTFfdGJjbGs6IGVocnB3bTFfdGJjbGsgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHBsbF9wZXJfbTJfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MT47CisJCXJlZyA9IDwweDA2NjQ+OworCX07CisKKwllaHJwd20yX3RiY2xrOiBlaHJwd20yX3RiY2xrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmRwbGxfcGVyX20yX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI+OworCQlyZWcgPSA8MHgwNjY0PjsKKwl9OworCisJZWhycHdtM190YmNsazogZWhycHdtM190YmNsayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZkcGxsX3Blcl9tMl9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw0PjsKKwkJcmVnID0gPDB4MDY2ND47CisJfTsKKworCWVocnB3bTRfdGJjbGs6IGVocnB3bTRfdGJjbGsgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHBsbF9wZXJfbTJfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8NT47CisJCXJlZyA9IDwweDA2NjQ+OworCX07CisKKwllaHJwd201X3RiY2xrOiBlaHJwd201X3RiY2xrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmRwbGxfcGVyX20yX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDY+OworCQlyZWcgPSA8MHgwNjY0PjsKKwl9OwogfTsKICZwcmNtX2Nsb2NrcyB7CiAJY2xrXzMyNzY4X2NrOiBjbGtfMzI3NjhfY2sgewpAQCAtMjI5LDYgKzI5Myw3IEBACiAJCXJlZyA9IDwweDJlMzA+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwogCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OworCQl0aSxzZXQtcmF0ZS1wYXJlbnQ7CiAJfTsKIAogCWRwbGxfcGVyX2NrOiBkcGxsX3Blcl9jayB7CkBAIC01MTEsNiArNTc2LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxtdXgtY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfZGlzcF9tMl9jaz4sIDwmZHBsbF9jb3JlX201X2NrPiwgPCZkcGxsX3Blcl9tMl9jaz47CiAJCXJlZyA9IDwweDQyNDQ+OworCQl0aSxzZXQtcmF0ZS1wYXJlbnQ7CiAJfTsKIAogCWRwbGxfZXh0ZGV2X2NrOiBkcGxsX2V4dGRldl9jayB7CkBAIC02MDksMTAgKzY3NSwxMyBAQAogCiAJZHBsbF9wZXJfY2xrZGNvbGRvOiBkcGxsX3Blcl9jbGtkY29sZG8gewogCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxmaXhlZC1mYWN0b3ItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfcGVyX2NrPjsKLQkJY2xvY2stbXVsdCA9IDwxPjsKLQkJY2xvY2stZGl2ID0gPDE+OworCQl0aSxjbG9jay1tdWx0ID0gPDE+OworCQl0aSxjbG9jay1kaXYgPSA8MT47CisJCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHgyZTE0PjsKKwkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZGxsX2FnaW5nX2Nsa19kaXY6IGRsbF9hZ2luZ19jbGtfZGl2IHsKQEAgLTY1Myw0ICs3MjIsMzYgQEAKIAkJY2xvY2tzID0gPCZjbGtfMzI3NjhfY2s+LCA8JmNsa18zMmtfdHBtX2NrPjsKIAkJcmVnID0gPDB4NDI2MD47CiAJfTsKKworCXVzYl9waHkwX2Fsd2F5c19vbl9jbGszMms6IHVzYl9waHkwX2Fsd2F5c19vbl9jbGszMmsgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmdXNicGh5XzMya2h6X2Nsa211eD47CisJCXRpLGJpdC1zaGlmdCA9IDw4PjsKKwkJcmVnID0gPDB4MmE0MD47CisJfTsKKworCXVzYl9waHkxX2Fsd2F5c19vbl9jbGszMms6IHVzYl9waHkxX2Fsd2F5c19vbl9jbGszMmsgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmdXNicGh5XzMya2h6X2Nsa211eD47CisJCXRpLGJpdC1zaGlmdCA9IDw4PjsKKwkJcmVnID0gPDB4MmE0OD47CisJfTsKKworCXVzYl9vdGdfc3MwX3JlZmNsazk2MG06IHVzYl9vdGdfc3MwX3JlZmNsazk2MG0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHBsbF9wZXJfY2xrZGNvbGRvPjsKKwkJdGksYml0LXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHg4YTYwPjsKKwl9OworCisJdXNiX290Z19zczFfcmVmY2xrOTYwbTogdXNiX290Z19zczFfcmVmY2xrOTYwbSB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZkcGxsX3Blcl9jbGtkY29sZG8+OworCQl0aSxiaXQtc2hpZnQgPSA8OD47CisJCXJlZyA9IDwweDhhNjg+OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cwppbmRleCAzMzgzYzRiLi40MTZmNGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cwpAQCAtMzUsNyArMzUsNiBAQAogCiAJCWludGVybmFsLXJlZ3MgewogCQkJc2VyaWFsQDEyMDAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCQkJc2F0YUBhMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW1pcmFib3guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1taXJhYm94LmR0cwppbmRleCAyMzU0ZmUwLi4wOTdkZjdkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1taXJhYm94LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW1pcmFib3guZHRzCkBAIC00Nyw3ICs0Nyw2IEBACiAKIAkJaW50ZXJuYWwtcmVncyB7CiAJCQlzZXJpYWxAMTIwMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAJCQl0aW1lckAyMDMwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0cwppbmRleCA2NTFhZWI1Li5kNmQ1NzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwMi5kdHMKQEAgLTUwLDcgKzUwLDYgQEAKIAogCQlpbnRlcm5hbC1yZWdzIHsKIAkJCXNlcmlhbEAxMjAwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTA0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwNC5kdHMKaW5kZXggNGUyNzU4Ny4uYzVmZThiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTA0LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzCkBAIC01MCw3ICs1MCw2IEBACiAKIAkJaW50ZXJuYWwtcmVncyB7CiAJCQlzZXJpYWxAMTIwMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1yZC5kdHMKaW5kZXggM2UyYzg1Ny4uNDE2OWY0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1yZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1yZC5kdHMKQEAgLTUxLDcgKzUxLDYgQEAKIAogCQlpbnRlcm5hbC1yZWdzIHsKIAkJCXNlcmlhbEAxMjAwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNhdGFAYTAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC14cC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC14cC5kdHNpCmluZGV4IGJiNzc5NzAuLjIzMjI3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAteHAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXhwLmR0c2kKQEAgLTE1Nyw2ICsxNTcsNyBAQAogCQkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQxPjsKIAkJCQlyZWctaW8td2lkdGggPSA8MT47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCQkJc2VyaWFsQDEyMTAwIHsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQyPjsKIAkJCQlyZWctaW8td2lkdGggPSA8MT47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0yMDMsNiArMjA1LDExIEBACiAJCQkJcmVnID0gPDB4MjAzMDAgMHgzND4sIDwweDIwNzA0IDB4ND47CiAJCQl9OwogCisJCQlwbXN1QDIyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC1wbXN1IjsKKwkJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OworCQkJfTsKKwogCQkJdXNiQDUwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZWhjaSI7CiAJCQkJcmVnID0gPDB4NTAwMDAgMHg1MDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC5kdHNpCmluZGV4IGFmMWYxMWUuLjIxYjU4OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLmR0c2kKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIAkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMj47CiAJCQl9OwogCisJCQljcHVyc3RAMjA4MDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLWNwdS1yZXNldCI7CisJCQkJcmVnID0gPDB4MjA4MDAgMHg4PjsKKwkJCX07CisKIAkJCWF1ZGlvX2NvbnRyb2xsZXI6IGF1ZGlvLWNvbnRyb2xsZXJAMzAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEzNzAtYXVkaW8iOwogCQkJCXJlZyA9IDwweDMwMDAwIDB4NDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzc1LWRiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUtZGIuZHRzCmluZGV4IDA0NTExMjQuLjc3MmZlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUtZGIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUtZGIuZHRzCkBAIC02OCw3ICs2OCw2IEBACiAJCQl9OwogCiAJCQlzZXJpYWxAMTIwMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKQEAgLTEwNyw2ICsxMDYsMTQgQEAKIAkJCQl9OwogCQkJfTsKIAorCQkJdXNiQDU0MDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQl1c2IzQDU4MDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCiAJCQltdnNkaW9AZDQwMDAgewogCQkJCXBpbmN0cmwtMCA9IDwmc2Rpb19waW5zICZzZGlvX3N0X3BpbnM+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzc1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzc1LmR0c2kKaW5kZXggMzg3NzY5My4uZmI5MjU1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3NS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUuZHRzaQpAQCAtMzksNiArMzksOCBAQAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CisJCWVuYWJsZS1tZXRob2QgPSAibWFydmVsbCxhcm1hZGEtMzc1LXNtcCI7CisKIAkJY3B1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CkBAIC0xMjgsNiArMTMwLDExIEBACiAJCQkJY2FjaGUtbGV2ZWwgPSA8Mj47CiAJCQl9OwogCisJCQlzY3VAYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXNjdSI7CisJCQkJcmVnID0gPDB4YzAwMCAweDU4PjsKKwkJCX07CisKIAkJCXRpbWVyQGM2MDAgewogCQkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS10d2QtdGltZXIiOwogCQkJCXJlZyA9IDwweGM2MDAgMHgyMD47CkBAIC0xOTQsNiArMjAxLDcgQEAKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJCXJlZy1pby13aWR0aCA9IDwxPjsKKwkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTIwMyw2ICsyMTEsNyBAQAogCQkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQkJcmVnLWlvLXdpZHRoID0gPDE+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMzIwLDYgKzMyOSw0NiBAQAogCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCX07CiAKKwkJCXdhdGNoZG9nQDIwMzAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3NS13ZHQiOworCQkJCXJlZyA9IDwweDIwMzAwIDB4MzQ+LCA8MHgyMDcwNCAweDQ+LCA8MHgxODI1NCAweDQ+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKKwkJCX07CisKKwkJCWNwdXJzdEAyMDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAtY3B1LXJlc2V0IjsKKwkJCQlyZWcgPSA8MHgyMDgwMCAweDEwPjsKKwkJCX07CisKKwkJCWNvaGVyZW5jeS1mYWJyaWNAMjEwMTAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LWNvaGVyZW5jeS1mYWJyaWMiOworCQkJCXJlZyA9IDwweDIxMDEwIDB4MWM+OworCQkJfTsKKworCQkJdXNiQDUwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZWhjaSI7CisJCQkJcmVnID0gPDB4NTAwMDAgMHg1MDA+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQljbG9ja3MgPSA8JmdhdGVjbGsgMTg+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1c2JANTQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1laGNpIjsKKwkJCQlyZWcgPSA8MHg1NDAwMCAweDUwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayAyNj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYjNANTgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LXhoY2kiOworCQkJCXJlZyA9IDwweDU4MDAwIDB4MjAwMDA+LDwweDViODgwIDB4ODA+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQljbG9ja3MgPSA8JmdhdGVjbGsgMTY+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCiAJCQl4b3JANjA4MDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi14b3IiOwogCQkJCXJlZyA9IDwweDYwODAwIDB4MTAwCkBAIC0zOTEsNiArNDQwLDEyIEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCXRoZXJtYWxAZTgwNzggeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEzNzUtdGhlcm1hbCI7CisJCQkJcmVnID0gPDB4ZTgwNzggMHg0PiwgPDB4ZTgwN2MgMHg4PjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCiAJCQljb3JlY2xrOiBtdmVidS1zYXJAZTgyMDQgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LWNvcmUtY2xvY2siOwogCQkJCXJlZyA9IDwweGU4MjA0IDB4MDQ+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4MC5kdHNpCmluZGV4IDZkMGYwM2MuLmU2OWJjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzgwLmR0c2kKQEAgLTIxLDYgKzIxLDggQEAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQllbmFibGUtbWV0aG9kID0gIm1hcnZlbGwsYXJtYWRhLTM4MC1zbXAiOworCiAJCWNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4NS1kYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cwppbmRleCA2ODI4ZDc3Li5mZjk2MzdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cwpAQCAtNTUsNyArNTUsNiBAQAogCQkJfTsKIAogCQkJc2VyaWFsQDEyMDAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCkBAIC02NSw2ICs2NCwxMCBAQAogCQkJCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKIAkJCX07CiAKKwkJCXVzYkA1MDAwMCB7CisJCQkJc3RhdHVzID0gIm9rIjsKKwkJCX07CisKIAkJCWV0aGVybmV0QDcwMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkwPjsKQEAgLTgxLDYgKzg0LDE0IEBACiAJCQkJfTsKIAkJCX07CiAKKwkJCXNhdGFAYTgwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCXNhdGFAZTAwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKIAkJCWZsYXNoQGQwMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJbnVtLWNzID0gPDE+OwpAQCAtMTAxLDYgKzExMiwyMiBAQAogCQkJCQlyZWcgPSA8MHgxMDAwMDAwIDB4M2YwMDAwMDA+OwogCQkJCX07CiAJCQl9OworCisJCQlzZGhjaUBkODAwMCB7CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CisJCQkJYnJva2VuLWNkOworCQkJCXdwLWludmVydGVkOworCQkJCWJ1cy13aWR0aCA9IDw4PjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQl1c2IzQGYwMDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQl1c2IzQGY4MDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OwogCQl9OwogCiAJCXBjaWUtY29udHJvbGxlciB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtcmQuZHRzCmluZGV4IDQ1MjUwYzguLjQwODkzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtcmQuZHRzCkBAIC01MSw3ICs1MSw2IEBACiAJCQl9OwogCiAJCQlzZXJpYWxAMTIwMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKQEAgLTc3LDYgKzc2LDEwIEBACiAJCQkJCXJlZyA9IDwxPjsKIAkJCQl9OwogCQkJfTsKKworCQkJdXNiM0BmMDAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKIAkJfTsKIAogCQlwY2llLWNvbnRyb2xsZXIgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4NS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4NS5kdHNpCmluZGV4IGRhODAxOTYuLmYwMTEwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LmR0c2kKQEAgLTIxLDYgKzIxLDggQEAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQllbmFibGUtbWV0aG9kID0gIm1hcnZlbGwsYXJtYWRhLTM4MC1zbXAiOworCiAJCWNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpCmluZGV4IGNhODgxM2IuLjNkZTM2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zOHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kKQEAgLTEwOCw2ICsxMDgsMTEgQEAKIAkJCQljYWNoZS1sZXZlbCA9IDwyPjsKIAkJCX07CiAKKwkJCXNjdUBjMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktc2N1IjsKKwkJCQlyZWcgPSA8MHhjMDAwIDB4NTg+OworCQkJfTsKKwogCQkJdGltZXJAYzYwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXR3ZC10aW1lciI7CiAJCQkJcmVnID0gPDB4YzYwMCAweDIwPjsKQEAgLTE3NCw2ICsxNzksNyBAQAogCQkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQkJcmVnLWlvLXdpZHRoID0gPDE+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMTgzLDYgKzE4OSw3IEBACiAJCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQlyZWctaW8td2lkdGggPSA8MT47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0yNjcsNiArMjc0LDI4IEBACiAJCQkJY2xvY2stbmFtZXMgPSAibmJjbGsiLCAiZml4ZWQiOwogCQkJfTsKIAorCQkJd2F0Y2hkb2dAMjAzMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzgwLXdkdCI7CisJCQkJcmVnID0gPDB4MjAzMDAgMHgzND4sIDwweDIwNzA0IDB4ND4sIDwweDE4MjYwIDB4ND47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDI+LCA8JnJlZmNsaz47CisJCQkJY2xvY2stbmFtZXMgPSAibmJjbGsiLCAiZml4ZWQiOworCQkJfTsKKworCQkJY3B1cnN0QDIwODAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC1jcHUtcmVzZXQiOworCQkJCXJlZyA9IDwweDIwODAwIDB4MTA+OworCQkJfTsKKworCQkJY29oZXJlbmN5LWZhYnJpY0AyMTAxMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zODAtY29oZXJlbmN5LWZhYnJpYyI7CisJCQkJcmVnID0gPDB4MjEwMTAgMHgxYz47CisJCQl9OworCisJCQlwbXN1QDIyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM4MC1wbXN1IjsKKwkJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OworCQkJfTsKKwogCQkJZXRoMTogZXRoZXJuZXRAMzAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLW5ldGEiOwogCQkJCXJlZyA9IDwweDMwMDAwIDB4NDAwMD47CkBAIC0yODMsNiArMzEyLDE0IEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCXVzYkA1MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWVoY2kiOworCQkJCXJlZyA9IDwweDU4MDAwIDB4NTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJY2xvY2tzID0gPCZnYXRlY2xrIDE4PjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwogCQkJeG9yQDYwODAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24teG9yIjsKIAkJCQlyZWcgPSA8MHg2MDgwMCAweDEwMApAQCAtMzM5LDYgKzM3NiwyMiBAQAogCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayA0PjsKIAkJCX07CiAKKwkJCXNhdGFAYTgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzgwLWFoY2kiOworCQkJCXJlZyA9IDwweGE4MDAwIDB4MjAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayAxNT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNhdGFAZTAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzgwLWFoY2kiOworCQkJCXJlZyA9IDwweGUwMDAwIDB4MjAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayAzMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKIAkJCWNvcmVkaXZjbGs6IGNsb2NrQGU0MjUwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM4MC1jb3JlZGl2LWNsb2NrIjsKIAkJCQlyZWcgPSA8MHhlNDI1MCAweGM+OwpAQCAtMzQ3LDYgKzQwMCwxMiBAQAogCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJuYW5kIjsKIAkJCX07CiAKKwkJCXRoZXJtYWxAZTgwNzggeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEzODAtdGhlcm1hbCI7CisJCQkJcmVnID0gPDB4ZTQwNzggMHg0PiwgPDB4ZTQwNzQgMHg0PjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCiAJCQlmbGFzaEBkMDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYTM3MC1uYW5kIjsKIAkJCQlyZWcgPSA8MHhkMDAwMCAweDU0PjsKQEAgLTM1Niw2ICs0MTUsMzEgQEAKIAkJCQljbG9ja3MgPSA8JmNvcmVkaXZjbGsgMD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CisKKwkJCXNkaGNpQGQ4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM4MC1zZGhjaSI7CisJCQkJcmVnID0gPDB4ZDgwMDAgMHgxMDAwPiwgPDB4ZGMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAyNSAweDQ+OworCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayAxNz47CisJCQkJbXJ2bCxjbGstZGVsYXktY3ljbGVzID0gPDB4MUY+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1c2IzQGYwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM4MC14aGNpIjsKKwkJCQlyZWcgPSA8MHhmMDAwMCAweDQwMDA+LDwweGY0MDAwIDB4NDAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayA5PjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdXNiM0BmODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zODAteGhjaSI7CisJCQkJcmVnID0gPDB4ZjgwMDAgMHg0MDAwPiw8MHhmYzAwMCAweDQwMDA+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQljbG9ja3MgPSA8JmdhdGVjbGsgMTA+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWF4cHdpZmlhcC5kdHMKaW5kZXggZDgzZDdkNi4uYTU1YTk3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWF4cHdpZmlhcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWF4cHdpZmlhcC5kdHMKQEAgLTk1LDEyICs5NSwxMCBAQAogCQkJfTsKIAogCQkJc2VyaWFsQDEyMDAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCiAJCQlzZXJpYWxAMTIxMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1kYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtZGIuZHRzCmluZGV4IDkwZjBiZjYuLjQyZGRiMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1kYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWRiLmR0cwpAQCAtMTA2LDE5ICsxMDYsMTUgQEAKIAogCQlpbnRlcm5hbC1yZWdzIHsKIAkJCXNlcmlhbEAxMjAwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNlcmlhbEAxMjEwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNlcmlhbEAxMjIwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNlcmlhbEAxMjMwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWdwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1ncC5kdHMKaW5kZXggMGM3NTY0Mi4uMDQ3OGM1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWdwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtZ3AuZHRzCkBAIC0xMDQsMTkgKzEwNCwxNSBAQAogCiAJCWludGVybmFsLXJlZ3MgewogCQkJc2VyaWFsQDEyMDAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCQkJc2VyaWFsQDEyMTAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCQkJc2VyaWFsQDEyMjAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCQkJc2VyaWFsQDEyMzAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbWF0cml4LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tYXRyaXguZHRzCmluZGV4IGMyMjQyNzQuLjI1Njc0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tYXRyaXguZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tYXRyaXguZHRzCkBAIC0zNywxOSArMzcsMTUgQEAKIAogCQlpbnRlcm5hbC1yZWdzIHsKIAkJCXNlcmlhbEAxMjAwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNlcmlhbEAxMjEwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNlcmlhbEAxMjIwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAkJCXNlcmlhbEAxMjMwMCB7Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwMD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjMwLmR0c2kKaW5kZXggOTgzMzVmYi4uMTI1N2ZmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODIzMC5kdHNpCkBAIC0yNyw2ICsyNyw3IEBACiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJZW5hYmxlLW1ldGhvZCA9ICJtYXJ2ZWxsLGFybWFkYS14cC1zbXAiOwogCiAJCWNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODI2MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyNjAuZHRzaQppbmRleCA5NDgwY2Y4Li4zMzk2YjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODI2MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjYwLmR0c2kKQEAgLTI5LDYgKzI5LDcgQEAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQllbmFibGUtbWV0aG9kID0gIm1hcnZlbGwsYXJtYWRhLXhwLXNtcCI7CiAKIAkJY3B1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4NDYwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODQ2MC5kdHNpCmluZGV4IDMxYmE2ZDguLjZkYTg0YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4NDYwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12Nzg0NjAuZHRzaQpAQCAtMzAsNiArMzAsNyBAQAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CisJCWVuYWJsZS1tZXRob2QgPSAibWFydmVsbCxhcm1hZGEteHAtc21wIjsKIAogCQljcHVAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1uZXRnZWFyLXJuMjEyMC5kdHMKaW5kZXggZmYwNDllZS4uMGNmOTk5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbmV0Z2Vhci1ybjIxMjAuZHRzCkBAIC0xMzgsNyArMTM4LDYgQEAKIAkJCX07CiAKIAkJCXNlcmlhbEAxMjAwMCB7Ci0JCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0cwppbmRleCA1ZDQyZmViLi5lNWM2YTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtb3BlbmJsb2Nrcy1heDMtNC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRzCkBAIC03MiwxMSArNzIsOSBAQAogCiAJCWludGVybmFsLXJlZ3MgewogCQkJc2VyaWFsQDEyMDAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCQkJc2VyaWFsQDEyMTAwIHsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCQkJcGluY3RybCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCmluZGV4IGFiYjlmOWQuLjU5MDJlODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCkBAIC01OCw2ICs1OCw3IEBACiAJCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJCWludGVycnVwdHMgPSA8NDM+OwogCQkJCXJlZy1pby13aWR0aCA9IDwxPjsKKwkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAJCQlzZXJpYWxAMTIzMDAgewpAQCAtNjYsNiArNjcsNyBAQAogCQkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQ0PjsKIAkJCQlyZWctaW8td2lkdGggPSA8MT47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0xMTcsOSArMTE5LDkgQEAKIAkJCQljbG9jay1uYW1lcyA9ICJuYmNsayIsICJmaXhlZCI7CiAJCQl9OwogCi0JCQlhcm1hZGEtMzcwLXhwLXBtc3VAMjIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLXhwLXBtc3UiOwotCQkJCXJlZyA9IDwweDIyMTAwIDB4NDAwPiwgPDB4MjA4MDAgMHgyMD47CisJCQljcHVyc3RAMjA4MDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLWNwdS1yZXNldCI7CisJCQkJcmVnID0gPDB4MjA4MDAgMHgyMD47CiAJCQl9OwogCiAJCQlldGgyOiBldGhlcm5ldEAzMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxLWNvc2lub19tZWdhMjU2MC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLWNvc2lub19tZWdhMjU2MC5kdHMKaW5kZXggYTU0MmQ1OC4uMjdlYmIwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1jb3Npbm9fbWVnYTI1NjAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtY29zaW5vX21lZ2EyNTYwLmR0cwpAQCAtMzIsMTEgKzMyLDYgQEAKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCi0KLQkJCXRzYWRjYzogdHNhZGNjQGY4MDRjMDAwIHsKLQkJCQlzdGF0dXMgPSAib2theSI7Ci0JCQl9OwotCiAJCQlydGNAZmZmZmZlYjAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxLXNhbWE1ZDNfeHBsYWluZWQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1zYW1hNWQzX3hwbGFpbmVkLmR0cwppbmRleCA0NTM3MjU5Li41YjhlNDA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxLXNhbWE1ZDNfeHBsYWluZWQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkM194cGxhaW5lZC5kdHMKQEAgLTIxLDYgKzIxLDE0IEBACiAJCXJlZyA9IDwweDIwMDAwMDAwIDB4MTAwMDAwMDA+OwogCX07CiAKKwlzbG93X3h0YWwgeworCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCX07CisKKwltYWluX3h0YWwgeworCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCX07CisKIAlhaGIgewogCQlhcGIgewogCQkJbW1jMDogbW1jQGYwMDAwMDAwIHsKQEAgLTQzLDExICs1MSw1NCBAQAogCQkJfTsKIAogCQkJaTJjMDogaTJjQGYwMDE0MDAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMF9wdT47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAogCQkJaTJjMTogaTJjQGYwMDE4MDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQlwbWljOiBhY3Q4ODY1QDViIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhY3RpdmUtc2VtaSxhY3Q4ODY1IjsKKwkJCQkJcmVnID0gPDB4NWI+OworCQkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQkJcmVndWxhdG9ycyB7CisJCQkJCQl2Y2NfMXY4X3JlZzogRENEQ19SRUcxIHsKKwkJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NfMVY4IjsKKwkJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJfTsKKworCQkJCQkJdmNjXzF2Ml9yZWc6IERDRENfUkVHMiB7CisJCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkNDXzFWMiI7CisJCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCX07CisKKwkJCQkJCXZjY18zdjNfcmVnOiBEQ0RDX1JFRzMgeworCQkJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ18zVjMiOworCQkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQl9OworCisJCQkJCQl2ZGRmdXNlX3JlZzogTERPX1JFRzEgeworCQkJCQkJCXJlZ3VsYXRvci1uYW1lID0gIkZVU0VfMlY1IjsKKwkJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKKwkJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKKwkJCQkJCX07CisKKwkJCQkJCXZkZGFuYV9yZWc6IExET19SRUcyIHsKKwkJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERBTkEiOworCQkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQl9OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCiAJCQltYWNiMDogZXRoZXJuZXRAZjAwMjgwMDAgewpAQCAtNTUsNiArMTA2LDEyIEBACiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAorCQkJcHdtMDogcHdtQGYwMDJjMDAwIHsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20wX3B3bWgwXzAgJnBpbmN0cmxfcHdtMF9wd21oMV8wPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCiAJCQl1c2FydDA6IHNlcmlhbEBmMDAxYzAwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKQEAgLTEwMiw2ICsxNTksNyBAQAogCiAJCQlpMmMyOiBpMmNAZjgwMWMwMDAgewogCQkJCWRtYXMgPSA8MD4sIDwwPjsJLyogRG8gbm90IHVzZSBETUEgZm9yIGkyYzIgKi8KKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMl9wdT47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIApAQCAtMTE2LDYgKzE3NCwxOCBAQAogCiAJCQlwaW5jdHJsQGZmZmZmMjAwIHsKIAkJCQlib2FyZCB7CisJCQkJCXBpbmN0cmxfaTJjMF9wdTogaTJjMF9wdSB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9BIDMwIEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX1BVTExfVVA+LAorCQkJCQkJCTxBVDkxX1BJT0EgMzEgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfUFVMTF9VUD47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9pMmMyX3B1OiBpMmMyX3B1IHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0EgMTggQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfUFVMTF9VUD4sCisJCQkJCQkJPEFUOTFfUElPQSAxOSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9QVUxMX1VQPjsKKwkJCQkJfTsKKwogCQkJCQlwaW5jdHJsX21tYzBfY2Q6IG1tYzBfY2QgewogCQkJCQkJYXRtZWwscGlucyA9CiAJCQkJCQkJPEFUOTFfUElPRSAwIEFUOTFfUEVSSVBIX0dQSU8gQVQ5MV9QSU5DVFJMX1BVTExfVVBfREVHTElUQ0g+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYxLmR0c2kKaW5kZXggM2JlOTczZS4uYjMwOWMxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2MS5kdHNpCkBAIC0yOSw2ICsyOSw3IEBACiAJCWkyYzAgPSAmaTJjMDsKIAkJc3NjMCA9ICZzc2MwOwogCQlzc2MxID0gJnNzYzE7CisJCXNzYzIgPSAmc3NjMjsKIAl9OwogCiAJY3B1cyB7CkBAIC00NSw2ICs0NiwxOCBAQAogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDA4MDAwMDAwPjsKIAl9OwogCisJbWFpbl94dGFsOiBtYWluX3h0YWwgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJfTsKKworCXNsb3dfeHRhbDogc2xvd194dGFsIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCX07CisKIAlhaGIgewogCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTE4Miw2ICsxOTUsOCBAQAogCQkJCWludGVycnVwdHMgPSA8MTQgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zc2MwX3R4ICZwaW5jdHJsX3NzYzBfcng+OworCQkJCWNsb2NrcyA9IDwmc3NjMF9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInBjbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0xOTEsNiArMjA2LDE5IEBACiAJCQkJaW50ZXJydXB0cyA9IDwxNSBJUlFfVFlQRV9MRVZFTF9ISUdIIDU+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NzYzFfdHggJnBpbmN0cmxfc3NjMV9yeD47CisJCQkJY2xvY2tzID0gPCZzc2MxX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAicGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNzYzI6IHNzY0BmZmZjNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLXNzYyI7CisJCQkJcmVnID0gPDB4ZmZmYzQwMDAgMHg0MDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE2IElSUV9UWVBFX0xFVkVMX0hJR0ggNT47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc3NjMl90eCAmcGluY3RybF9zc2MyX3J4PjsKKwkJCQljbG9ja3MgPSA8JnNzYzJfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJwY2xrIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMzg1LDYgKzQxMywyMiBAQAogCQkJCQl9OwogCQkJCX07CiAKKwkJCQlzc2MyIHsKKwkJCQkJcGluY3RybF9zc2MyX3R4OiBzc2MyX3R4LTAgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQyAyNSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDI2IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMjcgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9zc2MyX3J4OiBzc2MyX3J4LTAgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQyAyOCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDI5IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMzAgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisJCQkJfTsKKwogCQkJCXNwaTAgewogCQkJCQlwaW5jdHJsX3NwaTA6IHNwaTAtMCB7CiAJCQkJCQlhdG1lbCxwaW5zID0KQEAgLTUyNCwxNyArNTY4LDI0IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAotCQkJCWNsazMyazogc2xjayB7CisJCQkJc2xvd19yY19vc2M6IHNsb3dfcmNfb3NjIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CiAJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwkJCQkJY2xvY2stYWNjdXJhY3kgPSA8NTAwMDAwMDA+OworCQkJCX07CisKKwkJCQljbGszMms6IHNsY2sgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLWNsay1zbG93IjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8JnNsb3dfcmNfb3NjICZzbG93X3h0YWw+OwogCQkJCX07CiAKIAkJCQltYWluOiBtYWluY2sgewogCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtY2xrLW1haW4iOwogCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQkJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JnBtYyBBVDkxX1BNQ19NT1NDUz47Ci0JCQkJCWNsb2NrcyA9IDwmY2xrMzJrPjsKKwkJCQkJY2xvY2tzID0gPCZtYWluX3h0YWw+OwogCQkJCX07CiAKIAkJCQlwbGxhOiBwbGxhY2sgewpAQCAtNTQ1LDcgKzU5Niw4IEBACiAJCQkJCXJlZyA9IDwwPjsKIAkJCQkJYXRtZWwsY2xrLWlucHV0LXJhbmdlID0gPDEwMDAwMDAgMzIwMDAwMDA+OwogCQkJCQkjYXRtZWwscGxsLWNsay1vdXRwdXQtcmFuZ2UtY2VsbHMgPSA8ND47Ci0JCQkJCWF0bWVsLHBsbC1jbGstb3V0cHV0LXJhbmdlcyA9IDw4MDAwMDAwMCAyMDAwMDAwMDAgMTkwMDAwMDAwIDI0MDAwMDAwMD47CisJCQkJCWF0bWVsLHBsbC1jbGstb3V0cHV0LXJhbmdlcyA9IDw4MDAwMDAwMCAyMDAwMDAwMDAgMCAxPiwKKwkJCQkJCQkJPDE5MDAwMDAwMCAyNDAwMDAwMDAgMiAxPjsKIAkJCQl9OwogCiAJCQkJcGxsYjogcGxsYmNrIHsKQEAgLTU1NCw5ICs2MDYsOSBAQAogCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTE9DS0I+OwogCQkJCQljbG9ja3MgPSA8Jm1haW4+OwogCQkJCQlyZWcgPSA8MT47Ci0JCQkJCWF0bWVsLGNsay1pbnB1dC1yYW5nZSA9IDwxMDAwMDAwIDMyMDAwMDAwPjsKKwkJCQkJYXRtZWwsY2xrLWlucHV0LXJhbmdlID0gPDEwMDAwMDAgNTAwMDAwMD47CiAJCQkJCSNhdG1lbCxwbGwtY2xrLW91dHB1dC1yYW5nZS1jZWxscyA9IDw0PjsKLQkJCQkJYXRtZWwscGxsLWNsay1vdXRwdXQtcmFuZ2VzID0gPDgwMDAwMDAwIDIwMDAwMDAwMCAxOTAwMDAwMDAgMjQwMDAwMDAwPjsKKwkJCQkJYXRtZWwscGxsLWNsay1vdXRwdXQtcmFuZ2VzID0gPDcwMDAwMDAwIDEzMDAwMDAwMCAxIDE+OwogCQkJCX07CiAKIAkJCQltY2s6IG1hc3RlcmNrIHsKQEAgLTU2NSwxNiArNjE3LDQ4IEBACiAJCQkJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JnBtYyBBVDkxX1BNQ19NQ0tSRFk+OwogCQkJCQljbG9ja3MgPSA8JmNsazMyaz4sIDwmbWFpbj4sIDwmcGxsYT4sIDwmcGxsYj47CiAJCQkJCWF0bWVsLGNsay1vdXRwdXQtcmFuZ2UgPSA8MCA5NDAwMDAwMD47Ci0JCQkJCWF0bWVsLGNsay1kaXZpc29ycyA9IDwxIDIgNCAzPjsKKwkJCQkJYXRtZWwsY2xrLWRpdmlzb3JzID0gPDEgMiA0IDA+OwogCQkJCX07CiAKIAkJCQl1c2I6IHVzYmNrIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWNsay11c2IiOwogCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQkJCWF0bWVsLGNsay1kaXZpc29ycyA9IDwxIDIgNCAzPjsKKwkJCQkJYXRtZWwsY2xrLWRpdmlzb3JzID0gPDEgMiA0IDA+OwogCQkJCQljbG9ja3MgPSA8JnBsbGI+OwogCQkJCX07CiAKKwkJCQlwcm9nOiBwcm9nY2sgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtY2xrLXByb2dyYW1tYWJsZSI7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcG1jPjsKKwkJCQkJY2xvY2tzID0gPCZjbGszMms+LCA8Jm1haW4+LCA8JnBsbGE+LCA8JnBsbGI+OworCisJCQkJCXByb2cwOiBwcm9nMCB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MD47CisJCQkJCQlpbnRlcnJ1cHRzID0gPEFUOTFfUE1DX1BDS1JEWSgwKT47CisJCQkJCX07CisKKwkJCQkJcHJvZzE6IHByb2cxIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxPjsKKwkJCQkJCWludGVycnVwdHMgPSA8QVQ5MV9QTUNfUENLUkRZKDEpPjsKKwkJCQkJfTsKKworCQkJCQlwcm9nMjogcHJvZzIgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI+OworCQkJCQkJaW50ZXJydXB0cyA9IDxBVDkxX1BNQ19QQ0tSRFkoMik+OworCQkJCQl9OworCisJCQkJCXByb2czOiBwcm9nMyB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8Mz47CisJCQkJCQlpbnRlcnJ1cHRzID0gPEFUOTFfUE1DX1BDS1JEWSgzKT47CisJCQkJCX07CisJCQkJfTsKKwogCQkJCXN5c3RlbWNrIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWNsay1zeXN0ZW0iOwogCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTU5Miw2ICs2NzYsMzAgQEAKIAkJCQkJCWNsb2NrcyA9IDwmdXNiPjsKIAkJCQkJfTsKIAorCQkJCQlwY2swOiBwY2swIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw4PjsKKwkJCQkJCWNsb2NrcyA9IDwmcHJvZzA+OworCQkJCQl9OworCisJCQkJCXBjazE6IHBjazEgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDk+OworCQkJCQkJY2xvY2tzID0gPCZwcm9nMT47CisJCQkJCX07CisKKwkJCQkJcGNrMjogcGNrMiB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTA+OworCQkJCQkJY2xvY2tzID0gPCZwcm9nMj47CisJCQkJCX07CisKKwkJCQkJcGNrMzogcGNrMyB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTE+OworCQkJCQkJY2xvY2tzID0gPCZwcm9nMz47CisJCQkJCX07CisKIAkJCQkJaGNsazA6IGhjbGswIHsKIAkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCQkJCXJlZyA9IDwxNj47CkBAIC02NjYsNiArNzc0LDIxIEBACiAJCQkJCQlyZWcgPSA8MTM+OwogCQkJCQl9OwogCisJCQkJCXNzYzBfY2xrOiBzc2MwX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTQ+OworCQkJCQl9OworCisJCQkJCXNzYzFfY2xrOiBzc2MxX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTU+OworCQkJCQl9OworCisJCQkJCXNzYzJfY2xrOiBzc2MyX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTY+OworCQkJCQl9OworCiAJCQkJCXRjMF9jbGs6IHRjMF9jbGsgewogCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJCQkJcmVnID0gPDE3PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYxZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjFlay5kdHMKaW5kZXggMmNlNTI3ZS4uYzY2ODNlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjFlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjFlay5kdHMKQEAgLTIwLDYgKzIwLDEwIEBACiAJCXJlZyA9IDwweDIwMDAwMDAwIDB4NDAwMDAwMD47CiAJfTsKIAorCW1haW5feHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwMD47CisJfTsKKwogCWNsb2NrcyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05ZzQ1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOWc0NS5kdHNpCmluZGV4IDljZGFlY2YuLmFjZTZiZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05ZzQ1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTlnNDUuZHRzaQpAQCAtMTM2LDYgKzEzNiwzNiBAQAogCQkJCSAgICAgID47CiAKIAkJCQkvKiBzaGFyZWQgcGluY3RybCBzZXR0aW5ncyAqLworCQkJCWFkYzAgeworCQkJCQlwaW5jdHJsX2FkYzBfYWR0cmc6IGFkYzBfYWR0cmcgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0QgMjggQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisJCQkJCXBpbmN0cmxfYWRjMF9hZDA6IGFkYzBfYWQwIHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9EIDIwIEFUOTFfUEVSSVBIX0dQSU8gQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCQkJCQlwaW5jdHJsX2FkYzBfYWQxOiBhZGMwX2FkMSB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCAyMSBBVDkxX1BFUklQSF9HUElPIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKwkJCQkJcGluY3RybF9hZGMwX2FkMjogYWRjMF9hZDIgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0QgMjIgQVQ5MV9QRVJJUEhfR1BJTyBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisJCQkJCXBpbmN0cmxfYWRjMF9hZDM6IGFkYzBfYWQzIHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9EIDIzIEFUOTFfUEVSSVBIX0dQSU8gQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCQkJCQlwaW5jdHJsX2FkYzBfYWQ0OiBhZGMwX2FkNCB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCAyNCBBVDkxX1BFUklQSF9HUElPIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKwkJCQkJcGluY3RybF9hZGMwX2FkNTogYWRjMF9hZDUgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0QgMjUgQVQ5MV9QRVJJUEhfR1BJTyBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisJCQkJCXBpbmN0cmxfYWRjMF9hZDY6IGFkYzBfYWQ2IHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9EIDI2IEFUOTFfUEVSSVBIX0dQSU8gQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCQkJCQlwaW5jdHJsX2FkYzBfYWQ3OiBhZGMwX2FkNyB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCAyNyBBVDkxX1BFUklQSF9HUElPIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKwkJCQl9OworCiAJCQkJZGJndSB7CiAJCQkJCXBpbmN0cmxfZGJndTogZGJndS0wIHsKIAkJCQkJCWF0bWVsLHBpbnMgPQpAQCAtNjM0LDEwICs2NjQsOSBAQAogCQkJYWRjMDogYWRjQGZmZmIwMDAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLWFkYyI7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1hZGMiOwogCQkJCXJlZyA9IDwweGZmZmIwMDAwIDB4MTAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIwIElSUV9UWVBFX0xFVkVMX0hJR0ggMD47Ci0JCQkJYXRtZWwsYWRjLXVzZS1leHRlcm5hbC10cmlnZ2VyczsKIAkJCQlhdG1lbCxhZGMtY2hhbm5lbHMtdXNlZCA9IDwweGZmPjsKIAkJCQlhdG1lbCxhZGMtdnJlZiA9IDwzMzAwPjsKIAkJCQlhdG1lbCxhZGMtc3RhcnR1cC10aW1lID0gPDQwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bTEwZzQ1ZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTltMTBnNDVlay5kdHMKaW5kZXggN2ZmNjY1YS4uOWY1YjBhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTltMTBnNDVlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTltMTBnNDVlay5kdHMKQEAgLTgsNiArOCw3IEBACiAgKi8KIC9kdHMtdjEvOwogI2luY2x1ZGUgImF0OTFzYW05ZzQ1LmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcHdtL3B3bS5oPgogCiAvIHsKIAltb2RlbCA9ICJBdG1lbCBBVDkxU0FNOU0xMEc0NS1FSyI7CkBAIC0xMzAsNiArMTMxLDIxIEBACiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAorCQkJYWRjMDogYWRjQGZmZmIwMDAwIHsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBpbmN0cmwtMCA9IDwKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDAKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDEKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDIKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDMKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDQKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDUKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDYKKwkJCQkJJnBpbmN0cmxfYWRjMF9hZDc+OworCQkJCWF0bWVsLGFkYy10cy13aXJlcyA9IDw0PjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCiAJCQlwd20wOiBwd21AZmZmYjgwMDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIApAQCAtMjE2LDE0ICsyMzIsMTQgQEAKIAogCQlkNiB7CiAJCQlsYWJlbCA9ICJkNiI7Ci0JCQlwd21zID0gPCZwd20wIDMgNTAwMCAwPjsKKwkJCXB3bXMgPSA8JnB3bTAgMyA1MDAwIFBXTV9QT0xBUklUWV9JTlZFUlRFRD47CiAJCQltYXgtYnJpZ2h0bmVzcyA9IDwyNTU+OwogCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gIm5hbmQtZGlzayI7CiAJCX07CiAKIAkJZDcgewogCQkJbGFiZWwgPSAiZDciOwotCQkJcHdtcyA9IDwmcHdtMCAxIDUwMDAgMD47CisJCQlwd21zID0gPCZwd20wIDEgNTAwMCBQV01fUE9MQVJJVFlfSU5WRVJURUQ+OwogCQkJbWF4LWJyaWdodG5lc3MgPSA8MjU1PjsKIAkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJtbWMwIjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bjEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOW4xMi5kdHNpCmluZGV4IDlmMDQ4MDguLmQxYjgyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bjEyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTIuZHRzaQpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BpbmN0cmwvYXQ5MS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2F0OTEuaD4KIAogLyB7CiAJbW9kZWwgPSAiQXRtZWwgQVQ5MVNBTTlOMTIgU29DIjsKQEAgLTQ5LDYgKzUwLDE4IEBACiAJCXJlZyA9IDwweDIwMDAwMDAwIDB4MTAwMDAwMDA+OwogCX07CiAKKwlzbG93X3h0YWw6IHNsb3dfeHRhbCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwl9OworCisJbWFpbl94dGFsOiBtYWluX3h0YWwgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJfTsKKwogCWFoYiB7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNzUsOCArODgsMjgwIEBACiAJCQl9OwogCiAJCQlwbWM6IHBtY0BmZmZmZmMwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLXBtYyI7Ci0JCQkJcmVnID0gPDB4ZmZmZmZjMDAgMHgxMDA+OworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTluMTItcG1jIjsKKwkJCQlyZWcgPSA8MHhmZmZmZmMwMCAweDIwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKworCQkJCW1haW5fcmNfb3NjOiBtYWluX3JjX29zYyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstbWFpbi1yYy1vc2MiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JnBtYyBBVDkxX1BNQ19NT1NDUkNTPjsKKwkJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwkJCQkJY2xvY2stYWNjdXJhY3kgPSA8NTAwMDAwMDA+OworCQkJCX07CisKKwkJCQltYWluX29zYzogbWFpbl9vc2MgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtY2xrLW1haW4tb3NjIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTU9TQ1M+OworCQkJCQljbG9ja3MgPSA8Jm1haW5feHRhbD47CisJCQkJfTsKKworCQkJCW1haW46IG1haW5jayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstbWFpbiI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmcG1jIEFUOTFfUE1DX01PU0NTRUxTPjsKKwkJCQkJY2xvY2tzID0gPCZtYWluX3JjX29zYz4sIDwmbWFpbl9vc2M+OworCQkJCX07CisKKwkJCQlwbGxhOiBwbGxhY2sgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtY2xrLXBsbCI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmcG1jIEFUOTFfUE1DX0xPQ0tBPjsKKwkJCQkJY2xvY2tzID0gPCZtYWluPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlhdG1lbCxjbGstaW5wdXQtcmFuZ2UgPSA8MjAwMDAwMCAzMjAwMDAwMD47CisJCQkJCSNhdG1lbCxwbGwtY2xrLW91dHB1dC1yYW5nZS1jZWxscyA9IDw0PjsKKwkJCQkJYXRtZWwscGxsLWNsay1vdXRwdXQtcmFuZ2VzID0gPDc0NTAwMDAwMCA4MDAwMDAwMDAgMCAwPiwKKwkJCQkJCQkJICAgICAgPDY5NTAwMDAwMCA3NTAwMDAwMDAgMSAwPiwKKwkJCQkJCQkJICAgICAgPDY0NTAwMDAwMCA3MDAwMDAwMDAgMiAwPiwKKwkJCQkJCQkJICAgICAgPDU5NTAwMDAwMCA2NTAwMDAwMDAgMyAwPiwKKwkJCQkJCQkJICAgICAgPDU0NTAwMDAwMCA2MDAwMDAwMDAgMCAxPiwKKwkJCQkJCQkJICAgICAgPDQ5NTAwMDAwMCA1NTUwMDAwMDAgMSAxPiwKKwkJCQkJCQkJICAgICAgPDQ0NTAwMDAwMCA1MDAwMDAwMDAgMSAyPiwKKwkJCQkJCQkJICAgICAgPDQwMDAwMDAwMCA0NTAwMDAwMDAgMSAzPjsKKwkJCQl9OworCisJCQkJcGxsYWRpdjogcGxsYWRpdmNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1wbGxkaXYiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmcGxsYT47CisJCQkJfTsKKworCQkJCXBsbGI6IHBsbGJjayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstcGxsIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTE9DS0I+OworCQkJCQljbG9ja3MgPSA8Jm1haW4+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWF0bWVsLGNsay1pbnB1dC1yYW5nZSA9IDwyMDAwMDAwIDMyMDAwMDAwPjsKKwkJCQkJI2F0bWVsLHBsbC1jbGstb3V0cHV0LXJhbmdlLWNlbGxzID0gPDM+OworCQkJCQlhdG1lbCxwbGwtY2xrLW91dHB1dC1yYW5nZXMgPSA8MzAwMDAwMDAgMTAwMDAwMDAwIDA+OworCQkJCX07CisKKwkJCQltY2s6IG1hc3RlcmNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYXN0ZXIiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JnBtYyBBVDkxX1BNQ19NQ0tSRFk+OworCQkJCQljbG9ja3MgPSA8JmNsazMyaz4sIDwmbWFpbj4sIDwmcGxsYWRpdj4sIDwmcGxsYj47CisJCQkJCWF0bWVsLGNsay1vdXRwdXQtcmFuZ2UgPSA8MCAxMzMzMzMzMzM+OworCQkJCQlhdG1lbCxjbGstZGl2aXNvcnMgPSA8MSAyIDQgMz47CisJCQkJCWF0bWVsLG1hc3Rlci1jbGstaGF2ZS1kaXYzLXByZXM7CisJCQkJfTsKKworCQkJCXVzYjogdXNiY2sgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05bjEyLWNsay11c2IiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmcGxsYj47CisJCQkJfTsKKworCQkJCXByb2c6IHByb2djayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstcHJvZ3JhbW1hYmxlIjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwbWM+OworCQkJCQljbG9ja3MgPSA8JmNsazMyaz4sIDwmbWFpbj4sIDwmcGxsYWRpdj4sIDwmcGxsYj4sIDwmbWNrPjsKKworCQkJCQlwcm9nMDogcHJvZzAgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDA+OworCQkJCQkJaW50ZXJydXB0cyA9IDxBVDkxX1BNQ19QQ0tSRFkoMCk+OworCQkJCQl9OworCisJCQkJCXByb2cxOiBwcm9nMSB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MT47CisJCQkJCQlpbnRlcnJ1cHRzID0gPEFUOTFfUE1DX1BDS1JEWSgxKT47CisJCQkJCX07CisJCQkJfTsKKworCQkJCXN5c3RlbWNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWNsay1zeXN0ZW0iOworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQkJZGRyY2s6IGRkcmNrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwyPjsKKwkJCQkJCWNsb2NrcyA9IDwmbWNrPjsKKwkJCQkJfTsKKworCQkJCQlsY2RjazogbGNkY2sgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDM+OworCQkJCQkJY2xvY2tzID0gPCZtY2s+OworCQkJCQl9OworCisJCQkJCXVocGNrOiB1aHBjayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8Nj47CisJCQkJCQljbG9ja3MgPSA8JnVzYj47CisJCQkJCX07CisKKwkJCQkJdWRwY2s6IHVkcGNrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw3PjsKKwkJCQkJCWNsb2NrcyA9IDwmdXNiPjsKKwkJCQkJfTsKKworCQkJCQlwY2swOiBwY2swIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw4PjsKKwkJCQkJCWNsb2NrcyA9IDwmcHJvZzA+OworCQkJCQl9OworCisJCQkJCXBjazE6IHBjazEgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDk+OworCQkJCQkJY2xvY2tzID0gPCZwcm9nMT47CisJCQkJCX07CisJCQkJfTsKKworCQkJCXBlcmlwaGNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1wZXJpcGhlcmFsIjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8Jm1jaz47CisKKwkJCQkJcGlvQUJfY2xrOiBwaW9BQl9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI+OworCQkJCQl9OworCisJCQkJCXBpb0NEX2NsazogcGlvQ0RfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwzPjsKKwkJCQkJfTsKKworCQkJCQlmdXNlX2NsazogZnVzZV9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDQ+OworCQkJCQl9OworCisJCQkJCXVzYXJ0MF9jbGs6IHVzYXJ0MF9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDU+OworCQkJCQl9OworCisJCQkJCXVzYXJ0MV9jbGs6IHVzYXJ0MV9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDY+OworCQkJCQl9OworCisJCQkJCXVzYXJ0Ml9jbGs6IHVzYXJ0Ml9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDc+OworCQkJCQl9OworCisJCQkJCXVzYXJ0M19jbGs6IHVzYXJ0M19jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDg+OworCQkJCQl9OworCisJCQkJCXR3aTBfY2xrOiB0d2kwX2NsayB7CisJCQkJCQlyZWcgPSA8OT47CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCX07CisKKwkJCQkJdHdpMV9jbGs6IHR3aTFfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxMD47CisJCQkJCX07CisKKwkJCQkJbWNpMF9jbGs6IG1jaTBfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxMj47CisJCQkJCX07CisKKwkJCQkJc3BpMF9jbGs6IHNwaTBfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxMz47CisJCQkJCX07CisKKwkJCQkJc3BpMV9jbGs6IHNwaTFfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxND47CisJCQkJCX07CisKKwkJCQkJdWFydDBfY2xrOiB1YXJ0MF9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDE1PjsKKwkJCQkJfTsKKworCQkJCQl1YXJ0MV9jbGs6IHVhcnQxX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTY+OworCQkJCQl9OworCisJCQkJCXRjYl9jbGs6IHRjYl9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDE3PjsKKwkJCQkJfTsKKworCQkJCQlwd21fY2xrOiBwd21fY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxOD47CisJCQkJCX07CisKKwkJCQkJYWRjX2NsazogYWRjX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTk+OworCQkJCQl9OworCisJCQkJCWRtYTBfY2xrOiBkbWEwX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MjA+OworCQkJCQl9OworCisJCQkJCXVocGhzX2NsazogdWhwaHNfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwyMj47CisJCQkJCX07CisKKwkJCQkJdWRwaHNfY2xrOiB1ZHBoc19jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDIzPjsKKwkJCQkJfTsKKworCQkJCQlsY2RjX2NsazogbGNkY19jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI1PjsKKwkJCQkJfTsKKworCQkJCQlzaGFfY2xrOiBzaGFfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwyNz47CisJCQkJCX07CisKKwkJCQkJc3NjMF9jbGs6IHNzYzBfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwyOD47CisJCQkJCX07CisKKwkJCQkJYWVzX2NsazogYWVzX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8Mjk+OworCQkJCQl9OworCisJCQkJCXRybmdfY2xrOiB0cm5nX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MzA+OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCiAJCQlyc3RjQGZmZmZmZTAwIHsKQEAgLTg4LDYgKzM3Myw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1waXQiOwogCQkJCXJlZyA9IDwweGZmZmZmZTMwIDB4Zj47CiAJCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CisJCQkJY2xvY2tzID0gPCZtY2s+OwogCQkJfTsKIAogCQkJc2hkd2NAZmZmZmZlMTAgewpAQCAtOTUsMTIgKzM4MSwzOCBAQAogCQkJCXJlZyA9IDwweGZmZmZmZTEwIDB4MTA+OwogCQkJfTsKIAorCQkJc2NrY0BmZmZmZmU1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXNja2MiOworCQkJCXJlZyA9IDwweGZmZmZmZTUwIDB4ND47CisKKwkJCQlzbG93X29zYzogc2xvd19vc2MgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2xrLXNsb3ctb3NjIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8JnNsb3dfeHRhbD47CisJCQkJfTsKKworCQkJCXNsb3dfcmNfb3NjOiBzbG93X3JjX29zYyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdy1yYy1vc2MiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJCQkJCWNsb2NrLWFjY3VyYWN5ID0gPDUwMDAwMDAwPjsKKwkJCQl9OworCisJCQkJY2xrMzJrOiBzbGNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93IjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8JnNsb3dfcmNfb3NjPiwgPCZzbG93X29zYz47CisJCQkJfTsKKwkJCX07CisKIAkJCW1tYzA6IG1tY0BmMDAwODAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxoc21jaSI7CiAJCQkJcmVnID0gPDB4ZjAwMDgwMDAgMHg2MDA+OwogCQkJCWludGVycnVwdHMgPSA8MTIgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKIAkJCQlkbWFzID0gPCZkbWEgMSBBVDkxX0RNQV9DRkdfUEVSX0lEKDApPjsKIAkJCQlkbWEtbmFtZXMgPSAicnh0eCI7CisJCQkJY2xvY2tzID0gPCZtY2kwX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAibWNpX2NsayI7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTExMCwxMiArNDIyLDE2IEBACiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXRjYiI7CiAJCQkJcmVnID0gPDB4ZjgwMDgwMDAgMHgxMDA+OwogCQkJCWludGVycnVwdHMgPSA8MTcgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKKwkJCQljbG9ja3MgPSA8JnRjYl9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInQwX2NsayI7CiAJCQl9OwogCiAJCQl0Y2IxOiB0aW1lckBmODAwYzAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXRjYiI7CiAJCQkJcmVnID0gPDB4ZjgwMGMwMDAgMHgxMDA+OwogCQkJCWludGVycnVwdHMgPSA8MTcgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKKwkJCQljbG9ja3MgPSA8JnRjYl9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInQwX2NsayI7CiAJCQl9OwogCiAJCQlkbWE6IGRtYS1jb250cm9sbGVyQGZmZmZlYzAwIHsKQEAgLTEyMyw2ICs0MzksOCBAQAogCQkJCXJlZyA9IDwweGZmZmZlYzAwIDB4MjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIwIElSUV9UWVBFX0xFVkVMX0hJR0ggMD47CiAJCQkJI2RtYS1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmRtYTBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJkbWFfY2xrIjsKIAkJCX07CiAKIAkJCXBpbmN0cmxAZmZmZmY0MDAgewpAQCAtMzkyLDYgKzcxMCw3IEBACiAJCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCWNsb2NrcyA9IDwmcGlvQUJfY2xrPjsKIAkJCQl9OwogCiAJCQkJcGlvQjogZ3Bpb0BmZmZmZjYwMCB7CkBAIC00MDIsNiArNzIxLDcgQEAKIAkJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJY2xvY2tzID0gPCZwaW9BQl9jbGs+OwogCQkJCX07CiAKIAkJCQlwaW9DOiBncGlvQGZmZmZmODAwIHsKQEAgLTQxMiw2ICs3MzIsNyBAQAogCQkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQljbG9ja3MgPSA8JnBpb0NEX2Nsaz47CiAJCQkJfTsKIAogCQkJCXBpb0Q6IGdwaW9AZmZmZmZhMDAgewpAQCAtNDIyLDYgKzc0Myw3IEBACiAJCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCWNsb2NrcyA9IDwmcGlvQ0RfY2xrPjsKIAkJCQl9OwogCQkJfTsKIApAQCAtNDMxLDYgKzc1Myw4IEBACiAJCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZGJndT47CisJCQkJY2xvY2tzID0gPCZtY2s+OworCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtNDQzLDYgKzc2Nyw4IEBACiAJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zc2MwX3R4ICZwaW5jdHJsX3NzYzBfcng+OworCQkJCWNsb2NrcyA9IDwmc3NjMF9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInBjbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC00NTIsNiArNzc4LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDUgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDA+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQwX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC00NjEsNiArNzg5LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDYgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDE+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQxX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC00NzAsNiArODAwLDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDI+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQyX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC00NzksNiArODExLDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDggSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDM+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQzX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC00OTMsNiArODI3LDcgQEAKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMwPjsKKwkJCQljbG9ja3MgPSA8JnR3aTBfY2xrPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtNTA3LDYgKzg0Miw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJCQkJY2xvY2tzID0gPCZ0d2kxX2Nsaz47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTUyMSw2ICs4NTcsOCBAQAogCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc3BpMD47CisJCQkJY2xvY2tzID0gPCZzcGkwX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAic3BpX2NsayI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTUzNSw2ICs4NzMsOCBAQAogCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc3BpMT47CisJCQkJY2xvY2tzID0gPCZzcGkxX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAic3BpX2NsayI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTU1NCw2ICs4OTQsNyBAQAogCQkJCXJlZyA9IDwweGY4MDM0MDAwIDB4MzAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDE4IElSUV9UWVBFX0xFVkVMX0hJR0ggND47CiAJCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCQljbG9ja3MgPSA8JnB3bV9jbGs+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCQl9OwpAQCAtNTg0LDYgKzkyNSw5IEBACiAJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtb2hjaSIsICJ1c2Itb2hjaSI7CiAJCQlyZWcgPSA8MHgwMDUwMDAwMCAweDAwMTAwMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MjIgSVJRX1RZUEVfTEVWRUxfSElHSCAyPjsKKwkJCWNsb2NrcyA9IDwmdXNiPiwgPCZ1aHBoc19jbGs+LCA8JnVkcGhzX2Nsaz4sCisJCQkJIDwmdWhwY2s+OworCQkJY2xvY2stbmFtZXMgPSAidXNiX2NsayIsICJvaGNpX2NsayIsICJoY2xrIiwgInVocGNrIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bjEyZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTJlay5kdHMKaW5kZXggOTI0YTZhNi4uNjRiYmU0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTJlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTJlay5kdHMKQEAgLTIxLDYgKzIxLDE0IEBACiAJCXJlZyA9IDwweDIwMDAwMDAwIDB4ODAwMDAwMD47CiAJfTsKIAorCXNsb3dfeHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJfTsKKworCW1haW5feHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMD47CisJfTsKKwogCWNsb2NrcyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05cmwuZHRzaQppbmRleCA5MmE1MmZhLi4xZGExODMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXJsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTlybC5kdHNpCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svYXQ5MS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3B3bS9wd20uaD4KIAogLyB7CiAJbW9kZWwgPSAiQXRtZWwgQVQ5MVNBTTlSTCBmYW1pbHkgU29DIjsKQEAgLTMyLDYgKzMzLDcgQEAKIAkJaTJjMSA9ICZpMmMxOwogCQlzc2MwID0gJnNzYzA7CiAJCXNzYzEgPSAmc3NjMTsKKwkJcHdtMCA9ICZwd20wOwogCX07CiAKIAljcHVzIHsKQEAgLTQ4LDEyICs1MCw0MyBAQAogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDA0MDAwMDAwPjsKIAl9OwogCisJc2xvd194dGFsOiBzbG93X3h0YWwgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJfTsKKworCW1haW5feHRhbDogbWFpbl94dGFsIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCX07CisKKwljbG9ja3MgeworCQlhZGNfb3BfY2xrOiBhZGNfb3BfY2xreworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMD47CisJCX07CisJfTsKKwogCWFoYiB7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzOwogCisJCWZiMDogZmJAMDA1MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsLWxjZGMiOworCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MjMgSVJRX1RZUEVfTEVWRUxfSElHSCAzPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmI+OworCQkJY2xvY2tzID0gPCZsY2RfY2xrPiwgPCZsY2RfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImhjbGsiLCAibGNkY19jbGsiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQluYW5kMDogbmFuZEA0MDAwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtbmFuZCI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTE4Nyw2ICsyMjAsMTYgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAorCQkJcHdtMDogcHdtQGZmZmM4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05cmwtcHdtIjsKKwkJCQlyZWcgPSA8MHhmZmZjODAwMCAweDMwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxOSBJUlFfVFlQRV9MRVZFTF9ISUdIIDQ+OworCQkJCSNwd20tY2VsbHMgPSA8Mz47CisJCQkJY2xvY2tzID0gPCZwd21fY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJwd21fY2xrIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwogCQkJc3BpMDogc3BpQGZmZmNjMDAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTIwMCw2ICsyNDMsMTExIEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCWFkYzA6IGFkY0BmZmZkMDAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsLWFkYyI7CisJCQkJcmVnID0gPDB4ZmZmZDAwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MjAgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKKwkJCQljbG9ja3MgPSA8JmFkY19jbGs+LCA8JmFkY19vcF9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImFkY19jbGsiLCAiYWRjX29wX2NsayI7CisJCQkJYXRtZWwsYWRjLXVzZS1leHRlcm5hbC10cmlnZ2VyczsKKwkJCQlhdG1lbCxhZGMtY2hhbm5lbHMtdXNlZCA9IDwweDNmPjsKKwkJCQlhdG1lbCxhZGMtdnJlZiA9IDwzMzAwPjsKKwkJCQlhdG1lbCxhZGMtc3RhcnR1cC10aW1lID0gPDQwPjsKKwkJCQlhdG1lbCxhZGMtcmVzID0gPDggMTA+OworCQkJCWF0bWVsLGFkYy1yZXMtbmFtZXMgPSAibG93cmVzIiwgImhpZ2hyZXMiOworCQkJCWF0bWVsLGFkYy11c2UtcmVzID0gImhpZ2hyZXMiOworCisJCQkJdHJpZ2dlckAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQl0cmlnZ2VyLW5hbWUgPSAidGltZXItY291bnRlci0wIjsKKwkJCQkJdHJpZ2dlci12YWx1ZSA9IDwweDE+OworCQkJCX07CisJCQkJdHJpZ2dlckAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQl0cmlnZ2VyLW5hbWUgPSAidGltZXItY291bnRlci0xIjsKKwkJCQkJdHJpZ2dlci12YWx1ZSA9IDwweDM+OworCQkJCX07CisKKwkJCQl0cmlnZ2VyQDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCXRyaWdnZXItbmFtZSA9ICJ0aW1lci1jb3VudGVyLTIiOworCQkJCQl0cmlnZ2VyLXZhbHVlID0gPDB4NT47CisJCQkJfTsKKworCQkJCXRyaWdnZXJAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJdHJpZ2dlci1uYW1lID0gImV4dGVybmFsIjsKKwkJCQkJdHJpZ2dlci12YWx1ZSA9IDwweDEzPjsKKwkJCQkJdHJpZ2dlci1leHRlcm5hbDsKKwkJCQl9OworCQkJfTsKKworCQkJdXNiMDogZ2FkZ2V0QGZmZmQ0MDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05cmwtdWRjIjsKKwkJCQlyZWcgPSA8MHgwMDYwMDAwMCAweDEwMDAwMD4sCisJCQkJICAgICAgPDB4ZmZmZDQwMDAgMHg0MDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIElSUV9UWVBFX0xFVkVMX0hJR0ggMj47CisJCQkJY2xvY2tzID0gPCZ1ZHBoc19jbGs+LCA8JnV0bWk+OworCQkJCWNsb2NrLW5hbWVzID0gInBjbGsiLCAiaGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJCWVwMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJYXRtZWwsZmlmby1zaXplID0gPDY0PjsKKwkJCQkJYXRtZWwsbmItYmFua3MgPSA8MT47CisJCQkJfTsKKworCQkJCWVwMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJYXRtZWwsZmlmby1zaXplID0gPDEwMjQ+OworCQkJCQlhdG1lbCxuYi1iYW5rcyA9IDwyPjsKKwkJCQkJYXRtZWwsY2FuLWRtYTsKKwkJCQkJYXRtZWwsY2FuLWlzb2M7CisJCQkJfTsKKworCQkJCWVwMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJYXRtZWwsZmlmby1zaXplID0gPDEwMjQ+OworCQkJCQlhdG1lbCxuYi1iYW5rcyA9IDwyPjsKKwkJCQkJYXRtZWwsY2FuLWRtYTsKKwkJCQkJYXRtZWwsY2FuLWlzb2M7CisJCQkJfTsKKworCQkJCWVwMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJYXRtZWwsZmlmby1zaXplID0gPDEwMjQ+OworCQkJCQlhdG1lbCxuYi1iYW5rcyA9IDwzPjsKKwkJCQkJYXRtZWwsY2FuLWRtYTsKKwkJCQl9OworCisJCQkJZXA0IHsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlhdG1lbCxmaWZvLXNpemUgPSA8MTAyND47CisJCQkJCWF0bWVsLG5iLWJhbmtzID0gPDM+OworCQkJCQlhdG1lbCxjYW4tZG1hOworCQkJCX07CisKKwkJCQllcDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWF0bWVsLGZpZm8tc2l6ZSA9IDwxMDI0PjsKKwkJCQkJYXRtZWwsbmItYmFua3MgPSA8Mz47CisJCQkJCWF0bWVsLGNhbi1kbWE7CisJCQkJCWF0bWVsLGNhbi1pc29jOworCQkJCX07CisKKwkJCQllcDYgeworCQkJCQlyZWcgPSA8Nj47CisJCQkJCWF0bWVsLGZpZm8tc2l6ZSA9IDwxMDI0PjsKKwkJCQkJYXRtZWwsbmItYmFua3MgPSA8Mz47CisJCQkJCWF0bWVsLGNhbi1kbWE7CisJCQkJCWF0bWVsLGNhbi1pc29jOworCQkJCX07CisJCQl9OworCiAJCQlyYW1jMDogcmFtY0BmZmZmZWEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1zZHJhbWMiOwogCQkJCXJlZyA9IDwweGZmZmZlYTAwIDB4MjAwPjsKQEAgLTIzOCw2ICszODYsNDQgQEAKIAkJCQkJPDB4MDAzZmZmZmYgMHgwMDAxZmYzYz47ICAvKiBwaW9EICovCiAKIAkJCQkvKiBzaGFyZWQgcGluY3RybCBzZXR0aW5ncyAqLworCQkJCWFkYzAgeworCQkJCQlwaW5jdHJsX2FkYzBfdHM6IGFkYzBfdHMtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9BIDE3IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0EgMTggQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQSAxOSBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9BIDIwIEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCisJCQkJCXBpbmN0cmxfYWRjMF9hZDA6IGFkYzBfYWQwLTAgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0EgMTcgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9hZGMwX2FkMTogYWRjMF9hZDEtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPQSAxOCBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX2FkYzBfYWQyOiBhZGMwX2FkMi0wIHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9BIDE5IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCisJCQkJCXBpbmN0cmxfYWRjMF9hZDM6IGFkYzBfYWQzLTAgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0EgMjAgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9hZGMwX2FkNDogYWRjMF9hZDQtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCA2IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCisJCQkJCXBpbmN0cmxfYWRjMF9hZDU6IGFkYzBfYWQ1LTAgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0QgNyBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX2FkYzBfYWR0cmc6IGFkYzBfYWR0cmctMCB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPQiAxNSBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKwkJCQl9OworCiAJCQkJZGJndSB7CiAJCQkJCXBpbmN0cmxfZGJndTogZGJndS0wIHsKIAkJCQkJCWF0bWVsLHBpbnMgPQpAQCAtMjQ2LDYgKzQzMiwzMyBAQAogCQkJCQl9OwogCQkJCX07CiAKKwkJCQlmYiB7CisJCQkJCXBpbmN0cmxfZmI6IGZiLTAgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQyAxIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMyBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDUgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQyA2IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgNyBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDkgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQyAxMCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDExIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMTIgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQyAxMyBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDE1IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMTYgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQyAxNyBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDE4IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMTkgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQyAyMCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDIxIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMjIgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT4sCisJCQkJCQkJPEFUOTFfUElPQyAyMyBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9DIDI0IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0MgMjUgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisJCQkJfTsKKwogCQkJCWkyY19ncGlvMCB7CiAJCQkJCXBpbmN0cmxfaTJjX2dwaW8wOiBpMmNfZ3BpbzAtMCB7CiAJCQkJCQlhdG1lbCxwaW5zID0KQEAgLTMwNyw2ICs1MjAsNjEgQEAKIAkJCQkJfTsKIAkJCQl9OwogCisJCQkJcHdtMCB7CisJCQkJCXBpbmN0cmxfcHdtMF9wd20wXzA6IHB3bTBfcHdtMC0wIHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9CIDggQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9wd20wX3B3bTBfMTogcHdtMF9wd20wLTEgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0MgMiBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX3B3bTBfcHdtMF8yOiBwd20wX3B3bTAtMiB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCAxNCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX3B3bTBfcHdtMV8wOiBwd20wX3B3bTEtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPQiA5IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCisJCQkJCXBpbmN0cmxfcHdtMF9wd20xXzE6IHB3bTBfcHdtMS0xIHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9DIDMgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9wd20wX3B3bTFfMjogcHdtMF9wd20xLTIgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0QgMTUgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisKKwkJCQkJcGluY3RybF9wd20wX3B3bTJfMDogcHdtMF9wd20yLTAgeworCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0QgNSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX3B3bTBfcHdtMl8xOiBwd20wX3B3bTItMSB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCAxMiBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX3B3bTBfcHdtMl8yOiBwd20wX3B3bTItMiB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCAxNiBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsKKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX3B3bTBfcHdtM18wOiBwd20wX3B3bTMtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0gPEFUOTFfUElPRCA4IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCisJCQkJCXBpbmN0cmxfcHdtMF9wd20zXzE6IHB3bTBfcHdtMy0xIHsKKwkJCQkJCWF0bWVsLHBpbnMgPSA8QVQ5MV9QSU9EIDE4IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+OworCQkJCQl9OworCQkJCX07CisKKwkJCQlzcGkwIHsKKwkJCQkJcGluY3RybF9zcGkwOiBzcGkwLTAgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSAyNSBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPiwKKwkJCQkJCQk8QVQ5MV9QSU9BIDI2IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+LAorCQkJCQkJCTxBVDkxX1BJT0EgMjcgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT47CisJCQkJCX07CisJCQkJfTsKKwogCQkJCXNzYzAgewogCQkJCQlwaW5jdHJsX3NzYzBfdHg6IHNzYzBfdHgtMCB7CiAJCQkJCQlhdG1lbCxwaW5zID0KQEAgLTMzOSwxNSArNjA3LDYgQEAKIAkJCQkJfTsKIAkJCQl9OwogCi0JCQkJc3BpMCB7Ci0JCQkJCXBpbmN0cmxfc3BpMDogc3BpMC0wIHsKLQkJCQkJCWF0bWVsLHBpbnMgPQotCQkJCQkJCTxBVDkxX1BJT0EgMjUgQVQ5MV9QRVJJUEhfQSBBVDkxX1BJTkNUUkxfTk9ORT4sCi0JCQkJCQkJPEFUOTFfUElPQSAyNiBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPiwKLQkJCQkJCQk8QVQ5MV9QSU9BIDI3IEFUOTFfUEVSSVBIX0EgQVQ5MV9QSU5DVFJMX05PTkU+OwotCQkJCQl9OwotCQkJCX07Ci0KIAkJCQl0Y2IwIHsKIAkJCQkJcGluY3RybF90Y2IwX3RjbGswOiB0Y2IwX3RjbGswLTAgewogCQkJCQkJYXRtZWwscGlucyA9IDxBVDkxX1BJT0EgMyBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsKQEAgLTU0OCwxNyArODA3LDExIEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAotCQkJCWNsazMyazogc2xjayB7Ci0JCQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47Ci0JCQkJfTsKLQogCQkJCW1haW46IG1haW5jayB7CiAJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstbWFpbiI7CiAJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCQkJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmcG1jIEFUOTFfUE1DX01PU0NTPjsKLQkJCQkJY2xvY2tzID0gPCZjbGszMms+OworCQkJCQljbG9ja3MgPSA8Jm1haW5feHRhbD47CiAJCQkJfTsKIAogCQkJCXBsbGE6IHBsbGFjayB7CkBAIC01NjgsOCArODIxLDkgQEAKIAkJCQkJY2xvY2tzID0gPCZtYWluPjsKIAkJCQkJcmVnID0gPDA+OwogCQkJCQlhdG1lbCxjbGstaW5wdXQtcmFuZ2UgPSA8MTAwMDAwMCAzMjAwMDAwMD47Ci0JCQkJCSNhdG1lbCxwbGwtY2xrLW91dHB1dC1yYW5nZS1jZWxscyA9IDw0PjsKLQkJCQkJYXRtZWwscGxsLWNsay1vdXRwdXQtcmFuZ2VzID0gPDgwMDAwMDAwIDIwMDAwMDAwMCAxOTAwMDAwMDAgMjQwMDAwMDAwPjsKKwkJCQkJI2F0bWVsLHBsbC1jbGstb3V0cHV0LXJhbmdlLWNlbGxzID0gPDM+OworCQkJCQlhdG1lbCxwbGwtY2xrLW91dHB1dC1yYW5nZXMgPSA8ODAwMDAwMDAgMjAwMDAwMDAwIDA+LAorCQkJCQkJCQk8MTkwMDAwMDAwIDI0MDAwMDAwMCAyPjsKIAkJCQl9OwogCiAJCQkJdXRtaTogdXRtaWNrIHsKQEAgLTU4Niw3ICs4NDAsNyBAQAogCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTUNLUkRZPjsKIAkJCQkJY2xvY2tzID0gPCZjbGszMms+LCA8Jm1haW4+LCA8JnBsbGE+LCA8JnV0bWk+OwogCQkJCQlhdG1lbCxjbGstb3V0cHV0LXJhbmdlID0gPDAgOTQwMDAwMDA+OwotCQkJCQlhdG1lbCxjbGstZGl2aXNvcnMgPSA8MSAyIDQgMz47CisJCQkJCWF0bWVsLGNsay1kaXZpc29ycyA9IDwxIDIgNCAwPjsKIAkJCQl9OwogCiAJCQkJcHJvZzogcHJvZ2NrIHsKQEAgLTc2OSw2ICsxMDIzLDMyIEBACiAJCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CisKKwkJCXNja2NAZmZmZmZkNTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1zY2tjIjsKKwkJCQlyZWcgPSA8MHhmZmZmZmQ1MCAweDQ+OworCisJCQkJc2xvd19vc2M6IHNsb3dfb3NjIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93LW9zYyI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJYXRtZWwsc3RhcnR1cC10aW1lLXVzZWMgPSA8MTIwMDAwMD47CisJCQkJCWNsb2NrcyA9IDwmc2xvd194dGFsPjsKKwkJCQl9OworCisJCQkJc2xvd19yY19vc2M6IHNsb3dfcmNfb3NjIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93LXJjLW9zYyI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJYXRtZWwsc3RhcnR1cC10aW1lLXVzZWMgPSA8NzU+OworCQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCQkJCQljbG9jay1hY2N1cmFjeSA9IDw1MDAwMDAwMD47CisJCQkJfTsKKworCQkJCWNsazMyazogc2xjayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdyI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJY2xvY2tzID0gPCZzbG93X3JjX29zYyAmc2xvd19vc2M+OworCQkJCX07CisJCQl9OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05cmxlay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXJsZWsuZHRzCmluZGV4IGNkZGIzNzguLmQ0YTAxMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05cmxlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTlybGVrLmR0cwpAQCAtMjAsNiArMjAsMTUgQEAKIAkJcmVnID0gPDB4MjAwMDAwMDAgMHg0MDAwMDAwPjsKIAl9OwogCisKKwlzbG93X3h0YWwgeworCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCX07CisKKwltYWluX3h0YWwgeworCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC0zMiw2ICs0MSwzNyBAQAogCX07CiAKIAlhaGIgeworCQlmYjA6IGZiQDAwNTAwMDAwIHsKKwkJCWRpc3BsYXkgPSA8JmRpc3BsYXkwPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJZGlzcGxheTA6IGRpc3BsYXkgeworCQkJCWJpdHMtcGVyLXBpeGVsID0gPDE2PjsKKwkJCQlhdG1lbCxsY2Rjb24tYmFja2xpZ2h0OworCQkJCWF0bWVsLGRtYWNvbiA9IDwweDE+OworCQkJCWF0bWVsLGxjZGNvbjIgPSA8MHg4MDAwODAwMj47CisJCQkJYXRtZWwsZ3VhcmQtdGltZSA9IDwxPjsKKwkJCQlhdG1lbCxsY2Qtd2lyaW5nLW1vZGUgPSAiUkdCIjsKKworCQkJCWRpc3BsYXktdGltaW5ncyB7CisJCQkJCW5hdGl2ZS1tb2RlID0gPCZ0aW1pbmcwPjsKKwkJCQkJdGltaW5nMDogdGltaW5nMCB7CisJCQkJCQljbG9jay1mcmVxdWVuY3kgPSA8NDk2NTAwMD47CisJCQkJCQloYWN0aXZlID0gPDI0MD47CisJCQkJCQl2YWN0aXZlID0gPDMyMD47CisJCQkJCQloYmFjay1wb3JjaCA9IDwxPjsKKwkJCQkJCWhmcm9udC1wb3JjaCA9IDwzMz47CisJCQkJCQl2YmFjay1wb3JjaCA9IDwxPjsKKwkJCQkJCXZmcm9udC1wb3JjaCA9IDwwPjsKKwkJCQkJCWhzeW5jLWxlbiA9IDw1PjsKKwkJCQkJCXZzeW5jLWxlbiA9IDwxPjsKKwkJCQkJCWhzeW5jLWFjdGl2ZSA9IDwxPjsKKwkJCQkJCXZzeW5jLWFjdGl2ZSA9IDwxPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwogCQluYW5kMDogbmFuZEA0MDAwMDAwMCB7CiAJCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKIAkJCW5hbmQtZWNjLW1vZGUgPSAic29mdCI7CkBAIC05Miw2ICsxMzIsNDMgQEAKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCisJCQlhZGMwOiBhZGNAZmZmZDAwMDAgeworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGluY3RybC0wID0gPAorCQkJCQkmcGluY3RybF9hZGMwX2FkMAorCQkJCQkmcGluY3RybF9hZGMwX2FkMQorCQkJCQkmcGluY3RybF9hZGMwX2FkMgorCQkJCQkmcGluY3RybF9hZGMwX2FkMworCQkJCQkmcGluY3RybF9hZGMwX2FkNAorCQkJCQkmcGluY3RybF9hZGMwX2FkNQorCQkJCQkmcGluY3RybF9hZGMwX2FkdHJnPjsKKwkJCQlhdG1lbCxhZGMtdHMtd2lyZXMgPSA8ND47CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJdXNiMDogZ2FkZ2V0QGZmZmQ0MDAwIHsKKwkJCQlhdG1lbCx2YnVzLWdwaW8gPSA8JnBpb0EgOCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQlzcGkwOiBzcGlAZmZmY2MwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQljcy1ncGlvcyA9IDwmcGlvQSAyOCAwPiwgPDA+LCA8MD4sIDwwPjsKKwkJCQltdGRfZGF0YWZsYXNoQDAgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0NDUiLCAiYXRtZWwsZGF0YWZsYXNoIjsKKwkJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTUwMDAwMDA+OworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCX07CisKKwkJCXB3bTA6IHB3bUBmZmZjODAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcHdtMF9wd20xXzI+LAorCQkJCQk8JnBpbmN0cmxfcHdtMF9wd20yXzI+OworCQkJfTsKKwogCQkJZGJndTogc2VyaWFsQGZmZmZmMjAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMTE3LDE4ICsxOTQsMjQgQEAKIAkJfTsKIAl9OwogCi0JbGVkcyB7Ci0JCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwlwd21sZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJwd20tbGVkcyI7CiAKIAkJZHMxIHsKIAkJCWxhYmVsID0gImRzMSI7Ci0JCQlncGlvcyA9IDwmcGlvRCAxNSBHUElPX0FDVElWRV9MT1c+OworCQkJcHdtcyA9IDwmcHdtMCAxIDUwMDAgUFdNX1BPTEFSSVRZX0lOVkVSVEVEPjsKKwkJCW1heC1icmlnaHRuZXNzID0gPDI1NT47CiAJCX07CiAKIAkJZHMyIHsKIAkJCWxhYmVsID0gImRzMiI7Ci0JCQlncGlvcyA9IDwmcGlvRCAxNiBHUElPX0FDVElWRV9MT1c+OworCQkJcHdtcyA9IDwmcHdtMCAyIDUwMDAgUFdNX1BPTEFSSVRZX0lOVkVSVEVEPjsKKwkJCW1heC1icmlnaHRuZXNzID0gPDI1NT47CiAJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CiAKIAkJZHMzIHsKIAkJCWxhYmVsID0gImRzMyI7CkBAIC0xNTQsNCArMjM3LDEyIEBACiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CiAJfTsKKworCWkyY0AwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlpMmNAMSB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaQppbmRleCBmYzEzYzkyLi4xYTU3Mjk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NS5kdHNpCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGluY3RybC9hdDkxLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svYXQ5MS5oPgogCiAvIHsKIAltb2RlbCA9ICJBdG1lbCBBVDkxU0FNOXg1IGZhbWlseSBTb0MiOwpAQCAtNTEsNiArNTIsMjQgQEAKIAkJcmVnID0gPDB4MjAwMDAwMDAgMHgxMDAwMDAwMD47CiAJfTsKIAorCXNsb3dfeHRhbDogc2xvd194dGFsIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCX07CisKKwltYWluX3h0YWw6IG1haW5feHRhbCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwl9OworCisJYWRjX29wX2NsazogYWRjX29wX2Nsa3sKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDA+OworCX07CisKIAlhaGIgewogCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTc3LDggKzk2LDI3MiBAQAogCQkJfTsKIAogCQkJcG1jOiBwbWNAZmZmZmZjMDAgewotCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1wbWMiOworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1wbWMiOwogCQkJCXJlZyA9IDwweGZmZmZmYzAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTEVWRUxfSElHSCA3PjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCisJCQkJbWFpbl9yY19vc2M6IG1haW5fcmNfb3NjIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluLXJjLW9zYyI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmcG1jIEFUOTFfUE1DX01PU0NSQ1M+OworCQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQkJCQljbG9jay1hY2N1cmFjeSA9IDw1MDAwMDAwMD47CisJCQkJfTsKKworCQkJCW1haW5fb3NjOiBtYWluX29zYyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstbWFpbi1vc2MiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JnBtYyBBVDkxX1BNQ19NT1NDUz47CisJCQkJCWNsb2NrcyA9IDwmbWFpbl94dGFsPjsKKwkJCQl9OworCisJCQkJbWFpbjogbWFpbmNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTU9TQ1NFTFM+OworCQkJCQljbG9ja3MgPSA8Jm1haW5fcmNfb3NjPiwgPCZtYWluX29zYz47CisJCQkJfTsKKworCQkJCXBsbGE6IHBsbGFjayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstcGxsIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTE9DS0E+OworCQkJCQljbG9ja3MgPSA8Jm1haW4+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWF0bWVsLGNsay1pbnB1dC1yYW5nZSA9IDwyMDAwMDAwIDMyMDAwMDAwPjsKKwkJCQkJI2F0bWVsLHBsbC1jbGstb3V0cHV0LXJhbmdlLWNlbGxzID0gPDQ+OworCQkJCQlhdG1lbCxwbGwtY2xrLW91dHB1dC1yYW5nZXMgPSA8NzQ1MDAwMDAwIDgwMDAwMDAwMCAwIDAKKwkJCQkJCQkJICAgICAgIDY5NTAwMDAwMCA3NTAwMDAwMDAgMSAwCisJCQkJCQkJCSAgICAgICA2NDUwMDAwMDAgNzAwMDAwMDAwIDIgMAorCQkJCQkJCQkgICAgICAgNTk1MDAwMDAwIDY1MDAwMDAwMCAzIDAKKwkJCQkJCQkJICAgICAgIDU0NTAwMDAwMCA2MDAwMDAwMDAgMCAxCisJCQkJCQkJCSAgICAgICA0OTUwMDAwMDAgNTU1MDAwMDAwIDEgMQorCQkJCQkJCQkgICAgICAgNDQ1MDAwMDAwIDUwMDAwMDAwMCAxIDIKKwkJCQkJCQkJICAgICAgIDQwMDAwMDAwMCA0NTAwMDAwMDAgMSAzPjsKKwkJCQl9OworCisJCQkJcGxsYWRpdjogcGxsYWRpdmNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1wbGxkaXYiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmcGxsYT47CisJCQkJfTsKKworCQkJCXV0bWk6IHV0bWljayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstdXRtaSI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmcG1jIEFUOTFfUE1DX0xPQ0tVPjsKKwkJCQkJY2xvY2tzID0gPCZtYWluPjsKKwkJCQl9OworCisJCQkJbWNrOiBtYXN0ZXJjayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstbWFzdGVyIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZwbWMgQVQ5MV9QTUNfTUNLUkRZPjsKKwkJCQkJY2xvY2tzID0gPCZjbGszMms+LCA8Jm1haW4+LCA8JnBsbGFkaXY+LCA8JnV0bWk+OworCQkJCQlhdG1lbCxjbGstb3V0cHV0LXJhbmdlID0gPDAgMTMzMzMzMzMzPjsKKwkJCQkJYXRtZWwsY2xrLWRpdmlzb3JzID0gPDEgMiA0IDM+OworCQkJCQlhdG1lbCxtYXN0ZXItY2xrLWhhdmUtZGl2My1wcmVzOworCQkJCX07CisKKwkJCQl1c2I6IHVzYmNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay11c2IiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmcGxsYWRpdj4sIDwmdXRtaT47CisJCQkJfTsKKworCQkJCXByb2c6IHByb2djayB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstcHJvZ3JhbW1hYmxlIjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwbWM+OworCQkJCQljbG9ja3MgPSA8JmNsazMyaz4sIDwmbWFpbj4sIDwmcGxsYWRpdj4sIDwmdXRtaT4sIDwmbWNrPjsKKworCQkJCQlwcm9nMDogcHJvZzAgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDA+OworCQkJCQkJaW50ZXJydXB0cyA9IDxBVDkxX1BNQ19QQ0tSRFkoMCk+OworCQkJCQl9OworCisJCQkJCXByb2cxOiBwcm9nMSB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MT47CisJCQkJCQlpbnRlcnJ1cHRzID0gPEFUOTFfUE1DX1BDS1JEWSgxKT47CisJCQkJCX07CisJCQkJfTsKKworCQkJCXNtZDogc21kY2xrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbWQiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmcGxsYWRpdj4sIDwmdXRtaT47CisJCQkJfTsKKworCQkJCXN5c3RlbWNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWNsay1zeXN0ZW0iOworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQkJZGRyY2s6IGRkcmNrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwyPjsKKwkJCQkJCWNsb2NrcyA9IDwmbWNrPjsKKwkJCQkJfTsKKworCQkJCQlzbWRjazogc21kY2sgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDQ+OworCQkJCQkJY2xvY2tzID0gPCZzbWQ+OworCQkJCQl9OworCisJCQkJCXVocGNrOiB1aHBjayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8Nj47CisJCQkJCQljbG9ja3MgPSA8JnVzYj47CisJCQkJCX07CisKKwkJCQkJdWRwY2s6IHVkcGNrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw3PjsKKwkJCQkJCWNsb2NrcyA9IDwmdXNiPjsKKwkJCQkJfTsKKworCQkJCQlwY2swOiBwY2swIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw4PjsKKwkJCQkJCWNsb2NrcyA9IDwmcHJvZzA+OworCQkJCQl9OworCisJCQkJCXBjazE6IHBjazEgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDk+OworCQkJCQkJY2xvY2tzID0gPCZwcm9nMT47CisJCQkJCX07CisJCQkJfTsKKworCQkJCXBlcmlwaGNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1wZXJpcGhlcmFsIjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8Jm1jaz47CisKKwkJCQkJcGlvQUJfY2xrOiBwaW9BQl9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI+OworCQkJCQl9OworCisJCQkJCXBpb0NEX2NsazogcGlvQ0RfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwzPjsKKwkJCQkJfTsKKworCQkJCQlzbWRfY2xrOiBzbWRfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw0PjsKKwkJCQkJfTsKKworCQkJCQl1c2FydDBfY2xrOiB1c2FydDBfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw1PjsKKwkJCQkJfTsKKworCQkJCQl1c2FydDFfY2xrOiB1c2FydDFfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw2PjsKKwkJCQkJfTsKKworCQkJCQl1c2FydDJfY2xrOiB1c2FydDJfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDw3PjsKKwkJCQkJfTsKKworCQkJCQl0d2kwX2NsazogdHdpMF9jbGsgeworCQkJCQkJcmVnID0gPDk+OworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQl9OworCisJCQkJCXR3aTFfY2xrOiB0d2kxX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTA+OworCQkJCQl9OworCisJCQkJCXR3aTJfY2xrOiB0d2kyX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTE+OworCQkJCQl9OworCisJCQkJCW1jaTBfY2xrOiBtY2kwX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTI+OworCQkJCQl9OworCisJCQkJCXNwaTBfY2xrOiBzcGkwX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTM+OworCQkJCQl9OworCisJCQkJCXNwaTFfY2xrOiBzcGkxX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTQ+OworCQkJCQl9OworCisJCQkJCXVhcnQwX2NsazogdWFydDBfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxNT47CisJCQkJCX07CisKKwkJCQkJdWFydDFfY2xrOiB1YXJ0MV9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDE2PjsKKwkJCQkJfTsKKworCQkJCQl0Y2IwX2NsazogdGNiMF9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDE3PjsKKwkJCQkJfTsKKworCQkJCQlwd21fY2xrOiBwd21fY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwxOD47CisJCQkJCX07CisKKwkJCQkJYWRjX2NsazogYWRjX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MTk+OworCQkJCQl9OworCisJCQkJCWRtYTBfY2xrOiBkbWEwX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MjA+OworCQkJCQl9OworCisJCQkJCWRtYTFfY2xrOiBkbWExX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8MjE+OworCQkJCQl9OworCisJCQkJCXVocGhzX2NsazogdWhwaHNfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwyMj47CisJCQkJCX07CisKKwkJCQkJdWRwaHNfY2xrOiB1ZHBoc19jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDIzPjsKKwkJCQkJfTsKKworCQkJCQltY2kxX2NsazogbWNpMV9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI2PjsKKwkJCQkJfTsKKworCQkJCQlzc2MwX2Nsazogc3NjMF9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI4PjsKKwkJCQkJfTsKKwkJCQl9OwogCQkJfTsKIAogCQkJcnN0Y0BmZmZmZmUwMCB7CkBAIC05NSwxOCArMzc4LDQ3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1waXQiOwogCQkJCXJlZyA9IDwweGZmZmZmZTMwIDB4Zj47CiAJCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CisJCQkJY2xvY2tzID0gPCZtY2s+OworCQkJfTsKKworCQkJc2NrY0BmZmZmZmU1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXNja2MiOworCQkJCXJlZyA9IDwweGZmZmZmZTUwIDB4ND47CisKKwkJCQlzbG93X29zYzogc2xvd19vc2MgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2xrLXNsb3ctb3NjIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8JnNsb3dfeHRhbD47CisJCQkJfTsKKworCQkJCXNsb3dfcmNfb3NjOiBzbG93X3JjX29zYyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdy1yYy1vc2MiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJCQkJCWNsb2NrLWFjY3VyYWN5ID0gPDUwMDAwMDAwPjsKKwkJCQl9OworCisJCQkJY2xrMzJrOiBzbGNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93IjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8JnNsb3dfcmNfb3NjPiwgPCZzbG93X29zYz47CisJCQkJfTsKIAkJCX07CiAKIAkJCXRjYjA6IHRpbWVyQGY4MDA4MDAwIHsKIAkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtdGNiIjsKIAkJCQlyZWcgPSA8MHhmODAwODAwMCAweDEwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwxNyBJUlFfVFlQRV9MRVZFTF9ISUdIIDA+OworCQkJCWNsb2NrcyA9IDwmdGNiMF9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInQwX2NsayI7CiAJCQl9OwogCiAJCQl0Y2IxOiB0aW1lckBmODAwYzAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXRjYiI7CiAJCQkJcmVnID0gPDB4ZjgwMGMwMDAgMHgxMDA+OwogCQkJCWludGVycnVwdHMgPSA8MTcgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKKwkJCQljbG9ja3MgPSA8JnRjYjBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ0MF9jbGsiOwogCQkJfTsKIAogCQkJZG1hMDogZG1hLWNvbnRyb2xsZXJAZmZmZmVjMDAgewpAQCAtMTE0LDYgKzQyNiw4IEBACiAJCQkJcmVnID0gPDB4ZmZmZmVjMDAgMHgyMDA+OwogCQkJCWludGVycnVwdHMgPSA8MjAgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKIAkJCQkjZG1hLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmZG1hMF9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImRtYV9jbGsiOwogCQkJfTsKIAogCQkJZG1hMTogZG1hLWNvbnRyb2xsZXJAZmZmZmVlMDAgewpAQCAtMTIxLDYgKzQzNSw4IEBACiAJCQkJcmVnID0gPDB4ZmZmZmVlMDAgMHgyMDA+OwogCQkJCWludGVycnVwdHMgPSA8MjEgSVJRX1RZUEVfTEVWRUxfSElHSCAwPjsKIAkJCQkjZG1hLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmZG1hMV9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImRtYV9jbGsiOwogCQkJfTsKIAogCQkJcGluY3RybEBmZmZmZjQwMCB7CkBAIC00NTMsNiArNzY5LDcgQEAKIAkJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJY2xvY2tzID0gPCZwaW9BQl9jbGs+OwogCQkJCX07CiAKIAkJCQlwaW9COiBncGlvQGZmZmZmNjAwIHsKQEAgLTQ2NCw2ICs3ODEsNyBAQAogCQkJCQkjZ3Bpby1saW5lcyA9IDwxOT47CiAJCQkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQljbG9ja3MgPSA8JnBpb0FCX2Nsaz47CiAJCQkJfTsKIAogCQkJCXBpb0M6IGdwaW9AZmZmZmY4MDAgewpAQCAtNDc0LDYgKzc5Miw3IEBACiAJCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCWNsb2NrcyA9IDwmcGlvQ0RfY2xrPjsKIAkJCQl9OwogCiAJCQkJcGlvRDogZ3Bpb0BmZmZmZmEwMCB7CkBAIC00ODUsNiArODA0LDcgQEAKIAkJCQkJI2dwaW8tbGluZXMgPSA8MjI+OwogCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJY2xvY2tzID0gPCZwaW9DRF9jbGs+OwogCQkJCX07CiAJCQl9OwogCkBAIC00OTcsNiArODE3LDggQEAKIAkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NzYzBfdHggJnBpbmN0cmxfc3NjMF9yeD47CisJCQkJY2xvY2tzID0gPCZzc2MwX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAicGNsayI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTUwNyw2ICs4MjksOCBAQAogCQkJCWRtYXMgPSA8JmRtYTAgMSBBVDkxX0RNQV9DRkdfUEVSX0lEKDApPjsKIAkJCQlkbWEtbmFtZXMgPSAicnh0eCI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQljbG9ja3MgPSA8Jm1jaTBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJtY2lfY2xrIjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNTE5LDYgKzg0Myw4IEBACiAJCQkJZG1hcyA9IDwmZG1hMSAxIEFUOTFfRE1BX0NGR19QRVJfSUQoMCk+OwogCQkJCWRtYS1uYW1lcyA9ICJyeHR4IjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCWNsb2NrcyA9IDwmbWNpMV9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gIm1jaV9jbGsiOwogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC01MzAsNiArODU2LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTEVWRUxfSElHSCA3PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9kYmd1PjsKKwkJCQljbG9ja3MgPSA8Jm1jaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC01MzksNiArODY3LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDUgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDA+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQwX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC01NDgsNiArODc4LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDYgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDE+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQxX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC01NTcsNiArODg5LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDI+OworCQkJCWNsb2NrcyA9IDwmdXNhcnQyX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC01NzEsNiArOTA1LDcgQEAKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMwPjsKKwkJCQljbG9ja3MgPSA8JnR3aTBfY2xrPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtNTg1LDYgKzkyMCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJCQkJY2xvY2tzID0gPCZ0d2kxX2Nsaz47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTU5OSw2ICs5MzUsNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OworCQkJCWNsb2NrcyA9IDwmdHdpMl9jbGs+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC02MDgsNiArOTQ1LDggQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDE1IElSUV9UWVBFX0xFVkVMX0hJR0ggNT47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDA+OworCQkJCWNsb2NrcyA9IDwmdWFydDBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ1c2FydCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTYxNyw2ICs5NTYsOCBAQAogCQkJCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CisJCQkJY2xvY2tzID0gPCZ1YXJ0MV9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtNjI2LDYgKzk2Nyw5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1hZGMiOwogCQkJCXJlZyA9IDwweGY4MDRjMDAwIDB4MTAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDE5IElSUV9UWVBFX0xFVkVMX0hJR0ggMD47CisJCQkJY2xvY2tzID0gPCZhZGNfY2xrPiwKKwkJCQkJIDwmYWRjX29wX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAiYWRjX2NsayIsICJhZGNfb3BfY2xrIjsKIAkJCQlhdG1lbCxhZGMtdXNlLWV4dGVybmFsLXRyaWdnZXJzOwogCQkJCWF0bWVsLGFkYy1jaGFubmVscy11c2VkID0gPDB4ZmZmZj47CiAJCQkJYXRtZWwsYWRjLXZyZWYgPSA8MzMwMD47CkBAIC02NzMsNiArMTAxNyw4IEBACiAJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zcGkwPjsKKwkJCQljbG9ja3MgPSA8JnNwaTBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJzcGlfY2xrIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtNjg3LDYgKzEwMzMsOCBAQAogCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc3BpMT47CisJCQkJY2xvY2tzID0gPCZzcGkxX2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAic3BpX2NsayI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTgwNSw2ICsxMTUzLDkgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1vaGNpIiwgInVzYi1vaGNpIjsKIAkJCXJlZyA9IDwweDAwNjAwMDAwIDB4MTAwMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MjIgSVJRX1RZUEVfTEVWRUxfSElHSCAyPjsKKwkJCWNsb2NrcyA9IDwmdXNiPiwgPCZ1aHBoc19jbGs+LCA8JnVkcGhzX2Nsaz4sCisJCQkJIDwmdWhwY2s+OworCQkJY2xvY2stbmFtZXMgPSAidXNiX2NsayIsICJvaGNpX2NsayIsICJoY2xrIiwgInVocGNrIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTgxMiw2ICsxMTYzLDggQEAKIAkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUtZWhjaSIsICJ1c2ItZWhjaSI7CiAJCQlyZWcgPSA8MHgwMDcwMDAwMCAweDEwMDAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIyIElSUV9UWVBFX0xFVkVMX0hJR0ggMj47CisJCQljbG9ja3MgPSA8JnVzYj4sIDwmdWhwaHNfY2xrPiwgPCZ1aHBjaz47CisJCQljbG9jay1uYW1lcyA9ICJ1c2JfY2xrIiwgImVoY2lfY2xrIiwgInVocGNrIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfY2FuLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBhdDkxc2FtOXg1X21hY2IwLmR0c2kgLSBEZXZpY2UgVHJlZSBJbmNsdWRlIGZpbGUgZm9yIEFUOTFTQU05eDUgU29DIHdpdGggMQorICogRXRoZXJuZXQgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBCb3JpcyBCUkVaSUxMT04gPGIuYnJlemlsbG9uQG92ZXJraXouY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL2F0OTEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKworLyB7CisJYWhiIHsKKwkJYXBiIHsKKwkJCXBtYzogcG1jQGZmZmZmYzAwIHsKKwkJCQlwZXJpcGhjayB7CisJCQkJCWNhbjBfY2xrOiBjYW4wX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8Mjk+OworCQkJCQl9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuMV9jbGs6IGNhbjFfY2xrIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwzMD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfaXNpLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2lzaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YmM4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2lzaS5kdHNpCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhdDkxc2FtOXg1X2lzaS5kdHNpIC0gRGV2aWNlIFRyZWUgSW5jbHVkZSBmaWxlIGZvciBBVDkxU0FNOXg1IFNvQyB3aXRoIGFuCisgKiBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBCb3JpcyBCUkVaSUxMT04gPGIuYnJlemlsbG9uQG92ZXJraXouY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL2F0OTEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKworLyB7CisJYWhiIHsKKwkJYXBiIHsKKwkJCXBtYzogcG1jQGZmZmZmYzAwIHsKKwkJCQlwZXJpcGhjayB7CisJCQkJCWlzaV9jbGs6IGlzaV9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI1PjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfbGNkLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2xjZC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NTMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2xjZC5kdHNpCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhdDkxc2FtOXg1X2xjZC5kdHNpIC0gRGV2aWNlIFRyZWUgSW5jbHVkZSBmaWxlIGZvciBBVDkxU0FNOXg1IFNvQyB3aXRoIGFuCisgKiBMQ0QgY29udHJvbGxlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQm9yaXMgQlJFWklMTE9OIDxiLmJyZXppbGxvbkBvdmVya2l6LmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEx2Mi4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGluY3RybC9hdDkxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisKKy8geworCWFoYiB7CisJCWFwYiB7CisJCQlwbWM6IHBtY0BmZmZmZmMwMCB7CisJCQkJcGVyaXBoY2sgeworCQkJCQlsY2RjX2NsazogbGNkY19jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI1PjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfbWFjYjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfbWFjYjAuZHRzaQppbmRleCA1NTczMWZmLi41N2U4OWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X21hY2IwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9tYWNiMC5kdHNpCkBAIC00MywxMiArNDMsMjMgQEAKIAkJCQl9OwogCQkJfTsKIAorCQkJcG1jOiBwbWNAZmZmZmZjMDAgeworCQkJCXBlcmlwaGNrIHsKKwkJCQkJbWFjYjBfY2xrOiBtYWNiMF9jbGsgeworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJcmVnID0gPDI0PjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwogCQkJbWFjYjA6IGV0aGVybmV0QGY4MDJjMDAwIHsKIAkJCQljb21wYXRpYmxlID0gImNkbnMsYXQzMmFwNzAwMC1tYWNiIiwgImNkbnMsbWFjYiI7CiAJCQkJcmVnID0gPDB4ZjgwMmMwMDAgMHgxMDA+OwogCQkJCWludGVycnVwdHMgPSA8MjQgSVJRX1RZUEVfTEVWRUxfSElHSCAzPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9tYWNiMF9ybWlpPjsKKwkJCQljbG9ja3MgPSA8Jm1hY2IwX2Nsaz4sIDwmbWFjYjBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJoY2xrIiwgInBjbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9tYWNiMS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9tYWNiMS5kdHNpCmluZGV4IDc3NDI1YTYuLjY2MzY3NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfbWFjYjEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X21hY2IxLmR0c2kKQEAgLTMxLDEyICszMSwyMyBAQAogCQkJCX07CiAJCQl9OwogCisJCQlwbWM6IHBtY0BmZmZmZmMwMCB7CisJCQkJcGVyaXBoY2sgeworCQkJCQltYWNiMV9jbGs6IG1hY2IxX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8Mjc+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCiAJCQltYWNiMTogZXRoZXJuZXRAZjgwMzAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiY2RucyxhdDMyYXA3MDAwLW1hY2IiLCAiY2RucyxtYWNiIjsKIAkJCQlyZWcgPSA8MHhmODAzMDAwMCAweDEwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwyNyBJUlFfVFlQRV9MRVZFTF9ISUdIIDM+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX21hY2IxX3JtaWk+OworCQkJCWNsb2NrcyA9IDwmbWFjYjFfY2xrPiwgPCZtYWNiMV9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImhjbGsiLCAicGNsayI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X3VzYXJ0My5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV91c2FydDMuZHRzaQppbmRleCA2ODAxMTA2Li4xNDAyMTdhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV91c2FydDMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X3VzYXJ0My5kdHNpCkBAIC00MiwxMiArNDIsMjMgQEAKIAkJCQl9OwogCQkJfTsKIAorCQkJcG1jOiBwbWNAZmZmZmZjMDAgeworCQkJCXBlcmlwaGNrIHsKKwkJCQkJdXNhcnQzX2NsazogdXNhcnQzX2NsayB7CisJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCQlyZWcgPSA8OD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKIAkJCXVzYXJ0Mzogc2VyaWFsQGY4MDI4MDAwIHsKIAkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXVzYXJ0IjsKIAkJCQlyZWcgPSA8MHhmODAyODAwMCAweDIwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw4IElSUV9UWVBFX0xFVkVMX0hJR0ggNT47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNhcnQzPjsKKwkJCQljbG9ja3MgPSA8JnVzYXJ0M19jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVjbS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NWNtLmR0c2kKaW5kZXggNGE1ZWU1Yy4uODQxM2UyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NWNtLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NWNtLmR0c2kKQEAgLTIzLDYgKzIzLDE0IEBACiAJCX07CiAJfTsKIAorCXNsb3dfeHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJfTsKKworCW1haW5feHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjAwMDAwMD47CisJfTsKKwogCWFoYiB7CiAJCWFwYiB7CiAJCQlwaW5jdHJsQGZmZmZmNDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0bGFzNi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKaW5kZXggOWQ3MjY3NC4uYmIyMjg0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKQEAgLTM5LDYgKzM5LDExIEBACiAJCX07CiAJfTsKIAorCWFybS1wbXUgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktcG11IjsKKwkJaW50ZXJydXB0cyA9IDwyOT47CisJfTsKKwogCWF4aSB7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMTY3LDYgKzE3Miw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzaXJmLHByaW1hMi1kc3BpZiI7CiAJCQkJcmVnID0gPDB4YTgwMDAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw5PjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgMT47CiAJCQl9OwogCiAJCQlncHNAYTgwMTAwMDAgewpAQCAtMTc0LDYgKzE4MCw3IEBACiAJCQkJcmVnID0gPDB4YTgwMTAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw3PjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgOT47CisJCQkJcmVzZXRzID0gPCZyc3RjIDI+OwogCQkJfTsKIAogCQkJZHNwQGE5MDAwMDAwIHsKQEAgLTE4MSw2ICsxODgsNyBAQAogCQkJCXJlZyA9IDwweGE5MDAwMDAwIDB4MTAwMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw4PjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgOD47CisJCQkJcmVzZXRzID0gPCZyc3RjIDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTk1LDYgKzIwMyw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzaXJmLHByaW1hMi10aWNrIjsKIAkJCQlyZWcgPSA8MHhiMDAyMDAwMCAweDEwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MD47CisJCQkJY2xvY2tzID0gPCZjbGtzIDExPjsKIAkJCX07CiAKIAkJCW5hbmRAYjAwMzAwMDAgewpAQCAtMjk3LDkgKzMwNiw5IEBACiAJCQkJcmVnID0gPDB4YjAwZDAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwxNT47CiAJCQkJc2lyZixzcGktbnVtLWNoaXBzZWxlY3RzID0gPDE+OwotCQkJCWNzLWdwaW9zID0gPCZncGlvIDAgMD47Ci0JCQkJc2lyZixzcGktZG1hLXJ4LWNoYW5uZWwgPSA8MjU+OwotCQkJCXNpcmYsc3BpLWRtYS10eC1jaGFubmVsID0gPDIwPjsKKwkJCQlkbWFzID0gPCZkbWFjMSA5PiwKKwkJCQkgICAgIDwmZG1hYzEgND47CisJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMTk+OwpAQCAtMzEyLDggKzMyMSw5IEBACiAJCQkJcmVnID0gPDB4YjAxNzAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwxNj47CiAJCQkJc2lyZixzcGktbnVtLWNoaXBzZWxlY3RzID0gPDE+OwotCQkJCXNpcmYsc3BpLWRtYS1yeC1jaGFubmVsID0gPDEyPjsKLQkJCQlzaXJmLHNwaS1kbWEtdHgtY2hhbm5lbCA9IDwxMz47CisJCQkJZG1hcyA9IDwmZG1hYzAgMTI+LAorCQkJCSAgICAgPCZkbWFjMCAxMz47CisJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMjA+OwpAQCAtNTU0LDYgKzU2NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJ1c3AwX3VhcnRfbm9zdHJlYW1jdHJsIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCXVzcDBfb25seV91dGZzX3BpbnNfYTogdXNwMEAyIHsKKwkJCQkJdXNwMCB7CisJCQkJCQlzaXJmLHBpbnMgPSAidXNwMF9vbmx5X3V0ZnNfZ3JwIjsKKwkJCQkJCXNpcmYsZnVuY3Rpb24gPSAidXNwMF9vbmx5X3V0ZnMiOworCQkJCQl9OworCQkJCX07CisJCQkJdXNwMF9vbmx5X3VyZnNfcGluc19hOiB1c3AwQDMgeworCQkJCQl1c3AwIHsKKwkJCQkJCXNpcmYscGlucyA9ICJ1c3AwX29ubHlfdXJmc19ncnAiOworCQkJCQkJc2lyZixmdW5jdGlvbiA9ICJ1c3AwX29ubHlfdXJmcyI7CisJCQkJCX07CisJCQkJfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNwMV9waW5zX2E6IHVzcDFAMCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNwMSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAidXNwMWdycCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9heG01NTE2LWFtYXJpbGxvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F4bTU1MTYtYW1hcmlsbG8uZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDYwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9heG01NTE2LWFtYXJpbGxvLmR0cwpAQCAtMCwwICsxLDUxIEBACisvKgorICogYXJjaC9hcm0vYm9vdC9kdHMvYXhtNTUxNi1hbWFyaWxsby5kdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTFNJCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworL21lbXJlc2VydmUvIDB4MDAwMDAwMDAgMHgwMDQwMDAwMDsKKworI2luY2x1ZGUgImF4bTU1eHguZHRzaSIKKyNpbmNsdWRlICJheG01NTE2LWNwdXMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQW1hcmlsbG8gQVhNNTUxNiI7CisJY29tcGF0aWJsZSA9ICJsc2ksYXhtNTUxNi1hbWFyaWxsbyIsICJsc2ksYXhtNTUxNiI7CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MCAweDAwMDAwMDAwIDB4MDIgMHgwMDAwMDAwMD47CisJfTsKK307CisKKyZzZXJpYWwwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNlcmlhbDIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzZXJpYWwzIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZ3BpbzAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZncGlvMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F4bTU1MTYtY3B1cy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXhtNTUxNi1jcHVzLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1ZjM2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F4bTU1MTYtY3B1cy5kdHNpCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogYXJjaC9hcm0vYm9vdC9kdHMvYXhtNTUxNi1jcHVzLmR0c2kKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTFNJCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvIHsKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdS1tYXAgeworCQkJY2x1c3RlcjAgeworCQkJCWNvcmUwIHsKKwkJCQkJY3B1ID0gPCZDUFUwPjsKKwkJCQl9OworCQkJCWNvcmUxIHsKKwkJCQkJY3B1ID0gPCZDUFUxPjsKKwkJCQl9OworCQkJCWNvcmUyIHsKKwkJCQkJY3B1ID0gPCZDUFUyPjsKKwkJCQl9OworCQkJCWNvcmUzIHsKKwkJCQkJY3B1ID0gPCZDUFUzPjsKKwkJCQl9OworCQkJfTsKKwkJCWNsdXN0ZXIxIHsKKwkJCQljb3JlMCB7CisJCQkJCWNwdSA9IDwmQ1BVND47CisJCQkJfTsKKwkJCQljb3JlMSB7CisJCQkJCWNwdSA9IDwmQ1BVNT47CisJCQkJfTsKKwkJCQljb3JlMiB7CisJCQkJCWNwdSA9IDwmQ1BVNj47CisJCQkJfTsKKwkJCQljb3JlMyB7CisJCQkJCWNwdSA9IDwmQ1BVNz47CisJCQkJfTsKKwkJCX07CisJCQljbHVzdGVyMiB7CisJCQkJY29yZTAgeworCQkJCQljcHUgPSA8JkNQVTg+OworCQkJCX07CisJCQkJY29yZTEgeworCQkJCQljcHUgPSA8JkNQVTk+OworCQkJCX07CisJCQkJY29yZTIgeworCQkJCQljcHUgPSA8JkNQVTEwPjsKKwkJCQl9OworCQkJCWNvcmUzIHsKKwkJCQkJY3B1ID0gPCZDUFUxMT47CisJCQkJfTsKKwkJCX07CisJCQljbHVzdGVyMyB7CisJCQkJY29yZTAgeworCQkJCQljcHUgPSA8JkNQVTEyPjsKKwkJCQl9OworCQkJCWNvcmUxIHsKKwkJCQkJY3B1ID0gPCZDUFUxMz47CisJCQkJfTsKKwkJCQljb3JlMiB7CisJCQkJCWNwdSA9IDwmQ1BVMTQ+OworCQkJCX07CisJCQkJY29yZTMgeworCQkJCQljcHUgPSA8JkNQVTE1PjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlDUFUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlyZWcgPSA8MHgwMD47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTE6IGNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDAxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeT0gPDE0MDAwMDAwMDA+OworCQkJY3B1LXJlbGVhc2UtYWRkciA9IDwwPjsgLy8gRml4ZWQgYnkgdGhlIGJvb3QgbG9hZGVyCisJCX07CisKKwkJQ1BVMjogY3B1QDIgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MDI+OworCQkJY2xvY2stZnJlcXVlbmN5PSA8MTQwMDAwMDAwMD47CisJCQljcHUtcmVsZWFzZS1hZGRyID0gPDA+OyAvLyBGaXhlZCBieSB0aGUgYm9vdCBsb2FkZXIKKwkJfTsKKworCQlDUFUzOiBjcHVAMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlyZWcgPSA8MHgwMz47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTQ6IGNwdUAxMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeT0gPDE0MDAwMDAwMDA+OworCQkJY3B1LXJlbGVhc2UtYWRkciA9IDwwPjsgLy8gRml4ZWQgYnkgdGhlIGJvb3QgbG9hZGVyCisJCX07CisKKwkJQ1BVNTogY3B1QDEwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlyZWcgPSA8MHgxMDE+OworCQkJY2xvY2stZnJlcXVlbmN5PSA8MTQwMDAwMDAwMD47CisJCQljcHUtcmVsZWFzZS1hZGRyID0gPDA+OyAvLyBGaXhlZCBieSB0aGUgYm9vdCBsb2FkZXIKKwkJfTsKKworCQlDUFU2OiBjcHVAMTAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDEwMj47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTc6IGNwdUAxMDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MTAzPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeT0gPDE0MDAwMDAwMDA+OworCQkJY3B1LXJlbGVhc2UtYWRkciA9IDwwPjsgLy8gRml4ZWQgYnkgdGhlIGJvb3QgbG9hZGVyCisJCX07CisKKwkJQ1BVODogY3B1QDIwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlyZWcgPSA8MHgyMDA+OworCQkJY2xvY2stZnJlcXVlbmN5PSA8MTQwMDAwMDAwMD47CisJCQljcHUtcmVsZWFzZS1hZGRyID0gPDA+OyAvLyBGaXhlZCBieSB0aGUgYm9vdCBsb2FkZXIKKwkJfTsKKworCQlDUFU5OiBjcHVAMjAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDIwMT47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTEwOiBjcHVAMjAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDIwMj47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTExOiBjcHVAMjAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDIwMz47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTEyOiBjcHVAMzAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDMwMD47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTEzOiBjcHVAMzAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDMwMT47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTE0OiBjcHVAMzAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDMwMj47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCisJCUNQVTE1OiBjcHVAMzAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDMwMz47CisJCQljbG9jay1mcmVxdWVuY3k9IDwxNDAwMDAwMDAwPjsKKwkJCWNwdS1yZWxlYXNlLWFkZHIgPSA8MD47IC8vIEZpeGVkIGJ5IHRoZSBib290IGxvYWRlcgorCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXhtNTV4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXhtNTV4eC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjg4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9heG01NXh4LmR0c2kKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBhcmNoL2FybS9ib290L2R0cy9heG01NXh4LmR0c2kKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTFNJCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2xzaSxheG01NTE2LWNsa3MuaD4KKworI2luY2x1ZGUgInNrZWxldG9uNjQuZHRzaSIKKworLyB7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwCSAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSAgID0gJnNlcmlhbDE7CisJCXNlcmlhbDIJICA9ICZzZXJpYWwyOworCQlzZXJpYWwzCSAgPSAmc2VyaWFsMzsKKwkJdGltZXIJICA9ICZ0aW1lcjA7CisJfTsKKworCWNsb2NrcyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCWNsa19yZWYwOiBjbGtfcmVmMCB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjUwMDAwMDA+OworCQl9OworCisJCWNsa19yZWYxOiBjbGtfcmVmMSB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjUwMDAwMDA+OworCQl9OworCisJCWNsa19yZWYyOiBjbGtfcmVmMiB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjUwMDAwMDA+OworCQl9OworCisJCWNsa3M6IGNsb2NrLWNvbnRyb2xsZXJAMjAxMDAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImxzaSxheG01NTE2LWNsa3MiOworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJcmVnID0gPDB4MjAgMHgxMDAyMDAwMCAwIDB4MjAwMDA+OworCQl9OworCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDIwMDEwMDEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDB4MjAgMHgwMTAwMTAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwweDIwIDB4MDEwMDIwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MHgyMCAweDAxMDA0MDAwIDAgMHgyMDAwPiwKKwkJICAgICAgPDB4MjAgMHgwMTAwNjAwMCAwIDB4MjAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1BQSSA5IChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwKKwkJCQlJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlpbnRlcnJ1cHRzID0KKwkJCTxHSUNfUFBJIDEzCisJCQkJKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCTxHSUNfUFBJIDE0CisJCQkJKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCTxHSUNfUFBJIDExCisJCQkJKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPiwKKwkJCTxHSUNfUFBJIDEwCisJCQkJKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKKwl9OworCisKKwlwbXUgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LXBtdSI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxOTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXNvYyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJcmFuZ2VzOworCisJCXN5c2Nvbjogc3lzY29uQDIwMTAwMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJsc2ksYXh4aWEtc3lzY29uIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgyMCAweDEwMDMwMDAwIDAgMHgyMDAwPjsKKwkJfTsKKworCQlyZXNldDogcmVzZXRAMjAxMDAzMTAwMCB7CisJCQljb21wYXRpYmxlID0gImxzaSxheG01NXh4LXJlc2V0IjsKKwkJCXN5c2NvbiA9IDwmc3lzY29uPjsKKwkJfTsKKworCQlhbWJhIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFtYmEtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlyYW5nZXM7CisKKwkJCXNlcmlhbDA6IHVhcnRAMjAxMDA4MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MjAgMHgxMDA4MDAwMCAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBBWFhJQV9DTEtfUEVSPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNlcmlhbDE6IHVhcnRAMjAxMDA4MTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MjAgMHgxMDA4MTAwMCAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBBWFhJQV9DTEtfUEVSPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNlcmlhbDI6IHVhcnRAMjAxMDA4MjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MjAgMHgxMDA4MjAwMCAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBBWFhJQV9DTEtfUEVSPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNlcmlhbDM6IHVhcnRAMjAxMDA4MzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMTEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MjAgMHgxMDA4MzAwMCAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBBWFhJQV9DTEtfUEVSPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXRpbWVyMDogdGltZXJAMjAxMDA5MTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sc3A4MDQiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MjAgMHgxMDA5MTAwMCAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDQ3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDQ4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDUwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDUxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDUyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDxHSUNfU1BJIDUzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBBWFhJQV9DTEtfUEVSPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJZ3BpbzA6IGdwaW9AMjAxMDA5MjAwMCB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCXJlZyA9IDwweDIwIDB4MTAwOTIwMDAgMHgwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxMyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxNCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8R0lDX1NQSSAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgQVhYSUFfQ0xLX1BFUj47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTogZ3Bpb0AyMDEwMDkzMDAwIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJcmVnID0gPDB4MjAgMHgxMDA5MzAwMCAweDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBBWFhJQV9DTEtfUEVSPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisJfTsKK307CisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogQworICBFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMTEzNTEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTExMzUxLmR0c2kKaW5kZXggNjRkMDY5Yi4uNmIwNWFlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMTEzNTEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY20xMTM1MS5kdHNpCkBAIC0xOTMsNiArMTkzLDE0IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXB3bTogcHdtQDNlMDFhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJicmNtLGJjbTExMzUxLXB3bSIsICJicmNtLGtvbmEtcHdtIjsKKwkJcmVnID0gPDB4M2UwMWEwMDAgMHhjYz47CisJCWNsb2NrcyA9IDwmc2xhdmVfY2N1IEJDTTI4MVhYX1NMQVZFX0NDVV9QV00+OworCQkjcHdtLWNlbGxzID0gPDM+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY20yODE1NS1hcC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY20yODE1NS1hcC5kdHMKaW5kZXggYWYzZGE1NS4uOWNlOTFkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgxNTUtYXAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MTU1LWFwLmR0cwpAQCAtNjksNiArNjksMTAgQEAKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CiAKKwlwd206IHB3bUAzZTAxYTAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCiAJdXNib3RnOiB1c2JAM2YxMjAwMDAgewogCQl2dXNiX2Qtc3VwcGx5ID0gPCZ1c2JsZG9fcmVnPjsKIAkJdnVzYl9hLXN1cHBseSA9IDwmaW9zcjFfcmVnPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTU5MDU2LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iY201OTA1Ni5kdHNpCmluZGV4IGRmYWRhYWEuLjA2NmFkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTU5MDU2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNTkwNTYuZHRzaQpAQCAtNzAsNSArNzAsMjYgQEAKIAogCQl2c3JfcmVnOiB2c3IgewogCQl9OworCisJCWdwbGRvMV9yZWc6IGdwbGRvMSB7CisJCX07CisKKwkJZ3BsZG8yX3JlZzogZ3BsZG8yIHsKKwkJfTsKKworCQlncGxkbzNfcmVnOiBncGxkbzMgeworCQl9OworCisJCWdwbGRvNF9yZWc6IGdwbGRvNCB7CisJCX07CisKKwkJZ3BsZG81X3JlZzogZ3BsZG81IHsKKwkJfTsKKworCQlncGxkbzZfcmVnOiBncGxkbzYgeworCQl9OworCisJCXZidXNfcmVnOiB2YnVzIHsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjIuZHRzaQppbmRleCA1NmExYWYyLi4yNDc3ZGFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi5kdHNpCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svYmVybGluMi5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KIAogLyB7CkBAIC0zNywyNCArMzgsMTAgQEAKIAkJfTsKIAl9OwogCi0JY2xvY2tzIHsKLQkJc21jbGs6IHN5c21nci1jbG9jayB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47Ci0JCX07Ci0KLQkJY2ZnY2xrOiBjZmctY2xvY2sgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKLQkJfTsKLQotCQlzeXNjbGs6IHN5c3RlbS1jbG9jayB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMDA+OwotCQl9OworCXJlZmNsazogb3NjaWxsYXRvciB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CiAJfTsKIAogCXNvYyB7CkBAIC03Miw2ICs1OSwxMSBAQAogCQkJY2FjaGUtbGV2ZWwgPSA8Mj47CiAJCX07CiAKKwkJc2N1OiBzbm9vcC1jb250cm9sLXVuaXRAYWQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1zY3UiOworCQkJcmVnID0gPDB4YWQwMDAwIDB4NTg+OworCQl9OworCiAJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAYWQxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOwogCQkJcmVnID0gPDB4YWQxMDAwIDB4MTAwMD4sIDwweGFkMDEwMCAweDAxMDA+OwpAQCAtODMsNyArNzUsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXR3ZC10aW1lciI7CiAJCQlyZWcgPSA8MHhhZDA2MDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MgPSA8JnN5c2Nsaz47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVFdEPjsKIAkJfTsKIAogCQlhcGJAZTgwMDAwIHsKQEAgLTk0LDExICs4Niw4MyBAQAogCQkJcmFuZ2VzID0gPDAgMHhlODAwMDAgMHgxMDAwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZhaWM+OwogCisJCQlncGlvMDogZ3Bpb0AwNDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweDA0MDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGE6IGdwaW8tcG9ydEAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDg+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDA+OworCQkJCX07CisJCQl9OworCisJCQlncGlvMTogZ3Bpb0AwODAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweDA4MDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGI6IGdwaW8tcG9ydEAxIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDg+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE+OworCQkJCX07CisJCQl9OworCisJCQlncGlvMjogZ3Bpb0AwYzAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweDBjMDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGM6IGdwaW8tcG9ydEAyIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDg+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDI+OworCQkJCX07CisJCQl9OworCisJCQlncGlvMzogZ3Bpb0AxMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweDEwMDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGQ6IGdwaW8tcG9ydEAzIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDg+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDM+OworCQkJCX07CisJCQl9OworCiAJCQl0aW1lcjA6IHRpbWVyQDJjMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjMDAgMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDw4PjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CkBAIC0xMDcsNyArMTcxLDcgQEAKIAkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKIAkJCQlyZWcgPSA8MHgyYzE0IDB4MTQ+OwogCQkJCWludGVycnVwdHMgPSA8OT47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMTE2LDcgKzE4MCw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmMyOCAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDEwPjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwpAQCAtMTI1LDcgKzE4OSw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmMzYyAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDExPjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwpAQCAtMTM0LDcgKzE5OCw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmM1MCAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDEyPjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwpAQCAtMTQzLDcgKzIwNyw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmM2NCAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDEzPjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwpAQCAtMTUyLDcgKzIxNiw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmM3OCAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDE0PjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwpAQCAtMTYxLDcgKzIyNSw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmM4YyAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDE1PjsKLQkJCQljbG9ja3MgPSA8JmNmZ2Nsaz47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CiAJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwpAQCAtMTc2LDYgKzI0MCwxNCBAQAogCQkJfTsKIAkJfTsKIAorCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+OworCQkJY2xvY2tzID0gPCZyZWZjbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmY2xrIjsKKwkJfTsKKwogCQlhcGJAZmMwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTE4NCwxMyArMjU2LDQ4IEBACiAJCQlyYW5nZXMgPSA8MCAweGZjMDAwMCAweDEwMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNpYz47CiAKKwkJCXNtX2dwaW8xOiBncGlvQDUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQkJcmVnID0gPDB4NTAwMCAweDQwMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0ZjogZ3Bpby1wb3J0QDUgeworCQkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCXNucHMsbnItZ3Bpb3MgPSA8OD47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCQkJfTsKKworCQkJc21fZ3BpbzA6IGdwaW9AYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHhjMDAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRlOiBncGlvLXBvcnRANCB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDw4PjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMT47CisJCQkJfTsKKwkJCX07CisKIAkJCXVhcnQwOiBzZXJpYWxAOTAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKIAkJCQlyZWcgPSA8MHg5MDAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJcmVnLWlvLXdpZHRoID0gPDE+OwogCQkJCWludGVycnVwdHMgPSA8OD47Ci0JCQkJY2xvY2tzID0gPCZzbWNsaz47CisJCQkJY2xvY2tzID0gPCZyZWZjbGs+OworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcG11eD47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMjAwLDcgKzMwNyw5IEBACiAJCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJCXJlZy1pby13aWR0aCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDk+OwotCQkJCWNsb2NrcyA9IDwmc21jbGs+OworCQkJCWNsb2NrcyA9IDwmcmVmY2xrPjsKKwkJCQlwaW5jdHJsLTAgPSA8JnVhcnQxX3BtdXg+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTIxMCwxMCArMzE5LDMyIEBACiAJCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJCXJlZy1pby13aWR0aCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDEwPjsKLQkJCQljbG9ja3MgPSA8JnNtY2xrPjsKKwkJCQljbG9ja3MgPSA8JnJlZmNsaz47CisJCQkJcGluY3RybC0wID0gPCZ1YXJ0Ml9wbXV4PjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCisJCQlzeXNjdHJsOiBzeXN0ZW0tY29udHJvbGxlckBkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMi1zeXN0ZW0tY3RybCI7CisJCQkJcmVnID0gPDB4ZDAwMCAweDEwMD47CisKKwkJCQl1YXJ0MF9wbXV4OiB1YXJ0MC1wbXV4IHsKKwkJCQkJZ3JvdXBzID0gIkdTTTQiOworCQkJCQlmdW5jdGlvbiA9ICJ1YXJ0MCI7CisJCQkJfTsKKworCQkJCXVhcnQxX3BtdXg6IHVhcnQxLXBtdXggeworCQkJCQlncm91cHMgPSAiR1NNNSI7CisJCQkJCWZ1bmN0aW9uID0gInVhcnQxIjsKKwkJCQl9OworCisJCQkJdWFydDJfcG11eDogdWFydDItcG11eCB7CisJCQkJCWdyb3VwcyA9ICJHU00zIjsKKwkJCQkJZnVuY3Rpb24gPSAidWFydDIiOworCQkJCX07CisJCQl9OworCiAJCQlzaWM6IGludGVycnVwdC1jb250cm9sbGVyQGUwMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItaWN0bCI7CiAJCQkJcmVnID0gPDB4ZTAwMCAweDQwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC5kdHNpCmluZGV4IDA5NDk2OGMuLmNjMWRmNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC5kdHNpCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svYmVybGluMi5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KIAogLyB7CkBAIC0zMCwyNCArMzEsMTAgQEAKIAkJfTsKIAl9OwogCi0JY2xvY2tzIHsKLQkJc21jbGs6IHN5c21nci1jbG9jayB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47Ci0JCX07Ci0KLQkJY2ZnY2xrOiBjZmctY2xvY2sgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NzUwMDAwMDA+OwotCQl9OwotCi0JCXN5c2Nsazogc3lzdGVtLWNsb2NrIHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMwMDAwMDAwMD47Ci0JCX07CisJcmVmY2xrOiBvc2NpbGxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKIAl9OwogCiAJc29jIHsKQEAgLTc2LDcgKzYzLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS10d2QtdGltZXIiOwogCQkJcmVnID0gPDB4YWQwNjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZzeXNjbGs+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1RXRD47CiAJCX07CiAKIAkJYXBiQGU4MDAwMCB7CkBAIC04NywxMSArNzQsODMgQEAKIAkJCXJhbmdlcyA9IDwwIDB4ZTgwMDAwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmYWljPjsKIAorCQkJZ3BpbzA6IGdwaW9AMDQwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHgwNDAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRhOiBncGlvLXBvcnRAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDw4PjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwwPjsKKwkJCQl9OworCQkJfTsKKworCQkJZ3BpbzE6IGdwaW9AMDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHgwODAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRiOiBncGlvLXBvcnRAMSB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDw4PjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJZ3BpbzI6IGdwaW9AMGMwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHgwYzAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRjOiBncGlvLXBvcnRAMiB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDw4PjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyPjsKKwkJCQl9OworCQkJfTsKKworCQkJZ3BpbzM6IGdwaW9AMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHgxMDAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRkOiBncGlvLXBvcnRAMyB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDw4PjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwzPjsKKwkJCQl9OworCQkJfTsKKwogCQkJdGltZXIwOiB0aW1lckAyYzAwIHsKIAkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKIAkJCQlyZWcgPSA8MHgyYzAwIDB4MTQ+OwogCQkJCWludGVycnVwdHMgPSA8OD47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMTAwLDcgKzE1OSw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQkJcmVnID0gPDB4MmMxNCAweDE0PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDk+OwotCQkJCWNsb2NrcyA9IDwmY2ZnY2xrPjsKKwkJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfQ0ZHPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ0aW1lciI7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKQEAgLTEwOSw3ICsxNjgsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjMjggMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDwxMD47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTExOCw3ICsxNzcsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjM2MgMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDwxMT47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTEyNyw3ICsxODYsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjNTAgMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDwxMj47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTEzNiw3ICsxOTUsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjNjQgMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDwxMz47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTE0NSw3ICsyMDQsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjNzggMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDwxND47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTE1NCw3ICsyMTMsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJCXJlZyA9IDwweDJjOGMgMHgxND47CiAJCQkJaW50ZXJydXB0cyA9IDwxNT47Ci0JCQkJY2xvY2tzID0gPCZjZmdjbGs+OworCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTE2OSw2ICsyMjgsMTkgQEAKIAkJCX07CiAJCX07CiAKKwkJY2hpcDogY2hpcC1jb250cm9sQGVhMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLWNoaXAtY3RybCI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+OworCQkJY2xvY2tzID0gPCZyZWZjbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmY2xrIjsKKworCQkJdWFydDBfcG11eDogdWFydDAtcG11eCB7CisJCQkJZ3JvdXBzID0gIkc2IjsKKwkJCQlmdW5jdGlvbiA9ICJ1YXJ0MCI7CisJCQl9OworCQl9OworCiAJCWFwYkBmYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMTc3LDEzICsyNDksNDUgQEAKIAkJCXJhbmdlcyA9IDwwIDB4ZmMwMDAwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc2ljPjsKIAorCQkJc21fZ3BpbzE6IGdwaW9ANTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHg1MDAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRmOiBncGlvLXBvcnRANSB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDw4PjsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisJCQl9OworCisJCQlzbV9ncGlvMDogZ3Bpb0BjMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweGMwMDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGU6IGdwaW8tcG9ydEA0IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDg+OworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCX07CisKIAkJCXVhcnQwOiBzZXJpYWxAOTAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKIAkJCQlyZWcgPSA8MHg5MDAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJcmVnLWlvLXdpZHRoID0gPDE+OwogCQkJCWludGVycnVwdHMgPSA8OD47Ci0JCQkJY2xvY2tzID0gPCZzbWNsaz47CisJCQkJY2xvY2tzID0gPCZyZWZjbGs+OworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcG11eD47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMTkzLDEwICsyOTcsMTUgQEAKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJcmVnLWlvLXdpZHRoID0gPDE+OwogCQkJCWludGVycnVwdHMgPSA8OT47Ci0JCQkJY2xvY2tzID0gPCZzbWNsaz47CisJCQkJY2xvY2tzID0gPCZyZWZjbGs+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCisJCQlzeXNjdHJsOiBzeXN0ZW0tY29udHJvbGxlckBkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLXN5c3RlbS1jdHJsIjsKKwkJCQlyZWcgPSA8MHhkMDAwIDB4MTAwPjsKKwkJCX07CisKIAkJCXNpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAZTAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1pY3RsIjsKIAkJCQlyZWcgPSA8MHhlMDAwIDB4NDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTUxNTBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQW50b2luZSBUw6luYXJ0IDxhbnRvaW5lLnRlbmFydEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJiZXJsaW4ycS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJNYXJ2ZWxsIEJHMi1RIERNUCI7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLWRtcCIsICJtYXJ2ZWxsLGJlcmxpbjJxIiwgIm1hcnZlbGwsYmVybGluIjsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4ODAwMDAwMDA+OworCX07CisKKwljaG9vc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAgZWFybHlwcmludGsiOworCX07Cit9OworCismc2RoY2kxIHsKKwlicm9rZW4tY2Q7CisJc2RoY2ksd3AtaW52ZXJ0ZWQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNkaGNpMiB7CisJbm9uLXJlbW92YWJsZTsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzVhMTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQpAQCAtMCwwICsxLDM2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbnRvaW5lIFTDqW5hcnQgPGFudG9pbmUudGVuYXJ0QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9iZXJsaW4ycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1hcnZlbGwgQXJtYWRhIDE1MDAgcHJvIChCRzItUSkgU29DIjsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMnEiLCAibWFydmVsbCxiZXJsaW4iOworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JmwyPjsKKwkJCXJlZyA9IDwwPjsKKwkJfTsKKworCQljcHVAMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JmwyPjsKKwkJCXJlZyA9IDwxPjsKKwkJfTsKKworCQljcHVAMiB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JmwyPjsKKwkJCXJlZyA9IDwyPjsKKwkJfTsKKworCQljcHVAMyB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JmwyPjsKKwkJCXJlZyA9IDwzPjsKKwkJfTsKKwl9OworCisJcmVmY2xrOiBvc2NpbGxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwl9OworCisJc29jIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwwIDB4ZjcwMDAwMDAgMHgxMDAwMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCQlzZGhjaTA6IHNkaGNpQGFiMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKKwkJCXJlZyA9IDwweGFiMDAwMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0RJTzFYSU4+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZGhjaTE6IHNkaGNpQGFiMDgwMCB7CisJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKKwkJCXJlZyA9IDwweGFiMDgwMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0RJTzFYSU4+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZGhjaTI6IHNkaGNpQGFiMTAwMCB7CisJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKKwkJCXJlZyA9IDwweGFiMTAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0RJTzFYSU4+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlsMjogbDItY2FjaGUtY29udHJvbGxlckBhYzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQkJcmVnID0gPDB4YWMwMDAwIDB4MTAwMD47CisJCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJfTsKKworCQlzY3U6IHNub29wLWNvbnRyb2wtdW5pdEBhZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXNjdSI7CisJCQlyZWcgPSA8MHhhZDAwMDAgMHg1OD47CisJCX07CisKKwkJbG9jYWwtdGltZXJAYWQwNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS10d2QtdGltZXIiOworCQkJcmVnID0gPDB4YWQwNjAwIDB4MjA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1RXRD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCX07CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBhZDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCQlyZWcgPSA8MHhhZDEwMDAgMHgxMDAwPiwgPDB4YWQwMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJfTsKKworCQlhcGJAZTgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlyYW5nZXMgPSA8MCAweGU4MDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmFpYz47CisKKwkJCWdwaW8wOiBncGlvQDA0MDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQkJcmVnID0gPDB4MDQwMCAweDQwMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0YTogZ3Bpby1wb3J0QDAgeworCQkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCXNucHMsbnItZ3Bpb3MgPSA8MzI+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDA+OworCQkJCX07CisJCQl9OworCisJCQlncGlvMTogZ3Bpb0AwODAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweDA4MDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGI6IGdwaW8tcG9ydEAxIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDMyPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJZ3BpbzI6IGdwaW9AMGMwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHgwYzAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRjOiBncGlvLXBvcnRAMiB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCWludGVycnVwdHMgPSA8Mj47CisJCQkJfTsKKwkJCX07CisKKwkJCWdwaW8zOiBncGlvQDEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQkJcmVnID0gPDB4MTAwMCAweDQwMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0ZDogZ3Bpby1wb3J0QDMgeworCQkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCXNucHMsbnItZ3Bpb3MgPSA8MzI+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDM+OworCQkJCX07CisJCQl9OworCisJCQl0aW1lcjA6IHRpbWVyQDJjMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjMDAgMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCWludGVycnVwdHMgPSA8OD47CisJCQl9OworCisJCQl0aW1lcjE6IHRpbWVyQDJjMTQgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjMTQgMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl0aW1lcjI6IHRpbWVyQDJjMjggeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjMjggMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl0aW1lcjM6IHRpbWVyQDJjM2MgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjM2MgMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl0aW1lcjQ6IHRpbWVyQDJjNTAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjNTAgMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl0aW1lcjU6IHRpbWVyQDJjNjQgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjNjQgMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl0aW1lcjY6IHRpbWVyQDJjNzggeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjNzggMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl0aW1lcjc6IHRpbWVyQDJjOGMgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJCXJlZyA9IDwweDJjOGMgMHgxND47CisJCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0NGRz47CisJCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlhaWM6IGludGVycnVwdC1jb250cm9sbGVyQDM4MDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItaWN0bCI7CisJCQkJcmVnID0gPDB4MzgwMCAweDMwPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl9OworCisJCQlncGlvNDogZ3Bpb0A1MDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweDUwMDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGU6IGdwaW8tcG9ydEA0IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDMyPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisJCQl9OworCisJCQlncGlvNTogZ3Bpb0BjMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJCXJlZyA9IDwweGMwMDAgMHg0MDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydGY6IGdwaW8tcG9ydEA1IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQlzbnBzLG5yLWdwaW9zID0gPDMyPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWNoaXA6IGNoaXAtY29udHJvbEBlYTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLWNoaXAtY3RybCI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+LCA8MHhkZDAxNzAgMHgxMD47CisJCQljbG9ja3MgPSA8JnJlZmNsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWZjbGsiOworCQl9OworCisJCWFwYkBmYzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCXJhbmdlcyA9IDwwIDB4ZmMwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc2ljPjsKKworCQkJdWFydDA6IHVhcnRAOTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCQlyZWcgPSA8MHg5MDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzaWM+OworCQkJCWludGVycnVwdHMgPSA8OD47CisJCQkJY2xvY2tzID0gPCZyZWZjbGs+OworCQkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BtdXg+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQxOiB1YXJ0QGEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQkJcmVnID0gPDB4YTAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc2ljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDk+OworCQkJCWNsb2NrcyA9IDwmcmVmY2xrPjsKKwkJCQlyZWctc2hpZnQgPSA8Mj47CisJCQkJcGluY3RybC0wID0gPCZ1YXJ0MV9wbXV4PjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlzeXNjdHJsOiBwaW4tY29udHJvbGxlckBkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMnEtc3lzdGVtLWN0cmwiOworCQkJCXJlZyA9IDwweGQwMDAgMHgxMDA+OworCisJCQkJdWFydDBfcG11eDogdWFydDAtcG11eCB7CisJCQkJCWdyb3VwcyA9ICJHU00xMiI7CisJCQkJCWZ1bmN0aW9uID0gInVhcnQwIjsKKwkJCQl9OworCisJCQkJdWFydDFfcG11eDogdWFydDEtcG11eCB7CisJCQkJCWdyb3VwcyA9ICJHU00xNCI7CisJCQkJCWZ1bmN0aW9uID0gInVhcnQxIjsKKwkJCQl9OworCQkJfTsKKworCQkJc2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWljdGwiOworCQkJCXJlZyA9IDwweGUwMDAgMHgzMD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMKaW5kZXggNWJhYmJhMC4uNGFkYzI4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cwpAQCAtNywxMSArNywxMSBAQAogICovCiAvZHRzLXYxLzsKIAotI2luY2x1ZGUgImRyYTcuZHRzaSIKKyNpbmNsdWRlICJkcmE3NHguZHRzaSIKIAogLyB7Ci0JbW9kZWwgPSAiVEkgRFJBNyI7Ci0JY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWV2bSIsICJ0aSxkcmE3NTIiLCAidGksZHJhNyI7CisJbW9kZWwgPSAiVEkgRFJBNzQyIjsKKwljb21wYXRpYmxlID0gInRpLGRyYTctZXZtIiwgInRpLGRyYTc0MiIsICJ0aSxkcmE3NCIsICJ0aSxkcmE3IjsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CkBAIC05Myw2ICs5Myw2NCBAQAogCQkJMHgyNGMgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1YXJ0M190eGQgKi8KIAkJPjsKIAl9OworCisJcXNwaTFfcGluczogcGlubXV4X3FzcGkxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0YyAoUElOX0lOUFVUIHwgTVVYX01PREUxKSAgLyogZ3BtY19hMy5xc3BpMV9jczIgKi8KKwkJCTB4NTAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMSkgIC8qIGdwbWNfYTQucXNwaTFfY3MzICovCisJCQkweDc0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTEpICAvKiBncG1jX2ExMy5xc3BpMV9ydGNsayAqLworCQkJMHg3OCAoUElOX0lOUFVUIHwgTVVYX01PREUxKSAgLyogZ3BtY19hMTQucXNwaTFfZDMgKi8KKwkJCTB4N2MgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMSkgIC8qIGdwbWNfYTE1LnFzcGkxX2QyICovCisJCQkweDgwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTE2LnFzcGkxX2QxICovCisJCQkweDg0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTEpICAvKiBncG1jX2ExNy5xc3BpMV9kMCAqLworCQkJMHg4OCAoUElOX0lOUFVUIHwgTVVYX01PREUxKSAgLyogcXBtY19hMTgucXNwaTFfc2NsayAqLworCQkJMHhiOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgIC8qIGdwbWNfY3MyLnFzcGkxX2NzMCAqLworCQkJMHhiYyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgIC8qIGdwbWNfY3MzLnFzcGkxX2NzMSAqLworCQk+OworCX07CisKKwl1c2IxX3BpbnM6IHBpbm11eF91c2IxX3BpbnMgeworICAgICAgICAgICAgICAgIHBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI4MCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVzYjFfZHJ2dmJ1cyAqLworICAgICAgICAgICAgICAgID47CisgICAgICAgIH07CisKKwl1c2IyX3BpbnM6IHBpbm11eF91c2IyX3BpbnMgeworICAgICAgICAgICAgICAgIHBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI4NCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVzYjJfZHJ2dmJ1cyAqLworICAgICAgICAgICAgICAgID47CisgICAgICAgIH07CisKKwluYW5kX2ZsYXNoX3gxNjogbmFuZF9mbGFzaF94MTYgeworCQkvKiBPbiBEUkE3IEVWTSwgR1BNQ19XUE4gYW5kIE5BTkRfQk9PVG4gY29tZXMgZnJvbSBESVAgc3dpdGNoCisJCSAqIFNvIE5BTkQgZmxhc2ggcmVxdWlyZXMgZm9sbG93aW5nIHN3aXRjaCBzZXR0aW5nczoKKwkJICogU1c1LjkgKEdQTUNfV1BOKSA9IExPVworCQkgKiBTVzUuMSAoTkFORF9CT09UbikgPSBISUdIICovCisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDAgCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkMAkqLworCQkJMHg0IAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDEJKi8KKwkJCTB4OCAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQyCSovCisJCQkweGMgCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkMwkqLworCQkJMHgxMAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDQJKi8KKwkJCTB4MTQJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQ1CSovCisJCQkweDE4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkNgkqLworCQkJMHgxYwkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDcJKi8KKwkJCTB4MjAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQ4CSovCisJCQkweDI0CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkOQkqLworCQkJMHgyOAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDEwCSovCisJCQkweDJjCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkMTEJKi8KKwkJCTB4MzAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQxMgkqLworCQkJMHgzNAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkJLyogZ3BtY19hZDEzCSovCisJCQkweDM4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKQkvKiBncG1jX2FkMTQJKi8KKwkJCTB4M2MJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfYWQxNQkqLworCQkJMHhkOAkoUElOX0lOUFVUX1BVTExVUCAgfCBNVVhfTU9ERTApCS8qIGdwbWNfd2FpdDAJKi8KKwkJCTB4Y2MJKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGdwbWNfd2VuCSovCisJCQkweGI0CShQSU5fT1VUUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogZ3BtY19jc24wCSovCisJCQkweGM0CShQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBncG1jX2Fkdm5fYWxlICovCisJCQkweGM4CShQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBncG1jX29lbl9yZW4JICovCisJCQkweGQwCShQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBncG1jX2JlMG5fY2xlICovCisJCT47CisJfTsKIH07CiAKICZpMmMxIHsKQEAgLTI3MywzICszMzEsMTY3IEBACiAmY3B1MCB7CiAJY3B1MC1zdXBwbHkgPSA8JnNtcHMxMjNfcmVnPjsKIH07CisKKyZxc3BpIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnFzcGkxX3BpbnM+OworCisJc3BpLW1heC1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OworCW0yNXA4MEAwIHsKKwkJY29tcGF0aWJsZSA9ICJzMjVmbDI1NnMxIjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OworCQlyZWcgPSA8MD47CisJCXNwaS10eC1idXMtd2lkdGggPSA8MT47CisJCXNwaS1yeC1idXMtd2lkdGggPSA8ND47CisJCXNwaS1jcG9sOworCQlzcGktY3BoYTsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCS8qIE1URCBwYXJ0aXRpb24gdGFibGUuCisJCSAqIFRoZSBST00gY2hlY2tzIHRoZSBmaXJzdCBmb3VyIHBoeXNpY2FsIGJsb2NrcworCQkgKiBmb3IgYSB2YWxpZCBmaWxlIHRvIGJvb3QgYW5kIHRoZSBmbGFzaCBoZXJlIGlzCisJCSAqIDY0S2lCIGJsb2NrIHNpemUuCisJCSAqLworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJRU1BJLlNQTCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxIHsKKwkJCWxhYmVsID0gIlFTUEkuU1BMLmJhY2t1cDEiOworCQkJcmVnID0gPDB4MDAwMTAwMDAgMHgwMDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAyIHsKKwkJCWxhYmVsID0gIlFTUEkuU1BMLmJhY2t1cDIiOworCQkJcmVnID0gPDB4MDAwMjAwMDAgMHgwMDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAzIHsKKwkJCWxhYmVsID0gIlFTUEkuU1BMLmJhY2t1cDMiOworCQkJcmVnID0gPDB4MDAwMzAwMDAgMHgwMDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA0IHsKKwkJCWxhYmVsID0gIlFTUEkudS1ib290IjsKKwkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDAxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANSB7CisJCQlsYWJlbCA9ICJRU1BJLnUtYm9vdC1zcGwtb3MiOworCQkJcmVnID0gPDB4MDAxNDAwMDAgMHgwMDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA2IHsKKwkJCWxhYmVsID0gIlFTUEkudS1ib290LWVudiI7CisJCQlyZWcgPSA8MHgwMDE1MDAwMCAweDAwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDcgeworCQkJbGFiZWwgPSAiUVNQSS51LWJvb3QtZW52LmJhY2t1cDEiOworCQkJcmVnID0gPDB4MDAxNjAwMDAgMHgwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDggeworCQkJbGFiZWwgPSAiUVNQSS5rZXJuZWwiOworCQkJcmVnID0gPDB4MDAxNzAwMDAgMHgwODAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDkgeworCQkJbGFiZWwgPSAiUVNQSS5maWxlLXN5c3RlbSI7CisJCQlyZWcgPSA8MHgwMDk3MDAwMCAweDAxNjkwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJnVzYjEgeworCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjFfcGlucz47Cit9OworCismdXNiMiB7CisJZHJfbW9kZSA9ICJob3N0IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdXNiMl9waW5zPjsKK307CisKKyZlbG0geworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZncG1jIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm5hbmRfZmxhc2hfeDE2PjsKKwlyYW5nZXMgPSA8MCAwIDAgMHgwMTAwMDAwMD47CS8qIG1pbmltdW0gR1BNQyBwYXJ0aXRpb24gPSAxNk1CICovCisJbmFuZEAwLDAgeworCQlyZWcgPSA8MCAwIDQ+OwkJLyogZGV2aWNlIElPIHJlZ2lzdGVycyAqLworCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7CisJCXRpLGVsbS1pZCA9IDwmZWxtPjsKKwkJbmFuZC1idXMtd2lkdGggPSA8MTY+OworCQlncG1jLGRldmljZS13aWR0aCA9IDwyPjsKKwkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8NDA+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsYWR2LW9uLW5zID0gPDA+OworCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MzA+OworCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8MzA+OworCQlncG1jLHdlLW9uLW5zID0gPDU+OworCQlncG1jLHdlLW9mZi1ucyA9IDwyNT47CisJCWdwbWMsb2Utb24tbnMgPSA8Mj47CisJCWdwbWMsb2Utb2ZmLW5zID0gPDIwPjsKKwkJZ3BtYyxhY2Nlc3MtbnMgPSA8MjA+OworCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDw0MD47CisJCWdwbWMscmQtY3ljbGUtbnMgPSA8NDA+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDQwPjsKKwkJZ3BtYyx3YWl0LXBpbiA9IDwwPjsKKwkJZ3BtYyx3YWl0LW9uLXJlYWQ7CisJCWdwbWMsd2FpdC1vbi13cml0ZTsKKwkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDwwPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDwwPjsKKwkJZ3BtYyxjbGstYWN0aXZhdGlvbi1ucyA9IDwwPjsKKwkJZ3BtYyx3YWl0LW1vbml0b3JpbmctbnMgPSA8MD47CisJCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OworCQkvKiBNVEQgcGFydGl0aW9uIHRhYmxlICovCisJCS8qIEFsbCBTUEwtKiBwYXJ0aXRpb25zIGFyZSBzaXplZCB0byBtaW5pbWFsIGxlbmd0aAorCQkgKiB3aGljaCBjYW4gYmUgaW5kZXBlbmRlbnRseSBwcm9ncmFtbWFibGUuIEZvcgorCQkgKiBOQU5EIGZsYXNoIHRoaXMgaXMgZXF1YWwgdG8gc2l6ZSBvZiBlcmFzZS1ibG9jayAqLworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIk5BTkQuU1BMIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMSI7CisJCQlyZWcgPSA8MHgwMDAyMDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDIgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMiI7CisJCQlyZWcgPSA8MHgwMDA0MDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDMgeworCQkJbGFiZWwgPSAiTkFORC5TUEwuYmFja3VwMyI7CisJCQlyZWcgPSA8MHgwMDA2MDAwMCAweDAwMDIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDQgeworCQkJbGFiZWwgPSAiTkFORC51LWJvb3Qtc3BsLW9zIjsKKwkJCXJlZyA9IDwweDAwMDgwMDAwIDB4MDAwNDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANSB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdCI7CisJCQlyZWcgPSA8MHgwMDBjMDAwMCAweDAwMTAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDYgeworCQkJbGFiZWwgPSAiTkFORC51LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDAwMWMwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANyB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4MDAxZTAwMDAgMHgwMDAyMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA4IHsKKwkJCWxhYmVsID0gIk5BTkQua2VybmVsIjsKKwkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDA4MDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AOSB7CisJCQlsYWJlbCA9ICJOQU5ELmZpbGUtc3lzdGVtIjsKKwkJCXJlZyA9IDwweDAwYTAwMDAwIDB4MGY2MDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCmluZGV4IDE0OWI1NTAuLmMyOTk0NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKQEAgLTMzLDMzICszMyw2IEBACiAJCXNlcmlhbDUgPSAmdWFydDY7CiAJfTsKIAotCWNwdXMgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0KLQkJY3B1MDogY3B1QDAgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOwotCQkJcmVnID0gPDA+OwotCi0JCQlvcGVyYXRpbmctcG9pbnRzID0gPAotCQkJCS8qIGtIeiAgICB1ViAqLwotCQkJCTEwMDAwMDAJMTA2MDAwMAotCQkJCTExNzYwMDAJMTE2MDAwMAotCQkJCT47Ci0KLQkJCWNsb2NrcyA9IDwmZHBsbF9tcHVfY2s+OwotCQkJY2xvY2stbmFtZXMgPSAiY3B1IjsKLQotCQkJY2xvY2stbGF0ZW5jeSA9IDwzMDAwMDA+OyAvKiBGcm9tIG9tYXAtY3B1ZnJlcSBkcml2ZXIgKi8KLQkJfTsKLQkJY3B1QDEgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOwotCQkJcmVnID0gPDE+OwotCQl9OwotCX07Ci0KIAl0aW1lciB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY3LXRpbWVyIjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCkBAIC05OSwxMyArNzIsMTMgQEAKIAkgKiBoaWVyYXJjaHkuCiAJICovCiAJb2NwIHsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1sMy1ub2MiLCAic2ltcGxlLWJ1cyI7CisJCWNvbXBhdGlibGUgPSAidGksZHJhNy1sMy1ub2MiLCAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzOwogCQl0aSxod21vZHMgPSAibDNfbWFpbl8xIiwgImwzX21haW5fMiI7Ci0JCXJlZyA9IDwweDQ0MDAwMDAwIDB4MjAwMD4sCi0JCSAgICAgIDwweDQ0ODAwMDAwIDB4MzAwMD47CisJCXJlZyA9IDwweDQ0MDAwMDAwIDB4MTAwMDAwMD4sCisJCSAgICAgIDwweDQ1MDAwMDAwIDB4MTAwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8R0lDX1NQSSAxMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIApAQCAtNzg5LDYgKzc2MiwyMjggQEAKIAkJCWRtYS1uYW1lcyA9ICJ0eDAiLCAicngwIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKKwkJcXNwaTogcXNwaUA0YjMwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGRyYTd4eHgtcXNwaSI7CisJCQlyZWcgPSA8MHg0YjMwMDAwMCAweDEwMD47CisJCQlyZWctbmFtZXMgPSAicXNwaV9iYXNlIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQl0aSxod21vZHMgPSAicXNwaSI7CisJCQljbG9ja3MgPSA8JnFzcGlfZ2ZjbGtfZGl2PjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCQludW0tY3MgPSA8ND47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzQzIDB4ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW9tYXBfY29udHJvbF9zYXRhOiBjb250cm9sLXBoeUA0YTAwMjM3NCB7CisJCQljb21wYXRpYmxlID0gInRpLGNvbnRyb2wtcGh5LXBpcGUzIjsKKwkJCXJlZyA9IDwweDRhMDAyMzc0IDB4ND47CisJCQlyZWctbmFtZXMgPSAicG93ZXIiOworCQkJY2xvY2tzID0gPCZzeXNfY2xraW4xPjsKKwkJCWNsb2NrLW5hbWVzID0gInN5c2NsayI7CisJCX07CisKKwkJLyogT0NQMlNDUDMgKi8KKwkJb2NwMnNjcEA0YTA5MDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLG9tYXAtb2NwMnNjcCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCQkJcmVnID0gPDB4NGEwOTAwMDAgMHgyMD47CisJCQl0aSxod21vZHMgPSAib2NwMnNjcDMiOworCQkJc2F0YV9waHk6IHBoeUA0QTA5NjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxwaHktcGlwZTMtc2F0YSI7CisJCQkJcmVnID0gPDB4NEEwOTYwMDAgMHg4MD4sIC8qIHBoeV9yeCAqLworCQkJCSAgICAgIDwweDRBMDk2NDAwIDB4NjQ+LCAvKiBwaHlfdHggKi8KKwkJCQkgICAgICA8MHg0QTA5NjgwMCAweDQwPjsgLyogcGxsX2N0cmwgKi8KKwkJCQlyZWctbmFtZXMgPSAicGh5X3J4IiwgInBoeV90eCIsICJwbGxfY3RybCI7CisJCQkJY3RybC1tb2R1bGUgPSA8Jm9tYXBfY29udHJvbF9zYXRhPjsKKwkJCQljbG9ja3MgPSA8JnN5c19jbGtpbjE+OworCQkJCWNsb2NrLW5hbWVzID0gInN5c2NsayI7CisJCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJc2F0YTogc2F0YUA0YTE0MTEwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjLWFoY2kiOworCQkJcmVnID0gPDB4NGExNDAwMDAgMHgxMTAwPiwgPDB4NGExNDExMDAgMHg3PjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXBoeXMgPSA8JnNhdGFfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJzYXRhLXBoeSI7CisJCQljbG9ja3MgPSA8JnNhdGFfcmVmX2Nsaz47CisJCQl0aSxod21vZHMgPSAic2F0YSI7CisJCX07CisKKwkJb21hcF9jb250cm9sX3VzYjJwaHkxOiBjb250cm9sLXBoeUA0YTAwMjMwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGNvbnRyb2wtcGh5LXVzYjIiOworCQkJcmVnID0gPDB4NGEwMDIzMDAgMHg0PjsKKwkJCXJlZy1uYW1lcyA9ICJwb3dlciI7CisJCX07CisKKwkJb21hcF9jb250cm9sX3VzYjNwaHkxOiBjb250cm9sLXBoeUA0YTAwMjM3MCB7CisJCQljb21wYXRpYmxlID0gInRpLGNvbnRyb2wtcGh5LXBpcGUzIjsKKwkJCXJlZyA9IDwweDRhMDAyMzcwIDB4ND47CisJCQlyZWctbmFtZXMgPSAicG93ZXIiOworCQl9OworCisJCW9tYXBfY29udHJvbF91c2IycGh5MjogY29udHJvbC1waHlAMHg0YTAwMmU3NCB7CisJCQljb21wYXRpYmxlID0gInRpLGNvbnRyb2wtcGh5LXVzYjItZHJhNyI7CisJCQlyZWcgPSA8MHg0YTAwMmU3NCAweDQ+OworCQkJcmVnLW5hbWVzID0gInBvd2VyIjsKKwkJfTsKKworCQkvKiBPQ1AyU0NQMSAqLworCQlvY3Ayc2NwQDRhMDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksb21hcC1vY3Ayc2NwIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXM7CisJCQlyZWcgPSA8MHg0YTA4MDAwMCAweDIwPjsKKwkJCXRpLGh3bW9kcyA9ICJvY3Ayc2NwMSI7CisKKwkJCXVzYjJfcGh5MTogcGh5QDRhMDg0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLG9tYXAtdXNiMiI7CisJCQkJcmVnID0gPDB4NGEwODQwMDAgMHg0MDA+OworCQkJCWN0cmwtbW9kdWxlID0gPCZvbWFwX2NvbnRyb2xfdXNiMnBoeTE+OworCQkJCWNsb2NrcyA9IDwmdXNiX3BoeTFfYWx3YXlzX29uX2NsazMyaz4sCisJCQkJCSA8JnVzYl9vdGdfc3MxX3JlZmNsazk2MG0+OworCQkJCWNsb2NrLW5hbWVzID0JIndrdXBjbGsiLAorCQkJCQkJInJlZmNsayI7CisJCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCX07CisKKwkJCXVzYjJfcGh5MjogcGh5QDRhMDg1MDAwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLG9tYXAtdXNiMiI7CisJCQkJcmVnID0gPDB4NGEwODUwMDAgMHg0MDA+OworCQkJCWN0cmwtbW9kdWxlID0gPCZvbWFwX2NvbnRyb2xfdXNiMnBoeTI+OworCQkJCWNsb2NrcyA9IDwmdXNiX3BoeTJfYWx3YXlzX29uX2NsazMyaz4sCisJCQkJCSA8JnVzYl9vdGdfc3MyX3JlZmNsazk2MG0+OworCQkJCWNsb2NrLW5hbWVzID0JIndrdXBjbGsiLAorCQkJCQkJInJlZmNsayI7CisJCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCX07CisKKwkJCXVzYjNfcGh5MTogcGh5QDRhMDg0NDAwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLG9tYXAtdXNiMyI7CisJCQkJcmVnID0gPDB4NGEwODQ0MDAgMHg4MD4sCisJCQkJICAgICAgPDB4NGEwODQ4MDAgMHg2ND4sCisJCQkJICAgICAgPDB4NGEwODRjMDAgMHg0MD47CisJCQkJcmVnLW5hbWVzID0gInBoeV9yeCIsICJwaHlfdHgiLCAicGxsX2N0cmwiOworCQkJCWN0cmwtbW9kdWxlID0gPCZvbWFwX2NvbnRyb2xfdXNiM3BoeTE+OworCQkJCWNsb2NrcyA9IDwmdXNiX3BoeTNfYWx3YXlzX29uX2NsazMyaz4sCisJCQkJCSA8JnN5c19jbGtpbjE+LAorCQkJCQkgPCZ1c2Jfb3RnX3NzMV9yZWZjbGs5NjBtPjsKKwkJCQljbG9jay1uYW1lcyA9CSJ3a3VwY2xrIiwKKwkJCQkJCSJzeXNjbGsiLAorCQkJCQkJInJlZmNsayI7CisJCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJb21hcF9kd2MzXzFANDg4ODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKKwkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMSI7CisJCQlyZWcgPSA8MHg0ODg4MDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA3NyA0PjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQl1dG1pLW1vZGUgPSA8Mj47CisJCQlyYW5nZXM7CisJCQl1c2IxOiB1c2JANDg4OTAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MzIjsKKwkJCQlyZWcgPSA8MHg0ODg5MDAwMCAweDE3MDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgNzYgND47CisJCQkJcGh5cyA9IDwmdXNiMl9waHkxPiwgPCZ1c2IzX3BoeTE+OworCQkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSIsICJ1c2IzLXBoeSI7CisJCQkJdHgtZmlmby1yZXNpemU7CisJCQkJbWF4aW11bS1zcGVlZCA9ICJzdXBlci1zcGVlZCI7CisJCQkJZHJfbW9kZSA9ICJvdGciOworCQkJfTsKKwkJfTsKKworCQlvbWFwX2R3YzNfMkA0ODhjMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGR3YzMiOworCQkJdGksaHdtb2RzID0gInVzYl9vdGdfc3MyIjsKKwkJCXJlZyA9IDwweDQ4OGMwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDkyIDQ+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXV0bWktbW9kZSA9IDwyPjsKKwkJCXJhbmdlczsKKwkJCXVzYjI6IHVzYkA0ODhkMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3YzMiOworCQkJCXJlZyA9IDwweDQ4OGQwMDAwIDB4MTcwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCA3OCA0PjsKKwkJCQlwaHlzID0gPCZ1c2IyX3BoeTI+OworCQkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSI7CisJCQkJdHgtZmlmby1yZXNpemU7CisJCQkJbWF4aW11bS1zcGVlZCA9ICJoaWdoLXNwZWVkIjsKKwkJCQlkcl9tb2RlID0gIm90ZyI7CisJCQl9OworCQl9OworCisJCS8qIElSUSBmb3IgRFdDM18zIGFuZCBEV0MzXzQgbmVlZCBJUlEgY3Jvc3NiYXIgKi8KKwkJb21hcF9kd2MzXzNANDg5MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKKwkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMyI7CisJCQlyZWcgPSA8MHg0ODkwMDAwMCAweDEwMDAwPjsKKwkJLyoJaW50ZXJydXB0cyA9IDwwIFRCRCA0PjsgKi8KKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQl1dG1pLW1vZGUgPSA8Mj47CisJCQlyYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJdXNiMzogdXNiQDQ4OTEwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7CisJCQkJcmVnID0gPDB4NDg5MTAwMDAgMHgxNzAwMD47CisJCS8qCQlpbnRlcnJ1cHRzID0gPDAgOTMgND47ICovCisJCQkJdHgtZmlmby1yZXNpemU7CisJCQkJbWF4aW11bS1zcGVlZCA9ICJoaWdoLXNwZWVkIjsKKwkJCQlkcl9tb2RlID0gIm90ZyI7CisJCQl9OworCQl9OworCisJCW9tYXBfZHdjM180QDQ4OTQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksZHdjMyI7CisJCQl0aSxod21vZHMgPSAidXNiX290Z19zczQiOworCQkJcmVnID0gPDB4NDg5NDAwMDAgMHgxMDAwMD47CisJCS8qCWludGVycnVwdHMgPSA8MCBUQkQgND47ICovCisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJdXRtaS1tb2RlID0gPDI+OworCQkJcmFuZ2VzOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCXVzYjQ6IHVzYkA0ODk1MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3YzMiOworCQkJCXJlZyA9IDwweDQ4OTUwMDAwIDB4MTcwMDA+OworCQkvKgkJaW50ZXJydXB0cyA9IDwwIFRCRCA0PjsgKi8KKwkJCQl0eC1maWZvLXJlc2l6ZTsKKwkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOworCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCX07CisJCX07CisKKwkJZWxtOiBlbG1ANDgwNzgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTItZWxtIjsKKwkJCXJlZyA9IDwweDQ4MDc4MDAwIDB4ZmMwPjsgICAgICAvKiBkZXZpY2UgSU8gcmVnaXN0ZXJzICovCisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXRpLGh3bW9kcyA9ICJlbG0iOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlncG1jOiBncG1jQDUwMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW0zMzUyLWdwbWMiOworCQkJdGksaHdtb2RzID0gImdwbWMiOworCQkJcmVnID0gPDB4NTAwMDAwMDAgMHgzN2M+OyAgICAgIC8qIGRldmljZSBJTyByZWdpc3RlcnMgKi8KKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWdwbWMsbnVtLWNzID0gPDg+OworCQkJZ3BtYyxudW0td2FpdHBpbnMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzItZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyLWV2bS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0NzAyMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyLWV2bS5kdHMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImRyYTcyeC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJUSSBEUkE3MjIiOworCWNvbXBhdGlibGUgPSAidGksZHJhNzItZXZtIiwgInRpLGRyYTcyMiIsICJ0aSxkcmE3MiIsICJ0aSxkcmE3IjsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDgwMDAwMDAwIDB4NDAwMDAwMDA+OyAvKiAxMDI0IE1CICovCisJfTsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzJ4LmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlYzIyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyeC5kdHNpCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIEJhc2VkIG9uICJvbWFwNC5kdHNpIgorICovCisKKyNpbmNsdWRlICJkcmE3LmR0c2kiCisKKy8geworCWNvbXBhdGlibGUgPSAidGksZHJhNzIyIiwgInRpLGRyYTcyIiwgInRpLGRyYTciOworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlyZWcgPSA8MD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZThiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBCYXNlZCBvbiAib21hcDQuZHRzaSIKKyAqLworCisjaW5jbHVkZSAiZHJhNy5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gInRpLGRyYTc0MiIsICJ0aSxkcmE3NCIsICJ0aSxkcmE3IjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1MDogY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDA+OworCisJCQlvcGVyYXRpbmctcG9pbnRzID0gPAorCQkJCS8qIGtIeiAgICB1ViAqLworCQkJCTEwMDAwMDAJMTA2MDAwMAorCQkJCTExNzYwMDAJMTE2MDAwMAorCQkJCT47CisKKwkJCWNsb2NrcyA9IDwmZHBsbF9tcHVfY2s+OworCQkJY2xvY2stbmFtZXMgPSAiY3B1IjsKKworCQkJY2xvY2stbGF0ZW5jeSA9IDwzMDAwMDA+OyAvKiBGcm9tIG9tYXAtY3B1ZnJlcSBkcml2ZXIgKi8KKwkJfTsKKwkJY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhN3h4LWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhN3h4LWNsb2Nrcy5kdHNpCmluZGV4IGNmYjhmYzcuLmM3Njc2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTd4eC1jbG9ja3MuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3eHgtY2xvY2tzLmR0c2kKQEAgLTEzODYsNiArMTM4NiwxNCBAQAogCQl0aSxkaXZpZGVycyA9IDwxPiwgPDg+OwogCX07CiAKKwlsM2luaXRfOTYwbV9nZmNsazogbDNpbml0Xzk2MG1fZ2ZjbGsgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHBsbF91c2JfY2xrZGNvbGRvPjsKKwkJdGksYml0LXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHgwNmMwPjsKKwl9OworCiAJZHNzXzMya2h6X2NsazogZHNzXzMya2h6X2NsayB7CiAJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKQEAgLTE1MzMsNyArMTU0MSw3IEBACiAJdXNiX290Z19zczFfcmVmY2xrOTYwbTogdXNiX290Z19zczFfcmVmY2xrOTYwbSB7CiAJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZkcGxsX3VzYl9jbGtkY29sZG8+OworCQljbG9ja3MgPSA8JmwzaW5pdF85NjBtX2dmY2xrPjsKIAkJdGksYml0LXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgxM2YwPjsKIAl9OwpAQCAtMTU0MSw3ICsxNTQ5LDcgQEAKIAl1c2Jfb3RnX3NzMl9yZWZjbGs5NjBtOiB1c2Jfb3RnX3NzMl9yZWZjbGs5NjBtIHsKIAkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInRpLGdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmRwbGxfdXNiX2Nsa2Rjb2xkbz47CisJCWNsb2NrcyA9IDwmbDNpbml0Xzk2MG1fZ2ZjbGs+OwogCQl0aSxiaXQtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDEzNDA+OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjkyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaQpAQCAtMCwwICsxLDQ3NSBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3MzMjUwIFNvQ3MgcGluLW11eCBhbmQgcGluLWNvbmZpZyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogU2Ftc3VuZydzIEV4eW5vczMyNTAgU29DcyBwaW4tbXV4IGFuZCBwaW4tY29uZmlnIG9wdGlvc24gYXJlIGxpc3RlZCBhcyBkZXZpY2UKKyAqIHRyZWUgbm9kZXMgYXJlIGxpc3RlZCBpbiB0aGlzIGZpbGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyZwaW5jdHJsXzAgeworCWdwYTA6IGdwYTAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGExOiBncGExIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BiOiBncGIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGMwOiBncGMwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BjMTogZ3BjMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZDA6IGdwZDAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGQxOiBncGQxIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJdWFydDBfZGF0YTogdWFydDAtZGF0YSB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTAiLCAiZ3BhMC0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MHgyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQwX2ZjdGw6IHVhcnQwLWZjdGwgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC0yIiwgImdwYTAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDFfZGF0YTogdWFydDEtZGF0YSB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTQiLCAiZ3BhMC01IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0MV9mY3RsOiB1YXJ0MS1mY3RsIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtNiIsICJncGEwLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzJfYnVzOiBpMmMyLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTYiLCAiZ3BhMC03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMzX2J1czogaTJjMy1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMS0yIiwgImdwYTEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJc3BpMF9idXM6IHNwaTAtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYi0wIiwgImdwYi0yIiwgImdwYi0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmM0X2J1czogaTJjNC1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiLTAiLCAiZ3BiLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTFfYnVzOiBzcGkxLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGItNCIsICJncGItNiIsICJncGItNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjNV9idXM6IGkyYzUtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYi0yIiwgImdwYi0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMnMyX2J1czogaTJzMi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMS0wIiwgImdwYzEtMSIsICJncGMxLTIiLCAiZ3BjMS0zIiwKKwkJCQkiZ3BjMS00IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlwY20yX2J1czogcGNtMi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMS0wIiwgImdwYzEtMSIsICJncGMxLTIiLCAiZ3BjMS0zIiwKKwkJCQkiZ3BjMS00IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmM2X2J1czogaTJjNi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMS0zIiwgImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDQ+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMF9vdXQ6IHB3bTAtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMV9vdXQ6IHB3bTEtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjN19idXM6IGkyYzctYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMiIsICJncGQwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXB3bTJfb3V0OiBwd20yLW91dCB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXB3bTNfb3V0OiBwd20zLW91dCB7CisJCXNhbXN1bmcscGlucyA9ICJncGQwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzBfYnVzOiBpMmMwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGQxLTAiLCAiZ3BkMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwltaXBpMF9jbGs6IG1pcGkwLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGQxLTAiLCAiZ3BkMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMxX2J1czogaTJjMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BkMS0yIiwgImdwZDEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJZ3BlMDogZ3BlMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZTE6IGdwZTEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCX07CisKKwlncGUyOiBncGUyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BrMDogZ3BrMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwazE6IGdwazEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGsyOiBncGsyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BsMDogZ3BsMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbTA6IGdwbTAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG0xOiBncG0xIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtMjogZ3BtMiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbTM6IGdwbTMgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG00OiBncG00IHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3B4MDogZ3B4MCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8MCAzMiAwPiwgPDAgMzMgMD4sIDwwIDM0IDA+LCA8MCAzNSAwPiwKKwkJCQk8MCAzNiAwPiwgPDAgMzcgMD4sIDwwIDM4IDA+LCA8MCAzOSAwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3B4MTogZ3B4MSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8MCA0MCAwPiwgPDAgNDEgMD4sIDwwIDQyIDA+LCA8MCA0MyAwPiwKKwkJCQk8MCA0NCAwPiwgPDAgNDUgMD4sIDwwIDQ2IDA+LCA8MCA0NyAwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3B4MjogZ3B4MiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDM6IGdweDMgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlzZDBfY2xrOiBzZDAtY2xrIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2NtZDogc2QwLWNtZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9jZDogc2QwLWNkIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazAtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX3JkcXM6IHNkMC1yZHFzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazAtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2J1czE6IHNkMC1idXMtd2lkdGgxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2J1czQ6IHNkMC1idXMtd2lkdGg0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazAtNCIsICJncGswLTUiLCAiZ3BrMC02IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfYnVzODogc2QwLWJ1cy13aWR0aDggeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BsMC0wIiwgImdwbDAtMSIsICJncGwwLTIiLCAiZ3BsMC0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfY2xrOiBzZDEtY2xrIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazEtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2NtZDogc2QxLWNtZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9jZDogc2QxLWNkIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazEtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2J1czE6IHNkMS1idXMtd2lkdGgxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2J1czQ6IHNkMS1idXMtd2lkdGg0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwazEtNCIsICJncGsxLTUiLCAiZ3BrMS02IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwljYW1fcG9ydF9iX2lvOiBjYW0tcG9ydC1iLWlvIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTAtMCIsICJncG0wLTEiLCAiZ3BtMC0yIiwgImdwbTAtMyIsCisJCQkJImdwbTAtNCIsICJncG0wLTUiLCAiZ3BtMC02IiwgImdwbTAtNyIsCisJCQkJImdwbTEtMCIsICJncG0xLTEiLCAiZ3BtMi0wIiwgImdwbTItMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJY2FtX3BvcnRfYl9jbGtfYWN0aXZlOiBjYW0tcG9ydC1iLWNsay1hY3RpdmUgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BtMi0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwljYW1fcG9ydF9iX2Nsa19pZGxlOiBjYW0tcG9ydC1iLWNsay1pZGxlIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTItMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJZmltY19pc19pMmMwOiBmaW1jLWlzLWkyYzAgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BtNC0wIiwgImdwbTQtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJZmltY19pc19pMmMxOiBmaW1jLWlzLWkyYzEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BtNC0yIiwgImdwbTQtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJZmltY19pc191YXJ0OiBmaW1jLWlzLXVhcnQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BtMy01IiwgImdwbTMtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY3OGZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC5kdHNpCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogU2Ftc3VuZydzIEV4eW5vczMyNTAgU29DIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBTYW1zdW5nJ3MgRXh5bm9zMzI1MCBTb0MgZGV2aWNlIG5vZGVzIGFyZSBsaXN0ZWQgaW4gdGhpcyBmaWxlLiBFeHlub3MzMjUwCisgKiBiYXNlZCBib2FyZCBmaWxlcyBjYW4gaW5jbHVkZSB0aGlzIGZpbGUgYW5kIHByb3ZpZGUgdmFsdWVzIGZvciBib2FyZCBzcGVjZmljCisgKiBiaW5kaW5ncy4KKyAqCisgKiBOb3RlOiBUaGlzIGZpbGUgZG9lcyBub3QgaW5jbHVkZSBkZXZpY2Ugbm9kZXMgZm9yIGFsbCB0aGUgY29udHJvbGxlcnMgaW4KKyAqIEV4eW5vczMyNTAgU29DLiBBcyBkZXZpY2UgdHJlZSBjb3ZlcmFnZSBmb3IgRXh5bm9zMzI1MCBpbmNyZWFzZXMsIGFkZGl0aW9uYWwKKyAqIG5vZGVzIGNhbiBiZSBhZGRlZCB0byB0aGlzIGZpbGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9leHlub3MzMjUwLmg+CisKKy8geworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJYWxpYXNlcyB7CisJCXBpbmN0cmwwID0gJnBpbmN0cmxfMDsKKwkJcGluY3RybDEgPSAmcGluY3RybF8xOworCQltc2hjMCA9ICZtc2hjXzA7CisJCW1zaGMxID0gJm1zaGNfMTsKKwkJc3BpMCA9ICZzcGlfMDsKKwkJc3BpMSA9ICZzcGlfMTsKKwkJaTJjMCA9ICZpMmNfMDsKKwkJaTJjMSA9ICZpMmNfMTsKKwkJaTJjMiA9ICZpMmNfMjsKKwkJaTJjMyA9ICZpMmNfMzsKKwkJaTJjNCA9ICZpMmNfNDsKKwkJaTJjNSA9ICZpMmNfNTsKKwkJaTJjNiA9ICZpMmNfNjsKKwkJaTJjNyA9ICZpMmNfNzsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUxOiBjcHVAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDAwPjsKKwkJfTsKKwl9OworCisJc29jOiBzb2MgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlmaXhlZC1yYXRlLWNsb2NrcyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQl4dXNieHRpOiBjbG9ja0AwIHsKKwkJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlyZWcgPSA8MD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAieHVzYnh0aSI7CisJCQl9OworCisJCQl4eHRpOiBjbG9ja0AxIHsKKwkJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCQlyZWcgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAieHh0aSI7CisJCQl9OworCisJCQl4dGN4bzogY2xvY2tAMiB7CisJCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkJcmVnID0gPDI+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInh0Y3hvIjsKKwkJCX07CisJCX07CisKKwkJc3lzcmFtQDAyMDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJCXJlZyA9IDwweDAyMDIwMDAwIDB4NDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlcyA9IDwwIDB4MDIwMjAwMDAgMHg0MDAwMD47CisKKwkJCXNtcC1zeXNyYW1AMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMD47CisJCQl9OworCisJCQlzbXAtc3lzcmFtQDNmMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0tbnMiOworCQkJCXJlZyA9IDwweDNmMDAwIDB4MTAwMD47CisJCQl9OworCQl9OworCisJCWNoaXBpZEAxMDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1jaGlwaWQiOworCQkJcmVnID0gPDB4MTAwMDAwMDAgMHgxMDA+OworCQl9OworCisJCXN5c19yZWc6IHN5c2NvbkAxMDAxMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMy1zeXNyZWciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDEwMDEwMDAwIDB4NDAwPjsKKwkJfTsKKworCQlwbXVfc3lzdGVtX2NvbnRyb2xsZXI6IHN5c3RlbS1jb250cm9sbGVyQDEwMDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLXBtdSIsICJzeXNjb24iOworCQkJcmVnID0gPDB4MTAwMjAwMDAgMHg0MDAwPjsKKwkJfTsKKworCQlwZF9jYW06IGNhbS1wb3dlci1kb21haW5AMTAwMjNDMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjNDMDAgMHgyMD47CisJCX07CisKKwkJcGRfbWZjOiBtZmMtcG93ZXItZG9tYWluQDEwMDIzQzQwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBkIjsKKwkJCXJlZyA9IDwweDEwMDIzQzQwIDB4MjA+OworCQl9OworCisJCXBkX2czZDogZzNkLXBvd2VyLWRvbWFpbkAxMDAyM0M2MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyM0M2MCAweDIwPjsKKwkJfTsKKworCQlwZF9sY2QwOiBsY2QwLXBvd2VyLWRvbWFpbkAxMDAyM0M4MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyM0M4MCAweDIwPjsKKwkJfTsKKworCQlwZF9pc3A6IGlzcC1wb3dlci1kb21haW5AMTAwMjNDQTAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjNDQTAgMHgyMD47CisJCX07CisKKwkJY211OiBjbG9jay1jb250cm9sbGVyQDEwMDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLWNtdSI7CisJCQlyZWcgPSA8MHgxMDAzMDAwMCAweDIwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlydGM6IHJ0Y0AxMDA3MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjNjQxMC1ydGMiOworCQkJcmVnID0gPDB4MTAwNzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDczIDA+LCA8MCA3NCAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMDQ4MTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDQ4MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTA0ODIwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDEwNDg0MDAwIDB4MjAwMD4sCisJCQkgICAgICA8MHgxMDQ4NjAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OworCQl9OworCisJCW1jdEAxMDA1MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1tY3QiOworCQkJcmVnID0gPDB4MTAwNTAwMDAgMHg4MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIxOCAwPiwgPDAgMjE5IDA+LCA8MCAyMjAgMD4sIDwwIDIyMSAwPiwKKwkJCQkgICAgIDwwIDIyMyAwPiwgPDAgMjI2IDA+LCA8MCAyMjcgMD4sIDwwIDIyOCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19GSU5fUExMPiwgPCZjbXUgQ0xLX01DVD47CisJCQljbG9jay1uYW1lcyA9ICJmaW5fcGxsIiwgIm1jdCI7CisJCX07CisKKwkJcGluY3RybF8xOiBwaW5jdHJsQDExMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLXBpbmN0cmwiOworCQkJcmVnID0gPDB4MTEwMDAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyMjUgMD47CisKKwkJCXdha2V1cC1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtd2FrZXVwLWVpbnQiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDQ4IDA+OworCQkJfTsKKwkJfTsKKworCQlwaW5jdHJsXzA6IHBpbmN0cmxAMTE0MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczMyNTAtcGluY3RybCI7CisJCQlyZWcgPSA8MHgxMTQwMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDI0MCAwPjsKKwkJfTsKKworCQltc2hjXzA6IG1zaGNAMTI1MTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxMjUxMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0MiAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TRE1NQzA+LCA8JmNtdSBDTEtfU0NMS19NTUMwPjsKKwkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCQkJZmlmby1kZXB0aCA9IDwweDgwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1zaGNfMTogbXNoY0AxMjUyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweDEyNTIwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQzIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NETU1DMT4sIDwmY211IENMS19TQ0xLX01NQzE+OworCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisJCQlmaWZvLWRlcHRoID0gPDB4ODA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJYW1iYSB7CisJCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJCXJhbmdlczsKKworCQkJcGRtYTA6IHBkbWFAMTI2ODAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzMwIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweDEyNjgwMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEzOCAwPjsKKwkJCQljbG9ja3MgPSA8JmNtdSBDTEtfUERNQTA+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQkjZG1hLWNlbGxzID0gPDE+OworCQkJCSNkbWEtY2hhbm5lbHMgPSA8OD47CisJCQkJI2RtYS1yZXF1ZXN0cyA9IDwzMj47CisJCQl9OworCisJCQlwZG1hMTogcGRtYUAxMjY5MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MTI2OTAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTM5IDA+OworCQkJCWNsb2NrcyA9IDwmY211IENMS19QRE1BMT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCSNkbWEtY2VsbHMgPSA8MT47CisJCQkJI2RtYS1jaGFubmVscyA9IDw4PjsKKwkJCQkjZG1hLXJlcXVlc3RzID0gPDMyPjsKKwkJCX07CisJCX07CisKKwkJYWRjOiBhZGNAMTI2QzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vcy1hZGMtdjMiOworCQkJcmVnID0gPDB4MTI2QzAwMDAgMHgxMDA+LCA8MHgxMDAyMDcxOCAweDQ+OworCQkJaW50ZXJydXB0cyA9IDwwIDEzNyAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImFkYyIsICJzY2xrX3RzYWRjIjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19UU0FEQz4sIDwmY211IENMS19TQ0xLX1RTQURDPjsKKwkJCSNpby1jaGFubmVsLWNlbGxzID0gPDE+OworCQkJaW8tY2hhbm5lbC1yYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbF8wOiBzZXJpYWxAMTM4MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMzgwMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA5IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VBUlQwPiwgPCZjbXUgQ0xLX1NDTEtfVUFSVDA+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbF8xOiBzZXJpYWxAMTM4MTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMzgxMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEwIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VBUlQxPiwgPCZjbXUgQ0xLX1NDTEtfVUFSVDE+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY18wOiBpMmNAMTM4NjAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzg2MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEzIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzA+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzBfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzE6IGkyY0AxMzg3MDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzODcwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTQgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDMT47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMV9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfMjogaTJjQDEzODgwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4ODAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExNSAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkMyPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMyX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY18zOiBpMmNAMTM4OTAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzg5MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE2IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzM+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzNfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzQ6IGkyY0AxMzhBMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzOEEwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTcgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDND47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjNF9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfNTogaTJjQDEzOEIwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4QjAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExOCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkM1PjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmM1X2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY182OiBpMmNAMTM4QzAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzhDMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE5IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzY+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzZfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzc6IGkyY0AxMzhEMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzOEQwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjAgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDNz47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjN19idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlfMDogc3BpQDEzOTIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXNwaSI7CisJCQlyZWcgPSA8MHgxMzkyMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTIxIDA+OworCQkJZG1hcyA9IDwmcGRtYTAgNz4sIDwmcGRtYTAgNj47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TUEkwPiwgPCZjbXUgQ0xLX1NDTEtfU1BJMD47CisJCQljbG9jay1uYW1lcyA9ICJzcGkiLCAic3BpX2J1c2NsazAiOworCQkJc2Ftc3VuZyxzcGktc3JjLWNsayA9IDwwPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnNwaTBfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpXzE6IHNwaUAxMzkzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zcGkiOworCQkJcmVnID0gPDB4MTM5MzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMiAwPjsKKwkJCWRtYXMgPSA8JnBkbWExIDc+LCA8JnBkbWExIDY+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU1BJMT4sIDwmY211IENMS19TQ0xLX1NQSTE+OworCQkJY2xvY2stbmFtZXMgPSAic3BpIiwgInNwaV9idXNjbGswIjsKKwkJCXNhbXN1bmcsc3BpLXNyYy1jbGsgPSA8MD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzcGkxX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXB3bTogcHdtQDEzOUQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXB3bSI7CisJCQlyZWcgPSA8MHgxMzlEMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwNCAwPiwgPDAgMTA1IDA+LCA8MCAxMDYgMD4sCisJCQkJICAgICA8MCAxMDcgMD4sIDwwIDEwOCAwPjsKKwkJCSNwd20tY2VsbHMgPSA8Mz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXBtdSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctcG11IjsKKwkJCWludGVycnVwdHMgPSA8MCAxOCAwPiwgPDAgMTkgMD47CisJCX07CisJfTsKK307CisKKyNpbmNsdWRlICJleHlub3MzMjUwLXBpbmN0cmwuZHRzaSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaQppbmRleCAyZjhiY2QwLi5iOGVjZTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNC5kdHNpCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vczQuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9leHlub3MtYXVkc3MtY2xrLmg+CiAjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKIAogLyB7CkBAIC00NSw2ICs0NiwyMyBAQAogCQlmaW1jMyA9ICZmaW1jXzM7CiAJfTsKIAorCWNsb2NrX2F1ZHNzOiBjbG9jay1jb250cm9sbGVyQDAzODEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtYXVkc3MtY2xvY2siOworCQlyZWcgPSA8MHgwMzgxMDAwMCAweDBDPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKKwlpMnMwOiBpMnNAMDM4MzAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVwdjIxMC1pMnMiOworCQlyZWcgPSA8MHgwMzgzMDAwMCAweDEwMD47CisJCWNsb2NrcyA9IDwmY2xvY2tfYXVkc3MgRVhZTk9TX0kyU19CVVM+OworCQljbG9jay1uYW1lcyA9ICJpaXMiOworCQlkbWFzID0gPCZwZG1hMCAxMj4sIDwmcGRtYTAgMTE+LCA8JnBkbWEwIDEwPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IiwgInR4LXNlYyI7CisJCXNhbXN1bmcsaWRtYS1hZGRyID0gPDB4MDMwMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAljaGlwaWRAMTAwMDAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1jaGlwaWQiOwogCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMD47CkBAIC0xMTAsNiArMTI4LDExIEBACiAJCXJlZyA9IDwweDEwMDEwMDAwIDB4NDAwPjsKIAl9OwogCisJcG11X3N5c3RlbV9jb250cm9sbGVyOiBzeXN0ZW0tY29udHJvbGxlckAxMDAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIsICJzeXNjb24iOworCQlyZWcgPSA8MHgxMDAyMDAwMCAweDQwMDA+OworCX07CisKIAlkc2lfMDogZHNpQDExQzgwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtbWlwaS1kc2kiOwogCQlyZWcgPSA8MHgxMUM4MDAwMCAweDEwMDAwPjsKQEAgLTExNyw3ICsxNDAsNyBAQAogCQlzYW1zdW5nLHBvd2VyLWRvbWFpbiA9IDwmcGRfbGNkMD47CiAJCXBoeXMgPSA8Jm1pcGlfcGh5IDE+OwogCQlwaHktbmFtZXMgPSAiZHNpbSI7Ci0JCWNsb2NrcyA9IDwmY2xvY2sgMjg2PiwgPCZjbG9jayAxNDM+OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19EU0lNMD4sIDwmY2xvY2sgQ0xLX1NDTEtfTUlQSTA+OwogCQljbG9jay1uYW1lcyA9ICJidXNfY2xrIiwgInBsbF9jbGsiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTEyOSwxMiArMTUyLDEwIEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2FtX2FfY2xrb3V0IiwgImNhbV9iX2Nsa291dCI7CiAJCXJhbmdlczsKIAotCQljbG9ja19jYW06IGNsb2NrLWNvbnRyb2xsZXIgewotCQkJICNjbG9jay1jZWxscyA9IDwxPjsKLQkJfTsKLQogCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtZmltYyI7CiAJCQlyZWcgPSA8MHgxMTgwMDAwMCAweDEwMDA+OwpAQCAtMjczLDYgKzI5NCwyNyBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwlleHlub3NfdXNicGh5OiBleHlub3MtdXNicGh5QDEyNUIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdXNiMi1waHkiOworCQlyZWcgPSA8MHgxMjVCMDAwMCAweDEwMD47CisJCXNhbXN1bmcscG11cmVnLXBoYW5kbGUgPSA8JnBtdV9zeXN0ZW1fY29udHJvbGxlcj47CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VTQl9ERVZJQ0U+LCA8JmNsb2NrIENMS19YVVNCWFRJPjsKKwkJY2xvY2stbmFtZXMgPSAicGh5IiwgInJlZiI7CisJCSNwaHktY2VsbHMgPSA8MT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWhzb3RnQDEyNDgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzY0MDAtaHNvdGciOworCQlyZWcgPSA8MHgxMjQ4MDAwMCAweDIwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDcxIDA+OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0JfREVWSUNFPjsKKwkJY2xvY2stbmFtZXMgPSAib3RnIjsKKwkJcGh5cyA9IDwmZXh5bm9zX3VzYnBoeSAwPjsKKwkJcGh5LW5hbWVzID0gInVzYjItcGh5IjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJZWhjaUAxMjU4MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWVoY2kiOwogCQlyZWcgPSA8MHgxMjU4MDAwMCAweDEwMD47CkBAIC0yOTEsNiArMzMzLDI2IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWkyczE6IGkyc0AxMzk2MDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNXB2MjEwLWkycyI7CisJCXJlZyA9IDwweDEzOTYwMDAwIDB4MTAwPjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJTMT47CisJCWNsb2NrLW5hbWVzID0gImlpcyI7CisJCWRtYXMgPSA8JnBkbWExIDEyPiwgPCZwZG1hMSAxMT47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyczI6IGkyc0AxMzk3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNXB2MjEwLWkycyI7CisJCXJlZyA9IDwweDEzOTcwMDAwIDB4MTAwPjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJTMj47CisJCWNsb2NrLW5hbWVzID0gImlpcyI7CisJCWRtYXMgPSA8JnBkbWEwIDE0PiwgPCZwZG1hMCAxMz47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCW1mYzogY29kZWNAMTM0MDAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsbWZjLXY1IjsKIAkJcmVnID0gPDB4MTM0MDAwMDAgMHgxMDAwMD47CkBAIC0zNzEsNiArNDMzLDggQEAKIAkJaW50ZXJydXB0cyA9IDwwIDYwIDA+OwogCQljbG9ja3MgPSA8JmNsb2NrIENMS19JMkMyPjsKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZpMmMyX2J1cz47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzgyLDYgKzQ0Niw4IEBACiAJCWludGVycnVwdHMgPSA8MCA2MSAwPjsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJDMz47CiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJjM19idXM+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTM5Myw2ICs0NTksOCBAQAogCQlpbnRlcnJ1cHRzID0gPDAgNjIgMD47CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0kyQzQ+OwogCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmkyYzRfYnVzPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC00MDQsNiArNDcyLDggQEAKIAkJaW50ZXJydXB0cyA9IDwwIDYzIDA+OwogCQljbG9ja3MgPSA8JmNsb2NrIENMS19JMkM1PjsKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZpMmM1X2J1cz47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDE1LDYgKzQ4NSw4IEBACiAJCWludGVycnVwdHMgPSA8MCA2NCAwPjsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJDNj47CiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJjNl9idXM+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTQyNiw2ICs0OTgsOCBAQAogCQlpbnRlcnJ1cHRzID0gPDAgNjUgMD47CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0kyQzc+OwogCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmkyYzdfYnVzPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLW9yaWdlbi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLW9yaWdlbi5kdHMKaW5kZXggNzJmYjExZi4uZjc2N2M0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC1vcmlnZW4uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtb3JpZ2VuLmR0cwpAQCAtMTYsNiArMTYsNyBAQAogCiAvZHRzLXYxLzsKICNpbmNsdWRlICJleHlub3M0MjEwLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KIAogLyB7CiAJbW9kZWwgPSAiSW5zaWduYWwgT3JpZ2VuIGV2YWx1YXRpb24gYm9hcmQgYmFzZWQgb24gRXh5bm9zNDIxMCI7CkBAIC00OCw2ICs0OSwxNCBAQAogCQl9OwogCX07CiAKKwl3YXRjaGRvZ0AxMDA2MDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcnRjQDEwMDcwMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKIAl0bXVAMTAwQzAwMDAgewogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKQEAgLTI1MSwzNSArMjYwLDM1IEBACiAJCXVwIHsKIAkJCWxhYmVsID0gIlVwIjsKIAkJCWdwaW9zID0gPCZncHgyIDAgMT47Ci0JCQlsaW51eCxjb2RlID0gPDEwMz47CisJCQlsaW51eCxjb2RlID0gPEtFWV9VUD47CiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CiAKIAkJZG93biB7CiAJCQlsYWJlbCA9ICJEb3duIjsKIAkJCWdwaW9zID0gPCZncHgyIDEgMT47Ci0JCQlsaW51eCxjb2RlID0gPDEwOD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9ET1dOPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQliYWNrIHsKIAkJCWxhYmVsID0gIkJhY2siOwogCQkJZ3Bpb3MgPSA8JmdweDEgNyAxPjsKLQkJCWxpbnV4LGNvZGUgPSA8MTU4PjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0JBQ0s+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWhvbWUgewogCQkJbGFiZWwgPSAiSG9tZSI7CiAJCQlncGlvcyA9IDwmZ3B4MSA2IDE+OwotCQkJbGludXgsY29kZSA9IDwxMDI+OworCQkJbGludXgsY29kZSA9IDxLRVlfSE9NRT47CiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CiAKIAkJbWVudSB7CiAJCQlsYWJlbCA9ICJNZW51IjsKIAkJCWdwaW9zID0gPCZncHgxIDUgMT47Ci0JCQlsaW51eCxjb2RlID0gPDEzOT47CisJCQlsaW51eCxjb2RlID0gPEtFWV9NRU5VPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC10cmF0cy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cwppbmRleCA2M2FhMmJiLi5mNTE2ZGE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cwpAQCAtODgsNiArODgsMTIgQEAKIAkJfTsKIAl9OwogCisJaHNvdGdAMTI0ODAwMDAgeworCQl2dXNiX2Qtc3VwcGx5ID0gPCZ2dXNiX3JlZz47CisJCXZ1c2JfYS1zdXBwbHkgPSA8JnZ1c2JkYWNfcmVnPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKIAlzZGhjaV9lbW1jOiBzZGhjaUAxMjUxMDAwMCB7CiAJCWJ1cy13aWR0aCA9IDw4PjsKIAkJbm9uLXJlbW92YWJsZTsKQEAgLTk3LDYgKzEwMywxMCBAQAogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKIAorCWV4eW5vcy11c2JwaHlAMTI1QjAwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXNlcmlhbEAxMzgwMDAwMCB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXVuaXZlcnNhbF9jMjEwLmR0cwppbmRleCA2M2UzNGIyLi5kNTBlYjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXVuaXZlcnNhbF9jMjEwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXVuaXZlcnNhbF9jMjEwLmR0cwpAQCAtMjgsNiArMjgsMjEgQEAKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQUMyLDExNTIwME44IHJvb3Q9L2Rldi9tbWNibGswcDUgcncgcm9vdHdhaXQgZWFybHlwcmludGsgcGFuaWM9NSBtYXhjcHVzPTEiOwogCX07CiAKKwlzeXNyYW1AMDIwMjAwMDAgeworCQlzbXAtc3lzcmFtQDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzbXAtc3lzcmFtQDUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtIjsKKwkJCXJlZyA9IDwweDUwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlzbXAtc3lzcmFtQDFmMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKwogCW1jdEAxMDA1MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAibm9uZSI7CiAJfTsKQEAgLTUzLDYgKzY4LDEyIEBACiAJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAl9OwogCisJaHNvdGdAMTI0ODAwMDAgeworCQl2dXNiX2Qtc3VwcGx5ID0gPCZsZG8zX3JlZz47CisJCXZ1c2JfYS1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKIAlzZGhjaV9lbW1jOiBzZGhjaUAxMjUxMDAwMCB7CiAJCWJ1cy13aWR0aCA9IDw4PjsKIAkJbm9uLXJlbW92YWJsZTsKQEAgLTYyLDYgKzgzLDM0IEBACiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwogCisJc2RoY2lfc2Q6IHNkaGNpQDEyNTMwMDAwIHsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQlwaW5jdHJsLTAgPSA8JnNkMl9jbGsgJnNkMl9jbWQgJnNkMl9idXM0PjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJdm1tYy1zdXBwbHkgPSA8JmxkbzVfcmVnPjsKKwkJY2QtZ3Bpb3MgPSA8JmdweDMgNCAwPjsKKwkJY2QtaW52ZXJ0ZWQ7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJZWhjaUAxMjU4MDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJcG9ydEAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJb2hjaUAxMjU5MDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJcG9ydEAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJZXh5bm9zLXVzYnBoeUAxMjVCMDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCiAJc2VyaWFsQDEzODAwMDAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CkBAIC0yMDEsNiArMjUwLDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVlVTQitNSVBJXzEuMVYiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKIAkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJfTsKIAogCQkJCWxkbzRfcmVnOiBMRE80IHsKQEAgLTIzMSw2ICsyODEsNyBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWVVNCK1ZEQUNfMy4zViI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCQl9OwogCiAJCQkJbGRvOV9yZWc6IExETzkgewpAQCAtNDEzLDYgKzQ2NCwyOSBAQAogCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVwNjQ0MC1wd20iOwogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKKworCWNhbWVyYSB7CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8PjsKKworCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlmaW1jXzM6IGZpbWNAMTE4MzAwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCX07CiB9OwogCiAmbWRtYTEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpCmluZGV4IGNhY2Y2MTQuLmVlMzAwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLmR0c2kKQEAgLTMxLDYgKzMxLDI0IEBACiAJCXBpbmN0cmwyID0gJnBpbmN0cmxfMjsKIAl9OwogCisJc3lzcmFtQDAyMDIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQlyZWcgPSA8MHgwMjAyMDAwMCAweDIwMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDAyMDIwMDAwIDB4MjAwMDA+OworCisJCXNtcC1zeXNyYW1AMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0iOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQl9OworCisJCXNtcC1zeXNyYW1AMWYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtLW5zIjsKKwkJCXJlZyA9IDwweDFmMDAwIDB4MTAwMD47CisJCX07CisJfTsKKwogCXBkX2xjZDE6IGxjZDEtcG93ZXItZG9tYWluQDEwMDIzQ0EwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOwogCQlyZWcgPSA8MHgxMDAyM0NBMCAweDIwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb3JpZ2VuLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb3JpZ2VuLmR0cwppbmRleCBlMmMwZGNhLi5lOTI1YzlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9yaWdlbi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vcmlnZW4uZHRzCkBAIC0xNCw2ICsxNCw3IEBACiAKIC9kdHMtdjEvOwogI2luY2x1ZGUgImV4eW5vczQ0MTIuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogCiAvIHsKIAltb2RlbCA9ICJJbnNpZ25hbCBPcmlnZW4gZXZhbHVhdGlvbiBib2FyZCBiYXNlZCBvbiBFeHlub3M0NDEyIjsKQEAgLTQ4LDYgKzQ5LDE0IEBACiAJCX07CiAJfTsKIAorCXdhdGNoZG9nQDEwMDYwMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlydGNAMTAwNzAwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXBpbmN0cmxAMTEwMDAwMDAgewogCQlrZXlwYWRfcm93czoga2V5cGFkLXJvd3MgewogCQkJc2Ftc3VuZyxwaW5zID0gImdweDItMCIsICJncHgyLTEiLCAiZ3B4Mi0yIjsKQEAgLTc2LDM3ICs4NSwzNyBAQAogCQlrZXlfaG9tZSB7CiAJCQlrZXlwYWQscm93ID0gPDA+OwogCQkJa2V5cGFkLGNvbHVtbiA9IDwwPjsKLQkJCWxpbnV4LGNvZGUgPSA8MTAyPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0hPTUU+OwogCQl9OwogCiAJCWtleV9kb3duIHsKIAkJCWtleXBhZCxyb3cgPSA8MD47CiAJCQlrZXlwYWQsY29sdW1uID0gPDE+OwotCQkJbGludXgsY29kZSA9IDwxMDg+OworCQkJbGludXgsY29kZSA9IDxLRVlfRE9XTj47CiAJCX07CiAKIAkJa2V5X3VwIHsKIAkJCWtleXBhZCxyb3cgPSA8MT47CiAJCQlrZXlwYWQsY29sdW1uID0gPDA+OwotCQkJbGludXgsY29kZSA9IDwxMDM+OworCQkJbGludXgsY29kZSA9IDxLRVlfVVA+OwogCQl9OwogCiAJCWtleV9tZW51IHsKIAkJCWtleXBhZCxyb3cgPSA8MT47CiAJCQlrZXlwYWQsY29sdW1uID0gPDE+OwotCQkJbGludXgsY29kZSA9IDwxMzk+OworCQkJbGludXgsY29kZSA9IDxLRVlfTUVOVT47CiAJCX07CiAKIAkJa2V5X2JhY2sgewogCQkJa2V5cGFkLHJvdyA9IDwyPjsKIAkJCWtleXBhZCxjb2x1bW4gPSA8MD47Ci0JCQlsaW51eCxjb2RlID0gPDE1OD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9CQUNLPjsKIAkJfTsKIAogCQlrZXlfZW50ZXIgewogCQkJa2V5cGFkLHJvdyA9IDwyPjsKIAkJCWtleXBhZCxjb2x1bW4gPSA8MT47Ci0JCQlsaW51eCxjb2RlID0gPDI4PjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0VOVEVSPjsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLXRyYXRzMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLXRyYXRzMi5kdHMKaW5kZXggOGE1NThiNy4uNzc4Nzg0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi10cmF0czIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItdHJhdHMyLmR0cwpAQCAtMjAsNyArMjAsOCBAQAogCWNvbXBhdGlibGUgPSAic2Ftc3VuZyx0cmF0czIiLCAic2Ftc3VuZyxleHlub3M0NDEyIiwgInNhbXN1bmcsZXh5bm9zNCI7CiAKIAlhbGlhc2VzIHsKLQkJaTJjOCA9ICZpMmNfYWs4OTc1OworCQlpMmM5ID0gJmkyY19hazg5NzU7CisJCWkyYzEwID0gJmkyY19jbTM2NjUxOwogCX07CiAKIAltZW1vcnkgewpAQCAtODAsMzkgKzgxLDY3IEBACiAJCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCX07CiAKLQkJLyogTW9yZSB0byBjb21lICovCisJCWNhbV9hZl9yZWc6IHZvbHRhZ2UtcmVndWxhdG9yLTMgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0FNX0FGIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQlncGlvID0gPCZncG0wIDQgMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCX07CisKKwkJY2FtX2lzcF9jb3JlX3JlZzogdm9sdGFnZS1yZWd1bGF0b3ItNCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fSVNQX0NPUkVfMS4yVl9FTiI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BtMCAzIDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQlwc19hbHNfcmVnOiB2b2x0YWdlLXJlZ3VsYXRvci01IHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIkxFRF9BXzMuMFYiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCWdwaW8gPSA8JmdwajAgNSAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKIAl9OwogCiAJZ3Bpby1rZXlzIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOwogCiAJCWtleS1kb3duIHsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwajE+OwotCQkJaW50ZXJydXB0cyA9IDwyIDA+OwotCQkJZ3Bpb3MgPSA8JmdwajEgMiAxPjsKKwkJCWdwaW9zID0gPCZncHgzIDMgMT47CiAJCQlsaW51eCxjb2RlID0gPDExND47CiAJCQlsYWJlbCA9ICJ2b2x1bWUgZG93biI7CiAJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxMD47CiAJCX07CiAKIAkJa2V5LXVwIHsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwajE+OwotCQkJaW50ZXJydXB0cyA9IDwxIDA+OwotCQkJZ3Bpb3MgPSA8JmdwajEgMSAxPjsKKwkJCWdwaW9zID0gPCZncHgyIDIgMT47CiAJCQlsaW51eCxjb2RlID0gPDExNT47CiAJCQlsYWJlbCA9ICJ2b2x1bWUgdXAiOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MTA+OwogCQl9OwogCiAJCWtleS1wb3dlciB7Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgyPjsKLQkJCWludGVycnVwdHMgPSA8NyAwPjsKIAkJCWdwaW9zID0gPCZncHgyIDcgMT47CiAJCQlsaW51eCxjb2RlID0gPDExNj47CiAJCQlsYWJlbCA9ICJwb3dlciI7CiAJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxMD47CiAJCQlncGlvLWtleSx3YWtldXA7CiAJCX07CisKKwkJa2V5LW9rIHsKKwkJCWdwaW9zID0gPCZncHgwIDEgMT47CisJCQlsaW51eCxjb2RlID0gPDEzOT47CisJCQlsYWJlbCA9ICJvayI7CisJCQlkZWJvdW5jZS1pbnRldmFsID0gPDEwPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKIAl9OwogCiAJYWRjOiBhZGNAMTI2QzAwMDAgewpAQCAtMTQwLDYgKzE2OSwzOCBAQAogCQl9OwogCX07CiAKKwlpMmNfMDogaTJjQDEzODYwMDAwIHsKKwkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgxMD47CisJCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMDA+OworCQlwaW5jdHJsLTAgPSA8JmkyYzBfYnVzPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXM1YzczbTNAM2MgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1YzczbTMiOworCQkJcmVnID0gPDB4M2M+OworCQkJc3RhbmRieS1ncGlvcyA9IDwmZ3BtMCAxIDE+OyAgIC8qIElTUF9TVEFOREJZICovCisJCQl4c2h1dGRvd24tZ3Bpb3MgPSA8JmdwZjEgMyAxPjsgLyogSVNQX1JFU0VUICovCisJCQl2ZGQtaW50LXN1cHBseSA9IDwmYnVjazlfcmVnPjsKKwkJCXZkZGlvLWNpcy1zdXBwbHkgPSA8JmxkbzlfcmVnPjsKKwkJCXZkZGEtc3VwcGx5ID0gPCZsZG8xN19yZWc+OworCQkJdmRkaW8taG9zdC1zdXBwbHkgPSA8JmxkbzE4X3JlZz47CisJCQl2ZGQtYWYtc3VwcGx5ID0gPCZjYW1fYWZfcmVnPjsKKwkJCXZkZC1yZWctc3VwcGx5ID0gPCZjYW1faW9fcmVnPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJCQkvKiBDQU1fQV9DTEtPVVQgKi8KKwkJCWNsb2NrcyA9IDwmY2FtZXJhIDA+OworCQkJY2xvY2stbmFtZXMgPSAiY2lzX2V4dGNsayI7CisJCQlwb3J0IHsKKwkJCQlzNWM3M20zX2VwOiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmY3NpczBfZXA+OworCQkJCQlkYXRhLWxhbmVzID0gPDEgMiAzIDQ+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKIAlpMmNAMTM4RDAwMDAgewogCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKIAkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDEwPjsKQEAgLTUwOSw2ICs1NzAsMjIgQEAKIAkJfTsKIAl9OwogCisJaTJjX2NtMzY2NTE6IGkyYy1ncGlvLTIgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8JmdwZjAgMCAxPiwgPCZncGYwIDEgMT47CisJCWkyYy1ncGlvLGRlbGF5LXVzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY20zNjY1MUAxOCB7CisJCQljb21wYXRpYmxlID0gImNhcGVsbGEsY20zNjY1MSI7CisJCQlyZWcgPSA8MHgxOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgwPjsKKwkJCWludGVycnVwdHMgPSA8MiAyPjsKKwkJCXZsZWQtc3VwcGx5ID0gPCZwc19hbHNfcmVnPjsKKwkJfTsKKwl9OworCiAJc3BpXzE6IHNwaUAxMzkzMDAwMCB7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmc3BpMV9idXM+OwpAQCAtNTg2LDggKzY2Myw4IEBACiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwogCi0JY2FtZXJhIHsKLQkJcGluY3RybC0wID0gPCZjYW1fcG9ydF9iX2Nsa19hY3RpdmU+OworCWNhbWVyYTogY2FtZXJhIHsKKwkJcGluY3RybC0wID0gPCZjYW1fcG9ydF9hX2Nsa19hY3RpdmUgJmNhbV9wb3J0X2JfY2xrX2FjdGl2ZT47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXN0YXR1cyA9ICJva2F5IjsKIApAQCAtNjA3LDYgKzY4NCwyMyBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCisJCWNzaXNfMDogY3Npc0AxMTg4MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OworCQkJdmRkaW8tc3VwcGx5ID0gPCZsZG8xMF9yZWc+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE3NjAwMDAwMD47CisKKwkJCS8qIENhbWVyYSBDICgzKSBNSVBJIENTSS0yIChDU0lTMCkgKi8KKwkJCXBvcnRAMyB7CisJCQkJcmVnID0gPDM+OworCQkJCWNzaXMwX2VwOiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmczVjNzNtM19lcD47CisJCQkJCWRhdGEtbGFuZXMgPSA8MSAyIDMgND47CisJCQkJCXNhbXN1bmcsY3Npcy1ocy1zZXR0bGUgPSA8MTI+OworCQkJCX07CisJCQl9OworCQl9OworCiAJCWNzaXNfMTogY3Npc0AxMTg5MDAwMCB7CiAJCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogCQkJdmRkaW8tc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwpAQCAtNjQ3LDEwICs3NDEsMTEgQEAKIAkJCQkJcmVnID0gPDB4MTA+OwogCQkJCQlzdmRkYS1zdXBwbHkgPSA8JmNhbV9pb19yZWc+OwogCQkJCQlzdmRkaW8tc3VwcGx5ID0gPCZsZG8xOV9yZWc+OworCQkJCQlhZnZkZC1zdXBwbHkgPSA8JmxkbzE5X3JlZz47CiAJCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CiAJCQkJCS8qIENBTV9CX0NMS09VVCAqLwotCQkJCQljbG9ja3MgPSA8JmNsb2NrX2NhbSAxPjsKLQkJCQkJY2xvY2stbmFtZXMgPSAibWNsayI7CisJCQkJCWNsb2NrcyA9IDwmY2FtZXJhIDE+OworCQkJCQljbG9jay1uYW1lcyA9ICJleHRjbGsiOwogCQkJCQlzYW1zdW5nLGNhbWNsay1vdXQgPSA8MT47CiAJCQkJCWdwaW9zID0gPCZncG0xIDYgMD47CiAKQEAgLTY2NSw2ICs3NjAsMTYgQEAKIAkJfTsKIAl9OwogCisJZXh5bm9zLXVzYnBoeUAxMjVCMDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJaHNvdGdAMTI0ODAwMDAgeworCQl2dXNiX2Qtc3VwcGx5ID0gPCZsZG8xNV9yZWc+OworCQl2dXNiX2Etc3VwcGx5ID0gPCZsZG8xMl9yZWc+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXRoZXJtaXN0b3ItYXBAMCB7CiAJCWNvbXBhdGlibGUgPSAibnRjLG5jcDE1d2I0NzMiOwogCQlwdWxsdXAtdXYgPSA8MTgwMDAwMD47CSAvKiBWQ0NfMS44Vl9BUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi5kdHNpCmluZGV4IDE1ZDNjMGEuLmM0MmEzZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kKQEAgLTI5LDQgKzI5LDggQEAKIAlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDkwMDAwIHsKIAkJY3B1LW9mZnNldCA9IDwweDQwMDA+OwogCX07CisKKwlwbXVfc3lzdGVtX2NvbnRyb2xsZXI6IHN5c3RlbS1jb250cm9sbGVyQDEwMDIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTItcG11IiwgInN5c2NvbiI7CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kKaW5kZXggYzRhOTMwNi4uYzVhOTQzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNHgxMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaQpAQCAtMzcsNiArMzcsMjQgQEAKIAkJaW50ZXJydXB0cyA9IDwyIDI+LCA8MyAyPiwgPDE4IDI+LCA8MTkgMj47CiAJfTsKIAorCXN5c3JhbUAwMjAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJcmVnID0gPDB4MDIwMjAwMDAgMHg0MDAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMHgwMjAyMDAwMCAweDQwMDAwPjsKKworCQlzbXAtc3lzcmFtQDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtIjsKKwkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJfTsKKworCQlzbXAtc3lzcmFtQDJmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbS1ucyI7CisJCQlyZWcgPSA8MHgyZjAwMCAweDEwMDA+OworCQl9OworCX07CisKIAlwZF9pc3A6IGlzcC1wb3dlci1kb21haW5AMTAwMjNDQTAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CiAJCXJlZyA9IDwweDEwMDIzQ0EwIDB4MjA+OwpAQCAtMTE5LDYgKzEzNywxMCBAQAogCQlpbnRlcnJ1cHRzID0gPDAgNzIgMD47CiAJfTsKIAorCXBtdV9zeXN0ZW1fY29udHJvbGxlcjogc3lzdGVtLWNvbnRyb2xsZXJAMTAwMjAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1wbXUiLCAic3lzY29uIjsKKwl9OworCiAJZzJkQDEwODAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItZzJkIjsKIAkJcmVnID0gPDB4MTA4MDAwMDAgMHgxMDAwPjsKQEAgLTI0Myw0ICsyNjUsOSBAQAogCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OworCisJZXh5bm9zLXVzYnBoeUAxMjVCMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0eDEyLXVzYjItcGh5IjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzX3JlZz47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWFybmRhbGUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1hcm5kYWxlLmR0cwppbmRleCBjZGUxOWM4Li5kMGRlMWY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWFybmRhbGUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtYXJuZGFsZS5kdHMKQEAgLTEyLDYgKzEyLDcgQEAKIC9kdHMtdjEvOwogI2luY2x1ZGUgImV4eW5vczUyNTAuZHRzaSIKICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogCiAvIHsKIAltb2RlbCA9ICJJbnNpZ25hbCBBcm5kYWxlIGV2YWx1YXRpb24gYm9hcmQgYmFzZWQgb24gRVhZTk9TNTI1MCI7CkBAIC00NDUsNDIgKzQ0Niw0MiBAQAogCQltZW51IHsKIAkJCWxhYmVsID0gIlNXLVRBQ1QyIjsKIAkJCWdwaW9zID0gPCZncHgxIDQgMT47Ci0JCQlsaW51eCxjb2RlID0gPDEzOT47CisJCQlsaW51eCxjb2RlID0gPEtFWV9NRU5VPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQlob21lIHsKIAkJCWxhYmVsID0gIlNXLVRBQ1QzIjsKIAkJCWdwaW9zID0gPCZncHgxIDUgMT47Ci0JCQlsaW51eCxjb2RlID0gPDEwMj47CisJCQlsaW51eCxjb2RlID0gPEtFWV9IT01FPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQl1cCB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUNCI7CiAJCQlncGlvcyA9IDwmZ3B4MSA2IDE+OwotCQkJbGludXgsY29kZSA9IDwxMDM+OworCQkJbGludXgsY29kZSA9IDxLRVlfVVA+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWRvd24gewogCQkJbGFiZWwgPSAiU1ctVEFDVDUiOwogCQkJZ3Bpb3MgPSA8JmdweDEgNyAxPjsKLQkJCWxpbnV4LGNvZGUgPSA8MTA4PjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0RPV04+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWJhY2sgewogCQkJbGFiZWwgPSAiU1ctVEFDVDYiOwogCQkJZ3Bpb3MgPSA8JmdweDIgMCAxPjsKLQkJCWxpbnV4LGNvZGUgPSA8MTU4PjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0JBQ0s+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCXdha2V1cCB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUNyI7CiAJCQlncGlvcyA9IDwmZ3B4MiAxIDE+OwotCQkJbGludXgsY29kZSA9IDwxNDM+OworCQkJbGludXgsY29kZSA9IDxLRVlfV0FLRVVQPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1jcm9zLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1jcm9zLWNvbW1vbi5kdHNpCmluZGV4IDJjMTU2MGQuLjg5YWM5MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtY3Jvcy1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWNyb3MtY29tbW9uLmR0c2kKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKIAkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDM3ODAwMD47CiAKLQkJaGRtaXBoeUAzOCB7CisJCWhkbWlwaHk6IGhkbWlwaHlAMzggewogCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaXBoeSI7CiAJCQlyZWcgPSA8MHgzOD47CiAJCX07CkBAIC0zMDQsNiArMzA0LDEwIEBACiAKIAloZG1pIHsKIAkJaHBkLWdwaW8gPSA8JmdweDMgNyAwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZoZG1pX2hwZF9pcnE+OworCQlwaHkgPSA8JmhkbWlwaHk+OworCQlkZGMgPSA8JmkyY18yPjsKIAl9OwogCiAJZ3Bpby1rZXlzIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1waW5jdHJsLmR0c2kKaW5kZXggOWE0OWU2OC4uODg2Y2ZjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1waW5jdHJsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1waW5jdHJsLmR0c2kKQEAgLTM1MSw2ICszNTEsMzQgQEAKIAkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKIAkJfTsKIAorCQlwd20wX291dDogcHdtMC1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMCI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQlwd20xX291dDogcHdtMS1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMSI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQlwd20yX291dDogcHdtMi1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMiI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQlwd20zX291dDogcHdtMy1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMyI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKwogCQlpMmM3X2J1czogaTJjNy1idXMgewogCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMiIsICJncGIyLTMiOwogCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNub3cuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbm93LmR0cwppbmRleCAxY2UxMDg4Li4wNzlmZGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNub3cuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc25vdy5kdHMKQEAgLTI1LDYgKzI1LDEzIEBACiAJfTsKIAogCXBpbmN0cmxAMTE0MDAwMDAgeworCQllY19pcnE6IGVjLWlycSB7CisJCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS02IjsKKwkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCQl9OworCiAJCXNkM19jbGs6IHNkMy1jbGsgewogCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwogCQl9OwpAQCAtMzcsNiArNDQsNTAgQEAKIAkJc2QzX2J1czQ6IHNkMy1idXMtd2lkdGg0IHsKIAkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKIAkJfTsKKworCQltYXg5ODA5NV9lbjogbWF4OTgwOTUtZW4geworCQkJc2Ftc3VuZyxwaW5zID0gImdweDEtNyI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQl0cHM2NTA5MF9pcnE6IHRwczY1MDkwLWlycSB7CisJCQlzYW1zdW5nLHBpbnMgPSAiZ3B4Mi02IjsKKwkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCQl9OworCisJCXVzYjNfdmJ1c19lbjogdXNiMy12YnVzLWVuIHsKKwkJCXNhbXN1bmcscGlucyA9ICJncHgyLTciOworCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MT47CisJCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJCX07CisKKwkJaGRtaV9ocGRfaXJxOiBoZG1pLWhwZC1pcnEgeworCQkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwxPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKwl9OworCisJcGluY3RybEAxMzQwMDAwMCB7CisJCWFyYl90aGVpcl9jbGFpbTogYXJiLXRoZWlyLWNsYWltIHsKKwkJCXNhbXN1bmcscGlucyA9ICJncGUwLTQiOworCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJCX07CisKKwkJYXJiX291cl9jbGFpbTogYXJiLW91ci1jbGFpbSB7CisJCQlzYW1zdW5nLHBpbnMgPSAiZ3BmMC0zIjsKKwkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCQl9OwogCX07CiAKIAlncGlvLWtleXMgewpAQCAtNTIsNiArMTAzLDEyIEBACiAJCX07CiAJfTsKIAorCXZiYXQ6IHZiYXQtZml4ZWQtcmVndWxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YmF0LXN1cHBseSI7CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07CisKIAlpMmMtYXJiaXRyYXRvciB7CiAJCWNvbXBhdGlibGUgPSAiaTJjLWFyYi1ncGlvLWNoYWxsZW5nZSI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNjUsNiArMTIyLDkgQEAKIAkJd2FpdC1yZXRyeS11cyA9IDwzMDAwPjsKIAkJd2FpdC1mcmVlLXVzID0gPDUwMDAwPjsKIAorCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmFyYl9vdXJfY2xhaW0gJmFyYl90aGVpcl9jbGFpbT47CisKIAkJLyogVXNlIElEIDEwNCBhcyBhIGhpbnQgdGhhdCB3ZSdyZSBvbiBwaHlzaWNhbCBidXMgNCAqLwogCQlpMmNfMTA0OiBpMmNAMCB7CiAJCQlyZWcgPSA8MD47CkBAIC04Miw2ICsxNDIsOCBAQAogCQkJCXJlZyA9IDwweDFlPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDYgMD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MT47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaW5jdHJsLTAgPSA8JmVjX2lycT47CiAJCQkJd2FrZXVwLXNvdXJjZTsKIAogCQkJCWtleWJvYXJkLWNvbnRyb2xsZXIgewpAQCAtMTczLDYgKzIzNSw4MyBAQAogCQkJCQkJCTB4MDcwYzAwNjk+OwkvKiBMRUZUICovCiAJCQkJfTsKIAkJCX07CisKKwkJCXBvd2VyLXJlZ3VsYXRvciB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTA5MCI7CisJCQkJcmVnID0gPDB4NDg+OworCisJCQkJLyoKKwkJCQkgKiBDb25maWcgaXJxIHRvIGRpc2FibGUgaW50ZXJuYWwgcHVsbHMKKwkJCQkgKiBldmVuIHRob3VnaCB3ZSBydW4gaW4gcG9sbGluZyBtb2RlLgorCQkJCSAqLworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGluY3RybC0wID0gPCZ0cHM2NTA5MF9pcnE+OworCisJCQkJdnN5czEtc3VwcGx5ID0gPCZ2YmF0PjsKKwkJCQl2c3lzMi1zdXBwbHkgPSA8JnZiYXQ+OworCQkJCXZzeXMzLXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQxLXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQyLXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQzLXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQ0LXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQ1LXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQ2LXN1cHBseSA9IDwmdmJhdD47CisJCQkJaW5mZXQ3LXN1cHBseSA9IDwmdmJhdD47CisJCQkJdnN5cy1sMS1zdXBwbHkgPSA8JnZiYXQ+OworCQkJCXZzeXMtbDItc3VwcGx5ID0gPCZ2YmF0PjsKKworCQkJCXJlZ3VsYXRvcnMgeworCQkJCQlkY2RjMSB7CisJCQkJCQl0aSxlbmFibGUtZXh0LWNvbnRyb2w7CisJCQkJCX07CisJCQkJCWRjZGMyIHsKKwkJCQkJCXRpLGVuYWJsZS1leHQtY29udHJvbDsKKwkJCQkJfTsKKwkJCQkJZGNkYzMgeworCQkJCQkJdGksZW5hYmxlLWV4dC1jb250cm9sOworCQkJCQl9OworCQkJCQlmZXQxIHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjZF9sZWQiOworCQkJCQkJdGksb3ZlcmN1cnJlbnQtd2FpdCA9IDwzPjsKKwkJCQkJfTsKKwkJCQkJdHBzNjUwOTBfZmV0MjogZmV0MiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2aWRlb19taWQiOworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXRpLG92ZXJjdXJyZW50LXdhaXQgPSA8Mz47CisJCQkJCX07CisJCQkJCWZldDMgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAid3dhbl9yIjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQl0aSxvdmVyY3VycmVudC13YWl0ID0gPDM+OworCQkJCQl9OworCQkJCQlmZXQ0IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNkY2FyZCI7CisJCQkJCQl0aSxvdmVyY3VycmVudC13YWl0ID0gPDM+OworCQkJCQl9OworCQkJCQlmZXQ1IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gImNhbW91dCI7CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJdGksb3ZlcmN1cnJlbnQtd2FpdCA9IDwzPjsKKwkJCQkJfTsKKwkJCQkJZmV0NiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsY2RfdmRkIjsKKwkJCQkJCXRpLG92ZXJjdXJyZW50LXdhaXQgPSA8Mz47CisJCQkJCX07CisJCQkJCXRwczY1MDkwX2ZldDc6IGZldDcgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmlkZW9fbWlkXzFhIjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQl0aSxvdmVyY3VycmVudC13YWl0ID0gPDM+OworCQkJCQl9OworCQkJCQlsZG8xIHsKKwkJCQkJfTsKKwkJCQkJbGRvMiB7CisJCQkJCX07CisJCQkJfTsKKworCQkJCWNoYXJnZXIgeworCQkJCQljb21wYXRpYmxlID0gInRpLHRwczY1MDkwLWNoYXJnZXIiOworCQkJCX07CisJCQl9OwogCQl9OwogCX07CiAKQEAgLTE5Niw2ICszMzUsNDEgQEAKIAkJfTsKIAl9OwogCisJaTJjQDEyQ0QwMDAwIHsKKwkJbWF4OTgwOTU6IGNvZGVjQDExIHsKKwkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4OTgwOTUiOworCQkJcmVnID0gPDB4MTE+OworCQkJcGluY3RybC0wID0gPCZtYXg5ODA5NV9lbj47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQl9OworCX07CisKKwlpMnMwOiBpMnNAMDM4MzAwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJnb29nbGUsc25vdy1hdWRpby1tYXg5ODA5NSI7CisKKwkJc2Ftc3VuZyxpMnMtY29udHJvbGxlciA9IDwmaTJzMD47CisJCXNhbXN1bmcsYXVkaW8tY29kZWMgPSA8Jm1heDk4MDk1PjsKKwl9OworCisJdXNiM192YnVzX3JlZzogcmVndWxhdG9yLXVzYjMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gIlA1LjBWX1VTQjNDT04iOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWdwaW8gPSA8JmdweDIgNyAwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IzX3ZidXNfZW4+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCXBoeUAxMjEwMDAwMCB7CisJCXZidXMtc3VwcGx5ID0gPCZ1c2IzX3ZidXNfcmVnPjsKKwl9OworCiAJdXNiQDEyMTEwMDAwIHsKIAkJc2Ftc3VuZyx2YnVzLWdwaW8gPSA8JmdweDEgMSAwPjsKIAl9OwpAQCAtMjA2LDQgKzM4MCw1NCBAQAogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKIAkJfTsKIAl9OworCisJaGRtaSB7CisJCWhkbWktZW4tc3VwcGx5ID0gPCZ0cHM2NTA5MF9mZXQ3PjsKKwkJdmRkLXN1cHBseSA9IDwmbGRvOF9yZWc+OworCQl2ZGRfb3NjLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKKwkJdmRkX3BsbC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl9OworCisJYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKwkJcHdtcyA9IDwmcHdtIDAgMTAwMDAwMCAwPjsKKwkJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCAxMDAgNTAwIDEwMDAgMTUwMCAyMDAwIDI1MDAgMjgwMD47CisJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw3PjsKKwkJcGluY3RybC0wID0gPCZwd20wX291dD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJfTsKKworCWZpbWRAMTQ0MDAwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJCXNhbXN1bmcsaW52ZXJ0LXZjbGs7CisJfTsKKworCWRwLWNvbnRyb2xsZXJAMTQ1QjAwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZHBfaHBkPjsKKwkJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKKwkJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCQlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OworCQlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OworCQlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwkJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDI+OworCQlzYW1zdW5nLGhwZC1ncGlvID0gPCZncHgwIDcgMD47CisKKwkJZGlzcGxheS10aW1pbmdzIHsKKwkJCW5hdGl2ZS1tb2RlID0gPCZ0aW1pbmcxPjsKKworCQkJdGltaW5nMTogdGltaW5nQDEgeworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3MDU4OTI4MD47CisJCQkJaGFjdGl2ZSA9IDwxMzY2PjsKKwkJCQl2YWN0aXZlID0gPDc2OD47CisJCQkJaGZyb250LXBvcmNoID0gPDQwPjsKKwkJCQloYmFjay1wb3JjaCA9IDw0MD47CisJCQkJaHN5bmMtbGVuID0gPDMyPjsKKwkJCQl2YmFjay1wb3JjaCA9IDwxMD47CisJCQkJdmZyb250LXBvcmNoID0gPDEyPjsKKwkJCQl2c3luYy1sZW4gPSA8Nj47CisJCQl9OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCmluZGV4IDM3NDIzMzEuLjgzNGZiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLmR0c2kKQEAgLTcyLDYgKzcyLDI0IEBACiAJCX07CiAJfTsKIAorCXN5c3JhbUAwMjAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJcmVnID0gPDB4MDIwMjAwMDAgMHgzMDAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMHgwMjAyMDAwMCAweDMwMDAwPjsKKworCQlzbXAtc3lzcmFtQDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtIjsKKwkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJfTsKKworCQlzbXAtc3lzcmFtQDJmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbS1ucyI7CisJCQlyZWcgPSA8MHgyZjAwMCAweDEwMDA+OworCQl9OworCX07CisKIAlwZF9nc2M6IGdzYy1wb3dlci1kb21haW5AMTAwNDQwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CiAJCXJlZyA9IDwweDEwMDQ0MDAwIDB4MjA+OwpAQCAtMTc1LDYgKzE5MywxMSBAQAogCQlyZWcgPSA8MHgxMDA0MDAwMCAweDUwMDA+OwogCX07CiAKKwlzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI6IHN5c2NvbkAxMDA1MDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1LXN5c3JlZyIsICJzeXNjb24iOworCQlyZWcgPSA8MHgxMDA1MDAwMCAweDUwMDA+OworCX07CisKIAl3YXRjaGRvZ0AxMDFEMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXdkdCI7CiAJCXJlZyA9IDwweDEwMUQwMDAwIDB4MTAwPjsKQEAgLTI1MCw3ICsyNzMsNyBAQAogCXNhdGFfcGh5OiBzYXRhLXBoeUAxMjE3MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXNhdGEtcGh5IjsKIAkJcmVnID0gPDB4MTIxNzAwMDAgMHgxZmY+OwotCQljbG9ja3MgPSA8JmNsb2NrIDI4Nz47CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1NBVEFfUEhZQ1RSTD47CiAJCWNsb2NrLW5hbWVzID0gInNhdGFfcGh5Y3RybCI7CiAJCSNwaHktY2VsbHMgPSA8MD47CiAJCXNhbXN1bmcsc3lzY29uLXBoYW5kbGUgPSA8JnBtdV9zeXN0ZW1fY29udHJvbGxlcj47CkBAIC01MzMsMjIgKzU1NiwxOCBAQAogCQkJY29tcGF0aWJsZSA9ICJzeW5vcHN5cyxkd2MzIjsKIAkJCXJlZyA9IDwweDEyMDAwMDAwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0cyA9IDwwIDcyIDA+OwotCQkJdXNiLXBoeSA9IDwmdXNiMl9waHkgJnVzYjNfcGh5PjsKKwkJCXBoeXMgPSA8JnVzYmRyZF9waHkgMD4sIDwmdXNiZHJkX3BoeSAxPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSIsICJ1c2IzLXBoeSI7CiAJCX07CiAJfTsKIAotCXVzYjNfcGh5OiB1c2JwaHlAMTIxMDAwMDAgewotCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC11c2IzcGh5IjsKKwl1c2JkcmRfcGh5OiBwaHlAMTIxMDAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC11c2JkcmQtcGh5IjsKIAkJcmVnID0gPDB4MTIxMDAwMDAgMHgxMDA+OwotCQljbG9ja3MgPSA8JmNsb2NrIENMS19GSU5fUExMPiwgPCZjbG9jayBDTEtfVVNCMz47Ci0JCWNsb2NrLW5hbWVzID0gImV4dF94dGFsIiwgInVzYmRyZDMwIjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXM7Ci0KLQkJdXNicGh5LXN5cyB7Ci0JCQlyZWcgPSA8MHgxMDA0MDcwNCAweDg+OwotCQl9OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0IzPiwgPCZjbG9jayBDTEtfRklOX1BMTD47CisJCWNsb2NrLW5hbWVzID0gInBoeSIsICJyZWYiOworCQlzYW1zdW5nLHBtdS1zeXNjb24gPSA8JnBtdV9zeXN0ZW1fY29udHJvbGxlcj47CisJCSNwaHktY2VsbHMgPSA8MT47CiAJfTsKIAogCXVzYkAxMjExMDAwMCB7CkBAIC01NTgsNiArNTc3LDEyIEBACiAKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNCMj47CiAJCWNsb2NrLW5hbWVzID0gInVzYmhvc3QiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvcnRAMCB7CisJCQlyZWcgPSA8MD47CisJCQlwaHlzID0gPCZ1c2IyX3BoeV9nZW4gMT47CisJCX07CiAJfTsKIAogCXVzYkAxMjEyMDAwMCB7CkBAIC01NjcsNiArNTkyLDEyIEBACiAKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNCMj47CiAJCWNsb2NrLW5hbWVzID0gInVzYmhvc3QiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvcnRAMCB7CisJCQlyZWcgPSA8MD47CisJCQlwaHlzID0gPCZ1c2IyX3BoeV9nZW4gMT47CisJCX07CiAJfTsKIAogCXVzYjJfcGh5OiB1c2JwaHlAMTIxMzAwMDAgewpAQCAtNTg0LDYgKzYxNSwxNiBAQAogCQl9OwogCX07CiAKKwl1c2IyX3BoeV9nZW46IHBoeUAxMjEzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLXVzYjItcGh5IjsKKwkJcmVnID0gPDB4MTIxMzAwMDAgMHgxMDA+OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0IyPiwgPCZjbG9jayBDTEtfRklOX1BMTD47CisJCWNsb2NrLW5hbWVzID0gInBoeSIsICJyZWYiOworCQkjcGh5LWNlbGxzID0gPDE+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OworCQlzYW1zdW5nLHBtdXJlZy1waGFuZGxlID0gPCZwbXVfc3lzdGVtX2NvbnRyb2xsZXI+OworCX07CisKIAlwd206IHB3bUAxMmRkMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXB3bSI7CiAJCXJlZyA9IDwweDEyZGQwMDAwIDB4MTAwPjsKQEAgLTY5MCw2ICs3MzEsNyBAQAogCQkJIDwmY2xvY2sgQ0xLX01PVVRfSERNST47CiAJCWNsb2NrLW5hbWVzID0gImhkbWkiLCAic2Nsa19oZG1pIiwgInNjbGtfcGl4ZWwiLAogCQkJCSJzY2xrX2hkbWlwaHkiLCAibW91dF9oZG1pIjsKKwkJc2Ftc3VuZyxzeXNjb24tcGhhbmRsZSA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKIAl9OwogCiAJbWl4ZXIgewpAQCAtNzMzLDcgKzc3NSw3IEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXNlY3NzIjsKIAkJcmVnID0gPDB4MTA4MzAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMTIgMD47Ci0JCWNsb2NrcyA9IDwmY2xvY2sgMzQ4PjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfU1NTPjsKIAkJY2xvY2stbmFtZXMgPSAic2Vjc3MiOwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI2MC1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjYwLXBpbmN0cmwuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVlNTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI2MC1waW5jdHJsLmR0c2kKQEAgLTAsMCArMSw1NzQgQEAKKy8qCisgKiBTYW1zdW5nJ3MgRXh5bm9zNTI2MCBTb0MgcGluLW11eCBhbmQgcGluLWNvbmZpZyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogU2Ftc3VuZydzIEV4eW5vczUyNjAgU29DIHBpbi1tdXggYW5kIHBpbi1jb25maWcgb3B0aW9ucyBhcmUgbGlzdGVkIGFzIGRldmljZQorICogdHJlZSBub2RlcyBhcmUgbGlzdGVkIGluIHRoaXMgZmlsZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBQSU5fUFVMTF9OT05FCTAKKyNkZWZpbmUgUElOX1BVTExfRE9XTgkxCisjZGVmaW5lIFBJTl9QVUxMX1VQCTMKKworJnBpbmN0cmxfMCB7CisJZ3BhMDogZ3BhMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYTE6IGdwYTEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGEyOiBncGEyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BiMDogZ3BiMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYjE6IGdwYjEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGIyOiBncGIyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BiMzogZ3BiMyB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYjQ6IGdwYjQgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGI1OiBncGI1IHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BkMDogZ3BkMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZDE6IGdwZDEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGQyOiBncGQyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BlMDogZ3BlMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZTE6IGdwZTEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGYwOiBncGYwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BmMTogZ3BmMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwazA6IGdwazAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgwOiBncHgwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3B4MTogZ3B4MSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDI6IGdweDIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgzOiBncHgzIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJdWFydDBfZGF0YTogdWFydDAtZGF0YSB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTAiLCAiZ3BhMC0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0MF9mY3RsOiB1YXJ0MC1mY3RsIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtMiIsICJncGEwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX05PTkU+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQxX2RhdGE6IHVhcnQxLWRhdGEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMS0wIiwgImdwYTEtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDFfZmN0bDogdWFydDEtZmN0bCB7CisJCXNhbXN1bmcscGlucyA9ICJncGExLTIiLCAiZ3BhMS0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0Ml9kYXRhOiB1YXJ0Mi1kYXRhIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTEtNCIsICJncGExLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX05PTkU+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTBfYnVzOiBzcGkwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGEyLTAiLCAiZ3BhMi0yIiwgImdwYTItMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTFfYnVzOiBzcGkxLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGEyLTQiLCAiZ3BhMi02IiwgImdwYTItNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVzYjNfdmJ1czBfZW46IHVzYjMtdmJ1czAtZW4geworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMi00IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MT47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMnMxX2J1czogaTJzMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiMC0wIiwgImdwYjAtMSIsICJncGIwLTIiLCAiZ3BiMC0zIiwKKwkJCQkiZ3BiMC00IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlwY20xX2J1czogcGNtMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiMC0wIiwgImdwYjAtMSIsICJncGIwLTIiLCAiZ3BiMC0zIiwKKwkJCQkiZ3BiMC00IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlzcGRpZjFfYnVzOiBzcGRpZjEtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYjAtMCIsICJncGIwLTEiLCAiZ3BiMC0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8ND47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlzcGkyX2J1czogc3BpMi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiMS0wIiwgImdwYjEtMiIsICJncGIxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMwX2hzX2J1czogaTJjMC1ocy1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiMy0wIiwgImdwYjMtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzFfaHNfYnVzOiBpMmMxLWhzLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGIzLTIiLCAiZ3BiMy0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9VUD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjMl9oc19idXM6IGkyYzItaHMtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYjMtNCIsICJncGIzLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMzX2hzX2J1czogaTJjMy1ocy1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiMy02IiwgImdwYjMtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzRfYnVzOiBpMmM0LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGI0LTAiLCAiZ3BiNC0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9VUD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjNV9idXM6IGkyYzUtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYjQtMiIsICJncGI0LTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmM2X2J1czogaTJjNi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiNC00IiwgImdwYjQtNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzdfYnVzOiBpMmM3LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGI0LTYiLCAiZ3BiNC03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9VUD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjOF9idXM6IGkyYzgtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYjUtMCIsICJncGI1LTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmM5X2J1czogaTJjOS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiNS0yIiwgImdwYjUtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzEwX2J1czogaTJjMTAtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYjUtNCIsICJncGI1LTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMxMV9idXM6IGkyYzExLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGI1LTYiLCAiZ3BiNS03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9VUD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJY2FtX2dwaW9fYTogY2FtLWdwaW8tYSB7CisJCXNhbXN1bmcscGlucyA9ICJncGUwLTAiLCAiZ3BlMC0xIiwgImdwZTAtMiIsICJncGUwLTMiLAorCQkJImdwZTAtNCIsICJncGUwLTUiLCAiZ3BlMC02IiwgImdwZTAtNyIsCisJCQkiZ3BlMS0wIiwgImdwZTEtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJY2FtX2dwaW9fYjogY2FtLWdwaW8tYiB7CisJCXNhbXN1bmcscGlucyA9ICJncGYwLTAiLCAiZ3BmMC0xIiwgImdwZjAtMiIsICJncGYwLTMiLAorCQkJImdwZjEtMCIsICJncGYxLTEiLCAiZ3BmMS0yIiwgImdwZjEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJY2FtX2kyYzFfYnVzOiBjYW0taTJjMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BmMC0yIiwgImdwZjAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWNhbV9pMmMwX2J1czogY2FtLWkyYzAtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZjAtMCIsICJncGYwLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwljYW1fc3BpMF9idXM6IGNhbS1zcGkwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGYxLTAiLCAiZ3BmMS0xIiwgImdwZjEtMiIsICJncGYxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX05PTkU+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWNhbV9zcGkxX2J1czogY2FtLXNwaTEtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZjEtNCIsICJncGYxLTUiLCAiZ3BmMS02IiwgImdwZjEtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJZ3BjMDogZ3BjMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYzE6IGdwYzEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGMyOiBncGMyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BjMzogZ3BjMyB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYzQ6IGdwYzQgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlzZDBfY2xrOiBzZDAtY2xrIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2NtZDogc2QwLWNtZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGMwLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX05PTkU+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9idXMxOiBzZDAtYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGMwLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfYnVzNDogc2QwLWJ1cy13aWR0aDQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMC0zIiwgImdwYzAtNCIsICJncGMwLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfYnVzODogc2QwLWJ1cy13aWR0aDggeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMy0wIiwgImdwYzMtMSIsICJncGMzLTIiLCAiZ3BjMy0zIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9VUD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX3JkcXM6IHNkMC1yZHFzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzAtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9jbGs6IHNkMS1jbGsgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMS0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDxQSU5fUFVMTF9OT05FPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfY21kOiBzZDEtY21kIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2J1czE6IHNkMS1idXMtd2lkdGgxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9idXM0OiBzZDEtYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGMxLTMiLCAiZ3BjMS00IiwgImdwYzEtNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9idXM4OiBzZDEtYnVzLXdpZHRoOCB7CisJCXNhbXN1bmcscGlucyA9ICJncGM0LTAiLCAiZ3BjNC0xIiwgImdwYzQtMiIsICJncGM0LTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDJfY2xrOiBzZDItY2xrIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzItMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfTk9ORT47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QyX2NtZDogc2QyLWNtZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGMyLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX05PTkU+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMl9jZDogc2QyLWNkIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzItMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8UElOX1BVTExfVVA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMl9idXMxOiBzZDItYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGMyLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDJfYnVzNDogc2QyLWJ1cy13aWR0aDQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMi00IiwgImdwYzItNSIsICJncGMyLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPFBJTl9QVUxMX1VQPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07Cit9OworCismcGluY3RybF8yIHsKKwlncHowOiBncHowIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3B6MTogZ3B6MSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjYwLXh5cmVmNTI2MC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjYwLXh5cmVmNTI2MC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4NGFiMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNjAteHlyZWY1MjYwLmR0cwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIFNBTVNVTkcgWFlSRUY1MjYwIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAiZXh5bm9zNTI2MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJTQU1TVU5HIFhZUkVGNTI2MCBib2FyZCBiYXNlZCBvbiBFWFlOT1M1MjYwIjsKKwljb21wYXRpYmxlID0gInNhbXN1bmcseHlyZWY1MjYwIiwgInNhbXN1bmcsZXh5bm9zNTI2MCIsICJzYW1zdW5nLGV4eW5vczUiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MjAwMDAwMDAgMHg4MDAwMDAwMD47CisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0FDMiwxMTUyMDAiOworCX07CisKKwlmaW5fcGxsOiB4eHRpIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJmaW5fcGxsIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwl4cnRjeHRpOiB4cnRjeHRpIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJ4cnRjeHRpIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07Cit9OworCismcGluY3RybF8wIHsKKwloZG1pX2hwZF9pcnE6IGhkbWktaHBkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDE+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWJyb2tlbi1jZDsKKwlieXBhc3Mtc211OworCXN1cHBvcnRzLWhpZ2hzcGVlZDsKKwlzdXBwb3J0cy1oczIwMC1tb2RlOyAvKiAyMDAgTWh6ICovCisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwwIDQ+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDAgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9yZHFzICZzZDBfY2xrICZzZDBfY21kICZzZDBfYnVzMSAmc2QwX2J1czQgJnNkMF9idXM4PjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDg+OworCX07Cit9OworCismbW1jXzIgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXMxICZzZDJfYnVzND47CisKKwlzbG90QDAgeworCQlyZWcgPSA8MD47CisJCWJ1cy13aWR0aCA9IDw0PjsKKwkJZGlzYWJsZS13cDsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNjAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk4YTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI2MC5kdHNpCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogU0FNU1VORyBFWFlOT1M1MjYwIFNvQyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTI2MC1jbGsuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAiLCAic2Ftc3VuZyxleHlub3M1IjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJYWxpYXNlcyB7CisJCXBpbmN0cmwwID0gJnBpbmN0cmxfMDsKKwkJcGluY3RybDEgPSAmcGluY3RybF8xOworCQlwaW5jdHJsMiA9ICZwaW5jdHJsXzI7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDE+OworCQl9OworCisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDE+OworCQkJY2NpLWNvbnRyb2wtcG9ydCA9IDwmY2NpX2NvbnRyb2wxPjsKKwkJfTsKKworCQljcHVAMTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MTAwPjsKKwkJCWNjaS1jb250cm9sLXBvcnQgPSA8JmNjaV9jb250cm9sMD47CisJCX07CisKKwkJY3B1QDEwMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDEwMT47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDA+OworCQl9OworCisJCWNwdUAxMDIgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgxMDI+OworCQkJY2NpLWNvbnRyb2wtcG9ydCA9IDwmY2NpX2NvbnRyb2wwPjsKKwkJfTsKKworCQljcHVAMTAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MTAzPjsKKwkJCWNjaS1jb250cm9sLXBvcnQgPSA8JmNjaV9jb250cm9sMD47CisJCX07CisJfTsKKworCXNvYzogc29jIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJY2xvY2tfdG9wOiBjbG9jay1jb250cm9sbGVyQDEwMDEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLXRvcCI7CisJCQlyZWcgPSA8MHgxMDAxMDAwMCAweDEwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQljbG9ja19wZXJpOiBjbG9jay1jb250cm9sbGVyQDEwMjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLXBlcmkiOworCQkJcmVnID0gPDB4MTAyMDAwMDAgMHgxMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJY2xvY2tfZWdsOiBjbG9jay1jb250cm9sbGVyQDEwNjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWVnbCI7CisJCQlyZWcgPSA8MHgxMDYwMDAwMCAweDEwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQljbG9ja19rZmM6IGNsb2NrLWNvbnRyb2xsZXJAMTA3MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2sta2ZjIjsKKwkJCXJlZyA9IDwweDEwNzAwMDAwIDB4MTAwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCWNsb2NrX2cyZDogY2xvY2stY29udHJvbGxlckAxMEEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1nMmQiOworCQkJcmVnID0gPDB4MTBBMDAwMDAgMHgxMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJY2xvY2tfbWlmOiBjbG9jay1jb250cm9sbGVyQDEwQ0UwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLW1pZiI7CisJCQlyZWcgPSA8MHgxMENFMDAwMCAweDEwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQljbG9ja19tZmM6IGNsb2NrLWNvbnRyb2xsZXJAMTEwOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2stbWZjIjsKKwkJCXJlZyA9IDwweDExMDkwMDAwIDB4MTAwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCWNsb2NrX2czZDogY2xvY2stY29udHJvbGxlckAxMTgzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1nM2QiOworCQkJcmVnID0gPDB4MTE4MzAwMDAgMHgxMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJY2xvY2tfZnN5czogY2xvY2stY29udHJvbGxlckAxMjJFMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1mc3lzIjsKKwkJCXJlZyA9IDwweDEyMkUwMDAwIDB4MTAwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCWNsb2NrX2F1ZDogY2xvY2stY29udHJvbGxlckAxMjhDMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1hdWQiOworCQkJcmVnID0gPDB4MTI4QzAwMDAgMHgxMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJY2xvY2tfaXNwOiBjbG9jay1jb250cm9sbGVyQDEzM0MwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWlzcCI7CisJCQlyZWcgPSA8MHgxMzNDMDAwMCAweDEwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQljbG9ja19nc2NsOiBjbG9jay1jb250cm9sbGVyQDEzRjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWdzY2wiOworCQkJcmVnID0gPDB4MTNGMDAwMDAgMHgxMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJY2xvY2tfZGlzcDogY2xvY2stY29udHJvbGxlckAxNDU1MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1kaXNwIjsKKwkJCXJlZyA9IDwweDE0NTUwMDAwIDB4MTAwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTA0ODEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNS1naWMiLCAiYXJtLGNvcnRleC1hOS1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXJlZyA9IDwweDEwNDgxMDAwIDB4MTAwMD4sCisJCQkJPDB4MTA0ODIwMDAgMHgxMDAwPiwKKwkJCQk8MHgxMDQ4NDAwMCAweDIwMDA+LAorCQkJCTwweDEwNDg2MDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAweGYwND47CisJCX07CisKKwkJY2hpcGlkOiBjaGlwaWRAMTAwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtY2hpcGlkIjsKKwkJCXJlZyA9IDwweDEwMDAwMDAwIDB4MTAwPjsKKwkJfTsKKworCQltY3Q6IG1jdEAxMDBCMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1tY3QiOworCQkJcmVnID0gPDB4MTAwQjAwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmZmluX3BsbD4sIDwmY2xvY2tfcGVyaSBQRVJJX0NMS19NQ1Q+OworCQkJY2xvY2stbmFtZXMgPSAiZmluX3BsbCIsICJtY3QiOworCQkJaW50ZXJydXB0cyA9IDwwIDEwNCAwPiwgPDAgMTA1IDA+LCA8MCAxMDYgMD4sCisJCQkJCTwwIDEwNyAwPiwgPDAgMTIyIDA+LCA8MCAxMjMgMD4sCisJCQkJCTwwIDEyNCAwPiwgPDAgMTI1IDA+LCA8MCAxMjYgMD4sCisJCQkJCTwwIDEyNyAwPiwgPDAgMTI4IDA+LCA8MCAxMjkgMD47CisJCX07CisKKwkJY2NpOiBjY2lAMTBGMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY2NpLTQwMCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmVnID0gPDB4MTBGMDAwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgxMEYwMDAwMCAweDYwMDA+OworCisJCQljY2lfY29udHJvbDA6IHNsYXZlLWlmQDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLGNjaS00MDAtY3RybC1pZiI7CisJCQkJaW50ZXJmYWNlLXR5cGUgPSAiYWNlIjsKKwkJCQlyZWcgPSA8MHg0MDAwIDB4MTAwMD47CisJCQl9OworCisJCQljY2lfY29udHJvbDE6IHNsYXZlLWlmQDUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLGNjaS00MDAtY3RybC1pZiI7CisJCQkJaW50ZXJmYWNlLXR5cGUgPSAiYWNlIjsKKwkJCQlyZWcgPSA8MHg1MDAwIDB4MTAwMD47CisJCQl9OworCQl9OworCisJCXBpbmN0cmxfMDogcGluY3RybEAxMTYwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI2MC1waW5jdHJsIjsKKwkJCXJlZyA9IDwweDExNjAwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzkgMD47CisKKwkJCXdha2V1cC1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtd2FrZXVwLWVpbnQiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDMyIDA+OworCQkJfTsKKwkJfTsKKworCQlwaW5jdHJsXzE6IHBpbmN0cmxAMTIyOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAtcGluY3RybCI7CisJCQlyZWcgPSA8MHgxMjI5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE1NyAwPjsKKwkJfTsKKworCQlwaW5jdHJsXzI6IHBpbmN0cmxAMTI4QjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAtcGluY3RybCI7CisJCQlyZWcgPSA8MHgxMjhCMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDI0MyAwPjsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDEyQzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXVhcnQiOworCQkJcmVnID0gPDB4MTJDMDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0NiAwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2tfcGVyaSBQRVJJX0NMS19VQVJUMD4sIDwmY2xvY2tfcGVyaSBQRVJJX1NDTEtfVUFSVDA+OworCQkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQxOiBzZXJpYWxAMTJDMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCI7CisJCQlyZWcgPSA8MHgxMkMxMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQ3IDA+OworCQkJY2xvY2tzID0gPCZjbG9ja19wZXJpIFBFUklfQ0xLX1VBUlQxPiwgPCZjbG9ja19wZXJpIFBFUklfU0NMS19VQVJUMT47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDI6IHNlcmlhbEAxMkMyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEyQzIwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDggMD47CisJCQljbG9ja3MgPSA8JmNsb2NrX3BlcmkgUEVSSV9DTEtfVUFSVDI+LCA8JmNsb2NrX3BlcmkgUEVSSV9TQ0xLX1VBUlQyPjsKKwkJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDAiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDEyODYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXVhcnQiOworCQkJcmVnID0gPDB4MTI4NjAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0NSAwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2tfYXVkIEFVRF9DTEtfQVVEX1VBUlQ+LCA8JmNsb2NrX2F1ZCBBVURfU0NMS19BVURfVUFSVD47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jXzA6IG1tY0AxMjE0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweDEyMTQwMDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTU2IDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2tfZnN5cyBGU1lTX0NMS19NTUMwPiwgPCZjbG9ja190b3AgVE9QX1NDTEtfTU1DMD47CisJCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKKwkJCWZpZm8tZGVwdGggPSA8NjQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltbWNfMTogbW1jQDEyMTUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLWR3LW1zaGMiOworCQkJcmVnID0gPDB4MTIxNTAwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNTggMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2xvY2tzID0gPCZjbG9ja19mc3lzIEZTWVNfQ0xLX01NQzE+LCA8JmNsb2NrX3RvcCBUT1BfU0NMS19NTUMxPjsKKwkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCQkJZmlmby1kZXB0aCA9IDw2ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1tY18yOiBtbWNAMTIxNjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxMjE2MDAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE1OSAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljbG9ja3MgPSA8JmNsb2NrX2ZzeXMgRlNZU19DTEtfTU1DMj4sIDwmY2xvY2tfdG9wIFRPUF9TQ0xLX01NQzI+OworCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisJCQlmaWZvLWRlcHRoID0gPDY0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKK307CisKKyNpbmNsdWRlICJleHlub3M1MjYwLXBpbmN0cmwuZHRzaSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MTAtc21kazU0MTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQxMC1zbWRrNTQxMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3NWJiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MTAtc21kazU0MTAuZHRzCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBTQU1TVU5HIFNNREs1NDEwIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAiZXh5bm9zNTQxMC5kdHNpIgorLyB7CisJbW9kZWwgPSAiU2Ftc3VuZyBTTURLNTQxMCBib2FyZCBiYXNlZCBvbiBFWFlOT1M1NDEwIjsKKwljb21wYXRpYmxlID0gInNhbXN1bmcsc21kazU0MTAiLCAic2Ftc3VuZyxleHlub3M1NDEwIiwgInNhbXN1bmcsZXh5bm9zNSI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg0MDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQUMyLDExNTIwMCI7CisJfTsKKworCWZpbl9wbGw6IHh4dGkgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImZpbl9wbGwiOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCWZpcm13YXJlQDAyMDM3MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHNlY3VyZS1maXJtd2FyZSI7CisJCXJlZyA9IDwweDAyMDM3MDAwIDB4MTAwMD47CisJfTsKKworfTsKKworJm1tY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCXN1cHBvcnRzLWhpZ2hzcGVlZDsKKwlicm9rZW4tY2Q7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisKKwlzbG90QDAgeworCQlyZWcgPSA8MD47CisJCWJ1cy13aWR0aCA9IDw4PjsKKwl9OworfTsKKworJm1tY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCXN1cHBvcnRzLWhpZ2hzcGVlZDsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQlkaXNhYmxlLXdwOworCX07Cit9OworCismdWFydDAgeworCQlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCQlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCQlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQxMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQxMC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzljMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDEwLmR0c2kKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBTQU1TVU5HIEVYWU5PUzU0MTAgU29DIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBTQU1TVU5HIEVYWU5PUzU0MTAgU29DIGRldmljZSBub2RlcyBhcmUgbGlzdGVkIGluIHRoaXMgZmlsZS4KKyAqIEVYWU5PUzU0MTAgYmFzZWQgYm9hcmQgZmlsZXMgY2FuIGluY2x1ZGUgdGhpcyBmaWxlIGFuZCBwcm92aWRlCisgKiB2YWx1ZXMgZm9yIGJvYXJkIHNwZWNmaWMgYmluZGluZ3MuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9leHlub3M1NDEwLmg+CisKKy8geworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDEwIiwgInNhbXN1bmcsZXh5bm9zNSI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJQ1BVMDogY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MD47CisJCX07CisKKwkJQ1BVMTogY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MT47CisJCX07CisKKwkJQ1BVMjogY3B1QDIgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4Mj47CisJCX07CisKKwkJQ1BVMzogY3B1QDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4Mz47CisJCX07CisJfTsKKworCXNvYzogc29jIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJY29tYmluZXI6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWNvbWJpbmVyIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXNhbXN1bmcsY29tYmluZXItbnIgPSA8MzI+OworCQkJcmVnID0gPDB4MTA0NDAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPQk8MCAwIDA+LCA8MCAxIDA+LCA8MCAyIDA+LCA8MCAzIDA+LAorCQkJCQk8MCA0IDA+LCA8MCA1IDA+LCA8MCA2IDA+LCA8MCA3IDA+LAorCQkJCQk8MCA4IDA+LCA8MCA5IDA+LCA8MCAxMCAwPiwgPDAgMTEgMD4sCisJCQkJCTwwIDEyIDA+LCA8MCAxMyAwPiwgPDAgMTQgMD4sIDwwIDE1IDA+LAorCQkJCQk8MCAxNiAwPiwgPDAgMTcgMD4sIDwwIDE4IDA+LCA8MCAxOSAwPiwKKwkJCQkJPDAgMjAgMD4sIDwwIDIxIDA+LCA8MCAyMiAwPiwgPDAgMjMgMD4sCisJCQkJCTwwIDI0IDA+LCA8MCAyNSAwPiwgPDAgMjYgMD4sIDwwIDI3IDA+LAorCQkJCQk8MCAyOCAwPiwgPDAgMjkgMD4sIDwwIDMwIDA+LCA8MCAzMSAwPjsKKwkJfTsKKworCQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDgxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUtZ2ljIiwgImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXJlZyA9CTwweDEwNDgxMDAwIDB4MTAwMD4sCisJCQkJPDB4MTA0ODIwMDAgMHgxMDAwPiwKKwkJCQk8MHgxMDQ4NDAwMCAweDIwMDA+LAorCQkJCTwweDEwNDg2MDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAweGYwND47CisJCX07CisKKwkJY2hpcGlkQDEwMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWNoaXBpZCI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMD47CisJCX07CisKKwkJbWN0OiBtY3RAMTAxQzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtbWN0IjsKKwkJCXJlZyA9IDwweDEwMUMwMDAwIDB4QjAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGVycnVwdF9tYXA+OworCQkJaW50ZXJydXB0cyA9IDwwPiwgPDE+LCA8Mj4sIDwzPiwKKwkJCQk8ND4sIDw1PiwgPDY+LCA8Nz4sCisJCQkJPDg+LCA8OT4sIDwxMD4sIDwxMT47CisJCQljbG9ja3MgPSA8JmZpbl9wbGw+LCA8JmNsb2NrIENMS19NQ1Q+OworCQkJY2xvY2stbmFtZXMgPSAiZmluX3BsbCIsICJtY3QiOworCisJCQlpbnRlcnJ1cHRfbWFwOiBpbnRlcnJ1cHQtbWFwIHsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8MCAmY29tYmluZXIgMjMgMz4sCisJCQkJCQk8MSAmY29tYmluZXIgMjMgND4sCisJCQkJCQk8MiAmY29tYmluZXIgMjUgMj4sCisJCQkJCQk8MyAmY29tYmluZXIgMjUgMz4sCisJCQkJCQk8NCAmZ2ljIDAgMTIwIDA+LAorCQkJCQkJPDUgJmdpYyAwIDEyMSAwPiwKKwkJCQkJCTw2ICZnaWMgMCAxMjIgMD4sCisJCQkJCQk8NyAmZ2ljIDAgMTIzIDA+LAorCQkJCQkJPDggJmdpYyAwIDEyOCAwPiwKKwkJCQkJCTw5ICZnaWMgMCAxMjkgMD4sCisJCQkJCQk8MTAgJmdpYyAwIDEzMCAwPiwKKwkJCQkJCTwxMSAmZ2ljIDAgMTMxIDA+OworCQkJfTsKKwkJfTsKKworCQlzeXNyYW1AMDIwMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQkJcmVnID0gPDB4MDIwMjAwMDAgMHg1NDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDAgMHgwMjAyMDAwMCAweDU0MDAwPjsKKworCQkJc21wLXN5c3JhbUAwIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0iOworCQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJCX07CisKKwkJCXNtcC1zeXNyYW1ANTMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbS1ucyI7CisJCQkJcmVnID0gPDB4NTMwMDAgMHgxMDAwPjsKKwkJCX07CisJCX07CisKKwkJY2xvY2s6IGNsb2NrLWNvbnRyb2xsZXJAMTAwMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MTAtY2xvY2siOworCQkJcmVnID0gPDB4MTAwMTAwMDAgMHgzMDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCX07CisKKwkJbW1jXzA6IG1tY0AxMjIwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweDEyMjAwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzUgMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2xvY2tzID0gPCZjbG9jayBDTEtfTU1DMD4sIDwmY2xvY2sgQ0xLX1NDTEtfTU1DMD47CisJCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKKwkJCWZpZm8tZGVwdGggPSA8MHg4MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1tY18xOiBtbWNAMTIyMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxMjIxMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDc2IDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01NQzE+LCA8JmNsb2NrIENMS19TQ0xLX01NQzE+OworCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisJCQlmaWZvLWRlcHRoID0gPDB4ODA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltbWNfMjogbW1jQDEyMjIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLWR3LW1zaGMiOworCQkJcmVnID0gPDB4MTIyMjAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA3NyAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljbG9ja3MgPSA8JmNsb2NrIENMS19NTUMyPiwgPCZjbG9jayBDTEtfU0NMS19NTUMyPjsKKwkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCQkJZmlmby1kZXB0aCA9IDwweDgwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDA6IHNlcmlhbEAxMkMwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEyQzAwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA1MSAwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VBUlQwPiwgPCZjbG9jayBDTEtfU0NMS19VQVJUMD47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDE6IHNlcmlhbEAxMkMxMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEyQzEwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA1MiAwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VBUlQxPiwgPCZjbG9jayBDTEtfU0NMS19VQVJUMT47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDI6IHNlcmlhbEAxMkMyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEyQzIwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA1MyAwPjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VBUlQyPiwgPCZjbG9jayBDTEtfU0NMS19VQVJUMj47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdHMKaW5kZXggODk2YTJhNi4uNDM0ZmQ5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1hcm5kYWxlLW9jdGEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtYXJuZGFsZS1vY3RhLmR0cwpAQCAtMjYsNiArMjYsMTEgQEAKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQUMzLDExNTIwMCI7CiAJfTsKIAorCWZpcm13YXJlQDAyMDczMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHNlY3VyZS1maXJtd2FyZSI7CisJCXJlZyA9IDwweDAyMDczMDAwIDB4MTAwMD47CisJfTsKKwogCWZpeGVkLXJhdGUtY2xvY2tzIHsKIAkJb3NjY2xrIHsKIAkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLW9zY2NsayI7CkBAIC0zNyw2ICs0MiwxMSBAQAogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKIAorCWNvZGVjQDExMDAwMDAwIHsKKwkJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKKwkJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKKwl9OworCiAJbW1jQDEyMjAwMDAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlicm9rZW4tY2Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1YjhmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtcGVhY2gtcGl0LmR0cwpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIEdvb2dsZSBQZWFjaCBQaXQgUmV2IDYrIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBHb29nbGUsIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlICJleHlub3M1NDIwLmR0c2kiCisKKy8geworCW1vZGVsID0gIkdvb2dsZSBQZWFjaCBQaXQgUmV2IDYrIjsKKworCWNvbXBhdGlibGUgPSAiZ29vZ2xlLHBpdC1yZXYxNiIsCisJCSJnb29nbGUscGl0LXJldjE1IiwgImdvb2dsZSxwaXQtcmV2MTQiLAorCQkiZ29vZ2xlLHBpdC1yZXYxMyIsICJnb29nbGUscGl0LXJldjEyIiwKKwkJImdvb2dsZSxwaXQtcmV2MTEiLCAiZ29vZ2xlLHBpdC1yZXYxMCIsCisJCSJnb29nbGUscGl0LXJldjkiLCAiZ29vZ2xlLHBpdC1yZXY4IiwKKwkJImdvb2dsZSxwaXQtcmV2NyIsICJnb29nbGUscGl0LXJldjYiLAorCQkiZ29vZ2xlLHBpdCIsICJnb29nbGUscGVhY2giLCJzYW1zdW5nLGV4eW5vczU0MjAiLAorCQkic2Ftc3VuZyxleHlub3M1IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDIwMDAwMDAwIDB4ODAwMDAwMDA+OworCX07CisKKwlmaXhlZC1yYXRlLWNsb2NrcyB7CisJCW9zY2NsayB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQyMC1vc2NjbGsiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcG93ZXJfa2V5X2lycT47CisKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiUG93ZXIiOworCQkJZ3Bpb3MgPSA8JmdweDEgMiBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwliYWNrbGlnaHQgeworCQljb21wYXRpYmxlID0gInB3bS1iYWNrbGlnaHQiOworCQlwd21zID0gPCZwd20gMCAxMDAwMDAwIDA+OworCQlicmlnaHRuZXNzLWxldmVscyA9IDwwIDEwMCA1MDAgMTAwMCAxNTAwIDIwMDAgMjUwMCAyODAwPjsKKwkJZGVmYXVsdC1icmlnaHRuZXNzLWxldmVsID0gPDc+OworCQlwaW5jdHJsLTAgPSA8JnB3bTBfb3V0PjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwl9OworCisJc291bmQgeworCQljb21wYXRpYmxlID0gImdvb2dsZSxzbm93LWF1ZGlvLW1heDk4MDkwIjsKKworCQlzYW1zdW5nLGkycy1jb250cm9sbGVyID0gPCZpMnMwPjsKKwkJc2Ftc3VuZyxhdWRpby1jb2RlYyA9IDwmbWF4OTgwOTA+OworCX07CisKKwl1c2IzMDBfdmJ1c19yZWc6IHJlZ3VsYXRvci11c2IzMDAgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gIlA1LjBWX1VTQjNDT04wIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlncGlvID0gPCZncGgwIDAgMD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdXNiMzAwX3ZidXNfZW4+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCXVzYjMwMV92YnVzX3JlZzogcmVndWxhdG9yLXVzYjMwMSB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiUDUuMFZfVVNCM0NPTjEiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWdwaW8gPSA8JmdwaDAgMSAwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IzMDFfdmJ1c19lbj47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworfTsKKworJnBpbmN0cmxfMCB7CisJbWF4OTgwOTBfaXJxOiBtYXg5ODA5MC1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MC0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl0cG1faXJxOiB0cG0taXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDEtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcG93ZXJfa2V5X2lycTogcG93ZXIta2V5LWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWhkbWlfaHBkX2lycTogaGRtaS1ocGQtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJZHBfaHBkX2dwaW86IGRwX2hwZF9ncGlvIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDItNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMyB7CisJdXNiMzAwX3ZidXNfZW46IHVzYjMwMC12YnVzLWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwaDAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdXNiMzAxX3ZidXNfZW46IHVzYjMwMS12YnVzLWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwaDAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnJ0YyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnRfMyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWJyb2tlbi1jZDsKKwljYXBzMi1tbWMtaHMyMDAtMV84djsKKwlzdXBwb3J0cy1oaWdoc3BlZWQ7CisJbm9uLXJlbW92YWJsZTsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDAgND47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MCAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2J1czQgJnNkMF9idXM4PjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDg+OworCX07Cit9OworCismbW1jXzIgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDQ+OworCX07Cit9OworCismaHNpMmNfNyB7CisJc3RhdHVzID0gIm9rYXkiOworCisJbWF4OTgwOTA6IGNvZGVjQDEwIHsKKwkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg5ODA5MCI7CisJCXJlZyA9IDwweDEwPjsKKwkJaW50ZXJydXB0cyA9IDwyIDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZtYXg5ODA5MF9pcnE+OworCX07Cit9OworCismaHNpMmNfOSB7CisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJdHBtQDIwIHsKKwkJY29tcGF0aWJsZSA9ICJpbmZpbmVvbixzbGI5NjQ1dHQiOworCQlyZWcgPSA8MHgyMD47CisKKwkJLyogVW51c2VkIGlycTsgYnV0IHN0aWxsIG5lZWQgdG8gY29uZmlndXJlIHRoZSBwaW5zICovCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdHBtX2lycT47CisJfTsKK307CisKKyZpMmNfMgl7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDUwPjsKK307CisKKyZoZG1pIHsKKwlzdGF0dXMgPSAib2theSI7CisJaHBkLWdwaW8gPSA8JmdweDMgNyBHUElPX0FDVElWRV9ISUdIPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaGRtaV9ocGRfaXJxPjsKKwlkZGMgPSA8JmkyY18yPjsKK307CisKKyZ1c2JkcmRfcGh5MCB7CisJdmJ1cy1zdXBwbHkgPSA8JnVzYjMwMF92YnVzX3JlZz47Cit9OworCismdXNiZHJkX3BoeTEgeworCXZidXMtc3VwcGx5ID0gPCZ1c2IzMDFfdmJ1c19yZWc+OworfTsKKworLyoKKyAqIFVzZSBsb25nZXN0IEhXIHdhdGNoZG9nIGluIFNvQyAoMzIgc2Vjb25kcykgc2luY2UgdGhlIGhhcmR3YXJlCisgKiB3YXRjaGRvZyBwcm92aWRlcyBubyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKGNvbXBhcmVkIHRvIHNvZnQvaGFyZAorICogbG9ja3VwIGRldGVjdG9ycykgYW5kIHNvIHNob3VsZCBiZSBsYXN0IHJlc29ydC4KKyAqLworJndhdGNoZG9nIHsKKwl0aW1lb3V0LXNlYyA9IDwzMj47Cit9OworCismaTJzMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGludmVydC12Y2xrOworfTsKKworJmRwIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRwX2hwZF9ncGlvPjsKKwlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OworCXNhbXN1bmcsZHluYW1pYy1yYW5nZSA9IDwwPjsKKwlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OworCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47CisJc2Ftc3VuZyxsaW5rLXJhdGUgPSA8MHgwNj47CisJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDI+OworCXNhbXN1bmcsaHBkLWdwaW8gPSA8JmdweDIgNiAwPjsKKworCWRpc3BsYXktdGltaW5ncyB7CisJCW5hdGl2ZS1tb2RlID0gPCZ0aW1pbmcxPjsKKworCQl0aW1pbmcxOiB0aW1pbmdAMSB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NzA1ODkyODA+OworCQkJaGFjdGl2ZSA9IDwxMzY2PjsKKwkJCXZhY3RpdmUgPSA8NzY4PjsKKwkJCWhmcm9udC1wb3JjaCA9IDw0MD47CisJCQloYmFjay1wb3JjaCA9IDw0MD47CisJCQloc3luYy1sZW4gPSA8MzI+OworCQkJdmJhY2stcG9yY2ggPSA8MTA+OworCQkJdmZyb250LXBvcmNoID0gPDEyPjsKKwkJCXZzeW5jLWxlbiA9IDw2PjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1waW5jdHJsLmR0c2kKaW5kZXggZTYyYzhlYi4uYmE2ODZlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1waW5jdHJsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1waW5jdHJsLmR0c2kKQEAgLTYyNCw2ICs2MjQsMzQgQEAKIAkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKIAkJfTsKIAorCQlwd20wX291dDogcHdtMC1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMCI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQlwd20xX291dDogcHdtMS1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMSI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQlwd20yX291dDogcHdtMi1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMiI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQlwd20zX291dDogcHdtMy1vdXQgeworCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMyI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKwogCQlpMmM3X2hzX2J1czogaTJjNy1ocy1idXMgewogCQkJc2Ftc3VuZyxwaW5zID0gImdwYjItMiIsICJncGIyLTMiOwogCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXNtZGs1NDIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtc21kazU0MjAuZHRzCmluZGV4IDY5MTA0ODUuLjYwNTJhYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtc21kazU0MjAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtc21kazU0MjAuZHRzCkBAIC02OCw2ICs2OCwxMSBAQAogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKIAorCWNvZGVjQDExMDAwMDAwIHsKKwkJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKKwkJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKKwl9OworCiAJbW1jQDEyMjAwMDAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlicm9rZW4tY2Q7CkBAIC0xNDAsNiArMTQ1LDIyIEBACiAJCX07CiAJfTsKIAorCXBpbmN0cmxAMTQwMDAwMDAgeworCQl1c2IzMDBfdmJ1c19lbjogdXNiMzAwLXZidXMtZW4geworCQkJc2Ftc3VuZyxwaW5zID0gImdwZzAtNSI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKworCQl1c2IzMDFfdmJ1c19lbjogdXNiMzAxLXZidXMtZW4geworCQkJc2Ftc3VuZyxwaW5zID0gImdwZzEtNCI7CisJCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwkJfTsKKwl9OworCiAJaGRtaUAxNDUzMDAwMCB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAkJaHBkLWdwaW8gPSA8JmdweDMgNyAwPjsKQEAgLTE0Nyw2ICsxNjgsMzYgQEAKIAkJcGluY3RybC0wID0gPCZoZG1pX2hwZF9pcnE+OwogCX07CiAKKwl1c2IzMDBfdmJ1c19yZWc6IHJlZ3VsYXRvci11c2IzMDAgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gIlZCVVMwIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlncGlvID0gPCZncGcwIDUgMD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdXNiMzAwX3ZidXNfZW4+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCXVzYjMwMV92YnVzX3JlZzogcmVndWxhdG9yLXVzYjMwMSB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiVkJVUzEiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWdwaW8gPSA8JmdwZzEgNCAwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IzMDFfdmJ1c19lbj47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworCisJcGh5QDEyMTAwMDAwIHsKKwkJdmJ1cy1zdXBwbHkgPSA8JnVzYjMwMF92YnVzX3JlZz47CisJfTsKKworCXBoeUAxMjUwMDAwMCB7CisJCXZidXMtc3VwcGx5ID0gPCZ1c2IzMDFfdmJ1c19yZWc+OworCX07CisKIAlpMmNfMjogaTJjQDEyQzgwMDAwIHsKIAkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CiAJCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kKaW5kZXggYjY5ZmJjYi4uZTM4NTMyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaQpAQCAtNDcsNiArNDcsOCBAQAogCQlzcGkwID0gJnNwaV8wOwogCQlzcGkxID0gJnNwaV8xOwogCQlzcGkyID0gJnNwaV8yOworCQl1c2JkcmRwaHkwID0gJnVzYmRyZF9waHkwOworCQl1c2JkcmRwaHkxID0gJnVzYmRyZF9waHkxOwogCX07CiAKIAljcHVzIHsKQEAgLTU4LDYgKzYwLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOwogCQkJcmVnID0gPDB4MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTgwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDE+OwogCQl9OwogCiAJCWNwdTE6IGNwdUAxIHsKQEAgLTY1LDYgKzY4LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOwogCQkJcmVnID0gPDB4MT47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTgwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDE+OwogCQl9OwogCiAJCWNwdTI6IGNwdUAyIHsKQEAgLTcyLDYgKzc2LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOwogCQkJcmVnID0gPDB4Mj47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTgwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDE+OwogCQl9OwogCiAJCWNwdTM6IGNwdUAzIHsKQEAgLTc5LDYgKzg0LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOwogCQkJcmVnID0gPDB4Mz47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTgwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDE+OwogCQl9OwogCiAJCWNwdTQ6IGNwdUAxMDAgewpAQCAtODYsNiArOTIsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKIAkJCXJlZyA9IDwweDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDA+OwogCQl9OwogCiAJCWNwdTU6IGNwdUAxMDEgewpAQCAtOTMsNiArMTAwLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CiAJCQlyZWcgPSA8MHgxMDE+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMDA+OworCQkJY2NpLWNvbnRyb2wtcG9ydCA9IDwmY2NpX2NvbnRyb2wwPjsKIAkJfTsKIAogCQljcHU2OiBjcHVAMTAyIHsKQEAgLTEwMCw2ICsxMDgsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKIAkJCXJlZyA9IDwweDEwMj47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDA+OwogCQl9OwogCiAJCWNwdTc6IGNwdUAxMDMgewpAQCAtMTA3LDYgKzExNiw0NCBAQAogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKIAkJCXJlZyA9IDwweDEwMz47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwMD47CisJCQljY2ktY29udHJvbC1wb3J0ID0gPCZjY2lfY29udHJvbDA+OworCQl9OworCX07CisKKwljY2lAMTBkMjAwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjY2ktNDAwIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHgxMGQyMDAwMCAweDEwMDA+OworCQlyYW5nZXMgPSA8MHgwIDB4MTBkMjAwMDAgMHg2MDAwPjsKKworCQljY2lfY29udHJvbDA6IHNsYXZlLWlmQDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY2NpLTQwMC1jdHJsLWlmIjsKKwkJCWludGVyZmFjZS10eXBlID0gImFjZSI7CisJCQlyZWcgPSA8MHg0MDAwIDB4MTAwMD47CisJCX07CisJCWNjaV9jb250cm9sMTogc2xhdmUtaWZANTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjY2ktNDAwLWN0cmwtaWYiOworCQkJaW50ZXJmYWNlLXR5cGUgPSAiYWNlIjsKKwkJCXJlZyA9IDwweDUwMDAgMHgxMDAwPjsKKwkJfTsKKwl9OworCisJc3lzcmFtQDAyMDIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQlyZWcgPSA8MHgwMjAyMDAwMCAweDU0MDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDAyMDIwMDAwIDB4NTQwMDA+OworCisJCXNtcC1zeXNyYW1AMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0iOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQl9OworCisJCXNtcC1zeXNyYW1ANTMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtLW5zIjsKKwkJCXJlZyA9IDwweDUzMDAwIDB4MTAwMD47CiAJCX07CiAJfTsKIApAQCAtMTI1LDEyICsxNzIsMTMgQEAKIAkJY2xvY2stbmFtZXMgPSAicGxsX3JlZiIsICJwbGxfaW4iLCAic2Nsa19hdWRpbyIsICJzY2xrX3BjbV9pbiI7CiAJfTsKIAotCWNvZGVjQDExMDAwMDAwIHsKKwltZmM6IGNvZGVjQDExMDAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLG1mYy12NyI7CiAJCXJlZyA9IDwweDExMDAwMDAwIDB4MTAwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgOTYgMD47CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01GQz47CiAJCWNsb2NrLW5hbWVzID0gIm1mYyI7CisJCXNhbXN1bmcscG93ZXItZG9tYWluID0gPCZtZmNfcGQ+OwogCX07CiAKIAltbWNfMDogbW1jQDEyMjAwMDAwIHsKQEAgLTE2OSw3ICsyMTcsNyBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQltY3RAMTAxQzAwMDAgeworCW1jdDogbWN0QDEwMUMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtbWN0IjsKIAkJcmVnID0gPDB4MTAxQzAwMDAgMHg4MDA+OwogCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI2MCw3ICszMDgsNyBAQAogCQlpbnRlcnJ1cHRzID0gPDAgNDcgMD47CiAJfTsKIAotCXJ0Y0AxMDFFMDAwMCB7CisJcnRjOiBydGNAMTAxRTAwMDAgewogCQljbG9ja3MgPSA8JmNsb2NrIENMS19SVEM+OwogCQljbG9jay1uYW1lcyA9ICJydGMiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDI3LDIyICs0NzUsMjIgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0Jc2VyaWFsQDEyQzAwMDAwIHsKKwl1YXJ0XzA6IHNlcmlhbEAxMkMwMDAwMCB7CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VBUlQwPiwgPCZjbG9jayBDTEtfU0NMS19VQVJUMD47CiAJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDAiOwogCX07CiAKLQlzZXJpYWxAMTJDMTAwMDAgeworCXVhcnRfMTogc2VyaWFsQDEyQzEwMDAwIHsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfVUFSVDE+LCA8JmNsb2NrIENMS19TQ0xLX1VBUlQxPjsKIAkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMCI7CiAJfTsKIAotCXNlcmlhbEAxMkMyMDAwMCB7CisJdWFydF8yOiBzZXJpYWxAMTJDMjAwMDAgewogCQljbG9ja3MgPSA8JmNsb2NrIENMS19VQVJUMj4sIDwmY2xvY2sgQ0xLX1NDTEtfVUFSVDI+OwogCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKIAl9OwogCi0Jc2VyaWFsQDEyQzMwMDAwIHsKKwl1YXJ0XzM6IHNlcmlhbEAxMkMzMDAwMCB7CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VBUlQzPiwgPCZjbG9jayBDTEtfU0NMS19VQVJUMz47CiAJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDAiOwogCX07CkBAIC00NjIsMTQgKzUxMCwxNCBAQAogCQkjcGh5LWNlbGxzID0gPDA+OwogCX07CiAKLQlkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKKwlkcDogZHAtY29udHJvbGxlckAxNDVCMDAwMCB7CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0RQMT47CiAJCWNsb2NrLW5hbWVzID0gImRwIjsKIAkJcGh5cyA9IDwmZHBfcGh5PjsKIAkJcGh5LW5hbWVzID0gImRwIjsKIAl9OwogCi0JZmltZEAxNDQwMDAwMCB7CisJZmltZDogZmltZEAxNDQwMDAwMCB7CiAJCXNhbXN1bmcscG93ZXItZG9tYWluID0gPCZkaXNwX3BkPjsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfU0NMS19GSU1EMT4sIDwmY2xvY2sgQ0xLX0ZJTUQxPjsKIAkJY2xvY2stbmFtZXMgPSAic2Nsa19maW1kIiwgImZpbWQiOwpAQCAtNTQ2LDcgKzU5NCw3IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzRfaHNfYnVzPjsKLQkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJDND47CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VTSTA+OwogCQljbG9jay1uYW1lcyA9ICJoc2kyYyI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTU1OSw3ICs2MDcsNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmM1X2hzX2J1cz47Ci0JCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0kyQzU+OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0kxPjsKIAkJY2xvY2stbmFtZXMgPSAiaHNpMmMiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC01NzIsNyArNjIwLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjNl9oc19idXM+OwotCQljbG9ja3MgPSA8JmNsb2NrIENMS19JMkM2PjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNJMj47CiAJCWNsb2NrLW5hbWVzID0gImhzaTJjIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtNTg1LDcgKzYzMyw3IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzdfaHNfYnVzPjsKLQkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJDNz47CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VTSTM+OwogCQljbG9jay1uYW1lcyA9ICJoc2kyYyI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTU5OCw3ICs2NDYsNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmM4X2hzX2J1cz47Ci0JCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0kyQzg+OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0k0PjsKIAkJY2xvY2stbmFtZXMgPSAiaHNpMmMiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC02MTEsNyArNjU5LDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjOV9oc19idXM+OwotCQljbG9ja3MgPSA8JmNsb2NrIENMS19JMkM5PjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNJNT47CiAJCWNsb2NrLW5hbWVzID0gImhzaTJjIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtNjI0LDEzICs2NzIsMTMgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMTBfaHNfYnVzPjsKLQkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJDMTA+OworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0k2PjsKIAkJY2xvY2stbmFtZXMgPSAiaHNpMmMiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQloZG1pQDE0NTMwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaSI7CisJaGRtaTogaGRtaUAxNDUzMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLWhkbWkiOwogCQlyZWcgPSA8MHgxNDUzMDAwMCAweDcwMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDk1IDA+OwogCQljbG9ja3MgPSA8JmNsb2NrIENMS19IRE1JPiwgPCZjbG9jayBDTEtfU0NMS19IRE1JPiwKQEAgLTYzOCwxMCArNjg2LDE2IEBACiAJCQkgPCZjbG9jayBDTEtfTU9VVF9IRE1JPjsKIAkJY2xvY2stbmFtZXMgPSAiaGRtaSIsICJzY2xrX2hkbWkiLCAic2Nsa19waXhlbCIsCiAJCQkic2Nsa19oZG1pcGh5IiwgIm1vdXRfaGRtaSI7CisJCXBoeSA9IDwmaGRtaXBoeT47CisJCXNhbXN1bmcsc3lzY29uLXBoYW5kbGUgPSA8JnBtdV9zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCW1peGVyQDE0NDUwMDAwIHsKKwloZG1pcGh5OiBoZG1pcGh5QDE0NUQwMDAwIHsKKwkJcmVnID0gPDB4MTQ1RDAwMDAgMHgyMD47CisJfTsKKworCW1peGVyOiBtaXhlckAxNDQ1MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLW1peGVyIjsKIAkJcmVnID0gPDB4MTQ0NTAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8MCA5NCAwPjsKQEAgLTY3Miw2ICs3MjYsMTEgQEAKIAkJcmVnID0gPDB4MTAwNDAwMDAgMHg1MDAwPjsKIAl9OwogCisJc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyOiBzeXNjb25AMTAwNTAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNS1zeXNyZWciLCAic3lzY29uIjsKKwkJcmVnID0gPDB4MTAwNTAwMDAgMHg1MDAwPjsKKwl9OworCiAJdG11X2NwdTA6IHRtdUAxMDA2MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLXRtdSI7CiAJCXJlZyA9IDwweDEwMDYwMDAwIDB4MTAwPjsKQEAgLTcxMiw3ICs3NzEsNyBAQAogCQljbG9jay1uYW1lcyA9ICJ0bXVfYXBiaWYiLCAidG11X3RyaW1pbmZvX2FwYmlmIjsKIAl9OwogCi0gICAgICAgIHdhdGNoZG9nQDEwMUQwMDAwIHsKKyAgICAgICAgd2F0Y2hkb2c6IHdhdGNoZG9nQDEwMUQwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtd2R0IjsKIAkJcmVnID0gPDB4MTAxRDAwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgNDIgMD47CkBAIC03MjEsMTEgKzc4MCwxMDMgQEAKIAkJc2Ftc3VuZyxzeXNjb24tcGhhbmRsZSA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKICAgICAgICAgfTsKIAotCXNzc0AxMDgzMDAwMCB7CisJc3NzOiBzc3NAMTA4MzAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zZWNzcyI7CiAJCXJlZyA9IDwweDEwODMwMDAwIDB4MTAwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTEyIDA+OwotCQljbG9ja3MgPSA8JmNsb2NrIDQ3MT47CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1NTUz47CiAJCWNsb2NrLW5hbWVzID0gInNlY3NzIjsKIAl9OworCisJdXNiZHJkM18wOiB1c2JAMTIwMDAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kd3VzYjMiOworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0JEMzAwPjsKKwkJY2xvY2stbmFtZXMgPSAidXNiZHJkMzAiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlkd2MzIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MzIjsKKwkJCXJlZyA9IDwweDEyMDAwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDcyIDA+OworCQkJcGh5cyA9IDwmdXNiZHJkX3BoeTAgMD4sIDwmdXNiZHJkX3BoeTAgMT47CisJCQlwaHktbmFtZXMgPSAidXNiMi1waHkiLCAidXNiMy1waHkiOworCQl9OworCX07CisKKwl1c2JkcmRfcGh5MDogcGh5QDEyMTAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtdXNiZHJkLXBoeSI7CisJCXJlZyA9IDwweDEyMTAwMDAwIDB4MTAwPjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNCRDMwMD4sIDwmY2xvY2sgQ0xLX1NDTEtfVVNCUEhZMzAwPjsKKwkJY2xvY2stbmFtZXMgPSAicGh5IiwgInJlZiI7CisJCXNhbXN1bmcscG11LXN5c2NvbiA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKKwkJI3BoeS1jZWxscyA9IDwxPjsKKwl9OworCisJdXNiZHJkM18xOiB1c2JAMTI0MDAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kd3VzYjMiOworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0JEMzAxPjsKKwkJY2xvY2stbmFtZXMgPSAidXNiZHJkMzAiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlkd2MzIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MzIjsKKwkJCXJlZyA9IDwweDEyNDAwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDczIDA+OworCQkJcGh5cyA9IDwmdXNiZHJkX3BoeTEgMD4sIDwmdXNiZHJkX3BoeTEgMT47CisJCQlwaHktbmFtZXMgPSAidXNiMi1waHkiLCAidXNiMy1waHkiOworCQl9OworCX07CisKKwl1c2JkcmRfcGh5MTogcGh5QDEyNTAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtdXNiZHJkLXBoeSI7CisJCXJlZyA9IDwweDEyNTAwMDAwIDB4MTAwPjsKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNCRDMwMT4sIDwmY2xvY2sgQ0xLX1NDTEtfVVNCUEhZMzAxPjsKKwkJY2xvY2stbmFtZXMgPSAicGh5IiwgInJlZiI7CisJCXNhbXN1bmcscG11LXN5c2NvbiA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKKwkJI3BoeS1jZWxscyA9IDwxPjsKKwl9OworCisJdXNiaG9zdDI6IHVzYkAxMjExMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWVoY2kiOworCQlyZWcgPSA8MHgxMjExMDAwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCA3MSAwPjsKKworCQljbG9ja3MgPSA8JmNsb2NrIENMS19VU0JIMjA+OworCQljbG9jay1uYW1lcyA9ICJ1c2Job3N0IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwb3J0QDAgeworCQkJcmVnID0gPDA+OworCQkJcGh5cyA9IDwmdXNiMl9waHkgMT47CisJCX07CisJfTsKKworCXVzYmhvc3QxOiB1c2JAMTIxMjAwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1vaGNpIjsKKwkJcmVnID0gPDB4MTIxMjAwMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgNzEgMD47CisKKwkJY2xvY2tzID0gPCZjbG9jayBDTEtfVVNCSDIwPjsKKwkJY2xvY2stbmFtZXMgPSAidXNiaG9zdCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9ydEAwIHsKKwkJCXJlZyA9IDwwPjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5IDE+OworCQl9OworCX07CisKKwl1c2IyX3BoeTogcGh5QDEyMTMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtdXNiMi1waHkiOworCQlyZWcgPSA8MHgxMjEzMDAwMCAweDEwMD47CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1VTQkgyMD4sIDwmY2xvY2sgQ0xLX1NDTEtfVVNCUEhZMzAwPjsKKwkJY2xvY2stbmFtZXMgPSAicGh5IiwgInJlZiI7CisJCSNwaHktY2VsbHMgPSA8MT47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CisJCXNhbXN1bmcscG11cmVnLXBoYW5kbGUgPSA8JnBtdV9zeXN0ZW1fY29udHJvbGxlcj47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDQwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDQwLmR0c2kKaW5kZXggODRmNzdjMi4uYWUzYTE3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQ0MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0NDAuZHRzaQpAQCAtMTc2LDcgKzE3Niw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJfTsKIAotCXdhdGNoZG9nIHsKKwl3YXRjaGRvZ0AxMTAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQxMC13ZHQiOwogCQlyZWcgPSA8MHgxMTAwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEgMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU4MDAtcGVhY2gtcGkuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWYyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIEdvb2dsZSBQZWFjaCBQaSBSZXYgMTArIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBHb29nbGUsIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlICJleHlub3M1ODAwLmR0c2kiCisKKy8geworCW1vZGVsID0gIkdvb2dsZSBQZWFjaCBQaSBSZXYgMTArIjsKKworCWNvbXBhdGlibGUgPSAiZ29vZ2xlLHBpLXJldjE2IiwKKwkJImdvb2dsZSxwaS1yZXYxNSIsICJnb29nbGUscGktcmV2MTQiLAorCQkiZ29vZ2xlLHBpLXJldjEzIiwgImdvb2dsZSxwaS1yZXYxMiIsCisJCSJnb29nbGUscGktcmV2MTEiLCAiZ29vZ2xlLHBpLXJldjEwIiwKKwkJImdvb2dsZSxwaSIsICJnb29nbGUscGVhY2giLCAic2Ftc3VuZyxleHlub3M1ODAwIiwKKwkJInNhbXN1bmcsZXh5bm9zNSI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHgyMDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJZml4ZWQtcmF0ZS1jbG9ja3MgeworCQlvc2NjbGsgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtb3NjY2xrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBvd2VyX2tleV9pcnE+OworCisJCXBvd2VyIHsKKwkJCWxhYmVsID0gIlBvd2VyIjsKKwkJCWdwaW9zID0gPCZncHgxIDIgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1BPV0VSPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKwl9OworCisJYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKwkJcHdtcyA9IDwmcHdtIDAgMTAwMDAwMCAwPjsKKwkJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCAxMDAgNTAwIDEwMDAgMTUwMCAyMDAwIDI1MDAgMjgwMD47CisJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw3PjsKKwkJcGluY3RybC0wID0gPCZwd20wX291dD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJfTsKKworCXVzYjMwMF92YnVzX3JlZzogcmVndWxhdG9yLXVzYjMwMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiUDUuMFZfVVNCM0NPTjAiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWdwaW8gPSA8JmdwaDAgMCAwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IzMDBfdmJ1c19lbj47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworCisJdXNiMzAxX3ZidXNfcmVnOiByZWd1bGF0b3ItdXNiMzAxIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJQNS4wVl9VU0IzQ09OMSI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BoMCAxIDA+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnVzYjMwMV92YnVzX2VuPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCX07Cit9OworCismcGluY3RybF8wIHsKKwl0cG1faXJxOiB0cG0taXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDEtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcG93ZXJfa2V5X2lycTogcG93ZXIta2V5LWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWRwX2hwZF9ncGlvOiBkcF9ocGRfZ3BpbyB7CisJCXNhbXN1bmcscGlucyA9ICJncHgyLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWhkbWlfaHBkX2lycTogaGRtaS1ocGQtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMyB7CisJdXNiMzAwX3ZidXNfZW46IHVzYjMwMC12YnVzLWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwaDAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdXNiMzAxX3ZidXNfZW46IHVzYjMwMS12YnVzLWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwaDAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnJ0YyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnRfMyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWJyb2tlbi1jZDsKKwljYXBzMi1tbWMtaHMyMDAtMV84djsKKwlzdXBwb3J0cy1oaWdoc3BlZWQ7CisJbm9uLXJlbW92YWJsZTsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDAgND47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MCAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2J1czQgJnNkMF9idXM4PjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDg+OworCX07Cit9OworCismbW1jXzIgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKKworCXNsb3RAMCB7CisJCXJlZyA9IDwwPjsKKwkJYnVzLXdpZHRoID0gPDQ+OworCX07Cit9OworCismZHAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZHBfaHBkX2dwaW8+OworCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47CisJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47CisJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKKwlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwlzYW1zdW5nLGxhbmUtY291bnQgPSA8Mj47CisJc2Ftc3VuZyxocGQtZ3BpbyA9IDwmZ3B4MiA2IDA+OworCisJZGlzcGxheS10aW1pbmdzIHsKKwkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzE+OworCisJCXRpbWluZzE6IHRpbWluZ0AxIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNTA2NjAwMDA+OworCQkJaGFjdGl2ZSA9IDwxOTIwPjsKKwkJCXZhY3RpdmUgPSA8MTA4MD47CisJCQloZnJvbnQtcG9yY2ggPSA8NjA+OworCQkJaGJhY2stcG9yY2ggPSA8MTcyPjsKKwkJCWhzeW5jLWxlbiA9IDw4MD47CisJCQl2YmFjay1wb3JjaCA9IDwyNT47CisJCQl2ZnJvbnQtcG9yY2ggPSA8MTA+OworCQkJdnN5bmMtbGVuID0gPDEwPjsKKwkJfTsKKwl9OworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGludmVydC12Y2xrOworfTsKKworJmhzaTJjXzkgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXRwbUAyMCB7CisJCWNvbXBhdGlibGUgPSAiaW5maW5lb24sc2xiOTY0NXR0IjsKKwkJcmVnID0gPDB4MjA+OworCQkvKiBVbnVzZWQgaXJxOyBidXQgc3RpbGwgbmVlZCB0byBjb25maWd1cmUgdGhlIHBpbnMgKi8KKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0cG1faXJxPjsKKwl9OworfTsKKworJmkyY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NTA+OworfTsKKworJmhkbWkgeworCXN0YXR1cyA9ICJva2F5IjsKKwlocGQtZ3BpbyA9IDwmZ3B4MyA3IEdQSU9fQUNUSVZFX0hJR0g+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZoZG1pX2hwZF9pcnE+OworCWRkYyA9IDwmaTJjXzI+OworfTsKKworJnVzYmRyZF9waHkwIHsKKwl2YnVzLXN1cHBseSA9IDwmdXNiMzAwX3ZidXNfcmVnPjsKK307CisKKyZ1c2JkcmRfcGh5MSB7CisJdmJ1cy1zdXBwbHkgPSA8JnVzYjMwMV92YnVzX3JlZz47Cit9OworCisvKgorICogVXNlIGxvbmdlc3QgSFcgd2F0Y2hkb2cgaW4gU29DICgzMiBzZWNvbmRzKSBzaW5jZSB0aGUgaGFyZHdhcmUKKyAqIHdhdGNoZG9nIHByb3ZpZGVzIG5vIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAoY29tcGFyZWQgdG8gc29mdC9oYXJkCisgKiBsb2NrdXAgZGV0ZWN0b3JzKSBhbmQgc28gc2hvdWxkIGJlIGxhc3QgcmVzb3J0LgorICovCismd2F0Y2hkb2cgeworCXRpbWVvdXQtc2VjID0gPDMyPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiYjM1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU4MDAuZHRzaQpAQCAtMCwwICsxLDI4IEBACisvKgorICogU0FNU1VORyBFWFlOT1M1ODAwIFNvQyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogU0FNU1VORyBFWFlOT1M1ODAwIFNvQyBkZXZpY2Ugbm9kZXMgYXJlIGxpc3RlZCBpbiB0aGlzIGZpbGUuCisgKiBFWFlOT1M1ODAwIGJhc2VkIGJvYXJkIGZpbGVzIGNhbiBpbmNsdWRlIHRoaXMgZmlsZSBhbmQgcHJvdmlkZQorICogdmFsdWVzIGZvciBib2FyZCBzcGVjZmljIGJpbmRpbmdzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImV4eW5vczU0MjAuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU4MDAiLCAic2Ftc3VuZyxleHlub3M1IjsKK307CisKKyZjbG9jayB7CisJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU4MDAtY2xvY2siOworfTsKKworJm1mYyB7CisJY29tcGF0aWJsZSA9ICJzYW1zdW5nLG1mYy12OCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUtZXVrcmVhLW1iaW14c2QyNS1iYXNlYm9hcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUtZXVrcmVhLW1iaW14c2QyNS1iYXNlYm9hcmQuZHRzCmluZGV4IDYyZmIzZGEuLmFkMTJkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LWV1a3JlYS1tYmlteHNkMjUtYmFzZWJvYXJkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNS1ldWtyZWEtbWJpbXhzZDI1LWJhc2Vib2FyZC5kdHMKQEAgLTE3MiwzICsxNzIsMTYgQEAKIAlmc2wsdWFydC1oYXMtcnRzY3RzOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CisKKyZ1c2Job3N0MSB7CisJcGh5X3R5cGUgPSAic2VyaWFsIjsKKwlkcl9tb2RlID0gImhvc3QiOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JvdGcgeworCXBoeV90eXBlID0gInV0bWkiOworCWRyX21vZGUgPSAib3RnIjsKKwlleHRlcm5hbC12YnVzLWRpdmlkZXI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LWthcm8tdHgyNS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNS1rYXJvLXR4MjUuZHRzCmluZGV4IGY4ZGIzNjYuLjliMzFmYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LWthcm8tdHgyNS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUta2Fyby10eDI1LmR0cwpAQCAtMTYsMjEgKzE2LDk4IEBACiAJbW9kZWwgPSAiS2EtUm8gVFgyNSI7CiAJY29tcGF0aWJsZSA9ICJrYXJvLGlteDI1LXR4MjUiLCAiZnNsLGlteDI1IjsKIAorCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQxOworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXJlZ19mZWNfcGh5OiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MD47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJmZWMtcGh5IjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlncGlvID0gPCZncGlvNCA5IDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQl9OworCX07CisKIAltZW1vcnkgewogCQlyZWcgPSA8MHg4MDAwMDAwMCAweDAyMDAwMDAwIDB4OTAwMDAwMDAgMHgwMjAwMDAwMD47CiAJfTsKIH07CiAKKyZpb211eGMgeworCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKKwkJZnNsLHBpbnMgPSA8CisJCQlNWDI1X1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRCAweDgwMDAwMDAwCisJCQlNWDI1X1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRCAweDgwMDAwMDAwCisJCQlNWDI1X1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUyAweDgwMDAwMDAwCisJCQlNWDI1X1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUyAweDgwMDAwMDAwCisJCT47CisJfTsKKworCXBpbmN0cmxfZmVjOiBmZWNncnAgeworCQlmc2wscGlucyA9IDwKKwkJCU1YMjVfUEFEX0QxMV9fR1BJT180XzkJCTB4ODAwMDAwMDAgLyogRkVDIFBIWSBwb3dlciBvbiBwaW4gKi8KKwkJCU1YMjVfUEFEX0QxM19fR1BJT180XzcJCTB4ODAwMDAwMDAgLyogRkVDIHJlc2V0ICovCisJCQlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTwkweDgwMDAwMDAwCisJCQlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEJMHg4MDAwMDAwMAorCQkJTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4JMHg4MDAwMDAwMAorCQkJTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMAkweDgwMDAwMDAwCisJCQlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEsJMHg4MDAwMDAwMAorCQk+OworCX07CisKKwlwaW5jdHJsX25mYzogbmZjZ3JwIHsKKwkJZnNsLHBpbnMgPSA8CisJCQlNWDI1X1BBRF9ORl9DRTBfX05GX0NFMAkJMHg4MDAwMDAwMAorCQkJTVgyNV9QQURfTkZXRV9CX19ORldFX0IJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX05GUkVfQl9fTkZSRV9CCQkweDgwMDAwMDAwCisJCQlNWDI1X1BBRF9ORkFMRV9fTkZBTEUJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX05GQ0xFX19ORkNMRQkJMHg4MDAwMDAwMAorCQkJTVgyNV9QQURfTkZXUF9CX19ORldQX0IJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX05GUkJfX05GUkIJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0Q3X19ENwkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0Q2X19ENgkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0Q1X19ENQkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0Q0X19ENAkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0QzX19EMwkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0QyX19EMgkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0QxX19EMQkJCTB4ODAwMDAwMDAKKwkJCU1YMjVfUEFEX0QwX19EMAkJCTB4ODAwMDAwMDAKKwkJPjsKKwl9OworfTsKKwogJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJmZlYyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjPjsKKwlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW8zIDcgMD47CiAJcGh5LW1vZGUgPSAicm1paSI7CisJcGh5LXN1cHBseSA9IDwmcmVnX2ZlY19waHk+OwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZuZmMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX25mYz47CiAJbmFuZC1vbi1mbGFzaC1iYnQ7CisJbmFuZC1lY2MtbW9kZSA9ICJodyI7CisJbmFuZC1idXMtd2lkdGggPSA8OD47CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LXBkay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNS1wZGsuZHRzCmluZGV4IGY2MDdjZTUuLmM2MDg5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LXBkay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUtcGRrLmR0cwpAQCAtMTAsNiArMTAsNyBAQAogICovCiAKIC9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSAiaW14MjUuZHRzaSIKIAogLyB7CkBAIC0xOSwxOCArMjAsMjMyIEBACiAJbWVtb3J5IHsKIAkJcmVnID0gPDB4ODAwMDAwMDAgMHg0MDAwMDAwPjsKIAl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlyZWdfZmVjXzN2MzogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiZmVjLTN2MyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbzIgMyAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKKworCQlyZWdfMnA1djogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiMlA1ViI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI1MDAwMDA+OworCQl9OworCisJCXJlZ18zcDN2OiByZWd1bGF0b3JAMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIzUDNWIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCX07CisKKwkJcmVnX2Nhbl8zdjM6IHJlZ3VsYXRvckAzIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gImNhbi0zdjMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCWdwaW8gPSA8JmdwaW80IDYgMD47CisJCX07CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtcGRrLXNndGw1MDAwIiwKKwkJCSAgICAgImZzbCxpbXgtYXVkaW8tc2d0bDUwMDAiOworCQltb2RlbCA9ICJpbXgyNS1wZGstc2d0bDUwMDAiOworCQlzc2ktY29udHJvbGxlciA9IDwmc3NpMT47CisJCWF1ZGlvLWNvZGVjID0gPCZjb2RlYz47CisJCWF1ZGlvLXJvdXRpbmcgPQorCQkJIk1JQ19JTiIsICJNaWMgSmFjayIsCisJCQkiTWljIEphY2siLCAiTWljIEJpYXMiLAorCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQX09VVCI7CisJCW11eC1pbnQtcG9ydCA9IDwxPjsKKwkJbXV4LWV4dC1wb3J0ID0gPDQ+OworCX07CiB9OwogCi0mdWFydDEgeworJmF1ZG11eCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfYXVkbXV4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismY2FuMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY2FuMT47CisJeGNlaXZlci1zdXBwbHkgPSA8JnJlZ19jYW5fM3YzPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXNkaGMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OworCWNkLWdwaW9zID0gPCZncGlvMiAxIDA+OworCXdwLWdwaW9zID0gPCZncGlvMiAwIDA+OwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZmZWMgewogCXBoeS1tb2RlID0gInJtaWkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYz47CisJcGh5LXN1cHBseSA9IDwmcmVnX2ZlY18zdjM+OworCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzQgOCAwPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismaTJjMSB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJc3RhdHVzID0gIm9rYXkiOworCisJY29kZWM6IHNndGw1MDAwQDBhIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2d0bDUwMDAiOworCQlyZWcgPSA8MHgwYT47CisJCWNsb2NrcyA9IDwmY2xrcyAxMjk+OworCQlWRERBLXN1cHBseSA9IDwmcmVnXzJwNXY+OworCQlWRERJTy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl9OworfTsKKworJmlvbXV4YyB7CisJaW14MjUtcGRrIHsKKwkJcGluY3RybF9hdWRtdXg6IGF1ZG11eGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI1X1BBRF9SV19fQVVENF9UWEZTCQkJMHhlMAorCQkJCU1YMjVfUEFEX09FX19BVUQ0X1RYQwkJCTB4ZTAKKwkJCQlNWDI1X1BBRF9FQjBfX0FVRDRfVFhECQkJMHhlMAorCQkJCU1YMjVfUEFEX0VCMV9fQVVENF9SWEQJCQkweGUwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfY2FuMTogY2FuMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI1X1BBRF9HUElPX0FfX0NBTjFfVFgJCTB4MAorCQkJCU1YMjVfUEFEX0dQSU9fQl9fQ0FOMV9SWAkJMHgwCisJCQkJTVgyNV9QQURfRDE0X19HUElPXzRfNiAJCQkweDgwMDAwMDAwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZXNkaGMxOiBlc2RoYzFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVgyNV9QQURfU0QxX0NNRF9fU0QxX0NNRAkJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEsJCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMAkJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExCQkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIJCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMwkJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX0ExNF9fR1BJT18yXzAJCQkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfQTE1X19HUElPXzJfMQkJCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9mZWM6IGZlY2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDCQkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfRkVDX01ESU9fX0ZFQ19NRElPCQkweDQwMDAwMWUwCisJCQkJTVgyNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBMAkJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEJCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTgkJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAJCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExCQkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfRkVDX1JYX0RWX19GRUNfUlhfRFYJCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLCQkweDFjMAorCQkJCU1YMjVfUEFEX0ExN19fR1BJT18yXzMJCQkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfRDEyX19HUElPXzRfOAkJCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMxOiBpMmMxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YMjVfUEFEX0kyQzFfQ0xLX19JMkMxX0NMSwkJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX0kyQzFfREFUX19JMkMxX0RBVAkJMHg4MDAwMDAwMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2twcDoga3BwZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YMjVfUEFEX0tQUF9ST1cwX19LUFBfUk9XMAkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfS1BQX1JPVzFfX0tQUF9ST1cxCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9LUFBfUk9XMl9fS1BQX1JPVzIJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX0tQUF9ST1czX19LUFBfUk9XMwkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfS1BQX0NPTDBfX0tQUF9DT0wwCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9LUFBfQ09MMV9fS1BQX0NPTDEJMHg4MDAwMDAwMAorCQkJCU1YMjVfUEFEX0tQUF9DT0wyX19LUFBfQ09MMgkweDgwMDAwMDAwCisJCQkJTVgyNV9QQURfS1BQX0NPTDNfX0tQUF9DT0wzCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKKworCQlwaW5jdHJsX3VhcnQxOiB1YXJ0MWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI1X1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUwkJMHhlMAorCQkJCU1YMjVfUEFEX1VBUlQxX0NUU19fVUFSVDFfQ1RTCQkweGUwCisJCQkJTVgyNV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQJCTB4ODAwMDAwMDAKKwkJCQlNWDI1X1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRAkJMHhjMAorCQkJPjsKKwkJfTsKKwl9OworfTsKKwogJm5mYyB7CiAJbmFuZC1vbi1mbGFzaC1iYnQ7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJmtwcCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfa3BwPjsKKwlsaW51eCxrZXltYXAgPSA8CisJCQlNQVRSSVhfS0VZKDB4MCwgMHgwLCBLRVlfVVApCisJCQlNQVRSSVhfS0VZKDB4MCwgMHgxLCBLRVlfRE9XTikKKwkJCU1BVFJJWF9LRVkoMHgwLCAweDIsIEtFWV9WT0xVTUVET1dOKQorCQkJTUFUUklYX0tFWSgweDAsIDB4MywgS0VZX0hPTUUpCisJCQlNQVRSSVhfS0VZKDB4MSwgMHgwLCBLRVlfUklHSFQpCisJCQlNQVRSSVhfS0VZKDB4MSwgMHgxLCBLRVlfTEVGVCkKKwkJCU1BVFJJWF9LRVkoMHgxLCAweDIsIEtFWV9FTlRFUikKKwkJCU1BVFJJWF9LRVkoMHgxLCAweDMsIEtFWV9WT0xVTUVVUCkKKwkJCU1BVFJJWF9LRVkoMHgyLCAweDAsIEtFWV9GNikKKwkJCU1BVFJJWF9LRVkoMHgyLCAweDEsIEtFWV9GOCkKKwkJCU1BVFJJWF9LRVkoMHgyLCAweDIsIEtFWV9GOSkKKwkJCU1BVFJJWF9LRVkoMHgyLCAweDMsIEtFWV9GMTApCisJCQlNQVRSSVhfS0VZKDB4MywgMHgwLCBLRVlfRjEpCisJCQlNQVRSSVhfS0VZKDB4MywgMHgxLCBLRVlfRjIpCisJCQlNQVRSSVhfS0VZKDB4MywgMHgyLCBLRVlfRjMpCisJCQlNQVRSSVhfS0VZKDB4MywgMHgyLCBLRVlfUE9XRVIpCisJPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3NpMSB7CisJY29kZWMtaGFuZGxlID0gPCZjb2RlYz47CisJZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQxPjsKKwlmc2wsdWFydC1oYXMtcnRzY3RzOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2Job3N0MSB7CisJcGh5X3R5cGUgPSAic2VyaWFsIjsKKwlkcl9tb2RlID0gImhvc3QiOworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUuZHRzaQppbmRleCBlYTMyM2YwLi5iYjc0ZDk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LmR0c2kKQEAgLTE0LDYgKzE0LDcgQEAKIAogLyB7CiAJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZmZWM7CiAJCWdwaW8wID0gJmdwaW8xOwogCQlncGlvMSA9ICZncGlvMjsKIAkJZ3BpbzIgPSAmZ3BpbzM7CkBAIC0yMSw2ICsyMiw4IEBACiAJCWkyYzAgPSAmaTJjMTsKIAkJaTJjMSA9ICZpMmMyOwogCQlpMmMyID0gJmkyYzM7CisJCW1tYzAgPSAmZXNkaGMxOworCQltbWMxID0gJmVzZGhjMjsKIAkJc2VyaWFsMCA9ICZ1YXJ0MTsKIAkJc2VyaWFsMSA9ICZ1YXJ0MjsKIAkJc2VyaWFsMiA9ICZ1YXJ0MzsKQEAgLTE2NSw5ICsxNjgsMTAgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAotCQkJa3BwQDQzZmE4MDAwIHsKKwkJCWtwcDoga3BwQDQzZmE4MDAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNS1rcHAiLCAiZnNsLGlteDIxLWtwcCI7CiAJCQkJcmVnID0gPDB4NDNmYTgwMDAgMHg0MDAwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMTAyPjsKIAkJCQljbG9jay1uYW1lcyA9ICIiOwpAQCAtNDgyLDIzICs0ODYsMTMgQEAKIAkJCQljbG9ja3MgPSA8JmNsa3MgOTk+OwogCQkJfTsKIAotCQkJdXNicGh5MTogdXNicGh5QDEgewotCQkJCWNvbXBhdGlibGUgPSAibm9wLXVzYnBoeSI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVzYnBoeTI6IHVzYnBoeUAyIHsKLQkJCQljb21wYXRpYmxlID0gIm5vcC11c2JwaHkiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCiAJCQl1c2JvdGc6IHVzYkA1M2ZmNDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtdXNiIiwgImZzbCxpbXgyNy11c2IiOwogCQkJCXJlZyA9IDwweDUzZmY0MDAwIDB4MDIwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwzNz47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDk+LCA8JmNsa3MgNzA+LCA8JmNsa3MgOD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOworCQkJCWNsb2NrcyA9IDwmY2xrcyA3MD47CiAJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MgMD47CisJCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MD47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTUwNiw5ICs1MDAsOSBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI1LXVzYiIsICJmc2wsaW14MjctdXNiIjsKIAkJCQlyZWcgPSA8MHg1M2ZmNDQwMCAweDAyMDA+OwogCQkJCWludGVycnVwdHMgPSA8MzU+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyA5PiwgPCZjbGtzIDcwPiwgPCZjbGtzIDg+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJhaGIiLCAicGVyIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgNzA+OwogCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjIDE+OworCQkJCWZzbCx1c2JwaHkgPSA8JnVzYnBoeTE+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC01MTgsNyArNTEyLDYgQEAKIAkJCQljbG9ja3MgPSA8JmNsa3MgOT4sIDwmY2xrcyA3MD4sIDwmY2xrcyA4PjsKIAkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInBlciI7CiAJCQkJcmVnID0gPDB4NTNmZjQ2MDAgMHgwMGY+OwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCiAJCQlkcnlpY2VANTNmZmMwMDAgewpAQCAtNTMwLDYgKzUyMywxMSBAQAogCQkJfTsKIAkJfTsKIAorCQlpcmFtOiBzcmFtQDc4MDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJCXJlZyA9IDwweDc4MDAwMDAwIDB4MjAwMDA+OworCQl9OworCiAJCWVtaUA4MDAwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxlbWktYnVzIiwgInNpbXBsZS1idXMiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01NTAsNCArNTQ4LDIwIEBACiAJCQl9OwogCQl9OwogCX07CisKKwl1c2JwaHkgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJdXNicGh5MDogdXNiLXBoeUAwIHsKKwkJCXJlZyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCX07CisKKwkJdXNicGh5MTogdXNiLXBoeUAxIHsKKwkJCXJlZyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1wZGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjctcGRrLmR0cwppbmRleCA1Y2U4OWFhLi40YzMxNzcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1wZGsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LXBkay5kdHMKQEAgLTE3LDE1ICsxNywxODEgQEAKIAljb21wYXRpYmxlID0gImZzbCxpbXgyNy1wZGsiLCAiZnNsLGlteDI3IjsKIAogCW1lbW9yeSB7Ci0JCXJlZyA9IDwweDAgMHgwPjsKKwkJcmVnID0gPDB4YTAwMDAwMDAgMHgwODAwMDAwMD47CiAJfTsKKworCXVzYnBoeSB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQl1c2JwaHkwOiB1c2JwaHlAMCB7CisJCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOworCQkJcmVnID0gPDA+OworCQkJY2xvY2tzID0gPCZjbGtzIDA+OworCQkJY2xvY2stbmFtZXMgPSAibWFpbl9jbGsiOworCQl9OworCX07Cit9OworCismY3NwaTIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2NzcGkyPjsKKwlmc2wsc3BpLW51bS1jaGlwc2VsZWN0cyA9IDwxPjsKKwljcy1ncGlvcyA9IDwmZ3BpbzQgMjEgR1BJT19BQ1RJVkVfSElHSD47CisJc3RhdHVzID0gIm9rYXkiOworCisJcG1pYzogbWMxMzc4M0AwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbWMxMzc4MyI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLWNzLWhpZ2g7CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMz47CisJCWludGVycnVwdHMgPSA8MTQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJcmVndWxhdG9ycyB7CisJCQl2Z2VuX3JlZzogdmdlbiB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCXZtbWMxX3JlZzogdm1tYzEgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE2MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJfTsKKworCQkJZ3BvMV9yZWc6IGdwbzEgeworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl9OworCisJCQlncG8zX3JlZzogZ3BvMyB7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZmZWMgeworCXBoeS1tb2RlID0gIm1paSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisma3BwIHsKKwlsaW51eCxrZXltYXAgPSA8CisJCU1BVFJJWF9LRVkoMCwgMCwgS0VZX1VQKQorCQlNQVRSSVhfS0VZKDAsIDEsIEtFWV9ET1dOKQorCQlNQVRSSVhfS0VZKDEsIDAsIEtFWV9SSUdIVCkKKwkJTUFUUklYX0tFWSgxLCAxLCBLRVlfTEVGVCkKKwkJTUFUUklYX0tFWSgxLCAyLCBLRVlfRU5URVIpCisJCU1BVFJJWF9LRVkoMiwgMCwgS0VZX0Y2KQorCQlNQVRSSVhfS0VZKDIsIDEsIEtFWV9GOCkKKwkJTUFUUklYX0tFWSgyLCAyLCBLRVlfRjkpCisJCU1BVFJJWF9LRVkoMiwgMywgS0VZX0YxMCkKKwk+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZuZmMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX25hbmQ+OworCW5hbmQtZWNjLW1vZGUgPSAiaHciOworCW5hbmQtb24tZmxhc2gtYmJ0OworCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKICZ1YXJ0MSB7CiAJZnNsLHVhcnQtaGFzLXJ0c2N0czsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAotJmZlYyB7CismdXNib3RnIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JvdGc+OworCWRyX21vZGUgPSAib3RnIjsKKwlmc2wsdXNicGh5ID0gPCZ1c2JwaHkwPjsKKwlwaHlfdHlwZSA9ICJ1bHBpIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismaW9tdXhjIHsKKwlpbXgyNy1wZGsgeworCQlwaW5jdHJsX2NzcGkyOiBjc3BpMmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI3X1BBRF9DU1BJMl9NSVNPX19DU1BJMl9NSVNPIDB4MAorCQkJCU1YMjdfUEFEX0NTUEkyX01PU0lfX0NTUEkyX01PU0kgMHgwCisJCQkJTVgyN19QQURfQ1NQSTJfU0NMS19fQ1NQSTJfU0NMSyAweDAKKwkJCQlNWDI3X1BBRF9DU1BJMl9TUzBfX0dQSU80XzIxCTB4MCAvKiBTUEkyIENTMCAqLworCQkJCU1YMjdfUEFEX1RPVVRfX0dQSU8zXzE0CQkweDAgLyogUE1JQyBJUlEgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF9mZWM6IGZlY2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI3X1BBRF9TRDNfQ01EX19GRUNfVFhEMCAweDAKKwkJCQlNWDI3X1BBRF9TRDNfQ0xLX19GRUNfVFhEMSAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTBfX0ZFQ19UWEQyIDB4MAorCQkJCU1YMjdfUEFEX0FUQV9EQVRBMV9fRkVDX1RYRDMgMHgwCisJCQkJTVgyN19QQURfQVRBX0RBVEEyX19GRUNfUlhfRVIgMHgwCisJCQkJTVgyN19QQURfQVRBX0RBVEEzX19GRUNfUlhEMSAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTRfX0ZFQ19SWEQyIDB4MAorCQkJCU1YMjdfUEFEX0FUQV9EQVRBNV9fRkVDX1JYRDMgMHgwCisJCQkJTVgyN19QQURfQVRBX0RBVEE2X19GRUNfTURJTyAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTdfX0ZFQ19NREMgMHgwCisJCQkJTVgyN19QQURfQVRBX0RBVEE4X19GRUNfQ1JTIDB4MAorCQkJCU1YMjdfUEFEX0FUQV9EQVRBOV9fRkVDX1RYX0NMSyAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTEwX19GRUNfUlhEMCAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTExX19GRUNfUlhfRFYgMHgwCisJCQkJTVgyN19QQURfQVRBX0RBVEExMl9fRkVDX1JYX0NMSyAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTEzX19GRUNfQ09MIDB4MAorCQkJCU1YMjdfUEFEX0FUQV9EQVRBMTRfX0ZFQ19UWF9FUiAweDAKKwkJCQlNWDI3X1BBRF9BVEFfREFUQTE1X19GRUNfVFhfRU4gMHgwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfbmFuZDogbmFuZGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI3X1BBRF9ORlJCX19ORlJCCTB4MAorCQkJCU1YMjdfUEFEX05GQ0xFX19ORkNMRQkweDAKKwkJCQlNWDI3X1BBRF9ORldQX0JfX05GV1BfQgkweDAKKwkJCQlNWDI3X1BBRF9ORkNFX0JfX05GQ0VfQgkweDAKKwkJCQlNWDI3X1BBRF9ORkFMRV9fTkZBTEUJMHgwCisJCQkJTVgyN19QQURfTkZSRV9CX19ORlJFX0IJMHgwCisJCQkJTVgyN19QQURfTkZXRV9CX19ORldFX0IJMHgwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YMjdfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhEIDB4MAorCQkJCU1YMjdfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhEIDB4MAorCQkJCU1YMjdfUEFEX1VBUlQxX0NUU19fVUFSVDFfQ1RTIDB4MAorCQkJCU1YMjdfUEFEX1VBUlQxX1JUU19fVUFSVDFfUlRTIDB4MAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYm90ZzogdXNib3RnZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YMjdfUEFEX1VTQk9UR19OWFRfX1VTQk9UR19OWFQgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX1NUUF9fVVNCT1RHX1NUUCAweDAKKwkJCQlNWDI3X1BBRF9VU0JPVEdfRElSX19VU0JPVEdfRElSIDB4MAorCQkJCU1YMjdfUEFEX1VTQk9UR19DTEtfX1VTQk9UR19DTEsgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEExX19VU0JPVEdfREFUQTEgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEE0X19VU0JPVEdfREFUQTQgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYgMHgwCisJCQkJTVgyN19QQURfVVNCT1RHX0RBVEE3X19VU0JPVEdfREFUQTcgMHgwCisJCQk+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjctcGh5dGVjLXBoeWNhcmQtcy1yZGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjctcGh5dGVjLXBoeWNhcmQtcy1yZGsuZHRzCmluZGV4IDNjMzk2NGEuLjdjODY5ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LXBoeXRlYy1waHljYXJkLXMtcmRrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1waHl0ZWMtcGh5Y2FyZC1zLXJkay5kdHMKQEAgLTE1LDYgKzE1LDEwIEBACiAJbW9kZWwgPSAiUGh5dGVjIHBjYTEwMCByYXBpZCBkZXZlbG9wbWVudCBraXQiOwogCWNvbXBhdGlibGUgPSAicGh5dGVjLGlteDI3LXBjYTEwMC1yZGsiLCAicGh5dGVjLGlteDI3LXBjYTEwMCIsICJmc2wsaW14MjciOwogCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDE7CisJfTsKKwogCWRpc3BsYXk6IGRpc3BsYXkgewogCQltb2RlbCA9ICJQcmltZXZpZXctUEQwNTBWTDEiOwogCQluYXRpdmUtbW9kZSA9IDwmdGltaW5nMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1waHl0ZWMtcGh5Y29yZS1yZGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjctcGh5dGVjLXBoeWNvcmUtcmRrLmR0cwppbmRleCBkZjNiMmU3Li5mZTAyYmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1waHl0ZWMtcGh5Y29yZS1yZGsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LXBoeXRlYy1waHljb3JlLXJkay5kdHMKQEAgLTEyLDE0ICsxMiw3OSBAQAogLyB7CiAJbW9kZWwgPSAiUGh5dGVjIHBjbTk3MCI7CiAJY29tcGF0aWJsZSA9ICJwaHl0ZWMsaW14MjctcGNtOTcwIiwgInBoeXRlYyxpbXgyNy1wY20wMzgiLCAiZnNsLGlteDI3IjsKKworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQxOworCX07CisKKwlkaXNwbGF5MDogTFEwMzVRNyB7CisJCW1vZGVsID0gIlNoYXJwLUxRMDM1UTciOworCQluYXRpdmUtbW9kZSA9IDwmdGltaW5nMD47CisJCWJpdHMtcGVyLXBpeGVsID0gPDE2PjsKKwkJZnNsLHBjciA9IDwweGYwMDA4MGMwPjsKKworCQlkaXNwbGF5LXRpbWluZ3MgeworCQkJdGltaW5nMDogMjQweDMyMCB7CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDU1MDAwMDA+OworCQkJCWhhY3RpdmUgPSA8MjQwPjsKKwkJCQl2YWN0aXZlID0gPDMyMD47CisJCQkJaGJhY2stcG9yY2ggPSA8NT47CisJCQkJaHN5bmMtbGVuID0gPDc+OworCQkJCWhmcm9udC1wb3JjaCA9IDwxNj47CisJCQkJdmJhY2stcG9yY2ggPSA8Nz47CisJCQkJdnN5bmMtbGVuID0gPDE+OworCQkJCXZmcm9udC1wb3JjaCA9IDw5PjsKKwkJCQlwaXhlbGNsay1hY3RpdmUgPSA8MT47CisJCQkJaHN5bmMtYWN0aXZlID0gPDE+OworCQkJCXZzeW5jLWFjdGl2ZSA9IDwxPjsKKwkJCQlkZS1hY3RpdmUgPSA8MD47CisJCQl9OworCQl9OworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJcmVndWxhdG9yQDIgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9jc2llbj47CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJDU0lfRU4iOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCWdwaW8gPSA8JmdwaW8yIDI0IEdQSU9fQUNUSVZFX0xPVz47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCX07CisKKwl1c2JwaHkgeworCQl1c2JwaHkyOiB1c2JwaHlAMiB7CisJCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOworCQkJcmVnID0gPDI+OworCQkJdmNjLXN1cHBseSA9IDwmcmVnXzV2MD47CisJCQljbG9ja3MgPSA8JmNsa3MgMD47CisJCQljbG9jay1uYW1lcyA9ICJtYWluX2NsayI7CisJCX07CisJfTsKIH07CiAKICZjc3BpMSB7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2NzcGkxPiwgPCZwaW5jdHJsX2NzcGkxY3MxPjsKIAlmc2wsc3BpLW51bS1jaGlwc2VsZWN0cyA9IDwyPjsKIAljcy1ncGlvcyA9IDwmZ3BpbzQgMjggR1BJT19BQ1RJVkVfSElHSD4sCiAJCSAgIDwmZ3BpbzQgMjcgR1BJT19BQ1RJVkVfTE9XPjsKIH07CiAKKyZmYiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaW14ZmIxPjsKKwlkaXNwbGF5ID0gPCZkaXNwbGF5MD47CisJbGNkLXN1cHBseSA9IDwmcmVnXzV2MD47CisJZnNsLGRtYWNyID0gPDB4MDAwMjAwMTA+OworCWZzbCxsc2NyMSA9IDwweDAwMTIwMzAwPjsKKwlmc2wsbHBjY3IgPSA8MHgwMGE5MDNmZj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmkyYzEgewogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0zNiw2ICsxMDEsNTAgQEAKIAogJmlvbXV4YyB7CiAJaW14MjdfcGh5Y29yZV9yZGsgeworCQlwaW5jdHJsX2NzaWVuOiBjc2llbmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI3X1BBRF9VU0JfT0NfQl9fR1BJTzJfMjQgMHgwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfY3NwaTFjczE6IGNzcGkxY3MxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YMjdfUEFEX0NTUEkxX1NTMV9fR1BJTzRfMjcgMHgwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaW14ZmIxOiBpbXhmYmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI3X1BBRF9MRDBfX0xEMCAweDAKKwkJCQlNWDI3X1BBRF9MRDFfX0xEMSAweDAKKwkJCQlNWDI3X1BBRF9MRDJfX0xEMiAweDAKKwkJCQlNWDI3X1BBRF9MRDNfX0xEMyAweDAKKwkJCQlNWDI3X1BBRF9MRDRfX0xENCAweDAKKwkJCQlNWDI3X1BBRF9MRDVfX0xENSAweDAKKwkJCQlNWDI3X1BBRF9MRDZfX0xENiAweDAKKwkJCQlNWDI3X1BBRF9MRDdfX0xENyAweDAKKwkJCQlNWDI3X1BBRF9MRDhfX0xEOCAweDAKKwkJCQlNWDI3X1BBRF9MRDlfX0xEOSAweDAKKwkJCQlNWDI3X1BBRF9MRDEwX19MRDEwIDB4MAorCQkJCU1YMjdfUEFEX0xEMTFfX0xEMTEgMHgwCisJCQkJTVgyN19QQURfTEQxMl9fTEQxMiAweDAKKwkJCQlNWDI3X1BBRF9MRDEzX19MRDEzIDB4MAorCQkJCU1YMjdfUEFEX0xEMTRfX0xEMTQgMHgwCisJCQkJTVgyN19QQURfTEQxNV9fTEQxNSAweDAKKwkJCQlNWDI3X1BBRF9MRDE2X19MRDE2IDB4MAorCQkJCU1YMjdfUEFEX0xEMTdfX0xEMTcgMHgwCisJCQkJTVgyN19QQURfQ0xTX19DTFMgMHgwCisJCQkJTVgyN19QQURfQ09OVFJBU1RfX0NPTlRSQVNUIDB4MAorCQkJCU1YMjdfUEFEX0xTQ0xLX19MU0NMSyAweDAKKwkJCQlNWDI3X1BBRF9PRV9BQ0RfX09FX0FDRCAweDAKKwkJCQlNWDI3X1BBRF9QU19fUFMgMHgwCisJCQkJTVgyN19QQURfUkVWX19SRVYgMHgwCisJCQkJTVgyN19QQURfU1BMX1NQUl9fU1BMX1NQUiAweDAKKwkJCQlNWDI3X1BBRF9IU1lOQ19fSFNZTkMgMHgwCisJCQkJTVgyN19QQURfVlNZTkNfX1ZTWU5DIDB4MAorCQkJPjsKKwkJfTsKKwogCQlwaW5jdHJsX2kyYzE6IGkyYzFncnAgewogCQkJLyogQWRkIHB1bGx1cCB0byBEQVRBIGxpbmUgKi8KIAkJCWZzbCxwaW5zID0gPApAQCAtMTkzLDE5ICszMDIsMTYgQEAKIAlkcl9tb2RlID0gImhvc3QiOwogCXBoeV90eXBlID0gInVscGkiOwogCXZidXMtc3VwcGx5ID0gPCZyZWdfNXYwPjsKKwlmc2wsdXNicGh5ID0gPCZ1c2JwaHkyPjsKIAlkaXNhYmxlLW92ZXItY3VycmVudDsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCi0mdXNicGh5MiB7Ci0JdmNjLXN1cHBseSA9IDwmcmVnXzV2MD47Ci19OwotCiAmd2VpbSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfd2VpbT47CiAKLQljYW5AZDQwMDAwMDAgeworCWNhbkA0LDAgewogCQljb21wYXRpYmxlID0gIm54cCxzamExMDAwIjsKIAkJcmVnID0gPDQgMHgwMDAwMDAwMCAweDAwMDAwMTAwPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzU+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjctcGh5dGVjLXBoeWNvcmUtc29tLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1waHl0ZWMtcGh5Y29yZS1zb20uZHRzaQppbmRleCBjZWZhYTY5Li4zMWU5ZjcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1waHl0ZWMtcGh5Y29yZS1zb20uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNy1waHl0ZWMtcGh5Y29yZS1zb20uZHRzaQpAQCAtNDEsNiArNDEsMjAgQEAKIAkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OwogCQl9OwogCX07CisKKwl1c2JwaHkgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJdXNicGh5MDogdXNicGh5QDAgeworCQkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKKwkJCXJlZyA9IDwwPjsKKwkJCXZjYy1zdXBwbHkgPSA8JnN3M19yZWc+OworCQkJY2xvY2tzID0gPCZjbGtzIDA+OworCQkJY2xvY2stbmFtZXMgPSAibWFpbl9jbGsiOworCQl9OworCX07CiB9OwogCiAmYXVkbXV4IHsKQEAgLTY2LDkgKzgwLDkgQEAKIAlzdGF0dXMgPSAib2theSI7CiAKIAlwbWljOiBtYzEzNzgzQDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1jMTM3ODMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcG1pYz47CiAJCXJlZyA9IDwwPjsKIAkJc3BpLWNzLWhpZ2g7CiAJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDIwMDAwMDAwPjsKQEAgLTE2Niw3ICsxODAsNyBAQAogCiAmZmVjIHsKIAlwaHktbW9kZSA9ICJtaWkiOwotCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzMgMzAgR1BJT19BQ1RJVkVfSElHSD47CisJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMyAzMCBHUElPX0FDVElWRV9MT1c+OwogCXBoeS1zdXBwbHkgPSA8JnJlZ18zdjM+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OwpAQCAtMjA0LDcgKzIxOCw2IEBACiAJCQkJTVgyN19QQURfQ1NQSTFfTU9TSV9fQ1NQSTFfTU9TSSAweDAKIAkJCQlNWDI3X1BBRF9DU1BJMV9TQ0xLX19DU1BJMV9TQ0xLIDB4MAogCQkJCU1YMjdfUEFEX0NTUEkxX1NTMF9fR1BJTzRfMjgJMHgwIC8qIFNQSTEgQ1MwICovCi0JCQkJTVgyN19QQURfVVNCX1BXUl9fR1BJTzJfMjMJMHgwIC8qIFBNSUMgSVJRICovCiAJCQk+OwogCQl9OwogCkBAIC0yNTEsNiArMjY0LDIxIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfcG1pYzogcG1pY2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDI3X1BBRF9VU0JfUFdSX19HUElPMl8yMwkweDAgLyogUE1JQyBJUlEgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF9zc2kxOiBzc2kxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YMjdfUEFEX1NTSTFfRlNfX1NTSTFfRlMgMHgwCisJCQkJTVgyN19QQURfU1NJMV9SWERBVF9fU1NJMV9SWERBVCAweDAKKwkJCQlNWDI3X1BBRF9TU0kxX1RYREFUX19TU0kxX1RYREFUIDB4MAorCQkJCU1YMjdfUEFEX1NTSTFfQ0xLX19TU0kxX0NMSyAweDAKKwkJCT47CisJCX07CisKIAkJcGluY3RybF91c2JvdGc6IHVzYm90Z2dycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDI3X1BBRF9VU0JPVEdfQ0xLX19VU0JPVEdfQ0xLIDB4MApAQCAtMjc5LDIzICszMDcsMjggQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismc3NpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc3NpMT47CisJZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmdXNib3RnIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JvdGc+OwogCWRyX21vZGUgPSAib3RnIjsKIAlwaHlfdHlwZSA9ICJ1bHBpIjsKKwlmc2wsdXNicGh5ID0gPCZ1c2JwaHkwPjsKIAl2YnVzLXN1cHBseSA9IDwmc3czX3JlZz47CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAotJnVzYnBoeTAgewotCXZjYy1zdXBwbHkgPSA8JnN3M19yZWc+OwotfTsKLQogJndlaW0gewogCXN0YXR1cyA9ICJva2F5IjsKIAotCW5vcjogbm9yQGMwMDAwMDAwIHsKKwlub3I6IG5vckAwLDAgewogCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CiAJCXJlZyA9IDwwIDB4MDAwMDAwMDAgMHgwMjAwMDAwMD47CiAJCWJhbmstd2lkdGggPSA8Mj47CkBAIC0zMDUsNyArMzM4LDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJfTsKIAotCXNyYW06IHNyYW1AYzgwMDAwMDAgeworCXNyYW06IHNyYW1AMSwwIHsKIAkJY29tcGF0aWJsZSA9ICJtdGQtcmFtIjsKIAkJcmVnID0gPDEgMHgwMDAwMDAwMCAweDAwODAwMDAwPjsKIAkJYmFuay13aWR0aCA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNy5kdHNpCmluZGV4IDEzN2UwMTAuLmE3NTU1NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjcuZHRzaQpAQCAtMTEsMTEgKzExLDEzIEBACiAKICNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgogI2luY2x1ZGUgImlteDI3LXBpbmZ1bmMuaCIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgogCiAvIHsKIAlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmZlYzsKIAkJZ3BpbzAgPSAmZ3BpbzE7CiAJCWdwaW8xID0gJmdwaW8yOwogCQlncGlvMiA9ICZncGlvMzsKQEAgLTcxLDI2ICs3Myw2IEBACiAJCX07CiAJfTsKIAotCXVzYnBoeSB7Ci0JCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQl1c2JwaHkwOiB1c2JwaHlAMCB7Ci0JCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOwotCQkJcmVnID0gPDA+OwotCQkJY2xvY2tzID0gPCZjbGtzIDc1PjsKLQkJCWNsb2NrLW5hbWVzID0gIm1haW5fY2xrIjsKLQkJfTsKLQotCQl1c2JwaHkyOiB1c2JwaHlAMiB7Ci0JCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOwotCQkJcmVnID0gPDI+OwotCQkJY2xvY2tzID0gPCZjbGtzIDc1PjsKLQkJCWNsb2NrLW5hbWVzID0gIm1haW5fY2xrIjsKLQkJfTsKLQl9OwotCiAJc29jIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtNDY0LDkgKzQ0Niw4IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjctdXNiIjsKIAkJCQlyZWcgPSA8MHgxMDAyNDAwMCAweDIwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw1Nj47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDE1PjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgNzU+OwogCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjIDA+OwotCQkJCWZzbCx1c2JwaHkgPSA8JnVzYnBoeTA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC00NzQsNyArNDU1LDcgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNy11c2IiOwogCQkJCXJlZyA9IDwweDEwMDI0MjAwIDB4MjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDU0PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgMTU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyA3NT47CiAJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MgMT47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CkBAIC00ODMsOSArNDY0LDggQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNy11c2IiOwogCQkJCXJlZyA9IDwweDEwMDI0NDAwIDB4MjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDU1PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgMTU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyA3NT47CiAJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MgMj47Ci0JCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5Mj47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI4LWR1Y2tiaWxsLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI4LWR1Y2tiaWxsLmR0cwppbmRleCA1ZjMyNmMxLi5jZTFhN2VmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXgyOC1kdWNrYmlsbC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjgtZHVja2JpbGwuZHRzCkBAIC0yNSw5ICsyNSw5IEBACiAJCQlzc3AwOiBzc3BAODAwMTAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI4LW1tYyI7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfOGJpdF9waW5zX2EKKwkJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfNGJpdF9waW5zX2EKIAkJCQkJJm1tYzBfY2RfY2ZnICZtbWMwX3Nja19jZmc+OwotCQkJCWJ1cy13aWR0aCA9IDw4PjsKKwkJCQlidXMtd2lkdGggPSA8ND47CiAJCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMzksNyArMzksNyBAQAogCQkJCWhvZ19waW5zX2E6IGhvZ0AwIHsKIAkJCQkJcmVnID0gPDA+OwogCQkJCQlmc2wscGlubXV4LWlkcyA9IDwKLQkJCQkJCU1YMjhfUEFEX0VORVQwX1JYX0NMS19fR1BJT180XzEzIC8qIFBIWSBSZXNldCAqLworCQkJCQkJTVgyOF9QQURfU1NQMF9EQVRBN19fR1BJT18yXzcgLyogUEhZIFJlc2V0ICovCiAJCQkJCT47CiAJCQkJCWZzbCxkcml2ZS1zdHJlbmd0aCA9IDxNWFNfRFJJVkVfNG1BPjsKIAkJCQkJZnNsLHZvbHRhZ2UgPSA8TVhTX1ZPTFRBR0VfSElHSD47CkBAIC04Miw3ICs4Miw3IEBACiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZtYWMwX3BpbnNfYT47CiAJCQlwaHktc3VwcGx5ID0gPCZyZWdfM3Azdj47Ci0JCQlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW80IDEzIDA+OworCQkJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMiA3IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlwaHktcmVzZXQtZHVyYXRpb24gPSA8MTAwPjsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKQEAgLTExMCwxMiArMTEwLDEyIEBACiAKIAkJc3RhdHVzIHsKIAkJCWxhYmVsID0gImR1Y2tiaWxsOmdyZWVuOnN0YXR1cyI7Ci0JCQlncGlvcyA9IDwmZ3BpbzMgNSAwPjsKKwkJCWdwaW9zID0gPCZncGlvMyA1IEdQSU9fQUNUSVZFX0hJR0g+OwogCQl9OwogCiAJCWZhaWx1cmUgewogCQkJbGFiZWwgPSAiZHVja2JpbGw6cmVkOnN0YXR1cyI7Ci0JCQlncGlvcyA9IDwmZ3BpbzMgNCAwPjsKKwkJCWdwaW9zID0gPCZncGlvMyA0IEdQSU9fQUNUSVZFX0hJR0g+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI4LmR0c2kKaW5kZXggOTBhNTc5NS4uYTk1Y2M1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyOC5kdHNpCkBAIC05LDYgKzksNyBAQAogICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiAgKi8KIAorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgogI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCiAjaW5jbHVkZSAiaW14MjgtcGluZnVuYy5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgzNS1ldWtyZWEtY3B1aW14MzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDM1LWV1a3JlYS1jcHVpbXgzNS5kdHNpCmluZGV4IDkwNmFlOTMuLjljMmI3MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDM1LWV1a3JlYS1jcHVpbXgzNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDM1LWV1a3JlYS1jcHVpbXgzNS5kdHNpCkBAIC0zNyw2ICszNywxNyBAQAogCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKIAkJcmVnID0gPDB4NTE+OwogCX07CisKKwl0c2MyMDA3OiB0c2MyMDA3QDQ4IHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0c2MyMDA3IjsKKwkJZ3Bpb3MgPSA8JmdwaW8zIDIgMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8zPjsKKwkJaW50ZXJydXB0cyA9IDwweDIgMHg4PjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX3RzYzIwMDdfMT47CisJCXJlZyA9IDwweDQ4PjsKKwkJdGkseC1wbGF0ZS1vaG1zID0gPDE4MD47CisJfTsKIH07CiAKICZpb211eGMgewpAQCAtNzAsNiArODEsMTAgQEAKIAkJCQlNWDM1X1BBRF9JMkMxX0RBVF9fSTJDMV9TREEJCTB4ODAwMDAwMDAKIAkJCT47CiAJCX07CisKKwkJcGluY3RybF90c2MyMDA3XzE6IHRzYzIwMDdncnAtMSB7CisJCQlmc2wscGlucyA9IDxNWDM1X1BBRF9BVEFfREEyX19HUElPM18yIDB4ODAwMDAwMDA+OworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgzNS1ldWtyZWEtbWJpbXhzZDM1LWJhc2Vib2FyZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXgzNS1ldWtyZWEtbWJpbXhzZDM1LWJhc2Vib2FyZC5kdHMKaW5kZXggMWJkZWMyMS4uZjA0YWU5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MzUtZXVrcmVhLW1iaW14c2QzNS1iYXNlYm9hcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDM1LWV1a3JlYS1tYmlteHNkMzUtYmFzZWJvYXJkLmR0cwpAQCAtNDYsNiArNDYsMTQgQEAKIAkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOwogCQl9OwogCX07CisKKwlzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAiZXVrcmVhLGFzb2MtdGx2MzIwIjsKKwkJZXVrcmVhLG1vZGVsID0gImlteDM1LWV1a3JlYS10bHYzMjBhaWMyMyI7CisJCXNzaS1jb250cm9sbGVyID0gPCZzc2kxPjsKKwkJZnNsLG11eC1pbnQtcG9ydCA9IDwxPjsKKwkJZnNsLG11eC1leHQtcG9ydCA9IDw0PjsKKwl9OwogfTsKIAogJmF1ZG11eCB7CkBAIC0xMjQsNiArMTMyLDcgQEAKIH07CiAKICZzc2kxIHsKKwljb2RlYy1oYW5kbGUgPSA8JnRsdjMyMGFpYzIzPjsKIAlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CkBAIC0xNDEsMyArMTUwLDE2IEBACiAJZnNsLHVhcnQtaGFzLXJ0c2N0czsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismdXNiaG9zdDEgeworCXBoeV90eXBlID0gInNlcmlhbCI7CisJZHJfbW9kZSA9ICJob3N0IjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNib3RnIHsKKwlwaHlfdHlwZSA9ICJ1dG1pIjsKKwlkcl9tb2RlID0gIm90ZyI7CisJZXh0ZXJuYWwtdmJ1cy1kaXZpZGVyOworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgzNS1wZGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MzUtcGRrLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDcxNTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MzUtcGRrLmR0cwpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgRXVrcsOpYSBFbGVjdHJvbWF0aXF1ZSA8ZGVuaXNAZXVrcmVhLmNvbT4KKyAqIENvcHlyaWdodCAyMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJpbXgzNS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJGcmVlc2NhbGUgaS5NWDM1IFByb2R1Y3QgRGV2ZWxvcG1lbnQgS2l0IjsKKwljb21wYXRpYmxlID0gImZzbCxpbXgzNS1wZGsiLCAiZnNsLGlteDM1IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDgwMDAwMDAwIDB4ODAwMDAwMD4sCisJCSAgICAgIDwweDkwMDAwMDAwIDB4ODAwMDAwMD47CisJfTsKK307CisKKyZlc2RoYzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2VzZGhjMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlvbXV4YyB7CisJaW14MzUtcGRrIHsKKwkJcGluY3RybF9lc2RoYzE6IGVzZGhjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDM1X1BBRF9TRDFfQ01EX19FU0RIQzFfQ01ECQkweDgwMDAwMDAwCisJCQkJTVgzNV9QQURfU0QxX0NMS19fRVNESEMxX0NMSwkJMHg4MDAwMDAwMAorCQkJCU1YMzVfUEFEX1NEMV9EQVRBMF9fRVNESEMxX0RBVDAJCTB4ODAwMDAwMDAKKwkJCQlNWDM1X1BBRF9TRDFfREFUQTFfX0VTREhDMV9EQVQxCQkweDgwMDAwMDAwCisJCQkJTVgzNV9QQURfU0QxX0RBVEEyX19FU0RIQzFfREFUMgkJMHg4MDAwMDAwMAorCQkJCU1YMzVfUEFEX1NEMV9EQVRBM19fRVNESEMxX0RBVDMJCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MTogdWFydDFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVgzNV9QQURfVFhEMV9fVUFSVDFfVFhEX01VWAkJMHgxYzUKKwkJCQlNWDM1X1BBRF9SWEQxX19VQVJUMV9SWERfTVVYCQkweDFjNQorCQkJCU1YMzVfUEFEX0NUUzFfX1VBUlQxX0NUUwkJMHgxYzUKKwkJCQlNWDM1X1BBRF9SVFMxX19VQVJUMV9SVFMJCTB4MWM1CisJCQk+OworCQl9OworCX07Cit9OworCismbmZjIHsKKwluYW5kLWJ1cy13aWR0aCA9IDwxNj47CisJbmFuZC1lY2MtbW9kZSA9ICJodyI7CisJbmFuZC1vbi1mbGFzaC1iYnQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CisJZnNsLHVhcnQtaGFzLXJ0c2N0czsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDM1LmR0c2kKaW5kZXggODhiMjE4Zi4uNDc1OWFiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MzUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXgzNS5kdHNpCkBAIC0xMyw2ICsxMyw3IEBACiAKIC8gewogCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZmVjOwogCQlncGlvMCA9ICZncGlvMTsKIAkJZ3BpbzEgPSAmZ3BpbzI7CiAJCWdwaW8yID0gJmdwaW8zOwpAQCAtMjk1LDkgKzI5Niw5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MzUtdXNiIiwgImZzbCxpbXgyNy11c2IiOwogCQkJCXJlZyA9IDwweDUzZmY0MDAwIDB4MDIwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwzNz47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDk+LCA8JmNsa3MgNzM+LCA8JmNsa3MgMjg+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJhaGIiLCAicGVyIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgNzM+OwogCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjIDA+OworCQkJCWZzbCx1c2JwaHkgPSA8JnVzYnBoeTA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0zMDUsOSArMzA2LDkgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgzNS11c2IiLCAiZnNsLGlteDI3LXVzYiI7CiAJCQkJcmVnID0gPDB4NTNmZjQ0MDAgMHgwMjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDM1PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgOT4sIDwmY2xrcyA3Mz4sIDwmY2xrcyAyOD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOworCQkJCWNsb2NrcyA9IDwmY2xrcyA3Mz47CiAJCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MgMT47CisJCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MT47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTM1Niw0ICszNTcsMjAgQEAKIAkJCX07CiAJCX07CiAJfTsKKworCXVzYnBoeSB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQl1c2JwaHkwOiB1c2ItcGh5QDAgeworCQkJcmVnID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKKwkJfTsKKworCQl1c2JwaHkxOiB1c2ItcGh5QDEgeworCQkJcmVnID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MC5kdHNpCmluZGV4IDljODlkMWMuLjZhMjAxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTAuZHRzaQpAQCAtMTcsNiArMTcsNyBAQAogCiAvIHsKIAlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmZlYzsKIAkJZ3BpbzAgPSAmZ3BpbzE7CiAJCWdwaW8xID0gJmdwaW8yOwogCQlncGlvMiA9ICZncGlvMzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWJhYmJhZ2UuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtYmFiYmFnZS5kdHMKaW5kZXggOWU5ZGViMi4uNmJjMzI0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtYmFiYmFnZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtYmFiYmFnZS5kdHMKQEAgLTE3LDEwICsxNywyOCBAQAogCW1vZGVsID0gIkZyZWVzY2FsZSBpLk1YNTEgQmFiYmFnZSBCb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJmc2wsaW14NTEtYmFiYmFnZSIsICJmc2wsaW14NTEiOwogCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDE7CisJfTsKKwogCW1lbW9yeSB7CiAJCXJlZyA9IDwweDkwMDAwMDAwIDB4MjAwMDAwMDA+OwogCX07CiAKKwljbG9ja3MgeworCQlja2loMSB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjI1NzkyMDA+OworCQl9OworCisJCWNsa18yNk06IGNvZGVjX2Nsb2NrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJcmVnPTwwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNjAwMDAwMD47CisJCQlncGlvcyA9IDwmZ3BpbzQgMjYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCiAJZGlzcGxheTA6IGRpc3BsYXlAZGkwIHsKIAkJY29tcGF0aWJsZSA9ICJmc2wsaW14LXBhcmFsbGVsLWRpc3BsYXkiOwogCQlpbnRlcmZhY2UtcGl4LWZtdCA9ICJyZ2IyNCI7CkBAIC04MiwxMSArMTAwLDEzIEBACiAKIAlncGlvLWtleXMgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncGlvX2tleXM+OwogCiAJCXBvd2VyIHsKIAkJCWxhYmVsID0gIlBvd2VyIEJ1dHRvbiI7CiAJCQlncGlvcyA9IDwmZ3BpbzIgMjEgR1BJT19BQ1RJVkVfSElHSD47Ci0JCQlsaW51eCxjb2RlID0gPDExNj47IC8qIEtFWV9QT1dFUiAqLworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCX07CkBAIC0xMDIsNiArMTIyLDM2IEBACiAJCX07CiAJfTsKIAorCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVnX3VzYmgxX3ZidXM6IHJlZ3VsYXRvckAwIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiaDFyZWc+OworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiaDFfdmJ1cyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbzIgNSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKKworCQlyZWdfdXNib3RnX3ZidXM6IHJlZ3VsYXRvckAxIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNib3RncmVnPjsKKwkJCXJlZyA9IDwxPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInVzYm90Z192YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvMSA3IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQl9OworCX07CisKIAlzb3VuZCB7CiAJCWNvbXBhdGlibGUgPSAiZnNsLGlteDUxLWJhYmJhZ2Utc2d0bDUwMDAiLAogCQkJICAgICAiZnNsLGlteC1hdWRpby1zZ3RsNTAwMCI7CkBAIC0xMTYsNDEgKzE2NiwyMyBAQAogCQltdXgtZXh0LXBvcnQgPSA8Mz47CiAJfTsKIAotCWNsb2NrcyB7Ci0JCWNraWgxIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMjU3OTIwMD47Ci0JCX07CisJdXNicGh5IHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCi0JCWNsa18yNk06IGNvZGVjX2Nsb2NrIHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJcmVnPTwwPjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNjAwMDAwMD47Ci0JCQlncGlvcyA9IDwmZ3BpbzQgMjYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJdXNiaDFwaHk6IHVzYmgxcGh5QDAgeworCQkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19EVU1NWT47CisJCQljbG9jay1uYW1lcyA9ICJtYWluX2NsayI7CiAJCX07CiAJfTsKIH07CiAKLSZlc2RoYzEgeworJmF1ZG11eCB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKLQlmc2wsY2QtY29udHJvbGxlcjsKLQlmc2wsd3AtY29udHJvbGxlcjsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mZXNkaGMyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzI+OwotCWNkLWdwaW9zID0gPCZncGlvMSA2IEdQSU9fQUNUSVZFX0hJR0g+OwotCXdwLWdwaW9zID0gPCZncGlvMSA1IEdQSU9fQUNUSVZFX0hJR0g+OwotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZ1YXJ0MyB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDM+OwotCWZzbCx1YXJ0LWhhcy1ydHNjdHM7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2F1ZG11eD47CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIApAQCAtMTYzLDkgKzE5NSw5IEBACiAJc3RhdHVzID0gIm9rYXkiOwogCiAJcG1pYzogbWMxMzg5MkAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gImZzbCxtYzEzODkyIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX3BtaWM+OwogCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw2MDAwMDAwPjsKIAkJc3BpLWNzLWhpZ2g7CiAJCXJlZyA9IDwwPjsKQEAgLTI4MCw2ICszMTIsNTMgQEAKIAl9OwogfTsKIAorJmVzZGhjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMxPjsKKwlmc2wsY2QtY29udHJvbGxlcjsKKwlmc2wsd3AtY29udHJvbGxlcjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXNkaGMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzI+OworCWNkLWdwaW9zID0gPCZncGlvMSA2IEdQSU9fQUNUSVZFX0hJR0g+OworCXdwLWdwaW9zID0gPCZncGlvMSA1IEdQSU9fQUNUSVZFX0hJR0g+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZmZWMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYz47CisJcGh5LW1vZGUgPSAibWlpIjsKKwlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW8yIDE0IEdQSU9fQUNUSVZFX0xPVz47CisJcGh5LXJlc2V0LWR1cmF0aW9uID0gPDE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMj47CisJc3RhdHVzID0gIm9rYXkiOworCisJc2d0bDUwMDA6IGNvZGVjQDBhIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2d0bDUwMDAiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY2xrY29kZWM+OworCQlyZWcgPSA8MHgwYT47CisJCWNsb2NrcyA9IDwmY2xrXzI2TT47CisJCVZEREEtc3VwcGx5ID0gPCZ2ZGlnX3JlZz47CisJCVZERElPLXN1cHBseSA9IDwmdnZpZGVvX3JlZz47CisJfTsKK307CisKICZpcHVfZGkwX2Rpc3AwIHsKIAlyZW1vdGUtZW5kcG9pbnQgPSA8JmRpc3BsYXkwX2luPjsKIH07CkBAIC0yODgsMjkgKzM2Nyw3NCBAQAogCXJlbW90ZS1lbmRwb2ludCA9IDwmZGlzcGxheTFfaW4+OwogfTsKIAorJmtwcCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfa3BwPjsKKwlsaW51eCxrZXltYXAgPSA8CisJCU1BVFJJWF9LRVkoMCwgMCwgS0VZX1VQKQorCQlNQVRSSVhfS0VZKDAsIDEsIEtFWV9ET1dOKQorCQlNQVRSSVhfS0VZKDAsIDIsIEtFWV9WT0xVTUVET1dOKQorCQlNQVRSSVhfS0VZKDAsIDMsIEtFWV9IT01FKQorCQlNQVRSSVhfS0VZKDEsIDAsIEtFWV9SSUdIVCkKKwkJTUFUUklYX0tFWSgxLCAxLCBLRVlfTEVGVCkKKwkJTUFUUklYX0tFWSgxLCAyLCBLRVlfRU5URVIpCisJCU1BVFJJWF9LRVkoMSwgMywgS0VZX1ZPTFVNRVVQKQorCQlNQVRSSVhfS0VZKDIsIDAsIEtFWV9GNikKKwkJTUFUUklYX0tFWSgyLCAxLCBLRVlfRjgpCisJCU1BVFJJWF9LRVkoMiwgMiwgS0VZX0Y5KQorCQlNQVRSSVhfS0VZKDIsIDMsIEtFWV9GMTApCisJCU1BVFJJWF9LRVkoMywgMCwgS0VZX0YxKQorCQlNQVRSSVhfS0VZKDMsIDEsIEtFWV9GMikKKwkJTUFUUklYX0tFWSgzLCAyLCBLRVlfRjMpCisJCU1BVFJJWF9LRVkoMywgMywgS0VZX1BPV0VSKQorCT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnNzaTIgewogCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAotJmlvbXV4YyB7CismdWFydDEgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2hvZz47CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQxPjsKKwlmc2wsdWFydC1oYXMtcnRzY3RzOworCXN0YXR1cyA9ICJva2F5IjsKK307CiAKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDM+OworCWZzbCx1YXJ0LWhhcy1ydHNjdHM7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYmgxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JoMT47CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2JoMV92YnVzPjsKKwlmc2wsdXNicGh5ID0gPCZ1c2JoMXBoeT47CisJcGh5X3R5cGUgPSAidWxwaSI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYm90ZyB7CisJZHJfbW9kZSA9ICJvdGciOworCWRpc2FibGUtb3Zlci1jdXJyZW50OworCXBoeV90eXBlID0gInV0bWlfd2lkZSI7CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2JvdGdfdmJ1cz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlvbXV4YyB7CiAJaW14NTEtYmFiYmFnZSB7Ci0JCXBpbmN0cmxfaG9nOiBob2dncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJTVg1MV9QQURfR1BJTzFfMF9fU0QxX0NEICAgICAweDIwZDUKLQkJCQlNWDUxX1BBRF9HUElPMV8xX19TRDFfV1AgICAgIDB4MjBkNQotCQkJCU1YNTFfUEFEX0dQSU8xXzVfX0dQSU8xXzUgICAgMHgxMDAKLQkJCQlNWDUxX1BBRF9HUElPMV82X19HUElPMV82ICAgIDB4MTAwCi0JCQkJTVg1MV9QQURfRUlNX0EyN19fR1BJTzJfMjEgICAweDUKLQkJCQlNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU80XzI0IDB4ODUKLQkJCQlNWDUxX1BBRF9DU1BJMV9TUzFfX0dQSU80XzI1IDB4ODUKLQkJCQlNWDUxX1BBRF9DU1BJMV9SRFlfX0dQSU80XzI2IDB4ODAwMDAwMDAKLQkJCT47Ci0JCX07Ci0KIAkJcGluY3RybF9hdWRtdXg6IGF1ZG11eGdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDUxX1BBRF9BVUQzX0JCX1RYRF9fQVVEM19UWEQJCTB4ODAwMDAwMDAKQEAgLTMyMCwxMSArNDQ0LDE5IEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfY2xrY29kZWM6IGNsa2NvZGVjZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX0NTUEkxX1JEWV9fR1BJTzRfMjYJCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKIAkJcGluY3RybF9lY3NwaTE6IGVjc3BpMWdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDUxX1BBRF9DU1BJMV9NSVNPX19FQ1NQSTFfTUlTTwkweDE4NQogCQkJCU1YNTFfUEFEX0NTUEkxX01PU0lfX0VDU1BJMV9NT1NJCTB4MTg1CiAJCQkJTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEsJMHgxODUKKwkJCQlNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU80XzI0CQkweDg1IC8qIENTMCAqLworCQkJCU1YNTFfUEFEX0NTUEkxX1NTMV9fR1BJTzRfMjUJCTB4ODUgLyogQ1MxICovCiAJCQk+OwogCQl9OwogCkBAIC0zMzYsNiArNDY4LDggQEAKIAkJCQlNWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQkJMHgyMGQ1CiAJCQkJTVg1MV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIJCTB4MjBkNQogCQkJCU1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzCQkweDIwZDUKKwkJCQlNWDUxX1BBRF9HUElPMV8wX19TRDFfQ0QJCTB4MjBkNQorCQkJCU1YNTFfUEFEX0dQSU8xXzFfX1NEMV9XUAkJMHgyMGQ1CiAJCQk+OwogCQl9OwogCkBAIC0zNDcsMjkgKzQ4MSwzOCBAQAogCQkJCU1YNTFfUEFEX1NEMl9EQVRBMV9fU0QyX0RBVEExCQkweDIwZDUKIAkJCQlNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMgkJMHgyMGQ1CiAJCQkJTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMJCTB4MjBkNQorCQkJCU1YNTFfUEFEX0dQSU8xXzVfX0dQSU8xXzUJCTB4MTAwIC8qIFdQICovCisJCQkJTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNgkJMHgxMDAgLyogQ0QgKi8KIAkJCT47CiAJCX07CiAKIAkJcGluY3RybF9mZWM6IGZlY2dycCB7CiAJCQlmc2wscGlucyA9IDwKLQkJCQlNWDUxX1BBRF9FSU1fRUIyX19GRUNfTURJTwkJMHg4MDAwMDAwMAotCQkJCU1YNTFfUEFEX0VJTV9FQjNfX0ZFQ19SREFUQTEJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9FSU1fQ1MyX19GRUNfUkRBVEEyCQkweDgwMDAwMDAwCi0JCQkJTVg1MV9QQURfRUlNX0NTM19fRkVDX1JEQVRBMwkJMHg4MDAwMDAwMAotCQkJCU1YNTFfUEFEX0VJTV9DUzRfX0ZFQ19SWF9FUgkJMHg4MDAwMDAwMAotCQkJCU1YNTFfUEFEX0VJTV9DUzVfX0ZFQ19DUlMJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9SQjJfX0ZFQ19DT0wJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9SQjNfX0ZFQ19SWF9DTEsJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9EOV9fRkVDX1JEQVRBMAkJMHg4MDAwMDAwMAotCQkJCU1YNTFfUEFEX05BTkRGX0Q4X19GRUNfVERBVEEwCQkweDgwMDAwMDAwCi0JCQkJTVg1MV9QQURfTkFOREZfQ1MyX19GRUNfVFhfRVIJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9DUzNfX0ZFQ19NREMJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9DUzRfX0ZFQ19UREFUQTEJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUQTIJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9DUzZfX0ZFQ19UREFUQTMJCTB4ODAwMDAwMDAKLQkJCQlNWDUxX1BBRF9OQU5ERl9DUzdfX0ZFQ19UWF9FTgkJMHg4MDAwMDAwMAotCQkJCU1YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0ZFQ19UWF9DTEsJMHg4MDAwMDAwMAotCQkJCU1YNTFfUEFEX0VJTV9BMjBfX0dQSU8yXzE0IDB4ODUgLyogUmVzZXQgKi8KKwkJCQlNWDUxX1BBRF9FSU1fRUIyX19GRUNfTURJTwkJMHgwMDAwMDFmNQorCQkJCU1YNTFfUEFEX0VJTV9FQjNfX0ZFQ19SREFUQTEJCTB4MDAwMDAwODUKKwkJCQlNWDUxX1BBRF9FSU1fQ1MyX19GRUNfUkRBVEEyCQkweDAwMDAwMDg1CisJCQkJTVg1MV9QQURfRUlNX0NTM19fRkVDX1JEQVRBMwkJMHgwMDAwMDA4NQorCQkJCU1YNTFfUEFEX0VJTV9DUzRfX0ZFQ19SWF9FUgkJMHgwMDAwMDE4MAorCQkJCU1YNTFfUEFEX0VJTV9DUzVfX0ZFQ19DUlMJCTB4MDAwMDAxODAKKwkJCQlNWDUxX1BBRF9OQU5ERl9SQjJfX0ZFQ19DT0wJCTB4MDAwMDAxODAKKwkJCQlNWDUxX1BBRF9OQU5ERl9SQjNfX0ZFQ19SWF9DTEsJCTB4MDAwMDAxODAKKwkJCQlNWDUxX1BBRF9OQU5ERl9EOV9fRkVDX1JEQVRBMAkJMHgwMDAwMjE4MAorCQkJCU1YNTFfUEFEX05BTkRGX0Q4X19GRUNfVERBVEEwCQkweDAwMDAyMDA0CisJCQkJTVg1MV9QQURfTkFOREZfQ1MyX19GRUNfVFhfRVIJCTB4MDAwMDIwMDQKKwkJCQlNWDUxX1BBRF9OQU5ERl9DUzNfX0ZFQ19NREMJCTB4MDAwMDIwMDQKKwkJCQlNWDUxX1BBRF9OQU5ERl9DUzRfX0ZFQ19UREFUQTEJCTB4MDAwMDIwMDQKKwkJCQlNWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUQTIJCTB4MDAwMDIwMDQKKwkJCQlNWDUxX1BBRF9OQU5ERl9DUzZfX0ZFQ19UREFUQTMJCTB4MDAwMDIwMDQKKwkJCQlNWDUxX1BBRF9OQU5ERl9DUzdfX0ZFQ19UWF9FTgkJMHgwMDAwMjAwNAorCQkJCU1YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0ZFQ19UWF9DTEsJMHgwMDAwMjE4MAorCQkJCU1YNTFfUEFEX05BTkRGX0QxMV9fRkVDX1JYX0RWCQkweDAwMDAyMGE0CisJCQkJTVg1MV9QQURfRUlNX0EyMF9fR1BJTzJfMTQJCTB4MDAwMDAwODUgLyogUGh5IFJlc2V0ICovCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZ3Bpb19rZXlzOiBncGlva2V5c2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9FSU1fQTI3X19HUElPMl8yMQkJMHg1CiAJCQk+OwogCQl9OwogCkBAIC0zNzksNiArNTIyLDEzIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfaTJjMTogaTJjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9FSU1fRDE5X19JMkMxX1NDTAkJMHg0MDAwMDFlZAorCQkJCU1YNTFfUEFEX0VJTV9EMTZfX0kyQzFfU0RBCQkweDQwMDAwMWVkCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDUxX1BBRF9LRVlfQ09MNF9fSTJDMl9TQ0wJCTB4NDAwMDAxZWQKQEAgLTQ1NSw2ICs2MDUsMTIgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9wbWljOiBwbWljZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX0dQSU8xXzhfX0dQSU8xXzgJCTB4ZTUgLyogSVJRICovCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNTFfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhECQkweDFjNQpAQCAtNDc5LDcxICs2MzUsMzMgQEAKIAkJCQlNWDUxX1BBRF9FSU1fRDI0X19VQVJUM19DVFMJCTB4MWM1CiAJCQk+OwogCQl9OworCisJCXBpbmN0cmxfdXNiaDE6IHVzYmgxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfVVNCSDFfRElSX19VU0JIMV9ESVIJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9VU0JIMV9OWFRfX1VTQkgxX05YVAkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMAkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfVVNCSDFfREFUQTFfX1VTQkgxX0RBVEExCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9VU0JIMV9EQVRBMl9fVVNCSDFfREFUQTIJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMwkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfVVNCSDFfREFUQTRfX1VTQkgxX0RBVEE0CTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9VU0JIMV9EQVRBNV9fVVNCSDFfREFUQTUJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNgkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3CTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91c2JoMXJlZzogdXNiaDFyZWdncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfRUlNX0QyMV9fR1BJTzJfNQkJMHg4NQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYm90Z3JlZzogdXNib3RncmVnZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX0dQSU8xXzdfX0dQSU8xXzcJCTB4ODUKKwkJCT47CisJCX07CiAJfTsKIH07Ci0KLSZ1YXJ0MSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDE+OwotCWZzbCx1YXJ0LWhhcy1ydHNjdHM7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVhcnQyIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mj47Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJmkyYzIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OwotCXN0YXR1cyA9ICJva2F5IjsKLQotCXNndGw1MDAwOiBjb2RlY0AwYSB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHNndGw1MDAwIjsKLQkJcmVnID0gPDB4MGE+OwotCQljbG9ja3MgPSA8JmNsa18yNk0+OwotCQlWRERBLXN1cHBseSA9IDwmdmRpZ19yZWc+OwotCQlWRERJTy1zdXBwbHkgPSA8JnZ2aWRlb19yZWc+OwotCX07Ci19OwotCi0mYXVkbXV4IHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9hdWRtdXg+OwotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZmZWMgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYz47Ci0JcGh5LW1vZGUgPSAibWlpIjsKLQlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW8yIDE0IEdQSU9fQUNUSVZFX0xPVz47Ci0JcGh5LXJlc2V0LWR1cmF0aW9uID0gPDE+OwotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZrcHAgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2twcD47Ci0JbGludXgsa2V5bWFwID0gPAotCQlNQVRSSVhfS0VZKDAsIDAsIEtFWV9VUCkKLQkJTUFUUklYX0tFWSgwLCAxLCBLRVlfRE9XTikKLQkJTUFUUklYX0tFWSgwLCAyLCBLRVlfVk9MVU1FRE9XTikKLQkJTUFUUklYX0tFWSgwLCAzLCBLRVlfSE9NRSkKLQkJTUFUUklYX0tFWSgxLCAwLCBLRVlfUklHSFQpCi0JCU1BVFJJWF9LRVkoMSwgMSwgS0VZX0xFRlQpCi0JCU1BVFJJWF9LRVkoMSwgMiwgS0VZX0VOVEVSKQotCQlNQVRSSVhfS0VZKDEsIDMsIEtFWV9WT0xVTUVVUCkKLQkJTUFUUklYX0tFWSgyLCAwLCBLRVlfRjYpCi0JCU1BVFJJWF9LRVkoMiwgMSwgS0VZX0Y4KQotCQlNQVRSSVhfS0VZKDIsIDIsIEtFWV9GOSkKLQkJTUFUUklYX0tFWSgyLCAzLCBLRVlfRjEwKQotCQlNQVRSSVhfS0VZKDMsIDAsIEtFWV9GMSkKLQkJTUFUUklYX0tFWSgzLCAxLCBLRVlfRjIpCi0JCU1BVFJJWF9LRVkoMywgMiwgS0VZX0YzKQotCQlNQVRSSVhfS0VZKDMsIDMsIEtFWV9QT1dFUikKLQkJPjsKLQlzdGF0dXMgPSAib2theSI7Ci19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtZGlnaS1jb25uZWN0Y29yZS1qc2suZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtZGlnaS1jb25uZWN0Y29yZS1qc2suZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjUxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1kaWdpLWNvbm5lY3Rjb3JlLWpzay5kdHMKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWxleGFuZGVyIFNoaXlhbiA8c2hjX3dvcmtAbWFpbC5ydT4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlICJpbXg1MS1kaWdpLWNvbm5lY3Rjb3JlLXNvbS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJEaWdpIENvbm5lY3RDb3JlIENDKFcpLU1YNTEgSlNLIjsKKwljb21wYXRpYmxlID0gImRpZ2ksY29ubmVjdGNvcmUtY2N4bXg1MS1qc2siLAorCQkgICAgICJkaWdpLGNvbm5lY3Rjb3JlLWNjeG14NTEtc29tIiwgImZzbCxpbXg1MSI7CisKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKKwl9OworfTsKKworJm93aXJlIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9vd2lyZT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYm90ZyB7CisJZHJfbW9kZSA9ICJvdGciOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JoMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiaDE+OworCWRyX21vZGUgPSAiaG9zdCI7CisJcGh5X3R5cGUgPSAidWxwaSI7CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlvbXV4YyB7CisJaW14NTEtZGlnaS1jb25uZWN0Y29yZS1qc2sgeworCQlwaW5jdHJsX293aXJlOiBvd2lyZWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9PV0lSRV9MSU5FX19PV0lSRV9MSU5FCQkweDQwMDAwMDAwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhECQkweDFjNQorCQkJCU1YNTFfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhECQkweDFjNQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQyOiB1YXJ0MmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9VQVJUMl9SWERfX1VBUlQyX1JYRAkJMHgxYzUKKwkJCQlNWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAkJMHgxYzUKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MzogdWFydDNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfVUFSVDNfUlhEX19VQVJUM19SWEQJCTB4MWM1CisJCQkJTVg1MV9QQURfVUFSVDNfVFhEX19VQVJUM19UWEQJCTB4MWM1CisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNiaDE6IHVzYmgxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMAkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMQkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEyX19VU0JIMV9EQVRBMgkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMwkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE0X19VU0JIMV9EQVRBNAkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE1X19VU0JIMV9EQVRBNQkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNgkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE3X19VU0JIMV9EQVRBNwkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLCQkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RJUl9fVVNCSDFfRElSCQkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhUCQkweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQCQkweDFlNQorCQkJPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWRpZ2ktY29ubmVjdGNvcmUtc29tLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1kaWdpLWNvbm5lY3Rjb3JlLXNvbS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMTY2MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtZGlnaS1jb25uZWN0Y29yZS1zb20uZHRzaQpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbGV4YW5kZXIgU2hpeWFuIDxzaGNfd29ya0BtYWlsLnJ1PgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAiaW14NTEuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiRGlnaSBDb25uZWN0Q29yZSBDQyhXKS1NWDUxIjsKKwljb21wYXRpYmxlID0gImRpZ2ksY29ubmVjdGNvcmUtY2N4bXg1MS1zb20iLCAiZnNsLGlteDUxIjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDkwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07Cit9OworCismZWNzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lY3NwaTE+OworCWZzbCxzcGktbnVtLWNoaXBzZWxlY3RzID0gPDE+OworCWNzLWdwaW9zID0gPCZncGlvNCAyNCBHUElPX0FDVElWRV9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwbWljOiBtYzEzODkyQDAgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfbWMxMzg5Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1jMTM4OTIiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxNjAwMDAwMD47CisJCXNwaS1jcy1oaWdoOworCQlyZWcgPSA8MD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8xPjsKKwkJaW50ZXJydXB0cyA9IDw1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlmc2wsbWMxM3h4eC11c2VzLXJ0YzsKKworCQlyZWd1bGF0b3JzIHsKKwkJCXN3MV9yZWc6IHN3MSB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXN3Ml9yZWc6IHN3MiB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIyNTAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIyNTAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXN3M19yZWc6IHN3MyB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXN3YnN0X3JlZzogc3dic3QgeyB9OworCisJCQl2aW9oaV9yZWc6IHZpb2hpIHsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdnBsbF9yZWc6IHZwbGwgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGlnX3JlZzogdmRpZyB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTI1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTI1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZzZF9yZWc6IHZzZCB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzE1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzE1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZ1c2IyX3JlZzogdnVzYjIgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI2MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI2MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2dmlkZW9fcmVnOiB2dmlkZW8geworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI3NzUwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI3NzUwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2YXVkaW9fcmVnOiB2YXVkaW8geworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2FtX3JlZzogdmNhbSB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8Mjc1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8Mjc1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZnZW4xX3JlZzogdmdlbjEgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Z2VuMl9yZWc6IHZnZW4yIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmdlbjNfcmVnOiB2Z2VuMyB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZ1c2JfcmVnOiB2dXNiIHsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJZ3BvMV9yZWc6IGdwbzEgeyB9OworCisJCQlncG8yX3JlZzogZ3BvMiB7IH07CisKKwkJCWdwbzNfcmVnOiBncG8zIHsgfTsKKworCQkJZ3BvNF9yZWc6IGdwbzQgeyB9OworCisJCQlwd2d0MnNwaV9yZWc6IHB3Z3Qyc3BpIHsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmNvaW5jZWxsX3JlZzogdmNvaW5jZWxsIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmVzZGhjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZXNkaGMyPjsKKwljYXAtc2Rpby1pcnE7CisJZW5hYmxlLXNkaW8td2FrZXVwOworCWtlZXAtcG93ZXItaW4tc3VzcGVuZDsKKwltYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwluby0xLTgtdjsKKwlub24tcmVtb3ZhYmxlOworCXZtbWMtc3VwcGx5ID0gPCZncG80X3JlZz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmZlYyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjPjsKKwlwaHktbW9kZSA9ICJtaWkiOworCXBoeS1zdXBwbHkgPSA8JmdwbzNfcmVnPjsKKwkvKiBQaW5zIHNoYXJlZCB3aXRoIExDRDIsIGtlZXAgc3RhdHVzIGRpc2FibGVkICovCit9OworCismaTJjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMj47CisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJbW1hNzQ1NWxAMWQgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfbW1hNzQ1NWw+OworCQljb21wYXRpYmxlID0gImZzbCxtbWE3NDU1bCI7CisJCXJlZyA9IDwweDFkPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzE+OworCQlpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfTEVWRUxfSElHSD4sIDw2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07Cit9OworCismbmZjIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9uZmM+OworCW5hbmQtYnVzLXdpZHRoID0gPDg+OworCW5hbmQtZWNjLW1vZGUgPSAiaHciOworCW5hbmQtb24tZmxhc2gtYmJ0OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JvdGcgeworCXBoeV90eXBlID0gInV0bWlfd2lkZSI7CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CisJLyogRGV2aWNlIHJvbGUgaXMgbm90IGtub3duLCBrZWVwIHN0YXR1cyBkaXNhYmxlZCAqLworfTsKKworJndlaW0geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3dlaW0+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWxhbjkyMjE6IGxhbjkyMjFANSwwIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX2xhbjkyMjE+OworCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTIyMSIsICJzbXNjLGxhbjkxMTUiOworCQlyZWcgPSA8NSAweDAwMDAwMDAwIDB4MTAwMD47CisJCWZzbCx3ZWltLWNzLXRpbWluZyA9IDwKKwkJCTB4MDA0MjAwODEgMHgwMDAwMDAwMAorCQkJMHgzMjI2MDAwMCAweDAwMDAwMDAwCisJCQkweDcyMDgwZjAwIDB4MDAwMDAwMDAKKwkJPjsKKwkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX0RVTU1ZPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzE+OworCQlpbnRlcnJ1cHRzID0gPDkgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwkJcGh5LW1vZGUgPSAibWlpIjsKKwkJcmVnLWlvLXdpZHRoID0gPDI+OworCQlzbXNjLGlycS1wdXNoLXB1bGw7CisJCXZkZDMzYS1zdXBwbHkgPSA8JmdwbzJfcmVnPjsKKwkJdmRkdmFyaW8tc3VwcGx5ID0gPCZncG8yX3JlZz47CisJfTsKK307CisKKyZpb211eGMgeworCWlteDUxLWRpZ2ktY29ubmVjdGNvcmUtc29tIHsKKwkJcGluY3RybF9lY3NwaTE6IGVjc3BpMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9DU1BJMV9NSVNPX19FQ1NQSTFfTUlTTwkweDE4NQorCQkJCU1YNTFfUEFEX0NTUEkxX01PU0lfX0VDU1BJMV9NT1NJCTB4MTg1CisJCQkJTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEsJMHgxODUKKwkJCQlNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU80XzI0CQkweDg1IC8qIENTMCAqLworCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2VzZGhjMjogZXNkaGMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQJCTB4NDAwMDIwZDUKKwkJCQlNWDUxX1BBRF9TRDJfQ0xLX19TRDJfQ0xLCQkweDIwZDUKKwkJCQlNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMAkJMHgyMGQ1CisJCQkJTVg1MV9QQURfU0QyX0RBVEExX19TRDJfREFUQTEJCTB4MjBkNQorCQkJCU1YNTFfUEFEX1NEMl9EQVRBMl9fU0QyX0RBVEEyCQkweDIwZDUKKwkJCQlNWDUxX1BBRF9TRDJfREFUQTNfX1NEMl9EQVRBMwkJMHgyMGQ1CisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZmVjOiBmZWNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfRElfR1AzX19GRUNfVFhfRVIJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9ESTJfUElONF9fRkVDX0NSUwkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0RJMl9QSU4yX19GRUNfTURDCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfREkyX1BJTjNfX0ZFQ19NRElPCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfREkyX0RJU1BfQ0xLX19GRUNfUkRBVEExCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9ESV9HUDRfX0ZFQ19SREFUQTIJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9ESVNQMl9EQVQwX19GRUNfUkRBVEEzCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRElTUDJfREFUMV9fRkVDX1JYX0VSCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRElTUDJfREFUNl9fRkVDX1REQVRBMQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0RJU1AyX0RBVDdfX0ZFQ19UREFUQTIJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9ESVNQMl9EQVQ4X19GRUNfVERBVEEzCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRElTUDJfREFUOV9fRkVDX1RYX0VOCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRElTUDJfREFUMTBfX0ZFQ19DT0wJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9ESVNQMl9EQVQxMV9fRkVDX1JYX0NMSwkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRElTUDJfREFUMTJfX0ZFQ19SWF9EVgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0RJU1AyX0RBVDEzX19GRUNfVFhfQ0xLCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9ESVNQMl9EQVQxNF9fRkVDX1JEQVRBMAkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRElTUDJfREFUMTVfX0ZFQ19UREFUQTAJMHg4MDAwMDAwMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2kyYzI6IGkyYzJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfR1BJTzFfMl9fSTJDMl9TQ0wJCTB4NDAwMDAxZWQKKwkJCQlNWDUxX1BBRF9HUElPMV8zX19JMkMyX1NEQQkJMHg0MDAwMDFlZAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX25mYzogbmZjZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX05BTkRGX0QwX19OQU5ERl9EMAkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0QxX19OQU5ERl9EMQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0QyX19OQU5ERl9EMgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0QzX19OQU5ERl9EMwkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0Q0X19OQU5ERl9ENAkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0Q1X19OQU5ERl9ENQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0Q2X19OQU5ERl9ENgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0Q3X19OQU5ERl9ENwkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX0FMRV9fTkFOREZfQUxFCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfTkFOREZfQ0xFX19OQU5ERl9DTEUJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9OQU5ERl9SRV9CX19OQU5ERl9SRV9CCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfTkFOREZfV0VfQl9fTkFOREZfV0VfQgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX1dQX0JfX05BTkRGX1dQX0IJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9OQU5ERl9DUzBfX05BTkRGX0NTMAkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX05BTkRGX1JCMF9fTkFOREZfUkIwCQkweDgwMDAwMDAwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfbGFuOTIyMTogbGFuOTIyMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9HUElPMV85X19HUElPMV85CQkweGU1IC8qIElSUSAqLworCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX21jMTM4OTI6IG1jMTM4OTJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfR1BJTzFfNV9fR1BJTzFfNQkJMHhlNSAvKiBJUlEgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF9tbWE3NDU1bDogbW1hNzQ1NWxncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfR1BJTzFfN19fR1BJTzFfNwkJMHhlNSAvKiBJUlExICovCisJCQkJTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNgkJMHhlNSAvKiBJUlEyICovCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfd2VpbTogd2VpbWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDUxX1BBRF9FSU1fREEwX19FSU1fREEwCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMV9fRUlNX0RBMQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EQTJfX0VJTV9EQTIJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fREEzX19FSU1fREEzCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBNF9fRUlNX0RBNAkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EQTVfX0VJTV9EQTUJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fREE2X19FSU1fREE2CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBN19fRUlNX0RBNwkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EQThfX0VJTV9EQTgJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fREE5X19FSU1fREE5CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMTBfX0VJTV9EQTEwCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMTJfX0VJTV9EQTEyCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMTNfX0VJTV9EQTEzCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMTRfX0VJTV9EQTE0CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0RBMTVfX0VJTV9EQTE1CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0ExNl9fRUlNX0ExNgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9BMTdfX0VJTV9BMTcJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fQTE4X19FSU1fQTE4CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0ExOV9fRUlNX0ExOQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9BMjBfX0VJTV9BMjAJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fQTIxX19FSU1fQTIxCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0EyMl9fRUlNX0EyMgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9BMjNfX0VJTV9BMjMJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fQTI0X19FSU1fQTI0CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0EyNV9fRUlNX0EyNQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9BMjZfX0VJTV9BMjYJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fQTI3X19FSU1fQTI3CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0QxNl9fRUlNX0QxNgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EMTdfX0VJTV9EMTcJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fRDE4X19FSU1fRDE4CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0QxOV9fRUlNX0QxOQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EMjBfX0VJTV9EMjAJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fRDIxX19FSU1fRDIxCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0QyMl9fRUlNX0QyMgkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EMjNfX0VJTV9EMjMJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fRDI0X19FSU1fRDI0CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0QyNV9fRUlNX0QyNQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EMjZfX0VJTV9EMjYJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fRDI3X19FSU1fRDI3CQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0QyOF9fRUlNX0QyOAkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EMjlfX0VJTV9EMjkJCTB4ODAwMDAwMDAKKwkJCQlNWDUxX1BBRF9FSU1fRDMwX19FSU1fRDMwCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0QzMV9fRUlNX0QzMQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9PRV9fRUlNX09FCQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9EVEFDS19fRUlNX0RUQUNLCQkweDgwMDAwMDAwCisJCQkJTVg1MV9QQURfRUlNX0xCQV9fRUlNX0xCQQkJMHg4MDAwMDAwMAorCQkJCU1YNTFfUEFEX0VJTV9DUzVfX0VJTV9DUzUJCTB4ODAwMDAwMDAgLyogQ1M1ICovCisJCQk+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtZXVrcmVhLWNwdWlteDUxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1ldWtyZWEtY3B1aW14NTEuZHRzaQppbmRleCA5YjNhY2Y2Li42MzE2NDI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1ldWtyZWEtY3B1aW14NTEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1ldWtyZWEtY3B1aW14NTEuZHRzaQpAQCAtNDIsNiArNDIsMTcgQEAKIAkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CiAJCXJlZyA9IDwweDUxPjsKIAl9OworCisJdHNjMjAwNzogdHNjMjAwN0A0OSB7CisJCWNvbXBhdGlibGUgPSAidGksdHNjMjAwNyI7CisJCWdwaW9zID0gPCZncGlvNCAwIDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvND47CisJCWludGVycnVwdHMgPSA8MHgwIDB4OD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF90c2MyMDA3XzE+OworCQlyZWcgPSA8MHg0OT47CisJCXRpLHgtcGxhdGUtb2htcyA9IDwxODA+OworCX07CiB9OwogCiAmaW9tdXhjIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWV1a3JlYS1tYmlteHNkNTEtYmFzZWJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWV1a3JlYS1tYmlteHNkNTEtYmFzZWJvYXJkLmR0cwppbmRleCA1Y2VjNGYzLi43NWU2NmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1ldWtyZWEtbWJpbXhzZDUxLWJhc2Vib2FyZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtZXVrcmVhLW1iaW14c2Q1MS1iYXNlYm9hcmQuZHRzCkBAIC0yNCw2ICsyNCwxNCBAQAogCW1vZGVsID0gIkV1a3JlYSBDUFVJTVg1MSI7CiAJY29tcGF0aWJsZSA9ICJldWtyZWEsbWJpbXhzZDUxIiwiZXVrcmVhLGNwdWlteDUxIiwgImZzbCxpbXg1MSI7CiAKKwljbG9ja3MgeworCQljbGsyNE06IGNhbl9jbG9jayB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47CisJCX07CisJfTsKKwogCWdwaW9fa2V5cyB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTUwLDYgKzU4LDIzIEBACiAJCX07CiAJfTsKIAorCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVnX2NhbjogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0FOX1JTVCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbzQgMTUgR1BJT19BQ1RJVkVfSElHSD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDIwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKKwl9OworCiAJc291bmQgewogCQljb21wYXRpYmxlID0gImV1a3JlYSxhc29jLXRsdjMyMCI7CiAJCWV1a3JlYSxtb2RlbCA9ICJpbXg1MS1ldWtyZWEtdGx2MzIwYWljMjMiOwpAQCAtNTcsNiArODIsMjAgQEAKIAkJZnNsLG11eC1pbnQtcG9ydCA9IDwyPjsKIAkJZnNsLG11eC1leHQtcG9ydCA9IDwzPjsKIAl9OworCisJdXNicGh5IHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCisJCXVzYmgxcGh5OiB1c2JoMXBoeUAwIHsKKwkJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCQlyZWcgPSA8MD47CisJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfVVNCX1BIWV9HQVRFPjsKKwkJCWNsb2NrLW5hbWVzID0gIm1haW5fY2xrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIwMDAwMD47CisJCX07CisJfTsKIH07CiAKICZhdWRtdXggewpAQCAtNzIsNiArMTExLDI2IEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJmVjc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZWNzcGkxPjsKKwlmc2wsc3BpLW51bS1jaGlwc2VsZWN0cyA9IDwxPjsKKwljcy1ncGlvcyA9IDwmZ3BpbzQgMjQgR1BJT19BQ1RJVkVfTE9XPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwljYW4wOiBjYW5AMCB7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9jYW4+OworCQljb21wYXRpYmxlID0gIm1pY3JvY2hpcCxtY3AyNTE1IjsKKwkJcmVnID0gPDA+OworCQljbG9ja3MgPSA8JmNsazI0TT47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzE+OworCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsKKwkJdmRkLXN1cHBseSA9IDwmcmVnX2Nhbj47CisJfTsKK307CisKICZpMmMxIHsKIAl0bHYzMjBhaWMyMzogY29kZWNAMWEgewogCQljb21wYXRpYmxlID0gInRpLHRsdjMyMGFpYzIzIjsKQEAgLTkwLDYgKzE0OSwyMyBAQAogCQkJPjsKIAkJfTsKIAorCisJCXBpbmN0cmxfY2FuOiBjYW5ncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfQ1NJMl9QSVhDTEtfX0dQSU80XzE1CQkweDgwMDAwMDAwCS8qIG5SZXNldCAqLworCQkJCU1YNTFfUEFEX0dQSU8xXzFfX0dQSU8xXzEJCTB4ODAwMDAwMDAJLyogSVJRICovCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZWNzcGkxOiBlY3NwaTFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfQ1NQSTFfTUlTT19fRUNTUEkxX01JU08JMHgxODUKKwkJCQlNWDUxX1BBRF9DU1BJMV9NT1NJX19FQ1NQSTFfTU9TSQkweDE4NQorCQkJCU1YNTFfUEFEX0NTUEkxX1NDTEtfX0VDU1BJMV9TQ0xLCTB4MTg1CisJCQkJTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPNF8yNAkJMHg4MDAwMDAwMCAJLyogQ1MwICovCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfZXNkaGMxOiBlc2RoYzFncnAgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRAkJMHg0MDAwMjBkNQpAQCAtMTUxLDYgKzIyNywyOSBAQAogCQkJCU1YNTFfUEFEX0NTSTFfRDlfX0dQSU8zXzEzIDB4MWY1CiAJCQk+OwogCQl9OworCisJCXBpbmN0cmxfdXNiaDE6IHVzYmgxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLICAgICAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RJUl9fVVNCSDFfRElSICAgICAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhUICAgICAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMCAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMSAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEyX19VU0JIMV9EQVRBMiAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMyAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE0X19VU0JIMV9EQVRBNCAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE1X19VU0JIMV9EQVRBNSAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNiAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX0RBVEE3X19VU0JIMV9EQVRBNyAweDFlNQorCQkJCU1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQICAgICAweDFlNQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYmgxX3ZidXM6IHVzYmgxLXZidXNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg1MV9QQURfRUlNX0NTM19fR1BJTzJfMjggMHgxZjUKKwkJCT47CisJCX07CiAJfTsKIH07CiAKQEAgLTE3MywzICsyNzIsMjQgQEAKIAlmc2wsdWFydC1oYXMtcnRzY3RzOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CisKKyZ1c2JoMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiaDE+OworCWZzbCx1c2JwaHkgPSA8JnVzYmgxcGh5PjsKKwlkcl9tb2RlID0gImhvc3QiOworCXBoeV90eXBlID0gInVscGkiOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JvdGcgeworCWRyX21vZGUgPSAib3RnIjsKKwlwaHlfdHlwZSA9ICJ1dG1pX3dpZGUiOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JwaHkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JoMV92YnVzPjsKKwlyZXNldC1ncGlvcyA9IDwmZ3BpbzIgMjggR1BJT19BQ1RJVkVfTE9XPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg1MS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaQppbmRleCAxNTBiYjRlLi5iZWJiZjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg1MS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kKQEAgLTE5LDYgKzE5LDcgQEAKIAogLyB7CiAJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZmZWM7CiAJCWdwaW8wID0gJmdwaW8xOwogCQlncGlvMSA9ICZncGlvMjsKIAkJZ3BpbzIgPSAmZ3BpbzM7CkBAIC01MzcsNiArNTM4LDggQEAKIAkJCX07CiAKIAkJCW5mYzogbmFuZEA4M2ZkYjAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NTEtbmFuZCI7CiAJCQkJcmVnID0gPDB4ODNmZGIwMDAgMHgxMDAwIDB4Y2ZmZjAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw4PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLW1iYTUzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLW1iYTUzLmR0cwppbmRleCBhMzQzMWQ3Li4zZTNmMTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg1My1tYmE1My5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMtbWJhNTMuZHRzCkBAIC0xNyw2ICsxNywxMCBAQAogCW1vZGVsID0gIlRRIE1CYTUzIHN0YXJ0ZXIga2l0IjsKIAljb21wYXRpYmxlID0gInRxLG1iYTUzIiwgInRxLHRxbWE1MyIsICJmc2wsaW14NTMiOwogCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDI7CisJfTsKKwogCWJhY2tsaWdodCB7CiAJCWNvbXBhdGlibGUgPSAicHdtLWJhY2tsaWdodCI7CiAJCXB3bXMgPSA8JnB3bTIgMCA1MDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg1My1xc2ItY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1My1xc2ItY29tbW9uLmR0c2kKaW5kZXggZWRlMDRmYS4uZmQ4YzYwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMtcXNiLWNvbW1vbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLXFzYi1jb21tb24uZHRzaQpAQCAtMTMsNiArMTMsMTAgQEAKICNpbmNsdWRlICJpbXg1My5kdHNpIgogCiAvIHsKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKKwl9OworCiAJbWVtb3J5IHsKIAkJcmVnID0gPDB4NzAwMDAwMDAgMHgyMDAwMDAwMD4sCiAJCSAgICAgIDwweGIwMDAwMDAwIDB4MjAwMDAwMDA+OwpAQCAtMjcyLDYgKzI3NiwxNCBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX3ZnYV9zeW5jOiB2Z2FzeW5jLWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQkvKiBWR0FfSFNZTkMsIFZTWU5DIHdpdGggbWF4IGRyaXZlIHN0cmVuZ3RoICovCisJCQkJTVg1M19QQURfRUlNX09FX19JUFVfREkxX1BJTjcgMHhlNgorCQkJCU1YNTNfUEFEX0VJTV9SV19fSVBVX0RJMV9QSU44IDB4ZTYKKwkJCT47CisJCX07CisKIAkJcGluY3RybF91YXJ0MTogdWFydDFncnAgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg1M19QQURfQ1NJMF9EQVQxMF9fVUFSVDFfVFhEX01VWAkweDFlNApAQCAtMjgxLDYgKzI5MywxNSBAQAogCX07CiB9OwogCismdHZlIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF92Z2Ffc3luYz47CisJZnNsLHR2ZS1tb2RlID0gInZnYSI7CisJZnNsLGhzeW5jLXBpbiA9IDw0PjsKKwlmc2wsdnN5bmMtcGluID0gPDY+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZ1YXJ0MSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLmR0c2kKaW5kZXggNmExYmY0Zi4uNjQ1NmEwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1My5kdHNpCkBAIC0xOCw2ICsxOCw3IEBACiAKIC8gewogCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZmVjOwogCQlncGlvMCA9ICZncGlvMTsKIAkJZ3BpbzEgPSAmZ3BpbzI7CiAJCWdwaW8yID0gJmdwaW8zOwpAQCAtNzI2LDggKzcyNyw4IEBACiAJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1ZQVV9HQVRFPiwKIAkJCQkgICAgICAgICA8JmNsa3MgSU1YNV9DTEtfVlBVX0dBVEU+OwogCQkJCWNsb2NrLW5hbWVzID0gInBlciIsICJhaGIiOworCQkJCXJlc2V0cyA9IDwmc3JjIDE+OwogCQkJCWlyYW0gPSA8Jm9jcmFtPjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLWh1bW1pbmdib2FyZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwtaHVtbWluZ2JvYXJkLmR0cwppbmRleCA1YmZhZTU0Li41MzczYTVmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLWh1bW1pbmdib2FyZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLWh1bW1pbmdib2FyZC5kdHMKQEAgLTExLDYgKzExLDEwIEBACiAJbW9kZWwgPSAiU29saWRSdW4gSHVtbWluZ0JvYXJkIERML1NvbG8iOwogCWNvbXBhdGlibGUgPSAic29saWRydW4saHVtbWluZ2JvYXJkIiwgImZzbCxpbXg2ZGwiOwogCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDE7CisJfTsKKwogCWlyX3JlY3Y6IGlyLXJlY2VpdmVyIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWlyLXJlY2VpdmVyIjsKIAkJZ3Bpb3MgPSA8JmdwaW8xIDIgMT47CkBAIC02Nyw2ICs3MSwxMyBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZoZG1pIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9odW1taW5nYm9hcmRfaGRtaT47CisJZGRjLWkyYy1idXMgPSA8JmkyYzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZpMmMxIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9odW1taW5nYm9hcmRfaTJjMT47CkBAIC04Miw2ICs5MywxMyBAQAogCSAqLwogfTsKIAorJmkyYzIgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2h1bW1pbmdib2FyZF9pMmMyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmaW9tdXhjIHsKIAlodW1taW5nYm9hcmQgewogCQlwaW5jdHJsX2h1bW1pbmdib2FyZF9mbGV4Y2FuMTogaHVtbWluZ2JvYXJkLWZsZXhjYW4xIHsKQEAgLTk3LDYgKzExNSwxMiBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX2h1bW1pbmdib2FyZF9oZG1pOiBodW1taW5nYm9hcmQtaGRtaSB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9ST1cyX19IRE1JX1RYX0NFQ19MSU5FIDB4MWY4YjAKKwkJCT47CisJCX07CisKIAkJcGluY3RybF9odW1taW5nYm9hcmRfaTJjMTogaHVtbWluZ2JvYXJkLWkyYzEgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2UURMX1BBRF9FSU1fRDIxX19JMkMxX1NDTCAweDQwMDFiOGIxCkBAIC0xMDQsNiArMTI4LDEzIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfaHVtbWluZ2JvYXJkX2kyYzI6IGh1bW1pbmdib2FyZC1pMmMyIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX0NPTDNfX0kyQzJfU0NMIDB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0tFWV9ST1czX19JMkMyX1NEQSAweDQwMDFiOGIxCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfaHVtbWluZ2JvYXJkX3NwZGlmOiBodW1taW5nYm9hcmQtc3BkaWYgewogCQkJZnNsLHBpbnMgPSA8TVg2UURMX1BBRF9HUElPXzE3X19TUERJRl9PVVQgMHgxMzA5MT47CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwtcGh5dGVjLXBiYWIwMS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwtcGh5dGVjLXBiYWIwMS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlOTc4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZkbC1waHl0ZWMtcGJhYjAxLmR0cwpAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgQ2hyaXN0aWFuIEhlbXAsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJICisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJpbXg2ZGwtcGh5dGVjLXBmbGEwMi5kdHNpIgorI2luY2x1ZGUgImlteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJQaHl0ZWMgcGh5RkxFWC1pLk1YNiBEdWFsTGl0ZS9Tb2xvIENhcnJpZXItQm9hcmQiOworCWNvbXBhdGlibGUgPSAicGh5dGVjLGlteDZkbC1wYmFiMDEiLCAicGh5dGVjLGlteDZkbC1wZmxhMDIiLCAiZnNsLGlteDZkbCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLXBoeXRlYy1wZmxhMDIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZkbC1waHl0ZWMtcGZsYTAyLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0YmMyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZkbC1waHl0ZWMtcGZsYTAyLmR0c2kKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIENocmlzdGlhbiBIZW1wLCBQaHl0ZWMgTWVzc3RlY2huaWsgR21iSAorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgImlteDZkbC5kdHNpIgorI2luY2x1ZGUgImlteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJQaHl0ZWMgcGh5RkxFWC1pLk1YNiBEdWFsTGl0ZS9Tb2xvIjsKKwljb21wYXRpYmxlID0gInBoeXRlYyxpbXg2ZGwtcGZsYTAyIiwgImZzbCxpbXg2ZGwiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MTAwMDAwMDAgMHgyMDAwMDAwMD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwtcmlvdGJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZkbC1yaW90Ym9hcmQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOWZhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwtcmlvdGJvYXJkLmR0cwpAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IElhaW4gUGF0b24gPGlwYXRvbjBAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgImlteDZkbC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorCisvIHsKKwltb2RlbCA9ICJSSW9UYm9hcmQgaS5NWDZTIjsKKwljb21wYXRpYmxlID0gInJpb3QsaW14NnMtcmlvdGJvYXJkIiwgImZzbCxpbXg2ZGwiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MTAwMDAwMDAgMHg0MDAwMDAwMD47CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVnXzJwNXY6IHJlZ3VsYXRvckAwIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwwPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIjJQNVYiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjUwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKKwkJfTsKKworCQlyZWdfM3AzdjogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiM1AzViI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQl9OworCisJCXJlZ191c2Jfb3RnX3ZidXM6IHJlZ3VsYXRvckAyIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInVzYl9vdGdfdmJ1cyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbzMgMjIgMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9sZWQ+OworCisJCWxlZDA6IHVzZXIxIHsKKwkJCWxhYmVsID0gInVzZXIxIjsKKwkJCWdwaW9zID0gPCZncGlvNSAyIEdQSU9fQUNUSVZFX0xPVz47CisJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQl9OworCisJCWxlZDE6IHVzZXIyIHsKKwkJCWxhYmVsID0gInVzZXIyIjsKKwkJCWdwaW9zID0gPCZncGlvMyAyOCBHUElPX0FDVElWRV9MT1c+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCX07CisKKwlzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGlteC1hdWRpby1zZ3RsNTAwMCI7CisJCW1vZGVsID0gImlteDYtcmlvdGJvYXJkLXNndGw1MDAwIjsKKwkJc3NpLWNvbnRyb2xsZXIgPSA8JnNzaTE+OworCQlhdWRpby1jb2RlYyA9IDwmY29kZWM+OworCQlhdWRpby1yb3V0aW5nID0KKwkJCSJNSUNfSU4iLCAiTWljIEphY2siLAorCQkJIk1pYyBKYWNrIiwgIk1pYyBCaWFzIiwKKwkJCSJIZWFkcGhvbmUgSmFjayIsICJIUF9PVVQiOworCQkJbXV4LWludC1wb3J0ID0gPDE+OworCQkJbXV4LWV4dC1wb3J0ID0gPDM+OworCX07Cit9OworCismYXVkbXV4IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9hdWRtdXg+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZmZWMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQ+OworCXBoeS1tb2RlID0gInJnbWlpIjsKKwlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW8zIDMxIDA+OworCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdwaW8xIDYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgICA8JmludGMgMCAxMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmhkbWkgeworCWRkYy1pMmMtYnVzID0gPCZpMmMyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMSB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJc3RhdHVzID0gIm9rYXkiOworCisJY29kZWM6IHNndGw1MDAwQDBhIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2d0bDUwMDAiOworCQlyZWcgPSA8MHgwYT47CisJCWNsb2NrcyA9IDwmY2xrcyAyMDE+OworCQlWRERBLXN1cHBseSA9IDwmcmVnXzJwNXY+OworCQlWRERJTy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl9OworCisJcG1pYzogcGYwMTAwQDA4IHsKKwkJY29tcGF0aWJsZSA9ICJmc2wscGZ1emUxMDAiOworCQlyZWcgPSA8MHgwOD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW81PjsKKwkJaW50ZXJydXB0cyA9IDwxNiA4PjsKKworCQlyZWd1bGF0b3JzIHsKKwkJCXJlZ192ZGRjb3JlOiBzdzFhYiB7CQkJCS8qIFZEREFSTV9JTiAqLworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTg3NTAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXJlZ192ZGRzb2M6IHN3MWMgewkJCQkvKiBWRERTT0NfSU4gKi8KKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4NzUwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlyZWdfZ2VuXzN2Mzogc3cyIHsJCQkJLyogVkRESElHSF9JTiAqLworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXJlZ19kZHJfMXY1YTogc3czYSB7CQkJCS8qIE5WQ0NfRFJBTSwgTlZDQ19SR01JSSAqLworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDQwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTk3NTAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXJlZ19kZHJfMXY1Yjogc3czYiB7CQkJCS8qIE5WQ0NfRFJBTSwgTlZDQ19SR01JSSAqLworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDQwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTk3NTAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXJlZ19kZHJfdnR0OiBzdzQgewkJCQkvKiBNSVBJIGNvbm4gKi8KKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw0MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE5NzUwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlyZWdfNXZfNjAwbUE6IHN3YnN0IHsJCQkJLyogbm90IHVzZWQgKi8KKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MTUwMDAwPjsKKwkJCX07CisKKwkJCXJlZ19zbnZzXzN2OiB2c252cyB7CQkJCS8qIFZERF9TTlZTX0lOICovCisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZyZWZfcmVnOiB2cmVmZGRyIHsJCQkJLyogVlJFRl9ERFIgKi8KKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJcmVnX3ZnZW4xXzF2NTogdmdlbjEgewkJCQkvKiBub3QgdXNlZCAqLworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTU1MDAwMD47CisJCQl9OworCisJCQlyZWdfdmdlbjJfMXYyX2V0aDogdmdlbjIgewkJCS8qIHBjaWUgPyAqLworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTU1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXJlZ192Z2VuM18ydjg6IHZnZW4zIHsJCQkJLyogbm90IHVzZWQgKi8KKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCX07CisJCQlyZWdfdmdlbjRfMXY4OiB2Z2VuNCB7CQkJCS8qIE5WQ0NfU0QzICovCisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXJlZ192Z2VuNV8ydjVfc2d0bDogdmdlbjUgewkJCS8qIFB3ciBMRUQgJiA1VjBfZGVsYXllZCBlbmFibGUgKi8KKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJcmVnX3ZnZW42XzN2MzogdmdlbjYgewkJCQkvKiAjViNfREVMQVlFRCBlbmFibGUsIE1JUEkgKi8KKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyYzIgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmM0IHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmM0PjsKKwljbG9ja3MgPSA8JmNsa3MgMTE2PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcHdtMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcHdtMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnB3bTIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3B3bTI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd20zIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcHdtNCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcHdtND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNzaTEgeworCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQ0IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0ND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQ1IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0NT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYmgxIHsKKwlkcl9tb2RlID0gImhvc3QiOworCWRpc2FibGUtb3Zlci1jdXJyZW50OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JvdGcgeworCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiX290Z192YnVzPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JvdGc+OworCWRpc2FibGUtb3Zlci1jdXJyZW50OworCWRyX21vZGUgPSAib3RnIjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNkaGMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2RoYzI+OworCWNkLWdwaW9zID0gPCZncGlvMSA0IDA+OworCXdwLWdwaW9zID0gPCZncGlvMSAyIDA+OworCXZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzZGhjMyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNkaGMzPjsKKwljZC1ncGlvcyA9IDwmZ3BpbzcgMCAwPjsKKwl3cC1ncGlvcyA9IDwmZ3BpbzcgMSAwPjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2RoYzQgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzZGhjND47CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlub24tcmVtb3ZhYmxlOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpb211eGMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwlpbXg2LXJpb3Rib2FyZCB7CisJCXBpbmN0cmxfYXVkbXV4OiBhdWRtdXhncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDdfX0FVRDNfUlhECQkweDgwMDAwMDAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNF9fQVVEM19UWEMJCTB4ODAwMDAwMAorCQkJCU1YNlFETF9QQURfQ1NJMF9EQVQ1X19BVUQzX1RYRAkJMHg4MDAwMDAwCisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDZfX0FVRDNfVFhGUwkJMHg4MDAwMDAwCisJCQkJTVg2UURMX1BBRF9HUElPXzBfX0NDTV9DTEtPMQkJMHgxMzBiMAkJLyogQ0FNX01DTEsgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lY3NwaTE6IGVjc3BpMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMTZfX0VDU1BJMV9TQ0xLCQkweDEwMGIxCisJCQkJTVg2UURMX1BBRF9FSU1fRDE3X19FQ1NQSTFfTUlTTwkJMHgxMDBiMQorCQkJCU1YNlFETF9QQURfRUlNX0QxOF9fRUNTUEkxX01PU0kJCTB4MTAwYjEKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDIzX19HUElPNV9JTzE3CTB4MDAwYjEJCS8qIENTMCAqLworCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2Vjc3BpMjogZWNzcGkyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTVfX0dQSU81X0lPMDkJMHgwMDBiMQkJLyogQ1MxICovCisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQxNl9fRUNTUEkyX01PU0kJMHgxMDBiMQorCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTdfX0VDU1BJMl9NSVNPCTB4MTAwYjEKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDE4X19HUElPNV9JTzEyCTB4MDAwYjEJCS8qIENTMCAqLworCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTlfX0VDU1BJMl9TQ0xLCTB4MTAwYjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lY3NwaTM6IGVjc3BpM2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDBfX0VDU1BJM19TQ0xLCTB4MTAwYjEKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDFfX0VDU1BJM19NT1NJCTB4MTAwYjEKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDJfX0VDU1BJM19NSVNPCTB4MTAwYjEKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDNfX0dQSU80X0lPMjQJMHgwMDBiMQkJLyogQ1MwICovCisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQ0X19HUElPNF9JTzI1CTB4MDAwYjEJCS8qIENTMSAqLworCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2VuZXQ6IGVuZXRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FTkVUX01ESU9fX0VORVRfTURJTwkJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfRU5FVF9NRENfX0VORVRfTURDCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9SR01JSV9UWENfX1JHTUlJX1RYQwkJMHg4MDAwMDAwMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQwX19SR01JSV9URDAJCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMV9fUkdNSUlfVEQxCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9SR01JSV9URDJfX1JHTUlJX1REMgkJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQzX19SR01JSV9URDMJCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1RYX0NUTF9fUkdNSUlfVFhfQ1RMCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0VORVRfUkVGX0NMS19fRU5FVF9UWF9DTEsJMHgwYTBiMQkJLyogQVI4MDM1IENMS18yNU0gLS0+IEVORVRfUkVGX0NMSyAoVjIyKSAqLworCQkJCU1YNlFETF9QQURfUkdNSUlfUlhDX19SR01JSV9SWEMJCTB4MWIwYjAJCS8qIEFSODAzNSBwaW4gc3RyYXBwaW5nOiBJTyB2b2x0YWdlOiBwdWxsIHVwICovCisJCQkJTVg2UURMX1BBRF9SR01JSV9SRDBfX1JHTUlJX1JEMAkJMHgxMzBiMAkJLyogQVI4MDM1IHBpbiBzdHJhcHBpbmc6IFBIWUFERFIjMDogcHVsbCBkb3duICovCisJCQkJTVg2UURMX1BBRF9SR01JSV9SRDFfX1JHTUlJX1JEMQkJMHgxMzBiMAkJLyogQVI4MDM1IHBpbiBzdHJhcHBpbmc6IFBIWUFERFIjMTogcHVsbCBkb3duICovCisJCQkJTVg2UURMX1BBRF9SR01JSV9SRDJfX1JHTUlJX1JEMgkJMHgxYjBiMAkJLyogQVI4MDM1IHBpbiBzdHJhcHBpbmc6IE1PREUjMTogcHVsbCB1cCAqLworCQkJCU1YNlFETF9QQURfUkdNSUlfUkQzX19SR01JSV9SRDMJCTB4MWIwYjAJCS8qIEFSODAzNSBwaW4gc3RyYXBwaW5nOiBNT0RFIzM6IHB1bGwgdXAgKi8KKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JYX0NUTF9fUkdNSUlfUlhfQ1RMCTB4MTMwYjAJCS8qIEFSODAzNSBwaW4gc3RyYXBwaW5nOiBNT0RFIzA6IHB1bGwgZG93biAqLworCQkJCU1YNlFETF9QQURfR1BJT18xNl9fRU5FVF9SRUZfQ0xLCTB4YzAwMDAwMDAJLyogR1BJTzE2IC0+IEFSODAzNSAyNU1IeiAqLworCQkJICAgICAgICBNWDZRRExfUEFEX0VJTV9EMzFfX0dQSU8zX0lPMzEJCTB4MTMwYjAJCS8qIFJHTUlJX25SU1QgKi8KKwkJCQlNWDZRRExfUEFEX0VORVRfVFhfRU5fX0dQSU8xX0lPMjgJMHg4MDAwMDAwMAkvKiBBUjgwMzUgaW50ZXJydXB0ICovCisJCQkJTVg2UURMX1BBRF9HUElPXzZfX0VORVRfSVJRCQkweDAwMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMTogaTJjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUOF9fSTJDMV9TREEJCTB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUOV9fSTJDMV9TQ0wJCTB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMyOiBpMmMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX0NPTDNfX0kyQzJfU0NMCQkweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9LRVlfUk9XM19fSTJDMl9TREEJCTB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT181X19JMkMzX1NDTAkJMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfR1BJT182X19JMkMzX1NEQQkJMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2kyYzQ6IGkyYzRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9HUElPXzdfX0kyQzRfU0NMICAgICAgICAgICAgIDB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0dQSU9fOF9fSTJDNF9TREEgICAgICAgICAgICAgMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2xlZDogbGVkZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0EyNV9fR1BJTzVfSU8wMgkJMHg4MDAwMDAwMAkvKiB1c2VyIGxlZDAgKi8KKwkJCQlNWDZRRExfUEFEX0VJTV9EMjhfX0dQSU8zX0lPMjgJCTB4ODAwMDAwMDAJLyogdXNlciBsZWQxICovCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfcHdtMTogcHdtMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDhfX1BXTTFfT1VUCQkweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfcHdtMjogcHdtMmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDlfX1BXTTJfT1VUCQkweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfcHdtMzogcHdtM2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX1NEMV9EQVQxX19QV00zX09VVAkJMHgxYjBiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3B3bTQ6IHB3bTRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9TRDFfQ01EX19QV000X09VVAkJMHgxYjBiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQxOiB1YXJ0MWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUMTBfX1VBUlQxX1RYX0RBVEEJMHgxYjBiMQorCQkJCU1YNlFETF9QQURfQ1NJMF9EQVQxMV9fVUFSVDFfUlhfREFUQQkweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDI6IHVhcnQyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QyNl9fVUFSVDJfVFhfREFUQQkweDFiMGIxCisJCQkJTVg2UURMX1BBRF9FSU1fRDI3X19VQVJUMl9SWF9EQVRBCTB4MWIwYjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MzogdWFydDNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FSU1fRDI0X19VQVJUM19UWF9EQVRBCTB4MWIwYjEKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjVfX1VBUlQzX1JYX0RBVEEJMHgxYjBiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQ0OiB1YXJ0NGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wwX19VQVJUNF9UWF9EQVRBCTB4MWIwYjEKKwkJCQlNWDZRRExfUEFEX0tFWV9ST1cwX19VQVJUNF9SWF9EQVRBCTB4MWIwYjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0NTogdWFydDVncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9LRVlfQ09MMV9fVUFSVDVfVFhfREFUQQkweDFiMGIxCisJCQkJTVg2UURMX1BBRF9LRVlfUk9XMV9fVUFSVDVfUlhfREFUQQkweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNib3RnOiB1c2JvdGdncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FTkVUX1JYX0VSX19VU0JfT1RHX0lECTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjJfX0dQSU8zX0lPMjIJCTB4ODAwMDAwMDAJLyogTVg2UURMX1BBRF9FSU1fRDIyX19VU0JfT1RHX1BXUiAqLworCQkJCU1YNlFETF9QQURfRUlNX0QyMV9fVVNCX09UR19PQwkJMHg4MDAwMDAwMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMjogdXNkaGMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QyX0NNRF9fU0QyX0NNRAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0NMS19fU0QyX0NMSwkJMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDBfX1NEMl9EQVRBMAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDFfX1NEMl9EQVRBMQkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDJfX1NEMl9EQVRBMgkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDNfX1NEMl9EQVRBMwkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfR1BJT180X19HUElPMV9JTzA0CQkweDgwMDAwMDAwCS8qIFNEMiBDRCAqLworCQkJCU1YNlFETF9QQURfR1BJT18yX19HUElPMV9JTzAyCQkweDgwMDAwMDAwCS8qIFNEMiBXUCAqLworCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMzogdXNkaGMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QzX0NNRF9fU0QzX0NNRAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0NMS19fU0QzX0NMSwkJMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDBfX1NEM19EQVRBMAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDFfX1NEM19EQVRBMQkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDJfX1NEM19EQVRBMgkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDNfX1NEM19EQVRBMwkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDVfX0dQSU83X0lPMDAJCTB4ODAwMDAwMDAJLyogU0QzIENEICovCisJCQkJTVg2UURMX1BBRF9TRDNfREFUNF9fR1BJTzdfSU8wMQkJMHg4MDAwMDAwMAkvKiBTRDMgV1AgKi8KKwkJCT47CisJCX07CisKKwkJcGluY3RybF91c2RoYzQ6IHVzZGhjNGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX1NENF9DTURfX1NENF9DTUQJCTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX1NENF9DTEtfX1NENF9DTEsJCTB4MTAwNTkKKwkJCQlNWDZRRExfUEFEX1NENF9EQVQwX19TRDRfREFUQTAJCTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX1NENF9EQVQxX19TRDRfREFUQTEJCTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX1NENF9EQVQyX19TRDRfREFUQTIJCTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX1NENF9EQVQzX19TRDRfREFUQTMJCTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX05BTkRGX0FMRV9fR1BJTzZfSU8wOAkweDgwMDAwMDAwCS8qIFNENCBSU1QgKGVNTUMpICovCisJCQk+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwuZHRzaQppbmRleCA1YzVmNTc0Li4wYTljNDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2ZGwuZHRzaQpAQCAtODQsOSArODQsMTAgQEAKIAkJCWkyYzQ6IGkyY0AwMjFmODAwMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MS1pMmMiOworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxLWkyYyIsICJmc2wsaW14MjEtaTJjIjsKIAkJCQlyZWcgPSA8MHgwMjFmODAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MCAzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgMTE2PjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWRtby1lZG1xbXg2LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWRtby1lZG1xbXg2LmR0cwppbmRleCBlNGFlMzhmLi5lMDMwMjYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS1kbW8tZWRtcW14Ni5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtZG1vLWVkbXFteDYuZHRzCkBAIC0xOCw2ICsxOCwxMCBAQAogCW1vZGVsID0gIkRhdGEgTW9kdWwgZURNLVFNWDYgQm9hcmQiOwogCWNvbXBhdGlibGUgPSAiZG1vLGlteDZxLWVkbXFteDYiLCAiZnNsLGlteDZxIjsKIAorCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQyOworCX07CisKIAlhbGlhc2VzIHsKIAkJZ3BpbzcgPSAmc3RtcGVfZ3BpbzE7CiAJCWdwaW84ID0gJnN0bXBlX2dwaW8yOwpAQCAtOTEsNiArOTUsMjAgQEAKIAl9OwogfTsKIAorJmVjc3BpNSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZWNzcGk1PjsKKwlmc2wsc3BpLW51bS1jaGlwc2VsZWN0cyA9IDwxPjsKKwljcy1ncGlvcyA9IDwmZ3BpbzEgMTIgMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJZmxhc2g6IG0yNXA4MEAwIHsKKwkJY29tcGF0aWJsZSA9ICJtMjVwODAiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisJCXJlZyA9IDwwPjsKKwl9OworfTsKKwogJmZlYyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldD47CkBAIC0xMDUsNyArMTIzLDggQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMyCiAJCSAgICAgJnBpbmN0cmxfc3RtcGUxCi0JCSAgICAgJnBpbmN0cmxfc3RtcGUyPjsKKwkJICAgICAmcGluY3RybF9zdG1wZTIKKwkJICAgICAmcGluY3RybF9wZnV6ZT47CiAJc3RhdHVzID0gIm9rYXkiOwogCiAJcG1pYzogcGZ1emUxMDBAMDggewpAQCAtMjE2LDYgKzIzNSw4IEBACiAJCXJlZyA9IDwweDQwPjsKIAkJaW50ZXJydXB0cyA9IDwzMCAwPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzM+OworCQl2Y2Mtc3VwcGx5ID0gPCZzdzJfcmVnPjsKKwkJdmlvLXN1cHBseSA9IDwmc3cyX3JlZz47CiAKIAkJc3RtcGVfZ3BpbzE6IHN0bXBlX2dwaW8gewogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CkBAIC0yMjgsNiArMjQ5LDggQEAKIAkJcmVnID0gPDB4NDQ+OwogCQlpbnRlcnJ1cHRzID0gPDIgMD47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW81PjsKKwkJdmNjLXN1cHBseSA9IDwmc3cyX3JlZz47CisJCXZpby1zdXBwbHkgPSA8JnN3Ml9yZWc+OwogCiAJCXN0bXBlX2dwaW8yOiBzdG1wZV9ncGlvIHsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwpAQCAtMjYzLDYgKzI4NiwxNSBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX2Vjc3BpNTogZWNzcGk1cnAtMSB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX1NEMV9EQVQwX19FQ1NQSTVfTUlTTwkweDgwMDAwMDAwCisJCQkJTVg2UURMX1BBRF9TRDFfQ01EX19FQ1NQSTVfTU9TSQkJMHg4MDAwMDAwMAorCQkJCU1YNlFETF9QQURfU0QxX0NMS19fRUNTUEk1X1NDTEsJCTB4ODAwMDAwMDAKKwkJCQlNWDZRRExfUEFEX1NEMl9EQVQzX19HUElPMV9JTzEyCQkweDgwMDAwMDAwCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfZW5ldDogZW5ldGdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX1JHTUlJX1JYQ19fUkdNSUlfUlhDCQkweDFiMGIwCkBAIC0yOTEsNiArMzIzLDEyIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfcGZ1emU6IHBmdXplMTAwZ3JwMSB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjBfX0dQSU8zX0lPMjAJCTB4ODAwMDAwMDAKKwkJCT47CisJCX07CisKIAkJcGluY3RybF9zdG1wZTE6IHN0bXBlMWdycCB7CiAJCQlmc2wscGlucyA9IDxNWDZRRExfUEFEX0VJTV9EMzBfX0dQSU8zX0lPMzAgMHg4MDAwMDAwMD47CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS1nazgwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS1nazgwMi5kdHMKaW5kZXggNGE5YjRkYy4uNzAzNTM5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtZ2s4MDIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWdrODAyLmR0cwpAQCAtMTQsNyArMTQsNyBAQAogCWNvbXBhdGlibGUgPSAiemVhbHosaW14NnEtZ2s4MDIiLCAiZnNsLGlteDZxIjsKIAogCWNob3NlbiB7Ci0JCWxpbnV4LHN0ZG91dC1wYXRoID0gJnVhcnQ0OworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0NDsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTQ4LDYgKzQ4LDExIEBACiAJfTsKIH07CiAKKyZoZG1pIHsKKwlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogLyogSW50ZXJuYWwgSTJDICovCiAmaTJjMiB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWd3NTQwMC1hLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWd3NTQwMC1hLmR0cwppbmRleCBlNTFiYjNmLi4zNjg5ZWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS1ndzU0MDAtYS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtZ3c1NDAwLWEuZHRzCkBAIC0xNTcsNiArMTU3LDExIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJmhkbWkgeworCWRkYy1pMmMtYnVzID0gPCZpMmMzPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmaTJjMSB7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXBoeXRlYy1wYmFiMDEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtcGh5dGVjLXBiYWIwMS5kdHMKaW5kZXggNTYwN2MzMy4uYzEzOWFjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtcGh5dGVjLXBiYWIwMS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtcGh5dGVjLXBiYWIwMS5kdHMKQEAgLTExLDQwICsxMSwxNyBAQAogCiAvZHRzLXYxLzsKICNpbmNsdWRlICJpbXg2cS1waHl0ZWMtcGZsYTAyLmR0c2kiCisjaW5jbHVkZSAiaW14NnFkbC1waHl0ZWMtcGJhYjAxLmR0c2kiCiAKIC8gewogCW1vZGVsID0gIlBoeXRlYyBwaHlGTEVYLWkuTVg2IFF1YWQgQ2Fycmllci1Cb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJwaHl0ZWMsaW14NnEtcGJhYjAxIiwgInBoeXRlYyxpbXg2cS1wZmxhMDIiLCAiZnNsLGlteDZxIjsKLX07CiAKLSZmZWMgewotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZncG1pIHsKLQlzdGF0dXMgPSAib2theSI7CisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDQ7CisJfTsKIH07CiAKICZzYXRhIHsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mdWFydDQgewotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZ1c2JoMSB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVzYm90ZyB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVzZGhjMiB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVzZGhjMyB7Ci0Jc3RhdHVzID0gIm9rYXkiOworICAgICAgICBzdGF0dXMgPSAib2theSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtcGh5dGVjLXBmbGEwMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtcGh5dGVjLXBmbGEwMi5kdHNpCmluZGV4IDMyNGYxNTUuLmNkMjBkMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXBoeXRlYy1wZmxhMDIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS1waHl0ZWMtcGZsYTAyLmR0c2kKQEAgLTEwLDMxNiArMTAsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiaW14NnEuZHRzaSIKKyNpbmNsdWRlICJpbXg2cWRsLXBoeXRlYy1wZmxhMDIuZHRzaSIKIAogLyB7Ci0JbW9kZWwgPSAiUGh5dGVjIHBoeUZMRVgtaS5NWDYgT3VhZCI7CisJbW9kZWwgPSAiUGh5dGVjIHBoeUZMRVgtaS5NWDYgUXVhZCI7CiAJY29tcGF0aWJsZSA9ICJwaHl0ZWMsaW14NnEtcGZsYTAyIiwgImZzbCxpbXg2cSI7CiAKIAltZW1vcnkgewogCQlyZWcgPSA8MHgxMDAwMDAwMCAweDgwMDAwMDAwPjsKIAl9OwotCi0JcmVndWxhdG9ycyB7Ci0JCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlyZWdfdXNiX290Z192YnVzOiByZWd1bGF0b3JAMCB7Ci0JCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2Jfb3RnX3ZidXMiOwotCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47Ci0JCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKLQkJCWdwaW8gPSA8JmdwaW80IDE1IDA+OwotCQl9OwotCi0JCXJlZ191c2JfaDFfdmJ1czogcmVndWxhdG9yQDEgewotCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwotCQkJcmVnID0gPDE+OwotCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiX2gxX3ZidXMiOwotCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47Ci0JCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKLQkJCWdwaW8gPSA8JmdwaW8xIDAgMD47Ci0JCX07Ci0JfTsKLX07Ci0KLSZlY3NwaTMgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2Vjc3BpMz47Ci0Jc3RhdHVzID0gIm9rYXkiOwotCWZzbCxzcGktbnVtLWNoaXBzZWxlY3RzID0gPDE+OwotCWNzLWdwaW9zID0gPCZncGlvNCAyNCAwPjsKLQotCWZsYXNoQDAgewotCQljb21wYXRpYmxlID0gIm0yNXA4MCI7Ci0JCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDIwMDAwMDAwPjsKLQkJcmVnID0gPDA+OwotCX07Ci19OwotCi0maTJjMSB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47Ci0Jc3RhdHVzID0gIm9rYXkiOwotCi0JZWVwcm9tQDUwIHsKLQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGMzMiI7Ci0JCXJlZyA9IDwweDUwPjsKLQl9OwotCi0JcG1pY0A1OCB7Ci0JCWNvbXBhdGlibGUgPSAiZGlhbG9nLGRhOTA2MyI7Ci0JCXJlZyA9IDwweDU4PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzQ+OwotCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47IC8qIGFjdGl2ZS1sb3cgR1BJTzRfMTcgKi8KLQotCQlyZWd1bGF0b3JzIHsKLQkJCXZkZGNvcmVfcmVnOiBiY29yZTEgewotCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDczMDAwMD47Ci0JCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM4MDAwMD47Ci0JCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCX07Ci0KLQkJCXZkZHNvY19yZWc6IGJjb3JlMiB7Ci0JCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzMwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzgwMDAwPjsKLQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJfTsKLQotCQkJdmRkX2RkcjNfcmVnOiBicHJvIHsKLQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJfTsKLQotCQkJdmRkXzN2M19yZWc6IGJwZXJpIHsKLQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJfTsKLQotCQkJdmRkX2J1Y2ttZW1fcmVnOiBibWVtIHsKLQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJfTsKLQotCQkJdmRkX2V0aF9yZWc6IGJpbyB7Ci0JCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCX07Ci0KLQkJCXZkZF9ldGhfaW9fcmVnOiBsZG80IHsKLQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKLQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJfTsKLQotCQkJdmRkX214Nl9zbnZzX3JlZzogbGRvNSB7Ci0JCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCX07Ci0KLQkJCXZkZF8zdjNfcG1pY19pb19yZWc6IGxkbzYgewotCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQl9OwotCi0JCQl2ZGRfc2QwX3JlZzogbGRvOSB7Ci0JCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCQl9OwotCi0JCQl2ZGRfc2QxX3JlZzogbGRvMTAgewotCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQkJfTsKLQotCQkJdmRkX214Nl9oaWdoX3JlZzogbGRvMTEgewotCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQl9OwotCQl9OwotCX07Ci19OwotCi0maW9tdXhjIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ob2c+OwotCi0JaW14NnEtcGh5dGVjLXBmbGEwMiB7Ci0JCXBpbmN0cmxfaG9nOiBob2dncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJTVg2UURMX1BBRF9FSU1fRDIzX19HUElPM19JTzIzIDB4ODAwMDAwMDAKLQkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDNfX0dQSU80X0lPMjQgMHg4MDAwMDAwMCAvKiBTUEkgTk9SIGNoaXBzZWxlY3QgKi8KLQkJCQlNWDZRRExfUEFEX0RJMF9QSU4xNV9fR1BJTzRfSU8xNyAgMHg4MDAwMDAwMCAvKiBQTUlDIGludGVycnVwdCAqLwotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX2Vjc3BpMzogZWNzcGkzZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCU1YNlFETF9QQURfRElTUDBfREFUMl9fRUNTUEkzX01JU08JMHgxMDBiMQotCQkJCU1YNlFETF9QQURfRElTUDBfREFUMV9fRUNTUEkzX01PU0kJMHgxMDBiMQotCQkJCU1YNlFETF9QQURfRElTUDBfREFUMF9fRUNTUEkzX1NDTEsJMHgxMDBiMQotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX2VuZXQ6IGVuZXRncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJTVg2UURMX1BBRF9FTkVUX01ESU9fX0VORVRfTURJTwkJMHgxYjBiMAotCQkJCU1YNlFETF9QQURfRU5FVF9NRENfX0VORVRfTURDCQkweDFiMGIwCi0JCQkJTVg2UURMX1BBRF9SR01JSV9UWENfX1JHTUlJX1RYQwkJMHgxYjBiMAotCQkJCU1YNlFETF9QQURfUkdNSUlfVEQwX19SR01JSV9URDAJCTB4MWIwYjAKLQkJCQlNWDZRRExfUEFEX1JHTUlJX1REMV9fUkdNSUlfVEQxCQkweDFiMGIwCi0JCQkJTVg2UURMX1BBRF9SR01JSV9URDJfX1JHTUlJX1REMgkJMHgxYjBiMAotCQkJCU1YNlFETF9QQURfUkdNSUlfVEQzX19SR01JSV9URDMJCTB4MWIwYjAKLQkJCQlNWDZRRExfUEFEX1JHTUlJX1RYX0NUTF9fUkdNSUlfVFhfQ1RMCTB4MWIwYjAKLQkJCQlNWDZRRExfUEFEX0VORVRfUkVGX0NMS19fRU5FVF9UWF9DTEsJMHgxYjBiMAotCQkJCU1YNlFETF9QQURfUkdNSUlfUlhDX19SR01JSV9SWEMJCTB4MWIwYjAKLQkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMF9fUkdNSUlfUkQwCQkweDFiMGIwCi0JCQkJTVg2UURMX1BBRF9SR01JSV9SRDFfX1JHTUlJX1JEMQkJMHgxYjBiMAotCQkJCU1YNlFETF9QQURfUkdNSUlfUkQyX19SR01JSV9SRDIJCTB4MWIwYjAKLQkJCQlNWDZRRExfUEFEX1JHTUlJX1JEM19fUkdNSUlfUkQzCQkweDFiMGIwCi0JCQkJTVg2UURMX1BBRF9SR01JSV9SWF9DVExfX1JHTUlJX1JYX0NUTAkweDFiMGIwCi0JCQkJTVg2UURMX1BBRF9FTkVUX1RYX0VOX19FTkVUX1RYX0VOCTB4MWIwYjAKLQkJCT47Ci0JCX07Ci0KLQkJcGluY3RybF9ncG1pX25hbmQ6IGdwbWluYW5kZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCU1YNlFETF9QQURfTkFOREZfQ0xFX19OQU5EX0NMRQkJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9BTEVfX05BTkRfQUxFCQkweGIwYjEKLQkJCQlNWDZRRExfUEFEX05BTkRGX1dQX0JfX05BTkRfV1BfQgkweGIwYjEKLQkJCQlNWDZRRExfUEFEX05BTkRGX1JCMF9fTkFORF9SRUFEWV9CCTB4YjAwMAotCQkJCU1YNlFETF9QQURfTkFOREZfQ1MwX19OQU5EX0NFMF9CCTB4YjBiMQotCQkJCU1YNlFETF9QQURfTkFOREZfQ1MxX19OQU5EX0NFMV9CCTB4YjBiMQotCQkJCU1YNlFETF9QQURfU0Q0X0NNRF9fTkFORF9SRV9CCQkweGIwYjEKLQkJCQlNWDZRRExfUEFEX1NENF9DTEtfX05BTkRfV0VfQgkJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9EMF9fTkFORF9EQVRBMDAJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9EMV9fTkFORF9EQVRBMDEJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9EMl9fTkFORF9EQVRBMDIJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9EM19fTkFORF9EQVRBMDMJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9ENF9fTkFORF9EQVRBMDQJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9ENV9fTkFORF9EQVRBMDUJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9ENl9fTkFORF9EQVRBMDYJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9OQU5ERl9EN19fTkFORF9EQVRBMDcJMHhiMGIxCi0JCQkJTVg2UURMX1BBRF9TRDRfREFUMF9fTkFORF9EUVMJCTB4MDBiMQotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX2kyYzE6IGkyYzFncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJTVg2UURMX1BBRF9FSU1fRDIxX19JMkMxX1NDTAkJMHg0MDAxYjhiMQotCQkJCU1YNlFETF9QQURfRUlNX0QyOF9fSTJDMV9TREEJCTB4NDAwMWI4YjEKLQkJCT47Ci0JCX07Ci0KLQkJcGluY3RybF91YXJ0NDogdWFydDRncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJTVg2UURMX1BBRF9LRVlfQ09MMF9fVUFSVDRfVFhfREFUQQkweDFiMGIxCi0JCQkJTVg2UURMX1BBRF9LRVlfUk9XMF9fVUFSVDRfUlhfREFUQQkweDFiMGIxCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdXNiaDE6IHVzYmgxZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCU1YNlFETF9QQURfR1BJT18wX19VU0JfSDFfUFdSCQkweDgwMDAwMDAwCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdXNib3RnOiB1c2JvdGdncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJTVg2UURMX1BBRF9HUElPXzFfX1VTQl9PVEdfSUQJCTB4MTcwNTkKLQkJCQlNWDZRRExfUEFEX0tFWV9DT0w0X19VU0JfT1RHX09DCQkweDFiMGIwCi0JCQkJTVg2UURMX1BBRF9LRVlfUk9XNF9fR1BJTzRfSU8xNQkJMHg4MDAwMDAwMAotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX3VzZGhjMjogdXNkaGMyZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCU1YNlFETF9QQURfU0QyX0NNRF9fU0QyX0NNRAkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QyX0NMS19fU0QyX0NMSwkJMHgxMDA1OQotCQkJCU1YNlFETF9QQURfU0QyX0RBVDBfX1NEMl9EQVRBMAkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QyX0RBVDFfX1NEMl9EQVRBMQkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QyX0RBVDJfX1NEMl9EQVRBMgkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QyX0RBVDNfX1NEMl9EQVRBMwkJMHgxNzA1OQotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX3VzZGhjMzogdXNkaGMzZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCU1YNlFETF9QQURfU0QzX0NNRF9fU0QzX0NNRAkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QzX0NMS19fU0QzX0NMSwkJMHgxMDA1OQotCQkJCU1YNlFETF9QQURfU0QzX0RBVDBfX1NEM19EQVRBMAkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QzX0RBVDFfX1NEM19EQVRBMQkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QzX0RBVDJfX1NEM19EQVRBMgkJMHgxNzA1OQotCQkJCU1YNlFETF9QQURfU0QzX0RBVDNfX1NEM19EQVRBMwkJMHgxNzA1OQotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX3VzZGhjM19jZHdwOiB1c2RoYzNjZHdwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCU1YNlFETF9QQURfRU5FVF9SWEQwX19HUElPMV9JTzI3IDB4ODAwMDAwMDAKLQkJCQlNWDZRRExfUEFEX0VORVRfVFhEMV9fR1BJTzFfSU8yOSAweDgwMDAwMDAwCi0JCQk+OwotCQl9OwotCX07Ci19OwotCi0mZmVjIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKLQlwaHktbW9kZSA9ICJyZ21paSI7Ci0JcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMyAyMyAwPjsKLQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotfTsKLQotJmdwbWkgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2dwbWlfbmFuZD47Ci0JbmFuZC1vbi1mbGFzaC1iYnQ7Ci0Jc3RhdHVzID0gImRpc2FibGVkIjsKLX07Ci0KLSZ1YXJ0NCB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDQ+OwotCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci19OwotCi0mdXNiaDEgewotCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiX2gxX3ZidXM+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYmgxPjsKLQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotfTsKLQotJnVzYm90ZyB7Ci0JdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2Jfb3RnX3ZidXM+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYm90Zz47Ci0JZGlzYWJsZS1vdmVyLWN1cnJlbnQ7Ci0Jc3RhdHVzID0gImRpc2FibGVkIjsKLX07Ci0KLSZ1c2RoYzIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX3VzZGhjMj47Ci0JY2QtZ3Bpb3MgPSA8JmdwaW8xIDQgMD47Ci0Jd3AtZ3Bpb3MgPSA8JmdwaW8xIDIgMD47Ci0Jc3RhdHVzID0gImRpc2FibGVkIjsKLX07Ci0KLSZ1c2RoYzMgewotICAgICAgICBwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotICAgICAgICBwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNkaGMzCi0JCSAgICAgJnBpbmN0cmxfdXNkaGMzX2Nkd3A+OwotICAgICAgICBjZC1ncGlvcyA9IDwmZ3BpbzEgMjcgMD47Ci0gICAgICAgIHdwLWdwaW9zID0gPCZncGlvMSAyOSAwPjsKLSAgICAgICAgc3RhdHVzID0gImRpc2FibGVkIjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS11ZG9vLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXVkb28uZHRzCmluZGV4IGVkMzk3ZDEuLjZjNTYxMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXVkb28uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXVkb28uZHRzCkBAIC0xNiw2ICsxNiwxMCBAQAogCW1vZGVsID0gIlVkb28gaS5NWDYgUXVhZCBCb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJ1ZG9vLGlteDZxLXVkb28iLCAiZnNsLGlteDZxIjsKIAorCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQyOworCX07CisKIAltZW1vcnkgewogCQlyZWcgPSA8MHgxMDAwMDAwMCAweDQwMDAwMDAwPjsKIAl9OwpAQCAtMjgsNiArMzIsMTggQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismaGRtaSB7CisJZGRjLWkyYy1idXMgPSA8JmkyYzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMyIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmaW9tdXhjIHsKIAlpbXg2cS11ZG9vIHsKIAkJcGluY3RybF9lbmV0OiBlbmV0Z3JwIHsKQEAgLTUxLDYgKzY3LDEzIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wzX19JMkMyX1NDTAkJMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfS0VZX1JPVzNfX0kyQzJfU0RBCQkweDQwMDFiOGIxCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfdWFydDI6IHVhcnQyZ3JwIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNlFETF9QQURfRUlNX0QyNl9fVUFSVDJfVFhfREFUQQkweDFiMGIxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWN1Ym94LWkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtY3Vib3gtaS5kdHNpCmluZGV4IGMyYTI0ODguLjI1ZGE4MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtY3Vib3gtaS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtY3Vib3gtaS5kdHNpCkBAIC01NSw2ICs1NSwyMCBAQAogCX07CiB9OwogCismaGRtaSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY3Vib3hfaV9oZG1pPjsKKwlkZGMtaTJjLWJ1cyA9IDwmaTJjMj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzIgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2N1Ym94X2lfaTJjMj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmkyYzMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2N1Ym94X2lfaTJjMz47CkBAIC02OSw2ICs4MywxOSBAQAogCiAmaW9tdXhjIHsKIAljdWJveF9pIHsKKwkJcGluY3RybF9jdWJveF9pX2hkbWk6IGN1Ym94LWktaGRtaSB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9ST1cyX19IRE1JX1RYX0NFQ19MSU5FIDB4MWY4YjAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9jdWJveF9pX2kyYzI6IGN1Ym94LWktaTJjMiB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wzX19JMkMyX1NDTCAweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9LRVlfUk9XM19fSTJDMl9TREEgMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKwogCQlwaW5jdHJsX2N1Ym94X2lfaTJjMzogY3Vib3gtaS1pMmMzIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNlFETF9QQURfRUlNX0QxN19fSTJDM19TQ0wgMHg0MDAxYjhiMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1kZmktZnM3MDAtbTYwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWRmaS1mczcwMC1tNjAuZHRzaQppbmRleCAyNWNmMDM1Li4yYzI1M2Q2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWRmaS1mczcwMC1tNjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWRmaS1mczcwMC1tNjAuZHRzaQpAQCAtMjIsNyArMjIsNyBAQAogCX07CiAKIAljaG9zZW4gewotCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDE7CiAJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1MXh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTF4eC5kdHNpCmluZGV4IDk4YTQyMjEuLjMxNjY1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1MXh4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUxeHguZHRzaQpAQCAtMTAxLDYgKzEwMSwxMSBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZoZG1pIHsKKwlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmkyYzEgewogCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaQppbmRleCAwMzVkM2E4Li4zNjdhZjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1Mnh4LmR0c2kKQEAgLTI3LDYgKzI3LDEzIEBACiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5bXhjMSwxMTUyMDAiOwogCX07CiAKKwliYWNrbGlnaHQgeworCQljb21wYXRpYmxlID0gInB3bS1iYWNrbGlnaHQiOworCQlwd21zID0gPCZwd200IDAgNTAwMDAwMD47CisJCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEyOCAyNTU+OworCQlkZWZhdWx0LWJyaWdodG5lc3MtbGV2ZWwgPSA8Nz47CisJfTsKKwogCWxlZHMgewogCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CiAKQEAgLTE0OCw2ICsxNTUsMTEgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismaGRtaSB7CisJZGRjLWkyYy1idXMgPSA8JmkyYzM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZpMmMxIHsKIAljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMzk0LDYgKzQwNiwxMiBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX3B3bTQ6IHB3bTRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9TRDFfQ01EX19QV000X09VVAkJMHgxYjBiMQorCQkJPjsKKwkJfTsKKwogCQlwaW5jdHJsX3VhcnQxOiB1YXJ0MWdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX1NEM19EQVQ3X19VQVJUMV9UWF9EQVRBCTB4MWIwYjEKQEAgLTQzNiw2ICs0NTQsMjcgQEAKIAogJmxkYiB7CiAJc3RhdHVzID0gIm9rYXkiOworCisJbHZkcy1jaGFubmVsQDAgeworCQlmc2wsZGF0YS1tYXBwaW5nID0gInNwd2ciOworCQlmc2wsZGF0YS13aWR0aCA9IDwxOD47CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQlkaXNwbGF5LXRpbWluZ3MgeworCQkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OworCQkJdGltaW5nMDogaHNkMTAwcHhuMSB7CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDY1MDAwMDAwPjsKKwkJCQloYWN0aXZlID0gPDEwMjQ+OworCQkJCXZhY3RpdmUgPSA8NzY4PjsKKwkJCQloYmFjay1wb3JjaCA9IDwyMjA+OworCQkJCWhmcm9udC1wb3JjaCA9IDw0MD47CisJCQkJdmJhY2stcG9yY2ggPSA8MjE+OworCQkJCXZmcm9udC1wb3JjaCA9IDw3PjsKKwkJCQloc3luYy1sZW4gPSA8NjA+OworCQkJCXZzeW5jLWxlbiA9IDwxMD47CisJCQl9OworCQl9OworCX07CiB9OwogCiAmcGNpZSB7CkBAIC00NDMsNiArNDgyLDEyIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnB3bTQgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3B3bTQ+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZzc2kxIHsKIAlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTN4eC5kdHNpCmluZGV4IGM4ZTVhZTAuLmM5MWI1YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUzeHguZHRzaQpAQCAtMzAsNiArMzAsMTMgQEAKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlteGMxLDExNTIwMCI7CiAJfTsKIAorCWJhY2tsaWdodCB7CisJCWNvbXBhdGlibGUgPSAicHdtLWJhY2tsaWdodCI7CisJCXB3bXMgPSA8JnB3bTQgMCA1MDAwMDAwPjsKKwkJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCA0IDggMTYgMzIgNjQgMTI4IDI1NT47CisJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw3PjsKKwl9OworCiAJbGVkcyB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIApAQCAtMTU3LDYgKzE2NCwxMSBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZoZG1pIHsKKwlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmkyYzEgewogCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC00MzQsNiArNDQ2LDEyIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfcHdtNDogcHdtNGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX1NEMV9DTURfX1BXTTRfT1VUCQkweDFiMGIxCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNlFETF9QQURfU0QzX0RBVDdfX1VBUlQxX1RYX0RBVEEJMHgxYjBiMQpAQCAtNTA4LDYgKzUyNiwxMiBAQAogCX07CiB9OwogCismcHdtNCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcHdtND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnNzaTEgewogCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CiAJc3RhdHVzID0gIm9rYXkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzU0eHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kKaW5kZXggMjc5NWRmYy4uNjk4ZDMwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzU0eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpCkBAIC0zMCw2ICszMCwxMyBAQAogCQlib290YXJncyA9ICJjb25zb2xlPXR0eW14YzEsMTE1MjAwIjsKIAl9OwogCisJYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKwkJcHdtcyA9IDwmcHdtNCAwIDUwMDAwMDA+OworCQlicmlnaHRuZXNzLWxldmVscyA9IDwwIDQgOCAxNiAzMiA2NCAxMjggMjU1PjsKKwkJZGVmYXVsdC1icmlnaHRuZXNzLWxldmVsID0gPDc+OworCX07CisKIAlsZWRzIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwogCkBAIC0xNDcsNiArMTU0LDExIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJmhkbWkgeworCWRkYy1pMmMtYnVzID0gPCZpMmMzPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmaTJjMSB7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTQ1Niw2ICs0NjgsMTIgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9wd200OiBwd200Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QxX0NNRF9fUFdNNF9PVVQJCTB4MWIwYjEKKwkJCT47CisJCX07CisKIAkJcGluY3RybF91YXJ0MTogdWFydDFncnAgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2UURMX1BBRF9TRDNfREFUN19fVUFSVDFfVFhfREFUQQkweDFiMGIxCkBAIC01MzAsNiArNTQ4LDEyIEBACiAJfTsKIH07CiAKKyZwd200IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd200PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMSB7CiAJZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLW5pdHJvZ2VuNnguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtbml0cm9nZW42eC5kdHNpCmluZGV4IDk5YmUzMDEuLjRjNGIxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtbml0cm9nZW42eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtbml0cm9nZW42eC5kdHNpCkBAIC0xNCw2ICsxNCwxMCBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAKIC8geworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQyOworCX07CisKIAltZW1vcnkgewogCQlyZWcgPSA8MHgxMDAwMDAwMCAweDQwMDAwMDAwPjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGJhYjAxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXBoeXRlYy1wYmFiMDEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ3MjEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGJhYjAxLmR0c2kKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBDaHJpc3RpYW4gSGVtcCwgUGh5dGVjIE1lc3N0ZWNobmlrIEdtYkgKKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKy8geworCWNob3NlbiB7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJnVhcnQ0OworCX07Cit9OworCismZmVjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZ3BtaSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmhkbWkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMyPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl0bHYzMjBAMTggeworCQljb21wYXRpYmxlID0gInRpLHRsdjMyMGFpYzN4IjsKKwkJcmVnID0gPDB4MTg+OworCX07CisKKwlzdG1wZUA0MSB7CisJCWNvbXBhdGlibGUgPSAic3Qsc3RtcGU4MTEiOworCQlyZWcgPSA8MHg0MT47CisJfTsKKworCXJ0Y0A1MSB7CisJCWNvbXBhdGlibGUgPSAibnhwLHJ0Yzg1NjQiOworCQlyZWcgPSA8MHg1MT47CisJfTsKKworCWFkY0A2NCB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4MTAzNyI7CisJCXJlZyA9IDwweDY0PjsKKwl9OworfTsKKworJmkyYzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzM+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQ0IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiaDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JvdGcgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2RoYzIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2RoYzMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpb211eGMgeworCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CisJCWZzbCxwaW5zID0gPAorCQkJTVg2UURMX1BBRF9FSU1fRUIyX19JMkMyX1NDTAkJMHg0MDAxYjhiMQorCQkJTVg2UURMX1BBRF9FSU1fRDE2X19JMkMyX1NEQQkJMHg0MDAxYjhiMQorCQk+OworCX07CisKKwlwaW5jdHJsX2kyYzM6IGkyYzNncnAgeworCQlmc2wscGlucyA9IDwKKwkJCU1YNlFETF9QQURfRUlNX0QxN19fSTJDM19TQ0wJCTB4NDAwMWI4YjEKKwkJCU1YNlFETF9QQURfRUlNX0QxOF9fSTJDM19TREEJCTB4NDAwMWI4YjEKKwkJPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1waHl0ZWMtcGZsYTAyLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFhMzQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgQ2hyaXN0aWFuIEhlbXAsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJICisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisKKy8geworCW1vZGVsID0gIlBoeXRlYyBwaHlGTEVYLWkuTVg2IE91YWQiOworCWNvbXBhdGlibGUgPSAicGh5dGVjLGlteDZxLXBmbGEwMiIsICJmc2wsaW14NnEiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MTAwMDAwMDAgMHg4MDAwMDAwMD47CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVnX3VzYl9vdGdfdmJ1czogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiX290Z192YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvNCAxNSAwPjsKKwkJfTsKKworCQlyZWdfdXNiX2gxX3ZidXM6IHJlZ3VsYXRvckAxIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwxPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInVzYl9oMV92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvMSAwIDA+OworCQl9OworCX07CisKKwlncGlvX2xlZHM6IGxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJZ3JlZW4geworCQkJbGFiZWwgPSAicGh5ZmxleDpncmVlbiI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMzAgMD47CisJCX07CisKKwkJcmVkIHsKKwkJCWxhYmVsID0gInBoeWZsZXg6cmVkIjsKKwkJCWdwaW9zID0gPCZncGlvMiAzMSAwPjsKKwkJfTsKKwl9OworfTsKKworJmVjc3BpMyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZWNzcGkzPjsKKwlzdGF0dXMgPSAib2theSI7CisJZnNsLHNwaS1udW0tY2hpcHNlbGVjdHMgPSA8MT47CisJY3MtZ3Bpb3MgPSA8JmdwaW80IDI0IDA+OworCisJZmxhc2hAMCB7CisJCWNvbXBhdGlibGUgPSAibTI1cDgwIjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlyZWcgPSA8MD47CisJfTsKK307CisKKyZpMmMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMxPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwllZXByb21ANTAgeworCQljb21wYXRpYmxlID0gImF0bWVsLDI0YzMyIjsKKwkJcmVnID0gPDB4NTA+OworCX07CisKKwlwbWljQDU4IHsKKwkJY29tcGF0aWJsZSA9ICJkaWFsb2csZGE5MDYzIjsKKwkJcmVnID0gPDB4NTg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvND47CisJCWludGVycnVwdHMgPSA8MTcgMHg4PjsgLyogYWN0aXZlLWxvdyBHUElPNF8xNyAqLworCisJCXJlZ3VsYXRvcnMgeworCQkJdmRkY29yZV9yZWc6IGJjb3JlMSB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzMwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzgwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmRkc29jX3JlZzogYmNvcmUyIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MzAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzODAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfZGRyM19yZWc6IGJwcm8geworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfM3YzX3JlZzogYnBlcmkgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfYnVja21lbV9yZWc6IGJtZW0geworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfZXRoX3JlZzogYmlvIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmRkX2V0aF9pb19yZWc6IGxkbzQgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfbXg2X3NudnNfcmVnOiBsZG81IHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmRkXzN2M19wbWljX2lvX3JlZzogbGRvNiB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZkZF9zZDBfcmVnOiBsZG85IHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCX07CisKKwkJCXZkZF9zZDFfcmVnOiBsZG8xMCB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQl9OworCisJCQl2ZGRfbXg2X2hpZ2hfcmVnOiBsZG8xMSB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpb211eGMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2hvZz47CisKKwlpbXg2cS1waHl0ZWMtcGZsYTAyIHsKKwkJcGluY3RybF9ob2c6IGhvZ2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjNfX0dQSU8zX0lPMjMgMHg4MDAwMDAwMAorCQkJCU1YNlFETF9QQURfRElTUDBfREFUM19fR1BJTzRfSU8yNCAweDgwMDAwMDAwIC8qIFNQSSBOT1IgY2hpcHNlbGVjdCAqLworCQkJCU1YNlFETF9QQURfREkwX1BJTjE1X19HUElPNF9JTzE3ICAweDgwMDAwMDAwIC8qIFBNSUMgaW50ZXJydXB0ICovCisJCQkJTVg2UURMX1BBRF9FTkVUX1RYRDBfX0dQSU8xX0lPMzAgMHg4MDAwMDAwMCAvKiBHcmVlbiBMRUQgKi8KKwkJCQlNWDZRRExfUEFEX0VJTV9FQjNfX0dQSU8yX0lPMzEgMHg4MDAwMDAwMCAvKiBSZWQgTEVEICovCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZWNzcGkzOiBlY3NwaTNncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQyX19FQ1NQSTNfTUlTTwkweDEwMGIxCisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQxX19FQ1NQSTNfTU9TSQkweDEwMGIxCisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQwX19FQ1NQSTNfU0NMSwkweDEwMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZW5ldDogZW5ldGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VORVRfTURJT19fRU5FVF9NRElPCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9FTkVUX01EQ19fRU5FVF9NREMJCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1RYQ19fUkdNSUlfVFhDCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9SR01JSV9URDBfX1JHTUlJX1REMAkJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVEQxX19SR01JSV9URDEJCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMl9fUkdNSUlfVEQyCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9SR01JSV9URDNfX1JHTUlJX1REMwkJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfVFhfQ1RMX19SR01JSV9UWF9DVEwJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfRU5FVF9SRUZfQ0xLX19FTkVUX1RYX0NMSwkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9SR01JSV9SWENfX1JHTUlJX1JYQwkJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUkQwX19SR01JSV9SRDAJCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMV9fUkdNSUlfUkQxCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9SR01JSV9SRDJfX1JHTUlJX1JEMgkJMHgxYjBiMAorCQkJCU1YNlFETF9QQURfUkdNSUlfUkQzX19SR01JSV9SRDMJCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JYX0NUTF9fUkdNSUlfUlhfQ1RMCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0VORVRfVFhfRU5fX0VORVRfVFhfRU4JMHgxYjBiMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2dwbWlfbmFuZDogZ3BtaW5hbmRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9OQU5ERl9DTEVfX05BTkRfQ0xFCQkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0FMRV9fTkFORF9BTEUJCTB4YjBiMQorCQkJCU1YNlFETF9QQURfTkFOREZfV1BfQl9fTkFORF9XUF9CCTB4YjBiMQorCQkJCU1YNlFETF9QQURfTkFOREZfUkIwX19OQU5EX1JFQURZX0IJMHhiMDAwCisJCQkJTVg2UURMX1BBRF9OQU5ERl9DUzBfX05BTkRfQ0UwX0IJMHhiMGIxCisJCQkJTVg2UURMX1BBRF9OQU5ERl9DUzFfX05BTkRfQ0UxX0IJMHhiMGIxCisJCQkJTVg2UURMX1BBRF9TRDRfQ01EX19OQU5EX1JFX0IJCTB4YjBiMQorCQkJCU1YNlFETF9QQURfU0Q0X0NMS19fTkFORF9XRV9CCQkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0QwX19OQU5EX0RBVEEwMAkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0QxX19OQU5EX0RBVEEwMQkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0QyX19OQU5EX0RBVEEwMgkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0QzX19OQU5EX0RBVEEwMwkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0Q0X19OQU5EX0RBVEEwNAkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0Q1X19OQU5EX0RBVEEwNQkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0Q2X19OQU5EX0RBVEEwNgkweGIwYjEKKwkJCQlNWDZRRExfUEFEX05BTkRGX0Q3X19OQU5EX0RBVEEwNwkweGIwYjEKKwkJCQlNWDZRRExfUEFEX1NENF9EQVQwX19OQU5EX0RRUwkJMHgwMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMTogaTJjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjFfX0kyQzFfU0NMCQkweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9FSU1fRDI4X19JMkMxX1NEQQkJMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQzOiB1YXJ0M2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjRfX1VBUlQzX1RYX0RBVEEJMHgxYjBiMQorCQkJCU1YNlFETF9QQURfRUlNX0QyNV9fVUFSVDNfUlhfREFUQQkweDFiMGIxCisJCQkJTVg2UURMX1BBRF9FSU1fRDMwX19VQVJUM19SVFNfQgkJMHgxYjBiMQorCQkJCU1YNlFETF9QQURfRUlNX0QzMV9fVUFSVDNfQ1RTX0IJCTB4MWIwYjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0NDogdWFydDRncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9LRVlfQ09MMF9fVUFSVDRfVFhfREFUQQkweDFiMGIxCisJCQkJTVg2UURMX1BBRF9LRVlfUk9XMF9fVUFSVDRfUlhfREFUQQkweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNiaDE6IHVzYmgxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18wX19VU0JfSDFfUFdSCQkweDgwMDAwMDAwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNib3RnOiB1c2JvdGdncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9HUElPXzFfX1VTQl9PVEdfSUQJCTB4MTcwNTkKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0w0X19VU0JfT1RHX09DCQkweDFiMGIwCisJCQkJTVg2UURMX1BBRF9LRVlfUk9XNF9fR1BJTzRfSU8xNQkJMHg4MDAwMDAwMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMjogdXNkaGMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QyX0NNRF9fU0QyX0NNRAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0NMS19fU0QyX0NMSwkJMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDBfX1NEMl9EQVRBMAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDFfX1NEMl9EQVRBMQkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDJfX1NEMl9EQVRBMgkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDNfX1NEMl9EQVRBMwkJMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMzogdXNkaGMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QzX0NNRF9fU0QzX0NNRAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0NMS19fU0QzX0NMSwkJMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDBfX1NEM19EQVRBMAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDFfX1NEM19EQVRBMQkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDJfX1NEM19EQVRBMgkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDNfX1NEM19EQVRBMwkJMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjM19jZHdwOiB1c2RoYzNjZHdwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRU5FVF9SWEQwX19HUElPMV9JTzI3IDB4ODAwMDAwMDAKKwkJCQlNWDZRRExfUEFEX0VORVRfVFhEMV9fR1BJTzFfSU8yOSAweDgwMDAwMDAwCisJCQk+OworCQl9OworCX07Cit9OworCismZmVjIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKKwlwaHktbW9kZSA9ICJyZ21paSI7CisJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMyAyMyBHUElPX0FDVElWRV9MT1c+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismZ3BtaSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZ3BtaV9uYW5kPjsKKwluYW5kLW9uLWZsYXNoLWJidDsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnVhcnQzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0Mz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZ1YXJ0NCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDQ+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismdXNiaDEgeworCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiX2gxX3ZidXM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYmgxPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnVzYm90ZyB7CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2Jfb3RnX3ZidXM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYm90Zz47CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZ1c2RoYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzZGhjMj47CisJY2QtZ3Bpb3MgPSA8JmdwaW8xIDQgMD47CisJd3AtZ3Bpb3MgPSA8JmdwaW8xIDIgMD47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZ1c2RoYzMgeworICAgICAgICBwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworICAgICAgICBwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNkaGMzCisJCSAgICAgJnBpbmN0cmxfdXNkaGMzX2Nkd3A+OworICAgICAgICBjZC1ncGlvcyA9IDwmZ3BpbzEgMjcgMD47CisgICAgICAgIHdwLWdwaW9zID0gPCZncGlvMSAyOSAwPjsKKyAgICAgICAgc3RhdHVzID0gImRpc2FibGVkIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlbGl0ZS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZWxpdGUuZHRzaQppbmRleCAzYmVjMTI4Li42ZGY2MTI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlbGl0ZS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVsaXRlLmR0c2kKQEAgLTEzLDYgKzEzLDEwIEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KIAogLyB7CisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDI7CisJfTsKKwogCW1lbW9yeSB7CiAJCXJlZyA9IDwweDEwMDAwMDAwIDB4NDAwMDAwMDA+OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVzZC5kdHNpCmluZGV4IDBkODE2ZDMuLjQwZWEzNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVzZC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVzZC5kdHNpCkBAIC0xNCw2ICsxNCwxMCBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAKIC8geworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQxOworCX07CisKIAltZW1vcnkgewogCQlyZWcgPSA8MHgxMDAwMDAwMCAweDQwMDAwMDAwPjsKIAl9OwpAQCAtMTA1LDYgKzEwOSwxNyBAQAogCQlkZWZhdWx0LWJyaWdodG5lc3MtbGV2ZWwgPSA8Nz47CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX2dwaW9fbGVkcz47CisKKwkJcmVkIHsKKwkJICAgICAgICBncGlvcyA9IDwmZ3BpbzEgMiAwPjsKKwkJICAgICAgICBkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJfTsKKwl9OwogfTsKIAogJmF1ZG11eCB7CkBAIC0xMzcsNiArMTUyLDExIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJmhkbWkgeworCWRkYy1pMmMtYnVzID0gPCZpMmMyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmaTJjMSB7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTM3Myw2ICszOTMsMTIgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9wY2llOiBwY2llZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18xN19fR1BJTzdfSU8xMgkweDgwMDAwMDAwCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfcHdtMTogcHdtMWdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX1NEMV9EQVQzX19QV00xX09VVAkJMHgxYjBiMQpAQCAtNDIxLDYgKzQ0NywyOSBAQAogCQkJCU1YNlFETF9QQURfU0QzX0RBVDdfX1NEM19EQVRBNwkJMHgxNzA1OQogCQkJPjsKIAkJfTsKKworCQlwaW5jdHJsX3VzZGhjNDogdXNkaGM0Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0Q0X0NNRF9fU0Q0X0NNRAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0NMS19fU0Q0X0NMSwkJMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDBfX1NENF9EQVRBMAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDFfX1NENF9EQVRBMQkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDJfX1NENF9EQVRBMgkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDNfX1NENF9EQVRBMwkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDRfX1NENF9EQVRBNAkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDVfX1NENF9EQVRBNQkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDZfX1NENF9EQVRBNgkJMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDdfX1NENF9EQVRBNwkJMHgxNzA1OQorCQkJPjsKKwkJfTsKKwl9OworCisJZ3Bpb19sZWRzIHsKKwkJcGluY3RybF9ncGlvX2xlZHM6IGdwaW9sZWRzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18yX19HUElPMV9JTzAyIDB4ODAwMDAwMDAKKwkJCT47CisJCX07CiAJfTsKIH07CiAKQEAgLTQ0OSw2ICs0OTgsMTMgQEAKIAl9OwogfTsKIAorJnBjaWUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3BjaWU+OworCXJlc2V0LWdwaW8gPSA8JmdwaW83IDEyIDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwd20xIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wd20xPjsKQEAgLTQ5NiwzICs1NTIsMTIgQEAKIAl3cC1ncGlvcyA9IDwmZ3BpbzIgMSAwPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismdXNkaGM0IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2RoYzQ+OworCWJ1cy13aWR0aCA9IDw4PjsKKwlub24tcmVtb3ZhYmxlOworCW5vLTEtOC12OworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXdhbmRib2FyZC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC13YW5kYm9hcmQuZHRzaQppbmRleCBiZGZkZjg5Li41YzZmMTBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXdhbmRib2FyZC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtd2FuZGJvYXJkLmR0c2kKQEAgLTYyLDYgKzYyLDE4IEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJmhkbWkgeworCWRkYy1pMmMtYnVzID0gPCZpMmMxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMSB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJmkyYzIgewogCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0xMjcsNiArMTM5LDEzIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfaTJjMTogaTJjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMjFfX0kyQzFfU0NMIAkJMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfRUlNX0QyOF9fSTJDMV9TREEgCQkweDQwMDFiOGIxCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX0tFWV9DT0wzX19JMkMyX1NDTAkJMHg0MDAxYjhiMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpCmluZGV4IGVjYTA5NzEuLmNlMDU5OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKQEAgLTE2LDYgKzE2LDcgQEAKIAogLyB7CiAJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZmZWM7CiAJCWNhbjAgPSAmY2FuMTsKIAkJY2FuMSA9ICZjYW4yOwogCQlncGlvMCA9ICZncGlvMTsKQEAgLTE0MCwxNSArMTQxLDE2IEBACiAJCQkJICAweDgxMDAwMDAwIDAgMCAgICAgICAgICAweDAxZjgwMDAwIDAgMHgwMDAxMDAwMCAvKiBkb3duc3RyZWFtIEkvTyAqLwogCQkJCSAgMHg4MjAwMDAwMCAwIDB4MDEwMDAwMDAgMHgwMTAwMDAwMCAwIDB4MDBmMDAwMDA+OyAvKiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeSAqLwogCQkJbnVtLWxhbmVzID0gPDE+OwotCQkJaW50ZXJydXB0cyA9IDwwIDEyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibXNpIjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgMHg3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaW50YyBHSUNfU1BJIDEyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgICAgICAgICAgICA8MCAwIDAgMiAmaW50YyBHSUNfU1BJIDEyMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgICAgICAgICAgICA8MCAwIDAgMyAmaW50YyBHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgICAgICAgICAgICA8MCAwIDAgNCAmaW50YyBHSUNfU1BJIDEyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2xrcyAxODk+LCA8JmNsa3MgMTg3PiwgPCZjbGtzIDIwNj4sIDwmY2xrcyAxNDQ+OwotCQkJY2xvY2stbmFtZXMgPSAicGNpZV9yZWZfMTI1bSIsICJzYXRhX3JlZl8xMDBtIiwgImx2ZHNfZ2F0ZSIsICJwY2llX2F4aSI7CisJCQljbG9ja3MgPSA8JmNsa3MgMTQ0PiwgPCZjbGtzIDIwNj4sIDwmY2xrcyAxODk+OworCQkJY2xvY2stbmFtZXMgPSAicGNpZSIsICJwY2llX2J1cyIsICJwY2llX3BoeSI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC5kdHNpCmluZGV4IGQyNmIwOTkuLjJkNGU1MjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC5kdHNpCkBAIC0xNCw2ICsxNCw3IEBACiAKIC8gewogCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZmVjOwogCQlncGlvMCA9ICZncGlvMTsKIAkJZ3BpbzEgPSAmZ3BpbzI7CiAJCWdwaW8yID0gJmdwaW8zOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvazJlLWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9rMmUtZXZtLmR0cwppbmRleCA3NGIzYjYzLi5jNTY4ZjA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rMmUtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9rMmUtZXZtLmR0cwpAQCAtNTgsMyArNTgsODQgQEAKICZ1c2IxIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismaTJjMCB7CisJZHR0QDUwIHsKKwkJY29tcGF0aWJsZSA9ICJhdCwyNGMxMDI0IjsKKwkJcmVnID0gPDB4NTA+OworCX07Cit9OworCismYWVtaWYgeworCWNzMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY2xvY2stcmFuZ2VzOworCQlyYW5nZXM7CisKKwkJdGksY3MtY2hpcHNlbGVjdCA9IDwwPjsKKwkJLyogYWxsIHRpbWluZ3MgaW4gbmFub3NlY29uZHMgKi8KKwkJdGksY3MtbWluLXR1cm5hcm91bmQtbnMgPSA8MTI+OworCQl0aSxjcy1yZWFkLWhvbGQtbnMgPSA8Nj47CisJCXRpLGNzLXJlYWQtc3Ryb2JlLW5zID0gPDIzPjsKKwkJdGksY3MtcmVhZC1zZXR1cC1ucyA9IDw5PjsKKwkJdGksY3Mtd3JpdGUtaG9sZC1ucyA9IDw4PjsKKwkJdGksY3Mtd3JpdGUtc3Ryb2JlLW5zID0gPDIzPjsKKwkJdGksY3Mtd3JpdGUtc2V0dXAtbnMgPSA8OD47CisKKwkJbmFuZEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxrZXlzdG9uZS1uYW5kIiwidGksZGF2aW5jaS1uYW5kIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MCAwIDB4NDAwMDAwMAorCQkJICAgICAgIDEgMCAweDAwMDAxMDA+OworCisJCQl0aSxkYXZpbmNpLWNoaXBzZWxlY3QgPSA8MD47CisJCQl0aSxkYXZpbmNpLW1hc2stYWxlID0gPDB4MjAwMD47CisJCQl0aSxkYXZpbmNpLW1hc2stY2xlID0gPDB4NDAwMD47CisJCQl0aSxkYXZpbmNpLW1hc2stY2hpcHNlbCA9IDwwPjsKKwkJCW5hbmQtZWNjLW1vZGUgPSAiaHciOworCQkJdGksZGF2aW5jaS1lY2MtYml0cyA9IDw0PjsKKwkJCW5hbmQtb24tZmxhc2gtYmJ0OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJwYXJhbXMiOworCQkJCXJlZyA9IDwweDEwMDAwMCAweDgwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1YmlmcyI7CisJCQkJcmVnID0gPDB4MTgwMDAwIDB4MUZFODAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJnNwaTAgeworCW5vcl9mbGFzaDogbjI1cTEyOGExMUAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gIk1pY3JvbixuMjVxMTI4YTExIjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTQwMDAwMDA+OworCQltMjVwLGZhc3QtcmVhZDsKKwkJcmVnID0gPDA+OworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gInUtYm9vdC1zcGwiOworCQkJcmVnID0gPDB4MCAweDgwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKworCQlwYXJ0aXRpb25AMSB7CisJCQlsYWJlbCA9ICJtaXNjIjsKKwkJCXJlZyA9IDwweDgwMDAwIDB4ZjgwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2syaGstZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syaGstZXZtLmR0cwppbmRleCBjOTNkMDZmLi4xZjkwY2JmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rMmhrLWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvazJoay1ldm0uZHRzCkBAIC0xMzgsMyArMTM4LDMyIEBACiAJCX07CiAJfTsKIH07CisKKyZpMmMwIHsKKwlkdHRANTAgeworCQljb21wYXRpYmxlID0gImF0LDI0YzEwMjQiOworCQlyZWcgPSA8MHg1MD47CisJfTsKK307CisKKyZzcGkwIHsKKwlub3JfZmxhc2g6IG4yNXExMjhhMTFAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJNaWNyb24sbjI1cTEyOGExMSI7CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDU0MDAwMDAwPjsKKwkJbTI1cCxmYXN0LXJlYWQ7CisJCXJlZyA9IDwwPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3Qtc3BsIjsKKwkJCXJlZyA9IDwweDAgMHg4MDAwMD47CisJCQlyZWFkLW9ubHk7CisJCX07CisKKwkJcGFydGl0aW9uQDEgeworCQkJbGFiZWwgPSAibWlzYyI7CisJCQlyZWcgPSA8MHg4MDAwMCAweGY4MDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1ldm0uZHRzCmluZGV4IDUwYTcwMTMuLmZlYzQzMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1ldm0uZHRzCkBAIC0zNSwzICszNSw4NCBAQAogJnVzYiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJmkyYzAgeworCWR0dEA1MCB7CisJCWNvbXBhdGlibGUgPSAiYXQsMjRjMTAyNCI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmFlbWlmIHsKKwljczAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNsb2NrLXJhbmdlczsKKwkJcmFuZ2VzOworCisJCXRpLGNzLWNoaXBzZWxlY3QgPSA8MD47CisJCS8qIGFsbCB0aW1pbmdzIGluIG5hbm9zZWNvbmRzICovCisJCXRpLGNzLW1pbi10dXJuYXJvdW5kLW5zID0gPDEyPjsKKwkJdGksY3MtcmVhZC1ob2xkLW5zID0gPDY+OworCQl0aSxjcy1yZWFkLXN0cm9iZS1ucyA9IDwyMz47CisJCXRpLGNzLXJlYWQtc2V0dXAtbnMgPSA8OT47CisJCXRpLGNzLXdyaXRlLWhvbGQtbnMgPSA8OD47CisJCXRpLGNzLXdyaXRlLXN0cm9iZS1ucyA9IDwyMz47CisJCXRpLGNzLXdyaXRlLXNldHVwLW5zID0gPDg+OworCisJCW5hbmRAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtbmFuZCIsInRpLGRhdmluY2ktbmFuZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmVnID0gPDAgMCAweDQwMDAwMDAKKwkJCSAgICAgICAxIDAgMHgwMDAwMTAwPjsKKworCQkJdGksZGF2aW5jaS1jaGlwc2VsZWN0ID0gPDA+OworCQkJdGksZGF2aW5jaS1tYXNrLWFsZSA9IDwweDIwMDA+OworCQkJdGksZGF2aW5jaS1tYXNrLWNsZSA9IDwweDQwMDA+OworCQkJdGksZGF2aW5jaS1tYXNrLWNoaXBzZWwgPSA8MD47CisJCQluYW5kLWVjYy1tb2RlID0gImh3IjsKKwkJCXRpLGRhdmluY2ktZWNjLWJpdHMgPSA8ND47CisJCQluYW5kLW9uLWZsYXNoLWJidDsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJcmVnID0gPDB4MCAweDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAicGFyYW1zIjsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHg4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQkJbGFiZWwgPSAidWJpZnMiOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDdGRTgwMDAwPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZzcGkwIHsKKwlub3JfZmxhc2g6IG4yNXExMjhhMTFAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJNaWNyb24sbjI1cTEyOGExMSI7CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDU0MDAwMDAwPjsKKwkJbTI1cCxmYXN0LXJlYWQ7CisJCXJlZyA9IDwwPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3Qtc3BsIjsKKwkJCXJlZyA9IDwweDAgMHg4MDAwMD47CisJCQlyZWFkLW9ubHk7CisJCX07CisKKwkJcGFydGl0aW9uQDEgeworCQkJbGFiZWwgPSAibWlzYyI7CisJCQlyZWcgPSA8MHg4MDAwMCAweGY4MDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rZXlzdG9uZS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMva2V5c3RvbmUuZHRzaQppbmRleCA5MDgyM2ViLi5kOWY5OWU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rZXlzdG9uZS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tleXN0b25lLmR0c2kKQEAgLTI4LDggKzI4LDYgQEAKIAlnaWM6IGludGVycnVwdC1jb250cm9sbGVyIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNS1naWMiOwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCWludGVycnVwdC1jb250cm9sbGVyOwogCQlyZWcgPSA8MHgwIDB4MDI1NjEwMDAgMHgwIDB4MTAwMD4sCiAJCSAgICAgIDwweDAgMHgwMjU2MjAwMCAweDAgMHgyMDAwPiwKQEAgLTY2LDYgKzY0LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxrZXlzdG9uZSIsInNpbXBsZS1idXMiOwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlyYW5nZXMgPSA8MHgwIDB4MCAweDAgMHhjMDAwMDAwMD47CisJCWRtYS1yYW5nZXMgPSA8MHg4MDAwMDAwMCAweDggMHgwMDAwMDAwMCAweDgwMDAwMDAwPjsKIAogCQlyc3RjdHJsOiByZXNldC1jb250cm9sbGVyIHsKIAkJCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcmVzZXQiOwpAQCAtMTAyLDExICsxMDEsNiBAQAogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4MyBJUlFfVFlQRV9FREdFX1JJU0lORz47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCQlkdHRANTAgewotCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMTAyNCI7Ci0JCQkJcmVnID0gPDB4NTA+OwotCQkJfTsKIAkJfTsKIAogCQlpMmMxOiBpMmNAMjUzMDQwMCB7CkBAIC0xMTUsNiArMTA5LDggQEAKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQkJY2xvY2tzID0gPCZjbGtpMmM+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4NiBJUlFfVFlQRV9FREdFX1JJU0lORz47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OwogCQl9OwogCiAJCWkyYzI6IGkyY0AyNTMwODAwIHsKQEAgLTEyMyw2ICsxMTksOCBAQAogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCQljbG9ja3MgPSA8JmNsa2kyYz47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjg5IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCX07CiAKIAkJc3BpMDogc3BpQDIxMDAwNDAwIHsKQEAgLTEzMiw2ICsxMzAsOCBAQAogCQkJdGksZGF2aW5jaS1zcGktaW50ci1saW5lID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI5MiBJUlFfVFlQRV9FREdFX1JJU0lORz47CiAJCQljbG9ja3MgPSA8JmNsa3NwaT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OwogCQl9OwogCiAJCXNwaTE6IHNwaUAyMTAwMDYwMCB7CkBAIC0xNDEsNiArMTQxLDggQEAKIAkJCXRpLGRhdmluY2ktc3BpLWludHItbGluZSA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyOTYgSVJRX1RZUEVfRURHRV9SSVNJTkc+OwogCQkJY2xvY2tzID0gPCZjbGtzcGk+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAogCQlzcGkyOiBzcGlAMjEwMDA4MDAgewpAQCAtMTUwLDYgKzE1Miw4IEBACiAJCQl0aSxkYXZpbmNpLXNwaS1pbnRyLWxpbmUgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzAwIElSUV9UWVBFX0VER0VfUklTSU5HPjsKIAkJCWNsb2NrcyA9IDwmY2xrc3BpPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCX07CiAKIAkJdXNiX3BoeTogdXNiX3BoeUAyNjIwNzM4IHsKQEAgLTE2OSw2ICsxNzMsOCBAQAogCQkJY2xvY2stbmFtZXMgPSAidXNiIjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzOTMgSVJRX1RZUEVfRURHRV9SSVNJTkc+OwogCQkJcmFuZ2VzOworCQkJZG1hLWNvaGVyZW50OworCQkJZG1hLXJhbmdlczsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAKIAkJCWR3YzNAMjY5MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC02MTkyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC02MTkyLmR0c2kKaW5kZXggMzkxNjkzNy4uZGQ4MTUwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtNjE5Mi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLTYxOTIuZHRzaQpAQCAtMSw2ICsxLDYgQEAKIC8gewogCW1idXMgewotCQlwY2llLWNvbnRyb2xsZXIgeworCQlwY2llYzogcGNpZS1jb250cm9sbGVyIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxraXJrd29vZC1wY2llIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwpAQCAtMTUsNyArMTUsNyBAQAogCQkJCTB4ODIwMDAwMDAgMHgxIDAgICAgIE1CVVNfSUQoMHgwNCwgMHhlOCkgMCAgICAgICAxIDAgLyogUG9ydCAwLjAgTUVNICovCiAJCQkJMHg4MTAwMDAwMCAweDEgMCAgICAgTUJVU19JRCgweDA0LCAweGUwKSAwICAgICAgIDEgMCAvKiBQb3J0IDAuMCBJTyAgKi8+OwogCi0JCQlwY2llQDEsMCB7CisJCQlwY2llMDogcGNpZUAxLDAgewogCQkJCWRldmljZV90eXBlID0gInBjaSI7CiAJCQkJYXNzaWduZWQtYWRkcmVzc2VzID0gPDB4ODIwMDA4MDAgMCAweDAwMDQwMDAwIDAgMHgyMDAwPjsKIAkJCQlyZWcgPSA8MHgwODAwIDAgMCAwIDA+OwpAQCAtMzUsMTYgKzM1LDkgQEAKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCw4OGY2MTkyLXBpbmN0cmwiOwotCQkJcmVnID0gPDB4MTAwMDAgMHgyMD47CiAKLQkJCXBteF9uYW5kOiBwbXgtbmFuZCB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDAiLCAibXBwMSIsICJtcHAyIiwgIm1wcDMiLAotCQkJCQkgICAgICAgIm1wcDQiLCAibXBwNSIsICJtcHAxOCIsCi0JCQkJCSAgICAgICAibXBwMTkiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAibmFuZCI7Ci0JCQl9OwogCQkJcG14X3NhdGEwOiBwbXgtc2F0YTAgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDIxIiwgIm1wcDIzIjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNhdGEwIjsKQEAgLTUzLDIyICs0Niw2IEBACiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQiLCAibXBwMjAiLCAibXBwMjIiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2F0YTEiOwogCQkJfTsKLQkJCXBteF9zcGk6IHBteC1zcGkgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiLCAibXBwMiIsICJtcHAzIjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaSI7Ci0JCQl9OwotCQkJcG14X3R3c2kwOiBwbXgtdHdzaTAgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHA4IiwgIm1wcDkiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidHdzaTAiOwotCQkJfTsKLQkJCXBteF91YXJ0MDogcG14LXVhcnQwIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTAiLCAibXBwMTEiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDAiOwotCQkJfTsKLQkJCXBteF91YXJ0MTogcG14LXVhcnQxIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTMiLCAibXBwMTQiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDEiOwotCQkJfTsKIAkJCXBteF9zZGlvOiBwbXgtc2RpbyB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwKIAkJCQkJICAgICAgICJtcHAxNSIsICJtcHAxNiIsICJtcHAxNyI7CkBAIC03NiwxNCArNTMsMTQgQEAKIAkJCX07CiAJCX07CiAKLQkJcnRjQDEwMzAwIHsKKwkJcnRjOiBydGNAMTAzMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGtpcmt3b29kLXJ0YyIsICJtYXJ2ZWxsLG9yaW9uLXJ0YyI7CiAJCQlyZWcgPSA8MHgxMDMwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8NTM+OwogCQkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKIAkJfTsKIAotCQlzYXRhQDgwMDAwIHsKKwkJc2F0YTogc2F0YUA4MDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tc2F0YSI7CiAJCQlyZWcgPSA8MHg4MDAwMCAweDUwMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyMT47CkBAIC05Miw3ICs2OSw3IEBACiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCi0JCW12c2Rpb0A5MDAwMCB7CisJCXNkaW86IG12c2Rpb0A5MDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tc2RpbyI7CiAJCQlyZWcgPSA8MHg5MDAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDI4PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLTYyODEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLTYyODEuZHRzaQppbmRleCA0MTZkOTZlLi43ZGM3ZDY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC02MjgxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtNjI4MS5kdHNpCkBAIC0xLDYgKzEsNiBAQAogLyB7CiAJbWJ1cyB7Ci0JCXBjaWUtY29udHJvbGxlciB7CisJCXBjaWVjOiBwY2llLWNvbnRyb2xsZXIgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGtpcmt3b29kLXBjaWUiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7CkBAIC0xNSw3ICsxNSw3IEBACiAJCQkJMHg4MjAwMDAwMCAweDEgMCAgICAgTUJVU19JRCgweDA0LCAweGU4KSAwICAgICAgIDEgMCAvKiBQb3J0IDAuMCBNRU0gKi8KIAkJCQkweDgxMDAwMDAwIDB4MSAwICAgICBNQlVTX0lEKDB4MDQsIDB4ZTApIDAgICAgICAgMSAwIC8qIFBvcnQgMC4wIElPICAqLz47CiAKLQkJCXBjaWVAMSwwIHsKKwkJCXBjaWUwOiBwY2llQDEsMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJCQlhc3NpZ25lZC1hZGRyZXNzZXMgPSA8MHg4MjAwMDgwMCAwIDB4MDAwNDAwMDAgMCAweDIwMDA+OwogCQkJCXJlZyA9IDwweDA4MDAgMCAwIDAgMD47CkBAIC0zNSwxNiArMzUsOSBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLDg4ZjYyODEtcGluY3RybCI7Ci0JCQlyZWcgPSA8MHgxMDAwMCAweDIwPjsKIAotCQkJcG14X25hbmQ6IHBteC1uYW5kIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsCi0JCQkJCSAgICAgICAibXBwNCIsICJtcHA1IiwgIm1wcDE4IiwKLQkJCQkJICAgICAgICJtcHAxOSI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJuYW5kIjsKLQkJCX07CiAJCQlwbXhfc2F0YTA6IHBteC1zYXRhMCB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDUiLCAibXBwMjEiLCAibXBwMjMiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2F0YTAiOwpAQCAtNTMsMjIgKzQ2LDYgQEAKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNCIsICJtcHAyMCIsICJtcHAyMiI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzYXRhMSI7CiAJCQl9OwotCQkJcG14X3NwaTogcG14LXNwaSB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDAiLCAibXBwMSIsICJtcHAyIiwgIm1wcDMiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpIjsKLQkJCX07Ci0JCQlwbXhfdHdzaTA6IHBteC10d3NpMCB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDgiLCAibXBwOSI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJ0d3NpMCI7Ci0JCQl9OwotCQkJcG14X3VhcnQwOiBwbXgtdWFydDAgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxMCIsICJtcHAxMSI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJ1YXJ0MCI7Ci0JCQl9OwotCQkJcG14X3VhcnQxOiBwbXgtdWFydDEgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxMyIsICJtcHAxNCI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJ1YXJ0MSI7Ci0JCQl9OwogCQkJcG14X3NkaW86IHBteC1zZGlvIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTIiLCAibXBwMTMiLCAibXBwMTQiLAogCQkJCQkgICAgICAgIm1wcDE1IiwgIm1wcDE2IiwgIm1wcDE3IjsKQEAgLTc2LDE0ICs1MywxNCBAQAogCQkJfTsKIAkJfTsKIAotCQlydGNAMTAzMDAgeworCQlydGM6IHJ0Y0AxMDMwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsa2lya3dvb2QtcnRjIiwgIm1hcnZlbGwsb3Jpb24tcnRjIjsKIAkJCXJlZyA9IDwweDEwMzAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDw1Mz47CiAJCQljbG9ja3MgPSA8JmdhdGVfY2xrIDc+OwogCQl9OwogCi0JCXNhdGFAODAwMDAgeworCQlzYXRhOiBzYXRhQDgwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1zYXRhIjsKIAkJCXJlZyA9IDwweDgwMDAwIDB4NTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIxPjsKQEAgLTk0LDcgKzcxLDcgQEAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKLQkJbXZzZGlvQDkwMDAwIHsKKwkJc2RpbzogbXZzZGlvQDkwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1zZGlvIjsKIAkJCXJlZyA9IDwweDkwMDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8Mjg+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtNjI4Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtNjI4Mi5kdHNpCmluZGV4IDI5MDJlMGQuLjQ2ODBlZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLTYyODIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC02MjgyLmR0c2kKQEAgLTEsNiArMSw2IEBACiAvIHsKIAltYnVzIHsKLQkJcGNpZS1jb250cm9sbGVyIHsKKwkJcGNpZWM6IHBjaWUtY29udHJvbGxlciB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsa2lya3dvb2QtcGNpZSI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKQEAgLTE5LDcgKzE5LDcgQEAKIAkJCQkweDgyMDAwMDAwIDB4MiAwICAgICBNQlVTX0lEKDB4MDQsIDB4ZDgpIDAgICAgICAgMSAwIC8qIFBvcnQgMS4wIE1FTSAqLwogCQkJCTB4ODEwMDAwMDAgMHgyIDAgICAgIE1CVVNfSUQoMHgwNCwgMHhkMCkgMCAgICAgICAxIDAgLyogUG9ydCAxLjAgSU8gICovPjsKIAotCQkJcGNpZUAxLDAgeworCQkJcGNpZTA6IHBjaWVAMSwwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJCWFzc2lnbmVkLWFkZHJlc3NlcyA9IDwweDgyMDAwODAwIDAgMHgwMDA0MDAwMCAwIDB4MjAwMD47CiAJCQkJcmVnID0gPDB4MDgwMCAwIDAgMCAwPjsKQEAgLTM2LDcgKzM2LDcgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAotCQkJcGNpZUAyLDAgeworCQkJcGNpZTE6IHBjaWVAMiwwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJCWFzc2lnbmVkLWFkZHJlc3NlcyA9IDwweDgyMDAxMDAwIDAgMHgwMDA0NDAwMCAwIDB4MjAwMD47CiAJCQkJcmVnID0gPDB4MTAwMCAwIDAgMCAwPjsKQEAgLTU2LDE1ICs1Niw4IEBACiAJfTsKIAlvY3BAZjEwMDAwMDAgewogCi0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhmNjI4Mi1waW5jdHJsIjsKLQkJCXJlZyA9IDwweDEwMDAwIDB4MjA+OwotCi0JCQlwbXhfbmFuZDogcG14LW5hbmQgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiLCAibXBwMiIsICJtcHAzIiwKLQkJCQkJCQkibXBwNCIsICJtcHA1IiwgIm1wcDE4IiwgIm1wcDE5IjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gIm5hbmQiOwotCQkJfTsKIAogCQkJcG14X3NhdGEwOiBwbXgtc2F0YTAgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDIxIiwgIm1wcDIzIjsKQEAgLTc0LDI5ICs2NywxNiBAQAogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0IiwgIm1wcDIwIiwgIm1wcDIyIjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNhdGExIjsKIAkJCX07Ci0JCQlwbXhfc3BpOiBwbXgtc3BpIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzcGkiOwotCQkJfTsKLQkJCXBteF90d3NpMDogcG14LXR3c2kwIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCIsICJtcHA5IjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInR3c2kwIjsKLQkJCX07CiAKKwkJCS8qCisJCQkgKiBEZWZhdWx0IEkyQzEgcGluY3RybCBzZXR0aW5nIG9uIG1wcDM2L21wcDM3LAorCQkJICogb3ZlcndyaXRlIG1hcnZlbGwscGlucyBvbiBib2FyZCBsZXZlbCBpZiByZXF1aXJlZC4KKwkJCSAqLwogCQkJcG14X3R3c2kxOiBwbXgtdHdzaTEgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzNiIsICJtcHAzNyI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJ0d3NpMSI7CiAJCQl9OwogCi0JCQlwbXhfdWFydDA6IHBteC11YXJ0MCB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDEwIiwgIm1wcDExIjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInVhcnQwIjsKLQkJCX07Ci0KLQkJCXBteF91YXJ0MTogcG14LXVhcnQxIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTMiLCAibXBwMTQiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDEiOwotCQkJfTsKIAkJCXBteF9zZGlvOiBwbXgtc2RpbyB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwKIAkJCQkJICAgICAgICJtcHAxNSIsICJtcHAxNiIsICJtcHAxNyI7CkBAIC0xMDQsMjAgKzg0LDIwIEBACiAJCQl9OwogCQl9OwogCi0JCXRoZXJtYWxAMTAwNzggeworCQl0aGVybWFsOiB0aGVybWFsQDEwMDc4IHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxraXJrd29vZC10aGVybWFsIjsKIAkJCXJlZyA9IDwweDEwMDc4IDB4ND47CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKLQkJcnRjQDEwMzAwIHsKKwkJcnRjOiBydGNAMTAzMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGtpcmt3b29kLXJ0YyIsICJtYXJ2ZWxsLG9yaW9uLXJ0YyI7CiAJCQlyZWcgPSA8MHgxMDMwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8NTM+OwogCQkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKIAkJfTsKIAotCQlpMmNAMTExMDAgeworCQlpMmMxOiBpMmNAMTExMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4eHgtaTJjIjsKIAkJCXJlZyA9IDwweDExMTAwIDB4MjA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xMjUsMTAgKzEwNSwxMiBAQAogCQkJaW50ZXJydXB0cyA9IDwzMj47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJCWNsb2NrcyA9IDwmZ2F0ZV9jbGsgNz47CisJCQlwaW5jdHJsLTAgPSA8JnBteF90d3NpMT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAotCQlzYXRhQDgwMDAwIHsKKwkJc2F0YTogc2F0YUA4MDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tc2F0YSI7CiAJCQlyZWcgPSA8MHg4MDAwMCAweDUwMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyMT47CkBAIC0xMzksNyArMTIxLDcgQEAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKLQkJbXZzZGlvQDkwMDAwIHsKKwkJc2RpbzogbXZzZGlvQDkwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1zZGlvIjsKIAkJCXJlZyA9IDwweDkwMDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8Mjg+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtOThkeDQxMjIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLTk4ZHg0MTIyLmR0c2kKaW5kZXggMzI3MWU0Yy4uOWUxZjc0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtOThkeDQxMjIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC05OGR4NDEyMi5kdHNpCkBAIC0xLDMxICsxLDUxIEBACiAvIHsKLQlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCw5OGR4NDEyMi1waW5jdHJsIjsKLQkJCXJlZyA9IDwweDEwMDAwIDB4MjA+OworCW1idXMgeworCQlwY2llYzogcGNpZS1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxraXJrd29vZC1wY2llIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCi0JCQlwbXhfbmFuZDogcG14LW5hbmQgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiLCAibXBwMiIsICJtcHAzIiwKLQkJCQkJICAgICAgICJtcHA0IiwgIm1wcDUiLCAibXBwMTgiLAotCQkJCQkgICAgICAgIm1wcDE5IjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gIm5hbmQiOwotCQkJfTsKLQkJCXBteF9zcGk6IHBteC1zcGkgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiLCAibXBwMiIsICJtcHAzIjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaSI7Ci0JCQl9OwotCQkJcG14X3R3c2kwOiBwbXgtdHdzaTAgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHA4IiwgIm1wcDkiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidHdzaTAiOwotCQkJfTsKLQkJCXBteF91YXJ0MDogcG14LXVhcnQwIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTAiLCAibXBwMTEiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDAiOwotCQkJfTsKLQkJCXBteF91YXJ0MTogcG14LXVhcnQxIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTMiLCAibXBwMTQiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDEiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKworCQkJYnVzLXJhbmdlID0gPDB4MDAgMHhmZj47CisKKwkJCXJhbmdlcyA9CisJCQkgICAgICAgPDB4ODIwMDAwMDAgMCAweDQwMDAwIE1CVVNfSUQoMHhmMCwgMHgwMSkgMHg0MDAwMCAwIDB4MDAwMDIwMDAKKwkJCQkweDgyMDAwMDAwIDB4MSAwICAgICBNQlVTX0lEKDB4MDQsIDB4ZTgpIDAgICAgICAgMSAwIC8qIFBvcnQgMC4wIE1FTSAqLworCQkJCTB4ODEwMDAwMDAgMHgxIDAgICAgIE1CVVNfSUQoMHgwNCwgMHhlMCkgMCAgICAgICAxIDAgLyogUG9ydCAwLjAgSU8gICovPjsKKworCQkJcGNpZTA6IHBjaWVAMSwwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJCWFzc2lnbmVkLWFkZHJlc3NlcyA9IDwweDgyMDAwODAwIDAgMHgwMDA0MDAwMCAwIDB4MjAwMD47CisJCQkJcmVnID0gPDB4MDgwMCAwIDAgMCAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMCAweDgyMDAwMDAwIDB4MSAwIDEgMAorCQkJCQkgIDB4ODEwMDAwMDAgMCAwIDB4ODEwMDAwMDAgMHgxIDAgMSAwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgMD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAwICZpbnRjIDk+OworCQkJCW1hcnZlbGwscGNpZS1wb3J0ID0gPDA+OworCQkJCW1hcnZlbGwscGNpZS1sYW5lID0gPDA+OworCQkJCWNsb2NrcyA9IDwmZ2F0ZV9jbGsgMj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAJCX07CiAJfTsKKworCW9jcEBmMTAwMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCw5OGR4NDEyMi1waW5jdHJsIjsKKworCQl9OworCX07Cit9OworCismc2F0YV9waHkwIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnNhdGFfcGh5MSB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1iMy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1iMy5kdHMKaW5kZXggNmJlY2VkZS4uYzkyNDdmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtYjMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWIzLmR0cwpAQCAtMzAsNiArMzAsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAltYnVzIHsKQEAgLTQ0LDcgKzQ1LDcgQEAKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF9idXR0b25fcG93ZXI6IHBteC1idXR0b24tcG93ZXIgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzOSI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKQEAgLTY5LDggKzcwLDYgQEAKIAogCQlzcGlAMTA2MDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJcGluY3RybC0wID0gPCZwbXhfc3BpPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAkJCW0yNXAxNkAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTExMyw4ICsxMTIsNiBAQAogCQkJICogVUFSVDBfVFggPSBUZXN0cG9pbnQgNjYKIAkJCSAqIFNlZSB0aGUgRXhjaXRvIFdpa2kgZm9yIG1vcmUgZGV0YWlscy4KIAkJIAkgKi8KLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWNsb3VkYm94LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWNsb3VkYm94LmR0cwppbmRleCAzYjYyYWVlLi5hYjZhYjQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1jbG91ZGJveC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtY2xvdWRib3guZHRzCkBAIC0xNCwxMCArMTQsMTEgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF9jbG91ZGJveF9zYXRhMDogcG14LWNsb3VkYm94LXNhdGEwIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTUiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2F0YTAiOwpAQCAtMjUsOSArMjYsNiBAQAogCQl9OwogCiAJCXNlcmlhbEAxMjAwMCB7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MD47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE2NjY2NjY2Nz47CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKQEAgLTM5LDggKzM3LDYgQEAKIAkJfTsKIAogCQlzcGlAMTA2MDAgewotCQkJcGluY3RybC0wID0gPCZwbXhfc3BpPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAKIAkJCWZsYXNoQDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZGIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRiLmR0c2kKaW5kZXggMDJkMTIyNS4uODEyZGY2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZGIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kYi5kdHNpCkBAIC0yMiwxMCArMjIsMTEgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybEAxMDAwMCB7CisJCXBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF9zZGlvX2dwaW9zOiBwbXgtc2Rpby1ncGlvcyB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM3IiwgIm1wcDM4IjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpAQCAtMzMsMTAgKzM0LDcgQEAKIAkJfTsKIAogCQlzZXJpYWxAMTIwMDAgewotCQkJcGluY3RybC0wID0gPCZwbXhfdWFydDA+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwotCQkJc3RhdHVzID0gIm9rIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAogCQlzYXRhQDgwMDAwIHsKQEAgLTU5LDggKzU3LDYgQEAKIH07CiAKICZuYW5kIHsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCWNoaXAtZGVsYXkgPSA8MjU+OwogCXN0YXR1cyA9ICJva2F5IjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZG5zMzIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRuczMyMC5kdHMKaW5kZXggYmY3ZmU4YS4uZDg1ZWYwYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRuczMyMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZG5zMzIwLmR0cwpAQCAtMTMsNiArMTMsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlncGlvLWxlZHMgewpAQCAtNTEsOCArNTIsNiBAQAogCQl9OwogCiAJCXNlcmlhbEAxMjEwMCB7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MT47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kbnMzMjUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZG5zMzI1LmR0cwppbmRleCBjYjk5NzhjLi41ZTU4NmVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kbnMzMjUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRuczMyNS5kdHMKQEAgLTEzLDYgKzEzLDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1sZWRzIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRuc2t3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kbnNrdy5kdHNpCmluZGV4IGQ1YWE5NTYuLjExM2RjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRuc2t3LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZG5za3cuZHRzaQpAQCAtNTAsNyArNTAsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCiAJCQlwaW5jdHJsLTAgPSA8JnBteF9wb3dlcl9iYWNrX29uICZwbXhfcHJlc2VudF9zYXRhMAogCQkJCSAgICAgJnBteF9wcmVzZW50X3NhdGExICZwbXhfZmFuX3RhY2hvCkBAIC0xODMsOCArMTgzLDYgQEAKIH07CiAKICZuYW5kIHsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXN0YXR1cyA9ICJva2F5IjsKIAljaGlwLWRlbGF5ID0gPDM1PjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZG9ja3N0YXIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZG9ja3N0YXIuZHRzCmluZGV4IGYzMTMxMmUuLjg0OTczNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRvY2tzdGFyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kb2Nrc3Rhci5kdHMKQEAgLTE0LDEwICsxNCwxMSBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayByb290PS9kZXYvc2RhMSByb290ZGVsYXk9MTAiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF91c2JfcG93ZXJfZW5hYmxlOiBwbXgtdXNiLXBvd2VyLWVuYWJsZSB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI5IjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHJlYW1wbHVnLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRyZWFtcGx1Zy5kdHMKaW5kZXggMjhiM2VlMzYuLjY0NjdjNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRyZWFtcGx1Zy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHJlYW1wbHVnLmR0cwpAQCAtMTQsMTAgKzE0LDExIEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW9jcEBmMTAwMDAwMCB7Ci0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQlwbXhfbGVkX2JsdWV0b290aDogcG14LWxlZC1ibHVldG9vdGggewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NyI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKQEAgLTM3LDggKzM4LDYgQEAKIAogCQlzcGlAMTA2MDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJcGluY3RybC0wID0gPCZwbXhfc3BpPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAkJCW0yNXA0MEAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTA5LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTA5LmR0cwppbmRleCA3NzIwOTJjLi5kNGJjYzFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczEwOS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMxMDkuZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCWdwaW8tZmFuLTE1MC0zMi0zNSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczExMGp2MTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMxMTBqdjEwLmR0cwppbmRleCBhYWJhZmJlLi45NWJmODNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczExMGp2MTAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTEwanYxMC5kdHMKQEAgLTI1LDYgKzI1LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1mYW4tMTUwLTMyLTM1IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTExLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTExLmR0cwppbmRleCAxNmVjN2ZiLi42MWY0N2ZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczExMS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMxMTEuZHRzCkBAIC0yNCw2ICsyNCw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCWdwaW8tZmFuLTEwMC0xNS0zNS0xIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTEyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMTEyLmR0cwppbmRleCBjZmYxYjIzLi5iZjQxNDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczExMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMxMTIuZHRzCkBAIC0yNCw2ICsyNCw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCWdwaW8tZmFuLTEwMC0xNS0zNS0xIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMjA5LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMjA5LmR0cwppbmRleCAzMzA0MTE5Li42ZDI1MDkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczIwOS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMyMDkuZHRzCkBAIC0yNCw2ICsyNCw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCWdwaW8tZmFuLTE1MC0zMi0zNSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczIxMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczIxMC5kdHMKaW5kZXggNjA1MmVhYS4uMmYxOTMzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMyMTAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMjEwLmR0cwpAQCAtMjYsNiArMjYsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlncGlvLWZhbi0xNTAtMzItMzUgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMyMTIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMyMTIuZHRzCmluZGV4IDdmNzZjZDMuLjk5YWZkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMjEyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczIxMi5kdHMKQEAgLTI3LDYgKzI3LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1mYW4tMTAwLTE1LTM1LTEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMyMTJqLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzMjEyai5kdHMKaW5kZXggMWY4M2EwMC4uZjVjNDIxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHMyMTJqLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczIxMmouZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCWdwaW8tZmFuLTEwMC0zMi0zNSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQwOS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQwOS5kdHMKaW5kZXggMGE1NzNhZC4uZTgwYTk2MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzNDA5LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQwOS5kdHMKQEAgLTI0LDYgKzI0LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1mYW4tMTUwLTE1LTE4IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzNDA5c2xpbS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQwOXNsaW0uZHRzCmluZGV4IDE4NDhhNjIuLmNhZTVhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzNDA5c2xpbS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHM0MDlzbGltLmR0cwpAQCAtMjQsNiArMjQsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlncGlvLWZhbi0xNTAtMzItMzUgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHM0MTEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHM0MTEuZHRzCmluZGV4IGExNzM3YjQuLjYyM2NkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzNDExLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQxMS5kdHMKQEAgLTI0LDYgKzI0LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1mYW4tMTAwLTE1LTM1LTEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHM0MTFqLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzNDExai5kdHMKaW5kZXggMGNkZTkxNC4uMzM0OGUzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHM0MTFqLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQxMWouZHRzCkBAIC0yNCw2ICsyNCw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCWdwaW8tZmFuLTE1MC0xNS0xOCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQxMXNsaW0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZHM0MTFzbGltLmR0cwppbmRleCBhZWYwY2FkLi5hMGExZmFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1kczQxMXNsaW0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRzNDExc2xpbS5kdHMKQEAgLTI0LDYgKzI0LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1mYW4tMTAwLTE1LTM1LTEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZ29mbGV4bmV0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWdvZmxleG5ldC5kdHMKaW5kZXggZWI5MzI5NC4uYWE2MGEwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZ29mbGV4bmV0LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1nb2ZsZXhuZXQuZHRzCkBAIC0xNCwxMCArMTQsMTEgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsgcm9vdD0vZGV2L3NkYTEgcm9vdGRlbGF5PTEwIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW9jcEBmMTAwMDAwMCB7Ci0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQlwbXhfdXNiX3Bvd2VyX2VuYWJsZTogcG14LXVzYi1wb3dlci1lbmFibGUgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyOSI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWd1cnVwbHVnLXNlcnZlci1wbHVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWd1cnVwbHVnLXNlcnZlci1wbHVzLmR0cwppbmRleCAyZDUxZmNlLi5jNWExZmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1ndXJ1cGx1Zy1zZXJ2ZXItcGx1cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZ3VydXBsdWctc2VydmVyLXBsdXMuZHRzCkBAIC0xNCwxMCArMTQsMTEgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF9sZWRfaGVhbHRoX3I6IHBteC1sZWQtaGVhbHRoLXIgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NiI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKQEAgLTM2LDcgKzM3LDYgQEAKIAkJCX07CiAJCX07CiAJCXNlcmlhbEAxMjAwMCB7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKIAkJCXN0YXR1cyA9ICJvayI7CiAJCX07CiAKQEAgLTEwMSwxMyArMTAxLDE5IEBACiAJc3RhdHVzID0gIm9rYXkiOwogCiAJZXRocGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhlMTEyMSI7CisJCS8qIE1hcnZlbGwgODhFMTEyMVIgKi8KKwkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQwMTQxLjBjYjAiLAorCQkgICAgICAgICAgICAgImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyIjsKIAkJcmVnID0gPDA+OworCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAl9OwogCiAJZXRocGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhlMTEyMSI7CisJCS8qIE1hcnZlbGwgODhFMTEyMVIgKi8KKwkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQwMTQxLjBjYjAiLAorCQkgICAgICAgICAgICAgImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyIjsKIAkJcmVnID0gPDE+OworCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtaWI2MngwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWliNjJ4MC5kdHMKaW5kZXggYTFhZGQzZi4uYmZhNWVkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtaWI2MngwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1pYjYyeDAuZHRzCkBAIC0xNCwxMCArMTQsMTEgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF9sZWRfb3NfcmVkOiBwbXgtbGVkLW9zLXJlZCB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDIyIjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpAQCAtMTA0LDggKzEwNSw2IEBACiAKICZuYW5kIHsKIAlzdGF0dXMgPSAib2theSI7Ci0JcGluY3RybC0wID0gPCZwbXhfbmFuZD47Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCXBhcnRpdGlvbkAwIHsKIAkJbGFiZWwgPSAidS1ib290IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWljb25uZWN0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWljb25uZWN0LmR0cwppbmRleCA4ZDhjODBlLi4zOGUzMWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1pY29ubmVjdC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtaWNvbm5lY3QuZHRzCkBAIC0xNCw2ICsxNCw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJCWxpbnV4LGluaXRyZC1zdGFydCA9IDwweDQ1MDAwNDA+OwogCQlsaW51eCxpbml0cmQtZW5kICAgPSA8MHg0ODAwMDAwPjsKIAl9OwpAQCAtMjksNyArMzAsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X2J1dHRvbl9yZXNldDogcG14LWJ1dHRvbi1yZXNldCB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtaW9tZWdhX2l4Ml8yMDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtaW9tZWdhX2l4Ml8yMDAuZHRzCmluZGV4IDU5ZTdhNWEuLjA1MjkxZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWlvbWVnYV9peDJfMjAwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1pb21lZ2FfaXgyXzIwMC5kdHMKQEAgLTE0LDEwICsxNCwxMSBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcGluY3RybC0wID0gPCAmcG14X2xlZF9zYXRhX2JydF9jdHJsXzEKIAkJCQkgICAgICAmcG14X2xlZF9zYXRhX2JydF9jdHJsXzIKIAkJCQkgICAgICAmcG14X2xlZF9iYWNrdXBfYnJ0X2N0cmxfMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qta21fY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1rbV9jb21tb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY3Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qta21fY29tbW9uLmR0c2kKQEAgLTAsMCArMSw0OCBAQAorLyB7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOworCX07CisKKwltYnVzIHsKKwkJcGNpZS1jb250cm9sbGVyIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGNpZUAxLDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisJCX07CisJfTsKKworCW9jcEBmMTAwMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKKwkJCXBpbmN0cmwtMCA9IDwgJnBteF9pMmNfZ3Bpb19zZGEgJnBteF9pMmNfZ3Bpb19zY2wgPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJCXBteF9pMmNfZ3Bpb19zZGE6IHBteC1ncGlvLXNkYSB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDgiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2kyY19ncGlvX3NjbDogcG14LWdwaW8tc2NsIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOSI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsQDEyMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJaTJjQDAgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8ICZncGlvMCA4IEdQSU9fQUNUSVZFX0hJR0gJCS8qIHNkYSAqLworCQkJICAmZ3BpbzAgOSBHUElPX0FDVElWRV9ISUdIPjsJCS8qIHNjbCAqLworCQlpMmMtZ3BpbyxkZWxheS11cyA9IDwyPjsJLyogfjEwMCBrSHogKi8KKwl9OworfTsKKworJm5hbmQgeworCXN0YXR1cyA9ICJva2F5IjsKKwljaGlwLWRlbGF5ID0gPDI1PjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1rbV9maXhlZGV0aC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1rbV9maXhlZGV0aC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5NWYyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWttX2ZpeGVkZXRoLmR0cwpAQCAtMCwwICsxLDIzIEBACisvZHRzLXYxLzsKKworI2luY2x1ZGUgImtpcmt3b29kLmR0c2kiCisjaW5jbHVkZSAia2lya3dvb2QtOThkeDQxMjIuZHRzaSIKKyNpbmNsdWRlICJraXJrd29vZC1rbV9jb21tb24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiS2V5bWlsZSBLaXJrd29vZCBGaXhlZCBFdGgiOworCWNvbXBhdGlibGUgPSAia2V5bWlsZSxrbV9maXhlZGV0aCIsICJtYXJ2ZWxsLGtpcmt3b29kLTk4RFg0MTIyIiwgIm1hcnZlbGwsa2lya3dvb2QiOworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZldGgwIHsKKwlzdGF0dXMgPSAib2theSI7CisJZXRoZXJuZXQwLXBvcnRAMCB7CisJCXNwZWVkID0gPDEwMDA+OyAgLyogPFNQRUVEXzEwMDA+ICovCisJCWR1cGxleCA9IDwxPjsgLyogPERVUExFWF9GVUxMPiAqLworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qta21fa2lya3dvb2QuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qta21fa2lya3dvb2QuZHRzCmluZGV4IDA0YTFlNDQuLjIzNWJmMzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1rbV9raXJrd29vZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qta21fa2lya3dvb2QuZHRzCkBAIC0yLDYgKzIsNyBAQAogCiAjaW5jbHVkZSAia2lya3dvb2QuZHRzaSIKICNpbmNsdWRlICJraXJrd29vZC05OGR4NDEyMi5kdHNpIgorI2luY2x1ZGUgImtpcmt3b29kLWttX2NvbW1vbi5kdHNpIgogCiAvIHsKIAltb2RlbCA9ICJLZXltaWxlIEtpcmt3b29kIFJlZmVyZW5jZSBEZXNpZ24iOwpAQCAtMTEsNDQgKzEyLDYgQEAKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CiAJfTsKLQotCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOwotCX07Ci0KLQlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKLQkJCXBpbmN0cmwtMCA9IDwgJnBteF9pMmNfZ3Bpb19zZGEgJnBteF9pMmNfZ3Bpb19zY2wgPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KLQkJCXBteF9pMmNfZ3Bpb19zZGE6IHBteC1ncGlvLXNkYSB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDgiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwotCQkJcG14X2kyY19ncGlvX3NjbDogcG14LWdwaW8tc2NsIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOSI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCX07Ci0JCX07Ci0KLQkJc2VyaWFsQDEyMDAwIHsKLQkJCXN0YXR1cyA9ICJvayI7Ci0JCX07Ci0JfTsKLQotCWkyY0AwIHsKLQkJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7Ci0JCWdwaW9zID0gPCAmZ3BpbzAgOCBHUElPX0FDVElWRV9ISUdICQkvKiBzZGEgKi8KLQkJCSAgJmdwaW8wIDkgR1BJT19BQ1RJVkVfSElHSD47CQkvKiBzY2wgKi8KLQkJaTJjLWdwaW8sZGVsYXktdXMgPSA8Mj47CS8qIH4xMDAga0h6ICovCi0JfTsKLX07Ci0KLSZuYW5kIHsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXN0YXR1cyA9ICJvayI7Ci0JY2hpcC1kZWxheSA9IDwyNT47CiB9OwogCiAmbWRpbyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1sYXBsdWcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbGFwbHVnLmR0cwppbmRleCA2NzYxZmZhLi4yNDQyNTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1sYXBsdWcuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWxhcGx1Zy5kdHMKQEAgLTI0LDYgKzI0LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJbWJ1cyB7CkBAIC0zNywxNCArMzgsMTAgQEAKIAogCW9jcEBmMTAwMDAwMCB7CiAJCXNlcmlhbEAxMjAwMCB7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MD47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCiAJCWkyY0AxMTAwMCB7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF90d3NpMD47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gIm9rYXkiOwogCiAJCQllZXByb21ANTAgewpAQCAtNTQsNyArNTEsNyBAQAogCQkJfTsKIAkJfTsKIAotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X3VzYl9wb3dlcl9lbmFibGU6IHBteC11c2ItcG93ZXItZW5hYmxlIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTQiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CkBAIC0xMzksNyArMTM2LDYgQEAKICZuYW5kIHsKIAkvKiBUb3RhbCBzaXplIDogNTEyTUIgKi8KIAlzdGF0dXMgPSAib2theSI7Ci0JcGluY3RybC0wID0gPCZwbXhfbmFuZD47CiAKIAlwYXJ0aXRpb25AMCB7CiAJCWxhYmVsID0gInUtYm9vdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1sc3hsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1sc3hsLmR0c2kKaW5kZXggMTY1NjY1My4uNTM0ODQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbHN4bC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWxzeGwuZHRzaQpAQCAtNCwxMCArNCwxMSBAQAogLyB7CiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X3Bvd2VyX2hkZDogcG14LXBvd2VyLWhkZCB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEwIjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwbyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1tcGxjZWM0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW1wbGNlYzQuZHRzCmluZGV4IDczNzIyYzAuLmYzYTk5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW1wbGNlYzQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW1wbGNlYzQuZHRzCkBAIC0xMiw5ICsxMiwxMCBAQAogICAgICAgICAgICAgICAgIHJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OwogICAgICAgICB9OwogCi0gICAgICAgIGNob3NlbiB7Ci0gICAgICAgICAgICAgICAgYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7Ci0gICAgICAgIH07CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOworCX07CiAKIAltYnVzIHsKIAkJcGNpZS1jb250cm9sbGVyIHsKQEAgLTI3LDcgKzI4LDcgQEAKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBteF9sZWRfaGVhbHRoOiBwbXgtbGVkLWhlYWx0aCB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDciOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKQEAgLTg5LDExICs5MCw5IEBACiAKICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgc2VyaWFsQDEyMDAwIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJvayI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaW5jdHJsLTAgPSA8JnBteF91YXJ0MD47Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotICAgICAgICAgICAgICAgIH07CisJCXNlcmlhbEAxMjAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CiAKIAkJcnRjQDEwMzAwIHsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0xNjMsOCArMTYyLDYgQEAKIH07CiAKICZuYW5kIHsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXN0YXR1cyA9ICJva2F5IjsKIAogCXBhcnRpdGlvbkAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW12ODhmNjI4MWd0dy1nZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1tdjg4ZjYyODFndHctZ2UuZHRzCmluZGV4IGI5MzlmNGY1Li44Zjc2ZDI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1tdjg4ZjYyODFndHctZ2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW12ODhmNjI4MWd0dy1nZS5kdHMKQEAgLTI4LDYgKzI4LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJbWJ1cyB7CkBAIC00MSw3ICs0Miw3IEBACiAgICAgICAgIH07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsQDEwMDAwIHsKKwkJcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X3VzYl9sZWQ6IHBteC11c2ItbGVkIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTIiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKQEAgLTU5LDggKzYwLDYgQEAKIAkJfTsKIAogCQlzcGlAMTA2MDAgewotCQkJcGluY3RybC0wID0gPCZwbXhfc3BpPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAKIAkJCWZsYXNoQDAgewpAQCAtNzQsMTAgKzczLDcgQEAKIAkJfTsKIAogCQlzZXJpYWxAMTIwMDAgewotCQkJcGluY3RybC0wID0gPCZwbXhfdWFydDA+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwotCQkJc3RhdHVzID0gIm9rIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAogCQllaGNpQDUwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5ldGdlYXJfcmVhZHluYXNfZHVvX3YyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5ldGdlYXJfcmVhZHluYXNfZHVvX3YyLmR0cwppbmRleCA0ODM4NDc4Li5mZDczM2M2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uZXRnZWFyX3JlYWR5bmFzX2R1b192Mi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbmV0Z2Vhcl9yZWFkeW5hc19kdW9fdjIuZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW1idXMgewpAQCAtMzgsNyArMzksNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X2J1dHRvbl9wb3dlcjogcG14LWJ1dHRvbi1wb3dlciB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ3IjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpAQCAtMTEyLDggKzExMyw2IEBACiAJCX07CiAKIAkJc2VyaWFsQDEyMDAwIHsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5ldGdlYXJfcmVhZHluYXNfbnYrX3YyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5ldGdlYXJfcmVhZHluYXNfbnYrX3YyLmR0cwppbmRleCA3YzhhMGQ5Li5iNTE0ZDY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uZXRnZWFyX3JlYWR5bmFzX252K192Mi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbmV0Z2Vhcl9yZWFkeW5hc19uditfdjIuZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW1idXMgewpAQCAtNDAsNyArNDEsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X2J1dHRvbl9wb3dlcjogcG14LWJ1dHRvbi1wb3dlciB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ3IjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpAQCAtMTE5LDggKzEyMCw2IEBACiAJCX07CiAKIAkJc2VyaWFsQDEyMDAwIHsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zMi1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zMi1jb21tb24uZHRzaQppbmRleCBlNmU1ZWM0Li5mZTZjMDI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uczItY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbnMyLWNvbW1vbi5kdHNpCkBAIC00LDEwICs0LDExIEBACiAvIHsKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW9jcEBmMTAwMDAwMCB7Ci0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQlwbXhfbnMyX3NhdGEwOiBwbXgtbnMyLXNhdGEwIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjEiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2F0YTAiOwpAQCAtMTksMTQgKzIwLDEwIEBACiAJCX07CiAKIAkJc2VyaWFsQDEyMDAwIHsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKIAkJc3BpQDEwNjAwIHsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3NwaT47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gIm9rYXkiOwogCiAJCQlmbGFzaEAwIHsKQEAgLTQ1LDggKzQyLDYgQEAKIAkJfTsKIAogCQlpMmNAMTEwMDAgewotCQkJcGluY3RybC0wID0gPCZwbXhfdHdzaTA+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAogCQkJZWVwcm9tQDUwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTMxMC1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTMxMC1jb21tb24uZHRzaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjYzg1Yy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uc2EzMTAtY29tbW9uLmR0c2kKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotI2luY2x1ZGUgImtpcmt3b29kLmR0c2kiCi0jaW5jbHVkZSAia2lya3dvb2QtNjI4MS5kdHNpIgotCi0vIHsKLQltb2RlbCA9ICJaeVhFTCBOU0EzMTAiOwotCi0JbWJ1cyB7Ci0JCXBjaWUtY29udHJvbGxlciB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJCXBjaWVAMSwwIHsKLQkJCQlzdGF0dXMgPSAib2theSI7Ci0JCQl9OwotCQl9OwotCX07Ci0KLQlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKLQotCQkJcG14X3VzYl9wb3dlcl9vZmY6IHBteC11c2ItcG93ZXItb2ZmIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjEiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwotCQkJcG14X3B3cl9vZmY6IHBteC1wd3Itb2ZmIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDgiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwotCi0JCX07Ci0KLQkJc2VyaWFsQDEyMDAwIHsKLQkJCXN0YXR1cyA9ICJvayI7Ci0JCX07Ci0KLQkJc2F0YUA4MDAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCQluci1wb3J0cyA9IDwyPjsKLQkJfTsKLQl9OwotCi0JZ3Bpb19wb3dlcm9mZiB7Ci0JCWNvbXBhdGlibGUgPSAiZ3Bpby1wb3dlcm9mZiI7Ci0JCXBpbmN0cmwtMCA9IDwmcG14X3B3cl9vZmY+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfSElHSD47Ci0JfTsKLQotCXJlZ3VsYXRvcnMgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCXBpbmN0cmwtMCA9IDwmcG14X3VzYl9wb3dlcl9vZmY+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCi0JCXVzYjBfcG93ZXJfb2ZmOiByZWd1bGF0b3JAMSB7Ci0JCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCQlyZWcgPSA8MT47Ci0JCQlyZWd1bGF0b3ItbmFtZSA9ICJVU0IgUG93ZXIgT2ZmIjsKLQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OwotCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47Ci0JCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQlncGlvID0gPCZncGlvMCAyMSBHUElPX0FDVElWRV9ISUdIPjsKLQkJfTsKLQl9OwotfTsKLQotJm5hbmQgewotCXN0YXR1cyA9ICJva2F5IjsKLQljaGlwLWRlbGF5ID0gPDM1PjsKLQotCXBhcnRpdGlvbkAwIHsKLQkJbGFiZWwgPSAidWJvb3QiOwotCQlyZWcgPSA8MHgwMDAwMDAwIDB4MDEwMDAwMD47Ci0JCXJlYWQtb25seTsKLQl9OwotCXBhcnRpdGlvbkAxMDAwMDAgewotCQlsYWJlbCA9ICJ1Ym9vdF9lbnYiOwotCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47Ci0JfTsKLQlwYXJ0aXRpb25AMTgwMDAwIHsKLQkJbGFiZWwgPSAia2V5X3N0b3JlIjsKLQkJcmVnID0gPDB4MDE4MDAwMCAweDAwODAwMDA+OwotCX07Ci0JcGFydGl0aW9uQDIwMDAwMCB7Ci0JCWxhYmVsID0gImluZm8iOwotCQlyZWcgPSA8MHgwMjAwMDAwIDB4MDA4MDAwMD47Ci0JfTsKLQlwYXJ0aXRpb25AMjgwMDAwIHsKLQkJbGFiZWwgPSAiZXRjIjsKLQkJcmVnID0gPDB4MDI4MDAwMCAweDBhMDAwMDA+OwotCX07Ci0JcGFydGl0aW9uQGM4MDAwMCB7Ci0JCWxhYmVsID0gImtlcm5lbF8xIjsKLQkJcmVnID0gPDB4MGM4MDAwMCAweDBhMDAwMDA+OwotCX07Ci0JcGFydGl0aW9uQDE2ODAwMDAgewotCQlsYWJlbCA9ICJyb290ZnMxIjsKLQkJcmVnID0gPDB4MTY4MDAwMCAweDJmYzAwMDA+OwotCX07Ci0JcGFydGl0aW9uQDQ2NDAwMDAgewotCQlsYWJlbCA9ICJrZXJuZWxfMiI7Ci0JCXJlZyA9IDwweDQ2NDAwMDAgMHgwYTAwMDAwPjsKLQl9OwotCXBhcnRpdGlvbkA1MDQwMDAwIHsKLQkJbGFiZWwgPSAicm9vdGZzMiI7Ci0JCXJlZyA9IDwweDUwNDAwMDAgMHgyZmMwMDAwPjsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTMxMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uc2EzMTAuZHRzCmluZGV4IDBhMDdhZjkuLjYxMzlkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTMxMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbnNhMzEwLmR0cwpAQCAtMSw2ICsxLDYgQEAKIC9kdHMtdjEvOwogCi0jaW5jbHVkZSAia2lya3dvb2QtbnNhMzEwLWNvbW1vbi5kdHNpIgorI2luY2x1ZGUgImtpcmt3b29kLW5zYTN4MC1jb21tb24uZHRzaSIKIAogLyB7CiAJY29tcGF0aWJsZSA9ICJ6eXhlbCxuc2EzMTAiLCAibWFydmVsbCxraXJrd29vZC04OGY2MjgxIiwgIm1hcnZlbGwsa2lya3dvb2QiOwpAQCAtMTIsNiArMTIsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJbWJ1cyB7CkBAIC0yNSw3ICsyNiw3IEBACiAJfTsKIAogCW9jcEBmMTAwMDAwMCB7Ci0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQlwaW5jdHJsLTAgPSA8JnBteF91bmtub3duPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKQEAgLTU5LDI2ICs2MCw2IEBACiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKIAkJCX07CiAKLQkJCXBteF9idG5fcmVzZXQ6IHBteC1idG4tcmVzZXQgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzNiI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCX07Ci0KLQkJCXBteF9idG5fY29weTogcG14LWJ0bi1jb3B5IHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzciOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwotCi0JCQlwbXhfbGVkX2NvcHlfZ3JlZW46IHBteC1sZWQtY29weS1ncmVlbiB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDM5IjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJfTsKLQotCQkJcG14X2xlZF9jb3B5X3JlZDogcG14LWxlZC1jb3B5LXJlZCB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDQwIjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJfTsKLQogCQkJcG14X2xlZF9oZGRfZ3JlZW46IHBteC1sZWQtaGRkLWdyZWVuIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDEiOwogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CkBAIC05NCwxMCArNzUsNiBAQAogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CiAJCQl9OwogCi0JCQlwbXhfYnRuX3Bvd2VyOiBwbXgtYnRuLXBvd2VyIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDYiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwogCQl9OwogCiAJCWkyY0AxMTAwMCB7CkBAIC0xMTAsMzAgKzg3LDYgQEAKIAkJfTsKIAl9OwogCi0JZ3Bpb19rZXlzIHsKLQkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCXBpbmN0cmwtMCA9IDwmcG14X2J0bl9yZXNldCAmcG14X2J0bl9jb3B5ICZwbXhfYnRuX3Bvd2VyPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQotCQlidXR0b25AMSB7Ci0JCQlsYWJlbCA9ICJQb3dlciBCdXR0b24iOwotCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OwotCQkJZ3Bpb3MgPSA8JmdwaW8xIDE0IEdQSU9fQUNUSVZFX0hJR0g+OwotCQl9OwotCQlidXR0b25AMiB7Ci0JCQlsYWJlbCA9ICJDb3B5IEJ1dHRvbiI7Ci0JCQlsaW51eCxjb2RlID0gPEtFWV9DT1BZPjsKLQkJCWdwaW9zID0gPCZncGlvMSA1IEdQSU9fQUNUSVZFX0xPVz47Ci0JCX07Ci0JCWJ1dHRvbkAzIHsKLQkJCWxhYmVsID0gIlJlc2V0IEJ1dHRvbiI7Ci0JCQlsaW51eCxjb2RlID0gPEtFWV9SRVNUQVJUPjsKLQkJCWdwaW9zID0gPCZncGlvMSA0IEdQSU9fQUNUSVZFX0xPVz47Ci0JCX07Ci0JfTsKLQogCWdwaW8tbGVkcyB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJcGluY3RybC0wID0gPCZwbXhfbGVkX2VzYXRhX2dyZWVuICZwbXhfbGVkX2VzYXRhX3JlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbnNhMzEwYS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uc2EzMTBhLmR0cwppbmRleCAyN2NhNmE3Li4zZDJiM2Q0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uc2EzMTBhLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uc2EzMTBhLmR0cwpAQCAtMSw2ICsxLDYgQEAKIC9kdHMtdjEvOwogCi0jaW5jbHVkZSAia2lya3dvb2QtbnNhMzEwLWNvbW1vbi5kdHNpIgorI2luY2x1ZGUgImtpcmt3b29kLW5zYTN4MC1jb21tb24uZHRzaSIKIAogLyoKICAqIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gZGlmZmVyZW50IE5TQTMxMCBkZXNpZ25zLiBUaGlzIHZhcmlhbnQgZG9lcwpAQCAtMTcsMTAgKzE3LDExIEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJcG14X2xlZF9lc2F0YV9ncmVlbjogcG14LWxlZC1lc2F0YS1ncmVlbiB7CkBAIC0zOCwxMSArMzksNiBAQAogCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CiAJCQl9OwogCi0JCQlwbXhfdXNiX3Bvd2VyX29mZjogcG14LXVzYi1wb3dlci1vZmYgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyMSI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCX07Ci0KIAkJCXBteF9sZWRfc3lzX2dyZWVuOiBwbXgtbGVkLXN5cy1ncmVlbiB7CiAJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwpAQCAtNTMsMjYgKzQ5LDYgQEAKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwogCQkJfTsKIAotCQkJcG14X2J0bl9yZXNldDogcG14LWJ0bi1yZXNldCB7Ci0JCQkJbWFydmVsbCxwaW5zID0gIm1wcDM2IjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJfTsKLQotCQkJcG14X2J0bl9jb3B5OiBwbXgtYnRuLWNvcHkgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzNyI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCX07Ci0KLQkJCXBteF9sZWRfY29weV9ncmVlbjogcG14LWxlZC1jb3B5LWdyZWVuIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzkiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwotCi0JCQlwbXhfbGVkX2NvcHlfcmVkOiBwbXgtbGVkLWNvcHktcmVkIHsKLQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDAiOwotCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQl9OwotCiAJCQlwbXhfbGVkX2hkZF9ncmVlbjogcG14LWxlZC1oZGQtZ3JlZW4gewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MSI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKQEAgLTgzLDExICs1OSw2IEBACiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKIAkJCX07CiAKLQkJCXBteF9idG5fcG93ZXI6IHBteC1idG4tcG93ZXIgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NiI7Ci0JCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCX07Ci0KIAkJfTsKIAogCQlpMmNAMTEwMDAgewpAQCAtMTAwLDI4ICs3MSw2IEBACiAJCX07CiAJfTsKIAotCWdwaW9fa2V5cyB7Ci0JCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCWJ1dHRvbkAxIHsKLQkJCWxhYmVsID0gIlBvd2VyIEJ1dHRvbiI7Ci0JCQlsaW51eCxjb2RlID0gPEtFWV9QT1dFUj47Ci0JCQlncGlvcyA9IDwmZ3BpbzEgMTQgR1BJT19BQ1RJVkVfSElHSD47Ci0JCX07Ci0JCWJ1dHRvbkAyIHsKLQkJCWxhYmVsID0gIkNvcHkgQnV0dG9uIjsKLQkJCWxpbnV4LGNvZGUgPSA8S0VZX0NPUFk+OwotCQkJZ3Bpb3MgPSA8JmdwaW8xIDUgR1BJT19BQ1RJVkVfTE9XPjsKLQkJfTsKLQkJYnV0dG9uQDMgewotCQkJbGFiZWwgPSAiUmVzZXQgQnV0dG9uIjsKLQkJCWxpbnV4LGNvZGUgPSA8S0VZX1JFU1RBUlQ+OwotCQkJZ3Bpb3MgPSA8JmdwaW8xIDQgR1BJT19BQ1RJVkVfTE9XPjsKLQkJfTsKLQl9OwotCiAJZ3Bpby1sZWRzIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1uc2EzMjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbnNhMzIwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGY2ODZkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTMyMC5kdHMKQEAgLTAsMCArMSwyMTUgQEAKKy8qIERldmljZSB0cmVlIGZpbGUgZm9yIHRoZSBaeXhlbCBOU0EgMzIwIE5BUyBib3guCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBBZGFtIEJha2VyIDxsaW51eEBiYWtlci1uZXQub3JnLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgdXBvbiB0aGUgYm9hcmQgc2V0dXAgZmlsZSBjcmVhdGVkIGJ5IFBldGVyIFNjaGlsZG1hbm4gKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJraXJrd29vZC1uc2EzeDAtY29tbW9uLmR0c2kiCisKKy8geworCW1vZGVsID0gIlp5eGVsIE5TQTMyMCI7CisJY29tcGF0aWJsZSA9ICJ6eXhlbCxuc2EzMjAiLCAibWFydmVsbCxraXJrd29vZC04OGY2MjgxIiwgIm1hcnZlbGwsa2lya3dvb2QiOworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgyMDAwMDAwMD47CisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCW1idXMgeworCQlwY2llLWNvbnRyb2xsZXIgeworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlwY2llQDEsMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKwl9OworCisJb2NwQGYxMDAwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCQkJLyogU0FUQSBBY3Rpdml0eSBhbmQgUHJlc2VudCBwaW5zIGFyZSBub3QgY29ubmVjdGVkICovCisJCQlwbXhfc2F0YTA6IHBteC1zYXRhMCB7CisJCQkJbWFydmVsbCxwaW5zIDsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNhdGEwIjsKKwkJCX07CisKKwkJCXBteF9zYXRhMTogcG14LXNhdGExIHsKKwkJCQltYXJ2ZWxsLHBpbnMgOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2F0YTEiOworCQkJfTsKKworCQkJcG14X2xlZF9oZGQyX2dyZWVuOiBwbXgtbGVkLWhkZDItZ3JlZW4geworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxMiI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisKKwkJCXBteF9sZWRfaGRkMl9yZWQ6IHBteC1sZWQtaGRkMi1yZWQgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxMyI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisKKwkJCXBteF9tY3VfZGF0YTogcG14LW1jdS1kYXRhIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTQiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfbGVkX3VzYl9ncmVlbjogcG14LWxlZC11c2ItZ3JlZW4geworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNSI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisKKwkJCXBteF9tY3VfY2xrOiBwbXgtbWN1LWNsayB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDE2IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X21jdV9hY3Q6IHBteC1tY3UtYWN0IHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTciOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfbGVkX3N5c19ncmVlbjogcG14LWxlZC1zeXMtZ3JlZW4geworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyOCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisKKwkJCXBteF9sZWRfc3lzX29yYW5nZTogcG14LWxlZC1zeXMtb3JhbmdlIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjkiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfbGVkX2hkZDFfZ3JlZW46IHBteC1sZWQtaGRkMS1ncmVlbiB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X2xlZF9oZGQxX3JlZDogcG14LWxlZC1oZGQxLXJlZCB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQyIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X2h0cDogcG14LWh0cCB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQzIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJLyogQnV6emVyIG5lZWRzIHRvIGJlIHN3aXRjaGVkIGF0IGFyb3VuZCAxa0h6IHNvIGlzCisJCQkgICBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBncGlvLWJlZXBlciBkcml2ZXIuICovCisJCQlwbXhfYnV6emVyOiBwbXgtYnV6emVyIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDQiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfdmlkX2IxOiBwbXgtdmlkLWIxIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfcG93ZXJfcmVzdW1lX2RhdGE6IHBteC1wb3dlci1yZXN1bWUtZGF0YSB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ3IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X3Bvd2VyX3Jlc3VtZV9jbGs6IHBteC1wb3dlci1yZXN1bWUtY2xrIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQl9OworCisJCWkyY0AxMTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBjZjg1NjM6IHBjZjg1NjNANTEgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisJCX07CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQl1c2IwX3Bvd2VyOiByZWd1bGF0b3JAMSB7CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCX07CisJfTsKKworCWdwaW8tbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC0wID0gPCZwbXhfbGVkX2hkZDJfZ3JlZW4gJnBteF9sZWRfaGRkMl9yZWQKKwkJCSAgICAgJnBteF9sZWRfdXNiX2dyZWVuCisJCQkgICAgICZwbXhfbGVkX3N5c19ncmVlbiAmcG14X2xlZF9zeXNfb3JhbmdlCisJCQkgICAgICZwbXhfbGVkX2NvcHlfZ3JlZW4gJnBteF9sZWRfY29weV9yZWQKKwkJCSAgICAgJnBteF9sZWRfaGRkMV9ncmVlbiAmcG14X2xlZF9oZGQxX3JlZD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJZ3JlZW4tc3lzIHsKKwkJCWxhYmVsID0gIm5zYTMyMDpncmVlbjpzeXMiOworCQkJZ3Bpb3MgPSA8JmdwaW8wIDI4IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlvcmFuZ2Utc3lzIHsKKwkJCWxhYmVsID0gIm5zYTMyMDpvcmFuZ2U6c3lzIjsKKwkJCWdwaW9zID0gPCZncGlvMCAyOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJZ3JlZW4taGRkMSB7CisJCQlsYWJlbCA9ICJuc2EzMjA6Z3JlZW46aGRkMSI7CisJCQlncGlvcyA9IDwmZ3BpbzEgOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJcmVkLWhkZDEgeworCQkJbGFiZWwgPSAibnNhMzIwOnJlZDpoZGQxIjsKKwkJCWdwaW9zID0gPCZncGlvMSAxMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJZ3JlZW4taGRkMiB7CisJCQlsYWJlbCA9ICJuc2EzMjA6Z3JlZW46aGRkMiI7CisJCQlncGlvcyA9IDwmZ3BpbzAgMTIgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCXJlZC1oZGQyIHsKKwkJCWxhYmVsID0gIm5zYTMyMDpyZWQ6aGRkMiI7CisJCQlncGlvcyA9IDwmZ3BpbzAgMTMgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWdyZWVuLXVzYiB7CisJCQlsYWJlbCA9ICJuc2EzMjA6Z3JlZW46dXNiIjsKKwkJCWdwaW9zID0gPCZncGlvMCAxNSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJZ3JlZW4tY29weSB7CisJCQlsYWJlbCA9ICJuc2EzMjA6Z3JlZW46Y29weSI7CisJCQlncGlvcyA9IDwmZ3BpbzEgNyBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJcmVkLWNvcHkgeworCQkJbGFiZWwgPSAibnNhMzIwOnJlZDpjb3B5IjsKKwkJCWdwaW9zID0gPCZncGlvMSA4IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07CisKKwkvKiBUaGUgZm9sbG93aW5nIHBpbnMgYXJlIGN1cnJlbnRseSBub3QgYXNzaWduZWQgdG8gYSBkcml2ZXIsCisJICAgc29tZSBvZiB0aGVtIHNob3VsZCBiZSBjb25maWd1cmVkIGFzIGlucHV0cy4KKwlwaW5jdHJsLTAgPSA8JnBteF9tY3VfZGF0YSAmcG14X21jdV9jbGsgJnBteF9tY3VfYWN0CisJCSAgICAgJnBteF9odHAgJnBteF92aWRfYjEKKwkJICAgICAmcG14X3Bvd2VyX3Jlc3VtZV9kYXRhICZwbXhfcG93ZXJfcmVzdW1lX2Nsaz47ICovCit9OworCismbWRpbyB7CisJc3RhdHVzID0gIm9rYXkiOworCWV0aHBoeTA6IGV0aGVybmV0LXBoeUAxIHsKKwkJcmVnID0gPDE+OworCX07Cit9OworCismZXRoMCB7CisJc3RhdHVzID0gIm9rYXkiOworCWV0aGVybmV0MC1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHkwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTN4MC1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW5zYTN4MC1jb21tb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDc1YTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtbnNhM3gwLWNvbW1vbi5kdHNpCkBAIC0wLDAgKzEsMTU5IEBACisjaW5jbHVkZSAia2lya3dvb2QuZHRzaSIKKyNpbmNsdWRlICJraXJrd29vZC02MjgxLmR0c2kiCisKKy8geworCW1vZGVsID0gIlp5WEVMIE5TQTMxMCI7CisKKwltYnVzIHsKKwkJcGNpZS1jb250cm9sbGVyIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGNpZUAxLDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisJCX07CisJfTsKKworCW9jcEBmMTAwMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKKworCQkJcG14X3VzYl9wb3dlcjogcG14LXVzYi1wb3dlciB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDIxIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X3B3cl9vZmY6IHBteC1wd3Itb2ZmIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDgiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfYnRuX3Jlc2V0OiBwbXgtYnRuLXJlc2V0IHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzYiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCisJCQlwbXhfYnRuX2NvcHk6IHBteC1idG4tY29weSB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM3IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X2J0bl9wb3dlcjogcG14LWJ0bi1wb3dlciB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ2IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKworCQkJcG14X2xlZF9jb3B5X2dyZWVuOiBwbXgtbGVkLWNvcHktZ3JlZW4geworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzOSI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisKKwkJCXBteF9sZWRfY29weV9yZWQ6IHBteC1sZWQtY29weS1yZWQgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsQDEyMDAwIHsKKwkJCXN0YXR1cyA9ICJvayI7CisJCX07CisKKwkJc2F0YUA4MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCQluci1wb3J0cyA9IDwyPjsKKwkJfTsKKwl9OworCisJZ3Bpb19wb3dlcm9mZiB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1wb3dlcm9mZiI7CisJCXBpbmN0cmwtMCA9IDwmcG14X3B3cl9vZmY+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfSElHSD47CisJfTsKKworCWdwaW9fa2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwaW5jdHJsLTAgPSA8JnBteF9idG5fcmVzZXQgJnBteF9idG5fY29weSAmcG14X2J0bl9wb3dlcj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJYnV0dG9uQDEgeworCQkJbGFiZWwgPSAiUG93ZXIgQnV0dG9uIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1BPV0VSPjsKKwkJCWdwaW9zID0gPCZncGlvMSAxNCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwkJYnV0dG9uQDIgeworCQkJbGFiZWwgPSAiQ29weSBCdXR0b24iOworCQkJbGludXgsY29kZSA9IDxLRVlfQ09QWT47CisJCQlncGlvcyA9IDwmZ3BpbzEgNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCQlidXR0b25AMyB7CisJCQlsYWJlbCA9ICJSZXNldCBCdXR0b24iOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmZ3BpbzEgNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtMCA9IDwmcG14X3VzYl9wb3dlcj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJdXNiMF9wb3dlcjogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiVVNCIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMCAyMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwl9OworfTsKKworJm5hbmQgeworCXN0YXR1cyA9ICJva2F5IjsKKwljaGlwLWRlbGF5ID0gPDM1PjsKKworCXBhcnRpdGlvbkAwIHsKKwkJbGFiZWwgPSAidWJvb3QiOworCQlyZWcgPSA8MHgwMDAwMDAwIDB4MDEwMDAwMD47CisJCXJlYWQtb25seTsKKwl9OworCXBhcnRpdGlvbkAxMDAwMDAgeworCQlsYWJlbCA9ICJ1Ym9vdF9lbnYiOworCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJfTsKKwlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJbGFiZWwgPSAia2V5X3N0b3JlIjsKKwkJcmVnID0gPDB4MDE4MDAwMCAweDAwODAwMDA+OworCX07CisJcGFydGl0aW9uQDIwMDAwMCB7CisJCWxhYmVsID0gImluZm8iOworCQlyZWcgPSA8MHgwMjAwMDAwIDB4MDA4MDAwMD47CisJfTsKKwlwYXJ0aXRpb25AMjgwMDAwIHsKKwkJbGFiZWwgPSAiZXRjIjsKKwkJcmVnID0gPDB4MDI4MDAwMCAweDBhMDAwMDA+OworCX07CisJcGFydGl0aW9uQGM4MDAwMCB7CisJCWxhYmVsID0gImtlcm5lbF8xIjsKKwkJcmVnID0gPDB4MGM4MDAwMCAweDBhMDAwMDA+OworCX07CisJcGFydGl0aW9uQDE2ODAwMDAgeworCQlsYWJlbCA9ICJyb290ZnMxIjsKKwkJcmVnID0gPDB4MTY4MDAwMCAweDJmYzAwMDA+OworCX07CisJcGFydGl0aW9uQDQ2NDAwMDAgeworCQlsYWJlbCA9ICJrZXJuZWxfMiI7CisJCXJlZyA9IDwweDQ2NDAwMDAgMHgwYTAwMDAwPjsKKwl9OworCXBhcnRpdGlvbkA1MDQwMDAwIHsKKwkJbGFiZWwgPSAicm9vdGZzMiI7CisJCXJlZyA9IDwweDUwNDAwMDAgMHgyZmMwMDAwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5ibG9ja3NfYTYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtb3BlbmJsb2Nrc19hNi5kdHMKaW5kZXggMDY1MGJlYS4uZmI5ZGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtb3BlbmJsb2Nrc19hNi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtb3BlbmJsb2Nrc19hNi5kdHMKQEAgLTE0LDE5ICsxNCwxNiBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCBlYXJseXByaW50ayI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlvY3BAZjEwMDAwMDAgewogCQlzZXJpYWxAMTIwMDAgewotCQkJc3RhdHVzID0gIm9rIjsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKIAkJc2VyaWFsQDEyMTAwIHsKLQkJCXN0YXR1cyA9ICJvayI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MT47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCiAJCXNhdGFAODAwMDAgewpAQCAtMzYsOCArMzMsNiBAQAogCiAJCWkyY0AxMTEwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF90d3NpMT47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJCQlzMzUzOTBhOiBzMzUzOTBhQDMwIHsKIAkJCQljb21wYXRpYmxlID0gInNpaSxzMzUzOTBhIjsKQEAgLTQ1LDcgKzQwLDcgQEAKIAkJCX07CiAJCX07CiAKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAkJCXBpbmN0cmwtMCA9IDwmcG14X2RpcF9zd2l0Y2hlcyAmcG14X2dwaW9faGVhZGVyPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKQEAgLTEzMyw4ICsxMjgsNiBAQAogJm5hbmQgewogCWNoaXAtZGVsYXkgPSA8MjU+OwogCXN0YXR1cyA9ICJva2F5IjsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJcGFydGl0aW9uQDAgewogCQlsYWJlbCA9ICJ1Ym9vdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1vcGVuYmxvY2tzX2E3LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5ibG9ja3NfYTcuZHRzCmluZGV4IDM4NTIwYTIuLmQ1ZTNiYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5ibG9ja3NfYTcuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5ibG9ja3NfYTcuZHRzCkBAIC0yNiwxOSArMjYsMTYgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKIAkJc2VyaWFsQDEyMDAwIHsKLQkJCXN0YXR1cyA9ICJvayI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MD47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCiAJCXNlcmlhbEAxMjEwMCB7Ci0JCQlzdGF0dXMgPSAib2siOwotCQkJcGluY3RybC0wID0gPCZwbXhfdWFydDE+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAogCQlzYXRhQDgwMDAwIHsKQEAgLTQ4LDggKzQ1LDYgQEAKIAogCQlpMmNAMTExMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJcGluY3RybC0wID0gPCZwbXhfdHdzaTE+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJczI0YzAyOiBzMjRjMDJANTAgewogCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjMDIiOwpAQCAtNTcsNyArNTIsNyBAQAogCQkJfTsKIAkJfTsKIAotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcGluY3RybC0wID0gPCZwbXhfZGlwX3N3aXRjaGVzICZwbXhfZ3Bpb19oZWFkZXI+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIApAQCAtMTA5LDEzICsxMDQsNiBAQAogCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MSIsICJtcHA0MiIsICJtcHA0MyI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKIAkJCX07Ci0KLQkJCXBteF9nZTE6IHBteC1nZTEgewotCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyMCIsICJtcHAyMSIsICJtcHAyMiIsICJtcHAyMyIsCi0JCQkJCSAgICAgICAibXBwMjQiLCAibXBwMjUiLCAibXBwMjYiLCAibXBwMjciLAotCQkJCQkgICAgICAgIm1wcDMwIiwgIm1wcDMxIiwgIm1wcDMyIiwgIm1wcDMzIjsKLQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMSI7Ci0JCQl9OwogCQl9OwogCX07CiAKQEAgLTE1OCw4ICsxNDYsNiBAQAogJm5hbmQgewogCWNoaXAtZGVsYXkgPSA8MjU+OwogCXN0YXR1cyA9ICJva2F5IjsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJcGFydGl0aW9uQDAgewogCQlsYWJlbCA9ICJ1Ym9vdCI7CkBAIC0yMTMsOCArMTk5LDYgQEAKIAogJmV0aDEgewogCXN0YXR1cyA9ICJva2F5IjsKLQlwaW5jdHJsLTAgPSA8JnBteF9nZTE+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJZXRoZXJuZXQxLXBvcnRAMCB7CiAJCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTE+OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1vcGVucmQtYmFzZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1vcGVucmQtYmFzZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNTg5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5yZC1iYXNlLmR0cwpAQCAtMCwwICsxLDQyIEBACisvKgorICogTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCBEZXNjcmlwdGlvbgorICoKKyAqIEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIE9wZW5SRAorICogYmFzZSB2YXJpYW50IG9mIHRoZSBNYXJ2ZWxsIEtpcmt3b29kIERldmVsb3BtZW50IEJvYXJkLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAia2lya3dvb2Qtb3BlbnJkLmR0c2kiCisKKy8geworCW1vZGVsID0gIk9wZW5SRCBCYXNlIjsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwsb3BlbnJkLWJhc2UiLCAibWFydmVsbCxvcGVucmQiLCAibWFydmVsbCxraXJrd29vZC04OGY2MjgxIiwgIm1hcnZlbGwsa2lya3dvb2QiOworCisJb2NwQGYxMDAwMDAwIHsKKwkJc2VyaWFsQDEyMTAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworfTsKKworJm1kaW8geworCXN0YXR1cyA9ICJva2F5IjsKKworCWV0aHBoeTA6IGV0aGVybmV0LXBoeUA4IHsKKwkJcmVnID0gPDg+OworCX07Cit9OworCismZXRoMCB7CisJc3RhdHVzID0gIm9rYXkiOworCWV0aGVybmV0MC1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHkwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5yZC1jbGllbnQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtb3BlbnJkLWNsaWVudC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3YjljMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5yZC1jbGllbnQuZHRzCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBNYXJ2ZWxsIE9wZW5SRCBDbGllbnQgQm9hcmQgRGVzY3JpcHRpb24KKyAqCisgKiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBPcGVuUkQKKyAqIGNsaWVudCB2YXJpYW50IG9mIHRoZSBNYXJ2ZWxsIEtpcmt3b29kIERldmVsb3BtZW50IEJvYXJkLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAia2lya3dvb2Qtb3BlbnJkLmR0c2kiCisKKy8geworCW1vZGVsID0gIk9wZW5SRCBDbGllbnQiOworCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcGVucmQtY2xpZW50IiwgIm1hcnZlbGwsb3BlbnJkIiwgIm1hcnZlbGwsa2lya3dvb2QtODhmNjI4MSIsICJtYXJ2ZWxsLGtpcmt3b29kIjsKKworCW9jcEBmMTAwMDAwMCB7CisJCWkyY0AxMTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCQkJY3M0Mmw1MTogY3M0Mmw1MUA0YSB7CisJCQkJY29tcGF0aWJsZSA9ICJjaXJydXMsY3M0Mmw1MSI7CisJCQkJcmVnID0gPDB4NGE+OworCQkJfTsKKwkJfTsKKwl9OworCisJc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0ID0gImkycyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLG1jbGstZnMgPSA8MjU2PjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZhdWRpbzA+OworCQl9OworCisJCXNpbXBsZS1hdWRpby1jYXJkLGNvZGVjIHsKKwkJCXNvdW5kLWRhaSA9IDwmY3M0Mmw1MT47CisJCX07CisJfTsKK307CisKKyZtZGlvIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhwaHkwOiBldGhlcm5ldC1waHlAOCB7CisJCXJlZyA9IDw4PjsKKwl9OworCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAyNCB7CisJCXJlZyA9IDwyND47CisJfTsKK307CisKKyZldGgwIHsKKwlzdGF0dXMgPSAib2theSI7CisJZXRoZXJuZXQwLXBvcnRAMCB7CisJCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTA+OworCX07Cit9OworCismZXRoMSB7CisJc3RhdHVzID0gIm9rYXkiOworCWV0aGVybmV0MS1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHkxPjsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtb3BlbnJkLXVsdGltYXRlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5yZC11bHRpbWF0ZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMmY4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5yZC11bHRpbWF0ZS5kdHMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIE1hcnZlbGwgT3BlblJEIFVsdGltYXRlIEJvYXJkIERlc2NyaXB0aW9uCisgKgorICogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gT3BlblJECisgKiB1bHRpbWF0ZSB2YXJpYW50IG9mIHRoZSBNYXJ2ZWxsIEtpcmt3b29kIERldmVsb3BtZW50IEJvYXJkLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAia2lya3dvb2Qtb3BlbnJkLmR0c2kiCisKKy8geworCW1vZGVsID0gIk9wZW5SRCBVbHRpbWF0ZSI7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9wZW5yZC11bHRpbWF0ZSIsICJtYXJ2ZWxsLG9wZW5yZCIsICJtYXJ2ZWxsLGtpcmt3b29kLTg4ZjYyODEiLCAibWFydmVsbCxraXJrd29vZCI7CisKKwlvY3BAZjEwMDAwMDAgeworCQlpMmNAMTEwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwkJCWNzNDJsNTE6IGNzNDJsNTFANGEgeworCQkJCWNvbXBhdGlibGUgPSAiY2lycnVzLGNzNDJsNTEiOworCQkJCXJlZyA9IDwweDRhPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZtZGlvIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCXJlZyA9IDwwPjsKKwl9OworCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJcmVnID0gPDE+OworCX07Cit9OworCismZXRoMCB7CisJc3RhdHVzID0gIm9rYXkiOworCWV0aGVybmV0MC1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHkwPjsKKwl9OworfTsKKworJmV0aDEgeworCXN0YXR1cyA9ICJva2F5IjsKKwlldGhlcm5ldDEtcG9ydEAwIHsKKwkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MT47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1vcGVucmQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLW9wZW5yZC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzMwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1vcGVucmQuZHRzaQpAQCAtMCwwICsxLDkwIEBACisvKgorICogTWFydmVsbCBPcGVuUkQgKEJhc2V8Q2xpZW50fFVsdGltYXRlKSBCb2FyZCBEZXNjcmlwdGlvbgorICoKKyAqIEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIHRoZSB0aHJlZQorICogdmFyaWFudHMgb2YgdGhlIE1hcnZlbGwgS2lya3dvb2QgRGV2ZWxvcG1lbnQgQm9hcmQuCisgKi8KKworI2luY2x1ZGUgImtpcmt3b29kLmR0c2kiCisjaW5jbHVkZSAia2lya3dvb2QtNjI4MS5kdHNpIgorCisvIHsKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDIwMDAwMDAwPjsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOworCX07CisKKwltYnVzIHsKKwkJcGNpZS1jb250cm9sbGVyIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGNpZUAxLDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisJCX07CisJfTsKKworCW9jcEBmMTAwMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKKwkJCXBpbmN0cmwtMCA9IDwmcG14X3NlbGVjdDI4ICZwbXhfc2Rpb19jZCAmcG14X3NlbGVjdDM0PjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJCXBteF9zZWxlY3QyODogcG14LXNlbGVjdC11YXJ0LXNkIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjgiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X3NkaW9fY2Q6IHBteC1zZGlvLWNkIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjkiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X3NlbGVjdDM0OiBwbXgtc2VsZWN0LXJzMjMyLXJzNDg0IHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzQiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQl9OworCQlzZXJpYWxAMTIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCX07CisJCXNhdGFAODAwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQkJbnItcG9ydHMgPSA8Mj47CisJCX07CisJCW12c2Rpb0A5MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCQljZC1ncGlvcyA9IDwmZ3BpbzAgMjkgOT47CisJCX07CisJfTsKK307CisKKyZuYW5kIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC0wID0gPCZwbXhfbmFuZD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXBhcnRpdGlvbkAwIHsKKwkJbGFiZWwgPSAidS1ib290IjsKKwkJcmVnID0gPDB4MDAwMDAwMCAweDEwMDAwMD47CisJfTsKKworCXBhcnRpdGlvbkAxMDAwMDAgeworCQlsYWJlbCA9ICJ1SW1hZ2UiOworCQlyZWcgPSA8MHgwMTAwMDAwIDB4NDAwMDAwPjsKKwl9OworCisJcGFydGl0aW9uQDYwMDAwMCB7CisJCWxhYmVsID0gInJvb3QiOworCQlyZWcgPSA8MHgwNjAwMDAwIDB4MUZBMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtcmQ4OGY2MTkyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJkODhmNjE5Mi5kdHMKaW5kZXggZTlkZDg1MC4uMzVhMjlkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtcmQ4OGY2MTkyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yZDg4ZjYxOTIuZHRzCkBAIC0yNiw2ICsyNiw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW1idXMgewpAQCAtMzksNyArNDAsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcGluY3RybC0wID0gPCZwbXhfdXNiX3Bvd2VyPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKQEAgLTU2LDggKzU3LDYgQEAKIAogCQlzcGlAMTA2MDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJcGluY3RybC0wID0gPCZwbXhfc3BpPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAkJCW0yNXAxMjhAMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yZDg4ZjYyODEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJkODhmNjI4MS5kdHNpCmluZGV4IGQ2MzY4YzMuLjI2Y2YwZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJkODhmNjI4MS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJkODhmNjI4MS5kdHNpCkBAIC0yMiw2ICsyMiw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW1idXMgewpAQCAtMzUsNyArMzYsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcGluY3RybC0wID0gPCZwbXhfc2Rpb19jZD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yczIxMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yczIxMi5kdHMKaW5kZXggOTNlYzNkMC4uM2IxOWYxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtcnMyMTIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJzMjEyLmR0cwpAQCAtMjQsNiArMjQsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlncGlvLWZhbi0xMDAtMTUtMzUtMyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yczQwOS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yczQwOS5kdHMKaW5kZXggMzExZGY0ZS4uOTIxY2E0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtcnM0MDkuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJzNDA5LmR0cwpAQCAtMjQsNiArMjQsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAlncGlvLWZhbi0xNTAtMTUtMTggewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtcnM0MTEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtcnM0MTEuZHRzCmluZGV4IGY5MGRhODUuLjAyODUyYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXJzNDExLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1yczQxMS5kdHMKQEAgLTI0LDYgKzI0LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJZ3Bpby1mYW4tMTAwLTE1LTM1LTMgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc2hlZXZhcGx1Zy1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXNoZWV2YXBsdWctY29tbW9uLmR0c2kKaW5kZXggMWZmODQ4ZC4uNzE5NmM3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc2hlZXZhcGx1Zy1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1zaGVldmFwbHVnLWNvbW1vbi5kdHNpCkBAIC0xNywxMCArMTcsMTEgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAogCQkJcG14X3VzYl9wb3dlcl9lbmFibGU6IHBteC11c2ItcG93ZXItZW5hYmxlIHsKIAkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjkiOwpAQCAtNDQsOCArNDUsNiBAQAogCQkJfTsKIAkJfTsKIAkJc2VyaWFsQDEyMDAwIHsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAJfTsKQEAgLTcyLDggKzcxLDYgQEAKIH07CiAKICZuYW5kIHsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXN0YXR1cyA9ICJva2F5IjsKIAogCXBhcnRpdGlvbkAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1zeW5vbG9neS5kdHNpCmluZGV4IDQyMjdjOTcuLjgxMWUwOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc3lub2xvZ3kuZHRzaQpAQCAtMjUsNyArMjUsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcG14X2FsYXJtbGVkXzEyOiBwbXgtYWxhcm1sZWQtMTIgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxMiI7CiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKQEAgLTIxMyw4ICsyMTMsNiBAQAogCiAJCXNwaUAxMDYwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF9zcGk+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJbTI1cDgwQDAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMjU5LDggKzI1Nyw2IEBACiAJCWkyY0AxMTAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3R3c2kwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAkJCXJzNWMzNzI6IHJzNWMzNzJAMzIgewogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yNzcsMTQgKzI3MywxMCBAQAogCiAJCXNlcmlhbEAxMjAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MD47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQl9OwogCiAJCXNlcmlhbEAxMjEwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF91YXJ0MT47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQl9OwogCiAJCXBvd2Vyb2ZmQDEyMTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXQ1MzI1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXQ1MzI1LmR0cwppbmRleCAwYmQ3MGQ5Li42MTBlYzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10NTMyNS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdDUzMjUuZHRzCkBAIC0yNyw2ICsyNyw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW1idXMgewpAQCAtNDAsNyArNDEsNyBAQAogCX07CiAKIAlvY3BAZjEwMDAwMDAgewotCQlwaW5jdHJsOiBwaW5jdHJsQDEwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgewogCQkJcGluY3RybC0wID0gPCZwbXhfaTJzICZwbXhfc3lzcnN0PjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKQEAgLTY0LDEwICs2NSw2IEBACiAJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKIAkJCX07CiAKLQkJCS8qCi0JCQkgKiBSZWRlZmluZWQgZnJvbSBraXJrd29vZC02MjgxLmR0c2ksIGJlY2F1c2UKLQkJCSAqIHdlIGRvbid0IHVzZSBTUEkgQ1Mgb24gTVBQMCwgYnV0IG9uIE1QUDcuCi0JCQkgKi8KIAkJCXBteF9zcGk6IHBteC1zcGkgewogCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsICJtcHA3IjsKIAkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaSI7CkBAIC04Niw4ICs4Myw2IEBACiAJCX07CiAKIAkJc3BpQDEwNjAwIHsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3NwaT47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gIm9rYXkiOwogCiAJCQlmbGFzaEAwIHsKQEAgLTEyNyw2ICsxMjIsMTQgQEAKIAogCQlpMmNAMTEwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlhbGM1NjIxOiBhbGM1NjIxQDFhIHsKKwkJCQljb21wYXRpYmxlID0gInJlYWx0ZWssYWxjNTYyMSI7CisJCQkJcmVnID0gPDB4MWE+OworCQkJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisJCQkJYWRkLWN0cmwgPSA8MHgzNzAwPjsKKwkJCQlqYWNrLWRldC1jdHJsID0gPDB4NDgxMD47CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbEAxMjAwMCB7CkBAIC0xODQsNiArMTg3LDMxIEBACiAJCWdwaW9zID0gPCZncGlvMSAxNyBHUElPX0FDVElWRV9ISUdIPjsKIAl9OwogCisJc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0ID0gImkycyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLHJvdXRpbmcgPQorCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQTCIsCisJCQkiSGVhZHBob25lIEphY2siLCAiSFBSIiwKKwkJCSJTcGVha2VyIiwgIlNQS09VVCIsCisJCQkiU3BlYWtlciIsICJTUEtPVVROIiwKKwkJCSJNSUMxIiwgIk1pYyBKYWNrIiwKKwkJCSJNSUMyIiwgIk1pYyBKYWNrIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsd2lkZ2V0cyA9CisJCQkiSGVhZHBob25lIiwgIkhlYWRwaG9uZSBKYWNrIiwKKwkJCSJTcGVha2VyIiwgIlNwZWFrZXIiLAorCQkJIk1pY3JvcGhvbmUiLCAiTWljIEphY2siOworCisJCXNpbXBsZS1hdWRpby1jYXJkLG1jbGstZnMgPSA8MjU2PjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZhdWRpbz47CisJCX07CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsY29kZWMgeworCQkJc291bmQtZGFpID0gPCZhbGM1NjIxPjsKKwkJfTsKKwl9OwogfTsKIAogJm1kaW8gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdG9wa2ljay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10b3BraWNrLmR0cwppbmRleCA1ZmM4MTdjLi5mNWM4YzBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10b3BraWNrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10b3BraWNrLmR0cwpAQCAtMTQsMTAgKzE0LDExIEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CiAJfTsKIAogCW9jcEBmMTAwMDAwMCB7Ci0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQkvKgogCQkJICogU3dpdGNoIHBvc2l0aW9ucwogCQkJICoKQEAgLTg1LDkgKzg2LDcgQEAKIAkJfTsKIAogCQlzZXJpYWxAMTIwMDAgewotCQkJc3RhdHVzID0gIm9rIjsKLQkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQwPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAKIAkJc2F0YUA4MDAwMCB7CkBAIC05Niw5ICs5NSw3IEBACiAJCX07CiAKIAkJaTJjQDExMDAwIHsKLQkJCXN0YXR1cyA9ICJvayI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF90d3NpMD47Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCiAJCW12c2Rpb0A5MDAwMCB7CkBAIC0xNzUsOCArMTcyLDYgQEAKIAogJm5hbmQgewogCXN0YXR1cyA9ICJva2F5IjsKLQlwaW5jdHJsLTAgPSA8JnBteF9uYW5kPjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJcGFydGl0aW9uQDAgewogCQlsYWJlbCA9ICJ1LWJvb3QiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTktNjI4MS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czIxOS02MjgxLmR0cwppbmRleCBjMTdhZTQ1Li45NzY3ZDczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czIxOS02MjgxLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czIxOS02MjgxLmR0cwpAQCAtNiw3ICs2LDcgQEAKIAogLyB7CiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAogCQkJcGluY3RybC0wID0gPCZwbXhfcmFtX3NpemUgJnBteF9ib2FyZF9pZD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTktNjI4Mi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czIxOS02MjgyLmR0cwppbmRleCAwNzEzZDA3Mi4uYmZjMWEzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTktNjI4Mi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTktNjI4Mi5kdHMKQEAgLTE2LDcgKzE2LDcgQEAKIAl9OwogCiAJb2NwQGYxMDAwMDAwIHsKLQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCXBpbmN0cmw6IHBpbi1jb250cm9sbGVyQDEwMDAwIHsKIAogCQkJcGluY3RybC0wID0gPCZwbXhfcmFtX3NpemUgJnBteF9ib2FyZF9pZD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXRzMjE5LmR0c2kKaW5kZXggOTExZjNhOC4uZGY3ZjE1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTkuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czIxOS5kdHNpCkBAIC05LDYgKzksNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAltYnVzIHsKQEAgLTI1LDggKzI2LDYgQEAKIAkJaTJjQDExMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwotCQkJcGluY3RybC0wID0gPCZwbXhfdHdzaTA+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJczM1MzkwYTogczM1MzkwYUAzMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJzMzUzOTBhIjsKQEAgLTM0LDE2ICszMywxMCBAQAogCQkJfTsKIAkJfTsKIAkJc2VyaWFsQDEyMDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJcGluY3RybC0wID0gPCZwbXhfdWFydDA+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJfTsKIAkJc2VyaWFsQDEyMTAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJcGluY3RybC0wID0gPCZwbXhfdWFydDE+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJfTsKIAkJcG93ZXJvZmZAMTIxMDAgewogCQkJY29tcGF0aWJsZSA9ICJxbmFwLHBvd2VyLW9mZiI7CkBAIC01Miw4ICs0NSw2IEBACiAJCX07CiAJCXNwaUAxMDYwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBteF9zcGk+OwotCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJbTI1cDEyOEAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXRzNDE5LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czQxOS5kdHNpCmluZGV4IDFhOWM2MjQuLjMwYWI5M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXRzNDE5LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHM0MTkuZHRzaQpAQCAtMTQsNyArMTQsNyBAQAogCWNvbXBhdGlibGUgPSAicW5hcCx0czQxOSIsICJtYXJ2ZWxsLGtpcmt3b29kIjsKIAogCW9jcEBmMTAwMDAwMCB7Ci0JCXBpbmN0cmw6IHBpbmN0cmxAMTAwMDAgeworCQlwaW5jdHJsOiBwaW4tY29udHJvbGxlckAxMDAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJCQlwbXhfVVNCX2NvcHlfYnV0dG9uOiBwbXgtVVNCLWNvcHktYnV0dG9uIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC5kdHNpCmluZGV4IDkwMzg0NTguLmFmYzY0MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QuZHRzaQpAQCAtNDAsNyArNDAsNyBAQAogCQlwY2llLW1lbS1hcGVydHVyZSA9IDwweGUwMDAwMDAwIDB4MTAwMDAwMDA+OyAvKiAyNTYgTWlCIG1lbW9yeSBzcGFjZSAqLwogCQlwY2llLWlvLWFwZXJ0dXJlICA9IDwweGYyMDAwMDAwIDB4MTAwMDAwPjsgICAvKiAgIDEgTWlCICAgIEkvTyBzcGFjZSAqLwogCi0JCWNyeXB0b0AwMzAxIHsKKwkJY2VzYTogY3J5cHRvQDAzMDEgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWNyeXB0byI7CiAJCQlyZWcgPSA8TUJVU19JRCgweGYwLCAweDAxKSAweDMwMDAwIDB4MTAwMDA+LAogCQkJICAgICAgPE1CVVNfSUQoMHgwMywgMHgwMSkgMCAweDgwMD47CkBAIC02MSw2ICs2MSw4IEBACiAJCQljaGlwLWRlbGF5ID0gPDI1PjsKIAkJCS8qIHNldCBwYXJ0aXRpb24gbWFwIGFuZC9vciBjaGlwLWRlbGF5IGluIGJvYXJkIGR0cyAqLwogCQkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKKwkJCXBpbmN0cmwtMCA9IDwmcG14X25hbmQ+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAJfTsKQEAgLTcxLDEzICs3Myw1OSBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgeworCQkJLyogc2V0IGNvbXBhdGlibGUgcHJvcGVydHkgaW4gU29DIGZpbGUgKi8KKwkJCXJlZyA9IDwweDEwMDAwIDB4MjA+OworCisJCQlwbXhfZ2UxOiBwbXgtZ2UxIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLCAibXBwMjMiLAorCQkJCQkgICAgICAgIm1wcDI0IiwgIm1wcDI1IiwgIm1wcDI2IiwgIm1wcDI3IiwKKwkJCQkJICAgICAgICJtcHAzMCIsICJtcHAzMSIsICJtcHAzMiIsICJtcHAzMyI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOworCQkJfTsKKworCQkJcG14X25hbmQ6IHBteC1uYW5kIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsCisJCQkJCSAgICAgICAibXBwNCIsICJtcHA1IiwgIm1wcDE4IiwgIm1wcDE5IjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gIm5hbmQiOworCQkJfTsKKworCQkJLyoKKwkJCSAqIERlZmF1bHQgU1BJMCBwaW5jdHJsIHNldHRpbmcgd2l0aCBDU24gb24gbXBwMCwKKwkJCSAqIG92ZXJ3cml0ZSBtYXJ2ZWxsLHBpbnMgb24gYm9hcmQgbGV2ZWwgaWYgcmVxdWlyZWQuCisJCQkgKi8KKwkJCXBteF9zcGk6IHBteC1zcGkgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiLCAibXBwMiIsICJtcHAzIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaSI7CisJCQl9OworCisJCQlwbXhfdHdzaTA6IHBteC10d3NpMCB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDgiLCAibXBwOSI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJ0d3NpMCI7CisJCQl9OworCisJCQkvKgorCQkJICogRGVmYXVsdCBVQVJUIHBpbmN0cmwgc2V0dGluZyB3aXRob3V0IFJUUy9DVFMsCisJCQkgKiBvdmVyd3JpdGUgbWFydmVsbCxwaW5zIG9uIGJvYXJkIGxldmVsIGlmIHJlcXVpcmVkLgorCQkJICovCisJCQlwbXhfdWFydDA6IHBteC11YXJ0MCB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEwIiwgIm1wcDExIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInVhcnQwIjsKKwkJCX07CisKKwkJCXBteF91YXJ0MTogcG14LXVhcnQxIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTMiLCAibXBwMTQiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDEiOworCQkJfTsKKwkJfTsKKwogCQljb3JlX2NsazogY29yZS1jbG9ja3NAMTAwMzAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGtpcmt3b29kLWNvcmUtY2xvY2siOwogCQkJcmVnID0gPDB4MTAwMzAgMHg0PjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJfTsKIAotCQlzcGlAMTA2MDAgeworCQlzcGkwOiBzcGlAMTA2MDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLXNwaSI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtODUsNiArMTMzLDggQEAKIAkJCWludGVycnVwdHMgPSA8MjM+OwogCQkJcmVnID0gPDB4MTA2MDAgMHgyOD47CiAJCQljbG9ja3MgPSA8JmdhdGVfY2xrIDc+OworCQkJcGluY3RybC0wID0gPCZwbXhfc3BpPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCkBAIC0xMjAsMjQgKzE3MCwzMCBAQAogCQkJaW50ZXJydXB0cyA9IDwyOT47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJCWNsb2NrcyA9IDwmZ2F0ZV9jbGsgNz47CisJCQlwaW5jdHJsLTAgPSA8JnBteF90d3NpMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAotCQlzZXJpYWxAMTIwMDAgeworCQl1YXJ0MDogc2VyaWFsQDEyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOwogCQkJcmVnID0gPDB4MTIwMDAgMHgxMDA+OwogCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJaW50ZXJydXB0cyA9IDwzMz47CiAJCQljbG9ja3MgPSA8JmdhdGVfY2xrIDc+OworCQkJcGluY3RybC0wID0gPCZwbXhfdWFydDA+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKLQkJc2VyaWFsQDEyMTAwIHsKKwkJdWFydDE6IHNlcmlhbEAxMjEwMCB7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTBhIjsKIAkJCXJlZyA9IDwweDEyMTAwIDB4MTAwPjsKIAkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCWludGVycnVwdHMgPSA8MzQ+OwogCQkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKKwkJCXBpbmN0cmwtMCA9IDwmcG14X3VhcnQxPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCkBAIC0xNDYsNyArMjAyLDcgQEAKIAkJCXJlZyA9IDwweDIwMDAwIDB4ODA+LCA8MHgxNTAwIDB4MjA+OwogCQl9OwogCi0JCXN5c3RlbS1jb250cm9sbGVyQDIwMDAwIHsKKwkJc3lzYzogc3lzdGVtLWNvbnRyb2xsZXJAMjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLXN5c3RlbS1jb250cm9sbGVyIjsKIAkJCXJlZyA9IDwweDIwMDAwIDB4MTIwPjsKIAkJfTsKQEAgLTE5Niw3ICsyNTIsNyBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCi0JCWVoY2lANTAwMDAgeworCQl1c2IwOiBlaGNpQDUwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1laGNpIjsKIAkJCXJlZyA9IDwweDUwMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDE5PjsKQEAgLTIwNCw3ICsyNjAsNyBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCi0JCXhvckA2MDgwMCB7CisJCWRtYTA6IHhvckA2MDgwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24teG9yIjsKIAkJCXJlZyA9IDwweDYwODAwIDB4MTAwCiAJCQkgICAgICAgMHg2MEEwMCAweDEwMD47CkBAIC0yMjQsNyArMjgwLDcgQEAKIAkJCX07CiAJCX07CiAKLQkJeG9yQDYwOTAwIHsKKwkJZG1hMTogeG9yQDYwOTAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi14b3IiOwogCQkJcmVnID0gPDB4NjA5MDAgMHgxMDAKIAkJCSAgICAgICAweDYwQjAwIDB4MTAwPjsKQEAgLTI4Miw2ICszMzgsOCBAQAogCQkJcmVnID0gPDB4NzYwMDAgMHg0MDAwPjsKIAkJCWNsb2NrcyA9IDwmZ2F0ZV9jbGsgMTk+OwogCQkJbWFydmVsbCx0eC1jaGVja3N1bS1saW1pdCA9IDwxNjAwPjsKKwkJCXBpbmN0cmwtMCA9IDwmcG14X2dlMT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAogCQkJZXRoZXJuZXQxLXBvcnRAMCB7CkBAIC0zMTQsNiArMzcyLDcgQEAKIAogCQlhdWRpbzA6IGF1ZGlvLWNvbnRyb2xsZXJAYTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGtpcmt3b29kLWF1ZGlvIjsKKwkJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CiAJCQlyZWcgPSA8MHhhMDAwMCAweDIyMTA+OwogCQkJaW50ZXJydXB0cyA9IDwyND47CiAJCQljbG9ja3MgPSA8JmdhdGVfY2xrIDk+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtY2xvY2tzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC1jbG9ja3MuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZThjNzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtY2xvY2tzLmR0c2kKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIE9NQVAyNDIwIGNsb2NrIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyZwcmNtX2Nsb2NrcyB7CisJc3lzX2Nsa291dDJfc3JjX2dhdGU6IHN5c19jbGtvdXQyX3NyY19nYXRlIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1uby13YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTU+OworCQlyZWcgPSA8MHgwMDcwPjsKKwl9OworCisJc3lzX2Nsa291dDJfc3JjX211eDogc3lzX2Nsa291dDJfc3JjX211eCB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPiwgPCZzeXNfY2s+LCA8JmZ1bmNfOTZtX2NrPiwgPCZmdW5jXzU0bV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw4PjsKKwkJcmVnID0gPDB4MDA3MD47CisJfTsKKworCXN5c19jbGtvdXQyX3NyYzogc3lzX2Nsa291dDJfc3JjIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmc3lzX2Nsa291dDJfc3JjX2dhdGU+LCA8JnN5c19jbGtvdXQyX3NyY19tdXg+OworCX07CisKKwlzeXNfY2xrb3V0Mjogc3lzX2Nsa291dDIgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmc3lzX2Nsa291dDJfc3JjPjsKKwkJdGksYml0LXNoaWZ0ID0gPDExPjsKKwkJdGksbWF4LWRpdiA9IDw2ND47CisJCXJlZyA9IDwweDAwNzA+OworCQl0aSxpbmRleC1wb3dlci1vZi10d287CisJfTsKKworCWRzcF9nYXRlX2ljazogZHNwX2dhdGVfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8JmRzcF9mY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MT47CisJCXJlZyA9IDwweDA4MTA+OworCX07CisKKwlkc3BfZGl2X2ljazogZHNwX2Rpdl9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWRpdmlkZXItY2xvY2siOworCQljbG9ja3MgPSA8JmRzcF9mY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8NT47CisJCXRpLG1heC1kaXYgPSA8Mz47CisJCXJlZyA9IDwweDA4NDA+OworCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOworCX07CisKKwlkc3BfaWNrOiBkc3BfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHNwX2dhdGVfaWNrPiwgPCZkc3BfZGl2X2ljaz47CisJfTsKKworCWl2YTFfZ2F0ZV9pZmNrOiBpdmExX2dhdGVfaWZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxMD47CisJCXJlZyA9IDwweDA4MDA+OworCX07CisKKwlpdmExX2Rpdl9pZmNrOiBpdmExX2Rpdl9pZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1kaXZpZGVyLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHgwODQwPjsKKwkJdGksZGl2aWRlcnMgPSA8MD4sIDwxPiwgPDI+LCA8Mz4sIDw0PiwgPDA+LCA8Nj4sIDwwPiwgPDg+LCA8MD4sIDwwPiwgPDA+LCA8MTI+OworCX07CisKKwlpdmExX2lmY2s6IGl2YTFfaWZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8Jml2YTFfZ2F0ZV9pZmNrPiwgPCZpdmExX2Rpdl9pZmNrPjsKKwl9OworCisJaXZhMV9pZmNrX2RpdjogaXZhMV9pZmNrX2RpdiB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8Jml2YTFfaWZjaz47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrLWRpdiA9IDwyPjsKKwl9OworCisJaXZhMV9tcHVfaW50X2lmY2s6IGl2YTFfbXB1X2ludF9pZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmaXZhMV9pZmNrX2Rpdj47CisJCXRpLGJpdC1zaGlmdCA9IDw4PjsKKwkJcmVnID0gPDB4MDgwMD47CisJfTsKKworCXdkdDNfaWNrOiB3ZHQzX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI4PjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCXdkdDNfZmNrOiB3ZHQzX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI4PjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCW1tY19pY2s6IG1tY19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyNj47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwltbWNfZmNrOiBtbWNfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MjY+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJZWFjX2ljazogZWFjX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI0PjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCWVhY19mY2s6IGVhY19mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyND47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlpMmMxX2ZjazogaTJjMV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzEybV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxOT47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlpMmMyX2ZjazogaTJjMl9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzEybV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyMD47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwl2bHlucV9pY2s6IHZseW5xX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mz47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwl2bHlucV9nYXRlX2Zjazogdmx5bnFfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mz47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwljb3JlX2QxOF9jazogY29yZV9kMThfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDE4PjsKKwl9OworCisJdmx5bnFfbXV4X2Zjazogdmx5bnFfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz4sIDwmY29yZV9jaz4sIDwmY29yZV9kMl9jaz4sIDwmY29yZV9kM19jaz4sIDwmY29yZV9kNF9jaz4sIDwmZHVtbXlfY2s+LCA8JmNvcmVfZDZfY2s+LCA8JmR1bW15X2NrPiwgPCZjb3JlX2Q4X2NrPiwgPCZjb3JlX2Q5X2NrPiwgPCZkdW1teV9jaz4sIDwmZHVtbXlfY2s+LCA8JmNvcmVfZDEyX2NrPiwgPCZkdW1teV9jaz4sIDwmZHVtbXlfY2s+LCA8JmR1bW15X2NrPiwgPCZjb3JlX2QxNl9jaz4sIDwmZHVtbXlfY2s+LCA8JmNvcmVfZDE4X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE1PjsKKwkJcmVnID0gPDB4MDI0MD47CisJfTsKKworCXZseW5xX2Zjazogdmx5bnFfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmdmx5bnFfZ2F0ZV9mY2s+LCA8JnZseW5xX211eF9mY2s+OworCX07Cit9OworCismcHJjbV9jbG9ja2RvbWFpbnMgeworCWdmeF9jbGtkbTogZ2Z4X2Nsa2RtIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7CisJCWNsb2NrcyA9IDwmZ2Z4X2ljaz47CisJfTsKKworCWNvcmVfbDNfY2xrZG06IGNvcmVfbDNfY2xrZG0geworCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKKwkJY2xvY2tzID0gPCZjYW1fZmNrPiwgPCZ2bHlucV9pY2s+LCA8JnVzYl9mY2s+OworCX07CisKKwl3a3VwX2Nsa2RtOiB3a3VwX2Nsa2RtIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7CisJCWNsb2NrcyA9IDwmZHBsbF9jaz4sIDwmZW11bF9jaz4sIDwmZ3B0MV9pY2s+LCA8JmdwaW9zX2ljaz4sCisJCQkgPCZncGlvc19mY2s+LCA8Jm1wdV93ZHRfaWNrPiwgPCZtcHVfd2R0X2Zjaz4sCisJCQkgPCZzeW5jXzMya19pY2s+LCA8JndkdDFfaWNrPiwgPCZvbWFwY3RybF9pY2s+OworCX07CisKKwlpdmExX2Nsa2RtOiBpdmExX2Nsa2RtIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7CisJCWNsb2NrcyA9IDwmaXZhMV9tcHVfaW50X2lmY2s+OworCX07CisKKwlkc3NfY2xrZG06IGRzc19jbGtkbSB7CisJCWNvbXBhdGlibGUgPSAidGksY2xvY2tkb21haW4iOworCQljbG9ja3MgPSA8JmRzc19pY2s+LCA8JmRzc181NG1fZmNrPjsKKwl9OworCisJY29yZV9sNF9jbGtkbTogY29yZV9sNF9jbGtkbSB7CisJCWNvbXBhdGlibGUgPSAidGksY2xvY2tkb21haW4iOworCQljbG9ja3MgPSA8JnNzaV9sNF9pY2s+LCA8JmdwdDJfaWNrPiwgPCZncHQzX2ljaz4sIDwmZ3B0NF9pY2s+LAorCQkJIDwmZ3B0NV9pY2s+LCA8JmdwdDZfaWNrPiwgPCZncHQ3X2ljaz4sIDwmZ3B0OF9pY2s+LAorCQkJIDwmZ3B0OV9pY2s+LCA8JmdwdDEwX2ljaz4sIDwmZ3B0MTFfaWNrPiwgPCZncHQxMl9pY2s+LAorCQkJIDwmbWNic3AxX2ljaz4sIDwmbWNic3AyX2ljaz4sIDwmbWNzcGkxX2ljaz4sCisJCQkgPCZtY3NwaTFfZmNrPiwgPCZtY3NwaTJfaWNrPiwgPCZtY3NwaTJfZmNrPiwKKwkJCSA8JnVhcnQxX2ljaz4sIDwmdWFydDFfZmNrPiwgPCZ1YXJ0Ml9pY2s+LCA8JnVhcnQyX2Zjaz4sCisJCQkgPCZ1YXJ0M19pY2s+LCA8JnVhcnQzX2Zjaz4sIDwmY2FtX2ljaz4sCisJCQkgPCZtYWlsYm94ZXNfaWNrPiwgPCZ3ZHQ0X2ljaz4sIDwmd2R0NF9mY2s+LAorCQkJIDwmd2R0M19pY2s+LCA8JndkdDNfZmNrPiwgPCZtc3Byb19pY2s+LCA8Jm1zcHJvX2Zjaz4sCisJCQkgPCZtbWNfaWNrPiwgPCZtbWNfZmNrPiwgPCZmYWNfaWNrPiwgPCZmYWNfZmNrPiwKKwkJCSA8JmVhY19pY2s+LCA8JmVhY19mY2s+LCA8JmhkcV9pY2s+LCA8JmhkcV9mY2s+LAorCQkJIDwmaTJjMV9pY2s+LCA8JmkyYzFfZmNrPiwgPCZpMmMyX2ljaz4sIDwmaTJjMl9mY2s+LAorCQkJIDwmZGVzX2ljaz4sIDwmc2hhX2ljaz4sIDwmcm5nX2ljaz4sIDwmYWVzX2ljaz4sCisJCQkgPCZwa2FfaWNrPjsKKwl9OworfTsKKworJmZ1bmNfOTZtX2NrIHsKKwljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJY2xvY2tzID0gPCZhcGxsOTZfY2s+OworCWNsb2NrLW11bHQgPSA8MT47CisJY2xvY2stZGl2ID0gPDE+OworfTsKKworJmRzcF9kaXZfZmNrIHsKKwl0aSxkaXZpZGVycyA9IDwwPiwgPDE+LCA8Mj4sIDwzPiwgPDQ+LCA8MD4sIDw2PiwgPDA+LCA8OD4sIDwwPiwgPDA+LCA8MD4sIDwxMj47Cit9OworCismc3NpX3Nzcl9zc3RfZGl2X2ZjayB7CisJdGksZGl2aWRlcnMgPSA8MD4sIDwxPiwgPDI+LCA8Mz4sIDw0PiwgPDA+LCA8Nj4sIDwwPiwgPDg+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC5kdHNpCmluZGV4IDJkOTk3OTguLmU4M2IwNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAuZHRzaQpAQCAtMTQsNiArMTQsMzIgQEAKIAljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwIiwgInRpLG9tYXAyIjsKIAogCW9jcCB7CisJCXByY206IHByY21ANDgwMDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1wcmNtIjsKKwkJCXJlZyA9IDwweDQ4MDA4MDAwIDB4MTAwMD47CisKKwkJCXByY21fY2xvY2tzOiBjbG9ja3MgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJfTsKKworCQkJcHJjbV9jbG9ja2RvbWFpbnM6IGNsb2NrZG9tYWlucyB7CisJCQl9OworCQl9OworCisJCXNjcm06IHNjcm1ANDgwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1zY3JtIjsKKwkJCXJlZyA9IDwweDQ4MDAwMDAwIDB4MTAwMD47CisKKwkJCXNjcm1fY2xvY2tzOiBjbG9ja3MgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJfTsKKworCQkJc2NybV9jbG9ja2RvbWFpbnM6IGNsb2NrZG9tYWlucyB7CisJCQl9OworCQl9OworCiAJCWNvdW50ZXIzMms6IGNvdW50ZXJANDgwMDQwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwLWNvdW50ZXIzMmsiOwogCQkJcmVnID0gPDB4NDgwMDQwMDAgMHgyMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1jbG9ja3MuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLWNsb2Nrcy5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWY3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1jbG9ja3MuZHRzaQpAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgT01BUDI0MzAgY2xvY2sgZGF0YQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworJnNjcm1fY2xvY2tzIHsKKwltY2JzcDNfbXV4X2ZjazogbWNic3AzX211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+LCA8Jm1jYnNwX2Nsa3M+OworCQlyZWcgPSA8MHgwMmU4PjsKKwl9OworCisJbWNic3AzX2ZjazogbWNic3AzX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8Jm1jYnNwM19nYXRlX2Zjaz4sIDwmbWNic3AzX211eF9mY2s+OworCX07CisKKwltY2JzcDRfbXV4X2ZjazogbWNic3A0X211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+LCA8Jm1jYnNwX2Nsa3M+OworCQl0aSxiaXQtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDAyZTg+OworCX07CisKKwltY2JzcDRfZmNrOiBtY2JzcDRfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbWNic3A0X2dhdGVfZmNrPiwgPCZtY2JzcDRfbXV4X2Zjaz47CisJfTsKKworCW1jYnNwNV9tdXhfZmNrOiBtY2JzcDVfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz4sIDwmbWNic3BfY2xrcz47CisJCXRpLGJpdC1zaGlmdCA9IDw0PjsKKwkJcmVnID0gPDB4MDJlOD47CisJfTsKKworCW1jYnNwNV9mY2s6IG1jYnNwNV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZtY2JzcDVfZ2F0ZV9mY2s+LCA8Jm1jYnNwNV9tdXhfZmNrPjsKKwl9OworfTsKKworJnByY21fY2xvY2tzIHsKKwlpdmEyXzFfZ2F0ZV9pY2s6IGl2YTJfMV9nYXRlX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHNwX2Zjaz47CisJCXRpLGJpdC1zaGlmdCA9IDwwPjsKKwkJcmVnID0gPDB4MDgwMD47CisJfTsKKworCWl2YTJfMV9kaXZfaWNrOiBpdmEyXzFfZGl2X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmZHNwX2Zjaz47CisJCXRpLGJpdC1zaGlmdCA9IDw1PjsKKwkJdGksbWF4LWRpdiA9IDwzPjsKKwkJcmVnID0gPDB4MDg0MD47CisJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7CisJfTsKKworCWl2YTJfMV9pY2s6IGl2YTJfMV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZpdmEyXzFfZ2F0ZV9pY2s+LCA8Jml2YTJfMV9kaXZfaWNrPjsKKwl9OworCisJbWRtX2dhdGVfaWNrOiBtZG1fZ2F0ZV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwwPjsKKwkJcmVnID0gPDB4MGMxMD47CisJfTsKKworCW1kbV9kaXZfaWNrOiBtZG1fZGl2X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCXJlZyA9IDwweDBjNDA+OworCQl0aSxkaXZpZGVycyA9IDwwPiwgPDE+LCA8MD4sIDwwPiwgPDQ+LCA8MD4sIDw2PiwgPDA+LCA8MD4sIDw5PjsKKwl9OworCisJbWRtX2ljazogbWRtX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8Jm1kbV9nYXRlX2ljaz4sIDwmbWRtX2Rpdl9pY2s+OworCX07CisKKwltZG1fb3NjX2NrOiBtZG1fb3NjX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmb3NjX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE+OworCQlyZWcgPSA8MHgwYzAwPjsKKwl9OworCisJbWNic3AzX2ljazogbWNic3AzX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDM+OworCQlyZWcgPSA8MHgwMjE0PjsKKwl9OworCisJbWNic3AzX2dhdGVfZmNrOiBtY2JzcDNfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8Jm1jYnNwX2Nsa3M+OworCQl0aSxiaXQtc2hpZnQgPSA8Mz47CisJCXJlZyA9IDwweDAyMDQ+OworCX07CisKKwltY2JzcDRfaWNrOiBtY2JzcDRfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8ND47CisJCXJlZyA9IDwweDAyMTQ+OworCX07CisKKwltY2JzcDRfZ2F0ZV9mY2s6IG1jYnNwNF9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbWNic3BfY2xrcz47CisJCXRpLGJpdC1zaGlmdCA9IDw0PjsKKwkJcmVnID0gPDB4MDIwND47CisJfTsKKworCW1jYnNwNV9pY2s6IG1jYnNwNV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw1PjsKKwkJcmVnID0gPDB4MDIxND47CisJfTsKKworCW1jYnNwNV9nYXRlX2ZjazogbWNic3A1X2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZtY2JzcF9jbGtzPjsKKwkJdGksYml0LXNoaWZ0ID0gPDU+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJbWNzcGkzX2ljazogbWNzcGkzX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDk+OworCQlyZWcgPSA8MHgwMjE0PjsKKwl9OworCisJbWNzcGkzX2ZjazogbWNzcGkzX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfNDhtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDk+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJaWNyX2ljazogaWNyX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8JnN5c19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw2PjsKKwkJcmVnID0gPDB4MDQxMD47CisJfTsKKworCWkyY2hzMV9mY2s6IGkyY2hzMV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDI0MzAtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxOT47CisJCXJlZyA9IDwweDAyMDQ+OworCX07CisKKwlpMmNoczJfZmNrOiBpMmNoczJfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDMwLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MjA+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJdXNiaHNfaWNrOiB1c2Joc19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDY+OworCQlyZWcgPSA8MHgwMjE0PjsKKwl9OworCisJbW1jaHMxX2ljazogbW1jaHMxX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDc+OworCQlyZWcgPSA8MHgwMjE0PjsKKwl9OworCisJbW1jaHMxX2ZjazogbW1jaHMxX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDc+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJbW1jaHMyX2ljazogbW1jaHMyX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHgwMjE0PjsKKwl9OworCisJbW1jaHMyX2ZjazogbW1jaHMyX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJZ3BpbzVfaWNrOiBncGlvNV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxMD47CisJCXJlZyA9IDwweDAyMTQ+OworCX07CisKKwlncGlvNV9mY2s6IGdwaW81X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDEwPjsKKwkJcmVnID0gPDB4MDIwND47CisJfTsKKworCW1kbV9pbnRjX2ljazogbWRtX2ludGNfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTE+OworCQlyZWcgPSA8MHgwMjE0PjsKKwl9OworCisJbW1jaHNkYjFfZmNrOiBtbWNoc2RiMV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxNj47CisJCXJlZyA9IDwweDAyMDQ+OworCX07CisKKwltbWNoc2RiMl9mY2s6IG1tY2hzZGIyX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE3PjsKKwkJcmVnID0gPDB4MDIwND47CisJfTsKK307CisKKyZwcmNtX2Nsb2NrZG9tYWlucyB7CisJZ2Z4X2Nsa2RtOiBnZnhfY2xrZG0geworCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKKwkJY2xvY2tzID0gPCZnZnhfaWNrPjsKKwl9OworCisJY29yZV9sM19jbGtkbTogY29yZV9sM19jbGtkbSB7CisJCWNvbXBhdGlibGUgPSAidGksY2xvY2tkb21haW4iOworCQljbG9ja3MgPSA8JmNhbV9mY2s+LCA8JnVzYl9mY2s+LCA8JnVzYmhzX2ljaz47CisJfTsKKworCXdrdXBfY2xrZG06IHdrdXBfY2xrZG0geworCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKKwkJY2xvY2tzID0gPCZkcGxsX2NrPiwgPCZlbXVsX2NrPiwgPCZncHQxX2ljaz4sIDwmZ3Bpb3NfaWNrPiwKKwkJCSA8JmdwaW9zX2Zjaz4sIDwmbXB1X3dkdF9pY2s+LCA8Jm1wdV93ZHRfZmNrPiwKKwkJCSA8JnN5bmNfMzJrX2ljaz4sIDwmd2R0MV9pY2s+LCA8Jm9tYXBjdHJsX2ljaz4sCisJCQkgPCZpY3JfaWNrPjsKKwl9OworCisJZHNzX2Nsa2RtOiBkc3NfY2xrZG0geworCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKKwkJY2xvY2tzID0gPCZkc3NfaWNrPiwgPCZkc3NfNTRtX2Zjaz47CisJfTsKKworCWNvcmVfbDRfY2xrZG06IGNvcmVfbDRfY2xrZG0geworCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKKwkJY2xvY2tzID0gPCZzc2lfbDRfaWNrPiwgPCZncHQyX2ljaz4sIDwmZ3B0M19pY2s+LCA8JmdwdDRfaWNrPiwKKwkJCSA8JmdwdDVfaWNrPiwgPCZncHQ2X2ljaz4sIDwmZ3B0N19pY2s+LCA8JmdwdDhfaWNrPiwKKwkJCSA8JmdwdDlfaWNrPiwgPCZncHQxMF9pY2s+LCA8JmdwdDExX2ljaz4sIDwmZ3B0MTJfaWNrPiwKKwkJCSA8Jm1jYnNwMV9pY2s+LCA8Jm1jYnNwMl9pY2s+LCA8Jm1jYnNwM19pY2s+LAorCQkJIDwmbWNic3A0X2ljaz4sIDwmbWNic3A1X2ljaz4sIDwmbWNzcGkxX2ljaz4sCisJCQkgPCZtY3NwaTFfZmNrPiwgPCZtY3NwaTJfaWNrPiwgPCZtY3NwaTJfZmNrPiwKKwkJCSA8Jm1jc3BpM19pY2s+LCA8Jm1jc3BpM19mY2s+LCA8JnVhcnQxX2ljaz4sCisJCQkgPCZ1YXJ0MV9mY2s+LCA8JnVhcnQyX2ljaz4sIDwmdWFydDJfZmNrPiwgPCZ1YXJ0M19pY2s+LAorCQkJIDwmdWFydDNfZmNrPiwgPCZjYW1faWNrPiwgPCZtYWlsYm94ZXNfaWNrPiwKKwkJCSA8JndkdDRfaWNrPiwgPCZ3ZHQ0X2Zjaz4sIDwmbXNwcm9faWNrPiwgPCZtc3Byb19mY2s+LAorCQkJIDwmZmFjX2ljaz4sIDwmZmFjX2Zjaz4sIDwmaGRxX2ljaz4sIDwmaGRxX2Zjaz4sCisJCQkgPCZpMmMxX2ljaz4sIDwmaTJjaHMxX2Zjaz4sIDwmaTJjMl9pY2s+LCA8JmkyY2hzMl9mY2s+LAorCQkJIDwmZGVzX2ljaz4sIDwmc2hhX2ljaz4sIDwmcm5nX2ljaz4sIDwmYWVzX2ljaz4sCisJCQkgPCZwa2FfaWNrPiwgPCZtbWNoczFfaWNrPiwgPCZtbWNoczFfZmNrPiwKKwkJCSA8Jm1tY2hzMl9pY2s+LCA8Jm1tY2hzMl9mY2s+LCA8JmdwaW81X2ljaz4sCisJCQkgPCZncGlvNV9mY2s+LCA8Jm1kbV9pbnRjX2ljaz4sIDwmbW1jaHNkYjFfZmNrPiwKKwkJCSA8Jm1tY2hzZGIyX2Zjaz47CisJfTsKKworCW1kbV9jbGtkbTogbWRtX2Nsa2RtIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7CisJCWNsb2NrcyA9IDwmbWRtX29zY19jaz47CisJfTsKK307CisKKyZmdW5jXzk2bV9jayB7CisJY29tcGF0aWJsZSA9ICJ0aSxtdXgtY2xvY2siOworCWNsb2NrcyA9IDwmYXBsbDk2X2NrPiwgPCZhbHRfY2s+OworCXRpLGJpdC1zaGlmdCA9IDw0PjsKKwlyZWcgPSA8MHgwNTQwPjsKK307CisKKyZkc3BfZGl2X2ZjayB7CisJdGksbWF4LWRpdiA9IDw0PjsKKwl0aSxpbmRleC1zdGFydHMtYXQtb25lOworfTsKKworJnNzaV9zc3Jfc3N0X2Rpdl9mY2sgeworCXRpLG1heC1kaXYgPSA8NT47CisJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAuZHRzaQppbmRleCA0MmQyYzYxLi5jNGU4MDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLmR0c2kKQEAgLTE0LDYgKzE0LDMyIEBACiAJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQzMCIsICJ0aSxvbWFwMiI7CiAKIAlvY3AgeworCQlwcmNtOiBwcmNtQDQ5MDA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksb21hcDItcHJjbSI7CisJCQlyZWcgPSA8MHg0OTAwNjAwMCAweDEwMDA+OworCisJCQlwcmNtX2Nsb2NrczogY2xvY2tzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCX07CisKKwkJCXByY21fY2xvY2tkb21haW5zOiBjbG9ja2RvbWFpbnMgeworCQkJfTsKKwkJfTsKKworCQlzY3JtOiBzY3JtQDQ5MDAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksb21hcDItc2NybSI7CisJCQlyZWcgPSA8MHg0OTAwMjAwMCAweDEwMDA+OworCisJCQlzY3JtX2Nsb2NrczogY2xvY2tzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCX07CisKKwkJCXNjcm1fY2xvY2tkb21haW5zOiBjbG9ja2RvbWFpbnMgeworCQkJfTsKKwkJfTsKKwogCQljb3VudGVyMzJrOiBjb3VudGVyQDQ5MDIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcC1jb3VudGVyMzJrIjsKIAkJCXJlZyA9IDwweDQ5MDIwMDAwIDB4MjA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0eHgtY2xvY2tzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjR4eC1jbG9ja3MuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTM2NWNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0eHgtY2xvY2tzLmR0c2kKQEAgLTAsMCArMSwxMjQ0IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBPTUFQMjR4eCBjbG9jayBkYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworJnNjcm1fY2xvY2tzIHsKKwltY2JzcDFfbXV4X2ZjazogbWNic3AxX211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+LCA8Jm1jYnNwX2Nsa3M+OworCQl0aSxiaXQtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDAyNzQ+OworCX07CisKKwltY2JzcDFfZmNrOiBtY2JzcDFfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbWNic3AxX2dhdGVfZmNrPiwgPCZtY2JzcDFfbXV4X2Zjaz47CisJfTsKKworCW1jYnNwMl9tdXhfZmNrOiBtY2JzcDJfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz4sIDwmbWNic3BfY2xrcz47CisJCXRpLGJpdC1zaGlmdCA9IDw2PjsKKwkJcmVnID0gPDB4MDI3ND47CisJfTsKKworCW1jYnNwMl9mY2s6IG1jYnNwMl9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZtY2JzcDJfZ2F0ZV9mY2s+LCA8Jm1jYnNwMl9tdXhfZmNrPjsKKwl9OworfTsKKworJnByY21fY2xvY2tzIHsKKwlmdW5jXzMya19jazogZnVuY18zMmtfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCX07CisKKwlzZWN1cmVfMzJrX2NrOiBzZWN1cmVfMzJrX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwl9OworCisJdmlydF8xMm1fY2s6IHZpcnRfMTJtX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwl9OworCisJdmlydF8xM21fY2s6IHZpcnRfMTNtX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwl9OworCisJdmlydF8xOTIwMDAwMF9jazogdmlydF8xOTIwMDAwMF9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIwMDAwMD47CisJfTsKKworCXZpcnRfMjZtX2NrOiB2aXJ0XzI2bV9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNjAwMDAwMD47CisJfTsKKworCWFwbGxzX2Nsa2luX2NrOiBhcGxsc19jbGtpbl9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxtdXgtY2xvY2siOworCQljbG9ja3MgPSA8JnZpcnRfMTkyMDAwMDBfY2s+LCA8JnZpcnRfMjZtX2NrPiwgPCZ2aXJ0XzEzbV9jaz4sIDwmdmlydF8xMm1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MjM+OworCQlyZWcgPSA8MHgwNTQwPjsKKwl9OworCisJYXBsbHNfY2xraW5feDJfY2s6IGFwbGxzX2Nsa2luX3gyX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrcyA9IDwmYXBsbHNfY2xraW5fY2s+OworCQljbG9jay1tdWx0ID0gPDI+OworCQljbG9jay1kaXYgPSA8MT47CisJfTsKKworCW9zY19jazogb3NjX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmYXBsbHNfY2xraW5fY2s+LCA8JmFwbGxzX2Nsa2luX3gyX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDY+OworCQlyZWcgPSA8MHgwMDYwPjsKKwkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKKwl9OworCisJc3lzX2NrOiBzeXNfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmb3NjX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDY+OworCQl0aSxtYXgtZGl2ID0gPDM+OworCQlyZWcgPSA8MHgwMDYwPjsKKwkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKKwl9OworCisJYWx0X2NrOiBhbHRfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8NTQwMDAwMDA+OworCX07CisKKwltY2JzcF9jbGtzOiBtY2JzcF9jbGtzIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDB4MD47CisJfTsKKworCWRwbGxfY2s6IGRwbGxfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDItZHBsbC1jb3JlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZzeXNfY2s+LCA8JnN5c19jaz47CisJCXJlZyA9IDwweDA1MDA+LCA8MHgwNTQwPjsKKwl9OworCisJYXBsbDk2X2NrOiBhcGxsOTZfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDItYXBsbC1jbG9jayI7CisJCWNsb2NrcyA9IDwmc3lzX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI+OworCQl0aSxpZGxlc3Qtc2hpZnQgPSA8OD47CisJCXRpLGNsb2NrLWZyZXF1ZW5jeSA9IDw5NjAwMDAwMD47CisJCXJlZyA9IDwweDA1MDA+LCA8MHgwNTMwPiwgPDB4MDUyMD47CisJfTsKKworCWFwbGw1NF9jazogYXBsbDU0X2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAyLWFwbGwtY2xvY2siOworCQljbG9ja3MgPSA8JnN5c19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw2PjsKKwkJdGksaWRsZXN0LXNoaWZ0ID0gPDk+OworCQl0aSxjbG9jay1mcmVxdWVuY3kgPSA8NTQwMDAwMDA+OworCQlyZWcgPSA8MHgwNTAwPiwgPDB4MDUzMD4sIDwweDA1MjA+OworCX07CisKKwlmdW5jXzU0bV9jazogZnVuY181NG1fY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZhcGxsNTRfY2s+LCA8JmFsdF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw1PjsKKwkJcmVnID0gPDB4MDU0MD47CisJfTsKKworCWNvcmVfY2s6IGNvcmVfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZkcGxsX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDE+OworCX07CisKKwlmdW5jXzk2bV9jazogZnVuY185Nm1fY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCWFwbGw5Nl9kMl9jazogYXBsbDk2X2QyX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrcyA9IDwmYXBsbDk2X2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDI+OworCX07CisKKwlmdW5jXzQ4bV9jazogZnVuY180OG1fY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZhcGxsOTZfZDJfY2s+LCA8JmFsdF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwzPjsKKwkJcmVnID0gPDB4MDU0MD47CisJfTsKKworCWZ1bmNfMTJtX2NrOiBmdW5jXzEybV9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfNDhtX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDQ+OworCX07CisKKwlzeXNfY2xrb3V0X3NyY19nYXRlOiBzeXNfY2xrb3V0X3NyY19nYXRlIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1uby13YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Nz47CisJCXJlZyA9IDwweDAwNzA+OworCX07CisKKwlzeXNfY2xrb3V0X3NyY19tdXg6IHN5c19jbGtvdXRfc3JjX211eCB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPiwgPCZzeXNfY2s+LCA8JmZ1bmNfOTZtX2NrPiwgPCZmdW5jXzU0bV9jaz47CisJCXJlZyA9IDwweDAwNzA+OworCX07CisKKwlzeXNfY2xrb3V0X3NyYzogc3lzX2Nsa291dF9zcmMgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZzeXNfY2xrb3V0X3NyY19nYXRlPiwgPCZzeXNfY2xrb3V0X3NyY19tdXg+OworCX07CisKKwlzeXNfY2xrb3V0OiBzeXNfY2xrb3V0IHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOworCQljbG9ja3MgPSA8JnN5c19jbGtvdXRfc3JjPjsKKwkJdGksYml0LXNoaWZ0ID0gPDM+OworCQl0aSxtYXgtZGl2ID0gPDY0PjsKKwkJcmVnID0gPDB4MDA3MD47CisJCXRpLGluZGV4LXBvd2VyLW9mLXR3bzsKKwl9OworCisJZW11bF9jazogZW11bF9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzU0bV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwwPjsKKwkJcmVnID0gPDB4MDA3OD47CisJfTsKKworCW1wdV9jazogbXB1X2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQl0aSxtYXgtZGl2ID0gPDMxPjsKKwkJcmVnID0gPDB4MDE0MD47CisJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7CisJfTsKKworCWRzcF9nYXRlX2ZjazogZHNwX2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDA+OworCQlyZWcgPSA8MHgwODAwPjsKKwl9OworCisJZHNwX2Rpdl9mY2s6IGRzcF9kaXZfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1kaXZpZGVyLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJcmVnID0gPDB4MDg0MD47CisJfTsKKworCWRzcF9mY2s6IGRzcF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZkc3BfZ2F0ZV9mY2s+LCA8JmRzcF9kaXZfZmNrPjsKKwl9OworCisJY29yZV9sM19jazogY29yZV9sM19jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJdGksbWF4LWRpdiA9IDwzMT47CisJCXJlZyA9IDwweDAyNDA+OworCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOworCX07CisKKwlnZnhfM2RfZ2F0ZV9mY2s6IGdmeF8zZF9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9sM19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyPjsKKwkJcmVnID0gPDB4MDMwMD47CisJfTsKKworCWdmeF8zZF9kaXZfZmNrOiBnZnhfM2RfZGl2X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9sM19jaz47CisJCXRpLG1heC1kaXYgPSA8ND47CisJCXJlZyA9IDwweDAzNDA+OworCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOworCX07CisKKwlnZnhfM2RfZmNrOiBnZnhfM2RfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZ2Z4XzNkX2dhdGVfZmNrPiwgPCZnZnhfM2RfZGl2X2Zjaz47CisJfTsKKworCWdmeF8yZF9nYXRlX2ZjazogZ2Z4XzJkX2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE+OworCQlyZWcgPSA8MHgwMzAwPjsKKwl9OworCisJZ2Z4XzJkX2Rpdl9mY2s6IGdmeF8yZF9kaXZfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1kaXZpZGVyLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKKwkJdGksbWF4LWRpdiA9IDw0PjsKKwkJcmVnID0gPDB4MDM0MD47CisJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7CisJfTsKKworCWdmeF8yZF9mY2s6IGdmeF8yZF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZnZnhfMmRfZ2F0ZV9mY2s+LCA8JmdmeF8yZF9kaXZfZmNrPjsKKwl9OworCisJZ2Z4X2ljazogZ2Z4X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MD47CisJCXJlZyA9IDwweDAzMTA+OworCX07CisKKwlsNF9jazogbDRfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9sM19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw1PjsKKwkJdGksbWF4LWRpdiA9IDwzPjsKKwkJcmVnID0gPDB4MDI0MD47CisJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7CisJfTsKKworCWRzc19pY2s6IGRzc19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtbm8td2FpdC1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDA+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJZHNzMV9nYXRlX2ZjazogZHNzMV9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbm8td2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDA+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJY29yZV9kMl9jazogY29yZV9kMl9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9jay1kaXYgPSA8Mj47CisJfTsKKworCWNvcmVfZDNfY2s6IGNvcmVfZDNfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDM+OworCX07CisKKwljb3JlX2Q0X2NrOiBjb3JlX2Q0X2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrLWRpdiA9IDw0PjsKKwl9OworCisJY29yZV9kNV9jazogY29yZV9kNV9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9jay1kaXYgPSA8NT47CisJfTsKKworCWNvcmVfZDZfY2s6IGNvcmVfZDZfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDY+OworCX07CisKKwlkdW1teV9jazogZHVtbXlfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJfTsKKworCWNvcmVfZDhfY2s6IGNvcmVfZDhfY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDg+OworCX07CisKKwljb3JlX2Q5X2NrOiBjb3JlX2Q5X2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrLWRpdiA9IDw5PjsKKwl9OworCisJY29yZV9kMTJfY2s6IGNvcmVfZDEyX2NrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrLWRpdiA9IDwxMj47CisJfTsKKworCWNvcmVfZDE2X2NrOiBjb3JlX2QxNl9jayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfY2s+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9jay1kaXYgPSA8MTY+OworCX07CisKKwlkc3MxX211eF9mY2s6IGRzczFfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZzeXNfY2s+LCA8JmNvcmVfY2s+LCA8JmNvcmVfZDJfY2s+LCA8JmNvcmVfZDNfY2s+LCA8JmNvcmVfZDRfY2s+LCA8JmNvcmVfZDVfY2s+LCA8JmNvcmVfZDZfY2s+LCA8JmNvcmVfZDhfY2s+LCA8JmNvcmVfZDlfY2s+LCA8JmNvcmVfZDEyX2NrPiwgPCZjb3JlX2QxNl9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw4PjsKKwkJcmVnID0gPDB4MDI0MD47CisJfTsKKworCWRzczFfZmNrOiBkc3MxX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmRzczFfZ2F0ZV9mY2s+LCA8JmRzczFfbXV4X2Zjaz47CisJfTsKKworCWRzczJfZ2F0ZV9mY2s6IGRzczJfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW5vLXdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY180OG1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MT47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlkc3MyX211eF9mY2s6IGRzczJfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZzeXNfY2s+LCA8JmZ1bmNfNDhtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDEzPjsKKwkJcmVnID0gPDB4MDI0MD47CisJfTsKKworCWRzczJfZmNrOiBkc3MyX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmRzczJfZ2F0ZV9mY2s+LCA8JmRzczJfbXV4X2Zjaz47CisJfTsKKworCWRzc181NG1fZmNrOiBkc3NfNTRtX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfNTRtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJc3NpX3Nzcl9zc3RfZ2F0ZV9mY2s6IHNzaV9zc3Jfc3N0X2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJc3NpX3Nzcl9zc3RfZGl2X2Zjazogc3NpX3Nzcl9zc3RfZGl2X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyMD47CisJCXJlZyA9IDwweDAyNDA+OworCX07CisKKwlzc2lfc3NyX3NzdF9mY2s6IHNzaV9zc3Jfc3N0X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JnNzaV9zc3Jfc3N0X2dhdGVfZmNrPiwgPCZzc2lfc3NyX3NzdF9kaXZfZmNrPjsKKwl9OworCisJdXNiX2w0X2dhdGVfaWNrOiB1c2JfbDRfZ2F0ZV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9sM19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwwPjsKKwkJcmVnID0gPDB4MDIxND47CisJfTsKKworCXVzYl9sNF9kaXZfaWNrOiB1c2JfbDRfZGl2X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9sM19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyNT47CisJCXJlZyA9IDwweDAyNDA+OworCQl0aSxkaXZpZGVycyA9IDwwPiwgPDE+LCA8Mj4sIDwwPiwgPDQ+OworCX07CisKKwl1c2JfbDRfaWNrOiB1c2JfbDRfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmdXNiX2w0X2dhdGVfaWNrPiwgPCZ1c2JfbDRfZGl2X2ljaz47CisJfTsKKworCXNzaV9sNF9pY2s6IHNzaV9sNF9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxPjsKKwkJcmVnID0gPDB4MDIxND47CisJfTsKKworCWdwdDFfaWNrOiBncHQxX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8JnN5c19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwwPjsKKwkJcmVnID0gPDB4MDQxMD47CisJfTsKKworCWdwdDFfZ2F0ZV9mY2s6IGdwdDFfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDA+OworCQlyZWcgPSA8MHgwNDAwPjsKKwl9OworCisJZ3B0MV9tdXhfZmNrOiBncHQxX211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKKwkJcmVnID0gPDB4MDQ0MD47CisJfTsKKworCWdwdDFfZmNrOiBncHQxX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmdwdDFfZ2F0ZV9mY2s+LCA8JmdwdDFfbXV4X2Zjaz47CisJfTsKKworCWdwdDJfaWNrOiBncHQyX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDQ+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJZ3B0Ml9nYXRlX2ZjazogZ3B0Ml9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8ND47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlncHQyX211eF9mY2s6IGdwdDJfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz4sIDwmc3lzX2NrPiwgPCZhbHRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDAyNDQ+OworCX07CisKKwlncHQyX2ZjazogZ3B0Ml9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZncHQyX2dhdGVfZmNrPiwgPCZncHQyX211eF9mY2s+OworCX07CisKKwlncHQzX2ljazogZ3B0M19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw1PjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCWdwdDNfZ2F0ZV9mY2s6IGdwdDNfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDU+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJZ3B0M19tdXhfZmNrOiBncHQzX211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDQ+OworCQlyZWcgPSA8MHgwMjQ0PjsKKwl9OworCisJZ3B0M19mY2s6IGdwdDNfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZ3B0M19nYXRlX2Zjaz4sIDwmZ3B0M19tdXhfZmNrPjsKKwl9OworCisJZ3B0NF9pY2s6IGdwdDRfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Nj47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwlncHQ0X2dhdGVfZmNrOiBncHQ0X2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw2PjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCWdwdDRfbXV4X2ZjazogZ3B0NF9tdXhfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZzeXNfY2s+LCA8JmFsdF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw2PjsKKwkJcmVnID0gPDB4MDI0ND47CisJfTsKKworCWdwdDRfZmNrOiBncHQ0X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmdwdDRfZ2F0ZV9mY2s+LCA8JmdwdDRfbXV4X2Zjaz47CisJfTsKKworCWdwdDVfaWNrOiBncHQ1X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDc+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJZ3B0NV9nYXRlX2ZjazogZ3B0NV9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Nz47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlncHQ1X211eF9mY2s6IGdwdDVfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz4sIDwmc3lzX2NrPiwgPCZhbHRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8OD47CisJCXJlZyA9IDwweDAyNDQ+OworCX07CisKKwlncHQ1X2ZjazogZ3B0NV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZncHQ1X2dhdGVfZmNrPiwgPCZncHQ1X211eF9mY2s+OworCX07CisKKwlncHQ2X2ljazogZ3B0Nl9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw4PjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCWdwdDZfZ2F0ZV9mY2s6IGdwdDZfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDg+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJZ3B0Nl9tdXhfZmNrOiBncHQ2X211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDEwPjsKKwkJcmVnID0gPDB4MDI0ND47CisJfTsKKworCWdwdDZfZmNrOiBncHQ2X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmdwdDZfZ2F0ZV9mY2s+LCA8JmdwdDZfbXV4X2Zjaz47CisJfTsKKworCWdwdDdfaWNrOiBncHQ3X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDk+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJZ3B0N19nYXRlX2ZjazogZ3B0N19nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8OT47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlncHQ3X211eF9mY2s6IGdwdDdfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz4sIDwmc3lzX2NrPiwgPCZhbHRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTI+OworCQlyZWcgPSA8MHgwMjQ0PjsKKwl9OworCisJZ3B0N19mY2s6IGdwdDdfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZ3B0N19nYXRlX2Zjaz4sIDwmZ3B0N19tdXhfZmNrPjsKKwl9OworCisJZ3B0OF9pY2s6IGdwdDhfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTA+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJZ3B0OF9nYXRlX2ZjazogZ3B0OF9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTA+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJZ3B0OF9tdXhfZmNrOiBncHQ4X211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE0PjsKKwkJcmVnID0gPDB4MDI0ND47CisJfTsKKworCWdwdDhfZmNrOiBncHQ4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmdwdDhfZ2F0ZV9mY2s+LCA8JmdwdDhfbXV4X2Zjaz47CisJfTsKKworCWdwdDlfaWNrOiBncHQ5X2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDExPjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCWdwdDlfZ2F0ZV9mY2s6IGdwdDlfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDExPjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCWdwdDlfbXV4X2ZjazogZ3B0OV9tdXhfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZzeXNfY2s+LCA8JmFsdF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxNj47CisJCXJlZyA9IDwweDAyNDQ+OworCX07CisKKwlncHQ5X2ZjazogZ3B0OV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZncHQ5X2dhdGVfZmNrPiwgPCZncHQ5X211eF9mY2s+OworCX07CisKKwlncHQxMF9pY2s6IGdwdDEwX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDEyPjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCWdwdDEwX2dhdGVfZmNrOiBncHQxMF9nYXRlX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTI+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJZ3B0MTBfbXV4X2ZjazogZ3B0MTBfbXV4X2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz4sIDwmc3lzX2NrPiwgPCZhbHRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTg+OworCQlyZWcgPSA8MHgwMjQ0PjsKKwl9OworCisJZ3B0MTBfZmNrOiBncHQxMF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZncHQxMF9nYXRlX2Zjaz4sIDwmZ3B0MTBfbXV4X2Zjaz47CisJfTsKKworCWdwdDExX2ljazogZ3B0MTFfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTM+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJZ3B0MTFfZ2F0ZV9mY2s6IGdwdDExX2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxMz47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlncHQxMV9tdXhfZmNrOiBncHQxMV9tdXhfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZzeXNfY2s+LCA8JmFsdF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyMD47CisJCXJlZyA9IDwweDAyNDQ+OworCX07CisKKwlncHQxMV9mY2s6IGdwdDExX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmdwdDExX2dhdGVfZmNrPiwgPCZncHQxMV9tdXhfZmNrPjsKKwl9OworCisJZ3B0MTJfaWNrOiBncHQxMl9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxND47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwlncHQxMl9nYXRlX2ZjazogZ3B0MTJfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE0PjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCWdwdDEyX211eF9mY2s6IGdwdDEyX211eF9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDIyPjsKKwkJcmVnID0gPDB4MDI0ND47CisJfTsKKworCWdwdDEyX2ZjazogZ3B0MTJfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZ3B0MTJfZ2F0ZV9mY2s+LCA8JmdwdDEyX211eF9mY2s+OworCX07CisKKwltY2JzcDFfaWNrOiBtY2JzcDFfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTU+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJbWNic3AxX2dhdGVfZmNrOiBtY2JzcDFfZ2F0ZV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8Jm1jYnNwX2Nsa3M+OworCQl0aSxiaXQtc2hpZnQgPSA8MTU+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJbWNic3AyX2ljazogbWNic3AyX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE2PjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCW1jYnNwMl9nYXRlX2ZjazogbWNic3AyX2dhdGVfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZtY2JzcF9jbGtzPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE2PjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCW1jc3BpMV9pY2s6IG1jc3BpMV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxNz47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwltY3NwaTFfZmNrOiBtY3NwaTFfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY180OG1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MTc+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJbWNzcGkyX2ljazogbWNzcGkyX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDE4PjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCW1jc3BpMl9mY2s6IG1jc3BpMl9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzQ4bV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxOD47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwl1YXJ0MV9pY2s6IHVhcnQxX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDIxPjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCXVhcnQxX2ZjazogdWFydDFfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY180OG1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MjE+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJdWFydDJfaWNrOiB1YXJ0Ml9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyMj47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwl1YXJ0Ml9mY2s6IHVhcnQyX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfNDhtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDIyPjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCXVhcnQzX2ljazogdWFydDNfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDAyMTQ+OworCX07CisKKwl1YXJ0M19mY2s6IHVhcnQzX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfNDhtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI+OworCQlyZWcgPSA8MHgwMjA0PjsKKwl9OworCisJZ3Bpb3NfaWNrOiBncGlvc19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZzeXNfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDA0MTA+OworCX07CisKKwlncGlvc19mY2s6IGdwaW9zX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI+OworCQlyZWcgPSA8MHgwNDAwPjsKKwl9OworCisJbXB1X3dkdF9pY2s6IG1wdV93ZHRfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmc3lzX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDM+OworCQlyZWcgPSA8MHgwNDEwPjsKKwl9OworCisJbXB1X3dkdF9mY2s6IG1wdV93ZHRfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mz47CisJCXJlZyA9IDwweDA0MDA+OworCX07CisKKwlzeW5jXzMya19pY2s6IHN5bmNfMzJrX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8JnN5c19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxPjsKKwkJcmVnID0gPDB4MDQxMD47CisJfTsKKworCXdkdDFfaWNrOiB3ZHQxX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8JnN5c19jaz47CisJCXRpLGJpdC1zaGlmdCA9IDw0PjsKKwkJcmVnID0gPDB4MDQxMD47CisJfTsKKworCW9tYXBjdHJsX2ljazogb21hcGN0cmxfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmc3lzX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDU+OworCQlyZWcgPSA8MHgwNDEwPjsKKwl9OworCisJY2FtX2ZjazogY2FtX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxnYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwzMT47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwljYW1faWNrOiBjYW1faWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLW5vLXdhaXQtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwzMT47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwltYWlsYm94ZXNfaWNrOiBtYWlsYm94ZXNfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MzA+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJd2R0NF9pY2s6IHdkdDRfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mjk+OworCQlyZWcgPSA8MHgwMjEwPjsKKwl9OworCisJd2R0NF9mY2s6IHdkdDRfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mjk+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJbXNwcm9faWNrOiBtc3Byb19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyNz47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwltc3Byb19mY2s6IG1zcHJvX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOworCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDI3PjsKKwkJcmVnID0gPDB4MDIwMD47CisJfTsKKworCWZhY19pY2s6IGZhY19pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyNT47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwlmYWNfZmNrOiBmYWNfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY18xMm1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MjU+OworCQlyZWcgPSA8MHgwMjAwPjsKKwl9OworCisJaGRxX2ljazogaGRxX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOworCQljbG9ja3MgPSA8Jmw0X2NrPjsKKwkJdGksYml0LXNoaWZ0ID0gPDIzPjsKKwkJcmVnID0gPDB4MDIxMD47CisJfTsKKworCWhkcV9mY2s6IGhkcV9mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZmdW5jXzEybV9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyMz47CisJCXJlZyA9IDwweDAyMDA+OworCX07CisKKwlpMmMxX2ljazogaTJjMV9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwxOT47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwlpMmMyX2ljazogaTJjMl9pY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZsNF9jaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyMD47CisJCXJlZyA9IDwweDAyMTA+OworCX07CisKKwlncG1jX2ZjazogZ3BtY19mY2sgeworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAidGksZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKKwkJdGksY2xvY2stZGl2ID0gPDE+OworCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDwxPjsKKwkJcmVnID0gPDB4MDIzOD47CisJCXRpLGNsb2NrLW11bHQgPSA8MT47CisJfTsKKworCXNkbWFfZmNrOiBzZG1hX2ZjayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9jay1kaXYgPSA8MT47CisJfTsKKworCXNkbWFfaWNrOiBzZG1hX2ljayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OworCQl0aSxjbG9jay1kaXYgPSA8MT47CisJCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDA+OworCQlyZWcgPSA8MHgwMjM4PjsKKwkJdGksY2xvY2stbXVsdCA9IDwxPjsKKwl9OworCisJc2RyY19pY2s6IHNkcmNfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLGZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrcyA9IDwmY29yZV9sM19jaz47CisJCXRpLGNsb2NrLWRpdiA9IDwxPjsKKwkJdGksYXV0b2lkbGUtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDAyMzg+OworCQl0aSxjbG9jay1tdWx0ID0gPDE+OworCX07CisKKwlkZXNfaWNrOiBkZXNfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MD47CisJCXJlZyA9IDwweDAyMWM+OworCX07CisKKwlzaGFfaWNrOiBzaGFfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MT47CisJCXJlZyA9IDwweDAyMWM+OworCX07CisKKwlybmdfaWNrOiBybmdfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mj47CisJCXJlZyA9IDwweDAyMWM+OworCX07CisKKwlhZXNfaWNrOiBhZXNfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8Mz47CisJCXJlZyA9IDwweDAyMWM+OworCX07CisKKwlwa2FfaWNrOiBwa2FfaWNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmbDRfY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8ND47CisJCXJlZyA9IDwweDAyMWM+OworCX07CisKKwl1c2JfZmNrOiB1c2JfZmNrIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7CisJCWNsb2NrcyA9IDwmZnVuY180OG1fY2s+OworCQl0aSxiaXQtc2hpZnQgPSA8MD47CisJCXJlZyA9IDwweDAyMDQ+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzCmluZGV4IDRkZjY4YWQuLjljYmE5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS0zN3h4LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tMzd4eC5kdHMKQEAgLTg5LDcgKzg5LDE2IEBACiAJc3RhdHVzID0gImRpc2FibGVkIjsKIH07CiAKKyZ1YXJ0MSB7CisJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmaW50YyA3MiAmb21hcDNfcG14X2NvcmUgT01BUDNfVUFSVDFfUlg+OworfTsKKworJnVhcnQyIHsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDczICZvbWFwM19wbXhfY29yZSBPTUFQM19VQVJUMl9SWD47Cit9OworCiAmdWFydDMgeworCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmludGMgNzQgJm9tYXAzX3BteF9jb3JlIE9NQVAzX1VBUlQzX1JYPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmdWFydDNfcGlucz47CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGRwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxkcC5kdHMKaW5kZXggMGFiZTk4Ni4uNDc2ZmYxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGRwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1sZHAuZHRzCkBAIC0yMzQsNiArMjM0LDEwIEBACiAJfTsKIH07CiAKKyZ1YXJ0MyB7CisJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmaW50YyA3NCAmb21hcDNfcG14X2NvcmUgT01BUDNfVUFSVDNfUlg+OworfTsKKwogJnVzYl9vdGdfaHMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZtdXNiX3BpbnM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpCmluZGV4IGNjMWRjZTYuLmQ5NzMwODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxpbGx5LWE4M3guZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1saWxseS1hODN4LmR0c2kKQEAgLTE3Niw5ICsxNzYsNiBAQAogCiAmb21hcDNfcG14X2NvcmUyIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwKLQkJCSZoc3VzYjFfMl9waW5zCi0JPjsKIAogCWhzdXNiMV8yX3BpbnM6IHBpbm11eF9oc3VzYjFfMl9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKQEAgLTM1Nyw2ICszNTQsMTAgQEAKIAlwb3dlciA9IDw1MD47CiB9OwogCismbWNic3AyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmZ3BtYyB7CiAJcmFuZ2VzID0gPDAgMCAweDMwMDAwMDAwIDB4MTAwMDAwMD4sCiAJCTw3IDAgMHgxNTAwMDAwMCAweDAxMDAwMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKaW5kZXggMWE1N2I2MS4uMDU5YThmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKQEAgLTEwLDYgKzEwLDcgQEAKIC9kdHMtdjEvOwogCiAjaW5jbHVkZSAib21hcDM0eHgtaHMuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogCiAvIHsKIAltb2RlbCA9ICJOb2tpYSBOOTAwIjsKQEAgLTIxLDYgKzIyLDE3IEBACiAJCX07CiAJfTsKIAorCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCWhlYXJ0YmVhdCB7CisJCQlsYWJlbCA9ICJkZWJ1Zzo6c2xlZXAiOworCQkJZ3Bpb3MgPSA8JmdwaW82IDIgR1BJT19BQ1RJVkVfSElHSD47ICAvKiBncGlvMTYyICovCisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZkZWJ1Z19sZWRzPjsKKwkJfTsKKwl9OworCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAkJcmVnID0gPDB4ODAwMDAwMDAgMHgxMDAwMDAwMD47IC8qIDI1NiBNQiAqLwpAQCAtOTAsNiArMTAyLDE5IEBACiAJCQl9OwogCQl9OwogCX07CisKKwlzb3VuZDogbjkwMC1hdWRpbyB7CisJCWNvbXBhdGlibGUgPSAibm9raWEsbjkwMC1hdWRpbyI7CisKKwkJbm9raWEsY3B1LWRhaSA9IDwmbWNic3AyPjsKKwkJbm9raWEsYXVkaW8tY29kZWMgPSA8JnRsdjMyMGFpYzN4PiwgPCZ0bHYzMjBhaWMzeF9hdXg+OworCQlub2tpYSxoZWFkcGhvbmUtYW1wbGlmaWVyID0gPCZ0cGE2MTMwYTI+OworCisJCXR2b3V0LXNlbGVjdGlvbi1ncGlvcyA9IDwmZ3BpbzIgOCBHUElPX0FDVElWRV9ISUdIPjsgLyogNDAgKi8KKwkJamFjay1kZXRlY3Rpb24tZ3Bpb3MgPSA8JmdwaW82IDE3IEdQSU9fQUNUSVZFX0hJR0g+OyAvKiAxNzcgKi8KKwkJZWNpLXN3aXRjaC1ncGlvcyA9IDwmZ3BpbzYgMjIgR1BJT19BQ1RJVkVfSElHSD47IC8qIDE4MiAqLworCQlzcGVha2VyLWFtcGxpZmllci1ncGlvcyA9IDwmdHdsX2dwaW8gNyBHUElPX0FDVElWRV9ISUdIPjsKKwl9OwogfTsKIAogJm9tYXAzX3BteF9jb3JlIHsKQEAgLTEzMCw2ICsxNTUsMjEgQEAKIAkJPjsKIAl9OwogCisJZGVidWdfbGVkczogcGlubXV4X2RlYnVnX2xlZF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE5OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogbWNic3AxX2Nsa3guZ3Bpb18xNjIgKi8KKwkJPjsKKwl9OworCisJbWNzcGk0X3BpbnM6IHBpbm11eF9tY3NwaTRfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE1YyAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUxKSAvKiBtY3NwaTRfY2xrICovCisJCQkweDE2MiAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUxKSAvKiBtY3NwaTRfc29taSAqLworCQkJMHgxNjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTEpIC8qIG1jc3BpNF9zaW1vICovCisJCQkweDE2NiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMSkgLyogbWNzcGk0X2NzMCAqLworCQk+OworCX07CisKIAltbWMxX3BpbnM6IHBpbm11eF9tbWMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAogCQkJMHgxMTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbGsgKi8KQEAgLTE3Myw2ICsyMTMsMzcgQEAKIAkJCTB4MGRhIChQSU5fT1VUUFVUIHwgTVVYX01PREUxKSAgIC8qIGRzc19kYXRhMjMuc2RpX2Nsa24gKi8KIAkJPjsKIAl9OworCisJd2wxMjUxX3BpbnM6IHBpbm11eF93bDEyNTEgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgwY2UgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCQkvKiBncGlvIDg3ID0+IHdsMTI1MSBlbmFibGUgKi8KKwkJCTB4MDVhIChQSU5fSU5QVVQgfCBNVVhfTU9ERTQpCQkvKiBncGlvIDQyID0+IHdsMTI1MSBpcnEgKi8KKwkJPjsKKwl9OworCisJc3NpX3BpbnM6IHBpbm11eF9zc2kgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgxNTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIHNzaTFfcmR5X3R4ICovCisJCQkweDE0ZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJCS8qIHNzaTFfZmxhZ190eCAqLworCQkJMHgxNTIgKFBJTl9JTlBVVCB8IFdBS0VVUF9FTiB8IE1VWF9NT0RFNCkgLyogc3NpMV93YWtlX3R4IChjYXdha2UpICovCisJCQkweDE0YyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJCS8qIHNzaTFfZGF0X3R4ICovCisJCQkweDE1NCAoUElOX0lOUFVUIHwgTVVYX01PREUxKQkJLyogc3NpMV9kYXRfcnggKi8KKwkJCTB4MTU2IChQSU5fSU5QVVQgfCBNVVhfTU9ERTEpCQkvKiBzc2kxX2ZsYWdfcnggKi8KKwkJCTB4MTU4IChQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkJLyogc3NpMV9yZHlfcnggKi8KKwkJCTB4MTVhIChQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkJLyogc3NpMV93YWtlICovCisJCT47CisJfTsKKworCW1vZGVtX3BpbnM6IHBpbm11eF9tb2RlbSB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDBhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJCS8qIGdwaW8gNzAgPT4gY210X2FwZXNscHggKi8KKwkJCTB4MGIwIChQSU5fSU5QVVQgfCBXQUtFVVBfRU4gfCBNVVhfTU9ERTQpIC8qIGdwaW8gNzIgPT4gYXBlX3JzdF9ycSAqLworCQkJMHgwYjIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCQkvKiBncGlvIDczID0+IGNtdF9yc3RfcnEgKi8KKwkJCTB4MGI0IChQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkJLyogZ3BpbyA3NCA9PiBjbXRfZW4gKi8KKwkJCTB4MGI2IChQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkJLyogZ3BpbyA3NSA9PiBjbXRfcnN0ICovCisJCQkweDE1ZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJCS8qIGdwaW8gMTU3ID0+IGNtdF9ic2kgKi8KKwkJPjsKKwl9OwogfTsKIAogJmkyYzEgewpAQCAtMjgzLDU3ICszNTQsNTcgQEAKIH07CiAKICZ0d2xfa2V5cGFkIHsKLQlsaW51eCxrZXltYXAgPSA8IDB4MDAwMDAwMTAgLyogS0VZX1EgKi8KLQkJCSAweDAwMDEwMDE4IC8qIEtFWV9PICovCi0JCQkgMHgwMDAyMDAxOSAvKiBLRVlfUCAqLwotCQkJIDB4MDAwMzAwMzMgLyogS0VZX0NPTU1BICovCi0JCQkgMHgwMDA0MDAwZSAvKiBLRVlfQkFDS1NQQUNFICovCi0JCQkgMHgwMDA2MDAxZSAvKiBLRVlfQSAqLwotCQkJIDB4MDAwNzAwMWYgLyogS0VZX1MgKi8KKwlsaW51eCxrZXltYXAgPSA8IE1BVFJJWF9LRVkoMHgwMCwgMHgwMCwgS0VZX1EpCisJCQkgTUFUUklYX0tFWSgweDAwLCAweDAxLCBLRVlfTykKKwkJCSBNQVRSSVhfS0VZKDB4MDAsIDB4MDIsIEtFWV9QKQorCQkJIE1BVFJJWF9LRVkoMHgwMCwgMHgwMywgS0VZX0NPTU1BKQorCQkJIE1BVFJJWF9LRVkoMHgwMCwgMHgwNCwgS0VZX0JBQ0tTUEFDRSkKKwkJCSBNQVRSSVhfS0VZKDB4MDAsIDB4MDYsIEtFWV9BKQorCQkJIE1BVFJJWF9LRVkoMHgwMCwgMHgwNywgS0VZX1MpCiAKLQkJCSAweDAxMDAwMDExIC8qIEtFWV9XICovCi0JCQkgMHgwMTAxMDAyMCAvKiBLRVlfRCAqLwotCQkJIDB4MDEwMjAwMjEgLyogS0VZX0YgKi8KLQkJCSAweDAxMDMwMDIyIC8qIEtFWV9HICovCi0JCQkgMHgwMTA0MDAyMyAvKiBLRVlfSCAqLwotCQkJIDB4MDEwNTAwMjQgLyogS0VZX0ogKi8KLQkJCSAweDAxMDYwMDI1IC8qIEtFWV9LICovCi0JCQkgMHgwMTA3MDAyNiAvKiBLRVlfTCAqLworCQkJIE1BVFJJWF9LRVkoMHgwMSwgMHgwMCwgS0VZX1cpCisJCQkgTUFUUklYX0tFWSgweDAxLCAweDAxLCBLRVlfRCkKKwkJCSBNQVRSSVhfS0VZKDB4MDEsIDB4MDIsIEtFWV9GKQorCQkJIE1BVFJJWF9LRVkoMHgwMSwgMHgwMywgS0VZX0cpCisJCQkgTUFUUklYX0tFWSgweDAxLCAweDA0LCBLRVlfSCkKKwkJCSBNQVRSSVhfS0VZKDB4MDEsIDB4MDUsIEtFWV9KKQorCQkJIE1BVFJJWF9LRVkoMHgwMSwgMHgwNiwgS0VZX0spCisJCQkgTUFUUklYX0tFWSgweDAxLCAweDA3LCBLRVlfTCkKIAotCQkJIDB4MDIwMDAwMTIgLyogS0VZX0UgKi8KLQkJCSAweDAyMDEwMDM0IC8qIEtFWV9ET1QgKi8KLQkJCSAweDAyMDIwMDY3IC8qIEtFWV9VUCAqLwotCQkJIDB4MDIwMzAwMWMgLyogS0VZX0VOVEVSICovCi0JCQkgMHgwMjA1MDAyYyAvKiBLRVlfWiAqLwotCQkJIDB4MDIwNjAwMmQgLyogS0VZX1ggKi8KLQkJCSAweDAyMDcwMDJlIC8qIEtFWV9DICovCi0JCQkgMHgwMjA4MDA0MyAvKiBLRVlfRjkgKi8KKwkJCSBNQVRSSVhfS0VZKDB4MDIsIDB4MDAsIEtFWV9FKQorCQkJIE1BVFJJWF9LRVkoMHgwMiwgMHgwMSwgS0VZX0RPVCkKKwkJCSBNQVRSSVhfS0VZKDB4MDIsIDB4MDIsIEtFWV9VUCkKKwkJCSBNQVRSSVhfS0VZKDB4MDIsIDB4MDMsIEtFWV9FTlRFUikKKwkJCSBNQVRSSVhfS0VZKDB4MDIsIDB4MDUsIEtFWV9aKQorCQkJIE1BVFJJWF9LRVkoMHgwMiwgMHgwNiwgS0VZX1gpCisJCQkgTUFUUklYX0tFWSgweDAyLCAweDA3LCBLRVlfQykKKwkJCSBNQVRSSVhfS0VZKDB4MDIsIDB4MDgsIEtFWV9GOSkKIAotCQkJIDB4MDMwMDAwMTMgLyogS0VZX1IgKi8KLQkJCSAweDAzMDEwMDJmIC8qIEtFWV9WICovCi0JCQkgMHgwMzAyMDAzMCAvKiBLRVlfQiAqLwotCQkJIDB4MDMwMzAwMzEgLyogS0VZX04gKi8KLQkJCSAweDAzMDQwMDMyIC8qIEtFWV9NICovCi0JCQkgMHgwMzA1MDAzOSAvKiBLRVlfU1BBQ0UgKi8KLQkJCSAweDAzMDYwMDM5IC8qIEtFWV9TUEFDRSAqLwotCQkJIDB4MDMwNzAwNjkgLyogS0VZX0xFRlQgKi8KKwkJCSBNQVRSSVhfS0VZKDB4MDMsIDB4MDAsIEtFWV9SKQorCQkJIE1BVFJJWF9LRVkoMHgwMywgMHgwMSwgS0VZX1YpCisJCQkgTUFUUklYX0tFWSgweDAzLCAweDAyLCBLRVlfQikKKwkJCSBNQVRSSVhfS0VZKDB4MDMsIDB4MDMsIEtFWV9OKQorCQkJIE1BVFJJWF9LRVkoMHgwMywgMHgwNCwgS0VZX00pCisJCQkgTUFUUklYX0tFWSgweDAzLCAweDA1LCBLRVlfU1BBQ0UpCisJCQkgTUFUUklYX0tFWSgweDAzLCAweDA2LCBLRVlfU1BBQ0UpCisJCQkgTUFUUklYX0tFWSgweDAzLCAweDA3LCBLRVlfTEVGVCkKIAotCQkJIDB4MDQwMDAwMTQgLyogS0VZX1QgKi8KLQkJCSAweDA0MDEwMDZjIC8qIEtFWV9ET1dOICovCi0JCQkgMHgwNDAyMDA2YSAvKiBLRVlfUklHSFQgKi8KLQkJCSAweDA0MDQwMDFkIC8qIEtFWV9MRUZUQ1RSTCAqLwotCQkJIDB4MDQwNTAwNjQgLyogS0VZX1JJR0hUQUxUICovCi0JCQkgMHgwNDA2MDAyYSAvKiBLRVlfTEVGVFNISUZUICovCi0JCQkgMHgwNDA4MDA0NCAvKiBLRVlfRjEwICovCisJCQkgTUFUUklYX0tFWSgweDA0LCAweDAwLCBLRVlfVCkKKwkJCSBNQVRSSVhfS0VZKDB4MDQsIDB4MDEsIEtFWV9ET1dOKQorCQkJIE1BVFJJWF9LRVkoMHgwNCwgMHgwMiwgS0VZX1JJR0hUKQorCQkJIE1BVFJJWF9LRVkoMHgwNCwgMHgwNCwgS0VZX0xFRlRDVFJMKQorCQkJIE1BVFJJWF9LRVkoMHgwNCwgMHgwNSwgS0VZX1JJR0hUQUxUKQorCQkJIE1BVFJJWF9LRVkoMHgwNCwgMHgwNiwgS0VZX0xFRlRTSElGVCkKKwkJCSBNQVRSSVhfS0VZKDB4MDQsIDB4MDgsIEtFWV9GMTApCiAKLQkJCSAweDA1MDAwMDE1IC8qIEtFWV9ZICovCi0JCQkgMHgwNTA4MDA1NyAvKiBLRVlfRjExICovCisJCQkgTUFUUklYX0tFWSgweDA1LCAweDAwLCBLRVlfWSkKKwkJCSBNQVRSSVhfS0VZKDB4MDUsIDB4MDgsIEtFWV9GMTEpCiAKLQkJCSAweDA2MDAwMDE2IC8qIEtFWV9VICovCisJCQkgTUFUUklYX0tFWSgweDA2LCAweDAwLCBLRVlfVSkKIAotCQkJIDB4MDcwMDAwMTcgLyogS0VZX0kgKi8KLQkJCSAweDA3MDEwMDQxIC8qIEtFWV9GNyAqLwotCQkJIDB4MDcwMjAwNDIgLyogS0VZX0Y4ICovCisJCQkgTUFUUklYX0tFWSgweDA3LCAweDAwLCBLRVlfSSkKKwkJCSBNQVRSSVhfS0VZKDB4MDcsIDB4MDEsIEtFWV9GNykKKwkJCSBNQVRSSVhfS0VZKDB4MDcsIDB4MDIsIEtFWV9GOCkKIAkJCSA+OwogfTsKIApAQCAtNjA0LDYgKzY3NSwzMCBAQAogCX07CiB9OwogCismbWNzcGk0IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbWNzcGk0X3BpbnM+OworCisJd2wxMjUxQDAgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JndsMTI1MV9waW5zPjsKKworCQl2aW8tc3VwcGx5ID0gPCZ2aW8+OworCisJCWNvbXBhdGlibGUgPSAidGksd2wxMjUxIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CisKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCisJCXRpLHBvd2VyLWdwaW8gPSA8JmdwaW8zIDIzIEdQSU9fQUNUSVZFX0hJR0g+OyAvKiA4NyAqLworCisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8yPjsKKwkJaW50ZXJydXB0cyA9IDwxMCBJUlFfVFlQRV9OT05FPjsgLyogZ3BpbyBsaW5lIDQyICovCisJfTsKK307CisKICZ1c2Jfb3RnX2hzIHsKIAlpbnRlcmZhY2UtdHlwZSA9IDwwPjsKIAl1c2ItcGh5ID0gPCZ1c2IyX3BoeT47CkBAIC02MTgsMTEgKzcxMywxMyBAQAogfTsKIAogJnVhcnQyIHsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDczICZvbWFwM19wbXhfY29yZSBPTUFQM19VQVJUMl9SWD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OwogfTsKIAogJnVhcnQzIHsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDc0ICZvbWFwM19wbXhfY29yZSBPTUFQM19VQVJUM19SWD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnVhcnQzX3BpbnM+OwogfTsKQEAgLTY2MiwzICs3NTksNDggQEAKIAkJfTsKIAl9OwogfTsKKworJm1jYnNwMiB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZzc2lfcG9ydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzc2lfcGlucz47CisKKwl0aSxzc2ktY2F3YWtlLWdwaW8gPSA8JmdwaW81IDIzIEdQSU9fQUNUSVZFX0hJR0g+OyAvKiAxNTEgKi8KKworCW1vZGVtOiBoc2ktY2xpZW50IHsKKwkJY29tcGF0aWJsZSA9ICJub2tpYSxuOTAwLW1vZGVtIjsKKworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8Jm1vZGVtX3BpbnM+OworCisJCWhzaS1jaGFubmVsLWlkcyA9IDwwPiwgPDE+LCA8Mj4sIDwzPjsKKwkJaHNpLWNoYW5uZWwtbmFtZXMgPSAibWNzYWFiLWNvbnRyb2wiLAorCQkJCSAgICAic3BlZWNoLWNvbnRyb2wiLAorCQkJCSAgICAic3BlZWNoLWRhdGEiLAorCQkJCSAgICAibWNzYWFiLWRhdGEiOworCQloc2ktc3BlZWQta2JwcyA9IDw1NTAwMD47CisJCWhzaS1tb2RlID0gImZyYW1lIjsKKwkJaHNpLWZsb3cgPSAic3luY2hyb25pemVkIjsKKwkJaHNpLWFyYi1tb2RlID0gInJvdW5kLXJvYmluIjsKKworCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlvMyA4IElSUV9UWVBFX0VER0VfRkFMTElORz47IC8qIDcyICovCisKKwkJZ3Bpb3MgPSA8JmdwaW8zICA2IEdQSU9fQUNUSVZFX0hJR0g+LCAvKiA3MCAqLworCQkJPCZncGlvMyAgOSBHUElPX0FDVElWRV9ISUdIPiwgLyogNzMgKi8KKwkJCTwmZ3BpbzMgMTAgR1BJT19BQ1RJVkVfSElHSD4sIC8qIDc0ICovCisJCQk8JmdwaW8zIDExIEdQSU9fQUNUSVZFX0hJR0g+LCAvKiA3NSAqLworCQkJPCZncGlvNSAyOSBHUElPX0FDVElWRV9ISUdIPjsgLyogMTU3ICovCisJCWdwaW8tbmFtZXMgPSAiY210X2FwZXNscHgiLAorCQkJICAgICAiY210X3JzdF9ycSIsCisJCQkgICAgICJjbXRfZW4iLAorCQkJICAgICAiY210X3JzdCIsCisJCQkgICAgICJjbXRfYnNpIjsKKwl9OworfTsKKworJnNzaV9wb3J0MiB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTUwLW45LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTUwLW45LmR0c2kKaW5kZXggNWMyNmMxOC4uNzBhZGRjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjk1MC1uOS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45NTAtbjkuZHRzaQpAQCAtNjcsNiArNjcsMjAgQEAKIAl0aSxwdWxsZG93bnMJPSA8MHgwMDgxMDY+OyAvKiBCSVQoMSkgfCBCSVQoMikgfCBCSVQoOCkgfCBCSVQoMTUpICovCiB9OwogCisvKiBDU0ktMiByZWNlaXZlciAqLworJnZhdXgyIHsKKwlyZWd1bGF0b3ItbmFtZSA9ICJ2YXV4MiI7CisJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Cit9OworCisvKiBDYW1lcmFzICovCismdmF1eDMgeworCXJlZ3VsYXRvci1uYW1lID0gInZhdXgzIjsKKwlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKK307CisKICZpMmMyIHsKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMuZHRzaQppbmRleCA0MjMxMTkxLi5iMjg5MWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLmR0c2kKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQl1YXJ0MTogc2VyaWFsQDQ4MDZhMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDMtdWFydCI7CiAJCQlyZWcgPSA8MHg0ODA2YTAwMCAweDIwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw3Mj47CisJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDcyPjsKIAkJCWRtYXMgPSA8JnNkbWEgNDkgJnNkbWEgNTA+OwogCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MSI7CkBAIC0yNzcsNyArMjc3LDcgQEAKIAkJdWFydDI6IHNlcmlhbEA0ODA2YzAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXAzLXVhcnQiOwogCQkJcmVnID0gPDB4NDgwNmMwMDAgMHg0MDA+OwotCQkJaW50ZXJydXB0cyA9IDw3Mz47CisJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDczPjsKIAkJCWRtYXMgPSA8JnNkbWEgNTEgJnNkbWEgNTI+OwogCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MiI7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkJdWFydDM6IHNlcmlhbEA0OTAyMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXAzLXVhcnQiOwogCQkJcmVnID0gPDB4NDkwMjAwMDAgMHg0MDA+OwotCQkJaW50ZXJydXB0cyA9IDw3ND47CisJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDc0PjsKIAkJCWRtYXMgPSA8JnNkbWEgNTMgJnNkbWEgNTQ+OwogCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MyI7CkBAIC03NTcsNiArNzU3LDUxIEBACiAJCQkJY2xvY2stbmFtZXMgPSAiZmNrIjsKIAkJCX07CiAJCX07CisKKwkJc3NpOiBzc2ktY29udHJvbGxlckA0ODA1ODAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLG9tYXAzLXNzaSI7CisJCQl0aSxod21vZHMgPSAic3NpIjsKKworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJcmVnID0gPDB4NDgwNTgwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDQ4MDU5MDAwIDB4MTAwMD47CisJCQlyZWctbmFtZXMgPSAic3lzIiwKKwkJCQkgICAgImdkZCI7CisKKwkJCWludGVycnVwdHMgPSA8NzE+OworCQkJaW50ZXJydXB0LW5hbWVzID0gImdkZF9tcHUiOworCisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCisJCQlzc2lfcG9ydDE6IHNzaS1wb3J0QDQ4MDVhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLG9tYXAzLXNzaS1wb3J0IjsKKworCQkJCXJlZyA9IDwweDQ4MDVhMDAwIDB4ODAwPiwKKwkJCQkgICAgICA8MHg0ODA1YTgwMCAweDgwMD47CisJCQkJcmVnLW5hbWVzID0gInR4IiwKKwkJCQkJICAgICJyeCI7CisKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDY3PiwKKwkJCQkJICAgICA8Njg+OworCQkJfTsKKworCQkJc3NpX3BvcnQyOiBzc2ktcG9ydEA0ODA1YjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1zc2ktcG9ydCI7CisKKwkJCQlyZWcgPSA8MHg0ODA1YjAwMCAweDgwMD4sCisJCQkJICAgICAgPDB4NDgwNWI4MDAgMHg4MDA+OworCQkJCXJlZy1uYW1lcyA9ICJ0eCIsCisJCQkJCSAgICAicngiOworCisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisJCQkJaW50ZXJydXB0cyA9IDw2OT4sCisJCQkJCSAgICAgPDcwPjsKKwkJCX07CisJCX07CiAJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNHh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzR4eC5kdHNpCmluZGV4IDJlOTIzNjAuLjM4MTljMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNHh4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM0eHguZHRzaQpAQCAtNDAsNiArNDAsMTcgQEAKIAl9OwogfTsKIAorJnNzaSB7CisJc3RhdHVzID0gIm9rIjsKKworCWNsb2NrcyA9IDwmc3NpX3Nzcl9mY2s+LAorCQkgPCZzc2lfc3N0X2Zjaz4sCisJCSA8JnNzaV9pY2s+OworCWNsb2NrLW5hbWVzID0gInNzaV9zc3JfZmNrIiwKKwkJICAgICAgInNzaV9zc3RfZmNrIiwKKwkJICAgICAgInNzaV9pY2siOworfTsKKwogL2luY2x1ZGUvICJvbWFwMzR4eC1vbWFwMzZ4eC1jbG9ja3MuZHRzaSIKIC9pbmNsdWRlLyAib21hcDM2eHgtb21hcDM0MzBlczJwbHVzLWNsb2Nrcy5kdHNpIgogL2luY2x1ZGUvICJvbWFwMzZ4eC1hbTM1eHgtb21hcDM0MzBlczJwbHVzLWNsb2Nrcy5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM2eHgtY2xvY2tzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzZ4eC1jbG9ja3MuZHRzaQppbmRleCA2YjUyODBkLi4yMDBhZTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMzZ4eC1jbG9ja3MuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzZ4eC1jbG9ja3MuZHRzaQpAQCAtODMsNyArODMsNyBAQAogfTsKIAogJmRwbGw0X201eDJfbXVsX2NrIHsKLQljbG9jay1tdWx0ID0gPDE+OworCXRpLGNsb2NrLW11bHQgPSA8MT47CiB9OwogCiAmZHBsbDRfbTZ4Ml9tdWxfY2sgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM2eHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNnh4LmR0c2kKaW5kZXggMjJjZjQ2NC4uNTQxNzA0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM2eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzZ4eC5kdHNpCkBAIC03OCw2ICs3OCwxNyBAQAogCWNsb2NrLW5hbWVzID0gImZjayIsICJ0dl9kYWNfY2xrIjsKIH07CiAKKyZzc2kgeworCXN0YXR1cyA9ICJvayI7CisKKwljbG9ja3MgPSA8JnNzaV9zc3JfZmNrPiwKKwkJIDwmc3NpX3NzdF9mY2s+LAorCQkgPCZzc2lfaWNrPjsKKwljbG9jay1uYW1lcyA9ICJzc2lfc3NyX2ZjayIsCisJCSAgICAgICJzc2lfc3N0X2ZjayIsCisJCSAgICAgICJzc2lfaWNrIjsKK307CisKIC9pbmNsdWRlLyAib21hcDM0eHgtb21hcDM2eHgtY2xvY2tzLmR0c2kiCiAvaW5jbHVkZS8gIm9tYXAzNnh4LW9tYXAzNDMwZXMycGx1cy1jbG9ja3MuZHRzaSIKIC9pbmNsdWRlLyAib21hcDM2eHgtYW0zNXh4LW9tYXAzNDMwZXMycGx1cy1jbG9ja3MuZHRzaSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzeHh4LWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDN4eHgtY2xvY2tzLmR0c2kKaW5kZXggMTJiZTJiMy4uZTQ3ZmY2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDN4eHgtY2xvY2tzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDN4eHgtY2xvY2tzLmR0c2kKQEAgLTQ1MywxMCArNDUzLDExIEBACiAKIAlkcGxsNF9tNXgyX211bF9jazogZHBsbDRfbTV4Ml9tdWxfY2sgewogCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY29tcGF0aWJsZSA9ICJ0aSxmaXhlZC1mYWN0b3ItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGw0X201X2NrPjsKLQkJY2xvY2stbXVsdCA9IDwyPjsKLQkJY2xvY2stZGl2ID0gPDE+OworCQl0aSxjbG9jay1tdWx0ID0gPDI+OworCQl0aSxjbG9jay1kaXYgPSA8MT47CisJCXRpLHNldC1yYXRlLXBhcmVudDsKIAl9OwogCiAJZHBsbDRfbTV4Ml9jazogZHBsbDRfbTV4Ml9jayB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMKaW5kZXggOTZmNTFkOC4uY2Q1M2E2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtZHVvdmVyby1wYXJsb3IuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cwpAQCAtNDYsMzUgKzQ2LDM1IEBACiAKIAlsZWRfcGluczogcGlubXV4X2xlZF9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4ZDYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBhYmVfZG1pY19kaW4zLmdwaW9fMTIyICovCisJCQlPTUFQNF9JT1BBRCgweDExNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGFiZV9kbWljX2RpbjMuZ3Bpb18xMjIgKi8KIAkJPjsKIAl9OwogCiAJYnV0dG9uX3BpbnM6IHBpbm11eF9idXR0b25fcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweGQ0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQkvKiBhYmVfZG1pY19kaW4yLmdwaW9fMTIxICovCisJCQlPTUFQNF9JT1BBRCgweDExNCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMykJLyogYWJlX2RtaWNfZGluMi5ncGlvXzEyMSAqLwogCQk+OwogCX07CiAKIAlpMmMyX3BpbnM6IHBpbm11eF9pMmMyX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHhlNiAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjMl9zY2wgKi8KLQkJCTB4ZTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzJfc2RhICovCisJCQlPTUFQNF9JT1BBRCgweDEyNiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjMl9zY2wgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTI4LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMyX3NkYSAqLwogCQk+OwogCX07CiAKIAlpMmMzX3BpbnM6IHBpbm11eF9pMmMzX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHhlYSAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjM19zY2wgKi8KLQkJCTB4ZWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzNfc2RhICovCisJCQlPTUFQNF9JT1BBRCgweDEyYSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjM19zY2wgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTJjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMzX3NkYSAqLwogCQk+OwogCX07CiAKIAlzbXNjX3BpbnM6IHBpbm11eF9zbXNjX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgyOCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkJLyogZ3BtY19hMjAuZ3Bpb180NDogSVJRICovCi0JCQkweDJhIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQkvKiBncG1jX2EyMS5ncGlvXzQ1OiBuUmVzZXQgKi8KLQkJCTB4MzAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTMpCS8qIGdwbWNfYTI0LmdwaW9fNDg6IGFtZGl4IGVuYWJsZWQgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDY4LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCQkvKiBncG1jX2EyMC5ncGlvXzQ0OiBJUlEgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDZhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQkvKiBncG1jX2EyMS5ncGlvXzQ1OiBuUmVzZXQgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDcwLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQkvKiBncG1jX2EyNC5ncGlvXzQ4OiBhbWRpeCBlbmFibGVkICovCiAJCT47CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLmR0c2kKaW5kZXggYTUxNDc5MTEuLmU4NjBjY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLmR0c2kKQEAgLTY3LDEwMCArNjcsOTggQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwKIAkJCSZ0d2w2MDQwX3BpbnMKLQkJCSZtY3BkbV9waW5zCi0JCQkmbWNic3AxX3BpbnMKIAkJCSZoc3VzYmIxX3BpbnMKIAk+OwogCiAJdHdsNjA0MF9waW5zOiBwaW5tdXhfdHdsNjA0MF9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTI2IChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyogdXNiYjJfdWxwaXRsbF9ueHQuZ3Bpb18xNjAgKi8KLQkJCTB4MTYwIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiBzeXNfbmlycTIuc3lzX25pcnEyICovCisJCQlPTUFQNF9JT1BBRCgweDE2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIHVzYmIyX3VscGl0bGxfbnh0LmdwaW9fMTYwICovCisJCQlPTUFQNF9JT1BBRCgweDFhMCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogc3lzX25pcnEyLnN5c19uaXJxMiAqLwogCQk+OwogCX07CiAKIAltY3BkbV9waW5zOiBwaW5tdXhfbWNwZG1fcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweGM2IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIGFiZV9wZG1fdWxfZGF0YS5hYmVfcGRtX3VsX2RhdGEgKi8KLQkJCTB4YzggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkJLyogYWJlX3BkbV9kbF9kYXRhLmFiZV9wZG1fZGxfZGF0YSAqLwotCQkJMHhjYSAoUElOX0lOUFVUX1BVTExVUCAgIHwgTVVYX01PREUwKQkvKiBhYmVfcGRtX2ZyYW1lLmFiZV9wZG1fZnJhbWUgKi8KLQkJCTB4Y2MgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkJLyogYWJlX3BkbV9sYl9jbGsuYWJlX3BkbV9sYl9jbGsgKi8KLQkJCTB4Y2UgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkJLyogYWJlX2Nsa3MuYWJlX2Nsa3MgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTA2LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIGFiZV9wZG1fdWxfZGF0YS5hYmVfcGRtX3VsX2RhdGEgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTA4LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIGFiZV9wZG1fZGxfZGF0YS5hYmVfcGRtX2RsX2RhdGEgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTBhLCBQSU5fSU5QVVRfUFVMTFVQICAgfCBNVVhfTU9ERTApCS8qIGFiZV9wZG1fZnJhbWUuYWJlX3BkbV9mcmFtZSAqLworCQkJT01BUDRfSU9QQUQoMHgxMGMsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkJLyogYWJlX3BkbV9sYl9jbGsuYWJlX3BkbV9sYl9jbGsgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTBlLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIGFiZV9jbGtzLmFiZV9jbGtzICovCiAJCT47CiAJfTsKIAogCW1jYnNwMV9waW5zOiBwaW5tdXhfbWNic3AxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHhiZSAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogYWJlX21jYnNwMV9jbGt4LmFiZV9tY2JzcDFfY2xreCAqLwotCQkJMHhjMCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBhYmVfbWNic3AxX2RyLmFiZV9tY2JzcDFfZHIgKi8KLQkJCTB4YzIgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIGFiZV9tY2JzcDFfZHguYWJlX21jYnNwMV9keCAqLwotCQkJMHhjNCAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogYWJlX21jYnNwMV9mc3guYWJlX21jYnNwMV9mc3ggKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGZlLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiBhYmVfbWNic3AxX2Nsa3guYWJlX21jYnNwMV9jbGt4ICovCisJCQlPTUFQNF9JT1BBRCgweDEwMCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBhYmVfbWNic3AxX2RyLmFiZV9tY2JzcDFfZHIgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTAyLCBQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBhYmVfbWNic3AxX2R4LmFiZV9tY2JzcDFfZHggKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTA0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiBhYmVfbWNic3AxX2ZzeC5hYmVfbWNic3AxX2ZzeCAqLwogCQk+OwogCX07CiAKIAloc3VzYmIxX3BpbnM6IHBpbm11eF9oc3VzYmIxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHg4MiAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KQkvKiB1c2JiMV91bHBpdGxsX2Nsay51c2JiMV91bHBpcGh5X2NsayAqLwotCQkJMHg4NCAoUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJCS8qIHVzYmIxX3VscGl0bGxfc3RwLnVzYmIxX3VscGlwaHlfc3RwICovCi0JCQkweDg2IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfZGlyLnVzYmIxX3VscGlwaHlfZGlyICovCi0JCQkweDg4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfbnh0LnVzYmIxX3VscGlwaHlfbnh0ICovCi0JCQkweDhhIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfZGF0MC51c2JiMV91bHBpcGh5X2RhdDAgKi8KLQkJCTB4OGMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQxLnVzYmIxX3VscGlwaHlfZGF0MSAqLwotCQkJMHg4ZSAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KQkvKiB1c2JiMV91bHBpdGxsX2RhdDIudXNiYjFfdWxwaXBoeV9kYXQyICovCi0JCQkweDkwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfZGF0My51c2JiMV91bHBpcGh5X2RhdDMgKi8KLQkJCTB4OTIgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ0LnVzYmIxX3VscGlwaHlfZGF0NCAqLwotCQkJMHg5NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KQkvKiB1c2JiMV91bHBpdGxsX2RhdDUudXNiYjFfdWxwaXBoeV9kYXQ1ICovCi0JCQkweDk2IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfZGF0Ni51c2JiMV91bHBpcGh5X2RhdDYgKi8KLQkJCTB4OTggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ3LnVzYmIxX3VscGlwaHlfZGF0NyAqLworCQkJT01BUDRfSU9QQUQoMHgwYzIsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9jbGsudXNiYjFfdWxwaXBoeV9jbGsgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGM0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkJLyogdXNiYjFfdWxwaXRsbF9zdHAudXNiYjFfdWxwaXBoeV9zdHAgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGM2LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfZGlyLnVzYmIxX3VscGlwaHlfZGlyICovCisJCQlPTUFQNF9JT1BBRCgweDBjOCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KQkvKiB1c2JiMV91bHBpdGxsX254dC51c2JiMV91bHBpcGh5X254dCAqLworCQkJT01BUDRfSU9QQUQoMHgwY2EsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQwLnVzYmIxX3VscGlwaHlfZGF0MCAqLworCQkJT01BUDRfSU9QQUQoMHgwY2MsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQxLnVzYmIxX3VscGlwaHlfZGF0MSAqLworCQkJT01BUDRfSU9QQUQoMHgwY2UsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQyLnVzYmIxX3VscGlwaHlfZGF0MiAqLworCQkJT01BUDRfSU9QQUQoMHgwZDAsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQzLnVzYmIxX3VscGlwaHlfZGF0MyAqLworCQkJT01BUDRfSU9QQUQoMHgwZDIsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ0LnVzYmIxX3VscGlwaHlfZGF0NCAqLworCQkJT01BUDRfSU9QQUQoMHgwZDQsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ1LnVzYmIxX3VscGlwaHlfZGF0NSAqLworCQkJT01BUDRfSU9QQUQoMHgwZDYsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ2LnVzYmIxX3VscGlwaHlfZGF0NiAqLworCQkJT01BUDRfSU9QQUQoMHgwZDgsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ3LnVzYmIxX3VscGlwaHlfZGF0NyAqLwogCQk+OwogCX07CiAKIAloc3VzYjFwaHlfcGluczogcGlubXV4X2hzdXNiMXBoeV9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4NGMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBncG1jX3dhaXQxLmdwaW9fNjIgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDhjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyogZ3BtY193YWl0MS5ncGlvXzYyICovCiAJCT47CiAJfTsKIAogCXcyY2J3MDAxNV9waW5zOiBwaW5tdXhfdzJjYncwMDE1X3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgyNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGdwbWNfYTE5LmdwaW9fNDMgKi8KLQkJCTB4M2EgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJCS8qIGdwbWNfbmNzMy5ncGlvXzUzICovCisJCQlPTUFQNF9JT1BBRCgweDA2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGdwbWNfYTE5LmdwaW9fNDMgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCQkvKiBncG1jX25jczMuZ3Bpb181MyAqLwogCQk+OwogCX07CiAKIAlpMmMxX3BpbnM6IHBpbm11eF9pMmMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHhlMiAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjMV9zY2wgKi8KLQkJCTB4ZTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzFfc2RhICovCisJCQlPTUFQNF9JT1BBRCgweDEyMiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjMV9zY2wgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTI0LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NkYSAqLwogCQk+OwogCX07CiAKIAlpMmM0X3BpbnM6IHBpbm11eF9pMmM0X3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHhlZSAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjNF9zY2wgKi8KLQkJCTB4ZjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzRfc2RhICovCisJCQlPTUFQNF9JT1BBRCgweDEyZSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjNF9zY2wgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTMwLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmM0X3NkYSAqLwogCQk+OwogCX07CiAKIAltbWMxX3BpbnM6IHBpbm11eF9tbWMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHhhMiAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2NsayAqLwotCQkJMHhhNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtY2MxX2NtZCAqLwotCQkJMHhhNiAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtY2MxX2RhdDAgKi8KLQkJCTB4YTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQxICovCi0JCQkweGFhIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfZGF0MiAqLwotCQkJMHhhYyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2RhdDMgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGUyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfY2xrICovCisJCQlPTUFQNF9JT1BBRCgweDBlNCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtY2MxX2NtZCAqLworCQkJT01BUDRfSU9QQUQoMHgwZTYsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbWNjMV9kYXQwICovCisJCQlPTUFQNF9JT1BBRCgweDBlOCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2RhdDEgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGVhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfZGF0MiAqLworCQkJT01BUDRfSU9QQUQoMHgwZWMsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQzICovCiAJCT47CiAJfTsKIAogCW1tYzVfcGluczogcGlubXV4X21tYzVfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweDEwOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWM1X2NsayAqLwotCQkJMHgxMGEgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbWNjNV9jbWQgKi8KLQkJCTB4MTBjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1jYzVfZGF0MCAqLwotCQkJMHgxMGUgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jNV9kYXQxICovCi0JCQkweDExMCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWM1X2RhdDIgKi8KLQkJCTB4MTEyIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzVfZGF0MyAqLworCQkJT01BUDRfSU9QQUQoMHgxNDgsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jNV9jbGsgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTRhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1jYzVfY21kICovCisJCQlPTUFQNF9JT1BBRCgweDE0YywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtY2M1X2RhdDAgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTRlLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzVfZGF0MSAqLworCQkJT01BUDRfSU9QQUQoMHgxNTAsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jNV9kYXQyICovCisJCQlPTUFQNF9JT1BBRCgweDE1MiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWM1X2RhdDMgKi8KIAkJPjsKIAl9OwogfTsKQEAgLTIwMiw2ICsyMDAsMTggQEAKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIH07CiAKKyZtY2JzcDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtY2JzcDFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1jcGRtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbWNwZG1fcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJm1tYzEgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZtbWMxX3BpbnM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtcGFuZGEtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1wYW5kYS1jb21tb24uZHRzaQppbmRleCBkMmM0NWJmLi44Y2ZhM2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1wYW5kYS1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1wYW5kYS1jb21tb24uZHRzaQpAQCAtNDgxLDYgKzQ4MSwyMSBAQAogCXVzYi1zdXBwbHkgPSA8JnZ1c2I+OwogfTsKIAorJnVhcnQyIHsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZnaWMgR0lDX1NQSSA3MyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkgICAgICAgJm9tYXA0X3BteF9jb3JlIE9NQVA0X1VBUlQyX1JYPjsKK307CisKKyZ1YXJ0MyB7CisJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmZ2ljIEdJQ19TUEkgNzQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJICAgICAgICZvbWFwNF9wbXhfY29yZSBPTUFQNF9VQVJUM19SWD47Cit9OworCismdWFydDQgeworCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdpYyBHSUNfU1BJIDcwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCSAgICAgICAmb21hcDRfcG14X2NvcmUgT01BUDRfVUFSVDRfUlg+OworfTsKKwogJnVzYl9vdGdfaHMgewogCWludGVyZmFjZS10eXBlID0gPDE+OwogCW1vZGUgPSA8Mz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1zZHAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtc2RwLmR0cwppbmRleCA0ODk4M2M4Li4zZTFkYTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1zZHAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXNkcC5kdHMKQEAgLTU3MCwxNiArNTcwLDIyIEBACiB9OwogCiAmdWFydDIgeworCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdpYyBHSUNfU1BJIDczIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCSAgICAgICAmb21hcDRfcG14X2NvcmUgT01BUDRfVUFSVDJfUlg+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKIH07CiAKICZ1YXJ0MyB7CisJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmZ2ljIEdJQ19TUEkgNzQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJICAgICAgICZvbWFwNF9wbXhfY29yZSBPTUFQNF9VQVJUM19SWD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnVhcnQzX3BpbnM+OwogfTsKIAogJnVhcnQ0IHsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZnaWMgR0lDX1NQSSA3MCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkgICAgICAgJm9tYXA0X3BteF9jb3JlIE9NQVA0X1VBUlQ0X1JYPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmdWFydDRfcGlucz47CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLWR2ay1vbTQ0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXZhci1kdmstb200NC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4ZDc5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXZhci1kdmstb200NC5kdHMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBKb2FjaGltIEVhc3R3b29kIDxtYW5hYmlhbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworL2R0cy12MS87CisKKyNpbmNsdWRlICJvbWFwNC12YXItc29tLW9tNDQuZHRzaSIKKyNpbmNsdWRlICJvbWFwNC12YXItc29tLW9tNDQtd2xhbi5kdHNpIgorI2luY2x1ZGUgIm9tYXA0LXZhci1vbTQ0Y3VzdG9tYm9hcmQuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiVmFyaXNjaXRlIFZBUi1EVkstT000NCI7CisJY29tcGF0aWJsZSA9ICJ2YXJpc2NpdGUsdmFyLWR2ay1vbTQ0IiwgInZhcmlzY2l0ZSx2YXItc29tLW9tNDQiLCAidGksb21hcDQ0NjAiLCAidGksb21hcDQiOworCisJYWxpYXNlcyB7CisJCWRpc3BsYXkwID0gJmxjZDA7CisJCWRpc3BsYXkxID0gJmhkbWkwOworCX07CisKKwlsY2QwOiBkaXNwbGF5IHsKKwkJY29tcGF0aWJsZSA9ICJpbm5vbHV4LGF0MDcwdG44MyIsICJwYW5lbC1kcGkiOworCQlsYWJlbCA9ICJsY2QiOworCQlwYW5lbC10aW1pbmcgeworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKworCQkJaGJhY2stcG9yY2ggPSA8NDA+OworCQkJaGFjdGl2ZSA9IDw4MDA+OworCQkJaGZyb250LXBvcmNoID0gPDQwPjsKKwkJCWhzeW5jLWxlbiA9IDw0OD47CisKKwkJCXZiYWNrLXBvcmNoID0gPDI5PjsKKwkJCXZhY3RpdmUgPSA8NDgwPjsKKwkJCXZmcm9udC1wb3JjaCA9IDwxMz47CisJCQl2c3luYy1sZW4gPSA8Mz47CisJCX07CisKKwkJcG9ydCB7CisJCQlsY2RfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OworCQkJfTsKKwkJfTsKKwl9OworCisJYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWJhY2tsaWdodCI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmYmFja2xpZ2h0X3BpbnM+OworCisJCWdwaW9zID0gPCZncGlvNCAyNiBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3BpbyAxMjIgKi8KKwl9OworfTsKKworJmRzcyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRzc19kcGlfcGlucz47CisKKwlwb3J0IHsKKwkJZHBpX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZsY2RfaW4+OworCQkJZGF0YS1saW5lcyA9IDwyND47CisJCX07CisJfTsKK307CisKKyZkc2kyIHsKKwlzdGF0dXMgPSAib2theSI7CisJdmRkLXN1cHBseSA9IDwmdmN4aW8+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXZhci1vbTQ0Y3VzdG9tYm9hcmQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXZhci1vbTQ0Y3VzdG9tYm9hcmQuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQyZmRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLW9tNDRjdXN0b21ib2FyZC5kdHNpCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEpvYWNoaW0gRWFzdHdvb2QgPG1hbmFiaWFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorCisvIHsKKwlhbGlhc2VzIHsKKwkJZGlzcGxheTAgPSAmaGRtaTA7CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZ3Bpb19sZWRfcGlucz47CisKKwkJbGVkMCB7CisJCQlsYWJlbCA9ICJ2YXI6Z3JlZW46bGVkMCI7CisJCQlncGlvcyA9IDwmZ3BpbzYgMTMgR1BJT19BQ1RJVkVfSElHSD47IC8qIGdwaW8gMTczICovCisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJfTsKKworCQlsZWQxIHsKKwkJCWxhYmVsID0gInZhcjpncmVlbjpsZWQxIjsKKwkJCWdwaW9zID0gPCZncGlvNiAxMiBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3BpbyAxNzIgKi8KKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmdwaW9fa2V5X3BpbnM+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJdXNlci1rZXlAMTg0IHsKKwkJCWxhYmVsID0gInVzZXIiOworCQkJZ3Bpb3MgPSA8JmdwaW82IDI0IEdQSU9fQUNUSVZFX0hJR0g+OyAvKiBncGlvIDE4NCAqLworCQkJbGludXgsY29kZSA9IDxCVE5fRVhUUkE+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwloZG1pMDogY29ubmVjdG9yQDAgeworCQljb21wYXRpYmxlID0gImhkbWktY29ubmVjdG9yIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZoZG1pX2hwZF9waW5zPjsKKwkJbGFiZWwgPSAiaGRtaSI7CisJCXR5cGUgPSAiYSI7CisKKwkJaHBkLWdwaW9zID0gPCZncGlvMiAzMSBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3Bpb182MyAqLworCisJCXBvcnQgeworCQkJaGRtaV9jb25uZWN0b3JfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmhkbWlfb3V0PjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZvbWFwNF9wbXhfY29yZSB7CisJdWFydDFfcGluczogcGlubXV4X3VhcnQxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgxM2MsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIG1jc3BpMV9jczIudWFydDFfY3RzICovCisJCQlPTUFQNF9JT1BBRCgweDEzZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJCS8qIG1jc3BpMV9jczMudWFydDFfcnRzICovCisJCQlPTUFQNF9JT1BBRCgweDEyNiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkJLyogaTJjMl9zY2wudWFydDFfcnggKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTI4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkJLyogaTJjMl9zZGEudWFydDFfdHggKi8KKwkJPjsKKwl9OworCisJbWNzcGkxX3BpbnM6IHBpbm11eF9tY3NwaTFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDEzMiwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogIG1jc3BpMV9jbGsubWNzcGkxX2NsayAqLworCQkJT01BUDRfSU9QQUQoMHgxMzQsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qICBtY3NwaTFfc29taS5tY3NwaTFfc29taSAqLworCQkJT01BUDRfSU9QQUQoMHgxMzYsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qICBtY3NwaTFfc2ltby5tY3NwaTFfc2ltbyAqLworCQkJT01BUDRfSU9QQUQoMHgxMzgsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qICBtY3NwaTFfY3MwLm1jc3BpMV9jczAgKi8KKwkJPjsKKwl9OworCisJbWNhc3BfcGluczogcGlubXV4X21jc2FzcF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MGY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUyKQkJLyogIG1jYnNwMl9kci5hYmVfbWNhc3BfYXhyICovCisJCT47CisJfTsKKworCWRzc19kcGlfcGluczogcGlubXV4X2Rzc19kcGlfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDE2MiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhMjMgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTY0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGEyMiAqLworCQkJT01BUDRfSU9QQUQoMHgxNjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTIxICovCisJCQlPTUFQNF9JT1BBRCgweDE2OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhMjAgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGExOSAqLworCQkJT01BUDRfSU9QQUQoMHgxNmMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTE4ICovCisJCQlPTUFQNF9JT1BBRCgweDE2ZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhMTUgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTcwLCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGExNCAqLworCQkJT01BUDRfSU9QQUQoMHgxNzIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTEzICovCisJCQlPTUFQNF9JT1BBRCgweDE3NCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhMTIgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTc2LCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGExMSAqLworCQkJT01BUDRfSU9QQUQoMHgxYjQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTEwICovCisJCQlPTUFQNF9JT1BBRCgweDFiNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhOSAqLworCQkJT01BUDRfSU9QQUQoMHgxYjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTE2ICovCisJCQlPTUFQNF9JT1BBRCgweDFiYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhMTcgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MWJjLCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2hzeW5jICovCisJCQlPTUFQNF9JT1BBRCgweDFiZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9wY2xrICovCisJCQlPTUFQNF9JT1BBRCgweDFjMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl92c3luYyAqLworCQkJT01BUDRfSU9QQUQoMHgxYzIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGUgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MWM0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGE4ICovCisJCQlPTUFQNF9JT1BBRCgweDFjNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhNyAqLworCQkJT01BUDRfSU9QQUQoMHgxYzgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTYgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MWNhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGE1ICovCisJCQlPTUFQNF9JT1BBRCgweDFjYywgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhNCAqLworCQkJT01BUDRfSU9QQUQoMHgxY2UsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTMgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MWQwLCBQSU5fT1VUUFVUIHwgTVVYX01PREU1KQkJLyogZGlzcGMyX2RhdGEyICovCisJCQlPTUFQNF9JT1BBRCgweDFkMiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNSkJCS8qIGRpc3BjMl9kYXRhMSAqLworCQkJT01BUDRfSU9QQUQoMHgxZDQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTUpCQkvKiBkaXNwYzJfZGF0YTAgKi8KKwkJPjsKKwl9OworCisJZHNzX2hkbWlfcGluczogcGlubXV4X2Rzc19oZG1pX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgwOWEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGhkbWlfY2VjLmhkbWlfY2VjICovCisJCQlPTUFQNF9JT1BBRCgweDA5YywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaGRtaV9zY2wuaGRtaV9zY2wgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDllLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBoZG1pX3NkYS5oZG1pX3NkYSAqLworCQk+OworCX07CisKKwlpMmM0X3BpbnM6IHBpbm11eF9pMmM0X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgxMmUsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzRfc2NsICovCisJCQlPTUFQNF9JT1BBRCgweDEzMCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjNF9zZGEgKi8KKwkJPjsKKwl9OworCisJbW1jNV9waW5zOiBwaW5tdXhfbW1jNV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MGY2LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCQkvKiBhYmVfbWNic3AyX2Nsa3guZ3Bpb18xMTAgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTQ4LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzVfY2xrLnNkbW1jNV9jbGsgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTRhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzVfY21kLnNkbW1jNV9jbWQgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTRjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzVfZGF0MC5zZG1tYzVfZGF0MCAqLworCQkJT01BUDRfSU9QQUQoMHgxNGUsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jNV9kYXQxLnNkbW1jNV9kYXQxICovCisJCQlPTUFQNF9JT1BBRCgweDE1MCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWM1X2RhdDIuc2RtbWM1X2RhdDIgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTUyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzVfZGF0My5zZG1tYzVfZGF0MyAqLworCQk+OworCX07CisKKwlncGlvX2xlZF9waW5zOiBwaW5tdXhfZ3Bpb19sZWRfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDE3ZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGtwZF9jb2w0LmdwaW9fMTcyICovCisJCQlPTUFQNF9JT1BBRCgweDE4MCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGtwZF9jb2w1LmdwaW9fMTczICovCisJCT47CisJfTsKKworCWdwaW9fa2V5X3BpbnM6IHBpbm11eF9ncGlvX2tleV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MWEyLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCQkvKiBzeXNfYm9vdDAuZ3Bpb18xODQgKi8KKwkJPjsKKwl9OworCisJa3M4ODUxX2lycV9waW5zOiBwaW5tdXhfa3M4ODUxX2lycV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MTdjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUzKQkvKiBrcGRfY29sMy5ncGlvXzE3MSAqLworCQk+OworCX07CisKKwloZG1pX2hwZF9waW5zOiBwaW5tdXhfaGRtaV9ocGRfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDA5OCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBoZG1pX2hwZC5ncGlvXzYzICovCisJCT47CisJfTsKKworCWJhY2tsaWdodF9waW5zOiBwaW5tdXhfYmFja2xpZ2h0X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgxMTYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBhYmVfZG1pY19kaW4zLmdwaW9fMTIyICovCisJCT47CisJfTsKK307CisKKyZpMmM0IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjNF9waW5zPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWNzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbWNzcGkxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWV0aEAwIHsKKwkJY29tcGF0aWJsZSA9ICJrczg4NTEiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmtzODg1MV9pcnFfcGlucz47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJcmVnID0gPDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNj47CisJCWludGVycnVwdHMgPSA8MTEgSVJRX1RZUEVfTEVWRUxfTE9XPjsgLyogZ3BpbyAxNzEgKi8KKwl9OworfTsKKworJm1tYzUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWM1X3BpbnM+OworCXZtbWMtc3VwcGx5ID0gPCZ2YmF0PjsKKwlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW80IDE0IEdQSU9fQUNUSVZFX0hJR0g+OyAvKiBncGlvIDExMCAqLworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZkc3MgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZoZG1pIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRzc19oZG1pX3BpbnM+OworCXZkZGEtc3VwcGx5ID0gPCZ2ZGFjPjsKKworCXBvcnQgeworCQloZG1pX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZoZG1pX2Nvbm5lY3Rvcl9pbj47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC12YXItc29tLW9tNDQtd2xhbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLXNvbS1vbTQ0LXdsYW4uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzY2YWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLXNvbS1vbTQ0LXdsYW4uZHRzaQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEpvYWNoaW0gRWFzdHdvb2QgPG1hbmFiaWFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8geworCS8qIHJlZ3VsYXRvciBmb3Igd2wxMnh4IG9uIHNkaW80ICovCisJd2wxMnh4X3ZtbWM6IHdsMTJ4eF92bW1jIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ3bDEyeHhfY3RybF9waW5zPjsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2d2wxMjcxIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlncGlvID0gPCZncGlvMiAxMSAwPjsJLyogZ3BpbyA0MyAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDcwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCX07Cit9OworCismb21hcDRfcG14X2NvcmUgeworCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MTE4LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml9jdHMudWFydDJfY3RzICovCisJCQlPTUFQNF9JT1BBRCgweDExYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQyX3J0cy51YXJ0Ml9ydHMgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTFjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLworCQkJT01BUDRfSU9QQUQoMHgxMWUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQk+OworCX07CisKKwl3bDEyeHhfY3RybF9waW5zOiBwaW5tdXhfd2wxMnh4X2N0cmxfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDA2MiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMykJLyogZ3BtY19hMTcuZ3Bpb180MSAoV0xBTl9JUlEpICovCisJCQlPTUFQNF9JT1BBRCgweDA2NCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGdwbWNfYTE4LmdwaW9fNDIgKEJUX0VOKSAqLworCQkJT01BUDRfSU9QQUQoMHgwNjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBncG1jX2ExOS5ncGlvXzQzIChXTEFOX0VOKSAqLworCQk+OworCX07CisKKwltbWM0X3BpbnM6IHBpbm11eF9tbWM0X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgxNTQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIG1jc3BpNF9jbGsuc2RtbWM0X2NsayAqLworCQkJT01BUDRfSU9QQUQoMHgxNTYsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIG1jc3BpNF9zaW1vLnNkbW1jNF9jbWQgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTU4LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKQkvKiBtY3NwaTRfc29taS5zZG1tYzRfZGF0MCAqLworCQkJT01BUDRfSU9QQUQoMHgxNWUsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIHVhcnQ0X3R4LnNkbW1jNF9kYXQxICovCisJCQlPTUFQNF9JT1BBRCgweDE1YywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkJLyogdWFydDRfcnguc2RtbWM0X2RhdDIgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTVhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKQkvKiBtY3NwaTRfY3MwLnNkbW1jNF9kYXQzICovCisJCT47CisJfTsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtbWM0IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jNF9waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmd2wxMnh4X3ZtbWM+OworCW5vbi1yZW1vdmFibGU7CisJYnVzLXdpZHRoID0gPDQ+OworCWNhcC1wb3dlci1vZmYtY2FyZDsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLXNvbS1vbTQ0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC12YXItc29tLW9tNDQuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI3MDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLXNvbS1vbTQ0LmR0c2kKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSm9hY2hpbSBFYXN0d29vZCA8bWFuYWJpYW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEyIFZhcmlzY2l0ZSBMdGQuIC0gaHR0cDovL3d3dy52YXJpc2NpdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgIm9tYXA0NDYwLmR0c2kiCisKKy8geworCW1vZGVsID0gIlZhcmlzY2l0ZSBWQVItU09NLU9NNDQiOworCWNvbXBhdGlibGUgPSAidmFyaXNjaXRlLHZhci1zb20tb200NCIsICJ0aSxvbWFwNDQ2MCIsICJ0aSxvbWFwNCI7CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDQwMDAwMDAwPjsgLyogMSBHQiAqLworCX07CisKKwlzb3VuZDogc291bmRAMCB7CisJCWNvbXBhdGlibGUgPSAidGksYWJlLXR3bDYwNDAiOworCQl0aSxtb2RlbCA9ICJWQVItU09NLU9NNDQiOworCisJCXRpLG1jbGstZnJlcSA9IDwzODQwMDAwMD47CisJCXRpLG1jcGRtID0gPCZtY3BkbT47CisJCXRpLHR3bDYwNDAgPSA8JnR3bDYwNDA+OworCisJCS8qIEF1ZGlvIHJvdXRpbmcgKi8KKwkJdGksYXVkaW8tcm91dGluZyA9CisJCQkiSGVhZHNldCBTdGVyZW9waG9uZSIsICJIU09MIiwKKwkJCSJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgIkhTT1IiLAorCQkJIkFGTUwiLCAiTGluZSBJbiIsCisJCQkiQUZNUiIsICJMaW5lIEluIjsKKwl9OworCisJLyogSFMgVVNCIEhvc3QgUEhZIG9uIFBPUlQgMSAqLworCWhzdXNiMV9waHk6IGhzdXNiMV9waHkgeworCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8CisJCQkmaHN1c2JiMV9waHlfY2xrX3BpbnMKKwkJCSZoc3VzYmIxX3BoeV9yc3RfcGlucworCQk+OworCisJCXJlc2V0LWdwaW9zID0gPCZncGlvNiAxNyBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvIDE3NyAqLworCQl2Y2Mtc3VwcGx5ID0gPCZ2YmF0PjsKKworCQljbG9ja3MgPSA8JmF1eGNsazNfY2s+OworCQljbG9jay1uYW1lcyA9ICJtYWluX2NsayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIwMDAwMD47CisJfTsKKworCXZiYXQ6IGZpeGVkcmVndWxhdG9yLXZiYXQgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gIlZCQVQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07Cit9OworCismb21hcDRfcG14X2NvcmUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPAorCQkJJmhzdXNiYjFfcGlucworCT47CisKKwl0d2w2MDQwX3BpbnM6IHBpbm11eF90d2w2MDQwX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgxOWMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBmcmVmX2NsazJfb3V0LmdwaW9fMTgyICovCisJCQlPTUFQNF9JT1BBRCgweDFhMCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogc3lzX25pcnEyLnN5c19uaXJxMiAqLworCQk+OworCX07CisKKwltY3BkbV9waW5zOiBwaW5tdXhfbWNwZG1fcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDEwNiwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBhYmVfcGRtX3VsX2RhdGEuYWJlX3BkbV91bF9kYXRhICovCisJCQlPTUFQNF9JT1BBRCgweDEwOCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBhYmVfcGRtX2RsX2RhdGEuYWJlX3BkbV9kbF9kYXRhICovCisJCQlPTUFQNF9JT1BBRCgweDEwYSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogYWJlX3BkbV9mcmFtZS5hYmVfcGRtX2ZyYW1lICovCisJCQlPTUFQNF9JT1BBRCgweDEwYywgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUwKQkvKiBhYmVfcGRtX2xiX2Nsay5hYmVfcGRtX2xiX2NsayAqLworCQkJT01BUDRfSU9QQUQoMHgxMGUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkJLyogYWJlX2Nsa3MuYWJlX2Nsa3MgKi8KKwkJPjsKKwl9OworCisJdHNjMjAwNF9waW5zOiBwaW5tdXhfdHNjMjAwNF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MDkwLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCQkvKiBncG1jX25jczQuZ3Bpb18xMDEgKGlycSkgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MDkyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyogZ3BtY19uY3M1LmdwaW9fMTAyIChyc3QpICovCisJCT47CisJfTsKKworCXVhcnQzX3BpbnM6IHBpbm11eF91YXJ0M19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MTQwLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiB1YXJ0M19jdHNfcmN0eC51YXJ0M19jdHNfcmN0eCAqLworCQkJT01BUDRfSU9QQUQoMHgxNDIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M19ydHNfc2QudWFydDNfcnRzX3NkICovCisJCQlPTUFQNF9JT1BBRCgweDE0NCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDNfcnhfaXJyeC51YXJ0M19yeF9pcnJ4ICovCisJCQlPTUFQNF9JT1BBRCgweDE0NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3R4X2lydHgudWFydDNfdHhfaXJ0eCAqLworCQk+OworCX07CisKKwloc3VzYmIxX3BpbnM6IHBpbm11eF9oc3VzYmIxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgwYzIsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9jbGsudXNiYjFfdWxwaXBoeV9jbGsgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGM0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkJLyogdXNiYjFfdWxwaXRsbF9zdHAudXNiYjFfdWxwaXBoeV9zdHAgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGM2LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTQpCS8qIHVzYmIxX3VscGl0bGxfZGlyLnVzYmIxX3VscGlwaHlfZGlyICovCisJCQlPTUFQNF9JT1BBRCgweDBjOCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KQkvKiB1c2JiMV91bHBpdGxsX254dC51c2JiMV91bHBpcGh5X254dCAqLworCQkJT01BUDRfSU9QQUQoMHgwY2EsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQwLnVzYmIxX3VscGlwaHlfZGF0MCAqLworCQkJT01BUDRfSU9QQUQoMHgwY2MsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQxLnVzYmIxX3VscGlwaHlfZGF0MSAqLworCQkJT01BUDRfSU9QQUQoMHgwY2UsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQyLnVzYmIxX3VscGlwaHlfZGF0MiAqLworCQkJT01BUDRfSU9QQUQoMHgwZDAsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQzLnVzYmIxX3VscGlwaHlfZGF0MyAqLworCQkJT01BUDRfSU9QQUQoMHgwZDIsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ0LnVzYmIxX3VscGlwaHlfZGF0NCAqLworCQkJT01BUDRfSU9QQUQoMHgwZDQsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ1LnVzYmIxX3VscGlwaHlfZGF0NSAqLworCQkJT01BUDRfSU9QQUQoMHgwZDYsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ2LnVzYmIxX3VscGlwaHlfZGF0NiAqLworCQkJT01BUDRfSU9QQUQoMHgwZDgsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNCkJLyogdXNiYjFfdWxwaXRsbF9kYXQ3LnVzYmIxX3VscGlwaHlfZGF0NyAqLworCQk+OworCX07CisKKwloc3VzYmIxX3BoeV9yc3RfcGluczogcGlubXV4X2hzdXNiYjFfcGh5X3JzdF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MThjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyoga3BkX3JvdzIuZ3Bpb18xNzcgKi8KKwkJPjsKKwl9OworCisJaTJjMV9waW5zOiBwaW5tdXhfaTJjMV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MTIyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NjbCAqLworCQkJT01BUDRfSU9QQUQoMHgxMjQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzFfc2RhICovCisJCT47CisJfTsKKworCWkyYzNfcGluczogcGlubXV4X2kyYzNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNF9JT1BBRCgweDEyYSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogaTJjM19zY2wgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MTJjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMzX3NkYSAqLworCQk+OworCX07CisKKwltbWMxX3BpbnM6IHBpbm11eF9tbWMxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgwZTIsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbGsuc2RtbWMxX2NsayAqLworCQkJT01BUDRfSU9QQUQoMHgwZTQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbWQuc2RtbWMxX2NtZCAqLworCQkJT01BUDRfSU9QQUQoMHgwZTYsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQwLnNkbW1jMV9kYXQwICovCisJCQlPTUFQNF9JT1BBRCgweDBlOCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2RhdDEuc2RtbWMxX2RhdDEgKi8KKwkJCU9NQVA0X0lPUEFEKDB4MGVhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfZGF0Mi5zZG1tYzFfZGF0MiAqLworCQkJT01BUDRfSU9QQUQoMHgwZWMsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQzLnNkbW1jMV9kYXQzICovCisJCT47CisJfTsKK307CisKKyZvbWFwNF9wbXhfd2t1cCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZoc3VzYmIxX2h1Yl9yc3RfcGlucworCQkmbGFuNzUwMF9yc3RfcGlucworCT47CisKKwloc3VzYmIxX3BoeV9jbGtfcGluczogcGlubXV4X2hzdXNiYjFfcGh5X2Nsa19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MDU4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBmcmVmX2NsazNfb3V0ICovCisJCT47CisJfTsKKworCWhzdXNiYjFfaHViX3JzdF9waW5zOiBwaW5tdXhfaHN1c2JiMV9odWJfcnN0X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDRfSU9QQUQoMHgwNDIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIGdwaW9fd2sxICovCisJCT47CisJfTsKKworCWxhbjc1MDBfcnN0X3BpbnM6IHBpbm11eF9sYW43NTAwX3JzdF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA0X0lPUEFEKDB4MDQwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiBncGlvX3drMCAqLworCQk+OworCX07Cit9OworCismaTJjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwl0d2w6IHR3bEA0OCB7CisJCXJlZyA9IDwweDQ4PjsKKwkJLyogU1BJID0gMCwgSVJRIyA9IDcsIDQgPSBhY3RpdmUgaGlnaCBsZXZlbC1zZW5zaXRpdmUgKi8KKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47IC8qIElSUV9TWVNfMU4gY2FzY2FkZWQgdG8gZ2ljICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJfTsKKworCXR3bDYwNDA6IHR3bEA0YiB7CisJCWNvbXBhdGlibGUgPSAidGksdHdsNjA0MCI7CisJCXJlZyA9IDwweDRiPjsKKworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnR3bDYwNDBfcGlucz47CisKKwkJLyogU1BJID0gMCwgSVJRIyA9IDExOSwgNCA9IGFjdGl2ZSBoaWdoIGxldmVsLXNlbnNpdGl2ZSAqLworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE5IElSUV9UWVBFX0xFVkVMX0hJR0g+OyAvKiBJUlFfU1lTXzJOIGNhc2NhZGVkIHRvIGdpYyAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQl0aSxhdWRwd3Jvbi1ncGlvID0gPCZncGlvNiAyMiAwPjsgLyogZ3BpbyAxODIgKi8KKworCQl2aW8tc3VwcGx5ID0gPCZ2MXY4PjsKKwkJdjJ2MS1zdXBwbHkgPSA8JnYydjE+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKK307CisKKyNpbmNsdWRlICJ0d2w2MDMwLmR0c2kiCisjaW5jbHVkZSAidHdsNjAzMF9vbWFwNC5kdHNpIgorCismdnVzaW0geworCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCXJlZ3VsYXRvci1hbHdheXMtb247Cit9OworCismaTJjMiB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjM19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXRvdWNoc2NyZWVuOiB0c2MyMDA0QDQ4IHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0c2MyMDA0IjsKKwkJcmVnID0gPDB4NDg+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnRzYzIwMDRfcGlucz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDw1IElSUV9UWVBFX0xFVkVMX0xPVz47IC8qIGdwaW8gMTAxICovCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtcDEwNUA0OSB7CisJCWNvbXBhdGlibGUgPSAidGksdG1wMTA1IjsKKwkJcmVnID0gPDB4NDk+OworCX07CisKKwllZXByb21ANTAgeworCQljb21wYXRpYmxlID0gIm1pY3JvY2hpcCwyNGMzMiI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmkyYzQgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbWNwZG0geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtY3BkbV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZ3BtYyB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZtY3NwaTEgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbWNzcGkyIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJm1jc3BpMyB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZtY3NwaTQgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbW1jMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzFfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JnZtbWM+OworCWJ1cy13aWR0aCA9IDw0PjsKKwl0aSxub24tcmVtb3ZhYmxlOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtbWMyIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJm1tYzMgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbW1jNCB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZtbWM1IHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnVhcnQxIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnVhcnQyIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnVhcnQzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQ0IHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmtleXBhZCB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZ0d2xfdXNiX2NvbXBhcmF0b3IgeworCXVzYi1zdXBwbHkgPSA8JnZ1c2I+OworfTsKKworJnVzYl9vdGdfaHMgeworCWludGVyZmFjZS10eXBlID0gPDE+OworCW1vZGUgPSA8Mz47CisJcG93ZXIgPSA8NTA+OworfTsKKworJnVzYmhzaG9zdCB7CisJcG9ydDEtbW9kZSA9ICJlaGNpLXBoeSI7Cit9OworCismdXNiaHNlaGNpIHsKKwlwaHlzID0gPCZoc3VzYjFfcGh5PjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC12YXItc29tLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXZhci1zb20uZHRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDEyNjllLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LXZhci1zb20uZHRzCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBWYXJpc2NpdGUgTHRkLiAtIGh0dHA6Ly93d3cudmFyaXNjaXRlLmNvbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLS9kdHMtdjEvOwotCi0jaW5jbHVkZSAib21hcDQ0M3guZHRzaSIKLQotLyB7Ci0JbW9kZWwgPSAiVmFyaXNjaXRlIE9NQVA0IFNPTSI7Ci0JY29tcGF0aWJsZSA9ICJ2YXIsb21hcDQtdmFyX3NvbSIsICJ0aSxvbWFwNDQzMCIsICJ0aSxvbWFwNCI7Ci0KLQltZW1vcnkgewotCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MHg4MDAwMDAwMCAweDQwMDAwMDAwPjsgLyogMSBHQiAqLwotCX07Ci0KLQl2ZGRfZXRoOiBmaXhlZHJlZ3VsYXRvckAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwotCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfRVRIIjsKLQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQllbmFibGUtYWN0aXZlLWhpZ2g7Ci0JCXJlZ3VsYXRvci1ib290LW9uOwotCX07Ci19OwotCi0maTJjMSB7Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47Ci0KLQl0d2w6IHR3bEA0OCB7Ci0JCXJlZyA9IDwweDQ4PjsKLQkJLyogU1BJID0gMCwgSVJRIyA9IDcsIDQgPSBhY3RpdmUgaGlnaCBsZXZlbC1zZW5zaXRpdmUgKi8KLQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47IC8qIElSUV9TWVNfMU4gY2FzY2FkZWQgdG8gZ2ljICovCi0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47Ci0JfTsKLX07Ci0KLSNpbmNsdWRlICJ0d2w2MDMwLmR0c2kiCi0KLSZpMmMyIHsKLQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKLX07Ci0KLSZpMmMzIHsKLQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKLQotCS8qCi0JICogVGVtcGVyYXR1cmUgU2Vuc29yCi0JICogaHR0cDovL3d3dy50aS5jb20vbGl0L2RzL3N5bWxpbmsvdG1wMTA1LnBkZgotCSAqLwotCXRtcDEwNUA0OSB7Ci0JCWNvbXBhdGlibGUgPSAidGksdG1wMTA1IjsKLQkJcmVnID0gPDB4NDk+OwotCX07Ci19OwotCi0maTJjNCB7Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47Ci19OwotCi0mbWNzcGkxIHsKLQlldGhAMCB7Ci0JCWNvbXBhdGlibGUgPSAia3M4ODUxIjsKLQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OwotCQlyZWcgPSA8MD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW82PjsKLQkJaW50ZXJydXB0cyA9IDwxMSBJUlFfVFlQRV9MRVZFTF9MT1c+OyAvKiBncGlvIGxpbmUgMTcxICovCi0JCXZkZC1zdXBwbHkgPSA8JnZkZF9ldGg+OwotCX07Ci19OwotCi0mbW1jMSB7Ci0Jdm1tYy1zdXBwbHkgPSA8JnZtbWM+OwotCXRpLGJ1cy13aWR0aCA9IDw4PjsKLQl0aSxub24tcmVtb3ZhYmxlOwotfTsKLQotJm1tYzIgewotCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci19OwotCi0mbW1jMyB7Ci0Jc3RhdHVzID0gImRpc2FibGVkIjsKLX07Ci0KLSZtbWM0IHsKLQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotfTsKLQotJm1tYzUgewotCXRpLGJ1cy13aWR0aCA9IDw0PjsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC12YXItc3RrLW9tNDQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLXN0ay1vbTQ0LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmI2NGU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtdmFyLXN0ay1vbTQ0LmR0cwpAQCAtMCwwICsxLDE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEpvYWNoaW0gRWFzdHdvb2QgPG1hbmFiaWFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisvZHRzLXYxLzsKKworI2luY2x1ZGUgIm9tYXA0LXZhci1zb20tb200NC5kdHNpIgorI2luY2x1ZGUgIm9tYXA0LXZhci1zb20tb200NC13bGFuLmR0c2kiCisjaW5jbHVkZSAib21hcDQtdmFyLW9tNDRjdXN0b21ib2FyZC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJWYXJpc2NpdGUgVkFSLVNUSy1PTTQ0IjsKKwljb21wYXRpYmxlID0gInZhcmlzY2l0ZSx2YXItc3RrLW9tNDQiLCAidmFyaXNjaXRlLHZhci1zb20tb200NCIsICJ0aSxvbWFwNDQ2MCIsICJ0aSxvbWFwNCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LmR0c2kKaW5kZXggNjQ5YjVjZC4uNDNhNTg3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC5kdHNpCkBAIC02Nyw2ICs2Nyw3IEBACiAKIAlsb2NhbC10aW1lckA0ODI0MDYwMCB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS10d2QtdGltZXIiOworCQljbG9ja3MgPSA8Jm1wdV9wZXJpcGhjbGs+OwogCQlyZWcgPSA8MHg0ODI0MDYwMCAweDIwPjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfUkFXKDMpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+OwogCX07CkBAIC0zMTEsNyArMzEyLDcgQEAKIAkJdWFydDI6IHNlcmlhbEA0ODA2YzAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LXVhcnQiOwogCQkJcmVnID0gPDB4NDgwNmMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDczIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmZ2ljIEdJQ19TUEkgNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAidWFydDIiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKIAkJfTsKQEAgLTMxOSw3ICszMjAsNyBAQAogCQl1YXJ0Mzogc2VyaWFsQDQ4MDIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtdWFydCI7CiAJCQlyZWcgPSA8MHg0ODAyMDAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZnaWMgR0lDX1NQSSA3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQl9OwpAQCAtMzI3LDcgKzMyOCw3IEBACiAJCXVhcnQ0OiBzZXJpYWxANDgwNmUwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC11YXJ0IjsKIAkJCXJlZyA9IDwweDQ4MDZlMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdpYyBHSUNfU1BJIDcwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gInVhcnQ0IjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCX07CkBAIC02NDIsNiArNjQzLDggQEAKIAkJCQljb21wYXRpYmxlID0gInRpLG9tYXAtdXNiMiI7CiAJCQkJcmVnID0gPDB4NGEwYWQwODAgMHg1OD47CiAJCQkJY3RybC1tb2R1bGUgPSA8Jm9tYXBfY29udHJvbF91c2IycGh5PjsKKwkJCQljbG9ja3MgPSA8JnVzYl9waHlfY21fY2xrMzJrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ3a3VwY2xrIjsKIAkJCQkjcGh5LWNlbGxzID0gPDA+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LWNtLXQ1NC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNS1jbS10NTQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Njk4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNS1jbS10NTQuZHRzCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogU3VwcG9ydCBmb3IgQ29tcHVMYWIgQ00tVDU0CisgKi8KKy9kdHMtdjEvOworCisjaW5jbHVkZSAib21hcDUuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisKKy8geworCW1vZGVsID0gIkNvbXB1TGFiIENNLVQ1NCI7CisJY29tcGF0aWJsZSA9ICJjb21wdWxhYixvbWFwNS1jbS10NTQiLCAidGksb21hcDUiOworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4ODAwMDAwMDAgMHg3RjAwMDAwMD47IC8qIDIwNDggTUIgKi8KKwl9OworCisJdm1tY3NkX2ZpeGVkOiBmaXhlZC1yZWd1bGF0b3ItbW1jc2QgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZtbWNzZF9maXhlZCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwl9OworCisJdndsYW5fcGRuX2ZpeGVkOiBmaXhlZC1yZWd1bGF0b3ItdndsYW4tcGRuIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2d2xhbl9wZG5fZml4ZWQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXZpbi1zdXBwbHkgPSA8JmxkbzJfcmVnPjsKKwkJZ3BpbyA9IDwmZ3BpbzQgMTMgR1BJT19BQ1RJVkVfSElHSD47ICAgLyogZ3BpbzRfMTA5ICovCisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MTAwMD47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworCisJdndsYW5fZml4ZWQ6IGZpeGVkLXJlZ3VsYXRvci12d2xhbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidndsYW5fZml4ZWQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXZpbi1zdXBwbHkgPSA8JnZ3bGFuX3Bkbl9maXhlZD47CisJCWdwaW8gPSA8JmdwaW80IDE0IEdQSU9fQUNUSVZFX0hJR0g+OyAgIC8qIGdwaW80XzExMCAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCS8qIEhTIFVTQiBIb3N0IFBIWSBvbiBQT1JUIDIgKi8KKwloc3VzYjJfcGh5OiBoc3VzYjJfcGh5IHsKKwkJY29tcGF0aWJsZSA9ICJ1c2Itbm9wLXhjZWl2IjsKKwkJcmVzZXQtZ3Bpb3MgPSA8JmdwaW8zIDEyIEdQSU9fQUNUSVZFX0xPVz47IC8qIGdwaW8zXzc2IEhVQl9SRVNFVCAqLworCX07CisKKwkvKiBIUyBVU0IgSG9zdCBQSFkgb24gUE9SVCAzICovCisJaHN1c2IzX3BoeTogaHN1c2IzX3BoeSB7CisJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCXJlc2V0LWdwaW9zID0gPCZncGlvMyAxOSBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvM184MyBFVEhfUkVTRVQgKi8KKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJbGVkQDEgeworCQkJbGFiZWwgPSAiSGVhcnRiZWF0IjsKKwkJCWdwaW9zID0gPCZncGlvMyAxNiBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3BpbzNfODAgQUNUX0xFRCAqLworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisJfTsKK307CisKKyZvbWFwNV9wbXhfY29yZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCQkmbGVkX2dwaW9fcGlucworCQkJJnVzYmhvc3RfcGlucworCT47CisKKwlsZWRfZ3Bpb19waW5zOiBwaW5tdXhfbGVkX2dwaW9fcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNV9JT1BBRCgweDAwYjAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTYpIC8qIGhzaTJfY2FmbGFnLmdwaW8zXzgwICovCisJCT47CisJfTsKKworCWkyYzFfcGluczogcGlubXV4X2kyYzFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNV9JT1BBRCgweDAxZjIsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGkyYzFfcG1pY19zY2wgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDFmNCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogaTJjMV9wbWljX3NkYSAqLworCQk+OworCX07CisKKwltbWMxX3BpbnM6IHBpbm11eF9tbWMxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDVfSU9QQUQoMHgwMWUyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBzZGNhcmRfY2xrICovCisJCQlPTUFQNV9JT1BBRCgweDAxZTQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIHNkY2FyZF9jbWQgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDFlNiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogc2RjYXJkX2RhdGEyICovCisJCQlPTUFQNV9JT1BBRCgweDAxZTgsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIHNkY2FyZF9kYXRhMyAqLworCQkJT01BUDVfSU9QQUQoMHgwMWVhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBzZGNhcmRfZGF0YTAgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDFlYywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogc2RjYXJkX2RhdGExICovCisJCT47CisJfTsKKworCW1tYzJfcGluczogcGlubXV4X21tYzJfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNV9JT1BBRCgweDAwNDAsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGVtbWNfY2xrICovCisJCQlPTUFQNV9JT1BBRCgweDAwNDIsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGVtbWNfY21kICovCisJCQlPTUFQNV9JT1BBRCgweDAwNDQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGVtbWNfZGF0YTAgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDA0NiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogZW1tY19kYXRhMSAqLworCQkJT01BUDVfSU9QQUQoMHgwMDQ4LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBlbW1jX2RhdGEyICovCisJCQlPTUFQNV9JT1BBRCgweDAwNGEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGVtbWNfZGF0YTMgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDA0YywgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogZW1tY19kYXRhNCAqLworCQkJT01BUDVfSU9QQUQoMHgwMDRlLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBlbW1jX2RhdGE1ICovCisJCQlPTUFQNV9JT1BBRCgweDAwNTAsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGVtbWNfZGF0YTYgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDA1MiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogZW1tY19kYXRhNyAqLworCQk+OworCX07CisKKwltbWMzX3BpbnM6IHBpbm11eF9tbWMzX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDVfSU9QQUQoMHgwMWE0LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiB3bHNkaW9fY2xrICovCisJCQlPTUFQNV9JT1BBRCgweDAxYTYsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIHdsc2Rpb19jbWQgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDFhOCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogd2xzZGlvX2RhdGEwICovCisJCQlPTUFQNV9JT1BBRCgweDAxYWEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIHdsc2Rpb19kYXRhMSAqLworCQkJT01BUDVfSU9QQUQoMHgwMWFjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiB3bHNkaW9fZGF0YTIgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDFhZSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogd2xzZGlvX2RhdGEzICovCisJCT47CisJfTsKKworCXdsYW5fZ3Bpb3NfcGluczogcGlubXV4X3dsYW5fZ3Bpb3NfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQNV9JT1BBRCgweDAxOWMsIFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTYpIC8qIGdwaW80XzEwOSAqLworCQkJT01BUDVfSU9QQUQoMHgwMTllLCBQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREU2KSAvKiBncGlvNF8xMTAgKi8KKwkJPjsKKwl9OworCisJdXNiaG9zdF9waW5zOiBwaW5tdXhfdXNiaG9zdF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA1X0lPUEFEKDB4MDBjNCwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgLyogdXNiYjJfaHNpY19zdHJvYmUgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDBjNiwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgLyogdXNiYjJfaHNpY19kYXRhICovCisKKwkJCU9NQVA1X0lPUEFEKDB4MDFkYywgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgLyogdXNiYjNfaHNpY19zdHJvYmUgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDFkZSwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgLyogdXNiYjNfaHNpY19kYXRhICovCisKKwkJCU9NQVA1X0lPUEFEKDB4MDBhOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNikgLyogaHNpMl9jYXJlYWR5LmdwaW8zXzc2ICovCisJCQlPTUFQNV9JT1BBRCgweDAwYjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTYpIC8qIGhzaTJfYWNkYXRhLmdwaW8zXzgzICovCisJCT47CisJfTsKK307CisKKyZtbWMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMV9waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmbGRvOV9yZWc+OworCWJ1cy13aWR0aCA9IDw0PjsKK307CisKKyZtbWMyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmdm1tY3NkX2ZpeGVkPjsKKwlidXMtd2lkdGggPSA8OD47CisJdGksbm9uLXJlbW92YWJsZTsKK307CisKKyZtbWMzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJm1tYzNfcGlucworCQkmd2xhbl9ncGlvc19waW5zCisJPjsKKwl2bW1jLXN1cHBseSA9IDwmdndsYW5fZml4ZWQ+OworCWJ1cy13aWR0aCA9IDw0PjsKKwl0aSxub24tcmVtb3ZhYmxlOworfTsKKworJm1tYzQgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbW1jNSB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjMV9waW5zPjsKKworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJYXQyNEA1MCB7CisJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMwMiI7CisJCXBhZ2VzaXplID0gPDE2PjsKKwkJcmVnID0gPDB4NTA+OworCX07CisKKwlwYWxtYXM6IHBhbG1hc0A0OCB7CisJCWNvbXBhdGlibGUgPSAidGkscGFsbWFzIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTk9ORT47IC8qIElSUV9TWVNfMU4gKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJcmVnID0gPDB4NDg+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJdGksc3lzdGVtLXBvd2VyLWNvbnRyb2xsZXI7CisKKwkJZXh0Y29uX3VzYjM6IHBhbG1hc191c2IgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMtdXNiLXZpZCI7CisJCQl0aSxlbmFibGUtdmJ1cy1kZXRlY3Rpb247CisJCQl0aSxlbmFibGUtaWQtZGV0ZWN0aW9uOworCQkJdGksd2FrZXVwOworCQl9OworCisJCXJ0YyB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1ydGMiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcGFsbWFzPjsKKwkJCWludGVycnVwdHMgPSA8OCBJUlFfVFlQRV9OT05FPjsKKwkJfTsKKworCQlwYWxtYXNfcG1pYyB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1wbWljIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnBhbG1hcz47CisJCQlpbnRlcnJ1cHRzID0gPDE0IElSUV9UWVBFX05PTkU+OworCQkJaW50ZXJydXB0LW5hbWUgPSAic2hvcnQtaXJxIjsKKworCQkJdGksbGRvNi12aWJyYXRvcjsKKworCQkJcmVndWxhdG9ycyB7CisJCQkJc21wczEyM19yZWc6IHNtcHMxMjMgeworCQkJCQkvKiBWRERfT1BQX01QVSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMTIzIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8IDYwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJc21wczQ1X3JlZzogc21wczQ1IHsKKwkJCQkJLyogVkREX09QUF9NTSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzNDUiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwgNjAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMxMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlzbXBzNl9yZWc6IHNtcHM2IHsKKwkJCQkJLyogVkREX0REUjMgLSBvdmVyIFZERF9TTVBTNiAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzNiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHM3X3JlZzogc21wczcgeworCQkJCQkvKiBWRERTXzF2OF9PTUFQIG92ZXIgVkREU18xdjhfTUFJTiAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzNyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHM4X3JlZzogc21wczggeworCQkJCQkvKiBWRERfT1BQX0NPUkUgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczgiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwgNjAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMxMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlzbXBzOV9yZWc6IHNtcHM5IHsKKwkJCQkJLyogVkREQV8ydjFfQVVEIG92ZXIgVkREXzJ2MSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzOSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJdGksc21wcy1yYW5nZSA9IDwweDgwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHMxMF9vdXQyX3JlZzogc21wczEwX291dDIgeworCQkJCQkvKiBWQlVTXzVWX09URyAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMTBfb3V0MiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHMxMF9vdXQxX3JlZzogc21wczEwX291dDEgeworCQkJCQkvKiBWQlVTXzVWX09URyAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMTBfb3V0MSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCQl9OworCisJCQkJbGRvMV9yZWc6IGxkbzEgeworCQkJCQkvKiBWRERBUEhZX0NBTTogdmRkYV9jc2lwb3J0ICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzEiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJfTsKKworCQkJCWxkbzJfcmVnOiBsZG8yIHsKKwkJCQkJLyogVkREXzNWM19XTEFOICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MTAwMD47CisJCQkJfTsKKworCQkJCWxkbzNfcmVnOiBsZG8zIHsKKwkJCQkJLyogVkNDXzFWNV9BVUQgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvMyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkbzRfcmVnOiBsZG80IHsKKwkJCQkJLyogVkREQVBIWV9ESVNQOiB2ZGRhX2RzaXBvcnQvaGRtaSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsZG80IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCX07CisKKwkJCQlsZG81X3JlZzogbGRvNSB7CisJCQkJCS8qIFZEREFfMVY4X1BIWTogdXNiL3NhdGEvaGRtaS4uICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzUiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG82X3JlZzogbGRvNiB7CisJCQkJCS8qIFZERFNfMVYyX1dLVVA6IGhzaWMvbGRvX2VtdV93a3VwICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzYiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG83X3JlZzogbGRvNyB7CisJCQkJCS8qIFZERF9WUFA6IHZwcDEgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvNyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDIwMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyMDAwMDAwPjsKKwkJCQkJLyogT25seSBmb3IgZWZ1c2UgcmVwcm9ncmFtaW5nISAqLworCQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJCX07CisKKwkJCQlsZG84X3JlZzogbGRvOCB7CisJCQkJCS8qIFZERF8zdjA6IERvZXMgbm90IGdvIGFueXdoZXJlICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzgiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQkvKiBVbnVzZWQgKi8KKwkJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCQl9OworCisJCQkJbGRvOV9yZWc6IGxkbzkgeworCQkJCQkvKiBWQ0NfRFZfU0RJTzogdmRkc19zZGNhcmQgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvOSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkb2xuX3JlZzogbGRvbG4geworCQkJCQkvKiBWRERBXzF2OF9SRUY6IHZkZHNfb3NjL21tX2w0cGVyLi4gKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvbG4iOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG91c2JfcmVnOiBsZG91c2IgeworCQkJCQkvKiBWRERBXzNWX1VTQjogVkREQV9VU0JIUzMzICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkb3VzYiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMyNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMjUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXJlZ2VuM19yZWc6IHJlZ2VuMyB7CisJCQkJCS8qIFJFR0VOMyBjb250cm9scyBMRE85IHN1cHBseSB0byBjYXJkICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInJlZ2VuMyI7CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisJCQl9OworCQl9OworCX07Cit9OworCismdXNiaHNob3N0IHsKKwlwb3J0Mi1tb2RlID0gImVoY2ktaHNpYyI7CisJcG9ydDMtbW9kZSA9ICJlaGNpLWhzaWMiOworfTsKKworJnVzYmhzZWhjaSB7CisJcGh5cyA9IDwwICZoc3VzYjJfcGh5ICZoc3VzYjNfcGh5PjsKK307CisKKyZjcHUwIHsKKwljcHUwLXN1cHBseSA9IDwmc21wczEyM19yZWc+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LXNiYy10NTQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDUtc2JjLXQ1NC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5OGZlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LXNiYy10NTQuZHRzCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBTdXBwcG9ydCBmb3IgQ29tcHVMYWIgU0JDLVQ1NCB3aXRoIENNLVQ1NAorICovCisKKyNpbmNsdWRlICJvbWFwNS1jbS10NTQuZHRzIgorCisvIHsKKwltb2RlbCA9ICJDb21wdUxhYiBTQkMtVDU0IHdpdGggQ00tVDU0IjsKKwljb21wYXRpYmxlID0gImNvbXB1bGFiLG9tYXA1LXNiYy10NTQiLCAiY29tcHVsYWIsb21hcDUtY20tdDU0IiwgInRpLG9tYXA1IjsKK307CisKKyZvbWFwNV9wbXhfY29yZSB7CisJaTJjNF9waW5zOiBwaW5tdXhfaTJjNF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVA1X0lPUEFEKDB4MDBmOCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogaTJjNF9zY2wgKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDBmYSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogaTJjNF9zZGEgKi8KKwkJPjsKKwl9OworCisJbW1jMV9hdXhfcGluczogcGlubXV4X21tYzFfYXV4X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDVfSU9QQUQoMHgwMTc0LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREU2KSAvKiBncGlvOF8yMjggKi8KKwkJCU9NQVA1X0lPUEFEKDB4MDE3NiwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFNikgLyogZ3BpbzhfMjI5ICovCisJCT47CisJfTsKK307CisKKyZtbWMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJm1tYzFfcGlucworCQkmbW1jMV9hdXhfcGlucworCT47CisJY2QtaW52ZXJ0ZWQ7CisJd3AtaW52ZXJ0ZWQ7CisJY2QtZ3Bpb3MgPSA8JmdwaW84IDQgR1BJT19BQ1RJVkVfTE9XPjsgLyogZ3BpbzhfMjI4ICovCisJd3AtZ3Bpb3MgPSA8JmdwaW84IDUgR1BJT19BQ1RJVkVfTE9XPjsgLyogZ3BpbzhfMjI5ICovCit9OworCismaTJjNCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzRfcGlucz47CisKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCWF0MjRANTAgeworCQljb21wYXRpYmxlID0gImF0MjQsMjRjMDIiOworCQlwYWdlc2l6ZSA9IDwxNj47CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNS5kdHNpCmluZGV4IDM2YjQzMTIuLmU1OGJlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDUuZHRzaQpAQCAtODIsNiArODIsMTIgQEAKIAkJCSAgICAgPEdJQ19QUEkgMTAgKEdJQ19DUFVfTUFTS19SQVcoMykgfCBJUlFfVFlQRV9MRVZFTF9MT1cpPjsKIAl9OwogCisJcG11IHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNS1wbXUiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTMxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKwogCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANDgyMTEwMDAgewogCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LWdpYyI7CiAJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtODEwLDYgKzgxNiw4IEBACiAJCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwLXVzYjIiOwogCQkJCXJlZyA9IDwweDRhMDg0MDAwIDB4N2M+OwogCQkJCWN0cmwtbW9kdWxlID0gPCZvbWFwX2NvbnRyb2xfdXNiMnBoeT47CisJCQkJY2xvY2tzID0gPCZ1c2JfcGh5X2NtX2NsazMyaz4sIDwmdXNiX290Z19zc19yZWZjbGs5NjBtPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ3a3VwY2xrIiwgInJlZmNsayI7CiAJCQkJI3BoeS1jZWxscyA9IDwwPjsKIAkJCX07CiAKQEAgLTg3Niw2ICs4ODQsNDYgQEAKIAogCQkJI3RoZXJtYWwtc2Vuc29yLWNlbGxzID0gPDE+OwogCQl9OworCisJCW9tYXBfY29udHJvbF9zYXRhOiBjb250cm9sLXBoeUA0YTAwMjM3NCB7CisJCQljb21wYXRpYmxlID0gInRpLGNvbnRyb2wtcGh5LXBpcGUzIjsKKwkJCXJlZyA9IDwweDRhMDAyMzc0IDB4ND47CisJCQlyZWctbmFtZXMgPSAicG93ZXIiOworCQkJY2xvY2tzID0gPCZzeXNfY2xraW4+OworCQkJY2xvY2stbmFtZXMgPSAic3lzY2xrIjsKKwkJfTsKKworCQkvKiBPQ1AyU0NQMyAqLworCQlvY3Ayc2NwQDRhMDkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksb21hcC1vY3Ayc2NwIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHg0YTA5MDAwMCAweDIwPjsKKwkJCXJhbmdlczsKKwkJCXRpLGh3bW9kcyA9ICJvY3Ayc2NwMyI7CisJCQlzYXRhX3BoeTogcGh5QDRhMDk2MDAwIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHBoeS1waXBlMy1zYXRhIjsKKwkJCQlyZWcgPSA8MHg0QTA5NjAwMCAweDgwPiwgLyogcGh5X3J4ICovCisJCQkJICAgICAgPDB4NEEwOTY0MDAgMHg2ND4sIC8qIHBoeV90eCAqLworCQkJCSAgICAgIDwweDRBMDk2ODAwIDB4NDA+OyAvKiBwbGxfY3RybCAqLworCQkJCXJlZy1uYW1lcyA9ICJwaHlfcngiLCAicGh5X3R4IiwgInBsbF9jdHJsIjsKKwkJCQljdHJsLW1vZHVsZSA9IDwmb21hcF9jb250cm9sX3NhdGE+OworCQkJCWNsb2NrcyA9IDwmc3lzX2Nsa2luPjsKKwkJCQljbG9jay1uYW1lcyA9ICJzeXNjbGsiOworCQkJCSNwaHktY2VsbHMgPSA8MD47CisJCQl9OworCQl9OworCisJCXNhdGE6IHNhdGFANGExNDExMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3Yy1haGNpIjsKKwkJCXJlZyA9IDwweDRhMTQwMDAwIDB4MTEwMD4sIDwweDRhMTQxMTAwIDB4Nz47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlwaHlzID0gPCZzYXRhX3BoeT47CisJCQlwaHktbmFtZXMgPSAic2F0YS1waHkiOworCQkJY2xvY2tzID0gPCZzYXRhX3JlZl9jbGs+OworCQkJdGksaHdtb2RzID0gInNhdGEiOworCQl9OworCiAJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1NHh4LWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDU0eHgtY2xvY2tzLmR0c2kKaW5kZXggZDQ4N2ZkYS4uYWViMTQyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDU0eHgtY2xvY2tzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDU0eHgtY2xvY2tzLmR0c2kKQEAgLTEyMCwxMCArMTIwLDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX2FiZV94Ml9jaz47CiAJCXRpLG1heC1kaXYgPSA8MzE+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDFmMD47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWFiZV8yNG1fZmNsazogYWJlXzI0bV9mY2xrIHsKQEAgLTE0NSwxMCArMTQzLDExIEBACiAKIAlhYmVfaWNsazogYWJlX2ljbGsgewogCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZhYmVfY2xrPjsKLQkJY2xvY2stbXVsdCA9IDwxPjsKLQkJY2xvY2stZGl2ID0gPDI+OworCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOworCQljbG9ja3MgPSA8JmFlc3NfZmNsaz47CisJCXRpLGJpdC1zaGlmdCA9IDwyND47CisJCXJlZyA9IDwweDA1Mjg+OworCQl0aSxkaXZpZGVycyA9IDwyPiwgPDE+OwogCX07CiAKIAlhYmVfbHBfY2xrX2RpdjogYWJlX2xwX2Nsa19kaXYgewpAQCAtMTY0LDEwICsxNjMsOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfYWJlX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDwzMT47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMWY0PjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF9jb3JlX2NrOiBkcGxsX2NvcmVfY2sgewpAQCAtMTg4LDEwICsxODUsOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfY29yZV94Ml9jaz47CiAJCXRpLG1heC1kaXYgPSA8NjM+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDE1MD47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWMyY19mY2xrOiBjMmNfZmNsayB7CkBAIC0yMTUsMTAgKzIxMCw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9jb3JlX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDw2Mz47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMTM4PjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF9jb3JlX2gxMngyX2NrOiBkcGxsX2NvcmVfaDEyeDJfY2sgewpAQCAtMjI2LDEwICsyMTksOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfY29yZV94Ml9jaz47CiAJCXRpLG1heC1kaXYgPSA8NjM+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDEzYz47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWRwbGxfY29yZV9oMTN4Ml9jazogZHBsbF9jb3JlX2gxM3gyX2NrIHsKQEAgLTIzNywxMCArMjI4LDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX2NvcmVfeDJfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDYzPjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxNDA+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlkcGxsX2NvcmVfaDE0eDJfY2s6IGRwbGxfY29yZV9oMTR4Ml9jayB7CkBAIC0yNDgsMTAgKzIzNyw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9jb3JlX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDw2Mz47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMTQ0PjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF9jb3JlX2gyMngyX2NrOiBkcGxsX2NvcmVfaDIyeDJfY2sgewpAQCAtMjU5LDEwICsyNDYsOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfY29yZV94Ml9jaz47CiAJCXRpLG1heC1kaXYgPSA8NjM+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDE1ND47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWRwbGxfY29yZV9oMjN4Ml9jazogZHBsbF9jb3JlX2gyM3gyX2NrIHsKQEAgLTI3MCwxMCArMjU1LDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX2NvcmVfeDJfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDYzPjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxNTg+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlkcGxsX2NvcmVfaDI0eDJfY2s6IGRwbGxfY29yZV9oMjR4Ml9jayB7CkBAIC0yODEsMTAgKzI2NCw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9jb3JlX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDw2Mz47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMTVjPjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF9jb3JlX20yX2NrOiBkcGxsX2NvcmVfbTJfY2sgewpAQCAtMjkyLDEwICsyNzMsOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfY29yZV9jaz47CiAJCXRpLG1heC1kaXYgPSA8MzE+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDEzMD47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWRwbGxfY29yZV9tM3gyX2NrOiBkcGxsX2NvcmVfbTN4Ml9jayB7CkBAIC0zMDMsMTAgKzI4Miw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9jb3JlX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDwzMT47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMTM0PjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJaXZhX2RwbGxfaHNfY2xrX2RpdjogaXZhX2RwbGxfaHNfY2xrX2RpdiB7CkBAIC0zMzUsMTAgKzMxMiw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9pdmFfeDJfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDYzPjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxYjg+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlkcGxsX2l2YV9oMTJ4Ml9jazogZHBsbF9pdmFfaDEyeDJfY2sgewpAQCAtMzQ2LDEwICszMjEsOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfaXZhX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDw2Mz47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMWJjPjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJbXB1X2RwbGxfaHNfY2xrX2RpdjogbXB1X2RwbGxfaHNfY2xrX2RpdiB7CkBAIC0zNzIsMTAgKzM0NSw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9tcHVfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDMxPjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxNzA+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlwZXJfZHBsbF9oc19jbGtfZGl2OiBwZXJfZHBsbF9oc19jbGtfZGl2IHsKQEAgLTY0MiwxMCArNjEzLDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3Blcl94Ml9jaz47CiAJCXRpLG1heC1kaXYgPSA8NjM+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDE1OD47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWRwbGxfcGVyX2gxMngyX2NrOiBkcGxsX3Blcl9oMTJ4Ml9jayB7CkBAIC02NTMsMTAgKzYyMiw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9wZXJfeDJfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDYzPjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxNWM+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlkcGxsX3Blcl9oMTR4Ml9jazogZHBsbF9wZXJfaDE0eDJfY2sgewpAQCAtNjY0LDEwICs2MzEsOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfcGVyX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDw2Mz47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMTY0PjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF9wZXJfbTJfY2s6IGRwbGxfcGVyX20yX2NrIHsKQEAgLTY3NSwxMCArNjQwLDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3Blcl9jaz47CiAJCXRpLG1heC1kaXYgPSA8MzE+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDE1MD47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWRwbGxfcGVyX20yeDJfY2s6IGRwbGxfcGVyX20yeDJfY2sgewpAQCAtNjg2LDEwICs2NDksOCBAQAogCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwogCQljbG9ja3MgPSA8JmRwbGxfcGVyX3gyX2NrPjsKIAkJdGksbWF4LWRpdiA9IDwzMT47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMTUwPjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF9wZXJfbTN4Ml9jazogZHBsbF9wZXJfbTN4Ml9jayB7CkBAIC02OTcsMTAgKzY1OCw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF9wZXJfeDJfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDMxPjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxNTQ+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlkcGxsX3VuaXBybzFfY2s6IGRwbGxfdW5pcHJvMV9jayB7CkBAIC03MjMsMTAgKzY4Miw4IEBACiAJCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7CiAJCWNsb2NrcyA9IDwmZHBsbF91bmlwcm8xX2NrPjsKIAkJdGksbWF4LWRpdiA9IDwxMjc+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDw4PjsKIAkJcmVnID0gPDB4MDIxMD47CiAJCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JCXRpLGludmVydC1hdXRvaWRsZS1iaXQ7CiAJfTsKIAogCWRwbGxfdW5pcHJvMl9jazogZHBsbF91bmlwcm8yX2NrIHsKQEAgLTc0OSwxMCArNzA2LDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3VuaXBybzJfY2s+OwogCQl0aSxtYXgtZGl2ID0gPDEyNz47Ci0JCXRpLGF1dG9pZGxlLXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgwMWQwPjsKIAkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCiAJZHBsbF91c2JfY2s6IGRwbGxfdXNiX2NrIHsKQEAgLTc3NSwxMCArNzMwLDggQEAKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKIAkJY2xvY2tzID0gPCZkcGxsX3VzYl9jaz47CiAJCXRpLG1heC1kaXYgPSA8MTI3PjsKLQkJdGksYXV0b2lkbGUtc2hpZnQgPSA8OD47CiAJCXJlZyA9IDwweDAxOTA+OwogCQl0aSxpbmRleC1zdGFydHMtYXQtb25lOwotCQl0aSxpbnZlcnQtYXV0b2lkbGUtYml0OwogCX07CiAKIAlmdW5jXzEyOG1fY2xrOiBmdW5jXzEyOG1fY2xrIHsKQEAgLTg1MSw2ICs4MDQsNyBAQAogCQljbG9ja3MgPSA8JmRwbGxfcGVyX2gxMngyX2NrPjsKIAkJdGksYml0LXNoaWZ0ID0gPDg+OwogCQlyZWcgPSA8MHgxNDIwPjsKKwkJdGksc2V0LXJhdGUtcGFyZW50OwogCX07CiAKIAlkc3Nfc3lzX2NsazogZHNzX3N5c19jbGsgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1sYWNpZS1kMi1uZXR3b3JrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXgtbGFjaWUtZDItbmV0d29yay5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwMWU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXgtbGFjaWUtZDItbmV0d29yay5kdHMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ltb24gR3Vpbm90IDxzZ3Vpbm90QGxhY2llLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlICJvcmlvbjV4LW12ODhmNTE4Mi5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJMYUNpZSBkMiBOZXR3b3JrIjsKKwljb21wYXRpYmxlID0gImxhY2llLGQyLW5ldHdvcmsiLCAibWFydmVsbCxvcmlvbjV4LTg4ZjUxODIiLCAibWFydmVsbCxvcmlvbjV4IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4NDAwMDAwMD47IC8qIDY0IE1CICovCisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKKwl9OworCisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAweGYxMDAwMDAwIDB4MTAwMDAwPiwKKwkJCSA8TUJVU19JRCgweDA5LCAweDAwKSAwIDB4ZjIyMDAwMDAgMHg4MDA+LAorCQkJIDxNQlVTX0lEKDB4MDEsIDB4MGYpIDAgMHhmZmY4MDAwMCAweDgwMDAwPjsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQlwaW5jdHJsLTAgPSA8JnBteF9idXR0b25zPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlmcm9udF9idXR0b24geworCQkJbGFiZWwgPSAiRnJvbnQgUHVzaCBCdXR0b24iOworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJZ3Bpb3MgPSA8JmdwaW8wIDE4IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXBvd2VyX3JvY2tlcl9zd19vbiB7CisJCQlsYWJlbCA9ICJQb3dlciByb2NrZXIgc3dpdGNoIChvbnxhdXRvKSI7CisJCQlsaW51eCxpbnB1dC10eXBlID0gPDU+OyAvKiBFVl9TVyAqLworCQkJbGludXgsY29kZSA9IDwxPjsgLyogRDJORVRfU1dJVENIX1BPV0VSX09OICovCisJCQlncGlvcyA9IDwmZ3BpbzAgOCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlwb3dlcl9yb2NrZXJfc3dfb2ZmIHsKKwkJCWxhYmVsID0gIlBvd2VyIHJvY2tlciBzd2l0Y2ggKGF1dG98b2ZmKSI7CisJCQlsaW51eCxpbnB1dC10eXBlID0gPDU+OyAvKiBFVl9TVyAqLworCQkJbGludXgsY29kZSA9IDwyPjsgLyogRDJORVRfU1dJVENIX1BPV0VSX09GRiAqLworCQkJZ3Bpb3MgPSA8JmdwaW8wIDkgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtMCA9IDwmcG14X3NhdGEwX3Bvd2VyICZwbXhfc2F0YTFfcG93ZXI+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJCXNhdGEwX3Bvd2VyOiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MD47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBMCBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzAgMyBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlzYXRhMV9wb3dlcjogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTEgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8wIDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07Cit9OworCismZGV2YnVzX2Jvb3RjcyB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZGV2YnVzLGtlZXAtY29uZmlnOworCisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIE1URCBjb2RlIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgTVgyOUxWNDAwQ0JDVAorCSAqIGFzIGEgYm90dG9tLXR5cGUgZGV2aWNlLiBUaGlzIGNvdWxkIGNhdXNlIHJpc2tzIG9mCisJICogYWNjaWRlbnRhbGx5IGVyYXNpbmcgY3JpdGljYWwgZmxhc2ggc2VjdG9ycy4gV2UgdGh1cyBkZWZpbmUKKwkgKiBhIHNpbmdsZSwgd3JpdGUtcHJvdGVjdGVkIHBhcnRpdGlvbiBjb3ZlcmluZyB0aGUgd2hvbGUKKwkgKiBmbGFzaC4gIFRPRE86IG9uY2UgdGhlIGZsYXNoIHBhcnQgVE9QL0JPVFRPTSBkZXRlY3Rpb24KKwkgKiBpc3N1ZSBpcyBzb3J0ZWQgb3V0IGluIHRoZSBNVEQgY29kZSwgYnJlYWsgdGhpcyBpbnRvIGF0CisJICogbGVhc3QgdGhyZWUgcGFydGl0aW9uczogJ3UtYm9vdCBjb2RlJywgJ3UtYm9vdCBlbnZpcm9ubWVudCcKKwkgKiBhbmQgJ3doYXRldmVyIGlzIGxlZnQnLgorCSAqLworCWZsYXNoQDAgeworCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCXJlZyA9IDwwIDB4ODAwMDA+OworCQliYW5rLXdpZHRoID0gPDE+OworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJGdWxsNTEyS2IiOworCQkJcmVnID0gPDAgMHg4MDAwMD47CisJCQlyZWFkLW9ubHk7CisJCX07CisJfTsKK307CisKKyZtZGlvIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhwaHk6IGV0aGVybmV0LXBoeSB7CisJCXJlZyA9IDw4PjsKKwl9OworfTsKKworJmVoY2kwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhlcm5ldC1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHk+OworCX07Cit9OworCismaTJjIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwlydGNAMzIgeworCQljb21wYXRpYmxlID0gInJpY29oLHJzNWMzNzJiIjsKKwkJcmVnID0gPDB4MzI+OworCX07CisKKwlmYW5AM2UgeworCQljb21wYXRpYmxlID0gImdtdCxnNzYyIjsKKwkJcmVnID0gPDB4M2U+OworCisJCS8qIE5vdCBlbm91Z2ggSFcgaW5mbyAqLworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwllZXByb21ANTAgeworCQljb21wYXRpYmxlID0gImF0bWVsLDI0YzA4IjsKKwkJcmVnID0gPDB4NTA+OworCX07Cit9OworCismcGluY3RybCB7CisJcGluY3RybC0wID0gPCZwbXhfbGVkcyAmcG14X2JvYXJkX2lkICZwbXhfZmFuX2ZhaWw+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwlwbXhfYm9hcmRfaWQ6IHBteC1ib2FyZC1pZCB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAwIiwgIm1wcDEiLCAibXBwMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBteF9idXR0b25zOiBwbXgtYnV0dG9ucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA4IiwgIm1wcDkiLCAibXBwMTgiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfZmFuX2ZhaWw6IHBteC1mYW4tZmFpbCB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJLyoKKwkgKiBNUFA2OiBSZWQgZnJvbnQgTEVECisJICogTVBQMTY6IEJsdWUgZnJvbnQgTEVEIGJsaW5rIGNvbnRyb2wKKwkgKi8KKwlwbXhfbGVkczogcG14LWxlZHMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNiIsICJtcHAxNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBteF9zYXRhMF9sZWRfYWN0aXZlOiBwbXgtc2F0YTAtbGVkLWFjdGl2ZSB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAxNCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2F0YTAiOworCX07CisKKwlwbXhfc2F0YTBfcG93ZXI6IHBteC1zYXRhMC1wb3dlciB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG14X3NhdGExX2xlZF9hY3RpdmU6IHBteC1zYXRhMS1sZWQtYWN0aXZlIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJzYXRhMSI7CisJfTsKKworCXBteF9zYXRhMV9wb3dlcjogcG14LXNhdGExLXBvd2VyIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDEyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJLyoKKwkgKiBOb24gTVBQIEdQSU9zOgorCSAqICBHUElPIDIyOiBVU0IgcG9ydCAxIGZ1c2UgKDAgPSBGYWlsLCAxID0gT2spCisJICogIEdQSU8gMjM6IEJsdWUgZnJvbnQgTEVEIG9mZgorCSAqICBHUElPIDI0OiBJbmhpYml0IGJvYXJkIHBvd2VyIG9mZiAoMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCkKKwkgKi8KK307CisKKyZzYXRhIHsKKwlwaW5jdHJsLTAgPSA8JnBteF9zYXRhMF9sZWRfYWN0aXZlCisJCSAgICAgJnBteF9zYXRhMV9sZWRfYWN0aXZlPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXN0YXR1cyA9ICJva2F5IjsKKwluci1wb3J0cyA9IDwyPjsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXgtbGFjaWUtZXRoZXJuZXQtZGlzay1taW5pLXYyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXgtbGFjaWUtZXRoZXJuZXQtZGlzay1taW5pLXYyLmR0cwppbmRleCA1ZWQ2YzEzLi44OWZmNDA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vcmlvbjV4LWxhY2llLWV0aGVybmV0LWRpc2stbWluaS12Mi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1sYWNpZS1ldGhlcm5ldC1kaXNrLW1pbmktdjIuZHRzCkBAIC02LDggKzYsMTkgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCisvKgorICogVE9ETzogYWRkIE9yaW9uIFVTQiBkZXZpY2UgcG9ydCBpbml0IHdoZW4ga2VybmVsLm9yZyBzdXBwb3J0IGlzIGFkZGVkLgorICogVE9ETzogYWRkIGZsYXNoIHdyaXRlIHN1cHBvcnQ6IHNlZSBiZWxvdy4KKyAqIFRPRE86IGFkZCBwb3dlci1vZmYgc3VwcG9ydC4KKyAqIFRPRE86IGFkZCBJMkMgRUVQUk9NIHN1cHBvcnQuCisgKi8KKwogL2R0cy12MS87Ci0vaW5jbHVkZS8gIm9yaW9uNXguZHRzaSIKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAib3Jpb241eC1tdjg4ZjUxODIuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiTGFDaWUgRXRoZXJuZXQgRGlzayBtaW5pIFYyIjsKQEAgLTE5LDQxICszMCwxMDUgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKIAl9OwogCi0Jb2NwQGYxMDAwMDAwIHsKLQkJc2VyaWFsQDEyMDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjY2NjY2Njc+OwotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCXNhdGFAODAwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJbnItcG9ydHMgPSA8Mj47Ci0JCX07CisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAweGYxMDAwMDAwIDB4MTAwMDAwPiwKKwkJCSA8TUJVU19JRCgweDA5LCAweDAwKSAwIDB4ZjIyMDAwMDAgMHg4MDA+LAorCQkJIDxNQlVTX0lEKDB4MDEsIDB4MGYpIDAgMHhmZmY4MDAwMCAweDgwMDAwPjsKIAl9OwogCi0JZ3Bpb19rZXlzIHsKKwlncGlvLWtleXMgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCXBpbmN0cmwtMCA9IDwmcG14X3Bvd2VyX2J1dHRvbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJYnV0dG9uQDEgewogCQkJbGFiZWwgPSAiUG93ZXItb24gU3dpdGNoIjsKLQkJCWxpbnV4LGNvZGUgPSA8MTE2PjsgLyogS0VZX1BPV0VSICovCi0JCQlncGlvcyA9IDwmZ3BpbzAgMTggMD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9QT1dFUj47CisJCQlncGlvcyA9IDwmZ3BpbzAgMTggR1BJT19BQ1RJVkVfSElHSD47CiAJCX07CiAJfTsKIAotCWdwaW9fbGVkcyB7CisJZ3Bpby1sZWRzIHsKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLTAgPSA8JnBteF9wb3dlcl9sZWQ+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJCWxlZEAxIHsKIAkJCWxhYmVsID0gInBvd2VyOmJsdWUiOwotCQkJZ3Bpb3MgPSA8JmdwaW8wIDE2IDE+OworCQkJZ3Bpb3MgPSA8JmdwaW8wIDE2IEdQSU9fQUNUSVZFX0xPVz47CiAJCX07CiAJfTsKIH07CiAKKyZkZXZidXNfYm9vdGNzIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwkvKiBSZWFkIHBhcmFtZXRlcnMgKi8KKwlkZXZidXMsYnVzLXdpZHRoICAgID0gPDg+OworCWRldmJ1cyx0dXJuLW9mZi1wcyAgPSA8OTAwMDA+OworCWRldmJ1cyxiYWRyLXNrZXctcHMgPSA8MD47CisJZGV2YnVzLGFjYy1maXJzdC1wcyA9IDwxODYwMDA+OworCWRldmJ1cyxhY2MtbmV4dC1wcyAgPSA8MTg2MDAwPjsKKworCS8qIFdyaXRlIHBhcmFtZXRlcnMgKi8KKwlkZXZidXMsd3ItaGlnaC1wcyAgPSA8OTAwMDA+OworCWRldmJ1cyx3ci1sb3ctcHMgICA9IDw5MDAwMD47CisJZGV2YnVzLGFsZS13ci1wcyAgID0gPDkwMDAwPjsKKworCS8qCisJICogQ3VycmVudGx5IHRoZSBNVEQgY29kZSBkb2VzIG5vdCByZWNvZ25pemUgdGhlIE1YMjlMVjQwMENCQ1QKKwkgKiBhcyBhIGJvdHRvbS10eXBlIGRldmljZS4gVGhpcyBjb3VsZCBjYXVzZSByaXNrcyBvZgorCSAqIGFjY2lkZW50YWxseSBlcmFzaW5nIGNyaXRpY2FsIGZsYXNoIHNlY3RvcnMuIFdlIHRodXMgZGVmaW5lCisJICogYSBzaW5nbGUsIHdyaXRlLXByb3RlY3RlZCBwYXJ0aXRpb24gY292ZXJpbmcgdGhlIHdob2xlCisJICogZmxhc2guICBUT0RPOiBvbmNlIHRoZSBmbGFzaCBwYXJ0IFRPUC9CT1RUT00gZGV0ZWN0aW9uCisJICogaXNzdWUgaXMgc29ydGVkIG91dCBpbiB0aGUgTVREIGNvZGUsIGJyZWFrIHRoaXMgaW50byBhdAorCSAqIGxlYXN0IHRocmVlIHBhcnRpdGlvbnM6ICd1LWJvb3QgY29kZScsICd1LWJvb3QgZW52aXJvbm1lbnQnCisJICogYW5kICd3aGF0ZXZlciBpcyBsZWZ0Jy4KKwkgKi8KKwlmbGFzaEAwIHsKKwkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQlyZWcgPSA8MCAweDgwMDAwPjsKKwkJYmFuay13aWR0aCA9IDwxPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIkZ1bGw1MTJLYiI7CisJCQlyZWcgPSA8MCAweDgwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKwl9OworfTsKKworJmVoY2kwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhlcm5ldC1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHk+OworCX07Cit9OworCismaTJjIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwlydGNAMzIgeworCQljb21wYXRpYmxlID0gInJpY29oLHJzNWMzNzJhIjsKKwkJcmVnID0gPDB4MzI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMD47CisJCWludGVycnVwdHMgPSA8MyBJUlFfVFlQRV9MRVZFTF9MT1c+OworCX07Cit9OworCiAmbWRpbyB7CiAJc3RhdHVzID0gIm9rYXkiOwogCkBAIC02MiwxMCArMTM3LDM4IEBACiAJfTsKIH07CiAKLSZldGggewotCXN0YXR1cyA9ICJva2F5IjsKKyZwaW5jdHJsIHsKKwlwaW5jdHJsLTAgPSA8JnBteF9ydGMgJnBteF9wb3dlcl9sZWRfY3RybD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAotCWV0aGVybmV0LXBvcnRAMCB7Ci0JCXBoeS1oYW5kbGUgPSA8JmV0aHBoeT47CisJcG14X3Bvd2VyX2J1dHRvbjogcG14LXBvd2VyLWJ1dHRvbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAxOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CiAJfTsKKworCXBteF9wb3dlcl9sZWQ6IHBteC1wb3dlci1sZWQgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfcG93ZXJfbGVkX2N0cmw6IHBteC1wb3dlci1sZWQtY3RybCB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAxNyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBteF9ydGM6IHBteC1ydGMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CisKKyZzYXRhIHsKKwlwaW5jdHJsLTAgPSA8JnBteF9zYXRhMCAmcG14X3NhdGExPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXN0YXR1cyA9ICJva2F5IjsKKwluci1wb3J0cyA9IDwyPjsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXgtbWF4dG9yLXNoYXJlZC1zdG9yYWdlLTIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1tYXh0b3Itc2hhcmVkLXN0b3JhZ2UtMi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzNDg0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXgtbWF4dG9yLXNoYXJlZC1zdG9yYWdlLTIuZHRzCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorICogQ29weXJpZ2h0IChDKSBTeWx2ZXIgQnJ1bmVhdSA8c3lsdmVyLmJydW5lYXVAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAib3Jpb241eC1tdjg4ZjUxODIuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWF4dG9yIFNoYXJlZCBTdG9yYWdlIElJIjsKKwljb21wYXRpYmxlID0gIm1heHRvcixzaGFyZWQtc3RvcmFnZS0yIiwgIm1hcnZlbGwsb3Jpb241eC04OGY1MTgyIiwgIm1hcnZlbGwsb3Jpb241eCI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDQwMDAwMDA+OyAvKiA2NCBNQiAqLworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCXNvYyB7CisJCXJhbmdlcyA9IDxNQlVTX0lEKDB4ZjAsIDB4MDEpIDAgMHhmMTAwMDAwMCAweDEwMDAwMD4sCisJCQkgPE1CVVNfSUQoMHgwOSwgMHgwMCkgMCAweGYyMjAwMDAwIDB4ODAwPiwKKwkJCSA8TUJVU19JRCgweDAxLCAweDBmKSAwIDB4ZmY4MDAwMDAgMHg0MDAwMD47CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKwkJcGluY3RybC0wID0gPCZwbXhfYnV0dG9ucz47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiUG93ZXIiOworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJZ3Bpb3MgPSA8JmdwaW8wIDExIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJcmVzZXQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmZ3BpbzAgMTIgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworfTsKKworJmRldmJ1c19ib290Y3MgeworCXN0YXR1cyA9ICJva2F5IjsKKworCWRldmJ1cyxrZWVwLWNvbmZpZzsKKworCS8qCisJICogQ3VycmVudGx5IHRoZSBNVEQgY29kZSBkb2VzIG5vdCByZWNvZ25pemUgdGhlIE1YMjlMVjQwMENCQ1QKKwkgKiBhcyBhIGJvdHRvbS10eXBlIGRldmljZS4gVGhpcyBjb3VsZCBjYXVzZSByaXNrcyBvZgorCSAqIGFjY2lkZW50YWxseSBlcmFzaW5nIGNyaXRpY2FsIGZsYXNoIHNlY3RvcnMuIFdlIHRodXMgZGVmaW5lCisJICogYSBzaW5nbGUsIHdyaXRlLXByb3RlY3RlZCBwYXJ0aXRpb24gY292ZXJpbmcgdGhlIHdob2xlCisJICogZmxhc2guICBUT0RPOiBvbmNlIHRoZSBmbGFzaCBwYXJ0IFRPUC9CT1RUT00gZGV0ZWN0aW9uCisJICogaXNzdWUgaXMgc29ydGVkIG91dCBpbiB0aGUgTVREIGNvZGUsIGJyZWFrIHRoaXMgaW50byBhdAorCSAqIGxlYXN0IHRocmVlIHBhcnRpdGlvbnM6ICd1LWJvb3QgY29kZScsICd1LWJvb3QgZW52aXJvbm1lbnQnCisJICogYW5kICd3aGF0ZXZlciBpcyBsZWZ0Jy4KKwkgKi8KKwlmbGFzaEAwIHsKKwkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQlyZWcgPSA8MCAweDQwMDAwPjsKKwkJYmFuay13aWR0aCA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJfTsKK307CisKKyZtZGlvIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhwaHk6IGV0aGVybmV0LXBoeSB7CisJCXJlZyA9IDw4PjsKKwl9OworfTsKKworJmVoY2kwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlldGhlcm5ldC1wb3J0QDAgeworCQlwaHktaGFuZGxlID0gPCZldGhwaHk+OworCX07Cit9OworCismaTJjIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwlydGNANjggeworCQljb21wYXRpYmxlID0gInN0LG00MXQ4MSI7CisJCXJlZyA9IDwweDY4PjsKKwkJcGluY3RybC0wID0gPCZwbXhfcnRjPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzA+OworCQlpbnRlcnJ1cHRzID0gPDMgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJnBpbmN0cmwgeworCXBpbmN0cmwtMCA9IDwmcG14X2xlZHMgJnBteF9taXNjPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJcG14X2J1dHRvbnM6IHBteC1idXR0b25zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDExIiwgIm1wcDEyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJLyoKKwkgKiBNUFAwOiBQb3dlciBMRUQKKwkgKiBNUFAxOiBFcnJvciBMRUQKKwkgKi8KKwlwbXhfbGVkczogcG14LWxlZHMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMCIsICJtcHAxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJLyoKKwkgKiBNUFA0OiBIREQgaW5kLiAoU2luZ2xlL0R1YWwpCisJICogTVBQNTogSEQwIDVWIGNvbnRyb2wKKwkgKiBNUFA2OiBIRDAgMTJWIGNvbnRyb2wKKwkgKiBNUFA3OiBIRDEgNVYgY29udHJvbAorCSAqIE1QUDg6IEhEMSAxMlYgY29udHJvbAorCSAqLworCXBteF9taXNjOiBwbXgtbWlzYyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0IiwgIm1wcDUiLCAibXBwNiIsICJtcHA3IiwgIm1wcDgiLCAibXBwMTAiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfcnRjOiBwbXgtcnRjIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfc2F0YTBfbGVkX2FjdGl2ZTogcG14LXNhdGEwLWxlZC1hY3RpdmUgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNhdGEwIjsKKwl9OworCisJcG14X3NhdGExX2xlZF9hY3RpdmU6IHBteC1zYXRhMS1sZWQtYWN0aXZlIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJzYXRhMSI7CisJfTsKKworCS8qCisJICogTm9uIE1QUCBHUElPczoKKwkgKiAgR1BJTyAyMjogVVNCIHBvcnQgMSBmdXNlICgwID0gRmFpbCwgMSA9IE9rKQorCSAqICBHUElPIDIzOiBCbHVlIGZyb250IExFRCBvZmYKKwkgKiAgR1BJTyAyNDogSW5oaWJpdCBib2FyZCBwb3dlciBvZmYgKDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQpCisJICovCit9OworCismc2F0YSB7CisJcGluY3RybC0wID0gPCZwbXhfc2F0YTBfbGVkX2FjdGl2ZQorCQkgICAgICZwbXhfc2F0YTFfbGVkX2FjdGl2ZT47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlzdGF0dXMgPSAib2theSI7CisJbnItcG9ydHMgPSA8Mj47Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vcmlvbjV4LW12ODhmNTE4Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1tdjg4ZjUxODIuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWVkNzFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1tdjg4ZjUxODIuZHRzaQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgIm9yaW9uNXguZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uNXgtODhmNTE4MiIsICJtYXJ2ZWxsLG9yaW9uNXgiOworCisJc29jIHsKKwkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uNXgtODhmNTE4Mi1tYnVzIiwgInNpbXBsZS1idXMiOworCisJCWludGVybmFsLXJlZ3MgeworCQkJcGluY3RybDogcGluY3RybEAxMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLDg4ZjUxODItcGluY3RybCI7CisJCQkJcmVnID0gPDB4MTAwMDAgMHg4PiwgPDB4MTAwNTAgMHg0PjsKKworCQkJCXBteF9zYXRhMDogcG14LXNhdGEwIHsKKwkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIiwgIm1wcDE0IjsKKwkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzYXRhMCI7CisJCQkJfTsKKworCQkJCXBteF9zYXRhMTogcG14LXNhdGExIHsKKwkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEzIiwgIm1wcDE1IjsKKwkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzYXRhMSI7CisJCQkJfTsKKwkJCX07CisKKwkJCWNvcmVfY2xrOiBjb3JlLWNsb2Nrc0AxMDAzMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12ODhmNTE4Mi1jb3JlLWNsb2NrIjsKKwkJCQlyZWcgPSA8MHgxMDAxMCAweDQ+OworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCX07CisKKwkJCW1idXNjOiBtYnVzLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtYnVzLWNvbnRyb2xsZXIiOworCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MTUwMCAweDIwPjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vcmlvbjV4LXJkODhmNTE4Mi1uYXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1yZDg4ZjUxODItbmFzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmIwNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC1yZDg4ZjUxODItbmFzLmR0cwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAib3Jpb241eC1tdjg4ZjUxODIuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWFydmVsbCBSZWZlcmVuY2UgRGVzaWduIDg4RjUxODIgTkFTIjsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwscmQtODhmNTE4Mi1uYXMiLCAibWFydmVsbCxvcmlvbjV4LTg4ZjUxODIiLCAibWFydmVsbCxvcmlvbjV4IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4NDAwMDAwMD47IC8qIDY0IE1CICovCisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggZWFybHlwcmludGsiOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKKwl9OworCisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAweGYxMDAwMDAwIDB4MTAwMDAwPiwKKwkJICAgICAgICAgPE1CVVNfSUQoMHgwOSwgMHgwMCkgMCAweGYyMjAwMDAwIDB4ODAwPiwKKwkJCSA8TUJVU19JRCgweDAxLCAweDBmKSAwIDB4ZjQwMDAwMDAgMHg4MDAwMD4sCisJCQkgPE1CVVNfSUQoMHgwMSwgMHgxZCkgMCAweGZjMDAwMDAwIDB4MTAwMDAwMD47CisJfTsKKworCWdwaW8tbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC0wID0gPCZwbXhfZGVidWdfbGVkPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCQlsZWRAMCB7CisJCQlsYWJlbCA9ICJyZDg4ZjUxODI6Y3B1IjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJZ3Bpb3MgPSA8JmdwaW8wIDAgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKK307CisKKyZkZXZidXNfYm9vdGNzIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwkvKiBSZWFkIHBhcmFtZXRlcnMgKi8KKwlkZXZidXMsYnVzLXdpZHRoICAgID0gPDg+OworCWRldmJ1cyx0dXJuLW9mZi1wcyAgPSA8OTAwMDA+OworCWRldmJ1cyxiYWRyLXNrZXctcHMgPSA8MD47CisJZGV2YnVzLGFjYy1maXJzdC1wcyA9IDwxODYwMDA+OworCWRldmJ1cyxhY2MtbmV4dC1wcyAgPSA8MTg2MDAwPjsKKworCS8qIFdyaXRlIHBhcmFtZXRlcnMgKi8KKwlkZXZidXMsd3ItaGlnaC1wcyAgPSA8OTAwMDA+OworCWRldmJ1cyx3ci1sb3ctcHMgICA9IDw5MDAwMD47CisJZGV2YnVzLGFsZS13ci1wcyAgID0gPDkwMDAwPjsKKworCWZsYXNoQDAgeworCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCXJlZyA9IDwwIDB4ODAwMDA+OworCQliYW5rLXdpZHRoID0gPDE+OworCX07Cit9OworCismZGV2YnVzX2NzMSB7CisJc3RhdHVzID0gIm9rYXkiOworCisJLyogUmVhZCBwYXJhbWV0ZXJzICovCisJZGV2YnVzLGJ1cy13aWR0aCAgICA9IDw4PjsKKwlkZXZidXMsdHVybi1vZmYtcHMgID0gPDkwMDAwPjsKKwlkZXZidXMsYmFkci1za2V3LXBzID0gPDA+OworCWRldmJ1cyxhY2MtZmlyc3QtcHMgPSA8MTg2MDAwPjsKKwlkZXZidXMsYWNjLW5leHQtcHMgID0gPDE4NjAwMD47CisKKwkvKiBXcml0ZSBwYXJhbWV0ZXJzICovCisJZGV2YnVzLHdyLWhpZ2gtcHMgID0gPDkwMDAwPjsKKwlkZXZidXMsd3ItbG93LXBzICAgPSA8OTAwMDA+OworCWRldmJ1cyxhbGUtd3ItcHMgICA9IDw5MDAwMD47CisKKwlmbGFzaEAwIHsKKwkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQlyZWcgPSA8MCAweDEwMDAwMDA+OworCQliYW5rLXdpZHRoID0gPDE+OworCX07Cit9OworCismZWhjaTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZlaGNpMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZXRoZXJuZXQtcG9ydEAwIHsKKwkJcGh5LWhhbmRsZSA9IDwmZXRocGh5PjsKKwl9OworfTsKKworJmkyYyB7CisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJcnRjQDY4IHsKKwkJcGluY3RybC0wID0gPCZwbXhfcnRjPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM4IjsKKwkJcmVnID0gPDB4Njg+OworCX07Cit9OworCismbWRpbyB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZXRocGh5OiBldGhlcm5ldC1waHkgeworCQlyZWcgPSA8OD47CisJfTsKK307CisKKyZwaW5jdHJsIHsKKwlwaW5jdHJsLTAgPSA8JnBteF9yZXNldF9zd2l0Y2ggJnBteF9taXNjX2dwaW9zCisJCSZwbXhfcGNpX2dwaW9zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJLyoKKwkgKiBNUFBbMjBdIFBDSSBDbG9jayB0byBNVjg4RjUxODIKKwkgKiBNUFBbMjFdIFBDSSBDbG9jayB0byBtaW5pIFBDSSBDT04xMQorCSAqIE1QUFsyMl0gVVNCIDAgb3ZlciBjdXJyZW50IGluZGljYXRpb24KKwkgKiBNUFBbMjNdIFVTQiAxIG92ZXIgY3VycmVudCBpbmRpY2F0aW9uCisJICogTVBQWzI0XSBVU0IgMSBvdmVyIGN1cnJlbnQgZW5hYmxlCisJICogTVBQWzI1XSBVU0IgMCBvdmVyIGN1cnJlbnQgZW5hYmxlCisJICovCisKKwlwbXhfZGVidWdfbGVkOiBwbXgtZGVidWdfbGVkIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDAiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfcmVzZXRfc3dpdGNoOiBwbXgtcmVzZXQtc3dpdGNoIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfcnRjOiBwbXgtcnRjIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwbXhfbWlzY19ncGlvczogcG14LW1pc2MtZ3Bpb3MgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNCIsICJtcHA1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG14X3BjaV9ncGlvczogcG14LXBjaS1ncGlvcyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgIm1wcDciOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OworCismc2F0YSB7CisJcGluY3RybC0wID0gPCZwbXhfc2F0YTAgJnBteF9zYXRhMT47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlzdGF0dXMgPSAib2theSI7CisJbnItcG9ydHMgPSA8Mj47Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vcmlvbjV4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vcmlvbjV4LmR0c2kKaW5kZXggMTc0ZDg5Mi4uNzVjZDAxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb3Jpb241eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29yaW9uNXguZHRzaQpAQCAtNiw3ICs2LDkgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0vaW5jbHVkZS8gInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworI2RlZmluZSBNQlVTX0lEKHRhcmdldCxhdHRyaWJ1dGVzKSAoKCh0YXJnZXQpIDw8IDI0KSB8ICgoYXR0cmlidXRlcykgPDwgMTYpKQogCiAvIHsKIAltb2RlbCA9ICJNYXJ2ZWxsIE9yaW9uNXggU29DIjsKQEAgLTE3LDE0OSArMTksMjE0IEBACiAJCWdwaW8wID0gJmdwaW8wOwogCX07CiAKLQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7Ci0JCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1pbnRjIjsKLQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDwweGYxMDIwMjAwIDB4MDg+OwotCX07Ci0KLQlvY3BAZjEwMDAwMDAgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweGYxMDAwMDAwIDB4NDAwMDAwMAotCQkgICAgICAgICAgMHhmMjIwMDAwMCAweGYyMjAwMDAwIDB4MDAwMDgwMD47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29udHJvbGxlciA9IDwmbWJ1c2M+OwogCi0JCWdwaW8wOiBncGlvQDEwMTAwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1ncGlvIjsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJcmVnID0gPDB4MTAxMDAgMHg0MD47Ci0JCQluZ3Bpb3MgPSA8MzI+OwotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJaW50ZXJydXB0cyA9IDw2PiwgPDc+LCA8OD4sIDw5PjsKLQkJfTsKLQotCQlzcGlAMTA2MDAgewotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLXNwaSI7CisJCWRldmJ1c19ib290Y3M6IGRldmJ1cy1ib290Y3MgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWRldmJ1cyI7CisJCQlyZWcgPSA8TUJVU19JRCgweGYwLCAweDAxKSAweDEwNDZDIDB4ND47CisJCQlyYW5nZXMgPSA8MCBNQlVTX0lEKDB4MDEsIDB4MGYpIDAgMHhmZmZmZmZmZj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCXJlZyA9IDwweDEwNjAwIDB4Mjg+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljbG9ja3MgPSA8JmNvcmVfY2xrIDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAotCQlpMmNAMTEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4eHgtaTJjIjsKLQkJCXJlZyA9IDwweDExMDAwIDB4MjA+OworCQlkZXZidXNfY3MwOiBkZXZidXMtY3MwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1kZXZidXMiOworCQkJcmVnID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMHgxMDQ1QyAweDQ+OworCQkJcmFuZ2VzID0gPDAgTUJVU19JRCgweDAxLCAweDFlKSAwIDB4ZmZmZmZmZmY+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NT47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2xvY2tzID0gPCZjb3JlX2NsayAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKLQkJc2VyaWFsQDEyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOwotCQkJcmVnID0gPDB4MTIwMDAgMHgxMDA+OwotCQkJcmVnLXNoaWZ0ID0gPDI+OwotCQkJaW50ZXJydXB0cyA9IDwzPjsKLQkJCS8qIHNldCBjbG9jay1mcmVxdWVuY3kgaW4gYm9hcmQgZHRzICovCisJCWRldmJ1c19jczE6IGRldmJ1cy1jczEgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWRldmJ1cyI7CisJCQlyZWcgPSA8TUJVU19JRCgweGYwLCAweDAxKSAweDEwNDYwIDB4ND47CisJCQlyYW5nZXMgPSA8MCBNQlVTX0lEKDB4MDEsIDB4MWQpIDAgMHhmZmZmZmZmZj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2xvY2tzID0gPCZjb3JlX2NsayAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKLQkJc2VyaWFsQDEyMTAwIHsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOwotCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OwotCQkJcmVnLXNoaWZ0ID0gPDI+OwotCQkJaW50ZXJydXB0cyA9IDw0PjsKLQkJCS8qIHNldCBjbG9jay1mcmVxdWVuY3kgaW4gYm9hcmQgZHRzICovCisJCWRldmJ1c19jczI6IGRldmJ1cy1jczIgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWRldmJ1cyI7CisJCQlyZWcgPSA8TUJVU19JRCgweGYwLCAweDAxKSAweDEwNDY0IDB4ND47CisJCQlyYW5nZXMgPSA8MCBNQlVTX0lEKDB4MDEsIDB4MWIpIDAgMHhmZmZmZmZmZj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2xvY2tzID0gPCZjb3JlX2NsayAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKLQkJd2R0QDIwMzAwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi13ZHQiOwotCQkJcmVnID0gPDB4MjAzMDAgMHgyOD47Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07CisJCWludGVybmFsLXJlZ3MgeworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MCBNQlVTX0lEKDB4ZjAsIDB4MDEpIDAgMHgxMDAwMDA+OwogCi0JCWVoY2lANTAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWVoY2kiOwotCQkJcmVnID0gPDB4NTAwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8MTc+OwotCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJfTsKLQotCQl4b3JANjA5MDAgewotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLXhvciI7Ci0JCQlyZWcgPSA8MHg2MDkwMCAweDEwMAotCQkJICAgICAgIDB4NjBiMDAgMHgxMDA+OwotCQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCQl4b3IwMCB7Ci0JCQkgICAgICBpbnRlcnJ1cHRzID0gPDMwPjsKLQkJCSAgICAgIGRtYWNhcCxtZW1jcHk7Ci0JCQkgICAgICBkbWFjYXAseG9yOworCQkJZ3BpbzA6IGdwaW9AMTAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1ncGlvIjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJcmVnID0gPDB4MTAxMDAgMHg0MD47CisJCQkJbmdwaW9zID0gPDMyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdHMgPSA8Nj4sIDw3PiwgPDg+LCA8OT47CiAJCQl9OwotCQkJeG9yMDEgewotCQkJICAgICAgaW50ZXJydXB0cyA9IDwzMT47Ci0JCQkgICAgICBkbWFjYXAsbWVtY3B5OwotCQkJICAgICAgZG1hY2FwLHhvcjsKLQkJCSAgICAgIGRtYWNhcCxtZW1zZXQ7CisKKwkJCXNwaTogc3BpQDEwNjAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tc3BpIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCXJlZyA9IDwweDEwNjAwIDB4Mjg+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlpMmM6IGkyY0AxMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4eHgtaTJjIjsKKwkJCQlyZWcgPSA8MHgxMTAwMCAweDIwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDU+OworCQkJCWNsb2NrcyA9IDwmY29yZV9jbGsgMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQwOiBzZXJpYWxAMTIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOworCQkJCXJlZyA9IDwweDEyMDAwIDB4MTAwPjsKKwkJCQlyZWctc2hpZnQgPSA8Mj47CisJCQkJaW50ZXJydXB0cyA9IDwzPjsKKwkJCQljbG9ja3MgPSA8JmNvcmVfY2xrIDA+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQl1YXJ0MTogc2VyaWFsQDEyMTAwIHsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTBhIjsKKwkJCQlyZWcgPSA8MHgxMjEwMCAweDEwMD47CisJCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJCWludGVycnVwdHMgPSA8ND47CisJCQkJY2xvY2tzID0gPCZjb3JlX2NsayAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJYnJpZGdlX2ludGM6IGJyaWRnZS1pbnRlcnJ1cHQtY3RybEAyMDExMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWJyaWRnZS1pbnRjIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweDIwMTEwIDB4OD47CisJCQkJaW50ZXJydXB0cyA9IDwwPjsKKwkJCQltYXJ2ZWxsLCNpbnRlcnJ1cHRzID0gPDQ+OworCQkJfTsKKworCQkJaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAyMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1pbnRjIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweDIwMjAwIDB4MDg+OworCQkJfTsKKworCQkJdGltZXI6IHRpbWVyQDIwMzAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tdGltZXIiOworCQkJCXJlZyA9IDwweDIwMzAwIDB4MjA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmJyaWRnZV9pbnRjPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE+LCA8Mj47CisJCQkJY2xvY2tzID0gPCZjb3JlX2NsayAwPjsKKwkJCX07CisKKwkJCXdkdDogd2R0QDIwMzAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24td2R0IjsKKwkJCQlyZWcgPSA8MHgyMDMwMCAweDI4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZicmlkZ2VfaW50Yz47CisJCQkJaW50ZXJydXB0cyA9IDwzPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQllaGNpMDogZWhjaUA1MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWVoY2kiOworCQkJCXJlZyA9IDwweDUwMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNz47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXhvcjogZG1hLWNvbnRyb2xsZXJANjA5MDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi14b3IiOworCQkJCXJlZyA9IDwweDYwOTAwIDB4MTAwCisJCQkJICAgICAgIDB4NjBiMDAgMHgxMDA+OworCQkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJCXhvcjAwIHsKKwkJCQkgICAgICBpbnRlcnJ1cHRzID0gPDMwPjsKKwkJCQkgICAgICBkbWFjYXAsbWVtY3B5OworCQkJCSAgICAgIGRtYWNhcCx4b3I7CisJCQkJfTsKKwkJCQl4b3IwMSB7CisJCQkJICAgICAgaW50ZXJydXB0cyA9IDwzMT47CisJCQkJICAgICAgZG1hY2FwLG1lbWNweTsKKwkJCQkgICAgICBkbWFjYXAseG9yOworCQkJCSAgICAgIGRtYWNhcCxtZW1zZXQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWV0aDogZXRoZXJuZXQtY29udHJvbGxlckA3MjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWV0aCI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJcmVnID0gPDB4NzIwMDAgMHg0MDAwPjsKKwkJCQltYXJ2ZWxsLHR4LWNoZWNrc3VtLWxpbWl0ID0gPDE2MDA+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCQlldGhwb3J0OiBldGhlcm5ldC1wb3J0QDAgeworCQkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZXRoLXBvcnQiOworCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdHMgPSA8MjE+OworCQkJCQkvKiBvdmVyd3JpdGUgTUFDIGFkZHJlc3MgaW4gYm9vdGxvYWRlciAqLworCQkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkJCS8qIHNldCBwaHktaGFuZGxlIHByb3BlcnR5IGluIGJvYXJkIGZpbGUgKi8KKwkJCQl9OworCQkJfTsKKworCQkJbWRpbzogbWRpby1idXNANzIwMDQgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1tZGlvIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlyZWcgPSA8MHg3MjAwNCAweDg0PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQkJLyogYWRkIHBoeSBub2RlcyBpbiBib2FyZCBmaWxlICovCisJCQl9OworCisJCQlzYXRhOiBzYXRhQDgwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tc2F0YSI7CisJCQkJcmVnID0gPDB4ODAwMDAgMHg1MDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDI5PjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZWhjaTE6IGVoY2lAYTAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1laGNpIjsKKwkJCQlyZWcgPSA8MHhhMDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MTI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCQl9OwogCi0JCWV0aDogZXRoZXJuZXQtY29udHJvbGxlckA3MjAwMCB7Ci0JCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZXRoIjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQlyZWcgPSA8MHg3MjAwMCAweDQwMDA+OwotCQkJbWFydmVsbCx0eC1jaGVja3N1bS1saW1pdCA9IDwxNjAwPjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0KLQkJCWV0aGVybmV0LXBvcnRAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWV0aC1wb3J0IjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJLyogb3ZlcndyaXRlIE1BQyBhZGRyZXNzIGluIGJvb3Rsb2FkZXIgKi8KLQkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07Ci0JCQkJLyogc2V0IHBoeS1oYW5kbGUgcHJvcGVydHkgaW4gYm9hcmQgZmlsZSAqLwotCQkJfTsKLQkJfTsKLQotCQltZGlvOiBtZGlvLWJ1c0A3MjAwNCB7Ci0JCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tbWRpbyI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJcmVnID0gPDB4NzIwMDQgMHg4ND47Ci0JCQlpbnRlcnJ1cHRzID0gPDIyPjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0KLQkJCS8qIGFkZCBwaHkgbm9kZXMgaW4gYm9hcmQgZmlsZSAqLwotCQl9OwotCi0JCXNhdGFAODAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLXNhdGEiOwotCQkJcmVnID0gPDB4ODAwMDAgMHg1MDAwPjsKLQkJCWludGVycnVwdHMgPSA8Mjk+OwotCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJfTsKLQotCQljcnlwdG9AOTAwMDAgeworCQljZXNhOiBjcnlwdG9AOTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWNyeXB0byI7Ci0JCQlyZWcgPSA8MHg5MDAwMCAweDEwMDAwPiwKLQkJCSAgICAgIDwweGYyMjAwMDAwIDB4ODAwPjsKKwkJCXJlZyA9IDxNQlVTX0lEKDB4ZjAsIDB4MDEpIDB4OTAwMDAgMHgxMDAwMD4sCisJCQkgICAgICA8TUJVU19JRCgweDA5LCAweDAwKSAweDAgMHg4MDA+OwogCQkJcmVnLW5hbWVzID0gInJlZ3MiLCAic3JhbSI7CiAJCQlpbnRlcnJ1cHRzID0gPDI4PjsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKLQotCQllaGNpQGEwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1laGNpIjsKLQkJCXJlZyA9IDwweGEwMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDEyPjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ByaW1hMi5kdHNpCmluZGV4IDFlODI1NzEuLjNkZjdiYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ByaW1hMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ByaW1hMi5kdHNpCkBAIC0yMDEsNiArMjAxLDcgQEAKIAkJCQljb21wYXRpYmxlID0gInNpcmYscHJpbWEyLXRpY2siOwogCQkJCXJlZyA9IDwweGIwMDIwMDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgMTE+OwogCQkJfTsKIAogCQkJbmFuZEBiMDAzMDAwMCB7CkBAIC0zMTMsOCArMzE0LDkgQEAKIAkJCQlyZWcgPSA8MHhiMDBkMDAwMCAweDEwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDE1PjsKIAkJCQlzaXJmLHNwaS1udW0tY2hpcHNlbGVjdHMgPSA8MT47Ci0JCQkJc2lyZixzcGktZG1hLXJ4LWNoYW5uZWwgPSA8MjU+OwotCQkJCXNpcmYsc3BpLWRtYS10eC1jaGFubmVsID0gPDIwPjsKKwkJCQlkbWFzID0gPCZkbWFjMSA5PiwKKwkJCQkgICAgIDwmZG1hYzEgND47CisJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMTk+OwpAQCAtMzI3LDggKzMyOSw5IEBACiAJCQkJcmVnID0gPDB4YjAxNzAwMDAgMHgxMDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwxNj47CiAJCQkJc2lyZixzcGktbnVtLWNoaXBzZWxlY3RzID0gPDE+OwotCQkJCXNpcmYsc3BpLWRtYS1yeC1jaGFubmVsID0gPDEyPjsKLQkJCQlzaXJmLHNwaS1kbWEtdHgtY2hhbm5lbCA9IDwxMz47CisJCQkJZG1hcyA9IDwmZG1hYzAgMTI+LAorCQkJCSAgICAgPCZkbWFjMCAxMz47CisJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMjA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDY0LWlmYzY0MTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDY0LWlmYzY0MTAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjQ0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLWFwcTgwNjQtaWZjNjQxMC5kdHMKQEAgLTAsMCArMSwxNiBAQAorI2luY2x1ZGUgInFjb20tYXBxODA2NC12Mi4wLmR0c2kiCisKKy8geworCW1vZGVsID0gIlF1YWxjb21tIEFQUTgwNjQvSUZDNjQxMCI7CisJY29tcGF0aWJsZSA9ICJxY29tLGFwcTgwNjQtaWZjNjQxMCIsICJxY29tLGFwcTgwNjQiOworCisJc29jIHsKKwkJZ3NiaUAxNjYwMDAwMCB7CisJCQlzdGF0dXMgPSAib2siOworCQkJcWNvbSxtb2RlID0gPEdTQklfUFJPVF9JMkNfVUFSVD47CisJCQlzZXJpYWxAMTY2NDAwMDAgeworCQkJCXN0YXR1cyA9ICJvayI7CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDY0LXYyLjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tYXBxODA2NC12Mi4wLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1YzM5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tYXBxODA2NC12Mi4wLmR0c2kKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgInFjb20tYXBxODA2NC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDY0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLWFwcTgwNjQuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJmNzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDY0LmR0c2kKQEAgLTAsMCArMSwxNzAgQEAKKy9kdHMtdjEvOworCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9xY29tLGdjYy1tc204OTYwLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3Mvc29jL3Fjb20sZ3NiaS5oPgorCisvIHsKKwltb2RlbCA9ICJRdWFsY29tbSBBUFE4MDY0IjsKKwljb21wYXRpYmxlID0gInFjb20sYXBxODA2NCI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcmFpdCI7CisJCQllbmFibGUtbWV0aG9kID0gInFjb20sa3Bzcy1hY2MtdjEiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXFjb20sYWNjID0gPCZhY2MwPjsKKwkJCXFjb20sc2F3ID0gPCZzYXcwPjsKKwkJfTsKKworCQljcHVAMSB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3JhaXQiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYxIjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MT47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCQlxY29tLGFjYyA9IDwmYWNjMT47CisJCQlxY29tLHNhdyA9IDwmc2F3MT47CisJCX07CisKKwkJY3B1QDIgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicWNvbSxrcHNzLWFjYy12MSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDI+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcWNvbSxhY2MgPSA8JmFjYzI+OworCQkJcWNvbSxzYXcgPSA8JnNhdzI+OworCQl9OworCisJCWNwdUAzIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcmFpdCI7CisJCQllbmFibGUtbWV0aG9kID0gInFjb20sa3Bzcy1hY2MtdjEiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwzPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXFjb20sYWNjID0gPCZhY2MzPjsKKwkJCXFjb20sc2F3ID0gPCZzYXczPjsKKwkJfTsKKworCQlMMjogbDItY2FjaGUgeworCQkJY29tcGF0aWJsZSA9ICJjYWNoZSI7CisJCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJfTsKKwl9OworCisJY3B1LXBtdSB7CisJCWNvbXBhdGlibGUgPSAicWNvbSxrcmFpdC1wbXUiOworCQlpbnRlcnJ1cHRzID0gPDEgMTAgMHgzMDQ+OworCX07CisKKwlzb2M6IHNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCisJCWludGM6IGludGVycnVwdC1jb250cm9sbGVyQDIwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLG1zbS1xZ2ljMiI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8MHgwMjAwMDAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MDIwMDIwMDAgMHgxMDAwPjsKKwkJfTsKKworCQl0aW1lckAyMDBhMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcHNzLXRpbWVyIiwgInFjb20sbXNtLXRpbWVyIjsKKwkJCWludGVycnVwdHMgPSA8MSAxIDB4MzAxPiwKKwkJCQkgICAgIDwxIDIgMHgzMDE+LAorCQkJCSAgICAgPDEgMyAweDMwMT47CisJCQlyZWcgPSA8MHgwMjAwYTAwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjcwMDAwMDA+LAorCQkJCQkgIDwzMjc2OD47CisJCQljcHUtb2Zmc2V0ID0gPDB4ODAwMDA+OworCQl9OworCisJCWFjYzA6IGNsb2NrLWNvbnRyb2xsZXJAMjA4ODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjEiOworCQkJcmVnID0gPDB4MDIwODgwMDAgMHgxMDAwPiwgPDB4MDIwMDgwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlhY2MxOiBjbG9jay1jb250cm9sbGVyQDIwOTgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGtwc3MtYWNjLXYxIjsKKwkJCXJlZyA9IDwweDAyMDk4MDAwIDB4MTAwMD4sIDwweDAyMDA4MDAwIDB4MTAwMD47CisJCX07CisKKwkJYWNjMjogY2xvY2stY29udHJvbGxlckAyMGE4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcHNzLWFjYy12MSI7CisJCQlyZWcgPSA8MHgwMjBhODAwMCAweDEwMDA+LCA8MHgwMjAwODAwMCAweDEwMDA+OworCQl9OworCisJCWFjYzM6IGNsb2NrLWNvbnRyb2xsZXJAMjBiODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjEiOworCQkJcmVnID0gPDB4MDIwYjgwMDAgMHgxMDAwPiwgPDB4MDIwMDgwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlzYXcwOiByZWd1bGF0b3JAMjA4OTAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sc2F3MiI7CisJCQlyZWcgPSA8MHgwMjA4OTAwMCAweDEwMDA+LCA8MHgwMjAwOTAwMCAweDEwMDA+OworCQkJcmVndWxhdG9yOworCQl9OworCisJCXNhdzE6IHJlZ3VsYXRvckAyMDk5MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzYXcyIjsKKwkJCXJlZyA9IDwweDAyMDk5MDAwIDB4MTAwMD4sIDwweDAyMDA5MDAwIDB4MTAwMD47CisJCQlyZWd1bGF0b3I7CisJCX07CisKKwkJc2F3MjogcmVndWxhdG9yQDIwYTkwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLHNhdzIiOworCQkJcmVnID0gPDB4MDIwYTkwMDAgMHgxMDAwPiwgPDB4MDIwMDkwMDAgMHgxMDAwPjsKKwkJCXJlZ3VsYXRvcjsKKwkJfTsKKworCQlzYXczOiByZWd1bGF0b3JAMjBiOTAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sc2F3MiI7CisJCQlyZWcgPSA8MHgwMjBiOTAwMCAweDEwMDA+LCA8MHgwMjAwOTAwMCAweDEwMDA+OworCQkJcmVndWxhdG9yOworCQl9OworCisJCWdzYmk3OiBnc2JpQDE2NjAwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gInFjb20sZ3NiaS12MS4wLjAiOworCQkJcmVnID0gPDB4MTY2MDAwMDAgMHgxMDA+OworCQkJY2xvY2tzID0gPCZnY2MgR1NCSTdfSF9DTEs+OworCQkJY2xvY2stbmFtZXMgPSAiaWZhY2UiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJc2VyaWFsQDE2NjQwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInFjb20sbXNtLXVhcnRkbS12MS4zIiwgInFjb20sbXNtLXVhcnRkbSI7CisJCQkJcmVnID0gPDB4MTY2NDAwMDAgMHgxMDAwPiwKKwkJCQkgICAgICA8MHgxNjYwMDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxNTggMHgwPjsKKwkJCQljbG9ja3MgPSA8JmdjYyBHU0JJN19VQVJUX0NMSz4sIDwmZ2NjIEdTQkk3X0hfQ0xLPjsKKwkJCQljbG9jay1uYW1lcyA9ICJjb3JlIiwgImlmYWNlIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJfTsKKworCQlxY29tLHNzYmlANTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzc2JpIjsKKwkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MTAwMD47CisJCQlxY29tLGNvbnRyb2xsZXItdHlwZSA9ICJwbWljLWFyYml0ZXIiOworCQl9OworCisJCWdjYzogY2xvY2stY29udHJvbGxlckA5MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGdjYy1hcHE4MDY0IjsKKwkJCXJlZyA9IDwweDAwOTAwMDAwIDB4NDAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9xY29tLWFwcTgwNzQtZHJhZ29uYm9hcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDc0LWRyYWdvbmJvYXJkLmR0cwppbmRleCAxM2FjM2UyLi5iNGRmYjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9xY29tLWFwcTgwNzQtZHJhZ29uYm9hcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tYXBxODA3NC1kcmFnb25ib2FyZC5kdHMKQEAgLTMsNCArMyw0MyBAQAogLyB7CiAJbW9kZWwgPSAiUXVhbGNvbW0gQVBRODA3NCBEcmFnb25ib2FyZCI7CiAJY29tcGF0aWJsZSA9ICJxY29tLGFwcTgwNzQtZHJhZ29uYm9hcmQiLCAicWNvbSxhcHE4MDc0IjsKKworCXNvYyB7CisJCXNlcmlhbEBmOTkxZTAwMCB7CisJCQlzdGF0dXMgPSAib2siOworCQl9OworCisJCXNkaGNpQGY5ODI0OTAwIHsKKwkJCWJ1cy13aWR0aCA9IDw4PjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCQlzdGF0dXMgPSAib2siOworCQl9OworCisJCXNkaGNpQGY5OGE0OTAwIHsKKwkJCWNkLWdwaW9zID0gPCZtc21ncGlvIDYyIDB4MT47CisJCQlidXMtd2lkdGggPSA8ND47CisJCX07CisKKworCQlwaW5jdHJsQGZkNTEwMDAwIHsKKwkJCXNwaThfZGVmYXVsdDogc3BpOF9kZWZhdWx0IHsKKwkJCQltb3NpIHsKKwkJCQkJcGlucyA9ICJncGlvNDUiOworCQkJCQlmdW5jdGlvbiA9ICJibHNwX3NwaTgiOworCQkJCX07CisJCQkJbWlzbyB7CisJCQkJCXBpbnMgPSAiZ3BpbzQ2IjsKKwkJCQkJZnVuY3Rpb24gPSAiYmxzcF9zcGk4IjsKKwkJCQl9OworCQkJCWNzIHsKKwkJCQkJcGlucyA9ICJncGlvNDciOworCQkJCQlmdW5jdGlvbiA9ICJibHNwX3NwaTgiOworCQkJCX07CisJCQkJY2xrIHsKKwkJCQkJcGlucyA9ICJncGlvNDgiOworCQkJCQlmdW5jdGlvbiA9ICJibHNwX3NwaTgiOworCQkJCX07CisJCQl9OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDg0LW10cC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLWFwcTgwODQtbXRwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDg0LW10cC5kdHMKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSAicWNvbS1hcHE4MDg0LmR0c2kiCisKKy8geworCW1vZGVsID0gIlF1YWxjb21tIEFQUSA4MDg0LU1UUCI7CisJY29tcGF0aWJsZSA9ICJxY29tLGFwcTgwODQtbXRwIiwgInFjb20sYXBxODA4NCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDg0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLWFwcTgwODQuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2UwMDlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1hcHE4MDg0LmR0c2kKQEAgLTAsMCArMSwxNzkgQEAKKy9kdHMtdjEvOworCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiUXVhbGNvbW0gQVBRIDgwODQiOworCWNvbXBhdGlibGUgPSAicWNvbSxhcHE4MDg0IjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcmFpdCI7CisJCQlyZWcgPSA8MD47CisJCQllbmFibGUtbWV0aG9kID0gInFjb20sa3Bzcy1hY2MtdjIiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcWNvbSxhY2MgPSA8JmFjYzA+OworCQl9OworCisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gInFjb20sa3JhaXQiOworCQkJcmVnID0gPDE+OworCQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYyIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJCXFjb20sYWNjID0gPCZhY2MxPjsKKwkJfTsKKworCQljcHVAMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0IjsKKwkJCXJlZyA9IDwyPjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicWNvbSxrcHNzLWFjYy12MiI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCQlxY29tLGFjYyA9IDwmYWNjMj47CisJCX07CisKKwkJY3B1QDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcmFpdCI7CisJCQlyZWcgPSA8Mz47CisJCQllbmFibGUtbWV0aG9kID0gInFjb20sa3Bzcy1hY2MtdjIiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcWNvbSxhY2MgPSA8JmFjYzM+OworCQl9OworCisJCUwyOiBsMi1jYWNoZSB7CisJCQljb21wYXRpYmxlID0gInFjb20sYXJjaC1jYWNoZSI7CisJCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJCXFjb20sc2F3ID0gPCZzYXdfbDI+OworCQl9OworCX07CisKKwljcHUtcG11IHsKKwkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0LXBtdSI7CisJCWludGVycnVwdHMgPSA8MSA3IDB4ZjA0PjsKKwl9OworCisJdGltZXIgeworCQljb21wYXRpYmxlID0gImFybSxhcm12Ny10aW1lciI7CisJCWludGVycnVwdHMgPSA8MSAyIDB4ZjA4PiwKKwkJCSAgICAgPDEgMyAweGYwOD4sCisJCQkgICAgIDwxIDQgMHhmMDg+LAorCQkJICAgICA8MSAxIDB4ZjA4PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE5MjAwMDAwPjsKKwl9OworCisJc29jOiBzb2MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKworCQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckBmOTAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sbXNtLXFnaWMyIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDwweGY5MDAwMDAwIDB4MTAwMD4sCisJCQkgICAgICA8MHhmOTAwMjAwMCAweDEwMDA+OworCQl9OworCisJCXRpbWVyQGY5MDIwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXM7CisJCQljb21wYXRpYmxlID0gImFybSxhcm12Ny10aW1lci1tZW0iOworCQkJcmVnID0gPDB4ZjkwMjAwMDAgMHgxMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIwMDAwMD47CisKKwkJCWZyYW1lQGY5MDIxMDAwIHsKKwkJCQlmcmFtZS1udW1iZXIgPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDggMHg0PiwKKwkJCQkJICAgICA8MCA3IDB4ND47CisJCQkJcmVnID0gPDB4ZjkwMjEwMDAgMHgxMDAwPiwKKwkJCQkgICAgICA8MHhmOTAyMjAwMCAweDEwMDA+OworCQkJfTsKKworCQkJZnJhbWVAZjkwMjMwMDAgeworCQkJCWZyYW1lLW51bWJlciA9IDwxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgOSAweDQ+OworCQkJCXJlZyA9IDwweGY5MDIzMDAwIDB4MTAwMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWZyYW1lQGY5MDI0MDAwIHsKKwkJCQlmcmFtZS1udW1iZXIgPSA8Mj47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEwIDB4ND47CisJCQkJcmVnID0gPDB4ZjkwMjQwMDAgMHgxMDAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZnJhbWVAZjkwMjUwMDAgeworCQkJCWZyYW1lLW51bWJlciA9IDwzPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTEgMHg0PjsKKwkJCQlyZWcgPSA8MHhmOTAyNTAwMCAweDEwMDA+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlmcmFtZUBmOTAyNjAwMCB7CisJCQkJZnJhbWUtbnVtYmVyID0gPDQ+OworCQkJCWludGVycnVwdHMgPSA8MCAxMiAweDQ+OworCQkJCXJlZyA9IDwweGY5MDI2MDAwIDB4MTAwMD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWZyYW1lQGY5MDI3MDAwIHsKKwkJCQlmcmFtZS1udW1iZXIgPSA8NT47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEzIDB4ND47CisJCQkJcmVnID0gPDB4ZjkwMjcwMDAgMHgxMDAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZnJhbWVAZjkwMjgwMDAgeworCQkJCWZyYW1lLW51bWJlciA9IDw2PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTQgMHg0PjsKKwkJCQlyZWcgPSA8MHhmOTAyODAwMCAweDEwMDA+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCXNhd19sMjogcmVndWxhdG9yQGY5MDEyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzYXcyIjsKKwkJCXJlZyA9IDwweGY5MDEyMDAwIDB4MTAwMD47CisJCQlyZWd1bGF0b3I7CisJCX07CisKKwkJYWNjMDogY2xvY2stY29udHJvbGxlckBmOTA4ODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjIiOworCQkJcmVnID0gPDB4ZjkwODgwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweGY5MDA4MDAwIDB4MTAwMD47CisJCX07CisKKwkJYWNjMTogY2xvY2stY29udHJvbGxlckBmOTA5ODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjIiOworCQkJcmVnID0gPDB4ZjkwOTgwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweGY5MDA4MDAwIDB4MTAwMD47CisJCX07CisKKwkJYWNjMjogY2xvY2stY29udHJvbGxlckBmOTBhODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjIiOworCQkJcmVnID0gPDB4ZjkwYTgwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweGY5MDA4MDAwIDB4MTAwMD47CisJCX07CisKKwkJYWNjMzogY2xvY2stY29udHJvbGxlckBmOTBiODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjIiOworCQkJcmVnID0gPDB4ZjkwYjgwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweGY5MDA4MDAwIDB4MTAwMD47CisJCX07CisKKwkJcmVzdGFydEBmYzRhYjAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20scHNob2xkIjsKKwkJCXJlZyA9IDwweGZjNGFiMDAwIDB4ND47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9xY29tLW1zbTg2NjAtc3VyZi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLW1zbTg2NjAtc3VyZi5kdHMKaW5kZXggMTY5YmFkOS4uNDUxODBhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204NjYwLXN1cmYuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tbXNtODY2MC1zdXJmLmR0cwpAQCAtMyw0ICszLDE0IEBACiAvIHsKIAltb2RlbCA9ICJRdWFsY29tbSBNU004NjYwIFNVUkYiOwogCWNvbXBhdGlibGUgPSAicWNvbSxtc204NjYwLXN1cmYiLCAicWNvbSxtc204NjYwIjsKKworCXNvYyB7CisJCWdzYmlAMTljMDAwMDAgeworCQkJc3RhdHVzID0gIm9rIjsKKwkJCXFjb20sbW9kZSA9IDxHU0JJX1BST1RfSTJDX1VBUlQ+OworCQkJc2VyaWFsQDE5YzQwMDAwIHsKKwkJCQlzdGF0dXMgPSAib2siOworCQkJfTsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tbXNtODY2MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204NjYwLmR0c2kKaW5kZXggYzUyYTllOS4uNTM4MzdhYWEyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204NjYwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204NjYwLmR0c2kKQEAgLTMsNiArMyw3IEBACiAvaW5jbHVkZS8gInNrZWxldG9uLmR0c2kiCiAKICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9xY29tLGdjYy1tc204NjYwLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3Mvc29jL3Fjb20sZ3NiaS5oPgogCiAvIHsKIAltb2RlbCA9ICJRdWFsY29tbSBNU004NjYwIjsKQEAgLTEyLDE2ICsxMywxOCBAQAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxzY29ycGlvbiI7Ci0JCWVuYWJsZS1tZXRob2QgPSAicWNvbSxnY2MtbXNtODY2MCI7CiAKIAkJY3B1QDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLHNjb3JwaW9uIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicWNvbSxnY2MtbXNtODY2MCI7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJcmVnID0gPDA+OwogCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwogCQl9OwogCiAJCWNwdUAxIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzY29ycGlvbiI7CisJCQllbmFibGUtbWV0aG9kID0gInFjb20sZ2NjLW1zbTg2NjAiOwogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCXJlZyA9IDwxPjsKIAkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKQEAgLTMzLDU1ICszNiw3MyBAQAogCQl9OwogCX07CiAKLQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMDgwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLG1zbS04NjYwLXFnaWMiOwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKLQkJcmVnID0gPCAweDAyMDgwMDAwIDB4MTAwMCA+LAotCQkgICAgICA8IDB4MDIwODEwMDAgMHgxMDAwID47Ci0JfTsKKwlzb2M6IHNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCi0JdGltZXJAMjAwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxzY3NzLXRpbWVyIiwgInFjb20sbXNtLXRpbWVyIjsKLQkJaW50ZXJydXB0cyA9IDwxIDAgMHgzMDE+LAotCQkJICAgICA8MSAxIDB4MzAxPiwKLQkJCSAgICAgPDEgMiAweDMwMT47Ci0JCXJlZyA9IDwweDAyMDAwMDAwIDB4MTAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDI3MDAwMDAwPiwKLQkJCQkgIDwzMjc2OD47Ci0JCWNwdS1vZmZzZXQgPSA8MHg0MDAwMD47Ci0JfTsKKwkJaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjA4MDAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sbXNtLTg2NjAtcWdpYyI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8IDB4MDIwODAwMDAgMHgxMDAwID4sCisJCQkgICAgICA8IDB4MDIwODEwMDAgMHgxMDAwID47CisJCX07CiAKLQltc21ncGlvOiBncGlvQDgwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxtc20tZ3BpbyI7Ci0JCXJlZyA9IDwweDAwODAwMDAwIDB4NDAwMD47Ci0JCWdwaW8tY29udHJvbGxlcjsKLQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCW5ncGlvID0gPDE3Mz47Ci0JCWludGVycnVwdHMgPSA8MCAxNiAweDQ+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQl9OworCQl0aW1lckAyMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzY3NzLXRpbWVyIiwgInFjb20sbXNtLXRpbWVyIjsKKwkJCWludGVycnVwdHMgPSA8MSAwIDB4MzAxPiwKKwkJCQkgICAgIDwxIDEgMHgzMDE+LAorCQkJCSAgICAgPDEgMiAweDMwMT47CisJCQlyZWcgPSA8MHgwMjAwMDAwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjcwMDAwMDA+LAorCQkJCQkgIDwzMjc2OD47CisJCQljcHUtb2Zmc2V0ID0gPDB4NDAwMDA+OworCQl9OwogCi0JZ2NjOiBjbG9jay1jb250cm9sbGVyQDkwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxnY2MtbXNtODY2MCI7Ci0JCSNjbG9jay1jZWxscyA9IDwxPjsKLQkJI3Jlc2V0LWNlbGxzID0gPDE+OwotCQlyZWcgPSA8MHg5MDAwMDAgMHg0MDAwPjsKLQl9OworCQltc21ncGlvOiBncGlvQDgwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sbXNtLWdwaW8iOworCQkJcmVnID0gPDB4MDA4MDAwMDAgMHg0MDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJbmdwaW8gPSA8MTczPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNiAweDQ+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQl9OwogCi0Jc2VyaWFsQDE5YzQwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLG1zbS11YXJ0ZG0tdjEuMyIsICJxY29tLG1zbS11YXJ0ZG0iOwotCQlyZWcgPSA8MHgxOWM0MDAwMCAweDEwMDA+LAotCQkgICAgICA8MHgxOWMwMDAwMCAweDEwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTk1IDB4MD47Ci0JCWNsb2NrcyA9IDwmZ2NjIEdTQkkxMl9VQVJUX0NMSz4sIDwmZ2NjIEdTQkkxMl9IX0NMSz47Ci0JCWNsb2NrLW5hbWVzID0gImNvcmUiLCAiaWZhY2UiOwotCX07CisJCWdjYzogY2xvY2stY29udHJvbGxlckA5MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGdjYy1tc204NjYwIjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCXJlZyA9IDwweDkwMDAwMCAweDQwMDA+OworCQl9OwogCi0JcWNvbSxzc2JpQDUwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxzc2JpIjsKLQkJcmVnID0gPDB4NTAwMDAwIDB4MTAwMD47Ci0JCXFjb20sY29udHJvbGxlci10eXBlID0gInBtaWMtYXJiaXRlciI7CisJCWdzYmkxMjogZ3NiaUAxOWMwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sZ3NiaS12MS4wLjAiOworCQkJcmVnID0gPDB4MTljMDAwMDAgMHgxMDA+OworCQkJY2xvY2tzID0gPCZnY2MgR1NCSTEyX0hfQ0xLPjsKKwkJCWNsb2NrLW5hbWVzID0gImlmYWNlIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXM7CisKKwkJCXNlcmlhbEAxOWM0MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJxY29tLG1zbS11YXJ0ZG0tdjEuMyIsICJxY29tLG1zbS11YXJ0ZG0iOworCQkJCXJlZyA9IDwweDE5YzQwMDAwIDB4MTAwMD4sCisJCQkJICAgICAgPDB4MTljMDAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTk1IDB4MD47CisJCQkJY2xvY2tzID0gPCZnY2MgR1NCSTEyX1VBUlRfQ0xLPiwgPCZnY2MgR1NCSTEyX0hfQ0xLPjsKKwkJCQljbG9jay1uYW1lcyA9ICJjb3JlIiwgImlmYWNlIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJfTsKKworCQlxY29tLHNzYmlANTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzc2JpIjsKKwkJCXJlZyA9IDwweDUwMDAwMCAweDEwMDA+OworCQkJcWNvbSxjb250cm9sbGVyLXR5cGUgPSAicG1pYy1hcmJpdGVyIjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tbXNtODk2MC1jZHAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTYwLWNkcC5kdHMKaW5kZXggYTU4ZmI4OC4uOGY3NWNjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTYwLWNkcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTYwLWNkcC5kdHMKQEAgLTMsNCArMywxNCBAQAogLyB7CiAJbW9kZWwgPSAiUXVhbGNvbW0gTVNNODk2MCBDRFAiOwogCWNvbXBhdGlibGUgPSAicWNvbSxtc204OTYwLWNkcCIsICJxY29tLG1zbTg5NjAiOworCisJc29jIHsKKwkJZ3NiaUAxNjQwMDAwMCB7CisJCQlzdGF0dXMgPSAib2siOworCQkJcWNvbSxtb2RlID0gPEdTQklfUFJPVF9JMkNfVUFSVD47CisJCQlzZXJpYWxAMTY0NDAwMDAgeworCQkJCXN0YXR1cyA9ICJvayI7CisJCQl9OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTYwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLW1zbTg5NjAuZHRzaQppbmRleCA5OTdiN2I5Li41MzAzZTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9xY29tLW1zbTg5NjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9xY29tLW1zbTg5NjAuZHRzaQpAQCAtMyw2ICszLDcgQEAKIC9pbmNsdWRlLyAic2tlbGV0b24uZHRzaSIKIAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sZ2NjLW1zbTg5NjAuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9zb2MvcWNvbSxnc2JpLmg+CiAKIC8gewogCW1vZGVsID0gIlF1YWxjb21tIE1TTTg5NjAiOwpAQCAtMTMsMTAgKzE0LDEwIEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJaW50ZXJydXB0cyA9IDwxIDE0IDB4MzA0PjsKLQkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0IjsKLQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYxIjsKIAogCQljcHVAMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3JhaXQiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYxIjsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQlyZWcgPSA8MD47CiAJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CkBAIC0yNSw2ICsyNiw4IEBACiAJCX07CiAKIAkJY3B1QDEgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicWNvbSxrcHNzLWFjYy12MSI7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJcmVnID0gPDE+OwogCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwpAQCAtMzUsNyArMzgsNiBAQAogCQlMMjogbDItY2FjaGUgewogCQkJY29tcGF0aWJsZSA9ICJjYWNoZSI7CiAJCQljYWNoZS1sZXZlbCA9IDwyPjsKLQkJCWludGVycnVwdHMgPSA8MCAyIDB4ND47CiAJCX07CiAJfTsKIApAQCAtNDUsOTEgKzQ3LDEwOSBAQAogCQlxY29tLG5vLXBjLXdyaXRlOwogCX07CiAKLQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLG1zbS1xZ2ljMiI7Ci0JCWludGVycnVwdC1jb250cm9sbGVyOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQlyZWcgPSA8IDB4MDIwMDAwMDAgMHgxMDAwID4sCi0JCSAgICAgIDwgMHgwMjAwMjAwMCAweDEwMDAgPjsKLQl9OworCXNvYzogc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAKLQl0aW1lckAyMDBhMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLGtwc3MtdGltZXIiLCAicWNvbSxtc20tdGltZXIiOwotCQlpbnRlcnJ1cHRzID0gPDEgMSAweDMwMT4sCi0JCQkgICAgIDwxIDIgMHgzMDE+LAotCQkJICAgICA8MSAzIDB4MzAxPjsKLQkJcmVnID0gPDB4MDIwMGEwMDAgMHgxMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MjcwMDAwMDA+LAotCQkJCSAgPDMyNzY4PjsKLQkJY3B1LW9mZnNldCA9IDwweDgwMDAwPjsKLQl9OworCQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxtc20tcWdpYzIiOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJcmVnID0gPDB4MDIwMDAwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDAyMDAyMDAwIDB4MTAwMD47CisJCX07CiAKLQltc21ncGlvOiBncGlvQDgwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxtc20tZ3BpbyI7Ci0JCWdwaW8tY29udHJvbGxlcjsKLQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCW5ncGlvID0gPDE1MD47Ci0JCWludGVycnVwdHMgPSA8MCAxNiAweDQ+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJcmVnID0gPDB4ODAwMDAwIDB4NDAwMD47Ci0JfTsKKwkJdGltZXJAMjAwYTAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy10aW1lciIsICJxY29tLG1zbS10aW1lciI7CisJCQlpbnRlcnJ1cHRzID0gPDEgMSAweDMwMT4sCisJCQkJICAgICA8MSAyIDB4MzAxPiwKKwkJCQkgICAgIDwxIDMgMHgzMDE+OworCQkJcmVnID0gPDB4MDIwMGEwMDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI3MDAwMDAwPiwKKwkJCQkJICA8MzI3Njg+OworCQkJY3B1LW9mZnNldCA9IDwweDgwMDAwPjsKKwkJfTsKIAotCWdjYzogY2xvY2stY29udHJvbGxlckA5MDAwMDAgewotCQljb21wYXRpYmxlID0gInFjb20sZ2NjLW1zbTg5NjAiOwotCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCSNyZXNldC1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDB4OTAwMDAwIDB4NDAwMD47Ci0JfTsKKwkJbXNtZ3BpbzogZ3Bpb0A4MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLG1zbS1ncGlvIjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJbmdwaW8gPSA8MTUwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNiAweDQ+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4ODAwMDAwIDB4NDAwMD47CisJCX07CiAKLQljbG9jay1jb250cm9sbGVyQDQwMDAwMDAgewotCQljb21wYXRpYmxlID0gInFjb20sbW1jYy1tc204OTYwIjsKLQkJcmVnID0gPDB4NDAwMDAwMCAweDEwMDA+OwotCQkjY2xvY2stY2VsbHMgPSA8MT47Ci0JCSNyZXNldC1jZWxscyA9IDwxPjsKLQl9OworCQlnY2M6IGNsb2NrLWNvbnRyb2xsZXJAOTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxnY2MtbXNtODk2MCI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHg5MDAwMDAgMHg0MDAwPjsKKwkJfTsKIAotCWFjYzA6IGNsb2NrLWNvbnRyb2xsZXJAMjA4ODAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxrcHNzLWFjYy12MSI7Ci0JCXJlZyA9IDwweDAyMDg4MDAwIDB4MTAwMD4sIDwweDAyMDA4MDAwIDB4MTAwMD47Ci0JfTsKKwkJY2xvY2stY29udHJvbGxlckA0MDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxtbWNjLW1zbTg5NjAiOworCQkJcmVnID0gPDB4NDAwMDAwMCAweDEwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQl9OwogCi0JYWNjMTogY2xvY2stY29udHJvbGxlckAyMDk4MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLGtwc3MtYWNjLXYxIjsKLQkJcmVnID0gPDB4MDIwOTgwMDAgMHgxMDAwPiwgPDB4MDIwMDgwMDAgMHgxMDAwPjsKLQl9OworCQlhY2MwOiBjbG9jay1jb250cm9sbGVyQDIwODgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGtwc3MtYWNjLXYxIjsKKwkJCXJlZyA9IDwweDAyMDg4MDAwIDB4MTAwMD4sIDwweDAyMDA4MDAwIDB4MTAwMD47CisJCX07CiAKLQlzYXcwOiByZWd1bGF0b3JAMjA4OTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxzYXcyIjsKLQkJcmVnID0gPDB4MDIwODkwMDAgMHgxMDAwPiwgPDB4MDIwMDkwMDAgMHgxMDAwPjsKLQkJcmVndWxhdG9yOwotCX07CisJCWFjYzE6IGNsb2NrLWNvbnRyb2xsZXJAMjA5ODAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3Bzcy1hY2MtdjEiOworCQkJcmVnID0gPDB4MDIwOTgwMDAgMHgxMDAwPiwgPDB4MDIwMDgwMDAgMHgxMDAwPjsKKwkJfTsKIAotCXNhdzE6IHJlZ3VsYXRvckAyMDk5MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLHNhdzIiOwotCQlyZWcgPSA8MHgwMjA5OTAwMCAweDEwMDA+LCA8MHgwMjAwOTAwMCAweDEwMDA+OwotCQlyZWd1bGF0b3I7Ci0JfTsKKwkJc2F3MDogcmVndWxhdG9yQDIwODkwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLHNhdzIiOworCQkJcmVnID0gPDB4MDIwODkwMDAgMHgxMDAwPiwgPDB4MDIwMDkwMDAgMHgxMDAwPjsKKwkJCXJlZ3VsYXRvcjsKKwkJfTsKIAotCXNlcmlhbEAxNjQ0MDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicWNvbSxtc20tdWFydGRtLXYxLjMiLCAicWNvbSxtc20tdWFydGRtIjsKLQkJcmVnID0gPDB4MTY0NDAwMDAgMHgxMDAwPiwKLQkJICAgICAgPDB4MTY0MDAwMDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDE1NCAweDA+OwotCQljbG9ja3MgPSA8JmdjYyBHU0JJNV9VQVJUX0NMSz4sIDwmZ2NjIEdTQkk1X0hfQ0xLPjsKLQkJY2xvY2stbmFtZXMgPSAiY29yZSIsICJpZmFjZSI7Ci0JfTsKKwkJc2F3MTogcmVndWxhdG9yQDIwOTkwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLHNhdzIiOworCQkJcmVnID0gPDB4MDIwOTkwMDAgMHgxMDAwPiwgPDB4MDIwMDkwMDAgMHgxMDAwPjsKKwkJCXJlZ3VsYXRvcjsKKwkJfTsKIAotCXFjb20sc3NiaUA1MDAwMDAgewotCQljb21wYXRpYmxlID0gInFjb20sc3NiaSI7Ci0JCXJlZyA9IDwweDUwMDAwMCAweDEwMDA+OwotCQlxY29tLGNvbnRyb2xsZXItdHlwZSA9ICJwbWljLWFyYml0ZXIiOwotCX07CisJCWdzYmk1OiBnc2JpQDE2NDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxnc2JpLXYxLjAuMCI7CisJCQlyZWcgPSA8MHgxNjQwMDAwMCAweDEwMD47CisJCQljbG9ja3MgPSA8JmdjYyBHU0JJNV9IX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJpZmFjZSI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOwogCi0Jcm5nQDFhNTAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJxY29tLHBybmciOwotCQlyZWcgPSA8MHgxYTUwMDAwMCAweDIwMD47Ci0JCWNsb2NrcyA9IDwmZ2NjIFBSTkdfQ0xLPjsKLQkJY2xvY2stbmFtZXMgPSAiY29yZSI7CisJCQlzZXJpYWxAMTY0NDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAicWNvbSxtc20tdWFydGRtLXYxLjMiLCAicWNvbSxtc20tdWFydGRtIjsKKwkJCQlyZWcgPSA8MHgxNjQ0MDAwMCAweDEwMDA+LAorCQkJCSAgICAgIDwweDE2NDAwMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDE1NCAweDA+OworCQkJCWNsb2NrcyA9IDwmZ2NjIEdTQkk1X1VBUlRfQ0xLPiwgPCZnY2MgR1NCSTVfSF9DTEs+OworCQkJCWNsb2NrLW5hbWVzID0gImNvcmUiLCAiaWZhY2UiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCXFjb20sc3NiaUA1MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLHNzYmkiOworCQkJcmVnID0gPDB4NTAwMDAwIDB4MTAwMD47CisJCQlxY29tLGNvbnRyb2xsZXItdHlwZSA9ICJwbWljLWFyYml0ZXIiOworCQl9OworCisJCXJuZ0AxYTUwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInFjb20scHJuZyI7CisJCQlyZWcgPSA8MHgxYTUwMDAwMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmdjYyBQUk5HX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJjb3JlIjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3Fjb20tbXNtODk3NC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTc0LmR0c2kKaW5kZXggZjY4NzIzOS4uNjlkY2EyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTc0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS1tc204OTc0LmR0c2kKQEAgLTEzLDEwICsxMywxMCBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWludGVycnVwdHMgPSA8MSA5IDB4ZjA0PjsKLQkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0IjsKLQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYyIjsKIAogCQljcHVAMCB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3JhaXQiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYyIjsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQlyZWcgPSA8MD47CiAJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CkBAIC0yNCw2ICsyNCw4IEBACiAJCX07CiAKIAkJY3B1QDEgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLGtyYWl0IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicWNvbSxrcHNzLWFjYy12MiI7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJcmVnID0gPDE+OwogCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwpAQCAtMzEsNiArMzMsOCBAQAogCQl9OwogCiAJCWNwdUAyIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxrcmFpdCI7CisJCQllbmFibGUtbWV0aG9kID0gInFjb20sa3Bzcy1hY2MtdjIiOwogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCXJlZyA9IDwyPjsKIAkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKQEAgLTM4LDYgKzQyLDggQEAKIAkJfTsKIAogCQljcHVAMyB7CisJCQljb21wYXRpYmxlID0gInFjb20sa3JhaXQiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJxY29tLGtwc3MtYWNjLXYyIjsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQlyZWcgPSA8Mz47CiAJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CkBAIC00Nyw3ICs1Myw2IEBACiAJCUwyOiBsMi1jYWNoZSB7CiAJCQljb21wYXRpYmxlID0gImNhY2hlIjsKIAkJCWNhY2hlLWxldmVsID0gPDI+OwotCQkJaW50ZXJydXB0cyA9IDwwIDIgMHg0PjsKIAkJCXFjb20sc2F3ID0gPCZzYXdfbDI+OwogCQl9OwogCX07CkBAIC01Nyw2ICs2MiwxNSBAQAogCQlpbnRlcnJ1cHRzID0gPDEgNyAweGYwND47CiAJfTsKIAorCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPDEgMiAweGYwOD4sCisJCQkgICAgIDwxIDMgMHhmMDg+LAorCQkJICAgICA8MSA0IDB4ZjA4PiwKKwkJCSAgICAgPDEgMSAweGYwOD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIwMDAwMD47CisJfTsKKwogCXNvYzogc29jIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtNzEsMTUgKzg1LDYgQEAKIAkJCSAgICAgIDwweGY5MDAyMDAwIDB4MTAwMD47CiAJCX07CiAKLQkJdGltZXIgewotCQkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjctdGltZXIiOwotCQkJaW50ZXJydXB0cyA9IDwxIDIgMHhmMDg+LAotCQkJCSAgICAgPDEgMyAweGYwOD4sCi0JCQkJICAgICA8MSA0IDB4ZjA4PiwKLQkJCQkgICAgIDwxIDEgMHhmMDg+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE5MjAwMDAwPjsKLQkJfTsKLQogCQl0aW1lckBmOTAyMDAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtMTkwLDYgKzE5NSwyOSBAQAogCQkJaW50ZXJydXB0cyA9IDwwIDEwOCAweDA+OwogCQkJY2xvY2tzID0gPCZnY2MgR0NDX0JMU1AxX1VBUlQyX0FQUFNfQ0xLPiwgPCZnY2MgR0NDX0JMU1AxX0FIQl9DTEs+OwogCQkJY2xvY2stbmFtZXMgPSAiY29yZSIsICJpZmFjZSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNkaGNpQGY5ODI0OTAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxzZGhjaS1tc20tdjQiOworCQkJcmVnID0gPDB4Zjk4MjQ5MDAgMHgxMWM+LCA8MHhmOTgyNDAwMCAweDgwMD47CisJCQlyZWctbmFtZXMgPSAiaGNfbWVtIiwgImNvcmVfbWVtIjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjMgMD4sIDwwIDEzOCAwPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJoY19pcnEiLCAicHdyX2lycSI7CisJCQljbG9ja3MgPSA8JmdjYyBHQ0NfU0RDQzFfQVBQU19DTEs+LCA8JmdjYyBHQ0NfU0RDQzFfQUhCX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJjb3JlIiwgImlmYWNlIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2RoY2lAZjk4YTQ5MDAgeworCQkJY29tcGF0aWJsZSA9ICJxY29tLHNkaGNpLW1zbS12NCI7CisJCQlyZWcgPSA8MHhmOThhNDkwMCAweDExYz4sIDwweGY5OGE0MDAwIDB4ODAwPjsKKwkJCXJlZy1uYW1lcyA9ICJoY19tZW0iLCAiY29yZV9tZW0iOworCQkJaW50ZXJydXB0cyA9IDwwIDEyNSAwPiwgPDAgMjIxIDA+OworCQkJaW50ZXJydXB0LW5hbWVzID0gImhjX2lycSIsICJwd3JfaXJxIjsKKwkJCWNsb2NrcyA9IDwmZ2NjIEdDQ19TRENDMl9BUFBTX0NMSz4sIDwmZ2NjIEdDQ19TRENDMl9BSEJfQ0xLPjsKKwkJCWNsb2NrLW5hbWVzID0gImNvcmUiLCAiaWZhY2UiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAogCQlybmdAZjliZmYwMDAgewpAQCAtMTk4LDUgKzIyNiwxNSBAQAogCQkJY2xvY2tzID0gPCZnY2MgR0NDX1BSTkdfQUhCX0NMSz47CiAJCQljbG9jay1uYW1lcyA9ICJjb3JlIjsKIAkJfTsKKworCQltc21ncGlvOiBwaW5jdHJsQGZkNTEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicWNvbSxtc204OTc0LXBpbmN0cmwiOworCQkJcmVnID0gPDB4ZmQ1MTAwMDAgMHg0MDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0cyA9IDwwIDIwOCAwPjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLWdlbm1haS1yZWZlcmVuY2UuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLXJlZmVyZW5jZS5kdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjQ2MTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLXJlZmVyZW5jZS5kdHMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogRGV2aWNlIFRyZWUgU291cmNlIGZvciB0aGUgR2VubWFpIGJvYXJkCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQotICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotL2R0cy12MS87Ci0jaW5jbHVkZSAicjdzNzIxMDAuZHRzaSIKLQotLyB7Ci0JbW9kZWwgPSAiR2VubWFpIjsKLQljb21wYXRpYmxlID0gInJlbmVzYXMsZ2VubWFpLXJlZmVyZW5jZSIsICJyZW5lc2FzLHI3czcyMTAwIjsKLQotCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MyLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKLQl9OwotCi0JbWVtb3J5IHsKLQkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDB4MDgwMDAwMDAgMHgwODAwMDAwMD47Ci0JfTsKLQotCWxic2MgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JfTsKLX07Ci0KLSZpMmMyIHsKLQlzdGF0dXMgPSAib2theSI7Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47Ci0KLQllZXByb21ANTAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsMjRjMTI4IjsKLQkJcmVnID0gPDB4NTA+OwotCQlwYWdlc2l6ZSA9IDw2ND47Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC1nZW5tYWkuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLmR0cwppbmRleCBiMWRlYWY3Li41Njg0OWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC1nZW5tYWkuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLWdlbm1haS5kdHMKQEAgLTEsNyArMSw4IEBACiAvKgogICogRGV2aWNlIFRyZWUgU291cmNlIGZvciB0aGUgR2VubWFpIGJvYXJkCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMTQgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBXb2xmcmFtIFNhbmcsIFNhbmcgRW5naW5lZXJpbmcgPHdzYUBzYW5nLWVuZ2luZWVyaW5nLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CkBAIC0xNSw2ICsxNiwxMCBAQAogCW1vZGVsID0gIkdlbm1haSI7CiAJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdlbm1haSIsICJyZW5lc2FzLHI3czcyMTAwIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwyID0gJnNjaWYyOworCX07CisKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CiAJfTsKQEAgLTI5LDMgKzM0LDI2IEBACiAJCSNzaXplLWNlbGxzID0gPDE+OwogCX07CiB9OworCismZXh0YWxfY2xrIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzAwMDA+OworfTsKKworJnVzYl94MV9jbGsgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47Cit9OworCismaTJjMiB7CisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJZWVwcm9tQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLDI0YzEyOCI7CisJCXJlZyA9IDwweDUwPjsKKwkJcGFnZXNpemUgPSA8NjQ+OworCX07Cit9OworCismc2NpZjIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAuZHRzaQppbmRleCBlZTcwMDcxLi5mNTBmYmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLmR0c2kKQEAgLTEsMTMgKzEsMTUgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIHRoZSByN3M3MjEwMCBTb0MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0xNCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFdvbGZyYW0gU2FuZywgU2FuZyBFbmdpbmVlcmluZyA8d3NhQHNhbmctZW5naW5lZXJpbmcuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9yN3M3MjEwMC1jbG9jay5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogCiAvIHsKQEAgLTI4LDYgKzMwLDExMiBAQAogCQlzcGk0ID0gJnNwaTQ7CiAJfTsKIAorCWNsb2NrcyB7CisJCXJhbmdlczsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCS8qIEV4dGVybmFsIGNsb2NrcyAqLworCQlleHRhbF9jbGs6IGV4dGFsX2NsayB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCS8qIElmIGNsayBwcmVzZW50LCB2YWx1ZSBtdXN0IGJlIHNldCBieSBib2FyZCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImV4dGFsIjsKKwkJfTsKKworCQl1c2JfeDFfY2xrOiB1c2JfeDFfY2xrIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJLyogSWYgY2xrIHByZXNlbnQsIHZhbHVlIG11c3QgYmUgc2V0IGJ5IGJvYXJkICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAidXNiX3gxIjsKKwkJfTsKKworCQkvKiBTcGVjaWFsIENQRyBjbG9ja3MgKi8KKwkJY3BnX2Nsb2NrczogY3BnX2Nsb2Nrc0BmY2ZlMDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjdzNzIxMDAtY3BnLWNsb2NrcyIsCisJCQkJICAgICAicmVuZXNhcyxyei1jcGctY2xvY2tzIjsKKwkJCXJlZyA9IDwweGZjZmUwMDAwIDB4MTg+OworCQkJY2xvY2tzID0gPCZleHRhbF9jbGs+LCA8JnVzYl94MV9jbGs+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsbCIsICJpIiwgImciOworCQl9OworCisJCS8qIEZpeGVkIGZhY3RvciBjbG9ja3MgKi8KKwkJYl9jbGs6IGJfY2xrIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJCWNsb2NrcyA9IDwmY3BnX2Nsb2NrcyBSN1M3MjEwMF9DTEtfUExMPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CisJCQljbG9jay1kaXYgPSA8Mz47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYiI7CisJCX07CisJCXAxX2NsazogcDFfY2xrIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJCWNsb2NrcyA9IDwmY3BnX2Nsb2NrcyBSN1M3MjEwMF9DTEtfUExMPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CisJCQljbG9jay1kaXYgPSA8Nj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicDEiOworCQl9OworCQlwMF9jbGs6IHAwX2NsayB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCQljbG9ja3MgPSA8JmNwZ19jbG9ja3MgUjdTNzIxMDBfQ0xLX1BMTD47CisJCQljbG9jay1tdWx0ID0gPDE+OworCQkJY2xvY2stZGl2ID0gPDEyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwMCI7CisJCX07CisKKwkJLyogTVNUUCBjbG9ja3MgKi8KKwkJbXN0cDNfY2xrczogbXN0cDNfY2xrc0BmY2ZlMDQyMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjdzNzIxMDAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOworCQkJcmVnID0gPDB4ZmNmZTA0MjAgND47CisJCQljbG9ja3MgPSA8JnAwX2Nsaz47CisJCQljbG9jay1pbmRpY2VzID0gPFI3UzcyMTAwX0NMS19NVFUyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtdHUyIjsKKwkJfTsKKworCQltc3RwNF9jbGtzOiBtc3RwNF9jbGtzQGZjZmUwNDI0IHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyN3M3MjEwMC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CisJCQlyZWcgPSA8MHhmY2ZlMDQyNCA0PjsKKwkJCWNsb2NrcyA9IDwmcDFfY2xrPiwgPCZwMV9jbGs+LCA8JnAxX2Nsaz4sIDwmcDFfY2xrPiwKKwkJCQkgPCZwMV9jbGs+LCA8JnAxX2Nsaz4sIDwmcDFfY2xrPiwgPCZwMV9jbGs+OworCQkJY2xvY2staW5kaWNlcyA9IDwKKwkJCQlSN1M3MjEwMF9DTEtfU0NJRjAgUjdTNzIxMDBfQ0xLX1NDSUYxIFI3UzcyMTAwX0NMS19TQ0lGMiBSN1M3MjEwMF9DTEtfU0NJRjMKKwkJCQlSN1M3MjEwMF9DTEtfU0NJRjQgUjdTNzIxMDBfQ0xLX1NDSUY1IFI3UzcyMTAwX0NMS19TQ0lGNiBSN1M3MjEwMF9DTEtfU0NJRjcKKwkJCT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic2NpZjAiLCAic2NpZjEiLCAic2NpZjIiLCAic2NpZjMiLCAic2NpZjQiLCAic2NpZjUiLCAic2NpZjYiLCAic2NpZjciOworCQl9OworCisJCW1zdHA5X2Nsa3M6IG1zdHA5X2Nsa3NAZmNmZTA0MzggeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI3czcyMTAwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKKwkJCXJlZyA9IDwweGZjZmUwNDM4IDQ+OworCQkJY2xvY2tzID0gPCZwMF9jbGs+LCA8JnAwX2Nsaz4sIDwmcDBfY2xrPiwgPCZwMF9jbGs+OworCQkJY2xvY2staW5kaWNlcyA9IDwKKwkJCQlSN1M3MjEwMF9DTEtfSTJDMCBSN1M3MjEwMF9DTEtfSTJDMSBSN1M3MjEwMF9DTEtfSTJDMiBSN1M3MjEwMF9DTEtfSTJDMworCQkJPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJpMmMwIiwgImkyYzEiLCAiaTJjMiIsICJpMmMzIjsKKwkJfTsKKworCQltc3RwMTBfY2xrczogbXN0cDEwX2Nsa3NAZmNmZTA0M2MgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI3czcyMTAwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKKwkJCXJlZyA9IDwweGZjZmUwNDNjIDQ+OworCQkJY2xvY2tzID0gPCZwMV9jbGs+LCA8JnAxX2Nsaz4sIDwmcDFfY2xrPiwgPCZwMV9jbGs+LAorCQkJCSA8JnAxX2Nsaz47CisJCQljbG9jay1pbmRpY2VzID0gPAorCQkJCVI3UzcyMTAwX0NMS19TUEkwIFI3UzcyMTAwX0NMS19TUEkxIFI3UzcyMTAwX0NMS19TUEkyIFI3UzcyMTAwX0NMS19TUEkzCisJCQkJUjdTNzIxMDBfQ0xLX1NQSTQKKwkJCT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic3BpMCIsICJzcGkxIiwgInNwaTIiLCAic3BpMyIsICJzcGk0IjsKKwkJfTsKKwl9OworCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTYxLDYgKzE2OSw3IEBACiAJCQkgICAgIDwwIDE2MiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMTYzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8MCAxNjQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC03OCw2ICsxODcsNyBAQAogCQkJICAgICA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkgICAgIDwwIDE3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMTcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzE+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtOTUsNiArMjA1LDcgQEAKIAkJCSAgICAgPDAgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkgICAgIDwwIDE4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMyPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTExMiwxMCArMjIzLDEwNyBAQAogCQkJICAgICA8MCAxODYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkgICAgIDwwIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJc2NpZjA6IHNlcmlhbEBlODAwNzAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmLXI3czcyMTAwIiwgInJlbmVzYXMsc2NpZiI7CisJCXJlZyA9IDwweGU4MDA3MDAwIDY0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE5MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTkxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxOTIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwNF9jbGtzIFI3UzcyMTAwX0NMS19TQ0lGMD47CisJCWNsb2NrLW5hbWVzID0gInNjaV9pY2siOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzY2lmMTogc2VyaWFsQGU4MDA3ODAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWYtcjdzNzIxMDAiLCAicmVuZXNhcyxzY2lmIjsKKwkJcmVnID0gPDB4ZTgwMDc4MDAgNjQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTk0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxOTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE5NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTkzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA0X2Nsa3MgUjdTNzIxMDBfQ0xLX1NDSUYxPjsKKwkJY2xvY2stbmFtZXMgPSAic2NpX2ljayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNjaWYyOiBzZXJpYWxAZTgwMDgwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZi1yN3M3MjEwMCIsICJyZW5lc2FzLHNjaWYiOworCQlyZWcgPSA8MHhlODAwODAwMCA2ND47CisJCWludGVycnVwdHMgPSA8MCAxOTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE5OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjAwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxOTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDRfY2xrcyBSN1M3MjEwMF9DTEtfU0NJRjI+OworCQljbG9jay1uYW1lcyA9ICJzY2lfaWNrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc2NpZjM6IHNlcmlhbEBlODAwODgwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmLXI3czcyMTAwIiwgInJlbmVzYXMsc2NpZiI7CisJCXJlZyA9IDwweGU4MDA4ODAwIDY0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDIwMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjAzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyMDQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIwMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwNF9jbGtzIFI3UzcyMTAwX0NMS19TQ0lGMz47CisJCWNsb2NrLW5hbWVzID0gInNjaV9pY2siOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzY2lmNDogc2VyaWFsQGU4MDA5MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWYtcjdzNzIxMDAiLCAicmVuZXNhcyxzY2lmIjsKKwkJcmVnID0gPDB4ZTgwMDkwMDAgNjQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyMDcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA0X2Nsa3MgUjdTNzIxMDBfQ0xLX1NDSUY0PjsKKwkJY2xvY2stbmFtZXMgPSAic2NpX2ljayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNjaWY1OiBzZXJpYWxAZTgwMDk4MDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZi1yN3M3MjEwMCIsICJyZW5lc2FzLHNjaWYiOworCQlyZWcgPSA8MHhlODAwOTgwMCA2ND47CisJCWludGVycnVwdHMgPSA8MCAyMTAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjEyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyMDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDRfY2xrcyBSN1M3MjEwMF9DTEtfU0NJRjU+OworCQljbG9jay1uYW1lcyA9ICJzY2lfaWNrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc2NpZjY6IHNlcmlhbEBlODAwYTAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmLXI3czcyMTAwIiwgInJlbmVzYXMsc2NpZiI7CisJCXJlZyA9IDwweGU4MDBhMDAwIDY0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDIxNCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjE1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIxMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwNF9jbGtzIFI3UzcyMTAwX0NMS19TQ0lGNj47CisJCWNsb2NrLW5hbWVzID0gInNjaV9pY2siOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzY2lmNzogc2VyaWFsQGU4MDBhODAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWYtcjdzNzIxMDAiLCAicmVuZXNhcyxzY2lmIjsKKwkJcmVnID0gPDB4ZTgwMGE4MDAgNjQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMjE4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyMTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA0X2Nsa3MgUjdTNzIxMDBfQ0xLX1NDSUY3PjsKKwkJY2xvY2stbmFtZXMgPSAic2NpX2ljayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXNwaTA6IHNwaUBlODAwYzgwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyc3BpLXI3czcyMTAwIiwgInJlbmVzYXMscnNwaS1yeiI7CiAJCXJlZyA9IDwweGU4MDBjODAwIDB4MjQ+OwpAQCAtMTIzLDYgKzMzMSw3IEBACiAJCQkgICAgIDwwIDIzOSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMjQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLCAicngiLCAidHgiOworCQljbG9ja3MgPSA8Jm1zdHAxMF9jbGtzIFI3UzcyMTAwX0NMS19TUEkwPjsKIAkJbnVtLWNzID0gPDE+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0xMzYsNiArMzQ1LDcgQEAKIAkJCSAgICAgPDAgMjQyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8MCAyNDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWludGVycnVwdC1uYW1lcyA9ICJlcnJvciIsICJyeCIsICJ0eCI7CisJCWNsb2NrcyA9IDwmbXN0cDEwX2Nsa3MgUjdTNzIxMDBfQ0xLX1NQSTE+OwogCQludW0tY3MgPSA8MT47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTE0OSw2ICszNTksNyBAQAogCQkJICAgICA8MCAyNDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkgICAgIDwwIDI0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwgInJ4IiwgInR4IjsKKwkJY2xvY2tzID0gPCZtc3RwMTBfY2xrcyBSN1M3MjEwMF9DTEtfU1BJMj47CiAJCW51bS1jcyA9IDwxPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMTYyLDYgKzM3Myw3IEBACiAJCQkgICAgIDwwIDI0OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMjQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLCAicngiLCAidHgiOworCQljbG9ja3MgPSA8Jm1zdHAxMF9jbGtzIFI3UzcyMTAwX0NMS19TUEkzPjsKIAkJbnVtLWNzID0gPDE+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0xNzUsNiArMzg3LDcgQEAKIAkJCSAgICAgPDAgMjUxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8MCAyNTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWludGVycnVwdC1uYW1lcyA9ICJlcnJvciIsICJyeCIsICJ0eCI7CisJCWNsb2NrcyA9IDwmbXN0cDEwX2Nsa3MgUjdTNzIxMDBfQ0xLX1NQSTQ+OwogCQludW0tY3MgPSA8MT47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQuZHRzaQppbmRleCA2MmQwMjExLi44MmM1YWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC5kdHNpCkBAIC01NSw3ICs1NSw2IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOwogCQlyZWcgPSA8MCAweGU2MWMwMDAwIDAgMHgyMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKQEAgLTk1LDcgKzk0LDYgQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCXJlZyA9IDwwIDB4ZTYxYzAyMDAgMCAweDIwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCSAgICAgPDAgMzMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkgICAgIDwwIDM0IElSUV9UWVBFX0xFVkVMX0hJR0g+LApAQCAtMTM2LDcgKzEzNCw2IEBACiAJCWRtYTA6IGRtYS1jb250cm9sbGVyQGU2NzAwMDIwIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaGRtYS1yOGE3M2E0IjsKIAkJCXJlZyA9IDwwIDB4ZTY3MDAwMjAgMCAweDg5ZTA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJCWludGVycnVwdHMgPSA8MCAyMjAgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCQkwIDIwMCBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkJCTAgMjAxIElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTE3MSw3ICsxNjgsNiBAQAogCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci10aGVybWFsIjsKIAkJcmVnID0gPDAgMHhlNjFmMDAwMCAwIDB4MTQ+LCA8MCAweGU2MWYwMTAwIDAgMHgzOD4sCiAJCQkgPDAgMHhlNjFmMDIwMCAwIDB4Mzg+LCA8MCAweGU2MWYwMzAwIDAgMHgzOD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAl9OwogCkBAIC0xODAsNyArMTc2LDYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1MDAwMDAgMCAweDQyOD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTE5MCw3ICsxODUsNiBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjUxMDAwMCAwIDB4NDI4PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMjAwLDcgKzE5NCw2IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTIwMDAwIDAgMHg0Mjg+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0yMTAsNyArMjAzLDYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1MzAwMDAgMCAweDQyOD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTIyMCw3ICsyMTIsNiBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjU0MDAwMCAwIDB4NDI4PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMjMwLDcgKzIyMSw2IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2MGIwMDAwIDAgMHg0Mjg+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTc5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0yNDAsNyArMjMwLDYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NTAwMDAgMCAweDQyOD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTI1MCw3ICsyMzksNiBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjU2MDAwMCAwIDB4NDI4PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMjYwLDcgKzI0OCw2IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTcwMDAwIDAgMHg0Mjg+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0yNjgsNyArMjU1LDYgQEAKIAltbWNpZjA6IG1tY0BlZTIwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaC1tbWNpZiI7CiAJCXJlZyA9IDwwIDB4ZWUyMDAwMDAgMCAweDgwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJcmVnLWlvLXdpZHRoID0gPDQ+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMjc3LDcgKzI2Myw2IEBACiAJbW1jaWYxOiBtbWNAZWUyMjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2gtbW1jaWYiOwogCQlyZWcgPSA8MCAweGVlMjIwMDAwIDAgMHg4MD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXJlZy1pby13aWR0aCA9IDw0PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTMwOSw3ICsyOTQsNiBAQAogCXNkaGkwOiBzZEBlZTEwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTczYTQiOwogCQlyZWcgPSA8MCAweGVlMTAwMDAwIDAgMHgxMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljYXAtc2QtaGlnaHNwZWVkOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMzE4LDcgKzMwMiw2IEBACiAJc2RoaTE6IHNkQGVlMTIwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzNhNCI7CiAJCXJlZyA9IDwwIDB4ZWUxMjAwMDAgMCAweDEwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0zMjcsNyArMzEwLDYgQEAKIAlzZGhpMjogc2RAZWUxNDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3M2E0IjsKIAkJcmVnID0gPDAgMHhlZTE0MDAwMCAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAtYXJtYWRpbGxvODAwZXZhLXJlZmVyZW5jZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLWFybWFkaWxsbzgwMGV2YS1yZWZlcmVuY2UuZHRzCmluZGV4IDk1YTg0OWIuLjQ4NjAwN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAtYXJtYWRpbGxvODAwZXZhLXJlZmVyZW5jZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC1hcm1hZGlsbG84MDBldmEtcmVmZXJlbmNlLmR0cwpAQCAtMTEsNiArMTEsNyBAQAogL2R0cy12MS87CiAjaW5jbHVkZSAicjhhNzc0MC5kdHNpIgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcHdtL3B3bS5oPgogCkBAIC03NywyNiArNzgsMjYgQEAKIAogCQlwb3dlci1rZXkgewogCQkJZ3Bpb3MgPSA8JnBmYyA5OSBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwxMTY+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OwogCQkJbGFiZWwgPSAiU1czIjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQliYWNrLWtleSB7CiAJCQlncGlvcyA9IDwmcGZjIDEwMCBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwxNTg+OworCQkJbGludXgsY29kZSA9IDxLRVlfQkFDSz47CiAJCQlsYWJlbCA9ICJTVzQiOwogCQl9OwogCiAJCW1lbnUta2V5IHsKIAkJCWdwaW9zID0gPCZwZmMgOTcgR1BJT19BQ1RJVkVfTE9XPjsKLQkJCWxpbnV4LGNvZGUgPSA8MTM5PjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX01FTlU+OwogCQkJbGFiZWwgPSAiU1c1IjsKIAkJfTsKIAogCQlob21lLWtleSB7CiAJCQlncGlvcyA9IDwmcGZjIDk4IEdQSU9fQUNUSVZFX0xPVz47Ci0JCQlsaW51eCxjb2RlID0gPDEwMj47CisJCQlsaW51eCxjb2RlID0gPEtFWV9IT01FPjsKIAkJCWxhYmVsID0gIlNXNiI7CiAJCX07CiAJfTsKQEAgLTExNyw2ICsxMTgsMTYgQEAKIAkJfTsKIAl9OwogCisJaTJjMjogaTJjQDIgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCQlncGlvcyA9IDwmcGZjIDIwOCBHUElPX0FDVElWRV9ISUdIIC8qIHNkYSAqLworCQkJICZwZmMgOTEgR1BJT19BQ1RJVkVfSElHSCAvKiBzY2wgKi8KKwkJCT47CisJCWkyYy1ncGlvLGRlbGF5LXVzID0gPDU+OworCX07CisKIAliYWNrbGlnaHQgewogCQljb21wYXRpYmxlID0gInB3bS1iYWNrbGlnaHQiOwogCQlwd21zID0gPCZ0cHUgMiAzMzMzMyBQV01fUE9MQVJJVFlfSU5WRVJURUQ+OwpAQCAtMTQ3LDYgKzE1OCwxOCBAQAogCX07CiB9OwogCismZXRoZXIgeworCXBpbmN0cmwtMCA9IDwmZXRoZXJfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCXN0YXR1cyA9ICJvayI7CisKKwlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCXJlZyA9IDwwPjsKKwl9OworfTsKKwogJmkyYzAgewogCXN0YXR1cyA9ICJva2F5IjsKIAl0b3VjaHNjcmVlbkA1NSB7CkBAIC0xNjYsMTAgKzE4OSwyMyBAQAogCX07CiB9OwogCismaTJjMiB7CisJc3RhdHVzID0gIm9rYXkiOworCXJ0Y0AzMCB7CisJCWNvbXBhdGlibGUgPSAic2lpLHMzNTM5MGEiOworCQlyZWcgPSA8MHgzMD47CisJfTsKK307CisKICZwZmMgewogCXBpbmN0cmwtMCA9IDwmc2NpZmExX3BpbnM+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKKwlldGhlcl9waW5zOiBldGhlciB7CisJCXJlbmVzYXMsZ3JvdXBzID0gImdldGhlcl9taWkiLCAiZ2V0aGVyX2ludCI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAiZ2V0aGVyIjsKKwl9OworCiAJc2NpZmExX3BpbnM6IHNlcmlhbDEgewogCQlyZW5lc2FzLGdyb3VwcyA9ICJzY2lmYTFfZGF0YSI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAic2NpZmExIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAuZHRzaQppbmRleCAyNTUxZTk0Li41NWQyOWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC5kdHNpCkBAIC0xNCw2ICsxNCw3IEBACiAKIC8gewogCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzQwIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMjIsNiArMjMsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQlyZWcgPSA8MHgwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw4MDAwMDAwMDA+OwogCQl9OwogCX07CiAKQEAgLTQ4LDcgKzUwLDYgQEAKIAkJCTwweGU2OTAwMDIwIDE+LAogCQkJPDB4ZTY5MDAwNDAgMT4sCiAJCQk8MHhlNjkwMDA2MCAxPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE0OSBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDE0OSBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDE0OSBJUlFfVFlQRV9MRVZFTF9ISUdICkBAIC02OSw3ICs3MCw2IEBACiAJCQk8MHhlNjkwMDAyNCAxPiwKIAkJCTwweGU2OTAwMDQ0IDE+LAogCQkJPDB4ZTY5MDAwNjQgMT47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtOTAsNyArOTAsNiBAQAogCQkJPDB4ZTY5MDAwMjggMT4sCiAJCQk8MHhlNjkwMDA0OCAxPiwKIAkJCTwweGU2OTAwMDY4IDE+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTExMSw3ICsxMTAsNiBAQAogCQkJPDB4ZTY5MDAwMmMgMT4sCiAJCQk8MHhlNjkwMDA0YyAxPiwKIAkJCTwweGU2OTAwMDZjIDE+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTEyMiwxMiArMTIwLDIzIEBACiAJCQkgICAgICAwIDE0OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAl9OwogCisJZXRoZXI6IGV0aGVybmV0QGU5YTAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdldGhlci1yOGE3NzQwIjsKKwkJcmVnID0gPDB4ZTlhMDAwMDAgMHg4MDA+LAorCQkgICAgICA8MHhlOWEwMTgwMCAweDgwMD47CisJCWludGVycnVwdHMgPSA8MCAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCS8qIGNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzQwX0NMS19HRVRIRVI+OyAqLworCQlwaHktbW9kZSA9ICJtaWkiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCWkyYzA6IGkyY0BmZmYyMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3NzQwIiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MHhmZmYyMDAwMCAweDQyNT47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAyMDEgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAyMDIgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAyMDMgSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtMTM4LDkgKzE0Nyw4IEBACiAJaTJjMTogaTJjQGU2YzIwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTc3NDAiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwweGU2YzIwMDAwIDB4NDI1PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDcwIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgNzEgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCA3MiBJUlFfVFlQRV9MRVZFTF9ISUdICkBAIC0xNzMsOSArMTgxLDggQEAKIAl9OwogCiAJbW1jaWYwOiBtbWNAZTZiZDAwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2gtbW1jaWYiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbW1jaWYtcjhhNzc0MCIsICJyZW5lc2FzLHNoLW1tY2lmIjsKIAkJcmVnID0gPDB4ZTZiZDAwMDAgMHgxMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgNTYgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCA1NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTE4NCw3ICsxOTEsNiBAQAogCXNkaGkwOiBzZEBlNjg1MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTc3NDAiOwogCQlyZWcgPSA8MHhlNjg1MDAwMCAweDEwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxMTggSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0xOTYsNyArMjAyLDYgQEAKIAlzZGhpMTogc2RAZTY4NjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3NzQwIjsKIAkJcmVnID0gPDB4ZTY4NjAwMDAgMHgxMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTIxIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTIyIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTIzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMjA4LDcgKzIxMyw2IEBACiAJc2RoaTI6IHNkQGU2ODcwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc0MCI7CiAJCXJlZyA9IDwweGU2ODcwMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEyNSBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDEyNiBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDEyNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTIxOSw5ICsyMjMsOCBAQAogCiAJc2hfZnNpMjogc291bmRAZmUxZjAwMDAgewogCQkjc291bmQtZGFpLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2hfZnNpMiI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxmc2kyLXI4YTc3NDAiLCAicmVuZXNhcyxzaF9mc2kyIjsKIAkJcmVnID0gPDB4ZmUxZjAwMDAgMHg0MDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgOSAweDQ+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdHMKaW5kZXggMDZjZGExOS4uZjc2ZjZlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC1ib2Nrdy1yZWZlcmVuY2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0cwpAQCAtMTA5LDQgKzEwOSwxOCBAQAogCXBpbmN0cmwtMCA9IDwmaHNwaTBfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlzdGF0dXMgPSAib2theSI7CisKKwlmbGFzaDogZmxhc2hAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGFuc2lvbixzMjVmbDAwOGsiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwNDAwMDAwMD47CisJCW0yNXAsZmFzdC1yZWFkOworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gImRhdGEoc3BpKSI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMTAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaQppbmRleCA4NWM1YjNiLi4zYWYwYTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC5kdHNpCkBAIC0yMCw2ICsyMCw3IEBACiAKIC8gewogCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3Nzc4IjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCiAJY3B1cyB7CiAJCWNwdUAwIHsKQEAgLTUyLDcgKzUzLDYgQEAKIAkJCTwweGZlNzgwMDI0IDQ+LAogCQkJPDB4ZmU3ODAwNDQgND4sCiAJCQk8MHhmZTc4MDA2NCA0PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9ICAgPDAgMjcgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCTAgMjggSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCTAgMjkgSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtNjMsNyArNjMsNiBAQAogCWdwaW8wOiBncGlvQGZmYzQwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdwaW8tcjhhNzc3OCIsICJyZW5lc2FzLGdwaW8tcmNhciI7CiAJCXJlZyA9IDwweGZmYzQwMDAwIDB4MmM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJZ3Bpby1jb250cm9sbGVyOwpAQCAtNzUsNyArNzQsNiBAQAogCWdwaW8xOiBncGlvQGZmYzQxMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdwaW8tcjhhNzc3OCIsICJyZW5lc2FzLGdwaW8tcmNhciI7CiAJCXJlZyA9IDwweGZmYzQxMDAwIDB4MmM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJZ3Bpby1jb250cm9sbGVyOwpAQCAtODcsNyArODUsNiBAQAogCWdwaW8yOiBncGlvQGZmYzQyMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdwaW8tcjhhNzc3OCIsICJyZW5lc2FzLGdwaW8tcmNhciI7CiAJCXJlZyA9IDwweGZmYzQyMDAwIDB4MmM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJZ3Bpby1jb250cm9sbGVyOwpAQCAtOTksNyArOTYsNiBAQAogCWdwaW8zOiBncGlvQGZmYzQzMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdwaW8tcjhhNzc3OCIsICJyZW5lc2FzLGdwaW8tcmNhciI7CiAJCXJlZyA9IDwweGZmYzQzMDAwIDB4MmM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJZ3Bpby1jb250cm9sbGVyOwpAQCAtMTExLDcgKzEwNyw2IEBACiAJZ3BpbzQ6IGdwaW9AZmZjNDQwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZ3Bpby1yOGE3Nzc4IiwgInJlbmVzYXMsZ3Bpby1yY2FyIjsKIAkJcmVnID0gPDB4ZmZjNDQwMDAgMHgyYz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxMDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCSNncGlvLWNlbGxzID0gPDI+OwogCQlncGlvLWNvbnRyb2xsZXI7CkBAIC0xMzAsNyArMTI1LDYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpMmMtcjhhNzc3OCI7CiAJCXJlZyA9IDwweGZmYzcwMDAwIDB4MTAwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMTQwLDcgKzEzNCw2IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInJlbmVzYXMsaTJjLXI4YTc3NzgiOwogCQlyZWcgPSA8MHhmZmM3MTAwMCAweDEwMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgNzggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTE1MCw3ICsxNDMsNiBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGkyYy1yOGE3Nzc4IjsKIAkJcmVnID0gPDB4ZmZjNzIwMDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0xNjAsNyArMTUyLDYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpMmMtcjhhNzc3OCI7CiAJCXJlZyA9IDwweGZmYzczMDAwIDB4MTAwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMTY4LDcgKzE1OSw2IEBACiAJbW1jaWY6IG1tY0BmZmU0ZTAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaC1tbWNpZiI7CiAJCXJlZyA9IDwweGZmZTRlMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDYxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0xNzYsNyArMTY2LDYgQEAKIAlzZGhpMDogc2RAZmZlNGMwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3Nzc4IjsKIAkJcmVnID0gPDB4ZmZlNGMwMDAgMHgxMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCWNhcC1zZGlvLWlycTsKQEAgLTE4Niw3ICsxNzUsNiBAQAogCXNkaGkxOiBzZEBmZmU0ZDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTc3NzgiOwogCQlyZWcgPSA8MHhmZmU0ZDAwMCAweDEwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJY2FwLXNkaW8taXJxOwpAQCAtMTk2LDcgKzE4NCw2IEBACiAJc2RoaTI6IHNkQGZmZTRmMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OCI7CiAJCXJlZyA9IDwweGZmZTRmMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljYXAtc2QtaGlnaHNwZWVkOwogCQljYXAtc2Rpby1pcnE7CkBAIC0yMDQsMjYgKzE5MSwyOSBAQAogCX07CiAKIAloc3BpMDogc3BpQGZmZmM3MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGhzcGkiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaHNwaS1yOGE3Nzc4IiwgInJlbmVzYXMsaHNwaSI7CiAJCXJlZyA9IDwweGZmZmM3MDAwIDB4MTg+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlciA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDYzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAogCWhzcGkxOiBzcGlAZmZmYzgwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsaHNwaSI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxoc3BpLXI4YTc3NzgiLCAicmVuZXNhcyxoc3BpIjsKIAkJcmVnID0gPDB4ZmZmYzgwMDAgMHgxOD47Ci0JCWludGVycnVwdC1jb250cm9sbGVyID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCiAJaHNwaTI6IHNwaUBmZmZjNjAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxoc3BpIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGhzcGktcjhhNzc3OCIsICJyZW5lc2FzLGhzcGkiOwogCQlyZWcgPSA8MHhmZmZjNjAwMCAweDE4PjsKLQkJaW50ZXJydXB0LWNvbnRyb2xsZXIgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS1tYXJ6ZW4tcmVmZXJlbmNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzktbWFyemVuLXJlZmVyZW5jZS5kdHMKaW5kZXggNzZmNWVlZi4uYjI3YzYzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS1tYXJ6ZW4tcmVmZXJlbmNlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LW1hcnplbi1yZWZlcmVuY2UuZHRzCkBAIC00NSw2ICs0NSw3IEBACiAJCXBoeS1tb2RlID0gIm1paSI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmlycXBpbjA+OwogCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsKKwkJc21zYyxpcnEtcHVzaC1wdWxsOwogCQlyZWctaW8td2lkdGggPSA8ND47CiAJCXZkZHZhcmlvLXN1cHBseSA9IDwmZml4ZWRyZWd1bGF0b3IzdjM+OwogCQl2ZGQzM2Etc3VwcGx5ID0gPCZmaXhlZHJlZ3VsYXRvcjN2Mz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LmR0c2kKaW5kZXggZDA1NjFkNC4uYjUxN2M4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzkuZHRzaQpAQCAtMTUsNiArMTUsNyBAQAogCiAvIHsKIAljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc3OSI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTU5LDcgKzYwLDYgQEAKIAlncGlvMDogZ3Bpb0BmZmM0MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxncGlvLXI4YTc3NzkiLCAicmVuZXNhcyxncGlvLXJjYXIiOwogCQlyZWcgPSA8MHhmZmM0MDAwMCAweDJjPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE0MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCWdwaW8tY29udHJvbGxlcjsKQEAgLTcxLDcgKzcxLDYgQEAKIAlncGlvMTogZ3Bpb0BmZmM0MTAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxncGlvLXI4YTc3NzkiLCAicmVuZXNhcyxncGlvLXJjYXIiOwogCQlyZWcgPSA8MHhmZmM0MTAwMCAweDJjPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE0MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCWdwaW8tY29udHJvbGxlcjsKQEAgLTgzLDcgKzgyLDYgQEAKIAlncGlvMjogZ3Bpb0BmZmM0MjAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxncGlvLXI4YTc3NzkiLCAicmVuZXNhcyxncGlvLXJjYXIiOwogCQlyZWcgPSA8MHhmZmM0MjAwMCAweDJjPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCWdwaW8tY29udHJvbGxlcjsKQEAgLTk1LDcgKzkzLDYgQEAKIAlncGlvMzogZ3Bpb0BmZmM0MzAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxncGlvLXI4YTc3NzkiLCAicmVuZXNhcyxncGlvLXJjYXIiOwogCQlyZWcgPSA8MHhmZmM0MzAwMCAweDJjPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE0NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCWdwaW8tY29udHJvbGxlcjsKQEAgLTEwNyw3ICsxMDQsNiBAQAogCWdwaW80OiBncGlvQGZmYzQ0MDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGdwaW8tcjhhNzc3OSIsICJyZW5lc2FzLGdwaW8tcmNhciI7CiAJCXJlZyA9IDwweGZmYzQ0MDAwIDB4MmM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTQ1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJZ3Bpby1jb250cm9sbGVyOwpAQCAtMTE5LDcgKzExNSw2IEBACiAJZ3BpbzU6IGdwaW9AZmZjNDUwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZ3Bpby1yOGE3Nzc5IiwgInJlbmVzYXMsZ3Bpby1yY2FyIjsKIAkJcmVnID0gPDB4ZmZjNDUwMDAgMHgyYz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCSNncGlvLWNlbGxzID0gPDI+OwogCQlncGlvLWNvbnRyb2xsZXI7CkBAIC0xMzEsNyArMTI2LDYgQEAKIAlncGlvNjogZ3Bpb0BmZmM0NjAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxncGlvLXI4YTc3NzkiLCAicmVuZXNhcyxncGlvLXJjYXIiOwogCQlyZWcgPSA8MHhmZmM0NjAwMCAweDJjPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE0NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCWdwaW8tY29udHJvbGxlcjsKQEAgLTE1MCw3ICsxNDQsNiBAQAogCQkJPDB4ZmU3ODAwMjQgND4sCiAJCQk8MHhmZTc4MDA0NCA0PiwKIAkJCTwweGZlNzgwMDY0IDQ+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMjcgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAyOCBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDI5IElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTE2Myw3ICsxNTYsNiBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGkyYy1yOGE3Nzc5IjsKIAkJcmVnID0gPDB4ZmZjNzAwMDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDc5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0xNzMsNyArMTY1LDYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpMmMtcjhhNzc3OSI7CiAJCXJlZyA9IDwweGZmYzcxMDAwIDB4MTAwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA4MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMTgzLDcgKzE3NCw2IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gInJlbmVzYXMsaTJjLXI4YTc3NzkiOwogCQlyZWcgPSA8MHhmZmM3MjAwMCAweDEwMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgODAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKQEAgLTE5Myw3ICsxODMsNiBAQAogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGkyYy1yOGE3Nzc5IjsKIAkJcmVnID0gPDB4ZmZjNzMwMDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDgxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC0yMTEsMTQgKzIwMCwxMiBAQAogCXNhdGE6IHNhdGFAZmM2MDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1zYXRhIjsKIAkJcmVnID0gPDB4ZmM2MDAwMDAgMHgyMDAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAl9OwogCiAJc2RoaTA6IHNkQGZmZTRjMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OSI7CiAJCXJlZyA9IDwweGZmZTRjMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJY2FwLXNkaW8taXJxOwpAQCAtMjI4LDcgKzIxNSw2IEBACiAJc2RoaTE6IHNkQGZmZTRkMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OSI7CiAJCXJlZyA9IDwweGZmZTRkMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJY2FwLXNkaW8taXJxOwpAQCAtMjM4LDcgKzIyNCw2IEBACiAJc2RoaTI6IHNkQGZmZTRlMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OSI7CiAJCXJlZyA9IDwweGZmZTRlMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJY2FwLXNkaW8taXJxOwpAQCAtMjQ4LDcgKzIzMyw2IEBACiAJc2RoaTM6IHNkQGZmZTRmMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OSI7CiAJCXJlZyA9IDwweGZmZTRmMDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJY2FwLXNkaW8taXJxOwpAQCAtMjU2LDI2ICsyNDAsMjkgQEAKIAl9OwogCiAJaHNwaTA6IHNwaUBmZmZjNzAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxoc3BpIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGhzcGktcjhhNzc3OSIsICJyZW5lc2FzLGhzcGkiOwogCQlyZWcgPSA8MHhmZmZjNzAwMCAweDE4PjsKLQkJaW50ZXJydXB0LWNvbnRyb2xsZXIgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCA3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKIAloc3BpMTogc3BpQGZmZmM4MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGhzcGkiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaHNwaS1yOGE3Nzc5IiwgInJlbmVzYXMsaHNwaSI7CiAJCXJlZyA9IDwweGZmZmM4MDAwIDB4MTg+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlciA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDc0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAogCWhzcGkyOiBzcGlAZmZmYzYwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsaHNwaSI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxoc3BpLXI4YTc3NzkiLCAicmVuZXNhcyxoc3BpIjsKIAkJcmVnID0gPDB4ZmZmYzYwMDAgMHgxOD47Ci0JCWludGVycnVwdC1jb250cm9sbGVyID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC1sYWdlci5kdHMKaW5kZXggZDAxMDQ4YS4uZGQyZmU0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC1sYWdlci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC1sYWdlci5kdHMKQEAgLTEyLDExICsxMiwxNyBAQAogL2R0cy12MS87CiAjaW5jbHVkZSAicjhhNzc5MC5kdHNpIgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAKIC8gewogCW1vZGVsID0gIkxhZ2VyIjsKIAljb21wYXRpYmxlID0gInJlbmVzYXMsbGFnZXIiLCAicmVuZXNhcyxyOGE3NzkwIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWw2ID0gJnNjaWYwOworCQlzZXJpYWw3ID0gJnNjaWYxOworCX07CisKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDNiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CiAJfTsKQEAgLTM2LDYgKzQyLDM5IEBACiAJCSNzaXplLWNlbGxzID0gPDE+OwogCX07CiAKKwlncGlvX2tleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisKKwkJYnV0dG9uQDEgeworCQkJbGludXgsY29kZSA9IDxLRVlfMT47CisJCQlsYWJlbCA9ICJTVzItMSI7CisJCQlncGlvLWtleSx3YWtldXA7CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwyMD47CisJCQlncGlvcyA9IDwmZ3BpbzEgMTQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwkJYnV0dG9uQDIgeworCQkJbGludXgsY29kZSA9IDxLRVlfMj47CisJCQlsYWJlbCA9ICJTVzItMiI7CisJCQlncGlvLWtleSx3YWtldXA7CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwyMD47CisJCQlncGlvcyA9IDwmZ3BpbzEgMjQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwkJYnV0dG9uQDMgeworCQkJbGludXgsY29kZSA9IDxLRVlfMz47CisJCQlsYWJlbCA9ICJTVzItMyI7CisJCQlncGlvLWtleSx3YWtldXA7CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwyMD47CisJCQlncGlvcyA9IDwmZ3BpbzEgMjYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwkJYnV0dG9uQDQgeworCQkJbGludXgsY29kZSA9IDxLRVlfND47CisJCQlsYWJlbCA9ICJTVzItNCI7CisJCQlncGlvLWtleSx3YWtldXA7CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwyMD47CisJCQlncGlvcyA9IDwmZ3BpbzEgMjggR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCiAJbGVkcyB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJbGVkNiB7CkBAIC0xMTIsNyArMTUxLDcgQEAKIH07CiAKICZwZmMgewotCXBpbmN0cmwtMCA9IDwmZHVfcGlucyAmc2NpZjBfcGlucyAmc2NpZjFfcGlucz47CisJcGluY3RybC0wID0gPCZkdV9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJZHVfcGluczogZHUgewpAQCAtMTU1LDEwICsxOTQsMTYgQEAKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJtbWMxIjsKIAl9OwogCi0JcXNwaV9waW5zOiBzcGkgeworCXFzcGlfcGluczogc3BpMCB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gInFzcGlfY3RybCIsICJxc3BpX2RhdGE0IjsKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJxc3BpIjsKIAl9OworCisJbXNpb2YxX3BpbnM6IHNwaTIgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJtc2lvZjFfY2xrIiwgIm1zaW9mMV9zeW5jIiwgIm1zaW9mMV9yeCIsCisJCQkJICJtc2lvZjFfdHgiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gIm1zaW9mMSI7CisJfTsKIH07CiAKICZldGhlciB7CkBAIC0xNzMsNiArMjE4LDcgQEAKIAkJcmVnID0gPDE+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcnFjMD47CiAJCWludGVycnVwdHMgPSA8MCBJUlFfVFlQRV9MRVZFTF9MT1c+OworCQltaWNyZWwsbGVkLW1vZGUgPSA8MT47CiAJfTsKIH07CiAKQEAgLTE5MCw3ICsyMzYsNyBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKLSZzcGkgeworJnFzcGkgewogCXBpbmN0cmwtMCA9IDwmcXNwaV9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCkBAIC0yMDIsNiArMjQ4LDggQEAKIAkJY29tcGF0aWJsZSA9ICJzcGFuc2lvbixzMjVmbDUxMnMiOwogCQlyZWcgPSA8MD47CiAJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDMwMDAwMDAwPjsKKwkJc3BpLXR4LWJ1cy13aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1cy13aWR0aCA9IDw0PjsKIAkJbTI1cCxmYXN0LXJlYWQ7CiAKIAkJcGFydGl0aW9uQDAgewpAQCAtMjIxLDYgKzI2OSwzNSBAQAogCX07CiB9OwogCismc2NpZjAgeworCXBpbmN0cmwtMCA9IDwmc2NpZjBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzY2lmMSB7CisJcGluY3RybC0wID0gPCZzY2lmMV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1zaW9mMSB7CisJcGluY3RybC0wID0gPCZtc2lvZjFfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXN0YXR1cyA9ICJva2F5IjsKKworCXBtaWM6IHBtaWNAMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyMmExMTMwMmZ0IjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw2MDAwMDAwPjsKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCX07Cit9OworCiAmc2RoaTAgewogCXBpbmN0cmwtMCA9IDwmc2RoaTBfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAuZHRzaQppbmRleCA2MThlNWI1Li43ZmYyOTYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC5kdHNpCkBAIC0yNCw2ICsyNCwxNSBAQAogCQlpMmMxID0gJmkyYzE7CiAJCWkyYzIgPSAmaTJjMjsKIAkJaTJjMyA9ICZpMmMzOworCQlpMmM0ID0gJmlpYzA7CisJCWkyYzUgPSAmaWljMTsKKwkJaTJjNiA9ICZpaWMyOworCQlpMmM3ID0gJmlpYzM7CisJCXNwaTAgPSAmcXNwaTsKKwkJc3BpMSA9ICZtc2lvZjA7CisJCXNwaTIgPSAmbXNpb2YxOworCQlzcGkzID0gJm1zaW9mMjsKKwkJc3BpNCA9ICZtc2lvZjM7CiAJfTsKIAogCWNwdXMgewpAQCAtMTA4LDYgKzExNyw3IEBACiAJCWdwaW8tcmFuZ2VzID0gPCZwZmMgMCAwIDMyPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkwX0NMS19HUElPMD47CiAJfTsKIAogCWdwaW8xOiBncGlvQGU2MDUxMDAwIHsKQEAgLTExOSw2ICsxMjksNyBAQAogCQlncGlvLXJhbmdlcyA9IDwmcGZjIDAgMzIgMzI+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI4QTc3OTBfQ0xLX0dQSU8xPjsKIAl9OwogCiAJZ3BpbzI6IGdwaW9AZTYwNTIwMDAgewpAQCAtMTMwLDYgKzE0MSw3IEBACiAJCWdwaW8tcmFuZ2VzID0gPCZwZmMgMCA2NCAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MF9DTEtfR1BJTzI+OwogCX07CiAKIAlncGlvMzogZ3Bpb0BlNjA1MzAwMCB7CkBAIC0xNDEsNiArMTUzLDcgQEAKIAkJZ3Bpby1yYW5nZXMgPSA8JnBmYyAwIDk2IDMyPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkwX0NMS19HUElPMz47CiAJfTsKIAogCWdwaW80OiBncGlvQGU2MDU0MDAwIHsKQEAgLTE1Miw2ICsxNjUsNyBAQAogCQlncGlvLXJhbmdlcyA9IDwmcGZjIDAgMTI4IDMyPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkwX0NMS19HUElPND47CiAJfTsKIAogCWdwaW81OiBncGlvQGU2MDU1MDAwIHsKQEAgLTE2Myw2ICsxNzcsNyBAQAogCQlncGlvLXJhbmdlcyA9IDwmcGZjIDAgMTYwIDMyPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkwX0NMS19HUElPNT47CiAJfTsKIAogCXRoZXJtYWxAZTYxZjAwMDAgewpAQCAtMjMxLDYgKzI0Niw0NiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwlpaWMwOiBpMmNAZTY1MDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzc5MCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJcmVnID0gPDAgMHhlNjUwMDAwMCAwIDB4NDI1PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpaWMxOiBpMmNAZTY1MTAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzc5MCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJcmVnID0gPDAgMHhlNjUxMDAwMCAwIDB4NDI1PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzE+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpaWMyOiBpMmNAZTY1MjAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzc5MCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJcmVnID0gPDAgMHhlNjUyMDAwMCAwIDB4NDI1PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE3NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzI+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpaWMzOiBpMmNAZTYwYjAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzc5MCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJcmVnID0gPDAgMHhlNjBiMDAwMCAwIDB4NDI1PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI4QTc3OTBfQ0xLX0lJQ0RWRlM+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAltbWNpZjA6IG1tY2lmQGVlMjAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLG1tY2lmLXI4YTc3OTAiLCAicmVuZXNhcyxzaC1tbWNpZiI7CiAJCXJlZyA9IDwwIDB4ZWUyMDAwMDAgMCAweDgwPjsKQEAgLTY3Myw3ICs3MjgsNyBAQAogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAogCQkJCVI4QTc3OTBfQ0xLX1RNVTEgUjhBNzc5MF9DTEtfVE1VMyBSOEE3NzkwX0NMS19UTVUyCiAJCQkJUjhBNzc5MF9DTEtfQ01UMCBSOEE3NzkwX0NMS19UTVUwIFI4QTc3OTBfQ0xLX1ZTUDFfRFUxCi0JCQkJUjhBNzc5MF9DTEtfVlNQMV9EVTAgUjhBNzc5MF9DTEtfVlNQMV9SVCBSOEE3NzkwX0NMS19WU1AxX1NZCisJCQkJUjhBNzc5MF9DTEtfVlNQMV9EVTAgUjhBNzc5MF9DTEtfVlNQMV9SIFI4QTc3OTBfQ0xLX1ZTUDFfUwogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9CiAJCQkJInRtdTEiLCAidG11MyIsICJ0bXUyIiwgImNtdDAiLCAidG11MCIsICJ2c3AxLWR1MSIsCkBAIC02OTcsMTggKzc1MiwxOSBAQAogCQltc3RwM19jbGtzOiBtc3RwM19jbGtzQGU2MTUwMTNjIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxM2MgMCA0PiwgPDAgMHhlNjE1MDA0OCAwIDQ+OwotCQkJY2xvY2tzID0gPCZjcF9jbGs+LCA8Jm1tYzFfY2xrPiwgPCZzZDNfY2xrPiwgPCZzZDJfY2xrPiwKLQkJCQkgPCZjcGdfY2xvY2tzIFI4QTc3OTBfQ0xLX1NEMT4sIDwmY3BnX2Nsb2NrcyBSOEE3NzkwX0NMS19TRDA+LAotCQkJCSA8Jm1tYzBfY2xrPiwgPCZyY2xrX2Nsaz47CisJCQljbG9ja3MgPSA8JmhwX2Nsaz4sIDwmY3BfY2xrPiwgPCZtbWMxX2Nsaz4sIDwmc2QzX2Nsaz4sCisJCQkJIDwmc2QyX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzkwX0NMS19TRDE+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MF9DTEtfU0QwPiwgPCZtbWMwX2Nsaz4sCisJCQkJIDwmaHBfY2xrPiwgPCZocF9jbGs+LCA8JnJjbGtfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKLQkJCQlSOEE3NzkwX0NMS19UUFUwIFI4QTc3OTBfQ0xLX01NQ0lGMSBSOEE3NzkwX0NMS19TREhJMwotCQkJCVI4QTc3OTBfQ0xLX1NESEkyIFI4QTc3OTBfQ0xLX1NESEkxIFI4QTc3OTBfQ0xLX1NESEkwCi0JCQkJUjhBNzc5MF9DTEtfTU1DSUYwIFI4QTc3OTBfQ0xLX0NNVDEKKwkJCQlSOEE3NzkwX0NMS19JSUMyIFI4QTc3OTBfQ0xLX1RQVTAgUjhBNzc5MF9DTEtfTU1DSUYxIFI4QTc3OTBfQ0xLX1NESEkzCisJCQkJUjhBNzc5MF9DTEtfU0RISTIgUjhBNzc5MF9DTEtfU0RISTEgUjhBNzc5MF9DTEtfU0RISTAgUjhBNzc5MF9DTEtfTU1DSUYwCisJCQkJUjhBNzc5MF9DTEtfSUlDMCBSOEE3NzkwX0NMS19JSUMxIFI4QTc3OTBfQ0xLX0NNVDEKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJ0cHUwIiwgIm1tY2lmMSIsICJzZGhpMyIsICJzZGhpMiIsCi0JCQkJInNkaGkxIiwgInNkaGkwIiwgIm1tY2lmMCIsICJjbXQxIjsKKwkJCQkiaWljMiIsICJ0cHUwIiwgIm1tY2lmMSIsICJzZGhpMyIsCisJCQkJInNkaGkyIiwgInNkaGkxIiwgInNkaGkwIiwgIm1tY2lmMCIsCisJCQkJImlpYzAiLCAiaWljMSIsICJjbXQxIjsKIAkJfTsKIAkJbXN0cDVfY2xrczogbXN0cDVfY2xrc0BlNjE1MDE0NCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CkBAIC03NTIsMjAgKzgwOCwyNSBAQAogCQltc3RwOV9jbGtzOiBtc3RwOV9jbGtzQGU2MTUwOTk0IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkwLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTA5OTQgMCA0PiwgPDAgMHhlNjE1MDlhNCAwIDQ+OwotCQkJY2xvY2tzID0gPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MF9DTEtfUVNQST4sCi0JCQkJIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+OworCQkJY2xvY2tzID0gPCZjcF9jbGs+LCA8JmNwX2Nsaz4sIDwmY3BfY2xrPiwKKwkJCQkgPCZjcF9jbGs+LCA8JmNwX2Nsaz4sIDwmY3BfY2xrPiwKKwkJCQkgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JmNwZ19jbG9ja3MgUjhBNzc5MF9DTEtfUVNQST4sIDwmY3BfY2xrPiwKKwkJCQkgPCZocF9jbGs+LCA8JmhwX2Nsaz4sIDwmaHBfY2xrPiwgPCZocF9jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAotCQkJCVI4QTc3OTBfQ0xLX1JDQU4xIFI4QTc3OTBfQ0xLX1JDQU4wIFI4QTc3OTBfQ0xLX1FTUElfTU9ECi0JCQkJUjhBNzc5MF9DTEtfSTJDMyBSOEE3NzkwX0NMS19JMkMyIFI4QTc3OTBfQ0xLX0kyQzEKLQkJCQlSOEE3NzkwX0NMS19JMkMwCisJCQkJUjhBNzc5MF9DTEtfR1BJTzUgUjhBNzc5MF9DTEtfR1BJTzQgUjhBNzc5MF9DTEtfR1BJTzMKKwkJCQlSOEE3NzkwX0NMS19HUElPMiBSOEE3NzkwX0NMS19HUElPMSBSOEE3NzkwX0NMS19HUElPMAorCQkJCVI4QTc3OTBfQ0xLX1JDQU4xIFI4QTc3OTBfQ0xLX1JDQU4wIFI4QTc3OTBfQ0xLX1FTUElfTU9EIFI4QTc3OTBfQ0xLX0lJQ0RWRlMKKwkJCQlSOEE3NzkwX0NMS19JMkMzIFI4QTc3OTBfQ0xLX0kyQzIgUjhBNzc5MF9DTEtfSTJDMSBSOEE3NzkwX0NMS19JMkMwCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KLQkJCQkicmNhbjEiLCAicmNhbjAiLCAicXNwaV9tb2QiLCAiaTJjMyIsICJpMmMyIiwgImkyYzEiLCAiaTJjMCI7CisJCQkJImdwaW81IiwgImdwaW80IiwgImdwaW8zIiwgImdwaW8yIiwgImdwaW8xIiwgImdwaW8wIiwKKwkJCQkicmNhbjEiLCAicmNhbjAiLCAicXNwaV9tb2QiLCAiaWljMyIsCisJCQkJImkyYzMiLCAiaTJjMiIsICJpMmMxIiwgImkyYzAiOwogCQl9OwogCX07CiAKLQlzcGk6IHNwaUBlNmIxMDAwMCB7CisJcXNwaTogc3BpQGU2YjEwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHFzcGktcjhhNzc5MCIsICJyZW5lc2FzLHFzcGkiOwogCQlyZWcgPSA8MCAweGU2YjEwMDAwIDAgMHgyYz47CiAJCWludGVycnVwdHMgPSA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC03NzUsNCArODM2LDQ0IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CisKKwltc2lvZjA6IHNwaUBlNmUyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxtc2lvZi1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlNmUyMDAwMCAwIDB4MDA2ND47CisJCWludGVycnVwdHMgPSA8MCAxNTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDBfY2xrcyBSOEE3NzkwX0NMS19NU0lPRjA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCW1zaW9mMTogc3BpQGU2ZTEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLG1zaW9mLXI4YTc3OTAiOworCQlyZWcgPSA8MCAweGU2ZTEwMDAwIDAgMHgwMDY0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE1NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMl9jbGtzIFI4QTc3OTBfQ0xLX01TSU9GMT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbXNpb2YyOiBzcGlAZTZlMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbXNpb2YtcjhhNzc5MCI7CisJCXJlZyA9IDwwIDB4ZTZlMDAwMDAgMCAweDAwNjQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTU4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc5MF9DTEtfTVNJT0YyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwltc2lvZjM6IHNwaUBlNmM5MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxtc2lvZi1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlNmM5MDAwMCAwIDB4MDA2ND47CisJCWludGVycnVwdHMgPSA8MCAxNTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzkwX0NMS19NU0lPRjM+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWhlbm5pbmdlci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWhlbm5pbmdlci5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ZDk5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEtaGVubmluZ2VyLmR0cwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgdGhlIEhlbm5pbmdlciBib2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDE0IENvZ2VudCBFbWJlZGRlZCwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgInI4YTc3OTEuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKworLyB7CisJbW9kZWwgPSAiSGVubmluZ2VyIjsKKwljb21wYXRpYmxlID0gInJlbmVzYXMsaGVubmluZ2VyIiwgInJlbmVzYXMscjhhNzc5MSI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZzY2lmMDsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQzAsMzg0MDAgaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJfTsKKworCW1lbW9yeUA0MDAwMDAwMCB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDQwMDAwMDAwPjsKKwl9OworCisJbWVtb3J5QDIwMDAwMDAwMCB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwyIDB4MDAwMDAwMDAgMCAweDQwMDAwMDAwPjsKKwl9OworCisJdmNjX3NkaGkwOiByZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKworCQlyZWd1bGF0b3ItbmFtZSA9ICJTREhJMCBWY2MiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXZjY3Ffc2RoaTA6IHJlZ3VsYXRvckAxIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZ3BpbyI7CisKKwkJcmVndWxhdG9yLW5hbWUgPSAiU0RISTAgVmNjUSI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKworCQlncGlvcyA9IDwmZ3BpbzIgMTIgR1BJT19BQ1RJVkVfSElHSD47CisJCWdwaW9zLXN0YXRlcyA9IDwxPjsKKwkJc3RhdGVzID0gPDMzMDAwMDAgMQorCQkJICAxODAwMDAwIDA+OworCX07CisKKwl2Y2Nfc2RoaTI6IHJlZ3VsYXRvckAyIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCisJCXJlZ3VsYXRvci1uYW1lID0gIlNESEkyIFZjYyI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworCisJdmNjcV9zZGhpMjogcmVndWxhdG9yQDMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1ncGlvIjsKKworCQlyZWd1bGF0b3ItbmFtZSA9ICJTREhJMiBWY2NRIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCisJCWdwaW9zID0gPCZncGlvMiAyNiBHUElPX0FDVElWRV9ISUdIPjsKKwkJZ3Bpb3Mtc3RhdGVzID0gPDE+OworCQlzdGF0ZXMgPSA8MzMwMDAwMCAxCisJCQkgIDE4MDAwMDAgMD47CisJfTsKK307CisKKyZleHRhbF9jbGsgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47Cit9OworCismcGZjIHsKKwlzY2lmMF9waW5zOiBzZXJpYWwwIHsKKwkJcmVuZXNhcyxncm91cHMgPSAic2NpZjBfZGF0YV9kIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmMCI7CisJfTsKKworCWV0aGVyX3BpbnM6IGV0aGVyIHsKKwkJcmVuZXNhcyxncm91cHMgPSAiZXRoX2xpbmsiLCAiZXRoX21kaW8iLCAiZXRoX3JtaWkiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gImV0aCI7CisJfTsKKworCXBoeTFfcGluczogcGh5MSB7CisJCXJlbmVzYXMsZ3JvdXBzID0gImludGNfaXJxMCI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAiaW50YyI7CisJfTsKKworCXNkaGkwX3BpbnM6IHNkMCB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNkaGkwX2RhdGE0IiwgInNkaGkwX2N0cmwiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNkaGkwIjsKKwl9OworCisJc2RoaTJfcGluczogc2QyIHsKKwkJcmVuZXNhcyxncm91cHMgPSAic2RoaTJfZGF0YTQiLCAic2RoaTJfY3RybCI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAic2RoaTIiOworCX07CisKKwlxc3BpX3BpbnM6IHNwaTAgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJxc3BpX2N0cmwiLCAicXNwaV9kYXRhNCI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAicXNwaSI7CisJfTsKKworCW1zaW9mMF9waW5zOiBzcGkxIHsKKwkJcmVuZXNhcyxncm91cHMgPSAibXNpb2YwX2NsayIsICJtc2lvZjBfc3luYyIsICJtc2lvZjBfcngiLAorCQkJCSAibXNpb2YwX3R4IjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJtc2lvZjAiOworCX07Cit9OworCismc2NpZjAgeworCXBpbmN0cmwtMCA9IDwmc2NpZjBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGhlciB7CisJcGluY3RybC0wID0gPCZldGhlcl9waW5zICZwaHkxX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwlyZW5lc2FzLGV0aGVyLWxpbmstYWN0aXZlLWxvdzsKKwlzdGF0dXMgPSAib2siOworCisJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQlyZWcgPSA8MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlycWMwPjsKKwkJaW50ZXJydXB0cyA9IDwwIElSUV9UWVBFX0xFVkVMX0xPVz47CisJCW1pY3JlbCxsZWQtbW9kZSA9IDwxPjsKKwl9OworfTsKKworJnNhdGEwIHsKKyAgICAgICBzdGF0dXMgPSAib2theSI7Cit9OworCismc2RoaTAgeworCXBpbmN0cmwtMCA9IDwmc2RoaTBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXZtbWMtc3VwcGx5ID0gPCZ2Y2Nfc2RoaTA+OworCXZxbW1jLXN1cHBseSA9IDwmdmNjcV9zZGhpMD47CisJY2QtZ3Bpb3MgPSA8JmdwaW82IDYgR1BJT19BQ1RJVkVfTE9XPjsKKwl3cC1ncGlvcyA9IDwmZ3BpbzYgNyBHUElPX0FDVElWRV9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2RoaTIgeworCXBpbmN0cmwtMCA9IDwmc2RoaTJfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXZtbWMtc3VwcGx5ID0gPCZ2Y2Nfc2RoaTI+OworCXZxbW1jLXN1cHBseSA9IDwmdmNjcV9zZGhpMj47CisJY2QtZ3Bpb3MgPSA8JmdwaW82IDIyIEdQSU9fQUNUSVZFX0xPVz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnFzcGkgeworCXBpbmN0cmwtMCA9IDwmcXNwaV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJc3RhdHVzID0gIm9rYXkiOworCisJZmxhc2hAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGFuc2lvbixzMjVmbDUxMnMiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDMwMDAwMDAwPjsKKwkJc3BpLXR4LWJ1cy13aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1cy13aWR0aCA9IDw0PjsKKwkJbTI1cCxmYXN0LXJlYWQ7CisKKwkJcGFydGl0aW9uQDAgeworCQkJbGFiZWwgPSAibG9hZGVyX3ByZyI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDQwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKwkJcGFydGl0aW9uQDQwMDAwIHsKKwkJCWxhYmVsID0gInVzZXJfcHJnIjsKKwkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDA0MDAwMDA+OworCQkJcmVhZC1vbmx5OworCQl9OworCQlwYXJ0aXRpb25ANDQwMDAwIHsKKwkJCWxhYmVsID0gImZsYXNoX2ZzIjsKKwkJCXJlZyA9IDwweDAwNDQwMDAwIDB4MDNiYzAwMDA+OworCQl9OworCX07Cit9OworCismbXNpb2YwIHsKKwlwaW5jdHJsLTAgPSA8Jm1zaW9mMF9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJc3RhdHVzID0gIm9rYXkiOworCisJcG1pY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHIyYTExMzAyZnQiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDYwMDAwMDA+OworCQlzcGktY3BvbDsKKwkJc3BpLWNwaGE7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1rb2Vsc2NoLmR0cwppbmRleCBkZTFiNjk3Li4wNWQ0NGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEta29lbHNjaC5kdHMKQEAgLTEzLDExICsxMywxNyBAQAogL2R0cy12MS87CiAjaW5jbHVkZSAicjhhNzc5MS5kdHNpIgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAKIC8gewogCW1vZGVsID0gIktvZWxzY2giOwogCWNvbXBhdGlibGUgPSAicmVuZXNhcyxrb2Vsc2NoIiwgInJlbmVzYXMscjhhNzc5MSI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsNiA9ICZzY2lmMDsKKwkJc2VyaWFsNyA9ICZzY2lmMTsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTQzYsMTE1MjAwIGlnbm9yZV9sb2dsZXZlbCBydyByb290PS9kZXYvbmZzIGlwPWRoY3AiOwogCX07CkBAIC00MCw1MSArNDYsNzkgQEAKIAlncGlvLWtleXMgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKKwkJa2V5LTEgeworCQkJZ3Bpb3MgPSA8JmdwaW81IDAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZXzE+OworCQkJbGFiZWwgPSAiU1cyLTEiOworCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OworCQl9OworCQlrZXktMiB7CisJCQlncGlvcyA9IDwmZ3BpbzUgMSBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfMj47CisJCQlsYWJlbCA9ICJTVzItMiI7CisJCQlncGlvLWtleSx3YWtldXA7CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwyMD47CisJCX07CisJCWtleS0zIHsKKwkJCWdwaW9zID0gPCZncGlvNSAyIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxjb2RlID0gPEtFWV8zPjsKKwkJCWxhYmVsID0gIlNXMi0zIjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCWRlYm91bmNlLWludGVydmFsID0gPDIwPjsKKwkJfTsKKwkJa2V5LTQgeworCQkJZ3Bpb3MgPSA8JmdwaW81IDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZXzQ+OworCQkJbGFiZWwgPSAiU1cyLTQiOworCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OworCQl9OwogCQlrZXktYSB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgMCBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwzMD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9BPjsKIAkJCWxhYmVsID0gIlNXMzAiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwogCQl9OwogCQlrZXktYiB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgMSBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDw0OD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9CPjsKIAkJCWxhYmVsID0gIlNXMzEiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwogCQl9OwogCQlrZXktYyB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgMiBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDw0Nj47CisJCQlsaW51eCxjb2RlID0gPEtFWV9DPjsKIAkJCWxhYmVsID0gIlNXMzIiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwogCQl9OwogCQlrZXktZCB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgMyBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwzMj47CisJCQlsaW51eCxjb2RlID0gPEtFWV9EPjsKIAkJCWxhYmVsID0gIlNXMzMiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwogCQl9OwogCQlrZXktZSB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgNCBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwxOD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9FPjsKIAkJCWxhYmVsID0gIlNXMzQiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwogCQl9OwogCQlrZXktZiB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgNSBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwzMz47CisJCQlsaW51eCxjb2RlID0gPEtFWV9GPjsKIAkJCWxhYmVsID0gIlNXMzUiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwogCQl9OwogCQlrZXktZyB7CiAJCQlncGlvcyA9IDwmZ3BpbzcgNiBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwzND47CisJCQlsaW51eCxjb2RlID0gPEtFWV9HPjsKIAkJCWxhYmVsID0gIlNXMzYiOwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MjA+OwpAQCAtMTk1LDExICsyMjksMTYgQEAKIAl9OwogfTsKIAorJmkyYzYgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKK307CisKICZwZmMgewotCXBpbmN0cmwtMCA9IDwmZHVfcGlucyAmc2NpZjBfcGlucyAmc2NpZjFfcGlucz47CisJcGluY3RybC0wID0gPCZkdV9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCi0JaTJjMl9waW5zOiBpMmMgeworCWkyYzJfcGluczogaTJjMiB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gImkyYzIiOwogCQlyZW5lc2FzLGZ1bmN0aW9uID0gImkyYzIiOwogCX07CkBAIC0yNDQsMTAgKzI4MywxNiBAQAogCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNkaGkyIjsKIAl9OwogCi0JcXNwaV9waW5zOiBzcGkgeworCXFzcGlfcGluczogc3BpMCB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gInFzcGlfY3RybCIsICJxc3BpX2RhdGE0IjsKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJxc3BpIjsKIAl9OworCisJbXNpb2YwX3BpbnM6IHNwaTEgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJtc2lvZjBfY2xrIiwgIm1zaW9mMF9zeW5jIiwgIm1zaW9mMF9yeCIsCisJCQkJICJtc2lvZjBfdHgiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gIm1zaW9mMCI7CisJfTsKIH07CiAKICZldGhlciB7CkBAIC0yNjIsNiArMzA3LDcgQEAKIAkJcmVnID0gPDE+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcnFjMD47CiAJCWludGVycnVwdHMgPSA8MCBJUlFfVFlQRV9MRVZFTF9MT1c+OworCQltaWNyZWwsbGVkLW1vZGUgPSA8MT47CiAJfTsKIH07CiAKQEAgLTI2OSw2ICszMTUsMjAgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismc2NpZjAgeworCXBpbmN0cmwtMCA9IDwmc2NpZjBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzY2lmMSB7CisJcGluY3RybC0wID0gPCZzY2lmMV9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnNkaGkwIHsKIAlwaW5jdHJsLTAgPSA8JnNkaGkwX3BpbnM+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0zMDEsNyArMzYxLDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCi0mc3BpIHsKKyZxc3BpIHsKIAlwaW5jdHJsLTAgPSA8JnFzcGlfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIApAQCAtMzEzLDYgKzM3Myw4IEBACiAJCWNvbXBhdGlibGUgPSAic3BhbnNpb24sczI1Zmw1MTJzIjsKIAkJcmVnID0gPDA+OwogCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwzMDAwMDAwMD47CisJCXNwaS10eC1idXMtd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXMtd2lkdGggPSA8ND47CiAJCW0yNXAsZmFzdC1yZWFkOwogCiAJCXBhcnRpdGlvbkAwIHsKQEAgLTMzMSwzICszOTMsMTggQEAKIAkJfTsKIAl9OwogfTsKKworJm1zaW9mMCB7CisJcGluY3RybC0wID0gPCZtc2lvZjBfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCXN0YXR1cyA9ICJva2F5IjsKKworCXBtaWM6IHBtaWNAMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyMmExMTMwMmZ0IjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw2MDAwMDAwPjsKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpCmluZGV4IDQ2MTgxNzAuLjhkN2ZmYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLmR0c2kKQEAgLTI3LDYgKzI3LDEzIEBACiAJCWkyYzMgPSAmaTJjMzsKIAkJaTJjNCA9ICZpMmM0OwogCQlpMmM1ID0gJmkyYzU7CisJCWkyYzYgPSAmaTJjNjsKKwkJaTJjNyA9ICZpMmM3OworCQlpMmM4ID0gJmkyYzg7CisJCXNwaTAgPSAmcXNwaTsKKwkJc3BpMSA9ICZtc2lvZjA7CisJCXNwaTIgPSAmbXNpb2YxOworCQlzcGkzID0gJm1zaW9mMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0zNywxNCArNDQsMTQgQEAKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKIAkJCXJlZyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzAwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNTAwMDAwMDAwPjsKIAkJfTsKIAogCQljcHUxOiBjcHVAMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CiAJCQlyZWcgPSA8MT47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTUwMDAwMDAwMD47CiAJCX07CiAJfTsKIApAQCAtNjksNiArNzYsNyBAQAogCQlncGlvLXJhbmdlcyA9IDwmcGZjIDAgMCAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzA+OwogCX07CiAKIAlncGlvMTogZ3Bpb0BlNjA1MTAwMCB7CkBAIC04MCw2ICs4OCw3IEBACiAJCWdwaW8tcmFuZ2VzID0gPCZwZmMgMCAzMiAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzE+OwogCX07CiAKIAlncGlvMjogZ3Bpb0BlNjA1MjAwMCB7CkBAIC05MSw2ICsxMDAsNyBAQAogCQlncGlvLXJhbmdlcyA9IDwmcGZjIDAgNjQgMzI+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI4QTc3OTFfQ0xLX0dQSU8yPjsKIAl9OwogCiAJZ3BpbzM6IGdwaW9AZTYwNTMwMDAgewpAQCAtMTAyLDYgKzExMiw3IEBACiAJCWdwaW8tcmFuZ2VzID0gPCZwZmMgMCA5NiAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzM+OwogCX07CiAKIAlncGlvNDogZ3Bpb0BlNjA1NDAwMCB7CkBAIC0xMTMsNiArMTI0LDcgQEAKIAkJZ3Bpby1yYW5nZXMgPSA8JnBmYyAwIDEyOCAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzQ+OwogCX07CiAKIAlncGlvNTogZ3Bpb0BlNjA1NTAwMCB7CkBAIC0xMjQsNiArMTM2LDcgQEAKIAkJZ3Bpby1yYW5nZXMgPSA8JnBmYyAwIDE2MCAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzU+OwogCX07CiAKIAlncGlvNjogZ3Bpb0BlNjA1NTQwMCB7CkBAIC0xMzUsNiArMTQ4LDcgQEAKIAkJZ3Bpby1yYW5nZXMgPSA8JnBmYyAwIDE5MiAzMj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzY+OwogCX07CiAKIAlncGlvNzogZ3Bpb0BlNjA1NTgwMCB7CkBAIC0xNDYsNiArMTYwLDcgQEAKIAkJZ3Bpby1yYW5nZXMgPSA8JnBmYyAwIDIyNCAyNj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWludGVycnVwdC1jb250cm9sbGVyOworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MV9DTEtfR1BJTzc+OwogCX07CiAKIAl0aGVybWFsQGU2MWYwMDAwIHsKQEAgLTE4MCw2ICsxOTUsNyBAQAogCQkJICAgICA8MCAxNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAl9OwogCisJLyogVGhlIG1lbW9yeSBtYXAgaW4gdGhlIFVzZXIncyBNYW51YWwgbWFwcyB0aGUgY29yZXMgdG8gYnVzIG51bWJlcnMgKi8KIAlpMmMwOiBpMmNAZTY1MDgwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0yMzEsNiArMjQ3LDcgQEAKIAl9OwogCiAJaTJjNTogaTJjQGU2NTI4MDAwIHsKKwkJLyogZG9lc24ndCBuZWVkIHBpbm11eCAqLwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpMmMtcjhhNzc5MSI7CkBAIC0yNDAsNiArMjU3LDM3IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCWkyYzY6IGkyY0BlNjBiMDAwMCB7CisJCS8qIGRvZXNuJ3QgbmVlZCBwaW5tdXggKi8KKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTc3OTEiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCXJlZyA9IDwwIDB4ZTYwYjAwMDAgMCAweDQyNT47CisJCWludGVycnVwdHMgPSA8MCAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSOEE3NzkxX0NMS19JSUNEVkZTPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJaTJjNzogaTJjQGU2NTAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTc3OTEiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCXJlZyA9IDwwIDB4ZTY1MDAwMDAgMCAweDQyNT47CisJCWludGVycnVwdHMgPSA8MCAxNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19JSUMwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJaTJjODogaTJjQGU2NTEwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTc3OTEiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCXJlZyA9IDwwIDB4ZTY1MTAwMDAgMCAweDQyNT47CisJCWludGVycnVwdHMgPSA8MCAxNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19JSUMxPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJcGZjOiBwZmNAZTYwNjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMscGZjLXI4YTc3OTEiOwogCQlyZWcgPSA8MCAweGU2MDYwMDAwIDAgMHgyNTA+OwpAQCAtMjQ5LDcgKzI5Nyw2IEBACiAJc2RoaTA6IHNkQGVlMTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc5MSI7CiAJCXJlZyA9IDwwIDB4ZWUxMDAwMDAgMCAweDIwMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAJCWludGVycnVwdHMgPSA8MCAxNjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19TREhJMD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yNTgsNyArMzA1LDYgQEAKIAlzZGhpMTogc2RAZWUxNDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3NzkxIjsKIAkJcmVnID0gPDAgMHhlZTE0MDAwMCAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTFfQ0xLX1NESEkxPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTI2Nyw3ICszMTMsNiBAQAogCXNkaGkyOiBzZEBlZTE2MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTc3OTEiOwogCQlyZWcgPSA8MCAweGVlMTYwMDAwIDAgMHgxMDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MV9DTEtfU0RISTI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNjg4LDcgKzczMyw3IEBACiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8CiAJCQkJUjhBNzc5MV9DTEtfVE1VMSBSOEE3NzkxX0NMS19UTVUzIFI4QTc3OTFfQ0xLX1RNVTIKIAkJCQlSOEE3NzkxX0NMS19DTVQwIFI4QTc3OTFfQ0xLX1RNVTAgUjhBNzc5MV9DTEtfVlNQMV9EVTEKLQkJCQlSOEE3NzkxX0NMS19WU1AxX0RVMCBSOEE3NzkxX0NMS19WU1AxX1NZCisJCQkJUjhBNzc5MV9DTEtfVlNQMV9EVTAgUjhBNzc5MV9DTEtfVlNQMV9TCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KIAkJCQkidG11MSIsICJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIiwgInZzcDEtZHUxIiwKQEAgLTcxMiwxNSArNzU3LDE2IEBACiAJCW1zdHAzX2Nsa3M6IG1zdHAzX2Nsa3NAZTYxNTAxM2MgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTEtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDEzYyAwIDQ+LCA8MCAweGU2MTUwMDQ4IDAgND47Ci0JCQljbG9ja3MgPSA8JmNwX2Nsaz4sIDwmc2QyX2Nsaz4sIDwmc2QxX2Nsaz4sCi0JCQkJPCZjcGdfY2xvY2tzIFI4QTc3OTFfQ0xLX1NEMD4sIDwmbW1jMF9jbGs+LCA8JnJjbGtfY2xrPjsKKwkJCWNsb2NrcyA9IDwmY3BfY2xrPiwgPCZzZDJfY2xrPiwgPCZzZDFfY2xrPiwgPCZjcGdfY2xvY2tzIFI4QTc3OTFfQ0xLX1NEMD4sCisJCQkJIDwmbW1jMF9jbGs+LCA8JmhwX2Nsaz4sIDwmaHBfY2xrPiwgPCZyY2xrX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5MV9DTEtfVFBVMCBSOEE3NzkxX0NMS19TREhJMiBSOEE3NzkxX0NMS19TREhJMQotCQkJCVI4QTc3OTFfQ0xLX1NESEkwIFI4QTc3OTFfQ0xLX01NQ0lGMCBSOEE3NzkxX0NMS19DTVQxCisJCQkJUjhBNzc5MV9DTEtfVFBVMCBSOEE3NzkxX0NMS19TREhJMiBSOEE3NzkxX0NMS19TREhJMSBSOEE3NzkxX0NMS19TREhJMAorCQkJCVI4QTc3OTFfQ0xLX01NQ0lGMCBSOEE3NzkxX0NMS19JSUMwIFI4QTc3OTFfQ0xLX0lJQzEgUjhBNzc5MV9DTEtfQ01UMQogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9Ci0JCQkJInRwdTAiLCAic2RoaTIiLCAic2RoaTEiLCAic2RoaTAiLCAibW1jaWYwIiwgImNtdDEiOworCQkJCSJ0cHUwIiwgInNkaGkyIiwgInNkaGkxIiwgInNkaGkwIiwKKwkJCQkibW1jaWYwIiwgImkyYzciLCAiaTJjOCIsICJjbXQxIjsKIAkJfTsKIAkJbXN0cDVfY2xrczogbXN0cDVfY2xrc0BlNjE1MDE0NCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CkBAIC03MzMsMTkgKzc3OSwxOSBAQAogCQltc3RwN19jbGtzOiBtc3RwN19jbGtzQGU2MTUwMTRjIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxNGMgMCA0PiwgPDAgMHhlNjE1MDFjNCAwIDQ+OwotCQkJY2xvY2tzID0gPCZtcF9jbGs+LCA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZ6c19jbGs+LAorCQkJY2xvY2tzID0gPCZtcF9jbGs+LCAgPCZtcF9jbGs+LCA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZ6c19jbGs+LAogCQkJCSA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LAogCQkJCSA8Jnp4X2Nsaz4sIDwmenhfY2xrPiwgPCZ6eF9jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAotCQkJCVI4QTc3OTFfQ0xLX0hTVVNCIFI4QTc3OTFfQ0xLX0hTQ0lGMiBSOEE3NzkxX0NMS19TQ0lGNQorCQkJCVI4QTc3OTFfQ0xLX0VIQ0kgUjhBNzc5MV9DTEtfSFNVU0IgUjhBNzc5MV9DTEtfSFNDSUYyIFI4QTc3OTFfQ0xLX1NDSUY1CiAJCQkJUjhBNzc5MV9DTEtfU0NJRjQgUjhBNzc5MV9DTEtfSFNDSUYxIFI4QTc3OTFfQ0xLX0hTQ0lGMAogCQkJCVI4QTc3OTFfQ0xLX1NDSUYzIFI4QTc3OTFfQ0xLX1NDSUYyIFI4QTc3OTFfQ0xLX1NDSUYxCiAJCQkJUjhBNzc5MV9DTEtfU0NJRjAgUjhBNzc5MV9DTEtfRFUxIFI4QTc3OTFfQ0xLX0RVMAogCQkJCVI4QTc3OTFfQ0xLX0xWRFMwCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KLQkJCQkiaHN1c2IiLCAiaHNjaWYyIiwgInNjaWY1IiwgInNjaWY0IiwgImhzY2lmMSIsICJoc2NpZjAiLAorCQkJCSJlaGNpIiwgImhzdXNiIiwgImhzY2lmMiIsICJzY2lmNSIsICJzY2lmNCIsICJoc2NpZjEiLCAiaHNjaWYwIiwKIAkJCQkic2NpZjMiLCAic2NpZjIiLCAic2NpZjEiLCAic2NpZjAiLCAiZHUxIiwgImR1MCIsICJsdmRzMCI7CiAJCX07CiAJCW1zdHA4X2Nsa3M6IG1zdHA4X2Nsa3NAZTYxNTA5OTAgewpAQCAtNzY0LDE4ICs4MTAsMjMgQEAKIAkJbXN0cDlfY2xrczogbXN0cDlfY2xrc0BlNjE1MDk5NCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwOTk0IDAgND4sIDwwIDB4ZTYxNTA5YTQgMCA0PjsKLQkJCWNsb2NrcyA9IDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZjcGdfY2xvY2tzIFI4QTc3OTFfQ0xLX1FTUEk+LAotCQkJCSA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sCi0JCQkJIDwmcF9jbGs+OworCQkJY2xvY2tzID0gPCZjcF9jbGs+LCA8JmNwX2Nsaz4sIDwmY3BfY2xrPiwgPCZjcF9jbGs+LAorCQkJCSA8JmNwX2Nsaz4sIDwmY3BfY2xrPiwgPCZjcF9jbGs+LCA8JmNwX2Nsaz4sCisJCQkJIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZjcGdfY2xvY2tzIFI4QTc3OTFfQ0xLX1FTUEk+LCA8JmhwX2Nsaz4sCisJCQkJIDwmY3BfY2xrPiwgPCZocF9jbGs+LCA8JmhwX2Nsaz4sIDwmaHBfY2xrPiwKKwkJCQkgPCZocF9jbGs+LCA8JmhwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5MV9DTEtfUkNBTjEgUjhBNzc5MV9DTEtfUkNBTjAgUjhBNzc5MV9DTEtfUVNQSV9NT0QKLQkJCQlSOEE3NzkxX0NMS19JMkM1IFI4QTc3OTFfQ0xLX0kyQzQgUjhBNzc5MV9DTEtfSTJDMwotCQkJCVI4QTc3OTFfQ0xLX0kyQzIgUjhBNzc5MV9DTEtfSTJDMSBSOEE3NzkxX0NMS19JMkMwCisJCQkJUjhBNzc5MV9DTEtfR1BJTzcgUjhBNzc5MV9DTEtfR1BJTzYgUjhBNzc5MV9DTEtfR1BJTzUgUjhBNzc5MV9DTEtfR1BJTzQKKwkJCQlSOEE3NzkxX0NMS19HUElPMyBSOEE3NzkxX0NMS19HUElPMiBSOEE3NzkxX0NMS19HUElPMSBSOEE3NzkxX0NMS19HUElPMAorCQkJCVI4QTc3OTFfQ0xLX1JDQU4xIFI4QTc3OTFfQ0xLX1JDQU4wIFI4QTc3OTFfQ0xLX1FTUElfTU9EIFI4QTc3OTFfQ0xLX0kyQzUKKwkJCQlSOEE3NzkxX0NMS19JSUNEVkZTIFI4QTc3OTFfQ0xLX0kyQzQgUjhBNzc5MV9DTEtfSTJDMyBSOEE3NzkxX0NMS19JMkMyCisJCQkJUjhBNzc5MV9DTEtfSTJDMSBSOEE3NzkxX0NMS19JMkMwCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KLQkJCQkicmNhbjEiLCAicmNhbjAiLCAicXNwaV9tb2QiLCAiaTJjNSIsICJpMmM0IiwgImkyYzMiLAotCQkJCSJpMmMyIiwgImkyYzEiLCAiaTJjMCI7CisJCQkJImdwaW83IiwgImdwaW82IiwgImdwaW81IiwgImdwaW80IiwgImdwaW8zIiwgImdwaW8yIiwgImdwaW8xIiwgImdwaW8wIiwKKwkJCQkicmNhbjEiLCAicmNhbjAiLCAicXNwaV9tb2QiLCAiaTJjNSIsICJpMmM2IiwgImkyYzQiLCAiaTJjMyIsICJpMmMyIiwKKwkJCQkiaTJjMSIsICJpMmMwIjsKIAkJfTsKIAkJbXN0cDExX2Nsa3M6IG1zdHAxMV9jbGtzQGU2MTUwOTljIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTc4OSw3ICs4NDAsNyBAQAogCQl9OwogCX07CiAKLQlzcGk6IHNwaUBlNmIxMDAwMCB7CisJcXNwaTogc3BpQGU2YjEwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHFzcGktcjhhNzc5MSIsICJyZW5lc2FzLHFzcGkiOwogCQlyZWcgPSA8MCAweGU2YjEwMDAwIDAgMHgyYz47CiAJCWludGVycnVwdHMgPSA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC03OTksNCArODUwLDM0IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CisKKwltc2lvZjA6IHNwaUBlNmUyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxtc2lvZi1yOGE3NzkxIjsKKwkJcmVnID0gPDAgMHhlNmUyMDAwMCAwIDB4MDA2ND47CisJCWludGVycnVwdHMgPSA8MCAxNTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDBfY2xrcyBSOEE3NzkxX0NMS19NU0lPRjA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCW1zaW9mMTogc3BpQGU2ZTEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLG1zaW9mLXI4YTc3OTEiOworCQlyZWcgPSA8MCAweGU2ZTEwMDAwIDAgMHgwMDY0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE1NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMl9jbGtzIFI4QTc3OTFfQ0xLX01TSU9GMT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbXNpb2YyOiBzcGlAZTZlMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbXNpb2YtcjhhNzc5MSI7CisJCXJlZyA9IDwwIDB4ZTZlMDAwMDAgMCAweDAwNjQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTU4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAyX2Nsa3MgUjhBNzc5MV9DTEtfTVNJT0YyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLWJxY3VyaWUyLmR0cwppbmRleCAwMzVkZjQwLi5hZmIzMjczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLWJxY3VyaWUyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLWJxY3VyaWUyLmR0cwpAQCAtMTgsNiArMTgsNyBAQAogCiAvIHsKIAltb2RlbCA9ICJicSBDdXJpZSAyIjsKKwljb21wYXRpYmxlID0gIm11bmRvcmVhZGVyLGJxLWN1cmllMiIsICJyb2NrY2hpcCxyazMwNjZhIjsKIAogCW1lbW9yeSB7CiAJCXJlZyA9IDwweDYwMDAwMDAwIDB4NDAwMDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS5kdHNpCmluZGV4IDRkNGRmYmIuLjQzODdjZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLmR0c2kKQEAgLTI0LDYgKzI0LDcgQEAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQllbmFibGUtbWV0aG9kID0gInJvY2tjaGlwLHJrMzA2Ni1zbXAiOwogCiAJCWNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CkBAIC03OSw3ICs4MCw3IEBACiAKIAkJcGluY3RybEAyMDAwODAwMCB7CiAJCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzA2NmEtcGluY3RybCI7Ci0JCQlyZWcgPSA8MHgyMDAwODAwMCAweDE1MD47CisJCQlyb2NrY2hpcCxncmYgPSA8JmdyZj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJcmFuZ2VzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LXJhZHhhcm9jay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cwppbmRleCAzYmExOTY4Li5hNWVlZTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCiAvIHsKIAltb2RlbCA9ICJSYWR4YSBSb2NrIjsKKwljb21wYXRpYmxlID0gInJhZHhhLHJvY2siLCAicm9ja2NoaXAscmszMTg4IjsKIAogCW1lbW9yeSB7CiAJCXJlZyA9IDwweDYwMDAwMDAwIDB4ODAwMDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODguZHRzaQppbmRleCBlZDlhNzBhLi4yMzhjOTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMxODguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODguZHRzaQpAQCAtMjQsNiArMjQsNyBAQAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CisJCWVuYWJsZS1tZXRob2QgPSAicm9ja2NoaXAscmszMDY2LXNtcCI7CiAKIAkJY3B1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTc1LDE3ICs3NiwxNiBAQAogCiAJCXBpbmN0cmxAMjAwMDgwMDAgewogCQkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMxODgtcGluY3RybCI7Ci0JCQlyZWcgPSA8MHgyMDAwODAwMCAweGEwPiwKLQkJCSAgICAgIDwweDIwMDA4MTY0IDB4MWEwPjsKLQkJCXJlZy1uYW1lcyA9ICJiYXNlIiwgInB1bGwiOworCQkJcm9ja2NoaXAsZ3JmID0gPCZncmY+OworCQkJcm9ja2NoaXAscG11ID0gPCZwbXU+OworCiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJcmFuZ2VzOwogCiAJCQlncGlvMDogZ3BpbzBAMHgyMDAwYTAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMxODgtZ3Bpby1iYW5rMCI7Ci0JCQkJcmVnID0gPDB4MjAwMGEwMDAgMHgxMDA+LAotCQkJCSAgICAgIDwweDIwMDA0MDY0IDB4OD47CisJCQkJcmVnID0gPDB4MjAwMGEwMDAgMHgxMDA+OwogCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQljbG9ja3MgPSA8JmNsa19nYXRlczggOT47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrM3h4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszeHh4LmR0c2kKaW5kZXggMjZlNWE5Ni4uMmFkZjFjYzllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaQpAQCAtMzEsMTEgKzMxLDE2IEBACiAJCQlyZWcgPSA8MHgxMDEzYzAwMCAweDEwMD47CiAJCX07CiAKLQkJcG11QDIwMDA0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LXBtdSI7CisJCXBtdTogcG11QDIwMDA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LXBtdSIsICJzeXNjb24iOwogCQkJcmVnID0gPDB4MjAwMDQwMDAgMHgxMDA+OwogCQl9OwogCisJCWdyZjogZ3JmQDIwMDA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3lzY29uIjsKKwkJCXJlZyA9IDwweDIwMDA4MDAwIDB4MjAwPjsKKwkJfTsKKwogCQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDEwMTNkMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zM2MyNDE2LXNtZGsyNDE2LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzI0MTYtc21kazI0MTYuZHRzCmluZGV4IDU5NTk0Y2YxLi5lYTkyZmQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zM2MyNDE2LXNtZGsyNDE2LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zM2MyNDE2LXNtZGsyNDE2LmR0cwpAQCAtMTksNiArMTksMTkgQEAKIAkJcmVnID0gIDwweDMwMDAwMDAwIDB4NDAwMDAwMD47CiAJfTsKIAorCWNsb2NrcyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQl4dGk6IHh0aSB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAieHRpIjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJfTsKKwl9OworCiAJc2VyaWFsQDUwMDAwMDAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvczNjMjQxNi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvczNjMjQxNi5kdHNpCmluZGV4IGU2NTU1YmQuLjk1NWU0YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzI0MTYuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zM2MyNDE2LmR0c2kKQEAgLTgsNiArOCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svczNjMjQ0My5oPgogI2luY2x1ZGUgInMzYzI0eHguZHRzaSIKICNpbmNsdWRlICJzM2MyNDE2LXBpbmN0cmwuZHRzaSIKIApAQCAtMjgsMjYgKzI5LDUzIEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDE2LWlycSI7CiAJfTsKIAorCWNsb2NrczogY2xvY2stY29udHJvbGxlckAweDRjMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0MTYtY2xvY2siOworCQlyZWcgPSA8MHg0YzAwMDAwMCAweDQwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKIAlwaW5jdHJsQDU2MDAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0MTYtcGluY3RybCI7CiAJfTsKIAorCXRpbWVyQDUxMDAwMDAwIHsKKwkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19QV00+OworCQljbG9jay1uYW1lcyA9ICJ0aW1lcnMiOworCX07CisKIAlzZXJpYWxANTAwMDAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC11YXJ0IjsKKwkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMiIsCisJCQkJImNsa191YXJ0X2JhdWQzIjsKKwkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19VQVJUMD4sIDwmY2xvY2tzIFBDTEtfVUFSVDA+LAorCQkJCTwmY2xvY2tzIFNDTEtfVUFSVD47CiAJfTsKIAogCXNlcmlhbEA1MDAwNDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLXVhcnQiOworCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQyIiwKKwkJCQkiY2xrX3VhcnRfYmF1ZDMiOworCQljbG9ja3MgPSA8JmNsb2NrcyBQQ0xLX1VBUlQxPiwgPCZjbG9ja3MgUENMS19VQVJUMT4sCisJCQkJPCZjbG9ja3MgU0NMS19VQVJUPjsKIAl9OwogCiAJc2VyaWFsQDUwMDA4MDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtdWFydCI7CisJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDIiLAorCQkJCSJjbGtfdWFydF9iYXVkMyI7CisJCWNsb2NrcyA9IDwmY2xvY2tzIFBDTEtfVUFSVDI+LCA8JmNsb2NrcyBQQ0xLX1VBUlQyPiwKKwkJCQk8JmNsb2NrcyBTQ0xLX1VBUlQ+OwogCX07CiAKIAlzZXJpYWxANTAwMEMwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC11YXJ0IjsKIAkJcmVnID0gPDB4NTAwMEMwMDAgMHg0MDAwPjsKIAkJaW50ZXJydXB0cyA9IDwxIDE4IDI0IDQ+LCA8MSAxOCAyNSA0PjsKKwkJY2xvY2stbmFtZXMgPSAidWFydCIsICJjbGtfdWFydF9iYXVkMiIsCisJCQkJImNsa191YXJ0X2JhdWQzIjsKKwkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19VQVJUMz4sIDwmY2xvY2tzIFBDTEtfVUFSVDM+LAorCQkJCTwmY2xvY2tzIFNDTEtfVUFSVD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTUsNiArODMsMTAgQEAKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzY0MTAtc2RoY2kiOwogCQlyZWcgPSA8MHg0QUMwMDAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAwIDIxIDM+OworCQljbG9jay1uYW1lcyA9ICJoc21tYyIsICJtbWNfYnVzY2xrLjAiLAorCQkJCSJtbWNfYnVzY2xrLjIiOworCQljbG9ja3MgPSA8JmNsb2NrcyBIQ0xLX0hTTU1DMD4sIDwmY2xvY2tzIEhDTEtfSFNNTUMwPiwKKwkJCQk8JmNsb2NrcyBNVVhfSFNNTUMwPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC02MiwxOCArOTQsMjggQEAKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzY0MTAtc2RoY2kiOwogCQlyZWcgPSA8MHg0QTgwMDAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAwIDIwIDM+OworCQljbG9jay1uYW1lcyA9ICJoc21tYyIsICJtbWNfYnVzY2xrLjAiLAorCQkJCSJtbWNfYnVzY2xrLjIiOworCQljbG9ja3MgPSA8JmNsb2NrcyBIQ0xLX0hTTU1DMT4sIDwmY2xvY2tzIEhDTEtfSFNNTUMxPiwKKwkJCQk8JmNsb2NrcyBNVVhfSFNNTUMxPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCiAJd2F0Y2hkb2dANTMwMDAwMDAgewogCQlpbnRlcnJ1cHRzID0gPDEgOSAyNyAzPjsKKwkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19XRFQ+OworCQljbG9jay1uYW1lcyA9ICJ3YXRjaGRvZyI7CiAJfTsKIAogCXJ0Y0A1NzAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDE2LXJ0YyI7CisJCWNsb2NrcyA9IDwmY2xvY2tzIFBDTEtfUlRDPjsKKwkJY2xvY2stbmFtZXMgPSAicnRjIjsKIAl9OwogCiAJaTJjQDU0MDAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJY2xvY2tzID0gPCZjbG9ja3MgUENMS19JMkMwPjsKKwkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDMuZHRzaQppbmRleCBhMTA2YjA4Li5lMGIxNWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMy5kdHNpCkBAIC01OCw2ICs1OCwxOCBAQAogCQlyZWcgPSA8MHgyMDAwMDAwMCAweDgwMDAwMDA+OwogCX07CiAKKwlzbG93X3h0YWw6IHNsb3dfeHRhbCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwl9OworCisJbWFpbl94dGFsOiBtYWluX3h0YWwgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJfTsKKwogCWNsb2NrcyB7CiAJCWFkY19vcF9jbGs6IGFkY19vcF9jbGt7CiAJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKQEAgLTExMyw2ICsxMjUsOSBAQAogCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUtc3NjIjsKIAkJCQlyZWcgPSA8MHhmMDAwODAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MzggSVJRX1RZUEVfTEVWRUxfSElHSCA0PjsKKwkJCQlkbWFzID0gPCZkbWEwIDIgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCgxMyk+LAorCQkJCSAgICAgICA8JmRtYTAgMiBBVDkxX0RNQV9DRkdfUEVSX0lEKDE0KT47CisJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zc2MwX3R4ICZwaW5jdHJsX3NzYzBfcng+OwogCQkJCWNsb2NrcyA9IDwmc3NjMF9jbGs+OwpAQCAtMjMxLDYgKzI0Niw5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1zc2MiOwogCQkJCXJlZyA9IDwweGY4MDBjMDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwzOSBJUlFfVFlQRV9MRVZFTF9ISUdIIDQ+OworCQkJCWRtYXMgPSA8JmRtYTEgMiBBVDkxX0RNQV9DRkdfUEVSX0lEKDMpPiwKKwkJCQkgICAgICAgPCZkbWExIDIgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg0KT47CisJCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zc2MxX3R4ICZwaW5jdHJsX3NzYzFfcng+OwogCQkJCWNsb2NrcyA9IDwmc3NjMV9jbGs+OwpAQCAtNTc3LDYgKzU5NSw4NCBAQAogCQkJCQl9OwogCQkJCX07CiAKKwkJCQlwd20wIHsKKwkJCQkJcGluY3RybF9wd20wX3B3bWgwXzA6IHB3bTBfcHdtaDAtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9BIDIwIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBJU0lfRDQgYW5kIExDRERBVDIwICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21oMF8xOiBwd20wX3B3bWgwLTEgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQiAwIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBHVFgwICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21sMF8wOiBwd20wX3B3bWwwLTAgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSAyMSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogY29uZmxpY3RzIHdpdGggSVNJX0Q1IGFuZCBMQ0REQVQyMSAqLworCQkJCQl9OworCQkJCQlwaW5jdHJsX3B3bTBfcHdtbDBfMTogcHdtMF9wd21sMC0xIHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0IgMSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogY29uZmxpY3RzIHdpdGggR1RYMSAqLworCQkJCQl9OworCisJCQkJCXBpbmN0cmxfcHdtMF9wd21oMV8wOiBwd20wX3B3bWgxLTAgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSAyMiBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogY29uZmxpY3RzIHdpdGggSVNJX0Q2IGFuZCBMQ0REQVQyMiAqLworCQkJCQl9OworCQkJCQlwaW5jdHJsX3B3bTBfcHdtaDFfMTogcHdtMF9wd21oMS0xIHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0IgNCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogY29uZmxpY3RzIHdpdGggR1JYMCAqLworCQkJCQl9OworCQkJCQlwaW5jdHJsX3B3bTBfcHdtaDFfMjogcHdtMF9wd21oMS0yIHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0IgMjcgQVQ5MV9QRVJJUEhfQyBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIGNvbmZsaWN0cyB3aXRoIEcxMjVDS08gYW5kIFJUUzEgKi8KKwkJCQkJfTsKKwkJCQkJcGluY3RybF9wd20wX3B3bWwxXzA6IHB3bTBfcHdtbDEtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9BIDIzIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBJU0lfRDcgYW5kIExDRERBVDIzICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21sMV8xOiBwd20wX3B3bWwxLTEgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQiA1IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBHUlgxICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21sMV8yOiBwd20wX3B3bWwxLTIgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPRSAzMSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogY29uZmxpY3RzIHdpdGggSVJRICovCisJCQkJCX07CisKKwkJCQkJcGluY3RybF9wd20wX3B3bWgyXzA6IHB3bTBfcHdtaDItMCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9CIDggQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIGNvbmZsaWN0cyB3aXRoIEdUWENLICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21oMl8xOiBwd20wX3B3bWgyLTEgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPRCA1IEFUOTFfUEVSSVBIX0MgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBNQ0kwX0RBNCBhbmQgVElPQTAgKi8KKwkJCQkJfTsKKwkJCQkJcGluY3RybF9wd20wX3B3bWwyXzA6IHB3bTBfcHdtbDItMCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9CIDkgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIGNvbmZsaWN0cyB3aXRoIEdUWEVOICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21sMl8xOiBwd20wX3B3bWwyLTEgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPRCA2IEFUOTFfUEVSSVBIX0MgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBNQ0kwX0RBNSBhbmQgVElPQjAgKi8KKwkJCQkJfTsKKworCQkJCQlwaW5jdHJsX3B3bTBfcHdtaDNfMDogcHdtMF9wd21oMy0wIHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0IgMTIgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIGNvbmZsaWN0cyB3aXRoIEdSWERWICovCisJCQkJCX07CisJCQkJCXBpbmN0cmxfcHdtMF9wd21oM18xOiBwd20wX3B3bWgzLTEgeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPRCA3IEFUOTFfUEVSSVBIX0MgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBNQ0kwX0RBNiBhbmQgVENMSzAgKi8KKwkJCQkJfTsKKwkJCQkJcGluY3RybF9wd20wX3B3bWwzXzA6IHB3bTBfcHdtbDMtMCB7CisJCQkJCQlhdG1lbCxwaW5zID0KKwkJCQkJCQk8QVQ5MV9QSU9CIDEzIEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkU+OwkvKiBjb25mbGljdHMgd2l0aCBHUlhFUiAqLworCQkJCQl9OworCQkJCQlwaW5jdHJsX3B3bTBfcHdtbDNfMTogcHdtMF9wd21sMy0xIHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0QgOCBBVDkxX1BFUklQSF9DIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogY29uZmxpY3RzIHdpdGggTUNJMF9EQTcgKi8KKwkJCQkJfTsKKwkJCQl9OworCiAJCQkJc3BpMCB7CiAJCQkJCXBpbmN0cmxfc3BpMDogc3BpMC0wIHsKIAkJCQkJCWF0bWVsLHBpbnMgPQpAQCAtNzQ5LDE4ICs4NDUsMjkgQEAKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCi0JCQkJY2xrMzJrOiBzbGNrIHsKLQkJCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkJbWFpbl9yY19vc2M6IG1haW5fcmNfb3NjIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluLXJjLW9zYyI7CiAJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcG1jPjsKKwkJCQkJaW50ZXJydXB0cyA9IDxBVDkxX1BNQ19NT1NDUkNTPjsKKwkJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwkJCQkJY2xvY2stYWNjdXJhY3kgPSA8NTAwMDAwMDA+OwogCQkJCX07CiAKLQkJCQltYWluOiBtYWluY2sgewotCQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtY2xrLW1haW4iOworCQkJCW1haW5fb3NjOiBtYWluX29zYyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstbWFpbi1vc2MiOwogCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnBtYz47CiAJCQkJCWludGVycnVwdHMgPSA8QVQ5MV9QTUNfTU9TQ1M+OwotCQkJCQljbG9ja3MgPSA8JmNsazMyaz47CisJCQkJCWNsb2NrcyA9IDwmbWFpbl94dGFsPjsKKwkJCQl9OworCisJCQkJbWFpbjogbWFpbmNrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluIjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwbWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPEFUOTFfUE1DX01PU0NTRUxTPjsKKwkJCQkJY2xvY2tzID0gPCZtYWluX3JjX29zYyAmbWFpbl9vc2M+OwogCQkJCX07CiAKIAkJCQlwbGxhOiBwbGxhY2sgewpAQCAtMTA4OSw2ICsxMTk2LDMyIEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCXNja2NAZmZmZmZlNTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1zY2tjIjsKKwkJCQlyZWcgPSA8MHhmZmZmZmU1MCAweDQ+OworCisJCQkJc2xvd19yY19vc2M6IHNsb3dfcmNfb3NjIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93LXJjLW9zYyI7CisJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwkJCQkJY2xvY2stYWNjdXJhY3kgPSA8NTAwMDAwMDA+OworCQkJCQlhdG1lbCxzdGFydHVwLXRpbWUtdXNlYyA9IDw3NT47CisJCQkJfTsKKworCQkJCXNsb3dfb3NjOiBzbG93X29zYyB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdy1vc2MiOworCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmc2xvd194dGFsPjsKKwkJCQkJYXRtZWwsc3RhcnR1cC10aW1lLXVzZWMgPSA8MTIwMDAwMD47CisJCQkJfTsKKworCQkJCWNsazMyazogc2xvd2NrIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93IjsKKwkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQljbG9ja3MgPSA8JnNsb3dfcmNfb3NjICZzbG93X29zYz47CisJCQkJfTsKKwkJCX07CisKIAkJCXJ0Y0BmZmZmZmViMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLXJ0YyI7CiAJCQkJcmVnID0gPDB4ZmZmZmZlYjAgMHgzMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeGNtLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeGNtLmR0c2kKaW5kZXggZjU1ZWQwNy4uYjBiMTMzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkM3hjbS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4Y20uZHRzaQpAQCAtMTgsNiArMTgsMTQgQEAKIAkJcmVnID0gPDB4MjAwMDAwMDAgMHgyMDAwMDAwMD47CiAJfTsKIAorCXNsb3dfeHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJfTsKKworCW1haW5feHRhbCB7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjAwMDAwMD47CisJfTsKKwogCWFoYiB7CiAJCWFwYiB7CiAJCQlzcGkwOiBzcGlAZjAwMDQwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkM3htYi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkM3htYi5kdHNpCmluZGV4IGRiYTczOWIuLjMwNmVlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4bWIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeG1iLmR0c2kKQEAgLTMyLDYgKzMyLDEwIEBACiAJCQkJfTsKIAkJCX07CiAKKwkJCXNzYzA6IHNzY0BmMDAwODAwMCB7CisJCQkJYXRtZWwsY2xrLWZyb20tcmstcGluOworCQkJfTsKKwogCQkJLyoKIAkJCSAqIGkyYzAgY29uZmxpY3RzIHdpdGggSVNJOgogCQkJICogZGlzYWJsZSBpdCB0byBhbGxvdyB0aGUgdXNlIG9mIElTSQpAQCAtMTU2LDcgKzE2MCw3IEBACiAJfTsKIAogCXNvdW5kIHsKLQkJY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQzZWstd204OTA0IjsKKwkJY29tcGF0aWJsZSA9ICJhdG1lbCxhc29jLXdtODkwNCI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wY2swX2FzX2F1ZGlvX21jaz47CiAKQEAgLTE2Niw5ICsxNzAsMTIgQEAKIAkJCSJIZWFkcGhvbmUgSmFjayIsICJIUE9VVFIiLAogCQkJIklOMkwiLCAiTGluZSBJbiBKYWNrIiwKIAkJCSJJTjJSIiwgIkxpbmUgSW4gSmFjayIsCisJCQkiTUlDQklBUyIsICJJTjFMIiwKIAkJCSJJTjFMIiwgIk1pYyI7CiAKIAkJYXRtZWwsc3NjLWNvbnRyb2xsZXIgPSA8JnNzYzA+OwogCQlhdG1lbCxhdWRpby1jb2RlYyA9IDwmd204OTA0PjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2g3M2EwLWt6bTlnLXJlZmVyZW5jZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cwppbmRleCBlYjg4ODZiLi5hOTkxNzFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cwpAQCAtMTQsNiArMTQsNyBAQAogL2R0cy12MS87CiAjaW5jbHVkZSAic2g3M2EwLmR0c2kiCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KIAogLyB7CkBAIC0xMTIsNDMgKzExMyw0MyBAQAogCiAJCWJhY2sta2V5IHsKIAkJCWdwaW9zID0gPCZwY2Y4NTc1IDggR1BJT19BQ1RJVkVfTE9XPjsKLQkJCWxpbnV4LGNvZGUgPSA8MTU4PjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0JBQ0s+OwogCQkJbGFiZWwgPSAiU1czIjsKIAkJfTsKIAogCQlyaWdodC1rZXkgewogCQkJZ3Bpb3MgPSA8JnBjZjg1NzUgOSBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwxMDY+OworCQkJbGludXgsY29kZSA9IDxLRVlfUklHSFQ+OwogCQkJbGFiZWwgPSAiU1cyLVIiOwogCQl9OwogCiAJCWxlZnQta2V5IHsKIAkJCWdwaW9zID0gPCZwY2Y4NTc1IDEwIEdQSU9fQUNUSVZFX0xPVz47Ci0JCQlsaW51eCxjb2RlID0gPDEwNT47CisJCQlsaW51eCxjb2RlID0gPEtFWV9MRUZUPjsKIAkJCWxhYmVsID0gIlNXMi1MIjsKIAkJfTsKIAogCQllbnRlci1rZXkgewogCQkJZ3Bpb3MgPSA8JnBjZjg1NzUgMTEgR1BJT19BQ1RJVkVfTE9XPjsKLQkJCWxpbnV4LGNvZGUgPSA8Mjg+OworCQkJbGludXgsY29kZSA9IDxLRVlfRU5URVI+OwogCQkJbGFiZWwgPSAiU1cyLVAiOwogCQl9OwogCiAJCXVwLWtleSB7CiAJCQlncGlvcyA9IDwmcGNmODU3NSAxMiBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwxMDM+OworCQkJbGludXgsY29kZSA9IDxLRVlfVVA+OwogCQkJbGFiZWwgPSAiU1cyLVUiOwogCQl9OwogCiAJCWRvd24ta2V5IHsKIAkJCWdwaW9zID0gPCZwY2Y4NTc1IDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0JCQlsaW51eCxjb2RlID0gPDEwOD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9ET1dOPjsKIAkJCWxhYmVsID0gIlNXMi1EIjsKIAkJfTsKIAogCQlob21lLWtleSB7CiAJCQlncGlvcyA9IDwmcGNmODU3NSAxNCBHUElPX0FDVElWRV9MT1c+OwotCQkJbGludXgsY29kZSA9IDwxMDI+OworCQkJbGludXgsY29kZSA9IDxLRVlfSE9NRT47CiAJCQlsYWJlbCA9ICJTVzEiOwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhLmR0c2kKaW5kZXggNTZmYzIxNC4uNDY3NmYyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2EuZHRzaQpAQCAtMTUsNyArMTUsOCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAotL2luY2x1ZGUvICJza2VsZXRvbi5kdHNpIgorI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcmVzZXQvYWx0cixyc3QtbWdyLmg+CiAKIC8gewogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNzUsNyArNzYsMTQgQEAKIAkJCXBkbWE6IHBkbWFAZmZlMDEwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzMwIiwgImFybSxwcmltZWNlbGwiOwogCQkJCXJlZyA9IDwweGZmZTAxMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDE4MCA0PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTA0IDQ+LAorCQkJCQkgICAgIDwwIDEwNSA0PiwKKwkJCQkJICAgICA8MCAxMDYgND4sCisJCQkJCSAgICAgPDAgMTA3IDQ+LAorCQkJCQkgICAgIDwwIDEwOCA0PiwKKwkJCQkJICAgICA8MCAxMDkgND4sCisJCQkJCSAgICAgPDAgMTEwIDQ+LAorCQkJCQkgICAgIDwwIDExMSA0PjsKIAkJCQkjZG1hLWNlbGxzID0gPDE+OwogCQkJCSNkbWEtY2hhbm5lbHMgPSA8OD47CiAJCQkJI2RtYS1yZXF1ZXN0cyA9IDwzMj47CkBAIC04NCw2ICs5MiwyMiBAQAogCQkJfTsKIAkJfTsKIAorCQljYW4wOiBjYW5AZmZjMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJib3NjaCxkX2NhbiI7CisJCQlyZWcgPSA8MHhmZmMwMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEzMSA0PiwgPDAgMTMyIDQ+LCA8MCAxMzMgND4sIDwwIDEzNCA0PjsKKwkJCWNsb2NrcyA9IDwmY2FuMF9jbGs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQljYW4xOiBjYW5AZmZjMDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJib3NjaCxkX2NhbiI7CisJCQlyZWcgPSA8MHhmZmMwMTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEzNSA0PiwgPDAgMTM2IDQ+LCA8MCAxMzcgND4sIDwwIDEzOCA0PjsKKwkJCWNsb2NrcyA9IDwmY2FuMV9jbGs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQljbGttZ3JAZmZkMDQwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiYWx0cixjbGstbWdyIjsKIAkJCQlyZWcgPSA8MHhmZmQwNDAwMCAweDEwMDA+OwpAQCAtMTI0LDcgKzE0OCw3IEBACiAJCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJCQkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLXBlcmlwLWNsayI7CiAJCQkJCQkJY2xvY2tzID0gPCZtYWluX3BsbD47Ci0JCQkJCQkJZml4ZWQtZGl2aWRlciA9IDwyPjsKKwkJCQkJCQlkaXYtcmVnID0gPDB4ZTAgMCA5PjsKIAkJCQkJCQlyZWcgPSA8MHg0OD47CiAJCQkJCQl9OwogCkBAIC0xMzIsNyArMTU2LDcgQEAKIAkJCQkJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQkJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2EtcGVyaXAtY2xrIjsKIAkJCQkJCQljbG9ja3MgPSA8Jm1haW5fcGxsPjsKLQkJCQkJCQlmaXhlZC1kaXZpZGVyID0gPDQ+OworCQkJCQkJCWRpdi1yZWcgPSA8MHhlNCAwIDk+OwogCQkJCQkJCXJlZyA9IDwweDRDPjsKIAkJCQkJCX07CiAKQEAgLTE0MCw3ICsxNjQsNyBAQAogCQkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCQkJCQljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1wZXJpcC1jbGsiOwogCQkJCQkJCWNsb2NrcyA9IDwmbWFpbl9wbGw+OwotCQkJCQkJCWZpeGVkLWRpdmlkZXIgPSA8ND47CisJCQkJCQkJZGl2LXJlZyA9IDwweGU4IDAgOT47CiAJCQkJCQkJcmVnID0gPDB4NTA+OwogCQkJCQkJfTsKIApAQCAtNDYwLDYgKzQ4NCw4IEBACiAJCQltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07LyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJY2xvY2tzID0gPCZlbWFjMF9jbGs+OwogCQkJY2xvY2stbmFtZXMgPSAic3RtbWFjZXRoIjsKKwkJCXJlc2V0cyA9IDwmcnN0IEVNQUMwX1JFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInN0bW1hY2V0aCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCkBAIC00NzIsOSArNDk4LDExMSBAQAogCQkJbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOy8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KIAkJCWNsb2NrcyA9IDwmZW1hYzFfY2xrPjsKIAkJCWNsb2NrLW5hbWVzID0gInN0bW1hY2V0aCI7CisJCQlyZXNldHMgPSA8JnJzdCBFTUFDMV9SRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJzdG1tYWNldGgiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAorCQlpMmMwOiBpMmNAZmZjMDQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwNDAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OworCQkJaW50ZXJydXB0cyA9IDwwIDE1OCAweDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMxOiBpMmNAZmZjMDUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwNTAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OworCQkJaW50ZXJydXB0cyA9IDwwIDE1OSAweDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMyOiBpMmNAZmZjMDYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwNjAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OworCQkJaW50ZXJydXB0cyA9IDwwIDE2MCAweDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMzOiBpMmNAZmZjMDcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CisJCQlyZWcgPSA8MHhmZmMwNzAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OworCQkJaW50ZXJydXB0cyA9IDwwIDE2MSAweDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlncGlvQGZmNzA4MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJcmVnID0gPDB4ZmY3MDgwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmcGVyX2Jhc2VfY2xrPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCWdwaW8wOiBncGlvLWNvbnRyb2xsZXJAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlzbnBzLG5yLWdwaW9zID0gPDI5PjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTY0IDQ+OworCQkJfTsKKwkJfTsKKworCQlncGlvQGZmNzA5MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJcmVnID0gPDB4ZmY3MDkwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmcGVyX2Jhc2VfY2xrPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlzbnBzLG5yLWdwaW9zID0gPDI5PjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTY1IDQ+OworCQkJfTsKKwkJfTsKKworCQlncGlvQGZmNzBhMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8iOworCQkJcmVnID0gPDB4ZmY3MGEwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmcGVyX2Jhc2VfY2xrPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCWdwaW8yOiBncGlvLWNvbnRyb2xsZXJAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvLXBvcnQiOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlzbnBzLG5yLWdwaW9zID0gPDI3PjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTY2IDQ+OworCQkJfTsKKwkJfTsKKwogCQlMMjogbDItY2FjaGVAZmZmZWYwMDAgewogCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOwogCQkJcmVnID0gPDB4ZmZmZWYwMDAgMHgxMDAwPjsKQEAgLTUwOCwyNCArNjM2LDMyIEBACiAJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKIAkJCWludGVycnVwdHMgPSA8MCAxNjcgND47CiAJCQlyZWcgPSA8MHhmZmMwODAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAidGltZXIiOwogCQl9OwogCiAJCXRpbWVyMTogdGltZXIxQGZmYzA5MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOwogCQkJaW50ZXJydXB0cyA9IDwwIDE2OCA0PjsKIAkJCXJlZyA9IDwweGZmYzA5MDAwIDB4MTAwMD47CisJCQljbG9ja3MgPSA8Jmw0X3NwX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJ0aW1lciI7CiAJCX07CiAKIAkJdGltZXIyOiB0aW1lcjJAZmZkMDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQlpbnRlcnJ1cHRzID0gPDAgMTY5IDQ+OwogCQkJcmVnID0gPDB4ZmZkMDAwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmb3NjMT47CisJCQljbG9jay1uYW1lcyA9ICJ0aW1lciI7CiAJCX07CiAKIAkJdGltZXIzOiB0aW1lcjNAZmZkMDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CiAJCQlpbnRlcnJ1cHRzID0gPDAgMTcwIDQ+OwogCQkJcmVnID0gPDB4ZmZkMDEwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmb3NjMT47CisJCQljbG9jay1uYW1lcyA9ICJ0aW1lciI7CiAJCX07CiAKIAkJdWFydDA6IHNlcmlhbDBAZmZjMDIwMDAgewpAQCAtNTM0LDYgKzY3MCw3IEBACiAJCQlpbnRlcnJ1cHRzID0gPDAgMTYyIDQ+OwogCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OwogCQl9OwogCiAJCXVhcnQxOiBzZXJpYWwxQGZmYzAzMDAwIHsKQEAgLTU0MiwxMyArNjc5LDU4IEBACiAJCQlpbnRlcnJ1cHRzID0gPDAgMTYzIDQ+OwogCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZsNF9zcF9jbGs+OwogCQl9OwogCi0JCXJzdG1nckBmZmQwNTAwMCB7CisJCXJzdDogcnN0bWdyQGZmZDA1MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiYWx0cixyc3QtbWdyIjsKIAkJCXJlZyA9IDwweGZmZDA1MDAwIDB4MTAwMD47CiAJCX07CiAKKwkJdXNicGh5MDogdXNicGh5QDAgeworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNiMDogdXNiQGZmYjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MyIjsKKwkJCXJlZyA9IDwweGZmYjAwMDAwIDB4ZmZmZj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTI1IDQ+OworCQkJY2xvY2tzID0gPCZ1c2JfbXBfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gIm90ZyI7CisJCQlwaHlzID0gPCZ1c2JwaHkwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjE6IHVzYkBmZmI0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjMiI7CisJCQlyZWcgPSA8MHhmZmI0MDAwMCAweGZmZmY+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyOCA0PjsKKwkJCWNsb2NrcyA9IDwmdXNiX21wX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJvdGciOworCQkJcGh5cyA9IDwmdXNicGh5MD47CisJCQlwaHktbmFtZXMgPSAidXNiMi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl3YXRjaGRvZzA6IHdhdGNoZG9nQGZmZDAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy13ZHQiOworCQkJcmVnID0gPDB4ZmZkMDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNzEgND47CisJCQljbG9ja3MgPSA8Jm9zYzE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl3YXRjaGRvZzE6IHdhdGNoZG9nQGZmZDAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy13ZHQiOworCQkJcmVnID0gPDB4ZmZkMDMwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNzIgND47CisJCQljbG9ja3MgPSA8Jm9zYzE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlzeXNtZ3I6IHN5c21nckBmZmQwODAwMCB7CiAJCQljb21wYXRpYmxlID0gImFsdHIsc3lzLW1nciIsICJzeXNjb24iOwogCQkJcmVnID0gPDB4ZmZkMDgwMDAgMHg0MDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWE1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhNS5kdHNpCmluZGV4IDZjODdiNzAuLjEyZDFjMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWE1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTUuZHRzaQpAQCAtMTUsNyArMTUsNyBAQAogICovCiAKIC9kdHMtdjEvOwotL2luY2x1ZGUvICJzb2NmcGdhLmR0c2kiCisjaW5jbHVkZSAic29jZnBnYS5kdHNpIgogCiAvIHsKIAlzb2MgewpAQCAtMzgsMzIgKzM4LDggQEAKIAkJCX07CiAJCX07CiAKLQkJc2VyaWFsMEBmZmMwMjAwMCB7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKLQkJfTsKLQotCQlzZXJpYWwxQGZmYzAzMDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwotCQl9OwotCiAJCXN5c21nckBmZmQwODAwMCB7CiAJCQljcHUxLXN0YXJ0LWFkZHIgPSA8MHhmZmQwODBjND47CiAJCX07Ci0KLQkJdGltZXIwQGZmYzA4MDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwotCQl9OwotCi0JCXRpbWVyMUBmZmMwOTAwMCB7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKLQkJfTsKLQotCQl0aW1lcjJAZmZkMDAwMDAgewotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKLQkJfTsKLQotCQl0aW1lcjNAZmZkMDEwMDAgewotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKLQkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWE1X3NvY2RrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWE1X3NvY2RrLmR0cwppbmRleCBhODdlZTFjLi5kNTMyZDE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhNV9zb2Nkay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTVfc29jZGsuZHRzCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCi0vaW5jbHVkZS8gInNvY2ZwZ2FfYXJyaWE1LmR0c2kiCisjaW5jbHVkZSAic29jZnBnYV9hcnJpYTUuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiQWx0ZXJhIFNPQ0ZQR0EgQXJyaWEgViBTb0MgRGV2ZWxvcG1lbnQgS2l0IjsKQEAgLTU5LDMgKzU5LDIyIEBACiAJcnhkdi1za2V3LXBzID0gPDA+OwogCXJ4Yy1za2V3LXBzID0gPDIwMDA+OwogfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJva2F5IjsKKworCWVlcHJvbUA1MSB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjMzIiOworCQlyZWcgPSA8MHg1MT47CisJCXBhZ2VzaXplID0gPDMyPjsKKwl9OworCisJcnRjQDY4IHsKKwkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJcmVnID0gPDB4Njg+OworCX07Cit9OworCismdXNiMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTUuZHRzaQppbmRleCBjYTQxYjBlLi5iZjUxMTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNS5kdHNpCkBAIC0xNiw3ICsxNiw3IEBACiAgKi8KIAogL2R0cy12MS87Ci0vaW5jbHVkZS8gInNvY2ZwZ2EuZHRzaSIKKyNpbmNsdWRlICJzb2NmcGdhLmR0c2kiCiAKIC8gewogCXNvYyB7CkBAIC00NSwzMCArNDUsNiBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCi0JCXRpbWVyMEBmZmMwODAwMCB7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKLQkJfTsKLQotCQl0aW1lcjFAZmZjMDkwMDAgewotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47Ci0JCX07Ci0KLQkJdGltZXIyQGZmZDAwMDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47Ci0JCX07Ci0KLQkJdGltZXIzQGZmZDAxMDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47Ci0JCX07Ci0KLQkJc2VyaWFsMEBmZmMwMjAwMCB7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKLQkJfTsKLQotCQlzZXJpYWwxQGZmYzAzMDAwIHsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwotCQl9OwotCiAJCXN5c21nckBmZmQwODAwMCB7CiAJCQljcHUxLXN0YXJ0LWFkZHIgPSA8MHhmZmQwODBjND47CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1X3NvY2RrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29jZGsuZHRzCmluZGV4IGFlMTZkOTcuLjQ1ZGUxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29jZGsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29jZGsuZHRzCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCi0vaW5jbHVkZS8gInNvY2ZwZ2FfY3ljbG9uZTUuZHRzaSIKKyNpbmNsdWRlICJzb2NmcGdhX2N5Y2xvbmU1LmR0c2kiCiAKIC8gewogCW1vZGVsID0gIkFsdGVyYSBTT0NGUEdBIEN5Y2xvbmUgViBTb0MgRGV2ZWxvcG1lbnQgS2l0IjsKQEAgLTUyLDMgKzUyLDIyIEBACiAJcnhkdi1za2V3LXBzID0gPDA+OwogCXJ4Yy1za2V3LXBzID0gPDIwMDA+OwogfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJva2F5IjsKKworCWVlcHJvbUA1MSB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjMzIiOworCQlyZWcgPSA8MHg1MT47CisJCXBhZ2VzaXplID0gPDMyPjsKKwl9OworCisJcnRjQDY4IHsKKwkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJcmVnID0gPDB4Njg+OworCX07Cit9OworCismdXNiMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29ja2l0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29ja2l0LmR0cwppbmRleCBiNzllMmEyLi5kMjZmMTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1X3NvY2tpdC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNV9zb2NraXQuZHRzCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCi0vaW5jbHVkZS8gInNvY2ZwZ2FfY3ljbG9uZTUuZHRzaSIKKyNpbmNsdWRlICJzb2NmcGdhX2N5Y2xvbmU1LmR0c2kiCiAKIC8gewogCW1vZGVsID0gIlRlcmFzaWMgU29Da2l0IjsKQEAgLTUyLDMgKzUyLDcgQEAKIAlyeGR2LXNrZXctcHMgPSA8MD47CiAJcnhjLXNrZXctcHMgPSA8MjAwMD47CiB9OworCismdXNiMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29jcmF0ZXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNV9zb2NyYXRlcy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4MTRiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTVfc29jcmF0ZXMuZHRzCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IFN0ZWZmZW4gVHJ1bXRyYXIgPHMudHJ1bXRyYXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAic29jZnBnYV9jeWNsb25lNS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJFQlYgU09DcmF0ZXMiOworCWNvbXBhdGlibGUgPSAiZWJ2LHNvY3JhdGVzIiwgImFsdHIsc29jZnBnYS1jeWNsb25lNSIsICJhbHRyLHNvY2ZwZ2EiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAiOworCX07CisKKwltZW1vcnkgeworCQluYW1lID0gIm1lbW9yeSI7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47IC8qIDFHQiAqLworCX07Cit9OworCismZ21hYzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlydGM6IHJ0Y0A2OCB7CisJCWNvbXBhdGlibGUgPSAic3RtLG00MXQ4MiI7CisJCXJlZyA9IDwweDY4PjsKKwl9OworfTsKKworJm1tYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfdnQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV92dC5kdHMKaW5kZXggODdkNmY3NS4uMDk3OTJiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV92dC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV92dC5kdHMKQEAgLTE2LDcgKzE2LDcgQEAKICAqLwogCiAvZHRzLXYxLzsKLS9pbmNsdWRlLyAic29jZnBnYS5kdHNpIgorI2luY2x1ZGUgInNvY2ZwZ2EuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiQWx0ZXJhIFNPQ0ZQR0EgVlQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWNjdTk1NDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWNjdTk1NDAuZHRzCmluZGV4IDIyOTUwODcuLjY1MWM1NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1jY3U5NTQwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtY2N1OTU0MC5kdHMKQEAgLTM4LDggKzM4LDggQEAKIAkJCWFybSxwcmltZWNlbGwtcGVyaXBoaWQgPSA8MHgxMDQ4MDE4MD47CiAJCQltYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CiAJCQlidXMtd2lkdGggPSA8ND47Ci0JCQltbWMtY2FwLXNkLWhpZ2hzcGVlZDsKLQkJCW1tYy1jYXAtbW1jLWhpZ2hzcGVlZDsKKwkJCWNhcC1zZC1oaWdoc3BlZWQ7CisJCQljYXAtbW1jLWhpZ2hzcGVlZDsKIAkJCXZtbWMtc3VwcGx5ID0gPCZhYjg1MDBfbGRvX2F1eDNfcmVnPjsKIAogCQkJY2QtZ3Bpb3MgID0gPCZncGlvNyA2IDB4ND47IC8vIDIzMApAQCAtNjMsNyArNjMsNyBAQAogCQkJYXJtLHByaW1lY2VsbC1wZXJpcGhpZCA9IDwweDEwNDgwMTgwPjsKIAkJICAgICAgICBtYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CiAJCQlidXMtd2lkdGggPSA8OD47Ci0JCQltbWMtY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQljYXAtbW1jLWhpZ2hzcGVlZDsKIAkJCXZtbWMtc3VwcGx5ID0gPCZhYjg1MDBfbGRvX2F1eDJfcmVnPjsKIAogCQkJc3RhdHVzID0gIm9rYXkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWhyZWYuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ocmVmLmR0c2kKaW5kZXggNmNiOWI2OC4uYmY4ZjBlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWhyZWYuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtaHJlZi5kdHNpCkBAIC0xMTYsOCArMTE2LDE1IEBACiAJCQlhcm0scHJpbWVjZWxsLXBlcmlwaGlkID0gPDB4MTA0ODAxODA+OwogCQkJbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwogCQkJYnVzLXdpZHRoID0gPDQ+OwotCQkJbW1jLWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCQltbWMtY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQljYXAtc2QtaGlnaHNwZWVkOworCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQlzZC11aHMtc2RyMTI7CisJCQlzZC11aHMtc2RyMjU7CisJCQlmdWxsLXB3ci1jeWNsZTsKKwkJCXN0LHNpZy1kaXItZGF0MDsKKwkJCXN0LHNpZy1kaXItZGF0MjsKKwkJCXN0LHNpZy1kaXItY21kOworCQkJc3Qsc2lnLXBpbi1mYmNsazsKIAkJCXZtbWMtc3VwcGx5ID0gPCZhYjg1MDBfbGRvX2F1eDNfcmVnPjsKIAkJCXZxbW1jLXN1cHBseSA9IDwmdm1tY2k+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKQEAgLTEzMiw2ICsxMzksNyBAQAogCQkJYXJtLHByaW1lY2VsbC1wZXJpcGhpZCA9IDwweDEwNDgwMTgwPjsKIAkJCW1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKIAkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCW5vbi1yZW1vdmFibGU7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOwogCQkJcGluY3RybC0wID0gPCZzZGkxX2RlZmF1bHRfbW9kZT47CiAJCQlwaW5jdHJsLTEgPSA8JnNkaTFfc2xlZXBfbW9kZT47CkBAIC0xNDQsNyArMTUyLDkgQEAKIAkJCWFybSxwcmltZWNlbGwtcGVyaXBoaWQgPSA8MHgxMDQ4MDE4MD47CiAJCQltYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CiAJCQlidXMtd2lkdGggPSA8OD47Ci0JCQltbWMtY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQljYXAtbW1jLWhpZ2hzcGVlZDsKKwkJCW5vbi1yZW1vdmFibGU7CisJCQl2bW1jLXN1cHBseSA9IDwmZGI4NTAwX3ZzbXBzMl9yZWc+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKIAkJCXBpbmN0cmwtMCA9IDwmc2RpMl9kZWZhdWx0X21vZGU+OwogCQkJcGluY3RybC0xID0gPCZzZGkyX3NsZWVwX21vZGU+OwpAQCAtMTU3LDcgKzE2Nyw4IEBACiAJCQlhcm0scHJpbWVjZWxsLXBlcmlwaGlkID0gPDB4MTA0ODAxODA+OwogCQkgICAgICAgIG1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKIAkJCWJ1cy13aWR0aCA9IDw4PjsKLQkJCW1tYy1jYXAtbW1jLWhpZ2hzcGVlZDsKKwkJCWNhcC1tbWMtaGlnaHNwZWVkOworCQkJbm9uLXJlbW92YWJsZTsKIAkJCXZtbWMtc3VwcGx5ID0gPCZhYjg1MDBfbGRvX2F1eDJfcmVnPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CiAJCQlwaW5jdHJsLTAgPSA8JnNkaTRfZGVmYXVsdF9tb2RlPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaQppbmRleCA1YWNjMDQ0Li5kMzE2Yzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zdG44ODE1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstc3RuODgxNS5kdHNpCkBAIC04NDAsOCArODQwLDggQEAKIAkJCWludGVycnVwdHMgPSA8MjI+OwogCQkJbWF4LWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCQlidXMtd2lkdGggPSA8ND47Ci0JCQltbWMtY2FwLW1tYy1oaWdoc3BlZWQ7Ci0JCQltbWMtY2FwLXNkLWhpZ2hzcGVlZDsKKwkJCWNhcC1tbWMtaGlnaHNwZWVkOworCQkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJCWNkLWdwaW9zID0gPCZncGlvMyAxNSAweDE+OwogCQkJY2QtaW52ZXJ0ZWQ7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLXNub3diYWxsLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1zbm93YmFsbC5kdHMKaW5kZXggYTJmNjMyZC4uNDc0ZWY4MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1zbm93YmFsbC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLXNub3diYWxsLmR0cwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQlhcm0scHJpbWVjZWxsLXBlcmlwaGlkID0gPDB4MTA0ODAxODA+OwogCQkJbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwogCQkJYnVzLXdpZHRoID0gPDQ+OwotCQkJbW1jLWNhcC1tbWMtaGlnaHNwZWVkOworCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CiAJCQl2bW1jLXN1cHBseSA9IDwmYWI4NTAwX2xkb19hdXgzX3JlZz47CiAJCQl2cW1tYy1zdXBwbHkgPSA8JnZtbWNpPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJCWFybSxwcmltZWNlbGwtcGVyaXBoaWQgPSA8MHgxMDQ4MDE4MD47CiAJCSAgICAgICAgbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwogCQkJYnVzLXdpZHRoID0gPDg+OwotCQkJbW1jLWNhcC1tbWMtaGlnaHNwZWVkOworCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CiAJCQl2bW1jLXN1cHBseSA9IDwmYWI4NTAwX2xkb19hdXgyX3JlZz47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOwogCQkJcGluY3RybC0wID0gPCZzZGk0X2RlZmF1bHRfbW9kZT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtdTMwMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtdTMwMC5kdHMKaW5kZXggNmZlNjg4ZS4uODJhNjYxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLXUzMDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS11MzAwLmR0cwpAQCAtNDQyLDggKzQ0Miw4IEBACiAJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayIsICJtY2xrIjsKIAkJCW1heC1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OwogCQkJYnVzLXdpZHRoID0gPDQ+OyAvLyBTRC1jYXJkIHNsb3QKLQkJCW1tYy1jYXAtbW1jLWhpZ2hzcGVlZDsKLQkJCW1tYy1jYXAtc2QtaGlnaHNwZWVkOworCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQljYXAtc2QtaGlnaHNwZWVkOwogCQkJY2QtZ3Bpb3MgPSA8JmdwaW8gMTIgMHg0PjsKIAkJCWNkLWludmVydGVkOwogCQkJdm1tYy1zdXBwbHkgPSA8JmFiMzEwMF9sZG9fZ19yZWc+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1iMjEyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWIyMTIwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTY5ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1iMjEyMC5kdHMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgKFImRCkgTGltaXRlZC4KKyAqIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKy9kdHMtdjEvOworI2luY2x1ZGUgInN0aWg0MDcuZHRzaSIKKy8geworCW1vZGVsID0gIlNUaUg0MDcgQjIxMjAiOworCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1iMjEyMCIsICJzdCxzdGloNDA3IjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5QVMwLDExNTIwMCI7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJnNiY19zZXJpYWwwOworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHg0MDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJYWxpYXNlcyB7CisJCXR0eUFTMCA9ICZzYmNfc2VyaWFsMDsKKwl9OworCisJc29jIHsKKwkJc2JjX3NlcmlhbDA6IHNlcmlhbEA5NTMwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlsZWRzIHsKKwkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJCXJlZCB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJbGFiZWwgPSAiRnJvbnQgUGFuZWwgTEVEIjsKKwkJCQlncGlvcyA9IDwmcGlvNCAxIDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJfTsKKwkJCWdyZWVuIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlncGlvcyA9IDwmcGlvMSAzIDA+OworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCX07CisKKwkJaTJjQDk4NDIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0A5ODQzMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmNAOTg0NDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjQDk4NDUwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0A5NTQwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQkvKiBTU0MxMSB0byBIRE1JICovCisJCWkyY0A5NTQxMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCS8qIEhETUkgVjEuM2Egc3VwcG9ydHMgU3RhbmRhcmQgbW9kZSBvbmx5ICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJCXN0LGkyYy1taW4tc2NsLXB1bHNlLXdpZHRoLXVzID0gPDA+OworCQkJc3QsaTJjLW1pbi1zZGEtcHVsc2Utd2lkdGgtdXMgPSA8NT47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWNsb2NrLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWNsb2NrLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwZjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctY2xvY2suZHRzaQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyBSJkQgTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKy8geworCWNsb2NrcyB7CisJCS8qCisJCSAqIEZpeGVkIDMwTUh6IG9zY2lsbGF0b3IgaW5wdXRzIHRvIFNvQworCQkgKi8KKwkJY2xrX3N5c2luOiBjbGstc3lzaW4geworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MzAwMDAwMDA+OworCQl9OworCisJCS8qCisJCSAqIEFSTSBQZXJpcGhlcmFsIGNsb2NrIGZvciB0aW1lcnMKKwkJICovCisJCWFybV9wZXJpcGhfY2xrOiBhcm0tcGVyaXBoLWNsayB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2MDAwMDAwMDA+OworCQl9OworCisJCS8qCisJCSAqIEJvb3Rsb2FkZXIgaW5pdGlhbGl6ZWQgc3lzdGVtIGluZnJhc3RydWN0dXJlIGNsb2NrIGZvcgorCQkgKiBzZXJpYWwgZGV2aWNlcy4KKwkJICovCisJCWNsa19leHQyZl9hOTogY2xvY2tnZW4tYzBAMTMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1pY24tcmVnLTAiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LXBpbmN0cmwuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDI4NDRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1waW5jdHJsLmR0c2kKQEAgLTAsMCArMSw2MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIExpbWl0ZWQuCisgKiBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgInN0LXBpbmNmZy5oIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKy8geworCisJYWxpYXNlcyB7CisJCS8qIDAtNTogUElPX1NCQyAqLworCQlncGlvMCA9ICZwaW8wOworCQlncGlvMSA9ICZwaW8xOworCQlncGlvMiA9ICZwaW8yOworCQlncGlvMyA9ICZwaW8zOworCQlncGlvNCA9ICZwaW80OworCQlncGlvNSA9ICZwaW81OworCQkvKiAxMC0xOTogUElPX0ZST05UMCAqLworCQlncGlvNiA9ICZwaW8xMDsKKwkJZ3BpbzcgPSAmcGlvMTE7CisJCWdwaW84ID0gJnBpbzEyOworCQlncGlvOSA9ICZwaW8xMzsKKwkJZ3BpbzEwID0gJnBpbzE0OworCQlncGlvMTEgPSAmcGlvMTU7CisJCWdwaW8xMiA9ICZwaW8xNjsKKwkJZ3BpbzEzID0gJnBpbzE3OworCQlncGlvMTQgPSAmcGlvMTg7CisJCWdwaW8xNSA9ICZwaW8xOTsKKwkJLyogMjA6IFBJT19GUk9OVDEgKi8KKwkJZ3BpbzE2ID0gJnBpbzIwOworCQkvKiAzMC0zNTogUElPX1JFQVIgKi8KKwkJZ3BpbzE3ID0gJnBpbzMwOworCQlncGlvMTggPSAmcGlvMzE7CisJCWdwaW8xOSA9ICZwaW8zMjsKKwkJZ3BpbzIwID0gJnBpbzMzOworCQlncGlvMjEgPSAmcGlvMzQ7CisJCWdwaW8yMiA9ICZwaW8zNTsKKwkJLyogNDAtNDI6IFBJT19GTEFTSCAqLworCQlncGlvMjMgPSAmcGlvNDA7CisJCWdwaW8yNCA9ICZwaW80MTsKKwkJZ3BpbzI1ID0gJnBpbzQyOworCX07CisKKwlzb2MgeworCQlwaW4tY29udHJvbGxlci1zYmMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1zYmMtcGluY3RybCI7CisJCQlzdCxzeXNjZmcgPSA8JnN5c2NmZ19zYmM+OworCQkJcmVnID0gPDB4MDk2MWYwODAgMHg0PjsKKwkJCXJlZy1uYW1lcyA9ICJpcnFtdXgiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE4OCBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdHMtbmFtZXMgPSAiaXJxbXV4IjsKKwkJCXJhbmdlcyA9IDwwIDB4MDk2MTAwMDAgMHg2MDAwPjsKKworCQkJcGlvMDogZ3Bpb0AwOTYxMDAwMCB7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJcmVnID0gPDB4MCAweDEwMD47CisJCQkJc3QsYmFuay1uYW1lID0gIlBJTzAiOworCQkJfTsKKwkJCXBpbzE6IGdwaW9AMDk2MTEwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDEwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8xIjsKKwkJCX07CisJCQlwaW8yOiBncGlvQDA5NjEyMDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPMiI7CisJCQl9OworCQkJcGlvMzogZ3Bpb0AwOTYxMzAwMCB7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJc3QsYmFuay1uYW1lID0gIlBJTzMiOworCQkJfTsKKwkJCXBpbzQ6IGdwaW9AMDk2MTQwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDQwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU80IjsKKwkJCX07CisKKwkJCXBpbzU6IGdwaW9AMDk2MTUwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDUwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU81IjsKKwkJCX07CisKKwkJCXJjIHsKKwkJCQlwaW5jdHJsX2lyOiBpcjAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCWlyID0gPCZwaW80IDAgQUxUMiBJTj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCS8qIFNCQ19BU0MwIC0gVUFSVDEwICovCisJCQlzYmNfc2VyaWFsMCB7CisJCQkJcGluY3RybF9zYmNfc2VyaWFsMDogc2JjX3NlcmlhbDAtMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJdHggPSA8JnBpbzMgNCBBTFQxIE9VVD47CisJCQkJCQlyeCA9IDwmcGlvMyA1IEFMVDEgSU4+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCQkJLyogU0JDX0FTQzEgLSBVQVJUMTEgKi8KKwkJCXNiY19zZXJpYWwxIHsKKwkJCQlwaW5jdHJsX3NiY19zZXJpYWwxOiBzYmNfc2VyaWFsMS0wIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQl0eCA9IDwmcGlvMiA2IEFMVDMgT1VUPjsKKwkJCQkJCXJ4ID0gPCZwaW8yIDcgQUxUMyBJTj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyYzEwIHsKKwkJCQlwaW5jdHJsX2kyYzEwX2RlZmF1bHQ6IGkyYzEwLWRlZmF1bHQgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXNkYSA9IDwmcGlvNCA2IEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW80IDUgQUxUMSBCSURJUj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyYzExIHsKKwkJCQlwaW5jdHJsX2kyYzExX2RlZmF1bHQ6IGkyYzExLWRlZmF1bHQgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXNkYSA9IDwmcGlvNSAxIEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW81IDAgQUxUMSBCSURJUj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWtleXNjYW4geworCQkJCXBpbmN0cmxfa2V5c2Nhbjoga2V5c2NhbiB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJa2V5aW4wID0gPCZwaW80IDAgQUxUNiBJTj47CisJCQkJCQlrZXlpbjEgPSA8JnBpbzQgNSBBTFQ0IElOPjsKKwkJCQkJCWtleWluMiA9IDwmcGlvMCA0IEFMVDIgSU4+OworCQkJCQkJa2V5aW4zID0gPCZwaW8yIDYgQUxUMiBJTj47CisKKwkJCQkJCWtleW91dDAgPSA8JnBpbzQgNiBBTFQ0IE9VVD47CisJCQkJCQlrZXlvdXQxID0gPCZwaW8xIDcgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MiA9IDwmcGlvMCA2IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDMgPSA8JnBpbzIgNyBBTFQyIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWdtYWMxIHsKKwkJCQkvKgorCQkJCSAqIEFsbW9zdCBhbGwgdGhlIGJvYXJkcyBiYXNlZCBvbiBTVGlINDA3IFNvQyBoYXZlIGFuIGVtYmVkZGVkCisJCQkJICogc3dpdGNoIHdoZXJlIHRoZSBtZGlvL21kYyBoYXZlIGJlZW4gdXNlZCBmb3IgbWFuYWdpbmcgdGhlIFNNSQorCQkJCSAqIGlmYWNlIHZpYSBJMkMuIEZvciB0aGlzIHJlYXNvbiB0aGVzZSBsaW5lcyBjYW4gYmUgYWxsb2NhdGVkCisJCQkJICogYnkgdXNpbmcgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gKGluIGNhc2Ugb2YgdGhlcmUgd2lsbCBiZSBhCisJCQkJICogc3RhbmRhcmQgUEhZIHRyYW5zY2VpdmVyIG9uLWJvYXJkKS4KKwkJCQkgKi8KKwkJCQlwaW5jdHJsX3JnbWlpMTogcmdtaWkxLTAgeworCQkJCQlzdCxwaW5zIHsKKworCQkJCQkJdHhkMCA9IDwmcGlvMCAwIEFMVDEgT1VUIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMSA9IDwmcGlvMCAxIEFMVDEgT1VUIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMiA9IDwmcGlvMCAyIEFMVDEgT1VUIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMyA9IDwmcGlvMCAzIEFMVDEgT1VUIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhlbiA9IDwmcGlvMCA1IEFMVDEgT1VUIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhjbGsgPSA8JnBpbzAgNiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJcnhkMCA9IDwmcGlvMSA0IEFMVDEgSU4gREVfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQxID0gPCZwaW8xIDUgQUxUMSBJTiBERV9JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDIgPSA8JnBpbzEgNiBBTFQxIElOIERFX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMyA9IDwmcGlvMSA3IEFMVDEgSU4gREVfSU8gMCBDTEtfQT47CisJCQkJCQlyeGR2ID0gPCZwaW8yIDAgQUxUMSBJTiBERV9JTyAwIENMS19BPjsKKwkJCQkJCXJ4Y2xrID0gPCZwaW8yIDIgQUxUMSBJTiBOSUNMSyA1MDAgQ0xLX0E+OworCQkJCQkJY2xrMTI1ID0gPCZwaW8zIDcgQUxUNCBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCXBoeWNsayA9IDwmcGlvMiAzIEFMVDQgT1VUIE5JQ0xLIDE3NTAgQ0xLX0I+OworCQkJCQl9OworCQkJCX07CisKKwkJCQlwaW5jdHJsX3JnbWlpMV9tZGlvOiByZ21paTEtbWRpbyB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJbWRpbyA9IDwmcGlvMSAwIEFMVDEgT1VUIEJZUEFTUyAwPjsKKwkJCQkJCW1kYyA9IDwmcGlvMSAxIEFMVDEgT1VUIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJbWRpbnQgPSA8JnBpbzEgMyBBTFQxIElOIEJZUEFTUyAwPjsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcGluY3RybF9taWkxOiBtaWkxIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQl0eGQwID0gPCZwaW8wIDAgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQxID0gPCZwaW8wIDEgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQyID0gPCZwaW8wIDIgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQzID0gPCZwaW8wIDMgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGVyID0gPCZwaW8wIDQgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGVuID0gPCZwaW8wIDUgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGNsayA9IDwmcGlvMCA2IEFMVDEgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQljb2wgPSA8JnBpbzAgNyBBTFQxIElOIEJZUEFTUyAxMDAwPjsKKworCQkJCQkJbWRpbyA9IDwmcGlvMSAwIEFMVDEgT1VUIEJZUEFTUyAxNTAwPjsKKwkJCQkJCW1kYyA9IDwmcGlvMSAxIEFMVDEgT1VUIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJY3JzID0gPCZwaW8xIDIgQUxUMSBJTiBCWVBBU1MgMTAwMD47CisJCQkJCQltZGludCA9IDwmcGlvMSAzIEFMVDEgSU4gQllQQVNTIDA+OworCQkJCQkJcnhkMCA9IDwmcGlvMSA0IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQxID0gPCZwaW8xIDUgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDIgPSA8JnBpbzEgNiBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMyA9IDwmcGlvMSA3IEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisKKwkJCQkJCXJ4ZHYgPSA8JnBpbzIgMCBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhfZXIgPSA8JnBpbzIgMSBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhjbGsgPSA8JnBpbzIgMiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJcGh5Y2xrID0gPCZwaW8yIDMgQUxUMSBPVVQgTklDTEsgMCBDTEtfQT47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCXB3bTEgeworCQkJCXBpbmN0cmxfcHdtMV9jaGFuMF9kZWZhdWx0OiBwd20xLTAtZGVmYXVsdCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJcHdtLW91dCA9IDwmcGlvMyAwIEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJCXBpbmN0cmxfcHdtMV9jaGFuMV9kZWZhdWx0OiBwd20xLTEtZGVmYXVsdCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJcHdtLW91dCA9IDwmcGlvNCA0IEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJCXBpbmN0cmxfcHdtMV9jaGFuMl9kZWZhdWx0OiBwd20xLTItZGVmYXVsdCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJcHdtLW91dCA9IDwmcGlvNCA2IEFMVDMgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJCXBpbmN0cmxfcHdtMV9jaGFuM19kZWZhdWx0OiBwd20xLTMtZGVmYXVsdCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJcHdtLW91dCA9IDwmcGlvNCA3IEFMVDMgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlwaW4tY29udHJvbGxlci1mcm9udDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1mcm9udC1waW5jdHJsIjsKKwkJCXN0LHN5c2NmZyA9IDwmc3lzY2ZnX2Zyb250PjsKKwkJCXJlZyA9IDwweDA5MjBmMDgwIDB4ND47CisJCQlyZWctbmFtZXMgPSAiaXJxbXV4IjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxODkgSVJRX1RZUEVfTk9ORT47CisJCQlpbnRlcnJ1cHRzLW5hbWVzID0gImlycW11eCI7CisJCQlyYW5nZXMgPSA8MCAweDA5MjAwMDAwIDB4MTAwMDA+OworCisJCQlwaW8xMDogcGlvQDA5MjAwMDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPMTAiOworCQkJfTsKKwkJCXBpbzExOiBwaW9AMDkyMDEwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDEwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8xMSI7CisJCQl9OworCQkJcGlvMTI6IHBpb0AwOTIwMjAwMCB7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQkJc3QsYmFuay1uYW1lID0gIlBJTzEyIjsKKwkJCX07CisJCQlwaW8xMzogcGlvQDA5MjAzMDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPMTMiOworCQkJfTsKKwkJCXBpbzE0OiBwaW9AMDkyMDQwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDQwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8xNCI7CisJCQl9OworCQkJcGlvMTU6IHBpb0AwOTIwNTAwMCB7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJcmVnID0gPDB4NTAwMCAweDEwMD47CisJCQkJc3QsYmFuay1uYW1lID0gIlBJTzE1IjsKKwkJCX07CisJCQlwaW8xNjogcGlvQDA5MjA2MDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHg2MDAwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPMTYiOworCQkJfTsKKwkJCXBpbzE3OiBwaW9AMDkyMDcwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDcwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8xNyI7CisJCQl9OworCQkJcGlvMTg6IHBpb0AwOTIwODAwMCB7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJcmVnID0gPDB4ODAwMCAweDEwMD47CisJCQkJc3QsYmFuay1uYW1lID0gIlBJTzE4IjsKKwkJCX07CisJCQlwaW8xOTogcGlvQDA5MjA5MDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHg5MDAwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPMTkiOworCQkJfTsKKworCQkJLyogQ29tbXMgKi8KKwkJCXNlcmlhbDAgeworCQkJCXBpbmN0cmxfc2VyaWFsMDogc2VyaWFsMC0wIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQl0eCA9IDwmcGlvMTcgMCBBTFQxIE9VVD47CisJCQkJCQlyeCA9IDwmcGlvMTcgMSBBTFQxIElOPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJc2VyaWFsMSB7CisJCQkJcGluY3RybF9zZXJpYWwxOiBzZXJpYWwxLTAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXR4ID0gPCZwaW8xNiAwIEFMVDEgT1VUPjsKKwkJCQkJCXJ4ID0gPCZwaW8xNiAxIEFMVDEgSU4+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQlzZXJpYWwyIHsKKwkJCQlwaW5jdHJsX3NlcmlhbDI6IHNlcmlhbDItMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJdHggPSA8JnBpbzE1IDAgQUxUMSBPVVQ+OworCQkJCQkJcnggPSA8JnBpbzE1IDEgQUxUMSBJTj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCW1tYzEgeworCQkJCXBpbmN0cmxfc2QxOiBzZDEtMCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJc2RfY2xrID0gPCZwaW8xOSAzIEFMVDUgQklESVIgTklDTEsgMCBDTEtfQj47CisJCQkJCQlzZF9jbWQgPSA8JnBpbzE5IDIgQUxUNSBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlzZF9kYXQwID0gPCZwaW8xOSA0IEFMVDUgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJc2RfZGF0MSA9IDwmcGlvMTkgNSBBTFQ1IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCXNkX2RhdDIgPSA8JnBpbzE5IDYgQUxUNSBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlzZF9kYXQzID0gPCZwaW8xOSA3IEFMVDUgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJc2RfbGVkID0gPCZwaW8xNiA2IEFMVDYgT1VUPjsKKwkJCQkJCXNkX3B3cmVuID0gPCZwaW8xNiA3IEFMVDYgT1VUPjsKKwkJCQkJCXNkX2NkID0gPCZwaW8xOSAwIEFMVDYgSU4+OworCQkJCQkJc2Rfd3AgPSA8JnBpbzE5IDEgQUxUNiBJTj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKworCQkJaTJjMCB7CisJCQkJcGluY3RybF9pMmMwX2RlZmF1bHQ6IGkyYzAtZGVmYXVsdCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJc2RhID0gPCZwaW8xMCA2IEFMVDIgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW8xMCA1IEFMVDIgQklESVI+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQlpMmMxIHsKKwkJCQlwaW5jdHJsX2kyYzFfZGVmYXVsdDogaTJjMS1kZWZhdWx0IHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlzZGEgPSA8JnBpbzExIDEgQUxUMiBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzExIDAgQUxUMiBCSURJUj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyYzIgeworCQkJCXBpbmN0cmxfaTJjMl9kZWZhdWx0OiBpMmMyLWRlZmF1bHQgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXNkYSA9IDwmcGlvMTUgNiBBTFQyIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMTUgNSBBTFQyIEJJRElSPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJaTJjMyB7CisJCQkJcGluY3RybF9pMmMzX2RlZmF1bHQ6IGkyYzMtZGVmYXVsdCB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJc2RhID0gPCZwaW8xOCA2IEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW8xOCA1IEFMVDEgQklESVI+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQlzcGkwIHsKKwkJCQlwaW5jdHJsX3NwaTBfZGVmYXVsdDogc3BpMC1kZWZhdWx0IHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQltdHNyID0gPCZwaW8xMiA2IEFMVDIgQklESVI+OworCQkJCQkJbXJzdCA9IDwmcGlvMTIgNyBBTFQyIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMTIgNSBBTFQyIEJJRElSPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlwaW4tY29udHJvbGxlci1mcm9udDEgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1mcm9udC1waW5jdHJsIjsKKwkJCXN0LHN5c2NmZyA9IDwmc3lzY2ZnX2Zyb250PjsKKwkJCXJlZyA9IDwweDA5MjFmMDgwIDB4ND47CisJCQlyZWctbmFtZXMgPSAiaXJxbXV4IjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxOTAgSVJRX1RZUEVfTk9ORT47CisJCQlpbnRlcnJ1cHRzLW5hbWVzID0gImlycW11eCI7CisJCQlyYW5nZXMgPSA8MCAweDA5MjEwMDAwIDB4MTAwMDA+OworCisJCQlwaW8yMDogcGlvQDA5MjEwMDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPMjAiOworCQkJfTsKKwkJfTsKKworCQlwaW4tY29udHJvbGxlci1yZWFyIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcmVhci1waW5jdHJsIjsKKwkJCXN0LHN5c2NmZyA9IDwmc3lzY2ZnX3JlYXI+OworCQkJcmVnID0gPDB4MDkyMmYwODAgMHg0PjsKKwkJCXJlZy1uYW1lcyA9ICJpcnFtdXgiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE5MSBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdHMtbmFtZXMgPSAiaXJxbXV4IjsKKwkJCXJhbmdlcyA9IDwwIDB4MDkyMjAwMDAgMHg2MDAwPjsKKworCQkJcGlvMzA6IGdwaW9AMDkyMjAwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8zMCI7CisJCQl9OworCQkJcGlvMzE6IGdwaW9AMDkyMjEwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDEwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8zMSI7CisJCQl9OworCQkJcGlvMzI6IGdwaW9AMDkyMjIwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8zMiI7CisJCQl9OworCQkJcGlvMzM6IGdwaW9AMDkyMjMwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8zMyI7CisJCQl9OworCQkJcGlvMzQ6IGdwaW9AMDkyMjQwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDQwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8zNCI7CisJCQl9OworCQkJcGlvMzU6IGdwaW9AMDkyMjUwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwweDUwMDAgMHgxMDA+OworCQkJCXN0LGJhbmstbmFtZSA9ICJQSU8zNSI7CisJCQl9OworCisJCQlpMmM0IHsKKwkJCQlwaW5jdHJsX2kyYzRfZGVmYXVsdDogaTJjNC1kZWZhdWx0IHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlzZGEgPSA8JnBpbzMwIDEgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzMwIDAgQUxUMSBCSURJUj47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyYzUgeworCQkJCXBpbmN0cmxfaTJjNV9kZWZhdWx0OiBpMmM1LWRlZmF1bHQgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXNkYSA9IDwmcGlvMzQgNCBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMzQgMyBBTFQxIEJJRElSPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJdXNiMyB7CisJCQkJcGluY3RybF91c2IzOiB1c2IzLTIgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCXVzYi1vYy1kZXRlY3QgPSA8JnBpbzM1IDQgQUxUMSBJTj47CisJCQkJCQl1c2ItcHdyLWVuYWJsZSA9IDwmcGlvMzUgNSBBTFQxIE9VVD47CisJCQkJCQl1c2ItdmJ1cy12YWxpZCA9IDwmcGlvMzUgNiBBTFQxIElOPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJcHdtMCB7CisJCQkJcGluY3RybF9wd20wX2NoYW4wX2RlZmF1bHQ6IHB3bTAtMC1kZWZhdWx0IHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlwd20tb3V0ID0gPCZwaW8zMSAxIEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlwaW4tY29udHJvbGxlci1mbGFzaCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LWZsYXNoLXBpbmN0cmwiOworCQkJc3Qsc3lzY2ZnID0gPCZzeXNjZmdfZmxhc2g+OworCQkJcmVnID0gPDB4MDkyM2YwODAgMHg0PjsKKwkJCXJlZy1uYW1lcyA9ICJpcnFtdXgiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE5MiBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdHMtbmFtZXMgPSAiaXJxbXV4IjsKKwkJCXJhbmdlcyA9IDwwIDB4MDkyMzAwMDAgMHgzMDAwPjsKKworCQkJcGlvNDA6IGdwaW9AMDkyMzAwMDAgeworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXJlZyA9IDwwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPNDAiOworCQkJfTsKKwkJCXBpbzQxOiBncGlvQDA5MjMxMDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgxMDAwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPNDEiOworCQkJfTsKKwkJCXBpbzQyOiBncGlvQDA5MjMyMDAwIHsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCQlzdCxiYW5rLW5hbWUgPSAiUElPNDIiOworCQkJfTsKKworCQkJbW1jMCB7CisJCQkJcGluY3RybF9tbWMwOiBtbWMwLTAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCWVtbWNfY2xrID0gPCZwaW80MCA2IEFMVDEgQklESVI+OworCQkJCQkJZW1tY19jbWQgPSA8JnBpbzQwIDcgQUxUMSBCSURJUl9QVT47CisJCQkJCQllbW1jX2QwID0gPCZwaW80MSAwIEFMVDEgQklESVJfUFU+OworCQkJCQkJZW1tY19kMSA9IDwmcGlvNDEgMSBBTFQxIEJJRElSX1BVPjsKKwkJCQkJCWVtbWNfZDIgPSA8JnBpbzQxIDIgQUxUMSBCSURJUl9QVT47CisJCQkJCQllbW1jX2QzID0gPCZwaW80MSAzIEFMVDEgQklESVJfUFU+OworCQkJCQkJZW1tY19kNCA9IDwmcGlvNDEgNCBBTFQxIEJJRElSX1BVPjsKKwkJCQkJCWVtbWNfZDUgPSA8JnBpbzQxIDUgQUxUMSBCSURJUl9QVT47CisJCQkJCQllbW1jX2Q2ID0gPCZwaW80MSA2IEFMVDEgQklESVJfUFU+OworCQkJCQkJZW1tY19kNyA9IDwmcGlvNDEgNyBBTFQxIEJJRElSX1BVPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDcuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDcuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjkwMjRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy5kdHNpCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyBMaW1pdGVkLgorICogQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlICJzdGloNDA3LWNsb2NrLmR0c2kiCisjaW5jbHVkZSAic3RpaDQwNy1waW5jdHJsLmR0c2kiCisvIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDA+OworCQl9OworCQljcHVAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCXJlZyA9IDwxPjsKKwkJfTsKKwl9OworCisJaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMDg3NjEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCXJlZyA9IDwweDA4NzYxMDAwIDB4MTAwMD4sIDwweDA4NzYwMTAwIDB4MTAwPjsKKwl9OworCisJc2N1QDA4NzYwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXNjdSI7CisJCXJlZyA9IDwweDA4NzYwMDAwIDB4MTAwMD47CisJfTsKKworCXRpbWVyQDA4NzYwMjAwIHsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1nbG9iYWwtdGltZXIiOworCQlyZWcgPSA8MHgwODc2MDIwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1BQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZhcm1fcGVyaXBoX2Nsaz47CisJfTsKKworCWwyOiBjYWNoZS1jb250cm9sbGVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQlyZWcgPSA8MHgwODc2MjAwMCAweDEwMDA+OworCQlhcm0sZGF0YS1sYXRlbmN5ID0gPDMgMyAzPjsKKwkJYXJtLHRhZy1sYXRlbmN5ID0gPDIgMiAyPjsKKwkJY2FjaGUtdW5pZmllZDsKKwkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisJCXJhbmdlczsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKworCQlzeXNjZmdfc2JjOiBzYmMtc3lzY2ZnQDk2MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXNiYy1zeXNjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDk2MjAwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlzeXNjZmdfZnJvbnQ6IGZyb250LXN5c2NmZ0A5MjgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1mcm9udC1zeXNjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDkyODAwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlzeXNjZmdfcmVhcjogcmVhci1zeXNjZmdAOTI5MDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcmVhci1zeXNjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDkyOTAwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlzeXNjZmdfZmxhc2g6IGZsYXNoLXN5c2NmZ0A5MmEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1mbGFzaC1zeXNjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDkyYTAwMDAgMHgxMDAwPjsKKwkJfTsKKworCQlzeXNjZmdfc2JjX3JlZzogZnZkcC1saXRlLXN5c2NmZ0A5NjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1zYmMtcmVnLXN5c2NmZyIsICJzeXNjb24iOworCQkJcmVnID0gPDB4OTYwMDAwMCAweDEwMDA+OworCQl9OworCisJCXN5c2NmZ19jb3JlOiBjb3JlLXN5c2NmZ0A5MmIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1jb3JlLXN5c2NmZyIsICJzeXNjb24iOworCQkJcmVnID0gPDB4OTJiMDAwMCAweDEwMDA+OworCQl9OworCisJCXN5c2NmZ19scG06IGxwbS1zeXNjZmdAOTRiNTEwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctbHBtLXN5c2NmZyIsICJzeXNjb24iOworCQkJcmVnID0gPDB4OTRiNTEwMCAweDEwMDA+OworCQl9OworCisJCXNlcmlhbEA5ODMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsYXNjIjsKKwkJCXJlZyA9IDwweDk4MzAwMDAgMHgyYz47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIyIElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zZXJpYWwwPjsKKwkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZXJpYWxAOTgzMTAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGFzYyI7CisJCQlyZWcgPSA8MHg5ODMxMDAwIDB4MmM+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMyBJUlFfVFlQRV9OT05FPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc2VyaWFsMT47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsQDk4MzIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxhc2MiOworCQkJcmVnID0gPDB4OTgzMjAwMCAweDJjPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjQgSVJRX1RZUEVfTk9ORT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NlcmlhbDI+OworCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCS8qIFNCQ19BU0MwIC0gVUFSVDEwICovCisJCXNiY19zZXJpYWwwOiBzZXJpYWxAOTUzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGFzYyI7CisJCQlyZWcgPSA8MHg5NTMwMDAwIDB4MmM+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzOCBJUlFfVFlQRV9OT05FPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc2JjX3NlcmlhbDA+OworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbEA5NTMxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsYXNjIjsKKwkJCXJlZyA9IDwweDk1MzEwMDAgMHgyYz47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM5IElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zYmNfc2VyaWFsMT47CisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk4NDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnID0gPDB4OTg0MDAwMCAweDExMD47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzBfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk4NDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlyZWcgPSA8MHg5ODQxMDAwIDB4MTEwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzFfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk4NDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlyZWcgPSA8MHg5ODQyMDAwIDB4MTEwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzJfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk4NDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlyZWcgPSA8MHg5ODQzMDAwIDB4MTEwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzNfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk4NDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlyZWcgPSA8MHg5ODQ0MDAwIDB4MTEwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzRfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk4NDUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlyZWcgPSA8MHg5ODQ1MDAwIDB4MTEwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzVfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKworCQkvKiBTU0NzIG9uIFNCQyAqLworCQlpMmNAOTU0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKKwkJCXJlZyA9IDwweDk1NDAwMDAgMHgxMTA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKwkJCWNsb2NrLW5hbWVzID0gInNzYyI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMTBfZGVmYXVsdD47CisKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDk1NDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CisJCQlyZWcgPSA8MHg5NTQxMDAwIDB4MTEwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQljbG9jay1uYW1lcyA9ICJzc2MiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzExX2RlZmF1bHQ+OworCisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1iMjAwMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWIyMDAwLmR0cwppbmRleCBkNGFmNTMxLi5iZGZiZDM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWIyMDAwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWIyMDAwLmR0cwpAQCAtMTEsNSArMTEsNSBAQAogI2luY2x1ZGUgInN0aWg0MXgtYjIwMDAuZHRzaSIKIC8gewogCW1vZGVsID0gIlNUaUg0MTUgQjIwMDAgQm9hcmQiOwotCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNSIsICJzdCxzdGloNDE1LWIyMDAwIjsKKwljb21wYXRpYmxlID0gInN0LHN0aWg0MTUtYjIwMDAiLCAic3Qsc3RpaDQxNSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1iMjAyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWIyMDIwLmR0cwppbmRleCA0NDJiMDE5Li43MTkwM2E4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWIyMDIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWIyMDIwLmR0cwpAQCAtMTEsNSArMTEsNSBAQAogI2luY2x1ZGUgInN0aWg0MXgtYjIwMjAuZHRzaSIKIC8gewogCW1vZGVsID0gIlNUaUg0MTUgQjIwMjAgQm9hcmQiOwotCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNSIsICJzdCxzdGloNDE1LWIyMDIwIjsKKwljb21wYXRpYmxlID0gInN0LHN0aWg0MTUtYjIwMjAiLCAic3Qsc3RpaDQxNSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1jbG9jay5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1jbG9jay5kdHNpCmluZGV4IGQwNDdkYmMuLjNlZTM0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUtY2xvY2suZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LWNsb2NrLmR0c2kKQEAgLTUsNDggKzUsNTI5IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTUtY2xrcy5oPgorCiAvIHsKIAljbG9ja3MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKwogCQkvKgogCQkgKiBGaXhlZCAzME1IeiBvc2NpbGxhdG9yIGlucHV0IHRvIFNvQwogCQkgKi8KLQkJQ0xLX1NZU0lOOiBDTEtfU1lTSU4geworCQljbGtfc3lzaW46IGNsay1zeXNpbiB7CiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMDAwMDAwMD47CiAJCX07CiAKIAkJLyoKLQkJICogQVJNIFBlcmlwaGVyYWwgY2xvY2sgZm9yIHRpbWVycworCQkgKiBDbG9ja0dlbkFzIG9uIFNBU0cxCiAJCSAqLwotCQlhcm1fcGVyaXBoX2NsazogYXJtX3BlcmlwaF9jbGsgewotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDAwPjsKKwkJY2xvY2tnZW4tYUBmZWU2MjAwMCB7CisJCQlyZWcgPSA8MHhmZWU2MjAwMCAweGI0OD47CisKKwkJCWNsa19zX2EwX3BsbDogY2xrLXMtYTAtcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLXBsbHMtYzY1IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1hMC1wbGwwLWhzIiwKKwkJCQkJCSAgICAgImNsay1zLWEwLXBsbDAtbHMiLAorCQkJCQkJICAgICAiY2xrLXMtYTAtcGxsMSI7CisJCQl9OworCisJCQljbGtfc19hMF9vc2NfcHJlZGl2OiBjbGstcy1hMC1vc2MtcHJlZGl2IHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLXByZWRpdi1jNjUiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLXByZWRpdiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYTAtb3NjLXByZWRpdiI7CisJCQl9OworCisJCQljbGtfc19hMF9oczogY2xrLXMtYTAtaHMgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWM2NS1ocyIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYTBfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19zX2EwX3BsbCAwPiwgLyogUExMMCBIUyAqLworCQkJCQkgPCZjbGtfc19hMF9wbGwgMj47IC8qIFBMTDEgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1mZG1hLTAiLAorCQkJCQkJICAgICAiY2xrLXMtZmRtYS0xIiwKKwkJCQkJCSAgICAgIiI7IC8qIGNsay1zLWppdC1zZW5zZSAqLworCQkJCQkJICAgICAvKiBGb3VydGggb3V0cHV0IHVudXNlZCAqLworCQkJfTsKKworCQkJY2xrX3NfYTBfbHM6IGNsay1zLWEwLWxzIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jNjUtbHMiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2EwX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfc19hMF9wbGwgMT4sIC8qIFBMTDAgTFMgKi8KKwkJCQkJIDwmY2xrX3NfYTBfcGxsIDI+OyAvKiBQTEwxICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtaWNuLXJlZy0wIiwKKwkJCQkJCSAgICAgImNsay1zLWljbi1pZi0wIiwKKwkJCQkJCSAgICAgImNsay1zLWljbi1yZWctbHAtMCIsCisJCQkJCQkgICAgICJjbGstcy1lbWlzcyIsCisJCQkJCQkgICAgICJjbGstcy1ldGgxLXBoeSIsCisJCQkJCQkgICAgICJjbGstcy1taWktcmVmLW91dCI7CisJCQkJCQkgLyogUmVtYWluaW5nIG91dHB1dHMgdW51c2VkICovCisJCQl9OworCQl9OworCisJCWNsb2NrZ2VuLWFAZmVlODEwMDAgeworCQkJcmVnID0gPDB4ZmVlODEwMDAgMHhiNDg+OworCisJCQljbGtfc19hMV9wbGw6IGNsay1zLWExLXBsbCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1wbGxzLWM2NSI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYTEtcGxsMC1ocyIsCisJCQkJCQkgICAgICJjbGstcy1hMS1wbGwwLWxzIiwKKwkJCQkJCSAgICAgImNsay1zLWExLXBsbDEiOworCQkJfTsKKworCQkJY2xrX3NfYTFfb3NjX3ByZWRpdjogY2xrLXMtYTEtb3NjLXByZWRpdiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1wcmVkaXYtYzY1IiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1wcmVkaXYiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWExLW9zYy1wcmVkaXYiOworCQkJfTsKKworCQkJY2xrX3NfYTFfaHM6IGNsay1zLWExLWhzIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jNjUtaHMiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2ExX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfc19hMV9wbGwgMD4sIC8qIFBMTDAgSFMgKi8KKwkJCQkJIDwmY2xrX3NfYTFfcGxsIDI+OyAvKiBQTEwxICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiIiwgLyogUmVzZXJ2ZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFJlc2VydmVkICovCisJCQkJCQkgICAgICJjbGstcy1zdGFjLXBoeSIsCisJCQkJCQkgICAgICJjbGstcy12dGFjLXR4LXBoeSI7CisJCQl9OworCisJCQljbGtfc19hMV9sczogY2xrLXMtYTEtbHMgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWM2NS1scyIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19zX2ExX3BsbCAxPiwgLyogUExMMCBMUyAqLworCQkJCQkgPCZjbGtfc19hMV9wbGwgMj47IC8qIFBMTDEgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1pY24taWYtMiIsCisJCQkJCQkgICAgICJjbGstcy1jYXJkLW1tYyIsCisJCQkJCQkgICAgICJjbGstcy1pY24taWYtMSIsCisJCQkJCQkgICAgICJjbGstcy1nbWFjMC1waHkiLAorCQkJCQkJICAgICAiY2xrLXMtbmFuZC1jdHJsIiwKKwkJCQkJCSAgICAgIiIsIC8qIFJlc2VydmVkICovCisJCQkJCQkgICAgICJjbGstcy1taWkwLXJlZi1vdXQiLAorCQkJCQkJICAgICAiIjsgLyogY2xrLXMtc3RhYy1zeXMgKi8KKwkJCQkJCSAvKiBSZW1haW5pbmcgb3V0cHV0cyB1bnVzZWQgKi8KKwkJCX07CiAJCX07CiAKIAkJLyoKLQkJICogQm9vdGxvYWRlciBpbml0aWFsaXplZCBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgZm9yCi0JCSAqIHNlcmlhbCBkZXZpY2VzLgorCQkgKiBDbG9ja0dlbkFzIG9uIE1QRTQxCiAJCSAqLwotCQlDTEtTX0lDTl9SRUdfMDogQ0xLU19JQ05fUkVHXzAgewotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwkJY2xvY2tnZW4tYUBmZGUxMjAwMCB7CisJCQlyZWcgPSA8MHhmZGUxMjAwMCAweGI1MD47CisKKwkJCWNsa19tX2EwX3BsbDA6IGNsay1tLWEwLXBsbDAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHBsbHMtYzMyLWExeC0wIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTAtcGxsMC1waGkwIiwKKwkJCQkJCSAgICAgImNsay1tLWEwLXBsbDAtcGhpMSIsCisJCQkJCQkgICAgICJjbGstbS1hMC1wbGwwLXBoaTIiLAorCQkJCQkJICAgICAiY2xrLW0tYTAtcGxsMC1waGkzIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX3BsbDE6IGNsay1tLWEwLXBsbDEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHBsbHMtYzMyLWExeC0xIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTAtcGxsMS1waGkwIiwKKwkJCQkJCSAgICAgImNsay1tLWEwLXBsbDEtcGhpMSIsCisJCQkJCQkgICAgICJjbGstbS1hMC1wbGwxLXBoaTIiLAorCQkJCQkJICAgICAiY2xrLW0tYTAtcGxsMS1waGkzIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX29zY19wcmVkaXY6IGNsay1tLWEwLW9zYy1wcmVkaXYgeworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtcHJlZGl2LWMzMiIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtcHJlZGl2IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMC1vc2MtcHJlZGl2IjsKKwkJCX07CisKKwkJCWNsa19tX2EwX2RpdjA6IGNsay1tLWEwLWRpdjAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYwIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTBfcGxsMCAwPiwgLyogUExMMCBQSEkwICovCisJCQkJCSA8JmNsa19tX2EwX3BsbDEgMD47IC8qIFBMTDEgUEhJMCAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWFwYi1wbSIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0tcHAtZG11LTAiLAorCQkJCQkJICAgICAiY2xrLW0tcHAtZG11LTEiLAorCQkJCQkJICAgICAiY2xrLW0taWNtLWRpc3AiLAorCQkJCQkJICAgICAiIjsgLyogVW51c2VkICovCisJCQl9OworCisJCQljbGtfbV9hMF9kaXYxOiBjbGstbS1hMC1kaXYxIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jMzItb2RmMSIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX21fYTBfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19tX2EwX3BsbDAgMT4sIC8qIFBMTDAgUEhJMSAqLworCQkJCQkgPCZjbGtfbV9hMF9wbGwxIDE+OyAvKiBQTEwxIFBISTEgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0tYTktZXh0MmYiLAorCQkJCQkJICAgICAiY2xrLW0tc3Q0MHJ0IiwKKwkJCQkJCSAgICAgImNsay1tLXN0MjMxLWRtdS0wIiwKKwkJCQkJCSAgICAgImNsay1tLXN0MjMxLWRtdS0xIiwKKwkJCQkJCSAgICAgImNsay1tLXN0MjMxLWF1ZCIsCisJCQkJCQkgICAgICJjbGstbS1zdDIzMS1ncC0wIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX2RpdjI6IGNsay1tLWEwLWRpdjIgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTBfcGxsMCAyPiwgLyogUExMMCBQSEkyICovCisJCQkJCSA8JmNsa19tX2EwX3BsbDEgMj47IC8qIFBMTDEgUEhJMiAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLXN0MjMxLWdwLTEiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLWNwdSIsCisJCQkJCQkgICAgICJjbGstbS1pY24tc3RhYyIsCisJCQkJCQkgICAgICJjbGstbS1pY24tZG11LTAiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLWRtdS0xIiwKKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiOyAvKiBVbnVzZWQgKi8KKwkJCX07CisKKwkJCWNsa19tX2EwX2RpdjM6IGNsay1tLWEwLWRpdjMgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYzIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTBfcGxsMCAzPiwgLyogUExMMCBQSEkzICovCisJCQkJCSA8JmNsa19tX2EwX3BsbDEgMz47IC8qIFBMTDEgUEhJMyAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgImNsay1tLWljbi1lcmFtIiwKKwkJCQkJCSAgICAgImNsay1tLWE5LXRyYWNlIjsKKwkJCX07CiAJCX07CiAKLQkJQ0xLU19HTUFDMF9QSFk6IGNsb2NrZ2VuQTFANyB7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiQ0xLU19HTUFDMF9QSFkiOworCQljbG9ja2dlbi1hQGZkNmRiMDAwIHsKKwkJCXJlZyA9IDwweGZkNmRiMDAwIDB4YjUwPjsKKworCQkJY2xrX21fYTFfcGxsMDogY2xrLW0tYTEtcGxsMCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QscGxscy1jMzItYTF4LTAiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMS1wbGwwLXBoaTAiLAorCQkJCQkJICAgICAiY2xrLW0tYTEtcGxsMC1waGkxIiwKKwkJCQkJCSAgICAgImNsay1tLWExLXBsbDAtcGhpMiIsCisJCQkJCQkgICAgICJjbGstbS1hMS1wbGwwLXBoaTMiOworCQkJfTsKKworCQkJY2xrX21fYTFfcGxsMTogY2xrLW0tYTEtcGxsMSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QscGxscy1jMzItYTF4LTEiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMS1wbGwxLXBoaTAiLAorCQkJCQkJICAgICAiY2xrLW0tYTEtcGxsMS1waGkxIiwKKwkJCQkJCSAgICAgImNsay1tLWExLXBsbDEtcGhpMiIsCisJCQkJCQkgICAgICJjbGstbS1hMS1wbGwxLXBoaTMiOworCQkJfTsKKworCQkJY2xrX21fYTFfb3NjX3ByZWRpdjogY2xrLW0tYTEtb3NjLXByZWRpdiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1wcmVkaXYtYzMyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1wcmVkaXYiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWExLW9zYy1wcmVkaXYiOworCQkJfTsKKworCQkJY2xrX21fYTFfZGl2MDogY2xrLW0tYTEtZGl2MCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzMyLW9kZjAiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19tX2ExX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfbV9hMV9wbGwwIDA+LCAvKiBQTEwwIFBISTAgKi8KKwkJCQkJIDwmY2xrX21fYTFfcGxsMSAwPjsgLyogUExMMSBQSEkwICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tZmRtYS0xMiIsCisJCQkJCQkgICAgICJjbGstbS1mZG1hLTEwIiwKKwkJCQkJCSAgICAgImNsay1tLWZkbWEtMTEiLAorCQkJCQkJICAgICAiY2xrLW0taHZhLWxtaSIsCisJCQkJCQkgICAgICJjbGstbS1wcm9jLXNjIiwKKwkJCQkJCSAgICAgImNsay1tLXRwIiwKKwkJCQkJCSAgICAgImNsay1tLWljbi1ncHUiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXZkcC0wIjsKKwkJCX07CisKKwkJCWNsa19tX2ExX2RpdjE6IGNsay1tLWExLWRpdjEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYxIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMV9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTFfcGxsMCAxPiwgLyogUExMMCBQSEkxICovCisJCQkJCSA8JmNsa19tX2ExX3BsbDEgMT47IC8qIFBMTDEgUEhJMSAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWljbi12ZHAtMSIsCisJCQkJCQkgICAgICJjbGstbS1pY24tdmRwLTIiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXZkcC0zIiwKKwkJCQkJCSAgICAgImNsay1tLXBydi10MS1idXMiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXZkcC00IiwKKwkJCQkJCSAgICAgImNsay1tLWljbi1yZWctMTAiLAorCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiOyAvKiBjbGstbS1pY24tc3QyMzEgKi8KKwkJCX07CisKKwkJCWNsa19tX2ExX2RpdjI6IGNsay1tLWExLWRpdjIgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMV9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTFfcGxsMCAyPiwgLyogUExMMCBQSEkyICovCisJCQkJCSA8JmNsa19tX2ExX3BsbDEgMj47IC8qIFBMTDEgUEhJMiAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWZ2ZHAtcHJvYy1hbHQiLAorCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIjsgLyogVW51c2VkICovCisJCQl9OworCisJCQljbGtfbV9hMV9kaXYzOiBjbGstbS1hMS1kaXYzIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jMzItb2RmMyIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX21fYTFfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19tX2ExX3BsbDAgMz4sIC8qIFBMTDAgUEhJMyAqLworCQkJCQkgPCZjbGtfbV9hMV9wbGwxIDM+OyAvKiBQTEwxIFBISTMgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiI7IC8qIFVudXNlZCAqLworCQkJfTsKIAkJfTsKIAotCQlDTEtTX0VUSDFfUEhZOiBjbG9ja2dlbkEwQDcgeworCQljbGtfbV9hOV9leHQyZl9kaXYyOiBjbGstbS1hOS1leHQyZi1kaXYyIHsKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKLQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJDTEtTX0VUSDFfUEhZIjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJCWNsb2NrcyA9IDwmY2xrX21fYTBfZGl2MSAyPjsKKwkJCWNsb2NrLWRpdiA9IDwyPjsKKwkJCWNsb2NrLW11bHQgPSA8MT47CisJCX07CisKKwkJY2xvY2tnZW4tYUBmZDM0NTAwMCB7CisJCQlyZWcgPSA8MHhmZDM0NTAwMCAweGI1MD47CisKKwkJCWNsa19tX2EyX3BsbDA6IGNsay1tLWEyLXBsbDAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHBsbHMtYzMyLWExeC0wIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTItcGxsMC1waGkwIiwKKwkJCQkJCSAgICAgImNsay1tLWEyLXBsbDAtcGhpMSIsCisJCQkJCQkgICAgICJjbGstbS1hMi1wbGwwLXBoaTIiLAorCQkJCQkJICAgICAiY2xrLW0tYTItcGxsMC1waGkzIjsKKwkJCX07CisKKwkJCWNsa19tX2EyX3BsbDE6IGNsay1tLWEyLXBsbDEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHBsbHMtYzMyLWExeC0xIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTItcGxsMS1waGkwIiwKKwkJCQkJCSAgICAgImNsay1tLWEyLXBsbDEtcGhpMSIsCisJCQkJCQkgICAgICJjbGstbS1hMi1wbGwxLXBoaTIiLAorCQkJCQkJICAgICAiY2xrLW0tYTItcGxsMS1waGkzIjsKKwkJCX07CisKKwkJCWNsa19tX2EyX29zY19wcmVkaXY6IGNsay1tLWEyLW9zYy1wcmVkaXYgeworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtcHJlZGl2LWMzMiIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtcHJlZGl2IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMi1vc2MtcHJlZGl2IjsKKwkJCX07CisKKwkJCWNsa19tX2EyX2RpdjA6IGNsay1tLWEyLWRpdjAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYwIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMl9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTJfcGxsMCAwPiwgLyogUExMMCBQSEkwICovCisJCQkJCSA8JmNsa19tX2EyX3BsbDEgMD47IC8qIFBMTDEgUEhJMCAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLXZ0YWMtbWFpbi1waHkiLAorCQkJCQkJICAgICAiY2xrLW0tdnRhYy1hdXgtcGh5IiwKKwkJCQkJCSAgICAgImNsay1tLXN0YWMtcGh5IiwKKwkJCQkJCSAgICAgImNsay1tLXN0YWMtc3lzIiwKKwkJCQkJCSAgICAgIiIsIC8qIGNsay1tLW1wZXN0YWMtcGcgKi8KKwkJCQkJCSAgICAgIiIsIC8qIGNsay1tLW1wZXN0YWMtd2MgKi8KKwkJCQkJCSAgICAgIiIsIC8qIGNsay1tLW1wZXZ0YWNhdXgtcGcqLworCQkJCQkJICAgICAiIjsgLyogY2xrLW0tbXBldnRhY21haW4tcGcqLworCQkJfTsKKworCQkJY2xrX21fYTJfZGl2MTogY2xrLW0tYTItZGl2MSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzMyLW9kZjEiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19tX2EyX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfbV9hMl9wbGwwIDE+LCAvKiBQTEwwIFBISTEgKi8KKwkJCQkJIDwmY2xrX21fYTJfcGxsMSAxPjsgLyogUExMMSBQSEkxICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiIiwgLyogY2xrLW0tbXBldnRhY3J4MC13YyAqLworCQkJCQkJICAgICAiIiwgLyogY2xrLW0tbXBldnRhY3J4MS13YyAqLworCQkJCQkJICAgICAiY2xrLW0tY29tcG8tbWFpbiIsCisJCQkJCQkgICAgICJjbGstbS1jb21wby1hdXgiLAorCQkJCQkJICAgICAiY2xrLW0tYmRpc3AtMCIsCisJCQkJCQkgICAgICJjbGstbS1iZGlzcC0xIiwKKwkJCQkJCSAgICAgImNsay1tLWljbi1iZGlzcC0wIiwKKwkJCQkJCSAgICAgImNsay1tLWljbi1iZGlzcC0xIjsKKwkJCX07CisKKwkJCWNsa19tX2EyX2RpdjI6IGNsay1tLWEyLWRpdjIgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMl9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTJfcGxsMCAyPiwgLyogUExMMCBQSEkyICovCisJCQkJCSA8JmNsa19tX2EyX3BsbDEgMj47IC8qIFBMTDEgUEhJMiAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIiIsIC8qIGNsay1tLWljbi1ocXZkcDAgKi8KKwkJCQkJCSAgICAgIiIsIC8qIGNsay1tLWljbi1ocXZkcDEgKi8KKwkJCQkJCSAgICAgImNsay1tLWljbi1jb21wbyIsCisJCQkJCQkgICAgICIiLCAvKiBjbGstbS1pY24tdmRwYXV4ICovCisJCQkJCQkgICAgICJjbGstbS1pY24tdHMiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXJlZy1scC0xMCIsCisJCQkJCQkgICAgICJjbGstbS1kY2VwaHktaW1wY3RybCIsCisJCQkJCQkgICAgICIiOyAvKiBVbnVzZWQgKi8KKwkJCX07CisKKwkJCWNsa19tX2EyX2RpdjM6IGNsay1tLWEyLWRpdjMgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYzIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMl9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTJfcGxsMCAzPiwgLyogUExMMCBQSEkzICovCisJCQkJCSA8JmNsa19tX2EyX3BsbDEgMz47IC8qIFBMTDEgUEhJMyAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIiI7IC8qIFVudXNlZCAqLworCQkJCQkJLyogUmVtYWluaW5nIG91dHB1dHMgdW51c2VkICovCisJCQl9OworCQl9OworCisJCS8qCisJCSAqIEE5IFBMTAorCQkgKi8KKwkJY2xvY2tnZW4tYTlAZmRkZTAwZDggeworCQkJcmVnID0gPDB4ZmRkZTAwZDggMHg3MD47CisKKwkJCWNsb2NrZ2VuX2E5X3BsbDogY2xvY2tnZW4tYTktcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE1LXBsbHMtYzMyLWE5IiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsb2NrZ2VuLWE5LXBsbC1vZGYiOworCQkJfTsKKwkJfTsKKworCQkvKgorCQkgKiBBUk0gQ1BVIHJlbGF0ZWQgY2xvY2tzCisJCSAqLworCQljbGtfbV9hOTogY2xrLW0tYTlAZmRkZTAwZDggeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE1LWNsa2dlbi1hOS1tdXgiLCAic3QsY2xrZ2VuLW11eCI7CisJCQlyZWcgPSA8MHhmZGRlMDBkOCAweDQ+OworCQkJY2xvY2tzID0gPCZjbG9ja2dlbl9hOV9wbGwgMD4sCisJCQkJIDwmY2xvY2tnZW5fYTlfcGxsIDA+LAorCQkJCSA8JmNsa19tX2EwX2RpdjEgMj4sCisJCQkJIDwmY2xrX21fYTlfZXh0MmZfZGl2Mj47CisJCX07CisKKwkJLyoKKwkJICogQVJNIFBlcmlwaGVyYWwgY2xvY2sgZm9yIHRpbWVycworCQkgKi8KKwkJYXJtX3BlcmlwaF9jbGs6IGNsay1tLWE5LXBlcmlwaHMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQkJY2xvY2tzID0gPCZjbGtfbV9hOT47CisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS1waW5jdHJsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaQppbmRleCA4MWRmODcwLi44NTA5YTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaQpAQCAtMTAyLDYgKzEwMiwyMiBAQAogCQkJCX07CiAJCQl9OwogCisJCQlrZXlzY2FuIHsKKwkJCQlwaW5jdHJsX2tleXNjYW46IGtleXNjYW4geworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCWtleWluMCA9IDwmUElPMCAyIEFMVDIgSU4+OworCQkJCQkJa2V5aW4xID0gPCZQSU8wIDMgQUxUMiBJTj47CisJCQkJCQlrZXlpbjIgPSA8JlBJTzAgNCBBTFQyIElOPjsKKwkJCQkJCWtleWluMyA9IDwmUElPMiA2IEFMVDIgSU4+OworCisJCQkJCQlrZXlvdXQwID0gPCZQSU8xIDYgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MSA9IDwmUElPMSA3IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDIgPSA8JlBJTzAgNiBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQzID0gPCZQSU8yIDcgQUxUMiBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCiAJCQlzYmNfaTJjMCB7CiAJCQkJcGluY3RybF9zYmNfaTJjMF9kZWZhdWx0OiBzYmNfaTJjMC1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kKaW5kZXggZDg5MDY0Yy4uZDZmMjU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUuZHRzaQpAQCAtODIsNyArODIsNyBAQAogCQkJaW50ZXJydXB0cwk9IDwwIDE5NyAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgCT0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wIAk9IDwmcGluY3RybF9zZXJpYWwyPjsKLQkJCWNsb2NrcwkJPSA8JkNMS1NfSUNOX1JFR18wPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zX2EwX2xzIENMS19JQ05fUkVHPjsKIAkJfTsKIAogCQkvKiBTQkMgY29tbXMgYmxvY2sgQVNDcyBpbiBTQVNHMSAqLwpAQCAtOTEsNyArOTEsNyBAQAogCQkJc3RhdHVzIAkJPSAiZGlzYWJsZWQiOwogCQkJcmVnCQk9IDwweGZlNTMxMDAwIDB4MmM+OwogCQkJaW50ZXJydXB0cwk9IDwwIDIxMCAwPjsKLQkJCWNsb2NrcwkJPSA8JkNMS19TWVNJTj47CisJCQljbG9ja3MJCT0gPCZjbGtfc3lzaW4+OwogCQkJcGluY3RybC1uYW1lcyAJPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfc2JjX3NlcmlhbDE+OwogCQl9OwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCQljb21wYXRpYmxlCT0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZwkJPSA8MHhmZWQ0MDAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMTg3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzCQk9IDwmQ0xLU19JQ05fUkVHXzA+OworCQkJY2xvY2tzCQk9IDwmY2xrX3NfYTBfbHMgQ0xLX0lDTl9SRUc+OwogCQkJY2xvY2stbmFtZXMJPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcwk9ICJkZWZhdWx0IjsKQEAgLTExMyw3ICsxMTMsNyBAQAogCQkJY29tcGF0aWJsZQk9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlyZWcJCT0gPDB4ZmVkNDEwMDAgMHgxMTA+OwogCQkJaW50ZXJydXB0cwk9IDxHSUNfU1BJIDE4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcwkJPSA8JkNMS1NfSUNOX1JFR18wPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zX2EwX2xzIENMS19JQ05fUkVHPjsKIAkJCWNsb2NrLW5hbWVzCT0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CkBAIC0xMjYsNyArMTI2LDcgQEAKIAkJCWNvbXBhdGlibGUJPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnCQk9IDwweGZlNTQwMDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMJPSA8R0lDX1NQSSAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MJCT0gPCZDTEtfU1lTSU4+OworCQkJY2xvY2tzCQk9IDwmY2xrX3N5c2luPjsKIAkJCWNsb2NrLW5hbWVzCT0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CkBAIC0xMzksNyArMTM5LDcgQEAKIAkJCWNvbXBhdGlibGUJPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnCQk9IDwweGZlNTQxMDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMJPSA8R0lDX1NQSSAyMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MJCT0gPCZDTEtfU1lTSU4+OworCQkJY2xvY2tzCQk9IDwmY2xrX3N5c2luPjsKIAkJCWNsb2NrLW5hbWVzCT0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJCXBpbmN0cmwtbmFtZXMgCT0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wCT0gPCZwaW5jdHJsX21paTA+OwogCQkJY2xvY2stbmFtZXMJPSAic3RtbWFjZXRoIjsKLQkJCWNsb2NrcwkJPSA8JkNMS1NfR01BQzBfUEhZPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zX2ExX2xzIENMS19HTUFDMF9QSFk+OwogCQl9OwogCiAJCWV0aGVybmV0MTogZHdtYWNAZmVmMDgwMDAgewpAQCAtMTkzLDE4ICsxOTMsMzAgQEAKIAkJCXBpbmN0cmwtbmFtZXMgCT0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wCT0gPCZwaW5jdHJsX21paTE+OwogCQkJY2xvY2stbmFtZXMJPSAic3RtbWFjZXRoIjsKLQkJCWNsb2NrcwkJPSA8JkNMS1NfRVRIMV9QSFk+OworCQkJY2xvY2tzCQk9IDwmY2xrX3NfYTBfbHMgQ0xLX0VUSDFfUEhZPjsKIAkJfTsKIAogCQlyYzogcmNAZmU1MTgwMDAgewogCQkJY29tcGF0aWJsZQk9ICJzdCxjb21tcy1pcmIiOwogCQkJcmVnCQk9IDwweGZlNTE4MDAwIDB4MjM0PjsKIAkJCWludGVycnVwdHMJPSAgPDAgMjAzIDA+OwotCQkJY2xvY2tzCQk9IDwmQ0xLX1NZU0lOPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zeXNpbj47CiAJCQlyeC1tb2RlCQk9ICJpbmZyYXJlZCI7CiAJCQlwaW5jdHJsLW5hbWVzIAk9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMAk9IDwmcGluY3RybF9pcj47CiAJCQlyZXNldHMJCT0gPCZzb2Z0cmVzZXQgU1RJSDQxNV9JUkJfU09GVFJFU0VUPjsKIAkJfTsKKworCQlrZXlzY2FuOiBrZXlzY2FuQGZlNGIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpLWtleXNjYW4iOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCXJlZyA9IDwweGZlNGIwMDAwIDB4MjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjEyIElSUV9UWVBFX05PTkU+OworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9rZXlzY2FuPjsKKwkJCXJlc2V0cwk9IDwmcG93ZXJkb3duIFNUSUg0MTVfS0VZU0NBTl9QT1dFUkRPV04+LAorCQkJCSAgPCZzb2Z0cmVzZXQgU1RJSDQxNV9LRVlTQ0FOX1NPRlRSRVNFVD47CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMDAuZHRzCmluZGV4IGE1ZWI2ZWUuLjQ4OGU4MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMDAuZHRzCkBAIC05LDggKzksNyBAQAogL2R0cy12MS87CiAjaW5jbHVkZSAic3RpaDQxNi5kdHNpIgogI2luY2x1ZGUgInN0aWg0MXgtYjIwMDAuZHRzaSIKLQogLyB7Ci0JY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2IiwgInN0LHN0aWg0MTYtYjIwMDAiOwogCW1vZGVsID0gIlNUaUg0MTYgQjIwMDAiOworCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1iMjAwMCIsICJzdCxzdGloNDE2IjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwLXJldkUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMC1yZXZFLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBmYTJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMC1yZXZFLmR0cwpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyAoUiZEKSBMaW1pdGVkLgorICogQXV0aG9yOiBMZWUgSm9uZXMgPGxlZS5qb25lc0BsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisvZHRzLXYxLzsKKyNpbmNsdWRlICJzdGloNDE2LmR0c2kiCisjaW5jbHVkZSAic3RpaDQxeC1iMjAyMC5kdHNpIgorLyB7CisJbW9kZWwgPSAiU1RpSDQxNiBCMjAyMCBSRVYtRSI7CisJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LWIyMDIwIiwgInN0LHN0aWg0MTYiOworCisJc29jIHsKKwkJbGVkcyB7CisJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCQlyZWQgeworCQkJCSNncGlvLWNlbGxzCQk9IDwxPjsKKwkJCQlsYWJlbAkJCT0gIkZyb250IFBhbmVsIExFRCI7CisJCQkJZ3Bpb3MJCQk9IDwmUElPNCAxPjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIJPSAiaGVhcnRiZWF0IjsKKwkJCX07CisJCQlncmVlbiB7CisJCQkJZ3Bpb3MJCQk9IDwmUElPMSAzPjsKKwkJCQlkZWZhdWx0LXN0YXRlIAkJPSAib2ZmIjsKKwkJCX07CisJCX07CisKKwkJZXRoZXJuZXQxOiBkd21hY0BmZWYwODAwMCB7CisJCQlzbnBzLHJlc2V0LWdwaW8gPSA8JlBJTzAgNz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzCmluZGV4IDI3NmYyOGQuLjRlMmRmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjAuZHRzCkBAIC0xMSw2ICsxMSw1IEBACiAjaW5jbHVkZSAic3RpaDQxeC1iMjAyMC5kdHNpIgogLyB7CiAJbW9kZWwgPSAiU1RpSDQxNiBCMjAyMCI7Ci0JY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2IiwgInN0LHN0aWg0MTYtYjIwMjAiOwotCisJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LWIyMDIwIiwgInN0LHN0aWg0MTYiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtY2xvY2suZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtY2xvY2suZHRzaQppbmRleCBhNjk0MmM3Li41YjRmYjgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWNsb2NrLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1jbG9jay5kdHNpCkBAIC02LDUwICs2LDc1MSBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9zdGloNDE2LWNsa3MuaD4KKwogLyB7CiAJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKIAkJLyoKIAkJICogRml4ZWQgMzBNSHogb3NjaWxsYXRvciBpbnB1dHMgdG8gU29DCiAJCSAqLwotCQlDTEtfU1lTSU46IENMS19TWVNJTiB7CisJCWNsa19zeXNpbjogY2xrLXN5c2luIHsKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMwMDAwMDAwPjsKLQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJDTEtfU1lTSU4iOworCQl9OworCisJCS8qCisJCSAqIENsb2NrR2VuQXMgb24gU0FTRzIKKwkJICovCisJCWNsb2NrZ2VuLWFAZmVlNjIwMDAgeworCQkJcmVnID0gPDB4ZmVlNjIwMDAgMHhiNDg+OworCisJCQljbGtfc19hMF9wbGw6IGNsay1zLWEwLXBsbCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1wbGxzLWM2NSI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYTAtcGxsMC1ocyIsCisJCQkJCQkgICAgICJjbGstcy1hMC1wbGwwLWxzIiwKKwkJCQkJCSAgICAgImNsay1zLWEwLXBsbDEiOworCQkJfTsKKworCQkJY2xrX3NfYTBfb3NjX3ByZWRpdjogY2xrLXMtYTAtb3NjLXByZWRpdiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1wcmVkaXYtYzY1IiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1wcmVkaXYiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWEwLW9zYy1wcmVkaXYiOworCQkJfTsKKworCQkJY2xrX3NfYTBfaHM6IGNsay1zLWEwLWhzIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jNjUtaHMiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2EwX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfc19hMF9wbGwgMD4sIC8qIFBMTDAgSFMgKi8KKwkJCQkJIDwmY2xrX3NfYTBfcGxsIDI+OyAvKiBQTEwxICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZmRtYS0wIiwKKwkJCQkJCSAgICAgImNsay1zLWZkbWEtMSIsCisJCQkJCQkgICAgICIiOyAvKiBjbGstcy1qaXQtc2Vuc2UgKi8KKwkJCQkJCSAgICAgLyogRm91cnRoIG91dHB1dCB1bnVzZWQgKi8KKwkJCX07CisKKwkJCWNsa19zX2EwX2xzOiBjbGstcy1hMC1scyB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzY1LWxzIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX3NfYTBfcGxsIDE+LCAvKiBQTEwwIExTICovCisJCQkJCSA8JmNsa19zX2EwX3BsbCAyPjsgLyogUExMMSAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWljbi1yZWctMCIsCisJCQkJCQkgICAgICJjbGstcy1pY24taWYtMCIsCisJCQkJCQkgICAgICJjbGstcy1pY24tcmVnLWxwLTAiLAorCQkJCQkJICAgICAiY2xrLXMtZW1pc3MiLAorCQkJCQkJICAgICAiY2xrLXMtZXRoMS1waHkiLAorCQkJCQkJICAgICAiY2xrLXMtbWlpLXJlZi1vdXQiOworCQkJCQkJICAgICAvKiBSZW1haW5pbmcgb3V0cHV0cyB1bnVzZWQgKi8KKwkJCX07CisJCX07CisKKwkJY2xvY2tnZW4tYUBmZWU4MTAwMCB7CisJCQlyZWcgPSA8MHhmZWU4MTAwMCAweGI0OD47CisKKwkJCWNsa19zX2ExX3BsbDogY2xrLXMtYTEtcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLXBsbHMtYzY1IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1hMS1wbGwwLWhzIiwKKwkJCQkJCSAgICAgImNsay1zLWExLXBsbDAtbHMiLAorCQkJCQkJICAgICAiY2xrLXMtYTEtcGxsMSI7CisJCQl9OworCisJCQljbGtfc19hMV9vc2NfcHJlZGl2OiBjbGstcy1hMS1vc2MtcHJlZGl2IHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLXByZWRpdi1jNjUiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLXByZWRpdiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYTEtb3NjLXByZWRpdiI7CisJCQl9OworCisJCQljbGtfc19hMV9oczogY2xrLXMtYTEtaHMgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWM2NS1ocyIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19zX2ExX3BsbCAwPiwgLyogUExMMCBIUyAqLworCQkJCQkgPCZjbGtfc19hMV9wbGwgMj47IC8qIFBMTDEgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICIiLCAvKiBSZXNlcnZlZCAqLworCQkJCQkJICAgICAiIiwgLyogUmVzZXJ2ZWQgKi8KKwkJCQkJCSAgICAgImNsay1zLXN0YWMtcGh5IiwKKwkJCQkJCSAgICAgImNsay1zLXZ0YWMtdHgtcGh5IjsKKwkJCX07CisKKwkJCWNsa19zX2ExX2xzOiBjbGstcy1hMS1scyB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzY1LWxzIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19hMV9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX3NfYTFfcGxsIDE+LCAvKiBQTEwwIExTICovCisJCQkJCSA8JmNsa19zX2ExX3BsbCAyPjsgLyogUExMMSAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWljbi1pZi0yIiwKKwkJCQkJCSAgICAgImNsay1zLWNhcmQtbW1jLTAiLAorCQkJCQkJICAgICAiY2xrLXMtaWNuLWlmLTEiLAorCQkJCQkJICAgICAiY2xrLXMtZ21hYzAtcGh5IiwKKwkJCQkJCSAgICAgImNsay1zLW5hbmQtY3RybCIsCisJCQkJCQkgICAgICIiLCAvKiBSZXNlcnZlZCAqLworCQkJCQkJICAgICAiY2xrLXMtbWlpMC1yZWYtb3V0IiwKKwkJCQkJCSAgICAgImNsay1zLXN0YWMtc3lzIiwKKwkJCQkJCSAgICAgImNsay1zLWNhcmQtbW1jLTEiOworCQkJCQkJICAgICAvKiBSZW1haW5pbmcgb3V0cHV0cyB1bnVzZWQgKi8KKwkJCX07CisJCX07CisKKwkJLyoKKwkJICogQ2xvY2tHZW5BcyBvbiBNUEU0MgorCQkgKi8KKwkJY2xvY2tnZW4tYUBmZGUxMjAwMCB7CisJCQlyZWcgPSA8MHhmZGUxMjAwMCAweGI1MD47CisKKwkJCWNsa19tX2EwX3BsbDA6IGNsay1tLWEwLXBsbDAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHBsbHMtYzMyLWExeC0wIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTAtcGxsMC1waGkwIiwKKwkJCQkJCSAgICAgImNsay1tLWEwLXBsbDAtcGhpMSIsCisJCQkJCQkgICAgICJjbGstbS1hMC1wbGwwLXBoaTIiLAorCQkJCQkJICAgICAiY2xrLW0tYTAtcGxsMC1waGkzIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX3BsbDE6IGNsay1tLWEwLXBsbDEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHBsbHMtYzMyLWExeC0xIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTAtcGxsMS1waGkwIiwKKwkJCQkJCSAgICAgImNsay1tLWEwLXBsbDEtcGhpMSIsCisJCQkJCQkgICAgICJjbGstbS1hMC1wbGwxLXBoaTIiLAorCQkJCQkJICAgICAiY2xrLW0tYTAtcGxsMS1waGkzIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX29zY19wcmVkaXY6IGNsay1tLWEwLW9zYy1wcmVkaXYgeworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtcHJlZGl2LWMzMiIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtcHJlZGl2IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMC1vc2MtcHJlZGl2IjsKKwkJCX07CisKKwkJCWNsa19tX2EwX2RpdjA6IGNsay1tLWEwLWRpdjAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYwIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTBfcGxsMCAwPiwgLyogUExMMCBQSEkwICovCisJCQkJCSA8JmNsa19tX2EwX3BsbDEgMD47IC8qIFBMTDEgUEhJMCAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICJjbGstbS1mZG1hLTEyIiwKKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0tcHAtZG11LTAiLAorCQkJCQkJICAgICAiY2xrLW0tcHAtZG11LTEiLAorCQkJCQkJICAgICAiY2xrLW0taWNtLWxtaSIsCisJCQkJCQkgICAgICJjbGstbS12aWQtZG11LTAiOworCQkJfTsKKworCQkJY2xrX21fYTBfZGl2MTogY2xrLW0tYTAtZGl2MSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzMyLW9kZjEiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19tX2EwX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfbV9hMF9wbGwwIDE+LCAvKiBQTEwwIFBISTEgKi8KKwkJCQkJIDwmY2xrX21fYTBfcGxsMSAxPjsgLyogUExMMSBQSEkxICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tdmlkLWRtdS0xIiwKKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0tYTktZXh0MmYiLAorCQkJCQkJICAgICAiY2xrLW0tc3Q0MHJ0IiwKKwkJCQkJCSAgICAgImNsay1tLXN0MjMxLWRtdS0wIiwKKwkJCQkJCSAgICAgImNsay1tLXN0MjMxLWRtdS0xIiwKKwkJCQkJCSAgICAgImNsay1tLXN0MjMxLWF1ZCIsCisJCQkJCQkgICAgICJjbGstbS1zdDIzMS1ncC0wIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX2RpdjI6IGNsay1tLWEwLWRpdjIgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTBfcGxsMCAyPiwgLyogUExMMCBQSEkyICovCisJCQkJCSA8JmNsa19tX2EwX3BsbDEgMj47IC8qIFBMTDEgUEhJMiAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLXN0MjMxLWdwLTEiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLWNwdSIsCisJCQkJCQkgICAgICJjbGstbS1pY24tc3RhYyIsCisJCQkJCQkgICAgICJjbGstbS10eC1pY24tZG11LTAiLAorCQkJCQkJICAgICAiY2xrLW0tdHgtaWNuLWRtdS0xIiwKKwkJCQkJCSAgICAgImNsay1tLXR4LWljbi10cyIsCisJCQkJCQkgICAgICJjbGstbS1pY24tdmRwLTAiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXZkcC0xIjsKKwkJCX07CisKKwkJCWNsa19tX2EwX2RpdjM6IGNsay1tLWEwLWRpdjMgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYzIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMF9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTBfcGxsMCAzPiwgLyogUExMMCBQSEkzICovCisJCQkJCSA8JmNsa19tX2EwX3BsbDEgMz47IC8qIFBMTDEgUEhJMyAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0taWNuLXZwOCIsCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgImNsay1tLWljbi1yZWctMTEiLAorCQkJCQkJICAgICAiY2xrLW0tYTktdHJhY2UiOworCQkJfTsKKwkJfTsKKworCQljbG9ja2dlbi1hQGZkNmRiMDAwIHsKKwkJCXJlZyA9IDwweGZkNmRiMDAwIDB4YjUwPjsKKworCQkJY2xrX21fYTFfcGxsMDogY2xrLW0tYTEtcGxsMCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QscGxscy1jMzItYTF4LTAiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMS1wbGwwLXBoaTAiLAorCQkJCQkJICAgICAiY2xrLW0tYTEtcGxsMC1waGkxIiwKKwkJCQkJCSAgICAgImNsay1tLWExLXBsbDAtcGhpMiIsCisJCQkJCQkgICAgICJjbGstbS1hMS1wbGwwLXBoaTMiOworCQkJfTsKKworCQkJY2xrX21fYTFfcGxsMTogY2xrLW0tYTEtcGxsMSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QscGxscy1jMzItYTF4LTEiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hMS1wbGwxLXBoaTAiLAorCQkJCQkJICAgICAiY2xrLW0tYTEtcGxsMS1waGkxIiwKKwkJCQkJCSAgICAgImNsay1tLWExLXBsbDEtcGhpMiIsCisJCQkJCQkgICAgICJjbGstbS1hMS1wbGwxLXBoaTMiOworCQkJfTsKKworCQkJY2xrX21fYTFfb3NjX3ByZWRpdjogY2xrLW0tYTEtb3NjLXByZWRpdiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1wcmVkaXYtYzMyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1wcmVkaXYiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWExLW9zYy1wcmVkaXYiOworCQkJfTsKKworCQkJY2xrX21fYTFfZGl2MDogY2xrLW0tYTEtZGl2MCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzMyLW9kZjAiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19tX2ExX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfbV9hMV9wbGwwIDA+LCAvKiBQTEwwIFBISTAgKi8KKwkJCQkJIDwmY2xrX21fYTFfcGxsMSAwPjsgLyogUExMMSBQSEkwICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICJjbGstbS1mZG1hLTEwIiwKKwkJCQkJCSAgICAgImNsay1tLWZkbWEtMTEiLAorCQkJCQkJICAgICAiY2xrLW0taHZhLWFsdCIsCisJCQkJCQkgICAgICJjbGstbS1wcm9jLXNjIiwKKwkJCQkJCSAgICAgImNsay1tLXRwIiwKKwkJCQkJCSAgICAgImNsay1tLXJ4LWljbi1kbXUtMCIsCisJCQkJCQkgICAgICJjbGstbS1yeC1pY24tZG11LTEiOworCQkJfTsKKworCQkJY2xrX21fYTFfZGl2MTogY2xrLW0tYTEtZGl2MSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuYS1kaXZtdXgtYzMyLW9kZjEiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLWRpdm11eCI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19tX2ExX29zY19wcmVkaXY+LAorCQkJCQkgPCZjbGtfbV9hMV9wbGwwIDE+LCAvKiBQTEwwIFBISTEgKi8KKwkJCQkJIDwmY2xrX21fYTFfcGxsMSAxPjsgLyogUExMMSBQSEkxICovCisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tcngtaWNuLXRzIiwKKwkJCQkJCSAgICAgImNsay1tLXJ4LWljbi12ZHAtMCIsCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgImNsay1tLXBydi10MS1idXMiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXJlZy0xMiIsCisJCQkJCQkgICAgICJjbGstbS1pY24tcmVnLTEwIiwKKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0taWNuLXN0MjMxIjsKKwkJCX07CisKKwkJCWNsa19tX2ExX2RpdjI6IGNsay1tLWExLWRpdjIgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMV9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTFfcGxsMCAyPiwgLyogUExMMCBQSEkyICovCisJCQkJCSA8JmNsa19tX2ExX3BsbDEgMj47IC8qIFBMTDEgUEhJMiAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWZ2ZHAtcHJvYy1hbHQiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLXJlZy0xMyIsCisJCQkJCQkgICAgICJjbGstbS10eC1pY24tZ3B1IiwKKwkJCQkJCSAgICAgImNsay1tLXJ4LWljbi1ncHUiLAorCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIGNsay1tLWFwYi1wbS0xMiAqLworCQkJCQkJICAgICAiIjsgLyogVW51c2VkICovCisJCQl9OworCisJCQljbGtfbV9hMV9kaXYzOiBjbGstbS1hMS1kaXYzIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jMzItb2RmMyIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX21fYTFfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19tX2ExX3BsbDAgMz4sIC8qIFBMTDAgUEhJMyAqLworCQkJCQkgPCZjbGtfbV9hMV9wbGwxIDM+OyAvKiBQTEwxIFBISTMgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiIiwgLyogVW51c2VkICovCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiI7IC8qIGNsay1tLWdwdS1hbHQgKi8KKwkJCX07CisJCX07CisKKwkJY2xrX21fYTlfZXh0MmZfZGl2MjogY2xrLW0tYTktZXh0MmYtZGl2MiB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCQljbG9ja3MgPSA8JmNsa19tX2EwX2RpdjEgMj47CisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OworCQl9OworCisJCWNsb2NrZ2VuLWFAZmQzNDUwMDAgeworCQkJcmVnID0gPDB4ZmQzNDUwMDAgMHhiNTA+OworCisJCQljbGtfbV9hMl9wbGwwOiBjbGstbS1hMi1wbGwwIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxwbGxzLWMzMi1hMXgtMCIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWEyLXBsbDAtcGhpMCIsCisJCQkJCQkgICAgICJjbGstbS1hMi1wbGwwLXBoaTEiLAorCQkJCQkJICAgICAiY2xrLW0tYTItcGxsMC1waGkyIiwKKwkJCQkJCSAgICAgImNsay1tLWEyLXBsbDAtcGhpMyI7CisJCQl9OworCisJCQljbGtfbV9hMl9wbGwxOiBjbGstbS1hMi1wbGwxIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxwbGxzLWMzMi1hMXgtMSIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWEyLXBsbDEtcGhpMCIsCisJCQkJCQkgICAgICJjbGstbS1hMi1wbGwxLXBoaTEiLAorCQkJCQkJICAgICAiY2xrLW0tYTItcGxsMS1waGkyIiwKKwkJCQkJCSAgICAgImNsay1tLWEyLXBsbDEtcGhpMyI7CisJCQl9OworCisJCQljbGtfbV9hMl9vc2NfcHJlZGl2OiBjbGstbS1hMi1vc2MtcHJlZGl2IHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLXByZWRpdi1jMzIiLAorCQkJCQkgICAgICJzdCxjbGtnZW5hLXByZWRpdiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLW0tYTItb3NjLXByZWRpdiI7CisJCQl9OworCisJCQljbGtfbV9hMl9kaXYwOiBjbGstbS1hMi1kaXYwIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jMzItb2RmMCIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX21fYTJfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19tX2EyX3BsbDAgMD4sIC8qIFBMTDAgUEhJMCAqLworCQkJCQkgPCZjbGtfbV9hMl9wbGwxIDA+OyAvKiBQTEwxIFBISTAgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS12dGFjLW1haW4tcGh5IiwKKwkJCQkJCSAgICAgImNsay1tLXZ0YWMtYXV4LXBoeSIsCisJCQkJCQkgICAgICJjbGstbS1zdGFjLXBoeSIsCisJCQkJCQkgICAgICJjbGstbS1zdGFjLXN5cyIsCisJCQkJCQkgICAgICIiLCAvKiBjbGstbS1tcGVzdGFjLXBnICovCisJCQkJCQkgICAgICIiLCAvKiBjbGstbS1tcGVzdGFjLXdjICovCisJCQkJCQkgICAgICIiLCAvKiBjbGstbS1tcGV2dGFjYXV4LXBnKi8KKwkJCQkJCSAgICAgIiI7IC8qIGNsay1tLW1wZXZ0YWNtYWluLXBnKi8KKwkJCX07CisKKwkJCWNsa19tX2EyX2RpdjE6IGNsay1tLWEyLWRpdjEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYxIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMl9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTJfcGxsMCAxPiwgLyogUExMMCBQSEkxICovCisJCQkJCSA8JmNsa19tX2EyX3BsbDEgMT47IC8qIFBMTDEgUEhJMSAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIiIsIC8qIGNsay1tLW1wZXZ0YWNyeDAtd2MgKi8KKwkJCQkJCSAgICAgIiIsIC8qIGNsay1tLW1wZXZ0YWNyeDEtd2MgKi8KKwkJCQkJCSAgICAgImNsay1tLWNvbXBvLW1haW4iLAorCQkJCQkJICAgICAiY2xrLW0tY29tcG8tYXV4IiwKKwkJCQkJCSAgICAgImNsay1tLWJkaXNwLTAiLAorCQkJCQkJICAgICAiY2xrLW0tYmRpc3AtMSIsCisJCQkJCQkgICAgICJjbGstbS1pY24tYmRpc3AiLAorCQkJCQkJICAgICAiY2xrLW0taWNuLWNvbXBvIjsKKwkJCX07CisKKwkJCWNsa19tX2EyX2RpdjI6IGNsay1tLWEyLWRpdjIgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbmEtZGl2bXV4LWMzMi1vZGYyIiwKKwkJCQkJICAgICAic3QsY2xrZ2VuYS1kaXZtdXgiOworCisJCQkJY2xvY2tzID0gPCZjbGtfbV9hMl9vc2NfcHJlZGl2PiwKKwkJCQkJIDwmY2xrX21fYTJfcGxsMCAyPiwgLyogUExMMCBQSEkyICovCisJCQkJCSA8JmNsa19tX2EyX3BsbDEgMj47IC8qIFBMTDEgUEhJMiAqLworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWljbi12ZHAtMiIsCisJCQkJCQkgICAgICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgImNsay1tLWljbi1yZWctMTQiLAorCQkJCQkJICAgICAiY2xrLW0tbWR0cCIsCisJCQkJCQkgICAgICJjbGstbS1qcGVnZGVjIiwKKwkJCQkJCSAgICAgIiIsIC8qIFVudXNlZCAqLworCQkJCQkJICAgICAiY2xrLW0tZGNlcGh5LWltcGN0cmwiLAorCQkJCQkJICAgICAiIjsgLyogVW51c2VkICovCisJCQl9OworCisJCQljbGtfbV9hMl9kaXYzOiBjbGstbS1hMi1kaXYzIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW5hLWRpdm11eC1jMzItb2RmMyIsCisJCQkJCSAgICAgInN0LGNsa2dlbmEtZGl2bXV4IjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX21fYTJfb3NjX3ByZWRpdj4sCisJCQkJCSA8JmNsa19tX2EyX3BsbDAgMz4sIC8qIFBMTDAgUEhJMyAqLworCQkJCQkgPCZjbGtfbV9hMl9wbGwxIDM+OyAvKiBQTEwxIFBISTMgKi8KKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICIiLCAvKiBVbnVzZWQgKi8KKwkJCQkJCSAgICAgIiI7IC8qIGNsay1tLWFwYi1wbS0xMSAqLworCQkJCQkJICAgICAvKiBSZW1haW5pbmcgb3V0cHV0cyB1bnVzZWQgKi8KKwkJCX07CisJCX07CisKKwkJLyoKKwkJICogQTkgUExMCisJCSAqLworCQljbG9ja2dlbi1hOUBmZGRlMDhiMCB7CisJCQlyZWcgPSA8MHhmZGRlMDhiMCAweDcwPjsKKworCQkJY2xvY2tnZW5fYTlfcGxsOiBjbG9ja2dlbi1hOS1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtcGxscy1jMzItYTkiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xvY2tnZW4tYTktcGxsLW9kZiI7CisJCQl9OworCQl9OworCisJCS8qCisJCSAqIEFSTSBDUFUgcmVsYXRlZCBjbG9ja3MKKwkJICovCisJCWNsa19tX2E5OiBjbGstbS1hOUBmZGRlMDhhYyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtY2xrZ2VuLWE5LW11eCIsICJzdCxjbGtnZW4tbXV4IjsKKwkJCXJlZyA9IDwweGZkZGUwOGFjIDB4ND47CisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2E5X3BsbCAwPiwKKwkJCQkgPCZjbG9ja2dlbl9hOV9wbGwgMD4sCisJCQkJIDwmY2xrX21fYTBfZGl2MSAyPiwKKwkJCQkgPCZjbGtfbV9hOV9leHQyZl9kaXYyPjsKIAkJfTsKIAogCQkvKgogCQkgKiBBUk0gUGVyaXBoZXJhbCBjbG9jayBmb3IgdGltZXJzCiAJCSAqLwotCQlhcm1fcGVyaXBoX2NsazogYXJtX3BlcmlwaF9jbGsgeworCQlhcm1fcGVyaXBoX2NsazogY2xrLW0tYTktcGVyaXBocyB7CiAJCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2MDAwMDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQkJY2xvY2tzID0gPCZjbGtfbV9hOT47CisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OwogCQl9OwogCiAJCS8qCi0JCSAqIEJvb3Rsb2FkZXIgaW5pdGlhbGl6ZWQgc3lzdGVtIGluZnJhc3RydWN0dXJlIGNsb2NrIGZvcgotCQkgKiBzZXJpYWwgZGV2aWNlcy4KKwkJICogRnJlcXVlbmN5IHN5bnRoZXNpemVycyBvbiB0aGUgU0FTRzIKIAkJICovCi0JCUNMS19TX0lDTl9SRUdfMDogY2xvY2tnZW5BMEA0IHsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiQ0xLX1NfSUNOX1JFR18wIjsKKwkJY2xvY2tnZW5fYjA6IGNsb2NrZ2VuLWIwQGZlZTEwOGI0IHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1xdWFkZnMyMTYiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweGZlZTEwOGI0IDB4NDQ+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtdXNiNDgiLAorCQkJCQkgICAgICJjbGstcy1kc3MiLAorCQkJCQkgICAgICJjbGstcy1zdGZlLWZyYy0yIiwKKwkJCQkJICAgICAiY2xrLXMtdGhzZW5zLXNjYXJkIjsKIAkJfTsKIAotCQlDTEtfU19HTUFDMF9QSFk6IGNsb2NrZ2VuQTFANyB7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiQ0xLX1NfR01BQzBfUEhZIjsKKwkJY2xvY2tnZW5fYjE6IGNsb2NrZ2VuLWIxQGZlODMwOGM0IHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1xdWFkZnMyMTYiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweGZlODMwOGM0IDB4NDQ+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtcGNtLTAiLAorCQkJCQkgICAgICJjbGstcy1wY20tMSIsCisJCQkJCSAgICAgImNsay1zLXBjbS0yIiwKKwkJCQkJICAgICAiY2xrLXMtcGNtLTMiOwogCQl9OwogCi0JCUNMS19TX0VUSDFfUEhZOiBjbG9ja2dlbkEwQDcgeworCQljbG9ja2dlbl9jOiBjbG9ja2dlbi1jQGZlODMwN2QwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1xdWFkZnM0MzIiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweGZlODMwN2QwIDB4NDQ+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYy1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtYy12Y2Mtc2QiLAorCQkJCQkgICAgICJjbGstcy1jLWZzMC1jaDIiOworCQl9OworCisJCWNsa19zX3ZjY19oZDogY2xrLXMtdmNjLWhkQGZlODMwOGI4IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1jbGtnZW5jLXZjYy1oZCIsICJzdCxjbGtnZW4tbXV4IjsKKwkJCXJlZyA9IDwweGZlODMwOGI4IDB4ND47IC8qIFNZU0NGRzI1NTggKi8KKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+LAorCQkJCSA8JmNsb2NrZ2VuX2MgMD47CisJCX07CisKKwkJLyoKKwkJICogQWRkIGEgZHVtbXkgY2xvY2sgZm9yIHRoZSBIRE1JIFBIWSBmb3IgdGhlIFZDQyBpbnB1dCBtdXgKKwkJICovCisJCWNsa19zX3RtZHNfZnJvbXBoeTogY2xrLXMtdG1kcy1mcm9tcGh5IHsKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKLQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJDTEtfU19FVEgxX1BIWSI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCX07CisKKwkJY2xvY2tnZW5fY192Y2M6IGNsb2NrZ2VuLWMtdmNjQGZlODMwOGFjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1jbGtnZW5jIiwgInN0LGNsa2dlbi12Y2MiOworCQkJcmVnID0gPDB4ZmU4MzA4YWMgMHhjPjsgLyogU1lTQ0ZHMjU1NSwyNTU2LDI1NTcgKi8KKworCQkJY2xvY2tzID0gPCZjbGtfc192Y2NfaGQ+LAorCQkJCSA8JmNsb2NrZ2VuX2MgMT4sCisJCQkJIDwmY2xrX3NfdG1kc19mcm9tcGh5PiwKKwkJCQkgPCZjbG9ja2dlbl9jIDI+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgID0gImNsay1zLXBpeC1oZG1pIiwKKwkJCQkJICAgICAgImNsay1zLXBpeC1kdm8iLAorCQkJCQkgICAgICAiY2xrLXMtb3V0LWR2byIsCisJCQkJCSAgICAgICJjbGstcy1waXgtaGQiLAorCQkJCQkgICAgICAiY2xrLXMtaGRkYWMiLAorCQkJCQkgICAgICAiY2xrLXMtZGVuYyIsCisJCQkJCSAgICAgICJjbGstcy1zZGRhYyIsCisJCQkJCSAgICAgICJjbGstcy1waXgtbWFpbiIsCisJCQkJCSAgICAgICJjbGstcy1waXgtYXV4IiwKKwkJCQkJICAgICAgImNsay1zLXN0ZmUtZnJjLTAiLAorCQkJCQkgICAgICAiY2xrLXMtcmVmLW1jcnUiLAorCQkJCQkgICAgICAiY2xrLXMtc2xhdmUtbWNydSIsCisJCQkJCSAgICAgICJjbGstcy10bWRzLWhkbWkiLAorCQkJCQkgICAgICAiY2xrLXMtaGRtaS1yZWplY3QtcGxsIiwKKwkJCQkJICAgICAgImNsay1zLXRoc2VucyI7CisJCX07CisKKwkJY2xvY2tnZW5fZDogY2xvY2tnZW4tZEBmZWUxMDdlMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtcXVhZGZzMjE2IiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHhmZWUxMDdlMCAweDQ0PjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWNjc2MiLAorCQkJCQkgICAgICJjbGstcy1zdGZlLWZyYy0xIiwKKwkJCQkJICAgICAiY2xrLXMtdHNvdXQtMSIsCisJCQkJCSAgICAgImNsay1zLW1jaGkiOworCQl9OworCisJCS8qCisJCSAqIEZyZXF1ZW5jeSBzeW50aGVzaXplcnMgb24gdGhlIE1QRTQyCisJCSAqLworCQljbG9ja2dlbl9lOiBjbG9ja2dlbi1lQGZkMzIwOGJjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1xdWFkZnM2NjAtRSIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4ZmQzMjA4YmMgMHhiMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1waXgtbWR0cC0wIiwKKwkJCQkJICAgICAiY2xrLW0tcGl4LW1kdHAtMSIsCisJCQkJCSAgICAgImNsay1tLXBpeC1tZHRwLTIiLAorCQkJCQkgICAgICJjbGstbS1tcGVscGMiOworCQl9OworCisJCWNsb2NrZ2VuX2Y6IGNsb2NrZ2VuLWZAZmQzMjA4NzggeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LXF1YWRmczY2MC1GIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHhmZDMyMDg3OCAweGYwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLW1haW4tdmlkZnMiLAorCQkJCQkgICAgICJjbGstbS1odmEtZnMiLAorCQkJCQkgICAgICJjbGstbS1mdmRwLXZjcHUiLAorCQkJCQkgICAgICJjbGstbS1mdmRwLXByb2MtZnMiOworCQl9OworCisJCWNsa19tX2Z2ZHBfcHJvYzogY2xrLW0tZnZkcC1wcm9jQGZkMzIwOTEwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1jbGtnZW5mLXZjYy1mdmRwIiwgInN0LGNsa2dlbi1tdXgiOworCQkJcmVnID0gPDB4ZmQzMjA5MTAgMHg0PjsgLyogU1lTQ0ZHODU4MCAqLworCisJCQljbG9ja3MgPSA8JmNsa19tX2ExX2RpdjIgMD4sCisJCQkJIDwmY2xvY2tnZW5fZiAzPjsKKwkJfTsKKworCQljbGtfbV9odmE6IGNsay1tLWh2YUBmZDY5MDg2OCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtY2xrZ2VuZi12Y2MtaHZhIiwgInN0LGNsa2dlbi1tdXgiOworCQkJcmVnID0gPDB4ZmQ2OTA4NjggMHg0PjsgLyogU1lTQ0ZHOTUzOCAqLworCisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2YgMT4sCisJCQkJIDwmY2xrX21fYTFfZGl2MCAzPjsKKwkJfTsKKworCQljbGtfbV9mX3ZjY19oZDogY2xrLW0tZi12Y2MtaGRAZmQzMjA4NmMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LWNsa2dlbmYtdmNjLWhkIiwgInN0LGNsa2dlbi1tdXgiOworCQkJcmVnID0gPDB4ZmQzMjA4NmMgMHg0PjsgLyogU1lTQ0ZHODUzOSAqLworCisJCQljbG9ja3MgPSA8JmNsb2NrZ2VuX2NfdmNjIDc+LAorCQkJCSA8JmNsb2NrZ2VuX2YgMD47CisJCX07CisKKwkJY2xrX21fZl92Y2Nfc2Q6IGNsay1tLWYtdmNjLXNkQGZkMzIwODZjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1jbGtnZW5mLXZjYy1zZCIsICJzdCxjbGtnZW4tbXV4IjsKKwkJCXJlZyA9IDwweGZkMzIwODZjIDB4ND47IC8qIFNZU0NGRzg1MzkgKi8KKworCQkJY2xvY2tzID0gPCZjbG9ja2dlbl9jX3ZjYyA4PiwKKwkJCQkgPCZjbG9ja2dlbl9mIDE+OworCQl9OworCisJCS8qCisJCSAqIEFkZCBhIGR1bW15IGNsb2NrIGZvciB0aGUgSERNSVJ4IGV4dGVybmFsIHNpZ25hbCBjbG9jaworCQkgKi8KKwkJY2xrX21fcGl4X2hkbWlyeF9zYXM6IGNsay1tLXBpeC1oZG1pcngtc2FzIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNsb2NrZ2VuX2ZfdmNjOiBjbG9ja2dlbi1mLXZjY0BmZDMyMDg2YyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtY2xrZ2VuZiIsICJzdCxjbGtnZW4tdmNjIjsKKwkJCXJlZyA9IDwweGZkMzIwODZjIDB4Yz47IC8qIFNZU0NGRzg1MzksODU0MCw4NTQxICovCisKKwkJCWNsb2NrcyA9IDwmY2xrX21fZl92Y2NfaGQ+LAorCQkJCSA8JmNsa19tX2ZfdmNjX3NkPiwKKwkJCQkgPCZjbG9ja2dlbl9mIDA+LAorCQkJCSA8JmNsa19tX3BpeF9oZG1pcnhfc2FzPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzICA9ICJjbGstbS1waXgtbWFpbi1waXBlIiwKKwkJCQkJICAgICAgImNsay1tLXBpeC1hdXgtcGlwZSIsCisJCQkJCSAgICAgICJjbGstbS1waXgtbWFpbi1jcnUiLAorCQkJCQkgICAgICAiY2xrLW0tcGl4LWF1eC1jcnUiLAorCQkJCQkgICAgICAiY2xrLW0teGZlci1iZS1jb21wbyIsCisJCQkJCSAgICAgICJjbGstbS14ZmVyLXBpcC1jb21wbyIsCisJCQkJCSAgICAgICJjbGstbS14ZmVyLWF1eC1jb21wbyIsCisJCQkJCSAgICAgICJjbGstbS12c2VucyIsCisJCQkJCSAgICAgICJjbGstbS1waXgtaGRtaXJ4LTAiLAorCQkJCQkgICAgICAiY2xrLW0tcGl4LWhkbWlyeC0xIjsKKwkJfTsKKworCQkvKgorCQkgKiBERFIgUExMCisJCSAqLworCQljbG9ja2dlbi1kZHJAMHhmZGRlMDdkOCB7CisJCQlyZWcgPSA8MHhmZGRlMDdkOCAweDExMD47CisKKwkJCWNsb2NrZ2VuX2Rkcl9wbGw6IGNsb2NrZ2VuLWRkci1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtcGxscy1jMzItZGRyIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsb2NrZ2VuLWRkcjAiLAorCQkJCQkJICAgICAiY2xvY2tnZW4tZGRyMSI7CisJCQl9OworCQl9OworCisJCS8qCisJCSAqIEdQVSBQTEwKKwkJICovCisJCWNsb2NrZ2VuLWdwdUBmZDY4ZmYwMCB7CisJCQlyZWcgPSA8MHhmZDY4ZmYwMCAweDkxMD47CisKKwkJCWNsb2NrZ2VuX2dwdV9wbGw6IGNsb2NrZ2VuLWdwdS1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MTYtZ3B1LXBsbC1jMzIiLCAic3QsY2xrZ2VuZ3B1LXBsbC1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbG9ja2dlbi1ncHUtcGxsIjsKKwkJCX07CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpCmluZGV4IDI1MGQ1ZWMuLmVlNmMxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpCkBAIC0xMjIsNiArMTIyLDIyIEBACiAJCQkJfTsKIAkJCX07CiAKKwkJCWtleXNjYW4geworCQkJCXBpbmN0cmxfa2V5c2Nhbjoga2V5c2NhbiB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJa2V5aW4wID0gPCZQSU8wIDIgQUxUMiBJTj47CisJCQkJCQlrZXlpbjEgPSA8JlBJTzAgMyBBTFQyIElOPjsKKwkJCQkJCWtleWluMiA9IDwmUElPMCA0IEFMVDIgSU4+OworCQkJCQkJa2V5aW4zID0gPCZQSU8yIDYgQUxUMiBJTj47CisKKwkJCQkJCWtleW91dDAgPSA8JlBJTzEgNiBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQxID0gPCZQSU8xIDcgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MiA9IDwmUElPMCA2IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDMgPSA8JlBJTzIgNyBBTFQyIE9VVD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKIAkJCXNiY19pMmMwIHsKIAkJCQlwaW5jdHJsX3NiY19pMmMwX2RlZmF1bHQ6IHNiY19pMmMwLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaQppbmRleCA3ODc0NmQyLi4wNjQ3M2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi5kdHNpCkBAIC04OSw3ICs4OSw3IEBACiAJCQlzdGF0dXMgCQk9ICJkaXNhYmxlZCI7CiAJCQlyZWcJCT0gPDB4ZmVkMzIwMDAgMHgyYz47CiAJCQlpbnRlcnJ1cHRzCT0gPDAgMTk3IDA+OwotCQkJY2xvY2tzICAgICAgICAgID0gPCZDTEtfU19JQ05fUkVHXzA+OworCQkJY2xvY2tzIAkJPSA8JmNsa19zX2EwX2xzIENMS19JQ05fUkVHPjsKIAkJCXBpbmN0cmwtbmFtZXMgCT0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wIAk9IDwmcGluY3RybF9zZXJpYWwyICZwaW5jdHJsX3NlcmlhbDJfb2U+OwogCQl9OwpAQCAtMTAyLDE0ICsxMDIsMTQgQEAKIAkJCWludGVycnVwdHMJPSA8MCAyMTAgMD47CiAJCQlwaW5jdHJsLW5hbWVzIAk9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCAJPSA8JnBpbmN0cmxfc2JjX3NlcmlhbDE+OwotCQkJY2xvY2tzICAgICAgICAgID0gPCZDTEtfU1lTSU4+OworCQkJY2xvY2tzICAgICAgICAgID0gPCZjbGtfc3lzaW4+OwogCQl9OwogCiAJCWkyY0BmZWQ0MDAwMCB7CiAJCQljb21wYXRpYmxlCT0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZwkJPSA8MHhmZWQ0MDAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMTg3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzCQk9IDwmQ0xLX1NfSUNOX1JFR18wPjsKKwkJCWNsb2NrcyAJCT0gPCZjbGtfc19hMF9scyBDTEtfSUNOX1JFRz47CiAJCQljbG9jay1uYW1lcwk9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzCT0gImRlZmF1bHQiOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCQljb21wYXRpYmxlCT0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZwkJPSA8MHhmZWQ0MTAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzCQk9IDwmQ0xLX1NfSUNOX1JFR18wPjsKKwkJCWNsb2NrcyAJCT0gPCZjbGtfc19hMF9scyBDTEtfSUNOX1JFRz47CiAJCQljbG9jay1uYW1lcwk9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzCT0gImRlZmF1bHQiOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJCQljb21wYXRpYmxlCT0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZwkJPSA8MHhmZTU0MDAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzCQk9IDwmQ0xLX1NZU0lOPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zeXNpbj47CiAJCQljbG9jay1uYW1lcwk9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzCT0gImRlZmF1bHQiOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQljb21wYXRpYmxlCT0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZwkJPSA8MHhmZTU0MTAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMjA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzCQk9IDwmQ0xLX1NZU0lOPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zeXNpbj47CiAJCQljbG9jay1uYW1lcwk9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzCT0gImRlZmF1bHQiOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJCQlwaW5jdHJsLW5hbWVzIAk9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMAk9IDwmcGluY3RybF9taWkwPjsKIAkJCWNsb2NrLW5hbWVzCT0gInN0bW1hY2V0aCI7Ci0JCQljbG9ja3MJCT0gPCZDTEtfU19HTUFDMF9QSFk+OworCQkJY2xvY2tzCQk9IDwmY2xrX3NfYTFfbHMgQ0xLX0dNQUMwX1BIWT47CiAJCX07CiAKIAkJZXRoZXJuZXQxOiBkd21hY0BmZWYwODAwMCB7CkBAIC0xOTgsNyArMTk4LDcgQEAKIAkJCXBpbmN0cmwtbmFtZXMgCT0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wCT0gPCZwaW5jdHJsX21paTE+OwogCQkJY2xvY2stbmFtZXMJPSAic3RtbWFjZXRoIjsKLQkJCWNsb2NrcwkJPSA8JkNMS19TX0VUSDFfUEhZPjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zX2EwX2xzIENMS19FVEgxX1BIWT47CiAJCX07CiAKIAkJcmM6IHJjQGZlNTE4MDAwIHsKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkJcmVnCQk9IDwweGZlNTE4MDAwIDB4MjM0PjsKIAkJCWludGVycnVwdHMJPSAgPDAgMjAzIDA+OwogCQkJcngtbW9kZSAgICAgICAgID0gImluZnJhcmVkIjsKLQkJCWNsb2NrcwkJPSA8JkNMS19TWVNJTj47CisJCQljbG9ja3MJCT0gPCZjbGtfc3lzaW4+OwogCQkJcGluY3RybC1uYW1lcyAJPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfaXI+OwogCQkJcmVzZXRzCQk9IDwmc29mdHJlc2V0IFNUSUg0MTZfSVJCX1NPRlRSRVNFVD47CkBAIC0yMjQsNSArMjI0LDE3IEBACiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKKwkJa2V5c2Nhbjoga2V5c2NhbkBmZTRiMDAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aS1rZXlzY2FuIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlyZWcgPSA8MHhmZTRiMDAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIxMiBJUlFfVFlQRV9OT05FPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfa2V5c2Nhbj47CisJCQlyZXNldHMJPSA8JnBvd2VyZG93biBTVElINDE2X0tFWVNDQU5fUE9XRVJET1dOPiwKKwkJCQkgIDwmc29mdHJlc2V0IFNUSUg0MTZfS0VZU0NBTl9TT0ZUUkVTRVQ+OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAwMC5kdHNpCmluZGV4IGJmNjVjNDkuLmIzZGQ2Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDAwLmR0c2kKQEAgLTYsNiArNiw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KIC8gewogCiAJbWVtb3J5ewpAQCAtMTQsNyArMTUsNyBAQAogCX07CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eUFTMCwxMTUyMDAiOworCQlib290YXJncyA9ICJjb25zb2xlPXR0eUFTMCwxMTUyMDAgY2xrX2lnbm9yZV91bnVzZWQiOwogCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZzZXJpYWwyOwogCX07CiAKQEAgLTY4LDUgKzY5LDI3IEBACiAJCQlzbnBzLHJlc2V0LWFjdGl2ZS1sb3c7CiAJCQlzbnBzLHJlc2V0LWRlbGF5cy11cyAJPSA8MCAxMDAwMCAxMDAwMD47CiAJCX07CisKKwkJa2V5c2Nhbjoga2V5c2NhbkBmZTRiMDAwMCB7CisJCQlrZXlwYWQsbnVtLXJvd3MgPSA8ND47CisJCQlrZXlwYWQsbnVtLWNvbHVtbnMgPSA8ND47CisJCQlzdCxkZWJvdW5jZS11cyA9IDw1MDAwPjsKKwkJCWxpbnV4LGtleW1hcCA9IDwgTUFUUklYX0tFWSgweDAwLCAweDAwLCBLRVlfRjEzKQorCQkJCQkgTUFUUklYX0tFWSgweDAwLCAweDAxLCBLRVlfRjkpCisJCQkJCSBNQVRSSVhfS0VZKDB4MDAsIDB4MDIsIEtFWV9GNSkKKwkJCQkJIE1BVFJJWF9LRVkoMHgwMCwgMHgwMywgS0VZX0YxKQorCQkJCQkgTUFUUklYX0tFWSgweDAxLCAweDAwLCBLRVlfRjE0KQorCQkJCQkgTUFUUklYX0tFWSgweDAxLCAweDAxLCBLRVlfRjEwKQorCQkJCQkgTUFUUklYX0tFWSgweDAxLCAweDAyLCBLRVlfRjYpCisJCQkJCSBNQVRSSVhfS0VZKDB4MDEsIDB4MDMsIEtFWV9GMikKKwkJCQkJIE1BVFJJWF9LRVkoMHgwMiwgMHgwMCwgS0VZX0YxNSkKKwkJCQkJIE1BVFJJWF9LRVkoMHgwMiwgMHgwMSwgS0VZX0YxMSkKKwkJCQkJIE1BVFJJWF9LRVkoMHgwMiwgMHgwMiwgS0VZX0Y3KQorCQkJCQkgTUFUUklYX0tFWSgweDAyLCAweDAzLCBLRVlfRjMpCisJCQkJCSBNQVRSSVhfS0VZKDB4MDMsIDB4MDAsIEtFWV9GMTYpCisJCQkJCSBNQVRSSVhfS0VZKDB4MDMsIDB4MDEsIEtFWV9GMTIpCisJCQkJCSBNQVRSSVhfS0VZKDB4MDMsIDB4MDIsIEtFWV9GOCkKKwkJCQkJIE1BVFJJWF9LRVkoMHgwMywgMHgwMywgS0VZX0Y0KSA+OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMC5kdHNpCmluZGV4IDgzODUxM2YuLmQ4YTg0MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIwLmR0c2kKQEAgLTE0LDcgKzE0LDcgQEAKIAl9OwogCiAJY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlBUzAsMTE1MjAwIjsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlBUzAsMTE1MjAwIGNsa19pZ25vcmVfdW51c2VkIjsKIAkJbGludXgsc3Rkb3V0LXBhdGggPSAmc2JjX3NlcmlhbDE7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC5kdHNpCmluZGV4IGY1Yjk4OTguLjVjYjBlNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LmR0c2kKQEAgLTEsMyArMSwxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgTGltaXRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLwogLyB7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYTEwMDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWExMDAwLmR0cwppbmRleCBmYTc0NmFlYS4uMGI5N2MwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWExMDAwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYTEwMDAuZHRzCkBAIC0zNiw2ICszNiwxNiBAQAogCQkJfTsKIAkJfTsKIAorCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ24+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA3IDEgMD47IC8qIFBIMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgewogCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CiAJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1jdWJpZWJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1jdWJpZWJvYXJkLmR0cwppbmRleCA0Njg0Y2JlLi5jMjAwZWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtY3ViaWVib2FyZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWN1YmllYm9hcmQuZHRzCkBAIC0zNCw2ICszNCwxNiBAQAogCQkJfTsKIAkJfTsKIAorCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ24+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA3IDEgMD47IC8qIFBIMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgewogCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CiAJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1oYWNrYmVycnkuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMKaW5kZXggZDdjMTdlNC4uNTQ3ZmFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWhhY2tiZXJyeS5kdHMKQEAgLTM2LDYgKzM2LDE2IEBACiAJCQl9OwogCQl9OwogCisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwogCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CiAJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKIAkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWluZXQ5N2Z2Mi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cwppbmRleCBmZTkyNzJlLi5mMTM3MjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cwpAQCAtMjQsNiArMjQsMTYgQEAKIAl9OwogCiAJc29jQDAxYzAwMDAwIHsKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9yZWZlcmVuY2VfZGVzaWduPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxIDA+OyAvKiBQSDEgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgewogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1taW5pLXhwbHVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1taW5pLXhwbHVzLmR0cwppbmRleCBkZDg0YTllLi5jMDFjZWE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtbWluaS14cGx1cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW1pbmkteHBsdXMuZHRzCkBAIC0yMCw2ICsyMCwxNiBAQAogCWNvbXBhdGlibGUgPSAicGluZXJpdmVyLG1pbmkteHBsdXMiLCAiYWxsd2lubmVyLHN1bjRpLWExMCI7CiAKIAlzb2NAMDFjMDAwMDAgeworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ24+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA3IDEgMD47IC8qIFBIMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgewogCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CiAJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1vbGludXhpbm8tbGltZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtb2xpbnV4aW5vLWxpbWUuZHRzCmluZGV4IDY2Y2YwYzcuLmQ0NmE3ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1vbGludXhpbm8tbGltZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW9saW51eGluby1saW1lLmR0cwpAQCAtMzMsNiArMzMsMTYgQEAKIAkJCX07CiAJCX07CiAKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9yZWZlcmVuY2VfZGVzaWduPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxIDA+OyAvKiBQSDEgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKIAkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OwogCQkJdXNiMl92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjJfdmJ1cz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtcGNkdWluby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtcGNkdWluby5kdHMKaW5kZXggMjU1YjQ3ZS4uZmIwM2JjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLXBjZHVpbm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1wY2R1aW5vLmR0cwpAQCAtMzQsNiArMzQsMTYgQEAKIAkJCX07CiAJCX07CiAKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9yZWZlcmVuY2VfZGVzaWduPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxIDA+OyAvKiBQSDEgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKIAkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OwogCQkJdXNiMl92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjJfdmJ1cz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpCmluZGV4IDkxNzQ3MjQuLmM3Yjc5NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC5kdHNpCkBAIC0zNzcsNiArMzc3LDQyIEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAorCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1tYyI7CisJCQlyZWcgPSA8MHgwMWMwZjAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZhaGJfZ2F0ZXMgOD4sIDwmbW1jMF9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlpbnRlcnJ1cHRzID0gPDMyPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMTogbW1jQDAxYzEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tbWMiOworCQkJcmVnID0gPDB4MDFjMTAwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiX2dhdGVzIDk+LCA8Jm1tYzFfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFoYiIsICJtbWMiOworCQkJaW50ZXJydXB0cyA9IDwzMz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1tYzI6IG1tY0AwMWMxMTAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW1jIjsKKwkJCXJlZyA9IDwweDAxYzExMDAwIDB4MTAwMD47CisJCQljbG9ja3MgPSA8JmFoYl9nYXRlcyAxMD4sIDwmbW1jMl9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlpbnRlcnJ1cHRzID0gPDM0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMzogbW1jQDAxYzEyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tbWMiOworCQkJcmVnID0gPDB4MDFjMTIwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiX2dhdGVzIDExPiwgPCZtbWMzX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MzU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CiAJCQkjcGh5LWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLXVzYi1waHkiOwpAQCAtNDc3LDYgKzUxMywyMCBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkjZ3Bpby1jZWxscyA9IDwzPjsKIAorCQkJcHdtMF9waW5zX2E6IHB3bTBAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEIyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAicHdtIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQlwd20xX3BpbnNfYTogcHdtMUAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSTMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJwd20iOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKIAkJCXVhcnQwX3BpbnNfYTogdWFydDBAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEIyMiIsICJQQjIzIjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAidWFydDAiOwpAQCAtNTI5LDYgKzU3OSwyMCBAQAogCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKIAkJCX07CisKKwkJCW1tYzBfcGluc19hOiBtbWMwQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBGMCIsIlBGMSIsIlBGMiIsIlBGMyIsIlBGNCIsIlBGNSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gIm1tYzAiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwyPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCW1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ246IG1tYzBfY2RfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9faW4iOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CiAJCX07CiAKIAkJdGltZXJAMDFjMjBjMDAgewpAQCAtNTQ5LDYgKzYxMywxNCBAQAogCQkJaW50ZXJydXB0cyA9IDwyND47CiAJCX07CiAKKwkJcHdtOiBwd21AMDFjMjBlMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLXB3bSI7CisJCQlyZWcgPSA8MHgwMWMyMGUwMCAweGM+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+OworCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJc2lkOiBlZXByb21AMDFjMjM4MDAgewogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLXNpZCI7CiAJCQlyZWcgPSA8MHgwMWMyMzgwMCAweDEwPjsKQEAgLTY0Nyw2ICs3MTksOCBAQAogCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAogCQlpMmMxOiBpMmNAMDFjMmIwMDAgewpAQCAtNjU2LDYgKzczMCw4IEBACiAJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMT47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OwogCQl9OwogCiAJCWkyYzI6IGkyY0AwMWMyYjQwMCB7CkBAIC02NjUsNiArNzQxLDggQEAKIAkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAyPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKaW5kZXggMjM2MTFiNy4uZWE5NTE5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cwpAQCAtMzUsNiArMzUsMjYgQEAKIAkJCX07CiAJCX07CiAKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9vbGludXhpbm9fbWljcm8+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA2IDEgMD47IC8qIFBHMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJbW1jMTogbW1jQDAxYzEwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzFfcGluc19hPiwgPCZtbWMxX2NkX3Bpbl9vbGludXhpbm9fbWljcm8+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA2IDEzIDA+OyAvKiBQRzEzICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwogCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CiAJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKIAkJCXN0YXR1cyA9ICJva2F5IjsKQEAgLTQ5LDYgKzY5LDIwIEBACiAJCX07CiAKIAkJcGluY3RybEAwMWMyMDgwMCB7CisJCQltbWMwX2NkX3Bpbl9vbGludXhpbm9fbWljcm86IG1tYzBfY2RfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHMSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9faW4iOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKKwkJCW1tYzFfY2RfcGluX29saW51eGlub19taWNybzogbW1jMV9jZF9waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEcxMyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9faW4iOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKIAkJCWxlZF9waW5zX29saW51eGlubzogbGVkX3BpbnNAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEUzIjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1yNy10di1kb25nbGUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1yNy10di1kb25nbGUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTkzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLXI3LXR2LWRvbmdsZS5kdHMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjVpLWExMHMuZHRzaSIKKy9pbmNsdWRlLyAic3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiUjcgQTEwcyBoZG1pIHR2LXN0aWNrIjsKKwljb21wYXRpYmxlID0gImFsbHdpbm5lcixyNy10di1kb25nbGUiLCAiYWxsd2lubmVyLHN1bjVpLWExMHMiOworCisJc29jQDAxYzAwMDAwIHsKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9yNz47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDYgMSAwPjsgLyogUEcxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMxOiBtbWNAMDFjMTAwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMV9waW5zX2E+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJbm9uLXJlbW92YWJsZTsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CisJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzE0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzE0NDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzBfY2RfcGluX3I3OiBtbWMwX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQRzEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX2luIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCisJCQlsZWRfcGluc19yNzogbGVkX3BpbnNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEIyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwxPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCXVzYjFfdmJ1c19waW5fcjc6IHVzYjFfdmJ1c19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEcxMyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZsZWRfcGluc19yNz47CisKKwkJZ3JlZW4geworCQkJbGFiZWwgPSAicjctdHYtZG9uZ2xlOmdyZWVuOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDEgMiAwPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQl9OworCX07CisKKwlyZWdfdXNiMV92YnVzOiB1c2IxLXZidXMgeworCQlwaW5jdHJsLTAgPSA8JnVzYjFfdmJ1c19waW5fcjc+OworCQlncGlvID0gPCZwaW8gNiAxMyAwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCmluZGV4IDc5OTg5ZWQuLmFhMWRkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKQEAgLTMzOCw2ICszMzgsMzMgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQl9OwogCisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41aS1hMTMtbW1jIjsKKwkJCXJlZyA9IDwweDAxYzBmMDAwIDB4MTAwMD47CisJCQljbG9ja3MgPSA8JmFoYl9nYXRlcyA4PiwgPCZtbWMwX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MzI+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltbWMxOiBtbWNAMDFjMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNWktYTEzLW1tYyI7CisJCQlyZWcgPSA8MHgwMWMxMDAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZhaGJfZ2F0ZXMgOT4sIDwmbW1jMV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlpbnRlcnJ1cHRzID0gPDMzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMjogbW1jQDAxYzExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1tbWMiOworCQkJcmVnID0gPDB4MDFjMTEwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiX2dhdGVzIDEwPiwgPCZtbWMyX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MzQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CiAJCQkjcGh5LWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNWktYTEzLXVzYi1waHkiOwpAQCAtNDUxLDYgKzQ3OCwyMCBAQAogCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKIAkJCX07CisKKwkJCW1tYzBfcGluc19hOiBtbWMwQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBGMCIsIlBGMSIsIlBGMiIsIlBGMyIsIlBGNCIsIlBGNSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gIm1tYzAiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwyPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCW1tYzFfcGluc19hOiBtbWMxQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHMyIsIlBHNCIsIlBHNSIsIlBHNiIsIlBHNyIsIlBHOCI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gIm1tYzEiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwyPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CiAJCX07CiAKIAkJdGltZXJAMDFjMjBjMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCAxMTE2OWQ1Li5mYTQ0YjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cwpAQCAtMjEsNiArMjEsMTYgQEAKIAljb21wYXRpYmxlID0gIm9saW1leCxhMTMtb2xpbnV4aW5vLW1pY3JvIiwgImFsbHdpbm5lcixzdW41aS1hMTMiOwogCiAJc29jQDAxYzAwMDAwIHsKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9vbGludXhpbm9tPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNiAwIDA+OyAvKiBQRzAgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKIAkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OwogCQkJc3RhdHVzID0gIm9rYXkiOwpAQCAtMzUsNiArNDUsMTMgQEAKIAkJfTsKIAogCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzBfY2RfcGluX29saW51eGlub206IG1tYzBfY2RfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHMCI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9faW4iOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKIAkJCWxlZF9waW5zX29saW51eGlub206IGxlZF9waW5zQDAgewogCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHOSI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMKaW5kZXggN2E5MTg3Yi4uNDI5OTk0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby5kdHMKQEAgLTIwLDYgKzIwLDE2IEBACiAJY29tcGF0aWJsZSA9ICJvbGltZXgsYTEzLW9saW51eGlubyIsICJhbGx3aW5uZXIsc3VuNWktYTEzIjsKIAogCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fb2xpbnV4aW5vPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNiAwIDA+OyAvKiBQRzAgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKIAkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OwogCQkJc3RhdHVzID0gIm9rYXkiOwpAQCAtMzQsNiArNDQsMTMgQEAKIAkJfTsKIAogCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzBfY2RfcGluX29saW51eGlubzogbW1jMF9jZF9waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEcwIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19pbiI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKwogCQkJbGVkX3BpbnNfb2xpbnV4aW5vOiBsZWRfcGluc0AwIHsKIAkJCQlhbGx3aW5uZXIscGlucyA9ICJQRzkiOwogCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy5kdHNpCmluZGV4IGYwMWMzMTUuLmM5ZmRiN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy5kdHNpCkBAIC0zMjAsNiArMzIwLDI0IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAorCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNWktYTEzLW1tYyI7CisJCQlyZWcgPSA8MHgwMWMwZjAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZhaGJfZ2F0ZXMgOD4sIDwmbW1jMF9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlpbnRlcnJ1cHRzID0gPDMyPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMjogbW1jQDAxYzExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1tbWMiOworCQkJcmVnID0gPDB4MDFjMTEwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiX2dhdGVzIDEwPiwgPCZtbWMyX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MzQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CiAJCQkjcGh5LWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNWktYTEzLXVzYi1waHkiOwpAQCAtNDE1LDYgKzQzMywxMyBAQAogCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKIAkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKIAkJCX07CisKKwkJCW1tYzBfcGluc19hOiBtbWMwQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBGMCIsIlBGMSIsIlBGMiIsIlBGMyIsIlBGNCIsIlBGNSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gIm1tYzAiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwyPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CiAJCX07CiAKIAkJdGltZXJAMDFjMjBjMDAgewpAQCAtNDY3LDYgKzQ5Miw4IEBACiAJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OwogCQl9OwogCiAJCWkyYzE6IGkyY0AwMWMyYjAwMCB7CkBAIC00NzYsNiArNTAzLDggQEAKIAkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCX07CiAKIAkJaTJjMjogaTJjQDAxYzJiNDAwIHsKQEAgLTQ4NSw2ICs1MTQsOCBAQAogCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDI+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAogCQl0aW1lckAwMWM2MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtYXBwNC1ldmIxLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1hcHA0LWV2YjEuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYmY4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtYXBwNC1ldmIxLmR0cwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQm9yaXMgQnJlemlsbG9uCisgKgorICogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjZpLWEzMS5kdHNpIgorL2luY2x1ZGUvICJzdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJBbGx3aW5uZXIgQTMxIEFQUDQgRVZCMSBFdmFsdWF0aW9uIEJvYXJkIjsKKwljb21wYXRpYmxlID0gImFsbHdpbm5lcixhcHA0LWV2YjEiLCAiYWxsd2lubmVyLHN1bjZpLWEzMSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJlYXJseXByaW50ayBjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCXNvY0AwMWMwMDAwMCB7CisJCXBpbzogcGluY3RybEAwMWMyMDgwMCB7CisJCQl1c2IxX3ZidXNfcGluX2E6IHVzYjFfdmJ1c19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgyNyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCQl9OworCisJCXVzYnBoeTogcGh5QDAxYzE5NDAwIHsKKwkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMWEwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKKwkJcGluY3RybC0wID0gPCZ1c2IxX3ZidXNfcGluX2E+OworCQlncGlvID0gPCZwaW8gNyAyNyAwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWNvbG9tYnVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1jb2xvbWJ1cy5kdHMKaW5kZXggMzg5OGE3Yi4uNTQ2Y2Y2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWNvbG9tYnVzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtY29sb21idXMuZHRzCkBAIC0xMyw2ICsxMyw3IEBACiAKIC9kdHMtdjEvOwogL2luY2x1ZGUvICJzdW42aS1hMzEuZHRzaSIKKy9pbmNsdWRlLyAic3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiV0lUUyBBMzEgQ29sb21idXMgRXZhbHVhdGlvbiBCb2FyZCI7CkBAIC0yMyw2ICsyNCw0NSBAQAogCX07CiAKIAlzb2NAMDFjMDAwMDAgeworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX2NvbG9tYnVzPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YwPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gMCA4IDA+OyAvKiBQQTggKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVzYnBoeTogcGh5QDAxYzE5NDAwIHsKKwkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kxOiB1c2JAMDFjMWIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXBpbzogcGluY3RybEAwMWMyMDgwMCB7CisJCQltbWMwX3BpbnNfYTogbW1jMEAwIHsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKKwkJCW1tYzBfY2RfcGluX2NvbG9tYnVzOiBtbWMwX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQQTgiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX2luIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCisJCQl1c2IyX3ZidXNfcGluX2NvbG9tYnVzOiB1c2IyX3ZidXNfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjQiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKwogCQl1YXJ0MDogc2VyaWFsQDAxYzI4MDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnNfYT47CkBAIC00Nyw0ICs4NywxMSBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCX07CisKKwlyZWdfdXNiMl92YnVzOiB1c2IyLXZidXMgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnVzYjJfdmJ1c19waW5fY29sb21idXM+OworCQlncGlvID0gPCZwaW8gNyAyNCAwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLW05LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1tOS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MTE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1tOS5kdHMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisvZHRzLXYxLzsKKy9pbmNsdWRlLyAic3VuNmktYTMxLmR0c2kiCisvaW5jbHVkZS8gInN1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lbGUgTTkgLyBBMTAwMEcgUXVhZCB0b3Agc2V0IGJveCI7CisJY29tcGF0aWJsZSA9ICJtZWxlLG05IiwgImFsbHdpbm5lcixzdW42aS1hMzEiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOworCX07CisKKwlzb2NAMDFjMDAwMDAgeworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX205PjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAyMiAwPjsgLyogUEgyMiAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJcGlvOiBwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzBfY2RfcGluX205OiBtbWMwX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDIyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19pbiI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDAxYzI4MDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCmluZGV4IGQ0NWVmYTcuLjBmNGVhNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCkBAIC0yNyw2ICsyNyw3IEBACiAKIAogCWNwdXMgeworCQllbmFibGUtbWV0aG9kID0gImFsbHdpbm5lcixzdW42aS1hMzEiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKQEAgLTU5LDYgKzYwLDE0IEBACiAJCXJlZyA9IDwweDQwMDAwMDAwIDB4ODAwMDAwMDA+OwogCX07CiAKKwlwbXUgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctcG11IiwgImFybSxjb3J0ZXgtYTE1LXBtdSI7CisJCWludGVycnVwdHMgPSA8MCAxMjAgND4sCisJCQkgICAgIDwwIDEyMSA0PiwKKwkJCSAgICAgPDAgMTIyIDQ+LAorCQkJICAgICA8MCAxMjMgND47CisJfTsKKwogCWNsb2NrcyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTE5OCw2ICsyMDcsMzggQEAKIAkJCQkJImFwYjJfdWFydDQiLCAiYXBiMl91YXJ0NSI7CiAJCX07CiAKKwkJbW1jMF9jbGs6IGNsa0AwMWMyMDA4OCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOworCQkJcmVnID0gPDB4MDFjMjAwODggMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtbWMwIjsKKwkJfTsKKworCQltbWMxX2NsazogY2xrQDAxYzIwMDhjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CisJCQlyZWcgPSA8MHgwMWMyMDA4YyAweDQ+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm1tYzEiOworCQl9OworCisJCW1tYzJfY2xrOiBjbGtAMDFjMjAwOTAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKKwkJCXJlZyA9IDwweDAxYzIwMDkwIDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAibW1jMiI7CisJCX07CisKKwkJbW1jM19jbGs6IGNsa0AwMWMyMDA5NCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOworCQkJcmVnID0gPDB4MDFjMjAwOTQgMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtbWMzIjsKKwkJfTsKKwogCQlzcGkwX2NsazogY2xrQDAxYzIwMGEwIHsKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CkBAIC0yMjksNiArMjcwLDE3IEBACiAJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic3BpMyI7CiAJCX07CisKKwkJdXNiX2NsazogY2xrQDAxYzIwMGNjIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJICAgICAgICAjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtdXNiLWNsayI7CisJCQlyZWcgPSA8MHgwMWMyMDBjYyAweDQ+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInVzYl9waHkwIiwgInVzYl9waHkxIiwgInVzYl9waHkyIiwKKwkJCQkJICAgICAidXNiX29oY2kwIiwgInVzYl9vaGNpMSIsCisJCQkJCSAgICAgInVzYl9vaGNpMiI7CisJCX07CiAJfTsKIAogCXNvY0AwMWMwMDAwMCB7CkBAIC0yMzcsMTIgKzI4OSwxMzQgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCXJhbmdlczsKIAotCQlubWlfaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMDFmMDBjMGMgewotCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXNjLW5taSI7Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MHgwMWYwMGMwYyAweDM4PjsKLQkJCWludGVycnVwdHMgPSA8MCAzMiA0PjsKKwkJZG1hOiBkbWEtY29udHJvbGxlckAwMWMwMjAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtZG1hIjsKKwkJCXJlZyA9IDwweDAxYzAyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNTAgND47CisJCQljbG9ja3MgPSA8JmFoYjFfZ2F0ZXMgNj47CisJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDY+OworCQkJI2RtYS1jZWxscyA9IDwxPjsKKwkJfTsKKworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNWktYTEzLW1tYyI7CisJCQlyZWcgPSA8MHgwMWMwZjAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZhaGIxX2dhdGVzIDg+LCA8Jm1tYzBfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFoYiIsICJtbWMiOworCQkJcmVzZXRzID0gPCZhaGIxX3JzdCA4PjsKKwkJCXJlc2V0LW5hbWVzID0gImFoYiI7CisJCQlpbnRlcnJ1cHRzID0gPDAgNjAgND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1tYzE6IG1tY0AwMWMxMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41aS1hMTMtbW1jIjsKKwkJCXJlZyA9IDwweDAxYzEwMDAwIDB4MTAwMD47CisJCQljbG9ja3MgPSA8JmFoYjFfZ2F0ZXMgOT4sIDwmbW1jMV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDk+OworCQkJcmVzZXQtbmFtZXMgPSAiYWhiIjsKKwkJCWludGVycnVwdHMgPSA8MCA2MSA0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMjogbW1jQDAxYzExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1tbWMiOworCQkJcmVnID0gPDB4MDFjMTEwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiMV9nYXRlcyAxMD4sIDwmbW1jMl9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDEwPjsKKwkJCXJlc2V0LW5hbWVzID0gImFoYiI7CisJCQlpbnRlcnJ1cHRzID0gPDAgNjIgND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1tYzM6IG1tY0AwMWMxMjAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41aS1hMTMtbW1jIjsKKwkJCXJlZyA9IDwweDAxYzEyMDAwIDB4MTAwMD47CisJCQljbG9ja3MgPSA8JmFoYjFfZ2F0ZXMgMTE+LCA8Jm1tYzNfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFoYiIsICJtbWMiOworCQkJcmVzZXRzID0gPCZhaGIxX3JzdCAxMT47CisJCQlyZXNldC1uYW1lcyA9ICJhaGIiOworCQkJaW50ZXJydXB0cyA9IDwwIDYzIDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2JwaHk6IHBoeUAwMWMxOTQwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtdXNiLXBoeSI7CisJCQlyZWcgPSA8MHgwMWMxOTQwMCAweDEwPiwKKwkJCSAgICAgIDwweDAxYzFhODAwIDB4ND4sCisJCQkgICAgICA8MHgwMWMxYjgwMCAweDQ+OworCQkJcmVnLW5hbWVzID0gInBoeV9jdHJsIiwKKwkJCQkgICAgInBtdTEiLAorCQkJCSAgICAicG11MiI7CisJCQljbG9ja3MgPSA8JnVzYl9jbGsgOD4sCisJCQkJIDwmdXNiX2NsayA5PiwKKwkJCQkgPCZ1c2JfY2xrIDEwPjsKKwkJCWNsb2NrLW5hbWVzID0gInVzYjBfcGh5IiwKKwkJCQkgICAgICAidXNiMV9waHkiLAorCQkJCSAgICAgICJ1c2IyX3BoeSI7CisJCQlyZXNldHMgPSA8JnVzYl9jbGsgMD4sCisJCQkJIDwmdXNiX2NsayAxPiwKKwkJCQkgPCZ1c2JfY2xrIDI+OworCQkJcmVzZXQtbmFtZXMgPSAidXNiMF9yZXNldCIsCisJCQkJICAgICAgInVzYjFfcmVzZXQiLAorCQkJCSAgICAgICJ1c2IyX3Jlc2V0IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMWEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWVoY2kiLCAiZ2VuZXJpYy1laGNpIjsKKwkJCXJlZyA9IDwweDAxYzFhMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA3MiA0PjsKKwkJCWNsb2NrcyA9IDwmYWhiMV9nYXRlcyAyNj47CisJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDI2PjsKKwkJCXBoeXMgPSA8JnVzYnBoeSAxPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzFhNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1vaGNpIiwgImdlbmVyaWMtb2hjaSI7CisJCQlyZWcgPSA8MHgwMWMxYTQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzMgND47CisJCQljbG9ja3MgPSA8JmFoYjFfZ2F0ZXMgMjk+LCA8JnVzYl9jbGsgMTY+OworCQkJcmVzZXRzID0gPCZhaGIxX3JzdCAyOT47CisJCQlwaHlzID0gPCZ1c2JwaHkgMT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWhjaTE6IHVzYkAwMWMxYjAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtZWhjaSIsICJnZW5lcmljLWVoY2kiOworCQkJcmVnID0gPDB4MDFjMWIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDc0IDQ+OworCQkJY2xvY2tzID0gPCZhaGIxX2dhdGVzIDI3PjsKKwkJCXJlc2V0cyA9IDwmYWhiMV9yc3QgMjc+OworCQkJcGh5cyA9IDwmdXNicGh5IDI+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW9oY2kxOiB1c2JAMDFjMWI0MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLW9oY2kiLCAiZ2VuZXJpYy1vaGNpIjsKKwkJCXJlZyA9IDwweDAxYzFiNDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA3NSA0PjsKKwkJCWNsb2NrcyA9IDwmYWhiMV9nYXRlcyAzMD4sIDwmdXNiX2NsayAxNz47CisJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDMwPjsKKwkJCXBoeXMgPSA8JnVzYnBoeSAyPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlvaGNpMjogdXNiQDAxYzFjNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1vaGNpIiwgImdlbmVyaWMtb2hjaSI7CisJCQlyZWcgPSA8MHgwMWMxYzQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzcgND47CisJCQljbG9ja3MgPSA8JmFoYjFfZ2F0ZXMgMzE+LCA8JnVzYl9jbGsgMTg+OworCQkJcmVzZXRzID0gPCZhaGIxX3JzdCAzMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCiAJCXBpbzogcGluY3RybEAwMWMyMDgwMCB7CkBAIC0yODYsNiArNDYwLDEzIEBACiAJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OwogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKKworCQkJbW1jMF9waW5zX2E6IG1tYzBAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEYwIiwiUEYxIiwiUEYyIiwiUEYzIiwiUEY0IiwiUEY1IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAibW1jMCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDI+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKIAkJfTsKIAogCQlhaGIxX3JzdDogcmVzZXRAMDFjMjAyYzAgewpAQCAtMzMwLDYgKzUxMSw4IEBACiAJCQlyZWctaW8td2lkdGggPSA8ND47CiAJCQljbG9ja3MgPSA8JmFwYjJfZ2F0ZXMgMTY+OwogCQkJcmVzZXRzID0gPCZhcGIyX3JzdCAxNj47CisJCQlkbWFzID0gPCZkbWEgNj4sIDwmZG1hIDY+OworCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTM0MSw2ICs1MjQsOCBAQAogCQkJcmVnLWlvLXdpZHRoID0gPDQ+OwogCQkJY2xvY2tzID0gPCZhcGIyX2dhdGVzIDE3PjsKIAkJCXJlc2V0cyA9IDwmYXBiMl9yc3QgMTc+OworCQkJZG1hcyA9IDwmZG1hIDc+LCA8JmRtYSA3PjsKKwkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCkBAIC0zNTIsNiArNTM3LDggQEAKIAkJCXJlZy1pby13aWR0aCA9IDw0PjsKIAkJCWNsb2NrcyA9IDwmYXBiMl9nYXRlcyAxOD47CiAJCQlyZXNldHMgPSA8JmFwYjJfcnN0IDE4PjsKKwkJCWRtYXMgPSA8JmRtYSA4PiwgPCZkbWEgOD47CisJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIApAQCAtMzYzLDYgKzU1MCw4IEBACiAJCQlyZWctaW8td2lkdGggPSA8ND47CiAJCQljbG9ja3MgPSA8JmFwYjJfZ2F0ZXMgMTk+OwogCQkJcmVzZXRzID0gPCZhcGIyX3JzdCAxOT47CisJCQlkbWFzID0gPCZkbWEgOT4sIDwmZG1hIDk+OworCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTM3NCw2ICs1NjMsOCBAQAogCQkJcmVnLWlvLXdpZHRoID0gPDQ+OwogCQkJY2xvY2tzID0gPCZhcGIyX2dhdGVzIDIwPjsKIAkJCXJlc2V0cyA9IDwmYXBiMl9yc3QgMjA+OworCQkJZG1hcyA9IDwmZG1hIDEwPiwgPCZkbWEgMTA+OworCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTM4NSw2ICs1NzYsOCBAQAogCQkJcmVnLWlvLXdpZHRoID0gPDQ+OwogCQkJY2xvY2tzID0gPCZhcGIyX2dhdGVzIDIxPjsKIAkJCXJlc2V0cyA9IDwmYXBiMl9yc3QgMjE+OworCQkJZG1hcyA9IDwmZG1hIDIyPiwgPCZkbWEgMjI+OworCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTQzNCw2ICs2MjcsOCBAQAogCQkJaW50ZXJydXB0cyA9IDwwIDY1IDQ+OwogCQkJY2xvY2tzID0gPCZhaGIxX2dhdGVzIDIwPiwgPCZzcGkwX2Nsaz47CiAJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW9kIjsKKwkJCWRtYXMgPSA8JmRtYSAyMz4sIDwmZG1hIDIzPjsKKwkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CiAJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDIwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC00NDQsNiArNjM5LDggQEAKIAkJCWludGVycnVwdHMgPSA8MCA2NiA0PjsKIAkJCWNsb2NrcyA9IDwmYWhiMV9nYXRlcyAyMT4sIDwmc3BpMV9jbGs+OwogCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1vZCI7CisJCQlkbWFzID0gPCZkbWEgMjQ+LCA8JmRtYSAyND47CisJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwogCQkJcmVzZXRzID0gPCZhaGIxX3JzdCAyMT47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtNDU0LDYgKzY1MSw4IEBACiAJCQlpbnRlcnJ1cHRzID0gPDAgNjcgND47CiAJCQljbG9ja3MgPSA8JmFoYjFfZ2F0ZXMgMjI+LCA8JnNwaTJfY2xrPjsKIAkJCWNsb2NrLW5hbWVzID0gImFoYiIsICJtb2QiOworCQkJZG1hcyA9IDwmZG1hIDI1PiwgPCZkbWEgMjU+OworCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKIAkJCXJlc2V0cyA9IDwmYWhiMV9yc3QgMjI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTQ2NCw2ICs2NjMsOCBAQAogCQkJaW50ZXJydXB0cyA9IDwwIDY4IDQ+OwogCQkJY2xvY2tzID0gPCZhaGIxX2dhdGVzIDIzPiwgPCZzcGkzX2Nsaz47CiAJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW9kIjsKKwkJCWRtYXMgPSA8JmRtYSAyNj4sIDwmZG1hIDI2PjsKKwkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CiAJCQlyZXNldHMgPSA8JmFoYjFfcnN0IDIzPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC00NzksMTQgKzY4MCw3NCBAQAogCQkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OwogCQl9OwogCisJCW5taV9pbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckAwMWYwMGMwYyB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtc2Mtbm1pIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDAxZjAwYzBjIDB4Mzg+OworCQkJaW50ZXJydXB0cyA9IDwwIDMyIDQ+OworCQl9OworCisJCXByY21AMDFmMDE0MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXByY20iOworCQkJcmVnID0gPDB4MDFmMDE0MDAgMHgyMDA+OworCisJCQlhcjEwMDogYXIxMDBfY2xrIHsKKwkJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtYXIxMDAtY2xrIjsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkJY2xvY2tzID0gPCZvc2MzMms+LCA8Jm9zYzI0TT4sIDwmcGxsNj4sIDwmcGxsNj47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFyMTAwIjsKKwkJCX07CisKKwkJCWFoYjA6IGFoYjBfY2xrIHsKKwkJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNsb2NrLWRpdiA9IDwxPjsKKwkJCQljbG9jay1tdWx0ID0gPDE+OworCQkJCWNsb2NrcyA9IDwmYXIxMDA+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIwIjsKKwkJCX07CisKKwkJCWFwYjA6IGFwYjBfY2xrIHsKKwkJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtYXBiMC1jbGsiOworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQljbG9ja3MgPSA8JmFoYjA+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcGIwIjsKKwkJCX07CisKKwkJCWFwYjBfZ2F0ZXM6IGFwYjBfZ2F0ZXNfY2xrIHsKKwkJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtYXBiMC1nYXRlcy1jbGsiOworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljbG9ja3MgPSA8JmFwYjA+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcGIwX3BpbyIsICJhcGIwX2lyIiwKKwkJCQkJCSJhcGIwX3RpbWVyIiwgImFwYjBfcDJ3aSIsCisJCQkJCQkiYXBiMF91YXJ0IiwgImFwYjBfMXdpcmUiLAorCQkJCQkJImFwYjBfaTJjIjsKKwkJCX07CisKKwkJCWFwYjBfcnN0OiBhcGIwX3JzdCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQl9OworCQl9OworCiAJCWNwdWNmZ0AwMWYwMWMwMCB7CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtY3B1Y29uZmlnIjsKIAkJCXJlZyA9IDwweDAxZjAxYzAwIDB4MzAwPjsKIAkJfTsKIAotCQlwcmNtQDAxZjAxYzAwIHsKLQkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1wcmNtIjsKLQkJCXJlZyA9IDwweDAxZjAxNDAwIDB4MjAwPjsKKwkJcl9waW86IHBpbmN0cmxAMDFmMDJjMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXItcGluY3RybCI7CisJCQlyZWcgPSA8MHgwMWYwMmMwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNDUgND4sCisJCQkJICAgICA8MCA0NiA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMF9nYXRlcyAwPjsKKwkJCXJlc2V0cyA9IDwmYXBiMF9yc3QgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkjZ3Bpby1jZWxscyA9IDwzPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZWJvYXJkMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtY3ViaWVib2FyZDIuZHRzCmluZGV4IDY4ZGU4OWYuLmE1YWQ5NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZWJvYXJkMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWN1YmllYm9hcmQyLmR0cwpAQCAtMjAsNiArMjAsMTYgQEAKIAljb21wYXRpYmxlID0gImN1YmlldGVjaCxjdWJpZWJvYXJkMiIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKIAogCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwogCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CiAJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKIAkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWN1YmlldHJ1Y2suZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWN1YmlldHJ1Y2suZHRzCmluZGV4IGNiMjVkM2MuLmI4N2ZlYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZXRydWNrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtY3ViaWV0cnVjay5kdHMKQEAgLTIwLDYgKzIwLDI1IEBACiAJY29tcGF0aWJsZSA9ICJjdWJpZXRlY2gsY3ViaWV0cnVjayIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKIAogCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMzOiBtbWNAMDFjMTIwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jM19waW5zX2E+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192bW1jMz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQlub24tcmVtb3ZhYmxlOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCiAJCXVzYnBoeTogcGh5QDAxYzEzNDAwIHsKIAkJCXVzYjFfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IxX3ZidXM+OwogCQkJdXNiMl92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjJfdmJ1cz47CkBAIC00OCw2ICs2NywxOCBAQAogCQl9OwogCiAJCXBpbmN0cmxAMDFjMjA4MDAgeworCQkJbW1jM19waW5zX2E6IG1tYzNAMCB7CisJCQkJLyogQVA2MjEwIHJlcXVpcmVzIHB1bGwtdXAgKi8KKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwxPjsKKwkJCX07CisKKwkJCXZtbWMzX3Bpbl9jdWJpZXRydWNrOiB2bW1jM19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEg5IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKIAkJCWFoY2lfcHdyX3Bpbl9jdWJpZXRydWNrOiBhaGNpX3B3cl9waW5AMSB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgxMiI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKQEAgLTYzLDYgKzk0LDEyIEBACiAJCQl9OwogCQl9OwogCisJCXB3bTogcHdtQDAxYzIwZTAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnB3bTBfcGluc19hPiwgPCZwd20xX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJdWFydDA6IHNlcmlhbEAwMWMyODAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zX2E+OwpAQCAtMTM5LDQgKzE3NiwxNSBAQAogCXJlZ191c2IyX3ZidXM6IHVzYjItdmJ1cyB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OworCisJcmVnX3ZtbWMzOiB2bW1jMyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ2bW1jM19waW5fY3ViaWV0cnVjaz47CisJCXJlZ3VsYXRvci1uYW1lID0gInZtbWMzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCWdwaW8gPSA8JnBpbyA3IDkgMD47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1pMTItdHZib3guZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NzMwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisvZHRzLXYxLzsKKy9pbmNsdWRlLyAic3VuN2ktYTIwLmR0c2kiCisvaW5jbHVkZS8gInN1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kiCisKKy8geworCW1vZGVsID0gIkkxMiAvIFE1IC8gUVQ4NDBBIEEyMCB0dmJveCI7CisJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsaTEyLXR2Ym94IiwgImFsbHdpbm5lcixzdW43aS1hMjAiOworCisJc29jQDAxYzAwMDAwIHsKKwkJbW1jMDogbW1jQDAxYzBmMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19hPiwgPCZtbWMwX2NkX3Bpbl9yZWZlcmVuY2VfZGVzaWduPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxIDA+OyAvKiBQSDEgKi8KKwkJCWNkLWludmVydGVkOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW1tYzM6IG1tY0AwMWMxMjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMzX3BpbnNfYT47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZtbWMzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CisJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzE0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzE0NDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMTogdXNiQDAxYzFjMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMTogdXNiQDAxYzFjNDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzNfcGluc19hOiBtbWMzQDAgeworCQkJCS8qIEFQNjIxMCAvIEFQNjMzMCByZXF1aXJlcyBwdWxsLXVwICovCisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCisJCQl2bW1jM19waW5faTEyX3R2Ym94OiB2bW1jM19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCXZtbWMzX2lvX3Bpbl9pMTJfdHZib3g6IHZtbWMzX2lvX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDEyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKKwkJCWdtYWNfcG93ZXJfcGluX2kxMl90dmJveDogZ21hY19wb3dlcl9waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgyMSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQlsZWRfcGluc19pMTJfdHZib3g6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIOSIsICJQSDIwIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJdWFydDA6IHNlcmlhbEAwMWMyODAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWdtYWM6IGV0aGVybmV0QDAxYzUwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmdtYWNfcGluc19taWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAibWlpIjsKKwkJCXBoeS1zdXBwbHkgPSA8JnJlZ19nbWFjXzN2Mz47CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZF9waW5zX2kxMl90dmJveD47CisKKwkJcmVkIHsKKwkJCWxhYmVsID0gImkxMl90dmJveDpyZWQ6dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyA5IDE+OworCQl9OworCisJCWJsdWUgeworCQkJbGFiZWwgPSAiaTEyX3R2Ym94OmJsdWU6dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAyMCAwPjsKKwkJfTsKKwl9OworCisJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfdXNiMl92YnVzOiB1c2IyLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ192bW1jMzogdm1tYzMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdm1tYzNfcGluX2kxMl90dmJveD47CisJCXJlZ3VsYXRvci1uYW1lID0gInZtbWMzIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCWdwaW8gPSA8JnBpbyA3IDIgMD47CisJfTsKKworCXJlZ192bW1jM19pbzogdm1tYzMtaW8geworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdm1tYzNfaW9fcGluX2kxMl90dmJveD47CisJCXJlZ3VsYXRvci1uYW1lID0gInZtbWMzLWlvIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkvKiBUaGlzIGNvbnRyb2xzIFZDQy1QSSwgbXVzdCBiZSBhbHdheXMgb24hICovCisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmcGlvIDcgMTIgMD47CisJfTsKKworCXJlZ19nbWFjXzN2MzogZ21hYy0zdjMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZ21hY19wb3dlcl9waW5faTEyX3R2Ym94PjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZ21hYy0zdjMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8NTAwMDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCWdwaW8gPSA8JnBpbyA3IDIxIDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCBlZWFkZjc2Li5iNzU5NjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0cwpAQCAtMzEsNiArMzEsMjYgQEAKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAorCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX3JlZmVyZW5jZV9kZXNpZ24+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJY2QtZ3Bpb3MgPSA8JnBpbyA3IDEgMD47IC8qIFBIMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJbW1jMzogbW1jQDAxYzEyMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8Jm1tYzNfcGluc19hPiwgPCZtbWMzX2NkX3Bpbl9vbGludXhpbm9tPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxMSAwPjsgLyogUEgxMSAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgewogCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CiAJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKQEAgLTY1LDYgKzg1LDEzIEBACiAJCX07CiAKIAkJcGluY3RybEAwMWMyMDgwMCB7CisJCQltbWMzX2NkX3Bpbl9vbGludXhpbm9tOiBtbWMzX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDExIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19pbiI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKwogCQkJbGVkX3BpbnNfb2xpbnV4aW5vOiBsZWRfcGluc0AwIHsKIAkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDIiOwogCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCmluZGV4IGFiYTFjOGEuLjM4NTkzM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCkBAIC01Nyw2ICs1NywxMiBAQAogCQkJICAgICA8MSAxMCAweGYwOD47CiAJfTsKIAorCXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNy1wbXUiLCAiYXJtLGNvcnRleC1hMTUtcG11IjsKKwkJaW50ZXJydXB0cyA9IDwwIDEyMCA0PiwKKwkJCSAgICAgPDAgMTIxIDQ+OworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC00NTUsNiArNDYxLDQyIEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAorCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNWktYTEzLW1tYyI7CisJCQlyZWcgPSA8MHgwMWMwZjAwMCAweDEwMDA+OworCQkJY2xvY2tzID0gPCZhaGJfZ2F0ZXMgOD4sIDwmbW1jMF9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAiYWhiIiwgIm1tYyI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMzIgND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1tYzE6IG1tY0AwMWMxMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41aS1hMTMtbW1jIjsKKwkJCXJlZyA9IDwweDAxYzEwMDAwIDB4MTAwMD47CisJCQljbG9ja3MgPSA8JmFoYl9nYXRlcyA5PiwgPCZtbWMxX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MCAzMyA0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMjogbW1jQDAxYzExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1tbWMiOworCQkJcmVnID0gPDB4MDFjMTEwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiX2dhdGVzIDEwPiwgPCZtbWMyX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MCAzNCA0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbW1jMzogbW1jQDAxYzEyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1tbWMiOworCQkJcmVnID0gPDB4MDFjMTIwMDAgMHgxMDAwPjsKKwkJCWNsb2NrcyA9IDwmYWhiX2dhdGVzIDExPiwgPCZtbWMzX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJhaGIiLCAibW1jIjsKKwkJCWludGVycnVwdHMgPSA8MCAzNSA0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgewogCQkJI3BoeS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjdpLWEyMC11c2ItcGh5IjsKQEAgLTU0OCw2ICs1OTAsMjAgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJI2dwaW8tY2VsbHMgPSA8Mz47CiAKKwkJCXB3bTBfcGluc19hOiBwd20wQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBCMiI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInB3bSI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJcHdtMV9waW5zX2E6IHB3bTFAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEkzIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAicHdtIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCiAJCQl1YXJ0MF9waW5zX2E6IHVhcnQwQDAgewogCQkJCWFsbHdpbm5lcixwaW5zID0gIlBCMjIiLCAiUEIyMyI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInVhcnQwIjsKQEAgLTY2MSw2ICs3MTcsMjcgQEAKIAkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CiAJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CiAJCQl9OworCisJCQltbWMwX3BpbnNfYTogbW1jMEAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQRjAiLCJQRjEiLCJQRjIiLCJQRjMiLCJQRjQiLCJQRjUiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJtbWMwIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8Mj47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQltbWMwX2NkX3Bpbl9yZWZlcmVuY2VfZGVzaWduOiBtbWMwX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX2luIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCisJCQltbWMzX3BpbnNfYTogbW1jM0AwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSTQiLCJQSTUiLCJQSTYiLCJQSTciLCJQSTgiLCJQSTkiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJtbWMzIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8Mj47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OwogCQl9OwogCiAJCXRpbWVyQDAxYzIwYzAwIHsKQEAgLTY4Niw2ICs3NjMsMTQgQEAKIAkJCWludGVycnVwdHMgPSA8MCAyNCA0PjsKIAkJfTsKIAorCQlwd206IHB3bUAwMWMyMGUwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW43aS1hMjAtcHdtIjsKKwkJCXJlZyA9IDwweDAxYzIwZTAwIDB4Yz47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT47CisJCQkjcHdtLWNlbGxzID0gPDM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlzaWQ6IGVlcHJvbUAwMWMyMzgwMCB7CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW43aS1hMjAtc2lkIjsKIAkJCXJlZyA9IDwweDAxYzIzODAwIDB4MjAwPjsKQEAgLTc4NCw2ICs4NjksOCBAQAogCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAogCQlpMmMxOiBpMmNAMDFjMmIwMDAgewpAQCAtNzkzLDYgKzg4MCw4IEBACiAJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMT47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OwogCQl9OwogCiAJCWkyYzI6IGkyY0AwMWMyYjQwMCB7CkBAIC04MDIsNiArODkxLDggQEAKIAkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAyPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCX07CiAKIAkJaTJjMzogaTJjQDAxYzJiODAwIHsKQEAgLTgxMSw2ICs5MDIsOCBAQAogCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDM+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAogCQlpMmM0OiBpMmNAMDFjMmMwMDAgewpAQCAtODIwLDYgKzkxMyw4IEBACiAJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMTU+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAogCQlnbWFjOiBldGhlcm5ldEAwMWM1MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaQppbmRleCAxOGVlYWMwLi4zZDAyMWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kKQEAgLTcyLDQgKzcyLDE4IEBACiAJCWdwaW8gPSA8JnBpbyA3IDMgMD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKKworCXJlZ192Y2MzdjA6IHZjYzN2MCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidmNjM3YwIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCX07CisKKwlyZWdfdmNjM3YzOiB2Y2MzdjMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZjYzN2MyI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LWRhbG1vcmUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQtZGFsbW9yZS5kdHMKaW5kZXggYTI4OGExMjguLjVjMjFkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LWRhbG1vcmUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LWRhbG1vcmUuZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAJCWhkbWlANTQyODAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwogCisJCQloZG1pLXN1cHBseSA9IDwmdmRkXzV2MF9oZG1pPjsKIAkJCXZkZC1zdXBwbHkgPSA8JnZkZF9oZG1pX3JlZz47CiAJCQlwbGwtc3VwcGx5ID0gPCZwYWxtYXNfc21wczNfcmVnPjsKIApAQCAtMzYsNiArMzcsOCBAQAogCQlkc2lANTQzMDAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwogCisJCQlhdmRkLWRzaS1jc2ktc3VwcGx5ID0gPCZhdmRkXzF2Ml9yZWc+OworCiAJCQlwYW5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gInBhbmFzb25pYyx2dngxMGYwMDRiMDAiLAogCQkJCQkgICAgICJzaW1wbGUtcGFuZWwiOwpAQCAtOTgyLDEyICs5ODUsMTAgQEAKIAkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OwogCQkJCQl9OwogCi0JCQkJCWxkbzMgeworCQkJCQlhdmRkXzF2Ml9yZWc6IGxkbzMgewogCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiYXZkZC1kc2ktY3NpIjsKIAkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OwogCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJCX07CiAKIAkJCQkJbGRvNCB7CkBAIC0xMTA1LDYgKzExMDYsNyBAQAogCiAJc2RoY2lANzgwMDA0MDAgewogCQljZC1ncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFYsIDIpIEdQSU9fQUNUSVZFX0xPVz47CisJCXdwLWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oUSwgNCkgR1BJT19BQ1RJVkVfSElHSD47CiAJCWJ1cy13aWR0aCA9IDw0PjsKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CkBAIC0xMjMxLDggKzEyMzMsNiBAQAogCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2hkbWlfNXYwIjsKIAkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OwogCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47Ci0JCQllbmFibGUtYWN0aXZlLWhpZ2g7Ci0JCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oSywgMSkgR1BJT19BQ1RJVkVfSElHSD47CiAJCQl2aW4tc3VwcGx5ID0gPCZ0cHM2NTA5MF9kY2RjMV9yZWc+OwogCQl9OwogCkBAIC0xMjQ1LDYgKzEyNDUsMTcgQEAKIAkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAkJCWdwaW8gPSA8JnBhbG1hc19ncGlvIDYgMD47CiAJCX07CisKKwkJdmRkXzV2MF9oZG1pOiByZWd1bGF0b3JANyB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Nz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfNVYwX0hETUlfQ09OIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oSywgMSkgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQl2aW4tc3VwcGx5ID0gPCZ0cHM2NTA5MF9kY2RjMV9yZWc+OworCQl9OwogCX07CiAKIAlzb3VuZCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1yb3RoLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTE0LXJvdGguZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMGU4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC1yb3RoLmR0cwpAQCAtMCwwICsxLDExMTMgQEAKKy9kdHMtdjEvOworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlICJ0ZWdyYTExNC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJOVklESUEgU0hJRUxEIjsKKwljb21wYXRpYmxlID0gIm52aWRpYSxyb3RoIiwgIm52aWRpYSx0ZWdyYTExNCI7CisKKwljaG9zZW4geworCQkvKiBTSElFTEQncyBib290bG9hZGVyJ3MgYXJndW1lbnRzIG5lZWQgdG8gYmUgb3ZlcnJpZGRlbiAqLworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGNvbnNvbGU9dHR5MSBncHQgZmJjb249cm90YXRlOjEiOworCQkvKiBTSElFTEQncyBib290bG9hZGVyIHdpbGwgcGxhY2UgaW5pdHJkIGF0IHRoaXMgYWRkcmVzcyAqLworCQlsaW51eCxpbml0cmQtc3RhcnQgPSA8MHg4MjAwMDAwMD47CisJCWxpbnV4LGluaXRyZC1lbmQgPSA8MHg4MjgwMDAwMD47CisJfTsKKworCWZpcm13YXJlIHsKKwkJdHJ1c3RlZC1mb3VuZGF0aW9ucyB7CisJCQljb21wYXRpYmxlID0gInRsbSx0cnVzdGVkLWZvdW5kYXRpb25zIjsKKwkJCXRsbSx2ZXJzaW9uLW1ham9yID0gPDI+OworCQkJdGxtLHZlcnNpb24tbWlub3IgPSA8OD47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCS8qIG1lbW9yeSA+PSAweDc5NjAwMDAwIGlzIHJlc2VydmVkIGZvciBmaXJtd2FyZSB1c2FnZSAqLworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDc5NjAwMDAwPjsKKwl9OworCisJcGlubXV4QDcwMDAwODY4IHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZzdGF0ZV9kZWZhdWx0PjsKKworCQlzdGF0ZV9kZWZhdWx0OiBwaW5tdXggeworCQkJY2xrMV9vdXRfcHc0IHsKKwkJCQludmlkaWEscGlucyA9ICJjbGsxX291dF9wdzQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJleHRwZXJpcGgxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWRhcDFfZGluX3BuMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwMV9kaW5fcG4xIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJzMCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwMV9kb3V0X3BuMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwMV9kb3V0X3BuMiIsCisJCQkJCQkiZGFwMV9mc19wbjAiLAorCQkJCQkJImRhcDFfc2Nsa19wbjMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMwIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwMl9kaW5fcGE0IHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAyX2Rpbl9wYTQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlkYXAyX2RvdXRfcGE1IHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAyX2RvdXRfcGE1IiwKKwkJCQkJCSJkYXAyX2ZzX3BhMiIsCisJCQkJCQkiZGFwMl9zY2xrX3BhMyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyczEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlkYXA0X2Rpbl9wcDUgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDRfZGluX3BwNSIsCisJCQkJCQkiZGFwNF9kb3V0X3BwNiIsCisJCQkJCQkiZGFwNF9mc19wcDQiLAorCQkJCQkJImRhcDRfc2Nsa19wcDciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZHZmc19wd21fcHgwIHsKKwkJCQludmlkaWEscGlucyA9ICJkdmZzX3B3bV9weDAiLAorCQkJCQkJImR2ZnNfY2xrX3B4MiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImNsZHZmcyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQl1bHBpX2Nsa19weTAgeworCQkJCW52aWRpYSxwaW5zID0gInVscGlfY2xrX3B5MCIsCisJCQkJCQkidWxwaV9kYXRhMF9wbzEiLAorCQkJCQkJInVscGlfZGF0YTFfcG8yIiwKKwkJCQkJCSJ1bHBpX2RhdGEyX3BvMyIsCisJCQkJCQkidWxwaV9kYXRhM19wbzQiLAorCQkJCQkJInVscGlfZGF0YTRfcG81IiwKKwkJCQkJCSJ1bHBpX2RhdGE1X3BvNiIsCisJCQkJCQkidWxwaV9kYXRhNl9wbzciLAorCQkJCQkJInVscGlfZGF0YTdfcG8wIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWxwaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXVscGlfZGlyX3B5MSB7CisJCQkJbnZpZGlhLHBpbnMgPSAidWxwaV9kaXJfcHkxIiwKKwkJCQkJCSJ1bHBpX254dF9weTIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1bHBpIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1bHBpX3N0cF9weTMgeworCQkJCW52aWRpYSxwaW5zID0gInVscGlfc3RwX3B5MyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVscGkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJY2FtX2kyY19zY2xfcGJiMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiY2FtX2kyY19zY2xfcGJiMSIsCisJCQkJCQkiY2FtX2kyY19zZGFfcGJiMiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsbG9jayA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLG9wZW4tZHJhaW4gPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWNhbV9tY2xrX3BjYzAgeworCQkJCW52aWRpYSxwaW5zID0gImNhbV9tY2xrX3BjYzAiLAorCQkJCQkJInBiYjAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ2aV9hbHQzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxsb2NrID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwYmI0IHsKKwkJCQludmlkaWEscGlucyA9ICJwYmI0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidmdwNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsbG9jayA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ2VuMl9pMmNfc2NsX3B0NSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ2VuMl9pMmNfc2NsX3B0NSIsCisJCQkJCQkiZ2VuMl9pMmNfc2RhX3B0NiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsbG9jayA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLG9wZW4tZHJhaW4gPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWdtaV9hMTZfcGo3IHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfYTE2X3BqNyIsCisJCQkJCQkiZ21pX2ExOV9wazciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1YXJ0ZCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlnbWlfYTE3X3BiMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ21pX2ExN19wYjAiLAorCQkJCQkJImdtaV9hMThfcGIxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdtaV9hZDVfcGc1IHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfYWQ1X3BnNSIsCisJCQkJCQkiZ21pX3dyX25fcGkwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3BpNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdtaV9hZDZfcGc2IHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfYWQ2X3BnNiIsCisJCQkJCQkiZ21pX2FkN19wZzciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzcGk0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdtaV9hZDEyX3BoNCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ21pX2FkMTJfcGg0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ21pX2NzNl9uX3BpMTMgeworCQkJCW52aWRpYSxwaW5zID0gImdtaV9jczZfbl9waTMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJuYW5kIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ21pX2FkOV9waDEgeworCQkJCW52aWRpYSxwaW5zID0gImdtaV9hZDlfcGgxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicHdtMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlnbWlfY3MxX25fcGoyIHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfY3MxX25fcGoyIiwKKwkJCQkJCSJnbWlfb2Vfbl9waTEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzb2MiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdtaV9yc3Rfbl9waTQgeworCQkJCW52aWRpYSxwaW5zID0gImdtaV9yc3Rfbl9waTQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ21pX2lvcmR5X3BpNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ21pX2lvcmR5X3BpNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJY2xrMl9vdXRfcHc1IHsKKwkJCQludmlkaWEscGlucyA9ICJjbGsyX291dF9wdzUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJleHRwZXJpcGgyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWMxX2Nsa19wejAgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jMV9jbGtfcHowIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXNkbW1jMV9jbWRfcHoxIHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzFfY21kX3B6MSIsCisJCQkJCQkic2RtbWMxX2RhdDBfcHk3IiwKKwkJCQkJCSJzZG1tYzFfZGF0MV9weTYiLAorCQkJCQkJInNkbW1jMV9kYXQyX3B5NSIsCisJCQkJCQkic2RtbWMxX2RhdDNfcHk0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jM19jbGtfcGE2IHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzNfY2xrX3BhNiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlzZG1tYzNfY21kX3BhNyB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWMzX2NtZF9wYTciLAorCQkJCQkJInNkbW1jM19kYXQwX3BiNyIsCisJCQkJCQkic2RtbWMzX2RhdDFfcGI2IiwKKwkJCQkJCSJzZG1tYzNfZGF0Ml9wYjUiLAorCQkJCQkJInNkbW1jM19kYXQzX3BiNCIsCisJCQkJCQkic2RtbWMzX2NkX25fcHYyIiwKKwkJCQkJCSJzZG1tYzNfY2xrX2xiX291dF9wZWU0IiwKKwkJCQkJCSJzZG1tYzNfY2xrX2xiX2luX3BlZTUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2JfY29sNF9wcTQgeworCQkJCW52aWRpYSxwaW5zID0gImtiX2NvbDRfcHE0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWMzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzRfY2xrX3BjYzQgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jNF9jbGtfcGNjNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlzZG1tYzRfY21kX3B0NyB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWM0X2NtZF9wdDciLAorCQkJCQkJInNkbW1jNF9kYXQwX3BhYTAiLAorCQkJCQkJInNkbW1jNF9kYXQxX3BhYTEiLAorCQkJCQkJInNkbW1jNF9kYXQyX3BhYTIiLAorCQkJCQkJInNkbW1jNF9kYXQzX3BhYTMiLAorCQkJCQkJInNkbW1jNF9kYXQ0X3BhYTQiLAorCQkJCQkJInNkbW1jNF9kYXQ1X3BhYTUiLAorCQkJCQkJInNkbW1jNF9kYXQ2X3BhYTYiLAorCQkJCQkJInNkbW1jNF9kYXQ3X3BhYTciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJY2xrXzMya19vdXRfcGEwIHsKKwkJCQludmlkaWEscGlucyA9ICJjbGtfMzJrX291dF9wYTAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJibGluayI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlrYl9jb2wwX3BxMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sMF9wcTAiLAorCQkJCQkJImtiX2NvbDFfcHExIiwKKwkJCQkJCSJrYl9jb2wyX3BxMiIsCisJCQkJCQkia2Jfcm93MF9wcjAiLAorCQkJCQkJImtiX3JvdzFfcHIxIiwKKwkJCQkJCSJrYl9yb3cyX3ByMiIsCisJCQkJCQkia2Jfcm93OF9wczAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJrYmMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2Jfcm93N19wcjcgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzdfcHI3IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2Jfcm93MTBfcHMyIHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3cxMF9wczIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1YXJ0YSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2Jfcm93OV9wczEgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzlfcHMxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcHdyX2kyY19zY2xfcHo2IHsKKwkJCQludmlkaWEscGlucyA9ICJwd3JfaTJjX3NjbF9wejYiLAorCQkJCQkJInB3cl9pMmNfc2RhX3B6NyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyY3B3ciI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxsb2NrID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJc3lzX2Nsa19yZXFfcHo1IHsKKwkJCQludmlkaWEscGlucyA9ICJzeXNfY2xrX3JlcV9wejUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzeXNjbGsiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJY29yZV9wd3JfcmVxIHsKKwkJCQludmlkaWEscGlucyA9ICJjb3JlX3B3cl9yZXEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJwd3JvbiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQljcHVfcHdyX3JlcSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiY3B1X3B3cl9yZXEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJjcHUiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcHdyX2ludF9uIHsKKwkJCQludmlkaWEscGlucyA9ICJwd3JfaW50X24iOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJwbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXJlc2V0X291dF9uIHsKKwkJCQludmlkaWEscGlucyA9ICJyZXNldF9vdXRfbiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJlc2V0X291dF9uIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWNsazNfb3V0X3BlZTAgeworCQkJCW52aWRpYSxwaW5zID0gImNsazNfb3V0X3BlZTAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJleHRwZXJpcGgzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWdlbjFfaTJjX3NjbF9wYzQgeworCQkJCW52aWRpYSxwaW5zID0gImdlbjFfaTJjX3NjbF9wYzQiLAorCQkJCQkJImdlbjFfaTJjX3NkYV9wYzUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMmMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGxvY2sgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxvcGVuLWRyYWluID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQl1YXJ0Ml9jdHNfbl9wajUgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQyX2N0c19uX3BqNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRiIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1YXJ0Ml9ydHNfbl9wajYgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQyX3J0c19uX3BqNiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRiIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVhcnQyX3J4ZF9wYzMgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQyX3J4ZF9wYzMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpcmRhIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1YXJ0Ml90eGRfcGMyIHsKKwkJCQludmlkaWEscGlucyA9ICJ1YXJ0Ml90eGRfcGMyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaXJkYSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQl1YXJ0M19jdHNfbl9wYTEgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQzX2N0c19uX3BhMSIsCisJCQkJCQkidWFydDNfcnhkX3B3NyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRjIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1YXJ0M19ydHNfbl9wYzAgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQzX3J0c19uX3BjMCIsCisJCQkJCQkidWFydDNfdHhkX3B3NiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRjIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCW93ciB7CisJCQkJbnZpZGlhLHBpbnMgPSAib3dyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAib3dyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJaGRtaV9jZWNfcGVlMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAiaGRtaV9jZWNfcGVlMyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImNlYyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxsb2NrID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZGRjX3NjbF9wdjQgeworCQkJCW52aWRpYSxwaW5zID0gImRkY19zY2xfcHY0IiwKKwkJCQkJCSJkZGNfc2RhX3B2NSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsbG9jayA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLHJjdi1zZWwgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc3BkaWZfaW5fcGs2IHsKKwkJCQludmlkaWEscGlucyA9ICJzcGRpZl9pbl9wazYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1c2IiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGxvY2sgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVzYl92YnVzX2VuMF9wbjQgeworCQkJCW52aWRpYSxwaW5zID0gInVzYl92YnVzX2VuMF9wbjQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1c2IiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGxvY2sgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxvcGVuLWRyYWluID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdwaW9feDZfYXVkX3B4NiB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ3Bpb194Nl9hdWRfcHg2IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3BpNiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdwaW9feDFfYXVkX3B4MSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ3Bpb194MV9hdWRfcHgxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlncGlvX3g3X2F1ZF9weDcgeworCQkJCW52aWRpYSxwaW5zID0gImdwaW9feDdfYXVkX3B4NyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ21pX2Fkdl9uX3BrMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ21pX2Fkdl9uX3BrMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ21pX2NzMF9uX3BqMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ21pX2NzMF9uX3BqMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwdTMgeworCQkJCW52aWRpYSxwaW5zID0gInB1MyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInB3bTAiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ3Bpb194NF9hdWRfcHg0IHsKKwkJCQludmlkaWEscGlucyA9ICJncGlvX3g0X2F1ZF9weDQiLAorCQkJCQkJImdwaW9feDVfYXVkX3B4NSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdwaW9feDNfYXVkX3B4MyB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ3Bpb194M19hdWRfcHgzIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ3Bpb193Ml9hdWRfcHcyIHsKKwkJCQludmlkaWEscGlucyA9ICJncGlvX3cyX2F1ZF9wdzIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlncGlvX3czX2F1ZF9wdzMgeworCQkJCW52aWRpYSxwaW5zID0gImdwaW9fdzNfYXVkX3B3MyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNwaTYiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwM19mc19wcDAgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDNfZnNfcHAwIiwKKwkJCQkJCSJkYXAzX2Rpbl9wcDEiLAorCQkJCQkJImRhcDNfZG91dF9wcDIiLAorCQkJCQkJImRhcDNfc2Nsa19wcDMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXB2MCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicHYwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwdjEgeworCQkJCW52aWRpYSxwaW5zID0gInB2MSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGJiMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGJiMyIsCisJCQkJCQkicGJiNSIsCisJCQkJCQkicGJiNiIsCisJCQkJCQkicGJiNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQ0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBjYzEgeworCQkJCW52aWRpYSxwaW5zID0gInBjYzEiLAorCQkJCQkJInBjYzIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdtaV9hZDBfcGcwIHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfYWQwX3BnMCIsCisJCQkJCQkiZ21pX2FkMV9wZzEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ21pX2FkMTBfcGgyIHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfYWQxMF9waDIiLAorCQkJCQkJImdtaV9hZDEyX3BoNCIsCisJCQkJCQkiZ21pX2FkMTVfcGg3IiwKKwkJCQkJCSJnbWlfY3MzX25fcGs0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZ21pIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlnbWlfYWQxMV9waDMgeworCQkJCW52aWRpYSxwaW5zID0gImdtaV9hZDExX3BoMyIsCisJCQkJCQkiZ21pX2FkMTNfcGg1IiwKKwkJCQkJCSJnbWlfYWQ4X3BoMCIsCisJCQkJCQkiZ21pX2Nsa19wazEiLAorCQkJCQkJImdtaV9jczJfbl9wazMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ21pX2FkMTRfcGg2IHsKKwkJCQludmlkaWEscGlucyA9ICJnbWlfYWQxNF9waDYiLAorCQkJCQkJImdtaV9jczBfbl9wajAiLAorCQkJCQkJImdtaV9jczRfbl9wazIiLAorCQkJCQkJImdtaV9jczdfbl9waTYiLAorCQkJCQkJImdtaV9kcXNfcF9wajMiLAorCQkJCQkJImdtaV93cF9uX3BjNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlnbWlfYWQyX3BnMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ21pX2FkMl9wZzIiLAorCQkJCQkJImdtaV9hZDNfcGczIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZ21pIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWMxX3dwX25fcHYzIHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzFfd3Bfbl9wdjMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzcGk0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQljbGsyX3JlcV9wY2M1IHsKKwkJCQludmlkaWEscGlucyA9ICJjbGsyX3JlcV9wY2M1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJa2JfY29sM19wcTMgeworCQkJCW52aWRpYSxwaW5zID0gImtiX2NvbDNfcHEzIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicHdtMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlrYl9jb2w1X3BxNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sNV9wcTUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJrYmMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2JfY29sNl9wcTYgeworCQkJCW52aWRpYSxwaW5zID0gImtiX2NvbDZfcHE2IiwKKwkJCQkJCSJrYl9jb2w3X3BxNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImtiYyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJa2Jfcm93M19wcjMgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzNfcHIzIiwKKwkJCQkJCSJrYl9yb3c0X3ByNCIsCisJCQkJCQkia2Jfcm93Nl9wcjYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJrYmMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQljbGszX3JlcV9wZWUxIHsKKwkJCQludmlkaWEscGlucyA9ICJjbGszX3JlcV9wZWUxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcHUyIHsKKwkJCQludmlkaWEscGlucyA9ICJwdTIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQloZG1pX2ludF9wbjcgeworCQkJCW52aWRpYSxwaW5zID0gImhkbWlfaW50X3BuNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCisJCQlkcml2ZV9zZGlvMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZHJpdmVfc2RpbzEiOworCQkJCW52aWRpYSxoaWdoLXNwZWVkLW1vZGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLHNjaG1pdHQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxsb3ctcG93ZXItbW9kZSA9IDxURUdSQV9QSU5fTFBfRFJJVkVfRElWXzE+OworCQkJCW52aWRpYSxwdWxsLWRvd24tc3RyZW5ndGggPSA8MzY+OworCQkJCW52aWRpYSxwdWxsLXVwLXN0cmVuZ3RoID0gPDIwPjsKKwkJCQludmlkaWEsc2xldy1yYXRlLXJpc2luZyA9IDxURUdSQV9QSU5fU0xFV19SQVRFX1NMT1c+OworCQkJCW52aWRpYSxzbGV3LXJhdGUtZmFsbGluZyA9IDxURUdSQV9QSU5fU0xFV19SQVRFX1NMT1c+OworCQkJfTsKKwkJCWRyaXZlX3NkaW8zIHsKKwkJCQludmlkaWEscGlucyA9ICJkcml2ZV9zZGlvMyI7CisJCQkJbnZpZGlhLGhpZ2gtc3BlZWQtbW9kZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsc2NobWl0dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGxvdy1wb3dlci1tb2RlID0gPFRFR1JBX1BJTl9MUF9EUklWRV9ESVZfMT47CisJCQkJbnZpZGlhLHB1bGwtZG93bi1zdHJlbmd0aCA9IDwzNj47CisJCQkJbnZpZGlhLHB1bGwtdXAtc3RyZW5ndGggPSA8MjA+OworCQkJCW52aWRpYSxzbGV3LXJhdGUtcmlzaW5nID0gPFRFR1JBX1BJTl9TTEVXX1JBVEVfRkFTVEVTVD47CisJCQkJbnZpZGlhLHNsZXctcmF0ZS1mYWxsaW5nID0gPFRFR1JBX1BJTl9TTEVXX1JBVEVfRkFTVEVTVD47CisJCQl9OworCQkJZHJpdmVfZ21hIHsKKwkJCQludmlkaWEscGlucyA9ICJkcml2ZV9nbWEiOworCQkJCW52aWRpYSxoaWdoLXNwZWVkLW1vZGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLHNjaG1pdHQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxsb3ctcG93ZXItbW9kZSA9IDxURUdSQV9QSU5fTFBfRFJJVkVfRElWXzE+OworCQkJCW52aWRpYSxwdWxsLWRvd24tc3RyZW5ndGggPSA8Mj47CisJCQkJbnZpZGlhLHB1bGwtdXAtc3RyZW5ndGggPSA8Mj47CisJCQkJbnZpZGlhLHNsZXctcmF0ZS1yaXNpbmcgPSA8VEVHUkFfUElOX1NMRVdfUkFURV9GQVNURVNUPjsKKwkJCQludmlkaWEsc2xldy1yYXRlLWZhbGxpbmcgPSA8VEVHUkFfUElOX1NMRVdfUkFURV9GQVNURVNUPjsKKwkJCQludmlkaWEsZHJpdmUtdHlwZSA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCS8qIFVzYWJsZSBvbiByZXdvcmtlZCBkZXZpY2VzIG9ubHkgKi8KKwlzZXJpYWxANzAwMDYzMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXB3bUA3MDAwYTAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJaTJjQDcwMDBkMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCQlyZWd1bGF0b3JANDMgeworCQkJY29tcGF0aWJsZSA9ICJ0aSx0cHM1MTYzMiI7CisJCQlyZWcgPSA8MHg0Mz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQtY3B1IjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTIwMDAwPjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJfTsKKworCQlwYWxtYXM6IHBtaWNANTggeworCQkJY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMiOworCQkJcmVnID0gPDB4NTg+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg2IElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKworCQkJdGksc3lzdGVtLXBvd2VyLWNvbnRyb2xsZXI7CisKKwkJCXBhbG1hc19ncGlvOiBncGlvIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1ncGlvIjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQl9OworCisJCQlwbWljIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHRwczY1OTEzLXBtaWMiLCAidGkscGFsbWFzLXBtaWMiOworCisJCQkJcmVndWxhdG9ycyB7CisJCQkJCXNtcHMxMiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQtZGRyIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJdmRkXzF2ODogc21wczMgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkLTF2OCI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXNtcHM0NTcgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkLXNvYyI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTQwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJc21wczggeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiYXZkZC1wbGwtMXYwNSI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXNtcHM5IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZC0ydjg1LWVtbWMiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisKKwkJCQkJc21wczEwX291dDEgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkLWZhbiI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXNtcHMxMF9vdXQyIHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZC01djAtc3lzIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJbGRvMiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQtMnY4LWRpc3BsYXkiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCWxkbzMgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiYXZkZC0xdjIiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQlsZG80IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZwcC1mdXNlIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCX07CisKKwkJCQkJbGRvNSB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJhdmRkLWhkbWktcGxsIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCX07CisKKwkJCQkJbGRvNiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQtc2Vuc29yLTJ2OCI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4NTAwMDA+OworCQkJCQl9OworCisJCQkJCWxkbzggeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkLXJ0YyI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQkJdGksZW5hYmxlLWxkbzgtdHJhY2tpbmc7CisJCQkJCX07CisKKwkJCQkJdmRkaW9fc2RtbWMzOiBsZG85IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZGlvLXNkbW1jMyI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCWxkb3VzYiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJhdmRkLXVzYi1oZG1pIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJdmRkXzN2M19zeXM6IHJlZ2VuMSB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJyYWlsLTN2MyI7CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQlyZWdlbjIgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAicmFpbC01djAiOworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQl9OworCQkJfTsKKworCQkJcnRjIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1ydGMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnBhbG1hcz47CisJCQkJaW50ZXJydXB0cyA9IDw4IDA+OworCQkJfTsKKworCQl9OworCX07CisKKwlwbWNANzAwMGU0MDAgeworCQludmlkaWEsaW52ZXJ0LWludGVycnVwdDsKKwl9OworCisJLyogU0QgY2FyZCAqLworCXNkaGNpQDc4MDAwNDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQlidXMtd2lkdGggPSA8ND47CisJCXZtbWMtc3VwcGx5ID0gPCZ2ZGRpb19zZG1tYzM+OworCQljZC1ncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFYsIDIpIEdQSU9fQUNUSVZFX0xPVz47CisJCXBvd2VyLWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oSCwgMCkgR1BJT19BQ1RJVkVfSElHSD47CisJfTsKKworCS8qIGVNTUMgKi8KKwlzZGhjaUA3ODAwMDYwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJYnVzLXdpZHRoID0gPDg+OworCQl2bW1jLXN1cHBseSA9IDwmdmRkXzF2OD47CisJCW5vbi1yZW1vdmFibGU7CisJfTsKKworCS8qIEV4dGVybmFsIFVTQiBwb3J0IChtdXN0IGJlIHBvd2VyZWQpICovCisJdXNiQDdkMDAwMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwl1c2ItcGh5QDdkMDAwMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQludmlkaWEseGN2ci1zZXR1cCA9IDw3PjsKKwkJbnZpZGlhLHhjdnItbHNmc2xldyA9IDwyPjsKKwkJbnZpZGlhLHhjdnItbHNyc2xldyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkvKiBTaG91bGQgYmUgY2hhbmdlZCB0byAib3RnIiBvbmNlIHdlIGhhdmUgdmJ1c19zdXBwbHkgKi8KKwkJLyogQXMgb2Ygbm93LCBVU0IgZGV2aWNlcyBuZWVkIHRvIGJlIHBvd2VyZWQgZXh0ZXJuYWxseSAqLworCQlkcl9tb2RlID0gImhvc3QiOworCX07CisKKwkvKiBTSElFTEQgY29udHJvbGxlciAqLworCXVzYkA3ZDAwODAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJdXNiLXBoeUA3ZDAwODAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJbnZpZGlhLHhjdnItc2V0dXAgPSA8Nz47CisJCW52aWRpYSx4Y3ZyLWxzZnNsZXcgPSA8Mj47CisJCW52aWRpYSx4Y3ZyLWxzcnNsZXcgPSA8Mj47CisJfTsKKworCWJhY2tsaWdodDogYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKwkJcHdtcyA9IDwmcHdtIDEgNDAwMDA+OworCisJCWJyaWdodG5lc3MtbGV2ZWxzID0gPDAgNCA4IDE2IDMyIDY0IDEyOCAyNTU+OworCQlkZWZhdWx0LWJyaWdodG5lc3MtbGV2ZWwgPSA8Nj47CisKKwkJcG93ZXItc3VwcGx5ID0gPCZsY2RfYmxfZW4+OworCQllbmFibGUtZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhILCAyKSBHUElPX0FDVElWRV9ISUdIPjsKKwl9OworCisJY2xvY2tzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNsazMya19pbjogY2xvY2sgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQlyZWc9PDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCWJhY2sgeworCQkJbGFiZWwgPSAiQmFjayI7CisJCQlncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFIsIDIpIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxjb2RlID0gPEtFWV9CQUNLPjsKKwkJfTsKKworCQlob21lIHsKKwkJCWxhYmVsID0gIkhvbWUiOworCQkJZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhSLCAxKSBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfSE9NRT47CisJCX07CisKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiUG93ZXIiOworCQkJZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhRLCAwKSBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWxjZF9ibF9lbjogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAibGNkX2JsX2VuIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJfTsKKworCQlyZWd1bGF0b3JAMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbGNkXzF2OCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJdmluLXN1cHBseSA9IDwmdmRkXzF2OD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oVSwgNCkgR1BJT19BQ1RJVkVfSElHSD47CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJfTsKKworCQlyZWd1bGF0b3JAMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfMXY4X3RzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oSywgMykgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQl9OworCisJCXJlZ3VsYXRvckAzIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8zdjNfdHMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCWdwaW8gPSA8JmdwaW8gVEVHUkFfR1BJTyhILCA1KSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQl9OworCisJCXJlZ3VsYXRvckA0IHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDw0PjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8xdjhfY29tIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfMXY4PjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCWdwaW8gPSA8JmdwaW8gVEVHUkFfR1BJTyhYLCAxKSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQl9OworCisJCXJlZ3VsYXRvckA1IHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8zdjNfY29tIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfM3YzX3N5cz47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oWCwgNykgR1BJT19BQ1RJVkVfSElHSD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTExNC10bjcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQtdG43LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjM2NjIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMTQtdG43LmR0cwpAQCAtMCwwICsxLDM0OCBAQAorL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorI2luY2x1ZGUgInRlZ3JhMTE0LmR0c2kiCisKKy8geworCW1vZGVsID0gIlRlZ3JhIE5vdGUgNyI7CisJY29tcGF0aWJsZSA9ICJudmlkaWEsdG43IiwgIm52aWRpYSx0ZWdyYTExNCI7CisKKwljaG9zZW4geworCQkvKiBUTjcncyBib290bG9hZGVyJ3MgYXJndW1lbnRzIG5lZWQgdG8gYmUgb3ZlcnJpZGRlbiAqLworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGNvbnNvbGU9dHR5MSBncHQgZmJjb249cm90YXRlOjIiOworCQkvKiBUTjcncyBib290bG9hZGVyIHdpbGwgcGxhY2UgaW5pdHJkIGF0IHRoaXMgYWRkcmVzcyAqLworCQlsaW51eCxpbml0cmQtc3RhcnQgPSA8MHg4MjAwMDAwMD47CisJCWxpbnV4LGluaXRyZC1lbmQgPSA8MHg4MjgwMDAwMD47CisJfTsKKworCWZpcm13YXJlIHsKKwkJdHJ1c3RlZC1mb3VuZGF0aW9ucyB7CisJCQljb21wYXRpYmxlID0gInRsbSx0cnVzdGVkLWZvdW5kYXRpb25zIjsKKwkJCXRsbSx2ZXJzaW9uLW1ham9yID0gPDI+OworCQkJdGxtLHZlcnNpb24tbWlub3IgPSA8OD47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCS8qIG1lbW9yeSA+PSAweDM3ZTAwMDAwIGlzIHJlc2VydmVkIGZvciBmaXJtd2FyZSB1c2FnZSAqLworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDM3ZTAwMDAwPjsKKwl9OworCisJaG9zdDF4QDUwMDAwMDAwIHsKKwkJZHNpQDU0MzAwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJdmRkLXN1cHBseSA9IDwmdmRkXzF2Ml9hcD47CisKKwkJCXBhbmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAibGcsbGQwNzB3eDMtc2wwMSI7CisJCQkJcmVnID0gPDA+OworCisJCQkJcG93ZXItc3VwcGx5ID0gPCZ2ZGRfbGNkPjsKKwkJCQliYWNrbGlnaHQgPSA8JmJhY2tsaWdodD47CisJCQl9OworCQl9OworCX07CisKKwlzZXJpYWxANzAwMDYzMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXB3bUA3MDAwYTAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJaTJjQDcwMDBkMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCQlwYWxtYXM6IHBtaWNANTggeworCQkJY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMiOworCQkJcmVnID0gPDB4NTg+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg2IElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKworCQkJdGksc3lzdGVtLXBvd2VyLWNvbnRyb2xsZXI7CisKKwkJCXBhbG1hc19ncGlvOiBncGlvIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1ncGlvIjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQl9OworCisJCQlwbWljIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHRwczY1OTEzLXBtaWMiLCAidGkscGFsbWFzLXBtaWMiOworCisJCQkJbGRvbG4taW4tc3VwcGx5ID0gPCZ2ZGRfc21wczEwX291dDI+OworCisJCQkJcmVndWxhdG9ycyB7CisJCQkJCXNtcHMxMjMgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmQtY3B1IjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJc21wczQ1IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkLXNvYyI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXNtcHM2IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZhLWxjZC1odiI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXNtcHM3IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkLWRkciI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXZkZF8xdjg6IHNtcHM4IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZzLXBtdS0xdjgiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQl2ZGRfMnY5X3N5czogc21wczkgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidnMtc3lzLTJ2OSI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyOTAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI5MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQl9OworCisJCQkJCXZkZF9zbXBzMTBfb3V0MTogc21wczEwX291dDEgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmQtc21wczEwLW91dDEiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQl2ZGRfc21wczEwX291dDI6IHNtcHMxMF9vdXQyIHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkLXNtcHMxMC1vdXQyIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJbGRvMSB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YS1wbGx4IjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJdmRkXzF2Ml9hcDogbGRvMiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YS1hcC0xdjIiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQlsZG8zIHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkLWZ1c2UiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQlsZG80IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkLXRzLWh2IjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMyMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzIwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJbGRvNSB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YS1jYW0yLWh2IjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI3MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjcwMDAwMD47CisJCQkJCX07CisKKwkJCQkJbGRvNiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YS1zbnMtaHYiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8Mjg1MDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKKwkJCQkJfTsKKworCQkJCQlsZG83IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZhLWNhbTEtaHYiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjcwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKwkJCQkJfTsKKworCQkJCQlsZG84IHsKKwkJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZhLWFwLXJ0YyI7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQkJdGksZW5hYmxlLWxkbzgtdHJhY2tpbmc7CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCX07CisKKwkJCQkJbGRvOSB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2aS1zZGNhcmQiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjkwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyOTAwMDAwPjsKKwkJCQkJfTsKKworCQkJCQlsZG91c2IgeworCQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiYXZkZC11c2IiOworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJfTsKKworCQkJCQlsZG9sbiB7CisJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YS1oZG1pIjsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCXJ0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMtcnRjIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwYWxtYXM+OworCQkJCWludGVycnVwdHMgPSA8OCAwPjsKKwkJCX07CisKKwkJfTsKKwl9OworCisJcG1jQDcwMDBlNDAwIHsKKwkJbnZpZGlhLGludmVydC1pbnRlcnJ1cHQ7CisJfTsKKworCS8qIGVNTUMgKi8KKwlzZGhjaUA3ODAwMDYwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJYnVzLXdpZHRoID0gPDg+OworCQl2bW1jLXN1cHBseSA9IDwmdmRkXzF2OD47CisJCW5vbi1yZW1vdmFibGU7CisJfTsKKworCXVzYkA3ZDAwMDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJdXNiLXBoeUA3ZDAwMDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJbnZpZGlhLHhjdnItc2V0dXAgPSA8Nz47CisJCW52aWRpYSx4Y3ZyLWxzZnNsZXcgPSA8Mj47CisJCW52aWRpYSx4Y3ZyLWxzcnNsZXcgPSA8Mj47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJLyogU2hvdWxkIGJlIGNoYW5nZWQgdG8gIm90ZyIgb25jZSB3ZSBoYXZlIHZidXNfc3VwcGx5ICovCisJCS8qIEFzIG9mIG5vdywgVVNCIGRldmljZXMgbmVlZCB0byBiZSBwb3dlcmVkIGV4dGVybmFsbHkgKi8KKwkJZHJfbW9kZSA9ICJob3N0IjsKKwl9OworCisJYmFja2xpZ2h0OiBiYWNrbGlnaHQgeworCQljb21wYXRpYmxlID0gInB3bS1iYWNrbGlnaHQiOworCQlwd21zID0gPCZwd20gMSA0MDAwMD47CisKKwkJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCA0IDggMTYgMzIgNjQgMTI4IDI1NT47CisJCWRlZmF1bHQtYnJpZ2h0bmVzcy1sZXZlbCA9IDw2PjsKKworCQlwb3dlci1zdXBwbHkgPSA8JmxjZF9ibF9lbj47CisJfTsKKworCWNsb2NrcyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljbGszMmtfaW46IGNsb2NrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJcmVnID0gPDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCXBvd2VyIHsKKwkJCWxhYmVsID0gIlBvd2VyIjsKKwkJCWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oUSwgMCkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1BPV0VSPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKworCQl2b2x1bWVfZG93biB7CisJCQlsYWJlbCA9ICJWb2x1bWUgRG93biI7CisJCQlncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFEsIDIpIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxjb2RlID0gPEtFWV9WT0xVTUVET1dOPjsKKwkJfTsKKworCQl2b2x1bWVfdXAgeworCQkJbGFiZWwgPSAiVm9sdW1lIFVwIjsKKwkJCWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oUiwgMikgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1ZPTFVNRVVQPjsKKwkJfTsKKwl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkvKiBGSVhNRTogb3V0cHV0IG9mIEJRMjQxOTIgKi8KKwkJdnNfc3lzOiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MD47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJWU19TWVMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NDIwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw0MjAwMDAwPjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJfTsKKworCQlsY2RfYmxfZW46IHJlZ3VsYXRvckAxIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwxPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9MQ0RfQkwiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTY1MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTY1MDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbyBURUdSQV9HUElPKEgsIDIpIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJdmluLXN1cHBseSA9IDwmdnNfc3lzPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQl9OworCisJCXZkZF9sY2Q6IHJlZ3VsYXRvckAyIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlZEX0xDRF8xVjgiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCWdwaW8gPSA8JnBhbG1hc19ncGlvIDQgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfMXY4PjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtamV0c29uLXRrMS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1qZXRzb24tdGsxLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzFmYjYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtamV0c29uLXRrMS5kdHMKQEAgLTAsMCArMSwxODI3IEBACisvZHRzLXYxLzsKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSAidGVncmExMjQuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTlZJRElBIFRlZ3JhMTI0IEpldHNvbiBUSzEiOworCWNvbXBhdGlibGUgPSAibnZpZGlhLGpldHNvbi10azEiLCAibnZpZGlhLHRlZ3JhMTI0IjsKKworCWFsaWFzZXMgeworCQlydGMwID0gIi9pMmNAMCw3MDAwZDAwMC9wbWljQDQwIjsKKwkJcnRjMSA9ICIvcnRjQDAsNzAwMGUwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHgwIDB4ODAwMDAwMDAgMHgwIDB4ODAwMDAwMDA+OworCX07CisKKwlob3N0MXhAMCw1MDAwMDAwMCB7CisJCWhkbWlAMCw1NDI4MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCWhkbWktc3VwcGx5ID0gPCZ2ZGRfNXYwX2hkbWk+OworCQkJcGxsLXN1cHBseSA9IDwmdmRkX2hkbWlfcGxsPjsKKwkJCXZkZC1zdXBwbHkgPSA8JnZkZF8zdjNfaGRtaT47CisKKwkJCW52aWRpYSxkZGMtaTJjLWJ1cyA9IDwmaGRtaV9kZGM+OworCQkJbnZpZGlhLGhwZC1ncGlvID0KKwkJCQk8JmdwaW8gVEVHUkFfR1BJTyhOLCA3KSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwl9OworCisJcGlubXV4OiBwaW5tdXhAMCw3MDAwMDg2OCB7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmc3RhdGVfZGVmYXVsdD47CisKKwkJc3RhdGVfZGVmYXVsdDogcGlubXV4IHsKKwkJCWNsa18zMmtfb3V0X3BhMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiY2xrXzMya19vdXRfcGEwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic29jIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXVhcnQzX2N0c19uX3BhMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAidWFydDNfY3RzX25fcGExIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwMl9mc19wYTIgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDJfZnNfcGEyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJzMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWRhcDJfc2Nsa19wYTMgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDJfc2Nsa19wYTMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwMl9kaW5fcGE0IHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAyX2Rpbl9wYTQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwMl9kb3V0X3BhNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwMl9kb3V0X3BhNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyczEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzNfY2xrX3BhNiB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWMzX2Nsa19wYTYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJc2RtbWMzX2NtZF9wYTcgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jM19jbWRfcGE3IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWMzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBiMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGIwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGIxIHsKKwkJCQludmlkaWEscGlucyA9ICJwYjEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1YXJ0ZCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzNfZGF0M19wYjQgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jM19kYXQzX3BiNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzNfZGF0Ml9wYjUgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jM19kYXQyX3BiNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzNfZGF0MV9wYjYgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jM19kYXQxX3BiNiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzNfZGF0MF9wYjcgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jM19kYXQwX3BiNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1YXJ0M19ydHNfbl9wYzAgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQzX3J0c19uX3BjMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRjIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVhcnQyX3R4ZF9wYzIgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQyX3R4ZF9wYzIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpcmRhIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVhcnQyX3J4ZF9wYzMgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQyX3J4ZF9wYzMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpcmRhIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdlbjFfaTJjX3NjbF9wYzQgeworCQkJCW52aWRpYSxwaW5zID0gImdlbjFfaTJjX3NjbF9wYzQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMmMxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLG9wZW4tZHJhaW4gPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ2VuMV9pMmNfc2RhX3BjNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ2VuMV9pMmNfc2RhX3BjNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwYzcgeworCQkJCW52aWRpYSxwaW5zID0gInBjNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBnMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGcwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcGcxIHsKKwkJCQludmlkaWEscGlucyA9ICJwZzEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwZzIgeworCQkJCW52aWRpYSxwaW5zID0gInBnMiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGczIHsKKwkJCQludmlkaWEscGlucyA9ICJwZzMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBnNCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGc0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3BpNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwZzUgeworCQkJCW52aWRpYSxwaW5zID0gInBnNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNwaTQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcGc2IHsKKwkJCQludmlkaWEscGlucyA9ICJwZzYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzcGk0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBnNyB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGc3IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3BpNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBoMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGgwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZ21pIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcGgxIHsKKwkJCQludmlkaWEscGlucyA9ICJwaDEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJwd20xIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBoMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGgyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZ21pIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBoMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGgzIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZ21pIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBoNCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGg0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGg1IHsKKwkJCQludmlkaWEscGlucyA9ICJwaDUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwaDYgeworCQkJCW52aWRpYSxwaW5zID0gInBoNiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwaDcgeworCQkJCW52aWRpYSxwaW5zID0gInBoNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwaTAgeworCQkJCW52aWRpYSxwaW5zID0gInBpMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBpMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGkxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwaTIgeworCQkJCW52aWRpYSxwaW5zID0gInBpMiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQ0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBpMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGkzIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3BpNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwaTQgeworCQkJCW52aWRpYSxwaW5zID0gInBpNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImdtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwaTUgeworCQkJCW52aWRpYSxwaW5zID0gInBpNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBpNiB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGk2IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGk3IHsKKwkJCQludmlkaWEscGlucyA9ICJwaTciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBqMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGowIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGoyIHsKKwkJCQludmlkaWEscGlucyA9ICJwajIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1YXJ0Ml9jdHNfbl9wajUgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQyX2N0c19uX3BqNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRiIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXVhcnQyX3J0c19uX3BqNiB7CisJCQkJbnZpZGlhLHBpbnMgPSAidWFydDJfcnRzX25fcGo2IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcGo3IHsKKwkJCQludmlkaWEscGlucyA9ICJwajciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1YXJ0ZCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwazAgeworCQkJCW52aWRpYSxwaW5zID0gInBrMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNvYyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwazEgeworCQkJCW52aWRpYSxwaW5zID0gInBrMSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQ0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBrMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGsyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGszIHsKKwkJCQludmlkaWEscGlucyA9ICJwazMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcGs0IHsKKwkJCQludmlkaWEscGlucyA9ICJwazQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlzcGRpZl9vdXRfcGs1IHsKKwkJCQludmlkaWEscGlucyA9ICJzcGRpZl9vdXRfcGs1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJc3BkaWZfaW5fcGs2IHsKKwkJCQludmlkaWEscGlucyA9ICJzcGRpZl9pbl9wazYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwazcgeworCQkJCW52aWRpYSxwaW5zID0gInBrNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRkIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWRhcDFfZnNfcG4wIHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAxX2ZzX3BuMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyczAiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlkYXAxX2Rpbl9wbjEgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDFfZGluX3BuMSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyczAiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlkYXAxX2RvdXRfcG4yIHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAxX2RvdXRfcG4yIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2F0YSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlkYXAxX3NjbGtfcG4zIHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAxX3NjbGtfcG4zIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJzMCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXVzYl92YnVzX2VuMF9wbjQgeworCQkJCW52aWRpYSxwaW5zID0gInVzYl92YnVzX2VuMF9wbjQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1c2IiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLG9wZW4tZHJhaW4gPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJdXNiX3ZidXNfZW4xX3BuNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAidXNiX3ZidXNfZW4xX3BuNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVzYiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQloZG1pX2ludF9wbjcgeworCQkJCW52aWRpYSxwaW5zID0gImhkbWlfaW50X3BuNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLHJjdi1zZWwgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVscGlfZGF0YTdfcG8wIHsKKwkJCQludmlkaWEscGlucyA9ICJ1bHBpX2RhdGE3X3BvMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVscGkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJdWxwaV9kYXRhMF9wbzEgeworCQkJCW52aWRpYSxwaW5zID0gInVscGlfZGF0YTBfcG8xIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWxwaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1bHBpX2RhdGExX3BvMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAidWxwaV9kYXRhMV9wbzIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1bHBpIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXVscGlfZGF0YTJfcG8zIHsKKwkJCQludmlkaWEscGlucyA9ICJ1bHBpX2RhdGEyX3BvMyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVscGkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJdWxwaV9kYXRhM19wbzQgeworCQkJCW52aWRpYSxwaW5zID0gInVscGlfZGF0YTNfcG80IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWxwaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQl1bHBpX2RhdGE0X3BvNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAidWxwaV9kYXRhNF9wbzUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1bHBpIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXVscGlfZGF0YTVfcG82IHsKKwkJCQludmlkaWEscGlucyA9ICJ1bHBpX2RhdGE1X3BvNiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVscGkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJdWxwaV9kYXRhNl9wbzcgeworCQkJCW52aWRpYSxwaW5zID0gInVscGlfZGF0YTZfcG83IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWxwaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlkYXAzX2ZzX3BwMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwM19mc19wcDAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWRhcDNfZGluX3BwMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwM19kaW5fcHAxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJzMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlkYXAzX2RvdXRfcHAyIHsKKwkJCQludmlkaWEscGlucyA9ICJkYXAzX2RvdXRfcHAyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZGFwM19zY2xrX3BwMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwM19zY2xrX3BwMyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZGFwNF9mc19wcDQgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDRfZnNfcHA0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJzMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWRhcDRfZGluX3BwNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwNF9kaW5fcHA1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJzMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWRhcDRfZG91dF9wcDYgeworCQkJCW52aWRpYSxwaW5zID0gImRhcDRfZG91dF9wcDYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMnMzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwNF9zY2xrX3BwNyB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwNF9zY2xrX3BwNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyczMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlrYl9jb2wwX3BxMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sMF9wcTAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlrYl9jb2wxX3BxMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sMV9wcTEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlrYl9jb2wyX3BxMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sMl9wcTIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlrYl9jb2wzX3BxMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sM19wcTMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJrYmMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlrYl9jb2w0X3BxNCB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2JfY29sNF9wcTQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2JfY29sNV9wcTUgeworCQkJCW52aWRpYSxwaW5zID0gImtiX2NvbDVfcHE1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2JfY29sNl9wcTYgeworCQkJCW52aWRpYSxwaW5zID0gImtiX2NvbDZfcHE2IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2JfY29sN19wcTcgeworCQkJCW52aWRpYSxwaW5zID0gImtiX2NvbDdfcHE3IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2Jfcm93MF9wcjAgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzBfcHIwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJa2Jfcm93MV9wcjEgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzFfcHIxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJa2Jfcm93Ml9wcjIgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzJfcHIyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJa2Jfcm93M19wcjMgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzNfcHIzIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3lzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWtiX3JvdzRfcHI0IHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3c0X3ByNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWtiX3JvdzVfcHI1IHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3c1X3ByNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWtiX3JvdzZfcHI2IHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3c2X3ByNiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImRpc3BsYXlhX2FsdCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWtiX3JvdzdfcHI3IHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3c3X3ByNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWtiX3JvdzhfcHMwIHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3c4X3BzMCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWtiX3JvdzlfcHMxIHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3c5X3BzMSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWtiX3JvdzEwX3BzMiB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2Jfcm93MTBfcHMyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2Jfcm93MTFfcHMzIHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3cxMV9wczMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlrYl9yb3cxMl9wczQgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzEyX3BzNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWtiX3JvdzEzX3BzNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2Jfcm93MTNfcHM1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJa2Jfcm93MTRfcHM2IHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3cxNF9wczYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlrYl9yb3cxNV9wczcgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzE1X3BzNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNvYyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlrYl9yb3cxNl9wdDAgeworCQkJCW52aWRpYSxwaW5zID0gImtiX3JvdzE2X3B0MCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWtiX3JvdzE3X3B0MSB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2Jfcm93MTdfcHQxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ2VuMl9pMmNfc2NsX3B0NSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ2VuMl9pMmNfc2NsX3B0NSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlnZW4yX2kyY19zZGFfcHQ2IHsKKwkJCQludmlkaWEscGlucyA9ICJnZW4yX2kyY19zZGFfcHQ2IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJjMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxvcGVuLWRyYWluID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jNF9jbWRfcHQ3IHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzRfY21kX3B0NyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwdTAgeworCQkJCW52aWRpYSxwaW5zID0gInB1MCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQ0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXB1MSB7CisJCQkJbnZpZGlhLHBpbnMgPSAicHUxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwdTIgeworCQkJCW52aWRpYSxwaW5zID0gInB1MiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcHUzIHsKKwkJCQludmlkaWEscGlucyA9ICJwdTMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcHU0IHsKKwkJCQludmlkaWEscGlucyA9ICJwdTQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcHU1IHsKKwkJCQludmlkaWEscGlucyA9ICJwdTUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcHU2IHsKKwkJCQludmlkaWEscGlucyA9ICJwdTYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwdjAgeworCQkJCW52aWRpYSxwaW5zID0gInB2MCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXB2MSB7CisJCQkJbnZpZGlhLHBpbnMgPSAicHYxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWMzX2NkX25fcHYyIHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzNfY2Rfbl9wdjIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWMxX3dwX25fcHYzIHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzFfd3Bfbl9wdjMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX0RPV04+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlkZGNfc2NsX3B2NCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGRjX3NjbF9wdjQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMmM0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLHJjdi1zZWwgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWRkY19zZGFfcHY1IHsKKwkJCQludmlkaWEscGlucyA9ICJkZGNfc2RhX3B2NSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEscmN2LXNlbCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ3Bpb193Ml9hdWRfcHcyIHsKKwkJCQludmlkaWEscGlucyA9ICJncGlvX3cyX2F1ZF9wdzIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlncGlvX3czX2F1ZF9wdzMgeworCQkJCW52aWRpYSxwaW5zID0gImdwaW9fdzNfYXVkX3B3MyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNwaTYiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZGFwX21jbGsxX3B3NCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZGFwX21jbGsxX3B3NCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImV4dHBlcmlwaDEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJY2xrMl9vdXRfcHc1IHsKKwkJCQludmlkaWEscGlucyA9ICJjbGsyX291dF9wdzUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJleHRwZXJpcGgyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVhcnQzX3R4ZF9wdzYgeworCQkJCW52aWRpYSxwaW5zID0gInVhcnQzX3R4ZF9wdzYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1YXJ0YyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQl1YXJ0M19yeGRfcHc3IHsKKwkJCQludmlkaWEscGlucyA9ICJ1YXJ0M19yeGRfcHc3IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZHZmc19wd21fcHgwIHsKKwkJCQludmlkaWEscGlucyA9ICJkdmZzX3B3bV9weDAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJjbGR2ZnMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJZ3Bpb194MV9hdWRfcHgxIHsKKwkJCQludmlkaWEscGlucyA9ICJncGlvX3gxX2F1ZF9weDEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlkdmZzX2Nsa19weDIgeworCQkJCW52aWRpYSxwaW5zID0gImR2ZnNfY2xrX3B4MiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImNsZHZmcyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlncGlvX3gzX2F1ZF9weDMgeworCQkJCW52aWRpYSxwaW5zID0gImdwaW9feDNfYXVkX3B4MyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQ0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWdwaW9feDRfYXVkX3B4NCB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ3Bpb194NF9hdWRfcHg0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZ21pIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWdwaW9feDVfYXVkX3B4NSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiZ3Bpb194NV9hdWRfcHg1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ3Bpb194Nl9hdWRfcHg2IHsKKwkJCQludmlkaWEscGlucyA9ICJncGlvX3g2X2F1ZF9weDYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJnbWkiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZ3Bpb194N19hdWRfcHg3IHsKKwkJCQludmlkaWEscGlucyA9ICJncGlvX3g3X2F1ZF9weDciOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQl1bHBpX2Nsa19weTAgeworCQkJCW52aWRpYSxwaW5zID0gInVscGlfY2xrX3B5MCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNwaTEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJdWxwaV9kaXJfcHkxIHsKKwkJCQludmlkaWEscGlucyA9ICJ1bHBpX2Rpcl9weTEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzcGkxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJdWxwaV9ueHRfcHkyIHsKKwkJCQludmlkaWEscGlucyA9ICJ1bHBpX254dF9weTIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzcGkxIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXVscGlfc3RwX3B5MyB7CisJCQkJbnZpZGlhLHBpbnMgPSAidWxwaV9zdHBfcHkzIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic3BpMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlzZG1tYzFfZGF0M19weTQgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jMV9kYXQzX3B5NCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzFfZGF0Ml9weTUgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jMV9kYXQyX3B5NSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzFfZGF0MV9weTYgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jMV9kYXQxX3B5NiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzFfZGF0MF9weTcgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jMV9kYXQwX3B5NyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzFfY2xrX3B6MCB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWMxX2Nsa19wejAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzFfY21kX3B6MSB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWMxX2NtZF9wejEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJcHdyX2kyY19zY2xfcHo2IHsKKwkJCQludmlkaWEscGlucyA9ICJwd3JfaTJjX3NjbF9wejYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJpMmNwd3IiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwd3JfaTJjX3NkYV9wejcgeworCQkJCW52aWRpYSxwaW5zID0gInB3cl9pMmNfc2RhX3B6NyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyY3B3ciI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxvcGVuLWRyYWluID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jNF9kYXQwX3BhYTAgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jNF9kYXQwX3BhYTAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWM0X2RhdDFfcGFhMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWM0X2RhdDFfcGFhMSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzRfZGF0Ml9wYWEyIHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzRfZGF0Ml9wYWEyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWM0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jNF9kYXQzX3BhYTMgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jNF9kYXQzX3BhYTMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWM0X2RhdDRfcGFhNCB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWM0X2RhdDRfcGFhNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlzZG1tYzRfZGF0NV9wYWE1IHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzRfZGF0NV9wYWE1IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWM0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9VUD47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jNF9kYXQ2X3BhYTYgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jNF9kYXQ2X3BhYTYiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWM0X2RhdDdfcGFhNyB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWM0X2RhdDdfcGFhNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlwYmIwIHsKKwkJCQludmlkaWEscGlucyA9ICJwYmIwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidmltY2xrMl9hbHQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJY2FtX2kyY19zY2xfcGJiMSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiY2FtX2kyY19zY2xfcGJiMSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImkyYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQljYW1faTJjX3NkYV9wYmIyIHsKKwkJCQludmlkaWEscGlucyA9ICJjYW1faTJjX3NkYV9wYmIyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiaTJjMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxvcGVuLWRyYWluID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBiYjMgeworCQkJCW52aWRpYSxwaW5zID0gInBiYjMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ2Z3AzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBiYjQgeworCQkJCW52aWRpYSxwaW5zID0gInBiYjQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ2Z3A0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBiYjUgeworCQkJCW52aWRpYSxwaW5zID0gInBiYjUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwYmI2IHsKKwkJCQludmlkaWEscGlucyA9ICJwYmI2IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJcGJiNyB7CisJCQkJbnZpZGlhLHBpbnMgPSAicGJiNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWNhbV9tY2xrX3BjYzAgeworCQkJCW52aWRpYSxwaW5zID0gImNhbV9tY2xrX3BjYzAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ2aV9hbHQzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBjYzEgeworCQkJCW52aWRpYSxwaW5zID0gInBjYzEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXBjYzIgeworCQkJCW52aWRpYSxwaW5zID0gInBjYzIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfRE9XTj47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jNF9jbGtfcGNjNCB7CisJCQkJbnZpZGlhLHBpbnMgPSAic2RtbWM0X2Nsa19wY2M0IjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAic2RtbWM0IjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJY2xrMl9yZXFfcGNjNSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiY2xrMl9yZXFfcGNjNSI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWNsazNfb3V0X3BlZTAgeworCQkJCW52aWRpYSxwaW5zID0gImNsazNfb3V0X3BlZTAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJleHRwZXJpcGgzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWNsazNfcmVxX3BlZTEgeworCQkJCW52aWRpYSxwaW5zID0gImNsazNfcmVxX3BlZTEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlkYXBfbWNsazFfcmVxX3BlZTIgeworCQkJCW52aWRpYSxwaW5zID0gImRhcF9tY2xrMV9yZXFfcGVlMiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNhdGEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJaGRtaV9jZWNfcGVlMyB7CisJCQkJbnZpZGlhLHBpbnMgPSAiaGRtaV9jZWNfcGVlMyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gImNlYyI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJCW52aWRpYSxvcGVuLWRyYWluID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCXNkbW1jM19jbGtfbGJfb3V0X3BlZTQgeworCQkJCW52aWRpYSxwaW5zID0gInNkbW1jM19jbGtfbGJfb3V0X3BlZTQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJc2RtbWMzX2Nsa19sYl9pbl9wZWU1IHsKKwkJCQludmlkaWEscGlucyA9ICJzZG1tYzNfY2xrX2xiX2luX3BlZTUiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJZHBfaHBkX3BmZjAgeworCQkJCW52aWRpYSxwaW5zID0gImRwX2hwZF9wZmYwIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAiZHAiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX1VQPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCQkJdXNiX3ZidXNfZW4yX3BmZjEgeworCQkJCW52aWRpYSxwaW5zID0gInVzYl92YnVzX2VuMl9wZmYxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLG9wZW4tZHJhaW4gPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCXBmZjIgeworCQkJCW52aWRpYSxwaW5zID0gInBmZjIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCQludmlkaWEsb3Blbi1kcmFpbiA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJY29yZV9wd3JfcmVxIHsKKwkJCQludmlkaWEscGlucyA9ICJjb3JlX3B3cl9yZXEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJwd3JvbiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQljcHVfcHdyX3JlcSB7CisJCQkJbnZpZGlhLHBpbnMgPSAiY3B1X3B3cl9yZXEiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlwd3JfaW50X24geworCQkJCW52aWRpYSxwaW5zID0gInB3cl9pbnRfbiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInBtaSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisJCQlyZXNldF9vdXRfbiB7CisJCQkJbnZpZGlhLHBpbnMgPSAicmVzZXRfb3V0X24iOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyZXNldF9vdXRfbiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisJCQlvd3IgeworCQkJCW52aWRpYSxwaW5zID0gIm93ciI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQyIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9ET1dOPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLHJjdi1zZWwgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKwkJCWNsa18zMmtfaW4geworCQkJCW52aWRpYSxwaW5zID0gImNsa18zMmtfaW4iOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCQludmlkaWEsZW5hYmxlLWlucHV0ID0gPFRFR1JBX1BJTl9FTkFCTEU+OworCQkJfTsKKwkJCWp0YWdfcnRjayB7CisJCQkJbnZpZGlhLHBpbnMgPSAianRhZ19ydGNrIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnRjayI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQl9OworCX07CisKKwkvKiBEQjkgc2VyaWFsIHBvcnQgKi8KKwlzZXJpYWxAMCw3MDAwNjMwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJLyogRXhwYW5zaW9uIEdFTjFfSTJDXyosIG1pbmktUENJZSBJMkMsIG9uLWJvYXJkIGNvbXBvbmVudHMgKi8KKwlpMmNAMCw3MDAwYzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwkJcnQ1NjM5OiBhdWRpby1jb2RlY0AxYyB7CisJCQljb21wYXRpYmxlID0gInJlYWx0ZWsscnQ1NjM5IjsKKwkJCXJlZyA9IDwweDFjPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8+OworCQkJaW50ZXJydXB0cyA9IDxURUdSQV9HUElPKEgsIDQpIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJcmVhbHRlayxsZG8xLWVuLWdwaW9zID0KKwkJCQk8JmdwaW8gVEVHUkFfR1BJTyhSLCAyKSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQl0ZW1wZXJhdHVyZS1zZW5zb3JANGMgeworCQkJY29tcGF0aWJsZSA9ICJ0aSx0bXA0NTEiOworCQkJcmVnID0gPDB4NGM+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3Bpbz47CisJCQlpbnRlcnJ1cHRzID0gPFRFR1JBX0dQSU8oSSwgNikgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwkJfTsKKworCQllZXByb21ANTYgeworCQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGMwMiI7CisJCQlyZWcgPSA8MHg1Nj47CisJCQlwYWdlc2l6ZSA9IDw4PjsKKwkJfTsKKwl9OworCisJLyogRXhwYW5zaW9uIEdFTjJfSTJDXyogKi8KKwlpMmNAMCw3MDAwYzQwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJfTsKKworCS8qIEV4cGFuc2lvbiBDQU1fSTJDXyogKi8KKwlpMmNAMCw3MDAwYzUwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJfTsKKworCS8qIEhETUkgRERDICovCisJaGRtaV9kZGM6IGkyY0AwLDcwMDBjNzAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwl9OworCisJLyogRXhwYW5zaW9uIFBXUl9JMkNfKiwgb24tYm9hcmQgY29tcG9uZW50cyAqLworCWkyY0AwLDcwMDBkMDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCQlwbWljOiBwbWljQDQwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1zLGFzMzcyMiI7CisJCQlyZWcgPSA8MHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDAgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJCWFtcyxzeXN0ZW0tcG93ZXItY29udHJvbGxlcjsKKworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmYXMzNzIyX2RlZmF1bHQ+OworCisJCQlhczM3MjJfZGVmYXVsdDogcGlubXV4IHsKKwkJCQlncGlvMCB7CisJCQkJCXBpbnMgPSAiZ3BpbzAiOworCQkJCQlmdW5jdGlvbiA9ICJncGlvIjsKKwkJCQkJYmlhcy1wdWxsLWRvd247CisJCQkJfTsKKworCQkJCWdwaW8xXzJfNF83IHsKKwkJCQkJcGlucyA9ICJncGlvMSIsICJncGlvMiIsICJncGlvNCIsICJncGlvNyI7CisJCQkJCWZ1bmN0aW9uID0gImdwaW8iOworCQkJCQliaWFzLXB1bGwtdXA7CisJCQkJfTsKKworCQkJCWdwaW8zXzVfNiB7CisJCQkJCXBpbnMgPSAiZ3BpbzMiLCAiZ3BpbzUiLCAiZ3BpbzYiOworCQkJCQliaWFzLWhpZ2gtaW1wZWRhbmNlOworCQkJCX07CisJCQl9OworCisJCQlyZWd1bGF0b3JzIHsKKwkJCQl2c3VwLXNkMi1zdXBwbHkgPSA8JnZkZF81djBfc3lzPjsKKwkJCQl2c3VwLXNkMy1zdXBwbHkgPSA8JnZkZF81djBfc3lzPjsKKwkJCQl2c3VwLXNkNC1zdXBwbHkgPSA8JnZkZF81djBfc3lzPjsKKwkJCQl2c3VwLXNkNS1zdXBwbHkgPSA8JnZkZF81djBfc3lzPjsKKwkJCQl2aW4tbGRvMC1zdXBwbHkgPSA8JnZkZF8xdjM1X2xwMD47CisJCQkJdmluLWxkbzEtNi1zdXBwbHkgPSA8JnZkZF8zdjNfcnVuPjsKKwkJCQl2aW4tbGRvMi01LTctc3VwcGx5ID0gPCZ2ZGRpb18xdjg+OworCQkJCXZpbi1sZG8zLTQtc3VwcGx5ID0gPCZ2ZGRfM3YzX3N5cz47CisJCQkJdmluLWxkbzktMTAtc3VwcGx5ID0gPCZ2ZGRfNXYwX3N5cz47CisJCQkJdmluLWxkbzExLXN1cHBseSA9IDwmdmRkXzN2M19ydW4+OworCisJCQkJc2QwIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiK1ZERF9DUFVfQVAiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNDAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCA9IDwzNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb2FtcCA9IDwzNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCWFtcyxleHRlcm5hbC1jb250cm9sID0gPDI+OworCQkJCX07CisKKwkJCQlzZDEgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICIrVkREX0NPUkUiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCA9IDwyNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb2FtcCA9IDwyNTAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCWFtcyxleHRlcm5hbC1jb250cm9sID0gPDE+OworCQkJCX07CisKKwkJCQl2ZGRfMXYzNV9scDA6IHNkMiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIisxLjM1Vl9MUDAoc2QyKSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNkMyB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIisxLjM1Vl9MUDAoc2QzKSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXZkZF8xdjA1X3J1bjogc2Q0IHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMDVWX1JVTiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQl9OworCisJCQkJdmRkaW9fMXY4OiBzZDUgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICIrMS44Vl9WRERJTyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJfTsKKworCQkJCXNkNiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIitWRERfR1BVX0FQIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NjUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm9hbXAgPSA8MzUwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm9hbXAgPSA8MzUwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQlsZG8wIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMDVWX1JVTl9BVkREIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJYW1zLGV4dGVybmFsLWNvbnRyb2wgPSA8MT47CisJCQkJfTsKKworCQkJCWxkbzEgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICIrMS44Vl9SVU5fQ0FNIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCX07CisKKwkJCQlsZG8yIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMlZfR0VOX0FWREQiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQlsZG8zIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMDVWX0xQMF9WRERfUlRDIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJYW1zLGVuYWJsZS10cmFja2luZzsKKwkJCQl9OworCisJCQkJbGRvNCB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIisyLjhWX1JVTl9DQU0iOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJfTsKKworCQkJCWxkbzUgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICIrMS4yVl9SVU5fQ0FNX0ZST05UIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCX07CisKKwkJCQl2ZGRpb19zZG1tYzM6IGxkbzYgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICIrVkRESU9fU0RNTUMzIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCX07CisKKwkJCQlsZG83IHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMDVWX1JVTl9DQU1fUkVBUiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQl9OworCisJCQkJbGRvOSB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIiszLjNWX1JVTl9UT1VDSCI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQl9OworCisJCQkJbGRvMTAgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICIrMi44Vl9SVU5fQ0FNX0FGIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCX07CisKKwkJCQlsZG8xMSB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIisxLjhWX1JVTl9WUFBfRlVTRSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJLyogRXhwYW5zaW9uIFRTX1NQSV8qICovCisJc3BpQDAsNzAwMGQ0MDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCS8qIEludGVybmFsIFNQSSAqLworCXNwaUAwLDcwMDBkYTAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJCXNwaS1mbGFzaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAid2luYm9uZCx3MjVxMzJkdyI7CisJCQlyZWcgPSA8MD47CisJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCX07CisJfTsKKworCXBtY0AwLDcwMDBlNDAwIHsKKwkJbnZpZGlhLGludmVydC1pbnRlcnJ1cHQ7CisJCW52aWRpYSxzdXNwZW5kLW1vZGUgPSA8MT47CisJCW52aWRpYSxjcHUtcHdyLWdvb2QtdGltZSA9IDw1MDA+OworCQludmlkaWEsY3B1LXB3ci1vZmYtdGltZSA9IDwzMDA+OworCQludmlkaWEsY29yZS1wd3ItZ29vZC10aW1lID0gPDY0MSAzODQ1PjsKKwkJbnZpZGlhLGNvcmUtcHdyLW9mZi10aW1lID0gPDYxMDM2PjsKKwkJbnZpZGlhLGNvcmUtcG93ZXItcmVxLWFjdGl2ZS1oaWdoOworCQludmlkaWEsc3lzLWNsb2NrLXJlcS1hY3RpdmUtaGlnaDsKKwl9OworCisJLyogU0QgY2FyZCAqLworCXNkaGNpQDAsNzAwYjA0MDAgeworCQlzdGF0dXMgPSAib2theSI7CisJCWNkLWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oViwgMikgR1BJT19BQ1RJVkVfTE9XPjsKKwkJcG93ZXItZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhSLCAwKSBHUElPX0FDVElWRV9ISUdIPjsKKwkJd3AtZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhRLCA0KSBHUElPX0FDVElWRV9ISUdIPjsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQl2cW1tYy1zdXBwbHkgPSA8JnZkZGlvX3NkbW1jMz47CisJfTsKKworCS8qIGVNTUMgKi8KKwlzZGhjaUAwLDcwMGIwNjAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQlidXMtd2lkdGggPSA8OD47CisJfTsKKworCWFodWJAMCw3MDMwMDAwMCB7CisJCWkyc0AwLDcwMzAxMTAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJLyogbWluaS1QQ0llIFVTQiAqLworCXVzYkAwLDdkMDA0MDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwl1c2ItcGh5QDAsN2QwMDQwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCS8qIFVTQiBBIGNvbm5lY3RvciAqLworCXVzYkAwLDdkMDA4MDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwl1c2ItcGh5QDAsN2QwMDgwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJCXZidXMtc3VwcGx5ID0gPCZ2ZGRfdXNiM192YnVzPjsKKwl9OworCisJY2xvY2tzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNsazMya19pbjogY2xvY2tAMCB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCXJlZyA9IDwwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlwb3dlciB7CisJCQlsYWJlbCA9ICJQb3dlciI7CisJCQlncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFEsIDApIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxjb2RlID0gPEtFWV9QT1dFUj47CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxMD47CisJCQlncGlvLWtleSx3YWtldXA7CisJCX07CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJdmRkX211eDogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiK1ZERF9NVVgiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMDA+OworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQl9OworCisJCXZkZF81djBfc3lzOiByZWd1bGF0b3JAMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIrNVZfU1lTIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfbXV4PjsKKwkJfTsKKworCQl2ZGRfM3YzX3N5czogcmVndWxhdG9yQDIgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDI+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiKzMuM1ZfU1lTIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfbXV4PjsKKwkJfTsKKworCQl2ZGRfM3YzX3J1bjogcmVndWxhdG9yQDMgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDM+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiKzMuM1ZfUlVOIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZwbWljIDEgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfM3YzX3N5cz47CisJCX07CisKKwkJdmRkXzN2M19oZG1pOiByZWd1bGF0b3JANCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8ND47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIrMy4zVl9BVkREX0hETUlfQVBfR0FURUQiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXZpbi1zdXBwbHkgPSA8JnZkZF8zdjNfcnVuPjsKKwkJfTsKKworCQl2ZGRfdXNiMV92YnVzOiByZWd1bGF0b3JANyB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Nz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIrVVNCMF9WQlVTX1NXIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oTiwgNCkgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlncGlvLW9wZW4tZHJhaW47CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfNXYwX3N5cz47CisJCX07CisKKwkJdmRkX3VzYjNfdmJ1czogcmVndWxhdG9yQDggeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDg+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiKzVWX1VTQl9IUyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbyBURUdSQV9HUElPKE4sIDUpIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJZ3Bpby1vcGVuLWRyYWluOworCQkJdmluLXN1cHBseSA9IDwmdmRkXzV2MF9zeXM+OworCQl9OworCisJCXZkZF8zdjNfbHAwOiByZWd1bGF0b3JAMTAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDEwPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIiszLjNWX0xQMCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmcG1pYyAyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJdmluLXN1cHBseSA9IDwmdmRkXzN2M19zeXM+OworCQl9OworCisJCXZkZF9oZG1pX3BsbDogcmVndWxhdG9yQDExIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwxMT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIrMS4wNVZfUlVOX0FWRERfSERNSV9QTEwiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCWdwaW8gPSA8JmdwaW8gVEVHUkFfR1BJTyhILCA3KSBHUElPX0FDVElWRV9MT1c+OworCQkJdmluLXN1cHBseSA9IDwmdmRkXzF2MDVfcnVuPjsKKwkJfTsKKworCQl2ZGRfNXYwX2hkbWk6IHJlZ3VsYXRvckAxMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MTI+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiKzVWX0hETUlfQ09OIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oSywgNikgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfNXYwX3N5cz47CisJCX07CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEtYXVkaW8tcnQ1NjQwLWpldHNvbi10azEiLAorCQkJICAgICAibnZpZGlhLHRlZ3JhLWF1ZGlvLXJ0NTY0MCI7CisJCW52aWRpYSxtb2RlbCA9ICJOVklESUEgVGVncmEgSmV0c29uIFRLMSI7CisKKwkJbnZpZGlhLGF1ZGlvLXJvdXRpbmcgPQorCQkJIkhlYWRwaG9uZXMiLCAiSFBPUiIsCisJCQkiSGVhZHBob25lcyIsICJIUE9MIiwKKwkJCSJNaWMgSmFjayIsICJNSUNCSUFTMSIsCisJCQkiSU4yUCIsICJNaWMgSmFjayI7CisKKwkJbnZpZGlhLGkycy1jb250cm9sbGVyID0gPCZ0ZWdyYV9pMnMxPjsKKwkJbnZpZGlhLGF1ZGlvLWNvZGVjID0gPCZydDU2Mzk+OworCisJCW52aWRpYSxocC1kZXQtZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhSLCA3KSBHUElPX0FDVElWRV9MT1c+OworCisJCWNsb2NrcyA9IDwmdGVncmFfY2FyIFRFR1JBMTI0X0NMS19QTExfQT4sCisJCQkgPCZ0ZWdyYV9jYXIgVEVHUkExMjRfQ0xLX1BMTF9BX09VVDA+LAorCQkJIDwmdGVncmFfY2FyIFRFR1JBMTI0X0NMS19FWFRFUk4xPjsKKwkJY2xvY2stbmFtZXMgPSAicGxsX2EiLCAicGxsX2Ffb3V0MCIsICJtY2xrIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LXZlbmljZTIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtdmVuaWNlMi5kdHMKaW5kZXggYzE3MjgzYy4uZjBiYjg0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtdmVuaWNlMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtdmVuaWNlMi5kdHMKQEAgLTE3LDYgKzE3LDE4IEBACiAJfTsKIAogCWhvc3QxeEAwLDUwMDAwMDAwIHsKKwkJaGRtaUAwLDU0MjgwMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJdmRkLXN1cHBseSA9IDwmdmRkXzN2M19oZG1pPjsKKwkJCXBsbC1zdXBwbHkgPSA8JnZkZF9oZG1pX3BsbD47CisJCQloZG1pLXN1cHBseSA9IDwmdmRkXzV2MF9oZG1pPjsKKworCQkJbnZpZGlhLGRkYy1pMmMtYnVzID0gPCZoZG1pX2RkYz47CisJCQludmlkaWEsaHBkLWdwaW8gPQorCQkJCTwmZ3BpbyBURUdSQV9HUElPKE4sIDcpIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCiAJCXNvckAwLDU0NTQwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIApAQCAtNjAxLDcgKzYxMyw3IEBACiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCX07CiAKLQlpMmNAMCw3MDAwYzcwMCB7CisJaGRtaV9kZGM6IGkyY0AwLDcwMDBjNzAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKIAl9OwpAQCAtNzAwLDcgKzcxMiw3IEBACiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJCX07CiAKLQkJCQlzZDQgeworCQkJCXZkZF8xdjA1X3J1bjogc2Q0IHsKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMDVWX1JVTiI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKQEAgLTkzMSw5ICs5NDMsMTAgQEAKIAlzZGhjaUAwLDcwMGIwNDAwIHsKIAkJY2QtZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhWLCAyKSBHUElPX0FDVElWRV9ISUdIPjsKIAkJcG93ZXItZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhSLCAwKSBHUElPX0FDVElWRV9ISUdIPjsKKwkJd3AtZ3Bpb3MgPSA8JmdwaW8gVEVHUkFfR1BJTyhRLCA0KSBHUElPX0FDVElWRV9MT1c+OwogCQlzdGF0dXMgPSAib2theSI7CiAJCWJ1cy13aWR0aCA9IDw0PjsKLQkJdm1tYy1zdXBwbHkgPSA8JnZkZGlvX3NkbW1jMz47CisJCXZxbW1jLXN1cHBseSA9IDwmdmRkaW9fc2RtbWMzPjsKIAl9OwogCiAJc2RoY2lAMCw3MDBiMDYwMCB7CkBAIC0xMDYwLDYgKzEwNzMsOCBAQAogCQkJcmVndWxhdG9yLW5hbWUgPSAiKzMuM1ZfUlVOIjsKIAkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwogCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQlncGlvID0gPCZwbWljIDEgR1BJT19BQ1RJVkVfSElHSD47CiAJCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfM3YzX3N5cz47CkBAIC0xMTQ1LDYgKzExNjAsMjcgQEAKIAkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAkJCXZpbi1zdXBwbHkgPSA8JnZkZF8zdjNfc3lzPjsKIAkJfTsKKworCQl2ZGRfaGRtaV9wbGw6IHJlZ3VsYXRvckAxMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MTE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiKzEuMDVWX1JVTl9BVkREX0hETUlfUExMIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oSCwgNykgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCXZpbi1zdXBwbHkgPSA8JnZkZF8xdjA1X3J1bj47CisJCX07CisKKwkJdmRkXzV2MF9oZG1pOiByZWd1bGF0b3JAMTIgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDEyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIis1Vl9IRE1JX0NPTiI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJZ3BpbyA9IDwmZ3BpbyBURUdSQV9HUElPKEssIDYpIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJdmluLXN1cHBseSA9IDwmdmRkXzV2MF9zeXM+OworCQl9OwogCX07CiAKIAlzb3VuZCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQuZHRzaQppbmRleCA2ZDU0MGEwLi42ZTZiYzRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LmR0c2kKQEAgLTUxLDYgKzUxLDE4IEBACiAJCQludmlkaWEsaGVhZCA9IDwxPjsKIAkJfTsKIAorCQloZG1pQDAsNTQyODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMjQtaGRtaSI7CisJCQlyZWcgPSA8MHgwIDB4NTQyODAwMDAgMHgwIDB4MDAwNDAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZ0ZWdyYV9jYXIgVEVHUkExMjRfQ0xLX0hETUk+LAorCQkJCSA8JnRlZ3JhX2NhciBURUdSQTEyNF9DTEtfUExMX0QyX09VVDA+OworCQkJY2xvY2stbmFtZXMgPSAiaGRtaSIsICJwYXJlbnQiOworCQkJcmVzZXRzID0gPCZ0ZWdyYV9jYXIgNTE+OworCQkJcmVzZXQtbmFtZXMgPSAiaGRtaSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCXNvckAwLDU0NTQwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXNvciI7CiAJCQlyZWcgPSA8MHgwIDB4NTQ1NDAwMDAgMHgwIDB4MDAwNDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC1oYXJtb255LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtaGFybW9ueS5kdHMKaW5kZXggM2ZiMWY1MC4uZjQ1YWFkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEyMC1oYXJtb255LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLWhhcm1vbnkuZHRzCkBAIC0yOCw2ICsyOCw3IEBACiAJCWhkbWlANTQyODAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOwogCisJCQloZG1pLXN1cHBseSA9IDwmdmRkXzV2MF9oZG1pPjsKIAkJCXZkZC1zdXBwbHkgPSA8JmhkbWlfdmRkX3JlZz47CiAJCQlwbGwtc3VwcGx5ID0gPCZoZG1pX3BsbF9yZWc+OwogCkBAIC03MjQsNiArNzI1LDE3IEBACiAJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oVywgMCkgR1BJT19BQ1RJVkVfSElHSD47CiAJCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCX07CisKKwkJdmRkXzV2MF9oZG1pOiByZWd1bGF0b3JANiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Nj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERJT19IRE1JIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oVCwgMikgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQl2aW4tc3VwcGx5ID0gPCZ2ZGRfNXYwX3JlZz47CisJCX07CiAJfTsKIAogCXNvdW5kIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYmVhdmVyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYmVhdmVyLmR0cwppbmRleCBlOTNmZTQ1Yi4uMzE4OTc5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1iZWF2ZXIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtYmVhdmVyLmR0cwpAQCAtNDAsNiArNDAsNyBAQAogCQloZG1pQDU0MjgwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAorCQkJaGRtaS1zdXBwbHkgPSA8JnZkZF81djBfaGRtaT47CiAJCQl2ZGQtc3VwcGx5ID0gPCZzeXNfM3YzX3JlZz47CiAJCQlwbGwtc3VwcGx5ID0gPCZ2aW9fcmVnPjsKIApAQCAtNDc4LDYgKzQ3OSwxNyBAQAogCQkJZ3BpbyA9IDwmZ3BpbyBURUdSQV9HUElPKEwsIDcpIEdQSU9fQUNUSVZFX0hJR0g+OwogCQkJdmluLXN1cHBseSA9IDwmc3lzXzN2M19yZWc+OwogCQl9OworCisJCXZkZF81djBfaGRtaTogcmVndWxhdG9yQDggeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDg+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiK1ZERF81Vl9IRE1JIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQl2aW4tc3VwcGx5ID0gPCZzeXNfM3YzX3JlZz47CisJCX07CiAJfTsKIAogCXNvdW5kIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY29saWJyaS1ldmFsLXYzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY29saWJyaS1ldmFsLXYzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzkzYWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jb2xpYnJpLWV2YWwtdjMuZHRzCkBAIC0wLDAgKzEsMjA1IEBACisvZHRzLXYxLzsKKworI2luY2x1ZGUgInRlZ3JhMzAtY29saWJyaS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJUb3JhZGV4IENvbGlicmkgVDMwIG9uIENvbGlicmkgRXZhbHVhdGlvbiBCb2FyZCI7CisJY29tcGF0aWJsZSA9ICJ0b3JhZGV4LGNvbGlicmlfdDMwLWV2YWwtdjMiLCAidG9yYWRleCxjb2xpYnJpX3QzMCIsICJudmlkaWEsdGVncmEzMCI7CisKKwlhbGlhc2VzIHsKKwkJcnRjMCA9ICIvaTJjQDcwMDBjMDAwL3J0Y0A2OCI7CisJCXJ0YzEgPSAiL2kyY0A3MDAwZDAwMC90cHM2NTkxMUAyZCI7CisJCXJ0YzIgPSAiL3J0Y0A3MDAwZTAwMCI7CisJfTsKKworCWhvc3QxeEA1MDAwMDAwMCB7CisJCWRjQDU0MjAwMDAwIHsKKwkJCXJnYiB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCW52aWRpYSxwYW5lbCA9IDwmcGFuZWw+OworCQkJfTsKKwkJfTsKKwkJaGRtaUA1NDI4MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCXNlcmlhbEA3MDAwNjAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc2VyaWFsQDcwMDA2MDQwIHsKKwkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1oc3VhcnQiOworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXNlcmlhbEA3MDAwNjMwMCB7CisJCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtaHN1YXJ0IjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlwd21ANzAwMGEwMDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCS8qCisJICogR0VOMV9JMkM6IEkyQ19TREEvU0NMIG9uIFNPRElNTSBwaW4gMTk0LzE5NiAoZS5nLiBSVEMgb24gY2FycmllcgorCSAqIGJvYXJkKQorCSAqLworCWkyY0A3MDAwYzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwkJLyogTTQxVDBNNiByZWFsIHRpbWUgY2xvY2sgb24gY2FycmllciBib2FyZCAqLworCQlydGNANjggeworCQkJY29tcGF0aWJsZSA9ICJzdG0sbTQxdDAwIjsKKwkJCXJlZyA9IDwweDY4PjsKKwkJfTsKKwl9OworCisJLyogRERDX0NMT0NLL0RBVEEgb24gWDMgcGluIDE1LzE2IChlLmcuIGRpc3BsYXkgRURJRCkgKi8KKwloZG1pZGRjOiBpMmNANzAwMGM3MDAgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCS8qIFNQSTE6IENvbGlicmkgU1NQICovCisJc3BpQDcwMDBkNDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyNTAwMDAwMD47CisJCWNhbjA6IGNhbkAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWljcm9jaGlwLG1jcDI1MTUiOworCQkJcmVnID0gPDA+OworCQkJY2xvY2tzID0gPCZjbGsxNm0+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3Bpbz47CisJCQlpbnRlcnJ1cHRzID0gPFRFR1JBX0dQSU8oUywgMCkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJfTsKKwkJc3BpZGV2MDogc3BpQDEgeworCQkJY29tcGF0aWJsZSA9ICJzcGlkZXYiOworCQkJcmVnID0gPDE+OworCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjUwMDAwMDA+OworCQl9OworCX07CisKKwlzZGhjaUA3ODAwMDIwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQljZC1ncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKEMsIDcpIEdQSU9fQUNUSVZFX0xPVz47CisJCW5vLTEtOC12OworCX07CisKKwkvKiBFSENJIGluc3RhbmNlIDA6IFVTQjFfRFAvTiAtPiBVU0JDX1AvTiAqLworCXVzYkA3ZDAwMDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJdXNiLXBoeUA3ZDAwMDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJZHJfbW9kZSA9ICJvdGciOworCQl2YnVzLXN1cHBseSA9IDwmdXNiY192YnVzX3JlZz47CisJfTsKKworCS8qIEVIQ0kgaW5zdGFuY2UgMjogVVNCM19EUC9OIC0+IFVTQkhfUC9OICovCisJdXNiQDdkMDA4MDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwl1c2ItcGh5QDdkMDA4MDAwIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCQl2YnVzLXN1cHBseSA9IDwmdXNiaF92YnVzX3JlZz47CisJfTsKKworCWJhY2tsaWdodDogYmFja2xpZ2h0IHsKKwkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKKworCQkvKiBQV008QT4gKi8KKwkJcHdtcyA9IDwmcHdtIDAgNTAwMDAwMD47CisJCWJyaWdodG5lc3MtbGV2ZWxzID0gPDI1NSAxMjggNjQgMzIgMTYgOCA0IDA+OworCQlkZWZhdWx0LWJyaWdodG5lc3MtbGV2ZWwgPSA8Nj47CisJCS8qIEJMX09OICovCisJCWVuYWJsZS1ncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFYsIDIpIEdQSU9fQUNUSVZFX0hJR0g+OworCX07CisKKwljbG9ja3MgeworCQljbGsxNm06IGNsa0AxIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJcmVnPTwxPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrMTZtIjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCXBvd2VyIHsKKwkJCWxhYmVsID0gIlBvd2VyIjsKKwkJCWdwaW9zID0gPCZncGlvIFRFR1JBX0dQSU8oViwgMSkgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxjb2RlID0gPEtFWV9QT1dFUj47CisJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxMD47CisJCQlncGlvLWtleSx3YWtldXA7CisJCX07CisJfTsKKworCXBhbmVsOiBwYW5lbCB7CisJCS8qCisJCSAqIGVkdCxldDA1NzA5MGRodTogRURUIDUuNyIgTENEIFRGVAorCQkgKiBlZHQsZXQwNzAwODBkaDY6IEVEVCA3LjAiIExDRCBURlQKKwkJICovCisJCWNvbXBhdGlibGUgPSAiZWR0LGV0MDU3MDkwZGh1IiwgInNpbXBsZS1wYW5lbCI7CisKKwkJYmFja2xpZ2h0ID0gPCZiYWNrbGlnaHQ+OworCX07CisKKwlwd21sZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJwd20tbGVkcyI7CisKKwkJcHdtYiB7CisJCQlsYWJlbCA9ICJQV008Qj4iOworCQkJcHdtcyA9IDwmcHdtIDEgMTk2MDA+OworCQkJbWF4LWJyaWdodG5lc3MgPSA8MjU1PjsKKwkJfTsKKwkJcHdtYyB7CisJCQlsYWJlbCA9ICJQV008Qz4iOworCQkJcHdtcyA9IDwmcHdtIDIgMTk2MDA+OworCQkJbWF4LWJyaWdodG5lc3MgPSA8MjU1PjsKKwkJfTsKKwkJcHdtZCB7CisJCQlsYWJlbCA9ICJQV008RD4iOworCQkJcHdtcyA9IDwmcHdtIDMgMTk2MDA+OworCQkJbWF4LWJyaWdodG5lc3MgPSA8MjU1PjsKKwkJfTsKKwl9OworCisJcmVndWxhdG9ycyB7CisJCXN5c181djBfcmVnOiByZWd1bGF0b3JAMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICI1djAiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJdXNiY192YnVzX3JlZzogcmVndWxhdG9yQDIgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDI+OworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiY192YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQl2aW4tc3VwcGx5ID0gPCZzeXNfNXYwX3JlZz47CisJCX07CisKKwkJLyogVVNCSF9QRU4gKi8KKwkJdXNiaF92YnVzX3JlZzogcmVndWxhdG9yQDMgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDM+OworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiaF92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZncGlvIFRFR1JBX0dQSU8oVywgMikgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCXZpbi1zdXBwbHkgPSA8JnN5c181djBfcmVnPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY29saWJyaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jb2xpYnJpLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNmY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY29saWJyaS5kdHNpCkBAIC0wLDAgKzEsMzc3IEBACisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlICJ0ZWdyYTMwLmR0c2kiCisKKy8qCisgKiBUb3JhZGV4IENvbGlicmkgVDMwIERldmljZSBUcmVlCisgKiBDb21wYXRpYmxlIGZvciBSZXZpc2lvbnMgMS4xQi8xLjFDLzEuMUQKKyAqLworLyB7CisJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFQzMCI7CisJY29tcGF0aWJsZSA9ICJ0b3JhZGV4LGNvbGlicmlfdDMwIiwgIm52aWRpYSx0ZWdyYTMwIjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDgwMDAwMDAwIDB4NDAwMDAwMDA+OworCX07CisKKwlob3N0MXhANTAwMDAwMDAgeworCQloZG1pQDU0MjgwMDAwIHsKKwkJCXZkZC1zdXBwbHkgPSA8JnN5c18zdjNfcmVnPjsKKwkJCXBsbC1zdXBwbHkgPSA8JnZpb19yZWc+OworCisJCQludmlkaWEsaHBkLWdwaW8gPQorCQkJCTwmZ3BpbyBURUdSQV9HUElPKE4sIDcpIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbnZpZGlhLGRkYy1pMmMtYnVzID0gPCZoZG1pZGRjPjsKKwkJfTsKKwl9OworCisJcGlubXV4QDcwMDAwODY4IHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZzdGF0ZV9kZWZhdWx0PjsKKworCQlzdGF0ZV9kZWZhdWx0OiBwaW5tdXggeworCQkJLyogQ29saWJyaSBCTF9PTiAqLworCQkJcHYyIHsKKwkJCQludmlkaWEscGlucyA9ICJwdjIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJyc3ZkNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisKKwkJCS8qIENvbGlicmkgQmFja2xpZ2h0IFBXTTxBPiAqLworCQkJc2RtbWMzX2RhdDNfcGI0IHsKKwkJCQludmlkaWEscGlucyA9CSJzZG1tYzNfZGF0M19wYjQiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJwd20wIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKworCQkJLyogQ29saWJyaSBDQU5fSU5UICovCisJCQlrYl9yb3c4X3BzMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAia2Jfcm93OF9wczAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJrYmMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisKKwkJCS8qCisJCQkgKiBDb2xpYnJpIExfQklBUywgTENEX00xIGlzIG11eGVkIHdpdGggTENEX0RFCisJCQkgKiB0b2RheXMgZGlzcGxheSBuZWVkIERFLCBkaXNhYmxlIExDRF9NMQorCQkJICovCisJCQlsY2RfbTFfcHcxIHsKKwkJCQludmlkaWEscGlucyA9ICJsY2RfbTFfcHcxIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAicnN2ZDMiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQkJbnZpZGlhLGVuYWJsZS1pbnB1dCA9IDxURUdSQV9QSU5fRU5BQkxFPjsKKwkJCX07CisKKwkJCS8qIFRoZXJtYWwgYWxlcnQsIG5lZWQgdG8gYmUgZGlzYWJsZWQgKi8KKwkJCWxjZF9kYzFfcGQyIHsKKwkJCQludmlkaWEscGlucyA9ICJsY2RfZGMxX3BkMiI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInJzdmQzIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJCW52aWRpYSxlbmFibGUtaW5wdXQgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCisJCQkvKiBDb2xpYnJpIE1NQyAqLworCQkJa2Jfcm93MTBfcHMyIHsKKwkJCQludmlkaWEscGlucyA9ICJrYl9yb3cxMF9wczIiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJa2Jfcm93MTFfcHMzIHsKKwkJCQludmlkaWEscGlucyA9CSJrYl9yb3cxMV9wczMiLAorCQkJCQkJImtiX3JvdzEyX3BzNCIsCisJCQkJCQkia2Jfcm93MTNfcHM1IiwKKwkJCQkJCSJrYl9yb3cxNF9wczYiLAorCQkJCQkJImtiX3JvdzE1X3BzNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jMiI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCisJCQkvKiBDb2xpYnJpIFNTUCAqLworCQkJdWxwaV9jbGtfcHkwIHsKKwkJCQludmlkaWEscGlucyA9ICAgInVscGlfY2xrX3B5MCIsCisJCQkJCQkidWxwaV9kaXJfcHkxIiwKKwkJCQkJCSJ1bHBpX254dF9weTIiLAorCQkJCQkJInVscGlfc3RwX3B5MyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNwaTEiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJc2RtbWMzX2RhdDZfcGQzIHsKKwkJCQludmlkaWEscGlucyA9CSJzZG1tYzNfZGF0Nl9wZDMiLAorCQkJCQkJInNkbW1jM19kYXQ3X3BkNCI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNwZGlmIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0VOQUJMRT47CisJCQl9OworCisJCQkvKiBDb2xpYnJpIFVBUlRfQSAqLworCQkJdWxwaV9kYXRhMCB7CisJCQkJbnZpZGlhLHBpbnMgPSAgICJ1bHBpX2RhdGEwX3BvMSIsCisJCQkJCQkidWxwaV9kYXRhMV9wbzIiLAorCQkJCQkJInVscGlfZGF0YTJfcG8zIiwKKwkJCQkJCSJ1bHBpX2RhdGEzX3BvNCIsCisJCQkJCQkidWxwaV9kYXRhNF9wbzUiLAorCQkJCQkJInVscGlfZGF0YTVfcG82IiwKKwkJCQkJCSJ1bHBpX2RhdGE2X3BvNyIsCisJCQkJCQkidWxwaV9kYXRhN19wbzAiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJ1YXJ0YSI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfTk9ORT47CisJCQkJbnZpZGlhLHRyaXN0YXRlID0gPFRFR1JBX1BJTl9ESVNBQkxFPjsKKwkJCX07CisKKwkJCS8qIENvbGlicmkgVUFSVF9CICovCisJCQlnbWlfYTE2X3BqNyB7CisJCQkJbnZpZGlhLHBpbnMgPSAgICJnbWlfYTE2X3BqNyIsCisJCQkJCQkiZ21pX2ExN19wYjAiLAorCQkJCQkJImdtaV9hMThfcGIxIiwKKwkJCQkJCSJnbWlfYTE5X3BrNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInVhcnRkIjsKKwkJCQludmlkaWEscHVsbCA9IDxURUdSQV9QSU5fUFVMTF9OT05FPjsKKwkJCQludmlkaWEsdHJpc3RhdGUgPSA8VEVHUkFfUElOX0RJU0FCTEU+OworCQkJfTsKKworCQkJLyogQ29saWJyaSBVQVJUX0MgKi8KKwkJCXVhcnQyX3J4ZCB7CisJCQkJbnZpZGlhLHBpbnMgPSAgICJ1YXJ0Ml9yeGRfcGMzIiwKKwkJCQkJCSJ1YXJ0Ml90eGRfcGMyIjsKKwkJCQludmlkaWEsZnVuY3Rpb24gPSAidWFydGIiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCisJCQkvKiBlTU1DICovCisJCQlzZG1tYzRfY2xrX3BjYzQgeworCQkJCW52aWRpYSxwaW5zID0JInNkbW1jNF9jbGtfcGNjNCIsCisJCQkJCQkic2RtbWM0X3JzdF9uX3BjYzMiOworCQkJCW52aWRpYSxmdW5jdGlvbiA9ICJzZG1tYzQiOworCQkJCW52aWRpYSxwdWxsID0gPFRFR1JBX1BJTl9QVUxMX05PTkU+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQkJc2RtbWM0X2RhdDBfcGFhMCB7CisJCQkJbnZpZGlhLHBpbnMgPQkic2RtbWM0X2RhdDBfcGFhMCIsCisJCQkJCQkic2RtbWM0X2RhdDFfcGFhMSIsCisJCQkJCQkic2RtbWM0X2RhdDJfcGFhMiIsCisJCQkJCQkic2RtbWM0X2RhdDNfcGFhMyIsCisJCQkJCQkic2RtbWM0X2RhdDRfcGFhNCIsCisJCQkJCQkic2RtbWM0X2RhdDVfcGFhNSIsCisJCQkJCQkic2RtbWM0X2RhdDZfcGFhNiIsCisJCQkJCQkic2RtbWM0X2RhdDdfcGFhNyI7CisJCQkJbnZpZGlhLGZ1bmN0aW9uID0gInNkbW1jNCI7CisJCQkJbnZpZGlhLHB1bGwgPSA8VEVHUkFfUElOX1BVTExfVVA+OworCQkJCW52aWRpYSx0cmlzdGF0ZSA9IDxURUdSQV9QSU5fRElTQUJMRT47CisJCQl9OworCQl9OworCX07CisKKwloZG1pZGRjOiBpMmNANzAwMGM3MDAgeworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwl9OworCisJLyoKKwkgKiBQV1JfSTJDOiBwb3dlciBJMkMgdG8gYXVkaW8gY29kZWMsIFBNSUMsIHRlbXBlcmF0dXJlIHNlbnNvciBhbmQKKwkgKiB0b3VjaCBzY3JlZW4gY29udHJvbGxlcgorCSAqLworCWkyY0A3MDAwZDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwkJcG1pYzogdHBzNjU5MTFAMmQgeworCQkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTkxMSI7CisJCQlyZWcgPSA8MHgyZD47CisKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKworCQkJdGksc3lzdGVtLXBvd2VyLWNvbnRyb2xsZXI7CisKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJZ3Bpby1jb250cm9sbGVyOworCisJCQl2Y2MxLXN1cHBseSA9IDwmc3lzXzN2M19yZWc+OworCQkJdmNjMi1zdXBwbHkgPSA8JnN5c18zdjNfcmVnPjsKKwkJCXZjYzMtc3VwcGx5ID0gPCZ2aW9fcmVnPjsKKwkJCXZjYzQtc3VwcGx5ID0gPCZzeXNfM3YzX3JlZz47CisJCQl2Y2M1LXN1cHBseSA9IDwmc3lzXzN2M19yZWc+OworCQkJdmNjNi1zdXBwbHkgPSA8JnZpb19yZWc+OworCQkJdmNjNy1zdXBwbHkgPSA8JnN5c181djBfcmVnPjsKKwkJCXZjY2lvLXN1cHBseSA9IDwmc3lzXzN2M19yZWc+OworCisJCQlyZWd1bGF0b3JzIHsKKwkJCQkvKiBTVzE6ICtWMS4zNV9WRERJT19ERFIgKi8KKwkJCQl2ZGQxX3JlZzogdmRkMSB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZGlvX2Rkcl8xdjM1IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQkvKiBTVzI6IHVudXNlZCAqLworCisJCQkJLyogU1cgQ1RSTDogK1YxLjBfVkREX0NQVSAqLworCQkJCXZkZGN0cmxfcmVnOiB2ZGRjdHJsIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2NwdSx2ZGRfc3lzIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTE1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQkvKiBTV0lPOiArVjEuOCAqLworCQkJCXZpb19yZWc6IHZpbyB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8xdjhfZ2VuIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQkvKiBMRE8xOiB1bnVzZWQgKi8KKworCQkJCS8qCisJCQkJICogRU5fK1YzLjMgc3dpdGNoaW5nIHZpYSBGRVQ6CisJCQkJICogK1YzLjNfQVVESU9fQVZERF9TLCArVjMuMyBhbmQgK1YxLjhfVkREX0xBTgorCQkJCSAqIHNlZSBhbHNvIHYzXzMgZml4ZWQgc3VwcGx5CisJCQkJICovCisJCQkJbGRvMl9yZWc6IGxkbzIgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJlbl8zdjMiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJfTsKKworCQkJCS8qIExETzM6IHVudXNlZCAqLworCisJCQkJLyogK1YxLjJfVkREX1JUQyAqLworCQkJCWxkbzRfcmVnOiBsZG80IHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX3J0YyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQl9OworCisJCQkJLyoKKwkJCQkgKiArVjIuOF9BVkREX1ZEQUM6CisJCQkJICogb25seSByZXF1aXJlZCBmb3IgYW5hbG9nIFJHQgorCQkJCSAqLworCQkJCWxkbzVfcmVnOiBsZG81IHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiYXZkZF92ZGFjIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQkvKgorCQkJCSAqICtWMS4wNV9BVkREX1BMTEU6IGF2ZGRfcGxsZSBzaG91bGQgYmUgMS4wNVYKKwkJCQkgKiBidXQgTERPNiBjYW4ndCBzZXQgdm9sdGFnZSBpbiA1MG1WCisJCQkJICogZ3JhbnVsYXJpdHkKKwkJCQkgKi8KKwkJCQlsZG82X3JlZzogbGRvNiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImF2ZGRfcGxsZSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQl9OworCisJCQkJLyogK1YxLjJfQVZERF9QTEwgKi8KKwkJCQlsZG83X3JlZzogbGRvNyB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImF2ZGRfcGxsIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisKKwkJCQkvKiArVjEuMF9WRERfRERSX0hTICovCisJCQkJbGRvOF9yZWc6IGxkbzggeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZGRyX2hzIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCX07CisJCQl9OworCQl9OworCisJCS8qCisJCSAqIExNOTUyNDUgdGVtcGVyYXR1cmUgc2Vuc29yCisJCSAqIE5vdGU6IE9WRVJUX04gZGlyZWN0bHkgY29ubmVjdGVkIHRvIFBNSUMgUFdSRE4KKwkJICovCisJCXRlbXAtc2Vuc29yQDRjIHsKKwkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG05NTI0NSI7CisJCQlyZWcgPSA8MHg0Yz47CisJCX07CisKKwkJLyogU1c6ICtWMS4yX1ZERF9DT1JFICovCisJCXRwczYyMzYyQDYwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksdHBzNjIzNjIiOworCQkJcmVnID0gPDB4NjA+OworCisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ0cHM2MjM2Mi12b3V0IjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXRpLHZzZWwwLXN0YXRlLWxvdzsKKwkJCS8qIFZTRUwxOiBFTl9DT1JFX0RWRlNfTiBsb3cgZm9yIERWRlMgKi8KKwkJCXRpLHZzZWwxLXN0YXRlLWxvdzsKKwkJfTsKKwl9OworCisJcG1jQDcwMDBlNDAwIHsKKwkJbnZpZGlhLGludmVydC1pbnRlcnJ1cHQ7CisJCW52aWRpYSxzdXNwZW5kLW1vZGUgPSA8MT47CisJCW52aWRpYSxjcHUtcHdyLWdvb2QtdGltZSA9IDw1MDAwPjsKKwkJbnZpZGlhLGNwdS1wd3Itb2ZmLXRpbWUgPSA8NTAwMD47CisJCW52aWRpYSxjb3JlLXB3ci1nb29kLXRpbWUgPSA8Mzg0NSAzODQ1PjsKKwkJbnZpZGlhLGNvcmUtcHdyLW9mZi10aW1lID0gPDA+OworCQludmlkaWEsY29yZS1wb3dlci1yZXEtYWN0aXZlLWhpZ2g7CisJCW52aWRpYSxzeXMtY2xvY2stcmVxLWFjdGl2ZS1oaWdoOworCX07CisKKwllbW1jOiBzZGhjaUA3ODAwMDYwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJYnVzLXdpZHRoID0gPDg+OworCQlub24tcmVtb3ZhYmxlOworCX07CisKKwkvKiBFSENJIGluc3RhbmNlIDE6IFVTQjJfRFAvTiAtPiBBWDg4NzcyQiAqLworCXVzYkA3ZDAwNDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJdXNiLXBoeUA3ZDAwNDAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwkJbnZpZGlhLGlzLXdpcmVkID0gPDE+OworCX07CisKKwljbG9ja3MgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY2xrMzJrX2luOiBjbGtAMCB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCXJlZz08MD47CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OworCQl9OworCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXN5c18zdjNfcmVnOiByZWd1bGF0b3JAMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwxMDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiM3YzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdHdsNDAzMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdHdsNDAzMC5kdHNpCmluZGV4IDg2Y2ZjN2QuLjM2YWU5MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3R3bDQwMzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy90d2w0MDMwLmR0c2kKQEAgLTE1Miw0ICsxNTIsMTAgQEAKIAkJa2V5cGFkLG51bS1yb3dzID0gPDg+OwogCQlrZXlwYWQsbnVtLWNvbHVtbnMgPSA8OD47CiAJfTsKKworCXR3bF9tYWRjOiBtYWRjIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0d2w0MDMwLW1hZGMiOworCQlpbnRlcnJ1cHRzID0gPDM+OworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3R3bDQwMzBfb21hcDMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3R3bDQwMzBfb21hcDMuZHRzaQppbmRleCBjMzUzZWYwLi4zNTM3YWU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90d2w0MDMwX29tYXAzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdHdsNDAzMF9vbWFwMy5kdHNpCkBAIC04LDcgKzgsNyBAQAogCiAmdHdsIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmdHdsNDAzMF9waW5zPjsKKwlwaW5jdHJsLTAgPSA8JnR3bDQwMzBfcGlucyAmdHdsNDAzMF92cGlucz47CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtMjMsMyArMjMsMjAgQEAKIAkJPjsKIAl9OwogfTsKKworLyoKKyAqIElmIHlvdXIgYm9hcmQgaXMgbm90IHVzaW5nIHRoZSBJMkM0IHBpbnMgd2l0aCB0d2w0MDMwLCB0aGVuIGRvbid0IGluY2x1ZGUKKyAqIHRoaXMgZmlsZS4gRm9yIHByb3BlciBpZGxlIG1vZGUgc2lnbmFsaW5nIHdpdGggc3lzX2Nsa3JlcSBhbmQgc3lzX29mZl9tb2RlCisgKiBwaW5zIHdlIG5lZWQgdG8gY29uZmlndXJlIEkyQzQsIG9yIGVsc2UgdXNlIHRoZSBsZWdhY3kgc3lzX252bW9kZTEgYW5kCisgKiBzeXNfbnZtb2RlMiBzaWduYWxpbmcuCisgKi8KKyZvbWFwM19wbXhfd2t1cCB7CisJdHdsNDAzMF92cGluczogcGlubXV4X3R3bDQwMzBfdnBpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMDAsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIGkyYzRfc2NsLmkyYzRfc2NsICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmEwMiwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogaTJjNF9zZGEuaTJjNF9zZGEgKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTA2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBzeXNfY2xrcmVxLnN5c19jbGtyZXEgKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTE4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBzeXNfb2ZmX21vZGUuc3lzX29mZl9tb2RlICovCisJCT47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZXhwcmVzcy12Mm0tcnMxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92ZXhwcmVzcy12Mm0tcnMxLmR0c2kKaW5kZXggYWM4NzBmYi4uNzU2Yzk4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmV4cHJlc3MtdjJtLXJzMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZleHByZXNzLXYybS1yczEuZHRzaQpAQCAtNzQsOCArNzQsMjQgQEAKIAkJCXYybV9zeXNyZWc6IHN5c3JlZ0AwMTAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyI7CiAJCQkJcmVnID0gPDB4MDEwMDAwIDB4MTAwMD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OworCisJCQkJdjJtX2xlZF9ncGlvczogc3lzX2xlZEAwOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbGVkIjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQl9OworCisJCQkJdjJtX21tY19ncGlvczogc3lzX21jaUA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbWNpIjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQl9OworCisJCQkJdjJtX2ZsYXNoX2dwaW9zOiBzeXNfZmxhc2hANGMgeworCQkJCQljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1zeXNyZWcsc3lzX2ZsYXNoIjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQl9OwogCQkJfTsKIAogCQkJdjJtX3N5c2N0bDogc3lzY3RsQDAyMDAwMCB7CkBAIC0xMTMsOCArMTI5LDggQEAKIAkJCQljb21wYXRpYmxlID0gImFybSxwbDE4MCIsICJhcm0scHJpbWVjZWxsIjsKIAkJCQlyZWcgPSA8MHgwNTAwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDkgMTA+OwotCQkJCWNkLWdwaW9zID0gPCZ2Mm1fc3lzcmVnIDAgMD47Ci0JCQkJd3AtZ3Bpb3MgPSA8JnYybV9zeXNyZWcgMSAwPjsKKwkJCQljZC1ncGlvcyA9IDwmdjJtX21tY19ncGlvcyAwIDA+OworCQkJCXdwLWdwaW9zID0gPCZ2Mm1fbW1jX2dwaW9zIDEgMD47CiAJCQkJbWF4LWZyZXF1ZW5jeSA9IDwxMjAwMDAwMD47CiAJCQkJdm1tYy1zdXBwbHkgPSA8JnYybV9maXhlZF8zdjM+OwogCQkJCWNsb2NrcyA9IDwmdjJtX2NsazI0bWh6PiwgPCZzbWJjbGs+OwpAQCAtMjY1LDYgKzI4MSw1OCBAQAogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInYybTpyZWZjbGszMmtoeiI7CiAJCX07CiAKKwkJbGVkcyB7CisJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJCXVzZXJAMSB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXIxIjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyAwIDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJfTsKKworCQkJdXNlckAyIHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjIiOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDEgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gIm1tYzAiOworCQkJfTsKKworCQkJdXNlckAzIHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjMiOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDIgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTAiOworCQkJfTsKKworCQkJdXNlckA0IHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjQiOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDMgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTEiOworCQkJfTsKKworCQkJdXNlckA1IHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjUiOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDQgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTIiOworCQkJfTsKKworCQkJdXNlckA2IHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjYiOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDUgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTMiOworCQkJfTsKKworCQkJdXNlckA3IHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjciOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDYgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTQiOworCQkJfTsKKworCQkJdXNlckA4IHsKKwkJCQlsYWJlbCA9ICJ2Mm06Z3JlZW46dXNlcjgiOworCQkJCWdwaW9zID0gPCZ2Mm1fbGVkX2dwaW9zIDcgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImNwdTUiOworCQkJfTsKKwkJfTsKKwogCQltY2MgewogCQkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3MsY29uZmlnLWJ1cyI7CiAJCQlhcm0sdmV4cHJlc3MsY29uZmlnLWJyaWRnZSA9IDwmdjJtX3N5c3JlZz47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZXhwcmVzcy12Mm0uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZleHByZXNzLXYybS5kdHNpCmluZGV4IGYxNDIwMzYuLmJhODU2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZleHByZXNzLXYybS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZleHByZXNzLXYybS5kdHNpCkBAIC03Myw4ICs3MywyNCBAQAogCQkJdjJtX3N5c3JlZzogc3lzcmVnQDAwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1zeXNyZWciOwogCQkJCXJlZyA9IDwweDAwMDAwIDB4MTAwMD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OworCisJCQkJdjJtX2xlZF9ncGlvczogc3lzX2xlZEAwOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbGVkIjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQl9OworCisJCQkJdjJtX21tY19ncGlvczogc3lzX21jaUA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbWNpIjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQl9OworCisJCQkJdjJtX2ZsYXNoX2dwaW9zOiBzeXNfZmxhc2hANGMgeworCQkJCQljb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1zeXNyZWcsc3lzX2ZsYXNoIjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQl9OwogCQkJfTsKIAogCQkJdjJtX3N5c2N0bDogc3lzY3RsQDAxMDAwIHsKQEAgLTExMiw4ICsxMjgsOCBAQAogCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMTgwIiwgImFybSxwcmltZWNlbGwiOwogCQkJCXJlZyA9IDwweDA1MDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw5IDEwPjsKLQkJCQljZC1ncGlvcyA9IDwmdjJtX3N5c3JlZyAwIDA+OwotCQkJCXdwLWdwaW9zID0gPCZ2Mm1fc3lzcmVnIDEgMD47CisJCQkJY2QtZ3Bpb3MgPSA8JnYybV9tbWNfZ3Bpb3MgMCAwPjsKKwkJCQl3cC1ncGlvcyA9IDwmdjJtX21tY19ncGlvcyAxIDA+OwogCQkJCW1heC1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OwogCQkJCXZtbWMtc3VwcGx5ID0gPCZ2Mm1fZml4ZWRfM3YzPjsKIAkJCQljbG9ja3MgPSA8JnYybV9jbGsyNG1oej4sIDwmc21iY2xrPjsKQEAgLTI2NCw2ICsyODAsNTggQEAKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJ2Mm06cmVmY2xrMzJraHoiOwogCQl9OwogCisJCWxlZHMgeworCQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCQl1c2VyQDEgeworCQkJCWxhYmVsID0gInYybTpncmVlbjp1c2VyMSI7CisJCQkJZ3Bpb3MgPSA8JnYybV9sZWRfZ3Bpb3MgMCAwPjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJCX07CisKKwkJCXVzZXJAMiB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXIyIjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyAxIDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJtbWMwIjsKKwkJCX07CisKKwkJCXVzZXJAMyB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXIzIjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyAyIDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCX07CisKKwkJCXVzZXJANCB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXI0IjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyAzIDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUxIjsKKwkJCX07CisKKwkJCXVzZXJANSB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXI1IjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyA0IDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUyIjsKKwkJCX07CisKKwkJCXVzZXJANiB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXI2IjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyA1IDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUzIjsKKwkJCX07CisKKwkJCXVzZXJANyB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXI3IjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyA2IDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHU0IjsKKwkJCX07CisKKwkJCXVzZXJAOCB7CisJCQkJbGFiZWwgPSAidjJtOmdyZWVuOnVzZXI4IjsKKwkJCQlncGlvcyA9IDwmdjJtX2xlZF9ncGlvcyA3IDA+OworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHU1IjsKKwkJCX07CisJCX07CisKIAkJbWNjIHsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLGNvbmZpZy1idXMiOwogCQkJYXJtLHZleHByZXNzLGNvbmZpZy1icmlkZ2UgPSA8JnYybV9zeXNyZWc+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmV4cHJlc3MtdjJwLWNhMTVfYTcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmV4cHJlc3MtdjJwLWNhMTVfYTcuZHRzCmluZGV4IDE1Zjk4Y2IuLmEyNWMyNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZleHByZXNzLXYycC1jYTE1X2E3LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy92ZXhwcmVzcy12MnAtY2ExNV9hNy5kdHMKQEAgLTMxMiw2ICszMTIsNyBAQAogCQkJYXJtLHZleHByZXNzLXN5c3JlZyxmdW5jID0gPDEyIDA+OwogCQkJbGFiZWwgPSAiQTE1IFBjb3JlIjsKIAkJfTsKKwogCQlwb3dlckAxIHsKIAkJCS8qIFRvdGFsIHBvd2VyIGZvciB0aGUgdGhyZWUgQTcgY29yZXMgKi8KIAkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXBvd2VyIjsKQEAgLTMyMiwxNCArMzIzLDE0IEBACiAJCWVuZXJneUAwIHsKIAkJCS8qIFRvdGFsIGVuZXJneSBmb3IgdGhlIHR3byBBMTUgY29yZXMgKi8KIAkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLWVuZXJneSI7Ci0JCQlhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMgPSA8MTMgMD47CisJCQlhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMgPSA8MTMgMD4sIDwxMyAxPjsKIAkJCWxhYmVsID0gIkExNSBKY29yZSI7CiAJCX07CiAKIAkJZW5lcmd5QDIgewogCQkJLyogVG90YWwgZW5lcmd5IGZvciB0aGUgdGhyZWUgQTcgY29yZXMgKi8KIAkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLWVuZXJneSI7Ci0JCQlhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMgPSA8MTMgMj47CisJCQlhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMgPSA8MTMgMj4sIDwxMyAzPjsKIAkJCWxhYmVsID0gIkE3IEpjb3JlIjsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWNjN2RiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUb3JhZGV4IEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJ2ZjYxMC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJUb3JhZGV4IENvbGlicmkgVkY2MSBDT00iOworCWNvbXBhdGlibGUgPSAidG9yYWRleCx2ZjYxMC1jb2xpYnJpIiwgImZzbCx2ZjYxMCI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eUxQMCwxMTUyMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDEwMDAwMDAwPjsKKwl9OworCisJY2xvY2tzIHsKKwkJZW5ldF9leHQgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCQl9OworCX07CisKK307CisKKyZlc2RoYzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2VzZGhjMT47CisJYnVzLXdpZHRoID0gPDQ+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZmZWMxIHsKKwlwaHktbW9kZSA9ICJybWlpIjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9mZWMxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismTDIgeworCWFybSxkYXRhLWxhdGVuY3kgPSA8MiAxIDI+OworCWFybSx0YWctbGF0ZW5jeSA9IDwzIDIgMz47Cit9OworCismdWFydDAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaW9tdXhjIHsKKwl2ZjYxMC1jb2xpYnJpIHsKKwkJcGluY3RybF9lc2RoYzE6IGVzZGhjMWdycCB7CisJCQlmc2wsZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQTI0X19FU0RIQzFfQ0xLCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyNV9fRVNESEMxX0NNRAkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjZfX0VTREhDMV9EQVQwCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyN19fRVNESEMxX0RBVDEJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI4X19FU0RIQzFfREFUQTIJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI5X19FU0RIQzFfREFUMwkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRCMjBfX0dQSU9fNDIJMHgyMTlkCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZmVjMTogZmVjMWdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRDOV9fRU5FVF9STUlJMV9NREMJCTB4MzBkMgorCQkJCVZGNjEwX1BBRF9QVEMxMF9fRU5FVF9STUlJMV9NRElPCTB4MzBkMworCQkJCVZGNjEwX1BBRF9QVEMxMV9fRU5FVF9STUlJMV9DUlMJCTB4MzBkMQorCQkJCVZGNjEwX1BBRF9QVEMxMl9fRU5FVF9STUlJX1JYRDEJCTB4MzBkMQorCQkJCVZGNjEwX1BBRF9QVEMxM19fRU5FVF9STUlJMV9SWEQwCTB4MzBkMQorCQkJCVZGNjEwX1BBRF9QVEMxNF9fRU5FVF9STUlJMV9SWEVSCTB4MzBkMQorCQkJCVZGNjEwX1BBRF9QVEMxNV9fRU5FVF9STUlJMV9UWEQxCTB4MzBkMgorCQkJCVZGNjEwX1BBRF9QVEMxNl9fRU5FVF9STUlJMV9UWEQwCTB4MzBkMgorCQkJCVZGNjEwX1BBRF9QVEMxN19fRU5FVF9STUlJMV9UWEVOCTB4MzBkMgorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQwOiB1YXJ0MGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRCMTBfX1VBUlQwX1RYCQkweDIxYTIKKwkJCQlWRjYxMF9QQURfUFRCMTFfX1VBUlQwX1JYCQkweDIxYTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MTogdWFydDFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQjRfX1VBUlQxX1RYCQkweDIxYTIKKwkJCQlWRjYxMF9QQURfUFRCNV9fVUFSVDFfUlgJCTB4MjFhMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQyOiB1YXJ0MmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFREMF9fVUFSVDJfVFgJCTB4MjFhMgorCQkJCVZGNjEwX1BBRF9QVEQxX19VQVJUMl9SWAkJMHgyMWExCisJCQkJVkY2MTBfUEFEX1BURDJfX1VBUlQyX1JUUwkJMHgyMWEyCisJCQkJVkY2MTBfUEFEX1BURDNfX1VBUlQyX0NUUwkJMHgyMWExCisJCQk+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMKaW5kZXggZGVkMzYxMC4uMTFkNzMzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzCkBAIC0xMTMsNiArMTEzLDEzIEBACiAJfTsKIH07CiAKKyZlc2RoYzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2VzZGhjMT47CisJYnVzLXdpZHRoID0gPDQ+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZmZWMwIHsKIAlwaHktbW9kZSA9ICJybWlpIjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTYwLDYgKzE2NywxOCBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX2VzZGhjMTogZXNkaGMxZ3JwIHsKKwkJCWZzbCxmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRBMjRfX0VTREhDMV9DTEsJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI1X19FU0RIQzFfQ01ECTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyNl9fRVNESEMxX0RBVDAJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI3X19FU0RIQzFfREFUMQkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjhfX0VTREhDMV9EQVRBMgkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjlfX0VTREhDMV9EQVQzCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEE3X19HUElPXzEzNAkweDIxOWQKKwkJCT47CisJCX07CisKIAkJcGluY3RybF9mZWMwOiBmZWMwZ3JwIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCVZGNjEwX1BBRF9QVEE2X19STUlJX0NMS0lOCQkweDMwZDEKQEAgLTE5Niw2ICsyMTUsMTcgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9wd20wOiBwd20wZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEIwX19GVE0wX0NIMAkJMHgxNTgyCisJCQkJVkY2MTBfUEFEX1BUQjFfX0ZUTTBfQ0gxCQkweDE1ODIKKwkJCQlWRjYxMF9QQURfUFRCMl9fRlRNMF9DSDIJCTB4MTU4MgorCQkJCVZGNjEwX1BBRF9QVEIzX19GVE0wX0NIMwkJMHgxNTgyCisJCQkJVkY2MTBfUEFEX1BUQjZfX0ZUTTBfQ0g2CQkweDE1ODIKKwkJCQlWRjYxMF9QQURfUFRCN19fRlRNMF9DSDcJCTB4MTU4MgorCQkJPjsKKwkJfTsKKwogCQlwaW5jdHJsX3NhaTI6IHNhaTJncnAgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJVkY2MTBfUEFEX1BUQTE2X19TQUkyX1RYX0JDTEsJCTB4MDJlZApAQCAtMjE3LDYgKzI0NywxMiBAQAogCX07CiB9OwogCismcHdtMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfcHdtMD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnNhaTIgewogCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC5kdHNpCmluZGV4IGI4Y2UwYWE3Li43MzM1NWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kKQEAgLTE4Myw2ICsxODMsMTkgQEAKIAkJCQljbG9jay1uYW1lcyA9ICJwaXQiOwogCQkJfTsKIAorCQkJcHdtMDogcHdtQDQwMDM4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mdG0tcHdtIjsKKwkJCQkjcHdtLWNlbGxzID0gPDM+OworCQkJCXJlZyA9IDwweDQwMDM4MDAwIDB4MTAwMD47CisJCQkJY2xvY2stbmFtZXMgPSAiZnRtX3N5cyIsICJmdG1fZXh0IiwKKwkJCQkJICAgICAgImZ0bV9maXgiLCAiZnRtX2NudF9jbGtfZW4iOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRlRNMD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9FWFRfU0VMPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0ZJWF9TRUw+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRVhUX0ZJWF9FTj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKIAkJCWFkYzA6IGFkY0A0MDAzYjAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtYWRjIjsKIAkJCQlyZWcgPSA8MHg0MDAzYjAwMCAweDEwMDA+OwpAQCAtMzQ3LDYgKzM2MCwxNyBAQAogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCisJCQllc2RoYzE6IGVzZGhjQDQwMGIyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1My1lc2RoYyI7CisJCQkJcmVnID0gPDB4NDAwYjIwMDAgMHg0MDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMjggMHgwND47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19JUEdfQlVTPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19QTEFURk9STV9CVVM+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VTREhDMT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCiAJCQlmZWMwOiBldGhlcm5ldEA0MDBkMDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXZmNjAwLWZlYyI7CiAJCQkJcmVnID0gPDB4NDAwZDAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtNzAwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKaW5kZXggYzExNzZhYi4uNzYwYmJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAxMSBYaWxpbngKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDE0IFhpbGlueAogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlyZWcgPSA8MD47CiAJCQljbG9ja3MgPSA8JmNsa2MgMz47CiAJCQljbG9jay1sYXRlbmN5ID0gPDEwMDA+OworCQkJY3B1MC1zdXBwbHkgPSA8JnJlZ3VsYXRvcl92Y2NwaW50PjsKIAkJCW9wZXJhdGluZy1wb2ludHMgPSA8CiAJCQkJLyoga0h6ICAgIHVWICovCiAJCQkJNjY2NjY3ICAxMDAwMDAwCkBAIC00OCw2ICs0OSwxNSBAQAogCQlyZWcgPSA8IDB4Zjg4OTEwMDAgMHgxMDAwIDB4Zjg4OTMwMDAgMHgxMDAwID47CiAJfTsKIAorCXJlZ3VsYXRvcl92Y2NwaW50OiBmaXhlZHJlZ3VsYXRvckAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NQSU5UIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworCiAJYW1iYSB7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNTUsNyArNjUsNyBAQAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKIAkJcmFuZ2VzOwogCi0JCWkyYzA6IHp5bnEtaTJjQGUwMDA0MDAwIHsKKwkJaTJjMDogaTJjQGUwMDA0MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiY2RucyxpMmMtcjFwMTAiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCWNsb2NrcyA9IDwmY2xrYyAzOD47CkBAIC02Niw3ICs3Niw3IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJfTsKIAotCQlpMmMxOiB6eW5xLWkyY0BlMDAwNTAwMCB7CisJCWkyYzE6IGkyY0BlMDAwNTAwMCB7CiAJCQljb21wYXRpYmxlID0gImNkbnMsaTJjLXIxcDEwIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQljbG9ja3MgPSA8JmNsa2MgMzk+OwpAQCAtODAsNyArOTAsNiBAQAogCQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckBmOGYwMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJcmVnID0gPDB4RjhGMDEwMDAgMHgxMDAwPiwKIAkJCSAgICAgIDwweEY4RjAwMTAwIDB4MTAwPjsKQEAgLTk1LDcgKzEwNCw3IEBACiAJCQljYWNoZS1sZXZlbCA9IDwyPjsKIAkJfTsKIAotCQl1YXJ0MDogdWFydEBlMDAwMDAwMCB7CisJCXVhcnQwOiBzZXJpYWxAZTAwMDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHh1YXJ0cHMiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCWNsb2NrcyA9IDwmY2xrYyAyMz4sIDwmY2xrYyA0MD47CkBAIC0xMDQsNyArMTEzLDcgQEAKIAkJCWludGVycnVwdHMgPSA8MCAyNyA0PjsKIAkJfTsKIAotCQl1YXJ0MTogdWFydEBlMDAwMTAwMCB7CisJCXVhcnQxOiBzZXJpYWxAZTAwMDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHh1YXJ0cHMiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCWNsb2NrcyA9IDwmY2xrYyAyND4sIDwmY2xrYyA0MT47CkBAIC0xMzEsNyArMTQwLDcgQEAKIAkJCWNsb2NrLW5hbWVzID0gInBjbGsiLCAiaGNsayIsICJ0eF9jbGsiOwogCQl9OwogCi0JCXNkaGNpMDogcHM3LXNkaGNpQGUwMTAwMDAwIHsKKwkJc2RoY2kwOiBzZGhjaUBlMDEwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImFyYXNhbixzZGhjaS04LjlhIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQljbG9jay1uYW1lcyA9ICJjbGtfeGluIiwgImNsa19haGIiOwpAQCAtMTQxLDcgKzE1MCw3IEBACiAJCQlyZWcgPSA8MHhlMDEwMDAwMCAweDEwMDA+OwogCQl9IDsKIAotCQlzZGhjaTE6IHBzNy1zZGhjaUBlMDEwMTAwMCB7CisJCXNkaGNpMTogc2RoY2lAZTAxMDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJhcmFzYW4sc2RoY2ktOC45YSI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJY2xvY2stbmFtZXMgPSAiY2xrX3hpbiIsICJjbGtfYWhiIjsKQEAgLTE3Nyw2ICsxODYsMTEgQEAKIAkJCX07CiAJCX07CiAKKwkJZGV2Y2ZnOiBkZXZjZmdAZjgwMDcwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ4bG54LHp5bnEtZGV2Y2ZnLTEuMCI7CisJCQlyZWcgPSA8MHhmODAwNzAwMCAweDEwMD47CisJCX0gOworCiAJCWdsb2JhbF90aW1lcjogdGltZXJAZjhmMDAyMDAgewogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdsb2JhbC10aW1lciI7CiAJCQlyZWcgPSA8MHhmOGYwMDIwMCAweDIwPjsKQEAgLTE4NSwyNiArMTk5LDI3IEBACiAJCQljbG9ja3MgPSA8JmNsa2MgND47CiAJCX07CiAKLQkJdHRjMDogdHRjMEBmODAwMTAwMCB7CisJCXR0YzA6IHRpbWVyQGY4MDAxMDAwIHsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OwotCQkJaW50ZXJydXB0cyA9IDwgMCAxMCA0IDAgMTEgNCAwIDEyIDQgPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMCA0PiwgPDAgMTEgND4sIDwwIDEyIDQ+OwogCQkJY29tcGF0aWJsZSA9ICJjZG5zLHR0YyI7CiAJCQljbG9ja3MgPSA8JmNsa2MgNj47CiAJCQlyZWcgPSA8MHhGODAwMTAwMCAweDEwMDA+OwogCQl9OwogCi0JCXR0YzE6IHR0YzFAZjgwMDIwMDAgeworCQl0dGMxOiB0aW1lckBmODAwMjAwMCB7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKLQkJCWludGVycnVwdHMgPSA8IDAgMzcgNCAwIDM4IDQgMCAzOSA0ID47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzcgND4sIDwwIDM4IDQ+LCA8MCAzOSA0PjsKIAkJCWNvbXBhdGlibGUgPSAiY2Rucyx0dGMiOwogCQkJY2xvY2tzID0gPCZjbGtjIDY+OwogCQkJcmVnID0gPDB4RjgwMDIwMDAgMHgxMDAwPjsKIAkJfTsKLQkJc2N1dGltZXI6IHNjdXRpbWVyQGY4ZjAwNjAwIHsKKworCQlzY3V0aW1lcjogdGltZXJAZjhmMDA2MDAgewogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47Ci0JCQlpbnRlcnJ1cHRzID0gPCAxIDEzIDB4MzAxID47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHgzMDE+OwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXR3ZC10aW1lciI7Ci0JCQlyZWcgPSA8IDB4ZjhmMDA2MDAgMHgyMCA+OworCQkJcmVnID0gPDB4ZjhmMDA2MDAgMHgyMD47CiAJCQljbG9ja3MgPSA8JmNsa2MgND47CiAJCX0gOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZWRtYS5jIGIvYXJjaC9hcm0vY29tbW9uL2VkbWEuYwppbmRleCA1MzM5MDA5Li40ODViZTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZWRtYS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9lZG1hLmMKQEAgLTEwMiw3ICsxMDIsMTMgQEAKICNkZWZpbmUgUEFSTV9PRkZTRVQocGFyYW1fbm8pCShFRE1BX1BBUk0gKyAoKHBhcmFtX25vKSA8PCA1KSkKIAogI2RlZmluZSBFRE1BX0RDSE1BUAkweDAxMDAgIC8qIDY0IHJlZ2lzdGVycyAqLwotI2RlZmluZSBDSE1BUF9FWElTVAlCSVQoMjQpCisKKy8qIENDQ0ZHIHJlZ2lzdGVyICovCisjZGVmaW5lIEdFVF9OVU1fRE1BQ0goeCkJKHggJiAweDcpIC8qIGJpdHMgMC0yICovCisjZGVmaW5lIEdFVF9OVU1fUEFFTlRSWSh4KQkoKHggJiAweDcwMDApID4+IDEyKSAvKiBiaXRzIDEyLTE0ICovCisjZGVmaW5lIEdFVF9OVU1fRVZRVUUoeCkJKCh4ICYgMHg3MDAwMCkgPj4gMTYpIC8qIGJpdHMgMTYtMTggKi8KKyNkZWZpbmUgR0VUX05VTV9SRUdOKHgpCQkoKHggJiAweDMwMDAwMCkgPj4gMjApIC8qIGJpdHMgMjAtMjEgKi8KKyNkZWZpbmUgQ0hNQVBfRVhJU1QJCUJJVCgyNCkKIAogI2RlZmluZSBFRE1BX01BWF9ETUFDSCAgICAgICAgICAgNjQKICNkZWZpbmUgRURNQV9NQVhfUEFSQU1FTlRSWSAgICAgNTEyCkBAIC0yMzMsNyArMjM5LDYgQEAKIAl1bnNpZ25lZAludW1fcmVnaW9uOwogCXVuc2lnbmVkCW51bV9zbG90czsKIAl1bnNpZ25lZAludW1fdGM7Ci0JdW5zaWduZWQJbnVtX2NjOwogCWVudW0gZG1hX2V2ZW50X3EgCWRlZmF1bHRfcXVldWU7CiAKIAkvKiBsaXN0IG9mIGNoYW5uZWxzIHdpdGggbm8gZXZlbiB0cmlnZ2VyOyB0ZXJtaW5hdGVkIGJ5ICItMSIgKi8KQEAgLTI5MCwxMiArMjk1LDYgQEAKIAkJCX4oMHg3IDw8IGJpdCksIHF1ZXVlX25vIDw8IGJpdCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtYXBfcXVldWVfdGModW5zaWduZWQgY3RsciwgaW50IHF1ZXVlX25vLCBpbnQgdGNfbm8pCi17Ci0JaW50IGJpdCA9IHF1ZXVlX25vICogNDsKLQllZG1hX21vZGlmeShjdGxyLCBFRE1BX1FVRVRDTUFQLCB+KDB4NyA8PCBiaXQpLCAoKHRjX25vICYgMHg3KSA8PCBiaXQpKTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl9wcmlvcml0eV90b19xdWV1ZSh1bnNpZ25lZCBjdGxyLCBpbnQgcXVldWVfbm8sCiAJCWludCBwcmlvcml0eSkKIHsKQEAgLTk5NCwyOSArOTkzLDIzIEBACiBFWFBPUlRfU1lNQk9MKGVkbWFfc2V0X2Rlc3QpOwogCiAvKioKLSAqIGVkbWFfZ2V0X3Bvc2l0aW9uIC0gcmV0dXJucyB0aGUgY3VycmVudCB0cmFuc2ZlciBwb2ludHMKKyAqIGVkbWFfZ2V0X3Bvc2l0aW9uIC0gcmV0dXJucyB0aGUgY3VycmVudCB0cmFuc2ZlciBwb2ludAogICogQHNsb3Q6IHBhcmFtZXRlciBSQU0gc2xvdCBiZWluZyBleGFtaW5lZAotICogQHNyYzogcG9pbnRlciB0byBzb3VyY2UgcG9ydCBwb3NpdGlvbgotICogQGRzdDogcG9pbnRlciB0byBkZXN0aW5hdGlvbiBwb3J0IHBvc2l0aW9uCisgKiBAZHN0OiAgdHJ1ZSBzZWxlY3RzIHRoZSBkZXN0IHBvc2l0aW9uLCBmYWxzZSB0aGUgc291cmNlCiAgKgotICogUmV0dXJucyBjdXJyZW50IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGZvciBhIHBhcnRpY3VsYXIKLSAqIHBhcmFtZXRlciBSQU0gc2xvdC4gIEl0cyBjaGFubmVsIHNob3VsZCBub3QgYmUgYWN0aXZlIHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBhY3RpdmUgc2xvdAogICovCi12b2lkIGVkbWFfZ2V0X3Bvc2l0aW9uKHVuc2lnbmVkIHNsb3QsIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZHN0KQorZG1hX2FkZHJfdCBlZG1hX2dldF9wb3NpdGlvbih1bnNpZ25lZCBzbG90LCBib29sIGRzdCkKIHsKLQlzdHJ1Y3QgZWRtYWNjX3BhcmFtIHRlbXA7Ci0JdW5zaWduZWQgY3RscjsKKwl1MzIgb2ZmcywgY3RsciA9IEVETUFfQ1RMUihzbG90KTsKIAotCWN0bHIgPSBFRE1BX0NUTFIoc2xvdCk7CiAJc2xvdCA9IEVETUFfQ0hBTl9TTE9UKHNsb3QpOwogCi0JZWRtYV9yZWFkX3Nsb3QoRURNQV9DVExSX0NIQU4oY3Rsciwgc2xvdCksICZ0ZW1wKTsKLQlpZiAoc3JjICE9IE5VTEwpCi0JCSpzcmMgPSB0ZW1wLnNyYzsKLQlpZiAoZHN0ICE9IE5VTEwpCi0JCSpkc3QgPSB0ZW1wLmRzdDsKKwlvZmZzID0gUEFSTV9PRkZTRVQoc2xvdCk7CisJb2ZmcyArPSBkc3QgPyBQQVJNX0RTVCA6IFBBUk1fU1JDOworCisJcmV0dXJuIGVkbWFfcmVhZChjdGxyLCBvZmZzKTsKIH0KLUVYUE9SVF9TWU1CT0woZWRtYV9nZXRfcG9zaXRpb24pOwogCiAvKioKICAqIGVkbWFfc2V0X3NyY19pbmRleCAtIGNvbmZpZ3VyZSBETUEgc291cmNlIGFkZHJlc3MgaW5kZXhpbmcKQEAgLTE0MjEsNiArMTQxNCw2NyBAQAogfQogRVhQT1JUX1NZTUJPTChlZG1hX2NsZWFyX2V2ZW50KTsKIAorc3RhdGljIGludCBlZG1hX3NldHVwX2Zyb21faHcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqcGRhdGEsCisJCQkgICAgICBzdHJ1Y3QgZWRtYSAqZWRtYV9jYykKK3sKKwlpbnQgaTsKKwl1MzIgdmFsdWUsIGNjY2ZnOworCXM4ICgqcXVldWVfcHJpb3JpdHlfbWFwKVsyXTsKKworCS8qIERlY29kZSB0aGUgZURNQTMgY29uZmlndXJhdGlvbiBmcm9tIENDQ0ZHIHJlZ2lzdGVyICovCisJY2NjZmcgPSBlZG1hX3JlYWQoMCwgRURNQV9DQ0NGRyk7CisKKwl2YWx1ZSA9IEdFVF9OVU1fUkVHTihjY2NmZyk7CisJZWRtYV9jYy0+bnVtX3JlZ2lvbiA9IEJJVCh2YWx1ZSk7CisKKwl2YWx1ZSA9IEdFVF9OVU1fRE1BQ0goY2NjZmcpOworCWVkbWFfY2MtPm51bV9jaGFubmVscyA9IEJJVCh2YWx1ZSArIDEpOworCisJdmFsdWUgPSBHRVRfTlVNX1BBRU5UUlkoY2NjZmcpOworCWVkbWFfY2MtPm51bV9zbG90cyA9IEJJVCh2YWx1ZSArIDQpOworCisJdmFsdWUgPSBHRVRfTlVNX0VWUVVFKGNjY2ZnKTsKKwllZG1hX2NjLT5udW1fdGMgPSB2YWx1ZSArIDE7CisKKwlkZXZfZGJnKGRldiwgImVETUEzIEhXIGNvbmZpZ3VyYXRpb24gKGNjY2ZnOiAweCUwOHgpOlxuIiwgY2NjZmcpOworCWRldl9kYmcoZGV2LCAibnVtX3JlZ2lvbjogJXVcbiIsIGVkbWFfY2MtPm51bV9yZWdpb24pOworCWRldl9kYmcoZGV2LCAibnVtX2NoYW5uZWw6ICV1XG4iLCBlZG1hX2NjLT5udW1fY2hhbm5lbHMpOworCWRldl9kYmcoZGV2LCAibnVtX3Nsb3Q6ICV1XG4iLCBlZG1hX2NjLT5udW1fc2xvdHMpOworCWRldl9kYmcoZGV2LCAibnVtX3RjOiAldVxuIiwgZWRtYV9jYy0+bnVtX3RjKTsKKworCS8qIE5vdGhpbmcgbmVlZCB0byBiZSBkb25lIGlmIHF1ZXVlIHByaW9yaXR5IGlzIHByb3ZpZGVkICovCisJaWYgKHBkYXRhLT5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ29uZmlndXJlIFRDL3F1ZXVlIHByaW9yaXR5IGFzIGZvbGxvd3M6CisJICogUTAgLSBwcmlvcml0eSAwCisJICogUTEgLSBwcmlvcml0eSAxCisJICogUTIgLSBwcmlvcml0eSAyCisJICogLi4uCisJICogVGhlIG1lYW5pbmcgb2YgcHJpb3JpdHkgbnVtYmVyczogMCBoaWdoZXN0IHByaW9yaXR5LCA3IGxvd2VzdAorCSAqIHByaW9yaXR5LiBTbyBRMCBpcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBhbmQgdGhlIGxhc3QgcXVldWUgaGFzCisJICogdGhlIGxvd2VzdCBwcmlvcml0eS4KKwkgKi8KKwlxdWV1ZV9wcmlvcml0eV9tYXAgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJCQkgIChlZG1hX2NjLT5udW1fdGMgKyAxKSAqIHNpemVvZihzOCksCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWV1ZV9wcmlvcml0eV9tYXApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IGVkbWFfY2MtPm51bV90YzsgaSsrKSB7CisJCXF1ZXVlX3ByaW9yaXR5X21hcFtpXVswXSA9IGk7CisJCXF1ZXVlX3ByaW9yaXR5X21hcFtpXVsxXSA9IGk7CisJfQorCXF1ZXVlX3ByaW9yaXR5X21hcFtpXVswXSA9IC0xOworCXF1ZXVlX3ByaW9yaXR5X21hcFtpXVsxXSA9IC0xOworCisJcGRhdGEtPnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcgPSBxdWV1ZV9wcmlvcml0eV9tYXA7CisJcGRhdGEtPmRlZmF1bHRfcXVldWUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKICNpZiBJU19FTkFCTEVEKENPTkZJR19PRikgJiYgSVNfRU5BQkxFRChDT05GSUdfRE1BREVWSUNFUykKIAogc3RhdGljIGludCBlZG1hX3hiYXJfZXZlbnRfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLApAQCAtMTQ3MSw2NSArMTUyNSwxNiBAQAogCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCSAgICBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqcGRhdGEpCiB7Ci0JaW50IHJldCA9IDAsIGk7Ci0JdTMyIHZhbHVlOworCWludCByZXQgPSAwOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAlzaXplX3Qgc3o7CiAJc3RydWN0IGVkbWFfcnN2X2luZm8gKnJzdl9pbmZvOwotCXM4ICgqcXVldWVfdGNfbWFwKVsyXSwgKCpxdWV1ZV9wcmlvcml0eV9tYXApWzJdOwotCi0JbWVtc2V0KHBkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGVkbWFfc29jX2luZm8pKTsKLQotCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJkbWEtY2hhbm5lbHMiLCAmdmFsdWUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXBkYXRhLT5uX2NoYW5uZWwgPSB2YWx1ZTsKLQotCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ0aSxlZG1hLXJlZ2lvbnMiLCAmdmFsdWUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXBkYXRhLT5uX3JlZ2lvbiA9IHZhbHVlOwotCi0JcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLGVkbWEtc2xvdHMiLCAmdmFsdWUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXBkYXRhLT5uX3Nsb3QgPSB2YWx1ZTsKLQotCXBkYXRhLT5uX2NjID0gMTsKIAogCXJzdl9pbmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBlZG1hX3Jzdl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyc3ZfaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGRhdGEtPnJzdiA9IHJzdl9pbmZvOwogCi0JcXVldWVfdGNfbWFwID0gZGV2bV9remFsbG9jKGRldiwgOCpzaXplb2YoczgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXF1ZXVlX3RjX21hcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXF1ZXVlX3RjX21hcFtpXVswXSA9IGk7Ci0JCXF1ZXVlX3RjX21hcFtpXVsxXSA9IGk7Ci0JfQotCXF1ZXVlX3RjX21hcFtpXVswXSA9IC0xOwotCXF1ZXVlX3RjX21hcFtpXVsxXSA9IC0xOwotCi0JcGRhdGEtPnF1ZXVlX3RjX21hcHBpbmcgPSBxdWV1ZV90Y19tYXA7Ci0KLQlxdWV1ZV9wcmlvcml0eV9tYXAgPSBkZXZtX2t6YWxsb2MoZGV2LCA4KnNpemVvZihzOCksIEdGUF9LRVJORUwpOwotCWlmICghcXVldWVfcHJpb3JpdHlfbWFwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcXVldWVfcHJpb3JpdHlfbWFwW2ldWzBdID0gaTsKLQkJcXVldWVfcHJpb3JpdHlfbWFwW2ldWzFdID0gaTsKLQl9Ci0JcXVldWVfcHJpb3JpdHlfbWFwW2ldWzBdID0gLTE7Ci0JcXVldWVfcHJpb3JpdHlfbWFwW2ldWzFdID0gLTE7Ci0KLQlwZGF0YS0+cXVldWVfcHJpb3JpdHlfbWFwcGluZyA9IHF1ZXVlX3ByaW9yaXR5X21hcDsKLQotCXBkYXRhLT5kZWZhdWx0X3F1ZXVlID0gMDsKLQogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5vZGUsICJ0aSxlZG1hLXhiYXItZXZlbnQtbWFwIiwgJnN6KTsKIAlpZiAocHJvcCkKIAkJcmV0ID0gZWRtYV94YmFyX2V2ZW50X21hcChkZXYsIG5vZGUsIHBkYXRhLCBzeik7CkBAIC0xNTU2LDYgKzE1NjEsNyBAQAogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCiAJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBlZG1hX2ZpbHRlcl9pbmZvLmRtYV9jYXApOworCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGVkbWFfZmlsdGVyX2luZm8uZG1hX2NhcCk7CiAJb2ZfZG1hX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LT5vZl9ub2RlLCBvZl9kbWFfc2ltcGxlX3hsYXRlLAogCQkJCSAgICZlZG1hX2ZpbHRlcl9pbmZvKTsKIApAQCAtMTU3NCw3ICsxNTgwLDYgQEAKIAlzdHJ1Y3QgZWRtYV9zb2NfaW5mbwkqKmluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAgICAqbmluZm9bRURNQV9NQVhfQ0NdID0ge05VTEx9OwogCXM4CQkoKnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcpWzJdOwotCXM4CQkoKnF1ZXVlX3RjX21hcHBpbmcpWzJdOwogCWludAkJCWksIGosIG9mZiwgbG4sIGZvdW5kID0gMDsKIAlpbnQJCQlzdGF0dXMgPSAtMTsKIAljb25zdCBzMTYJCSgqcnN2X2NoYW5zKVsyXTsKQEAgLTE1ODUsNyArMTU5MCw2IEBACiAJc3RydWN0IHJlc291cmNlCQkqcltFRE1BX01BWF9DQ10gPSB7TlVMTH07CiAJc3RydWN0IHJlc291cmNlCQlyZXNbRURNQV9NQVhfQ0NdOwogCWNoYXIJCQlyZXNfbmFtZVsxMF07Ci0JY2hhcgkJCWlycV9uYW1lWzEwXTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQJCQlyZXQ7CkBAIC0xNjUwLDEyICsxNjU0LDEwIEBACiAJCWlmICghZWRtYV9jY1tqXSkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCWVkbWFfY2Nbal0tPm51bV9jaGFubmVscyA9IG1pbl90KHVuc2lnbmVkLCBpbmZvW2pdLT5uX2NoYW5uZWwsCi0JCQkJCQkJRURNQV9NQVhfRE1BQ0gpOwotCQllZG1hX2NjW2pdLT5udW1fc2xvdHMgPSBtaW5fdCh1bnNpZ25lZCwgaW5mb1tqXS0+bl9zbG90LAotCQkJCQkJCUVETUFfTUFYX1BBUkFNRU5UUlkpOwotCQllZG1hX2NjW2pdLT5udW1fY2MgPSBtaW5fdCh1bnNpZ25lZCwgaW5mb1tqXS0+bl9jYywKLQkJCQkJCQlFRE1BX01BWF9DQyk7CisJCS8qIEdldCBlRE1BMyBjb25maWd1cmF0aW9uIGZyb20gSVAgKi8KKwkJcmV0ID0gZWRtYV9zZXR1cF9mcm9tX2h3KGRldiwgaW5mb1tqXSwgZWRtYV9jY1tqXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCiAJCWVkbWFfY2Nbal0tPmRlZmF1bHRfcXVldWUgPSBpbmZvW2pdLT5kZWZhdWx0X3F1ZXVlOwogCkBAIC0xNzA3LDE0ICsxNzA5LDIxIEBACiAKIAkJaWYgKG5vZGUpIHsKIAkJCWlycVtqXSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOworCQkJZXJyX2lycVtqXSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDIpOwogCQl9IGVsc2UgeworCQkJY2hhciBpcnFfbmFtZVsxMF07CisKIAkJCXNwcmludGYoaXJxX25hbWUsICJlZG1hJWQiLCBqKTsKIAkJCWlycVtqXSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIGlycV9uYW1lKTsKKworCQkJc3ByaW50ZihpcnFfbmFtZSwgImVkbWElZF9lcnIiLCBqKTsKKwkJCWVycl9pcnFbal0gPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBpcnFfbmFtZSk7CiAJCX0KIAkJZWRtYV9jY1tqXS0+aXJxX3Jlc19zdGFydCA9IGlycVtqXTsKLQkJc3RhdHVzID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnFbal0sCi0JCQkJCSAgZG1hX2lycV9oYW5kbGVyLCAwLCAiZWRtYSIsCi0JCQkJCSAgJnBkZXYtPmRldik7CisJCWVkbWFfY2Nbal0tPmlycV9yZXNfZW5kID0gZXJyX2lycVtqXTsKKworCQlzdGF0dXMgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxW2pdLCBkbWFfaXJxX2hhbmRsZXIsIDAsCisJCQkJCSAgImVkbWEiLCBkZXYpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGV2X2RiZygmcGRldi0+ZGV2LAogCQkJCSJkZXZtX3JlcXVlc3RfaXJxICVkIGZhaWxlZCAtLT4gJWRcbiIsCkBAIC0xNzIyLDE2ICsxNzMxLDggQEAKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAotCQlpZiAobm9kZSkgewotCQkJZXJyX2lycVtqXSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDIpOwotCQl9IGVsc2UgewotCQkJc3ByaW50ZihpcnFfbmFtZSwgImVkbWElZF9lcnIiLCBqKTsKLQkJCWVycl9pcnFbal0gPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBpcnFfbmFtZSk7Ci0JCX0KLQkJZWRtYV9jY1tqXS0+aXJxX3Jlc19lbmQgPSBlcnJfaXJxW2pdOwotCQlzdGF0dXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGVycl9pcnFbal0sCi0JCQkJCSAgZG1hX2NjZXJyX2hhbmRsZXIsIDAsCi0JCQkJCSAgImVkbWFfZXJyb3IiLCAmcGRldi0+ZGV2KTsKKwkJc3RhdHVzID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGVycl9pcnFbal0sIGRtYV9jY2Vycl9oYW5kbGVyLCAwLAorCQkJCQkgICJlZG1hX2Vycm9yIiwgZGV2KTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwKIAkJCQkiZGV2bV9yZXF1ZXN0X2lycSAlZCBmYWlsZWQgLS0+ICVkXG4iLApAQCAtMTc0MiwxNCArMTc0Myw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBlZG1hX2NjW2pdLT5udW1fY2hhbm5lbHM7IGkrKykKIAkJCW1hcF9kbWFjaF9xdWV1ZShqLCBpLCBpbmZvW2pdLT5kZWZhdWx0X3F1ZXVlKTsKIAotCQlxdWV1ZV90Y19tYXBwaW5nID0gaW5mb1tqXS0+cXVldWVfdGNfbWFwcGluZzsKIAkJcXVldWVfcHJpb3JpdHlfbWFwcGluZyA9IGluZm9bal0tPnF1ZXVlX3ByaW9yaXR5X21hcHBpbmc7CiAKLQkJLyogRXZlbnQgcXVldWUgdG8gVEMgbWFwcGluZyAqLwotCQlmb3IgKGkgPSAwOyBxdWV1ZV90Y19tYXBwaW5nW2ldWzBdICE9IC0xOyBpKyspCi0JCQltYXBfcXVldWVfdGMoaiwgcXVldWVfdGNfbWFwcGluZ1tpXVswXSwKLQkJCQkJcXVldWVfdGNfbWFwcGluZ1tpXVsxXSk7Ci0KIAkJLyogRXZlbnQgcXVldWUgcHJpb3JpdHkgbWFwcGluZyAqLwogCQlmb3IgKGkgPSAwOyBxdWV1ZV9wcmlvcml0eV9tYXBwaW5nW2ldWzBdICE9IC0xOyBpKyspCiAJCQlhc3NpZ25fcHJpb3JpdHlfdG9fcXVldWUoaiwKQEAgLTE3NjIsNyArMTc1Nyw3IEBACiAJCWlmIChlZG1hX3JlYWQoaiwgRURNQV9DQ0NGRykgJiBDSE1BUF9FWElTVCkKIAkJCW1hcF9kbWFjaF9wYXJhbShqKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgaW5mb1tqXS0+bl9yZWdpb247IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgZWRtYV9jY1tqXS0+bnVtX3JlZ2lvbjsgaSsrKSB7CiAJCQllZG1hX3dyaXRlX2FycmF5MihqLCBFRE1BX0RSQUUsIGksIDAsIDB4MCk7CiAJCQllZG1hX3dyaXRlX2FycmF5MihqLCBFRE1BX0RSQUUsIGksIDEsIDB4MCk7CiAJCQllZG1hX3dyaXRlX2FycmF5KGosIEVETUFfUVJBRSwgaSwgMHgwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnNDVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKaW5kZXggZTE4MWE1MC4uYzY2NjFhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKQEAgLTgzLDcgKzgzLDYgQEAKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfTVhUPW0KLUNPTkZJR19UT1VDSFNDUkVFTl9BVE1FTF9UU0FEQ0M9eQogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CkBAIC0xNDYsNiArMTQ1LDggQEAKIENPTkZJR19BVF9IRE1BQz15CiBDT05GSUdfRE1BVEVTVD1tCiAjIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19JSU89eQorQ09ORklHX0FUOTFfQURDPXkKIENPTkZJR19FWFQ0X0ZTPXkKIENPTkZJR19GQU5PVElGWT15CiBDT05GSUdfVkZBVF9GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsX2RlZmNvbmZpZwppbmRleCA4NWY4NDZhLi41ZDc3OTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybF9kZWZjb25maWcKQEAgLTQ1LDcgKzQ1LDYgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfVFNBRENDPXkKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKQEAgLTY1LDYgKzY0LDggQEAKIENPTkZJR19NTUNfQVRNRUxNQ0k9bQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15CitDT05GSUdfSUlPPXkKK0NPTkZJR19BVDkxX0FEQz15CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9heG01NXh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXhtNTV4eF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyNjBkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXhtNTV4eF9kZWZjb25maWcKQEAgLTAsMCArMSwyNDggQEAKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0ZIQU5ETEU9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorQ09ORklHX1RBU0tTVEFUUz15CitDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKK0NPTkZJR19UQVNLX1hBQ0NUPXkKK0NPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX0FVVE9HUk9VUD15CitDT05GSUdfUkVMQVk9eQorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVhYSUE9eQorQ09ORklHX0dQSU9fUENBOTUzWD15CitDT05GSUdfQVJNX0xQQUU9eQorQ09ORklHX0FSTV9USFVNQkVFPXkKK0NPTkZJR19BUk1fRVJSQVRBXzQzMDk3Mz15CitDT05GSUdfQVJNX0VSUkFUQV82NDM3MTk9eQorQ09ORklHX0FSTV9FUlJBVEFfNzIwNzg5PXkKK0NPTkZJR19BUk1fRVJSQVRBXzc1NDMyMj15CitDT05GSUdfQVJNX0VSUkFUQV83NTQzMjc9eQorQ09ORklHX0FSTV9FUlJBVEFfNzY0MzY5PXkKK0NPTkZJR19BUk1fRVJSQVRBXzc3NTQyMD15CitDT05GSUdfQVJNX0VSUkFUQV83OTgxODE9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX01TST15CitDT05GSUdfUENJRV9BWFhJQT15CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTE2CitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfSElHSE1FTT15CitDT05GSUdfS1NNPXkKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0FSTV9BUFBFTkRFRF9EVEI9eQorQ09ORklHX0FSTV9BVEFHX0RUQl9DT01QQVQ9eQorQ09ORklHX1ZGUD15CitDT05GSUdfTkVPTj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk1fVVNFUj15CitDT05GSUdfWEZSTV9TVUJfUE9MSUNZPXkKK0NPTkZJR19YRlJNX01JR1JBVEU9eQorQ09ORklHX1hGUk1fU1RBVElTVElDUz15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JTkVUX0FIPXkKK0NPTkZJR19JTkVUX0VTUD15CitDT05GSUdfSU5FVF9JUENPTVA9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HPXkKK0NPTkZJR19CUklER0U9eQorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQorQ09ORklHX01URD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9BRlNfUEFSVFM9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX09GPXkKK0NPTkZJR19NVERfTTI1UDgwPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0VFUFJPTV9BVDI0PXkKK0NPTkZJR19FRVBST01fQVQyNT15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfQVRBPXkKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKK0NPTkZJR19QQVRBX09GX1BMQVRGT1JNPXkKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9ETT15CitDT05GSUdfRE1fVUVWRU5UPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19UVU49eQorQ09ORklHX1ZFVEg9eQorQ09ORklHX1ZJUlRJT19ORVQ9eQorIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX0ZBUkFEQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNU0MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfV0laTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfQUxQUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fQU1CQUtNST15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKK0NPTkZJR19WSVJUSU9fQ09OU09MRT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19NVVg9eQorQ09ORklHX0kyQ19BWFhJQT15CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfUEwwMjI9eQorQ09ORklHX0RQODM2NDBfUEhZPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKK0NPTkZJR19HUElPX1BMMDYxPXkKK0NPTkZJR19QT1dFUl9TVVBQTFk9eQorQ09ORklHX1BPV0VSX1JFU0VUPXkKK0NPTkZJR19QT1dFUl9SRVNFVF9BWFhJQT15CitDT05GSUdfU0VOU09SU19BRFQ3NDc1PXkKK0NPTkZJR19TRU5TT1JTX0pDNDI9eQorQ09ORklHX1NFTlNPUlNfTE03NT15CitDT05GSUdfUE1CVVM9eQorQ09ORklHX1NFTlNPUlNfTFRDMjk3OD15CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX0FSTV9TUDgwNV9XQVRDSERPRz15CitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0FSTUNMQ0Q9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX09SVEVLPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKK0NPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CitDT05GSUdfSElEX1pFUk9QTFVTPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfQVhYSUE9eQorQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19BUk1NTUNJPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19QTDMzMF9ETUE9eQorQ09ORklHX1ZJUlRfRFJJVkVSUz15CitDT05GSUdfVklSVElPX01NSU89eQorQ09ORklHX01BSUxCT1g9eQorQ09ORklHX1BMMzIwX01CT1g9eQorIyBDT05GSUdfSU9NTVVfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0FVVE9GUzRfRlM9eQorQ09ORklHX0ZVU0VfRlM9eQorQ09ORklHX0NVU0U9eQorQ09ORklHX0ZTQ0FDSEU9eQorQ09ORklHX0ZTQ0FDSEVfU1RBVFM9eQorQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNPXkKK0NPTkZJR19GU0NBQ0hFX0RFQlVHPXkKK0NPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUPXkKK0NPTkZJR19DQUNIRUZJTEVTPXkKK0NPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTT15CitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfTlRGU19GUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTX0ZTQ0FDSEU9eQorQ09ORklHX1NVTlJQQ19ERUJVRz15CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0RFQlVHX0lORk89eQorQ09ORklHX0RFQlVHX0ZTPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1FT1VUPTYwCisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0NSWVBUT19HQ009eQorQ09ORklHX0NSWVBUT19YQ0JDPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJUVUFMSVpBVElPTj15CitDT05GSUdfS1ZNPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwppbmRleCA1YjU0YWJiLi4wNDk0YzhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCkBAIC03Myw4ICs3Myw2IEBACiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX1BSSU1FPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfQUNNPW0KIENPTkZJR19VU0JfUFJJTlRFUj1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JjbV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbV9kZWZjb25maWcKaW5kZXggM2RmM2YzYS4uOWQxM2RhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9iY21fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmNtX2RlZmNvbmZpZwpAQCAtOTEsNiArOTEsNyBAQAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CkBAIC0xMDQsNiArMTA1LDggQEAKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKK0NPTkZJR19QV009eQorQ09ORklHX1BXTV9CQ01fS09OQT15CiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKaW5kZXggYTkzZmY4ZC4uZGMwMWMwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCkBAIC0xNDQsNyArMTQ0LDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NtX3gzMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbV94MzAwX2RlZmNvbmZpZwppbmRleCBmNGI3NjcyLi43ZGYwNDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NtX3gzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcKQEAgLTEyOSw3ICsxMjksNiBAQAogQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogQ09ORklHX0hJRF9aRVJPUExVUz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEyNzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcKaW5kZXggMmVmMmM1ZS4uMThjMzExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcKQEAgLTEyNCw3ICsxMjQsNiBAQAogQ09ORklHX0xPR089eQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTD1tCiBDT05GSUdfVVNCX0dBREdFVD1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCmluZGV4IGI5ODUzMzQuLmJlMDJmZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCkBAIC00Nyw5ICs0Nyw3IEBACiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfTU1DPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKaW5kZXggMWZkMWQxZC4uYzE0NzBhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKQEAgLTE3Miw3ICsxNzIsNiBAQAogQ09ORklHX0hJRF9TT05ZPW0KIENPTkZJR19ISURfU1VOUExVUz1tCiBDT05GSUdfVVNCPW0KLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049bQogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQogQ09ORklHX1VTQl9TTDgxMV9DUz1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCmluZGV4IDJhMjgyYzAuLmY5NWY3MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCkBAIC0xNTcsMTAgKzE1Nyw4IEBACiBDT05GSUdfSElEX1NPTlk9bQogQ09ORklHX0hJRF9TVU5QTFVTPW0KIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX01VU0JfSERSQz1tCi1DT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTD15CiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQogQ09ORklHX1VTQl9TVE9SQUdFPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnCmluZGV4IGYxNTk1NTEuLjcwMTY3N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZwpAQCAtMzcsNyArMzcsNiBAQAogQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CkBAIC00OCw2ICs0Nyw3IEBACiBDT05GSUdfTVREX0NGSV9TVEFBPXkKIENPTkZJR19NVERfUEhZU01BUD15CiBDT05GSUdfTVREX00yNVA4MD15CitDT05GSUdfTVREX1NQSV9OT1I9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCmluZGV4IDYwYTIxZTAuLjQ1NjBjOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZwpAQCAtMTQ0LDcgKzE0NCw2IEBACiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCmluZGV4IDZhYzVlYTcuLjFiNjUwYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKQEAgLTgwLDcgKzgwLDYgQEAKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfRVA5M1hYX1dBVENIRE9HPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZwppbmRleCAwMzg1MThhLi44N2UwMjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKQEAgLTEwMCw4ICsxMDAsNiBAQAogQ09ORklHX1NPVU5EPW0KICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi1DT05GSUdfVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049bQogQ09ORklHX1VTQl9QUklOVEVSPW0KIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y0X3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y0X3Y1X2RlZmNvbmZpZwppbmRleCBmMWFlYjdkLi5iYWRhNTlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lteF92NF92NV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbXhfdjRfdjVfZGVmY29uZmlnCkBAIC04MCw2ICs4MCw3IEBACiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogQ09ORklHX0VFUFJPTV9BVDI1PXkKIENPTkZJR19BVEE9eQorQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX1BBVEFfSU1YPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19DUzg5eDA9eQpAQCAtMTUzLDggKzE1NCwxMiBAQAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9NWEM9eQorQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfQ0hJUElERUE9eQorQ09ORklHX1VTQl9DSElQSURFQV9VREM9eQorQ09ORklHX1VTQl9DSElQSURFQV9IT1NUPXkKK0NPTkZJR19OT1BfVVNCX1hDRUlWPXkKIENPTkZJR19NTUM9eQotQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKIENPTkZJR19NTUNfU0RIQ0k9eQogQ09ORklHX01NQ19TREhDSV9QTFRGTT15CiBDT05GSUdfTU1DX1NESENJX0VTREhDX0lNWD15CkBAIC0xNzcsNyArMTgyLDYgQEAKIENPTkZJR19ETUFERVZJQ0VTPXkKIENPTkZJR19JTVhfU0RNQT15CiBDT05GSUdfSU1YX0RNQT15Ci1DT05GSUdfQ09NTU9OX0NMS19ERUJVRz15CiAjIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y2X3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y2X3Y3X2RlZmNvbmZpZwppbmRleCAwOWU5NzQzLi5lZjg4MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lteF92Nl92N19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbXhfdjZfdjdfZGVmY29uZmlnCkBAIC0xLDQgKzEsMyBAQAotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX0tFUk5FTF9MWk89eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX05PX0haPXkKQEAgLTMzLDcgKzMyLDYgQEAKIENPTkZJR19NQUNIX01YMzVfM0RTPXkKIENPTkZJR19NQUNIX1ZQUjIwMD15CiBDT05GSUdfTUFDSF9JTVg1MV9EVD15Ci1DT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YNTFTRD15CiBDT05GSUdfU09DX0lNWDUwPXkKIENPTkZJR19TT0NfSU1YNTM9eQogQ09ORklHX1NPQ19JTVg2UT15CkBAIC00Niw3ICs0NCwxMSBAQAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKIENPTkZJR19BRUFCST15CiBDT05GSUdfSElHSE1FTT15CitDT05GSUdfQ01BPXkKIENPTkZJR19DTURMSU5FPSJub2luaXRyZCBjb25zb2xlPXR0eW14YzAsMTE1MjAwIgorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CitDT05GSUdfQVJNX0lNWDZRX0NQVUZSRVE9eQogQ09ORklHX1ZGUD15CiBDT05GSUdfTkVPTj15CiBDT05GSUdfQklORk1UX01JU0M9bQpAQCAtNzIsNiArNzQsNyBAQAogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFfQ01BPXkKIENPTkZJR19JTVhfV0VJTT15CiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQpAQCAtODksNiArOTIsNyBAQAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9HUE1JX05BTkQ9eQogQ09ORklHX01URF9OQU5EX01YQz15CitDT05GSUdfTVREX1NQSV9OT1I9eQogQ09ORklHX01URF9VQkk9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtMTgzLDYgKzE4Nyw3IEBACiBDT05GSUdfVklERU9fQ09EQT15CiBDT05GSUdfU09DX0NBTUVSQV9PVjI2NDA9eQogQ09ORklHX0RSTT15CitDT05GSUdfRFJNX1BBTkVMX1NJTVBMRT15CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKIENPTkZJR19MQ0RfTDRGMDAyNDJUMDM9eQpAQCAtMjE1LDcgKzIyMCw2IEBACiBDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfVVNCX01BU1NfU1RPUkFHRT1tCiBDT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CiBDT05GSUdfTU1DX1NESENJPXkKIENPTkZJR19NTUNfU0RIQ0lfUExURk09eQogQ09ORklHX01NQ19TREhDSV9FU0RIQ19JTVg9eQpAQCAtMjQ1LDcgKzI0OSw3IEBACiBDT05GSUdfRFJNX0lNWF9MREI9eQogQ09ORklHX0RSTV9JTVhfSVBVVjNfQ09SRT15CiBDT05GSUdfRFJNX0lNWF9JUFVWMz15Ci1DT05GSUdfQ09NTU9OX0NMS19ERUJVRz15CitDT05GSUdfRFJNX0lNWF9IRE1JPXkKICMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1BXTT15CiBDT05GSUdfUFdNX0lNWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKaW5kZXggMDYzZTJhYi4uMWFmNjY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwpAQCAtMTY5LDcgKzE2OSw2IEBACiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX0lYUDRYWF9XQVRDSERPRz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZwppbmRleCBlYzlhNDFkLi4wOTViYjUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZwpAQCAtMTM1LDcgKzEzNSw2IEBACiBDT05GSUdfV0FUQ0hET0dfQ09SRT15CiBDT05GSUdfREFWSU5DSV9XQVRDSERPRz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX1hIQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKaW5kZXggMmU3NjJkOS4uYjllNDgwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKQEAgLTYxLDYgKzYxLDcgQEAKIENPTkZJR19NVERfTTI1UDgwPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfT1JJT049eQorQ09ORklHX01URF9TUElfTk9SPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0VFUFJPTV9BVDI0PXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2t6bTlnX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3ptOWdfZGVmY29uZmlnCmluZGV4IDEyYmQxZjYuLmJkMDk3ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva3ptOWdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3ptOWdfZGVmY29uZmlnCkBAIC0xMDYsNyArMTA2LDYgQEAKIENPTkZJR19TTkRfU09DX1NINF9GU0k9eQogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKIENPTkZJR19VU0JfUkVORVNBU19VU0JIUz15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9taW5pMjQ0MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZwppbmRleCBhMDc5NDhhLi45YzkzZjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZwpAQCAtMjE3LDcgKzIxNyw2IEBACiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX0hJRF9UT1BTRUVEPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9BQ009bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnCmluZGV4IGM1ODU4YjkuLjdmNTJkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcKQEAgLTE3LDIxICsxNywxNCBAQAogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX0FSQ0hfTVNNX0RUPXkKLUNPTkZJR19BUkNIX01TTThYNjA9eQotQ09ORklHX0FSQ0hfTVNNODk2MD15Ci1DT05GSUdfQVJDSF9NU004OTc0PXkKLUNPTkZJR19TTVA9eQorQ09ORklHX0FSQ0hfTVNNPXkKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19BRUFCST15CiBDT05GSUdfSElHSE1FTT15CiBDT05GSUdfSElHSFBURT15CiBDT05GSUdfQ0xFQU5DQUNIRT15Ci1DT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1I9eQotQ09ORklHX0FSTV9BUFBFTkRFRF9EVEI9eQotQ09ORklHX0FSTV9BVEFHX0RUQl9DT01QQVQ9eQorQ09ORklHX0FVVE9fWlJFTEFERFI9eQogQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15CiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtNzksMTYgKzcyLDEyIEBACiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX01TTT15CiBDT05GSUdfU0VSSUFMX01TTV9DT05TT0xFPXkKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0hXX1JBTkRPTV9NU009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19TUEk9eQogQ09ORklHX0RFQlVHX0dQSU89eQogQ09ORklHX0dQSU9fU1lTRlM9eQotQ09ORklHX1BPV0VSX1NVUFBMWT15Ci1DT05GSUdfUE9XRVJfUkVTRVQ9eQotQ09ORklHX1BPV0VSX1JFU0VUX01TTT15CiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfUkVHVUxBVE9SPXkKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKQEAgLTEwMCwyNSArODksMTcgQEAKICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz15Ci1DT05GSUdfSElEX0JBVFRFUllfU1RSRU5HVEg9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9FSENJX01TTT15CiBDT05GSUdfVVNCX0FDTT15CiBDT05GSUdfVVNCX1NFUklBTD15CiBDT05GSUdfVVNCX0dBREdFVD15CiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUz15CiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9NTAwCi1DT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfU1RBR0lORz15Ci1DT05GSUdfQ09NTU9OX0NMS19RQ09NPXkKLUNPTkZJR19NU01fR0NDXzg2NjA9eQotQ09ORklHX01TTV9NTUNDXzg5NjA9eQotQ09ORklHX01TTV9NTUNDXzg5NzQ9eQotQ09ORklHX01TTV9JT01NVT15CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUM19GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCmluZGV4IGFhM2RmYjAuLjVlYmZhOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCkBAIC0xMSw3ICsxMSw2IEBACiAjIENPTkZJR19BUkNIX01VTFRJX1Y3IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX01WRUJVPXkKIENPTkZJR19NQUNIX0tJUktXT09EPXkKLUNPTkZJR19NQUNIX1Q1MzI1PXkKIENPTkZJR19BUkNIX01YQz15CiBDT05GSUdfTUFDSF9JTVgyNV9EVD15CiBDT05GSUdfTUFDSF9JTVgyN19EVD15CkBAIC0xMDgsNiArMTA3LDggQEAKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfS0lSS1dPT0RfU09DPXkKIENPTkZJR19TTkRfS0lSS1dPT0RfU09DX1Q1MzI1PXkKK0NPTkZJR19TTkRfU09DX0FMQzU2MjM9eQorQ09ORklHX1NORF9TSU1QTEVfQ0FSRD15CiAjIENPTkZJR19BQlg1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCmluZGV4IGQ0ZThhNDcuLmUyZDYyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCkBAIC01LDkgKzUsMTEgQEAKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfUEVSRl9FVkVOVFM9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfQVJDSF9WSVJUPXkKIENPTkZJR19BUkNIX01WRUJVPXkKIENPTkZJR19NQUNIX0FSTUFEQV8zNzA9eQogQ09ORklHX01BQ0hfQVJNQURBXzM3NT15CkBAIC0xNSwxMiArMTcsMTIgQEAKIENPTkZJR19NQUNIX0FSTUFEQV9YUD15CiBDT05GSUdfTUFDSF9ET1ZFPXkKIENPTkZJR19BUkNIX0JDTT15Ci1DT05GSUdfQVJDSF9CQ01fNTMwMVg9eQogQ09ORklHX0FSQ0hfQkNNX01PQklMRT15CitDT05GSUdfQVJDSF9CQ01fNTMwMVg9eQogQ09ORklHX0FSQ0hfQkVSTElOPXkKIENPTkZJR19NQUNIX0JFUkxJTl9CRzI9eQogQ09ORklHX01BQ0hfQkVSTElOX0JHMkNEPXkKLUNPTkZJR19HUElPX1BDQTk1M1g9eQorQ09ORklHX01BQ0hfQkVSTElOX0JHMlE9eQogQ09ORklHX0FSQ0hfSElHSEJBTks9eQogQ09ORklHX0FSQ0hfSEkzeHh4PXkKIENPTkZJR19BUkNIX0tFWVNUT05FPXkKQEAgLTM0LDggKzM2LDggQEAKIENPTkZJR19BUkNIX09NQVA0PXkKIENPTkZJR19TT0NfT01BUDU9eQogQ09ORklHX1NPQ19BTTMzWFg9eQotQ09ORklHX1NPQ19EUkE3WFg9eQogQ09ORklHX1NPQ19BTTQzWFg9eQorQ09ORklHX1NPQ19EUkE3WFg9eQogQ09ORklHX0FSQ0hfUUNPTT15CiBDT05GSUdfQVJDSF9NU004WDYwPXkKIENPTkZJR19BUkNIX01TTTg5NjA9eQpAQCAtNDcsNiArNDksNyBAQAogQ09ORklHX01BQ0hfU1BFQVIxMzEwPXkKIENPTkZJR19NQUNIX1NQRUFSMTM0MD15CiBDT05GSUdfQVJDSF9TVEk9eQorQ09ORklHX0FSQ0hfRVhZTk9TPXkKIENPTkZJR19BUkNIX1NVTlhJPXkKIENPTkZJR19BUkNIX1NJUkY9eQogQ09ORklHX0FSQ0hfVEVHUkE9eQpAQCAtNjEsNyArNjQsNiBAQAogQ09ORklHX01BQ0hfVVg1MDBfRFQ9eQogQ09ORklHX0FSQ0hfVkVYUFJFU1M9eQogQ09ORklHX0FSQ0hfVkVYUFJFU1NfQ0E5WDQ9eQotQ09ORklHX0FSQ0hfVklSVD15CiBDT05GSUdfQVJDSF9XTTg4NTA9eQogQ09ORklHX0FSQ0hfWllOUT15CiBDT05GSUdfTkVPTj15CkBAIC03MSw2ICs3Myw3IEBACiBDT05GSUdfUENJX01WRUJVPXkKIENPTkZJR19QQ0lfVEVHUkE9eQogQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz04CiBDT05GSUdfSElHSFBURT15CiBDT05GSUdfQ01BPXkKIENPTkZJR19BUk1fQVBQRU5ERURfRFRCPXkKQEAgLTk2LDYgKzk5LDExIEBACiBDT05GSUdfSVBWNl9NSVA2PW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0NBTj15CitDT05GSUdfQ0FOX1JBVz15CitDT05GSUdfQ0FOX0JDTT15CitDT05GSUdfQ0FOX0RFVj15CitDT05GSUdfQ0FOX01DUDI1MVg9eQogQ09ORklHX0NGRzgwMjExPW0KIENPTkZJR19NQUM4MDIxMT1tCiBDT05GSUdfUkZLSUxMPXkKQEAgLTExMiwxNSArMTIwLDE5IEBACiBDT05GSUdfSUNTOTMyUzQwMT15CiBDT05GSUdfQVBEUzk4MDJBTFM9eQogQ09ORklHX0lTTDI5MDAzPXkKK0NPTkZJR19FRVBST01fQVQyND15CitDT05GSUdfRUVQUk9NX1NVTlhJX1NJRD15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX0FUQT15CiBDT05GSUdfU0FUQV9BSENJX1BMQVRGT1JNPXkKK0NPTkZJR19BSENJX1NVTlhJPXkKIENPTkZJR19TQVRBX0hJR0hCQU5LPXkKIENPTkZJR19TQVRBX01WPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19TVU40SV9FTUFDPXkKK0NPTkZJR19NQUNCPXkKIENPTkZJR19ORVRfQ0FMWEVEQV9YR01BQz15CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogQ09ORklHX01WTkVUQT15CkBAIC0xNTMsNiArMTY1LDggQEAKIENPTkZJR19TRVJJQUxfODI1MF9EVz15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTE9eQogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9TQU1TVU5HPXkKK0NPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfU0lSRlNPQz15CiBDT05GSUdfU0VSSUFMX1NJUkZTT0NfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX1RFR1JBPXkKQEAgLTE3NSw3ICsxODksOSBAQAogQ09ORklHX0kyQ19NVVg9eQogQ09ORklHX0kyQ19NVVhfUENBOTU0eD15CiBDT05GSUdfSTJDX01VWF9QSU5DVFJMPXkKK0NPTkZJR19JMkNfQ0FERU5DRT15CiBDT05GSUdfSTJDX0RFU0lHTldBUkVfUExBVEZPUk09eQorQ09ORklHX0kyQ19FWFlOT1M1PXkKIENPTkZJR19JMkNfTVY2NFhYWD15CiBDT05GSUdfSTJDX1NJUkY9eQogQ09ORklHX0kyQ19URUdSQT15CkBAIC0xODQsNiArMjAwLDggQEAKIENPTkZJR19TUElfT1JJT049eQogQ09ORklHX1NQSV9QTDAyMj15CiBDT05GSUdfU1BJX1NJUkY9eQorQ09ORklHX1NQSV9TVU40ST15CitDT05GSUdfU1BJX1NVTjZJPXkKIENPTkZJR19TUElfVEVHUkExMTQ9eQogQ09ORklHX1NQSV9URUdSQTIwX1NGTEFTSD15CiBDT05GSUdfU1BJX1RFR1JBMjBfU0xJTks9eQpAQCAtMTkxLDYgKzIwOSw4IEBACiBDT05GSUdfUElOQ1RSTF9QQUxNQVM9eQogQ09ORklHX0dQSU9fU1lTRlM9eQogQ09ORklHX0dQSU9fR0VORVJJQ19QTEFURk9STT15CitDT05GSUdfR1BJT19EV0FQQj15CitDT05GSUdfR1BJT19QQ0E5NTNYPXkKIENPTkZJR19HUElPX1BDQTk1M1hfSVJRPXkKIENPTkZJR19HUElPX1RXTDQwMzA9eQogQ09ORklHX0dQSU9fUEFMTUFTPXkKQEAgLTIwMCwxNiArMjIwLDE5IEBACiBDT05GSUdfQ0hBUkdFUl9UUFM2NTA5MD15CiBDT05GSUdfUE9XRVJfUkVTRVRfQVMzNzIyPXkKIENPTkZJR19QT1dFUl9SRVNFVF9HUElPPXkKK0NPTkZJR19QT1dFUl9SRVNFVF9TVU42ST15CiBDT05GSUdfU0VOU09SU19MTTkwPXkKIENPTkZJR19USEVSTUFMPXkKIENPTkZJR19ET1ZFX1RIRVJNQUw9eQogQ09ORklHX0FSTUFEQV9USEVSTUFMPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfT1JJT05fV0FUQ0hET0c9eQorQ09ORklHX1NVTlhJX1dBVENIRE9HPXkKIENPTkZJR19NRkRfQVMzNzIyPXkKIENPTkZJR19NRkRfQ1JPU19FQz15CiBDT05GSUdfTUZEX0NST1NfRUNfU1BJPXkKIENPTkZJR19NRkRfTUFYODkwNz15CitDT05GSUdfTUZEX1NFQ19DT1JFPXkKIENPTkZJR19NRkRfUEFMTUFTPXkKIENPTkZJR19NRkRfVFBTNjUwOTA9eQogQ09ORklHX01GRF9UUFM2NTg2WD15CkBAIC0yMjAsNiArMjQzLDggQEAKIENPTkZJR19SRUdVTEFUT1JfR1BJTz15CiBDT05GSUdfUkVHVUxBVE9SX01BWDg5MDc9eQogQ09ORklHX1JFR1VMQVRPUl9QQUxNQVM9eQorQ09ORklHX1JFR1VMQVRPUl9TMk1QUzExPXkKK0NPTkZJR19SRUdVTEFUT1JfUzVNODc2Nz15CiBDT05GSUdfUkVHVUxBVE9SX1RQUzUxNjMyPXkKIENPTkZJR19SRUdVTEFUT1JfVFBTNjIzNjA9eQogQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA5MD15CkBAIC0yNTQsMTAgKzI3OSwxMyBAQAogQ09ORklHX1NORF9TT0NfVEVHUkFfTUFYOTgwOTA9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX1hIQ0lfSENEPXkKK0NPTkZJR19VU0JfWEhDSV9NVkVCVT15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9URUdSQT15CiBDT05GSUdfVVNCX0VIQ0lfSENEX1BMQVRGT1JNPXkKIENPTkZJR19VU0JfSVNQMTc2MF9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEX1BMQVRGT1JNPXkKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0NISVBJREVBPXkKIENPTkZJR19VU0JfQ0hJUElERUFfSE9TVD15CkBAIC0yNzIsMjAgKzMwMCwyOCBAQAogQ09ORklHX01NQ19CTE9DS19NSU5PUlM9MTYKIENPTkZJR19NTUNfQVJNTU1DST15CiBDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19NTUNfU0RIQ0lfT0ZfQVJBU0FOPXkKIENPTkZJR19NTUNfU0RIQ0lfRVNESENfSU1YPXkKLUNPTkZJR19NTUNfU0RIQ0lfVEVHUkE9eQogQ09ORklHX01NQ19TREhDSV9ET1ZFPXkKK0NPTkZJR19NTUNfU0RIQ0lfVEVHUkE9eQorQ09ORklHX01NQ19TREhDSV9QWEFWMz15CiBDT05GSUdfTU1DX1NESENJX1NQRUFSPXkKK0NPTkZJR19NTUNfU0RIQ0lfUzNDPXkKK0NPTkZJR19NTUNfU0RIQ0lfUzNDX0RNQT15CiBDT05GSUdfTU1DX1NESENJX0JDTV9LT05BPXkKIENPTkZJR19NTUNfT01BUD15CiBDT05GSUdfTU1DX09NQVBfSFM9eQogQ09ORklHX01NQ19NVlNESU89eQorQ09ORklHX01NQ19TVU5YST15CitDT05GSUdfTU1DX0RXPXkKK0NPTkZJR19NTUNfRFdfRVhZTk9TPXkKIENPTkZJR19FREFDPXkKIENPTkZJR19FREFDX01NX0VEQUM9eQogQ09ORklHX0VEQUNfSElHSEJBTktfTUM9eQogQ09ORklHX0VEQUNfSElHSEJBTktfTDI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9BUzM3MjI9eQorQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX01BWDg5MDc9eQogQ09ORklHX1JUQ19EUlZfUEFMTUFTPXkKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQpAQCAtMjk0LDYgKzMzMCw3IEBACiBDT05GSUdfUlRDX0RSVl9FTTMwMjc9eQogQ09ORklHX1JUQ19EUlZfUEwwMzE9eQogQ09ORklHX1JUQ19EUlZfVlQ4NTAwPXkKK0NPTkZJR19SVENfRFJWX1NVTlhJPXkKIENPTkZJR19SVENfRFJWX01WPXkKIENPTkZJR19SVENfRFJWX1RFR1JBPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKQEAgLTMyOCw2ICszNjUsNyBAQAogQ09ORklHX1BXTV9URUdSQT15CiBDT05GSUdfUFdNX1ZUODUwMD15CiBDT05GSUdfT01BUF9VU0IyPXkKK0NPTkZJR19QSFlfU1VONElfVVNCPXkKIENPTkZJR19FWFQ0X0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19UTVBGUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwppbmRleCAxZjA4MjE5Li4wZGFlMWMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKQEAgLTgwLDcgKzgwLDYgQEAKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX01WNjRYWFg9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCmluZGV4IDM2NDg0YTMuLjI3YzczMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjVfZGVmY29uZmlnCkBAIC0xLDQgKzEsNSBAQAogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX0ZIQU5ETEU9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKQEAgLTExLDcgKzEyLDYgQEAKICMgQ09ORklHX0FSQ0hfTVVMVElfVjcgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTVZFQlU9eQogQ09ORklHX01BQ0hfS0lSS1dPT0Q9eQotQ09ORklHX01BQ0hfVDUzMjU9eQogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0CiBDT05GSUdfUENJX01WRUJVPXkKIENPTkZJR19QUkVFTVBUPXkKQEAgLTUwLDYgKzUwLDcgQEAKIENPTkZJR19NVERfTTI1UDgwPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfT1JJT049eQorQ09ORklHX01URF9TUElfTk9SPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0VFUFJPTV9BVDI0PXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CkBAIC0xMDAsNiArMTAxLDggQEAKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfS0lSS1dPT0RfU09DPXkKIENPTkZJR19TTkRfS0lSS1dPT0RfU09DX1Q1MzI1PXkKK0NPTkZJR19TTkRfU09DX0FMQzU2MjM9eQorQ09ORklHX1NORF9TSU1QTEVfQ0FSRD15CiBDT05GSUdfUkVHVUxBVE9SPXkKIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRT15CiBDT05GSUdfSElEX0RSQUdPTlJJU0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZwppbmRleCBhMzQ3MTNkLi5lMTExNzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX0ZIQU5ETEU9eQogQ09ORklHX0lSUV9ET01BSU5fREVCVUc9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTcsNiArMTgsNyBAQAogIyBDT05GSUdfQ0FDSEVfTDJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TV1BfRU1VTEFURSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfTVNJPXkKIENPTkZJR19QQ0lfTVZFQlU9eQogQ09ORklHX1NNUD15CiBDT05GSUdfQUVBQkk9eQpAQCAtMjksNiArMzEsOSBAQAogQ09ORklHX1ZGUD15CiBDT05GSUdfTkVUPXkKIENPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0JUPXkKIENPTkZJR19CVF9NUlZMPXkKIENPTkZJR19CVF9NUlZMX1NESU89eQpAQCAtMzYsNiArNDEsNyBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19BVEE9eQorQ09ORklHX0FIQ0lfTVZFQlU9eQogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX01WTkVUQT15CkBAIC01Myw2ICs1OSw3IEBACiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX00yNVA4MD15CitDT05GSUdfTVREX1NQSV9OT1I9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTc4LDcgKzg1LDkgQEAKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9YSENJX0hDRD15CitDT05GSUdfVVNCX1hIQ0lfTVZFQlU9eQogQ09ORklHX01NQz15CitDT05GSUdfTU1DX1NESENJX1BYQVYzPXkKIENPTkZJR19NTUNfTVZTRElPPXkKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19HUElPPXkKQEAgLTEwMyw2ICsxMTIsOCBAQAogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19UTVBGUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214c19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214c19kZWZjb25maWcKaW5kZXggNjE1MDEwOC4uYTlmOTkyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teHNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXhzX2RlZmNvbmZpZwpAQCAtMjYsNyArMjYsNiBAQAogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiBDT05GSUdfQUVBQkk9eQotQ09ORklHX0ZQRV9OV0ZQRT15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtNTEsMTAgKzUwLDEwIEBACiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfREFUQUZMQVNIPXkKIENPTkZJR19NVERfTTI1UDgwPXkKLSMgQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEIGlzIG5vdCBzZXQKIENPTkZJR19NVERfU1NUMjVMPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfR1BNSV9OQU5EPXkKK0NPTkZJR19NVERfU1BJX05PUj15CiBDT05GSUdfTVREX1VCST15CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKIENPTkZJR19FRVBST01fQVQyND15CkBAIC0xMjAsNyArMTE5LDYgQEAKIENPTkZJR19VU0JfRVRIPW0KIENPTkZJR19VU0JfTUFTU19TVE9SQUdFPW0KIENPTkZJR19NTUM9eQotQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKIENPTkZJR19NTUNfTVhTPXkKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CkBAIC0xMzgsNyArMTM2LDYgQEAKIENPTkZJR19NWFNfRE1BPXkKIENPTkZJR19TVEFHSU5HPXkKIENPTkZJR19NWFNfTFJBREM9eQotQ09ORklHX0NPTU1PTl9DTEtfREVCVUc9eQogQ09ORklHX0lJTz15CiBDT05GSUdfSUlPX1NZU0ZTX1RSSUdHRVI9eQogQ09ORklHX1BXTT15CkBAIC0xODAsNyArMTc3LDcgQEAKIENPTkZJR19TVFJJQ1RfREVWTUVNPXkKIENPTkZJR19ERUJVR19VU0VSPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFVl9NWFNfRENQPXkKIENPTkZJR19DUkNfSVRVX1Q9bQogQ09ORklHX0NSQzc9bQogQ09ORklHX0ZPTlRTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKaW5kZXggZDdkYzk5Mi4uNDYwZGNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKQEAgLTY4LDggKzY4LDYgQEAKIENPTkZJR19TT1VORF9QUklNRT15CiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERUJVRz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9TVE9SQUdFPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMV9kZWZjb25maWcKaW5kZXggZDc0ZWRiYS4uY2U1NDFiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMV9kZWZjb25maWcKQEAgLTE5Nyw4ICsxOTcsNiBAQAogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfUEhZPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCmluZGV4IGE0ZThkMDEuLjU5MDY2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKQEAgLTIxLDYgKzIxLDggQEAKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0FSQ0hfTVVMVElfVjY9eQorQ09ORklHX1BPV0VSX0FWU19PTUFQPXkKK0NPTkZJR19QT1dFUl9BVlNfT01BUF9DTEFTUzM9eQogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15CiBDT05GSUdfQVJDSF9PTUFQMj15CkBAIC00Miw2ICs0NCw3IEBACiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L21tY2JsazBwMiByb290d2FpdCBjb25zb2xlPXR0eU8yLDExNTIwMCIKIENPTkZJR19LRVhFQz15CiBDT05GSUdfRlBFX05XRlBFPXkKK0NPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX1BNX0RFQlVHPXkKIENPTkZJR19ORVQ9eQpAQCAtMTU5LDExICsxNjIsMTQgQEAKIENPTkZJR19HUElPX1RXTDQwMzA9eQogQ09ORklHX1cxPXkKIENPTkZJR19QT1dFUl9TVVBQTFk9eQorQ09ORklHX1BPV0VSX0FWUz15CiBDT05GSUdfU0VOU09SU19MTTc1PW0KIENPTkZJR19USEVSTUFMPXkKIENPTkZJR19USEVSTUFMX0dPVl9GQUlSX1NIQVJFPXkKIENPTkZJR19USEVSTUFMX0dPVl9VU0VSX1NQQUNFPXkKK0NPTkZJR19DUFVfVEhFUk1BTD15CiBDT05GSUdfVElfU09DX1RIRVJNQUw9eQorQ09ORklHX1RJX1RIRVJNQUw9eQogQ09ORklHX09NQVA0X1RIRVJNQUw9eQogQ09ORklHX09NQVA1X1RIRVJNQUw9eQogQ09ORklHX0RSQTc1Ml9USEVSTUFMPXkKQEAgLTE3Nyw2ICsxODMsNyBAQAogQ09ORklHX1RXTDYwNDBfQ09SRT15CiBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQogQ09ORklHX1JFR1VMQVRPUl9QQUxNQVM9eQorQ09ORklHX1JFR1VMQVRPUl9USV9BQkI9eQogQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMz15CiBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYPXkKIENPTkZJR19SRUdVTEFUT1JfVFBTNjUyMTc9eQpAQCAtMjE3LDcgKzIyNCw2IEBACiBDT05GSUdfU05EX09NQVBfU09DX09NQVBfQUJFX1RXTDYwNDA9bQogQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19QQU5ET1JBPW0KIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfV0RNPXkKQEAgLTIzOSw2ICsyNDUsNyBAQAogQ09ORklHX01NQ19PTUFQPXkKIENPTkZJR19NTUNfT01BUF9IUz15CiBDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQogQ09ORklHX0xFRFNfR1BJTz15CiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZwppbmRleCAyZjEzNmMzLi4wYTg0N2QwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMjdfZGVmY29uZmlnCkBAIC03Niw3ICs3Niw2IEBACiBDT05GSUdfU05EX1BYQTJYWF9BQzk3PXkKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfTU1DPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcWNvbV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3Fjb21fZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWJkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3Fjb21fZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY1IEBACitDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0FSQ0hfUUNPTT15CitDT05GSUdfQVJDSF9NU004WDYwPXkKK0NPTkZJR19BUkNIX01TTTg5NjA9eQorQ09ORklHX0FSQ0hfTVNNODk3ND15CitDT05GSUdfU01QPXkKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19BRUFCST15CitDT05GSUdfSElHSE1FTT15CitDT05GSUdfSElHSFBURT15CitDT05GSUdfQ0xFQU5DQUNIRT15CitDT05GSUdfQVJNX0FQUEVOREVEX0RUQj15CitDT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVD15CitDT05GSUdfVkZQPXkKK0NPTkZJR19ORU9OPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExPXkKK0NPTkZJR19SRktJTEw9eQorQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX01URF9NMjVQODA9eQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19DSFJfREVWX1NDSD15CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTURJT19HUElPPXkKK0NPTkZJR19TTElQPXkKK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfVVNCX1VTQk5FVD15CisjIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9aQVVSVVMgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX01TTT15CitDT05GSUdfU0VSSUFMX01TTV9DT05TT0xFPXkKK0NPTkZJR19IV19SQU5ET009eQorQ09ORklHX0hXX1JBTkRPTV9NU009eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19RVVA9eQorQ09ORklHX1NQST15CitDT05GSUdfU1BJX1FVUD15CitDT05GSUdfU1BNST15CitDT05GSUdfUElOQ1RSTF9BUFE4MDY0PXkKK0NPTkZJR19QSU5DVFJMX0lQUTgwNjQ9eQorQ09ORklHX1BJTkNUUkxfTVNNOFg3ND15CitDT05GSUdfREVCVUdfR1BJTz15CitDT05GSUdfR1BJT19TWVNGUz15CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QT1dFUl9SRVNFVD15CitDT05GSUdfUE9XRVJfUkVTRVRfTVNNPXkKK0NPTkZJR19USEVSTUFMPXkKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX01FRElBX1NVUFBPUlQ9eQorQ09ORklHX0ZCPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX0hJRF9CQVRURVJZX1NUUkVOR1RIPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CitDT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfQUNNPXkKK0NPTkZJR19VU0JfU0VSSUFMPXkKK0NPTkZJR19VU0JfR0FER0VUPXkKK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz01MDAKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19CTE9DS19NSU5PUlM9MTYKK0NPTkZJR19NTUNfU0RIQ0k9eQorQ09ORklHX01NQ19TREhDSV9QTFRGTT15CitDT05GSUdfTU1DX1NESENJX01TTT15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19RQ09NX0JBTV9ETUE9eQorQ09ORklHX1NUQUdJTkc9eQorQ09ORklHX1FDT01fR1NCST15CitDT05GSUdfQ09NTU9OX0NMS19RQ09NPXkKK0NPTkZJR19NU01fR0NDXzg2NjA9eQorQ09ORklHX01TTV9NTUNDXzg5NjA9eQorQ09ORklHX01TTV9NTUNDXzg5NzQ9eQorQ09ORklHX01TTV9JT01NVT15CitDT05GSUdfR0VORVJJQ19QSFk9eQorQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19GVVNFX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19DSUZTPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19VVEY4PXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRFlOQU1JQ19ERUJVRz15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUj15CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FUl9TVEFUUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JhdW1mZWxkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmF1bWZlbGRfZGVmY29uZmlnCmluZGV4IGY3Y2FhOTAuLjNkODMzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcmF1bWZlbGRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmF1bWZlbGRfZGVmY29uZmlnCkBAIC0xMjIsNyArMTIyLDYgQEAKIENPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKIENPTkZJR19ISURfWkVST1BMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKaW5kZXggYWJlNjFiZi4uMWRhNWQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwpAQCAtNzYsOCArNzYsMTAgQEAKIENPTkZJR19NTUNfQVJNTU1DST15CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQorQ09ORklHX0xFRFNfVkVSU0FUSUxFPXkKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfQ1BVPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX1BMMDMxPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKaW5kZXggNzA3OWNiZS4uZDAyZTlkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKQEAgLTc1LDggKzc1LDEwIEBACiBDT05GSUdfTU1DX0FSTU1NQ0k9eQogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKK0NPTkZJR19MRURTX1ZFUlNBVElMRT15CiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0NQVT15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0RTMTMwNz15CiBDT05GSUdfUlRDX0RSVl9QTDAzMT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwppbmRleCAxOTM0NDhmLi5lYjRkMjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTMyNCw3ICszMjQsNiBAQAogQ09ORklHX1NORF9TT0M9eQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX0FDTT1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZwppbmRleCAzYTE4NmQ2Li5lMmY5ZmE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcKQEAgLTU2LDcgKzU2LDYgQEAKIENPTkZJR19TTkRfU09DX1NNREtfV005NzEzPW0KIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWcKaW5kZXggZGMzODgxZS4uNDQxNDk5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWcKQEAgLTEyMiw3ICsxMjIsNiBAQAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BVE1FTF9NWFQ9eQotQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX1RTQURDQz15CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD00CiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKQEAgLTEzOCw2ICsxMzcsOCBAQAogQ09ORklHX0dQSU9fU1lTRlM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1NTQj1tCitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfQUNUODg2NT15CiBDT05GSUdfRkI9eQogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2htb2JpbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcKaW5kZXggODNiMDcyNS4uNmQ2NDM3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcKQEAgLTI1LDYgKzI1LDcgQEAKIENPTkZJR19IQVZFX0FSTV9BUkNIX1RJTUVSPXkKIENPTkZJR19OUl9DUFVTPTgKIENPTkZJR19BRUFCST15CitDT05GSUdfSElHSE1FTT15CiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19BUk1fQVBQRU5ERURfRFRCPXkKQEAgLTQzLDYgKzQ0LDcgQEAKIENPTkZJR19ERVZUTVBGU19NT1VOVD15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfTTI1UDgwPXkKK0NPTkZJR19FRVBST01fQVQyND15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX1JDQVI9eQpAQCAtNzUsOSArNzcsMTEgQEAKIENPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTIwCiBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKIENPTkZJR19JMkNfR1BJTz15CitDT05GSUdfSTJDX1NIX01PQklMRT15CiBDT05GSUdfSTJDX1JDQVI9eQogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX1JTUEk9eQorQ09ORklHX1NQSV9TSF9NU0lPRj15CiBDT05GSUdfR1BJT19FTT15CiBDT05GSUdfR1BJT19SQ0FSPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKQEAgLTg4LDEwICs5MiwxNCBAQAogQ09ORklHX1JFR1VMQVRPUl9HUElPPXkKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIENPTkZJR19NRURJQV9DQU1FUkFfU1VQUE9SVD15CitDT05GSUdfTUVESUFfQ09OVFJPTExFUj15CitDT05GSUdfVklERU9fVjRMMl9TVUJERVZfQVBJPXkKIENPTkZJR19WNExfUExBVEZPUk1fRFJJVkVSUz15CiBDT05GSUdfU09DX0NBTUVSQT15CiBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STT15CiBDT05GSUdfVklERU9fUkNBUl9WSU49eQorQ09ORklHX1Y0TF9NRU0yTUVNX0RSSVZFUlM9eQorQ09ORklHX1ZJREVPX1JFTkVTQVNfVlNQMT15CiAjIENPTkZJR19NRURJQV9TVUJEUlZfQVVUT1NFTEVDVCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fQURWNzE4MD15CiBDT05GSUdfRFJNPXkKQEAgLTEwMCw3ICsxMDgsMTMgQEAKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9TT0NfUkNBUj15CitDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfUkNBUl9HRU4yX1BIWT15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9SRU5FU0FTX1VTQkhTPXkKK0NPTkZJR19VU0JfR0FER0VUPXkKK0NPTkZJR19VU0JfUkVORVNBU19VU0JIU19VREM9eQogQ09ORklHX01NQz15CiBDT05GSUdfTU1DX1NESEk9eQogQ09ORklHX01NQ19TSF9NTUNJRj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCmluZGV4IDJlMDQxOWQuLmExZWRlMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCkBAIC0xNjYsNyArMTY2LDYgQEAKIENPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQogQ09ORklHX1VTQj1tCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdW54aV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N1bnhpX2RlZmNvbmZpZwppbmRleCA4MWJhNzhlLi43MjA5YmZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N1bnhpX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N1bnhpX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNyBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19QRVJGX0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVU5YST15CiBDT05GSUdfU01QPXkKIENPTkZJR19BRUFCST15CiBDT05GSUdfSElHSE1FTT15CiBDT05GSUdfSElHSFBURT15CitDT05GSUdfQVJNX0FQUEVOREVEX0RUQj15CitDT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVD15CiBDT05GSUdfVkZQPXkKIENPTkZJR19ORU9OPXkKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC0yNSw4ICsyOSwxMiBAQAogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15CiBDT05GSUdfRUVQUk9NX1NVTlhJX1NJRD15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQVRBPXkKK0NPTkZJR19BSENJX1NVTlhJPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19TVU40SV9FTUFDPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVMgaXMgbm90IHNldApAQCAtMzQsMzggKzQyLDY2IEBACiAjIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX01JQ1JPQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NNU0MgaXMgbm90IHNldAogQ09ORklHX1NUTU1BQ19FVEg9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTgKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTgKIENPTkZJR19TRVJJQUxfODI1MF9EVz15CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLSMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVY2NFhYWD15CiBDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfU1VONEk9eQogQ09ORklHX1NQSV9TVU42ST15CiBDT05GSUdfR1BJT19TWVNGUz15CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QT1dFUl9SRVNFVD15CitDT05GSUdfUE9XRVJfUkVTRVRfU1VONkk9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19TVU5YSV9XQVRDSERPRz15Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTUZEX0FYUDIwWD15CitDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVI9eQorQ09ORklHX1JFR1VMQVRPUl9HUElPPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfSENEX1BMQVRGT1JNPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STT15CitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfU1VOWEk9eQogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIENPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLUNPTkZJR19DT01NT05fQ0xLX0RFQlVHPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0lOVEZfU1lTRlMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9TVU5YST15CiAjIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlfU1VONElfVVNCPXkKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFM9eQogQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19ERUJVR19GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZwppbmRleCA3MTI3N2ExLi43MjA5YTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKQEAgLTQ3LDcgKzQ3LDYgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy90ZWdyYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZwppbmRleCAyOTI2MjgxLi5mYjI1ZTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3RlZ3JhX2RlZmNvbmZpZwpAQCAtNzMsNiArNzMsMTEgQEAKIENPTkZJR19JUFY2X01JUDY9eQogQ09ORklHX0lQVjZfVFVOTkVMPXkKIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfQ0FOPXkKK0NPTkZJR19DQU5fUkFXPXkKK0NPTkZJR19DQU5fQkNNPXkKK0NPTkZJR19DQU5fREVWPXkKK0NPTkZJR19DQU5fTUNQMjUxWD15CiBDT05GSUdfQlQ9eQogQ09ORklHX0JUX1JGQ09NTT15CiBDT05GSUdfQlRfQk5FUD15CkBAIC05MCw2ICs5NSw3IEBACiBDT05GSUdfQ01BX1NJWkVfTUJZVEVTPTY0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfTTI1UDgwPXkKK0NPTkZJR19NVERfU1BJX05PUj15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0FENTI1WF9EUE9UPXkKQEAgLTk3LDYgKzEwMyw3IEBACiBDT05GSUdfSUNTOTMyUzQwMT15CiBDT05GSUdfQVBEUzk4MDJBTFM9eQogQ09ORklHX0lTTDI5MDAzPXkKK0NPTkZJR19FRVBST01fQVQyND15CiBDT05GSUdfU0NTST15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQkxLX0RFVl9TUj15CkBAIC0xMTIsNiArMTE5LDcgQEAKIENPTkZJR19CUkNNRk1BQz1tCiBDT05GSUdfUlQyWDAwPXkKIENPTkZJR19SVDI4MDBVU0I9bQorQ09ORklHX0lOUFVUX0pPWURFVj15CiBDT05GSUdfSU5QVVRfRVZERVY9eQogQ09ORklHX0tFWUJPQVJEX0dQSU89eQogQ09ORklHX0tFWUJPQVJEX1RFR1JBPXkKQEAgLTE4MSw2ICsxODksNyBAQAogIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9QV009eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX0xPR089eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TTkQ9eQpAQCAtMjIyLDYgKzIzMSw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSX0NBTUVSQT15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0FTMzcyMj15CitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQogQ09ORklHX1JUQ19EUlZfTUFYODkwNz15CiBDT05GSUdfUlRDX0RSVl9QQUxNQVM9eQogQ09ORklHX1JUQ19EUlZfVFBTNjU4Nlg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZwppbmRleCAzMTYyMTczLi45MzJlZTRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZwpAQCAtMTY1LDcgKzE2NSw2IEBACiBDT05GSUdfU05EX1VTQl9BVURJTz1tCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9TVE9SQUdFPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwppbmRleCAwNzM1NDFhLi5kNTJiNGZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCkBAIC02MSw2ICs2MSw5IEBACiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfQVJNTU1DST1tCiBDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorQ09ORklHX0xFRFNfVkVSU0FUSUxFPXkKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKIENPTkZJR19MRURTX1RSSUdHRVJfQ1BVPXkKIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKaW5kZXggZDM2ZTBkMy4uMGQ3MTdhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKQEAgLTEyNyw3ICsxMjcsNiBAQAogQ09ORklHX1NORF9QQ01fT1NTPW0KIENPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQogQ09ORklHX1VTQj1tCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9bQogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKaW5kZXggNzMxZDRmOS4uY2QxMWRhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCkBAIC0xMzIsNyArMTMyLDYgQEAKIENPTkZJR19TTkRfUFhBMlhYX1NPQz1tCiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPW0KLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1NUT1JBR0U9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA5YTkyZmQ3Li4zMDQwMzU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMjQxLDExICsyNDEsNiBAQAogCiAjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoaSx2KSAoYXRvbWljX2FkZF9yZXR1cm4oaSwgdikgPCAwKQogCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX21iKCkKLQogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19BVE9NSUM2NAogdHlwZWRlZiBzdHJ1Y3QgewogCWxvbmcgbG9uZyBjb3VudGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYmFycmllci5oCmluZGV4IDJmNTlmNzQuLmM2YTNlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTc5LDUgKzc5LDggQEAKIAogI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkJZG8geyB2YXIgPSB2YWx1ZTsgc21wX21iKCk7IH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWMoKQlzbXBfbWIoKQorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0JBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBiMmUyOThhLi41NjM4MDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjUsOSArMjUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX21iKCkKKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgYmFzaXMgb2Ygb3VyIGJpdCBvcHMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kY2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NDg5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kY2MuaApAQCAtMCwwICsxLDQxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTQgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KKworc3RhdGljIGlubGluZSB1MzIgX19kY2NfZ2V0c3RhdHVzKHZvaWQpCit7CisJdTMyIF9fcmV0OworCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMwLCBjMSwgMAlAIHJlYWQgY29tbXMgY3RybCByZWciCisJCTogIj1yIiAoX19yZXQpIDogOiAiY2MiKTsKKworCXJldHVybiBfX3JldDsKK30KKworc3RhdGljIGlubGluZSBjaGFyIF9fZGNjX2dldGNoYXIodm9pZCkKK3sKKwljaGFyIF9fYzsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMwLCBjNSwgMAlAIHJlYWQgY29tbXMgZGF0YSByZWciCisJCTogIj1yIiAoX19jKSk7CisJaXNiKCk7CisKKwlyZXR1cm4gX19jOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kY2NfcHV0Y2hhcihjaGFyIGMpCit7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGM1LCAwCUAgd3JpdGUgYSBjaGFyIgorCQk6IC8qIG5vIG91dHB1dCByZWdpc3RlciAqLworCQk6ICJyIiAoYykpOworCWlzYigpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLWlvbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtaW9tbXUuaAppbmRleCBlZWMwYTEyLi44ZTNmY2I5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtaW9tbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtaW9tbXUuaApAQCAtMTgsNyArMTgsNiBAQAogCXVuc2lnbmVkIGludAkJZXh0ZW5zaW9uczsKIAlzaXplX3QJCQliaXRtYXBfc2l6ZTsJLyogc2l6ZSBvZiBhIHNpbmdsZSBiaXRtYXAgKi8KIAlzaXplX3QJCQliaXRzOwkJLyogcGVyIGJpdG1hcCAqLwotCXVuc2lnbmVkIGludAkJc2l6ZTsJCS8qIHBlciBiaXRtYXAgKi8KIAlkbWFfYWRkcl90CQliYXNlOwogCiAJc3BpbmxvY2tfdAkJbG9jazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDA5YWYxNDkuLjE5M2NlYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMzYsNyArMzYsNyBAQAogI2RlZmluZSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQgMQogI2RlZmluZSBLVk1fSEFWRV9PTkVfUkVHCiAKLSNkZWZpbmUgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTIDEKKyNkZWZpbmUgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTIDIKIAogI2luY2x1ZGUgPGt2bS9hcm1fdmdpYy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fcHNjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX3BzY2kuaAppbmRleCA5YTgzZDk4Li42YmRhOTQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fcHNjaS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9wc2NpLmgKQEAgLTE4LDYgKzE4LDEwIEBACiAjaWZuZGVmIF9fQVJNX0tWTV9QU0NJX0hfXwogI2RlZmluZSBfX0FSTV9LVk1fUFNDSV9IX18KIAotYm9vbCBrdm1fcHNjaV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisjZGVmaW5lIEtWTV9BUk1fUFNDSV8wXzEJMQorI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yCTIKKworaW50IGt2bV9wc2NpX3ZlcnNpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fcHNjaV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKICNlbmRpZiAvKiBfX0FSTV9LVk1fUFNDSV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjgwYTgzZS4uN2U5NWQ4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKQEAgLTMxLDExICszMSw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BDSV9ET01BSU5TICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAvKgogICogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIHNwYWNlLgogICogVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wc2NpLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wc2NpLmgKaW5kZXggYzRhZTE3MS4uYzI1ZWYzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHNjaS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BzY2kuaApAQCAtMjksMTYgKzI5LDE5IEBACiAJaW50ICgqY3B1X29mZikoc3RydWN0IHBzY2lfcG93ZXJfc3RhdGUgc3RhdGUpOwogCWludCAoKmNwdV9vbikodW5zaWduZWQgbG9uZyBjcHVpZCwgdW5zaWduZWQgbG9uZyBlbnRyeV9wb2ludCk7CiAJaW50ICgqbWlncmF0ZSkodW5zaWduZWQgbG9uZyBjcHVpZCk7CisJaW50ICgqYWZmaW5pdHlfaW5mbykodW5zaWduZWQgbG9uZyB0YXJnZXRfYWZmaW5pdHksCisJCQl1bnNpZ25lZCBsb25nIGxvd2VzdF9hZmZpbml0eV9sZXZlbCk7CisJaW50ICgqbWlncmF0ZV9pbmZvX3R5cGUpKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBwc2NpX29wZXJhdGlvbnMgcHNjaV9vcHM7CiBleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIHBzY2lfc21wX29wczsKIAogI2lmZGVmIENPTkZJR19BUk1fUFNDSQotdm9pZCBwc2NpX2luaXQodm9pZCk7CitpbnQgcHNjaV9pbml0KHZvaWQpOwogYm9vbCBwc2NpX3NtcF9hdmFpbGFibGUodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHBzY2lfaW5pdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBzY2lfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgcHNjaV9zbXBfYXZhaWxhYmxlKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCmluZGV4IDc3MDRlMjguLjcxMmI1MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgX0FTTV9BUk1fWEVOX0hZUEVSQ0FMTF9ICiAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uvc2NoZWQuaD4KIAogbG9uZyBwcml2Y21kX2NhbGwodW5zaWduZWQgY2FsbCwgdW5zaWduZWQgbG9uZyBhMSwKIAkJdW5zaWduZWQgbG9uZyBhMiwgdW5zaWduZWQgbG9uZyBhMywKQEAgLTQ4LDYgKzQ5LDE2IEBACiBpbnQgSFlQRVJWSVNPUl9waHlzZGV2X29wKGludCBjbWQsIHZvaWQgKmFyZyk7CiBpbnQgSFlQRVJWSVNPUl92Y3B1X29wKGludCBjbWQsIGludCB2Y3B1aWQsIHZvaWQgKmV4dHJhX2FyZ3MpOwogaW50IEhZUEVSVklTT1JfdG1lbV9vcCh2b2lkICphcmcpOworaW50IEhZUEVSVklTT1JfbXVsdGljYWxsKHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgKmNhbGxzLCB1aW50MzJfdCBucik7CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3N1c3BlbmQodW5zaWduZWQgbG9uZyBzdGFydF9pbmZvX21mbikKK3sKKwlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24gciA9IHsgLnJlYXNvbiA9IFNIVVRET1dOX3N1c3BlbmQgfTsKKworCS8qIHN0YXJ0X2luZm9fbWZuIGlzIHVudXNlZCBvbiBBUk0gKi8KKwlyZXR1cm4gSFlQRVJWSVNPUl9zY2hlZF9vcChTQ0hFRE9QX3NodXRkb3duLCAmcik7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogTVVMVElfdXBkYXRlX3ZhX21hcHBpbmcoc3RydWN0IG11bHRpY2FsbF9lbnRyeSAqbWNsLCB1bnNpZ25lZCBsb25nIHZhLApAQCAtNjMsOSArNzQsNCBAQAogCUJVRygpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotSFlQRVJWSVNPUl9tdWx0aWNhbGwodm9pZCAqY2FsbF9saXN0LCBpbnQgbnJfY2FsbHMpCi17Ci0JQlVHKCk7Ci19CiAjZW5kaWYgLyogX0FTTV9BUk1fWEVOX0hZUEVSQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKaW5kZXggMTE1MTE4OC4uNTAwNjYwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaApAQCAtNDAsNiArNDAsOCBAQAogI2RlZmluZSBQUklfeGVuX3BmbiAibGx4IgogdHlwZWRlZiB1aW50NjRfdCB4ZW5fdWxvbmdfdDsKICNkZWZpbmUgUFJJX3hlbl91bG9uZyAibGx4IgordHlwZWRlZiBpbnQ2NF90IHhlbl9sb25nX3Q7CisjZGVmaW5lIFBSSV94ZW5fbG9uZyAibGx4IgogLyogR3Vlc3QgaGFuZGxlcyBmb3IgcHJpbWl0aXZlIEMgdHlwZXMuICovCiBfX0RFRklORV9HVUVTVF9IQU5ETEUodWNoYXIsIHVuc2lnbmVkIGNoYXIpOwogX19ERUZJTkVfR1VFU1RfSEFORExFKHVpbnQsICB1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9pbXgtdWFydC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9pbXgtdWFydC5oCmluZGV4IDQyYjgyM2MuLjAzMmEzMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvaW14LXVhcnQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2lteC11YXJ0LmgKQEAgLTgxLDYgKzgxLDE1IEBACiAjZGVmaW5lIElNWDZTTF9VQVJUX0JBU0VfQUREUihuKSBJTVg2U0xfVUFSVCMjbiMjX0JBU0VfQUREUgogI2RlZmluZSBJTVg2U0xfVUFSVF9CQVNFKG4pCUlNWDZTTF9VQVJUX0JBU0VfQUREUihuKQogCisjZGVmaW5lIElNWDZTWF9VQVJUMV9CQVNFX0FERFIJMHgwMjAyMDAwMAorI2RlZmluZSBJTVg2U1hfVUFSVDJfQkFTRV9BRERSCTB4MDIxZTgwMDAKKyNkZWZpbmUgSU1YNlNYX1VBUlQzX0JBU0VfQUREUgkweDAyMWVjMDAwCisjZGVmaW5lIElNWDZTWF9VQVJUNF9CQVNFX0FERFIJMHgwMjFmMDAwMAorI2RlZmluZSBJTVg2U1hfVUFSVDVfQkFTRV9BRERSCTB4MDIxZjQwMDAKKyNkZWZpbmUgSU1YNlNYX1VBUlQ2X0JBU0VfQUREUgkweDAyMmEwMDAwCisjZGVmaW5lIElNWDZTWF9VQVJUX0JBU0VfQUREUihuKSBJTVg2U1hfVUFSVCMjbiMjX0JBU0VfQUREUgorI2RlZmluZSBJTVg2U1hfVUFSVF9CQVNFKG4pCUlNWDZTWF9VQVJUX0JBU0VfQUREUihuKQorCiAjZGVmaW5lIElNWF9ERUJVR19VQVJUX0JBU0Uoc29jKSBzb2MjI19VQVJUX0JBU0UoQ09ORklHX0RFQlVHX0lNWF9VQVJUX1BPUlQpCiAKICNpZmRlZiBDT05GSUdfREVCVUdfSU1YMV9VQVJUCkBAIC0xMDMsNiArMTEyLDggQEAKICNkZWZpbmUgVUFSVF9QQUREUglJTVhfREVCVUdfVUFSVF9CQVNFKElNWDZRKQogI2VsaWYgZGVmaW5lZChDT05GSUdfREVCVUdfSU1YNlNMX1VBUlQpCiAjZGVmaW5lIFVBUlRfUEFERFIJSU1YX0RFQlVHX1VBUlRfQkFTRShJTVg2U0wpCisjZWxpZiBkZWZpbmVkKENPTkZJR19ERUJVR19JTVg2U1hfVUFSVCkKKyNkZWZpbmUgVUFSVF9QQUREUglJTVhfREVCVUdfVUFSVF9CQVNFKElNWDZTWCkKICNlbmRpZgogCiAjZW5kaWYgLyogX19ERUJVR19JTVhfVUFSVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL21zbS5TIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9tc20uUwppbmRleCA5ZDY1M2Q0Li45ZWY1NzYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL21zbS5TCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvbXNtLlMKQEAgLTE1LDUxICsxNSwxNSBAQAogICoKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NU003WDAwQSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9RU0Q4WDUwKQotI2RlZmluZSBNU01fVUFSVDFfUEhZUyAgICAgICAgMHhBOUEwMDAwMAotI2RlZmluZSBNU01fVUFSVDJfUEhZUyAgICAgICAgMHhBOUIwMDAwMAotI2RlZmluZSBNU01fVUFSVDNfUEhZUyAgICAgICAgMHhBOUMwMDAwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NU003WDMwKQotI2RlZmluZSBNU01fVUFSVDFfUEhZUyAgICAgICAgMHhBQ0EwMDAwMAotI2RlZmluZSBNU01fVUFSVDJfUEhZUyAgICAgICAgMHhBQ0IwMDAwMAotI2RlZmluZSBNU01fVUFSVDNfUEhZUyAgICAgICAgMHhBQ0MwMDAwMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19NU01fVUFSVDEpCi0jZGVmaW5lIE1TTV9ERUJVR19VQVJUX0JBU0UJMHhFMTAwMDAwMAotI2RlZmluZSBNU01fREVCVUdfVUFSVF9QSFlTCU1TTV9VQVJUMV9QSFlTCi0jZWxpZiBkZWZpbmVkKENPTkZJR19ERUJVR19NU01fVUFSVDIpCi0jZGVmaW5lIE1TTV9ERUJVR19VQVJUX0JBU0UJMHhFMTAwMDAwMAotI2RlZmluZSBNU01fREVCVUdfVUFSVF9QSFlTCU1TTV9VQVJUMl9QSFlTCi0jZWxpZiBkZWZpbmVkKENPTkZJR19ERUJVR19NU01fVUFSVDMpCi0jZGVmaW5lIE1TTV9ERUJVR19VQVJUX0JBU0UJMHhFMTAwMDAwMAotI2RlZmluZSBNU01fREVCVUdfVUFSVF9QSFlTCU1TTV9VQVJUM19QSFlTCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19ERUJVR19NU004NjYwX1VBUlQKLSNkZWZpbmUgTVNNX0RFQlVHX1VBUlRfQkFTRQkweEYwMDQwMDAwCi0jZGVmaW5lIE1TTV9ERUJVR19VQVJUX1BIWVMJMHgxOUM0MDAwMAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfTVNNODk2MF9VQVJUCi0jZGVmaW5lIE1TTV9ERUJVR19VQVJUX0JBU0UJMHhGMDA0MDAwMAotI2RlZmluZSBNU01fREVCVUdfVUFSVF9QSFlTCTB4MTY0NDAwMDAKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0RFQlVHX01TTTg5NzRfVUFSVAotI2RlZmluZSBNU01fREVCVUdfVUFSVF9CQVNFCTB4RkE3MUUwMDAKLSNkZWZpbmUgTVNNX0RFQlVHX1VBUlRfUEhZUwkweEY5OTFFMDAwCi0jZW5kaWYKLQogCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2LCB0bXAKLSNpZmRlZiBNU01fREVCVUdfVUFSVF9QSFlTCi0JbGRyCVxycCwgPU1TTV9ERUJVR19VQVJUX1BIWVMKLQlsZHIJXHJ2LCA9TVNNX0RFQlVHX1VBUlRfQkFTRQorI2lmZGVmIENPTkZJR19ERUJVR19VQVJUX1BIWVMKKwlsZHIJXHJwLCA9Q09ORklHX0RFQlVHX1VBUlRfUEhZUworCWxkcglccnYsID1DT05GSUdfREVCVUdfVUFSVF9WSVJUCiAjZW5kaWYKIAkuZW5kbQogCiAJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKLSNpZmRlZiBDT05GSUdfTVNNX0hBU19ERUJVR19VQVJUX0hTCisjaWZkZWYgQ09ORklHX0RFQlVHX1FDT01fVUFSVERNCiAJQCBXcml0ZSB0aGUgMSBjaGFyYWN0ZXIgdG8gVUFSVERNX1RGCiAJc3RyCVxyZCwgW1xyeCwgIzB4NzBdCiAjZWxzZQpAQCAtNjgsNyArMzIsNyBAQAogCS5lbmRtCiAKIAkubWFjcm8Jd2FpdHVhcnQsIHJkLCByeAotI2lmZGVmIENPTkZJR19NU01fSEFTX0RFQlVHX1VBUlRfSFMKKyNpZmRlZiBDT05GSUdfREVCVUdfUUNPTV9VQVJURE0KIAlAIGNoZWNrIGZvciBUWF9FTVQgaW4gVUFSVERNX1NSCiAJbGRyCVxyZCwgW1xyeCwgIzB4MDhdCiAJdHN0CVxyZCwgIzB4MDgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvczNjMjR4eC5TIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9zM2MyNHh4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmNTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvczNjMjR4eC5TCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfczNjLmg+CisKKyNkZWZpbmUgUzNDMjQxMF9VQVJUMV9PRkYgKDB4NDAwMCkKKworCS5tYWNybyBhZGRydWFydCwgcnAsIHJ2LCB0bXAKKwkJbGRyCVxycCwgPSBDT05GSUdfREVCVUdfVUFSVF9QSFlTCisJCWxkcglccnYsID0gQ09ORklHX0RFQlVHX1VBUlRfVklSVAorCS5lbmRtCisKKwkubWFjcm8gIGZpZm9fZnVsbF9zM2MyNDEwIHJkLCByeAorCQlsZHIJXHJkLCBbXHJ4LCAjIFMzQzI0MTBfVUZTVEFUXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VRlNUQVRfVFhGVUxMCisJLmVuZG0KKworCS5tYWNybyBmaWZvX2xldmVsX3MzYzI0MTAgcmQsIHJ4CisJCWxkcglccmQsIFtccngsICMgUzNDMjQxMF9VRlNUQVRdCisJCWFuZAlccmQsIFxyZCwgI1MzQzI0MTBfVUZTVEFUX1RYTUFTSworCS5lbmRtCisKKy8qIFNlbGVjdCB0aGUgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZQorICogUzNDMjQ0MCB3aWxsIGdldCBzZWxlY3RlZCBieSBkZWZhdWx0LCBhcyB0aGVzZSBhcmUgdGhlIG1vc3Qgd2lkZWx5CisgKiB1c2VkIHZhcmlhbnRzIG9mIHRoZXNlCisqLworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfUzNDMjQxMF9VQVJUKQorI2RlZmluZSBmaWZvX2Z1bGwgIGZpZm9fZnVsbF9zM2MyNDEwCisjZGVmaW5lIGZpZm9fbGV2ZWwgZmlmb19sZXZlbF9zM2MyNDEwCisjZW5kaWYKKworLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yayAqLworCisjaW5jbHVkZSA8ZGVidWcvc2Ftc3VuZy5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy92Zi5TIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy92Zi5TCmluZGV4IGJhMTJjYzQuLmI4ODkzMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvdmYuUworKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3ZmLlMKQEAgLTcsOSArNywyMCBAQAogICoKICAqLwogCisjZGVmaW5lIFZGX1VBUlQwX0JBU0VfQUREUgkweDQwMDI3MDAwCisjZGVmaW5lIFZGX1VBUlQxX0JBU0VfQUREUgkweDQwMDI4MDAwCisjZGVmaW5lIFZGX1VBUlQyX0JBU0VfQUREUgkweDQwMDI5MDAwCisjZGVmaW5lIFZGX1VBUlQzX0JBU0VfQUREUgkweDQwMDJhMDAwCisjZGVmaW5lIFZGX1VBUlRfQkFTRV9BRERSKG4pCVZGX1VBUlQjI24jI19CQVNFX0FERFIKKyNkZWZpbmUgVkZfVUFSVF9CQVNFKG4pCQlWRl9VQVJUX0JBU0VfQUREUihuKQorI2RlZmluZSBWRl9VQVJUX1BIWVNJQ0FMX0JBU0UJVkZfVUFSVF9CQVNFKENPTkZJR19ERUJVR19WRl9VQVJUX1BPUlQpCisKKyNkZWZpbmUgVkZfVUFSVF9WSVJUVUFMX0JBU0UJMHhmZTAwMDAwMAorCiAJLm1hY3JvCWFkZHJ1YXJ0LCBycCwgcnYsIHRtcAotCWxkcglccnAsID0weDQwMDI4MDAwCUAgcGh5c2ljYWwKLQlsZHIJXHJ2LCA9MHhmZTAyODAwMAlAIHZpcnR1YWwKKwlsZHIJXHJwLCA9VkZfVUFSVF9QSFlTSUNBTF9CQVNFIAlAIHBoeXNpY2FsCisJYW5kCVxydiwgXHJwLCAjMHhmZmZmZmYJCUAgb2Zmc2V0IHdpdGhpbiAxNk1CIHNlY3Rpb24KKwlhZGQJXHJ2LCBccnYsICNWRl9VQVJUX1ZJUlRVQUxfQkFTRQogCS5lbmRtCiAKIAkubWFjcm8Jc2VuZHVhcnQsIHJkLCByeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy96eW5xLlMgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3p5bnEuUwppbmRleCAwYjc2MmZhLi5iZDEzZGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3p5bnEuUworKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3p5bnEuUwpAQCAtMjAsMTggKzIwLDE4IEBACiAjZGVmaW5lIFVBUlRfU1JfVFhFTVBUWQkJMHgwMDAwMDAwOAkvKiBUWCBGSUZPIGVtcHR5ICovCiAKICNkZWZpbmUgVUFSVDBfUEhZUwkJMHhFMDAwMDAwMAorI2RlZmluZSBVQVJUMF9WSVJUCQkweEYwMDAwMDAwCiAjZGVmaW5lIFVBUlQxX1BIWVMJCTB4RTAwMDEwMDAKLSNkZWZpbmUgVUFSVF9TSVpFCQlTWl80SwotI2RlZmluZSBVQVJUX1ZJUlQJCTB4RjAwMDEwMDAKKyNkZWZpbmUgVUFSVDFfVklSVAkJMHhGMDAwMTAwMAogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfWllOUV9VQVJUMSkKICMgZGVmaW5lIExMX1VBUlRfUEFERFIJCVVBUlQxX1BIWVMKKyMgZGVmaW5lIExMX1VBUlRfVkFERFIJCVVBUlQxX1ZJUlQKICNlbHNlCiAjIGRlZmluZSBMTF9VQVJUX1BBRERSCQlVQVJUMF9QSFlTCisjIGRlZmluZSBMTF9VQVJUX1ZBRERSCQlVQVJUMF9WSVJUCiAjZW5kaWYKIAotI2RlZmluZSBMTF9VQVJUX1ZBRERSCQlVQVJUX1ZJUlQKLQogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydiwgdG1wCiAJCWxkcglccnAsID1MTF9VQVJUX1BBRERSCUAgcGh5c2ljYWwKIAkJbGRyCVxydiwgPUxMX1VBUlRfVkFERFIJQCB2aXJ0dWFsCkBAIC00MywxMiArNDMsMTQgQEAKIAogCQkubWFjcm8Jd2FpdHVhcnQscmQscngKIDEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjVUFSVF9TUl9PRkZTRVRdCitBUk1fQkU4KAlyZXYJXHJkLCBccmQgKQogCQl0c3QJXHJkLCAjVUFSVF9TUl9UWEVNUFRZCiAJCWJlcQkxMDAxYgogCQkuZW5kbQogCiAJCS5tYWNybwlidXN5dWFydCxyZCxyeAogMTAwMjoJCWxkcglccmQsIFtccngsICNVQVJUX1NSX09GRlNFVF0JQCBnZXQgc3RhdHVzIHJlZ2lzdGVyCitBUk1fQkU4KAlyZXYJXHJkLCBccmQgKQogCQl0c3QJXHJkLCAjVUFSVF9TUl9UWEZVTEwJCUAKIAkJYm5lCTEwMDJiCQkJQCB3YWl0IGlmIEZJRk8gaXMgZnVsbAogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggZWYwYzg3OC4uZTZlYmRkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS9rdm0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC0yMCw2ICsyMCw3IEBACiAjZGVmaW5lIF9fQVJNX0tWTV9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHNjaS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogI2RlZmluZSBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCkBAIC04Myw2ICs4NCw3IEBACiAjZGVmaW5lIEtWTV9WR0lDX1YyX0NQVV9TSVpFCQkweDIwMDAKIAogI2RlZmluZSBLVk1fQVJNX1ZDUFVfUE9XRVJfT0ZGCQkwIC8qIENQVSBpcyBzdGFydGVkIGluIE9GRiBzdGF0ZSAqLworI2RlZmluZSBLVk1fQVJNX1ZDUFVfUFNDSV8wXzIJCTEgLyogQ1BVIHVzZXMgUFNDSSB2MC4yICovCiAKIHN0cnVjdCBrdm1fdmNwdV9pbml0IHsKIAlfX3UzMiB0YXJnZXQ7CkBAIC0yMDEsOSArMjAzLDkgQEAKICNkZWZpbmUgS1ZNX1BTQ0lfRk5fQ1BVX09OCQlLVk1fUFNDSV9GTigyKQogI2RlZmluZSBLVk1fUFNDSV9GTl9NSUdSQVRFCQlLVk1fUFNDSV9GTigzKQogCi0jZGVmaW5lIEtWTV9QU0NJX1JFVF9TVUNDRVNTCQkwCi0jZGVmaW5lIEtWTV9QU0NJX1JFVF9OSQkJCSgodW5zaWduZWQgbG9uZyktMSkKLSNkZWZpbmUgS1ZNX1BTQ0lfUkVUX0lOVkFMCQkoKHVuc2lnbmVkIGxvbmcpLTIpCi0jZGVmaW5lIEtWTV9QU0NJX1JFVF9ERU5JRUQJCSgodW5zaWduZWQgbG9uZyktMykKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX1NVQ0NFU1MJCVBTQ0lfUkVUX1NVQ0NFU1MKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX05JCQkJUFNDSV9SRVRfTk9UX1NVUFBPUlRFRAorI2RlZmluZSBLVk1fUFNDSV9SRVRfSU5WQUwJCVBTQ0lfUkVUX0lOVkFMSURfUEFSQU1TCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9ERU5JRUQJCVBTQ0lfUkVUX0RFTklFRAogCiAjZW5kaWYgLyogX19BUk1fS1ZNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDE2ZDQzY2QuLjE3YTI2YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTU0NSw2ICs1NDUsMTggQEAKIAkJICovCiAJCXBjaV9idXNfYWRkX2RldmljZXMoYnVzKTsKIAl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5cywgJmhlYWQsIG5vZGUpIHsKKwkJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHN5cy0+YnVzOworCisJCS8qIENvbmZpZ3VyZSBQQ0kgRXhwcmVzcyBzZXR0aW5ncyAqLworCQlpZiAoYnVzICYmICFwY2lfaGFzX2ZsYWcoUENJX1BST0JFX09OTFkpKSB7CisJCQlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZidXMtPmNoaWxkcmVuLCBub2RlKQorCQkJCXBjaWVfYnVzX2NvbmZpZ3VyZV9zZXR0aW5ncyhjaGlsZCk7CisJCX0KKwl9CiB9CiAKICNpZm5kZWYgQ09ORklHX1BDSV9IT1NUX0lURTgxNTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wc2NpLmMgYi9hcmNoL2FybS9rZXJuZWwvcHNjaS5jCmluZGV4IDQ2OTMxODguLmY3Mzg5MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wc2NpLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BzY2kuYwpAQCAtMTcsNjMgKzE3LDU4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvcHNjaS5oPgogCiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL29wY29kZXMtc2VjLmg+CiAjaW5jbHVkZSA8YXNtL29wY29kZXMtdmlydC5oPgogI2luY2x1ZGUgPGFzbS9wc2NpLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CiAKIHN0cnVjdCBwc2NpX29wZXJhdGlvbnMgcHNjaV9vcHM7CiAKIHN0YXRpYyBpbnQgKCppbnZva2VfcHNjaV9mbikodTMyLCB1MzIsIHUzMiwgdTMyKTsKK3R5cGVkZWYgaW50ICgqcHNjaV9pbml0Y2FsbF90KShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CiAKIGVudW0gcHNjaV9mdW5jdGlvbiB7CiAJUFNDSV9GTl9DUFVfU1VTUEVORCwKIAlQU0NJX0ZOX0NQVV9PTiwKIAlQU0NJX0ZOX0NQVV9PRkYsCiAJUFNDSV9GTl9NSUdSQVRFLAorCVBTQ0lfRk5fQUZGSU5JVFlfSU5GTywKKwlQU0NJX0ZOX01JR1JBVEVfSU5GT19UWVBFLAogCVBTQ0lfRk5fTUFYLAogfTsKIAogc3RhdGljIHUzMiBwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fTUFYXTsKIAotI2RlZmluZSBQU0NJX1JFVF9TVUNDRVNTCQkwCi0jZGVmaW5lIFBTQ0lfUkVUX0VPUE5PVFNVUFAJCS0xCi0jZGVmaW5lIFBTQ0lfUkVUX0VJTlZBTAkJCS0yCi0jZGVmaW5lIFBTQ0lfUkVUX0VQRVJNCQkJLTMKLQogc3RhdGljIGludCBwc2NpX3RvX2xpbnV4X2Vycm5vKGludCBlcnJubykKIHsKIAlzd2l0Y2ggKGVycm5vKSB7CiAJY2FzZSBQU0NJX1JFVF9TVUNDRVNTOgogCQlyZXR1cm4gMDsKLQljYXNlIFBTQ0lfUkVUX0VPUE5PVFNVUFA6CisJY2FzZSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEOgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JY2FzZSBQU0NJX1JFVF9FSU5WQUw6CisJY2FzZSBQU0NJX1JFVF9JTlZBTElEX1BBUkFNUzoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBQU0NJX1JFVF9FUEVSTToKKwljYXNlIFBTQ0lfUkVUX0RFTklFRDoKIAkJcmV0dXJuIC1FUEVSTTsKIAl9OwogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLSNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9JRF9NQVNLCTB4ZmZmZgotI2RlZmluZSBQU0NJX1BPV0VSX1NUQVRFX0lEX1NISUZUCTAKLSNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9UWVBFX01BU0sJMHgxCi0jZGVmaW5lIFBTQ0lfUE9XRVJfU1RBVEVfVFlQRV9TSElGVAkxNgotI2RlZmluZSBQU0NJX1BPV0VSX1NUQVRFX0FGRkxfTUFTSwkweDMKLSNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9BRkZMX1NISUZUCTI0Ci0KIHN0YXRpYyB1MzIgcHNjaV9wb3dlcl9zdGF0ZV9wYWNrKHN0cnVjdCBwc2NpX3Bvd2VyX3N0YXRlIHN0YXRlKQogewotCXJldHVybgkoKHN0YXRlLmlkICYgUFNDSV9QT1dFUl9TVEFURV9JRF9NQVNLKQotCQkJPDwgUFNDSV9QT1dFUl9TVEFURV9JRF9TSElGVCkJfAotCQkoKHN0YXRlLnR5cGUgJiBQU0NJX1BPV0VSX1NUQVRFX1RZUEVfTUFTSykKLQkJCTw8IFBTQ0lfUE9XRVJfU1RBVEVfVFlQRV9TSElGVCkJfAotCQkoKHN0YXRlLmFmZmluaXR5X2xldmVsICYgUFNDSV9QT1dFUl9TVEFURV9BRkZMX01BU0spCi0JCQk8PCBQU0NJX1BPV0VSX1NUQVRFX0FGRkxfU0hJRlQpOworCXJldHVybiAoKHN0YXRlLmlkIDw8IFBTQ0lfMF8yX1BPV0VSX1NUQVRFX0lEX1NISUZUKQorCQkJJiBQU0NJXzBfMl9QT1dFUl9TVEFURV9JRF9NQVNLKSB8CisJCSgoc3RhdGUudHlwZSA8PCBQU0NJXzBfMl9QT1dFUl9TVEFURV9UWVBFX1NISUZUKQorCQkgJiBQU0NJXzBfMl9QT1dFUl9TVEFURV9UWVBFX01BU0spIHwKKwkJKChzdGF0ZS5hZmZpbml0eV9sZXZlbCA8PCBQU0NJXzBfMl9QT1dFUl9TVEFURV9BRkZMX1NISUZUKQorCQkgJiBQU0NJXzBfMl9QT1dFUl9TVEFURV9BRkZMX01BU0spOwogfQogCiAvKgpAQCAtMTEwLDYgKzEwNSwxNCBAQAogCXJldHVybiBmdW5jdGlvbl9pZDsKIH0KIAorc3RhdGljIGludCBwc2NpX2dldF92ZXJzaW9uKHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGludm9rZV9wc2NpX2ZuKFBTQ0lfMF8yX0ZOX1BTQ0lfVkVSU0lPTiwgMCwgMCwgMCk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBwc2NpX2NwdV9zdXNwZW5kKHN0cnVjdCBwc2NpX3Bvd2VyX3N0YXRlIHN0YXRlLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpCiB7CkBAIC0xNTMsMjYgKzE1NiwzNiBAQAogCXJldHVybiBwc2NpX3RvX2xpbnV4X2Vycm5vKGVycik7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBzY2lfb2ZfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKLQl7IC5jb21wYXRpYmxlID0gImFybSxwc2NpIiwJfSwKLQl7fSwKLX07Ci0KLXZvaWQgX19pbml0IHBzY2lfaW5pdCh2b2lkKQorc3RhdGljIGludCBwc2NpX2FmZmluaXR5X2luZm8odW5zaWduZWQgbG9uZyB0YXJnZXRfYWZmaW5pdHksCisJCXVuc2lnbmVkIGxvbmcgbG93ZXN0X2FmZmluaXR5X2xldmVsKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IGVycjsKKwl1MzIgZm47CisKKwlmbiA9IHBzY2lfZnVuY3Rpb25faWRbUFNDSV9GTl9BRkZJTklUWV9JTkZPXTsKKwllcnIgPSBpbnZva2VfcHNjaV9mbihmbiwgdGFyZ2V0X2FmZmluaXR5LCBsb3dlc3RfYWZmaW5pdHlfbGV2ZWwsIDApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHNjaV9taWdyYXRlX2luZm9fdHlwZSh2b2lkKQoreworCWludCBlcnI7CisJdTMyIGZuOworCisJZm4gPSBwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fTUlHUkFURV9JTkZPX1RZUEVdOworCWVyciA9IGludm9rZV9wc2NpX2ZuKGZuLCAwLCAwLCAwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGdldF9zZXRfY29uZHVpdF9tZXRob2Qoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKIAljb25zdCBjaGFyICptZXRob2Q7Ci0JdTMyIGlkOwogCi0JbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgcHNjaV9vZl9tYXRjaCk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuOwotCi0JcHJfaW5mbygicHJvYmluZyBmdW5jdGlvbiBJRHMgZnJvbSBkZXZpY2UtdHJlZVxuIik7CisJcHJfaW5mbygicHJvYmluZyBmb3IgY29uZHVpdCBtZXRob2QgZnJvbSBEVC5cbiIpOwogCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAibWV0aG9kIiwgJm1ldGhvZCkpIHsKLQkJcHJfd2FybmluZygibWlzc2luZyBcIm1ldGhvZFwiIHByb3BlcnR5XG4iKTsKLQkJZ290byBvdXRfcHV0X25vZGU7CisJCXByX3dhcm4oIm1pc3NpbmcgXCJtZXRob2RcIiBwcm9wZXJ0eVxuIik7CisJCXJldHVybiAtRU5YSU87CiAJfQogCiAJaWYgKCFzdHJjbXAoImh2YyIsIG1ldGhvZCkpIHsKQEAgLTE4MCw5ICsxOTMsOTggQEAKIAl9IGVsc2UgaWYgKCFzdHJjbXAoInNtYyIsIG1ldGhvZCkpIHsKIAkJaW52b2tlX3BzY2lfZm4gPSBfX2ludm9rZV9wc2NpX2ZuX3NtYzsKIAl9IGVsc2UgewotCQlwcl93YXJuaW5nKCJpbnZhbGlkIFwibWV0aG9kXCIgcHJvcGVydHk6ICVzXG4iLCBtZXRob2QpOwotCQlnb3RvIG91dF9wdXRfbm9kZTsKKwkJcHJfd2FybigiaW52YWxpZCBcIm1ldGhvZFwiIHByb3BlcnR5OiAlc1xuIiwgbWV0aG9kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwc2NpX3N5c19yZXNldChlbnVtIHJlYm9vdF9tb2RlIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJaW52b2tlX3BzY2lfZm4oUFNDSV8wXzJfRk5fU1lTVEVNX1JFU0VULCAwLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgcHNjaV9zeXNfcG93ZXJvZmYodm9pZCkKK3sKKwlpbnZva2VfcHNjaV9mbihQU0NJXzBfMl9GTl9TWVNURU1fT0ZGLCAwLCAwLCAwKTsKK30KKworLyoKKyAqIFBTQ0kgRnVuY3Rpb24gSURzIGZvciB2MC4yKyBhcmUgd2VsbCBkZWZpbmVkIHNvIHVzZQorICogc3RhbmRhcmQgdmFsdWVzLgorICovCitzdGF0aWMgaW50IHBzY2lfMF8yX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgZXJyLCB2ZXI7CisKKwllcnIgPSBnZXRfc2V0X2NvbmR1aXRfbWV0aG9kKG5wKTsKKworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dF9ub2RlOworCisJdmVyID0gcHNjaV9nZXRfdmVyc2lvbigpOworCisJaWYgKHZlciA9PSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEKSB7CisJCS8qIFBTQ0kgdjAuMiBtYW5kYXRlcyBpbXBsZW1lbnRhdGlvbiBvZiBQU0NJX0lEX1ZFUlNJT04uICovCisJCXByX2VycigiUFNDSSBmaXJtd2FyZSBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgdjAuMiBzcGVjLlxuIik7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dF9wdXRfbm9kZTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJQU0NJdiVkLiVkIGRldGVjdGVkIGluIGZpcm13YXJlLlxuIiwKKwkJCQlQU0NJX1ZFUlNJT05fTUFKT1IodmVyKSwKKwkJCQlQU0NJX1ZFUlNJT05fTUlOT1IodmVyKSk7CisKKwkJaWYgKFBTQ0lfVkVSU0lPTl9NQUpPUih2ZXIpID09IDAgJiYKKwkJCQlQU0NJX1ZFUlNJT05fTUlOT1IodmVyKSA8IDIpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlwcl9lcnIoIkNvbmZsaWN0aW5nIFBTQ0kgdmVyc2lvbiBkZXRlY3RlZC5cbiIpOworCQkJZ290byBvdXRfcHV0X25vZGU7CisJCX0KKwl9CisKKwlwcl9pbmZvKCJVc2luZyBzdGFuZGFyZCBQU0NJIHYwLjIgZnVuY3Rpb24gSURzXG4iKTsKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQ1BVX1NVU1BFTkRdID0gUFNDSV8wXzJfRk5fQ1BVX1NVU1BFTkQ7CisJcHNjaV9vcHMuY3B1X3N1c3BlbmQgPSBwc2NpX2NwdV9zdXNwZW5kOworCisJcHNjaV9mdW5jdGlvbl9pZFtQU0NJX0ZOX0NQVV9PRkZdID0gUFNDSV8wXzJfRk5fQ1BVX09GRjsKKwlwc2NpX29wcy5jcHVfb2ZmID0gcHNjaV9jcHVfb2ZmOworCisJcHNjaV9mdW5jdGlvbl9pZFtQU0NJX0ZOX0NQVV9PTl0gPSBQU0NJXzBfMl9GTl9DUFVfT047CisJcHNjaV9vcHMuY3B1X29uID0gcHNjaV9jcHVfb247CisKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fTUlHUkFURV0gPSBQU0NJXzBfMl9GTl9NSUdSQVRFOworCXBzY2lfb3BzLm1pZ3JhdGUgPSBwc2NpX21pZ3JhdGU7CisKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQUZGSU5JVFlfSU5GT10gPSBQU0NJXzBfMl9GTl9BRkZJTklUWV9JTkZPOworCXBzY2lfb3BzLmFmZmluaXR5X2luZm8gPSBwc2NpX2FmZmluaXR5X2luZm87CisKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fTUlHUkFURV9JTkZPX1RZUEVdID0KKwkJUFNDSV8wXzJfRk5fTUlHUkFURV9JTkZPX1RZUEU7CisJcHNjaV9vcHMubWlncmF0ZV9pbmZvX3R5cGUgPSBwc2NpX21pZ3JhdGVfaW5mb190eXBlOworCisJYXJtX3BtX3Jlc3RhcnQgPSBwc2NpX3N5c19yZXNldDsKKworCXBtX3Bvd2VyX29mZiA9IHBzY2lfc3lzX3Bvd2Vyb2ZmOworCitvdXRfcHV0X25vZGU6CisJb2Zfbm9kZV9wdXQobnApOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBQU0NJIDwgdjAuMiBnZXQgUFNDSSBGdW5jdGlvbiBJRHMgdmlhIERULgorICovCitzdGF0aWMgaW50IHBzY2lfMF8xX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwl1MzIgaWQ7CisJaW50IGVycjsKKworCWVyciA9IGdldF9zZXRfY29uZHVpdF9tZXRob2QobnApOworCisJaWYgKGVycikKKwkJZ290byBvdXRfcHV0X25vZGU7CisKKwlwcl9pbmZvKCJVc2luZyBQU0NJIHYwLjEgRnVuY3Rpb24gSURzIGZyb20gRFRcbiIpOwogCiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNwdV9zdXNwZW5kIiwgJmlkKSkgewogCQlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQ1BVX1NVU1BFTkRdID0gaWQ7CkBAIC0yMDYsNSArMzA4LDI1IEBACiAKIG91dF9wdXRfbm9kZToKIAlvZl9ub2RlX3B1dChucCk7Ci0JcmV0dXJuOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBzY2lfb2ZfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFybSxwc2NpIiwgLmRhdGEgPSBwc2NpXzBfMV9pbml0fSwKKwl7IC5jb21wYXRpYmxlID0gImFybSxwc2NpLTAuMiIsIC5kYXRhID0gcHNjaV8wXzJfaW5pdH0sCisJe30sCit9OworCitpbnQgX19pbml0IHBzY2lfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlZF9ucDsKKwlwc2NpX2luaXRjYWxsX3QgaW5pdF9mbjsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlX2FuZF9tYXRjaChOVUxMLCBwc2NpX29mX21hdGNoLCAmbWF0Y2hlZF9ucCk7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbml0X2ZuID0gKHBzY2lfaW5pdGNhbGxfdCltYXRjaGVkX25wLT5kYXRhOworCXJldHVybiBpbml0X2ZuKG5wKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wc2NpX3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3BzY2lfc21wLmMKaW5kZXggNTcwYTQ4Yy4uMjhhMWRiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BzY2lfc21wLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BzY2lfc21wLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvcHNjaS5oPgogCiAjaW5jbHVkZSA8YXNtL3BzY2kuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KQEAgLTY2LDYgKzY4LDM2IEBACiAgICAgICAgLyogV2Ugc2hvdWxkIG5ldmVyIHJldHVybiAqLwogICAgICAgIHBhbmljKCJwc2NpOiBjcHUgJWQgZmFpbGVkIHRvIHNodXRkb3duXG4iLCBjcHUpOwogfQorCitpbnQgX19yZWYgcHNjaV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlcnIsIGk7CisKKwlpZiAoIXBzY2lfb3BzLmFmZmluaXR5X2luZm8pCisJCXJldHVybiAxOworCS8qCisJICogY3B1X2tpbGwgY291bGQgcmFjZSB3aXRoIGNwdV9kaWUgYW5kIHdlIGNhbgorCSAqIHBvdGVudGlhbGx5IGVuZCB1cCBkZWNsYXJpbmcgdGhpcyBjcHUgdW5kZWFkCisJICogd2hpbGUgaXQgaXMgZHlpbmcuIFNvLCB0cnkgYWdhaW4gYSBmZXcgdGltZXMuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQllcnIgPSBwc2NpX29wcy5hZmZpbml0eV9pbmZvKGNwdV9sb2dpY2FsX21hcChjcHUpLCAwKTsKKwkJaWYgKGVyciA9PSBQU0NJXzBfMl9BRkZJTklUWV9MRVZFTF9PRkYpIHsKKwkJCXByX2luZm8oIkNQVSVkIGtpbGxlZC5cbiIsIGNwdSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCW1zbGVlcCgxMCk7CisJCXByX2luZm8oIlJldHJ5aW5nIGFnYWluIHRvIGNoZWNrIGZvciBDUFUga2lsbFxuIik7CisJfQorCisJcHJfd2FybigiQ1BVJWQgbWF5IG5vdCBoYXZlIHNodXQgZG93biBjbGVhbmx5IChBRkZJTklUWV9JTkZPIHJlcG9ydHMgJWQpXG4iLAorCQkJY3B1LCBlcnIpOworCS8qIE1ha2UgcGxhdGZvcm1fY3B1X2tpbGwoKSBmYWlsLiAqLworCXJldHVybiAwOworfQorCiAjZW5kaWYKIAogYm9vbCBfX2luaXQgcHNjaV9zbXBfYXZhaWxhYmxlKHZvaWQpCkBAIC03OCw1ICsxMTAsNiBAQAogCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBwc2NpX2Jvb3Rfc2Vjb25kYXJ5LAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCS5jcHVfZGllCQk9IHBzY2lfY3B1X2RpZSwKKwkuY3B1X2tpbGwJCT0gcHNjaV9jcHVfa2lsbCwKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC9hcm0va2VybmVsL3RvcG9sb2d5LmMKaW5kZXggMGJjOTRiMS4uNzFlMWZlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RvcG9sb2d5LmMKQEAgLTE4NSw2ICsxODUsMTUgQEAKIAlyZXR1cm4gJmNwdV90b3BvbG9neVtjcHVdLmNvcmVfc2libGluZzsKIH0KIAorLyoKKyAqIFRoZSBjdXJyZW50IGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBjYW4gcG93ZXIgZ2F0ZSBlYWNoIGNvcmUgaW5kZXBlbmRlbnRseS4KKyAqIFRoaXMgd2lsbCBiZSBzdXBlcnNlZGVkIGJ5IERUIGJpbmRpbmcgb25jZSBhdmFpbGFibGUuCisgKi8KK2NvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZXBvd2VyX21hc2soaW50IGNwdSkKK3sKKwlyZXR1cm4gJmNwdV90b3BvbG9neVtjcHVdLnRocmVhZF9zaWJsaW5nOworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVfc2libGluZ3NfbWFza3ModW5zaWduZWQgaW50IGNwdWlkKQogewogCXN0cnVjdCBjcHV0b3BvX2FybSAqY3B1X3RvcG8sICpjcHVpZF90b3BvID0gJmNwdV90b3BvbG9neVtjcHVpZF07CkBAIC0yNjYsNiArMjc1LDIwIEBACiAJCWNwdV90b3BvbG9neVtjcHVpZF0uc29ja2V0X2lkLCBtcGlkcik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgaW50IGNwdV9jb3JlcG93ZXJfZmxhZ3Modm9pZCkKK3sKKwlyZXR1cm4gU0RfU0hBUkVfUEtHX1JFU09VUkNFUyAgfCBTRF9TSEFSRV9QT1dFUkRPTUFJTjsKK30KKworc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgYXJtX3RvcG9sb2d5W10gPSB7CisjaWZkZWYgQ09ORklHX1NDSEVEX01DCisJeyBjcHVfY29yZXBvd2VyX21hc2ssIGNwdV9jb3JlcG93ZXJfZmxhZ3MsIFNEX0lOSVRfTkFNRShHTUMpIH0sCisJeyBjcHVfY29yZWdyb3VwX21hc2ssIGNwdV9jb3JlX2ZsYWdzLCBTRF9JTklUX05BTUUoTUMpIH0sCisjZW5kaWYKKwl7IGNwdV9jcHVfbWFzaywgU0RfSU5JVF9OQU1FKERJRSkgfSwKKwl7IE5VTEwsIH0sCit9OworCiAvKgogICogaW5pdF9jcHVfdG9wb2xvZ3kgaXMgY2FsbGVkIGF0IGJvb3Qgd2hlbiBvbmx5IG9uZSBjcHUgaXMgcnVubmluZwogICogd2hpY2ggcHJldmVudCBzaW11bHRhbmVvdXMgd3JpdGUgYWNjZXNzIHRvIGNwdV90b3BvbG9neSBhcnJheQpAQCAtMjg5LDQgKzMxMiw3IEBACiAJc21wX3dtYigpOwogCiAJcGFyc2VfZHRfdG9wb2xvZ3koKTsKKworCS8qIFNldCBzY2hlZHVsZXIgdG9wb2xvZ3kgZGVzY3JpcHRvciAqLworCXNldF9zY2hlZF90b3BvbG9neShhcm1fdG9wb2xvZ3kpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2FybS5jIGIvYXJjaC9hcm0va3ZtL2FybS5jCmluZGV4IGYwZTUwYTAuLjNjODJiMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9hcm0uYworKysgYi9hcmNoL2FybS9rdm0vYXJtLmMKQEAgLTE5Nyw2ICsxOTcsNyBAQAogCWNhc2UgS1ZNX0NBUF9ERVNUUk9ZX01FTU9SWV9SRUdJT05fV09SS1M6CiAJY2FzZSBLVk1fQ0FQX09ORV9SRUc6CiAJY2FzZSBLVk1fQ0FQX0FSTV9QU0NJOgorCWNhc2UgS1ZNX0NBUF9BUk1fUFNDSV8wXzI6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vaGFuZGxlX2V4aXQuYyBiL2FyY2gvYXJtL2t2bS9oYW5kbGVfZXhpdC5jCmluZGV4IDBkZTkxZmMuLjRjOTc5ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9oYW5kbGVfZXhpdC5jCisrKyBiL2FyY2gvYXJtL2t2bS9oYW5kbGVfZXhpdC5jCkBAIC0zOCwxNCArMzgsMTggQEAKIAogc3RhdGljIGludCBoYW5kbGVfaHZjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bikKIHsKKwlpbnQgcmV0OworCiAJdHJhY2Vfa3ZtX2h2YygqdmNwdV9wYyh2Y3B1KSwgKnZjcHVfcmVnKHZjcHUsIDApLAogCQkgICAgICBrdm1fdmNwdV9odmNfZ2V0X2ltbSh2Y3B1KSk7CiAKLQlpZiAoa3ZtX3BzY2lfY2FsbCh2Y3B1KSkKKwlyZXQgPSBrdm1fcHNjaV9jYWxsKHZjcHUpOworCWlmIChyZXQgPCAwKSB7CisJCWt2bV9pbmplY3RfdW5kZWZpbmVkKHZjcHUpOwogCQlyZXR1cm4gMTsKKwl9CiAKLQlrdm1faW5qZWN0X3VuZGVmaW5lZCh2Y3B1KTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9zbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL3BzY2kuYyBiL2FyY2gvYXJtL2t2bS9wc2NpLmMKaW5kZXggNDQ4ZjYwZS4uMDljZjM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL3BzY2kuYworKysgYi9hcmNoL2FybS9rdm0vcHNjaS5jCkBAIC0yNyw2ICsyNywzNiBAQAogICogYXMgZGVzY3JpYmVkIGluIEFSTSBkb2N1bWVudCBudW1iZXIgQVJNIERFTiAwMDIyQS4KICAqLwogCisjZGVmaW5lIEFGRklOSVRZX01BU0sobGV2ZWwpCX4oKDB4MVVMIDw8ICgobGV2ZWwpICogTVBJRFJfTEVWRUxfQklUUykpIC0gMSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcHNjaV9hZmZpbml0eV9tYXNrKHVuc2lnbmVkIGxvbmcgYWZmaW5pdHlfbGV2ZWwpCit7CisJaWYgKGFmZmluaXR5X2xldmVsIDw9IDMpCisJCXJldHVybiBNUElEUl9IV0lEX0JJVE1BU0sgJiBBRkZJTklUWV9NQVNLKGFmZmluaXR5X2xldmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcHNjaV92Y3B1X3N1c3BlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCS8qCisJICogTk9URTogRm9yIHNpbXBsaWNpdHksIHdlIG1ha2UgVkNQVSBzdXNwZW5kIGVtdWxhdGlvbiB0byBiZQorCSAqIHNhbWUtYXMgV0ZJIChXYWl0LWZvci1pbnRlcnJ1cHQpIGVtdWxhdGlvbi4KKwkgKgorCSAqIFRoaXMgbWVhbnMgZm9yIEtWTSB0aGUgd2FrZXVwIGV2ZW50cyBhcmUgaW50ZXJydXB0cyBhbmQKKwkgKiB0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBpbnRlbmRlZCB1c2Ugb2YgU3RhdGVJRCBhcyBkZXNjcmliZWQKKwkgKiBpbiBzZWN0aW9uIDUuNC4xIG9mIFBTQ0kgdjAuMiBzcGVjaWZpY2F0aW9uIChBUk0gREVOIDAwMjJBKS4KKwkgKgorCSAqIEZ1cnRoZXIsIHdlIGFsc28gdHJlYXQgcG93ZXItZG93biByZXF1ZXN0IHRvIGJlIHNhbWUgYXMKKwkgKiBzdGFuZC1ieSByZXF1ZXN0IGFzLXBlciBzZWN0aW9uIDUuNC4yIGNsYXVzZSAzIG9mIFBTQ0kgdjAuMgorCSAqIHNwZWNpZmljYXRpb24gKEFSTSBERU4gMDAyMkEpLiBUaGlzIG1lYW5zIGFsbCBzdXNwZW5kIHN0YXRlcworCSAqIGZvciBLVk0gd2lsbCBwcmVzZXJ2ZSB0aGUgcmVnaXN0ZXIgc3RhdGUuCisJICovCisJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7CisKKwlyZXR1cm4gUFNDSV9SRVRfU1VDQ0VTUzsKK30KKwogc3RhdGljIHZvaWQga3ZtX3BzY2lfdmNwdV9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXZjcHUtPmFyY2gucGF1c2UgPSB0cnVlOwpAQCAtMzgsNiArNjgsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IE5VTEwsICp0bXA7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgKndxOwogCXVuc2lnbmVkIGxvbmcgY3B1X2lkOworCXVuc2lnbmVkIGxvbmcgY29udGV4dF9pZDsKIAl1bnNpZ25lZCBsb25nIG1waWRyOwogCXBoeXNfYWRkcl90IHRhcmdldF9wYzsKIAlpbnQgaTsKQEAgLTU4LDEwICs4OSwxNyBAQAogCSAqIE1ha2Ugc3VyZSB0aGUgY2FsbGVyIHJlcXVlc3RlZCBhIHZhbGlkIENQVSBhbmQgdGhhdCB0aGUgQ1BVIGlzCiAJICogdHVybmVkIG9mZi4KIAkgKi8KLQlpZiAoIXZjcHUgfHwgIXZjcHUtPmFyY2gucGF1c2UpCi0JCXJldHVybiBLVk1fUFNDSV9SRVRfSU5WQUw7CisJaWYgKCF2Y3B1KQorCQlyZXR1cm4gUFNDSV9SRVRfSU5WQUxJRF9QQVJBTVM7CisJaWYgKCF2Y3B1LT5hcmNoLnBhdXNlKSB7CisJCWlmIChrdm1fcHNjaV92ZXJzaW9uKHNvdXJjZV92Y3B1KSAhPSBLVk1fQVJNX1BTQ0lfMF8xKQorCQkJcmV0dXJuIFBTQ0lfUkVUX0FMUkVBRFlfT047CisJCWVsc2UKKwkJCXJldHVybiBQU0NJX1JFVF9JTlZBTElEX1BBUkFNUzsKKwl9CiAKIAl0YXJnZXRfcGMgPSAqdmNwdV9yZWcoc291cmNlX3ZjcHUsIDIpOworCWNvbnRleHRfaWQgPSAqdmNwdV9yZWcoc291cmNlX3ZjcHUsIDMpOwogCiAJa3ZtX3Jlc2V0X3ZjcHUodmNwdSk7CiAKQEAgLTc2LDI2ICsxMTQsMTYwIEBACiAJCWt2bV92Y3B1X3NldF9iZSh2Y3B1KTsKIAogCSp2Y3B1X3BjKHZjcHUpID0gdGFyZ2V0X3BjOworCS8qCisJICogTk9URTogV2UgYWx3YXlzIHVwZGF0ZSByMCAob3IgeDApIGJlY2F1c2UgZm9yIFBTQ0kgdjAuMQorCSAqIHRoZSBnZW5lcmFsIHB1c3Bvc2UgcmVnaXN0ZXJzIGFyZSB1bmRlZmluZWQgdXBvbiBDUFVfT04uCisJICovCisJKnZjcHVfcmVnKHZjcHUsIDApID0gY29udGV4dF9pZDsKIAl2Y3B1LT5hcmNoLnBhdXNlID0gZmFsc2U7CiAJc21wX21iKCk7CQkvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIGlzIHZpc2libGUgKi8KIAogCXdxID0ga3ZtX2FyY2hfdmNwdV93cSh2Y3B1KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUod3EpOwogCi0JcmV0dXJuIEtWTV9QU0NJX1JFVF9TVUNDRVNTOworCXJldHVybiBQU0NJX1JFVF9TVUNDRVNTOwogfQogCi0vKioKLSAqIGt2bV9wc2NpX2NhbGwgLSBoYW5kbGUgUFNDSSBjYWxsIGlmIHIwIHZhbHVlIGlzIGluIHJhbmdlCi0gKiBAdmNwdTogUG9pbnRlciB0byB0aGUgVkNQVSBzdHJ1Y3QKLSAqCi0gKiBIYW5kbGUgUFNDSSBjYWxscyBmcm9tIGd1ZXN0cyB0aHJvdWdoIHRyYXBzIGZyb20gSFZDIGluc3RydWN0aW9ucy4KLSAqIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaXMgc2ltaWxhciB0byBTTUMgY2FsbHMgdG8gdGhlIHNlY3VyZSB3b3JsZCB3aGVyZQotICogdGhlIGZ1bmN0aW9uIG51bWJlciBpcyBwbGFjZWQgaW4gcjAgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZQotICogZnVuY3Rpb24gbnVtYmVyIHNwZWNpZmllZCBpbiByMCBpcyB3aXRoaW5nIHRoZSBQU0NJIHJhbmdlLCBhbmQgZmFsc2UKLSAqIG90aGVyd2lzZS4KLSAqLwotYm9vbCBrdm1fcHNjaV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9wc2NpX3ZjcHVfYWZmaW5pdHlfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBtcGlkcjsKKwl1bnNpZ25lZCBsb25nIHRhcmdldF9hZmZpbml0eTsKKwl1bnNpZ25lZCBsb25nIHRhcmdldF9hZmZpbml0eV9tYXNrOworCXVuc2lnbmVkIGxvbmcgbG93ZXN0X2FmZmluaXR5X2xldmVsOworCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnRtcDsKKworCXRhcmdldF9hZmZpbml0eSA9ICp2Y3B1X3JlZyh2Y3B1LCAxKTsKKwlsb3dlc3RfYWZmaW5pdHlfbGV2ZWwgPSAqdmNwdV9yZWcodmNwdSwgMik7CisKKwkvKiBEZXRlcm1pbmUgdGFyZ2V0IGFmZmluaXR5IG1hc2sgKi8KKwl0YXJnZXRfYWZmaW5pdHlfbWFzayA9IHBzY2lfYWZmaW5pdHlfbWFzayhsb3dlc3RfYWZmaW5pdHlfbGV2ZWwpOworCWlmICghdGFyZ2V0X2FmZmluaXR5X21hc2spCisJCXJldHVybiBQU0NJX1JFVF9JTlZBTElEX1BBUkFNUzsKKworCS8qIElnbm9yZSBvdGhlciBiaXRzIG9mIHRhcmdldCBhZmZpbml0eSAqLworCXRhcmdldF9hZmZpbml0eSAmPSB0YXJnZXRfYWZmaW5pdHlfbWFzazsKKworCS8qCisJICogSWYgb25lIG9yIG1vcmUgVkNQVSBtYXRjaGluZyB0YXJnZXQgYWZmaW5pdHkgYXJlIHJ1bm5pbmcKKwkgKiB0aGVuIE9OIGVsc2UgT0ZGCisJICovCisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdG1wLCBrdm0pIHsKKwkJbXBpZHIgPSBrdm1fdmNwdV9nZXRfbXBpZHIodG1wKTsKKwkJaWYgKCgobXBpZHIgJiB0YXJnZXRfYWZmaW5pdHlfbWFzaykgPT0gdGFyZ2V0X2FmZmluaXR5KSAmJgorCQkgICAgIXRtcC0+YXJjaC5wYXVzZSkgeworCQkJcmV0dXJuIFBTQ0lfMF8yX0FGRklOSVRZX0xFVkVMX09OOworCQl9CisJfQorCisJcmV0dXJuIFBTQ0lfMF8yX0FGRklOSVRZX0xFVkVMX09GRjsKK30KKworc3RhdGljIHZvaWQga3ZtX3ByZXBhcmVfc3lzdGVtX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpCit7CisJbWVtc2V0KCZ2Y3B1LT5ydW4tPnN5c3RlbV9ldmVudCwgMCwgc2l6ZW9mKHZjcHUtPnJ1bi0+c3lzdGVtX2V2ZW50KSk7CisJdmNwdS0+cnVuLT5zeXN0ZW1fZXZlbnQudHlwZSA9IHR5cGU7CisJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1NZU1RFTV9FVkVOVDsKK30KKworc3RhdGljIHZvaWQga3ZtX3BzY2lfc3lzdGVtX29mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJa3ZtX3ByZXBhcmVfc3lzdGVtX2V2ZW50KHZjcHUsIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04pOworfQorCitzdGF0aWMgdm9pZCBrdm1fcHNjaV9zeXN0ZW1fcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bV9wcmVwYXJlX3N5c3RlbV9ldmVudCh2Y3B1LCBLVk1fU1lTVEVNX0VWRU5UX1JFU0VUKTsKK30KKworaW50IGt2bV9wc2NpX3ZlcnNpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfUFNDSV8wXzIsIHZjcHUtPmFyY2guZmVhdHVyZXMpKQorCQlyZXR1cm4gS1ZNX0FSTV9QU0NJXzBfMjsKKworCXJldHVybiBLVk1fQVJNX1BTQ0lfMF8xOworfQorCitzdGF0aWMgaW50IGt2bV9wc2NpXzBfMl9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgcmV0ID0gMTsKKwl1bnNpZ25lZCBsb25nIHBzY2lfZm4gPSAqdmNwdV9yZWcodmNwdSwgMCkgJiB+KCh1MzIpIDApOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJc3dpdGNoIChwc2NpX2ZuKSB7CisJY2FzZSBQU0NJXzBfMl9GTl9QU0NJX1ZFUlNJT046CisJCS8qCisJCSAqIEJpdHNbMzE6MTZdID0gTWFqb3IgVmVyc2lvbiA9IDAKKwkJICogQml0c1sxNTowXSA9IE1pbm9yIFZlcnNpb24gPSAyCisJCSAqLworCQl2YWwgPSAyOworCQlicmVhazsKKwljYXNlIFBTQ0lfMF8yX0ZOX0NQVV9TVVNQRU5EOgorCWNhc2UgUFNDSV8wXzJfRk42NF9DUFVfU1VTUEVORDoKKwkJdmFsID0ga3ZtX3BzY2lfdmNwdV9zdXNwZW5kKHZjcHUpOworCQlicmVhazsKKwljYXNlIFBTQ0lfMF8yX0ZOX0NQVV9PRkY6CisJCWt2bV9wc2NpX3ZjcHVfb2ZmKHZjcHUpOworCQl2YWwgPSBQU0NJX1JFVF9TVUNDRVNTOworCQlicmVhazsKKwljYXNlIFBTQ0lfMF8yX0ZOX0NQVV9PTjoKKwljYXNlIFBTQ0lfMF8yX0ZONjRfQ1BVX09OOgorCQl2YWwgPSBrdm1fcHNjaV92Y3B1X29uKHZjcHUpOworCQlicmVhazsKKwljYXNlIFBTQ0lfMF8yX0ZOX0FGRklOSVRZX0lORk86CisJY2FzZSBQU0NJXzBfMl9GTjY0X0FGRklOSVRZX0lORk86CisJCXZhbCA9IGt2bV9wc2NpX3ZjcHVfYWZmaW5pdHlfaW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQU0NJXzBfMl9GTl9NSUdSQVRFOgorCWNhc2UgUFNDSV8wXzJfRk42NF9NSUdSQVRFOgorCQl2YWwgPSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEOworCQlicmVhazsKKwljYXNlIFBTQ0lfMF8yX0ZOX01JR1JBVEVfSU5GT19UWVBFOgorCQkvKgorCQkgKiBUcnVzdGVkIE9TIGlzIE1QIGhlbmNlIGRvZXMgbm90IHJlcXVpcmUgbWlncmF0aW9uCisJICAgICAgICAgKiBvcgorCQkgKiBUcnVzdGVkIE9TIGlzIG5vdCBwcmVzZW50CisJCSAqLworCQl2YWwgPSBQU0NJXzBfMl9UT1NfTVA7CisJCWJyZWFrOworCWNhc2UgUFNDSV8wXzJfRk5fTUlHUkFURV9JTkZPX1VQX0NQVToKKwljYXNlIFBTQ0lfMF8yX0ZONjRfTUlHUkFURV9JTkZPX1VQX0NQVToKKwkJdmFsID0gUFNDSV9SRVRfTk9UX1NVUFBPUlRFRDsKKwkJYnJlYWs7CisJY2FzZSBQU0NJXzBfMl9GTl9TWVNURU1fT0ZGOgorCQlrdm1fcHNjaV9zeXN0ZW1fb2ZmKHZjcHUpOworCQkvKgorCQkgKiBXZSBzaG91bGQnbnQgYmUgZ29pbmcgYmFjayB0byBndWVzdCBWQ1BVIGFmdGVyCisJCSAqIHJlY2VpdmluZyBTWVNURU1fT0ZGIHJlcXVlc3QuCisJCSAqCisJCSAqIElmIHVzZXIgc3BhY2UgYWNjaWRlbnRseS9kZWxpYmVyYXRlbHkgcmVzdW1lcworCQkgKiBndWVzdCBWQ1BVIGFmdGVyIFNZU1RFTV9PRkYgcmVxdWVzdCB0aGVuIGd1ZXN0CisJCSAqIFZDUFUgc2hvdWxkIHNlZSBpbnRlcm5hbCBmYWlsdXJlIGZyb20gUFNDSSByZXR1cm4KKwkJICogdmFsdWUuIFRvIGFjaGlldmUgdGhpcywgd2UgcHJlbG9hZCByMCAob3IgeDApIHdpdGgKKwkJICogUFNDSSByZXR1cm4gdmFsdWUgSU5URVJOQUxfRkFJTFVSRS4KKwkJICovCisJCXZhbCA9IFBTQ0lfUkVUX0lOVEVSTkFMX0ZBSUxVUkU7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgUFNDSV8wXzJfRk5fU1lTVEVNX1JFU0VUOgorCQlrdm1fcHNjaV9zeXN0ZW1fcmVzZXQodmNwdSk7CisJCS8qCisJCSAqIFNhbWUgcmVhc29uIGFzIFNZU1RFTV9PRkYgZm9yIHByZWxvYWRpbmcgcjAgKG9yIHgwKQorCQkgKiB3aXRoIFBTQ0kgcmV0dXJuIHZhbHVlIElOVEVSTkFMX0ZBSUxVUkUuCisJCSAqLworCQl2YWwgPSBQU0NJX1JFVF9JTlRFUk5BTF9GQUlMVVJFOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqdmNwdV9yZWcodmNwdSwgMCkgPSB2YWw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrdm1fcHNjaV8wXzFfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBwc2NpX2ZuID0gKnZjcHVfcmVnKHZjcHUsIDApICYgfigodTMyKSAwKTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTEwMywyMCArMjc1LDQ1IEBACiAJc3dpdGNoIChwc2NpX2ZuKSB7CiAJY2FzZSBLVk1fUFNDSV9GTl9DUFVfT0ZGOgogCQlrdm1fcHNjaV92Y3B1X29mZih2Y3B1KTsKLQkJdmFsID0gS1ZNX1BTQ0lfUkVUX1NVQ0NFU1M7CisJCXZhbCA9IFBTQ0lfUkVUX1NVQ0NFU1M7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1BTQ0lfRk5fQ1BVX09OOgogCQl2YWwgPSBrdm1fcHNjaV92Y3B1X29uKHZjcHUpOwogCQlicmVhazsKIAljYXNlIEtWTV9QU0NJX0ZOX0NQVV9TVVNQRU5EOgogCWNhc2UgS1ZNX1BTQ0lfRk5fTUlHUkFURToKLQkJdmFsID0gS1ZNX1BTQ0lfUkVUX05JOworCQl2YWwgPSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEOwogCQlicmVhazsKLQogCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJKnZjcHVfcmVnKHZjcHUsIDApID0gdmFsOwotCXJldHVybiB0cnVlOworCXJldHVybiAxOworfQorCisvKioKKyAqIGt2bV9wc2NpX2NhbGwgLSBoYW5kbGUgUFNDSSBjYWxsIGlmIHIwIHZhbHVlIGlzIGluIHJhbmdlCisgKiBAdmNwdTogUG9pbnRlciB0byB0aGUgVkNQVSBzdHJ1Y3QKKyAqCisgKiBIYW5kbGUgUFNDSSBjYWxscyBmcm9tIGd1ZXN0cyB0aHJvdWdoIHRyYXBzIGZyb20gSFZDIGluc3RydWN0aW9ucy4KKyAqIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaXMgc2ltaWxhciB0byBTTUMgY2FsbHMgdG8gdGhlIHNlY3VyZSB3b3JsZAorICogd2hlcmUgdGhlIGZ1bmN0aW9uIG51bWJlciBpcyBwbGFjZWQgaW4gcjAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zOiA+IDAgKHN1Y2Nlc3MpLCAwIChzdWNjZXNzIGJ1dCBleGl0IHRvIHVzZXIKKyAqIHNwYWNlKSwgYW5kIDwgMCAoZXJyb3JzKQorICoKKyAqIEVycm9yczoKKyAqIC1FSU5WQUw6IFVucmVjb2duaXplZCBQU0NJIGZ1bmN0aW9uCisgKi8KK2ludCBrdm1fcHNjaV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzd2l0Y2ggKGt2bV9wc2NpX3ZlcnNpb24odmNwdSkpIHsKKwljYXNlIEtWTV9BUk1fUFNDSV8wXzI6CisJCXJldHVybiBrdm1fcHNjaV8wXzJfY2FsbCh2Y3B1KTsKKwljYXNlIEtWTV9BUk1fUFNDSV8wXzE6CisJCXJldHVybiBrdm1fcHNjaV8wXzFfY2FsbCh2Y3B1KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCBiMmQyY2Y0Li40NWI1NWUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtMTY3LDcgKzE2Nyw2IEBACiAJc2VsZWN0IEhBVkVfQVQ5MV9EQkdVMAogCXNlbGVjdCBIQVZFX0ZCX0FUTUVMCiAJc2VsZWN0IFNPQ19BVDkxU0FNOQotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCiAJc2VsZWN0IEhBVkVfQVQ5MV9VVE1JCiAJc2VsZWN0IEhBVkVfQVQ5MV9TTUQKIAlzZWxlY3QgSEFWRV9BVDkxX1VTQl9DTEsKQEAgLTE4Myw3ICsxODIsNiBAQAogCXNlbGVjdCBIQVZFX0FUOTFfREJHVTAKIAlzZWxlY3QgSEFWRV9GQl9BVE1FTAogCXNlbGVjdCBTT0NfQVQ5MVNBTTkKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwogCXNlbGVjdCBIQVZFX0FUOTFfVVNCX0NMSwogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOU4xMiBTb0MuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKaW5kZXggZjNmMTlmMi4uM2Y0YmI1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC0yNSw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkyMyw3ICs5MjUsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMCwKIAkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTk2Miw3ICs5NjMsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvZF9sb29rdXBfdGFibGUgdWFydDBfZ3Bpb3NfdGFibGUgPSB7CisJLmRldl9pZCA9ICJhdG1lbF91c2FydCIsCisJLnRhYmxlID0geworCQlHUElPX0xPT0tVUCgicGlvQSIsIDIxLCAicnRzIiwgR1BJT19BQ1RJVkVfTE9XKSwKKwkJeyB9LAorCX0sCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtOTkzLDcgKzEwMDEsNyBAQAogCQkgKiBXZSBuZWVkIHRvIGRyaXZlIHRoZSBwaW4gbWFudWFsbHkuIFRoZSBzZXJpYWwgZHJpdmVyIHdpbGwgZHJpdmVyCiAJCSAqIHRoaXMgdG8gaGlnaCB3aGVuIGluaXRpYWxpemluZy4KIAkJICovCi0JCXVhcnQwX2RhdGEucnRzX2dwaW8gPSBBVDkxX1BJTl9QQTIxOworCQlncGlvZF9hZGRfbG9va3VwX3RhYmxlKCZ1YXJ0MF9ncGlvc190YWJsZSk7CiAJfQogfQogCkBAIC0xMDEzLDcgKzEwMjEsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtMTA2NSw3ICsxMDcyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTExMDksNyArMTExNSw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0M19kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwppbmRleCA3Y2Q2ZjE5Li5lZjg4ZTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKQEAgLTI0LDEyICsyNCwxMSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjBfbWF0cml4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX2FkYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFVTQiBIb3N0CkBAIC04MjAsNyArODE5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDAsCiAJLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLwotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC04NTksNyArODU3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTkxMSw3ICs5MDgsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtOTU1LDcgKzk1MSw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC05OTksNyArOTk0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQzX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTEwNDMsNyArMTAzNyw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0NF9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDRfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0xMDgyLDcgKzEwNzUsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDVfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQ1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtMTMyNSwxMyArMTMxNyw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfcmVnX2Rlc2MgYXQ5MV9hZGNfcmVnaXN0ZXJfZzIwID0gewotCS5jaGFubmVsX2Jhc2UgPSBBVDkxX0FEQ19DSFIoMCksCi0JLmRyZHlfbWFzayA9IEFUOTFfQURDX0RSRFksCi0JLnN0YXR1c19yZWdpc3RlciA9IEFUOTFfQURDX1NSLAotCS50cmlnZ2VyX3JlZ2lzdGVyID0gQVQ5MV9BRENfTVIsCi19OwotCiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWRjKHN0cnVjdCBhdDkxX2FkY19kYXRhICpkYXRhKQogewogCWlmICghZGF0YSkKQEAgLTEzNDksOSArMTMzNCw3IEBACiAJaWYgKGRhdGEtPnVzZV9leHRlcm5hbF90cmlnZ2VycykKIAkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMCk7CiAKLQlkYXRhLT5udW1fY2hhbm5lbHMgPSA0OwogCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDEwOwotCWRhdGEtPnJlZ2lzdGVycyA9ICZhdDkxX2FkY19yZWdpc3Rlcl9nMjA7CiAJZGF0YS0+dHJpZ2dlcl9udW1iZXIgPSA0OwogCWRhdGEtPnRyaWdnZXJfbGlzdCA9IGF0OTFfYWRjX3RyaWdnZXJzOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYwppbmRleCA4MGUzNTg5Li4yOWJhYWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFVTQiBIb3N0CkBAIC04ODEsNyArODgxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDAsCiAJLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLwotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC05MjAsNyArOTE5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTk2NCw3ICs5NjIsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtMTAwOCw3ICsxMDA1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCmluZGV4IDQzZDUzZDYuLjMwOTM5MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzI1LDcgKzEzMjYsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMCwKIAkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTEzNjQsNyArMTM2NCw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0xNDA4LDcgKzE0MDcsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtMTQ1Miw3ICsxNDUwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMKaW5kZXggNWU2ZjQ5OC4uOWQzZDU0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMKQEAgLTE4Miw3ICsxODIsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgYWRjX29wX2NsayA9IHsKIAkubmFtZQkJPSAiYWRjX29wX2NsayIsCiAJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLQkucmF0ZV9oegk9IDEzMjAwMDAwLAorCS5yYXRlX2h6CT0gMzAwMDAwLAogfTsKIAogLyogQUVTL1RERVMvU0hBIGNsb2NrIC0gT25seSBmb3Igc2FtOW0xMS9zYW05ZzU2ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwppbmRleCBkYWIzNjJjLi4zOTFhYjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KIAotI2luY2x1ZGUgPG1hY2gvYXQ5MV9hZGMuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NV9tYXRyaXguaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfbWF0cml4Lmg+CkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMzMsNTggKzExMzMsNyBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVG91Y2hzY3JlZW4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BVE1FTF9UU0FEQ0MpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX1RTQURDQ19NT0RVTEUpCi1zdGF0aWMgdTY0IHRzYWRjY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV90c2FkY2NfZGF0YSB0c2FkY2NfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0c2FkY2NfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RTQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVFNDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFNDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UU0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3RzYWRjY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RzYWRjYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdHNhZGNjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdHNhZGNjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0c2FkY2NfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0c2FkY2NfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90c2FkY2Moc3RydWN0IGF0OTFfdHNhZGNjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjAsIDApOwkvKiBBRDBfWFIgKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjEsIDApOwkvKiBBRDFfWEwgKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjIsIDApOwkvKiBBRDJfWVQgKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjMsIDApOwkvKiBBRDNfVEIgKi8KLQotCXRzYWRjY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90c2FkY2NfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKHN0cnVjdCBhdDkxX3RzYWRjY19kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBREMKKyAqICBBREMgYW5kIHRvdWNoc2NyZWVuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQVQ5MV9BREMpCkBAIC0xMjM2LDEzICsxMTg1LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBhdDkxX2FkY19yZWdfZGVzYyBhdDkxX2FkY19yZWdpc3Rlcl9nNDUgPSB7Ci0JLmNoYW5uZWxfYmFzZSA9IEFUOTFfQURDX0NIUigwKSwKLQkuZHJkeV9tYXNrID0gQVQ5MV9BRENfRFJEWSwKLQkuc3RhdHVzX3JlZ2lzdGVyID0gQVQ5MV9BRENfU1IsCi0JLnRyaWdnZXJfcmVnaXN0ZXIgPSAweDA4LAotfTsKLQogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpCkBAIC0xMjY4LDkgKzEyMTAsNyBAQAogCWlmIChkYXRhLT51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMpCiAJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMjgsIDApOwogCi0JZGF0YS0+bnVtX2NoYW5uZWxzID0gODsKIAlkYXRhLT5zdGFydHVwX3RpbWUgPSA0MDsKLQlkYXRhLT5yZWdpc3RlcnMgPSAmYXQ5MV9hZGNfcmVnaXN0ZXJfZzQ1OwogCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKIAlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKIApAQCAtMTU4OCw3ICsxNTI4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDAsCiAJLnVzZV9kbWFfcngJPSAwLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0xNjI3LDcgKzE1NjYsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtMTY3MSw3ICsxNjA5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTE3MTUsNyArMTY1Miw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0xNzU5LDcgKzE2OTUsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQzX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05bjEyLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYwppbmRleCBmMmVhN2IwLi5jODk4OGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTluMTIuYwpAQCAtMTksOSArMTksMTAgQEAKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgInNhbTlfc21jLmgiCiAKKyNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCisjaW5jbHVkZSAiY2xvY2suaCIKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQ2xvY2tzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjE1LDYgKzIxNiw5IEBACiAJCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKIAogfQorI2Vsc2UKKyNkZWZpbmUgYXQ5MXNhbTluMTJfcmVnaXN0ZXJfY2xvY2tzIE5VTEwKKyNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05TjEyIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKaW5kZXggNTdmMTJkOC4uYTc5OTYwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jCkBAIC0xNTMsNiArMTUzLDExIEBACiAJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX0FDOTdDLAogCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCiB9Oworc3RhdGljIHN0cnVjdCBjbGsgYWRjX29wX2NsayA9IHsKKwkubmFtZQkJPSAiYWRjX29wX2NsayIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKKwkucmF0ZV9oegk9IDEwMDAwMDAsCit9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CiAJJnBpb0FfY2xrLApAQCAtMTc4LDYgKzE4Myw3IEBACiAJJnVkcGhzX2NsaywKIAkmbGNkY19jbGssCiAJJmFjOTdfY2xrLAorCSZhZGNfb3BfY2xrLAogCS8vIGlycTAKIH07CiAKQEAgLTIxNiw2ICsyMjIsNyBAQAogCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjYwMC5ncGlvIiwgJnBpb0JfY2xrKSwKIAlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DX2NsayksCiAJQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvRF9jbGspLAorCUNMS0RFVl9DT05fSUQoImFkY19jbGsiLCAmdHNjX2NsayksCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdXNhcnRfY2xvY2tzX2xvb2t1cHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwppbmRleCA0MjhmYzQxLi4wYjFkNzFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCkBAIC0yMyw5ICsyMywxMSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLWF0bWVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgogCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDgsMTQgKzYxMCwxMyBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVG91Y2hzY3JlZW4KKyAqICBBREMgYW5kIFRvdWNoc2NyZWVuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfVFNBRENDKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BVE1FTF9UU0FEQ0NfTU9EVUxFKQotc3RhdGljIHU2NCB0c2FkY2NfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0OTFfdHNhZGNjX2RhdGEgdHNhZGNjX2RhdGE7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfQVQ5MV9BREMpCitzdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgYWRjX2RhdGE7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHNhZGNjX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZGNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVFNDLAogCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1RTQyArIFNaXzE2SyAtIDEsCkBAIC02MjgsMzYgKzYyOSw3MSBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdHNhZGNjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdHNhZGNjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ0c2FkY2NfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ0c2FkY2NfZGF0YSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfYWRjX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiYXQ5MXNhbTlybC1hZGMiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmFkY19kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gdHNhZGNjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHNhZGNjX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gYWRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGFkY19yZXNvdXJjZXMpLAogfTsKIAotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RzYWRjYyhzdHJ1Y3QgYXQ5MV90c2FkY2NfZGF0YSAqZGF0YSkKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfdHJpZ2dlciBhdDkxX2FkY190cmlnZ2Vyc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAiZXh0ZXJuYWwtcmlzaW5nIiwKKwkJLnZhbHVlID0gMSwKKwkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgPSAiZXh0ZXJuYWwtZmFsbGluZyIsCisJCS52YWx1ZSA9IDIsCisJCS5pc19leHRlcm5hbCA9IHRydWUsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lID0gImV4dGVybmFsLWFueSIsCisJCS52YWx1ZSA9IDMsCisJCS5pc19leHRlcm5hbCA9IHRydWUsCisJfSwKKwlbM10gPSB7CisJCS5uYW1lID0gImNvbnRpbnVvdXMiLAorCQkudmFsdWUgPSA2LAorCQkuaXNfZXh0ZXJuYWwgPSBmYWxzZSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIAotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDApOwkvKiBBRDBfWFIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogQUQxX1hMICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMCk7CS8qIEFEMl9ZVCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDApOwkvKiBBRDNfVEIgKi8KKwlpZiAodGVzdF9iaXQoMCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsKKwlpZiAodGVzdF9iaXQoMSwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsKKwlpZiAodGVzdF9iaXQoMiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsKKwlpZiAodGVzdF9iaXQoMywgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsKKwlpZiAodGVzdF9iaXQoNCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOworCWlmICh0ZXN0X2JpdCg1LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7CiAKLQl0c2FkY2NfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF90c2FkY2NfZGV2aWNlKTsKKwlpZiAoZGF0YS0+dXNlX2V4dGVybmFsX3RyaWdnZXJzKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsKKworCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDQwOworCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKKwlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKKworCWFkY19kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2FkY19kZXZpY2UpOwogfQogI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90c2FkY2Moc3RydWN0IGF0OTFfdHNhZGNjX2RhdGEgKmRhdGEpIHt9Cit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWRjKHN0cnVjdCBhdDkxX2FkY19kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBSVEMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC05NTcsNyArOTkzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDAsCiAJLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLwotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC05OTYsNyArMTAzMSw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0xMDQ4LDcgKzEwODIsNiBAQAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKIAkudXNlX2RtYV90eAk9IDEsCiAJLnVzZV9kbWFfcngJPSAxLAotCS5ydHNfZ3Bpbwk9IC1FSU5WQUwsCiB9OwogCiBzdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtMTA5Miw3ICsxMTI1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7CiAJLnVzZV9kbWFfdHgJPSAxLAogCS51c2VfZG1hX3J4CT0gMSwKLQkucnRzX2dwaW8JPSAtRUlOVkFMLAogfTsKIAogc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTExMzYsNyArMTE2OCw2IEBACiBzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0M19kYXRhID0gewogCS51c2VfZG1hX3R4CT0gMSwKIAkudXNlX2RtYV9yeAk9IDEsCi0JLnJ0c19ncGlvCT0gLUVJTlZBTCwKIH07CiAKIHN0YXRpYyB1NjQgdWFydDNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTl4NS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYwppbmRleCA5YWQ3ODFkLi4wMjgyNjhmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTl4NS5jCkBAIC0xOSw5ICsxOSwxMCBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKIAorI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKKyNpbmNsdWRlICJjbG9jay5oIgogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBDbG9ja3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMTMsNiArMzE0LDkgQEAKIAljbGtfcmVnaXN0ZXIoJnBjazApOwogCWNsa19yZWdpc3RlcigmcGNrMSk7CiB9CisjZWxzZQorI2RlZmluZSBhdDkxc2FtOXg1X3JlZ2lzdGVyX2Nsb2NrcwlOVUxMCisjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOXg1IHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLTFhcm0uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMKaW5kZXggMzVhYjYzMi4uM2Y2ZGJjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLTFhcm0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLQorI2luY2x1ZGUgImdwaW8uaCIKIAogc3RhdGljIHZvaWQgX19pbml0IG9uZWFybV9pbml0X2Vhcmx5KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCmluZGV4IGY5NWUzMWMuLjU5N2M2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogc3RhdGljIHZvaWQgX19pbml0IGFmZWI5MjYwX2luaXRfZWFybHkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKaW5kZXggMTEyZTg2Ny4uYTMwNTAyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdwaW8uaCIKIAogCiBzdGF0aWMgdm9pZCBfX2luaXQgY2FtNjBfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMKaW5kZXggOTI5ODMwNS4uNDczMTNkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogc3RhdGljIHZvaWQgX19pbml0IGNhcm1ldmFfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdTlrcmVhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwppbmRleCAwMDg1MjdlLi4yMDM3Zjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfaW5pdF9lYXJseSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdWF0OTEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKaW5kZXggNDJmMTM1My4uYzA5NDM1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdWF0OTEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCisKIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHVhdDkxX2xlZHNbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKaW5kZXggZTVmZGUyMTUuLjBlMzVhNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotCisjaW5jbHVkZSAiZ3Bpby5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgY3NiMzM3X2luaXRfZWFybHkodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYwppbmRleCBmZGYxMTA2Li4xOGQwMjdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogc3RhdGljIHZvaWQgX19pbml0IGNzYjYzN19pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKaW5kZXggZjliZTgxNi4uYWE0NTdhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViOTIwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlYjkyMDBfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjYmF0OTEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY2JhdDkxLmMKaW5kZXggYjJmY2Q3MS4uZWRlMTM3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjYmF0OTEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogc3RhdGljIHZvaWQgX19pbml0IGVjYl9hdDkxaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjbzkyMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjbzkyMC5jCmluZGV4IDc3ZGU0MTAuLjRlNzUzMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNvOTIwLmMKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdwaW8uaCIKKwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZWNvOTIwX2luaXRfZWFybHkodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1mbGV4aWJpdHkuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1mbGV4aWJpdHkuYwppbmRleCA3MzdjMDg1Li42OGYxYWI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWZsZXhpYml0eS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmbGV4aWJpdHlfaW5pdF9lYXJseSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWZveGcyMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWZveGcyMC5jCmluZGV4IGMyMGE4NzAuLjhiMjJjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1mb3hnMjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZm94ZzIwLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdwaW8uaCIKIAogLyoKICAqIFRoZSBGT1ggQm9hcmQgRzIwIGhhcmR3YXJlIGNvbWVzIGFzIHRoZSAiTmV0dXMgRzIwIiBib2FyZCB3aXRoCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZ3NpYTE4cy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYwppbmRleCA0MTZiYWU4Li5iNzI5ZGQxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZ3NpYTE4cy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImdzaWExOHMuaCIKICNpbmNsdWRlICJzdGFtcDlnMjAuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2luaXRfZWFybHkodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYWZhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCmluZGV4IDg4ZTJmNWQuLjkzYjFkZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYWZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWthZmEuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBrYWZhX2luaXRfZWFybHkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYjkyMDIuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYjkyMDIuYwppbmRleCAwYzUxOWQ5Li5kNThkMzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2I5MjAyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogc3RhdGljIHZvaWQgX19pbml0IGtiOTIwMl9pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMKaW5kZXggNWYyNWZhNS4uYjQ4ZDk1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBjb250cm9sLWcyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1wY29udHJvbC1nMjAuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgInN0YW1wOWcyMC5oIgorI2luY2x1ZGUgImdwaW8uaCIKIAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNvbnRyb2xfZzIwX2luaXRfZWFybHkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1waWNvdHV4MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCmluZGV4IGFiMmIyZWMuLjJjMGYyZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1waWNvdHV4MjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBpY290dXgyMDAuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwaWNvdHV4MjAwX2luaXRfZWFybHkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1ybTkyMDBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMKaW5kZXggOGIxN2RhZC4uOTUzY2VhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdwaW8uaCIKIAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJzaS1ld3MuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1yc2ktZXdzLmMKaW5kZXggZjZkN2YxOS4uZjI4ZThiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJzaS1ld3MuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcnNpLWV3cy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCByc2lfZXdzX2luaXRfZWFybHkodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOS1sOTI2MC5jCmluZGV4IDQzZWU0ZGMuLmQyNGRkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTktbDkyNjAuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKaW5kZXggZjRmODczNS4uNjVkZWExMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKaW5kZXggNDczNTQ2Yi4uNDYzNzQzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKaW5kZXggMmY5MzE5MS4uY2QyNzI2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKaW5kZXggZjljZDFmMi4uZTFiZTZlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAvKgogICogYm9hcmQgcmV2aXNpb24gZW5jb2RpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYwppbmRleCBlZjM5MDc4Li4xZWE2MTMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJzYW05X3NtYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKQEAgLTMwMCwyMSArMzAxLDEzIEBACiAKIAogLyoKLSAqIFRvdWNoc2NyZWVuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV90c2FkY2NfZGF0YSBla190c2FkY2NfZGF0YSA9IHsKLQkuYWRjX2Nsb2NrCQk9IDMwMDAwMCwKLQkucGVuZGV0X2RlYm91bmNlCT0gMHgwZCwKLQkudHNfc2FtcGxlX2hvbGRfdGltZQk9IDB4MGEsCi19OwotCi0vKgotICogQURDcworICogQURDcyBhbmQgdG91Y2hzY3JlZW4KICAqLwogc3RhdGljIHN0cnVjdCBhdDkxX2FkY19kYXRhIGVrX2FkY19kYXRhID0gewogCS5jaGFubmVsc191c2VkID0gQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpIHwgQklUKDQpIHwgQklUKDUpIHwgQklUKDYpIHwgQklUKDcpLAogCS51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMgPSB0cnVlLAogCS52cmVmID0gMzMwMCwKKwkudG91Y2hzY3JlZW5fdHlwZSA9IEFUTUVMX0FEQ19UT1VDSFNDUkVFTl80V0lSRSwKIH07CiAKIC8qCkBAIC00ODUsOSArNDc4LDcgQEAKIAlhdDkxX2FkZF9kZXZpY2VfaXNpKCZpc2lfZGF0YSwgdHJ1ZSk7CiAJLyogTENEIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfbGNkYygmZWtfbGNkY19kYXRhKTsKLQkvKiBUb3VjaCBTY3JlZW4gKi8KLQlhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKCZla190c2FkY2NfZGF0YSk7Ci0JLyogQURDICovCisJLyogQURDIGFuZCB0b3VjaHNjcmVlbiAqLwogCWF0OTFfYWRkX2RldmljZV9hZGMoJmVrX2FkY19kYXRhKTsKIAkvKiBQdXNoIEJ1dHRvbnMgKi8KIAlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggNjA0ZWVjZi4uYjY0NjQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXQ5MV9hZGMuaD4KIAogI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KIApAQCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCkBAIC0yMjksMTIgKzIzMSwxMyBAQAogCiAKIC8qCi0gKiBUb3VjaHNjcmVlbgorICogQURDICsgVG91Y2hzY3JlZW4KICAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3RzYWRjY19kYXRhIGVrX3RzYWRjY19kYXRhID0gewotCS5hZGNfY2xvY2sJCT0gMTAwMDAwMCwKLQkucGVuZGV0X2RlYm91bmNlCT0gMHgwZiwKLQkudHNfc2FtcGxlX2hvbGRfdGltZQk9IDB4MDMsCitzdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgZWtfYWRjX2RhdGEgPSB7CisJLmNoYW5uZWxzX3VzZWQgPSBCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSksCisJLnVzZV9leHRlcm5hbF90cmlnZ2VycyA9IHRydWUsCisJLnZyZWYgPSAzMzAwLAorCS50b3VjaHNjcmVlbl90eXBlID0gQVRNRUxfQURDX1RPVUNIU0NSRUVOXzRXSVJFLAogfTsKIAogCkBAIC0zMTAsOCArMzEzLDggQEAKIAlhdDkxX2FkZF9kZXZpY2VfbGNkYygmZWtfbGNkY19kYXRhKTsKIAkvKiBBQzk3ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmVrX2FjOTdfZGF0YSk7Ci0JLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKCZla190c2FkY2NfZGF0YSk7CisJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKyBBREMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfYWRjKCZla19hZGNfZGF0YSk7CiAJLyogTEVEcyAqLwogCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwogCS8qIFB1c2ggQnV0dG9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc25hcHBlcjkyNjAuYwppbmRleCBmMWQ0OWU5Li4xYjg3MGU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc25hcHBlcjkyNjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc25hcHBlcjkyNjAuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAjZGVmaW5lIFNOQVBQRVI5MjYwX0lPX0VYUF9HUElPKHgpCShOUl9CVUlMVElOX0dQSU8gKyAoeCkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zdGFtcDlnMjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zdGFtcDlnMjAuYwppbmRleCBlNGE1YWMxLi4zYjU3NTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXN0YW1wOWcyMC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJzYW05X3NtYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogdm9pZCBfX2luaXQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC15bC05MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQteWwtOTIwMC5jCmluZGV4IGJlMDgzNzcuLjQ2ZmRiMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC15bC05MjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAKIHN0YXRpYyB2b2lkIF9faW5pdCB5bDkyMDBfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaAppbmRleCA2YzA4YjM0Li40ZTc3M2I1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaApAQCAtMTE4LDkgKzExOCw2IEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2lzaShzdHJ1Y3QgaXNpX3BsYXRmb3JtX2RhdGEgKmRhdGEsCiAJCWJvb2wgdXNlX3Bja19hc19tY2spOwogCi0gLyogVG91Y2hzY3JlZW4gQ29udHJvbGxlciAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90c2FkY2Moc3RydWN0IGF0OTFfdHNhZGNjX2RhdGEgKmRhdGEpOwotCiAvKiBDQU4gKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2FuKHN0cnVjdCBhdDkxX2Nhbl9kYXRhICpkYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKaW5kZXggYTVhZmNmNy4uZDNmMDVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxX3Bpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImdwaW8uaCIKIAogI2RlZmluZSBNQVhfTkJfR1BJT19QRVJfQkFOSwkzMgogCkBAIC00OSw2ICs1MCw3IEBACiBzdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKIHN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKIHN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOworc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwogc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKIHN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLApAQCAtNjAsNiArNjIsNyBAQAogCQkuY2hpcCA9IHsJCQkJCQlcCiAJCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKIAkJCS5yZXF1ZXN0CSAgPSBhdDkxX2dwaW9saWJfcmVxdWVzdCwJXAorCQkJLmdldF9kaXJlY3Rpb24gICAgPSBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbiwgXAogCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LCBcCiAJCQkuZGlyZWN0aW9uX291dHB1dCA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCiAJCQkuZ2V0CQkgID0gYXQ5MV9ncGlvbGliX2dldCwJCVwKQEAgLTc5OSw2ICs4MDIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIG9zcjsKKworCW9zciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19PU1IpOworCXJldHVybiAhKG9zciAmIG1hc2spOworfQorCiBzdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKIAkJCQkJdW5zaWduZWQgb2Zmc2V0KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oCmluZGV4IDVmYzIzNzcuLmVlZDQ2NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmgKQEAgLTIwOSwxNCArMjA5LDYgQEAKIGV4dGVybiB2b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19QSU5DVFJMX0FUOTEKLWV4dGVybiB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCk7Ci1leHRlcm4gdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCkge30KLSNlbmRpZgotCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2FkYy5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2FkYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjg3MzA3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9hZGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2FkYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCi0gKgotICogQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyIChBREMpIHJlZ2lzdGVycy4KLSAqIEJhc2VkIG9uIEFUOTFTQU05MjYwIGRhdGFzaGVldCByZXZpc2lvbiBELgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBBVDkxX0FEQ19ICi0jZGVmaW5lIEFUOTFfQURDX0gKLQotI2RlZmluZSBBVDkxX0FEQ19DUgkJMHgwMAkJLyogQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9BRENfU1dSU1QJCSgxIDw8IDApCS8qIFNvZnR3YXJlIFJlc2V0ICovCi0jZGVmaW5lCQlBVDkxX0FEQ19TVEFSVAkJKDEgPDwgMSkJLyogU3RhcnQgQ29udmVyc2lvbiAqLwotCi0jZGVmaW5lIEFUOTFfQURDX01SCQkweDA0CQkvKiBNb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX0FEQ19UUkdFTgkJKDEgPDwgMCkJLyogVHJpZ2dlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfQURDX1RSR1NFTAkJKDcgPDwgMSkJLyogVHJpZ2dlciBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCQlBVDkxX0FEQ19UUkdTRUxfVEMwCQkoMCA8PCAxKQotI2RlZmluZQkJCUFUOTFfQURDX1RSR1NFTF9UQzEJCSgxIDw8IDEpCi0jZGVmaW5lCQkJQVQ5MV9BRENfVFJHU0VMX1RDMgkJKDIgPDwgMSkKLSNkZWZpbmUJCQlBVDkxX0FEQ19UUkdTRUxfRVhURVJOQUwJKDYgPDwgMSkKLSNkZWZpbmUJCUFUOTFfQURDX0xPV1JFUwkJKDEgPDwgNCkJLyogTG93IFJlc29sdXRpb24gKi8KLSNkZWZpbmUJCUFUOTFfQURDX1NMRUVQCQkoMSA8PCA1KQkvKiBTbGVlcCBNb2RlICovCi0jZGVmaW5lCQlBVDkxX0FEQ19QUkVTQ0FMXzkyNjAJKDB4M2YgPDwgOCkJLyogUHJlc2NhbGFyIFJhdGUgU2VsZWN0aW9uICovCi0jZGVmaW5lCQlBVDkxX0FEQ19QUkVTQ0FMXzlHNDUJKDB4ZmYgPDwgOCkKLSNkZWZpbmUJCQlBVDkxX0FEQ19QUkVTQ0FMXyh4KQkoKHgpIDw8IDgpCi0jZGVmaW5lCQlBVDkxX0FEQ19TVEFSVFVQXzkyNjAJKDB4MWYgPDwgMTYpCS8qIFN0YXJ0dXAgVXAgVGltZSAqLwotI2RlZmluZQkJQVQ5MV9BRENfU1RBUlRVUF85RzQ1CSgweDdmIDw8IDE2KQotI2RlZmluZQkJQVQ5MV9BRENfU1RBUlRVUF85WDUJKDB4ZiA8PCAxNikKLSNkZWZpbmUJCQlBVDkxX0FEQ19TVEFSVFVQXyh4KQkoKHgpIDw8IDE2KQotI2RlZmluZQkJQVQ5MV9BRENfU0hUSU0JCSgweGYgIDw8IDI0KQkvKiBTYW1wbGUgJiBIb2xkIFRpbWUgKi8KLSNkZWZpbmUJCQlBVDkxX0FEQ19TSFRJTV8oeCkJKCh4KSA8PCAyNCkKLQotI2RlZmluZSBBVDkxX0FEQ19DSEVSCQkweDEwCQkvKiBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FEQ19DSERSCQkweDE0CQkvKiBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BRENfQ0hTUgkJMHgxOAkJLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfQURDX0NIKG4pCQkoMSA8PCAobikpCS8qIENoYW5uZWwgTnVtYmVyICovCi0KLSNkZWZpbmUgQVQ5MV9BRENfU1IJCTB4MUMJCS8qIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9BRENfRU9DKG4pCQkoMSA8PCAobikpCS8qIEVuZCBvZiBDb252ZXJzaW9uIG9uIENoYW5uZWwgTiAqLwotI2RlZmluZQkJQVQ5MV9BRENfT1ZSRShuKQkoMSA8PCAoKG4pICsgOCkpLyogT3ZlcnJ1biBFcnJvciBvbiBDaGFubmVsIE4gKi8KLSNkZWZpbmUJCUFUOTFfQURDX0RSRFkJCSgxIDw8IDE2KQkvKiBEYXRhIFJlYWR5ICovCi0jZGVmaW5lCQlBVDkxX0FEQ19HT1ZSRQkJKDEgPDwgMTcpCS8qIEdlbmVyYWwgT3ZlcnJ1biBFcnJvciAqLwotI2RlZmluZQkJQVQ5MV9BRENfRU5EUlgJCSgxIDw8IDE4KQkvKiBFbmQgb2YgUlggQnVmZmVyICovCi0jZGVmaW5lCQlBVDkxX0FEQ19SWEZVRkYJCSgxIDw8IDE5KQkvKiBSWCBCdWZmZXIgRnVsbCAqLwotCi0jZGVmaW5lIEFUOTFfQURDX1NSXzlYNQkJMHgzMAkJLyogU3RhdHVzIFJlZ2lzdGVyIGZvciA5eDUgKi8KLSNkZWZpbmUJCUFUOTFfQURDX1NSX0RSRFlfOVg1CSgxIDw8IDI0KQkvKiBEYXRhIFJlYWR5ICovCi0KLSNkZWZpbmUgQVQ5MV9BRENfTENEUgkJMHgyMAkJLyogTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9BRENfTERBVEEJCSgweDNmZikKLQotI2RlZmluZSBBVDkxX0FEQ19JRVIJCTB4MjQJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BRENfSURSCQkweDI4CQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FEQ19JTVIJCTB4MkMJCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX0FEQ19JRVJfUEVOCSgxIDw8IDI5KQotI2RlZmluZQkJQVQ5MV9BRENfSUVSX05PUEVOCSgxIDw8IDMwKQotI2RlZmluZQkJQVQ5MV9BRENfSUVSX1hSRFkJKDEgPDwgMjApCi0jZGVmaW5lCQlBVDkxX0FEQ19JRVJfWVJEWQkoMSA8PCAyMSkKLSNkZWZpbmUJCUFUOTFfQURDX0lFUl9QUkRZCSgxIDw8IDIyKQotI2RlZmluZQkJQVQ5MV9BRENfSVNSX1BFTlMJKDEgPDwgMzEpCi0KLSNkZWZpbmUgQVQ5MV9BRENfQ0hSKG4pCQkoMHgzMCArICgobikgKiA0KSkJLyogQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIE4gKi8KLSNkZWZpbmUJCUFUOTFfQURDX0RBVEEJCSgweDNmZikKLQotI2RlZmluZSBBVDkxX0FEQ19DRFIwXzlYNQkoMHg1MCkJCQkvKiBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCBmb3IgOVg1ICovCi0KLSNkZWZpbmUgQVQ5MV9BRENfQUNSCQkweDk0CS8qIEFuYWxvZyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX0FEQ19BQ1JfUEVOREVUU0VOUwkoMHgzIDw8IDApCS8qIHB1bGwtdXAgcmVzaXN0b3IgKi8KLQotI2RlZmluZSBBVDkxX0FEQ19UU01SCQkweEIwCi0jZGVmaW5lCQlBVDkxX0FEQ19UU01SX1RTTU9ERQkoMyA8PCAwKQkvKiBUb3VjaCBTY3JlZW4gTW9kZSAqLwotI2RlZmluZQkJCUFUOTFfQURDX1RTTVJfVFNNT0RFX05PTkUJCSgwIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9BRENfVFNNUl9UU01PREVfNFdJUkVfTk9fUFJFU1MJKDEgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX0FEQ19UU01SX1RTTU9ERV80V0lSRV9QUkVTUwkoMiA8PCAwKQotI2RlZmluZQkJCUFUOTFfQURDX1RTTVJfVFNNT0RFXzVXSVJFCQkoMyA8PCAwKQotI2RlZmluZQkJQVQ5MV9BRENfVFNNUl9UU0FWCSgzIDw8IDQpCS8qIEF2ZXJhZ2VzIHNhbXBsZXMgKi8KLSNkZWZpbmUJCQlBVDkxX0FEQ19UU01SX1RTQVZfKHgpCQkoKHgpIDw8IDQpCi0jZGVmaW5lCQlBVDkxX0FEQ19UU01SX1NDVElNCSgweDBmIDw8IDE2KQkvKiBTd2l0Y2ggY2xvc3VyZSB0aW1lICovCi0jZGVmaW5lCQlBVDkxX0FEQ19UU01SX1BFTkRCQwkoMHgwZiA8PCAyOCkJLyogUGVuIERlYm91bmNlIHRpbWUgKi8KLSNkZWZpbmUJCQlBVDkxX0FEQ19UU01SX1BFTkRCQ18oeCkJKCh4KSA8PCAyOCkKLSNkZWZpbmUJCUFUOTFfQURDX1RTTVJfTk9UU0RNQQkoMSA8PCAyMikJLyogTm8gVG91Y2hzY3JlZW4gRE1BICovCi0jZGVmaW5lCQlBVDkxX0FEQ19UU01SX1BFTkRFVF9ESVMJKDAgPDwgMjQpCS8qIFBlbiBjb250YWN0IGRldGVjdGlvbiBkaXNhYmxlICovCi0jZGVmaW5lCQlBVDkxX0FEQ19UU01SX1BFTkRFVF9FTkEJKDEgPDwgMjQpCS8qIFBlbiBjb250YWN0IGRldGVjdGlvbiBlbmFibGUgKi8KLQotI2RlZmluZSBBVDkxX0FEQ19UU1hQT1NSCTB4QjQKLSNkZWZpbmUgQVQ5MV9BRENfVFNZUE9TUgkweEI4Ci0jZGVmaW5lIEFUOTFfQURDX1RTUFJFU1NSCTB4QkMKLQotI2RlZmluZSBBVDkxX0FEQ19UUkdSXzkyNjAJQVQ5MV9BRENfTVIKLSNkZWZpbmUgQVQ5MV9BRENfVFJHUl85RzQ1CTB4MDgKLSNkZWZpbmUgQVQ5MV9BRENfVFJHUl85WDUJMHhDMAotCi0vKiBUcmlnZ2VyIFJlZ2lzdGVyIGJpdCBmaWVsZCAqLwotI2RlZmluZQkJQVQ5MV9BRENfVFJHUl9UUkdQRVIJKDB4ZmZmZiA8PCAxNikKLSNkZWZpbmUJCQlBVDkxX0FEQ19UUkdSX1RSR1BFUl8oeCkJKCh4KSA8PCAxNikKLSNkZWZpbmUJCUFUOTFfQURDX1RSR1JfVFJHTU9ECSgweDcgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX0FEQ19UUkdSX01PRF9QRVJJT0RfVFJJRwkoNSA8PCAwKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBmMTdhYTMxLi41NjMzODI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xMDQsNSArMTA0LDIwIEBACiAvKiBDbG9ja3MgKi8KICNkZWZpbmUgQVQ5MV9TTE9XX0NMT0NLCQkzMjc2OAkJLyogc2xvdyBjbG9jayAqLwogCisvKgorICogRklYTUU6IHRoaXMgaXMgbmVlZGVkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhlIHBpbmN0cmwgZHJpdmVyIGFuZAorICogdGhlIFBNIGltcGxlbWVudGF0aW9uIGluIHRoZSBtYWNoaW5lLiBQb3NzaWJseSBwYXJ0IG9mIHRoZSBQTQorICogaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIG1vdmVkIGRvd24gaW50byB0aGUgcGluY3RybCBkcml2ZXIgYW5kIGdldAorICogY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGdlbmVyaWMgc3VzcGVuZC9yZXN1bWUgcGF0aC4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9BVDkxCitleHRlcm4gdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgYXQ5MV9waW5jdHJsX2dwaW9fcmVzdW1lKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19zdXNwZW5kKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9waW5jdHJsX2dwaW9fcmVzdW1lKHZvaWQpIHt9CisjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvbGVkcy5jCmluZGV4IDNlMjI5NzguLjc3YzRkOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2xlZHMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSAiYm9hcmQuaCIKKyNpbmNsdWRlICJncGlvLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwppbmRleCA4YmRhMWNlLi5lOTU1NTQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSAiZ3Bpby5oIgogCiAvKgogICogU2hvdyB0aGUgcmVhc29uIGZvciB0aGUgcHJldmlvdXMgc3lzdGVtIHJlc2V0LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1heHhpYS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1heHhpYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTdlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF4eGlhL0tjb25maWcKQEAgLTAsMCArMSwxNiBAQAorY29uZmlnIEFSQ0hfQVhYSUEKKwlib29sICJMU0kgQXh4aWEgcGxhdGZvcm1zIiBpZiAoQVJDSF9NVUxUSV9WNyAmJiBBUk1fTFBBRSkKKwlzZWxlY3QgQVJDSF9ETUFfQUREUl9UXzY0QklUCisJc2VsZWN0IEFSTV9BTUJBCisJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQVJNX1RJTUVSX1NQODA0CisJc2VsZWN0IEhBVkVfQVJNX0FSQ0hfVElNRVIKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQorCXNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0kKKwlzZWxlY3QgWk9ORV9ETUEKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExTSSBBeHhpYSBkZXZpY2VzLgorCisJICBUaGUgTFNJIEF4eGlhIHBsYXRmb3JtcyByZXF1aXJlIGEgRmxhdHRlbmVkIERldmljZSBUcmVlIHRvIGJlIHBhc3NlZAorCSAgdG8gdGhlIGtlcm5lbC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXh4aWEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWF4eGlhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGY2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF4eGlhL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLXkJCQkJKz0gYXh4aWEubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHBsYXRzbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1heHhpYS9heHhpYS5jIGIvYXJjaC9hcm0vbWFjaC1heHhpYS9heHhpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTVhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF4eGlhL2F4eGlhLmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIHRoZSBMU0kgQXh4aWEgU29DIGRldmljZXMgYmFzZWQgb24gQVJNIGNvcmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBMU0kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqYXh4aWFfZHRfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKKwkibHNpLGF4bTU1MTYiLAorCSJsc2ksYXhtNTUxNi1zaW0iLAorCSJsc2ksYXhtNTUxNi1lbXUiLAorCU5VTEwKK307CisKK0RUX01BQ0hJTkVfU1RBUlQoQVhYSUFfRFQsICJMU0kgQXh4aWEgQVhNNTVYWCIpCisJLmR0X2NvbXBhdCA9IGF4eGlhX2R0X21hdGNoLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXh4aWEvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1heHhpYS9wbGF0c21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5ZDRkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXh4aWEvcGxhdHNtcC5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF4eGlhL3BsYXRzbXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBMU0kgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisvKiBTeXNjb24gcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgcmVsZWFzaW5nIGNvcmVzIGZyb20gcmVzZXQgKi8KKyNkZWZpbmUgU0NfQ1JJVF9XUklURV9LRVkJMHgxMDAwCisjZGVmaW5lIFNDX1JTVF9DUFVfSE9MRAkJMHgxMDEwCisKKy8qCisgKiBXcml0ZSB0aGUga2VybmVsIGVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVcyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MKKyAqLworc3RhdGljIHZvaWQgd3JpdGVfcmVsZWFzZV9hZGRyKHUzMiByZWxlYXNlX3BoeXMpCit7CisJdTMyICp2aXJ0ID0gKHUzMiAqKSBwaHlzX3RvX3ZpcnQocmVsZWFzZV9waHlzKTsKKwl3cml0ZWxfcmVsYXhlZCh2aXJ0X3RvX3BoeXMoc2Vjb25kYXJ5X3N0YXJ0dXApLCB2aXJ0KTsKKwkvKiBNYWtlIHN1cmUgdGhpcyBzdG9yZSBpcyB2aXNpYmxlIHRvIG90aGVyIENQVXMgKi8KKwlzbXBfd21iKCk7CisJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHZpcnQsIHNpemVvZih1MzIpKTsKK30KKworc3RhdGljIGludCBheHhpYV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpzeXNjb25fbnA7CisJdm9pZCBfX2lvbWVtICpzeXNjb247CisJdTMyIHRtcDsKKworCXN5c2Nvbl9ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJsc2ksYXh4aWEtc3lzY29uIik7CisJaWYgKCFzeXNjb25fbnApCisJCXJldHVybiAtRU5PRU5UOworCisJc3lzY29uID0gb2ZfaW9tYXAoc3lzY29uX25wLCAwKTsKKwlpZiAoIXN5c2NvbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0bXAgPSByZWFkbChzeXNjb24gKyBTQ19SU1RfQ1BVX0hPTEQpOworCXdyaXRlbCgweGFiLCBzeXNjb24gKyBTQ19DUklUX1dSSVRFX0tFWSk7CisJdG1wICY9IH4oMSA8PCBjcHUpOworCXdyaXRlbCh0bXAsIHN5c2NvbiArIFNDX1JTVF9DUFVfSE9MRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGF4eGlhX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCWludCBjcHVfY291bnQgPSAwOworCWludCBjcHU7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzIGFjdHVhbGx5CisJICogcG9wdWxhdGVkIGF0IHRoZSBwcmVzZW50IHRpbWUuCisJICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCQl1MzIgcmVsZWFzZV9waHlzOworCisJCW5wID0gb2ZfZ2V0X2NwdV9ub2RlKGNwdSwgTlVMTCk7CisJCWlmICghbnApCisJCQljb250aW51ZTsKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiY3B1LXJlbGVhc2UtYWRkciIsICZyZWxlYXNlX3BoeXMpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNwdV9jb3VudCA8IG1heF9jcHVzKSB7CisJCQlzZXRfY3B1X3ByZXNlbnQoY3B1LCB0cnVlKTsKKwkJCWNwdV9jb3VudCsrOworCQl9CisKKwkJaWYgKHJlbGVhc2VfcGh5cyAhPSAwKQorCQkJd3JpdGVfcmVsZWFzZV9hZGRyKHJlbGVhc2VfcGh5cyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNtcF9vcGVyYXRpb25zIGF4eGlhX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKKwkuc21wX3ByZXBhcmVfY3B1cwk9IGF4eGlhX3NtcF9wcmVwYXJlX2NwdXMsCisJLnNtcF9ib290X3NlY29uZGFyeQk9IGF4eGlhX2Jvb3Rfc2Vjb25kYXJ5LAorfTsKK0NQVV9NRVRIT0RfT0ZfREVDTEFSRShheHhpYV9zbXAsICJsc2ksc3lzY29uLXJlbGVhc2UiLCAmYXh4aWFfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1iY20vS2NvbmZpZwppbmRleCA0OWM5MTRjLi45YmM2ZGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcKQEAgLTEsMzEgKzEsNTggQEAKIGNvbmZpZyBBUkNIX0JDTQotCWJvb2wgIkJyb2FkY29tIFNvQyBTdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9NVUxUSVBMQVRGT1JNCisJYm9vbCAiQnJvYWRjb20gU29DIFN1cHBvcnQiIGlmIEFSQ0hfTVVMVElfVjZfVjcKIAloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgQnJvYWRjb20gQVJNIGJhc2VkIFNvQwotICAgICAgICAgIGNoaXBzCi0KLWlmIEFSQ0hfQkNNCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgQnJvYWRjb20gQVJNIGJhc2VkIFNvQyBjaGlwcwogCiBtZW51ICJCcm9hZGNvbSBTb0MgU2VsZWN0aW9uIgorCWRlcGVuZHMgb24gQVJDSF9CQ00KIAogY29uZmlnIEFSQ0hfQkNNX01PQklMRQotCWJvb2wgIkJyb2FkY29tIE1vYmlsZSBTb0MiIGlmIEFSQ0hfTVVMVElfVjcKLQlkZXBlbmRzIG9uIE1NVQorCWJvb2wgIkJyb2FkY29tIE1vYmlsZSBTb0MgU3VwcG9ydCIgaWYgQVJDSF9NVUxUSV9WNwogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBBUk1fRVJSQVRBXzc1NDMyMgogCXNlbGVjdCBBUk1fRVJSQVRBXzc2NDM2OSBpZiBTTVAKKwlzZWxlY3QgQVJNX0VSUkFUQV83NzU0MjAKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBHUElPX0JDTV9LT05BCiAJc2VsZWN0IFRJQ0tfT05FU0hPVAotCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IEhBVkVfQVJNX0FSQ0hfVElNRVIKIAlzZWxlY3QgUElOQ1RSTAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIEJyb2FkY29tIG1vYmlsZSBTb0NzLgotCSAgSXQgY3VycmVudGx5IHN1cHBvcnRzIHRoZSAnQkNNMjgxWFgnIGZhbWlseSwgd2hpY2ggaW5jbHVkZXMKLQkgIEJDTTExMTMwLCBCQ00xMTE0MCwgQkNNMTEzNTEsIEJDTTI4MTQ1IGFuZAotCSAgQkNNMjgxNTUgdmFyaWFudHMuCisKK2lmIEFSQ0hfQkNNX01PQklMRQorCittZW51ICJCcm9hZGNvbSBNb2JpbGUgU29DIFNlbGVjdGlvbiIKKworY29uZmlnIEFSQ0hfQkNNXzI4MVhYCisJYm9vbCAiQnJvYWRjb20gQkNNMjgxWFggU29DIGZhbWlseSIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIHRoZSBCQ00yODFYWCBmYW1pbHksIHdoaWNoIGluY2x1ZGVzCisJICBCQ00xMTEzMCwgQkNNMTExNDAsIEJDTTExMzUxLCBCQ00yODE0NSBhbmQgQkNNMjgxNTUKKwkgIHZhcmlhbnRzLgorCitjb25maWcgQVJDSF9CQ01fMjE2NjQKKwlib29sICJCcm9hZGNvbSBCQ00yMTY2NCBTb0MgZmFtaWx5IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgdGhlIEJDTTIxNjY0IGZhbWlseSwgd2hpY2ggaW5jbHVkZXMKKwkgIEJDTTIxNjYzIGFuZCBCQ00yMTY2NCB2YXJpYW50cy4KKworY29uZmlnIEFSQ0hfQkNNX01PQklMRV9MMl9DQUNIRQorCWJvb2wgIkJyb2FkY29tIG1vYmlsZSBTb0MgbGV2ZWwgMiBjYWNoZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gKEFSQ0hfQkNNXzI4MVhYIHx8IEFSQ0hfQkNNXzIxNjY0KQorCWRlZmF1bHQgeQorCXNlbGVjdCBDQUNIRV9MMlgwCisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTUMKKworY29uZmlnIEFSQ0hfQkNNX01PQklMRV9TTUMKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NAorCitlbmRtZW51CisKK2VuZGlmCiAKIGNvbmZpZyBBUkNIX0JDTTI4MzUKIAlib29sICJCcm9hZGNvbSBCQ00yODM1IGZhbWlseSIgaWYgQVJDSF9NVUxUSV9WNgpAQCAtMzMsMTAgKzYwLDcgQEAKIAlzZWxlY3QgQVJNX0FNQkEKIAlzZWxlY3QgQVJNX0VSUkFUQV80MTE5MjAKIAlzZWxlY3QgQVJNX1RJTUVSX1NQODA0Ci0Jc2VsZWN0IENMS0RFVl9MT09LVVAKIAlzZWxlY3QgQ0xLU1JDX09GCi0Jc2VsZWN0IENQVV9WNgotCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IFBJTkNUUkwKIAlzZWxlY3QgUElOQ1RSTF9CQ00yODM1CiAJaGVscApAQCAtNDUsMTcgKzY5LDEyIEBACiAKIGNvbmZpZyBBUkNIX0JDTV81MzAxWAogCWJvb2wgIkJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gU29DIiBpZiBBUkNIX01VTFRJX1Y3Ci0JZGVwZW5kcyBvbiBNTVUKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKIAlzZWxlY3QgSEFWRV9BUk1fVFdEIGlmIFNNUAotCXNlbGVjdCBIQVZFX1NNUAotCXNlbGVjdCBDT01NT05fQ0xLCi0Jc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgQVJNX0dMT0JBTF9USU1FUgogCXNlbGVjdCBDTEtTUkNfQVJNX0dMT0JBTF9USU1FUl9TQ0hFRF9DTE9DSwotCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEJyb2FkY29tIEJDTTQ3MFggYW5kIEJDTTUzMDFYIFNvQ3Mgd2l0aCBBUk0gQ1BVIGNvcmVzLgogCkBAIC03MCw1ICs4OSwzIEBACiAJICBuZXR3b3JrIFNvQyB1c2luZyBhIE1JUFMgQ1BVLCB0aGV5IGFyZSBzdXBwb3J0ZWQgYnkgYXJjaC9taXBzL2JjbTQ3eHgKIAogZW5kbWVudQotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWJjbS9NYWtlZmlsZQppbmRleCBhMzI2YjI4Li43MzEyOTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWJjbS9NYWtlZmlsZQpAQCAtMTAsMTAgKzEwLDIzIEBACiAjIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotb2JqLSQoQ09ORklHX0FSQ0hfQkNNX01PQklMRSkJOj0gYm9hcmRfYmNtMjgxeHgubyBib2FyZF9iY20yMTY2NC5vIFwKLQkJCQliY21fa29uYV9zbWMubyBiY21fa29uYV9zbWNfYXNtLm8ga29uYS5vCisjIEJDTTI4MVhYCitvYmotJChDT05GSUdfQVJDSF9CQ01fMjgxWFgpCSs9IGJvYXJkX2JjbTI4MXh4Lm8KKworIyBCQ00yMTY2NAorb2JqLSQoQ09ORklHX0FSQ0hfQkNNXzIxNjY0KQkrPSBib2FyZF9iY20yMTY2NC5vCisKKyMgQkNNMjgxWFggYW5kIEJDTTIxNjY0IEwyIGNhY2hlIGNvbnRyb2wKK29iai0kKENPTkZJR19BUkNIX0JDTV9NT0JJTEVfTDJfQ0FDSEUpICs9IGtvbmFfbDJfY2FjaGUubworCisjIFN1cHBvcnQgZm9yIHNlY3VyZSBtb25pdG9yIHRyYXBzCitvYmotJChDT05GSUdfQVJDSF9CQ01fTU9CSUxFX1NNQykgKz0gYmNtX2tvbmFfc21jLm8KK2lmZXEgKCQoY2FsbCBhcy1pbnN0ciwuYXJjaF9leHRlbnNpb24gc2VjLGFzX2hhc19zZWMpLGFzX2hhc19zZWMpCitDRkxBR1NfYmNtX2tvbmFfc21jLm8JCSs9IC1XYSwtbWFyY2g9YXJtdjctYStzZWMgLURSRVFVSVJFU19TRUMKK2VuZGlmCisKKyMgQkNNMjgzNQogb2JqLSQoQ09ORklHX0FSQ0hfQkNNMjgzNSkJKz0gYm9hcmRfYmNtMjgzNS5vCiAKLXBsdXNfc2VjIDo9ICQoY2FsbCBhcy1pbnN0ciwuYXJjaF9leHRlbnNpb24gc2VjLCtzZWMpCi1BRkxBR1NfYmNtX2tvbmFfc21jX2FzbS5vCTo9LVdhLC1tYXJjaD1hcm12Ny1hJChwbHVzX3NlYykKKyMgQkNNNTMwMVgKIG9iai0kKENPTkZJR19BUkNIX0JDTV81MzAxWCkJKz0gYmNtXzUzMDF4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9rb25hX3NtYy5jIGIvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2tvbmFfc21jLmMKaW5kZXggNWUzMWU5MS4uYTU1YTdlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2tvbmFfc21jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2tvbmFfc21jLmMKQEAgLTIxLDExICsyMSw4IEBACiAKICNpbmNsdWRlICJiY21fa29uYV9zbWMuaCIKIAotc3RydWN0IHNlY3VyZV9icmlkZ2VfZGF0YSB7Ci0Jdm9pZCBfX2lvbWVtICpib3VuY2U7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQl1MzIgX19pb21lbSBidWZmZXJfYWRkcjsJLyogcGh5c2ljYWwgYWRkcmVzcyAqLwotCWludCBpbml0aWFsaXplZDsKLX0gYnJpZGdlX2RhdGE7CitzdGF0aWMgdTMyCQliY21fc21jX2J1ZmZlcl9waHlzOwkvKiBwaHlzaWNhbCBhZGRyZXNzICovCitzdGF0aWMgdm9pZCBfX2lvbWVtCSpiY21fc21jX2J1ZmZlcjsJLyogdmlydHVhbCBhZGRyZXNzICovCiAKIHN0cnVjdCBiY21fa29uYV9zbWNfZGF0YSB7CiAJdW5zaWduZWQgc2VydmljZV9pZDsKQEAgLTMzLDYgKzMwLDcgQEAKIAl1bnNpZ25lZCBhcmcxOwogCXVuc2lnbmVkIGFyZzI7CiAJdW5zaWduZWQgYXJnMzsKKwl1bnNpZ25lZCByZXN1bHQ7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21fa29uYV9zbWNfaWRzW10gX19pbml0Y29uc3QgPSB7CkBAIC00MSw1OSArMzksMTI1IEBACiAJe30sCiB9OwogCi0vKiBNYXAgaW4gdGhlIGJvdW5jZSBhcmVhICovCisvKiBNYXAgaW4gdGhlIGFyZ3MgYnVmZmVyIGFyZWEgKi8KIGludCBfX2luaXQgYmNtX2tvbmFfc21jX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJY29uc3QgX19iZTMyICpwcm9wX3ZhbDsKKwl1NjQgcHJvcF9zaXplID0gMDsKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9zaXplOworCXUzMiBidWZmZXJfcGh5czsKIAogCS8qIFJlYWQgYnVmZmVyIGFkZHIgYW5kIHNpemUgZnJvbSB0aGUgZGV2aWNlIHRyZWUgbm9kZSAqLwogCW5vZGUgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgYmNtX2tvbmFfc21jX2lkcyk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIERvbid0IGNhcmUgYWJvdXQgc2l6ZSBvciBmbGFncyBvZiB0aGUgRFQgbm9kZSAqLwotCWJyaWRnZV9kYXRhLmJ1ZmZlcl9hZGRyID0KLQkJYmUzMl90b19jcHUoKm9mX2dldF9hZGRyZXNzKG5vZGUsIDAsIE5VTEwsIE5VTEwpKTsKLQlCVUdfT04oIWJyaWRnZV9kYXRhLmJ1ZmZlcl9hZGRyKTsKKwlwcm9wX3ZhbCA9IG9mX2dldF9hZGRyZXNzKG5vZGUsIDAsICZwcm9wX3NpemUsIE5VTEwpOworCWlmICghcHJvcF92YWwpCisJCXJldHVybiAtRUlOVkFMOwogCi0JYnJpZGdlX2RhdGEuYm91bmNlID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JQlVHX09OKCFicmlkZ2VfZGF0YS5ib3VuY2UpOworCS8qIFdlIGFzc3VtZSBzcGFjZSBmb3IgZm91ciAzMi1iaXQgYXJndW1lbnRzICovCisJaWYgKHByb3Bfc2l6ZSA8IDQgKiBzaXplb2YodTMyKSB8fCBwcm9wX3NpemUgPiAodTY0KVVMT05HX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYnVmZmVyX3NpemUgPSAodW5zaWduZWQgbG9uZylwcm9wX3NpemU7CiAKLQlicmlkZ2VfZGF0YS5pbml0aWFsaXplZCA9IDE7CisJYnVmZmVyX3BoeXMgPSBiZTMyX3RvX2NwdXAocHJvcF92YWwpOworCWlmICghYnVmZmVyX3BoeXMpCisJCXJldHVybiAtRUlOVkFMOworCisJYmNtX3NtY19idWZmZXIgPSBpb3JlbWFwKGJ1ZmZlcl9waHlzLCBidWZmZXJfc2l6ZSk7CisJaWYgKCFiY21fc21jX2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJYmNtX3NtY19idWZmZXJfcGh5cyA9IGJ1ZmZlcl9waHlzOwogCiAJcHJfaW5mbygiS29uYSBTZWN1cmUgQVBJIGluaXRpYWxpemVkXG4iKTsKIAogCXJldHVybiAwOwogfQogCisvKgorICogaW50IGJjbV9rb25hX2RvX3NtYyh1MzIgc2VydmljZV9pZCwgdTMyIGJ1ZmZlcl9hZGRyKQorICoKKyAqIE9ubHkgY29yZSAwIGNhbiBydW4gdGhlIHNlY3VyZSBtb25pdG9yIGNvZGUuICBJZiBhbiAic21jIiByZXF1ZXN0CisgKiBpcyBpbml0aWF0ZWQgb24gYSBkaWZmZXJlbnQgY29yZSBpdCBtdXN0IGJlIHJlZGlyZWN0ZWQgdG8gY29yZSAwCisgKiBmb3IgZXhlY3V0aW9uLiAgV2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGhhbmRsZSB0aGlzLgorICoKKyAqIEVhY2ggInNtYyIgcmVxdWVzdCBzdXBwbGllcyBhIHNlcnZpY2UgaWQgYW5kIHRoZSBhZGRyZXNzIG9mIGEKKyAqIGJ1ZmZlciBjb250YWluaW5nIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgc2VydmljZSB0byBiZQorICogcGVyZm9ybWVkLiAgQSBmbGFncyB2YWx1ZSBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgbGV2ZWwgMgorICogY2FjaGUgYW5kIGludGVycnVwdCBoYW5kbGluZyB3aGlsZSB0aGUgc2VjdXJlIG1vbml0b3IgZXhlY3V0ZXMuCisgKgorICogUGFyYW1ldGVycyB0byB0aGUgInNtYyIgcmVxdWVzdCBhcmUgcGFzc2VkIGluIHI0LXI2IGFzIGZvbGxvd3M6CisgKiAgICAgcjQJc2VydmljZSBpZAorICogICAgIHI1CWZsYWdzIChTRUNfUk9NXyopCisgKiAgICAgcjYJcGh5c2ljYWwgYWRkcmVzcyBvZiBidWZmZXIgd2l0aCBvdGhlciBwYXJhbWV0ZXJzCisgKgorICogRXhlY3V0aW9uIG9mIGFuICJzbWMiIHJlcXVlc3QgcHJvZHVjZXMgdHdvIGRpc3RpbmN0IHJlc3VsdHMuCisgKgorICogRmlyc3QsIHRoZSBzZWN1cmUgbW9uaXRvciBjYWxsIGl0c2VsZiAocmVnYXJkbGVzcyBvZiB0aGUgc3BlY2lmaWMKKyAqIHNlcnZpY2UgcmVxdWVzdCkgY2FuIHN1Y2NlZWQsIG9yIGNhbiBwcm9kdWNlIGFuIGVycm9yLiAgV2hlbiBhbgorICogInNtYyIgcmVxdWVzdCBjb21wbGV0ZXMgdGhpcyB2YWx1ZSBpcyBmb3VuZCBpbiByMTI7IGl0IHNob3VsZAorICogYWx3YXlzIGJlIFNFQ19FWElUX05PUk1BTC4KKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhlIHBhcnRpY3VsYXIgc2VydmljZSBwZXJmb3JtZWQgcHJvZHVjZXMgYSByZXN1bHQuCisgKiBUaGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGV4cGVjdGVkIGRlcGVuZCBvbiB0aGUgc2VydmljZS4gIFdlCisgKiB0aGVyZWZvcmUgcmV0dXJuIHRoaXMgdmFsdWUgdG8gdGhlIGNhbGxlciwgc28gaXQgY2FuIGhhbmRsZSB0aGUKKyAqIHJlcXVlc3QgcmVzdWx0IGFwcHJvcHJpYXRlbHkuICBUaGlzIHJlc3VsdCB2YWx1ZSBpcyBmb3VuZCBpbiByMAorICogd2hlbiB0aGUgInNtYyIgcmVxdWVzdCBjb21wbGV0ZXMuCisgKi8KK3N0YXRpYyBpbnQgYmNtX2tvbmFfZG9fc21jKHUzMiBzZXJ2aWNlX2lkLCB1MzIgYnVmZmVyX3BoeXMpCit7CisJcmVnaXN0ZXIgdTMyIGlwIGFzbSgiaXAiKTsJLyogQWxzbyBjYWxsZWQgcjEyICovCisJcmVnaXN0ZXIgdTMyIHIwIGFzbSgicjAiKTsKKwlyZWdpc3RlciB1MzIgcjQgYXNtKCJyNCIpOworCXJlZ2lzdGVyIHUzMiByNSBhc20oInI1Iik7CisJcmVnaXN0ZXIgdTMyIHI2IGFzbSgicjYiKTsKKworCXI0ID0gc2VydmljZV9pZDsKKwlyNSA9IDB4MzsJCS8qIEtlZXAgSVJRIGFuZCBGSVEgb2ZmIGluIFNNICovCisJcjYgPSBidWZmZXJfcGh5czsKKworCWFzbSB2b2xhdGlsZSAoCisJCS8qIE1ha2Ugc3VyZSB3ZSBnb3QgdGhlIHJlZ2lzdGVycyB3ZSB3YW50ICovCisJCV9fYXNtZXEoIiUwIiwgImlwIikKKwkJX19hc21lcSgiJTEiLCAicjAiKQorCQlfX2FzbWVxKCIlMiIsICJyNCIpCisJCV9fYXNtZXEoIiUzIiwgInI1IikKKwkJX19hc21lcSgiJTQiLCAicjYiKQorI2lmZGVmIFJFUVVJUkVTX1NFQworCQkiLmFyY2hfZXh0ZW5zaW9uIHNlY1xuIgorI2VuZGlmCisJCSIJc21jICAgICMwXG4iCisJCTogIj1yIiAoaXApLCAiPXIiIChyMCkKKwkJOiAiciIgKHI0KSwgInIiIChyNSksICJyIiAocjYpCisJCTogInIxIiwgInIyIiwgInIzIiwgInI3IiwgImxyIik7CisKKwlCVUdfT04oaXAgIT0gU0VDX0VYSVRfTk9STUFMKTsKKworCXJldHVybiByMDsKK30KKwogLyogX19iY21fa29uYV9zbWMoKSBzaG91bGQgb25seSBydW4gb24gQ1BVIDAsIHdpdGggcHJlLWVtcHRpb24gZGlzYWJsZWQgKi8KIHN0YXRpYyB2b2lkIF9fYmNtX2tvbmFfc21jKHZvaWQgKmluZm8pCiB7CiAJc3RydWN0IGJjbV9rb25hX3NtY19kYXRhICpkYXRhID0gaW5mbzsKLQl1MzIgKmFyZ3MgPSBicmlkZ2VfZGF0YS5ib3VuY2U7Ci0JaW50IHJjID0gMDsKKwl1MzIgKmFyZ3MgPSBiY21fc21jX2J1ZmZlcjsKIAotCS8qIE11c3QgcnVuIG9uIENQVSAwICovCiAJQlVHX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKTsKKwlCVUdfT04oIWFyZ3MpOwogCi0JLyogQ2hlY2sgbWFwIGluIHRoZSBib3VuY2UgYXJlYSAqLwotCUJVR19PTighYnJpZGdlX2RhdGEuaW5pdGlhbGl6ZWQpOwotCi0JLyogQ29weSBvbmUgMzIgYml0IHdvcmQgaW50byB0aGUgYm91bmNlIGFyZWEgKi8KLQlhcmdzWzBdID0gZGF0YS0+YXJnMDsKLQlhcmdzWzFdID0gZGF0YS0+YXJnMTsKLQlhcmdzWzJdID0gZGF0YS0+YXJnMjsKLQlhcmdzWzNdID0gZGF0YS0+YXJnMzsKKwkvKiBDb3B5IHRoZSBmb3VyIDMyIGJpdCBhcmd1bWVudCB2YWx1ZXMgaW50byB0aGUgYm91bmNlIGFyZWEgKi8KKwl3cml0ZWxfcmVsYXhlZChkYXRhLT5hcmcwLCBhcmdzKyspOworCXdyaXRlbF9yZWxheGVkKGRhdGEtPmFyZzEsIGFyZ3MrKyk7CisJd3JpdGVsX3JlbGF4ZWQoZGF0YS0+YXJnMiwgYXJncysrKTsKKwl3cml0ZWwoZGF0YS0+YXJnMywgYXJncyk7CiAKIAkvKiBGbHVzaCBjYWNoZXMgZm9yIGlucHV0IGRhdGEgcGFzc2VkIHRvIFNlY3VyZSBNb25pdG9yICovCi0JaWYgKGRhdGEtPnNlcnZpY2VfaWQgIT0gU1NBUElfQlJDTV9TVEFSVF9WQ19DT1JFKQotCQlmbHVzaF9jYWNoZV9hbGwoKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKIAotCS8qIFRyYXAgaW50byBTZWN1cmUgTW9uaXRvciAqLwotCXJjID0gYmNtX2tvbmFfc21jX2FzbShkYXRhLT5zZXJ2aWNlX2lkLCBicmlkZ2VfZGF0YS5idWZmZXJfYWRkcik7Ci0KLQlpZiAocmMgIT0gU0VDX1JPTV9SRVRfT0spCi0JCXByX2VycigiU2VjdXJlIE1vbml0b3IgY2FsbCBmYWlsZWQgKDB4JXgpIVxuIiwgcmMpOworCS8qIFRyYXAgaW50byBTZWN1cmUgTW9uaXRvciBhbmQgcmVjb3JkIHRoZSByZXF1ZXN0IHJlc3VsdCAqLworCWRhdGEtPnJlc3VsdCA9IGJjbV9rb25hX2RvX3NtYyhkYXRhLT5zZXJ2aWNlX2lkLCBiY21fc21jX2J1ZmZlcl9waHlzKTsKIH0KIAogdW5zaWduZWQgYmNtX2tvbmFfc21jKHVuc2lnbmVkIHNlcnZpY2VfaWQsIHVuc2lnbmVkIGFyZzAsIHVuc2lnbmVkIGFyZzEsCkBAIC0xMDYsMTcgKzE3MCwxMyBAQAogCWRhdGEuYXJnMSA9IGFyZzE7CiAJZGF0YS5hcmcyID0gYXJnMjsKIAlkYXRhLmFyZzMgPSBhcmczOworCWRhdGEucmVzdWx0ID0gMDsKIAogCS8qCiAJICogRHVlIHRvIGEgbGltaXRhdGlvbiBvZiB0aGUgc2VjdXJlIG1vbml0b3IsIHdlIG11c3QgdXNlIHRoZSBTTVAKIAkgKiBpbmZyYXN0cnVjdHVyZSB0byBmb3J3YXJkIGFsbCBzZWN1cmUgbW9uaXRvciBjYWxscyB0byBDb3JlIDAuCiAJICovCi0JaWYgKGdldF9jcHUoKSAhPSAwKQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoMCwgX19iY21fa29uYV9zbWMsICh2b2lkICopJmRhdGEsIDEpOwotCWVsc2UKLQkJX19iY21fa29uYV9zbWMoJmRhdGEpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgwLCBfX2JjbV9rb25hX3NtYywgJmRhdGEsIDEpOwogCi0JcHV0X2NwdSgpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRhdGEucmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2tvbmFfc21jLmggYi9hcmNoL2FybS9tYWNoLWJjbS9iY21fa29uYV9zbWMuaAppbmRleCBkMDk4YTdlLi4yZTI5ZWM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbS9iY21fa29uYV9zbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbS9iY21fa29uYV9zbWMuaApAQCAtMTUsNTUgKzE1LDEyIEBACiAjZGVmaW5lIEJDTV9LT05BX1NNQ19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBGTEFHUwkoU0VDX1JPTV9JQ0FDSEVfRU5BQkxFX01BU0sgfCBTRUNfUk9NX0RDQUNIRV9FTkFCTEVfTUFTSyB8IFwKLQkJCVNFQ19ST01fSVJRX0VOQUJMRV9NQVNLIHwgU0VDX1JPTV9GSVFfRU5BQkxFX01BU0spCiAKLS8qIQotICogRGVmaW5pdGlvbnMgZm9yIElSUSAmIEZJUSBNYXNrIGZvciBBUk0KLSAqLwotCi0jZGVmaW5lIEZJUV9JUlFfTUFTSwkJCQkJCTB4QzAKLSNkZWZpbmUgRklRX01BU0sJCQkJCQkweDQwCi0jZGVmaW5lIElSUV9NQVNLCQkJCQkJMHg4MAotCi0vKiEKLSAqIFNlY3VyZSBNb2RlIEZMQUdzCi0gKi8KLQotLyogV2hlbiBzZXQsIGVuYWJsZXMgSUNhY2hlIHdpdGhpbiB0aGUgc2VjdXJlIG1vZGUgKi8KLSNkZWZpbmUgU0VDX1JPTV9JQ0FDSEVfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIFdoZW4gc2V0LCBlbmFibGVzIERDYWNoZSB3aXRoaW4gdGhlIHNlY3VyZSBtb2RlICovCi0jZGVmaW5lIFNFQ19ST01fRENBQ0hFX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotCi0vKiBXaGVuIHNldCwgZW5hYmxlcyBJUlEgd2l0aGluIHRoZSBzZWN1cmUgbW9kZSAqLwotI2RlZmluZSBTRUNfUk9NX0lSUV9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLQotLyogV2hlbiBzZXQsIGVuYWJsZXMgRklRIHdpdGhpbiB0aGUgc2VjdXJlIG1vZGUgKi8KLSNkZWZpbmUgU0VDX1JPTV9GSVFfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0KLS8qIFdoZW4gc2V0LCBlbmFibGVzIFVuaWZpZWQgTDIgY2FjaGUgd2l0aGluIHRoZSBzZWN1cmUgbW9kZSAqLwotI2RlZmluZSBTRUNfUk9NX1VMMl9DQUNIRV9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLQotLyogQnJvYWRjb20gU2VjdXJlIFNlcnZpY2UgQVBJIFNlcnZpY2UgSURzICovCi0jZGVmaW5lIFNTQVBJX0RPUk1BTlRfRU5UUllfU0VSViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBTU0FQSV9QVUJMSUNfT1RQX1NFUlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDEKLSNkZWZpbmUgU1NBUElfRU5BQkxFX0wyX0NBQ0hFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAyCi0jZGVmaW5lIFNTQVBJX0RJU0FCTEVfTDJfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMwotI2RlZmluZSBTU0FQSV9XUklURV9TQ1VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDQKLSNkZWZpbmUgU1NBUElfV1JJVEVfUFdSX0dBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDA1Ci0KLS8qIEJyb2FkY29tIFNlY3VyZSBTZXJ2aWNlIEFQSSBSZXR1cm4gQ29kZXMgKi8KKy8qIEJyb2FkY29tIFNlY3VyZSBTZXJ2aWNlIEFQSSBzZXJ2aWNlIElEcywgcmV0dXJuIGNvZGVzLCBhbmQgZXhpdCBjb2RlcyAqLworI2RlZmluZSBTU0FQSV9FTkFCTEVfTDJfQ0FDSEUJCTB4MDEwMDAwMDIKICNkZWZpbmUgU0VDX1JPTV9SRVRfT0sJCQkweDAwMDAwMDAxCi0jZGVmaW5lIFNFQ19ST01fUkVUX0ZBSUwJCTB4MDAwMDAwMDkKLQotI2RlZmluZSBTU0FQSV9SRVRfRlJPTV9JTlRfU0VSVgkJMHg0CiAjZGVmaW5lIFNFQ19FWElUX05PUk1BTAkJCTB4MQogCi0jZGVmaW5lIFNTQVBJX1JPV19BRVMJCQkweDBFMDAwMDA2Ci0jZGVmaW5lIFNTQVBJX0JSQ01fU1RBUlRfVkNfQ09SRQkweDBFMDAwMDA4Ci0KLSNpZm5kZWYJX19BU1NFTUJMWV9fCiBleHRlcm4gaW50IF9faW5pdCBiY21fa29uYV9zbWNfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGJjbV9rb25hX3NtYyh1bnNpZ25lZCBzZXJ2aWNlX2lkLApAQCAtNzIsOSArMjksNCBAQAogCQkJICAgICB1bnNpZ25lZCBhcmcyLAogCQkJICAgICB1bnNpZ25lZCBhcmczKTsKIAotZXh0ZXJuIGludCBiY21fa29uYV9zbWNfYXNtKHUzMiBzZXJ2aWNlX2lkLAotCQkJICAgIHUzMiBidWZmZXJfYWRkcik7Ci0KLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIEJDTV9LT05BX1NNQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9iY21fa29uYV9zbWNfYXNtLlMgYi9hcmNoL2FybS9tYWNoLWJjbS9iY21fa29uYV9zbWNfYXNtLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNjA4NDguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2tvbmFfc21jX2FzbS5TCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBCcm9hZGNvbSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55Ci0gKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSAiYmNtX2tvbmFfc21jLmgiCi0KLS8qCi0gKiBpbnQgYmNtX2tvbmFfc21jX2FzbSh1MzIgc2VydmljZV9pZCwgdTMyIGJ1ZmZlcl9hZGRyKQotICovCi0KLUVOVFJZKGJjbV9rb25hX3NtY19hc20pCi0Jc3RtZmQJc3AhLCB7cjQtcjEyLCBscn0KLQltb3YJcjQsIHIwCQlAIHNlcnZpY2VfaWQKLQltb3YJcjUsICMzCQlAIEtlZXAgSVJRIGFuZCBGSVEgb2ZmIGluIFNNCi0JLyoKLQkgKiBTaW5jZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBpbiB0aGUgb3BlbiBtb2RlLCB3ZSBtdXN0IGtlZXAKLQkgKiBpbnRlcnJ1cHRzIGRpc2FibGVkIGluIHNlY3VyZSBtb2RlIGJ5IHNldHRpbmcgUjU9MHgzLiBJZiBpbnRlcnJ1cHRzCi0JICogYXJlIGVuYWJsZWQgaW4gb3BlbiBtb2RlLCB3ZSBjYW4gc2V0IFI1PTB4MCB0byBhbGxvdyBpbnRlcnJ1cHRzIGluCi0JICogc2VjdXJlIG1vZGUuICBJZiB3ZSBkaWQgdGhpcywgdGhlIHNlY3VyZSBtb25pdG9yIHdvdWxkIHJldHVybiBiYWNrCi0JICogY29udHJvbCB0byB0aGUgb3BlbiBtb2RlIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0IHByaW9yIHRvIGNvbXBsZXRpbmcKLQkgKiB0aGUgc2VjdXJlIHNlcnZpY2UuIElmIHRoaXMgaGFwcGVuZWQsIFIxMiB3b3VsZCBub3QgYmUKLQkgKiBTRUNfRVhJVF9OT1JNQUwgYW5kIHdlIHdvdWxkIG5lZWQgdG8gY2FsbCBTTUMgYWdhaW4gYWZ0ZXIgcmVzZXR0aW5nCi0JICogUjUgKGl0IGdldHMgY2xvYmJlcmVkIGJ5IHRoZSBzZWN1cmUgbW9uaXRvcikgYW5kIHNldHRpbmcgUjQgdG8KLQkgKiBTU0FQSV9SRVRfRlJPTV9JTlRfU0VSViB0byBpbmRpY2F0ZSB0aGF0IHdlIHdhbnQgdGhlIHNlY3VyZSBtb25pdG9yCi0JICogdG8gZmluaXNoIHVwIHRoZSBwcmV2aW91cyB1bmNvbXBsZXRlZCBzZWN1cmUgc2VydmljZS4KLQkgKi8KLQltb3YJcjYsIHIxCQlAIGJ1ZmZlcl9hZGRyCi0Jc21jCSMwCi0JLyogQ2hlY2sgcjEyIGZvciBTRUNfRVhJVF9OT1JNQUwgaGVyZSBpZiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JbGRtZmQJc3AhLCB7cjQtcjEyLCBwY30KLUVORFBST0MoYmNtX2tvbmFfc21jX2FzbSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL2JvYXJkX2JjbTIxNjY0LmMgYi9hcmNoL2FybS9tYWNoLWJjbS9ib2FyZF9iY20yMTY2NC5jCmluZGV4IGFjYzE1NzMuLmYwNTIxY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL2JvYXJkX2JjbTIxNjY0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vYm9hcmRfYmNtMjE2NjQuYwpAQCAtMTEsMTQgKzExLDEzIEBACiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNpbmNsdWRlICJiY21fa29uYV9zbWMuaCIKLSNpbmNsdWRlICJrb25hLmgiCisjaW5jbHVkZSAia29uYV9sMl9jYWNoZS5oIgogCiAjZGVmaW5lIFJTVE1HUl9EVF9TVFJJTkcJCSJicmNtLGJjbTIxNjY0LXJlc2V0bWdyIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9ib2FyZF9iY20yODF4eC5jIGIvYXJjaC9hcm0vbWFjaC1iY20vYm9hcmRfYmNtMjgxeHguYwppbmRleCA2YmU1NGMxLi4xYWM1OWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbS9ib2FyZF9iY20yODF4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtL2JvYXJkX2JjbTI4MXh4LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAotI2luY2x1ZGUgImtvbmEuaCIKKyNpbmNsdWRlICJrb25hX2wyX2NhY2hlLmgiCiAKICNkZWZpbmUgU0VDV0RPR19PRkZTRVQJCQkweDAwMDAwMDAwCiAjZGVmaW5lIFNFQ1dET0dfUkVTRVJWRURfTUFTSwkJMHhlMjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20va29uYS5jIGIvYXJjaC9hcm0vbWFjaC1iY20va29uYV9sMl9jYWNoZS5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYmNtL2tvbmEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1iY20va29uYV9sMl9jYWNoZS5jCmluZGV4IDc2OGJjMjguLmIzMTk3MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL2tvbmEuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbS9rb25hX2wyX2NhY2hlLmMKQEAgLTExLDE5ICsxMSwxOCBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogCiAjaW5jbHVkZSAiYmNtX2tvbmFfc21jLmgiCi0jaW5jbHVkZSAia29uYS5oIgogCiB2b2lkIF9faW5pdCBrb25hX2wyX2NhY2hlX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OwogCWludCByZXQ7CiAKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NBQ0hFX0wyWDApKQotCQlyZXR1cm47Ci0KIAlyZXQgPSBiY21fa29uYV9zbWNfaW5pdCgpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygiU2VjdXJlIEFQSSBub3QgYXZhaWxhYmxlICglZCkuIFNraXBwaW5nIEwyIGluaXQuXG4iLApAQCAtMzEsNyArMzAsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWJjbV9rb25hX3NtYyhTU0FQSV9FTkFCTEVfTDJfQ0FDSEUsIDAsIDAsIDAsIDApOworCXJlc3VsdCA9IGJjbV9rb25hX3NtYyhTU0FQSV9FTkFCTEVfTDJfQ0FDSEUsIDAsIDAsIDAsIDApOworCWlmIChyZXN1bHQgIT0gU0VDX1JPTV9SRVRfT0spIHsKKwkJcHJfZXJyKCJTZWN1cmUgTW9uaXRvciBjYWxsIGZhaWxlZCAoJXUpISBTa2lwcGluZyBMMiBpbml0LlxuIiwKKwkJCXJlc3VsdCk7CisJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIFRoZSBhdXhfdmFsIGFuZCBhdXhfbWFzayBoYXZlIG5vIGVmZmVjdCBzaW5jZSBMMiBjYWNoZSBpcyBhbHJlYWR5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9rb25hLmggYi9hcmNoL2FybS9tYWNoLWJjbS9rb25hX2wyX2NhY2hlLmgKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1iY20va29uYS5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWJjbS9rb25hX2wyX2NhY2hlLmgKaW5kZXggM2E3YTAxNy4uNDZmODRhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY20va29uYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtL2tvbmFfbDJfY2FjaGUuaApAQCAtMTEsNCArMTEsOCBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi12b2lkIF9faW5pdCBrb25hX2wyX2NhY2hlX2luaXQodm9pZCk7CisjaWZkZWYgQ09ORklHX0FSQ0hfQkNNX01PQklMRV9MMl9DQUNIRQordm9pZAlrb25hX2wyX2NhY2hlX2luaXQodm9pZCk7CisjZWxzZQorI2RlZmluZSBrb25hX2wyX2NhY2hlX2luaXQoKSAoKHZvaWQpMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iZXJsaW4vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYmVybGluL0tjb25maWcKaW5kZXggYjBjYjA3Mi4uMTAxZTBmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iZXJsaW4vS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnCkBAIC0xLDkgKzEsMTEgQEAKIGNvbmZpZyBBUkNIX0JFUkxJTgogCWJvb2wgIk1hcnZlbGwgQmVybGluIFNvQ3MiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IERXX0FQQl9JQ1RMCiAJc2VsZWN0IERXX0FQQl9USU1FUl9PRgorCXNlbGVjdCBQSU5DVFJMCiAKIGlmIEFSQ0hfQkVSTElOCiAKQEAgLTE0LDExICsxNiwxOSBAQAogCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IENQVV9QSjRCCiAJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKKwlzZWxlY3QgUElOQ1RSTF9CRVJMSU5fQkcyCiAKIGNvbmZpZyBNQUNIX0JFUkxJTl9CRzJDRAogCWJvb2wgIk1hcnZlbGwgQXJtYWRhIDE1MDAtbWluaSAoQkcyQ0QpIgogCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKKwlzZWxlY3QgUElOQ1RSTF9CRVJMSU5fQkcyQ0QKKworY29uZmlnIE1BQ0hfQkVSTElOX0JHMlEKKwlib29sICJNYXJ2ZWxsIEFybWFkYSAxNTAwIFBybyAoQkcyLVEpIgorCXNlbGVjdCBDQUNIRV9MMlgwCisJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKKwlzZWxlY3QgUElOQ1RSTF9CRVJMSU5fQkcyUQogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L0tjb25maWcKaW5kZXggZGNlOGRlYy4uNjY4MzhmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L0tjb25maWcKQEAgLTEsNyArMSw2IEBACiBjb25maWcgQVJDSF9DTlMzWFhYCiAJYm9vbCAiQ2F2aXVtIE5ldHdvcmtzIENOUzNYWFggZmFtaWx5IiBpZiBBUkNIX01VTFRJX1Y2CiAJc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgQ2F2aXVtIE5ldHdvcmtzIENOUzNYWFggcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNTUtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNTUtZXZtLmMKaW5kZXggZWNkYzdkNC4uMDZkNjNkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1ldm0uYwpAQCAtMzUwLDExICszNTAsNyBAQAogICogeW91IGhhdmUgcHJvcGVyIE1pbmktQiBvciBNaW5pLUEgY2FibGVzIChvciBNaW5pLUEgYWRhcHRlcnMpCiAgKiB0aGUgSUQgcGluIHdvbid0IG5lZWQgYW55IGhlbHAuCiAgKi8KLSNpZmRlZiBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTAotI2RlZmluZSBVU0JfSURfVkFMVUUJMAkvKiBJRCBwdWxsZWQgaGlnaDsgKnNob3VsZCogZmxvYXQgKi8KLSNlbHNlCiAjZGVmaW5lIFVTQl9JRF9WQUxVRQkxCS8qIElEIHB1bGxlZCBsb3cgKi8KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNwaV9lZXByb20gYXQyNTY0MGEgPSB7CiAJLmJ5dGVfbGVuCT0gU1pfNjRLIC8gOCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1sZW9wYXJkLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNTUtbGVvcGFyZC5jCmluZGV4IDQzYmFjYmYuLjY4MGE3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1sZW9wYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWxlb3BhcmQuYwpAQCAtMjA4LDExICsyMDgsNyBAQAogICogeW91IGhhdmUgcHJvcGVyIE1pbmktQiBvciBNaW5pLUEgY2FibGVzIChvciBNaW5pLUEgYWRhcHRlcnMpCiAgKiB0aGUgSUQgcGluIHdvbid0IG5lZWQgYW55IGhlbHAuCiAgKi8KLSNpZmRlZiBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTAotI2RlZmluZSBVU0JfSURfVkFMVUUJMAkvKiBJRCBwdWxsZWQgaGlnaDsgKnNob3VsZCogZmxvYXQgKi8KLSNlbHNlCiAjZGVmaW5lIFVTQl9JRF9WQUxVRQkxCS8qIElEIHB1bGxlZCBsb3cgKi8KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNwaV9lZXByb20gYXQyNTY0MGEgPSB7CiAJLmJ5dGVfbGVuCT0gU1pfNjRLIC8gOCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCmluZGV4IDU2ZWE0MWQuLmI4NWI3ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwpAQCAtMTM0LDEzICsxMzQsNiBAQAogCX0KIH07CiAKLXN0YXRpYyBzOCBkYTh4eF9xdWV1ZV90Y19tYXBwaW5nW11bMl0gPSB7Ci0JLyoge2V2ZW50IHF1ZXVlIG5vLCBUQyBub30gKi8KLQl7MCwgMH0sCi0JezEsIDF9LAotCXstMSwgLTF9Ci19OwotCiBzdGF0aWMgczggZGE4eHhfcXVldWVfcHJpb3JpdHlfbWFwcGluZ1tdWzJdID0gewogCS8qIHtldmVudCBxdWV1ZSBubywgUHJpb3JpdHl9ICovCiAJezAsIDN9LApAQCAtMTQ4LDEyICsxNDEsNiBAQAogCXstMSwgLTF9CiB9OwogCi1zdGF0aWMgczggZGE4NTBfcXVldWVfdGNfbWFwcGluZ1tdWzJdID0gewotCS8qIHtldmVudCBxdWV1ZSBubywgVEMgbm99ICovCi0JezAsIDB9LAotCXstMSwgLTF9Ci19OwotCiBzdGF0aWMgczggZGE4NTBfcXVldWVfcHJpb3JpdHlfbWFwcGluZ1tdWzJdID0gewogCS8qIHtldmVudCBxdWV1ZSBubywgUHJpb3JpdHl9ICovCiAJezAsIDN9LApAQCAtMTYxLDEyICsxNDgsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRhODMwX2VkbWFfY2MwX2luZm8gPSB7Ci0JLm5fY2hhbm5lbAkJPSAzMiwKLQkubl9yZWdpb24JCT0gNCwKLQkubl9zbG90CQkJPSAxMjgsCi0JLm5fdGMJCQk9IDIsCi0JLm5fY2MJCQk9IDEsCi0JLnF1ZXVlX3RjX21hcHBpbmcJPSBkYTh4eF9xdWV1ZV90Y19tYXBwaW5nLAogCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gZGE4eHhfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKIAkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMSwKIH07CkBAIC0xNzcsMjIgKzE1OCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGVkbWFfc29jX2luZm8gZGE4NTBfZWRtYV9jY19pbmZvW10gPSB7CiAJewotCQkubl9jaGFubmVsCQk9IDMyLAotCQkubl9yZWdpb24JCT0gNCwKLQkJLm5fc2xvdAkJCT0gMTI4LAotCQkubl90YwkJCT0gMiwKLQkJLm5fY2MJCQk9IDEsCi0JCS5xdWV1ZV90Y19tYXBwaW5nCT0gZGE4eHhfcXVldWVfdGNfbWFwcGluZywKIAkJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBkYTh4eF9xdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAogCQkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMSwKIAl9LAogCXsKLQkJLm5fY2hhbm5lbAkJPSAzMiwKLQkJLm5fcmVnaW9uCQk9IDQsCi0JCS5uX3Nsb3QJCQk9IDEyOCwKLQkJLm5fdGMJCQk9IDEsCi0JCS5uX2NjCQkJPSAxLAotCQkucXVldWVfdGNfbWFwcGluZwk9IGRhODUwX3F1ZXVlX3RjX21hcHBpbmcsCiAJCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gZGE4NTBfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKIAkJLmRlZmF1bHRfcXVldWUJCT0gRVZFTlRRXzAsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKaW5kZXggMDczODFkOC4uMmYzZWQzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKQEAgLTU2OSwxNCArNTY5LDYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBzOAotcXVldWVfdGNfbWFwcGluZ1tdWzJdID0gewotCS8qIHtldmVudCBxdWV1ZSBubywgVEMgbm99ICovCi0JezAsIDB9LAotCXsxLCAxfSwKLQl7LTEsIC0xfSwKLX07Ci0KLXN0YXRpYyBzOAogcXVldWVfcHJpb3JpdHlfbWFwcGluZ1tdWzJdID0gewogCS8qIHtldmVudCBxdWV1ZSBubywgUHJpb3JpdHl9ICovCiAJezAsIDN9LApAQCAtNTg1LDEyICs1NzcsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGVkbWFfY2MwX2luZm8gPSB7Ci0JLm5fY2hhbm5lbAkJPSA2NCwKLQkubl9yZWdpb24JCT0gNCwKLQkubl9zbG90CQkJPSAxMjgsCi0JLm5fdGMJCQk9IDIsCi0JLm5fY2MJCQk9IDEsCi0JLnF1ZXVlX3RjX21hcHBpbmcJPSBxdWV1ZV90Y19tYXBwaW5nLAogCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gcXVldWVfcHJpb3JpdHlfbWFwcGluZywKIAkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCmluZGV4IDA4YTYxYjkuLjBhZTgxMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCkBAIC04NTMsMTYgKzg1Myw2IEBACiAKIC8qIEZvdXIgVHJhbnNmZXIgQ29udHJvbGxlcnMgb24gRE0zNjUgKi8KIHN0YXRpYyBzOAotZG0zNjVfcXVldWVfdGNfbWFwcGluZ1tdWzJdID0gewotCS8qIHtldmVudCBxdWV1ZSBubywgVEMgbm99ICovCi0JezAsIDB9LAotCXsxLCAxfSwKLQl7MiwgMn0sCi0JezMsIDN9LAotCXstMSwgLTF9LAotfTsKLQotc3RhdGljIHM4CiBkbTM2NV9xdWV1ZV9wcmlvcml0eV9tYXBwaW5nW11bMl0gPSB7CiAJLyoge2V2ZW50IHF1ZXVlIG5vLCBQcmlvcml0eX0gKi8KIAl7MCwgN30sCkBAIC04NzMsMTIgKzg2Myw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGVkbWFfc29jX2luZm8gZWRtYV9jYzBfaW5mbyA9IHsKLQkubl9jaGFubmVsCQk9IDY0LAotCS5uX3JlZ2lvbgkJPSA0LAotCS5uX3Nsb3QJCQk9IDI1NiwKLQkubl90YwkJCT0gNCwKLQkubl9jYwkJCT0gMSwKLQkucXVldWVfdGNfbWFwcGluZwk9IGRtMzY1X3F1ZXVlX3RjX21hcHBpbmcsCiAJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBkbTM2NV9xdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAogCS5kZWZhdWx0X3F1ZXVlCQk9IEVWRU5UUV8zLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwppbmRleCA1ZGViZmZiLi5kYzUyNjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCkBAIC00OTksMTQgKzQ5OSw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgczgKLXF1ZXVlX3RjX21hcHBpbmdbXVsyXSA9IHsKLQkvKiB7ZXZlbnQgcXVldWUgbm8sIFRDIG5vfSAqLwotCXswLCAwfSwKLQl7MSwgMX0sCi0Jey0xLCAtMX0sCi19OwotCi1zdGF0aWMgczgKIHF1ZXVlX3ByaW9yaXR5X21hcHBpbmdbXVsyXSA9IHsKIAkvKiB7ZXZlbnQgcXVldWUgbm8sIFByaW9yaXR5fSAqLwogCXswLCAzfSwKQEAgLTUxNSwxMiArNTA3LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyBlZG1hX2NjMF9pbmZvID0gewotCS5uX2NoYW5uZWwJCT0gNjQsCi0JLm5fcmVnaW9uCQk9IDQsCi0JLm5fc2xvdAkJCT0gMTI4LAotCS5uX3RjCQkJPSAyLAotCS5uX2NjCQkJPSAxLAotCS5xdWV1ZV90Y19tYXBwaW5nCT0gcXVldWVfdGNfbWFwcGluZywKIAkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IHF1ZXVlX3ByaW9yaXR5X21hcHBpbmcsCiAJLmRlZmF1bHRfcXVldWUJCT0gRVZFTlRRXzEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ2eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ2eC5jCmluZGV4IDMzMmQwMGQuLjZjM2JiZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NnguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDZ4LmMKQEAgLTUzMywxNiArNTMzLDYgQEAKIAogLyogRm91ciBUcmFuc2ZlciBDb250cm9sbGVycyBvbiBETTY0NnggKi8KIHN0YXRpYyBzOAotZG02NDZ4X3F1ZXVlX3RjX21hcHBpbmdbXVsyXSA9IHsKLQkvKiB7ZXZlbnQgcXVldWUgbm8sIFRDIG5vfSAqLwotCXswLCAwfSwKLQl7MSwgMX0sCi0JezIsIDJ9LAotCXszLCAzfSwKLQl7LTEsIC0xfSwKLX07Ci0KLXN0YXRpYyBzOAogZG02NDZ4X3F1ZXVlX3ByaW9yaXR5X21hcHBpbmdbXVsyXSA9IHsKIAkvKiB7ZXZlbnQgcXVldWUgbm8sIFByaW9yaXR5fSAqLwogCXswLCA0fSwKQEAgLTU1MywxMiArNTQzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyBlZG1hX2NjMF9pbmZvID0gewotCS5uX2NoYW5uZWwJCT0gNjQsCi0JLm5fcmVnaW9uCQk9IDYsCS8qIDAtMSwgNC03ICovCi0JLm5fc2xvdAkJCT0gNTEyLAotCS5uX3RjCQkJPSA0LAotCS5uX2NjCQkJPSAxLAotCS5xdWV1ZV90Y19tYXBwaW5nCT0gZG02NDZ4X3F1ZXVlX3RjX21hcHBpbmcsCiAJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBkbTY0NnhfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKIAkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWRvdmUvaXJxLmMKaW5kZXggYmM0MzQ0YS4uNGE1YTdhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9pcnEuYwpAQCAtMTA4LDYgKzEwOCwzOCBAQAogCTAsCiB9OwogCisjaWZkZWYgQ09ORklHX01VTFRJX0lSUV9IQU5ETEVSCisvKgorICogQ29tcGlsaW5nIHdpdGggYm90aCBub24tRFQgYW5kIERUIHN1cHBvcnQgZW5hYmxlZCwgd2lsbAorICogYnJlYWsgYXNtIGlycSBoYW5kbGVyIHVzZWQgYnkgbm9uLURUIGJvYXJkcy4gVGhlcmVmb3JlLAorICogd2UgcHJvdmlkZSBhIEMtc3R5bGUgaXJxIGhhbmRsZXIgZXZlbiBmb3Igbm9uLURUIGJvYXJkcywKKyAqIGlmIE1VTFRJX0lSUV9IQU5ETEVSIGlzIHNldC4KKyAqLworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpkb3ZlX2lycV9iYXNlID0gSVJRX1ZJUlRfQkFTRTsKKworc3RhdGljIGFzbWxpbmthZ2Ugdm9pZAorX19leGNlcHRpb25faXJxX2VudHJ5IGRvdmVfbGVnYWN5X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIHN0YXQ7CisKKwlzdGF0ID0gcmVhZGxfcmVsYXhlZChkb3ZlX2lycV9iYXNlICsgSVJRX0NBVVNFX0xPV19PRkYpOworCXN0YXQgJj0gcmVhZGxfcmVsYXhlZChkb3ZlX2lycV9iYXNlICsgSVJRX01BU0tfTE9XX09GRik7CisJaWYgKHN0YXQpIHsKKwkJdW5zaWduZWQgaW50IGh3aXJxID0gX19mbHMoc3RhdCk7CisJCWhhbmRsZV9JUlEoaHdpcnEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorCXN0YXQgPSByZWFkbF9yZWxheGVkKGRvdmVfaXJxX2Jhc2UgKyBJUlFfQ0FVU0VfSElHSF9PRkYpOworCXN0YXQgJj0gcmVhZGxfcmVsYXhlZChkb3ZlX2lycV9iYXNlICsgSVJRX01BU0tfSElHSF9PRkYpOworCWlmIChzdGF0KSB7CisJCXVuc2lnbmVkIGludCBod2lycSA9IDMyICsgX19mbHMoc3RhdCk7CisJCWhhbmRsZV9JUlEoaHdpcnEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorfQorI2VuZGlmCisKIHZvaWQgX19pbml0IGRvdmVfaW5pdF9pcnEodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTExNSw2ICsxNDcsMTAgQEAKIAlvcmlvbl9pcnFfaW5pdCgwLCBJUlFfVklSVF9CQVNFICsgSVJRX01BU0tfTE9XX09GRik7CiAJb3Jpb25faXJxX2luaXQoMzIsIElSUV9WSVJUX0JBU0UgKyBJUlFfTUFTS19ISUdIX09GRik7CiAKKyNpZmRlZiBDT05GSUdfTVVMVElfSVJRX0hBTkRMRVIKKwlzZXRfaGFuZGxlX2lycShkb3ZlX2xlZ2FjeV9oYW5kbGVfaXJxKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBJbml0aWFsaXplIGdwaW9saWIgZm9yIEdQSU9zIDAtNzEuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZwppbmRleCBmYzhiZjE4Li5kNTg5OTVjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9LY29uZmlnCkBAIC03LDk3ICs3LDEwMiBAQAogCiAjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEVYWU5PUzQKIAorY29uZmlnIEFSQ0hfRVhZTk9TCisJYm9vbCAiU2Ftc3VuZyBFWFlOT1MiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9IQVNfQkFOREdBUAorCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCisJc2VsZWN0IEFSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IEFSTV9BTUJBCisJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQ09NTU9OX0NMS19TQU1TVU5HCisJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX0kyQyBpZiBJMkMKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HIGlmIFdBVENIRE9HCisJc2VsZWN0IEhBVkVfUzNDX1JUQyBpZiBSVENfQ0xBU1MKKwlzZWxlY3QgUElOQ1RSTAorCXNlbGVjdCBQSU5DVFJMX0VYWU5PUworCXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMgaWYgUE1fUlVOVElNRQorCXNlbGVjdCBTNVBfREVWX01GQworCXNlbGVjdCBTUkFNCisJaGVscAorCSAgU3VwcG9ydCBmb3IgU0FNU1VORyBFWFlOT1MgU29DcyAoRVhZTk9TNC81KQorCiBpZiBBUkNIX0VYWU5PUwogCiBtZW51ICJTQU1TVU5HIEVYWU5PUyBTb0NzIFN1cHBvcnQiCiAKK2NvbmZpZyBBUkNIX0VYWU5PUzMKKwlib29sICJTQU1TVU5HIEVYWU5PUzMiCisJc2VsZWN0IEFSTV9DUFVfU1VTUEVORCBpZiBQTQorCWhlbHAKKwkgIFNhbXN1bmcgRVhZTk9TMyAoQ3JvdGV4LUE3KSBTb0MgYmFzZWQgc3lzdGVtcworCiBjb25maWcgQVJDSF9FWFlOT1M0CiAJYm9vbCAiU0FNU1VORyBFWFlOT1M0IgogCWRlZmF1bHQgeQotCXNlbGVjdCBBUk1fQU1CQQotCXNlbGVjdCBDTEtTUkNfT0YKKwlzZWxlY3QgQVJNX0NQVV9TVVNQRU5EIGlmIFBNX1NMRUVQCiAJc2VsZWN0IENMS1NSQ19TQU1TVU5HX1BXTSBpZiBDUFVfRVhZTk9TNDIxMAogCXNlbGVjdCBDUFVfRVhZTk9TNDIxMAogCXNlbGVjdCBHSUNfTk9OX0JBTktFRAogCXNlbGVjdCBLRVlCT0FSRF9TQU1TVU5HIGlmIElOUFVUX0tFWUJPQVJECi0Jc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKLQlzZWxlY3QgSEFWRV9TTVAKIAlzZWxlY3QgTUlHSFRfSEFWRV9DQUNIRV9MMlgwCi0Jc2VsZWN0IFBJTkNUUkwKLQlzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TIGlmIFBNX1JVTlRJTUUKLQlzZWxlY3QgUzVQX0RFVl9NRkMKIAloZWxwCi0JICBTYW1zdW5nIEVYWU5PUzQgU29DcyBiYXNlZCBzeXN0ZW1zCisJICBTYW1zdW5nIEVYWU5PUzQgKENvcnRleC1BOSkgU29DIGJhc2VkIHN5c3RlbXMKIAogY29uZmlnIEFSQ0hfRVhZTk9TNQogCWJvb2wgIlNBTVNVTkcgRVhZTk9TNSIKLQlzZWxlY3QgQVJNX0FNQkEKLQlzZWxlY3QgQ0xLU1JDX09GCi0Jc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKLQlzZWxlY3QgSEFWRV9TTVAKLQlzZWxlY3QgUElOQ1RSTAorCWRlZmF1bHQgeQogCWhlbHAKLQkgIFNhbXN1bmcgRVhZTk9TNSAoQ29ydGV4LUExNSkgU29DIGJhc2VkIHN5c3RlbXMKKwkgIFNhbXN1bmcgRVhZTk9TNSAoQ29ydGV4LUExNS9BNykgU29DIGJhc2VkIHN5c3RlbXMKIAogY29tbWVudCAiRVhZTk9TIFNvQ3MiCiAKK2NvbmZpZyBTT0NfRVhZTk9TMzI1MAorCWJvb2wgIlNBTVNVTkcgRVhZTk9TMzI1MCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TMworCiBjb25maWcgQ1BVX0VYWU5PUzQyMTAKIAlib29sICJTQU1TVU5HIEVYWU5PUzQyMTAiCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzQKLQlzZWxlY3QgQVJDSF9IQVNfQkFOREdBUAotCXNlbGVjdCBBUk1fQ1BVX1NVU1BFTkQgaWYgUE1fU0xFRVAKLQlzZWxlY3QgUElOQ1RSTF9FWFlOT1MKLQlzZWxlY3QgU0FNU1VOR19ETUFERVYKLQloZWxwCi0JICBFbmFibGUgRVhZTk9TNDIxMCBDUFUgc3VwcG9ydAogCiBjb25maWcgU09DX0VYWU5PUzQyMTIKIAlib29sICJTQU1TVU5HIEVYWU5PUzQyMTIiCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzQKLQlzZWxlY3QgQVJDSF9IQVNfQkFOREdBUAotCXNlbGVjdCBQSU5DVFJMX0VYWU5PUwotCXNlbGVjdCBTQU1TVU5HX0RNQURFVgotCWhlbHAKLQkgIEVuYWJsZSBFWFlOT1M0MjEyIFNvQyBzdXBwb3J0CiAKIGNvbmZpZyBTT0NfRVhZTk9TNDQxMgogCWJvb2wgIlNBTVNVTkcgRVhZTk9TNDQxMiIKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNAotCXNlbGVjdCBBUkNIX0hBU19CQU5ER0FQCi0Jc2VsZWN0IFBJTkNUUkxfRVhZTk9TCi0Jc2VsZWN0IFNBTVNVTkdfRE1BREVWCi0JaGVscAotCSAgRW5hYmxlIEVYWU5PUzQ0MTIgU29DIHN1cHBvcnQKIAogY29uZmlnIFNPQ19FWFlOT1M1MjUwCiAJYm9vbCAiU0FNU1VORyBFWFlOT1M1MjUwIgogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gQVJDSF9FWFlOT1M1Ci0Jc2VsZWN0IEFSQ0hfSEFTX0JBTkRHQVAKLQlzZWxlY3QgUElOQ1RSTF9FWFlOT1MKLQlzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TIGlmIFBNX1JVTlRJTUUKLQlzZWxlY3QgUzVQX0RFVl9NRkMKLQlzZWxlY3QgU0FNU1VOR19ETUFERVYKLQloZWxwCi0JICBFbmFibGUgRVhZTk9TNTI1MCBTb0Mgc3VwcG9ydAorCitjb25maWcgU09DX0VYWU5PUzUyNjAKKwlib29sICJTQU1TVU5HIEVYWU5PUzUyNjAiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzUKKworY29uZmlnIFNPQ19FWFlOT1M1NDEwCisJYm9vbCAiU0FNU1VORyBFWFlOT1M1NDEwIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9FWFlOT1M1CiAKIGNvbmZpZyBTT0NfRVhZTk9TNTQyMAogCWJvb2wgIlNBTVNVTkcgRVhZTk9TNTQyMCIKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNQotCXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMgaWYgUE1fUlVOVElNRQotCWhlbHAKLQkgIEVuYWJsZSBFWFlOT1M1NDIwIFNvQyBzdXBwb3J0CiAKIGNvbmZpZyBTT0NfRVhZTk9TNTQ0MAogCWJvb2wgIlNBTVNVTkcgRVhZTk9TNTQ0MCIKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNQogCXNlbGVjdCBBUkNIX0RNQV9BRERSX1RfNjRCSVQgaWYgQVJNX0xQQUUKLQlzZWxlY3QgQVJDSF9IQVNfQkFOREdBUAogCXNlbGVjdCBBUkNIX0hBU19PUFAKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBBVVRPX1pSRUxBRERSCkBAIC0xMDgsNiArMTEzLDE5IEBACiAJaGVscAogCSAgRW5hYmxlIEVYWU5PUzU0NDAgU29DIHN1cHBvcnQKIAorY29uZmlnIFNPQ19FWFlOT1M1ODAwCisJYm9vbCAiU0FNU1VORyBFWFlOT1M1ODAwIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gU09DX0VYWU5PUzU0MjAKKwogZW5kbWVudQogCitjb25maWcgRVhZTk9TNTQyMF9NQ1BNCisJYm9vbCAiRXh5bm9zNTQyMCBNdWx0aS1DbHVzdGVyIFBNIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNQ1BNICYmIFNPQ19FWFlOT1M1NDIwCisJc2VsZWN0IEFSTV9DQ0kKKwloZWxwCisJICBUaGlzIGlzIG5lZWRlZCB0byBwcm92aWRlIENQVSBhbmQgY2x1c3RlciBwb3dlciBtYW5hZ2VtZW50CisJICBvbiBFeHlub3M1NDIwIGltcGxlbWVudGluZyBiaWcuTElUVExFLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQppbmRleCBhNjU2ZGJlLi43ODhmMjZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZQpAQCAtNSw2ICs1LDggQEAKICMKICMgTGljZW5zZWQgdW5kZXIgR1BMdjIKIAorY2NmbGFncy0kKENPTkZJR19BUkNIX01VTFRJUExBVEZPUk0pICs9IC1JJChzcmN0cmVlKS8kKHNyYykvaW5jbHVkZSAtSSQoc3JjdHJlZSkvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUKKwogb2JqLXkJCQkJOj0KIG9iai1tCQkJCTo9CiBvYmotbgkJCQk6PQpAQCAtMTIsMjAgKzE0LDE4IEBACiAKICMgQ29yZQogCi1vYmotJChDT05GSUdfQVJDSF9FWFlOT1MpCSs9IGV4eW5vcy5vCitvYmotJChDT05GSUdfQVJDSF9FWFlOT1MpCSs9IGV4eW5vcy5vIHBtdS5vIGV4eW5vcy1zbWMubyBmaXJtd2FyZS5vCiAKIG9iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IHBtLm8gc2xlZXAubwogb2JqLSQoQ09ORklHX1BNX0dFTkVSSUNfRE9NQUlOUykgKz0gcG1fZG9tYWlucy5vCi1vYmotJChDT05GSUdfQ1BVX0lETEUpCQkrPSBjcHVpZGxlLm8KLQotb2JqLSQoQ09ORklHX0FSQ0hfRVhZTk9TKQkrPSBwbXUubwogCiBvYmotJChDT05GSUdfU01QKQkJKz0gcGxhdHNtcC5vIGhlYWRzbXAubwogCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpCSs9IGhvdHBsdWcubwotCi1vYmotJChDT05GSUdfQVJDSF9FWFlOT1MpCSs9IGV4eW5vcy1zbWMubwotb2JqLSQoQ09ORklHX0FSQ0hfRVhZTk9TKQkrPSBmaXJtd2FyZS5vCitDRkxBR1NfaG90cGx1Zy5vCQkrPSAtbWFyY2g9YXJtdjctYQogCiBwbHVzX3NlYyA6PSAkKGNhbGwgYXMtaW5zdHIsLmFyY2hfZXh0ZW5zaW9uIHNlYywrc2VjKQogQUZMQUdTX2V4eW5vcy1zbWMubwkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQorCitvYmotJChDT05GSUdfRVhZTk9TNTQyMF9NQ1BNKQkrPSBtY3BtLWV4eW5vcy5vCitDRkxBR1NfbWNwbS1leHlub3MubwkJKz0gLW1hcmNoPWFybXY3LWEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvY29tbW9uLmgKaW5kZXggOWVmM2Y4My4uODBiOTBlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvY29tbW9uLmgKQEAgLTE1LDkgKzE1LDEwNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKKyNkZWZpbmUgRVhZTk9TMzI1MF9TT0NfSUQJMHhFMzQ3MjAwMAorI2RlZmluZSBFWFlOT1MzX1NPQ19NQVNLCTB4RkZGRkYwMDAKKworI2RlZmluZSBFWFlOT1M0MjEwX0NQVV9JRAkweDQzMjEwMDAwCisjZGVmaW5lIEVYWU5PUzQyMTJfQ1BVX0lECTB4NDMyMjAwMDAKKyNkZWZpbmUgRVhZTk9TNDQxMl9DUFVfSUQJMHhFNDQxMjIwMAorI2RlZmluZSBFWFlOT1M0X0NQVV9NQVNLCTB4RkZGRTAwMDAKKworI2RlZmluZSBFWFlOT1M1MjUwX1NPQ19JRAkweDQzNTIwMDAwCisjZGVmaW5lIEVYWU5PUzU0MTBfU09DX0lECTB4RTU0MTAwMDAKKyNkZWZpbmUgRVhZTk9TNTQyMF9TT0NfSUQJMHhFNTQyMDAwMAorI2RlZmluZSBFWFlOT1M1NDQwX1NPQ19JRAkweEU1NDQwMDAwCisjZGVmaW5lIEVYWU5PUzU4MDBfU09DX0lECTB4RTU0MjIwMDAKKyNkZWZpbmUgRVhZTk9TNV9TT0NfTUFTSwkweEZGRkZGMDAwCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhbXN1bmdfY3B1X2lkOworCisjZGVmaW5lIElTX1NBTVNVTkdfQ1BVKG5hbWUsIGlkLCBtYXNrKQkJXAorc3RhdGljIGlubGluZSBpbnQgaXNfc2Ftc3VuZ18jI25hbWUodm9pZCkJXAorewkJCQkJCVwKKwlyZXR1cm4gKChzYW1zdW5nX2NwdV9pZCAmIG1hc2spID09IChpZCAmIG1hc2spKTsJXAorfQorCitJU19TQU1TVU5HX0NQVShleHlub3MzMjUwLCBFWFlOT1MzMjUwX1NPQ19JRCwgRVhZTk9TM19TT0NfTUFTSykKK0lTX1NBTVNVTkdfQ1BVKGV4eW5vczQyMTAsIEVYWU5PUzQyMTBfQ1BVX0lELCBFWFlOT1M0X0NQVV9NQVNLKQorSVNfU0FNU1VOR19DUFUoZXh5bm9zNDIxMiwgRVhZTk9TNDIxMl9DUFVfSUQsIEVYWU5PUzRfQ1BVX01BU0spCitJU19TQU1TVU5HX0NQVShleHlub3M0NDEyLCBFWFlOT1M0NDEyX0NQVV9JRCwgRVhZTk9TNF9DUFVfTUFTSykKK0lTX1NBTVNVTkdfQ1BVKGV4eW5vczUyNTAsIEVYWU5PUzUyNTBfU09DX0lELCBFWFlOT1M1X1NPQ19NQVNLKQorSVNfU0FNU1VOR19DUFUoZXh5bm9zNTQxMCwgRVhZTk9TNTQxMF9TT0NfSUQsIEVYWU5PUzVfU09DX01BU0spCitJU19TQU1TVU5HX0NQVShleHlub3M1NDIwLCBFWFlOT1M1NDIwX1NPQ19JRCwgRVhZTk9TNV9TT0NfTUFTSykKK0lTX1NBTVNVTkdfQ1BVKGV4eW5vczU0NDAsIEVYWU5PUzU0NDBfU09DX0lELCBFWFlOT1M1X1NPQ19NQVNLKQorSVNfU0FNU1VOR19DUFUoZXh5bm9zNTgwMCwgRVhZTk9TNTgwMF9TT0NfSUQsIEVYWU5PUzVfU09DX01BU0spCisKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TMzI1MCkKKyMgZGVmaW5lIHNvY19pc19leHlub3MzMjUwKCkJaXNfc2Ftc3VuZ19leHlub3MzMjUwKCkKKyNlbHNlCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zMzI1MCgpCTAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0VYWU5PUzQyMTApCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zNDIxMCgpCWlzX3NhbXN1bmdfZXh5bm9zNDIxMCgpCisjZWxzZQorIyBkZWZpbmUgc29jX2lzX2V4eW5vczQyMTAoKQkwCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1M0MjEyKQorIyBkZWZpbmUgc29jX2lzX2V4eW5vczQyMTIoKQlpc19zYW1zdW5nX2V4eW5vczQyMTIoKQorI2Vsc2UKKyMgZGVmaW5lIHNvY19pc19leHlub3M0MjEyKCkJMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TNDQxMikKKyMgZGVmaW5lIHNvY19pc19leHlub3M0NDEyKCkJaXNfc2Ftc3VuZ19leHlub3M0NDEyKCkKKyNlbHNlCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zNDQxMigpCTAKKyNlbmRpZgorCisjZGVmaW5lIEVYWU5PUzQyMTBfUkVWXzAJKDB4MCkKKyNkZWZpbmUgRVhZTk9TNDIxMF9SRVZfMV8wCSgweDEwKQorI2RlZmluZSBFWFlOT1M0MjEwX1JFVl8xXzEJKDB4MTEpCisKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TNTI1MCkKKyMgZGVmaW5lIHNvY19pc19leHlub3M1MjUwKCkJaXNfc2Ftc3VuZ19leHlub3M1MjUwKCkKKyNlbHNlCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zNTI1MCgpCTAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0VYWU5PUzU0MTApCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zNTQxMCgpCWlzX3NhbXN1bmdfZXh5bm9zNTQxMCgpCisjZWxzZQorIyBkZWZpbmUgc29jX2lzX2V4eW5vczU0MTAoKQkwCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1M1NDIwKQorIyBkZWZpbmUgc29jX2lzX2V4eW5vczU0MjAoKQlpc19zYW1zdW5nX2V4eW5vczU0MjAoKQorI2Vsc2UKKyMgZGVmaW5lIHNvY19pc19leHlub3M1NDIwKCkJMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TNTQ0MCkKKyMgZGVmaW5lIHNvY19pc19leHlub3M1NDQwKCkJaXNfc2Ftc3VuZ19leHlub3M1NDQwKCkKKyNlbHNlCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zNTQ0MCgpCTAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0VYWU5PUzU4MDApCisjIGRlZmluZSBzb2NfaXNfZXh5bm9zNTgwMCgpCWlzX3NhbXN1bmdfZXh5bm9zNTgwMCgpCisjZWxzZQorIyBkZWZpbmUgc29jX2lzX2V4eW5vczU4MDAoKQkwCisjZW5kaWYKKworI2RlZmluZSBzb2NfaXNfZXh5bm9zNCgpIChzb2NfaXNfZXh5bm9zNDIxMCgpIHx8IHNvY19pc19leHlub3M0MjEyKCkgfHwgXAorCQkJICBzb2NfaXNfZXh5bm9zNDQxMigpKQorI2RlZmluZSBzb2NfaXNfZXh5bm9zNSgpIChzb2NfaXNfZXh5bm9zNTI1MCgpIHx8IHNvY19pc19leHlub3M1NDEwKCkgfHwgXAorCQkJICBzb2NfaXNfZXh5bm9zNTQyMCgpIHx8IHNvY19pc19leHlub3M1ODAwKCkpCisKIHZvaWQgbWN0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgaXJxX2cwLCBpbnQgaXJxX2wwLCBpbnQgaXJxX2wxKTsKIAogc3RydWN0IG1hcF9kZXNjOworZXh0ZXJuIHZvaWQgX19pb21lbSAqc3lzcmFtX25zX2Jhc2VfYWRkcjsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnN5c3JhbV9iYXNlX2FkZHI7CiB2b2lkIGV4eW5vc19pbml0X2lvKHZvaWQpOwogdm9pZCBleHlub3NfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CiB2b2lkIGV4eW5vc19jcHVpZGxlX2luaXQodm9pZCk7CkBAIC02Miw1ICsxNjAsMTUgQEAKIH07CiAKIGV4dGVybiB2b2lkIGV4eW5vc19zeXNfcG93ZXJkb3duX2NvbmYoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpOworZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9wb3dlcl9kb3duKGludCBjcHUpOworZXh0ZXJuIHZvaWQgZXh5bm9zX2NwdV9wb3dlcl91cChpbnQgY3B1KTsKK2V4dGVybiBpbnQgIGV4eW5vc19jcHVfcG93ZXJfc3RhdGUoaW50IGNwdSk7CitleHRlcm4gdm9pZCBleHlub3NfY2x1c3Rlcl9wb3dlcl9kb3duKGludCBjbHVzdGVyKTsKK2V4dGVybiB2b2lkIGV4eW5vc19jbHVzdGVyX3Bvd2VyX3VwKGludCBjbHVzdGVyKTsKK2V4dGVybiBpbnQgIGV4eW5vc19jbHVzdGVyX3Bvd2VyX3N0YXRlKGludCBjbHVzdGVyKTsKK2V4dGVybiB2b2lkIGV4eW5vc19lbnRlcl9hZnRyKHZvaWQpOworCitleHRlcm4gdm9pZCBzNXBfaW5pdF9jcHUodm9pZCBfX2lvbWVtICpjcHVpZF9hZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2Ftc3VuZ19yZXYodm9pZCk7CiAKICNlbmRpZiAvKiBfX0FSQ0hfQVJNX01BQ0hfRVhZTk9TX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9jcHVpZGxlLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9jcHVpZGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1N2NhZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvY3B1aWRsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHVpZGxlLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdV9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KLSNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgotI2luY2x1ZGUgPGFzbS91bmlmaWVkLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdWlkbGUuaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9wbS5oPgotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInJlZ3MtcG11LmgiCi0KLSNkZWZpbmUgUkVHX0RJUkVDVEdPX0FERFIJKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8xID8gXAotCQkJUzVQX0lORk9STTcgOiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzAgPyBcCi0JCQkoUzVQX1ZBX1NZU1JBTSArIDB4MjQpIDogUzVQX0lORk9STTApKQotI2RlZmluZSBSRUdfRElSRUNUR09fRkxBRwkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEgPyBcCi0JCQlTNVBfSU5GT1JNNiA6IChzYW1zdW5nX3JldigpID09IEVYWU5PUzQyMTBfUkVWXzFfMCA/IFwKLQkJCShTNVBfVkFfU1lTUkFNICsgMHgyMCkgOiBTNVBfSU5GT1JNMSkpCi0KLSNkZWZpbmUgUzVQX0NIRUNLX0FGVFIJCTB4RkNCQTBEMTAKLQotI2RlZmluZSBFWFlOT1M1X1BXUl9DVFJMMQkJCShTNVBfVkFfQ01VICsgMHgwMTAyMCkKLSNkZWZpbmUgRVhZTk9TNV9QV1JfQ1RSTDIJCQkoUzVQX1ZBX0NNVSArIDB4MDEwMjQpCi0KLSNkZWZpbmUgUFdSX0NUUkwxX0NPUkUyX0RPV05fUkFUSU8JCSg3IDw8IDI4KQotI2RlZmluZSBQV1JfQ1RSTDFfQ09SRTFfRE9XTl9SQVRJTwkJKDcgPDwgMTYpCi0jZGVmaW5lIFBXUl9DVFJMMV9ESVYyX0RPV05fRU4JCQkoMSA8PCA5KQotI2RlZmluZSBQV1JfQ1RSTDFfRElWMV9ET1dOX0VOCQkJKDEgPDwgOCkKLSNkZWZpbmUgUFdSX0NUUkwxX1VTRV9DT1JFMV9XRkUJCQkoMSA8PCA1KQotI2RlZmluZSBQV1JfQ1RSTDFfVVNFX0NPUkUwX1dGRQkJCSgxIDw8IDQpCi0jZGVmaW5lIFBXUl9DVFJMMV9VU0VfQ09SRTFfV0ZJCQkJKDEgPDwgMSkKLSNkZWZpbmUgUFdSX0NUUkwxX1VTRV9DT1JFMF9XRkkJCQkoMSA8PCAwKQotCi0jZGVmaW5lIFBXUl9DVFJMMl9ESVYyX1VQX0VOCQkJKDEgPDwgMjUpCi0jZGVmaW5lIFBXUl9DVFJMMl9ESVYxX1VQX0VOCQkJKDEgPDwgMjQpCi0jZGVmaW5lIFBXUl9DVFJMMl9EVVJfU1RBTkRCWTJfVkFMCQkoMSA8PCAxNikKLSNkZWZpbmUgUFdSX0NUUkwyX0RVUl9TVEFOREJZMV9WQUwJCSgxIDw8IDgpCi0jZGVmaW5lIFBXUl9DVFJMMl9DT1JFMl9VUF9SQVRJTwkJKDEgPDwgNCkKLSNkZWZpbmUgUFdSX0NUUkwyX0NPUkUxX1VQX1JBVElPCQkoMSA8PCAwKQotCi1zdGF0aWMgaW50IGV4eW5vczRfZW50ZXJfbG93cG93ZXIoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYsCi0JCQkJaW50IGluZGV4KTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVpZGxlX2RldmljZSwgZXh5bm9zNF9jcHVpZGxlX2RldmljZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgZXh5bm9zNF9pZGxlX2RyaXZlciA9IHsKLQkubmFtZQkJCT0gImV4eW5vczRfaWRsZSIsCi0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuc3RhdGVzID0gewotCQlbMF0gPSBBUk1fQ1BVSURMRV9XRklfU1RBVEUsCi0JCVsxXSA9IHsKLQkJCS5lbnRlcgkJCT0gZXh5bm9zNF9lbnRlcl9sb3dwb3dlciwKLQkJCS5leGl0X2xhdGVuY3kJCT0gMzAwLAotCQkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAwMDAsCi0JCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAotCQkJLm5hbWUJCQk9ICJDMSIsCi0JCQkuZGVzYwkJCT0gIkFSTSBwb3dlciBkb3duIiwKLQkJfSwKLQl9LAotCS5zdGF0ZV9jb3VudCA9IDIsCi0JLnNhZmVfc3RhdGVfaW5kZXggPSAwLAotfTsKLQotLyogRXh0LUdJQyBuSVJRL25GSVEgaXMgdGhlIG9ubHkgd2FrZXVwIHNvdXJjZSBpbiBBRlRSICovCi1zdGF0aWMgdm9pZCBleHlub3M0X3NldF93YWtldXBtYXNrKHZvaWQpCi17Ci0JX19yYXdfd3JpdGVsKDB4MDAwMGZmM2UsIFM1UF9XQUtFVVBfTUFTSyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ19wd3JfY3RybCwgZ19kaWFnX3JlZzsKLQotc3RhdGljIHZvaWQgc2F2ZV9jcHVfYXJjaF9yZWdpc3Rlcih2b2lkKQotewotCS8qcmVhZCBwb3dlciBjb250cm9sIHJlZ2lzdGVyKi8KLQlhc20oIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMwLCAwIiA6ICI9ciIoZ19wd3JfY3RybCkgOiA6ICJjYyIpOwotCS8qcmVhZCBkaWFnbm9zdGljIHJlZ2lzdGVyKi8KLQlhc20oIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMwLCAxIiA6ICI9ciIoZ19kaWFnX3JlZykgOiA6ICJjYyIpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgcmVzdG9yZV9jcHVfYXJjaF9yZWdpc3Rlcih2b2lkKQotewotCS8qd3JpdGUgcG93ZXIgY29udHJvbCByZWdpc3RlciovCi0JYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzE1LCBjMCwgMCIgOiA6ICJyIihnX3B3cl9jdHJsKSA6ICJjYyIpOwotCS8qd3JpdGUgZGlhZ25vc3RpYyByZWdpc3RlciovCi0JYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzE1LCBjMCwgMSIgOiA6ICJyIihnX2RpYWdfcmVnKSA6ICJjYyIpOwotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBpZGxlX2ZpbmlzaGVyKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JY3B1X2RvX2lkbGUoKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBleHlub3M0X2VudGVyX2NvcmUwX2FmdHIoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYsCi0JCQkJaW50IGluZGV4KQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JZXh5bm9zNF9zZXRfd2FrZXVwbWFzaygpOwotCi0JLyogU2V0IHZhbHVlIG9mIHBvd2VyIGRvd24gcmVnaXN0ZXIgZm9yIGFmdHIgbW9kZSAqLwotCWV4eW5vc19zeXNfcG93ZXJkb3duX2NvbmYoU1lTX0FGVFIpOwotCi0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhleHlub3NfY3B1X3Jlc3VtZSksIFJFR19ESVJFQ1RHT19BRERSKTsKLQlfX3Jhd193cml0ZWwoUzVQX0NIRUNLX0FGVFIsIFJFR19ESVJFQ1RHT19GTEFHKTsKLQotCXNhdmVfY3B1X2FyY2hfcmVnaXN0ZXIoKTsKLQotCS8qIFNldHRpbmcgQ2VudHJhbCBTZXF1ZW5jZSBSZWdpc3RlciBmb3IgcG93ZXIgZG93biBtb2RlICovCi0JdG1wID0gX19yYXdfcmVhZGwoUzVQX0NFTlRSQUxfU0VRX0NPTkZJR1VSQVRJT04pOwotCXRtcCAmPSB+UzVQX0NFTlRSQUxfTE9XUFdSX0NGRzsKLQlfX3Jhd193cml0ZWwodG1wLCBTNVBfQ0VOVFJBTF9TRVFfQ09ORklHVVJBVElPTik7Ci0KLQljcHVfcG1fZW50ZXIoKTsKLQljcHVfc3VzcGVuZCgwLCBpZGxlX2ZpbmlzaGVyKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoIXNvY19pc19leHlub3M1MjUwKCkpCi0JCXNjdV9lbmFibGUoUzVQX1ZBX1NDVSk7Ci0jZW5kaWYKLQljcHVfcG1fZXhpdCgpOwotCi0JcmVzdG9yZV9jcHVfYXJjaF9yZWdpc3RlcigpOwotCi0JLyoKLQkgKiBJZiBQTVUgZmFpbGVkIHdoaWxlIGVudGVyaW5nIHNsZWVwIG1vZGUsIFdGSSB3aWxsIGJlCi0JICogaWdub3JlZCBieSBQTVUgYW5kIHRoZW4gZXhpdGluZyBjcHVfZG9faWRsZSgpLgotCSAqIFM1UF9DRU5UUkFMX0xPV1BXUl9DRkcgYml0IHdpbGwgbm90IGJlIHNldCBhdXRvbWF0aWNhbGx5Ci0JICogaW4gdGhpcyBzaXR1YXRpb24uCi0JICovCi0JdG1wID0gX19yYXdfcmVhZGwoUzVQX0NFTlRSQUxfU0VRX0NPTkZJR1VSQVRJT04pOwotCWlmICghKHRtcCAmIFM1UF9DRU5UUkFMX0xPV1BXUl9DRkcpKSB7Ci0JCXRtcCB8PSBTNVBfQ0VOVFJBTF9MT1dQV1JfQ0ZHOwotCQlfX3Jhd193cml0ZWwodG1wLCBTNVBfQ0VOVFJBTF9TRVFfQ09ORklHVVJBVElPTik7Ci0JfQotCi0JLyogQ2xlYXIgd2FrZXVwIHN0YXRlIHJlZ2lzdGVyICovCi0JX19yYXdfd3JpdGVsKDB4MCwgUzVQX1dBS0VVUF9TVEFUKTsKLQotCXJldHVybiBpbmRleDsKLX0KLQotc3RhdGljIGludCBleHlub3M0X2VudGVyX2xvd3Bvd2VyKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2LAotCQkJCWludCBpbmRleCkKLXsKLQlpbnQgbmV3X2luZGV4ID0gaW5kZXg7Ci0KLQkvKiBBRlRSIGNhbiBvbmx5IGJlIGVudGVyZWQgd2hlbiBjb3JlcyBvdGhlciB0aGFuIENQVTAgYXJlIG9mZmxpbmUgKi8KLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxIHx8IGRldi0+Y3B1ICE9IDApCi0JCW5ld19pbmRleCA9IGRydi0+c2FmZV9zdGF0ZV9pbmRleDsKLQotCWlmIChuZXdfaW5kZXggPT0gMCkKLQkJcmV0dXJuIGFybV9jcHVpZGxlX3NpbXBsZV9lbnRlcihkZXYsIGRydiwgbmV3X2luZGV4KTsKLQllbHNlCi0JCXJldHVybiBleHlub3M0X2VudGVyX2NvcmUwX2FmdHIoZGV2LCBkcnYsIG5ld19pbmRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1X2NvcmVfZG93bl9jbGsodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0JLyoKLQkgKiBFbmFibGUgYXJtIGNsb2NrIGRvd24gKGluIGlkbGUpIGFuZCBzZXQgYXJtIGRpdmlkZXIKLQkgKiByYXRpb3MgaW4gV0ZJL1dGRSBzdGF0ZS4KLQkgKi8KLQl0bXAgPSBQV1JfQ1RSTDFfQ09SRTJfRE9XTl9SQVRJTyB8IFwKLQkgICAgICBQV1JfQ1RSTDFfQ09SRTFfRE9XTl9SQVRJTyB8IFwKLQkgICAgICBQV1JfQ1RSTDFfRElWMl9ET1dOX0VOCSB8IFwKLQkgICAgICBQV1JfQ1RSTDFfRElWMV9ET1dOX0VOCSB8IFwKLQkgICAgICBQV1JfQ1RSTDFfVVNFX0NPUkUxX1dGRQkgfCBcCi0JICAgICAgUFdSX0NUUkwxX1VTRV9DT1JFMF9XRkUJIHwgXAotCSAgICAgIFBXUl9DVFJMMV9VU0VfQ09SRTFfV0ZJCSB8IFwKLQkgICAgICBQV1JfQ1RSTDFfVVNFX0NPUkUwX1dGSTsKLQlfX3Jhd193cml0ZWwodG1wLCBFWFlOT1M1X1BXUl9DVFJMMSk7Ci0KLQkvKgotCSAqIEVuYWJsZSBhcm0gY2xvY2sgdXAgKG9uIGV4aXRpbmcgaWRsZSkuIFNldCBhcm0gZGl2aWRlcgotCSAqIHJhdGlvcyB3aGVuIG5vdCBpbiBpZGxlIGFsb25nIHdpdGggdGhlIHN0YW5kYnkgZHVyYXRpb24KLQkgKiByYXRpb3MuCi0JICovCi0JdG1wID0gUFdSX0NUUkwyX0RJVjJfVVBfRU4JIHwgXAotCSAgICAgIFBXUl9DVFJMMl9ESVYxX1VQX0VOCSB8IFwKLQkgICAgICBQV1JfQ1RSTDJfRFVSX1NUQU5EQlkyX1ZBTCB8IFwKLQkgICAgICBQV1JfQ1RSTDJfRFVSX1NUQU5EQlkxX1ZBTCB8IFwKLQkgICAgICBQV1JfQ1RSTDJfQ09SRTJfVVBfUkFUSU8JIHwgXAotCSAgICAgIFBXUl9DVFJMMl9DT1JFMV9VUF9SQVRJTzsKLQlfX3Jhd193cml0ZWwodG1wLCBFWFlOT1M1X1BXUl9DVFJMMik7Ci19Ci0KLXN0YXRpYyBpbnQgZXh5bm9zX2NwdWlkbGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgY3B1X2lkLCByZXQ7Ci0Jc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXZpY2U7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkKLQkJZXh5bm9zNV9jb3JlX2Rvd25fY2xrKCk7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczU0NDAoKSkKLQkJZXh5bm9zNF9pZGxlX2RyaXZlci5zdGF0ZV9jb3VudCA9IDE7Ci0KLQlyZXQgPSBjcHVpZGxlX3JlZ2lzdGVyX2RyaXZlcigmZXh5bm9zNF9pZGxlX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1aWRsZSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1X2lkKSB7Ci0JCWRldmljZSA9ICZwZXJfY3B1KGV4eW5vczRfY3B1aWRsZV9kZXZpY2UsIGNwdV9pZCk7Ci0JCWRldmljZS0+Y3B1ID0gY3B1X2lkOwotCi0JCXJldCA9IGNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlKGRldmljZSk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVpZGxlIGRldmljZVxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV4eW5vc19jcHVpZGxlX2RyaXZlciA9IHsKLQkucHJvYmUJPSBleHlub3NfY3B1aWRsZV9wcm9iZSwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJleHlub3NfY3B1aWRsZSIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGV4eW5vc19jcHVpZGxlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2V4eW5vcy5jCmluZGV4IGIzMmE5MDcuLmJjNDNlMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2V4eW5vcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2V4eW5vcy5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgIm1mYy5oIgogI2luY2x1ZGUgInJlZ3MtcG11LmgiCkBAIC0xMTQsNTEgKzExMiw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZXh5bm9zNF9pb2Rlc2MwW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NZU1JBTSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfU1lTUkFNMCksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBleHlub3M0X2lvZGVzYzFbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1lTUkFNLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TWVNSQU0xKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGV4eW5vczQyMTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NZU1JBTV9OUywKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzQyMTBfUEFfU1lTUkFNX05TKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGV4eW5vczR4MTJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NZU1JBTV9OUywKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzR4MTJfUEFfU1lTUkFNX05TKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGV4eW5vczUyNTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NZU1JBTV9OUywKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzUyNTBfUEFfU1lTUkFNX05TKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGV4eW5vczVfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1NZUywKQEAgLTE4MSwxMSArMTM0LDYgQEAKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1lTUkFNLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNV9QQV9TWVNSQU0pLAotCQkubGVuZ3RoCQk9IFNaXzRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9DTVUsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M1X1BBX0NNVSksCiAJCS5sZW5ndGgJCT0gMTQ0ICogU1pfMUssCkBAIC0yMjEsMTIgKzE2OSwxNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3NfY3B1aWRsZSA9IHsKLQkubmFtZQkJPSAiZXh5bm9zX2NwdWlkbGUiLAotCS5pZAkJPSAtMSwKKwkubmFtZSAgICAgICAgICAgICAgPSAiZXh5bm9zX2NwdWlkbGUiLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9IGV4eW5vc19lbnRlcl9hZnRyLAorCS5pZCAgICAgICAgICAgICAgICA9IC0xLAogfTsKIAogdm9pZCBfX2luaXQgZXh5bm9zX2NwdWlkbGVfaW5pdCh2b2lkKQogeworCWlmIChzb2NfaXNfZXh5bm9zNTQ0MCgpKQorCQlyZXR1cm47CisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmV4eW5vc19jcHVpZGxlKTsKIH0KIApAQCAtMjgwLDIwICsyMzIsNiBAQAogCiAJaWYgKHNvY19pc19leHlub3M1KCkpCiAJCWlvdGFibGVfaW5pdChleHlub3M1X2lvZGVzYywgQVJSQVlfU0laRShleHlub3M1X2lvZGVzYykpOwotCi0JaWYgKHNvY19pc19leHlub3M0MjEwKCkpIHsKLQkJaWYgKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMCkKLQkJCWlvdGFibGVfaW5pdChleHlub3M0X2lvZGVzYzAsCi0JCQkJCQlBUlJBWV9TSVpFKGV4eW5vczRfaW9kZXNjMCkpOwotCQllbHNlCi0JCQlpb3RhYmxlX2luaXQoZXh5bm9zNF9pb2Rlc2MxLAotCQkJCQkJQVJSQVlfU0laRShleHlub3M0X2lvZGVzYzEpKTsKLQkJaW90YWJsZV9pbml0KGV4eW5vczQyMTBfaW9kZXNjLCBBUlJBWV9TSVpFKGV4eW5vczQyMTBfaW9kZXNjKSk7Ci0JfQotCWlmIChzb2NfaXNfZXh5bm9zNDIxMigpIHx8IHNvY19pc19leHlub3M0NDEyKCkpCi0JCWlvdGFibGVfaW5pdChleHlub3M0eDEyX2lvZGVzYywgQVJSQVlfU0laRShleHlub3M0eDEyX2lvZGVzYykpOwotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQotCQlpb3RhYmxlX2luaXQoZXh5bm9zNTI1MF9pb2Rlc2MsIEFSUkFZX1NJWkUoZXh5bm9zNTI1MF9pb2Rlc2MpKTsKIH0KIAogdm9pZCBfX2luaXQgZXh5bm9zX2luaXRfaW8odm9pZCkKQEAgLTMwOCwyMSArMjQ2LDEzIEBACiAJZXh5bm9zX21hcF9pbygpOwogfQogCi1zdHJ1Y3QgYnVzX3R5cGUgZXh5bm9zX3N1YnN5cyA9IHsKLQkubmFtZQkJPSAiZXh5bm9zLWNvcmUiLAotCS5kZXZfbmFtZQk9ICJleHlub3MtY29yZSIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBleHlub3NfY29yZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN1YnN5c19zeXN0ZW1fcmVnaXN0ZXIoJmV4eW5vc19zdWJzeXMsIE5VTEwpOwotfQotY29yZV9pbml0Y2FsbChleHlub3NfY29yZV9pbml0KTsKLQogc3RhdGljIGludCBfX2luaXQgZXh5bm9zNF9sMngwX2NhY2hlX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCisJaWYgKCFzb2NfaXNfZXh5bm9zNCgpKQorCQlyZXR1cm4gMDsKKwogCXJldCA9IGwyeDBfb2ZfaW5pdChMMl9BVVhfVkFMLCBMMl9BVVhfTUFTSyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTM3MCwxMiArMzAwLDE1IEBACiB9CiAKIHN0YXRpYyBjaGFyIGNvbnN0ICpleHlub3NfZHRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CisJInNhbXN1bmcsZXh5bm9zMyIsCisJInNhbXN1bmcsZXh5bm9zMzI1MCIsCiAJInNhbXN1bmcsZXh5bm9zNCIsCiAJInNhbXN1bmcsZXh5bm9zNDIxMCIsCiAJInNhbXN1bmcsZXh5bm9zNDIxMiIsCiAJInNhbXN1bmcsZXh5bm9zNDQxMiIsCiAJInNhbXN1bmcsZXh5bm9zNSIsCiAJInNhbXN1bmcsZXh5bm9zNTI1MCIsCisJInNhbXN1bmcsZXh5bm9zNTI2MCIsCiAJInNhbXN1bmcsZXh5bm9zNTQyMCIsCiAJInNhbXN1bmcsZXh5bm9zNTQ0MCIsCiAJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZmlybXdhcmUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2Zpcm13YXJlLmMKaW5kZXggYWEwMWM0Mi4uZWI5MWQyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZmlybXdhcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jCkBAIC0xOCw4ICsxOCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQorI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInNtYy5oIgogCiBzdGF0aWMgaW50IGV4eW5vc19kb19pZGxlKHZvaWQpCkBAIC0zMSw2ICszMCwxMyBAQAogc3RhdGljIGludCBleHlub3NfY3B1X2Jvb3QoaW50IGNwdSkKIHsKIAkvKgorCSAqIEV4eW5vczMyNTAgZG9lc24ndCBuZWVkIHRvIHNlbmQgc21jIGNvbW1hbmQgZm9yIHNlY29uZGFyeSBDUFUgYm9vdAorCSAqIGJlY2F1c2UgRXh5bm9zMzI1MCByZW1vdmVzIFdGRSBpbiBzZWN1cmUgbW9kZS4KKwkgKi8KKwlpZiAoc29jX2lzX2V4eW5vczMyNTAoKSkKKwkJcmV0dXJuIDA7CisKKwkvKgogCSAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mIFNNQ19DTURfQ1BVMUJPT1QgY29tbWFuZCBtZWFucyBDUFUgaWQuCiAJICogQnV0LCBFeHlub3M0MjEyIGhhcyBvbmx5IG9uZSBzZWNvbmRhcnkgQ1BVIHNvIHNlY29uZCBwYXJhbWV0ZXIKIAkgKiBpc24ndCB1c2VkIGZvciBpbmZvcm1pbmcgc2VjdXJlIGZpcm13YXJlIGFib3V0IENQVSBpZC4KQEAgLTQ0LDkgKzUwLDE0IEBACiAKIHN0YXRpYyBpbnQgZXh5bm9zX3NldF9jcHVfYm9vdF9hZGRyKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgYm9vdF9hZGRyKQogewotCXZvaWQgX19pb21lbSAqYm9vdF9yZWcgPSBTNVBfVkFfU1lTUkFNX05TICsgMHgxYzsKKwl2b2lkIF9faW9tZW0gKmJvb3RfcmVnOwogCi0JaWYgKCFzb2NfaXNfZXh5bm9zNDIxMigpKQorCWlmICghc3lzcmFtX25zX2Jhc2VfYWRkcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlib290X3JlZyA9IHN5c3JhbV9uc19iYXNlX2FkZHIgKyAweDFjOworCisJaWYgKCFzb2NfaXNfZXh5bm9zNDIxMigpICYmICFzb2NfaXNfZXh5bm9zMzI1MCgpKQogCQlib290X3JlZyArPSA0KmNwdTsKIAogCV9fcmF3X3dyaXRlbChib290X2FkZHIsIGJvb3RfcmVnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2hvdHBsdWcuYwppbmRleCA1ZWVhZDUzLi42OWZhNDgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9ob3RwbHVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvaG90cGx1Zy5jCkBAIC0xOSw2MSArMTksOSBAQAogI2luY2x1ZGUgPGFzbS9jcDE1Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAKLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicmVncy1wbXUuaCIKIAotc3RhdGljIGlubGluZSB2b2lkIGNwdV9lbnRlcl9sb3dwb3dlcl9hOSh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JYXNtIHZvbGF0aWxlKAotCSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjNSwgMFxuIgotCSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjMTAsIDRcbiIKLQkvKgotCSAqIFR1cm4gb2ZmIGNvaGVyZW5jeQotCSAqLwotCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgotCSIJYmljCSUwLCAlMCwgJTNcbiIKLQkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKLQkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKLQkiCWJpYwklMCwgJTAsICUyXG4iCi0JIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCi0JICA6ICI9JnIiICh2KQotCSAgOiAiciIgKDApLCAiSXIiIChDUl9DKSwgIklyIiAoMHg0MCkKLQkgIDogImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW50ZXJfbG93cG93ZXJfYTE1KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQlhc20gdm9sYXRpbGUoCi0JIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCi0JIgliaWMJJTAsICUwLCAlMVxuIgotCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgotCSAgOiAiPSZyIiAodikKLQkgIDogIklyIiAoQ1JfQykKLQkgIDogImNjIik7Ci0KLQlmbHVzaF9jYWNoZV9sb3VpcygpOwotCi0JYXNtIHZvbGF0aWxlKAotCS8qCi0JKiBUdXJuIG9mZiBjb2hlcmVuY3kKLQkqLwotCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgotCSIJYmljCSUwLCAlMCwgJTFcbiIKLQkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKLQk6ICI9JnIiICh2KQotCTogIklyIiAoMHg0MCkKLQk6ICJjYyIpOwotCi0JaXNiKCk7Ci0JZHNiKCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfbGVhdmVfbG93cG93ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdjsKQEAgLTk2LDcgKzQ0LDcgQEAKIAogCQkvKiBtYWtlIGNwdTEgdG8gYmUgdHVybmVkIG9mZiBhdCBuZXh0IFdGSSBjb21tYW5kICovCiAJCWlmIChjcHUgPT0gMSkKLQkJCV9fcmF3X3dyaXRlbCgwLCBTNVBfQVJNX0NPUkUxX0NPTkZJR1VSQVRJT04pOworCQkJZXh5bm9zX2NwdV9wb3dlcl9kb3duKGNwdSk7CiAKIAkJLyoKIAkJICogaGVyZSdzIHRoZSBXRkkKQEAgLTEzMiwxOSArODAsOCBAQAogdm9pZCBfX3JlZiBleHlub3NfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWludCBzcHVyaW91cyA9IDA7Ci0JaW50IHByaW1hcnlfcGFydCA9IDA7CiAKLQkvKgotCSAqIHdlJ3JlIHJlYWR5IGZvciBzaHV0ZG93biBub3csIHNvIGRvIGl0LgotCSAqIEV4eW5vczQgaXMgQTkgYmFzZWQgd2hpbGUgRXh5bm9zNSBpcyBBMTU7IGNoZWNrIHRoZSBDUFUgcGFydAotCSAqIG51bWJlciBieSByZWFkaW5nIHRoZSBNYWluIElEIHJlZ2lzdGVyIGFuZCB0aGVuIHBlcmZvcm0gdGhlCi0JICogYXBwcm9wcmlhdGUgc2VxdWVuY2UgZm9yIGVudGVyaW5nIGxvdyBwb3dlci4KLQkgKi8KLQlhc20oIm1yYyBwMTUsIDAsICUwLCBjMCwgYzAsIDAiIDogIj1yIihwcmltYXJ5X3BhcnQpIDogOiAiY2MiKTsKLQlpZiAoKHByaW1hcnlfcGFydCAmIDB4ZmZmMCkgPT0gMHhjMGYwKQotCQljcHVfZW50ZXJfbG93cG93ZXJfYTE1KCk7Ci0JZWxzZQotCQljcHVfZW50ZXJfbG93cG93ZXJfYTkoKTsKKwl2N19leGl0X2NvaGVyZW5jeV9mbHVzaChsb3Vpcyk7CiAKIAlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUsICZzcHVyaW91cyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCA3YjA0NmI1Li41NDgyNjlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0yMywxMyArMjMsNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgRVhZTk9TNF9QQV9TWVNSQU0wCQkweDAyMDI1MDAwCi0jZGVmaW5lIEVYWU5PUzRfUEFfU1lTUkFNMQkJMHgwMjAyMDAwMAotI2RlZmluZSBFWFlOT1M1X1BBX1NZU1JBTQkJMHgwMjAyMDAwMAotI2RlZmluZSBFWFlOT1M0MjEwX1BBX1NZU1JBTV9OUwkJMHgwMjAzRjAwMAotI2RlZmluZSBFWFlOT1M0eDEyX1BBX1NZU1JBTV9OUwkJMHgwMjA0RjAwMAotI2RlZmluZSBFWFlOT1M1MjUwX1BBX1NZU1JBTV9OUwkJMHgwMjA0RjAwMAotCiAjZGVmaW5lIEVYWU5PU19QQV9DSElQSUQJCTB4MTAwMDAwMDAKIAogI2RlZmluZSBFWFlOT1M0X1BBX1NZU0NPTgkJMHgxMDAxMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvbWNwbS1leHlub3MuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL21jcG0tZXh5bm9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5OGQwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL21jcG0tZXh5bm9zLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogYXJjaC9hcm0vbWFjaC1leHlub3MvbWNwbS1leHlub3MuYworICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtdmV4cHJlc3MvZGNzY2IuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2FybS1jY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorCisjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vY3AxNS5oPgorI2luY2x1ZGUgPGFzbS9tY3BtLmg+CisKKyNpbmNsdWRlICJyZWdzLXBtdS5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIEVYWU5PUzU0MjBfQ1BVU19QRVJfQ0xVU1RFUgk0CisjZGVmaW5lIEVYWU5PUzU0MjBfTlJfQ0xVU1RFUlMJCTIKKyNkZWZpbmUgTUNQTV9CT09UX0FERFJfT0ZGU0VUCQkweDFjCisKKy8qCisgKiBUaGUgY29tbW9uIHY3X2V4aXRfY29oZXJlbmN5X2ZsdXNoIEFQSSBjb3VsZCBub3QgYmUgdXNlZCBiZWNhdXNlIG9mIHRoZQorICogRXJyYXR1bSA3OTkyNzAgd29ya2Fyb3VuZC4gVGhpcyBtYWNybyBpcyB0aGUgc2FtZSBhcyB0aGUgY29tbW9uIG9uZSAoaW4KKyAqIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCkgZXhjZXB0IGZvciB0aGUgZXJyYXR1bSBoYW5kbGluZy4KKyAqLworI2RlZmluZSBleHlub3NfdjdfZXhpdF9jb2hlcmVuY3lfZmx1c2gobGV2ZWwpIFwKKwlhc20gdm9sYXRpbGUoIFwKKwkic3RtZmQJc3AhLCB7ZnAsIGlwfVxuXHQiXAorCSJtcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgZ2V0IFNDVExSXG5cdCIgXAorCSJiaWMJcjAsIHIwLCAjIl9fc3RyaW5naWZ5KENSX0MpIlxuXHQiIFwKKwkibWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHNldCBTQ1RMUlxuXHQiIFwKKwkiaXNiXG5cdCJcCisJImJsCXY3X2ZsdXNoX2RjYWNoZV8iX19zdHJpbmdpZnkobGV2ZWwpIlxuXHQiIFwKKwkiY2xyZXhcblx0IlwKKwkibXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQlAIGdldCBBQ1RMUlxuXHQiIFwKKwkiYmljCXIwLCByMCwgIygxIDw8IDYpCUAgZGlzYWJsZSBsb2NhbCBjb2hlcmVuY3lcblx0IiBcCisJLyogRHVtbXkgTG9hZCBvZiBhIGRldmljZSByZWdpc3RlciB0byBhdm9pZCBFcnJhdHVtIDc5OTI3MCAqLyBcCisJImxkcglyNCwgWyUwXVxuXHQiIFwKKwkiYW5kCXI0LCByNCwgIzBcblx0IiBcCisJIm9ycglyMCwgcjAsIHI0XG5cdCIgXAorCSJtY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCUAgc2V0IEFDVExSXG5cdCIgXAorCSJpc2Jcblx0IiBcCisJImRzYlxuXHQiIFwKKwkibGRtZmQJc3AhLCB7ZnAsIGlwfSIgXAorCTogXAorCTogIklyIiAoUzVQX0lORk9STTApIFwKKwk6ICJyMCIsICJyMSIsICJyMiIsICJyMyIsICJyNCIsICJyNSIsICJyNiIsICJyNyIsIFwKKwkgICJyOSIsICJyMTAiLCAibHIiLCAibWVtb3J5IikKKworLyoKKyAqIFdlIGNhbid0IHVzZSByZWd1bGFyIHNwaW5sb2Nrcy4gSW4gdGhlIHN3aXRjaGVyIGNhc2UsIGl0IGlzIHBvc3NpYmxlCisgKiBmb3IgYW4gb3V0Ym91bmQgQ1BVIHRvIGNhbGwgcG93ZXJfZG93bigpIGFmdGVyIGl0cyBpbmJvdW5kIGNvdW50ZXJwYXJ0CisgKiBpcyBhbHJlYWR5IGxpdmUgdXNpbmcgdGhlIHNhbWUgbG9naWNhbCBDUFUgbnVtYmVyIHdoaWNoIHRyaXBzIGxvY2tkZXAKKyAqIGRlYnVnZ2luZy4KKyAqLworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBleHlub3NfbWNwbV9sb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBpbnQKK2NwdV91c2VfY291bnRbRVhZTk9TNTQyMF9DUFVTX1BFUl9DTFVTVEVSXVtFWFlOT1M1NDIwX05SX0NMVVNURVJTXTsKKworI2RlZmluZSBleHlub3NfY2x1c3Rlcl91c2VjbnQoY2x1c3RlcikgXAorCShjcHVfdXNlX2NvdW50WzBdW2NsdXN0ZXJdICsgICBcCisJIGNwdV91c2VfY291bnRbMV1bY2x1c3Rlcl0gKyAgIFwKKwkgY3B1X3VzZV9jb3VudFsyXVtjbHVzdGVyXSArICAgXAorCSBjcHVfdXNlX2NvdW50WzNdW2NsdXN0ZXJdKQorCisjZGVmaW5lIGV4eW5vc19jbHVzdGVyX3VudXNlZChjbHVzdGVyKSAhZXh5bm9zX2NsdXN0ZXJfdXNlY250KGNsdXN0ZXIpCisKK3N0YXRpYyBpbnQgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfY29udHJvbCh1bnNpZ25lZCBpbnQgY2x1c3RlciwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdHJpZXMgPSAxMDA7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmIChlbmFibGUpIHsKKwkJZXh5bm9zX2NsdXN0ZXJfcG93ZXJfdXAoY2x1c3Rlcik7CisJCXZhbCA9IFM1UF9DT1JFX0xPQ0FMX1BXUl9FTjsKKwl9IGVsc2UgeworCQlleHlub3NfY2x1c3Rlcl9wb3dlcl9kb3duKGNsdXN0ZXIpOworCQl2YWwgPSAwOworCX0KKworCS8qIFdhaXQgdW50aWwgY2x1c3RlciBwb3dlciBjb250cm9sIGlzIGFwcGxpZWQgKi8KKwl3aGlsZSAodHJpZXMtLSkgeworCQlpZiAoZXh5bm9zX2NsdXN0ZXJfcG93ZXJfc3RhdGUoY2x1c3RlcikgPT0gdmFsKQorCQkJcmV0dXJuIDA7CisKKwkJY3B1X3JlbGF4KCk7CisJfQorCXByX2RlYnVnKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgY2x1c3RlciAldSB0byBwb3dlciAlc1xuIiwgY2x1c3RlciwKKwkJZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IGV4eW5vc19wb3dlcl91cCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY2x1c3RlcikKK3sKKwl1bnNpZ25lZCBpbnQgY3B1bnIgPSBjcHUgKyAoY2x1c3RlciAqIEVYWU5PUzU0MjBfQ1BVU19QRVJfQ0xVU1RFUik7CisJaW50IGVyciA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IGNwdSAldSBjbHVzdGVyICV1XG4iLCBfX2Z1bmNfXywgY3B1LCBjbHVzdGVyKTsKKwlpZiAoY3B1ID49IEVYWU5PUzU0MjBfQ1BVU19QRVJfQ0xVU1RFUiB8fAorCQljbHVzdGVyID49IEVYWU5PUzU0MjBfTlJfQ0xVU1RFUlMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGlzIGNhbGxlZCB3aXRoIElSUXMgZW5hYmxlZCwgYW5kIG5vIGFyY2hfc3Bpbl9sb2NrX2lycQorCSAqIHZhcmlhbnQgZXhpc3RzLCB3ZSBuZWVkIHRvIGRpc2FibGUgSVJRcyBtYW51YWxseSBoZXJlLgorCSAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJYXJjaF9zcGluX2xvY2soJmV4eW5vc19tY3BtX2xvY2spOworCisJY3B1X3VzZV9jb3VudFtjcHVdW2NsdXN0ZXJdKys7CisJaWYgKGNwdV91c2VfY291bnRbY3B1XVtjbHVzdGVyXSA9PSAxKSB7CisJCWJvb2wgd2FzX2NsdXN0ZXJfZG93biA9CisJCQkoZXh5bm9zX2NsdXN0ZXJfdXNlY250KGNsdXN0ZXIpID09IDEpOworCisJCS8qCisJCSAqIFR1cm4gb24gdGhlIGNsdXN0ZXIgKEwyL0NPTU1PTikgYW5kIHRoZW4gcG93ZXIgb24gdGhlCisJCSAqIGNvcmVzLgorCQkgKi8KKwkJaWYgKHdhc19jbHVzdGVyX2Rvd24pCisJCQllcnIgPSBleHlub3NfY2x1c3Rlcl9wb3dlcl9jb250cm9sKGNsdXN0ZXIsIDEpOworCisJCWlmICghZXJyKQorCQkJZXh5bm9zX2NwdV9wb3dlcl91cChjcHVucik7CisJCWVsc2UKKwkJCWV4eW5vc19jbHVzdGVyX3Bvd2VyX2NvbnRyb2woY2x1c3RlciwgMCk7CisJfSBlbHNlIGlmIChjcHVfdXNlX2NvdW50W2NwdV1bY2x1c3Rlcl0gIT0gMikgeworCQkvKgorCQkgKiBUaGUgb25seSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgorCQkgKiAwID0gQ1BVIGRvd24KKwkJICogMSA9IENQVSAoc3RpbGwpIHVwCisJCSAqIDIgPSBDUFUgcmVxdWVzdGVkIHRvIGJlIHVwIGJlZm9yZSBpdCBoYWQgYSBjaGFuY2UKKwkJICogICAgIHRvIGFjdHVhbGx5IG1ha2UgaXRzZWxmIGRvd24uCisJCSAqIEFueSBvdGhlciB2YWx1ZSBpcyBhIGJ1Zy4KKwkJICovCisJCUJVRygpOworCX0KKworCWFyY2hfc3Bpbl91bmxvY2soJmV4eW5vc19tY3BtX2xvY2spOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBzdGFjayBkYXRhIHRvIGJlIHZpc2libGUgdGhyb3VnaCBwb3dlciBkb3duCisgKiBhbmQgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgb24gcHJvY2Vzc29ycyBsaWtlIEExNSBhbmQgQTcgdGhhdCBoaXQgdGhlIGNhY2hlCisgKiB3aXRoIHRoZSBDIGJpdCBjbGVhciBpbiB0aGUgU0NUTFIgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGV4eW5vc19wb3dlcl9kb3duKHZvaWQpCit7CisJdW5zaWduZWQgaW50IG1waWRyLCBjcHUsIGNsdXN0ZXI7CisJYm9vbCBsYXN0X21hbiA9IGZhbHNlLCBza2lwX3dmaSA9IGZhbHNlOworCXVuc2lnbmVkIGludCBjcHVucjsKKworCW1waWRyID0gcmVhZF9jcHVpZF9tcGlkcigpOworCWNwdSA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKwljbHVzdGVyID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCWNwdW5yID0gIGNwdSArIChjbHVzdGVyICogRVhZTk9TNTQyMF9DUFVTX1BFUl9DTFVTVEVSKTsKKworCXByX2RlYnVnKCIlczogY3B1ICV1IGNsdXN0ZXIgJXVcbiIsIF9fZnVuY19fLCBjcHUsIGNsdXN0ZXIpOworCUJVR19PTihjcHUgPj0gRVhZTk9TNTQyMF9DUFVTX1BFUl9DTFVTVEVSIHx8CisJCQljbHVzdGVyID49IEVYWU5PUzU0MjBfTlJfQ0xVU1RFUlMpOworCisJX19tY3BtX2NwdV9nb2luZ19kb3duKGNwdSwgY2x1c3Rlcik7CisKKwlhcmNoX3NwaW5fbG9jaygmZXh5bm9zX21jcG1fbG9jayk7CisJQlVHX09OKF9fbWNwbV9jbHVzdGVyX3N0YXRlKGNsdXN0ZXIpICE9IENMVVNURVJfVVApOworCWNwdV91c2VfY291bnRbY3B1XVtjbHVzdGVyXS0tOworCWlmIChjcHVfdXNlX2NvdW50W2NwdV1bY2x1c3Rlcl0gPT0gMCkgeworCQlleHlub3NfY3B1X3Bvd2VyX2Rvd24oY3B1bnIpOworCisJCWlmIChleHlub3NfY2x1c3Rlcl91bnVzZWQoY2x1c3RlcikpCisJCQkvKiBUT0RPOiBUdXJuIG9mZiB0aGUgY2x1c3RlciBoZXJlIHRvIHNhdmUgcG93ZXIuICovCisJCQlsYXN0X21hbiA9IHRydWU7CisJfSBlbHNlIGlmIChjcHVfdXNlX2NvdW50W2NwdV1bY2x1c3Rlcl0gPT0gMSkgeworCQkvKgorCQkgKiBBIHBvd2VyX3VwIHJlcXVlc3Qgd2VudCBhaGVhZCBvZiB1cy4KKwkJICogRXZlbiBpZiB3ZSBkbyBub3Qgd2FudCB0byBzaHV0IHRoaXMgQ1BVIGRvd24sCisJCSAqIHRoZSBjYWxsZXIgZXhwZWN0cyBhIGNlcnRhaW4gc3RhdGUgYXMgaWYgdGhlIFdGSQorCQkgKiB3YXMgYWJvcnRlZC4gIFNvIGxldCdzIGNvbnRpbnVlIHdpdGggY2FjaGUgY2xlYW5pbmcuCisJCSAqLworCQlza2lwX3dmaSA9IHRydWU7CisJfSBlbHNlIHsKKwkJQlVHKCk7CisJfQorCisJaWYgKGxhc3RfbWFuICYmIF9fbWNwbV9vdXRib3VuZF9lbnRlcl9jcml0aWNhbChjcHUsIGNsdXN0ZXIpKSB7CisJCWFyY2hfc3Bpbl91bmxvY2soJmV4eW5vc19tY3BtX2xvY2spOworCisJCWlmIChyZWFkX2NwdWlkX3BhcnRfbnVtYmVyKCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BMTUpIHsKKwkJCS8qCisJCQkgKiBPbiB0aGUgQ29ydGV4LUExNSB3ZSBuZWVkIHRvIGRpc2FibGUKKwkJCSAqIEwyIHByZWZldGNoaW5nIGJlZm9yZSBmbHVzaGluZyB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWFzbSB2b2xhdGlsZSgKKwkJCSJtY3IJcDE1LCAxLCAlMCwgYzE1LCBjMCwgM1xuXHQiCisJCQkiaXNiXG5cdCIKKwkJCSJkc2IiCisJCQk6IDogInIiICgweDQwMCkpOworCQl9CisKKwkJLyogRmx1c2ggYWxsIGNhY2hlIGxldmVscyBmb3IgdGhpcyBjbHVzdGVyLiAqLworCQlleHlub3NfdjdfZXhpdF9jb2hlcmVuY3lfZmx1c2goYWxsKTsKKworCQkvKgorCQkgKiBEaXNhYmxlIGNsdXN0ZXItbGV2ZWwgY29oZXJlbmN5IGJ5IG1hc2tpbmcKKwkJICogaW5jb21pbmcgc25vb3BzIGFuZCBEVk0gbWVzc2FnZXM6CisJCSAqLworCQljY2lfZGlzYWJsZV9wb3J0X2J5X2NwdShtcGlkcik7CisKKwkJX19tY3BtX291dGJvdW5kX2xlYXZlX2NyaXRpY2FsKGNsdXN0ZXIsIENMVVNURVJfRE9XTik7CisJfSBlbHNlIHsKKwkJYXJjaF9zcGluX3VubG9jaygmZXh5bm9zX21jcG1fbG9jayk7CisKKwkJLyogRGlzYWJsZSBhbmQgZmx1c2ggdGhlIGxvY2FsIENQVSBjYWNoZS4gKi8KKwkJZXh5bm9zX3Y3X2V4aXRfY29oZXJlbmN5X2ZsdXNoKGxvdWlzKTsKKwl9CisKKwlfX21jcG1fY3B1X2Rvd24oY3B1LCBjbHVzdGVyKTsKKworCS8qIE5vdyB3ZSBhcmUgcHJlcGFyZWQgZm9yIHBvd2VyLWRvd24sIGRvIGl0OiAqLworCWlmICghc2tpcF93ZmkpCisJCXdmaSgpOworCisJLyogTm90IGRlYWQgYXQgdGhpcyBwb2ludD8gIExldCBvdXIgY2FsbGVyIGNvcGUuICovCit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3dhaXRfZm9yX3Bvd2VyZG93bih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY2x1c3RlcikKK3sKKwl1bnNpZ25lZCBpbnQgdHJpZXMgPSAxMDA7CisJdW5zaWduZWQgaW50IGNwdW5yID0gY3B1ICsgKGNsdXN0ZXIgKiBFWFlOT1M1NDIwX0NQVVNfUEVSX0NMVVNURVIpOworCisJcHJfZGVidWcoIiVzOiBjcHUgJXUgY2x1c3RlciAldVxuIiwgX19mdW5jX18sIGNwdSwgY2x1c3Rlcik7CisJQlVHX09OKGNwdSA+PSBFWFlOT1M1NDIwX0NQVVNfUEVSX0NMVVNURVIgfHwKKwkJCWNsdXN0ZXIgPj0gRVhZTk9TNTQyMF9OUl9DTFVTVEVSUyk7CisKKwkvKiBXYWl0IGZvciB0aGUgY29yZSBzdGF0ZSB0byBiZSBPRkYgKi8KKwl3aGlsZSAodHJpZXMtLSkgeworCQlpZiAoQUNDRVNTX09OQ0UoY3B1X3VzZV9jb3VudFtjcHVdW2NsdXN0ZXJdKSA9PSAwKSB7CisJCQlpZiAoKGV4eW5vc19jcHVfcG93ZXJfc3RhdGUoY3B1bnIpID09IDApKQorCQkJCXJldHVybiAwOyAvKiBzdWNjZXNzOiB0aGUgQ1BVIGlzIGhhbHRlZCAqLworCQl9CisKKwkJLyogT3RoZXJ3aXNlLCB3YWl0IGFuZCByZXRyeTogKi8KKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAtRVRJTUVET1VUOyAvKiB0aW1lb3V0ICovCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWNwbV9wbGF0Zm9ybV9vcHMgZXh5bm9zX3Bvd2VyX29wcyA9IHsKKwkucG93ZXJfdXAJCT0gZXh5bm9zX3Bvd2VyX3VwLAorCS5wb3dlcl9kb3duCQk9IGV4eW5vc19wb3dlcl9kb3duLAorCS53YWl0X2Zvcl9wb3dlcmRvd24JPSBleHlub3Nfd2FpdF9mb3JfcG93ZXJkb3duLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vc19tY3BtX3VzYWdlX2NvdW50X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbXBpZHIsIGNwdSwgY2x1c3RlcjsKKworCW1waWRyID0gcmVhZF9jcHVpZF9tcGlkcigpOworCWNwdSA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKwljbHVzdGVyID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCisJcHJfZGVidWcoIiVzOiBjcHUgJXUgY2x1c3RlciAldVxuIiwgX19mdW5jX18sIGNwdSwgY2x1c3Rlcik7CisJQlVHX09OKGNwdSA+PSBFWFlOT1M1NDIwX0NQVVNfUEVSX0NMVVNURVIgIHx8CisJCQljbHVzdGVyID49IEVYWU5PUzU0MjBfTlJfQ0xVU1RFUlMpOworCisJY3B1X3VzZV9jb3VudFtjcHVdW2NsdXN0ZXJdID0gMTsKK30KKworLyoKKyAqIEVuYWJsZSBjbHVzdGVyLWxldmVsIGNvaGVyZW5jeSwgaW4gcHJlcGFyYXRpb24gZm9yIHR1cm5pbmcgb24gdGhlIE1NVS4KKyAqLworc3RhdGljIHZvaWQgX19uYWtlZCBleHlub3NfcG1fcG93ZXJfdXBfc2V0dXAodW5zaWduZWQgaW50IGFmZmluaXR5X2xldmVsKQoreworCWFzbSB2b2xhdGlsZSAoIlxuIgorCSJjbXAJcjAsICMxXG4iCisJImJ4bmUJbHJcbiIKKwkiYgljY2lfZW5hYmxlX3BvcnRfZm9yX3NlbGYiKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZXh5bm9zX2R0X21jcG1fbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQyMCIgfSwKKwl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTgwMCIgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV4eW5vc19tY3BtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJdm9pZCBfX2lvbWVtICpuc19zcmFtX2Jhc2VfYWRkcjsKKwlpbnQgcmV0OworCisJbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBleHlub3NfZHRfbWNwbV9tYXRjaCk7CisJaWYgKCFub2RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlvZl9ub2RlX3B1dChub2RlKTsKKworCWlmICghY2NpX3Byb2JlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0tbnMiKTsKKwlpZiAoIW5vZGUpCisJCXJldHVybiAtRU5PREVWOworCisJbnNfc3JhbV9iYXNlX2FkZHIgPSBvZl9pb21hcChub2RlLCAwKTsKKwlvZl9ub2RlX3B1dChub2RlKTsKKwlpZiAoIW5zX3NyYW1fYmFzZV9hZGRyKSB7CisJCXByX2VycigiZmFpbGVkIHRvIG1hcCBub24tc2VjdXJlIGlSQU0gYmFzZSBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBUbyBpbmNyZWFzZSB0aGUgc3RhYmlsaXR5IG9mIEtGQyByZXNldCB3ZSBuZWVkIHRvIHByb2dyYW0KKwkgKiB0aGUgUE1VIFNQQVJFMyByZWdpc3RlcgorCSAqLworCV9fcmF3X3dyaXRlbChFWFlOT1M1NDIwX1NXUkVTRVRfS0ZDX1NFTCwgUzVQX1BNVV9TUEFSRTMpOworCisJZXh5bm9zX21jcG1fdXNhZ2VfY291bnRfaW5pdCgpOworCisJcmV0ID0gbWNwbV9wbGF0Zm9ybV9yZWdpc3RlcigmZXh5bm9zX3Bvd2VyX29wcyk7CisJaWYgKCFyZXQpCisJCXJldCA9IG1jcG1fc3luY19pbml0KGV4eW5vc19wbV9wb3dlcl91cF9zZXR1cCk7CisJaWYgKHJldCkgeworCQlpb3VubWFwKG5zX3NyYW1fYmFzZV9hZGRyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltY3BtX3NtcF9zZXRfb3BzKCk7CisKKwlwcl9pbmZvKCJFeHlub3MgTUNQTSBzdXBwb3J0IGluc3RhbGxlZFxuIik7CisKKwkvKgorCSAqIEZ1dHVyZSBlbnRyaWVzIGludG8gdGhlIGtlcm5lbCBjYW4gbm93IGdvCisJICogdGhyb3VnaCB0aGUgY2x1c3RlciBlbnRyeSB2ZWN0b3JzLgorCSAqLworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMobWNwbV9lbnRyeV9wb2ludCksCisJCQluc19zcmFtX2Jhc2VfYWRkciArIE1DUE1fQk9PVF9BRERSX09GRlNFVCk7CisKKwlpb3VubWFwKG5zX3NyYW1fYmFzZV9hZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKK2Vhcmx5X2luaXRjYWxsKGV4eW5vc19tY3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcGxhdHNtcC5jCmluZGV4IDAzZTVlOWYuLmVjMDI0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbGF0c21wLmMKQEAgLTIwLDI0ICsyMCw0NSBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJyZWdzLXBtdS5oIgogCiBleHRlcm4gdm9pZCBleHlub3M0X3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogCit2b2lkIF9faW9tZW0gKnN5c3JhbV9iYXNlX2FkZHI7Cit2b2lkIF9faW9tZW0gKnN5c3JhbV9uc19iYXNlX2FkZHI7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3Nfc21wX3ByZXBhcmVfc3lzcmFtKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5vZGUsIE5VTEwsICJzYW1zdW5nLGV4eW5vczQyMTAtc3lzcmFtIikgeworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpCisJCQljb250aW51ZTsKKwkJc3lzcmFtX2Jhc2VfYWRkciA9IG9mX2lvbWFwKG5vZGUsIDApOworCQlicmVhazsKKwl9CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobm9kZSwgTlVMTCwgInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0tbnMiKSB7CisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkKKwkJCWNvbnRpbnVlOworCQlzeXNyYW1fbnNfYmFzZV9hZGRyID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmNwdV9ib290X3JlZ19iYXNlKHZvaWQpCiB7CiAJaWYgKHNvY19pc19leHlub3M0MjEwKCkgJiYgc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEpCiAJCXJldHVybiBTNVBfSU5GT1JNNTsKLQlyZXR1cm4gUzVQX1ZBX1NZU1JBTTsKKwlyZXR1cm4gc3lzcmFtX2Jhc2VfYWRkcjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmNwdV9ib290X3JlZyhpbnQgY3B1KQpAQCAtNDUsOSArNjYsMTEgQEAKIAl2b2lkIF9faW9tZW0gKmJvb3RfcmVnOwogCiAJYm9vdF9yZWcgPSBjcHVfYm9vdF9yZWdfYmFzZSgpOworCWlmICghYm9vdF9yZWcpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCWlmIChzb2NfaXNfZXh5bm9zNDQxMigpKQogCQlib290X3JlZyArPSA0KmNwdTsKLQllbHNlIGlmIChzb2NfaXNfZXh5bm9zNTQyMCgpKQorCWVsc2UgaWYgKHNvY19pc19leHlub3M1NDIwKCkgfHwgc29jX2lzX2V4eW5vczU4MDAoKSkKIAkJYm9vdF9yZWcgKz0gNDsKIAlyZXR1cm4gYm9vdF9yZWc7CiB9CkBAIC05MCw2ICsxMTMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIHBoeXNfY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJaW50IHJldCA9IC1FTk9TWVM7CiAKIAkvKgogCSAqIFNldCBzeW5jaHJvbmlzYXRpb24gc3RhdGUgYmV0d2VlbiB0aGlzIGJvb3QgcHJvY2Vzc29yCkBAIC0xMDcsMTUgKzEzMSwxMiBAQAogCSAqLwogCXdyaXRlX3Blbl9yZWxlYXNlKHBoeXNfY3B1KTsKIAotCWlmICghKF9fcmF3X3JlYWRsKFM1UF9BUk1fQ09SRTFfU1RBVFVTKSAmIFM1UF9DT1JFX0xPQ0FMX1BXUl9FTikpIHsKLQkJX19yYXdfd3JpdGVsKFM1UF9DT1JFX0xPQ0FMX1BXUl9FTiwKLQkJCSAgICAgUzVQX0FSTV9DT1JFMV9DT05GSUdVUkFUSU9OKTsKLQorCWlmICghZXh5bm9zX2NwdV9wb3dlcl9zdGF0ZShjcHUpKSB7CisJCWV4eW5vc19jcHVfcG93ZXJfdXAoY3B1KTsKIAkJdGltZW91dCA9IDEwOwogCiAJCS8qIHdhaXQgbWF4IDEwIG1zIHVudGlsIGNwdTEgaXMgb24gKi8KLQkJd2hpbGUgKChfX3Jhd19yZWFkbChTNVBfQVJNX0NPUkUxX1NUQVRVUykKLQkJCSYgUzVQX0NPUkVfTE9DQUxfUFdSX0VOKSAhPSBTNVBfQ09SRV9MT0NBTF9QV1JfRU4pIHsKKwkJd2hpbGUgKGV4eW5vc19jcHVfcG93ZXJfc3RhdGUoY3B1KSAhPSBTNVBfQ09SRV9MT0NBTF9QV1JfRU4pIHsKIAkJCWlmICh0aW1lb3V0LS0gPT0gMCkKIAkJCQlicmVhazsKIApAQCAtMTQ2LDggKzE2NywxOCBAQAogCQkgKiBUcnkgdG8gc2V0IGJvb3QgYWRkcmVzcyB1c2luZyBmaXJtd2FyZSBmaXJzdAogCQkgKiBhbmQgZmFsbCBiYWNrIHRvIGJvb3QgcmVnaXN0ZXIgaWYgaXQgZmFpbHMuCiAJCSAqLwotCQlpZiAoY2FsbF9maXJtd2FyZV9vcChzZXRfY3B1X2Jvb3RfYWRkciwgcGh5c19jcHUsIGJvb3RfYWRkcikpCisJCXJldCA9IGNhbGxfZmlybXdhcmVfb3Aoc2V0X2NwdV9ib290X2FkZHIsIHBoeXNfY3B1LCBib290X2FkZHIpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PU1lTKQorCQkJZ290byBmYWlsOworCQlpZiAocmV0ID09IC1FTk9TWVMpIHsKKwkJCXZvaWQgX19pb21lbSAqYm9vdF9yZWcgPSBjcHVfYm9vdF9yZWcocGh5c19jcHUpOworCisJCQlpZiAoSVNfRVJSKGJvb3RfcmVnKSkgeworCQkJCXJldCA9IFBUUl9FUlIoYm9vdF9yZWcpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KIAkJCV9fcmF3X3dyaXRlbChib290X2FkZHIsIGNwdV9ib290X3JlZyhwaHlzX2NwdSkpOworCQl9CiAKIAkJY2FsbF9maXJtd2FyZV9vcChjcHVfYm9vdCwgcGh5c19jcHUpOwogCkBAIC0xNjMsOSArMTk0LDEwIEBACiAJICogbm93IHRoZSBzZWNvbmRhcnkgY29yZSBpcyBzdGFydGluZyB1cCBsZXQgaXQgcnVuIGl0cwogCSAqIGNhbGlicmF0aW9ucywgdGhlbiB3YWl0IGZvciBpdCB0byBmaW5pc2gKIAkgKi8KK2ZhaWw6CiAJc3Bpbl91bmxvY2soJmJvb3RfbG9jayk7CiAKLQlyZXR1cm4gcGVuX3JlbGVhc2UgIT0gLTEgPyAtRU5PU1lTIDogMDsKKwlyZXR1cm4gcGVuX3JlbGVhc2UgIT0gLTEgPyByZXQgOiAwOwogfQogCiAvKgpAQCAtMjA1LDYgKzIzNyw4IEBACiAJaWYgKHJlYWRfY3B1aWRfcGFydF9udW1iZXIoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQogCQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIoKSk7CiAKKwlleHlub3Nfc21wX3ByZXBhcmVfc3lzcmFtKCk7CisKIAkvKgogCSAqIFdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlCiAJICogc3lzdGVtLXdpZGUgZmxhZ3MgcmVnaXN0ZXIuIFRoZSBib290IG1vbml0b3Igd2FpdHMKQEAgLTIxNywxMiArMjUxLDIxIEBACiAJZm9yIChpID0gMTsgaSA8IG1heF9jcHVzOyArK2kpIHsKIAkJdW5zaWduZWQgbG9uZyBwaHlzX2NwdTsKIAkJdW5zaWduZWQgbG9uZyBib290X2FkZHI7CisJCWludCByZXQ7CiAKIAkJcGh5c19jcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CiAJCWJvb3RfYWRkciA9IHZpcnRfdG9fcGh5cyhleHlub3M0X3NlY29uZGFyeV9zdGFydHVwKTsKIAotCQlpZiAoY2FsbF9maXJtd2FyZV9vcChzZXRfY3B1X2Jvb3RfYWRkciwgcGh5c19jcHUsIGJvb3RfYWRkcikpCisJCXJldCA9IGNhbGxfZmlybXdhcmVfb3Aoc2V0X2NwdV9ib290X2FkZHIsIHBoeXNfY3B1LCBib290X2FkZHIpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PU1lTKQorCQkJYnJlYWs7CisJCWlmIChyZXQgPT0gLUVOT1NZUykgeworCQkJdm9pZCBfX2lvbWVtICpib290X3JlZyA9IGNwdV9ib290X3JlZyhwaHlzX2NwdSk7CisKKwkJCWlmIChJU19FUlIoYm9vdF9yZWcpKQorCQkJCWJyZWFrOwogCQkJX19yYXdfd3JpdGVsKGJvb3RfYWRkciwgY3B1X2Jvb3RfcmVnKHBoeXNfY3B1KSk7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbS5jCmluZGV4IDE1YWYwY2UuLjg3YzBkMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcG0uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMjYsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wbS1jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L3BsbC5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcm9tLmg+CkBAIC0xMDAsOSArMTAwLDE0MSBAQAogCXJldHVybiAtRU5PRU5UOwogfQogCisvKioKKyAqIGV4eW5vc19jb3JlX3Bvd2VyX2Rvd24gOiBwb3dlciBkb3duIHRoZSBzcGVjaWZpZWQgY3B1CisgKiBAY3B1IDogdGhlIGNwdSB0byBwb3dlciBkb3duCisgKgorICogUG93ZXIgZG93biB0aGUgc3BlY2lmaWVkIGNwdS4gVGhlIHNlcXVlbmNlIG11c3QgYmUgZmluaXNoZWQgYnkgYQorICogY2FsbCB0byBjcHVfZG9faWRsZSgpCisgKgorICovCit2b2lkIGV4eW5vc19jcHVfcG93ZXJfZG93bihpbnQgY3B1KQoreworCV9fcmF3X3dyaXRlbCgwLCBFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihjcHUpKTsKK30KKworLyoqCisgKiBleHlub3NfY3B1X3Bvd2VyX3VwIDogcG93ZXIgdXAgdGhlIHNwZWNpZmllZCBjcHUKKyAqIEBjcHUgOiB0aGUgY3B1IHRvIHBvd2VyIHVwCisgKgorICogUG93ZXIgdXAgdGhlIHNwZWNpZmllZCBjcHUKKyAqLwordm9pZCBleHlub3NfY3B1X3Bvd2VyX3VwKGludCBjcHUpCit7CisJX19yYXdfd3JpdGVsKFM1UF9DT1JFX0xPQ0FMX1BXUl9FTiwKKwkJICAgICBFWFlOT1NfQVJNX0NPUkVfQ09ORklHVVJBVElPTihjcHUpKTsKK30KKworLyoqCisgKiBleHlub3NfY3B1X3Bvd2VyX3N0YXRlIDogcmV0dXJucyB0aGUgcG93ZXIgc3RhdGUgb2YgdGhlIGNwdQorICogQGNwdSA6IHRoZSBjcHUgdG8gcmV0cmlldmUgdGhlIHBvd2VyIHN0YXRlIGZyb20KKyAqCisgKi8KK2ludCBleHlub3NfY3B1X3Bvd2VyX3N0YXRlKGludCBjcHUpCit7CisJcmV0dXJuIChfX3Jhd19yZWFkbChFWFlOT1NfQVJNX0NPUkVfU1RBVFVTKGNwdSkpICYKKwkJCVM1UF9DT1JFX0xPQ0FMX1BXUl9FTik7Cit9CisKKy8qKgorICogZXh5bm9zX2NsdXN0ZXJfcG93ZXJfZG93biA6IHBvd2VyIGRvd24gdGhlIHNwZWNpZmllZCBjbHVzdGVyCisgKiBAY2x1c3RlciA6IHRoZSBjbHVzdGVyIHRvIHBvd2VyIGRvd24KKyAqLwordm9pZCBleHlub3NfY2x1c3Rlcl9wb3dlcl9kb3duKGludCBjbHVzdGVyKQoreworCV9fcmF3X3dyaXRlbCgwLCBFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oY2x1c3RlcikpOworfQorCisvKioKKyAqIGV4eW5vc19jbHVzdGVyX3Bvd2VyX3VwIDogcG93ZXIgdXAgdGhlIHNwZWNpZmllZCBjbHVzdGVyCisgKiBAY2x1c3RlciA6IHRoZSBjbHVzdGVyIHRvIHBvd2VyIHVwCisgKi8KK3ZvaWQgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfdXAoaW50IGNsdXN0ZXIpCit7CisJX19yYXdfd3JpdGVsKFM1UF9DT1JFX0xPQ0FMX1BXUl9FTiwKKwkJICAgICBFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oY2x1c3RlcikpOworfQorCisvKioKKyAqIGV4eW5vc19jbHVzdGVyX3Bvd2VyX3N0YXRlIDogcmV0dXJucyB0aGUgcG93ZXIgc3RhdGUgb2YgdGhlIGNsdXN0ZXIKKyAqIEBjbHVzdGVyIDogdGhlIGNsdXN0ZXIgdG8gcmV0cmlldmUgdGhlIHBvd2VyIHN0YXRlIGZyb20KKyAqCisgKi8KK2ludCBleHlub3NfY2x1c3Rlcl9wb3dlcl9zdGF0ZShpbnQgY2x1c3RlcikKK3sKKwlyZXR1cm4gKF9fcmF3X3JlYWRsKEVYWU5PU19DT01NT05fU1RBVFVTKGNsdXN0ZXIpKSAmCisJCQlTNVBfQ09SRV9MT0NBTF9QV1JfRU4pOworfQorCisjZGVmaW5lIEVYWU5PU19CT09UX1ZFQ1RPUl9BRERSCShzYW1zdW5nX3JldigpID09IEVYWU5PUzQyMTBfUkVWXzFfMSA/IFwKKwkJCVM1UF9JTkZPUk03IDogKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8wID8gXAorCQkJKHN5c3JhbV9iYXNlX2FkZHIgKyAweDI0KSA6IFM1UF9JTkZPUk0wKSkKKyNkZWZpbmUgRVhZTk9TX0JPT1RfVkVDVE9SX0ZMQUcJKHNhbXN1bmdfcmV2KCkgPT0gRVhZTk9TNDIxMF9SRVZfMV8xID8gXAorCQkJUzVQX0lORk9STTYgOiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzAgPyBcCisJCQkoc3lzcmFtX2Jhc2VfYWRkciArIDB4MjApIDogUzVQX0lORk9STTEpKQorCisjZGVmaW5lIFM1UF9DSEVDS19BRlRSICAweEZDQkEwRDEwCisjZGVmaW5lIFM1UF9DSEVDS19TTEVFUCAweDAwMDAwQkFECisKKy8qIEV4dC1HSUMgbklSUS9uRklRIGlzIHRoZSBvbmx5IHdha2V1cCBzb3VyY2UgaW4gQUZUUiAqLworc3RhdGljIHZvaWQgZXh5bm9zX3NldF93YWtldXBtYXNrKGxvbmcgbWFzaykKK3sKKwlfX3Jhd193cml0ZWwobWFzaywgUzVQX1dBS0VVUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX2NwdV9zZXRfYm9vdF92ZWN0b3IobG9uZyBmbGFncykKK3sKKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lKSwgRVhZTk9TX0JPT1RfVkVDVE9SX0FERFIpOworCV9fcmF3X3dyaXRlbChmbGFncywgRVhZTk9TX0JPT1RfVkVDVE9SX0ZMQUcpOworfQorCit2b2lkIGV4eW5vc19lbnRlcl9hZnRyKHZvaWQpCit7CisJZXh5bm9zX3NldF93YWtldXBtYXNrKDB4MDAwMGZmM2UpOworCWV4eW5vc19jcHVfc2V0X2Jvb3RfdmVjdG9yKFM1UF9DSEVDS19BRlRSKTsKKwkvKiBTZXQgdmFsdWUgb2YgcG93ZXIgZG93biByZWdpc3RlciBmb3IgYWZ0ciBtb2RlICovCisJZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihTWVNfQUZUUik7Cit9CisKIC8qIEZvciBDb3J0ZXgtQTkgRGlhZ25vc3RpYyBhbmQgUG93ZXIgY29udHJvbCByZWdpc3RlciAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzYXZlX2FybV9yZWdpc3RlclsyXTsKIAorc3RhdGljIHZvaWQgZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkvKiBTYXZlIFBvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzE1LCBjMCwgMCIKKwkgICAgIDogIj1yIiAodG1wKSA6IDogImNjIik7CisKKwlzYXZlX2FybV9yZWdpc3RlclswXSA9IHRtcDsKKworCS8qIFNhdmUgRGlhZ25vc3RpYyByZWdpc3RlciAqLworCWFzbSAoIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMwLCAxIgorCSAgICAgOiAiPXIiICh0bXApIDogOiAiY2MiKTsKKworCXNhdmVfYXJtX3JlZ2lzdGVyWzFdID0gdG1wOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qIFJlc3RvcmUgUG93ZXIgY29udHJvbCByZWdpc3RlciAqLworCXRtcCA9IHNhdmVfYXJtX3JlZ2lzdGVyWzBdOworCisJYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGMxNSwgYzAsIDAiCisJCSAgICAgIDogOiAiciIgKHRtcCkKKwkJICAgICAgOiAiY2MiKTsKKworCS8qIFJlc3RvcmUgRGlhZ25vc3RpYyByZWdpc3RlciAqLworCXRtcCA9IHNhdmVfYXJtX3JlZ2lzdGVyWzFdOworCisJYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGMxNSwgYzAsIDEiCisJCSAgICAgIDogOiAiciIgKHRtcCkKKwkJICAgICAgOiAiY2MiKTsKK30KKwogc3RhdGljIGludCBleHlub3NfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKQEAgLTE0NywzNyArMjc5LDM0IEBACiAJX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhleHlub3NfY3B1X3Jlc3VtZSksIFM1UF9JTkZPUk0wKTsKIH0KIAotc3RhdGljIGludCBleHlub3NfcG1fc3VzcGVuZCh2b2lkKQorc3RhdGljIHZvaWQgZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJLyogU2V0dGluZyBDZW50cmFsIFNlcXVlbmNlIFJlZ2lzdGVyIGZvciBwb3dlciBkb3duIG1vZGUgKi8KLQogCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9DRU5UUkFMX1NFUV9DT05GSUdVUkFUSU9OKTsKIAl0bXAgJj0gflM1UF9DRU5UUkFMX0xPV1BXUl9DRkc7CiAJX19yYXdfd3JpdGVsKHRtcCwgUzVQX0NFTlRSQUxfU0VRX0NPTkZJR1VSQVRJT04pOworfQorCitzdGF0aWMgaW50IGV4eW5vc19wbV9zdXNwZW5kKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7CiAKIAkvKiBTZXR0aW5nIFNFUV9PUFRJT04gcmVnaXN0ZXIgKi8KIAogCXRtcCA9IChTNVBfVVNFX1NUQU5EQllfV0ZJMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkUwKTsKIAlfX3Jhd193cml0ZWwodG1wLCBTNVBfQ0VOVFJBTF9TRVFfT1BUSU9OKTsKIAotCWlmICghc29jX2lzX2V4eW5vczUyNTAoKSkgewotCQkvKiBTYXZlIFBvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQkJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzAsIDAiCi0JCSAgICAgOiAiPXIiICh0bXApIDogOiAiY2MiKTsKLQkJc2F2ZV9hcm1fcmVnaXN0ZXJbMF0gPSB0bXA7Ci0KLQkJLyogU2F2ZSBEaWFnbm9zdGljIHJlZ2lzdGVyICovCi0JCWFzbSAoIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMwLCAxIgotCQkgICAgIDogIj1yIiAodG1wKSA6IDogImNjIik7Ci0JCXNhdmVfYXJtX3JlZ2lzdGVyWzFdID0gdG1wOwotCX0KKwlpZiAoIXNvY19pc19leHlub3M1MjUwKCkpCisJCWV4eW5vc19jcHVfc2F2ZV9yZWdpc3RlcigpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19wbV9yZXN1bWUodm9pZCkKK3N0YXRpYyBpbnQgZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTE5NCwyMSArMzIzLDE5IEBACiAJCS8qIGNsZWFyIHRoZSB3YWtldXAgc3RhdGUgcmVnaXN0ZXIgKi8KIAkJX19yYXdfd3JpdGVsKDB4MCwgUzVQX1dBS0VVUF9TVEFUKTsKIAkJLyogTm8gbmVlZCB0byBwZXJmb3JtIGJlbG93IHJlc3RvcmUgY29kZSAqLwotCQlnb3RvIGVhcmx5X3dha2V1cDsKKwkJcmV0dXJuIC0xOwogCX0KLQlpZiAoIXNvY19pc19leHlub3M1MjUwKCkpIHsKLQkJLyogUmVzdG9yZSBQb3dlciBjb250cm9sIHJlZ2lzdGVyICovCi0JCXRtcCA9IHNhdmVfYXJtX3JlZ2lzdGVyWzBdOwotCQlhc20gdm9sYXRpbGUgKCJtY3IgcDE1LCAwLCAlMCwgYzE1LCBjMCwgMCIKLQkJCSAgICAgIDogOiAiciIgKHRtcCkKLQkJCSAgICAgIDogImNjIik7CiAKLQkJLyogUmVzdG9yZSBEaWFnbm9zdGljIHJlZ2lzdGVyICovCi0JCXRtcCA9IHNhdmVfYXJtX3JlZ2lzdGVyWzFdOwotCQlhc20gdm9sYXRpbGUgKCJtY3IgcDE1LCAwLCAlMCwgYzE1LCBjMCwgMSIKLQkJCSAgICAgIDogOiAiciIgKHRtcCkKLQkJCSAgICAgIDogImNjIik7Ci0JfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fcmVzdW1lKHZvaWQpCit7CisJaWYgKGV4eW5vc19wbV9jZW50cmFsX3Jlc3VtZSgpKQorCQlnb3RvIGVhcmx5X3dha2V1cDsKKworCWlmICghc29jX2lzX2V4eW5vczUyNTAoKSkKKwkJZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKCk7CiAKIAkvKiBGb3IgcmVsZWFzZSByZXRlbnRpb24gKi8KIApAQCAtMjI2LDcgKzM1Myw3IEBACiAKIAlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKGV4eW5vc19jb3JlX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zX2NvcmVfc2F2ZSkpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1NNUCkgJiYgIXNvY19pc19leHlub3M1MjUwKCkpCisJaWYgKCFzb2NfaXNfZXh5bm9zNTI1MCgpKQogCQlzY3VfZW5hYmxlKFM1UF9WQV9TQ1UpOwogCiBlYXJseV93YWtldXA6CkBAIC0zMDQsMTAgKzQzMSw0MiBAQAogCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKIAorc3RhdGljIGludCBleHlub3NfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ1BVX1BNX0VOVEVSOgorCQlpZiAoY3B1ID09IDApIHsKKwkJCWV4eW5vc19wbV9jZW50cmFsX3N1c3BlbmQoKTsKKwkJCWV4eW5vc19jcHVfc2F2ZV9yZWdpc3RlcigpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBDUFVfUE1fRVhJVDoKKwkJaWYgKGNwdSA9PSAwKSB7CisJCQlpZiAoIXNvY19pc19leHlub3M1MjUwKCkpCisJCQkJc2N1X2VuYWJsZShTNVBfVkFfU0NVKTsKKwkJCWV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3RlcigpOworCQkJZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKCk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBleHlub3NfY3B1X3BtX25vdGlmaWVyX2Jsb2NrID0geworCS5ub3RpZmllcl9jYWxsID0gZXh5bm9zX2NwdV9wbV9ub3RpZmllciwKK307CisKIHZvaWQgX19pbml0IGV4eW5vc19wbV9pbml0KHZvaWQpCiB7CiAJdTMyIHRtcDsKIAorCWNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcigmZXh5bm9zX2NwdV9wbV9ub3RpZmllcl9ibG9jayk7CisKIAkvKiBQbGF0Zm9ybS1zcGVjaWZpYyBHSUMgY2FsbGJhY2sgKi8KIAlnaWNfYXJjaF9leHRuLmlycV9zZXRfd2FrZSA9IGV4eW5vc19pcnFfc2V0X3dha2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtdS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcG11LmMKaW5kZXggMDVjN2NlMS4uZmIwZGVkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcG11LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcG11LmMKQEAgLTEzLDggKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KIAotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJyZWdzLXBtdS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcmVncy1wbXUuaAppbmRleCA0ZjZhMjU2Li4xZDEzYjA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3JlZ3MtcG11LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgUzVQX0lORk9STTUJCQkJUzVQX1BNVVJFRygweDA4MTQpCiAjZGVmaW5lIFM1UF9JTkZPUk02CQkJCVM1UF9QTVVSRUcoMHgwODE4KQogI2RlZmluZSBTNVBfSU5GT1JNNwkJCQlTNVBfUE1VUkVHKDB4MDgxQykKKyNkZWZpbmUgUzVQX1BNVV9TUEFSRTMJCQkJUzVQX1BNVVJFRygweDA5MEMpCiAKICNkZWZpbmUgUzVQX0FSTV9DT1JFMF9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTAwMCkKICNkZWZpbmUgUzVQX0RJU19JUlFfQ09SRTAJCQlTNVBfUE1VUkVHKDB4MTAwNCkKQEAgLTEwNSw4ICsxMDYsMTcgQEAKICNkZWZpbmUgUzVQX0dQU19MT1dQV1IJCQkJUzVQX1BNVVJFRygweDEzOUMpCiAjZGVmaW5lIFM1UF9HUFNfQUxJVkVfTE9XUFdSCQkJUzVQX1BNVVJFRygweDEzQTApCiAKLSNkZWZpbmUgUzVQX0FSTV9DT1JFMV9DT05GSUdVUkFUSU9OCQlTNVBfUE1VUkVHKDB4MjA4MCkKLSNkZWZpbmUgUzVQX0FSTV9DT1JFMV9TVEFUVVMJCQlTNVBfUE1VUkVHKDB4MjA4NCkKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT1JFMF9DT05GSUdVUkFUSU9OCQlTNVBfUE1VUkVHKDB4MjAwMCkKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT1JFX0NPTkZJR1VSQVRJT04oX25yKQlcCisJCQkoRVhZTk9TX0FSTV9DT1JFMF9DT05GSUdVUkFUSU9OICsgKDB4ODAgKiAoX25yKSkpCisjZGVmaW5lIEVYWU5PU19BUk1fQ09SRV9TVEFUVVMoX25yKQkJXAorCQkJKEVYWU5PU19BUk1fQ09SRV9DT05GSUdVUkFUSU9OKF9ucikgKyAweDQpCisKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT01NT05fQ09ORklHVVJBVElPTgkJUzVQX1BNVVJFRygweDI1MDApCisjZGVmaW5lIEVYWU5PU19DT01NT05fQ09ORklHVVJBVElPTihfbnIpCVwKKwkJCShFWFlOT1NfQVJNX0NPTU1PTl9DT05GSUdVUkFUSU9OICsgKDB4ODAgKiAoX25yKSkpCisjZGVmaW5lIEVYWU5PU19DT01NT05fU1RBVFVTKF9ucikJCVwKKwkJCShFWFlOT1NfQ09NTU9OX0NPTkZJR1VSQVRJT04oX25yKSArIDB4NCkKIAogI2RlZmluZSBTNVBfUEFEX1JFVF9NQVVESU9fT1BUSU9OCQlTNVBfUE1VUkVHKDB4MzAyOCkKICNkZWZpbmUgUzVQX1BBRF9SRVRfR1BJT19PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzEwOCkKQEAgLTExOSw4ICsxMjksNiBAQAogI2RlZmluZSBTNVBfQ09SRV9MT0NBTF9QV1JfRU4JCQkweDMKICNkZWZpbmUgUzVQX0lOVF9MT0NBTF9QV1JfRU4JCQkweDcKIAotI2RlZmluZSBTNVBfQ0hFQ0tfU0xFRVAJCQkJMHgwMDAwMEJBRAotCiAvKiBPbmx5IGZvciBFWFlOT1M0MjEwICovCiAjZGVmaW5lIFM1UF9DTVVfQ0xLU1RPUF9MQ0QxX0xPV1BXUglTNVBfUE1VUkVHKDB4MTE1NCkKICNkZWZpbmUgUzVQX0NNVV9SRVNFVF9MQ0QxX0xPV1BXUglTNVBfUE1VUkVHKDB4MTE3NCkKQEAgLTMxMyw0ICszMjEsNiBAQAogCiAjZGVmaW5lIEVYWU5PUzVfT1BUSU9OX1VTRV9SRVRFTlRJT04JCQkJKDEgPDwgNCkKIAorI2RlZmluZSBFWFlOT1M1NDIwX1NXUkVTRVRfS0ZDX1NFTAkJCQkweDMKKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19QTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKaW5kZXggNTc0MDI5NmQuLjhkNDJlYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZwpAQCAtNzAyLDYxICs3MDIsNiBAQAogCiBpZiBBUkNIX01VTFRJX1Y3CiAKLWNvbW1lbnQgImkuTVg1MSBtYWNoaW5lczoiCi0KLWNvbmZpZyBNQUNIX0lNWDUxX0RUCi0JYm9vbCAiU3VwcG9ydCBpLk1YNTEgcGxhdGZvcm1zIGZyb20gZGV2aWNlIHRyZWUiCi0Jc2VsZWN0IFNPQ19JTVg1MQotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIGkuTVg1MSBiYXNlZCBwbGF0Zm9ybXMKLQkgIHVzaW5nIHRoZSBkZXZpY2UgdHJlZSBmb3IgZGlzY292ZXJ5Ci0KLWNvbmZpZyBNQUNIX01YNTFfQkFCQkFHRQotCWJvb2wgIlN1cHBvcnQgTVg1MSBCQUJCQUdFIHBsYXRmb3JtcyIKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKLQlzZWxlY3QgU09DX0lNWDUxCi0JaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDUxIEJhYmJhZ2UgcGxhdGZvcm0sIGFsc28ga25vd24gYXMgTVg1MUVWSyBpbgotCSAgdS1ib290LiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cwotCSAgcGVyaXBoZXJhbHMuCi0KLWNvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVg1MVNECi0JYm9vbCAiU3VwcG9ydCBFdWtyZWEgQ1BVSU1YNTFTRCBtb2R1bGUiCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQwotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19FSENJCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKLQlzZWxlY3QgU09DX0lNWDUxCi0JaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBFdWtyZWEgQ1BVSU1YNTFTRCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwotCSAgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBtb2R1bGUgYW5kIGl0cyBwZXJpcGhlcmFscy4KLQotY2hvaWNlCi0JcHJvbXB0ICJCYXNlYm9hcmQiCi0JZGVwZW5kcyBvbiBNQUNIX0VVS1JFQV9DUFVJTVg1MVNECi0JZGVmYXVsdCBNQUNIX0VVS1JFQV9NQklNWFNENTFfQkFTRUJPQVJECi0KLWNvbmZpZyBNQUNIX0VVS1JFQV9NQklNWFNENTFfQkFTRUJPQVJECi0JcHJvbXB0ICJFdWtyZWEgTUJJTVhTRCBkZXZlbG9wbWVudCBib2FyZCIKLQlib29sCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9TU0kKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCi0Jc2VsZWN0IExFRFNfR1BJT19SRUdJU1RFUgotCWhlbHAKLQkgIFRoaXMgYWRkcyBib2FyZCBzcGVjaWZpYyBkZXZpY2VzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIEV1a3JlYSdzCi0JICBNQklNWFNEIGV2YWx1YXRpb24gYm9hcmQuCi0KLWVuZGNob2ljZQotCiBjb21tZW50ICJEZXZpY2UgdHJlZSBvbmx5IgogCiBjb25maWcJU09DX0lNWDUwCkBAIC03NjgsNiArNzEzLDEyIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBpLk1YNTAgcHJvY2Vzc29yLgogCitjb25maWcgTUFDSF9JTVg1MV9EVAorCWJvb2wgImkuTVg1MSBzdXBwb3J0IgorCXNlbGVjdCBTT0NfSU1YNTEKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIGkuTVg1MSBwcm9jZXNzb3IKKwogY29uZmlnCVNPQ19JTVg1MwogCWJvb2wgImkuTVg1MyBzdXBwb3J0IgogCXNlbGVjdCBIQVZFX0lNWF9TUkMKQEAgLTc5Niw3ICs3NDcsNiBAQAogCXNlbGVjdCBBUk1fRVJSQVRBXzc2NDM2OSBpZiBTTVAKIAlzZWxlY3QgSEFWRV9BUk1fU0NVIGlmIFNNUAogCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgU01QCi0Jc2VsZWN0IE1JR0hUX0hBVkVfUENJCiAJc2VsZWN0IFBDSV9ET01BSU5TIGlmIFBDSQogCXNlbGVjdCBQSU5DVFJMX0lNWDZRCiAJc2VsZWN0IFNPQ19JTVg2CkBAIC04MTIsNiArNzYyLDE0IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBpLk1YNiBTb2xvTGl0ZSBwcm9jZXNzb3IuCiAKK2NvbmZpZyBTT0NfSU1YNlNYCisJYm9vbCAiaS5NWDYgU29sb1ggc3VwcG9ydCIKKwlzZWxlY3QgUElOQ1RSTF9JTVg2U1gKKwlzZWxlY3QgU09DX0lNWDYKKworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUgaS5NWDYgU29sb1ggcHJvY2Vzc29yLgorCiBjb25maWcgU09DX1ZGNjEwCiAJYm9vbCAiVnlicmlkIEZhbWlseSBWRjYxMCBzdXBwb3J0IgogCXNlbGVjdCBBUk1fR0lDCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCmluZGV4IGY0ZWQ4MzAuLmJiZTkzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCkBAIC0xMDEsNiArMTAxLDcgQEAKIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkgKz0gaG90cGx1Zy5vCiBvYmotJChDT05GSUdfU09DX0lNWDZRKSArPSBjbGstaW14NnEubyBtYWNoLWlteDZxLm8KIG9iai0kKENPTkZJR19TT0NfSU1YNlNMKSArPSBjbGstaW14NnNsLm8gbWFjaC1pbXg2c2wubworb2JqLSQoQ09ORklHX1NPQ19JTVg2U1gpICs9IGNsay1pbXg2c3gubyBtYWNoLWlteDZzeC5vCiAKIGlmZXEgKCQoQ09ORklHX1NVU1BFTkQpLHkpCiBBRkxBR1Nfc3VzcGVuZC1pbXg2Lm8gOj0tV2EsLW1hcmNoPWFybXY3LWEKQEAgLTEwOCwxMSArMTA5LDYgQEAKIGVuZGlmCiBvYmotJChDT05GSUdfU09DX0lNWDYpICs9IHBtLWlteDYubwogCi0jIGkuTVg1IGJhc2VkIG1hY2hpbmVzCi1vYmotJChDT05GSUdfTUFDSF9NWDUxX0JBQkJBR0UpICs9IG1hY2gtbXg1MV9iYWJiYWdlLm8KLW9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9DUFVJTVg1MVNEKSArPSBtYWNoLWNwdWlteDUxc2Qubwotb2JqLSQoQ09ORklHX01BQ0hfRVVLUkVBX01CSU1YU0Q1MV9CQVNFQk9BUkQpICs9IGV1a3JlYV9tYmlteHNkNTEtYmFzZWJvYXJkLm8KLQogb2JqLSQoQ09ORklHX01BQ0hfSU1YNTFfRFQpICs9IGlteDUxLWR0Lm8KIG9iai0kKENPTkZJR19TT0NfSU1YNTApICs9IG1hY2gtaW14NTAubwogb2JqLSQoQ09ORklHX1NPQ19JTVg1MykgKz0gbWFjaC1pbXg1My5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9hdmljLmMgYi9hcmNoL2FybS9tYWNoLWlteC9hdmljLmMKaW5kZXggOGQxZGYyZS4uMjRiMTAzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvYXZpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2F2aWMuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJaXJxX3NldHVwX2dlbmVyaWNfY2hpcChnYywgSVJRX01TSygzMiksIDAsIElSUV9OT1JFUVVFU1QsIDApOwogfQogCi1hc21saW5rYWdlIHZvaWQgX19leGNlcHRpb25faXJxX2VudHJ5IGF2aWNfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fZXhjZXB0aW9uX2lycV9lbnRyeSBhdmljX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTMyIG5pdmVjdG9yOwogCkBAIC0xOTAsNiArMTkwLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlfX3Jhd193cml0ZWwoMCwgYXZpY19iYXNlICsgQVZJQ19OSVBSSU9SSVRZKGkpKTsKIAorCXNldF9oYW5kbGVfaXJxKGF2aWNfaGFuZGxlX2lycSk7CisKICNpZmRlZiBDT05GSUdfRklRCiAJLyogSW5pdGlhbGl6ZSBGSVEgKi8KIAlpbml0X0ZJUShGSVFfU1RBUlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWdhdGUyLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstZ2F0ZTIuYwppbmRleCBhMmVjYzAwLi40YmE1ODdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstZ2F0ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstZ2F0ZTIuYwpAQCAtMjcsNDggKzI3LDYxIEBACiAgKiBwYXJlbnQgLSBmaXhlZCBwYXJlbnQuICBObyBjbGtfc2V0X3BhcmVudCBzdXBwb3J0CiAgKi8KIAotI2RlZmluZSB0b19jbGtfZ2F0ZShfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdCBjbGtfZ2F0ZSwgaHcpCitzdHJ1Y3QgY2xrX2dhdGUyIHsKKwlzdHJ1Y3QgY2xrX2h3IGh3OworCXZvaWQgX19pb21lbQkqcmVnOworCXU4CQliaXRfaWR4OworCXU4CQlmbGFnczsKKwlzcGlubG9ja190CSpsb2NrOworCXVuc2lnbmVkIGludAkqc2hhcmVfY291bnQ7Cit9OworCisjZGVmaW5lIHRvX2Nsa19nYXRlMihfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdCBjbGtfZ2F0ZTIsIGh3KQogCiBzdGF0aWMgaW50IGNsa19nYXRlMl9lbmFibGUoc3RydWN0IGNsa19odyAqaHcpCiB7Ci0Jc3RydWN0IGNsa19nYXRlICpnYXRlID0gdG9fY2xrX2dhdGUoaHcpOworCXN0cnVjdCBjbGtfZ2F0ZTIgKmdhdGUgPSB0b19jbGtfZ2F0ZTIoaHcpOwogCXUzMiByZWc7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlpZiAoZ2F0ZS0+bG9jaykKLQkJc3Bpbl9sb2NrX2lycXNhdmUoZ2F0ZS0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGdhdGUtPmxvY2ssIGZsYWdzKTsKKworCWlmIChnYXRlLT5zaGFyZV9jb3VudCAmJiAoKmdhdGUtPnNoYXJlX2NvdW50KSsrID4gMCkKKwkJZ290byBvdXQ7CiAKIAlyZWcgPSByZWFkbChnYXRlLT5yZWcpOwogCXJlZyB8PSAzIDw8IGdhdGUtPmJpdF9pZHg7CiAJd3JpdGVsKHJlZywgZ2F0ZS0+cmVnKTsKIAotCWlmIChnYXRlLT5sb2NrKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdhdGUtPmxvY2ssIGZsYWdzKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdhdGUtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjbGtfZ2F0ZTJfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKIHsKLQlzdHJ1Y3QgY2xrX2dhdGUgKmdhdGUgPSB0b19jbGtfZ2F0ZShodyk7CisJc3RydWN0IGNsa19nYXRlMiAqZ2F0ZSA9IHRvX2Nsa19nYXRlMihodyk7CiAJdTMyIHJlZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAotCWlmIChnYXRlLT5sb2NrKQotCQlzcGluX2xvY2tfaXJxc2F2ZShnYXRlLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2F0ZS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGdhdGUtPnNoYXJlX2NvdW50ICYmIC0tKCpnYXRlLT5zaGFyZV9jb3VudCkgPiAwKQorCQlnb3RvIG91dDsKIAogCXJlZyA9IHJlYWRsKGdhdGUtPnJlZyk7CiAJcmVnICY9IH4oMyA8PCBnYXRlLT5iaXRfaWR4KTsKIAl3cml0ZWwocmVnLCBnYXRlLT5yZWcpOwogCi0JaWYgKGdhdGUtPmxvY2spCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2F0ZS0+bG9jaywgZmxhZ3MpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2F0ZS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGNsa19nYXRlMl9pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQogewogCXUzMiByZWc7Ci0Jc3RydWN0IGNsa19nYXRlICpnYXRlID0gdG9fY2xrX2dhdGUoaHcpOworCXN0cnVjdCBjbGtfZ2F0ZTIgKmdhdGUgPSB0b19jbGtfZ2F0ZTIoaHcpOwogCiAJcmVnID0gcmVhZGwoZ2F0ZS0+cmVnKTsKIApAQCAtODcsMjEgKzEwMCwyMyBAQAogc3RydWN0IGNsayAqY2xrX3JlZ2lzdGVyX2dhdGUyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCXZvaWQgX19pb21lbSAqcmVnLCB1OCBiaXRfaWR4LAotCQl1OCBjbGtfZ2F0ZTJfZmxhZ3MsIHNwaW5sb2NrX3QgKmxvY2spCisJCXU4IGNsa19nYXRlMl9mbGFncywgc3BpbmxvY2tfdCAqbG9jaywKKwkJdW5zaWduZWQgaW50ICpzaGFyZV9jb3VudCkKIHsKLQlzdHJ1Y3QgY2xrX2dhdGUgKmdhdGU7CisJc3RydWN0IGNsa19nYXRlMiAqZ2F0ZTsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAotCWdhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2xrX2dhdGUpLCBHRlBfS0VSTkVMKTsKKwlnYXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNsa19nYXRlMiksIEdGUF9LRVJORUwpOwogCWlmICghZ2F0ZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQkvKiBzdHJ1Y3QgY2xrX2dhdGUgYXNzaWdubWVudHMgKi8KKwkvKiBzdHJ1Y3QgY2xrX2dhdGUyIGFzc2lnbm1lbnRzICovCiAJZ2F0ZS0+cmVnID0gcmVnOwogCWdhdGUtPmJpdF9pZHggPSBiaXRfaWR4OwogCWdhdGUtPmZsYWdzID0gY2xrX2dhdGUyX2ZsYWdzOwogCWdhdGUtPmxvY2sgPSBsb2NrOworCWdhdGUtPnNoYXJlX2NvdW50ID0gc2hhcmVfY291bnQ7CiAKIAlpbml0Lm5hbWUgPSBuYW1lOwogCWluaXQub3BzID0gJmNsa19nYXRlMl9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDEuYwppbmRleCAxNWY5ZDIyLi43ZjczOWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgxLmMKQEAgLTQwLDEyICs0MCwxNCBAQAogI2RlZmluZSBTQ01fR0NDUglJT19BRERSX1NDTSgweGMpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpwcmVtX3NlbF9jbGtzW10gPSB7ICJjbGszMl9wcmVtdWx0IiwgImNsazE2bSIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqY2xrb19zZWxfY2xrc1tdID0geyAicGVyMSIsICJoY2xrIiwgImNsazQ4bSIsICJjbGsxNm0iLCAicHJlbSIsCi0JCQkJImZjbGsiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNsa29fc2VsX2Nsa3NbXSA9IHsgInBlcjEiLCAiaGNsayIsICJjbGs0OG0iLCAiY2xrMTZtIiwKKwkJCQkgICAgICAgInByZW0iLCAiZmNsayIsIH07CisKIGVudW0gaW14MV9jbGtzIHsKLQlkdW1teSwgY2xrMzIsIGNsazE2bV9leHQsIGNsazE2bSwgY2xrMzJfcHJlbXVsdCwgcHJlbSwgbXBsbCwgc3BsbCwgbWN1LAotCWZjbGssIGhjbGssIGNsazQ4bSwgcGVyMSwgcGVyMiwgcGVyMywgY2xrbywgZG1hX2dhdGUsIGNzaV9nYXRlLAotCW1tYV9nYXRlLCB1c2JkX2dhdGUsIGNsa19tYXgKKwlkdW1teSwgY2xrMzIsIGNsazE2bV9leHQsIGNsazE2bSwgY2xrMzJfcHJlbXVsdCwgcHJlbSwgbXBsbCwgbXBsbF9nYXRlLAorCXNwbGwsIHNwbGxfZ2F0ZSwgbWN1LCBmY2xrLCBoY2xrLCBjbGs0OG0sIHBlcjEsIHBlcjIsIHBlcjMsIGNsa28sCisJdWFydDNfZ2F0ZSwgc3NpMl9nYXRlLCBicm9tX2dhdGUsIGRtYV9nYXRlLCBjc2lfZ2F0ZSwgbW1hX2dhdGUsCisJdXNiZF9nYXRlLCBjbGtfbWF4CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrW2Nsa19tYXhdOwpAQCAtNjIsMTcgKzY0LDIyIEBACiAJY2xrW3ByZW1dID0gaW14X2Nsa19tdXgoInByZW0iLCBDQ01fQ1NDUiwgMTYsIDEsIHByZW1fc2VsX2Nsa3MsCiAJCQlBUlJBWV9TSVpFKHByZW1fc2VsX2Nsa3MpKTsKIAljbGtbbXBsbF0gPSBpbXhfY2xrX3BsbHYxKCJtcGxsIiwgImNsazMyX3ByZW11bHQiLCBDQ01fTVBDVEwwKTsKKwljbGtbbXBsbF9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgibXBsbF9nYXRlIiwgIm1wbGwiLCBDQ01fQ1NDUiwgMCk7CiAJY2xrW3NwbGxdID0gaW14X2Nsa19wbGx2MSgic3BsbCIsICJwcmVtIiwgQ0NNX1NQQ1RMMCk7CisJY2xrW3NwbGxfZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoInNwbGxfZ2F0ZSIsICJzcGxsIiwgQ0NNX0NTQ1IsIDEpOwogCWNsa1ttY3VdID0gaW14X2Nsa19kaXZpZGVyKCJtY3UiLCAiY2xrMzJfcHJlbXVsdCIsIENDTV9DU0NSLCAxNSwgMSk7Ci0JY2xrW2ZjbGtdID0gaW14X2Nsa19kaXZpZGVyKCJmY2xrIiwgIm1wbGwiLCBDQ01fQ1NDUiwgMTUsIDEpOwotCWNsa1toY2xrXSA9IGlteF9jbGtfZGl2aWRlcigiaGNsayIsICJzcGxsIiwgQ0NNX0NTQ1IsIDEwLCA0KTsKLQljbGtbY2xrNDhtXSA9IGlteF9jbGtfZGl2aWRlcigiY2xrNDhtIiwgInNwbGwiLCBDQ01fQ1NDUiwgMjYsIDMpOwotCWNsa1twZXIxXSA9IGlteF9jbGtfZGl2aWRlcigicGVyMSIsICJzcGxsIiwgQ0NNX1BDRFIsIDAsIDQpOwotCWNsa1twZXIyXSA9IGlteF9jbGtfZGl2aWRlcigicGVyMiIsICJzcGxsIiwgQ0NNX1BDRFIsIDQsIDQpOwotCWNsa1twZXIzXSA9IGlteF9jbGtfZGl2aWRlcigicGVyMyIsICJzcGxsIiwgQ0NNX1BDRFIsIDE2LCA3KTsKKwljbGtbZmNsa10gPSBpbXhfY2xrX2RpdmlkZXIoImZjbGsiLCAibXBsbF9nYXRlIiwgQ0NNX0NTQ1IsIDE1LCAxKTsKKwljbGtbaGNsa10gPSBpbXhfY2xrX2RpdmlkZXIoImhjbGsiLCAic3BsbF9nYXRlIiwgQ0NNX0NTQ1IsIDEwLCA0KTsKKwljbGtbY2xrNDhtXSA9IGlteF9jbGtfZGl2aWRlcigiY2xrNDhtIiwgInNwbGxfZ2F0ZSIsIENDTV9DU0NSLCAyNiwgMyk7CisJY2xrW3BlcjFdID0gaW14X2Nsa19kaXZpZGVyKCJwZXIxIiwgInNwbGxfZ2F0ZSIsIENDTV9QQ0RSLCAwLCA0KTsKKwljbGtbcGVyMl0gPSBpbXhfY2xrX2RpdmlkZXIoInBlcjIiLCAic3BsbF9nYXRlIiwgQ0NNX1BDRFIsIDQsIDQpOworCWNsa1twZXIzXSA9IGlteF9jbGtfZGl2aWRlcigicGVyMyIsICJzcGxsX2dhdGUiLCBDQ01fUENEUiwgMTYsIDcpOwogCWNsa1tjbGtvXSA9IGlteF9jbGtfbXV4KCJjbGtvIiwgQ0NNX0NTQ1IsIDI5LCAzLCBjbGtvX3NlbF9jbGtzLAogCQkJQVJSQVlfU0laRShjbGtvX3NlbF9jbGtzKSk7Ci0JY2xrW2RtYV9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgiZG1hX2dhdGUiLCAiaGNsayIsIFNDTV9HQ0NSLCA0KTsKKwljbGtbdWFydDNfZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoInVhcnQzX2dhdGUiLCAiaGNsayIsIFNDTV9HQ0NSLCA2KTsKKwljbGtbc3NpMl9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgic3NpMl9nYXRlIiwgImhjbGsiLCBTQ01fR0NDUiwgNSk7CisJY2xrW2Jyb21fZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoImJyb21fZ2F0ZSIsICJoY2xrIiwgU0NNX0dDQ1IsIDQpOworCWNsa1tkbWFfZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoImRtYV9nYXRlIiwgImhjbGsiLCBTQ01fR0NDUiwgMyk7CiAJY2xrW2NzaV9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgiY3NpX2dhdGUiLCAiaGNsayIsIFNDTV9HQ0NSLCAyKTsKIAljbGtbbW1hX2dhdGVdID0gaW14X2Nsa19nYXRlKCJtbWFfZ2F0ZSIsICJoY2xrIiwgU0NNX0dDQ1IsIDEpOwogCWNsa1t1c2JkX2dhdGVdID0gaW14X2Nsa19nYXRlKCJ1c2JkX2dhdGUiLCAiY2xrNDhtIiwgU0NNX0dDQ1IsIDApOwpAQCAtODQsOSArOTEsNiBAQAogCiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZG1hX2dhdGVdLCAiYWhiIiwgImlteDEtZG1hIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbaGNsa10sICJpcGciLCAiaW14MS1kbWEiKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tjc2lfZ2F0ZV0sIE5VTEwsICJteDEtY2FtZXJhLjAiKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1ttbWFfZ2F0ZV0sICJtbWEiLCBOVUxMKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1t1c2JkX2dhdGVdLCBOVUxMLCAiaW14X3VkYy4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMV0sICJwZXIiLCAiaW14LWdwdC4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbaGNsa10sICJpcGciLCAiaW14LWdwdC4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMV0sICJwZXIiLCAiaW14MS11YXJ0LjAiKTsKQEAgLTk0LDIwICs5OCwxNSBAQAogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW3BlcjFdLCAicGVyIiwgImlteDEtdWFydC4xIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbaGNsa10sICJpcGciLCAiaW14MS11YXJ0LjEiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1twZXIxXSwgInBlciIsICJpbXgxLXVhcnQuMiIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2hjbGtdLCAiaXBnIiwgImlteDEtdWFydC4yIik7CisJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbdWFydDNfZ2F0ZV0sICJpcGciLCAiaW14MS11YXJ0LjIiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1toY2xrXSwgTlVMTCwgImlteDEtaTJjLjAiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1twZXIyXSwgInBlciIsICJpbXgxLWNzcGkuMCIpOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2R1bW15XSwgImlwZyIsICJpbXgxLWNzcGkuMCIpOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW3BlcjJdLCAicGVyIiwgImlteDEtY3NwaS4xIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZHVtbXldLCAiaXBnIiwgImlteDEtY3NwaS4xIik7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMl0sIE5VTEwsICJpbXgtbW1jLjAiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1twZXIyXSwgInBlciIsICJpbXgxLWZiLjAiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tkdW1teV0sICJpcGciLCAiaW14MS1mYi4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZHVtbXldLCAiYWhiIiwgImlteDEtZmIuMCIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2hjbGtdLCAibXNoYyIsIE5VTEwpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW3BlcjNdLCAic3NpIiwgTlVMTCk7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbY2xrMzJdLCBOVUxMLCAiaW14MS1ydGMuMCIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2Nsa29dLCAiY2xrbyIsIE5VTEwpOwogCiAJbXhjX3RpbWVyX2luaXQoTVgxX0lPX0FERFJFU1MoTVgxX1RJTTFfQkFTRV9BRERSKSwgTVgxX1RJTTFfSU5UKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDI1LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MjUuYwppbmRleCBkYzM2ZTZjLi5hZTU3OGMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MjUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MjUuYwpAQCAtNjIsNiArNjIsMTAgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9zZWxfY2xrc1tdID0geyAibXBsbCIsICJtcGxsX2NwdV8zXzQiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnBlcl9zZWxfY2xrc1tdID0geyAiYWhiIiwgInVwbGwiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNrb19zZWxfY2xrc1tdID0geyAiZHVtbXkiLCAib3NjIiwgImNwdSIsICJhaGIiLAorCQkJCSAgICAgICJpcGciLCAiZHVtbXkiLCAiZHVtbXkiLCAiZHVtbXkiLAorCQkJCSAgICAgICJkdW1teSIsICJkdW1teSIsICJwZXIwIiwgInBlcjIiLAorCQkJCSAgICAgICJwZXIxMyIsICJwZXIxNCIsICJ1c2JvdGdfYWhiIiwgImR1bW15Iix9OwogCiBlbnVtIG14MjVfY2xrcyB7CiAJZHVtbXksIG9zYywgbXBsbCwgdXBsbCwgbXBsbF9jcHVfM180LCBjcHVfc2VsLCBjcHUsIGFoYiwgdXNiX2RpdiwgaXBnLApAQCAtODIsNyArODYsNyBAQAogCXB3bTJfaXBnLCBwd20zX2lwZywgcHdtNF9pcGcsIHJuZ2JfaXBnLCByZXNlcnZlZDE2LCBzY2NfaXBnLCBzZG1hX2lwZywKIAlzaW0xX2lwZywgc2ltMl9pcGcsIHNsY2RjX2lwZywgc3BiYV9pcGcsIHNzaTFfaXBnLCBzc2kyX2lwZywgdHNjX2lwZywKIAl1YXJ0MV9pcGcsIHVhcnQyX2lwZywgdWFydDNfaXBnLCB1YXJ0NF9pcGcsIHVhcnQ1X2lwZywgcmVzZXJ2ZWQxNywKLQl3ZHRfaXBnLCBjbGtfbWF4CisJd2R0X2lwZywgY2tvX2RpdiwgY2tvX3NlbCwgY2tvLCBjbGtfbWF4CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrW2Nsa19tYXhdOwpAQCAtMTE3LDYgKzEyMSw5IEBACiAJY2xrW3BlcjEzX3NlbF0gPSBpbXhfY2xrX211eCgicGVyMTNfc2VsIiwgY2NtKENDTV9NQ1IpLCAxMywgMSwgcGVyX3NlbF9jbGtzLCBBUlJBWV9TSVpFKHBlcl9zZWxfY2xrcykpOwogCWNsa1twZXIxNF9zZWxdID0gaW14X2Nsa19tdXgoInBlcjE0X3NlbCIsIGNjbShDQ01fTUNSKSwgMTQsIDEsIHBlcl9zZWxfY2xrcywgQVJSQVlfU0laRShwZXJfc2VsX2Nsa3MpKTsKIAljbGtbcGVyMTVfc2VsXSA9IGlteF9jbGtfbXV4KCJwZXIxNV9zZWwiLCBjY20oQ0NNX01DUiksIDE1LCAxLCBwZXJfc2VsX2Nsa3MsIEFSUkFZX1NJWkUocGVyX3NlbF9jbGtzKSk7CisJY2xrW2Nrb19kaXZdID0gaW14X2Nsa19kaXZpZGVyKCJja29fZGl2IiwgImNrb19zZWwiLCBjY20oQ0NNX01DUiksIDI0LCA2KTsKKwljbGtbY2tvX3NlbF0gPSBpbXhfY2xrX211eCgiY2tvX3NlbCIsIGNjbShDQ01fTUNSKSwgMjAsIDQsIGNrb19zZWxfY2xrcywgQVJSQVlfU0laRShja29fc2VsX2Nsa3MpKTsKKwljbGtbY2tvXSA9IGlteF9jbGtfZ2F0ZSgiY2tvIiwgImNrb19kaXYiLCBjY20oQ0NNX01DUiksICAzMCk7CiAJY2xrW3BlcjBdID0gaW14X2Nsa19kaXZpZGVyKCJwZXIwIiwgInBlcjBfc2VsIiwgY2NtKENDTV9QQ0RSMCksIDAsIDYpOwogCWNsa1twZXIxXSA9IGlteF9jbGtfZGl2aWRlcigicGVyMSIsICJwZXIxX3NlbCIsIGNjbShDQ01fUENEUjApLCA4LCA2KTsKIAljbGtbcGVyMl0gPSBpbXhfY2xrX2RpdmlkZXIoInBlcjIiLCAicGVyMl9zZWwiLCBjY20oQ0NNX1BDRFIwKSwgMTYsIDYpOwpAQCAtMjMwLDYgKzIzNywxMiBAQAogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2lwZ10sICJpcGciLCAiaW14LWdwdC4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZ3B0X2lwZ19wZXJdLCAicGVyIiwgImlteC1ncHQuMCIpOwogCisJLyoKKwkgKiBMZXQncyBpbml0aWFsbHkgc2V0IHVwIENMS08gcGFyZW50IGFzIGlwZywgc2luY2UgdGhpcyBjb25maWd1cmF0aW9uCisJICogaXMgdXNlZCBvbiBzb21lIGlteDI1IGJvYXJkIGRlc2lnbnMgdG8gY2xvY2sgdGhlIGF1ZGlvIGNvZGVjLgorCSAqLworCWNsa19zZXRfcGFyZW50KGNsa1tja29fc2VsXSwgY2xrW2lwZ10pOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNCw4ICszMTcsNiBAQAogaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0X2R0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JaW50IGlycTsKIAl1bnNpZ25lZCBsb25nIG9zY19yYXRlID0gMjQwMDAwMDA7CiAKIAkvKiByZXRyaWV2ZSB0aGUgZnJlcWVuY3kgb2YgZml4ZWQgY2xvY2tzIGZyb20gZGV2aWNlIHRyZWUgKi8KQEAgLTMyNSwxMiArMzM2LDcgQEAKIAogCV9fbXgyNV9jbG9ja3NfaW5pdChvc2NfcmF0ZSk7CiAKLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14MjUtZ3B0Iik7Ci0JYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKLQlXQVJOX09OKCFiYXNlKTsKLQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0KLQlteGNfdGltZXJfaW5pdChiYXNlLCBpcnEpOworCW14Y190aW1lcl9pbml0X2R0KG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14MjUtZ3B0IikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgyNy5jCmluZGV4IGQyZGE4OTAuLjMxN2E2NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXgyNy5jCkBAIC04Miw3ICs4Miw4IEBACiAJY3NpX2FoYl9nYXRlLCBicm9tX2FoYl9nYXRlLCBhdGFfYWhiX2dhdGUsIHdkb2dfaXBnX2dhdGUsIHVzYl9pcGdfZ2F0ZSwKIAl1YXJ0Nl9pcGdfZ2F0ZSwgdWFydDVfaXBnX2dhdGUsIHVhcnQ0X2lwZ19nYXRlLCB1YXJ0M19pcGdfZ2F0ZSwKIAl1YXJ0Ml9pcGdfZ2F0ZSwgdWFydDFfaXBnX2dhdGUsIGNraWhfZGl2MXA1LCBmcG0sIG1wbGxfb3NjX3NlbCwKLQltcGxsX3NlbCwgc3BsbF9nYXRlLCBjbGtfbWF4CisJbXBsbF9zZWwsIHNwbGxfZ2F0ZSwgbXNoY19kaXYsIHJ0aWNfaXBnX2dhdGUsIG1zaGNfaXBnX2dhdGUsCisJcnRpY19haGJfZ2F0ZSwgbXNoY19iYXVkX2dhdGUsIGNsa19tYXgKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtbY2xrX21heF07CkBAIC0xMTcsNiArMTE4LDcgQEAKIAkJY2xrW2lwZ10gPSBpbXhfY2xrX2RpdmlkZXIoImlwZyIsICJhaGIiLCBDQ01fQ1NDUiwgOCwgMSk7CiAJfQogCisJY2xrW21zaGNfZGl2XSA9IGlteF9jbGtfZGl2aWRlcigibXNoY19kaXYiLCAiYWhiIiwgQ0NNX1BDRFIwLCAwLCA2KTsKIAljbGtbbmZjX2Rpdl0gPSBpbXhfY2xrX2RpdmlkZXIoIm5mY19kaXYiLCAiYWhiIiwgQ0NNX1BDRFIwLCA2LCA0KTsKIAljbGtbcGVyMV9kaXZdID0gaW14X2Nsa19kaXZpZGVyKCJwZXIxX2RpdiIsICJtcGxsX21haW4yIiwgQ0NNX1BDRFIxLCAwLCA2KTsKIAljbGtbcGVyMl9kaXZdID0gaW14X2Nsa19kaXZpZGVyKCJwZXIyX2RpdiIsICJtcGxsX21haW4yIiwgQ0NNX1BDRFIxLCA4LCA2KTsKQEAgLTE0NSw5ICsxNDcsMTEgQEAKIAljbGtbc2RoYzFfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJzZGhjMV9pcGdfZ2F0ZSIsICJpcGciLCBDQ01fUENDUjAsIDUpOwogCWNsa1tzY2NfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJzY2NfaXBnX2dhdGUiLCAiaXBnIiwgQ0NNX1BDQ1IwLCA2KTsKIAljbGtbc2FoYXJhX2lwZ19nYXRlXSA9IGlteF9jbGtfZ2F0ZSgic2FoYXJhX2lwZ19nYXRlIiwgImlwZyIsIENDTV9QQ0NSMCwgNyk7CisJY2xrW3J0aWNfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJydGljX2lwZ19nYXRlIiwgImlwZyIsIENDTV9QQ0NSMCwgOCk7CiAJY2xrW3J0Y19pcGdfZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoInJ0Y19pcGdfZ2F0ZSIsICJpcGciLCBDQ01fUENDUjAsIDkpOwogCWNsa1twd21faXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJwd21faXBnX2dhdGUiLCAiaXBnIiwgQ0NNX1BDQ1IwLCAxMSk7CiAJY2xrW293aXJlX2lwZ19nYXRlXSA9IGlteF9jbGtfZ2F0ZSgib3dpcmVfaXBnX2dhdGUiLCAiaXBnIiwgQ0NNX1BDQ1IwLCAxMik7CisJY2xrW21zaGNfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJtc2hjX2lwZ19nYXRlIiwgImlwZyIsIENDTV9QQ0NSMCwgMTMpOwogCWNsa1tsY2RjX2lwZ19nYXRlXSA9IGlteF9jbGtfZ2F0ZSgibGNkY19pcGdfZ2F0ZSIsICJpcGciLCBDQ01fUENDUjAsIDE0KTsKIAljbGtba3BwX2lwZ19nYXRlXSA9IGlteF9jbGtfZ2F0ZSgia3BwX2lwZ19nYXRlIiwgImlwZyIsIENDTV9QQ0NSMCwgMTUpOwogCWNsa1tpaW1faXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJpaW1faXBnX2dhdGUiLCAiaXBnIiwgQ0NNX1BDQ1IwLCAxNik7CkBAIC0xNjYsNiArMTcwLDcgQEAKIAljbGtbY3NwaTNfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJjc3BpM19pcGdfZ2F0ZSIsICJpcGciLCBDQ01fUENDUjAsIDI5KTsKIAljbGtbY3NwaTJfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJjc3BpMl9pcGdfZ2F0ZSIsICJpcGciLCBDQ01fUENDUjAsIDMwKTsKIAljbGtbY3NwaTFfaXBnX2dhdGVdID0gaW14X2Nsa19nYXRlKCJjc3BpMV9pcGdfZ2F0ZSIsICJpcGciLCBDQ01fUENDUjAsIDMxKTsKKwljbGtbbXNoY19iYXVkX2dhdGVdID0gaW14X2Nsa19nYXRlKCJtc2hjX2JhdWRfZ2F0ZSIsICJtc2hjX2RpdiIsIENDTV9QQ0NSMSwgMik7CiAJY2xrW25mY19iYXVkX2dhdGVdID0gaW14X2Nsa19nYXRlKCJuZmNfYmF1ZF9nYXRlIiwgIm5mY19kaXYiLCBDQ01fUENDUjEsICAzKTsKIAljbGtbc3NpMl9iYXVkX2dhdGVdID0gaW14X2Nsa19nYXRlKCJzc2kyX2JhdWRfZ2F0ZSIsICJzc2kyX2RpdiIsIENDTV9QQ0NSMSwgIDQpOwogCWNsa1tzc2kxX2JhdWRfZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoInNzaTFfYmF1ZF9nYXRlIiwgInNzaTFfZGl2IiwgQ0NNX1BDQ1IxLCAgNSk7CkBAIC0xNzcsNiArMTgyLDcgQEAKIAljbGtbdXNiX2FoYl9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgidXNiX2FoYl9nYXRlIiwgImFoYiIsIENDTV9QQ0NSMSwgMTEpOwogCWNsa1tzbGNkY19haGJfZ2F0ZV0gPSBpbXhfY2xrX2dhdGUoInNsY2RjX2FoYl9nYXRlIiwgImFoYiIsIENDTV9QQ0NSMSwgMTIpOwogCWNsa1tzYWhhcmFfYWhiX2dhdGVdID0gaW14X2Nsa19nYXRlKCJzYWhhcmFfYWhiX2dhdGUiLCAiYWhiIiwgQ0NNX1BDQ1IxLCAxMyk7CisJY2xrW3J0aWNfYWhiX2dhdGVdID0gaW14X2Nsa19nYXRlKCJydGljX2FoYl9nYXRlIiwgImFoYiIsIENDTV9QQ0NSMSwgMTQpOwogCWNsa1tsY2RjX2FoYl9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgibGNkY19haGJfZ2F0ZSIsICJhaGIiLCBDQ01fUENDUjEsIDE1KTsKIAljbGtbdnB1X2FoYl9nYXRlXSA9IGlteF9jbGtfZ2F0ZSgidnB1X2FoYl9nYXRlIiwgImFoYiIsIENDTV9QQ0NSMSwgMTYpOwogCWNsa1tmZWNfYWhiX2dhdGVdID0gaW14X2Nsa19nYXRlKCJmZWNfYWhiX2dhdGUiLCAiYWhiIiwgQ0NNX1BDQ1IxLCAxNyk7CkBAIC0yMjEsMTYgKzIyNyw2IEBACiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMV9nYXRlXSwgInBlciIsICJpbXgyMS11YXJ0LjUiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tncHQxX2lwZ19nYXRlXSwgImlwZyIsICJpbXgtZ3B0LjAiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1twZXIxX2dhdGVdLCAicGVyIiwgImlteC1ncHQuMCIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2dwdDJfaXBnX2dhdGVdLCAiaXBnIiwgImlteC1ncHQuMSIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW3BlcjFfZ2F0ZV0sICJwZXIiLCAiaW14LWdwdC4xIik7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZ3B0M19pcGdfZ2F0ZV0sICJpcGciLCAiaW14LWdwdC4yIik7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMV9nYXRlXSwgInBlciIsICJpbXgtZ3B0LjIiKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tncHQ0X2lwZ19nYXRlXSwgImlwZyIsICJpbXgtZ3B0LjMiKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1twZXIxX2dhdGVdLCAicGVyIiwgImlteC1ncHQuMyIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2dwdDVfaXBnX2dhdGVdLCAiaXBnIiwgImlteC1ncHQuNCIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW3BlcjFfZ2F0ZV0sICJwZXIiLCAiaW14LWdwdC40Iik7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZ3B0Nl9pcGdfZ2F0ZV0sICJpcGciLCAiaW14LWdwdC41Iik7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMV9nYXRlXSwgInBlciIsICJpbXgtZ3B0LjUiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1twZXIyX2dhdGVdLCAicGVyIiwgImlteDIxLW1tYy4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbc2RoYzFfaXBnX2dhdGVdLCAiaXBnIiwgImlteDIxLW1tYy4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcGVyMl9nYXRlXSwgInBlciIsICJpbXgyMS1tbWMuMSIpOwpAQCAtMjc4LDE0ICsyNzQsNyBAQAogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2VtbWFfaXBnX2dhdGVdLCAiZW1tYS1pcGciLCAiaW14MjctY2FtZXJhLjAiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tlbW1hX2FoYl9nYXRlXSwgImFoYiIsICJtMm0tZW1tYXBycC4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbZW1tYV9pcGdfZ2F0ZV0sICJpcGciLCAibTJtLWVtbWFwcnAuMCIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW2lpbV9pcGdfZ2F0ZV0sICJpaW0iLCBOVUxMKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tncGlvX2lwZ19nYXRlXSwgImdwaW8iLCBOVUxMKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1ticm9tX2FoYl9nYXRlXSwgImJyb20iLCBOVUxMKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1thdGFfYWhiX2dhdGVdLCAiYXRhIiwgTlVMTCk7Ci0JY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbcnRjX2lwZ19nYXRlXSwgTlVMTCwgImlteDIxLXJ0YyIpOwotCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW3NjY19pcGdfZ2F0ZV0sICJzY2MiLCBOVUxMKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tjcHVfZGl2XSwgTlVMTCwgImNwdTAiKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tlbWlfYWhiX2dhdGVdLCAiZW1pX2FoYiIgLCBOVUxMKTsKIAogCW14Y190aW1lcl9pbml0KE1YMjdfSU9fQUREUkVTUyhNWDI3X0dQVDFfQkFTRV9BRERSKSwgTVgyN19JTlRfR1BUMSk7CiAKQEAgLTI5Niw3ICsyODUsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX09GCiBpbnQgX19pbml0IG14MjdfY2xvY2tzX2luaXRfZHQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtMzEyLDQgKzMwMCwzIEBACiAKIAlyZXR1cm4gbXgyN19jbG9ja3NfaW5pdChmcmVmKTsKIH0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDMxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzEuYwppbmRleCBiNWI2NWYzLi40YTlkZTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14MzEuYwpAQCAtMTkxLDcgKzE5MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfT0YKIGludCBfX2luaXQgbXgzMV9jbG9ja3NfaW5pdF9kdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CkBAIC0yMDcsNCArMjA2LDMgQEAKIAogCXJldHVybiBteDMxX2Nsb2Nrc19pbml0KGZyZWYpOwogfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NTEtaW14NTMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCmluZGV4IDU2OGVmMGEuLjIxZDJiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jCkBAIC0zMjIsOSArMzIyLDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14NTBfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdW5zaWduZWQgbG9uZyByOwotCWludCBpLCBpcnE7CisJaW50IGk7CiAKIAljbGtbSU1YNV9DTEtfUExMMV9TV10JCT0gaW14X2Nsa19wbGx2MigicGxsMV9zdyIsICJvc2MiLCBNWDUzX0RQTEwxX0JBU0UpOwogCWNsa1tJTVg1X0NMS19QTEwyX1NXXQkJPSBpbXhfY2xrX3BsbHYyKCJwbGwyX3N3IiwgIm9zYyIsIE1YNTNfRFBMTDJfQkFTRSk7CkBAIC0zNzIsMTEgKzM3MSw3IEBACiAJciA9IGNsa19yb3VuZF9yYXRlKGNsa1tJTVg1X0NMS19VU0JPSDNfUEVSX0dBVEVdLCA1NDAwMDAwMCk7CiAJY2xrX3NldF9yYXRlKGNsa1tJTVg1X0NMS19VU0JPSDNfUEVSX0dBVEVdLCByKTsKIAotCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxpbXg1MC1ncHQiKTsKLQliYXNlID0gb2ZfaW9tYXAobnAsIDApOwotCVdBUk5fT04oIWJhc2UpOwotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKLQlteGNfdGltZXJfaW5pdChiYXNlLCBpcnEpOworCW14Y190aW1lcl9pbml0X2R0KG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14NTAtZ3B0IikpOwogfQogQ0xLX09GX0RFQ0xBUkUoaW14NTBfY2NtLCAiZnNsLGlteDUwLWNjbSIsIG14NTBfY2xvY2tzX2luaXQpOwogCkBAIC00MzYsNyArNDMxLDYgQEAKIAogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW0lNWDVfQ0xLX0hTSTJDX0dBVEVdLCBOVUxMLCAiaW14MjEtaTJjLjIiKTsKIAljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tJTVg1X0NMS19NWDUxX01JUEldLCAibWlwaV9oc3AiLCBOVUxMKTsKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tJTVg1X0NMS19WUFVfR0FURV0sIE5VTEwsICJpbXg1MS12cHUuMCIpOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW0lNWDVfQ0xLX0ZFQ19HQVRFXSwgTlVMTCwgImlteDI3LWZlYy4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbSU1YNV9DTEtfVVNCX1BIWV9HQVRFXSwgInBoeSIsICJteGMtZWhjaS4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbSU1YNV9DTEtfRVNESEMxX0lQR19HQVRFXSwgImlwZyIsICJzZGhjaS1lc2RoYy1pbXg1MS4wIik7CkBAIC00OTIsOSArNDg2LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14NTNfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQlpbnQgaSwgaXJxOworCWludCBpOwogCXVuc2lnbmVkIGxvbmcgcjsKLQl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAljbGtbSU1YNV9DTEtfUExMMV9TV10JCT0gaW14X2Nsa19wbGx2MigicGxsMV9zdyIsICJvc2MiLCBNWDUzX0RQTEwxX0JBU0UpOwogCWNsa1tJTVg1X0NMS19QTEwyX1NXXQkJPSBpbXhfY2xrX3BsbHYyKCJwbGwyX3N3IiwgIm9zYyIsIE1YNTNfRFBMTDJfQkFTRSk7CkBAIC01NjEsNyArNTU0LDYgQEAKIAogCW14NV9jbG9ja3NfY29tbW9uX2luaXQoMCwgMCwgMCwgMCk7CiAKLQljbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa1tJTVg1X0NMS19WUFVfR0FURV0sIE5VTEwsICJpbXg1My12cHUuMCIpOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW0lNWDVfQ0xLX0kyQzNfR0FURV0sIE5VTEwsICJpbXgyMS1pMmMuMiIpOwogCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrW0lNWDVfQ0xLX0ZFQ19HQVRFXSwgTlVMTCwgImlteDI1LWZlYy4wIik7CiAJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtbSU1YNV9DTEtfVVNCX1BIWTFfR0FURV0sICJ1c2JfcGh5MSIsICJteGMtZWhjaS4wIik7CkBAIC01OTIsMTAgKzU4NCw2IEBACiAJciA9IGNsa19yb3VuZF9yYXRlKGNsa1tJTVg1X0NMS19VU0JPSDNfUEVSX0dBVEVdLCA1NDAwMDAwMCk7CiAJY2xrX3NldF9yYXRlKGNsa1tJTVg1X0NMS19VU0JPSDNfUEVSX0dBVEVdLCByKTsKIAotCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxpbXg1My1ncHQiKTsKLQliYXNlID0gb2ZfaW9tYXAobnAsIDApOwotCVdBUk5fT04oIWJhc2UpOwotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKLQlteGNfdGltZXJfaW5pdChiYXNlLCBpcnEpOworCW14Y190aW1lcl9pbml0X2R0KG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14NTMtZ3B0IikpOwogfQogQ0xLX09GX0RFQ0xBUkUoaW14NTNfY2NtLCAiZnNsLGlteDUzLWNjbSIsIG14NTNfY2xvY2tzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYwppbmRleCAyYjRkNmFjLi44ZTc5NWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJc2F0YV9yZWYsIHNhdGFfcmVmXzEwMG0sIHBjaWVfcmVmLCBwY2llX3JlZl8xMjVtLCBlbmV0X3JlZiwgdXNicGh5MV9nYXRlLAogCXVzYnBoeTJfZ2F0ZSwgcGxsNF9wb3N0X2RpdiwgcGxsNV9wb3N0X2RpdiwgcGxsNV92aWRlb19kaXYsIGVpbV9zbG93LAogCXNwZGlmLCBja28yX3NlbCwgY2tvMl9wb2RmLCBja28yLCBja28sIHZkb2EsIHBsbDRfYXVkaW9fZGl2LAotCWx2ZHMxX3NlbCwgbHZkczJfc2VsLCBsdmRzMV9nYXRlLCBsdmRzMl9nYXRlLCBjbGtfbWF4CisJbHZkczFfc2VsLCBsdmRzMl9zZWwsIGx2ZHMxX2dhdGUsIGx2ZHMyX2dhdGUsIGVzYWlfYWhiLCBjbGtfbWF4CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrW2Nsa19tYXhdOwpAQCAtMTQwLDExICsxNDAsMTMgQEAKIAl7IC8qIHNlbnRpbmVsICovIH0KIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hhcmVfY291bnRfZXNhaTsKKwogc3RhdGljIHZvaWQgX19pbml0IGlteDZxX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JaW50IGksIGlycTsKKwlpbnQgaTsKIAlpbnQgcmV0OwogCiAJY2xrW2R1bW15XSA9IGlteF9jbGtfZml4ZWQoImR1bW15IiwgMCk7CkBAIC0zNTIsOSArMzU0LDE0IEBACiAJY2xrW2Vjc3BpMl0gICAgICAgPSBpbXhfY2xrX2dhdGUyKCJlY3NwaTIiLCAgICAgICAgImVjc3BpX3Jvb3QiLCAgICAgICAgYmFzZSArIDB4NmMsIDIpOwogCWNsa1tlY3NwaTNdICAgICAgID0gaW14X2Nsa19nYXRlMigiZWNzcGkzIiwgICAgICAgICJlY3NwaV9yb290IiwgICAgICAgIGJhc2UgKyAweDZjLCA0KTsKIAljbGtbZWNzcGk0XSAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImVjc3BpNCIsICAgICAgICAiZWNzcGlfcm9vdCIsICAgICAgICBiYXNlICsgMHg2YywgNik7Ci0JY2xrW2Vjc3BpNV0gICAgICAgPSBpbXhfY2xrX2dhdGUyKCJlY3NwaTUiLCAgICAgICAgImVjc3BpX3Jvb3QiLCAgICAgICAgYmFzZSArIDB4NmMsIDgpOworCWlmIChjcHVfaXNfaW14NmRsKCkpCisJCS8qIGVjc3BpNSBpcyByZXBsYWNlZCB3aXRoIGkyYzQgb24gaW14NmRsICYgaW14NnMgKi8KKwkJY2xrW2Vjc3BpNV0gPSBpbXhfY2xrX2dhdGUyKCJpMmM0IiwgICAgICAgICJpcGdfcGVyIiwgICAgICAgICAgIGJhc2UgKyAweDZjLCA4KTsKKwllbHNlCisJCWNsa1tlY3NwaTVdID0gaW14X2Nsa19nYXRlMigiZWNzcGk1IiwgICAgICAiZWNzcGlfcm9vdCIsICAgICAgICBiYXNlICsgMHg2YywgOCk7CiAJY2xrW2VuZXRdICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJlbmV0IiwgICAgICAgICAgImlwZyIsICAgICAgICAgICAgICAgYmFzZSArIDB4NmMsIDEwKTsKLQljbGtbZXNhaV0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImVzYWkiLCAgICAgICAgICAiZXNhaV9wb2RmIiwgICAgICAgICBiYXNlICsgMHg2YywgMTYpOworCWNsa1tlc2FpXSAgICAgICAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImVzYWkiLCAgICJlc2FpX3BvZGYiLCAgICAgICAgIGJhc2UgKyAweDZjLCAxNiwgJnNoYXJlX2NvdW50X2VzYWkpOworCWNsa1tlc2FpX2FoYl0gICAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImVzYWlfYWhiIiwgImFoYiIsICAgICAgICAgICAgIGJhc2UgKyAweDZjLCAxNiwgJnNoYXJlX2NvdW50X2VzYWkpOwogCWNsa1tncHRfaXBnXSAgICAgID0gaW14X2Nsa19nYXRlMigiZ3B0X2lwZyIsICAgICAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDZjLCAyMCk7CiAJY2xrW2dwdF9pcGdfcGVyXSAgPSBpbXhfY2xrX2dhdGUyKCJncHRfaXBnX3BlciIsICAgImlwZ19wZXIiLCAgICAgICAgICAgYmFzZSArIDB4NmMsIDIyKTsKIAlpZiAoY3B1X2lzX2lteDZkbCgpKQpAQCAtNDg5LDEwICs0OTYsNiBAQAogCS8qIFNldCBpbml0aWFsIHBvd2VyIG1vZGUgKi8KIAlpbXg2cV9zZXRfbHBtKFdBSVRfQ0xPQ0tFRCk7CiAKLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14NnEtZ3B0Iik7Ci0JYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKLQlXQVJOX09OKCFiYXNlKTsKLQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0JbXhjX3RpbWVyX2luaXQoYmFzZSwgaXJxKTsKKwlteGNfdGltZXJfaW5pdF9kdChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLGlteDZxLWdwdCIpKTsKIH0KIENMS19PRl9ERUNMQVJFKGlteDZxLCAiZnNsLGlteDZxLWNjbSIsIGlteDZxX2Nsb2Nrc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2c2wuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2c2wuYwppbmRleCBmNzA3M2MwLi4yMWNmMDZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnNsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzbC5jCkBAIC0xNjksNyArMTY5LDYgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXZvaWQgX19pb21lbSAqYmFzZTsKLQlpbnQgaXJxOwogCWludCBpOwogCWludCByZXQ7CiAKQEAgLTM4NSw5ICszODQsNiBAQAogCWlteDZxX3NldF9scG0oV0FJVF9DTE9DS0VEKTsKIAogCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxpbXg2c2wtZ3B0Iik7Ci0JYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKLQlXQVJOX09OKCFiYXNlKTsKLQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0JbXhjX3RpbWVyX2luaXQoYmFzZSwgaXJxKTsKKwlteGNfdGltZXJfaW5pdF9kdChucCk7CiB9CiBDTEtfT0ZfREVDTEFSRShpbXg2c2wsICJmc2wsaW14NnNsLWNjbSIsIGlteDZzbF9jbG9ja3NfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmODkwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2c3guYwpAQCAtMCwwICsxLDUyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2lteDZzeC1jbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJjbGsuaCIKKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBDQ0RSICAgIDB4NAorI2RlZmluZSBCTV9DQ01fQ0NEUl9NTURDX0NIMF9NQVNLICAgICAgICgweDIgPDwgMTYpCisKK3N0YXRpYyBjb25zdCBjaGFyICpzdGVwX3NlbHNbXQkJPSB7ICJvc2MiLCAicGxsMl9wZmQyXzM5Nm0iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBsbDFfc3dfc2Vsc1tdCT0geyAicGxsMV9zeXMiLCAic3RlcCIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGVyaXBoX3ByZV9zZWxzW10JPSB7ICJwbGwyX2J1cyIsICJwbGwyX3BmZDJfMzk2bSIsICJwbGwyX3BmZDBfMzUybSIsICJwbGwyXzE5OG0iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBlcmlwaDJfcHJlX3NlbHNbXQk9IHsgInBsbDJfYnVzIiwgInBsbDJfcGZkMl8zOTZtIiwgInBsbDJfcGZkMF8zNTJtIiwgInBsbDRfYXVkaW9fZGl2IiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwZXJpcGhfY2xrMl9zZWxzW10JPSB7ICJwbGwzX3VzYl9vdGciLCAib3NjIiwgIm9zYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGVyaXBoMl9jbGsyX3NlbHNbXQk9IHsgInBsbDNfdXNiX290ZyIsICJvc2MiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBlcmlwaF9zZWxzW10JPSB7ICJwZXJpcGhfcHJlIiwgInBlcmlwaF9jbGsyIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwZXJpcGgyX3NlbHNbXQk9IHsgInBlcmlwaDJfcHJlIiwgInBlcmlwaDJfY2xrMiIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqb2NyYW1fc2Vsc1tdCQk9IHsgInBlcmlwaCIsICJwbGwyX3BmZDJfMzk2bSIsICJwZXJpcGgiLCAicGxsM19wZmQxXzU0MG0iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGlvX3NlbHNbXQkJPSB7ICJwbGw0X2F1ZGlvX2RpdiIsICJwbGwzX3BmZDJfNTA4bSIsICJwbGw1X3ZpZGVvX2RpdiIsICJwbGwzX3VzYl9vdGciLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmdwdV9heGlfc2Vsc1tdCT0geyAicGxsMl9wZmQyXzM5Nm0iLCAicGxsM19wZmQwXzcyMG0iLCAicGxsM19wZmQxXzU0MG0iLCAicGxsMl9idXMiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmdwdV9jb3JlX3NlbHNbXQk9IHsgInBsbDNfcGZkMV81NDBtIiwgInBsbDNfcGZkMF83MjBtIiwgInBsbDJfYnVzIiwgInBsbDJfcGZkMl8zOTZtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpsZGJfZGkwX2Rpdl9zZWxzW10JPSB7ICJsZGJfZGkwX2Rpdl8zXzUiLCAibGRiX2RpMF9kaXZfNyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbGRiX2RpMV9kaXZfc2Vsc1tdCT0geyAibGRiX2RpMV9kaXZfM181IiwgImxkYl9kaTFfZGl2XzciLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmxkYl9kaTBfc2Vsc1tdCT0geyAicGxsNV92aWRlb19kaXYiLCAicGxsMl9wZmQwXzM1Mm0iLCAicGxsMl9wZmQyXzM5Nm0iLCAicGxsMl9wZmQzXzU5NG0iLCAicGxsMl9wZmQxXzU5NG0iLCAicGxsM19wZmQzXzQ1NG0iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmxkYl9kaTFfc2Vsc1tdCT0geyAicGxsM191c2Jfb3RnIiwgInBsbDJfcGZkMF8zNTJtIiwgInBsbDJfcGZkMl8zOTZtIiwgInBsbDJfYnVzIiwgInBsbDNfcGZkM180NTRtIiwgInBsbDNfcGZkMl81MDhtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwY2llX2F4aV9zZWxzW10JPSB7ICJheGkiLCAiYWhiIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzc2lfc2Vsc1tdCQk9IHsgInBsbDNfcGZkMl81MDhtIiwgInBsbDVfdmlkZW9fZGl2IiwgInBsbDRfYXVkaW9fZGl2IiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpxc3BpMV9zZWxzW10JCT0geyAicGxsM191c2Jfb3RnIiwgInBsbDJfcGZkMF8zNTJtIiwgInBsbDJfcGZkMl8zOTZtIiwgInBsbDJfYnVzIiwgInBsbDNfcGZkM180NTRtIiwgInBsbDNfcGZkMl81MDhtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwZXJjbGtfc2Vsc1tdCT0geyAiaXBnIiwgIm9zYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqdXNkaGNfc2Vsc1tdCQk9IHsgInBsbDJfcGZkMl8zOTZtIiwgInBsbDJfcGZkMF8zNTJtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICp2aWRfc2Vsc1tdCQk9IHsgInBsbDNfcGZkMV81NDBtIiwgInBsbDNfdXNiX290ZyIsICJwbGwzX3BmZDNfNDU0bSIsICJwbGw0X2F1ZGlvX2RpdiIsICJwbGw1X3ZpZGVvX2RpdiIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqY2FuX3NlbHNbXQkJPSB7ICJwbGwzXzYwbSIsICJvc2MiLCAicGxsM184MG0iLCAiZHVtbXkiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnVhcnRfc2Vsc1tdCQk9IHsgInBsbDNfODBtIiwgIm9zYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqcXNwaTJfc2Vsc1tdCQk9IHsgInBsbDJfcGZkMF8zNTJtIiwgInBsbDJfYnVzIiwgInBsbDNfdXNiX290ZyIsICJwbGwyX3BmZDJfMzk2bSIsICJwbGwzX3BmZDNfNDU0bSIsICJkdW1teSIsICJkdW1teSIsICJkdW1teSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqZW5ldF9wcmVfc2Vsc1tdCT0geyAicGxsMl9idXMiLCAicGxsM191c2Jfb3RnIiwgInBsbDVfdmlkZW9fZGl2IiwgInBsbDJfcGZkMF8zNTJtIiwgInBsbDJfcGZkMl8zOTZtIiwgInBsbDNfcGZkMl81MDhtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICplbmV0X3NlbHNbXQkJPSB7ICJlbmV0X3BvZGYiLCAiaXBwX2RpMCIsICJpcHBfZGkxIiwgImxkYl9kaTAiLCAibGRiX2RpMSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbTRfcHJlX3NlbHNbXQk9IHsgInBsbDJfYnVzIiwgInBsbDNfdXNiX290ZyIsICJvc2MiLCAicGxsMl9wZmQwXzM1Mm0iLCAicGxsMl9wZmQyXzM5Nm0iLCAicGxsM19wZmQzXzQ1NG0iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm00X3NlbHNbXQkJPSB7ICJtNF9wcmVfc2VsIiwgImlwcF9kaTAiLCAiaXBwX2RpMSIsICJsZGJfZGkwIiwgImxkYl9kaTEiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmVpbV9zbG93X3NlbHNbXQk9IHsgIm9jcmFtIiwgInBsbDNfdXNiX290ZyIsICJwbGwyX3BmZDJfMzk2bSIsICJwbGwyX3BmZDBfMzUybSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqZWNzcGlfc2Vsc1tdCQk9IHsgInBsbDNfNjBtIiwgIm9zYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbGNkaWYxX3ByZV9zZWxzW10JPSB7ICJwbGwyX2J1cyIsICJwbGwzX3BmZDNfNDU0bSIsICJwbGw1X3ZpZGVvX2RpdiIsICJwbGwyX3BmZDBfMzUybSIsICJwbGwyX3BmZDFfNTk0bSIsICJwbGwzX3BmZDFfNTQwbSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbGNkaWYxX3NlbHNbXQk9IHsgImxjZGlmMV9wb2RmIiwgImlwcF9kaTAiLCAiaXBwX2RpMSIsICJsZGJfZGkwIiwgImxkYl9kaTEiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmxjZGlmMl9wcmVfc2Vsc1tdCT0geyAicGxsMl9idXMiLCAicGxsM19wZmQzXzQ1NG0iLCAicGxsNV92aWRlb19kaXYiLCAicGxsMl9wZmQwXzM1Mm0iLCAicGxsMl9wZmQzXzU5NG0iLCAicGxsM19wZmQxXzU0MG0iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmxjZGlmMl9zZWxzW10JPSB7ICJsY2RpZjJfcG9kZiIsICJpcHBfZGkwIiwgImlwcF9kaTEiLCAibGRiX2RpMCIsICJsZGJfZGkxIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpkaXNwbGF5X3NlbHNbXQk9IHsgInBsbDJfYnVzIiwgInBsbDJfcGZkMl8zOTZtIiwgInBsbDNfdXNiX290ZyIsICJwbGwzX3BmZDFfNTQwbSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqY3NpX3NlbHNbXQkJPSB7ICJvc2MiLCAicGxsMl9wZmQyXzM5Nm0iLCAicGxsM18xMjBtIiwgInBsbDNfcGZkMV81NDBtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpja28xX3NlbHNbXQkJPSB7CisJInBsbDNfdXNiX290ZyIsICJwbGwyX2J1cyIsICJwbGwxX3N5cyIsICJwbGw1X3ZpZGVvX2RpdiIsCisJImR1bW15IiwgIm9jcmFtIiwgImR1bW15IiwgInB4cF9heGkiLCAiZXBkY19heGkiLCAibGNkaWZfcGl4IiwKKwkiZXBkY19waXgiLCAiYWhiIiwgImlwZyIsICJwZXJjbGsiLCAiY2tpbCIsICJwbGw0X2F1ZGlvX2RpdiIsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNrbzJfc2Vsc1tdCQk9IHsKKwkiZHVtbXkiLCAibW1kY19wMF9mYXN0IiwgInVzZGhjNCIsICJ1c2RoYzEiLCAiZHVtbXkiLCAid3JjayIsCisJImVjc3BpX3Jvb3QiLCAiZHVtbXkiLCAidXNkaGMzIiwgInBjaWUiLCAiYXJtIiwgImNzaV9jb3JlIiwKKwkibGNkaWZfYXhpIiwgImR1bW15IiwgIm9zYyIsICJkdW1teSIsICJncHUyZF9vdmdfY29yZSIsCisJInVzZGhjMiIsICJzc2kxIiwgInNzaTIiLCAic3NpMyIsICJncHUyZF9jb3JlIiwgImR1bW15IiwKKwkiZHVtbXkiLCAiZHVtbXkiLCAiZHVtbXkiLCAiZXNhaV9leHRhbCIsICJlaW1fc2xvdyIsICJ1YXJ0X3NlcmlhbCIsCisJInNwZGlmIiwgImFzcmMiLCAiZHVtbXkiLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpja29fc2Vsc1tdID0geyAiY2tvMSIsICJja28yIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpsdmRzX3NlbHNbXQk9IHsKKwkiYXJtIiwgInBsbDFfc3lzIiwgImR1bW15IiwgImR1bW15IiwgImR1bW15IiwgImR1bW15IiwgImR1bW15IiwgInBsbDVfdmlkZW9fZGl2IiwKKwkiZHVtbXkiLCAiZHVtbXkiLCAicGNpZV9yZWZfMTI1bSIsICJkdW1teSIsICJ1c2JwaHkxIiwgInVzYnBoeTIiLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbSU1YNlNYX0NMS19DTEtfRU5EXTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKKworc3RhdGljIGludCBjb25zdCBjbGtzX2luaXRfb25bXSBfX2luaXRjb25zdCA9IHsKKwlJTVg2U1hfQ0xLX0FJUFNfVFoxLCBJTVg2U1hfQ0xLX0FJUFNfVFoyLCBJTVg2U1hfQ0xLX0FJUFNfVFozLAorCUlNWDZTWF9DTEtfSVBNVVgxLCBJTVg2U1hfQ0xLX0lQTVVYMiwgSU1YNlNYX0NMS19JUE1VWDMsCisJSU1YNlNYX0NMS19XQUtFVVAsIElNWDZTWF9DTEtfTU1EQ19QMF9GQVNULCBJTVg2U1hfQ0xLX01NRENfUDBfSVBHLAorCUlNWDZTWF9DTEtfUk9NLCBJTVg2U1hfQ0xLX0FSTSwgSU1YNlNYX0NMS19JUEcsIElNWDZTWF9DTEtfT0NSQU0sCisJSU1YNlNYX0NMS19QRVIyX01BSU4sIElNWDZTWF9DTEtfUEVSQ0xLLCBJTVg2U1hfQ0xLX000LAorCUlNWDZTWF9DTEtfUVNQSTEsIElNWDZTWF9DTEtfUVNQSTIsIElNWDZTWF9DTEtfVUFSVF9JUEcsCisJSU1YNlNYX0NMS19VQVJUX1NFUklBTCwgSU1YNlNYX0NMS19JMkMzLCBJTVg2U1hfQ0xLX0VDU1BJNSwKKwlJTVg2U1hfQ0xLX0NBTjFfSVBHLCBJTVg2U1hfQ0xLX0NBTjFfU0VSSUFMLCBJTVg2U1hfQ0xLX0NBTjJfSVBHLAorCUlNWDZTWF9DTEtfQ0FOMl9TRVJJQUwsIElNWDZTWF9DTEtfQ0FORkQsIElNWDZTWF9DTEtfRVBJVDEsCisJSU1YNlNYX0NMS19FUElUMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl90YWJsZSBjbGtfZW5ldF9yZWZfdGFibGVbXSA9IHsKKwl7IC52YWwgPSAwLCAuZGl2ID0gMjAsIH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDEwLCB9LAorCXsgLnZhbCA9IDIsIC5kaXYgPSA1LCB9LAorCXsgLnZhbCA9IDMsIC5kaXYgPSA0LCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2X3RhYmxlIHBvc3RfZGl2X3RhYmxlW10gPSB7CisJeyAudmFsID0gMiwgLmRpdiA9IDEsIH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDIsIH0sCisJeyAudmFsID0gMCwgLmRpdiA9IDQsIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfdGFibGUgdmlkZW9fZGl2X3RhYmxlW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDEsIH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDIsIH0sCisJeyAudmFsID0gMiwgLmRpdiA9IDEsIH0sCisJeyAudmFsID0gMywgLmRpdiA9IDQsIH0sCisJeyB9Cit9OworCitzdGF0aWMgdTMyIHNoYXJlX2NvdW50X2FzcmM7CitzdGF0aWMgdTMyIHNoYXJlX2NvdW50X2F1ZGlvOworc3RhdGljIHUzMiBzaGFyZV9jb3VudF9lc2FpOworCitzdGF0aWMgdm9pZCBfX2luaXQgaW14NnN4X2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IGk7CisKKwljbGtzW0lNWDZTWF9DTEtfRFVNTVldID0gaW14X2Nsa19maXhlZCgiZHVtbXkiLCAwKTsKKworCWNsa3NbSU1YNlNYX0NMS19DS0lMXSA9IG9mX2Nsa19nZXRfYnlfbmFtZShjY21fbm9kZSwgImNraWwiKTsKKwljbGtzW0lNWDZTWF9DTEtfT1NDXSA9IG9mX2Nsa19nZXRfYnlfbmFtZShjY21fbm9kZSwgIm9zYyIpOworCisJLyogaXBwX2RpIGNsb2NrIGlzIGV4dGVybmFsIGlucHV0ICovCisJY2xrc1tJTVg2U1hfQ0xLX0lQUF9ESTBdID0gb2ZfY2xrX2dldF9ieV9uYW1lKGNjbV9ub2RlLCAiaXBwX2RpMCIpOworCWNsa3NbSU1YNlNYX0NMS19JUFBfREkxXSA9IG9mX2Nsa19nZXRfYnlfbmFtZShjY21fbm9kZSwgImlwcF9kaTEiKTsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxpbXg2c3gtYW5hdG9wIik7CisJYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlXQVJOX09OKCFiYXNlKTsKKworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAgICBuYW1lICAgICAgICAgICAgIHBhcmVudF9uYW1lICAgYmFzZSAgICAgICAgIGRpdl9tYXNrICovCisJY2xrc1tJTVg2U1hfQ0xLX1BMTDFfU1lTXSAgICAgICA9IGlteF9jbGtfcGxsdjMoSU1YX1BMTFYzX1NZUywgICAgICJwbGwxX3N5cyIsICAgICAgIm9zYyIsICAgICAgICBiYXNlLCAgICAgICAgMHg3Zik7CisJY2xrc1tJTVg2U1hfQ0xLX1BMTDJfQlVTXSAgICAgICA9IGlteF9jbGtfcGxsdjMoSU1YX1BMTFYzX0dFTkVSSUMsICJwbGwyX2J1cyIsICAgICAgIm9zYyIsICAgICAgICBiYXNlICsgMHgzMCwgMHgxKTsKKwljbGtzW0lNWDZTWF9DTEtfUExMM19VU0JfT1RHXSAgID0gaW14X2Nsa19wbGx2MyhJTVhfUExMVjNfVVNCLCAgICAgInBsbDNfdXNiX290ZyIsICAib3NjIiwgICAgICAgIGJhc2UgKyAweDEwLCAweDMpOworCWNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPXSAgICAgPSBpbXhfY2xrX3BsbHYzKElNWF9QTExWM19BViwgICAgICAicGxsNF9hdWRpbyIsICAgICJvc2MiLCAgICAgICAgYmFzZSArIDB4NzAsIDB4N2YpOworCWNsa3NbSU1YNlNYX0NMS19QTEw1X1ZJREVPXSAgICAgPSBpbXhfY2xrX3BsbHYzKElNWF9QTExWM19BViwgICAgICAicGxsNV92aWRlbyIsICAgICJvc2MiLCAgICAgICAgYmFzZSArIDB4YTAsIDB4N2YpOworCWNsa3NbSU1YNlNYX0NMS19QTEw2X0VORVRdICAgICAgPSBpbXhfY2xrX3BsbHYzKElNWF9QTExWM19FTkVULCAgICAicGxsNl9lbmV0IiwgICAgICJvc2MiLCAgICAgICAgYmFzZSArIDB4ZTAsIDB4Myk7CisJY2xrc1tJTVg2U1hfQ0xLX1BMTDdfVVNCX0hPU1RdICA9IGlteF9jbGtfcGxsdjMoSU1YX1BMTFYzX1VTQiwgICAgICJwbGw3X3VzYl9ob3N0IiwgIm9zYyIsICAgICAgICBiYXNlICsgMHgyMCwgMHgzKTsKKworCS8qCisJICogQml0IDIwIGlzIHRoZSByZXNlcnZlZCBhbmQgcmVhZC1vbmx5IGJpdCwgd2UgZG8gdGhpcyBvbmx5IGZvcjoKKwkgKiAtIERvIG5vdGhpbmcgZm9yIHVzYnBoeSBjbGtfZW5hYmxlL2Rpc2FibGUKKwkgKiAtIEtlZXAgcmVmY291bnQgd2hlbiBkbyB1c2JwaHkgY2xrX2VuYWJsZS9kaXNhYmxlLCBpbiB0aGF0IGNhc2UsCisJICogdGhlIGNsayBmcmFtZXdvcmsgbWF5IG5lZWQgdG8gZW5hYmxlL2Rpc2FibGUgdXNicGh5J3MgcGFyZW50CisJICovCisJY2xrc1tJTVg2U1hfQ0xLX1VTQlBIWTFdID0gaW14X2Nsa19nYXRlKCJ1c2JwaHkxIiwgInBsbDNfdXNiX290ZyIsICBiYXNlICsgMHgxMCwgMjApOworCWNsa3NbSU1YNlNYX0NMS19VU0JQSFkyXSA9IGlteF9jbGtfZ2F0ZSgidXNicGh5MiIsICJwbGw3X3VzYl9ob3N0IiwgYmFzZSArIDB4MjAsIDIwKTsKKworCS8qCisJICogdXNicGh5Kl9nYXRlIG5lZWRzIHRvIGJlIG9uIGFmdGVyIHN5c3RlbSBib290cyB1cCwgYW5kIHNvZnR3YXJlCisJICogbmV2ZXIgbmVlZHMgdG8gY29udHJvbCBpdCBhbnltb3JlLgorCSAqLworCWNsa3NbSU1YNlNYX0NMS19VU0JQSFkxX0dBVEVdID0gaW14X2Nsa19nYXRlKCJ1c2JwaHkxX2dhdGUiLCAiZHVtbXkiLCBiYXNlICsgMHgxMCwgNik7CisJY2xrc1tJTVg2U1hfQ0xLX1VTQlBIWTJfR0FURV0gPSBpbXhfY2xrX2dhdGUoInVzYnBoeTJfZ2F0ZSIsICJkdW1teSIsIGJhc2UgKyAweDIwLCA2KTsKKworCS8qIEZJWE1FIDEwME1oeiBpcyB1c2VkIGZvciBwY2llIHJlZiBmb3IgYWxsIGlteDYgcGNpZSwgZXhjZXB0ZWQgaW14NnEgKi8KKwljbGtzW0lNWDZTWF9DTEtfUENJRV9SRUZdID0gaW14X2Nsa19maXhlZF9mYWN0b3IoInBjaWVfcmVmIiwgInBsbDZfZW5ldCIsIDEsIDUpOworCWNsa3NbSU1YNlNYX0NMS19QQ0lFX1JFRl8xMjVNXSA9IGlteF9jbGtfZ2F0ZSgicGNpZV9yZWZfMTI1bSIsICJwY2llX3JlZiIsIGJhc2UgKyAweGUwLCAxOSk7CisKKwljbGtzW0lNWDZTWF9DTEtfTFZEUzFfT1VUXSA9IGlteF9jbGtfZ2F0ZSgibHZkczFfb3V0IiwgImx2ZHMxX3NlbCIsIGJhc2UgKyAweDE2MCwgMTApOworCisJY2xrc1tJTVg2U1hfQ0xLX0VORVRfUkVGXSA9IGNsa19yZWdpc3Rlcl9kaXZpZGVyX3RhYmxlKE5VTEwsICJlbmV0X3JlZiIsICJwbGw2X2VuZXQiLCAwLAorCQkJYmFzZSArIDB4ZTAsIDAsIDIsIDAsIGNsa19lbmV0X3JlZl90YWJsZSwKKwkJCSZpbXhfY2NtX2xvY2spOworCWNsa3NbSU1YNlNYX0NMS19FTkVUMl9SRUZdID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXJfdGFibGUoTlVMTCwgImVuZXQyX3JlZiIsICJwbGw2X2VuZXQiLCAwLAorCQkJYmFzZSArIDB4ZTAsIDIsIDIsIDAsIGNsa19lbmV0X3JlZl90YWJsZSwKKwkJCSZpbXhfY2NtX2xvY2spOworCWNsa3NbSU1YNlNYX0NMS19FTkVUMl9SRUZfMTI1TV0gPSBpbXhfY2xrX2dhdGUoImVuZXQyX3JlZl8xMjVtIiwgImVuZXQyX3JlZiIsIGJhc2UgKyAweGUwLCAyMCk7CisKKwljbGtzW0lNWDZTWF9DTEtfRU5FVF9QVFBfUkVGXSA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJlbmV0X3B0cF9yZWYiLCAicGxsNl9lbmV0IiwgMSwgMjApOworCWNsa3NbSU1YNlNYX0NMS19FTkVUX1BUUF0gPSBpbXhfY2xrX2dhdGUoImVuZXRfcHRwXzI1bSIsICJlbmV0X3B0cF9yZWYiLCBiYXNlICsgMHhlMCwgMjEpOworCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lICAgICAgICAgICAgICBwYXJlbnRfbmFtZSAgICAgcmVnICAgICAgICAgICBpZHggKi8KKwljbGtzW0lNWDZTWF9DTEtfUExMMl9QRkQwXSA9IGlteF9jbGtfcGZkKCJwbGwyX3BmZDBfMzUybSIsICJwbGwyX2J1cyIsICAgICBiYXNlICsgMHgxMDAsIDApOworCWNsa3NbSU1YNlNYX0NMS19QTEwyX1BGRDFdID0gaW14X2Nsa19wZmQoInBsbDJfcGZkMV81OTRtIiwgInBsbDJfYnVzIiwgICAgIGJhc2UgKyAweDEwMCwgMSk7CisJY2xrc1tJTVg2U1hfQ0xLX1BMTDJfUEZEMl0gPSBpbXhfY2xrX3BmZCgicGxsMl9wZmQyXzM5Nm0iLCAicGxsMl9idXMiLCAgICAgYmFzZSArIDB4MTAwLCAyKTsKKwljbGtzW0lNWDZTWF9DTEtfUExMMl9QRkQzXSA9IGlteF9jbGtfcGZkKCJwbGwyX3BmZDNfNTk0bSIsICJwbGwyX2J1cyIsICAgICBiYXNlICsgMHgxMDAsIDMpOworCWNsa3NbSU1YNlNYX0NMS19QTEwzX1BGRDBdID0gaW14X2Nsa19wZmQoInBsbDNfcGZkMF83MjBtIiwgInBsbDNfdXNiX290ZyIsIGJhc2UgKyAweGYwLCAgMCk7CisJY2xrc1tJTVg2U1hfQ0xLX1BMTDNfUEZEMV0gPSBpbXhfY2xrX3BmZCgicGxsM19wZmQxXzU0MG0iLCAicGxsM191c2Jfb3RnIiwgYmFzZSArIDB4ZjAsICAxKTsKKwljbGtzW0lNWDZTWF9DTEtfUExMM19QRkQyXSA9IGlteF9jbGtfcGZkKCJwbGwzX3BmZDJfNTA4bSIsICJwbGwzX3VzYl9vdGciLCBiYXNlICsgMHhmMCwgIDIpOworCWNsa3NbSU1YNlNYX0NMS19QTEwzX1BGRDNdID0gaW14X2Nsa19wZmQoInBsbDNfcGZkM180NTRtIiwgInBsbDNfdXNiX290ZyIsIGJhc2UgKyAweGYwLCAgMyk7CisKKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICAgICBwYXJlbnRfbmFtZSAgICAgICBtdWx0IGRpdiAqLworCWNsa3NbSU1YNlNYX0NMS19QTEwyXzE5OE1dID0gaW14X2Nsa19maXhlZF9mYWN0b3IoInBsbDJfMTk4bSIsICJwbGwyX3BmZDJfMzk2bSIsIDEsICAgMik7CisJY2xrc1tJTVg2U1hfQ0xLX1BMTDNfMTIwTV0gPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigicGxsM18xMjBtIiwgInBsbDNfdXNiX290ZyIsICAgMSwgICA0KTsKKwljbGtzW0lNWDZTWF9DTEtfUExMM184ME1dICA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJwbGwzXzgwbSIsICAicGxsM191c2Jfb3RnIiwgICAxLCAgIDYpOworCWNsa3NbSU1YNlNYX0NMS19QTEwzXzYwTV0gID0gaW14X2Nsa19maXhlZF9mYWN0b3IoInBsbDNfNjBtIiwgICJwbGwzX3VzYl9vdGciLCAgIDEsICAgOCk7CisJY2xrc1tJTVg2U1hfQ0xLX1RXRF0gICAgICAgPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigidHdkIiwgICAgICAgImFybSIsICAgICAgICAgICAgMSwgICAyKTsKKwljbGtzW0lNWDZTWF9DTEtfR1BUXzNNXSAgICA9IGlteF9jbGtfZml4ZWRfZmFjdG9yKCJncHRfM20iLCAgICAib3NjIiwgICAgICAgICAgICAxLCAgIDgpOworCisJY2xrc1tJTVg2U1hfQ0xLX1BMTDRfUE9TVF9ESVZdICA9IGNsa19yZWdpc3Rlcl9kaXZpZGVyX3RhYmxlKE5VTEwsICJwbGw0X3Bvc3RfZGl2IiwgInBsbDRfYXVkaW8iLAorCQkJCUNMS19TRVRfUkFURV9QQVJFTlQsIGJhc2UgKyAweDcwLCAxOSwgMiwgMCwgcG9zdF9kaXZfdGFibGUsICZpbXhfY2NtX2xvY2spOworCWNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0gPSBjbGtfcmVnaXN0ZXJfZGl2aWRlcihOVUxMLCAicGxsNF9hdWRpb19kaXYiLCAicGxsNF9wb3N0X2RpdiIsCisJCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgYmFzZSArIDB4MTcwLCAxNSwgMSwgMCwgJmlteF9jY21fbG9jayk7CisJY2xrc1tJTVg2U1hfQ0xLX1BMTDVfUE9TVF9ESVZdICA9IGNsa19yZWdpc3Rlcl9kaXZpZGVyX3RhYmxlKE5VTEwsICJwbGw1X3Bvc3RfZGl2IiwgInBsbDVfdmlkZW8iLAorCQkJCUNMS19TRVRfUkFURV9QQVJFTlQsIGJhc2UgKyAweGEwLCAxOSwgMiwgMCwgcG9zdF9kaXZfdGFibGUsICZpbXhfY2NtX2xvY2spOworCWNsa3NbSU1YNlNYX0NMS19QTEw1X1ZJREVPX0RJVl0gPSBjbGtfcmVnaXN0ZXJfZGl2aWRlcl90YWJsZShOVUxMLCAicGxsNV92aWRlb19kaXYiLCAicGxsNV9wb3N0X2RpdiIsCisJCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgYmFzZSArIDB4MTcwLCAzMCwgMiwgMCwgdmlkZW9fZGl2X3RhYmxlLCAmaW14X2NjbV9sb2NrKTsKKworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAgICByZWcgICAgICAgICAgIHNoaWZ0ICAgd2lkdGggICBwYXJlbnRfbmFtZXMgICAgICAgbnVtX3BhcmVudHMgKi8KKwljbGtzW0lNWDZTWF9DTEtfTFZEUzFfU0VMXSAgICAgICAgICA9IGlteF9jbGtfbXV4KCJsdmRzMV9zZWwiLCAgICAgICAgYmFzZSArIDB4MTYwLCAwLCAgICAgIDUsICAgICAgbHZkc19zZWxzLCAgICAgICAgIEFSUkFZX1NJWkUobHZkc19zZWxzKSk7CisKKwlucCA9IGNjbV9ub2RlOworCWJhc2UgPSBvZl9pb21hcChucCwgMCk7CisJV0FSTl9PTighYmFzZSk7CisKKwlpbXg2cV9wbV9zZXRfY2NtX2Jhc2UoYmFzZSk7CisKKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgICAgcmVnICAgICAgICAgICBzaGlmdCAgIHdpZHRoICAgcGFyZW50X25hbWVzICAgICAgIG51bV9wYXJlbnRzICovCisJY2xrc1tJTVg2U1hfQ0xLX1NURVBdICAgICAgICAgICAgICAgPSBpbXhfY2xrX211eCgic3RlcCIsICAgICAgICAgICAgIGJhc2UgKyAweGMsICAgOCwgICAgICAxLCAgICAgIHN0ZXBfc2VscywgICAgICAgICBBUlJBWV9TSVpFKHN0ZXBfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19QTEwxX1NXXSAgICAgICAgICAgID0gaW14X2Nsa19tdXgoInBsbDFfc3ciLCAgICAgICAgICBiYXNlICsgMHhjLCAgIDIsICAgICAgMSwgICAgICBwbGwxX3N3X3NlbHMsICAgICAgQVJSQVlfU0laRShwbGwxX3N3X3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfT0NSQU1fU0VMXSAgICAgICAgICA9IGlteF9jbGtfbXV4KCJvY3JhbV9zZWwiLCAgICAgICAgYmFzZSArIDB4MTQsICA2LCAgICAgIDIsICAgICAgb2NyYW1fc2VscywgICAgICAgIEFSUkFZX1NJWkUob2NyYW1fc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19QRVJJUEhfUFJFXSAgICAgICAgID0gaW14X2Nsa19tdXgoInBlcmlwaF9wcmUiLCAgICAgICBiYXNlICsgMHgxOCwgIDE4LCAgICAgMiwgICAgICBwZXJpcGhfcHJlX3NlbHMsICAgQVJSQVlfU0laRShwZXJpcGhfcHJlX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfUEVSSVBIMl9QUkVdICAgICAgICA9IGlteF9jbGtfbXV4KCJwZXJpcGgyX3ByZSIsICAgICAgYmFzZSArIDB4MTgsICAyMSwgICAgIDIsICAgICAgcGVyaXBoMl9wcmVfc2VscywgICBBUlJBWV9TSVpFKHBlcmlwaDJfcHJlX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfUEVSSVBIX0NMSzJfU0VMXSAgICA9IGlteF9jbGtfbXV4KCJwZXJpcGhfY2xrMl9zZWwiLCAgYmFzZSArIDB4MTgsICAxMiwgICAgIDIsICAgICAgcGVyaXBoX2NsazJfc2VscywgIEFSUkFZX1NJWkUocGVyaXBoX2NsazJfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19QRVJJUEgyX0NMSzJfU0VMXSAgID0gaW14X2Nsa19tdXgoInBlcmlwaDJfY2xrMl9zZWwiLCBiYXNlICsgMHgxOCwgIDIwLCAgICAgMSwgICAgICBwZXJpcGgyX2NsazJfc2VscywgQVJSQVlfU0laRShwZXJpcGgyX2NsazJfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19QQ0lFX0FYSV9TRUxdICAgICAgID0gaW14X2Nsa19tdXgoInBjaWVfYXhpX3NlbCIsICAgICBiYXNlICsgMHgxOCwgIDEwLCAgICAgMSwgICAgICBwY2llX2F4aV9zZWxzLCAgICAgQVJSQVlfU0laRShwY2llX2F4aV9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX0dQVV9BWElfU0VMXSAgICAgICAgPSBpbXhfY2xrX211eCgiZ3B1X2F4aV9zZWwiLCAgICAgIGJhc2UgKyAweDE4LCAgOCwgICAgICAyLCAgICAgIGdwdV9heGlfc2VscywgICAgICBBUlJBWV9TSVpFKGdwdV9heGlfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19HUFVfQ09SRV9TRUxdICAgICAgID0gaW14X2Nsa19tdXgoImdwdV9jb3JlX3NlbCIsICAgICBiYXNlICsgMHgxOCwgIDQsICAgICAgMiwgICAgICBncHVfY29yZV9zZWxzLCAgICAgQVJSQVlfU0laRShncHVfY29yZV9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX0VJTV9TTE9XX1NFTF0gICAgICAgPSBpbXhfY2xrX211eCgiZWltX3Nsb3dfc2VsIiwgICAgIGJhc2UgKyAweDFjLCAgMjksICAgICAyLCAgICAgIGVpbV9zbG93X3NlbHMsICAgICBBUlJBWV9TSVpFKGVpbV9zbG93X3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfVVNESEMxX1NFTF0gICAgICAgICA9IGlteF9jbGtfbXV4KCJ1c2RoYzFfc2VsIiwgICAgICAgYmFzZSArIDB4MWMsICAxNiwgICAgIDEsICAgICAgdXNkaGNfc2VscywgICAgICAgIEFSUkFZX1NJWkUodXNkaGNfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19VU0RIQzJfU0VMXSAgICAgICAgID0gaW14X2Nsa19tdXgoInVzZGhjMl9zZWwiLCAgICAgICBiYXNlICsgMHgxYywgIDE3LCAgICAgMSwgICAgICB1c2RoY19zZWxzLCAgICAgICAgQVJSQVlfU0laRSh1c2RoY19zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX1VTREhDM19TRUxdICAgICAgICAgPSBpbXhfY2xrX211eCgidXNkaGMzX3NlbCIsICAgICAgIGJhc2UgKyAweDFjLCAgMTgsICAgICAxLCAgICAgIHVzZGhjX3NlbHMsICAgICAgICBBUlJBWV9TSVpFKHVzZGhjX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfVVNESEM0X1NFTF0gICAgICAgICA9IGlteF9jbGtfbXV4KCJ1c2RoYzRfc2VsIiwgICAgICAgYmFzZSArIDB4MWMsICAxOSwgICAgIDEsICAgICAgdXNkaGNfc2VscywgICAgICAgIEFSUkFZX1NJWkUodXNkaGNfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19TU0kzX1NFTF0gICAgICAgICAgID0gaW14X2Nsa19tdXgoInNzaTNfc2VsIiwgICAgICAgICBiYXNlICsgMHgxYywgIDE0LCAgICAgMiwgICAgICBzc2lfc2VscywgICAgICAgICAgQVJSQVlfU0laRShzc2lfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19TU0kyX1NFTF0gICAgICAgICAgID0gaW14X2Nsa19tdXgoInNzaTJfc2VsIiwgICAgICAgICBiYXNlICsgMHgxYywgIDEyLCAgICAgMiwgICAgICBzc2lfc2VscywgICAgICAgICAgQVJSQVlfU0laRShzc2lfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19TU0kxX1NFTF0gICAgICAgICAgID0gaW14X2Nsa19tdXgoInNzaTFfc2VsIiwgICAgICAgICBiYXNlICsgMHgxYywgIDEwLCAgICAgMiwgICAgICBzc2lfc2VscywgICAgICAgICAgQVJSQVlfU0laRShzc2lfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19RU1BJMV9TRUxdICAgICAgICAgID0gaW14X2Nsa19tdXhfZmxhZ3MoInFzcGkxX3NlbCIsIGJhc2UgKyAweDFjLCAgNywgMywgcXNwaTFfc2VscywgQVJSQVlfU0laRShxc3BpMV9zZWxzKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7CisJY2xrc1tJTVg2U1hfQ0xLX1BFUkNMS19TRUxdICAgICAgICAgPSBpbXhfY2xrX211eCgicGVyY2xrX3NlbCIsICAgICAgIGJhc2UgKyAweDFjLCAgNiwgICAgICAxLCAgICAgIHBlcmNsa19zZWxzLCAgICAgICBBUlJBWV9TSVpFKHBlcmNsa19zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX1ZJRF9TRUxdICAgICAgICAgICAgPSBpbXhfY2xrX211eCgidmlkX3NlbCIsICAgICAgICAgIGJhc2UgKyAweDIwLCAgMjEsICAgICAzLCAgICAgIHZpZF9zZWxzLCAgICAgICAgICBBUlJBWV9TSVpFKHZpZF9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX0VTQUlfU0VMXSAgICAgICAgICAgPSBpbXhfY2xrX211eCgiZXNhaV9zZWwiLCAgICAgICAgIGJhc2UgKyAweDIwLCAgMTksICAgICAyLCAgICAgIGF1ZGlvX3NlbHMsICAgICAgICBBUlJBWV9TSVpFKGF1ZGlvX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfQ0FOX1NFTF0gICAgICAgICAgICA9IGlteF9jbGtfbXV4KCJjYW5fc2VsIiwgICAgICAgICAgYmFzZSArIDB4MjAsICA4LCAgICAgIDIsICAgICAgY2FuX3NlbHMsICAgICAgICAgIEFSUkFZX1NJWkUoY2FuX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfVUFSVF9TRUxdICAgICAgICAgICA9IGlteF9jbGtfbXV4KCJ1YXJ0X3NlbCIsICAgICAgICAgYmFzZSArIDB4MjQsICA2LCAgICAgIDEsICAgICAgdWFydF9zZWxzLCAgICAgICAgIEFSUkFZX1NJWkUodWFydF9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX1FTUEkyX1NFTF0gICAgICAgICAgPSBpbXhfY2xrX211eF9mbGFncygicXNwaTJfc2VsIiwgYmFzZSArIDB4MmMsIDE1LCAzLCBxc3BpMl9zZWxzLCBBUlJBWV9TSVpFKHFzcGkyX3NlbHMpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKKwljbGtzW0lNWDZTWF9DTEtfU1BESUZfU0VMXSAgICAgICAgICA9IGlteF9jbGtfbXV4KCJzcGRpZl9zZWwiLCAgICAgICAgYmFzZSArIDB4MzAsICAyMCwgICAgIDIsICAgICAgYXVkaW9fc2VscywgICAgICAgIEFSUkFZX1NJWkUoYXVkaW9fc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19BVURJT19TRUxdICAgICAgICAgID0gaW14X2Nsa19tdXgoImF1ZGlvX3NlbCIsICAgICAgICBiYXNlICsgMHgzMCwgIDcsICAgICAgMiwgICAgICBhdWRpb19zZWxzLCAgICAgICAgQVJSQVlfU0laRShhdWRpb19zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX0VORVRfUFJFX1NFTF0gICAgICAgPSBpbXhfY2xrX211eCgiZW5ldF9wcmVfc2VsIiwgICAgIGJhc2UgKyAweDM0LCAgMTUsICAgICAzLCAgICAgIGVuZXRfcHJlX3NlbHMsICAgICBBUlJBWV9TSVpFKGVuZXRfcHJlX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfRU5FVF9TRUxdICAgICAgICAgICA9IGlteF9jbGtfbXV4KCJlbmV0X3NlbCIsICAgICAgICAgYmFzZSArIDB4MzQsICA5LCAgICAgIDMsICAgICAgZW5ldF9zZWxzLCAgICAgICAgIEFSUkFZX1NJWkUoZW5ldF9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX000X1BSRV9TRUxdICAgICAgICAgPSBpbXhfY2xrX211eCgibTRfcHJlX3NlbCIsICAgICAgIGJhc2UgKyAweDM0LCAgNiwgICAgICAzLCAgICAgIG00X3ByZV9zZWxzLCAgICAgICBBUlJBWV9TSVpFKG00X3ByZV9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX000X1NFTF0gICAgICAgICAgICAgPSBpbXhfY2xrX211eCgibTRfc2VsIiwgICAgICAgICAgIGJhc2UgKyAweDM0LCAgMCwgICAgICAzLCAgICAgIG00X3NlbHMsICAgICAgICAgICBBUlJBWV9TSVpFKG00X3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfRUNTUElfU0VMXSAgICAgICAgICA9IGlteF9jbGtfbXV4KCJlY3NwaV9zZWwiLCAgICAgICAgYmFzZSArIDB4MzgsICAxOCwgICAgIDEsICAgICAgZWNzcGlfc2VscywgICAgICAgIEFSUkFZX1NJWkUoZWNzcGlfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19MQ0RJRjJfUFJFX1NFTF0gICAgID0gaW14X2Nsa19tdXgoImxjZGlmMl9wcmVfc2VsIiwgICBiYXNlICsgMHgzOCwgIDYsICAgICAgMywgICAgICBsY2RpZjJfcHJlX3NlbHMsICAgQVJSQVlfU0laRShsY2RpZjJfcHJlX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUYyX1NFTF0gICAgICAgICA9IGlteF9jbGtfbXV4KCJsY2RpZjJfc2VsIiwgICAgICAgYmFzZSArIDB4MzgsICAwLCAgICAgIDMsICAgICAgbGNkaWYyX3NlbHMsICAgICAgIEFSUkFZX1NJWkUobGNkaWYyX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfRElTUExBWV9TRUxdICAgICAgICA9IGlteF9jbGtfbXV4KCJkaXNwbGF5X3NlbCIsICAgICAgYmFzZSArIDB4M2MsICAxNCwgICAgIDIsICAgICAgZGlzcGxheV9zZWxzLCAgICAgIEFSUkFZX1NJWkUoZGlzcGxheV9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX0NTSV9TRUxdICAgICAgICAgICAgPSBpbXhfY2xrX211eCgiY3NpX3NlbCIsICAgICAgICAgIGJhc2UgKyAweDNjLCAgOSwgICAgICAyLCAgICAgIGNzaV9zZWxzLCAgICAgICAgICBBUlJBWV9TSVpFKGNzaV9zZWxzKSk7CisJY2xrc1tJTVg2U1hfQ0xLX0NLTzFfU0VMXSAgICAgICAgICAgPSBpbXhfY2xrX211eCgiY2tvMV9zZWwiLCAgICAgICAgIGJhc2UgKyAweDYwLCAgMCwgICAgICA0LCAgICAgIGNrbzFfc2VscywgICAgICAgICBBUlJBWV9TSVpFKGNrbzFfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19DS08yX1NFTF0gICAgICAgICAgID0gaW14X2Nsa19tdXgoImNrbzJfc2VsIiwgICAgICAgICBiYXNlICsgMHg2MCwgIDE2LCAgICAgNSwgICAgICBja28yX3NlbHMsICAgICAgICAgQVJSQVlfU0laRShja28yX3NlbHMpKTsKKwljbGtzW0lNWDZTWF9DTEtfQ0tPXSAgICAgICAgICAgICAgICA9IGlteF9jbGtfbXV4KCJja28iLCAgICAgICAgICAgICAgYmFzZSArIDB4NjAsICA4LCAgICAgIDEsICAgICAgY2tvX3NlbHMsICAgICAgICAgIEFSUkFZX1NJWkUoY2tvX3NlbHMpKTsKKworCWNsa3NbSU1YNlNYX0NMS19MREJfREkxX0RJVl9TRUxdICAgID0gaW14X2Nsa19tdXhfZmxhZ3MoImxkYl9kaTFfZGl2X3NlbCIsIGJhc2UgKyAweDIwLCAxMSwgMSwgbGRiX2RpMV9kaXZfc2VscywgQVJSQVlfU0laRShsZGJfZGkxX2Rpdl9zZWxzKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7CisJY2xrc1tJTVg2U1hfQ0xLX0xEQl9ESTBfRElWX1NFTF0gICAgPSBpbXhfY2xrX211eF9mbGFncygibGRiX2RpMF9kaXZfc2VsIiwgYmFzZSArIDB4MjAsIDEwLCAxLCBsZGJfZGkwX2Rpdl9zZWxzLCBBUlJBWV9TSVpFKGxkYl9kaTBfZGl2X3NlbHMpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKKwljbGtzW0lNWDZTWF9DTEtfTERCX0RJMV9TRUxdICAgICAgICA9IGlteF9jbGtfbXV4X2ZsYWdzKCJsZGJfZGkxX3NlbCIsICAgICBiYXNlICsgMHgyYywgMTIsIDMsIGxkYl9kaTFfc2VscywgICAgICBBUlJBWV9TSVpFKGxkYl9kaTFfc2VscyksICAgIENMS19TRVRfUkFURV9QQVJFTlQpOworCWNsa3NbSU1YNlNYX0NMS19MREJfREkwX1NFTF0gICAgICAgID0gaW14X2Nsa19tdXhfZmxhZ3MoImxkYl9kaTBfc2VsIiwgICAgIGJhc2UgKyAweDJjLCA5LCAgMywgbGRiX2RpMF9zZWxzLCAgICAgIEFSUkFZX1NJWkUobGRiX2RpMF9zZWxzKSwgICAgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7CisJY2xrc1tJTVg2U1hfQ0xLX0xDRElGMV9QUkVfU0VMXSAgICAgPSBpbXhfY2xrX211eF9mbGFncygibGNkaWYxX3ByZV9zZWwiLCAgYmFzZSArIDB4MzgsIDE1LCAzLCBsY2RpZjFfcHJlX3NlbHMsICAgQVJSQVlfU0laRShsY2RpZjFfcHJlX3NlbHMpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUYxX1NFTF0gICAgICAgICA9IGlteF9jbGtfbXV4X2ZsYWdzKCJsY2RpZjFfc2VsIiwgICAgICBiYXNlICsgMHgzOCwgOSwgIDMsIGxjZGlmMV9zZWxzLCAgICAgICBBUlJBWV9TSVpFKGxjZGlmMV9zZWxzKSwgICAgIENMS19TRVRfUkFURV9QQVJFTlQpOworCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAgcGFyZW50X25hbWUgICAgICAgICAgcmVnICAgICAgICAgIHNoaWZ0IHdpZHRoICovCisJY2xrc1tJTVg2U1hfQ0xLX1BFUklQSF9DTEsyXSAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInBlcmlwaF9jbGsyIiwgICAgInBlcmlwaF9jbGsyX3NlbCIsICAgYmFzZSArIDB4MTQsIDI3LCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19QRVJJUEgyX0NMSzJdICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJwZXJpcGgyX2NsazIiLCAgICJwZXJpcGgyX2NsazJfc2VsIiwgIGJhc2UgKyAweDE0LCAwLCAgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfSVBHXSAgICAgICAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigiaXBnIiwgICAgICAgICAgICAiYWhiIiwgICAgICAgICAgICAgICBiYXNlICsgMHgxNCwgOCwgICAgMik7CisJY2xrc1tJTVg2U1hfQ0xLX0dQVV9DT1JFX1BPREZdICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoImdwdV9jb3JlX3BvZGYiLCAgImdwdV9jb3JlX3NlbCIsICAgICAgYmFzZSArIDB4MTgsIDI5LCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19HUFVfQVhJX1BPREZdICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJncHVfYXhpX3BvZGYiLCAgICJncHVfYXhpX3NlbCIsICAgICAgIGJhc2UgKyAweDE4LCAyNiwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUYxX1BPREZdICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigibGNkaWYxX3BvZGYiLCAgICAibGNkaWYxX3ByZWQiLCAgICAgICBiYXNlICsgMHgxOCwgMjMsICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX1FTUEkxX1BPREZdICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInFzcGkxX3BvZGYiLCAgICAgInFzcGkxX3NlbCIsICAgICAgICAgYmFzZSArIDB4MWMsIDI2LCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19FSU1fU0xPV19QT0RGXSAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJlaW1fc2xvd19wb2RmIiwgICJlaW1fc2xvd19zZWwiLCAgICAgIGJhc2UgKyAweDFjLCAyMywgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUYyX1BPREZdICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigibGNkaWYyX3BvZGYiLCAgICAibGNkaWYyX3ByZWQiLCAgICAgICBiYXNlICsgMHgxYywgMjAsICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX1BFUkNMS10gICAgICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInBlcmNsayIsICAgICAgICAgInBlcmNsa19zZWwiLCAgICAgICAgYmFzZSArIDB4MWMsIDAsICAgIDYpOworCWNsa3NbSU1YNlNYX0NMS19WSURfUE9ERl0gICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJ2aWRfcG9kZiIsICAgICAgICJ2aWRfc2VsIiwgICAgICAgICAgIGJhc2UgKyAweDIwLCAyNCwgICAyKTsKKwljbGtzW0lNWDZTWF9DTEtfQ0FOX1BPREZdICAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigiY2FuX3BvZGYiLCAgICAgICAiY2FuX3NlbCIsICAgICAgICAgICBiYXNlICsgMHgyMCwgMiwgICAgNik7CisJY2xrc1tJTVg2U1hfQ0xLX1VTREhDNF9QT0RGXSAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInVzZGhjNF9wb2RmIiwgICAgInVzZGhjNF9zZWwiLCAgICAgICAgYmFzZSArIDB4MjQsIDIyLCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19VU0RIQzNfUE9ERl0gICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJ1c2RoYzNfcG9kZiIsICAgICJ1c2RoYzNfc2VsIiwgICAgICAgIGJhc2UgKyAweDI0LCAxOSwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfVVNESEMyX1BPREZdICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigidXNkaGMyX3BvZGYiLCAgICAidXNkaGMyX3NlbCIsICAgICAgICBiYXNlICsgMHgyNCwgMTYsICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX1VTREhDMV9QT0RGXSAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInVzZGhjMV9wb2RmIiwgICAgInVzZGhjMV9zZWwiLCAgICAgICAgYmFzZSArIDB4MjQsIDExLCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19VQVJUX1BPREZdICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJ1YXJ0X3BvZGYiLCAgICAgICJ1YXJ0X3NlbCIsICAgICAgICAgIGJhc2UgKyAweDI0LCAwLCAgICA2KTsKKwljbGtzW0lNWDZTWF9DTEtfRVNBSV9QUkVEXSAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigiZXNhaV9wcmVkIiwgICAgICAiZXNhaV9zZWwiLCAgICAgICAgICBiYXNlICsgMHgyOCwgOSwgICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX0VTQUlfUE9ERl0gICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoImVzYWlfcG9kZiIsICAgICAgImVzYWlfcHJlZCIsICAgICAgICAgYmFzZSArIDB4MjgsIDI1LCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19TU0kzX1BSRURdICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJzc2kzX3ByZWQiLCAgICAgICJzc2kzX3NlbCIsICAgICAgICAgIGJhc2UgKyAweDI4LCAyMiwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfU1NJM19QT0RGXSAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigic3NpM19wb2RmIiwgICAgICAic3NpM19wcmVkIiwgICAgICAgICBiYXNlICsgMHgyOCwgMTYsICAgNik7CisJY2xrc1tJTVg2U1hfQ0xLX1NTSTFfUFJFRF0gICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInNzaTFfcHJlZCIsICAgICAgInNzaTFfc2VsIiwgICAgICAgICAgYmFzZSArIDB4MjgsIDYsICAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19TU0kxX1BPREZdICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJzc2kxX3BvZGYiLCAgICAgICJzc2kxX3ByZWQiLCAgICAgICAgIGJhc2UgKyAweDI4LCAwLCAgICA2KTsKKwljbGtzW0lNWDZTWF9DTEtfUVNQSTJfUFJFRF0gICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigicXNwaTJfcHJlZCIsICAgICAicXNwaTJfc2VsIiwgICAgICAgICBiYXNlICsgMHgyYywgMTgsICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX1FTUEkyX1BPREZdICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInFzcGkyX3BvZGYiLCAgICAgInFzcGkyX3ByZWQiLCAgICAgICAgYmFzZSArIDB4MmMsIDIxLCAgIDYpOworCWNsa3NbSU1YNlNYX0NMS19TU0kyX1BSRURdICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJzc2kyX3ByZWQiLCAgICAgICJzc2kyX3NlbCIsICAgICAgICAgIGJhc2UgKyAweDJjLCA2LCAgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfU1NJMl9QT0RGXSAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigic3NpMl9wb2RmIiwgICAgICAic3NpMl9wcmVkIiwgICAgICAgICBiYXNlICsgMHgyYywgMCwgICAgNik7CisJY2xrc1tJTVg2U1hfQ0xLX1NQRElGX1BSRURdICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoInNwZGlmX3ByZWQiLCAgICAgInNwZGlmX3NlbCIsICAgICAgICAgYmFzZSArIDB4MzAsIDI1LCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19TUERJRl9QT0RGXSAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJzcGRpZl9wb2RmIiwgICAgICJzcGRpZl9wcmVkIiwgICAgICAgIGJhc2UgKyAweDMwLCAyMiwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfQVVESU9fUFJFRF0gICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigiYXVkaW9fcHJlZCIsICAgICAiYXVkaW9fc2VsIiwgICAgICAgICBiYXNlICsgMHgzMCwgMTIsICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX0FVRElPX1BPREZdICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoImF1ZGlvX3BvZGYiLCAgICAgImF1ZGlvX3ByZWQiLCAgICAgICAgYmFzZSArIDB4MzAsIDksICAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19FTkVUX1BPREZdICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJlbmV0X3BvZGYiLCAgICAgICJlbmV0X3ByZV9zZWwiLCAgICAgIGJhc2UgKyAweDM0LCAxMiwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfTTRfUE9ERl0gICAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigibTRfcG9kZiIsICAgICAgICAibTRfc2VsIiwgICAgICAgICAgICBiYXNlICsgMHgzNCwgMywgICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX0VDU1BJX1BPREZdICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoImVjc3BpX3BvZGYiLCAgICAgImVjc3BpX3NlbCIsICAgICAgICAgYmFzZSArIDB4MzgsIDE5LCAgIDYpOworCWNsa3NbSU1YNlNYX0NMS19MQ0RJRjFfUFJFRF0gICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJsY2RpZjFfcHJlZCIsICAgICJsY2RpZjFfcHJlX3NlbCIsICAgIGJhc2UgKyAweDM4LCAxMiwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUYyX1BSRURdICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigibGNkaWYyX3ByZWQiLCAgICAibGNkaWYyX3ByZV9zZWwiLCAgICBiYXNlICsgMHgzOCwgMywgICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX0RJU1BMQVlfUE9ERl0gICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoImRpc3BsYXlfcG9kZiIsICAgImRpc3BsYXlfc2VsIiwgICAgICAgYmFzZSArIDB4M2MsIDE2LCAgIDMpOworCWNsa3NbSU1YNlNYX0NMS19DU0lfUE9ERl0gICAgICAgICAgID0gaW14X2Nsa19kaXZpZGVyKCJjc2lfcG9kZiIsICAgICAgICJjc2lfc2VsIiwgICAgICAgICAgIGJhc2UgKyAweDNjLCAxMSwgICAzKTsKKwljbGtzW0lNWDZTWF9DTEtfQ0tPMV9QT0RGXSAgICAgICAgICA9IGlteF9jbGtfZGl2aWRlcigiY2tvMV9wb2RmIiwgICAgICAiY2tvMV9zZWwiLCAgICAgICAgICBiYXNlICsgMHg2MCwgNCwgICAgMyk7CisJY2xrc1tJTVg2U1hfQ0xLX0NLTzJfUE9ERl0gICAgICAgICAgPSBpbXhfY2xrX2RpdmlkZXIoImNrbzJfcG9kZiIsICAgICAgImNrbzJfc2VsIiwgICAgICAgICAgYmFzZSArIDB4NjAsIDIxLCAgIDMpOworCisJY2xrc1tJTVg2U1hfQ0xLX0xEQl9ESTBfRElWXzNfNV0gICAgPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigibGRiX2RpMF9kaXZfM181IiwgImxkYl9kaTBfc2VsIiwgMiwgNyk7CisJY2xrc1tJTVg2U1hfQ0xLX0xEQl9ESTBfRElWXzddICAgICAgPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigibGRiX2RpMF9kaXZfNyIsICAgImxkYl9kaTBfc2VsIiwgMSwgNyk7CisJY2xrc1tJTVg2U1hfQ0xLX0xEQl9ESTFfRElWXzNfNV0gICAgPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigibGRiX2RpMV9kaXZfM181IiwgImxkYl9kaTFfc2VsIiwgMiwgNyk7CisJY2xrc1tJTVg2U1hfQ0xLX0xEQl9ESTFfRElWXzddICAgICAgPSBpbXhfY2xrX2ZpeGVkX2ZhY3RvcigibGRiX2RpMV9kaXZfNyIsICAgImxkYl9kaTFfc2VsIiwgMSwgNyk7CisKKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgcmVnICAgICAgICAgIHNoaWZ0IHdpZHRoIGJ1c3k6IHJlZywgICBzaGlmdCBwYXJlbnRfbmFtZXMgICAgICAgbnVtX3BhcmVudHMgKi8KKwljbGtzW0lNWDZTWF9DTEtfUEVSSVBIXSAgICAgICA9IGlteF9jbGtfYnVzeV9tdXgoInBlcmlwaCIsICAgYmFzZSArIDB4MTQsIDI1LCAgIDEsICAgIGJhc2UgKyAweDQ4LCA1LCAgICBwZXJpcGhfc2VscywgICAgICAgQVJSQVlfU0laRShwZXJpcGhfc2VscykpOworCWNsa3NbSU1YNlNYX0NMS19QRVJJUEgyXSAgICAgID0gaW14X2Nsa19idXN5X211eCgicGVyaXBoMiIsICBiYXNlICsgMHgxNCwgMjYsICAgMSwgICAgYmFzZSArIDB4NDgsIDMsICAgIHBlcmlwaDJfc2VscywgICAgICBBUlJBWV9TSVpFKHBlcmlwaDJfc2VscykpOworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgICAgICBwYXJlbnRfbmFtZSAgICByZWcgICAgICAgICAgc2hpZnQgd2lkdGggYnVzeTogcmVnLCAgIHNoaWZ0ICovCisJY2xrc1tJTVg2U1hfQ0xLX09DUkFNX1BPREZdICAgPSBpbXhfY2xrX2J1c3lfZGl2aWRlcigib2NyYW1fcG9kZiIsICAgICJvY3JhbV9zZWwiLCAgIGJhc2UgKyAweDE0LCAxNiwgICAzLCAgICBiYXNlICsgMHg0OCwgMCk7CisJY2xrc1tJTVg2U1hfQ0xLX0FIQl0gICAgICAgICAgPSBpbXhfY2xrX2J1c3lfZGl2aWRlcigiYWhiIiwgICAgICAgICAgICJwZXJpcGgiLCAgICAgIGJhc2UgKyAweDE0LCAxMCwgICAzLCAgICBiYXNlICsgMHg0OCwgMSk7CisJY2xrc1tJTVg2U1hfQ0xLX01NRENfUE9ERl0gICAgPSBpbXhfY2xrX2J1c3lfZGl2aWRlcigibW1kY19wb2RmIiwgICAgICJwZXJpcGgyIiwgICAgIGJhc2UgKyAweDE0LCAzLCAgICAzLCAgICBiYXNlICsgMHg0OCwgMik7CisJY2xrc1tJTVg2U1hfQ0xLX0FSTV0gICAgICAgICAgPSBpbXhfY2xrX2J1c3lfZGl2aWRlcigiYXJtIiwgICAgICAgICAgICJwbGwxX3N3IiwgICAgIGJhc2UgKyAweDEwLCAwLCAgICAzLCAgICBiYXNlICsgMHg0OCwgMTYpOworCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgcGFyZW50X25hbWUgICAgICAgICAgcmVnICAgICAgICAgc2hpZnQgKi8KKwkvKiBDQ0dSMCAqLworCWNsa3NbSU1YNlNYX0NMS19BSVBTX1RaMV0gICAgID0gaW14X2Nsa19nYXRlMigiYWlwc190ejEiLCAgICAgICJhaGIiLCAgICAgICAgICAgICAgIGJhc2UgKyAweDY4LCAwKTsKKwljbGtzW0lNWDZTWF9DTEtfQUlQU19UWjJdICAgICA9IGlteF9jbGtfZ2F0ZTIoImFpcHNfdHoyIiwgICAgICAiYWhiIiwgICAgICAgICAgICAgICBiYXNlICsgMHg2OCwgMik7CisJY2xrc1tJTVg2U1hfQ0xLX0FQQkhfRE1BXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJhcGJoX2RtYSIsICAgICAgInVzZGhjMyIsICAgICAgICAgICAgYmFzZSArIDB4NjgsIDQpOworCWNsa3NbSU1YNlNYX0NMS19BU1JDX01FTV0gICAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImFzcmNfbWVtIiwgImFoYiIsICAgICAgICAgICAgIGJhc2UgKyAweDY4LCA2LCAmc2hhcmVfY291bnRfYXNyYyk7CisJY2xrc1tJTVg2U1hfQ0xLX0FTUkNfSVBHXSAgICAgPSBpbXhfY2xrX2dhdGUyX3NoYXJlZCgiYXNyY19pcGciLCAiYWhiIiwgICAgICAgICAgICAgYmFzZSArIDB4NjgsIDYsICZzaGFyZV9jb3VudF9hc3JjKTsKKwljbGtzW0lNWDZTWF9DTEtfQ0FBTV9NRU1dICAgICA9IGlteF9jbGtfZ2F0ZTIoImNhYW1fbWVtIiwgICAgICAiYWhiIiwgICAgICAgICAgICAgICBiYXNlICsgMHg2OCwgOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0NBQU1fQUNMS10gICAgPSBpbXhfY2xrX2dhdGUyKCJjYWFtX2FjbGsiLCAgICAgImFoYiIsICAgICAgICAgICAgICAgYmFzZSArIDB4NjgsIDEwKTsKKwljbGtzW0lNWDZTWF9DTEtfQ0FBTV9JUEddICAgICA9IGlteF9jbGtfZ2F0ZTIoImNhYW1faXBnIiwgICAgICAiaXBnIiwgICAgICAgICAgICAgICBiYXNlICsgMHg2OCwgMTIpOworCWNsa3NbSU1YNlNYX0NMS19DQU4xX0lQR10gICAgID0gaW14X2Nsa19nYXRlMigiY2FuMV9pcGciLCAgICAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDY4LCAxNCk7CisJY2xrc1tJTVg2U1hfQ0xLX0NBTjFfU0VSSUFMXSAgPSBpbXhfY2xrX2dhdGUyKCJjYW4xX3NlcmlhbCIsICAgImNhbl9wb2RmIiwgICAgICAgICAgYmFzZSArIDB4NjgsIDE2KTsKKwljbGtzW0lNWDZTWF9DTEtfQ0FOMl9JUEddICAgICA9IGlteF9jbGtfZ2F0ZTIoImNhbjJfaXBnIiwgICAgICAiaXBnIiwgICAgICAgICAgICAgICBiYXNlICsgMHg2OCwgMTgpOworCWNsa3NbSU1YNlNYX0NMS19DQU4yX1NFUklBTF0gID0gaW14X2Nsa19nYXRlMigiY2FuMl9zZXJpYWwiLCAgICJjYW5fcG9kZiIsICAgICAgICAgIGJhc2UgKyAweDY4LCAyMCk7CisJY2xrc1tJTVg2U1hfQ0xLX0RDSUMxXSAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJkY2ljMSIsICAgICAgICAgImRpc3BsYXlfcG9kZiIsICAgICAgYmFzZSArIDB4NjgsIDI0KTsKKwljbGtzW0lNWDZTWF9DTEtfRENJQzJdICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImRjaWMyIiwgICAgICAgICAiZGlzcGxheV9wb2RmIiwgICAgICBiYXNlICsgMHg2OCwgMjYpOworCWNsa3NbSU1YNlNYX0NMS19BSVBTX1RaM10gICAgID0gaW14X2Nsa19nYXRlMigiYWlwc190ejMiLCAgICAgICJhaGIiLCAgICAgICAgICAgICAgIGJhc2UgKyAweDY4LCAzMCk7CisKKwkvKiBDQ0dSMSAqLworCWNsa3NbSU1YNlNYX0NMS19FQ1NQSTFdICAgICAgID0gaW14X2Nsa19nYXRlMigiZWNzcGkxIiwgICAgICAgICJlY3NwaV9wb2RmIiwgICAgICAgIGJhc2UgKyAweDZjLCAwKTsKKwljbGtzW0lNWDZTWF9DTEtfRUNTUEkyXSAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImVjc3BpMiIsICAgICAgICAiZWNzcGlfcG9kZiIsICAgICAgICBiYXNlICsgMHg2YywgMik7CisJY2xrc1tJTVg2U1hfQ0xLX0VDU1BJM10gICAgICAgPSBpbXhfY2xrX2dhdGUyKCJlY3NwaTMiLCAgICAgICAgImVjc3BpX3BvZGYiLCAgICAgICAgYmFzZSArIDB4NmMsIDQpOworCWNsa3NbSU1YNlNYX0NMS19FQ1NQSTRdICAgICAgID0gaW14X2Nsa19nYXRlMigiZWNzcGk0IiwgICAgICAgICJlY3NwaV9wb2RmIiwgICAgICAgIGJhc2UgKyAweDZjLCA2KTsKKwljbGtzW0lNWDZTWF9DTEtfRUNTUEk1XSAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImVjc3BpNSIsICAgICAgICAiZWNzcGlfcG9kZiIsICAgICAgICBiYXNlICsgMHg2YywgOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0VQSVQxXSAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJlcGl0MSIsICAgICAgICAgInBlcmNsayIsICAgICAgICAgICAgYmFzZSArIDB4NmMsIDEyKTsKKwljbGtzW0lNWDZTWF9DTEtfRVBJVDJdICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImVwaXQyIiwgICAgICAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg2YywgMTQpOworCWNsa3NbSU1YNlNYX0NMS19FU0FJX0VYVEFMXSAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImVzYWlfZXh0YWwiLCAiZXNhaV9wb2RmIiwgICAgIGJhc2UgKyAweDZjLCAxNiwgJnNoYXJlX2NvdW50X2VzYWkpOworCWNsa3NbSU1YNlNYX0NMS19FU0FJX0lQR10gICAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImVzYWlfaXBnIiwgICAiYWhiIiwgICAgICAgICAgIGJhc2UgKyAweDZjLCAxNiwgJnNoYXJlX2NvdW50X2VzYWkpOworCWNsa3NbSU1YNlNYX0NMS19FU0FJX01FTV0gICAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImVzYWlfbWVtIiwgICAiYWhiIiwgICAgICAgICAgIGJhc2UgKyAweDZjLCAxNiwgJnNoYXJlX2NvdW50X2VzYWkpOworCWNsa3NbSU1YNlNYX0NMS19XQUtFVVBdICAgICAgID0gaW14X2Nsa19nYXRlMigid2FrZXVwIiwgICAgICAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDZjLCAxOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0dQVF9CVVNdICAgICAgPSBpbXhfY2xrX2dhdGUyKCJncHRfYnVzIiwgICAgICAgInBlcmNsayIsICAgICAgICAgICAgYmFzZSArIDB4NmMsIDIwKTsKKwljbGtzW0lNWDZTWF9DTEtfR1BUX1NFUklBTF0gICA9IGlteF9jbGtfZ2F0ZTIoImdwdF9zZXJpYWwiLCAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg2YywgMjIpOworCWNsa3NbSU1YNlNYX0NMS19HUFVdICAgICAgICAgID0gaW14X2Nsa19nYXRlMigiZ3B1IiwgICAgICAgICAgICJncHVfY29yZV9wb2RmIiwgICAgIGJhc2UgKyAweDZjLCAyNik7CisJY2xrc1tJTVg2U1hfQ0xLX0NBTkZEXSAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJjYW5mZCIsICAgICAgICAgImNhbl9wb2RmIiwgICAgICAgICAgYmFzZSArIDB4NmMsIDMwKTsKKworCS8qIENDR1IyICovCisJY2xrc1tJTVg2U1hfQ0xLX0NTSV0gICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJjc2kiLCAgICAgICAgICAgImNzaV9wb2RmIiwgICAgICAgICAgYmFzZSArIDB4NzAsIDIpOworCWNsa3NbSU1YNlNYX0NMS19JMkMxXSAgICAgICAgID0gaW14X2Nsa19nYXRlMigiaTJjMSIsICAgICAgICAgICJwZXJjbGsiLCAgICAgICAgICAgIGJhc2UgKyAweDcwLCA2KTsKKwljbGtzW0lNWDZTWF9DTEtfSTJDMl0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImkyYzIiLCAgICAgICAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg3MCwgOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0kyQzNdICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJpMmMzIiwgICAgICAgICAgInBlcmNsayIsICAgICAgICAgICAgYmFzZSArIDB4NzAsIDEwKTsKKwljbGtzW0lNWDZTWF9DTEtfT0NPVFBdICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoIm9jb3RwIiwgICAgICAgICAiaXBnIiwgICAgICAgICAgICAgICBiYXNlICsgMHg3MCwgMTIpOworCWNsa3NbSU1YNlNYX0NMS19JT01VWENdICAgICAgID0gaW14X2Nsa19nYXRlMigiaW9tdXhjIiwgICAgICAgICJsY2RpZjFfcG9kZiIsICAgICAgIGJhc2UgKyAweDcwLCAxNCk7CisJY2xrc1tJTVg2U1hfQ0xLX0lQTVVYMV0gICAgICAgPSBpbXhfY2xrX2dhdGUyKCJpcG11eDEiLCAgICAgICAgImFoYiIsICAgICAgICAgICAgICAgYmFzZSArIDB4NzAsIDE2KTsKKwljbGtzW0lNWDZTWF9DTEtfSVBNVVgyXSAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImlwbXV4MiIsICAgICAgICAiYWhiIiwgICAgICAgICAgICAgICBiYXNlICsgMHg3MCwgMTgpOworCWNsa3NbSU1YNlNYX0NMS19JUE1VWDNdICAgICAgID0gaW14X2Nsa19nYXRlMigiaXBtdXgzIiwgICAgICAgICJhaGIiLCAgICAgICAgICAgICAgIGJhc2UgKyAweDcwLCAyMCk7CisJY2xrc1tJTVg2U1hfQ0xLX1RaQVNDMV0gICAgICAgPSBpbXhfY2xrX2dhdGUyKCJ0emFzYzEiLCAgICAgICAgIm1tZGNfcG9kZiIsICAgICAgICAgYmFzZSArIDB4NzAsIDIyKTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUZfQVBCXSAgICA9IGlteF9jbGtfZ2F0ZTIoImxjZGlmX2FwYiIsICAgICAiZGlzcGxheV9wb2RmIiwgICAgICBiYXNlICsgMHg3MCwgMjgpOworCWNsa3NbSU1YNlNYX0NMS19QWFBfQVhJXSAgICAgID0gaW14X2Nsa19nYXRlMigicHhwX2F4aSIsICAgICAgICJkaXNwbGF5X3BvZGYiLCAgICAgIGJhc2UgKyAweDcwLCAzMCk7CisKKwkvKiBDQ0dSMyAqLworCWNsa3NbSU1YNlNYX0NMS19NNF0gICAgICAgICAgID0gaW14X2Nsa19nYXRlMigibTQiLCAgICAgICAgICAgICJtNF9wb2RmIiwgICAgICAgICAgIGJhc2UgKyAweDc0LCAyKTsKKwljbGtzW0lNWDZTWF9DTEtfRU5FVF0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImVuZXQiLCAgICAgICAgICAiaXBnIiwgICAgICAgICAgICAgICBiYXNlICsgMHg3NCwgNCk7CisJY2xrc1tJTVg2U1hfQ0xLX0VORVRfQUhCXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJlbmV0X2FoYiIsICAgICAgImVuZXRfc2VsIiwgICAgICAgICAgYmFzZSArIDB4NzQsIDQpOworCWNsa3NbSU1YNlNYX0NMS19ESVNQTEFZX0FYSV0gID0gaW14X2Nsa19nYXRlMigiZGlzcGxheV9heGkiLCAgICJkaXNwbGF5X3BvZGYiLCAgICAgIGJhc2UgKyAweDc0LCA2KTsKKwljbGtzW0lNWDZTWF9DTEtfTENESUYyX1BJWF0gICA9IGlteF9jbGtfZ2F0ZTIoImxjZGlmMl9waXgiLCAgICAibGNkaWYyX3NlbCIsICAgICAgICBiYXNlICsgMHg3NCwgOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0xDRElGMV9QSVhdICAgPSBpbXhfY2xrX2dhdGUyKCJsY2RpZjFfcGl4IiwgICAgImxjZGlmMV9zZWwiLCAgICAgICAgYmFzZSArIDB4NzQsIDEwKTsKKwljbGtzW0lNWDZTWF9DTEtfTERCX0RJMF0gICAgICA9IGlteF9jbGtfZ2F0ZTIoImxkYl9kaTAiLCAgICAgICAibGRiX2RpMF9kaXZfc2VsIiwgICBiYXNlICsgMHg3NCwgMTIpOworCWNsa3NbSU1YNlNYX0NMS19RU1BJMV0gICAgICAgID0gaW14X2Nsa19nYXRlMigicXNwaTEiLCAgICAgICAgICJxc3BpMV9wb2RmIiwgICAgICAgIGJhc2UgKyAweDc0LCAxNCk7CisJY2xrc1tJTVg2U1hfQ0xLX01MQl0gICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJtbGIiLCAgICAgICAgICAgImFoYiIsICAgICAgICAgICAgICAgYmFzZSArIDB4NzQsIDE4KTsKKwljbGtzW0lNWDZTWF9DTEtfTU1EQ19QMF9GQVNUXSA9IGlteF9jbGtfZ2F0ZTIoIm1tZGNfcDBfZmFzdCIsICAibW1kY19wb2RmIiwgICAgICAgICBiYXNlICsgMHg3NCwgMjApOworCWNsa3NbSU1YNlNYX0NMS19NTURDX1AwX0lQR10gID0gaW14X2Nsa19nYXRlMigibW1kY19wMF9pcGciLCAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDc0LCAyNCk7CisJY2xrc1tJTVg2U1hfQ0xLX09DUkFNXSAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJvY3JhbSIsICAgICAgICAgIm9jcmFtX3BvZGYiLCAgICAgICAgYmFzZSArIDB4NzQsIDI4KTsKKworCS8qIENDR1I0ICovCisJY2xrc1tJTVg2U1hfQ0xLX1BDSUVfQVhJXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJwY2llX2F4aSIsICAgICAgImRpc3BsYXlfcG9kZiIsICAgICAgYmFzZSArIDB4NzgsIDApOworCWNsa3NbSU1YNlNYX0NMS19RU1BJMl0gICAgICAgID0gaW14X2Nsa19nYXRlMigicXNwaTIiLCAgICAgICAgICJxc3BpMl9wb2RmIiwgICAgICAgIGJhc2UgKyAweDc4LCAxMCk7CisJY2xrc1tJTVg2U1hfQ0xLX1BFUjFfQkNIXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJwZXIxX2JjaCIsICAgICAgInVzZGhjMyIsICAgICAgICAgICAgYmFzZSArIDB4NzgsIDEyKTsKKwljbGtzW0lNWDZTWF9DTEtfUEVSMl9NQUlOXSAgICA9IGlteF9jbGtfZ2F0ZTIoInBlcjJfbWFpbiIsICAgICAiYWhiIiwgICAgICAgICAgICAgICBiYXNlICsgMHg3OCwgMTQpOworCWNsa3NbSU1YNlNYX0NMS19QV00xXSAgICAgICAgID0gaW14X2Nsa19nYXRlMigicHdtMSIsICAgICAgICAgICJwZXJjbGsiLCAgICAgICAgICAgIGJhc2UgKyAweDc4LCAxNik7CisJY2xrc1tJTVg2U1hfQ0xLX1BXTTJdICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJwd20yIiwgICAgICAgICAgInBlcmNsayIsICAgICAgICAgICAgYmFzZSArIDB4NzgsIDE4KTsKKwljbGtzW0lNWDZTWF9DTEtfUFdNM10gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInB3bTMiLCAgICAgICAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg3OCwgMjApOworCWNsa3NbSU1YNlNYX0NMS19QV000XSAgICAgICAgID0gaW14X2Nsa19nYXRlMigicHdtNCIsICAgICAgICAgICJwZXJjbGsiLCAgICAgICAgICAgIGJhc2UgKyAweDc4LCAyMik7CisJY2xrc1tJTVg2U1hfQ0xLX0dQTUlfQkNIX0FQQl0gPSBpbXhfY2xrX2dhdGUyKCJncG1pX2JjaF9hcGIiLCAgInVzZGhjMyIsICAgICAgICAgICAgYmFzZSArIDB4NzgsIDI0KTsKKwljbGtzW0lNWDZTWF9DTEtfR1BNSV9CQ0hdICAgICA9IGlteF9jbGtfZ2F0ZTIoImdwbWlfYmNoIiwgICAgICAidXNkaGM0IiwgICAgICAgICAgICBiYXNlICsgMHg3OCwgMjYpOworCWNsa3NbSU1YNlNYX0NMS19HUE1JX0lPXSAgICAgID0gaW14X2Nsa19nYXRlMigiZ3BtaV9pbyIsICAgICAgICJxc3BpMl9wb2RmIiwgICAgICAgIGJhc2UgKyAweDc4LCAyOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0dQTUlfQVBCXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJncG1pX2FwYiIsICAgICAgInVzZGhjMyIsICAgICAgICAgICAgYmFzZSArIDB4NzgsIDMwKTsKKworCS8qIENDR1I1ICovCisJY2xrc1tJTVg2U1hfQ0xLX1JPTV0gICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJyb20iLCAgICAgICAgICAgImFoYiIsICAgICAgICAgICAgICAgYmFzZSArIDB4N2MsIDApOworCWNsa3NbSU1YNlNYX0NMS19TRE1BXSAgICAgICAgID0gaW14X2Nsa19nYXRlMigic2RtYSIsICAgICAgICAgICJhaGIiLCAgICAgICAgICAgICAgIGJhc2UgKyAweDdjLCA2KTsKKwljbGtzW0lNWDZTWF9DTEtfU1BCQV0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInNwYmEiLCAgICAgICAgICAiaXBnIiwgICAgICAgICAgICAgICBiYXNlICsgMHg3YywgMTIpOworCWNsa3NbSU1YNlNYX0NMS19BVURJT10gICAgICAgID0gaW14X2Nsa19nYXRlMl9zaGFyZWQoImF1ZGlvIiwgICJhdWRpb19wb2RmIiwgICAgICAgIGJhc2UgKyAweDdjLCAxNCwgJnNoYXJlX2NvdW50X2F1ZGlvKTsKKwljbGtzW0lNWDZTWF9DTEtfU1BESUZdICAgICAgICA9IGlteF9jbGtfZ2F0ZTJfc2hhcmVkKCJzcGRpZiIsICAic3BkaWZfcG9kZiIsICAgICAgICBiYXNlICsgMHg3YywgMTQsICZzaGFyZV9jb3VudF9hdWRpbyk7CisJY2xrc1tJTVg2U1hfQ0xLX1NTSTFfSVBHXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJzc2kxX2lwZyIsICAgICAgImlwZyIsICAgICAgICAgICAgICAgYmFzZSArIDB4N2MsIDE4KTsKKwljbGtzW0lNWDZTWF9DTEtfU1NJMl9JUEddICAgICA9IGlteF9jbGtfZ2F0ZTIoInNzaTJfaXBnIiwgICAgICAiaXBnIiwgICAgICAgICAgICAgICBiYXNlICsgMHg3YywgMjApOworCWNsa3NbSU1YNlNYX0NMS19TU0kzX0lQR10gICAgID0gaW14X2Nsa19nYXRlMigic3NpM19pcGciLCAgICAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDdjLCAyMik7CisJY2xrc1tJTVg2U1hfQ0xLX1NTSTFdICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJzc2kxIiwgICAgICAgICAgInNzaTFfcG9kZiIsICAgICAgICAgYmFzZSArIDB4N2MsIDE4KTsKKwljbGtzW0lNWDZTWF9DTEtfU1NJMl0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInNzaTIiLCAgICAgICAgICAic3NpMl9wb2RmIiwgICAgICAgICBiYXNlICsgMHg3YywgMjApOworCWNsa3NbSU1YNlNYX0NMS19TU0kzXSAgICAgICAgID0gaW14X2Nsa19nYXRlMigic3NpMyIsICAgICAgICAgICJzc2kzX3BvZGYiLCAgICAgICAgIGJhc2UgKyAweDdjLCAyMik7CisJY2xrc1tJTVg2U1hfQ0xLX1VBUlRfSVBHXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJ1YXJ0X2lwZyIsICAgICAgImlwZyIsICAgICAgICAgICAgICAgYmFzZSArIDB4N2MsIDI0KTsKKwljbGtzW0lNWDZTWF9DTEtfVUFSVF9TRVJJQUxdICA9IGlteF9jbGtfZ2F0ZTIoInVhcnRfc2VyaWFsIiwgICAidWFydF9wb2RmIiwgICAgICAgICBiYXNlICsgMHg3YywgMjYpOworCWNsa3NbSU1YNlNYX0NMS19TQUkxX0lQR10gICAgID0gaW14X2Nsa19nYXRlMigic2FpMV9pcGciLCAgICAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDdjLCAyOCk7CisJY2xrc1tJTVg2U1hfQ0xLX1NBSTJfSVBHXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJzYWkyX2lwZyIsICAgICAgImlwZyIsICAgICAgICAgICAgICAgYmFzZSArIDB4N2MsIDMwKTsKKwljbGtzW0lNWDZTWF9DTEtfU0FJMV0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInNhaTEiLCAgICAgICAgICAic3NpMV9wb2RmIiwgICAgICAgICBiYXNlICsgMHg3YywgMjgpOworCWNsa3NbSU1YNlNYX0NMS19TQUkyXSAgICAgICAgID0gaW14X2Nsa19nYXRlMigic2FpMiIsICAgICAgICAgICJzc2kyX3BvZGYiLCAgICAgICAgIGJhc2UgKyAweDdjLCAzMCk7CisKKwkvKiBDQ0dSNiAqLworCWNsa3NbSU1YNlNYX0NMS19VU0JPSDNdICAgICAgID0gaW14X2Nsa19nYXRlMigidXNib2gzIiwgICAgICAgICJpcGciLCAgICAgICAgICAgICAgIGJhc2UgKyAweDgwLCAwKTsKKwljbGtzW0lNWDZTWF9DTEtfVVNESEMxXSAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInVzZGhjMSIsICAgICAgICAidXNkaGMxX3BvZGYiLCAgICAgICBiYXNlICsgMHg4MCwgMik7CisJY2xrc1tJTVg2U1hfQ0xLX1VTREhDMl0gICAgICAgPSBpbXhfY2xrX2dhdGUyKCJ1c2RoYzIiLCAgICAgICAgInVzZGhjMl9wb2RmIiwgICAgICAgYmFzZSArIDB4ODAsIDQpOworCWNsa3NbSU1YNlNYX0NMS19VU0RIQzNdICAgICAgID0gaW14X2Nsa19nYXRlMigidXNkaGMzIiwgICAgICAgICJ1c2RoYzNfcG9kZiIsICAgICAgIGJhc2UgKyAweDgwLCA2KTsKKwljbGtzW0lNWDZTWF9DTEtfVVNESEM0XSAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInVzZGhjNCIsICAgICAgICAidXNkaGM0X3BvZGYiLCAgICAgICBiYXNlICsgMHg4MCwgOCk7CisJY2xrc1tJTVg2U1hfQ0xLX0VJTV9TTE9XXSAgICAgPSBpbXhfY2xrX2dhdGUyKCJlaW1fc2xvdyIsICAgICAgImVpbV9zbG93X3BvZGYiLCAgICAgYmFzZSArIDB4ODAsIDEwKTsKKwljbGtzW0lNWDZTWF9DTEtfUFdNOF0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInB3bTgiLCAgICAgICAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg4MCwgMTYpOworCWNsa3NbSU1YNlNYX0NMS19WQURDXSAgICAgICAgID0gaW14X2Nsa19nYXRlMigidmFkYyIsICAgICAgICAgICJ2aWRfcG9kZiIsICAgICAgICAgIGJhc2UgKyAweDgwLCAyMCk7CisJY2xrc1tJTVg2U1hfQ0xLX0dJU10gICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJnaXMiLCAgICAgICAgICAgImRpc3BsYXlfcG9kZiIsICAgICAgYmFzZSArIDB4ODAsIDIyKTsKKwljbGtzW0lNWDZTWF9DTEtfSTJDNF0gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoImkyYzQiLCAgICAgICAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg4MCwgMjQpOworCWNsa3NbSU1YNlNYX0NMS19QV001XSAgICAgICAgID0gaW14X2Nsa19nYXRlMigicHdtNSIsICAgICAgICAgICJwZXJjbGsiLCAgICAgICAgICAgIGJhc2UgKyAweDgwLCAyNik7CisJY2xrc1tJTVg2U1hfQ0xLX1BXTTZdICAgICAgICAgPSBpbXhfY2xrX2dhdGUyKCJwd202IiwgICAgICAgICAgInBlcmNsayIsICAgICAgICAgICAgYmFzZSArIDB4ODAsIDI4KTsKKwljbGtzW0lNWDZTWF9DTEtfUFdNN10gICAgICAgICA9IGlteF9jbGtfZ2F0ZTIoInB3bTciLCAgICAgICAgICAicGVyY2xrIiwgICAgICAgICAgICBiYXNlICsgMHg4MCwgMzApOworCisJY2xrc1tJTVg2U1hfQ0xLX0NLTzFdICAgICAgICAgPSBpbXhfY2xrX2dhdGUoImNrbzEiLCAgICAgICAgICAgImNrbzFfcG9kZiIsICAgICAgICAgYmFzZSArIDB4NjAsIDcpOworCWNsa3NbSU1YNlNYX0NMS19DS08yXSAgICAgICAgID0gaW14X2Nsa19nYXRlKCJja28yIiwgICAgICAgICAgICJja28yX3BvZGYiLCAgICAgICAgIGJhc2UgKyAweDYwLCAyNCk7CisKKwkvKiBtYXNrIGhhbmRzaGFrZSBvZiBtbWRjICovCisJd3JpdGVsX3JlbGF4ZWQoQk1fQ0NNX0NDRFJfTU1EQ19DSDBfTUFTSywgYmFzZSArIENDRFIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xrcyk7IGkrKykKKwkJaWYgKElTX0VSUihjbGtzW2ldKSkKKwkJCXByX2VycigiaS5NWDZzeCBjbGsgJWQ6IHJlZ2lzdGVyIGZhaWxlZCB3aXRoICVsZFxuIiwgaSwgUFRSX0VSUihjbGtzW2ldKSk7CisKKwljbGtfZGF0YS5jbGtzID0gY2xrczsKKwljbGtfZGF0YS5jbGtfbnVtID0gQVJSQVlfU0laRShjbGtzKTsKKwlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCAmY2xrX2RhdGEpOworCisJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtzW0lNWDZTWF9DTEtfR1BUX0JVU10sICJpcGciLCAiaW14LWdwdC4wIik7CisJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtzW0lNWDZTWF9DTEtfR1BUX1NFUklBTF0sICJwZXIiLCAiaW14LWdwdC4wIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtzX2luaXRfb24pOyBpKyspCisJCWNsa19wcmVwYXJlX2VuYWJsZShjbGtzW2Nsa3NfaW5pdF9vbltpXV0pOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1VTQl9NWFNfUEhZKSkgeworCQljbGtfcHJlcGFyZV9lbmFibGUoY2xrc1tJTVg2U1hfQ0xLX1VTQlBIWTFfR0FURV0pOworCQljbGtfcHJlcGFyZV9lbmFibGUoY2xrc1tJTVg2U1hfQ0xLX1VTQlBIWTJfR0FURV0pOworCX0KKworCS8qIFNldCB0aGUgZGVmYXVsdCAxMzJNSHogZm9yIEVJTSBtb2R1bGUgKi8KKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfRUlNX1NMT1dfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDJfUEZEMl0pOworCWNsa19zZXRfcmF0ZShjbGtzW0lNWDZTWF9DTEtfRUlNX1NMT1ddLCAxMzIwMDAwMDApOworCisJLyogc2V0IHBhcmVudCBjbG9jayBmb3IgTENESUYxIHBpeGVsIGNsb2NrICovCisJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0xDRElGMV9QUkVfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDVfVklERU9fRElWXSk7CisJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0xDRElGMV9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfTENESUYxX1BPREZdKTsKKworCS8qIFNldCB0aGUgcGFyZW50IGNsa3Mgb2YgUENJZSBsdmRzMSBhbmQgcGNpZV9heGkgdG8gYmUgcGNpZSByZWYsIGF4aSAqLworCWlmIChjbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfTFZEUzFfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BDSUVfUkVGXzEyNU1dKSkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0IHBjaWUgYnVzIHBhcmVudCBjbGsuXG4iKTsKKwlpZiAoY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX1BDSUVfQVhJX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19BWEldKSkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0IHBjaWUgcGFyZW50IGNsay5cbiIpOworCisJLyoKKwkgKiBJbml0IGVuZXQgc3lzdGVtIEFIQiBjbG9jaywgc2V0IHRvIDIwME1oegorCSAqIHBsbDJfcGZkMl8zOTZtLT4gRU5FVF9QT0RGLT4gRU5FVF9BSEIKKwkgKi8KKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfRU5FVF9QUkVfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDJfUEZEMl0pOworCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19FTkVUX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19FTkVUX1BPREZdKTsKKwljbGtfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX0VORVRfUE9ERl0sIDIwMDAwMDAwMCk7CisJY2xrX3NldF9yYXRlKGNsa3NbSU1YNlNYX0NMS19FTkVUX1JFRl0sIDEyNTAwMDAwMCk7CisJY2xrX3NldF9yYXRlKGNsa3NbSU1YNlNYX0NMS19FTkVUMl9SRUZdLCAxMjUwMDAwMDApOworCisJLyogQXVkaW8gY2xvY2tzICovCisJY2xrX3NldF9yYXRlKGNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0sIDM5MzIxNjAwMCk7CisKKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfU1BESUZfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDRfQVVESU9fRElWXSk7CisJY2xrX3NldF9yYXRlKGNsa3NbSU1YNlNYX0NMS19TUERJRl9QT0RGXSwgOTgzMDQwMDApOworCisJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0FVRElPX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEwzX1VTQl9PVEddKTsKKwljbGtfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX0FVRElPX1BPREZdLCAyNDAwMDAwMCk7CisKKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfU1NJMV9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMNF9BVURJT19ESVZdKTsKKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfU1NJMl9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMNF9BVURJT19ESVZdKTsKKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfU1NJM19TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMNF9BVURJT19ESVZdKTsKKwljbGtfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX1NTSTFfUE9ERl0sIDI0NTc2MDAwKTsKKwljbGtfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX1NTSTJfUE9ERl0sIDI0NTc2MDAwKTsKKwljbGtfc2V0X3JhdGUoY2xrc1tJTVg2U1hfQ0xLX1NTSTNfUE9ERl0sIDI0NTc2MDAwKTsKKworCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19FU0FJX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVl0pOworCWNsa19zZXRfcmF0ZShjbGtzW0lNWDZTWF9DTEtfRVNBSV9QT0RGXSwgMjQ1NzYwMDApOworCisJLyogU2V0IHBhcmVudCBjbG9jayBmb3IgdmFkYyAqLworCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19WSURfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDNfVVNCX09UR10pOworCisJLyogZGVmYXVsdCBwYXJlbnQgb2YgY2FuX3NlbCBjbG9jayBpcyBpbnZhbGlkLCBtYW51YWxseSBzZXQgaXQgaGVyZSAqLworCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19DQU5fU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDNfNjBNXSk7CisKKwkvKiBVcGRhdGUgZ3B1IGNsb2NrIGZyb20gZGVmYXVsdCA1MjhNIHRvIDcyME0gKi8KKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfR1BVX0NPUkVfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDNfUEZEMF0pOworCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19HUFVfQVhJX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEwzX1BGRDBdKTsKKworCS8qIFNldCBpbml0aWFsIHBvd2VyIG1vZGUgKi8KKwlpbXg2cV9zZXRfbHBtKFdBSVRfQ0xPQ0tFRCk7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14NnN4LWdwdCIpOworCW14Y190aW1lcl9pbml0X2R0KG5wKTsKK30KK0NMS19PRl9ERUNMQVJFKGlteDZzeCwgImZzbCxpbXg2c3gtY2NtIiwgaW14NnN4X2Nsb2Nrc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmgKaW5kZXggMDQ4YzVhZDguLmUyOWY2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay5oCkBAIC0yOCw3ICsyOCw4IEBACiBzdHJ1Y3QgY2xrICpjbGtfcmVnaXN0ZXJfZ2F0ZTIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJdm9pZCBfX2lvbWVtICpyZWcsIHU4IGJpdF9pZHgsCi0JCXU4IGNsa19nYXRlX2ZsYWdzLCBzcGlubG9ja190ICpsb2NrKTsKKwkJdTggY2xrX2dhdGVfZmxhZ3MsIHNwaW5sb2NrX3QgKmxvY2ssCisJCXVuc2lnbmVkIGludCAqc2hhcmVfY291bnQpOwogCiBzdHJ1Y3QgY2xrICogaW14X29idGFpbl9maXhlZF9jbG9jaygKIAkJCWNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CkBAIC0zNyw3ICszOCwxNSBAQAogCQl2b2lkIF9faW9tZW0gKnJlZywgdTggc2hpZnQpCiB7CiAJcmV0dXJuIGNsa19yZWdpc3Rlcl9nYXRlMihOVUxMLCBuYW1lLCBwYXJlbnQsIENMS19TRVRfUkFURV9QQVJFTlQsIHJlZywKLQkJCXNoaWZ0LCAwLCAmaW14X2NjbV9sb2NrKTsKKwkJCXNoaWZ0LCAwLCAmaW14X2NjbV9sb2NrLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICppbXhfY2xrX2dhdGUyX3NoYXJlZChjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCBjaGFyICpwYXJlbnQsIHZvaWQgX19pb21lbSAqcmVnLCB1OCBzaGlmdCwKKwkJdW5zaWduZWQgaW50ICpzaGFyZV9jb3VudCkKK3sKKwlyZXR1cm4gY2xrX3JlZ2lzdGVyX2dhdGUyKE5VTEwsIG5hbWUsIHBhcmVudCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgcmVnLAorCQkJc2hpZnQsIDAsICZpbXhfY2NtX2xvY2ssIHNoYXJlX2NvdW50KTsKIH0KIAogc3RydWN0IGNsayAqaW14X2Nsa19wZmQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oCmluZGV4IGI1MjQxZWEuLjlhYjc4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2NvbW1vbi5oCkBAIC0xNyw2ICsxNyw3IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IHB0X3JlZ3M7CiBzdHJ1Y3QgY2xrOworc3RydWN0IGRldmljZV9ub2RlOwogZW51bSBteGNfY3B1X3B3cl9tb2RlOwogCiB2b2lkIG14MV9tYXBfaW8odm9pZCk7CkBAIC01Niw2ICs1Nyw3IEBACiB2b2lkIGlteDUzX2luaXRfbGF0ZSh2b2lkKTsKIHZvaWQgZXBpdF90aW1lcl9pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGlycSk7CiB2b2lkIG14Y190aW1lcl9pbml0KHZvaWQgX19pb21lbSAqLCBpbnQpOwordm9pZCBteGNfdGltZXJfaW5pdF9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CiBpbnQgbXgxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CiBpbnQgbXgyMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGxyZWYsIHVuc2lnbmVkIGxvbmcgZnJlZik7CiBpbnQgbXgyNV9jbG9ja3NfaW5pdCh2b2lkKTsKQEAgLTk5LDE5ICsxMDEsNiBAQAogdm9pZCBteDNfY3B1X2xwX3NldChlbnVtIG14M19jcHVfcHdyX21vZGUgbW9kZSk7CiB2b2lkIGlteF9wcmludF9zaWxpY29uX3Jldihjb25zdCBjaGFyICpjcHUsIGludCBzcmV2KTsKIAotdm9pZCBhdmljX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKik7Ci12b2lkIHR6aWNfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqKTsKLQotI2RlZmluZSBpbXgxX2hhbmRsZV9pcnEgYXZpY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDIxX2hhbmRsZV9pcnEgYXZpY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDI1X2hhbmRsZV9pcnEgYXZpY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDI3X2hhbmRsZV9pcnEgYXZpY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDMxX2hhbmRsZV9pcnEgYXZpY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDM1X2hhbmRsZV9pcnEgYXZpY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDUwX2hhbmRsZV9pcnEgdHppY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDUxX2hhbmRsZV9pcnEgdHppY19oYW5kbGVfaXJxCi0jZGVmaW5lIGlteDUzX2hhbmRsZV9pcnEgdHppY19oYW5kbGVfaXJxCi0KIHZvaWQgaW14X2VuYWJsZV9jcHUoaW50IGNwdSwgYm9vbCBlbmFibGUpOwogdm9pZCBpbXhfc2V0X2NwdV9qdW1wKGludCBjcHUsIHZvaWQgKmp1bXBfYWRkcik7CiB1MzIgaW14X2dldF9jcHVfYXJnKGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY3B1LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jcHUuYwppbmRleCBiYTNiNDk4Li5iYmU4ZmYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jcHUuYwpAQCAtMTExLDYgKzExMSw5IEBACiAJY2FzZSBNWENfQ1BVX0lNWDZETDoKIAkJc29jX2lkID0gImkuTVg2REwiOwogCQlicmVhazsKKwljYXNlIE1YQ19DUFVfSU1YNlNYOgorCQlzb2NfaWQgPSAiaS5NWDZTWCI7CisJCWJyZWFrOwogCWNhc2UgTVhDX0NQVV9JTVg2UToKIAkJc29jX2lkID0gImkuTVg2USI7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy9wbGF0Zm9ybS1teDItZW1tYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy9wbGF0Zm9ybS1teDItZW1tYS5jCmluZGV4IDExYmQwMWQuLjBkYzA2NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMvcGxhdGZvcm0tbXgyLWVtbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzL3BsYXRmb3JtLW14Mi1lbW1hLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNkZWZpbmUgaW14X214Ml9lbW1hcHJwX2RhdGFfZW50cnlfc2luZ2xlKHNvYykJCQkJXAogCXsJCQkJCQkJCVwKIAkJLmlvYmFzZSA9IHNvYyAjIyBfRU1NQVBSUF9CQVNFX0FERFIsCQkJXAotCQkuaW9zaXplID0gU1pfMzIsCQkJCQlcCisJCS5pb3NpemUgPSBTWl8yNTYsCQkJCQlcCiAJCS5pcnEgPSBzb2MgIyMgX0lOVF9FTU1BUFJQLAkJCQlcCiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXhzZDUxLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZXVrcmVhX21iaW14c2Q1MS1iYXNlYm9hcmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJlNmMxZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXhzZDUxLWJhc2Vib2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRXJpYyBCZW5hcmQgLSBlcmljQGV1a3JlYS5jb20KLSAqCi0gKiBCYXNlZCBvbiBwY205NzAtYmFzZWJvYXJkLmMgd2hpY2ggaXMgOgotICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImRldmljZXMtaW14NTEuaCIKLSNpbmNsdWRlICJoYXJkd2FyZS5oIgotI2luY2x1ZGUgImlvbXV4LW14NTEuaCIKLQotc3RhdGljIGlvbXV4X3YzX2NmZ190IGV1a3JlYV9tYmlteHNkNTFfcGFkc1tdID0gewotCS8qIExFRCAqLwotCU1YNTFfUEFEX05BTkRGX0QxMF9fR1BJTzNfMzAsCi0JLyogU1dJVENIICovCi0JTkVXX1BBRF9DVFJMKE1YNTFfUEFEX05BTkRGX0Q5X19HUElPM18zMSwgUEFEX0NUTF9QVVNfMjJLX1VQIHwKLQkJCVBBRF9DVExfUEtFIHwgUEFEX0NUTF9TUkVfRkFTVCB8Ci0JCQlQQURfQ1RMX0RTRV9ISUdIIHwgUEFEX0NUTF9QVUUgfCBQQURfQ1RMX0hZUyksCi0JLyogVUFSVDIgKi8KLQlNWDUxX1BBRF9VQVJUMl9SWERfX1VBUlQyX1JYRCwKLQlNWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRCwKLQkvKiBVQVJUIDMgKi8KLQlNWDUxX1BBRF9VQVJUM19SWERfX1VBUlQzX1JYRCwKLQlNWDUxX1BBRF9VQVJUM19UWERfX1VBUlQzX1RYRCwKLQlNWDUxX1BBRF9LRVlfQ09MNF9fVUFSVDNfUlRTLAotCU1YNTFfUEFEX0tFWV9DT0w1X19VQVJUM19DVFMsCi0JLyogU0QgKi8KLQlNWDUxX1BBRF9TRDFfQ01EX19TRDFfQ01ELAotCU1YNTFfUEFEX1NEMV9DTEtfX1NEMV9DTEssCi0JTVg1MV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAsCi0JTVg1MV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEsCi0JTVg1MV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIsCi0JTVg1MV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMsCi0JLyogU0QxIENEICovCi0JTkVXX1BBRF9DVFJMKE1YNTFfUEFEX0dQSU8xXzBfX1NEMV9DRCwgUEFEX0NUTF9QVVNfMjJLX1VQIHwKLQkJCVBBRF9DVExfUEtFIHwgUEFEX0NUTF9TUkVfRkFTVCB8Ci0JCQlQQURfQ1RMX0RTRV9ISUdIIHwgUEFEX0NUTF9QVUUgfCBQQURfQ1RMX0hZUyksCi0JLyogU1NJICovCi0JTVg1MV9QQURfQVVEM19CQl9UWERfX0FVRDNfVFhELAotCU1YNTFfUEFEX0FVRDNfQkJfUlhEX19BVUQzX1JYRCwKLQlNWDUxX1BBRF9BVUQzX0JCX0NLX19BVUQzX1RYQywKLQlNWDUxX1BBRF9BVUQzX0JCX0ZTX19BVUQzX1RYRlMsCi0JLyogTENEIEJhY2tsaWdodCAqLwotCU1YNTFfUEFEX0RJMV9EMV9DU19fR1BJTzNfNCwKLQkvKiBMQ0QgUlNUICovCi0JTVg1MV9QQURfQ1NJMV9EOV9fR1BJTzNfMTMsCi19OwotCi0jZGVmaW5lIEdQSU9fTEVEMQlJTVhfR1BJT19OUigzLCAzMCkKLSNkZWZpbmUgR1BJT19TV0lUQ0gxCUlNWF9HUElPX05SKDMsIDMxKQotI2RlZmluZSBHUElPX0xDRFJTVAlJTVhfR1BJT19OUigzLCAxMykKLSNkZWZpbmUgR1BJT19MQ0RCTAlJTVhfR1BJT19OUigzLCA0KQotCi1zdGF0aWMgdm9pZCBldWtyZWFfbWJpbXhzZDUxX2xjZF9wb3dlcl9zZXQoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLAotCQkJCSAgIHVuc2lnbmVkIGludCBwb3dlcikKLXsKLQlpZiAocG93ZXIpCi0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDRFJTVCwgMSk7Ci0JZWxzZQotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RSU1QsIDApOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRfbGNkX2RhdGEgZXVrcmVhX21iaW14c2Q1MV9sY2RfcG93ZXJfZGF0YSA9IHsKLQkuc2V0X3Bvd2VyCQk9IGV1a3JlYV9tYmlteHNkNTFfbGNkX3Bvd2VyX3NldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV1a3JlYV9tYmlteHNkNTFfbGNkX3Bvd2VyZGV2ID0gewotCS5uYW1lCQkJPSAicGxhdGZvcm0tbGNkIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmZXVrcmVhX21iaW14c2Q1MV9sY2RfcG93ZXJfZGF0YSwKLX07Ci0KLXN0YXRpYyB2b2lkIGV1a3JlYV9tYmlteHNkNTFfYmxfc2V0X2ludGVuc2l0eShpbnQgaW50ZW5zaXR5KQotewotCWlmIChpbnRlbnNpdHkpCi0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDREJMLCAxKTsKLQllbHNlCi0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDREJMLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBnZW5lcmljX2JsX2luZm8gZXVrcmVhX21iaW14c2Q1MV9ibF9pbmZvID0gewotCS5uYW1lCQkJPSAiZXVrcmVhX21iaW14c2Q1MS1ibCIsCi0JLm1heF9pbnRlbnNpdHkJCT0gMHhmZiwKLQkuZGVmYXVsdF9pbnRlbnNpdHkJPSAweGZmLAotCS5zZXRfYmxfaW50ZW5zaXR5CT0gZXVrcmVhX21iaW14c2Q1MV9ibF9zZXRfaW50ZW5zaXR5LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14c2Q1MV9ibF9kZXYgPSB7Ci0JLm5hbWUJCQk9ICJnZW5lcmljLWJsIiwKLQkuaWQJCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXVrcmVhX21iaW14c2Q1MV9ibF9pbmZvLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fbGVkIGV1a3JlYV9tYmlteHNkNTFfbGVkc1tdIF9faW5pdGNvbnN0ID0gewotCXsKLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZ3BpbwkJCT0gR1BJT19MRUQxLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEKLQkJZXVrcmVhX21iaW14c2Q1MV9sZWRfaW5mbyBfX2luaXRjb25zdCA9IHsKLQkubGVkcwkJPSBldWtyZWFfbWJpbXhzZDUxX2xlZHMsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZDUxX2xlZHMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGV1a3JlYV9tYmlteHNkNTFfZ3Bpb19idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBHUElPX1NXSVRDSDEsCi0JCS5jb2RlCQk9IEJUTl8wLAotCQkuZGVzYwkJPSAiQlAxIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEKLQkJZXVrcmVhX21iaW14c2Q1MV9idXR0b25fZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuYnV0dG9ucwk9IGV1a3JlYV9tYmlteHNkNTFfZ3Bpb19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZXVrcmVhX21iaW14c2Q1MV9ncGlvX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfbWJpbXhzZDUxX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKLQl9LAotfTsKLQotc3RhdGljIGNvbnN0Ci1zdHJ1Y3QgaW14X3NzaV9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9tYmlteHNkNTFfc3NpX3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5mbGFncyA9IElNWF9TU0lfU1lOIHwgSU1YX1NTSV9ORVQgfCBJTVhfU1NJX1VTRV9JMlNfU0xBVkUsCi19OwotCi1zdGF0aWMgaW50IHNjcmVlbl90eXBlOwotCi1zdGF0aWMgaW50IF9faW5pdCBldWtyZWFfbWJpbXhzZDUxX3NjcmVlbl90eXBlKGNoYXIgKm9wdGlvbnMpCi17Ci0JaWYgKCFzdHJjbXAob3B0aW9ucywgImR2aSIpKQotCQlzY3JlZW5fdHlwZSA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChvcHRpb25zLCAidGZ0IikpCi0JCXNjcmVlbl90eXBlID0gMDsKLQotCXJldHVybiAwOwotfQotX19zZXR1cCgic2NyZWVuX3R5cGU9IiwgZXVrcmVhX21iaW14c2Q1MV9zY3JlZW5fdHlwZSk7Ci0KLS8qCi0gKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBjcHVpbXg1MXNkIGluaXQuCi0gKgotICogQWRkIHBsYXRmb3JtIGRldmljZXMgcHJlc2VudCBvbiB0aGlzIGJhc2Vib2FyZCBhbmQgaW5pdAotICogdGhlbSBmcm9tIENQVSBzaWRlIGFzIGZhciBhcyByZXF1aXJlZCB0byB1c2UgdGhlbSBsYXRlciBvbgotICovCi12b2lkIF9faW5pdCBldWtyZWFfbWJpbXhzZDUxX2Jhc2Vib2FyZF9pbml0KHZvaWQpCi17Ci0JaWYgKG14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKGV1a3JlYV9tYmlteHNkNTFfcGFkcywKLQkJCUFSUkFZX1NJWkUoZXVrcmVhX21iaW14c2Q1MV9wYWRzKSkpCi0JCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyBtYmlteHNkIHBhZHMgIVxuIik7Ci0KLQlpbXg1MV9hZGRfaW14X3VhcnQoMSwgTlVMTCk7Ci0JaW14NTFfYWRkX2lteF91YXJ0KDIsICZ1YXJ0X3BkYXRhKTsKLQotCWlteDUxX2FkZF9zZGhjaV9lc2RoY19pbXgoMCwgTlVMTCk7Ci0KLQlpbXg1MV9hZGRfaW14X3NzaSgwLCAmZXVrcmVhX21iaW14c2Q1MV9zc2lfcGRhdGEpOwotCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fTEVEMSwgIkxFRDEiKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MRUQxLCAxKTsKLQlncGlvX2ZyZWUoR1BJT19MRUQxKTsKLQotCWdwaW9fcmVxdWVzdChHUElPX1NXSVRDSDEsICJTV0lUQ0gxIik7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19TV0lUQ0gxKTsKLQlncGlvX2ZyZWUoR1BJT19TV0lUQ0gxKTsKLQotCWdwaW9fcmVxdWVzdChHUElPX0xDRFJTVCwgIkxDRFJTVCIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDRFJTVCwgMCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fTENEQkwsICJMQ0RCTCIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDREJMLCAwKTsKLQlpZiAoIXNjcmVlbl90eXBlKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXVrcmVhX21iaW14c2Q1MV9ibF9kZXYpOwotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmV1a3JlYV9tYmlteHNkNTFfbGNkX3Bvd2VyZGV2KTsKLQl9IGVsc2UgewotCQlncGlvX2ZyZWUoR1BJT19MQ0RSU1QpOwotCQlncGlvX2ZyZWUoR1BJT19MQ0RCTCk7Ci0JfQotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX21iaW14c2Q1MV9pMmNfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteHNkNTFfaTJjX2RldmljZXMpKTsKLQotCWdwaW9fbGVkX3JlZ2lzdGVyX2RldmljZSgtMSwgJmV1a3JlYV9tYmlteHNkNTFfbGVkX2luZm8pOwotCWlteF9hZGRfZ3Bpb19rZXlzKCZldWtyZWFfbWJpbXhzZDUxX2J1dHRvbl9kYXRhKTsKLQlpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgiZXVrcmVhX3RsdjMyMCIsIDAsIE5VTEwsIDAsIE5VTEwsIDApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjUtZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDI1LWR0LmMKaW5kZXggM2UxZWM1Zi4uNDJhNjVlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjUtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgyNS1kdC5jCkBAIC0zOCw3ICszOCw2IEBACiAJLm1hcF9pbwkJPSBteDI1X21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGlteDI1X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gbXgyNV9pbml0X2lycSwKLQkuaGFuZGxlX2lycQk9IGlteDI1X2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IGlteDI1X3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IGlteDI1X2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDI1X2R0X2JvYXJkX2NvbXBhdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lteDI3LWR0LmMgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgyNy1kdC5jCmluZGV4IDRlMjM1ZWMuLjE3YmQ0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lteDI3LWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjctZHQuYwpAQCAtNDMsNyArNDMsNiBAQAogCS5tYXBfaW8JCT0gbXgyN19tYXBfaW8sCiAJLmluaXRfZWFybHkJPSBpbXgyN19pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG14MjdfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEJPSBpbXgyN19oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBpbXgyN190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUJPSBpbXgyN19kdF9pbml0LAogCS5kdF9jb21wYXQJPSBpbXgyN19kdF9ib2FyZF9jb21wYXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbXgzMS1kdC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzEtZHQuYwppbmRleCBlMWU3MGVmLi41ODFmNGQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbXgzMS1kdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDMxLWR0LmMKQEAgLTM5LDcgKzM5LDYgQEAKIAkubWFwX2lvCQk9IG14MzFfbWFwX2lvLAogCS5pbml0X2Vhcmx5CT0gaW14MzFfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBteDMxX2luaXRfaXJxLAotCS5oYW5kbGVfaXJxCT0gaW14MzFfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gaW14MzFfZHRfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lCT0gaW14MzFfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MzFfZHRfYm9hcmRfY29tcGF0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDM1LWR0LmMKaW5kZXggOWQ0OGUwMC4uYTYyODU0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgzNS1kdC5jCkBAIC00Myw3ICs0Myw2IEBACiAJLm1hcF9pbwkJPSBteDM1X21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGlteDM1X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gaW14MzVfaXJxX2luaXQsCi0JLmhhbmRsZV9pcnEJPSBpbXgzNV9oYW5kbGVfaXJxLAogCS5pbml0X21hY2hpbmUJPSBpbXgzNV9kdF9pbml0LAogCS5kdF9jb21wYXQJPSBpbXgzNV9kdF9ib2FyZF9jb21wYXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lteDUxLWR0LmMgYi9hcmNoL2FybS9tYWNoLWlteC9pbXg1MS1kdC5jCmluZGV4IDAyMzBkNzguLmI4Y2Q5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lteDUxLWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14NTEtZHQuYwpAQCAtMzgsNyArMzgsNiBAQAogCS5tYXBfaW8JCT0gbXg1MV9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSBpbXg1MV9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG14NTFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEJPSBpbXg1MV9oYW5kbGVfaXJxLAogCS5pbml0X21hY2hpbmUJPSBpbXg1MV9kdF9pbml0LAogCS5pbml0X2xhdGUJPSBpbXg1MV9pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGlteDUxX2R0X2JvYXJkX2NvbXBhdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtYXBmOTMyOC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1hcGY5MzI4LmMKaW5kZXggMDY3NTgwYi4uZWJiYjVhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1hcGY5MzI4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1hcGY5MzI4LmMKQEAgLTE0Miw3ICsxNDIsNiBAQAogCS5tYXBfaW8gICAgICAgPSBteDFfbWFwX2lvLAogCS5pbml0X2Vhcmx5ICAgPSBpbXgxX2luaXRfZWFybHksCiAJLmluaXRfaXJxICAgICA9IG14MV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSAgID0gaW14MV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBhcGY5MzI4X3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZSA9IGFwZjkzMjhfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1hcm1hZGlsbG81eDAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtYXJtYWRpbGxvNXgwLmMKaW5kZXggNThiODY0YS4uMzk0MDZiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1hcm1hZGlsbG81eDAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWFybWFkaWxsbzV4MC5jCkBAIC01NjIsNyArNTYyLDYgQEAKIAkubWFwX2lvID0gbXgzMV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgzMV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBhcm1hZGlsbG81eDBfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gYXJtYWRpbGxvNXgwX2luaXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtYnVnLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWJ1Zy5jCmluZGV4IDJkMDA0NzYuLmM5N2Q3Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1idWcuYwpAQCAtNTcsNyArNTcsNiBAQAogCS5tYXBfaW8gPSBteDMxX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzMV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDMxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IGJ1Z190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBidWdfYm9hcmRfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jCmluZGV4IGVhNTA4NzAuLjc1YjdiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDI3LmMKQEAgLTMxNCw3ICszMTQsNiBAQAogCS5tYXBfaW8gPSBteDI3X21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDI3X2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgyN19pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDI3X2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBldWtyZWFfY3B1aW14MjdfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgzNS5jCmluZGV4IDY1ZTRjNTMuLjFmZmEyNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MzUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDM1LmMKQEAgLTE5OSw3ICsxOTksNiBAQAogCS5tYXBfaW8gPSBteDM1X21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDM1X2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzNV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDM1X2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IGV1a3JlYV9jcHVpbXgzNV90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBldWtyZWFfY3B1aW14MzVfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXg1MXNkLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDUxc2QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiYTJiOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDUxc2QuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4KLSAqCi0gKiBiYXNlZCBvbiBib2FyZC1teDUxX2JhYmJhZ2UuYyB3aGljaCBpcwotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEFtaXQgS3VjaGVyaWEgPGFtaXQua3VjaGVyaWFAY2Fub25pY2FsLmNvbT4KLSAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKLSAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9tY3AyNTF4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJkZXZpY2VzLWlteDUxLmgiCi0jaW5jbHVkZSAiZXVrcmVhLWJhc2Vib2FyZHMuaCIKLSNpbmNsdWRlICJoYXJkd2FyZS5oIgotI2luY2x1ZGUgImlvbXV4LW14NTEuaCIKLQotI2RlZmluZSBVU0JIMV9SU1QJCUlNWF9HUElPX05SKDIsIDI4KQotI2RlZmluZSBFVEhfUlNUCQkJSU1YX0dQSU9fTlIoMiwgMzEpCi0jZGVmaW5lIFRTQzIwMDdfSVJRR1BJT19SRVYyCUlNWF9HUElPX05SKDMsIDEyKQotI2RlZmluZSBUU0MyMDA3X0lSUUdQSU9fUkVWMwlJTVhfR1BJT19OUig0LCAwKQotI2RlZmluZSBDQU5fSVJRR1BJTwkJSU1YX0dQSU9fTlIoMSwgMSkKLSNkZWZpbmUgQ0FOX1JTVAkJCUlNWF9HUElPX05SKDQsIDE1KQotI2RlZmluZSBDQU5fTkNTCQkJSU1YX0dQSU9fTlIoNCwgMjQpCi0jZGVmaW5lIENBTl9SWE9CRl9SRVYyCQlJTVhfR1BJT19OUigxLCA0KQotI2RlZmluZSBDQU5fUlhPQkZfUkVWMwkJSU1YX0dQSU9fTlIoMywgMTIpCi0jZGVmaW5lIENBTl9SWDFCRgkJSU1YX0dQSU9fTlIoMSwgNikKLSNkZWZpbmUgQ0FOX1RYT1JUUwkJSU1YX0dQSU9fTlIoMSwgNykKLSNkZWZpbmUgQ0FOX1RYMVJUUwkJSU1YX0dQSU9fTlIoMSwgOCkKLSNkZWZpbmUgQ0FOX1RYMlJUUwkJSU1YX0dQSU9fTlIoMSwgOSkKLSNkZWZpbmUgSTJDX1NDTAkJCUlNWF9HUElPX05SKDQsIDE2KQotI2RlZmluZSBJMkNfU0RBCQkJSU1YX0dQSU9fTlIoNCwgMTcpCi0KLS8qIFVTQl9DVFJMXzEgKi8KLSNkZWZpbmUgTVg1MV9VU0JfQ1RSTF8xX09GRlNFVAkJMHgxMAotI2RlZmluZSBNWDUxX1VTQl9DVFJMX1VIMV9FWFRfQ0xLX0VOCSgxIDw8IDI1KQotCi0jZGVmaW5lCU1YNTFfVVNCX1BMTERJVl8xMl9NSFoJCTB4MDAKLSNkZWZpbmUJTVg1MV9VU0JfUExMX0RJVl8xOV8yX01IWgkweDAxCi0jZGVmaW5lCU1YNTFfVVNCX1BMTF9ESVZfMjRfTUhaCQkweDAyCi0KLXN0YXRpYyBpb211eF92M19jZmdfdCBldWtyZWFfY3B1aW14NTFzZF9wYWRzW10gPSB7Ci0JLyogVUFSVDEgKi8KLQlNWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRCwKLQlNWDUxX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRCwKLQlNWDUxX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUywKLQlNWDUxX1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUywKLQotCS8qIFVTQiBIT1NUMSAqLwotCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLLAotCU1YNTFfUEFEX1VTQkgxX0RJUl9fVVNCSDFfRElSLAotCU1YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhULAotCU1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMCwKLQlNWDUxX1BBRF9VU0JIMV9EQVRBMV9fVVNCSDFfREFUQTEsCi0JTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyLAotCU1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMywKLQlNWDUxX1BBRF9VU0JIMV9EQVRBNF9fVVNCSDFfREFUQTQsCi0JTVg1MV9QQURfVVNCSDFfREFUQTVfX1VTQkgxX0RBVEE1LAotCU1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNiwKLQlNWDUxX1BBRF9VU0JIMV9EQVRBN19fVVNCSDFfREFUQTcsCi0JTVg1MV9QQURfVVNCSDFfU1RQX19VU0JIMV9TVFAsCi0JTVg1MV9QQURfRUlNX0NTM19fR1BJTzJfMjgsCQkvKiBQSFkgblJFU0VUICovCi0KLQkvKiBGRUMgKi8KLQlNWDUxX1BBRF9FSU1fRFRBQ0tfX0dQSU8yXzMxLAkJLyogUEhZIG5SRVNFVCAqLwotCi0JLyogSFNJMkMgKi8KLQlNWDUxX1BBRF9JMkMxX0NMS19fR1BJTzRfMTYsCi0JTVg1MV9QQURfSTJDMV9EQVRfX0dQSU80XzE3LAotCi0JLyogSTJDMSAqLwotCU1YNTFfUEFEX1NEMl9DTURfX0kyQzFfU0NMLAotCU1YNTFfUEFEX1NEMl9DTEtfX0kyQzFfU0RBLAotCi0JLyogQ0FOICovCi0JTVg1MV9QQURfQ1NQSTFfTU9TSV9fRUNTUEkxX01PU0ksCi0JTVg1MV9QQURfQ1NQSTFfTUlTT19fRUNTUEkxX01JU08sCi0JTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEssCi0JTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPNF8yNCwJCS8qIG5DUyAqLwotCU1YNTFfUEFEX0NTSTJfUElYQ0xLX19HUElPNF8xNSwJCS8qIG5SZXNldCAqLwotCU1YNTFfUEFEX0dQSU8xXzFfX0dQSU8xXzEsCQkvKiBJUlEgKi8KLQlNWDUxX1BBRF9HUElPMV80X19HUElPMV80LAkJLyogQ29udHJvbCBzaWduYWxzICovCi0JTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNiwKLQlNWDUxX1BBRF9HUElPMV83X19HUElPMV83LAotCU1YNTFfUEFEX0dQSU8xXzhfX0dQSU8xXzgsCi0JTVg1MV9QQURfR1BJTzFfOV9fR1BJTzFfOSwKLQotCS8qIFRvdWNoc2NyZWVuICovCi0JLyogSVJRICovCi0JTkVXX1BBRF9DVFJMKE1YNTFfUEFEX0dQSU9fTkFORF9fR1BJT19OQU5ELCBQQURfQ1RMX1BVU18yMktfVVAgfAotCQkJUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1NSRV9GQVNUIHwKLQkJCVBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVRSB8IFBBRF9DVExfSFlTKSwKLQlORVdfUEFEX0NUUkwoTVg1MV9QQURfTkFOREZfRDhfX0dQSU80XzAsIFBBRF9DVExfUFVTXzIyS19VUCB8Ci0JCQlQQURfQ1RMX1BLRSB8IFBBRF9DVExfU1JFX0ZBU1QgfAotCQkJUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfUFVFIHwgUEFEX0NUTF9IWVMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIGludCB0c2MyMDA3X2dldF9wZW5kb3duX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAobXg1MV9yZXZpc2lvbigpIDwgSU1YX0NISVBfUkVWSVNJT05fM18wKQotCQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKFRTQzIwMDdfSVJRR1BJT19SRVYyKTsKLQllbHNlCi0JCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoVFNDMjAwN19JUlFHUElPX1JFVjMpOwotfQotCi1zdGF0aWMgc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSB0c2MyMDA3X2luZm8gPSB7Ci0JLm1vZGVsCQkJPSAyMDA3LAotCS54X3BsYXRlX29obXMJCT0gMTgwLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IHRzYzIwMDdfZ2V0X3BlbmRvd25fc3RhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGV1a3JlYV9jcHVpbXg1MXNkX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAotCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ5KSwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdHNjMjAwN19pbmZvLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKLQkJZXVrcmVhX2NwdWlteDUxc2RfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ID0gewotCS53aWR0aAkJPSAxLAotCS5od19lY2MJCT0gMSwKLQkuZmxhc2hfYmJ0CT0gMSwKLX07Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgYm9hcmQgc3BlY2lmaWMgYXMgdGhlIGJpdCBtYXNrIGZvciB0aGUgcGxsZGl2IHdpbGwgYWxzbwotYmUgZGlmZmVyZW50IGZvciBvdGhlciBGcmVlc2NhbGUgU29DcywgdGh1cyBhIGNvbW1vbiBiaXRtYXNrIGlzIG5vdAotcG9zc2libGUgYW5kIGNhbm5vdCBnZXQgcGxhY2UgaW4gL3BsYXQtbXhjL2VoY2kuYy4qLwotc3RhdGljIGludCBpbml0aWFsaXplX290Z19wb3J0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdTMyIHY7Ci0Jdm9pZCBfX2lvbWVtICp1c2JfYmFzZTsKLQl2b2lkIF9faW9tZW0gKnVzYm90aGVyX2Jhc2U7Ci0KLQl1c2JfYmFzZSA9IGlvcmVtYXAoTVg1MV9VU0JfT1RHX0JBU0VfQUREUiwgU1pfNEspOwotCWlmICghdXNiX2Jhc2UpCi0JCXJldHVybiAtRU5PTUVNOwotCXVzYm90aGVyX2Jhc2UgPSB1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVDsKLQotCS8qIFNldCB0aGUgUEhZIGNsb2NrIHRvIDE5LjJNSHogKi8KLQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DMl9PRkZTRVQpOwotCXYgJj0gfk1YNV9VU0JfVVRNSV9QSFlDVFJMMV9QTExESVZfTUFTSzsKLQl2IHw9IE1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFo7Ci0JX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQzJfT0ZGU0VUKTsKLQlpb3VubWFwKHVzYl9iYXNlKTsKLQotCW1kZWxheSgxMCk7Ci0KLQlyZXR1cm4gbXg1MV9pbml0aWFsaXplX3VzYl9odygwLCBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOwotfQotCi1zdGF0aWMgaW50IGluaXRpYWxpemVfdXNiaDFfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXUzMiB2OwotCXZvaWQgX19pb21lbSAqdXNiX2Jhc2U7Ci0Jdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOwotCi0JdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfVVNCX09UR19CQVNFX0FERFIsIFNaXzRLKTsKLQlpZiAoIXVzYl9iYXNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQl1c2JvdGhlcl9iYXNlID0gdXNiX2Jhc2UgKyBNWDVfVVNCT1RIRVJfUkVHU19PRkZTRVQ7Ci0KLQkvKiBUaGUgY2xvY2sgZm9yIHRoZSBVU0JIMSBVTFBJIHBvcnQgd2lsbCBjb21lIGZyb20gdGhlIFBIWS4gKi8KLQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQpOwotCV9fcmF3X3dyaXRlbCh2IHwgTVg1MV9VU0JfQ1RSTF9VSDFfRVhUX0NMS19FTiwKLQkJCXVzYm90aGVyX2Jhc2UgKyBNWDUxX1VTQl9DVFJMXzFfT0ZGU0VUKTsKLQlpb3VubWFwKHVzYl9iYXNlKTsKLQotCW1kZWxheSgxMCk7Ci0KLQlyZXR1cm4gbXg1MV9pbml0aWFsaXplX3VzYl9odygxLCBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQgfAotCQkJTVhDX0VIQ0lfSVRDX05PX1RIUkVTSE9MRCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBkcl91dG1pX2NvbmZpZyBfX2luaXRjb25zdCA9IHsKLQkuaW5pdAkJPSBpbml0aWFsaXplX290Z19wb3J0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9VVE1JXzE2QklULAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9jb25maWcgX19pbml0Y29uc3QgPSB7Ci0JLmluaXQJCT0gaW5pdGlhbGl6ZV91c2JoMV9wb3J0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCi19OwotCi1zdGF0aWMgYm9vbCBvdGdfbW9kZV9ob3N0IF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGV1a3JlYV9jcHVpbXg1MXNkX290Z19tb2RlKGNoYXIgKm9wdGlvbnMpCi17Ci0JaWYgKCFzdHJjbXAob3B0aW9ucywgImhvc3QiKSkKLQkJb3RnX21vZGVfaG9zdCA9IHRydWU7Ci0JZWxzZSBpZiAoIXN0cmNtcChvcHRpb25zLCAiZGV2aWNlIikpCi0JCW90Z19tb2RlX2hvc3QgPSBmYWxzZTsKLQllbHNlCi0JCXByX2luZm8oIm90Z19tb2RlIG5laXRoZXIgXCJob3N0XCIgbm9yIFwiZGV2aWNlXCIuICIKLQkJCSJEZWZhdWx0aW5nIHRvIGRldmljZVxuIik7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJvdGdfbW9kZT0iLCBldWtyZWFfY3B1aW14NTFzZF9vdGdfbW9kZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBJMkNfU0RBLAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnNjbF9waW4JCT0gSTJDX1NDTCwKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAotCS51ZGVsYXkJCQk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoc2kyY19ncGlvX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImkyYy1ncGlvIiwKLQkuaWQJCQk9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBtY3AyNTF4X3BsYXRmb3JtX2RhdGEgbWNwMjUxeF9pbmZvID0gewotCS5vc2NpbGxhdG9yX2ZyZXF1ZW5jeSA9IDI0RTYsCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNwdWlteDUxc2Rfc3BpX2RldmljZVtdID0gewotCXsKLQkJLm1vZGFsaWFzICAgICAgICA9ICJtY3AyNTE1IiwKLQkJLm1heF9zcGVlZF9oeiAgICA9IDEwMDAwMDAwLAotCQkuYnVzX251bSAgICAgICAgID0gMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQkJLmNoaXBfc2VsZWN0ICAgICA9IDAsCi0JCS5wbGF0Zm9ybV9kYXRhICAgPSAmbWNwMjUxeF9pbmZvLAotCQkvKiBpcnEgbnVtYmVyIGlzIHJ1bi10aW1lIGFzc2lnbmVkICovCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgY3B1aW14NTFzZF9zcGkxX2NzW10gPSB7Ci0JQ0FOX05DUywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgY3B1aW14NTFzZF9lY3NwaTFfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmNoaXBzZWxlY3QJPSBjcHVpbXg1MXNkX3NwaTFfY3MsCi0JLm51bV9jaGlwc2VsZWN0CT0gQVJSQVlfU0laRShjcHVpbXg1MXNkX3NwaTFfY3MpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJldjJfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmhzaTJjX2dwaW9fZGV2aWNlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBjcHVpbXg1MXNkX2kyY19kYXRhIF9faW5pdGNvbnN0ID0gewotCS5iaXRyYXRlID0gMTAwMDAwLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXg1MXNkX2luaXQodm9pZCkKLXsKLQlpbXg1MV9zb2NfaW5pdCgpOwotCi0JbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoZXVrcmVhX2NwdWlteDUxc2RfcGFkcywKLQkJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14NTFzZF9wYWRzKSk7Ci0KLQlpbXg1MV9hZGRfaW14X3VhcnQoMCwgJnVhcnRfcGRhdGEpOwotCWlteDUxX2FkZF9teGNfbmFuZCgmZXVrcmVhX2NwdWlteDUxc2RfbmFuZF9ib2FyZF9pbmZvKTsKLQlpbXg1MV9hZGRfaW14Ml93ZHQoMCk7Ci0KLQlncGlvX3JlcXVlc3QoRVRIX1JTVCwgImV0aF9yc3QiKTsKLQlncGlvX3NldF92YWx1ZShFVEhfUlNULCAxKTsKLQlpbXg1MV9hZGRfZmVjKE5VTEwpOwotCi0JZ3Bpb19yZXF1ZXN0KENBTl9JUlFHUElPLCAiY2FuX2lycSIpOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KENBTl9JUlFHUElPKTsKLQlncGlvX2ZyZWUoQ0FOX0lSUUdQSU8pOwotCWdwaW9fcmVxdWVzdChDQU5fTkNTLCAiY2FuX25jcyIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDQU5fTkNTLCAxKTsKLQlncGlvX2ZyZWUoQ0FOX05DUyk7Ci0JZ3Bpb19yZXF1ZXN0KENBTl9SU1QsICJjYW5fcnN0Iik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENBTl9SU1QsIDApOwotCW1zbGVlcCgyMCk7Ci0JZ3Bpb19zZXRfdmFsdWUoQ0FOX1JTVCwgMSk7Ci0JaW14NTFfYWRkX2Vjc3BpKDAsICZjcHVpbXg1MXNkX2Vjc3BpMV9wZGF0YSk7Ci0JY3B1aW14NTFzZF9zcGlfZGV2aWNlWzBdLmlycSA9IGdwaW9fdG9faXJxKENBTl9JUlFHUElPKTsKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhjcHVpbXg1MXNkX3NwaV9kZXZpY2UsCi0JCQkJQVJSQVlfU0laRShjcHVpbXg1MXNkX3NwaV9kZXZpY2UpKTsKLQotCWlmIChteDUxX3JldmlzaW9uKCkgPCBJTVhfQ0hJUF9SRVZJU0lPTl8zXzApIHsKLQkJZXVrcmVhX2NwdWlteDUxc2RfaTJjX2RldmljZXNbMV0uaXJxID0KLQkJCWdwaW9fdG9faXJxKFRTQzIwMDdfSVJRR1BJT19SRVYyKSwKLQkJcGxhdGZvcm1fYWRkX2RldmljZXMocmV2Ml9wbGF0Zm9ybV9kZXZpY2VzLAotCQkJQVJSQVlfU0laRShyZXYyX3BsYXRmb3JtX2RldmljZXMpKTsKLQkJZ3Bpb19yZXF1ZXN0KFRTQzIwMDdfSVJRR1BJT19SRVYyLCAidHNjMjAwN19pcnEiKTsKLQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoVFNDMjAwN19JUlFHUElPX1JFVjIpOwotCQlncGlvX2ZyZWUoVFNDMjAwN19JUlFHUElPX1JFVjIpOwotCX0gZWxzZSB7Ci0JCWV1a3JlYV9jcHVpbXg1MXNkX2kyY19kZXZpY2VzWzFdLmlycSA9Ci0JCQlncGlvX3RvX2lycShUU0MyMDA3X0lSUUdQSU9fUkVWMyksCi0JCWlteDUxX2FkZF9pbXhfaTJjKDAsICZjcHVpbXg1MXNkX2kyY19kYXRhKTsKLQkJZ3Bpb19yZXF1ZXN0KFRTQzIwMDdfSVJRR1BJT19SRVYzLCAidHNjMjAwN19pcnEiKTsKLQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoVFNDMjAwN19JUlFHUElPX1JFVjMpOwotCQlncGlvX2ZyZWUoVFNDMjAwN19JUlFHUElPX1JFVjMpOwotCX0KLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGV1a3JlYV9jcHVpbXg1MXNkX2kyY19kZXZpY2VzLAotCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14NTFzZF9pMmNfZGV2aWNlcykpOwotCi0JaWYgKG90Z19tb2RlX2hvc3QpCi0JCWlteDUxX2FkZF9teGNfZWhjaV9vdGcoJmRyX3V0bWlfY29uZmlnKTsKLQllbHNlIHsKLQkJaW5pdGlhbGl6ZV9vdGdfcG9ydChOVUxMKTsKLQkJaW14NTFfYWRkX2ZzbF91c2IyX3VkYygmdXNiX3BkYXRhKTsKLQl9Ci0KLQlncGlvX3JlcXVlc3QoVVNCSDFfUlNULCAidXNiX3JzdCIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JIMV9SU1QsIDApOwotCW1zbGVlcCgyMCk7Ci0JZ3Bpb19zZXRfdmFsdWUoVVNCSDFfUlNULCAxKTsKLQlpbXg1MV9hZGRfbXhjX2VoY2lfaHMoMSwgJnVzYmgxX2NvbmZpZyk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRDUxX0JBU0VCT0FSRAotCWV1a3JlYV9tYmlteHNkNTFfYmFzZWJvYXJkX2luaXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZXVrcmVhX2NwdWlteDUxc2RfdGltZXJfaW5pdCh2b2lkKQotewotCW14NTFfY2xvY2tzX2luaXQoMzI3NjgsIDI0MDAwMDAwLCAyMjU3OTIwMCwgMCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDUxU0QsICJFdWtyZWEgQ1BVSU1YNTFTRCIpCi0JLyogTWFpbnRhaW5lcjogRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+ICovCi0JLmF0YWdfb2Zmc2V0ID0gMHgxMDAsCi0JLm1hcF9pbyA9IG14NTFfbWFwX2lvLAotCS5pbml0X2Vhcmx5ID0gaW14NTFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEgPSBteDUxX2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14NTFfaGFuZGxlX2lycSwKLQkuaW5pdF90aW1lCT0gZXVrcmVhX2NwdWlteDUxc2RfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lID0gZXVrcmVhX2NwdWlteDUxc2RfaW5pdCwKLQkuaW5pdF9sYXRlCT0gaW14NTFfaW5pdF9sYXRlLAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtZXVrcmVhX2NwdWlteDI1LmMKaW5kZXggNGJmNDU0NC4uZTk3OGRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWV1a3JlYV9jcHVpbXgyNS5jCkBAIC0xNjUsNyArMTY1LDYgQEAKIAkubWFwX2lvID0gbXgyNV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgyNV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MjVfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgyNV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUgPSBldWtyZWFfY3B1aW14MjVfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gZXVrcmVhX2NwdWlteDI1X2luaXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14Mjdfdmlzc3RyaW1fbTEwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3X3Zpc3N0cmltX20xMC5jCmluZGV4IDk3ZjljNjIuLmI2MWJkOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14Mjdfdmlzc3RyaW1fbTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN192aXNzdHJpbV9tMTAuYwpAQCAtNjA0LDcgKzYwNCw2IEBACiAJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MjdfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gdmlzc3RyaW1fbTEwX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZSA9IHZpc3N0cmltX20xMF9ib2FyZF9pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3aXBjYW0uYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdpcGNhbS5jCmluZGV4IDFhODUxYWUuLmJiM2NhMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdpcGNhbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdpcGNhbS5jCkBAIC03MSw3ICs3MSw2IEBACiAJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MjdfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gbXgyN2lwY2FtX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZSA9IG14MjdpcGNhbV9pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3bGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN2xpdGUuYwppbmRleCAzZGEyZTNlLi45OTkyMDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3bGl0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdsaXRlLmMKQEAgLTc3LDcgKzc3LDYgQEAKIAkubWFwX2lvID0gbXgyN19tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgyN19pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MjdfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgyN19oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBteDI3bGl0ZV90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDI3bGl0ZV9pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMKaW5kZXggNzdiNzdhOS4uYjg5OWMwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTAuYwpAQCAtMzEsNyArMzEsNiBAQAogRFRfTUFDSElORV9TVEFSVChJTVg1MF9EVCwgIkZyZWVzY2FsZSBpLk1YNTAgKERldmljZSBUcmVlIFN1cHBvcnQpIikKIAkubWFwX2lvCQk9IG14NTNfbWFwX2lvLAogCS5pbml0X2lycQk9IG14NTNfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEJPSBpbXg1MF9oYW5kbGVfaXJxLAogCS5pbml0X21hY2hpbmUJPSBpbXg1MF9kdF9pbml0LAogCS5kdF9jb21wYXQJPSBpbXg1MF9kdF9ib2FyZF9jb21wYXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYwppbmRleCA2NTg1MDkwLi4yYmFkMzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1My5jCkBAIC00MCw3ICs0MCw2IEBACiAJLm1hcF9pbwkJPSBteDUzX21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGlteDUzX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gbXg1M19pbml0X2lycSwKLQkuaGFuZGxlX2lycQk9IGlteDUzX2hhbmRsZV9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlteDUzX2R0X2luaXQsCiAJLmluaXRfbGF0ZQk9IGlteDUzX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gaW14NTNfZHRfYm9hcmRfY29tcGF0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmY2NmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnN4LmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbXg2c3hfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJc3RydWN0IGRldmljZSAqcGFyZW50OworCisJbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOworCisJcGFyZW50ID0gaW14X3NvY19kZXZpY2VfaW5pdCgpOworCWlmIChwYXJlbnQgPT0gTlVMTCkKKwkJcHJfd2FybigiZmFpbGVkIHRvIGluaXRpYWxpemUgc29jIGRldmljZVxuIik7CisKKwlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgcGFyZW50KTsKKworCWlteF9hbmF0b3BfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW14NnN4X2luaXRfaXJxKHZvaWQpCit7CisJaW14X2luaXRfcmV2aXNpb25fZnJvbV9hbmF0b3AoKTsKKwlpbXhfaW5pdF9sMmNhY2hlKCk7CisJaW14X3NyY19pbml0KCk7CisJaW14X2dwY19pbml0KCk7CisJaXJxY2hpcF9pbml0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppbXg2c3hfZHRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CisJImZzbCxpbXg2c3giLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKElNWDZTWCwgIkZyZWVzY2FsZSBpLk1YNiBTb2xvWCAoRGV2aWNlIFRyZWUpIikKKwkubWFwX2lvCQk9IGRlYnVnX2xsX2lvX2luaXQsCisJLmluaXRfaXJxCT0gaW14NnN4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBpbXg2c3hfaW5pdF9tYWNoaW5lLAorCS5kdF9jb21wYXQJPSBpbXg2c3hfZHRfY29tcGF0LAorCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1rem1fYXJtMTFfMDEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gta3ptX2FybTExXzAxLmMKaW5kZXggYzdiYzQxZC4uMzFkZjQzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1rem1fYXJtMTFfMDEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWt6bV9hcm0xMV8wMS5jCkBAIC0yODksNyArMjg5LDYgQEAKIAkubWFwX2lvID0ga3ptX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzMV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDMxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IGt6bV90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBrem1fYm9hcmRfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgxYWRzLmMKaW5kZXggOWY4ODNlNC4uNzdmZGEzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MWFkcy5jCkBAIC0xMzgsNyArMTM4LDYgQEAKIAkubWFwX2lvID0gbXgxX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDFfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IG14MWFkc190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDFhZHNfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApAQCAtMTQ5LDcgKzE0OCw2IEBACiAJLm1hcF9pbyA9IG14MV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgxX2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBteDFhZHNfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gbXgxYWRzX2luaXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDIxYWRzLmMKaW5kZXggYTA2YWE0ZC4uNzAzY2UzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDIxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDIxYWRzLmMKQEAgLTE3LDUxICsxNyw0NiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jhc2ljX21taW9fZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImRldmljZXMtaW14MjEuaCIKICNpbmNsdWRlICJoYXJkd2FyZS5oIgogI2luY2x1ZGUgImlvbXV4LW14MjEuaCIKIAotLyoKLSAqIE1lbW9yeS1tYXBwZWQgSS9PIG9uIE1YMjFBRFMgYmFzZSBib2FyZAotICovCi0jZGVmaW5lIE1YMjFBRFNfTU1JT19CQVNFX0FERFIgICAweGY1MDAwMDAwCi0jZGVmaW5lIE1YMjFBRFNfTU1JT19TSVpFICAgICAgICAweGMwMDAwMAorI2RlZmluZSBNWDIxQURTX0NTODkwMEFfUkVHCQkoTVgyMV9DUzFfQkFTRV9BRERSICsgMHgwMDAwMDApCisjZGVmaW5lIE1YMjFBRFNfU1QxNkMyNTVfSU9CQVNFX1JFRwkoTVgyMV9DUzFfQkFTRV9BRERSICsgMHgyMDAwMDApCisjZGVmaW5lIE1YMjFBRFNfVkVSU0lPTl9SRUcJCShNWDIxX0NTMV9CQVNFX0FERFIgKyAweDQwMDAwMCkKKyNkZWZpbmUgTVgyMUFEU19JT19SRUcJCQkoTVgyMV9DUzFfQkFTRV9BRERSICsgMHg4MDAwMDApCiAKLSNkZWZpbmUgTVgyMUFEU19SRUdfQUREUihvZmZzZXQpICAgICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCi0JCShNWDIxQURTX01NSU9fQkFTRV9BRERSICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgTVgyMUFEU19DUzg5MDBBX01NSU9fU0laRSAgIDB4MjAwMDAwCi0jZGVmaW5lIE1YMjFBRFNfQ1M4OTAwQV9JUlFfR1BJTyAgICBJTVhfR1BJT19OUig1LCAxMSkKLSNkZWZpbmUgTVgyMUFEU19TVDE2QzI1NV9JT0JBU0VfUkVHIE1YMjFBRFNfUkVHX0FERFIoMHgyMDAwMDApCi0jZGVmaW5lIE1YMjFBRFNfVkVSU0lPTl9SRUcgICAgICAgICBNWDIxQURTX1JFR19BRERSKDB4NDAwMDAwKQotI2RlZmluZSBNWDIxQURTX0lPX1JFRyAgICAgICAgICAgICAgTVgyMUFEU19SRUdfQUREUigweDgwMDAwMCkKKyNkZWZpbmUgTVgyMUFEU19NTUNfQ0QJCQlJTVhfR1BJT19OUig0LCAyNSkKKyNkZWZpbmUgTVgyMUFEU19DUzg5MDBBX0lSUV9HUElPCUlNWF9HUElPX05SKDUsIDExKQorI2RlZmluZSBNWDIxQURTX01NR1BJT19CQVNFCQkoNiAqIDMyKQogCiAvKiBNWDIxQURTX0lPX1JFRyBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTVgyMUFEU19JT19TRF9XUCAgICAgICAgMHgwMDAxIC8qIHJlYWQgKi8KLSNkZWZpbmUgTVgyMUFEU19JT19UUDYgICAgICAgICAgMHgwMDAxIC8qIHdyaXRlICovCi0jZGVmaW5lIE1YMjFBRFNfSU9fU1dfU0VMICAgICAgIDB4MDAwMiAvKiByZWFkICovCi0jZGVmaW5lIE1YMjFBRFNfSU9fVFA3ICAgICAgICAgIDB4MDAwMiAvKiB3cml0ZSAqLwotI2RlZmluZSBNWDIxQURTX0lPX1JFU0VUX0VfVUFSVCAweDAwMDQKLSNkZWZpbmUgTVgyMUFEU19JT19SRVNFVF9CQVNFICAgMHgwMDA4Ci0jZGVmaW5lIE1YMjFBRFNfSU9fQ1NJX0NUTDIgICAgIDB4MDAxMAotI2RlZmluZSBNWDIxQURTX0lPX0NTSV9DVEwxICAgICAweDAwMjAKLSNkZWZpbmUgTVgyMUFEU19JT19DU0lfQ1RMMCAgICAgMHgwMDQwCi0jZGVmaW5lIE1YMjFBRFNfSU9fVUFSVDFfRU4gICAgIDB4MDA4MAotI2RlZmluZSBNWDIxQURTX0lPX1VBUlQ0X0VOICAgICAweDAxMDAKLSNkZWZpbmUgTVgyMUFEU19JT19MQ0RPTiAgICAgICAgMHgwMjAwCi0jZGVmaW5lIE1YMjFBRFNfSU9fSVJEQV9FTiAgICAgIDB4MDQwMAotI2RlZmluZSBNWDIxQURTX0lPX0lSREFfRklSX1NFTCAweDA4MDAKLSNkZWZpbmUgTVgyMUFEU19JT19JUkRBX01EMF9CICAgMHgxMDAwCi0jZGVmaW5lIE1YMjFBRFNfSU9fSVJEQV9NRDEgICAgIDB4MjAwMAotI2RlZmluZSBNWDIxQURTX0lPX0xFRDRfT04gICAgICAweDQwMDAKLSNkZWZpbmUgTVgyMUFEU19JT19MRUQzX09OICAgICAgMHg4MDAwCisjZGVmaW5lIE1YMjFBRFNfSU9fU0RfV1AJCShNWDIxQURTX01NR1BJT19CQVNFICsgMCkKKyNkZWZpbmUgTVgyMUFEU19JT19UUDYJCQkoTVgyMUFEU19JT19TRF9XUCkKKyNkZWZpbmUgTVgyMUFEU19JT19TV19TRUwJCShNWDIxQURTX01NR1BJT19CQVNFICsgMSkKKyNkZWZpbmUgTVgyMUFEU19JT19UUDcJCQkoTVgyMUFEU19JT19TV19TRUwpCisjZGVmaW5lIE1YMjFBRFNfSU9fUkVTRVRfRV9VQVJUCQkoTVgyMUFEU19NTUdQSU9fQkFTRSArIDIpCisjZGVmaW5lIE1YMjFBRFNfSU9fUkVTRVRfQkFTRQkJKE1YMjFBRFNfTU1HUElPX0JBU0UgKyAzKQorI2RlZmluZSBNWDIxQURTX0lPX0NTSV9DVEwyCQkoTVgyMUFEU19NTUdQSU9fQkFTRSArIDQpCisjZGVmaW5lIE1YMjFBRFNfSU9fQ1NJX0NUTDEJCShNWDIxQURTX01NR1BJT19CQVNFICsgNSkKKyNkZWZpbmUgTVgyMUFEU19JT19DU0lfQ1RMMAkJKE1YMjFBRFNfTU1HUElPX0JBU0UgKyA2KQorI2RlZmluZSBNWDIxQURTX0lPX1VBUlQxX0VOCQkoTVgyMUFEU19NTUdQSU9fQkFTRSArIDcpCisjZGVmaW5lIE1YMjFBRFNfSU9fVUFSVDRfRU4JCShNWDIxQURTX01NR1BJT19CQVNFICsgOCkKKyNkZWZpbmUgTVgyMUFEU19JT19MQ0RPTgkJKE1YMjFBRFNfTU1HUElPX0JBU0UgKyA5KQorI2RlZmluZSBNWDIxQURTX0lPX0lSREFfRU4JCShNWDIxQURTX01NR1BJT19CQVNFICsgMTApCisjZGVmaW5lIE1YMjFBRFNfSU9fSVJEQV9GSVJfU0VMCQkoTVgyMUFEU19NTUdQSU9fQkFTRSArIDExKQorI2RlZmluZSBNWDIxQURTX0lPX0lSREFfTUQwX0IJCShNWDIxQURTX01NR1BJT19CQVNFICsgMTIpCisjZGVmaW5lIE1YMjFBRFNfSU9fSVJEQV9NRDEJCShNWDIxQURTX01NR1BJT19CQVNFICsgMTMpCisjZGVmaW5lIE1YMjFBRFNfSU9fTEVENF9PTgkJKE1YMjFBRFNfTU1HUElPX0JBU0UgKyAxNCkKKyNkZWZpbmUgTVgyMUFEU19JT19MRUQzX09OCQkoTVgyMUFEU19NTUdQSU9fQkFTRSArIDE1KQogCiBzdGF0aWMgY29uc3QgaW50IG14MjFhZHNfcGluc1tdIF9faW5pdGNvbnN0ID0gewogCkBAIC0xNDMsMTEgKzEzOCw4IEBACiAJLndpZHRoID0gNCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMWFkc19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgPSBNWDIxX0NTMF9CQVNFX0FERFIsCi0JLmVuZCA9IE1YMjFfQ1MwX0JBU0VfQUREUiArIDB4MDIwMDAwMDAgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMWFkc19mbGFzaF9yZXNvdXJjZSA9CisJREVGSU5FX1JFU19NRU0oTVgyMV9DUzBfQkFTRV9BRERSLCBTWl8zMk0pOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDIxYWRzX25vcl9tdGRfZGV2aWNlID0gewogCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLApAQCAtMTYwLDcgKzE1Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjFhZHNfY3M4OTAwX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JREVGSU5FX1JFU19NRU0oTVgyMV9DUzFfQkFTRV9BRERSLCBNWDIxQURTX0NTODkwMEFfTU1JT19TSVpFKSwKKwlERUZJTkVfUkVTX01FTShNWDIxQURTX0NTODkwMEFfUkVHLCBTWl8xSyksCiAJLyogaXJxIG51bWJlciBpcyBydW4tdGltZSBhc3NpZ25lZCAqLwogCURFRklORV9SRVNfSVJRKC0xKSwKIH07CkBAIC0xNzksMjQgKzE3MSw1MCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YV9ub3J0cyBfX2luaXRjb25zdCA9IHsKIH07CiAKLXN0YXRpYyBpbnQgbXgyMWFkc19mYl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdTE2IHRtcDsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMWFkc19tbWdwaW9fcmVzb3VyY2UgPQorCURFRklORV9SRVNfTUVNX05BTUVEKE1YMjFBRFNfSU9fUkVHLCBTWl8yLCAiZGF0Iik7CiAKLQl0bXAgPSBfX3Jhd19yZWFkdyhNWDIxQURTX0lPX1JFRyk7Ci0JdG1wIHw9IE1YMjFBRFNfSU9fTENET047Ci0JX19yYXdfd3JpdGV3KHRtcCwgTVgyMUFEU19JT19SRUcpOwotCXJldHVybiAwOwotfQorc3RhdGljIHN0cnVjdCBiZ3Bpb19wZGF0YSBteDIxYWRzX21tZ3Bpb19wZGF0YSA9IHsKKwkuYmFzZQk9IE1YMjFBRFNfTU1HUElPX0JBU0UsCisJLm5ncGlvCT0gMTYsCit9OwogCi1zdGF0aWMgdm9pZCBteDIxYWRzX2ZiX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQl1MTYgdG1wOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMWFkc19tbWdwaW8gPSB7CisJLm5hbWUgPSAiYmFzaWMtbW1pby1ncGlvIiwKKwkuaWQgPSBQTEFURk9STV9ERVZJRF9BVVRPLAorCS5yZXNvdXJjZSA9ICZteDIxYWRzX21tZ3Bpb19yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXgyMWFkc19tbWdwaW9fcGRhdGEsCisJfSwKK307CiAKLQl0bXAgPSBfX3Jhd19yZWFkdyhNWDIxQURTX0lPX1JFRyk7Ci0JdG1wICY9IH5NWDIxQURTX0lPX0xDRE9OOwotCV9fcmF3X3dyaXRldyh0bXAsIE1YMjFBRFNfSU9fUkVHKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBteDIxYWRzX2xjZF9yZWd1bGF0b3JfY29uc3VtZXIgPQorCVJFR1VMQVRPUl9TVVBQTFkoImxjZCIsICJpbXgtZmIuMCIpOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbXgyMWFkc19sY2RfcmVndWxhdG9yX2luaXRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJm14MjFhZHNfbGNkX3JlZ3VsYXRvcl9jb25zdW1lciwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgbXgyMWFkc19sY2RfcmVndWxhdG9yX3BkYXRhID0geworCS5zdXBwbHlfbmFtZQk9ICJMQ0QiLAorCS5taWNyb3ZvbHRzCT0gMzMwMDAwMCwKKwkuZ3BpbwkJPSBNWDIxQURTX0lPX0xDRE9OLAorCS5lbmFibGVfaGlnaAk9IDEsCisJLmluaXRfZGF0YQk9ICZteDIxYWRzX2xjZF9yZWd1bGF0b3JfaW5pdF9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMWFkc19sY2RfcmVndWxhdG9yID0geworCS5uYW1lID0gInJlZy1maXhlZC12b2x0YWdlIiwKKwkuaWQgPSBQTEFURk9STV9ERVZJRF9BVVRPLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MjFhZHNfbGNkX3JlZ3VsYXRvcl9wZGF0YSwKKwl9LAorfTsKIAogLyoKICAqIENvbm5lY3RlZCBpcyBhIHBvcnRyYWl0IFNoYXJwLVFWR0EgZGlzcGxheQpAQCAtMjI5LDI2ICsyNDcsMzAgQEAKIAkucHdtcgkJPSAweDAwYTkwM2ZmLAogCS5sc2NyMQkJPSAweDAwMTIwMzAwLAogCS5kbWFjcgkJPSAweDAwMDIwMDA4LAotCi0JLmluaXQgPSBteDIxYWRzX2ZiX2luaXQsCi0JLmV4aXQgPSBteDIxYWRzX2ZiX2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IG14MjFhZHNfc2RoY19nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiAoX19yYXdfcmVhZHcoTVgyMUFEU19JT19SRUcpICYgTVgyMUFEU19JT19TRF9XUCkgPyAxIDogMDsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoTVgyMUFEU19JT19TRF9XUCk7CiB9CiAKIHN0YXRpYyBpbnQgbXgyMWFkc19zZGhjX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCiAJdm9pZCAqZGF0YSkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoSU1YX0dQSU9fTlIoNCwgMjUpKSwgZGV0ZWN0X2lycSwKLQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsICJtbWMtZGV0ZWN0IiwgZGF0YSk7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChNWDIxQURTX0lPX1NEX1dQLCAibW1jLXJvIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXF1ZXN0X2lycShncGlvX3RvX2lycShNWDIxQURTX01NQ19DRCksIGRldGVjdF9pcnEsCisJCQkgICBJUlFGX1RSSUdHRVJfRkFMTElORywgIm1tYy1kZXRlY3QiLCBkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgbXgyMWFkc19zZGhjX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWZyZWVfaXJxKGdwaW9fdG9faXJxKElNWF9HUElPX05SKDQsIDI1KSksIGRhdGEpOworCWZyZWVfaXJxKGdwaW9fdG9faXJxKE1YMjFBRFNfTU1DX0NEKSwgZGF0YSk7CisJZ3Bpb19mcmVlKE1YMjFBRFNfSU9fU0RfV1ApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIG14MjFhZHNfc2RoY19wZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTI2NCwyOSArMjg2LDkgQEAKIAkuaHdfZWNjID0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgyMWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQkvKgotCSAqIE1lbW9yeS1tYXBwZWQgSS9PIG9uIE1YMjFBRFMgQmFzZSBib2FyZDoKLQkgKiAgIC0gQ1M4OTAwQSBFdGhlcm5ldCBjb250cm9sbGVyCi0JICogICAtIFNUMTZDMjU1MkNKIFVBUlQKLQkgKiAgIC0gQ1BVIGFuZCBCYXNlIGJvYXJkIHZlcnNpb24KLQkgKiAgIC0gQmFzZSBib2FyZCBJL08gcmVnaXN0ZXIKLQkgKi8KLQl7Ci0JCS52aXJ0dWFsID0gTVgyMUFEU19NTUlPX0JBU0VfQUREUiwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9DUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YMjFBRFNfTU1JT19TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfbWFwX2lvKHZvaWQpCi17Ci0JbXgyMV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgyMWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MjFhZHNfaW9fZGVzYykpOwotfQotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14MjFhZHNfbW1ncGlvLAorCSZteDIxYWRzX2xjZF9yZWd1bGF0b3IsCiAJJm14MjFhZHNfbm9yX210ZF9kZXZpY2UsCiB9OwogCkBAIC0zMDAsMTIgKzMwMiwxMyBAQAogCWlteDIxX2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGFfcnRzKTsKIAlpbXgyMV9hZGRfaW14X3VhcnQyKCZ1YXJ0X3BkYXRhX25vcnRzKTsKIAlpbXgyMV9hZGRfaW14X3VhcnQzKCZ1YXJ0X3BkYXRhX3J0cyk7Ci0JaW14MjFfYWRkX2lteF9mYigmbXgyMWFkc19mYl9kYXRhKTsKIAlpbXgyMV9hZGRfbXhjX21tYygwLCAmbXgyMWFkc19zZGhjX3BkYXRhKTsKIAlpbXgyMV9hZGRfbXhjX25hbmQoJm14MjFhZHNfbmFuZF9ib2FyZF9pbmZvKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwogCisJaW14MjFfYWRkX2lteF9mYigmbXgyMWFkc19mYl9kYXRhKTsKKwogCW14MjFhZHNfY3M4OTAwX3Jlc291cmNlc1sxXS5zdGFydCA9CiAJCQlncGlvX3RvX2lycShNWDIxQURTX0NTODkwMEFfSVJRX0dQSU8pOwogCW14MjFhZHNfY3M4OTAwX3Jlc291cmNlc1sxXS5lbmQgPQpAQCAtMzIxLDEwICszMjQsOSBAQAogTUFDSElORV9TVEFSVChNWDIxQURTLCAiRnJlZXNjYWxlIGkuTVgyMUFEUyIpCiAJLyogbWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KIAkuYXRhZ19vZmZzZXQgPSAweDEwMCwKLQkubWFwX2lvID0gbXgyMWFkc19tYXBfaW8sCisJLm1hcF9pbwkJPSBteDIxX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDIxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgyMV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDIxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IG14MjFhZHNfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gbXgyMWFkc19ib2FyZF9pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKaW5kZXggMTM0OTBjMi4uZWExZmExOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwpAQCAtMjYzLDcgKzI2Myw2IEBACiAJLm1hcF9pbyA9IG14MjVfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MjVfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDI1X2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MjVfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gbXgyNXBka190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDI1cGRrX2luaXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN18zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN18zZHMuYwppbmRleCAyNWIzZTRjLi40MzVhNTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3XzNkcy5jCkBAIC01NDQsNyArNTQ0LDYgQEAKIAkubWFwX2lvID0gbXgyN19tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgyN19pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MjdfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgyN19oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBteDI3cGRrX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZSA9IG14MjdwZGtfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdhZHMuYwppbmRleCBhN2E0YTljLi4yZjgzNGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdhZHMuYwpAQCAtMzkxLDcgKzM5MSw2IEBACiAJLm1hcF9pbyA9IG14MjdhZHNfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MjdfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gbXgyN2Fkc190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDI3YWRzX2JvYXJkX2luaXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMV8zZHMuYwppbmRleCA1MDA0NGEyLi40MjE3ODcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxXzNkcy5jCkBAIC03NzUsNyArNzc1LDYgQEAKIAkubWFwX2lvID0gbXgzMV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgzMV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBteDMxXzNkc190aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDMxXzNkc19pbml0LAogCS5yZXNlcnZlID0gbXgzMV8zZHNfcmVzZXJ2ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxYWRzLmMKaW5kZXggZGFmODg4OS4uZDA4YzM3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxYWRzLmMKQEAgLTU4Miw3ICs1ODIsNiBAQAogCS5tYXBfaW8gPSBteDMxYWRzX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzMWFkc19pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDMxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IG14MzFhZHNfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gbXgzMWFkc19pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFsaWxseS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxbGlsbHkuYwppbmRleCA4MzJiMWUyLi5lZWUwNDJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFsaWxseS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMWxpbGx5LmMKQEAgLTMwOCw3ICszMDgsNiBAQAogCS5tYXBfaW8gPSBteDMxX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzMV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDMxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IG14MzFsaWxseV90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDMxbGlsbHlfYm9hcmRfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxbGl0ZS5jCmluZGV4IGJlYTA3MjkuLmZhMTVkMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMWxpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFsaXRlLmMKQEAgLTI5MSw3ICsyOTEsNiBAQAogCS5tYXBfaW8gPSBteDMxbGl0ZV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgzMV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBteDMxbGl0ZV90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBteDMxbGl0ZV9pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFtb2JvYXJkLmMKaW5kZXggOGY0NWFmZS4uMDg3MzBmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxbW9ib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMW1vYm9hcmQuYwpAQCAtNjAwLDcgKzYwMCw2IEBACiAJLm1hcF9pbyA9IG14MzFfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MzFfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDMxX2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MzFfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gbXgzMW1vYm9hcmRfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gbXgzMW1vYm9hcmRfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDM1XzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDM1XzNkcy5jCmluZGV4IGE0MmY0ZjAuLjRlOGIxODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzNV8zZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzVfM2RzLmMKQEAgLTYxNSw3ICs2MTUsNiBAQAogCS5tYXBfaW8gPSBteDM1X21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDM1X2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzNV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDM1X2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IG14MzVwZGtfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gbXgzNV8zZHNfaW5pdCwKIAkucmVzZXJ2ZSA9IG14MzVfM2RzX3Jlc2VydmUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14NTFfYmFiYmFnZS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDUxX2JhYmJhZ2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNkMjY0YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14NTFfYmFiYmFnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBBbWl0IEt1Y2hlcmlhIDxhbWl0Lmt1Y2hlcmlhQGNhbm9uaWNhbC5jb20+Ci0gKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Ci0gKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJkZXZpY2VzLWlteDUxLmgiCi0jaW5jbHVkZSAiaGFyZHdhcmUuaCIKLSNpbmNsdWRlICJpb211eC1teDUxLmgiCi0KLSNkZWZpbmUgQkFCQkFHRV9VU0JfSFVCX1JFU0VUCUlNWF9HUElPX05SKDEsIDcpCi0jZGVmaW5lIEJBQkJBR0VfVVNCSDFfU1RQCUlNWF9HUElPX05SKDEsIDI3KQotI2RlZmluZSBCQUJCQUdFX1VTQl9QSFlfUkVTRVQJSU1YX0dQSU9fTlIoMiwgNSkKLSNkZWZpbmUgQkFCQkFHRV9GRUNfUEhZX1JFU0VUCUlNWF9HUElPX05SKDIsIDE0KQotI2RlZmluZSBCQUJCQUdFX1BPV0VSX0tFWQlJTVhfR1BJT19OUigyLCAyMSkKLSNkZWZpbmUgQkFCQkFHRV9FQ1NQSTFfQ1MwCUlNWF9HUElPX05SKDQsIDI0KQotI2RlZmluZSBCQUJCQUdFX0VDU1BJMV9DUzEJSU1YX0dQSU9fTlIoNCwgMjUpCi0jZGVmaW5lIEJBQkJBR0VfU0QyX0NECQlJTVhfR1BJT19OUigxLCA2KQotI2RlZmluZSBCQUJCQUdFX1NEMl9XUAkJSU1YX0dQSU9fTlIoMSwgNSkKLQotLyogVVNCX0NUUkxfMSAqLwotI2RlZmluZSBNWDUxX1VTQl9DVFJMXzFfT0ZGU0VUCQkJMHgxMAotI2RlZmluZSBNWDUxX1VTQl9DVFJMX1VIMV9FWFRfQ0xLX0VOCQkoMSA8PCAyNSkKLQotI2RlZmluZQlNWDUxX1VTQl9QTExESVZfMTJfTUhaCQkweDAwCi0jZGVmaW5lCU1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFoJMHgwMQotI2RlZmluZQlNWDUxX1VTQl9QTExfRElWXzI0X01IWgkweDAyCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBiYWJiYWdlX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEJBQkJBR0VfUE9XRVJfS0VZLAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gIlBXUiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGlteF9idXR0b25fZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuYnV0dG9ucwk9IGJhYmJhZ2VfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGJhYmJhZ2VfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1MWJhYmJhZ2VfcGFkc1tdID0gewotCS8qIFVBUlQxICovCi0JTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQsCi0JTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQsCi0JTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMsCi0JTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMsCi0KLQkvKiBVQVJUMiAqLwotCU1YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhELAotCU1YNTFfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhELAotCi0JLyogVUFSVDMgKi8KLQlNWDUxX1BBRF9FSU1fRDI1X19VQVJUM19SWEQsCi0JTVg1MV9QQURfRUlNX0QyNl9fVUFSVDNfVFhELAotCU1YNTFfUEFEX0VJTV9EMjdfX1VBUlQzX1JUUywKLQlNWDUxX1BBRF9FSU1fRDI0X19VQVJUM19DVFMsCi0KLQkvKiBJMkMxICovCi0JTVg1MV9QQURfRUlNX0QxNl9fSTJDMV9TREEsCi0JTVg1MV9QQURfRUlNX0QxOV9fSTJDMV9TQ0wsCi0KLQkvKiBJMkMyICovCi0JTVg1MV9QQURfS0VZX0NPTDRfX0kyQzJfU0NMLAotCU1YNTFfUEFEX0tFWV9DT0w1X19JMkMyX1NEQSwKLQotCS8qIEhTSTJDICovCi0JTVg1MV9QQURfSTJDMV9DTEtfX0kyQzFfQ0xLLAotCU1YNTFfUEFEX0kyQzFfREFUX19JMkMxX0RBVCwKLQotCS8qIFVTQiBIT1NUMSAqLwotCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLLAotCU1YNTFfUEFEX1VTQkgxX0RJUl9fVVNCSDFfRElSLAotCU1YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhULAotCU1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMCwKLQlNWDUxX1BBRF9VU0JIMV9EQVRBMV9fVVNCSDFfREFUQTEsCi0JTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyLAotCU1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMywKLQlNWDUxX1BBRF9VU0JIMV9EQVRBNF9fVVNCSDFfREFUQTQsCi0JTVg1MV9QQURfVVNCSDFfREFUQTVfX1VTQkgxX0RBVEE1LAotCU1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNiwKLQlNWDUxX1BBRF9VU0JIMV9EQVRBN19fVVNCSDFfREFUQTcsCi0KLQkvKiBVU0IgSFVCIHJlc2V0IGxpbmUqLwotCU1YNTFfUEFEX0dQSU8xXzdfX0dQSU8xXzcsCi0KLQkvKiBVU0IgUEhZIHJlc2V0IGxpbmUgKi8KLQlNWDUxX1BBRF9FSU1fRDIxX19HUElPMl81LAotCi0JLyogRkVDICovCi0JTVg1MV9QQURfRUlNX0VCMl9fRkVDX01ESU8sCi0JTVg1MV9QQURfRUlNX0VCM19fRkVDX1JEQVRBMSwKLQlNWDUxX1BBRF9FSU1fQ1MyX19GRUNfUkRBVEEyLAotCU1YNTFfUEFEX0VJTV9DUzNfX0ZFQ19SREFUQTMsCi0JTVg1MV9QQURfRUlNX0NTNF9fRkVDX1JYX0VSLAotCU1YNTFfUEFEX0VJTV9DUzVfX0ZFQ19DUlMsCi0JTVg1MV9QQURfTkFOREZfUkIyX19GRUNfQ09MLAotCU1YNTFfUEFEX05BTkRGX1JCM19fRkVDX1JYX0NMSywKLQlNWDUxX1BBRF9OQU5ERl9EOV9fRkVDX1JEQVRBMCwKLQlNWDUxX1BBRF9OQU5ERl9EOF9fRkVDX1REQVRBMCwKLQlNWDUxX1BBRF9OQU5ERl9DUzJfX0ZFQ19UWF9FUiwKLQlNWDUxX1BBRF9OQU5ERl9DUzNfX0ZFQ19NREMsCi0JTVg1MV9QQURfTkFOREZfQ1M0X19GRUNfVERBVEExLAotCU1YNTFfUEFEX05BTkRGX0NTNV9fRkVDX1REQVRBMiwKLQlNWDUxX1BBRF9OQU5ERl9DUzZfX0ZFQ19UREFUQTMsCi0JTVg1MV9QQURfTkFOREZfQ1M3X19GRUNfVFhfRU4sCi0JTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fRkVDX1RYX0NMSywKLQotCS8qIEZFQyBQSFkgcmVzZXQgbGluZSAqLwotCU1YNTFfUEFEX0VJTV9BMjBfX0dQSU8yXzE0LAotCi0JLyogU0QgMSAqLwotCU1YNTFfUEFEX1NEMV9DTURfX1NEMV9DTUQsCi0JTVg1MV9QQURfU0QxX0NMS19fU0QxX0NMSywKLQlNWDUxX1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMCwKLQlNWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMSwKLQlNWDUxX1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMiwKLQlNWDUxX1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMywKLQkvKiBDRC9XUCBmcm9tIGNvbnRyb2xsZXIgKi8KLQlNWDUxX1BBRF9HUElPMV8wX19TRDFfQ0QsCi0JTVg1MV9QQURfR1BJTzFfMV9fU0QxX1dQLAotCi0JLyogU0QgMiAqLwotCU1YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQsCi0JTVg1MV9QQURfU0QyX0NMS19fU0QyX0NMSywKLQlNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMCwKLQlNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMSwKLQlNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMiwKLQlNWDUxX1BBRF9TRDJfREFUQTNfX1NEMl9EQVRBMywKLQkvKiBDRC9XUCBncGlvICovCi0JTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNiwKLQlNWDUxX1BBRF9HUElPMV81X19HUElPMV81LAotCi0JLyogZUNTUEkxICovCi0JTVg1MV9QQURfQ1NQSTFfTUlTT19fRUNTUEkxX01JU08sCi0JTVg1MV9QQURfQ1NQSTFfTU9TSV9fRUNTUEkxX01PU0ksCi0JTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEssCi0JTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPNF8yNCwKLQlNWDUxX1BBRF9DU1BJMV9TUzFfX0dQSU80XzI1LAotCi0JLyogQXVkaW8gKi8KLQlNWDUxX1BBRF9BVUQzX0JCX1RYRF9fQVVEM19UWEQsCi0JTVg1MV9QQURfQVVEM19CQl9SWERfX0FVRDNfUlhELAotCU1YNTFfUEFEX0FVRDNfQkJfQ0tfX0FVRDNfVFhDLAotCU1YNTFfUEFEX0FVRDNfQkJfRlNfX0FVRDNfVFhGUywKLX07Ci0KLS8qIFNlcmlhbCBwb3J0cyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBiYWJiYWdlX2kyY19kYXRhIF9faW5pdGNvbnN0ID0gewotCS5iaXRyYXRlID0gMTAwMDAwLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBiYWJiYWdlX2hzaTJjX2RhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmJpdHJhdGUgPSA0MDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW8gbXg1MV9iYWJiYWdlX3VzYmgxX2dwaW9zW10gPSB7Ci0JeyBCQUJCQUdFX1VTQkgxX1NUUCwgR1BJT0ZfT1VUX0lOSVRfTE9XLCAidXNiaDFfc3RwIiB9LAotCXsgQkFCQkFHRV9VU0JfUEhZX1JFU0VULCBHUElPRl9PVVRfSU5JVF9MT1csICJ1c2JoMV9waHlfcmVzZXQiIH0sCi19OwotCi1zdGF0aWMgaW50IGdwaW9fdXNiaDFfYWN0aXZlKHZvaWQpCi17Ci0JaW9tdXhfdjNfY2ZnX3QgdXNiaDFzdHBfZ3BpbyA9IE1YNTFfUEFEX1VTQkgxX1NUUF9fR1BJTzFfMjc7Ci0JaW50IHJldDsKLQotCS8qIFNldCBVU0JIMV9TVFAgdG8gR1BJTyBhbmQgdG9nZ2xlIGl0ICovCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCh1c2JoMXN0cF9ncGlvKTsKLQlyZXQgPSBncGlvX3JlcXVlc3RfYXJyYXkobXg1MV9iYWJiYWdlX3VzYmgxX2dwaW9zLAotCQkJCQlBUlJBWV9TSVpFKG14NTFfYmFiYmFnZV91c2JoMV9ncGlvcykpOwotCi0JaWYgKHJldCkgewotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBVU0JIMSBwaW5zOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQltc2xlZXAoMTAwKTsKLQlncGlvX3NldF92YWx1ZShCQUJCQUdFX1VTQkgxX1NUUCwgMSk7Ci0JZ3Bpb19zZXRfdmFsdWUoQkFCQkFHRV9VU0JfUEhZX1JFU0VULCAxKTsKLQlncGlvX2ZyZWVfYXJyYXkobXg1MV9iYWJiYWdlX3VzYmgxX2dwaW9zLAotCQkJCQlBUlJBWV9TSVpFKG14NTFfYmFiYmFnZV91c2JoMV9ncGlvcykpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFiYmFnZV91c2JodWJfcmVzZXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JLyogUmVzZXQgVVNCIGh1YiAqLwotCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoQkFCQkFHRV9VU0JfSFVCX1JFU0VULAotCQkJCQlHUElPRl9PVVRfSU5JVF9MT1csICJHUElPMV83Iik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIiZmFpbGVkIHRvIGdldCBHUElPX1VTQl9IVUJfUkVTRVQ6ICVkXG4iLCByZXQpOwotCQlyZXR1cm47Ci0JfQotCi0JbXNsZWVwKDIpOwotCS8qIERlYXNzZXJ0IHJlc2V0ICovCi0JZ3Bpb19zZXRfdmFsdWUoQkFCQkFHRV9VU0JfSFVCX1JFU0VULCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJhYmJhZ2VfZmVjX3Jlc2V0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCS8qIHJlc2V0IEZFQyBQSFkgKi8KLQlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKEJBQkJBR0VfRkVDX1BIWV9SRVNFVCwKLQkJCQkJR1BJT0ZfT1VUX0lOSVRfTE9XLCAiZmVjLXBoeS1yZXNldCIpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSImZhaWxlZCB0byBnZXQgR1BJT19GRUNfUEhZX1JFU0VUOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuOwotCX0KLQltc2xlZXAoMSk7Ci0JZ3Bpb19zZXRfdmFsdWUoQkFCQkFHRV9GRUNfUEhZX1JFU0VULCAxKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBib2FyZCBzcGVjaWZpYyBhcyB0aGUgYml0IG1hc2sgZm9yIHRoZSBwbGxkaXYgd2lsbCBhbHNvCi1iZSBkaWZmZXJlbnQgZm9yIG90aGVyIEZyZWVzY2FsZSBTb0NzLCB0aHVzIGEgY29tbW9uIGJpdG1hc2sgaXMgbm90Ci1wb3NzaWJsZSBhbmQgY2Fubm90IGdldCBwbGFjZSBpbiAvcGxhdC1teGMvZWhjaS5jLiovCi1zdGF0aWMgaW50IGluaXRpYWxpemVfb3RnX3BvcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQl1MzIgdjsKLQl2b2lkIF9faW9tZW0gKnVzYl9iYXNlOwotCXZvaWQgX19pb21lbSAqdXNib3RoZXJfYmFzZTsKLQotCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX1VTQl9PVEdfQkFTRV9BRERSLCBTWl80Syk7Ci0JaWYgKCF1c2JfYmFzZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdXNib3RoZXJfYmFzZSA9IHVzYl9iYXNlICsgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUOwotCi0JLyogU2V0IHRoZSBQSFkgY2xvY2sgdG8gMTkuMk1IeiAqLwotCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQl9QSFlfQ1RSX0ZVTkMyX09GRlNFVCk7Ci0JdiAmPSB+TVg1X1VTQl9VVE1JX1BIWUNUUkwxX1BMTERJVl9NQVNLOwotCXYgfD0gTVg1MV9VU0JfUExMX0RJVl8xOV8yX01IWjsKLQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DMl9PRkZTRVQpOwotCWlvdW5tYXAodXNiX2Jhc2UpOwotCi0JbWRlbGF5KDEwKTsKLQotCXJldHVybiBteDUxX2luaXRpYWxpemVfdXNiX2h3KDAsIE1YQ19FSENJX0lOVEVSTkFMX1BIWSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdGlhbGl6ZV91c2JoMV9wb3J0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdTMyIHY7Ci0Jdm9pZCBfX2lvbWVtICp1c2JfYmFzZTsKLQl2b2lkIF9faW9tZW0gKnVzYm90aGVyX2Jhc2U7Ci0KLQl1c2JfYmFzZSA9IGlvcmVtYXAoTVg1MV9VU0JfT1RHX0JBU0VfQUREUiwgU1pfNEspOwotCWlmICghdXNiX2Jhc2UpCi0JCXJldHVybiAtRU5PTUVNOwotCXVzYm90aGVyX2Jhc2UgPSB1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVDsKLQotCS8qIFRoZSBjbG9jayBmb3IgdGhlIFVTQkgxIFVMUEkgcG9ydCB3aWxsIGNvbWUgZXh0ZXJuYWxseSBmcm9tIHRoZSBQSFkuICovCi0JdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWDUxX1VTQl9DVFJMXzFfT0ZGU0VUKTsKLQlfX3Jhd193cml0ZWwodiB8IE1YNTFfVVNCX0NUUkxfVUgxX0VYVF9DTEtfRU4sIHVzYm90aGVyX2Jhc2UgKyBNWDUxX1VTQl9DVFJMXzFfT0ZGU0VUKTsKLQlpb3VubWFwKHVzYl9iYXNlKTsKLQotCW1kZWxheSgxMCk7Ci0KLQlyZXR1cm4gbXg1MV9pbml0aWFsaXplX3VzYl9odygxLCBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQgfAotCQkJTVhDX0VIQ0lfSVRDX05PX1RIUkVTSE9MRCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBkcl91dG1pX2NvbmZpZyBfX2luaXRjb25zdCA9IHsKLQkuaW5pdAkJPSBpbml0aWFsaXplX290Z19wb3J0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9VVE1JXzE2QklULAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9jb25maWcgX19pbml0Y29uc3QgPSB7Ci0JLmluaXQJCT0gaW5pdGlhbGl6ZV91c2JoMV9wb3J0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCi19OwotCi1zdGF0aWMgYm9vbCBvdGdfbW9kZV9ob3N0IF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJhYmJhZ2Vfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKLXsKLQlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQotCQlvdGdfbW9kZV9ob3N0ID0gdHJ1ZTsKLQllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKLQkJb3RnX21vZGVfaG9zdCA9IGZhbHNlOwotCWVsc2UKLQkJcHJfaW5mbygib3RnX21vZGUgbmVpdGhlciBcImhvc3RcIiBub3IgXCJkZXZpY2VcIi4gIgotCQkJIkRlZmF1bHRpbmcgdG8gZGV2aWNlXG4iKTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm90Z19tb2RlPSIsIGJhYmJhZ2Vfb3RnX21vZGUpOwotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG14NTFfYmFiYmFnZV9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkubW9kYWxpYXMgPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwKLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAxLAotCQkubW9kZSA9IFNQSV9NT0RFXzAsCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQl9LAotfTsKLQotc3RhdGljIGludCBteDUxX2JhYmJhZ2Vfc3BpX2NzW10gPSB7Ci0JQkFCQkFHRV9FQ1NQSTFfQ1MwLAotCUJBQkJBR0VfRUNTUEkxX0NTMSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgbXg1MV9iYWJiYWdlX3NwaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuY2hpcHNlbGVjdCAgICAgPSBteDUxX2JhYmJhZ2Vfc3BpX2NzLAotCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUobXg1MV9iYWJiYWdlX3NwaV9jcyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVzZGhjX3BsYXRmb3JtX2RhdGEgbXg1MV9iYWJiYWdlX3NkMV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jZF90eXBlID0gRVNESENfQ0RfQ09OVFJPTExFUiwKLQkud3BfdHlwZSA9IEVTREhDX1dQX0NPTlRST0xMRVIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVzZGhjX3BsYXRmb3JtX2RhdGEgbXg1MV9iYWJiYWdlX3NkMl9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jZF9ncGlvID0gQkFCQkFHRV9TRDJfQ0QsCi0JLndwX2dwaW8gPSBCQUJCQUdFX1NEMl9XUCwKLQkuY2RfdHlwZSA9IEVTREhDX0NEX0dQSU8sCi0JLndwX3R5cGUgPSBFU0RIQ19XUF9HUElPLAotfTsKLQotdm9pZCBfX2luaXQgaW14NTFfYmFiYmFnZV9jb21tb25faW5pdCh2b2lkKQotewotCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14NTFiYWJiYWdlX3BhZHMsCi0JCQkJCSBBUlJBWV9TSVpFKG14NTFiYWJiYWdlX3BhZHMpKTsKLX0KLQotLyoKLSAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9iYWJiYWdlX2luaXQodm9pZCkKLXsKLQlpb211eF92M19jZmdfdCB1c2JoMXN0cCA9IE1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQOwotCWlvbXV4X3YzX2NmZ190IHBvd2VyX2tleSA9IE5FV19QQURfQ1RSTChNWDUxX1BBRF9FSU1fQTI3X19HUElPMl8yMSwKLQkJUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfRFNFX0hJR0gpOwotCi0JaW14NTFfc29jX2luaXQoKTsKLQotCWlteDUxX2JhYmJhZ2VfY29tbW9uX2luaXQoKTsKLQotCWlteDUxX2FkZF9pbXhfdWFydCgwLCAmdWFydF9wZGF0YSk7Ci0JaW14NTFfYWRkX2lteF91YXJ0KDEsIE5VTEwpOwotCWlteDUxX2FkZF9pbXhfdWFydCgyLCAmdWFydF9wZGF0YSk7Ci0KLQliYWJiYWdlX2ZlY19yZXNldCgpOwotCWlteDUxX2FkZF9mZWMoTlVMTCk7Ci0KLQkvKiBTZXQgdGhlIFBBRCBzZXR0aW5ncyBmb3IgdGhlIHB3ciBrZXkuICovCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZChwb3dlcl9rZXkpOwotCWlteF9hZGRfZ3Bpb19rZXlzKCZpbXhfYnV0dG9uX2RhdGEpOwotCi0JaW14NTFfYWRkX2lteF9pMmMoMCwgJmJhYmJhZ2VfaTJjX2RhdGEpOwotCWlteDUxX2FkZF9pbXhfaTJjKDEsICZiYWJiYWdlX2kyY19kYXRhKTsKLQlpbXg1MV9hZGRfaHNpMmMoJmJhYmJhZ2VfaHNpMmNfZGF0YSk7Ci0KLQlpZiAob3RnX21vZGVfaG9zdCkKLQkJaW14NTFfYWRkX214Y19laGNpX290ZygmZHJfdXRtaV9jb25maWcpOwotCWVsc2UgewotCQlpbml0aWFsaXplX290Z19wb3J0KE5VTEwpOwotCQlpbXg1MV9hZGRfZnNsX3VzYjJfdWRjKCZ1c2JfcGRhdGEpOwotCX0KLQotCWdwaW9fdXNiaDFfYWN0aXZlKCk7Ci0JaW14NTFfYWRkX214Y19laGNpX2hzKDEsICZ1c2JoMV9jb25maWcpOwotCS8qIHNldGJhY2sgVVNCSDFfU1RQIHRvIGJlIGZ1bmN0aW9uICovCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCh1c2JoMXN0cCk7Ci0JYmFiYmFnZV91c2JodWJfcmVzZXQoKTsKLQotCWlteDUxX2FkZF9zZGhjaV9lc2RoY19pbXgoMCwgJm14NTFfYmFiYmFnZV9zZDFfZGF0YSk7Ci0JaW14NTFfYWRkX3NkaGNpX2VzZGhjX2lteCgxLCAmbXg1MV9iYWJiYWdlX3NkMl9kYXRhKTsKLQotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG14NTFfYmFiYmFnZV9zcGlfYm9hcmRfaW5mbywKLQkJQVJSQVlfU0laRShteDUxX2JhYmJhZ2Vfc3BpX2JvYXJkX2luZm8pKTsKLQlpbXg1MV9hZGRfZWNzcGkoMCwgJm14NTFfYmFiYmFnZV9zcGlfcGRhdGEpOwotCWlteDUxX2FkZF9pbXgyX3dkdCgwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14NTFfYmFiYmFnZV90aW1lcl9pbml0KHZvaWQpCi17Ci0JbXg1MV9jbG9ja3NfaW5pdCgzMjc2OCwgMjQwMDAwMDAsIDIyNTc5MjAwLCAwKTsKLX0KLQotTUFDSElORV9TVEFSVChNWDUxX0JBQkJBR0UsICJGcmVlc2NhbGUgTVg1MSBCYWJiYWdlIEJvYXJkIikKLQkvKiBNYWludGFpbmVyOiBBbWl0IEt1Y2hlcmlhIDxhbWl0Lmt1Y2hlcmlhQGNhbm9uaWNhbC5jb20+ICovCi0JLmF0YWdfb2Zmc2V0ID0gMHgxMDAsCi0JLm1hcF9pbyA9IG14NTFfbWFwX2lvLAotCS5pbml0X2Vhcmx5ID0gaW14NTFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEgPSBteDUxX2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14NTFfaGFuZGxlX2lycSwKLQkuaW5pdF90aW1lCT0gbXg1MV9iYWJiYWdlX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZSA9IG14NTFfYmFiYmFnZV9pbml0LAotCS5pbml0X2xhdGUJPSBpbXg1MV9pbml0X2xhdGUsCi0JLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMKaW5kZXggYzkxODk0MC4uMGI1ZDFjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teHRfdGQ2MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXh0X3RkNjAuYwpAQCAtMjY3LDcgKzI2Nyw2IEBACiAJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAotCS5oYW5kbGVfaXJxID0gaW14MjdfaGFuZGxlX2lycSwKIAkuaW5pdF90aW1lCT0gbXh0X3RkNjBfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gbXh0X3RkNjBfYm9hcmRfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY2ExMDAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNhMTAwLmMKaW5kZXggYmYzYWM1MS4uMTIyMTIzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY2ExMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jCkBAIC0yNDUsOCArMjQ1LDcgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoSU1YX0dQSU9fTlIoMywgMjkpKSwgZGV0ZWN0X2lycSwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiaW14LW1tYy1kZXRlY3QiLCBkYXRhKTsKKwkJCSAgSVJRRl9UUklHR0VSX0ZBTExJTkcsICJpbXgtbW1jLWRldGVjdCIsIGRhdGEpOwogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUgogCQkJInBjYTEwMDogRmFpbGVkIHRvIHJlcXVlc3QgaXJxIGZvciBzZC9tbWMgZGV0ZWN0aW9uXG4iKTsKQEAgLTQyMSw3ICs0MjAsNiBAQAogCS5tYXBfaW8gPSBteDI3X21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDI3X2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgyN19pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDI3X2hhbmRsZV9pcnEsCiAJLmluaXRfbWFjaGluZSA9IHBjYTEwMF9pbml0LAogCS5pbml0X3RpbWUJPSBwY2ExMDBfdGltZXJfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzcuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM3LmMKaW5kZXggNjM5YTNkZi4uODFiOGFmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzNy5jCkBAIC03MDMsNyArNzAzLDYgQEAKIAkubWFwX2lvID0gbXgzMV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgzMV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUJPSBwY20wMzdfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gcGNtMDM3X2luaXQsCiAJLmluaXRfbGF0ZSA9IHBjbTAzN19pbml0X2xhdGUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzguYwppbmRleCA1OTJkZGJlLi42YzU2ZmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM4LmMKQEAgLTM1MSw3ICszNTEsNiBAQAogCS5tYXBfaW8gPSBteDI3X21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDI3X2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgyN19pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDI3X2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IHBjbTAzOF90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSBwY20wMzhfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wNDMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDQzLmMKaW5kZXggYWM1MDRiNi4uYzYyYjVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wNDMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTA0My5jCkBAIC00MDAsNyArNDAwLDYgQEAKIAkubWFwX2lvID0gbXgzNV9tYXBfaW8sCiAJLmluaXRfZWFybHkgPSBpbXgzNV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14MzVfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgzNV9oYW5kbGVfaXJxLAogCS5pbml0X3RpbWUgPSBwY20wNDNfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gcGNtMDQzX2luaXQsCiAJLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcW9uZy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1xb25nLmMKaW5kZXggMjJhZjI3ZS4uYTIxM2U3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1xb25nLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1xb25nLmMKQEAgLTI2Niw3ICsyNjYsNiBAQAogCS5tYXBfaW8gPSBteDMxX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzMV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDMxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IHFvbmdfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gcW9uZ19pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXNjYjkzMjguYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtc2NiOTMyOC5jCmluZGV4IGIwZmExMGQuLjFmNmJjM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtc2NiOTMyOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtc2NiOTMyOC5jCkBAIC0xMzcsNyArMTM3LDYgQEAKIAkubWFwX2lvID0gbXgxX21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDFfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDFfaW5pdF9pcnEsCi0JLmhhbmRsZV9pcnEgPSBpbXgxX2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZQk9IHNjYjkzMjhfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lID0gc2NiOTMyOF9pbml0LAogCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXZwcjIwMC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC12cHIyMDAuYwppbmRleCA4ODI1ZDEyLi44NzJiM2M2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXZwcjIwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtdnByMjAwLmMKQEAgLTMxMCw3ICszMTAsNiBAQAogCS5tYXBfaW8gPSBteDM1X21hcF9pbywKIAkuaW5pdF9lYXJseSA9IGlteDM1X2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXgzNV9pbml0X2lycSwKLQkuaGFuZGxlX2lycSA9IGlteDM1X2hhbmRsZV9pcnEsCiAJLmluaXRfdGltZSA9IHZwcjIwMF90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUgPSB2cHIyMDBfYm9hcmRfaW5pdCwKIAkucmVzdGFydAk9IG14Y19yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbXhjLmggYi9hcmNoL2FybS9tYWNoLWlteC9teGMuaAppbmRleCBiMDhhYjNhLi43NWQ2YTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9teGMuaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9teGMuaApAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBNWENfQ1BVX01YNTMJCTUzCiAjZGVmaW5lIE1YQ19DUFVfSU1YNlNMCQkweDYwCiAjZGVmaW5lIE1YQ19DUFVfSU1YNkRMCQkweDYxCisjZGVmaW5lIE1YQ19DUFVfSU1YNlNYCQkweDYyCiAjZGVmaW5lIE1YQ19DUFVfSU1YNlEJCTB4NjMKIAogI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl8xXzAJCTB4MTAKQEAgLTE2Myw2ICsxNjQsMTEgQEAKIAlyZXR1cm4gX19teGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9JTVg2REw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcHVfaXNfaW14NnN4KHZvaWQpCit7CisJcmV0dXJuIF9fbXhjX2NwdV90eXBlID09IE1YQ19DUFVfSU1YNlNYOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2lzX2lteDZxKHZvaWQpCiB7CiAJcmV0dXJuIF9fbXhjX2NwdV90eXBlID09IE1YQ19DUFVfSU1YNlE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMKaW5kZXggNjUyMjJlYS4uYmVkMDgxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3RpbWUuYwpAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIApAQCAtMzI4LDMgKzMzMSwxNSBAQAogCS8qIE1ha2UgaXJxcyBoYXBwZW4gKi8KIAlzZXR1cF9pcnEoaXJxLCAmbXhjX3RpbWVyX2lycSk7CiB9CisKK3ZvaWQgX19pbml0IG14Y190aW1lcl9pbml0X2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisKKwliYXNlID0gb2ZfaW9tYXAobnAsIDApOworCVdBUk5fT04oIWJhc2UpOworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKworCW14Y190aW1lcl9pbml0KGJhc2UsIGlycSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC90emljLmMgYi9hcmNoL2FybS9tYWNoLWlteC90emljLmMKaW5kZXggODE4MzE3OC4uNzgyOGFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvdHppYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3R6aWMuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJaXJxX3NldHVwX2dlbmVyaWNfY2hpcChnYywgSVJRX01TSygzMiksIDAsIElSUV9OT1JFUVVFU1QsIDApOwogfQogCi1hc21saW5rYWdlIHZvaWQgX19leGNlcHRpb25faXJxX2VudHJ5IHR6aWNfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fZXhjZXB0aW9uX2lycV9lbnRyeSB0emljX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTMyIHN0YXQ7CiAJaW50IGksIGlycW9mcywgaGFuZGxlZDsKQEAgLTE4OSw2ICsxODksOCBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyssIGlycV9iYXNlICs9IDMyKQogCQl0emljX2luaXRfZ2MoaSwgaXJxX2Jhc2UpOwogCisJc2V0X2hhbmRsZV9pcnEodHppY19oYW5kbGVfaXJxKTsKKwogI2lmZGVmIENPTkZJR19GSVEKIAkvKiBJbml0aWFsaXplIEZJUSAqLwogCWluaXRfRklRKEZJUV9TVEFSVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2JvYXJkLWR0LmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2JvYXJkLWR0LmMKaW5kZXggMjgwMWRhNC4uZmYxOGZmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9ib2FyZC1kdC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYm9hcmQtZHQuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiB7CiAJa2lya3dvb2RfZGlzYWJsZV9tYnVzX2Vycm9yX3Byb3BhZ2F0aW9uKCk7CiAKLQlCVUdfT04obXZlYnVfbWJ1c19kdF9pbml0KCkpOworCUJVR19PTihtdmVidV9tYnVzX2R0X2luaXQoZmFsc2UpKTsKIAogI2lmZGVmIENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMgogCWZlcm9jZW9uX29mX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2lycS5jCmluZGV4IDJhOTdhMmUuLjJjNDdhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pcnEuYwpAQCAtNyw2ICs3LDcgQEAKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLworI2luY2x1ZGUgPGFzbS9leGNlcHRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC0zMCwxMSArMzEsNDcgQEAKIAkwLAogfTsKIAorI2lmZGVmIENPTkZJR19NVUxUSV9JUlFfSEFORExFUgorLyoKKyAqIENvbXBpbGluZyB3aXRoIGJvdGggbm9uLURUIGFuZCBEVCBzdXBwb3J0IGVuYWJsZWQsIHdpbGwKKyAqIGJyZWFrIGFzbSBpcnEgaGFuZGxlciB1c2VkIGJ5IG5vbi1EVCBib2FyZHMuIFRoZXJlZm9yZSwKKyAqIHdlIHByb3ZpZGUgYSBDLXN0eWxlIGlycSBoYW5kbGVyIGV2ZW4gZm9yIG5vbi1EVCBib2FyZHMsCisgKiBpZiBNVUxUSV9JUlFfSEFORExFUiBpcyBzZXQuCisgKi8KKworc3RhdGljIHZvaWQgX19pb21lbSAqa2lya3dvb2RfaXJxX2Jhc2UgPSBJUlFfVklSVF9CQVNFOworCithc21saW5rYWdlIHZvaWQKK19fZXhjZXB0aW9uX2lycV9lbnRyeSBraXJrd29vZF9sZWdhY3lfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgc3RhdDsKKworCXN0YXQgPSByZWFkbF9yZWxheGVkKGtpcmt3b29kX2lycV9iYXNlICsgSVJRX0NBVVNFX0xPV19PRkYpOworCXN0YXQgJj0gcmVhZGxfcmVsYXhlZChraXJrd29vZF9pcnFfYmFzZSArIElSUV9NQVNLX0xPV19PRkYpOworCWlmIChzdGF0KSB7CisJCXVuc2lnbmVkIGludCBod2lycSA9IF9fZmxzKHN0YXQpOworCQloYW5kbGVfSVJRKGh3aXJxLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0ID0gcmVhZGxfcmVsYXhlZChraXJrd29vZF9pcnFfYmFzZSArIElSUV9DQVVTRV9ISUdIX09GRik7CisJc3RhdCAmPSByZWFkbF9yZWxheGVkKGtpcmt3b29kX2lycV9iYXNlICsgSVJRX01BU0tfSElHSF9PRkYpOworCWlmIChzdGF0KSB7CisJCXVuc2lnbmVkIGludCBod2lycSA9IDMyICsgX19mbHMoc3RhdCk7CisJCWhhbmRsZV9JUlEoaHdpcnEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorfQorI2VuZGlmCisKIHZvaWQgX19pbml0IGtpcmt3b29kX2luaXRfaXJxKHZvaWQpCiB7CiAJb3Jpb25faXJxX2luaXQoMCwgSVJRX1ZJUlRfQkFTRSArIElSUV9NQVNLX0xPV19PRkYpOwogCW9yaW9uX2lycV9pbml0KDMyLCBJUlFfVklSVF9CQVNFICsgSVJRX01BU0tfSElHSF9PRkYpOwogCisjaWZkZWYgQ09ORklHX01VTFRJX0lSUV9IQU5ETEVSCisJc2V0X2hhbmRsZV9pcnEoa2lya3dvb2RfbGVnYWN5X2hhbmRsZV9pcnEpOworI2VuZGlmCisKIAkvKgogCSAqIEluaXRpYWxpemUgZ3Bpb2xpYiBmb3IgR1BJT3MgMC00OS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9waHkzMjUwLmMgYi9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcGh5MzI1MC5jCmluZGV4IDM0OTMyZTAuLjc4NThkNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9waHkzMjUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3BoeTMyNTAuYwpAQCAtMjAyLDkgKzIwMiw2IEBACiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMF8zMSB8IE1NQ19WRERfMzFfMzIgfAogCQkJICBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKIAkuaW9zX2hhbmRsZXIJPSBtbWNfaGFuZGxlX2lvcywKLQkuZG1hX2ZpbHRlcgk9IE5VTEwsCi0JLyogTm8gRE1BIGZvciBub3cgc2luY2UgQU1CQSBQTDA4MCBkbWFlbmdpbmUgZHJpdmVyIG9ubHkgZG9lcyBzY2F0dGVyCi0JICogZ2F0aGVyLCBhbmQgdGhlIE1NQ0kgZHJpdmVyIGRvZXNuJ3QgZG8gaXQgdGhpcyB3YXkgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbHBjMzJ4eF9zbGNfcGxhdGZvcm1fZGF0YSBscGMzMnh4X3NsY19kYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXNtL0tjb25maWcKaW5kZXggYTdmOTU5ZS4uOWIyNjk3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnCkBAIC00Miw5ICs0Miw2IEBACiAKIGVuZGNob2ljZQogCi1jb25maWcgTVNNX0hBU19ERUJVR19VQVJUX0hTCi0JYm9vbAotCiBjb25maWcgTVNNX1NPQ19SRVZfQQogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtN3gzMC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtN3gzMC5jCmluZGV4IDQ2ZGU3ODkuLjBjNGMyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTd4MzAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDMwLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgbXNtX290Z19wZGF0YSA9IHsKIAkucGh5X2luaXRfc2VxCQk9IGhzdXNiX3BoeV9pbml0X3NlcSwKLQkubW9kZSAgICAgICAgICAgICAgICAgICA9IFVTQl9QRVJJUEhFUkFMLAorCS5tb2RlICAgICAgICAgICAgICAgICAgID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTCwKIAkub3RnX2NvbnRyb2wJCT0gT1RHX1BIWV9DT05UUk9MLAogCS5saW5rX2Nsa19yZXNldAkJPSBoc3VzYl9saW5rX2Nsa19yZXNldCwKIAkucGh5X2Nsa19yZXNldAkJPSBoc3VzYl9waHlfY2xrX3Jlc2V0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCmluZGV4IDkxNjllYzMuLjRjNzQ4NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSBtc21fb3RnX3BkYXRhID0gewogCS5waHlfaW5pdF9zZXEJCT0gaHN1c2JfcGh5X2luaXRfc2VxLAotCS5tb2RlICAgICAgICAgICAgICAgICAgID0gVVNCX1BFUklQSEVSQUwsCisJLm1vZGUgICAgICAgICAgICAgICAgICAgPSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMLAogCS5vdGdfY29udHJvbAkJPSBPVEdfUEhZX0NPTlRST0wsCiAJLmxpbmtfY2xrX3Jlc2V0CQk9IGhzdXNiX2xpbmtfY2xrX3Jlc2V0LAogCS5waHlfY2xrX3Jlc2V0CQk9IGhzdXNiX3BoeV9jbGtfcmVzZXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC1ncGlvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC1ncGlvLmMKaW5kZXggODdlMWQwMS4uMmMyNTA1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQtZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LWdwaW8uYwpAQCAtODksNyArODksNyBAQAogCQkJLmJhc2UJCSAgPSBiYXNlX2dwaW8sCQkJXAogCQkJLm5ncGlvCQkgID0gOCwJCQkJXAogCQl9LAkJCQkJCQlcCi0JCS5yZWcgPSAodm9pZCAqKSByZWdfbnVtICsgVFJPVVRfQ1BMRF9CQVNFLAkJXAorCQkucmVnID0gcmVnX251bSArIFRST1VUX0NQTERfQkFTRSwJCQlcCiAJCS5zaGFkb3cgPSBzaGFkb3dfdmFsLAkJCQkJXAogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LmMKaW5kZXggMDE1ZDU0NC4uNWVkZmJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5jCkBAIC03OCw3ICs3OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdHJvdXRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewotCQkudmlydHVhbCA9IFRST1VUX0NQTERfQkFTRSwKKwkJLnZpcnR1YWwgPSAodW5zaWduZWQgbG9uZylUUk9VVF9DUExEX0JBU0UsCiAJCS5wZm4gICAgID0gX19waHlzX3RvX3BmbihUUk9VVF9DUExEX1NUQVJUKSwKIAkJLmxlbmd0aCAgPSBUUk9VVF9DUExEX1NJWkUsCiAJCS50eXBlICAgID0gTVRfREVWSUNFX05PTlNIQVJFRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LmgKaW5kZXggYjIzNzllZC4uYWRiNzU3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5oCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIFRST1VUXzRfVFBfTFNfRU4gICAgMTkKICNkZWZpbmUgVFJPVVRfNV9UUF9MU19FTiAgICAxCiAKLSNkZWZpbmUgVFJPVVRfQ1BMRF9CQVNFICAgMHhFODEwMDAwMAorI2RlZmluZSBUUk9VVF9DUExEX0JBU0UgICBJT01FTSgweEU4MTAwMDAwKQogI2RlZmluZSBUUk9VVF9DUExEX1NUQVJUICAweDk4MDAwMDAwCiAjZGVmaW5lIFRST1VUX0NQTERfU0laRSAgIFNaXzRLCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvS2NvbmZpZwppbmRleCAzZjczZWVjLi42MDkwYjllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9LY29uZmlnCkBAIC0zLDE1ICszLDEzIEBACiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBDTEtTUkNfTU1JTwogCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCi0Jc2VsZWN0IElSUV9ET01BSU4KIAlzZWxlY3QgUElOQ1RSTAogCXNlbGVjdCBQTEFUX09SSU9OCisJc2VsZWN0IFNPQ19CVVMKIAlzZWxlY3QgTVZFQlVfTUJVUwogCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgotCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCXNlbGVjdCBQQ0lfUVVJUktTIGlmIFBDSQotCXNlbGVjdCBPRl9BRERSRVNTX1BDSQogCiBpZiBBUkNIX01WRUJVCiAKQEAgLTM4LDcgKzM2LDkgQEAKIAlzZWxlY3QgQVJNX0VSUkFUQV83NTM5NzAKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBBUk1BREFfMzc1X0NMSwotCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgSEFWRV9BUk1fU0NVCisJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKKwlzZWxlY3QgSEFWRV9TTVAKIAlzZWxlY3QgTUFDSF9NVkVCVV9WNwogCXNlbGVjdCBQSU5DVFJMX0FSTUFEQV8zNzUKIAloZWxwCkBAIC01MSw3ICs1MSw5IEBACiAJc2VsZWN0IEFSTV9FUlJBVEFfNzUzOTcwCiAJc2VsZWN0IEFSTV9HSUMKIAlzZWxlY3QgQVJNQURBXzM4WF9DTEsKLQlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IEhBVkVfQVJNX1NDVQorCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgU01QCisJc2VsZWN0IEhBVkVfU01QCiAJc2VsZWN0IE1BQ0hfTVZFQlVfVjcKIAlzZWxlY3QgUElOQ1RSTF9BUk1BREFfMzhYCiAJaGVscApAQCAtODYsMjQgKzg4LDE1IEBACiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IENQVV9GRVJPQ0VPTgogCXNlbGVjdCBLSVJLV09PRF9DTEsKLQlzZWxlY3QgT0ZfSVJRCiAJc2VsZWN0IE9SSU9OX0lSUUNISVAKIAlzZWxlY3QgT1JJT05fVElNRVIKIAlzZWxlY3QgUENJCiAJc2VsZWN0IFBDSV9RVUlSS1MKIAlzZWxlY3QgUElOQ1RSTF9LSVJLV09PRAotCXNlbGVjdCBVU0VfT0YKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBib2FyZHMgYmFzZWQKIAkgIG9uIHRoZSBNYXJ2ZWxsIEtpcmt3b29kIGRldmljZSB0cmVlLgogCi1jb25maWcgTUFDSF9UNTMyNQotCWJvb2wgIkhQIFQ1MzI1IHRoaW4gY2xpZW50IgotCWRlcGVuZHMgb24gTUFDSF9LSVJLV09PRAotCWhlbHAKLQkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgSFAgVDUzMjUgVGhpbiBjbGllbnQKLQogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXZlYnUvTWFrZWZpbGUKaW5kZXggYTYzZTQzYi4uMmVjYjgyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L01ha2VmaWxlCkBAIC0yLDEyICsyLDE1IEBACiAJLUkkKHNyY3RyZWUpL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZQogCiBBRkxBR1NfY29oZXJlbmN5X2xsLm8JCTo9IC1XYSwtbWFyY2g9YXJtdjctYQorQ0ZMQUdTX3Btc3UubwkJCTo9IC1tYXJjaD1hcm12Ny1hCiAKIG9iai15CQkJCSArPSBzeXN0ZW0tY29udHJvbGxlci5vIG12ZWJ1LXNvYy1pZC5vCi1vYmotJChDT05GSUdfTUFDSF9NVkVCVV9WNykgICAgICArPSBib2FyZC12Ny5vCisKK2lmZXEgKCQoQ09ORklHX01BQ0hfTVZFQlVfVjcpLHkpCitvYmoteQkJCQkgKz0gY3B1LXJlc2V0Lm8gYm9hcmQtdjcubyBjb2hlcmVuY3kubyBjb2hlcmVuY3lfbGwubyBwbXN1Lm8KK29iai0kKENPTkZJR19TTVApCQkgKz0gcGxhdHNtcC5vIGhlYWRzbXAubyBwbGF0c21wLWE5Lm8gaGVhZHNtcC1hOS5vCitvYmotJChDT05GSUdfSE9UUExVR19DUFUpCSArPSBob3RwbHVnLm8KK2VuZGlmCisKIG9iai0kKENPTkZJR19NQUNIX0RPVkUpCQkgKz0gZG92ZS5vCi1vYmotJChDT05GSUdfQVJDSF9NVkVCVSkJICs9IGNvaGVyZW5jeS5vIGNvaGVyZW5jeV9sbC5vIHBtc3Uubwotb2JqLSQoQ09ORklHX1NNUCkgICAgICAgICAgICAgICAgKz0gcGxhdHNtcC5vIGhlYWRzbXAubwotb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKSAgICAgICAgKz0gaG90cGx1Zy5vCiBvYmotJChDT05GSUdfTUFDSF9LSVJLV09PRCkJICs9IGtpcmt3b29kLm8ga2lya3dvb2QtcG0ubwotb2JqLSQoQ09ORklHX01BQ0hfVDUzMjUpCSArPSBib2FyZC10NTMyNS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2FybWFkYS0zNzAteHAuaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCmluZGV4IDIzN2M4NmIuLmMzNDY1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oCkBAIC0yMCw4ICsyMCw2IEBACiAKICNkZWZpbmUgQVJNQURBX1hQX01BWF9DUFVTIDQKIAotdm9pZCBhcm1hZGFfbXBpY19zZW5kX2Rvb3JiZWxsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgaXJxKTsKLXZvaWQgYXJtYWRhX3hwX21waWNfc21wX2NwdV9pbml0KHZvaWQpOwogdm9pZCBhcm1hZGFfeHBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CiBleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIGFybWFkYV94cF9zbXBfb3BzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXQ1MzI1LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXQ1MzI1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YWNlNmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC10NTMyNS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIEhQIFQ1MzI1IEJvYXJkIFNldHVwCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0Ci0gKgotICogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8c291bmQvYWxjNTYyMy5oPgotI2luY2x1ZGUgImJvYXJkLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhwX3Q1MzI1X2F1ZGlvX2RldmljZSA9IHsKLQkubmFtZQkJPSAidDUzMjUtYXVkaW8iLAotCS5pZAkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWxjNTYyM19wbGF0Zm9ybV9kYXRhIGFsYzU2MjFfZGF0YSA9IHsKLQkuYWRkX2N0cmwgPSAweDM3MDAsCi0JLmphY2tfZGV0X2N0cmwgPSAweDQ4MTAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJhbGM1NjIxIiwgMHgxYSksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmFsYzU2MjFfZGF0YSwKLQl9LAotfTsKLQotdm9pZCBfX2luaXQgdDUzMjVfaW5pdCh2b2lkKQotewotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGkyY19ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKGkyY19ib2FyZF9pbmZvKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZocF90NTMyNV9hdWRpb19kZXZpY2UpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jCmluZGV4IDMzM2ZjYTguLjAxY2ZjZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMKQEAgLTI3LDEyICsyNywzMCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KICNpbmNsdWRlICJhcm1hZGEtMzcwLXhwLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY29oZXJlbmN5LmgiCiAjaW5jbHVkZSAibXZlYnUtc29jLWlkLmgiCiAKIC8qCisgKiBFbmFibGVzIHRoZSBTQ1Ugd2hlbiBhdmFpbGFibGUuIE9idmlvdXNseSwgdGhpcyBpcyBvbmx5IHVzZWZ1bCBvbgorICogQ29ydGV4LUEgYmFzZWQgU09Dcywgbm90IG9uIFBKNEIgYmFzZWQgb25lcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X3NjdV9lbmFibGUodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKnNjdV9iYXNlOworCisJc3RydWN0IGRldmljZV9ub2RlICpucCA9CisJCW9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhcm0sY29ydGV4LWE5LXNjdSIpOworCWlmIChucCkgeworCQlzY3VfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwkJc2N1X2VuYWJsZShzY3VfYmFzZSk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9Cit9CisKKy8qCiAgKiBFYXJseSB2ZXJzaW9ucyBvZiBBcm1hZGEgMzc1IFNvQyBoYXZlIGEgYnVnIHdoZXJlIHRoZSBCb290Uk9NCiAgKiBsZWF2ZXMgYW4gZXh0ZXJuYWwgZGF0YSBhYm9ydCBwZW5kaW5nLiBUaGUga2VybmVsIGlzIGhpdCBieSB0aGlzCiAgKiBkYXRhIGFib3J0IGFzIHNvb24gYXMgaXQgZW50ZXJzIHVzZXJzcGFjZSwgYmVjYXVzZSBpdCB1bm1hc2tzIHRoZQpAQCAtNTcsMTEgKzc1LDEwIEBACiB7CiAJb2ZfY2xrX2luaXQoTlVMTCk7CiAJY2xvY2tzb3VyY2Vfb2ZfaW5pdCgpOworCW12ZWJ1X3NjdV9lbmFibGUoKTsKIAljb2hlcmVuY3lfaW5pdCgpOwotCUJVR19PTihtdmVidV9tYnVzX2R0X2luaXQoKSk7Ci0jaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKKwlCVUdfT04obXZlYnVfbWJ1c19kdF9pbml0KGNvaGVyZW5jeV9hdmFpbGFibGUoKSkpOwogCWwyeDBfb2ZfaW5pdCgwLCB+MFVMKTsKLSNlbmRpZgogCiAJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxhcm1hZGEzNzUiKSkKIAkJaG9va19mYXVsdF9jb2RlKDE2ICsgNiwgYXJtYWRhXzM3NV9leHRlcm5hbF9hYm9ydF93YSwgU0lHQlVTLCAwLApAQCAtNzgsNyArOTUsNyBAQAogCSAqIG1lY2hhbmlzbS4gV2UgY2FuIGV4aXQgb25seSBpZiB3ZSBhcmUgc3VyZSB0aGF0IHdlIGNhbgogCSAqIGdldCB0aGUgU29DIHJldmlzaW9uIGFuZCBpdCBpcyBtb3JlIHJlY2VudCB0aGFuIEEwLgogCSAqLwotCWlmIChtdmVidV9nZXRfc29jX2lkKCZyZXYsICZkZXYpID09IDAgJiYgZGV2ID4gTVY3OFhYMF9BMF9SRVYpCisJaWYgKG12ZWJ1X2dldF9zb2NfaWQoJmRldiwgJnJldikgPT0gMCAmJiByZXYgPiBNVjc4WFgwX0EwX1JFVikKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAibWFydmVsbCxtdjc4MjMwLWkyYyIpIHsKQEAgLTk2LDEwICsxMTMsNjYgQEAKIAlyZXR1cm47CiB9CiAKKyNkZWZpbmUgQTM3NV9aMV9USEVSTUFMX0ZJWFVQX09GRlNFVCAweGMKKworc3RhdGljIHZvaWQgX19pbml0IHRoZXJtYWxfcXVpcmsodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXUzMiBkZXYsIHJldjsKKworCWlmIChtdmVidV9nZXRfc29jX2lkKCZkZXYsICZyZXYpID09IDAgJiYgcmV2ID4gQVJNQURBXzM3NV9aMV9SRVYpCisJCXJldHVybjsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgIm1hcnZlbGwsYXJtYWRhMzc1LXRoZXJtYWwiKSB7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwkJX19iZTMyIG5ld3ZhbCwgKm5ld3Byb3AsICpvbGRwcm9wOworCQlpbnQgbGVuOworCisJCS8qCisJCSAqIFRoZSByZWdpc3RlciBvZmZzZXQgaXMgYXQgYSB3cm9uZyBsb2NhdGlvbi4gVGhpcyBxdWlyaworCQkgKiBjcmVhdGVzIGEgbmV3IHJlZyBwcm9wZXJ0eSBhcyBhIGNsb25lIG9mIHRoZSBwcmV2aW91cworCQkgKiBvbmUgYW5kIGNvcnJlY3RzIHRoZSBvZmZzZXQuCisJCSAqLworCQlvbGRwcm9wID0gKF9fYmUzMiAqKW9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsICZsZW4pOworCQlpZiAoIW9sZHByb3ApCisJCQljb250aW51ZTsKKworCQkvKiBDcmVhdGUgYSBkdXBsaWNhdGUgb2YgdGhlICdyZWcnIHByb3BlcnR5ICovCisJCXByb3AgPSBremFsbG9jKHNpemVvZigqcHJvcCksIEdGUF9LRVJORUwpOworCQlwcm9wLT5sZW5ndGggPSBsZW47CisJCXByb3AtPm5hbWUgPSBrc3RyZHVwKCJyZWciLCBHRlBfS0VSTkVMKTsKKwkJcHJvcC0+dmFsdWUgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCW1lbWNweShwcm9wLT52YWx1ZSwgb2xkcHJvcCwgbGVuKTsKKworCQkvKiBGaXh1cCB0aGUgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZSBzZWNvbmQgZW50cnkgKi8KKwkJb2xkcHJvcCArPSAyOworCQluZXdwcm9wID0gKF9fYmUzMiAqKXByb3AtPnZhbHVlICsgMjsKKwkJbmV3dmFsID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoKm9sZHByb3ApIC0KKwkJCQkgICAgIEEzNzVfWjFfVEhFUk1BTF9GSVhVUF9PRkZTRVQpOworCQkqbmV3cHJvcCA9IG5ld3ZhbDsKKwkJb2ZfdXBkYXRlX3Byb3BlcnR5KG5wLCBwcm9wKTsKKworCQkvKgorCQkgKiBUaGUgdGhlcm1hbCBjb250cm9sbGVyIG5lZWRzIHNvbWUgcXVpcmsgdG9vLCBzbyBsZXQncyBjaGFuZ2UKKwkJICogdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHJlZmxlY3QgdGhpcy4KKwkJICovCisJCXByb3AgPSBremFsbG9jKHNpemVvZigqcHJvcCksIEdGUF9LRVJORUwpOworCQlwcm9wLT5uYW1lID0ga3N0cmR1cCgiY29tcGF0aWJsZSIsIEdGUF9LRVJORUwpOworCQlwcm9wLT5sZW5ndGggPSBzaXplb2YoIm1hcnZlbGwsYXJtYWRhMzc1LXoxLXRoZXJtYWwiKTsKKwkJcHJvcC0+dmFsdWUgPSBrc3RyZHVwKCJtYXJ2ZWxsLGFybWFkYTM3NS16MS10aGVybWFsIiwKKwkJCQkJCUdGUF9LRVJORUwpOworCQlvZl91cGRhdGVfcHJvcGVydHkobnAsIHByb3ApOworCX0KKwlyZXR1cm47Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtdmVidV9kdF9pbml0KHZvaWQpCiB7CiAJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicGxhdGhvbWUsb3BlbmJsb2Nrcy1heDMtNCIpKQogCQlpMmNfcXVpcmsoKTsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLGEzNzUtZGIiKSkKKwkJdGhlcm1hbF9xdWlyaygpOworCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCkBAIC0xMjMsNiArMTk2LDcgQEAKIAogRFRfTUFDSElORV9TVEFSVChBUk1BREFfMzc1X0RULCAiTWFydmVsbCBBcm1hZGEgMzc1IChEZXZpY2UgVHJlZSkiKQogCS5pbml0X3RpbWUJPSBtdmVidV90aW1lcl9hbmRfY2xrX2luaXQsCisJLmluaXRfbWFjaGluZQk9IG12ZWJ1X2R0X2luaXQsCiAJLnJlc3RhcnQJPSBtdmVidV9yZXN0YXJ0LAogCS5kdF9jb21wYXQJPSBhcm1hZGFfMzc1X2R0X2NvbXBhdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLmggYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLmgKaW5kZXggZGU3ZjBhMS4uOWM3YmI0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQuaApAQCAtMTMsMTAgKzEzLDQgQEAKICNpZm5kZWYgX19BUkNIX01WRUJVX0JPQVJEX0gKICNkZWZpbmUgX19BUkNIX01WRUJVX0JPQVJEX0gKIAotI2lmZGVmIENPTkZJR19NQUNIX1Q1MzI1Ci12b2lkIHQ1MzI1X2luaXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHQ1MzI1X2luaXQodm9pZCkge307Ci0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYwppbmRleCA0ZTlkNTgxLi40NzcyMDJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKQEAgLTE3LDYgKzE3LDggQEAKICAqIHN1cHBsaWVzIGJhc2ljIHJvdXRpbmVzIGZvciBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgaGFyZHdhcmUgY29oZXJlbmN5CiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAibXZlYnUtY29oZXJlbmN5OiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KQEAgLTI0LDEzICsyNiwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgImFybWFkYS0zNzAteHAuaCIKICNpbmNsdWRlICJjb2hlcmVuY3kuaCIKKyNpbmNsdWRlICJtdmVidS1zb2MtaWQuaCIKIAogdW5zaWduZWQgbG9uZyBjb2hlcmVuY3lfcGh5c19iYXNlOwotc3RhdGljIHZvaWQgX19pb21lbSAqY29oZXJlbmN5X2Jhc2U7Cit2b2lkIF9faW9tZW0gKmNvaGVyZW5jeV9iYXNlOwogc3RhdGljIHZvaWQgX19pb21lbSAqY29oZXJlbmN5X2NwdV9iYXNlOwogCiAvKiBDb2hlcmVuY3kgZmFicmljIHJlZ2lzdGVycyAqLwpAQCAtMzgsMjcgKzQ2LDE5MCBAQAogCiAjZGVmaW5lIElPX1NZTkNfQkFSUklFUl9DVExfT0ZGU0VUCQkgICAweDAKIAorZW51bSB7CisJQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX05PTkUsCisJQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzBfWFAsCisJQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzUsCisJQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zODAsCit9OworCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9jb2hlcmVuY3lfdGFibGVbXSA9IHsKLQl7LmNvbXBhdGlibGUgPSAibWFydmVsbCxjb2hlcmVuY3ktZmFicmljIn0sCisJey5jb21wYXRpYmxlID0gIm1hcnZlbGwsY29oZXJlbmN5LWZhYnJpYyIsCisJIC5kYXRhID0gKHZvaWQgKikgQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzBfWFAgfSwKKwl7LmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LWNvaGVyZW5jeS1mYWJyaWMiLAorCSAuZGF0YSA9ICh2b2lkICopIENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzc1IH0sCisJey5jb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM4MC1jb2hlcmVuY3ktZmFicmljIiwKKwkgLmRhdGEgPSAodm9pZCAqKSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfQVJNQURBXzM4MCB9LAogCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIH07CiAKLS8qIEZ1bmN0aW9uIGRlZmluZWQgaW4gY29oZXJlbmN5X2xsLlMgKi8KLWludCBsbF9zZXRfY3B1X2NvaGVyZW50KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyLCB1bnNpZ25lZCBpbnQgaHdfY3B1X2lkKTsKKy8qIEZ1bmN0aW9ucyBkZWZpbmVkIGluIGNvaGVyZW5jeV9sbC5TICovCitpbnQgbGxfZW5hYmxlX2NvaGVyZW5jeSh2b2lkKTsKK3ZvaWQgbGxfYWRkX2NwdV90b19zbXBfZ3JvdXAodm9pZCk7CiAKLWludCBzZXRfY3B1X2NvaGVyZW50KHVuc2lnbmVkIGludCBod19jcHVfaWQsIGludCBzbXBfZ3JvdXBfaWQpCitpbnQgc2V0X2NwdV9jb2hlcmVudCh2b2lkKQogewogCWlmICghY29oZXJlbmN5X2Jhc2UpIHsKLQkJcHJfd2FybigiQ2FuJ3QgbWFrZSBDUFUgJWQgY2FjaGUgY29oZXJlbnQuXG4iLCBod19jcHVfaWQpOworCQlwcl93YXJuKCJDYW4ndCBtYWtlIGN1cnJlbnQgQ1BVIGNhY2hlIGNvaGVyZW50LlxuIik7CiAJCXByX3dhcm4oIkNvaGVyZW5jeSBmYWJyaWMgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JcmV0dXJuIGxsX3NldF9jcHVfY29oZXJlbnQoY29oZXJlbmN5X2Jhc2UsIGh3X2NwdV9pZCk7CisJbGxfYWRkX2NwdV90b19zbXBfZ3JvdXAoKTsKKwlyZXR1cm4gbGxfZW5hYmxlX2NvaGVyZW5jeSgpOworfQorCisvKgorICogVGhlIGJlbG93IGNvZGUgaW1wbGVtZW50cyB0aGUgSS9PIGNvaGVyZW5jeSB3b3JrYXJvdW5kIG9uIEFybWFkYQorICogMzc1LiBUaGlzIHdvcmthcm91bmQgY29uc2lzdHMgaW4gdXNpbmcgdGhlIHR3byBjaGFubmVscyBvZiB0aGUKKyAqIGZpcnN0IFhPUiBlbmdpbmUgdG8gdHJpZ2dlciBhIFhPUiB0cmFuc2FjdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUKKyAqIEkvTyBjb2hlcmVuY3kgYmFycmllci4KKyAqLworCitzdGF0aWMgdm9pZCBfX2lvbWVtICp4b3JfYmFzZSwgKnhvcl9oaWdoX2Jhc2U7CitzdGF0aWMgZG1hX2FkZHJfdCBjb2hlcmVuY3lfd2FfYnVmX3BoeXNbQ09ORklHX05SX0NQVVNdOworc3RhdGljIHZvaWQgKmNvaGVyZW5jeV93YV9idWZbQ09ORklHX05SX0NQVVNdOworc3RhdGljIGJvb2wgY29oZXJlbmN5X3dhX2VuYWJsZWQ7CisKKyNkZWZpbmUgWE9SX0NPTkZJRyhjaGFuKSAgICAgICAgICAgICgweDEwICsgKGNoYW4gKiA0KSkKKyNkZWZpbmUgWE9SX0FDVElWQVRJT04oY2hhbikgICAgICAgICgweDIwICsgKGNoYW4gKiA0KSkKKyNkZWZpbmUgV0lORE9XX0JBUl9FTkFCTEUoY2hhbikgICAgICgweDI0MCArICgoY2hhbikgPDwgMikpCisjZGVmaW5lIFdJTkRPV19CQVNFKHcpICAgICAgICAgICAgICAoMHgyNTAgKyAoKHcpIDw8IDIpKQorI2RlZmluZSBXSU5ET1dfU0laRSh3KSAgICAgICAgICAgICAgKDB4MjcwICsgKCh3KSA8PCAyKSkKKyNkZWZpbmUgV0lORE9XX1JFTUFQX0hJR0godykgICAgICAgICgweDI5MCArICgodykgPDwgMikpCisjZGVmaW5lIFdJTkRPV19PVkVSUklERV9DVFJMKGNoYW4pICAoMHgyQTAgKyAoKGNoYW4pIDw8IDIpKQorI2RlZmluZSBYT1JfREVTVF9QT0lOVEVSKGNoYW4pICAgICAgKDB4MkIwICsgKGNoYW4gKiA0KSkKKyNkZWZpbmUgWE9SX0JMT0NLX1NJWkUoY2hhbikgICAgICAgICgweDJDMCArIChjaGFuICogNCkpCisjZGVmaW5lIFhPUl9JTklUX1ZBTFVFX0xPVyAgICAgICAgICAgMHgyRTAKKyNkZWZpbmUgWE9SX0lOSVRfVkFMVUVfSElHSCAgICAgICAgICAweDJFNAorCitzdGF0aWMgaW5saW5lIHZvaWQgbXZlYnVfaHdjY19hcm1hZGEzNzVfc3luY19pb19iYXJyaWVyX3dhKHZvaWQpCit7CisJaW50IGlkeCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qIFdyaXRlICcxJyB0byB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYnVmZmVyICovCisJd3JpdGVsKDB4MSwgY29oZXJlbmN5X3dhX2J1ZltpZHhdKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIGVuZ2luZSBpcyBpZGxlICovCisJd2hpbGUgKChyZWFkbCh4b3JfYmFzZSArIFhPUl9BQ1RJVkFUSU9OKGlkeCkpID4+IDQpICYgMHgzKQorCQk7CisKKwlkbWIoKTsKKworCS8qIFRyaWdnZXIgY2hhbm5lbCAqLworCXdyaXRlbCgweDEsIHhvcl9iYXNlICsgWE9SX0FDVElWQVRJT04oaWR4KSk7CisKKwkvKiBQb2xsIHRoZSBkYXRhIHVudGlsIGl0IGlzIGNsZWFyZWQgYnkgdGhlIFhPUiB0cmFuc2FjdGlvbiAqLworCXdoaWxlIChyZWFkbChjb2hlcmVuY3lfd2FfYnVmW2lkeF0pKQorCQk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1X2NvaGVyZW5jeV9pbml0X3dhKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnhvcl9ub2RlOworCXN0cnVjdCBwcm9wZXJ0eSAqeG9yX3N0YXR1czsKKwlzdHJ1Y3QgY2xrICp4b3JfY2xrOworCXUzMiB3aW5fZW5hYmxlID0gMDsKKwlpbnQgaTsKKworCXByX3dhcm4oImVuYWJsaW5nIGNvaGVyZW5jeSB3b3JrYXJvdW5kIGZvciBBcm1hZGEgMzc1IFoxLCBvbmUgWE9SIGVuZ2luZSBkaXNhYmxlZFxuIik7CisKKwkvKgorCSAqIFNpbmNlIHRoZSB3b3JrYXJvdW5kIHVzZXMgb25lIFhPUiBlbmdpbmUsIHdlIGdyYWIgYQorCSAqIHJlZmVyZW5jZSB0byBpdHMgRGV2aWNlIFRyZWUgbm9kZSBmaXJzdC4KKwkgKi8KKwl4b3Jfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG9yaW9uLXhvciIpOworCUJVR19PTigheG9yX25vZGUpOworCisJLyoKKwkgKiBUaGVuIHdlIG1hcmsgaXQgYXMgZGlzYWJsZWQgc28gdGhhdCB0aGUgcmVhbCBYT1IgZHJpdmVyCisJICogd2lsbCBub3QgdXNlIGl0LgorCSAqLworCXhvcl9zdGF0dXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKKwlCVUdfT04oIXhvcl9zdGF0dXMpOworCisJeG9yX3N0YXR1cy0+dmFsdWUgPSBrc3RyZHVwKCJkaXNhYmxlZCIsIEdGUF9LRVJORUwpOworCUJVR19PTigheG9yX3N0YXR1cy0+dmFsdWUpOworCisJeG9yX3N0YXR1cy0+bGVuZ3RoID0gODsKKwl4b3Jfc3RhdHVzLT5uYW1lID0ga3N0cmR1cCgic3RhdHVzIiwgR0ZQX0tFUk5FTCk7CisJQlVHX09OKCF4b3Jfc3RhdHVzLT5uYW1lKTsKKworCW9mX3VwZGF0ZV9wcm9wZXJ0eSh4b3Jfbm9kZSwgeG9yX3N0YXR1cyk7CisKKwkvKgorCSAqIEFuZCB3ZSByZW1hcCB0aGUgcmVnaXN0ZXJzLCBnZXQgdGhlIGNsb2NrLCBhbmQgZG8gdGhlCisJICogaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBYT1IgZW5naW5lLgorCSAqLworCXhvcl9iYXNlID0gb2ZfaW9tYXAoeG9yX25vZGUsIDApOworCXhvcl9oaWdoX2Jhc2UgPSBvZl9pb21hcCh4b3Jfbm9kZSwgMSk7CisKKwl4b3JfY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKHhvcl9ub2RlLCBOVUxMKTsKKwlCVUdfT04oIXhvcl9jbGspOworCisJY2xrX3ByZXBhcmVfZW5hYmxlKHhvcl9jbGspOworCisJZHJhbSA9IG12X21idXNfZHJhbV9pbmZvKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXdyaXRlbCgwLCB4b3JfYmFzZSArIFdJTkRPV19CQVNFKGkpKTsKKwkJd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX1NJWkUoaSkpOworCQlpZiAoaSA8IDQpCisJCQl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfUkVNQVBfSElHSChpKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRyYW0tPm51bV9jczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fd2luZG93ICpjcyA9IGRyYW0tPmNzICsgaTsKKwkJd3JpdGVsKChjcy0+YmFzZSAmIDB4ZmZmZjAwMDApIHwKKwkJICAgICAgIChjcy0+bWJ1c19hdHRyIDw8IDgpIHwKKwkJICAgICAgIGRyYW0tPm1idXNfZHJhbV90YXJnZXRfaWQsIHhvcl9iYXNlICsgV0lORE9XX0JBU0UoaSkpOworCQl3cml0ZWwoKGNzLT5zaXplIC0gMSkgJiAweGZmZmYwMDAwLCB4b3JfYmFzZSArIFdJTkRPV19TSVpFKGkpKTsKKworCQl3aW5fZW5hYmxlIHw9ICgxIDw8IGkpOworCQl3aW5fZW5hYmxlIHw9IDMgPDwgKDE2ICsgKDIgKiBpKSk7CisJfQorCisJd3JpdGVsKHdpbl9lbmFibGUsIHhvcl9iYXNlICsgV0lORE9XX0JBUl9FTkFCTEUoMCkpOworCXdyaXRlbCh3aW5fZW5hYmxlLCB4b3JfYmFzZSArIFdJTkRPV19CQVJfRU5BQkxFKDEpKTsKKwl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfT1ZFUlJJREVfQ1RSTCgwKSk7CisJd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX09WRVJSSURFX0NUUkwoMSkpOworCisJZm9yIChpID0gMDsgaSA8IENPTkZJR19OUl9DUFVTOyBpKyspIHsKKwkJY29oZXJlbmN5X3dhX2J1ZltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJQlVHX09OKCFjb2hlcmVuY3lfd2FfYnVmW2ldKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCB1c2UgdGhlIERNQSBtYXBwaW5nIEFQSSwgc2luY2Ugd2UgZG9uJ3QKKwkJICogaGF2ZSBhIHZhbGlkICdzdHJ1Y3QgZGV2aWNlJyBwb2ludGVyCisJCSAqLworCQljb2hlcmVuY3lfd2FfYnVmX3BoeXNbaV0gPQorCQkJdmlydF90b19waHlzKGNvaGVyZW5jeV93YV9idWZbaV0pOworCQlCVUdfT04oIWNvaGVyZW5jeV93YV9idWZfcGh5c1tpXSk7CisKKwkJLyoKKwkJICogQ29uZmlndXJlIHRoZSBYT1IgZW5naW5lIGZvciBtZW1zZXQgb3BlcmF0aW9uLCB3aXRoCisJCSAqIGEgMTI4IGJ5dGVzIGJsb2NrIHNpemUKKwkJICovCisJCXdyaXRlbCgweDQ0NCwgeG9yX2Jhc2UgKyBYT1JfQ09ORklHKGkpKTsKKwkJd3JpdGVsKDEyOCwgeG9yX2Jhc2UgKyBYT1JfQkxPQ0tfU0laRShpKSk7CisJCXdyaXRlbChjb2hlcmVuY3lfd2FfYnVmX3BoeXNbaV0sCisJCSAgICAgICB4b3JfYmFzZSArIFhPUl9ERVNUX1BPSU5URVIoaSkpOworCX0KKworCXdyaXRlbCgweDAsIHhvcl9iYXNlICsgWE9SX0lOSVRfVkFMVUVfTE9XKTsKKwl3cml0ZWwoMHgwLCB4b3JfYmFzZSArIFhPUl9JTklUX1ZBTFVFX0hJR0gpOworCisJY29oZXJlbmN5X3dhX2VuYWJsZWQgPSB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXZlYnVfaHdjY19zeW5jX2lvX2JhcnJpZXIodm9pZCkKIHsKKwlpZiAoY29oZXJlbmN5X3dhX2VuYWJsZWQpIHsKKwkJbXZlYnVfaHdjY19hcm1hZGEzNzVfc3luY19pb19iYXJyaWVyX3dhKCk7CisJCXJldHVybjsKKwl9CisKIAl3cml0ZWwoMHgxLCBjb2hlcmVuY3lfY3B1X2Jhc2UgKyBJT19TWU5DX0JBUlJJRVJfQ1RMX09GRlNFVCk7CiAJd2hpbGUgKHJlYWRsKGNvaGVyZW5jeV9jcHVfYmFzZSArIElPX1NZTkNfQkFSUklFUl9DVExfT0ZGU0VUKSAmIDB4MSk7CiB9CkBAIC0xMDUsOCArMjc2LDggQEAKIAkuc2V0X2RtYV9tYXNrCQk9IGFybV9kbWFfc2V0X21hc2ssCiB9OwogCi1zdGF0aWMgaW50IG12ZWJ1X2h3Y2NfcGxhdGZvcm1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqX19kZXYpCitzdGF0aWMgaW50IG12ZWJ1X2h3Y2Nfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpfX2RldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBfX2RldjsKIApAQCAtMTE3LDQ3ICsyODgsMTQ4IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtdmVidV9od2NjX3BsYXRmb3JtX25iID0gewotCS5ub3RpZmllcl9jYWxsID0gbXZlYnVfaHdjY19wbGF0Zm9ybV9ub3RpZmllciwKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbXZlYnVfaHdjY19uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG12ZWJ1X2h3Y2Nfbm90aWZpZXIsCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKKwljb2hlcmVuY3lfcGh5c19iYXNlID0gcmVzLnN0YXJ0OworCS8qCisJICogRW5zdXJlIHNlY29uZGFyeSBDUFVzIHdpbGwgc2VlIHRoZSB1cGRhdGVkIHZhbHVlLAorCSAqIHdoaWNoIHRoZXkgcmVhZCBiZWZvcmUgdGhleSBqb2luIHRoZSBjb2hlcmVuY3kKKwkgKiBmYWJyaWMsIGFuZCB0aGVyZWZvcmUgYmVmb3JlIHRoZXkgYXJlIGNvaGVyZW50IHdpdGgKKwkgKiB0aGUgYm9vdCBDUFUgY2FjaGUuCisJICovCisJc3luY19jYWNoZV93KCZjb2hlcmVuY3lfcGh5c19iYXNlKTsKKwljb2hlcmVuY3lfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwljb2hlcmVuY3lfY3B1X2Jhc2UgPSBvZl9pb21hcChucCwgMSk7CisJc2V0X2NwdV9jb2hlcmVudCgpOworfQorCisvKgorICogVGhpcyBpb3JlbWFwIGhvb2sgaXMgdXNlZCBvbiBBcm1hZGEgMzc1LzM4eCB0byBlbnN1cmUgdGhhdCBQQ0llCisgKiBtZW1vcnkgYXJlYXMgYXJlIG1hcHBlZCBhcyBNVF9VTkNBQ0hFRCBpbnN0ZWFkIG9mIE1UX0RFVklDRS4gVGhpcworICogaXMgbmVlZGVkIGFzIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWFkbG9jayBpc3N1ZSBiZXR3ZWVuIHRoZSBQQ0llCisgKiBpbnRlcmZhY2UgYW5kIHRoZSBjYWNoZSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICoKK2FybWFkYV9wY2llX3dhX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbXR5cGUsIHZvaWQgKmNhbGxlcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcGNpZV9tZW07CisKKwltdmVidV9tYnVzX2dldF9wY2llX21lbV9hcGVydHVyZSgmcGNpZV9tZW0pOworCisJaWYgKHBjaWVfbWVtLnN0YXJ0IDw9IHBoeXNfYWRkciAmJiAocGh5c19hZGRyICsgc2l6ZSkgPD0gcGNpZV9tZW0uZW5kKQorCQltdHlwZSA9IE1UX1VOQ0FDSEVEOworCisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUsIGNhbGxlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2FjaGVfZG47CisKKwljb2hlcmVuY3lfY3B1X2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJYXJjaF9pb3JlbWFwX2NhbGxlciA9IGFybWFkYV9wY2llX3dhX2lvcmVtYXBfY2FsbGVyOworCisJLyoKKwkgKiBBZGQgdGhlIFBMMzEwIHByb3BlcnR5ICJhcm0saW8tY29oZXJlbnQiLiBUaGlzIG1ha2VzIHN1cmUgdGhlCisJICogb3V0ZXIgc3luYyBvcGVyYXRpb24gaXMgbm90IHVzZWQsIHdoaWNoIGFsbG93cyB0bworCSAqIHdvcmthcm91bmQgdGhlIHN5c3RlbSBlcnJhdHVtIHRoYXQgY2F1c2VzIGRlYWRsb2NrcyB3aGVuCisJICogZG9pbmcgUENJZSBpbiBhbiBTTVAgc2l0dWF0aW9uIG9uIEFybWFkYSAzNzUgYW5kIEFybWFkYQorCSAqIDM4eC4KKwkgKi8KKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUoY2FjaGVfZG4sIE5VTEwsICJhcm0scGwzMTAtY2FjaGUiKSB7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcDsKKworCQlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwkJcC0+bmFtZSA9IGtzdHJkdXAoImFybSxpby1jb2hlcmVudCIsIEdGUF9LRVJORUwpOworCQlvZl9hZGRfcHJvcGVydHkoY2FjaGVfZG4sIHApOworCX0KK30KKworc3RhdGljIGludCBjb2hlcmVuY3lfdHlwZSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisKKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZV9hbmRfbWF0Y2goTlVMTCwgb2ZfY29oZXJlbmN5X3RhYmxlLCAmbWF0Y2gpOworCWlmIChucCkgeworCQlpbnQgdHlwZSA9IChpbnQpIG1hdGNoLT5kYXRhOworCisJCS8qIEFybWFkYSAzNzAvWFAgY29oZXJlbmN5IHdvcmtzIGluIGJvdGggVVAgYW5kIFNNUCAqLworCQlpZiAodHlwZSA9PSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfQVJNQURBXzM3MF9YUCkKKwkJCXJldHVybiB0eXBlOworCisJCS8qIEFybWFkYSAzNzUgY29oZXJlbmN5IHdvcmtzIG9ubHkgb24gU01QICovCisJCWVsc2UgaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzUgJiYgaXNfc21wKCkpCisJCQlyZXR1cm4gdHlwZTsKKworCQkvKiBBcm1hZGEgMzgwIGNvaGVyZW5jeSB3b3JrcyBvbmx5IG9uIFNNUCAqLworCQllbHNlIGlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzgwICYmIGlzX3NtcCgpKQorCQkJcmV0dXJuIHR5cGU7CisJfQorCisJcmV0dXJuIENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FOworfQorCitpbnQgY29oZXJlbmN5X2F2YWlsYWJsZSh2b2lkKQoreworCXJldHVybiBjb2hlcmVuY3lfdHlwZSgpICE9IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FOworfQorCiBpbnQgX19pbml0IGNvaGVyZW5jeV9pbml0KHZvaWQpCiB7CisJaW50IHR5cGUgPSBjb2hlcmVuY3lfdHlwZSgpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKIAlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBvZl9jb2hlcmVuY3lfdGFibGUpOwotCWlmIChucCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCQlwcl9pbmZvKCJJbml0aWFsaXppbmcgQ29oZXJlbmN5IGZhYnJpY1xuIik7Ci0JCW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwotCQljb2hlcmVuY3lfcGh5c19iYXNlID0gcmVzLnN0YXJ0OwotCQkvKgotCQkgKiBFbnN1cmUgc2Vjb25kYXJ5IENQVXMgd2lsbCBzZWUgdGhlIHVwZGF0ZWQgdmFsdWUsCi0JCSAqIHdoaWNoIHRoZXkgcmVhZCBiZWZvcmUgdGhleSBqb2luIHRoZSBjb2hlcmVuY3kKLQkJICogZmFicmljLCBhbmQgdGhlcmVmb3JlIGJlZm9yZSB0aGV5IGFyZSBjb2hlcmVudCB3aXRoCi0JCSAqIHRoZSBib290IENQVSBjYWNoZS4KLQkJICovCi0JCXN5bmNfY2FjaGVfdygmY29oZXJlbmN5X3BoeXNfYmFzZSk7Ci0JCWNvaGVyZW5jeV9iYXNlID0gb2ZfaW9tYXAobnAsIDApOwotCQljb2hlcmVuY3lfY3B1X2Jhc2UgPSBvZl9pb21hcChucCwgMSk7Ci0JCXNldF9jcHVfY29oZXJlbnQoY3B1X2xvZ2ljYWxfbWFwKHNtcF9wcm9jZXNzb3JfaWQoKSksIDApOwotCQlvZl9ub2RlX3B1dChucCk7Ci0JfQorCisJaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzBfWFApCisJCWFybWFkYV8zNzBfY29oZXJlbmN5X2luaXQobnApOworCWVsc2UgaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzUgfHwKKwkJIHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zODApCisJCWFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KG5wKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBjb2hlcmVuY3lfbGF0ZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgdHlwZSA9IGNvaGVyZW5jeV90eXBlKCk7CiAKLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBvZl9jb2hlcmVuY3lfdGFibGUpOwotCWlmIChucCkgewotCQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLAotCQkJCSAgICAgICZtdmVidV9od2NjX3BsYXRmb3JtX25iKTsKLQkJb2Zfbm9kZV9wdXQobnApOworCWlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzc1KSB7CisJCXUzMiBkZXYsIHJldjsKKworCQlpZiAobXZlYnVfZ2V0X3NvY19pZCgmZGV2LCAmcmV2KSA9PSAwICYmCisJCSAgICByZXYgPT0gQVJNQURBXzM3NV9aMV9SRVYpCisJCQlhcm1hZGFfMzc1X2NvaGVyZW5jeV9pbml0X3dhKCk7CiAJfQorCisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwKKwkJCSAgICAgICZtdmVidV9od2NjX25iKTsKKwogCXJldHVybiAwOwogfQogCiBwb3N0Y29yZV9pbml0Y2FsbChjb2hlcmVuY3lfbGF0ZV9pbml0KTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX1BDSSkKK3N0YXRpYyBpbnQgX19pbml0IGNvaGVyZW5jeV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChjb2hlcmVuY3lfYXZhaWxhYmxlKCkpCisJCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGNpX2J1c190eXBlLAorCQkJCSAgICAgICAmbXZlYnVfaHdjY19uYik7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoY29oZXJlbmN5X3BjaV9pbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmgKaW5kZXggNzYwMjI2Yy4uNTRjYjc2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuaAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5oCkBAIC0xNSw4ICsxNSw5IEBACiAjZGVmaW5lIF9fTUFDSF8zNzBfWFBfQ09IRVJFTkNZX0gKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29oZXJlbmN5X3BoeXNfYmFzZTsKK2ludCBzZXRfY3B1X2NvaGVyZW50KHZvaWQpOwogCi1pbnQgc2V0X2NwdV9jb2hlcmVudCh1bnNpZ25lZCBpbnQgY3B1X2lkLCBpbnQgc21wX2dyb3VwX2lkKTsKIGludCBjb2hlcmVuY3lfaW5pdCh2b2lkKTsKK2ludCBjb2hlcmVuY3lfYXZhaWxhYmxlKHZvaWQpOwogCiAjZW5kaWYJLyogX19NQUNIXzM3MF9YUF9DT0hFUkVOQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3lfbGwuUyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5X2xsLlMKaW5kZXggZWU3NTk4Zi4uNTEwYzI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3lfbGwuUworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeV9sbC5TCkBAIC0yMSwzOCArMjEsMTI5IEBACiAjZGVmaW5lIEFSTUFEQV9YUF9DRkJfQ0ZHX1JFR19PRkZTRVQgMHg0CiAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2NwMTUuaD4KIAogCS50ZXh0CisvKiBSZXR1cm5zIHRoZSBjb2hlcmVuY3kgYmFzZSBhZGRyZXNzIGluIHIxIChyMCBpcyB1bnRvdWNoZWQpICovCitFTlRSWShsbF9nZXRfY29oZXJlbmN5X2Jhc2UpCisJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAorCXRzdAlyMSwgI0NSX00gQCBDaGVjayBNTVUgYml0IGVuYWJsZWQKKwlibmUJMWYKKworCS8qCisJICogTU1VIGlzIGRpc2FibGVkLCB1c2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNvaGVyZW5jeQorCSAqIGJhc2UgYWRkcmVzcy4KKwkgKi8KKwlhZHIJcjEsIDNmCisJbGRyCXIzLCBbcjFdCisJbGRyCXIxLCBbcjEsIHIzXQorCWIJMmYKKzE6CisJLyoKKwkgKiBNTVUgaXMgZW5hYmxlZCwgdXNlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGNvaGVyZW5jeQorCSAqIGJhc2UgYWRkcmVzcy4KKwkgKi8KKwlsZHIJcjEsID1jb2hlcmVuY3lfYmFzZQorCWxkcglyMSwgW3IxXQorMjoKKwltb3YJcGMsIGxyCitFTkRQUk9DKGxsX2dldF9jb2hlcmVuY3lfYmFzZSkKKwogLyoKLSAqIHIwOiBDb2hlcmVuY3kgZmFicmljIGJhc2UgcmVnaXN0ZXIgYWRkcmVzcwotICogcjE6IEhXIENQVSBpZAorICogUmV0dXJucyB0aGUgY29oZXJlbmN5IENQVSBtYXNrIGluIHIzIChyMCBpcyB1bnRvdWNoZWQpLiBUaGlzCisgKiBjb2hlcmVuY3kgQ1BVIG1hc2sgY2FuIGJlIHVzZWQgd2l0aCB0aGUgY29oZXJlbmN5IGZhYnJpYworICogY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCByZWdpc3RlcnMuIE5vdGUgdGhhdCB0aGUgbWFzayBpcyBhbHJlYWR5CisgKiBlbmRpYW4tc3dhcHBlZCBhcyBhcHByb3ByaWF0ZSBzbyB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBkbyBub3QKKyAqIGhhdmUgdG8gY2FyZSBhYm91dCBlbmRpYW5uZXNzIGlzc3VlcyB3aGlsZSBhY2Nlc3NpbmcgdGhlIGNvaGVyZW5jeQorICogZmFicmljIHJlZ2lzdGVycwogICovCi1FTlRSWShsbF9zZXRfY3B1X2NvaGVyZW50KQotCS8qIENyZWF0ZSBiaXQgYnkgY3B1IGluZGV4ICovCi0JbW92CXIzLCAjKDEgPDwgMjQpCi0JbHNsCXIxLCByMywgcjEKLUFSTV9CRTgocmV2CXIxLCByMSkKK0VOVFJZKGxsX2dldF9jb2hlcmVuY3lfY3B1bWFzaykKKwltcmMJMTUsIDAsIHIzLCBjcjAsIGNyMCwgNQorCWFuZAlyMywgcjMsICMxNQorCW1vdglyMiwgIygxIDw8IDI0KQorCWxzbAlyMywgcjIsIHIzCitBUk1fQkU4KHJldglyMywgcjMpCisJbW92CXBjLCBscgorRU5EUFJPQyhsbF9nZXRfY29oZXJlbmN5X2NwdW1hc2spCiAKLQkvKiBBZGQgQ1BVIHRvIFNNUCBncm91cCAtIEF0b21pYyAqLwotCWFkZAlyMywgcjAsICNBUk1BREFfWFBfQ0ZCX0NUTF9SRUdfT0ZGU0VUCisvKgorICogbGxfYWRkX2NwdV90b19zbXBfZ3JvdXAoKSwgbGxfZW5hYmxlX2NvaGVyZW5jeSgpIGFuZAorICogbGxfZGlzYWJsZV9jb2hlcmVuY3koKSB1c2UgdGhlIHN0cmV4L2xkcmV4IGluc3RydWN0aW9ucyB3aGlsZSB0aGUKKyAqIE1NVSBjYW4gYmUgZGlzYWJsZWQuIFRoZSBBcm1hZGEgWFAgU29DIGhhcyBhbiBleGNsdXNpdmUgbW9uaXRvcgorICogdGhhdCB0cmFja3MgdHJhbnNhY3Rpb25zIHRvIERldmljZSBhbmQvb3IgU08gbWVtb3J5IGFuZCB0aGFua3MgdG8KKyAqIHRoYXQsIGV4Y2x1c2l2ZSB0cmFuc2FjdGlvbnMgYXJlIGZ1bmN0aW9uYWwgZXZlbiB3aGVuIHRoZSBNTVUgaXMKKyAqIGRpc2FibGVkLgorICovCisKK0VOVFJZKGxsX2FkZF9jcHVfdG9fc21wX2dyb3VwKQorCS8qCisJICogQXMgcjAgaXMgbm90IG1vZGlmaWVkIGJ5IGxsX2dldF9jb2hlcmVuY3lfYmFzZSgpIGFuZAorCSAqIGxsX2dldF9jb2hlcmVuY3lfY3B1bWFzaygpLCB3ZSB1c2UgaXQgdG8gdGVtcG9yYXJseSBzYXZlIGxyCisJICogYW5kIGF2b2lkIGl0IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBicmFuY2ggYW5kIGxpbmsKKwkgKiBjYWxscy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHZlcnkgZWFybHkgaW4gdGhlIHNlY29uZGFyeQorCSAqIENQVSBib290LCBhbmQgbm8gc3RhY2sgaXMgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuCisJICovCisJbW92IAlyMCwgbHIKKwlibAlsbF9nZXRfY29oZXJlbmN5X2Jhc2UKKwlibAlsbF9nZXRfY29oZXJlbmN5X2NwdW1hc2sKKwltb3YgCWxyLCByMAorCWFkZAlyMCwgcjEsICNBUk1BREFfWFBfQ0ZCX0NGR19SRUdfT0ZGU0VUCiAxOgotCWxkcmV4CXIyLCBbcjNdCi0Jb3JyCXIyLCByMiwgcjEKLQlzdHJleCAJcjAsIHIyLCBbcjNdCi0JY21wCXIwLCAjMAotCWJuZSAxYgorCWxkcmV4CXIyLCBbcjBdCisJb3JyCXIyLCByMiwgcjMKKwlzdHJleAlyMSwgcjIsIFtyMF0KKwljbXAJcjEsICMwCisJYm5lCTFiCisJbW92CXBjLCBscgorRU5EUFJPQyhsbF9hZGRfY3B1X3RvX3NtcF9ncm91cCkKIAotCS8qIEVuYWJsZSBjb2hlcmVuY3kgb24gQ1BVIC0gQXRvbWljICovCi0JYWRkCXIzLCByMywgI0FSTUFEQV9YUF9DRkJfQ0ZHX1JFR19PRkZTRVQKK0VOVFJZKGxsX2VuYWJsZV9jb2hlcmVuY3kpCisJLyoKKwkgKiBBcyByMCBpcyBub3QgbW9kaWZpZWQgYnkgbGxfZ2V0X2NvaGVyZW5jeV9iYXNlKCkgYW5kCisJICogbGxfZ2V0X2NvaGVyZW5jeV9jcHVtYXNrKCksIHdlIHVzZSBpdCB0byB0ZW1wb3Jhcmx5IHNhdmUgbHIKKwkgKiBhbmQgYXZvaWQgaXQgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGJyYW5jaCBhbmQgbGluaworCSAqIGNhbGxzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdmVyeSBlYXJseSBpbiB0aGUgc2Vjb25kYXJ5CisJICogQ1BVIGJvb3QsIGFuZCBubyBzdGFjayBpcyBhdmFpbGFibGUgYXQgdGhpcyBwb2ludC4KKwkgKi8KKwltb3YgcjAsIGxyCisJYmwJbGxfZ2V0X2NvaGVyZW5jeV9iYXNlCisJYmwJbGxfZ2V0X2NvaGVyZW5jeV9jcHVtYXNrCisJbW92IGxyLCByMAorCWFkZAlyMCwgcjEsICNBUk1BREFfWFBfQ0ZCX0NUTF9SRUdfT0ZGU0VUCiAxOgotCWxkcmV4CXIyLCBbcjNdCi0Jb3JyCXIyLCByMiwgcjEKLQlzdHJleAlyMCwgcjIsIFtyM10KLQljbXAJcjAsICMwCi0JYm5lIDFiCi0KKwlsZHJleAlyMiwgW3IwXQorCW9ycglyMiwgcjIsIHIzCisJc3RyZXgJcjEsIHIyLCBbcjBdCisJY21wCXIxLCAjMAorCWJuZQkxYgogCWRzYgotCiAJbW92CXIwLCAjMAogCW1vdglwYywgbHIKLUVORFBST0MobGxfc2V0X2NwdV9jb2hlcmVudCkKK0VORFBST0MobGxfZW5hYmxlX2NvaGVyZW5jeSkKKworRU5UUlkobGxfZGlzYWJsZV9jb2hlcmVuY3kpCisJLyoKKwkgKiBBcyByMCBpcyBub3QgbW9kaWZpZWQgYnkgbGxfZ2V0X2NvaGVyZW5jeV9iYXNlKCkgYW5kCisJICogbGxfZ2V0X2NvaGVyZW5jeV9jcHVtYXNrKCksIHdlIHVzZSBpdCB0byB0ZW1wb3Jhcmx5IHNhdmUgbHIKKwkgKiBhbmQgYXZvaWQgaXQgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGJyYW5jaCBhbmQgbGluaworCSAqIGNhbGxzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdmVyeSBlYXJseSBpbiB0aGUgc2Vjb25kYXJ5CisJICogQ1BVIGJvb3QsIGFuZCBubyBzdGFjayBpcyBhdmFpbGFibGUgYXQgdGhpcyBwb2ludC4KKwkgKi8KKwltb3YgCXIwLCBscgorCWJsCWxsX2dldF9jb2hlcmVuY3lfYmFzZQorCWJsCWxsX2dldF9jb2hlcmVuY3lfY3B1bWFzaworCW1vdiAJbHIsIHIwCisJYWRkCXIwLCByMSwgI0FSTUFEQV9YUF9DRkJfQ1RMX1JFR19PRkZTRVQKKzE6CisJbGRyZXgJcjIsIFtyMF0KKwliaWMJcjIsIHIyLCByMworCXN0cmV4CXIxLCByMiwgW3IwXQorCWNtcAlyMSwgIzAKKwlibmUJMWIKKwlkc2IKKwltb3YJcGMsIGxyCitFTkRQUk9DKGxsX2Rpc2FibGVfY29oZXJlbmN5KQorCisJLmFsaWduIDIKKzM6CisJLmxvbmcJY29oZXJlbmN5X3BoeXNfYmFzZSAtIC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvbW1vbi5oCmluZGV4IDU1NDQ5YzQuLmI2N2ZiN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb21tb24uaApAQCAtMTgsNiArMTgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCiB2b2lkIG12ZWJ1X3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpOworaW50IG12ZWJ1X2NwdV9yZXNldF9kZWFzc2VydChpbnQgY3B1KTsKK3ZvaWQgbXZlYnVfcG1zdV9zZXRfY3B1X2Jvb3RfYWRkcihpbnQgaHdfY3B1LCB2b2lkICpib290X2FkZHIpOwordm9pZCBtdmVidV9zeXN0ZW1fY29udHJvbGxlcl9zZXRfY3B1X2Jvb3RfYWRkcih2b2lkICpib290X2FkZHIpOwogCiB2b2lkIGFybWFkYV94cF9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NwdS1yZXNldC5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jcHUtcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThmOWVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jcHUtcmVzZXQuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsCisgKgorICogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAibXZlYnUtY3B1cmVzZXQ6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlICJhcm1hZGEtMzcwLXhwLmgiCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNwdV9yZXNldF9iYXNlOworc3RhdGljIHNpemVfdCBjcHVfcmVzZXRfc2l6ZTsKKworI2RlZmluZSBDUFVfUkVTRVRfT0ZGU0VUKGNwdSkgKGNwdSAqIDB4OCkKKyNkZWZpbmUgQ1BVX1JFU0VUX0FTU0VSVCAgICAgIEJJVCgwKQorCitpbnQgbXZlYnVfY3B1X3Jlc2V0X2RlYXNzZXJ0KGludCBjcHUpCit7CisJdTMyIHJlZzsKKworCWlmICghY3B1X3Jlc2V0X2Jhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKENQVV9SRVNFVF9PRkZTRVQoY3B1KSA+PSBjcHVfcmVzZXRfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSByZWFkbChjcHVfcmVzZXRfYmFzZSArIENQVV9SRVNFVF9PRkZTRVQoY3B1KSk7CisJcmVnICY9IH5DUFVfUkVTRVRfQVNTRVJUOworCXdyaXRlbChyZWcsIGNwdV9yZXNldF9iYXNlICsgQ1BVX1JFU0VUX09GRlNFVChjcHUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12ZWJ1X2NwdV9yZXNldF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHJlc19pZHgpCit7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCByZXNfaWR4LCAmcmVzKSkgeworCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcyksCisJCQkJbnAtPmZ1bGxfbmFtZSkpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gcmVxdWVzdCByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWNwdV9yZXNldF9iYXNlID0gaW9yZW1hcChyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcykpOworCWlmICghY3B1X3Jlc2V0X2Jhc2UpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljcHVfcmVzZXRfc2l6ZSA9IHJlc291cmNlX3NpemUoJnJlcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBtdmVidV9jcHVfcmVzZXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJlc19pZHg7CisJaW50IHJldDsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCQkgICAgICJtYXJ2ZWxsLGFybWFkYS0zNzAtY3B1LXJlc2V0Iik7CisJaWYgKG5wKSB7CisJCXJlc19pZHggPSAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoaXMgY29kZSBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKwkJICogb2xkIERldmljZSBUcmVlcy4KKwkJICovCisJCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCQkJICAgICAibWFydmVsbCxhcm1hZGEtMzcwLXhwLXBtc3UiKTsKKwkJaWYgKG5wKSB7CisJCQlwcl93YXJuKEZXX1dBUk4gImRlcHJlY2F0ZWQgcG1zdSBiaW5kaW5nXG4iKTsKKwkJCXJlc19pZHggPSAxOworCQl9CisJfQorCisJLyogTm8gcmVzZXQgbm9kZSBmb3VuZCAqLworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gbXZlYnVfY3B1X3Jlc2V0X21hcChucCwgcmVzX2lkeCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJcmV0dXJuIHJldDsKK30KKworZWFybHlfaW5pdGNhbGwobXZlYnVfY3B1X3Jlc2V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9kb3ZlLmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2RvdmUuYwppbmRleCA1ZTVhNDM2Li5iNTA0NjRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2RvdmUuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2RvdmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2lmZGVmIENPTkZJR19DQUNIRV9UQVVST1MyCiAJdGF1cm9zMl9pbml0KDApOwogI2VuZGlmCi0JQlVHX09OKG12ZWJ1X21idXNfZHRfaW5pdCgpKTsKKwlCVUdfT04obXZlYnVfbWJ1c19kdF9pbml0KGZhbHNlKSk7CiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAtYTkuUyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvaGVhZHNtcC1hOS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjUzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAtYTkuUwpAQCAtMCwwICsxLDM0IEBACisvKgorICogU01QIHN1cHBvcnQ6IEVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVcyBvZiBNYXJ2ZWxsIEVCVQorICogQ29ydGV4LUE5IGJhc2VkIFNPQ3MgKEFybWFkYSAzNzUgYW5kIEFybWFkYSAzOHgpLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsCisgKgorICogR3JlZ29yeSBDTEVNRU5UIDxncmVnb3J5LmNsZW1lbnRAZnJlZS1lbGVjdHJvbnMuY29tPgorICogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKwlfX0NQVUlOSVQKKyNkZWZpbmUgQ1BVX1JFU1VNRV9BRERSX1JFRyAweGYxMDE4MmQ0CisKKy5nbG9iYWwgYXJtYWRhXzM3NV9zbXBfY3B1MV9lbmFibGVfY29kZV9zdGFydAorLmdsb2JhbCBhcm1hZGFfMzc1X3NtcF9jcHUxX2VuYWJsZV9jb2RlX2VuZAorCithcm1hZGFfMzc1X3NtcF9jcHUxX2VuYWJsZV9jb2RlX3N0YXJ0OgorCWxkciAgICAgcjAsIFtwYywgIzRdCisJbGRyICAgICByMSwgW3IwXQorCW1vdiAgICAgcGMsIHIxCisJLndvcmQgICBDUFVfUkVTVU1FX0FERFJfUkVHCithcm1hZGFfMzc1X3NtcF9jcHUxX2VuYWJsZV9jb2RlX2VuZDoKKworRU5UUlkobXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKQorCWJsICAgICAgdjdfaW52YWxpZGF0ZV9sMQorCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKK0VORFBST0MobXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAuUwppbmRleCAzZGQ4MGRmLi4yYzQwMzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAuUworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2hlYWRzbXAuUwpAQCAtMzEsMjEgKzMxLDEwIEBACiBFTlRSWShhcm1hZGFfeHBfc2Vjb25kYXJ5X3N0YXJ0dXApCiAgQVJNX0JFOChzZXRlbmQJYmUgKQkJCUAgZ28gQkU4IGlmIGVudGVyZWQgTEUKIAotCS8qIEdldCBjb2hlcmVuY3kgZmFicmljIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyAqLwotCWFkcglyMCwgMWYKLQlsZHIJcjEsIFtyMF0KLQlsZHIJcjAsIFtyMCwgcjFdCisJYmwJbGxfYWRkX2NwdV90b19zbXBfZ3JvdXAKIAotCS8qIFJlYWQgQ1BVIGlkICovCi0JbXJjICAgICBwMTUsIDAsIHIxLCBjMCwgYzAsIDUKLQlhbmQgICAgIHIxLCByMSwgIzB4RgorCWJsCWxsX2VuYWJsZV9jb2hlcmVuY3kKIAotCS8qIEFkZCBDUFUgdG8gY29oZXJlbmN5IGZhYnJpYyAqLwotCWJsCWxsX3NldF9jcHVfY29oZXJlbnQKIAliCXNlY29uZGFyeV9zdGFydHVwCiAKIEVORFBST0MoYXJtYWRhX3hwX3NlY29uZGFyeV9zdGFydHVwKQotCi0JLmFsaWduIDIKLTE6Ci0JLmxvbmcJY29oZXJlbmN5X3BoeXNfYmFzZSAtIC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUva2lya3dvb2QuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUva2lya3dvb2QuYwppbmRleCAxMjAyMDdmLi40NmYxMDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2tpcmt3b29kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9raXJrd29vZC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIHsKIAlraXJrd29vZF9kaXNhYmxlX21idXNfZXJyb3JfcHJvcGFnYXRpb24oKTsKIAotCUJVR19PTihtdmVidV9tYnVzX2R0X2luaXQoKSk7CisJQlVHX09OKG12ZWJ1X21idXNfZHRfaW5pdChmYWxzZSkpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyCiAJZmVyb2Nlb25fb2ZfaW5pdCgpOwpAQCAtMTgwLDkgKzE4MCw2IEBACiAJa2lya3dvb2RfcG1faW5pdCgpOwogCWtpcmt3b29kX2R0X2V0aF9maXh1cCgpOwogCi0JaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiaHAsdDUzMjUiKSkKLQkJdDUzMjVfaW5pdCgpOwotCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIGF1eGRhdGEsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYwppbmRleCAwOTUyMGUxLi5kMGYzNWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgogI2luY2x1ZGUgIm12ZWJ1LXNvYy1pZC5oIgogCiAjZGVmaW5lIFBDSUVfREVWX0lEX09GRgkJMHgwCkBAIC0xMjcsNSArMTI5LDMzIEBACiAKIAlyZXR1cm4gcmV0OwogfQotY29yZV9pbml0Y2FsbChtdmVidV9zb2NfaWRfaW5pdCk7CitlYXJseV9pbml0Y2FsbChtdmVidV9zb2NfaWRfaW5pdCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZCkKK3sKKwlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKKwlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKKworCS8qIEFsc28gcHJvdGVjdHMgYWdhaW5zdCBydW5uaW5nIG9uIG5vbi1tdmVidSBzeXN0ZW1zICovCisJaWYgKCFpc19pZF92YWxpZCkKKwkJcmV0dXJuIDA7CisKKwlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NfZGV2X2F0dHIpCisJCXJldHVybiAtRU5PTUVNOworCisJc29jX2Rldl9hdHRyLT5mYW1pbHkgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIk1hcnZlbGwiKTsKKwlzb2NfZGV2X2F0dHItPnJldmlzaW9uID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlWCIsIHNvY19yZXYpOworCXNvY19kZXZfYXR0ci0+c29jX2lkID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlWCIsIHNvY19kZXZfaWQpOworCisJc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29jX2Rldl9hdHRyKTsKKwlpZiAoSVNfRVJSKHNvY19kZXYpKSB7CisJCWtmcmVlKHNvY19kZXZfYXR0ci0+ZmFtaWx5KTsKKwkJa2ZyZWUoc29jX2Rldl9hdHRyLT5yZXZpc2lvbik7CisJCWtmcmVlKHNvY19kZXZfYXR0ci0+c29jX2lkKTsKKwkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG12ZWJ1X3NvY19kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuaCBiL2FyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmgKaW5kZXggMzE2NTQyNS4uYzE2YmI2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuaAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5oCkBAIC0yMCw2ICsyMCwxMCBAQAogI2RlZmluZSBNVjc4WFgwX0EwX1JFVgkgICAgMHgxCiAjZGVmaW5lIE1WNzhYWDBfQjBfUkVWCSAgICAweDIKIAorLyogQXJtYWRhIDM3NSAqLworI2RlZmluZSBBUk1BREFfMzc1X1oxX1JFViAgIDB4MAorI2RlZmluZSBBUk1BREFfMzc1X0EwX1JFViAgIDB4MworCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVZFQlUKIGludCBtdmVidV9nZXRfc29jX2lkKHUzMiAqZGV2LCB1MzIgKnJldik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLWE5LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAtYTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmMyYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLWE5LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBTeW1tZXRyaWMgTXVsdGkgUHJvY2Vzc2luZyAoU01QKSBzdXBwb3J0IGZvciBNYXJ2ZWxsIEVCVSBDb3J0ZXgtQTkKKyAqIGJhc2VkIFNPQ3MgKEFybWFkYSAzNzUvMzh4KS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWFydmVsbAorICoKKyAqIEdyZWdvcnkgQ0xFTUVOVCA8Z3JlZ29yeS5jbGVtZW50QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqIFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm12ZWJ1LXNvYy1pZC5oIgorI2luY2x1ZGUgInBtc3UuaCIKKworI2RlZmluZSBDUllQVDBfRU5HX0lEICAgNDEKKyNkZWZpbmUgQ1JZUFQwX0VOR19BVFRSIDB4MQorI2RlZmluZSBTUkFNX1BIWVNfQkFTRSAgMHhGRkZGMDAwMAorCisjZGVmaW5lIEJPT1RST01fQkFTRSAgICAweEZGRjAwMDAwCisjZGVmaW5lIEJPT1RST01fU0laRSAgICAweDEwMDAwMAorCitleHRlcm4gdW5zaWduZWQgY2hhciBhcm1hZGFfMzc1X3NtcF9jcHUxX2VuYWJsZV9jb2RlX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGFybWFkYV8zNzVfc21wX2NwdTFfZW5hYmxlX2NvZGVfc3RhcnQ7CisKK3ZvaWQgYXJtYWRhXzM3NV9zbXBfY3B1MV9lbmFibGVfd2Eodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKnNyYW1fdmlydF9iYXNlOworCisJbXZlYnVfbWJ1c19kZWxfd2luZG93KEJPT1RST01fQkFTRSwgQk9PVFJPTV9TSVpFKTsKKwltdmVidV9tYnVzX2FkZF93aW5kb3dfYnlfaWQoQ1JZUFQwX0VOR19JRCwgQ1JZUFQwX0VOR19BVFRSLAorCQkJCVNSQU1fUEhZU19CQVNFLCBTWl82NEspOworCXNyYW1fdmlydF9iYXNlID0gaW9yZW1hcChTUkFNX1BIWVNfQkFTRSwgU1pfNjRLKTsKKworCW1lbWNweShzcmFtX3ZpcnRfYmFzZSwgJmFybWFkYV8zNzVfc21wX2NwdTFfZW5hYmxlX2NvZGVfc3RhcnQsCisJICAgICAgICZhcm1hZGFfMzc1X3NtcF9jcHUxX2VuYWJsZV9jb2RlX2VuZAorCSAgICAgICAtICZhcm1hZGFfMzc1X3NtcF9jcHUxX2VuYWJsZV9jb2RlX3N0YXJ0KTsKK30KKworZXh0ZXJuIHZvaWQgbXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCBtdmVidV9jb3J0ZXhfYTlfYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJaW50IHJldCwgaHdfY3B1OworCisJcHJfaW5mbygiQm9vdGluZyBDUFUgJWRcbiIsIGNwdSk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlIHN5c3RlbS13aWRlCisJICogZmxhZ3MgcmVnaXN0ZXIuIFRoZSBib290IG1vbml0b3Igd2FpdHMgdW50aWwgaXQgcmVjZWl2ZXMgYQorCSAqIHNvZnQgaW50ZXJydXB0LCBhbmQgdGhlbiB0aGUgc2Vjb25kYXJ5IENQVSBicmFuY2hlcyB0byB0aGlzCisJICogYWRkcmVzcy4KKwkgKi8KKwlod19jcHUgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm1hcnZlbGwsYXJtYWRhMzc1IikpIHsKKwkJdTMyIGRldiwgcmV2OworCisJCWlmIChtdmVidV9nZXRfc29jX2lkKCZkZXYsICZyZXYpID09IDAgJiYKKwkJICAgIHJldiA9PSBBUk1BREFfMzc1X1oxX1JFVikKKwkJCWFybWFkYV8zNzVfc21wX2NwdTFfZW5hYmxlX3dhKCk7CisKKwkJbXZlYnVfc3lzdGVtX2NvbnRyb2xsZXJfc2V0X2NwdV9ib290X2FkZHIobXZlYnVfY29ydGV4X2E5X3NlY29uZGFyeV9zdGFydHVwKTsKKwl9CisJZWxzZSB7CisJCW12ZWJ1X3Btc3Vfc2V0X2NwdV9ib290X2FkZHIoaHdfY3B1LAorCQkJCQkgICAgIG12ZWJ1X2NvcnRleF9hOV9zZWNvbmRhcnlfc3RhcnR1cCk7CisJfQorCisJc21wX3dtYigpOworCXJldCA9IG12ZWJ1X2NwdV9yZXNldF9kZWFzc2VydChod19jcHUpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJDb3VsZCBub3Qgc3RhcnQgdGhlIHNlY29uZGFyeSBDUFU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlhcmNoX3NlbmRfd2FrZXVwX2lwaV9tYXNrKGNwdW1hc2tfb2YoY3B1KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBtdmVidV9jb3J0ZXhfYTlfc21wX29wcyBfX2luaXRkYXRhID0geworCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBtdmVidV9jb3J0ZXhfYTlfYm9vdF9zZWNvbmRhcnksCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJLmNwdV9kaWUJCT0gYXJtYWRhX3hwX2NwdV9kaWUsCisjZW5kaWYKK307CisKK0NQVV9NRVRIT0RfT0ZfREVDTEFSRShtdmVidV9hcm1hZGFfMzc1X3NtcCwgIm1hcnZlbGwsYXJtYWRhLTM3NS1zbXAiLAorCQkgICAgICAmbXZlYnVfY29ydGV4X2E5X3NtcF9vcHMpOworQ1BVX01FVEhPRF9PRl9ERUNMQVJFKG12ZWJ1X2FybWFkYV8zODBfc21wLCAibWFydmVsbCxhcm1hZGEtMzgwLXNtcCIsCisJCSAgICAgICZtdmVidV9jb3J0ZXhfYTlfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC5jCmluZGV4IGE2ZGEwM2YuLjg4Yjk3NmIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAuYwpAQCAtNzAsMTYgKzcwLDE5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhcm1hZGFfeHBfc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSkKLXsKLQlhcm1hZGFfeHBfbXBpY19zbXBfY3B1X2luaXQoKTsKLX0KLQogc3RhdGljIGludCBhcm1hZGFfeHBfYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogeworCWludCByZXQsIGh3X2NwdTsKKwogCXByX2luZm8oIkJvb3RpbmcgQ1BVICVkXG4iLCBjcHUpOwogCi0JYXJtYWRhX3hwX2Jvb3RfY3B1KGNwdSwgYXJtYWRhX3hwX3NlY29uZGFyeV9zdGFydHVwKTsKKwlod19jcHUgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwltdmVidV9wbXN1X3NldF9jcHVfYm9vdF9hZGRyKGh3X2NwdSwgYXJtYWRhX3hwX3NlY29uZGFyeV9zdGFydHVwKTsKKwlyZXQgPSBtdmVidV9jcHVfcmVzZXRfZGVhc3NlcnQoaHdfY3B1KTsKKwlpZiAocmV0KSB7CisJCXByX3dhcm4oInVuYWJsZSB0byBib290IENQVTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC05MCw4ICs5Myw2IEBACiAKIAlpZiAobmNvcmVzID09IDAgfHwgbmNvcmVzID4gQVJNQURBX1hQX01BWF9DUFVTKQogCQlwYW5pYygiSW52YWxpZCBudW1iZXIgb2YgQ1BVcyBpbiBEVFxuIik7Ci0KLQlzZXRfc21wX2Nyb3NzX2NhbGwoYXJtYWRhX21waWNfc2VuZF9kb29yYmVsbCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfeHBfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCkBAIC0xMDIsNyArMTAzLDcgQEAKIAogCXNldF9zZWNvbmRhcnlfY3B1c19jbG9jaygpOwogCWZsdXNoX2NhY2hlX2FsbCgpOwotCXNldF9jcHVfY29oZXJlbnQoY3B1X2xvZ2ljYWxfbWFwKHNtcF9wcm9jZXNzb3JfaWQoKSksIDApOworCXNldF9jcHVfY29oZXJlbnQoKTsKIAogCS8qCiAJICogSW4gb3JkZXIgdG8gYm9vdCB0aGUgc2Vjb25kYXJ5IENQVXMgd2UgbmVlZCB0byBlbnN1cmUKQEAgLTEyNCw5ICsxMjUsMTEgQEAKIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBhcm1hZGFfeHBfc21wX29wcyBfX2luaXRkYXRhID0gewogCS5zbXBfaW5pdF9jcHVzCQk9IGFybWFkYV94cF9zbXBfaW5pdF9jcHVzLAogCS5zbXBfcHJlcGFyZV9jcHVzCT0gYXJtYWRhX3hwX3NtcF9wcmVwYXJlX2NwdXMsCi0JLnNtcF9zZWNvbmRhcnlfaW5pdAk9IGFybWFkYV94cF9zZWNvbmRhcnlfaW5pdCwKIAkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gYXJtYWRhX3hwX2Jvb3Rfc2Vjb25kYXJ5LAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCS5jcHVfZGllCQk9IGFybWFkYV94cF9jcHVfZGllLAogI2VuZGlmCiB9OworCitDUFVfTUVUSE9EX09GX0RFQ0xBUkUoYXJtYWRhX3hwX3NtcCwgIm1hcnZlbGwsYXJtYWRhLXhwLXNtcCIsCisJCSAgICAgICZhcm1hZGFfeHBfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jCmluZGV4IGQ3MWVmNTMuLjUzYTU1YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdS5jCkBAIC0xNiw2MiArMTYsMjgzIEBACiAgKiBvdGhlciBTT0MgdW5pdHMKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpICJtdmVidS1wbXN1OiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3AxNS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgotI2luY2x1ZGUgInBtc3UuaCIKKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpwbXN1X21wX2Jhc2U7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpwbXN1X3Jlc2V0X2Jhc2U7CiAKLSNkZWZpbmUgUE1TVV9CT09UX0FERFJfUkVESVJFQ1RfT0ZGU0VUKGNwdSkJKChjcHUgKiAweDEwMCkgKyAweDI0KQotI2RlZmluZSBQTVNVX1JFU0VUX0NUTF9PRkZTRVQoY3B1KQkJKGNwdSAqIDB4OCkKKyNkZWZpbmUgUE1TVV9CQVNFX09GRlNFVCAgICAweDEwMAorI2RlZmluZSBQTVNVX1JFR19TSVpFCSAgICAweDEwMDAKKworLyogUE1TVSBNUCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE1TVV9DT05UUk9MX0FORF9DT05GSUcoY3B1KQkgICAgKChjcHUgKiAweDEwMCkgKyAweDEwNCkKKyNkZWZpbmUgUE1TVV9DT05UUk9MX0FORF9DT05GSUdfREZTX1JFUQkJQklUKDE4KQorI2RlZmluZSBQTVNVX0NPTlRST0xfQU5EX0NPTkZJR19QV0RETl9SRVEJQklUKDE2KQorI2RlZmluZSBQTVNVX0NPTlRST0xfQU5EX0NPTkZJR19MMl9QV0RETglCSVQoMjApCisKKyNkZWZpbmUgUE1TVV9DUFVfUE9XRVJfRE9XTl9DT05UUk9MKGNwdSkgICAgKChjcHUgKiAweDEwMCkgKyAweDEwOCkKKworI2RlZmluZSBQTVNVX0NQVV9QT1dFUl9ET1dOX0RJU19TTlBfUV9TS0lQCUJJVCgwKQorCisjZGVmaW5lIFBNU1VfU1RBVFVTX0FORF9NQVNLKGNwdSkJICAgICgoY3B1ICogMHgxMDApICsgMHgxMGMpCisjZGVmaW5lIFBNU1VfU1RBVFVTX0FORF9NQVNLX0NQVV9JRExFX1dBSVQJQklUKDE2KQorI2RlZmluZSBQTVNVX1NUQVRVU19BTkRfTUFTS19TTlBfUV9FTVBUWV9XQUlUCUJJVCgxNykKKyNkZWZpbmUgUE1TVV9TVEFUVVNfQU5EX01BU0tfSVJRX1dBS0VVUAkJQklUKDIwKQorI2RlZmluZSBQTVNVX1NUQVRVU19BTkRfTUFTS19GSVFfV0FLRVVQCQlCSVQoMjEpCisjZGVmaW5lIFBNU1VfU1RBVFVTX0FORF9NQVNLX0RCR19XQUtFVVAJCUJJVCgyMikKKyNkZWZpbmUgUE1TVV9TVEFUVVNfQU5EX01BU0tfSVJRX01BU0sJCUJJVCgyNCkKKyNkZWZpbmUgUE1TVV9TVEFUVVNfQU5EX01BU0tfRklRX01BU0sJCUJJVCgyNSkKKworI2RlZmluZSBQTVNVX0JPT1RfQUREUl9SRURJUkVDVF9PRkZTRVQoY3B1KSAoKGNwdSAqIDB4MTAwKSArIDB4MTI0KQorCisvKiBQTVNVIGZhYnJpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTDJDX05GQUJSSUNfUE1fQ1RMCQkgICAgMHg0CisjZGVmaW5lIEwyQ19ORkFCUklDX1BNX0NUTF9QV1JfRE9XTgkJQklUKDIwKQorCitleHRlcm4gdm9pZCBsbF9kaXNhYmxlX2NvaGVyZW5jeSh2b2lkKTsKK2V4dGVybiB2b2lkIGxsX2VuYWJsZV9jb2hlcmVuY3kodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFybWFkYV94cF9jcHVpZGxlX2RldmljZSA9IHsKKwkubmFtZSA9ICJjcHVpZGxlLWFybWFkYS0zNzAteHAiLAorfTsKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfcG1zdV90YWJsZVtdID0gewotCXsuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAtcG1zdSJ9LAorCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLXBtc3UiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLXhwLXBtc3UiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzgwLXBtc3UiLCB9LAogCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIH07CiAKLSNpZmRlZiBDT05GSUdfU01QCi1pbnQgYXJtYWRhX3hwX2Jvb3RfY3B1KHVuc2lnbmVkIGludCBjcHVfaWQsIHZvaWQgKmJvb3RfYWRkcikKK3ZvaWQgbXZlYnVfcG1zdV9zZXRfY3B1X2Jvb3RfYWRkcihpbnQgaHdfY3B1LCB2b2lkICpib290X2FkZHIpCiB7Ci0JaW50IHJlZywgaHdfY3B1OwotCi0JaWYgKCFwbXN1X21wX2Jhc2UgfHwgIXBtc3VfcmVzZXRfYmFzZSkgewotCQlwcl93YXJuKCJDYW4ndCBib290IENQVS4gUE1TVSBpcyB1bmluaXRpYWxpemVkXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaHdfY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGNwdV9pZCk7Ci0KIAl3cml0ZWwodmlydF90b19waHlzKGJvb3RfYWRkciksIHBtc3VfbXBfYmFzZSArCi0JCQlQTVNVX0JPT1RfQUREUl9SRURJUkVDVF9PRkZTRVQoaHdfY3B1KSk7Ci0KLQkvKiBSZWxlYXNlIENQVSBmcm9tIHJlc2V0IGJ5IGNsZWFyaW5nIHJlc2V0IGJpdCovCi0JcmVnID0gcmVhZGwocG1zdV9yZXNldF9iYXNlICsgUE1TVV9SRVNFVF9DVExfT0ZGU0VUKGh3X2NwdSkpOwotCXJlZyAmPSAofjB4MSk7Ci0Jd3JpdGVsKHJlZywgcG1zdV9yZXNldF9iYXNlICsgUE1TVV9SRVNFVF9DVExfT0ZGU0VUKGh3X2NwdSkpOwotCi0JcmV0dXJuIDA7CisJCVBNU1VfQk9PVF9BRERSX1JFRElSRUNUX09GRlNFVChod19jcHUpKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBhcm1hZGFfMzcwX3hwX3Btc3VfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlpbnQgcmV0ID0gMDsKIAogCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG9mX3Btc3VfdGFibGUpOwotCWlmIChucCkgewotCQlwcl9pbmZvKCJJbml0aWFsaXppbmcgUG93ZXIgTWFuYWdlbWVudCBTZXJ2aWNlIFVuaXRcbiIpOwotCQlwbXN1X21wX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7Ci0JCXBtc3VfcmVzZXRfYmFzZSA9IG9mX2lvbWFwKG5wLCAxKTsKLQkJb2Zfbm9kZV9wdXQobnApOworCWlmICghbnApCisJCXJldHVybiAwOworCisJcHJfaW5mbygiSW5pdGlhbGl6aW5nIFBvd2VyIE1hbmFnZW1lbnQgU2VydmljZSBVbml0XG4iKTsKKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKSkgeworCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAtcG1zdSIpKSB7CisJCXByX3dhcm4oRldfV0FSTiAiZGVwcmVjYXRlZCBwbXN1IGJpbmRpbmdcbiIpOworCQlyZXMuc3RhcnQgPSByZXMuc3RhcnQgLSBQTVNVX0JBU0VfT0ZGU0VUOworCQlyZXMuZW5kID0gcmVzLnN0YXJ0ICsgUE1TVV9SRUdfU0laRSAtIDE7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpLAorCQkJCW5wLT5mdWxsX25hbWUpKSB7CisJCXByX2VycigidW5hYmxlIHRvIHJlcXVlc3QgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlwbXN1X21wX2Jhc2UgPSBpb3JlbWFwKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CisJaWYgKCFwbXN1X21wX2Jhc2UpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcykpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKyBvdXQ6CisJb2Zfbm9kZV9wdXQobnApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFybWFkYV8zNzBfeHBfcG1zdV9lbmFibGVfbDJfcG93ZXJkb3duX29uaWRsZSh2b2lkKQoreworCXUzMiByZWc7CisKKwlpZiAocG1zdV9tcF9iYXNlID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEVuYWJsZSBMMiAmIEZhYnJpYyBwb3dlcmRvd24gaW4gRGVlcC1JZGxlIG1vZGUgLSBGYWJyaWMgKi8KKwlyZWcgPSByZWFkbChwbXN1X21wX2Jhc2UgKyBMMkNfTkZBQlJJQ19QTV9DVEwpOworCXJlZyB8PSBMMkNfTkZBQlJJQ19QTV9DVExfUFdSX0RPV047CisJd3JpdGVsKHJlZywgcG1zdV9tcF9iYXNlICsgTDJDX05GQUJSSUNfUE1fQ1RMKTsKK30KKworc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF9jcHVfcmVzdW1lKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJibCAgICBsbF9hZGRfY3B1X3RvX3NtcF9ncm91cFxuXHQiCisJCSAgICAgImJsICAgIGxsX2VuYWJsZV9jb2hlcmVuY3lcblx0IgorCQkgICAgICJiCSAgICBjcHVfcmVzdW1lXG5cdCIpOworfQorCisvKiBObyBsb2NraW5nIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG9ubHkgYWNjZXNzIHBlci1DUFUgcmVnaXN0ZXJzICovCit2b2lkIGFybWFkYV8zNzBfeHBfcG1zdV9pZGxlX3ByZXBhcmUoYm9vbCBkZWVwaWRsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJdTMyIHJlZzsKKworCWlmIChwbXN1X21wX2Jhc2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBZGp1c3QgdGhlIFBNU1UgY29uZmlndXJhdGlvbiB0byB3YWl0IGZvciBXRkkgc2lnbmFsLCBlbmFibGUKKwkgKiBJUlEgYW5kIEZJUSBhcyB3YWtldXAgZXZlbnRzLCBzZXQgd2FpdCBmb3Igc25vb3AgcXVldWUgZW1wdHkKKwkgKiBpbmRpY2F0aW9uIGFuZCBtYXNrIElSUSBhbmQgRklRIGZyb20gQ1BVCisJICovCisJcmVnID0gcmVhZGwocG1zdV9tcF9iYXNlICsgUE1TVV9TVEFUVVNfQU5EX01BU0soaHdfY3B1KSk7CisJcmVnIHw9IFBNU1VfU1RBVFVTX0FORF9NQVNLX0NQVV9JRExFX1dBSVQgICAgfAorCSAgICAgICBQTVNVX1NUQVRVU19BTkRfTUFTS19JUlFfV0FLRVVQICAgICAgIHwKKwkgICAgICAgUE1TVV9TVEFUVVNfQU5EX01BU0tfRklRX1dBS0VVUCAgICAgICB8CisJICAgICAgIFBNU1VfU1RBVFVTX0FORF9NQVNLX1NOUF9RX0VNUFRZX1dBSVQgfAorCSAgICAgICBQTVNVX1NUQVRVU19BTkRfTUFTS19JUlFfTUFTSyAgICAgICAgIHwKKwkgICAgICAgUE1TVV9TVEFUVVNfQU5EX01BU0tfRklRX01BU0s7CisJd3JpdGVsKHJlZywgcG1zdV9tcF9iYXNlICsgUE1TVV9TVEFUVVNfQU5EX01BU0soaHdfY3B1KSk7CisKKwlyZWcgPSByZWFkbChwbXN1X21wX2Jhc2UgKyBQTVNVX0NPTlRST0xfQU5EX0NPTkZJRyhod19jcHUpKTsKKwkvKiBhc2sgSFcgdG8gcG93ZXIgZG93biB0aGUgTDIgQ2FjaGUgaWYgbmVlZGVkICovCisJaWYgKGRlZXBpZGxlKQorCQlyZWcgfD0gUE1TVV9DT05UUk9MX0FORF9DT05GSUdfTDJfUFdERE47CisKKwkvKiByZXF1ZXN0IHBvd2VyIGRvd24gKi8KKwlyZWcgfD0gUE1TVV9DT05UUk9MX0FORF9DT05GSUdfUFdERE5fUkVROworCXdyaXRlbChyZWcsIHBtc3VfbXBfYmFzZSArIFBNU1VfQ09OVFJPTF9BTkRfQ09ORklHKGh3X2NwdSkpOworCisJLyogRGlzYWJsZSBzbm9vcCBkaXNhYmxlIGJ5IEhXIC0gU1cgaXMgdGFraW5nIGNhcmUgb2YgaXQgKi8KKwlyZWcgPSByZWFkbChwbXN1X21wX2Jhc2UgKyBQTVNVX0NQVV9QT1dFUl9ET1dOX0NPTlRST0woaHdfY3B1KSk7CisJcmVnIHw9IFBNU1VfQ1BVX1BPV0VSX0RPV05fRElTX1NOUF9RX1NLSVA7CisJd3JpdGVsKHJlZywgcG1zdV9tcF9iYXNlICsgUE1TVV9DUFVfUE9XRVJfRE9XTl9DT05UUk9MKGh3X2NwdSkpOworfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IGRvX2FybWFkYV8zNzBfeHBfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBkZWVwaWRsZSkKK3sKKwlhcm1hZGFfMzcwX3hwX3Btc3VfaWRsZV9wcmVwYXJlKGRlZXBpZGxlKTsKKworCXY3X2V4aXRfY29oZXJlbmN5X2ZsdXNoKGFsbCk7CisKKwlsbF9kaXNhYmxlX2NvaGVyZW5jeSgpOworCisJZHNiKCk7CisKKwl3ZmkoKTsKKworCS8qIElmIHdlIGFyZSBoZXJlLCB3ZmkgZmFpbGVkLiBBcyBwcm9jZXNzb3JzIHJ1biBvdXQgb2YKKwkgKiBjb2hlcmVuY3kgZm9yIHNvbWUgdGltZSwgdGxicyBtaWdodCBiZSBzdGFsZSwgc28gZmx1c2ggdGhlbQorCSAqLworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKworCWxsX2VuYWJsZV9jb2hlcmVuY3koKTsKKworCS8qIFRlc3QgdGhlIENSX0MgYml0IGFuZCBzZXQgaXQgaWYgaXQgd2FzIGNsZWFyZWQgKi8KKwlhc20gdm9sYXRpbGUoCisJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDAgXG5cdCIKKwkidHN0CSUwLCAjKDEgPDwgMikgXG5cdCIKKwkib3JyZXEJJTAsICUwLCAjKDEgPDwgMikgXG5cdCIKKwkibWNyZXEJcDE1LCAwLCAlMCwgYzEsIGMwLCAwIFxuXHQiCisJImlzYgkiCisJOiA6ICJyIiAoMCkpOworCisJcHJfd2FybigiRmFpbGVkIHRvIHN1c3BlbmQgdGhlIHN5c3RlbVxuIik7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgZGVlcGlkbGUpCit7CisJcmV0dXJuIGNwdV9zdXNwZW5kKGRlZXBpZGxlLCBkb19hcm1hZGFfMzcwX3hwX2NwdV9zdXNwZW5kKTsKK30KKworLyogTm8gbG9ja2luZyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBvbmx5IGFjY2VzcyBwZXItQ1BVIHJlZ2lzdGVycyAqLworc3RhdGljIG5vaW5saW5lIHZvaWQgYXJtYWRhXzM3MF94cF9wbXN1X2lkbGVfcmVzdG9yZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBod19jcHUgPSBjcHVfbG9naWNhbF9tYXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl1MzIgcmVnOworCisJaWYgKHBtc3VfbXBfYmFzZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBjYW5jZWwgYXNrIEhXIHRvIHBvd2VyIGRvd24gdGhlIEwyIENhY2hlIGlmIHBvc3NpYmxlICovCisJcmVnID0gcmVhZGwocG1zdV9tcF9iYXNlICsgUE1TVV9DT05UUk9MX0FORF9DT05GSUcoaHdfY3B1KSk7CisJcmVnICY9IH5QTVNVX0NPTlRST0xfQU5EX0NPTkZJR19MMl9QV0RETjsKKwl3cml0ZWwocmVnLCBwbXN1X21wX2Jhc2UgKyBQTVNVX0NPTlRST0xfQU5EX0NPTkZJRyhod19jcHUpKTsKKworCS8qIGNhbmNlbCBFbmFibGUgd2FrZXVwIGV2ZW50cyBhbmQgbWFzayBpbnRlcnJ1cHRzICovCisJcmVnID0gcmVhZGwocG1zdV9tcF9iYXNlICsgUE1TVV9TVEFUVVNfQU5EX01BU0soaHdfY3B1KSk7CisJcmVnICY9IH4oUE1TVV9TVEFUVVNfQU5EX01BU0tfSVJRX1dBS0VVUCB8IFBNU1VfU1RBVFVTX0FORF9NQVNLX0ZJUV9XQUtFVVApOworCXJlZyAmPSB+UE1TVV9TVEFUVVNfQU5EX01BU0tfQ1BVX0lETEVfV0FJVDsKKwlyZWcgJj0gflBNU1VfU1RBVFVTX0FORF9NQVNLX1NOUF9RX0VNUFRZX1dBSVQ7CisJcmVnICY9IH4oUE1TVV9TVEFUVVNfQU5EX01BU0tfSVJRX01BU0sgfCBQTVNVX1NUQVRVU19BTkRfTUFTS19GSVFfTUFTSyk7CisJd3JpdGVsKHJlZywgcG1zdV9tcF9iYXNlICsgUE1TVV9TVEFUVVNfQU5EX01BU0soaHdfY3B1KSk7Cit9CisKK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9jcHVfcG1fbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJaWYgKGFjdGlvbiA9PSBDUFVfUE1fRU5URVIpIHsKKwkJdW5zaWduZWQgaW50IGh3X2NwdSA9IGNwdV9sb2dpY2FsX21hcChzbXBfcHJvY2Vzc29yX2lkKCkpOworCQltdmVidV9wbXN1X3NldF9jcHVfYm9vdF9hZGRyKGh3X2NwdSwgYXJtYWRhXzM3MF94cF9jcHVfcmVzdW1lKTsKKwl9IGVsc2UgaWYgKGFjdGlvbiA9PSBDUFVfUE1fRVhJVCkgeworCQlhcm1hZGFfMzcwX3hwX3Btc3VfaWRsZV9yZXN0b3JlKCk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhcm1hZGFfMzcwX3hwX2NwdV9wbV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGFybWFkYV8zNzBfeHBfY3B1X3BtX25vdGlmeSwKK307CisKK2ludCBfX2luaXQgYXJtYWRhXzM3MF94cF9jcHVfcG1faW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgYWxsIHRoZSByZXF1aXJlbWVudHMgYXJlIGF2YWlsYWJsZSB0byBlbmFibGUKKwkgKiBjcHVpZGxlLiBTbyBmYXIsIGl0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIEFybWFkYSBYUCwgY3B1aWRsZQorCSAqIG5lZWRzIHRoZSBjb2hlcmVuY3kgZmFicmljIGFuZCB0aGUgUE1TVSBlbmFibGVkCisJICovCisKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxhcm1hZGF4cCIpKQorCQlyZXR1cm4gMDsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm1hcnZlbGwsY29oZXJlbmN5LWZhYnJpYyIpOworCWlmICghbnApCisJCXJldHVybiAwOworCW9mX25vZGVfcHV0KG5wKTsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG9mX3Btc3VfdGFibGUpOworCWlmICghbnApCisJCXJldHVybiAwOworCW9mX25vZGVfcHV0KG5wKTsKKworCWFybWFkYV8zNzBfeHBfcG1zdV9lbmFibGVfbDJfcG93ZXJkb3duX29uaWRsZSgpOworCWFybWFkYV94cF9jcHVpZGxlX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGFybWFkYV8zNzBfeHBfY3B1X3N1c3BlbmQ7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcm1hZGFfeHBfY3B1aWRsZV9kZXZpY2UpOworCWNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcigmYXJtYWRhXzM3MF94cF9jcHVfcG1fbm90aWZpZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoYXJtYWRhXzM3MF94cF9jcHVfcG1faW5pdCk7CiBlYXJseV9pbml0Y2FsbChhcm1hZGFfMzcwX3hwX3Btc3VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3N5c3RlbS1jb250cm9sbGVyLmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3N5c3RlbS1jb250cm9sbGVyLmMKaW5kZXggNjE0YmE2OC4uMGM1NTI0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9zeXN0ZW0tY29udHJvbGxlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvc3lzdGVtLWNvbnRyb2xsZXIuYwpAQCAtMzcsNiArMzcsOCBAQAogCiAJdTMyIHJzdG91dG5fbWFza19yZXNldF9vdXRfZW47CiAJdTMyIHN5c3RlbV9zb2Z0X3Jlc2V0OworCisJdTMyIHJlc3VtZV9ib290X2FkZHI7CiB9Owogc3RhdGljIHN0cnVjdCBtdmVidV9zeXN0ZW1fY29udHJvbGxlciAqbXZlYnVfc2M7CiAKQEAgLTUyLDYgKzU0LDcgQEAKIAkuc3lzdGVtX3NvZnRfcmVzZXRfb2Zmc2V0ID0gMHg1OCwKIAkucnN0b3V0bl9tYXNrX3Jlc2V0X291dF9lbiA9IDB4MSwKIAkuc3lzdGVtX3NvZnRfcmVzZXQgPSAweDEsCisJLnJlc3VtZV9ib290X2FkZHIgPSAweGQ0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtdmVidV9zeXN0ZW1fY29udHJvbGxlciBvcmlvbl9zeXN0ZW1fY29udHJvbGxlciA9IHsKQEAgLTk4LDYgKzEwMSwxNiBAQAogCQk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIG12ZWJ1X3N5c3RlbV9jb250cm9sbGVyX3NldF9jcHVfYm9vdF9hZGRyKHZvaWQgKmJvb3RfYWRkcikKK3sKKwlCVUdfT04oc3lzdGVtX2NvbnRyb2xsZXJfYmFzZSA9PSBOVUxMKTsKKwlCVUdfT04obXZlYnVfc2MtPnJlc3VtZV9ib290X2FkZHIgPT0gMCk7CisJd3JpdGVsKHZpcnRfdG9fcGh5cyhib290X2FkZHIpLCBzeXN0ZW1fY29udHJvbGxlcl9iYXNlICsKKwkgICAgICAgbXZlYnVfc2MtPnJlc3VtZV9ib290X2FkZHIpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3N5c3RlbV9jb250cm9sbGVyX2luaXQodm9pZCkKIHsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKQEAgLTExNCw0ICsxMjcsNCBAQAogCXJldHVybiAwOwogfQogCi1hcmNoX2luaXRjYWxsKG12ZWJ1X3N5c3RlbV9jb250cm9sbGVyX2luaXQpOworZWFybHlfaW5pdGNhbGwobXZlYnVfc3lzdGVtX2NvbnRyb2xsZXJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggNjVkMmFjYi4uNWI0NWQyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJLyogdXNiMSBoYXMgYSBNaW5pLUFCIHBvcnQgYW5kIGV4dGVybmFsIGlzcDEzMDEgdHJhbnNjZWl2ZXIgKi8KIAkub3RnCQk9IDIsCiAKLSNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCisjaWYgSVNfRU5BQkxFRChDT05GSUdfVVNCX09NQVApCiAJLmhtY19tb2RlCT0gMTksCS8qIDA6aG9zdChvZmYpIDE6ZGV2fG90ZyAyOmRpc2FibGVkICovCiAJLyogLmhtY19tb2RlCT0gMjEsKi8JLyogMDpob3N0KG9mZikgMTpkZXYobG9vcGJhY2spIDI6aG9zdChsb29wYmFjaykgKi8KICNlbGlmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCA4MTZlY2QxLi5iZmVkNGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIAkvKiB1c2IxIGhhcyBhIE1pbmktQUIgcG9ydCBhbmQgZXh0ZXJuYWwgaXNwMTMwMSB0cmFuc2NlaXZlciAqLwogCS5vdGcJICAgID0gMiwKIAotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX09NQVAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19VU0JfT01BUCkKIAkuaG1jX21vZGUgICAgICAgPSAxOSwgICAvKiAwOmhvc3Qob2ZmKSAxOmRldnxvdGcgMjpkaXNhYmxlZCAqLwogI2VsaWYgIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIAkvKiBOT05TVEFOREFSRCBDQUJMRSBORUVERUQgKEItdG8tTWluaS1CKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggYmQ1ZjAyZS4uYzQ5Y2U4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkvKiB1c2IxIGhhcyBhIE1pbmktQUIgcG9ydCBhbmQgZXh0ZXJuYWwgaXNwMTMwMSB0cmFuc2NlaXZlciAqLwogCS5vdGcJCT0gMiwKIAotI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19VU0JfT01BUCkKIAkuaG1jX21vZGUJPSAxOSwJLyogMDpob3N0KG9mZikgMTpkZXZ8b3RnIDI6ZGlzYWJsZWQgKi8KIAkvKiAuaG1jX21vZGUJPSAyMSwqLwkvKiAwOmhvc3Qob2ZmKSAxOmRldihsb29wYmFjaykgMjpob3N0KGxvb3BiYWNrKSAqLwogI2VsaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggM2EwMjYyMS4uNzQzNmQ0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAkgKiBiZSB1c2VkLCB3aXRoIGEgTk9OU1RBTkRBUkQgZ2VuZGVyLWJlbmRpbmcgY2FibGUvZG9uZ2xlLCBhcwogCSAqIGEgcGVyaXBoZXJhbC4KIAkgKi8KLSNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCisjaWYgSVNfRU5BQkxFRChDT05GSUdfVVNCX09NQVApCiAJLnJlZ2lzdGVyX2Rldgk9IDEsCiAJLmhtY19tb2RlCT0gMCwKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCAwYThkMzM0Li4yOWU1MjYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTI2NiwzMSArMjY2LDYgQEAKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHN4MV9wYXJ0aXRpb25zKSwKIH07CiAKLSNpZmRlZiBDT05GSUdfU1gxX09MRF9GTEFTSAotLyogTVREIEludGVsIFN0cmF0YUZsYXNoIC0gb2xkIGZsYXNoZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3gxX29sZF9mbGFzaF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gT01BUF9DUzBfUEhZUywJLyogUGh5c2ljYWwgKi8KLQkJLmVuZAk9IE9NQVBfQ1MwX1BIWVMgKyBTWl8xNk0gLSAxLCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE9NQVBfQ1MxX1BIWVMsCi0JCS5lbmQJPSBPTUFQX0NTMV9QSFlTICsgU1pfOE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3gxX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnN4MV9mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAyLAotCS5yZXNvdXJjZQk9ICZzeDFfb2xkX2ZsYXNoX3Jlc291cmNlLAotfTsKLSNlbHNlCiAvKiBNVEQgSW50ZWwgNDAwMCBmbGFzaCAtIG5ldyBmbGFzaGVzICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHN4MV9uZXdfZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IE9NQVBfQ1MwX1BIWVMsCkBAIC0zMDcsNyArMjgyLDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IDEsCiAJLnJlc291cmNlCT0gJnN4MV9uZXdfZmxhc2hfcmVzb3VyY2UsCiB9OwotI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0gVVNCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKaW5kZXggZGJlZTcyOS4uMzRiNGMwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwpAQCAtMTIzLDE5ICsxMjMsOCBAQAogI3dhcm5pbmcgRW5hYmxlIDMya0h6IE9TIHRpbWVyIGluIG9yZGVyIHRvIGFsbG93IHNsZWVwIHN0YXRlcyBpbiBpZGxlCiAJdXNlX2lkbGVjdDEgPSB1c2VfaWRsZWN0MSAmIH4oMSA8PCA5KTsKICNlbHNlCi0KLQl3aGlsZSAoZW5hYmxlX2R5bl9zbGVlcCkgewotCi0jaWZkZWYgQ09ORklHX0NCVVNfVEFIVk9fVVNCCi0JCWV4dGVybiBpbnQgdmJ1c19hY3RpdmU7Ci0JCS8qIENsb2NrIHJlcXVpcmVtZW50cz8gKi8KLQkJaWYgKHZidXNfYWN0aXZlKQotCQkJYnJlYWs7Ci0jZW5kaWYKKwlpZiAoZW5hYmxlX2R5bl9zbGVlcCkKIAkJZG9fc2xlZXAgPSAxOwotCQlicmVhazsKLQl9Ci0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX09NQVBfRE1fVElNRVIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCmluZGV4IDU0M2Q5YTguLjRmOTM4M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwpAQCAtMjYyLDEyICsyNjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzYmhzX29tYXBfcGxhdGZvcm1fZGF0YSB1c2Joc19iZGF0YSBfX2luaXRkYXRhID0gewogCS5wb3J0X21vZGVbMF0gPSBPTUFQX0VIQ0lfUE9SVF9NT0RFX1BIWSwKLSNpZiBkZWZpbmVkKENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMSkgfHwgXAotCQlkZWZpbmVkKENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMV9NT0RVTEUpCi0JLnBvcnRfbW9kZVsxXSA9IE9NQVBfVVNCSFNfUE9SVF9NT0RFX1VOVVNFRCwKLSNlbHNlCiAJLnBvcnRfbW9kZVsxXSA9IE9NQVBfRUhDSV9QT1JUX01PREVfUEhZLAotI2VuZGlmCiB9OwogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMKaW5kZXggYjY4ODVlNC4uZTg3ZjJhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYwpAQCAtMTYwLDEzICsxNjAsMTMgQEAKIAlpZiAoIWZwZ2FfbWFwX2FkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCEoX19yYXdfcmVhZHcoZnBnYV9tYXBfYWRkciArIFJFR19GUEdBX1JFVikpKQorCWlmICghKHJlYWR3X3JlbGF4ZWQoZnBnYV9tYXBfYWRkciArIFJFR19GUEdBX1JFVikpKQogCQkvKiB3ZSBkb250IGhhdmUgYW4gREVCVUcgRlBHQT8/PyAqLwogCQkvKiBEZXBlbmQgb24gI2RlZmluZXMhISBkZWZhdWx0IHRvIHN0cmF0YSBib290IHJldHVybiBwYXJhbSAqLwogCQlnb3RvIHVubWFwOwogCiAJLyogUzgtRElQLU9GRiA9IDEsIFM4LURJUC1PTiA9IDAgKi8KLQljcyA9IF9fcmF3X3JlYWR3KGZwZ2FfbWFwX2FkZHIgKyBSRUdfRlBHQV9ESVBfU1dJVENIX0lOUFVUMikgJiAweGY7CisJY3MgPSByZWFkd19yZWxheGVkKGZwZ2FfbWFwX2FkZHIgKyBSRUdfRlBHQV9ESVBfU1dJVENIX0lOUFVUMikgJiAweGY7CiAKIAkvKiBFUzIuMCBTRFAncyBvbndhcmRzIDQgZGlwIHN3aXRjaGVzIGFyZSBwcm92aWRlZCBmb3IgQ1MgKi8KIAlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMxXzApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IGI4OTIwYjYuLjk0ODA5OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC00Myw3ICs0Myw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCi1zdGF0aWMgY29uc3QgY2hhciAqb21hcDI0MnhfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqb21hcDI0MnhfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJ0aSxvbWFwMjQyMCIsCiAJTlVMTCwKIH07CkBAIC02Miw3ICs2Miw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MzAKLXN0YXRpYyBjb25zdCBjaGFyICpvbWFwMjQzeF9ib2FyZHNfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpvbWFwMjQzeF9ib2FyZHNfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJInRpLG9tYXAyNDMwIiwKIAlOVUxMLAogfTsKQEAgLTgxLDcgKzgxLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLXN0YXRpYyBjb25zdCBjaGFyICpvbWFwM19ib2FyZHNfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpvbWFwM19ib2FyZHNfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJInRpLG9tYXAzNDMwIiwKIAkidGksb21hcDMiLAogCU5VTEwsCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkucmVzdGFydAk9IG9tYXAzeHh4X3Jlc3RhcnQsCiBNQUNISU5FX0VORAogCi1zdGF0aWMgY29uc3QgY2hhciAqb21hcDM2eHhfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqb21hcDM2eHhfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJ0aSxvbWFwMzZ4eCIsCiAJTlVMTCwKIH07CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkucmVzdGFydAk9IG9tYXAzeHh4X3Jlc3RhcnQsCiBNQUNISU5FX0VORAogCi1zdGF0aWMgY29uc3QgY2hhciAqb21hcDNfZ3BfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqb21hcDNfZ3BfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJ0aSxvbWFwMy1iZWFnbGUiLAogCSJ0aW1sbCxvbWFwMy1kZXZraXQ4MDAwIiwKIAlOVUxMLApAQCAtMTM3LDcgKzEzNyw3IEBACiAJLnJlc3RhcnQJPSBvbWFwM3h4eF9yZXN0YXJ0LAogTUFDSElORV9FTkQKIAotc3RhdGljIGNvbnN0IGNoYXIgKmFtMzUxN19ib2FyZHNfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICphbTM1MTdfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJ0aSxhbTM1MTciLAogCU5VTEwsCiB9OwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TT0NfQU0zM1hYCi1zdGF0aWMgY29uc3QgY2hhciAqYW0zM3h4X2JvYXJkc19jb21wYXRbXSBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgKmFtMzN4eF9ib2FyZHNfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJInRpLGFtMzN4eCIsCiAJTlVMTCwKIH07CkBAIC0xNzcsNyArMTc3LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLXN0YXRpYyBjb25zdCBjaGFyICpvbWFwNF9ib2FyZHNfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpvbWFwNF9ib2FyZHNfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJInRpLG9tYXA0NDYwIiwKIAkidGksb21hcDQ0MzAiLAogCSJ0aSxvbWFwNCIsCkBAIC0xOTksNyArMTk5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NPQ19PTUFQNQotc3RhdGljIGNvbnN0IGNoYXIgKm9tYXA1X2JvYXJkc19jb21wYXRbXSBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgKm9tYXA1X2JvYXJkc19jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkidGksb21hcDU0MzIiLAogCSJ0aSxvbWFwNTQzMCIsCiAJInRpLG9tYXA1IiwKQEAgLTIyMSw3ICsyMjEsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU09DX0FNNDNYWAotc3RhdGljIGNvbnN0IGNoYXIgKmFtNDNfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqYW00M19ib2FyZHNfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJInRpLGFtNDM3MiIsCiAJInRpLGFtNDMiLAogCU5VTEwsCkBAIC0yNDAsMTMgKzI0MCwxMyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU09DX0RSQTdYWAotc3RhdGljIGNvbnN0IGNoYXIgKmRyYTd4eF9ib2FyZHNfY29tcGF0W10gX19pbml0ZGF0YSA9IHsKLQkidGksZHJhN3h4IiwKK3N0YXRpYyBjb25zdCBjaGFyICpkcmE3NHhfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0geworCSJ0aSxkcmE3NDIiLAogCSJ0aSxkcmE3IiwKIAlOVUxMLAogfTsKIAotRFRfTUFDSElORV9TVEFSVChEUkE3WFhfRFQsICJHZW5lcmljIERSQTdYWCAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCitEVF9NQUNISU5FX1NUQVJUKERSQTc0WF9EVCwgIkdlbmVyaWMgRFJBNzRYIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuc21wCQk9IHNtcF9vcHMob21hcDRfc21wX29wcyksCiAJLm1hcF9pbwkJPSBvbWFwNV9tYXBfaW8sCkBAIC0yNTUsNyArMjU1LDI0IEBACiAJLmluaXRfaXJxCT0gb21hcF9naWNfb2ZfaW5pdCwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCiAJLmluaXRfdGltZQk9IG9tYXA1X3JlYWx0aW1lX3RpbWVyX2luaXQsCi0JLmR0X2NvbXBhdAk9IGRyYTd4eF9ib2FyZHNfY29tcGF0LAorCS5kdF9jb21wYXQJPSBkcmE3NHhfYm9hcmRzX2NvbXBhdCwKKwkucmVzdGFydAk9IG9tYXA0NHh4X3Jlc3RhcnQsCitNQUNISU5FX0VORAorCitzdGF0aWMgY29uc3QgY2hhciAqZHJhNzJ4X2JvYXJkc19jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKKwkidGksZHJhNzIyIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChEUkE3MlhfRFQsICJHZW5lcmljIERSQTcyWCAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCisJLm1hcF9pbwkJPSBvbWFwNV9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBkcmE3eHhfaW5pdF9lYXJseSwKKwkuaW5pdF9sYXRlCT0gZHJhN3h4X2luaXRfbGF0ZSwKKwkuaW5pdF9pcnEJPSBvbWFwX2dpY19vZl9pbml0LAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2dlbmVyaWNfaW5pdCwKKwkuaW5pdF90aW1lCT0gb21hcDVfcmVhbHRpbWVfdGltZXJfaW5pdCwKKwkuZHRfY29tcGF0CT0gZHJhNzJ4X2JvYXJkc19jb21wYXQsCiAJLnJlc3RhcnQJPSBvbWFwNDR4eF9yZXN0YXJ0LAogTUFDSElORV9FTkQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGQ2ZWQ4MTkuLjY2MGJmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JfcGh5X2dlbl94Y2Vpdi5oPgogCiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzc3RhbGtlci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3N0YWxrZXIuYwppbmRleCAxMTllZmFmLi5hMmUwMzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzc3RhbGtlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNzdGFsa2VyLmMKQEAgLTEyMSwxMSArMTIxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY29ubmVjdG9yX2F0dl9wbGF0Zm9ybV9kYXRhIG9tYXAzc3RhbGtlcl90dl9wZGF0YSA9IHsKIAkubmFtZSA9ICJ0diIsCiAJLnNvdXJjZSA9ICJ2ZW5jLjAiLAotI2lmIGRlZmluZWQoQ09ORklHX09NQVAyX1ZFTkNfT1VUX1RZUEVfU1ZJREVPKQotCS5jb25uZWN0b3JfdHlwZSA9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQMl9WRU5DX09VVF9UWVBFX0NPTVBPU0lURSkKIAkuY29ubmVjdG9yX3R5cGUgPSBPTUFQX0RTU19WRU5DX1RZUEVfQ09NUE9TSVRFLAotI2VuZGlmCiAJLmludmVydF9wb2xhcml0eSA9IGZhbHNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxsY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxsY29yZS5jCmluZGV4IDNmZjMyNTQuLjU5Y2YzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGxjb3JlLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlpZiAoIWRkKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSByZWFkbF9yZWxheGVkKGRkLT5tdWx0X2RpdjFfcmVnKTsKIAkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsICY9IH4oZGQtPm11bHRfbWFzayB8CiAJCQkJCSAgIGRkLT5kaXYxX21hc2spOwogCQlkaXYgPSAoKGN1cnJfcHJjbV9zZXQtPnh0YWxfc3BlZWQgLyAxMDAwMDAwKSAtIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9vc2MuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfb3NjLmMKaW5kZXggMTlmNTRkNC4uMDcxN2RmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9vc2MuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jCkBAIC0zOSw5ICszOSw5IEBACiB7CiAJdTMyIHBjYzsKIAotCXBjYyA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOworCXBjYyA9IHJlYWRsX3JlbGF4ZWQocHJjbV9jbGtzcmNfY3RybCk7CiAKLQlfX3Jhd193cml0ZWwocGNjICYgfk9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7CisJd3JpdGVsX3JlbGF4ZWQocGNjICYgfk9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3LDkgKzU3LDkgQEAKIHsKIAl1MzIgcGNjOwogCi0JcGNjID0gX19yYXdfcmVhZGwocHJjbV9jbGtzcmNfY3RybCk7CisJcGNjID0gcmVhZGxfcmVsYXhlZChwcmNtX2Nsa3NyY19jdHJsKTsKIAotCV9fcmF3X3dyaXRlbChwY2MgfCBPTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssIHByY21fY2xrc3JjX2N0cmwpOworCXdyaXRlbF9yZWxheGVkKHBjYyB8IE9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsa19odyAqY2xrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9zeXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfc3lzLmMKaW5kZXggZjQ2N2QwNy4uNThkZDNhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9zeXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3N5cy5jCkBAIC0zMyw3ICszMyw3IEBACiB7CiAJdTMyIGRpdjsKIAotCWRpdiA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOworCWRpdiA9IHJlYWRsX3JlbGF4ZWQocHJjbV9jbGtzcmNfY3RybCk7CiAJZGl2ICY9IE9NQVBfU1lTQ0xLRElWX01BU0s7CiAJZGl2ID4+PSBPTUFQX1NZU0NMS0RJVl9TSElGVDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oCmluZGV4IGYxN2YwMDYuLjgyYzM3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmgKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJvbWFwX2h3bW9kLmgiCiAKIC8qCiAgKiBDbG9ja2RvbWFpbiBmbGFncwpAQCAtOTgsNiArOTcsOCBAQAogLyogUG9zc2libGUgZmxhZ3MgZm9yIHN0cnVjdCBjbG9ja2RvbWFpbi5fZmxhZ3MgKi8KICNkZWZpbmUgX0NMS0RNX0ZMQUdfSFdTVVBfRU5BQkxFRAkJQklUKDApCiAKK3N0cnVjdCBvbWFwX2h3bW9kOworCiAvKioKICAqIHN0cnVjdCBjbG9ja2RvbWFpbiAtIE9NQVAgY2xvY2tkb21haW4KICAqIEBuYW1lOiBjbG9ja2RvbWFpbiBuYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguYwppbmRleCBjZTI1YWJiLi44YmU2ZWE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmMKQEAgLTE4LDkgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiaW9tYXAuaCIKLSNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJwcm0yeHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbTJ4eHguaCIKQEAgLTM5MCw3ICszODcsNyBAQAogCXRtcCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMMSkgJgogCQlPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY29yZSB8IHRtcCwgQ09SRV9NT0QsIENNX0NMS1NFTDEpOwotCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwlpZiAobWRtKQogCQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKG1kbSwgT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKTsKIH0KIApAQCAtNDA1LDE5ICs0MDIsMTEgQEAKIAogaW50IF9faW5pdCBvbWFwMnh4eF9jbV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKLQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gY21fcmVnaXN0ZXIoJm9tYXAyeHh4X2NtX2xsX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDJ4eHhfY21fZXhpdCh2b2lkKQogewotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybjsKLQotCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlXQVJOKGNtX3VucmVnaXN0ZXIoJm9tYXAyeHh4X2NtX2xsX2RhdGEpLAotCSAgICAgIiVzOiBjbV9sbF9kYXRhIGZ1bmN0aW9uIHBvaW50ZXIgbWlzbWF0Y2hcbiIsIF9fZnVuY19fKTsKKwljbV91bnJlZ2lzdGVyKCZvbWFwMnh4eF9jbV9sbF9kYXRhKTsKIH0KIF9fZXhpdGNhbGwob21hcDJ4eHhfY21fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmgKaW5kZXggYmZiZDE2Zi4uNzI5MjhhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguaApAQCAtNTIsMTIgKzUyLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KQogewotCXJldHVybiBfX3Jhd19yZWFkbChjbV9iYXNlICsgbW9kdWxlICsgaWR4KTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChjbV9iYXNlICsgbW9kdWxlICsgaWR4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2NtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBjbV9iYXNlICsgbW9kdWxlICsgaWR4KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGNtX2Jhc2UgKyBtb2R1bGUgKyBpZHgpOwogfQogCiAvKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIGEgQ00gbW9kdWxlLiBDYWxsZXIgbXVzdCBsb2NrICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguYwppbmRleCA0MGEyMmU1Li5iM2Y5OWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmMKQEAgLTUwLDEzICs1MCwxMyBAQAogLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgQ00gaW5zdGFuY2UgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGFtMzN4eF9jbV9yZWFkX3JlZyh1MTYgaW5zdCwgdTE2IGlkeCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoY21fYmFzZSArIGluc3QgKyBpZHgpOworCXJldHVybiByZWFkbF9yZWxheGVkKGNtX2Jhc2UgKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbTMzeHhfY21fd3JpdGVfcmVnKHUzMiB2YWwsIHUxNiBpbnN0LCB1MTYgaWR4KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIGNtX2Jhc2UgKyBpbnN0ICsgaWR4KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGNtX2Jhc2UgKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBDTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmgKaW5kZXggY2ZiODg5MS4uMTVhNzc4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5oCkBAIC0xNywxMSArMTcsOCBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ01fMzNYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV8zM1hYX0gKIAotI2luY2x1ZGUgImNvbW1vbi5oIgotCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTMzeHguaCIKLSNpbmNsdWRlICJpb21hcC5oIgogCiAvKiBDTSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQU0zM1hYX0NNX0JBU0UJCTB4NDRlMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5jCmluZGV4IGY2ZjAyODguLjEyOWE0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguYwpAQCAtMTgsOSArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJpb21hcC5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20zeHh4LmgiCkBAIC0zODgsNyArMzg1LDggQEAKIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9DTEtTRUwxKTsKIAljbV9jb250ZXh0Lml2YTJfY21fY2xrc2VsMiA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9JVkEyX01PRCwgQ01fQ0xLU0VMMik7Ci0JY21fY29udGV4dC5jbV9zeXNjb25maWcgPSBfX3Jhd19yZWFkbChPTUFQMzQzMF9DTV9TWVNDT05GSUcpOworCWNtX2NvbnRleHQuY21fc3lzY29uZmlnID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzNDMwX0NNX1NZU0NPTkZJRyk7CiAJY21fY29udGV4dC5zZ3hfY21fY2xrc2VsID0KIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0NMS1NFTCk7CiAJY21fY29udGV4dC5kc3NfY21fY2xrc2VsID0KQEAgLTQxOCw3ICs0MTYsOCBAQAogCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNSk7CiAJY21fY29udGV4dC5wbGxfY21fY2xrZW4yID0KIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS0VOMik7Ci0JY21fY29udGV4dC5jbV9wb2xjdHJsID0gX19yYXdfcmVhZGwoT01BUDM0MzBfQ01fUE9MQ1RSTCk7CisJY21fY29udGV4dC5jbV9wb2xjdHJsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzNDMwX0NNX1BPTENUUkwpOwogCWNtX2NvbnRleHQuaXZhMl9jbV9mY2xrZW4gPQogCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTik7CiAJY21fY29udGV4dC5pdmEyX2NtX2Nsa2VuX3BsbCA9CkBAIC01MTksNyArNTE4LDggQEAKIAkJCSAgICAgICBDTV9DTEtTRUwxKTsKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuaXZhMl9jbV9jbGtzZWwyLCBPTUFQMzQzMF9JVkEyX01PRCwKIAkJCSAgICAgICBDTV9DTEtTRUwyKTsKLQlfX3Jhd193cml0ZWwoY21fY29udGV4dC5jbV9zeXNjb25maWcsIE9NQVAzNDMwX0NNX1NZU0NPTkZJRyk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNtX3N5c2NvbmZpZywgT0NQX01PRCwKKwkJCSAgICAgICBPTUFQMzQzMF9DTV9TWVNDT05GSUcpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5zZ3hfY21fY2xrc2VsLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAogCQkJICAgICAgIENNX0NMS1NFTCk7CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmRzc19jbV9jbGtzZWwsIE9NQVAzNDMwX0RTU19NT0QsCkBAIC01NDcsNyArNTQ3LDggQEAKIAkJCSAgICAgICBPTUFQMzQzMEVTMl9DTV9DTEtTRUw1KTsKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQucGxsX2NtX2Nsa2VuMiwgUExMX01PRCwKIAkJCSAgICAgICBPTUFQMzQzMEVTMl9DTV9DTEtFTjIpOwotCV9fcmF3X3dyaXRlbChjbV9jb250ZXh0LmNtX3BvbGN0cmwsIE9NQVAzNDMwX0NNX1BPTENUUkwpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jbV9wb2xjdHJsLCBPQ1BfTU9ELAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1BPTENUUkwpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5pdmEyX2NtX2ZjbGtlbiwgT01BUDM0MzBfSVZBMl9NT0QsCiAJCQkgICAgICAgQ01fRkNMS0VOKTsKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuaXZhMl9jbV9jbGtlbl9wbGwsIE9NQVAzNDMwX0lWQTJfTU9ELApAQCAtNjY5LDE5ICs2NzAsMTEgQEAKIAogaW50IF9faW5pdCBvbWFwM3h4eF9jbV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gY21fcmVnaXN0ZXIoJm9tYXAzeHh4X2NtX2xsX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDN4eHhfY21fZXhpdCh2b2lkKQogewotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybjsKLQotCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlXQVJOKGNtX3VucmVnaXN0ZXIoJm9tYXAzeHh4X2NtX2xsX2RhdGEpLAotCSAgICAgIiVzOiBjbV9sbF9kYXRhIGZ1bmN0aW9uIHBvaW50ZXIgbWlzbWF0Y2hcbiIsIF9fZnVuY19fKTsKKwljbV91bnJlZ2lzdGVyKCZvbWFwM3h4eF9jbV9sbF9kYXRhKTsKIH0KIF9fZXhpdGNhbGwob21hcDN4eHhfY21fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguaAppbmRleCA4MjI0YzkxLi43YTE2YjU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmgKQEAgLTI5LDkgKzI5LDggQEAKICAqIFRoZXNlIHJlZ2lzdGVycyBhcHBlYXIgb25jZSBwZXIgQ00gbW9kdWxlLgogICovCiAKLSNkZWZpbmUgT01BUDM0MzBfQ01fUkVWSVNJT04JCU9NQVAzNFhYX0NNX1JFR0FERFIoT0NQX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQMzQzMF9DTV9TWVNDT05GSUcJCU9NQVAzNFhYX0NNX1JFR0FERFIoT0NQX01PRCwgMHgwMDEwKQotI2RlZmluZSBPTUFQMzQzMF9DTV9QT0xDVFJMCQlPTUFQMzRYWF9DTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5YykKKyNkZWZpbmUgT01BUDM0MzBfQ01fU1lTQ09ORklHCQkweDAwMTAKKyNkZWZpbmUgT01BUDM0MzBfQ01fUE9MQ1RSTAkJMHgwMDljCiAKICNkZWZpbmUgT01BUDNfQ01fQ0xLT1VUX0NUUkxfT0ZGU0VUCTB4MDA3MAogI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTAkJT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NDUl9NT0QsIDB4MDA3MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5jCmluZGV4IDUzNWQ2NmUuLmZlNWNjN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguYwpAQCAtMTgsMzUgKzE4LDMyIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgImlvbWFwLmgiCi0jaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbTFfNDR4eC5oIgogI2luY2x1ZGUgImNtMl80NHh4LmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCiAKIC8qIENNMSBoYXJkd2FyZSBtb2R1bGUgbG93LWxldmVsIGZ1bmN0aW9ucyAqLwogCiAvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gQ00xICovCiB1MzIgb21hcDRfY20xX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVA0NFhYX0NNMV9SRUdBRERSKGluc3QsIHJlZykpOworCXJldHVybiByZWFkbF9yZWxheGVkKGNtX2Jhc2UgKyBpbnN0ICsgcmVnKTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIENNMSAqLwogdm9pZCBvbWFwNF9jbTFfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgT01BUDQ0WFhfQ00xX1JFR0FERFIoaW5zdCwgcmVnKSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBjbV9iYXNlICsgaW5zdCArIHJlZyk7CiB9CiAKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBDTTIgKi8KIHUzMiBvbWFwNF9jbTJfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDQ0WFhfQ00yX1JFR0FERFIoaW5zdCwgcmVnKSk7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoY20yX2Jhc2UgKyBpbnN0ICsgcmVnKTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIENNMiAqLwogdm9pZCBvbWFwNF9jbTJfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgT01BUDQ0WFhfQ00yX1JFR0FERFIoaW5zdCwgcmVnKSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBjbTJfYmFzZSArIGluc3QgKyByZWcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21fY29tbW9uLmMKaW5kZXggNDBiM2I1YS4uOGY2YzQ3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtX2NvbW1vbi5jCkBAIC0xNCwxMSArMTQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KIAogI2luY2x1ZGUgImNtMnh4eC5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgogI2luY2x1ZGUgImNtNDR4eC5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgogCiAvKgogICogY21fbGxfZGF0YTogZnVuY3Rpb24gcG9pbnRlcnMgdG8gU29DLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwppbmRleCBmNWM0NzMxLi4xMmFjYTU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJpb21hcC5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbTFfNDR4eC5oIgpAQCAtMzAsMTIgKzI4LDE4IEBACiAjaW5jbHVkZSAiY200NHh4LmgiCiAjaW5jbHVkZSAiY21pbnN0NDR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgInByY200NHh4LmgiCiAjaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgInByY21fbXB1NDR4eC5oIgogI2luY2x1ZGUgInByY20tY29tbW9uLmgiCiAKKyNkZWZpbmUgT01BUDQ0MzBfSURMRVNUX1NISUZUCQkxNgorI2RlZmluZSBPTUFQNDQzMF9JRExFU1RfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLVFJDVFJMX1NISUZUCTAKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfTU9EVUxFTU9ERV9TSElGVAkwCisjZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfTUFTSwkoMHgzIDw8IDApCisKIC8qCiAgKiBDTEtDVFJMX0lETEVTVF8qOiBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBDTV8qX0NMS0NUUkwuSURMRVNUIGJpdGZpZWxkOgogICoKQEAgLTExNiw3ICsxMjAsNyBAQAogCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKIAkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CiAJICAgICAgICFfY21fYmFzZXNbcGFydF0pOwotCXJldHVybiBfX3Jhd19yZWFkbChfY21fYmFzZXNbcGFydF0gKyBpbnN0ICsgaWR4KTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChfY21fYmFzZXNbcGFydF0gKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00gaW5zdGFuY2UgKi8KQEAgLTEyNSw3ICsxMjksNyBAQAogCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKIAkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CiAJICAgICAgICFfY21fYmFzZXNbcGFydF0pOwotCV9fcmF3X3dyaXRlbCh2YWwsIF9jbV9iYXNlc1twYXJ0XSArIGluc3QgKyBpZHgpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgX2NtX2Jhc2VzW3BhcnRdICsgaW5zdCArIGlkeCk7CiB9CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gQ00xLiBDYWxsZXIgbXVzdCBsb2NrICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCmluZGV4IDQ0YmI0ZDUuLjc1MWYzNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCkBAIC0xNTEsMzIgKzE1MSwzMiBAQAogCiB1OCBvbWFwX2N0cmxfcmVhZGIodTE2IG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGIoT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CisJcmV0dXJuIHJlYWRiX3JlbGF4ZWQoT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CiB9CiAKIHUxNiBvbWFwX2N0cmxfcmVhZHcodTE2IG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZHcoT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CisJcmV0dXJuIHJlYWR3X3JlbGF4ZWQoT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CiB9CiAKIHUzMiBvbWFwX2N0cmxfcmVhZGwodTE2IG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CiB9CiAKIHZvaWQgb21hcF9jdHJsX3dyaXRlYih1OCB2YWwsIHUxNiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGViKHZhbCwgT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CisJd3JpdGViX3JlbGF4ZWQodmFsLCBPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKIH0KIAogdm9pZCBvbWFwX2N0cmxfd3JpdGV3KHUxNiB2YWwsIHUxNiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGV3KHZhbCwgT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CisJd3JpdGV3X3JlbGF4ZWQodmFsLCBPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKIH0KIAogdm9pZCBvbWFwX2N0cmxfd3JpdGVsKHUzMiB2YWwsIHUxNiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgT01BUF9DVFJMX1JFR0FERFIob2Zmc2V0KSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKIH0KIAogLyoKQEAgLTE4OCwxMiArMTg4LDEyIEBACiAKIHUzMiBvbWFwNF9jdHJsX3BhZF9yZWFkbCh1MTYgb2Zmc2V0KQogewotCXJldHVybiBfX3Jhd19yZWFkbChPTUFQNF9DVFJMX1BBRF9SRUdBRERSKG9mZnNldCkpOworCXJldHVybiByZWFkbF9yZWxheGVkKE9NQVA0X0NUUkxfUEFEX1JFR0FERFIob2Zmc2V0KSk7CiB9CiAKIHZvaWQgb21hcDRfY3RybF9wYWRfd3JpdGVsKHUzMiB2YWwsIHUxNiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgT01BUDRfQ1RSTF9QQURfUkVHQUREUihvZmZzZXQpKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIE9NQVA0X0NUUkxfUEFEX1JFR0FERFIob2Zmc2V0KSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJICoKIAkgKiBYWFggVGhpcyBzaG91bGQgdXNlIHNvbWUgb21hcF9jdHJsX3dyaXRlbCgpLXR5cGUgZnVuY3Rpb24KIAkgKi8KLQlfX3Jhd193cml0ZWwobCwgT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzQzWF9TQ1JBVENIUEFEICsgNCkpOworCXdyaXRlbF9yZWxheGVkKGwsIE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0M1hfU0NSQVRDSFBBRCArIDQpKTsKIH0KIAogI2VuZGlmCkBAIC0yODUsNyArMjg1LDcgQEAKIAlpZiAob21hcDJfcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9HUl9NT0QsIE9NQVAzX1BSTV9SU1RTVF9PRkZTRVQpICYKIAkgICAgT01BUDM0MzBfR0xPQkFMX0NPTERfUlNUX01BU0spIHsKIAkJZm9yICggOyBvZmZzZXQgPD0gbWF4X29mZnNldDsgb2Zmc2V0ICs9IDB4NCkKLQkJCV9fcmF3X3dyaXRlbCgweDAsICh2X2FkZHIgKyBvZmZzZXQpKTsKKwkJCXdyaXRlbF9yZWxheGVkKDB4MCwgKHZfYWRkciArIG9mZnNldCkpOwogCQlvbWFwMl9wcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQMzQzMF9HTE9CQUxfQ09MRF9SU1RfTUFTSywKIAkJCQkJICAgT01BUDM0MzBfR1JfTU9ELAogCQkJCQkgICBPTUFQM19QUk1fUlNUU1RfT0ZGU0VUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IDU2ODljODguLmE2ZDJjZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwpAQCAtOTEsNyArOTEsNyBAQAogCWFkZHIgKz0gcmVnX21hcFtyZWddLm9mZnNldDsKIAlhZGRyICs9IHJlZ19tYXBbcmVnXS5zdHJpZGUgKiBsY2g7CiAKLQlfX3Jhd193cml0ZWwodmFsLCBhZGRyKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBkbWFfcmVhZChpbnQgcmVnLCBpbnQgbGNoKQpAQCAtMTAxLDcgKzEwMSw3IEBACiAJYWRkciArPSByZWdfbWFwW3JlZ10ub2Zmc2V0OwogCWFkZHIgKz0gcmVnX21hcFtyZWddLnN0cmlkZSAqIGxjaDsKIAotCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcDJfY2xlYXJfZG1hKGludCBsY2gpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYwppbmRleCA0MzQ5ZTgyLi4xN2NkMzkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIHN0YXRpYyBib29sIGdwbWNfaHdlY2NfYmNoX2NhcGFibGUoZW51bSBvbWFwX2VjYyBlY2Nfb3B0KQogewogCS8qIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IGFsbCBFQ0Mgc2NoZW1lcyAqLwotCWlmIChzb2NfaXNfYW0zM3h4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkgfHwKKwlpZiAoc29jX2lzX2FtMzN4eCgpIHx8IHNvY19pc19hbTQzeHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSB8fAogCQkgc29jX2lzX29tYXA1NHh4KCkgfHwgc29jX2lzX2RyYTd4eCgpKQogCQlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwppbmRleCA5ZmU4Yzk0Li44NTJiMTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpAQCAtMTcwLDEyICsxNzAsMTIgQEAKIAogc3RhdGljIHZvaWQgZ3BtY193cml0ZV9yZWcoaW50IGlkeCwgdTMyIHZhbCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBncG1jX2Jhc2UgKyBpZHgpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgZ3BtY19iYXNlICsgaWR4KTsKIH0KIAogc3RhdGljIHUzMiBncG1jX3JlYWRfcmVnKGludCBpZHgpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGdwbWNfYmFzZSArIGlkeCk7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoZ3BtY19iYXNlICsgaWR4KTsKIH0KIAogdm9pZCBncG1jX2NzX3dyaXRlX3JlZyhpbnQgY3MsIGludCBpZHgsIHUzMiB2YWwpCkBAIC0xODMsNyArMTgzLDcgQEAKIAl2b2lkIF9faW9tZW0gKnJlZ19hZGRyOwogCiAJcmVnX2FkZHIgPSBncG1jX2Jhc2UgKyBHUE1DX0NTMF9PRkZTRVQgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4OwotCV9fcmF3X3dyaXRlbCh2YWwsIHJlZ19hZGRyKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHJlZ19hZGRyKTsKIH0KIAogc3RhdGljIHUzMiBncG1jX2NzX3JlYWRfcmVnKGludCBjcywgaW50IGlkeCkKQEAgLTE5MSw3ICsxOTEsNyBAQAogCXZvaWQgX19pb21lbSAqcmVnX2FkZHI7CiAKIAlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwX09GRlNFVCArIChjcyAqIEdQTUNfQ1NfU0laRSkgKyBpZHg7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKHJlZ19hZGRyKTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChyZWdfYWRkcik7CiB9CiAKIC8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBncG1jX2ZjayB0byBjbG9jayBmcmFtZXdvcmsgYW5kIHVzZSBpdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oZHExdy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oZHExdy5jCmluZGV4IGNiYzhlM2MuLmY3OGI0YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaGRxMXcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hkcTF3LmMKQEAgLTc2LDYgKzc2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBDT05GSUdfT0YKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9oZHEodm9pZCkKIHsKIAlpbnQgaWQgPSAtMTsKQEAgLTk1LDMgKzk2LDQgQEAKIAlyZXR1cm4gMDsKIH0KIG9tYXBfYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfaGRxKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCmluZGV4IDE1NzQxMmUuLjQzOTY5ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKQEAgLTk0LDcgKzk0LDcgQEAKICNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzQ0WFhfMgkweDAyMGMKICNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzQ0WFhfMwkweDAyMTAKIAotI2RlZmluZSByZWFkX3RhcF9yZWcocmVnKQlfX3Jhd19yZWFkbCh0YXBfYmFzZSAgKyAocmVnKSkKKyNkZWZpbmUgcmVhZF90YXBfcmVnKHJlZykJcmVhZGxfcmVsYXhlZCh0YXBfYmFzZSAgKyAocmVnKSkKIAogc3RydWN0IG9tYXBfaWQgewogCXUxNgloYXdrZXllOwkvKiBTaWxpY29uIHR5cGUgKEhhd2tleWUgaWQpICovCkBAIC02MjgsNiArNjI4LDQxIEBACiAJcHJfaW5mbygiJXMgJXNcbiIsIHNvY19uYW1lLCBzb2NfcmV2KTsKIH0KIAordm9pZCBfX2luaXQgZHJhN3h4eF9jaGVja19yZXZpc2lvbih2b2lkKQoreworCXUzMiBpZGNvZGU7CisJdTE2IGhhd2tleWU7CisJdTggcmV2OworCisJaWRjb2RlID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0lEQ09ERSk7CisJaGF3a2V5ZSA9IChpZGNvZGUgPj4gMTIpICYgMHhmZmZmOworCXJldiA9IChpZGNvZGUgPj4gMjgpICYgMHhmZjsKKwlzd2l0Y2ggKGhhd2tleWUpIHsKKwljYXNlIDB4Yjk5MDoKKwkJc3dpdGNoIChyZXYpIHsKKwkJY2FzZSAwOgorCQkJb21hcF9yZXZpc2lvbiA9IERSQTc1Ml9SRVZfRVMxXzA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQlkZWZhdWx0OgorCQkJb21hcF9yZXZpc2lvbiA9IERSQTc1Ml9SRVZfRVMxXzE7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIGRlZmF1bHQgdG8gbGF0ZXN0IHNpbGljb24gcmV2IGFzIGRlZmF1bHQqLworCQlwcl93YXJuKCIlczogdW5rbm93biBpZGNvZGU9MHglMDh4IChoYXdrZXllPTB4JTA4eCxyZXY9MHglZClcbiIsCisJCQlfX2Z1bmNfXywgaWRjb2RlLCBoYXdrZXllLCByZXYpOworCQlvbWFwX3JldmlzaW9uID0gRFJBNzUyX1JFVl9FUzFfMTsKKwl9CisKKwlzcHJpbnRmKHNvY19uYW1lLCAiRFJBJTAzeCIsIG9tYXBfcmV2KCkgPj4gMTYpOworCXNwcmludGYoc29jX3JldiwgIkVTJWQuJWQiLCAob21hcF9yZXYoKSA+PiAxMikgJiAweGYsCisJCShvbWFwX3JldigpID4+IDgpICYgMHhmKTsKKworCXByX2luZm8oIiVzICVzXG4iLCBzb2NfbmFtZSwgc29jX3Jldik7Cit9CisKIC8qCiAgKiBTZXQgdXAgdGhpbmdzIGZvciBtYXBfaW8gYW5kIHByb2Nlc3NvciBkZXRlY3Rpb24gbGF0ZXIgb24uIEdldHMgY2FsbGVkCiAgKiBwcmV0dHkgbXVjaCBmaXJzdCB0aGluZyBmcm9tIGJvYXJkIGluaXQuIEZvciBtdWx0aS1vbWFwLCB0aGlzIGdldHMKQEAgLTY2OSw2ICs3MDQsOCBAQAogCQlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJPTUFQNSIpOwogCWVsc2UgaWYgKHNvY19pc19hbTQzeHgoKSkKIAkJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiQU00M3h4Iik7CisJZWxzZSBpZiAoc29jX2lzX2RyYTd4eCgpKQorCQlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJEUkE3Iik7CiAJZWxzZQogCQlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJVbmtub3duIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggZjE0ZjlhYy4uNGVjM2I0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtNjkzLDYgKzY5Myw3IEBACiAJb21hcF9wcm1fYmFzZV9pbml0KCk7CiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwNDR4eF9wcm1faW5pdCgpOworCWRyYTd4eHhfY2hlY2tfcmV2aXNpb24oKTsKIAlkcmE3eHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlkcmE3eHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAlkcmE3eHhfaHdtb2RfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKaW5kZXggNjAzN2E5YS4uMzViODU5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCkBAIC04MywxMiArODMsMTIgQEAKIAogc3RhdGljIHZvaWQgaW50Y19iYW5rX3dyaXRlX3JlZyh1MzIgdmFsLCBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaywgdTE2IHJlZykKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBiYW5rLT5iYXNlX3JlZyArIHJlZyk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBiYW5rLT5iYXNlX3JlZyArIHJlZyk7CiB9CiAKIHN0YXRpYyB1MzIgaW50Y19iYW5rX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rLCB1MTYgcmVnKQogewotCXJldHVybiBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIHJlZyk7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoYmFuay0+YmFzZV9yZWcgKyByZWcpOwogfQogCiAvKiBYWFg6IEZJUSBhbmQgYWRkaXRpb25hbCBJTlRDIHN1cHBvcnQgKG9ubHkgTVBVIGF0IHRoZSBtb21lbnQpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCA0ODA5NGI1Li5mZDg4ZWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTcwLDE4ICs3MCwxOCBAQAogdTE2IG9tYXBfbXV4X3JlYWQoc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLCB1MTYgcmVnKQogewogCWlmIChwYXJ0aXRpb24tPmZsYWdzICYgT01BUF9NVVhfUkVHXzhCSVQpCi0JCXJldHVybiBfX3Jhd19yZWFkYihwYXJ0aXRpb24tPmJhc2UgKyByZWcpOworCQlyZXR1cm4gcmVhZGJfcmVsYXhlZChwYXJ0aXRpb24tPmJhc2UgKyByZWcpOwogCWVsc2UKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KHBhcnRpdGlvbi0+YmFzZSArIHJlZyk7CisJCXJldHVybiByZWFkd19yZWxheGVkKHBhcnRpdGlvbi0+YmFzZSArIHJlZyk7CiB9CiAKIHZvaWQgb21hcF9tdXhfd3JpdGUoc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLCB1MTYgdmFsLAogCQkJICAgdTE2IHJlZykKIHsKIAlpZiAocGFydGl0aW9uLT5mbGFncyAmIE9NQVBfTVVYX1JFR184QklUKQotCQlfX3Jhd193cml0ZWIodmFsLCBwYXJ0aXRpb24tPmJhc2UgKyByZWcpOworCQl3cml0ZWJfcmVsYXhlZCh2YWwsIHBhcnRpdGlvbi0+YmFzZSArIHJlZyk7CiAJZWxzZQotCQlfX3Jhd193cml0ZXcodmFsLCBwYXJ0aXRpb24tPmJhc2UgKyByZWcpOworCQl3cml0ZXdfcmVsYXhlZCh2YWwsIHBhcnRpdGlvbi0+YmFzZSArIHJlZyk7CiB9CiAKIHZvaWQgb21hcF9tdXhfd3JpdGVfYXJyYXkoc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKaW5kZXggNDBjNWQ1Zi4uNDk5M2Q0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaGVhZHNtcC5TCkBAIC0zMSwxMCArMzEsNiBAQAogICogcmVnaXN0ZXIgQXV4Q29yZUJvb3QwLgogICovCiBFTlRSWShvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCkKLS5hcm0KLVRIVU1CKCBhZHIgICAgIHI5LCBCU1lNKHdhaXQpICApICAgICAgIEAgQ1BVIG1heSBiZSBlbnRlcmVkIGluIEFSTSBtb2RlLgotVEhVTUIoIGJ4ICAgICAgcjkgICAgICAgICAgICAgICkgICAgICAgQCBJZiB0aGlzIGlzIGEgVGh1bWItMiBrZXJuZWwsCi1USFVNQiggLnRodW1iICAgICAgICAgICAgICAgICAgKSAgICAgICBAIHN3aXRjaCB0byBUaHVtYiBub3cuCiB3YWl0OglsZHIJcjIsID1BVVhfQ09SRV9CT09UMF9QQQlAIHJlYWQgZnJvbSBBdXhDb3JlQm9vdDAKIAlsZHIJcjAsIFtyMl0KIAltb3YJcjAsIHIwLCBsc3IgIzUKQEAgLTQzLDcgKzM5LDcgQEAKIAljbXAJcjAsIHI0CiAJYm5lCXdhaXQKIAliCXNlY29uZGFyeV9zdGFydHVwCi1FTkQob21hcDVfc2Vjb25kYXJ5X3N0YXJ0dXApCitFTkRQUk9DKG9tYXA1X3NlY29uZGFyeV9zdGFydHVwKQogLyoKICAqIE9NQVA0IHNwZWNpZmljIGVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVIHRvIGp1bXAgZnJvbSBST00KICAqIGNvZGUuICBUaGlzIHJvdXRpbmUgYWxzbyBwcm92aWRlcyBhIGhvbGRpbmcgZmxhZyBpbnRvIHdoaWNoCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaG90cGx1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhvdHBsdWcuYwppbmRleCA0NThmNzJmLi45NzE3OTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaG90cGx1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1ob3RwbHVnLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkJaWYgKG9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCgweDAsIDB4MjAwKSAhPSAweDApCiAJCQlwcl9lcnIoIlNlY3VyZSBjbGVhciBzdGF0dXMgZmFpbGVkXG4iKTsKIAl9IGVsc2UgewotCQlfX3Jhd193cml0ZWwoMCwgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8wKTsKKwkJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8wKTsKIAl9CiAKIApAQCAtNTMsNyArNTMsNyBAQAogCQkJYm9vdF9jcHUgPSBvbWFwX3JlYWRfYXV4Y29yZWJvb3QwKCk7CiAJCWVsc2UKIAkJCWJvb3RfY3B1ID0KLQkJCQlfX3Jhd19yZWFkbChiYXNlICsgT01BUF9BVVhfQ09SRV9CT09UXzApID4+IDU7CisJCQkJcmVhZGxfcmVsYXhlZChiYXNlICsgT01BUF9BVVhfQ09SRV9CT09UXzApID4+IDU7CiAKIAkJaWYgKGJvb3RfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgewogCQkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLW1wdXNzLWxvd3Bvd2VyLmMKaW5kZXggNjY3OTE1ZC4uZWI3NmU0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLW1wdXNzLWxvd3Bvd2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLW1wdXNzLWxvd3Bvd2VyLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogewogCXN0cnVjdCBvbWFwNF9jcHVfcG1faW5mbyAqcG1faW5mbyA9ICZwZXJfY3B1KG9tYXA0X3BtX2luZm8sIGNwdV9pZCk7CiAKLQlfX3Jhd193cml0ZWwoYWRkciwgcG1faW5mby0+d2t1cF9zYXJfYWRkcik7CisJd3JpdGVsX3JlbGF4ZWQoYWRkciwgcG1faW5mby0+d2t1cF9zYXJfYWRkcik7CiB9CiAKIC8qCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JX19yYXdfd3JpdGVsKHNjdV9wd3Jfc3QsIHBtX2luZm8tPnNjdV9zYXJfYWRkcik7CisJd3JpdGVsX3JlbGF4ZWQoc2N1X3B3cl9zdCwgcG1faW5mby0+c2N1X3Nhcl9hZGRyKTsKIH0KIAogLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgTVBVU1MgT1NXUiAqLwpAQCAtMTc5LDcgKzE3OSw3IEBACiB7CiAJc3RydWN0IG9tYXA0X2NwdV9wbV9pbmZvICpwbV9pbmZvID0gJnBlcl9jcHUob21hcDRfcG1faW5mbywgY3B1X2lkKTsKIAotCV9fcmF3X3dyaXRlbChzYXZlX3N0YXRlLCBwbV9pbmZvLT5sMngwX3Nhcl9hZGRyKTsKKwl3cml0ZWxfcmVsYXhlZChzYXZlX3N0YXRlLCBwbV9pbmZvLT5sMngwX3Nhcl9hZGRyKTsKIH0KIAogLyoKQEAgLTE5MiwxMCArMTkyLDEwIEBACiAJdTMyIHZhbDsKIAl2b2lkIF9faW9tZW0gKmwyeDBfYmFzZSA9IG9tYXA0X2dldF9sMmNhY2hlX2Jhc2UoKTsKIAlpZiAobDJ4MF9iYXNlKSB7Ci0JCXZhbCA9IF9fcmF3X3JlYWRsKGwyeDBfYmFzZSArIEwyWDBfQVVYX0NUUkwpOwotCQlfX3Jhd193cml0ZWwodmFsLCBzYXJfYmFzZSArIEwyWDBfQVVYQ1RSTF9PRkZTRVQpOwotCQl2YWwgPSBfX3Jhd19yZWFkbChsMngwX2Jhc2UgKyBMMlgwX1BSRUZFVENIX0NUUkwpOwotCQlfX3Jhd193cml0ZWwodmFsLCBzYXJfYmFzZSArIEwyWDBfUFJFRkVUQ0hfQ1RSTF9PRkZTRVQpOworCQl2YWwgPSByZWFkbF9yZWxheGVkKGwyeDBfYmFzZSArIEwyWDBfQVVYX0NUUkwpOworCQl3cml0ZWxfcmVsYXhlZCh2YWwsIHNhcl9iYXNlICsgTDJYMF9BVVhDVFJMX09GRlNFVCk7CisJCXZhbCA9IHJlYWRsX3JlbGF4ZWQobDJ4MF9iYXNlICsgTDJYMF9QUkVGRVRDSF9DVFJMKTsKKwkJd3JpdGVsX3JlbGF4ZWQodmFsLCBzYXJfYmFzZSArIEwyWDBfUFJFRkVUQ0hfQ1RSTF9PRkZTRVQpOwogCX0KIH0KICNlbHNlCkBAIC0zODYsOSArMzg2LDkgQEAKIAogCS8qIFNhdmUgZGV2aWNlIHR5cGUgb24gc2NyYXRjaHBhZCBmb3IgbG93IGxldmVsIGNvZGUgdG8gdXNlICovCiAJaWYgKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKQotCQlfX3Jhd193cml0ZWwoMSwgc2FyX2Jhc2UgKyBPTUFQX1RZUEVfT0ZGU0VUKTsKKwkJd3JpdGVsX3JlbGF4ZWQoMSwgc2FyX2Jhc2UgKyBPTUFQX1RZUEVfT0ZGU0VUKTsKIAllbHNlCi0JCV9fcmF3X3dyaXRlbCgwLCBzYXJfYmFzZSArIE9NQVBfVFlQRV9PRkZTRVQpOworCQl3cml0ZWxfcmVsYXhlZCgwLCBzYXJfYmFzZSArIE9NQVBfVFlQRV9PRkZTRVQpOwogCiAJc2F2ZV9sMngwX2NvbnRleHQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCmluZGV4IDE3NTUwYWEuLjI1NmU4NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlpZiAob21hcF9zZWN1cmVfYXBpc19zdXBwb3J0KCkpCiAJCW9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCgweDIwMCwgMHhmZmZmZmRmZik7CiAJZWxzZQotCQlfX3Jhd193cml0ZWwoMHgyMCwgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8wKTsKKwkJd3JpdGVsX3JlbGF4ZWQoMHgyMCwgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8wKTsKIAogCWlmICghY3B1MV9jbGtkbSAmJiAhY3B1MV9wd3JkbSkgewogCQljcHUxX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJtcHUxX2Nsa2RtIik7CkBAIC0yMjcsOCArMjI3LDggQEAKIAlpZiAob21hcF9zZWN1cmVfYXBpc19zdXBwb3J0KCkpCiAJCW9tYXBfYXV4Y29yZWJvb3RfYWRkcih2aXJ0X3RvX3BoeXMoc3RhcnR1cF9hZGRyKSk7CiAJZWxzZQotCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKG9tYXA1X3NlY29uZGFyeV9zdGFydHVwKSwKLQkJCQkJCWJhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMSk7CisJCXdyaXRlbF9yZWxheGVkKHZpcnRfdG9fcGh5cyhvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCksCisJCQkgICAgICAgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8xKTsKIAogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtd2FrZXVwZ2VuLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtd2FrZXVwZ2VuLmMKaW5kZXggNjkzZmU0OC4uMzc4NDNhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXdha2V1cGdlbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC13YWtldXBnZW4uYwpAQCAtNjAsMTkgKzYwLDE5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIHdha2V1cGdlbl9yZWFkbCh1OCBpZHgsIHUzMiBjcHUpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKHdha2V1cGdlbl9iYXNlICsgT01BUF9XS0dfRU5CX0FfMCArCisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQod2FrZXVwZ2VuX2Jhc2UgKyBPTUFQX1dLR19FTkJfQV8wICsKIAkJCQkoY3B1ICogQ1BVX0VOQV9PRkZTRVQpICsgKGlkeCAqIDQpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdha2V1cGdlbl93cml0ZWwodTMyIHZhbCwgdTggaWR4LCB1MzIgY3B1KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIHdha2V1cGdlbl9iYXNlICsgT01BUF9XS0dfRU5CX0FfMCArCisJd3JpdGVsX3JlbGF4ZWQodmFsLCB3YWtldXBnZW5fYmFzZSArIE9NQVBfV0tHX0VOQl9BXzAgKwogCQkJCShjcHUgKiBDUFVfRU5BX09GRlNFVCkgKyAoaWR4ICogNCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2FyX3dyaXRlbCh1MzIgdmFsLCB1MzIgb2Zmc2V0LCB1OCBpZHgpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgc2FyX2Jhc2UgKyBvZmZzZXQgKyAoaWR4ICogNCkpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgc2FyX2Jhc2UgKyBvZmZzZXQgKyAoaWR4ICogNCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBfd2FrZXVwZ2VuX2dldF9pcnFfaW5mbyh1MzIgaXJxLCB1MzIgKmJpdF9wb3NuLCB1OCAqcmVnX2luZGV4KQpAQCAtMjMxLDIxICsyMzEsMjEgQEAKIAl9CiAKIAkvKiBTYXZlIEF1eEJvb3QqIHJlZ2lzdGVycyAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKHdha2V1cGdlbl9iYXNlICsgT01BUF9BVVhfQ09SRV9CT09UXzApOwotCV9fcmF3X3dyaXRlbCh2YWwsIHNhcl9iYXNlICsgQVVYQ09SRUJPT1QwX09GRlNFVCk7Ci0JdmFsID0gX19yYXdfcmVhZGwod2FrZXVwZ2VuX2Jhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMSk7Ci0JX19yYXdfd3JpdGVsKHZhbCwgc2FyX2Jhc2UgKyBBVVhDT1JFQk9PVDFfT0ZGU0VUKTsKKwl2YWwgPSByZWFkbF9yZWxheGVkKHdha2V1cGdlbl9iYXNlICsgT01BUF9BVVhfQ09SRV9CT09UXzApOworCXdyaXRlbF9yZWxheGVkKHZhbCwgc2FyX2Jhc2UgKyBBVVhDT1JFQk9PVDBfT0ZGU0VUKTsKKwl2YWwgPSByZWFkbF9yZWxheGVkKHdha2V1cGdlbl9iYXNlICsgT01BUF9BVVhfQ09SRV9CT09UXzEpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgc2FyX2Jhc2UgKyBBVVhDT1JFQk9PVDFfT0ZGU0VUKTsKIAogCS8qIFNhdmUgU3luY1JlcSBnZW5lcmF0aW9uIGxvZ2ljICovCi0JdmFsID0gX19yYXdfcmVhZGwod2FrZXVwZ2VuX2Jhc2UgKyBPTUFQX1BUTVNZTkNSRVFfTUFTSyk7Ci0JX19yYXdfd3JpdGVsKHZhbCwgc2FyX2Jhc2UgKyBQVE1TWU5DUkVRX01BU0tfT0ZGU0VUKTsKLQl2YWwgPSBfX3Jhd19yZWFkbCh3YWtldXBnZW5fYmFzZSArIE9NQVBfUFRNU1lOQ1JFUV9FTik7Ci0JX19yYXdfd3JpdGVsKHZhbCwgc2FyX2Jhc2UgKyBQVE1TWU5DUkVRX0VOX09GRlNFVCk7CisJdmFsID0gcmVhZGxfcmVsYXhlZCh3YWtldXBnZW5fYmFzZSArIE9NQVBfUFRNU1lOQ1JFUV9NQVNLKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHNhcl9iYXNlICsgUFRNU1lOQ1JFUV9NQVNLX09GRlNFVCk7CisJdmFsID0gcmVhZGxfcmVsYXhlZCh3YWtldXBnZW5fYmFzZSArIE9NQVBfUFRNU1lOQ1JFUV9FTik7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBzYXJfYmFzZSArIFBUTVNZTkNSRVFfRU5fT0ZGU0VUKTsKIAogCS8qIFNldCB0aGUgQmFja3VwIEJpdCBNYXNrIHN0YXR1cyAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKHNhcl9iYXNlICsgU0FSX0JBQ0tVUF9TVEFUVVNfT0ZGU0VUKTsKKwl2YWwgPSByZWFkbF9yZWxheGVkKHNhcl9iYXNlICsgU0FSX0JBQ0tVUF9TVEFUVVNfT0ZGU0VUKTsKIAl2YWwgfD0gU0FSX0JBQ0tVUF9TVEFUVVNfV0FLRVVQR0VOOwotCV9fcmF3X3dyaXRlbCh2YWwsIHNhcl9iYXNlICsgU0FSX0JBQ0tVUF9TVEFUVVNfT0ZGU0VUKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHNhcl9iYXNlICsgU0FSX0JBQ0tVUF9TVEFUVVNfT0ZGU0VUKTsKIAogfQogCkBAIC0yNjQsMTUgKzI2NCwxNSBAQAogCX0KIAogCS8qIFNhdmUgQXV4Qm9vdCogcmVnaXN0ZXJzICovCi0JdmFsID0gX19yYXdfcmVhZGwod2FrZXVwZ2VuX2Jhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMCk7Ci0JX19yYXdfd3JpdGVsKHZhbCwgc2FyX2Jhc2UgKyBPTUFQNV9BVVhDT1JFQk9PVDBfT0ZGU0VUKTsKLQl2YWwgPSBfX3Jhd19yZWFkbCh3YWtldXBnZW5fYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8wKTsKLQlfX3Jhd193cml0ZWwodmFsLCBzYXJfYmFzZSArIE9NQVA1X0FVWENPUkVCT09UMV9PRkZTRVQpOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQod2FrZXVwZ2VuX2Jhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMCk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBzYXJfYmFzZSArIE9NQVA1X0FVWENPUkVCT09UMF9PRkZTRVQpOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQod2FrZXVwZ2VuX2Jhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMCk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBzYXJfYmFzZSArIE9NQVA1X0FVWENPUkVCT09UMV9PRkZTRVQpOwogCiAJLyogU2V0IHRoZSBCYWNrdXAgQml0IE1hc2sgc3RhdHVzICovCi0JdmFsID0gX19yYXdfcmVhZGwoc2FyX2Jhc2UgKyBPTUFQNV9TQVJfQkFDS1VQX1NUQVRVU19PRkZTRVQpOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQoc2FyX2Jhc2UgKyBPTUFQNV9TQVJfQkFDS1VQX1NUQVRVU19PRkZTRVQpOwogCXZhbCB8PSBTQVJfQkFDS1VQX1NUQVRVU19XQUtFVVBHRU47Ci0JX19yYXdfd3JpdGVsKHZhbCwgc2FyX2Jhc2UgKyBPTUFQNV9TQVJfQkFDS1VQX1NUQVRVU19PRkZTRVQpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgc2FyX2Jhc2UgKyBPTUFQNV9TQVJfQkFDS1VQX1NUQVRVU19PRkZTRVQpOwogCiB9CiAKQEAgLTMwNiw5ICszMDYsOSBAQAogCWlmIChzb2NfaXNfb21hcDU0eHgoKSkKIAkJb2Zmc2V0ID0gT01BUDVfU0FSX0JBQ0tVUF9TVEFUVVNfT0ZGU0VUOwogCi0JdmFsID0gX19yYXdfcmVhZGwoc2FyX2Jhc2UgKyBvZmZzZXQpOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQoc2FyX2Jhc2UgKyBvZmZzZXQpOwogCXZhbCAmPSB+U0FSX0JBQ0tVUF9TVEFUVVNfV0FLRVVQR0VOOwotCV9fcmF3X3dyaXRlbCh2YWwsIHNhcl9iYXNlICsgb2Zmc2V0KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHNhcl9iYXNlICsgb2Zmc2V0KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCmluZGV4IDk1ZTE3MWEuLjk5YjAxNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYwpAQCAtMTI1LDI1ICsxMjUsMjUgQEAKIHZvaWQgZ2ljX2Rpc3RfZGlzYWJsZSh2b2lkKQogewogCWlmIChnaWNfZGlzdF9iYXNlX2FkZHIpCi0JCV9fcmF3X3dyaXRlbCgweDAsIGdpY19kaXN0X2Jhc2VfYWRkciArIEdJQ19ESVNUX0NUUkwpOworCQl3cml0ZWxfcmVsYXhlZCgweDAsIGdpY19kaXN0X2Jhc2VfYWRkciArIEdJQ19ESVNUX0NUUkwpOwogfQogCiB2b2lkIGdpY19kaXN0X2VuYWJsZSh2b2lkKQogewogCWlmIChnaWNfZGlzdF9iYXNlX2FkZHIpCi0JCV9fcmF3X3dyaXRlbCgweDEsIGdpY19kaXN0X2Jhc2VfYWRkciArIEdJQ19ESVNUX0NUUkwpOworCQl3cml0ZWxfcmVsYXhlZCgweDEsIGdpY19kaXN0X2Jhc2VfYWRkciArIEdJQ19ESVNUX0NUUkwpOwogfQogCiBib29sIGdpY19kaXN0X2Rpc2FibGVkKHZvaWQpCiB7Ci0JcmV0dXJuICEoX19yYXdfcmVhZGwoZ2ljX2Rpc3RfYmFzZV9hZGRyICsgR0lDX0RJU1RfQ1RSTCkgJiAweDEpOworCXJldHVybiAhKHJlYWRsX3JlbGF4ZWQoZ2ljX2Rpc3RfYmFzZV9hZGRyICsgR0lDX0RJU1RfQ1RSTCkgJiAweDEpOwogfQogCiB2b2lkIGdpY190aW1lcl9yZXRyaWdnZXIodm9pZCkKIHsKLQl1MzIgdHdkX2ludCA9IF9fcmF3X3JlYWRsKHR3ZF9iYXNlICsgVFdEX1RJTUVSX0lOVFNUQVQpOwotCXUzMiBnaWNfaW50ID0gX19yYXdfcmVhZGwoZ2ljX2Rpc3RfYmFzZV9hZGRyICsgR0lDX0RJU1RfUEVORElOR19TRVQpOwotCXUzMiB0d2RfY3RybCA9IF9fcmF3X3JlYWRsKHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOworCXUzMiB0d2RfaW50ID0gcmVhZGxfcmVsYXhlZCh0d2RfYmFzZSArIFRXRF9USU1FUl9JTlRTVEFUKTsKKwl1MzIgZ2ljX2ludCA9IHJlYWRsX3JlbGF4ZWQoZ2ljX2Rpc3RfYmFzZV9hZGRyICsgR0lDX0RJU1RfUEVORElOR19TRVQpOworCXUzMiB0d2RfY3RybCA9IHJlYWRsX3JlbGF4ZWQodHdkX2Jhc2UgKyBUV0RfVElNRVJfQ09OVFJPTCk7CiAKIAlpZiAodHdkX2ludCAmJiAhKGdpY19pbnQgJiBCSVQoSVJRX0xPQ0FMVElNRVIpKSkgewogCQkvKgpAQCAtMTUxLDExICsxNTEsMTEgQEAKIAkJICogZGlzYWJsZWQuICBBY2sgdGhlIHBlbmRpbmcgaW50ZXJydXB0LCBhbmQgcmV0cmlnZ2VyIGl0LgogCQkgKi8KIAkJcHJfd2FybigiJXM6IGxvc3QgbG9jYWx0aW1lciBpbnRlcnJ1cHRcbiIsIF9fZnVuY19fKTsKLQkJX19yYXdfd3JpdGVsKDEsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0lOVFNUQVQpOworCQl3cml0ZWxfcmVsYXhlZCgxLCB0d2RfYmFzZSArIFRXRF9USU1FUl9JTlRTVEFUKTsKIAkJaWYgKCEodHdkX2N0cmwgJiBUV0RfVElNRVJfQ09OVFJPTF9QRVJJT0RJQykpIHsKLQkJCV9fcmF3X3dyaXRlbCgxLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT1VOVEVSKTsKKwkJCXdyaXRlbF9yZWxheGVkKDEsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPVU5URVIpOwogCQkJdHdkX2N0cmwgfD0gVFdEX1RJTUVSX0NPTlRST0xfRU5BQkxFOwotCQkJX19yYXdfd3JpdGVsKHR3ZF9jdHJsLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKKwkJCXdyaXRlbF9yZWxheGVkKHR3ZF9jdHJsLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKaW5kZXggNjZjNjBmZS4uZjdiYjQzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKQEAgLTcyLDcgKzcyLDcgQEAKICAqICAgICAgICAgICAgfCAoLi4vbWFjaC1vbWFwMi9vbWFwX2h3bW9kKikgICB8CiAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICogICAgICAgICAgICB8IE9NQVAgY2xvY2svUFJDTS9yZWdpc3RlciBmbnMgIHwKLSAqICAgICAgICAgICAgfCAoX19yYXdfe3JlYWQsd3JpdGV9bCwgY2xrKikgICB8CisgKiAgICAgICAgICAgIHwgKHtyZWFkLHdyaXRlfWxfcmVsYXhlZCwgY2xrKikgfAogICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqCiAgKiBEZXZpY2UgZHJpdmVycyBzaG91bGQgbm90IGNvbnRhaW4gYW55IE9NQVAtc3BlY2lmaWMgY29kZSBvciBkYXRhIGluCkBAIC0zMjMwLDE3ICszMjMwLDE3IEBACiB1MzIgb21hcF9od21vZF9yZWFkKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTE2IHJlZ19vZmZzKQogewogCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF8xNkJJVF9SRUcpCi0JCXJldHVybiBfX3Jhd19yZWFkdyhvaC0+X21wdV9ydF92YSArIHJlZ19vZmZzKTsKKwkJcmV0dXJuIHJlYWR3X3JlbGF4ZWQob2gtPl9tcHVfcnRfdmEgKyByZWdfb2Zmcyk7CiAJZWxzZQotCQlyZXR1cm4gX19yYXdfcmVhZGwob2gtPl9tcHVfcnRfdmEgKyByZWdfb2Zmcyk7CisJCXJldHVybiByZWFkbF9yZWxheGVkKG9oLT5fbXB1X3J0X3ZhICsgcmVnX29mZnMpOwogfQogCiB2b2lkIG9tYXBfaHdtb2Rfd3JpdGUodTMyIHYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTE2IHJlZ19vZmZzKQogewogCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF8xNkJJVF9SRUcpCi0JCV9fcmF3X3dyaXRldyh2LCBvaC0+X21wdV9ydF92YSArIHJlZ19vZmZzKTsKKwkJd3JpdGV3X3JlbGF4ZWQodiwgb2gtPl9tcHVfcnRfdmEgKyByZWdfb2Zmcyk7CiAJZWxzZQotCQlfX3Jhd193cml0ZWwodiwgb2gtPl9tcHVfcnRfdmEgKyByZWdfb2Zmcyk7CisJCXdyaXRlbF9yZWxheGVkKHYsIG9oLT5fbXB1X3J0X3ZhICsgcmVnX29mZnMpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4XzQzeHhfaXBibG9ja19kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF80M3h4X2lwYmxvY2tfZGF0YS5jCmluZGV4IDBmMTc4NjIuLmE1NzliODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4XzQzeHhfaXBibG9ja19kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfNDN4eF9pcGJsb2NrX2RhdGEuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgInBybTMzeHguaCIKICNpbmNsdWRlICJvbWFwX2h3bW9kXzMzeHhfNDN4eF9jb21tb25fZGF0YS5oIgogI2luY2x1ZGUgInByY200M3h4LmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCiAKICNkZWZpbmUgQ0xLQ1RSTChvaCwgY2xrY3RybCkgKChvaCkucHJjbS5vbWFwNC5jbGtjdHJsX29mZnMgPSAoY2xrY3RybCkpCiAjZGVmaW5lIFJTVENUUkwob2gsIHJzdGN0cmwpICgob2gpLnByY20ub21hcDQucnN0Y3RybF9vZmZzID0gKHJzdGN0cmwpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCmluZGV4IDcxYWM3ZDUuLjFjZDBjZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTM2ODksMTIgKzM2ODksOSBAQAogCS5yZXZfb2Zmcwk9IDB4MDAwMCwKIAkuc3lzY19vZmZzCT0gMHgwMDEwLAogCS5zeXNzX29mZnMJPSAweDAwMTQsCi0JLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19FTVVGUkVFIHwKLQkJCSAgIFNZU0NfSEFTX01JRExFTU9ERSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8Ci0JCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAotCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKLQkJCSAgIFNJRExFX1NNQVJUX1dLVVAgfCBNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwKLQkJCSAgIE1TVEFOREJZX1NNQVJUIHwgTVNUQU5EQllfU01BUlRfV0tVUCksCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19NSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU0lETEVNT0RFIHwgU1lTQ19IQVNfU09GVFJFU0VUKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCiAJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYwppbmRleCAxMjE5MjgwLi40MWU1NGY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCkBAIC0zNjM1LDE1ICszNjM1LDcgQEAKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kbWljX2h3bW9kLAogCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogbDRfYWJlIC0+IGRtaWMgKGRtYSkgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX19kbWljX2RtYSA9IHsKLQkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwNDR4eF9kbWljX2h3bW9kLAotCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAogLyogZHNwIC0+IGl2YSAqLwpAQCAtNDIwOSwxNSArNDIwMSw3IEBACiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AxX2h3bW9kLAogCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogbDRfYWJlIC0+IG1jYnNwMSAoZG1hKSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX21jYnNwMV9kbWEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AxX2h3bW9kLAotCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAogLyogbDRfYWJlIC0+IG1jYnNwMiAqLwpAQCAtNDIyNSwxNSArNDIwOSw3IEBACiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AyX2h3bW9kLAogCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogbDRfYWJlIC0+IG1jYnNwMiAoZG1hKSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX21jYnNwMl9kbWEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AyX2h3bW9kLAotCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAogLyogbDRfYWJlIC0+IG1jYnNwMyAqLwpAQCAtNDI0MSwxNSArNDIxNyw3IEBACiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AzX2h3bW9kLAogCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogbDRfYWJlIC0+IG1jYnNwMyAoZG1hKSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX21jYnNwM19kbWEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AzX2h3bW9kLAotCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAogLyogbDRfcGVyIC0+IG1jYnNwNCAqLwpAQCAtNDI2NSwxNSArNDIzMyw3IEBACiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNwZG1faHdtb2QsCiAJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBsNF9hYmUgLT4gbWNwZG0gKGRtYSkgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX19tY3BkbV9kbWEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNwZG1faHdtb2QsCi0JLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBsNF9wZXIgLT4gbWNzcGkxICovCkBAIC00NTc1LDE1ICs0NTM1LDcgQEAKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjVfaHdtb2QsCiAJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBsNF9hYmUgLT4gdGltZXI1IChkbWEpICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI1X2RtYSA9IHsKLQkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjVfaHdtb2QsCi0JLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBsNF9hYmUgLT4gdGltZXI2ICovCkBAIC00NTkxLDE1ICs0NTQzLDcgQEAKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjZfaHdtb2QsCiAJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBsNF9hYmUgLT4gdGltZXI2IChkbWEpICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI2X2RtYSA9IHsKLQkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjZfaHdtb2QsCi0JLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBsNF9hYmUgLT4gdGltZXI3ICovCkBAIC00NjA3LDE1ICs0NTUxLDcgQEAKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjdfaHdtb2QsCiAJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBsNF9hYmUgLT4gdGltZXI3IChkbWEpICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI3X2RtYSA9IHsKLQkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjdfaHdtb2QsCi0JLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBsNF9hYmUgLT4gdGltZXI4ICovCkBAIC00NjIzLDE1ICs0NTU5LDcgQEAKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjhfaHdtb2QsCiAJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBsNF9hYmUgLT4gdGltZXI4IChkbWEpICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI4X2RtYSA9IHsKLQkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjhfaHdtb2QsCi0JLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBsNF9wZXIgLT4gdGltZXI5ICovCkBAIC00ODMxLDcgKzQ3NTksNiBAQAogCSZvbWFwNDR4eF9sM19pbnN0cl9fZGVidWdzcywKIAkmb21hcDQ0eHhfbDRfY2ZnX19kbWFfc3lzdGVtLAogCSZvbWFwNDR4eF9sNF9hYmVfX2RtaWMsCi0JJm9tYXA0NHh4X2w0X2FiZV9fZG1pY19kbWEsCiAJJm9tYXA0NHh4X2RzcF9faXZhLAogCS8qICZvbWFwNDR4eF9kc3BfX3NsMmlmLCAqLwogCSZvbWFwNDR4eF9sNF9jZmdfX2RzcCwKQEAgLTQ4NzQsMTQgKzQ4MDEsMTAgQEAKIAkmb21hcDQ0eHhfbDRfYWJlX19tY2FzcCwKIAkmb21hcDQ0eHhfbDRfYWJlX19tY2FzcF9kbWEsCiAJJm9tYXA0NHh4X2w0X2FiZV9fbWNic3AxLAotCSZvbWFwNDR4eF9sNF9hYmVfX21jYnNwMV9kbWEsCiAJJm9tYXA0NHh4X2w0X2FiZV9fbWNic3AyLAotCSZvbWFwNDR4eF9sNF9hYmVfX21jYnNwMl9kbWEsCiAJJm9tYXA0NHh4X2w0X2FiZV9fbWNic3AzLAotCSZvbWFwNDR4eF9sNF9hYmVfX21jYnNwM19kbWEsCiAJJm9tYXA0NHh4X2w0X3Blcl9fbWNic3A0LAogCSZvbWFwNDR4eF9sNF9hYmVfX21jcGRtLAotCSZvbWFwNDR4eF9sNF9hYmVfX21jcGRtX2RtYSwKIAkmb21hcDQ0eHhfbDRfcGVyX19tY3NwaTEsCiAJJm9tYXA0NHh4X2w0X3Blcl9fbWNzcGkyLAogCSZvbWFwNDR4eF9sNF9wZXJfX21jc3BpMywKQEAgLTQ5MTMsMTMgKzQ4MzYsOSBAQAogCSZvbWFwNDR4eF9sNF9wZXJfX3RpbWVyMywKIAkmb21hcDQ0eHhfbDRfcGVyX190aW1lcjQsCiAJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI1LAotCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyNV9kbWEsCiAJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI2LAotCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyNl9kbWEsCiAJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI3LAotCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyN19kbWEsCiAJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI4LAotCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyOF9kbWEsCiAJJm9tYXA0NHh4X2w0X3Blcl9fdGltZXI5LAogCSZvbWFwNDR4eF9sNF9wZXJfX3RpbWVyMTAsCiAJJm9tYXA0NHh4X2w0X3Blcl9fdGltZXIxMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYwppbmRleCBlODI5NjY0Li4yOTAyMTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jCkBAIC0zMzQsNiArMzM0LDIzNSBAQAogfTsKIAogLyoKKyAqICdkc3MnIGNsYXNzCisgKiBkaXNwbGF5IHN1Yi1zeXN0ZW0KKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNTR4eF9kc3Nfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IFNZU1NfSEFTX1JFU0VUX1NUQVRVUywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNTR4eF9kc3NfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiZHNzIiwKKwkuc3lzYwk9ICZvbWFwNTR4eF9kc3Nfc3lzYywKKwkucmVzZXQJPSBvbWFwX2Rzc19yZXNldCwKK307CisKKy8qIGRzcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZHNzX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICIzMmtoel9jbGsiLCAuY2xrID0gImRzc18zMmtoel9jbGsiIH0sCisJeyAucm9sZSA9ICJzeXNfY2xrIiwgLmNsayA9ICJkc3Nfc3lzX2NsayIgfSwKKwl7IC5yb2xlID0gImhkbWlfY2xrIiwgLmNsayA9ICJkc3NfNDhtaHpfY2xrIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA1NHh4X2Rzc19od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX2NvcmUiLAorCS5jbGFzcwkJPSAmb21hcDU0eHhfZHNzX2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCisJLm1haW5fY2xrCT0gImRzc19kc3NfY2xrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfb2ZmcyA9IE9NQVA1NFhYX0NNX0RTU19EU1NfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuY29udGV4dF9vZmZzID0gT01BUDU0WFhfUk1fRFNTX0RTU19DT05URVhUX09GRlNFVCwKKwkJCS5tb2R1bGVtb2RlICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3Nfb3B0X2Nsa3MpLAorfTsKKworLyoKKyAqICdkaXNwYycgY2xhc3MKKyAqIGRpc3BsYXkgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDU0eHhfZGlzcGNfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8CisJCQkgICBTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19NSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU0lETEVNT0RFIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKKwkJCSAgIFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA1NHh4X2Rpc3BjX2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gImRpc3BjIiwKKwkuc3lzYwk9ICZvbWFwNTR4eF9kaXNwY19zeXNjLAorfTsKKworLyogZHNzX2Rpc3BjICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBkc3NfZGlzcGNfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gInN5c19jbGsiLCAuY2xrID0gImRzc19zeXNfY2xrIiB9LAorfTsKKworLyogZHNzX2Rpc3BjIGRldl9hdHRyICovCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2Rpc3BjX2Rldl9hdHRyIGRzc19kaXNwY19kZXZfYXR0ciA9IHsKKwkuaGFzX2ZyYW1lZG9uZXR2X2lycQk9IDEsCisJLm1hbmFnZXJfY291bnQJCT0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNTR4eF9kc3NfZGlzcGNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc19kaXNwYyIsCisJLmNsYXNzCQk9ICZvbWFwNTR4eF9kaXNwY19od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5tYWluX2Nsawk9ICJkc3NfZHNzX2NsayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBPTUFQNTRYWF9DTV9EU1NfRFNTX0NMS0NUUkxfT0ZGU0VULAorCQkJLmZsYWdzID0gSFdNT0RfT01BUDRfTk9fQ09OVEVYVF9MT1NTX0JJVCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19kaXNwY19vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZGlzcGNfb3B0X2Nsa3MpLAorCS5kZXZfYXR0cgk9ICZkc3NfZGlzcGNfZGV2X2F0dHIsCit9OworCisvKgorICogJ2RzaTEnIGNsYXNzCisgKiBkaXNwbGF5IHNlcmlhbCBpbnRlcmZhY2UgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDU0eHhfZHNpMV9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKKwkJCSAgIFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA1NHh4X2RzaTFfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiZHNpMSIsCisJLnN5c2MJPSAmb21hcDU0eHhfZHNpMV9zeXNjLAorfTsKKworLyogZHNzX2RzaTFfYSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZHNzX2RzaTFfYV9vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAic3lzX2NsayIsIC5jbGsgPSAiZHNzX3N5c19jbGsiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDU0eHhfZHNzX2RzaTFfYV9od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX2RzaTEiLAorCS5jbGFzcwkJPSAmb21hcDU0eHhfZHNpMV9od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5tYWluX2Nsawk9ICJkc3NfZHNzX2NsayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBPTUFQNTRYWF9DTV9EU1NfRFNTX0NMS0NUUkxfT0ZGU0VULAorCQkJLmZsYWdzID0gSFdNT0RfT01BUDRfTk9fQ09OVEVYVF9MT1NTX0JJVCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19kc2kxX2Ffb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2RzaTFfYV9vcHRfY2xrcyksCit9OworCisvKiBkc3NfZHNpMV9jICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBkc3NfZHNpMV9jX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJzeXNfY2xrIiwgLmNsayA9ICJkc3Nfc3lzX2NsayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNTR4eF9kc3NfZHNpMV9jX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfZHNpMiIsCisJLmNsYXNzCQk9ICZvbWFwNTR4eF9kc2kxX2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLm1haW5fY2xrCT0gImRzc19kc3NfY2xrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfb2ZmcyA9IE9NQVA1NFhYX0NNX0RTU19EU1NfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuZmxhZ3MgPSBIV01PRF9PTUFQNF9OT19DT05URVhUX0xPU1NfQklULAorCQl9LAorCX0sCisJLm9wdF9jbGtzCT0gZHNzX2RzaTFfY19vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZHNpMV9jX29wdF9jbGtzKSwKK307CisKKy8qCisgKiAnaGRtaScgY2xhc3MKKyAqIGhkbWkgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDU0eHhfaGRtaV9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1JFU0VUX1NUQVRVUyB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVApLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDU0eHhfaGRtaV9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJoZG1pIiwKKwkuc3lzYwk9ICZvbWFwNTR4eF9oZG1pX3N5c2MsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBkc3NfaGRtaV9vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAic3lzX2NsayIsIC5jbGsgPSAiZHNzX3N5c19jbGsiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDU0eHhfZHNzX2hkbWlfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc19oZG1pIiwKKwkuY2xhc3MJCT0gJm9tYXA1NHh4X2hkbWlfaHdtb2RfY2xhc3MsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkubWFpbl9jbGsJPSAiZHNzXzQ4bWh6X2NsayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBPTUFQNTRYWF9DTV9EU1NfRFNTX0NMS0NUUkxfT0ZGU0VULAorCQkJLmZsYWdzID0gSFdNT0RfT01BUDRfTk9fQ09OVEVYVF9MT1NTX0JJVCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19oZG1pX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19oZG1pX29wdF9jbGtzKSwKK307CisKKy8qCisgKiAncmZiaScgY2xhc3MKKyAqIHJlbW90ZSBmcmFtZSBidWZmZXIgaW50ZXJmYWNlCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNTR4eF9yZmJpX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA1NHh4X3JmYmlfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAicmZiaSIsCisJLnN5c2MJPSAmb21hcDU0eHhfcmZiaV9zeXNjLAorfTsKKworLyogZHNzX3JmYmkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGRzc19yZmJpX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJpY2siLCAuY2xrID0gImwzX2ljbGtfZGl2IiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA1NHh4X2Rzc19yZmJpX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfcmZiaSIsCisJLmNsYXNzCQk9ICZvbWFwNTR4eF9yZmJpX2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBPTUFQNTRYWF9DTV9EU1NfRFNTX0NMS0NUUkxfT0ZGU0VULAorCQkJLmZsYWdzID0gSFdNT0RfT01BUDRfTk9fQ09OVEVYVF9MT1NTX0JJVCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19yZmJpX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19yZmJpX29wdF9jbGtzKSwKK307CisKKy8qCiAgKiAnZW1pZicgY2xhc3MKICAqIGV4dGVybmFsIG1lbW9yeSBpbnRlcmZhY2Ugbm8xICh3cmFwcGVyKQogICovCkBAIC0xOTc0LDYgKzIyMDMsNTQgQEAKIAkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCiB9OwogCisvKiBsM19tYWluXzIgLT4gZHNzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA1NHh4X2wzX21haW5fMl9fZHNzID0geworCS5tYXN0ZXIJCT0gJm9tYXA1NHh4X2wzX21haW5fMl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA1NHh4X2Rzc19od21vZCwKKwkuY2xrCQk9ICJsM19pY2xrX2RpdiIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGwzX21haW5fMiAtPiBkc3NfZGlzcGMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDU0eHhfbDNfbWFpbl8yX19kc3NfZGlzcGMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDU0eHhfbDNfbWFpbl8yX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDU0eHhfZHNzX2Rpc3BjX2h3bW9kLAorCS5jbGsJCT0gImwzX2ljbGtfZGl2IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDNfbWFpbl8yIC0+IGRzc19kc2kxX2EgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDU0eHhfbDNfbWFpbl8yX19kc3NfZHNpMV9hID0geworCS5tYXN0ZXIJCT0gJm9tYXA1NHh4X2wzX21haW5fMl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA1NHh4X2Rzc19kc2kxX2FfaHdtb2QsCisJLmNsawkJPSAibDNfaWNsa19kaXYiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsM19tYWluXzIgLT4gZHNzX2RzaTFfYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNTR4eF9sM19tYWluXzJfX2Rzc19kc2kxX2MgPSB7CisJLm1hc3RlcgkJPSAmb21hcDU0eHhfbDNfbWFpbl8yX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDU0eHhfZHNzX2RzaTFfY19od21vZCwKKwkuY2xrCQk9ICJsM19pY2xrX2RpdiIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGwzX21haW5fMiAtPiBkc3NfaGRtaSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNTR4eF9sM19tYWluXzJfX2Rzc19oZG1pID0geworCS5tYXN0ZXIJCT0gJm9tYXA1NHh4X2wzX21haW5fMl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA1NHh4X2Rzc19oZG1pX2h3bW9kLAorCS5jbGsJCT0gImwzX2ljbGtfZGl2IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDNfbWFpbl8yIC0+IGRzc19yZmJpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA1NHh4X2wzX21haW5fMl9fZHNzX3JmYmkgPSB7CisJLm1hc3RlcgkJPSAmb21hcDU0eHhfbDNfbWFpbl8yX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDU0eHhfZHNzX3JmYmlfaHdtb2QsCisJLmNsawkJPSAibDNfaWNsa19kaXYiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBtcHUgLT4gZW1pZjEgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDU0eHhfbXB1X19lbWlmMSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNTR4eF9tcHVfaHdtb2QsCkBAIC0yNDI3LDYgKzI3MDQsMTIgQEAKIAkmb21hcDU0eHhfbDRfY2ZnX19kbWFfc3lzdGVtLAogCSZvbWFwNTR4eF9sNF9hYmVfX2RtaWMsCiAJJm9tYXA1NHh4X2w0X2NmZ19fbW11X2RzcCwKKwkmb21hcDU0eHhfbDNfbWFpbl8yX19kc3MsCisJJm9tYXA1NHh4X2wzX21haW5fMl9fZHNzX2Rpc3BjLAorCSZvbWFwNTR4eF9sM19tYWluXzJfX2Rzc19kc2kxX2EsCisJJm9tYXA1NHh4X2wzX21haW5fMl9fZHNzX2RzaTFfYywKKwkmb21hcDU0eHhfbDNfbWFpbl8yX19kc3NfaGRtaSwKKwkmb21hcDU0eHhfbDNfbWFpbl8yX19kc3NfcmZiaSwKIAkmb21hcDU0eHhfbXB1X19lbWlmMSwKIAkmb21hcDU0eHhfbXB1X19lbWlmMiwKIAkmb21hcDU0eHhfbDRfd2t1cF9fZ3BpbzEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jCmluZGV4IDgxMGMyMDUuLjIwYjQzOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jCkBAIC0yMzE4LDIxICsyMzE4LDExIEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIGRyYTd4eF9vY3Ayc2NwMV9hZGRyc1tdID0gewotCXsKLQkJLnBhX3N0YXJ0CT0gMHg0YTA4MDAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDgwMDFmLAotCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCi0JfSwKLQl7IH0KLX07Ci0KIC8qIGw0X2NmZyAtPiBvY3Ayc2NwMSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBkcmE3eHhfbDRfY2ZnX19vY3Ayc2NwMSA9IHsKIAkubWFzdGVyCQk9ICZkcmE3eHhfbDRfY2ZnX2h3bW9kLAogCS5zbGF2ZQkJPSAmZHJhN3h4X29jcDJzY3AxX2h3bW9kLAogCS5jbGsJCT0gImw0X3Jvb3RfY2xrX2RpdiIsCi0JLmFkZHIJCT0gZHJhN3h4X29jcDJzY3AxX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZWI4YTI1ZC4uNTA2NDBiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtNTcsNyArNTcsNyBAQAogCX0KIAogCS8qIFBvd2VyIGRvd24gdGhlIHBoeSAqLwotCV9fcmF3X3dyaXRlbChQSFlfUEQsIGN0cmxfYmFzZSArIENPTlRST0xfREVWX0NPTkYpOworCXdyaXRlbF9yZWxheGVkKFBIWV9QRCwgY3RybF9iYXNlICsgQ09OVFJPTF9ERVZfQ09ORik7CiAKIAlpb3VubWFwKGN0cmxfYmFzZSk7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JdXNicGh5Y2ZnID0gX19yYXdfcmVhZGwoc2NtX2Jhc2UgKyBVU0JDVFJMMCk7CisJdXNicGh5Y2ZnID0gcmVhZGxfcmVsYXhlZChzY21fYmFzZSArIFVTQkNUUkwwKTsKIAogCWlmIChvbikgewogCQlpZiAoY3B1X2lzX3RpODE2eCgpKSB7CkBAIC0xODEsNyArMTgxLDcgQEAKIAkJCXVzYnBoeWNmZyB8PSBVU0JQSFlfQ01fUFdSRE4gfCBVU0JQSFlfT1RHX1BXUkROOwogCiAJfQotCV9fcmF3X3dyaXRlbCh1c2JwaHljZmcsIHNjbV9iYXNlICsgVVNCQ1RSTDApOworCXdyaXRlbF9yZWxheGVkKHVzYnBoeWNmZywgc2NtX2Jhc2UgKyBVU0JDVFJMMCk7CiAKIAlpb3VubWFwKHNjbV9iYXNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYwppbmRleCA2MTVlNWIxLi42YmY2MjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfdHdsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3R3bC5jCkBAIC00NiwxNSArNDYsOCBAQAogCiBzdGF0aWMgYm9vbCBpc19vZmZzZXRfdmFsaWQ7CiBzdGF0aWMgdTggc21wc19vZmZzZXQ7Ci0vKgotICogRmxhZyB0byBlbnN1cmUgU21hcnRyZWZsZXggYml0IGluIFRXTAotICogYmVpbmcgY2xlYXJlZCBpbiBib2FyZCBmaWxlIGlzIG5vdCBvdmVyd3JpdHRlbi4KLSAqLwotc3RhdGljIGJvb2wgX19pbml0ZGF0YSB0d2xfc3JfZW5hYmxlX2F1dG9pbml0OwogCi0jZGVmaW5lIFRXTDQwMzBfRENEQ19HTE9CQUxfQ0ZHICAgICAgICAweDA2CiAjZGVmaW5lIFJFR19TTVBTX09GRlNFVCAgICAgICAgIDB4RTAKLSNkZWZpbmUgU01BUlRSRUZMRVhfRU5BQkxFICAgICBCSVQoMykKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdHdsNDAzMF92c2VsX3RvX3V2KGNvbnN0IHU4IHZzZWwpCiB7CkBAIC0yNTEsMTggKzI0NCw2IEBACiAJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKgotCSAqIFRoZSBzbWFydHJlZmxleCBiaXQgb24gdHdsNDAzMCBzcGVjaWZpZXMgaWYgdGhlIHNldHRpbmcgb2Ygdm9sdGFnZQotCSAqIGlzIGRvbmUgb3ZlciB0aGUgSTJDX1NSIHBhdGguIFNpbmNlIHRoaXMgc2V0dGluZyBpcyBpbmRlcGVuZGVudCBvZgotCSAqIHRoZSBhY3R1YWwgdXNhZ2Ugb2Ygc21hcnRyZWZsZXggQVZTIG1vZHVsZSwgd2UgZW5hYmxlIFRXTCBTUiBiaXQKLQkgKiBieSBkZWZhdWx0IGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHNtYXJ0cmVmbGV4IEFWUyBtb2R1bGUgaXMgZW5hYmxlZAotCSAqIG9uIHRoZSBPTUFQIHNpZGUgb3Igbm90LiBUaGlzIGlzIGJlY2F1c2Ugd2l0aG91dCB0aGlzIGJpdCBlbmFibGVkLAotCSAqIHRoZSB2b2x0YWdlIHNjYWxpbmcgdGhyb3VnaCB2cCBmb3JjZXVwZGF0ZS9ieXBhc3MgbWVjaGFuaXNtIG9mCi0JICogdm9sdGFnZSBzY2FsaW5nIHdpbGwgbm90IGZ1bmN0aW9uIG9uIFRXTCBvdmVyIEkyQ19TUi4KLQkgKi8KLQlpZiAoIXR3bF9zcl9lbmFibGVfYXV0b2luaXQpCi0JCW9tYXAzX3R3bF9zZXRfc3JfYml0KHRydWUpOwotCiAJdm9sdGRtID0gdm9sdGRtX2xvb2t1cCgibXB1X2l2YSIpOwogCW9tYXBfdm9sdGFnZV9yZWdpc3Rlcl9wbWljKHZvbHRkbSwgJm9tYXAzX21wdV9wbWljKTsKIApAQCAtMjcxLDQ0ICsyNTIsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLS8qKgotICogb21hcDNfdHdsX3NldF9zcl9iaXQoKSAtIFNldC9DbGVhciBTUiBiaXQgb24gVFdMCi0gKiBAZW5hYmxlOiBlbmFibGUgU1IgbW9kZSBpbiB0d2wgb3Igbm90Ci0gKgotICogSWYgJ2VuYWJsZScgaXMgdHJ1ZSwgZW5hYmxlcyBTbWFydHJlZmxleCBiaXQgb24gVFdMIDQwMzAgdG8gbWFrZSBzdXJlCi0gKiB2b2x0YWdlIHNjYWxpbmcgdGhyb3VnaCBPTUFQIFNSIHdvcmtzLiBFbHNlLCB0aGUgc21hcnRyZWZsZXggYml0Ci0gKiBvbiB0d2w0MDMwIGlzIGNsZWFyZWQgYXMgdGhlcmUgYXJlIHBsYXRmb3JtcyB3aGljaCB1c2UgT01BUDMgYW5kIFQyIGJ1dAotICogdXNlIFN5bmNocm9uaXplZCBTY2FsaW5nIEhhcmR3YXJlIFN0cmF0ZWd5IChFTkFCTEVfVk1PREU9MSkgYW5kIERpcmVjdAotICogU3RyYXRlZ3kgU29mdHdhcmUgU2NhbGluZyBNb2RlIChFTkFCTEVfVk1PREU9MCksIGZvciBzZXR0aW5nIHRoZSB2b2x0YWdlcywKLSAqIGluIHRob3NlIHNjZW5hcmlvcyB0aGlzIGJpdCBpcyB0byBiZSBjbGVhcmVkIChlbmFibGUgPSBmYWxzZSkuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGlzIHJldHVybmVkIGlmIEkyQyByZWFkL3dyaXRlIGZhaWxzLgotICovCi1pbnQgX19pbml0IG9tYXAzX3R3bF9zZXRfc3JfYml0KGJvb2wgZW5hYmxlKQotewotCXU4IHRlbXA7Ci0JaW50IHJldDsKLQlpZiAodHdsX3NyX2VuYWJsZV9hdXRvaW5pdCkKLQkJcHJfd2FybmluZygiJXM6IHVuZXhwZWN0ZWQgbXVsdGlwbGUgY2FsbHNcbiIsIF9fZnVuY19fKTsKLQotCXJldCA9IHR3bF9pMmNfcmVhZF91OChUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCAmdGVtcCwKLQkJCSAgICAgIFRXTDQwMzBfRENEQ19HTE9CQUxfQ0ZHKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCWlmIChlbmFibGUpCi0JCXRlbXAgfD0gU01BUlRSRUZMRVhfRU5BQkxFOwotCWVsc2UKLQkJdGVtcCAmPSB+U01BUlRSRUZMRVhfRU5BQkxFOwotCi0JcmV0ID0gdHdsX2kyY193cml0ZV91OChUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCB0ZW1wLAotCQkJICAgICAgIFRXTDQwMzBfRENEQ19HTE9CQUxfQ0ZHKTsKLQlpZiAoIXJldCkgewotCQl0d2xfc3JfZW5hYmxlX2F1dG9pbml0ID0gdHJ1ZTsKLQkJcmV0dXJuIDA7Ci0JfQotZXJyOgotCXByX2VycigiJXM6IEVycm9yIGFjY2VzcyB0byBUV0w0MDMwICglZClcbiIsIF9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYwppbmRleCBjM2I3MzM1Li45MGM4OGQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMKQEAgLTIyNiw2ICsyMjYsMTQgQEAKIAlhbTM1eHhfZW1hY19yZXNldCgpOwogfQogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM19yb21fcm5nX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDMtcm9tLXJuZyIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gcng1MV9zZWN1cmVfcm5nX2NhbGwsCisJfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBub2tpYV9uOTAwX2xlZ2FjeV9pbml0KHZvaWQpCiB7CiAJaHNtbWMyX2ludGVybmFsX2lucHV0X2NsaygpOwpAQCAtMjM5LDYgKzI0NywxMCBAQAogCQkJcHJfd2FybmluZygiUlgtNTE6IE5vdCBlbmFibGluZyBBUk0gZXJyYXRhIDQzMDk3MyB3b3JrYXJvdW5kXG4iKTsKIAkJCXByX3dhcm5pbmcoIlRodW1iIGJpbmFyaWVzIG1heSBjcmFzaCByYW5kb21seSB3aXRob3V0IHRoaXMgd29ya2Fyb3VuZFxuIik7CiAJCX0KKworCQlwcl9pbmZvKCJSWC01MTogUmVnaXN0cmluZyBPTUFQMyBIV1JORyBkZXZpY2VcbiIpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzX3JvbV9ybmdfZGV2aWNlKTsKKwogCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMyAqLwpAQCAtMjU0LDYgKzI2NiwxMSBAQAogewogCWxlZ2FjeV9pbml0X3dsMTJ4eChXTDEyWFhfUkVGQ0xPQ0tfMzgsIDAsIDUzKTsKIH0KKworc3RhdGljIHZvaWQgX19pbml0IHZhcl9zb21fb200NF9sZWdhY3lfaW5pdCh2b2lkKQoreworCWxlZ2FjeV9pbml0X3dsMTJ4eChXTDEyWFhfUkVGQ0xPQ0tfMzgsIDAsIDQxKTsKK30KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkgfHwgZGVmaW5lZChDT05GSUdfU09DX09NQVA1KQpAQCAtMzY0LDYgKzM4MSw4IEBACiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKIAl7ICJ0aSxvbWFwNC1zZHAiLCBvbWFwNF9zZHBfbGVnYWN5X2luaXQsIH0sCiAJeyAidGksb21hcDQtcGFuZGEiLCBvbWFwNF9wYW5kYV9sZWdhY3lfaW5pdCwgfSwKKwl7ICJ2YXJpc2NpdGUsdmFyLWR2ay1vbTQ0IiwgdmFyX3NvbV9vbTQ0X2xlZ2FjeV9pbml0LCB9LAorCXsgInZhcmlzY2l0ZSx2YXItc3RrLW9tNDQiLCB2YXJfc29tX29tNDRfbGVnYWN5X2luaXQsIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU09DX0FNMzNYWAogCXsgInRpLGFtMzM1eC1ldm1zayIsIGFtMzM1eF9ldm1za19sZWdhY3lfaW5pdCwgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwppbmRleCBlMWI0MTQxLi44MjhhZWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCkBAIC0zMiwxMSArMzIsMTMgQEAKICNpbmNsdWRlICJwbS5oIgogI2luY2x1ZGUgInR3bC1jb21tb24uaCIKIAorI2lmZGVmIENPTkZJR19TVVNQRU5ECiAvKgogICogb21hcF9wbV9zdXNwZW5kOiBwb2ludHMgdG8gYSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIFNvQy1zcGVjaWZpYwogICogc3VzcGVuZCB3b3JrCiAgKi8KLWludCAoKm9tYXBfcG1fc3VzcGVuZCkodm9pZCk7CitzdGF0aWMgaW50ICgqb21hcF9wbV9zdXNwZW5kKSh2b2lkKTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BNCiAvKioKQEAgLTI0Myw2ICsyNDUsMTUgQEAKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CiAKKy8qKgorICogb21hcF9jb21tb25fc3VzcGVuZF9pbml0IC0gU2V0IGNvbW1vbiBzdXNwZW5kIHJvdXRpbmVzIGZvciBPTUFQIFNvQ3MKKyAqIEBwbV9zdXNwZW5kOiBmdW5jdGlvbiBwb2ludGVyIHRvIFNvQyBzcGVjaWZpYyBzdXNwZW5kIGZ1bmN0aW9uCisgKi8KK3ZvaWQgb21hcF9jb21tb25fc3VzcGVuZF9pbml0KHZvaWQgKnBtX3N1c3BlbmQpCit7CisJb21hcF9wbV9zdXNwZW5kID0gcG1fc3VzcGVuZDsKKwlzdXNwZW5kX3NldF9vcHMoJm9tYXBfcG1fb3BzKTsKK30KICNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfaW5pdF92b2x0YWdlcyh2b2lkKQpAQCAtMjg3LDMyICsyOTgsMjQgQEAKIAogaW50IF9faW5pdCBvbWFwMl9jb21tb25fcG1fbGF0ZV9pbml0KHZvaWQpCiB7Ci0JLyoKLQkgKiBJbiB0aGUgY2FzZSBvZiBEVCwgdGhlIFBNSUMgYW5kIFNSIGluaXRpYWxpemF0aW9uIHdpbGwgYmUgZG9uZSB1c2luZwotCSAqIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbWVjaGFuaXNtLgotCSAqIERpc2FibGUgdGhpcyBwYXJ0IGlmIGEgRFQgYmxvYiBpcyBhdmFpbGFibGUuCi0JICovCi0JaWYgKCFvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKSB7Ci0KLQkJLyogSW5pdCB0aGUgdm9sdGFnZSBsYXllciAqLwotCQlvbWFwX3BtaWNfbGF0ZV9pbml0KCk7Ci0JCW9tYXBfdm9sdGFnZV9sYXRlX2luaXQoKTsKLQotCQkvKiBJbml0aWFsaXplIHRoZSB2b2x0YWdlcyAqLwotCQlvbWFwM19pbml0X3ZvbHRhZ2VzKCk7Ci0JCW9tYXA0X2luaXRfdm9sdGFnZXMoKTsKLQotCQkvKiBTbWFydHJlZmxleCBkZXZpY2UgaW5pdCAqLwotCQlvbWFwX2RldmluaXRfc21hcnRyZWZsZXgoKTsKLQorCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKSB7CisJCW9tYXAzX3R3bF9pbml0KCk7CisJCW9tYXA0X3R3bF9pbml0KCk7CiAJfQogCisJLyogSW5pdCB0aGUgdm9sdGFnZSBsYXllciAqLworCW9tYXBfcG1pY19sYXRlX2luaXQoKTsKKwlvbWFwX3ZvbHRhZ2VfbGF0ZV9pbml0KCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSB2b2x0YWdlcyAqLworCW9tYXAzX2luaXRfdm9sdGFnZXMoKTsKKwlvbWFwNF9pbml0X3ZvbHRhZ2VzKCk7CisKKwkvKiBTbWFydHJlZmxleCBkZXZpY2UgaW5pdCAqLworCW9tYXBfZGV2aW5pdF9zbWFydHJlZmxleCgpOworCiAJLyogY3B1ZnJlcSBkdW1teSBkZXZpY2UgaW5zdGFudGlhdGlvbiAqLwogCW9tYXBfaW5pdF9jcHVmcmVxKCk7CiAKLSNpZmRlZiBDT05GSUdfU1VTUEVORAotCXN1c3BlbmRfc2V0X29wcygmb21hcF9wbV9vcHMpOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaAppbmRleCBkNGQwZmNlLi5lMTUwMTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCkBAIC0zNCw3ICszNCw2IEBACiBleHRlcm4gdm9pZCBvbWFwM19wbV9vZmZfbW9kZV9lbmFibGUoaW50KTsKIGV4dGVybiB2b2lkIG9tYXBfc3JhbV9pZGxlKHZvaWQpOwogZXh0ZXJuIGludCBvbWFwX3BtX2Nsa2Rtc19zZXR1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCB2b2lkICp1bnVzZWQpOwotZXh0ZXJuIGludCAoKm9tYXBfcG1fc3VzcGVuZCkodm9pZCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTV9PUFApCiBleHRlcm4gaW50IG9tYXAzX29wcF9pbml0KHZvaWQpOwpAQCAtMTQ3LDQgKzE0NiwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfcG1fc2V0dXBfc3JfaTJjX3BjYl9sZW5ndGgodTMyIG1tKSB7IH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKK3ZvaWQgb21hcF9jb21tb25fc3VzcGVuZF9pbml0KHZvaWQgKnBtX3N1c3BlbmQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2NvbW1vbl9zdXNwZW5kX2luaXQodm9pZCAqcG1fc3VzcGVuZCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwppbmRleCA4YzA3NTk0Li5hNWVhOTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKQEAgLTIyOSw5ICsyMjksNyBAQAogCWNsa2RtX2Zvcl9lYWNoKG9tYXBfcG1fY2xrZG1zX3NldHVwLCBOVUxMKTsKIAljbGtkbV9hZGRfd2tkZXAobXB1X2Nsa2RtLCB3a3VwX2Nsa2RtKTsKIAotI2lmZGVmIENPTkZJR19TVVNQRU5ECi0Jb21hcF9wbV9zdXNwZW5kID0gb21hcDJfZW50ZXJfZnVsbF9yZXRlbnRpb247Ci0jZW5kaWYKKwlvbWFwX2NvbW1vbl9zdXNwZW5kX2luaXQob21hcDJfZW50ZXJfZnVsbF9yZXRlbnRpb24pOwogCiAJLyogUkVWSVNJVDogQ29uZmlndXJlIG51bWJlciBvZiAzMiBrSHogY2xvY2sgY3ljbGVzIGZvciBzeXNfY2xrCiAJICogc3RhYmlsaXNhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggODcwOTliYi4uNTA3ZDhlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAic2RyYy5oIgogI2luY2x1ZGUgInNyYW0uaCIKICNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAidmMuaCIKIAogLyogcG0zNHh4IGVycmF0YSBkZWZpbmVkIGluIHBtLmggKi8KIHUxNiBwbTM0eHhfZXJyYXRhOwpAQCAtMjg4LDYgKzI4OSw5IEBACiAJCX0KIAl9CiAKKwkvKiBDb25maWd1cmUgUE1JQyBzaWduYWxpbmcgZm9yIEkyQzQgb3Igc3lzX29mZl9tb2RlICovCisJb21hcDNfdmNfc2V0X3BtaWNfc2lnbmFsaW5nKGNvcmVfbmV4dF9zdGF0ZSk7CisKIAlvbWFwM19pbnRjX3ByZXBhcmVfaWRsZSgpOwogCiAJLyoKQEAgLTM5MSw3ICszOTUsOCBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQorI2Vsc2UKKyNkZWZpbmUgb21hcDNfcG1fc3VzcGVuZCBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KIAogCkBAIC03MDUsOSArNzEwLDcgQEAKIAlwZXJfY2xrZG0gPSBjbGtkbV9sb29rdXAoInBlcl9jbGtkbSIpOwogCXdrdXBfY2xrZG0gPSBjbGtkbV9sb29rdXAoIndrdXBfY2xrZG0iKTsKIAotI2lmZGVmIENPTkZJR19TVVNQRU5ECi0Jb21hcF9wbV9zdXNwZW5kID0gb21hcDNfcG1fc3VzcGVuZDsKLSNlbmRpZgorCW9tYXBfY29tbW9uX3N1c3BlbmRfaW5pdChvbWFwM19wbV9zdXNwZW5kKTsKIAogCWFybV9wbV9pZGxlID0gb21hcDNfcG1faWRsZTsKIAlvbWFwM19pZGxlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jCmluZGV4IGVlZmIzMGMuLjBkZGE2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwpAQCAtOTYsNiArOTYsOCBAQAogCiAJcmV0dXJuIDA7CiB9CisjZWxzZQorI2RlZmluZSBvbWFwNF9wbV9zdXNwZW5kIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKQpAQCAtMjUxLDkgKzI1Myw3IEBACiAKIAkodm9pZCkgY2xrZG1fZm9yX2VhY2gob21hcF9wbV9jbGtkbXNfc2V0dXAsIE5VTEwpOwogCi0jaWZkZWYgQ09ORklHX1NVU1BFTkQKLQlvbWFwX3BtX3N1c3BlbmQgPSBvbWFwNF9wbV9zdXNwZW5kOwotI2VuZGlmCisJb21hcF9jb21tb25fc3VzcGVuZF9pbml0KG9tYXA0X3BtX3N1c3BlbmQpOwogCiAJLyogT3ZlcndyaXRlIHRoZSBkZWZhdWx0IGNwdV9kb19pZGxlKCkgKi8KIAlhcm1fcG1faWRsZSA9IG9tYXBfZGVmYXVsdF9pZGxlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4tY29tbW9uLmMKaW5kZXggYzBhZWFiZi4uYzQwZTVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLWNvbW1vbi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSAicG0uaCIKICNpbmNsdWRlICJjbS5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCA5M2EyYTZlLi5mYWViZDVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCisjaW5jbHVkZSAidm9sdGFnZS5oIgogCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAicG0uaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaAppbmRleCBkYTVhNTlhLi5mNDcyNzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5oCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNpbmNsdWRlICJ2b2x0YWdlLmgiCi0KIC8qIFBvd2VyZG9tYWluIGJhc2ljIHBvd2VyIHN0YXRlcyAqLwogI2RlZmluZSBQV1JETV9QT1dFUl9PRkYJCTB4MAogI2RlZmluZSBQV1JETV9QT1dFUl9SRVQJCTB4MQpAQCAtNzUsNiArNzMsNyBAQAogCiBzdHJ1Y3QgY2xvY2tkb21haW47CiBzdHJ1Y3QgcG93ZXJkb21haW47CitzdHJ1Y3Qgdm9sdGFnZWRvbWFpbjsKIAogLyoqCiAgKiBzdHJ1Y3QgcG93ZXJkb21haW4gLSBPTUFQIHBvd2VyZG9tYWluCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKaW5kZXggMGU4NDFmZC4uYThlNGI1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaApAQCAtNDI4LDYgKzQyOCwyOCBAQAogI2RlZmluZSBNQVhfSU9QQURfTEFUQ0hfVElNRQkJCTEwMAogIyBpZm5kZWYgX19BU1NFTUJMRVJfXwogCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyoqCisgKiBvbWFwX3Rlc3RfdGltZW91dCAtIGJ1c3ktbG9vcCwgdGVzdGluZyBhIGNvbmRpdGlvbgorICogQGNvbmQ6IGNvbmRpdGlvbiB0byB0ZXN0IHVudGlsIGl0IGV2YWx1YXRlcyB0byB0cnVlCisgKiBAdGltZW91dDogbWF4aW11bSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIGluIHRoZSB0aW1lb3V0CisgKiBAaW5kZXg6IGxvb3AgaW5kZXggKGludGVnZXIpCisgKgorICogTG9vcCB3YWl0aW5nIGZvciBAY29uZCB0byBiZWNvbWUgdHJ1ZSBvciB1bnRpbCBhdCBsZWFzdCBAdGltZW91dAorICogbWljcm9zZWNvbmRzIGhhdmUgcGFzc2VkLiAgVG8gdXNlLCBkZWZpbmUgc29tZSBpbnRlZ2VyIEBpbmRleCBpbiB0aGUKKyAqIGNhbGxpbmcgY29kZS4gIEFmdGVyIHJ1bm5pbmcsIGlmIEBpbmRleCA9PSBAdGltZW91dCwgdGhlbiB0aGUgbG9vcCBoYXMKKyAqIHRpbWVkIG91dC4KKyAqLworI2RlZmluZSBvbWFwX3Rlc3RfdGltZW91dChjb25kLCB0aW1lb3V0LCBpbmRleCkJCQlcCisoewkJCQkJCQkJXAorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRpbWVvdXQ7IGluZGV4KyspIHsJCVwKKwkJaWYgKGNvbmQpCQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJdWRlbGF5KDEpOwkJCQkJXAorCX0JCQkJCQkJXAorfSkKKwogLyoqCiAgKiBzdHJ1Y3Qgb21hcF9wcmNtX2lycSAtIGRlc2NyaWJlcyBhIFBSQ00gaW50ZXJydXB0IGJpdAogICogQG5hbWU6IGEgc2hvcnQgbmFtZSBkZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQgdHlwZSwgZS5nLiAid2t1cCIgb3IgImlvIgpAQCAtNDU4LDYgKzQ4MCw3IEBACiAgKiBAb2NwX2JhcnJpZXI6IGZuIHB0ciB0byBmb3JjZSBidWZmZXJlZCBQUk0gd3JpdGVzIHRvIGNvbXBsZXRlCiAgKiBAc2F2ZV9hbmRfY2xlYXJfaXJxZW46IGZuIHB0ciB0byBzYXZlIGFuZCBjbGVhciBJUlFFTkFCTEUgcmVncwogICogQHJlc3RvcmVfaXJxZW46IGZuIHB0ciB0byBzYXZlIGFuZCBjbGVhciBJUlFFTkFCTEUgcmVncworICogQHJlY29uZmlndXJlX2lvX2NoYWluOiBmbiBwdHIgdG8gcmVjb25maWd1cmUgSU8gY2hhaW4KICAqIEBzYXZlZF9tYXNrOiBJUlFFTkFCTEUgcmVncyBhcmUgc2F2ZWQgaGVyZSBkdXJpbmcgc3VzcGVuZAogICogQHByaW9yaXR5X21hc2s6IDEgYml0IHBlciBJUlEsIHNldCB0byAxIGlmIG9tYXBfcHJjbV9pcnEucHJpb3JpdHkgPSB0cnVlCiAgKiBAYmFzZV9pcnE6IGJhc2UgZHluYW1pYyBJUlEgbnVtYmVyLCByZXR1cm5lZCBmcm9tIGlycV9hbGxvY19kZXNjcygpIGluIGluaXQKQEAgLTQ3OSw2ICs1MDIsNyBAQAogCXZvaWQgKCpvY3BfYmFycmllcikodm9pZCk7CiAJdm9pZCAoKnNhdmVfYW5kX2NsZWFyX2lycWVuKSh1MzIgKnNhdmVkX21hc2spOwogCXZvaWQgKCpyZXN0b3JlX2lycWVuKSh1MzIgKnNhdmVkX21hc2spOworCXZvaWQgKCpyZWNvbmZpZ3VyZV9pb19jaGFpbikodm9pZCk7CiAJdTMyICpzYXZlZF9tYXNrOwogCXUzMiAqcHJpb3JpdHlfbWFzazsKIAlpbnQgYmFzZV9pcnE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguYwppbmRleCBjMzBlNDRhLi5jZGJlZTYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmMKQEAgLTMwLDEyICszMCwxMiBAQAogCiB1MzIgb21hcDRfcHJjbV9tcHVfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihpbnN0LCByZWcpKTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKGluc3QsIHJlZykpOwogfQogCiB2b2lkIG9tYXA0X3ByY21fbXB1X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQogewotCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoaW5zdCwgcmVnKSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKGluc3QsIHJlZykpOwogfQogCiB1MzIgb21hcDRfcHJjbV9tcHVfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IHJlZykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oCmluZGV4IDA1OWJkNGYuLmFjOWNiNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJDTV9NUFU0NFhYX0gKIAogI2luY2x1ZGUgInByY21fbXB1XzQ0eHhfNTR4eC5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgogCiAjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0JBU0UJCQkweDQ4MjQzMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKaW5kZXggY2ViYWQ1Ni4uMTA2MTMyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKQEAgLTEyMyw4ICsxMjMsMTUgQEAKICNkZWZpbmUgT01BUDM0MzBfR0xPQkFMX1NXX1JTVF9TSElGVAkJCTEKICNkZWZpbmUgT01BUDM0MzBfR0xPQkFMX0NPTERfUlNUX1NISUZUCQkJMAogI2RlZmluZSBPTUFQMzQzMF9HTE9CQUxfQ09MRF9SU1RfTUFTSwkJCSgxIDw8IDApCi0jZGVmaW5lIE9NQVAzNDMwX1NFTF9PRkZfTUFTSwkJCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQMzQzMF9BVVRPX09GRl9NQVNLCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9TRUxfVk1PREUJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVk9MVENUUkxfU0VMX09GRgkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9BVVRPX09GRgkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9BVVRPX1JFVAkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9BVVRPX1NMRUVQCQkoMSA8PCAwKQogI2RlZmluZSBPTUFQMzQzMF9TRVRVUF9USU1FMl9NQVNLCQkJKDB4ZmZmZiA8PCAxNikKICNkZWZpbmUgT01BUDM0MzBfU0VUVVBfVElNRTFfTUFTSwkJCSgweGZmZmYgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1BPTENUUkxfT0ZGTU9ERV9QT0wJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9QT0xDVFJMX0NMS09VVF9QT0wJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fUE9MQ1RSTF9DTEtSRVFfUE9MCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1BPTENUUkxfRVhUVk9MX1BPTAkJCSgxIDw8IDApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCmluZGV4IDYyM2RiNDAuLjQ4NDgwZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaApAQCAtMTcsMTAgKzE3LDE4IEBACiAKICMgaWZuZGVmIF9fQVNTRU1CTEVSX18KIGV4dGVybiB2b2lkIF9faW9tZW0gKnBybV9iYXNlOworZXh0ZXJuIHUxNiBwcm1fZmVhdHVyZXM7CiBleHRlcm4gdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19wcm0odm9pZCBfX2lvbWVtICpwcm0pOwogaW50IG9mX3ByY21faW5pdCh2b2lkKTsKICMgZW5kaWYKIAorLyoKKyAqIHBybV9mZWF0dXJlcyBmbGFnIHZhbHVlcworICoKKyAqIFBSTV9IQVNfSU9fV0FLRVVQOiBoYXMgSU8gd2FrZXVwIGNhcGFiaWxpdHkKKyAqIFBSTV9IQVNfVk9MVEFHRTogaGFzIHZvbHRhZ2UgZG9tYWlucworICovCisjZGVmaW5lIFBSTV9IQVNfSU9fV0FLRVVQCSgxIDw8IDApCiAKIC8qCiAgKiBNQVhfTU9EVUxFX1NPRlRSRVNFVF9XQUlUOiBNYXhpbXVtIG1pY3Jvc2Vjb25kcyB0byB3YWl0IGZvciBPTUFQCkBAIC0xMTgsNiArMTI2LDcgQEAKICAqIEByZWFkX3Jlc2V0X3NvdXJjZXM6IHB0ciB0byB0aGUgU29DIFBSTS1zcGVjaWZpYyBnZXRfcmVzZXRfc291cmNlIGltcGwKICAqIEB3YXNfYW55X2NvbnRleHRfbG9zdF9vbGQ6IHB0ciB0byB0aGUgU29DIFBSTSBjb250ZXh0IGxvc3MgdGVzdCBmbgogICogQGNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQ6IHB0ciB0byB0aGUgU29DIFBSTSBjb250ZXh0IGxvc3MgZmxhZyBjbGVhciBmbgorICogQGxhdGVfaW5pdDogcHRyIHRvIHRoZSBsYXRlIGluaXQgZnVuY3Rpb24KICAqCiAgKiBYWFggQHdhc19hbnlfY29udGV4dF9sb3N0X29sZCBhbmQgQGNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQgYXJlCiAgKiBkZXByZWNhdGVkLgpAQCAtMTI2LDYgKzEzNSw3IEBACiAJdTMyICgqcmVhZF9yZXNldF9zb3VyY2VzKSh2b2lkKTsKIAlib29sICgqd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkKSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGlkeCk7CiAJdm9pZCAoKmNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQpKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KTsKKwlpbnQgKCpsYXRlX2luaXQpKHZvaWQpOwogfTsKIAogZXh0ZXJuIGludCBwcm1fcmVnaXN0ZXIoc3RydWN0IHBybV9sbF9kYXRhICpwbGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYwppbmRleCA0MThkZTljLi5hM2EzY2NhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYwpAQCAtMTgsOSArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKLSNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJ2cC5oIgogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCiAjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKICNpbmNsdWRlICJwcm0yeHh4LmgiCkBAIC0yMDEsMTkgKzE5OCwxMSBAQAogCiBpbnQgX19pbml0IG9tYXAyeHh4X3BybV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKLQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gcHJtX3JlZ2lzdGVyKCZvbWFwMnh4eF9wcm1fbGxfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwMnh4eF9wcm1fZXhpdCh2b2lkKQogewotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybjsKLQotCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlXQVJOKHBybV91bnJlZ2lzdGVyKCZvbWFwMnh4eF9wcm1fbGxfZGF0YSksCi0JICAgICAiJXM6IHBybV9sbF9kYXRhIGZ1bmN0aW9uIHBvaW50ZXIgbWlzbWF0Y2hcbiIsIF9fZnVuY19fKTsKKwlwcm1fdW5yZWdpc3Rlcigmb21hcDJ4eHhfcHJtX2xsX2RhdGEpOwogfQogX19leGl0Y2FsbChvbWFwMnh4eF9wcm1fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oCmluZGV4IDMxOTRkZDguLmQyY2I2MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qCiAgKiBPTUFQMi1zcGVjaWZpYyBnbG9iYWwgUFJNIHJlZ2lzdGVycwotICogVXNlIF9fcmF3X3tyZWFkLHdyaXRlfWwoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqIFVzZSB7cmVhZCx3cml0ZX1sX3JlbGF4ZWQoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KICAqCiAgKiBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHRoZXNlIGFyZSB0aGUgcmVnaXN0ZXIgbmFtZXMgYmVnaW5uaW5nIHdpdGgKICAqIFBSQ01fKiBvbiAyNHh4LiAgKFRoZSBleGNlcHRpb25zIGFyZSB0aGUgSVJRU1RBVFVTIGFuZCBJUlFFTkFCTEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCmluZGV4IDk0N2Y2YWQuLmMxM2I0ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCmluZGV4IDk2MjRiNDAuLjFhM2E5NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaApAQCAtNTUsMTIgKzU1LDEyIEBACiAvKiBQb3dlci9yZXNldCBtYW5hZ2VtZW50IGRvbWFpbiByZWdpc3RlciBnZXQvc2V0ICovCiBzdGF0aWMgaW5saW5lIHUzMiBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKHMxNiBtb2R1bGUsIHUxNiBpZHgpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKHBybV9iYXNlICsgbW9kdWxlICsgaWR4KTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChwcm1fYmFzZSArIG1vZHVsZSArIGlkeCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCB1MTYgaWR4KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIHBybV9iYXNlICsgbW9kdWxlICsgaWR4KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBybV9iYXNlICsgbW9kdWxlICsgaWR4KTsKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBhIFBSTSBtb2R1bGUuIENhbGxlciBtdXN0IGxvY2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMKaW5kZXggNzIwNDQwNy4uNjI3MDljZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKICNpbmNsdWRlICJwcm0zM3h4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzN4eC5oIgpAQCAtMjcsMTMgKzI2LDEzIEBACiAvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gYSBQUk0gaW5zdGFuY2UgKi8KIHUzMiBhbTMzeHhfcHJtX3JlYWRfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KQogewotCXJldHVybiBfX3Jhd19yZWFkbChwcm1fYmFzZSArIGluc3QgKyBpZHgpOworCXJldHVybiByZWFkbF9yZWxheGVkKHBybV9iYXNlICsgaW5zdCArIGlkeCk7CiB9CiAKIC8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBhIFBSTSBpbnN0YW5jZSAqLwogdm9pZCBhbTMzeHhfcHJtX3dyaXRlX3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBwcm1fYmFzZSArIGluc3QgKyBpZHgpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJtX2Jhc2UgKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBQUk0uIENhbGxlciBtdXN0IGxvY2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMKaW5kZXggNzcyMTk5MC4uNGJkN2EyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMKQEAgLTQzLDYgKzQzLDcgQEAKIAkub2NwX2JhcnJpZXIJCT0gJm9tYXAzeHh4X3BybV9vY3BfYmFycmllciwKIAkuc2F2ZV9hbmRfY2xlYXJfaXJxZW4JPSAmb21hcDN4eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuLAogCS5yZXN0b3JlX2lycWVuCQk9ICZvbWFwM3h4eF9wcm1fcmVzdG9yZV9pcnFlbiwKKwkucmVjb25maWd1cmVfaW9fY2hhaW4JPSAmb21hcDN4eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluLAogfTsKIAogLyoKQEAgLTI0Niw3ICsyNDcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDN4eHhfcHJtX2VuYWJsZV9pb193YWtldXAodm9pZCkKIHsKLQlpZiAob21hcDNfaGFzX2lvX3dha2V1cCgpKQorCWlmIChwcm1fZmVhdHVyZXMgJiBQUk1fSEFTX0lPX1dBS0VVUCkKIAkJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUDM0MzBfRU5fSU9fTUFTSywgV0tVUF9NT0QsCiAJCQkJCSAgIFBNX1dLRU4pOwogfQpAQCAtNDAwLDIzICs0MDEsMjYgQEAKICAqCiAgKi8KIAorc3RhdGljIGludCBvbWFwM3h4eF9wcm1fbGF0ZV9pbml0KHZvaWQpOworCiBzdGF0aWMgc3RydWN0IHBybV9sbF9kYXRhIG9tYXAzeHh4X3BybV9sbF9kYXRhID0gewogCS5yZWFkX3Jlc2V0X3NvdXJjZXMgPSAmb21hcDN4eHhfcHJtX3JlYWRfcmVzZXRfc291cmNlcywKKwkubGF0ZV9pbml0ID0gJm9tYXAzeHh4X3BybV9sYXRlX2luaXQsCiB9OwogCiBpbnQgX19pbml0IG9tYXAzeHh4X3BybV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV0dXJuIDA7CisJaWYgKG9tYXAzX2hhc19pb193YWtldXAoKSkKKwkJcHJtX2ZlYXR1cmVzIHw9IFBSTV9IQVNfSU9fV0FLRVVQOwogCiAJcmV0dXJuIHBybV9yZWdpc3Rlcigmb21hcDN4eHhfcHJtX2xsX2RhdGEpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwM3h4eF9wcm1fbGF0ZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IG9tYXAzeHh4X3BybV9sYXRlX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwlpZiAoIShwcm1fZmVhdHVyZXMgJiBQUk1fSEFTX0lPX1dBS0VVUCkpCiAJCXJldHVybiAwOwogCiAJb21hcDN4eHhfcHJtX2VuYWJsZV9pb193YWtldXAoKTsKQEAgLTQyNywxNSArNDMxLDkgQEAKIAogCXJldHVybiByZXQ7CiB9Ci1vbWFwX3N1YnN5c19pbml0Y2FsbChvbWFwM3h4eF9wcm1fbGF0ZV9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXAzeHh4X3BybV9leGl0KHZvaWQpCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV0dXJuOwotCi0JLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCVdBUk4ocHJtX3VucmVnaXN0ZXIoJm9tYXAzeHh4X3BybV9sbF9kYXRhKSwKLQkgICAgICIlczogcHJtX2xsX2RhdGEgZnVuY3Rpb24gcG9pbnRlciBtaXNtYXRjaFxuIiwgX19mdW5jX18pOworCXBybV91bnJlZ2lzdGVyKCZvbWFwM3h4eF9wcm1fbGxfZGF0YSk7CiB9CiBfX2V4aXRjYWxsKG9tYXAzeHh4X3BybV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmgKaW5kZXggZjhlYjgzMy4uMWRhY2ZjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogLyoKICAqIE9NQVAzLXNwZWNpZmljIGdsb2JhbCBQUk0gcmVnaXN0ZXJzCi0gKiBVc2UgX19yYXdfe3JlYWQsd3JpdGV9bCgpIHdpdGggdGhlc2UgcmVnaXN0ZXJzLgorICogVXNlIHtyZWFkLHdyaXRlfWxfcmVsYXhlZCgpIHdpdGggdGhlc2UgcmVnaXN0ZXJzLgogICoKICAqIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgdGhlc2UgYXJlIHRoZSByZWdpc3RlciBuYW1lcyBiZWdpbm5pbmcgd2l0aAogICogUFJNXyogb24gMzR4eC4gIChUaGUgZXhjZXB0aW9ucyBhcmUgdGhlIElSUVNUQVRVUyBhbmQgSVJRRU5BQkxFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCmluZGV4IDAzYTYwMzQuLmE3ZjZlYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJLm9jcF9iYXJyaWVyCQk9ICZvbWFwNDR4eF9wcm1fb2NwX2JhcnJpZXIsCiAJLnNhdmVfYW5kX2NsZWFyX2lycWVuCT0gJm9tYXA0NHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbiwKIAkucmVzdG9yZV9pcnFlbgkJPSAmb21hcDQ0eHhfcHJtX3Jlc3RvcmVfaXJxZW4sCisJLnJlY29uZmlndXJlX2lvX2NoYWluCT0gJm9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbiwKIH07CiAKIC8qCkBAIC04MSwxMyArODIsMTMgQEAKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNL1BSTSBpbnN0YW5jZSBpbiB0aGUgUFJNIG1vZHVsZSAqLwogdTMyIG9tYXA0X3BybV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgcmVnKQogewotCXJldHVybiBfX3Jhd19yZWFkbChwcm1fYmFzZSArIGluc3QgKyByZWcpOworCXJldHVybiByZWFkbF9yZWxheGVkKHBybV9iYXNlICsgaW5zdCArIHJlZyk7CiB9CiAKIC8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBhIENNL1BSTSBpbnN0YW5jZSBpbiB0aGUgUFJNIG1vZHVsZSAqLwogdm9pZCBvbWFwNF9wcm1fd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgcHJtX2Jhc2UgKyBpbnN0ICsgcmVnKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBybV9iYXNlICsgaW5zdCArIHJlZyk7CiB9CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlLiBDYWxsZXIgbXVzdCBsb2NrICovCkBAIC02NDksNiArNjUwLDggQEAKIAkucHdyZG1faGFzX3ZvbHRkbQk9IG9tYXA0X2NoZWNrX3ZjdnAsCiB9OwogCitzdGF0aWMgaW50IG9tYXA0NHh4X3BybV9sYXRlX2luaXQodm9pZCk7CisKIC8qCiAgKiBYWFggZG9jdW1lbnQKICAqLwpAQCAtNjU2LDM0ICs2NTksMjkgQEAKIAkucmVhZF9yZXNldF9zb3VyY2VzID0gJm9tYXA0NHh4X3BybV9yZWFkX3Jlc2V0X3NvdXJjZXMsCiAJLndhc19hbnlfY29udGV4dF9sb3N0X29sZCA9ICZvbWFwNDR4eF9wcm1fd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkLAogCS5jbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkID0gJm9tYXA0NHh4X3BybV9jbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkLAorCS5sYXRlX2luaXQgPSAmb21hcDQ0eHhfcHJtX2xhdGVfaW5pdCwKIH07CiAKIGludCBfX2luaXQgb21hcDQ0eHhfcHJtX2luaXQodm9pZCkKIHsKLQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpICYmICFzb2NfaXNfb21hcDU0eHgoKSAmJiAhc29jX2lzX2RyYTd4eCgpKQotCQlyZXR1cm4gMDsKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCXBybV9mZWF0dXJlcyB8PSBQUk1fSEFTX0lPX1dBS0VVUDsKIAogCXJldHVybiBwcm1fcmVnaXN0ZXIoJm9tYXA0NHh4X3BybV9sbF9kYXRhKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcDQ0eHhfcHJtX2xhdGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBvbWFwNDR4eF9wcm1fbGF0ZV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwlpZiAoIShwcm1fZmVhdHVyZXMgJiBQUk1fSEFTX0lPX1dBS0VVUCkpCiAJCXJldHVybiAwOwogCiAJb21hcDQ0eHhfcHJtX2VuYWJsZV9pb193YWtldXAoKTsKIAogCXJldHVybiBvbWFwX3ByY21fcmVnaXN0ZXJfY2hhaW5faGFuZGxlcigmb21hcDRfcHJjbV9pcnFfc2V0dXApOwogfQotb21hcF9zdWJzeXNfaW5pdGNhbGwob21hcDQ0eHhfcHJtX2xhdGVfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwNDR4eF9wcm1fZXhpdCh2b2lkKQogewotCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCi0JCXJldHVybjsKLQotCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlXQVJOKHBybV91bnJlZ2lzdGVyKCZvbWFwNDR4eF9wcm1fbGxfZGF0YSksCi0JICAgICAiJXM6IHBybV9sbF9kYXRhIGZ1bmN0aW9uIHBvaW50ZXIgbWlzbWF0Y2hcbiIsIF9fZnVuY19fKTsKKwlwcm1fdW5yZWdpc3Rlcigmb21hcDQ0eHhfcHJtX2xsX2RhdGEpOwogfQogX19leGl0Y2FsbChvbWFwNDR4eF9wcm1fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCmluZGV4IGI0YzRhYjkuLjI1ZThiODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCkBAIC02Miw2ICs2Miw4IEBACiAvKiBwcm1fYmFzZTogYmFzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIFBSTSBJUCBibG9jayAqLwogdm9pZCBfX2lvbWVtICpwcm1fYmFzZTsKIAordTE2IHBybV9mZWF0dXJlczsKKwogLyoKICAqIHBybV9sbF9kYXRhOiBmdW5jdGlvbiBwb2ludGVycyB0byBTb0Mtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mCiAgKiBjb21tb24gUFJNIGZ1bmN0aW9ucwpAQCAtMzMwLDEyICszMzIsNyBAQAogCiAJaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpIHsKIAkJaW50IGlycSA9IG9tYXBfcHJjbV9ldmVudF90b19pcnEoImlvIik7Ci0JCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJCW9tYXBfcGNzX2xlZ2FjeV9pbml0KGlycSwKLQkJCQlvbWFwM3h4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4pOwotCQllbHNlCi0JCQlvbWFwX3Bjc19sZWdhY3lfaW5pdChpcnEsCi0JCQkJb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKTsKKwkJb21hcF9wY3NfbGVnYWN5X2luaXQoaXJxLCBpcnFfc2V0dXAtPnJlY29uZmlndXJlX2lvX2NoYWluKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUzMCwzICs1MjcsMTEgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwcm1fbGF0ZV9pbml0KHZvaWQpCit7CisJaWYgKHBybV9sbF9kYXRhLT5sYXRlX2luaXQpCisJCXJldHVybiBwcm1fbGxfZGF0YS0+bGF0ZV9pbml0KCk7CisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwocHJtX2xhdGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMKaW5kZXggMDVmY2Y2ZC4uNjlmMGRkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguYwpAQCAtNDksNyArNDksNyBAQAogCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKIAkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CiAJICAgICAgICFfcHJtX2Jhc2VzW3BhcnRdKTsKLQlyZXR1cm4gX19yYXdfcmVhZGwoX3BybV9iYXNlc1twYXJ0XSArIGluc3QgKyBpZHgpOworCXJldHVybiByZWFkbF9yZWxheGVkKF9wcm1fYmFzZXNbcGFydF0gKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgUFJNIGluc3RhbmNlICovCkBAIC01OCw3ICs1OCw3IEBACiAJQlVHX09OKHBhcnQgPj0gT01BUDRfTUFYX1BSQ01fUEFSVElUSU9OUyB8fAogCSAgICAgICBwYXJ0ID09IE9NQVA0NDMwX0lOVkFMSURfUFJDTV9QQVJUSVRJT04gfHwKIAkgICAgICAgIV9wcm1fYmFzZXNbcGFydF0pOwotCV9fcmF3X3dyaXRlbCh2YWwsIF9wcm1fYmFzZXNbcGFydF0gKyBpbnN0ICsgaWR4KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIF9wcm1fYmFzZXNbcGFydF0gKyBpbnN0ICsgaWR4KTsKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBQUk0uIENhbGxlciBtdXN0IGxvY2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKaW5kZXggNDQ2YWExMy4uNjQ1YTJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKQEAgLTMxLDI0ICszMSwyNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2RyY193cml0ZV9yZWcodTMyIHZhbCwgdTE2IHJlZykKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBPTUFQX1NEUkNfUkVHQUREUihyZWcpKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIE9NQVBfU0RSQ19SRUdBRERSKHJlZykpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBzZHJjX3JlYWRfcmVnKHUxNiByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVBfU0RSQ19SRUdBRERSKHJlZykpOworCXJldHVybiByZWFkbF9yZWxheGVkKE9NQVBfU0RSQ19SRUdBRERSKHJlZykpOwogfQogCiAvKiBTTVMgZ2xvYmFsIHJlZ2lzdGVyIGdldC9zZXQgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHNtc193cml0ZV9yZWcodTMyIHZhbCwgdTE2IHJlZykKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBPTUFQX1NNU19SRUdBRERSKHJlZykpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgT01BUF9TTVNfUkVHQUREUihyZWcpKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgc21zX3JlYWRfcmVnKHUxNiByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVBfU01TX1JFR0FERFIocmVnKSk7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoT01BUF9TTVNfUkVHQUREUihyZWcpKTsKIH0KIAogZXh0ZXJuIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfc2RyYyh2b2lkIF9faW9tZW0gKnNkcmMsIHZvaWQgX19pb21lbSAqc21zKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwppbmRleCA5MDcyOTE3Li5hZTNmMTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMyeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjMnh4eC5jCkBAIC0xMDMsOSArMTAzLDkgQEAKIAkgKiBwcm0yeHh4LmMgZnVuY3Rpb24KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCi0JCV9fcmF3X3dyaXRlbCgweGZmZmYsIE9NQVAyNDIwX1BSQ01fVk9MVFNFVFVQKTsKKwkJd3JpdGVsX3JlbGF4ZWQoMHhmZmZmLCBPTUFQMjQyMF9QUkNNX1ZPTFRTRVRVUCk7CiAJZWxzZQotCQlfX3Jhd193cml0ZWwoMHhmZmZmLCBPTUFQMjQzMF9QUkNNX1ZPTFRTRVRVUCk7CisJCXdyaXRlbF9yZWxheGVkKDB4ZmZmZiwgT01BUDI0MzBfUFJDTV9WT0xUU0VUVVApOwogCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMobGV2ZWwsIGRsbF9jdHJsLCBtX3R5cGUpOwogCWN1cnJfcGVyZl9sZXZlbCA9IGxldmVsOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc29jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NvYy5oCmluZGV4IDMwYWJjYzguLmRlMmEzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc29jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zb2MuaApAQCAtNDU5LDEwICs0NTksMTUgQEAKICNkZWZpbmUgT01BUDU0MzBfUkVWX0VTMl8wCShPTUFQNTRYWF9DTEFTUyB8ICgweDMwIDw8IDE2KSB8ICgweDIwIDw8IDgpKQogI2RlZmluZSBPTUFQNTQzMl9SRVZfRVMyXzAJKE9NQVA1NFhYX0NMQVNTIHwgKDB4MzIgPDwgMTYpIHwgKDB4MjAgPDwgOCkpCiAKKyNkZWZpbmUgRFJBN1hYX0NMQVNTCQkweDA3MDAwMDAwCisjZGVmaW5lIERSQTc1Ml9SRVZfRVMxXzAJKERSQTdYWF9DTEFTUyB8ICgweDUyIDw8IDE2KSB8ICgweDEwIDw8IDgpKQorI2RlZmluZSBEUkE3NTJfUkVWX0VTMV8xCShEUkE3WFhfQ0xBU1MgfCAoMHg1MiA8PCAxNikgfCAoMHgxMSA8PCA4KSkKKwogdm9pZCBvbWFwMnh4eF9jaGVja19yZXZpc2lvbih2b2lkKTsKIHZvaWQgb21hcDN4eHhfY2hlY2tfcmV2aXNpb24odm9pZCk7CiB2b2lkIG9tYXA0eHh4X2NoZWNrX3JldmlzaW9uKHZvaWQpOwogdm9pZCBvbWFwNXh4eF9jaGVja19yZXZpc2lvbih2b2lkKTsKK3ZvaWQgZHJhN3h4eF9jaGVja19yZXZpc2lvbih2b2lkKTsKIHZvaWQgb21hcDN4eHhfY2hlY2tfZmVhdHVyZXModm9pZCk7CiB2b2lkIHRpODF4eF9jaGVja19mZWF0dXJlcyh2b2lkKTsKIHZvaWQgYW0zM3h4X2NoZWNrX2ZlYXR1cmVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMKaW5kZXggZDdiYzMzZi4uMWI5MWVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKIAkJLyoKIAkJICogSW4gT01BUDQgdGhlIGVmdXNlIHJlZ2lzdGVycyBhcmUgMjQgYml0IGFsaWduZWQuCi0JCSAqIEEgX19yYXdfcmVhZGwgd2lsbCBmYWlsIGZvciBub24tMzIgYml0IGFsaWduZWQgYWRkcmVzcworCQkgKiBBIHJlYWRsX3JlbGF4ZWQgd2lsbCBmYWlsIGZvciBub24tMzIgYml0IGFsaWduZWQgYWRkcmVzcwogCQkgKiBhbmQgaGVuY2UgdGhlIDgtYml0IHJlYWQgYW5kIHNoaWZ0LgogCQkgKi8KIAkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jCmluZGV4IDRiZDA5NjguLmRkZjE4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jCkBAIC03MCwxNiArNzAsMTYgQEAKIAlpZiAoT01BUDJfREVWSUNFX1RZUEVfR1AgPT0gb21hcF90eXBlKCkpIHsKIAkJLyogUkFNRlc6IFIvVyBhY2Nlc3MgdG8gYWxsIGluaXRpYXRvcnMgZm9yIGFsbCBxdWFsaWZpZXIgc2V0cyAqLwogCQlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKLQkJCV9fcmF3X3dyaXRlbCgweEZGLCBPTUFQMjRYWF9WQV9SRVFJTkZPUEVSTTApOyAvKiBhbGwgcS12ZWN0cyAqLwotCQkJX19yYXdfd3JpdGVsKDB4Q0ZERSwgT01BUDI0WFhfVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KLQkJCV9fcmF3X3dyaXRlbCgweENGREUsIE9NQVAyNFhYX1ZBX1dSSVRFUEVSTTApOyAvKiBhbGwgaS13cml0ZSAqLworCQkJd3JpdGVsX3JlbGF4ZWQoMHhGRiwgT01BUDI0WFhfVkFfUkVRSU5GT1BFUk0wKTsgLyogYWxsIHEtdmVjdHMgKi8KKwkJCXdyaXRlbF9yZWxheGVkKDB4Q0ZERSwgT01BUDI0WFhfVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KKwkJCXdyaXRlbF9yZWxheGVkKDB4Q0ZERSwgT01BUDI0WFhfVkFfV1JJVEVQRVJNMCk7IC8qIGFsbCBpLXdyaXRlICovCiAJCX0KIAkJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCQlfX3Jhd193cml0ZWwoMHhGRkZGLCBPTUFQMzRYWF9WQV9SRVFJTkZPUEVSTTApOyAvKiBhbGwgcS12ZWN0cyAqLwotCQkJX19yYXdfd3JpdGVsKDB4RkZGRiwgT01BUDM0WFhfVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KLQkJCV9fcmF3X3dyaXRlbCgweEZGRkYsIE9NQVAzNFhYX1ZBX1dSSVRFUEVSTTApOyAvKiBhbGwgaS13cml0ZSAqLwotCQkJX19yYXdfd3JpdGVsKDB4MCwgT01BUDM0WFhfVkFfQUREUl9NQVRDSDIpOwotCQkJX19yYXdfd3JpdGVsKDB4RkZGRkZGRkYsIE9NQVAzNFhYX1ZBX1NNU19SR19BVFQwKTsKKwkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRiwgT01BUDM0WFhfVkFfUkVRSU5GT1BFUk0wKTsgLyogYWxsIHEtdmVjdHMgKi8KKwkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRiwgT01BUDM0WFhfVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KKwkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRiwgT01BUDM0WFhfVkFfV1JJVEVQRVJNMCk7IC8qIGFsbCBpLXdyaXRlICovCisJCQl3cml0ZWxfcmVsYXhlZCgweDAsIE9NQVAzNFhYX1ZBX0FERFJfTUFUQ0gyKTsKKwkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRkZGRkYsIE9NQVAzNFhYX1ZBX1NNU19SR19BVFQwKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYwppbmRleCBiNjJkZTlmLi40M2QwM2ZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogLyogQ2xvY2tzb3VyY2UgY29kZSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIGNsa3NyYzsKLXN0YXRpYyBib29sIHVzZV9ncHRpbWVyX2Nsa3NyYzsKK3N0YXRpYyBib29sIHVzZV9ncHRpbWVyX2Nsa3NyYyBfX2luaXRkYXRhOwogCiAvKgogICogY2xvY2tzb3VyY2UKQEAgLTU0NiwxNSArNTQ2LDE1IEBACiAJfQogCiAJLyogUHJvZ3JhbSBudW1lcmF0b3IgYW5kIGRlbnVtZXJhdG9yIHJlZ2lzdGVycyAqLwotCXJlZyA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJTkNSRU1FTlRFUl9OVU1FUkFUT1JfT0ZGU0VUKSAmCisJcmVnID0gcmVhZGxfcmVsYXhlZChiYXNlICsgSU5DUkVNRU5URVJfTlVNRVJBVE9SX09GRlNFVCkgJgogCQkJTlVNRVJBVE9SX0RFTlVNRVJBVE9SX01BU0s7CiAJcmVnIHw9IG51bTsKLQlfX3Jhd193cml0ZWwocmVnLCBiYXNlICsgSU5DUkVNRU5URVJfTlVNRVJBVE9SX09GRlNFVCk7CisJd3JpdGVsX3JlbGF4ZWQocmVnLCBiYXNlICsgSU5DUkVNRU5URVJfTlVNRVJBVE9SX09GRlNFVCk7CiAKLQlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgSU5DUkVNRU5URVJfREVOVU1FUkFUT1JfUkVMT0FEX09GRlNFVCkgJgorCXJlZyA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIElOQ1JFTUVOVEVSX0RFTlVNRVJBVE9SX1JFTE9BRF9PRkZTRVQpICYKIAkJCU5VTUVSQVRPUl9ERU5VTUVSQVRPUl9NQVNLOwogCXJlZyB8PSBkZW47Ci0JX19yYXdfd3JpdGVsKHJlZywgYmFzZSArIElOQ1JFTUVOVEVSX0RFTlVNRVJBVE9SX1JFTE9BRF9PRkZTRVQpOworCXdyaXRlbF9yZWxheGVkKHJlZywgYmFzZSArIElOQ1JFTUVOVEVSX0RFTlVNRVJBVE9SX1JFTE9BRF9PRkZTRVQpOwogCiAJYXJjaF90aW1lcl9mcmVxID0gKHJhdGUgLyBkZW4pICogbnVtOwogCXNldF9jbnRmcmVxKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1ob3N0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1ob3N0LmMKaW5kZXggMTA4NTVlYi4uNzQ1MzY3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItaG9zdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLWhvc3QuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJvbWFwX2RldmljZS5oIgpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJLyogLmluaXRfZGF0YSBmaWxsZWQgbGF0ZXIgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpub3BfbmFtZSA9ICJ1c2JfcGh5X2dlbl94Y2VpdiI7IC8qIE5PUCBQSFkgZHJpdmVyICovCitzdGF0aWMgY29uc3QgY2hhciAqbm9wX25hbWUgPSAidXNiX3BoeV9nZW5lcmljIjsgLyogTk9QIFBIWSBkcml2ZXIgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpyZWdfbmFtZSA9ICJyZWctZml4ZWQtdm9sdGFnZSI7IC8qIFJlZ3VsYXRvciBkcml2ZXIgKi8KIAogLyoqCkBAIC00MzUsNyArNDM1LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWNoYXIgKnBoeV9pZDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gcGRldmluZm87Ci0Jc3RydWN0IHVzYl9waHlfZ2VuX3hjZWl2X3BsYXRmb3JtX2RhdGEgbm9wX3BkYXRhOworCXN0cnVjdCB1c2JfcGh5X2dlbmVyaWNfcGxhdGZvcm1fZGF0YSBub3BfcGRhdGE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BoeXM7IGkrKykgewogCkBAIC00NjksOCArNDY5LDggQEAKIAkJcGRldmluZm8uaWQgPSBwaHktPnBvcnQ7CiAJCXBkZXZpbmZvLmRhdGEgPSAmbm9wX3BkYXRhOwogCQlwZGV2aW5mby5zaXplX2RhdGEgPQotCQkJc2l6ZW9mKHN0cnVjdCB1c2JfcGh5X2dlbl94Y2Vpdl9wbGF0Zm9ybV9kYXRhKTsKLQkJc2NucHJpbnRmKHBoeV9pZCwgTUFYX1NUUiwgInVzYl9waHlfZ2VuX3hjZWl2LiVkIiwKKwkJCXNpemVvZihzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljX3BsYXRmb3JtX2RhdGEpOworCQlzY25wcmludGYocGh5X2lkLCBNQVhfU1RSLCAidXNiX3BoeV9nZW5lcmljLiVkIiwKIAkJCQkJcGh5LT5wb3J0KTsKIAkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZwZGV2aW5mbyk7CiAJCWlmIChJU19FUlIocGRldikpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdmMuYwppbmRleCA0OWFjNzk3Li5hNDYyOGE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92Yy5jCkBAIC0yMjAsMTAgKzIyMCwxMjYgQEAKIAlyZXR1cm4gRElWX1JPVU5EX1VQX1VMTCgzMjc2OFVMTCAqICh1NjQpdXNlYywgMTAwMDAwMFVMTCk7CiB9CiAKLS8qIFNldCBvc2NpbGxhdG9yIHNldHVwIHRpbWUgZm9yIG9tYXAzICovCi1zdGF0aWMgdm9pZCBvbWFwM19zZXRfY2xrc2V0dXAodTMyIHVzZWMsIHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCitzdHJ1Y3Qgb21hcDNfdmNfdGltaW5ncyB7CisJdTMyIHZvbHRzZXR1cDE7CisJdTMyIHZvbHRzZXR1cDI7Cit9OworCitzdHJ1Y3Qgb21hcDNfdmMgeworCXN0cnVjdCB2b2x0YWdlZG9tYWluICp2ZDsKKwl1MzIgdm9sdGN0cmw7CisJdTMyIHZvbHRzZXR1cDE7CisJdTMyIHZvbHRzZXR1cDI7CisJc3RydWN0IG9tYXAzX3ZjX3RpbWluZ3MgdGltaW5nc1syXTsKK307CitzdGF0aWMgc3RydWN0IG9tYXAzX3ZjIHZjOworCit2b2lkIG9tYXAzX3ZjX3NldF9wbWljX3NpZ25hbGluZyhpbnQgY29yZV9uZXh0X3N0YXRlKQogewotCXZvbHRkbS0+d3JpdGUob21hcF91c2VjX3RvXzMyayh1c2VjKSwgT01BUDNfUFJNX0NMS1NFVFVQX09GRlNFVCk7CisJc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZkID0gdmMudmQ7CisJc3RydWN0IG9tYXAzX3ZjX3RpbWluZ3MgKmMgPSB2Yy50aW1pbmdzOworCXUzMiB2b2x0Y3RybCwgdm9sdHNldHVwMSwgdm9sdHNldHVwMjsKKworCXZvbHRjdHJsID0gdmMudm9sdGN0cmw7CisJdm9sdHNldHVwMSA9IHZjLnZvbHRzZXR1cDE7CisJdm9sdHNldHVwMiA9IHZjLnZvbHRzZXR1cDI7CisKKwlzd2l0Y2ggKGNvcmVfbmV4dF9zdGF0ZSkgeworCWNhc2UgUFdSRE1fUE9XRVJfT0ZGOgorCQl2b2x0Y3RybCAmPSB+KE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9BVVRPX1JFVCB8CisJCQkgICAgICBPTUFQMzQzMF9QUk1fVk9MVENUUkxfQVVUT19TTEVFUCk7CisJCXZvbHRjdHJsIHw9IE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9BVVRPX09GRjsKKwkJaWYgKHZvbHRjdHJsICYgT01BUDM0MzBfUFJNX1ZPTFRDVFJMX1NFTF9PRkYpCisJCQl2b2x0c2V0dXAyID0gYy0+dm9sdHNldHVwMjsKKwkJZWxzZQorCQkJdm9sdHNldHVwMSA9IGMtPnZvbHRzZXR1cDE7CisJCWJyZWFrOworCWNhc2UgUFdSRE1fUE9XRVJfUkVUOgorCWRlZmF1bHQ6CisJCWMrKzsKKwkJdm9sdGN0cmwgJj0gfihPTUFQMzQzMF9QUk1fVk9MVENUUkxfQVVUT19PRkYgfAorCQkJICAgICAgT01BUDM0MzBfUFJNX1ZPTFRDVFJMX0FVVE9fU0xFRVApOworCQl2b2x0Y3RybCB8PSBPTUFQMzQzMF9QUk1fVk9MVENUUkxfQVVUT19SRVQ7CisJCXZvbHRzZXR1cDEgPSBjLT52b2x0c2V0dXAxOworCQlicmVhazsKKwl9CisKKwlpZiAodm9sdGN0cmwgIT0gdmMudm9sdGN0cmwpIHsKKwkJdmQtPndyaXRlKHZvbHRjdHJsLCBPTUFQM19QUk1fVk9MVENUUkxfT0ZGU0VUKTsKKwkJdmMudm9sdGN0cmwgPSB2b2x0Y3RybDsKKwl9CisJaWYgKHZvbHRzZXR1cDEgIT0gdmMudm9sdHNldHVwMSkgeworCQl2ZC0+d3JpdGUoYy0+dm9sdHNldHVwMSwKKwkJCSAgT01BUDNfUFJNX1ZPTFRTRVRVUDFfT0ZGU0VUKTsKKwkJdmMudm9sdHNldHVwMSA9IHZvbHRzZXR1cDE7CisJfQorCWlmICh2b2x0c2V0dXAyICE9IHZjLnZvbHRzZXR1cDIpIHsKKwkJdmQtPndyaXRlKGMtPnZvbHRzZXR1cDIsCisJCQkgIE9NQVAzX1BSTV9WT0xUU0VUVVAyX09GRlNFVCk7CisJCXZjLnZvbHRzZXR1cDIgPSB2b2x0c2V0dXAyOworCX0KK30KKworI2RlZmluZSBQUk1fUE9MQ1RSTF9UV0xfTUFTSwkoT01BUDM0MzBfUFJNX1BPTENUUkxfQ0xLUkVRX1BPTCB8IFwKKwkJCQkJT01BUDM0MzBfUFJNX1BPTENUUkxfQ0xLUkVRX1BPTCkKKyNkZWZpbmUgUFJNX1BPTENUUkxfVFdMX1ZBTAlPTUFQMzQzMF9QUk1fUE9MQ1RSTF9DTEtSRVFfUE9MCisKKy8qCisgKiBDb25maWd1cmUgc2lnbmFsIHBvbGFyaXR5IGZvciBzeXNfY2xrcmVxIGFuZCBzeXNfb2ZmX21vZGUgcGlucworICogYXMgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSB3cm9uZyBhbmQgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gaGFuZworICogaWYgYW55IHR3bDQwMzAgc2NyaXB0cyBhcmUgbG9hZGVkLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfdmNfaW5pdF9wbWljX3NpZ25hbGluZyhzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKQoreworCXUzMiB2YWw7CisKKwlpZiAodmMudmQpCisJCXJldHVybjsKKworCXZjLnZkID0gdm9sdGRtOworCisJdmFsID0gdm9sdGRtLT5yZWFkKE9NQVAzX1BSTV9QT0xDVFJMX09GRlNFVCk7CisJaWYgKCEodmFsICYgT01BUDM0MzBfUFJNX1BPTENUUkxfQ0xLUkVRX1BPTCkgfHwKKwkgICAgKHZhbCAmIE9NQVAzNDMwX1BSTV9QT0xDVFJMX0NMS1JFUV9QT0wpKSB7CisJCXZhbCB8PSBPTUFQMzQzMF9QUk1fUE9MQ1RSTF9DTEtSRVFfUE9MOworCQl2YWwgJj0gfk9NQVAzNDMwX1BSTV9QT0xDVFJMX09GRk1PREVfUE9MOworCQlwcl9kZWJ1ZygiUE06IGZpeGluZyBzeXNfY2xrcmVxIGFuZCBzeXNfb2ZmX21vZGUgcG9sYXJpdHkgdG8gMHgleFxuIiwKKwkJCSB2YWwpOworCQl2b2x0ZG0tPndyaXRlKHZhbCwgT01BUDNfUFJNX1BPTENUUkxfT0ZGU0VUKTsKKwl9CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQgbGV0J3MgdXNlIEkyQzQgc2lnbmFsaW5nIGZvciByZXRlbnRpb24gaWRsZQorCSAqIGFuZCBzeXNfb2ZmX21vZGUgcGluIHNpZ25hbGluZyBmb3Igb2ZmIGlkbGUuIFRoaXMgd2F5IHdlCisJICogaGF2ZSBzeXNfY2xrX3JlcSBwaW4gZ28gZG93biBmb3IgcmV0ZW50aW9uIGFuZCBib3RoCisJICogc3lzX2Nsa19yZXEgYW5kIHN5c19vZmZfbW9kZSBwaW5zIHdpbGwgZ28gZG93biBmb3Igb2ZmCisJICogaWRsZS4gQW5kIHdlIGNhbiBhbHNvIHNjYWxlIHZvbHRhZ2VzIHRvIHplcm8gZm9yIG9mZi1pZGxlLgorCSAqIE5vdGUgdGhhdCBubyBhY3R1YWwgdm9sdGFnZSBzY2FsaW5nIGR1cmluZyBvZmYtaWRsZSB3aWxsCisJICogaGFwcGVuIHVubGVzcyB0aGUgYm9hcmQgc3BlY2lmaWMgdHdsNDAzMCBQTUlDIHNjcmlwdHMgYXJlCisJICogbG9hZGVkLgorCSAqLworCXZhbCA9IHZvbHRkbS0+cmVhZChPTUFQM19QUk1fVk9MVENUUkxfT0ZGU0VUKTsKKwlpZiAoISh2YWwgJiBPTUFQMzQzMF9QUk1fVk9MVENUUkxfU0VMX09GRikpIHsKKwkJdmFsIHw9IE9NQVAzNDMwX1BSTV9WT0xUQ1RSTF9TRUxfT0ZGOworCQlwcl9kZWJ1ZygiUE06IHNldHRpbmcgdm9sdGN0cmwgc3lzX29mZl9tb2RlIHNpZ25hbGluZyB0byAweCV4XG4iLAorCQkJIHZhbCk7CisJCXZvbHRkbS0+d3JpdGUodmFsLCBPTUFQM19QUk1fVk9MVENUUkxfT0ZGU0VUKTsKKwl9CisJdmMudm9sdGN0cmwgPSB2YWw7CisKKwlvbWFwM192Y19zZXRfcG1pY19zaWduYWxpbmcoUFdSRE1fUE9XRVJfT04pOworfQorCitzdGF0aWMgdm9pZCBvbWFwM19pbml0X3ZvbHRzZXR1cDEoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSwKKwkJCQkgIHN0cnVjdCBvbWFwM192Y190aW1pbmdzICpjLCB1MzIgaWRsZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXZhbCA9ICh2b2x0ZG0tPnZjX3BhcmFtLT5vbiAtIGlkbGUpIC8gdm9sdGRtLT5wbWljLT5zbGV3X3JhdGU7CisJdmFsICo9IHZvbHRkbS0+c3lzX2Nsay5yYXRlIC8gOCAvIDEwMDAwMDAgKyAxOworCXZhbCA8PD0gX19mZnModm9sdGRtLT52ZnNtLT52b2x0c2V0dXBfbWFzayk7CisJYy0+dm9sdHNldHVwMSAmPSB+dm9sdGRtLT52ZnNtLT52b2x0c2V0dXBfbWFzazsKKwljLT52b2x0c2V0dXAxIHw9IHZhbDsKIH0KIAogLyoqCkBAIC0yMzYsMzcgKzM1MiwyMSBAQAogICogb3IgcmV0ZW50aW9uLiBPZmYgbW9kZSBoYXMgYWRkaXRpb25hbGx5IGFuIG9wdGlvbiB0byB1c2Ugc3lzX29mZl9tb2RlCiAgKiBwYWQsIHdoaWNoIHVzZXMgYSBnbG9iYWwgc2lnbmFsIHRvIHByb2dyYW0gdGhlIHdob2xlIHBvd2VyIElDIHRvCiAgKiBvZmYtbW9kZS4KKyAqCisgKiBOb3RlIHRoYXQgcG1pYyBpcyBub3QgY29udHJvbGxpbmcgdGhlIHZvbHRhZ2Ugc2NhbGluZyBkdXJpbmcKKyAqIHJldGVudGlvbiBzaWduYWxlZCBvdmVyIEkyQzQsIHNvIHdlIGNhbiBrZWVwIHZvbHRzZXR1cDIgYXMgMC4KKyAqIEFuZCB0aGUgb3NjaWxsYXRvciBpcyBub3Qgc2h1dCBvZmYgb3ZlciBJMkM0LCBzbyBubyBuZWVkIHRvCisgKiBzZXQgY2xrc2V0dXAuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX3NldF9pMmNfdGltaW5ncyhzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLCBib29sIG9mZl9tb2RlKQorc3RhdGljIHZvaWQgb21hcDNfc2V0X2kyY190aW1pbmdzKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCiB7Ci0JdW5zaWduZWQgbG9uZyB2b2x0c2V0dXAxOwotCXUzMiB0Z3Rfdm9sdDsKKwlzdHJ1Y3Qgb21hcDNfdmNfdGltaW5ncyAqYyA9IHZjLnRpbWluZ3M7CiAKLQkvKgotCSAqIE9zY2lsbGF0b3IgaXMgc2h1dCBkb3duIG9ubHkgaWYgd2UgYXJlIHVzaW5nIHN5c19vZmZfbW9kZSBwYWQsCi0JICogdGh1cyB3ZSBzZXQgYSBtaW5pbWFsIHNldHVwIHRpbWUgaGVyZQotCSAqLwotCW9tYXAzX3NldF9jbGtzZXR1cCgxLCB2b2x0ZG0pOwotCi0JaWYgKG9mZl9tb2RlKQotCQl0Z3Rfdm9sdCA9IHZvbHRkbS0+dmNfcGFyYW0tPm9mZjsKLQllbHNlCi0JCXRndF92b2x0ID0gdm9sdGRtLT52Y19wYXJhbS0+cmV0OwotCi0Jdm9sdHNldHVwMSA9ICh2b2x0ZG0tPnZjX3BhcmFtLT5vbiAtIHRndF92b2x0KSAvCi0JCQl2b2x0ZG0tPnBtaWMtPnNsZXdfcmF0ZTsKLQotCXZvbHRzZXR1cDEgPSB2b2x0c2V0dXAxICogdm9sdGRtLT5zeXNfY2xrLnJhdGUgLyA4IC8gMTAwMDAwMCArIDE7Ci0KLQl2b2x0ZG0tPnJtdyh2b2x0ZG0tPnZmc20tPnZvbHRzZXR1cF9tYXNrLAotCQl2b2x0c2V0dXAxIDw8IF9fZmZzKHZvbHRkbS0+dmZzbS0+dm9sdHNldHVwX21hc2spLAotCQl2b2x0ZG0tPnZmc20tPnZvbHRzZXR1cF9yZWcpOwotCi0JLyoKLQkgKiBwbWljIGlzIG5vdCBjb250cm9sbGluZyB0aGUgdm9sdGFnZSBzY2FsaW5nIGR1cmluZyByZXRlbnRpb24sCi0JICogdGh1cyBzZXQgdm9sdHNldHVwMiB0byAwCi0JICovCi0Jdm9sdGRtLT53cml0ZSgwLCBPTUFQM19QUk1fVk9MVFNFVFVQMl9PRkZTRVQpOworCS8qIENvbmZpZ3VyZSBQUldETV9QT1dFUl9PRkYgb3ZlciBJMkM0ICovCisJb21hcDNfaW5pdF92b2x0c2V0dXAxKHZvbHRkbSwgYywgdm9sdGRtLT52Y19wYXJhbS0+b2ZmKTsKKwljKys7CisJLyogQ29uZmlndXJlIFBSV0RNX1BPV0VSX1JFVCBvdmVyIEkyQzQgKi8KKwlvbWFwM19pbml0X3ZvbHRzZXR1cDEodm9sdGRtLCBjLCB2b2x0ZG0tPnZjX3BhcmFtLT5yZXQpOwogfQogCiAvKioKQEAgLTI3NSw2OSArMzc1LDQ5IEBACiAgKgogICogQ2FsY3VsYXRlcyBhbmQgc2V0cyB1cCBvZmYtbW9kZSB0aW1pbmdzIGZvciBhIGNoYW5uZWwuIE9mZi1tb2RlCiAgKiBjYW4gdXNlIGVpdGhlciBJMkMgYmFzZWQgdm9sdGFnZSBzY2FsaW5nLCBvciBhbHRlcm5hdGl2ZWx5Ci0gKiBzeXNfb2ZmX21vZGUgcGFkIGNhbiBiZSB1c2VkIHRvIHNlbmQgYSBnbG9iYWwgY29tbWFuZCB0byBwb3dlciBJQy4KLSAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2hlY2tzIHdoaWNoIG1vZGUgaXMgYmVpbmcgdXNlZCwgYW5kIGNhbGxzCi0gKiBvbWFwM19zZXRfaTJjX3RpbWluZ3MoKSBpZiB0aGUgc3lzdGVtIGlzIHVzaW5nIEkyQyBjb250cm9sIG1vZGUuCisgKiBzeXNfb2ZmX21vZGUgcGFkIGNhbiBiZSB1c2VkIHRvIHNlbmQgYSBnbG9iYWwgY29tbWFuZCB0byBwb3dlciBJQy5uLAogICogc3lzX29mZl9tb2RlIGhhcyB0aGUgYWRkaXRpb25hbCBiZW5lZml0IHRoYXQgdm9sdGFnZXMgY2FuIGJlCiAgKiBzY2FsZWQgdG8gemVybyB2b2x0IGxldmVsIHdpdGggVFdMNDAzMCAvIFRXTDUwMzAsIEkyQyBjYW4gb25seQogICogc2NhbGUgdG8gNjAwbVYuCisgKgorICogTm90ZSB0aGF0IG9tYXAgaXMgbm90IGNvbnRyb2xsaW5nIHRoZSB2b2x0YWdlIHNjYWxpbmcgZHVyaW5nCisgKiBvZmYgaWRsZSBzaWduYWxlZCBieSBzeXNfb2ZmX21vZGUsIHNvIHdlIGNhbiBrZWVwIHZvbHRzZXR1cDEKKyAqIGFzIDAuCiAgKi8KIHN0YXRpYyB2b2lkIG9tYXAzX3NldF9vZmZfdGltaW5ncyhzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKQogewotCXVuc2lnbmVkIGxvbmcgY2xrc2V0dXA7Ci0JdW5zaWduZWQgbG9uZyB2b2x0c2V0dXAyOwotCXVuc2lnbmVkIGxvbmcgdm9sdHNldHVwMl9vbGQ7Ci0JdTMyIHZhbDsKLQl1MzIgdHN0YXJ0LCB0c2h1dDsKKwlzdHJ1Y3Qgb21hcDNfdmNfdGltaW5ncyAqYyA9IHZjLnRpbWluZ3M7CisJdTMyIHRzdGFydCwgdHNodXQsIGNsa3NldHVwLCB2b2x0b2Zmc2V0OwogCi0JLyogY2hlY2sgaWYgc3lzX29mZl9tb2RlIGlzIHVzZWQgdG8gY29udHJvbCBvZmYtbW9kZSB2b2x0YWdlcyAqLwotCXZhbCA9IHZvbHRkbS0+cmVhZChPTUFQM19QUk1fVk9MVENUUkxfT0ZGU0VUKTsKLQlpZiAoISh2YWwgJiBPTUFQMzQzMF9TRUxfT0ZGX01BU0spKSB7Ci0JCS8qIE5vLCBvbWFwIGlzIGNvbnRyb2xsaW5nIHRoZW0gb3ZlciBJMkMgKi8KLQkJb21hcDNfc2V0X2kyY190aW1pbmdzKHZvbHRkbSwgdHJ1ZSk7CisJaWYgKGMtPnZvbHRzZXR1cDIpCiAJCXJldHVybjsKLQl9CiAKIAlvbWFwX3BtX2dldF9vc2NpbGxhdG9yKCZ0c3RhcnQsICZ0c2h1dCk7Ci0Jb21hcDNfc2V0X2Nsa3NldHVwKHRzdGFydCwgdm9sdGRtKTsKLQotCWNsa3NldHVwID0gdm9sdGRtLT5yZWFkKE9NQVAzX1BSTV9DTEtTRVRVUF9PRkZTRVQpOwotCi0JLyogdm9sdHNldHVwIDIgaW4gdXMgKi8KLQl2b2x0c2V0dXAyID0gdm9sdGRtLT52Y19wYXJhbS0+b24gLyB2b2x0ZG0tPnBtaWMtPnNsZXdfcmF0ZTsKLQotCS8qIGNvbnZlcnQgdG8gMzJrIGNsayBjeWNsZXMgKi8KLQl2b2x0c2V0dXAyID0gRElWX1JPVU5EX1VQKHZvbHRzZXR1cDIgKiAzMjc2OCwgMTAwMDAwMCk7Ci0KLQl2b2x0c2V0dXAyX29sZCA9IHZvbHRkbS0+cmVhZChPTUFQM19QUk1fVk9MVFNFVFVQMl9PRkZTRVQpOworCWlmICh0c3RhcnQgPT0gVUxPTkdfTUFYKSB7CisJCXByX2RlYnVnKCJQTTogb3NjaWxsYXRvciBzdGFydC11cCB0aW1lIG5vdCBpbml0aWFsaXplZCwgdXNpbmcgMTBtc1xuIik7CisJCWNsa3NldHVwID0gb21hcF91c2VjX3RvXzMyaygxMDAwMCk7CisJfSBlbHNlIHsKKwkJY2xrc2V0dXAgPSBvbWFwX3VzZWNfdG9fMzJrKHRzdGFydCk7CisJfQogCiAJLyoKLQkgKiBVcGRhdGUgdm9sdHNldHVwMiBpZiBoaWdoZXIgdGhhbiBjdXJyZW50IHZhbHVlIChuZWVkZWQgYmVjYXVzZQotCSAqIHdlIGhhdmUgbXVsdGlwbGUgY2hhbm5lbHMgd2l0aCBkaWZmZXJlbnQgcmFtcCB0aW1lcyksIGFsc28KLQkgKiB1cGRhdGUgdm9sdG9mZnNldCBhbHdheXMgdG8gdmFsdWUgcmVjb21tZW5kZWQgYnkgVFJNCisJICogRm9yIHR3bDQwMzAgZXJyYXRhIDI3LCB3ZSBuZWVkIHRvIGFsbG93IG1pbmltdW0gfjQ4OC4zMiB1cyB3YWl0IHRvCisJICogc3dpdGNoIGZyb20gSEZDTEtJTiB0byBpbnRlcm5hbCBvc2NpbGxhdG9yLiBUaGF0IG1lYW5zIHRpbWluZ3MKKwkgKiBoYXZlIHZvbHRvZmZzZXQgZml4ZWQgdG8gMHhhIGluIHJvdW5kZWQgdXAgMzIgS2lIeiBjeWNsZXMuIEFuZAorCSAqIHRoYXQgbWVhbnMgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgdmFsdWUgYmFzZWQgb24gdGhlIG9zY2lsbGF0b3IKKwkgKiBzdGFydC11cCB0aW1lIHNpbmNlIHZvbHRvZmZzZXQyID0gY2xrc2V0dXAgLSB2b2x0b2Zmc2V0LgogCSAqLwotCWlmICh2b2x0c2V0dXAyID4gdm9sdHNldHVwMl9vbGQpIHsKLQkJdm9sdGRtLT53cml0ZSh2b2x0c2V0dXAyLCBPTUFQM19QUk1fVk9MVFNFVFVQMl9PRkZTRVQpOwotCQl2b2x0ZG0tPndyaXRlKGNsa3NldHVwIC0gdm9sdHNldHVwMiwKLQkJCU9NQVAzX1BSTV9WT0xUT0ZGU0VUX09GRlNFVCk7Ci0JfSBlbHNlCi0JCXZvbHRkbS0+d3JpdGUoY2xrc2V0dXAgLSB2b2x0c2V0dXAyX29sZCwKLQkJCU9NQVAzX1BSTV9WT0xUT0ZGU0VUX09GRlNFVCk7Ci0KLQkvKgotCSAqIG9tYXAgaXMgbm90IGNvbnRyb2xsaW5nIHZvbHRhZ2Ugc2NhbGluZyBkdXJpbmcgb2ZmLW1vZGUsCi0JICogdGh1cyBzZXQgdm9sdHNldHVwMSB0byAwCi0JICovCi0Jdm9sdGRtLT5ybXcodm9sdGRtLT52ZnNtLT52b2x0c2V0dXBfbWFzaywgMCwKLQkJdm9sdGRtLT52ZnNtLT52b2x0c2V0dXBfcmVnKTsKLQotCS8qIHZvbHRvZmZzZXQgbXVzdCBiZSBjbGtzZXR1cCBtaW51cyB2b2x0c2V0dXAyIGFjY29yZGluZyB0byBUUk0gKi8KLQl2b2x0ZG0tPndyaXRlKGNsa3NldHVwIC0gdm9sdHNldHVwMiwgT01BUDNfUFJNX1ZPTFRPRkZTRVRfT0ZGU0VUKTsKKwl2b2x0b2Zmc2V0ID0gb21hcF91c2VjX3RvXzMyayg0ODgpOworCWMtPnZvbHRzZXR1cDIgPSBjbGtzZXR1cCAtIHZvbHRvZmZzZXQ7CisJdm9sdGRtLT53cml0ZShjbGtzZXR1cCwgT01BUDNfUFJNX0NMS1NFVFVQX09GRlNFVCk7CisJdm9sdGRtLT53cml0ZSh2b2x0b2Zmc2V0LCBPTUFQM19QUk1fVk9MVE9GRlNFVF9PRkZTRVQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfdmNfaW5pdF9jaGFubmVsKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCiB7CisJb21hcDNfdmNfaW5pdF9wbWljX3NpZ25hbGluZyh2b2x0ZG0pOwogCW9tYXAzX3NldF9vZmZfdGltaW5ncyh2b2x0ZG0pOworCW9tYXAzX3NldF9pMmNfdGltaW5ncyh2b2x0ZG0pOwogfQogCiAvKioKQEAgLTQ2Miw3ICs1NDIsNyBAQAogCXZhbCB8PSBvbWFwNF91c2VjX3RvX3ZhbF9zY3JtKHRzaHV0LCBPTUFQNF9ET1dOVElNRV9TSElGVCwKIAkJT01BUDRfRE9XTlRJTUVfTUFTSyk7CiAKLQlfX3Jhd193cml0ZWwodmFsLCBPTUFQNF9TQ1JNX0NMS1NFVFVQVElNRSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBPTUFQNF9TQ1JNX0NMS1NFVFVQVElNRSk7CiB9CiAKIC8qIE9NQVA0IHNwZWNpZmljIHZvbHRhZ2UgaW5pdCBmdW5jdGlvbnMgKi8KQEAgLTU4NCw3ICs2NjQsNyBAQAogCXZhbCA9IGkyY19kYXRhLT5sb2FkYml0cyA8PCAyNSB8IGkyY19kYXRhLT5sb2FkYml0cyA8PCAyOTsKIAogCS8qIFdyaXRlIHRvIFNZU0NUUkxfUEFEQ09ORl9XS1VQX0NUUkxfSTJDXzIgdG8gc2V0dXAgSTJDIHB1bGwgKi8KLQlfX3Jhd193cml0ZWwodmFsLCBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9XS1VQICsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVAgKwogCQkJCU9NQVA0X0NUUkxfTU9EVUxFX1BBRF9XS1VQX0NPTlRST0xfSTJDXzIpKTsKIAogCS8qIEhTU0NMSCBjYW4gYWx3YXlzIGJlIHplcm8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdmMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvdmMuaAppbmRleCA5MWM4ZDc1Li5jZGJkZDc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92Yy5oCkBAIC0xMTcsNiArMTE3LDkgQEAKIGV4dGVybiBzdHJ1Y3Qgb21hcF92Y19wYXJhbSBvbWFwNF9pdmFfdmNfZGF0YTsKIGV4dGVybiBzdHJ1Y3Qgb21hcF92Y19wYXJhbSBvbWFwNF9jb3JlX3ZjX2RhdGE7CiAKK3ZvaWQgb21hcDNfdmNfc2V0X3BtaWNfc2lnbmFsaW5nKGludCBjb3JlX25leHRfc3RhdGUpOworCisKIHZvaWQgb21hcF92Y19pbml0X2NoYW5uZWwoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CiBpbnQgb21hcF92Y19wcmVfc2NhbGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSwKIAkJICAgICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvd2RfdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvd2RfdGltZXIuYwppbmRleCBkMTVjN2JiLi45N2Q2NjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3dkX3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi93ZF90aW1lci5jCkBAIC00OSwxMiArNDksMTIgQEAKIAl9CiAKIAkvKiBzZXF1ZW5jZSByZXF1aXJlZCB0byBkaXNhYmxlIHdhdGNoZG9nICovCi0JX19yYXdfd3JpdGVsKDB4QUFBQSwgYmFzZSArIE9NQVBfV0RUX1NQUik7Ci0Jd2hpbGUgKF9fcmF3X3JlYWRsKGJhc2UgKyBPTUFQX1dEVF9XUFMpICYgMHgxMCkKKwl3cml0ZWxfcmVsYXhlZCgweEFBQUEsIGJhc2UgKyBPTUFQX1dEVF9TUFIpOworCXdoaWxlIChyZWFkbF9yZWxheGVkKGJhc2UgKyBPTUFQX1dEVF9XUFMpICYgMHgxMCkKIAkJY3B1X3JlbGF4KCk7CiAKLQlfX3Jhd193cml0ZWwoMHg1NTU1LCBiYXNlICsgT01BUF9XRFRfU1BSKTsKLQl3aGlsZSAoX19yYXdfcmVhZGwoYmFzZSArIE9NQVBfV0RUX1dQUykgJiAweDEwKQorCXdyaXRlbF9yZWxheGVkKDB4NTU1NSwgYmFzZSArIE9NQVBfV0RUX1NQUik7CisJd2hpbGUgKHJlYWRsX3JlbGF4ZWQoYmFzZSArIE9NQVBfV0RUX1dQUykgJiAweDEwKQogCQljcHVfcmVsYXgoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZwppbmRleCAxNGYyY2FlLi4yNDEyZWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZwpAQCAtNSw2ICs1LDExIEBACiBjb25maWcgQVJDSF9PUklPTjVYX0RUCiAJYm9vbCAiTWFydmVsbCBPcmlvbjV4IEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSIKIAlzZWxlY3QgVVNFX09GCisJc2VsZWN0IE9SSU9OX0NMSworCXNlbGVjdCBPUklPTl9JUlFDSElQCisJc2VsZWN0IE9SSU9OX1RJTUVSCisJc2VsZWN0IFBJTkNUUkwKKwlzZWxlY3QgUElOQ1RSTF9PUklPTgogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWFydmVsbCBPcmlvbjV4IHVzaW5nIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZS4KQEAgLTIzLDYgKzI4LDE0IEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIE1hcnZlbGwgT3Jpb24tTkFTICg4OEY1MTgyKSBSRDIKIAorY29uZmlnIE1BQ0hfUkQ4OEY1MTgyX0RUCisJYm9vbCAiTWFydmVsbCBPcmlvbi1OQVMgUmVmZXJlbmNlIERlc2lnbiAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIKKwlzZWxlY3QgQVJDSF9PUklPTjVYX0RUCisJc2VsZWN0IEkyQ19CT0FSRElORk8KKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUgTWFydmVsbAorCSAgT3Jpb24tTkFTICg4OEY1MTgyKSBSRDIsIEZsYXR0ZW5lZCBEZXZpY2UgVHJlZS4KKwogY29uZmlnIE1BQ0hfS1VST0JPWF9QUk8KIAlib29sICJLdXJvQm94IFBybyIKIAlzZWxlY3QgSTJDX0JPQVJESU5GTwpAQCAtMTAyLDI4ICsxMTUsMTMgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgSFAgTWVkaWEgVmF1bHQgbXYyMTIwIG9yIG12NTEwMC4KIAotY29uZmlnIE1BQ0hfRURNSU5JX1YyX0RUCi0JYm9vbCAiTGFDaWUgRXRoZXJuZXQgRGlzayBtaW5pIFYyIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIgotCXNlbGVjdCBJMkNfQk9BUkRJTkZPCitjb25maWcgTUFDSF9EMk5FVF9EVAorCWJvb2wgIkxhQ2llIGQyIE5ldHdvcmsgLyBCaWcgRGlzayBOZXR3b3JrIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIgogCXNlbGVjdCBBUkNIX09SSU9ONVhfRFQKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIExhQ2llIEV0aGVybmV0IERpc2sgbWluaSBWMiAoRmxhdHRlbmVkIERldmljZSBUcmVlKS4KLQotY29uZmlnIE1BQ0hfRDJORVQKLQlib29sICJMYUNpZSBkMiBOZXR3b3JrIgotCXNlbGVjdCBJMkNfQk9BUkRJTkZPCi0JaGVscAotCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBMYUNpZSBkMiBOZXR3b3JrIE5BUy4KIAotY29uZmlnIE1BQ0hfQklHRElTSwotCWJvb2wgIkxhQ2llIEJpZyBEaXNrIE5ldHdvcmsiCi0Jc2VsZWN0IEkyQ19CT0FSRElORk8KLQloZWxwCi0JICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIExhQ2llIEJpZyBEaXNrIE5ldHdvcmsgTkFTLgotCiBjb25maWcgTUFDSF9ORVQyQklHCiAJYm9vbCAiTGFDaWUgMkJpZyBOZXR3b3JrIgogCXNlbGVjdCBJMkNfQk9BUkRJTkZPCkBAIC0xMzEsOCArMTI5LDkgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTGFDaWUgMkJpZyBOZXR3b3JrIE5BUy4KIAotY29uZmlnIE1BQ0hfTVNTMgotCWJvb2wgIk1heHRvciBTaGFyZWQgU3RvcmFnZSBJSSIKK2NvbmZpZyBNQUNIX01TUzJfRFQKKwlib29sICJNYXh0b3IgU2hhcmVkIFN0b3JhZ2UgSUkgKEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSkiCisJc2VsZWN0IEFSQ0hfT1JJT041WF9EVAogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWF4dG9yIFNoYXJlZCBTdG9yYWdlIElJIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlCmluZGV4IDQ1ZGE4MDUuLmE0MGI1YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKQEAgLTEyLDEwICsxMiw3IEBACiBvYmotJChDT05GSUdfTUFDSF9XUlQzNTBOX1YyKQkrPSB3cnQzNTBuLXYyLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1RTNzhYWCkJKz0gdHM3OHh4LXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX01WMjEyMCkJKz0gbXYyMTIwLXNldHVwLm8KLW9iai0kKENPTkZJR19NQUNIX0QyTkVUKQkrPSBkMm5ldC1zZXR1cC5vCi1vYmotJChDT05GSUdfTUFDSF9CSUdESVNLKQkrPSBkMm5ldC1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9ORVQyQklHKQkrPSBuZXQyYmlnLXNldHVwLm8KLW9iai0kKENPTkZJR19NQUNIX01TUzIpCQkrPSBtc3MyLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1dOUjg1NFQpCSs9IHducjg1NHQtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY1MTgxTF9HRSkJKz0gcmQ4OGY1MTgxbC1nZS1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjUxODFMX0ZYTykJKz0gcmQ4OGY1MTgxbC1meG8tc2V0dXAubwpAQCAtMjMsNCArMjAsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfTElOS1NUQVRJT05fTFNDSEwpCSs9IGxzLWNobC1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19BUkNIX09SSU9ONVhfRFQpCQkrPSBib2FyZC1kdC5vCi1vYmotJChDT05GSUdfTUFDSF9FRE1JTklfVjJfRFQpCSs9IGVkbWluaV92Mi1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9EMk5FVF9EVCkJKz0gYm9hcmQtZDJuZXQubworb2JqLSQoQ09ORklHX01BQ0hfTVNTMl9EVCkJKz0gYm9hcmQtbXNzMi5vCitvYmotJChDT05GSUdfTUFDSF9SRDg4RjUxODJfRFQpCSs9IGJvYXJkLXJkODhmNTE4Mi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvYm9hcmQtZDJuZXQuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ib2FyZC1kMm5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzI4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvYm9hcmQtZDJuZXQuYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9ib2FyZC1kMm5ldC5jCisgKgorICogTGFDaWUgZDJOZXR3b3JrIGFuZCBCaWcgRGlzayBOZXR3b3JrIE5BUyBzZXR1cAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTaW1vbiBHdWlub3QgPHNndWlub3RAbGFjaWUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb24tZ3Bpby5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExhQ2llIGQyIE5ldHdvcmsgSW5mbworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBMRUQncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGUgYmx1ZSBmcm9udCBMRUQgaXMgd2lyZWQgdG8gdGhlIENQTEQgYW5kIGNhbiBibGluayBpbiByZWxhdGlvbiB3aXRoIHRoZQorICogU0FUQSBhY3Rpdml0eS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFycmF5IGRldGFpbCB0aGUgZGlmZmVyZW50IExFRCByZWdpc3RlcnMgYW5kIHRoZSBjb21iaW5hdGlvbgorICogb2YgdGhlaXIgcG9zc2libGUgdmFsdWVzOgorICoKKyAqIGxlZF9vZmYgICB8IGJsaW5rX2N0cmwgfCBTQVRBIGFjdGl2ZSB8IExFRCBzdGF0ZQorICogICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAqICAgIDEgICAgICB8ICAgICB4ICAgICAgfCAgICAgIHggICAgICB8ICBvZmYKKyAqICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDAgICAgICB8ICBvZmYKKyAqICAgIDAgICAgICB8ICAgICAxICAgICAgfCAgICAgIDAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKKyAqICAgIDAgICAgICB8ICAgICB4ICAgICAgfCAgICAgIDEgICAgICB8ICBvbgorICoKKyAqIE5vdGVzOiBUaGUgYmx1ZSBhbmQgdGhlIHJlZCBmcm9udCBMRUQncyBjYW4ndCBiZSBvbiBhdCB0aGUgc2FtZSB0aW1lLgorICogICAgICAgIFJlZCBMRUQgaGF2ZSBwcmlvcml0eS4KKyAqLworCisjZGVmaW5lIEQyTkVUX0dQSU9fUkVEX0xFRAkJNgorI2RlZmluZSBEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwJMTYKKyNkZWZpbmUgRDJORVRfR1BJT19CTFVFX0xFRF9PRkYJCTIzCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZDJuZXRfbGVkc1tdID0geworCXsKKwkJLm5hbWUgPSAiZDJuZXQ6Ymx1ZTpzYXRhIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKKwkJLmdwaW8gPSBEMk5FVF9HUElPX0JMVUVfTEVEX09GRiwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJkMm5ldDpyZWQ6ZmFpbCIsCisJCS5ncGlvID0gRDJORVRfR1BJT19SRURfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZDJuZXRfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzID0gQVJSQVlfU0laRShkMm5ldF9sZWRzKSwKKwkubGVkcyA9IGQybmV0X2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkMm5ldF9ncGlvX2xlZHMgPSB7CisJLm5hbWUgICAgICAgICAgID0gImxlZHMtZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZDJuZXRfbGVkX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9ncGlvX2xlZHNfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwkvKiBDb25maWd1cmUgcmVnaXN0ZXIgYmxpbmtfY3RybCB0byBhbGxvdyBTQVRBIGFjdGl2aXR5IExFRCBibGlua2luZy4gKi8KKwllcnIgPSBncGlvX3JlcXVlc3QoRDJORVRfR1BJT19CTFVFX0xFRF9CTElOS19DVFJMLCAiYmx1ZSBMRUQgYmxpbmsiKTsKKwlpZiAoZXJyID09IDApIHsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEQyTkVUX0dQSU9fQkxVRV9MRURfQkxJTktfQ1RSTCwgMSk7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoRDJORVRfR1BJT19CTFVFX0xFRF9CTElOS19DVFJMKTsKKwl9CisJaWYgKGVycikKKwkJcHJfZXJyKCJkMm5ldDogZmFpbGVkIHRvIGNvbmZpZ3VyZSBibHVlIExFRCBibGluayBHUElPXG4iKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfZ3Bpb19sZWRzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIFNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBfX2luaXQgZDJuZXRfaW5pdCh2b2lkKQoreworCWQybmV0X2dwaW9fbGVkc19pbml0KCk7CisKKwlwcl9ub3RpY2UoImQybmV0OiBGbGFzaCB3cml0ZSBhcmUgbm90IHlldCBzdXBwb3J0ZWQuXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ib2FyZC1kdC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2JvYXJkLWR0LmMKaW5kZXggYzEzNGE4Mi4uMzVkNDE4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2JvYXJkLWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2JvYXJkLWR0LmMKQEAgLTE1LDEwICsxNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9vcmlvbjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgogI2luY2x1ZGUgPHBsYXQvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC90aW1lLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2X2F1eGRhdGEgb3Jpb241eF9hdXhkYXRhX2xvb2t1cFtdIF9faW5pdGRhdGEgPSB7CkBAIC0zOSwxNCArNDUsMTMgQEAKIAlvcmlvbjV4X2lkKCZkZXYsICZyZXYsICZkZXZfbmFtZSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiT3Jpb24gSUQ6ICVzLiBUQ0xLPSVkLlxuIiwgZGV2X25hbWUsIG9yaW9uNXhfdGNsayk7CiAKKwlCVUdfT04obXZlYnVfbWJ1c19kdF9pbml0KCkpOworCiAJLyoKIAkgKiBTZXR1cCBPcmlvbiBhZGRyZXNzIG1hcAogCSAqLwogCW9yaW9uNXhfc2V0dXBfd2lucygpOwogCi0JLyogU2V0dXAgcm9vdCBvZiBjbGsgdHJlZSAqLwotCWNsa19pbml0KCk7Ci0KIAkvKgogCSAqIERvbid0IGlzc3VlICJXYWl0IGZvciBJbnRlcnJ1cHQiIGluc3RydWN0aW9uIGlmIHdlIGFyZQogCSAqIHJ1bm5pbmcgb24gRDAgNTI4MSBzaWxpY29uLgpAQCAtNTYsOCArNjEsOCBAQAogCQljcHVfaWRsZV9wb2xsX2N0cmwodHJ1ZSk7CiAJfQogCi0JaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibGFjaWUsZXRoZXJuZXQtZGlzay1taW5pLXYyIikpCi0JCWVkbWluaV92Ml9pbml0KCk7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWF4dG9yLHNoYXJlZC1zdG9yYWdlLTIiKSkKKwkJbXNzMl9pbml0KCk7CiAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKIAkJCSAgICAgb3Jpb241eF9hdXhkYXRhX2xvb2t1cCwgTlVMTCk7CkBAIC03MSw5ICs3Niw2IEBACiBEVF9NQUNISU5FX1NUQVJUKE9SSU9ONVhfRFQsICJNYXJ2ZWxsIE9yaW9uNXggKEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSkiKQogCS8qIE1haW50YWluZXI6IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPiAqLwogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gb3Jpb25fZHRfaW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IG9yaW9uNXhfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lCT0gb3Jpb241eF9kdF9pbml0LAogCS5yZXN0YXJ0CT0gb3Jpb241eF9yZXN0YXJ0LAogCS5kdF9jb21wYXQJPSBvcmlvbjV4X2R0X2NvbXBhdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ib2FyZC1tc3MyLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvYm9hcmQtbXNzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjljM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvYm9hcmQtbXNzMi5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBNYXh0b3IgU2hhcmVkIFN0b3JhZ2UgSUkgQm9hcmQgU2V0dXAKKyAqCisgKiBNYWludGFpbmVyOiBTeWx2ZXIgQnJ1bmVhdSA8c3lsdmVyLmJydW5lYXVAZ29vZ2xlbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgorI2luY2x1ZGUgPG1hY2gvYnJpZGdlLXJlZ3MuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYXh0b3IgU2hhcmVkIFN0b3JhZ2UgSUkgSW5mbworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQ0kgc2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgbXNzMl9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IGlycTsKKworCS8qCisJICogQ2hlY2sgZm9yIGRldmljZXMgd2l0aCBoYXJkLXdpcmVkIElSUXMuCisJICovCisJaXJxID0gb3Jpb241eF9wY2lfbWFwX2lycShkZXYsIHNsb3QsIHBpbik7CisJaWYgKGlycSAhPSAtMSkKKwkJcmV0dXJuIGlycTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgbXNzMl9wY2kgX19pbml0ZGF0YSA9IHsKKwkubnJfY29udHJvbGxlcnMgPSAyLAorCS5zZXR1cAkJPSBvcmlvbjV4X3BjaV9zeXNfc2V0dXAsCisJLnNjYW4JCT0gb3Jpb241eF9wY2lfc3lzX3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gbXNzMl9wY2lfbWFwX2lycSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1zczJfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19tc3MyKCkpCisJCXBjaV9jb21tb25faW5pdCgmbXNzMl9wY2kpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwobXNzMl9wY2lfaW5pdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTVNTMiBwb3dlciBvZmYgbWV0aG9kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBPbiB0aGUgTWF4dG9yIFNoYXJlZCBTdG9yYWdlIElJLCB0aGUgc2h1dGRvd24gcHJvY2VzcyBpcyB0aGUgZm9sbG93aW5nIDoKKyAqIC0gVXNlcmxhbmQgbW9kaWZpZXMgVS1ib290IGVudiB0byB0ZWxsIFUtYm9vdCB0byBnbyBpZGxlIGF0IG5leHQgYm9vdAorICogLSBUaGUgYm9hcmQgcmVib290cworICogLSBVLWJvb3Qgc3RhcnRzIGFuZCBnbyBpbnRvIGFuIGlkbGUgbW9kZSB1bnRpbCB0aGUgdXNlciBwcmVzcyAicG93ZXIiCisgKi8KK3N0YXRpYyB2b2lkIG1zczJfcG93ZXJfb2ZmKHZvaWQpCit7CisJdTMyIHJlZzsKKworCS8qCisJICogRW5hYmxlIGFuZCBpc3N1ZSBzb2Z0IHJlc2V0CisJICovCisJcmVnID0gcmVhZGwoUlNUT1VUbl9NQVNLKTsKKwlyZWcgfD0gMSA8PCAyOworCXdyaXRlbChyZWcsIFJTVE9VVG5fTUFTSyk7CisKKwlyZWcgPSByZWFkbChDUFVfU09GVF9SRVNFVCk7CisJcmVnIHw9IDE7CisJd3JpdGVsKHJlZywgQ1BVX1NPRlRfUkVTRVQpOworfQorCit2b2lkIF9faW5pdCBtc3MyX2luaXQodm9pZCkKK3sKKwkvKiByZWdpc3RlciBtc3MyIHNwZWNpZmljIHBvd2VyLW9mZiBtZXRob2QgKi8KKwlwbV9wb3dlcl9vZmYgPSBtc3MyX3Bvd2VyX29mZjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ib2FyZC1yZDg4ZjUxODIuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ib2FyZC1yZDg4ZjUxODIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzA4MjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2JvYXJkLXJkODhmNTE4Mi5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4Mi1zZXR1cC5jCisgKgorICogTWFydmVsbCBPcmlvbi1OQVMgUmVmZXJlbmNlIERlc2lnbiBTZXR1cAorICoKKyAqIE1haW50YWluZXI6IFJvbmVuIFNoaXRyaXQgPHJzaGl0cml0QG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSRC04OEY1MTgyIEluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogUENJCisgKi8KKworI2RlZmluZSBSRDg4RjUxODJfUENJX1NMT1QwX09GRlMJNworI2RlZmluZSBSRDg4RjUxODJfUENJX1NMT1QwX0lSUV9BX1BJTgk3CisjZGVmaW5lIFJEODhGNTE4Ml9QQ0lfU0xPVDBfSVJRX0JfUElOCTYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQ0kKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX2luaXQgcmQ4OGY1MTgyX3BjaV9wcmVpbml0KHZvaWQpCit7CisJaW50IHBpbjsKKworCS8qCisJICogQ29uZmlndXJlIFBDSSBHUElPIElSUSBwaW5zCisJICovCisJcGluID0gUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQV9QSU47CisJaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50QSIpID09IDApIHsKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgeworCQkJaXJxX3NldF9pcnFfdHlwZShncGlvX3RvX2lycShwaW4pLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJyZDg4ZjUxODJfcGNpX3ByZWluaXQgZmFpbGVkIHRvICIKKwkJCQkJInNldF9pcnFfdHlwZSBwaW4gJWRcbiIsIHBpbik7CisJCQlncGlvX2ZyZWUocGluKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX3BjaV9wcmVpbml0IGZhaWxlZCB0byByZXF1ZXN0IGdwaW8gJWRcbiIsIHBpbik7CisJfQorCisJcGluID0gUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQl9QSU47CisJaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50QiIpID09IDApIHsKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgeworCQkJaXJxX3NldF9pcnFfdHlwZShncGlvX3RvX2lycShwaW4pLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJyZDg4ZjUxODJfcGNpX3ByZWluaXQgZmFpbGVkIHRvICIKKwkJCQkJInNldF9pcnFfdHlwZSBwaW4gJWRcbiIsIHBpbik7CisJCQlncGlvX2ZyZWUocGluKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX3BjaV9wcmVpbml0IGZhaWxlZCB0byBncGlvX3JlcXVlc3QgJWRcbiIsIHBpbik7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCByZDg4ZjUxODJfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCit7CisJaW50IGlycTsKKworCS8qCisJICogQ2hlY2sgZm9yIGRldmljZXMgd2l0aCBoYXJkLXdpcmVkIElSUXMuCisJICovCisJaXJxID0gb3Jpb241eF9wY2lfbWFwX2lycShkZXYsIHNsb3QsIHBpbik7CisJaWYgKGlycSAhPSAtMSkKKwkJcmV0dXJuIGlycTsKKworCS8qCisJICogUENJIElSUXMgYXJlIGNvbm5lY3RlZCB2aWEgR1BJT3MKKwkgKi8KKwlzd2l0Y2ggKHNsb3QgLSBSRDg4RjUxODJfUENJX1NMT1QwX09GRlMpIHsKKwljYXNlIDA6CisJCWlmIChwaW4gPT0gMSkKKwkJCXJldHVybiBncGlvX3RvX2lycShSRDg4RjUxODJfUENJX1NMT1QwX0lSUV9BX1BJTik7CisJCWVsc2UKKwkJCXJldHVybiBncGlvX3RvX2lycShSRDg4RjUxODJfUENJX1NMT1QwX0lSUV9CX1BJTik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgcmQ4OGY1MTgyX3BjaSBfX2luaXRkYXRhID0geworCS5ucl9jb250cm9sbGVycwk9IDIsCisJLnByZWluaXQJPSByZDg4ZjUxODJfcGNpX3ByZWluaXQsCisJLnNldHVwCQk9IG9yaW9uNXhfcGNpX3N5c19zZXR1cCwKKwkuc2NhbgkJPSBvcmlvbjV4X3BjaV9zeXNfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSByZDg4ZjUxODJfcGNpX21hcF9pcnEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCByZDg4ZjUxODJfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLHJkLTg4ZjUxODItbmFzIikpCisJCXBjaV9jb21tb25faW5pdCgmcmQ4OGY1MTgyX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKHJkODhmNTE4Ml9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmgKaW5kZXggNzU0OGRiMi4uMjZkNmYzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaApAQCAtNjQsMTcgKzY0LDE2IEBACiBzdHJ1Y3QgcGNpX2J1cyAqb3Jpb241eF9wY2lfc3lzX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKTsKIGludCBvcmlvbjV4X3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CiAKLS8qIGJvYXJkIGluaXQgZnVuY3Rpb25zIGZvciBib2FyZHMgbm90IGZ1bGx5IGNvbnZlcnRlZCB0byBmZHQgKi8KLSNpZmRlZiBDT05GSUdfTUFDSF9FRE1JTklfVjJfRFQKLXZvaWQgZWRtaW5pX3YyX2luaXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVkbWluaV92Ml9pbml0KHZvaWQpIHt9OwotI2VuZGlmCi0KIHN0cnVjdCBtZW1pbmZvOwogc3RydWN0IHRhZzsKIGV4dGVybiB2b2lkIF9faW5pdCB0YWdfZml4dXBfbWVtMzIoc3RydWN0IHRhZyAqLCBjaGFyICoqLCBzdHJ1Y3QgbWVtaW5mbyAqKTsKIAorI2lmZGVmIENPTkZJR19NQUNIX01TUzJfRFQKK2V4dGVybiB2b2lkIG1zczJfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbXNzMl9pbml0KHZvaWQpIHt9CisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIZWxwZXJzIHRvIGFjY2VzcyBPcmlvbiByZWdpc3RlcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2OGI3NC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMKLSAqCi0gKiBMYUNpZSBkMk5ldHdvcmsgYW5kIEJpZyBEaXNrIE5ldHdvcmsgTkFTIHNldHVwCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFNpbW9uIEd1aW5vdCA8c2d1aW5vdEBsYWNpZS5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0jaW5jbHVkZSA8bWFjaC9vcmlvbjV4Lmg+Ci0jaW5jbHVkZSA8cGxhdC9vcmlvbi1ncGlvLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAibXBwLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTGFDaWUgZDIgTmV0d29yayBJbmZvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIDUxMktCIE5PUiBmbGFzaCBEZXZpY2UgYnVzIGJvb3QgY2hpcCBzZWxlY3QKLSAqLwotCi0jZGVmaW5lIEQyTkVUX05PUl9CT09UX0JBU0UJCTB4ZmZmODAwMDAKLSNkZWZpbmUgRDJORVRfTk9SX0JPT1RfU0laRQkJU1pfNTEySwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDUxMktCIE5PUiBGbGFzaCBvbiBCb290IERldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBUT0RPOiBDaGVjayB3cml0ZSBzdXBwb3J0IG9uIGZsYXNoIE1YMjlMVjQwMENCVEMtNzBHCi0gKi8KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGQybmV0X3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJGdWxsNTEya2IiLAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZDJuZXRfbm9yX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDEsCi0JLnBhcnRzCQk9IGQybmV0X3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkMm5ldF9wYXJ0aXRpb25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZDJuZXRfbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0CQkJPSBEMk5FVF9OT1JfQk9PVF9CQVNFLAotCS5lbmQJCQk9IEQyTkVUX05PUl9CT09UX0JBU0UKLQkJCQkJKyBEMk5FVF9OT1JfQk9PVF9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGQybmV0X25vcl9mbGFzaCA9IHsKLQkubmFtZQkJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZDJuZXRfbm9yX2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwkJPSAxLAotCS5yZXNvdXJjZQkJPSAmZDJuZXRfbm9yX2ZsYXNoX3Jlc291cmNlLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFdGhlcm5ldAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkMm5ldF9ldGhfZGF0YSA9IHsKLQkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSTJDIGRldmljZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogaTJjIGFkZHIgfCBjaGlwICAgICAgICAgfCBkZXNjcmlwdGlvbgotICogMHgzMiAgICAgfCBSaWNvaCA1QzM3MmIgfCBSVEMKLSAqIDB4M2UgICAgIHwgR01UIEc3NjIgICAgIHwgUFdNIGZhbiBjb250cm9sbGVyCi0gKiAweDUwICAgICB8IEhUMjRMQzA4ICAgICB8IGVlcHJvbSAoMWtCKQotICoKLSAqIFRPRE86IEFkZCBHNzYyIHN1cHBvcnQgdG8gdGhlIGc3NjBhIGRyaXZlci4KLSAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGQybmV0X2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygicnM1YzM3MmIiLCAweDMyKSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCIyNGMwOCIsIDB4NTApLAotCX0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNBVEEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBkMm5ldF9zYXRhX2RhdGEgPSB7Ci0JLm5fcG9ydHMJPSAyLAotfTsKLQotI2RlZmluZSBEMk5FVF9HUElPX1NBVEEwX1BPV0VSCTMKLSNkZWZpbmUgRDJORVRfR1BJT19TQVRBMV9QT1dFUgkxMgotCi1zdGF0aWMgdm9pZCBfX2luaXQgZDJuZXRfc2F0YV9wb3dlcl9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX1NBVEEwX1BPV0VSLCAiU0FUQTAgcG93ZXIiKTsKLQlpZiAoZXJyID09IDApIHsKLQkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEQyTkVUX0dQSU9fU0FUQTBfUE9XRVIsIDEpOwotCQlpZiAoZXJyKQotCQkJZ3Bpb19mcmVlKEQyTkVUX0dQSU9fU0FUQTBfUE9XRVIpOwotCX0KLQlpZiAoZXJyKQotCQlwcl9lcnIoImQybmV0OiBmYWlsZWQgdG8gY29uZmlndXJlIFNBVEEwIHBvd2VyIEdQSU9cbiIpOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEQyTkVUX0dQSU9fU0FUQTFfUE9XRVIsICJTQVRBMSBwb3dlciIpOwotCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19TQVRBMV9QT1dFUiwgMSk7Ci0JCWlmIChlcnIpCi0JCQlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMV9QT1dFUik7Ci0JfQotCWlmIChlcnIpCi0JCXByX2VycigiZDJuZXQ6IGZhaWxlZCB0byBjb25maWd1cmUgU0FUQTEgcG93ZXIgR1BJT1xuIik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR1BJTyBMRUQncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBUaGUgYmx1ZSBmcm9udCBMRUQgaXMgd2lyZWQgdG8gdGhlIENQTEQgYW5kIGNhbiBibGluayBpbiByZWxhdGlvbiB3aXRoIHRoZQotICogU0FUQSBhY3Rpdml0eS4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGFycmF5IGRldGFpbCB0aGUgZGlmZmVyZW50IExFRCByZWdpc3RlcnMgYW5kIHRoZSBjb21iaW5hdGlvbgotICogb2YgdGhlaXIgcG9zc2libGUgdmFsdWVzOgotICoKLSAqIGxlZF9vZmYgICB8IGJsaW5rX2N0cmwgfCBTQVRBIGFjdGl2ZSB8IExFRCBzdGF0ZQotICogICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKLSAqICAgIDEgICAgICB8ICAgICB4ICAgICAgfCAgICAgIHggICAgICB8ICBvZmYKLSAqICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDAgICAgICB8ICBvZmYKLSAqICAgIDAgICAgICB8ICAgICAxICAgICAgfCAgICAgIDAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKLSAqICAgIDAgICAgICB8ICAgICB4ICAgICAgfCAgICAgIDEgICAgICB8ICBvbgotICoKLSAqIE5vdGVzOiBUaGUgYmx1ZSBhbmQgdGhlIHJlZCBmcm9udCBMRUQncyBjYW4ndCBiZSBvbiBhdCB0aGUgc2FtZSB0aW1lLgotICogICAgICAgIFJlZCBMRUQgaGF2ZSBwcmlvcml0eS4KLSAqLwotCi0jZGVmaW5lIEQyTkVUX0dQSU9fUkVEX0xFRAkJNgotI2RlZmluZSBEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwJMTYKLSNkZWZpbmUgRDJORVRfR1BJT19CTFVFX0xFRF9PRkYJCTIzCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZDJuZXRfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAiZDJuZXQ6Ymx1ZTpzYXRhIiwKLQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKLQkJLmdwaW8gPSBEMk5FVF9HUElPX0JMVUVfTEVEX09GRiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJkMm5ldDpyZWQ6ZmFpbCIsCi0JCS5ncGlvID0gRDJORVRfR1BJT19SRURfTEVELAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZDJuZXRfbGVkX2RhdGEgPSB7Ci0JLm51bV9sZWRzID0gQVJSQVlfU0laRShkMm5ldF9sZWRzKSwKLQkubGVkcyA9IGQybmV0X2xlZHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkMm5ldF9ncGlvX2xlZHMgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImxlZHMtZ3BpbyIsCi0JLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmZDJuZXRfbGVkX2RhdGEsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9ncGlvX2xlZHNfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQkvKiBDb25maWd1cmUgR1BJTyBvdmVyIE1QUCBtYXggbnVtYmVyLiAqLwotCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKEQyTkVUX0dQSU9fQkxVRV9MRURfT0ZGLCAxKTsKLQotCS8qIENvbmZpZ3VyZSByZWdpc3RlciBibGlua19jdHJsIHRvIGFsbG93IFNBVEEgYWN0aXZpdHkgTEVEIGJsaW5raW5nLiAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwsICJibHVlIExFRCBibGluayIpOwotCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19CTFVFX0xFRF9CTElOS19DVFJMLCAxKTsKLQkJaWYgKGVycikKLQkJCWdwaW9fZnJlZShEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwpOwotCX0KLQlpZiAoZXJyKQotCQlwcl9lcnIoImQybmV0OiBmYWlsZWQgdG8gY29uZmlndXJlIGJsdWUgTEVEIGJsaW5rIEdQSU9cbiIpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkMm5ldF9ncGlvX2xlZHMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR1BJTyBrZXlzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBEMk5FVF9HUElPX1BVU0hfQlVUVE9OCQkxOAotI2RlZmluZSBEMk5FVF9HUElPX1BPV0VSX1NXSVRDSF9PTgk4Ci0jZGVmaW5lIEQyTkVUX0dQSU9fUE9XRVJfU1dJVENIX09GRgk5Ci0KLSNkZWZpbmUgRDJORVRfU1dJVENIX1BPV0VSX09OCQkweDEKLSNkZWZpbmUgRDJORVRfU1dJVENIX1BPV0VSX09GRgkJMHgyCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBkMm5ldF9idXR0b25zW10gPSB7Ci0JewotCQkudHlwZQkJPSBFVl9TVywKLQkJLmNvZGUJCT0gRDJORVRfU1dJVENIX1BPV0VSX09GRiwKLQkJLmdwaW8JCT0gRDJORVRfR1BJT19QT1dFUl9TV0lUQ0hfT0ZGLAotCQkuZGVzYwkJPSAiUG93ZXIgcm9ja2VyIHN3aXRjaCAoYXV0b3xvZmYpIiwKLQkJLmFjdGl2ZV9sb3cJPSAwLAotCX0sCi0JewotCQkudHlwZQkJPSBFVl9TVywKLQkJLmNvZGUJCT0gRDJORVRfU1dJVENIX1BPV0VSX09OLAotCQkuZ3BpbwkJPSBEMk5FVF9HUElPX1BPV0VSX1NXSVRDSF9PTiwKLQkJLmRlc2MJCT0gIlBvd2VyIHJvY2tlciBzd2l0Y2ggKG9ufGF1dG8pIiwKLQkJLmFjdGl2ZV9sb3cJPSAwLAotCX0sCi0JewotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5jb2RlCQk9IEtFWV9QT1dFUiwKLQkJLmdwaW8JCT0gRDJORVRfR1BJT19QVVNIX0JVVFRPTiwKLQkJLmRlc2MJCT0gIkZyb250IFB1c2ggQnV0dG9uIiwKLQkJLmFjdGl2ZV9sb3cJPSAwLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGQybmV0X2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gZDJuZXRfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGQybmV0X2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZDJuZXRfZ3Bpb19idXR0b25zID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZDJuZXRfYnV0dG9uX2RhdGEsCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbCBTZXR1cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZDJuZXRfbXBwX21vZGVzW10gX19pbml0ZGF0YSA9IHsKLQlNUFAwX0dQSU8sCS8qIEJvYXJkIElEIChiaXQgMCkgKi8KLQlNUFAxX0dQSU8sCS8qIEJvYXJkIElEIChiaXQgMSkgKi8KLQlNUFAyX0dQSU8sCS8qIEJvYXJkIElEIChiaXQgMikgKi8KLQlNUFAzX0dQSU8sCS8qIFNBVEEgMCBwb3dlciAqLwotCU1QUDRfVU5VU0VELAotCU1QUDVfR1BJTywJLyogRmFuIGZhaWwgZGV0ZWN0aW9uICovCi0JTVBQNl9HUElPLAkvKiBSZWQgZnJvbnQgTEVEICovCi0JTVBQN19VTlVTRUQsCi0JTVBQOF9HUElPLAkvKiBSZWFyIHBvd2VyIHN3aXRjaCAob258YXV0bykgKi8KLQlNUFA5X0dQSU8sCS8qIFJlYXIgcG93ZXIgc3dpdGNoIChhdXRvfG9mZikgKi8KLQlNUFAxMF9VTlVTRUQsCi0JTVBQMTFfVU5VU0VELAotCU1QUDEyX0dQSU8sCS8qIFNBVEEgMSBwb3dlciAqLwotCU1QUDEzX1VOVVNFRCwKLQlNUFAxNF9TQVRBX0xFRCwJLyogU0FUQSAwIGFjdGl2ZSAqLwotCU1QUDE1X1NBVEFfTEVELAkvKiBTQVRBIDEgYWN0aXZlICovCi0JTVBQMTZfR1BJTywJLyogQmx1ZSBmcm9udCBMRUQgYmxpbmsgY29udHJvbCAqLwotCU1QUDE3X1VOVVNFRCwKLQlNUFAxOF9HUElPLAkvKiBGcm9udCBidXR0b24gKDAgPSBSZWxlYXNlZCwgMSA9IFB1c2hlZCApICovCi0JTVBQMTlfVU5VU0VELAotCTAsCi0JLyogMjI6IFVTQiBwb3J0IDEgZnVzZSAoMCA9IEZhaWwsIDEgPSBPaykgKi8KLQkvKiAyMzogQmx1ZSBmcm9udCBMRUQgb2ZmICovCi0JLyogMjQ6IEluaGliaXQgYm9hcmQgcG93ZXIgb2ZmICgwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkKSAqLwotfTsKLQotI2RlZmluZSBEMk5FVF9HUElPX0lOSElCSVRfUE9XRVJfT0ZGICAgIDI0Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9pbml0KHZvaWQpCi17Ci0JLyoKLQkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgotCSAqLwotCW9yaW9uNXhfaW5pdCgpOwotCi0Jb3Jpb241eF9tcHBfY29uZihkMm5ldF9tcHBfbW9kZXMpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCi0JICovCi0Jb3Jpb241eF9laGNpMF9pbml0KCk7Ci0Jb3Jpb241eF9ldGhfaW5pdCgmZDJuZXRfZXRoX2RhdGEpOwotCW9yaW9uNXhfaTJjX2luaXQoKTsKLQlvcmlvbjV4X3VhcnQwX2luaXQoKTsKLQotCWQybmV0X3NhdGFfcG93ZXJfaW5pdCgpOwotCW9yaW9uNXhfc2F0YV9pbml0KCZkMm5ldF9zYXRhX2RhdGEpOwotCi0JbXZlYnVfbWJ1c19hZGRfd2luZG93X2J5X2lkKE9SSU9OX01CVVNfREVWQlVTX0JPT1RfVEFSR0VULAotCQkJCSAgICBPUklPTl9NQlVTX0RFVkJVU19CT09UX0FUVFIsCi0JCQkJICAgIEQyTkVUX05PUl9CT09UX0JBU0UsCi0JCQkJICAgIEQyTkVUX05PUl9CT09UX1NJWkUpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfbm9yX2ZsYXNoKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfZ3Bpb19idXR0b25zKTsKLQotCWQybmV0X2dwaW9fbGVkc19pbml0KCk7Ci0KLQlwcl9ub3RpY2UoImQybmV0OiBGbGFzaCB3cml0ZSBhcmUgbm90IHlldCBzdXBwb3J0ZWQuXG4iKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGQybmV0X2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZDJuZXRfaTJjX2RldmljZXMpKTsKLQotCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKEQyTkVUX0dQSU9fSU5ISUJJVF9QT1dFUl9PRkYsIDEpOwotfQotCi0vKiBXYXJuaW5nOiBMYUNpZSB1c2UgYSB3cm9uZyBtYWNoLXR5cGUgKDB4MjBlPTUyNikgaW4gdGhlaXIgYm9vdGxvYWRlci4gKi8KLQotI2lmZGVmIENPTkZJR19NQUNIX0QyTkVUCi1NQUNISU5FX1NUQVJUKEQyTkVULCAiTGFDaWUgZDIgTmV0d29yayIpCi0JLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLmluaXRfbWFjaGluZQk9IGQybmV0X2luaXQsCi0JLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKLQkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAotCS5pbml0X3RpbWUJPSBvcmlvbjV4X3RpbWVyX2luaXQsCi0JLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKLQkucmVzdGFydAk9IG9yaW9uNXhfcmVzdGFydCwKLU1BQ0hJTkVfRU5ECi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX0JJR0RJU0sKLU1BQ0hJTkVfU1RBUlQoQklHRElTSywgIkxhQ2llIEJpZyBEaXNrIE5ldHdvcmsiKQotCS5hdGFnX29mZnNldAk9IDB4MTAwLAotCS5pbml0X21hY2hpbmUJPSBkMm5ldF9pbml0LAotCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gb3Jpb241eF90aW1lcl9pbml0LAotCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCi0JLnJlc3RhcnQJPSBvcmlvbjV4X3Jlc3RhcnQsCi1NQUNISU5FX0VORAotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9lZG1pbmlfdjItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9lZG1pbmlfdjItc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2YzFiMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZWRtaW5pX3YyLXNldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9lZG1pbmlfdjItc2V0dXAuYwotICoKLSAqIExhQ2llIEV0aGVybmV0IERpc2sgbWluaSBWMiBTZXR1cAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RvcGhlciBNb29yZSA8bW9vcmVAZnJlZS5mcj4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGJlcnQgQXJpYmF1ZCA8YWxiZXJ0LmFyaWJhdWRAZnJlZS5mcj4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLS8qCi0gKiBUT0RPOiBhZGQgT3Jpb24gVVNCIGRldmljZSBwb3J0IGluaXQgd2hlbiBrZXJuZWwub3JnIHN1cHBvcnQgaXMgYWRkZWQuCi0gKiBUT0RPOiBhZGQgZmxhc2ggd3JpdGUgc3VwcG9ydDogc2VlIGJlbG93LgotICogVE9ETzogYWRkIHBvd2VyLW9mZiBzdXBwb3J0LgotICogVE9ETzogYWRkIEkyQyBFRVBST00gc3VwcG9ydC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KLSNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJtcHAuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFRE1JTklfVjIgSW5mbwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiA1MTJLQiBOT1IgZmxhc2ggRGV2aWNlIGJ1cyBib290IGNoaXAgc2VsZWN0Ci0gKi8KLQotI2RlZmluZSBFRE1JTklfVjJfTk9SX0JPT1RfQkFTRQkJMHhmZmY4MDAwMAotI2RlZmluZSBFRE1JTklfVjJfTk9SX0JPT1RfU0laRQkJU1pfNTEySwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDUxMktCIE5PUiBGbGFzaCBvbiBCT09UIERldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBDdXJyZW50bHkgdGhlIE1URCBjb2RlIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgTVgyOUxWNDAwQ0JDVCBhcyBhIGJvdHRvbQotICogLXR5cGUgZGV2aWNlLiBUaGlzIGNvdWxkIGNhdXNlIHJpc2tzIG9mIGFjY2lkZW50YWxseSBlcmFzaW5nIGNyaXRpY2FsCi0gKiBmbGFzaCBzZWN0b3JzLiBXZSB0aHVzIGRlZmluZSBhIHNpbmdsZSwgd3JpdGUtcHJvdGVjdGVkIHBhcnRpdGlvbiBjb3ZlcmluZwotICogdGhlIHdob2xlIGZsYXNoLgotICogVE9ETzogb25jZSB0aGUgZmxhc2ggcGFydCBUT1AvQk9UVE9NIGRldGVjdGlvbiBpc3N1ZSBpcyBzb3J0ZWQgb3V0IGluIHRoZSBNVEQKLSAqIGNvZGUsIGJyZWFrIHRoaXMgaW50byBhdCBsZWFzdCB0aHJlZSBwYXJ0aXRpb25zOiAndS1ib290IGNvZGUnLCAndS1ib290Ci0gKiBlbnZpcm9ubWVudCcgYW5kICd3aGF0ZXZlciBpcyBsZWZ0Jy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWRtaW5pX3YyX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJGdWxsNTEya2IiLAotCQkuc2l6ZQkJPSAweDAwMDgwMDAwLAotCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZWRtaW5pX3YyX25vcl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAxLAotCS5wYXJ0cwkJPSBlZG1pbmlfdjJfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGVkbWluaV92Ml9wYXJ0aXRpb25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRtaW5pX3YyX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuZmxhZ3MJCQk9IElPUkVTT1VSQ0VfTUVNLAotCS5zdGFydAkJCT0gRURNSU5JX1YyX05PUl9CT09UX0JBU0UsCi0JLmVuZAkJCT0gRURNSU5JX1YyX05PUl9CT09UX0JBU0UKLQkJKyBFRE1JTklfVjJfTk9SX0JPT1RfU0laRSAtIDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlZG1pbmlfdjJfbm9yX2ZsYXNoID0gewotCS5uYW1lCQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQkJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZlZG1pbmlfdjJfbm9yX2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwkJPSAxLAotCS5yZXNvdXJjZQkJPSAmZWRtaW5pX3YyX25vcl9mbGFzaF9yZXNvdXJjZSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUlRDIDVDMzcyYSBvbiBJMkMgYnVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBFRE1JTklWMl9SVENfR1BJTwkzCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZG1pbmlfdjJfaTJjX3J0YyA9IHsKLQlJMkNfQk9BUkRfSU5GTygicnM1YzM3MmEiLCAweDMyKSwKLQkuaXJxID0gMCwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbCBTZXR1cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdW5zaWduZWQgaW50IGVkbWluaXYyX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7Ci0JTVBQMF9VTlVTRUQsCi0JTVBQMV9VTlVTRUQsCi0JTVBQMl9VTlVTRUQsCi0JTVBQM19HUElPLAkvKiBSVEMgaW50ZXJydXB0ICovCi0JTVBQNF9VTlVTRUQsCi0JTVBQNV9VTlVTRUQsCi0JTVBQNl9VTlVTRUQsCi0JTVBQN19VTlVTRUQsCi0JTVBQOF9VTlVTRUQsCi0JTVBQOV9VTlVTRUQsCi0JTVBQMTBfVU5VU0VELAotCU1QUDExX1VOVVNFRCwKLQlNUFAxMl9TQVRBX0xFRCwJLyogU0FUQSAwIHByZXNlbmNlICovCi0JTVBQMTNfU0FUQV9MRUQsCS8qIFNBVEEgMSBwcmVzZW5jZSAqLwotCU1QUDE0X1NBVEFfTEVELAkvKiBTQVRBIDAgYWN0aXZlICovCi0JTVBQMTVfU0FUQV9MRUQsCS8qIFNBVEEgMSBhY3RpdmUgKi8KLQkvKiAxNjogUG93ZXIgTEVEIGNvbnRyb2wgKDAgPSBPbiwgMSA9IE9mZikgKi8KLQlNUFAxNl9HUElPLAotCS8qIDE3OiBQb3dlciBMRUQgY29udHJvbCBzZWxlY3QgKDAgPSBDUExELCAxID0gR1BJTzE2KSAqLwotCU1QUDE3X0dQSU8sCi0JLyogMTg6IFBvd2VyIGJ1dHRvbiBzdGF0dXMgKDAgPSBSZWxlYXNlZCwgMSA9IFByZXNzZWQpICovCi0JTVBQMThfR1BJTywKLQlNUFAxOV9VTlVTRUQsCi0JMCwKLX07Ci0KLXZvaWQgX19pbml0IGVkbWluaV92Ml9pbml0KHZvaWQpCi17Ci0Jb3Jpb241eF9tcHBfY29uZihlZG1pbml2Ml9tcHBfbW9kZXMpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCi0JICovCi0Jb3Jpb241eF9laGNpMF9pbml0KCk7Ci0KLQltdmVidV9tYnVzX2FkZF93aW5kb3dfYnlfaWQoT1JJT05fTUJVU19ERVZCVVNfQk9PVF9UQVJHRVQsCi0JCQkJICAgIE9SSU9OX01CVVNfREVWQlVTX0JPT1RfQVRUUiwKLQkJCQkgICAgRURNSU5JX1YyX05PUl9CT09UX0JBU0UsCi0JCQkJICAgIEVETUlOSV9WMl9OT1JfQk9PVF9TSVpFKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVkbWluaV92Ml9ub3JfZmxhc2gpOwotCi0JcHJfbm90aWNlKCJlZG1pbmlfdjI6IFVTQiBkZXZpY2UgcG9ydCwgZmxhc2ggd3JpdGUgYW5kIHBvd2VyLW9mZiAiCi0JCSAgImFyZSBub3QgeWV0IHN1cHBvcnRlZC5cbiIpOwotCi0JLyogR2V0IFJUQyBJUlEgYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaWYgKGdwaW9fcmVxdWVzdChFRE1JTklWMl9SVENfR1BJTywgInJ0YyIpID09IDApIHsKLQkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KEVETUlOSVYyX1JUQ19HUElPKSA9PSAwKQotCQkJZWRtaW5pX3YyX2kyY19ydGMuaXJxID0gZ3Bpb190b19pcnEoRURNSU5JVjJfUlRDX0dQSU8pOwotCQllbHNlCi0JCQlncGlvX2ZyZWUoRURNSU5JVjJfUlRDX0dQSU8pOwotCX0KLQotCWlmIChlZG1pbmlfdjJfaTJjX3J0Yy5pcnEgPT0gMCkKLQkJcHJfd2FybmluZygiZWRtaW5pX3YyOiBmYWlsZWQgdG8gZ2V0IFJUQyBJUlFcbiIpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJmVkbWluaV92Ml9pMmNfcnRjLCAxKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYwppbmRleCA5NjU0YjBjLi5jZDRiYWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2lycS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb24tZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgZ3BpbzBfaXJxc1s0XSA9IHsKQEAgLTI1LDEwICsyNiwzNyBAQAogCUlSUV9PUklPTjVYX0dQSU9fMjRfMzEsCiB9OwogCisjaWZkZWYgQ09ORklHX01VTFRJX0lSUV9IQU5ETEVSCisvKgorICogQ29tcGlsaW5nIHdpdGggYm90aCBub24tRFQgYW5kIERUIHN1cHBvcnQgZW5hYmxlZCwgd2lsbAorICogYnJlYWsgYXNtIGlycSBoYW5kbGVyIHVzZWQgYnkgbm9uLURUIGJvYXJkcy4gVGhlcmVmb3JlLAorICogd2UgcHJvdmlkZSBhIEMtc3R5bGUgaXJxIGhhbmRsZXIgZXZlbiBmb3Igbm9uLURUIGJvYXJkcywKKyAqIGlmIE1VTFRJX0lSUV9IQU5ETEVSIGlzIHNldC4KKyAqLworCithc21saW5rYWdlIHZvaWQKK19fZXhjZXB0aW9uX2lycV9lbnRyeSBvcmlvbjV4X2xlZ2FjeV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiBzdGF0OworCisJc3RhdCA9IHJlYWRsX3JlbGF4ZWQoTUFJTl9JUlFfQ0FVU0UpOworCXN0YXQgJj0gcmVhZGxfcmVsYXhlZChNQUlOX0lSUV9NQVNLKTsKKwlpZiAoc3RhdCkgeworCQl1bnNpZ25lZCBpbnQgaHdpcnEgPSBfX2ZscyhzdGF0KTsKKwkJaGFuZGxlX0lSUShod2lycSwgcmVncyk7CisJCXJldHVybjsKKwl9Cit9CisjZW5kaWYKKwogdm9pZCBfX2luaXQgb3Jpb241eF9pbml0X2lycSh2b2lkKQogewogCW9yaW9uX2lycV9pbml0KDAsIE1BSU5fSVJRX01BU0spOwogCisjaWZkZWYgQ09ORklHX01VTFRJX0lSUV9IQU5ETEVSCisJc2V0X2hhbmRsZV9pcnEob3Jpb241eF9sZWdhY3lfaGFuZGxlX2lycSk7CisjZW5kaWYKKwogCS8qCiAJICogSW5pdGlhbGl6ZSBncGlvbGliIGZvciBHUElPcyAwLTMxLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21zczItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tc3MyLXNldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMDUxMzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21zczItc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi0vKgotICogTWF4dG9yIFNoYXJlZCBTdG9yYWdlIElJIEJvYXJkIFNldHVwCi0gKgotICogTWFpbnRhaW5lcjogU3lsdmVyIEJydW5lYXUgPHN5bHZlci5icnVuZWF1QGdvb2dsZW1haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgotI2luY2x1ZGUgPG1hY2gvYnJpZGdlLXJlZ3MuaD4KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJtcHAuaCIKLQotI2RlZmluZSBNU1MyX05PUl9CT09UX0JBU0UJMHhmZjgwMDAwMAotI2RlZmluZSBNU1MyX05PUl9CT09UX1NJWkUJU1pfMjU2SwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE1heHRvciBTaGFyZWQgU3RvcmFnZSBJSSBJbmZvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIE1heHRvciBTaGFyZWQgU3RvcmFnZSBJSSBoYXJkd2FyZSA6Ci0gKiAtIE1hcnZlbGwgODhGNTE4Mi1BMiBDNTAwCi0gKiAtIE1hcnZlbGwgODhFMTExMSBHaWdhYml0IEV0aGVybmV0IFBIWQotICogLSBSVEMgTTQxVDgxIChAMHg2OCkgb24gSTJDIGJ1cwotICogLSAyNTZLQiBOT1IgZmxhc2gKLSAqIC0gNjRNQiBvZiBSQU0KLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDI1NktCIE5PUiBGbGFzaCBvbiBCT09UIERldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1zczJfbm9yX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1zczJfbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkuc3RhcnQJCT0gTVNTMl9OT1JfQk9PVF9CQVNFLAotCS5lbmQJCT0gTVNTMl9OT1JfQk9PVF9CQVNFICsgTVNTMl9OT1JfQk9PVF9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zczJfbm9yX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbXNzMl9ub3JfZmxhc2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9ICZtc3MyX25vcl9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUENJIHNldHVwCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgX19pbml0IG1zczJfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQotewotCWludCBpcnE7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBkZXZpY2VzIHdpdGggaGFyZC13aXJlZCBJUlFzLgotCSAqLwotCWlycSA9IG9yaW9uNXhfcGNpX21hcF9pcnEoZGV2LCBzbG90LCBwaW4pOwotCWlmIChpcnEgIT0gLTEpCi0JCXJldHVybiBpcnE7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfcGNpIG1zczJfcGNpIF9faW5pdGRhdGEgPSB7Ci0JLm5yX2NvbnRyb2xsZXJzID0gMiwKLQkuc2V0dXAJCT0gb3Jpb241eF9wY2lfc3lzX3NldHVwLAotCS5zY2FuCQk9IG9yaW9uNXhfcGNpX3N5c19zY2FuX2J1cywKLQkubWFwX2lycQk9IG1zczJfcGNpX21hcF9pcnEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtc3MyX3BjaV9pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfbXNzMigpKQotCQlwY2lfY29tbW9uX2luaXQoJm1zczJfcGNpKTsKLQotCXJldHVybiAwOwotfQotc3Vic3lzX2luaXRjYWxsKG1zczJfcGNpX2luaXQpOwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRXRoZXJuZXQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgbXNzMl9ldGhfZGF0YSA9IHsKLQkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0FUQQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIG1zczJfc2F0YV9kYXRhID0gewotCS5uX3BvcnRzCT0gMiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR1BJTyBidXR0b25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBNU1MyX0dQSU9fS0VZX1JFU0VUCTEyCi0jZGVmaW5lIE1TUzJfR1BJT19LRVlfUE9XRVIJMTEKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIG1zczJfYnV0dG9uc1tdID0gewotCXsKLQkJLmNvZGUJCT0gS0VZX1BPV0VSLAotCQkuZ3BpbwkJPSBNU1MyX0dQSU9fS0VZX1BPV0VSLAotCQkuZGVzYwkJPSAiUG93ZXIiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JfSwgewotCQkuY29kZQkJPSBLRVlfUkVTVEFSVCwKLQkJLmdwaW8JCT0gTVNTMl9HUElPX0tFWV9SRVNFVCwKLQkJLmRlc2MJCT0gIlJlc2V0IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIG1zczJfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBtc3MyX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShtc3MyX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNzMl9idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbXNzMl9idXR0b25fZGF0YSwKLQl9LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSVEMgbTQxdDgxIG9uIEkyQyBidXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIE1TUzJfR1BJT19SVENfSVJRCTMKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1zczJfaTJjX3J0YyA9IHsKLQlJMkNfQk9BUkRfSU5GTygibTQxdDgxIiwgMHg2OCksCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE1TUzIgcG93ZXIgb2ZmIG1ldGhvZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogT24gdGhlIE1heHRvciBTaGFyZWQgU3RvcmFnZSBJSSwgdGhlIHNodXRkb3duIHByb2Nlc3MgaXMgdGhlIGZvbGxvd2luZyA6Ci0gKiAtIFVzZXJsYW5kIG1vZGlmaWVzIFUtYm9vdCBlbnYgdG8gdGVsbCBVLWJvb3QgdG8gZ28gaWRsZSBhdCBuZXh0IGJvb3QKLSAqIC0gVGhlIGJvYXJkIHJlYm9vdHMKLSAqIC0gVS1ib290IHN0YXJ0cyBhbmQgZ28gaW50byBhbiBpZGxlIG1vZGUgdW50aWwgdGhlIHVzZXIgcHJlc3MgInBvd2VyIgotICovCi1zdGF0aWMgdm9pZCBtc3MyX3Bvd2VyX29mZih2b2lkKQotewotCXUzMiByZWc7Ci0KLQkvKgotCSAqIEVuYWJsZSBhbmQgaXNzdWUgc29mdCByZXNldAotCSAqLwotCXJlZyA9IHJlYWRsKFJTVE9VVG5fTUFTSyk7Ci0JcmVnIHw9IDEgPDwgMjsKLQl3cml0ZWwocmVnLCBSU1RPVVRuX01BU0spOwotCi0JcmVnID0gcmVhZGwoQ1BVX1NPRlRfUkVTRVQpOwotCXJlZyB8PSAxOwotCXdyaXRlbChyZWcsIENQVV9TT0ZUX1JFU0VUKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgU2V0dXAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHVuc2lnbmVkIGludCBtc3MyX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7Ci0JTVBQMF9HUElPLAkJLyogUG93ZXIgTEVEICovCi0JTVBQMV9HUElPLAkJLyogRXJyb3IgTEVEICovCi0JTVBQMl9VTlVTRUQsCi0JTVBQM19HUElPLAkJLyogUlRDIGludGVycnVwdCAqLwotCU1QUDRfR1BJTywJCS8qIEhERCBpbmQuIChTaW5nbGUvRHVhbCkqLwotCU1QUDVfR1BJTywJCS8qIEhEMCA1ViBjb250cm9sICovCi0JTVBQNl9HUElPLAkJLyogSEQwIDEyViBjb250cm9sICovCi0JTVBQN19HUElPLAkJLyogSEQxIDVWIGNvbnRyb2wgKi8KLQlNUFA4X0dQSU8sCQkvKiBIRDEgMTJWIGNvbnRyb2wgKi8KLQlNUFA5X1VOVVNFRCwKLQlNUFAxMF9HUElPLAkJLyogRmFuIGNvbnRyb2wgKi8KLQlNUFAxMV9HUElPLAkJLyogUG93ZXIgYnV0dG9uICovCi0JTVBQMTJfR1BJTywJCS8qIFJlc2V0IGJ1dHRvbiAqLwotCU1QUDEzX1VOVVNFRCwKLQlNUFAxNF9TQVRBX0xFRCwJCS8qIFNBVEEgMCBhY3RpdmUgKi8KLQlNUFAxNV9TQVRBX0xFRCwJCS8qIFNBVEEgMSBhY3RpdmUgKi8KLQlNUFAxNl9VTlVTRUQsCi0JTVBQMTdfVU5VU0VELAotCU1QUDE4X1VOVVNFRCwKLQlNUFAxOV9VTlVTRUQsCi0JMCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBtc3MyX2luaXQodm9pZCkKLXsKLQkvKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LiAqLwotCW9yaW9uNXhfaW5pdCgpOwotCi0Jb3Jpb241eF9tcHBfY29uZihtc3MyX21wcF9tb2Rlcyk7Ci0KLQkvKgotCSAqIE1QUFsyMF0gVW51c2VkCi0JICogTVBQWzIxXSBQQ0kgY2xvY2sKLQkgKiBNUFBbMjJdIFVTQiAwIG92ZXIgY3VycmVudAotCSAqIE1QUFsyM10gVVNCIDEgb3ZlciBjdXJyZW50Ci0JICovCi0KLQkvKgotCSAqIENvbmZpZ3VyZSBwZXJpcGhlcmFscy4KLQkgKi8KLQlvcmlvbjV4X2VoY2kwX2luaXQoKTsKLQlvcmlvbjV4X2VoY2kxX2luaXQoKTsKLQlvcmlvbjV4X2V0aF9pbml0KCZtc3MyX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2kyY19pbml0KCk7Ci0Jb3Jpb241eF9zYXRhX2luaXQoJm1zczJfc2F0YV9kYXRhKTsKLQlvcmlvbjV4X3VhcnQwX2luaXQoKTsKLQlvcmlvbjV4X3hvcl9pbml0KCk7Ci0KLQltdmVidV9tYnVzX2FkZF93aW5kb3dfYnlfaWQoT1JJT05fTUJVU19ERVZCVVNfQk9PVF9UQVJHRVQsCi0JCQkJICAgIE9SSU9OX01CVVNfREVWQlVTX0JPT1RfQVRUUiwKLQkJCQkgICAgTVNTMl9OT1JfQk9PVF9CQVNFLAotCQkJCSAgICBNU1MyX05PUl9CT09UX1NJWkUpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXNzMl9ub3JfZmxhc2gpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtc3MyX2J1dHRvbl9kZXZpY2UpOwotCi0JaWYgKGdwaW9fcmVxdWVzdChNU1MyX0dQSU9fUlRDX0lSUSwgInJ0YyIpID09IDApIHsKLQkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KE1TUzJfR1BJT19SVENfSVJRKSA9PSAwKQotCQkJbXNzMl9pMmNfcnRjLmlycSA9IGdwaW9fdG9faXJxKE1TUzJfR1BJT19SVENfSVJRKTsKLQkJZWxzZQotCQkJZ3Bpb19mcmVlKE1TUzJfR1BJT19SVENfSVJRKTsKLQl9Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJm1zczJfaTJjX3J0YywgMSk7Ci0KLQkvKiByZWdpc3RlciBtc3MyIHNwZWNpZmljIHBvd2VyLW9mZiBtZXRob2QgKi8KLQlwbV9wb3dlcl9vZmYgPSBtc3MyX3Bvd2VyX29mZjsKLX0KLQotTUFDSElORV9TVEFSVChNU1MyLCAiTWF4dG9yIFNoYXJlZCBTdG9yYWdlIElJIikKLQkvKiBNYWludGFpbmVyOiBTeWx2ZXIgQnJ1bmVhdSA8c3lsdmVyLmJydW5lYXVAZ29vZ2xlbWFpbC5jb20+ICovCi0JLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLmluaXRfbWFjaGluZQk9IG1zczJfaW5pdCwKLQkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAotCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IG9yaW9uNXhfdGltZXJfaW5pdCwKLQkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLAotCS5yZXN0YXJ0CT0gb3Jpb241eF9yZXN0YXJ0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHJpbWEyL3JzdGMuYyBiL2FyY2gvYXJtL21hY2gtcHJpbWEyL3JzdGMuYwppbmRleCA0ODg3YTJhLi4zZGZmY2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXByaW1hMi9yc3RjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wcmltYTIvcnN0Yy5jCkBAIC0zNiwyNyArMzYsMzMgQEAKIAogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyY2Rldi0+b2Zfbm9kZSwgInNpcmYscHJpbWEyLXJzdGMiKSkgewogCQkvKgotCQkgKiBXcml0aW5nIDEgdG8gdGhpcyBiaXQgcmVzZXRzIGNvcnJlc3BvbmRpbmcgYmxvY2suIFdyaXRpbmcgMCB0byB0aGlzCi0JCSAqIGJpdCBkZS1hc3NlcnRzIHJlc2V0IHNpZ25hbCBvZiB0aGUgY29ycmVzcG9uZGluZyBibG9jay4KLQkJICogZGF0YXNoZWV0IGRvZXNuJ3QgcmVxdWlyZSBleHBsaWNpdCBkZWxheSBiZXR3ZWVuIHRoZSBzZXQgYW5kIGNsZWFyCi0JCSAqIG9mIHJlc2V0IGJpdC4gaXQgY291bGQgYmUgc2hvcnRlciBpZiB0ZXN0cyBwYXNzLgorCQkgKiBXcml0aW5nIDEgdG8gdGhpcyBiaXQgcmVzZXRzIGNvcnJlc3BvbmRpbmcgYmxvY2suCisJCSAqIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBkZS1hc3NlcnRzIHJlc2V0IHNpZ25hbCBvZiB0aGUKKwkJICogY29ycmVzcG9uZGluZyBibG9jay4gZGF0YXNoZWV0IGRvZXNuJ3QgcmVxdWlyZSBleHBsaWNpdAorCQkgKiBkZWxheSBiZXR3ZWVuIHRoZSBzZXQgYW5kIGNsZWFyIG9mIHJlc2V0IGJpdC4gaXQgY291bGQKKwkJICogYmUgc2hvcnRlciBpZiB0ZXN0cyBwYXNzLgogCQkgKi8KLQkJd3JpdGVsKHJlYWRsKHNpcmZzb2NfcnN0Y19iYXNlICsgKHJlc2V0X2JpdCAvIDMyKSAqIDQpIHwgKDEgPDwgcmVzZXRfYml0KSwKKwkJd3JpdGVsKHJlYWRsKHNpcmZzb2NfcnN0Y19iYXNlICsKKwkJCShyZXNldF9iaXQgLyAzMikgKiA0KSB8ICgxIDw8IHJlc2V0X2JpdCksCiAJCQlzaXJmc29jX3JzdGNfYmFzZSArIChyZXNldF9iaXQgLyAzMikgKiA0KTsKLQkJbXNsZWVwKDEwKTsKLQkJd3JpdGVsKHJlYWRsKHNpcmZzb2NfcnN0Y19iYXNlICsgKHJlc2V0X2JpdCAvIDMyKSAqIDQpICYgfigxIDw8IHJlc2V0X2JpdCksCisJCW1zbGVlcCgyMCk7CisJCXdyaXRlbChyZWFkbChzaXJmc29jX3JzdGNfYmFzZSArCisJCQkocmVzZXRfYml0IC8gMzIpICogNCkgJiB+KDEgPDwgcmVzZXRfYml0KSwKIAkJCXNpcmZzb2NfcnN0Y19iYXNlICsgKHJlc2V0X2JpdCAvIDMyKSAqIDQpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZvciBNQVJDTyBhbmQgUE9MTwotCQkgKiBXcml0aW5nIDEgdG8gU0VUIHJlZ2lzdGVyIHJlc2V0cyBjb3JyZXNwb25kaW5nIGJsb2NrLiBXcml0aW5nIDEgdG8gQ0xFQVIKLQkJICogcmVnaXN0ZXIgZGUtYXNzZXJ0cyByZXNldCBzaWduYWwgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2suCi0JCSAqIGRhdGFzaGVldCBkb2Vzbid0IHJlcXVpcmUgZXhwbGljaXQgZGVsYXkgYmV0d2VlbiB0aGUgc2V0IGFuZCBjbGVhcgotCQkgKiBvZiByZXNldCBiaXQuIGl0IGNvdWxkIGJlIHNob3J0ZXIgaWYgdGVzdHMgcGFzcy4KKwkJICogV3JpdGluZyAxIHRvIFNFVCByZWdpc3RlciByZXNldHMgY29ycmVzcG9uZGluZyBibG9jay4KKwkJICogV3JpdGluZyAxIHRvIENMRUFSIHJlZ2lzdGVyIGRlLWFzc2VydHMgcmVzZXQgc2lnbmFsIG9mIHRoZQorCQkgKiBjb3JyZXNwb25kaW5nIGJsb2NrLgorCQkgKiBkYXRhc2hlZXQgZG9lc24ndCByZXF1aXJlIGV4cGxpY2l0IGRlbGF5IGJldHdlZW4gdGhlIHNldCBhbmQKKwkJICogY2xlYXIgb2YgcmVzZXQgYml0LiBpdCBjb3VsZCBiZSBzaG9ydGVyIGlmIHRlc3RzIHBhc3MuCiAJCSAqLwotCQl3cml0ZWwoMSA8PCByZXNldF9iaXQsIHNpcmZzb2NfcnN0Y19iYXNlICsgKHJlc2V0X2JpdCAvIDMyKSAqIDgpOwotCQltc2xlZXAoMTApOwotCQl3cml0ZWwoMSA8PCByZXNldF9iaXQsIHNpcmZzb2NfcnN0Y19iYXNlICsgKHJlc2V0X2JpdCAvIDMyKSAqIDggKyA0KTsKKwkJd3JpdGVsKDEgPDwgcmVzZXRfYml0LAorCQkJc2lyZnNvY19yc3RjX2Jhc2UgKyAocmVzZXRfYml0IC8gMzIpICogOCk7CisJCW1zbGVlcCgyMCk7CisJCXdyaXRlbCgxIDw8IHJlc2V0X2JpdCwKKwkJCXNpcmZzb2NfcnN0Y19iYXNlICsgKHJlc2V0X2JpdCAvIDMyKSAqIDggKyA0KTsKIAl9CiAKIAltdXRleF91bmxvY2soJnJzdGNfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKaW5kZXggYjE5ZDFjMy4uMjA1ZjliZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNhbl9yZWd1bGF0b3JfZGV2aWNlID0gewogCS5uYW1lCT0gInJlZy1maXhlZC12b2xhZ2UiLAotCS5pZAk9IC0xLAorCS5pZAk9IDAsCiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmY2FuX3JlZ3VsYXRvcl9wZGF0YSwKIAl9LApAQCAtNTEwLDE4ICs1MTAsNiBAQAogCS5udW1fcmVzb3VyY2VzCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp6ZXVzX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZ6ZXVzX3NlcmlhbF9kZXZpY2UsCi0JJnpldXNfbXRkX2RldmljZXNbMF0sCi0JJnpldXNfZG05azBfZGV2aWNlLAotCSZ6ZXVzX2RtOWsxX2RldmljZSwKLQkmemV1c19zcmFtX2RldmljZSwKLQkmemV1c19sZWRzX2RldmljZSwKLQkmemV1c19wY21jaWFfZGV2aWNlLAotCSZ6ZXVzX21heDYzNjlfZGV2aWNlLAotCSZjYW5fcmVndWxhdG9yX2RldmljZSwKLX07Ci0KIC8qIEFDJzk3ICovCiBzdGF0aWMgcHhhMnh4X2F1ZGlvX29wc190IHpldXNfYWM5N19pbmZvID0gewogCS5yZXNldF9ncGlvID0gOTUsCkBAIC01MzIsNDQgKzUyMCw1MCBAQAogICogVVNCIGhvc3QKICAqLwogCi1zdGF0aWMgaW50IHpldXNfb2hjaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHpldXNfb2hjaV9yZWd1bGF0b3Jfc3VwcGxpZXNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2YnVzMiIsICJweGEyN3gtb2hjaSIpLAorfTsKIAotCS8qIFN3aXRjaCBvbiBwb3J0IDIuICovCi0JaWYgKChlcnIgPSBncGlvX3JlcXVlc3QoWkVVU19VU0IyX1BXUkVOX0dQSU8sICJVU0IyX1BXUkVOIikpKSB7Ci0JCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVxdWVzdCBVU0IyX1BXUkVOXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgemV1c19vaGNpX3JlZ3VsYXRvcl9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoemV1c19vaGNpX3JlZ3VsYXRvcl9zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gemV1c19vaGNpX3JlZ3VsYXRvcl9zdXBwbGllcywKK307CiAKLQlpZiAoKGVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChaRVVTX1VTQjJfUFdSRU5fR1BJTywgMSkpKSB7Ci0JCWdwaW9fZnJlZShaRVVTX1VTQjJfUFdSRU5fR1BJTyk7Ci0JCWRldl9lcnIoZGV2LCAiQ2FuJ3QgZW5hYmxlIFVTQjJfUFdSRU5cbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgemV1c19vaGNpX3JlZ3VsYXRvcl9jb25maWcgPSB7CisJLnN1cHBseV9uYW1lCQk9ICJ2YnVzMiIsCisJLm1pY3Jvdm9sdHMJCT0gNTAwMDAwMCwgLyogNS4wViAqLworCS5ncGlvCQkJPSBaRVVTX1VTQjJfUFdSRU5fR1BJTywKKwkuZW5hYmxlX2hpZ2gJCT0gMSwKKwkuc3RhcnR1cF9kZWxheQkJPSAwLAorCS5pbml0X2RhdGEJCT0gJnpldXNfb2hjaV9yZWd1bGF0b3JfZGF0YSwKK307CiAKLQkvKiBQb3J0IDIgaXMgc2hhcmVkIGJldHdlZW4gaG9zdCBhbmQgY2xpZW50IGludGVyZmFjZS4gKi8KLQlVUDJPQ1IgPSBVUDJPQ1JfSFhPRSB8IFVQMk9DUl9IWFMgfCBVUDJPQ1JfRE1QREUgfCBVUDJPQ1JfRFBQREU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgemV1c19vaGNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qIFBvd2VyLW9mZiBwb3J0IDIgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoWkVVU19VU0IyX1BXUkVOX0dQSU8sIDApOwotCWdwaW9fZnJlZShaRVVTX1VTQjJfUFdSRU5fR1BJTyk7Ci19CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB6ZXVzX29oY2lfcmVndWxhdG9yX2RldmljZSA9IHsKKwkubmFtZQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZAkJPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnpldXNfb2hjaV9yZWd1bGF0b3JfY29uZmlnLAorCX0sCit9OwogCiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSB6ZXVzX29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKIAkucG9ydF9tb2RlCT0gUE1NX05QU19NT0RFLAogCS8qIENsZWFyIFBvd2VyIENvbnRyb2wgUG9sYXJpdHkgTG93IGFuZCBzZXQgUG93ZXIgU2Vuc2UKIAkgKiBQb2xhcml0eSBMb3cuIFN1cHBseSBwb3dlciB0byBVU0IgcG9ydHMuICovCiAJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX1NFTlNFX0xPVywKLQkuaW5pdAkJPSB6ZXVzX29oY2lfaW5pdCwKLQkuZXhpdAkJPSB6ZXVzX29oY2lfZXhpdCwKIH07CiAKK3N0YXRpYyB2b2lkIHpldXNfcmVnaXN0ZXJfb2hjaSh2b2lkKQoreworCS8qIFBvcnQgMiBpcyBzaGFyZWQgYmV0d2VlbiBob3N0IGFuZCBjbGllbnQgaW50ZXJmYWNlLiAqLworCVVQMk9DUiA9IFVQMk9DUl9IWE9FIHwgVVAyT0NSX0hYUyB8IFVQMk9DUl9ETVBERSB8IFVQMk9DUl9EUFBERTsKKworCXB4YV9zZXRfb2hjaV9pbmZvKCZ6ZXVzX29oY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisKIC8qCiAgKiBGbGF0IFBhbmVsCiAgKi8KQEAgLTY3Nyw2ICs2NzEsMTkgQEAKIAkudWRjX2NvbW1hbmQgPSB6ZXVzX3VkY19jb21tYW5kLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnpldXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnpldXNfc2VyaWFsX2RldmljZSwKKwkmemV1c19tdGRfZGV2aWNlc1swXSwKKwkmemV1c19kbTlrMF9kZXZpY2UsCisJJnpldXNfZG05azFfZGV2aWNlLAorCSZ6ZXVzX3NyYW1fZGV2aWNlLAorCSZ6ZXVzX2xlZHNfZGV2aWNlLAorCSZ6ZXVzX3BjbWNpYV9kZXZpY2UsCisJJnpldXNfbWF4NjM2OV9kZXZpY2UsCisJJmNhbl9yZWd1bGF0b3JfZGV2aWNlLAorCSZ6ZXVzX29oY2lfcmVndWxhdG9yX2RldmljZSwKK307CisKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIHpldXNfcG93ZXJfb2ZmKHZvaWQpCiB7CkBAIC04NDcsNyArODU0LDcgQEAKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHpldXNfZGV2aWNlcywgQVJSQVlfU0laRSh6ZXVzX2RldmljZXMpKTsKIAotCXB4YV9zZXRfb2hjaV9pbmZvKCZ6ZXVzX29oY2lfcGxhdGZvcm1fZGF0YSk7CisJemV1c19yZWdpc3Rlcl9vaGNpKCk7CiAKIAlpZiAoemV1c19zZXR1cF9mYl9ncGlvcygpKQogCQlwcl9lcnIoIkZhaWxlZCB0byBzZXR1cCBmYiBncGlvc1xuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXFjb20vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcWNvbS9LY29uZmlnCmluZGV4IGEwMjhiZTIuLmZkMmI5OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcWNvbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcWNvbS9LY29uZmlnCkBAIC0yLDkgKzIsOSBAQAogCWJvb2wgIlF1YWxjb21tIFN1cHBvcnQiIGlmIEFSQ0hfTVVMVElfVjcKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBBUk1fQU1CQQogCXNlbGVjdCBDTEtTUkNfT0YKLQlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwotCXNlbGVjdCBIQVZFX1NNUAorCXNlbGVjdCBQSU5DVFJMCiAJc2VsZWN0IFFDT01fU0NNIGlmIFNNUAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFF1YWxjb21tJ3MgZGV2aWNldHJlZSBiYXNlZCBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1xY29tL2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXFjb20vYm9hcmQuYwppbmRleCBiYWU2MTdlLi5jNDM3YTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXFjb20vYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXFjb20vYm9hcmQuYwpAQCAtMTUsOSArMTUsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWNvbV9kdF9tYXRjaFtdIF9faW5pdGNvbnN0ID0geworCSJxY29tLGFwcTgwNjQiLAorCSJxY29tLGFwcTgwNzQtZHJhZ29uYm9hcmQiLAorCSJxY29tLGFwcTgwODQiLAogCSJxY29tLG1zbTg2NjAtc3VyZiIsCiAJInFjb20sbXNtODk2MC1jZHAiLAotCSJxY29tLGFwcTgwNzQtZHJhZ29uYm9hcmQiLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggMWQ1ZWU1Yy4uOTYwYjhkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTE0OCw2ICsxNDgsMjEgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19sZWRzX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gUkVBTFZJRVdfU1lTX0JBU0UgKyBSRUFMVklFV19TWVNfTEVEX09GRlNFVCwKKwkJLmVuZAk9IFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX0xFRF9PRkZTRVQgKyA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19sZWRzX2RldmljZSA9IHsKKwkubmFtZQkJPSAidmVyc2F0aWxlLWxlZHMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfbGVkc19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJlYWx2aWV3X2xlZHNfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19pMmNfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IFJFQUxWSUVXX0kyQ19CQVNFLAogCS5lbmQJCT0gUkVBTFZJRVdfSTJDX0JBU0UgKyBTWl80SyAtIDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCmluZGV4IDYwMmNhNWUuLjEzZGM4MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCkBAIC0zNyw2ICszNyw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2ZsYXNoX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2NmX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2xlZHNfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfaTJjX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhOwogZXh0ZXJuIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggYzg1ZGRiMi4uNmJiMDcwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKQEAgLTQ1Miw2ICs0NTIsNyBAQAogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19lYl9mbGFzaF9yZXNvdXJjZSwgMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNoYXJfbGNkX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19sZWRzX2RldmljZSk7CiAJZXRoX2RldmljZV9yZWdpc3RlcigpOwogCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCmluZGV4IGM1ZWFkZTcuLjE3M2YyYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwpAQCAtMzY3LDYgKzM2Nyw3IEBACiAJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X3BiMTE3Nl9pc3AxNzYxX3Jlc291cmNlcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbXVfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNoYXJfbGNkX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19sZWRzX2RldmljZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggZjRiMDk2Mi4uYmRlN2U2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0zNDcsNiArMzQ3LDcgQEAKIAlyZWFsdmlld19ldGhfcmVnaXN0ZXIoTlVMTCwgcmVhbHZpZXdfcGIxMW1wX3Ntc2M5MTF4X3Jlc291cmNlcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2NmX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19sZWRzX2RldmljZSk7CiAJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X3BiMTFtcF9pc3AxNzYxX3Jlc291cmNlcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbXVfZGV2aWNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwppbmRleCAxMGEzZTFkLi40ZTU3YTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwpAQCAtMjg5LDYgKzI4OSw3IEBACiAJcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKE5VTEwsIHJlYWx2aWV3X3BiYThfc21zYzkxMXhfcmVzb3VyY2VzKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfY2ZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2xlZHNfZGV2aWNlKTsKIAlyZWFsdmlld191c2JfcmVnaXN0ZXIocmVhbHZpZXdfcGJhOF9pc3AxNzYxX3Jlc291cmNlcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbXVfZGV2aWNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKaW5kZXggOWQ3NTQ5My4uNzJjOTZjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCkBAIC0zODUsNiArMzg1LDcgQEAKIAlyZWFsdmlld19ldGhfcmVnaXN0ZXIoTlVMTCwgcmVhbHZpZXdfcGJ4X3Ntc2M5MTF4X3Jlc291cmNlcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2NmX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19sZWRzX2RldmljZSk7CiAJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X3BieF9pc3AxNzYxX3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9jb3JlLmgKaW5kZXggZTJlN2M5ZC4uMzliY2E5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9jb3JlLmgKQEAgLTE4LDUgKzE4LDMgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcm9ja2NoaXBfYm9vdF9mbjsKIGV4dGVybiB2b2lkIHJvY2tjaGlwX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwotCi1leHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIHJvY2tjaGlwX3NtcF9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jCmluZGV4IDA3Mjg0MmYuLjkxMDgzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcGxhdHNtcC5jCkBAIC0xNzgsNyArMTc4LDggQEAKIAkJcG11X3NldF9wb3dlcl9kb21haW4oMCArIGksIGZhbHNlKTsKIH0KIAotc3RydWN0IHNtcF9vcGVyYXRpb25zIHJvY2tjaGlwX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgcm9ja2NoaXBfc21wX29wcyBfX2luaXRkYXRhID0gewogCS5zbXBfcHJlcGFyZV9jcHVzCT0gcm9ja2NoaXBfc21wX3ByZXBhcmVfY3B1cywKIAkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gcm9ja2NoaXBfYm9vdF9zZWNvbmRhcnksCiB9OworQ1BVX01FVEhPRF9PRl9ERUNMQVJFKHJrMzA2Nl9zbXAsICJyb2NrY2hpcCxyazMwNjYtc21wIiwgJnJvY2tjaGlwX3NtcF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jCmluZGV4IGQyMTFkNmYuLjQ0OTliMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMKQEAgLTM5LDcgKzM5LDYgQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoUk9DS0NISVBfRFQsICJSb2NrY2hpcCBDb3J0ZXgtQTkgKERldmljZSBUcmVlKSIpCi0JLnNtcAkJPSBzbXBfb3BzKHJvY2tjaGlwX3NtcF9vcHMpLAogCS5pbml0X21hY2hpbmUJPSByb2NrY2hpcF9kdF9pbml0LAogCS5kdF9jb21wYXQJPSByb2NrY2hpcF9ib2FyZF9kdF9jb21wYXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvS2NvbmZpZwppbmRleCA0MGNmNTBiLi4wNDI4NGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvS2NvbmZpZwpAQCAtMTgsNiArMTgsOCBAQAogCWhlbHAKIAkgIEJhc2UgcGxhdGZvcm0gY29kZSBmb3IgYW55IFNhbXN1bmcgUzNDMjRYWCBkZXZpY2UKIAorCisKIG1lbnUgIlNBTVNVTkcgUzNDMjRYWCBTb0NzIFN1cHBvcnQiCiAKIGNvbW1lbnQgIlMzQzI0WFggU29DcyIKQEAgLTI2LDggKzI4LDcgQEAKIAlib29sICJTQU1TVU5HIFMzQzI0MTAiCiAJZGVmYXVsdCB5CiAJc2VsZWN0IENQVV9BUk05MjBUCi0Jc2VsZWN0IENQVV9MTFNFUklBTF9TM0MyNDEwCi0Jc2VsZWN0IFMzQzI0MTBfQ0xPQ0sKKwlzZWxlY3QgUzNDMjQxMF9DT01NT05fQ0xLCiAJc2VsZWN0IFMzQzI0MTBfRE1BIGlmIFMzQzI0WFhfRE1BCiAJc2VsZWN0IEFSTV9TM0MyNDEwX0NQVUZSRVEgaWYgQVJNX1MzQzI0WFhfQ1BVRlJFUQogCXNlbGVjdCBTM0MyNDEwX1BNIGlmIFBNCkBAIC0zOSw3ICs0MCw3IEBACiBjb25maWcgQ1BVX1MzQzI0MTIKIAlib29sICJTQU1TVU5HIFMzQzI0MTIiCiAJc2VsZWN0IENQVV9BUk05MjZUCi0Jc2VsZWN0IENQVV9MTFNFUklBTF9TM0MyNDQwCisJc2VsZWN0IFMzQzI0MTJfQ09NTU9OX0NMSwogCXNlbGVjdCBTM0MyNDEyX0RNQSBpZiBTM0MyNFhYX0RNQQogCXNlbGVjdCBTM0MyNDEyX1BNIGlmIFBNCiAJaGVscApAQCAtNDgsMTkgKzQ5LDE2IEBACiBjb25maWcgQ1BVX1MzQzI0MTYKIAlib29sICJTQU1TVU5HIFMzQzI0MTYvUzNDMjQ1MCIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKLQlzZWxlY3QgQ1BVX0xMU0VSSUFMX1MzQzI0NDAKIAlzZWxlY3QgUzNDMjQxNl9QTSBpZiBQTQotCXNlbGVjdCBTM0MyNDQzX0NPTU1PTgorCXNlbGVjdCBTM0MyNDQzX0NPTU1PTl9DTEsKIAlzZWxlY3QgUzNDMjQ0M19ETUEgaWYgUzNDMjRYWF9ETUEKLQlzZWxlY3QgU0FNU1VOR19DTEtTUkMKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgUzNDMjQxNiBTb0MgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCiAKIGNvbmZpZyBDUFVfUzNDMjQ0MAogCWJvb2wgIlNBTVNVTkcgUzNDMjQ0MCIKIAlzZWxlY3QgQ1BVX0FSTTkyMFQKLQlzZWxlY3QgQ1BVX0xMU0VSSUFMX1MzQzI0NDAKLQlzZWxlY3QgUzNDMjQxMF9DTE9DSworCXNlbGVjdCBTM0MyNDEwX0NPTU1PTl9DTEsKIAlzZWxlY3QgUzNDMjQxMF9QTSBpZiBQTQogCXNlbGVjdCBTM0MyNDQwX0RNQSBpZiBTM0MyNFhYX0RNQQogCWhlbHAKQEAgLTY5LDggKzY3LDcgQEAKIGNvbmZpZyBDUFVfUzNDMjQ0MgogCWJvb2wgIlNBTVNVTkcgUzNDMjQ0MiIKIAlzZWxlY3QgQ1BVX0FSTTkyMFQKLQlzZWxlY3QgQ1BVX0xMU0VSSUFMX1MzQzI0NDAKLQlzZWxlY3QgUzNDMjQxMF9DTE9DSworCXNlbGVjdCBTM0MyNDEwX0NPTU1PTl9DTEsKIAlzZWxlY3QgUzNDMjQxMF9ETUEgaWYgUzNDMjRYWF9ETUEKIAlzZWxlY3QgUzNDMjQxMF9QTSBpZiBQTQogCWhlbHAKQEAgLTg0LDI2ICs4MSwxMyBAQAogY29uZmlnIENQVV9TM0MyNDQzCiAJYm9vbCAiU0FNU1VORyBTM0MyNDQzIgogCXNlbGVjdCBDUFVfQVJNOTIwVAotCXNlbGVjdCBDUFVfTExTRVJJQUxfUzNDMjQ0MAotCXNlbGVjdCBTM0MyNDQzX0NPTU1PTgorCXNlbGVjdCBTM0MyNDQzX0NPTU1PTl9DTEsKIAlzZWxlY3QgUzNDMjQ0M19ETUEgaWYgUzNDMjRYWF9ETUEKLQlzZWxlY3QgU0FNU1VOR19DTEtTUkMKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgUzNDMjQ0MyBTb0MgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCiAKICMgY29tbW9uIGNvZGUKIAotY29uZmlnIFMzQzI0MTBfQ0xPQ0sKLQlib29sCi0JaGVscAotCSAgQ2xvY2sgY29kZSBmb3IgdGhlIFMzQzI0MTAsIGFuZCBzaW1pbGFyIHByb2Nlc3NvcnMgd2hpY2gKLQkgIGlzIGN1cnJlbnRseSBpbmNsdWRlcyB0aGUgUzNDMjQxMCwgUzNDMjQ0MCwgUzNDMjQ0Mi4KLQotY29uZmlnIFMzQzI0WFhfRENMSwotCWJvb2wKLQloZWxwCi0JICBDbG9jayBjb2RlIGZvciBzdXBwb3J0aW5nIERDTEsvQ0xLT1VUIG9uIFMzQzI0WFggYXJjaGl0ZWN0dXJlcwotCiBjb25maWcgUzNDMjRYWF9TTURLCiAJYm9vbAogCWhlbHAKQEAgLTE1OCwyOCArMTQyLDYgQEAKIAloZWxwCiAJICBQb3dlciBNYW5hZ2VtZW50IGNvZGUgY29tbW9uIHRvIFMzQzI0MTAgYW5kIGJldHRlcgogCi0jIGxvdy1sZXZlbCBzZXJpYWwgb3B0aW9uIG5vZGVzCi0KLWNvbmZpZyBDUFVfTExTRVJJQUxfUzNDMjQxMF9PTkxZCi0JYm9vbAotCWRlZmF1bHQgeSBpZiBDUFVfTExTRVJJQUxfUzNDMjQxMCAmJiAhQ1BVX0xMU0VSSUFMX1MzQzI0NDAKLQotY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDQwX09OTFkKLQlib29sCi0JZGVmYXVsdCB5IGlmIENQVV9MTFNFUklBTF9TM0MyNDQwICYmICFDUFVfTExTRVJJQUxfUzNDMjQxMAotCi1jb25maWcgQ1BVX0xMU0VSSUFMX1MzQzI0MTAKLQlib29sCi0JaGVscAotCSAgU2VsZWN0ZWQgaWYgdGhlcmUgaXMgYW4gUzNDMjQxMCAob3IgcmVnaXN0ZXIgY29tcGF0aWJsZSkgc2VyaWFsCi0JICBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gbmVlZGVkCi0KLWNvbmZpZyBDUFVfTExTRVJJQUxfUzNDMjQ0MAotCWJvb2wKLQloZWxwCi0JICBTZWxlY3RlZCBpZiB0aGVyZSBpcyBhbiBTM0MyNDQwIChvciByZWdpc3RlciBjb21wYXRpYmxlKSBzZXJpYWwKLQkgIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBuZWVkZWQKLQogY29uZmlnIFMzQzI0WFhfUExMCiAJYm9vbCAiU3VwcG9ydCBDUFVmcmVxIGNoYW5naW5nIG9mIFBMTCBmcmVxdWVuY3kgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBBUk1fUzNDMjRYWF9DUFVGUkVRCkBAIC0yNTgsOCArMjIwLDggQEAKIAlib29sICJTaW10ZWMgRWxlY3Ryb25pY3MgQkFTVCAoRUIyNDEwSVRYKSIKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IE1BQ0hfQkFTVF9JREUKKwlzZWxlY3QgUzNDMjQxMF9DT01NT05fRENMSwogCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIEFSTV9TM0MyNDEwX0NQVUZSRVEKLQlzZWxlY3QgUzNDMjRYWF9EQ0xLCiAJc2VsZWN0IFMzQzI0WFhfU0lNVEVDX05PUgogCXNlbGVjdCBTM0MyNFhYX1NJTVRFQ19QTSBpZiBQTQogCXNlbGVjdCBTM0MyNFhYX1NJTVRFQ19VU0IKQEAgLTM0MCw3ICszMDIsNyBAQAogY29uZmlnIE1BQ0hfVlIxMDAwCiAJYm9vbCAiVGhvcmNvbSBWUjEwMDAiCiAJc2VsZWN0IE1BQ0hfQkFTVF9JREUKLQlzZWxlY3QgUzNDMjRYWF9EQ0xLCisJc2VsZWN0IFMzQzI0MTBfQ09NTU9OX0RDTEsKIAlzZWxlY3QgUzNDMjRYWF9TSU1URUNfTk9SCiAJc2VsZWN0IFMzQzI0WFhfU0lNVEVDX1BNIGlmIFBNCiAJc2VsZWN0IFMzQzI0WFhfU0lNVEVDX1VTQgpAQCAtNTE5LDggKzQ4MSw4IEBACiBjb25maWcgTUFDSF9BTlVCSVMKIAlib29sICJTaW10ZWMgRWxlY3Ryb25pY3MgQU5VQklTIgogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KKwlzZWxlY3QgUzNDMjQxMF9DT01NT05fRENMSwogCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKLQlzZWxlY3QgUzNDMjRYWF9EQ0xLCiAJc2VsZWN0IFMzQzI0WFhfU0lNVEVDX1BNIGlmIFBNCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCkBAIC01NTgsOSArNTIwLDkgQEAKIAogY29uZmlnIE1BQ0hfT1NJUklTCiAJYm9vbCAiU2ltdGVjIElNMjQ0MEQyMCAoT1NJUklTKSBtb2R1bGUiCisJc2VsZWN0IFMzQzI0MTBfQ09NTU9OX0RDTEsKIAlzZWxlY3QgUzNDMjQxMF9JT1RJTUlORyBpZiBBUk1fUzNDMjQ0MF9DUFVGUkVRCiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xMjAwMDAwMAotCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgUzNDMjRYWF9TSU1URUNfUE0gaWYgUE0KIAlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKQEAgLTYyOSw5ICs1OTEsOSBAQAogCWJvb2wgIkhQIGlQQVEgcngxOTUwIgogCXNlbGVjdCBJMkMKIAlzZWxlY3QgUE1fSDE5NDAgaWYgUE0KKwlzZWxlY3QgUzNDMjQxMF9DT01NT05fRENMSwogCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIEFSTV9TM0MyNDQwX0NQVUZSRVEKIAlzZWxlY3QgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCi0Jc2VsZWN0IFMzQzI0WFhfRENMSwogCXNlbGVjdCBTM0MyNFhYX1BXTQogCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCkBAIC02NDEsMTIgKzYwMyw2IEBACiAKIGlmIENQVV9TM0MyNDQzIHx8IENQVV9TM0MyNDE2CiAKLWNvbmZpZyBTM0MyNDQzX0NPTU1PTgotCWJvb2wKLQloZWxwCi0JICBDb21tb24gY29kZSBmb3IgdGhlIFMzQzI0NDMgYW5kIHNpbWlsYXIgcHJvY2Vzc29ycywgd2hpY2ggaW5jbHVkZXMKLQkgIHRoZSBTM0MyNDE2IGFuZCBTM0MyNDUwLgotCiBjb25maWcgUzNDMjQ0M19ETUEKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IDdmNTRlNWIuLjIyMzVkMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvTWFrZWZpbGUKQEAgLTIxLDIyICsyMSwyMiBAQAogb2JqLSQoQ09ORklHX1MzQzI0MTBfUExMKQkrPSBwbGwtczNjMjQxMC5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9QTSkJKz0gcG0tczNjMjQxMC5vIHNsZWVwLXMzYzI0MTAubwogCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IHMzYzI0MTIubyBjbG9jay1zM2MyNDEyLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQxMikJKz0gczNjMjQxMi5vCiBvYmotJChDT05GSUdfUzNDMjQxMl9ETUEpCSs9IGRtYS1zM2MyNDEyLm8KIG9iai0kKENPTkZJR19TM0MyNDEyX1BNKQkrPSBwbS1zM2MyNDEyLm8KIG9iai0kKENPTkZJR19TM0MyNDEyX1BNX1NMRUVQKQkrPSBzbGVlcC1zM2MyNDEyLm8KIAotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDE2KQkrPSBzM2MyNDE2Lm8gY2xvY2stczNjMjQxNi5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTYpCSs9IHMzYzI0MTYubwogb2JqLSQoQ09ORklHX1MzQzI0MTZfUE0pCSs9IHBtLXMzYzI0MTYubwogCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0NDAubyBjbG9jay1zM2MyNDQwLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkJKz0gczNjMjQ0MC5vCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpCSs9IHMzYzI0NDIubwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDRYKQkrPSBzM2MyNDR4Lm8gY2xvY2stczNjMjQ0eC5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgubwogb2JqLSQoQ09ORklHX1MzQzI0NDBfRE1BKQkrPSBkbWEtczNjMjQ0MC5vCiBvYmotJChDT05GSUdfUzNDMjQ0MF9QTExfMTIwMDAwMDApICs9IHBsbC1zM2MyNDQwLTEyMDAwMDAwLm8KIG9iai0kKENPTkZJR19TM0MyNDQwX1BMTF8xNjkzNDQwMCkgKz0gcGxsLXMzYzI0NDAtMTY5MzQ0MDAubwogCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDMpCSs9IHMzYzI0NDMubyBjbG9jay1zM2MyNDQzLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MykJKz0gczNjMjQ0My5vCiAKICMgUE0KIApAQCAtNDQsMTYgKzQ0LDEzIEBACiAKICMgY29tbW9uIGNvZGUKIAotb2JqLSQoQ09ORklHX1MzQzI0WFhfRENMSykJKz0gY2xvY2stZGNsay5vCiBvYmotJChDT05GSUdfUzNDMjRYWF9ETUEpCSs9IGRtYS5vCiAKLW9iai0kKENPTkZJR19TM0MyNDEwX0NMT0NLKQkrPSBjbG9jay1zM2MyNDEwLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX0NQVUZSRVFfVVRJTFMpICs9IGNwdWZyZXEtdXRpbHMubwogCiBvYmotJChDT05GSUdfUzNDMjQxMF9JT1RJTUlORykJKz0gaW90aW1pbmctczNjMjQxMC5vCiBvYmotJChDT05GSUdfUzNDMjQxMl9JT1RJTUlORykJKz0gaW90aW1pbmctczNjMjQxMi5vCiAKLW9iai0kKENPTkZJR19TM0MyNDQzX0NPTU1PTikJKz0gY29tbW9uLXMzYzI0NDMubwogb2JqLSQoQ09ORklHX1MzQzI0NDNfRE1BKQkrPSBkbWEtczNjMjQ0My5vCiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1kY2xrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY2xvY2stZGNsay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWRkOWIyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1kY2xrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFMzQzI0WFggLSBkZWZpbml0aW9ucyBmb3IgRENMSyBhbmQgQ0xLT1VUIHJlZ2lzdGVycwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLS8qIGNsb2NrcyB0aGF0IGNvdWxkIGJlIHJlZ2lzdGVyZWQgYnkgZXh0ZXJuYWwgY29kZSAqLwotCi1zdGF0aWMgaW50IHMzYzI0eHhfZGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGxvbmcgZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7Ci0KLQlpZiAoZW5hYmxlKQotCQlkY2xrY29uIHw9IGNsay0+Y3RybGJpdDsKLQllbHNlCi0JCWRjbGtjb24gJj0gfmNsay0+Y3RybGJpdDsKLQotCV9fcmF3X3dyaXRlbChkY2xrY29uLCBTM0MyNFhYX0RDTEtDT04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjR4eF9kY2xrX3NldHBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGRjbGtjb247Ci0JdW5zaWduZWQgaW50IHVjbGs7Ci0KLQlpZiAocGFyZW50ID09ICZjbGtfdXBsbCkKLQkJdWNsayA9IDE7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKLQkJdWNsayA9IDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7Ci0KLQlpZiAoY2xrLT5jdHJsYml0ID09IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOKSB7Ci0JCWlmICh1Y2xrKQotCQkJZGNsa2NvbiB8PSBTM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSzsKLQkJZWxzZQotCQkJZGNsa2NvbiAmPSB+UzNDMjQxMF9EQ0xLQ09OX0RDTEswX1VDTEs7Ci0JfSBlbHNlIHsKLQkJaWYgKHVjbGspCi0JCQlkY2xrY29uIHw9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLOwotCQllbHNlCi0JCQlkY2xrY29uICY9IH5TM0MyNDEwX0RDTEtDT05fRENMSzFfVUNMSzsKLQl9Ci0KLQlfX3Jhd193cml0ZWwoZGNsa2NvbiwgUzNDMjRYWF9EQ0xLQ09OKTsKLQotCXJldHVybiAwOwotfQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjR4eF9jYWxjX2RpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGRpdjsKLQotCWlmICgocmF0ZSA9PSAwKSB8fCAhY2xrLT5wYXJlbnQpCi0JCXJldHVybiAwOwotCi0JZGl2ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIHJhdGU7Ci0JaWYgKGRpdiA8IDIpCi0JCWRpdiA9IDI7Ci0JZWxzZSBpZiAoZGl2ID4gMTYpCi0JCWRpdiA9IDE2OwotCi0JcmV0dXJuIGRpdjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjR4eF9yb3VuZF9kY2xrX3JhdGUoc3RydWN0IGNsayAqY2xrLAotCXVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGRpdiA9IHMzYzI0eHhfY2FsY19kaXYoY2xrLCByYXRlKTsKLQotCWlmIChkaXYgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBzM2MyNHh4X3NldF9kY2xrX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrLCBkYXRhLCBkaXYgPSBzM2MyNHh4X2NhbGNfZGl2KGNsaywgcmF0ZSk7Ci0KLQlpZiAoZGl2ID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNsayA9PSAmczNjMjR4eF9kY2xrMCkgewotCQltYXNrID0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVl9NQVNLIHwKLQkJCVMzQzI0MTBfRENMS0NPTl9EQ0xLMF9DTVBfTUFTSzsKLQkJZGF0YSA9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMF9ESVYoZGl2KSB8Ci0JCQlTM0MyNDEwX0RDTEtDT05fRENMSzBfQ01QKChkaXYgKyAxKSAvIDIpOwotCX0gZWxzZSBpZiAoY2xrID09ICZzM2MyNHh4X2RjbGsxKSB7Ci0JCW1hc2sgPSBTM0MyNDEwX0RDTEtDT05fRENMSzFfRElWX01BU0sgfAotCQkJUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUF9NQVNLOwotCQlkYXRhID0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0RJVihkaXYpIHwKLQkJCVMzQzI0MTBfRENMS0NPTl9EQ0xLMV9DTVAoKGRpdiArIDEpIC8gMik7Ci0JfSBlbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKLQlfX3Jhd193cml0ZWwoKChfX3Jhd19yZWFkbChTM0MyNFhYX0RDTEtDT04pICYgfm1hc2spIHwgZGF0YSksCi0JCVMzQzI0WFhfRENMS0NPTik7Ci0JcmV0dXJuIGNsay0+cmF0ZTsKLX0KLXN0YXRpYyBpbnQgczNjMjR4eF9jbGtvdXRfc2V0cGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1bnNpZ25lZCBsb25nIHNvdXJjZTsKLQotCS8qIGNhbGN1bGF0ZSB0aGUgTUlTQ0NSIHNldHRpbmcgZm9yIHRoZSBjbG9jayAqLwotCi0JaWYgKHBhcmVudCA9PSAmY2xrX21wbGwpCi0JCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfTVBMTDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa191cGxsKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX1VQTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfZikKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9GQ0xLOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2gpCi0JCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfSENMSzsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19wKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX1BDTEs7Ci0JZWxzZSBpZiAoY2xrID09ICZzM2MyNHh4X2Nsa291dDAgJiYgcGFyZW50ID09ICZzM2MyNHh4X2RjbGswKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0RDTEswOwotCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQxICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMSkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9EQ0xLMDsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0KLQlpZiAoY2xrID09ICZzM2MyNHh4X2Nsa291dDApCi0JCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0s7Ci0JZWxzZSB7Ci0JCXNvdXJjZSA8PD0gNDsKLQkJbWFzayA9IFMzQzI0MTBfTUlTQ0NSX0NMSzFfTUFTSzsKLQl9Ci0KLQlzM2MyNDEwX21vZGlmeV9taXNjY3IobWFzaywgc291cmNlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogZXh0ZXJuYWwgY2xvY2sgZGVmaW5pdGlvbnMgKi8KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIGRjbGtfb3BzID0gewotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9kY2xrX3NldHBhcmVudCwKLQkuc2V0X3JhdGUJPSBzM2MyNHh4X3NldF9kY2xrX3JhdGUsCi0JLnJvdW5kX3JhdGUJPSBzM2MyNHh4X3JvdW5kX2RjbGtfcmF0ZSwKLX07Ci0KLXN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMCA9IHsKLQkubmFtZQkJPSAiZGNsazAiLAotCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4sCi0JLmVuYWJsZQkgICAgICAgID0gczNjMjR4eF9kY2xrX2VuYWJsZSwKLQkub3BzCQk9ICZkY2xrX29wcywKLX07Ci0KLXN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMSA9IHsKLQkubmFtZQkJPSAiZGNsazEiLAotCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxRU4sCi0JLmVuYWJsZQkJPSBzM2MyNHh4X2RjbGtfZW5hYmxlLAotCS5vcHMJCT0gJmRjbGtfb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa291dF9vcHMgPSB7Ci0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCi19OwotCi1zdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MCA9IHsKLQkubmFtZQkJPSAiY2xrb3V0MCIsCi0JLm9wcwkJPSAmY2xrb3V0X29wcywKLX07Ci0KLXN0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQxID0gewotCS5uYW1lCQk9ICJjbGtvdXQxIiwKLQkub3BzCQk9ICZjbGtvdXRfb3BzLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY2xvY2stczNjMjQxMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWFmY2Y5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDEwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDEwLFMzQzI0NDAsUzNDMjQ0MiBDbG9jayBjb250cm9sIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zM2MuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLQotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotCi1pbnQgczNjMjQxMF9jbGtjb25fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5jdHJsYml0OwotCXVuc2lnbmVkIGxvbmcgY2xrY29uOwotCi0JY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOwotCi0JaWYgKGVuYWJsZSkKLQkJY2xrY29uIHw9IGNsb2NrczsKLQllbHNlCi0JCWNsa2NvbiAmPSB+Y2xvY2tzOwotCi0JLyogZW5zdXJlIG5vbmUgb2YgdGhlIHNwZWNpYWwgZnVuY3Rpb24gYml0cyBzZXQgKi8KLQljbGtjb24gJj0gfihTM0MyNDEwX0NMS0NPTl9JRExFfFMzQzI0MTBfQ0xLQ09OX1BPV0VSKTsKLQotCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0MTBfQ0xLQ09OKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTBfdXBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGxvbmcgY2xrc2xvdyA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLU0xPVyk7Ci0JdW5zaWduZWQgbG9uZyBvcmlnID0gY2xrc2xvdzsKLQotCWlmIChlbmFibGUpCi0JCWNsa3Nsb3cgJj0gflMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRjsKLQllbHNlCi0JCWNsa3Nsb3cgfD0gUzNDMjQxMF9DTEtTTE9XX1VDTEtfT0ZGOwotCi0JX19yYXdfd3JpdGVsKGNsa3Nsb3csIFMzQzI0MTBfQ0xLU0xPVyk7Ci0KLQkvKiBpZiB3ZSBzdGFydGVkIHRoZSBVUExMLCB0aGVuIGFsbG93IHRvIHNldHRsZSAqLwotCi0JaWYgKGVuYWJsZSAmJiAob3JpZyAmIFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRikpCi0JCXVkZWxheSgyMDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHN0YW5kYXJkIGNsb2NrIGRlZmluaXRpb25zICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzX29mZltdID0gewotCXsKLQkJLm5hbWUJCT0gIm5hbmQiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fTkFORCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJzZGkiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fU0RJLAotCX0sIHsKLQkJLm5hbWUJCT0gImFkYyIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9BREMsCi0JfSwgewotCQkubmFtZQkJPSAiaTJjIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0lJQywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJpaXMiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fSUlTLAotCX0sIHsKLQkJLm5hbWUJCT0gInNwaSIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9TUEksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2xjZCA9IHsKLQkubmFtZQkJPSAibGNkIiwKLQkucGFyZW50CQk9ICZjbGtfaCwKLQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0xDREMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfZ3BpbyA9IHsKLQkubmFtZQkJPSAiZ3BpbyIsCi0JLnBhcmVudAkJPSAmY2xrX3AsCi0JLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9HUElPLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VzYl9ob3N0ID0gewotCS5uYW1lCQk9ICJ1c2ItaG9zdCIsCi0JLnBhcmVudAkJPSAmY2xrX2gsCi0JLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JILAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInVzYi1kZXZpY2UiLAotCS5wYXJlbnQJCT0gJmNsa19oLAotCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVVNCRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW1lcnMgPSB7Ci0JLm5hbWUJCT0gInRpbWVycyIsCi0JLnBhcmVudAkJPSAmY2xrX3AsCi0JLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9QV01ULAotfTsKLQotc3RydWN0IGNsayBzM2MyNHh4X2Nsa191YXJ0MCA9IHsKLQkubmFtZQkJPSAidWFydCIsCi0JLmRldm5hbWUJPSAiczNjMjQxMC11YXJ0LjAiLAotCS5wYXJlbnQJCT0gJmNsa19wLAotCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDAsCi19OwotCi1zdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrX3VhcnQxID0gewotCS5uYW1lCQk9ICJ1YXJ0IiwKLQkuZGV2bmFtZQk9ICJzM2MyNDEwLXVhcnQuMSIsCi0JLnBhcmVudAkJPSAmY2xrX3AsCi0JLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VQVJUMSwKLX07Ci0KLXN0cnVjdCBjbGsgczNjMjR4eF9jbGtfdWFydDIgPSB7Ci0JLm5hbWUJCT0gInVhcnQiLAotCS5kZXZuYW1lCT0gInMzYzI0MTAtdWFydC4yIiwKLQkucGFyZW50CQk9ICZjbGtfcCwKLQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1VBUlQyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3J0YyA9IHsKLQkubmFtZQkJPSAicnRjIiwKLQkucGFyZW50CQk9ICZjbGtfcCwKLQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1JUQywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa193YXRjaGRvZyA9IHsKLQkubmFtZQkJPSAid2F0Y2hkb2ciLAotCS5wYXJlbnQJCT0gJmNsa19wLAotCS5jdHJsYml0CT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191c2JfYnVzX2hvc3QgPSB7Ci0JLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCi0JLnBhcmVudAkJPSAmY2xrX3VzYl9idXMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfdXNiX2J1c19nYWRnZXQgPSB7Ci0JLm5hbWUJCT0gInVzYi1idXMtZ2FkZ2V0IiwKLQkucGFyZW50CQk9ICZjbGtfdXNiX2J1cywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICppbml0X2Nsb2Nrc1tdID0gewotCSZjbGtfbGNkLAotCSZjbGtfZ3BpbywKLQkmY2xrX3VzYl9ob3N0LAotCSZjbGtfdXNiX2RldmljZSwKLQkmY2xrX3RpbWVycywKLQkmczNjMjR4eF9jbGtfdWFydDAsCi0JJnMzYzI0eHhfY2xrX3VhcnQxLAotCSZzM2MyNHh4X2Nsa191YXJ0MiwKLQkmY2xrX3J0YywKLQkmY2xrX3dhdGNoZG9nLAotCSZjbGtfdXNiX2J1c19ob3N0LAotCSZjbGtfdXNiX2J1c19nYWRnZXQsCi19OwotCi0vKiBzM2MyNDEwX2Jhc2VjbGtfYWRkKCkKLSAqCi0gKiBBZGQgYWxsIHRoZSBjbG9ja3MgdXNlZCBieSB0aGUgczNjMjQxMCBvciBjb21wYXRpYmxlIENQVXMKLSAqIHN1Y2ggYXMgdGhlIFMzQzI0NDAgYW5kIFMzQzI0NDIuCi0gKgotICogV2UgY2Fubm90IHVzZSBhIHN5c3RlbSBkZXZpY2UgYXMgd2UgYXJlIG5lZWRlZCBiZWZvcmUgYW55Ci0gKiBvZiB0aGUgaW5pdC1jYWxscyB0aGF0IGluaXRpYWxpc2UgdGhlIGRldmljZXMgYXJlIGFjdHVhbGx5Ci0gKiBkb25lLgotKi8KLQotaW50IF9faW5pdCBzM2MyNDEwX2Jhc2VjbGtfYWRkKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtzbG93ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtTTE9XKTsKLQl1bnNpZ25lZCBsb25nIGNsa2NvbiAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7Ci0Jc3RydWN0IGNsayAqeHRhbDsKLQlpbnQgcmV0OwotCWludCBwdHI7Ci0KLQljbGtfdXBsbC5lbmFibGUgPSBzM2MyNDEwX3VwbGxfZW5hYmxlOwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa191c2JfYnVzKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVzYiBidXMgY2xvY2tcbiIpOwotCi0JLyogcmVnaXN0ZXIgY2xvY2tzIGZyb20gY2xvY2sgYXJyYXkgKi8KLQotCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrKSB7Ci0JCXN0cnVjdCBjbGsgKmNsa3AgPSBpbml0X2Nsb2Nrc1twdHJdOwotCi0JCS8qIGVuc3VyZSB0aGF0IHdlIG5vdGUgdGhlIGNsb2NrIHN0YXRlICovCi0KLQkJY2xrcC0+dXNhZ2UgPSBjbGtjb24gJiBjbGtwLT5jdHJsYml0ID8gMSA6IDA7Ci0KLQkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCi0JCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKLQkJfQotCX0KLQotCS8qIFdlIG11c3QgYmUgY2FyZWZ1bCBkaXNhYmxpbmcgdGhlIGNsb2NrcyB3ZSBhcmUgbm90IGludGVuZGluZyB0bwotCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3lzdGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KLQkgKiB0aGVpciBvd24gRE1BIHJlcXVlc3RzIHRvIHRoZSBidXMgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gbG9ja3VwCi0JICogaWYgdGhleSB3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHJlcXVlc3RpbmcgYnVzIGFjY2Vzcy4KLQkgKgotCSAqIERpc2FibGluZyB0aGUgTENEIGNsb2NrIGlmIHRoZSBMQ0QgaXMgYWN0aXZlIGlzIHZlcnkgZGFuZ2Vyb3VzLAotCSAqIGFuZCB0aGVyZWZvcmUgdGhlIGJvb3Rsb2FkZXIgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbm90IGVuYWJsZQotCSAqIHRoZSBMQ0QgY2xvY2sgaWYgaXQgaXMgbm90IG5lZWRlZC4KLQkqLwotCi0JLyogaW5zdGFsbCAoYW5kIGRpc2FibGUpIHRoZSBjbG9ja3Mgd2UgZG8gbm90IG5lZWQgaW1tZWRpYXRlbHkgKi8KLQotCXMzY19yZWdpc3Rlcl9jbG9ja3MoaW5pdF9jbG9ja3Nfb2ZmLCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX29mZikpOwotCXMzY19kaXNhYmxlX2Nsb2Nrcyhpbml0X2Nsb2Nrc19vZmYsIEFSUkFZX1NJWkUoaW5pdF9jbG9ja3Nfb2ZmKSk7Ci0KLQkvKiBzaG93IHRoZSBjbG9jay1zbG93IHZhbHVlICovCi0KLQl4dGFsID0gY2xrX2dldChOVUxMLCAieHRhbCIpOwotCi0JcHJpbnRrKCJDTE9DSzogU2xvdyBtb2RlICglbGQuJWxkIE1IeiksICVzLCBNUExMICVzLCBVUExMICVzXG4iLAotCSAgICAgICBwcmludF9taHooY2xrX2dldF9yYXRlKHh0YWwpIC8KLQkJCSAoIDIgKiBTM0MyNDEwX0NMS1NMT1dfR0VUX1NMT1dWQUwoY2xrc2xvdykpKSwKLQkgICAgICAgKGNsa3Nsb3cgJiBTM0MyNDEwX0NMS1NMT1dfU0xPVykgPyAic2xvdyIgOiAiZmFzdCIsCi0JICAgICAgIChjbGtzbG93ICYgUzNDMjQxMF9DTEtTTE9XX01QTExfT0ZGKSA/ICJvZmYiIDogIm9uIiwKLQkgICAgICAgKGNsa3Nsb3cgJiBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYpID8gIm9mZiIgOiAib24iKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2Nsb2NrLXMzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDEyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MmE1YjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2Nsb2NrLXMzYzI0MTIuYworKysgL2Rldi9udWxsCkBAIC0xLDc2MCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDEyLFMzQzI0MTMgQ2xvY2sgY29udHJvbCBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfczNjLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotLyogV2UgY3VycmVudGx5IGhhdmUgdG8gYXNzdW1lIHRoYXQgdGhlIHN5c3RlbSBpcyBydW5uaW5nCi0gKiBmcm9tIHRoZSBYVFBsbCBpbnB1dCwgYW5kIHRoYXQgYWxsICoqKlJFRkNMS3MgYXJlIGJlaW5nCi0gKiBmZWQgZnJvbSBpdCwgYXMgd2UgY2Fubm90IHJlYWQgdGhlIHN0YXRlIG9mIE9NWzRdIGZyb20KLSAqIHNvZnR3YXJlLgotICoKLSAqIEl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciBlYWNoIGJvYXJkIGluaXRpYWxpc2F0aW9uIHRvCi0gKiBzZXQgdGhlIGNvcnJlY3QgbXV4aW5nIGF0IGluaXRpYWxpc2F0aW9uCi0qLwotCi1zdGF0aWMgaW50IHMzYzI0MTJfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCi17Ci0JdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y3RybGJpdDsKLQl1bnNpZ25lZCBsb25nIGNsa2NvbjsKLQotCWNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLQ09OKTsKLQotCWlmIChlbmFibGUpCi0JCWNsa2NvbiB8PSBjbG9ja3M7Ci0JZWxzZQotCQljbGtjb24gJj0gfmNsb2NrczsKLQotCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0MTBfQ0xLQ09OKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfdXBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGxvbmcgdXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVVBMTENPTik7Ci0JdW5zaWduZWQgbG9uZyBvcmlnID0gdXBsbGNvbjsKLQotCWlmICghZW5hYmxlKQotCQl1cGxsY29uIHw9IFMzQzI0MTJfUExMQ09OX09GRjsKLQllbHNlCi0JCXVwbGxjb24gJj0gflMzQzI0MTJfUExMQ09OX09GRjsKLQotCV9fcmF3X3dyaXRlbCh1cGxsY29uLCBTM0MyNDEwX1VQTExDT04pOwotCi0JLyogYWxsb3cgfjE1MHVTIGZvciB0aGUgUExMIHRvIHNldHRsZSBhbmQgbG9jayAqLwotCi0JaWYgKGVuYWJsZSAmJiAob3JpZyAmIFMzQzI0MTJfUExMQ09OX09GRikpCi0JCXVkZWxheSgxNTApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGNsb2NrIHNlbGVjdGlvbnMgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2VyZWZjbGsgPSB7Ci0JLm5hbWUJCT0gImVyZWZjbGsiLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VyZWZjbGsgPSB7Ci0JLm5hbWUJCT0gInVyZWZjbGsiLAotfTsKLQotc3RhdGljIGludCBzM2MyNDEyX3NldHBhcmVudF91c3lzY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2xrc3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMl9DTEtTUkMpOwotCi0JaWYgKHBhcmVudCA9PSAmY2xrX3VyZWZjbGspCi0JCWNsa3NyYyAmPSB+UzNDMjQxMl9DTEtTUkNfVVNZU0NMS19VUExMOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX3VwbGwpCi0JCWNsa3NyYyB8PSBTM0MyNDEyX0NMS1NSQ19VU1lTQ0xLX1VQTEw7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQxMl9DTEtTUkMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfdXN5c2NsayA9IHsKLQkubmFtZQkJPSAidXN5c2NsayIsCi0JLnBhcmVudAkJPSAmY2xrX3h0YWwsCi0JLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7Ci0JCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfdXN5c2NsaywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX21yZWZjbGsgPSB7Ci0JLm5hbWUJCT0gIm1yZWZjbGsiLAotCS5wYXJlbnQJCT0gJmNsa194dGFsLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX21kaXZjbGsgPSB7Ci0JLm5hbWUJCT0gIm1kaXZjbGsiLAotCS5wYXJlbnQJCT0gJmNsa194dGFsLAotfTsKLQotc3RhdGljIGludCBzM2MyNDEyX3NldHBhcmVudF91c2JzcmMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEyX0NMS1NSQyk7Ci0KLQlpZiAocGFyZW50ID09ICZjbGtfdXN5c2NsaykKLQkJY2xrc3JjICY9IH5TM0MyNDEyX0NMS1NSQ19VU0JDTEtfSENMSzsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQotCQljbGtzcmMgfD0gUzNDMjQxMl9DTEtTUkNfVVNCQ0xLX0hDTEs7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQxMl9DTEtTUkMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDEyX3JvdW5kcmF0ZV91c2JzcmMoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JaW50IGRpdjsKLQotCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCi0JCXJldHVybiBwYXJlbnRfcmF0ZTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQlpZiAoZGl2ID4gMikKLQkJZGl2ID0gMjsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQxMl9nZXRyYXRlX3VzYnNyYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKChkaXYgJiBTM0MyNDEyX0NMS0RJVk5fVVNCNDhESVYpID8gMiA6IDEpOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfc2V0cmF0ZV91c2JzcmMoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKLQotCXJhdGUgPSBzM2MyNDEyX3JvdW5kcmF0ZV91c2JzcmMoY2xrLCByYXRlKTsKLQotCWlmICgocGFyZW50X3JhdGUgLyByYXRlKSA9PSAyKQotCQljbGtkaXZuIHw9IFMzQzI0MTJfQ0xLRElWTl9VU0I0OERJVjsKLQllbHNlCi0JCWNsa2Rpdm4gJj0gflMzQzI0MTJfQ0xLRElWTl9VU0I0OERJVjsKLQotCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDEwX0NMS0RJVk4pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfdXNic3JjID0gewotCS5uYW1lCQk9ICJ1c2JzcmMiLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuZ2V0X3JhdGUJPSBzM2MyNDEyX2dldHJhdGVfdXNic3JjLAotCQkuc2V0X3JhdGUJPSBzM2MyNDEyX3NldHJhdGVfdXNic3JjLAotCQkucm91bmRfcmF0ZQk9IHMzYzI0MTJfcm91bmRyYXRlX3VzYnNyYywKLQkJLnNldF9wYXJlbnQJPSBzM2MyNDEyX3NldHBhcmVudF91c2JzcmMsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9zZXRwYXJlbnRfbXN5c2NsayhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0MTJfQ0xLU1JDKTsKLQotCWlmIChwYXJlbnQgPT0gJmNsa19tZGl2Y2xrKQotCQljbGtzcmMgJj0gflMzQzI0MTJfQ0xLU1JDX01TWVNDTEtfTVBMTDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19tcGxsKQotCQljbGtzcmMgfD0gUzNDMjQxMl9DTEtTUkNfTVNZU0NMS19NUExMOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbGstPnBhcmVudCA9IHBhcmVudDsKLQotCV9fcmF3X3dyaXRlbChjbGtzcmMsIFMzQzI0MTJfQ0xLU1JDKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX21zeXNjbGsgPSB7Ci0JLm5hbWUJCT0gIm1zeXNjbGsiLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X21zeXNjbGssCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9zZXRwYXJlbnRfYXJtY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXY7Ci0JdW5zaWduZWQgbG9uZyBkdnM7Ci0KLQkvKiBOb3RlLCB3ZSBjdXJyZW50IGVxdWF0ZSBmY2xrIGFuZGYgbXN5c2NsayBmb3IgUzNDMjQxMiAqLwotCi0JaWYgKHBhcmVudCA9PSAmY2xrX21zeXNjbGsgfHwgcGFyZW50ID09ICZjbGtfZikKLQkJZHZzID0gMDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQotCQlkdnMgPSBTM0MyNDEyX0NMS0RJVk5fRFZTRU47Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JLyogdXBkYXRlIHRoaXMgdW5kZXIgaXJxIGxvY2tkb3duLCBjbGtkaXZuIGlzIG5vdCBwcm90ZWN0ZWQKLQkgKiBieSB0aGUgY2xvY2sgc3lzdGVtLiAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JY2xrZGl2ICA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7Ci0JY2xrZGl2ICY9IH5TM0MyNDEyX0NMS0RJVk5fRFZTRU47Ci0JY2xrZGl2IHw9IGR2czsKLQlfX3Jhd193cml0ZWwoY2xrZGl2LCBTM0MyNDEwX0NMS0RJVk4pOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19hcm1jbGsgPSB7Ci0JLm5hbWUJCT0gImFybWNsayIsCi0JLnBhcmVudAkJPSAmY2xrX21zeXNjbGssCi0JLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7Ci0JCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfYXJtY2xrLAotCX0sCi19OwotCi0vKiB0aGVzZSBuZXh0IGNsb2NrcyBoYXZlIGFuIGRpdmlkZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlbSwKLSAqIHNvIHdlIGNhbiByZWdpc3RlciB0aGVtIHdpdGggdGhlaXIgZGl2aWRlciBhbmQgbGVhdmUgb3V0IHRoZQotICogaW50ZXJtZWRpYXRlIGNsb2NrIHN0YWdlCi0qLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQxMl9yb3VuZHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWludCBkaXY7Ci0KLQlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQotCQlyZXR1cm4gcGFyZW50X3JhdGU7Ci0KLQkvKiBub3RlLCB3ZSByZW1vdmUgdGhlICsvLSAxIGNhbGN1bGF0aW9ucyBhcyB0aGV5IGNhbmNlbCBvdXQgKi8KLQotCWRpdiA9IChyYXRlIC8gcGFyZW50X3JhdGUpOwotCi0JaWYgKGRpdiA8IDEpCi0JCWRpdiA9IDE7Ci0JZWxzZSBpZiAoZGl2ID4gMTYpCi0JCWRpdiA9IDE2OwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfc2V0cGFyZW50X3VhcnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEyX0NMS1NSQyk7Ci0KLQlpZiAocGFyZW50ID09ICZjbGtfZXJlZmNsaykKLQkJY2xrc3JjICY9IH5TM0MyNDEyX0NMS1NSQ19VQVJUQ0xLX01QTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfbXBsbCkKLQkJY2xrc3JjIHw9IFMzQzI0MTJfQ0xLU1JDX1VBUlRDTEtfTVBMTDsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0KLQlfX3Jhd193cml0ZWwoY2xrc3JjLCBTM0MyNDEyX0NMS1NSQyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0MTJfZ2V0cmF0ZV91YXJ0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7Ci0KLQlkaXYgJj0gUzNDMjQxMl9DTEtESVZOX1VBUlRESVZfTUFTSzsKLQlkaXYgPj49IFMzQzI0MTJfQ0xLRElWTl9VQVJURElWX1NISUZUOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfc2V0cmF0ZV91YXJ0KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7Ci0KLQlyYXRlID0gczNjMjQxMl9yb3VuZHJhdGVfY2xrc3JjKGNsaywgcmF0ZSk7Ci0KLQljbGtkaXZuICY9IH5TM0MyNDEyX0NMS0RJVk5fVUFSVERJVl9NQVNLOwotCWNsa2Rpdm4gfD0gKChwYXJlbnRfcmF0ZSAvIHJhdGUpIC0gMSkgPDwgUzNDMjQxMl9DTEtESVZOX1VBUlRESVZfU0hJRlQ7Ci0KLQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQxMF9DTEtESVZOKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQgPSB7Ci0JLm5hbWUJCT0gInVhcnRjbGsiLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuZ2V0X3JhdGUJPSBzM2MyNDEyX2dldHJhdGVfdWFydCwKLQkJLnNldF9yYXRlCT0gczNjMjQxMl9zZXRyYXRlX3VhcnQsCi0JCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfdWFydCwKLQkJLnJvdW5kX3JhdGUJPSBzM2MyNDEyX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9zZXRwYXJlbnRfaTJzKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2xrc3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMl9DTEtTUkMpOwotCi0JaWYgKHBhcmVudCA9PSAmY2xrX2VyZWZjbGspCi0JCWNsa3NyYyAmPSB+UzNDMjQxMl9DTEtTUkNfSTJTQ0xLX01QTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfbXBsbCkKLQkJY2xrc3JjIHw9IFMzQzI0MTJfQ0xLU1JDX0kyU0NMS19NUExMOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbGstPnBhcmVudCA9IHBhcmVudDsKLQotCV9fcmF3X3dyaXRlbChjbGtzcmMsIFMzQzI0MTJfQ0xLU1JDKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQxMl9nZXRyYXRlX2kycyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCi0JZGl2ICY9IFMzQzI0MTJfQ0xLRElWTl9JMlNESVZfTUFTSzsKLQlkaXYgPj49IFMzQzI0MTJfQ0xLRElWTl9JMlNESVZfU0hJRlQ7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICsgMSk7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9zZXRyYXRlX2kycyhzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsa2Rpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCi0JcmF0ZSA9IHMzYzI0MTJfcm91bmRyYXRlX2Nsa3NyYyhjbGssIHJhdGUpOwotCi0JY2xrZGl2biAmPSB+UzNDMjQxMl9DTEtESVZOX0kyU0RJVl9NQVNLOwotCWNsa2Rpdm4gfD0gKChwYXJlbnRfcmF0ZSAvIHJhdGUpIC0gMSkgPDwgUzNDMjQxMl9DTEtESVZOX0kyU0RJVl9TSElGVDsKLQotCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDEwX0NMS0RJVk4pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzID0gewotCS5uYW1lCQk9ICJpMnNjbGsiLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuZ2V0X3JhdGUJPSBzM2MyNDEyX2dldHJhdGVfaTJzLAotCQkuc2V0X3JhdGUJPSBzM2MyNDEyX3NldHJhdGVfaTJzLAotCQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X2kycywKLQkJLnJvdW5kX3JhdGUJPSBzM2MyNDEyX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9zZXRwYXJlbnRfY2FtKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2xrc3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMl9DTEtTUkMpOwotCi0JaWYgKHBhcmVudCA9PSAmY2xrX3VzeXNjbGspCi0JCWNsa3NyYyAmPSB+UzNDMjQxMl9DTEtTUkNfQ0FNQ0xLX0hDTEs7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfaCkKLQkJY2xrc3JjIHw9IFMzQzI0MTJfQ0xLU1JDX0NBTUNMS19IQ0xLOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbGstPnBhcmVudCA9IHBhcmVudDsKLQotCV9fcmF3X3dyaXRlbChjbGtzcmMsIFMzQzI0MTJfQ0xLU1JDKTsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0MTJfZ2V0cmF0ZV9jYW0oc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKLQotCWRpdiAmPSBTM0MyNDEyX0NMS0RJVk5fQ0FNRElWX01BU0s7Ci0JZGl2ID4+PSBTM0MyNDEyX0NMS0RJVk5fQ0FNRElWX1NISUZUOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfc2V0cmF0ZV9jYW0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKLQotCXJhdGUgPSBzM2MyNDEyX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlKTsKLQotCWNsa2Rpdm4gJj0gflMzQzI0MTJfQ0xLRElWTl9DQU1ESVZfTUFTSzsKLQljbGtkaXZuIHw9ICgocGFyZW50X3JhdGUgLyByYXRlKSAtIDEpIDw8IFMzQzI0MTJfQ0xLRElWTl9DQU1ESVZfU0hJRlQ7Ci0KLQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQxMF9DTEtESVZOKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2NhbSA9IHsKLQkubmFtZQkJPSAiY2FtaWYtdXBsbCIsCS8qIHNhbWUgYXMgMjQ0MCBuYW1lICovCi0JLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7Ci0JCS5nZXRfcmF0ZQk9IHMzYzI0MTJfZ2V0cmF0ZV9jYW0sCi0JCS5zZXRfcmF0ZQk9IHMzYzI0MTJfc2V0cmF0ZV9jYW0sCi0JCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfY2FtLAotCQkucm91bmRfcmF0ZQk9IHMzYzI0MTJfcm91bmRyYXRlX2Nsa3NyYywKLQl9LAotfTsKLQotLyogc3RhbmRhcmQgY2xvY2sgZGVmaW5pdGlvbnMgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0gewotCXsKLQkJLm5hbWUJCT0gIm5hbmQiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fTkFORCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJzZGkiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fU0RJLAotCX0sIHsKLQkJLm5hbWUJCT0gImFkYyIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9BREMsCi0JfSwgewotCQkubmFtZQkJPSAiaTJjIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMl9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTJfQ0xLQ09OX0lJQywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJpaXMiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fSUlTLAotCX0sIHsKLQkJLm5hbWUJCT0gInNwaSIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9TUEksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJkbWEuMCIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9ETUEwLAotCX0sIHsKLQkJLm5hbWUJCT0gImRtYS4xIiwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JCS5lbmFibGUJCT0gczNjMjQxMl9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTJfQ0xLQ09OX0RNQTEsCi0JfSwgewotCQkubmFtZQkJPSAiZG1hLjIiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fRE1BMiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJkbWEuMyIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9ETUEzLAotCX0sIHsKLQkJLm5hbWUJCT0gImxjZCIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9MQ0RDLAotCX0sIHsKLQkJLm5hbWUJCT0gImdwaW8iLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fR1BJTywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ1c2ItaG9zdCIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9VU0JILAotCX0sIHsKLQkJLm5hbWUJCT0gInVzYi1kZXZpY2UiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fVVNCRCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ0aW1lcnMiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fUFdNVCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ1YXJ0IiwKLQkJLmRldm5hbWUJPSAiczNjMjQxMi11YXJ0LjAiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fVUFSVDAsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5kZXZuYW1lCT0gInMzYzI0MTItdWFydC4xIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMl9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTJfQ0xLQ09OX1VBUlQxLAotCX0sIHsKLQkJLm5hbWUJCT0gInVhcnQiLAotCQkuZGV2bmFtZQk9ICJzM2MyNDEyLXVhcnQuMiIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9VQVJUMiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJydGMiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEyX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMl9DTEtDT05fUlRDLAotCX0sIHsKLQkJLm5hbWUJCT0gIndhdGNoZG9nIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5jdHJsYml0CT0gMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ1c2ItYnVzLWdhZGdldCIsCi0JCS5wYXJlbnQJCT0gJmNsa191c2JfYnVzLAotCQkuZW5hYmxlCQk9IHMzYzI0MTJfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEyX0NMS0NPTl9VU0JfREVWNDgsCi0JfSwgewotCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0IiwKLQkJLnBhcmVudAkJPSAmY2xrX3VzYl9idXMsCi0JCS5lbmFibGUJCT0gczNjMjQxMl9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTJfQ0xLQ09OX1VTQl9IT1NUNDgsCi0JfQotfTsKLQotLyogY2xvY2tzIHRvIGFkZCB3aGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZWlyIHBhcmVudGFnZSAqLwotCi1zdHJ1Y3QgY2xrX2luaXQgewotCXN0cnVjdCBjbGsJKmNsazsKLQl1bnNpZ25lZCBpbnQJIGJpdDsKLQlzdHJ1Y3QgY2xrCSpzcmNfMDsKLQlzdHJ1Y3QgY2xrCSpzcmNfMTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2luaXQgY2xrc19zcmNbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLmNsawk9ICZjbGtfdXN5c2NsaywKLQkJLmJpdAk9IFMzQzI0MTJfQ0xLU1JDX1VTQkNMS19IQ0xLLAotCQkuc3JjXzAJPSAmY2xrX3VyZWZjbGssCi0JCS5zcmNfMQk9ICZjbGtfdXBsbCwKLQl9LCB7Ci0JCS5jbGsJPSAmY2xrX2kycywKLQkJLmJpdAk9IFMzQzI0MTJfQ0xLU1JDX0kyU0NMS19NUExMLAotCQkuc3JjXzAJPSAmY2xrX2VyZWZjbGssCi0JCS5zcmNfMQk9ICZjbGtfbXBsbCwKLQl9LCB7Ci0JCS5jbGsJPSAmY2xrX2NhbSwKLQkJLmJpdAk9IFMzQzI0MTJfQ0xLU1JDX0NBTUNMS19IQ0xLLAotCQkuc3JjXzAJPSAmY2xrX3VzeXNjbGssCi0JCS5zcmNfMQk9ICZjbGtfaCwKLQl9LCB7Ci0JCS5jbGsJPSAmY2xrX21zeXNjbGssCi0JCS5iaXQJPSBTM0MyNDEyX0NMS1NSQ19NU1lTQ0xLX01QTEwsCi0JCS5zcmNfMAk9ICZjbGtfbWRpdmNsaywKLQkJLnNyY18xCT0gJmNsa19tcGxsLAotCX0sIHsKLQkJLmNsawk9ICZjbGtfdWFydCwKLQkJLmJpdAk9IFMzQzI0MTJfQ0xLU1JDX1VBUlRDTEtfTVBMTCwKLQkJLnNyY18wCT0gJmNsa19lcmVmY2xrLAotCQkuc3JjXzEJPSAmY2xrX21wbGwsCi0JfSwgewotCQkuY2xrCT0gJmNsa191c2JzcmMsCi0JCS5iaXQJPSBTM0MyNDEyX0NMS1NSQ19VU0JDTEtfSENMSywKLQkJLnNyY18wCT0gJmNsa191c3lzY2xrLAotCQkuc3JjXzEJPSAmY2xrX2gsCi0JLyogaGVyZSB3ZSBhc3N1bWUgIE9NWzRdIHNlbGVjdCB4dGFsICovCi0JfSwgewotCQkuY2xrCT0gJmNsa19lcmVmY2xrLAotCQkuYml0CT0gUzNDMjQxMl9DTEtTUkNfRVJFRkNMS19FWFRDTEssCi0JCS5zcmNfMAk9ICZjbGtfeHRhbCwKLQkJLnNyY18xCT0gJmNsa19leHQsCi0JfSwgewotCQkuY2xrCT0gJmNsa191cmVmY2xrLAotCQkuYml0CT0gUzNDMjQxMl9DTEtTUkNfVVJFRkNMS19FWFRDTEssCi0JCS5zcmNfMAk9ICZjbGtfeHRhbCwKLQkJLnNyY18xCT0gJmNsa19leHQsCi0JfSwKLX07Ci0KLS8qIHMzYzI0MTJfY2xrX2luaXRwYXJlbnRzCi0gKgotICogSW5pdGlhbGlzZSB0aGUgcGFyZW50cyBmb3IgdGhlIGNsb2NrcyB0aGF0IHdlIGdldCBhdCBzdGFydC10aW1lCi0qLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgczNjMjQxMl9jbGtfaW5pdHBhcmVudHModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0MTJfQ0xLU1JDKTsKLQlzdHJ1Y3QgY2xrX2luaXQgKmNpcCA9IGNsa3Nfc3JjOwotCXN0cnVjdCBjbGsgKnNyYzsKLQlpbnQgcHRyOwotCWludCByZXQ7Ci0KLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrc19zcmMpOyBwdHIrKywgY2lwKyspIHsKLQkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjaXAtPmNsayk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAotCQkJICAgICAgIGNpcC0+Y2xrLT5uYW1lLCByZXQpOwotCQl9Ci0KLQkJc3JjID0gKGNsa3NyYyAmIGNpcC0+Yml0KSA/IGNpcC0+c3JjXzEgOiBjaXAtPnNyY18wOwotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBwYXJlbnQgJXNcbiIsIGNpcC0+Y2xrLT5uYW1lLCBzcmMtPm5hbWUpOwotCQljbGtfc2V0X3BhcmVudChjaXAtPmNsaywgc3JjKTsKLQl9Ci19Ci0KLS8qIGNsb2NrcyB0byBhZGQgc3RyYWlnaHQgYXdheSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmNsa19leHQsCi0JJmNsa191c2JfYnVzLAotCSZjbGtfbXJlZmNsaywKLQkmY2xrX2FybWNsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzM2MyNDEyX2Nsa19sb29rdXBbXSA9IHsKLQlDTEtERVZfSU5JVChOVUxMLCAiY2xrX3VhcnRfYmF1ZDEiLCAmczNjMjR4eF91Y2xrKSwKLQlDTEtERVZfSU5JVChOVUxMLCAiY2xrX3VhcnRfYmF1ZDIiLCAmY2xrX3ApLAotCUNMS0RFVl9JTklUKE5VTEwsICJjbGtfdWFydF9iYXVkMyIsICZjbGtfdXN5c2NsayksCi19OwotCi1pbnQgX19pbml0IHMzYzI0MTJfYmFzZWNsa19hZGQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa2NvbiAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7Ci0JdW5zaWduZWQgaW50IGR2czsKLQlzdHJ1Y3QgY2xrICpjbGtwOwotCWludCByZXQ7Ci0JaW50IHB0cjsKLQotCWNsa191cGxsLmVuYWJsZSA9IHMzYzI0MTJfdXBsbF9lbmFibGU7Ci0JY2xrX3VzYl9idXMucGFyZW50ID0gJmNsa191c2JzcmM7Ci0JY2xrX3VzYl9idXMucmF0ZSA9IDB4MDsKLQotCWNsa19mLnBhcmVudCA9ICZjbGtfbXN5c2NsazsKLQotCXMzYzI0MTJfY2xrX2luaXRwYXJlbnRzKCk7Ci0KLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrcyk7IHB0cisrKSB7Ci0JCWNsa3AgPSBjbGtzW3B0cl07Ci0KLQkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCi0JCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKLQkJfQotCX0KLQotCS8qIHNldCB0aGUgZHZzIHN0YXRlIGFjY29yZGluZyB0byB3aGF0IHdlIGdvdCBhdCBib290IHRpbWUgKi8KLQotCWR2cyA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTikgJiBTM0MyNDEyX0NMS0RJVk5fRFZTRU47Ci0KLQlpZiAoZHZzKQotCQljbGtfYXJtY2xrLnBhcmVudCA9ICZjbGtfaDsKLQotCXByaW50ayhLRVJOX0lORk8gIlMzQzI0MTI6IERWUyBpcyAlc1xuIiwgZHZzID8gIm9uIiA6ICJvZmYiKTsKLQotCS8qIGVuc3VyZSB1c2IgYnVzIGNsb2NrIGlzIHdpdGhpbiBjb3JyZWN0IHJhdGUgb2YgNDhNSHogKi8KLQotCWlmIChjbGtfZ2V0X3JhdGUoJmNsa191c2JfYnVzKSAhPSAoNDggKiAxMDAwICogMTAwMCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV2FybmluZzogVVNCIGJ1cyBjbG9jayBub3QgYXQgNDhNSHpcbiIpOwotCi0JCS8qIGZvciB0aGUgbW9tZW50LCBsZXQncyB1c2UgdGhlIFVQTEwsIGFuZCBzZWUgaWYgd2UgY2FuCi0JCSAqIGdldCA0OE1IeiAqLwotCi0JCWNsa19zZXRfcGFyZW50KCZjbGtfdXN5c2NsaywgJmNsa191cGxsKTsKLQkJY2xrX3NldF9wYXJlbnQoJmNsa191c2JzcmMsICZjbGtfdXN5c2Nsayk7Ci0JCWNsa19zZXRfcmF0ZSgmY2xrX3VzYnNyYywgNDgqMTAwMCoxMDAwKTsKLQl9Ci0KLQlwcmludGsoIlMzQzI0MTI6IHVwbGwgJXMsICVsZC4lMDNsZCBNSHosIHVzYi1idXMgJWxkLiUwM2xkIE1IelxuIiwKLQkgICAgICAgKF9fcmF3X3JlYWRsKFMzQzI0MTBfVVBMTENPTikgJiBTM0MyNDEyX1BMTENPTl9PRkYpID8gIm9mZiI6Im9uIiwKLQkgICAgICAgcHJpbnRfbWh6KGNsa19nZXRfcmF0ZSgmY2xrX3VwbGwpKSwKLQkgICAgICAgcHJpbnRfbWh6KGNsa19nZXRfcmF0ZSgmY2xrX3VzYl9idXMpKSk7Ci0KLQkvKiByZWdpc3RlciBjbG9ja3MgZnJvbSBjbG9jayBhcnJheSAqLwotCi0JY2xrcCA9IGluaXRfY2xvY2tzOwotCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrLCBjbGtwKyspIHsKLQkJLyogZW5zdXJlIHRoYXQgd2Ugbm90ZSB0aGUgY2xvY2sgc3RhdGUgKi8KLQotCQljbGtwLT51c2FnZSA9IGNsa2NvbiAmIGNsa3AtPmN0cmxiaXQgPyAxIDogMDsKLQotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKLQkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwotCQl9Ci0JfQotCi0JLyogV2UgbXVzdCBiZSBjYXJlZnVsIGRpc2FibGluZyB0aGUgY2xvY2tzIHdlIGFyZSBub3QgaW50ZW5kaW5nIHRvCi0JICogYmUgdXNpbmcgYXQgYm9vdCB0aW1lLCBhcyBzdWJzeXN0ZW1zIHN1Y2ggYXMgdGhlIExDRCB3aGljaCBkbwotCSAqIHRoZWlyIG93biBETUEgcmVxdWVzdHMgdG8gdGhlIGJ1cyBjYW4gY2F1c2UgdGhlIHN5c3RlbSB0byBsb2NrdXAKLQkgKiBpZiB0aGV5IHdoZXJlIGluIHRoZSBtaWRkbGUgb2YgcmVxdWVzdGluZyBidXMgYWNjZXNzLgotCSAqCi0JICogRGlzYWJsaW5nIHRoZSBMQ0QgY2xvY2sgaWYgdGhlIExDRCBpcyBhY3RpdmUgaXMgdmVyeSBkYW5nZXJvdXMsCi0JICogYW5kIHRoZXJlZm9yZSB0aGUgYm9vdGxvYWRlciBzaG91bGQgYmUgY2FyZWZ1bCB0byBub3QgZW5hYmxlCi0JICogdGhlIExDRCBjbG9jayBpZiBpdCBpcyBub3QgbmVlZGVkLgotCSovCi0KLQkvKiBpbnN0YWxsIChhbmQgZGlzYWJsZSkgdGhlIGNsb2NrcyB3ZSBkbyBub3QgbmVlZCBpbW1lZGlhdGVseSAqLwotCi0JY2xrcCA9IGluaXRfY2xvY2tzX2Rpc2FibGU7Ci0JZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX2Rpc2FibGUpOyBwdHIrKywgY2xrcCsrKSB7Ci0KLQkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCi0JCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKLQkJfQotCi0JCXMzYzI0MTJfY2xrY29uX2VuYWJsZShjbGtwLCAwKTsKLQl9Ci0KLQljbGtkZXZfYWRkX3RhYmxlKHMzYzI0MTJfY2xrX2xvb2t1cCwgQVJSQVlfU0laRShzM2MyNDEyX2Nsa19sb29rdXApKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDE2LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY2xvY2stczNjMjQxNi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDIxYTcyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDE2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L2Nsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotICoKLSAqIFMzQzI0MTYgQ2xvY2sgY29udHJvbCBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2stY2xrc3JjLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KLSNpbmNsdWRlIDxwbGF0L3BsbC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgotCi0vKiBhcm1kaXYKLSAqCi0gKiB0aGlzIGNsb2NrIGlzIHNvdXJjZWQgZnJvbSBtc3lzY2xrIGFuZCBjYW4gaGF2ZSBhIG51bWJlciBvZgotICogZGl2aWRlciB2YWx1ZXMgYXBwbGllZCB0byBpdCB0byB0aGVuIGJlIGZlZCBpbnRvIGFybWNsay4KLSAqIFRoZSByZWFsIGNsb2NrIGRlZmluaXRpb24gaXMgZG9uZSBpbiBzM2MyNDQzLWNsb2NrLmMsCi0gKiBvbmx5IHRoZSBhcm1kaXYgZGl2aXNvciB0YWJsZSBtdXN0IGJlIGRlZmluZWQgaGVyZS4KLSovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXJtZGl2WzhdID0gewotCVswXSA9IDEsCi0JWzFdID0gMiwKLQlbMl0gPSAzLAotCVszXSA9IDQsCi0JWzVdID0gNiwKLQlbN10gPSA4LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGhzc3BpX2VwbGxkaXYgPSB7Ci0JLmNsayA9IHsKLQkJLm5hbWUJPSAiaHNzcGktZXBsbGRpdiIsCi0JCS5wYXJlbnQJPSAmY2xrX2VzeXNjbGsuY2xrLAotCQkuY3RybGJpdCA9ICgxIDw8IDE0KSwKLQkJLmVuYWJsZSA9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zLAotCX0sCi0JLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS0RJVjEsIC5zaXplID0gMiwgLnNoaWZ0ID0gMjQgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpoc3NwaV9zb3VyY2VzW10gPSB7Ci0JWzBdID0gJmhzc3BpX2VwbGxkaXYuY2xrLAotCVsxXSA9IE5VTEwsIC8qIHRvIGZpeCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGhzc3BpX211eCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQk9ICJoc3NwaS1pZiIsCi0JfSwKLQkuc291cmNlcyA9ICYoc3RydWN0IGNsa3NyY19zb3VyY2VzKSB7Ci0JCS5zb3VyY2VzID0gaHNzcGlfc291cmNlcywKLQkJLm5yX3NvdXJjZXMgPSBBUlJBWV9TSVpFKGhzc3BpX3NvdXJjZXMpLAotCX0sCi0JLnJlZ19zcmMgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS1NSQywgLnNpemUgPSAxLCAuc2hpZnQgPSAxOCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGhzbW1jX2RpdltdID0gewotCVswXSA9IHsKLQkJLmNsayA9IHsKLQkJCS5uYW1lCT0gImhzbW1jLWRpdiIsCi0JCQkuZGV2bmFtZQk9ICJzM2Mtc2RoY2kuMCIsCi0JCQkucGFyZW50CT0gJmNsa19lc3lzY2xrLmNsaywKLQkJfSwKLQkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDE2X0NMS0RJVjIsIC5zaXplID0gMiwgLnNoaWZ0ID0gNiB9LAotCX0sCi0JWzFdID0gewotCQkuY2xrID0gewotCQkJLm5hbWUJPSAiaHNtbWMtZGl2IiwKLQkJCS5kZXZuYW1lCT0gInMzYy1zZGhjaS4xIiwKLQkJCS5wYXJlbnQJPSAmY2xrX2VzeXNjbGsuY2xrLAotCQl9LAotCQkucmVnX2RpdiA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLRElWMSwgLnNpemUgPSAyLCAuc2hpZnQgPSA2IH0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBoc21tY19tdXgwID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJoc21tYy1pZiIsCi0JCS5kZXZuYW1lCT0gInMzYy1zZGhjaS4wIiwKLQkJLmN0cmxiaXQJPSAoMSA8PCA2KSwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQl9LAotCS5zb3VyY2VzCT0gJihzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMpIHsKLQkJLm5yX3NvdXJjZXMJPSAyLAotCQkuc291cmNlcwk9IChzdHJ1Y3QgY2xrICogW10pIHsKLQkJCVswXQk9ICZoc21tY19kaXZbMF0uY2xrLAotCQkJWzFdCT0gTlVMTCwgLyogdG8gZml4ICovCi0JCX0sCi0JfSwKLQkucmVnX3NyYyA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLU1JDLCAuc2l6ZSA9IDEsIC5zaGlmdCA9IDE2IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgaHNtbWNfbXV4MSA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAiaHNtbWMtaWYiLAotCQkuZGV2bmFtZQk9ICJzM2Mtc2RoY2kuMSIsCi0JCS5jdHJsYml0CT0gKDEgPDwgMTIpLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zLAotCX0sCi0JLnNvdXJjZXMJPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgewotCQkubnJfc291cmNlcwk9IDIsCi0JCS5zb3VyY2VzCT0gKHN0cnVjdCBjbGsgKiBbXSkgewotCQkJWzBdCT0gJmhzbW1jX2RpdlsxXS5jbGssCi0JCQlbMV0JPSBOVUxMLCAvKiB0byBmaXggKi8KLQkJfSwKLQl9LAotCS5yZWdfc3JjID0geyAucmVnID0gUzNDMjQ0M19DTEtTUkMsIC5zaXplID0gMSwgLnNoaWZ0ID0gMTcgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhzbW1jMF9jbGsgPSB7Ci0JLm5hbWUJCT0gImhzbW1jIiwKLQkuZGV2bmFtZQk9ICJzM2Mtc2RoY2kuMCIsCi0JLnBhcmVudAkJPSAmY2xrX2gsCi0JLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKLQkuY3RybGJpdAk9IFMzQzI0MTZfSENMS0NPTl9IU01NQzAsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKmNsa3NyY3NbXSBfX2luaXRkYXRhID0gewotCSZoc3NwaV9lcGxsZGl2LAotCSZoc3NwaV9tdXgsCi0JJmhzbW1jX2RpdlswXSwKLQkmaHNtbWNfZGl2WzFdLAotCSZoc21tY19tdXgwLAotCSZoc21tY19tdXgxLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHMzYzI0MTZfY2xrX2xvb2t1cFtdID0gewotCUNMS0RFVl9JTklUKCJzM2Mtc2RoY2kuMCIsICJtbWNfYnVzY2xrLjAiLCAmaHNtbWMwX2NsayksCi0JQ0xLREVWX0lOSVQoInMzYy1zZGhjaS4wIiwgIm1tY19idXNjbGsuMiIsICZoc21tY19tdXgwLmNsayksCi0JQ0xLREVWX0lOSVQoInMzYy1zZGhjaS4xIiwgIm1tY19idXNjbGsuMiIsICZoc21tY19tdXgxLmNsayksCi0JLyogczNjMjQ0My1zcGkuMCBpcyB1c2VkIG9uIHMzYzI0MTYgYW5kIHMzYzI0NTAgYXMgd2VsbCAqLwotCUNMS0RFVl9JTklUKCJzM2MyNDQzLXNwaS4wIiwgInNwaV9idXNjbGsyIiwgJmhzc3BpX211eC5jbGspLAotfTsKLQotdm9pZCBfX2luaXQgczNjMjQxNl9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKLXsKLQl1MzIgZXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfRVBMTENPTik7Ci0JdTMyIGVwbGxjb24xID0gX19yYXdfcmVhZGwoUzNDMjQ0M19FUExMQ09OKzQpOwotCWludCBwdHI7Ci0KLQkvKiBzM2MyNDE2IEVQTEwgY29tcGF0aWJsZSB3aXRoIHMzYzY0eHggKi8KLQljbGtfZXBsbC5yYXRlID0gczNjX2dldF9wbGw2NTUzeCh4dGFsLCBlcGxsY29uLCBlcGxsY29uMSk7Ci0KLQljbGtfZXBsbC5wYXJlbnQgPSAmY2xrX2VwbGxyZWYuY2xrOwotCi0JczNjMjQ0M19jb21tb25faW5pdF9jbG9ja3MoeHRhbCwgczNjMjQxNl9nZXRfcGxsLAotCQkJCSAgIGFybWRpdiwgQVJSQVlfU0laRShhcm1kaXYpLAotCQkJCSAgIFMzQzI0MTZfQ0xLRElWMF9BUk1ESVZfTUFTSyk7Ci0KLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrc3Jjcyk7IHB0cisrKQotCQlzM2NfcmVnaXN0ZXJfY2xrc3JjKGNsa3NyY3NbcHRyXSwgMSk7Ci0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZoc21tYzBfY2xrKTsKLQljbGtkZXZfYWRkX3RhYmxlKHMzYzI0MTZfY2xrX2xvb2t1cCwgQVJSQVlfU0laRShzM2MyNDE2X2Nsa19sb29rdXApKTsKLQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2Nsb2NrLXMzYzI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDQwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MjcyMjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2Nsb2NrLXMzYzI0NDAuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDQwIENsb2NrIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zM2MuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLQotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotCi0vKiBTM0MyNDQwIGV4dGVuZGVkIGNsb2NrIHN1cHBvcnQgKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0MF9jYW1pZl91cGxsX3JvdW5kKHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWludCBkaXY7Ci0KLQlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQotCQlyZXR1cm4gcGFyZW50X3JhdGU7Ci0KLQkvKiBub3RlLCB3ZSByZW1vdmUgdGhlICsvLSAxIGNhbGN1bGF0aW9ucyBmb3IgdGhlIGRpdmlzb3IgKi8KLQotCWRpdiA9IChwYXJlbnRfcmF0ZSAvIHJhdGUpIC8gMjsKLQotCWlmIChkaXYgPCAxKQotCQlkaXYgPSAxOwotCWVsc2UgaWYgKGRpdiA+IDE2KQotCQlkaXYgPSAxNjsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKiAyKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQwX2NhbWlmX3VwbGxfc2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNhbWRpdm4gPSAgX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKLQotCXJhdGUgPSBzM2MyNDQwX2NhbWlmX3VwbGxfcm91bmQoY2xrLCByYXRlKTsKLQotCWNhbWRpdm4gJj0gfihTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTCB8IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfTUFTSyk7Ci0KLQlpZiAocmF0ZSAhPSBwYXJlbnRfcmF0ZSkgewotCQljYW1kaXZuIHw9IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOwotCQljYW1kaXZuIHw9ICgoKHBhcmVudF9yYXRlIC8gcmF0ZSkgLyAyKSAtIDEpOwotCX0KLQotCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDQwX0NBTURJVk4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDBfY2FtaWZfdXBsbF9nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNhbWRpdm4gPSAgX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKLQotCWlmICghKGNhbWRpdm4gJiBTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTCkpCi0JCXJldHVybiBwYXJlbnRfcmF0ZTsKLQotCWNhbWRpdm4gJj0gUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19NQVNLOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKGNhbWRpdm4gKyAxKSAvIDI7Ci19Ci0KLS8qIEV4dHJhIFMzQzI0NDAgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDBfY2xrX2NhbSA9IHsKLQkubmFtZQkJPSAiY2FtaWYiLAotCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCS5jdHJsYml0CT0gUzNDMjQ0MF9DTEtDT05fQ0FNRVJBLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0MF9jbGtfY2FtX3VwbGwgPSB7Ci0JLm5hbWUJCT0gImNhbWlmLXVwbGwiLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuc2V0X3JhdGUJPSBzM2MyNDQwX2NhbWlmX3VwbGxfc2V0cmF0ZSwKLQkJLmdldF9yYXRlCT0gczNjMjQ0MF9jYW1pZl91cGxsX2dldHJhdGUsCi0JCS5yb3VuZF9yYXRlCT0gczNjMjQ0MF9jYW1pZl91cGxsX3JvdW5kLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzM2MyNDQwX2Nsa19hYzk3ID0gewotCS5uYW1lCQk9ICJhYzk3IiwKLQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkuY3RybGJpdAk9IFMzQzI0NDBfQ0xLQ09OX0FDOTcsCi19OwotCi0jZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDAgICAgICAoUzNDX1ZBX1VBUlQpCi0jZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDEgICAgICAoUzNDX1ZBX1VBUlQgKyAweDQwMDAgKQotI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQyICAgICAgKFMzQ19WQV9VQVJUICsgMHg4MDAwICkKLSNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMyAgICAgIChTM0NfVkFfVUFSVCArIDB4QzAwMCApCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nICBzM2MyNDQwX2ZjbGtfbl9nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHVjb24wLCB1Y29uMSwgdWNvbjIsIGRpdmlzb3I7Ci0KLQkvKiB0aGUgZnVuIG9mIGNhbGN1bGF0aW5nIHRoZSB1YXJ0IGRpdmlzb3JzIG9uIHRoZSBzM2MyNDQwICovCi0JdWNvbjAgPSBfX3Jhd19yZWFkbChTM0MyNFhYX1ZBX1VBUlQwICsgUzNDMjQxMF9VQ09OKTsKLQl1Y29uMSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfVkFfVUFSVDEgKyBTM0MyNDEwX1VDT04pOwotCXVjb24yID0gX19yYXdfcmVhZGwoUzNDMjRYWF9WQV9VQVJUMiArIFMzQzI0MTBfVUNPTik7Ci0KLQl1Y29uMCAmPSBTM0MyNDQwX1VDT04wX0RJVk1BU0s7Ci0JdWNvbjEgJj0gUzNDMjQ0MF9VQ09OMV9ESVZNQVNLOwotCXVjb24yICY9IFMzQzI0NDBfVUNPTjJfRElWTUFTSzsKLQotCWlmICh1Y29uMCAhPSAwKQotCQlkaXZpc29yID0gKHVjb24wID4+IFMzQzI0NDBfVUNPTl9ESVZTSElGVCkgKyA2OwotCWVsc2UgaWYgKHVjb24xICE9IDApCi0JCWRpdmlzb3IgPSAodWNvbjEgPj4gUzNDMjQ0MF9VQ09OX0RJVlNISUZUKSArIDIxOwotCWVsc2UgaWYgKHVjb24yICE9IDApCi0JCWRpdmlzb3IgPSAodWNvbjIgPj4gUzNDMjQ0MF9VQ09OX0RJVlNISUZUKSArIDM2OwotCWVsc2UKLQkJLyogbWFudWFsIGNhbGltcyA0NCwgc2VlbXMgdG8gYmUgOSAqLwotCQlkaXZpc29yID0gOTsKLQotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2aXNvcjsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0MF9jbGtfZmNsa19uID0gewotCS5uYW1lCQk9ICJmY2xrX24iLAotCS5wYXJlbnQJCT0gJmNsa19mLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuZ2V0X3JhdGUJPSBzM2MyNDQwX2ZjbGtfbl9nZXRyYXRlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgczNjMjQ0MF9jbGtfbG9va3VwW10gPSB7Ci0JQ0xLREVWX0lOSVQoTlVMTCwgImNsa191YXJ0X2JhdWQxIiwgJnMzYzI0eHhfdWNsayksCi0JQ0xLREVWX0lOSVQoTlVMTCwgImNsa191YXJ0X2JhdWQyIiwgJmNsa19wKSwKLQlDTEtERVZfSU5JVChOVUxMLCAiY2xrX3VhcnRfYmF1ZDMiLCAmczNjMjQ0MF9jbGtfZmNsa19uKSwKLQlDTEtERVZfSU5JVCgiczNjMjQ0MC11YXJ0LjAiLCAidWFydCIsICZzM2MyNHh4X2Nsa191YXJ0MCksCi0JQ0xLREVWX0lOSVQoInMzYzI0NDAtdWFydC4xIiwgInVhcnQiLCAmczNjMjR4eF9jbGtfdWFydDEpLAotCUNMS0RFVl9JTklUKCJzM2MyNDQwLXVhcnQuMiIsICJ1YXJ0IiwgJnMzYzI0eHhfY2xrX3VhcnQyKSwKLQlDTEtERVZfSU5JVCgiczNjMjQ0MC1jYW1pZiIsICJjYW1lcmEiLCAmczNjMjQ0MF9jbGtfY2FtX3VwbGwpLAotfTsKLQotc3RhdGljIGludCBfX2luaXRfcmVmb2sgczNjMjQ0MF9jbGtfYWRkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHN1YnN5c19pbnRlcmZhY2UgKnNpZikKLXsKLQlzdHJ1Y3QgY2xrICpjbG9ja191cGxsOwotCXN0cnVjdCBjbGsgKmNsb2NrX2g7Ci0Jc3RydWN0IGNsayAqY2xvY2tfcDsKLQotCWNsb2NrX3AgPSBjbGtfZ2V0KE5VTEwsICJwY2xrIik7Ci0JY2xvY2tfaCA9IGNsa19nZXQoTlVMTCwgImhjbGsiKTsKLQljbG9ja191cGxsID0gY2xrX2dldChOVUxMLCAidXBsbCIpOwotCi0JaWYgKElTX0VSUihjbG9ja19wKSB8fCBJU19FUlIoY2xvY2tfaCkgfHwgSVNfRVJSKGNsb2NrX3VwbGwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUzNDMjQ0MDogRmFpbGVkIHRvIGdldCBwYXJlbnQgY2xvY2tzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JczNjMjQ0MF9jbGtfY2FtLnBhcmVudCA9IGNsb2NrX2g7Ci0JczNjMjQ0MF9jbGtfYWM5Ny5wYXJlbnQgPSBjbG9ja19wOwotCXMzYzI0NDBfY2xrX2NhbV91cGxsLnBhcmVudCA9IGNsb2NrX3VwbGw7Ci0JczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfZmNsa19uKTsKLQotCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDBfY2xrX2FjOTcpOwotCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDBfY2xrX2NhbSk7Ci0JczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfY2FtX3VwbGwpOwotCWNsa2Rldl9hZGRfdGFibGUoczNjMjQ0MF9jbGtfbG9va3VwLCBBUlJBWV9TSVpFKHMzYzI0NDBfY2xrX2xvb2t1cCkpOwotCi0JY2xrX2Rpc2FibGUoJnMzYzI0NDBfY2xrX2FjOTcpOwotCWNsa19kaXNhYmxlKCZzM2MyNDQwX2Nsa19jYW0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3Vic3lzX2ludGVyZmFjZSBzM2MyNDQwX2Nsa19pbnRlcmZhY2UgPSB7Ci0JLm5hbWUJCT0gInMzYzI0NDBfY2xrIiwKLQkuc3Vic3lzCQk9ICZzM2MyNDQwX3N1YnN5cywKLQkuYWRkX2Rldgk9IHMzYzI0NDBfY2xrX2FkZCwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IHMzYzI0eHhfY2xrX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3Vic3lzX2ludGVyZmFjZV9yZWdpc3RlcigmczNjMjQ0MF9jbGtfaW50ZXJmYWNlKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNHh4X2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY2xvY2stczNjMjQ0My5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmNkMzFmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jbG9jay1zM2MyNDQzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDMjQ0MyBDbG9jayBjb250cm9sIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9jay1jbGtzcmMuaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotCi0vKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKLSAqIGZyb20gdGhlIFhUUGxsIGlucHV0LCBhbmQgdGhhdCBhbGwgKioqUkVGQ0xLcyBhcmUgYmVpbmcKLSAqIGZlZCBmcm9tIGl0LCBhcyB3ZSBjYW5ub3QgcmVhZCB0aGUgc3RhdGUgb2YgT01bNF0gZnJvbQotICogc29mdHdhcmUuCi0gKgotICogSXQgd291bGQgYmUgcG9zc2libGUgZm9yIGVhY2ggYm9hcmQgaW5pdGlhbGlzYXRpb24gdG8KLSAqIHNldCB0aGUgY29ycmVjdCBtdXhpbmcgYXQgaW5pdGlhbGlzYXRpb24KLSovCi0KLS8qIGNsb2NrIHNlbGVjdGlvbnMgKi8KLQotLyogYXJtZGl2Ci0gKgotICogdGhpcyBjbG9jayBpcyBzb3VyY2VkIGZyb20gbXN5c2NsayBhbmQgY2FuIGhhdmUgYSBudW1iZXIgb2YKLSAqIGRpdmlkZXIgdmFsdWVzIGFwcGxpZWQgdG8gaXQgdG8gdGhlbiBiZSBmZWQgaW50byBhcm1jbGsuCi0gKiBUaGUgcmVhbCBjbG9jayBkZWZpbml0aW9uIGlzIGRvbmUgaW4gczNjMjQ0My1jbG9jay5jLAotICogb25seSB0aGUgYXJtZGl2IGRpdmlzb3IgdGFibGUgbXVzdCBiZSBkZWZpbmVkIGhlcmUuCi0qLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFybWRpdlsxNl0gPSB7Ci0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMSA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDEsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMiA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDIsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMyA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDMsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfNCA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDQsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfNiA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDYsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfOCA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDgsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMTIgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAxMiwKLQlbUzNDMjQ0M19DTEtESVYwX0FSTURJVl8xNiA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDE2LAotfTsKLQotLyogaHNzcGkKLSAqCi0gKiBoaWdoLXNwZWVkIHNwaSBjbG9jaywgc291cmNlZCBmcm9tIGVzeXNjbGsKLSovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfaHNzcGkgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImhzc3BpLWlmIiwKLQkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9IU1NQSUNMSywKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQl9LAotCS5yZWdfZGl2ID0geyAucmVnID0gUzNDMjQ0M19DTEtESVYxLCAuc2l6ZSA9IDIsIC5zaGlmdCA9IDQgfSwKLX07Ci0KLQotLyogY2xrX2hzbWNjX2RpdgotICoKLSAqIHRoaXMgY2xvY2sgaXMgc291cmNlZCBmcm9tIGVwbGwsIGFuZCBpcyBmZWQgdGhyb3VnaCBhIGRpdmlkZXIsCi0gKiB0byBhIG11eCBjb250cm9sbGVkIGJ5IHNjbGtjb24gd2hlcmUgZWl0aGVyIGl0IG9yIGEgZXh0Y2xrIGNhbgotICogYmUgZmVkIHRvIHRoZSBoc21tYyBibG9jawotKi8KLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19oc21tY19kaXYgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImhzbW1jLWRpdiIsCi0JCS5kZXZuYW1lCT0gInMzYy1zZGhjaS4xIiwKLQkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAotCX0sCi0JLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS0RJVjEsIC5zaXplID0gMiwgLnNoaWZ0ID0gNiB9LAotfTsKLQotc3RhdGljIGludCBzM2MyNDQzX3NldHBhcmVudF9oc21tYyhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfU0NMS0NPTik7Ci0KLQljbGtzcmMgJj0gfihTM0MyNDQzX1NDTEtDT05fSFNNTUNDTEtfRVhUIHwKLQkJICAgIFMzQzI0NDNfU0NMS0NPTl9IU01NQ0NMS19FUExMKTsKLQotCWlmIChwYXJlbnQgPT0gJmNsa19lcGxsKQotCQljbGtzcmMgfD0gUzNDMjQ0M19TQ0xLQ09OX0hTTU1DQ0xLX0VQTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfZXh0KQotCQljbGtzcmMgfD0gUzNDMjQ0M19TQ0xLQ09OX0hTTU1DQ0xLX0VYVDsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNsay0+dXNhZ2UgPiAwKSB7Ci0JCV9fcmF3X3dyaXRlbChjbGtzcmMsIFMzQzI0NDNfU0NMS0NPTik7Ci0JfQotCi0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0M19lbmFibGVfaHNtbWMoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXJldHVybiBzM2MyNDQzX3NldHBhcmVudF9oc21tYyhjbGssIGNsay0+cGFyZW50KTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2hzbW1jID0gewotCS5uYW1lCQk9ICJoc21tYy1pZiIsCi0JLmRldm5hbWUJPSAiczNjLXNkaGNpLjEiLAotCS5wYXJlbnQJCT0gJmNsa19oc21tY19kaXYuY2xrLAotCS5lbmFibGUJCT0gczNjMjQ0M19lbmFibGVfaHNtbWMsCi0JLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7Ci0JCS5zZXRfcGFyZW50CT0gczNjMjQ0M19zZXRwYXJlbnRfaHNtbWMsCi0JfSwKLX07Ci0KLS8qIHN0YW5kYXJkIGNsb2NrIGRlZmluaXRpb25zICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzX29mZltdID0gewotCXsKLQkJLm5hbWUJCT0gInNkaSIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9TREksCi0JfSwgewotCQkubmFtZQkJPSAic3BpIiwKLQkJLmRldm5hbWUJPSAiczNjMjQxMC1zcGkuMCIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9TUEkxLAotCX0KLX07Ci0KLS8qIGNsb2NrcyB0byBhZGQgc3RyYWlnaHQgYXdheSAqLwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKmNsa3NyY3NbXSBfX2luaXRkYXRhID0gewotCSZjbGtfaHNzcGksCi0JJmNsa19oc21tY19kaXYsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmNsa19oc21tYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzM2MyNDQzX2Nsa19sb29rdXBbXSA9IHsKLQlDTEtERVZfSU5JVCgiczNjLXNkaGNpLjEiLCAibW1jX2J1c2Nsay4yIiwgJmNsa19oc21tYyksCi0JQ0xLREVWX0lOSVQoInMzYzI0NDMtc3BpLjAiLCAic3BpX2J1c2NsazIiLCAmY2xrX2hzc3BpLmNsayksCi19OwotCi12b2lkIF9faW5pdCBzM2MyNDQzX2luaXRfY2xvY2tzKGludCB4dGFsKQotewotCXVuc2lnbmVkIGxvbmcgZXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfRVBMTENPTik7Ci0JaW50IHB0cjsKLQotCWNsa19lcGxsLnJhdGUgPSBzM2MyNDQzX2dldF9lcGxsKGVwbGxjb24sIHh0YWwpOwotCWNsa19lcGxsLnBhcmVudCA9ICZjbGtfZXBsbHJlZi5jbGs7Ci0KLQlzM2MyNDQzX2NvbW1vbl9pbml0X2Nsb2Nrcyh4dGFsLCBzM2MyNDQzX2dldF9tcGxsLAotCQkJCSAgIGFybWRpdiwgQVJSQVlfU0laRShhcm1kaXYpLAotCQkJCSAgIFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfTUFTSyk7Ci0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhjbGtzLCBBUlJBWV9TSVpFKGNsa3MpKTsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShjbGtzcmNzKTsgcHRyKyspCi0JCXMzY19yZWdpc3Rlcl9jbGtzcmMoY2xrc3Jjc1twdHJdLCAxKTsKLQotCS8qIFdlIG11c3QgYmUgY2FyZWZ1bCBkaXNhYmxpbmcgdGhlIGNsb2NrcyB3ZSBhcmUgbm90IGludGVuZGluZyB0bwotCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3lzdGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KLQkgKiB0aGVpciBvd24gRE1BIHJlcXVlc3RzIHRvIHRoZSBidXMgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gbG9ja3VwCi0JICogaWYgdGhleSB3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHJlcXVlc3RpbmcgYnVzIGFjY2Vzcy4KLQkgKgotCSAqIERpc2FibGluZyB0aGUgTENEIGNsb2NrIGlmIHRoZSBMQ0QgaXMgYWN0aXZlIGlzIHZlcnkgZGFuZ2Vyb3VzLAotCSAqIGFuZCB0aGVyZWZvcmUgdGhlIGJvb3Rsb2FkZXIgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbm90IGVuYWJsZQotCSAqIHRoZSBMQ0QgY2xvY2sgaWYgaXQgaXMgbm90IG5lZWRlZC4KLQkqLwotCi0JLyogaW5zdGFsbCAoYW5kIGRpc2FibGUpIHRoZSBjbG9ja3Mgd2UgZG8gbm90IG5lZWQgaW1tZWRpYXRlbHkgKi8KLQotCXMzY19yZWdpc3Rlcl9jbG9ja3MoaW5pdF9jbG9ja3Nfb2ZmLCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX29mZikpOwotCXMzY19kaXNhYmxlX2Nsb2Nrcyhpbml0X2Nsb2Nrc19vZmYsIEFSUkFZX1NJWkUoaW5pdF9jbG9ja3Nfb2ZmKSk7Ci0JY2xrZGV2X2FkZF90YWJsZShzM2MyNDQzX2Nsa19sb29rdXAsIEFSUkFZX1NJWkUoczNjMjQ0M19jbGtfbG9va3VwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY2xvY2stczNjMjQ0eC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2Nsb2NrLXMzYzI0NHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ5YjY4OC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY2xvY2stczNjMjQ0eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNHh4LWNsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDMjQ0MC9TM0MyNDQyIENvbW1vbiBjbG9jayBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLXN0YXRpYyBpbnQgczNjMjQ0MF9zZXRwYXJlbnRfYXJtY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2FtZGl2bjsKLQl1bnNpZ25lZCBsb25nIGR2czsKLQotCWlmIChwYXJlbnQgPT0gJmNsa19mKQotCQlkdnMgPSAwOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2gpCi0JCWR2cyA9IFMzQzI0NDBfQ0FNRElWTl9EVlNFTjsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0KLQljYW1kaXZuICA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0JY2FtZGl2biAmPSB+UzNDMjQ0MF9DQU1ESVZOX0RWU0VOOwotCWNhbWRpdm4gfD0gZHZzOwotCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDQwX0NBTURJVk4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19hcm0gPSB7Ci0JLm5hbWUJCT0gImFybWNsayIsCi0JLmlkCQk9IC0xLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuc2V0X3BhcmVudAk9IHMzYzI0NDBfc2V0cGFyZW50X2FybWNsaywKLQl9LAotfTsKLQotc3RhdGljIGludCBzM2MyNDR4X2Nsa19hZGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc3Vic3lzX2ludGVyZmFjZSAqc2lmKQotewotCXVuc2lnbmVkIGxvbmcgY2FtZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXZuOwotCXN0cnVjdCBjbGsgKmNsb2NrX3VwbGw7Ci0JaW50IHJldDsKLQotCXByaW50aygiUzNDMjQ0WDogQ2xvY2sgU3VwcG9ydCwgRFZTICVzXG4iLAotCSAgICAgICAoY2FtZGl2biAmIFMzQzI0NDBfQ0FNRElWTl9EVlNFTikgPyAib24iIDogIm9mZiIpOwotCi0JY2xrX2FybS5wYXJlbnQgPSAoY2FtZGl2biAmIFMzQzI0NDBfQ0FNRElWTl9EVlNFTikgPyAmY2xrX2ggOiAmY2xrX2Y7Ci0KLQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfYXJtKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlMzQzI0WFg6IEZhaWxlZCB0byBhZGQgYXJtY2xrICglZClcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JY2xvY2tfdXBsbCA9IGNsa19nZXQoTlVMTCwgInVwbGwiKTsKLQlpZiAoSVNfRVJSKGNsb2NrX3VwbGwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUzNDMjQ0WDogRmFpbGVkIHRvIGdldCB1cGxsIGNsb2NrXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogY2hlY2sgcmF0ZSBvZiBVUExMLCBhbmQgaWYgaXQgaXMgbmVhciA5Nk1IeiwgdGhlbiBjaGFuZ2UKLQkgKiB0byB1c2luZyBoYWxmIHRoZSBVUExMIHJhdGUgZm9yIHRoZSBzeXN0ZW0gKi8KLQotCWlmIChjbGtfZ2V0X3JhdGUoY2xvY2tfdXBsbCkgPiAoOTQgKiBNSFopKSB7Ci0JCWNsa191c2JfYnVzLnJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xvY2tfdXBsbCkgLyAyOwotCi0JCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOwotCi0JCWNsa2Rpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCQljbGtkaXZuIHw9IFMzQzI0NDBfQ0xLRElWTl9VQ0xLOwotCQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQxMF9DTEtESVZOKTsKLQotCQlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN1YnN5c19pbnRlcmZhY2UgczNjMjQ0MF9jbGtfaW50ZXJmYWNlID0gewotCS5uYW1lCQk9ICJzM2MyNDQwX2NsayIsCi0JLnN1YnN5cwkJPSAmczNjMjQ0MF9zdWJzeXMsCi0JLmFkZF9kZXYJPSBzM2MyNDR4X2Nsa19hZGQsCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDBfY2xrX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3Vic3lzX2ludGVyZmFjZV9yZWdpc3RlcigmczNjMjQ0MF9jbGtfaW50ZXJmYWNlKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQwX2Nsa19pbml0KTsKLQotc3RhdGljIHN0cnVjdCBzdWJzeXNfaW50ZXJmYWNlIHMzYzI0NDJfY2xrX2ludGVyZmFjZSA9IHsKLQkubmFtZQkJPSAiczNjMjQ0Ml9jbGsiLAotCS5zdWJzeXMJCT0gJnMzYzI0NDJfc3Vic3lzLAotCS5hZGRfZGV2CT0gczNjMjQ0eF9jbGtfYWRkLAotfTsKLQotc3RhdGljIGludCBzM2MyNDQyX2Nsa19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN1YnN5c19pbnRlcmZhY2VfcmVnaXN0ZXIoJnMzYzI0NDJfY2xrX2ludGVyZmFjZSk7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjMjQ0Ml9jbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY29tbW9uLXMzYzI0NDMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jb21tb24tczNjMjQ0My5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWQzZWVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jb21tb24tczNjMjQ0My5jCisrKyAvZGV2L251bGwKQEAgLTEsNjc1ICswLDAgQEAKLS8qCi0gKiBDb21tb24gY29kZSBmb3IgU29DcyBzdGFydGluZyB3aXRoIHRoZSBTM0MyNDQzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2stY2xrc3JjLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KLQotCi1zdGF0aWMgaW50IHMzYzI0NDNfZ2F0ZSh2b2lkIF9faW9tZW0gKnJlZywgc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXUzMiBjdHJsYml0ID0gY2xrLT5jdHJsYml0OwotCXUzMiBjb24gPSBfX3Jhd19yZWFkbChyZWcpOwotCi0JaWYgKGVuYWJsZSkKLQkJY29uIHw9IGN0cmxiaXQ7Ci0JZWxzZQotCQljb24gJj0gfmN0cmxiaXQ7Ci0KLQlfX3Jhd193cml0ZWwoY29uLCByZWcpOwotCXJldHVybiAwOwotfQotCi1pbnQgczNjMjQ0M19jbGtjb25fZW5hYmxlX2goc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXJldHVybiBzM2MyNDQzX2dhdGUoUzNDMjQ0M19IQ0xLQ09OLCBjbGssIGVuYWJsZSk7Ci19Ci0KLWludCBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCi17Ci0JcmV0dXJuIHMzYzI0NDNfZ2F0ZShTM0MyNDQzX1BDTEtDT04sIGNsaywgZW5hYmxlKTsKLX0KLQotaW50IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKLXsKLQlyZXR1cm4gczNjMjQ0M19nYXRlKFMzQzI0NDNfU0NMS0NPTiwgY2xrLCBlbmFibGUpOwotfQotCi0vKiBtcGxscmVmIGlzIGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgY2xrX3h0YWwgYnkgZGVmYXVsdCwgYnV0IGl0IGlzIG5vdAotICogZWxpZGVkIGFzIHRoZSBFUExMIGNhbiBiZSBlaXRoZXIgc291cmNlZCBieSB0aGUgWFRBTCBvciBFWFRDTEsgYW5kIGFzCi0gKiBzdWNoIGRpcmVjdGx5IGVxdWF0aW5nIHRoZSB0d28gc291cmNlIGNsb2NrcyBpcyBpbXBvc3NpYmxlLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfbXBsbHJlZiA9IHsKLQkubmFtZQkJPSAibXBsbHJlZiIsCi0JLnBhcmVudAkJPSAmY2xrX3h0YWwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrX2VwbGxyZWZfc291cmNlc1tdID0gewotCVswXSA9ICZjbGtfbXBsbHJlZiwKLQlbMV0gPSAmY2xrX21wbGxyZWYsCi0JWzJdID0gJmNsa194dGFsLAotCVszXSA9ICZjbGtfZXh0LAotfTsKLQotc3RydWN0IGNsa3NyY19jbGsgY2xrX2VwbGxyZWYgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImVwbGxyZWYiLAotCX0sCi0JLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgewotCQkuc291cmNlcyA9IGNsa19lcGxscmVmX3NvdXJjZXMsCi0JCS5ucl9zb3VyY2VzID0gQVJSQVlfU0laRShjbGtfZXBsbHJlZl9zb3VyY2VzKSwKLQl9LAotCS5yZWdfc3JjID0geyAucmVnID0gUzNDMjQ0M19DTEtTUkMsIC5zaXplID0gMiwgLnNoaWZ0ID0gNyB9LAotfTsKLQotLyogZXN5c2NsawotICoKLSAqIHRoaXMgaXMgc291cmNlZCBmcm9tIGVpdGhlciB0aGUgRVBMTCBvciB0aGUgRVBMTHJlZiBjbG9jawotKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zeXNjbGtfc291cmNlc1tdID0gewotCVswXSA9ICZjbGtfZXBsbHJlZi5jbGssCi0JWzFdID0gJmNsa19lcGxsLAotfTsKLQotc3RydWN0IGNsa3NyY19jbGsgY2xrX2VzeXNjbGsgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImVzeXNjbGsiLAotCQkucGFyZW50CQk9ICZjbGtfZXBsbCwKLQl9LAotCS5zb3VyY2VzID0gJihzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMpIHsKLQkJLnNvdXJjZXMgPSBjbGtfc3lzY2xrX3NvdXJjZXMsCi0JCS5ucl9zb3VyY2VzID0gQVJSQVlfU0laRShjbGtfc3lzY2xrX3NvdXJjZXMpLAotCX0sCi0JLnJlZ19zcmMgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS1NSQywgLnNpemUgPSAxLCAuc2hpZnQgPSA2IH0sCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2dldHJhdGVfbWRpdmNsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjApOwotCi0JZGl2ICAmPSBTM0MyNDQzX0NMS0RJVjBfRVhURElWX01BU0s7Ci0JZGl2ID4+PSAoUzNDMjQ0M19DTEtESVYwX0VYVERJVl9TSElGVC0xKTsJLyogeDIgKi8KLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX21kaXZjbGsgPSB7Ci0JLm5hbWUJCT0gIm1kaXZjbGsiLAotCS5wYXJlbnQJCT0gJmNsa19tcGxscmVmLAotCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgewotCQkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfbWRpdmNsaywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19tc3lzY2xrX3NvdXJjZXNbXSA9IHsKLQlbMF0gPSAmY2xrX21wbGxyZWYsCi0JWzFdID0gJmNsa19tcGxsLAotCVsyXSA9ICZjbGtfbWRpdmNsaywKLQlbM10gPSAmY2xrX21wbGxyZWYsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21zeXNjbGsgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gIm1zeXNjbGsiLAotCQkucGFyZW50CQk9ICZjbGtfeHRhbCwKLQl9LAotCS5zb3VyY2VzID0gJihzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMpIHsKLQkJLnNvdXJjZXMgPSBjbGtfbXN5c2Nsa19zb3VyY2VzLAotCQkubnJfc291cmNlcyA9IEFSUkFZX1NJWkUoY2xrX21zeXNjbGtfc291cmNlcyksCi0JfSwKLQkucmVnX3NyYyA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLU1JDLCAuc2l6ZSA9IDIsIC5zaGlmdCA9IDMgfSwKLX07Ci0KLS8qIHByZWRpdgotICoKLSAqIHRoaXMgZGl2aWRlcyB0aGUgbXN5c2NsayBkb3duIHRvIHBhc3MgdG8gaC9wL2V0Yy4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX3ByZWRpdl9nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2MCA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMCk7Ci0KLQljbGtkaXYwICY9IFMzQzI0NDNfQ0xLRElWMF9QUkVESVZfTUFTSzsKLQljbGtkaXYwID4+PSBTM0MyNDQzX0NMS0RJVjBfUFJFRElWX1NISUZUOwotCi0JcmV0dXJuIHJhdGUgLyAoY2xrZGl2MCArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfcHJlZGl2ID0gewotCS5uYW1lCQk9ICJwcmVkaXYiLAotCS5wYXJlbnQJCT0gJmNsa19tc3lzY2xrLmNsaywKLQkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKLQkJLmdldF9yYXRlCT0gczNjMjQ0M19wcmVkaXZfZ2V0cmF0ZSwKLQl9LAotfTsKLQotLyogaGNsayBkaXZpZGVyCi0gKgotICogZGl2aWRlcyB0aGUgcHJlZGl2IGFuZCBwcm92aWRlcyB0aGUgaGNsay4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2hjbGtkaXZfZ2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsa2RpdjAgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjApOwotCi0JY2xrZGl2MCAmPSBTM0MyNDQzX0NMS0RJVjBfSENMS0RJVl9NQVNLOwotCi0JcmV0dXJuIHJhdGUgLyAoY2xrZGl2MCArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgY2xrX2hfb3BzID0gewotCS5nZXRfcmF0ZQk9IHMzYzI0NDNfaGNsa2Rpdl9nZXRyYXRlLAotfTsKLQotLyogcGNsayBkaXZpZGVyCi0gKgotICogZGl2aWRlcyB0aGUgaGNsayBhbmQgcHJvdmlkZXMgdGhlIHBjbGsuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19wY2xrZGl2X2dldHJhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXYwID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYwKTsKLQotCWNsa2RpdjAgPSAoKGNsa2RpdjAgJiBTM0MyNDQzX0NMS0RJVjBfSEFMRl9QQ0xLKSA/IDEgOiAwKTsKLQotCXJldHVybiByYXRlIC8gKGNsa2RpdjAgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa19wX29wcyA9IHsKLQkuZ2V0X3JhdGUJPSBzM2MyNDQzX3BjbGtkaXZfZ2V0cmF0ZSwKLX07Ci0KLS8qIGFybWRpdgotICoKLSAqIHRoaXMgY2xvY2sgaXMgc291cmNlZCBmcm9tIG1zeXNjbGsgYW5kIGNhbiBoYXZlIGEgbnVtYmVyIG9mCi0gKiBkaXZpZGVyIHZhbHVlcyBhcHBsaWVkIHRvIGl0IHRvIHRoZW4gYmUgZmVkIGludG8gYXJtY2xrLgotKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCAqYXJtZGl2Owotc3RhdGljIGludCBucl9hcm1kaXY7Ci1zdGF0aWMgaW50IGFybWRpdm1hc2s7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfYXJtY2xrX3JvdW5kcmF0ZShzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjYWxjOwotCXVuc2lnbmVkIGJlc3QgPSAyNTY7IC8qIGJpZ2dlciB0aGFuIGFueSB2YWx1ZSAqLwotCXVuc2lnbmVkIGRpdjsKLQlpbnQgcHRyOwotCi0JaWYgKCFucl9hcm1kaXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSAwOyBwdHIgPCBucl9hcm1kaXY7IHB0cisrKSB7Ci0JCWRpdiA9IGFybWRpdltwdHJdOwotCQlpZiAoZGl2KSB7Ci0JCQkvKiBjcHVmcmVxIHByb3ZpZGVzIDI2Nm1oeiBhcyAyNjY2NjYwMDAgbm90IDI2NjY2NjY2NiAqLwotCQkJY2FsYyA9IChwYXJlbnQgLyBkaXYgLyAxMDAwKSAqIDEwMDA7Ci0JCQlpZiAoY2FsYyA8PSByYXRlICYmIGRpdiA8IGJlc3QpCi0JCQkJYmVzdCA9IGRpdjsKLQkJfQotCX0KLQotCXJldHVybiBwYXJlbnQgLyBiZXN0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2FybWNsa19nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgY2xrY29uMDsKLQlpbnQgdmFsOwotCi0JaWYgKCFucl9hcm1kaXYgfHwgIWFybWRpdm1hc2spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrY29uMCA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMCk7Ci0JY2xrY29uMCAmPSBhcm1kaXZtYXNrOwotCXZhbCA9IGNsa2NvbjAgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVDsKLQotCXJldHVybiByYXRlIC8gYXJtZGl2W3ZhbF07Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0M19hcm1jbGtfc2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjYWxjOwotCXVuc2lnbmVkIGRpdjsKLQl1bnNpZ25lZCBiZXN0ID0gMjU2OyAvKiBiaWdnZXIgdGhhbiBhbnkgdmFsdWUgKi8KLQlpbnQgcHRyOwotCWludCB2YWwgPSAtMTsKLQotCWlmICghbnJfYXJtZGl2IHx8ICFhcm1kaXZtYXNrKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgbnJfYXJtZGl2OyBwdHIrKykgewotCQlkaXYgPSBhcm1kaXZbcHRyXTsKLQkJaWYgKGRpdikgewotCQkJLyogY3B1ZnJlcSBwcm92aWRlcyAyNjZtaHogYXMgMjY2NjY2MDAwIG5vdCAyNjY2NjY2NjYgKi8KLQkJCWNhbGMgPSAocGFyZW50IC8gZGl2IC8gMTAwMCkgKiAxMDAwOwotCQkJaWYgKGNhbGMgPD0gcmF0ZSAmJiBkaXYgPCBiZXN0KSB7Ci0JCQkJYmVzdCA9IGRpdjsKLQkJCQl2YWwgPSBwdHI7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAodmFsID49IDApIHsKLQkJdW5zaWduZWQgbG9uZyBjbGtjb24wOwotCi0JCWNsa2NvbjAgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjApOwotCQljbGtjb24wICY9IH5hcm1kaXZtYXNrOwotCQljbGtjb24wIHw9IHZhbCA8PCBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUOwotCQlfX3Jhd193cml0ZWwoY2xrY29uMCwgUzNDMjQ0M19DTEtESVYwKTsKLQl9Ci0KLQlyZXR1cm4gKHZhbCA9PSAtMSkgPyAtRUlOVkFMIDogMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2FybWRpdiA9IHsKLQkubmFtZQkJPSAiYXJtZGl2IiwKLQkucGFyZW50CQk9ICZjbGtfbXN5c2Nsay5jbGssCi0JLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7Ci0JCS5yb3VuZF9yYXRlID0gczNjMjQ0M19hcm1jbGtfcm91bmRyYXRlLAotCQkuZ2V0X3JhdGUgPSBzM2MyNDQzX2FybWNsa19nZXRyYXRlLAotCQkuc2V0X3JhdGUgPSBzM2MyNDQzX2FybWNsa19zZXRyYXRlLAotCX0sCi19OwotCi0vKiBhcm1jbGsKLSAqCi0gKiB0aGlzIGlzIHRoZSBjbG9jayBmZWQgaW50byB0aGUgQVJNIGNvcmUgaXRzZWxmLCBmcm9tIGFybWRpdiBvciBmcm9tIGhjbGsuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19hcm1fc291cmNlc1tdID0gewotCVswXSA9ICZjbGtfYXJtZGl2LAotCVsxXSA9ICZjbGtfaCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYXJtID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJhcm1jbGsiLAotCX0sCi0JLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgewotCQkuc291cmNlcyA9IGNsa19hcm1fc291cmNlcywKLQkJLm5yX3NvdXJjZXMgPSBBUlJBWV9TSVpFKGNsa19hcm1fc291cmNlcyksCi0JfSwKLQkucmVnX3NyYyA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLRElWMCwgLnNpemUgPSAxLCAuc2hpZnQgPSAxMyB9LAotfTsKLQotLyogdXNiaG9zdAotICoKLSAqIHVzYiBob3N0IGJ1cy1jbG9jaywgdXN1YWxseSA0OE1IeiB0byBwcm92aWRlIFVTQiBidXMgY2xvY2sgdGltaW5nCi0qLwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3VzYl9idXNfaG9zdCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0LXBhcmVudCIsCi0JCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLmNsaywKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fVVNCSE9TVCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQl9LAotCS5yZWdfZGl2ID0geyAucmVnID0gUzNDMjQ0M19DTEtESVYxLCAuc2l6ZSA9IDIsIC5zaGlmdCA9IDQgfSwKLX07Ci0KLS8qIGNvbW1vbiBjbGtzcmMgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtzcmNfY2xrc1tdID0gewotCXsKLQkJLyogY2FtZXJhIGludGVyZmFjZSBidXMtY2xvY2ssIGRpdmlkZWQgZG93biBmcm9tIGVzeXNjbGsgKi8KLQkJLmNsawk9IHsKLQkJCS5uYW1lCQk9ICJjYW1pZi11cGxsIiwJLyogc2FtZSBhcyAyNDQwIG5hbWUgKi8KLQkJCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLmNsaywKLQkJCS5jdHJsYml0CT0gUzNDMjQ0M19TQ0xLQ09OX0NBTUNMSywKLQkJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCi0JCX0sCi0JCS5yZWdfZGl2ID0geyAucmVnID0gUzNDMjQ0M19DTEtESVYxLCAuc2l6ZSA9IDQsIC5zaGlmdCA9IDI2IH0sCi0JfSwgewotCQkuY2xrCT0gewotCQkJLm5hbWUJCT0gImRpc3BsYXktaWYiLAotCQkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAotCQkJLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fRElTUENMSywKLQkJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCi0JCX0sCi0JCS5yZWdfZGl2ID0geyAucmVnID0gUzNDMjQ0M19DTEtESVYxLCAuc2l6ZSA9IDgsIC5zaGlmdCA9IDE2IH0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfZXN5c191YXJ0ID0gewotCS8qIEFSVCBiYXVkLXJhdGUgY2xvY2sgc291cmNlZCBmcm9tIGVzeXNjbGsgdmlhIGEgZGl2aXNvciAqLwotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJ1YXJ0Y2xrIiwKLQkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAotCX0sCi0JLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS0RJVjEsIC5zaXplID0gNCwgLnNoaWZ0ID0gOCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2kyc19leHQgPSB7Ci0JLm5hbWUJCT0gImkycy1leHQiLAotfTsKLQotLyogaTJzX2VwbGxkaXYKLSAqCi0gKiBUaGlzIGNsb2NrIGlzIHRoZSBvdXRwdXQgZnJvbSB0aGUgSTJTIGRpdmlzb3Igb2YgRVNZU0NMSywgYW5kIGlzIHNlcGFyYXRlCi0gKiBmcm9tIHRoZSBtdXggdGhhdCBjb21lcyBhZnRlciBpdCAoY2Fubm90IG1lcmdlIGludG8gb25lIHNpbmdsZSBjbG9jaykKLSovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfaTJzX2VwbGxkaXYgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImkycy1lcGxsZGl2IiwKLQkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAotCX0sCi0JLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS0RJVjEsIC5zaXplID0gNCwgLnNoaWZ0ID0gMTIsIH0sCi19OwotCi0vKiBpMnMtcmVmCi0gKgotICogaTJzIGJ1cyByZWZlcmVuY2UgY2xvY2ssIHNlbGVjdGFibGUgZnJvbSBleHRlcm5hbCwgZXN5c2NsayBvciBlcGxscmVmCi0gKgotICogTm90ZSwgdGhpcyB1c2VkIHRvIGJlIHR3byBjbG9ja3MsIGJ1dCB3YXMgY29tcHJlc3NlZCBpbnRvIG9uZS4KLSovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfaTJzX3NyY2xpc3RbXSA9IHsKLQlbMF0gPSAmY2xrX2kyc19lcGxsZGl2LmNsaywKLQlbMV0gPSAmY2xrX2kyc19leHQsCi0JWzJdID0gJmNsa19lcGxscmVmLmNsaywKLQlbM10gPSAmY2xrX2VwbGxyZWYuY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19pMnMgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImkycy1pZiIsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19TQ0xLQ09OX0kyU0NMSywKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQotCX0sCi0JLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgewotCQkuc291cmNlcyA9IGNsa19pMnNfc3JjbGlzdCwKLQkJLm5yX3NvdXJjZXMgPSBBUlJBWV9TSVpFKGNsa19pMnNfc3JjbGlzdCksCi0JfSwKLQkucmVnX3NyYyA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLU1JDLCAuc2l6ZSA9IDIsIC5zaGlmdCA9IDE0IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc19vZmZbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJpaXMiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fSUlTLAotCX0sIHsKLQkJLm5hbWUJCT0gImFkYyIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9BREMsCi0JfSwgewotCQkubmFtZQkJPSAiaTJjIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3AsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX0lJQywKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc1tdID0gewotCXsKLQkJLm5hbWUJCT0gImRtYS4wIiwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX0RNQTAsCi0JfSwgewotCQkubmFtZQkJPSAiZG1hLjEiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fRE1BMSwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJkbWEuMiIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9ETUEyLAotCX0sIHsKLQkJLm5hbWUJCT0gImRtYS4zIiwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX0RNQTMsCi0JfSwgewotCQkubmFtZQkJPSAiZG1hLjQiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fRE1BNCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJkbWEuNSIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9ETUE1LAotCX0sIHsKLQkJLm5hbWUJCT0gImdwaW8iLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fR1BJTywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ1c2ItaG9zdCIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9VU0JILAotCX0sIHsKLQkJLm5hbWUJCT0gInVzYi1kZXZpY2UiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fVVNCRCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJsY2QiLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fTENEQywKLQotCX0sIHsKLQkJLm5hbWUJCT0gInRpbWVycyIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9QV01ULAotCX0sIHsKLQkJLm5hbWUJCT0gImNmYyIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9DRkMsCi0JfSwgewotCQkubmFtZQkJPSAic3NtYyIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9TU01DLAotCX0sIHsKLQkJLm5hbWUJCT0gInVhcnQiLAotCQkuZGV2bmFtZQk9ICJzM2MyNDQwLXVhcnQuMCIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9VQVJUMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ1YXJ0IiwKLQkJLmRldm5hbWUJPSAiczNjMjQ0MC11YXJ0LjEiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fVUFSVDEsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5kZXZuYW1lCT0gInMzYzI0NDAtdWFydC4yIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3AsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX1VBUlQyLAotCX0sIHsKLQkJLm5hbWUJCT0gInVhcnQiLAotCQkuZGV2bmFtZQk9ICJzM2MyNDQwLXVhcnQuMyIsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9VQVJUMywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJydGMiLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKLQkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fUlRDLAotCX0sIHsKLQkJLm5hbWUJCT0gIndhdGNoZG9nIiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX1dEVCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJhYzk3IiwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX0FDOTcsCi0JfSwgewotCQkubmFtZQkJPSAibmFuZCIsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCX0sIHsKLQkJLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCi0JCS5wYXJlbnQJCT0gJmNsa191c2JfYnVzX2hvc3QuY2xrLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhzbW1jMV9jbGsgPSB7Ci0JLm5hbWUJCT0gImhzbW1jIiwKLQkuZGV2bmFtZQk9ICJzM2Mtc2RoY2kuMSIsCi0JLnBhcmVudAkJPSAmY2xrX2gsCi0JLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKLQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9IU01NQywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhzc3BpX2NsayA9IHsKLQkubmFtZQkJPSAic3BpIiwKLQkuZGV2bmFtZQk9ICJzM2MyNDQzLXNwaS4wIiwKLQkucGFyZW50CQk9ICZjbGtfcCwKLQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAotCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX0hTU1BJLAotfTsKLQotLyogRVBMTENPTiBjb21wYXRpYmxlIGVub3VnaCB0byBnZXQgb24vb2ZmIGluZm9ybWF0aW9uICovCi0KLXZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQ0M19jb21tb25fc2V0dXBfY2xvY2tzKHBsbF9mbiBnZXRfbXBsbCkKLXsKLQl1bnNpZ25lZCBsb25nIGVwbGxjb24gPSBfX3Jhd19yZWFkbChTM0MyNDQzX0VQTExDT04pOwotCXVuc2lnbmVkIGxvbmcgbXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfTVBMTENPTik7Ci0Jc3RydWN0IGNsayAqeHRhbF9jbGs7Ci0JdW5zaWduZWQgbG9uZyB4dGFsOwotCXVuc2lnbmVkIGxvbmcgcGxsOwotCWludCBwdHI7Ci0KLQl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKLQl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKLQljbGtfcHV0KHh0YWxfY2xrKTsKLQotCXBsbCA9IGdldF9tcGxsKG1wbGxjb24sIHh0YWwpOwotCWNsa19tc3lzY2xrLmNsay5yYXRlID0gcGxsOwotCWNsa19tcGxsLnJhdGUgPSBwbGw7Ci0KLQlwcmludGsoIkNQVTogTVBMTCAlcyAlbGQuJTAzbGQgTUh6LCBjcHUgJWxkLiUwM2xkIE1IeiwgbWVtICVsZC4lMDNsZCBNSHosIHBjbGsgJWxkLiUwM2xkIE1IelxuIiwKLQkgICAgICAgKG1wbGxjb24gJiBTM0MyNDQzX1BMTENPTl9PRkYpID8gIm9mZiIgOiAib24iLAotCSAgICAgICBwcmludF9taHoocGxsKSwgcHJpbnRfbWh6KGNsa19nZXRfcmF0ZSgmY2xrX2FybWRpdikpLAotCSAgICAgICBwcmludF9taHooY2xrX2dldF9yYXRlKCZjbGtfaCkpLAotCSAgICAgICBwcmludF9taHooY2xrX2dldF9yYXRlKCZjbGtfcCkpKTsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShjbGtzcmNfY2xrcyk7IHB0cisrKQotCQlzM2Nfc2V0X2Nsa3NyYygmY2xrc3JjX2Nsa3NbcHRyXSwgdHJ1ZSk7Ci0KLQkvKiBlbnN1cmUgdXNiIGJ1cyBjbG9jayBpcyB3aXRoaW4gY29ycmVjdCByYXRlIG9mIDQ4TUh6ICovCi0KLQlpZiAoY2xrX2dldF9yYXRlKCZjbGtfdXNiX2J1c19ob3N0LmNsaykgIT0gKDQ4ICogMTAwMCAqIDEwMDApKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIldhcm5pbmc6IFVTQiBob3N0IGJ1cyBub3QgYXQgNDhNSHpcbiIpOwotCQljbGtfc2V0X3JhdGUoJmNsa191c2JfYnVzX2hvc3QuY2xrLCA0OCoxMDAwKjEwMDApOwotCX0KLQotCXByaW50aygiQ1BVOiBFUExMICVzICVsZC4lMDNsZCBNSHosIHVzYi1idXMgJWxkLiUwM2xkIE1IelxuIiwKLQkgICAgICAgKGVwbGxjb24gJiBTM0MyNDQzX1BMTENPTl9PRkYpID8gIm9mZiIgOiAib24iLAotCSAgICAgICBwcmludF9taHooY2xrX2dldF9yYXRlKCZjbGtfZXBsbCkpLAotCSAgICAgICBwcmludF9taHooY2xrX2dldF9yYXRlKCZjbGtfdXNiX2J1cykpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0gewotCSZjbGtfcHJlZGl2LAotCSZjbGtfbXBsbHJlZiwKLQkmY2xrX21kaXZjbGssCi0JJmNsa19leHQsCi0JJmNsa19lcGxsLAotCSZjbGtfdXNiX2J1cywKLQkmY2xrX2FybWRpdiwKLQkmaHNtbWMxX2NsaywKLQkmaHNzcGlfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrICpjbGtzcmNzW10gX19pbml0ZGF0YSA9IHsKLQkmY2xrX2kyc19lcGxsZGl2LAotCSZjbGtfaTJzLAotCSZjbGtfdXNiX2J1c19ob3N0LAotCSZjbGtfZXBsbHJlZiwKLQkmY2xrX2VzeXNjbGssCi0JJmNsa19tc3lzY2xrLAotCSZjbGtfYXJtLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHMzYzI0NDNfY2xrX2xvb2t1cFtdID0gewotCUNMS0RFVl9JTklUKE5VTEwsICJjbGtfdWFydF9iYXVkMSIsICZzM2MyNHh4X3VjbGspLAotCUNMS0RFVl9JTklUKE5VTEwsICJjbGtfdWFydF9iYXVkMiIsICZjbGtfcCksCi0JQ0xLREVWX0lOSVQoTlVMTCwgImNsa191YXJ0X2JhdWQzIiwgJmNsa19lc3lzX3VhcnQuY2xrKSwKLQlDTEtERVZfSU5JVCgiczNjLXNkaGNpLjEiLCAibW1jX2J1c2Nsay4wIiwgJmhzbW1jMV9jbGspLAotCUNMS0RFVl9JTklUKCJzM2MyNDQzLXNwaS4wIiwgInNwaV9idXNjbGswIiwgJmhzc3BpX2NsayksCi19OwotCi12b2lkIF9faW5pdCBzM2MyNDQzX2NvbW1vbl9pbml0X2Nsb2NrcyhpbnQgeHRhbCwgcGxsX2ZuIGdldF9tcGxsLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRpdnMsIGludCBucl9kaXZzLAotCQkJCSAgICAgICBpbnQgZGl2bWFzaykKLXsKLQlpbnQgcHRyOwotCi0JYXJtZGl2ID0gZGl2czsKLQlucl9hcm1kaXYgPSBucl9kaXZzOwotCWFybWRpdm1hc2sgPSBkaXZtYXNrOwotCi0JLyogczNjMjQ0MyBwYXJlbnRzIGggY2xvY2sgZnJvbSBwcmVkaXYgKi8KLQljbGtfaC5wYXJlbnQgPSAmY2xrX3ByZWRpdjsKLQljbGtfaC5vcHMgPSAmY2xrX2hfb3BzOwotCi0JLyogYW5kIHAgY2xvY2sgZnJvbSBoIGNsb2NrICovCi0JY2xrX3AucGFyZW50ID0gJmNsa19oOwotCWNsa19wLm9wcyA9ICZjbGtfcF9vcHM7Ci0KLQljbGtfdXNiX2J1cy5wYXJlbnQgPSAmY2xrX3VzYl9idXNfaG9zdC5jbGs7Ci0JY2xrX2VwbGwucGFyZW50ID0gJmNsa19lcGxscmVmLmNsazsKLQotCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhjbGtzLCBBUlJBWV9TSVpFKGNsa3MpKTsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShjbGtzcmNzKTsgcHRyKyspCi0JCXMzY19yZWdpc3Rlcl9jbGtzcmMoY2xrc3Jjc1twdHJdLCAxKTsKLQotCXMzY19yZWdpc3Rlcl9jbGtzcmMoY2xrc3JjX2Nsa3MsIEFSUkFZX1NJWkUoY2xrc3JjX2Nsa3MpKTsKLQlzM2NfcmVnaXN0ZXJfY2xvY2tzKGluaXRfY2xvY2tzLCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzKSk7Ci0KLQkvKiBTZWUgczNjMjQ0My9ldGMgbm90ZXMgb24gZGlzYWJsaW5nIGNsb2NrcyBhdCBpbml0IHRpbWUgKi8KLQlzM2NfcmVnaXN0ZXJfY2xvY2tzKGluaXRfY2xvY2tzX29mZiwgQVJSQVlfU0laRShpbml0X2Nsb2Nrc19vZmYpKTsKLQlzM2NfZGlzYWJsZV9jbG9ja3MoaW5pdF9jbG9ja3Nfb2ZmLCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX29mZikpOwotCWNsa2Rldl9hZGRfdGFibGUoczNjMjQ0M19jbGtfbG9va3VwLCBBUlJBWV9TSVpFKHMzYzI0NDNfY2xrX2xvb2t1cCkpOwotCi0JczNjMjQ0M19jb21tb25fc2V0dXBfY2xvY2tzKGdldF9tcGxsKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jb21tb24uYwppbmRleCAxYmM4ZTczLi5jMDc2M2I4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2NvbW1vbi5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgogI2luY2x1ZGUgPHBsYXQvcGxsLmg+CiAjaW5jbHVkZSA8cGxhdC9wd20tY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvd2F0Y2hkb2ctcmVzZXQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC03Myw3ICs3NCw2IEBACiAJCS5pZGNvZGUJCT0gMHgzMjQxMDAwMCwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0MTBfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDEwX2luaXRfY2xvY2tzLAogCQkuaW5pdF91YXJ0cwk9IHMzYzI0MTBfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQxMF9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0MTAKQEAgLTgyLDcgKzgyLDYgQEAKIAkJLmlkY29kZQkJPSAweDMyNDEwMDAyLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCiAJCS5tYXBfaW8JCT0gczNjMjQxMF9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzI0MTBfaW5pdF9jbG9ja3MsCiAJCS5pbml0X3VhcnRzCT0gczNjMjQxMF9pbml0X3VhcnRzLAogCQkuaW5pdAkJPSBzM2MyNDEwYV9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0MTBhCkBAIC05MSw3ICs5MCw2IEBACiAJCS5pZGNvZGUJCT0gMHgzMjQ0MDAwMCwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0NDBfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAogCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQ0MF9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0NDAKQEAgLTEwMCw3ICs5OCw2IEBACiAJCS5pZGNvZGUJCT0gMHgzMjQ0MDAwMSwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0NDBfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAogCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQ0MF9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0NDBhCkBAIC0xMDksNyArMTA2LDYgQEAKIAkJLmlkY29kZQkJPSAweDMyNDQwYWFhLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCiAJCS5tYXBfaW8JCT0gczNjMjQ0Ml9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzI0NHhfaW5pdF9jbG9ja3MsCiAJCS5pbml0X3VhcnRzCT0gczNjMjQ0eF9pbml0X3VhcnRzLAogCQkuaW5pdAkJPSBzM2MyNDQyX2luaXQsCiAJCS5uYW1lCQk9IG5hbWVfczNjMjQ0MgpAQCAtMTE4LDcgKzExNCw2IEBACiAJCS5pZGNvZGUJCT0gMHgzMjQ0MGFhYiwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0NDJfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAogCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQ0Ml9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0NDJiCkBAIC0xMjcsNyArMTIyLDYgQEAKIAkJLmlkY29kZQkJPSAweDMyNDEyMDAxLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCiAJCS5tYXBfaW8JCT0gczNjMjQxMl9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzI0MTJfaW5pdF9jbG9ja3MsCiAJCS5pbml0X3VhcnRzCT0gczNjMjQxMl9pbml0X3VhcnRzLAogCQkuaW5pdAkJPSBzM2MyNDEyX2luaXQsCiAJCS5uYW1lCQk9IG5hbWVfczNjMjQxMiwKQEAgLTEzNiw3ICsxMzAsNiBAQAogCQkuaWRjb2RlCQk9IDB4MzI0MTIwMDMsCiAJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKIAkJLm1hcF9pbwkJPSBzM2MyNDEyX21hcF9pbywKLQkJLmluaXRfY2xvY2tzCT0gczNjMjQxMl9pbml0X2Nsb2NrcywKIAkJLmluaXRfdWFydHMJPSBzM2MyNDEyX2luaXRfdWFydHMsCiAJCS5pbml0CQk9IHMzYzI0MTJfaW5pdCwKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDEyLApAQCAtMTQ1LDcgKzEzOCw2IEBACiAJCS5pZGNvZGUJCT0gMHgzMjQ1MDAwMywKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0MTZfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDE2X2luaXRfY2xvY2tzLAogCQkuaW5pdF91YXJ0cwk9IHMzYzI0MTZfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQxNl9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0MTYsCkBAIC0xNTQsNyArMTQ2LDYgQEAKIAkJLmlkY29kZQkJPSAweDMyNDQzMDAxLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCiAJCS5tYXBfaW8JCT0gczNjMjQ0M19tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzI0NDNfaW5pdF9jbG9ja3MsCiAJCS5pbml0X3VhcnRzCT0gczNjMjQ0M19pbml0X3VhcnRzLAogCQkuaW5pdAkJPSBzM2MyNDQzX2luaXQsCiAJCS5uYW1lCQk9IG5hbWVfczNjMjQ0MywKQEAgLTMxNiwyMSArMzA3LDYgQEAKIAl9LAogfTsKIAotLyogaW5pdGlhbGlzZSBhbGwgdGhlIGNsb2NrcyAqLwotCi12b2lkIF9faW5pdF9vcl9jcHVmcmVxIHMzYzI0eHhfc2V0dXBfY2xvY2tzKHVuc2lnbmVkIGxvbmcgZmNsaywKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBoY2xrLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIHBjbGspCi17Ci0JY2xrX3VwbGwucmF0ZSA9IHMzYzI0eHhfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX1VQTExDT04pLAotCQkJCQljbGtfeHRhbC5yYXRlKTsKLQotCWNsa19tcGxsLnJhdGUgPSBmY2xrOwotCWNsa19oLnJhdGUgPSBoY2xrOwotCWNsa19wLnJhdGUgPSBwY2xrOwotCWNsa19mLnJhdGUgPSBmY2xrOwotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEyKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2MyNDEwX2RtYV9yZXNvdXJjZVtdID0gewpAQCAtNTM0LDMgKzUxMCw2MiBAQAogCX0sCiB9OwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01NT05fQ0xLKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMCkKK3ZvaWQgX19pbml0IHMzYzI0MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJczNjMjQxMF9jb21tb25fY2xrX2luaXQoTlVMTCwgeHRhbCwgMCwgUzNDMjRYWF9WQV9DTEtQV1IpOworCXNhbXN1bmdfd2R0X3Jlc2V0X2luaXQoUzNDMjRYWF9WQV9XQVRDSERPRyk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQxMgordm9pZCBfX2luaXQgczNjMjQxMl9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwlzM2MyNDEyX2NvbW1vbl9jbGtfaW5pdChOVUxMLCB4dGFsLCAwLCBTM0MyNFhYX1ZBX0NMS1BXUik7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQxNgordm9pZCBfX2luaXQgczNjMjQxNl9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwlzM2MyNDQzX2NvbW1vbl9jbGtfaW5pdChOVUxMLCB4dGFsLCAwLCBTM0MyNFhYX1ZBX0NMS1BXUik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NPTU1PTl9DTEspICYmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKQordm9pZCBfX2luaXQgczNjMjQ0MF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwlzM2MyNDEwX2NvbW1vbl9jbGtfaW5pdChOVUxMLCB4dGFsLCAxLCBTM0MyNFhYX1ZBX0NMS1BXUik7CisJc2Ftc3VuZ193ZHRfcmVzZXRfaW5pdChTM0MyNFhYX1ZBX1dBVENIRE9HKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NTU9OX0NMSykgJiYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCit2b2lkIF9faW5pdCBzM2MyNDQyX2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXMzYzI0MTBfY29tbW9uX2Nsa19pbml0KE5VTEwsIHh0YWwsIDIsIFMzQzI0WFhfVkFfQ0xLUFdSKTsKKwlzYW1zdW5nX3dkdF9yZXNldF9pbml0KFMzQzI0WFhfVkFfV0FUQ0hET0cpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDMKK3ZvaWQgX19pbml0IHMzYzI0NDNfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJczNjMjQ0M19jb21tb25fY2xrX2luaXQoTlVMTCwgeHRhbCwgMSwgUzNDMjRYWF9WQV9DTEtQV1IpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjMjQxMF9kY2xrX3Jlc291cmNlW10gPSB7CisJWzBdID0gREVGSU5FX1JFU19NRU0oMHg1NjAwMDA4NCwgMHg0KSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjQxMF9kZXZpY2VfZGNsayA9IHsKKwkubmFtZQkJPSAiczNjMjQxMC1kY2xrIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjMjQxMF9kY2xrX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBzM2MyNDEwX2RjbGtfcmVzb3VyY2UsCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY29tbW9uLmgKaW5kZXggZTQ2YzEwNDEuLmFjM2ZmMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY29tbW9uLmgKQEAgLTY3LDE2ICs2NywxNSBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKIGV4dGVybiB2b2lkIHMzYzI0NHhfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKLWV4dGVybiB2b2lkIHMzYzI0NHhfaW5pdF9jbG9ja3MoaW50IHh0YWwpOwogZXh0ZXJuIHZvaWQgczNjMjQ0eF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKTsKICNlbHNlCi0jZGVmaW5lIHMzYzI0NHhfaW5pdF9jbG9ja3MgTlVMTAogI2RlZmluZSBzM2MyNDR4X2luaXRfdWFydHMgTlVMTAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKIGV4dGVybiAgaW50IHMzYzI0NDBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHMzYzI0NDBfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjMjQ0MF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CiBleHRlcm4gdm9pZCBzM2MyNDQwX2luaXRfaXJxKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgczNjMjQ0MF9pbml0IE5VTEwKQEAgLTg2LDYgKzg1LDcgQEAKICNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDIKIGV4dGVybiAgaW50IHMzYzI0NDJfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHMzYzI0NDJfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjMjQ0Ml9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CiBleHRlcm4gdm9pZCBzM2MyNDQyX2luaXRfaXJxKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgczNjMjQ0Ml9pbml0IE5VTEwKQEAgLTExNCw0ICsxMTQsMjEgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0NDBfZGV2aWNlX2RtYTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0NDNfZGV2aWNlX2RtYTsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjQxMF9kZXZpY2VfZGNsazsKKworI2lmZGVmIENPTkZJR19TM0MyNDEwX0NPTU1PTl9DTEsKK3ZvaWQgX19pbml0IHMzYzI0MTBfY29tbW9uX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHVuc2lnbmVkIGxvbmcgeHRpX2YsCisJCQkJICAgIGludCBjdXJyZW50X3NvYywKKwkJCQkgICAgdm9pZCBfX2lvbWVtICpyZWdfYmFzZSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUzNDMjQxMl9DT01NT05fQ0xLCit2b2lkIF9faW5pdCBzM2MyNDEyX2NvbW1vbl9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1bnNpZ25lZCBsb25nIHh0aV9mLAorCQkJCXVuc2lnbmVkIGxvbmcgZXh0X2YsIHZvaWQgX19pb21lbSAqcmVnX2Jhc2UpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1MzQzI0NDNfQ09NTU9OX0NMSwordm9pZCBfX2luaXQgczNjMjQ0M19jb21tb25fY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwgdW5zaWduZWQgbG9uZyB4dGlfZiwKKwkJCQkgICAgaW50IGN1cnJlbnRfc29jLAorCQkJCSAgICB2b2lkIF9faW9tZW0gKnJlZ19iYXNlKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BUkNIX0FSTV9NQUNIX1MzQzI0WFhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jcHVmcmVxLXV0aWxzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvY3B1ZnJlcS11dGlscy5jCmluZGV4IDJhMGFhNTYuLmQ0ZDk1MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9jcHVmcmVxLXV0aWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2NwdWZyZXEtdXRpbHMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgpAQCAtNjAsNSArNjEsNiBAQAogICovCiB2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQogewotCV9fcmF3X3dyaXRlbChjZmctPnBsbC5kcml2ZXJfZGF0YSwgUzNDMjQxMF9NUExMQ09OKTsKKwlpZiAoIUlTX0VSUihjZmctPm1wbGwpKQorCQljbGtfc2V0X3JhdGUoY2ZnLT5tcGxsLCBjZmctPnBsbC5mcmVxdWVuY3kpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjM5NzM3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKLSAqCi0gKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcwotICoKLSAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zM2MuaD4KLQotI2RlZmluZSBTM0MyNDEwX1VBUlQxX09GRiAoMHg0MDAwKQotI2RlZmluZSBTSElGVF8yNDQwVFhGICgxNC05KQotCi0JLm1hY3JvIGFkZHJ1YXJ0LCBycCwgcnYsIHRtcAotCQlsZHIJXHJwLCA9IFMzQzI0WFhfUEFfVUFSVAotCQlsZHIJXHJ2LCA9IFMzQzI0WFhfVkFfVUFSVAotI2lmIENPTkZJR19ERUJVR19TM0NfVUFSVCAhPSAwCi0JCWFkZAlccnAsIFxycCwgIyhTM0MyNDEwX1VBUlQxX09GRiAqIENPTkZJR19ERUJVR19TM0NfVUFSVCkKLQkJYWRkCVxydiwgXHJ2LCAjKFMzQzI0MTBfVUFSVDFfT0ZGICogQ09ORklHX0RFQlVHX1MzQ19VQVJUKQotI2VuZGlmCi0JLmVuZG0KLQotCS5tYWNybyBmaWZvX2Z1bGxfczNjMjR4eCByZCwgcngKLQkJQCBjaGVjayBmb3IgYXJtOTIwIHZzIGFybTkyNi4gY3VycmVudGx5IGFzc3VtZSBhbGwgYXJtOTI2Ci0JCUAgZGV2aWNlcyBoYXZlIGFuIDY0IGJ5dGUgRklGTyBpZGVudGljYWwgdG8gdGhlIHMzYzI0NDAKLQkJbXJjCXAxNSwgMCwgXHJkLCBjMCwgYzAKLQkJYW5kCVxyZCwgXHJkLCAjMHhmZjAKLQkJdGVxCVxyZCwgIzB4MjYwCi0JCWJlcQkxMDA0ZgotCQltcmMJcDE1LCAwLCBccmQsIGMxLCBjMAotCQl0c3QJXHJkLCAjMQotCQlhZGRlcQlccmQsIFxyeCwgIyhTM0MyNFhYX1BBX0dQSU8gLSBTM0MyNFhYX1BBX1VBUlQpCi0JCWFkZG5lCVxyZCwgXHJ4LCAjKFMzQzI0WFhfVkFfR1BJTyAtIFMzQzI0WFhfVkFfVUFSVCkKLQkJYmljCVxyZCwgXHJkLCAjMHhmZjAwMAotCQlsZHIJXHJkLCBbXHJkLCAjIFMzQzI0MTBfR1NUQVRVUzEgLSBTM0MyNDEwX0dQSU9SRUcoMCldCi0JCWFuZAlccmQsIFxyZCwgIzB4MDBmZjAwMDAKLQkJdGVxCVxyZCwgIzB4MDA0NDAwMDAJCUAgaXMgaXQgMjQ0MD8KLTEwMDQ6Ci0JCWxkcglccmQsIFtccngsICMgUzNDMjQxMF9VRlNUQVRdCi0JCW1vdmVxCVxyZCwgXHJkLCBsc3IgI1NISUZUXzI0NDBUWEYKLQkJdHN0CVxyZCwgI1MzQzI0MTBfVUZTVEFUX1RYRlVMTAotCS5lbmRtCi0KLQkubWFjcm8gIGZpZm9fZnVsbF9zM2MyNDEwIHJkLCByeAotCQlsZHIJXHJkLCBbXHJ4LCAjIFMzQzI0MTBfVUZTVEFUXQotCQl0c3QJXHJkLCAjUzNDMjQxMF9VRlNUQVRfVFhGVUxMCi0JLmVuZG0KLQotLyogZmlmbyBsZXZlbCByZWFkaW5nICovCi0KLQkubWFjcm8gZmlmb19sZXZlbF9zM2MyNHh4IHJkLCByeAotCQlAIGNoZWNrIGZvciBhcm05MjAgdnMgYXJtOTI2LiBjdXJyZW50bHkgYXNzdW1lIGFsbCBhcm05MjYKLQkJQCBkZXZpY2VzIGhhdmUgYW4gNjQgYnl0ZSBGSUZPIGlkZW50aWNhbCB0byB0aGUgczNjMjQ0MAotCQltcmMJcDE1LCAwLCBccmQsIGMwLCBjMAotCQlhbmQJXHJkLCBccmQsICMweGZmMAotCQl0ZXEJXHJkLCAjMHgyNjAKLQkJYmVxCTEwMDAwZgotCQltcmMJcDE1LCAwLCBccmQsIGMxLCBjMAotCQl0c3QJXHJkLCAjMQotCQlhZGRlcQlccmQsIFxyeCwgIyhTM0MyNFhYX1BBX0dQSU8gLSBTM0MyNFhYX1BBX1VBUlQpCi0JCWFkZG5lCVxyZCwgXHJ4LCAjKFMzQzI0WFhfVkFfR1BJTyAtIFMzQzI0WFhfVkFfVUFSVCkKLQkJYmljCVxyZCwgXHJkLCAjMHhmZjAwMAotCQlsZHIJXHJkLCBbXHJkLCAjIFMzQzI0MTBfR1NUQVRVUzEgLSBTM0MyNDEwX0dQSU9SRUcoMCldCi0JCWFuZAlccmQsIFxyZCwgIzB4MDBmZjAwMDAKLQkJdGVxCVxyZCwgIzB4MDA0NDAwMDAJCUAgaXMgaXQgMjQ0MD8KLQotMTAwMDA6Ci0JCWxkcglccmQsIFtccngsICMgUzNDMjQxMF9VRlNUQVRdCi0JCWFuZG5lCVxyZCwgXHJkLCAjUzNDMjQxMF9VRlNUQVRfVFhNQVNLCi0JCWFuZGVxCVxyZCwgXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhNQVNLCi0JLmVuZG0KLQotCS5tYWNybyBmaWZvX2xldmVsX3MzYzI0MTAgcmQsIHJ4Ci0JCWxkcglccmQsIFtccngsICMgUzNDMjQxMF9VRlNUQVRdCi0JCWFuZAlccmQsIFxyZCwgI1MzQzI0MTBfVUZTVEFUX1RYTUFTSwotCS5lbmRtCi0KLS8qIFNlbGVjdCB0aGUgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZQotICogUzNDMjQ0MCB3aWxsIGdldCBzZWxlY3RlZCBieSBkZWZhdWx0LCBhcyB0aGVzZSBhcmUgdGhlIG1vc3Qgd2lkZWx5Ci0gKiB1c2VkIHZhcmlhbnRzIG9mIHRoZXNlCi0qLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xMU0VSSUFMX1MzQzI0MTBfT05MWSkKLSNkZWZpbmUgZmlmb19mdWxsICBmaWZvX2Z1bGxfczNjMjQxMAotI2RlZmluZSBmaWZvX2xldmVsIGZpZm9fbGV2ZWxfczNjMjQxMAotI2VsaWYgIWRlZmluZWQoQ09ORklHX0NQVV9MTFNFUklBTF9TM0MyNDQwX09OTFkpCi0jZGVmaW5lIGZpZm9fZnVsbCAgZmlmb19mdWxsX3MzYzI0eHgKLSNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3MzYzI0eHgKLSNlbmRpZgotCi0vKiBpbmNsdWRlIHRoZSByZXNldCBvZiB0aGUgY29kZSB3aGljaCB3aWxsIGRvIHRoZSB3b3JrICovCi0KLSNpbmNsdWRlIDxkZWJ1Zy9zYW1zdW5nLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCmluZGV4IDM0MTViNjAuLjNkYjZjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCkBAIC00MiwyNCArNDIsNiBAQAogI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9JSVMJICAgICAoMTw8MTcpCiAjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX1NQSQkgICAgICgxPDwxOCkKIAotLyogRENMS0NPTiByZWdpc3RlciBhZGRyZXNzZXMgaW4gZ3Bpby5oICovCi0KLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4JICAgICAoMTw8MCkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX1BDTEsgICAoMDw8MSkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX1VDTEsgICAoMTw8MSkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVih4KSAoKCh4KSAtIDEgKTw8NCkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUCh4KSAoKCh4KSAtIDEgKTw8OCkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVl9NQVNLICgoMHhmKTw8NCkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUF9NQVNLICgoMHhmKTw8OCkKLQotI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzFFTgkgICAgICgxPDwxNikKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1BDTEsgICAoMDw8MTcpCi0jZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLICAgKDE8PDE3KQotI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzFfRElWKHgpICgoKHgpIC0gMSkgPDwyMCkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUCh4KSAoKCh4KSAtIDEpIDw8MjQpCi0jZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9ESVZfTUFTSyAoKDB4ZikgPDwyMCkKLSNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUF9NQVNLICgoMHhmKSA8PDI0KQotCiAjZGVmaW5lIFMzQzI0MTBfQ0xLRElWTl9QRElWTgkgICAgICgxPDwwKQogI2RlZmluZSBTM0MyNDEwX0NMS0RJVk5fSERJVk4JICAgICAoMTw8MSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKaW5kZXggYzJlZjAxNi4uYzY1ODNjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCkBAIC00NTcsOSArNDU3LDYgQEAKIAogLyogbWlzY2VsbGFuZW91cyBjb250cm9sICovCiAjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSCSAgIFMzQzI0MTBfR1BJT1JFRygweDgwKQotI2RlZmluZSBTM0MyNDEwX0RDTEtDT04JICAgUzNDMjQxMF9HUElPUkVHKDB4ODQpCi0KLSNkZWZpbmUgUzNDMjRYWF9EQ0xLQ09OCSAgIFMzQzI0WFhfR1BJT1JFRzIoMHg4NCkKIAogLyogc2VlIGNsb2NrLmggZm9yIGRjbGsgZGVmaW5pdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtYW1sbTU5MDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWFtbG01OTAwLmMKaW5kZXggOGFjOTU1NC4uNTE1N2UyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtYW1sbTU5MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1hbWxtNTkwMC5jCkBAIC0xNjEsMTEgKzE2MSwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IGFtbG01OTAwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhhbWxtNTkwMF9pb2Rlc2MsIEFSUkFZX1NJWkUoYW1sbTU5MDBfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoYW1sbTU5MDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoYW1sbTU5MDBfdWFydGNmZ3MpKTsKIAlzYW1zdW5nX3NldF90aW1lcl9zb3VyY2UoU0FNU1VOR19QV00zLCBTQU1TVU5HX1BXTTQpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgYW1sbTU5MDBfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKICNpZmRlZiBDT05GSUdfRkJfUzNDMjQxMAogc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBfX2luaXRkYXRhIGFtbG01OTAwX2xjZF9pbmZvID0gewogCS53aWR0aAkJPSAxNjAsCkBAIC0yNDEsNiArMjQ2LDYgQEAKIAkubWFwX2lvCQk9IGFtbG01OTAwX21hcF9pbywKIAkuaW5pdF9pcnEJPSBzM2MyNDEwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBhbWxtNTkwMF9pbml0LAotCS5pbml0X3RpbWUJPSBzYW1zdW5nX3RpbWVyX2luaXQsCisJLmluaXRfdGltZQk9IGFtbG01OTAwX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0MTBfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWFudWJpcy5jCmluZGV4IDgxYTI3MGEuLmUwNTM1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWFudWJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWFudWJpcy5jCkBAIC00Niw3ICs0Niw2IEBACiAKICNpbmNsdWRlIDxuZXQvYXg4ODc5Ni5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hc29jLXMzYzI0eHhfc2ltdGVjLmg+CkBAIC0zNTIsNiArMzUxLDcgQEAKIC8qIFN0YW5kYXJkIEFudWJpcyBkZXZpY2VzICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphbnViaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzYzI0MTBfZGV2aWNlX2RjbGssCiAJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfYWRjLApAQCAtMzY0LDE0ICszNjQsNiBAQAogCSZhbnViaXNfZGV2aWNlX3NtNTAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmFudWJpc19jbG9ja3NbXSBfX2luaXRkYXRhID0gewotCSZzM2MyNHh4X2RjbGswLAotCSZzM2MyNHh4X2RjbGsxLAotCSZzM2MyNHh4X2Nsa291dDAsCi0JJnMzYzI0eHhfY2xrb3V0MSwKLQkmczNjMjR4eF91Y2xrLAotfTsKLQogLyogSTJDIGRldmljZXMuICovCiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gYW51YmlzX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKQEAgLTM5NCwyMyArMzg2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFudWJpc19tYXBfaW8odm9pZCkKIHsKLQkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgKi8KLQotCXMzYzI0eHhfZGNsazAucGFyZW50ID0gJmNsa191cGxsOwotCXMzYzI0eHhfZGNsazAucmF0ZSAgID0gMTIqMTAwMCoxMDAwOwotCi0JczNjMjR4eF9kY2xrMS5wYXJlbnQgPSAmY2xrX3VwbGw7Ci0JczNjMjR4eF9kY2xrMS5yYXRlICAgPSAyNCoxMDAwKjEwMDA7Ci0KLQlzM2MyNHh4X2Nsa291dDAucGFyZW50ICA9ICZzM2MyNHh4X2RjbGswOwotCXMzYzI0eHhfY2xrb3V0MS5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazE7Ci0KLQlzM2MyNHh4X3VjbGsucGFyZW50ICA9ICZzM2MyNHh4X2Nsa291dDE7Ci0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhhbnViaXNfY2xvY2tzLCBBUlJBWV9TSVpFKGFudWJpc19jbG9ja3MpKTsKLQogCXMzYzI0eHhfaW5pdF9pbyhhbnViaXNfaW9kZXNjLCBBUlJBWV9TSVpFKGFudWJpc19pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyhhbnViaXNfdWFydGNmZ3MsIEFSUkFZX1NJWkUoYW51YmlzX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIApAQCAtNDI4LDYgKzQwNCwxMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGFudWJpc19pbml0X3RpbWUodm9pZCkKK3sKKwlzM2MyNDQwX2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzYW1zdW5nX3RpbWVyX2luaXQoKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGFudWJpc19pbml0KHZvaWQpCiB7CiAJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwpAQCAtNDQ3LDYgKzQyOSw2IEBACiAJLm1hcF9pbwkJPSBhbnViaXNfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBhbnViaXNfaW5pdCwKIAkuaW5pdF9pcnEJPSBzM2MyNDQwX2luaXRfaXJxLAotCS5pbml0X3RpbWUJPSBzYW1zdW5nX3RpbWVyX2luaXQsCisJLmluaXRfdGltZQk9IGFudWJpc19pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDR4X3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtYXQyNDQwZXZiLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1hdDI0NDBldmIuYwppbmRleCBkOGY2YmIxLi45ZGI3NjhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1hdDI0NDBldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1hdDI0NDBldmIuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1zM2NtY2kuaD4KQEAgLTE5MiwxMSArMTkxLDE2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYXQyNDQwZXZiX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhhdDI0NDBldmJfaW9kZXNjLCBBUlJBWV9TSVpFKGF0MjQ0MGV2Yl9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDE2OTM0NDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoYXQyNDQwZXZiX3VhcnRjZmdzLCBBUlJBWV9TSVpFKGF0MjQ0MGV2Yl91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDI0NDBldmJfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQ0MF9pbml0X2Nsb2NrcygxNjkzNDQwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhdDI0NDBldmJfaW5pdCh2b2lkKQogewogCXMzYzI0eHhfZmJfc2V0X3BsYXRkYXRhKCZhdDI0NDBldmJfZmJfaW5mbyk7CkBAIC0yMTMsNiArMjE3LDYgQEAKIAkubWFwX2lvCQk9IGF0MjQ0MGV2Yl9tYXBfaW8sCiAJLmluaXRfbWFjaGluZQk9IGF0MjQ0MGV2Yl9pbml0LAogCS5pbml0X2lycQk9IHMzYzI0NDBfaW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gYXQyNDQwZXZiX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0NHhfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1iYXN0LmMKaW5kZXggZTM3MWZmNS4uZjkxMTJiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWJhc3QuYwpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8tc2Ftc3VuZy5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgpAQCAtNTIzLDYgKzUyMiw3IEBACiAvLyBjYXQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3MzYzI0eHgtYWRjL3MzYy1od21vbi9pbl8wCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpiYXN0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2MyNDEwX2RldmljZV9kY2xrLAogCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKQEAgLTUzNywxNCArNTM3LDYgQEAKIAkmYmFzdF9zaW8sCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqYmFzdF9jbG9ja3NbXSBfX2luaXRkYXRhID0gewotCSZzM2MyNHh4X2RjbGswLAotCSZzM2MyNHh4X2RjbGsxLAotCSZzM2MyNHh4X2Nsa291dDAsCi0JJnMzYzI0eHhfY2xrb3V0MSwKLQkmczNjMjR4eF91Y2xrLAotfTsKLQogc3RhdGljIHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCBfX2luaXRkYXRhIGJhc3RfY3B1ZnJlcSA9IHsKIAkucmVmcmVzaAk9IDc4MDAsIC8qIDcuOHVzZWMgKi8KIAkuYXV0b19pbwk9IDEsCkBAIC01NTgsMjkgKzU1MCwxOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYmFzdF9tYXBfaW8odm9pZCkKIHsKLQkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgKi8KLQotCXMzYzI0eHhfZGNsazAucGFyZW50ID0gJmNsa191cGxsOwotCXMzYzI0eHhfZGNsazAucmF0ZSAgID0gMTIqMTAwMCoxMDAwOwotCi0JczNjMjR4eF9kY2xrMS5wYXJlbnQgPSAmY2xrX3VwbGw7Ci0JczNjMjR4eF9kY2xrMS5yYXRlICAgPSAyNCoxMDAwKjEwMDA7Ci0KLQlzM2MyNHh4X2Nsa291dDAucGFyZW50ICA9ICZzM2MyNHh4X2RjbGswOwotCXMzYzI0eHhfY2xrb3V0MS5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazE7Ci0KLQlzM2MyNHh4X3VjbGsucGFyZW50ICA9ICZzM2MyNHh4X2Nsa291dDE7Ci0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhiYXN0X2Nsb2NrcywgQVJSQVlfU0laRShiYXN0X2Nsb2NrcykpOwotCiAJczNjX2h3bW9uX3NldF9wbGF0ZGF0YSgmYmFzdF9od21vbl9pbmZvKTsKIAogCXMzYzI0eHhfaW5pdF9pbyhiYXN0X2lvZGVzYywgQVJSQVlfU0laRShiYXN0X2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKGJhc3RfdWFydGNmZ3MsIEFSUkFZX1NJWkUoYmFzdF91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBiYXN0X2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0MTBfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgYmFzdF9pbml0KHZvaWQpCiB7CiAJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmJhc3RfcG1fc3lzY29yZV9vcHMpOwpAQCAtNjA4LDYgKzU5MCw2IEBACiAJLm1hcF9pbwkJPSBiYXN0X21hcF9pbywKIAkuaW5pdF9pcnEJPSBzM2MyNDEwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBiYXN0X2luaXQsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gYmFzdF9pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDEwX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtZ3RhMDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWd0YTAyLmMKaW5kZXggZGM0ZGI4NC4uZmMzYTA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtZ3RhMDIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1ndGEwMi5jCkBAIC01MDEsNyArNTAxLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBndGEwMl9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8oZ3RhMDJfaW9kZXNjLCBBUlJBWV9TSVpFKGd0YTAyX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyhndGEwMl91YXJ0Y2ZncywgQVJSQVlfU0laRShndGEwMl91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CkBAIC01ODUsNiArNTg0LDExIEBACiAJcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBndGEwMl9pbml0X3RpbWUodm9pZCkKK3sKKwlzM2MyNDQyX2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzYW1zdW5nX3RpbWVyX2luaXQoKTsKK30KIAogTUFDSElORV9TVEFSVChORU8xOTczX0dUQTAyLCAiR1RBMDIiKQogCS8qIE1haW50YWluZXI6IE5lbHNvbiBDYXN0aWxsbyA8YXJodWFjb0BmcmVha3MtdW5pZG9zLm5ldD4gKi8KQEAgLTU5Miw2ICs1OTYsNiBAQAogCS5tYXBfaW8JCT0gZ3RhMDJfbWFwX2lvLAogCS5pbml0X2lycQk9IHMzYzI0NDJfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGd0YTAyX21hY2hpbmVfaW5pdCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBndGEwMl9pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDR4X3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWgxOTQwLmMKaW5kZXggZTQ1M2FjZC4uZmJmNTQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtaDE5NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1oMTk0MC5jCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby1zYW1zdW5nLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CkBAIC02NDYsNyArNjQ1LDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8oaDE5NDBfaW9kZXNjLCBBUlJBWV9TSVpFKGgxOTQwX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKGgxOTQwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKGgxOTQwX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIApAQCAtNjYyLDYgKzY2MCwxMiBAQAogCVdBUk5fT04oZ3Bpb2NoaXBfYWRkKCZoMTk0MF9sYXRjaF9ncGlvY2hpcCkpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgaDE5NDBfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIC8qIEgxOTQwIGFuZCBSWDM3MTUgbmVlZCB0byByZXNlcnZlIHRoaXMgZm9yIHN1c3BlbmQgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9yZXNlcnZlKHZvaWQpCiB7CkBAIC03MzksNiArNzQzLDYgQEAKIAkucmVzZXJ2ZQk9IGgxOTQwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gczNjMjQxMF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gaDE5NDBfaW5pdCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBoMTk0MF9pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDEwX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtaml2ZS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtaml2ZS5jCmluZGV4IDVmYWE3MjMuLmU4MWVhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWppdmUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1qaXZlLmMKQEAgLTUwNywxMSArNTA3LDE2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaml2ZV9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8oaml2ZV9pb2Rlc2MsIEFSUkFZX1NJWkUoaml2ZV9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoaml2ZV91YXJ0Y2ZncywgQVJSQVlfU0laRShqaXZlX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGppdmVfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMl9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIGppdmVfcG93ZXJfb2ZmKHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAicG93ZXJpbmcgc3lzdGVtIGRvd24uLi5cbiIpOwpAQCAtNjY1LDYgKzY3MCw2IEBACiAJLmluaXRfaXJxCT0gczNjMjQxMl9pbml0X2lycSwKIAkubWFwX2lvCQk9IGppdmVfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBqaXZlX21hY2hpbmVfaW5pdCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBqaXZlX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0MTJfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1taW5pMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtbWluaTI0NDAuYwppbmRleCA5ZTU3ZmQ5Li41Y2M0MGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1taW5pMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLW1pbmkyNDQwLmMKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvc2Ftc3VuZy10aW1lLmg+CkBAIC01MjUsMTEgKzUyNCwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IG1pbmkyNDQwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhtaW5pMjQ0MF9pb2Rlc2MsIEFSUkFZX1NJWkUobWluaTI0NDBfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKG1pbmkyNDQwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG1pbmkyNDQwX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IG1pbmkyNDQwX2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0NDBfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiAvKgogICogbWluaTI0NDBfZmVhdHVyZXMgc3RyaW5nCiAgKgpAQCAtNjkwLDYgKzY5NCw2IEBACiAJLm1hcF9pbwkJPSBtaW5pMjQ0MF9tYXBfaW8sCiAJLmluaXRfbWFjaGluZQk9IG1pbmkyNDQwX2luaXQsCiAJLmluaXRfaXJxCT0gczNjMjQ0MF9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBtaW5pMjQ0MF9pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDR4X3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1uMzAuYwppbmRleCA0Y2NjYWFkLi4zYWMyYTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1uMzAuYwpAQCAtNDUsNyArNDUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pMmMtczNjMjQxMC5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tbWMtczNjbWNpLmg+CkBAIC01MzUsMTEgKzUzNCwxNiBAQAogewogCXMzYzI0eHhfaW5pdF9pbyhuMzBfaW9kZXNjLCBBUlJBWV9TSVpFKG4zMF9pb2Rlc2MpKTsKIAluMzBfaHdpbml0KCk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMobjMwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG4zMF91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBuMzBfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIC8qIEdQQjMgaXMgdGhlIGxpbmUgdGhhdCBjb250cm9scyB0aGUgcHVsbC11cCBmb3IgdGhlIFVTQiBEKyBsaW5lICovCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuMzBfaW5pdCh2b2lkKQpAQCAtNTkxLDcgKzU5NSw3IEBACiAJCQkJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgogCSovCiAJLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gbjMwX2luaXRfdGltZSwKIAkuaW5pdF9tYWNoaW5lCT0gbjMwX2luaXQsCiAJLmluaXRfaXJxCT0gczNjMjQxMF9pbml0X2lycSwKIAkubWFwX2lvCQk9IG4zMF9tYXBfaW8sCkBAIC02MDIsNyArNjA2LDcgQEAKIAkvKiBNYWludGFpbmVyOiBDaHJpc3RlciBXZWluaWdlbCA8Y2hyaXN0ZXJAd2VpbmlnZWwuc2U+CiAJKi8KIAkuYXRhZ19vZmZzZXQJPSAweDEwMCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBuMzBfaW5pdF90aW1lLAogCS5pbml0X21hY2hpbmUJPSBuMzBfaW5pdCwKIAkuaW5pdF9pcnEJPSBzM2MyNDEwX2luaXRfaXJxLAogCS5tYXBfaW8JCT0gbjMwX21hcF9pbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLW5leGNvZGVyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1uZXhjb2Rlci5jCmluZGV4IDMwNjY4NTEuLmM4MmMyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLW5leGNvZGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtbmV4Y29kZXIuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaTJjLXMzYzI0MTAuaD4KIAogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3NhbXN1bmctdGltZS5oPgpAQCAtMTM1LDEzICsxMzQsMTggQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBuZXhjb2Rlcl9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8obmV4Y29kZXJfaW9kZXNjLCBBUlJBWV9TSVpFKG5leGNvZGVyX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKG5leGNvZGVyX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG5leGNvZGVyX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIAogCW5leGNvZGVyX3NlbnNvcmJvYXJkX2luaXQoKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IG5leGNvZGVyX2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0NDBfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgbmV4Y29kZXJfaW5pdCh2b2lkKQogewogCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKQEAgLTE1NCw2ICsxNTgsNiBAQAogCS5tYXBfaW8JCT0gbmV4Y29kZXJfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBuZXhjb2Rlcl9pbml0LAogCS5pbml0X2lycQk9IHMzYzI0NDBfaW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gbmV4Y29kZXJfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQ0eF9yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLW9zaXJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtb3NpcmlzLmMKaW5kZXggYTRhZTRiYi4uMTg5MTQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtb3NpcmlzLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgpAQCAtMzQ0LDIwICszNDMsMTMgQEAKIC8qIFN0YW5kYXJkIE9zaXJpcyBkZXZpY2VzICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvc2lyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzYzI0MTBfZGV2aWNlX2RjbGssCiAJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfbmFuZCwKIAkmb3NpcmlzX3BjbWNpYSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpvc2lyaXNfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjMjR4eF9kY2xrMCwKLQkmczNjMjR4eF9kY2xrMSwKLQkmczNjMjR4eF9jbGtvdXQwLAotCSZzM2MyNHh4X2Nsa291dDEsCi0JJnMzYzI0eHhfdWNsaywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgX19pbml0ZGF0YSBvc2lyaXNfY3B1ZnJlcSA9IHsKIAkucmVmcmVzaAk9IDc4MDAsIC8qIHJlZnJlc2ggcGVyaW9kIGlzIDcuOHVzZWMgKi8KIAkuYXV0b19pbwk9IDEsCkBAIC0zNjgsMjMgKzM2MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLwotCi0JczNjMjR4eF9kY2xrMC5wYXJlbnQgPSAmY2xrX3VwbGw7Ci0JczNjMjR4eF9kY2xrMC5yYXRlICAgPSAxMioxMDAwKjEwMDA7Ci0KLQlzM2MyNHh4X2RjbGsxLnBhcmVudCA9ICZjbGtfdXBsbDsKLQlzM2MyNHh4X2RjbGsxLnJhdGUgICA9IDI0KjEwMDAqMTAwMDsKLQotCXMzYzI0eHhfY2xrb3V0MC5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazA7Ci0JczNjMjR4eF9jbGtvdXQxLnBhcmVudCAgPSAmczNjMjR4eF9kY2xrMTsKLQotCXMzYzI0eHhfdWNsay5wYXJlbnQgID0gJnMzYzI0eHhfY2xrb3V0MTsKLQotCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2tzKG9zaXJpc19jbG9ja3MsIEFSUkFZX1NJWkUob3NpcmlzX2Nsb2NrcykpOwotCiAJczNjMjR4eF9pbml0X2lvKG9zaXJpc19pb2Rlc2MsIEFSUkFZX1NJWkUob3NpcmlzX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKG9zaXJpc191YXJ0Y2ZncywgQVJSQVlfU0laRShvc2lyaXNfdWFydGNmZ3MpKTsKIAlzYW1zdW5nX3NldF90aW1lcl9zb3VyY2UoU0FNU1VOR19QV00zLCBTQU1TVU5HX1BXTTQpOwogCkBAIC00MDgsNiArMzg0LDEyIEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgb3NpcmlzX2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0NDBfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NpcmlzX2luaXQodm9pZCkKIHsKIAlyZWdpc3Rlcl9zeXNjb3JlX29wcygmb3NpcmlzX3BtX3N5c2NvcmVfb3BzKTsKQEAgLTQyOSw2ICs0MTEsNiBAQAogCS5tYXBfaW8JCT0gb3NpcmlzX21hcF9pbywKIAkuaW5pdF9pcnEJPSBzM2MyNDQwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvc2lyaXNfaW5pdCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBvc2lyaXNfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQ0eF9yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLW90b20uYwppbmRleCBiZGIzZmFhLi40NTgzMzAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtb3RvbS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L3NhbXN1bmctdGltZS5oPgpAQCAtMTAwLDExICs5OSwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IG90b20xMV9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8ob3RvbTExX2lvZGVzYywgQVJSQVlfU0laRShvdG9tMTFfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMob3RvbTExX3VhcnRjZmdzLCBBUlJBWV9TSVpFKG90b20xMV91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBvdG9tMTFfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvdG9tMTFfaW5pdCh2b2lkKQogewogCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKQEAgLTExNyw2ICsxMjEsNiBAQAogCS5tYXBfaW8JCT0gb3RvbTExX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gb3RvbTExX2luaXQsCiAJLmluaXRfaXJxCT0gczNjMjQxMF9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBvdG9tMTFfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQxMF9yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXF0MjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcXQyNDEwLmMKaW5kZXggOGMxMjc4Ny4uMjI4YzkwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcXQyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcXQyNDEwLmMKQEAgLTMwNCwxMSArMzA0LDE2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcXQyNDEwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhxdDI0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHF0MjQxMF9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyKjEwMDAqMTAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKHNtZGsyNDEwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGsyNDEwX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHF0MjQxMF9pbml0X3RpbWUodm9pZCkKK3sKKwlzM2MyNDEwX2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzYW1zdW5nX3RpbWVyX2luaXQoKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHF0MjQxMF9tYWNoaW5lX2luaXQodm9pZCkKIHsKIAlzM2NfbmFuZF9zZXRfcGxhdGRhdGEoJnF0MjQxMF9uYW5kX2luZm8pOwpAQCAtMzQ2LDYgKzM1MSw2IEBACiAJLm1hcF9pbwkJPSBxdDI0MTBfbWFwX2lvLAogCS5pbml0X2lycQk9IHMzYzI0MTBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHF0MjQxMF9tYWNoaW5lX2luaXQsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gcXQyNDEwX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0MTBfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1yeDE5NTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXJ4MTk1MC5jCmluZGV4IGFmYjc4NGUuLmUyYzY1NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXJ4MTk1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXJ4MTk1MC5jCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby1zYW1zdW5nLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L3BtLmg+CkBAIC03MTAsNiArNzA5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyeDE5NTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzYzI0MTBfZGV2aWNlX2RjbGssCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLApAQCAtNzI4LDIwICs3MjgsOSBAQAogCSZyeDE5NTBfbGVkcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpyeDE5NTBfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjMjR4eF9jbGtvdXQwLAotCSZzM2MyNHh4X2Nsa291dDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgcngxOTUwX21hcF9pbyh2b2lkKQogewotCXMzYzI0eHhfY2xrb3V0MC5wYXJlbnQgID0gJmNsa19oOwotCXMzYzI0eHhfY2xrb3V0MS5wYXJlbnQgID0gJmNsa19mOwotCi0JczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MocngxOTUwX2Nsb2NrcywgQVJSQVlfU0laRShyeDE5NTBfY2xvY2tzKSk7Ci0KIAlzM2MyNHh4X2luaXRfaW8ocngxOTUwX2lvZGVzYywgQVJSQVlfU0laRShyeDE5NTBfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygxNjkzNDAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKHJ4MTk1MF91YXJ0Y2ZncywgQVJSQVlfU0laRShyeDE5NTBfdWFydGNmZ3MpKTsKIAlzYW1zdW5nX3NldF90aW1lcl9zb3VyY2UoU0FNU1VOR19QV00zLCBTQU1TVU5HX1BXTTQpOwogCkBAIC03NTQsNiArNzQzLDEyIEBACiAJczNjX3BtX2luaXQoKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHJ4MTk1MF9pbml0X3RpbWUodm9pZCkKK3sKKwlzM2MyNDQyX2luaXRfY2xvY2tzKDE2OTM0MDAwKTsKKwlzYW1zdW5nX3RpbWVyX2luaXQoKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJ4MTk1MF9pbml0X21hY2hpbmUodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTgxNiw2ICs4MTEsNiBAQAogCS5yZXNlcnZlCT0gcngxOTUwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gczNjMjQ0Ml9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lID0gcngxOTUwX2luaXRfbWFjaGluZSwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSByeDE5NTBfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQ0eF9yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXJ4MzcxNS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcngzNzE1LmMKaW5kZXggZTY1MzVjZS4uNmU3NDllYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcngzNzE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcngzNzE1LmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLXNhbXN1bmcuaD4KIAotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KQEAgLTE3OSwxMSArMTc4LDE2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcngzNzE1X21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhyeDM3MTVfaW9kZXNjLCBBUlJBWV9TSVpFKHJ4MzcxNV9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDE2OTM0MDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMocngzNzE1X3VhcnRjZmdzLCBBUlJBWV9TSVpFKHJ4MzcxNV91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCByeDM3MTVfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQ0MF9pbml0X2Nsb2NrcygxNjkzNDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIC8qIEgxOTQwIGFuZCBSWDM3MTUgbmVlZCB0byByZXNlcnZlIHRoaXMgZm9yIHN1c3BlbmQgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCByeDM3MTVfcmVzZXJ2ZSh2b2lkKQogewpAQCAtMjEwLDYgKzIxNCw2IEBACiAJLnJlc2VydmUJPSByeDM3MTVfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBzM2MyNDQwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSByeDM3MTVfaW5pdF9tYWNoaW5lLAotCS5pbml0X3RpbWUJPSBzYW1zdW5nX3RpbWVyX2luaXQsCisJLmluaXRfdGltZQk9IHJ4MzcxNV9pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDR4X3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtczNjMjQxNi1kdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtczNjMjQxNi1kdC5jCmluZGV4IDcwZjA5MDAuLmU0ZGNiOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXMzYzI0MTYtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zM2MyNDE2LWR0LmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3MzYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjksNDggKzI4LDE0IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgbG9va3VwIHRhYmxlIGlzIHVzZWQgdG8gb3ZlcnJpZGUgZGV2aWNlIG5hbWVzIHdoZW4gZGV2aWNlcwotICogYXJlIHJlZ2lzdGVyZWQgZnJvbSBkZXZpY2UgdHJlZS4gVGhpcyBpcyB0ZW1wb3JhcmlseSBhZGRlZCB0byBlbmFibGUKLSAqIGRldmljZSB0cmVlIHN1cHBvcnQgYWRkaXRpb24gZm9yIHRoZSBTM0MyNDE2IGFyY2hpdGVjdHVyZS4KLSAqCi0gKiBGb3IgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGxhdGZvcm0gZGF0YSB0byBiZSBwcm92aWRlZCBmcm9tIHRoZSBtYWNoaW5lCi0gKiBmaWxlLCBhIHBsYXRmb3JtIGRhdGEgcG9pbnRlciBjYW4gYWxzbyBiZSBzdXBwbGllZCBhbG9uZyB3aXRoIHRoZQotICogZGV2aWNlcyBuYW1lcy4gVXN1YWxseSwgdGhlIHBsYXRmb3JtIGRhdGEgZWxlbWVudHMgdGhhdCBjYW5ub3QgYmUgcGFyc2VkCi0gKiBmcm9tIHRoZSBkZXZpY2UgdHJlZSBieSB0aGUgZHJpdmVycyAoZXhhbXBsZTogZnVuY3Rpb24gcG9pbnRlcnMpIGFyZQotICogc3VwcGxpZWQuIEJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIGlzIGEgdGVtcG9yYXJ5IG1lY2hhbmlzbSBhbmQKLSAqIGF0IHNvbWUgcG9pbnQsIHRoZSBkcml2ZXJzIHNob3VsZCBiZSBjYXBhYmxlIG9mIHBhcnNpbmcgYWxsIHRoZSBwbGF0Zm9ybQotICogZGF0YSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZfYXV4ZGF0YSBzM2MyNDE2X2F1eGRhdGFfbG9va3VwW10gX19pbml0Y29uc3QgPSB7Ci0JT0ZfREVWX0FVWERBVEEoInNhbXN1bmcsczNjMjQ0MC11YXJ0IiwgUzNDMjRYWF9QQV9VQVJULAotCQkJCSJzM2MyNDQwLXVhcnQuMCIsIE5VTEwpLAotCU9GX0RFVl9BVVhEQVRBKCJzYW1zdW5nLHMzYzI0NDAtdWFydCIsIFMzQzI0WFhfUEFfVUFSVCArIDB4NDAwMCwKLQkJCQkiczNjMjQ0MC11YXJ0LjEiLCBOVUxMKSwKLQlPRl9ERVZfQVVYREFUQSgic2Ftc3VuZyxzM2MyNDQwLXVhcnQiLCBTM0MyNFhYX1BBX1VBUlQgKyAweDgwMDAsCi0JCQkJInMzYzI0NDAtdWFydC4yIiwgTlVMTCksCi0JT0ZfREVWX0FVWERBVEEoInNhbXN1bmcsczNjMjQ0MC11YXJ0IiwgUzNDMjRYWF9QQV9VQVJUICsgMHhDMDAwLAotCQkJCSJzM2MyNDQwLXVhcnQuMyIsIE5VTEwpLAotCU9GX0RFVl9BVVhEQVRBKCJzYW1zdW5nLHMzYzY0MTAtc2RoY2kiLCBTM0NfUEFfSFNNTUMwLAotCQkJCSJzM2Mtc2RoY2kuMCIsIE5VTEwpLAotCU9GX0RFVl9BVVhEQVRBKCJzYW1zdW5nLHMzYzY0MTAtc2RoY2kiLCBTM0NfUEFfSFNNTUMxLAotCQkJCSJzM2Mtc2RoY2kuMSIsIE5VTEwpLAotCU9GX0RFVl9BVVhEQVRBKCJzYW1zdW5nLHMzYzI0NDAtaTJjIiwgUzNDX1BBX0lJQywKLQkJCQkiczNjMjQ0MC1pMmMuMCIsIE5VTEwpLAotCXt9LAotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IHMzYzI0MTZfZHRfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKE5VTEwsIDApOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQxNl9kdF9tYWNoaW5lX2luaXQodm9pZCkKIHsKLQlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKLQkJCQlzM2MyNDE2X2F1eGRhdGFfbG9va3VwLCBOVUxMKTsKLQorCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKIAlzM2NfcG1faW5pdCgpOwogfQogCkBAIC04Niw2ICs1MSw1IEBACiAJLm1hcF9pbwkJPSBzM2MyNDE2X2R0X21hcF9pbywKIAkuaW5pdF9pcnEJPSBpcnFjaGlwX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IHMzYzI0MTZfZHRfbWFjaGluZV9pbml0LAotCSAuaW5pdF90aW1lCT0gY2xvY2tzb3VyY2Vfb2ZfaW5pdCwKIAkucmVzdGFydAk9IHMzYzI0MTZfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0MTAuYwppbmRleCBmMzI5MjRlLi40MTlmYWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXNtZGsyNDEwLmMKQEAgLTk5LDExICs5OSwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0MTBfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoc21kazI0MTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazI0MTBfdWFydGNmZ3MpKTsKIAlzYW1zdW5nX3NldF90aW1lcl9zb3VyY2UoU0FNU1VOR19QV00zLCBTQU1TVU5HX1BXTTQpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTBfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrMjQxMF9pbml0KHZvaWQpCiB7CiAJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwpAQCAtMTE4LDYgKzEyMyw2IEBACiAJLm1hcF9pbwkJPSBzbWRrMjQxMF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gczNjMjQxMF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gc21kazI0MTBfaW5pdCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSBzbWRrMjQxMF9pbml0X3RpbWUsCiAJLnJlc3RhcnQJPSBzM2MyNDEwX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXNtZGsyNDEzLmMKaW5kZXggMjMzZmU1Mi4uYTM4ZjhhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0MTMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQxMy5jCkBAIC0xMDYsMTEgKzEwNiwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEzX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQxM19pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0MTNfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKHNtZGsyNDEzX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGsyNDEzX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEzX2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0MTJfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTNfbWFjaGluZV9pbml0KHZvaWQpCiB7CS8qIFR1cm4gb2ZmIHN1c3BlbmQgb24gYm90aCBVU0IgcG9ydHMsIGFuZCBzd2l0Y2ggdGhlCiAJICogc2VsZWN0YWJsZSBVU0IgcG9ydCB0byBVU0IgZGV2aWNlIG1vZGUuICovCkBAIC0xNTksNiArMTY0LDYgQEAKIAkuaW5pdF9pcnEJPSBzM2MyNDEyX2luaXRfaXJxLAogCS5tYXBfaW8JCT0gc21kazI0MTNfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBzbWRrMjQxM19tYWNoaW5lX2luaXQsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gc21kazI0MTNfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQxMl9yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXNtZGsyNDE2LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQxNi5jCmluZGV4IGIzYjU0ZDguLmZhNmYzMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXNtZGsyNDE2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0MTYuYwpAQCAtMjE5LDEwICsyMTksMTUgQEAKIAkmczNjMjQ0M19kZXZpY2VfZG1hLAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDE2X2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0MTZfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTZfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHNtZGsyNDE2X2lvZGVzYywgQVJSQVlfU0laRShzbWRrMjQxNl9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoc21kazI0MTZfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazI0MTZfdWFydGNmZ3MpKTsKIAlzYW1zdW5nX3NldF90aW1lcl9zb3VyY2UoU0FNU1VOR19QV00zLCBTQU1TVU5HX1BXTTQpOwogfQpAQCAtMjU3LDYgKzI2Miw2IEBACiAJLmluaXRfaXJxCT0gczNjMjQxNl9pbml0X2lycSwKIAkubWFwX2lvCQk9IHNtZGsyNDE2X21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gc21kazI0MTZfbWFjaGluZV9pbml0LAotCS5pbml0X3RpbWUJPSBzYW1zdW5nX3RpbWVyX2luaXQsCisJLmluaXRfdGltZQk9IHNtZGsyNDE2X2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0MTZfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0NDAuYwppbmRleCBkMDcxZGNmLi41ZmI4OWMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQ0MC5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaTJjLXMzYzI0MTAuaD4KIAotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvc2Ftc3VuZy10aW1lLmg+CkBAIC0xNTksMTEgKzE1OCwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQ0MF9pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0NDBfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygxNjkzNDQwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKHNtZGsyNDQwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGsyNDQwX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQwX2luaXRfdGltZSh2b2lkKQoreworCXMzYzI0NDBfaW5pdF9jbG9ja3MoMTY5MzQ0MDApOworCXNhbXN1bmdfdGltZXJfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDBfbWFjaGluZV9pbml0KHZvaWQpCiB7CiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnNtZGsyNDQwX2ZiX2luZm8pOwpAQCAtMTgwLDYgKzE4NCw2IEBACiAJLmluaXRfaXJxCT0gczNjMjQ0MF9pbml0X2lycSwKIAkubWFwX2lvCQk9IHNtZGsyNDQwX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gc21kazI0NDBfbWFjaGluZV9pbml0LAotCS5pbml0X3RpbWUJPSBzYW1zdW5nX3RpbWVyX2luaXQsCisJLmluaXRfdGltZQk9IHNtZGsyNDQwX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0NHhfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQ0My5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtc21kazI0NDMuYwppbmRleCAwNmM0ZDc3Li5lZjVkNWVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1zbWRrMjQ0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXNtZGsyNDQzLmMKQEAgLTEyMSwxMSArMTIxLDE2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDNfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHNtZGsyNDQzX2lvZGVzYywgQVJSQVlfU0laRShzbWRrMjQ0M19pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoc21kazI0NDNfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazI0NDNfdWFydGNmZ3MpKTsKIAlzYW1zdW5nX3NldF90aW1lcl9zb3VyY2UoU0FNU1VOR19QV00zLCBTQU1TVU5HX1BXTTQpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDNfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQ0M19pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrMjQ0M19tYWNoaW5lX2luaXQodm9pZCkKIHsKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CkBAIC0xNDUsNiArMTUwLDYgQEAKIAkuaW5pdF9pcnEJPSBzM2MyNDQzX2luaXRfaXJxLAogCS5tYXBfaW8JCT0gc21kazI0NDNfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBzbWRrMjQ0M19tYWNoaW5lX2luaXQsCi0JLmluaXRfdGltZQk9IHNhbXN1bmdfdGltZXJfaW5pdCwKKwkuaW5pdF90aW1lCT0gc21kazI0NDNfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQ0M19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXRjdF9oYW1tZXIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXRjdF9oYW1tZXIuYwppbmRleCA0MTA4YjJmLi5jNjE2Y2EyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC10Y3RfaGFtbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtdGN0X2hhbW1lci5jCkBAIC0xMzUsMTEgKzEzNSwxNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHRjdF9oYW1tZXJfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHRjdF9oYW1tZXJfaW9kZXNjLCBBUlJBWV9TSVpFKHRjdF9oYW1tZXJfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKIAlzM2MyNHh4X2luaXRfdWFydHModGN0X2hhbW1lcl91YXJ0Y2ZncywgQVJSQVlfU0laRSh0Y3RfaGFtbWVyX3VhcnRjZmdzKSk7CiAJc2Ftc3VuZ19zZXRfdGltZXJfc291cmNlKFNBTVNVTkdfUFdNMywgU0FNU1VOR19QV000KTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHRjdF9oYW1tZXJfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCB0Y3RfaGFtbWVyX2luaXQodm9pZCkKIHsKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CkBAIC0xNTEsNiArMTU2LDYgQEAKIAkubWFwX2lvCQk9IHRjdF9oYW1tZXJfbWFwX2lvLAogCS5pbml0X2lycQk9IHMzYzI0MTBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHRjdF9oYW1tZXJfaW5pdCwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSB0Y3RfaGFtbWVyX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0MTBfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC12cjEwMDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXZyMTAwMC5jCmluZGV4IDFjYzViMWIuLmY4OGM1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXZyMTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXZyMTAwMC5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8tc2Ftc3VuZy5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9zYW1zdW5nLXRpbWUuaD4KQEAgLTI4Niw2ICsyODUsNyBAQAogLyogZGV2aWNlcyBmb3IgdGhpcyBib2FyZCAqLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdnIxMDAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2MyNDEwX2RldmljZV9kY2xrLAogCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKQEAgLTI5OSwxNCArMjk5LDYgQEAKIAkmdnIxMDAwX2xlZDMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqdnIxMDAwX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzYzI0eHhfZGNsazAsCi0JJnMzYzI0eHhfZGNsazEsCi0JJnMzYzI0eHhfY2xrb3V0MCwKLQkmczNjMjR4eF9jbGtvdXQxLAotCSZzM2MyNHh4X3VjbGssCi19OwotCiBzdGF0aWMgdm9pZCB2cjEwMDBfcG93ZXJfb2ZmKHZvaWQpCiB7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzI0MTBfR1BCKDkpLCAxKTsKQEAgLTMxNCwyOSArMzA2LDE5IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2cjEwMDBfbWFwX2lvKHZvaWQpCiB7Ci0JLyogaW5pdGlhbGlzZSBjbG9jayBzb3VyY2VzICovCi0KLQlzM2MyNHh4X2RjbGswLnBhcmVudCA9ICZjbGtfdXBsbDsKLQlzM2MyNHh4X2RjbGswLnJhdGUgICA9IDEyKjEwMDAqMTAwMDsKLQotCXMzYzI0eHhfZGNsazEucGFyZW50ID0gTlVMTDsKLQlzM2MyNHh4X2RjbGsxLnJhdGUgICA9IDM2OTIzMDc7Ci0KLQlzM2MyNHh4X2Nsa291dDAucGFyZW50ICA9ICZzM2MyNHh4X2RjbGswOwotCXMzYzI0eHhfY2xrb3V0MS5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazE7Ci0KLQlzM2MyNHh4X3VjbGsucGFyZW50ICA9ICZzM2MyNHh4X2Nsa291dDE7Ci0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2Nrcyh2cjEwMDBfY2xvY2tzLCBBUlJBWV9TSVpFKHZyMTAwMF9jbG9ja3MpKTsKLQogCXBtX3Bvd2VyX29mZiA9IHZyMTAwMF9wb3dlcl9vZmY7CiAKIAlzM2MyNHh4X2luaXRfaW8odnIxMDAwX2lvZGVzYywgQVJSQVlfU0laRSh2cjEwMDBfaW9kZXNjKSk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKIAlzM2MyNHh4X2luaXRfdWFydHModnIxMDAwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHZyMTAwMF91YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCB2cjEwMDBfaW5pdF90aW1lKHZvaWQpCit7CisJczNjMjQxMF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJc2Ftc3VuZ190aW1lcl9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCB2cjEwMDBfaW5pdCh2b2lkKQogewogCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKQEAgLTM1Nyw2ICszMzksNiBAQAogCS5tYXBfaW8JCT0gdnIxMDAwX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gdnIxMDAwX2luaXQsCiAJLmluaXRfaXJxCT0gczNjMjQxMF9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gc2Ftc3VuZ190aW1lcl9pbml0LAorCS5pbml0X3RpbWUJPSB2cjEwMDBfaW5pdF90aW1lLAogCS5yZXN0YXJ0CT0gczNjMjQxMF9yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXZzdG1zLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC12c3Rtcy5jCmluZGV4IDQwODY4YzAuLjZiNzA2YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXZzdG1zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtdnN0bXMuYwpAQCAtMTQyLDExICsxNDIsMTYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCB2c3Rtc19tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8odnN0bXNfaW9kZXNjLCBBUlJBWV9TSVpFKHZzdG1zX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyh2c3Rtc191YXJ0Y2ZncywgQVJSQVlfU0laRSh2c3Rtc191YXJ0Y2ZncykpOwogCXNhbXN1bmdfc2V0X3RpbWVyX3NvdXJjZShTQU1TVU5HX1BXTTMsIFNBTVNVTkdfUFdNNCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCB2c3Rtc19pbml0X3RpbWUodm9pZCkKK3sKKwlzM2MyNDEyX2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzYW1zdW5nX3RpbWVyX2luaXQoKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHZzdG1zX2luaXQodm9pZCkKIHsKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CkBAIC0xNjIsNiArMTY3LDYgQEAKIAkuaW5pdF9pcnEJPSBzM2MyNDEyX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSB2c3Rtc19pbml0LAogCS5tYXBfaW8JCT0gdnN0bXNfbWFwX2lvLAotCS5pbml0X3RpbWUJPSBzYW1zdW5nX3RpbWVyX2luaXQsCisJLmluaXRfdGltZQk9IHZzdG1zX2luaXRfdGltZSwKIAkucmVzdGFydAk9IHMzYzI0MTJfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9wbS5jCmluZGV4IDY4ZWE1YjcuLmIxOTI1NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9wbS5jCkBAIC01MSw5ICs1MSw2IEBACiAjZGVmaW5lIFBGWCAiczNjMjR4eC1wbTogIgogCiBzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgY29yZV9zYXZlW10gPSB7Ci0JU0FWRV9JVEVNKFMzQzI0MTBfTE9DS1RJTUUpLAotCVNBVkVfSVRFTShTM0MyNDEwX0NMS0NPTiksCi0KIAkvKiB3ZSByZXN0b3JlIHRoZSB0aW1pbmdzIGhlcmUsIHdpdGggdGhlIHByb3Zpc28gdGhhdCB0aGUgYm9hcmQKIAkgKiBicmluZ3MgdGhlIHN5c3RlbSB1cCBpbiBhbiBzbG93ZXIsIG9yIGVxdWFsIGZyZXF1ZW5jeSBzZXR0aW5nCiAJICogdG8gdGhlIG9yaWdpbmFsIHN5c3RlbS4KQEAgLTY5LDE4ICs2Niw2IEBACiAJU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjMpLAogCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT040KSwKIAlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09ONSksCi0KLSNpZm5kZWYgQ09ORklHX0NQVV9GUkVRCi0JU0FWRV9JVEVNKFMzQzI0MTBfQ0xLRElWTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfTVBMTENPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfUkVGUkVTSCksCi0jZW5kaWYKLQlTQVZFX0lURU0oUzNDMjQxMF9VUExMQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9DTEtTTE9XKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBtaXNjX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oUzNDMjQxMF9EQ0xLQ09OKSwKIH07CiAKIC8qIHMzY19wbV9jaGVja19yZXN1bWVfcGluCkBAIC0xNDAsMTIgKzEyNSwxMCBAQAogdm9pZCBzM2NfcG1fcmVzdG9yZV9jb3JlKHZvaWQpCiB7CiAJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7Ci0JczNjX3BtX2RvX3Jlc3RvcmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOwogfQogCiB2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCkKIHsKLQlzM2NfcG1fZG9fc2F2ZShtaXNjX3NhdmUsIEFSUkFZX1NJWkUobWlzY19zYXZlKSk7CiAJczNjX3BtX2RvX3NhdmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3MzYzI0MTAuYwppbmRleCAwNGI1OGNiLi43ZWFiODg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9zM2MyNDEwLmMKQEAgLTg1LDYyICs4NSw2IEBACiAKIHZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQxMF9zZXR1cF9jbG9ja3Modm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQl1bnNpZ25lZCBsb25nIHh0YWw7Ci0JdW5zaWduZWQgbG9uZyBmY2xrOwotCXVuc2lnbmVkIGxvbmcgaGNsazsKLQl1bnNpZ25lZCBsb25nIHBjbGs7Ci0KLQl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKLQl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKLQljbGtfcHV0KHh0YWxfY2xrKTsKLQotCS8qIG5vdyB3ZSd2ZSBnb3Qgb3VyIG1hY2hpbmUgYml0cyBpbml0aWFsaXNlZCwgd29yayBvdXQgd2hhdAotCSAqIGNsb2NrcyB3ZSd2ZSBnb3QgKi8KLQotCWZjbGsgPSBzM2MyNHh4X2dldF9wbGwoX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKSwgeHRhbCk7Ci0KLQl0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCi0JLyogd29yayBvdXQgY2xvY2sgc2NhbGluZ3MgKi8KLQotCWhjbGsgPSBmY2xrIC8gKCh0bXAgJiBTM0MyNDEwX0NMS0RJVk5fSERJVk4pID8gMiA6IDEpOwotCXBjbGsgPSBoY2xrIC8gKCh0bXAgJiBTM0MyNDEwX0NMS0RJVk5fUERJVk4pID8gMiA6IDEpOwotCi0JLyogcHJpbnQgYnJpZWZ0IHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KLQotCXByaW50aygiUzNDMjQxMDogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAotCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKLQotCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKLQkgKiBjb25zb2xlIHRvIHVzZSB0aGVtCi0JICovCi0KLQlzM2MyNHh4X3NldHVwX2Nsb2NrcyhmY2xrLCBoY2xrLCBwY2xrKTsKLX0KLQotLyogZmFrZSBBUk1DTEsgZm9yIHVzZSB3aXRoIGNwdWZyZXEsIGV0Yy4gKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgczNjMjQxMF9hcm1jbGsgPSB7Ci0JLm5hbWUJPSAiYXJtY2xrIiwKLQkucGFyZW50CT0gJmNsa19mLAotCS5pZAk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHMzYzI0MTBfY2xrX2xvb2t1cFtdID0gewotCUNMS0RFVl9JTklUKE5VTEwsICJjbGtfdWFydF9iYXVkMCIsICZjbGtfcCksCi0JQ0xLREVWX0lOSVQoTlVMTCwgImNsa191YXJ0X2JhdWQxIiwgJnMzYzI0eHhfdWNsayksCi19OwotCi12b2lkIF9faW5pdCBzM2MyNDEwX2luaXRfY2xvY2tzKGludCB4dGFsKQotewotCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKLQlzM2MyNDEwX3NldHVwX2Nsb2NrcygpOwotCXMzYzI0MTBfYmFzZWNsa19hZGQoKTsKLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDEwX2FybWNsayk7Ci0JY2xrZGV2X2FkZF90YWJsZShzM2MyNDEwX2Nsa19sb29rdXAsIEFSUkFZX1NJWkUoczNjMjQxMF9jbGtfbG9va3VwKSk7Ci0Jc2Ftc3VuZ193ZHRfcmVzZXRfaW5pdChTM0MyNFhYX1ZBX1dBVENIRE9HKTsKIH0KIAogc3RydWN0IGJ1c190eXBlIHMzYzI0MTBfc3Vic3lzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3MzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9zM2MyNDEyLmMKaW5kZXggNjU3Y2JhYy4uZDQ5ZjUyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvczNjMjQxMi5jCkBAIC0xNzMsNDkgKzE3Myw2IEBACiAKIHZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQxMl9zZXR1cF9jbG9ja3Modm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQl1bnNpZ25lZCBsb25nIHh0YWw7Ci0JdW5zaWduZWQgbG9uZyBmY2xrOwotCXVuc2lnbmVkIGxvbmcgaGNsazsKLQl1bnNpZ25lZCBsb25nIHBjbGs7Ci0KLQl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKLQl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKLQljbGtfcHV0KHh0YWxfY2xrKTsKLQotCS8qIG5vdyB3ZSd2ZSBnb3Qgb3VyIG1hY2hpbmUgYml0cyBpbml0aWFsaXNlZCwgd29yayBvdXQgd2hhdAotCSAqIGNsb2NrcyB3ZSd2ZSBnb3QgKi8KLQotCWZjbGsgPSBzM2MyNHh4X2dldF9wbGwoX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKSwgeHRhbCAqIDIpOwotCi0JY2xrX21wbGwucmF0ZSA9IGZjbGs7Ci0KLQl0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCi0JLyogd29yayBvdXQgY2xvY2sgc2NhbGluZ3MgKi8KLQotCWhjbGsgPSBmY2xrIC8gKCh0bXAgJiBTM0MyNDEyX0NMS0RJVk5fSERJVk5fTUFTSykgKyAxKTsKLQloY2xrIC89ICgodG1wICYgUzNDMjQxMl9DTEtESVZOX0FSTURJVk4pID8gMiA6IDEpOwotCXBjbGsgPSBoY2xrIC8gKCh0bXAgJiBTM0MyNDEyX0NMS0RJVk5fUERJVk4pID8gMiA6IDEpOwotCi0JLyogcHJpbnQgYnJpZWZ0IHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KLQotCXByaW50aygiUzNDMjQxMjogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAotCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKLQotCXMzYzI0eHhfc2V0dXBfY2xvY2tzKGZjbGssIGhjbGssIHBjbGspOwotfQotCi12b2lkIF9faW5pdCBzM2MyNDEyX2luaXRfY2xvY2tzKGludCB4dGFsKQotewotCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKLQkgKiBjb25zb2xlIHRvIHVzZSB0aGVtCi0JICovCi0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7Ci0JczNjMjQxMl9zZXR1cF9jbG9ja3MoKTsKLQlzM2MyNDEyX2Jhc2VjbGtfYWRkKCk7CiB9CiAKIC8qIG5lZWQgdG8gcmVnaXN0ZXIgdGhlIHN1YnN5c3RlbSBiZWZvcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXIgdGhlIGRldmljZSwgYW5kCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvczNjMjQ0Mi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3MzYzI0NDIuYwppbmRleCAyYzhhZGMwLi5mYjlkYTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvczNjMjQ0Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9zM2MyNDQyLmMKQEAgLTUzLDExNyArNTMsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qIFMzQzI0NDIgZXh0ZW5kZWQgY2xvY2sgc3VwcG9ydCAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JaW50IGRpdjsKLQotCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCi0JCXJldHVybiBwYXJlbnRfcmF0ZTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXYgPT0gMykKLQkJcmV0dXJuIHBhcmVudF9yYXRlIC8gMzsKLQotCS8qIG5vdGUsIHdlIHJlbW92ZSB0aGUgKy8tIDEgY2FsY3VsYXRpb25zIGZvciB0aGUgZGl2aXNvciAqLwotCi0JZGl2IC89IDI7Ci0KLQlpZiAoZGl2IDwgMSkKLQkJZGl2ID0gMTsKLQllbHNlIGlmIChkaXYgPiAxNikKLQkJZGl2ID0gMTY7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICogMik7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0Ml9jYW1pZl91cGxsX3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjYW1kaXZuID0gIF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0KLQlyYXRlID0gczNjMjQ0Ml9jYW1pZl91cGxsX3JvdW5kKGNsaywgcmF0ZSk7Ci0KLQljYW1kaXZuICY9IH5TM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjM7Ci0KLQlpZiAocmF0ZSA9PSBwYXJlbnRfcmF0ZSkgewotCQljYW1kaXZuICY9IH5TM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTDsKLQl9IGVsc2UgaWYgKChwYXJlbnRfcmF0ZSAvIHJhdGUpID09IDMpIHsKLQkJY2FtZGl2biB8PSBTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTDsKLQkJY2FtZGl2biB8PSBTM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjM7Ci0JfSBlbHNlIHsKLQkJY2FtZGl2biAmPSB+UzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19NQVNLOwotCQljYW1kaXZuIHw9IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOwotCQljYW1kaXZuIHw9ICgoKHBhcmVudF9yYXRlIC8gcmF0ZSkgLyAyKSAtIDEpOwotCX0KLQotCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDQwX0NBTURJVk4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEV4dHJhIFMzQzI0NDIgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDJfY2xrX2NhbSA9IHsKLQkubmFtZQkJPSAiY2FtaWYiLAotCS5pZAkJPSAtMSwKLQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkuY3RybGJpdAk9IFMzQzI0NDBfQ0xLQ09OX0NBTUVSQSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDJfY2xrX2NhbV91cGxsID0gewotCS5uYW1lCQk9ICJjYW1pZi11cGxsIiwKLQkuaWQJCT0gLTEsCi0JLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7Ci0JCS5zZXRfcmF0ZQk9IHMzYzI0NDJfY2FtaWZfdXBsbF9zZXRyYXRlLAotCQkucm91bmRfcmF0ZQk9IHMzYzI0NDJfY2FtaWZfdXBsbF9yb3VuZCwKLQl9LAotfTsKLQotc3RhdGljIGludCBzM2MyNDQyX2Nsa19hZGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc3Vic3lzX2ludGVyZmFjZSAqc2lmKQotewotCXN0cnVjdCBjbGsgKmNsb2NrX3VwbGw7Ci0Jc3RydWN0IGNsayAqY2xvY2tfaDsKLQlzdHJ1Y3QgY2xrICpjbG9ja19wOwotCi0JY2xvY2tfcCA9IGNsa19nZXQoTlVMTCwgInBjbGsiKTsKLQljbG9ja19oID0gY2xrX2dldChOVUxMLCAiaGNsayIpOwotCWNsb2NrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7Ci0KLQlpZiAoSVNfRVJSKGNsb2NrX3ApIHx8IElTX0VSUihjbG9ja19oKSB8fCBJU19FUlIoY2xvY2tfdXBsbCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNDQyOiBGYWlsZWQgdG8gZ2V0IHBhcmVudCBjbG9ja3NcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzM2MyNDQyX2Nsa19jYW0ucGFyZW50ID0gY2xvY2tfaDsKLQlzM2MyNDQyX2Nsa19jYW1fdXBsbC5wYXJlbnQgPSBjbG9ja191cGxsOwotCi0JczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0Ml9jbGtfY2FtKTsKLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDQyX2Nsa19jYW1fdXBsbCk7Ci0KLQljbGtfZGlzYWJsZSgmczNjMjQ0Ml9jbGtfY2FtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN1YnN5c19pbnRlcmZhY2UgczNjMjQ0Ml9jbGtfaW50ZXJmYWNlID0gewotCS5uYW1lCQk9ICJzM2MyNDQyX2NsayIsCi0JLnN1YnN5cwkJPSAmczNjMjQ0Ml9zdWJzeXMsCi0JLmFkZF9kZXYJPSBzM2MyNDQyX2Nsa19hZGQsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBzM2MyNDQyX2Nsa19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN1YnN5c19pbnRlcmZhY2VfcmVnaXN0ZXIoJnMzYzI0NDJfY2xrX2ludGVyZmFjZSk7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjMjQ0Ml9jbGtfaW5pdCk7Ci0KLQogc3RhdGljIHN0cnVjdCBkZXZpY2UgczNjMjQ0Ml9kZXYgPSB7CiAJLmJ1cwkJPSAmczNjMjQ0Ml9zdWJzeXMsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3MzYzI0NHguYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9zM2MyNDR4LmMKaW5kZXggZmUzMGViYjIuLjRhNjRiY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3MzYzI0NHguYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPHBsYXQvbmFuZC1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC93YXRjaGRvZy1yZXNldC5oPgogCisjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicmVncy1kc2MuaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDR4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC03NCw2NyArNzUsMTEgQEAKIAlzM2NfbmFuZF9zZXRuYW1lKCJzM2MyNDQwLW5hbmQiKTsKIAlzM2NfZGV2aWNlX3RzLm5hbWUgPSAiczNjMjQ0MC10cyI7CiAJczNjX2RldmljZV91c2JnYWRnZXQubmFtZSA9ICJzM2MyNDQwLXVzYmdhZGdldCI7CisJczNjMjQxMF9kZXZpY2VfZGNsay5uYW1lID0gInMzYzI0NDAtZGNsayI7CiB9CiAKIHZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQ0eF9zZXR1cF9jbG9ja3Modm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKLQl1bnNpZ25lZCBsb25nIGNsa2RpdjsKLQl1bnNpZ25lZCBsb25nIGNhbWRpdjsKLQl1bnNpZ25lZCBsb25nIHh0YWw7Ci0JdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBwY2xrOwotCWludCBoZGl2ID0gMTsKLQotCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOwotCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOwotCWNsa19wdXQoeHRhbF9jbGspOwotCi0JZmNsayA9IHMzYzI0eHhfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKSAqIDI7Ci0KLQljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCWNhbWRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0KLQkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLwotCi0Jc3dpdGNoIChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fSERJVk5fTUFTSykgewotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzE6Ci0JCWhkaXYgPSAxOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzI6Ci0JCWhkaXYgPSAyOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzRfODoKLQkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRikgPyA4IDogNDsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzY6Ci0JCWhkaXYgPSAoY2FtZGl2ICYgUzNDMjQ0MF9DQU1ESVZOX0hDTEszX0hBTEYpID8gNiA6IDM7Ci0JCWJyZWFrOwotCX0KLQotCWhjbGsgPSBmY2xrIC8gaGRpdjsKLQlwY2xrID0gaGNsayAvICgoY2xrZGl2ICYgUzNDMjQ0MF9DTEtESVZOX1BESVZOKSA/IDIgOiAxKTsKLQotCS8qIHByaW50IGJyaWVmIHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KLQotCXByaW50aygiUzNDMjQ0WDogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAotCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKLQotCXMzYzI0eHhfc2V0dXBfY2xvY2tzKGZjbGssIGhjbGssIHBjbGspOwotfQotCi12b2lkIF9faW5pdCBzM2MyNDR4X2luaXRfY2xvY2tzKGludCB4dGFsKQotewotCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKLQkgKiBjb25zb2xlIHRvIHVzZSB0aGVtLCBhbmQgdG8gYWRkIG5ldyBvbmVzIGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbgotCSAqLwotCi0JczNjMjR4eF9yZWdpc3Rlcl9iYXNlY2xvY2tzKHh0YWwpOwotCXMzYzI0NHhfc2V0dXBfY2xvY2tzKCk7Ci0JczNjMjQxMF9iYXNlY2xrX2FkZCgpOwotCXNhbXN1bmdfd2R0X3Jlc2V0X2luaXQoUzNDMjRYWF9WQV9XQVRDSERPRyk7CiB9CiAKIC8qIFNpbmNlIHRoZSBTM0MyNDQyIGFuZCBTM0MyNDQwIHNoYXJlIGl0ZW1zLCBwdXQgYm90aCBzdWJzeXN0ZW1zIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwppbmRleCAwZjkyYmE4Li5kYmQ5NTRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCkBAIC04LDcgKzgsNiBAQAogCXNlbGVjdCBIQVZFX0FSTV9TQ1UgaWYgU01QCiAJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKIAlzZWxlY3QgQVJNX0dJQwotCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCXNlbGVjdCBBUkNIX0RNQV9BRERSX1RfNjRCSVQgaWYgQVJNX0xQQUUKIAlzZWxlY3QgTk9fSU9QT1JUX01BUAogCXNlbGVjdCBQSU5DVFJMCkBAIC0xMDgsNiArMTA3LDcgQEAKIAlzZWxlY3QgU0hfQ0xLX0NQRwogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TSF9UTVUKKwlzZWxlY3QgUkVORVNBU19JTlRDX0lSUVBJTgogCiBjb25maWcgQVJDSF9SOEE3Nzc5CiAJYm9vbCAiUi1DYXIgSDEgKFI4QTc3NzkwKSIKQEAgLTE0MCwxNiArMTQwLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NIX0NNVAogCXNlbGVjdCBBUkNIX0RNQV9BRERSX1RfNjRCSVQgaWYgQVJNX0xQQUUKIAotY29uZmlnIEFSQ0hfRU1FVjIKLQlib29sICJFbW1hIE1vYmlsZSBFVjIiCi0Jc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCi0Jc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgQ1BVX1Y3Ci0Jc2VsZWN0IE1JR0hUX0hBVkVfUENJCi0Jc2VsZWN0IFVTRV9PRgotCXNlbGVjdCBBVVRPX1pSRUxBRERSCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19FTV9TVEkKLQogY29uZmlnIEFSQ0hfUjdTNzIxMDAKIAlib29sICJSWi9BMUggKFI3UzcyMTAwKSIKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKQEAgLTIwNSw4ICsxOTUsOCBAQAogCXNlbGVjdCBTTkRfU09DX1dNODk3OCBpZiBTTkRfU0lNUExFX0NBUkQKIAlzZWxlY3QgVVNFX09GCiAJLS0taGVscC0tLQotCSAgIFVzZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgQXJhbWRpbGxvODAwIEVWQSBib2FyZCBzdXBwb3J0Ci0JICAgd2hpY2ggbWFrZXMgYSBncmVhdGVyIHVzZSBvZiBkZXZpY2UgdHJlZSBhdCB0aGUgZXhwZW5zZQorCSAgIFVzZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgQXJtYWRpbGxvODAwIEVWQSBib2FyZCBzdXBwb3J0CisJICAgd2hpY2ggbWFrZXMgZ3JlYXRlciB1c2Ugb2YgZGV2aWNlIHRyZWUgYXQgdGhlIGV4cGVuc2UKIAkgICBvZiBub3Qgc3VwcG9ydGluZyBhIG51bWJlciBvZiBkZXZpY2VzLgogCiAJICAgVGhpcyBpcyBpbnRlbmRlZCB0byBhaWQgZGV2ZWxvcGVycwpAQCAtMjE2LDcgKzIwNiw2IEBACiAJZGVwZW5kcyBvbiBBUkNIX1I4QTc3NzgKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaWYgUkVHVUxBVE9SCi0Jc2VsZWN0IFJFTkVTQVNfSU5UQ19JUlFQSU4KIAlzZWxlY3QgU05EX1NPQ19BSzQ1NTQgaWYgU05EX1NJTVBMRV9DQVJECiAJc2VsZWN0IFNORF9TT0NfQUs0NjQyIGlmIFNORF9TSU1QTEVfQ0FSRAogCXNlbGVjdCBVU0VfT0YKQEAgLTIyNSw3ICsyMTQsNiBAQAogCWJvb2wgIkJPQ0stVyAgLSBSZWZlcmVuY2UgRGV2aWNlIFRyZWUgSW1wbGVtZW50YXRpb24iCiAJZGVwZW5kcyBvbiBBUkNIX1I4QTc3NzgKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKLQlzZWxlY3QgUkVORVNBU19JTlRDX0lSUVBJTgogCXNlbGVjdCBSRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpZiBSRUdVTEFUT1IKIAlzZWxlY3QgVVNFX09GCiAJLS0taGVscC0tLQpAQCAtMjQwLDE3ICsyMjgsNiBAQAogCWRlcGVuZHMgb24gQVJDSF9SN1M3MjEwMAogCXNlbGVjdCBVU0VfT0YKIAotY29uZmlnIE1BQ0hfR0VOTUFJX1JFRkVSRU5DRQotCWJvb2wgIkdlbm1haSBib2FyZCAtIFJlZmVyZW5jZSBEZXZpY2UgVHJlZSBJbXBsZW1lbnRhdGlvbiIKLQlkZXBlbmRzIG9uIEFSQ0hfUjdTNzIxMDAKLQlzZWxlY3QgVVNFX09GCi0JLS0taGVscC0tLQotCSAgIFVzZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgR2VubWFpIGJvYXJkIHN1cHBvcnQKLQkgICB3aGljaCBtYWtlcyB1c2Ugb2YgZGV2aWNlIHRyZWUgYXQgdGhlIGV4cGVuc2UKLQkgICBvZiBub3Qgc3VwcG9ydGluZyBhIG51bWJlciBvZiBkZXZpY2VzLgotCi0JICAgVGhpcyBpcyBpbnRlbmRlZCB0byBhaWQgZGV2ZWxvcGVycwotCiBjb25maWcgTUFDSF9NQVJaRU4KIAlib29sICJNQVJaRU4gYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1I4QTc3NzkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlCmluZGV4IDRjYWZmYzkuLjM4ZDVmZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZQpAQCAtMjEsOCArMjEsOCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUjdTNzIxMDApCSs9IHNldHVwLXI3czcyMTAwLm8KIAogIyBDbG9jayBvYmplY3RzCi1pZm5kZWYgQ09ORklHX0NPTU1PTl9DTEsKIG9iai15CQkJCSs9IGNsb2NrLm8KK2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMSwogb2JqLSQoQ09ORklHX0FSQ0hfU0g3MzcyKQkrPSBjbG9jay1zaDczNzIubwogb2JqLSQoQ09ORklHX0FSQ0hfU0g3M0EwKQkrPSBjbG9jay1zaDczYTAubwogb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzNBNCkJKz0gY2xvY2stcjhhNzNhNC5vCkBAIC0zMSw3ICszMSw2IEBACiBvYmotJChDT05GSUdfQVJDSF9SOEE3Nzc5KQkrPSBjbG9jay1yOGE3Nzc5Lm8KIG9iai0kKENPTkZJR19BUkNIX1I4QTc3OTApCSs9IGNsb2NrLXI4YTc3OTAubwogb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzc5MSkJKz0gY2xvY2stcjhhNzc5MS5vCi1vYmotJChDT05GSUdfQVJDSF9FTUVWMikJKz0gY2xvY2stZW1ldjIubwogb2JqLSQoQ09ORklHX0FSQ0hfUjdTNzIxMDApCSs9IGNsb2NrLXI3czcyMTAwLm8KIGVuZGlmCiAKQEAgLTY3LDcgKzY2LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX0JPQ0tXKQkrPSBib2FyZC1ib2Nrdy5vCiBvYmotJChDT05GSUdfTUFDSF9CT0NLV19SRUZFUkVOQ0UpCSs9IGJvYXJkLWJvY2t3LXJlZmVyZW5jZS5vCiBvYmotJChDT05GSUdfTUFDSF9HRU5NQUkpCSs9IGJvYXJkLWdlbm1haS5vCi1vYmotJChDT05GSUdfTUFDSF9HRU5NQUlfUkVGRVJFTkNFKQkrPSBib2FyZC1nZW5tYWktcmVmZXJlbmNlLm8KIG9iai0kKENPTkZJR19NQUNIX01BUlpFTikJKz0gYm9hcmQtbWFyemVuLm8KIG9iai0kKENPTkZJR19NQUNIX01BUlpFTl9SRUZFUkVOQ0UpCSs9IGJvYXJkLW1hcnplbi1yZWZlcmVuY2Uubwogb2JqLSQoQ09ORklHX01BQ0hfTEFHRVIpCSs9IGJvYXJkLWxhZ2VyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdAppbmRleCA5OTQ1NWVjLi45MThmY2NmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZS5ib290CkBAIC03LDcgKzcsNiBAQAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9CT0NLVykgKz0gMHg2MDAwODAwMAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9CT0NLV19SRUZFUkVOQ0UpICs9IDB4NjAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfR0VOTUFJKSArPSAweDA4MDA4MDAwCi1sb2FkYWRkci0kKENPTkZJR19NQUNIX0dFTk1BSV9SRUZFUkVOQ0UpICs9IDB4MDgwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfS09FTFNDSCkgKz0gMHg0MDAwODAwMAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9LWk05RykgKz0gMHg0MTAwODAwMAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9LWk05R19SRUZFUkVOQ0UpICs9IDB4NDEwMDgwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLXJlZmVyZW5jZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEtcmVmZXJlbmNlLmMKaW5kZXggNTdkMWE3OC4uNTdkMjQ2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEtcmVmZXJlbmNlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEtcmVmZXJlbmNlLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiBEVF9NQUNISU5FX1NUQVJUKEFSTUFESUxMTzgwMEVWQV9EVCwgImFybWFkaWxsbzgwMGV2YS1yZWZlcmVuY2UiKQogCS5tYXBfaW8JCT0gcjhhNzc0MF9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSByOGE3NzQwX2luaXRfZGVsYXksCisJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAogCS5pbml0X2lycQk9IHI4YTc3NDBfaW5pdF9pcnFfb2YsCiAJLmluaXRfbWFjaGluZQk9IGV2YV9pbml0LAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFybWFkaWxsbzgwMGV2YS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEuYwppbmRleCA0ODYwNjNkLi5iYzJjZjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFybWFkaWxsbzgwMGV2YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLmMKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJLnBsYXRmb3JtCT0gInNoX2ZzaTIiLAogCS5jcHVfZGFpID0gewogCQkubmFtZQk9ICJmc2liLWRhaSIsCi0JCS5mbXQJPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNLAorCQkuZm10CT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKIAl9LAogCS5jb2RlY19kYWkgPSB7CiAJCS5uYW1lID0gInNoX21vYmlsZV9oZG1pLWhpZmkiLApAQCAtMTMwMCwxMSArMTMwMCw2IEBACiAJZXZhX2Nsb2NrX2luaXQoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGV2YV9hZGRfZWFybHlfZGV2aWNlcyh2b2lkKQotewotCXI4YTc3NDBfYWRkX2Vhcmx5X2RldmljZXMoKTsKLX0KLQogI2RlZmluZSBSRVNDTlQyIElPTUVNKDB4ZTYxODgwMjApCiBzdGF0aWMgdm9pZCBldmFfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKQEAgLTEzMTksNyArMTMxNCw3IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoQVJNQURJTExPODAwRVZBX0RULCAiYXJtYWRpbGxvODAwZXZhIikKIAkubWFwX2lvCQk9IHI4YTc3NDBfbWFwX2lvLAotCS5pbml0X2Vhcmx5CT0gZXZhX2FkZF9lYXJseV9kZXZpY2VzLAorCS5pbml0X2Vhcmx5CT0gcjhhNzc0MF9hZGRfZWFybHlfZGV2aWNlcywKIAkuaW5pdF9pcnEJPSByOGE3NzQwX2luaXRfaXJxX29mLAogCS5pbml0X21hY2hpbmUJPSBldmFfaW5pdCwKIAkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jCmluZGV4IGI0MTIyZjguLmY0NDRiZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3cuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LmMKQEAgLTM0NSwyNCArMzQ1LDM5IEBACiAJUlNORF9TU0lfVU5VU0VELCAvKiBTU0kgMCAqLwogCVJTTkRfU1NJX1VOVVNFRCwgLyogU1NJIDEgKi8KIAlSU05EX1NTSV9VTlVTRUQsIC8qIFNTSSAyICovCi0JUlNORF9TU0lfU0VUKDEsIEhQQkRNQV9TTEFWRV9IUEJJRjNfVFgsIGdpY19paWQoMHg4NSksIFJTTkRfU1NJX1BMQVkpLAotCVJTTkRfU1NJX1NFVCgyLCBIUEJETUFfU0xBVkVfSFBCSUY0X1JYLCBnaWNfaWlkKDB4ODUpLCBSU05EX1NTSV9DTEtfUElOX1NIQVJFKSwKLQlSU05EX1NTSV9TRVQoMCwgSFBCRE1BX1NMQVZFX0hQQklGNV9UWCwgZ2ljX2lpZCgweDg2KSwgUlNORF9TU0lfUExBWSksCi0JUlNORF9TU0lfU0VUKDAsIEhQQkRNQV9TTEFWRV9IUEJJRjZfUlgsIGdpY19paWQoMHg4NiksIDApLAotCVJTTkRfU1NJX1NFVCgzLCBIUEJETUFfU0xBVkVfSFBCSUY3X1RYLCBnaWNfaWlkKDB4ODYpLCBSU05EX1NTSV9QTEFZKSwKLQlSU05EX1NTSV9TRVQoNCwgSFBCRE1BX1NMQVZFX0hQQklGOF9SWCwgZ2ljX2lpZCgweDg2KSwgUlNORF9TU0lfQ0xLX1BJTl9TSEFSRSksCisJUlNORF9TU0koSFBCRE1BX1NMQVZFX0hQQklGM19UWCwgZ2ljX2lpZCgweDg1KSwgMCksCisJUlNORF9TU0koSFBCRE1BX1NMQVZFX0hQQklGNF9SWCwgZ2ljX2lpZCgweDg1KSwgUlNORF9TU0lfQ0xLX1BJTl9TSEFSRSksCisJUlNORF9TU0koSFBCRE1BX1NMQVZFX0hQQklGNV9UWCwgZ2ljX2lpZCgweDg2KSwgMCksCisJUlNORF9TU0koSFBCRE1BX1NMQVZFX0hQQklGNl9SWCwgZ2ljX2lpZCgweDg2KSwgMCksCisJUlNORF9TU0koSFBCRE1BX1NMQVZFX0hQQklGN19UWCwgZ2ljX2lpZCgweDg2KSwgMCksCisJUlNORF9TU0koSFBCRE1BX1NMQVZFX0hQQklGOF9SWCwgZ2ljX2lpZCgweDg2KSwgUlNORF9TU0lfQ0xLX1BJTl9TSEFSRSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHJzbmRfc2N1X3BsYXRmb3JtX2luZm8gcnNuZF9zY3VbOV0gPSB7Ci0JeyAuZmxhZ3MgPSAwLCB9LCAvKiBTUlUgMCAqLwotCXsgLmZsYWdzID0gMCwgfSwgLyogU1JVIDEgKi8KLQl7IC5mbGFncyA9IDAsIH0sIC8qIFNSVSAyICovCi0JeyAuZmxhZ3MgPSBSU05EX1NDVV9VU0VfSFBCSUYsIH0sCi0JeyAuZmxhZ3MgPSBSU05EX1NDVV9VU0VfSFBCSUYsIH0sCi0JeyAuZmxhZ3MgPSBSU05EX1NDVV9VU0VfSFBCSUYsIH0sCi0JeyAuZmxhZ3MgPSBSU05EX1NDVV9VU0VfSFBCSUYsIH0sCi0JeyAuZmxhZ3MgPSBSU05EX1NDVV9VU0VfSFBCSUYsIH0sCi0JeyAuZmxhZ3MgPSBSU05EX1NDVV9VU0VfSFBCSUYsIH0sCitzdGF0aWMgc3RydWN0IHJzbmRfc3JjX3BsYXRmb3JtX2luZm8gcnNuZF9zcmNbOV0gPSB7CisJUlNORF9TUkNfVU5VU0VELCAvKiBTUlUgMCAqLworCVJTTkRfU1JDX1VOVVNFRCwgLyogU1JVIDEgKi8KKwlSU05EX1NSQ19VTlVTRUQsIC8qIFNSVSAyICovCisJUlNORF9TUkMoMCwgMCksCisJUlNORF9TUkMoMCwgMCksCisJUlNORF9TUkMoMCwgMCksCisJUlNORF9TUkMoMCwgMCksCisJUlNORF9TUkMoMCwgMCksCisJUlNORF9TUkMoMCwgMCksCit9OworCitzdGF0aWMgc3RydWN0IHJzbmRfZGFpX3BsYXRmb3JtX2luZm8gcnNuZF9kYWlbXSA9IHsKKwl7CisJCS5wbGF5YmFjayA9IHsgLnNzaSA9ICZyc25kX3NzaVs1XSwgLnNyYyA9ICZyc25kX3NyY1s1XSB9LAorCQkuY2FwdHVyZSAgPSB7IC5zc2kgPSAmcnNuZF9zc2lbNl0sIC5zcmMgPSAmcnNuZF9zcmNbNl0gfSwKKwl9LCB7CisJCS5wbGF5YmFjayA9IHsgLnNzaSA9ICZyc25kX3NzaVszXSwgLnNyYyA9ICZyc25kX3NyY1szXSB9LAorCX0sIHsKKwkJLmNhcHR1cmUgID0geyAuc3NpID0gJnJzbmRfc3NpWzRdLCAuc3JjID0gJnJzbmRfc3JjWzRdIH0sCisJfSwgeworCQkucGxheWJhY2sgPSB7IC5zc2kgPSAmcnNuZF9zc2lbN10sIC5zcmMgPSAmcnNuZF9zcmNbN10gfSwKKwl9LCB7CisJCS5jYXB0dXJlICA9IHsgLnNzaSA9ICZyc25kX3NzaVs4XSwgLnNyYyA9ICZyc25kX3NyY1s4XSB9LAorCX0sCiB9OwogCiBlbnVtIHsKQEAgLTQzNyw4ICs0NTIsMTAgQEAKIAkuZmxhZ3MJCT0gUlNORF9HRU4xLAogCS5zc2lfaW5mbwk9IHJzbmRfc3NpLAogCS5zc2lfaW5mb19ucgk9IEFSUkFZX1NJWkUocnNuZF9zc2kpLAotCS5zY3VfaW5mbwk9IHJzbmRfc2N1LAotCS5zY3VfaW5mb19ucgk9IEFSUkFZX1NJWkUocnNuZF9zY3UpLAorCS5zcmNfaW5mbwk9IHJzbmRfc3JjLAorCS5zcmNfaW5mb19ucgk9IEFSUkFZX1NJWkUocnNuZF9zcmMpLAorCS5kYWlfaW5mbwk9IHJzbmRfZGFpLAorCS5kYWlfaW5mb19ucgk9IEFSUkFZX1NJWkUocnNuZF9kYWkpLAogCS5zdGFydAkJPSByc25kX3N0YXJ0LAogCS5zdG9wCQk9IHJzbmRfc3RvcCwKIH07CkBAIC01OTEsNiArNjA4LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IGk7CiAKIAlyOGE3Nzc4X2Nsb2NrX2luaXQoKTsKQEAgLTY3Myw5ICs2OTEsNiBAQAogCX0KIAogCS8qIGZvciBBdWRpbyAqLwotCWNsayA9IGNsa19nZXQoTlVMTCwgImF1ZGlvX2Nsa19iIik7Ci0JY2xrX3NldF9yYXRlKGNsaywgMjQ1NzYwMDApOwotCWNsa19wdXQoY2xrKTsKIAlyc25kX2NvZGVjX3Bvd2VyKDUsIDEpOyAvKiBlbmFibGUgYWs0NjQyICovCiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKApAQCAtNjg0LDExICs2OTksMTUgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKAogCQkiYWs0NTU0LWFkYy1kYWMiLCAxLCBOVUxMLCAwKTsKIAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSgKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKAogCQkmcGxhdGZvcm1fYnVzLCAicmNhcl9zb3VuZCIsIC0xLAogCQlyc25kX3Jlc291cmNlcywgQVJSQVlfU0laRShyc25kX3Jlc291cmNlcyksCiAJCSZyc25kX2luZm8sIHNpemVvZihyc25kX2luZm8pKTsKIAorCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImNsa19iIik7CisJY2xrX3NldF9yYXRlKGNsaywgMjQ1NzYwMDApOworCWNsa19wdXQoY2xrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJzbmRfY2FyZF9pbmZvKTsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBjYXJkaW5mbyA9IHsKIAkJCS5wYXJlbnQgICAgICAgICA9ICZwbGF0Zm9ybV9idXMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWdlbm1haS1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZ2VubWFpLXJlZmVyZW5jZS5jCmluZGV4IDc2MzBjMTAuLjJmZjZhZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZ2VubWFpLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZ2VubWFpLXJlZmVyZW5jZS5jCkBAIC0xOCwyNyArMTgsMzEgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9yN3M3MjEwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisvKgorICogVGhpcyBpcyBhIHJlYWxseSBjcnVkZSBoYWNrIHRvIHByb3ZpZGUgY2xrZGV2IHN1cHBvcnQgdG8gcGxhdGZvcm0KKyAqIGRldmljZXMgdW50aWwgdGhleSBnZXQgbW92ZWQgdG8gRFQuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX25hbWUgY2xrX25hbWVzW10gPSB7CisJeyAibXR1MiIsICJmY2siLCAic2gtbXR1MiIgfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBnZW5tYWlfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfQ09NTU9OX0NMSwotCW9mX2Nsa19pbml0KE5VTEwpOwotI2Vsc2UKLQlyN3M3MjEwMF9jbG9ja19pbml0KCk7Ci0jZW5kaWYKKwlzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjbGtfbmFtZXMsIEFSUkFZX1NJWkUoY2xrX25hbWVzKSwgdHJ1ZSk7CiAJcjdzNzIxMDBfYWRkX2R0X2RldmljZXMoKTsKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2VubWFpX2JvYXJkc19jb21wYXRfZHRbXSBfX2luaXRjb25zdCA9IHsKLQkicmVuZXNhcyxnZW5tYWktcmVmZXJlbmNlIiwKKwkicmVuZXNhcyxnZW5tYWkiLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWdlbm1haS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nZW5tYWkuYwppbmRleCA2YzMyOGQ2Li5jOTQyMDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWdlbm1haS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZ2VubWFpLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF9ldGguaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvcnNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KQEAgLTg5LDYgKzkwLDQwIEBACiAJfSwKIH07CiAKKy8qIFNDSUYgKi8KKyNkZWZpbmUgUjdTNzIxMDBfU0NJRihpbmRleCwgYmFzZWFkZHIsIGlycSkJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSA9IHsJXAorCS50eXBlCQk9IFBPUlRfU0NJRiwJCQkJCVwKKwkucmVndHlwZQk9IFNDSXhfU0gyX1NDSUZfRklGT0RBVEFfUkVHVFlQRSwJCVwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwJCVwKKwkuc2NzY3IJCT0gU0NTQ1JfUklFIHwgU0NTQ1JfVElFIHwgU0NTQ1JfUkUgfCBTQ1NDUl9URSB8CVwKKwkJCSAgU0NTQ1JfUkVJRSwJCQkJCVwKK307CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2lmIyNpbmRleCMjX3Jlc291cmNlc1tdID0gewkJCVwKKwlERUZJTkVfUkVTX01FTShiYXNlYWRkciwgMHgxMDApLAkJCQlcCisJREVGSU5FX1JFU19JUlEoaXJxICsgMSksCQkJCQlcCisJREVGSU5FX1JFU19JUlEoaXJxICsgMiksCQkJCQlcCisJREVGSU5FX1JFU19JUlEoaXJxICsgMyksCQkJCQlcCisJREVGSU5FX1JFU19JUlEoaXJxKSwJCQkJCQlcCit9CQkJCQkJCQkJXAorCitSN1M3MjEwMF9TQ0lGKDAsIDB4ZTgwMDcwMDAsIGdpY19paWQoMjIxKSk7CitSN1M3MjEwMF9TQ0lGKDEsIDB4ZTgwMDc4MDAsIGdpY19paWQoMjI1KSk7CitSN1M3MjEwMF9TQ0lGKDIsIDB4ZTgwMDgwMDAsIGdpY19paWQoMjI5KSk7CitSN1M3MjEwMF9TQ0lGKDMsIDB4ZTgwMDg4MDAsIGdpY19paWQoMjMzKSk7CitSN1M3MjEwMF9TQ0lGKDQsIDB4ZTgwMDkwMDAsIGdpY19paWQoMjM3KSk7CitSN1M3MjEwMF9TQ0lGKDUsIDB4ZTgwMDk4MDAsIGdpY19paWQoMjQxKSk7CitSN1M3MjEwMF9TQ0lGKDYsIDB4ZTgwMGEwMDAsIGdpY19paWQoMjQ1KSk7CitSN1M3MjEwMF9TQ0lGKDcsIDB4ZTgwMGE4MDAsIGdpY19paWQoMjQ5KSk7CisKKyNkZWZpbmUgcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZihpbmRleCkJCQkJCSAgICAgICBcCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKCZwbGF0Zm9ybV9idXMsICJzaC1zY2kiLCBpbmRleCwgICAgICBcCisJCQkJCSAgc2NpZiMjaW5kZXgjI19yZXNvdXJjZXMsCSAgICAgICBcCisJCQkJCSAgQVJSQVlfU0laRShzY2lmIyNpbmRleCMjX3Jlc291cmNlcyksIFwKKwkJCQkJICAmc2NpZiMjaW5kZXgjI19wbGF0Zm9ybV9kYXRhLAkgICAgICAgXAorCQkJCQkgIHNpemVvZihzY2lmIyNpbmRleCMjX3BsYXRmb3JtX2RhdGEpKQorCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2VubWFpX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCiB7CiAJcjdzNzIxMDBfY2xvY2tfaW5pdCgpOwpAQCAtMTAyLDYgKzEzNywxNSBAQAogCXI3czcyMTAwX3JlZ2lzdGVyX3JzcGkoMyk7CiAJcjdzNzIxMDBfcmVnaXN0ZXJfcnNwaSg0KTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfaW5mbywgQVJSQVlfU0laRShzcGlfaW5mbykpOworCisJcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZigwKTsKKwlyN3M3MjEwMF9yZWdpc3Rlcl9zY2lmKDEpOworCXI3czcyMTAwX3JlZ2lzdGVyX3NjaWYoMik7CisJcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZigzKTsKKwlyN3M3MjEwMF9yZWdpc3Rlcl9zY2lmKDQpOworCXI3czcyMTAwX3JlZ2lzdGVyX3NjaWYoNSk7CisJcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZig2KTsKKwlyN3M3MjEwMF9yZWdpc3Rlcl9zY2lmKDcpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdlbm1haV9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0Y29uc3QgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2gtcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2gtcmVmZXJlbmNlLmMKaW5kZXggYTNmZDMwMi4uZDMyMmExNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC1yZWZlcmVuY2UuYwpAQCAtMTksMTIgKzE5LDExIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9yY2FyLWR1Lmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9yY2FyLWdlbjIuaD4KQEAgLTgyLDQ5ICs4MSwzNSBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZpbmZvKTsKIH0KIAorLyoKKyAqIFRoaXMgaXMgYSByZWFsbHkgY3J1ZGUgaGFjayB0byBwcm92aWRlIGNsa2RldiBzdXBwb3J0IHRvIHBsYXRmb3JtCisgKiBkZXZpY2VzIHVudGlsIHRoZXkgZ2V0IG1vdmVkIHRvIERULgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19uYW1lIGNsa19uYW1lc1tdIF9faW5pdGNvbnN0ID0geworCXsgImNtdDAiLCAiZmNrIiwgInNoLWNtdC00OC1nZW4yLjAiIH0sCisJeyAiZHUwIiwgImR1LjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAorCXsgImR1MSIsICJkdS4xIiwgInJjYXItZHUtcjhhNzc5MSIgfSwKKwl7ICJsdmRzMCIsICJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAorfTsKKworLyoKKyAqIFRoaXMgaXMgYSByZWFsbHkgY3J1ZGUgaGFjayB0byB3b3JrIGFyb3VuZCBjb3JlIHBsYXRmb3JtIGNsb2NrIGlzc3VlcworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19uYW1lIGNsa19lbmFibGVzW10gX19pbml0Y29uc3QgPSB7CisJeyAiZXRoZXIiLCBOVUxMLCAiZWU3MDAwMDAuZXRoZXJuZXQiIH0sCisJeyAiaTJjMiIsIE5VTEwsICJlNjUzMDAwMC5pMmMiIH0sCisJeyAibXNpb2YwIiwgTlVMTCwgImU2ZTIwMDAwLnNwaSIgfSwKKwl7ICJxc3BpX21vZCIsIE5VTEwsICJlNmIxMDAwMC5zcGkiIH0sCisJeyAic2RoaTAiLCBOVUxMLCAiZWUxMDAwMDAuc2QiIH0sCisJeyAic2RoaTEiLCBOVUxMLCAiZWUxNDAwMDAuc2QiIH0sCisJeyAic2RoaTIiLCBOVUxMLCAiZWUxNjAwMDAuc2QiIH0sCisJeyAidGhlcm1hbCIsIE5VTEwsICJlNjFmMDAwMC50aGVybWFsIiB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKLQkvKgotCSAqIFRoaXMgaXMgYSByZWFsbHkgY3J1ZGUgaGFjayB0byBwcm92aWRlIGNsa2RldiBzdXBwb3J0IHRvIHRoZSBDTVQgYW5kCi0JICogRFUgZGV2aWNlcyB1bnRpbCB0aGV5IGdldCBtb3ZlZCB0byBEVC4KLQkgKi8KLQlzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19uYW1lIHsKLQkJY29uc3QgY2hhciAqY2xrOwotCQljb25zdCBjaGFyICpjb25faWQ7Ci0JCWNvbnN0IGNoYXIgKmRldl9pZDsKLQl9IGNsa19uYW1lc1tdID0gewotCQl7ICJjbXQwIiwgTlVMTCwgInNoX2NtdC4wIiB9LAotCQl7ICJzY2lmYTAiLCBOVUxMLCAic2gtc2NpLjAiIH0sCi0JCXsgInNjaWZhMSIsIE5VTEwsICJzaC1zY2kuMSIgfSwKLQkJeyAic2NpZmIwIiwgTlVMTCwgInNoLXNjaS4yIiB9LAotCQl7ICJzY2lmYjEiLCBOVUxMLCAic2gtc2NpLjMiIH0sCi0JCXsgInNjaWZiMiIsIE5VTEwsICJzaC1zY2kuNCIgfSwKLQkJeyAic2NpZmEyIiwgTlVMTCwgInNoLXNjaS41IiB9LAotCQl7ICJzY2lmMCIsIE5VTEwsICJzaC1zY2kuNiIgfSwKLQkJeyAic2NpZjEiLCBOVUxMLCAic2gtc2NpLjciIH0sCi0JCXsgInNjaWYyIiwgTlVMTCwgInNoLXNjaS44IiB9LAotCQl7ICJzY2lmMyIsIE5VTEwsICJzaC1zY2kuOSIgfSwKLQkJeyAic2NpZjQiLCBOVUxMLCAic2gtc2NpLjEwIiB9LAotCQl7ICJzY2lmNSIsIE5VTEwsICJzaC1zY2kuMTEiIH0sCi0JCXsgInNjaWZhMyIsIE5VTEwsICJzaC1zY2kuMTIiIH0sCi0JCXsgInNjaWZhNCIsIE5VTEwsICJzaC1zY2kuMTMiIH0sCi0JCXsgInNjaWZhNSIsIE5VTEwsICJzaC1zY2kuMTQiIH0sCi0JCXsgImR1MCIsICJkdS4wIiwgInJjYXItZHUtcjhhNzc5MSIgfSwKLQkJeyAiZHUxIiwgImR1LjEiLCAicmNhci1kdS1yOGE3NzkxIiB9LAotCQl7ICJsdmRzMCIsICJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAotCX07Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xrX25hbWVzKTsgKytpKSB7Ci0JCWNsayA9IGNsa19nZXQoTlVMTCwgY2xrX25hbWVzW2ldLmNsayk7Ci0JCWlmICghSVNfRVJSKGNsaykpIHsKLQkJCWNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCBjbGtfbmFtZXNbaV0uY29uX2lkLAotCQkJCQkgICAgY2xrX25hbWVzW2ldLmRldl9pZCk7Ci0JCQljbGtfcHV0KGNsayk7Ci0JCX0KLQl9Ci0KKwlzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjbGtfbmFtZXMsIEFSUkFZX1NJWkUoY2xrX25hbWVzKSwgZmFsc2UpOworCXNobW9iaWxlX2Nsa193b3JrYXJvdW5kKGNsa19lbmFibGVzLCBBUlJBWV9TSVpFKGNsa19lbmFibGVzKSwgdHJ1ZSk7CiAJcjhhNzc5MV9hZGRfZHRfZGV2aWNlcygpOwogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKIApAQCAtMTM5LDcgKzEyNCw3IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoS09FTFNDSF9EVCwgImtvZWxzY2giKQogCS5zbXAJCT0gc21wX29wcyhyOGE3NzkxX3NtcF9vcHMpLAotCS5pbml0X2Vhcmx5CT0gcjhhNzc5MV9pbml0X2Vhcmx5LAorCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IGtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXMsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLmMKaW5kZXggNWEwMzRmZi4uYzZjNjg4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCXsKIAkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaV9mbGFzaF9kYXRhLAotCQkubW9kZQkJPSBTUElfTU9ERV8wLAorCQkubW9kZQkJPSBTUElfTU9ERV8wIHwgU1BJX1RYX1FVQUQgfCBTUElfUlhfUVVBRCwKIAkJLm1heF9zcGVlZF9oegk9IDMwMDAwMDAwLAogCQkuYnVzX251bQk9IDAsCiAJCS5jaGlwX3NlbGVjdAk9IDAsCkBAIC01MjIsNyArNTIyLDcgQEAKIAogRFRfTUFDSElORV9TVEFSVChLT0VMU0NIX0RULCAia29lbHNjaCIpCiAJLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTFfc21wX29wcyksCi0JLmluaXRfZWFybHkJPSByOGE3NzkxX2luaXRfZWFybHksCisJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAogCS5pbml0X3RpbWUJPSByY2FyX2dlbjJfdGltZXJfaW5pdCwKIAkuaW5pdF9tYWNoaW5lCT0ga29lbHNjaF9pbml0LAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci1yZWZlcmVuY2UuYwppbmRleCA0NDBhYWMzLi43NDk4MzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXItcmVmZXJlbmNlLmMKQEAgLTE4LDEyICsxOCwxMSBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3JjYXItZHUuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL3JjYXItZ2VuMi5oPgpAQCAtODYsNDYgKzg1LDM2IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmluZm8pOwogfQogCisvKgorICogVGhpcyBpcyBhIHJlYWxseSBjcnVkZSBoYWNrIHRvIHByb3ZpZGUgY2xrZGV2IHN1cHBvcnQgdG8gcGxhdGZvcm0KKyAqIGRldmljZXMgdW50aWwgdGhleSBnZXQgbW92ZWQgdG8gRFQuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX25hbWUgY2xrX25hbWVzW10gX19pbml0Y29uc3QgPSB7CisJeyAiY210MCIsICJmY2siLCAic2gtY210LTQ4LWdlbjIuMCIgfSwKKwl7ICJkdTAiLCAiZHUuMCIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCisJeyAiZHUxIiwgImR1LjEiLCAicmNhci1kdS1yOGE3NzkwIiB9LAorCXsgImR1MiIsICJkdS4yIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKKwl7ICJsdmRzMCIsICJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkwIiB9LAorCXsgImx2ZHMxIiwgImx2ZHMuMSIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCit9OworCisvKgorICogVGhpcyBpcyBhIHJlYWxseSBjcnVkZSBoYWNrIHRvIHdvcmsgYXJvdW5kIGNvcmUgcGxhdGZvcm0gY2xvY2sgaXNzdWVzCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX25hbWUgY2xrX2VuYWJsZXNbXSBfX2luaXRjb25zdCA9IHsKKwl7ICJldGhlciIsIE5VTEwsICJlZTcwMDAwMC5ldGhlcm5ldCIgfSwKKwl7ICJtc2lvZjEiLCBOVUxMLCAiZTZlMTAwMDAuc3BpIiB9LAorCXsgIm1tY2lmMSIsIE5VTEwsICJlZTIyMDAwMC5tbWMiIH0sCisJeyAicXNwaV9tb2QiLCBOVUxMLCAiZTZiMTAwMDAuc3BpIiB9LAorCXsgInNkaGkwIiwgTlVMTCwgImVlMTAwMDAwLnNkIiB9LAorCXsgInNkaGkyIiwgTlVMTCwgImVlMTQwMDAwLnNkIiB9LAorCXsgInRoZXJtYWwiLCBOVUxMLCAiZTYxZjAwMDAudGhlcm1hbCIgfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBsYWdlcl9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogewotCS8qCi0JICogVGhpcyBpcyBhIHJlYWxseSBjcnVkZSBoYWNrIHRvIHByb3ZpZGUgY2xrZGV2IHN1cHBvcnQgdG8gcGxhdGZvcm0KLQkgKiBkZXZpY2VzIHVudGlsIHRoZXkgZ2V0IG1vdmVkIHRvIERULgotCSAqLwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX25hbWUgewotCQljb25zdCBjaGFyICpjbGs7Ci0JCWNvbnN0IGNoYXIgKmNvbl9pZDsKLQkJY29uc3QgY2hhciAqZGV2X2lkOwotCX0gY2xrX25hbWVzW10gPSB7Ci0JCXsgImNtdDAiLCBOVUxMLCAic2hfY210LjAiIH0sCi0JCXsgInNjaWZhMCIsIE5VTEwsICJzaC1zY2kuMCIgfSwKLQkJeyAic2NpZmExIiwgTlVMTCwgInNoLXNjaS4xIiB9LAotCQl7ICJzY2lmYjAiLCBOVUxMLCAic2gtc2NpLjIiIH0sCi0JCXsgInNjaWZiMSIsIE5VTEwsICJzaC1zY2kuMyIgfSwKLQkJeyAic2NpZmIyIiwgTlVMTCwgInNoLXNjaS40IiB9LAotCQl7ICJzY2lmYTIiLCBOVUxMLCAic2gtc2NpLjUiIH0sCi0JCXsgInNjaWYwIiwgTlVMTCwgInNoLXNjaS42IiB9LAotCQl7ICJzY2lmMSIsIE5VTEwsICJzaC1zY2kuNyIgfSwKLQkJeyAiaHNjaWYwIiwgTlVMTCwgInNoLXNjaS44IiB9LAotCQl7ICJoc2NpZjEiLCBOVUxMLCAic2gtc2NpLjkiIH0sCi0JCXsgImR1MCIsICJkdS4wIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKLQkJeyAiZHUxIiwgImR1LjEiLCAicmNhci1kdS1yOGE3NzkwIiB9LAotCQl7ICJkdTIiLCAiZHUuMiIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JCXsgImx2ZHMwIiwgImx2ZHMuMCIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JCXsgImx2ZHMxIiwgImx2ZHMuMSIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JfTsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtfbmFtZXMpOyArK2kpIHsKLQkJY2xrID0gY2xrX2dldChOVUxMLCBjbGtfbmFtZXNbaV0uY2xrKTsKLQkJaWYgKCFJU19FUlIoY2xrKSkgewotCQkJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIGNsa19uYW1lc1tpXS5jb25faWQsCi0JCQkJCSAgICBjbGtfbmFtZXNbaV0uZGV2X2lkKTsKLQkJCWNsa19wdXQoY2xrKTsKLQkJfQotCX0KLQorCXNobW9iaWxlX2Nsa193b3JrYXJvdW5kKGNsa19uYW1lcywgQVJSQVlfU0laRShjbGtfbmFtZXMpLCBmYWxzZSk7CisJc2htb2JpbGVfY2xrX3dvcmthcm91bmQoY2xrX2VuYWJsZXMsIEFSUkFZX1NJWkUoY2xrX2VuYWJsZXMpLCB0cnVlKTsKIAlyOGE3NzkwX2FkZF9kdF9kZXZpY2VzKCk7CiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKaW5kZXggMThjN2UwMy4uZjhiMWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwpAQCAtMzI1LDEyICszMjUsMTIgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGlfaW5mb1tdIF9faW5pdGNvbnN0ID0gewogCXsKLQkJLm1vZGFsaWFzICAgICAgICAgICAgICAgPSAibTI1cDgwIiwKLQkJLnBsYXRmb3JtX2RhdGEgICAgICAgICAgPSAmc3BpX2ZsYXNoX2RhdGEsCi0JCS5tb2RlICAgICAgICAgICAgICAgICAgID0gU1BJX01PREVfMCwKLQkJLm1heF9zcGVlZF9oeiAgICAgICAgICAgPSAzMDAwMDAwMCwKLQkJLmJ1c19udW0gICAgICAgICAgICAgICAgPSAwLAotCQkuY2hpcF9zZWxlY3QgICAgICAgICAgICA9IDAsCisJCS5tb2RhbGlhcwk9ICJtMjVwODAiLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzcGlfZmxhc2hfZGF0YSwKKwkJLm1vZGUJCT0gU1BJX01PREVfMCB8IFNQSV9UWF9RVUFEIHwgU1BJX1JYX1FVQUQsCisJCS5tYXhfc3BlZWRfaHoJPSAzMDAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAogCX0sCiB9OwogCkBAIC01NjcsMjAgKzU2NywyNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByc25kX3NzaV9wbGF0Zm9ybV9pbmZvIHJzbmRfc3NpW10gPSB7Ci0JUlNORF9TU0lfU0VUKDAsIDAsIGdpY19zcGkoMzcwKSwgUlNORF9TU0lfUExBWSksCi0JUlNORF9TU0lfU0VUKDAsIDAsIGdpY19zcGkoMzcxKSwgUlNORF9TU0lfQ0xLX1BJTl9TSEFSRSksCisJUlNORF9TU0koMCwgZ2ljX3NwaSgzNzApLCAwKSwKKwlSU05EX1NTSSgwLCBnaWNfc3BpKDM3MSksIFJTTkRfU1NJX0NMS19QSU5fU0hBUkUpLAogfTsKIAotc3RhdGljIHN0cnVjdCByc25kX3NjdV9wbGF0Zm9ybV9pbmZvIHJzbmRfc2N1WzJdID0geworc3RhdGljIHN0cnVjdCByc25kX3NyY19wbGF0Zm9ybV9pbmZvIHJzbmRfc3JjWzJdID0gewogCS8qIG5vIG1lbWJlciBhdCB0aGlzIHBvaW50ICovCiB9OwogCitzdGF0aWMgc3RydWN0IHJzbmRfZGFpX3BsYXRmb3JtX2luZm8gcnNuZF9kYWkgPSB7CisJLnBsYXliYWNrID0geyAuc3NpID0gJnJzbmRfc3NpWzBdLCB9LAorCS5jYXB0dXJlICA9IHsgLnNzaSA9ICZyc25kX3NzaVsxXSwgfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmNhcl9zbmRfaW5mbyByc25kX2luZm8gPSB7CiAJLmZsYWdzCQk9IFJTTkRfR0VOMiwKIAkuc3NpX2luZm8JPSByc25kX3NzaSwKIAkuc3NpX2luZm9fbnIJPSBBUlJBWV9TSVpFKHJzbmRfc3NpKSwKLQkuc2N1X2luZm8JPSByc25kX3NjdSwKLQkuc2N1X2luZm9fbnIJPSBBUlJBWV9TSVpFKHJzbmRfc2N1KSwKKwkuc3JjX2luZm8JPSByc25kX3NyYywKKwkuc3JjX2luZm9fbnIJPSBBUlJBWV9TSVpFKHJzbmRfc3JjKSwKKwkuZGFpX2luZm8JPSAmcnNuZF9kYWksCisJLmRhaV9pbmZvX25yCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXNvY19zaW1wbGVfY2FyZF9pbmZvIHJzbmRfY2FyZF9pbmZvID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1lbWV2Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1lbWV2Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWMxM2JhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stZW1ldjIuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgotICogRW1tYSBNb2JpbGUgRVYyIGNsb2NrIGZyYW1ld29yayBzdXBwb3J0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyICBNYWdudXMgRGFtbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLQotI2RlZmluZSBFTUVWMl9TTVVfQkFTRSAweGUwMTEwMDAwCi0KLS8qIEVNRVYyIFNNVSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVVNJQVUwX1JTVENUUkwgMHgwOTQKLSNkZWZpbmUgVVNJQlUxX1JTVENUUkwgMHgwYWMKLSNkZWZpbmUgVVNJQlUyX1JTVENUUkwgMHgwYjAKLSNkZWZpbmUgVVNJQlUzX1JTVENUUkwgMHgwYjQKLSNkZWZpbmUgU1RJX1JTVENUUkwgMHgxMjQKLSNkZWZpbmUgVVNJQVUwR0NMS0NUUkwgMHg0YTAKLSNkZWZpbmUgVVNJQlUxR0NMS0NUUkwgMHg0YjgKLSNkZWZpbmUgVVNJQlUyR0NMS0NUUkwgMHg0YmMKLSNkZWZpbmUgVVNJQlUzR0NMS0NUUkwgMHgwNGMwCi0jZGVmaW5lIFNUSUdDTEtDVFJMIDB4NTI4Ci0jZGVmaW5lIFVTSUFVMFNDTEtESVYgMHg2MWMKLSNkZWZpbmUgVVNJQjJTQ0xLRElWIDB4NjVjCi0jZGVmaW5lIFVTSUIzU0NMS0RJViAweDY2MAotI2RlZmluZSBTVElfQ0xLU0VMIDB4Njg4Ci0KLS8qIG5vdCBwcmV0dHksIGJ1dCBoZXkgKi8KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNtdV9iYXNlOwotCi1zdGF0aWMgdm9pZCBlbWV2Ml9zbXVfd3JpdGUodW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IG9mZnMpCi17Ci0JQlVHX09OKCFzbXVfYmFzZSB8fCAob2ZmcyA+PSBQQUdFX1NJWkUpKTsKLQlpb3dyaXRlMzIodmFsdWUsIHNtdV9iYXNlICsgb2Zmcyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX21hcHBpbmcgc211X21hcHBpbmcgPSB7Ci0JLnBoeXMJPSBFTUVWMl9TTVVfQkFTRSwKLQkubGVuCT0gUEFHRV9TSVpFLAotfTsKLQotLyogRml4ZWQgMzIgS0h6IHJvb3QgY2xvY2sgZnJvbSBDMzJLIHBpbiAqLwotc3RhdGljIHN0cnVjdCBjbGsgYzMya19jbGsgPSB7Ci0JLnJhdGUgICAgICAgICAgID0gMzI3NjgsCi0JLm1hcHBpbmcJPSAmc211X21hcHBpbmcsCi19OwotCi0vKiBQTEwzIG11bHRpcGxpZXMgQzMySyB3aXRoIDcwMDAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBsbDNfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiA3MDAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNoX2Nsa19vcHMgcGxsM19jbGtfb3BzID0gewotCS5yZWNhbGMJCT0gcGxsM19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwbGwzX2NsayA9IHsKLQkub3BzCQk9ICZwbGwzX2Nsa19vcHMsCi0JLnBhcmVudAkJPSAmYzMya19jbGssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqbWFpbl9jbGtzW10gPSB7Ci0JJmMzMmtfY2xrLAotCSZwbGwzX2NsaywKLX07Ci0KLWVudW0geyBTQ0xLRElWX1VTSUFVMCwgU0NMS0RJVl9VU0lCVTIsIFNDTEtESVZfVVNJQlUxLCBTQ0xLRElWX1VTSUJVMywKLQlTQ0xLRElWX05SIH07Ci0KLSNkZWZpbmUgU0NMS0RJVihfcmVnLCBfc2hpZnQpCQkJXAotewkJCQkJCQkJXAotCS5wYXJlbnQJCT0gJnBsbDNfY2xrLAkJCQlcCi0JLmVuYWJsZV9yZWcJPSBJT01FTShFTUVWMl9TTVVfQkFTRSArIChfcmVnKSksCVwKLQkuZW5hYmxlX2JpdAk9IF9zaGlmdCwJCQkJXAotfQotCi1zdGF0aWMgc3RydWN0IGNsayBzY2xrZGl2X2Nsa3NbU0NMS0RJVl9OUl0gPSB7Ci0JW1NDTEtESVZfVVNJQVUwXSA9IFNDTEtESVYoVVNJQVUwU0NMS0RJViwgMCksCi0JW1NDTEtESVZfVVNJQlUyXSA9IFNDTEtESVYoVVNJQjJTQ0xLRElWLCAxNiksCi0JW1NDTEtESVZfVVNJQlUxXSA9IFNDTEtESVYoVVNJQjJTQ0xLRElWLCAwKSwKLQlbU0NMS0RJVl9VU0lCVTNdID0gU0NMS0RJVihVU0lCM1NDTEtESVYsIDApLAotfTsKLQotZW51bSB7IEdDTEtfVVNJQVUwX1NDTEssIEdDTEtfVVNJQlUxX1NDTEssIEdDTEtfVVNJQlUyX1NDTEssIEdDTEtfVVNJQlUzX1NDTEssCi0JR0NMS19TVElfU0NMSywKLQlHQ0xLX05SIH07Ci0KLSNkZWZpbmUgR0NMS19TQ0xLKF9wYXJlbnQsIF9yZWcpIFwKLXsJCQkJCQkJCVwKLQkucGFyZW50CQk9IF9wYXJlbnQsCQkJCVwKLQkuZW5hYmxlX3JlZwk9IElPTUVNKEVNRVYyX1NNVV9CQVNFICsgKF9yZWcpKSwJXAotCS5lbmFibGVfYml0CT0gMSwgLyogU0NMS19HQ0MgKi8JCQlcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdjbGtfY2xrc1tHQ0xLX05SXSA9IHsKLQlbR0NMS19VU0lBVTBfU0NMS10gPSBHQ0xLX1NDTEsoJnNjbGtkaXZfY2xrc1tTQ0xLRElWX1VTSUFVMF0sCi0JCQkJICAgICAgIFVTSUFVMEdDTEtDVFJMKSwKLQlbR0NMS19VU0lCVTFfU0NMS10gPSBHQ0xLX1NDTEsoJnNjbGtkaXZfY2xrc1tTQ0xLRElWX1VTSUJVMV0sCi0JCQkJICAgICAgIFVTSUJVMUdDTEtDVFJMKSwKLQlbR0NMS19VU0lCVTJfU0NMS10gPSBHQ0xLX1NDTEsoJnNjbGtkaXZfY2xrc1tTQ0xLRElWX1VTSUJVMl0sCi0JCQkJICAgICAgIFVTSUJVMkdDTEtDVFJMKSwKLQlbR0NMS19VU0lCVTNfU0NMS10gPSBHQ0xLX1NDTEsoJnNjbGtkaXZfY2xrc1tTQ0xLRElWX1VTSUJVM10sCi0JCQkJICAgICAgIFVTSUJVM0dDTEtDVFJMKSwKLQlbR0NMS19TVElfU0NMS10gPSBHQ0xLX1NDTEsoJmMzMmtfY2xrLCBTVElHQ0xLQ1RSTCksCi19OwotCi1zdGF0aWMgaW50IGVtZXYyX2djbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpb3dyaXRlMzIoaW9yZWFkMzIoY2xrLT5tYXBwZWRfcmVnKSB8ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCksCi0JCSAgY2xrLT5tYXBwZWRfcmVnKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZW1ldjJfZ2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpb3dyaXRlMzIoaW9yZWFkMzIoY2xrLT5tYXBwZWRfcmVnKSAmIH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpLAotCQkgIGNsay0+bWFwcGVkX3JlZyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfY2xrX29wcyBlbWV2Ml9nY2xrX2Nsa19vcHMgPSB7Ci0JLmVuYWJsZQkJPSBlbWV2Ml9nY2xrX2VuYWJsZSwKLQkuZGlzYWJsZQk9IGVtZXYyX2djbGtfZGlzYWJsZSwKLQkucmVjYWxjCQk9IGZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBlbWV2Ml9nY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBucikKLXsKLQlzdHJ1Y3QgY2xrICpjbGtwOwotCWludCByZXQgPSAwOwotCWludCBrOwotCi0JZm9yIChrID0gMDsgIXJldCAmJiAoayA8IG5yKTsgaysrKSB7Ci0JCWNsa3AgPSBjbGtzICsgazsKLQkJY2xrcC0+b3BzID0gJmVtZXYyX2djbGtfY2xrX29wczsKLQkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGtwKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlbWV2Ml9zY2xrZGl2X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgaW50IHNjbGtfZGl2OwotCi0Jc2Nsa19kaXYgPSAoaW9yZWFkMzIoY2xrLT5tYXBwZWRfcmVnKSA+PiBjbGstPmVuYWJsZV9iaXQpICYgMHhmZjsKLQotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIChzY2xrX2RpdiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IHNoX2Nsa19vcHMgZW1ldjJfc2Nsa2Rpdl9jbGtfb3BzID0gewotCS5yZWNhbGMJCT0gZW1ldjJfc2Nsa2Rpdl9yZWNhbGMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBlbWV2Ml9zY2xrZGl2X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBucikKLXsKLQlzdHJ1Y3QgY2xrICpjbGtwOwotCWludCByZXQgPSAwOwotCWludCBrOwotCi0JZm9yIChrID0gMDsgIXJldCAmJiAoayA8IG5yKTsgaysrKSB7Ci0JCWNsa3AgPSBjbGtzICsgazsKLQkJY2xrcC0+b3BzID0gJmVtZXYyX3NjbGtkaXZfY2xrX29wczsKLQkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGtwKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewotCUNMS0RFVl9ERVZfSUQoInNlcmlhbDgyNTAtZW0uMCIsICZnY2xrX2Nsa3NbR0NMS19VU0lBVTBfU0NMS10pLAotCUNMS0RFVl9ERVZfSUQoImUxMDIwMDAwLnVhcnQiLCAmZ2Nsa19jbGtzW0dDTEtfVVNJQVUwX1NDTEtdKSwKLQlDTEtERVZfREVWX0lEKCJzZXJpYWw4MjUwLWVtLjEiLCAmZ2Nsa19jbGtzW0dDTEtfVVNJQlUxX1NDTEtdKSwKLQlDTEtERVZfREVWX0lEKCJlMTAzMDAwMC51YXJ0IiwgJmdjbGtfY2xrc1tHQ0xLX1VTSUJVMV9TQ0xLXSksCi0JQ0xLREVWX0RFVl9JRCgic2VyaWFsODI1MC1lbS4yIiwgJmdjbGtfY2xrc1tHQ0xLX1VTSUJVMl9TQ0xLXSksCi0JQ0xLREVWX0RFVl9JRCgiZTEwNDAwMDAudWFydCIsICZnY2xrX2Nsa3NbR0NMS19VU0lCVTJfU0NMS10pLAotCUNMS0RFVl9ERVZfSUQoInNlcmlhbDgyNTAtZW0uMyIsICZnY2xrX2Nsa3NbR0NMS19VU0lCVTNfU0NMS10pLAotCUNMS0RFVl9ERVZfSUQoImUxMDUwMDAwLnVhcnQiLCAmZ2Nsa19jbGtzW0dDTEtfVVNJQlUzX1NDTEtdKSwKLQlDTEtERVZfREVWX0lEKCJlbV9zdGkuMCIsICZnY2xrX2Nsa3NbR0NMS19TVElfU0NMS10pLAotCUNMS0RFVl9ERVZfSUQoImUwMTgwMDAwLnN0aSIsICZnY2xrX2Nsa3NbR0NMS19TVElfU0NMS10pLAotfTsKLQotdm9pZCBfX2luaXQgZW1ldjJfY2xvY2tfaW5pdCh2b2lkKQotewotCWludCBrLCByZXQgPSAwOwotCi0Jc211X2Jhc2UgPSBpb3JlbWFwKEVNRVYyX1NNVV9CQVNFLCBQQUdFX1NJWkUpOwotCUJVR19PTighc211X2Jhc2UpOwotCi0JLyogc2V0dXAgU1RJIHRpbWVyIHRvIHJ1biBvbiAzMi43Njgga0h6IGFuZCBkZWFzc2VydCByZXNldCAqLwotCWVtZXYyX3NtdV93cml0ZSgwLCBTVElfQ0xLU0VMKTsKLQllbWV2Ml9zbXVfd3JpdGUoMSwgU1RJX1JTVENUUkwpOwotCi0JLyogZGVhc3NlcnQgcmVzZXQgZm9yIFVBUlQwLT5VQVJUMyAqLwotCWVtZXYyX3NtdV93cml0ZSgyLCBVU0lBVTBfUlNUQ1RSTCk7Ci0JZW1ldjJfc211X3dyaXRlKDIsIFVTSUJVMV9SU1RDVFJMKTsKLQllbWV2Ml9zbXVfd3JpdGUoMiwgVVNJQlUyX1JTVENUUkwpOwotCWVtZXYyX3NtdV93cml0ZSgyLCBVU0lCVTNfUlNUQ1RSTCk7Ci0KLQlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgQVJSQVlfU0laRShtYWluX2Nsa3MpKTsgaysrKQotCQlyZXQgPSBjbGtfcmVnaXN0ZXIobWFpbl9jbGtzW2tdKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBlbWV2Ml9zY2xrZGl2X3JlZ2lzdGVyKHNjbGtkaXZfY2xrcywgU0NMS0RJVl9OUik7Ci0KLQlpZiAoIXJldCkKLQkJcmV0ID0gZW1ldjJfZ2Nsa19yZWdpc3RlcihnY2xrX2Nsa3MsIEdDTEtfTlIpOwotCi0JY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKLQotCWlmICghcmV0KQotCQlzaG1vYmlsZV9jbGtfaW5pdCgpOwotCWVsc2UKLQkJcGFuaWMoImZhaWxlZCB0byBzZXR1cCBlbWV2MiBjbG9ja3NcbiIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yN3M3MjEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yN3M3MjEwMC5jCmluZGV4IGJlZTAwNzMuLmRmMTg3NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjdzNzIxMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI3czcyMTAwLmMKQEAgLTE5NCwxNyArMTk0LDcgQEAKIAlDTEtERVZfREVWX0lEKCJyc3BpLXJ6LjIiLCAmbXN0cF9jbGtzW01TVFAxMDVdKSwKIAlDTEtERVZfREVWX0lEKCJyc3BpLXJ6LjMiLCAmbXN0cF9jbGtzW01TVFAxMDRdKSwKIAlDTEtERVZfREVWX0lEKCJyc3BpLXJ6LjQiLCAmbXN0cF9jbGtzW01TVFAxMDNdKSwKLQlDTEtERVZfREVWX0lEKCJlODAwYzgwMC5zcGkiLCAmbXN0cF9jbGtzW01TVFAxMDddKSwKLQlDTEtERVZfREVWX0lEKCJlODAwZDAwMC5zcGkiLCAmbXN0cF9jbGtzW01TVFAxMDZdKSwKLQlDTEtERVZfREVWX0lEKCJlODAwZDgwMC5zcGkiLCAmbXN0cF9jbGtzW01TVFAxMDVdKSwKLQlDTEtERVZfREVWX0lEKCJlODAwZTAwMC5zcGkiLCAmbXN0cF9jbGtzW01TVFAxMDRdKSwKLQlDTEtERVZfREVWX0lEKCJlODAwZTgwMC5zcGkiLCAmbXN0cF9jbGtzW01TVFAxMDNdKSwKLQlDTEtERVZfREVWX0lEKCJmY2ZlZTAwMC5pMmMiLCAmbXN0cF9jbGtzW01TVFA5N10pLAotCUNMS0RFVl9ERVZfSUQoImZjZmVlNDAwLmkyYyIsICZtc3RwX2Nsa3NbTVNUUDk2XSksCi0JQ0xLREVWX0RFVl9JRCgiZmNmZWU4MDAuaTJjIiwgJm1zdHBfY2xrc1tNU1RQOTVdKSwKLQlDTEtERVZfREVWX0lEKCJmY2ZlZWMwMC5pMmMiLCAmbXN0cF9jbGtzW01TVFA5NF0pLAogCUNMS0RFVl9ERVZfSUQoInI3czcyMTAwLWV0aGVyIiwgJm1zdHBfY2xrc1tNU1RQNzRdKSwKLQlDTEtERVZfQ09OX0lEKCJtdHUyX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDMzXSksCiAKIAkvKiBJQ0sgKi8KIAlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tNU1RQNDddKSwKQEAgLTIxNSw2ICsyMDUsNyBAQAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFA0Ml0pLAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjYiLCAmbXN0cF9jbGtzW01TVFA0MV0pLAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFA0MF0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1tdHUyIiwgJm1zdHBfY2xrc1tNU1RQMzNdKSwKIH07CiAKIHZvaWQgX19pbml0IHI3czcyMTAwX2Nsb2NrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzNhNC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKaW5kZXggNzM0OGQ1OC4uYjViYzIyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCUNMS0RFVl9ERVZfSUQoImU2NTYwMDAwLmkyYyIsICZtc3RwX2Nsa3NbTVNUUDMxN10pLAogCUNMS0RFVl9ERVZfSUQoImU2NTAwMDAwLmkyYyIsICZtc3RwX2Nsa3NbTVNUUDMxOF0pLAogCUNMS0RFVl9ERVZfSUQoImU2NTEwMDAwLmkyYyIsICZtc3RwX2Nsa3NbTVNUUDMyM10pLAotCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4xMCIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtNDgtZ2VuMi4xIiwgJm1zdHBfY2xrc1tNU1RQMzI5XSksCiAJQ0xLREVWX0RFVl9JRCgiZTYwYjAwMDAuaTJjIiwgJm1zdHBfY2xrc1tNU1RQNDA5XSksCiAJQ0xLREVWX0RFVl9JRCgiZTY1NDAwMDAuaTJjIiwgJm1zdHBfY2xrc1tNU1RQNDEwXSksCiAJQ0xLREVWX0RFVl9JRCgiZTY1MzAwMDAuaTJjIiwgJm1zdHBfY2xrc1tNU1RQNDExXSksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NDAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jCmluZGV4IGRkOTg5ZjkuLjUwOTMxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jCkBAIC01NDgsMTUgKzU0OCw5IEBACiAKIAkvKiBNU1RQMzIgY2xvY2tzICovCiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2xjZGNfZmIuMCIsCSZtc3RwX2Nsa3NbTVNUUDEwMF0pLAotCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4zIiwJCSZtc3RwX2Nsa3NbTVNUUDExMV0pLAotCUNMS0RFVl9ERVZfSUQoInNoX3RtdS40IiwJCSZtc3RwX2Nsa3NbTVNUUDExMV0pLAotCUNMS0RFVl9ERVZfSUQoInNoX3RtdS41IiwJCSZtc3RwX2Nsa3NbTVNUUDExMV0pLAogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMCIsCSZtc3RwX2Nsa3NbTVNUUDExNl0pLAogCUNMS0RFVl9ERVZfSUQoImZmZjIwMDAwLmkyYyIsCQkmbXN0cF9jbGtzW01TVFAxMTZdKSwKIAlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4xIiwJJm1zdHBfY2xrc1tNU1RQMTE3XSksCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjAiLAkJJm1zdHBfY2xrc1tNU1RQMTI1XSksCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLAkJJm1zdHBfY2xrc1tNU1RQMTI1XSksCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjIiLAkJJm1zdHBfY2xrc1tNU1RQMTI1XSksCiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2NldS4wIiwJJm1zdHBfY2xrc1tNU1RQMTI3XSksCiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2NldS4xIiwJJm1zdHBfY2xrc1tNU1RQMTI4XSksCiAKQEAgLTU4Myw3ICs1NzcsNiBAQAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwJCSZtc3RwX2Nsa3NbTVNUUDIzMF0pLAogCUNMS0RFVl9ERVZfSUQoImU2Y2MwMDAwLnNjaSIsCQkmbXN0cF9jbGtzW01TVFAyMzBdKSwKIAotCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4xMCIsCQkmbXN0cF9jbGtzW01TVFAzMjldKSwKIAlDTEtERVZfREVWX0lEKCJzaF9mc2kyIiwJCSZtc3RwX2Nsa3NbTVNUUDMyOF0pLAogCUNMS0RFVl9ERVZfSUQoImZlMWYwMDAwLnNvdW5kIiwJCSZtc3RwX2Nsa3NbTVNUUDMyOF0pLAogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMSIsCSZtc3RwX2Nsa3NbTVNUUDMyM10pLApAQCAtNTk2LDcgKzU4OSw3IEBACiAJQ0xLREVWX0RFVl9JRCgic2hfbW1jaWYiLAkJJm1zdHBfY2xrc1tNU1RQMzEyXSksCiAJQ0xLREVWX0RFVl9JRCgiZTZiZDAwMDAubW1jIiwJCSZtc3RwX2Nsa3NbTVNUUDMxMl0pLAogCUNMS0RFVl9ERVZfSUQoInI4YTc3NDAtZ2V0aGVyIiwJCSZtc3RwX2Nsa3NbTVNUUDMwOV0pLAotCUNMS0RFVl9ERVZfSUQoImU5YTAwMDAwLnNoLWV0aCIsCSZtc3RwX2Nsa3NbTVNUUDMwOV0pLAorCUNMS0RFVl9ERVZfSUQoImU5YTAwMDAwLmV0aGVybmV0IiwJJm1zdHBfY2xrc1tNU1RQMzA5XSksCiAJQ0xLREVWX0RFVl9JRCgicmVuZXNhcy10cHUtcHdtIiwJJm1zdHBfY2xrc1tNU1RQMzA0XSksCiAJQ0xLREVWX0RFVl9JRCgiZTY2MDAwMDAucHdtIiwJCSZtc3RwX2Nsa3NbTVNUUDMwNF0pLAogCkBAIC02MDQsNiArNTk3LDkgQEAKIAlDTEtERVZfREVWX0lEKCJlNjg3MDAwMC5zZCIsCQkmbXN0cF9jbGtzW01TVFA0MTVdKSwKIAogCS8qIElDSyAqLworCUNMS0RFVl9JQ0tfSUQoImZjayIsCSJzaC10bXUuMSIsCQkmbXN0cF9jbGtzW01TVFAxMTFdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLAkic2gtdG11LjAiLAkJJm1zdHBfY2xrc1tNU1RQMTI1XSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwJInNoLWNtdC00OC4xIiwJCSZtc3RwX2Nsa3NbTVNUUDMyOV0pLAogCUNMS0RFVl9JQ0tfSUQoImhvc3QiLAkicmVuZXNhc191c2JocyIsCSZtc3RwX2Nsa3NbTVNUUDQxNl0pLAogCUNMS0RFVl9JQ0tfSUQoImZ1bmMiLAkicmVuZXNhc191c2JocyIsCSZtc3RwX2Nsa3NbTVNUUDQwN10pLAogCUNMS0RFVl9JQ0tfSUQoInBoeSIsCSJyZW5lc2FzX3VzYmhzIiwJJm1zdHBfY2xrc1tNU1RQNDA2XSksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzguYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc3OC5jCmluZGV4IDk5ODliMWIuLjEzZjhmM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc3OC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc3OC5jCkBAIC0xNzUsMTAgKzE3NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiAqLwotCUNMS0RFVl9DT05fSUQoImF1ZGlvX2Nsa19hIiwJJmF1ZGlvX2Nsa19hKSwKLQlDTEtERVZfQ09OX0lEKCJhdWRpb19jbGtfYiIsCSZhdWRpb19jbGtfYiksCi0JQ0xLREVWX0NPTl9JRCgiYXVkaW9fY2xrX2MiLAkmYXVkaW9fY2xrX2MpLAotCUNMS0RFVl9DT05fSUQoImF1ZGlvX2Nsa19pbnRlcm5hbCIsCSZzMV9jbGspLAogCUNMS0RFVl9DT05fSUQoInNoeXdheV9jbGsiLAkmc19jbGspLAogCUNMS0RFVl9DT05fSUQoInBlcmlwaGVyYWxfY2xrIiwJJnBfY2xrKSwKIApAQCAtMjExLDggKzIwNyw2IEBACiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjMiLCAmbXN0cF9jbGtzW01TVFAwMjNdKSwgLyogU0NJRjMgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDAyMl0pLCAvKiBTQ0lGNCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMDIxXSksIC8qIFNDSUY2ICovCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjAiLCAmbXN0cF9jbGtzW01TVFAwMTZdKSwgLyogVE1VMDAgKi8KLQlDTEtERVZfREVWX0lEKCJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDAxNV0pLCAvKiBUTVUwMSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLWhzcGkuMCIsICZtc3RwX2Nsa3NbTVNUUDAwN10pLCAvKiBIU1BJMCAqLwogCUNMS0RFVl9ERVZfSUQoImZmZmM3MDAwLnNwaSIsICZtc3RwX2Nsa3NbTVNUUDAwN10pLCAvKiBIU1BJMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLWhzcGkuMSIsICZtc3RwX2Nsa3NbTVNUUDAwN10pLCAvKiBIU1BJMSAqLwpAQCAtMjM0LDE1ICsyMjgsMTcgQEAKIAlDTEtERVZfSUNLX0lEKCJzc2kuNiIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMzA5XSksCiAJQ0xLREVWX0lDS19JRCgic3NpLjciLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDMwOF0pLAogCUNMS0RFVl9JQ0tfSUQoInNzaS44IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAzMDddKSwKLQlDTEtERVZfSUNLX0lEKCJzY3UuMCIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQNTMxXSksCi0JQ0xLREVWX0lDS19JRCgic2N1LjEiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDUzMF0pLAotCUNMS0RFVl9JQ0tfSUQoInNjdS4yIiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFA1MjldKSwKLQlDTEtERVZfSUNLX0lEKCJzY3UuMyIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQNTI4XSksCi0JQ0xLREVWX0lDS19JRCgic2N1LjQiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDUyN10pLAotCUNMS0RFVl9JQ0tfSUQoInNjdS41IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFA1MjZdKSwKLQlDTEtERVZfSUNLX0lEKCJzY3UuNiIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQNTI1XSksCi0JQ0xLREVWX0lDS19JRCgic2N1LjciLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDUyNF0pLAotCUNMS0RFVl9JQ0tfSUQoInNjdS44IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFA1MjNdKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuMCIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQNTMxXSksCisJQ0xLREVWX0lDS19JRCgic3JjLjEiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDUzMF0pLAorCUNMS0RFVl9JQ0tfSUQoInNyYy4yIiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFA1MjldKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuMyIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQNTI4XSksCisJQ0xLREVWX0lDS19JRCgic3JjLjQiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDUyN10pLAorCUNMS0RFVl9JQ0tfSUQoInNyYy41IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFA1MjZdKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuNiIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQNTI1XSksCisJQ0xLREVWX0lDS19JRCgic3JjLjciLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDUyNF0pLAorCUNMS0RFVl9JQ0tfSUQoInNyYy44IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFA1MjNdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW01TVFAwMTZdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMTVdKSwKIH07CiAKIHZvaWQgX19pbml0IHI4YTc3NzhfY2xvY2tfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc5LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwppbmRleCA4ZTQwM2FlLi5hMTMyOThiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwpAQCAtMTczLDkgKzE3Myw3IEBACiAJQ0xLREVWX0RFVl9JRCgib2hjaS1wbGF0Zm9ybS4xIiwgJm1zdHBfY2xrc1tNU1RQMTAxXSksIC8qIFVTQiBPSENJIHBvcnQyICovCiAJQ0xLREVWX0RFVl9JRCgiZWhjaS1wbGF0Zm9ybS4wIiwgJm1zdHBfY2xrc1tNU1RQMTAwXSksIC8qIFVTQiBFSENJIHBvcnQwLzEgKi8KIAlDTEtERVZfREVWX0lEKCJvaGNpLXBsYXRmb3JtLjAiLCAmbXN0cF9jbGtzW01TVFAxMDBdKSwgLyogVVNCIE9IQ0kgcG9ydDAvMSAqLwotCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMDE2XSksIC8qIFRNVTAwICovCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMTZdKSwgLyogVE1VMDEgKi8KLQlDTEtERVZfREVWX0lEKCJzaF90bXUuMiIsICZtc3RwX2Nsa3NbTVNUUDAxNl0pLCAvKiBUTVUwMiAqLworCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC10bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDAxNl0pLCAvKiBUTVUwICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXIuMCIsICZtc3RwX2Nsa3NbTVNUUDAzMF0pLCAvKiBJMkMwICovCiAJQ0xLREVWX0RFVl9JRCgiZmZjNzAwMDAuaTJjIiwgJm1zdHBfY2xrc1tNU1RQMDMwXSksIC8qIEkyQzAgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtcmNhci4xIiwgJm1zdHBfY2xrc1tNU1RQMDI5XSksIC8qIEkyQzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc5MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkwLmMKaW5kZXggM2Y5MzUwMy4uMjk2YTA1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkwLmMKQEAgLTI0OSwxMCArMjQ5LDEwIEBACiAJW01TVFAxMDA3XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjEwLCA3LCBNU1RQU1IxMCwgMCksIC8qIFNTSTggKi8KIAlbTVNUUDEwMDZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSMTAsIDYsIE1TVFBTUjEwLCAwKSwgLyogU1NJOSAqLwogCVtNU1RQMTAwNV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1IxMCwgNSwgTVNUUFNSMTAsIDApLCAvKiBTU0kgQUxMICovCi0JW01TVFA5MzFdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOSwgMzEsIE1TVFBTUjksIDApLCAvKiBJMkMwICovCi0JW01TVFA5MzBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOSwgMzAsIE1TVFBTUjksIDApLCAvKiBJMkMxICovCi0JW01TVFA5MjldID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOSwgMjksIE1TVFBTUjksIDApLCAvKiBJMkMyICovCi0JW01TVFA5MjhdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOSwgMjgsIE1TVFBTUjksIDApLCAvKiBJMkMzICovCisJW01TVFA5MzFdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDMxLCBNU1RQU1I5LCAwKSwgLyogSTJDMCAqLworCVtNU1RQOTMwXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAzMCwgTVNUUFNSOSwgMCksIC8qIEkyQzEgKi8KKwlbTVNUUDkyOV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMjksIE1TVFBTUjksIDApLCAvKiBJMkMyICovCisJW01TVFA5MjhdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDI4LCBNU1RQU1I5LCAwKSwgLyogSTJDMyAqLwogCVtNU1RQOTE3XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZxc3BpX2NsaywgU01TVFBDUjksIDE3LCBNU1RQU1I5LCAwKSwgLyogUVNQSSAqLwogCVtNU1RQODE1XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6c19jbGssIFNNU1RQQ1I4LCAxNSwgTVNUUFNSOCwgMCksIC8qIFNBVEEwICovCiAJW01TVFA4MTRdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnpzX2NsaywgU01TVFBDUjgsIDE0LCBNU1RQU1I4LCAwKSwgLyogU0FUQTEgKi8KQEAgLTI5NCwxMCArMjk0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAKIAkvKiBtYWluIGNsb2NrcyAqLwotCUNMS0RFVl9DT05fSUQoImF1ZGlvX2Nsa19hIiwJJmF1ZGlvX2Nsa19hKSwKLQlDTEtERVZfQ09OX0lEKCJhdWRpb19jbGtfYiIsCSZhdWRpb19jbGtfYiksCi0JQ0xLREVWX0NPTl9JRCgiYXVkaW9fY2xrX2MiLAkmYXVkaW9fY2xrX2MpLAotCUNMS0RFVl9DT05fSUQoImF1ZGlvX2Nsa19pbnRlcm5hbCIsCSZtMl9jbGspLAogCUNMS0RFVl9DT05fSUQoImV4dGFsIiwJCSZleHRhbF9jbGspLAogCUNMS0RFVl9DT05fSUQoImV4dGFsX2RpdjIiLAkmZXh0YWxfZGl2Ml9jbGspLAogCUNMS0RFVl9DT05fSUQoIm1haW4iLAkJJm1haW5fY2xrKSwKQEAgLTM2MSw3ICszNTcsNiBAQAogCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjIiLCAmbXN0cF9jbGtzW01TVFAzMTJdKSwKIAlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4zIiwgJm1zdHBfY2xrc1tNU1RQMzExXSksCiAJQ0xLREVWX0RFVl9JRCgic2hfbW1jaWYuMSIsICZtc3RwX2Nsa3NbTVNUUDMwNV0pLAotCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4wIiwgJm1zdHBfY2xrc1tNU1RQMTI0XSksCiAJQ0xLREVWX0RFVl9JRCgicXNwaS4wIiwgJm1zdHBfY2xrc1tNU1RQOTE3XSksCiAJQ0xLREVWX0RFVl9JRCgicmVuZXNhc191c2JocyIsICZtc3RwX2Nsa3NbTVNUUDcwNF0pLAogCUNMS0RFVl9ERVZfSUQoInBjaS1yY2FyLWdlbjIuMCIsICZtc3RwX2Nsa3NbTVNUUDcwM10pLApAQCAtMzcxLDYgKzM2Niw3IEBACiAJQ0xLREVWX0RFVl9JRCgic2F0YS1yOGE3NzkwLjEiLCAmbXN0cF9jbGtzW01TVFA4MTRdKSwKIAogCS8qIElDSyAqLworCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtNDgtZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQMTI0XSksCiAJQ0xLREVWX0lDS19JRCgidXNiaHMiLCAidXNiX3BoeV9yY2FyX2dlbjIiLCAmbXN0cF9jbGtzW01TVFA3MDRdKSwKIAlDTEtERVZfSUNLX0lEKCJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkwIiwgJm1zdHBfY2xrc1tNU1RQNzI2XSksCiAJQ0xLREVWX0lDS19JRCgibHZkcy4xIiwgInJjYXItZHUtcjhhNzc5MCIsICZtc3RwX2Nsa3NbTVNUUDcyNV0pLApAQCAtMzgxLDE2ICszNzcsMTYgQEAKIAlDTEtERVZfSUNLX0lEKCJjbGtfYiIsICJyY2FyX3NvdW5kIiwgJmF1ZGlvX2Nsa19iKSwKIAlDTEtERVZfSUNLX0lEKCJjbGtfYyIsICJyY2FyX3NvdW5kIiwgJmF1ZGlvX2Nsa19jKSwKIAlDTEtERVZfSUNLX0lEKCJjbGtfaSIsICJyY2FyX3NvdW5kIiwgJm0yX2NsayksCi0JQ0xLREVWX0lDS19JRCgic2N1LjAiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMzFdKSwKLQlDTEtERVZfSUNLX0lEKCJzY3UuMSIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAzMF0pLAotCUNMS0RFVl9JQ0tfSUQoInNjdS4yIiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDI5XSksCi0JQ0xLREVWX0lDS19JRCgic2N1LjMiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMjhdKSwKLQlDTEtERVZfSUNLX0lEKCJzY3UuNCIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAyN10pLAotCUNMS0RFVl9JQ0tfSUQoInNjdS41IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDI2XSksCi0JQ0xLREVWX0lDS19JRCgic2N1LjYiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMjVdKSwKLQlDTEtERVZfSUNLX0lEKCJzY3UuNyIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAyNF0pLAotCUNMS0RFVl9JQ0tfSUQoInNjdS44IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDIzXSksCi0JQ0xLREVWX0lDS19JRCgic2N1LjkiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMjJdKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuMCIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAzMV0pLAorCUNMS0RFVl9JQ0tfSUQoInNyYy4xIiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDMwXSksCisJQ0xLREVWX0lDS19JRCgic3JjLjIiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMjldKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuMyIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAyOF0pLAorCUNMS0RFVl9JQ0tfSUQoInNyYy40IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDI3XSksCisJQ0xLREVWX0lDS19JRCgic3JjLjUiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMjZdKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuNiIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAyNV0pLAorCUNMS0RFVl9JQ0tfSUQoInNyYy43IiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDI0XSksCisJQ0xLREVWX0lDS19JRCgic3JjLjgiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMjNdKSwKKwlDTEtERVZfSUNLX0lEKCJzcmMuOSIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAyMl0pLAogCUNMS0RFVl9JQ0tfSUQoInNzaS4wIiwgInJjYXJfc291bmQiLCAmbXN0cF9jbGtzW01TVFAxMDE1XSksCiAJQ0xLREVWX0lDS19JRCgic3NpLjEiLCAicmNhcl9zb3VuZCIsICZtc3RwX2Nsa3NbTVNUUDEwMTRdKSwKIAlDTEtERVZfSUNLX0lEKCJzc2kuMiIsICJyY2FyX3NvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMTAxM10pLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkxLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYwppbmRleCA3MDEzODNmLi5lMmZkZmNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvcmNhci1nZW4yLmg+CiAKIC8qCiAgKiAgIE1ECQlFWFRBTAkJUExMMAlQTEwxCVBMTDMKQEAgLTQzLDggKzQ0LDYgQEAKICAqCXNlZSAicDEgLyAyIiBvbiBSOEE3NzkxX0NMT0NLX1JPT1QoKSBiZWxvdwogICovCiAKLSNkZWZpbmUgTUQobnIpCSgxIDw8IG5yKQotCiAjZGVmaW5lIENQR19CQVNFIDB4ZTYxNTAwMDAKICNkZWZpbmUgQ1BHX0xFTiAweDEwMDAKIApAQCAtNjgsNyArNjcsNiBAQAogI2RlZmluZSBNU1RQU1I5CQlJT01FTSgweGU2MTUwOWE0KQogI2RlZmluZSBNU1RQU1IxMQlJT01FTSgweGU2MTUwOWFjKQogCi0jZGVmaW5lIE1PREVNUgkJMHhFNjE2MDA2MAogI2RlZmluZSBTRENLQ1IJCTB4RTYxNTAwNzQKICNkZWZpbmUgU0QxQ0tDUgkJMHhFNjE1MDA3OAogI2RlZmluZSBTRDJDS0NSCQkweEU2MTUwMjZjCkBAIC0xOTAsMTIgKzE4OCwxMiBAQAogCVtNU1RQMTEwOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMTEsIDgsIE1TVFBTUjExLCAwKSwgLyogU0NJRkE1ICovCiAJW01TVFAxMTA3XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IxMSwgNywgTVNUUFNSMTEsIDApLCAvKiBTQ0lGQTQgKi8KIAlbTVNUUDExMDZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjExLCA2LCBNU1RQU1IxMSwgMCksIC8qIFNDSUZBMyAqLwotCVtNU1RQOTMxXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjksIDMxLCBNU1RQU1I5LCAwKSwgLyogSTJDMCAqLwotCVtNU1RQOTMwXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjksIDMwLCBNU1RQU1I5LCAwKSwgLyogSTJDMSAqLwotCVtNU1RQOTI5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjksIDI5LCBNU1RQU1I5LCAwKSwgLyogSTJDMiAqLwotCVtNU1RQOTI4XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjksIDI4LCBNU1RQU1I5LCAwKSwgLyogSTJDMyAqLwotCVtNU1RQOTI3XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjksIDI3LCBNU1RQU1I5LCAwKSwgLyogSTJDNCAqLwotCVtNU1RQOTI1XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjksIDI1LCBNU1RQU1I5LCAwKSwgLyogSTJDNSAqLworCVtNU1RQOTMxXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAzMSwgTVNUUFNSOSwgMCksIC8qIEkyQzAgKi8KKwlbTVNUUDkzMF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMzAsIE1TVFBTUjksIDApLCAvKiBJMkMxICovCisJW01TVFA5MjldID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDI5LCBNU1RQU1I5LCAwKSwgLyogSTJDMiAqLworCVtNU1RQOTI4XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyOCwgTVNUUFNSOSwgMCksIC8qIEkyQzMgKi8KKwlbTVNUUDkyN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMjcsIE1TVFBTUjksIDApLCAvKiBJMkM0ICovCisJW01TVFA5MjVdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDI1LCBNU1RQU1I5LCAwKSwgLyogSTJDNSAqLwogCVtNU1RQOTE3XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZxc3BpX2NsaywgU01TVFBDUjksIDE3LCBNU1RQU1I5LCAwKSwgLyogUVNQSSAqLwogCVtNU1RQODE1XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6c19jbGssIFNNU1RQQ1I4LCAxNSwgTVNUUFNSOCwgMCksIC8qIFNBVEEwICovCiAJW01TVFA4MTRdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnpzX2NsaywgU01TVFBDUjgsIDE0LCBNU1RQU1I4LCAwKSwgLyogU0FUQTEgKi8KQEAgLTI2Niw3ICsyNjQsNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjAiLCAmbXN0cF9jbGtzW01TVFAzMTRdKSwKIAlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4xIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksCiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMiIsICZtc3RwX2Nsa3NbTVNUUDMxMV0pLAotCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4wIiwgJm1zdHBfY2xrc1tNU1RQMTI0XSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLWNtdC00OC1nZW4yLjAiLCAmbXN0cF9jbGtzW01TVFAxMjRdKSwKIAlDTEtERVZfREVWX0lEKCJxc3BpLjAiLCAmbXN0cF9jbGtzW01TVFA5MTddKSwKIAlDTEtERVZfREVWX0lEKCJyY2FyX3RoZXJtYWwiLCAmbXN0cF9jbGtzW01TVFA1MjJdKSwKIAlDTEtERVZfREVWX0lEKCJpMmMtcmNhcl9nZW4yLjAiLCAmbXN0cF9jbGtzW01TVFA5MzFdKSwKQEAgLTI5NSwxNCArMjkzLDkgQEAKIAogdm9pZCBfX2luaXQgcjhhNzc5MV9jbG9ja19pbml0KHZvaWQpCiB7Ci0Jdm9pZCBfX2lvbWVtICptb2RlbXIgPSBpb3JlbWFwX25vY2FjaGUoTU9ERU1SLCBQQUdFX1NJWkUpOwotCXUzMiBtb2RlOworCXUzMiBtb2RlID0gcmNhcl9nZW4yX3JlYWRfbW9kZV9waW5zKCk7CiAJaW50IGssIHJldCA9IDA7CiAKLQlCVUdfT04oIW1vZGVtcik7Ci0JbW9kZSA9IGlvcmVhZDMyKG1vZGVtcik7Ci0JaW91bm1hcChtb2RlbXIpOwotCiAJc3dpdGNoIChtb2RlICYgKE1EKDE0KSB8IE1EKDEzKSkpIHsKIAljYXNlIDA6CiAJCVI4QTc3OTFfQ0xPQ0tfUk9PVCgxNSwgJmV4dGFsX2NsaywgMTcyLCAyMDgsIDEwNiwgODgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggMjg0ODk5Ny4uZDE2ZDljYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC01MTUsOCArNTE1LDYgQEAKIAlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOF0pLCAvKiBWRVUwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2NldS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI3XSksIC8qIENFVSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLW1vYmlsZS1jc2kyLjAiLCAmbXN0cF9jbGtzW01TVFAxMjZdKSwgLyogQ1NJMiAqLwotCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAwICovCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDEgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE4XSksIC8qIERTSVRYMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9sY2RjX2ZiLjEiLCAmbXN0cF9jbGtzW01TVFAxMTddKSwgLyogTENEQzEgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjAiLCAmbXN0cF9jbGtzW01TVFAxMTZdKSwgLyogSUlDMCAqLwpAQCAtNTY1LDEwICs1NjMsNyBAQAogCUNMS0RFVl9ERVZfSUQoInI4YTY2NTk3X2hjZC4xIiwgJm1zdHBfY2xrc1tNU1RQNDA2XSksIC8qIFVTQjEgKi8KIAlDTEtERVZfREVWX0lEKCJyOGE2NjU5N191ZGMuMSIsICZtc3RwX2Nsa3NbTVNUUDQwNl0pLCAvKiBVU0IxICovCiAJQ0xLREVWX0RFVl9JRCgicmVuZXNhc191c2Jocy4xIiwgJm1zdHBfY2xrc1tNU1RQNDA2XSksIC8qIFVTQjEgKi8KLQlDTEtERVZfREVWX0lEKCJzaF9jbXQuNCIsICZtc3RwX2Nsa3NbTVNUUDQwNV0pLCAvKiBDTVQ0ICovCi0JQ0xLREVWX0RFVl9JRCgic2hfY210LjMiLCAmbXN0cF9jbGtzW01TVFA0MDRdKSwgLyogQ01UMyAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2tleXNjLjAiLCAmbXN0cF9jbGtzW01TVFA0MDNdKSwgLyogS0VZU0MgKi8KLQlDTEtERVZfREVWX0lEKCJzaF9jbXQuMiIsICZtc3RwX2Nsa3NbTVNUUDQwMF0pLCAvKiBDTVQyICovCiAKIAkvKiBJQ0sgKi8KIAlDTEtERVZfSUNLX0lEKCJkc2l0X2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKQEAgLTU4MCw3ICs1NzUsMTEgQEAKIAlDTEtERVZfSUNLX0lEKCJpY2siLCAic2gtbW9iaWxlLWhkbWkiLCAmZGl2Nl9yZXBhcmVudF9jbGtzW0RJVjZfSERNSV0pLAogCUNMS0RFVl9JQ0tfSUQoImlja2EiLCAic2hfZnNpMiIsICZkaXY2X3JlcGFyZW50X2Nsa3NbRElWNl9GU0lBXSksCiAJQ0xLREVWX0lDS19JRCgiaWNrYiIsICJzaF9mc2kyIiwgJmRpdjZfcmVwYXJlbnRfY2xrc1tESVY2X0ZTSUJdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMCAqLwogCUNMS0RFVl9JQ0tfSUQoInNwdTIiLCAic2hfZnNpMiIsICZtc3RwX2Nsa3NbTVNUUDIyM10pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtMzItZmFzdC40IiwgJm1zdHBfY2xrc1tNU1RQNDA1XSksIC8qIENNVDQgKi8KKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtY210LTMyLWZhc3QuMyIsICZtc3RwX2Nsa3NbTVNUUDQwNF0pLCAvKiBDTVQzICovCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLWNtdC0zMi1mYXN0LjIiLCAmbXN0cF9jbGtzW01TVFA0MDBdKSwgLyogQ01UMiAqLwogCUNMS0RFVl9JQ0tfSUQoImRpdmEiLCAic2hfZnNpMiIsICZmc2lkaXZzW0ZTSURJVl9BXSksCiAJQ0xLREVWX0lDS19JRCgiZGl2YiIsICJzaF9mc2kyIiwgJmZzaWRpdnNbRlNJRElWX0JdKSwKIAlDTEtERVZfSUNLX0lEKCJ4Y2thIiwgInNoX2ZzaTIiLCAmZnNpYWNrX2NsayksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwppbmRleCAyM2VkZjgzNi4uMGQ5Y2QxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCkBAIC02MzMsOCArNjMzLDYgQEAKIAlDTEtERVZfREVWX0lEKCJzaC1tb2JpbGUtY3NpMi4xIiwgJm1zdHBfY2xrc1tNU1RQMTI4XSksIC8qIENTSTItUlgxICovCiAJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2NldS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI3XSksIC8qIENFVTAgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1tb2JpbGUtY3NpMi4wIiwgJm1zdHBfY2xrc1tNU1RQMTI2XSksIC8qIENTSTItUlgwICovCi0JQ0xLREVWX0RFVl9JRCgic2hfdG11LjAiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDAgKi8KLQlDTEtERVZfREVWX0lEKCJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDEyNV0pLCAvKiBUTVUwMSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLW1pcGktZHNpLjAiLCAmbXN0cF9jbGtzW01TVFAxMThdKSwgLyogRFNJVFggKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjAiLCAmbXN0cF9jbGtzW01TVFAxMTZdKSwgLyogSTJDMCAqLwogCUNMS0RFVl9ERVZfSUQoImU2ODIwMDAwLmkyYyIsICZtc3RwX2Nsa3NbTVNUUDExNl0pLCAvKiBJMkMwICovCkBAIC02NTAsNyArNjQ4LDYgQEAKIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDIwMV0pLCAvKiBTQ0lGQTMgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIwMF0pLCAvKiBTQ0lGQTQgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDMzMV0pLCAvKiBTQ0lGQTYgKi8KLQlDTEtERVZfREVWX0lEKCJzaF9jbXQuMTAiLCAmbXN0cF9jbGtzW01TVFAzMjldKSwgLyogQ01UMTAgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9mc2kyIiwgJm1zdHBfY2xrc1tNU1RQMzI4XSksIC8qIEZTSSAqLwogCUNMS0RFVl9ERVZfSUQoImVjMjMwMDAwLnNvdW5kIiwgJm1zdHBfY2xrc1tNU1RQMzI4XSksIC8qIEZTSSAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2lyZGEuMCIsICZtc3RwX2Nsa3NbTVNUUDMyNV0pLCAvKiBJckRBICovCkBAIC02ODMsNiArNjgwLDggQEAKIAlDTEtERVZfSUNLX0lEKCJkc2lwX2NsayIsICJzaC1taXBpLWRzaS4xIiwgJmRpdjZfY2xrc1tESVY2X0RTSTFQXSksCiAJQ0xLREVWX0lDS19JRCgiZHNpcGh5X2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRzaTBwaHlfY2xrKSwKIAlDTEtERVZfSUNLX0lEKCJkc2lwaHlfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZHNpMXBoeV9jbGspLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtNDguMSIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLCAvKiBDTVQxICovCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLXRtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAgKi8KIH07CiAKIHZvaWQgX19pbml0IHNoNzNhMF9jbG9ja19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMKaW5kZXggYWQ3ZGY2Mi4uZTcyMzJhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYwpAQCAtMjEsNiArMjEsMzIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorCit2b2lkIF9faW5pdCBzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa3MsCisJCQkJICAgIGludCBucl9jbGtzLCBib29sIGVuYWJsZSkKK3sKKwljb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa247CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2Nsa3M7ICsraSkgeworCQljbGtuID0gY2xrcyArIGk7CisJCWNsayA9IGNsa19nZXQoTlVMTCwgY2xrbi0+Y2xrKTsKKwkJaWYgKCFJU19FUlIoY2xrKSkgeworCQkJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIGNsa24tPmNvbl9pZCwgY2xrbi0+ZGV2X2lkKTsKKwkJCWlmIChlbmFibGUpCisJCQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJCQljbGtfcHV0KGNsayk7CisJCX0KKwl9Cit9CisKKyNlbHNlIC8qIENPTkZJR19DT01NT05fQ0xLICovCiAjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgpAQCAtNTgsMyArODQsNSBAQAogewogfQogRVhQT1JUX1NZTUJPTChfX2Nsa19wdXQpOworCisjZW5kaWYgLyogQ09ORklHX0NPTU1PTl9DTEsgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9jbG9jay5oCmluZGV4IDAzZTU2MDcuLjMxYjY0MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMSw2ICsxLDIyIEBACiAjaWZuZGVmIENMT0NLX0gKICNkZWZpbmUgQ0xPQ0tfSAogCisjaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKKy8qIHRlbXBvcmFyeSBjbG9jayBjb25maWd1cmF0aW9uIGhlbHBlciBmb3IgcGxhdGZvcm0gZGV2aWNlcyAqLworCitzdHJ1Y3QgY2xrX25hbWUgeworCWNvbnN0IGNoYXIgKmNsazsKKwljb25zdCBjaGFyICpjb25faWQ7CisJY29uc3QgY2hhciAqZGV2X2lkOworfTsKKwordm9pZCBzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa3MsIGludCBucl9jbGtzLAorCQkJICAgICBib29sIGVuYWJsZSk7CisKKyNlbHNlIC8qIENPTkZJR19DT01NT05fQ0xLICovCisvKiBsZWdhY3kgY2xvY2sgaW1wbGVtZW50YXRpb24gKi8KKworc3RydWN0IGNsazsKIHVuc2lnbmVkIGxvbmcgc2htb2JpbGVfZml4ZWRfcmF0aW9fY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHN0cnVjdCBzaF9jbGtfb3BzIHNobW9iaWxlX2ZpeGVkX3JhdGlvX2Nsa19vcHM7CiAKQEAgLTM2LDQgKzUyLDUgQEAKIAkocCktPmRpdiA9IGQ7CVwKIH0gd2hpbGUgKDApCiAKKyNlbmRpZiAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IGNiOGUzMmQuLmY3YTM2MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC00LDYgKzQsNyBAQAogZXh0ZXJuIHZvaWQgc2htb2JpbGVfZWFybHl0aW1lcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgc2htb2JpbGVfc2V0dXBfZGVsYXkodW5zaWduZWQgaW50IG1heF9jcHVfY29yZV9taHosCiAJCQkgdW5zaWduZWQgaW50IG11bHQsIHVuc2lnbmVkIGludCBkaXYpOworZXh0ZXJuIHZvaWQgc2htb2JpbGVfaW5pdF9kZWxheSh2b2lkKTsKIHN0cnVjdCB0d2RfbG9jYWxfdGltZXI7CiBleHRlcm4gdm9pZCBzaG1vYmlsZV9zZXR1cF9jb25zb2xlKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2htb2JpbGVfYm9vdF92ZWN0b3Iodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9lbWV2Mi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvZW1ldjIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNiMTQyYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9lbWV2Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0VNRVYyX0hfXwotI2RlZmluZSBfX0FTTV9FTUVWMl9IX18KLQotZXh0ZXJuIHZvaWQgZW1ldjJfbWFwX2lvKHZvaWQpOwotZXh0ZXJuIHZvaWQgZW1ldjJfaW5pdF9kZWxheSh2b2lkKTsKLWV4dGVybiB2b2lkIGVtZXYyX2Nsb2NrX2luaXQodm9pZCk7Ci1leHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIGVtZXYyX3NtcF9vcHM7Ci0KLSNlbmRpZiAvKiBfX0FTTV9FTUVWMl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3I4YTc3NDAuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3I4YTc3NDAuaAppbmRleCBkMDc5MzJmLi41ZTNjOWVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9yOGE3NzQwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvcjhhNzc0MC5oCkBAIC00Nyw3ICs0Nyw2IEBACiB9OwogCiBleHRlcm4gdm9pZCByOGE3NzQwX21lcmFtX3dvcmthcm91bmQodm9pZCk7Ci1leHRlcm4gdm9pZCByOGE3NzQwX2luaXRfZGVsYXkodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3NzQwX2luaXRfaXJxX29mKHZvaWQpOwogZXh0ZXJuIHZvaWQgcjhhNzc0MF9tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCByOGE3NzQwX2FkZF9lYXJseV9kZXZpY2VzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvcjhhNzc5MS5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvcjhhNzc5MS5oCmluZGV4IDIwMGZhNjkuLjY2NDI3NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3I4YTc3OTEuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9yOGE3NzkxLmgKQEAgLTUsNyArNSw2IEBACiB2b2lkIHI4YTc3OTFfYWRkX2R0X2RldmljZXModm9pZCk7CiB2b2lkIHI4YTc3OTFfY2xvY2tfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzc5MV9waW5tdXhfaW5pdCh2b2lkKTsKLXZvaWQgcjhhNzc5MV9pbml0X2Vhcmx5KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyByOGE3NzkxX3NtcF9vcHM7CiAKICNlbmRpZiAvKiBfX0FTTV9SOEE3NzkxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1ybW9iaWxlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXJtb2JpbGUuYwppbmRleCAxZmMwNWQ5Li5mNzEwMjM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXJtb2JpbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXJtb2JpbGUuYwpAQCAtOTksMzkgKzk5LDcgQEAKIAogc3RhdGljIGJvb2wgcm1vYmlsZV9wZF9hY3RpdmVfd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlib29sICgqYWN0aXZlX3dha2V1cCkoc3RydWN0IGRldmljZSAqZGV2KTsKLQotCWFjdGl2ZV93YWtldXAgPSBkZXZfZ3BkX2RhdGEoZGV2KS0+b3BzLmFjdGl2ZV93YWtldXA7Ci0JcmV0dXJuIGFjdGl2ZV93YWtldXAgPyBhY3RpdmVfd2FrZXVwKGRldikgOiB0cnVlOwotfQotCi1zdGF0aWMgaW50IHJtb2JpbGVfcGRfc3RvcF9kZXYoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCAoKnN0b3ApKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLQlzdG9wID0gZGV2X2dwZF9kYXRhKGRldiktPm9wcy5zdG9wOwotCWlmIChzdG9wKSB7Ci0JCWludCByZXQgPSBzdG9wKGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gcG1fY2xrX3N1c3BlbmQoZGV2KTsKLX0KLQotc3RhdGljIGludCBybW9iaWxlX3BkX3N0YXJ0X2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50ICgqc3RhcnQpKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0JaW50IHJldDsKLQotCXJldCA9IHBtX2Nsa19yZXN1bWUoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0Jc3RhcnQgPSBkZXZfZ3BkX2RhdGEoZGV2KS0+b3BzLnN0YXJ0OwotCWlmIChzdGFydCkKLQkJcmV0ID0gc3RhcnQoZGV2KTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJtb2JpbGVfaW5pdF9wbV9kb21haW4oc3RydWN0IHJtb2JpbGVfcG1fZG9tYWluICpybW9iaWxlX3BkKQpAQCAtMTQwLDggKzEwOCw4IEBACiAJc3RydWN0IGRldl9wb3dlcl9nb3Zlcm5vciAqZ292ID0gcm1vYmlsZV9wZC0+Z292OwogCiAJcG1fZ2VucGRfaW5pdChnZW5wZCwgZ292ID8gOiAmc2ltcGxlX3Fvc19nb3Zlcm5vciwgZmFsc2UpOwotCWdlbnBkLT5kZXZfb3BzLnN0b3AJCT0gcm1vYmlsZV9wZF9zdG9wX2RldjsKLQlnZW5wZC0+ZGV2X29wcy5zdGFydAkJPSBybW9iaWxlX3BkX3N0YXJ0X2RldjsKKwlnZW5wZC0+ZGV2X29wcy5zdG9wCQk9IHBtX2Nsa19zdXNwZW5kOworCWdlbnBkLT5kZXZfb3BzLnN0YXJ0CQk9IHBtX2Nsa19yZXN1bWU7CiAJZ2VucGQtPmRldl9vcHMuYWN0aXZlX3dha2V1cAk9IHJtb2JpbGVfcGRfYWN0aXZlX3dha2V1cDsKIAlnZW5wZC0+ZGV2X2lycV9zYWZlCQk9IHRydWU7CiAJZ2VucGQtPnBvd2VyX29mZgkJPSBybW9iaWxlX3BkX3Bvd2VyX2Rvd247CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLWVtZXYyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLWVtZXYyLmMKaW5kZXggYzcxZDY2Ny4uZDk1M2ZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1lbWV2Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9lbWV2Mi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzgsMjMgKzM3LDE5IEBACiAjZW5kaWYKIH07CiAKLXZvaWQgX19pbml0IGVtZXYyX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGVtZXYyX21hcF9pbyh2b2lkKQogewogCWlvdGFibGVfaW5pdChlbWV2Ml9pb19kZXNjLCBBUlJBWV9TSVpFKGVtZXYyX2lvX2Rlc2MpKTsKIH0KIAotdm9pZCBfX2luaXQgZW1ldjJfaW5pdF9kZWxheSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGVtZXYyX2luaXRfZGVsYXkodm9pZCkKIHsKIAlzaG1vYmlsZV9zZXR1cF9kZWxheSg1MzMsIDEsIDMpOyAvKiBDb3J0ZXgtQTkgQCA1MzNNSHogKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGVtZXYyX2FkZF9zdGFuZGFyZF9kZXZpY2VzX2R0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKIAlvZl9jbGtfaW5pdChOVUxMKTsKLSNlbHNlCi0JZW1ldjJfY2xvY2tfaW5pdCgpOwotI2VuZGlmCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCkBAIC02Myw2ICs1OCw4IEBACiAJTlVMTCwKIH07CiAKK2V4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgZW1ldjJfc21wX29wczsKKwogRFRfTUFDSElORV9TVEFSVChFTUVWMl9EVCwgIkdlbmVyaWMgRW1tYSBNb2JpbGUgRVYyIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKIAkuc21wCQk9IHNtcF9vcHMoZW1ldjJfc21wX29wcyksCiAJLm1hcF9pbwkJPSBlbWV2Ml9tYXBfaW8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI3czcyMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI3czcyMTAwLmMKaW5kZXggOWMwYjNhOS4uNDEyZTE3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjdzNzIxMDAuYwpAQCAtMjEsNzcgKzIxLDI2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvcjdzNzIxMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNkZWZpbmUgUjdTNzIxMDBfU0NJRihpbmRleCwgYmFzZWFkZHIsIGlycSkJCQkJXAotc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSA9IHsJXAotCS50eXBlCQk9IFBPUlRfU0NJRiwJCQkJCVwKLQkucmVndHlwZQk9IFNDSXhfU0gyX1NDSUZfRklGT0RBVEFfUkVHVFlQRSwJCVwKLQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwJCVwKLQkuc2NzY3IJCT0gU0NTQ1JfUklFIHwgU0NTQ1JfVElFIHwgU0NTQ1JfUkUgfCBTQ1NDUl9URSB8CVwKLQkJCSAgU0NTQ1JfUkVJRSwJCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2lmIyNpbmRleCMjX3Jlc291cmNlc1tdID0gewkJCVwKLQlERUZJTkVfUkVTX01FTShiYXNlYWRkciwgMHgxMDApLAkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxICsgMSksCQkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxICsgMiksCQkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxICsgMyksCQkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxKSwJCQkJCQlcCi19CQkJCQkJCQkJXAotCi1SN1M3MjEwMF9TQ0lGKDAsIDB4ZTgwMDcwMDAsIGdpY19paWQoMjIxKSk7Ci1SN1M3MjEwMF9TQ0lGKDEsIDB4ZTgwMDc4MDAsIGdpY19paWQoMjI1KSk7Ci1SN1M3MjEwMF9TQ0lGKDIsIDB4ZTgwMDgwMDAsIGdpY19paWQoMjI5KSk7Ci1SN1M3MjEwMF9TQ0lGKDMsIDB4ZTgwMDg4MDAsIGdpY19paWQoMjMzKSk7Ci1SN1M3MjEwMF9TQ0lGKDQsIDB4ZTgwMDkwMDAsIGdpY19paWQoMjM3KSk7Ci1SN1M3MjEwMF9TQ0lGKDUsIDB4ZTgwMDk4MDAsIGdpY19paWQoMjQxKSk7Ci1SN1M3MjEwMF9TQ0lGKDYsIDB4ZTgwMGEwMDAsIGdpY19paWQoMjQ1KSk7Ci1SN1M3MjEwMF9TQ0lGKDcsIDB4ZTgwMGE4MDAsIGdpY19paWQoMjQ5KSk7Ci0KLSNkZWZpbmUgcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZihpbmRleCkJCQkJCSAgICAgICBcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKCZwbGF0Zm9ybV9idXMsICJzaC1zY2kiLCBpbmRleCwgICAgICBcCi0JCQkJCSAgc2NpZiMjaW5kZXgjI19yZXNvdXJjZXMsCSAgICAgICBcCi0JCQkJCSAgQVJSQVlfU0laRShzY2lmIyNpbmRleCMjX3Jlc291cmNlcyksIFwKLQkJCQkJICAmc2NpZiMjaW5kZXgjI19wbGF0Zm9ybV9kYXRhLAkgICAgICAgXAotCQkJCQkgIHNpemVvZihzY2lmIyNpbmRleCMjX3BsYXRmb3JtX2RhdGEpKQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIG10dTJfMF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSAiTVRVMl8wIiwKLQkudGltZXJfYml0ID0gMCwKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHg4MCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGZjZmYwMDAwLCAweDQwMCksCisJREVGSU5FX1JFU19JUlFfTkFNRUQoZ2ljX2lpZCgxMzkpLCAidGdpMGEiKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8wX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmY2ZmMDMwMCwgMHgyNyksCi0JREVGSU5FX1JFU19JUlEoZ2ljX2lpZCgxMzkpKSwgLyogTVRVMiBUR0kwQSAqLwotfTsKLQotI2RlZmluZSByN3M3MjEwMF9yZWdpc3Rlcl9tdHUyKGlkeCkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoJnBsYXRmb3JtX2J1cywgInNoX210dTIiLAlcCi0JCQkJCSAgaWR4LCBtdHUyXyMjaWR4IyNfcmVzb3VyY2VzLAlcCi0JCQkJCSAgQVJSQVlfU0laRShtdHUyXyMjaWR4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZtdHUyXyMjaWR4IyNfcGxhdGZvcm1fZGF0YSwJXAotCQkJCQkgIHNpemVvZihzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnKSkKKyNkZWZpbmUgcjdzNzIxMDBfcmVnaXN0ZXJfbXR1MigpCQkJCQlcCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKCZwbGF0Zm9ybV9idXMsICJzaC1tdHUyIiwJXAorCQkJCQkgIC0xLCBtdHUyX3Jlc291cmNlcywJCVwKKwkJCQkJICBBUlJBWV9TSVpFKG10dTJfcmVzb3VyY2VzKSwJXAorCQkJCQkgIE5VTEwsIDApCiAKIHZvaWQgX19pbml0IHI3czcyMTAwX2FkZF9kdF9kZXZpY2VzKHZvaWQpCiB7Ci0JcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZigwKTsKLQlyN3M3MjEwMF9yZWdpc3Rlcl9zY2lmKDEpOwotCXI3czcyMTAwX3JlZ2lzdGVyX3NjaWYoMik7Ci0JcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZigzKTsKLQlyN3M3MjEwMF9yZWdpc3Rlcl9zY2lmKDQpOwotCXI3czcyMTAwX3JlZ2lzdGVyX3NjaWYoNSk7Ci0JcjdzNzIxMDBfcmVnaXN0ZXJfc2NpZig2KTsKLQlyN3M3MjEwMF9yZWdpc3Rlcl9zY2lmKDcpOwotCXI3czcyMTAwX3JlZ2lzdGVyX210dTIoMCk7CisJcjdzNzIxMDBfcmVnaXN0ZXJfbXR1MigpOwogfQogCiB2b2lkIF9faW5pdCByN3M3MjEwMF9pbml0X2Vhcmx5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzNhNC5jCmluZGV4IGNkMzZmODAuLjkzMzM3NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzNhNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzNhNC5jCkBAIC0xNjksMjAgKzE2OSwxNyBAQAogCQkJCQl0aGVybWFsMF9yZXNvdXJjZXMsCQlcCiAJCQkJCUFSUkFZX1NJWkUodGhlcm1hbDBfcmVzb3VyY2VzKSkKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJDTVQxMCIsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gODAsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSAweGZmLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQxMF9yZXNvdXJjZXNbXSA9IHsKLQlERUZJTkVfUkVTX01FTSgweGU2MTMwMDEwLCAweDBjKSwKLQlERUZJTkVfUkVTX01FTSgweGU2MTMwMDAwLCAweDA0KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDEyMCkpLCAvKiBDTVQxXzAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MV9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGU2MTMwMDAwLCAweDEwMDQpLAorCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTIwKSksCiB9OwogCiAjZGVmaW5lIHI4YTc3OTBfcmVnaXN0ZXJfY210KGlkeCkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoJnBsYXRmb3JtX2J1cywgInNoX2NtdCIsCVwKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoJnBsYXRmb3JtX2J1cywgInNoLWNtdC00OC1nZW4yIiwgXAogCQkJCQkgIGlkeCwgY210IyNpZHgjI19yZXNvdXJjZXMsCVwKIAkJCQkJICBBUlJBWV9TSVpFKGNtdCMjaWR4IyNfcmVzb3VyY2VzKSwgXAogCQkJCQkgICZjbXQjI2lkeCMjX3BsYXRmb3JtX2RhdGEsCVwKQEAgLTE5Niw3ICsxOTMsNyBAQAogCXI4YTczYTRfcmVnaXN0ZXJfc2NpZigzKTsKIAlyOGE3M2E0X3JlZ2lzdGVyX3NjaWYoNCk7CiAJcjhhNzNhNF9yZWdpc3Rlcl9zY2lmKDUpOwotCXI4YTc3OTBfcmVnaXN0ZXJfY210KDEwKTsKKwlyOGE3NzkwX3JlZ2lzdGVyX2NtdCgxKTsKIH0KIAogLyogRE1BICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NDAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jCmluZGV4IDhmM2M2ODEuLjM1ZGVjMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jCkBAIC0yMzcsMTI2ICsyMzcsNDUgQEAKIFI4QTc3NDBfU0NJRihQT1JUX1NDSUZCLCA4LCAweGU2YzMwMDAwLCBnaWNfc3BpKDEwOCkpOwogCiAvKiBDTVQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDEwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiQ01UMTAiLAotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAxMjUsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSAweDNmLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQxMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIkNNVDEwIiwKLQkJLnN0YXJ0CT0gMHhlNjEzODAxMCwKLQkJLmVuZAk9IDB4ZTYxMzgwMWIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBnaWNfc3BpKDU4KSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MV9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGU2MTM4MDAwLCAweDE3MCksCisJREVGSU5FX1JFU19JUlEoZ2ljX3NwaSg1OCkpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAotCS5pZAkJPSAxMCwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1jbXQtNDgiLAorCS5pZAkJPSAxLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDEwX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDFfcGxhdGZvcm1fZGF0YSwKIAl9LAotCS5yZXNvdXJjZQk9IGNtdDEwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210MTBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjbXQxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210MV9yZXNvdXJjZXMpLAogfTsKIAogLyogVE1VICovCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwMF9wbGF0Zm9ybV9kYXRhID0gewotCS5uYW1lID0gIlRNVTAwIiwKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJUTVUwMCIsCi0JCS5zdGFydAk9IDB4ZmZmODAwMDgsCi0JCS5lbmQJPSAweGZmZjgwMDE0IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGdpY19zcGkoMTk4KSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGZmZjgwMDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE5OCkpLAorCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTk5KSksCisJREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyMDApKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTAwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTAwX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKIAl9LAotCS5yZXNvdXJjZQk9IHRtdTAwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTAxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiVE1VMDEiLAotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJUTVUwMSIsCi0JCS5zdGFydAk9IDB4ZmZmODAwMTQsCi0JCS5lbmQJPSAweGZmZjgwMDIwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGdpY19zcGkoMTk5KSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTAxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwMV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11MDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MDJfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJUTVUwMiIsCi0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxQywKLQkudGltZXJfYml0ID0gMiwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIlRNVTAyIiwKLQkJLnN0YXJ0CT0gMHhmZmY4MDAyMCwKLQkJLmVuZAk9IDB4ZmZmODAwMkMgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZ2ljX3NwaSgyMDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MDJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTAyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUwMl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTAyX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdG11MF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTBfcmVzb3VyY2VzKSwKIH07CiAKIC8qIElQTU1VSSAoYW4gSVBNTVUgbW9kdWxlIGZvciBJQ0IvTE1CKSAqLwpAQCAtNDAwLDcgKzMxOSw3IEBACiAJJnNjaWY2X2RldmljZSwKIAkmc2NpZjdfZGV2aWNlLAogCSZzY2lmOF9kZXZpY2UsCi0JJmNtdDEwX2RldmljZSwKKwkmY210MV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcjhhNzc0MF9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTQwOCw5ICszMjcsNyBAQAogCSZpcnFwaW4xX2RldmljZSwKIAkmaXJxcGluMl9kZXZpY2UsCiAJJmlycXBpbjNfZGV2aWNlLAotCSZ0bXUwMF9kZXZpY2UsCi0JJnRtdTAxX2RldmljZSwKLQkmdG11MDJfZGV2aWNlLAorCSZ0bXUwX2RldmljZSwKIAkmaXBtbXVfZGV2aWNlLAogfTsKIApAQCAtNzY1LDcgKzY4Miw3IEBACiAgKgkiTWVkaWEgUkFNIChNRVJBTSkiIG9uIHI4YTc3NDAgZG9jdW1lbnRhdGlvbgogICovCiAjZGVmaW5lIE1FQlVGQ05UUgkweEZFOTUwMDk4Ci12b2lkIHI4YTc3NDBfbWVyYW1fd29ya2Fyb3VuZCh2b2lkKQordm9pZCBfX2luaXQgcjhhNzc0MF9tZXJhbV93b3JrYXJvdW5kKHZvaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAKQEAgLTg2OSwxNyArNzg2LDYgQEAKIAogI2lmZGVmIENPTkZJR19VU0VfT0YKIAotdm9pZCBfX2luaXQgcjhhNzc0MF9hZGRfZWFybHlfZGV2aWNlc19kdCh2b2lkKQotewotCXNobW9iaWxlX3NldHVwX2RlbGF5KDgwMCwgMSwgMyk7IC8qIENvcnRleC1BOSBAIDgwME1IeiAqLwotCi0JZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMocjhhNzc0MF9lYXJseV9kZXZpY2VzLAotCQkJCSAgIEFSUkFZX1NJWkUocjhhNzc0MF9lYXJseV9kZXZpY2VzKSk7Ci0KLQkvKiBzZXR1cCBlYXJseSBjb25zb2xlIGhlcmUgYXMgd2VsbCAqLwotCXNobW9iaWxlX3NldHVwX2NvbnNvbGUoKTsKLX0KLQogdm9pZCBfX2luaXQgcjhhNzc0MF9hZGRfc3RhbmRhcmRfZGV2aWNlc19kdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHI4YTc3NDBfZGV2aWNlc19kdCwKQEAgLTg4NywxMSArNzkzLDYgQEAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7CiB9CiAKLXZvaWQgX19pbml0IHI4YTc3NDBfaW5pdF9kZWxheSh2b2lkKQotewotCXNobW9iaWxlX3NldHVwX2RlbGF5KDgwMCwgMSwgMyk7IC8qIENvcnRleC1BOSBAIDgwME1IeiAqLwotfTsKLQogdm9pZCBfX2luaXQgcjhhNzc0MF9pbml0X2lycV9vZih2b2lkKQogewogCXZvaWQgX19pb21lbSAqaW50Y19wcmlvX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhlNjkwMDAxMCwgMHgxMCk7CkBAIC05MzUsOSArODM2LDEwIEBACiAKIERUX01BQ0hJTkVfU1RBUlQoUjhBNzc0MF9EVCwgIkdlbmVyaWMgUjhBNzc0MCAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCiAJLm1hcF9pbwkJPSByOGE3NzQwX21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHI4YTc3NDBfaW5pdF9kZWxheSwKKwkuaW5pdF9lYXJseQk9IHNobW9iaWxlX2luaXRfZGVsYXksCiAJLmluaXRfaXJxCT0gcjhhNzc0MF9pbml0X2lycV9vZiwKIAkuaW5pdF9tYWNoaW5lCT0gcjhhNzc0MF9nZW5lcmljX2luaXQsCisJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc0MF9ib2FyZHNfY29tcGF0X2R0LAogTUFDSElORV9FTkQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3Nzc4LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYwppbmRleCA2ZDY5NDUyLi44YzAyZTI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYwpAQCAtNzEsMzMgKzcxLDIwIEBACiAJCQkJCSAgc2l6ZW9mKHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSkpCiAKIC8qIFRNVSAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF90bXUwX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZmQ4MDAwOCwgMTIpLAorc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgc2hfdG11MF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsc19tYXNrID0gNywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfdG11MF9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGZmZDgwMDAwLCAweDMwKSwKIAlERUZJTkVfUkVTX0lSUShnaWNfaWlkKDB4NDApKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHNoX3RtdTBfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhID0gewotCS5uYW1lCQkJPSAiVE1VMDAiLAotCS5jaGFubmVsX29mZnNldAkJPSAweDQsCi0JLnRpbWVyX2JpdAkJPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZwk9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfdG11MV9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0gewotCURFRklORV9SRVNfTUVNKDB4ZmZkODAwMTQsIDEyKSwKIAlERUZJTkVfUkVTX0lSUShnaWNfaWlkKDB4NDEpKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHNoX3RtdTFfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhID0gewotCS5uYW1lCQkJPSAiVE1VMDEiLAotCS5jaGFubmVsX29mZnNldAkJPSAweDEwLAotCS50aW1lcl9iaXQJCT0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nCT0gMjAwLAorCURFRklORV9SRVNfSVJRKGdpY19paWQoMHg0MikpLAogfTsKIAogI2RlZmluZSByOGE3Nzc4X3JlZ2lzdGVyX3RtdShpZHgpCQkJXAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSgJCVwKLQkJJnBsYXRmb3JtX2J1cywgInNoX3RtdSIsIGlkeCwJCVwKKwkJJnBsYXRmb3JtX2J1cywgInNoLXRtdSIsIGlkeCwJCVwKIAkJc2hfdG11IyNpZHgjI19yZXNvdXJjZXMsCQlcCiAJCUFSUkFZX1NJWkUoc2hfdG11IyNpZHgjI19yZXNvdXJjZXMpLAlcCiAJCSZzaF90bXUjI2lkeCMjX3BsYXRmb3JtX2RhdGEsCQlcCkBAIC0zMTIsNyArMjk5LDYgQEAKIAlyOGE3Nzc4X3JlZ2lzdGVyX3NjaWYoNCk7CiAJcjhhNzc3OF9yZWdpc3Rlcl9zY2lmKDUpOwogCXI4YTc3NzhfcmVnaXN0ZXJfdG11KDApOwotCXI4YTc3NzhfcmVnaXN0ZXJfdG11KDEpOwogfQogCiAvKiBIUEItRE1BICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzkuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCmluZGV4IDhlODYwYjMuLmQxOTdiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCkBAIC0yMTksNjQgKzIxOSwyNSBAQAogUjhBNzc3OV9TQ0lGKDUsIDB4ZmZlNDUwMDAsIGdpY19paWQoMHg3ZCkpOwogCiAvKiBUTVUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTAwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiVE1VMDAiLAotCS5jaGFubmVsX29mZnNldCA9IDB4NCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIlRNVTAwIiwKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAwOCwKLQkJLmVuZAk9IDB4ZmZkODAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBnaWNfaWlkKDB4NDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4ZmZkODAwMDAsIDB4MzApLAorCURFRklORV9SRVNfSVJRKGdpY19paWQoMHg0MCkpLAorCURFRklORV9SRVNfSVJRKGdpY19paWQoMHg0MSkpLAorCURFRklORV9SRVNfSVJRKGdpY19paWQoMHg0MikpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MDBfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gdG11MDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MDFfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJUTVUwMSIsCi0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIlRNVTAxIiwKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAxNCwKLQkJLmVuZAk9IDB4ZmZkODAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBnaWNfaWlkKDB4NDEpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTAxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUwMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTAxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdG11MF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTBfcmVzb3VyY2VzKSwKIH07CiAKIC8qIEkyQyAqLwpAQCAtNjg1LDggKzY0Niw3IEBACiAJJnNjaWYzX2RldmljZSwKIAkmc2NpZjRfZGV2aWNlLAogCSZzY2lmNV9kZXZpY2UsCi0JJnRtdTAwX2RldmljZSwKLQkmdG11MDFfZGV2aWNlLAorCSZ0bXUwX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyOGE3Nzc5X3N0YW5kYXJkX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTAuYwppbmRleCBjNDYxNmYwLi42YmQwOGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTAuYwpAQCAtMTg1LDEyICsxODUsNiBAQAogCXI4YTc3OTBfcmVnaXN0ZXJfZ3BpbygzKTsKIAlyOGE3NzkwX3JlZ2lzdGVyX2dwaW8oNCk7CiAJcjhhNzc5MF9yZWdpc3Rlcl9ncGlvKDUpOwotCXI4YTc3OTBfcmVnaXN0ZXJfaTJjKDApOwotCXI4YTc3OTBfcmVnaXN0ZXJfaTJjKDEpOwotCXI4YTc3OTBfcmVnaXN0ZXJfaTJjKDIpOwotCXI4YTc3OTBfcmVnaXN0ZXJfaTJjKDMpOwotCXI4YTc3OTBfcmVnaXN0ZXJfYXVkaW9fZG1hYygwKTsKLQlyOGE3NzkwX3JlZ2lzdGVyX2F1ZGlvX2RtYWMoMSk7CiB9CiAKICNkZWZpbmUgX19SOEE3NzkwX1NDSUYoc2NpZl90eXBlLCBfc2NzY3IsIGluZGV4LCBiYXNlYWRkciwgaXJxKQkJXApAQCAtMjY5LDIwICsyNjMsMTcgQEAKIAkJCQkJdGhlcm1hbF9yZXNvdXJjZXMsCQlcCiAJCQkJCUFSUkFZX1NJWkUodGhlcm1hbF9yZXNvdXJjZXMpKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQwMF9wbGF0Zm9ybV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5uYW1lID0gIkNNVDAwIiwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSA4MCwKK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2hhbm5lbHNfbWFzayA9IDB4NjAsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGNtdDAwX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZmZjYTA1MTAsIDB4MGMpLAotCURFRklORV9SRVNfTUVNKDB4ZmZjYTA1MDAsIDB4MDQpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTQyKSksIC8qIENNVDBfMCAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQwX3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4ZmZjYTAwMDAsIDB4MTAwNCksCisJREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNDIpKSwKIH07CiAKICNkZWZpbmUgcjhhNzc5MF9yZWdpc3Rlcl9jbXQoaWR4KQkJCQkJXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSgmcGxhdGZvcm1fYnVzLCAic2hfY210IiwJXAorCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSgmcGxhdGZvcm1fYnVzLCAic2gtY210LTQ4LWdlbjIiLCBcCiAJCQkJCSAgaWR4LCBjbXQjI2lkeCMjX3Jlc291cmNlcywJXAogCQkJCQkgIEFSUkFZX1NJWkUoY210IyNpZHgjI19yZXNvdXJjZXMpLCBcCiAJCQkJCSAgJmNtdCMjaWR4IyNfcGxhdGZvcm1fZGF0YSwJXApAQCAtMjkwLDYgKzI4MSwxMSBAQAogCiB2b2lkIF9faW5pdCByOGE3NzkwX2FkZF9kdF9kZXZpY2VzKHZvaWQpCiB7CisJcjhhNzc5MF9yZWdpc3Rlcl9jbXQoMCk7Cit9CisKK3ZvaWQgX19pbml0IHI4YTc3OTBfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKIAlyOGE3NzkwX3JlZ2lzdGVyX3NjaWYoMCk7CiAJcjhhNzc5MF9yZWdpc3Rlcl9zY2lmKDEpOwogCXI4YTc3OTBfcmVnaXN0ZXJfc2NpZigyKTsKQEAgLTMwMCwxNCArMjk2LDE1IEBACiAJcjhhNzc5MF9yZWdpc3Rlcl9zY2lmKDcpOwogCXI4YTc3OTBfcmVnaXN0ZXJfc2NpZig4KTsKIAlyOGE3NzkwX3JlZ2lzdGVyX3NjaWYoOSk7Ci0JcjhhNzc5MF9yZWdpc3Rlcl9jbXQoMDApOwotfQotCi12b2lkIF9faW5pdCByOGE3NzkwX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17CiAJcjhhNzc5MF9hZGRfZHRfZGV2aWNlcygpOwogCXI4YTc3OTBfcmVnaXN0ZXJfaXJxYygwKTsKIAlyOGE3NzkwX3JlZ2lzdGVyX3RoZXJtYWwoKTsKKwlyOGE3NzkwX3JlZ2lzdGVyX2kyYygwKTsKKwlyOGE3NzkwX3JlZ2lzdGVyX2kyYygxKTsKKwlyOGE3NzkwX3JlZ2lzdGVyX2kyYygyKTsKKwlyOGE3NzkwX3JlZ2lzdGVyX2kyYygzKTsKKwlyOGE3NzkwX3JlZ2lzdGVyX2F1ZGlvX2RtYWMoMCk7CisJcjhhNzc5MF9yZWdpc3Rlcl9hdWRpb19kbWFjKDEpOwogfQogCiB2b2lkIF9faW5pdCByOGE3NzkwX2luaXRfZWFybHkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKaW5kZXggZTI4NDA0ZS4uMDRhOTZkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKQEAgLTEyOCwyMCArMTI4LDE3IEBACiAJCQkJCSAgJnNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSwJICAgICAgIFwKIAkJCQkJICBzaXplb2Yoc2NpZiMjaW5kZXgjI19wbGF0Zm9ybV9kYXRhKSkKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MDBfcGxhdGZvcm1fZGF0YSBfX2luaXRjb25zdCA9IHsKLQkubmFtZSA9ICJDTVQwMCIsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gODAsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSAweDYwLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBjbXQwMF9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGZmY2EwNTEwLCAweDBjKSwKLQlERUZJTkVfUkVTX01FTSgweGZmY2EwNTAwLCAweDA0KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE0MikpLCAvKiBDTVQwXzAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MF9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGZmY2EwMDAwLCAweDEwMDQpLAorCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTQyKSksCiB9OwogCiAjZGVmaW5lIHI4YTc3OTFfcmVnaXN0ZXJfY210KGlkeCkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoJnBsYXRmb3JtX2J1cywgInNoX2NtdCIsCVwKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoJnBsYXRmb3JtX2J1cywgInNoLWNtdC00OC1nZW4yIiwgXAogCQkJCQkgIGlkeCwgY210IyNpZHgjI19yZXNvdXJjZXMsCVwKIAkJCQkJICBBUlJBWV9TSVpFKGNtdCMjaWR4IyNfcmVzb3VyY2VzKSwgXAogCQkJCQkgICZjbXQjI2lkeCMjX3BsYXRmb3JtX2RhdGEsCVwKQEAgLTE4NSw2ICsxODIsMTEgQEAKIAogdm9pZCBfX2luaXQgcjhhNzc5MV9hZGRfZHRfZGV2aWNlcyh2b2lkKQogeworCXI4YTc3OTFfcmVnaXN0ZXJfY210KDApOworfQorCit2b2lkIF9faW5pdCByOGE3NzkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCit7CiAJcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDApOwogCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxKTsKIAlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMik7CkBAIC0yMDAsMjMgKzIwMiwxMSBAQAogCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxMik7CiAJcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDEzKTsKIAlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTQpOwotCXI4YTc3OTFfcmVnaXN0ZXJfY210KDAwKTsKLX0KLQotdm9pZCBfX2luaXQgcjhhNzc5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewogCXI4YTc3OTFfYWRkX2R0X2RldmljZXMoKTsKIAlyOGE3NzkxX3JlZ2lzdGVyX2lycWMoMCk7CiAJcjhhNzc5MV9yZWdpc3Rlcl90aGVybWFsKCk7CiB9CiAKLXZvaWQgX19pbml0IHI4YTc3OTFfaW5pdF9lYXJseSh2b2lkKQotewotI2lmbmRlZiBDT05GSUdfQVJNX0FSQ0hfVElNRVIKLQlzaG1vYmlsZV9zZXR1cF9kZWxheSgxMzAwLCAyLCA0KTsgLyogQ29ydGV4LUExNSBAIDEzMDBNSHogKi8KLSNlbmRpZgotfQotCiAjaWZkZWYgQ09ORklHX1VTRV9PRgogc3RhdGljIGNvbnN0IGNoYXIgKnI4YTc3OTFfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMscjhhNzc5MSIsCkBAIC0yMjUsNyArMjE1LDcgQEAKIAogRFRfTUFDSElORV9TVEFSVChSOEE3NzkxX0RULCAiR2VuZXJpYyBSOEE3NzkxIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKIAkuc21wCQk9IHNtcF9vcHMocjhhNzc5MV9zbXBfb3BzKSwKLQkuaW5pdF9lYXJseQk9IHI4YTc3OTFfaW5pdF9lYXJseSwKKwkuaW5pdF9lYXJseQk9IHNobW9iaWxlX2luaXRfZGVsYXksCiAJLmluaXRfdGltZQk9IHJjYXJfZ2VuMl90aW1lcl9pbml0LAogCS5kdF9jb21wYXQJPSByOGE3NzkxX2JvYXJkc19jb21wYXRfZHQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKaW5kZXggMTA2MDQ0OC4uNTQyYzVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCkBAIC0zMCwxMiArMzAsMTYgQEAKIAogdTMyIHJjYXJfZ2VuMl9yZWFkX21vZGVfcGlucyh2b2lkKQogewotCXZvaWQgX19pb21lbSAqbW9kZW1yID0gaW9yZW1hcF9ub2NhY2hlKE1PREVNUiwgNCk7Ci0JdTMyIG1vZGU7CisJc3RhdGljIHUzMiBtb2RlOworCXN0YXRpYyBib29sIG1vZGVfdmFsaWQ7CiAKLQlCVUdfT04oIW1vZGVtcik7Ci0JbW9kZSA9IGlvcmVhZDMyKG1vZGVtcik7Ci0JaW91bm1hcChtb2RlbXIpOworCWlmICghbW9kZV92YWxpZCkgeworCQl2b2lkIF9faW9tZW0gKm1vZGVtciA9IGlvcmVtYXBfbm9jYWNoZShNT0RFTVIsIDQpOworCQlCVUdfT04oIW1vZGVtcik7CisJCW1vZGUgPSBpb3JlYWQzMihtb2RlbXIpOworCQlpb3VubWFwKG1vZGVtcik7CisJCW1vZGVfdmFsaWQgPSB0cnVlOworCX0KIAogCXJldHVybiBtb2RlOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKaW5kZXggMjczMDEyNy4uMmE4YjlmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCkBAIC0xMTksMjggKzExOSwxNiBAQAogCiAvKiBDTVQgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDJfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJDTVQyIiwKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDQwLAotCS50aW1lcl9iaXQgPSA1LAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMTI1LAorCS5jaGFubmVsc19tYXNrID0gMHgyMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIkNNVDIiLAotCQkuc3RhcnQJPSAweGU2MTMwMDQwLAotCQkuZW5kCT0gMHhlNjEzMDA0YiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHgwYjgwKSwgLyogQ01UMiAqLwotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZTYxMzAwMDAsIDB4NTApLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHgwYjgwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKKwkubmFtZQkJPSAic2gtY210LTMyLWZhc3QiLAogCS5pZAkJPSAyLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDJfcGxhdGZvcm1fZGF0YSwKQEAgLTE1MCw2NCArMTM4LDI1IEBACiB9OwogCiAvKiBUTVUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTAwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiVE1VMDAiLAotCS5jaGFubmVsX29mZnNldCA9IDB4NCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIlRNVTAwIiwKLQkJLnN0YXJ0CT0gMHhmZmY2MDAwOCwKLQkJLmVuZAk9IDB4ZmZmNjAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4ZTgwKSwgLyogVE1VX1RVTkkwICovCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZmY2MDAwMCwgMHgyYyksCisJREVGSU5FX1JFU19JUlEoaW50Y3NfZXZ0MmlycSgweGU4MCkpLAorCURFRklORV9SRVNfSVJRKGludGNzX2V2dDJpcnEoMHhlYTApKSwKKwlERUZJTkVfUkVTX0lSUShpbnRjc19ldnQyaXJxKDB4ZWMwKSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwMF9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwX3BsYXRmb3JtX2RhdGEsCiAJfSwKLQkucmVzb3VyY2UJPSB0bXUwMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTAwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwMV9wbGF0Zm9ybV9kYXRhID0gewotCS5uYW1lID0gIlRNVTAxIiwKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTAxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUJPSAiVE1VMDEiLAotCQkuc3RhcnQJPSAweGZmZjYwMDE0LAotCQkuZW5kCT0gMHhmZmY2MDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGludGNzX2V2dDJpcnEoMHhlYTApLCAvKiBUTVVfVFVOSTEgKi8KLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTAxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwMV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11MDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHRtdTBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwX3Jlc291cmNlcyksCiB9OwogCiAvKiBJMkMgKi8KQEAgLTk1Miw4ICs5MDEsNyBAQAogCSZzY2lmNV9kZXZpY2UsCiAJJnNjaWY2X2RldmljZSwKIAkmY210Ml9kZXZpY2UsCi0JJnRtdTAwX2RldmljZSwKLQkmdG11MDFfZGV2aWNlLAorCSZ0bXUwX2RldmljZSwKIAkmaXBtbXVfZGV2aWNlLAogfTsKIApAQCAtMTAwMCw4ICs5NDgsNyBAQAogCQl7ICJBNFIiLCAmdmV1Ml9kZXZpY2UsIH0sCiAJCXsgIkE0UiIsICZ2ZXUzX2RldmljZSwgfSwKIAkJeyAiQTRSIiwgJmpwdV9kZXZpY2UsIH0sCi0JCXsgIkE0UiIsICZ0bXUwMF9kZXZpY2UsIH0sCi0JCXsgIkE0UiIsICZ0bXUwMV9kZXZpY2UsIH0sCisJCXsgIkE0UiIsICZ0bXUwX2RldmljZSwgfSwKIAl9OwogCiAJc2g3MzcyX2luaXRfcG1fZG9tYWlucygpOwpAQCAtMTAzNywxMSArOTg0LDcgQEAKIHsKIAlzaG1vYmlsZV9zZXR1cF9kZWxheSg4MDAsIDEsIDMpOyAvKiBDb3J0ZXgtQTggQCA4MDBNSHogKi8KIAotCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzM3Ml9lYXJseV9kZXZpY2VzLAotCQkJCSAgIEFSUkFZX1NJWkUoc2g3MzcyX2Vhcmx5X2RldmljZXMpKTsKLQotCS8qIHNldHVwIGVhcmx5IGNvbnNvbGUgaGVyZSBhcyB3ZWxsICovCi0Jc2htb2JpbGVfc2V0dXBfY29uc29sZSgpOworCXNoNzM3Ml9hZGRfZWFybHlfZGV2aWNlcygpOwogfQogCiB2b2lkIF9faW5pdCBzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXNfZHQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jCmluZGV4IGY3NGFiNTMuLmFkMDA3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwpAQCAtMTA0LDg2ICsxMDQsNDUgQEAKIFNINzNBMF9TQ0lGKFBPUlRfU0NJRkEsIDcsIDB4ZTZjZDAwMDAsIGdpY19zcGkoMTQzKSk7CiBTSDczQTBfU0NJRihQT1JUX1NDSUZCLCA4LCAweGU2YzMwMDAwLCBnaWNfc3BpKDgwKSk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDEwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiQ01UMTAiLAotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gODAsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2hhbm5lbHNfbWFzayA9IDB4M2YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDEwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUJPSAiQ01UMTAiLAotCQkuc3RhcnQJPSAweGU2MTM4MDEwLAotCQkuZW5kCT0gMHhlNjEzODAxYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGdpY19zcGkoNjUpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQxX3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4ZTYxMzgwMDAsIDB4MjAwKSwKKwlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDY1KSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQxMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCi0JLmlkCQk9IDEwLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWNtdC00OCIsCisJLmlkCQk9IDEsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MTBfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210MV9wbGF0Zm9ybV9kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gY210MTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNtdDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxX3Jlc291cmNlcyksCiB9OwogCiAvKiBUTVUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTAwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiVE1VMDAiLAotCS5jaGFubmVsX29mZnNldCA9IDB4NCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSBERUZJTkVfUkVTX01FTSgweGZmZjYwMDA4LCAweGMpLAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gaW50Y3NfZXZ0MmlycSgweDBlODApLCAvKiBUTVUwX1RVTkkwMCAqLwotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4ZmZmNjAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGludGNzX2V2dDJpcnEoMHhlODApKSwKKwlERUZJTkVfUkVTX0lSUShpbnRjc19ldnQyaXJxKDB4ZWEwKSksCisJREVGSU5FX1JFU19JUlEoaW50Y3NfZXZ0MmlycSgweGVjMCkpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MDBfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gdG11MDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MDFfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJUTVUwMSIsCi0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSBERUZJTkVfUkVTX01FTSgweGZmZjYwMDE0LCAweGMpLAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gaW50Y3NfZXZ0MmlycSgweDBlYTApLCAvKiBUTVUwX1RVTkkwMSAqLwotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTAxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUwMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTAxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdG11MF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTBfcmVzb3VyY2VzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjMF9yZXNvdXJjZXNbXSA9IHsKQEAgLTc0NiwxMiArNzA1LDExIEBACiAJJnNjaWY2X2RldmljZSwKIAkmc2NpZjdfZGV2aWNlLAogCSZzY2lmOF9kZXZpY2UsCi0JJmNtdDEwX2RldmljZSwKKwkmY210MV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3M2EwX2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZ0bXUwMF9kZXZpY2UsCi0JJnRtdTAxX2RldmljZSwKKwkmdG11MF9kZXZpY2UsCiAJJmlwbW11X2RldmljZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLWVtZXYyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1lbWV2Mi5jCmluZGV4IGYyY2E5MjMuLjJkZmQ3NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLWVtZXYyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvZW1ldjIuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkxLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkxLmMKaW5kZXggMmRmNWJkMS4uZWM5Nzk1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTEuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9yOGE3NzkxLmg+CisjaW5jbHVkZSA8bWFjaC9yY2FyLWdlbjIuaD4KIAogI2RlZmluZSBSU1QJCTB4ZTYxNjAwMDAKICNkZWZpbmUgQ0ExNUJBUgkJMHgwMDIwCkBAIC01MSw5ICs1MiwyMSBAQAogCWlvdW5tYXAocCk7CiB9CiAKK3N0YXRpYyBpbnQgcjhhNzc5MV9zbXBfYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwKKwkJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJLyogRXJyb3Igb3V0IHdoZW4gaGFyZHdhcmUgZGVidWcgbW9kZSBpcyBlbmFibGVkICovCisJaWYgKHJjYXJfZ2VuMl9yZWFkX21vZGVfcGlucygpICYgQklUKDIxKSkgeworCQlwcl93YXJuKCJVbmFibGUgdG8gYm9vdCBDUFUldSB3aGVuIE1EMjEgaXMgc2V0XG4iLCBjcHUpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCXJldHVybiBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeShjcHUsIGlkbGUpOworfQorCiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgcjhhNzc5MV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CiAJLnNtcF9wcmVwYXJlX2NwdXMJPSByOGE3NzkxX3NtcF9wcmVwYXJlX2NwdXMsCi0JLnNtcF9ib290X3NlY29uZGFyeQk9IHNobW9iaWxlX3NtcF9hcG11X2Jvb3Rfc2Vjb25kYXJ5LAorCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSByOGE3NzkxX3NtcF9ib290X3NlY29uZGFyeSwKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAkuY3B1X2Rpc2FibGUJCT0gc2htb2JpbGVfc21wX2NwdV9kaXNhYmxlLAogCS5jcHVfZGllCQk9IHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKaW5kZXggNjJkNzA1Mi4uNjhiYzBiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwpAQCAtMjEsNiArMjEsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorCit2b2lkIF9faW5pdCBzaG1vYmlsZV9zZXR1cF9kZWxheV9oeih1bnNpZ25lZCBpbnQgbWF4X2NwdV9jb3JlX2h6LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbXVsdCwgdW5zaWduZWQgaW50IGRpdikKK3sKKwkvKiBjYWxjdWxhdGUgYSB3b3JzdC1jYXNlIGxvb3BzLXBlci1qaWZmeSB2YWx1ZQorCSAqIGJhc2VkIG9uIG1heGltdW0gY3B1IGNvcmUgaHogc2V0dGluZyBhbmQgdGhlCisJICogX19kZWxheSgpIGltcGxlbWVudGF0aW9uIGluIGFyY2gvYXJtL2xpYi9kZWxheS5TCisJICoKKwkgKiB0aGlzIHdpbGwgcmVzdWx0IGluIGEgbG9uZ2VyIGRlbGF5IHRoYW4gZXhwZWN0ZWQKKwkgKiB3aGVuIHRoZSBjcHUgY29yZSBydW5zIG9uIGxvd2VyIGZyZXF1ZW5jaWVzLgorCSAqLworCisJdW5zaWduZWQgaW50IHZhbHVlID0gSFogKiBkaXYgLyBtdWx0OworCisJaWYgKCFwcmVzZXRfbHBqKQorCQlwcmVzZXRfbHBqID0gbWF4X2NwdV9jb3JlX2h6IC8gdmFsdWU7Cit9CiAKIHZvaWQgX19pbml0IHNobW9iaWxlX3NldHVwX2RlbGF5KHVuc2lnbmVkIGludCBtYXhfY3B1X2NvcmVfbWh6LAogCQkJCSB1bnNpZ25lZCBpbnQgbXVsdCwgdW5zaWduZWQgaW50IGRpdikKQEAgLTM5LDYgKzU3LDMzIEBACiAJCXByZXNldF9scGogPSBtYXhfY3B1X2NvcmVfbWh6ICogdmFsdWU7CiB9CiAKK3ZvaWQgX19pbml0IHNobW9iaWxlX2luaXRfZGVsYXkodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqcGFyZW50OworCXUzMiBtYXhfZnJlcSwgZnJlcTsKKworCW1heF9mcmVxID0gMDsKKworCXBhcmVudCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY3B1cyIpOworCWlmIChwYXJlbnQpIHsKKwkJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJlbnQsIG5wKSB7CisJCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiY2xvY2stZnJlcXVlbmN5IiwgJmZyZXEpKQorCQkJCW1heF9mcmVxID0gbWF4KG1heF9mcmVxLCBmcmVxKTsKKwkJfQorCQlvZl9ub2RlX3B1dChwYXJlbnQpOworCX0KKworCWlmIChtYXhfZnJlcSkgeworCQlpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFybSxjb3J0ZXgtYTgiKSkKKwkJCXNobW9iaWxlX3NldHVwX2RlbGF5X2h6KG1heF9mcmVxLCAxLCAzKTsKKwkJZWxzZSBpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFybSxjb3J0ZXgtYTkiKSkKKwkJCXNobW9iaWxlX3NldHVwX2RlbGF5X2h6KG1heF9mcmVxLCAxLCAzKTsKKwkJZWxzZSBpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFybSxjb3J0ZXgtYTE1IikpCisJCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSkKKwkJCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMiwgNCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc2htb2JpbGVfbGF0ZV90aW1lX2luaXQodm9pZCkKIHsKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zdGkvYm9hcmQtZHQuYyBiL2FyY2gvYXJtL21hY2gtc3RpL2JvYXJkLWR0LmMKaW5kZXggMTIxN2ZiNS4uZGY3MzFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zdGkvYm9hcmQtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLXN0aS9ib2FyZC1kdC5jCkBAIC0zNiw2ICszNiw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqc3RpaDQxeF9kdF9tYXRjaFtdIF9faW5pdGRhdGEgPSB7CiAJInN0LHN0aWg0MTUiLAogCSJzdCxzdGloNDE2IiwKKwkic3Qsc3RpaDQwNyIsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnCmluZGV4IGI1N2Q3ZDUuLjBmYmQ0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXN1bnhpL0tjb25maWcKQEAgLTEsMTQgKzEsMzggQEAKLWNvbmZpZyBBUkNIX1NVTlhJCi0JYm9vbCAiQWxsd2lubmVyIEExWCBTT0NzIiBpZiBBUkNIX01VTFRJX1Y3Ci0Jc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKK21lbnVjb25maWcgQVJDSF9TVU5YSQorCWJvb2wgIkFsbHdpbm5lciBTb0NzIiBpZiBBUkNIX01VTFRJX1Y3CiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCi0Jc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgQVJNX1BTQ0kKIAlzZWxlY3QgQ0xLU1JDX01NSU8KIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAotCXNlbGVjdCBIQVZFX0FSTV9BUkNIX1RJTUVSCiAJc2VsZWN0IFBJTkNUUkwKIAlzZWxlY3QgUElOQ1RSTF9TVU5YSQotCXNlbGVjdCBSRVNFVF9DT05UUk9MTEVSCiAJc2VsZWN0IFNVTjRJX1RJTUVSCisKK2lmIEFSQ0hfU1VOWEkKKworY29uZmlnIE1BQ0hfU1VONEkKKwlib29sICJBbGx3aW5uZXIgQTEwIChzdW40aSkgU29DcyBzdXBwb3J0IgorCWRlZmF1bHQgQVJDSF9TVU5YSQorCitjb25maWcgTUFDSF9TVU41SQorCWJvb2wgIkFsbHdpbm5lciBBMTBzIC8gQTEzIChzdW41aSkgU29DcyBzdXBwb3J0IgorCWRlZmF1bHQgQVJDSF9TVU5YSQogCXNlbGVjdCBTVU41SV9IU1RJTUVSCisKK2NvbmZpZyBNQUNIX1NVTjZJCisJYm9vbCAiQWxsd2lubmVyIEEzMSAoc3VuNmkpIFNvQ3Mgc3VwcG9ydCIKKwlkZWZhdWx0IEFSQ0hfU1VOWEkKKwlzZWxlY3QgQVJDSF9IQVNfUkVTRVRfQ09OVFJPTExFUgorCXNlbGVjdCBBUk1fR0lDCisJc2VsZWN0IE1GRF9TVU42SV9QUkNNCisJc2VsZWN0IFJFU0VUX0NPTlRST0xMRVIKKwlzZWxlY3QgU1VONUlfSFNUSU1FUgorCitjb25maWcgTUFDSF9TVU43SQorCWJvb2wgIkFsbHdpbm5lciBBMjAgKHN1bjdpKSBTb0NzIHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX1NVTlhJCisJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQVJNX1BTQ0kKKwlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgorCXNlbGVjdCBTVU41SV9IU1RJTUVSCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN1bnhpL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1YWM0Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXN1bnhpL2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoKLSAqIENvcmUgZnVuY3Rpb25zIGZvciBBbGx3aW5uZXIgU29DcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBNYXhpbWUgUmlwYXJkCi0gKgotICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfU1VOWElfQ09NTU9OX0hfCi0jZGVmaW5lIF9fQVJDSF9TVU5YSV9DT01NT05fSF8KLQotdm9pZCBzdW42aV9zZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKLWV4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc3VuNmlfc21wX29wczsKLQotI2VuZGlmIC8qIF9fQVJDSF9TVU5YSV9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9wbGF0c21wLmMKaW5kZXggMGM3ZGJjZS4uYzUzMDc3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zdW54aS9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9wbGF0c21wLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKLSNpbmNsdWRlICJjb21tb24uaCIKLQogI2RlZmluZSBDUFVDRkdfQ1BVX1BXUl9DTEFNUF9TVEFUVVNfUkVHKGNwdSkJKChjcHUpICogMHg0MCArIDB4NjQpCiAjZGVmaW5lIENQVUNGR19DUFVfUlNUX0NUUkxfUkVHKGNwdSkJCSgoKGNwdSkgKyAxKSAqIDB4NDApCiAjZGVmaW5lIENQVUNGR19DUFVfQ1RSTF9SRUcoY3B1KQkJKCgoY3B1KSArIDEpICogMHg0MCArIDB4MDQpCkBAIC0xMjIsMyArMTIwLDQgQEAKIAkuc21wX3ByZXBhcmVfY3B1cwk9IHN1bjZpX3NtcF9wcmVwYXJlX2NwdXMsCiAJLnNtcF9ib290X3NlY29uZGFyeQk9IHN1bjZpX3NtcF9ib290X3NlY29uZGFyeSwKIH07CitDUFVfTUVUSE9EX09GX0RFQ0xBUkUoc3VuNmlfc21wLCAiYWxsd2lubmVyLHN1bjZpLWEzMSIsICZzdW42aV9zbXBfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYwppbmRleCA0NjBiNWE0Li4zZjk1ODdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN1bnhpL3N1bnhpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9zdW54aS5jCkBAIC0xMiwxMTEgKzEyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0jZGVmaW5lIFNVTjRJX1dBVENIRE9HX0NUUkxfUkVHCQkweDAwCi0jZGVmaW5lIFNVTjRJX1dBVENIRE9HX0NUUkxfUkVTVEFSVAkJQklUKDApCi0jZGVmaW5lIFNVTjRJX1dBVENIRE9HX01PREVfUkVHCQkweDA0Ci0jZGVmaW5lIFNVTjRJX1dBVENIRE9HX01PREVfRU5BQkxFCQlCSVQoMCkKLSNkZWZpbmUgU1VONElfV0FUQ0hET0dfTU9ERV9SRVNFVF9FTkFCTEUJQklUKDEpCi0KLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX0lSUV9SRUcJCTB4MDAKLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX0NUUkxfUkVHCTB4MTAKLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX0NUUkxfUkVTVEFSVAkJQklUKDApCi0jZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfUkVHCTB4MTQKLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX0NPTkZJR19SRVNUQVJUCQlCSVQoMCkKLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX0NPTkZJR19JUlEJCUJJVCgxKQotI2RlZmluZSBTVU42SV9XQVRDSERPRzFfTU9ERV9SRUcJMHgxOAotI2RlZmluZSBTVU42SV9XQVRDSERPRzFfTU9ERV9FTkFCTEUJCUJJVCgwKQotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICp3ZHRfYmFzZTsKLQotc3RhdGljIHZvaWQgc3VuNGlfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlpZiAoIXdkdF9iYXNlKQotCQlyZXR1cm47Ci0KLQkvKiBFbmFibGUgdGltZXIgYW5kIHNldCByZXNldCBiaXQgaW4gdGhlIHdhdGNoZG9nICovCi0Jd3JpdGVsKFNVTjRJX1dBVENIRE9HX01PREVfRU5BQkxFIHwgU1VONElfV0FUQ0hET0dfTU9ERV9SRVNFVF9FTkFCTEUsCi0JICAgICAgIHdkdF9iYXNlICsgU1VONElfV0FUQ0hET0dfTU9ERV9SRUcpOwotCi0JLyoKLQkgKiBSZXN0YXJ0IHRoZSB3YXRjaGRvZy4gVGhlIGRlZmF1bHQgKGFuZCBsb3dlc3QpIGludGVydmFsCi0JICogdmFsdWUgZm9yIHRoZSB3YXRjaGRvZyBpcyAwLjVzLgotCSAqLwotCXdyaXRlbChTVU40SV9XQVRDSERPR19DVFJMX1JFU1RBUlQsIHdkdF9iYXNlICsgU1VONElfV0FUQ0hET0dfQ1RSTF9SRUcpOwotCi0Jd2hpbGUgKDEpIHsKLQkJbWRlbGF5KDUpOwotCQl3cml0ZWwoU1VONElfV0FUQ0hET0dfTU9ERV9FTkFCTEUgfCBTVU40SV9XQVRDSERPR19NT0RFX1JFU0VUX0VOQUJMRSwKLQkJICAgICAgIHdkdF9iYXNlICsgU1VONElfV0FUQ0hET0dfTU9ERV9SRUcpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc3VuNmlfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlpZiAoIXdkdF9iYXNlKQotCQlyZXR1cm47Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQl3cml0ZWwoMCwgd2R0X2Jhc2UgKyBTVU42SV9XQVRDSERPRzFfSVJRX1JFRyk7Ci0KLQkvKiBXZSB3YW50IHRvIGRpc2FibGUgdGhlIElSUSBhbmQganVzdCByZXNldCB0aGUgd2hvbGUgc3lzdGVtICovCi0Jd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9DT05GSUdfUkVTVEFSVCwKLQkJd2R0X2Jhc2UgKyBTVU42SV9XQVRDSERPRzFfQ09ORklHX1JFRyk7Ci0KLQkvKiBFbmFibGUgdGltZXIuIFRoZSBkZWZhdWx0IGFuZCBsb3dlc3QgaW50ZXJ2YWwgdmFsdWUgaXMgMC41cyAqLwotCXdyaXRlbChTVU42SV9XQVRDSERPRzFfTU9ERV9FTkFCTEUsCi0JCXdkdF9iYXNlICsgU1VONklfV0FUQ0hET0cxX01PREVfUkVHKTsKLQotCS8qIFJlc3RhcnQgdGhlIHdhdGNoZG9nLiAqLwotCXdyaXRlbChTVU42SV9XQVRDSERPRzFfQ1RSTF9SRVNUQVJULAotCQl3ZHRfYmFzZSArIFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFRyk7Ci0KLQl3aGlsZSAoMSkgewotCQltZGVsYXkoNSk7Ci0JCXdyaXRlbChTVU42SV9XQVRDSERPRzFfTU9ERV9FTkFCTEUsCi0JCQl3ZHRfYmFzZSArIFNVTjZJX1dBVENIRE9HMV9NT0RFX1JFRyk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzdW54aV9yZXN0YXJ0X2lkc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC13ZHQiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXdkdCIgfSwKLQl7IC8qc2VudGluZWwqLyB9Ci19OwotCi1zdGF0aWMgdm9pZCBzdW54aV9zZXR1cF9yZXN0YXJ0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIHN1bnhpX3Jlc3RhcnRfaWRzKTsKLQlpZiAoV0FSTighbnAsICJ1bmFibGUgdG8gc2V0dXAgd2F0Y2hkb2cgcmVzdGFydCIpKQotCQlyZXR1cm47Ci0KLQl3ZHRfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKLQlXQVJOKCF3ZHRfYmFzZSwgImZhaWxlZCB0byBtYXAgd2F0Y2hkb2cgYmFzZSBhZGRyZXNzIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzdW54aV9kdF9pbml0KHZvaWQpCi17Ci0Jc3VueGlfc2V0dXBfcmVzdGFydCgpOwotCi0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1bnhpX2JvYXJkX2R0X2NvbXBhdFtdID0gewogCSJhbGx3aW5uZXIsc3VuNGktYTEwIiwKQEAgLTEyNiw5ICsyMyw3IEBACiB9OwogCiBEVF9NQUNISU5FX1NUQVJUKFNVTlhJX0RULCAiQWxsd2lubmVyIEExWCAoRGV2aWNlIFRyZWUpIikKLQkuaW5pdF9tYWNoaW5lCT0gc3VueGlfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gc3VueGlfYm9hcmRfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gc3VuNGlfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3VuNmlfYm9hcmRfZHRfY29tcGF0W10gPSB7CkBAIC0xNDAsMTYgKzM1LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc3VuNmlfdGltZXJfaW5pdCh2b2lkKQogewogCW9mX2Nsa19pbml0KE5VTEwpOwotCXN1bjZpX3Jlc2V0X2luaXQoKTsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUkVTRVRfQ09OVFJPTExFUikpCisJCXN1bjZpX3Jlc2V0X2luaXQoKTsKIAljbG9ja3NvdXJjZV9vZl9pbml0KCk7CiB9CiAKIERUX01BQ0hJTkVfU1RBUlQoU1VONklfRFQsICJBbGx3aW5uZXIgc3VuNmkgKEEzMSkgRmFtaWx5IikKLQkuaW5pdF9tYWNoaW5lCT0gc3VueGlfZHRfaW5pdCwKIAkuaW5pdF90aW1lCT0gc3VuNmlfdGltZXJfaW5pdCwKIAkuZHRfY29tcGF0CT0gc3VuNmlfYm9hcmRfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gc3VuNmlfcmVzdGFydCwKLQkuc21wCQk9IHNtcF9vcHMoc3VuNmlfc21wX29wcyksCiBNQUNISU5FX0VORAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1bjdpX2JvYXJkX2R0X2NvbXBhdFtdID0gewpAQCAtMTU4LDcgKzUxLDUgQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoU1VON0lfRFQsICJBbGx3aW5uZXIgc3VuN2kgKEEyMCkgRmFtaWx5IikKLQkuaW5pdF9tYWNoaW5lCT0gc3VueGlfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gc3VuN2lfYm9hcmRfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gc3VuNGlfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcKaW5kZXggNTViMzA1ZC4uZTE2OTk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvS2NvbmZpZwpAQCAtNyw3ICs3LDYgQEAKIAlzZWxlY3QgQ0xLU1JDX01NSU8KIAlzZWxlY3QgSEFWRV9BUk1fU0NVIGlmIFNNUAogCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgU01QCi0Jc2VsZWN0IE1JR0hUX0hBVkVfUENJCiAJc2VsZWN0IFBJTkNUUkwKIAlzZWxlY3QgQVJDSF9IQVNfUkVTRVRfQ09OVFJPTExFUgogCXNlbGVjdCBSRVNFVF9DT05UUk9MTEVSCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL3BtYy5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9wbWMuYwppbmRleCBmYjc5MjAyLi43YzcxMjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvcG1jLmMKQEAgLTQxLDYgKzQxLDE0IEBACiAjZGVmaW5lIFBNQ19SRU1PVkVfQ0xBTVBJTkcJCTB4MzQKICNkZWZpbmUgUE1DX1BXUkdBVEVfU1RBVFVTCQkweDM4CiAKKyNkZWZpbmUgUE1DX1NDUkFUQ0gwCQkJMHg1MAorI2RlZmluZSBQTUNfU0NSQVRDSDBfTU9ERV9SRUNPVkVSWQkoMSA8PCAzMSkKKyNkZWZpbmUgUE1DX1NDUkFUQ0gwX01PREVfQk9PVExPQURFUgkoMSA8PCAzMCkKKyNkZWZpbmUgUE1DX1NDUkFUQ0gwX01PREVfUkNNCQkoMSA8PCAxKQorI2RlZmluZSBQTUNfU0NSQVRDSDBfTU9ERV9NQVNLCQkoUE1DX1NDUkFUQ0gwX01PREVfUkVDT1ZFUlkgfCBcCisJCQkJCSBQTUNfU0NSQVRDSDBfTU9ERV9CT09UTE9BREVSIHwgXAorCQkJCQkgUE1DX1NDUkFUQ0gwX01PREVfUkNNKQorCiAjZGVmaW5lIFBNQ19DUFVQV1JHT09EX1RJTUVSCTB4YzgKICNkZWZpbmUgUE1DX0NQVVBXUk9GRl9USU1FUgkweGNjCiAKQEAgLTE2NSw2ICsxNzMsMjIgQEAKIHsKIAl1MzIgdmFsOwogCisJdmFsID0gdGVncmFfcG1jX3JlYWRsKFBNQ19TQ1JBVENIMCk7CisJdmFsICY9IH5QTUNfU0NSQVRDSDBfTU9ERV9NQVNLOworCisJaWYgKGNtZCkgeworCQlpZiAoc3RyY21wKGNtZCwgInJlY292ZXJ5IikgPT0gMCkKKwkJCXZhbCB8PSBQTUNfU0NSQVRDSDBfTU9ERV9SRUNPVkVSWTsKKworCQlpZiAoc3RyY21wKGNtZCwgImJvb3Rsb2FkZXIiKSA9PSAwKQorCQkJdmFsIHw9IFBNQ19TQ1JBVENIMF9NT0RFX0JPT1RMT0FERVI7CisKKwkJaWYgKHN0cmNtcChjbWQsICJmb3JjZWQtcmVjb3ZlcnkiKSA9PSAwKQorCQkJdmFsIHw9IFBNQ19TQ1JBVENIMF9NT0RFX1JDTTsKKwl9CisKKwl0ZWdyYV9wbWNfd3JpdGVsKHZhbCwgUE1DX1NDUkFUQ0gwKTsKKwogCXZhbCA9IHRlZ3JhX3BtY19yZWFkbCgwKTsKIAl2YWwgfD0gMHgxMDsKIAl0ZWdyYV9wbWNfd3JpdGVsKHZhbCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQppbmRleCBkZTU0NGFhLi45NzQxZGU5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlCkBAIC01LDggKzUsNyBAQAogb2JqLXkJCQkJOj0gY3B1Lm8gaWQubyB0aW1lci5vIHBtLm8KIG9iai0kKENPTkZJR19DQUNIRV9MMlgwKQkrPSBjYWNoZS1sMngwLm8KIG9iai0kKENPTkZJR19VWDUwMF9TT0NfREI4NTAwKQkrPSBjcHUtZGI4NTAwLm8KLW9iai0kKENPTkZJR19NQUNIX01PUDUwMCkJKz0gYm9hcmQtbW9wNTAwLXNkaS5vIFwKLQkJCQlib2FyZC1tb3A1MDAtcmVndWxhdG9ycy5vIFwKK29iai0kKENPTkZJR19NQUNIX01PUDUwMCkJKz0gYm9hcmQtbW9wNTAwLXJlZ3VsYXRvcnMubyBcCiAJCQkJYm9hcmQtbW9wNTAwLWF1ZGlvLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpCSs9IGhvdHBsdWcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtc2RpLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1zZGkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNiZjNhMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1zZGkuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCi0gKgotICogQXV0aG9yOiBIYW51bWF0aCBQcmFzYWQgPGhhbnVtYXRoLnByYXNhZEBzdGVyaWNzc29uLmNvbT4KLSAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLXN0ZS1kbWE0MC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgImRiODUwMC1yZWdzLmgiCi0jaW5jbHVkZSAiYm9hcmQtbW9wNTAwLmgiCi0jaW5jbHVkZSAic3RlLWRtYTQwLWRiODUwMC5oIgotCi0vKgotICogdjIgaGFzIGEgbmV3IHZlcnNpb24gb2YgdGhpcyBibG9jayB0aGF0IG5lZWQgdG8gYmUgZm9yY2VkLCB0aGUgbnVtYmVyIGZvdW5kCi0gKiBpbiBoYXJkd2FyZSBpcyBpbmNvcnJlY3QKLSAqLwotI2RlZmluZSBVODUwMF9TRElfVjJfUEVSSVBISUQgMHgxMDQ4MDE4MAotCi0vKgotICogU0RJIDAgKE1pY3JvU0Qgc2xvdCkKLSAqLwotCi0jaWZkZWYgQ09ORklHX1NURV9ETUE0MAotc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIG1vcDUwMF9zZGkwX2RtYV9jZmdfcnggPSB7Ci0JLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCi0JLmRpciA9IERNQV9ERVZfVE9fTUVNLAotCS5kZXZfdHlwZSA9IERCODUwMF9ETUFfREVWMjlfU0RfTU0wLAotfTsKLQotc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBtb3A1MDBfc2RpMF9kbWFfY2ZnX3R4ID0gewotCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAotCS5kaXIgPSBETUFfTUVNX1RPX0RFViwKLQkuZGV2X3R5cGUgPSBEQjg1MDBfRE1BX0RFVjI5X1NEX01NMCwKLX07Ci0jZW5kaWYKLQotc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtb3A1MDBfc2RpMF9kYXRhID0gewotCS5mX21heAkJPSAxMDAwMDAwMDAsCi0JLmNhcGFiaWxpdGllcwk9IE1NQ19DQVBfNF9CSVRfREFUQSB8Ci0JCQkJTU1DX0NBUF9TRF9ISUdIU1BFRUQgfAotCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8Ci0JCQkJTU1DX0NBUF9FUkFTRSB8Ci0JCQkJTU1DX0NBUF9VSFNfU0RSMTIgfAotCQkJCU1NQ19DQVBfVUhTX1NEUjI1LAotCS5ncGlvX3dwCT0gLTEsCi0JLnNpZ2RpcgkJPSBNQ0lfU1RfRkJDTEtFTiB8Ci0JCQkJTUNJX1NUX0NNRERJUkVOIHwKLQkJCQlNQ0lfU1RfREFUQTBESVJFTiB8Ci0JCQkJTUNJX1NUX0RBVEEyRElSRU4sCi0jaWZkZWYgQ09ORklHX1NURV9ETUE0MAotCS5kbWFfZmlsdGVyCT0gc3RlZG1hNDBfZmlsdGVyLAotCS5kbWFfcnhfcGFyYW0JPSAmbW9wNTAwX3NkaTBfZG1hX2NmZ19yeCwKLQkuZG1hX3R4X3BhcmFtCT0gJm1vcDUwMF9zZGkwX2RtYV9jZmdfdHgsCi0jZW5kaWYKLX07Ci0KLS8qCi0gKiBTREkxIChTRElPIFdMQU4pCi0gKi8KLSNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCi1zdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIHNkaTFfZG1hX2NmZ19yeCA9IHsKLQkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKLQkuZGlyID0gRE1BX0RFVl9UT19NRU0sCi0JLmRldl90eXBlID0gREI4NTAwX0RNQV9ERVYzMl9TRF9NTTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIHNkaTFfZG1hX2NmZ190eCA9IHsKLQkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKLQkuZGlyID0gRE1BX01FTV9UT19ERVYsCi0JLmRldl90eXBlID0gREI4NTAwX0RNQV9ERVYzMl9TRF9NTTEsCi19OwotI2VuZGlmCi0KLXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW9wNTAwX3NkaTFfZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzI5XzMwLAotCS5mX21heAkJPSAxMDAwMDAwMDAsCi0JLmNhcGFiaWxpdGllcwk9IE1NQ19DQVBfNF9CSVRfREFUQSB8Ci0JCQkJTU1DX0NBUF9OT05SRU1PVkFCTEUsCi0JLmdwaW9fY2QJPSAtMSwKLQkuZ3Bpb193cAk9IC0xLAotI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKLQkuZG1hX2ZpbHRlcgk9IHN0ZWRtYTQwX2ZpbHRlciwKLQkuZG1hX3J4X3BhcmFtCT0gJnNkaTFfZG1hX2NmZ19yeCwKLQkuZG1hX3R4X3BhcmFtCT0gJnNkaTFfZG1hX2NmZ190eCwKLSNlbmRpZgotfTsKLQotLyoKLSAqIFNESSAyIChQT1AgZU1NQywgbm90IG9uIERCODUwMGVkKQotICovCi0KLSNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCi1zdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgbW9wNTAwX3NkaTJfZG1hX2NmZ19yeCA9IHsKLQkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKLQkuZGlyID0gRE1BX0RFVl9UT19NRU0sCi0JLmRldl90eXBlID0gIERCODUwMF9ETUFfREVWMjhfU0RfTU0yLAotfTsKLQotc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBtb3A1MDBfc2RpMl9kbWFfY2ZnX3R4ID0gewotCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAotCS5kaXIgPSBETUFfTUVNX1RPX0RFViwKLQkuZGV2X3R5cGUgPSBEQjg1MDBfRE1BX0RFVjI4X1NEX01NMiwKLX07Ci0jZW5kaWYKLQotc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtb3A1MDBfc2RpMl9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMTY1XzE5NSwKLQkuZl9tYXgJCT0gMTAwMDAwMDAwLAotCS5jYXBhYmlsaXRpZXMJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfAotCQkJCU1NQ19DQVBfOF9CSVRfREFUQSB8Ci0JCQkJTU1DX0NBUF9OT05SRU1PVkFCTEUgfAotCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8Ci0JCQkJTU1DX0NBUF9FUkFTRSB8Ci0JCQkJTU1DX0NBUF9DTUQyMywKLQkuZ3Bpb19jZAk9IC0xLAotCS5ncGlvX3dwCT0gLTEsCi0jaWZkZWYgQ09ORklHX1NURV9ETUE0MAotCS5kbWFfZmlsdGVyCT0gc3RlZG1hNDBfZmlsdGVyLAotCS5kbWFfcnhfcGFyYW0JPSAmbW9wNTAwX3NkaTJfZG1hX2NmZ19yeCwKLQkuZG1hX3R4X3BhcmFtCT0gJm1vcDUwMF9zZGkyX2RtYV9jZmdfdHgsCi0jZW5kaWYKLX07Ci0KLS8qCi0gKiBTREkgNCAob24tYm9hcmQgZU1NQykKLSAqLwotCi0jaWZkZWYgQ09ORklHX1NURV9ETUE0MAotc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIG1vcDUwMF9zZGk0X2RtYV9jZmdfcnggPSB7Ci0JLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCi0JLmRpciA9IERNQV9ERVZfVE9fTUVNLAotCS5kZXZfdHlwZSA9ICBEQjg1MDBfRE1BX0RFVjQyX1NEX01NNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgbW9wNTAwX3NkaTRfZG1hX2NmZ190eCA9IHsKLQkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKLQkuZGlyID0gRE1BX01FTV9UT19ERVYsCi0JLmRldl90eXBlID0gREI4NTAwX0RNQV9ERVY0Ml9TRF9NTTQsCi19OwotI2VuZGlmCi0KLXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW9wNTAwX3NkaTRfZGF0YSA9IHsKLQkuZl9tYXgJCT0gMTAwMDAwMDAwLAotCS5jYXBhYmlsaXRpZXMJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfAotCQkJCU1NQ19DQVBfOF9CSVRfREFUQSB8Ci0JCQkJTU1DX0NBUF9OT05SRU1PVkFCTEUgfAotCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8Ci0JCQkJTU1DX0NBUF9FUkFTRSB8Ci0JCQkJTU1DX0NBUF9DTUQyMywKLQkuZ3Bpb19jZAk9IC0xLAotCS5ncGlvX3dwCT0gLTEsCi0jaWZkZWYgQ09ORklHX1NURV9ETUE0MAotCS5kbWFfZmlsdGVyCT0gc3RlZG1hNDBfZmlsdGVyLAotCS5kbWFfcnhfcGFyYW0JPSAmbW9wNTAwX3NkaTRfZG1hX2NmZ19yeCwKLQkuZG1hX3R4X3BhcmFtCT0gJm1vcDUwMF9zZGk0X2RtYV9jZmdfdHgsCi0jZW5kaWYKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuaAppbmRleCAzMmNjMGQ4Li43YzdiMGFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmgKQEAgLTgsMTIgKzgsNyBAQAogI2RlZmluZSBfX0JPQVJEX01PUDUwMF9ICiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2Fzb2MtdXg1MDAtbXNwLmg+Ci0jaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKLWV4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1vcDUwMF9zZGkwX2RhdGE7Ci1leHRlcm4gc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtb3A1MDBfc2RpMV9kYXRhOwotZXh0ZXJuIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW9wNTAwX3NkaTJfZGF0YTsKLWV4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1vcDUwMF9zZGk0X2RhdGE7CiBleHRlcm4gc3RydWN0IG1zcF9pMnNfcGxhdGZvcm1fZGF0YSBtc3AwX3BsYXRmb3JtX2RhdGE7CiBleHRlcm4gc3RydWN0IG1zcF9pMnNfcGxhdGZvcm1fZGF0YSBtc3AxX3BsYXRmb3JtX2RhdGE7CiBleHRlcm4gc3RydWN0IG1zcF9pMnNfcGxhdGZvcm1fZGF0YSBtc3AyX3BsYXRmb3JtX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCmluZGV4IDg4MjBmNjAuLmZhMzA4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCkBAIC0xNDYsMTAgKzE0Niw2IEBACiAJLyogUmVxdWlyZXMgY2FsbC1iYWNrIGJpbmRpbmdzLiAqLwogCU9GX0RFVl9BVVhEQVRBKCJhcm0sY29ydGV4LWE5LXBtdSIsIDAsICJhcm0tcG11IiwgJmRiODUwMF9wbXVfcGxhdGRhdGEpLAogCS8qIFJlcXVpcmVzIERNQSBiaW5kaW5ncy4gKi8KLQlPRl9ERVZfQVVYREFUQSgiYXJtLHBsMTh4IiwgMHg4MDEyNjAwMCwgInNkaTAiLCAgJm1vcDUwMF9zZGkwX2RhdGEpLAotCU9GX0RFVl9BVVhEQVRBKCJhcm0scGwxOHgiLCAweDgwMTE4MDAwLCAic2RpMSIsICAmbW9wNTAwX3NkaTFfZGF0YSksCi0JT0ZfREVWX0FVWERBVEEoImFybSxwbDE4eCIsIDB4ODAwMDUwMDAsICJzZGkyIiwgICZtb3A1MDBfc2RpMl9kYXRhKSwKLQlPRl9ERVZfQVVYREFUQSgiYXJtLHBsMTh4IiwgMHg4MDExNDAwMCwgInNkaTQiLCAgJm1vcDUwMF9zZGk0X2RhdGEpLAogCU9GX0RFVl9BVVhEQVRBKCJzdGVyaWNzc29uLHV4NTAwLW1zcC1pMnMiLCAweDgwMTIzMDAwLAogCQkgICAgICAgInV4NTAwLW1zcC1pMnMuMCIsICZtc3AwX3BsYXRmb3JtX2RhdGEpLAogCU9GX0RFVl9BVVhEQVRBKCJzdGVyaWNzc29uLHV4NTAwLW1zcC1pMnMiLCAweDgwMTI0MDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCmluZGV4IGYyYzg5ZmIuLmJlODNiYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKQEAgLTMxMCw2ICszMTAsMjEgQEAKIAkucmVzb3VyY2UgICAgICAgPSAgICAgICBjaGFyX2xjZF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxlZHNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0xFRF9PRkZTRVQsCisJCS5lbmQJPSBWRVJTQVRJTEVfU1lTX0JBU0UgKyBWRVJTQVRJTEVfU1lTX0xFRF9PRkZTRVQgKyA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInZlcnNhdGlsZS1sZWRzIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxlZHNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBsZWRzX3Jlc291cmNlcywKK307CisKIC8qCiAgKiBDbG9jayBoYW5kbGluZwogICovCkBAIC03OTUsNiArODEwLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlcnNhdGlsZV9pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2hhcl9sY2RfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL0tjb25maWcKaW5kZXggNjU3ZDUyZC4uYjhhYzc1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZwpAQCAtMTgsNiArMTgsOCBAQAogCXNlbGVjdCBQT1dFUl9TVVBQTFkKIAlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaWYgUkVHVUxBVE9SCiAJc2VsZWN0IFZFWFBSRVNTX0NPTkZJRworCXNlbGVjdCBWRVhQUkVTU19TWVNDRkcKKwlzZWxlY3QgTUZEX1ZFWFBSRVNTX1NZU1JFRwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB1c2luZyBDb3J0ZXggcHJvY2Vzc29yIGJhc2VkCiAJICBBUk0gY29yZSBhbmQgbG9naWMgKEZQR0EpIHRpbGVzIG9uIHRoZSBWZXJzYXRpbGUgRXhwcmVzcyBtb3RoZXJib2FyZCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmgKaW5kZXggYmRlNDM3NC4uMTUyZmFkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmgKQEAgLTQsMTAgKzQsOSBAQAogLyogVGlsZSdzIHBlcmlwaGVyYWxzIHN0YXRpYyBtYXBwaW5ncyBzaG91bGQgc3RhcnQgaGVyZSAqLwogI2RlZmluZSBWMlRfUEVSSVBIIDB4ZjgyMDAwMDAKIAotdm9pZCB2ZXhwcmVzc19kdF9zbXBfbWFwX2lvKHZvaWQpOwotCiBib29sIHZleHByZXNzX3NtcF9pbml0X29wcyh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucwl2ZXhwcmVzc19zbXBfb3BzOworZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucwl2ZXhwcmVzc19zbXBfZHRfb3BzOwogCiBleHRlcm4gdm9pZCB2ZXhwcmVzc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jCmluZGV4IDZmMzQ0OTcuLjQ5NGQ3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2N0LWNhOXg0LmMKQEAgLTEyOCw2ICsxMjgsMTAgQEAKIAkucmVzb3VyY2UJPSBwbXVfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG9zYzFfbG9va3VwID0geworCS5kZXZfaWQJCT0gImN0OmNsY2QiLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NjMV9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInZleHByZXNzLW9zYyIsCiAJLmlkCQk9IDEsCkBAIC0xMzUsNiArMTM5LDcgQEAKIAkucmVzb3VyY2UJPSAoc3RydWN0IHJlc291cmNlIFtdKSB7CiAJCVZFWFBSRVNTX1JFU19GVU5DKDB4ZiwgMSksCiAJfSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmb3NjMV9sb29rdXAsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfaW5pdCh2b2lkKQpAQCAtMTU1LDEwICsxNjAsNyBAQAogCQlhbWJhX2RldmljZV9yZWdpc3RlcihjdF9jYTl4NF9hbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBtdV9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3NjMV9kZXZpY2UpOwotCi0JV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KHZleHByZXNzX29zY19zZXR1cCgmb3NjMV9kZXZpY2UuZGV2KSwKLQkJCU5VTEwsICJjdDpjbGNkIikpOworCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJm9zYzFfZGV2aWNlKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKaW5kZXggOTkzYzlhZS4uYTFmMzgwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKQEAgLTEyLDggKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdmV4cHJlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9tY3BtLmg+CkBAIC0yNiwxNTQgKzI1LDEzIEBACiAKICNpbmNsdWRlICJjb3JlLmgiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRikKLQotc3RhdGljIGVudW0gewotCUdFTkVSSUNfU0NVLAotCUNPUlRFWF9BOV9TQ1UsCi19IHZleHByZXNzX2R0X3NjdSBfX2luaXRkYXRhID0gR0VORVJJQ19TQ1U7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdmV4cHJlc3NfZHRfY29ydGV4X2E5X3NjdV9tYXAgX19pbml0ZGF0YSA9IHsKLQkudmlydHVhbAk9IFYyVF9QRVJJUEgsCi0JLyogLnBmbglzZXQgaW4gdmV4cHJlc3NfZHRfaW5pdF9jb3J0ZXhfYTlfc2N1KCkgKi8KLQkubGVuZ3RoCQk9IFNaXzEyOCwKLQkudHlwZQkJPSBNVF9ERVZJQ0UsCi19OwotCi1zdGF0aWMgdm9pZCAqdmV4cHJlc3NfZHRfY29ydGV4X2E5X3NjdV9iYXNlIF9faW5pdGRhdGE7Ci0KLWNvbnN0IHN0YXRpYyBjaGFyICp2ZXhwcmVzc19kdF9jb3J0ZXhfYTlfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKLQkiYXJtLGNvcnRleC1hNS1zY3UiLAotCSJhcm0sY29ydGV4LWE5LXNjdSIsCi0JTlVMTAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdmV4cHJlc3NfZHRfZmluZF9zY3UodW5zaWduZWQgbG9uZyBub2RlLAotCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCWlmIChvZl9mbGF0X2R0X21hdGNoKG5vZGUsIHZleHByZXNzX2R0X2NvcnRleF9hOV9tYXRjaCkpIHsKLQkJcGh5c19hZGRyX3QgcGh5c19hZGRyOwotCQlfX2JlMzIgKnJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsIE5VTEwpOwotCi0JCWlmIChXQVJOX09OKCFyZWcpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcGh5c19hZGRyID0gYmUzMl90b19jcHVwKHJlZyk7Ci0JCXZleHByZXNzX2R0X3NjdSA9IENPUlRFWF9BOV9TQ1U7Ci0KLQkJdmV4cHJlc3NfZHRfY29ydGV4X2E5X3NjdV9tYXAucGZuID0gX19waHlzX3RvX3BmbihwaHlzX2FkZHIpOwotCQlpb3RhYmxlX2luaXQoJnZleHByZXNzX2R0X2NvcnRleF9hOV9zY3VfbWFwLCAxKTsKLQkJdmV4cHJlc3NfZHRfY29ydGV4X2E5X3NjdV9iYXNlID0gaW9yZW1hcChwaHlzX2FkZHIsIFNaXzI1Nik7Ci0JCWlmIChXQVJOX09OKCF2ZXhwcmVzc19kdF9jb3J0ZXhfYTlfc2N1X2Jhc2UpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IHZleHByZXNzX2R0X3NtcF9tYXBfaW8odm9pZCkKLXsKLQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcykKLQkJV0FSTl9PTihvZl9zY2FuX2ZsYXRfZHQodmV4cHJlc3NfZHRfZmluZF9zY3UsIE5VTEwpKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgdmV4cHJlc3NfZHRfY3B1c19udW0odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKLQkJaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCXN0YXRpYyBpbnQgcHJldl9kZXB0aCA9IC0xOwotCXN0YXRpYyBpbnQgbnJfY3B1cyA9IC0xOwotCi0JaWYgKHByZXZfZGVwdGggPiBkZXB0aCAmJiBucl9jcHVzID4gMCkKLQkJcmV0dXJuIG5yX2NwdXM7Ci0KLQlpZiAobnJfY3B1cyA8IDAgJiYgc3RyY21wKHVuYW1lLCAiY3B1cyIpID09IDApCi0JCW5yX2NwdXMgPSAwOwotCi0JaWYgKG5yX2NwdXMgPj0gMCkgewotCQljb25zdCBjaGFyICpkZXZpY2VfdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwKLQkJCQkiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQotCQlpZiAoZGV2aWNlX3R5cGUgJiYgc3RyY21wKGRldmljZV90eXBlLCAiY3B1IikgPT0gMCkKLQkJCW5yX2NwdXMrKzsKLQl9Ci0KLQlwcmV2X2RlcHRoID0gZGVwdGg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHZleHByZXNzX2R0X3NtcF9pbml0X2NwdXModm9pZCkKLXsKLQlpbnQgbmNvcmVzID0gMCwgaTsKLQotCXN3aXRjaCAodmV4cHJlc3NfZHRfc2N1KSB7Ci0JY2FzZSBHRU5FUklDX1NDVToKLQkJbmNvcmVzID0gb2Zfc2Nhbl9mbGF0X2R0KHZleHByZXNzX2R0X2NwdXNfbnVtLCBOVUxMKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT1JURVhfQTlfU0NVOgotCQluY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQodmV4cHJlc3NfZHRfY29ydGV4X2E5X3NjdV9iYXNlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTigxKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKG5jb3JlcyA8IDIpCi0JCXJldHVybjsKLQotCWlmIChuY29yZXMgPiBucl9jcHVfaWRzKSB7Ci0JCXByX3dhcm4oIlNNUDogJXUgY29yZXMgZ3JlYXRlciB0aGFuIG1heGltdW0gKCV1KSwgY2xpcHBpbmdcbiIsCi0JCQkJbmNvcmVzLCBucl9jcHVfaWRzKTsKLQkJbmNvcmVzID0gbnJfY3B1X2lkczsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmNvcmVzOyArK2kpCi0JCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19kdF9zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQlpbnQgaTsKLQotCXN3aXRjaCAodmV4cHJlc3NfZHRfc2N1KSB7Ci0JY2FzZSBHRU5FUklDX1NDVToKLQkJZm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspCi0JCQlzZXRfY3B1X3ByZXNlbnQoaSwgdHJ1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgQ09SVEVYX0E5X1NDVToKLQkJc2N1X2VuYWJsZSh2ZXhwcmVzc19kdF9jb3J0ZXhfYTlfc2N1X2Jhc2UpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlicmVhazsKLQl9Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19kdF9zbXBfaW5pdF9jcHVzKHZvaWQpCi17Ci0JV0FSTl9PTigxKTsKLX0KLQotdm9pZCBfX2luaXQgdmV4cHJlc3NfZHRfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JV0FSTl9PTigxKTsKLX0KLQotI2VuZGlmCi0KIC8qCiAgKiBJbml0aWFsaXNlIHRoZSBDUFUgcG9zc2libGUgbWFwIGVhcmx5IC0gdGhpcyBkZXNjcmliZXMgdGhlIENQVXMKICAqIHdoaWNoIG1heSBiZSBwcmVzZW50IG9yIGJlY29tZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0uCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zbXBfaW5pdF9jcHVzKHZvaWQpCiB7Ci0JaWYgKGN0X2Rlc2MpCi0JCWN0X2Rlc2MtPmluaXRfY3B1X21hcCgpOwotCWVsc2UKLQkJdmV4cHJlc3NfZHRfc21wX2luaXRfY3B1cygpOwotCisJY3RfZGVzYy0+aW5pdF9jcHVfbWFwKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKQEAgLTE4MiwxMCArNDAsNyBAQAogCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzCiAJICogYWN0dWFsbHkgcG9wdWxhdGVkIGF0IHRoZSBwcmVzZW50IHRpbWUuCiAJICovCi0JaWYgKGN0X2Rlc2MpCi0JCWN0X2Rlc2MtPnNtcF9lbmFibGUobWF4X2NwdXMpOwotCWVsc2UKLQkJdmV4cHJlc3NfZHRfc21wX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisJY3RfZGVzYy0+c21wX2VuYWJsZShtYXhfY3B1cyk7CiAKIAkvKgogCSAqIFdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlCkBAIC0yMjMsMyArNzgsMzkgQEAKICNlbmRpZgogCXJldHVybiBmYWxzZTsKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX09GKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2ZXhwcmVzc19zbXBfZHRfc2N1X21hdGNoW10gX19pbml0Y29uc3QgPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1LXNjdSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXNjdSIsIH0sCisJe30KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zbXBfZHRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjdSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLAorCQkJdmV4cHJlc3Nfc21wX2R0X3NjdV9tYXRjaCk7CisKKwlpZiAoc2N1KQorCQlzY3VfZW5hYmxlKG9mX2lvbWFwKHNjdSwgMCkpOworCisJLyoKKwkgKiBXcml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCBpbnRvIHRoZQorCSAqIHN5c3RlbS13aWRlIGZsYWdzIHJlZ2lzdGVyLiBUaGUgYm9vdCBtb25pdG9yIHdhaXRzCisJICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCisJICogc2Vjb25kYXJ5IENQVSBicmFuY2hlcyB0byB0aGlzIGFkZHJlc3MuCisJICovCisJdmV4cHJlc3NfZmxhZ3Nfc2V0KHZpcnRfdG9fcGh5cyh2ZXJzYXRpbGVfc2Vjb25kYXJ5X3N0YXJ0dXApKTsKK30KKworc3RydWN0IHNtcF9vcGVyYXRpb25zIF9faW5pdGRhdGEgdmV4cHJlc3Nfc21wX2R0X29wcyA9IHsKKwkuc21wX3ByZXBhcmVfY3B1cwk9IHZleHByZXNzX3NtcF9kdF9wcmVwYXJlX2NwdXMsCisJLnNtcF9zZWNvbmRhcnlfaW5pdAk9IHZlcnNhdGlsZV9zZWNvbmRhcnlfaW5pdCwKKwkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gdmVyc2F0aWxlX2Jvb3Rfc2Vjb25kYXJ5LAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS5jcHVfZGllCQk9IHZleHByZXNzX2NwdV9kaWUsCisjZW5kaWYKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKaW5kZXggNGY4YjhjYi4uMzhmNGY2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCkBAIC0yMDEsOCArMjAxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgdjJtX21tY2lfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmdwaW9fd3AJPSBWRVhQUkVTU19HUElPX01NQ19XUFJPVCwKLQkuZ3Bpb19jZAk9IFZFWFBSRVNTX0dQSU9fTU1DX0NBUkRJTiwKKwkuc3RhdHVzCQk9IHZleHByZXNzX2dldF9tY2lfY2FyZGluLAorCS5ncGlvX2NkCT0gLTEsCisJLmdwaW9fd3AJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdjJtX3N5c3JlZ19yZXNvdXJjZXNbXSA9IHsKQEAgLTM0MCwxMSArMzQxLDYgQEAKIAlyZWd1bGF0b3JfcmVnaXN0ZXJfZml4ZWQoMCwgdjJtX2V0aF9zdXBwbGllcywKIAkJCUFSUkFZX1NJWkUodjJtX2V0aF9zdXBwbGllcykpOwogCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fbXV4ZnBnYV9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX3NodXRkb3duX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fcmVib290X2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZHZpbW9kZV9kZXZpY2UpOwotCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fc3lzcmVnX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fcGNpZV9pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9kZGNfaTJjX2RldmljZSk7CkBAIC0zNTYsNiArMzUyLDExIEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodjJtX2FtYmFfZGV2cyk7IGkrKykKIAkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIodjJtX2FtYmFfZGV2c1tpXSwgJmlvbWVtX3Jlc291cmNlKTsKIAorCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9tdXhmcGdhX2RldmljZSk7CisJdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcigmdjJtX3NodXRkb3duX2RldmljZSk7CisJdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcigmdjJtX3JlYm9vdF9kZXZpY2UpOworCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9kdmltb2RlX2RldmljZSk7CisKIAljdF9kZXNjLT5pbml0X3RpbGUoKTsKIH0KIApAQCAtMzY5LDcxICszNzAsMTAgQEAKIAkuaW5pdF9tYWNoaW5lCT0gdjJtX2luaXQsCiBNQUNISU5FX0VORAogCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHYybV9yczFfaW9fZGVzYyBfX2luaXRkYXRhID0gewotCS52aXJ0dWFsCT0gVjJNX1BFUklQSCwKLQkucGZuCQk9IF9fcGh5c190b19wZm4oMHgxYzAwMDAwMCksCi0JLmxlbmd0aAkJPSBTWl8yTSwKLQkudHlwZQkJPSBNVF9ERVZJQ0UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB2Mm1fZHRfc2Nhbl9tZW1vcnlfbWFwKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCi0JCWludCBkZXB0aCwgdm9pZCAqZGF0YSkKLXsKLQljb25zdCBjaGFyICoqbWFwID0gZGF0YTsKLQotCWlmIChzdHJjbXAodW5hbWUsICJtb3RoZXJib2FyZCIpICE9IDApCi0JCXJldHVybiAwOwotCi0JKm1hcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImFybSx2Mm0tbWVtb3J5LW1hcCIsIE5VTEwpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXZvaWQgX19pbml0IHYybV9kdF9tYXBfaW8odm9pZCkKLXsKLQljb25zdCBjaGFyICptYXAgPSBOVUxMOwotCi0Jb2Zfc2Nhbl9mbGF0X2R0KHYybV9kdF9zY2FuX21lbW9yeV9tYXAsICZtYXApOwotCi0JaWYgKG1hcCAmJiBzdHJjbXAobWFwLCAicnMxIikgPT0gMCkKLQkJaW90YWJsZV9pbml0KCZ2Mm1fcnMxX2lvX2Rlc2MsIDEpOwotCWVsc2UKLQkJaW90YWJsZV9pbml0KHYybV9pb19kZXNjLCBBUlJBWV9TSVpFKHYybV9pb19kZXNjKSk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTVApCi0JdmV4cHJlc3NfZHRfc21wX21hcF9pbygpOwotI2VuZGlmCi19Ci0KLXZvaWQgX19pbml0IHYybV9kdF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JdTMyIGR0X2hiaTsKLQotCXZleHByZXNzX3N5c3JlZ19vZl9lYXJseV9pbml0KCk7Ci0KLQkvKiBDb25maXJtIGJvYXJkIHR5cGUgYWdhaW5zdCBEVCBwcm9wZXJ0eSwgaWYgYXZhaWxhYmxlICovCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX2FsbG5vZGVzLCAiYXJtLGhiaSIsICZkdF9oYmkpID09IDApIHsKLQkJdTMyIGhiaSA9IHZleHByZXNzX2dldF9oYmkoVkVYUFJFU1NfU0lURV9NQVNURVIpOwotCi0JCWlmIChXQVJOX09OKGR0X2hiaSAhPSBoYmkpKQotCQkJcHJfd2FybmluZygidmV4cHJlc3M6IERUIEhCSSAoJXgpIGlzIG5vdCBtYXRjaGluZyAiCi0JCQkJCSJoYXJkd2FyZSAoJXgpIVxuIiwgZHRfaGJpLCBoYmkpOwotCX0KLQotCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KHZleHByZXNzX2dldF8yNG1oel9jbG9ja19iYXNlKCksIDI0MDAwMDAwKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdjJtX2R0X2J1c19tYXRjaFtdIF9faW5pdGNvbnN0ID0gewotCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhcm0sYW1iYS1idXMiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLGNvbmZpZy1idXMiLCB9LAotCXt9Ci19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgdjJtX2R0X2luaXQodm9pZCkKIHsKIAlsMngwX29mX2luaXQoMHgwMDQwMDAwMCwgMHhmZTBmZmZmZik7Ci0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgdjJtX2R0X2J1c19tYXRjaCwgTlVMTCwgTlVMTCk7CisJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHYybV9kdF9tYXRjaFtdIF9faW5pdGNvbnN0ID0gewpAQCAtNDQzLDkgKzM4Myw3IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoVkVYUFJFU1NfRFQsICJBUk0tVmVyc2F0aWxlIEV4cHJlc3MiKQogCS5kdF9jb21wYXQJPSB2Mm1fZHRfbWF0Y2gsCi0JLnNtcAkJPSBzbXBfb3BzKHZleHByZXNzX3NtcF9vcHMpLAorCS5zbXAJCT0gc21wX29wcyh2ZXhwcmVzc19zbXBfZHRfb3BzKSwKIAkuc21wX2luaXQJPSBzbXBfaW5pdF9vcHModmV4cHJlc3Nfc21wX2luaXRfb3BzKSwKLQkubWFwX2lvCQk9IHYybV9kdF9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSB2Mm1fZHRfaW5pdF9lYXJseSwKIAkuaW5pdF9tYWNoaW5lCT0gdjJtX2R0X2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC16eW5xL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXp5bnEvS2NvbmZpZwppbmRleCA1OGMyYjg0Li41NzNlMGRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXp5bnEvS2NvbmZpZwpAQCAtMSwxNCArMSwxNiBAQAogY29uZmlnIEFSQ0hfWllOUQogCWJvb2wgIlhpbGlueCBaeW5xIEFSTSBDb3J0ZXggQTkgUGxhdGZvcm0iIGlmIEFSQ0hfTVVMVElfVjcKLQlzZWxlY3QgQVJNX0FNQkEKLQlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJc2VsZWN0IEFSQ0hfSEFTX09QUAorCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSIGlmICFDUFVfRlJFUQorCXNlbGVjdCBDQURFTkNFX1RUQ19USU1FUgogCXNlbGVjdCBIQVZFX0FSTV9TQ1UgaWYgU01QCiAJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKIAlzZWxlY3QgSUNTVAotCXNlbGVjdCBDQURFTkNFX1RUQ19USU1FUgotCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSIGlmICFDUFVfRlJFUQogCXNlbGVjdCBNRkRfU1lTQ09OCisJc2VsZWN0IFNPQ19CVVMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBYaWxpbnggWnlucSBBUk0gQ29ydGV4IEE5IFBsYXRmb3JtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMKaW5kZXggNmZjYzU4NC4uZWRiZDlkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zNywxMCArMzksMTUgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtX2luZm8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKKyNkZWZpbmUgWllOUV9ERVZDRkdfTUNUUkwJCTB4ODAKKyNkZWZpbmUgWllOUV9ERVZDRkdfUFNfVkVSU0lPTl9TSElGVAkyOAorI2RlZmluZSBaWU5RX0RFVkNGR19QU19WRVJTSU9OX01BU0sJMHhGCisKIHZvaWQgX19pb21lbSAqenlucV9zY3VfYmFzZTsKIAogLyoqCkBAIC02MCwxOSArNjcsODEgQEAKIH07CiAKIC8qKgorICogenlucV9nZXRfcmV2aXNpb24gLSBHZXQgWnlucSBzaWxpY29uIHJldmlzaW9uCisgKgorICogUmV0dXJuOiBTaWxpY29uIHZlcnNpb24gb3IgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHp5bnFfZ2V0X3JldmlzaW9uKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKnp5bnFfZGV2Y2ZnX2Jhc2U7CisJdTMyIHJldmlzaW9uOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAieGxueCx6eW5xLWRldmNmZy0xLjAiKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiJXM6IG5vIGRldmNmZyBub2RlIGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwl6eW5xX2RldmNmZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghenlucV9kZXZjZmdfYmFzZSkgeworCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gbWFwIEkvTyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldmlzaW9uID0gcmVhZGwoenlucV9kZXZjZmdfYmFzZSArIFpZTlFfREVWQ0ZHX01DVFJMKTsKKwlyZXZpc2lvbiA+Pj0gWllOUV9ERVZDRkdfUFNfVkVSU0lPTl9TSElGVDsKKwlyZXZpc2lvbiAmPSBaWU5RX0RFVkNGR19QU19WRVJTSU9OX01BU0s7CisKKwlpb3VubWFwKHp5bnFfZGV2Y2ZnX2Jhc2UpOworCisJcmV0dXJuIHJldmlzaW9uOworfQorCisvKioKICAqIHp5bnFfaW5pdF9tYWNoaW5lIC0gU3lzdGVtIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLCBpbnRlbmRlZCB0byBiZQogICoJCSAgICAgICBjYWxsZWQgZnJvbSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGRldmluZm8gPSB7IC5uYW1lID0gImNwdWZyZXEtY3B1MCIsIH07CisJc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlICpzb2NfZGV2X2F0dHI7CisJc3RydWN0IHNvY19kZXZpY2UgKnNvY19kZXY7CisJc3RydWN0IGRldmljZSAqcGFyZW50ID0gTlVMTDsKIAogCS8qCiAJICogNjRLQiB3YXkgc2l6ZSwgOC13YXkgYXNzb2NpYXRpdml0eSwgcGFyaXR5IGRpc2FibGVkCiAJICovCiAJbDJ4MF9vZl9pbml0KDB4MDIwNjAwMDAsIDB4RjBGMEZGRkYpOwogCi0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOworCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY19kZXZfYXR0cikKKwkJZ290byBvdXQ7CisKKwlzeXN0ZW1fcmV2ID0genlucV9nZXRfcmV2aXNpb24oKTsKKworCXNvY19kZXZfYXR0ci0+ZmFtaWx5ID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJYaWxpbnggWnlucSIpOworCXNvY19kZXZfYXR0ci0+cmV2aXNpb24gPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIjB4JXgiLCBzeXN0ZW1fcmV2KTsKKwlzb2NfZGV2X2F0dHItPnNvY19pZCA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiMHgleCIsCisJCQkJCSB6eW5xX3NsY3JfZ2V0X2RldmljZV9pZCgpKTsKKworCXNvY19kZXYgPSBzb2NfZGV2aWNlX3JlZ2lzdGVyKHNvY19kZXZfYXR0cik7CisJaWYgKElTX0VSUihzb2NfZGV2KSkgeworCQlrZnJlZShzb2NfZGV2X2F0dHItPmZhbWlseSk7CisJCWtmcmVlKHNvY19kZXZfYXR0ci0+cmV2aXNpb24pOworCQlrZnJlZShzb2NfZGV2X2F0dHItPnNvY19pZCk7CisJCWtmcmVlKHNvY19kZXZfYXR0cik7CisJCWdvdG8gb3V0OworCX0KKworCXBhcmVudCA9IHNvY19kZXZpY2VfdG9fZGV2aWNlKHNvY19kZXYpOworCitvdXQ6CisJLyoKKwkgKiBGaW5pc2hlZCB3aXRoIHRoZSBzdGF0aWMgcmVnaXN0cmF0aW9ucyBub3c7IGZpbGwgaW4gdGhlIG1pc3NpbmcKKwkgKiBkZXZpY2VzCisJICovCisJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIHBhcmVudCk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnp5bnFfY3B1aWRsZV9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZkZXZpbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uaAppbmRleCBiMDk3ODQ0Li5mNjUyZjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5oCkBAIC0yNCw2ICsyNCw3IEBACiBleHRlcm4gdm9pZCB6eW5xX3NsY3Jfc3lzdGVtX3Jlc2V0KHZvaWQpOwogZXh0ZXJuIHZvaWQgenlucV9zbGNyX2NwdV9zdG9wKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgenlucV9zbGNyX2NwdV9zdGFydChpbnQgY3B1KTsKK2V4dGVybiB1MzIgenlucV9zbGNyX2dldF9kZXZpY2VfaWQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBzZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtenlucS9oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLXp5bnEvaGVhZHNtcC5TCmluZGV4IDU3YTMyODYuLmRkOGMwNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtenlucS9oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC16eW5xL2hlYWRzbXAuUwpAQCAtOCw5ICs4LDEyIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KIAogRU5UUlkoenlucV9zZWNvbmRhcnlfdHJhbXBvbGluZSkKLQlsZHIJcjAsIFtwY10KK0FSTV9CRTgoc2V0ZW5kCWJlKQkJCQlAIGVuc3VyZSB3ZSBhcmUgaW4gQkU4IG1vZGUKKwlsZHIJcjAsIHp5bnFfc2Vjb25kYXJ5X3RyYW1wb2xpbmVfanVtcAorQVJNX0JFOChyZXYJcjAsIHIwKQogCWJ4CXIwCiAuZ2xvYmwgenlucV9zZWNvbmRhcnlfdHJhbXBvbGluZV9qdW1wCiB6eW5xX3NlY29uZGFyeV90cmFtcG9saW5lX2p1bXA6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXp5bnEvc2xjci5jIGIvYXJjaC9hcm0vbWFjaC16eW5xL3NsY3IuYwppbmRleCBhMzdkNDlhLi5jNDNhMmQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvc2xjci5jCisrKyBiL2FyY2gvYXJtL21hY2gtenlucS9zbGNyLmMKQEAgLTI2LDEwICsyNiwxMyBAQAogI2RlZmluZSBTTENSX1BTX1JTVF9DVFJMX09GRlNFVAkJMHgyMDAgLyogUFMgU29mdHdhcmUgUmVzZXQgQ29udHJvbCAqLwogI2RlZmluZSBTTENSX0E5X0NQVV9SU1RfQ1RSTF9PRkZTRVQJMHgyNDQgLyogQ1BVIFNvZnR3YXJlIFJlc2V0IENvbnRyb2wgKi8KICNkZWZpbmUgU0xDUl9SRUJPT1RfU1RBVFVTX09GRlNFVAkweDI1OCAvKiBQUyBSZWJvb3QgU3RhdHVzICovCisjZGVmaW5lIFNMQ1JfUFNTX0lEQ09ERQkJCTB4NTMwIC8qIFBTIElEQ09ERSAqLwogCiAjZGVmaW5lIFNMQ1JfVU5MT0NLX01BR0lDCQkweERGMEQKICNkZWZpbmUgU0xDUl9BOV9DUFVfQ0xLU1RPUAkJMHgxMAogI2RlZmluZSBTTENSX0E5X0NQVV9SU1QJCQkweDEKKyNkZWZpbmUgU0xDUl9QU1NfSURDT0RFX0RFVklDRV9TSElGVAkxMgorI2RlZmluZSBTTENSX1BTU19JRENPREVfREVWSUNFX01BU0sJMHgxRgogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICp6eW5xX3NsY3JfYmFzZTsKIHN0YXRpYyBzdHJ1Y3QgcmVnbWFwICp6eW5xX3NsY3JfcmVnbWFwOwpAQCAtODMsNiArODYsMjIgQEAKIH0KIAogLyoqCisgKiB6eW5xX3NsY3JfZ2V0X2RldmljZV9pZCAtIFJlYWQgZGV2aWNlIGNvZGUgaWQKKyAqCisgKiBSZXR1cm46CURldmljZSBjb2RlIGlkCisgKi8KK3UzMiB6eW5xX3NsY3JfZ2V0X2RldmljZV9pZCh2b2lkKQoreworCXUzMiB2YWw7CisKKwl6eW5xX3NsY3JfcmVhZCgmdmFsLCBTTENSX1BTU19JRENPREUpOworCXZhbCA+Pj0gU0xDUl9QU1NfSURDT0RFX0RFVklDRV9TSElGVDsKKwl2YWwgJj0gU0xDUl9QU1NfSURDT0RFX0RFVklDRV9NQVNLOworCisJcmV0dXJuIHZhbDsKK30KKworLyoqCiAgKiB6eW5xX3NsY3Jfc3lzdGVtX3Jlc2V0IC0gUmVzZXQgdGhlIGVudGlyZSBzeXN0ZW0uCiAgKi8KIHZvaWQgenlucV9zbGNyX3N5c3RlbV9yZXNldCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggNmIwMGJlMS4uNWJlZjg1ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJaWYgKCFwYWdlcykKIAkJZ290byBub19wYWdlczsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ01BKSkKKwlpZiAoZGV2X2dldF9jbWFfYXJlYShOVUxMKSkKIAkJcHRyID0gX19hbGxvY19mcm9tX2NvbnRpZ3VvdXMoTlVMTCwgcG9vbC0+c2l6ZSwgcHJvdCwgJnBhZ2UsCiAJCQkJCSAgICAgIGF0b21pY19wb29sX2luaXQpOwogCWVsc2UKQEAgLTcwMSw3ICs3MDEsNyBAQAogCQlhZGRyID0gX19hbGxvY19zaW1wbGVfYnVmZmVyKGRldiwgc2l6ZSwgZ2ZwLCAmcGFnZSk7CiAJZWxzZSBpZiAoIShnZnAgJiBfX0dGUF9XQUlUKSkKIAkJYWRkciA9IF9fYWxsb2NfZnJvbV9wb29sKHNpemUsICZwYWdlKTsKLQllbHNlIGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX0NNQSkpCisJZWxzZSBpZiAoIWRldl9nZXRfY21hX2FyZWEoZGV2KSkKIAkJYWRkciA9IF9fYWxsb2NfcmVtYXBfYnVmZmVyKGRldiwgc2l6ZSwgZ2ZwLCBwcm90LCAmcGFnZSwgY2FsbGVyKTsKIAllbHNlCiAJCWFkZHIgPSBfX2FsbG9jX2Zyb21fY29udGlndW91cyhkZXYsIHNpemUsIHByb3QsICZwYWdlLCBjYWxsZXIpOwpAQCAtNzkwLDcgKzc5MCw3IEBACiAJCV9fZG1hX2ZyZWVfYnVmZmVyKHBhZ2UsIHNpemUpOwogCX0gZWxzZSBpZiAoX19mcmVlX2Zyb21fcG9vbChjcHVfYWRkciwgc2l6ZSkpIHsKIAkJcmV0dXJuOwotCX0gZWxzZSBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9DTUEpKSB7CisJfSBlbHNlIGlmICghZGV2X2dldF9jbWFfYXJlYShkZXYpKSB7CiAJCV9fZG1hX2ZyZWVfcmVtYXAoY3B1X2FkZHIsIHNpemUpOwogCQlfX2RtYV9mcmVlX2J1ZmZlcihwYWdlLCBzaXplKTsKIAl9IGVsc2UgewpAQCAtMTA3NCw2ICsxMDc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAJdW5zaWduZWQgaW50IGFsaWduID0gMDsKIAl1bnNpZ25lZCBpbnQgY291bnQsIHN0YXJ0OworCXNpemVfdCBtYXBwaW5nX3NpemUgPSBtYXBwaW5nLT5iaXRzIDw8IFBBR0VfU0hJRlQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlkbWFfYWRkcl90IGlvdmE7CiAJaW50IGk7CkBAIC0xMTE5LDcgKzExMjAsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXBwaW5nLT5sb2NrLCBmbGFncyk7CiAKLQlpb3ZhID0gbWFwcGluZy0+YmFzZSArIChtYXBwaW5nLT5zaXplICogaSk7CisJaW92YSA9IG1hcHBpbmctPmJhc2UgKyAobWFwcGluZ19zaXplICogaSk7CiAJaW92YSArPSBzdGFydCA8PCBQQUdFX1NISUZUOwogCiAJcmV0dXJuIGlvdmE7CkBAIC0xMTI5LDYgKzExMzAsNyBAQAogCQkJICAgICAgIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgaW50IHN0YXJ0LCBjb3VudDsKKwlzaXplX3QgbWFwcGluZ19zaXplID0gbWFwcGluZy0+Yml0cyA8PCBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZG1hX2FkZHJfdCBiaXRtYXBfYmFzZTsKIAl1MzIgYml0bWFwX2luZGV4OwpAQCAtMTEzNiwxNCArMTEzOCwxNCBAQAogCWlmICghc2l6ZSkKIAkJcmV0dXJuOwogCi0JYml0bWFwX2luZGV4ID0gKHUzMikgKGFkZHIgLSBtYXBwaW5nLT5iYXNlKSAvICh1MzIpIG1hcHBpbmctPnNpemU7CisJYml0bWFwX2luZGV4ID0gKHUzMikgKGFkZHIgLSBtYXBwaW5nLT5iYXNlKSAvICh1MzIpIG1hcHBpbmdfc2l6ZTsKIAlCVUdfT04oYWRkciA8IG1hcHBpbmctPmJhc2UgfHwgYml0bWFwX2luZGV4ID4gbWFwcGluZy0+ZXh0ZW5zaW9ucyk7CiAKLQliaXRtYXBfYmFzZSA9IG1hcHBpbmctPmJhc2UgKyBtYXBwaW5nLT5zaXplICogYml0bWFwX2luZGV4OworCWJpdG1hcF9iYXNlID0gbWFwcGluZy0+YmFzZSArIG1hcHBpbmdfc2l6ZSAqIGJpdG1hcF9pbmRleDsKIAogCXN0YXJ0ID0gKGFkZHIgLSBiaXRtYXBfYmFzZSkgPj4JUEFHRV9TSElGVDsKIAotCWlmIChhZGRyICsgc2l6ZSA+IGJpdG1hcF9iYXNlICsgbWFwcGluZy0+c2l6ZSkgeworCWlmIChhZGRyICsgc2l6ZSA+IGJpdG1hcF9iYXNlICsgbWFwcGluZ19zaXplKSB7CiAJCS8qCiAJCSAqIFRoZSBhZGRyZXNzIHJhbmdlIHRvIGJlIGZyZWVkIHJlYWNoZXMgaW50byB0aGUgaW92YQogCQkgKiByYW5nZSBvZiB0aGUgbmV4dCBiaXRtYXAuIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYXMKQEAgLTE5NjQsNyArMTk2Niw2IEBACiAJbWFwcGluZy0+ZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CiAJbWFwcGluZy0+YmFzZSA9IGJhc2U7CiAJbWFwcGluZy0+Yml0cyA9IEJJVFNfUEVSX0JZVEUgKiBiaXRtYXBfc2l6ZTsKLQltYXBwaW5nLT5zaXplID0gbWFwcGluZy0+Yml0cyA8PCBQQUdFX1NISUZUOwogCiAJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPmxvY2spOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCmluZGV4IDM4NGE3NzZkLi42MWI0ZDcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYwpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdTY0IG5vdHJhY2Ugb21hcF8zMmtfcmVhZF9zY2hlZF9jbG9jayh2b2lkKQogewotCXJldHVybiBzeW5jMzJrX2NudF9yZWcgPyBfX3Jhd19yZWFkbChzeW5jMzJrX2NudF9yZWcpIDogMDsKKwlyZXR1cm4gc3luYzMya19jbnRfcmVnID8gcmVhZGxfcmVsYXhlZChzeW5jMzJrX2NudF9yZWcpIDogMDsKIH0KIAogLyoqCkBAIC02NCw3ICs2NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJlYWRfcGVyc2lzdGVudF9jbG9ja19sb2NrLCBmbGFncyk7CiAKIAlsYXN0X2N5Y2xlcyA9IGN5Y2xlczsKLQljeWNsZXMgPSBzeW5jMzJrX2NudF9yZWcgPyBfX3Jhd19yZWFkbChzeW5jMzJrX2NudF9yZWcpIDogMDsKKwljeWNsZXMgPSBzeW5jMzJrX2NudF9yZWcgPyByZWFkbF9yZWxheGVkKHN5bmMzMmtfY250X3JlZykgOiAwOwogCiAJbnNlY3MgPSBjbG9ja3NvdXJjZV9jeWMybnMoY3ljbGVzIC0gbGFzdF9jeWNsZXMsCiAJCQkJCXBlcnNpc3RlbnRfbXVsdCwgcGVyc2lzdGVudF9zaGlmdCk7CkBAIC05NSw3ICs5NSw3IEBACiAJICogVGhlICdTQ0hFTUUnIGJpdHMoMzAtMzEpIG9mIHRoZSByZXZpc2lvbiByZWdpc3RlciBpcyB1c2VkCiAJICogdG8gaWRlbnRpZnkgdGhlIHZlcnNpb24uCiAJICovCi0JaWYgKF9fcmF3X3JlYWRsKHZiYXNlICsgT01BUDJfMzJLU1lOQ05UX1JFVl9PRkYpICYKKwlpZiAocmVhZGxfcmVsYXhlZCh2YmFzZSArIE9NQVAyXzMyS1NZTkNOVF9SRVZfT0ZGKSAmCiAJCQkJCQlPTUFQMl8zMktTWU5DTlRfUkVWX1NDSEVNRSkKIAkJc3luYzMya19jbnRfcmVnID0gdmJhc2UgKyBPTUFQMl8zMktTWU5DTlRfQ1JfT0ZGX0hJR0g7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKaW5kZXggYWE3ZWJjNi4uNDhiNjlkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jCkBAIC04NSwxMiArODUsMTIgQEAKIAlzdHJ1Y3QgZGJnX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBkYmdfbGVkLCBjZGV2KTsKIAl1MTYgcmVnOwogCi0JcmVnID0gX19yYXdfcmVhZHcoJmZwZ2EtPmxlZHMpOworCXJlZyA9IHJlYWR3X3JlbGF4ZWQoJmZwZ2EtPmxlZHMpOwogCWlmIChiICE9IExFRF9PRkYpCiAJCXJlZyB8PSBsZWQtPm1hc2s7CiAJZWxzZQogCQlyZWcgJj0gfmxlZC0+bWFzazsKLQlfX3Jhd193cml0ZXcocmVnLCAmZnBnYS0+bGVkcyk7CisJd3JpdGV3X3JlbGF4ZWQocmVnLCAmZnBnYS0+bGVkcyk7CiB9CiAKIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGRiZ19sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCkBAIC05OCw3ICs5OCw3IEBACiAJc3RydWN0IGRiZ19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgZGJnX2xlZCwgY2Rldik7CiAJdTE2IHJlZzsKIAotCXJlZyA9IF9fcmF3X3JlYWR3KCZmcGdhLT5sZWRzKTsKKwlyZWcgPSByZWFkd19yZWxheGVkKCZmcGdhLT5sZWRzKTsKIAlyZXR1cm4gKHJlZyAmIGxlZC0+bWFzaykgPyBMRURfRlVMTCA6IExFRF9PRkY7CiB9CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWZwZ2EgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwotCV9fcmF3X3dyaXRldygweGZmLCAmZnBnYS0+bGVkcyk7CisJd3JpdGV3X3JlbGF4ZWQoMHhmZiwgJmZwZ2EtPmxlZHMpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGJnX2xlZHMpOyBpKyspIHsKIAkJc3RydWN0IGRiZ19sZWQgKmxlZDsKQEAgLTEzOCwxNSArMTM4LDE1IEBACiAKIHN0YXRpYyBpbnQgZnBnYV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlmcGdhX2xlZF9zdGF0ZSA9IF9fcmF3X3JlYWR3KCZmcGdhLT5sZWRzKTsKLQlfX3Jhd193cml0ZXcoMHhmZiwgJmZwZ2EtPmxlZHMpOworCWZwZ2FfbGVkX3N0YXRlID0gcmVhZHdfcmVsYXhlZCgmZnBnYS0+bGVkcyk7CisJd3JpdGV3X3JlbGF4ZWQoMHhmZiwgJmZwZ2EtPmxlZHMpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZnBnYV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCV9fcmF3X3dyaXRldyh+ZnBnYV9sZWRfc3RhdGUsICZmcGdhLT5sZWRzKTsKKwl3cml0ZXdfcmVsYXhlZCh+ZnBnYV9sZWRfc3RhdGUsICZmcGdhLT5sZWRzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKaW5kZXggODY5MjU0Yy4uZGIxMDE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJCQl0aW1lci0+Y29udGV4dC50bWFyKTsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9JRl9DVFJMX1JFRywKIAkJCQl0aW1lci0+Y29udGV4dC50c2ljcik7Ci0JX19yYXdfd3JpdGVsKHRpbWVyLT5jb250ZXh0LnRpZXIsIHRpbWVyLT5pcnFfZW5hKTsKKwl3cml0ZWxfcmVsYXhlZCh0aW1lci0+Y29udGV4dC50aWVyLCB0aW1lci0+aXJxX2VuYSk7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsCiAJCQkJdGltZXItPmNvbnRleHQudGNscik7CiB9CkBAIC02OTksOSArNjk5LDkgQEAKIAlvbWFwX2RtX3RpbWVyX2VuYWJsZSh0aW1lcik7CiAKIAlpZiAodGltZXItPnJldmlzaW9uID09IDEpCi0JCWwgPSBfX3Jhd19yZWFkbCh0aW1lci0+aXJxX2VuYSkgJiB+bWFzazsKKwkJbCA9IHJlYWRsX3JlbGF4ZWQodGltZXItPmlycV9lbmEpICYgfm1hc2s7CiAKLQlfX3Jhd193cml0ZWwobCwgdGltZXItPmlycV9kaXMpOworCXdyaXRlbF9yZWxheGVkKGwsIHRpbWVyLT5pcnFfZGlzKTsKIAlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9XQUtFVVBfRU5fUkVHKSAmIH5tYXNrOwogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1dBS0VVUF9FTl9SRUcsIGwpOwogCkBAIC03MjIsNyArNzIyLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbCA9IF9fcmF3X3JlYWRsKHRpbWVyLT5pcnFfc3RhdCk7CisJbCA9IHJlYWRsX3JlbGF4ZWQodGltZXItPmlycV9zdGF0KTsKIAogCXJldHVybiBsOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbXRpbWVyLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtdGltZXIuaAppbmRleCAyODYxYjE1Li5kZDc5ZjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtdGltZXIuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtdGltZXIuaApAQCAtMjgwLDIwICsyODAsMjAgQEAKIAkJCQkJCWludCBwb3N0ZWQpCiB7CiAJaWYgKHBvc3RlZCkKLQkJd2hpbGUgKF9fcmF3X3JlYWRsKHRpbWVyLT5wZW5kKSAmIChyZWcgPj4gV1BTSElGVCkpCisJCXdoaWxlIChyZWFkbF9yZWxheGVkKHRpbWVyLT5wZW5kKSAmIChyZWcgPj4gV1BTSElGVCkpCiAJCQljcHVfcmVsYXgoKTsKIAotCXJldHVybiBfX3Jhd19yZWFkbCh0aW1lci0+ZnVuY19iYXNlICsgKHJlZyAmIDB4ZmYpKTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZCh0aW1lci0+ZnVuY19iYXNlICsgKHJlZyAmIDB4ZmYpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fb21hcF9kbV90aW1lcl93cml0ZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsCiAJCQkJCXUzMiByZWcsIHUzMiB2YWwsIGludCBwb3N0ZWQpCiB7CiAJaWYgKHBvc3RlZCkKLQkJd2hpbGUgKF9fcmF3X3JlYWRsKHRpbWVyLT5wZW5kKSAmIChyZWcgPj4gV1BTSElGVCkpCisJCXdoaWxlIChyZWFkbF9yZWxheGVkKHRpbWVyLT5wZW5kKSAmIChyZWcgPj4gV1BTSElGVCkpCiAJCQljcHVfcmVsYXgoKTsKIAotCV9fcmF3X3dyaXRlbCh2YWwsIHRpbWVyLT5mdW5jX2Jhc2UgKyAocmVnICYgMHhmZikpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgdGltZXItPmZ1bmNfYmFzZSArIChyZWcgJiAweGZmKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX29tYXBfZG1fdGltZXJfaW5pdF9yZWdzKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKQEAgLTMwMSw3ICszMDEsNyBAQAogCXUzMiB0aWRyOwogCiAJLyogQXNzdW1lIHYxIGlwIGlmIGJpdHMgWzMxOjE2XSBhcmUgemVybyAqLwotCXRpZHIgPSBfX3Jhd19yZWFkbCh0aW1lci0+aW9fYmFzZSk7CisJdGlkciA9IHJlYWRsX3JlbGF4ZWQodGltZXItPmlvX2Jhc2UpOwogCWlmICghKHRpZHIgPj4gMTYpKSB7CiAJCXRpbWVyLT5yZXZpc2lvbiA9IDE7CiAJCXRpbWVyLT5pcnFfc3RhdCA9IHRpbWVyLT5pb19iYXNlICsgT01BUF9USU1FUl9WMV9TVEFUX09GRlNFVDsKQEAgLTM4NSw3ICszODUsNyBAQAogCX0KIAogCS8qIEFjayBwb3NzaWJseSBwZW5kaW5nIGludGVycnVwdCAqLwotCV9fcmF3X3dyaXRlbChPTUFQX1RJTUVSX0lOVF9PVkVSRkxPVywgdGltZXItPmlycV9zdGF0KTsKKwl3cml0ZWxfcmVsYXhlZChPTUFQX1RJTUVSX0lOVF9PVkVSRkxPVywgdGltZXItPmlycV9zdGF0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fb21hcF9kbV90aW1lcl9sb2FkX3N0YXJ0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwKQEAgLTM5OSw3ICszOTksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fb21hcF9kbV90aW1lcl9pbnRfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwKIAkJCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKIHsKLQlfX3Jhd193cml0ZWwodmFsdWUsIHRpbWVyLT5pcnFfZW5hKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWx1ZSwgdGltZXItPmlycV9lbmEpOwogCV9fb21hcF9kbV90aW1lcl93cml0ZSh0aW1lciwgT01BUF9USU1FUl9XQUtFVVBfRU5fUkVHLCB2YWx1ZSwgMCk7CiB9CiAKQEAgLTQxMiw3ICs0MTIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLAogCQkJCQkJdW5zaWduZWQgaW50IHZhbHVlKQogewotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgdGltZXItPmlycV9zdGF0KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWx1ZSwgdGltZXItPmlycV9zdGF0KTsKIH0KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCmluZGV4IDY4MTYxOTIuLmI2MWEzYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCkBAIC01OTcsNTEgKzU5NywzIEBACiAKIAlvcmlvbl9ncGlvX2NoaXBfY291bnQrKzsKIH0KLQotI2lmZGVmIENPTkZJR19PRgotc3RhdGljIHZvaWQgX19pbml0IG9yaW9uX2dwaW9fb2ZfaW5pdF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJICBpbnQgaXJxX2dwaW9fYmFzZSkKLXsKLQlpbnQgbmdwaW8sIGdwaW9fYmFzZSwgbWFza19vZmZzZXQ7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCWludCByZXQsIGk7Ci0JaW50IGlycXNbNF07Ci0JaW50IHNlY29uZGFyeV9pcnFfYmFzZTsKLQotCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibmdwaW8iLCAmbmdwaW8pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWFzay1vZmZzZXQiLCAmbWFza19vZmZzZXQpOwotCWlmIChyZXQgPT0gLUVJTlZBTCkKLQkJbWFza19vZmZzZXQgPSAwOwotCWVsc2UKLQkJZ290byBvdXQ7Ci0JYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKLQlpZiAoIWJhc2UpCi0JCWdvdG8gb3V0OwotCi0Jc2Vjb25kYXJ5X2lycV9iYXNlID0gaXJxX2dwaW9fYmFzZSArICgzMiAqIG9yaW9uX2dwaW9fY2hpcF9jb3VudCk7Ci0JZ3Bpb19iYXNlID0gMzIgKiBvcmlvbl9ncGlvX2NoaXBfY291bnQ7Ci0KLQkvKiBHZXQgdGhlIGludGVycnVwdCBudW1iZXJzLiBFYWNoIGNoaXAgY2FuIGhhdmUgdXAgdG8gNAotCSAqIGludGVycnVwdCBoYW5kbGVycywgd2l0aCBlYWNoIGhhbmRsZXIgZGVhbGluZyB3aXRoIDggR1BJTwotCSAqIHBpbnMuICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlpcnFzW2ldID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIGkpOwotCi0Jb3Jpb25fZ3Bpb19pbml0KG5wLCBncGlvX2Jhc2UsIG5ncGlvLCBiYXNlLCBtYXNrX29mZnNldCwKLQkJCXNlY29uZGFyeV9pcnFfYmFzZSwgaXJxcyk7Ci0JcmV0dXJuOwotb3V0OgotCXByX2VycigiJXM6ICVzOiBtaXNzaW5nIG1hbmRhdG9yeSBwcm9wZXJ0eVxuIiwgX19mdW5jX18sIG5wLT5uYW1lKTsKLX0KLQotdm9pZCBfX2luaXQgb3Jpb25fZ3Bpb19vZl9pbml0KGludCBpcnFfZ3Bpb19iYXNlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJtYXJ2ZWxsLG9yaW9uLWdwaW8iKQotCQlvcmlvbl9ncGlvX29mX2luaXRfb25lKG5wLCBpcnFfZ3Bpb19iYXNlKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvaXJxLmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9pcnEuaAppbmRleCA1MDU0N2U0Li45NmJlMTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9pcnEuaAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9pcnEuaApAQCAtMTIsNSArMTIsNCBAQAogI2RlZmluZSBfX1BMQVRfSVJRX0gKIAogdm9pZCBvcmlvbl9pcnFfaW5pdCh1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LCB2b2lkIF9faW9tZW0gKm1hc2thZGRyKTsKLXZvaWQgX19pbml0IG9yaW9uX2R0X2luaXRfaXJxKHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbi1ncGlvLmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbi1ncGlvLmgKaW5kZXggNjE0ZGNhYy4uZTc2Mzk4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb24tZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uLWdwaW8uaApAQCAtMzMsNSArMzMsNCBAQAogCQkJICAgIGludCBzZWNvbmRhcnlfaXJxX2Jhc2UsCiAJCQkgICAgaW50IGlycVs0XSk7CiAKLXZvaWQgX19pbml0IG9yaW9uX2dwaW9fb2ZfaW5pdChpbnQgaXJxX2dwaW9fYmFzZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaXJxLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2lycS5jCmluZGV4IDgwN2RmMTQyLi44YzFmYzA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaXJxLmMKQEAgLTIwLDQ3ICsyMCw2IEBACiAjaW5jbHVkZSA8cGxhdC9vcmlvbi1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgogCi0jaWZkZWYgQ09ORklHX01VTFRJX0lSUV9IQU5ETEVSCi0vKgotICogQ29tcGlsaW5nIHdpdGggYm90aCBub24tRFQgYW5kIERUIHN1cHBvcnQgZW5hYmxlZCwgd2lsbAotICogYnJlYWsgYXNtIGlycSBoYW5kbGVyIHVzZWQgYnkgbm9uLURUIGJvYXJkcy4gVGhlcmVmb3JlLAotICogd2UgcHJvdmlkZSBhIEMtc3R5bGUgaXJxIGhhbmRsZXIgZXZlbiBmb3Igbm9uLURUIGJvYXJkcywKLSAqIGlmIE1VTFRJX0lSUV9IQU5ETEVSIGlzIHNldC4KLSAqCi0gKiBOb3RlczoKLSAqIC0gdGhpcyBpcyBwcmVwYXJlZCBmb3IgS2lya3dvb2QgYW5kIERvdmUgb25seSwgdXBkYXRlCi0gKiAgIGFjY29yZGluZ2x5IGlmIHlvdSBhZGQgT3Jpb241eCBvciBNVjc4eDAwLgotICogLSBPcmlvbjV4IHVzZXMgZGlmZmVyZW50IG1hY3JvIG5hbWVzIGFuZCBoYXMgb25seSBvbmUKLSAqICAgc2V0IG9mIENBVVNFL01BU0sgcmVnaXN0ZXJzLgotICogLSBNVjc4eDAwIHVzZXMgdGhlIHNhbWUgbWFjcm8gbmFtZXMgYnV0IGhhcyBhIHRoaXJkCi0gKiAgIHNldCBvZiBDQVVTRS9NQVNLIHJlZ2lzdGVycy4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgX19pb21lbSAqb3Jpb25faXJxX2Jhc2UgPSBJUlFfVklSVF9CQVNFOwotCi1hc21saW5rYWdlIHZvaWQKLV9fZXhjZXB0aW9uX2lycV9lbnRyeSBvcmlvbl9sZWdhY3lfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1MzIgc3RhdDsKLQotCXN0YXQgPSByZWFkbF9yZWxheGVkKG9yaW9uX2lycV9iYXNlICsgSVJRX0NBVVNFX0xPV19PRkYpOwotCXN0YXQgJj0gcmVhZGxfcmVsYXhlZChvcmlvbl9pcnFfYmFzZSArIElSUV9NQVNLX0xPV19PRkYpOwotCWlmIChzdGF0KSB7Ci0JCXVuc2lnbmVkIGludCBod2lycSA9IF9fZmxzKHN0YXQpOwotCQloYW5kbGVfSVJRKGh3aXJxLCByZWdzKTsKLQkJcmV0dXJuOwotCX0KLQlzdGF0ID0gcmVhZGxfcmVsYXhlZChvcmlvbl9pcnFfYmFzZSArIElSUV9DQVVTRV9ISUdIX09GRik7Ci0Jc3RhdCAmPSByZWFkbF9yZWxheGVkKG9yaW9uX2lycV9iYXNlICsgSVJRX01BU0tfSElHSF9PRkYpOwotCWlmIChzdGF0KSB7Ci0JCXVuc2lnbmVkIGludCBod2lycSA9IDMyICsgX19mbHMoc3RhdCk7Ci0JCWhhbmRsZV9JUlEoaHdpcnEsIHJlZ3MpOwotCQlyZXR1cm47Ci0JfQotfQotI2VuZGlmCi0KIHZvaWQgX19pbml0IG9yaW9uX2lycV9pbml0KHVuc2lnbmVkIGludCBpcnFfc3RhcnQsIHZvaWQgX19pb21lbSAqbWFza2FkZHIpCiB7CiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjOwpAQCAtNzgsNDAgKzM3LDQgQEAKIAljdC0+Y2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKIAlpcnFfc2V0dXBfZ2VuZXJpY19jaGlwKGdjLCBJUlFfTVNLKDMyKSwgSVJRX0dDX0lOSVRfTUFTS19DQUNIRSwKIAkJCSAgICAgICBJUlFfTk9SRVFVRVNULCBJUlFfTEVWRUwgfCBJUlFfTk9QUk9CRSk7Ci0KLSNpZmRlZiBDT05GSUdfTVVMVElfSVJRX0hBTkRMRVIKLQlzZXRfaGFuZGxlX2lycShvcmlvbl9sZWdhY3lfaGFuZGxlX2lycSk7Ci0jZW5kaWYKIH0KLQotI2lmZGVmIENPTkZJR19PRgotc3RhdGljIGludCBfX2luaXQgb3Jpb25fYWRkX2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICppbnRlcnJ1cHRfcGFyZW50KQotewotCWludCBpID0gMDsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0KLQlkbyB7Ci0JCWJhc2UgPSBvZl9pb21hcChucCwgaSk7Ci0JCWlmIChiYXNlKSB7Ci0JCQlvcmlvbl9pcnFfaW5pdChpICogMzIsIGJhc2UgKyAweDA0KTsKLQkJCWkrKzsKLQkJfQotCX0gd2hpbGUgKGJhc2UpOwotCi0JaXJxX2RvbWFpbl9hZGRfbGVnYWN5KG5wLCBpICogMzIsIDAsIDAsCi0JCQkgICAgICAmaXJxX2RvbWFpbl9zaW1wbGVfb3BzLCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3Jpb25faXJxX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWludGMiLAotCSAgLmRhdGEgPSBvcmlvbl9hZGRfaXJxX2RvbWFpbiwgfSwKLQl7fSwKLX07Ci0KLXZvaWQgX19pbml0IG9yaW9uX2R0X2luaXRfaXJxKHZvaWQpCi17Ci0Jb2ZfaXJxX2luaXQob3Jpb25faXJxX21hdGNoKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCmluZGV4IDI1YzgyNmUuLjVlNWJlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKQEAgLTQsNiArNCw5IEBACiAjCiAjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCiAKK2NjZmxhZ3MtJChDT05GSUdfQVJDSF9NVUxUSV9WNykgKz0gLUkkKHNyY3RyZWUpLyQoc3JjKS9pbmNsdWRlCitjY2ZsYWdzLSQoQ09ORklHX0FSQ0hfRVhZTk9TKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZQorCiBvYmoteQkJCQk6PQogb2JqLW0JCQkJOj0KIG9iai1uCQkJCTo9IGR1bW15Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKaW5kZXggNzIzMWM4ZS4uNzJkNDE3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKQEAgLTExOSw2ICsxMTksNyBAQAogc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyB7CiAJc3RydWN0IHMzY19mcmVxCQlmcmVxOwogCXN0cnVjdCBzM2NfZnJlcQkJbWF4OworCXN0cnVjdCBjbGsJCSptcGxsOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBwbGw7CiAJc3RydWN0IHMzY19jbGtkaXZzCWRpdnM7CiAJc3RydWN0IHMzY19jcHVmcmVxX2luZm8gKmluZm87CS8qIGZvciBjb3JlLCBub3QgZHJpdmVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LmgKaW5kZXggNTk5MmI4ZC4uNWEyMzdkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oCkBAIC00MywxNiArNDMsNiBAQAogI2RlZmluZSBTNVBWMjEwX0NQVV9JRAkJMHg0MzExMDAwMAogI2RlZmluZSBTNVBWMjEwX0NQVV9NQVNLCTB4RkZGRkYwMDAKIAotI2RlZmluZSBFWFlOT1M0MjEwX0NQVV9JRAkweDQzMjEwMDAwCi0jZGVmaW5lIEVYWU5PUzQyMTJfQ1BVX0lECTB4NDMyMjAwMDAKLSNkZWZpbmUgRVhZTk9TNDQxMl9DUFVfSUQJMHhFNDQxMjIwMAotI2RlZmluZSBFWFlOT1M0X0NQVV9NQVNLCTB4RkZGRTAwMDAKLQotI2RlZmluZSBFWFlOT1M1MjUwX1NPQ19JRAkweDQzNTIwMDAwCi0jZGVmaW5lIEVYWU5PUzU0MjBfU09DX0lECTB4RTU0MjAwMDAKLSNkZWZpbmUgRVhZTk9TNTQ0MF9TT0NfSUQJMHhFNTQ0MDAwMAotI2RlZmluZSBFWFlOT1M1X1NPQ19NQVNLCTB4RkZGRkYwMDAKLQogI2RlZmluZSBJU19TQU1TVU5HX0NQVShuYW1lLCBpZCwgbWFzaykJCVwKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3NhbXN1bmdfIyNuYW1lKHZvaWQpCVwKIHsJCQkJCQlcCkBAIC02OCwxMiArNTgsNiBAQAogSVNfU0FNU1VOR19DUFUoczVwNjQ1MCwgUzVQNjQ1MF9DUFVfSUQsIFM1UDY0WFhfQ1BVX01BU0spCiBJU19TQU1TVU5HX0NQVShzNXBjMTAwLCBTNVBDMTAwX0NQVV9JRCwgUzVQQzEwMF9DUFVfTUFTSykKIElTX1NBTVNVTkdfQ1BVKHM1cHYyMTAsIFM1UFYyMTBfQ1BVX0lELCBTNVBWMjEwX0NQVV9NQVNLKQotSVNfU0FNU1VOR19DUFUoZXh5bm9zNDIxMCwgRVhZTk9TNDIxMF9DUFVfSUQsIEVYWU5PUzRfQ1BVX01BU0spCi1JU19TQU1TVU5HX0NQVShleHlub3M0MjEyLCBFWFlOT1M0MjEyX0NQVV9JRCwgRVhZTk9TNF9DUFVfTUFTSykKLUlTX1NBTVNVTkdfQ1BVKGV4eW5vczQ0MTIsIEVYWU5PUzQ0MTJfQ1BVX0lELCBFWFlOT1M0X0NQVV9NQVNLKQotSVNfU0FNU1VOR19DUFUoZXh5bm9zNTI1MCwgRVhZTk9TNTI1MF9TT0NfSUQsIEVYWU5PUzVfU09DX01BU0spCi1JU19TQU1TVU5HX0NQVShleHlub3M1NDIwLCBFWFlOT1M1NDIwX1NPQ19JRCwgRVhZTk9TNV9TT0NfTUFTSykKLUlTX1NBTVNVTkdfQ1BVKGV4eW5vczU0NDAsIEVYWU5PUzU0NDBfU09DX0lELCBFWFlOT1M1X1NPQ19NQVNLKQogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEyKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTYpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBcCkBAIC0xMjYsNTAgKzExMCw2IEBACiAjIGRlZmluZSBzb2NfaXNfczVwdjIxMCgpCTAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0VYWU5PUzQyMTApCi0jIGRlZmluZSBzb2NfaXNfZXh5bm9zNDIxMCgpCWlzX3NhbXN1bmdfZXh5bm9zNDIxMCgpCi0jZWxzZQotIyBkZWZpbmUgc29jX2lzX2V4eW5vczQyMTAoKQkwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1M0MjEyKQotIyBkZWZpbmUgc29jX2lzX2V4eW5vczQyMTIoKQlpc19zYW1zdW5nX2V4eW5vczQyMTIoKQotI2Vsc2UKLSMgZGVmaW5lIHNvY19pc19leHlub3M0MjEyKCkJMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TNDQxMikKLSMgZGVmaW5lIHNvY19pc19leHlub3M0NDEyKCkJaXNfc2Ftc3VuZ19leHlub3M0NDEyKCkKLSNlbHNlCi0jIGRlZmluZSBzb2NfaXNfZXh5bm9zNDQxMigpCTAKLSNlbmRpZgotCi0jZGVmaW5lIEVYWU5PUzQyMTBfUkVWXzAJKDB4MCkKLSNkZWZpbmUgRVhZTk9TNDIxMF9SRVZfMV8wCSgweDEwKQotI2RlZmluZSBFWFlOT1M0MjEwX1JFVl8xXzEJKDB4MTEpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfRVhZTk9TNTI1MCkKLSMgZGVmaW5lIHNvY19pc19leHlub3M1MjUwKCkJaXNfc2Ftc3VuZ19leHlub3M1MjUwKCkKLSNlbHNlCi0jIGRlZmluZSBzb2NfaXNfZXh5bm9zNTI1MCgpCTAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0VYWU5PUzU0MjApCi0jIGRlZmluZSBzb2NfaXNfZXh5bm9zNTQyMCgpCWlzX3NhbXN1bmdfZXh5bm9zNTQyMCgpCi0jZWxzZQotIyBkZWZpbmUgc29jX2lzX2V4eW5vczU0MjAoKQkwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19FWFlOT1M1NDQwKQotIyBkZWZpbmUgc29jX2lzX2V4eW5vczU0NDAoKQlpc19zYW1zdW5nX2V4eW5vczU0NDAoKQotI2Vsc2UKLSMgZGVmaW5lIHNvY19pc19leHlub3M1NDQwKCkJMAotI2VuZGlmCi0KLSNkZWZpbmUgc29jX2lzX2V4eW5vczQoKSAoc29jX2lzX2V4eW5vczQyMTAoKSB8fCBzb2NfaXNfZXh5bm9zNDIxMigpIHx8IFwKLQkJCSAgc29jX2lzX2V4eW5vczQ0MTIoKSkKLSNkZWZpbmUgc29jX2lzX2V4eW5vczUoKSAoc29jX2lzX2V4eW5vczUyNTAoKSB8fCBzb2NfaXNfZXh5bm9zNTQyMCgpKQotCiAjZGVmaW5lIElPREVTQ19FTlQoeCkgeyAodW5zaWduZWQgbG9uZylTM0MyNFhYX1ZBXyMjeCwgX19waHlzX3RvX3BmbihTM0MyNFhYX1BBXyMjeCksIFMzQzI0WFhfU1pfIyN4LCBNVF9ERVZJQ0UgfQogCiAjaWZuZGVmIEtIWgpAQCAtMjM5LDcgKzE3OSw2IEBACiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHMzYzY0MTBfc3Vic3lzOwogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzNXA2NHgwX3N1YnN5czsKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgczVwdjIxMF9zdWJzeXM7Ci1leHRlcm4gc3RydWN0IGJ1c190eXBlIGV4eW5vc19zdWJzeXM7CiAKIGV4dGVybiB2b2lkICgqczVwYzF4eF9pZGxlKSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL0tjb25maWcKaW5kZXggMmM0MzMyYi4uZmNlNDFlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9LY29uZmlnCkBAIC02LDEyICs2LDYgQEAKIGNvbmZpZyBQTEFUX1ZFUlNBVElMRV9DTENECiAJYm9vbAogCi1jb25maWcgUExBVF9WRVJTQVRJTEVfTEVEUwotCWRlZl9ib29sIHkgaWYgTkVXX0xFRFMKLQlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcgfHwgQVJDSF9WRVJTQVRJTEUKLQlzZWxlY3QgTEVEU19DTEFTUwotCXNlbGVjdCBMRURTX1RSSUdHRVJTCi0KIGNvbmZpZyBQTEFUX1ZFUlNBVElMRV9TQ0hFRF9DTE9DSwogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQppbmRleCBmODhkNDQ4Li4yZTBjNDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQpAQCAtMiw2ICsyLDUgQEAKIAogb2JqLSQoQ09ORklHX1BMQVRfVkVSU0FUSUxFX0NMT0NLKSArPSBjbG9jay5vCiBvYmotJChDT05GSUdfUExBVF9WRVJTQVRJTEVfQ0xDRCkgKz0gY2xjZC5vCi1vYmotJChDT05GSUdfUExBVF9WRVJTQVRJTEVfTEVEUykgKz0gbGVkcy5vCiBvYmotJChDT05GSUdfUExBVF9WRVJTQVRJTEVfU0NIRURfQ0xPQ0spICs9IHNjaGVkLWNsb2NrLm8KIG9iai0kKENPTkZJR19TTVApICs9IGhlYWRzbXAubyBwbGF0c21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBiOTY3MjNlLi4xZTYzMjQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jCkBAIC0zMzksNiArMzM5LDE0IEBACiB9CiBsYXRlX2luaXRjYWxsKHhlbl9wbV9pbml0KTsKIAorCisvKiBlbXB0eSBzdHVicyAqLwordm9pZCB4ZW5fYXJjaF9wcmVfc3VzcGVuZCh2b2lkKSB7IH0KK3ZvaWQgeGVuX2FyY2hfcG9zdF9zdXNwZW5kKGludCBzdXNwZW5kX2NhbmNlbGxlZCkgeyB9Cit2b2lkIHhlbl90aW1lcl9yZXN1bWUodm9pZCkgeyB9Cit2b2lkIHhlbl9hcmNoX3Jlc3VtZSh2b2lkKSB7IH0KKworCiAvKiBJbiB0aGUgaHlwZXJ2aXNvci5TIGZpbGUuICovCiBFWFBPUlRfU1lNQk9MX0dQTChIWVBFUlZJU09SX2V2ZW50X2NoYW5uZWxfb3ApOwogRVhQT1JUX1NZTUJPTF9HUEwoSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCk7CkBAIC0zNTAsNCArMzU4LDUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKEhZUEVSVklTT1JfcGh5c2Rldl9vcCk7CiBFWFBPUlRfU1lNQk9MX0dQTChIWVBFUlZJU09SX3ZjcHVfb3ApOwogRVhQT1JUX1NZTUJPTF9HUEwoSFlQRVJWSVNPUl90bWVtX29wKTsKK0VYUE9SVF9TWU1CT0xfR1BMKEhZUEVSVklTT1JfbXVsdGljYWxsKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHByaXZjbWRfY2FsbCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS94ZW4vaHlwZXJjYWxsLlMgYi9hcmNoL2FybS94ZW4vaHlwZXJjYWxsLlMKaW5kZXggZDFjZjdiNy4uNDRlM2E1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0veGVuL2h5cGVyY2FsbC5TCisrKyBiL2FyY2gvYXJtL3hlbi9oeXBlcmNhbGwuUwpAQCAtODksNiArODksNyBAQAogSFlQRVJDQUxMMihwaHlzZGV2X29wKTsKIEhZUEVSQ0FMTDModmNwdV9vcCk7CiBIWVBFUkNBTEwxKHRtZW1fb3ApOworSFlQRVJDQUxMMihtdWx0aWNhbGwpOwogCiBFTlRSWShwcml2Y21kX2NhbGwpCiAJc3RtZGIgc3AhLCB7cjR9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggZTc1OWFmNS4uZjVmNjNiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMTEyLDYgKzExMiw5IEBACiBjb25maWcgS0VSTkVMX01PREVfTkVPTgogCWRlZl9ib29sIHkKIAorY29uZmlnIEZJWF9FQVJMWUNPTl9NRU0KKwlkZWZfYm9vbCB5CisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcuZGVidWcgYi9hcmNoL2FybTY0L0tjb25maWcuZGVidWcKaW5kZXggZDEwZWMzMy4uMWMxYjc1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZy5kZWJ1ZwpAQCAtMjAsMTUgKzIwLDYgQEAKIAogCSAgSWYgaW4gZG91YnQsIHNheSBZLgogCi1jb25maWcgRUFSTFlfUFJJTlRLCi0JYm9vbCAiRWFybHkgcHJpbnRrIHN1cHBvcnQiCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIGFuIGVhcmx5IGNvbnNvbGUgdXNpbmcgdGhlCi0JICBlYXJseXByaW50az08bmFtZT5bLDxhZGRyPl1bLDxvcHRpb25zPl0ga2VybmVsIHBhcmFtZXRlci4gSXQKLQkgIGlzIGFzc3VtZWQgdGhhdCB0aGUgZWFybHkgY29uc29sZSBkZXZpY2UgaGFzIGJlZW4gaW5pdGlhbGlzZWQKLQkgIGJ5IHRoZSBib290IGxvYWRlciBwcmlvciB0byBzdGFydGluZyB0aGUgTGludXgga2VybmVsLgotCiBjb25maWcgUElEX0lOX0NPTlRFWFRJRFIKIAlib29sICJXcml0ZSB0aGUgY3VycmVudCBQSUQgdG8gdGhlIENPTlRFWFRJRFIgcmVnaXN0ZXIiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9ydHNtX3ZlLW1vdGhlcmJvYXJkLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtbW90aGVyYm9hcmQuZHRzaQppbmRleCAyZjJlY2QyMTcuLmFjMmNiMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcnRzbV92ZS1tb3RoZXJib2FyZC5kdHNpCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJfTsKIAogCQltY2MgewotCQkJY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3MsY29uZmlnLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLGNvbmZpZy1idXMiOwogCQkJYXJtLHZleHByZXNzLGNvbmZpZy1icmlkZ2UgPSA8JnYybV9zeXNyZWc+OwogCiAJCQl2Mm1fb3NjY2xrMTogb3NjQDEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggMDIzN2YwOC4uNTdlOGNiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xNTIsMTEgKzE1Miw2IEBACiAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShpLHYpIChhdG9taWNfYWRkX3JldHVybihpLCB2KSA8IDApCiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQotCiAvKgogICogNjQtYml0IGF0b21pYyBvcGVyYXRpb25zLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYmFycmllci5oCmluZGV4IDY2ZWI3NjQuLjQ4YjllNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC05OCw2ICs5OCw5IEBACiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKQlkbyB7IHZhciA9IHZhbHVlOyBzbXBfbWIoKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbm9wKCkJCWFzbSB2b2xhdGlsZSgibm9wIik7CiAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWMoKQlzbXBfbWIoKQorCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZgkvKiBfX0FTTV9CQVJSSUVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGFhNWI1OWQuLjljMTk1OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTcsMTcgKzE3LDggQEAKICNkZWZpbmUgX19BU01fQklUT1BTX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KICNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCi0vKgotICogY2xlYXJfYml0IG1heSBub3QgaW1wbHkgYSBtZW1vcnkgYmFycmllcgotICovCi0jaWZuZGVmIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9tYigpCi0jZW5kaWYKLQogI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKICNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1X29wcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVfb3BzLmgKaW5kZXggMTUyNDEzMDcuLmQ3YjRiMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1X29wcy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1X29wcy5oCkBAIC0zOSw2ICszOSw3IEBACiAgKiAJCWZyb20gdGhlIGNwdSB0byBiZSBraWxsZWQuCiAgKiBAY3B1X2RpZToJTWFrZXMgYSBjcHUgbGVhdmUgdGhlIGtlcm5lbC4gTXVzdCBub3QgZmFpbC4gQ2FsbGVkIGZyb20gdGhlCiAgKgkJY3B1IGJlaW5nIGtpbGxlZC4KKyAqIEBjcHVfa2lsbDogIEVuc3VyZXMgYSBjcHUgaGFzIGxlZnQgdGhlIGtlcm5lbC4gQ2FsbGVkIGZyb20gYW5vdGhlciBjcHUuCiAgKiBAY3B1X3N1c3BlbmQ6IFN1c3BlbmRzIGEgY3B1IGFuZCBzYXZlcyB0aGUgcmVxdWlyZWQgY29udGV4dC4gTWF5IGZhaWwgb3dpbmcKICAqICAgICAgICAgICAgICAgdG8gd3JvbmcgcGFyYW1ldGVycyBvciBlcnJvciBjb25kaXRpb25zLiBDYWxsZWQgZnJvbSB0aGUKICAqICAgICAgICAgICAgICAgQ1BVIGJlaW5nIHN1c3BlbmRlZC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLgpAQCAtNTIsNiArNTMsNyBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWludAkJKCpjcHVfZGlzYWJsZSkodW5zaWduZWQgaW50IGNwdSk7CiAJdm9pZAkJKCpjcHVfZGllKSh1bnNpZ25lZCBpbnQgY3B1KTsKKwlpbnQJCSgqY3B1X2tpbGwpKHVuc2lnbmVkIGludCBjcHUpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSTTY0X0NQVV9TVVNQRU5ECiAJaW50CQkoKmNwdV9zdXNwZW5kKSh1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKaW5kZXggYzQwNGZiMC4uMjdmNTRhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTQxLDYgKzQxLDcgQEAKIAogI2RlZmluZSBBUk1fQ1BVX1BBUlRfQUVNX1Y4CTB4RDBGMAogI2RlZmluZSBBUk1fQ1BVX1BBUlRfRk9VTkRBVElPTgkweEQwMDAKKyNkZWZpbmUgQVJNX0NQVV9QQVJUX0NPUlRFWF9BNTMJMHhEMDMwCiAjZGVmaW5lIEFSTV9DUFVfUEFSVF9DT1JURVhfQTU3CTB4RDA3MAogCiAjZGVmaW5lIEFQTV9DUFVfUEFSVF9QT1RFTlpBCTB4MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDBhMWQ2OTcuLjkyMjQyY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxrdm0vYXJtX3ZnaWMuaD4KICNpbmNsdWRlIDxrdm0vYXJtX2FyY2hfdGltZXIuaD4KIAotI2RlZmluZSBLVk1fVkNQVV9NQVhfRkVBVFVSRVMgMgorI2RlZmluZSBLVk1fVkNQVV9NQVhfRkVBVFVSRVMgMwogCiBzdHJ1Y3Qga3ZtX3ZjcHU7CiBpbnQga3ZtX3RhcmdldF9jcHUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wc2NpLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wc2NpLmgKaW5kZXggZTMwMWE0OC4uYmMzOWU1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcHNjaS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BzY2kuaApAQCAtMTgsNiArMTgsMTAgQEAKICNpZm5kZWYgX19BUk02NF9LVk1fUFNDSV9IX18KICNkZWZpbmUgX19BUk02NF9LVk1fUFNDSV9IX18KIAotYm9vbCBrdm1fcHNjaV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisjZGVmaW5lIEtWTV9BUk1fUFNDSV8wXzEJMQorI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yCTIKKworaW50IGt2bV9wc2NpX3ZlcnNpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fcHNjaV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9QU0NJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA3YjFjNjdhLi5lMmY5Njc0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDA2LDcgKzQwNiw3IEBACiAKIC8qCiAgKiBFbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm90IG1vcmUgc3dhcCBmaWxlcyB0aGFuIGNhbiBiZSBlbmNvZGVkIGluIHRoZSBrZXJuZWwKLSAqIHRoZSBQVEVzLgorICogUFRFcy4KICAqLwogI2RlZmluZSBNQVhfU1dBUEZJTEVTX0NIRUNLKCkgQlVJTERfQlVHX09OKE1BWF9TV0FQRklMRVNfU0hJRlQgPiBfX1NXUF9UWVBFX0JJVFMpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHNjaS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wc2NpLmgKaW5kZXggZDE1YWI4YjQuLmU1MzEyZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHNjaS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHNjaS5oCkBAIC0xNCw2ICsxNCw2IEBACiAjaWZuZGVmIF9fQVNNX1BTQ0lfSAogI2RlZmluZSBfX0FTTV9QU0NJX0gKIAotdm9pZCBwc2NpX2luaXQodm9pZCk7CitpbnQgcHNjaV9pbml0KHZvaWQpOwogCiAjZW5kaWYgLyogX19BU01fUFNDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNzIwZTcwYi4uN2I4ZTNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTUsMTMgKzk1LDExIEBACiAgKiAgVElGX05FRURfUkVTQ0hFRAktIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkKICAqICBUSUZfTk9USUZZX1JFU1VNRQktIGNhbGxiYWNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlcgogICogIFRJRl9VU0VERlBVCQktIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sgdGhpcyBxdWFudHVtIChTTVApCi0gKiAgVElGX1BPTExJTkdfTlJGTEFHCS0gdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQKICAqLwogI2RlZmluZSBUSUZfU0lHUEVORElORwkJMAogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTEKICNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMgkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJOAotI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTYKICNkZWZpbmUgVElGX01FTURJRQkJMTgJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkyMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IGVhZjU0YTMuLmU2MzNmZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgS1ZNX05SX1NQU1IJNQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3BzY2kuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKQEAgLTU2LDggKzU3LDkgQEAKICNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfRk9VTkRBVElPTl9WOAkxCiAjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX0NPUlRFWF9BNTcJMgogI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9YR0VORV9QT1RFTlpBCTMKKyNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfQ09SVEVYX0E1Mwk0CiAKLSNkZWZpbmUgS1ZNX0FSTV9OVU1fVEFSR0VUUwkJNAorI2RlZmluZSBLVk1fQVJNX05VTV9UQVJHRVRTCQk1CiAKIC8qIEtWTV9BUk1fU0VUX0RFVklDRV9BRERSIGlvY3RsIGlkIGVuY29kaW5nICovCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1RZUEVfU0hJRlQJMApAQCAtNzcsNiArNzksNyBAQAogCiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9QT1dFUl9PRkYJCTAgLyogQ1BVIGlzIHN0YXJ0ZWQgaW4gT0ZGIHN0YXRlICovCiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQJCTEgLyogQ1BVIHJ1bm5pbmcgYSAzMmJpdCBWTSAqLworI2RlZmluZSBLVk1fQVJNX1ZDUFVfUFNDSV8wXzIJCTIgLyogQ1BVIHVzZXMgUFNDSSB2MC4yICovCiAKIHN0cnVjdCBrdm1fdmNwdV9pbml0IHsKIAlfX3UzMiB0YXJnZXQ7CkBAIC0xODYsMTAgKzE4OSwxMCBAQAogI2RlZmluZSBLVk1fUFNDSV9GTl9DUFVfT04JCUtWTV9QU0NJX0ZOKDIpCiAjZGVmaW5lIEtWTV9QU0NJX0ZOX01JR1JBVEUJCUtWTV9QU0NJX0ZOKDMpCiAKLSNkZWZpbmUgS1ZNX1BTQ0lfUkVUX1NVQ0NFU1MJCTAKLSNkZWZpbmUgS1ZNX1BTQ0lfUkVUX05JCQkJKCh1bnNpZ25lZCBsb25nKS0xKQotI2RlZmluZSBLVk1fUFNDSV9SRVRfSU5WQUwJCSgodW5zaWduZWQgbG9uZyktMikKLSNkZWZpbmUgS1ZNX1BTQ0lfUkVUX0RFTklFRAkJKCh1bnNpZ25lZCBsb25nKS0zKQorI2RlZmluZSBLVk1fUFNDSV9SRVRfU1VDQ0VTUwkJUFNDSV9SRVRfU1VDQ0VTUworI2RlZmluZSBLVk1fUFNDSV9SRVRfTkkJCQlQU0NJX1JFVF9OT1RfU1VQUE9SVEVECisjZGVmaW5lIEtWTV9QU0NJX1JFVF9JTlZBTAkJUFNDSV9SRVRfSU5WQUxJRF9QQVJBTVMKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX0RFTklFRAkJUFNDSV9SRVRfREVOSUVECiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDdkODExZDkuLjdhNmZjZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw2IEBACiBhcm02NC1vYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCQkrPSBwZXJmX3JlZ3MubwogYXJtNjQtb2JqLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2V2ZW50Lm8KIGFybTY0LW9iai0kKENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQpCSs9IGh3X2JyZWFrcG9pbnQubwotYXJtNjQtb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KIGFybTY0LW9iai0kKENPTkZJR19BUk02NF9DUFVfU1VTUEVORCkJKz0gc2xlZXAubyBzdXNwZW5kLm8KIGFybTY0LW9iai0kKENPTkZJR19KVU1QX0xBQkVMKQkJKz0ganVtcF9sYWJlbC5vCiBhcm02NC1vYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9lYXJseV9wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjMzZkMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogRWFybHlwcmludGsgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQVJNIEx0ZC4KLSAqIEF1dGhvcjogQ2F0YWxpbiBNYXJpbmFzIDxjYXRhbGluLm1hcmluYXNAYXJtLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9hbWJhL3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KLQotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLQotc3RhdGljIHZvaWQgX19pb21lbSAqZWFybHlfYmFzZTsKLXN0YXRpYyB2b2lkICgqcHJpbnRjaCkoY2hhciBjaCk7Ci0KLS8qCi0gKiBQTDAxMSBzaW5nbGUgY2hhcmFjdGVyIFRYLgotICovCi1zdGF0aWMgdm9pZCBwbDAxMV9wcmludGNoKGNoYXIgY2gpCi17Ci0Jd2hpbGUgKHJlYWRsX3JlbGF4ZWQoZWFybHlfYmFzZSArIFVBUlQwMXhfRlIpICYgVUFSVDAxeF9GUl9UWEZGKQotCQk7Ci0Jd3JpdGViX3JlbGF4ZWQoY2gsIGVhcmx5X2Jhc2UgKyBVQVJUMDF4X0RSKTsKLQl3aGlsZSAocmVhZGxfcmVsYXhlZChlYXJseV9iYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX0JVU1kpCi0JCTsKLX0KLQotLyoKLSAqIFNlbWlob3N0aW5nLWJhc2VkIGRlYnVnIGNvbnNvbGUKLSAqLwotc3RhdGljIHZvaWQgc21oX3ByaW50Y2goY2hhciBjaCkKLXsKLQlhc20gdm9sYXRpbGUoIm1vdiAgeDEsICUwXG4iCi0JCSAgICAgIm1vdiAgeDAsICMzXG4iCi0JCSAgICAgImhsdCAgMHhmMDAwXG4iCi0JCSAgICAgOiA6ICJyIiAoJmNoKSA6ICJ4MCIsICJ4MSIsICJtZW1vcnkiKTsKLX0KLQotLyoKLSAqIDgyNTAvMTY1NTAgKDgtYml0IGFsaWduZWQgcmVnaXN0ZXJzKSBzaW5nbGUgY2hhcmFjdGVyIFRYLgotICovCi1zdGF0aWMgdm9pZCB1YXJ0ODI1MF84Yml0X3ByaW50Y2goY2hhciBjaCkKLXsKLQl3aGlsZSAoIShyZWFkYl9yZWxheGVkKGVhcmx5X2Jhc2UgKyBVQVJUX0xTUikgJiBVQVJUX0xTUl9USFJFKSkKLQkJOwotCXdyaXRlYl9yZWxheGVkKGNoLCBlYXJseV9iYXNlICsgVUFSVF9UWCk7Ci19Ci0KLS8qCi0gKiA4MjUwLzE2NTUwICgzMi1iaXQgYWxpZ25lZCByZWdpc3RlcnMpIHNpbmdsZSBjaGFyYWN0ZXIgVFguCi0gKi8KLXN0YXRpYyB2b2lkIHVhcnQ4MjUwXzMyYml0X3ByaW50Y2goY2hhciBjaCkKLXsKLQl3aGlsZSAoIShyZWFkbF9yZWxheGVkKGVhcmx5X2Jhc2UgKyAoVUFSVF9MU1IgPDwgMikpICYgVUFSVF9MU1JfVEhSRSkpCi0JCTsKLQl3cml0ZWxfcmVsYXhlZChjaCwgZWFybHlfYmFzZSArIChVQVJUX1RYIDw8IDIpKTsKLX0KLQotc3RydWN0IGVhcmx5Y29uX21hdGNoIHsKLQljb25zdCBjaGFyICpuYW1lOwotCXZvaWQgKCpwcmludGNoKShjaGFyIGNoKTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZWFybHljb25fbWF0Y2ggZWFybHljb25fbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKLQl7IC5uYW1lID0gInBsMDExIiwgLnByaW50Y2ggPSBwbDAxMV9wcmludGNoLCB9LAotCXsgLm5hbWUgPSAic21oIiwgLnByaW50Y2ggPSBzbWhfcHJpbnRjaCwgfSwKLQl7IC5uYW1lID0gInVhcnQ4MjUwLThiaXQiLCAucHJpbnRjaCA9IHVhcnQ4MjUwXzhiaXRfcHJpbnRjaCwgfSwKLQl7IC5uYW1lID0gInVhcnQ4MjUwLTMyYml0IiwgLnByaW50Y2ggPSB1YXJ0ODI1MF8zMmJpdF9wcmludGNoLCB9LAotCXt9Ci19OwotCi1zdGF0aWMgdm9pZCBlYXJseV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQotewotCXdoaWxlIChuLS0gPiAwKSB7Ci0JCWlmICgqcyA9PSAnXG4nKQotCQkJcHJpbnRjaCgnXHInKTsKLQkJcHJpbnRjaCgqcyk7Ci0JCXMrKzsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBlYXJseV9jb25zb2xlX2RldiA9IHsKLQkubmFtZSA9CQkiZWFybHljb24iLAotCS53cml0ZSA9CWVhcmx5X3dyaXRlLAotCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiB8IENPTl9CT09ULAotCS5pbmRleCA9CS0xLAotfTsKLQotLyoKLSAqIFBhcnNlIGVhcmx5cHJpbnRrPS4uLiBwYXJhbWV0ZXIgaW4gdGhlIGZvcm1hdDoKLSAqCi0gKiAgIDxuYW1lPlssPGFkZHI+XVssPG9wdGlvbnM+XQotICoKLSAqIGFuZCByZWdpc3RlciB0aGUgZWFybHkgY29uc29sZS4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBVQVJUIGhhcyBiZWVuCi0gKiBpbml0aWFsaXNlZCBieSB0aGUgYm9vdGxvYWRlciBhbHJlYWR5LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBlYXJseWNvbl9tYXRjaCAqbWF0Y2ggPSBlYXJseWNvbl9tYXRjaDsKLQlwaHlzX2FkZHJfdCBwYWRkciA9IDA7Ci0KLQlpZiAoIWJ1ZikgewotCQlwcl93YXJuaW5nKCJObyBlYXJseXByaW50ayBhcmd1bWVudHMgcGFzc2VkLlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXdoaWxlIChtYXRjaC0+bmFtZSkgewotCQlzaXplX3QgbGVuID0gc3RybGVuKG1hdGNoLT5uYW1lKTsKLQkJaWYgKCFzdHJuY21wKGJ1ZiwgbWF0Y2gtPm5hbWUsIGxlbikpIHsKLQkJCWJ1ZiArPSBsZW47Ci0JCQlicmVhazsKLQkJfQotCQltYXRjaCsrOwotCX0KLQlpZiAoIW1hdGNoLT5uYW1lKSB7Ci0JCXByX3dhcm5pbmcoIlVua25vd24gZWFybHlwcmludGsgYXJndW1lbnRzOiAlc1xuIiwgYnVmKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogSS9PIGFkZHJlc3MgKi8KLQlpZiAoIXN0cm5jbXAoYnVmLCAiLDB4IiwgMykpIHsKLQkJY2hhciAqZTsKLQkJcGFkZHIgPSBzaW1wbGVfc3RydG91bChidWYgKyAxLCAmZSwgMTYpOwotCQlidWYgPSBlOwotCX0KLQkvKiBubyBvcHRpb25zIHBhcnNpbmcgeWV0ICovCi0KLQlpZiAocGFkZHIpCi0JCWVhcmx5X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopc2V0X2ZpeG1hcF9vZmZzZXRfaW8oRklYX0VBUkxZQ09OX01FTV9CQVNFLCBwYWRkcik7Ci0KLQlwcmludGNoID0gbWF0Y2gtPnByaW50Y2g7Ci0JZWFybHlfY29uc29sZSA9ICZlYXJseV9jb25zb2xlX2RldjsKLQlyZWdpc3Rlcl9jb25zb2xlKCZlYXJseV9jb25zb2xlX2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BzY2kuYyBiL2FyY2gvYXJtNjQva2VybmVsL3BzY2kuYwppbmRleCBlYTQ4MjhhLi45ZTk3OThmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9wc2NpLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcHNjaS5jCkBAIC0xOCwxMiArMTgsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC9wc2NpLmg+CiAKICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vY3B1X29wcy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9wc2NpLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CiAKICNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9UWVBFX1NUQU5EQlkJCTAKICNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9UWVBFX1BPV0VSX0RPV04JMQpAQCAtNDAsNTggKzQ1LDUyIEBACiAJaW50ICgqY3B1X29mZikoc3RydWN0IHBzY2lfcG93ZXJfc3RhdGUgc3RhdGUpOwogCWludCAoKmNwdV9vbikodW5zaWduZWQgbG9uZyBjcHVpZCwgdW5zaWduZWQgbG9uZyBlbnRyeV9wb2ludCk7CiAJaW50ICgqbWlncmF0ZSkodW5zaWduZWQgbG9uZyBjcHVpZCk7CisJaW50ICgqYWZmaW5pdHlfaW5mbykodW5zaWduZWQgbG9uZyB0YXJnZXRfYWZmaW5pdHksCisJCQl1bnNpZ25lZCBsb25nIGxvd2VzdF9hZmZpbml0eV9sZXZlbCk7CisJaW50ICgqbWlncmF0ZV9pbmZvX3R5cGUpKHZvaWQpOwogfTsKIAogc3RhdGljIHN0cnVjdCBwc2NpX29wZXJhdGlvbnMgcHNjaV9vcHM7CiAKIHN0YXRpYyBpbnQgKCppbnZva2VfcHNjaV9mbikodTY0LCB1NjQsIHU2NCwgdTY0KTsKK3R5cGVkZWYgaW50ICgqcHNjaV9pbml0Y2FsbF90KShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CiAKIGVudW0gcHNjaV9mdW5jdGlvbiB7CiAJUFNDSV9GTl9DUFVfU1VTUEVORCwKIAlQU0NJX0ZOX0NQVV9PTiwKIAlQU0NJX0ZOX0NQVV9PRkYsCiAJUFNDSV9GTl9NSUdSQVRFLAorCVBTQ0lfRk5fQUZGSU5JVFlfSU5GTywKKwlQU0NJX0ZOX01JR1JBVEVfSU5GT19UWVBFLAogCVBTQ0lfRk5fTUFYLAogfTsKIAogc3RhdGljIHUzMiBwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fTUFYXTsKIAotI2RlZmluZSBQU0NJX1JFVF9TVUNDRVNTCQkwCi0jZGVmaW5lIFBTQ0lfUkVUX0VPUE5PVFNVUFAJCS0xCi0jZGVmaW5lIFBTQ0lfUkVUX0VJTlZBTAkJCS0yCi0jZGVmaW5lIFBTQ0lfUkVUX0VQRVJNCQkJLTMKLQogc3RhdGljIGludCBwc2NpX3RvX2xpbnV4X2Vycm5vKGludCBlcnJubykKIHsKIAlzd2l0Y2ggKGVycm5vKSB7CiAJY2FzZSBQU0NJX1JFVF9TVUNDRVNTOgogCQlyZXR1cm4gMDsKLQljYXNlIFBTQ0lfUkVUX0VPUE5PVFNVUFA6CisJY2FzZSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEOgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JY2FzZSBQU0NJX1JFVF9FSU5WQUw6CisJY2FzZSBQU0NJX1JFVF9JTlZBTElEX1BBUkFNUzoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBQU0NJX1JFVF9FUEVSTToKKwljYXNlIFBTQ0lfUkVUX0RFTklFRDoKIAkJcmV0dXJuIC1FUEVSTTsKIAl9OwogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLSNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9JRF9NQVNLCTB4ZmZmZgotI2RlZmluZSBQU0NJX1BPV0VSX1NUQVRFX0lEX1NISUZUCTAKLSNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9UWVBFX01BU0sJMHgxCi0jZGVmaW5lIFBTQ0lfUE9XRVJfU1RBVEVfVFlQRV9TSElGVAkxNgotI2RlZmluZSBQU0NJX1BPV0VSX1NUQVRFX0FGRkxfTUFTSwkweDMKLSNkZWZpbmUgUFNDSV9QT1dFUl9TVEFURV9BRkZMX1NISUZUCTI0Ci0KIHN0YXRpYyB1MzIgcHNjaV9wb3dlcl9zdGF0ZV9wYWNrKHN0cnVjdCBwc2NpX3Bvd2VyX3N0YXRlIHN0YXRlKQogewotCXJldHVybgkoKHN0YXRlLmlkICYgUFNDSV9QT1dFUl9TVEFURV9JRF9NQVNLKQotCQkJPDwgUFNDSV9QT1dFUl9TVEFURV9JRF9TSElGVCkJfAotCQkoKHN0YXRlLnR5cGUgJiBQU0NJX1BPV0VSX1NUQVRFX1RZUEVfTUFTSykKLQkJCTw8IFBTQ0lfUE9XRVJfU1RBVEVfVFlQRV9TSElGVCkJfAotCQkoKHN0YXRlLmFmZmluaXR5X2xldmVsICYgUFNDSV9QT1dFUl9TVEFURV9BRkZMX01BU0spCi0JCQk8PCBQU0NJX1BPV0VSX1NUQVRFX0FGRkxfU0hJRlQpOworCXJldHVybiAoKHN0YXRlLmlkIDw8IFBTQ0lfMF8yX1BPV0VSX1NUQVRFX0lEX1NISUZUKQorCQkJJiBQU0NJXzBfMl9QT1dFUl9TVEFURV9JRF9NQVNLKSB8CisJCSgoc3RhdGUudHlwZSA8PCBQU0NJXzBfMl9QT1dFUl9TVEFURV9UWVBFX1NISUZUKQorCQkgJiBQU0NJXzBfMl9QT1dFUl9TVEFURV9UWVBFX01BU0spIHwKKwkJKChzdGF0ZS5hZmZpbml0eV9sZXZlbCA8PCBQU0NJXzBfMl9QT1dFUl9TVEFURV9BRkZMX1NISUZUKQorCQkgJiBQU0NJXzBfMl9QT1dFUl9TVEFURV9BRkZMX01BU0spOwogfQogCiAvKgpAQCAtMTI4LDYgKzEyNywxNCBAQAogCXJldHVybiBmdW5jdGlvbl9pZDsKIH0KIAorc3RhdGljIGludCBwc2NpX2dldF92ZXJzaW9uKHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGludm9rZV9wc2NpX2ZuKFBTQ0lfMF8yX0ZOX1BTQ0lfVkVSU0lPTiwgMCwgMCwgMCk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBwc2NpX2NwdV9zdXNwZW5kKHN0cnVjdCBwc2NpX3Bvd2VyX3N0YXRlIHN0YXRlLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpCiB7CkBAIC0xNzEsMjYgKzE3OCwzNiBAQAogCXJldHVybiBwc2NpX3RvX2xpbnV4X2Vycm5vKGVycik7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBzY2lfb2ZfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKLQl7IC5jb21wYXRpYmxlID0gImFybSxwc2NpIiwJfSwKLQl7fSwKLX07Ci0KLXZvaWQgX19pbml0IHBzY2lfaW5pdCh2b2lkKQorc3RhdGljIGludCBwc2NpX2FmZmluaXR5X2luZm8odW5zaWduZWQgbG9uZyB0YXJnZXRfYWZmaW5pdHksCisJCXVuc2lnbmVkIGxvbmcgbG93ZXN0X2FmZmluaXR5X2xldmVsKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IGVycjsKKwl1MzIgZm47CisKKwlmbiA9IHBzY2lfZnVuY3Rpb25faWRbUFNDSV9GTl9BRkZJTklUWV9JTkZPXTsKKwllcnIgPSBpbnZva2VfcHNjaV9mbihmbiwgdGFyZ2V0X2FmZmluaXR5LCBsb3dlc3RfYWZmaW5pdHlfbGV2ZWwsIDApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHNjaV9taWdyYXRlX2luZm9fdHlwZSh2b2lkKQoreworCWludCBlcnI7CisJdTMyIGZuOworCisJZm4gPSBwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fTUlHUkFURV9JTkZPX1RZUEVdOworCWVyciA9IGludm9rZV9wc2NpX2ZuKGZuLCAwLCAwLCAwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGdldF9zZXRfY29uZHVpdF9tZXRob2Qoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKIAljb25zdCBjaGFyICptZXRob2Q7Ci0JdTMyIGlkOwogCi0JbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgcHNjaV9vZl9tYXRjaCk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuOwotCi0JcHJfaW5mbygicHJvYmluZyBmdW5jdGlvbiBJRHMgZnJvbSBkZXZpY2UtdHJlZVxuIik7CisJcHJfaW5mbygicHJvYmluZyBmb3IgY29uZHVpdCBtZXRob2QgZnJvbSBEVC5cbiIpOwogCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAibWV0aG9kIiwgJm1ldGhvZCkpIHsKLQkJcHJfd2FybmluZygibWlzc2luZyBcIm1ldGhvZFwiIHByb3BlcnR5XG4iKTsKLQkJZ290byBvdXRfcHV0X25vZGU7CisJCXByX3dhcm4oIm1pc3NpbmcgXCJtZXRob2RcIiBwcm9wZXJ0eVxuIik7CisJCXJldHVybiAtRU5YSU87CiAJfQogCiAJaWYgKCFzdHJjbXAoImh2YyIsIG1ldGhvZCkpIHsKQEAgLTE5OCw5ICsyMTUsOTggQEAKIAl9IGVsc2UgaWYgKCFzdHJjbXAoInNtYyIsIG1ldGhvZCkpIHsKIAkJaW52b2tlX3BzY2lfZm4gPSBfX2ludm9rZV9wc2NpX2ZuX3NtYzsKIAl9IGVsc2UgewotCQlwcl93YXJuaW5nKCJpbnZhbGlkIFwibWV0aG9kXCIgcHJvcGVydHk6ICVzXG4iLCBtZXRob2QpOwotCQlnb3RvIG91dF9wdXRfbm9kZTsKKwkJcHJfd2FybigiaW52YWxpZCBcIm1ldGhvZFwiIHByb3BlcnR5OiAlc1xuIiwgbWV0aG9kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwc2NpX3N5c19yZXNldChlbnVtIHJlYm9vdF9tb2RlIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJaW52b2tlX3BzY2lfZm4oUFNDSV8wXzJfRk5fU1lTVEVNX1JFU0VULCAwLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgcHNjaV9zeXNfcG93ZXJvZmYodm9pZCkKK3sKKwlpbnZva2VfcHNjaV9mbihQU0NJXzBfMl9GTl9TWVNURU1fT0ZGLCAwLCAwLCAwKTsKK30KKworLyoKKyAqIFBTQ0kgRnVuY3Rpb24gSURzIGZvciB2MC4yKyBhcmUgd2VsbCBkZWZpbmVkIHNvIHVzZQorICogc3RhbmRhcmQgdmFsdWVzLgorICovCitzdGF0aWMgaW50IHBzY2lfMF8yX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgZXJyLCB2ZXI7CisKKwllcnIgPSBnZXRfc2V0X2NvbmR1aXRfbWV0aG9kKG5wKTsKKworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dF9ub2RlOworCisJdmVyID0gcHNjaV9nZXRfdmVyc2lvbigpOworCisJaWYgKHZlciA9PSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVEKSB7CisJCS8qIFBTQ0kgdjAuMiBtYW5kYXRlcyBpbXBsZW1lbnRhdGlvbiBvZiBQU0NJX0lEX1ZFUlNJT04uICovCisJCXByX2VycigiUFNDSSBmaXJtd2FyZSBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgdjAuMiBzcGVjLlxuIik7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dF9wdXRfbm9kZTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJQU0NJdiVkLiVkIGRldGVjdGVkIGluIGZpcm13YXJlLlxuIiwKKwkJCQlQU0NJX1ZFUlNJT05fTUFKT1IodmVyKSwKKwkJCQlQU0NJX1ZFUlNJT05fTUlOT1IodmVyKSk7CisKKwkJaWYgKFBTQ0lfVkVSU0lPTl9NQUpPUih2ZXIpID09IDAgJiYKKwkJCQlQU0NJX1ZFUlNJT05fTUlOT1IodmVyKSA8IDIpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlwcl9lcnIoIkNvbmZsaWN0aW5nIFBTQ0kgdmVyc2lvbiBkZXRlY3RlZC5cbiIpOworCQkJZ290byBvdXRfcHV0X25vZGU7CisJCX0KKwl9CisKKwlwcl9pbmZvKCJVc2luZyBzdGFuZGFyZCBQU0NJIHYwLjIgZnVuY3Rpb24gSURzXG4iKTsKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQ1BVX1NVU1BFTkRdID0gUFNDSV8wXzJfRk42NF9DUFVfU1VTUEVORDsKKwlwc2NpX29wcy5jcHVfc3VzcGVuZCA9IHBzY2lfY3B1X3N1c3BlbmQ7CisKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQ1BVX09GRl0gPSBQU0NJXzBfMl9GTl9DUFVfT0ZGOworCXBzY2lfb3BzLmNwdV9vZmYgPSBwc2NpX2NwdV9vZmY7CisKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQ1BVX09OXSA9IFBTQ0lfMF8yX0ZONjRfQ1BVX09OOworCXBzY2lfb3BzLmNwdV9vbiA9IHBzY2lfY3B1X29uOworCisJcHNjaV9mdW5jdGlvbl9pZFtQU0NJX0ZOX01JR1JBVEVdID0gUFNDSV8wXzJfRk42NF9NSUdSQVRFOworCXBzY2lfb3BzLm1pZ3JhdGUgPSBwc2NpX21pZ3JhdGU7CisKKwlwc2NpX2Z1bmN0aW9uX2lkW1BTQ0lfRk5fQUZGSU5JVFlfSU5GT10gPSBQU0NJXzBfMl9GTjY0X0FGRklOSVRZX0lORk87CisJcHNjaV9vcHMuYWZmaW5pdHlfaW5mbyA9IHBzY2lfYWZmaW5pdHlfaW5mbzsKKworCXBzY2lfZnVuY3Rpb25faWRbUFNDSV9GTl9NSUdSQVRFX0lORk9fVFlQRV0gPQorCQlQU0NJXzBfMl9GTl9NSUdSQVRFX0lORk9fVFlQRTsKKwlwc2NpX29wcy5taWdyYXRlX2luZm9fdHlwZSA9IHBzY2lfbWlncmF0ZV9pbmZvX3R5cGU7CisKKwlhcm1fcG1fcmVzdGFydCA9IHBzY2lfc3lzX3Jlc2V0OworCisJcG1fcG93ZXJfb2ZmID0gcHNjaV9zeXNfcG93ZXJvZmY7CisKK291dF9wdXRfbm9kZToKKwlvZl9ub2RlX3B1dChucCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFBTQ0kgPCB2MC4yIGdldCBQU0NJIEZ1bmN0aW9uIElEcyB2aWEgRFQuCisgKi8KK3N0YXRpYyBpbnQgcHNjaV8wXzFfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXUzMiBpZDsKKwlpbnQgZXJyOworCisJZXJyID0gZ2V0X3NldF9jb25kdWl0X21ldGhvZChucCk7CisKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9wdXRfbm9kZTsKKworCXByX2luZm8oIlVzaW5nIFBTQ0kgdjAuMSBGdW5jdGlvbiBJRHMgZnJvbSBEVFxuIik7CiAKIAlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiY3B1X3N1c3BlbmQiLCAmaWQpKSB7CiAJCXBzY2lfZnVuY3Rpb25faWRbUFNDSV9GTl9DUFVfU1VTUEVORF0gPSBpZDsKQEAgLTIyNCw3ICszMzAsMjggQEAKIAogb3V0X3B1dF9ub2RlOgogCW9mX25vZGVfcHV0KG5wKTsKLQlyZXR1cm47CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcHNjaV9vZl9tYXRjaFtdIF9faW5pdGNvbnN0ID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJtLHBzY2kiLAkuZGF0YSA9IHBzY2lfMF8xX2luaXR9LAorCXsgLmNvbXBhdGlibGUgPSAiYXJtLHBzY2ktMC4yIiwJLmRhdGEgPSBwc2NpXzBfMl9pbml0fSwKKwl7fSwKK307CisKK2ludCBfX2luaXQgcHNjaV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVkX25wOworCXBzY2lfaW5pdGNhbGxfdCBpbml0X2ZuOworCisJbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGVfYW5kX21hdGNoKE5VTEwsIHBzY2lfb2ZfbWF0Y2gsICZtYXRjaGVkX25wKTsKKworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJaW5pdF9mbiA9IChwc2NpX2luaXRjYWxsX3QpbWF0Y2hlZF9ucC0+ZGF0YTsKKwlyZXR1cm4gaW5pdF9mbihucCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0yNzcsNiArNDA0LDM1IEBACiAKIAlwcl9jcml0KCJ1bmFibGUgdG8gcG93ZXIgb2ZmIENQVSV1ICglZClcbiIsIGNwdSwgcmV0KTsKIH0KKworc3RhdGljIGludCBjcHVfcHNjaV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlcnIsIGk7CisKKwlpZiAoIXBzY2lfb3BzLmFmZmluaXR5X2luZm8pCisJCXJldHVybiAxOworCS8qCisJICogY3B1X2tpbGwgY291bGQgcmFjZSB3aXRoIGNwdV9kaWUgYW5kIHdlIGNhbgorCSAqIHBvdGVudGlhbGx5IGVuZCB1cCBkZWNsYXJpbmcgdGhpcyBjcHUgdW5kZWFkCisJICogd2hpbGUgaXQgaXMgZHlpbmcuIFNvLCB0cnkgYWdhaW4gYSBmZXcgdGltZXMuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQllcnIgPSBwc2NpX29wcy5hZmZpbml0eV9pbmZvKGNwdV9sb2dpY2FsX21hcChjcHUpLCAwKTsKKwkJaWYgKGVyciA9PSBQU0NJXzBfMl9BRkZJTklUWV9MRVZFTF9PRkYpIHsKKwkJCXByX2luZm8oIkNQVSVkIGtpbGxlZC5cbiIsIGNwdSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCW1zbGVlcCgxMCk7CisJCXByX2luZm8oIlJldHJ5aW5nIGFnYWluIHRvIGNoZWNrIGZvciBDUFUga2lsbFxuIik7CisJfQorCisJcHJfd2FybigiQ1BVJWQgbWF5IG5vdCBoYXZlIHNodXQgZG93biBjbGVhbmx5IChBRkZJTklUWV9JTkZPIHJlcG9ydHMgJWQpXG4iLAorCQkJY3B1LCBlcnIpOworCS8qIE1ha2Ugb3BfY3B1X2tpbGwoKSBmYWlsLiAqLworCXJldHVybiAwOworfQogI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCBjcHVfb3BlcmF0aW9ucyBjcHVfcHNjaV9vcHMgPSB7CkBAIC0yODcsNiArNDQzLDcgQEAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAkuY3B1X2Rpc2FibGUJPSBjcHVfcHNjaV9jcHVfZGlzYWJsZSwKIAkuY3B1X2RpZQk9IGNwdV9wc2NpX2NwdV9kaWUsCisJLmNwdV9raWxsCT0gY3B1X3BzY2lfY3B1X2tpbGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKaW5kZXggZjBhMTQxZC4uYzNjYjE2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKQEAgLTIyOCw2ICsyMjgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvcF9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCS8qCisJICogSWYgd2UgaGF2ZSBubyBtZWFucyBvZiBzeW5jaHJvbmlzaW5nIHdpdGggdGhlIGR5aW5nIENQVSwgdGhlbiBhc3N1bWUKKwkgKiB0aGF0IGl0IGlzIHJlYWxseSBkZWFkLiBXZSBjYW4gb25seSB3YWl0IGZvciBhbiBhcmJpdHJhcnkgbGVuZ3RoIG9mCisJICogdGltZSBhbmQgaG9wZSB0aGF0IGl0J3MgZGVhZCwgc28gbGV0J3Mgc2tpcCB0aGUgd2FpdCBhbmQganVzdCBob3BlLgorCSAqLworCWlmICghY3B1X29wc1tjcHVdLT5jcHVfa2lsbCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gY3B1X29wc1tjcHVdLT5jcHVfa2lsbChjcHUpOworfQorCiBzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9kaWVkKTsKIAogLyoKQEAgLTI0MSw2ICsyNTQsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAlwcl9ub3RpY2UoIkNQVSV1OiBzaHV0ZG93blxuIiwgY3B1KTsKKworCS8qCisJICogTm93IHRoYXQgdGhlIGR5aW5nIENQVSBpcyBiZXlvbmQgdGhlIHBvaW50IG9mIG5vIHJldHVybiB3LnIudC4KKwkgKiBpbi1rZXJuZWwgc3luY2hyb25pc2F0aW9uLCB0cnkgdG8gZ2V0IHRoZSBmaXJ3bWFyZSB0byBoZWxwIHVzIHRvCisJICogdmVyaWZ5IHRoYXQgaXQgaGFzIHJlYWxseSBsZWZ0IHRoZSBrZXJuZWwgYmVmb3JlIHdlIGNvbnNpZGVyCisJICogY2xvYmJlcmluZyBhbnl0aGluZyBpdCBtaWdodCBzdGlsbCBiZSB1c2luZy4KKwkgKi8KKwlpZiAoIW9wX2NwdV9raWxsKGNwdSkpCisJCXByX3dhcm4oIkNQVSVkIG1heSBub3QgaGF2ZSBzaHV0IGRvd24gY2xlYW5seVxuIiwgY3B1KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMgYi9hcmNoL2FybTY0L2t2bS9ndWVzdC5jCmluZGV4IDA4NzQ1NTcuLjYwYjVjMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMKKysrIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuYwpAQCAtMjE0LDYgKzIxNCw4IEBACiAJCQlyZXR1cm4gS1ZNX0FSTV9UQVJHRVRfQUVNX1Y4OwogCQljYXNlIEFSTV9DUFVfUEFSVF9GT1VOREFUSU9OOgogCQkJcmV0dXJuIEtWTV9BUk1fVEFSR0VUX0ZPVU5EQVRJT05fVjg7CisJCWNhc2UgQVJNX0NQVV9QQVJUX0NPUlRFWF9BNTM6CisJCQlyZXR1cm4gS1ZNX0FSTV9UQVJHRVRfQ09SVEVYX0E1MzsKIAkJY2FzZSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E1NzoKIAkJCXJldHVybiBLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTU3OwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYyBiL2FyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMKaW5kZXggN2JjNDFlYS4uMTgyNDE1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYworKysgYi9hcmNoL2FybTY0L2t2bS9oYW5kbGVfZXhpdC5jCkBAIC0zMCwxMSArMzAsMTUgQEAKIAogc3RhdGljIGludCBoYW5kbGVfaHZjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bikKIHsKLQlpZiAoa3ZtX3BzY2lfY2FsbCh2Y3B1KSkKLQkJcmV0dXJuIDE7CisJaW50IHJldDsKIAotCWt2bV9pbmplY3RfdW5kZWZpbmVkKHZjcHUpOwotCXJldHVybiAxOworCXJldCA9IGt2bV9wc2NpX2NhbGwodmNwdSk7CisJaWYgKHJldCA8IDApIHsKKwkJa3ZtX2luamVjdF91bmRlZmluZWQodmNwdSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3NtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVnc19nZW5lcmljX3Y4LmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVnc19nZW5lcmljX3Y4LmMKaW5kZXggOGZlNmY3Ni4uNDc1ZmQyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3NfZ2VuZXJpY192OC5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzX2dlbmVyaWNfdjguYwpAQCAtODgsNiArODgsOCBAQAogCQkJCQkgICZnZW5lcmljdjhfdGFyZ2V0X3RhYmxlKTsKIAlrdm1fcmVnaXN0ZXJfdGFyZ2V0X3N5c19yZWdfdGFibGUoS1ZNX0FSTV9UQVJHRVRfRk9VTkRBVElPTl9WOCwKIAkJCQkJICAmZ2VuZXJpY3Y4X3RhcmdldF90YWJsZSk7CisJa3ZtX3JlZ2lzdGVyX3RhcmdldF9zeXNfcmVnX3RhYmxlKEtWTV9BUk1fVEFSR0VUX0NPUlRFWF9BNTMsCisJCQkJCSAgJmdlbmVyaWN2OF90YXJnZXRfdGFibGUpOwogCWt2bV9yZWdpc3Rlcl90YXJnZXRfc3lzX3JlZ190YWJsZShLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTU3LAogCQkJCQkgICZnZW5lcmljdjhfdGFyZ2V0X3RhYmxlKTsKIAlrdm1fcmVnaXN0ZXJfdGFyZ2V0X3N5c19yZWdfdGFibGUoS1ZNX0FSTV9UQVJHRVRfWEdFTkVfUE9URU5aQSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQveGVuL2h5cGVyY2FsbC5TIGIvYXJjaC9hcm02NC94ZW4vaHlwZXJjYWxsLlMKaW5kZXggNTMxMzQyZS4uOGJiZTk0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC94ZW4vaHlwZXJjYWxsLlMKKysrIGIvYXJjaC9hcm02NC94ZW4vaHlwZXJjYWxsLlMKQEAgLTgwLDYgKzgwLDcgQEAKIEhZUEVSQ0FMTDIocGh5c2Rldl9vcCk7CiBIWVBFUkNBTEwzKHZjcHVfb3ApOwogSFlQRVJDQUxMMSh0bWVtX29wKTsKK0hZUEVSQ0FMTDIobXVsdGljYWxsKTsKIAogRU5UUlkocHJpdmNtZF9jYWxsKQogCW1vdiB4MTYsIHgwCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcKaW5kZXggMThkYjg1My4uNDkxMmYwYSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2hhbW1lcmhlYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9oYW1tZXJoZWFkX2RlZmNvbmZpZwpAQCAtMTE3LDcgKzExNyw2IEBACiBDT05GSUdfSElEX1NPTlk9bQogQ09ORklHX0hJRF9TVU5QTFVTPW0KIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggNjE0MDcyNy4uMDc4MGYzZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xODMsOSArMTgzLDQgQEAKIAogI2RlZmluZSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKHYpIGF0b21pY19zdWJfaWZfcG9zaXRpdmUoMSwgdikKIAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCiAjZW5kaWYgLyogIF9fQVNNX0FWUjMyX0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBlYmU3YWQzLi45MTBkNTM3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTEzLDEyICsxMyw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotLyoKLSAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyCi0gKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIHNldF9iaXQgLSBBdG9taWNhbGx5IHNldCBhIGJpdCBpbiBtZW1vcnkKQEAgLTY3LDcgKzYyLDcgQEAKICAqCiAgKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcwogICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKLSAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2F0b21pYygpCiAgKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwppbmRleCAyZjJjNmFjLi4xNzU5ZmFkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKQEAgLTEyMyw3ICsxMjMsNiBAQAogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKIENPTkZJR19VU0JfTU9OPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVC1WMl9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVQtVjJfZGVmY29uZmlnCmluZGV4IDkxNTM1YzMuLjM1NzcyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVC1WMl9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZwpAQCAtMTQ3LDcgKzE0Nyw2IEBACiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUI9eQogQ09ORklHX1VTQl9NT049eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKaW5kZXggYWYyNzM4Yy4uMmU3M2E1ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCkBAIC0xNDEsNyArMTQxLDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQj15CiBDT05GSUdfVVNCX01PTj15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZwppbmRleCBlNzE2ZmRmLi5mMGEyZGRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKQEAgLTE1OSw3ICsxNTksNiBAQAogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKIENPTkZJR19VU0JfTU9OPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCmluZGV4IGY1OWM4MGUuLjA1MTA4YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZwpAQCAtOTUsNyArOTUsNiBAQAogQ09ORklHX0JGSU5fV0RUPXkKIENPTkZJR19VU0I9bQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQj15CiBDT05GSUdfVVNCX01PTj1tCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZwppbmRleCBiOWFmNGZhLi45ZmY3OWRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKQEAgLTk0LDcgKzk0LDYgQEAKIENPTkZJR19CRklOX1dEVD15CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPW0KLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX01VU0JfSERSQz1tCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcKaW5kZXggNjI5NTE2NS4uNWFkZjBkYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZwpAQCAtNzMsNyArNzMsNiBAQAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9JU1AxMzYyX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmFycmllci5oCmluZGV4IDE5MjgzYTEuLjQyMDAwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC0yNyw2ICsyNyw5IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NNUCAqLwogCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pYygpCWJhcnJpZXIoKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYmFycmllci5oPgogCiAjZW5kaWYgLyogX0JMQUNLRklOX0JBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggMGNhNDBkZC4uYjI5OGI2NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0yNywyMSArMjcsMTcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgogCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KKwogI2lmbmRlZiBDT05GSUdfU01QCiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KLQogLyoKICAqIGNsZWFyX2JpdCBtYXkgbm90IGltcGx5IGEgbWVtb3J5IGJhcnJpZXIKICAqLwotI2lmbmRlZiBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2VuZGlmCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CiAjZWxzZQogCi0jaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIHN3YWIzMiAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIApAQCAtMTAxLDEyICs5Nyw2IEBACiAJcmV0dXJuIF9fcmF3X2JpdF90ZXN0X3RvZ2dsZV9hc20oYSwgbnIgJiAweDFmKTsKIH0KIAotLyoKLSAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLgotICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotCiAjZGVmaW5lIHRlc3RfYml0IF9fc2tpcF90ZXN0X2JpdAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CiAjdW5kZWYgdGVzdF9iaXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDc0MzUyYzQuLmM3Mzc5MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMTAsOSArMTAsNCBAQAogI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAweDAwMDAxMDAwCiAjZGVmaW5lIFBDSUJJT1NfTUlOX01FTSAweDEwMDAwMDAwCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAjZW5kaWYJCQkJLyogX0FTTV9CRklOX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY2MDkvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY2MDkvYm9hcmRzL2V6a2l0LmMKaW5kZXggOTQzZjdlOS4uMWJhNDYwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNjA5L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjYwOS9ib2FyZHMvZXpraXQuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9waW5jdHJsLWFkaTIuaD4KLSNpbmNsdWRlIDxhc20vYmZpbl9zcGkzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2FkaV9zcGkzLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL25hbmQuaD4KQEAgLTc2NywxMyArNzY3LDEzIEBACiAJLnR5cGUgPSAidzI1cTMyIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmZpbl9zcGkzX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWRpX3NwaTNfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gdHJ1ZSwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIH07CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9TUElERVYpCi1zdGF0aWMgc3RydWN0IGJmaW5fc3BpM19jaGlwIHNwaWRldl9jaGlwX2luZm8gPSB7CitzdGF0aWMgc3RydWN0IGFkaV9zcGkzX2NoaXAgc3BpZGV2X2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IHRydWUsCiB9OwogI2VuZGlmCkBAIC0xNzM2LDcgKzE3MzYsNyBAQAogCX0sCiAjZW5kaWYKIH07Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfU1BJX0JGSU5fVjMpCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1BJX0FESV9WMykKIC8qIFNQSSAoMCkgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9zcGkwX3Jlc291cmNlW10gPSB7CiAJewpAQCAtMTc3NywxMyArMTc3NywxMyBAQAogfTsKIAogLyogU1BJIGNvbnRyb2xsZXIgZGF0YSAqLwotc3RhdGljIHN0cnVjdCBiZmluX3NwaTNfbWFzdGVyIGJmNjB4X3NwaV9tYXN0ZXJfaW5mbzAgPSB7CitzdGF0aWMgc3RydWN0IGFkaV9zcGkzX21hc3RlciBiZjYweF9zcGlfbWFzdGVyX2luZm8wID0gewogCS5udW1fY2hpcHNlbGVjdCA9IE1BWF9DVFJMX0NTICsgTUFYX0JMQUNLRklOX0dQSU9TLAogCS5waW5fcmVxID0ge1BfU1BJMF9TQ0ssIFBfU1BJMF9NSVNPLCBQX1NQSTBfTU9TSSwgMH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZjYweF9zcGlfbWFzdGVyMCA9IHsKLQkubmFtZSA9ICJiZmluLXNwaTMiLAorCS5uYW1lID0gImFkaS1zcGkzIiwKIAkuaWQgPSAwLCAvKiBCdXMgbnVtYmVyICovCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fc3BpMF9yZXNvdXJjZSksCiAJLnJlc291cmNlID0gYmZpbl9zcGkwX3Jlc291cmNlLApAQCAtMTc5MiwxMyArMTc5MiwxMyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGJmaW5fc3BpM19tYXN0ZXIgYmY2MHhfc3BpX21hc3Rlcl9pbmZvMSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWRpX3NwaTNfbWFzdGVyIGJmNjB4X3NwaV9tYXN0ZXJfaW5mbzEgPSB7CiAJLm51bV9jaGlwc2VsZWN0ID0gTUFYX0NUUkxfQ1MgKyBNQVhfQkxBQ0tGSU5fR1BJT1MsCiAJLnBpbl9yZXEgPSB7UF9TUEkxX1NDSywgUF9TUEkxX01JU08sIFBfU1BJMV9NT1NJLCAwfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmNjB4X3NwaV9tYXN0ZXIxID0gewotCS5uYW1lID0gImJmaW4tc3BpMyIsCisJLm5hbWUgPSAiYWRpLXNwaTMiLAogCS5pZCA9IDEsIC8qIEJ1cyBudW1iZXIgKi8KIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9zcGkxX3Jlc291cmNlKSwKIAkucmVzb3VyY2UgPSBiZmluX3NwaTFfcmVzb3VyY2UsCkBAIC0xOTkwLDcgKzE5OTAsNyBAQAogCSZiZmluX3NkaF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9CRklOX1YzKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9BRElfVjMpCiAJJmJmNjB4X3NwaV9tYXN0ZXIwLAogCSZiZjYweF9zcGlfbWFzdGVyMSwKICNlbmRpZgpAQCAtMjA1MSw4ICsyMDUxLDggQEAKIAlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJiZmluX3Npci4xIiwgICJwaW5jdHJsLWFkaTIuMCIsIE5VTEwsICJ1YXJ0MSIpLAogCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImJmaW4tc2RoLjAiLCAgInBpbmN0cmwtYWRpMi4wIiwgTlVMTCwgInJzaTAiKSwKIAlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzdG1tYWNldGguMCIsICAicGluY3RybC1hZGkyLjAiLCBOVUxMLCAiZXRoMCIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImJmaW4tc3BpMy4wIiwgICJwaW5jdHJsLWFkaTIuMCIsIE5VTEwsICJzcGkwIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgiYmZpbi1zcGkzLjEiLCAgInBpbmN0cmwtYWRpMi4wIiwgTlVMTCwgInNwaTEiKSwKKwlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJhZGktc3BpMy4wIiwgICJwaW5jdHJsLWFkaTIuMCIsIE5VTEwsICJzcGkwIiksCisJUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgiYWRpLXNwaTMuMSIsICAicGluY3RybC1hZGkyLjAiLCBOVUxMLCAic3BpMSIpLAogCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImkyYy1iZmluLXR3aS4wIiwgICJwaW5jdHJsLWFkaTIuMCIsIE5VTEwsICJ0d2kwIiksCiAJUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgiaTJjLWJmaW4tdHdpLjEiLCAgInBpbmN0cmwtYWRpMi4wIiwgTlVMTCwgInR3aTEiKSwKIAlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJiZmluLXJvdGFyeSIsICAicGluY3RybC1hZGkyLjAiLCBOVUxMLCAicm90YXJ5IiksCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY2MDkvY2xvY2suYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjYwOS9jbG9jay5jCmluZGV4IDU2MjAwZjMuLjI0NGZhNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjYwOS9jbG9jay5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjYwOS9jbG9jay5jCkBAIC0zNjMsNiArMzYzLDEyIEBACiAJLm9wcwkgICAgPSAmZHVtbXlfY2xrX29wcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaWNsayA9IHsKKwkubmFtZSAgICAgICA9ICJzcGkiLAorCS5wYXJlbnQgICAgID0gJnNjbGsxLAorCS5vcHMgICAgICAgID0gJmR1bW15X2Nsa19vcHMsCit9OworCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgYmY2MDlfY2xrc1tdID0gewogCUNMSyhzeXNfY2xraW4sIE5VTEwsICJTWVNfQ0xLSU4iKSwKIAlDTEsocGxsX2NsaywgTlVMTCwgIlBMTENMSyIpLApAQCAtMzc1LDYgKzM4MSw3IEBACiAJQ0xLKGRjbGssIE5VTEwsICJEQ0xLIiksCiAJQ0xLKG9jbGssIE5VTEwsICJPQ0xLIiksCiAJQ0xLKGV0aGNsaywgTlVMTCwgInN0bW1hY2V0aCIpLAorCUNMSyhzcGljbGssIE5VTEwsICJzcGkiKSwKIH07CiAKIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYzZ4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9jNngvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggMGJlYzdlNS4uZjBhYjAxMiAxMDA2NDQKLS0tIGEvYXJjaC9jNngvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9jNngvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTE0LDE0ICsxNCw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLS8qCi0gKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KLSAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBiYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKSAgYmFycmllcigpCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIFdlIGFyZSBsdWNreSwgRFNQIGlzIHBlcmZlY3QgZm9yIGJpdG9wczogZG8gaXQgaW4gMyBjeWNsZXMKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAxMDU2YTVkLi5hYTQyOWJhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC03LDYgKzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KICNpbmNsdWRlIDxhcmNoL2F0b21pYy5oPgorI2luY2x1ZGUgPGFyY2gvc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCkBAIC0xNTEsMTAgKzE1Myw0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpICAgIGJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKSAgICAgYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKSAgICBiYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkgICAgIGJhcnJpZXIoKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCAwNTNjMTdiLi5iZDQ5YTU0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXJjaC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKIC8qCiAgKiBzZXRfYml0IC0gQXRvbWljYWxseSBzZXQgYSBiaXQgaW4gbWVtb3J5CkBAIC00Miw3ICs0Myw3IEBACiAgKgogICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKICAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCi0gKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBhbmQvb3Igc21wX21iX19hZnRlcl9hdG9taWMoKQogICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KICAqLwogCkBAIC04NCwxMiArODUsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qCi0gKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KLSAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSAgICAgIGJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpICAgICAgIGJhcnJpZXIoKQotCiAvKioKICAqIHRlc3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQogICogQG5yOiBCaXQgdG8gY2xlYXIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBmNjY2NzM0Li5jYzIzOTljIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0yMCw3ICsyMCw2IEBACiBzdHJ1Y3QgcGNpX2J1cyAqIHBjaWJpb3Nfc2Nhbl9yb290KGludCBidXMpOwogCiB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpOwogc3RydWN0IGlycV9yb3V0aW5nX3RhYmxlICpwY2liaW9zX2dldF9pcnFfcm91dGluZ190YWJsZSh2b2lkKTsKIGludCBwY2liaW9zX3NldF9pcnFfcm91dGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGluLCBpbnQgaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBiODYzMjlkLi5mNmMzYTE2IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3Nwci1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yIG5vdCBTTVAgc2FmZQpAQCAtMjksMTIgKzMwLDYgQEAKICAqIFdlIGRvIG5vdCBoYXZlIFNNUCBzeXN0ZW1zLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCB0aGF0LgogICovCiAKLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJCXsgKGkpIH0KICNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgqKHZvbGF0aWxlIGludCAqKSYodiktPmNvdW50ZXIpCiAjZGVmaW5lIGF0b21pY19zZXQodiwgaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA1N2JmODVkLi45NmRlMjIwIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjUsMTIgKzI1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KIAotLyoKLSAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLgotICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotCiAjaWZuZGVmIENPTkZJR19GUlZfT1VUT0ZMSU5FX0FUT01JQ19PUFMKIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgYXRvbWljX3Rlc3RfYW5kX0FORE5PVF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdikKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggZWYwM2JhZi4uMjAzNWE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTI0LDggKzI0LDYgQEAKIAogZXh0ZXJuIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCi1leHRlcm4gdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSk7Ci0KICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gdm9pZCAqY29uc2lzdGVudF9hbGxvYyhnZnBfdCBnZnAsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKIGV4dGVybiB2b2lkIGNvbnNpc3RlbnRfZnJlZSh2b2lkICp2YWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWlycS5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1pcnEuYwppbmRleCBjNjc3YjlkLi4xYzM1YzkzIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWlycS5jCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktaXJxLmMKQEAgLTU1LDEwICs1NSw2IEBACiAJfQogfQogCi12b2lkIF9faW5pdCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKLXsKLX0KLQogdm9pZCBwY2liaW9zX2VuYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAxN2RjNjM3Li5kZTkxNmIxIDEwMDY0NAotLS0gYS9hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2RlZmluZSBBVE9NSUNfSU5JVChpKQkJeyAoaSkgfQogCkBAIC0xNzYsOSArMTc3LDQgQEAKICNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQogI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggOWIxZTRhZi4uNWU0YTU5YiAxMDA2NDQKLS0tIGEvYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjUsMTIgKzI1LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCi0KIC8qCiAgKiBUaGUgb2Zmc2V0IGNhbGN1bGF0aW9ucyBmb3IgdGhlc2UgYXJlIGJhc2VkIG9uIEJJVFNfUEVSX0xPTkcgPT0gMzIKICAqIChpLmUuIEkgZ2V0IHRvIHNoaWZ0IGJ5ICM1LTIgKDMyIGJpdHMgcGVyIGxvbmcsIDQgYnl0ZXMgcGVyIGFjY2VzcyksCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwppbmRleCBjZjU5OTNmLi40YzRhYzE2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKQEAgLTc1LDcgKzc1LDYgQEAKIENPTkZJR19TTkRfQ1M0MjgxPW0KIENPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX1VIQ0lfSENEPW0KIENPTkZJR19VU0JfQUNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKaW5kZXggYjRlZmFmMi4uZThlZDNhZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKQEAgLTE0Myw3ICsxNDMsNiBAQAogQ09ORklHX0hJRF9TT05ZPW0KIENPTkZJR19ISURfU1VOUExVUz1tCiBDT05GSUdfVVNCPW0KLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049bQogQ09ORklHX1VTQl9FSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEPW0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnCmluZGV4IGY2NDk4MGQuLmQ2NjNlZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZwpAQCAtMTI2LDcgKzEyNiw2IEBACiBDT05GSUdfU05EX0VNVTEwSzE9bQogQ09ORklHX1NORF9GTTgwMT1tCiBDT05GSUdfVVNCPW0KLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049bQogQ09ORklHX1VTQl9FSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEPW0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwppbmRleCAwZmVkOWFlLi5jOGEzZjQwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCkBAIC0xMDIsNyArMTAyLDYgQEAKIENPTkZJR19EUk1fTUdBPW0KIENPTkZJR19EUk1fU0lTPW0KIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9VSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggNmU2ZmUxOC4uMGY4YmY0OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKIAogI2RlZmluZSBBVE9NSUNfSU5JVChpKQkJeyAoaSkgfQpAQCAtMjA4LDEwICsyMDksNCBAQAogI2RlZmluZSBhdG9taWM2NF9pbmModikJCQlhdG9taWM2NF9hZGQoMSwgKHYpKQogI2RlZmluZSBhdG9taWM2NF9kZWModikJCQlhdG9taWM2NF9zdWIoMSwgKHYpKQogCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCiAjZW5kaWYgLyogX0FTTV9JQTY0X0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2JhcnJpZXIuaAppbmRleCBkMGE2OWFhLi5hNDg5NTdjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTU1LDYgKzU1LDkgQEAKIAogI2VuZGlmCiAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkJYmFycmllcigpCisKIC8qCiAgKiBJQTY0IEdDQyB0dXJucyB2b2xhdGlsZSBzdG9yZXMgaW50byBzdC5yZWwgYW5kIHZvbGF0aWxlIGxvYWRzIGludG8gbGQuYWNxIG5vCiAgKiBuZWVkIGZvciBhc20gdHJpY2tlcnkhCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggYzI3ZWNjZC4uNzFlODE0NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKIC8qKgogICogc2V0X2JpdCAtIEF0b21pY2FsbHkgc2V0IGEgYml0IGluIG1lbW9yeQpAQCAtNjUsMTIgKzY2LDYgQEAKIAkqKChfX3UzMiAqKSBhZGRyICsgKG5yID4+IDUpKSB8PSAoMSA8PCAobnIgJiAzMSkpOwogfQogCi0vKgotICogY2xlYXJfYml0KCkgaGFzICJhY3F1aXJlIiBzZW1hbnRpY3MuCi0gKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlkbyB7IC8qIHNraXAgKi87IH0gd2hpbGUgKDApCi0KIC8qKgogICogY2xlYXJfYml0IC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQogICogQG5yOiBCaXQgdG8gY2xlYXIKQEAgLTc4LDcgKzczLDcgQEAKICAqCiAgKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcwogICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKLSAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2F0b21pYygpCiAgKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggN2Q0MWNjMC4uNTJhZjVlZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNTAsMTIgKzUwLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGlhNjRfbWF4X2lvbW11X21lcmdlX21hc2s7CiAjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKGlhNjRfbWF4X2lvbW11X21lcmdlX21hc2sgPT0gfjBVTCkKIAotc3RhdGljIGlubGluZSB2b2lkCi1wY2liaW9zX3BlbmFsaXplX2lzYV9pcnEgKGludCBpcnEsIGludCBhY3RpdmUpCi17Ci0JLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KLX0KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDU5NTdjZjYuLjViMTc0MTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMDcsNiArMTA3LDcgQEAKICNkZWZpbmUgVElGX01DQV9JTklUCQkxOAkvKiB0aGlzIHRhc2sgaXMgcHJvY2Vzc2luZyBNQ0Egb3IgSU5JVCAqLwogI2RlZmluZSBUSUZfREJfRElTQUJMRUQJCTE5CS8qIGRlYnVnIHRyYXAgZGlzYWJsZWQgZm9yIGZzeXNjYWxsICovCiAjZGVmaW5lIFRJRl9SRVNUT1JFX1JTRQkJMjEJLyogdXNlciBSQlMgaXMgbmV3ZXIgdGhhbiBrZXJuZWwgUkJTICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkyMgkvKiBpZGxlIGlzIHBvbGxpbmcgZm9yIFRJRl9ORUVEX1JFU0NIRUQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKQEAgLTExOCw2ICsxMTksNyBAQAogI2RlZmluZSBfVElGX01DQV9JTklUCQkoMSA8PCBUSUZfTUNBX0lOSVQpCiAjZGVmaW5lIF9USUZfREJfRElTQUJMRUQJKDEgPDwgVElGX0RCX0RJU0FCTEVEKQogI2RlZmluZSBfVElGX1JFU1RPUkVfUlNFCSgxIDw8IFRJRl9SRVNUT1JFX1JTRSkKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAKIC8qICJ3b3JrIHRvIGRvIG9uIHVzZXItcmV0dXJuIiBiaXRzICovCiAjZGVmaW5lIFRJRl9BTExXT1JLX01BU0sJKF9USUZfU0lHUEVORElOR3xfVElGX05PVElGWV9SRVNVTUV8X1RJRl9TWVNDQUxMX0FVRElUfFwKQEAgLTEyNSw3ICsxMjcsNiBAQAogLyogbGlrZSBUSUZfQUxMV09SS19CSVRTIGJ1dCBzYW5zIFRJRl9TWVNDQUxMX1RSQUNFIG9yIFRJRl9TWVNDQUxMX0FVRElUICovCiAjZGVmaW5lIFRJRl9XT1JLX01BU0sJCShUSUZfQUxMV09SS19NQVNLJn4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVCkpCiAKLSNkZWZpbmUgVFNfUE9MTElORwkJMSAJLyogdHJ1ZSBpZiBpbiBpZGxlIGxvb3AgYW5kIG5vdCBzbGVlcGluZyAqLwogI2RlZmluZSBUU19SRVNUT1JFX1NJR01BU0sJMgkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDVjYjU1YTEuLjMyMDJhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC00NiwzMCArNDYsNiBAQAogCiB2b2lkIGJ1aWxkX2NwdV90b19ub2RlX21hcCh2b2lkKTsKIAotI2RlZmluZSBTRF9DUFVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAotCS5wYXJlbnQJCQk9IE5VTEwsCQkJXAotCS5jaGlsZAkJCT0gTlVMTCwJCQlcCi0JLmdyb3VwcwkJCT0gTlVMTCwJCQlcCi0JLm1pbl9pbnRlcnZhbAkJPSAxLAkJCVwKLQkubWF4X2ludGVydmFsCQk9IDQsCQkJXAotCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQlcCi0JLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKLQkuY2FjaGVfbmljZV90cmllcwk9IDIsCQkJXAotCS5idXN5X2lkeAkJPSAyLAkJCVwKLQkuaWRsZV9pZHgJCT0gMSwJCQlcCi0JLm5ld2lkbGVfaWR4CQk9IDAsCQkJXAotCS53YWtlX2lkeAkJPSAwLAkJCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IDAsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfTkVXSURMRQlcCi0JCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAotCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKLQkJCQl8IFNEX1dBS0VfQUZGSU5FLAlcCi0JLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCi0JLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCi19Ci0KICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vY21weGNoZy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vY21weGNoZy5oCmluZGV4IDRmMzdkYmIuLmYzNTEwOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL3VhcGkvYXNtL2NtcHhjaGcuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS9jbXB4Y2hnLmgKQEAgLTExOCw2ICsxMTgsMTUgQEAKICNkZWZpbmUgY21weGNoZ19yZWwocHRyLCBvLCBuKQlcCiAJaWE2NF9jbXB4Y2hnKHJlbCwgKHB0ciksIChvKSwgKG4pLCBzaXplb2YoKihwdHIpKSkKIAorLyoKKyAqIFdvcnNlIHN0aWxsIC0gZWFybHkgcHJvY2Vzc29yIGltcGxlbWVudGF0aW9ucyBhY3R1YWxseSBqdXN0IGlnbm9yZWQKKyAqIHRoZSBhY3F1aXJlL3JlbGVhc2UgYW5kIGRpZCBhIGZ1bGwgZmVuY2UgYWxsIHRoZSB0aW1lLiAgVW5mb3J0dW5hdGVseQorICogdGhpcyBtZWFudCBhIGxvdCBvZiBiYWRseSB3cml0dGVuIGNvZGUgdGhhdCB1c2VkIC5hY3Egd2hlbiB0aGV5IHJlYWxseQorICogd2FudGVkIC5yZWwgYmVjYW1lIGxlZ2FjeSBvdXQgaW4gdGhlIHdpbGQgLSBzbyB3aGVuIHdlIG1hZGUgYSBjcHUKKyAqIHRoYXQgc3RyaWN0bHkgZGlkIHRoZSAuYWNxIG9yIC5yZWwgLi4uIGFsbCB0aGF0IGNvZGUgc3RhcnRlZCBicmVha2luZyAtIHNvCisgKiB3ZSBoYWQgdG8gYmFjay1wZWRhbCBhbmQga2VlcCB0aGUgImxlZ2FjeSIgYmVoYXZpb3Igb2YgYSBmdWxsIGZlbmNlIDotKAorICovCisKIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgcGxhdGZvcm1zOiAqLwogI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJY21weGNoZ19hY3EoKHB0ciksIChvKSwgKG4pKQogI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQljbXB4Y2hnX2FjcSgocHRyKSwgKG8pLCAobikpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL2ZpeHVwLmMgYi9hcmNoL2lhNjQvcGNpL2ZpeHVwLmMKaW5kZXggZWVlMDY5YS4uMWZlOWFhNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaWE2NC9wY2kvZml4dXAuYwpAQCAtNDksOSArNDksNyBAQAogCQkgKiB0eXBlIEJSSURHRSwgb3IgQ0FSREJVUy4gSG9zdCB0byBQQ0kgY29udHJvbGxlcnMgdXNlCiAJCSAqIFBDSSBoZWFkZXIgdHlwZSBOT1JNQUwuCiAJCSAqLwotCQlpZiAoYnJpZGdlCi0JCSAgICAmJigoYnJpZGdlLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKQotCQkgICAgICAgfHwoYnJpZGdlLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykpKSB7CisJCWlmIChicmlkZ2UgJiYgKHBjaV9pc19icmlkZ2UoYnJpZGdlKSkpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0JSSURHRV9DT05UUk9MLAogCQkJCQkJJmNvbmZpZyk7CiAJCQlpZiAoIShjb25maWcgJiBQQ0lfQlJJREdFX0NUTF9WR0EpKQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDBkODE2OTcuLjhhZDBlZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KICNpbmNsdWRlIDxhc20vZGNhY2hlX2NsZWFyLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCkBAIC0zMDgsMTAgKzMwOSw0IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiBtMzJyICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KICNlbmRpZgkvKiBfQVNNX00zMlJfQVRPTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBkM2RlYTlhLi44NmJhMmI0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9kY2FjaGVfY2xlYXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAvKgogICogVGhlc2UgaGF2ZSB0byBiZSBkb25lIHdpdGggaW5saW5lIGFzc2VtYmx5OiB0aGF0IHdheSB0aGUgYml0LXNldHRpbmcKQEAgLTczLDcgKzc0LDcgQEAKICAqCiAgKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcwogICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKLSAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2F0b21pYygpCiAgKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQpAQCAtMTAzLDkgKzEwNCw2IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotCiAvKioKICAqIGNoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5CiAgKiBAbnI6IEJpdCB0byBjbGVhcgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcuZGVidWcgYi9hcmNoL202OGsvS2NvbmZpZy5kZWJ1ZwppbmRleCAyMjk2ODI3Li42NDc3NmQ3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL202OGsvS2NvbmZpZy5kZWJ1ZwpAQCAtMTIsMTIgKzEyLDE3IEBACiAKIGNvbmZpZyBFQVJMWV9QUklOVEsKIAlib29sICJFYXJseSBwcmludGsiCi0JZGVwZW5kcyBvbiBNVk1FMTZ4IHx8IE1BQworCWRlcGVuZHMgb24gIShTVU4zIHx8IE02ODM2MCB8fCBNNjgwMDAgfHwgQ09MREZJUkUpCiAJaGVscAogICAgICAgICAgIFdyaXRlIGtlcm5lbCBsb2cgb3V0cHV0IGRpcmVjdGx5IHRvIGEgc2VyaWFsIHBvcnQuCisgICAgICAgICAgV2hlcmUgaW1wbGVtZW50ZWQsIG91dHB1dCBnb2VzIHRvIHRoZSBmcmFtZWJ1ZmZlciBhcyB3ZWxsLgorICAgICAgICAgIFBST00gY29uc29sZSBmdW5jdGlvbmFsaXR5IG9uIFN1biAzeCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24uCisKKyAgICAgICAgICBQYXNzICJlYXJseXByaW50ayIgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gZ2V0IGEKKyAgICAgICAgICBib290IGNvbnNvbGUuCiAKICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBmb3Iga2VybmVsIGRlYnVnZ2luZyB3aGVuIHlvdXIgbWFjaGluZSBjcmFzaGVzIHZlcnkKLSAgICAgICAgICBlYXJseSBiZWZvcmUgdGhlIGNvbnNvbGUgY29kZSBpcyBpbml0aWFsaXplZC4KKyAgICAgICAgICBlYXJseSwgaS5lLiBiZWZvcmUgdGhlIG5vcm1hbCBjb25zb2xlIGRyaXZlciBpcyBsb2FkZWQuCiAgICAgICAgICAgWW91IHNob3VsZCBub3JtYWxseSBzYXkgTiBoZXJlLCB1bmxlc3MgeW91IHdhbnQgdG8gZGVidWcgc3VjaCBhIGNyYXNoLgogCiBpZiAhTU1VCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvYW1pc291bmQuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCmluZGV4IDI1NTllZWYuLjkwYTYwZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCkBAIC01MSw3ICs1MSw3IEBACiAKIAlzbmRfZGF0YSA9IGFtaWdhX2NoaXBfYWxsb2NfcmVzKHNpemVvZihzaW5lX2RhdGEpLCAmYmVlcF9yZXMpOwogCWlmICghc25kX2RhdGEpIHsKLQkJcHJpbnRrIChLRVJOX0NSSVQgImFtaWdhIGluaXRfc291bmQ6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaGlwbWVtXG4iKTsKKwkJcHJfY3JpdCgiYW1pZ2EgaW5pdF9zb3VuZDogZmFpbGVkIHRvIGFsbG9jYXRlIGNoaXBtZW1cbiIpOwogCQlyZXR1cm47CiAJfQogCW1lbWNweSAoc25kX2RhdGEsIHNpbmVfZGF0YSwgc2l6ZW9mKHNpbmVfZGF0YSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IDk2MjViNzEuLjAxNjkzZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkJZGV2LT5ib2FyZGFkZHIgPSBiZTMyX3RvX2NwdShjZC0+Y2RfQm9hcmRBZGRyKTsKIAkJCWRldi0+Ym9hcmRzaXplID0gYmUzMl90b19jcHUoY2QtPmNkX0JvYXJkU2l6ZSk7CiAJCX0gZWxzZQotCQkJcHJpbnRrKCJhbWlnYV9wYXJzZV9ib290aW5mbzogdG9vIG1hbnkgQXV0b0NvbmZpZyBkZXZpY2VzXG4iKTsKKwkJCXByX3dhcm4oImFtaWdhX3BhcnNlX2Jvb3RpbmZvOiB0b28gbWFueSBBdXRvQ29uZmlnIGRldmljZXNcbiIpOwogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCQlicmVhazsKIApAQCAtMjA5LDkgKzIwOSw5IEBACiAKIAltZW1zZXQoJmFtaWdhX2h3X3ByZXNlbnQsIDAsIHNpemVvZihhbWlnYV9od19wcmVzZW50KSk7CiAKLQlwcmludGsoIkFtaWdhIGhhcmR3YXJlIGZvdW5kOiAiKTsKKwlwcl9pbmZvKCJBbWlnYSBoYXJkd2FyZSBmb3VuZDogIik7CiAJaWYgKGFtaWdhX21vZGVsID49IEFNSV81MDAgJiYgYW1pZ2FfbW9kZWwgPD0gQU1JX0RSQUNPKSB7Ci0JCXByaW50aygiWyVzXSAiLCBhbWlnYV9tb2RlbHNbYW1pZ2FfbW9kZWwtQU1JXzUwMF0pOworCQlwcl9jb250KCJbJXNdICIsIGFtaWdhX21vZGVsc1thbWlnYV9tb2RlbC1BTUlfNTAwXSk7CiAJCXN0cmNhdChhbWlnYV9tb2RlbF9uYW1lLCBhbWlnYV9tb2RlbHNbYW1pZ2FfbW9kZWwtQU1JXzUwMF0pOwogCX0KIApAQCAtMzIyLDcgKzMyMiw3IEBACiAKICNkZWZpbmUgQU1JR0FIV19BTk5PVU5DRShuYW1lLCBzdHIpCQlcCiAJaWYgKEFNSUdBSFdfUFJFU0VOVChuYW1lKSkJCVwKLQkJcHJpbnRrKHN0cikKKwkJcHJfY29udChzdHIpCiAKIAlBTUlHQUhXX0FOTk9VTkNFKEFNSV9WSURFTywgIlZJREVPICIpOwogCUFNSUdBSFdfQU5OT1VOQ0UoQU1JX0JMSVRURVIsICJCTElUVEVSICIpOwpAQCAtMzU0LDggKzM1NCw4IEBACiAJQU1JR0FIV19BTk5PVU5DRShNQUdJQ19SRUtJQ0ssICJNQUdJQ19SRUtJQ0sgIik7CiAJQU1JR0FIV19BTk5PVU5DRShQQ01DSUEsICJQQ01DSUEgIik7CiAJaWYgKEFNSUdBSFdfUFJFU0VOVChaT1JSTykpCi0JCXByaW50aygiWk9SUk8lcyAiLCBBTUlHQUhXX1BSRVNFTlQoWk9SUk8zKSA/ICIzIiA6ICIiKTsKLQlwcmludGsoIlxuIik7CisJCXByX2NvbnQoIlpPUlJPJXMgIiwgQU1JR0FIV19QUkVTRU5UKFpPUlJPMykgPyAiMyIgOiAiIik7CisJcHJfY29udCgiXG4iKTsKIAogI3VuZGVmIEFNSUdBSFdfQU5OT1VOQ0UKIH0KQEAgLTQyNCw3ICs0MjQsNyBAQAogCQkJaWYgKG02OGtfbWVtb3J5W2ldLmFkZHIgPCAxNioxMDI0KjEwMjQpIHsKIAkJCQlpZiAoaSA9PSAwKSB7CiAJCQkJCS8qIGRvbid0IGN1dCBvZmYgdGhlIGJyYW5jaCB3ZSdyZSBzaXR0aW5nIG9uICovCi0JCQkJCXByaW50aygiV2FybmluZzoga2VybmVsIHJ1bnMgaW4gWm9ycm8gSUkgbWVtb3J5XG4iKTsKKwkJCQkJcHJfd2FybigiV2FybmluZzoga2VybmVsIHJ1bnMgaW4gWm9ycm8gSUkgbWVtb3J5XG4iKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCWRpc2FibGVkX3oybWVtICs9IG02OGtfbWVtb3J5W2ldLnNpemU7CkBAIC00MzUsOCArNDM1LDggQEAKIAkJCX0KIAkJfQogCQlpZiAoZGlzYWJsZWRfejJtZW0pCi0JCXByaW50aygiJWRLIG9mIFpvcnJvIElJIG1lbW9yeSB3aWxsIG5vdCBiZSB1c2VkIGFzIHN5c3RlbSBtZW1vcnlcbiIsCi0JCWRpc2FibGVkX3oybWVtPj4xMCk7CisJCQlwcl9pbmZvKCIlZEsgb2YgWm9ycm8gSUkgbWVtb3J5IHdpbGwgbm90IGJlIHVzZWQgYXMgc3lzdGVtIG1lbW9yeVxuIiwKKwkJCQlkaXNhYmxlZF96Mm1lbT4+MTApOwogCX0KIAogCS8qIHJlcXVlc3QgYWxsIFJBTSAqLwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJamlmZnlfdGlja3MgPSBESVZfUk9VTkRfQ0xPU0VTVChhbWlnYV9lY2xvY2ssIEhaKTsKIAogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZtYl9yZXNvdXJjZXMuX2NpYWIsICZzY2hlZF9yZXMpKQotCQlwcmludGsoIkNhbm5vdCBhbGxvY2F0ZSBjaWFiLnRhe2xvLGhpfVxuIik7CisJCXByX3dhcm4oIkNhbm5vdCBhbGxvY2F0ZSBjaWFiLnRhe2xvLGhpfVxuIik7CiAJY2lhYi5jcmEgJj0gMHhDMDsgICAvKiB0dXJuIG9mZiB0aW1lciBBLCBjb250aW51b3VzIG1vZGUsIGZyb20gRWNsayAqLwogCWNpYWIudGFsbyA9IGppZmZ5X3RpY2tzICUgMjU2OwogCWNpYWIudGFoaSA9IGppZmZ5X3RpY2tzIC8gMjU2OwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Fwb2xsby9jb25maWcuYyBiL2FyY2gvbTY4ay9hcG9sbG8vY29uZmlnLmMKaW5kZXggOTI2OGMwZjkuLjZlNjJkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hcG9sbG8vY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2Fwb2xsby9jb25maWcuYwpAQCAtNjUsOCArNjUsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG5fc2V0dXBfbW9kZWwodm9pZCkKIHsKLQlwcmludGsoIkFwb2xsbyBoYXJkd2FyZSBmb3VuZDogIik7Ci0JcHJpbnRrKCJbJXNdXG4iLCBhcG9sbG9fbW9kZWxzW2Fwb2xsb19tb2RlbCAtIEFQT0xMT19ETjMwMDBdKTsKKwlwcl9pbmZvKCJBcG9sbG8gaGFyZHdhcmUgZm91bmQ6IFslc11cbiIsCisJCWFwb2xsb19tb2RlbHNbYXBvbGxvX21vZGVsIC0gQVBPTExPX0ROMzAwMF0pOwogCiAJc3dpdGNoKGFwb2xsb19tb2RlbCkgewogCQljYXNlIEFQT0xMT19VTktOT1dOOgpAQCAtMTk3LDggKzE5NywxMCBAQAogCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwaWNhKzEpJj0ofjgpOwogCiAjaWYgMAotCXByaW50aygiKigweDEwODAzKSAlMDJ4XG4iLCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhcG9sbG9fdGltZXIgKyAweDMpKTsKLQlwcmludGsoIiooMHgxMDgwMykgJTAyeFxuIiwqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYXBvbGxvX3RpbWVyICsgMHgzKSk7CisJcHJfaW5mbygiKigweDEwODAzKSAlMDJ4XG4iLAorCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYXBvbGxvX3RpbWVyICsgMHgzKSk7CisJcHJfaW5mbygiKigweDEwODAzKSAlMDJ4XG4iLAorCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYXBvbGxvX3RpbWVyICsgMHgzKSk7CiAjZW5kaWYKIAogCWlmIChyZXF1ZXN0X2lycShJUlFfQVBPTExPLCBkbl90aW1lcl9pbnQsIDAsICJ0aW1lIiwgdGltZXJfcm91dGluZSkpCkBAIC0yMzYsMTIgKzIzOCwxMCBAQAogCiB9CiAKLWludCBkbl9kdW1teV9zZXRfY2xvY2tfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpIHsKLQotICBwcmludGsoInNldF9jbG9ja19tbXNzXG4iKTsKLQotICByZXR1cm4gMDsKLQoraW50IGRuX2R1bW15X3NldF9jbG9ja19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlwcl9pbmZvKCJzZXRfY2xvY2tfbW1zc1xuIik7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZG5fZHVtbXlfcmVzZXQodm9pZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0cmFtLmMgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwppbmRleCAwODEwYzhkLi41ZjhjYjVhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvc3RyYW0uYworKysgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwpAQCAtNDcsNiArNDcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwb29sX3NpemUgPSAxMDI0KjEwMjQ7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0cmFtX3ZpcnRfb2Zmc2V0OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdGFyaV9zdHJhbV9zZXR1cChjaGFyICphcmcpCiB7CkBAIC02NywxNCArNjgsMTIgQEAKIHZvaWQgX19pbml0IGF0YXJpX3N0cmFtX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKLQl2b2lkICpzdHJhbV9zdGFydDsKIAogCS8qCiAJICogZGV0ZXJtaW5lIHdoZXRoZXIga2VybmVsIGNvZGUgcmVzaWRlcyBpbiBTVC1SQU0KIAkgKiAodGhlbiBTVC1SQU0gaXMgdGhlIGZpcnN0IG1lbW9yeSBibG9jayBhdCB2aXJ0dWFsIDB4MCkKIAkgKi8KLQlzdHJhbV9zdGFydCA9IHBoeXNfdG9fdmlydCgwKTsKLQlrZXJuZWxfaW5fc3RyYW0gPSAoc3RyYW1fc3RhcnQgPT0gMCk7CisJa2VybmVsX2luX3N0cmFtID0gKG02OGtfbWVtb3J5WzBdLmFkZHIgPT0gMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyArK2kpIHsKIAkJaWYgKG02OGtfbWVtb3J5W2ldLmFkZHIgPT0gMCkgewpAQCAtODksMjYgKzg4LDY0IEBACiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNldHVwX2FyY2goKSB0byByZXNlcnZlIHRoZSBwYWdlcyBuZWVkZWQgZm9yCi0gKiBTVC1SQU0gbWFuYWdlbWVudC4KKyAqIFNULVJBTSBtYW5hZ2VtZW50LCBpZiB0aGUga2VybmVsIHJlc2lkZXMgaW4gU1QtUkFNLgogICovCiB2b2lkIF9faW5pdCBhdGFyaV9zdHJhbV9yZXNlcnZlX3BhZ2VzKHZvaWQgKnN0YXJ0X21lbSkKIHsKLQkvKgotCSAqIGFsd2F5cyByZXNlcnZlIGZpcnN0IHBhZ2Ugb2YgU1QtUkFNLCB0aGUgZmlyc3QgMiBLaUIgYXJlCi0JICogc3VwZXJ2aXNvci1vbmx5IQotCSAqLwotCWlmICgha2VybmVsX2luX3N0cmFtKQotCQlyZXNlcnZlX2Jvb3RtZW0oMCwgUEFHRV9TSVpFLCBCT09UTUVNX0RFRkFVTFQpOwotCi0Jc3RyYW1fcG9vbC5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMocG9vbF9zaXplKTsKLQlzdHJhbV9wb29sLmVuZCA9IHN0cmFtX3Bvb2wuc3RhcnQgKyBwb29sX3NpemUgLSAxOwotCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmc3RyYW1fcG9vbCk7Ci0KLQlwcl9kZWJ1ZygiYXRhcmlfc3RyYW0gcG9vbDogc2l6ZSA9ICVsdSBieXRlcywgcmVzb3VyY2UgPSAlcFJcbiIsCi0JCSBwb29sX3NpemUsICZzdHJhbV9wb29sKTsKKwlpZiAoa2VybmVsX2luX3N0cmFtKSB7CisJCXByX2RlYnVnKCJhdGFyaV9zdHJhbSBwb29sOiBrZXJuZWwgaW4gU1QtUkFNLCB1c2luZyBhbGxvY19ib290bWVtIVxuIik7CisJCXN0cmFtX3Bvb2wuc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHBvb2xfc2l6ZSk7CisJCXN0cmFtX3Bvb2wuZW5kID0gc3RyYW1fcG9vbC5zdGFydCArIHBvb2xfc2l6ZSAtIDE7CisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmc3RyYW1fcG9vbCk7CisJCXN0cmFtX3ZpcnRfb2Zmc2V0ID0gMDsKKwkJcHJfZGVidWcoImF0YXJpX3N0cmFtIHBvb2w6IHNpemUgPSAlbHUgYnl0ZXMsIHJlc291cmNlID0gJXBSXG4iLAorCQkJcG9vbF9zaXplLCAmc3RyYW1fcG9vbCk7CisJCXByX2RlYnVnKCJhdGFyaV9zdHJhbSBwb29sOiBzdHJhbV92aXJ0X29mZnNldCA9ICVseFxuIiwKKwkJCXN0cmFtX3ZpcnRfb2Zmc2V0KTsKKwl9CiB9CiAKIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGFyY2ggaW5pdGNhbGwgdG8gcmVzZXJ2ZSB0aGUgcGFnZXMgbmVlZGVkIGZvcgorICogU1QtUkFNIG1hbmFnZW1lbnQsIGlmIHRoZSBrZXJuZWwgZG9lcyBub3QgcmVzaWRlIGluIFNULVJBTS4KKyAqLworaW50IF9faW5pdCBhdGFyaV9zdHJhbV9tYXBfcGFnZXModm9pZCkKK3sKKwlpZiAoIWtlcm5lbF9pbl9zdHJhbSkgeworCQkvKgorCQkgKiBTa2lwIHBhZ2UgMCwgYXMgdGhlIGZoZSBmaXJzdCAyIEtpQiBhcmUgc3VwZXJ2aXNvci1vbmx5IQorCQkgKi8KKwkJcHJfZGVidWcoImF0YXJpX3N0cmFtIHBvb2w6IGtlcm5lbCBub3QgaW4gU1QtUkFNLCB1c2luZyBpb3JlbWFwIVxuIik7CisJCXN0cmFtX3Bvb2wuc3RhcnQgPSBQQUdFX1NJWkU7CisJCXN0cmFtX3Bvb2wuZW5kID0gc3RyYW1fcG9vbC5zdGFydCArIHBvb2xfc2l6ZSAtIDE7CisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmc3RyYW1fcG9vbCk7CisJCXN0cmFtX3ZpcnRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoc3RyYW1fcG9vbC5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKCZzdHJhbV9wb29sKSkgLSBzdHJhbV9wb29sLnN0YXJ0OworCQlwcl9kZWJ1ZygiYXRhcmlfc3RyYW0gcG9vbDogc2l6ZSA9ICVsdSBieXRlcywgcmVzb3VyY2UgPSAlcFJcbiIsCisJCQlwb29sX3NpemUsICZzdHJhbV9wb29sKTsKKwkJcHJfZGVidWcoImF0YXJpX3N0cmFtIHBvb2w6IHN0cmFtX3ZpcnRfb2Zmc2V0ID0gJWx4XG4iLAorCQkJc3RyYW1fdmlydF9vZmZzZXQpOworCX0KKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYXRhcmlfc3RyYW1fbWFwX3BhZ2VzKTsKKworCit2b2lkICphdGFyaV9zdHJhbV90b192aXJ0KHVuc2lnbmVkIGxvbmcgcGh5cykKK3sKKwlyZXR1cm4gKHZvaWQgKikocGh5cyArIHN0cmFtX3ZpcnRfb2Zmc2V0KTsKK30KK0VYUE9SVF9TWU1CT0woYXRhcmlfc3RyYW1fdG9fdmlydCk7CisKKwordW5zaWduZWQgbG9uZyBhdGFyaV9zdHJhbV90b19waHlzKHZvaWQgKnZpcnQpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSh2aXJ0IC0gc3RyYW1fdmlydF9vZmZzZXQpOworfQorRVhQT1JUX1NZTUJPTChhdGFyaV9zdHJhbV90b19waHlzKTsKKworCiB2b2lkICphdGFyaV9zdHJhbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMTM0LDE0ICsxNzEsMTQgQEAKIAl9CiAKIAlwcl9kZWJ1ZygiYXRhcmlfc3RyYW1fYWxsb2M6IHJldHVybmluZyAlcFJcbiIsIHJlcyk7Ci0JcmV0dXJuICh2b2lkICopcmVzLT5zdGFydDsKKwlyZXR1cm4gYXRhcmlfc3RyYW1fdG9fdmlydChyZXMtPnN0YXJ0KTsKIH0KIEVYUE9SVF9TWU1CT0woYXRhcmlfc3RyYW1fYWxsb2MpOwogCiAKIHZvaWQgYXRhcmlfc3RyYW1fZnJlZSh2b2lkICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylhZGRyOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhdGFyaV9zdHJhbV90b19waHlzKGFkZHIpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnCmluZGV4IDk2ZGE0OTYuLmQ3ZWFjODMzYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZwpAQCAtMTU5LDYgKzE1OSw3IEBACiBDT05GSUdfSVBfU0VUX0JJVE1BUF9JUE1BQz1tCiBDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUD1tCitDT05GSUdfSVBfU0VUX0hBU0hfSVBNQVJLPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQpAQCAtMjI3LDYgKzIyOCw3IEBACiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQogQ09ORklHX0JBVE1BTl9BRFZfTkM9eQorQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Q9eQogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKQEAgLTI3OSw2ICsyODEsNyBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCiBDT05GSUdfRE1fQ0FDSEU9bQorQ09ORklHX0RNX0VSQT1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9SQUlEPW0KIENPTkZJR19ETV9aRVJPPW0KQEAgLTMwNSw3ICszMDgsNiBAQAogQ09ORklHX0EyMDY1PXkKIENPTkZJR19BUklBRE5FPXkKICMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9IUCBpcyBub3Qgc2V0CkBAIC0zMTUsNiArMzE3LDcgQEAKIENPTkZJR19IWURSQT15CiBDT05GSUdfQVBORT15CiBDT05GSUdfWk9SUk84MzkwPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TTVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZwppbmRleCAxYjg3MzlmLi42NTBlZTc1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcKQEAgLTE1Nyw2ICsxNTcsNyBAQAogQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBNQUM9bQogQ09ORklHX0lQX1NFVF9CSVRNQVBfUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVA9bQorQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KQEAgLTIyNSw2ICsyMjYsNyBAQAogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKIENPTkZJR19CQVRNQU5fQURWX05DPXkKK0NPTkZJR19CQVRNQU5fQURWX01DQVNUPXkKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CkBAIC0yNjEsNiArMjYzLDcgQEAKIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fVEhJTl9QUk9WSVNJT05JTkc9bQogQ09ORklHX0RNX0NBQ0hFPW0KK0NPTkZJR19ETV9FUkE9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fUkFJRD1tCiBDT05GSUdfRE1fWkVSTz1tCkBAIC0yODQsMTIgKzI4NywxMiBAQAogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CiBDT05GSUdfVkVUSD1tCiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcKaW5kZXggNmVhNGU5MS4uMzE0MmU2OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZwpAQCAtMTU2LDYgKzE1Niw3IEBACiBDT05GSUdfSVBfU0VUX0JJVE1BUF9JUE1BQz1tCiBDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUD1tCitDT05GSUdfSVBfU0VUX0hBU0hfSVBNQVJLPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQpAQCAtMjI0LDYgKzIyNSw3IEBACiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQogQ09ORklHX0JBVE1BTl9BRFZfTkM9eQorQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Q9eQogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKQEAgLTI2OSw2ICsyNzEsNyBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCiBDT05GSUdfRE1fQ0FDSEU9bQorQ09ORklHX0RNX0VSQT1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9SQUlEPW0KIENPTkZJR19ETV9aRVJPPW0KQEAgLTI5MywxMSArMjk2LDExIEBACiBDT05GSUdfVkVUSD1tCiBDT05GSUdfQVRBUklMQU5DRT15CiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfVklBIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZwppbmRleCBlNWExMjczLi4wZGFhOGExIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnCkBAIC0xNTUsNiArMTU1LDcgQEAKIENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDPW0KIENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9JUE1BUks9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCkBAIC0yMjMsNiArMjI0LDcgQEAKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CiBDT05GSUdfQkFUTUFOX0FEVl9OQz15CitDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVD15CiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldApAQCAtMjYwLDYgKzI2Miw3IEBACiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX1RISU5fUFJPVklTSU9OSU5HPW0KIENPTkZJR19ETV9DQUNIRT1tCitDT05GSUdfRE1fRVJBPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1JBSUQ9bQogQ09ORklHX0RNX1pFUk89bQpAQCAtMjgzLDEyICsyODYsMTIgQEAKIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQogQ09ORklHX1ZFVEg9bQogIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CiBDT05GSUdfQlZNRTYwMDBfTkVUPXkKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnCmluZGV4IDg5MzZkN2YuLjg4YWY3OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcKQEAgLTE1Nyw2ICsxNTcsNyBAQAogQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBNQUM9bQogQ09ORklHX0lQX1NFVF9CSVRNQVBfUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVA9bQorQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KQEAgLTIyNSw2ICsyMjYsNyBAQAogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKIENPTkZJR19CQVRNQU5fQURWX05DPXkKK0NPTkZJR19CQVRNQU5fQURWX01DQVNUPXkKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CkBAIC0yNjEsNiArMjYzLDcgQEAKIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fVEhJTl9QUk9WSVNJT05JTkc9bQogQ09ORklHX0RNX0NBQ0hFPW0KK0NPTkZJR19ETV9FUkE9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fUkFJRD1tCiBDT05GSUdfRE1fWkVSTz1tCkBAIC0yODUsMTIgKzI4OCwxMiBAQAogQ09ORklHX1ZFVEg9bQogQ09ORklHX0hQTEFOQ0U9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKaW5kZXggYmU1MzQyYy4uNjZmOTE1NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCkBAIC0xNTYsNiArMTU2LDcgQEAKIENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDPW0KIENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9JUE1BUks9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCkBAIC0yMjcsNiArMjI4LDcgQEAKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CiBDT05GSUdfQkFUTUFOX0FEVl9OQz15CitDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVD15CiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldApAQCAtMjcwLDYgKzI3Miw3IEBACiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX1RISU5fUFJPVklTSU9OSU5HPW0KIENPTkZJR19ETV9DQUNIRT1tCitDT05GSUdfRE1fRVJBPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1JBSUQ9bQogQ09ORklHX0RNX1pFUk89bQpAQCAtMzAxLDcgKzMwNCw2IEBACiBDT05GSUdfVkVUSD1tCiBDT05GSUdfTUFDTUFDRT15CiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4OXgwPXkKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldApAQCAtMzA5LDYgKzMxMSw3IEBACiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDU09OSUM9eQogQ09ORklHX01BQzgzOTA9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NNU0MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwppbmRleCBmMjcxOTRhLi41ZWFhNDk5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCkBAIC0xNjUsNiArMTY1LDcgQEAKIENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDPW0KIENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9JUE1BUks9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCkBAIC0yMzYsNiArMjM3LDcgQEAKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CiBDT05GSUdfQkFUTUFOX0FEVl9OQz15CitDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVD15CiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldApAQCAtMzAyLDYgKzMwNCw3IEBACiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX1RISU5fUFJPVklTSU9OSU5HPW0KIENPTkZJR19ETV9DQUNIRT1tCitDT05GSUdfRE1fRVJBPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1JBSUQ9bQogQ09ORklHX0RNX1pFUk89bQpAQCAtMzQwLDcgKzM0Myw2IEBACiBDT05GSUdfU1VOM0xBTkNFPXkKIENPTkZJR19NQUNNQUNFPXkKICMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAogQ09ORklHX01BQzg5eDA9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9IUCBpcyBub3Qgc2V0CkBAIC0zNTQsNiArMzU2LDcgQEAKIENPTkZJR19ORTIwMDA9bQogQ09ORklHX0FQTkU9eQogQ09ORklHX1pPUlJPODM5MD15CisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnCmluZGV4IGMzODg3NjAuLjMyNGQwYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnCkBAIC0xNTQsNiArMTU0LDcgQEAKIENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDPW0KIENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9JUE1BUks9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCkBAIC0yMjIsNiArMjIzLDcgQEAKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CiBDT05GSUdfQkFUTUFOX0FEVl9OQz15CitDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVD15CiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldApAQCAtMjU5LDYgKzI2MSw3IEBACiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX1RISU5fUFJPVklTSU9OSU5HPW0KIENPTkZJR19ETV9DQUNIRT1tCitDT05GSUdfRE1fRVJBPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1JBSUQ9bQogQ09ORklHX0RNX1pFUk89bQpAQCAtMjgzLDEyICsyODYsMTIgQEAKIENPTkZJR19WRVRIPW0KIENPTkZJR19NVk1FMTQ3X05FVD15CiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnCmluZGV4IGY3ZmY3ODQuLmYwY2I0MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnCkBAIC0xNTUsNiArMTU1LDcgQEAKIENPTkZJR19JUF9TRVRfQklUTUFQX0lQTUFDPW0KIENPTkZJR19JUF9TRVRfQklUTUFQX1BPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9JUE1BUks9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCkBAIC0yMjMsNiArMjI0LDcgQEAKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CiBDT05GSUdfQkFUTUFOX0FEVl9OQz15CitDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVD15CiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldApAQCAtMjYwLDYgKzI2Miw3IEBACiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX1RISU5fUFJPVklTSU9OSU5HPW0KIENPTkZJR19ETV9DQUNIRT1tCitDT05GSUdfRE1fRVJBPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1JBSUQ9bQogQ09ORklHX0RNX1pFUk89bQpAQCAtMjgzLDEyICsyODYsMTIgQEAKIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQogQ09ORklHX1ZFVEg9bQogIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CiBDT05GSUdfTVZNRTE2eF9ORVQ9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZwppbmRleCBmMGM3MmFiLi5kNmNmMDg4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWcKQEAgLTE1NSw2ICsxNTUsNyBAQAogQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBNQUM9bQogQ09ORklHX0lQX1NFVF9CSVRNQVBfUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVA9bQorQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KQEAgLTIyMyw2ICsyMjQsNyBAQAogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKIENPTkZJR19CQVRNQU5fQURWX05DPXkKK0NPTkZJR19CQVRNQU5fQURWX01DQVNUPXkKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CkBAIC0yNjYsNiArMjY4LDcgQEAKIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fVEhJTl9QUk9WSVNJT05JTkc9bQogQ09ORklHX0RNX0NBQ0hFPW0KK0NPTkZJR19ETV9FUkE9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fUkFJRD1tCiBDT05GSUdfRE1fWkVSTz1tCkBAIC0yOTEsNyArMjk0LDYgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQ0lSUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfSFAgaXMgbm90IHNldApAQCAtMjk5LDYgKzMwMSw3IEBACiAjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAogQ09ORklHX05FMjAwMD1tCisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZwppbmRleCA3YmNhMGY0Li5mNGU4OGQxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZwpAQCAtMTUyLDYgKzE1Miw3IEBACiBDT05GSUdfSVBfU0VUX0JJVE1BUF9JUE1BQz1tCiBDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUD1tCitDT05GSUdfSVBfU0VUX0hBU0hfSVBNQVJLPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQpAQCAtMjIwLDYgKzIyMSw3IEBACiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQogQ09ORklHX0JBVE1BTl9BRFZfTkM9eQorQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Q9eQogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKQEAgLTI1Nyw2ICsyNTksNyBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCiBDT05GSUdfRE1fQ0FDSEU9bQorQ09ORklHX0RNX0VSQT1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9SQUlEPW0KIENPTkZJR19ETV9aRVJPPW0KQEAgLTI4MSwxMSArMjg0LDExIEBACiBDT05GSUdfVkVUSD1tCiBDT05GSUdfU1VOM0xBTkNFPXkKICMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKIENPTkZJR19TVU4zXzgyNTg2PXkKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVU4gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnCmluZGV4IDMxN2YzZTEuLjQ5ZjQwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWcKQEAgLTE1Miw2ICsxNTIsNyBAQAogQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBNQUM9bQogQ09ORklHX0lQX1NFVF9CSVRNQVBfUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVA9bQorQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KQEAgLTIyMCw2ICsyMjEsNyBAQAogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKIENPTkZJR19CQVRNQU5fQURWX05DPXkKK0NPTkZJR19CQVRNQU5fQURWX01DQVNUPXkKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CkBAIC0yNTcsNiArMjU5LDcgQEAKIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fVEhJTl9QUk9WSVNJT05JTkc9bQogQ09ORklHX0RNX0NBQ0hFPW0KK0NPTkZJR19ETV9FUkE9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fUkFJRD1tCiBDT05GSUdfRE1fWkVSTz1tCkBAIC0yODEsMTIgKzI4NCwxMiBAQAogQ09ORklHX1ZFVEg9bQogQ09ORklHX1NVTjNMQU5DRT15CiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1ZJQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvY29uZmlnLmMgYi9hcmNoL202OGsvaHAzMDAvY29uZmlnLmMKaW5kZXggMmU1YTc4Ny4uYTliZWZlNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2hwMzAwL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9ocDMwMC9jb25maWcuYwpAQCAtODcsNyArODcsNyBAQAogCQkvKiBzZXJpYWwgcG9ydCBhZGRyZXNzOiBpZ25vcmVkIGhlcmUgKi8KIAkJYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKKwlkZWZhdWx0OgogCQl1bmtub3duID0gMTsKIAl9CiAKQEAgLTI2MiwxMSArMjYyLDEyIEBACiAjZW5kaWYKIAltYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CiAKLQlpZiAoaHAzMDBfbW9kZWwgPj0gSFBfMzMwICYmIGhwMzAwX21vZGVsIDw9IEhQXzQzM1MgJiYgaHAzMDBfbW9kZWwgIT0gSFBfMzUwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkIEhQOTAwMCBtb2RlbCAlc1xuIiwgaHAzMDBfbW9kZWxzW2hwMzAwX21vZGVsLUhQXzMyMF0pOworCWlmIChocDMwMF9tb2RlbCA+PSBIUF8zMzAgJiYgaHAzMDBfbW9kZWwgPD0gSFBfNDMzUyAmJgorCSAgICBocDMwMF9tb2RlbCAhPSBIUF8zNTApIHsKKwkJcHJfaW5mbygiRGV0ZWN0ZWQgSFA5MDAwIG1vZGVsICVzXG4iLAorCQkJaHAzMDBfbW9kZWxzW2hwMzAwX21vZGVsLUhQXzMyMF0pOwogCQlzdHJjYXQoaHAzMDBfbW9kZWxfbmFtZSwgaHAzMDBfbW9kZWxzW2hwMzAwX21vZGVsLUhQXzMyMF0pOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlwYW5pYygiVW5rbm93biBIUDkwMDAgTW9kZWwiKTsKIAl9CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaV9zdHJhbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0cmFtLmgKaW5kZXggNjJlMjc1OS4uNGU3NzFjMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0cmFtLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0cmFtLmgKQEAgLTgsNiArOCw4IEBACiAvKiBwdWJsaWMgaW50ZXJmYWNlICovCiB2b2lkICphdGFyaV9zdHJhbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKTsKIHZvaWQgYXRhcmlfc3RyYW1fZnJlZSh2b2lkICopOwordm9pZCAqYXRhcmlfc3RyYW1fdG9fdmlydCh1bnNpZ25lZCBsb25nIHBoeXMpOwordW5zaWduZWQgbG9uZyBhdGFyaV9zdHJhbV90b19waHlzKHZvaWQgKik7CiAKIC8qIGZ1bmN0aW9ucyBjYWxsZWQgaW50ZXJuYWxseSBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsICovCiB2b2lkIGF0YXJpX3N0cmFtX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZjRlMzJkZS4uNTU2OTUyMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAvKgogICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKQEAgLTIwOSwxMSArMjEwLDQgQEAKIAlyZXR1cm4gYzsKIH0KIAotCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCiAjZW5kaWYgLyogX19BUkNIX002OEtfQVRPTUlDIF9fICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggYzZiYWE5MS4uYjRhOWIwZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTMsNiArMTMsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKIC8qCiAgKglCaXQgYWNjZXNzIGZ1bmN0aW9ucyB2YXJ5IGFjcm9zcyB0aGUgQ29sZEZpcmUgYW5kIDY4ayBmYW1pbGllcy4KQEAgLTY3LDEyICs2OCw2IEBACiAjZGVmaW5lIF9fc2V0X2JpdChuciwgdmFkZHIpCXNldF9iaXQobnIsIHZhZGRyKQogCiAKLS8qCi0gKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KLSAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKLQogc3RhdGljIGlubGluZSB2b2lkIGJjbHJfcmVnX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQogewogCWNoYXIgKnAgPSAoY2hhciAqKXZhZGRyICsgKG5yIF4gMzEpIC8gODsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI1eHNpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjV4c2ltLmgKaW5kZXggZTMzZjViYi4uZjE4NjQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjV4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjV4c2ltLmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogLyoKICAqCVFTUEkgbW9kdWxlLgogICovCi0jZGVmaW5lIE1DRlFTUElfQkFTRQkJKE1DRl9NQkFSICsgMHgzMDApCS8qIEJhc2UgYWRkcmVzcyBRU1BJICovCisjZGVmaW5lIE1DRlFTUElfQkFTRQkJKE1DRl9NQkFSICsgMHg0MDApCS8qIEJhc2UgYWRkcmVzcyBRU1BJICovCiAjZGVmaW5lIE1DRlFTUElfU0laRQkJMHg0MAkJCS8qIFJlZ2lzdGVyIHNldCBzaXplICovCiAKICNpZmRlZiBDT05GSUdfTTUyNDkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTR4eHNpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NHh4c2ltLmgKaW5kZXggZDNiZDgzOC4uYTVmYmQxNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NHh4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NHh4c2ltLmgKQEAgLTU1LDkgKzU1LDE1IEBACiAvKgogICoJR2VuZXJpYyBHUElPIHN1cHBvcnQKICAqLwotI2RlZmluZSBNQ0ZHUElPX1BJTl9NQVgJCTAJLyogSSBhbSB0b28gbGF6eSB0byBjb3VudCAqLwotI2RlZmluZSBNQ0ZHUElPX0lSUV9NQVgJCS0xCi0jZGVmaW5lIE1DRkdQSU9fSVJRX1ZFQ0JBU0UJLTEKKyNkZWZpbmUgTUNGR1BJT19QT0RSCQkoTUNGX01CQVIgKyAweEEwMCkKKyNkZWZpbmUgTUNGR1BJT19QRERSCQkoTUNGX01CQVIgKyAweEExMCkKKyNkZWZpbmUgTUNGR1BJT19QUERSCQkoTUNGX01CQVIgKyAweEEyMCkKKyNkZWZpbmUgTUNGR1BJT19TRVRSCQkoTUNGX01CQVIgKyAweEEyMCkKKyNkZWZpbmUgTUNGR1BJT19DTFJSCQkoTUNGX01CQVIgKyAweEEzMCkKKworI2RlZmluZSBNQ0ZHUElPX1BJTl9NQVgJCTEzNgkvKiAxMjggZ3BpbyArIDggZXBvcnQgKi8KKyNkZWZpbmUgTUNGR1BJT19JUlFfTUFYCQk4CisjZGVmaW5lIE1DRkdQSU9fSVJRX1ZFQ0JBU0UJTUNGSU5UX1ZFQ0JBU0UKIAogLyoKICAqCUVER0UgUG9ydCBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZmdwaW8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZncGlvLmgKaW5kZXggYzQxZWJmNC4uNjYyMDNjMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZmdwaW8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmZ3Bpby5oCkBAIC0xMzksNyArMTM5LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX001M3h4KSB8fCBkZWZpbmVkKENPTkZJR19NNTQ0MXgpCisgICAgZGVmaW5lZChDT05GSUdfTTUzeHgpIHx8IGRlZmluZWQoQ09ORklHX001NHh4KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfTTU0NDF4KQogLyoKICAqIFRoZXNlIHBhcnRzIGhhdmUgYW4gJ0VkZ2UnIFBvcnQgbW9kdWxlIChleHRlcm5hbCBpbnRlcnJ1cHQvR1BJTykgd2hpY2ggdXNlcwogICogcmVhZC1tb2RpZnktd3JpdGUgdG8gY2hhbmdlIGFuIG91dHB1dCBhbmQgYSBHUElPIG1vZHVsZSB3aGljaCBoYXMgc2VwYXJhdGUKQEAgLTE5NSw3ICsxOTYsOCBAQAogCQlyZXR1cm4gTUNGU0lNMl9HUElPMVJFQUQ7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfTTUzeHgpIHx8IGRlZmluZWQoQ09ORklHX001NDQxeCkKKyAgICAgIGRlZmluZWQoQ09ORklHX001M3h4KSB8fCBkZWZpbmVkKENPTkZJR19NNTR4eCkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfTTU0NDF4KQogI2lmICFkZWZpbmVkKENPTkZJR19NNTQ0MXgpCiAJaWYgKGdwaW8gPCA4KQogCQlyZXR1cm4gTUNGRVBPUlRfRVBQRFI7CkBAIC0yMzcsNyArMjM5LDggQEAKIAkJcmV0dXJuIE1DRlNJTTJfR1BJTzFXUklURTsKICNlbGlmIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19NNTN4eCkgfHwgZGVmaW5lZChDT05GSUdfTTU0NDF4KQorICAgICAgZGVmaW5lZChDT05GSUdfTTUzeHgpIHx8IGRlZmluZWQoQ09ORklHX001NHh4KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19NNTQ0MXgpCiAjaWYgIWRlZmluZWQoQ09ORklHX001NDQxeCkKIAlpZiAoZ3BpbyA8IDgpCiAJCXJldHVybiBNQ0ZFUE9SVF9FUERSOwpAQCAtMjc5LDcgKzI4Miw4IEBACiAJCXJldHVybiBNQ0ZTSU0yX0dQSU8xRU5BQkxFOwogI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX001M3h4KSB8fCBkZWZpbmVkKENPTkZJR19NNTQ0MXgpCisgICAgICBkZWZpbmVkKENPTkZJR19NNTN4eCkgfHwgZGVmaW5lZChDT05GSUdfTTU0eHgpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX001NDQxeCkKICNpZiAhZGVmaW5lZChDT05GSUdfTTU0NDF4KQogCWlmIChncGlvIDwgOCkKIAkJcmV0dXJuIE1DRkVQT1JUX0VQRERSOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMmQ1ZDliZS4uZTQ3Nzc4ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCkBAIC0yNSwzICsyNSw1IEBACiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KIG9iai0kKENPTkZJR19CT09USU5GT19QUk9DKQkrPSBib290aW5mb19wcm9jLm8KIAorb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gvbTY4ay9rZXJuZWwvZWFybHlfcHJpbnRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5NzA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBGaW5uIFRoYWluCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKK2V4dGVybiB2b2lkIG12bWUxNnhfY29uc193cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sCisJCQkgICAgICAgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjb3VudCk7CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2luaXQgZGVidWdfY29uc19ucHV0cyhjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKTsKKworc3RhdGljIHZvaWQgX19yZWYgZGVidWdfY29uc193cml0ZShzdHJ1Y3QgY29uc29sZSAqYywKKwkJCQkgICBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQoreworI2lmICEoZGVmaW5lZChDT05GSUdfU1VOMykgICB8fCBkZWZpbmVkKENPTkZJR19NNjgzNjApIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX002ODAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ09MREZJUkUpKQorCWlmIChNQUNIX0lTX01WTUUxNngpCisJCW12bWUxNnhfY29uc193cml0ZShjLCBzLCBuKTsKKwllbHNlCisJCWRlYnVnX2NvbnNfbnB1dHMocywgbik7CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X2NvbnNvbGVfaW5zdGFuY2UgPSB7CisJLm5hbWUgID0gImRlYnVnIiwKKwkud3JpdGUgPSBkZWJ1Z19jb25zX3dyaXRlLAorCS5mbGFncyA9IENPTl9QUklOVEJVRkZFUiB8IENPTl9CT09ULAorCS5pbmRleCA9IC0xCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqYnVmKQoreworCWlmIChlYXJseV9jb25zb2xlIHx8IGJ1ZikKKwkJcmV0dXJuIDA7CisKKwllYXJseV9jb25zb2xlID0gJmVhcmx5X2NvbnNvbGVfaW5zdGFuY2U7CisJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKKworLyoKKyAqIGRlYnVnX2NvbnNfbnB1dHMoKSBkZWZpbmVkIGluIGFyY2gvbTY4ay9rZXJuZWwvaGVhZC5TIGNhbm5vdCBiZSBjYWxsZWQKKyAqIGFmdGVyIGluaXQgc2VjdGlvbnMgYXJlIGRpc2NhcmRlZCAoZm9yIHBsYXRmb3JtcyB0aGF0IHVzZSBpdCkuCisgKi8KKyNpZiAhKGRlZmluZWQoQ09ORklHX1NVTjMpICAgfHwgZGVmaW5lZChDT05GSUdfTTY4MzYwKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19NNjgwMDApIHx8IGRlZmluZWQoQ09ORklHX0NPTERGSVJFKSkKKworc3RhdGljIGludCBfX2luaXQgdW5yZWdpc3Rlcl9lYXJseV9jb25zb2xlKHZvaWQpCit7CisJaWYgKCFlYXJseV9jb25zb2xlIHx8IE1BQ0hfSVNfTVZNRTE2eCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdW5yZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOworfQorbGF0ZV9pbml0Y2FsbCh1bnJlZ2lzdGVyX2Vhcmx5X2NvbnNvbGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TIGIvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKaW5kZXggM2FiMzI5Yi4uZGJiMTE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKQEAgLTE1Myw3ICsxNTMsNyBAQAogICogLS0tLS0tLS0tLS0tCiAgKglUaGUgY29uc29sZSBpcyBhbHNvIGFibGUgdG8gYmUgdHVybmVkIG9mZi4gIFRoZSBjb25zb2xlIGluIGhlYWQuUwogICogaXMgc3BlY2lmaWNhbGx5IGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSB2ZXJ5IHVzZWZ1bC4gIEl0IGlzIHN1cnJvdW5kZWQgYnkKLSAqICNpZmRlZiBDT05TT0xFLyNlbmRpZiBjbGF1c2VzIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBzaGlwIGluIGtub3duLWdvb2QKKyAqICNpZmRlZiAvICNlbmRpZiBjbGF1c2VzIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBzaGlwIGluIGtub3duLWdvb2QKICAqIGtlcm5lbHMuICBJdCdzIGJhc2ljIGFsZ29yaXRobSBpcyB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIHNjcmVlbgogICogKGluIGhlaWdodC93aWR0aCBhbmQgYml0IGRlcHRoKSBhbmQgdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiBmb3IKICAqIGRpc3BsYXlpbmcgYW4gOHg4IGZvbnQgb3IgYW4gOHgxNiAod2lkdGh4aGVpZ2h0KS4gIEkgcHJlZmVyIHRoZSA4eDggZm9yCkBAIC0xOTgsOSArMTk4LDggQEAKICAqIENPTkZJR194eHg6CVRoZXNlIGFyZSB0aGUgb2J2aW91cyBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZGVmaW5lcyBjcmVhdGVkCiAgKiBkdXJpbmcgY29uZmlndXJhdGlvbi4gIFRoZXNlIGFyZSBkZWZpbmVkIGluIGF1dG9jb25mLmguCiAgKgotICogQ09OU09MRToJVGhlcmUgaXMgc3VwcG9ydCBmb3IgaGVhZC5TIGNvbnNvbGUgaW4gdGhpcyBmaWxlLiAgVGhpcwotICogY29uc29sZSBjYW4gdGFsayB0byBhIE1hYyBmcmFtZSBidWZmZXIsIGJ1dCBjb3VsZCBlYXNpbHkgYmUgZXh0cmFwb2xhdGVkCi0gKiB0byBleHRlbmQgaXQgdG8gc3VwcG9ydCBvdGhlciBwbGF0Zm9ybXMuCisgKiBDT05TT0xFX0RFQlVHOiAgT25seSBzdXBwb3J0cyBhIE1hYyBmcmFtZSBidWZmZXIgYnV0IGNvdWxkIGVhc2lseSBiZQorICogZXh0ZW5kZWQgdG8gc3VwcG9ydCBvdGhlciBwbGF0Zm9ybXMuCiAgKgogICogVEVTVF9NTVU6CVRoaXMgaXMgYSB0ZXN0IGhhcm5lc3MgZm9yIHJ1bm5pbmcgb24gYW55IGdpdmVuIG1hY2hpbmUgYnV0CiAgKiBnZXR0aW5nIGFuIE1NVSBkdW1wIGZvciBhbm90aGVyIGNsYXNzIG9mIG1hY2hpbmUuICBUaGUgY2xhc3NlcyBvZiBtYWNoaW5lcwpAQCAtMjIyLDcgKzIyMSw3IEBACiAgKiBNTVVfUFJJTlQ6CVRoZXJlIGlzIGEgcm91dGluZSBidWlsdCBpbnRvIGhlYWQuUyB0aGF0IGNhbiBkaXNwbGF5IHRoZQogICogTU1VIGRhdGEgc3RydWN0dXJlcy4gIEl0IG91dHB1dHMgaXRzIHJlc3VsdCB0aHJvdWdoIHRoZSBzZXJpYWxfcHV0YwogICogaW50ZXJmYWNlLiAgU28gd2hlcmUgZXZlciB0aGF0IHdpbmRzIHVwIGRyaXZpbmcgZGF0YSwgdGhhdCdzIHdoZXJlIHRoZQotICogbW11IHN0cnVjdCB3aWxsIGFwcGVhci4gIE9uIHRoZSBNYWNpbnRvc2ggdGhhdCdzIHR5cGljYWxseSB0aGUgY29uc29sZS4KKyAqIG1tdSBzdHJ1Y3Qgd2lsbCBhcHBlYXIuCiAgKgogICogU0VSSUFMX0RFQlVHOglUaGVyZSBhcmUgYSBzZXJpZXMgb2YgcHV0YygpIG1hY3JvIHN0YXRlbWVudHMKICAqIHNjYXR0ZXJlZCB0aHJvdWdoIG91dCB0aGUgY29kZSB0byBnaXZlIHByb2dyZXNzIG9mIHN0YXR1cyB0byB0aGUKQEAgLTI1MCw4ICsyNDksOCBAQAogICogVVNFX01GUDoJVXNlIHRoZSBTVC1NRlAgcG9ydCAoTW9kZW0xKSBmb3Igc2VyaWFsIGRlYnVnLgogICoKICAqIE1hY2ludG9zaCBjb25zdGFudHM6Ci0gKiBNQUNfVVNFX1NDQ19BOiBVc2UgU0NDIHBvcnQgQSAobW9kZW0pIGZvciBzZXJpYWwgZGVidWcgYW5kIGVhcmx5IGNvbnNvbGUuCi0gKiBNQUNfVVNFX1NDQ19COiBVc2UgU0NDIHBvcnQgQiAocHJpbnRlcikgZm9yIHNlcmlhbCBkZWJ1ZyBhbmQgZWFybHkgY29uc29sZS4KKyAqIE1BQ19VU0VfU0NDX0E6IFVzZSBTQ0MgcG9ydCBBIChtb2RlbSkgZm9yIHNlcmlhbCBkZWJ1Zy4KKyAqIE1BQ19VU0VfU0NDX0I6IFVzZSBTQ0MgcG9ydCBCIChwcmludGVyKSBmb3Igc2VyaWFsIGRlYnVnLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC0yNjgsMjcgKzI2NywxNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLQogI2lmZGVmIENPTkZJR19NQUMKLQotI2luY2x1ZGUgPGFzbS9tYWNody5oPgotCi0jaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUKLSNkZWZpbmUgQ09OU09MRQorIyAgaW5jbHVkZSA8YXNtL21hY2h3Lmg+CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLSNkZWZpbmUgU0VSSUFMX0RFQlVHCi0jZWxzZQotI3VuZGVmIFNFUklBTF9ERUJVRworIyAgZGVmaW5lIFNFUklBTF9ERUJVRworIyAgaWYgZGVmaW5lZChDT05GSUdfTUFDKSAmJiBkZWZpbmVkKENPTkZJR19GT05UX1NVUFBPUlQpCisjICAgIGRlZmluZSBDT05TT0xFX0RFQlVHCisjICBlbmRpZgogI2VuZGlmCiAKLSNlbHNlIC8qICFDT05GSUdfTUFDICovCi0KLSNkZWZpbmUgU0VSSUFMX0RFQlVHCi0KLSNlbmRpZiAvKiAhQ09ORklHX01BQyAqLwotCiAjdW5kZWYgTU1VX1BSSU5UCiAjdW5kZWYgTU1VX05PQ0FDSEVfS0VSTkVMCiAjdW5kZWYgREVCVUcKQEAgLTMwMyw2ICsyOTIsNyBAQAogCiAuZ2xvYmwga2VybmVsX3BnX2RpcgogLmdsb2JsIGF2YWlsbWVtCisuZ2xvYmwgbTY4a19pbml0X21hcHBlZF9zaXplCiAuZ2xvYmwgbTY4a19wZ3RhYmxlX2NhY2hlbW9kZQogLmdsb2JsIG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGUKICNpZmRlZiBDT05GSUdfTVZNRTE2eApAQCAtNDgwLDIyICs0NzAsMjEgQEAKIGZ1bmNfZGVmaW5lCWNvbnNvbGVfcHV0YywxCiAKIGZ1bmNfZGVmaW5lCWNvbnNvbGVfaW5pdAotZnVuY19kZWZpbmUJY29uc29sZV9wdXRfc3RhdHMKIGZ1bmNfZGVmaW5lCWNvbnNvbGVfcHV0X3Blbmd1aW4KIGZ1bmNfZGVmaW5lCWNvbnNvbGVfcGxvdF9waXhlbCwzCiBmdW5jX2RlZmluZQljb25zb2xlX3Njcm9sbAogCiAubWFjcm8JcHV0YwljaAotI2lmIGRlZmluZWQoQ09OU09MRSkgfHwgZGVmaW5lZChTRVJJQUxfREVCVUcpCisjaWYgZGVmaW5lZChDT05TT0xFX0RFQlVHKSB8fCBkZWZpbmVkKFNFUklBTF9ERUJVRykKIAlwZWEJXGNoCiAjZW5kaWYKLSNpZmRlZiBDT05TT0xFCisjaWZkZWYgQ09OU09MRV9ERUJVRwogCWZ1bmNfY2FsbAljb25zb2xlX3B1dGMKICNlbmRpZgogI2lmZGVmIFNFUklBTF9ERUJVRwogCWZ1bmNfY2FsbAlzZXJpYWxfcHV0YwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05TT0xFKSB8fCBkZWZpbmVkKFNFUklBTF9ERUJVRykKKyNpZiBkZWZpbmVkKENPTlNPTEVfREVCVUcpIHx8IGRlZmluZWQoU0VSSUFMX0RFQlVHKQogCWFkZHFsCSM0LCVzcAogI2VuZGlmCiAuZW5kbQpAQCAtNTE1LDcgKzUwNCw3IEBACiAuZW5kbQogCiAubWFjcm8JcHV0cwkJc3RyaW5nCi0jaWYgZGVmaW5lZChDT05TT0xFKSB8fCBkZWZpbmVkKFNFUklBTF9ERUJVRykKKyNpZiBkZWZpbmVkKENPTlNPTEVfREVCVUcpIHx8IGRlZmluZWQoU0VSSUFMX0RFQlVHKQogCV9fSU5JVERBVEEKIC5Mc3RyXEA6CiAJLnN0cmluZwkiXHN0cmluZyIKQEAgLTY1MSwxMSArNjQwLDkgQEAKIAlsZWEJJXBjQChMKG1hY19yb3dieXRlcykpLCVhMQogCW1vdmVsCSVhMEAsJWExQAogCi0jaWZkZWYgU0VSSUFMX0RFQlVHCiAJZ2V0X2JpX3JlY29yZAlCSV9NQUNfU0NDQkFTRQogCWxlYQklcGNAKEwobWFjX3NjY2Jhc2UpKSwlYTEKIAltb3ZlbAklYTBALCVhMUAKLSNlbmRpZgogCiBMKHRlc3Rfbm90bWFjKToKICNlbmRpZiAvKiBDT05GSUdfTUFDICovCkBAIC04ODUsMTMgKzg3MiwxMiBAQAogICovCiAjaWZkZWYgQ09ORklHX01BQwogCWlzX25vdF9tYWMoTChub2NvbikpCi0jICBpZmRlZiBDT05TT0xFCisjICBpZmRlZiBDT05TT0xFX0RFQlVHCiAJY29uc29sZV9pbml0CiAjICAgIGlmZGVmIENPTkZJR19MT0dPCiAJY29uc29sZV9wdXRfcGVuZ3VpbgogIyAgICBlbmRpZiAvKiBDT05GSUdfTE9HTyAqLwotCWNvbnNvbGVfcHV0X3N0YXRzCi0jICBlbmRpZiAvKiBDT05TT0xFICovCisjICBlbmRpZiAvKiBDT05TT0xFX0RFQlVHICovCiBMKG5vY29uKToKICNlbmRpZiAvKiBDT05GSUdfTUFDICovCiAKQEAgLTkyMiwxMCArOTA4LDIxIEBACiAgKgogICoJVGhpcyBibG9jayBvZiBjb2RlIGRvZXMgd2hhdCdzIG5lY2Vzc2FyeSB0byBtYXAgaW4gdGhlIHZhcmlvdXMga2luZHMKICAqCW9mIG1hY2hpbmVzIGZvciBleGVjdXRpb24gb2YgTGludXguCi0gKglGaXJzdCBtYXAgdGhlIGZpcnN0IDQgTUIgb2Yga2VybmVsIGNvZGUgJiBkYXRhCisgKglGaXJzdCBtYXAgdGhlIGZpcnN0IDQsIDgsIG9yIDE2IE1CIG9mIGtlcm5lbCBjb2RlICYgZGF0YQogICovCiAKLQltbXVfbWFwCSNQQUdFX09GRlNFVCwlcGNAKEwocGh5c19rZXJuZWxfc3RhcnQpKSwjNCoxMDI0KjEwMjQsXAorCWdldF9iaV9yZWNvcmQgQklfTUVNQ0hVTksKKwltb3ZlbAklYTBAKDQpLCVkMAorCW1vdmVsCSMxNioxMDI0KjEwMjQsJWQxCisJY21wbAklZDAsJWQxCisJamxzCTFmCisJbHNybAkjMSwlZDEKKwljbXBsCSVkMCwlZDEKKwlqbHMJMWYKKwlsc3JsCSMxLCVkMQorMToKKwltb3ZlbAklZDEsbTY4a19pbml0X21hcHBlZF9zaXplCisJbW11X21hcAkjUEFHRV9PRkZTRVQsJXBjQChMKHBoeXNfa2VybmVsX3N0YXJ0KSksJWQxLFwKIAkJJXBjQChtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlKQogCiAJcHV0YwknQycKQEAgLTEzOTYsMTUgKzEzOTMsMTMgQEAKIAlhbmRsCUwobWFjX3ZpZGVvYmFzZSksJWQwCiAJYWRkbAkjVklERU9NRU1CQVNFLCVkMAogCW1vdmVsCSVkMCxMKG1hY192aWRlb2Jhc2UpCi0jaWYgZGVmaW5lZChDT05TT0xFKQorI2lmZGVmIENPTlNPTEVfREVCVUcKIAltb3ZlbAklcGNAKEwocGh5c19rZXJuZWxfc3RhcnQpKSwlZDAKIAlzdWJsCSNQQUdFX09GRlNFVCwlZDAKIAlzdWJsCSVkMCxMKGNvbnNvbGVfZm9udCkKIAlzdWJsCSVkMCxMKGNvbnNvbGVfZm9udF9kYXRhKQogI2VuZGlmCi0jaWZkZWYgU0VSSUFMX0RFQlVHCiAJb3JsCSMweDUwMDAwMDAwLEwobWFjX3NjY2Jhc2UpCi0jZW5kaWYKIDE6CiAjZW5kaWYKIApAQCAtMjczNCw3ICsyNzI5LDEyIEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19NQUMKKy8qIFlvdSBtYXkgZGVmaW5lIGVpdGhlciBvciBib3RoIG9mIHRoZXNlLiAqLworI2RlZmluZSBNQUNfVVNFX1NDQ19BIC8qIE1vZGVtIHBvcnQgKi8KKyNkZWZpbmUgTUFDX1VTRV9TQ0NfQiAvKiBQcmludGVyIHBvcnQgKi8KIAorI2lmIGRlZmluZWQoTUFDX1VTRV9TQ0NfQSkgfHwgZGVmaW5lZChNQUNfVVNFX1NDQ19CKQorLyogSW5pdGlhbGlzYXRpb24gdGFibGUgZm9yIFNDQyB3aXRoIDMuNjg2NCBNSHogUENMSyAqLwogTChzY2NfaW5pdGFibGVfbWFjKToKIAkuYnl0ZQk0LDB4NDQJCS8qIHgxNiwgMSBzdG9wYml0LCBubyBwYXJpdHkgKi8KIAkuYnl0ZQkzLDB4YzAJCS8qIHJlY2VpdmVyOiA4IGJwYyAqLwpAQCAtMjc0OCw2ICsyNzQ4LDcgQEAKIAkuYnl0ZQktMQogCS5ldmVuCiAjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTUFDICovCiAKICNpZmRlZiBDT05GSUdfQVRBUkkKIC8qICNkZWZpbmUgVVNFX1BSSU5URVIgKi8KQEAgLTI3NTYsMTQgKzI3NTcsMTIgQEAKICNkZWZpbmUgVVNFX01GUAogCiAjaWYgZGVmaW5lZChVU0VfU0NDX0EpIHx8IGRlZmluZWQoVVNFX1NDQ19CKQotI2RlZmluZSBVU0VfU0NDCi0vKiBJbml0aWFsaXNhdGlvbiB0YWJsZSBmb3IgU0NDICovCi1MKHNjY19pbml0YWJsZSk6Ci0JLmJ5dGUJOSwxMgkJLyogUmVzZXQgKi8KKy8qIEluaXRpYWxpc2F0aW9uIHRhYmxlIGZvciBTQ0Mgd2l0aCA3Ljk4NzIgTUh6IFBDTEsgKi8KKy8qIFBDTEsgPT0gOC4wNTM5IGdpdmVzIGJhdWQgPT0gOTY4MC4xICovCitMKHNjY19pbml0YWJsZV9hdGFyaSk6CiAJLmJ5dGUJNCwweDQ0CQkvKiB4MTYsIDEgc3RvcGJpdCwgbm8gcGFyaXR5ICovCiAJLmJ5dGUJMywweGMwCQkvKiByZWNlaXZlcjogOCBicGMgKi8KIAkuYnl0ZQk1LDB4ZTIJCS8qIHRyYW5zbWl0dGVyOiA4IGJwYywgYXNzZXJ0IGR0ci9ydHMgKi8KLQkuYnl0ZQk5LDAJCS8qIG5vIGludGVycnVwdHMgKi8KIAkuYnl0ZQkxMCwwCQkvKiBOUlogKi8KIAkuYnl0ZQkxMSwweDUwCQkvKiB1c2UgYmF1ZCByYXRlIGdlbmVyYXRvciAqLwogCS5ieXRlCTEyLDI0LDEzLDAJLyogOTYwMCBiYXVkICovCkBAIC0yODEyLDcgKzI4MTEsNyBAQAogICovCiAKIC8qCi0gKiBJbml0aWFsaXplIHNlcmlhbCBwb3J0IGhhcmR3YXJlIGZvciA5NjAwLzgvMQorICogSW5pdGlhbGl6ZSBzZXJpYWwgcG9ydCBoYXJkd2FyZQogICovCiBmdW5jX3N0YXJ0CXNlcmlhbF9pbml0LCVkMC8lZDEvJWEwLyVhMQogCS8qCkBAIC0yODIyLDcgKzI4MjEsNyBAQAogCSAqCQlkMCA9IGJvb3QgaW5mbyBvZmZzZXQKIAkgKglDT05GSUdfQVRBUkkKIAkgKgkJYTAgPSBhZGRyZXNzIG9mIFNDQwotCSAqCQlhMSA9IExpb2Jhc2UgYWRkcmVzcy9hZGRyZXNzIG9mIHNjY19pbml0YWJsZQorCSAqCQlhMSA9IExpb2Jhc2UgYWRkcmVzcy9hZGRyZXNzIG9mIHNjY19pbml0YWJsZV9hdGFyaQogCSAqCQlkMCA9IGluaXQgZGF0YSBmb3Igc2VyaWFsIHBvcnQKIAkgKglDT05GSUdfTUFDCiAJICoJCWEwID0gYWRkcmVzcyBvZiBTQ0MKQEAgLTI4NDMsNiArMjg0Miw3IEBACiB8CW1vdmV3CSM2MSxDVVNUT01CQVNFK0NfU0VSUEVSLVpUV09CQVNFCiAxOgogI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVRBUkkKIAlpc19ub3RfYXRhcmkoNGYpCiAJbW92ZWwJJXBjQChMKGlvYmFzZSkpLCVhMQpAQCAtMjg1Nyw5ICsyODU3LDIxIEBACiAJbW92ZWIJJWExQChMUFNHX1JFQUQpLCVkMAogCWJzZXQJIzUsJWQwCiAJbW92ZWIJJWQwLCVhMUAoTFBTR19XUklURSkKLSNlbGlmIGRlZmluZWQoVVNFX1NDQykKKyNlbGlmIGRlZmluZWQoVVNFX1NDQ19BKSB8fCBkZWZpbmVkKFVTRV9TQ0NfQikKIAlsZWEJJWExQChMU0NDX0NUUkwpLCVhMAotCWxlYQklcGNAKEwoc2NjX2luaXRhYmxlKSksJWExCisJLyogUmVzZXQgU0NDIHJlZ2lzdGVyIHBvaW50ZXIgKi8KKwltb3ZlYgklYTBALCVkMAorCS8qIFJlc2V0IFNDQyBkZXZpY2U6IHdyaXRlIHJlZ2lzdGVyIHBvaW50ZXIgdGhlbiByZWdpc3RlciB2YWx1ZSAqLworCW1vdmViCSM5LCVhMEAKKwltb3ZlYgkjMHhjMCwlYTBACisJLyogV2FpdCBmb3IgNSBQQ0xLIGN5Y2xlcywgd2hpY2ggaXMgYWJvdXQgNjMgQ1BVIGN5Y2xlcyAqLworCS8qIDUgLyA3Ljk4NzIgTUh6ID0gYXBwcm94LiAwLjYzIHVzID0gNjMgLyAxMDAgTUh6ICovCisJbW92ZWwJIzMyLCVkMAorMjoKKwlzdWJxCSMxLCVkMAorCWpuZQkyYgorCS8qIEluaXRpYWxpemUgY2hhbm5lbCAqLworCWxlYQklcGNAKEwoc2NjX2luaXRhYmxlX2F0YXJpKSksJWExCiAyOgltb3ZlYgklYTFAKywlZDAKIAlqbWkJM2YKIAltb3ZlYgklZDAsJWEwQApAQCAtMjg3NywyMSArMjg4OSwxNCBAQAogCWpyYQlMKHNlcmlhbF9pbml0X2RvbmUpCiA0OgogI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTUFDCiAJaXNfbm90X21hYyhMKHNlcmlhbF9pbml0X25vdF9tYWMpKQotCi0jaWZkZWYgU0VSSUFMX0RFQlVHCi0KLS8qIFlvdSBtYXkgZGVmaW5lIGVpdGhlciBvciBib3RoIG9mIHRoZXNlLiAqLwotI2RlZmluZSBNQUNfVVNFX1NDQ19BIC8qIE1vZGVtIHBvcnQgKi8KLSNkZWZpbmUgTUFDX1VTRV9TQ0NfQiAvKiBQcmludGVyIHBvcnQgKi8KLQorI2lmIGRlZmluZWQoTUFDX1VTRV9TQ0NfQSkgfHwgZGVmaW5lZChNQUNfVVNFX1NDQ19CKQogI2RlZmluZSBtYWNfc2NjX2NoYV9iX2N0cmxfb2Zmc2V0CTB4MAogI2RlZmluZSBtYWNfc2NjX2NoYV9hX2N0cmxfb2Zmc2V0CTB4MgogI2RlZmluZSBtYWNfc2NjX2NoYV9iX2RhdGFfb2Zmc2V0CTB4NAogI2RlZmluZSBtYWNfc2NjX2NoYV9hX2RhdGFfb2Zmc2V0CTB4NgotCi0jaWYgZGVmaW5lZChNQUNfVVNFX1NDQ19BKSB8fCBkZWZpbmVkKE1BQ19VU0VfU0NDX0IpCiAJbW92ZWwJJXBjQChMKG1hY19zY2NiYXNlKSksJWEwCiAJLyogUmVzZXQgU0NDIHJlZ2lzdGVyIHBvaW50ZXIgKi8KIAltb3ZlYgklYTBAKG1hY19zY2NfY2hhX2FfY3RybF9vZmZzZXQpLCVkMApAQCAtMjkwNSw3ICsyOTEwLDYgQEAKIAlzdWJxCSMxLCVkMAogCWpuZQk1YgogI2VuZGlmCi0KICNpZmRlZiBNQUNfVVNFX1NDQ19BCiAJLyogSW5pdGlhbGl6ZSBjaGFubmVsIEEgKi8KIAlsZWEJJXBjQChMKHNjY19pbml0YWJsZV9tYWMpKSwlYTEKQEAgLTI5MTYsNyArMjkyMCw2IEBACiAJanJhCTViCiA2OgogI2VuZGlmCS8qIE1BQ19VU0VfU0NDX0EgKi8KLQogI2lmZGVmIE1BQ19VU0VfU0NDX0IKIAkvKiBJbml0aWFsaXplIGNoYW5uZWwgQiAqLwogCWxlYQklcGNAKEwoc2NjX2luaXRhYmxlX21hYykpLCVhMQpAQCAtMjkyNyw5ICsyOTMwLDYgQEAKIAlqcmEJN2IKIDg6CiAjZW5kaWYJLyogTUFDX1VTRV9TQ0NfQiAqLwotCi0jZW5kaWYJLyogU0VSSUFMX0RFQlVHICovCi0KIAlqcmEJTChzZXJpYWxfaW5pdF9kb25lKQogTChzZXJpYWxfaW5pdF9ub3RfbWFjKToKICNlbmRpZgkvKiBDT05GSUdfTUFDICovCkBAIC0yOTU5LDYgKzI5NTksMTUgQEAKIDI6CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NVk1FMTZ4CisJaXNfbm90X212bWUxNngoTChzZXJpYWxfaW5pdF9ub3RfbXZtZTE2eCkpCisJbW92ZWIJIzB4MTAsTTE2N19QQ1NDQ01JQ1IKKwltb3ZlYgkjMHgxMCxNMTY3X1BDU0NDVElDUgorCW1vdmViCSMweDEwLE0xNjdfUENTQ0NSSUNSCisJanJhCUwoc2VyaWFsX2luaXRfZG9uZSkKK0woc2VyaWFsX2luaXRfbm90X212bWUxNngpOgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVBPTExPCiAvKiBXZSBjb3VudCBvbiB0aGUgUFJPTSBpbml0aWFsaXppbmcgU0lPMSAqLwogI2VuZGlmCkBAIC0yOTk4LDI3ICszMDA3LDE5IEBACiAKICNpZmRlZiBDT05GSUdfTUFDCiAJaXNfbm90X21hYyg1ZikKLQotI2lmZGVmIFNFUklBTF9ERUJVRwotCiAjaWYgZGVmaW5lZChNQUNfVVNFX1NDQ19BKSB8fCBkZWZpbmVkKE1BQ19VU0VfU0NDX0IpCiAJbW92ZWwJJXBjQChMKG1hY19zY2NiYXNlKSksJWExCiAjZW5kaWYKLQogI2lmZGVmIE1BQ19VU0VfU0NDX0EKIDM6CWJ0c3QJIzIsJWExQChtYWNfc2NjX2NoYV9hX2N0cmxfb2Zmc2V0KQogCWplcQkzYgogCW1vdmViCSVkMCwlYTFAKG1hY19zY2NfY2hhX2FfZGF0YV9vZmZzZXQpCiAjZW5kaWYJLyogTUFDX1VTRV9TQ0NfQSAqLwotCiAjaWZkZWYgTUFDX1VTRV9TQ0NfQgogNDoJYnRzdAkjMiwlYTFAKG1hY19zY2NfY2hhX2JfY3RybF9vZmZzZXQpCiAJamVxCTRiCiAJbW92ZWIJJWQwLCVhMUAobWFjX3NjY19jaGFfYl9kYXRhX29mZnNldCkKICNlbmRpZgkvKiBNQUNfVVNFX1NDQ19CICovCi0KLSNlbmRpZgkvKiBTRVJJQUxfREVCVUcgKi8KLQogCWpyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCiA1OgogI2VuZGlmCS8qIENPTkZJR19NQUMgKi8KQEAgLTMwMzksNyArMzA0MCw3IEBACiAJbm9wCiAJYnNldAkjNSwlZDAKIAltb3ZlYgklZDAsJWExQChMUFNHX1dSSVRFKQotI2VsaWYgZGVmaW5lZChVU0VfU0NDKQorI2VsaWYgZGVmaW5lZChVU0VfU0NDX0EpIHx8IGRlZmluZWQoVVNFX1NDQ19CKQogMzoJYnRzdAkjMiwlYTFAKExTQ0NfQ1RSTCkKIAlqZXEJM2IKIAltb3ZlYgklZDAsJWExQChMU0NDX0RBVEEpCkBAIC0zMTk1LDcgKzMxOTYsNyBAQAogCW1vdmVsCUFSRzEsJWEwCiAJanJhCTJmCiAxOgotI2lmZGVmIENPTlNPTEUKKyNpZmRlZiBDT05TT0xFX0RFQlVHCiAJY29uc29sZV9wdXRjCSVkMAogI2VuZGlmCiAjaWZkZWYgU0VSSUFMX0RFQlVHCkBAIC0zMjI0LDcgKzMyMjUsNyBAQAogCWpscwkyZgogCWFkZGIJIydBJy0oJzknKzEpLCVkMgogMjoKLSNpZmRlZiBDT05TT0xFCisjaWZkZWYgQ09OU09MRV9ERUJVRwogCWNvbnNvbGVfcHV0YwklZDIKICNlbmRpZgogI2lmZGVmIFNFUklBTF9ERUJVRwpAQCAtMzIzNCwyMSArMzIzNSwxOSBAQAogCiBmdW5jX3JldHVybglwdXRuCiAKLSNpZmRlZiBDT05GSUdfTUFDCisjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwogLyoKLSAqCW1hY19lYXJseV9wcmludAotICoKICAqCVRoaXMgcm91dGluZSB0YWtlcyBpdHMgcGFyYW1ldGVycyBvbiB0aGUgc3RhY2suICBJdCB0aGVuCiAgKgl0dXJucyBhcm91bmQgYW5kIGNhbGxzIHRoZSBpbnRlcm5hbCByb3V0aW5lcy4gIFRoaXMgcm91dGluZQogICoJaXMgdXNlZCBieSB0aGUgYm9vdCBjb25zb2xlLgogICoKICAqCVRoZSBjYWxsaW5nIHBhcmFtZXRlcnMgYXJlOgotICoJCXZvaWQgbWFjX2Vhcmx5X3ByaW50KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbGVuZ3RoKTsKKyAqCQl2b2lkIGRlYnVnX2NvbnNfbnB1dHMoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsZW5ndGgpCiAgKgogICoJVGhpcyByb3V0aW5lIGRvZXMgTk9UIHVuZGVyc3RhbmQgdmFyaWFibGUgYXJndW1lbnRzIG9ubHkKICAqCXNpbXBsZSBzdHJpbmdzIQogICovCi1FTlRSWShtYWNfZWFybHlfcHJpbnQpCitFTlRSWShkZWJ1Z19jb25zX25wdXRzKQogCW1vdmVtbAklZDAvJWQxLyVhMCwlc3BALQogCW1vdmV3CSVzciwlc3BALQogCW9yaQkjMHgwNzAwLCVzcgpAQCAtMzI1Niw3ICszMjU1LDcgQEAKIAltb3ZlbAklc3BAKDIyKSwlZDEJCS8qIGZldGNoIHBhcmFtZXRlciAqLwogCWpyYQkyZgogMToKLSNpZmRlZiBDT05TT0xFCisjaWZkZWYgQ09OU09MRV9ERUJVRwogCWNvbnNvbGVfcHV0YwklZDAKICNlbmRpZgogI2lmZGVmIFNFUklBTF9ERUJVRwpAQCAtMzI3MCw3ICszMjY5LDcgQEAKIAltb3Zldwklc3BAKywlc3IKIAltb3ZlbWwJJXNwQCssJWQwLyVkMS8lYTAKIAlydHMKLSNlbmRpZiAvKiBDT05GSUdfTUFDICovCisjZW5kaWYgLyogQ09ORklHX0VBUkxZX1BSSU5USyAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykKIGZ1bmNfc3RhcnQJc2V0X2xlZHMsJWQwLyVhMApAQCAtMzI5Miw3ICszMjkxLDcgQEAKIGZ1bmNfcmV0dXJuCXNldF9sZWRzCiAjZW5kaWYKIAotI2lmZGVmIENPTlNPTEUKKyNpZmRlZiBDT05TT0xFX0RFQlVHCiAvKgogICoJRm9yIGNvbnRpbnVpdHksIHNlZSB0aGUgZGF0YSBhbGlnbm1lbnQKICAqCXRvIHdoaWNoIHRoaXMgc3RydWN0dXJlIGlzIHRpZWQuCkBAIC0zMzk2LDQzICszMzk1LDYgQEAKIDE6CiBmdW5jX3JldHVybgljb25zb2xlX2luaXQKIAotZnVuY19zdGFydAljb25zb2xlX3B1dF9zdGF0cywlYTAvJWQ3Ci0JLyoKLQkgKglTb21lIG9mIHRoZSByZWdpc3RlciB1c2FnZSB0aGF0IGZvbGxvd3MKLQkgKgkJYTAgPSBwb2ludGVyIHRvIGJvb3RfaW5mbwotCSAqCQlkNyA9IHZhbHVlIG9mIGJvb3RfaW5mbyBmaWVsZHMKLQkgKi8KLQlwdXRzCSJcbk1hY0xpbnV4XG4iCi0KLSNpZmRlZiBTRVJJQUxfREVCVUcKLQlwdXRzCSJcbiB2aWRhZGRyOiIKLQlwdXRuCSVwY0AoTChtYWNfdmlkZW9iYXNlKSkJCS8qIHZpZGVvIGFkZHIuICovCi0KLQlwdXRzCSJcbiAgX3N0ZXh0OiIKLQlsZWEJJXBjQChfc3RleHQpLCVhMAotCXB1dG4JJWEwCi0KLQlwdXRzCSJcbmJvb3RpbmZvOiIKLQlsZWEJJXBjQChfZW5kKSwlYTAKLQlwdXRuCSVhMAotCi0JcHV0cwkiXG4gICBjcHVpZDoiCi0JcHV0bgklcGNAKEwoY3B1dHlwZSkpCi0KLSMgIGlmZGVmIENPTkZJR19NQUMKLQlwdXRzCSJcbiBzY2NiYXNlOiIKLQlwdXRuCSVwY0AoTChtYWNfc2NjYmFzZSkpCi0jICBlbmRpZgotIyAgaWZkZWYgTU1VX1BSSU5UCi0JcHV0YwknXG4nCi0JamJzcgltbXVfcHJpbnRfbWFjaGluZV9jcHVfdHlwZXMKLSMgIGVuZGlmCi0jZW5kaWYgLyogU0VSSUFMX0RFQlVHICovCi0KLQlwdXRjCSdcbicKLQotZnVuY19yZXR1cm4JY29uc29sZV9wdXRfc3RhdHMKLQogI2lmZGVmIENPTkZJR19MT0dPCiBmdW5jX3N0YXJ0CWNvbnNvbGVfcHV0X3Blbmd1aW4sJWEwLSVhMS8lZDAtJWQ3CiAJLyoKQEAgLTM3NzQsMTIgKzM3MzYsMTUgQEAKIAogTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCk6CiBmdW5jX3JldHVybgljb25zb2xlX3Bsb3RfcGl4ZWwKLSNlbmRpZiAvKiBDT05TT0xFICovCisjZW5kaWYgLyogQ09OU09MRV9ERUJVRyAqLwogCiAKIF9fSU5JVERBVEEKIAkuYWxpZ24JNAogCittNjhrX2luaXRfbWFwcGVkX3NpemU6CisJLmxvbmcJMAorCiAjaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykKIEwoY3VzdG9tKToKQEAgLTM3ODcsNyArMzc1Miw3IEBACiAJLmxvbmcgMAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTlNPTEUpCisjaWZkZWYgQ09OU09MRV9ERUJVRwogTChjb25zb2xlX2dsb2JhbHMpOgogCS5sb25nCTAJCS8qIGN1cnNvciBjb2x1bW4gKi8KIAkubG9uZwkwCQkvKiBjdXJzb3Igcm93ICovCkBAIC0zNzk4LDcgKzM3NjMsNyBAQAogCS5sb25nCTAJCS8qIHBvaW50ZXIgdG8gY29uc29sZSBmb250IChzdHJ1Y3QgZm9udF9kZXNjKSAqLwogTChjb25zb2xlX2ZvbnRfZGF0YSk6CiAJLmxvbmcJMAkJLyogcG9pbnRlciB0byBjb25zb2xlIGZvbnQgZGF0YSAqLwotI2VuZGlmIC8qIENPTlNPTEUgKi8KKyNlbmRpZiAvKiBDT05TT0xFX0RFQlVHICovCiAKICNpZiBkZWZpbmVkKE1NVV9QUklOVCkKIEwobW11X3ByaW50X2RhdGEpOgpAQCAtMzgzOCw3ICszODAzLDkgQEAKIE0xNjdfQ1lMSUNSID0gMHhmZmY0NTAyNgogTTE2N19DWVRFT0lSID0gMHhmZmY0NTA4NQogTTE2N19DWVREUiA9IDB4ZmZmNDUwZjgKK00xNjdfUENTQ0NNSUNSID0gMHhmZmY0MjAxZAogTTE2N19QQ1NDQ1RJQ1IgPSAweGZmZjQyMDFlCitNMTY3X1BDU0NDUklDUiA9IDB4ZmZmNDIwMWYKIE0xNjdfUENUUElBQ0tSID0gMHhmZmY0MjAyNQogI2VuZGlmCiAKQEAgLTM4NTYsMTAgKzM4MjMsOCBAQAogCS5sb25nCTAKIEwobWFjX3Jvd2J5dGVzKToKIAkubG9uZwkwCi0jaWZkZWYgU0VSSUFMX0RFQlVHCiBMKG1hY19zY2NiYXNlKToKIAkubG9uZwkwCi0jZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfTUFDICovCiAKICNpZiBkZWZpbmVkIChDT05GSUdfQVBPTExPKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jCmluZGV4IDViMTZmNWQuLjg4YzI3ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYworKysgYi9hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMKQEAgLTU4LDE3ICs1OCwxNiBAQAogdm9pZCAoKm1hY2hfcG93ZXJfb2ZmKSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19NNjgwMDAKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgzMjgpCisjZGVmaW5lIENQVV9OQU1FCSJNQzY4MzI4IgorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4RVozMjgpCisjZGVmaW5lIENQVV9OQU1FCSJNQzY4RVozMjgiCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjhWWjMyOCkKKyNkZWZpbmUgQ1BVX05BTUUJIk1DNjhWWjMyOCIKKyNlbHNlCiAjZGVmaW5lIENQVV9OQU1FCSJNQzY4MDAwIgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX002ODMyOAotI2RlZmluZSBDUFVfTkFNRQkiTUM2ODMyOCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NNjhFWjMyOAotI2RlZmluZSBDUFVfTkFNRQkiTUM2OEVaMzI4IgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX002OFZaMzI4Ci0jZGVmaW5lIENQVV9OQU1FCSJNQzY4VlozMjgiCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTTY4MDAwICovCiAjaWZkZWYgQ09ORklHX002ODM2MAogI2RlZmluZSBDUFVfTkFNRQkiTUM2ODM2MCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggOTgyYzNmZS4uYTQ3MWVhYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC03MSwzMSArNzEsNiBAQAogc3RhdGljIHZvaWQgbWFjX2lkZW50aWZ5KHZvaWQpOwogc3RhdGljIHZvaWQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbWFjX2Vhcmx5X3ByaW50KGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIG4pOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbWFjX2Vhcmx5X2NvbnNfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIG4pCi17Ci0JbWFjX2Vhcmx5X3ByaW50KHMsIG4pOwotfQotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgX19pbml0ZGF0YSBtYWNfZWFybHlfY29ucyA9IHsKLQkubmFtZSAgPSAiZWFybHkiLAotCS53cml0ZSA9IG1hY19lYXJseV9jb25zX3dyaXRlLAotCS5mbGFncyA9IENPTl9QUklOVEJVRkZFUiB8IENPTl9CT09ULAotCS5pbmRleCA9IC0xCi19OwotCi1pbnQgX19pbml0IG1hY191bnJlZ2lzdGVyX2Vhcmx5X2NvbnModm9pZCkKLXsKLQkvKiBtYWNfZWFybHlfcHJpbnQgY2FuJ3QgYmUgdXNlZCBhZnRlciBpbml0IHNlY3Rpb25zIGFyZSBkaXNjYXJkZWQgKi8KLQlyZXR1cm4gdW5yZWdpc3Rlcl9jb25zb2xlKCZtYWNfZWFybHlfY29ucyk7Ci19Ci0KLWxhdGVfaW5pdGNhbGwobWFjX3VucmVnaXN0ZXJfZWFybHlfY29ucyk7Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgX19pbml0IG1hY19zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgdmVjdG9yKQogewogCXZpYV9pbml0X2Nsb2NrKHZlY3Rvcik7CkBAIC0xOTAsMTAgKzE2NSw2IEBACiAJbWFjaF9iZWVwID0gbWFjX21rc291bmQ7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLQlyZWdpc3Rlcl9jb25zb2xlKCZtYWNfZWFybHlfY29ucyk7Ci0jZW5kaWYKLQogCS8qCiAJICogRGV0ZXJtaW5lIGhhcmR3YXJlIHByZXNlbnQKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggN2Q0MDI0NC4uYjk1ODkxNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNlbmRpZgogCiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi8KLSNkZWZpbmUgSU5JVF9NQVBQRURfU0laRQkoNFVMPDwyMCkKK2V4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBhdmFpbG1lbTsKIApAQCAtMjcxLDEwICsyNzEsMTIgQEAKIAkgKi8KIAlhZGRyID0gbTY4a19tZW1vcnlbMF0uYWRkcjsKIAlzaXplID0gbTY4a19tZW1vcnlbMF0uc2l6ZTsKLQlmcmVlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGF2YWlsbWVtLCBtaW4oSU5JVF9NQVBQRURfU0laRSwgc2l6ZSkgLSAoYXZhaWxtZW0gLSBhZGRyKSk7CisJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBhdmFpbG1lbSwKKwkJCSAgbWluKG02OGtfaW5pdF9tYXBwZWRfc2l6ZSwgc2l6ZSkgLSAoYXZhaWxtZW0gLSBhZGRyKSk7CiAJbWFwX25vZGUoMCk7Ci0JaWYgKHNpemUgPiBJTklUX01BUFBFRF9TSVpFKQotCQlmcmVlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGFkZHIgKyBJTklUX01BUFBFRF9TSVpFLCBzaXplIC0gSU5JVF9NQVBQRURfU0laRSk7CisJaWYgKHNpemUgPiBtNjhrX2luaXRfbWFwcGVkX3NpemUpCisJCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYWRkciArIG02OGtfaW5pdF9tYXBwZWRfc2l6ZSwKKwkJCQkgIHNpemUgLSBtNjhrX2luaXRfbWFwcGVkX3NpemUpOwogCiAJZm9yIChpID0gMTsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKQogCQltYXBfbm9kZShpKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L2NvbmZpZy5jIGIvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKaW5kZXggZWFiN2QzNC4uYTUzODAzYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogI2RlZmluZSBDeVNDUkgJCSgweDIyKQogI2RlZmluZSBDeVRGVEMJCSgweDgwKQogCi1zdGF0aWMgdm9pZCBjb25zX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjb3VudCkKK3ZvaWQgbXZtZTE2eF9jb25zX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjb3VudCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpiYXNlX2FkZHIgPSAodV9jaGFyICopQ0QyNDAxX0FERFI7CiAJdm9sYXRpbGUgdV9jaGFyIHNpbms7CkBAIC0yNjgsMjAgKzI2OCw2IEBACiAJYmFzZV9hZGRyW0N5SUVSXSA9IGllcjsKIH0KIAotc3RhdGljIHN0cnVjdCBjb25zb2xlIGNvbnNfaW5mbyA9Ci17Ci0JLm5hbWUJPSAic2VyY29uIiwKLQkud3JpdGUJPSBjb25zX3dyaXRlLAotCS5mbGFncwk9IENPTl9QUklOVEJVRkZFUiB8IENPTl9CT09ULAotCS5pbmRleAk9IC0xLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG12bWUxNnhfZWFybHlfY29uc29sZSh2b2lkKQotewotCXJlZ2lzdGVyX2NvbnNvbGUoJmNvbnNfaW5mbyk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJNVk1FMTZ4OiBlYXJseSBjb25zb2xlIHJlZ2lzdGVyZWRcbiIpOwotfQogI2VuZGlmCiAKIHZvaWQgX19pbml0IGNvbmZpZ19tdm1lMTZ4KHZvaWQpCkBAIC0zMzYsMTYgKzMyMiw2IEBACiAgICAgZWxzZQogICAgIHsKIAltdm1lMTZ4X2NvbmZpZyA9IE1WTUUxNnhfQ09ORklHX0dPVF9MUCB8IE1WTUUxNnhfQ09ORklHX0dPVF9DRDI0MDE7Ci0KLQkvKiBEb250IGFsbG93IGFueSBpbnRlcnJ1cHRzIGZyb20gdGhlIENEMjQwMSB1bnRpbCB0aGUgaW50ZXJydXB0ICovCi0JLyogaGFuZGxlcnMgYXJlIGluc3RhbGxlZAkJCQkJICovCi0KLQlwY2MyY2hpcFtQY2NTQ0NNSUNSXSA9IDB4MTA7Ci0JcGNjMmNoaXBbUGNjU0NDVElDUl0gPSAweDEwOwotCXBjYzJjaGlwW1BjY1NDQ1JJQ1JdID0gMHgxMDsKLSNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCi0JbXZtZTE2eF9lYXJseV9jb25zb2xlKCk7Ci0jZW5kaWYKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS82ODAwMC9tNjhFWjMyOC5jIGIvYXJjaC9tNjhrL3BsYXRmb3JtLzY4MDAwL202OEVaMzI4LmMKaW5kZXggMzMyYjVlOC4uMjE5NTI5MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3BsYXRmb3JtLzY4MDAwL202OEVaMzI4LmMKKysrIGIvYXJjaC9tNjhrL3BsYXRmb3JtLzY4MDAwL202OEVaMzI4LmMKQEAgLTY5LDcgKzY5LDggQEAKICAgaWYgKHApIHN0cmNweShwLGNvbW1hbmQpOwogICBlbHNlIGNvbW1hbmRbMF0gPSAwOwogI2VuZGlmCi0gCisKKyAgbWFjaF9zY2hlZF9pbml0ID0gaHdfdGltZXJfaW5pdDsKICAgbWFjaF9od2NsayA9IG02ODMyOF9od2NsazsKICAgbWFjaF9yZXNldCA9IG02OGV6MzI4X3Jlc2V0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtLzY4MDAwL202OFZaMzI4LmMgYi9hcmNoL202OGsvcGxhdGZvcm0vNjgwMDAvbTY4VlozMjguYwppbmRleCBmZDY2NTgzLi4wZTVlNWExIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vNjgwMDAvbTY4VlozMjguYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vNjgwMDAvbTY4VlozMjguYwpAQCAtMTgyLDYgKzE4Miw3IEBACiAKIAlpbml0X2hhcmR3YXJlKGNvbW1hbmQsIHNpemUpOwogCisJbWFjaF9zY2hlZF9pbml0ID0gaHdfdGltZXJfaW5pdDsKIAltYWNoX2h3Y2xrID0gbTY4MzI4X2h3Y2xrOwogCW1hY2hfcmVzZXQgPSBtNjh2ejMyOF9yZXNldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9ncGlvLmMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvZ3Bpby5jCmluZGV4IDljZDJiNWMuLmU3ZTQyODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9ncGlvLmMKKysrIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2dwaW8uYwpAQCAtNzYsMTAgKzc2LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlkYXRhID0gbWNmZ3Bpb19yZWFkKF9fbWNmZ3Bpb19wZGRyKGdwaW8pKTsKLQlpZiAodmFsdWUpCi0JCWRhdGEgfD0gbWNmZ3Bpb19iaXQoZ3Bpbyk7Ci0JZWxzZQotCQlkYXRhICY9IG1jZmdwaW9fYml0KGdwaW8pOworCWRhdGEgfD0gbWNmZ3Bpb19iaXQoZ3Bpbyk7CiAJbWNmZ3Bpb193cml0ZShkYXRhLCBfX21jZmdwaW9fcGRkcihncGlvKSk7CiAKIAkvKiBub3cgc2V0IHRoZSBkYXRhIHRvIG91dHB1dCAqLwpAQCAtMTE3LDM3ICsxMTQsNTEgQEAKIAogI2lmZGVmIENPTkZJR19HUElPTElCCiAKLWludCBtY2ZncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCitzdGF0aWMgaW50IG1jZmdwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlyZXR1cm4gX19tY2ZncGlvX2RpcmVjdGlvbl9pbnB1dChvZmZzZXQpOwogfQogCi1pbnQgbWNmZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQorc3RhdGljIGludCBtY2ZncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJcmV0dXJuIF9fbWNmZ3Bpb19nZXRfdmFsdWUob2Zmc2V0KTsKIH0KIAotaW50IG1jZmdwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgbWNmZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQogewogCXJldHVybiBfX21jZmdwaW9fZGlyZWN0aW9uX291dHB1dChvZmZzZXQsIHZhbHVlKTsKIH0KIAotdm9pZCBtY2ZncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIG1jZmdwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCSAgICAgIGludCB2YWx1ZSkKIHsKIAlfX21jZmdwaW9fc2V0X3ZhbHVlKG9mZnNldCwgdmFsdWUpOwogfQogCi1pbnQgbWNmZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3N0YXRpYyBpbnQgbWNmZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlyZXR1cm4gX19tY2ZncGlvX3JlcXVlc3Qob2Zmc2V0KTsKIH0KIAotdm9pZCBtY2ZncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQorc3RhdGljIHZvaWQgbWNmZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlfX21jZmdwaW9fZnJlZShvZmZzZXQpOwogfQogCi1zdHJ1Y3QgYnVzX3R5cGUgbWNmZ3Bpb19zdWJzeXMgPSB7CitzdGF0aWMgaW50IG1jZmdwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyNpZiBkZWZpbmVkKE1DRkdQSU9fSVJRX01JTikKKwlpZiAoKG9mZnNldCA+PSBNQ0ZHUElPX0lSUV9NSU4pICYmIChvZmZzZXQgPCBNQ0ZHUElPX0lSUV9NQVgpKQorI2Vsc2UKKwlpZiAob2Zmc2V0IDwgTUNGR1BJT19JUlFfTUFYKQorI2VuZGlmCisJCXJldHVybiBNQ0ZHUElPX0lSUV9WRUNCQVNFICsgb2Zmc2V0OworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgbWNmZ3Bpb19zdWJzeXMgPSB7CiAJLm5hbWUJCT0gImdwaW8iLAogCS5kZXZfbmFtZQk9ICJncGlvIiwKIH07CkBAIC0xNjAsNiArMTcxLDcgQEAKIAkuZGlyZWN0aW9uX291dHB1dAk9IG1jZmdwaW9fZGlyZWN0aW9uX291dHB1dCwKIAkuZ2V0CQkJPSBtY2ZncGlvX2dldF92YWx1ZSwKIAkuc2V0CQkJPSBtY2ZncGlvX3NldF92YWx1ZSwKKwkudG9faXJxCQkJPSBtY2ZncGlvX3RvX2lycSwKIAkuYmFzZQkJCT0gMCwKIAkubmdwaW8JCQk9IE1DRkdQSU9fUElOX01BWCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyMHguYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTIweC5jCmluZGV4IGVhMWJlMGUuLjQwNDBhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTIweC5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTIweC5jCkBAIC0xMTgsMTAgKzExOCw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKLQogc3RhdGljIHZvaWQgX19pbml0IG01MjB4X3FzcGlfaW5pdCh2b2lkKQogeworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQogCXUxNiBwYXI7CiAJLyogc2V0dXAgUG9ydCBRUyBmb3IgUVNQSSB3aXRoIGdwaW8gQ1MgY29udHJvbCAqLwogCXdyaXRlYigweDNmLCBNQ0ZfR1BJT19QQVJfUVNQSSk7CkBAIC0xMjksOSArMTI4LDggQEAKIAlwYXIgPSByZWFkdyhNQ0ZfR1BJT19QQVJfVUFSVCk7CiAJcGFyICY9IDB4MDBmZjsKIAl3cml0ZXcocGFyLCBNQ0ZfR1BJT19QQVJfVUFSVCk7Ci19Ci0KICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkgKi8KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTc2LDkgKzE3NCw3IEBACiAJbTUyMHhfY2xrX2luaXQoKTsKIAltNTIweF91YXJ0c19pbml0KCk7CiAJbTUyMHhfZmVjX2luaXQoKTsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKIAltNTIweF9xc3BpX2luaXQoKTsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL201MjN4LmMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyM3guYwppbmRleCAyYjEwZTlmLi42YjcxMzVlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyM3guYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyM3guYwpAQCAtMzIsNiArMzIsNyBAQAogREVGSU5FX0NMSyhtY2Z1YXJ0MCwgIm1jZnVhcnQuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MSwgIm1jZnVhcnQuMSIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MiwgIm1jZnVhcnQuMiIsIE1DRl9CVVNDTEspOworREVGSU5FX0NMSyhtY2Zxc3BpMCwgIm1jZnFzcGkuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhmZWMwLCAiZmVjLjAiLCBNQ0ZfQlVTQ0xLKTsKIAogc3RydWN0IGNsayAqbWNmX2Nsa3NbXSA9IHsKQEAgLTQ0LDE2ICs0NSwxNiBAQAogCSZjbGtfbWNmdWFydDAsCiAJJmNsa19tY2Z1YXJ0MSwKIAkmY2xrX21jZnVhcnQyLAorCSZjbGtfbWNmcXNwaTAsCiAJJmNsa19mZWMwLAogCU5VTEwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKLQogc3RhdGljIHZvaWQgX19pbml0IG01MjN4X3FzcGlfaW5pdCh2b2lkKQogeworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQogCXUxNiBwYXI7CiAKIAkvKiBzZXR1cCBRU1BTIHBpbnMgZm9yIFFTUEkgd2l0aCBncGlvIENTIGNvbnRyb2wgKi8KQEAgLTYyLDkgKzYzLDggQEAKIAlwYXIgPSByZWFkdyhNQ0ZHUElPX1BBUl9USU1FUik7CiAJcGFyICY9IDB4M2YzZjsKIAl3cml0ZXcocGFyLCBNQ0ZHUElPX1BBUl9USU1FUik7Ci19Ci0KICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkgKi8KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtODAsOSArODAsNyBAQAogewogCW1hY2hfc2NoZWRfaW5pdCA9IGh3X3RpbWVyX2luaXQ7CiAJbTUyM3hfZmVjX2luaXQoKTsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKIAltNTIzeF9xc3BpX2luaXQoKTsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL201MjQ5LmMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyNDkuYwppbmRleCBjODBiNWU1Li5mNjI1M2EzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyNDkuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyNDkuYwpAQCAtMjYsNiArMjYsNyBAQAogREVGSU5FX0NMSyhtY2Z0bXIxLCAibWNmdG1yLjEiLCBNQ0ZfQlVTQ0xLKTsKIERFRklORV9DTEsobWNmdWFydDAsICJtY2Z1YXJ0LjAiLCBNQ0ZfQlVTQ0xLKTsKIERFRklORV9DTEsobWNmdWFydDEsICJtY2Z1YXJ0LjEiLCBNQ0ZfQlVTQ0xLKTsKK0RFRklORV9DTEsobWNmcXNwaTAsICJtY2Zxc3BpLjAiLCBNQ0ZfQlVTQ0xLKTsKIAogc3RydWN0IGNsayAqbWNmX2Nsa3NbXSA9IHsKIAkmY2xrX3BsbCwKQEAgLTM0LDYgKzM1LDcgQEAKIAkmY2xrX21jZnRtcjEsCiAJJmNsa19tY2Z1YXJ0MCwKIAkmY2xrX21jZnVhcnQxLAorCSZjbGtfbWNmcXNwaTAsCiAJTlVMTAogfTsKIApAQCAtNzEsMTcgKzczLDE1IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKLQogc3RhdGljIHZvaWQgX19pbml0IG01MjQ5X3FzcGlfaW5pdCh2b2lkKQogeworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQogCS8qIFFTUEkgaXJxIHNldHVwICovCiAJd3JpdGViKE1DRlNJTV9JQ1JfQVVUT1ZFQyB8IE1DRlNJTV9JQ1JfTEVWRUw0IHwgTUNGU0lNX0lDUl9QUkkwLAogCSAgICAgICBNQ0ZTSU1fUVNQSUlDUik7CiAJbWNmX21hcGlycTJpbXIoTUNGX0lSUV9RU1BJLCBNQ0ZJTlRDX1FTUEkpOwotfQotCiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpICovCit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTExMCw5ICsxMTAsNyBAQAogI2lmZGVmIENPTkZJR19NNTI0OUMzCiAJbTUyNDlfc21jOTF4X2luaXQoKTsKICNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQogCW01MjQ5X3FzcGlfaW5pdCgpOwotI2VuZGlmCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyNXguYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI1eC5jCmluZGV4IDViOWY2NTcuLjFhZGJhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI1eC5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI1eC5jCkBAIC0yNiw2ICsyNiw3IEBACiBERUZJTkVfQ0xLKG1jZnRtcjEsICJtY2Z0bXIuMSIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MCwgIm1jZnVhcnQuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MSwgIm1jZnVhcnQuMSIsIE1DRl9CVVNDTEspOworREVGSU5FX0NMSyhtY2Zxc3BpMCwgIm1jZnFzcGkuMCIsIE1DRl9CVVNDTEspOwogCiBzdHJ1Y3QgY2xrICptY2ZfY2xrc1tdID0gewogCSZjbGtfcGxsLApAQCAtMzQsNiArMzUsNyBAQAogCSZjbGtfbWNmdG1yMSwKIAkmY2xrX21jZnVhcnQwLAogCSZjbGtfbWNmdWFydDEsCisJJmNsa19tY2Zxc3BpMCwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyNzIuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI3Mi5jCmluZGV4IGE4YzU4NTYuLjhhNGQzY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI3Mi5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI3Mi5jCkBAIC0zOSw2ICszOSw3IEBACiBERUZJTkVfQ0xLKG1jZnRtcjMsICJtY2Z0bXIuMyIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MCwgIm1jZnVhcnQuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MSwgIm1jZnVhcnQuMSIsIE1DRl9CVVNDTEspOworREVGSU5FX0NMSyhtY2Zxc3BpMCwgIm1jZnFzcGkuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhmZWMwLCAiZmVjLjAiLCBNQ0ZfQlVTQ0xLKTsKIAogc3RydWN0IGNsayAqbWNmX2Nsa3NbXSA9IHsKQEAgLTUwLDYgKzUxLDcgQEAKIAkmY2xrX21jZnRtcjMsCiAJJmNsa19tY2Z1YXJ0MCwKIAkmY2xrX21jZnVhcnQxLAorCSZjbGtfbWNmcXNwaTAsCiAJJmNsa19mZWMwLAogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyN3guYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTI3eC5jCmluZGV4IDZmYmZlOTA5Li42MmQ4MWVmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyN3guYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyN3guYwpAQCAtMzMsNiArMzMsNyBAQAogREVGSU5FX0NMSyhtY2Z1YXJ0MCwgIm1jZnVhcnQuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MSwgIm1jZnVhcnQuMSIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MiwgIm1jZnVhcnQuMiIsIE1DRl9CVVNDTEspOworREVGSU5FX0NMSyhtY2Zxc3BpMCwgIm1jZnFzcGkuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhmZWMwLCAiZmVjLjAiLCBNQ0ZfQlVTQ0xLKTsKIERFRklORV9DTEsoZmVjMSwgImZlYy4xIiwgTUNGX0JVU0NMSyk7CiAKQEAgLTQ2LDYgKzQ3LDcgQEAKIAkmY2xrX21jZnVhcnQwLAogCSZjbGtfbWNmdWFydDEsCiAJJmNsa19tY2Z1YXJ0MiwKKwkmY2xrX21jZnFzcGkwLAogCSZjbGtfZmVjMCwKIAkmY2xrX2ZlYzEsCiAJTlVMTApAQCAtNTMsMTAgKzU1LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQotCiBzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfcXNwaV9pbml0KHZvaWQpCiB7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyNzEpCiAJdTE2IHBhcjsKIApAQCAtNzAsOSArNzEsOCBAQAogCS8qIHNldHVwIFFTUFMgcGlucyBmb3IgUVNQSSB3aXRoIGdwaW8gQ1MgY29udHJvbCAqLwogCXdyaXRldygweDAwM2UsIE1DRkdQSU9fUEFSX1FTUEkpOwogI2VuZGlmCi19Ci0KICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkgKi8KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTIwLDkgKzEyMCw3IEBACiAJbWFjaF9zY2hlZF9pbml0ID0gaHdfdGltZXJfaW5pdDsKIAltNTI3eF91YXJ0c19pbml0KCk7CiAJbTUyN3hfZmVjX2luaXQoKTsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKIAltNTI3eF9xc3BpX2luaXQoKTsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL201Mjh4LmMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyOHguYwppbmRleCBiMDNhOWQyLi4yMWNkMTYxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyOHguYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvbTUyOHguYwpAQCAtMzQsNiArMzQsNyBAQAogREVGSU5FX0NMSyhtY2Z1YXJ0MCwgIm1jZnVhcnQuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MSwgIm1jZnVhcnQuMSIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhtY2Z1YXJ0MiwgIm1jZnVhcnQuMiIsIE1DRl9CVVNDTEspOworREVGSU5FX0NMSyhtY2Zxc3BpMCwgIm1jZnFzcGkuMCIsIE1DRl9CVVNDTEspOwogREVGSU5FX0NMSyhmZWMwLCAiZmVjLjAiLCBNQ0ZfQlVTQ0xLKTsKIAogc3RydWN0IGNsayAqbWNmX2Nsa3NbXSA9IHsKQEAgLTQ2LDIxICs0NywyMCBAQAogCSZjbGtfbWNmdWFydDAsCiAJJmNsa19tY2Z1YXJ0MSwKIAkmY2xrX21jZnVhcnQyLAorCSZjbGtfbWNmcXNwaTAsCiAJJmNsa19mZWMwLAogCU5VTEwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKLQogc3RhdGljIHZvaWQgX19pbml0IG01Mjh4X3FzcGlfaW5pdCh2b2lkKQogeworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQogCS8qIHNldHVwIFBvcnQgUVMgZm9yIFFTUEkgd2l0aCBncGlvIENTIGNvbnRyb2wgKi8KIAlfX3Jhd193cml0ZWIoMHgwNywgTUNGR1BJT19QUVNQQVIpOwotfQotCiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpICovCit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEyNiw5ICsxMjYsNyBAQAogCW1hY2hfc2NoZWRfaW5pdCA9IGh3X3RpbWVyX2luaXQ7CiAJbTUyOHhfdWFydHNfaW5pdCgpOwogCW01Mjh4X2ZlY19pbml0KCk7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCiAJbTUyOHhfcXNwaV9pbml0KCk7Ci0jZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9tNTN4eC5jIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL201M3h4LmMKaW5kZXggNTI4NmY5OC4uODA4NzlhNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL201M3h4LmMKKysrIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL201M3h4LmMKQEAgLTE2NiwxNSArMTY2LDEzIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkKLQogc3RhdGljIHZvaWQgX19pbml0IG01M3h4X3FzcGlfaW5pdCh2b2lkKQogeworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQogCS8qIHNldHVwIFFTUFMgcGlucyBmb3IgUVNQSSB3aXRoIGdwaW8gQ1MgY29udHJvbCAqLwogCXdyaXRldygweDAxZjAsIE1DRkdQSU9fUEFSX1FTUEkpOwotfQotCiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpICovCit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTIxOSw5ICsyMTcsNyBAQAogCW01M3h4X2Nsa19pbml0KCk7CiAJbTUzeHhfdWFydHNfaW5pdCgpOwogCW01M3h4X2ZlY19pbml0KCk7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCiAJbTUzeHhfcXNwaV9pbml0KCk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19CRE1fRElTQUJMRQogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21ldGFnL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAzMDdlY2QyLi40NzBlMzY1IDEwMDY0NAotLS0gYS9hcmNoL21ldGFnL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvbWV0YWcvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX01FVEFHX0FUT01JQ0lUWV9JUlFTT0ZGKQogLyogVGhlIHNpbXBsZSBVUCBjYXNlLiAqLwpAQCAtMzksMTEgKzQwLDYgQEAKIAogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCiAjZW5kaWYKIAogI2RlZmluZSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKHYpICAgICAgIGF0b21pY19zdWJfaWZfcG9zaXRpdmUoMSwgdikKZGlmZiAtLWdpdCBhL2FyY2gvbWV0YWcvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKaW5kZXggMmQ2ZjBkZS4uYzc1OTFlOCAxMDA2NDQKLS0tIGEvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKKysrIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTEwMCw0ICsxMDAsNyBAQAogCV9fX3AxOwkJCQkJCQkJXAogfSkKIAorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWMoKQliYXJyaWVyKCkKKwogI2VuZGlmIC8qIF9BU01fTUVUQUdfQkFSUklFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21ldGFnL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBjMGQwZGYwLi4yNjcxMTM0IDEwMDY0NAotLS0gYS9hcmNoL21ldGFnL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbWV0YWcvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTUsMTIgKzUsNiBAQAogI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAjaW5jbHVkZSA8YXNtL2dsb2JhbF9sb2NrLmg+CiAKLS8qCi0gKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KLSAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBiYXNpcyBvZiBvdXIgYml0IG9wcy4KZGlmZiAtLWdpdCBhL2FyY2gvbWV0YWcvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbWV0YWcvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBiMTllOWM1Li40NzcxMTMzIDEwMDY0NAotLS0gYS9hcmNoL21ldGFnL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMTcsMTAgKzExNyw4IEBACiAjZGVmaW5lIFRJRl9TRUNDT01QCQk1CS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJNwkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KLSNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHICAgICAgOAkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKLQkJCQkJICAgVElGX05FRURfUkVTQ0hFRCAqLwotI2RlZmluZSBUSUZfTUVNRElFCQk5CS8qIGlzIHRlcm1pbmF0aW5nIGR1ZSB0byBPT00ga2lsbGVyICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgIDEwCS8qIHN5c2NhbGwgdHJhY2Vwb2ludCBpbnN0cnVtZW50YXRpb24gKi8KKyNkZWZpbmUgVElGX01FTURJRQkJOAkvKiBpcyB0ZXJtaW5hdGluZyBkdWUgdG8gT09NIGtpbGxlciAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UCTkJLyogc3lzY2FsbCB0cmFjZXBvaW50IGluc3RydW1lbnRhdGlvbiAqLwogCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCA5MzVmOWJlLi4zMzU1MjQwIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC00NCwxMSArNDQsNiBAQAogICovCiAjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAjaWZkZWYgQ09ORklHX1BDSQogZXh0ZXJuIHZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyk7CiBleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfcGNpX2RtYV9vcHModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYyBiL2FyY2gvbWljcm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jCmluZGV4IDcwOTk2Y2MuLmE1OWRlMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jCkBAIC0xNjgsMjYgKzE2OCw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHBjaV9zaG93X2RldnNwZWMoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCW5wID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwotCWlmIChucCA9PSBOVUxMIHx8IG5wLT5mdWxsX25hbWUgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCBucC0+ZnVsbF9uYW1lKTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihkZXZzcGVjLCBTX0lSVUdPLCBwY2lfc2hvd19kZXZzcGVjLCBOVUxMKTsKLQotLyogQWRkIHN5c2ZzIHByb3BlcnRpZXMgKi8KLWludCBwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2RldnNwZWMpOwotfQotCiB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA1Y2Q2OTVmLi41ZTAwMTRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMTc1NiwxNCArMTc1NiwxNCBAQAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiBidWlsZGluZyBhIGd1ZXN0IGtlcm5lbCBmb3IgS1ZNIChUcmFwICYgRW11bGF0ZSkgbW9kZQogCi1jb25maWcgS1ZNX0hPU1RfRlJFUQotCWludCAiS1ZNIEhvc3QgUHJvY2Vzc29yIEZyZXF1ZW5jeSAoTUh6KSIKK2NvbmZpZyBLVk1fR1VFU1RfVElNRVJfRlJFUQorCWludCAiQ291bnQvQ29tcGFyZSBUaW1lciBGcmVxdWVuY3kgKE1IeikiCiAJZGVwZW5kcyBvbiBLVk1fR1VFU1QKLQlkZWZhdWx0IDUwMAorCWRlZmF1bHQgMTAwCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIGJ1aWxkaW5nIGEgZ3Vlc3Qga2VybmVsIGZvciBLVk0gdG8gc2tpcAotCSAgUlRDIGVtdWxhdGlvbiB3aGVuIGRldGVybWluaW5nIGd1ZXN0IENQVSBGcmVxdWVuY3kuICBJbnN0ZWFkLCB0aGUgZ3Vlc3QKLQkgIHByb2Nlc3NvciBmcmVxdWVuY3kgaXMgYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGhvc3QgZnJlcXVlbmN5LgorCSAgU2V0IHRoaXMgdG8gbm9uLXplcm8gaWYgYnVpbGRpbmcgYSBndWVzdCBrZXJuZWwgZm9yIEtWTSB0byBza2lwIFJUQworCSAgZW11bGF0aW9uIHdoZW4gZGV0ZXJtaW5pbmcgZ3Vlc3QgQ1BVIEZyZXF1ZW5jeS4gSW5zdGVhZCwgdGhlIGd1ZXN0J3MKKwkgIHRpbWVyIGZyZXF1ZW5jeSBpcyBzcGVjaWZpZWQgZGlyZWN0bHkuCiAKIGNob2ljZQogCXByb21wdCAiS2VybmVsIHBhZ2Ugc2l6ZSIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnCmluZGV4IGU1YjczZGUuLjAwMjY4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZwpAQCAtMTg4LDcgKzE4OCw2IEBACiBDT05GSUdfVVNCX01PVVNFPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKIENPTkZJR19VU0JfV1VTQl9DQkFGPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZwppbmRleCAzNDNiZWJjLi4yMjdhOWRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCkBAIC0yOTcsNyArMjk3LDYgQEAKIENPTkZJR19ISURfWkVST1BMVVM9bQogQ09ORklHX1pFUk9QTFVTX0ZGPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQogQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCmluZGV4IGMxNmRlOTguLjdhMzQ2NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwpAQCAtNDcsNyArNDcsNiBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9WUjQxWFg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXNwNzF4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZwppbmRleCBkMTE0MmU5Li4yMDFlZGZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZwpAQCAtNjcsNyArNjcsNiBAQAogQ09ORklHX0kyQ19QTUNNU1A9eQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZwppbmRleCA1OTM5NDZhLi5kMjY5YTUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZwpAQCAtNTc1LDcgKzU3NSw2IEBACiBDT05GSUdfVVNCX0tCRD1tCiBDT05GSUdfVVNCX01PVVNFPW0KIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggNTlkOWQyZi4uNzNlN2JmNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMzAxLDcgKzMwMSw2IEBACiBDT05GSUdfVVNCX0tCRD1tCiBDT05GSUdfVVNCX01PVVNFPW0KIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj1tCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MF9zd2FybV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTBfc3dhcm1fZGVmY29uZmlnCmluZGV4IDViMDQ2M2UuLjUxYmFiMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MF9zd2FybV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwX3N3YXJtX2RlZmNvbmZpZwpAQCAtNzIsNyArNzIsNiBAQAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnCmluZGV4IDMwMDM2YjQuLjExZjUxNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjE5X2RlZmNvbmZpZwpAQCAtNzIsNyArNzIsNiBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKaW5kZXggODFiZmExZC4uZDk5YjE5MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCkBAIC02OSw3ICs2OSw2IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBlOGViM2Q1Li4zN2IyYmVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC03NjEsMTMgKzc2MSw0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAotLyoKLSAqIGF0b21pYypfcmV0dXJuIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6aW5nIGJ1dCBub3QgdGhlIG5vbi0qX3JldHVybgotICogdmVyc2lvbnMuCi0gKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbGxzY19tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWJfX2JlZm9yZV9sbHNjKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX2xsc2NfbWIoKQotCiAjZW5kaWYgLyogX0FTTV9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKaW5kZXggZTFhYTRlNC4uZDAxMDFkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC0xOTUsNCArMTk1LDcgQEAKIAlfX19wMTsJCQkJCQkJCVwKIH0pCiAKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljKCkJc21wX21iX19iZWZvcmVfbGxzYygpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkJc21wX2xsc2NfbWIoKQorCiAjZW5kaWYgLyogX19BU01fQkFSUklFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNmE2NWQ0OS4uN2M4ODE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMzgsMTMgKzM4LDYgQEAKICNlbmRpZgogCiAvKgotICogY2xlYXJfYml0KCkgZG9lc24ndCBwcm92aWRlIGFueSBiYXJyaWVyIGZvciB0aGUgY29tcGlsZXIuCi0gKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iX19iZWZvcmVfbGxzYygpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX2xsc2NfbWIoKQotCi0KLS8qCiAgKiBUaGVzZSBhcmUgdGhlICJzbG93ZXIiIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgYW5kIGFyZSBpbiBiaXRvcHMuYy4KICAqIFRoZXNlIGZ1bmN0aW9ucyBjYWxsIHJhd19sb2NhbF9pcnFfe3NhdmUscmVzdG9yZX0oKS4KICAqLwpAQCAtMTIwLDcgKzExMyw3IEBACiAgKgogICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKICAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCi0gKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBhbmQvb3Igc21wX21iX19hZnRlcl9hdG9taWMoKQogICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQpAQCAtMTc1LDcgKzE2OCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXRfdW5sb2NrKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KG5yLCBhZGRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAwNjBhYWE2Li5iMGFhOTU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTksNiArMTksMzggQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAorLyogTUlQUyBLVk0gcmVnaXN0ZXIgaWRzICovCisjZGVmaW5lIE1JUFNfQ1AwXzMyKF9SLCBfUykJCQkJCVwKKwkoS1ZNX1JFR19NSVBTIHwgS1ZNX1JFR19TSVpFX1UzMiB8IDB4MTAwMDAgfCAoOCAqIChfUikgKyAoX1MpKSkKKworI2RlZmluZSBNSVBTX0NQMF82NChfUiwgX1MpCQkJCQlcCisJKEtWTV9SRUdfTUlQUyB8IEtWTV9SRUdfU0laRV9VNjQgfCAweDEwMDAwIHwgKDggKiAoX1IpICsgKF9TKSkpCisKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9JTkRFWAkJTUlQU19DUDBfMzIoMCwgMCkKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9FTlRSWUxPMAlNSVBTX0NQMF82NCgyLCAwKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0VOVFJZTE8xCU1JUFNfQ1AwXzY0KDMsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ09OVEVYVAlNSVBTX0NQMF82NCg0LCAwKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX1VTRVJMT0NBTAlNSVBTX0NQMF82NCg0LCAyKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX1BBR0VNQVNLCU1JUFNfQ1AwXzMyKDUsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfUEFHRUdSQUlOCU1JUFNfQ1AwXzMyKDUsIDEpCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfV0lSRUQJCU1JUFNfQ1AwXzMyKDYsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfSFdSRU5BCQlNSVBTX0NQMF8zMig3LCAwKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0JBRFZBRERSCU1JUFNfQ1AwXzY0KDgsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ09VTlQJCU1JUFNfQ1AwXzMyKDksIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfRU5UUllISQlNSVBTX0NQMF82NCgxMCwgMCkKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9DT01QQVJFCU1JUFNfQ1AwXzMyKDExLCAwKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX1NUQVRVUwkJTUlQU19DUDBfMzIoMTIsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ0FVU0UJCU1JUFNfQ1AwXzMyKDEzLCAwKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0VQQwkJTUlQU19DUDBfNjQoMTQsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfRUJBU0UJCU1JUFNfQ1AwXzY0KDE1LCAxKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRwkJTUlQU19DUDBfMzIoMTYsIDApCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ09ORklHMQlNSVBTX0NQMF8zMigxNiwgMSkKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9DT05GSUcyCU1JUFNfQ1AwXzMyKDE2LCAyKQorI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRzMJTUlQU19DUDBfMzIoMTYsIDMpCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ09ORklHNwlNSVBTX0NQMF8zMigxNiwgNykKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9YQ09OVEVYVAlNSVBTX0NQMF82NCgyMCwgMCkKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9FUlJPUkVQQwlNSVBTX0NQMF82NCgzMCwgMCkKKwogCiAjZGVmaW5lIEtWTV9NQVhfVkNQVVMJCTEKICNkZWZpbmUgS1ZNX1VTRVJfTUVNX1NMT1RTCTgKQEAgLTM3Miw4ICs0MDQsMTkgQEAKIAogCXUzMiBpb19ncHI7CQkvKiBHUFIgdXNlZCBhcyBJTyBzb3VyY2UvdGFyZ2V0ICovCiAKLQkvKiBVc2VkIHRvIGNhbGlicmF0ZSB0aGUgdmlydXRhbCBjb3VudCByZWdpc3RlciBmb3IgdGhlIGd1ZXN0ICovCi0JaW50MzJfdCBob3N0X2NwMF9jb3VudDsKKwlzdHJ1Y3QgaHJ0aW1lciBjb21wYXJlY291bnRfdGltZXI7CisJLyogQ291bnQgdGltZXIgY29udHJvbCBLVk0gcmVnaXN0ZXIgKi8KKwl1aW50MzJfdCBjb3VudF9jdGw7CisJLyogQ291bnQgYmlhcyBmcm9tIHRoZSByYXcgdGltZSAqLworCXVpbnQzMl90IGNvdW50X2JpYXM7CisJLyogRnJlcXVlbmN5IG9mIHRpbWVyIGluIEh6ICovCisJdWludDMyX3QgY291bnRfaHo7CisJLyogRHluYW1pYyBuYW5vc2Vjb25kIGJpYXMgKG11bHRpcGxlIG9mIGNvdW50X3BlcmlvZCkgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKwlzNjQgY291bnRfZHluX2JpYXM7CisJLyogUmVzdW1lIHRpbWUgKi8KKwlrdGltZV90IGNvdW50X3Jlc3VtZTsKKwkvKiBQZXJpb2Qgb2YgdGltZXIgdGljayBpbiBucyAqLworCXU2NCBjb3VudF9wZXJpb2Q7CiAKIAkvKiBCaXRtYXNrIG9mIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcGVuZGluZyAqLwogCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19leGNlcHRpb25zOwpAQCAtMzk0LDggKzQzNyw2IEBACiAJdWludDMyX3QgZ3Vlc3Rfa2VybmVsX2FzaWRbTlJfQ1BVU107CiAJc3RydWN0IG1tX3N0cnVjdCBndWVzdF9rZXJuZWxfbW0sIGd1ZXN0X3VzZXJfbW07CiAKLQlzdHJ1Y3QgaHJ0aW1lciBjb21wYXJlY291bnRfdGltZXI7Ci0KIAlpbnQgbGFzdF9zY2hlZF9jcHU7CiAKIAkvKiBXQUlUIGV4ZWN1dGVkICovCkBAIC00MTAsNiArNDUxLDcgQEAKICNkZWZpbmUga3ZtX3JlYWRfYzBfZ3Vlc3RfY29udGV4dChjb3AwKQkJKGNvcDAtPnJlZ1tNSVBTX0NQMF9UTEJfQ09OVEVYVF1bMF0pCiAjZGVmaW5lIGt2bV93cml0ZV9jMF9ndWVzdF9jb250ZXh0KGNvcDAsIHZhbCkJKGNvcDAtPnJlZ1tNSVBTX0NQMF9UTEJfQ09OVEVYVF1bMF0gPSAodmFsKSkKICNkZWZpbmUga3ZtX3JlYWRfYzBfZ3Vlc3RfdXNlcmxvY2FsKGNvcDApCShjb3AwLT5yZWdbTUlQU19DUDBfVExCX0NPTlRFWFRdWzJdKQorI2RlZmluZSBrdm1fd3JpdGVfYzBfZ3Vlc3RfdXNlcmxvY2FsKGNvcDAsIHZhbCkJKGNvcDAtPnJlZ1tNSVBTX0NQMF9UTEJfQ09OVEVYVF1bMl0gPSAodmFsKSkKICNkZWZpbmUga3ZtX3JlYWRfYzBfZ3Vlc3RfcGFnZW1hc2soY29wMCkJKGNvcDAtPnJlZ1tNSVBTX0NQMF9UTEJfUEdfTUFTS11bMF0pCiAjZGVmaW5lIGt2bV93cml0ZV9jMF9ndWVzdF9wYWdlbWFzayhjb3AwLCB2YWwpCShjb3AwLT5yZWdbTUlQU19DUDBfVExCX1BHX01BU0tdWzBdID0gKHZhbCkpCiAjZGVmaW5lIGt2bV9yZWFkX2MwX2d1ZXN0X3dpcmVkKGNvcDApCQkoY29wMC0+cmVnW01JUFNfQ1AwX1RMQl9XSVJFRF1bMF0pCkBAIC00NDksMTUgKzQ5MSw3NCBAQAogI2RlZmluZSBrdm1fcmVhZF9jMF9ndWVzdF9lcnJvcmVwYyhjb3AwKQkoY29wMC0+cmVnW01JUFNfQ1AwX0VSUk9SX1BDXVswXSkKICNkZWZpbmUga3ZtX3dyaXRlX2MwX2d1ZXN0X2Vycm9yZXBjKGNvcDAsIHZhbCkJKGNvcDAtPnJlZ1tNSVBTX0NQMF9FUlJPUl9QQ11bMF0gPSAodmFsKSkKIAorLyoKKyAqIFNvbWUgb2YgdGhlIGd1ZXN0IHJlZ2lzdGVycyBtYXkgYmUgbW9kaWZpZWQgYXN5bmNocm9ub3VzbHkgKGUuZy4gZnJvbSBhCisgKiBocnRpbWVyIGNhbGxiYWNrIGluIGhhcmQgaXJxIGNvbnRleHQpIGFuZCB0aGVyZWZvcmUgbmVlZCBzdHJvbmdlciBhdG9taWNpdHkKKyAqIGd1YXJhbnRlZXMgdGhhbiBvdGhlciByZWdpc3RlcnMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9rdm1fYXRvbWljX3NldF9jMF9ndWVzdF9yZWcodW5zaWduZWQgbG9uZyAqcmVnLAorCQkJCQkJdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWRvIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAltaXBzMwkJCQlcbiIKKwkJIgkiIF9fTEwgIiUwLCAlMQkJCQlcbiIKKwkJIglvcgklMCwgJTIJCQkJXG4iCisJCSIJIiBfX1NDCSIlMCwgJTEJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICIrbSIgKCpyZWcpCisJCTogInIiICh2YWwpKTsKKwl9IHdoaWxlICh1bmxpa2VseSghdGVtcCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2t2bV9hdG9taWNfY2xlYXJfYzBfZ3Vlc3RfcmVnKHVuc2lnbmVkIGxvbmcgKnJlZywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWRvIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAltaXBzMwkJCQlcbiIKKwkJIgkiIF9fTEwgIiUwLCAlMQkJCQlcbiIKKwkJIglhbmQJJTAsICUyCQkJCVxuIgorCQkiCSIgX19TQwkiJTAsICUxCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiK20iICgqcmVnKQorCQk6ICJyIiAofnZhbCkpOworCX0gd2hpbGUgKHVubGlrZWx5KCF0ZW1wKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfa3ZtX2F0b21pY19jaGFuZ2VfYzBfZ3Vlc3RfcmVnKHVuc2lnbmVkIGxvbmcgKnJlZywKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgY2hhbmdlLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWRvIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAltaXBzMwkJCQlcbiIKKwkJIgkiIF9fTEwgIiUwLCAlMQkJCQlcbiIKKwkJIglhbmQJJTAsICUyCQkJCVxuIgorCQkiCW9yCSUwLCAlMwkJCQlcbiIKKwkJIgkiIF9fU0MJIiUwLCAlMQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCVxuIgorCQk6ICI9JnIiICh0ZW1wKSwgIittIiAoKnJlZykKKwkJOiAiciIgKH5jaGFuZ2UpLCAiciIgKHZhbCAmIGNoYW5nZSkpOworCX0gd2hpbGUgKHVubGlrZWx5KCF0ZW1wKSk7Cit9CisKICNkZWZpbmUga3ZtX3NldF9jMF9ndWVzdF9zdGF0dXMoY29wMCwgdmFsKQkoY29wMC0+cmVnW01JUFNfQ1AwX1NUQVRVU11bMF0gfD0gKHZhbCkpCiAjZGVmaW5lIGt2bV9jbGVhcl9jMF9ndWVzdF9zdGF0dXMoY29wMCwgdmFsKQkoY29wMC0+cmVnW01JUFNfQ1AwX1NUQVRVU11bMF0gJj0gfih2YWwpKQotI2RlZmluZSBrdm1fc2V0X2MwX2d1ZXN0X2NhdXNlKGNvcDAsIHZhbCkJKGNvcDAtPnJlZ1tNSVBTX0NQMF9DQVVTRV1bMF0gfD0gKHZhbCkpCi0jZGVmaW5lIGt2bV9jbGVhcl9jMF9ndWVzdF9jYXVzZShjb3AwLCB2YWwpCShjb3AwLT5yZWdbTUlQU19DUDBfQ0FVU0VdWzBdICY9IH4odmFsKSkKKworLyogQ2F1c2UgY2FuIGJlIG1vZGlmaWVkIGFzeW5jaHJvbm91c2x5IGZyb20gaGFyZGlycSBocnRpbWVyIGNhbGxiYWNrICovCisjZGVmaW5lIGt2bV9zZXRfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgdmFsKQkJCQlcCisJX2t2bV9hdG9taWNfc2V0X2MwX2d1ZXN0X3JlZygmY29wMC0+cmVnW01JUFNfQ1AwX0NBVVNFXVswXSwgdmFsKQorI2RlZmluZSBrdm1fY2xlYXJfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgdmFsKQkJCQlcCisJX2t2bV9hdG9taWNfY2xlYXJfYzBfZ3Vlc3RfcmVnKCZjb3AwLT5yZWdbTUlQU19DUDBfQ0FVU0VdWzBdLCB2YWwpCiAjZGVmaW5lIGt2bV9jaGFuZ2VfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgY2hhbmdlLCB2YWwpCQkJXAotewkJCQkJCQkJCVwKLQlrdm1fY2xlYXJfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgY2hhbmdlKTsJCQkJXAotCWt2bV9zZXRfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgKCh2YWwpICYgKGNoYW5nZSkpKTsJCVwKLX0KKwlfa3ZtX2F0b21pY19jaGFuZ2VfYzBfZ3Vlc3RfcmVnKCZjb3AwLT5yZWdbTUlQU19DUDBfQ0FVU0VdWzBdLAlcCisJCQkJCWNoYW5nZSwgdmFsKQorCiAjZGVmaW5lIGt2bV9zZXRfYzBfZ3Vlc3RfZWJhc2UoY29wMCwgdmFsKQkoY29wMC0+cmVnW01JUFNfQ1AwX1BSSURdWzFdIHw9ICh2YWwpKQogI2RlZmluZSBrdm1fY2xlYXJfYzBfZ3Vlc3RfZWJhc2UoY29wMCwgdmFsKQkoY29wMC0+cmVnW01JUFNfQ1AwX1BSSURdWzFdICY9IH4odmFsKSkKICNkZWZpbmUga3ZtX2NoYW5nZV9jMF9ndWVzdF9lYmFzZShjb3AwLCBjaGFuZ2UsIHZhbCkJCQlcCkBAIC00NjgsMjkgKzU2OSwzMyBAQAogCiAKIHN0cnVjdCBrdm1fbWlwc19jYWxsYmFja3MgewotCWludCAoKmhhbmRsZV9jb3BfdW51c2FibGUpIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKmhhbmRsZV90bGJfbW9kKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlpbnQgKCpoYW5kbGVfdGxiX2xkX21pc3MpIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKmhhbmRsZV90bGJfc3RfbWlzcykgKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqaGFuZGxlX2FkZHJfZXJyX3N0KSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlpbnQgKCpoYW5kbGVfYWRkcl9lcnJfbGQpIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKmhhbmRsZV9zeXNjYWxsKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlpbnQgKCpoYW5kbGVfcmVzX2luc3QpIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKmhhbmRsZV9icmVhaykgKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqdm1faW5pdCkgKHN0cnVjdCBrdm0gKmt2bSk7Ci0JaW50ICgqdmNwdV9pbml0KSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlpbnQgKCp2Y3B1X3NldHVwKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQkgZ3BhX3QoKmd2YV90b19ncGEpIChndmFfdCBndmEpOwotCXZvaWQgKCpxdWV1ZV90aW1lcl9pbnQpIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpkZXF1ZXVlX3RpbWVyX2ludCkgKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKnF1ZXVlX2lvX2ludCkgKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgICAgIHN0cnVjdCBrdm1fbWlwc19pbnRlcnJ1cHQgKmlycSk7Ci0Jdm9pZCAoKmRlcXVldWVfaW9faW50KSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCXN0cnVjdCBrdm1fbWlwc19pbnRlcnJ1cHQgKmlycSk7Ci0JaW50ICgqaXJxX2RlbGl2ZXIpIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBwcmlvcml0eSwKLQkJCSAgICB1aW50MzJfdCBjYXVzZSk7Ci0JaW50ICgqaXJxX2NsZWFyKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcHJpb3JpdHksCi0JCQkgIHVpbnQzMl90IGNhdXNlKTsKKwlpbnQgKCpoYW5kbGVfY29wX3VudXNhYmxlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKmhhbmRsZV90bGJfbW9kKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKmhhbmRsZV90bGJfbGRfbWlzcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwlpbnQgKCpoYW5kbGVfdGxiX3N0X21pc3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqaGFuZGxlX2FkZHJfZXJyX3N0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKmhhbmRsZV9hZGRyX2Vycl9sZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwlpbnQgKCpoYW5kbGVfc3lzY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwlpbnQgKCpoYW5kbGVfcmVzX2luc3QpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqaGFuZGxlX2JyZWFrKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKnZtX2luaXQpKHN0cnVjdCBrdm0gKmt2bSk7CisJaW50ICgqdmNwdV9pbml0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKnZjcHVfc2V0dXApKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJZ3BhX3QgKCpndmFfdG9fZ3BhKShndmFfdCBndmEpOworCXZvaWQgKCpxdWV1ZV90aW1lcl9pbnQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKmRlcXVldWVfdGltZXJfaW50KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCpxdWV1ZV9pb19pbnQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICAgc3RydWN0IGt2bV9taXBzX2ludGVycnVwdCAqaXJxKTsKKwl2b2lkICgqZGVxdWV1ZV9pb19pbnQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX21pcHNfaW50ZXJydXB0ICppcnEpOworCWludCAoKmlycV9kZWxpdmVyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBwcmlvcml0eSwKKwkJCSAgIHVpbnQzMl90IGNhdXNlKTsKKwlpbnQgKCppcnFfY2xlYXIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IHByaW9yaXR5LAorCQkJIHVpbnQzMl90IGNhdXNlKTsKKwlpbnQgKCpnZXRfb25lX3JlZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcsIHM2NCAqdik7CisJaW50ICgqc2V0X29uZV9yZWcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnLCBzNjQgdik7CiB9OwogZXh0ZXJuIHN0cnVjdCBrdm1fbWlwc19jYWxsYmFja3MgKmt2bV9taXBzX2NhbGxiYWNrczsKIGludCBrdm1fbWlwc19lbXVsYXRpb25faW5pdChzdHJ1Y3Qga3ZtX21pcHNfY2FsbGJhY2tzICoqaW5zdGFsbF9jYWxsYmFja3MpOwpAQCAtNjA5LDcgKzcxNCwxNiBAQAogZXh0ZXJuIGVudW0gZW11bGF0aW9uX3Jlc3VsdCBrdm1fbWlwc19jb21wbGV0ZV9tbWlvX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJCSBzdHJ1Y3Qga3ZtX3J1biAqcnVuKTsKIAotZW51bSBlbXVsYXRpb25fcmVzdWx0IGt2bV9taXBzX2VtdWxhdGVfY291bnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3VpbnQzMl90IGt2bV9taXBzX3JlYWRfY291bnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX21pcHNfd3JpdGVfY291bnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBjb3VudCk7Cit2b2lkIGt2bV9taXBzX3dyaXRlX2NvbXBhcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBjb21wYXJlKTsKK3ZvaWQga3ZtX21pcHNfaW5pdF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9taXBzX3NldF9jb3VudF9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzNjQgY291bnRfY3RsKTsKK2ludCBrdm1fbWlwc19zZXRfY291bnRfcmVzdW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgczY0IGNvdW50X3Jlc3VtZSk7CitpbnQga3ZtX21pcHNfc2V0X2NvdW50X2h6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgczY0IGNvdW50X2h6KTsKK3ZvaWQga3ZtX21pcHNfY291bnRfZW5hYmxlX2NhdXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV9taXBzX2NvdW50X2Rpc2FibGVfY2F1c2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9taXBzX2NvdW50X3RpbWVvdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogZW51bSBlbXVsYXRpb25fcmVzdWx0IGt2bV9taXBzX2NoZWNrX3ByaXZpbGVnZSh1bnNpZ25lZCBsb25nIGNhdXNlLAogCQkJCQkgICAgICAgdWludDMyX3QgKm9wYywKQEAgLTY0Niw3ICs3NjAsNiBAQAogCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIC8qIE1pc2MgKi8KLWV4dGVybiB2b2lkIG1pcHMzMl9TeW5jSUNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiBpbnQga3ZtX21pcHNfZHVtcF9zdGF0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcga3ZtX21pcHNfZ2V0X3JhbXNpemUoc3RydWN0IGt2bSAqa3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDEyZDY4NDIuLjk3NGIwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTczLDExICs3Myw2IEBACiAKIGV4dGVybiB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAotc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxLCBpbnQgYWN0aXZlKQotewotCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCi19Ci0KICNkZWZpbmUgSEFWRV9QQ0lfTU1BUAogCiBleHRlcm4gaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IGYwOWZmNWEuLjJjMDRiNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC0xMDYsNiArMTA2LDQxIEBACiAjZGVmaW5lIEtWTV9SRUdfTUlQU19MTyAoS1ZNX1JFR19NSVBTIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDMzKQogI2RlZmluZSBLVk1fUkVHX01JUFNfUEMgKEtWTV9SRUdfTUlQUyB8IEtWTV9SRUdfU0laRV9VNjQgfCAzNCkKIAorLyogS1ZNIHNwZWNpZmljIGNvbnRyb2wgcmVnaXN0ZXJzICovCisKKy8qCisgKiBDUDBfQ291bnQgY29udHJvbAorICogREM6ICAgIFNldCAwOiBNYXN0ZXIgZGlzYWJsZSBDUDBfQ291bnQgYW5kIHNldCBDT1VOVF9SRVNVTUUgdG8gbm93CisgKiAgICAgICAgU2V0IDE6IE1hc3RlciByZS1lbmFibGUgQ1AwX0NvdW50IHdpdGggdW5jaGFuZ2VkIGJpYXMsIGhhbmRsaW5nIHRpbWVyCisgKiAgICAgICAgICAgICAgIGludGVycnVwdHMgc2luY2UgQ09VTlRfUkVTVU1FCisgKiAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBmcmVlemUgdGhlIHRpbWVyIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YKKyAqICAgICAgICB0aGUgQ1AwX0NvdW50IGFuZCB0aW1lciBpbnRlcnJ1cHQgcGVuZGluZyBzdGF0ZSwgd2hpbGUgYWxzbyByZXN1bWluZworICogICAgICAgIHNhZmVseSB3aXRob3V0IGxvc2luZyB0aW1lIG9yIGd1ZXN0IHRpbWVyIGludGVycnVwdHMuCisgKiBPdGhlcjogUmVzZXJ2ZWQsIGRvIG5vdCBjaGFuZ2UuCisgKi8KKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NPVU5UX0NUTAkJKEtWTV9SRUdfTUlQUyB8IEtWTV9SRUdfU0laRV9VNjQgfCBcCisJCQkJCSAweDIwMDAwIHwgMCkKKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NPVU5UX0NUTF9EQwkweDAwMDAwMDAxCisKKy8qCisgKiBDUDBfQ291bnQgcmVzdW1lIG1vbm90b25pYyBuYW5vc2Vjb25kcworICogVGhlIG1vbm90b25pYyBuYW5vc2Vjb25kIHRpbWUgb2YgdGhlIGxhc3Qgc2V0IG9mIENPVU5UX0NUTC5EQyAobWFzdGVyCisgKiBkaXNhYmxlKS4gQW55IHJlYWRzIGFuZCB3cml0ZXMgb2YgQ291bnQgcmVsYXRlZCByZWdpc3RlcnMgd2hpbGUKKyAqIENPVU5UX0NUTC5EQz0xIHdpbGwgYXBwZWFyIHRvIG9jY3VyIGF0IHRoaXMgdGltZS4gV2hlbiBDT1VOVF9DVEwuREMgaXMKKyAqIGNsZWFyZWQgYWdhaW4gKG1hc3RlciBlbmFibGUpIGFueSB0aW1lciBpbnRlcnJ1cHRzIHNpbmNlIHRoaXMgdGltZSB3aWxsIGJlCisgKiBlbXVsYXRlZC4KKyAqIE1vZGlmaWNhdGlvbnMgdG8gdGltZXMgaW4gdGhlIGZ1dHVyZSBhcmUgcmVqZWN0ZWQuCisgKi8KKyNkZWZpbmUgS1ZNX1JFR19NSVBTX0NPVU5UX1JFU1VNRQkoS1ZNX1JFR19NSVBTIHwgS1ZNX1JFR19TSVpFX1U2NCB8IFwKKwkJCQkJIDB4MjAwMDAgfCAxKQorLyoKKyAqIENQMF9Db3VudCByYXRlIGluIEh6CisgKiBTcGVjaWZpZXMgdGhlIHJhdGUgb2YgdGhlIENQMF9Db3VudCB0aW1lciBpbiBIei4gTW9kaWZpY2F0aW9ucyBvY2N1ciB3aXRob3V0CisgKiBkaXNjb250aW51aXRpZXMgaW4gQ1AwX0NvdW50LgorICovCisjZGVmaW5lIEtWTV9SRUdfTUlQU19DT1VOVF9IWgkJKEtWTV9SRUdfTUlQUyB8IEtWTV9SRUdfU0laRV9VNjQgfCBcCisJCQkJCSAweDIwMDAwIHwgMikKKwogLyoKICAqIEtWTSBNSVBTIHNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKaW5kZXggZDFmZWE3YS4uMTgxOGRhNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCkBAIC02Miw5ICs2Miw5IEBACiAKIHZvaWQgZnJlZV9pcnFubyh1bnNpZ25lZCBpbnQgaXJxKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChpcnEsIGlycV9tYXApOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rdm0va3ZtX2xvY29yZS5TIGIvYXJjaC9taXBzL2t2bS9rdm1fbG9jb3JlLlMKaW5kZXggYmJhY2UwOS4uMDMzYWMzNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2t2bS9rdm1fbG9jb3JlLlMKKysrIGIvYXJjaC9taXBzL2t2bS9rdm1fbG9jb3JlLlMKQEAgLTYxMSwzNSArNjExLDMgQEAKIAkud29yZCBfQ19MQUJFTChNSVBTWChHdWVzdEV4Y2VwdGlvbikpCSMgMjkKIAkud29yZCBfQ19MQUJFTChNSVBTWChHdWVzdEV4Y2VwdGlvbikpCSMgMzAKIAkud29yZCBfQ19MQUJFTChNSVBTWChHdWVzdEV4Y2VwdGlvbikpCSMgMzEKLQotCi0vKiBUaGlzIHJvdXRpbmUgbWFrZXMgY2hhbmdlcyB0byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGVmZmVjdGl2ZSB0byB0aGUgaGFyZHdhcmUuCi0gKiBJdCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gaXMgd3JpdHRlbi4KLSAqIE9uIHJldHVybiwgdGhlIG5ldyBpbnN0cnVjdGlvbnMgYXJlIGVmZmVjdGl2ZS4KLSAqIElucHV0czoKLSAqIGEwID0gU3RhcnQgYWRkcmVzcyBvZiBuZXcgaW5zdHJ1Y3Rpb24gc3RyZWFtCi0gKiBhMSA9IFNpemUsIGluIGJ5dGVzLCBvZiBuZXcgaW5zdHJ1Y3Rpb24gc3RyZWFtCi0gKi8KLQotI2RlZmluZSBIV19TWU5DSV9TdGVwICAgICAgICQxCi1MRUFGKE1JUFNYKFN5bmNJQ2FjaGUpKQotCS5zZXQJcHVzaAotCS5zZXQJbWlwczMycjIKLQliZXEJYTEsIHplcm8sIDIwZgotCSBub3AKLQlSRUdfQUREVSBhMSwgYTAsIGExCi0JcmRod3IJdjAsIEhXX1NZTkNJX1N0ZXAKLQliZXEJdjAsIHplcm8sIDIwZgotCSBub3AKLTEwOgotCXN5bmNpCTAoYTApCi0JUkVHX0FERFUgYTAsIGEwLCB2MAotCXNsdHUJdjEsIGEwLCBhMQotCWJuZQl2MSwgemVybywgMTBiCi0JIG5vcAotCXN5bmMKLTIwOgotCWpyLmhiCXJhCi0JIG5vcAotCS5zZXQJcG9wCi1FTkQoTUlQU1goU3luY0lDYWNoZSkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva3ZtL2t2bV9taXBzLmMgYi9hcmNoL21pcHMva3ZtL2t2bV9taXBzLmMKaW5kZXggZGE1MTg2Zi4uY2Q1ZTRmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2t2bS9rdm1fbWlwcy5jCisrKyBiL2FyY2gvbWlwcy9rdm0va3ZtX21pcHMuYwpAQCAtNjEsMTEgKzYxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZ2ZuX3QgdW5hbGlhc19nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCi17Ci0JcmV0dXJuIGdmbjsKLX0KLQogLyogWFhYS1lNQTogV2UgYXJlIHNpbXVsYXRvcmluZyBhIHByb2Nlc3NvciB0aGF0IGhhcyB0aGUgV0lJIGJpdCBzZXQgaW4gQ29uZmlnNywgc28gd2UKICAqIGFyZSAicnVubmFibGUiIGlmIGludGVycnVwdHMgYXJlIHBlbmRpbmcKICAqLwpAQCAtMTMwLDggKzEyNSw4IEBACiBpbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmt2bV9taXBzX2luc3RhbmNlKSA9PSAxKSB7Ci0JCWt2bV9pbmZvKCIlczogMXN0IEtWTSBpbnN0YW5jZSwgc2V0dXAgaG9zdCBUTEIgcGFyYW1ldGVyc1xuIiwKLQkJCSBfX2Z1bmNfXyk7CisJCWt2bV9kZWJ1ZygiJXM6IDFzdCBLVk0gaW5zdGFuY2UsIHNldHVwIGhvc3QgVExCIHBhcmFtZXRlcnNcbiIsCisJCQkgIF9fZnVuY19fKTsKIAkJb25fZWFjaF9jcHUoa3ZtX21pcHNfaW5pdF92bV9wZXJjcHUsIGt2bSwgMSk7CiAJfQogCkBAIC0xNDksOSArMTQ0LDcgQEAKIAkJaWYgKGt2bS0+YXJjaC5ndWVzdF9wbWFwW2ldICE9IEtWTV9JTlZBTElEX1BBR0UpCiAJCQlrdm1fbWlwc19yZWxlYXNlX3Bmbl9jbGVhbihrdm0tPmFyY2guZ3Vlc3RfcG1hcFtpXSk7CiAJfQotCi0JaWYgKGt2bS0+YXJjaC5ndWVzdF9wbWFwKQotCQlrZnJlZShrdm0tPmFyY2guZ3Vlc3RfcG1hcCk7CisJa2ZyZWUoa3ZtLT5hcmNoLmd1ZXN0X3BtYXApOwogCiAJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CiAJCWt2bV9hcmNoX3ZjcHVfZnJlZSh2Y3B1KTsKQEAgLTE4Niw4ICsxNzksOCBAQAogCiAJLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0YW5jZSwgcmVzdG9yZSB3aXJlZCBjb3VudCAqLwogCWlmIChhdG9taWNfZGVjX3JldHVybigma3ZtX21pcHNfaW5zdGFuY2UpID09IDApIHsKLQkJa3ZtX2luZm8oIiVzOiBsYXN0IEtWTSBpbnN0YW5jZSwgcmVzdG9yaW5nIFRMQiBwYXJhbWV0ZXJzXG4iLAotCQkJIF9fZnVuY19fKTsKKwkJa3ZtX2RlYnVnKCIlczogbGFzdCBLVk0gaW5zdGFuY2UsIHJlc3RvcmluZyBUTEIgcGFyYW1ldGVyc1xuIiwKKwkJCSAgX19mdW5jX18pOwogCQlvbl9lYWNoX2NwdShrdm1fbWlwc191bmluaXRfdGxicywgTlVMTCwgMSk7CiAJfQogfQpAQCAtMjQ5LDkgKzI0Miw4IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCWt2bV9pbmZvCi0JCQkgICAgKCJBbGxvY2F0ZWQgc3BhY2UgZm9yIEd1ZXN0IFBNQVAgVGFibGUgKCVsZCBwYWdlcykgQCAlcFxuIiwKLQkJCSAgICAgbnBhZ2VzLCBrdm0tPmFyY2guZ3Vlc3RfcG1hcCk7CisJCQlrdm1fZGVidWcoIkFsbG9jYXRlZCBzcGFjZSBmb3IgR3Vlc3QgUE1BUCBUYWJsZSAoJWxkIHBhZ2VzKSBAICVwXG4iLAorCQkJCSAgbnBhZ2VzLCBrdm0tPmFyY2guZ3Vlc3RfcG1hcCk7CiAKIAkJCS8qIE5vdyBzZXR1cCB0aGUgcGFnZSB0YWJsZSAqLwogCQkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CkBAIC0yOTYsNyArMjg4LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX2NwdTsKIAotCWt2bV9pbmZvKCJrdm0gQCAlcDogY3JlYXRlIGNwdSAlZCBhdCAlcFxuIiwga3ZtLCBpZCwgdmNwdSk7CisJa3ZtX2RlYnVnKCJrdm0gQCAlcDogY3JlYXRlIGNwdSAlZCBhdCAlcFxuIiwga3ZtLCBpZCwgdmNwdSk7CiAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgaG9zdCBtb2RlIGV4Y2VwdGlvbiBoYW5kbGVycyB0aGF0IGhhbmRsZQogCSAqIGd1ZXN0IG1vZGUgZXhpdHMKQEAgLTMwNCw3ICsyOTYsNyBAQAogCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CiAJCXNpemUgPSAweDIwMCArIFZFQ1RPUlNQQUNJTkcgKiA2NDsKIAl9IGVsc2UgewotCQlzaXplID0gMHgyMDA7CisJCXNpemUgPSAweDQwMDA7CiAJfQogCiAJLyogU2F2ZSBMaW51eCBFQkFTRSAqLwpAQCAtMzE2LDggKzMwOCw4IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWVfY3B1OwogCX0KLQlrdm1faW5mbygiQWxsb2NhdGVkICVkIGJ5dGVzIGZvciBLVk0gRXhjZXB0aW9uIEhhbmRsZXJzIEAgJXBcbiIsCi0JCSBBTElHTihzaXplLCBQQUdFX1NJWkUpLCBnZWJhc2UpOworCWt2bV9kZWJ1ZygiQWxsb2NhdGVkICVkIGJ5dGVzIGZvciBLVk0gRXhjZXB0aW9uIEhhbmRsZXJzIEAgJXBcbiIsCisJCSAgQUxJR04oc2l6ZSwgUEFHRV9TSVpFKSwgZ2ViYXNlKTsKIAogCS8qIFNhdmUgbmV3IGViYXNlICovCiAJdmNwdS0+YXJjaC5ndWVzdF9lYmFzZSA9IGdlYmFzZTsKQEAgLTM0MiwxNSArMzM0LDE2IEBACiAKIAkvKiBHZW5lcmFsIGhhbmRsZXIsIHJlbG9jYXRlIHRvIHVubWFwcGVkIHNwYWNlIGZvciBzYW5pdHkncyBzYWtlICovCiAJb2Zmc2V0ID0gMHgyMDAwOwotCWt2bV9pbmZvKCJJbnN0YWxsaW5nIEtWTSBFeGNlcHRpb24gaGFuZGxlcnMgQCAlcCwgJSN4IGJ5dGVzXG4iLAotCQkgZ2ViYXNlICsgb2Zmc2V0LAotCQkgbWlwczMyX0d1ZXN0RXhjZXB0aW9uRW5kIC0gbWlwczMyX0d1ZXN0RXhjZXB0aW9uKTsKKwlrdm1fZGVidWcoIkluc3RhbGxpbmcgS1ZNIEV4Y2VwdGlvbiBoYW5kbGVycyBAICVwLCAlI3ggYnl0ZXNcbiIsCisJCSAgZ2ViYXNlICsgb2Zmc2V0LAorCQkgIG1pcHMzMl9HdWVzdEV4Y2VwdGlvbkVuZCAtIG1pcHMzMl9HdWVzdEV4Y2VwdGlvbik7CiAKIAltZW1jcHkoZ2ViYXNlICsgb2Zmc2V0LCBtaXBzMzJfR3Vlc3RFeGNlcHRpb24sCiAJICAgICAgIG1pcHMzMl9HdWVzdEV4Y2VwdGlvbkVuZCAtIG1pcHMzMl9HdWVzdEV4Y2VwdGlvbik7CiAKIAkvKiBJbnZhbGlkYXRlIHRoZSBpY2FjaGUgZm9yIHRoZXNlIHJhbmdlcyAqLwotCW1pcHMzMl9TeW5jSUNhY2hlKCh1bnNpZ25lZCBsb25nKSBnZWJhc2UsIEFMSUdOKHNpemUsIFBBR0VfU0laRSkpOworCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylnZWJhc2UsCisJCQkJKHVuc2lnbmVkIGxvbmcpZ2ViYXNlICsgQUxJR04oc2l6ZSwgUEFHRV9TSVpFKSk7CiAKIAkvKiBBbGxvY2F0ZSBjb21tIHBhZ2UgZm9yIGd1ZXN0IGtlcm5lbCwgYSBUTEIgd2lsbCBiZSByZXNlcnZlZCBmb3IgbWFwcGluZyBHVkEgQCAweEZGRkY4MDAwIHRvIHRoaXMgcGFnZSAqLwogCXZjcHUtPmFyY2gua3NlZzBfY29tbXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSA8PCAxLCBHRlBfS0VSTkVMKTsKQEAgLTM2MCwxNCArMzUzLDE0IEBACiAJCWdvdG8gb3V0X2ZyZWVfZ2ViYXNlOwogCX0KIAotCWt2bV9pbmZvKCJBbGxvY2F0ZWQgQ09NTSBwYWdlIEAgJXBcbiIsIHZjcHUtPmFyY2gua3NlZzBfY29tbXBhZ2UpOworCWt2bV9kZWJ1ZygiQWxsb2NhdGVkIENPTU0gcGFnZSBAICVwXG4iLCB2Y3B1LT5hcmNoLmtzZWcwX2NvbW1wYWdlKTsKIAlrdm1fbWlwc19jb21tcGFnZV9pbml0KHZjcHUpOwogCiAJLyogSW5pdCAqLwogCXZjcHUtPmFyY2gubGFzdF9zY2hlZF9jcHUgPSAtMTsKIAogCS8qIFN0YXJ0IG9mZiB0aGUgdGltZXIgKi8KLQlrdm1fbWlwc19lbXVsYXRlX2NvdW50KHZjcHUpOworCWt2bV9taXBzX2luaXRfY291bnQodmNwdSk7CiAKIAlyZXR1cm4gdmNwdTsKIApAQCAtMzg5LDEyICszODIsOCBAQAogCiAJa3ZtX21pcHNfZHVtcF9zdGF0cyh2Y3B1KTsKIAotCWlmICh2Y3B1LT5hcmNoLmd1ZXN0X2ViYXNlKQotCQlrZnJlZSh2Y3B1LT5hcmNoLmd1ZXN0X2ViYXNlKTsKLQotCWlmICh2Y3B1LT5hcmNoLmtzZWcwX2NvbW1wYWdlKQotCQlrZnJlZSh2Y3B1LT5hcmNoLmtzZWcwX2NvbW1wYWdlKTsKLQorCWtmcmVlKHZjcHUtPmFyY2guZ3Vlc3RfZWJhc2UpOworCWtmcmVlKHZjcHUtPmFyY2gua3NlZzBfY29tbXBhZ2UpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC00MjMsMTEgKzQxMiwxMSBAQAogCQl2Y3B1LT5tbWlvX25lZWRlZCA9IDA7CiAJfQogCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGFueSBleGNlcHRpb25zL2ludGVycnVwdHMgcGVuZGluZyAqLwogCWt2bV9taXBzX2RlbGl2ZXJfaW50ZXJydXB0cyh2Y3B1LAogCQkJCSAgICBrdm1fcmVhZF9jMF9ndWVzdF9jYXVzZSh2Y3B1LT5hcmNoLmNvcDApKTsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJa3ZtX2d1ZXN0X2VudGVyKCk7CiAKIAlyID0gX19rdm1fbWlwc192Y3B1X3J1bihydW4sIHZjcHUpOwpAQCAtNDkwLDM2ICs0NzksNiBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKLSNkZWZpbmUgTUlQU19DUDBfMzIoX1IsIF9TKQkJCQkJXAotCShLVk1fUkVHX01JUFMgfCBLVk1fUkVHX1NJWkVfVTMyIHwgMHgxMDAwMCB8ICg4ICogKF9SKSArIChfUykpKQotCi0jZGVmaW5lIE1JUFNfQ1AwXzY0KF9SLCBfUykJCQkJCVwKLQkoS1ZNX1JFR19NSVBTIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDB4MTAwMDAgfCAoOCAqIChfUikgKyAoX1MpKSkKLQotI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0lOREVYCQlNSVBTX0NQMF8zMigwLCAwKQotI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0VOVFJZTE8wCU1JUFNfQ1AwXzY0KDIsIDApCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfRU5UUllMTzEJTUlQU19DUDBfNjQoMywgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9DT05URVhUCU1JUFNfQ1AwXzY0KDQsIDApCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfVVNFUkxPQ0FMCU1JUFNfQ1AwXzY0KDQsIDIpCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfUEFHRU1BU0sJTUlQU19DUDBfMzIoNSwgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9QQUdFR1JBSU4JTUlQU19DUDBfMzIoNSwgMSkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9XSVJFRAkJTUlQU19DUDBfMzIoNiwgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9IV1JFTkEJCU1JUFNfQ1AwXzMyKDcsIDApCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQkFEVkFERFIJTUlQU19DUDBfNjQoOCwgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9DT1VOVAkJTUlQU19DUDBfMzIoOSwgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9FTlRSWUhJCU1JUFNfQ1AwXzY0KDEwLCAwKQotI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0NPTVBBUkUJTUlQU19DUDBfMzIoMTEsIDApCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfU1RBVFVTCQlNSVBTX0NQMF8zMigxMiwgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9DQVVTRQkJTUlQU19DUDBfMzIoMTMsIDApCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfRUJBU0UJCU1JUFNfQ1AwXzY0KDE1LCAxKQotI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRwkJTUlQU19DUDBfMzIoMTYsIDApCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ09ORklHMQlNSVBTX0NQMF8zMigxNiwgMSkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9DT05GSUcyCU1JUFNfQ1AwXzMyKDE2LCAyKQotI2RlZmluZSBLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRzMJTUlQU19DUDBfMzIoMTYsIDMpCi0jZGVmaW5lIEtWTV9SRUdfTUlQU19DUDBfQ09ORklHNwlNSVBTX0NQMF8zMigxNiwgNykKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9YQ09OVEVYVAlNSVBTX0NQMF82NCgyMCwgMCkKLSNkZWZpbmUgS1ZNX1JFR19NSVBTX0NQMF9FUlJPUkVQQwlNSVBTX0NQMF82NCgzMCwgMCkKLQogc3RhdGljIHU2NCBrdm1fbWlwc19nZXRfb25lX3JlZ3NbXSA9IHsKIAlLVk1fUkVHX01JUFNfUjAsCiAJS1ZNX1JFR19NSVBTX1IxLApAQCAtNTYwLDI1ICs1MTksMzQgQEAKIAogCUtWTV9SRUdfTUlQU19DUDBfSU5ERVgsCiAJS1ZNX1JFR19NSVBTX0NQMF9DT05URVhULAorCUtWTV9SRUdfTUlQU19DUDBfVVNFUkxPQ0FMLAogCUtWTV9SRUdfTUlQU19DUDBfUEFHRU1BU0ssCiAJS1ZNX1JFR19NSVBTX0NQMF9XSVJFRCwKKwlLVk1fUkVHX01JUFNfQ1AwX0hXUkVOQSwKIAlLVk1fUkVHX01JUFNfQ1AwX0JBRFZBRERSLAorCUtWTV9SRUdfTUlQU19DUDBfQ09VTlQsCiAJS1ZNX1JFR19NSVBTX0NQMF9FTlRSWUhJLAorCUtWTV9SRUdfTUlQU19DUDBfQ09NUEFSRSwKIAlLVk1fUkVHX01JUFNfQ1AwX1NUQVRVUywKIAlLVk1fUkVHX01JUFNfQ1AwX0NBVVNFLAotCS8qIEVQQyBzZXQgdmlhIGt2bV9yZWdzLCBldCBhbC4gKi8KKwlLVk1fUkVHX01JUFNfQ1AwX0VQQywKIAlLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRywKIAlLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRzEsCiAJS1ZNX1JFR19NSVBTX0NQMF9DT05GSUcyLAogCUtWTV9SRUdfTUlQU19DUDBfQ09ORklHMywKIAlLVk1fUkVHX01JUFNfQ1AwX0NPTkZJRzcsCi0JS1ZNX1JFR19NSVBTX0NQMF9FUlJPUkVQQworCUtWTV9SRUdfTUlQU19DUDBfRVJST1JFUEMsCisKKwlLVk1fUkVHX01JUFNfQ09VTlRfQ1RMLAorCUtWTV9SRUdfTUlQU19DT1VOVF9SRVNVTUUsCisJS1ZNX1JFR19NSVBTX0NPVU5UX0haLAogfTsKIAogc3RhdGljIGludCBrdm1fbWlwc19nZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICBjb25zdCBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZykKIHsKIAlzdHJ1Y3QgbWlwc19jb3Byb2MgKmNvcDAgPSB2Y3B1LT5hcmNoLmNvcDA7CisJaW50IHJldDsKIAlzNjQgdjsKIAogCXN3aXRjaCAocmVnLT5pZCkgewpAQCAtNjAxLDI0ICs1NjksMzYgQEAKIAljYXNlIEtWTV9SRUdfTUlQU19DUDBfQ09OVEVYVDoKIAkJdiA9IChsb25nKWt2bV9yZWFkX2MwX2d1ZXN0X2NvbnRleHQoY29wMCk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9VU0VSTE9DQUw6CisJCXYgPSAobG9uZylrdm1fcmVhZF9jMF9ndWVzdF91c2VybG9jYWwoY29wMCk7CisJCWJyZWFrOwogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9QQUdFTUFTSzoKIAkJdiA9IChsb25nKWt2bV9yZWFkX2MwX2d1ZXN0X3BhZ2VtYXNrKGNvcDApOwogCQlicmVhazsKIAljYXNlIEtWTV9SRUdfTUlQU19DUDBfV0lSRUQ6CiAJCXYgPSAobG9uZylrdm1fcmVhZF9jMF9ndWVzdF93aXJlZChjb3AwKTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0hXUkVOQToKKwkJdiA9IChsb25nKWt2bV9yZWFkX2MwX2d1ZXN0X2h3cmVuYShjb3AwKTsKKwkJYnJlYWs7CiAJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0JBRFZBRERSOgogCQl2ID0gKGxvbmcpa3ZtX3JlYWRfYzBfZ3Vlc3RfYmFkdmFkZHIoY29wMCk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9FTlRSWUhJOgogCQl2ID0gKGxvbmcpa3ZtX3JlYWRfYzBfZ3Vlc3RfZW50cnloaShjb3AwKTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0NPTVBBUkU6CisJCXYgPSAobG9uZylrdm1fcmVhZF9jMF9ndWVzdF9jb21wYXJlKGNvcDApOworCQlicmVhazsKIAljYXNlIEtWTV9SRUdfTUlQU19DUDBfU1RBVFVTOgogCQl2ID0gKGxvbmcpa3ZtX3JlYWRfYzBfZ3Vlc3Rfc3RhdHVzKGNvcDApOwogCQlicmVhazsKIAljYXNlIEtWTV9SRUdfTUlQU19DUDBfQ0FVU0U6CiAJCXYgPSAobG9uZylrdm1fcmVhZF9jMF9ndWVzdF9jYXVzZShjb3AwKTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0VQQzoKKwkJdiA9IChsb25nKWt2bV9yZWFkX2MwX2d1ZXN0X2VwYyhjb3AwKTsKKwkJYnJlYWs7CiAJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0VSUk9SRVBDOgogCQl2ID0gKGxvbmcpa3ZtX3JlYWRfYzBfZ3Vlc3RfZXJyb3JlcGMoY29wMCk7CiAJCWJyZWFrOwpAQCAtNjM3LDYgKzYxNywxNSBAQAogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9DT05GSUc3OgogCQl2ID0gKGxvbmcpa3ZtX3JlYWRfYzBfZ3Vlc3RfY29uZmlnNyhjb3AwKTsKIAkJYnJlYWs7CisJLyogcmVnaXN0ZXJzIHRvIGJlIGhhbmRsZWQgc3BlY2lhbGx5ICovCisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0NPVU5UOgorCWNhc2UgS1ZNX1JFR19NSVBTX0NPVU5UX0NUTDoKKwljYXNlIEtWTV9SRUdfTUlQU19DT1VOVF9SRVNVTUU6CisJY2FzZSBLVk1fUkVHX01JUFNfQ09VTlRfSFo6CisJCXJldCA9IGt2bV9taXBzX2NhbGxiYWNrcy0+Z2V0X29uZV9yZWcodmNwdSwgcmVnLCAmdik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02OTcsMTIgKzY4NiwxOCBAQAogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9DT05URVhUOgogCQlrdm1fd3JpdGVfYzBfZ3Vlc3RfY29udGV4dChjb3AwLCB2KTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX1VTRVJMT0NBTDoKKwkJa3ZtX3dyaXRlX2MwX2d1ZXN0X3VzZXJsb2NhbChjb3AwLCB2KTsKKwkJYnJlYWs7CiAJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX1BBR0VNQVNLOgogCQlrdm1fd3JpdGVfYzBfZ3Vlc3RfcGFnZW1hc2soY29wMCwgdik7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9XSVJFRDoKIAkJa3ZtX3dyaXRlX2MwX2d1ZXN0X3dpcmVkKGNvcDAsIHYpOwogCQlicmVhazsKKwljYXNlIEtWTV9SRUdfTUlQU19DUDBfSFdSRU5BOgorCQlrdm1fd3JpdGVfYzBfZ3Vlc3RfaHdyZW5hKGNvcDAsIHYpOworCQlicmVhazsKIAljYXNlIEtWTV9SRUdfTUlQU19DUDBfQkFEVkFERFI6CiAJCWt2bV93cml0ZV9jMF9ndWVzdF9iYWR2YWRkcihjb3AwLCB2KTsKIAkJYnJlYWs7CkBAIC03MTIsMTIgKzcwNywyMCBAQAogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9TVEFUVVM6CiAJCWt2bV93cml0ZV9jMF9ndWVzdF9zdGF0dXMoY29wMCwgdik7CiAJCWJyZWFrOwotCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9DQVVTRToKLQkJa3ZtX3dyaXRlX2MwX2d1ZXN0X2NhdXNlKGNvcDAsIHYpOworCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9FUEM6CisJCWt2bV93cml0ZV9jMF9ndWVzdF9lcGMoY29wMCwgdik7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1JFR19NSVBTX0NQMF9FUlJPUkVQQzoKIAkJa3ZtX3dyaXRlX2MwX2d1ZXN0X2Vycm9yZXBjKGNvcDAsIHYpOwogCQlicmVhazsKKwkvKiByZWdpc3RlcnMgdG8gYmUgaGFuZGxlZCBzcGVjaWFsbHkgKi8KKwljYXNlIEtWTV9SRUdfTUlQU19DUDBfQ09VTlQ6CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0NPTVBBUkU6CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0NBVVNFOgorCWNhc2UgS1ZNX1JFR19NSVBTX0NPVU5UX0NUTDoKKwljYXNlIEtWTV9SRUdfTUlQU19DT1VOVF9SRVNVTUU6CisJY2FzZSBLVk1fUkVHX01JUFNfQ09VTlRfSFo6CisJCXJldHVybiBrdm1fbWlwc19jYWxsYmFja3MtPnNldF9vbmVfcmVnKHZjcHUsIHJlZywgdik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtOTIwLDcgKzkyMyw3IEBACiAJCXJldHVybiAtMTsKIAogCXByaW50aygiVkNQVSBSZWdpc3RlciBEdW1wOlxuIik7Ci0JcHJpbnRrKCJcdHBjID0gMHglMDhseFxuIiwgdmNwdS0+YXJjaC5wYyk7OworCXByaW50aygiXHRwYyA9IDB4JTA4bHhcbiIsIHZjcHUtPmFyY2gucGMpOwogCXByaW50aygiXHRleGNlcHRpb25zOiAlMDhseFxuIiwgdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDQpIHsKQEAgLTk2OSw3ICs5NzIsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGt2bV9taXBzX2NvbXBhcmVjb3VudF9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGt2bV9taXBzX2NvbXBhcmVjb3VudF9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSAoc3RydWN0IGt2bV92Y3B1ICopZGF0YTsKIApAQCAtOTg0LDE1ICs5ODcsMTMgQEAKIC8qCiAgKiBsb3cgbGV2ZWwgaHJ0aW1lciB3YWtlIHJvdXRpbmUuCiAgKi8KLWVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9taXBzX2NvbXBhcmVjb3VudF93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKQorc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9taXBzX2NvbXBhcmVjb3VudF93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCXZjcHUgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5jb21wYXJlY291bnRfdGltZXIpOwogCWt2bV9taXBzX2NvbXBhcmVjb3VudF9mdW5jKCh1bnNpZ25lZCBsb25nKSB2Y3B1KTsKLQlocnRpbWVyX2ZvcndhcmRfbm93KCZ2Y3B1LT5hcmNoLmNvbXBhcmVjb3VudF90aW1lciwKLQkJCSAgICBrdGltZV9zZXQoMCwgTVNfVE9fTlMoMTApKSk7Ci0JcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKKwlyZXR1cm4ga3ZtX21pcHNfY291bnRfdGltZW91dCh2Y3B1KTsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva3ZtL2t2bV9taXBzX2R5bnRyYW5zLmMgYi9hcmNoL21pcHMva3ZtL2t2bV9taXBzX2R5bnRyYW5zLmMKaW5kZXggOTY1MjhlMi4uYjgwZTQxZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2t2bS9rdm1fbWlwc19keW50cmFucy5jCisrKyBiL2FyY2gvbWlwcy9rdm0va3ZtX21pcHNfZHludHJhbnMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAia3ZtX21pcHNfY29tbS5oIgogCkBAIC00MCw3ICs0MSw3IEBACiAJICAgIENLU0VHMEFERFIoa3ZtX21pcHNfdHJhbnNsYXRlX2d1ZXN0X2tzZWcwX3RvX2hwYQogCQkgICAgICAgKHZjcHUsICh1bnNpZ25lZCBsb25nKSBvcGMpKTsKIAltZW1jcHkoKHZvaWQgKilrc2VnMF9vcGMsICh2b2lkICopJnN5bmNpX2luc3QsIHNpemVvZih1aW50MzJfdCkpOwotCW1pcHMzMl9TeW5jSUNhY2hlKGtzZWcwX29wYywgMzIpOworCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShrc2VnMF9vcGMsIGtzZWcwX29wYyArIDMyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02Niw3ICs2Nyw3IEBACiAJICAgIENLU0VHMEFERFIoa3ZtX21pcHNfdHJhbnNsYXRlX2d1ZXN0X2tzZWcwX3RvX2hwYQogCQkgICAgICAgKHZjcHUsICh1bnNpZ25lZCBsb25nKSBvcGMpKTsKIAltZW1jcHkoKHZvaWQgKilrc2VnMF9vcGMsICh2b2lkICopJnN5bmNpX2luc3QsIHNpemVvZih1aW50MzJfdCkpOwotCW1pcHMzMl9TeW5jSUNhY2hlKGtzZWcwX29wYywgMzIpOworCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShrc2VnMF9vcGMsIGtzZWcwX29wYyArIDMyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC05OSwxMSArMTAwLDEyIEBACiAJCSAgICBDS1NFRzBBRERSKGt2bV9taXBzX3RyYW5zbGF0ZV9ndWVzdF9rc2VnMF90b19ocGEKIAkJCSAgICAgICAodmNwdSwgKHVuc2lnbmVkIGxvbmcpIG9wYykpOwogCQltZW1jcHkoKHZvaWQgKilrc2VnMF9vcGMsICh2b2lkICopJm1mYzBfaW5zdCwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JCW1pcHMzMl9TeW5jSUNhY2hlKGtzZWcwX29wYywgMzIpOworCQlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2Uoa3NlZzBfb3BjLCBrc2VnMF9vcGMgKyAzMik7CiAJfSBlbHNlIGlmIChLVk1fR1VFU1RfS1NFR1goKHVuc2lnbmVkIGxvbmcpIG9wYykgPT0gS1ZNX0dVRVNUX0tTRUcyMykgewogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCW1lbWNweSgodm9pZCAqKW9wYywgKHZvaWQgKikmbWZjMF9pbnN0LCBzaXplb2YodWludDMyX3QpKTsKLQkJbWlwczMyX1N5bmNJQ2FjaGUoKHVuc2lnbmVkIGxvbmcpIG9wYywgMzIpOworCQlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpb3BjLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcpb3BjICsgMzIpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfSBlbHNlIHsKIAkJa3ZtX2VycigiJXM6IEludmFsaWQgYWRkcmVzczogJXBcbiIsIF9fZnVuY19fLCBvcGMpOwpAQCAtMTM0LDExICsxMzYsMTIgQEAKIAkJICAgIENLU0VHMEFERFIoa3ZtX21pcHNfdHJhbnNsYXRlX2d1ZXN0X2tzZWcwX3RvX2hwYQogCQkJICAgICAgICh2Y3B1LCAodW5zaWduZWQgbG9uZykgb3BjKSk7CiAJCW1lbWNweSgodm9pZCAqKWtzZWcwX29wYywgKHZvaWQgKikmbXRjMF9pbnN0LCBzaXplb2YodWludDMyX3QpKTsKLQkJbWlwczMyX1N5bmNJQ2FjaGUoa3NlZzBfb3BjLCAzMik7CisJCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShrc2VnMF9vcGMsIGtzZWcwX29wYyArIDMyKTsKIAl9IGVsc2UgaWYgKEtWTV9HVUVTVF9LU0VHWCgodW5zaWduZWQgbG9uZykgb3BjKSA9PSBLVk1fR1VFU1RfS1NFRzIzKSB7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJbWVtY3B5KCh2b2lkICopb3BjLCAodm9pZCAqKSZtdGMwX2luc3QsIHNpemVvZih1aW50MzJfdCkpOwotCQltaXBzMzJfU3luY0lDYWNoZSgodW5zaWduZWQgbG9uZykgb3BjLCAzMik7CisJCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylvcGMsCisJCQkJCSAodW5zaWduZWQgbG9uZylvcGMgKyAzMik7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlrdm1fZXJyKCIlczogSW52YWxpZCBhZGRyZXNzOiAlcFxuIiwgX19mdW5jX18sIG9wYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva3ZtL2t2bV9taXBzX2VtdWwuYyBiL2FyY2gvbWlwcy9rdm0va3ZtX21pcHNfZW11bC5jCmluZGV4IGUzZmVjOTkuLjhkNDg0MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rdm0va3ZtX21pcHNfZW11bC5jCisrKyBiL2FyY2gvbWlwcy9rdm0va3ZtX21pcHNfZW11bC5jCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0yMjgsMjUgKzIyOSw1MjAgQEAKIAlyZXR1cm4gZXI7CiB9CiAKLS8qIEV2ZXJ5dGltZSB0aGUgY29tcGFyZSByZWdpc3RlciBpcyB3cml0dGVuIHRvLCB3ZSBuZWVkIHRvIGRlY2lkZSB3aGVuIHRvIGZpcmUKLSAqIHRoZSB0aW1lciB0aGF0IHJlcHJlc2VudHMgdGltZXIgdGlja3MgdG8gdGhlIEdVRVNULgorLyoqCisgKiBrdm1fbWlwc19jb3VudF9kaXNhYmxlZCgpIC0gRmluZCB3aGV0aGVyIHRoZSBDUDBfQ291bnQgdGltZXIgaXMgZGlzYWJsZWQuCisgKiBAdmNwdToJVmlydHVhbCBDUFUuCiAgKgorICogUmV0dXJuczoJMSBpZiB0aGUgQ1AwX0NvdW50IHRpbWVyIGlzIGRpc2FibGVkIGJ5IGVpdGhlciB0aGUgZ3Vlc3QKKyAqCQlDUDBfQ2F1c2UuREMgYml0IG9yIHRoZSBjb3VudF9jdGwuREMgYml0LgorICoJCTAgb3RoZXJ3aXNlIChpbiB3aGljaCBjYXNlIENQMF9Db3VudCB0aW1lciBpcyBydW5uaW5nKS4KICAqLwotZW51bSBlbXVsYXRpb25fcmVzdWx0IGt2bV9taXBzX2VtdWxhdGVfY291bnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGlubGluZSBpbnQga3ZtX21pcHNfY291bnRfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBtaXBzX2NvcHJvYyAqY29wMCA9IHZjcHUtPmFyY2guY29wMDsKLQllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXIgPSBFTVVMQVRFX0RPTkU7CisJcmV0dXJuCSh2Y3B1LT5hcmNoLmNvdW50X2N0bCAmIEtWTV9SRUdfTUlQU19DT1VOVF9DVExfREMpIHx8CisJCShrdm1fcmVhZF9jMF9ndWVzdF9jYXVzZShjb3AwKSAmIENBVVNFRl9EQyk7Cit9CiAKLQkvKiBJZiBDT1VOVCBpcyBlbmFibGVkICovCi0JaWYgKCEoa3ZtX3JlYWRfYzBfZ3Vlc3RfY2F1c2UoY29wMCkgJiBDQVVTRUZfREMpKSB7Ci0JCWhydGltZXJfdHJ5X3RvX2NhbmNlbCgmdmNwdS0+YXJjaC5jb21wYXJlY291bnRfdGltZXIpOwotCQlocnRpbWVyX3N0YXJ0KCZ2Y3B1LT5hcmNoLmNvbXBhcmVjb3VudF90aW1lciwKLQkJCSAgICAgIGt0aW1lX3NldCgwLCBNU19UT19OUygxMCkpLCBIUlRJTUVSX01PREVfUkVMKTsKLQl9IGVsc2UgewotCQlocnRpbWVyX3RyeV90b19jYW5jZWwoJnZjcHUtPmFyY2guY29tcGFyZWNvdW50X3RpbWVyKTsKKy8qKgorICoga3ZtX21pcHNfa3RpbWVfdG9fY291bnQoKSAtIFNjYWxlIGt0aW1lX3QgdG8gYSAzMi1iaXQgY291bnQuCisgKgorICogQ2FjaGVzIHRoZSBkeW5hbWljIG5hbm9zZWNvbmQgYmlhcyBpbiB2Y3B1LT5hcmNoLmNvdW50X2R5bl9iaWFzLgorICoKKyAqIEFzc3VtZXMgIWt2bV9taXBzX2NvdW50X2Rpc2FibGVkKEB2Y3B1KSAoZ3Vlc3QgQ1AwX0NvdW50IHRpbWVyIGlzIHJ1bm5pbmcpLgorICovCitzdGF0aWMgdWludDMyX3Qga3ZtX21pcHNfa3RpbWVfdG9fY291bnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBrdGltZV90IG5vdykKK3sKKwlzNjQgbm93X25zLCBwZXJpb2RzOworCXU2NCBkZWx0YTsKKworCW5vd19ucyA9IGt0aW1lX3RvX25zKG5vdyk7CisJZGVsdGEgPSBub3dfbnMgKyB2Y3B1LT5hcmNoLmNvdW50X2R5bl9iaWFzOworCisJaWYgKGRlbHRhID49IHZjcHUtPmFyY2guY291bnRfcGVyaW9kKSB7CisJCS8qIElmIGRlbHRhIGlzIG91dCBvZiBzYWZlIHJhbmdlIHRoZSBiaWFzIG5lZWRzIGFkanVzdGluZyAqLworCQlwZXJpb2RzID0gZGl2NjRfczY0KG5vd19ucywgdmNwdS0+YXJjaC5jb3VudF9wZXJpb2QpOworCQl2Y3B1LT5hcmNoLmNvdW50X2R5bl9iaWFzID0gLXBlcmlvZHMgKiB2Y3B1LT5hcmNoLmNvdW50X3BlcmlvZDsKKwkJLyogUmVjYWxjdWxhdGUgZGVsdGEgd2l0aCBuZXcgYmlhcyAqLworCQlkZWx0YSA9IG5vd19ucyArIHZjcHUtPmFyY2guY291bnRfZHluX2JpYXM7CiAJfQogCi0JcmV0dXJuIGVyOworCS8qCisJICogV2UndmUgZW5zdXJlZCB0aGF0OgorCSAqICAgZGVsdGEgPCBjb3VudF9wZXJpb2QKKwkgKgorCSAqIFRoZXJlZm9yZSB0aGUgaW50ZXJtZWRpYXRlIGRlbHRhKmNvdW50X2h6IHdpbGwgbmV2ZXIgb3ZlcmZsb3cgc2luY2UKKwkgKiBhdCB0aGUgYm91bmRhcnkgY29uZGl0aW9uOgorCSAqICAgZGVsdGEgPSBjb3VudF9wZXJpb2QKKwkgKiAgIGRlbHRhID0gTlNFQ19QRVJfU0VDICogMl4zMiAvIGNvdW50X2h6CisJICogICBkZWx0YSAqIGNvdW50X2h6ID0gTlNFQ19QRVJfU0VDICogMl4zMgorCSAqLworCXJldHVybiBkaXZfdTY0KGRlbHRhICogdmNwdS0+YXJjaC5jb3VudF9oeiwgTlNFQ19QRVJfU0VDKTsKK30KKworLyoqCisgKiBrdm1fbWlwc19jb3VudF90aW1lKCkgLSBHZXQgZWZmZWN0aXZlIGN1cnJlbnQgdGltZS4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqCisgKiBHZXQgZWZmZWN0aXZlIG1vbm90b25pYyBrdGltZS4gVGhpcyBpcyB1c3VhbGx5IGEgc3RyYWlnaHRmb3J3YXJkIGt0aW1lX2dldCgpLAorICogZXhjZXB0IHdoZW4gdGhlIG1hc3RlciBkaXNhYmxlIGJpdCBpcyBzZXQgaW4gY291bnRfY3RsLCBpbiB3aGljaCBjYXNlIGl0IGlzCisgKiBjb3VudF9yZXN1bWUsIGkuZS4gdGhlIHRpbWUgdGhhdCB0aGUgY291bnQgd2FzIGRpc2FibGVkLgorICoKKyAqIFJldHVybnM6CUVmZmVjdGl2ZSBtb25vdG9uaWMga3RpbWUgZm9yIENQMF9Db3VudC4KKyAqLworc3RhdGljIGlubGluZSBrdGltZV90IGt2bV9taXBzX2NvdW50X3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLmNvdW50X2N0bCAmIEtWTV9SRUdfTUlQU19DT1VOVF9DVExfREMpKQorCQlyZXR1cm4gdmNwdS0+YXJjaC5jb3VudF9yZXN1bWU7CisKKwlyZXR1cm4ga3RpbWVfZ2V0KCk7Cit9CisKKy8qKgorICoga3ZtX21pcHNfcmVhZF9jb3VudF9ydW5uaW5nKCkgLSBSZWFkIHRoZSBjdXJyZW50IGNvdW50IHZhbHVlIGFzIGlmIHJ1bm5pbmcuCisgKiBAdmNwdToJVmlydHVhbCBDUFUuCisgKiBAbm93OglLZXJuZWwgdGltZSB0byByZWFkIENQMF9Db3VudCBhdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGd1ZXN0IENQMF9Db3VudCByZWdpc3RlciBhdCB0aW1lIEBub3cgYW5kIGhhbmRsZXMgaWYgdGhlCisgKiB0aW1lciBpbnRlcnJ1cHQgaXMgcGVuZGluZyBhbmQgaGFzbid0IGJlZW4gaGFuZGxlZCB5ZXQuCisgKgorICogUmV0dXJuczoJVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGd1ZXN0IENQMF9Db3VudCByZWdpc3Rlci4KKyAqLworc3RhdGljIHVpbnQzMl90IGt2bV9taXBzX3JlYWRfY291bnRfcnVubmluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGt0aW1lX3Qgbm93KQoreworCWt0aW1lX3QgZXhwaXJlczsKKwlpbnQgcnVubmluZzsKKworCS8qIElzIHRoZSBocnRpbWVyIHBlbmRpbmc/ICovCisJZXhwaXJlcyA9IGhydGltZXJfZ2V0X2V4cGlyZXMoJnZjcHUtPmFyY2guY29tcGFyZWNvdW50X3RpbWVyKTsKKwlpZiAoa3RpbWVfY29tcGFyZShub3csIGV4cGlyZXMpID49IDApIHsKKwkJLyoKKwkJICogQ2FuY2VsIGl0IHdoaWxlIHdlIGhhbmRsZSBpdCBzbyB0aGVyZSdzIG5vIGNoYW5jZSBvZgorCQkgKiBpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgdGltZW91dCBoYW5kbGVyLgorCQkgKi8KKwkJcnVubmluZyA9IGhydGltZXJfY2FuY2VsKCZ2Y3B1LT5hcmNoLmNvbXBhcmVjb3VudF90aW1lcik7CisKKwkJLyogTm90aGluZyBzaG91bGQgYmUgd2FpdGluZyBvbiB0aGUgdGltZW91dCAqLworCQlrdm1fbWlwc19jYWxsYmFja3MtPnF1ZXVlX3RpbWVyX2ludCh2Y3B1KTsKKworCQkvKgorCQkgKiBSZXN0YXJ0IHRoZSB0aW1lciBpZiBpdCB3YXMgcnVubmluZyBiYXNlZCBvbiB0aGUgZXhwaXJ5IHRpbWUKKwkJICogd2UgcmVhZCwgc28gdGhhdCB3ZSBkb24ndCBwdXNoIGl0IGJhY2sgMiBwZXJpb2RzLgorCQkgKi8KKwkJaWYgKHJ1bm5pbmcpIHsKKwkJCWV4cGlyZXMgPSBrdGltZV9hZGRfbnMoZXhwaXJlcywKKwkJCQkJICAgICAgIHZjcHUtPmFyY2guY291bnRfcGVyaW9kKTsKKwkJCWhydGltZXJfc3RhcnQoJnZjcHUtPmFyY2guY29tcGFyZWNvdW50X3RpbWVyLCBleHBpcmVzLAorCQkJCSAgICAgIEhSVElNRVJfTU9ERV9BQlMpOworCQl9CisJfQorCisJLyogUmV0dXJuIHRoZSBiaWFzZWQgYW5kIHNjYWxlZCBndWVzdCBDUDBfQ291bnQgKi8KKwlyZXR1cm4gdmNwdS0+YXJjaC5jb3VudF9iaWFzICsga3ZtX21pcHNfa3RpbWVfdG9fY291bnQodmNwdSwgbm93KTsKK30KKworLyoqCisgKiBrdm1fbWlwc19yZWFkX2NvdW50KCkgLSBSZWFkIHRoZSBjdXJyZW50IGNvdW50IHZhbHVlLgorICogQHZjcHU6CVZpcnR1YWwgQ1BVLgorICoKKyAqIFJlYWQgdGhlIGN1cnJlbnQgZ3Vlc3QgQ1AwX0NvdW50IHZhbHVlLCB0YWtpbmcgaW50byBhY2NvdW50IHdoZXRoZXIgdGhlIHRpbWVyCisgKiBpcyBzdG9wcGVkLgorICoKKyAqIFJldHVybnM6CVRoZSBjdXJyZW50IGd1ZXN0IENQMF9Db3VudCB2YWx1ZS4KKyAqLwordWludDMyX3Qga3ZtX21pcHNfcmVhZF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IG1pcHNfY29wcm9jICpjb3AwID0gdmNwdS0+YXJjaC5jb3AwOworCisJLyogSWYgY291bnQgZGlzYWJsZWQganVzdCByZWFkIHN0YXRpYyBjb3B5IG9mIGNvdW50ICovCisJaWYgKGt2bV9taXBzX2NvdW50X2Rpc2FibGVkKHZjcHUpKQorCQlyZXR1cm4ga3ZtX3JlYWRfYzBfZ3Vlc3RfY291bnQoY29wMCk7CisKKwlyZXR1cm4ga3ZtX21pcHNfcmVhZF9jb3VudF9ydW5uaW5nKHZjcHUsIGt0aW1lX2dldCgpKTsKK30KKworLyoqCisgKiBrdm1fbWlwc19mcmVlemVfaHJ0aW1lcigpIC0gU2FmZWx5IHN0b3AgdGhlIGhydGltZXIuCisgKiBAdmNwdToJVmlydHVhbCBDUFUuCisgKiBAY291bnQ6CU91dHB1dCBwb2ludGVyIGZvciBDUDBfQ291bnQgdmFsdWUgYXQgcG9pbnQgb2YgZnJlZXplLgorICoKKyAqIEZyZWV6ZSB0aGUgaHJ0aW1lciBzYWZlbHkgYW5kIHJldHVybiBib3RoIHRoZSBrdGltZSBhbmQgdGhlIENQMF9Db3VudCB2YWx1ZQorICogYXQgdGhlIHBvaW50IGl0IHdhcyBmcm96ZW4uIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGF0CisgKiB0aGUgcG9pbnQgaXQgd2FzIGZyb3plbiBhcmUgaGFuZGxlZCwgYW5kIG5vbmUgYWZ0ZXIgdGhhdCBwb2ludC4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCB3aGVyZSB0aGUgdGltZS9DUDBfQ291bnQgaXMgbmVlZGVkIGluIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUKKyAqIG5ldyBwYXJhbWV0ZXJzLgorICoKKyAqIEFzc3VtZXMgIWt2bV9taXBzX2NvdW50X2Rpc2FibGVkKEB2Y3B1KSAoZ3Vlc3QgQ1AwX0NvdW50IHRpbWVyIGlzIHJ1bm5pbmcpLgorICoKKyAqIFJldHVybnM6CVRoZSBrdGltZSBhdCB0aGUgcG9pbnQgb2YgZnJlZXplLgorICovCitzdGF0aWMga3RpbWVfdCBrdm1fbWlwc19mcmVlemVfaHJ0aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgIHVpbnQzMl90ICpjb3VudCkKK3sKKwlrdGltZV90IG5vdzsKKworCS8qIHN0b3AgaHJ0aW1lciBiZWZvcmUgZmluZGluZyB0aW1lICovCisJaHJ0aW1lcl9jYW5jZWwoJnZjcHUtPmFyY2guY29tcGFyZWNvdW50X3RpbWVyKTsKKwlub3cgPSBrdGltZV9nZXQoKTsKKworCS8qIGZpbmQgY291bnQgYXQgdGhpcyBwb2ludCBhbmQgaGFuZGxlIHBlbmRpbmcgaHJ0aW1lciAqLworCSpjb3VudCA9IGt2bV9taXBzX3JlYWRfY291bnRfcnVubmluZyh2Y3B1LCBub3cpOworCisJcmV0dXJuIG5vdzsKK30KKworCisvKioKKyAqIGt2bV9taXBzX3Jlc3VtZV9ocnRpbWVyKCkgLSBSZXN1bWUgaHJ0aW1lciwgdXBkYXRpbmcgZXhwaXJ5LgorICogQHZjcHU6CVZpcnR1YWwgQ1BVLgorICogQG5vdzoJa3RpbWUgYXQgcG9pbnQgb2YgcmVzdW1lLgorICogQGNvdW50OglDUDBfQ291bnQgYXQgcG9pbnQgb2YgcmVzdW1lLgorICoKKyAqIFJlc3VtZXMgdGhlIHRpbWVyIGFuZCB1cGRhdGVzIHRoZSB0aW1lciBleHBpcnkgYmFzZWQgb24gQG5vdyBhbmQgQGNvdW50LgorICogVGhpcyBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGt2bV9taXBzX2ZyZWV6ZV90aW1lcigpIHdoZW4gdGltZXIKKyAqIHBhcmFtZXRlcnMgbmVlZCB0byBiZSBjaGFuZ2VkLgorICoKKyAqIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhIHRpbWVyIGludGVycnVwdCBpbW1lZGlhdGVseSBhZnRlciByZXN1bWUgd2lsbCBiZQorICogaGFuZGxlZCwgYnV0IG5vdCBpZiBDUF9Db21wYXJlIGlzIGV4YWN0bHkgYXQgQGNvdW50LiBUaGF0IGNhc2UgaXMgYWxyZWFkeQorICogaGFuZGxlZCBieSBrdm1fbWlwc19mcmVlemVfdGltZXIoKS4KKyAqCisgKiBBc3N1bWVzICFrdm1fbWlwc19jb3VudF9kaXNhYmxlZChAdmNwdSkgKGd1ZXN0IENQMF9Db3VudCB0aW1lciBpcyBydW5uaW5nKS4KKyAqLworc3RhdGljIHZvaWQga3ZtX21pcHNfcmVzdW1lX2hydGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICBrdGltZV90IG5vdywgdWludDMyX3QgY291bnQpCit7CisJc3RydWN0IG1pcHNfY29wcm9jICpjb3AwID0gdmNwdS0+YXJjaC5jb3AwOworCXVpbnQzMl90IGNvbXBhcmU7CisJdTY0IGRlbHRhOworCWt0aW1lX3QgZXhwaXJlOworCisJLyogQ2FsY3VsYXRlIHRpbWVvdXQgKHdyYXAgMCB0byAyXjMyKSAqLworCWNvbXBhcmUgPSBrdm1fcmVhZF9jMF9ndWVzdF9jb21wYXJlKGNvcDApOworCWRlbHRhID0gKHU2NCkodWludDMyX3QpKGNvbXBhcmUgLSBjb3VudCAtIDEpICsgMTsKKwlkZWx0YSA9IGRpdl91NjQoZGVsdGEgKiBOU0VDX1BFUl9TRUMsIHZjcHUtPmFyY2guY291bnRfaHopOworCWV4cGlyZSA9IGt0aW1lX2FkZF9ucyhub3csIGRlbHRhKTsKKworCS8qIFVwZGF0ZSBocnRpbWVyIHRvIHVzZSBuZXcgdGltZW91dCAqLworCWhydGltZXJfY2FuY2VsKCZ2Y3B1LT5hcmNoLmNvbXBhcmVjb3VudF90aW1lcik7CisJaHJ0aW1lcl9zdGFydCgmdmNwdS0+YXJjaC5jb21wYXJlY291bnRfdGltZXIsIGV4cGlyZSwgSFJUSU1FUl9NT0RFX0FCUyk7Cit9CisKKy8qKgorICoga3ZtX21pcHNfdXBkYXRlX2hydGltZXIoKSAtIFVwZGF0ZSBuZXh0IGV4cGlyeSB0aW1lIG9mIGhydGltZXIuCisgKiBAdmNwdToJVmlydHVhbCBDUFUuCisgKgorICogUmVjYWxjdWxhdGVzIGFuZCB1cGRhdGVzIHRoZSBleHBpcnkgdGltZSBvZiB0aGUgaHJ0aW1lci4gVGhpcyBjYW4gYmUgdXNlZAorICogYWZ0ZXIgdGltZXIgcGFyYW1ldGVycyBoYXZlIGJlZW4gYWx0ZXJlZCB3aGljaCBkbyBub3QgZGVwZW5kIG9uIHRoZSB0aW1lIHRoYXQKKyAqIHRoZSBjaGFuZ2Ugb2NjdXJzIChpbiB0aG9zZSBjYXNlcyBrdm1fbWlwc19mcmVlemVfaHJ0aW1lcigpIGFuZAorICoga3ZtX21pcHNfcmVzdW1lX2hydGltZXIoKSBhcmUgdXNlZCBkaXJlY3RseSkuCisgKgorICogSXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIHRpbWVyIGludGVycnVwdHMgd2lsbCBiZSBsb3N0IGluIHRoZSBwcm9jZXNzLgorICoKKyAqIEFzc3VtZXMgIWt2bV9taXBzX2NvdW50X2Rpc2FibGVkKEB2Y3B1KSAoZ3Vlc3QgQ1AwX0NvdW50IHRpbWVyIGlzIHJ1bm5pbmcpLgorICovCitzdGF0aWMgdm9pZCBrdm1fbWlwc191cGRhdGVfaHJ0aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJa3RpbWVfdCBub3c7CisJdWludDMyX3QgY291bnQ7CisKKwkvKgorCSAqIGZyZWV6ZV9ocnRpbWVyIHRha2VzIGNhcmUgb2YgYSB0aW1lciBpbnRlcnJ1cHRzIDw9IGNvdW50LCBhbmQKKwkgKiByZXN1bWVfaHJ0aW1lciB0aGUgaHJ0aW1lciB0YWtlcyBjYXJlIG9mIGEgdGltZXIgaW50ZXJydXB0cyA+IGNvdW50LgorCSAqLworCW5vdyA9IGt2bV9taXBzX2ZyZWV6ZV9ocnRpbWVyKHZjcHUsICZjb3VudCk7CisJa3ZtX21pcHNfcmVzdW1lX2hydGltZXIodmNwdSwgbm93LCBjb3VudCk7Cit9CisKKy8qKgorICoga3ZtX21pcHNfd3JpdGVfY291bnQoKSAtIE1vZGlmeSB0aGUgY291bnQgYW5kIHVwZGF0ZSB0aW1lci4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqIEBjb3VudDoJR3Vlc3QgQ1AwX0NvdW50IHZhbHVlIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBDUDBfQ291bnQgdmFsdWUgYW5kIHVwZGF0ZXMgdGhlIHRpbWVyIGFjY29yZGluZ2x5LgorICovCit2b2lkIGt2bV9taXBzX3dyaXRlX2NvdW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDMyX3QgY291bnQpCit7CisJc3RydWN0IG1pcHNfY29wcm9jICpjb3AwID0gdmNwdS0+YXJjaC5jb3AwOworCWt0aW1lX3Qgbm93OworCisJLyogQ2FsY3VsYXRlIGJpYXMgKi8KKwlub3cgPSBrdm1fbWlwc19jb3VudF90aW1lKHZjcHUpOworCXZjcHUtPmFyY2guY291bnRfYmlhcyA9IGNvdW50IC0ga3ZtX21pcHNfa3RpbWVfdG9fY291bnQodmNwdSwgbm93KTsKKworCWlmIChrdm1fbWlwc19jb3VudF9kaXNhYmxlZCh2Y3B1KSkKKwkJLyogVGhlIHRpbWVyJ3MgZGlzYWJsZWQsIGFkanVzdCB0aGUgc3RhdGljIGNvdW50ICovCisJCWt2bV93cml0ZV9jMF9ndWVzdF9jb3VudChjb3AwLCBjb3VudCk7CisJZWxzZQorCQkvKiBVcGRhdGUgdGltZW91dCAqLworCQlrdm1fbWlwc19yZXN1bWVfaHJ0aW1lcih2Y3B1LCBub3csIGNvdW50KTsKK30KKworLyoqCisgKiBrdm1fbWlwc19pbml0X2NvdW50KCkgLSBJbml0aWFsaXNlIHRpbWVyLgorICogQHZjcHU6CVZpcnR1YWwgQ1BVLgorICoKKyAqIEluaXRpYWxpc2UgdGhlIHRpbWVyIHRvIGEgc2Vuc2libGUgZnJlcXVlbmN5LCBuYW1lbHkgMTAwTUh6LCB6ZXJvIGl0LCBhbmQgc2V0CisgKiBpdCBnb2luZyBpZiBpdCdzIGVuYWJsZWQuCisgKi8KK3ZvaWQga3ZtX21pcHNfaW5pdF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJLyogMTAwIE1IeiAqLworCXZjcHUtPmFyY2guY291bnRfaHogPSAxMDAqMTAwMCoxMDAwOworCXZjcHUtPmFyY2guY291bnRfcGVyaW9kID0gZGl2X3U2NCgodTY0KU5TRUNfUEVSX1NFQyA8PCAzMiwKKwkJCQkJICB2Y3B1LT5hcmNoLmNvdW50X2h6KTsKKwl2Y3B1LT5hcmNoLmNvdW50X2R5bl9iaWFzID0gMDsKKworCS8qIFN0YXJ0aW5nIGF0IDAgKi8KKwlrdm1fbWlwc193cml0ZV9jb3VudCh2Y3B1LCAwKTsKK30KKworLyoqCisgKiBrdm1fbWlwc19zZXRfY291bnRfaHooKSAtIFVwZGF0ZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSB0aW1lci4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqIEBjb3VudF9oejoJRnJlcXVlbmN5IG9mIENQMF9Db3VudCB0aW1lciBpbiBIei4KKyAqCisgKiBDaGFuZ2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgQ1AwX0NvdW50IHRpbWVyLiBUaGlzIGlzIGRvbmUgYXRvbWljYWxseSBzbyB0aGF0CisgKiBDUDBfQ291bnQgaXMgY29udGludW91cyBhbmQgbm8gdGltZXIgaW50ZXJydXB0IGlzIGxvc3QuCisgKgorICogUmV0dXJuczoJLUVJTlZBTCBpZiBAY291bnRfaHogaXMgb3V0IG9mIHJhbmdlLgorICoJCTAgb24gc3VjY2Vzcy4KKyAqLworaW50IGt2bV9taXBzX3NldF9jb3VudF9oeihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHM2NCBjb3VudF9oeikKK3sKKwlzdHJ1Y3QgbWlwc19jb3Byb2MgKmNvcDAgPSB2Y3B1LT5hcmNoLmNvcDA7CisJaW50IGRjOworCWt0aW1lX3Qgbm93OworCXUzMiBjb3VudDsKKworCS8qIGVuc3VyZSB0aGUgZnJlcXVlbmN5IGlzIGluIGEgc2Vuc2libGUgcmFuZ2UuLi4gKi8KKwlpZiAoY291bnRfaHogPD0gMCB8fCBjb3VudF9oeiA+IE5TRUNfUEVSX1NFQykKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogLi4uIGFuZCBoYXMgYWN0dWFsbHkgY2hhbmdlZCAqLworCWlmICh2Y3B1LT5hcmNoLmNvdW50X2h6ID09IGNvdW50X2h6KQorCQlyZXR1cm4gMDsKKworCS8qIFNhZmVseSBmcmVlemUgdGltZXIgc28gd2UgY2FuIGtlZXAgaXQgY29udGludW91cyAqLworCWRjID0ga3ZtX21pcHNfY291bnRfZGlzYWJsZWQodmNwdSk7CisJaWYgKGRjKSB7CisJCW5vdyA9IGt2bV9taXBzX2NvdW50X3RpbWUodmNwdSk7CisJCWNvdW50ID0ga3ZtX3JlYWRfYzBfZ3Vlc3RfY291bnQoY29wMCk7CisJfSBlbHNlIHsKKwkJbm93ID0ga3ZtX21pcHNfZnJlZXplX2hydGltZXIodmNwdSwgJmNvdW50KTsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIGZyZXF1ZW5jeSAqLworCXZjcHUtPmFyY2guY291bnRfaHogPSBjb3VudF9oejsKKwl2Y3B1LT5hcmNoLmNvdW50X3BlcmlvZCA9IGRpdl91NjQoKHU2NClOU0VDX1BFUl9TRUMgPDwgMzIsIGNvdW50X2h6KTsKKwl2Y3B1LT5hcmNoLmNvdW50X2R5bl9iaWFzID0gMDsKKworCS8qIENhbGN1bGF0ZSBhZGp1c3RlZCBiaWFzIHNvIGR5bmFtaWMgY291bnQgaXMgdW5jaGFuZ2VkICovCisJdmNwdS0+YXJjaC5jb3VudF9iaWFzID0gY291bnQgLSBrdm1fbWlwc19rdGltZV90b19jb3VudCh2Y3B1LCBub3cpOworCisJLyogVXBkYXRlIGFuZCByZXN1bWUgaHJ0aW1lciAqLworCWlmICghZGMpCisJCWt2bV9taXBzX3Jlc3VtZV9ocnRpbWVyKHZjcHUsIG5vdywgY291bnQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGt2bV9taXBzX3dyaXRlX2NvbXBhcmUoKSAtIE1vZGlmeSBjb21wYXJlIGFuZCB1cGRhdGUgdGltZXIuCisgKiBAdmNwdToJVmlydHVhbCBDUFUuCisgKiBAY29tcGFyZToJTmV3IENQMF9Db21wYXJlIHZhbHVlLgorICoKKyAqIFVwZGF0ZSBDUDBfQ29tcGFyZSB0byBhIG5ldyB2YWx1ZSBhbmQgdXBkYXRlIHRoZSB0aW1lb3V0LgorICovCit2b2lkIGt2bV9taXBzX3dyaXRlX2NvbXBhcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBjb21wYXJlKQoreworCXN0cnVjdCBtaXBzX2NvcHJvYyAqY29wMCA9IHZjcHUtPmFyY2guY29wMDsKKworCS8qIGlmIHVuY2hhbmdlZCwgbXVzdCBqdXN0IGJlIGFuIGFjayAqLworCWlmIChrdm1fcmVhZF9jMF9ndWVzdF9jb21wYXJlKGNvcDApID09IGNvbXBhcmUpCisJCXJldHVybjsKKworCS8qIFVwZGF0ZSBjb21wYXJlICovCisJa3ZtX3dyaXRlX2MwX2d1ZXN0X2NvbXBhcmUoY29wMCwgY29tcGFyZSk7CisKKwkvKiBVcGRhdGUgdGltZW91dCBpZiBjb3VudCBlbmFibGVkICovCisJaWYgKCFrdm1fbWlwc19jb3VudF9kaXNhYmxlZCh2Y3B1KSkKKwkJa3ZtX21pcHNfdXBkYXRlX2hydGltZXIodmNwdSk7Cit9CisKKy8qKgorICoga3ZtX21pcHNfY291bnRfZGlzYWJsZSgpIC0gRGlzYWJsZSBjb3VudC4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqCisgKiBEaXNhYmxlIHRoZSBDUDBfQ291bnQgdGltZXIuIEEgdGltZXIgaW50ZXJydXB0IG9uIG9yIGJlZm9yZSB0aGUgZmluYWwgc3RvcAorICogdGltZSB3aWxsIGJlIGhhbmRsZWQgYnV0IG5vdCBhZnRlci4KKyAqCisgKiBBc3N1bWVzIENQMF9Db3VudCB3YXMgcHJldmlvdXNseSBlbmFibGVkIGJ1dCBub3cgR3Vlc3QuQ1AwX0NhdXNlLkRDIG9yCisgKiBjb3VudF9jdGwuREMgaGFzIGJlZW4gc2V0IChjb3VudCBkaXNhYmxlZCkuCisgKgorICogUmV0dXJuczoJVGhlIHRpbWUgdGhhdCB0aGUgdGltZXIgd2FzIHN0b3BwZWQuCisgKi8KK3N0YXRpYyBrdGltZV90IGt2bV9taXBzX2NvdW50X2Rpc2FibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBtaXBzX2NvcHJvYyAqY29wMCA9IHZjcHUtPmFyY2guY29wMDsKKwl1aW50MzJfdCBjb3VudDsKKwlrdGltZV90IG5vdzsKKworCS8qIFN0b3AgaHJ0aW1lciAqLworCWhydGltZXJfY2FuY2VsKCZ2Y3B1LT5hcmNoLmNvbXBhcmVjb3VudF90aW1lcik7CisKKwkvKiBTZXQgdGhlIHN0YXRpYyBjb3VudCBmcm9tIHRoZSBkeW5hbWljIGNvdW50LCBoYW5kbGluZyBwZW5kaW5nIFRJICovCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJY291bnQgPSBrdm1fbWlwc19yZWFkX2NvdW50X3J1bm5pbmcodmNwdSwgbm93KTsKKwlrdm1fd3JpdGVfYzBfZ3Vlc3RfY291bnQoY29wMCwgY291bnQpOworCisJcmV0dXJuIG5vdzsKK30KKworLyoqCisgKiBrdm1fbWlwc19jb3VudF9kaXNhYmxlX2NhdXNlKCkgLSBEaXNhYmxlIGNvdW50IHVzaW5nIENQMF9DYXVzZS5EQy4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqCisgKiBEaXNhYmxlIHRoZSBDUDBfQ291bnQgdGltZXIgYW5kIHNldCBDUDBfQ2F1c2UuREMuIEEgdGltZXIgaW50ZXJydXB0IG9uIG9yCisgKiBiZWZvcmUgdGhlIGZpbmFsIHN0b3AgdGltZSB3aWxsIGJlIGhhbmRsZWQgaWYgdGhlIHRpbWVyIGlzbid0IGRpc2FibGVkIGJ5CisgKiBjb3VudF9jdGwuREMsIGJ1dCBub3QgYWZ0ZXIuCisgKgorICogQXNzdW1lcyBDUDBfQ2F1c2UuREMgaXMgY2xlYXIgKGNvdW50IGVuYWJsZWQpLgorICovCit2b2lkIGt2bV9taXBzX2NvdW50X2Rpc2FibGVfY2F1c2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBtaXBzX2NvcHJvYyAqY29wMCA9IHZjcHUtPmFyY2guY29wMDsKKworCWt2bV9zZXRfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgQ0FVU0VGX0RDKTsKKwlpZiAoISh2Y3B1LT5hcmNoLmNvdW50X2N0bCAmIEtWTV9SRUdfTUlQU19DT1VOVF9DVExfREMpKQorCQlrdm1fbWlwc19jb3VudF9kaXNhYmxlKHZjcHUpOworfQorCisvKioKKyAqIGt2bV9taXBzX2NvdW50X2VuYWJsZV9jYXVzZSgpIC0gRW5hYmxlIGNvdW50IHVzaW5nIENQMF9DYXVzZS5EQy4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqCisgKiBFbmFibGUgdGhlIENQMF9Db3VudCB0aW1lciBhbmQgY2xlYXIgQ1AwX0NhdXNlLkRDLiBBIHRpbWVyIGludGVycnVwdCBhZnRlcgorICogdGhlIHN0YXJ0IHRpbWUgd2lsbCBiZSBoYW5kbGVkIGlmIHRoZSB0aW1lciBpc24ndCBkaXNhYmxlZCBieSBjb3VudF9jdGwuREMsCisgKiBwb3RlbnRpYWxseSBiZWZvcmUgZXZlbiByZXR1cm5pbmcsIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGJlIGNhcmVmdWwgd2l0aAorICogb3JkZXJpbmcgb2YgQ1AwX0NhdXNlIG1vZGlmaWNhdGlvbnMgc28gYXMgbm90IHRvIGxvc2UgaXQuCisgKgorICogQXNzdW1lcyBDUDBfQ2F1c2UuREMgaXMgc2V0IChjb3VudCBkaXNhYmxlZCkuCisgKi8KK3ZvaWQga3ZtX21pcHNfY291bnRfZW5hYmxlX2NhdXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgbWlwc19jb3Byb2MgKmNvcDAgPSB2Y3B1LT5hcmNoLmNvcDA7CisJdWludDMyX3QgY291bnQ7CisKKwlrdm1fY2xlYXJfYzBfZ3Vlc3RfY2F1c2UoY29wMCwgQ0FVU0VGX0RDKTsKKworCS8qCisJICogU2V0IHRoZSBkeW5hbWljIGNvdW50IHRvIG1hdGNoIHRoZSBzdGF0aWMgY291bnQuCisJICogVGhpcyBzdGFydHMgdGhlIGhydGltZXIgaWYgY291bnRfY3RsLkRDIGFsbG93cyBpdC4KKwkgKiBPdGhlcndpc2UgaXQgY29udmVuaWVudGx5IHVwZGF0ZXMgdGhlIGJpYXNlcy4KKwkgKi8KKwljb3VudCA9IGt2bV9yZWFkX2MwX2d1ZXN0X2NvdW50KGNvcDApOworCWt2bV9taXBzX3dyaXRlX2NvdW50KHZjcHUsIGNvdW50KTsKK30KKworLyoqCisgKiBrdm1fbWlwc19zZXRfY291bnRfY3RsKCkgLSBVcGRhdGUgdGhlIGNvdW50IGNvbnRyb2wgS1ZNIHJlZ2lzdGVyLgorICogQHZjcHU6CVZpcnR1YWwgQ1BVLgorICogQGNvdW50X2N0bDoJQ291bnQgY29udHJvbCByZWdpc3RlciBuZXcgdmFsdWUuCisgKgorICogU2V0IHRoZSBjb3VudCBjb250cm9sIEtWTSByZWdpc3Rlci4gVGhlIHRpbWVyIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgKgorICogUmV0dXJuczoJLUVJTlZBTCBpZiByZXNlcnZlZCBiaXRzIGFyZSBzZXQuCisgKgkJMCBvbiBzdWNjZXNzLgorICovCitpbnQga3ZtX21pcHNfc2V0X2NvdW50X2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHM2NCBjb3VudF9jdGwpCit7CisJc3RydWN0IG1pcHNfY29wcm9jICpjb3AwID0gdmNwdS0+YXJjaC5jb3AwOworCXM2NCBjaGFuZ2VkID0gY291bnRfY3RsIF4gdmNwdS0+YXJjaC5jb3VudF9jdGw7CisJczY0IGRlbHRhOworCWt0aW1lX3QgZXhwaXJlLCBub3c7CisJdWludDMyX3QgY291bnQsIGNvbXBhcmU7CisKKwkvKiBPbmx5IGFsbG93IGRlZmluZWQgYml0cyB0byBiZSBjaGFuZ2VkICovCisJaWYgKGNoYW5nZWQgJiB+KHM2NCkoS1ZNX1JFR19NSVBTX0NPVU5UX0NUTF9EQykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQXBwbHkgbmV3IHZhbHVlICovCisJdmNwdS0+YXJjaC5jb3VudF9jdGwgPSBjb3VudF9jdGw7CisKKwkvKiBNYXN0ZXIgQ1AwX0NvdW50IGRpc2FibGUgKi8KKwlpZiAoY2hhbmdlZCAmIEtWTV9SRUdfTUlQU19DT1VOVF9DVExfREMpIHsKKwkJLyogSXMgQ1AwX0NhdXNlLkRDIGFscmVhZHkgZGlzYWJsaW5nIENQMF9Db3VudD8gKi8KKwkJaWYgKGt2bV9yZWFkX2MwX2d1ZXN0X2NhdXNlKGNvcDApICYgQ0FVU0VGX0RDKSB7CisJCQlpZiAoY291bnRfY3RsICYgS1ZNX1JFR19NSVBTX0NPVU5UX0NUTF9EQykKKwkJCQkvKiBKdXN0IHJlY29yZCB0aGUgY3VycmVudCB0aW1lICovCisJCQkJdmNwdS0+YXJjaC5jb3VudF9yZXN1bWUgPSBrdGltZV9nZXQoKTsKKwkJfSBlbHNlIGlmIChjb3VudF9jdGwgJiBLVk1fUkVHX01JUFNfQ09VTlRfQ1RMX0RDKSB7CisJCQkvKiBkaXNhYmxlIHRpbWVyIGFuZCByZWNvcmQgY3VycmVudCB0aW1lICovCisJCQl2Y3B1LT5hcmNoLmNvdW50X3Jlc3VtZSA9IGt2bV9taXBzX2NvdW50X2Rpc2FibGUodmNwdSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ2FsY3VsYXRlIHRpbWVvdXQgcmVsYXRpdmUgdG8gc3RhdGljIGNvdW50IGF0IHJlc3VtZQorCQkJICogdGltZSAod3JhcCAwIHRvIDJeMzIpLgorCQkJICovCisJCQljb3VudCA9IGt2bV9yZWFkX2MwX2d1ZXN0X2NvdW50KGNvcDApOworCQkJY29tcGFyZSA9IGt2bV9yZWFkX2MwX2d1ZXN0X2NvbXBhcmUoY29wMCk7CisJCQlkZWx0YSA9ICh1NjQpKHVpbnQzMl90KShjb21wYXJlIC0gY291bnQgLSAxKSArIDE7CisJCQlkZWx0YSA9IGRpdl91NjQoZGVsdGEgKiBOU0VDX1BFUl9TRUMsCisJCQkJCXZjcHUtPmFyY2guY291bnRfaHopOworCQkJZXhwaXJlID0ga3RpbWVfYWRkX25zKHZjcHUtPmFyY2guY291bnRfcmVzdW1lLCBkZWx0YSk7CisKKwkJCS8qIEhhbmRsZSBwZW5kaW5nIGludGVycnVwdCAqLworCQkJbm93ID0ga3RpbWVfZ2V0KCk7CisJCQlpZiAoa3RpbWVfY29tcGFyZShub3csIGV4cGlyZSkgPj0gMCkKKwkJCQkvKiBOb3RoaW5nIHNob3VsZCBiZSB3YWl0aW5nIG9uIHRoZSB0aW1lb3V0ICovCisJCQkJa3ZtX21pcHNfY2FsbGJhY2tzLT5xdWV1ZV90aW1lcl9pbnQodmNwdSk7CisKKwkJCS8qIFJlc3VtZSBocnRpbWVyIHdpdGhvdXQgY2hhbmdpbmcgYmlhcyAqLworCQkJY291bnQgPSBrdm1fbWlwc19yZWFkX2NvdW50X3J1bm5pbmcodmNwdSwgbm93KTsKKwkJCWt2bV9taXBzX3Jlc3VtZV9ocnRpbWVyKHZjcHUsIG5vdywgY291bnQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoga3ZtX21pcHNfc2V0X2NvdW50X3Jlc3VtZSgpIC0gVXBkYXRlIHRoZSBjb3VudCByZXN1bWUgS1ZNIHJlZ2lzdGVyLgorICogQHZjcHU6CQlWaXJ0dWFsIENQVS4KKyAqIEBjb3VudF9yZXN1bWU6CUNvdW50IHJlc3VtZSByZWdpc3RlciBuZXcgdmFsdWUuCisgKgorICogU2V0IHRoZSBjb3VudCByZXN1bWUgS1ZNIHJlZ2lzdGVyLgorICoKKyAqIFJldHVybnM6CS1FSU5WQUwgaWYgb3V0IG9mIHZhbGlkIHJhbmdlICgwLi5ub3cpLgorICoJCTAgb24gc3VjY2Vzcy4KKyAqLworaW50IGt2bV9taXBzX3NldF9jb3VudF9yZXN1bWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzNjQgY291bnRfcmVzdW1lKQoreworCS8qCisJICogSXQgZG9lc24ndCBtYWtlIHNlbnNlIGZvciB0aGUgcmVzdW1lIHRpbWUgdG8gYmUgaW4gdGhlIGZ1dHVyZSwgYXMgaXQKKwkgKiB3b3VsZCBiZSBwb3NzaWJsZSBmb3IgdGhlIG5leHQgaW50ZXJydXB0IHRvIGJlIG1vcmUgdGhhbiBhIGZ1bGwKKwkgKiBwZXJpb2QgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlpZiAoY291bnRfcmVzdW1lIDwgMCB8fCBjb3VudF9yZXN1bWUgPiBrdGltZV90b19ucyhrdGltZV9nZXQoKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJdmNwdS0+YXJjaC5jb3VudF9yZXN1bWUgPSBuc190b19rdGltZShjb3VudF9yZXN1bWUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGt2bV9taXBzX2NvdW50X3RpbWVvdXQoKSAtIFB1c2ggdGltZXIgZm9yd2FyZCBvbiB0aW1lb3V0LgorICogQHZjcHU6CVZpcnR1YWwgQ1BVLgorICoKKyAqIEhhbmRsZSBhbiBocnRpbWVyIGV2ZW50IGJ5IHB1c2ggdGhlIGhydGltZXIgZm9yd2FyZCBhIHBlcmlvZC4KKyAqCisgKiBSZXR1cm5zOglUaGUgaHJ0aW1lcl9yZXN0YXJ0IHZhbHVlIHRvIHJldHVybiB0byB0aGUgaHJ0aW1lciBzdWJzeXN0ZW0uCisgKi8KK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9taXBzX2NvdW50X3RpbWVvdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCS8qIEFkZCB0aGUgQ291bnQgcGVyaW9kIHRvIHRoZSBjdXJyZW50IGV4cGlyeSB0aW1lICovCisJaHJ0aW1lcl9hZGRfZXhwaXJlc19ucygmdmNwdS0+YXJjaC5jb21wYXJlY291bnRfdGltZXIsCisJCQkgICAgICAgdmNwdS0+YXJjaC5jb3VudF9wZXJpb2QpOworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CiB9CiAKIGVudW0gZW11bGF0aW9uX3Jlc3VsdCBrdm1fbWlwc19lbXVsX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNDcxLDggKzk2Nyw3IEBACiAjZW5kaWYKIAkJCS8qIEdldCByZWcgKi8KIAkJCWlmICgocmQgPT0gTUlQU19DUDBfQ09VTlQpICYmIChzZWwgPT0gMCkpIHsKLQkJCQkvKiBYWFhLWU1BOiBSdW4gdGhlIEd1ZXN0IGNvdW50IHJlZ2lzdGVyIEAgMS80IHRoZSByYXRlIG9mIHRoZSBob3N0ICovCi0JCQkJdmNwdS0+YXJjaC5ncHJzW3J0XSA9IChyZWFkX2MwX2NvdW50KCkgPj4gMik7CisJCQkJdmNwdS0+YXJjaC5ncHJzW3J0XSA9IGt2bV9taXBzX3JlYWRfY291bnQodmNwdSk7CiAJCQl9IGVsc2UgaWYgKChyZCA9PSBNSVBTX0NQMF9FUlJDVEwpICYmIChzZWwgPT0gMCkpIHsKIAkJCQl2Y3B1LT5hcmNoLmdwcnNbcnRdID0gMHgwOwogI2lmZGVmIENPTkZJR19LVk1fTUlQU19EWU5fVFJBTlMKQEAgLTUzOSwxMCArMTAzNCw3IEBACiAJCQl9CiAJCQkvKiBBcmUgd2Ugd3JpdGluZyB0byBDT1VOVCAqLwogCQkJZWxzZSBpZiAoKHJkID09IE1JUFNfQ1AwX0NPVU5UKSAmJiAoc2VsID09IDApKSB7Ci0JCQkJLyogTGludXggZG9lc24ndCBzZWVtIHRvIHdyaXRlIGludG8gQ09VTlQsIHdlIHRocm93IGFuIGVycm9yCi0JCQkJICogaWYgd2Ugbm90aWNlIGEgd3JpdGUgdG8gQ09VTlQKLQkJCQkgKi8KLQkJCQkvKmVyID0gRU1VTEFURV9GQUlMOyAqLworCQkJCWt2bV9taXBzX3dyaXRlX2NvdW50KHZjcHUsIHZjcHUtPmFyY2guZ3Byc1tydF0pOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0gZWxzZSBpZiAoKHJkID09IE1JUFNfQ1AwX0NPTVBBUkUpICYmIChzZWwgPT0gMCkpIHsKIAkJCQlrdm1fZGVidWcoIlslI3hdIE1UQ3osIENPTVBBUkUgJSNseCA8LSAlI2x4XG4iLApAQCAtNTUyLDggKzEwNDQsOCBAQAogCQkJCS8qIElmIHdlIGFyZSB3cml0aW5nIHRvIENPTVBBUkUgKi8KIAkJCQkvKiBDbGVhciBwZW5kaW5nIHRpbWVyIGludGVycnVwdCwgaWYgYW55ICovCiAJCQkJa3ZtX21pcHNfY2FsbGJhY2tzLT5kZXF1ZXVlX3RpbWVyX2ludCh2Y3B1KTsKLQkJCQlrdm1fd3JpdGVfYzBfZ3Vlc3RfY29tcGFyZShjb3AwLAotCQkJCQkJCSAgIHZjcHUtPmFyY2guZ3Byc1tydF0pOworCQkJCWt2bV9taXBzX3dyaXRlX2NvbXBhcmUodmNwdSwKKwkJCQkJCSAgICAgICB2Y3B1LT5hcmNoLmdwcnNbcnRdKTsKIAkJCX0gZWxzZSBpZiAoKHJkID09IE1JUFNfQ1AwX1NUQVRVUykgJiYgKHNlbCA9PSAwKSkgewogCQkJCWt2bV93cml0ZV9jMF9ndWVzdF9zdGF0dXMoY29wMCwKIAkJCQkJCQkgIHZjcHUtPmFyY2guZ3Byc1tydF0pOwpAQCAtNTY0LDYgKzEwNTYsMjAgQEAKICNpZmRlZiBDT05GSUdfS1ZNX01JUFNfRFlOX1RSQU5TCiAJCQkJa3ZtX21pcHNfdHJhbnNfbXRjMChpbnN0LCBvcGMsIHZjcHUpOwogI2VuZGlmCisJCQl9IGVsc2UgaWYgKChyZCA9PSBNSVBTX0NQMF9DQVVTRSkgJiYgKHNlbCA9PSAwKSkgeworCQkJCXVpbnQzMl90IG9sZF9jYXVzZSwgbmV3X2NhdXNlOworCQkJCW9sZF9jYXVzZSA9IGt2bV9yZWFkX2MwX2d1ZXN0X2NhdXNlKGNvcDApOworCQkJCW5ld19jYXVzZSA9IHZjcHUtPmFyY2guZ3Byc1tydF07CisJCQkJLyogVXBkYXRlIFIvVyBiaXRzICovCisJCQkJa3ZtX2NoYW5nZV9jMF9ndWVzdF9jYXVzZShjb3AwLCAweDA4ODAwMzAwLAorCQkJCQkJCSAgbmV3X2NhdXNlKTsKKwkJCQkvKiBEQyBiaXQgZW5hYmxpbmcvZGlzYWJsaW5nIHRpbWVyPyAqLworCQkJCWlmICgob2xkX2NhdXNlIF4gbmV3X2NhdXNlKSAmIENBVVNFRl9EQykgeworCQkJCQlpZiAobmV3X2NhdXNlICYgQ0FVU0VGX0RDKQorCQkJCQkJa3ZtX21pcHNfY291bnRfZGlzYWJsZV9jYXVzZSh2Y3B1KTsKKwkJCQkJZWxzZQorCQkJCQkJa3ZtX21pcHNfY291bnRfZW5hYmxlX2NhdXNlKHZjcHUpOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJY29wMC0+cmVnW3JkXVtzZWxdID0gdmNwdS0+YXJjaC5ncHJzW3J0XTsKICNpZmRlZiBDT05GSUdfS1ZNX01JUFNfRFlOX1RSQU5TCkBAIC04ODcsNyArMTM5Myw3IEBACiAKIAlwcmludGsoIiVzOiB2YTogJSNseCwgdW5tYXBwZWQ6ICUjeFxuIiwgX19mdW5jX18sIHZhLCBDS1NFRzBBRERSKHBhKSk7CiAKLQltaXBzMzJfU3luY0lDYWNoZShDS1NFRzBBRERSKHBhKSwgMzIpOworCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShDS1NFRzBBRERSKHBhKSwgMzIpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzI1LDggKzE4MzEsMTIgQEAKIAkJICAgICAgIHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXIgPSBFTVVMQVRFX0RPTkU7Ci0KICNpZmRlZiBERUJVRworCXN0cnVjdCBtaXBzX2NvcHJvYyAqY29wMCA9IHZjcHUtPmFyY2guY29wMDsKKwl1bnNpZ25lZCBsb25nIGVudHJ5aGkgPSAodmNwdS0+YXJjaC5ob3N0X2NwMF9iYWR2YWRkciAmIFZQTjJfTUFTSykgfAorCQkJCShrdm1fcmVhZF9jMF9ndWVzdF9lbnRyeWhpKGNvcDApICYgQVNJRF9NQVNLKTsKKwlpbnQgaW5kZXg7CisKIAkvKgogCSAqIElmIGFkZHJlc3Mgbm90IGluIHRoZSBndWVzdCBUTEIsIHRoZW4gd2UgYXJlIGluIHRyb3VibGUKIAkgKi8KQEAgLTE1NTMsOCArMjA2Myw3IEBACiAJCQkJCSAgICAgY3VycmVudF9jcHVfZGF0YS5pY2FjaGUubGluZXN6KTsKIAkJCWJyZWFrOwogCQljYXNlIDI6CS8qIFJlYWQgY291bnQgcmVnaXN0ZXIgKi8KLQkJCXByaW50aygiUkRIV1I6IENvbnQgcmVnaXN0ZXJcbiIpOwotCQkJYXJjaC0+Z3Byc1tydF0gPSBrdm1fcmVhZF9jMF9ndWVzdF9jb3VudChjb3AwKTsKKwkJCWFyY2gtPmdwcnNbcnRdID0ga3ZtX21pcHNfcmVhZF9jb3VudCh2Y3B1KTsKIAkJCWJyZWFrOwogCQljYXNlIDM6CS8qIENvdW50IHJlZ2lzdGVyIHJlc29sdXRpb24gKi8KIAkJCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CkBAIC0xODEwLDExICsyMzE5LDkgQEAKIAkJCQllciA9IEVNVUxBVEVfRkFJTDsKIAkJCX0KIAkJfSBlbHNlIHsKLSNpZmRlZiBERUJVRwogCQkJa3ZtX2RlYnVnCiAJCQkgICAgKCJJbmplY3RpbmcgaGk6ICUjbHgsIGxvMDogJSNseCwgbG8xOiAlI2x4IGludG8gc2hhZG93IGhvc3QgVExCXG4iLAogCQkJICAgICB0bGItPnRsYl9oaSwgdGxiLT50bGJfbG8wLCB0bGItPnRsYl9sbzEpOwotI2VuZGlmCiAJCQkvKiBPSyB3ZSBoYXZlIGEgR3Vlc3QgVExCIGVudHJ5LCBub3cgaW5qZWN0IGl0IGludG8gdGhlIHNoYWRvdyBob3N0IFRMQiAqLwogCQkJa3ZtX21pcHNfaGFuZGxlX21hcHBlZF9zZWdfdGxiX2ZhdWx0KHZjcHUsIHRsYiwgTlVMTCwKIAkJCQkJCQkgICAgIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2t2bS9rdm1fdGxiLmMgYi9hcmNoL21pcHMva3ZtL2t2bV90bGIuYwppbmRleCA1MGFiOWM0Li44YTVhNzAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva3ZtL2t2bV90bGIuYworKysgYi9hcmNoL21pcHMva3ZtL2t2bV90bGIuYwpAQCAtMjIyLDI2ICsyMjIsMTkgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChpZHggPCAwKSB7Ci0JCWlkeCA9IHJlYWRfYzBfcmFuZG9tKCkgJSBjdXJyZW50X2NwdV9kYXRhLnRsYnNpemU7Ci0JCXdyaXRlX2MwX2luZGV4KGlkeCk7Ci0JCW10YzBfdGxid19oYXphcmQoKTsKLQl9CiAJd3JpdGVfYzBfZW50cnlsbzAoZW50cnlsbzApOwogCXdyaXRlX2MwX2VudHJ5bG8xKGVudHJ5bG8xKTsKIAltdGMwX3RsYndfaGF6YXJkKCk7CiAKLQl0bGJfd3JpdGVfaW5kZXhlZCgpOworCWlmIChpZHggPCAwKQorCQl0bGJfd3JpdGVfcmFuZG9tKCk7CisJZWxzZQorCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwogCXRsYndfdXNlX2hhemFyZCgpOwogCi0jaWZkZWYgREVCVUcKLQlpZiAoZGVidWcpIHsKLQkJa3ZtX2RlYnVnKCJAICUjbHggaWR4OiAlMmQgW2VudHJ5aGkoUik6ICUjbHhdICIKLQkJCSAgImVudHJ5bG8wKFIpOiAweCUwOGx4LCBlbnRyeWxvMShSKTogMHglMDhseFxuIiwKLQkJCSAgdmNwdS0+YXJjaC5wYywgaWR4LCByZWFkX2MwX2VudHJ5aGkoKSwKLQkJCSAgcmVhZF9jMF9lbnRyeWxvMCgpLCByZWFkX2MwX2VudHJ5bG8xKCkpOwotCX0KLSNlbmRpZgorCWt2bV9kZWJ1ZygiQCAlI2x4IGlkeDogJTJkIFtlbnRyeWhpKFIpOiAlI2x4XSBlbnRyeWxvMChSKTogMHglMDhseCwgZW50cnlsbzEoUik6IDB4JTA4bHhcbiIsCisJCSAgdmNwdS0+YXJjaC5wYywgaWR4LCByZWFkX2MwX2VudHJ5aGkoKSwKKwkJICByZWFkX2MwX2VudHJ5bG8wKCksIHJlYWRfYzBfZW50cnlsbzEoKSk7CiAKIAkvKiBGbHVzaCBELWNhY2hlICovCiAJaWYgKGZsdXNoX2RjYWNoZV9tYXNrKSB7CkBAIC0zNDgsMTEgKzM0MSw5IEBACiAJbXRjMF90bGJ3X2hhemFyZCgpOwogCXRsYndfdXNlX2hhemFyZCgpOwogCi0jaWZkZWYgREVCVUcKIAlrdm1fZGVidWcgKCJAICUjbHggaWR4OiAlMmQgW2VudHJ5aGkoUik6ICUjbHhdIGVudHJ5bG8wIChSKTogMHglMDhseCwgZW50cnlsbzEoUik6IDB4JTA4bHhcbiIsCiAJICAgICB2Y3B1LT5hcmNoLnBjLCByZWFkX2MwX2luZGV4KCksIHJlYWRfYzBfZW50cnloaSgpLAogCSAgICAgcmVhZF9jMF9lbnRyeWxvMCgpLCByZWFkX2MwX2VudHJ5bG8xKCkpOwotI2VuZGlmCiAKIAkvKiBSZXN0b3JlIG9sZCBBU0lEICovCiAJd3JpdGVfYzBfZW50cnloaShvbGRfZW50cnloaSk7CkBAIC00MDAsMTAgKzM5MSw4IEBACiAJZW50cnlsbzEgPSBtaXBzM19wYWRkcl90b190bGJwZm4ocGZuMSA8PCBQQUdFX1NISUZUKSB8ICgweDMgPDwgMykgfAogCQkJKHRsYi0+dGxiX2xvMSAmIE1JUFMzX1BHX0QpIHwgKHRsYi0+dGxiX2xvMSAmIE1JUFMzX1BHX1YpOwogCi0jaWZkZWYgREVCVUcKIAlrdm1fZGVidWcoIkAgJSNseCB0bGJfbG8wOiAweCUwOGx4IHRsYl9sbzE6IDB4JTA4bHhcbiIsIHZjcHUtPmFyY2gucGMsCiAJCSAgdGxiLT50bGJfbG8wLCB0bGItPnRsYl9sbzEpOwotI2VuZGlmCiAKIAlyZXR1cm4ga3ZtX21pcHNfaG9zdF90bGJfd3JpdGUodmNwdSwgZW50cnloaSwgZW50cnlsbzAsIGVudHJ5bG8xLAogCQkJCSAgICAgICB0bGItPnRsYl9tYXNrKTsKQEAgLTQyNCwxMCArNDEzLDggQEAKIAkJfQogCX0KIAotI2lmZGVmIERFQlVHCiAJa3ZtX2RlYnVnKCIlczogZW50cnloaTogJSNseCwgaW5kZXg6ICVkIGxvMDogJSNseCwgbG8xOiAlI2x4XG4iLAogCQkgIF9fZnVuY19fLCBlbnRyeWhpLCBpbmRleCwgdGxiW2ldLnRsYl9sbzAsIHRsYltpXS50bGJfbG8xKTsKLSNlbmRpZgogCiAJcmV0dXJuIGluZGV4OwogfQpAQCAtNDYxLDkgKzQ0OCw3IEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLSNpZmRlZiBERUJVRwogCWt2bV9kZWJ1ZygiSG9zdCBUTEIgbG9va3VwLCAlI2x4LCBpZHg6ICUyZFxuIiwgdmFkZHIsIGlkeCk7Ci0jZW5kaWYKIAogCXJldHVybiBpZHg7CiB9CkBAIC01MDgsMTIgKzQ5Myw5IEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLSNpZmRlZiBERUJVRwotCWlmIChpZHggPiAwKSB7CisJaWYgKGlkeCA+IDApCiAJCWt2bV9kZWJ1ZygiJXM6IEludmFsaWRhdGVkIGVudHJ5aGkgJSNseCBAIGlkeCAlZFxuIiwgX19mdW5jX18sCi0JCQkgICh2YSAmIFZQTjJfTUFTSykgfCAodmNwdS0+YXJjaC5hc2lkX21hcFt2YSAmIEFTSURfTUFTS10gJiBBU0lEX01BU0spLCBpZHgpOwotCX0KLSNlbmRpZgorCQkJICAodmEgJiBWUE4yX01BU0spIHwga3ZtX21pcHNfZ2V0X3VzZXJfYXNpZCh2Y3B1KSwgaWR4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU4LDE1ICs2NDAsMzAgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKKy8qKgorICoga3ZtX21pcHNfbWlncmF0ZV9jb3VudCgpIC0gTWlncmF0ZSB0aW1lci4KKyAqIEB2Y3B1OglWaXJ0dWFsIENQVS4KKyAqCisgKiBNaWdyYXRlIENQMF9Db3VudCBocnRpbWVyIHRvIHRoZSBjdXJyZW50IENQVSBieSBjYW5jZWxsaW5nIGFuZCByZXN0YXJ0aW5nIGl0CisgKiBpZiBpdCB3YXMgcnVubmluZyBwcmlvciB0byBiZWluZyBjYW5jZWxsZWQuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgVkNQVSBpcyBtaWdyYXRlZCB0byBhIGRpZmZlcmVudCBDUFUgdG8gZW5zdXJlIHRoYXQKKyAqIHRpbWVyIGV4cGlyeSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uIGludGVycnVwdHMgdGhlIGd1ZXN0IGFuZCBjYXVzZXMgdGhlCisgKiBpbnRlcnJ1cHQgdG8gYmUgZGVsaXZlcmVkIGluIGEgdGltZWx5IG1hbm5lci4KKyAqLworc3RhdGljIHZvaWQga3ZtX21pcHNfbWlncmF0ZV9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKGhydGltZXJfY2FuY2VsKCZ2Y3B1LT5hcmNoLmNvbXBhcmVjb3VudF90aW1lcikpCisJCWhydGltZXJfcmVzdGFydCgmdmNwdS0+YXJjaC5jb21wYXJlY291bnRfdGltZXIpOworfQorCiAvKiBSZXN0b3JlIEFTSUQgb25jZSB3ZSBhcmUgc2NoZWR1bGVkIGJhY2sgYWZ0ZXIgcHJlZW1wdGlvbiAqLwogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5ld2FzaWQgPSAwOwogCi0jaWZkZWYgREVCVUcKIAlrdm1fZGVidWcoIiVzOiB2Y3B1ICVwLCBjcHU6ICVkXG4iLCBfX2Z1bmNfXywgdmNwdSwgY3B1KTsKLSNlbmRpZgogCiAJLyogQWxvY2F0ZSBuZXcga2VybmVsIGFuZCB1c2VyIEFTSURzIGlmIG5lZWRlZCAqLwogCkBAIC02ODIsMTcgKzY3OSwyMyBAQAogCQkgICAgdmNwdS0+YXJjaC5ndWVzdF91c2VyX21tLmNvbnRleHQuYXNpZFtjcHVdOwogCQluZXdhc2lkKys7CiAKLQkJa3ZtX2luZm8oIlslZF06IGNwdV9jb250ZXh0OiAlI2x4XG4iLCBjcHUsCi0JCQkgY3B1X2NvbnRleHQoY3B1LCBjdXJyZW50LT5tbSkpOwotCQlrdm1faW5mbygiWyVkXTogQWxsb2NhdGVkIG5ldyBBU0lEIGZvciBHdWVzdCBLZXJuZWw6ICUjeFxuIiwKLQkJCSBjcHUsIHZjcHUtPmFyY2guZ3Vlc3Rfa2VybmVsX2FzaWRbY3B1XSk7Ci0JCWt2bV9pbmZvKCJbJWRdOiBBbGxvY2F0ZWQgbmV3IEFTSUQgZm9yIEd1ZXN0IFVzZXI6ICUjeFxuIiwgY3B1LAotCQkJIHZjcHUtPmFyY2guZ3Vlc3RfdXNlcl9hc2lkW2NwdV0pOworCQlrdm1fZGVidWcoIlslZF06IGNwdV9jb250ZXh0OiAlI2x4XG4iLCBjcHUsCisJCQkgIGNwdV9jb250ZXh0KGNwdSwgY3VycmVudC0+bW0pKTsKKwkJa3ZtX2RlYnVnKCJbJWRdOiBBbGxvY2F0ZWQgbmV3IEFTSUQgZm9yIEd1ZXN0IEtlcm5lbDogJSN4XG4iLAorCQkJICBjcHUsIHZjcHUtPmFyY2guZ3Vlc3Rfa2VybmVsX2FzaWRbY3B1XSk7CisJCWt2bV9kZWJ1ZygiWyVkXTogQWxsb2NhdGVkIG5ldyBBU0lEIGZvciBHdWVzdCBVc2VyOiAlI3hcbiIsIGNwdSwKKwkJCSAgdmNwdS0+YXJjaC5ndWVzdF91c2VyX2FzaWRbY3B1XSk7CiAJfQogCiAJaWYgKHZjcHUtPmFyY2gubGFzdF9zY2hlZF9jcHUgIT0gY3B1KSB7Ci0JCWt2bV9pbmZvKCJbJWQtPiVkXUtWTSBWQ1BVWyVkXSBzd2l0Y2hcbiIsCi0JCQkgdmNwdS0+YXJjaC5sYXN0X3NjaGVkX2NwdSwgY3B1LCB2Y3B1LT52Y3B1X2lkKTsKKwkJa3ZtX2RlYnVnKCJbJWQtPiVkXUtWTSBWQ1BVWyVkXSBzd2l0Y2hcbiIsCisJCQkgIHZjcHUtPmFyY2gubGFzdF9zY2hlZF9jcHUsIGNwdSwgdmNwdS0+dmNwdV9pZCk7CisJCS8qCisJCSAqIE1pZ3JhdGUgdGhlIHRpbWVyIGludGVycnVwdCB0byB0aGUgY3VycmVudCBDUFUgc28gdGhhdCBpdAorCQkgKiBhbHdheXMgaW50ZXJydXB0cyB0aGUgZ3Vlc3QgYW5kIHN5bmNocm9ub3VzbHkgdHJpZ2dlcnMgYQorCQkgKiBndWVzdCB0aW1lciBpbnRlcnJ1cHQuCisJCSAqLworCQlrdm1fbWlwc19taWdyYXRlX2NvdW50KHZjcHUpOwogCX0KIAogCWlmICghbmV3YXNpZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2t2bS9rdm1fdHJhcF9lbXVsLmMgYi9hcmNoL21pcHMva3ZtL2t2bV90cmFwX2VtdWwuYwppbmRleCAzMGQ3MjUzLi42OTNmOTUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva3ZtL2t2bV90cmFwX2VtdWwuYworKysgYi9hcmNoL21pcHMva3ZtL2t2bV90cmFwX2VtdWwuYwpAQCAtMzIsOSArMzIsNyBAQAogCQlncGEgPSBLVk1fSU5WQUxJRF9BRERSOwogCX0KIAotI2lmZGVmIERFQlVHCiAJa3ZtX2RlYnVnKCIlczogZ3ZhICUjbHgsIGdwYTogJSNsbHhcbiIsIF9fZnVuY19fLCBndmEsIGdwYSk7Ci0jZW5kaWYKIAogCXJldHVybiBncGE7CiB9CkBAIC04NSwxMSArODMsOSBAQAogCiAJaWYgKEtWTV9HVUVTVF9LU0VHWChiYWR2YWRkcikgPCBLVk1fR1VFU1RfS1NFRzAKIAkgICAgfHwgS1ZNX0dVRVNUX0tTRUdYKGJhZHZhZGRyKSA9PSBLVk1fR1VFU1RfS1NFRzIzKSB7Ci0jaWZkZWYgREVCVUcKIAkJa3ZtX2RlYnVnCiAJCSAgICAoIlVTRVIvS1NFRzIzIEFERFIgVExCIE1PRCBmYXVsdDogY2F1c2UgJSNseCwgUEM6ICVwLCBCYWRWYWRkcjogJSNseFxuIiwKIAkJICAgICBjYXVzZSwgb3BjLCBiYWR2YWRkcik7Ci0jZW5kaWYKIAkJZXIgPSBrdm1fbWlwc19oYW5kbGVfdGxibW9kKGNhdXNlLCBvcGMsIHJ1biwgdmNwdSk7CiAKIAkJaWYgKGVyID09IEVNVUxBVEVfRE9ORSkKQEAgLTEzOCwxMSArMTM0LDkgQEAKIAkJfQogCX0gZWxzZSBpZiAoS1ZNX0dVRVNUX0tTRUdYKGJhZHZhZGRyKSA8IEtWTV9HVUVTVF9LU0VHMAogCQkgICB8fCBLVk1fR1VFU1RfS1NFR1goYmFkdmFkZHIpID09IEtWTV9HVUVTVF9LU0VHMjMpIHsKLSNpZmRlZiBERUJVRwogCQlrdm1fZGVidWcKIAkJICAgICgiVVNFUiBBRERSIFRMQiBMRCBmYXVsdDogY2F1c2UgJSNseCwgUEM6ICVwLCBCYWRWYWRkcjogJSNseFxuIiwKIAkJICAgICBjYXVzZSwgb3BjLCBiYWR2YWRkcik7Ci0jZW5kaWYKIAkJZXIgPSBrdm1fbWlwc19oYW5kbGVfdGxibWlzcyhjYXVzZSwgb3BjLCBydW4sIHZjcHUpOwogCQlpZiAoZXIgPT0gRU1VTEFURV9ET05FKQogCQkJcmV0ID0gUkVTVU1FX0dVRVNUOwpAQCAtMTg4LDEwICsxODIsOCBAQAogCQl9CiAJfSBlbHNlIGlmIChLVk1fR1VFU1RfS1NFR1goYmFkdmFkZHIpIDwgS1ZNX0dVRVNUX0tTRUcwCiAJCSAgIHx8IEtWTV9HVUVTVF9LU0VHWChiYWR2YWRkcikgPT0gS1ZNX0dVRVNUX0tTRUcyMykgewotI2lmZGVmIERFQlVHCiAJCWt2bV9kZWJ1ZygiVVNFUiBBRERSIFRMQiBTVCBmYXVsdDogUEM6ICUjbHgsIEJhZFZhZGRyOiAlI2x4XG4iLAogCQkJICB2Y3B1LT5hcmNoLnBjLCBiYWR2YWRkcik7Ci0jZW5kaWYKIAogCQkvKiBVc2VyIEFkZHJlc3MgKFVBKSBmYXVsdCwgdGhpcyBjb3VsZCBoYXBwZW4gaWYKIAkJICogKDEpIFRMQiBlbnRyeSBub3QgcHJlc2VudC92YWxpZCBpbiBib3RoIEd1ZXN0IGFuZCBzaGFkb3cgaG9zdCBUTEJzLCBpbiB0aGlzCkBAIC0yMzYsOSArMjI4LDcgQEAKIAogCWlmIChLVk1fR1VFU1RfS0VSTkVMX01PREUodmNwdSkKIAkgICAgJiYgKEtTRUdYKGJhZHZhZGRyKSA9PSBDS1NFRzAgfHwgS1NFR1goYmFkdmFkZHIpID09IENLU0VHMSkpIHsKLSNpZmRlZiBERUJVRwogCQlrdm1fZGVidWcoIkVtdWxhdGUgU3RvcmUgdG8gTU1JTyBzcGFjZVxuIik7Ci0jZW5kaWYKIAkJZXIgPSBrdm1fbWlwc19lbXVsYXRlX2luc3QoY2F1c2UsIG9wYywgcnVuLCB2Y3B1KTsKIAkJaWYgKGVyID09IEVNVUxBVEVfRkFJTCkgewogCQkJcHJpbnRrKCJFbXVsYXRlIFN0b3JlIHRvIE1NSU8gc3BhY2UgZmFpbGVkXG4iKTsKQEAgLTI2OCw5ICsyNTgsNyBAQAogCWludCByZXQgPSBSRVNVTUVfR1VFU1Q7CiAKIAlpZiAoS1NFR1goYmFkdmFkZHIpID09IENLU0VHMCB8fCBLU0VHWChiYWR2YWRkcikgPT0gQ0tTRUcxKSB7Ci0jaWZkZWYgREVCVUcKIAkJa3ZtX2RlYnVnKCJFbXVsYXRlIExvYWQgZnJvbSBNTUlPIHNwYWNlIEAgJSNseFxuIiwgYmFkdmFkZHIpOwotI2VuZGlmCiAJCWVyID0ga3ZtX21pcHNfZW11bGF0ZV9pbnN0KGNhdXNlLCBvcGMsIHJ1biwgdmNwdSk7CiAJCWlmIChlciA9PSBFTVVMQVRFX0ZBSUwpIHsKIAkJCXByaW50aygiRW11bGF0ZSBMb2FkIGZyb20gTU1JTyBzcGFjZSBmYWlsZWRcbiIpOwpAQCAtNDAxLDYgKzM4OSw3OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGt2bV90cmFwX2VtdWxfZ2V0X29uZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcsCisJCQkJICAgICBzNjQgKnYpCit7CisJc3dpdGNoIChyZWctPmlkKSB7CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0NPVU5UOgorCQkqdiA9IGt2bV9taXBzX3JlYWRfY291bnQodmNwdSk7CisJCWJyZWFrOworCWNhc2UgS1ZNX1JFR19NSVBTX0NPVU5UX0NUTDoKKwkJKnYgPSB2Y3B1LT5hcmNoLmNvdW50X2N0bDsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ09VTlRfUkVTVU1FOgorCQkqdiA9IGt0aW1lX3RvX25zKHZjcHUtPmFyY2guY291bnRfcmVzdW1lKTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ09VTlRfSFo6CisJCSp2ID0gdmNwdS0+YXJjaC5jb3VudF9oejsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGt2bV90cmFwX2VtdWxfc2V0X29uZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcsCisJCQkJICAgICBzNjQgdikKK3sKKwlzdHJ1Y3QgbWlwc19jb3Byb2MgKmNvcDAgPSB2Y3B1LT5hcmNoLmNvcDA7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHJlZy0+aWQpIHsKKwljYXNlIEtWTV9SRUdfTUlQU19DUDBfQ09VTlQ6CisJCWt2bV9taXBzX3dyaXRlX2NvdW50KHZjcHUsIHYpOworCQlicmVhazsKKwljYXNlIEtWTV9SRUdfTUlQU19DUDBfQ09NUEFSRToKKwkJa3ZtX21pcHNfd3JpdGVfY29tcGFyZSh2Y3B1LCB2KTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ1AwX0NBVVNFOgorCQkvKgorCQkgKiBJZiB0aGUgdGltZXIgaXMgc3RvcHBlZCBvciBzdGFydGVkIChEQyBiaXQpIGl0IG11c3QgbG9vaworCQkgKiBhdG9taWMgd2l0aCBjaGFuZ2VzIHRvIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIChUSSwgSVJRNSkuCisJCSAqIEEgdGltZXIgaW50ZXJydXB0IHNob3VsZCBub3QgaGFwcGVuIGluIGJldHdlZW4uCisJCSAqLworCQlpZiAoKGt2bV9yZWFkX2MwX2d1ZXN0X2NhdXNlKGNvcDApIF4gdikgJiBDQVVTRUZfREMpIHsKKwkJCWlmICh2ICYgQ0FVU0VGX0RDKSB7CisJCQkJLyogZGlzYWJsZSB0aW1lciBmaXJzdCAqLworCQkJCWt2bV9taXBzX2NvdW50X2Rpc2FibGVfY2F1c2UodmNwdSk7CisJCQkJa3ZtX2NoYW5nZV9jMF9ndWVzdF9jYXVzZShjb3AwLCB+Q0FVU0VGX0RDLCB2KTsKKwkJCX0gZWxzZSB7CisJCQkJLyogZW5hYmxlIHRpbWVyIGxhc3QgKi8KKwkJCQlrdm1fY2hhbmdlX2MwX2d1ZXN0X2NhdXNlKGNvcDAsIH5DQVVTRUZfREMsIHYpOworCQkJCWt2bV9taXBzX2NvdW50X2VuYWJsZV9jYXVzZSh2Y3B1KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWt2bV93cml0ZV9jMF9ndWVzdF9jYXVzZShjb3AwLCB2KTsKKwkJfQorCQlicmVhazsKKwljYXNlIEtWTV9SRUdfTUlQU19DT1VOVF9DVEw6CisJCXJldCA9IGt2bV9taXBzX3NldF9jb3VudF9jdGwodmNwdSwgdik7CisJCWJyZWFrOworCWNhc2UgS1ZNX1JFR19NSVBTX0NPVU5UX1JFU1VNRToKKwkJcmV0ID0ga3ZtX21pcHNfc2V0X2NvdW50X3Jlc3VtZSh2Y3B1LCB2KTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUkVHX01JUFNfQ09VTlRfSFo6CisJCXJldCA9IGt2bV9taXBzX3NldF9jb3VudF9oeih2Y3B1LCB2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX21pcHNfY2FsbGJhY2tzIGt2bV90cmFwX2VtdWxfY2FsbGJhY2tzID0gewogCS8qIGV4aXQgaGFuZGxlcnMgKi8KIAkuaGFuZGxlX2NvcF91bnVzYWJsZSA9IGt2bV90cmFwX2VtdWxfaGFuZGxlX2NvcF91bnVzYWJsZSwKQEAgLTQyMyw2ICs0ODMsOCBAQAogCS5kZXF1ZXVlX2lvX2ludCA9IGt2bV9taXBzX2RlcXVldWVfaW9faW50X2NiLAogCS5pcnFfZGVsaXZlciA9IGt2bV9taXBzX2lycV9kZWxpdmVyX2NiLAogCS5pcnFfY2xlYXIgPSBrdm1fbWlwc19pcnFfY2xlYXJfY2IsCisJLmdldF9vbmVfcmVnID0ga3ZtX3RyYXBfZW11bF9nZXRfb25lX3JlZywKKwkuc2V0X29uZV9yZWcgPSBrdm1fdHJhcF9lbXVsX3NldF9vbmVfcmVnLAogfTsKIAogaW50IGt2bV9taXBzX2VtdWxhdGlvbl9pbml0KHN0cnVjdCBrdm1fbWlwc19jYWxsYmFja3MgKippbnN0YWxsX2NhbGxiYWNrcykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKaW5kZXggOWU2N2NkZS4uZjdiOTFkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2NhY2hlLmMKKysrIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKQEAgLTMxLDYgKzMxLDcgQEAKIHZvaWQgKCpmbHVzaF9pY2FjaGVfcmFuZ2UpKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGZsdXNoX2ljYWNoZV9yYW5nZSk7CiB2b2lkICgqbG9jYWxfZmx1c2hfaWNhY2hlX3JhbmdlKSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitFWFBPUlRfU1lNQk9MX0dQTChsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UpOwogCiB2b2lkICgqX19mbHVzaF9jYWNoZV92bWFwKSh2b2lkKTsKIHZvaWQgKCpfX2ZsdXNoX2NhY2hlX3Z1bm1hcCkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXRpbWUuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtdGltZS5jCmluZGV4IDMxOTAwOTkuLjM3NzhhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtdGltZS5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtdGltZS5jCkBAIC03NCwxOCArNzQsOCBAQAogCXVuc2lnbmVkIGludCBnaWNjb3VudCA9IDAsIGdpY3N0YXJ0ID0gMDsKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoQ09ORklHX0tWTV9HVUVTVCkgJiYgZGVmaW5lZCAoQ09ORklHX0tWTV9IT1NUX0ZSRVEpCi0JdW5zaWduZWQgaW50IHByaWQgPSByZWFkX2MwX3ByaWQoKSAmIChQUklEX0NPTVBfTUFTSyB8IFBSSURfSU1QX01BU0spOwotCi0JLyoKLQkgKiBYWFhLWU1BOiBoYXJkd2lyZSB0aGUgQ1BVIGZyZXF1ZW5jeSB0byBIb3N0IEZyZXEvNAotCSAqLwotCWNvdW50ID0gKENPTkZJR19LVk1fSE9TVF9GUkVRICogMTAwMDAwMCkgPj4gMzsKLQlpZiAoKHByaWQgIT0gKFBSSURfQ09NUF9NSVBTIHwgUFJJRF9JTVBfMjBLQykpICYmCi0JICAgIChwcmlkICE9IChQUklEX0NPTVBfTUlQUyB8IFBSSURfSU1QXzI1S0YpKSkKLQkJY291bnQgKj0gMjsKLQotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNvdW50OworI2lmIGRlZmluZWQoQ09ORklHX0tWTV9HVUVTVCkgJiYgQ09ORklHX0tWTV9HVUVTVF9USU1FUl9GUkVRCisJbWlwc19ocHRfZnJlcXVlbmN5ID0gQ09ORklHX0tWTV9HVUVTVF9USU1FUl9GUkVRICogMTAwMDAwMDsKIAlyZXR1cm47CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDk3NWUxODQuLmNhZGViMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2lmbmRlZiBDT05GSUdfU01QCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLmg+CkBAIC0yMzQsMTIgKzIzNSw2IEBACiAjZW5kaWYKIH0KIAotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24gTU4xMDMwMD8/PyAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KICNlbmRpZiAvKiBfQVNNX0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNTk2YmIyNy4uZmU2ZjhlMiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTgsOSArMTgsNyBAQAogI2RlZmluZSBfX0FTTV9CSVRPUFNfSAogCiAjaW5jbHVkZSA8YXNtL2NwdS1yZWdzLmg+Ci0KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIHNldCBiaXQKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCAxNjYzMjM4Li41ZjcwYWYyIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC00OCw3ICs0OCw2IEBACiAjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHhCODAwMDAwMAogCiB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpOwogCiAvKiBEeW5hbWljIERNQSBtYXBwaW5nIHN0dWZmLgogICogaTM4NiBoYXMgZXZlcnl0aGluZyBtYXBwZWQgc3RhdGljYWxseS4KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9tbS90bGItc21wLmMgYi9hcmNoL21uMTAzMDAvbW0vdGxiLXNtcC5jCmluZGV4IDNlNTdmYWYuLmU1ZDBlZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS90bGItc21wLmMKKysrIGIvYXJjaC9tbjEwMzAwL21tL3RsYi1zbXAuYwpAQCAtNzgsOSArNzgsOSBAQAogCWVsc2UKIAkJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoZmx1c2hfbW0sIGZsdXNoX3ZhKTsKIAotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNwdW1hc2tfY2xlYXJfY3B1KGNwdV9pZCwgJmZsdXNoX2NwdW1hc2spOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIG91dDoKIAlwdXRfY3B1KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1pcnEuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWlycS5jCmluZGV4IDc3NDM5ZGEuLmZjYjI4Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWlycS5jCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWlycS5jCkBAIC00MCwxMCArNDAsNiBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEpCi17Ci19Ci0KIHZvaWQgcGNpYmlvc19lbmFibGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCAyYzY0ZjIyLi4zMDAzY2RhIDEwMDY0NAotLS0gYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTI3LDE0ICsyNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KLS8qCi0gKiBjbGVhcl9iaXQgbWF5IG5vdCBpbXBseSBhIG1lbW9yeSBiYXJyaWVyCi0gKi8KLSNpZm5kZWYgc21wX21iX19iZWZvcmVfY2xlYXJfYml0Ci0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX21iKCkKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKICNpbmNsdWRlIDxhc20vYml0b3BzL19fZmZzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzL2MzMDAwX2RlZmNvbmZpZwppbmRleCBhY2FjZDM0Li5mYjkyYjg5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9jb25maWdzL2MzMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9jb25maWdzL2MzMDAwX2RlZmNvbmZpZwpAQCAtMTI3LDggKzEyNyw2IEBACiBDT05GSUdfU05EX0FEMTg4OT15CiBDT05GSUdfVVNCX0hJRERFVj15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfUFJJTlRFUj1tCiBDT05GSUdfVVNCX1NUT1JBR0U9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvZGVmYXVsdF9kZWZjb25maWcKaW5kZXggYmE2MTQ5NS4uNGQ4MTI3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCkBAIC0xNDUsNyArMTQ1LDYgQEAKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX1RPUFNFRUQ9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9VSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZwppbmRleCAyOGMxYjVkLi5kYzBkN2NlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWcKQEAgLTIxOSw3ICsyMTksNiBAQAogQ09ORklHX0hJRF9QSUQ9eQogQ09ORklHX1VTQl9ISURERVY9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQogQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CiBDT05GSUdfVVNCX01PTj1tCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDQ3Mjg4NmMuLjBiZTJkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKIC8qCiAgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgpAQCAtMTQzLDExICsxNDQsNiBAQAogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KIAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCXNtcF9tYigpCi0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAogI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpIHsgKGkpIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggOGM5YjYzMS4uM2Y5NDA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4JCS8qIGZvciBCSVRTX1BFUl9MT05HL1NISUZUX1BFUl9MT05HICovCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAKIC8qCkBAIC0xOSw5ICsyMCw2IEBACiAjZGVmaW5lIENIT1BfU0hJRlRDT1VOVCh4KSAoKCh1bnNpZ25lZCBsb25nKSAoeCkpICYgKEJJVFNfUEVSX0xPTkcgLSAxKSkKIAogCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpICAgICAgc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKSAgICAgICBzbXBfbWIoKQotCiAvKiBTZWUgaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/dD0xMDg4MjY2Mzc5MDAwMDMgZm9yIGRpc2N1c3Npb24KICAqIG9uIHVzZSBvZiB2b2xhdGlsZSBhbmQgX18qX2JpdCgpIChzZXQvY2xlYXIvY2hhbmdlKToKICAqCSpfYml0KCkgd2FudCB1c2Ugb2Ygdm9sYXRpbGUuCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDQ2NTE1NDAuLjIwZGYyYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0yMTUsMTEgKzIxNSw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxLCBpbnQgYWN0aXZlKQotewotCS8qIFdlIGRvbid0IG5lZWQgdG8gcGVuYWxpemUgaXNhIGlycSdzICovCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCiB7CiAJcmV0dXJuIGNoYW5uZWwgPyAxNSA6IDE0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcKaW5kZXggY2YwNmQ0Mi4uZTlkODRiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCkBAIC01Nyw3ICs1Nyw2IEBACiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKaW5kZXggN2I4YWJkMS4uOTkxOWE5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCkBAIC03MSw3ICs3MSw2IEBACiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jdXJyaXR1Y2tfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2N1cnJpdHVja19kZWZjb25maWcKaW5kZXggNDE5MjMyMi4uNDdkZTY4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2N1cnJpdHVja19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2N1cnJpdHVja19kZWZjb25maWcKQEAgLTcxLDcgKzcxLDYgQEAKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1JUQ19DTEFTUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZwppbmRleCBjYTA4OGNkLi45NjIyZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcKQEAgLTgzLDcgKzgzLDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwppbmRleCA0Zjg0YTBiLi4wZGM5OWUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCkBAIC02NCw3ICs2NCw2IEBACiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKaW5kZXggMjQwMWUyNS4uMWQwM2MzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwpAQCAtNzYsNyArNzYsNiBAQAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwppbmRleCAyMWM4NDFlMC4uY2E4M2VjOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCkBAIC03NSw3ICs3NSw2IEBACiBDT05GSUdfRkJfU001MDE9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IDBiNzNiN2YuLjRiNGEyYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC03NCw3ICs3NCw2IEBACiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggOTdhYzNiOS4uNTg3MTM5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTcxLDcgKzcxLDYgQEAKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9GU0w9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwppbmRleCBiNGRhMWE3Li41YWRjNGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwpAQCAtNjEsNyArNjEsNiBAQAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCmluZGV4IDI5MWY4MjIuLjgyYjZiNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC03MSw3ICs3MSw2IEBACiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9GU0w9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKaW5kZXggYTNiY2RhNi4uNGFlMzg1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCkBAIC03MCw3ICs3MCw2IEBACiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvZ2VfaW1wM2FfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9nZV9pbXAzYV9kZWZjb25maWcKaW5kZXggYzk3NjViNS4uZGM5MzlkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9nZV9pbXAzYV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9nZV9pbXAzYV9kZWZjb25maWcKQEAgLTE1OCw3ICsxNTgsNiBAQAogQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogQ09ORklHX0hJRF9aRVJPUExVUz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKaW5kZXggZTUxNDc0OC4uNDM1ZmQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKQEAgLTg2LDcgKzg2LDYgQEAKIENPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKaW5kZXggMDdiYjgxZC4uNzJkZjhhYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKQEAgLTEyNSw3ICsxMjUsNiBAQAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0lTUDE3NjBfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwppbmRleCBmNTFjN2ViLi43NmY0M2RmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0xMjMsNyArMTIzLDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcKaW5kZXggYjZkNDlkYS4uOGM2NmIxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZwpAQCAtMTA4LDcgKzEwOCw2IEBACiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX0hJRF9UT1BTRUVEPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKaW5kZXggYzY5ZjYxNi4uNWUyYWE0MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCkBAIC0yNjEsNyArMjYxLDYgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9bQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCAyMmE0MDNkLi40YmVlMWE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtMTc5LDcgKzE3OSw2IEBACiBDT05GSUdfSElEPW0KICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZwppbmRleCA4OTU0NDllLi42ZDdiMjJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcKQEAgLTg3LDcgKzg3LDYgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKaW5kZXggYjIwNTU0ZS4uZGI1YjMwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCkBAIC0xMTEsNyArMTExLDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKaW5kZXggMWVhMjJmYy4uM2M3MmZhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtMTc1LDcgKzE3NSw2IEBACiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDM1MzQzNTIuLmI1ZTY4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTExMSw3ICsxMTEsNiBAQAogQ09ORklHX0hJRD1tCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCmluZGV4IDJhNWFmYWMuLjk1ZTU0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tYXBsZV9kZWZjb25maWcKQEAgLTc5LDcgKzc5LDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKaW5kZXggOGI2ODJkMWMuLjUzMDYwMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xMTMsNyArMTEzLDYgQEAKIENPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKIENPTkZJR19ISURfWkVST1BMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCmluZGV4IGExY2M4MTcuLjM1NTk1ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0xMjYsNyArMTI2LDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwppbmRleCBhNzM2MjZiLi41NTNlNjYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKQEAgLTI3OSw3ICsyNzksNiBAQAogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX1RPUFNFRUQ9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKaW5kZXggMTc1YThiOS4uYzkxMDY2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCkBAIC05NjQsOSArOTY0LDcgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCBiYTM5Yzc4Li42MGFkMmMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtNzIsNyArNzIsNiBAQAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGUzYjFkNDEuLjI4OTkyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTgsNiArOCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CiAKQEAgLTI3MCwxMSArMjcxLDYgQEAKIH0KICNkZWZpbmUgYXRvbWljX2RlY19pZl9wb3NpdGl2ZSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlCiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpICAgICBzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKSAgICAgIHNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKSAgICAgc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkgICAgICBzbXBfbWIoKQotCiAjaWZkZWYgX19wb3dlcnBjNjRfXwogCiAjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKaW5kZXggZjg5ZGE4MC4uYmFiNzlhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC04NCw0ICs4NCw3IEBACiAJX19fcDE7CQkJCQkJCQlcCiB9KQogCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpICAgICBzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pYygpICAgICAgc21wX21iKCkKKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19CQVJSSUVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBhNWU5YTdkLi5iZDNiZDU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC01MSwxMSArNTEsNyBAQAogI2RlZmluZSBQUENfQklUKGJpdCkJCSgxVUwgPDwgUFBDX0JJVExTSElGVChiaXQpKQogI2RlZmluZSBQUENfQklUTUFTSyhicywgYmUpCSgoUFBDX0JJVChicykgLSBQUENfQklUKGJlKSkgfCBQUENfQklUKGJzKSkKIAotLyoKLSAqIGNsZWFyX2JpdCBkb2Vzbid0IGltcGx5IGEgbWVtb3J5IGJhcnJpZXIKLSAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9tYigpCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyogTWFjcm8gZm9yIGdlbmVyYXRpbmcgdGhlICoqKl9iaXRzKCkgZnVuY3Rpb25zICovCiAjZGVmaW5lIERFRklORV9CSVRPUChmbiwgb3AsIHByZWZpeCkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kaXNhc3NlbWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rpc2Fzc2VtYmxlLmgKaW5kZXggODU2ZjhkZS4uNjMzMGE2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rpc2Fzc2VtYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rpc2Fzc2VtYmxlLmgKQEAgLTgxLDQgKzgxLDM4IEBACiB7CiAJcmV0dXJuIChpbnN0ID4+IDExKSAmIDB4N2ZmZjsKIH0KKworI2RlZmluZSBJU19YRk9STShpbnN0KQkoZ2V0X29wKGluc3QpICA9PSAzMSkKKyNkZWZpbmUgSVNfRFNGT1JNKGluc3QpCShnZXRfb3AoaW5zdCkgPj0gNTYpCisKKy8qCisgKiBDcmVhdGUgYSBEU0lTUiB2YWx1ZSBmcm9tIHRoZSBpbnN0cnVjdGlvbgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1ha2VfZHNpc3IodW5zaWduZWQgaW5zdHIpCit7CisJdW5zaWduZWQgZHNpc3I7CisKKworCS8qIGJpdHMgIDY6MTUgLS0+IDIyOjMxICovCisJZHNpc3IgPSAoaW5zdHIgJiAweDAzZmYwMDAwKSA+PiAxNjsKKworCWlmIChJU19YRk9STShpbnN0cikpIHsKKwkJLyogYml0cyAyOTozMCAtLT4gMTU6MTYgKi8KKwkJZHNpc3IgfD0gKGluc3RyICYgMHgwMDAwMDAwNikgPDwgMTQ7CisJCS8qIGJpdCAgICAgMjUgLS0+ICAgIDE3ICovCisJCWRzaXNyIHw9IChpbnN0ciAmIDB4MDAwMDAwNDApIDw8IDg7CisJCS8qIGJpdHMgMjE6MjQgLS0+IDE4OjIxICovCisJCWRzaXNyIHw9IChpbnN0ciAmIDB4MDAwMDA3ODApIDw8IDM7CisJfSBlbHNlIHsKKwkJLyogYml0ICAgICAgNSAtLT4gICAgMTcgKi8KKwkJZHNpc3IgfD0gKGluc3RyICYgMHgwNDAwMDAwMCkgPj4gMTI7CisJCS8qIGJpdHMgIDE6IDQgLS0+IDE4OjIxICovCisJCWRzaXNyIHw9IChpbnN0ciAmIDB4NzgwMDAwMDApID4+IDE3OworCQkvKiBiaXRzIDMwOjMxIC0tPiAxMjoxMyAqLworCQlpZiAoSVNfRFNGT1JNKGluc3RyKSkKKwkJCWRzaXNyIHw9IChpbnN0ciAmIDB4MDAwMDAwMDMpIDw8IDE4OworCX0KKworCXJldHVybiBkc2lzcjsKK30KICNlbmRpZiAvKiBfX0FTTV9QUENfRElTQVNTRU1CTEVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAppbmRleCAxOWViNzRhLi45NjAxNzQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX1BFUkZNT04JMHhmMDAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9BTFRJVkVDCTB4ZjIwCiAjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfVlNYCQkweGY0MAorI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX0ZBQ19VTkFWQUlMCTB4ZjYwCiAjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfSF9GQUNfVU5BVkFJTAkweGY4MAogCiAjZGVmaW5lIEJPT0szU19JUlFQUklPX1NZU1RFTV9SRVNFVAkJMApAQCAtMTE0LDE0ICsxMTUsMTUgQEAKICNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fRlBfVU5BVkFJTAkJNwogI2RlZmluZSBCT09LM1NfSVJRUFJJT19BTFRJVkVDCQkJOAogI2RlZmluZSBCT09LM1NfSVJRUFJJT19WU1gJCQk5Ci0jZGVmaW5lIEJPT0szU19JUlFQUklPX1NZU0NBTEwJCQkxMAotI2RlZmluZSBCT09LM1NfSVJRUFJJT19NQUNISU5FX0NIRUNLCQkxMQotI2RlZmluZSBCT09LM1NfSVJRUFJJT19ERUJVRwkJCTEyCi0jZGVmaW5lIEJPT0szU19JUlFQUklPX0VYVEVSTkFMCQkJMTMKLSNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVIJCTE0Ci0jZGVmaW5lIEJPT0szU19JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1IJMTUKLSNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fRVhURVJOQUxfTEVWRUwJCTE2Ci0jZGVmaW5lIEJPT0szU19JUlFQUklPX01BWAkJCTE3CisjZGVmaW5lIEJPT0szU19JUlFQUklPX0ZBQ19VTkFWQUlMCQkxMAorI2RlZmluZSBCT09LM1NfSVJRUFJJT19TWVNDQUxMCQkJMTEKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fTUFDSElORV9DSEVDSwkJMTIKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fREVCVUcJCQkxMworI2RlZmluZSBCT09LM1NfSVJRUFJJT19FWFRFUk5BTAkJCTE0CisjZGVmaW5lIEJPT0szU19JUlFQUklPX0RFQ1JFTUVOVEVSCQkxNQorI2RlZmluZSBCT09LM1NfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SCTE2CisjZGVmaW5lIEJPT0szU19JUlFQUklPX0VYVEVSTkFMX0xFVkVMCQkxNworI2RlZmluZSBCT09LM1NfSVJRUFJJT19NQVgJCQkxOAogCiAjZGVmaW5lIEJPT0szU19IRkxBR19EQ0JaMzIJCQkweDEKICNkZWZpbmUgQk9PSzNTX0hGTEFHX1NMQgkJCTB4MgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKaW5kZXggYmIxZTM4YTIuLmY1MmY2NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaApAQCAtMjY4LDkgKzI2OCwxMCBAQAogCXJldHVybiB2Y3B1LT5hcmNoLnBjOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBrdm1wcGNfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogc3RhdGljIGlubGluZSBib29sIGt2bXBwY19uZWVkX2J5dGVzd2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfTEUpICE9IChNU1JfS0VSTkVMICYgTVNSX0xFKTsKKwlyZXR1cm4gKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX0xFKSAhPSAoTVNSX0tFUk5FTCAmIE1TUl9MRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGt2bXBwY19nZXRfbGFzdF9pbnN0X2ludGVybmFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgcGMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc182NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfNjQuaAppbmRleCA1MTM4OGJlLi5mZGRiNzJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc182NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzXzY0LmgKQEAgLTc3LDM0ICs3NywxMjIgQEAKIAlyZXR1cm4gb2xkID09IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9faHB0ZV9hY3R1YWxfcHNpemUodW5zaWduZWQgaW50IGxwLCBpbnQgcHNpemUpCit7CisJaW50IGksIHNoaWZ0OworCXVuc2lnbmVkIGludCBtYXNrOworCisJLyogc3RhcnQgZnJvbSAxIGlnbm9yaW5nIE1NVV9QQUdFXzRLICovCisJZm9yIChpID0gMTsgaSA8IE1NVV9QQUdFX0NPVU5UOyBpKyspIHsKKworCQkvKiBpbnZhbGlkIHBlbmMgKi8KKwkJaWYgKG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5wZW5jW2ldID09IC0xKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIGVuY29kaW5nIGJpdHMgcGVyIGFjdHVhbCBwYWdlIHNpemUKKwkJICogICAgICAgIFBURSBMUCAgICAgYWN0dWFsIHBhZ2Ugc2l6ZQorCQkgKiAgICBycnJyIHJycnoJCT49OEtCCisJCSAqICAgIHJycnIgcnJ6egkJPj0xNktCCisJCSAqICAgIHJycnIgcnp6egkJPj0zMktCCisJCSAqICAgIHJycnIgenp6egkJPj02NEtCCisJCSAqIC4uLi4uLi4KKwkJICovCisJCXNoaWZ0ID0gbW11X3BzaXplX2RlZnNbaV0uc2hpZnQgLSBMUF9TSElGVDsKKwkJaWYgKHNoaWZ0ID4gTFBfQklUUykKKwkJCXNoaWZ0ID0gTFBfQklUUzsKKwkJbWFzayA9ICgxIDw8IHNoaWZ0KSAtIDE7CisJCWlmICgobHAgJiBtYXNrKSA9PSBtbXVfcHNpemVfZGVmc1twc2l6ZV0ucGVuY1tpXSkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYmllX3JiKHVuc2lnbmVkIGxvbmcgdiwgdW5zaWduZWQgbG9uZyByLAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcHRlX2luZGV4KQogewotCXVuc2lnbmVkIGxvbmcgcmIsIHZhX2xvdzsKKwlpbnQgYl9wc2l6ZSwgYV9wc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcGVuYzsKKwl1bnNpZ25lZCBsb25nIHJiID0gMCwgdmFfbG93LCBzbGxwOworCXVuc2lnbmVkIGludCBscCA9IChyID4+IExQX1NISUZUKSAmICgoMSA8PCBMUF9CSVRTKSAtIDEpOwogCisJaWYgKCEodiAmIEhQVEVfVl9MQVJHRSkpIHsKKwkJLyogYm90aCBiYXNlIGFuZCBhY3R1YWwgcHNpemUgaXMgNGsgKi8KKwkJYl9wc2l6ZSA9IE1NVV9QQUdFXzRLOworCQlhX3BzaXplID0gTU1VX1BBR0VfNEs7CisJfSBlbHNlIHsKKwkJZm9yIChiX3BzaXplID0gMDsgYl9wc2l6ZSA8IE1NVV9QQUdFX0NPVU5UOyBiX3BzaXplKyspIHsKKworCQkJLyogdmFsaWQgZW50cmllcyBoYXZlIGEgc2hpZnQgdmFsdWUgKi8KKwkJCWlmICghbW11X3BzaXplX2RlZnNbYl9wc2l6ZV0uc2hpZnQpCisJCQkJY29udGludWU7CisKKwkJCWFfcHNpemUgPSBfX2hwdGVfYWN0dWFsX3BzaXplKGxwLCBiX3BzaXplKTsKKwkJCWlmIChhX3BzaXplICE9IC0xKQorCQkJCWJyZWFrOworCQl9CisJfQorCS8qCisJICogSWdub3JlIHRoZSB0b3AgMTQgYml0cyBvZiB2YQorCSAqIHYgaGF2ZSB0b3AgdHdvIGJpdHMgY292ZXJpbmcgc2VnbWVudCBzaXplLCBoZW5jZSBtb3ZlCisJICogYnkgMTYgYml0cywgQWxzbyBjbGVhciB0aGUgbG93ZXIgSFBURV9WX0FWUE5fU0hJRlQgKDcpIGJpdHMuCisJICogQVZBIGZpZWxkIGluIHYgYWxzbyBoYXZlIHRoZSBsb3dlciAyMyBiaXRzIGlnbm9yZWQuCisJICogRm9yIGJhc2UgcGFnZSBzaXplIDRLIHdlIG5lZWQgMTQgLi4gNjUgYml0cyAoc28gbmVlZCB0bworCSAqIGNvbGxlY3QgZXh0cmEgMTEgYml0cykKKwkgKiBGb3Igb3RoZXJzIHdlIG5lZWQgMTQuLjE0K2kKKwkgKi8KKwkvKiBUaGlzIGNvdmVycyAxNC4uNTQgYml0cyBvZiB2YSovCiAJcmIgPSAodiAmIH4weDdmVUwpIDw8IDE2OwkJLyogQVZBIGZpZWxkICovCisJLyoKKwkgKiBBVkEgaW4gdiBoYWQgY2xlYXJlZCBsb3dlciAyMyBiaXRzLiBXZSBuZWVkIHRvIGRlcml2ZQorCSAqIHRoYXQgZnJvbSBwdGVnIGluZGV4CisJICovCiAJdmFfbG93ID0gcHRlX2luZGV4ID4+IDM7CiAJaWYgKHYgJiBIUFRFX1ZfU0VDT05EQVJZKQogCQl2YV9sb3cgPSB+dmFfbG93OwotCS8qIHhvciB2c2lkIGZyb20gQVZBICovCisJLyoKKwkgKiBnZXQgdGhlIHZwbiBiaXRzIGZyb20gdmFfbG93IHVzaW5nIHJldmVyc2Ugb2YgaGFzaGluZy4KKwkgKiBJbiB2IHdlIGhhdmUgdmEgd2l0aCAyMyBiaXRzIGRyb3BwZWQgYW5kIHRoZW4gbGVmdCBzaGlmdGVkCisJICogSFBURV9WX0FWUE5fU0hJRlQgKDcpIGJpdHMuIE5vdyB0byBmaW5kIHZzaWQgd2UgbmVlZAorCSAqIHJpZ2h0IHNoaWZ0IGl0IHdpdGggKFNJRF9TSElGVCAtICgyMyAtIDcpKQorCSAqLwogCWlmICghKHYgJiBIUFRFX1ZfMVRCX1NFRykpCi0JCXZhX2xvdyBePSB2ID4+IDEyOworCQl2YV9sb3cgXj0gdiA+PiAoU0lEX1NISUZUIC0gMTYpOwogCWVsc2UKLQkJdmFfbG93IF49IHYgPj4gMjQ7CisJCXZhX2xvdyBePSB2ID4+IChTSURfU0hJRlRfMVQgLSAxNik7CiAJdmFfbG93ICY9IDB4N2ZmOwotCWlmICh2ICYgSFBURV9WX0xBUkdFKSB7Ci0JCXJiIHw9IDE7CQkJLyogTCBmaWVsZCAqLwotCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQVJDSF8yMDYpICYmCi0JCSAgICAociAmIDB4ZmYwMDApKSB7Ci0JCQkvKiBub24tMTZNQiBsYXJnZSBwYWdlLCBtdXN0IGJlIDY0ayAqLwotCQkJLyogKG1hc2tzIGRlcGVuZCBvbiBwYWdlIHNpemUpICovCi0JCQlyYiB8PSAweDEwMDA7CQkvKiBwYWdlIGVuY29kaW5nIGluIExQIGZpZWxkICovCi0JCQlyYiB8PSAodmFfbG93ICYgMHg3ZikgPDwgMTY7IC8qIDdiIG9mIFZBIGluIEFWQS9MUCBmaWVsZCAqLwotCQkJcmIgfD0gKCh2YV9sb3cgPDwgNCkgJiAweGYwKTsJLyogQVZBTCBmaWVsZCAoUDcgZG9lc24ndCBzZWVtIHRvIGNhcmUpICovCi0JCX0KLQl9IGVsc2UgewotCQkvKiA0a0IgcGFnZSAqLwotCQlyYiB8PSAodmFfbG93ICYgMHg3ZmYpIDw8IDEyOwkvKiByZW1haW5pbmcgMTFiIG9mIFZBICovCisKKwlzd2l0Y2ggKGJfcHNpemUpIHsKKwljYXNlIE1NVV9QQUdFXzRLOgorCQlzbGxwID0gKChtbXVfcHNpemVfZGVmc1thX3BzaXplXS5zbGxwICYgU0xCX1ZTSURfTCkgPj4gNikgfAorCQkJKChtbXVfcHNpemVfZGVmc1thX3BzaXplXS5zbGxwICYgU0xCX1ZTSURfTFApID4+IDQpOworCQlyYiB8PSBzbGxwIDw8IDU7CS8qICBBUCBmaWVsZCAqLworCQlyYiB8PSAodmFfbG93ICYgMHg3ZmYpIDw8IDEyOwkvKiByZW1haW5pbmcgMTEgYml0cyBvZiBBVkEgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwl7CisJCWludCBhdmFsX3NoaWZ0OworCQkvKgorCQkgKiByZW1haW5pbmcgN2JpdHMgb2YgQVZBL0xQIGZpZWxkcworCQkgKiBBbHNvIGNvbnRhaW4gdGhlIHJyIGJpdHMgb2YgTFAKKwkJICovCisJCXJiIHw9ICh2YV9sb3cgJiAweDdmKSA8PCAxNjsKKwkJLyoKKwkJICogTm93IGNsZWFyIG5vdCBuZWVkZWQgTFAgYml0cyBiYXNlZCBvbiBhY3R1YWwgcHNpemUKKwkJICovCisJCXJiICY9IH4oKDF1bCA8PCBtbXVfcHNpemVfZGVmc1thX3BzaXplXS5zaGlmdCkgLSAxKTsKKwkJLyoKKwkJICogQVZBTCBmaWVsZCA1OC4uNzcgLSBiYXNlX3BhZ2Vfc2hpZnQgYml0cyBvZiB2YQorCQkgKiB3ZSBoYXZlIHNwYWNlIGZvciA1OC4uNjQgYml0cywgTWlzc2luZyBiaXRzIHNob3VsZAorCQkgKiBiZSB6ZXJvIGZpbGxlZC4gKzEgaXMgdG8gdGFrZSBjYXJlIG9mIEwgYml0IHNoaWZ0CisJCSAqLworCQlhdmFsX3NoaWZ0ID0gNjQgLSAoNzcgLSBtbXVfcHNpemVfZGVmc1tiX3BzaXplXS5zaGlmdCkgKyAxOworCQlyYiB8PSAoKHZhX2xvdyA8PCBhdmFsX3NoaWZ0KSAmIDB4ZmUpOworCisJCXJiIHw9IDE7CQkvKiBMIGZpZWxkICovCisJCXBlbmMgPSBtbXVfcHNpemVfZGVmc1tiX3BzaXplXS5wZW5jW2FfcHNpemVdOworCQlyYiB8PSBwZW5jIDw8IDEyOwkvKiBMUCBmaWVsZCAqLworCQlicmVhazsKKwl9CiAJfQogCXJiIHw9ICh2ID4+IDU0KSAmIDB4MzAwOwkJLyogQiBmaWVsZCAqLwogCXJldHVybiByYjsKQEAgLTExMiwxNCArMjAwLDI2IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBocHRlX3BhZ2Vfc2l6ZSh1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgbCkKIHsKKwlpbnQgc2l6ZSwgYV9wc2l6ZTsKKwkvKiBMb29rIGF0IHRoZSA4IGJpdCBMUCB2YWx1ZSAqLworCXVuc2lnbmVkIGludCBscCA9IChsID4+IExQX1NISUZUKSAmICgoMSA8PCBMUF9CSVRTKSAtIDEpOworCiAJLyogb25seSBoYW5kbGUgNGssIDY0ayBhbmQgMTZNIHBhZ2VzIGZvciBub3cgKi8KIAlpZiAoIShoICYgSFBURV9WX0xBUkdFKSkKLQkJcmV0dXJuIDF1bCA8PCAxMjsJCS8qIDRrIHBhZ2UgKi8KLQlpZiAoKGwgJiAweGYwMDApID09IDB4MTAwMCAmJiBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzIwNikpCi0JCXJldHVybiAxdWwgPDwgMTY7CQkvKiA2NGsgcGFnZSAqLwotCWlmICgobCAmIDB4ZmYwMDApID09IDApCi0JCXJldHVybiAxdWwgPDwgMjQ7CQkvKiAxNk0gcGFnZSAqLwotCXJldHVybiAwOwkJCQkvKiBlcnJvciAqLworCQlyZXR1cm4gMXVsIDw8IDEyOworCWVsc2UgeworCQlmb3IgKHNpemUgPSAwOyBzaXplIDwgTU1VX1BBR0VfQ09VTlQ7IHNpemUrKykgeworCQkJLyogdmFsaWQgZW50cmllcyBoYXZlIGEgc2hpZnQgdmFsdWUgKi8KKwkJCWlmICghbW11X3BzaXplX2RlZnNbc2l6ZV0uc2hpZnQpCisJCQkJY29udGludWU7CisKKwkJCWFfcHNpemUgPSBfX2hwdGVfYWN0dWFsX3BzaXplKGxwLCBzaXplKTsKKwkJCWlmIChhX3BzaXplICE9IC0xKQorCQkJCXJldHVybiAxdWwgPDwgbW11X3BzaXplX2RlZnNbYV9wc2l6ZV0uc2hpZnQ7CisJCX0KKworCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhwdGVfcnBuKHVuc2lnbmVkIGxvbmcgcHRlbCwgdW5zaWduZWQgbG9uZyBwc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfYXNtLmgKaW5kZXggODIxNzI1Yy4uNWJkZmI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfYXNtLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CiAJdTY0IGNmYXI7CiAJdTY0IHBwcjsKKwl1NjQgaG9zdF9mc2NyOwogI2VuZGlmCiB9OwogCkBAIC0xMzMsNiArMTM0LDcgQEAKIAkJdTY0ICAgICBlc2lkOwogCQl1NjQgICAgIHZzaWQ7CiAJfSBzbGJbNjRdOwkJCS8qIGd1ZXN0IFNMQiAqLworCXU2NCBzaGFkb3dfZnNjcjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rZS5oCmluZGV4IDgwZDQ2YjUuLmM3YWVkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2tlLmgKQEAgLTEwOCw5ICsxMDgsNCBAQAogewogCXJldHVybiB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7CiB9Ci0KLXN0YXRpYyBpbmxpbmUgdWxvbmcga3ZtcHBjX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXJldHVybiB2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyOwotfQogI2VuZGlmIC8qIF9fQVNNX0tWTV9CT09LRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMWVhZWEyZC4uYmI2NmQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ0OSw3ICs0NDksOSBAQAogCXVsb25nIHBjOwogCXVsb25nIGN0cjsKIAl1bG9uZyBscjsKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szUwogCXVsb25nIHRhcjsKKyNlbmRpZgogCiAJdWxvbmcgeGVyOwogCXUzMiBjcjsKQEAgLTQ3NSw2ICs0NzcsNyBAQAogCXVsb25nIHBwcjsKIAl1bG9uZyBwc3BiOwogCXVsb25nIGZzY3I7CisJdWxvbmcgc2hhZG93X2ZzY3I7CiAJdWxvbmcgZWJiaHI7CiAJdWxvbmcgZWJicnI7CiAJdWxvbmcgYmVzY3I7CkBAIC01NjIsNiArNTY1LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szUwogCXVsb25nIGZhdWx0X2RhcjsKIAl1MzIgZmF1bHRfZHNpc3I7CisJdW5zaWduZWQgbG9uZyBpbnRyX21zcjsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0JPT0tFCkBAIC02MjIsOCArNjI2LDEyIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QgY3B1X3J1bjsKIAogCXN0cnVjdCBrdm1fdmNwdV9hcmNoX3NoYXJlZCAqc2hhcmVkOworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfNjQpICYmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfUFJfUE9TU0lCTEUpCisJYm9vbCBzaGFyZWRfYmlnX2VuZGlhbjsKKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbWFnaWNfcGFnZV9wYTsgLyogcGh5cyBhZGRyIHRvIG1hcCB0aGUgbWFnaWMgcGFnZSB0byAqLwogCXVuc2lnbmVkIGxvbmcgbWFnaWNfcGFnZV9lYTsgLyogZWZmZWN0LiBhZGRyIHRvIG1hcCB0aGUgbWFnaWMgcGFnZSB0byAqLworCWJvb2wgZGlzYWJsZV9rZXJuZWxfbng7CiAKIAlpbnQgaXJxX3R5cGU7CQkvKiBvbmUgb2YgS1ZNX0lSUV8qICovCiAJaW50IGlycV9jcHVfaWQ7CkBAIC02NTQsNyArNjYyLDYgQEAKIAlzcGlubG9ja190IHRiYWNjdF9sb2NrOwogCXU2NCBidXN5X3N0b2xlbjsKIAl1NjQgYnVzeV9wcmVlbXB0OwotCXVuc2lnbmVkIGxvbmcgaW50cl9tc3I7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmluZGV4IDQwOTZmMTYuLjRhN2NjNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtNDQ5LDYgKzQ0OSw4NCBAQAogfQogCiAvKgorICogU2hhcmVkIHN0cnVjdCBoZWxwZXJzLiBUaGUgc2hhcmVkIHN0cnVjdCBjYW4gYmUgbGl0dGxlIG9yIGJpZyBlbmRpYW4sCisgKiBkZXBlbmRpbmcgb24gdGhlIGd1ZXN0IGVuZGlhbm5lc3MuIFNvIGV4cG9zZSBoZWxwZXJzIHRvIGFsbCBvZiB0aGVtLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wga3ZtcHBjX3NoYXJlZF9iaWdfZW5kaWFuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KSAmJiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFKQorCS8qIE9ubHkgQm9vazNTXzY0IFBSIHN1cHBvcnRzIGJpLWVuZGlhbiBmb3Igbm93ICovCisJcmV0dXJuIHZjcHUtPmFyY2guc2hhcmVkX2JpZ19lbmRpYW47CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KSAmJiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorCS8qIEJvb2szc182NCBIViBvbiBsaXR0bGUgZW5kaWFuIGlzIGFsd2F5cyBsaXR0bGUgZW5kaWFuICovCisJcmV0dXJuIGZhbHNlOworI2Vsc2UKKwlyZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCisjZGVmaW5lIFNIQVJFRF9XUkFQUEVSX0dFVChyZWcsIHNpemUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHUjI3NpemUga3ZtcHBjX2dldF8jI3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCVwKK3sJCQkJCQkJCQlcCisJaWYgKGt2bXBwY19zaGFyZWRfYmlnX2VuZGlhbih2Y3B1KSkJCQkJXAorCSAgICAgICByZXR1cm4gYmUjI3NpemUjI190b19jcHUodmNwdS0+YXJjaC5zaGFyZWQtPnJlZyk7CVwKKwllbHNlCQkJCQkJCQlcCisJICAgICAgIHJldHVybiBsZSMjc2l6ZSMjX3RvX2NwdSh2Y3B1LT5hcmNoLnNoYXJlZC0+cmVnKTsJXAorfQkJCQkJCQkJCVwKKworI2RlZmluZSBTSEFSRURfV1JBUFBFUl9TRVQocmVnLCBzaXplKQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfIyNyZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1IyNzaXplIHZhbCkJXAorewkJCQkJCQkJCVwKKwlpZiAoa3ZtcHBjX3NoYXJlZF9iaWdfZW5kaWFuKHZjcHUpKQkJCQlcCisJICAgICAgIHZjcHUtPmFyY2guc2hhcmVkLT5yZWcgPSBjcHVfdG9fYmUjI3NpemUodmFsKTsJCVwKKwllbHNlCQkJCQkJCQlcCisJICAgICAgIHZjcHUtPmFyY2guc2hhcmVkLT5yZWcgPSBjcHVfdG9fbGUjI3NpemUodmFsKTsJCVwKK30JCQkJCQkJCQlcCisKKyNkZWZpbmUgU0hBUkVEX1dSQVBQRVIocmVnLCBzaXplKQkJCQkJXAorCVNIQVJFRF9XUkFQUEVSX0dFVChyZWcsIHNpemUpCQkJCQlcCisJU0hBUkVEX1dSQVBQRVJfU0VUKHJlZywgc2l6ZSkJCQkJCVwKKworU0hBUkVEX1dSQVBQRVIoY3JpdGljYWwsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzAsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzEsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzIsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzMsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3JyMCwgNjQpCitTSEFSRURfV1JBUFBFUihzcnIxLCA2NCkKK1NIQVJFRF9XUkFQUEVSKGRhciwgNjQpCitTSEFSRURfV1JBUFBFUl9HRVQobXNyLCA2NCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfc2V0X21zcl9mYXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkKK3sKKwlpZiAoa3ZtcHBjX3NoYXJlZF9iaWdfZW5kaWFuKHZjcHUpKQorCSAgICAgICB2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyID0gY3B1X3RvX2JlNjQodmFsKTsKKwllbHNlCisJICAgICAgIHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgPSBjcHVfdG9fbGU2NCh2YWwpOworfQorU0hBUkVEX1dSQVBQRVIoZHNpc3IsIDMyKQorU0hBUkVEX1dSQVBQRVIoaW50X3BlbmRpbmcsIDMyKQorU0hBUkVEX1dSQVBQRVIoc3ByZzQsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzUsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzYsIDY0KQorU0hBUkVEX1dSQVBQRVIoc3ByZzcsIDY0KQorCitzdGF0aWMgaW5saW5lIHUzMiBrdm1wcGNfZ2V0X3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yKQoreworCWlmIChrdm1wcGNfc2hhcmVkX2JpZ19lbmRpYW4odmNwdSkpCisJICAgICAgIHJldHVybiBiZTMyX3RvX2NwdSh2Y3B1LT5hcmNoLnNoYXJlZC0+c3JbbnJdKTsKKwllbHNlCisJICAgICAgIHJldHVybiBsZTMyX3RvX2NwdSh2Y3B1LT5hcmNoLnNoYXJlZC0+c3JbbnJdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnIsIHUzMiB2YWwpCit7CisJaWYgKGt2bXBwY19zaGFyZWRfYmlnX2VuZGlhbih2Y3B1KSkKKwkgICAgICAgdmNwdS0+YXJjaC5zaGFyZWQtPnNyW25yXSA9IGNwdV90b19iZTMyKHZhbCk7CisJZWxzZQorCSAgICAgICB2Y3B1LT5hcmNoLnNoYXJlZC0+c3JbbnJdID0gY3B1X3RvX2xlMzIodmFsKTsKK30KKworLyoKICAqIFBsZWFzZSBjYWxsIGFmdGVyIHByZXBhcmVfdG9fZW50ZXIuIFRoaXMgZnVuY3Rpb24gcHV0cyB0aGUgbGF6eSBlZSBhbmQgaXJxCiAgKiBkaXNhYmxlZCB0cmFja2luZyBzdGF0ZSBiYWNrIHRvIG5vcm1hbCBtb2RlLCB3aXRob3V0IGFjdHVhbGx5IGVuYWJsaW5nCiAgKiBpbnRlcnJ1cHRzLgpAQCAtNDg1LDcgKzU2Myw3IEBACiAJbXNyXzY0Yml0ID0gTVNSX1NGOwogI2VuZGlmCiAKLQlpZiAoISh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgbXNyXzY0Yml0KSkKKwlpZiAoIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIG1zcl82NGJpdCkpCiAJCWVhID0gKHVpbnQzMl90KWVhOwogCiAJcmV0dXJuIGVhOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDk1MTQ1YTEuLjFiMDczOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTQ2LDExICs0Niw2IEBACiAjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcCiAJKHBjaV9oYXNfZmxhZyhQQ0lfUkVBU1NJR05fQUxMX0JVUykpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAjZGVmaW5lIEhBVkVfQVJDSF9QQ0lfR0VUX0xFR0FDWV9JREVfSVJRCiBzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCmluZGV4IGU1ZDJlMGIuLjQ4NTJiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKQEAgLTY3MCwxOCArNjcwLDIwIEBACiAjZGVmaW5lICAgTU1DUjBfUFJPQkxFTV9ESVNBQkxFIE1NQ1IwX0ZDUAogI2RlZmluZSAgIE1NQ1IwX0ZDTTEJMHgxMDAwMDAwMFVMIC8qIGZyZWV6ZSBjb3VudGVycyB3aGlsZSBNU1IgbWFyayA9IDEgKi8KICNkZWZpbmUgICBNTUNSMF9GQ00wCTB4MDgwMDAwMDBVTCAvKiBmcmVlemUgY291bnRlcnMgd2hpbGUgTVNSIG1hcmsgPSAwICovCi0jZGVmaW5lICAgTU1DUjBfUE1YRQkweDA0MDAwMDAwVUwgLyogcGVyZm9ybWFuY2UgbW9uaXRvciBleGNlcHRpb24gZW5hYmxlICovCi0jZGVmaW5lICAgTU1DUjBfRkNFQ0UJMHgwMjAwMDAwMFVMIC8qIGZyZWV6ZSBjdHJzIG9uIGVuYWJsZWQgY29uZCBvciBldmVudCAqLworI2RlZmluZSAgIE1NQ1IwX1BNWEUJQVNNX0NPTlNUKDB4MDQwMDAwMDApIC8qIHBlcmYgbW9uIGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgICBNTUNSMF9GQ0VDRQlBU01fQ09OU1QoMHgwMjAwMDAwMCkgLyogZnJlZXplIGN0cnMgb24gZW5hYmxlZCBjb25kIG9yIGV2ZW50ICovCiAjZGVmaW5lICAgTU1DUjBfVEJFRQkweDAwNDAwMDAwVUwgLyogdGltZSBiYXNlIGV4Y2VwdGlvbiBlbmFibGUgKi8KICNkZWZpbmUgICBNTUNSMF9CSFJCQQkweDAwMjAwMDAwVUwgLyogQkhSQiBBY2Nlc3MgYWxsb3dlZCBpbiB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgICBNTUNSMF9FQkUJMHgwMDEwMDAwMFVMIC8qIEV2ZW50IGJhc2VkIGJyYW5jaCBlbmFibGUgKi8KICNkZWZpbmUgICBNTUNSMF9QTUNDCTB4MDAwYzAwMDBVTCAvKiBQTUMgY29udHJvbCAqLwogI2RlZmluZSAgIE1NQ1IwX1BNQ0NfVTYJMHgwMDA4MDAwMFVMIC8qIFBNQzEtNiBhcmUgUi9XIGJ5IHVzZXIgKFBSKSAqLwogI2RlZmluZSAgIE1NQ1IwX1BNQzFDRQkweDAwMDA4MDAwVUwgLyogUE1DMSBjb3VudCBlbmFibGUqLwotI2RlZmluZSAgIE1NQ1IwX1BNQ2pDRQkweDAwMDA0MDAwVUwgLyogUE1DaiBjb3VudCBlbmFibGUqLworI2RlZmluZSAgIE1NQ1IwX1BNQ2pDRQlBU01fQ09OU1QoMHgwMDAwNDAwMCkgLyogUE1DaiBjb3VudCBlbmFibGUqLwogI2RlZmluZSAgIE1NQ1IwX1RSSUdHRVIJMHgwMDAwMjAwMFVMIC8qIFRSSUdHRVIgZW5hYmxlICovCi0jZGVmaW5lICAgTU1DUjBfUE1BT19TWU5DIDB4MDAwMDA4MDBVTCAvKiBQTVUgaW50ZXJydXB0IGlzIHN5bmNocm9ub3VzICovCi0jZGVmaW5lICAgTU1DUjBfUE1BTwkweDAwMDAwMDgwVUwgLyogcGVyZm9ybWFuY2UgbW9uaXRvciBhbGVydCBoYXMgb2NjdXJyZWQsIHNldCB0byAwIGFmdGVyIGhhbmRsaW5nIGV4Y2VwdGlvbiAqLworI2RlZmluZSAgIE1NQ1IwX1BNQU9fU1lOQyBBU01fQ09OU1QoMHgwMDAwMDgwMCkgLyogUE1VIGludHIgaXMgc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgICBNTUNSMF9DNTZSVU4JQVNNX0NPTlNUKDB4MDAwMDAxMDApIC8qIFBNQzUvNiBjb3VudCB3aGVuIFJVTj0wICovCisvKiBwZXJmb3JtYW5jZSBtb25pdG9yIGFsZXJ0IGhhcyBvY2N1cnJlZCwgc2V0IHRvIDAgYWZ0ZXIgaGFuZGxpbmcgZXhjZXB0aW9uICovCisjZGVmaW5lICAgTU1DUjBfUE1BTwlBU01fQ09OU1QoMHgwMDAwMDA4MCkKICNkZWZpbmUgICBNTUNSMF9TSFJGQwkweDAwMDAwMDQwVUwgLyogU0hScmUgZnJlZXplIGNvbmRpdGlvbnMgYmV0d2VlbiB0aHJlYWRzICovCiAjZGVmaW5lICAgTU1DUjBfRkM1NgkweDAwMDAwMDEwVUwgLyogZnJlZXplIGNvdW50ZXJzIDUgYW5kIDYgKi8KICNkZWZpbmUgICBNTUNSMF9GQ1RJCTB4MDAwMDAwMDhVTCAvKiBmcmVlemUgY291bnRlcnMgaW4gdGFncyBpbmFjdGl2ZSBtb2RlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggMTYzYzNiMC4uNDY0ZjEwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtNTgzLDYgKzU4Myw3IEBACiAKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgTDFDU1IwLiAqLwogI2RlZmluZSBMMUNTUjBfQ1BFCTB4MDAwMTAwMDAJLyogRGF0YSBDYWNoZSBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIEwxQ1NSMF9DVUwJMHgwMDAwMDQwMAkvKiBEYXRhIENhY2hlIFVuYWJsZSB0byBMb2NrICovCiAjZGVmaW5lIEwxQ1NSMF9DTEZDCTB4MDAwMDAxMDAJLyogQ2FjaGUgTG9jayBCaXRzIEZsYXNoIENsZWFyICovCiAjZGVmaW5lIEwxQ1NSMF9EQ0ZJCTB4MDAwMDAwMDIJLyogRGF0YSBDYWNoZSBGbGFzaCBJbnZhbGlkYXRlICovCiAjZGVmaW5lIEwxQ1NSMF9DRkkJMHgwMDAwMDAwMgkvKiBDYWNoZSBGbGFzaCBJbnZhbGlkYXRlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IGE2NjY1YmUuLjJiYzRhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC01NDUsNyArNTQ1LDYgQEAKICNkZWZpbmUgS1ZNX1JFR19QUENfVENTQ1IJKEtWTV9SRUdfUFBDIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDB4YjEpCiAjZGVmaW5lIEtWTV9SRUdfUFBDX1BJRAkJKEtWTV9SRUdfUFBDIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDB4YjIpCiAjZGVmaW5lIEtWTV9SRUdfUFBDX0FDT1AJKEtWTV9SRUdfUFBDIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDB4YjMpCi0jZGVmaW5lIEtWTV9SRUdfUFBDX1dPUlQJKEtWTV9SRUdfUFBDIHwgS1ZNX1JFR19TSVpFX1U2NCB8IDB4YjQpCiAKICNkZWZpbmUgS1ZNX1JFR19QUENfVlJTQVZFCShLVk1fUkVHX1BQQyB8IEtWTV9SRUdfU0laRV9VMzIgfCAweGI0KQogI2RlZmluZSBLVk1fUkVHX1BQQ19MUENSCShLVk1fUkVHX1BQQyB8IEtWTV9SRUdfU0laRV9VMzIgfCAweGI1KQpAQCAtNTU1LDYgKzU1NCw3IEBACiAjZGVmaW5lIEtWTV9SRUdfUFBDX0FSQ0hfQ09NUEFUCShLVk1fUkVHX1BQQyB8IEtWTV9SRUdfU0laRV9VMzIgfCAweGI3KQogCiAjZGVmaW5lIEtWTV9SRUdfUFBDX0RBQlJYCShLVk1fUkVHX1BQQyB8IEtWTV9SRUdfU0laRV9VMzIgfCAweGI4KQorI2RlZmluZSBLVk1fUkVHX1BQQ19XT1JUCShLVk1fUkVHX1BQQyB8IEtWTV9SRUdfU0laRV9VNjQgfCAweGI5KQogCiAvKiBUcmFuc2FjdGlvbmFsIE1lbW9yeSBjaGVja3BvaW50ZWQgc3RhdGU6CiAgKiBUaGlzIGlzIGFsbCBHUFJzLCBhbGwgVlNYIHJlZ3MgYW5kIGEgc3Vic2V0IG9mIFNQUnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oCmluZGV4IGUzYWYzMjguLjkxZTQyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaApAQCAtODIsMTAgKzgyLDE2IEBACiAKICNkZWZpbmUgS1ZNX0ZFQVRVUkVfTUFHSUNfUEFHRQkxCiAKKy8qIE1hZ2ljIHBhZ2UgZmxhZ3MgZnJvbSBob3N0IHRvIGd1ZXN0ICovCisKICNkZWZpbmUgS1ZNX01BR0lDX0ZFQVRfU1IJCSgxIDw8IDApCiAKIC8qIE1BU24sIEVTUiwgUElSLCBhbmQgaGlnaCBTUFJHcyAqLwogI2RlZmluZSBLVk1fTUFHSUNfRkVBVF9NQVMwX1RPX1NQUkc3CSgxIDw8IDEpCiAKKy8qIE1hZ2ljIHBhZ2UgZmxhZ3MgZnJvbSBndWVzdCB0byBob3N0ICovCisKKyNkZWZpbmUgTUFHSUNfUEFHRV9GTEFHX05PVF9NQVBQRURfTlgJKDEgPDwgMCkKKwogCiAjZW5kaWYgLyogX1VBUElfX1BPV0VSUENfS1ZNX1BBUkFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKaW5kZXggOTQ5MDhhZi4uMzRmNTU1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwpAQCAtMjUsMTQgKzI1LDEzIEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2VtdWxhdGVkX29wcy5oPgogI2luY2x1ZGUgPGFzbS9zd2l0Y2hfdG8uaD4KKyNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KIAogc3RydWN0IGFsaWduaW5mbyB7CiAJdW5zaWduZWQgY2hhciBsZW47CiAJdW5zaWduZWQgY2hhciBmbGFnczsKIH07CiAKLSNkZWZpbmUgSVNfWEZPUk0oaW5zdCkJKCgoaW5zdCkgPj4gMjYpID09IDMxKQotI2RlZmluZSBJU19EU0ZPUk0oaW5zdCkJKCgoaW5zdCkgPj4gMjYpID49IDU2KQogCiAjZGVmaW5lIElOVkFMSUQJeyAwLCAwIH0KIApAQCAtMTkyLDM3ICsxOTEsNiBAQAogfTsKIAogLyoKLSAqIENyZWF0ZSBhIERTSVNSIHZhbHVlIGZyb20gdGhlIGluc3RydWN0aW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWFrZV9kc2lzcih1bnNpZ25lZCBpbnN0cikKLXsKLQl1bnNpZ25lZCBkc2lzcjsKLQotCi0JLyogYml0cyAgNjoxNSAtLT4gMjI6MzEgKi8KLQlkc2lzciA9IChpbnN0ciAmIDB4MDNmZjAwMDApID4+IDE2OwotCi0JaWYgKElTX1hGT1JNKGluc3RyKSkgewotCQkvKiBiaXRzIDI5OjMwIC0tPiAxNToxNiAqLwotCQlkc2lzciB8PSAoaW5zdHIgJiAweDAwMDAwMDA2KSA8PCAxNDsKLQkJLyogYml0ICAgICAyNSAtLT4gICAgMTcgKi8KLQkJZHNpc3IgfD0gKGluc3RyICYgMHgwMDAwMDA0MCkgPDwgODsKLQkJLyogYml0cyAyMToyNCAtLT4gMTg6MjEgKi8KLQkJZHNpc3IgfD0gKGluc3RyICYgMHgwMDAwMDc4MCkgPDwgMzsKLQl9IGVsc2UgewotCQkvKiBiaXQgICAgICA1IC0tPiAgICAxNyAqLwotCQlkc2lzciB8PSAoaW5zdHIgJiAweDA0MDAwMDAwKSA+PiAxMjsKLQkJLyogYml0cyAgMTogNCAtLT4gMTg6MjEgKi8KLQkJZHNpc3IgfD0gKGluc3RyICYgMHg3ODAwMDAwMCkgPj4gMTc7Ci0JCS8qIGJpdHMgMzA6MzEgLS0+IDEyOjEzICovCi0JCWlmIChJU19EU0ZPUk0oaW5zdHIpKQotCQkJZHNpc3IgfD0gKGluc3RyICYgMHgwMDAwMDAwMykgPDwgMTg7Ci0JfQotCi0JcmV0dXJuIGRzaXNyOwotfQotCi0vKgogICogVGhlIGRjYnogKGRhdGEgY2FjaGUgYmxvY2sgemVybykgaW5zdHJ1Y3Rpb24KICAqIGdpdmVzIGFuIGFsaWdubWVudCBmYXVsdCBpZiB1c2VkIG9uIG5vbi1jYWNoZWFibGUKICAqIG1lbW9yeS4gIFdlIGhhbmRsZSB0aGUgZmF1bHQgbWFpbmx5IGZvciB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBkYmE4MTQwLi45M2UxNDY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC01NCw2ICs1NCw3IEBACiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19LVk0pICYmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1MpCiAjaW5jbHVkZSA8YXNtL2t2bV9ib29rM3MuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKQEAgLTQ0NSw3ICs0NDYsOSBAQAogCURFRklORShWQ1BVX1hFUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnhlcikpOwogCURFRklORShWQ1BVX0NUUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmN0cikpOwogCURFRklORShWQ1BVX0xSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gubHIpKTsKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szUwogCURFRklORShWQ1BVX1RBUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnRhcikpOworI2VuZGlmCiAJREVGSU5FKFZDUFVfQ1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5jcikpOwogCURFRklORShWQ1BVX1BDLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gucGMpKTsKICNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRQpAQCAtNDY3LDYgKzQ3MCw5IEBACiAJREVGSU5FKFZDUFVfU0hBUkVELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2hhcmVkKSk7CiAJREVGSU5FKFZDUFVfU0hBUkVEX01TUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1X2FyY2hfc2hhcmVkLCBtc3IpKTsKIAlERUZJTkUoVkNQVV9TSEFET1dfTVNSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2hhZG93X21zcikpOworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfNjQpICYmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfUFJfUE9TU0lCTEUpCisJREVGSU5FKFZDUFVfU0hBUkVEQkUsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFyZWRfYmlnX2VuZGlhbikpOworI2VuZGlmCiAKIAlERUZJTkUoVkNQVV9TSEFSRURfTUFTMCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1X2FyY2hfc2hhcmVkLCBtYXMwKSk7CiAJREVGSU5FKFZDUFVfU0hBUkVEX01BUzEsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdV9hcmNoX3NoYXJlZCwgbWFzMSkpOwpAQCAtNDkzLDcgKzQ5OSw2IEBACiAJREVGSU5FKFZDUFVfREFSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2hyZWdzLmRhcikpOwogCURFRklORShWQ1BVX1ZQQSwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnZwYS5waW5uZWRfYWRkcikpOwogCURFRklORShWQ1BVX1ZQQV9ESVJUWSwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnZwYS5kaXJ0eSkpOwotCURFRklORShWQ1BVX0lOVFJfTVNSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaW50cl9tc3IpKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTCiAJREVGSU5FKFZDUFVfVkNQVUlELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHZjcHVfaWQpKTsKQEAgLTUyOCwxMSArNTMzLDEzIEBACiAJREVGSU5FKFZDUFVfU0xCX05SLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2xiX25yKSk7CiAJREVGSU5FKFZDUFVfRkFVTFRfRFNJU1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5mYXVsdF9kc2lzcikpOwogCURFRklORShWQ1BVX0ZBVUxUX0RBUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmZhdWx0X2RhcikpOworCURFRklORShWQ1BVX0lOVFJfTVNSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaW50cl9tc3IpKTsKIAlERUZJTkUoVkNQVV9MQVNUX0lOU1QsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5sYXN0X2luc3QpKTsKIAlERUZJTkUoVkNQVV9UUkFQLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gudHJhcCkpOwogCURFRklORShWQ1BVX0NGQVIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5jZmFyKSk7CiAJREVGSU5FKFZDUFVfUFBSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gucHByKSk7CiAJREVGSU5FKFZDUFVfRlNDUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmZzY3IpKTsKKwlERUZJTkUoVkNQVV9TSEFET1dfRlNDUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNoYWRvd19mc2NyKSk7CiAJREVGSU5FKFZDUFVfUFNQQiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnBzcGIpKTsKIAlERUZJTkUoVkNQVV9FQkJIUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmViYmhyKSk7CiAJREVGSU5FKFZDUFVfRUJCUlIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5lYmJycikpOwpAQCAtNjE0LDYgKzYyMSw3IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJU1ZDUFVfRklFTEQoU1ZDUFVfU0xCLCBzbGIpOwogCVNWQ1BVX0ZJRUxEKFNWQ1BVX1NMQl9NQVgsIHNsYl9tYXgpOworCVNWQ1BVX0ZJRUxEKFNWQ1BVX1NIQURPV19GU0NSLCBzaGFkb3dfZnNjcik7CiAjZW5kaWYKIAogCUhTVEFURV9GSUVMRChIU1RBVEVfSE9TVF9SMSwgaG9zdF9yMSk7CkBAIC02NDksNiArNjU3LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogCUhTVEFURV9GSUVMRChIU1RBVEVfQ0ZBUiwgY2Zhcik7CiAJSFNUQVRFX0ZJRUxEKEhTVEFURV9QUFIsIHBwcik7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9IT1NUX0ZTQ1IsIGhvc3RfZnNjcik7CiAjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi8KIAogI2Vsc2UgLyogQ09ORklHX1BQQ19CT09LM1MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwppbmRleCAxOGQ3YzgwLi41MWRiYWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCkBAIC04MSw3ICs4MSw3IEBACiAJfQogCiAJYXRvbWljX2luYygmY3B1c19pbl9jcmFzaCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCS8qCiAJICogU3RhcnRpbmcgdGhlIGtkdW1wIGJvb3QuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VwYXByX3BhcmF2aXJ0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VwYXByX3BhcmF2aXJ0LmMKaW5kZXggNzg5OGJlOS4uZDliNzkzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lcGFwcl9wYXJhdmlydC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXBhcHJfcGFyYXZpcnQuYwpAQCAtNDcsOSArNDcsMTAgQEAKIAkJcmV0dXJuIC0xOwogCiAJZm9yIChpID0gMDsgaSA8IChsZW4gLyA0KTsgaSsrKSB7Ci0JCXBhdGNoX2luc3RydWN0aW9uKGVwYXByX2h5cGVyY2FsbF9zdGFydCArIGksIGluc3RzW2ldKTsKKwkJdTMyIGluc3QgPSBiZTMyX3RvX2NwdShpbnN0c1tpXSk7CisJCXBhdGNoX2luc3RydWN0aW9uKGVwYXByX2h5cGVyY2FsbF9zdGFydCArIGksIGluc3QpOwogI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szRV82NCkKLQkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZXBhcHJfZXZfaWRsZV9zdGFydCArIGksIGluc3RzW2ldKTsKKwkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZXBhcHJfZXZfaWRsZV9zdGFydCArIGksIGluc3QpOwogI2VuZGlmCiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2t2bS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rdm0uYwppbmRleCBkZDg2OTVmLi4zM2FhNGRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2t2bS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3ZtLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCXVsb25nIG91dFs4XTsKIAogCWluWzBdID0gS1ZNX01BR0lDX1BBR0U7Ci0JaW5bMV0gPSBLVk1fTUFHSUNfUEFHRTsKKwlpblsxXSA9IEtWTV9NQUdJQ19QQUdFIHwgTUFHSUNfUEFHRV9GTEFHX05PVF9NQVBQRURfTlg7CiAKIAllcGFwcl9oeXBlcmNhbGwoaW4sIG91dCwgS1ZNX0hDQUxMX1RPS0VOKEtWTV9IQ19QUENfTUFQX01BR0lDX1BBR0UpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwppbmRleCBhZDMwMmY4Li5kNmUxOTVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwpAQCAtOTgsNiArOTgsOSBAQAogLyoKICAqIDMgcGVyc2lzdGVudCBTTEJzIGFyZSByZWdpc3RlcmVkIGhlcmUuICBUaGUgYnVmZmVyIHdpbGwgYmUgemVybwogICogaW5pdGlhbGx5LCBoZW5jZSB3aWxsIGFsbCBiZSBpbnZhaWxkIHVudGlsIHdlIGFjdHVhbGx5IHdyaXRlIHRoZW0uCisgKgorICogSWYgeW91IG1ha2UgdGhlIG51bWJlciBvZiBwZXJzaXN0ZW50IFNMQiBlbnRyaWVzIGR5bmFtaWMsIHBsZWFzZSBhbHNvCisgKiB1cGRhdGUgUFIgS1ZNIHRvIGZsdXNoIGFuZCByZXN0b3JlIHRoZW0gYWNjb3JkaW5nbHkuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2xiX3NoYWRvdyAqc2xiX3NoYWRvdzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBkOTQ3NmMxLi4yNGQzNDJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMjAxLDI2ICsyMDEsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3NpemVfdCBwY2lfc2hvd19kZXZzcGVjKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JcGRldiA9IHRvX3BjaV9kZXYgKGRldik7Ci0JbnAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7Ci0JaWYgKG5wID09IE5VTEwgfHwgbnAtPmZ1bGxfbmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlcyIsIG5wLT5mdWxsX25hbWUpOwotfQotc3RhdGljIERFVklDRV9BVFRSKGRldnNwZWMsIFNfSVJVR08sIHBjaV9zaG93X2RldnNwZWMsIE5VTEwpOwotCi0vKiBBZGQgc3lzZnMgcHJvcGVydGllcyAqLwotaW50IHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZGV2c3BlYyk7Ci19Ci0KIC8qCiAgKiBSZWFkcyB0aGUgaW50ZXJydXB0IHBpbiB0byBkZXRlcm1pbmUgaWYgaW50ZXJydXB0IGlzIHVzZSBieSBjYXJkLgogICogSWYgdGhlIGludGVycnVwdCBpcyB1c2VkLCB0aGVuIGdldHMgdGhlIGludGVycnVwdCBsaW5lIGZyb20gdGhlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1ob3RwbHVnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1ob3RwbHVnLmMKaW5kZXggYzFlMTdhZS4uNWI3ODkxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktaG90cGx1Zy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWhvdHBsdWcuYwpAQCAtOTgsOCArOTgsNyBAQAogCQltYXggPSBidXMtPmJ1c25fcmVzLnN0YXJ0OwogCQlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8Ci0JCQkJICAgIGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpCisJCQkJaWYgKHBjaV9pc19icmlkZ2UoZGV2KSkKIAkJCQkJbWF4ID0gcGNpX3NjYW5fYnJpZGdlKGJ1cywgZGV2LAogCQkJCQkJCSAgICAgIG1heCwgcGFzcyk7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKaW5kZXggODNjMjZkOC4uMDU5ZTI0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYwpAQCAtMzYyLDggKzM2Miw3IEBACiAKIAkvKiBOb3cgc2NhbiBjaGlsZCBidXNzZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAotCQkgICAgZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykgeworCQlpZiAocGNpX2lzX2JyaWRnZShkZXYpKSB7CiAJCQlvZl9zY2FuX3BjaV9icmlkZ2UoZGV2KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IGUyYTQyMzIuLjEwZmZmZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtNzY2LDYgKzc2NiwyOCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAorLyogY3B1bWFzayBvZiBDUFVzIHdpdGggYXN5bWV0cmljIFNNVCBkZXBlbmRhbmN5ICovCitzdGF0aWMgY29uc3QgaW50IHBvd2VycGNfc210X2ZsYWdzKHZvaWQpCit7CisJaW50IGZsYWdzID0gU0RfU0hBUkVfQ1BVUE9XRVIgfCBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTOworCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0FTWU1fU01UKSkgeworCQlwcmludGtfb25jZShLRVJOX0lORk8gIkVuYWJsaW5nIEFzeW1tZXRyaWMgU01UIHNjaGVkdWxpbmdcbiIpOworCQlmbGFncyB8PSBTRF9BU1lNX1BBQ0tJTkc7CisJfQorCXJldHVybiBmbGFnczsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCBwb3dlcnBjX3RvcG9sb2d5W10gPSB7CisjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAorCXsgY3B1X3NtdF9tYXNrLCBwb3dlcnBjX3NtdF9mbGFncywgU0RfSU5JVF9OQU1FKFNNVCkgfSwKKyNlbmRpZgorCXsgY3B1X2NwdV9tYXNrLCBTRF9JTklUX05BTUUoRElFKSB9LAorCXsgTlVMTCwgfSwKK307CisKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCWNwdW1hc2tfdmFyX3Qgb2xkX21hc2s7CkBAIC03OTAsMTUgKzgxMiw4IEBACiAKIAlkdW1wX251bWFfY3B1X3RvcG9sb2d5KCk7CiAKLX0KKwlzZXRfc2NoZWRfdG9wb2xvZ3kocG93ZXJwY190b3BvbG9neSk7CiAKLWludCBhcmNoX3NkX3NpYmxpbmdfYXN5bV9wYWNraW5nKHZvaWQpCi17Ci0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0FTWU1fU01UKSkgewotCQlwcmludGtfb25jZShLRVJOX0lORk8gIkVuYWJsaW5nIEFzeW1tZXRyaWMgU01UIHNjaGVkdWxpbmdcbiIpOwotCQlyZXR1cm4gU0RfQVNZTV9QQUNLSU5HOwotCX0KLQlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCmluZGV4IDE0MWIyMDIuLmQ2YTUzYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTYsNyArNiw2IEBACiAKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKLQlkZXBlbmRzIG9uICFDUFVfTElUVExFX0VORElBTgogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuCiAJICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS4KQEAgLTc2LDYgKzc1LDcgQEAKIGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWCiAJdHJpc3RhdGUgIktWTSBzdXBwb3J0IGZvciBQT1dFUjcgYW5kIFBQQzk3MCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdCIKIAlkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQKKwlkZXBlbmRzIG9uICFDUFVfTElUVExFX0VORElBTgogCXNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCXNlbGVjdCBDTUEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCmluZGV4IDdhZjE5MGEuLmMyNTRjMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwpAQCAtODUsOSArODUsOSBAQAogCWlmIChpc19rdm1wcGNfaHZfZW5hYmxlZCh2Y3B1LT5rdm0pKQogCQlyZXR1cm47CiAJaWYgKHBlbmRpbmdfbm93KQotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+aW50X3BlbmRpbmcgPSAxOworCQlrdm1wcGNfc2V0X2ludF9wZW5kaW5nKHZjcHUsIDEpOwogCWVsc2UgaWYgKG9sZF9wZW5kaW5nKQotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+aW50X3BlbmRpbmcgPSAwOworCQlrdm1wcGNfc2V0X2ludF9wZW5kaW5nKHZjcHUsIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtcHBjX2NyaXRpY2FsX3NlY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtOTksMTEgKzk5LDExIEBACiAJaWYgKGlzX2t2bXBwY19odl9lbmFibGVkKHZjcHUtPmt2bSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWNyaXRfcmF3ID0gdmNwdS0+YXJjaC5zaGFyZWQtPmNyaXRpY2FsOworCWNyaXRfcmF3ID0ga3ZtcHBjX2dldF9jcml0aWNhbCh2Y3B1KTsKIAljcml0X3IxID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgMSk7CiAKIAkvKiBUcnVuY2F0ZSBjcml0IGluZGljYXRvcnMgaW4gMzIgYml0IG1vZGUgKi8KLQlpZiAoISh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1NGKSkgeworCWlmICghKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX1NGKSkgewogCQljcml0X3JhdyAmPSAweGZmZmZmZmZmOwogCQljcml0X3IxICY9IDB4ZmZmZmZmZmY7CiAJfQpAQCAtMTExLDE1ICsxMTEsMTUgQEAKIAkvKiBDcml0aWNhbCBzZWN0aW9uIHdoZW4gY3JpdCA9PSByMSAqLwogCWNyaXQgPSAoY3JpdF9yYXcgPT0gY3JpdF9yMSk7CiAJLyogLi4uIGFuZCB3ZSdyZSBpbiBzdXBlcnZpc29yIG1vZGUgKi8KLQljcml0ID0gY3JpdCAmJiAhKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpOworCWNyaXQgPSBjcml0ICYmICEoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpOwogCiAJcmV0dXJuIGNyaXQ7CiB9CiAKIHZvaWQga3ZtcHBjX2luamVjdF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjLCB1NjQgZmxhZ3MpCiB7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNycjAgPSBrdm1wcGNfZ2V0X3BjKHZjcHUpOwotCXZjcHUtPmFyY2guc2hhcmVkLT5zcnIxID0gdmNwdS0+YXJjaC5zaGFyZWQtPm1zciB8IGZsYWdzOworCWt2bXBwY19zZXRfc3JyMCh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpKTsKKwlrdm1wcGNfc2V0X3NycjEodmNwdSwga3ZtcHBjX2dldF9tc3IodmNwdSkgfCBmbGFncyk7CiAJa3ZtcHBjX3NldF9wYyh2Y3B1LCBrdm1wcGNfaW50ZXJydXB0X29mZnNldCh2Y3B1KSArIHZlYyk7CiAJdmNwdS0+YXJjaC5tbXUucmVzZXRfbXNyKHZjcHUpOwogfQpAQCAtMTQ1LDYgKzE0NSw3IEBACiAJY2FzZSAweGQwMDogcHJpbyA9IEJPT0szU19JUlFQUklPX0RFQlVHOwkJYnJlYWs7CiAJY2FzZSAweGYyMDogcHJpbyA9IEJPT0szU19JUlFQUklPX0FMVElWRUM7CQlicmVhazsKIAljYXNlIDB4ZjQwOiBwcmlvID0gQk9PSzNTX0lSUVBSSU9fVlNYOwkJCWJyZWFrOworCWNhc2UgMHhmNjA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19GQUNfVU5BVkFJTDsJCWJyZWFrOwogCWRlZmF1bHQ6ICAgIHByaW8gPSBCT09LM1NfSVJRUFJJT19NQVg7CQkJYnJlYWs7CiAJfQogCkBAIC0yMjUsMTIgKzIyNiwxMiBAQAogCiAJc3dpdGNoIChwcmlvcml0eSkgewogCWNhc2UgQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVI6Ci0JCWRlbGl2ZXIgPSAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9FRSkgJiYgIWNyaXQ7CisJCWRlbGl2ZXIgPSAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfRUUpICYmICFjcml0OwogCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSOwogCQlicmVhazsKIAljYXNlIEJPT0szU19JUlFQUklPX0VYVEVSTkFMOgogCWNhc2UgQk9PSzNTX0lSUVBSSU9fRVhURVJOQUxfTEVWRUw6Ci0JCWRlbGl2ZXIgPSAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9FRSkgJiYgIWNyaXQ7CisJCWRlbGl2ZXIgPSAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfRUUpICYmICFjcml0OwogCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMOwogCQlicmVhazsKIAljYXNlIEJPT0szU19JUlFQUklPX1NZU1RFTV9SRVNFVDoKQEAgLTI3NSw2ICsyNzYsOSBAQAogCWNhc2UgQk9PSzNTX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUjoKIAkJdmVjID0gQk9PSzNTX0lOVEVSUlVQVF9QRVJGTU9OOwogCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX0ZBQ19VTkFWQUlMOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0ZBQ19VTkFWQUlMOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZWxpdmVyID0gMDsKIAkJcHJpbnRrKEtFUk5fRVJSICJLVk06IFVua25vd24gaW50ZXJydXB0OiAweCV4XG4iLCBwcmlvcml0eSk7CkBAIC0zNDMsNyArMzQ3LDcgQEAKIHsKIAl1bG9uZyBtcF9wYSA9IHZjcHUtPmFyY2gubWFnaWNfcGFnZV9wYTsKIAotCWlmICghKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfU0YpKQorCWlmICghKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX1NGKSkKIAkJbXBfcGEgPSAodWludDMyX3QpbXBfcGE7CiAKIAkvKiBNYWdpYyBwYWdlIG92ZXJyaWRlICovCkBAIC0zNjcsNyArMzcxLDcgQEAKIHN0YXRpYyBpbnQga3ZtcHBjX3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZWFkZHIsIGJvb2wgZGF0YSwKIAkJCWJvb2wgaXN3cml0ZSwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSkKIHsKLQlpbnQgcmVsb2NhdGVkID0gKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiAoZGF0YSA/IE1TUl9EUiA6IE1TUl9JUikpOworCWludCByZWxvY2F0ZWQgPSAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiAoZGF0YSA/IE1TUl9EUiA6IE1TUl9JUikpOwogCWludCByOwogCiAJaWYgKHJlbG9jYXRlZCkgewpAQCAtNDk4LDE4ICs1MDIsMTggQEAKIAlyZWdzLT5jdHIgPSBrdm1wcGNfZ2V0X2N0cih2Y3B1KTsKIAlyZWdzLT5sciA9IGt2bXBwY19nZXRfbHIodmNwdSk7CiAJcmVncy0+eGVyID0ga3ZtcHBjX2dldF94ZXIodmNwdSk7Ci0JcmVncy0+bXNyID0gdmNwdS0+YXJjaC5zaGFyZWQtPm1zcjsKLQlyZWdzLT5zcnIwID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNycjA7Ci0JcmVncy0+c3JyMSA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcnIxOworCXJlZ3MtPm1zciA9IGt2bXBwY19nZXRfbXNyKHZjcHUpOworCXJlZ3MtPnNycjAgPSBrdm1wcGNfZ2V0X3NycjAodmNwdSk7CisJcmVncy0+c3JyMSA9IGt2bXBwY19nZXRfc3JyMSh2Y3B1KTsKIAlyZWdzLT5waWQgPSB2Y3B1LT5hcmNoLnBpZDsKLQlyZWdzLT5zcHJnMCA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMDsKLQlyZWdzLT5zcHJnMSA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMTsKLQlyZWdzLT5zcHJnMiA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMjsKLQlyZWdzLT5zcHJnMyA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMzsKLQlyZWdzLT5zcHJnNCA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnNDsKLQlyZWdzLT5zcHJnNSA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnNTsKLQlyZWdzLT5zcHJnNiA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnNjsKLQlyZWdzLT5zcHJnNyA9IHZjcHUtPmFyY2guc2hhcmVkLT5zcHJnNzsKKwlyZWdzLT5zcHJnMCA9IGt2bXBwY19nZXRfc3ByZzAodmNwdSk7CisJcmVncy0+c3ByZzEgPSBrdm1wcGNfZ2V0X3NwcmcxKHZjcHUpOworCXJlZ3MtPnNwcmcyID0ga3ZtcHBjX2dldF9zcHJnMih2Y3B1KTsKKwlyZWdzLT5zcHJnMyA9IGt2bXBwY19nZXRfc3ByZzModmNwdSk7CisJcmVncy0+c3ByZzQgPSBrdm1wcGNfZ2V0X3Nwcmc0KHZjcHUpOworCXJlZ3MtPnNwcmc1ID0ga3ZtcHBjX2dldF9zcHJnNSh2Y3B1KTsKKwlyZWdzLT5zcHJnNiA9IGt2bXBwY19nZXRfc3ByZzYodmNwdSk7CisJcmVncy0+c3ByZzcgPSBrdm1wcGNfZ2V0X3Nwcmc3KHZjcHUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncy0+Z3ByKTsgaSsrKQogCQlyZWdzLT5ncHJbaV0gPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBpKTsKQEAgLTUyNywxNiArNTMxLDE2IEBACiAJa3ZtcHBjX3NldF9scih2Y3B1LCByZWdzLT5scik7CiAJa3ZtcHBjX3NldF94ZXIodmNwdSwgcmVncy0+eGVyKTsKIAlrdm1wcGNfc2V0X21zcih2Y3B1LCByZWdzLT5tc3IpOwotCXZjcHUtPmFyY2guc2hhcmVkLT5zcnIwID0gcmVncy0+c3JyMDsKLQl2Y3B1LT5hcmNoLnNoYXJlZC0+c3JyMSA9IHJlZ3MtPnNycjE7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcwID0gcmVncy0+c3ByZzA7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcxID0gcmVncy0+c3ByZzE7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcyID0gcmVncy0+c3ByZzI7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmczID0gcmVncy0+c3ByZzM7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmc0ID0gcmVncy0+c3ByZzQ7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmc1ID0gcmVncy0+c3ByZzU7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmc2ID0gcmVncy0+c3ByZzY7Ci0JdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmc3ID0gcmVncy0+c3ByZzc7CisJa3ZtcHBjX3NldF9zcnIwKHZjcHUsIHJlZ3MtPnNycjApOworCWt2bXBwY19zZXRfc3JyMSh2Y3B1LCByZWdzLT5zcnIxKTsKKwlrdm1wcGNfc2V0X3NwcmcwKHZjcHUsIHJlZ3MtPnNwcmcwKTsKKwlrdm1wcGNfc2V0X3NwcmcxKHZjcHUsIHJlZ3MtPnNwcmcxKTsKKwlrdm1wcGNfc2V0X3NwcmcyKHZjcHUsIHJlZ3MtPnNwcmcyKTsKKwlrdm1wcGNfc2V0X3NwcmczKHZjcHUsIHJlZ3MtPnNwcmczKTsKKwlrdm1wcGNfc2V0X3Nwcmc0KHZjcHUsIHJlZ3MtPnNwcmc0KTsKKwlrdm1wcGNfc2V0X3Nwcmc1KHZjcHUsIHJlZ3MtPnNwcmc1KTsKKwlrdm1wcGNfc2V0X3Nwcmc2KHZjcHUsIHJlZ3MtPnNwcmc2KTsKKwlrdm1wcGNfc2V0X3Nwcmc3KHZjcHUsIHJlZ3MtPnNwcmc3KTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MtPmdwcik7IGkrKykKIAkJa3ZtcHBjX3NldF9ncHIodmNwdSwgaSwgcmVncy0+Z3ByW2ldKTsKQEAgLTU3MCwxMCArNTc0LDEwIEBACiAJCXIgPSAwOwogCQlzd2l0Y2ggKHJlZy0+aWQpIHsKIAkJY2FzZSBLVk1fUkVHX1BQQ19EQVI6Ci0JCQl2YWwgPSBnZXRfcmVnX3ZhbChyZWctPmlkLCB2Y3B1LT5hcmNoLnNoYXJlZC0+ZGFyKTsKKwkJCXZhbCA9IGdldF9yZWdfdmFsKHJlZy0+aWQsIGt2bXBwY19nZXRfZGFyKHZjcHUpKTsKIAkJCWJyZWFrOwogCQljYXNlIEtWTV9SRUdfUFBDX0RTSVNSOgotCQkJdmFsID0gZ2V0X3JlZ192YWwocmVnLT5pZCwgdmNwdS0+YXJjaC5zaGFyZWQtPmRzaXNyKTsKKwkJCXZhbCA9IGdldF9yZWdfdmFsKHJlZy0+aWQsIGt2bXBwY19nZXRfZHNpc3IodmNwdSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgS1ZNX1JFR19QUENfRlBSMCAuLi4gS1ZNX1JFR19QUENfRlBSMzE6CiAJCQlpID0gcmVnLT5pZCAtIEtWTV9SRUdfUFBDX0ZQUjA7CkBAIC02MjcsNiArNjMxLDIxIEBACiAJCQl2YWwgPSBnZXRfcmVnX3ZhbChyZWctPmlkLCBrdm1wcGNfeGljc19nZXRfaWNwKHZjcHUpKTsKIAkJCWJyZWFrOwogI2VuZGlmIC8qIENPTkZJR19LVk1fWElDUyAqLworCQljYXNlIEtWTV9SRUdfUFBDX0ZTQ1I6CisJCQl2YWwgPSBnZXRfcmVnX3ZhbChyZWctPmlkLCB2Y3B1LT5hcmNoLmZzY3IpOworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX1JFR19QUENfVEFSOgorCQkJdmFsID0gZ2V0X3JlZ192YWwocmVnLT5pZCwgdmNwdS0+YXJjaC50YXIpOworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX1JFR19QUENfRUJCSFI6CisJCQl2YWwgPSBnZXRfcmVnX3ZhbChyZWctPmlkLCB2Y3B1LT5hcmNoLmViYmhyKTsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9SRUdfUFBDX0VCQlJSOgorCQkJdmFsID0gZ2V0X3JlZ192YWwocmVnLT5pZCwgdmNwdS0+YXJjaC5lYmJycik7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fUkVHX1BQQ19CRVNDUjoKKwkJCXZhbCA9IGdldF9yZWdfdmFsKHJlZy0+aWQsIHZjcHUtPmFyY2guYmVzY3IpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwpAQCAtNjYwLDEwICs2NzksMTAgQEAKIAkJciA9IDA7CiAJCXN3aXRjaCAocmVnLT5pZCkgewogCQljYXNlIEtWTV9SRUdfUFBDX0RBUjoKLQkJCXZjcHUtPmFyY2guc2hhcmVkLT5kYXIgPSBzZXRfcmVnX3ZhbChyZWctPmlkLCB2YWwpOworCQkJa3ZtcHBjX3NldF9kYXIodmNwdSwgc2V0X3JlZ192YWwocmVnLT5pZCwgdmFsKSk7CiAJCQlicmVhazsKIAkJY2FzZSBLVk1fUkVHX1BQQ19EU0lTUjoKLQkJCXZjcHUtPmFyY2guc2hhcmVkLT5kc2lzciA9IHNldF9yZWdfdmFsKHJlZy0+aWQsIHZhbCk7CisJCQlrdm1wcGNfc2V0X2RzaXNyKHZjcHUsIHNldF9yZWdfdmFsKHJlZy0+aWQsIHZhbCkpOwogCQkJYnJlYWs7CiAJCWNhc2UgS1ZNX1JFR19QUENfRlBSMCAuLi4gS1ZNX1JFR19QUENfRlBSMzE6CiAJCQlpID0gcmVnLT5pZCAtIEtWTV9SRUdfUFBDX0ZQUjA7CkBAIC03MTYsNiArNzM1LDIxIEBACiAJCQkJCQlzZXRfcmVnX3ZhbChyZWctPmlkLCB2YWwpKTsKIAkJCWJyZWFrOwogI2VuZGlmIC8qIENPTkZJR19LVk1fWElDUyAqLworCQljYXNlIEtWTV9SRUdfUFBDX0ZTQ1I6CisJCQl2Y3B1LT5hcmNoLmZzY3IgPSBzZXRfcmVnX3ZhbChyZWctPmlkLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX1JFR19QUENfVEFSOgorCQkJdmNwdS0+YXJjaC50YXIgPSBzZXRfcmVnX3ZhbChyZWctPmlkLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX1JFR19QUENfRUJCSFI6CisJCQl2Y3B1LT5hcmNoLmViYmhyID0gc2V0X3JlZ192YWwocmVnLT5pZCwgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9SRUdfUFBDX0VCQlJSOgorCQkJdmNwdS0+YXJjaC5lYmJyciA9IHNldF9yZWdfdmFsKHJlZy0+aWQsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fUkVHX1BQQ19CRVNDUjoKKwkJCXZjcHUtPmFyY2guYmVzY3IgPSBzZXRfcmVnX3ZhbChyZWctPmlkLCB2YWwpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfMzJfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXUuYwppbmRleCA3NmE2NGNlLi45MzUwM2JiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXUuYwpAQCAtOTEsNyArOTEsNyBAQAogCiBzdGF0aWMgdTMyIGZpbmRfc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKLQlyZXR1cm4gdmNwdS0+YXJjaC5zaGFyZWQtPnNyWyhlYWRkciA+PiAyOCkgJiAweGZdOworCXJldHVybiBrdm1wcGNfZ2V0X3NyKHZjcHUsIChlYWRkciA+PiAyOCkgJiAweGYpOwogfQogCiBzdGF0aWMgdTY0IGt2bXBwY19tbXVfYm9vazNzXzMyX2VhX3RvX3ZwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIsCkBAIC0xMzEsNyArMTMxLDcgQEAKIAlwdGVnID0gKHZjcHVfYm9vazNzLT5zZHIxICYgMHhmZmZmMDAwMCkgfCBoYXNoOwogCiAJZHByaW50aygiTU1VOiBwYz0weCVseCBlYWRkcj0weCVseCBzZHIxPTB4JWxseCBwdGVnPTB4JXggdnNpZD0weCV4XG4iLAotCQlrdm1wcGNfZ2V0X3BjKCZ2Y3B1X2Jvb2szcy0+dmNwdSksIGVhZGRyLCB2Y3B1X2Jvb2szcy0+c2RyMSwgcHRlZywKKwkJa3ZtcHBjX2dldF9wYyh2Y3B1KSwgZWFkZHIsIHZjcHVfYm9vazNzLT5zZHIxLCBwdGVnLAogCQlzcl92c2lkKHNyZSkpOwogCiAJciA9IGdmbl90b19odmEodmNwdS0+a3ZtLCBwdGVnID4+IFBBR0VfU0hJRlQpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCWVsc2UKIAkJCWJhdCA9ICZ2Y3B1X2Jvb2szcy0+aWJhdFtpXTsKIAotCQlpZiAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikgeworCQlpZiAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpIHsKIAkJCWlmICghYmF0LT52cCkKIAkJCQljb250aW51ZTsKIAkJfSBlbHNlIHsKQEAgLTIwOCw2ICsyMDgsNyBAQAogCXUzMiBzcmU7CiAJaHZhX3QgcHRlZ3A7CiAJdTMyIHB0ZWdbMTZdOworCXUzMiBwdGUwLCBwdGUxOwogCXUzMiBwdGVtID0gMDsKIAlpbnQgaTsKIAlpbnQgZm91bmQgPSAwOwpAQCAtMjMzLDE0ICsyMzQsMTYgQEAKIAl9CiAKIAlmb3IgKGk9MDsgaTwxNjsgaSs9MikgewotCQlpZiAocHRlbSA9PSBwdGVnW2ldKSB7CisJCXB0ZTAgPSBiZTMyX3RvX2NwdShwdGVnW2ldKTsKKwkJcHRlMSA9IGJlMzJfdG9fY3B1KHB0ZWdbaSArIDFdKTsKKwkJaWYgKHB0ZW0gPT0gcHRlMCkgewogCQkJdTggcHA7CiAKLQkJCXB0ZS0+cmFkZHIgPSAocHRlZ1tpKzFdICYgfigweEZGRlVMTCkpIHwgKGVhZGRyICYgMHhGRkYpOwotCQkJcHAgPSBwdGVnW2krMV0gJiAzOworCQkJcHRlLT5yYWRkciA9IChwdGUxICYgfigweEZGRlVMTCkpIHwgKGVhZGRyICYgMHhGRkYpOworCQkJcHAgPSBwdGUxICYgMzsKIAotCQkJaWYgKChzcl9rcChzcmUpICYmICAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikpIHx8Ci0JCQkgICAgKHNyX2tzKHNyZSkgJiYgISh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1BSKSkpCisJCQlpZiAoKHNyX2twKHNyZSkgJiYgIChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikpIHx8CisJCQkgICAgKHNyX2tzKHNyZSkgJiYgIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikpKQogCQkJCXBwIHw9IDQ7CiAKIAkJCXB0ZS0+bWF5X3dyaXRlID0gZmFsc2U7CkBAIC0yNjAsNyArMjYzLDcgQEAKIAkJCX0KIAogCQkJZHByaW50a19wdGUoIk1NVTogRm91bmQgUFRFIC0+ICV4ICV4IC0gJXhcbiIsCi0JCQkJICAgIHB0ZWdbaV0sIHB0ZWdbaSsxXSwgcHApOworCQkJCSAgICBwdGUwLCBwdGUxLCBwcCk7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtMjY5LDggKzI3Miw4IEBACiAJLyogVXBkYXRlIFBURSBDIGFuZCBBIGJpdHMsIHNvIHRoZSBndWVzdCdzIHN3YXBwZXIga25vd3Mgd2UgdXNlZCB0aGUKIAkgICBwYWdlICovCiAJaWYgKGZvdW5kKSB7Ci0JCXUzMiBwdGVfciA9IHB0ZWdbaSsxXTsKLQkJY2hhciBfX3VzZXIgKmFkZHIgPSAoY2hhciBfX3VzZXIgKikgJnB0ZWdbaSsxXTsKKwkJdTMyIHB0ZV9yID0gcHRlMTsKKwkJY2hhciBfX3VzZXIgKmFkZHIgPSAoY2hhciBfX3VzZXIgKikgKHB0ZWdwICsgKGkrMSkgKiBzaXplb2YodTMyKSk7CiAKIAkJLyoKIAkJICogVXNlIHNpbmdsZS1ieXRlIHdyaXRlcyB0byB1cGRhdGUgdGhlIEhQVEUsIHRvCkBAIC0yOTYsNyArMjk5LDggQEAKIAkJCSAgICB0b19ib29rM3ModmNwdSktPnNkcjEsIHB0ZWdwKTsKIAkJZm9yIChpPTA7IGk8MTY7IGkrPTIpIHsKIAkJCWRwcmludGtfcHRlKCIgICAlMDJkOiAweCV4IC0gMHgleCAoMHgleClcbiIsCi0JCQkJICAgIGksIHB0ZWdbaV0sIHB0ZWdbaSsxXSwgcHRlbSk7CisJCQkJICAgIGksIGJlMzJfdG9fY3B1KHB0ZWdbaV0pLAorCQkJCSAgICBiZTMyX3RvX2NwdShwdGVnW2krMV0pLCBwdGVtKTsKIAkJfQogCX0KIApAQCAtMzE2LDcgKzMyMCw3IEBACiAJLyogTWFnaWMgcGFnZSBvdmVycmlkZSAqLwogCWlmICh1bmxpa2VseShtcF9lYSkgJiYKIAkgICAgdW5saWtlbHkoKGVhZGRyICYgfjB4ZmZmVUxMKSA9PSAobXBfZWEgJiB+MHhmZmZVTEwpKSAmJgotCSAgICAhKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpKSB7CisJICAgICEoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpKSB7CiAJCXB0ZS0+dnBhZ2UgPSBrdm1wcGNfbW11X2Jvb2szc18zMl9lYV90b192cCh2Y3B1LCBlYWRkciwgZGF0YSk7CiAJCXB0ZS0+cmFkZHIgPSB2Y3B1LT5hcmNoLm1hZ2ljX3BhZ2VfcGEgfCAocHRlLT5yYWRkciAmIDB4ZmZmKTsKIAkJcHRlLT5yYWRkciAmPSBLVk1fUEFNOwpAQCAtMzQxLDEzICszNDUsMTMgQEAKIAogc3RhdGljIHUzMiBrdm1wcGNfbW11X2Jvb2szc18zMl9tZnNyaW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc3JudW0pCiB7Ci0JcmV0dXJuIHZjcHUtPmFyY2guc2hhcmVkLT5zcltzcm51bV07CisJcmV0dXJuIGt2bXBwY19nZXRfc3IodmNwdSwgc3JudW0pOwogfQogCiBzdGF0aWMgdm9pZCBrdm1wcGNfbW11X2Jvb2szc18zMl9tdHNyaW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc3JudW0sCiAJCQkJCXVsb25nIHZhbHVlKQogewotCXZjcHUtPmFyY2guc2hhcmVkLT5zcltzcm51bV0gPSB2YWx1ZTsKKwlrdm1wcGNfc2V0X3NyKHZjcHUsIHNybnVtLCB2YWx1ZSk7CiAJa3ZtcHBjX21tdV9tYXBfc2VnbWVudCh2Y3B1LCBzcm51bSA8PCBTSURfU0hJRlQpOwogfQogCkBAIC0zNjcsOCArMzcxLDkgQEAKIAl1bG9uZyBlYSA9IGVzaWQgPDwgU0lEX1NISUZUOwogCXUzMiBzcjsKIAl1NjQgZ3ZzaWQgPSBlc2lkOworCXU2NCBtc3IgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KTsKIAotCWlmICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgKE1TUl9EUnxNU1JfSVIpKSB7CisJaWYgKG1zciAmIChNU1JfRFJ8TVNSX0lSKSkgewogCQlzciA9IGZpbmRfc3IodmNwdSwgZWEpOwogCQlpZiAoc3JfdmFsaWQoc3IpKQogCQkJZ3ZzaWQgPSBzcl92c2lkKHNyKTsKQEAgLTM3Nyw3ICszODIsNyBAQAogCS8qIEluIGNhc2Ugd2Ugb25seSBoYXZlIG9uZSBvZiBNU1JfSVIgb3IgTVNSX0RSIHNldCwgbGV0J3MgcHV0CiAJICAgdGhhdCBpbiB0aGUgcmVhbC1tb2RlIGNvbnRleHQgKGFuZCBob3BlIFJNIGRvZXNuJ3QgYWNjZXNzCiAJICAgaGlnaCBtZW1vcnkpICovCi0Jc3dpdGNoICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgKE1TUl9EUnxNU1JfSVIpKSB7CisJc3dpdGNoIChtc3IgJiAoTVNSX0RSfE1TUl9JUikpIHsKIAljYXNlIDA6CiAJCSp2c2lkID0gVlNJRF9SRUFMIHwgZXNpZDsKIAkJYnJlYWs7CkBAIC0zOTcsNyArNDAyLDcgQEAKIAkJQlVHKCk7CiAJfQogCi0JaWYgKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpCisJaWYgKG1zciAmIE1TUl9QUikKIAkJKnZzaWQgfD0gVlNJRF9QUjsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfMzJfbW11X2hvc3QuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzMyX21tdV9ob3N0LmMKaW5kZXggNWZhYzg5ZC4uNjc4ZTc1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfMzJfbW11X2hvc3QuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc18zMl9tbXVfaG9zdC5jCkBAIC05Miw3ICs5Miw3IEBACiAJc3RydWN0IGt2bXBwY19zaWRfbWFwICptYXA7CiAJdTE2IHNpZF9tYXBfbWFzazsKIAotCWlmICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1BSKQorCWlmIChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikKIAkJZ3ZzaWQgfD0gVlNJRF9QUjsKIAogCXNpZF9tYXBfbWFzayA9IGt2bXBwY19zaWRfaGFzaCh2Y3B1LCBndnNpZCk7CkBAIC0yNzksNyArMjc5LDcgQEAKIAl1MTYgc2lkX21hcF9tYXNrOwogCXN0YXRpYyBpbnQgYmFja3dhcmRzX21hcCA9IDA7CiAKLQlpZiAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikKKwlpZiAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpCiAJCWd2c2lkIHw9IFZTSURfUFI7CiAKIAkvKiBXZSBtaWdodCBnZXQgY29sbGlzaW9ucyB0aGF0IHRyYXAgaW4gcHJlY2VkaW5nIG9yZGVyLCBzbyBsZXQncwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwppbmRleCA4M2RhMWY4Li43NzRhMjUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwpAQCAtMzgsNyArMzgsNyBAQAogCiBzdGF0aWMgdm9pZCBrdm1wcGNfbW11X2Jvb2szc182NF9yZXNldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bXBwY19zZXRfbXNyKHZjcHUsIE1TUl9TRik7CisJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5pbnRyX21zcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX3NsYiAqa3ZtcHBjX21tdV9ib29rM3NfNjRfZmluZF9zbGJlKApAQCAtMjI2LDcgKzIyNiw3IEBACiAJLyogTWFnaWMgcGFnZSBvdmVycmlkZSAqLwogCWlmICh1bmxpa2VseShtcF9lYSkgJiYKIAkgICAgdW5saWtlbHkoKGVhZGRyICYgfjB4ZmZmVUxMKSA9PSAobXBfZWEgJiB+MHhmZmZVTEwpKSAmJgotCSAgICAhKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpKSB7CisJICAgICEoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpKSB7CiAJCWdwdGUtPmVhZGRyID0gZWFkZHI7CiAJCWdwdGUtPnZwYWdlID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfZWFfdG9fdnAodmNwdSwgZWFkZHIsIGRhdGEpOwogCQlncHRlLT5yYWRkciA9IHZjcHUtPmFyY2gubWFnaWNfcGFnZV9wYSB8IChncHRlLT5yYWRkciAmIDB4ZmZmKTsKQEAgLTI2OSwxOCArMjY5LDIxIEBACiAJCWdvdG8gbm9fcGFnZV9mb3VuZDsKIAl9CiAKLQlpZiAoKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpICYmIHNsYmUtPktwKQorCWlmICgoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpICYmIHNsYmUtPktwKQogCQlrZXkgPSA0OwotCWVsc2UgaWYgKCEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikgJiYgc2xiZS0+S3MpCisJZWxzZSBpZiAoIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikgJiYgc2xiZS0+S3MpCiAJCWtleSA9IDQ7CiAKIAlmb3IgKGk9MDsgaTwxNjsgaSs9MikgeworCQl1NjQgcHRlMCA9IGJlNjRfdG9fY3B1KHB0ZWdbaV0pOworCQl1NjQgcHRlMSA9IGJlNjRfdG9fY3B1KHB0ZWdbaSArIDFdKTsKKwogCQkvKiBDaGVjayBhbGwgcmVsZXZhbnQgZmllbGRzIG9mIDFzdCBkd29yZCAqLwotCQlpZiAoKHB0ZWdbaV0gJiB2X21hc2spID09IHZfdmFsKSB7CisJCWlmICgocHRlMCAmIHZfbWFzaykgPT0gdl92YWwpIHsKIAkJCS8qIElmIGxhcmdlIHBhZ2UgYml0IGlzIHNldCwgY2hlY2sgcGdzaXplIGVuY29kaW5nICovCiAJCQlpZiAoc2xiZS0+bGFyZ2UgJiYKIAkJCSAgICAodmNwdS0+YXJjaC5oZmxhZ3MgJiBCT09LM1NfSEZMQUdfTVVMVElfUEdTSVpFKSkgewotCQkJCXBnc2l6ZSA9IGRlY29kZV9wYWdlc2l6ZShzbGJlLCBwdGVnW2krMV0pOworCQkJCXBnc2l6ZSA9IGRlY29kZV9wYWdlc2l6ZShzbGJlLCBwdGUxKTsKIAkJCQlpZiAocGdzaXplIDwgMCkKIAkJCQkJY29udGludWU7CiAJCQl9CkBAIC0yOTcsOCArMzAwLDggQEAKIAkJZ290byBkb19zZWNvbmQ7CiAJfQogCi0JdiA9IHB0ZWdbaV07Ci0JciA9IHB0ZWdbaSsxXTsKKwl2ID0gYmU2NF90b19jcHUocHRlZ1tpXSk7CisJciA9IGJlNjRfdG9fY3B1KHB0ZWdbaSsxXSk7CiAJcHAgPSAociAmIEhQVEVfUl9QUCkgfCBrZXk7CiAJaWYgKHIgJiBIUFRFX1JfUFAwKQogCQlwcCB8PSA4OwpAQCAtMzEwLDYgKzMxMyw5IEBACiAJZ3B0ZS0+cmFkZHIgPSAociAmIEhQVEVfUl9SUE4gJiB+ZWFkZHJfbWFzaykgfCAoZWFkZHIgJiBlYWRkcl9tYXNrKTsKIAlncHRlLT5wYWdlX3NpemUgPSBwZ3NpemU7CiAJZ3B0ZS0+bWF5X2V4ZWN1dGUgPSAoKHIgJiBIUFRFX1JfTikgPyBmYWxzZSA6IHRydWUpOworCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLmRpc2FibGVfa2VybmVsX254KSAmJgorCSAgICAhKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX1BSKSkKKwkJZ3B0ZS0+bWF5X2V4ZWN1dGUgPSB0cnVlOwogCWdwdGUtPm1heV9yZWFkID0gZmFsc2U7CiAJZ3B0ZS0+bWF5X3dyaXRlID0gZmFsc2U7CiAKQEAgLTM0MiwxNCArMzQ4LDE0IEBACiAJCSAqIG5vbi1QQVBSIHBsYXRmb3JtcyBzdWNoIGFzIG1hYzk5LCBhbmQgdGhpcyBpcwogCQkgKiB3aGF0IHJlYWwgaGFyZHdhcmUgZG9lcy4KIAkJICovCi0JCWNoYXIgX191c2VyICphZGRyID0gKGNoYXIgX191c2VyICopICZwdGVnW2krMV07CisgICAgICAgICAgICAgICAgY2hhciBfX3VzZXIgKmFkZHIgPSAoY2hhciBfX3VzZXIgKikgKHB0ZWdwICsgKGkgKyAxKSAqIHNpemVvZih1NjQpKTsKIAkJciB8PSBIUFRFX1JfUjsKIAkJcHV0X3VzZXIociA+PiA4LCBhZGRyICsgNik7CiAJfQogCWlmIChpc3dyaXRlICYmIGdwdGUtPm1heV93cml0ZSAmJiAhKHIgJiBIUFRFX1JfQykpIHsKIAkJLyogU2V0IHRoZSBkaXJ0eSBmbGFnICovCiAJCS8qIFVzZSBhIHNpbmdsZSBieXRlIHdyaXRlICovCi0JCWNoYXIgX191c2VyICphZGRyID0gKGNoYXIgX191c2VyICopICZwdGVnW2krMV07CisgICAgICAgICAgICAgICAgY2hhciBfX3VzZXIgKmFkZHIgPSAoY2hhciBfX3VzZXIgKikgKHB0ZWdwICsgKGkgKyAxKSAqIHNpemVvZih1NjQpKTsKIAkJciB8PSBIUFRFX1JfQzsKIAkJcHV0X3VzZXIociwgYWRkciArIDcpOwogCX0KQEAgLTQ3OSw3ICs0ODUsNyBAQAogCQl2Y3B1LT5hcmNoLnNsYltpXS5vcmlndiA9IDA7CiAJfQogCi0JaWYgKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfSVIpIHsKKwlpZiAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfSVIpIHsKIAkJa3ZtcHBjX21tdV9mbHVzaF9zZWdtZW50cyh2Y3B1KTsKIAkJa3ZtcHBjX21tdV9tYXBfc2VnbWVudCh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpKTsKIAl9CkBAIC01NjMsNyArNTY5LDcgQEAKIHsKIAl1bG9uZyBtcF9lYSA9IHZjcHUtPmFyY2gubWFnaWNfcGFnZV9lYTsKIAotCXJldHVybiBtcF9lYSAmJiAhKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpICYmCisJcmV0dXJuIG1wX2VhICYmICEoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpICYmCiAJCShtcF9lYSA+PiBTSURfU0hJRlQpID09IGVzaWQ7CiB9CiAjZW5kaWYKQEAgLTU3Niw4ICs1ODIsOSBAQAogCXU2NCBndnNpZCA9IGVzaWQ7CiAJdWxvbmcgbXBfZWEgPSB2Y3B1LT5hcmNoLm1hZ2ljX3BhZ2VfZWE7CiAJaW50IHBhZ2VzaXplID0gTU1VX1BBR0VfNjRLOworCXU2NCBtc3IgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KTsKIAotCWlmICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgKE1TUl9EUnxNU1JfSVIpKSB7CisJaWYgKG1zciAmIChNU1JfRFJ8TVNSX0lSKSkgewogCQlzbGIgPSBrdm1wcGNfbW11X2Jvb2szc182NF9maW5kX3NsYmUodmNwdSwgZWEpOwogCQlpZiAoc2xiKSB7CiAJCQlndnNpZCA9IHNsYi0+dnNpZDsKQEAgLTU5MCw3ICs1OTcsNyBAQAogCQl9CiAJfQogCi0Jc3dpdGNoICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgKE1TUl9EUnxNU1JfSVIpKSB7CisJc3dpdGNoIChtc3IgJiAoTVNSX0RSfE1TUl9JUikpIHsKIAljYXNlIDA6CiAJCWd2c2lkID0gVlNJRF9SRUFMIHwgZXNpZDsKIAkJYnJlYWs7CkBAIC02MjMsNyArNjMwLDcgQEAKIAkJZ3ZzaWQgfD0gVlNJRF82NEs7CiAjZW5kaWYKIAotCWlmICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1BSKQorCWlmIChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikKIAkJZ3ZzaWQgfD0gVlNJRF9QUjsKIAogCSp2c2lkID0gZ3ZzaWQ7CkBAIC02MzMsNyArNjQwLDcgQEAKIAkvKiBDYXRjaCBtYWdpYyBwYWdlIGNhc2UgKi8KIAlpZiAodW5saWtlbHkobXBfZWEpICYmCiAJICAgIHVubGlrZWx5KGVzaWQgPT0gKG1wX2VhID4+IFNJRF9TSElGVCkpICYmCi0JICAgICEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikpIHsKKwkgICAgIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikpIHsKIAkJKnZzaWQgPSBWU0lEX1JFQUwgfCBlc2lkOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaG9zdC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2hvc3QuYwppbmRleCAwZDUxM2FmLi4wYWM5ODM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaG9zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9ob3N0LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAlzdHJ1Y3Qga3ZtcHBjX3NpZF9tYXAgKm1hcDsKIAl1MTYgc2lkX21hcF9tYXNrOwogCi0JaWYgKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpCisJaWYgKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX1BSKQogCQlndnNpZCB8PSBWU0lEX1BSOwogCiAJc2lkX21hcF9tYXNrID0ga3ZtcHBjX3NpZF9oYXNoKHZjcHUsIGd2c2lkKTsKQEAgLTIzMCw3ICsyMzAsNyBAQAogCXUxNiBzaWRfbWFwX21hc2s7CiAJc3RhdGljIGludCBiYWNrd2FyZHNfbWFwID0gMDsKIAotCWlmICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1BSKQorCWlmIChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikKIAkJZ3ZzaWQgfD0gVlNJRF9QUjsKIAogCS8qIFdlIG1pZ2h0IGdldCBjb2xsaXNpb25zIHRoYXQgdHJhcCBpbiBwcmVjZWRpbmcgb3JkZXIsIHNvIGxldCdzCkBAIC0yNzEsMTEgKzI3MSw4IEBACiAJaW50IGZvdW5kX2ludmFsID0gLTE7CiAJaW50IHI7CiAKLQlpZiAoIXN2Y3B1LT5zbGJfbWF4KQotCQlzdmNwdS0+c2xiX21heCA9IDE7Ci0KIAkvKiBBcmUgd2Ugb3ZlcndyaXRpbmc/ICovCi0JZm9yIChpID0gMTsgaSA8IHN2Y3B1LT5zbGJfbWF4OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc3ZjcHUtPnNsYl9tYXg7IGkrKykgewogCQlpZiAoIShzdmNwdS0+c2xiW2ldLmVzaWQgJiBTTEJfRVNJRF9WKSkKIAkJCWZvdW5kX2ludmFsID0gaTsKIAkJZWxzZSBpZiAoKHN2Y3B1LT5zbGJbaV0uZXNpZCAmIEVTSURfTUFTSykgPT0gZXNpZCkgewpAQCAtMjg1LDcgKzI4Miw3IEBACiAJfQogCiAJLyogRm91bmQgYSBzcGFyZSBlbnRyeSB0aGF0IHdhcyBpbnZhbGlkYXRlZCBiZWZvcmUgKi8KLQlpZiAoZm91bmRfaW52YWwgPiAwKSB7CisJaWYgKGZvdW5kX2ludmFsID49IDApIHsKIAkJciA9IGZvdW5kX2ludmFsOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zNTksNyArMzU2LDcgQEAKIAl1bG9uZyBzZWdfbWFzayA9IC1zZWdfc2l6ZTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDE7IGkgPCBzdmNwdS0+c2xiX21heDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHN2Y3B1LT5zbGJfbWF4OyBpKyspIHsKIAkJaWYgKChzdmNwdS0+c2xiW2ldLmVzaWQgJiBTTEJfRVNJRF9WKSAmJgogCQkgICAgKHN2Y3B1LT5zbGJbaV0uZXNpZCAmIHNlZ19tYXNrKSA9PSBlYSkgewogCQkJLyogSW52YWxpZGF0ZSB0aGlzIGVudHJ5ICovCkBAIC0zNzMsNyArMzcwLDcgQEAKIHZvaWQga3ZtcHBjX21tdV9mbHVzaF9zZWdtZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bXBwY19ib29rM3Nfc2hhZG93X3ZjcHUgKnN2Y3B1ID0gc3ZjcHVfZ2V0KHZjcHUpOwotCXN2Y3B1LT5zbGJfbWF4ID0gMTsKKwlzdmNwdS0+c2xiX21heCA9IDA7CiAJc3ZjcHUtPnNsYlswXS5lc2lkID0gMDsKIAlzdmNwdV9wdXQoc3ZjcHUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYwppbmRleCBmYjI1ZWJjLi44MDU2MTA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYwpAQCAtNTIsNyArNTIsNyBAQAogCiBsb25nIGt2bXBwY19hbGxvY19ocHQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgKmh0YWJfb3JkZXJwKQogewotCXVuc2lnbmVkIGxvbmcgaHB0OworCXVuc2lnbmVkIGxvbmcgaHB0ID0gMDsKIAlzdHJ1Y3QgcmV2bWFwX2VudHJ5ICpyZXY7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCWxvbmcgb3JkZXIgPSBLVk1fREVGQVVMVF9IUFRfT1JERVI7CkBAIC02NCwyMiArNjQsMTEgQEAKIAl9CiAKIAlrdm0tPmFyY2guaHB0X2NtYV9hbGxvYyA9IDA7Ci0JLyoKLQkgKiB0cnkgZmlyc3QgdG8gYWxsb2NhdGUgaXQgZnJvbSB0aGUga2VybmVsIHBhZ2UgYWxsb2NhdG9yLgotCSAqIFdlIGtlZXAgdGhlIENNQSByZXNlcnZlZCBmb3IgZmFpbGVkIGFsbG9jYXRpb24uCi0JICovCi0JaHB0ID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1JFUEVBVCB8Ci0JCQkgICAgICAgX19HRlBfTk9XQVJOLCBvcmRlciAtIFBBR0VfU0hJRlQpOwotCi0JLyogTmV4dCB0cnkgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcHJlYWxsb2NhdGVkIHBvb2wgKi8KLQlpZiAoIWhwdCkgewotCQlWTV9CVUdfT04ob3JkZXIgPCBLVk1fQ01BX0NIVU5LX09SREVSKTsKLQkJcGFnZSA9IGt2bV9hbGxvY19ocHQoMSA8PCAob3JkZXIgLSBQQUdFX1NISUZUKSk7Ci0JCWlmIChwYWdlKSB7Ci0JCQlocHQgPSAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIocGFnZV90b19wZm4ocGFnZSkpOwotCQkJa3ZtLT5hcmNoLmhwdF9jbWFfYWxsb2MgPSAxOwotCQl9IGVsc2UKLQkJCS0tb3JkZXI7CisJVk1fQlVHX09OKG9yZGVyIDwgS1ZNX0NNQV9DSFVOS19PUkRFUik7CisJcGFnZSA9IGt2bV9hbGxvY19ocHQoMSA8PCAob3JkZXIgLSBQQUdFX1NISUZUKSk7CisJaWYgKHBhZ2UpIHsKKwkJaHB0ID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwkJa3ZtLT5hcmNoLmhwdF9jbWFfYWxsb2MgPSAxOwogCX0KIAogCS8qIExhc3RseSB0cnkgc3VjY2Vzc2l2ZWx5IHNtYWxsZXIgc2l6ZXMgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IgKi8KQEAgLTU5Niw2ICs1ODUsNyBAQAogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKIAl1bnNpZ25lZCBsb25nICpocHRlcCwgaHB0ZVszXSwgcjsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXEsIHBzaXplLCBwdGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGdwYV9iYXNlLCBnZm5fYmFzZTsKIAl1bnNpZ25lZCBsb25nIGdwYSwgZ2ZuLCBodmEsIHBmbjsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwogCXVuc2lnbmVkIGxvbmcgKnJtYXA7CkBAIC02MzQsNyArNjI0LDkgQEAKIAogCS8qIFRyYW5zbGF0ZSB0aGUgbG9naWNhbCBhZGRyZXNzIGFuZCBnZXQgdGhlIHBhZ2UgKi8KIAlwc2l6ZSA9IGhwdGVfcGFnZV9zaXplKGhwdGVbMF0sIHIpOwotCWdwYSA9IChyICYgSFBURV9SX1JQTiAmIH4ocHNpemUgLSAxKSkgfCAoZWEgJiAocHNpemUgLSAxKSk7CisJZ3BhX2Jhc2UgPSByICYgSFBURV9SX1JQTiAmIH4ocHNpemUgLSAxKTsKKwlnZm5fYmFzZSA9IGdwYV9iYXNlID4+IFBBR0VfU0hJRlQ7CisJZ3BhID0gZ3BhX2Jhc2UgfCAoZWEgJiAocHNpemUgLSAxKSk7CiAJZ2ZuID0gZ3BhID4+IFBBR0VfU0hJRlQ7CiAJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKTsKIApAQCAtNjQ2LDYgKzYzOCwxMyBAQAogCWlmICgha3ZtLT5hcmNoLnVzaW5nX21tdV9ub3RpZmllcnMpCiAJCXJldHVybiAtRUZBVUxUOwkJLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCiAKKwkvKgorCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYmVjYXVzZSBvZiB0aGUgc2xvdF9pc19hbGlnbmVkKCkKKwkgKiBjaGVjayBpbiBrdm1wcGNfZG9faF9lbnRlcigpLgorCSAqLworCWlmIChnZm5fYmFzZSA8IG1lbXNsb3QtPmJhc2VfZ2ZuKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCS8qIHVzZWQgdG8gY2hlY2sgZm9yIGludmFsaWRhdGlvbnMgaW4gcHJvZ3Jlc3MgKi8KIAltbXVfc2VxID0ga3ZtLT5tbXVfbm90aWZpZXJfc2VxOwogCXNtcF9ybWIoKTsKQEAgLTczOCw3ICs3MzcsOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJaHB0ZVswXSA9IChocHRlWzBdICYgfkhQVEVfVl9BQlNFTlQpIHwgSFBURV9WX1ZBTElEOwogCi0Jcm1hcCA9ICZtZW1zbG90LT5hcmNoLnJtYXBbZ2ZuIC0gbWVtc2xvdC0+YmFzZV9nZm5dOworCS8qIEFsd2F5cyBwdXQgdGhlIEhQVEUgaW4gdGhlIHJtYXAgY2hhaW4gZm9yIHRoZSBwYWdlIGJhc2UgYWRkcmVzcyAqLworCXJtYXAgPSAmbWVtc2xvdC0+YXJjaC5ybWFwW2dmbl9iYXNlIC0gbWVtc2xvdC0+YmFzZV9nZm5dOwogCWxvY2tfcm1hcChybWFwKTsKIAogCS8qIENoZWNrIGlmIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZhbGlkYXRlZDsgbGV0IHRoZSBndWVzdCByZXRyeSBpZiBzbyAqLwpAQCAtMTA2MCwyMiArMTA2MCwzMyBAQAogCWt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCBrdm1fdW5tYXBfcm1hcHApOwogfQogCi1zdGF0aWMgaW50IGt2bV90ZXN0X2NsZWFyX2RpcnR5KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApCitzdGF0aWMgaW50IHZjcHVzX3J1bm5pbmcoc3RydWN0IGt2bSAqa3ZtKQoreworCXJldHVybiBhdG9taWNfcmVhZCgma3ZtLT5hcmNoLnZjcHVzX3J1bm5pbmcpICE9IDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3lzdGVtIHBhZ2VzIHRoYXQgYXJlIGRpcnR5LgorICogVGhpcyBjYW4gYmUgbW9yZSB0aGFuIDEgaWYgd2UgZmluZCBhIGh1Z2UtcGFnZSBIUFRFLgorICovCitzdGF0aWMgaW50IGt2bV90ZXN0X2NsZWFyX2RpcnR5X25wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQogewogCXN0cnVjdCByZXZtYXBfZW50cnkgKnJldiA9IGt2bS0+YXJjaC5yZXZtYXA7CiAJdW5zaWduZWQgbG9uZyBoZWFkLCBpLCBqOworCXVuc2lnbmVkIGxvbmcgbjsKKwl1bnNpZ25lZCBsb25nIHYsIHI7CiAJdW5zaWduZWQgbG9uZyAqaHB0ZXA7Ci0JaW50IHJldCA9IDA7CisJaW50IG5wYWdlc19kaXJ0eSA9IDA7CiAKICByZXRyeToKIAlsb2NrX3JtYXAocm1hcHApOwogCWlmICgqcm1hcHAgJiBLVk1QUENfUk1BUF9DSEFOR0VEKSB7CiAJCSpybWFwcCAmPSB+S1ZNUFBDX1JNQVBfQ0hBTkdFRDsKLQkJcmV0ID0gMTsKKwkJbnBhZ2VzX2RpcnR5ID0gMTsKIAl9CiAJaWYgKCEoKnJtYXBwICYgS1ZNUFBDX1JNQVBfUFJFU0VOVCkpIHsKIAkJdW5sb2NrX3JtYXAocm1hcHApOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gbnBhZ2VzX2RpcnR5OwogCX0KIAogCWkgPSBoZWFkID0gKnJtYXBwICYgS1ZNUFBDX1JNQVBfSU5ERVg7CkBAIC0xMDgzLDcgKzEwOTQsMjIgQEAKIAkJaHB0ZXAgPSAodW5zaWduZWQgbG9uZyAqKSAoa3ZtLT5hcmNoLmhwdF92aXJ0ICsgKGkgPDwgNCkpOwogCQlqID0gcmV2W2ldLmZvcnc7CiAKLQkJaWYgKCEoaHB0ZXBbMV0gJiBIUFRFX1JfQykpCisJCS8qCisJCSAqIENoZWNraW5nIHRoZSBDIChjaGFuZ2VkKSBiaXQgaGVyZSBpcyByYWN5IHNpbmNlIHRoZXJlCisJCSAqIGlzIG5vIGd1YXJhbnRlZSBhYm91dCB3aGVuIHRoZSBoYXJkd2FyZSB3cml0ZXMgaXQgYmFjay4KKwkJICogSWYgdGhlIEhQVEUgaXMgbm90IHdyaXRhYmxlIHRoZW4gaXQgaXMgc3RhYmxlIHNpbmNlIHRoZQorCQkgKiBwYWdlIGNhbid0IGJlIHdyaXR0ZW4gdG8sIGFuZCB3ZSB3b3VsZCBoYXZlIGRvbmUgYSB0bGJpZQorCQkgKiAod2hpY2ggZm9yY2VzIHRoZSBoYXJkd2FyZSB0byBjb21wbGV0ZSBhbnkgd3JpdGViYWNrKQorCQkgKiB3aGVuIG1ha2luZyB0aGUgSFBURSByZWFkLW9ubHkuCisJCSAqIElmIHZjcHVzIGFyZSBydW5uaW5nIHRoZW4gdGhpcyBjYWxsIGlzIHJhY3kgYW55d2F5CisJCSAqIHNpbmNlIHRoZSBwYWdlIGNvdWxkIGdldCBkaXJ0aWVkIHN1YnNlcXVlbnRseSwgc28gd2UKKwkJICogZXhwZWN0IHRoZXJlIHRvIGJlIGEgZnVydGhlciBjYWxsIHdoaWNoIHdvdWxkIHBpY2sgdXAKKwkJICogYW55IGRlbGF5ZWQgQyBiaXQgd3JpdGViYWNrLgorCQkgKiBPdGhlcndpc2Ugd2UgbmVlZCB0byBkbyB0aGUgdGxiaWUgZXZlbiBpZiBDPT0wIGluCisJCSAqIG9yZGVyIHRvIHBpY2sgdXAgYW55IGRlbGF5ZWQgd3JpdGViYWNrIG9mIEMuCisJCSAqLworCQlpZiAoIShocHRlcFsxXSAmIEhQVEVfUl9DKSAmJgorCQkgICAgKCFocHRlX2lzX3dyaXRhYmxlKGhwdGVwWzFdKSB8fCB2Y3B1c19ydW5uaW5nKGt2bSkpKQogCQkJY29udGludWU7CiAKIAkJaWYgKCF0cnlfbG9ja19ocHRlKGhwdGVwLCBIUFRFX1ZfSFZMT0NLKSkgewpAQCAtMTA5NSwyNCArMTEyMSwzMyBAQAogCQl9CiAKIAkJLyogTm93IGNoZWNrIGFuZCBtb2RpZnkgdGhlIEhQVEUgKi8KLQkJaWYgKChocHRlcFswXSAmIEhQVEVfVl9WQUxJRCkgJiYgKGhwdGVwWzFdICYgSFBURV9SX0MpKSB7Ci0JCQkvKiBuZWVkIHRvIG1ha2UgaXQgdGVtcG9yYXJpbHkgYWJzZW50IHRvIGNsZWFyIEMgKi8KLQkJCWhwdGVwWzBdIHw9IEhQVEVfVl9BQlNFTlQ7Ci0JCQlrdm1wcGNfaW52YWxpZGF0ZV9ocHRlKGt2bSwgaHB0ZXAsIGkpOwotCQkJaHB0ZXBbMV0gJj0gfkhQVEVfUl9DOwotCQkJZWllaW8oKTsKLQkJCWhwdGVwWzBdID0gKGhwdGVwWzBdICYgfkhQVEVfVl9BQlNFTlQpIHwgSFBURV9WX1ZBTElEOworCQlpZiAoIShocHRlcFswXSAmIEhQVEVfVl9WQUxJRCkpCisJCQljb250aW51ZTsKKworCQkvKiBuZWVkIHRvIG1ha2UgaXQgdGVtcG9yYXJpbHkgYWJzZW50IHNvIEMgaXMgc3RhYmxlICovCisJCWhwdGVwWzBdIHw9IEhQVEVfVl9BQlNFTlQ7CisJCWt2bXBwY19pbnZhbGlkYXRlX2hwdGUoa3ZtLCBocHRlcCwgaSk7CisJCXYgPSBocHRlcFswXTsKKwkJciA9IGhwdGVwWzFdOworCQlpZiAociAmIEhQVEVfUl9DKSB7CisJCQlocHRlcFsxXSA9IHIgJiB+SFBURV9SX0M7CiAJCQlpZiAoIShyZXZbaV0uZ3Vlc3RfcnB0ZSAmIEhQVEVfUl9DKSkgewogCQkJCXJldltpXS5ndWVzdF9ycHRlIHw9IEhQVEVfUl9DOwogCQkJCW5vdGVfaHB0ZV9tb2RpZmljYXRpb24oa3ZtLCAmcmV2W2ldKTsKIAkJCX0KLQkJCXJldCA9IDE7CisJCQluID0gaHB0ZV9wYWdlX3NpemUodiwgcik7CisJCQluID0gKG4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCQkJaWYgKG4gPiBucGFnZXNfZGlydHkpCisJCQkJbnBhZ2VzX2RpcnR5ID0gbjsKKwkJCWVpZWlvKCk7CiAJCX0KLQkJaHB0ZXBbMF0gJj0gfkhQVEVfVl9IVkxPQ0s7CisJCXYgJj0gfihIUFRFX1ZfQUJTRU5UIHwgSFBURV9WX0hWTE9DSyk7CisJCXYgfD0gSFBURV9WX1ZBTElEOworCQlocHRlcFswXSA9IHY7CiAJfSB3aGlsZSAoKGkgPSBqKSAhPSBoZWFkKTsKIAogCXVubG9ja19ybWFwKHJtYXBwKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBucGFnZXNfZGlydHk7CiB9CiAKIHN0YXRpYyB2b2lkIGhhcnZlc3RfdnBhX2RpcnR5KHN0cnVjdCBrdm1wcGNfdnBhICp2cGEsCkBAIC0xMTM2LDE1ICsxMTcxLDIyIEBACiBsb25nIGt2bXBwY19odl9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyAqbWFwKQogewotCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIGksIGo7CiAJdW5zaWduZWQgbG9uZyAqcm1hcHA7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcm1hcHAgPSBtZW1zbG90LT5hcmNoLnJtYXA7CiAJZm9yIChpID0gMDsgaSA8IG1lbXNsb3QtPm5wYWdlczsgKytpKSB7Ci0JCWlmIChrdm1fdGVzdF9jbGVhcl9kaXJ0eShrdm0sIHJtYXBwKSAmJiBtYXApCi0JCQlfX3NldF9iaXRfbGUoaSwgbWFwKTsKKwkJaW50IG5wYWdlcyA9IGt2bV90ZXN0X2NsZWFyX2RpcnR5X25wYWdlcyhrdm0sIHJtYXBwKTsKKwkJLyoKKwkJICogTm90ZSB0aGF0IGlmIG5wYWdlcyA+IDAgdGhlbiBpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBucGFnZXMsCisJCSAqIHNpbmNlIHdlIGFsd2F5cyBwdXQgaHVnZS1wYWdlIEhQVEVzIGluIHRoZSBybWFwIGNoYWluCisJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlaXIgcGFnZSBiYXNlIGFkZHJlc3MuCisJCSAqLworCQlpZiAobnBhZ2VzICYmIG1hcCkKKwkJCWZvciAoaiA9IGk7IG5wYWdlczsgKytqLCAtLW5wYWdlcykKKwkJCQlfX3NldF9iaXRfbGUoaiwgbWFwKTsKIAkJKytybWFwcDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X3NsYi5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfc2xiLlMKaW5kZXggNGYxMmU4Zi4uMzU4OWM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfc2xiLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfc2xiLlMKQEAgLTE3LDMwICsxNyw5IEBACiAgKiBBdXRob3JzOiBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KICAqLwogCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNlcnJvciBOZWVkIHRvIGZpeCBTTEIgc2hhZG93IGFjY2Vzc2VzIGluIGxpdHRsZSBlbmRpYW4gbW9kZQotI2VuZGlmCi0KLSNkZWZpbmUgU0hBRE9XX1NMQl9FU0lEKG51bSkJKFNMQlNIQURPV19TQVZFQVJFQSArIChudW0gKiAweDEwKSkKLSNkZWZpbmUgU0hBRE9XX1NMQl9WU0lEKG51bSkJKFNMQlNIQURPV19TQVZFQVJFQSArIChudW0gKiAweDEwKSArIDB4OCkKLSNkZWZpbmUgVU5CT0xUX1NMQl9FTlRSWShudW0pIFwKLQlsZAlyOSwgU0hBRE9XX1NMQl9FU0lEKG51bSkocjEyKTsgXAotCS8qIEludmFsaWQ/IFNraXAuICovOyBcCi0JcmxkaWNsLiByMCwgcjksIDM3LCA2MzsgXAotCWJlcQlzbGJfZW50cnlfc2tpcF8gIyMgbnVtOyBcCi0JeG9yaXMJcjksIHI5LCBTTEJfRVNJRF9WQGg7IFwKLQlzdGQJcjksIFNIQURPV19TTEJfRVNJRChudW0pKHIxMik7IFwKLSAgc2xiX2VudHJ5X3NraXBfICMjIG51bToKLQotI2RlZmluZSBSRUJPTFRfU0xCX0VOVFJZKG51bSkgXAotCWxkCXIxMCwgU0hBRE9XX1NMQl9FU0lEKG51bSkocjExKTsgXAotCWNtcGRpCXIxMCwgMDsgXAotCWJlcQlzbGJfZXhpdF9za2lwXyAjIyBudW07IFwKLQlvcmlzCXIxMCwgcjEwLCBTTEJfRVNJRF9WQGg7IFwKLQlsZAlyOSwgU0hBRE9XX1NMQl9WU0lEKG51bSkocjExKTsgXAotCXNsYm10ZQlyOSwgcjEwOyBcCi0Jc3RkCXIxMCwgU0hBRE9XX1NMQl9FU0lEKG51bSkocjExKTsgXAotc2xiX2V4aXRfc2tpcF8gIyMgbnVtOgorI2RlZmluZSBTSEFET1dfU0xCX0VOVFJZX0xFTgkweDEwCisjZGVmaW5lIE9GRlNFVF9FU0lEKHgpCQkoU0hBRE9XX1NMQl9FTlRSWV9MRU4gKiB4KQorI2RlZmluZSBPRkZTRVRfVlNJRCh4KQkJKChTSEFET1dfU0xCX0VOVFJZX0xFTiAqIHgpICsgOCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNjQsMjAgKzQzLDE1IEBACiAJICogU1ZDUFVbTFJdICA9IGd1ZXN0IExSCiAJICovCiAKLQkvKiBSZW1vdmUgTFBBUiBzaGFkb3cgZW50cmllcyAqLworQkVHSU5fRldfRlRSX1NFQ1RJT04KIAotI2lmIFNMQl9OVU1fQk9MVEVEID09IDMKKwkvKiBEZWNsYXJlIFNMQiBzaGFkb3cgYXMgMCBlbnRyaWVzIGJpZyAqLwogCi0JbGQJcjEyLCBQQUNBX1NMQlNIQURPV1BUUihyMTMpCisJbGQJcjExLCBQQUNBX1NMQlNIQURPV1BUUihyMTMpCisJbGkJcjgsIDAKKwlzdGIJcjgsIDMocjExKQogCi0JLyogUmVtb3ZlIGJvbHRlZCBlbnRyaWVzICovCi0JVU5CT0xUX1NMQl9FTlRSWSgwKQotCVVOQk9MVF9TTEJfRU5UUlkoMSkKLQlVTkJPTFRfU0xCX0VOVFJZKDIpCi0JCi0jZWxzZQotI2Vycm9yIHVua25vd24gbnVtYmVyIG9mIGJvbHRlZCBlbnRyaWVzCi0jZW5kaWYKK0VORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0xQQVIpCiAKIAkvKiBGbHVzaCBTTEIgKi8KIApAQCAtMTAwLDcgKzc0LDcgQEAKIAogCWxkCXIxMCwgMChyMTEpCiAKLQlybGRpY2wuIHIwLCByMTAsIDM3LCA2MworCWFuZGlzLglyOSwgcjEwLCBTTEJfRVNJRF9WQGgKIAliZXEJc2xiX2xvb3BfZW50ZXJfc2tpcAogCiAJbGQJcjksIDgocjExKQpAQCAtMTM3LDIzICsxMTEsNDIgQEAKIAkgKgogCSAqLwogCi0JLyogUmVzdG9yZSBib2x0ZWQgZW50cmllcyBmcm9tIHRoZSBzaGFkb3cgYW5kIGZpeCBpdCBhbG9uZyB0aGUgd2F5ICovCisJLyogUmVtb3ZlIGFsbCBTTEIgZW50cmllcyB0aGF0IGFyZSBpbiB1c2UuICovCiAKLQkvKiBXZSBkb24ndCBzdG9yZSBhbnl0aGluZyBpbiBlbnRyeSAwLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiBpdCAqLworCWxpCXIwLCByMAorCXNsYm10ZQlyMCwgcjAKIAlzbGJpYQotCWlzeW5jCiAKLSNpZiBTTEJfTlVNX0JPTFRFRCA9PSAzCisJLyogUmVzdG9yZSBib2x0ZWQgZW50cmllcyBmcm9tIHRoZSBzaGFkb3cgKi8KIAogCWxkCXIxMSwgUEFDQV9TTEJTSEFET1dQVFIocjEzKQogCi0JUkVCT0xUX1NMQl9FTlRSWSgwKQotCVJFQk9MVF9TTEJfRU5UUlkoMSkKLQlSRUJPTFRfU0xCX0VOVFJZKDIpCi0JCi0jZWxzZQotI2Vycm9yIHVua25vd24gbnVtYmVyIG9mIGJvbHRlZCBlbnRyaWVzCi0jZW5kaWYKK0JFR0lOX0ZXX0ZUUl9TRUNUSU9OCisKKwkvKiBEZWNsYXJlIFNMQiBzaGFkb3cgYXMgU0xCX05VTV9CT0xURUQgZW50cmllcyBiaWcgKi8KKworCWxpCXI4LCBTTEJfTlVNX0JPTFRFRAorCXN0YglyOCwgMyhyMTEpCisKK0VORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0xQQVIpCisKKwkvKiBNYW51YWxseSBsb2FkIGFsbCBlbnRyaWVzIGZyb20gc2hhZG93IFNMQiAqLworCisJbGkJcjgsIFNMQlNIQURPV19TQVZFQVJFQQorCWxpCXI3LCBTTEJTSEFET1dfU0FWRUFSRUEgKyA4CisKKwkucmVwdAlTTEJfTlVNX0JPTFRFRAorCUxEWF9CRQlyMTAsIHIxMSwgcjgKKwljbXBkaQlyMTAsIDAKKwliZXEJMWYKKwlMRFhfQkUJcjksIHIxMSwgcjcKKwlzbGJtdGUJcjksIHIxMAorMToJYWRkaQlyNywgcjcsIFNIQURPV19TTEJfRU5UUllfTEVOCisJYWRkaQlyOCwgcjgsIFNIQURPV19TTEJfRU5UUllfTEVOCisJLmVuZHIKKworCWlzeW5jCisJc3luYwogCiBzbGJfZG9fZXhpdDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfZW11bGF0ZS5jCmluZGV4IDk5ZDQwZjguLjNmMjk1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogTGltaXQgdXNlciBzcGFjZSB0byBpdHMgb3duIHNtYWxsIFNQUiBzZXQgKi8KLQlpZiAoKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpICYmIGxldmVsID4gUFJJVl9QUk9CTEVNKQorCWlmICgoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpICYmIGxldmVsID4gUFJJVl9QUk9CTEVNKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTk0LDE0ICs5NCwzMSBAQAogCWludCBycyA9IGdldF9ycyhpbnN0KTsKIAlpbnQgcmEgPSBnZXRfcmEoaW5zdCk7CiAJaW50IHJiID0gZ2V0X3JiKGluc3QpOworCXUzMiBpbnN0X3NjID0gMHg0NDAwMDAwMjsKIAogCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAwOgorCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwkJaWYgKChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9MRSkgJiYKKwkJICAgIChpbnN0ID09IHN3YWIzMihpbnN0X3NjKSkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoZSBieXRlIHJldmVyc2VkIHN5c2NhbGwgaW5zdHJ1Y3Rpb24gb2Ygb3VyCisJCQkgKiBoeXBlcmNhbGwgaGFuZGxlci4gRWFybHkgdmVyc2lvbnMgb2YgTEUgTGludXggZGlkbid0CisJCQkgKiBzd2FwIHRoZSBpbnN0cnVjdGlvbnMgY29ycmVjdGx5IGFuZCBlbmRlZCB1cCBpbgorCQkJICogaWxsZWdhbCBpbnN0cnVjdGlvbnMuCisJCQkgKiBKdXN0IGFsd2F5cyBmYWlsIGh5cGVyY2FsbHMgb24gdGhlc2UgYnJva2VuIHN5c3RlbXMuCisJCQkgKi8KKwkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIDMsIEVWX1VOSU1QTEVNRU5URUQpOworCQkJa3ZtcHBjX3NldF9wYyh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpICsgNCk7CisJCQllbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKwkJfQorCQlicmVhazsKIAljYXNlIDE5OgogCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKIAkJY2FzZSBPUF8xOV9YT1BfUkZJRDoKIAkJY2FzZSBPUF8xOV9YT1BfUkZJOgotCQkJa3ZtcHBjX3NldF9wYyh2Y3B1LCB2Y3B1LT5hcmNoLnNoYXJlZC0+c3JyMCk7Ci0JCQlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLnNoYXJlZC0+c3JyMSk7CisJCQlrdm1wcGNfc2V0X3BjKHZjcHUsIGt2bXBwY19nZXRfc3JyMCh2Y3B1KSk7CisJCQlrdm1wcGNfc2V0X21zcih2Y3B1LCBrdm1wcGNfZ2V0X3NycjEodmNwdSkpOwogCQkJKmFkdmFuY2UgPSAwOwogCQkJYnJlYWs7CiAKQEAgLTExMywxNiArMTMwLDE2IEBACiAJY2FzZSAzMToKIAkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CiAJCWNhc2UgT1BfMzFfWE9QX01GTVNSOgotCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guc2hhcmVkLT5tc3IpOworCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIGt2bXBwY19nZXRfbXNyKHZjcHUpKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QXzMxX1hPUF9NVE1TUkQ6CiAJCXsKIAkJCXVsb25nIHJzX3ZhbCA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKTsKIAkJCWlmIChpbnN0ICYgMHgxMDAwMCkgewotCQkJCXVsb25nIG5ld19tc3IgPSB2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyOworCQkJCXVsb25nIG5ld19tc3IgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KTsKIAkJCQluZXdfbXNyICY9IH4oTVNSX1JJIHwgTVNSX0VFKTsKIAkJCQluZXdfbXNyIHw9IHJzX3ZhbCAmIChNU1JfUkkgfCBNU1JfRUUpOwotCQkJCXZjcHUtPmFyY2guc2hhcmVkLT5tc3IgPSBuZXdfbXNyOworCQkJCWt2bXBwY19zZXRfbXNyX2Zhc3QodmNwdSwgbmV3X21zcik7CiAJCQl9IGVsc2UKIAkJCQlrdm1wcGNfc2V0X21zcih2Y3B1LCByc192YWwpOwogCQkJYnJlYWs7CkBAIC0xNzksNyArMTk2LDcgQEAKIAkJCXVsb25nIGNtZCA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIDMpOwogCQkJaW50IGk7CiAKLQkJICAgICAgICBpZiAoKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfUFIpIHx8CisJCSAgICAgICAgaWYgKChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9QUikgfHwKIAkJCSAgICAhdmNwdS0+YXJjaC5wYXByX2VuYWJsZWQpIHsKIAkJCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKIAkJCQlicmVhazsKQEAgLTI2MSwxNCArMjc4LDE0IEBACiAJCQkJcmFfdmFsID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmEpOwogCiAJCQlhZGRyID0gKHJhX3ZhbCArIHJiX3ZhbCkgJiB+MzFVTEw7Ci0JCQlpZiAoISh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1NGKSkKKwkJCWlmICghKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX1NGKSkKIAkJCQlhZGRyICY9IDB4ZmZmZmZmZmY7CiAJCQl2YWRkciA9IGFkZHI7CiAKIAkJCXIgPSBrdm1wcGNfc3QodmNwdSwgJmFkZHIsIDMyLCB6ZXJvcywgdHJ1ZSk7CiAJCQlpZiAoKHIgPT0gLUVOT0VOVCkgfHwgKHIgPT0gLUVQRVJNKSkgewogCQkJCSphZHZhbmNlID0gMDsKLQkJCQl2Y3B1LT5hcmNoLnNoYXJlZC0+ZGFyID0gdmFkZHI7CisJCQkJa3ZtcHBjX3NldF9kYXIodmNwdSwgdmFkZHIpOwogCQkJCXZjcHUtPmFyY2guZmF1bHRfZGFyID0gdmFkZHI7CiAKIAkJCQlkc2lzciA9IERTSVNSX0lTU1RPUkU7CkBAIC0yNzcsNyArMjk0LDcgQEAKIAkJCQllbHNlIGlmIChyID09IC1FUEVSTSkKIAkJCQkJZHNpc3IgfD0gRFNJU1JfUFJPVEZBVUxUOwogCi0JCQkJdmNwdS0+YXJjaC5zaGFyZWQtPmRzaXNyID0gZHNpc3I7CisJCQkJa3ZtcHBjX3NldF9kc2lzcih2Y3B1LCBkc2lzcik7CiAJCQkJdmNwdS0+YXJjaC5mYXVsdF9kc2lzciA9IGRzaXNyOwogCiAJCQkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsCkBAIC0zNTYsMTAgKzM3MywxMCBAQAogCQl0b19ib29rM3ModmNwdSktPnNkcjEgPSBzcHJfdmFsOwogCQlicmVhazsKIAljYXNlIFNQUk5fRFNJU1I6Ci0JCXZjcHUtPmFyY2guc2hhcmVkLT5kc2lzciA9IHNwcl92YWw7CisJCWt2bXBwY19zZXRfZHNpc3IodmNwdSwgc3ByX3ZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9EQVI6Ci0JCXZjcHUtPmFyY2guc2hhcmVkLT5kYXIgPSBzcHJfdmFsOworCQlrdm1wcGNfc2V0X2Rhcih2Y3B1LCBzcHJfdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJT1I6CiAJCXRvX2Jvb2szcyh2Y3B1KS0+aGlvciA9IHNwcl92YWw7CkBAIC00MzgsNiArNDU1LDMxIEBACiAJY2FzZSBTUFJOX0dRUjc6CiAJCXRvX2Jvb2szcyh2Y3B1KS0+Z3FyW3Nwcm4gLSBTUFJOX0dRUjBdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CisJY2FzZSBTUFJOX0ZTQ1I6CisJCXZjcHUtPmFyY2guZnNjciA9IHNwcl92YWw7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CisJY2FzZSBTUFJOX0JFU0NSOgorCQl2Y3B1LT5hcmNoLmJlc2NyID0gc3ByX3ZhbDsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0VCQkhSOgorCQl2Y3B1LT5hcmNoLmViYmhyID0gc3ByX3ZhbDsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0VCQlJSOgorCQl2Y3B1LT5hcmNoLmViYnJyID0gc3ByX3ZhbDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTQorCWNhc2UgU1BSTl9URkhBUjoKKwkJdmNwdS0+YXJjaC50ZmhhciA9IHNwcl92YWw7CisJCWJyZWFrOworCWNhc2UgU1BSTl9URVhBU1I6CisJCXZjcHUtPmFyY2gudGV4YXNyID0gc3ByX3ZhbDsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX1RGSUFSOgorCQl2Y3B1LT5hcmNoLnRmaWFyID0gc3ByX3ZhbDsKKwkJYnJlYWs7CisjZW5kaWYKKyNlbmRpZgogCWNhc2UgU1BSTl9JQ1RDOgogCWNhc2UgU1BSTl9USFJNMToKIAljYXNlIFNQUk5fVEhSTTI6CkBAIC00NTUsNiArNDk3LDEzIEBACiAJY2FzZSBTUFJOX1dQQVJfR0VLS086CiAJY2FzZSBTUFJOX01TU1NSMDoKIAljYXNlIFNQUk5fREFCUjoKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAorCWNhc2UgU1BSTl9NTUNSUzoKKwljYXNlIFNQUk5fTU1DUkE6CisJY2FzZSBTUFJOX01NQ1IwOgorCWNhc2UgU1BSTl9NTUNSMToKKwljYXNlIFNQUk5fTU1DUjI6CisjZW5kaWYKIAkJYnJlYWs7CiB1bnByaXZpbGVnZWQ6CiAJZGVmYXVsdDoKQEAgLTQ5MywxMCArNTQyLDEwIEBACiAJCSpzcHJfdmFsID0gdG9fYm9vazNzKHZjcHUpLT5zZHIxOwogCQlicmVhazsKIAljYXNlIFNQUk5fRFNJU1I6Ci0JCSpzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPmRzaXNyOworCQkqc3ByX3ZhbCA9IGt2bXBwY19nZXRfZHNpc3IodmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9EQVI6Ci0JCSpzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPmRhcjsKKwkJKnNwcl92YWwgPSBrdm1wcGNfZ2V0X2Rhcih2Y3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJT1I6CiAJCSpzcHJfdmFsID0gdG9fYm9vazNzKHZjcHUpLT5oaW9yOwpAQCAtNTM4LDYgKzU4NywzMSBAQAogCWNhc2UgU1BSTl9HUVI3OgogCQkqc3ByX3ZhbCA9IHRvX2Jvb2szcyh2Y3B1KS0+Z3FyW3Nwcm4gLSBTUFJOX0dRUjBdOwogCQlicmVhazsKKwljYXNlIFNQUk5fRlNDUjoKKwkJKnNwcl92YWwgPSB2Y3B1LT5hcmNoLmZzY3I7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CisJY2FzZSBTUFJOX0JFU0NSOgorCQkqc3ByX3ZhbCA9IHZjcHUtPmFyY2guYmVzY3I7CisJCWJyZWFrOworCWNhc2UgU1BSTl9FQkJIUjoKKwkJKnNwcl92YWwgPSB2Y3B1LT5hcmNoLmViYmhyOworCQlicmVhazsKKwljYXNlIFNQUk5fRUJCUlI6CisJCSpzcHJfdmFsID0gdmNwdS0+YXJjaC5lYmJycjsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTQorCWNhc2UgU1BSTl9URkhBUjoKKwkJKnNwcl92YWwgPSB2Y3B1LT5hcmNoLnRmaGFyOworCQlicmVhazsKKwljYXNlIFNQUk5fVEVYQVNSOgorCQkqc3ByX3ZhbCA9IHZjcHUtPmFyY2gudGV4YXNyOworCQlicmVhazsKKwljYXNlIFNQUk5fVEZJQVI6CisJCSpzcHJfdmFsID0gdmNwdS0+YXJjaC50ZmlhcjsKKwkJYnJlYWs7CisjZW5kaWYKKyNlbmRpZgogCWNhc2UgU1BSTl9USFJNMToKIAljYXNlIFNQUk5fVEhSTTI6CiAJY2FzZSBTUFJOX1RIUk0zOgpAQCAtNTUzLDYgKzYyNywxNCBAQAogCWNhc2UgU1BSTl9XUEFSX0dFS0tPOgogCWNhc2UgU1BSTl9NU1NTUjA6CiAJY2FzZSBTUFJOX0RBQlI6CisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKKwljYXNlIFNQUk5fTU1DUlM6CisJY2FzZSBTUFJOX01NQ1JBOgorCWNhc2UgU1BSTl9NTUNSMDoKKwljYXNlIFNQUk5fTU1DUjE6CisJY2FzZSBTUFJOX01NQ1IyOgorCWNhc2UgU1BSTl9USVI6CisjZW5kaWYKIAkJKnNwcl92YWwgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTY5LDQ4ICs2NTEsMTcgQEAKIAogdTMyIGt2bXBwY19hbGlnbm1lbnRfZHNpc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5zdCkKIHsKLQl1MzIgZHNpc3IgPSAwOwotCi0JLyoKLQkgKiBUaGlzIGlzIHdoYXQgdGhlIHNwZWMgc2F5cyBhYm91dCBEU0lTUiBiaXRzIChub3QgbWVudGlvbmVkID0gMCk6Ci0JICoKLQkgKiAxMjoxMwkJW0RTXQlTZXQgdG8gYml0cyAzMDozMQotCSAqIDE1OjE2CQlbWF0JU2V0IHRvIGJpdHMgMjk6MzAKLQkgKiAxNwkJCVtYXQlTZXQgdG8gYml0IDI1Ci0JICoJCQlbRC9EU10JU2V0IHRvIGJpdCA1Ci0JICogMTg6MjEJCVtYXQlTZXQgdG8gYml0cyAyMToyNAotCSAqCQkJW0QvRFNdCVNldCB0byBiaXRzIDE6NAotCSAqIDIyOjI2CQkJU2V0IHRvIGJpdHMgNjoxMCAoUlQvUlMvRlJUL0ZSUykKLQkgKiAyNzozMQkJCVNldCB0byBiaXRzIDExOjE1IChSQSkKLQkgKi8KLQotCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7Ci0JLyogRC1mb3JtICovCi0JY2FzZSBPUF9MRlM6Ci0JY2FzZSBPUF9MRkQ6Ci0JY2FzZSBPUF9TVEZEOgotCWNhc2UgT1BfU1RGUzoKLQkJZHNpc3IgfD0gKGluc3QgPj4gMTIpICYgMHg0MDAwOwkvKiBiaXQgMTcgKi8KLQkJZHNpc3IgfD0gKGluc3QgPj4gMTcpICYgMHgzYzAwOyAvKiBiaXRzIDE4OjIxICovCi0JCWJyZWFrOwotCS8qIFgtZm9ybSAqLwotCWNhc2UgMzE6Ci0JCWRzaXNyIHw9IChpbnN0IDw8IDE0KSAmIDB4MTgwMDA7IC8qIGJpdHMgMTU6MTYgKi8KLQkJZHNpc3IgfD0gKGluc3QgPDwgOCkgICYgMHgwNDAwMDsgLyogYml0IDE3ICovCi0JCWRzaXNyIHw9IChpbnN0IDw8IDMpICAmIDB4MDNjMDA7IC8qIGJpdHMgMTg6MjEgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiS1ZNOiBVbmFsaWduZWQgaW5zdHJ1Y3Rpb24gMHgleFxuIiwgaW5zdCk7Ci0JCWJyZWFrOwotCX0KLQotCWRzaXNyIHw9IChpbnN0ID4+IDE2KSAmIDB4MDNmZjsgLyogYml0cyAyMjozMSAqLwotCi0JcmV0dXJuIGRzaXNyOworCXJldHVybiBtYWtlX2RzaXNyKGluc3QpOwogfQogCiB1bG9uZyBrdm1wcGNfYWxpZ25tZW50X2RhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpbnN0KQogeworI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CisJLyoKKwkgKiBMaW51eCdzIGZpeF9hbGlnbm1lbnQoKSBhc3N1bWVzIHRoYXQgREFSIGlzIHZhbGlkLCBzbyBjYW4gd2UKKwkgKi8KKwlyZXR1cm4gdmNwdS0+YXJjaC5mYXVsdF9kYXI7CisjZWxzZQogCXVsb25nIGRhciA9IDA7CiAJdWxvbmcgcmEgPSBnZXRfcmEoaW5zdCk7CiAJdWxvbmcgcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC02MzUsNCArNjg2LDUgQEAKIAl9CiAKIAlyZXR1cm4gZGFyOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMKaW5kZXggMjBkNGVhOC4uMGQwMTNmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfZXhwb3J0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2V4cG9ydHMuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzLmg+CiAKICNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggODIyN2RiYS4uYWJhMDViYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCkBAIC04NzksMjQgKzg3OSw5IEBACiAJY2FzZSBLVk1fUkVHX1BQQ19JQU1SOgogCQkqdmFsID0gZ2V0X3JlZ192YWwoaWQsIHZjcHUtPmFyY2guaWFtcik7CiAJCWJyZWFrOwotCWNhc2UgS1ZNX1JFR19QUENfRlNDUjoKLQkJKnZhbCA9IGdldF9yZWdfdmFsKGlkLCB2Y3B1LT5hcmNoLmZzY3IpOwotCQlicmVhazsKIAljYXNlIEtWTV9SRUdfUFBDX1BTUEI6CiAJCSp2YWwgPSBnZXRfcmVnX3ZhbChpZCwgdmNwdS0+YXJjaC5wc3BiKTsKIAkJYnJlYWs7Ci0JY2FzZSBLVk1fUkVHX1BQQ19FQkJIUjoKLQkJKnZhbCA9IGdldF9yZWdfdmFsKGlkLCB2Y3B1LT5hcmNoLmViYmhyKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fUkVHX1BQQ19FQkJSUjoKLQkJKnZhbCA9IGdldF9yZWdfdmFsKGlkLCB2Y3B1LT5hcmNoLmViYnJyKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fUkVHX1BQQ19CRVNDUjoKLQkJKnZhbCA9IGdldF9yZWdfdmFsKGlkLCB2Y3B1LT5hcmNoLmJlc2NyKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fUkVHX1BQQ19UQVI6Ci0JCSp2YWwgPSBnZXRfcmVnX3ZhbChpZCwgdmNwdS0+YXJjaC50YXIpOwotCQlicmVhazsKIAljYXNlIEtWTV9SRUdfUFBDX0RQREVTOgogCQkqdmFsID0gZ2V0X3JlZ192YWwoaWQsIHZjcHUtPmFyY2gudmNvcmUtPmRwZGVzKTsKIAkJYnJlYWs7CkBAIC0xMDkxLDI0ICsxMDc2LDkgQEAKIAljYXNlIEtWTV9SRUdfUFBDX0lBTVI6CiAJCXZjcHUtPmFyY2guaWFtciA9IHNldF9yZWdfdmFsKGlkLCAqdmFsKTsKIAkJYnJlYWs7Ci0JY2FzZSBLVk1fUkVHX1BQQ19GU0NSOgotCQl2Y3B1LT5hcmNoLmZzY3IgPSBzZXRfcmVnX3ZhbChpZCwgKnZhbCk7Ci0JCWJyZWFrOwogCWNhc2UgS1ZNX1JFR19QUENfUFNQQjoKIAkJdmNwdS0+YXJjaC5wc3BiID0gc2V0X3JlZ192YWwoaWQsICp2YWwpOwogCQlicmVhazsKLQljYXNlIEtWTV9SRUdfUFBDX0VCQkhSOgotCQl2Y3B1LT5hcmNoLmViYmhyID0gc2V0X3JlZ192YWwoaWQsICp2YWwpOwotCQlicmVhazsKLQljYXNlIEtWTV9SRUdfUFBDX0VCQlJSOgotCQl2Y3B1LT5hcmNoLmViYnJyID0gc2V0X3JlZ192YWwoaWQsICp2YWwpOwotCQlicmVhazsKLQljYXNlIEtWTV9SRUdfUFBDX0JFU0NSOgotCQl2Y3B1LT5hcmNoLmJlc2NyID0gc2V0X3JlZ192YWwoaWQsICp2YWwpOwotCQlicmVhazsKLQljYXNlIEtWTV9SRUdfUFBDX1RBUjoKLQkJdmNwdS0+YXJjaC50YXIgPSBzZXRfcmVnX3ZhbChpZCwgKnZhbCk7Ci0JCWJyZWFrOwogCWNhc2UgS1ZNX1JFR19QUENfRFBERVM6CiAJCXZjcHUtPmFyY2gudmNvcmUtPmRwZGVzID0gc2V0X3JlZ192YWwoaWQsICp2YWwpOwogCQlicmVhazsKQEAgLTEyODAsNiArMTI1MCwxNyBAQAogCQlnb3RvIGZyZWVfdmNwdTsKIAogCXZjcHUtPmFyY2guc2hhcmVkID0gJnZjcHUtPmFyY2guc2hyZWdzOworI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFCisJLyoKKwkgKiBUaGUgc2hhcmVkIHN0cnVjdCBpcyBuZXZlciBzaGFyZWQgb24gSFYsCisJICogc28gd2UgY2FuIGFsd2F5cyB1c2UgaG9zdCBlbmRpYW5uZXNzCisJICovCisjaWZkZWYgX19CSUdfRU5ESUFOX18KKwl2Y3B1LT5hcmNoLnNoYXJlZF9iaWdfZW5kaWFuID0gdHJ1ZTsKKyNlbHNlCisJdmNwdS0+YXJjaC5zaGFyZWRfYmlnX2VuZGlhbiA9IGZhbHNlOworI2VuZGlmCisjZW5kaWYKIAl2Y3B1LT5hcmNoLm1tY3JbMF0gPSBNTUNSMF9GQzsKIAl2Y3B1LT5hcmNoLmN0cmwgPSBDVFJMX1JVTkxBVENIOwogCS8qIGRlZmF1bHQgdG8gaG9zdCBQVlIsIHNpbmNlIHdlIGNhbid0IHNwb29mIGl0ICovCkBAIC0xOTQ5LDYgKzE5MzAsMTMgQEAKIAkgKiBzdXBwb3J0IHB0ZV9lbmMgaGVyZQogCSAqLwogCSgqc3BzKS0+ZW5jWzBdLnB0ZV9lbmMgPSBkZWYtPnBlbmNbbGludXhfcHNpemVdOworCS8qCisJICogQWRkIDE2TUIgTVBTUyBzdXBwb3J0IGlmIGhvc3Qgc3VwcG9ydHMgaXQKKwkgKi8KKwlpZiAobGludXhfcHNpemUgIT0gTU1VX1BBR0VfMTZNICYmIGRlZi0+cGVuY1tNTVVfUEFHRV8xNk1dICE9IC0xKSB7CisJCSgqc3BzKS0+ZW5jWzFdLnBhZ2Vfc2hpZnQgPSAyNDsKKwkJKCpzcHMpLT5lbmNbMV0ucHRlX2VuYyA9IGRlZi0+cGVuY1tNTVVfUEFHRV8xNk1dOworCX0KIAkoKnNwcykrKzsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1fbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9ybV9tbXUuYwppbmRleCA4ZmNjMzYzLi42ZTYyMjQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9ybV9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9ybV9tbXUuYwpAQCAtNDIsMTMgKzQyLDE0IEBACiAKIAkvKgogCSAqIElmIHRoZXJlIGlzIG9ubHkgb25lIHZjb3JlLCBhbmQgaXQncyBjdXJyZW50bHkgcnVubmluZywKKwkgKiBhcyBpbmRpY2F0ZWQgYnkgbG9jYWxfcGFjYS0+a3ZtX2hzdGF0ZS5rdm1fdmNwdSBiZWluZyBzZXQsCiAJICogd2UgY2FuIHVzZSB0bGJpZWwgYXMgbG9uZyBhcyB3ZSBtYXJrIGFsbCBvdGhlciBwaHlzaWNhbAogCSAqIGNvcmVzIGFzIHBvdGVudGlhbGx5IGhhdmluZyBzdGFsZSBUTEIgZW50cmllcyBmb3IgdGhpcyBscGlkLgogCSAqIElmIHdlJ3JlIG5vdCB1c2luZyBNTVUgbm90aWZpZXJzLCB3ZSBuZXZlciB0YWtlIHBhZ2VzIGF3YXkKIAkgKiBmcm9tIHRoZSBndWVzdCwgc28gd2UgY2FuIHVzZSB0bGJpZWwgaWYgcmVxdWVzdGVkLgogCSAqIE90aGVyd2lzZSwgZG9uJ3QgdXNlIHRsYmllbC4KIAkgKi8KLQlpZiAoa3ZtLT5hcmNoLm9ubGluZV92Y29yZXMgPT0gMSAmJiBsb2NhbF9wYWNhLT5rdm1faHN0YXRlLmt2bV92Y29yZSkKKwlpZiAoa3ZtLT5hcmNoLm9ubGluZV92Y29yZXMgPT0gMSAmJiBsb2NhbF9wYWNhLT5rdm1faHN0YXRlLmt2bV92Y3B1KQogCQlnbG9iYWwgPSAwOwogCWVsc2UgaWYgKGt2bS0+YXJjaC51c2luZ19tbXVfbm90aWZpZXJzKQogCQlnbG9iYWwgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1oYW5kbGVycy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1oYW5kbGVycy5TCmluZGV4IDA3YzhiNWIuLjk3NDc5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3JtaGFuZGxlcnMuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9ybWhhbmRsZXJzLlMKQEAgLTg2LDYgKzg2LDEyIEBACiAJbGJ6CXI0LCBMUFBBQ0FfUE1DSU5VU0UocjMpCiAJY21wd2kJcjQsIDAKIAliZXEJMjNmCQkJLyogc2tpcCBpZiBub3QgKi8KK0JFR0lOX0ZUUl9TRUNUSU9OCisJbGQJcjMsIEhTVEFURV9NTUNSKHIxMykKKwlhbmRpLglyNCwgcjMsIE1NQ1IwX1BNQU9fU1lOQyB8IE1NQ1IwX1BNQU8KKwljbXB3aQlyNCwgTU1DUjBfUE1BTworCWJlcWwJa3ZtcHBjX2ZpeF9wbWFvCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9QTUFPX0JVRykKIAlsd3oJcjMsIEhTVEFURV9QTUMocjEzKQogCWx3eglyNCwgSFNUQVRFX1BNQyArIDQocjEzKQogCWx3eglyNSwgSFNUQVRFX1BNQyArIDgocjEzKQpAQCAtNzM3LDYgKzc0MywxMiBAQAogCXNsZGkJcjMsIHIzLCAzMQkJLyogTU1DUjBfRkMgKGZyZWV6ZSBjb3VudGVycykgYml0ICovCiAJbXRzcHIJU1BSTl9NTUNSMCwgcjMJCS8qIGZyZWV6ZSBhbGwgY291bnRlcnMsIGRpc2FibGUgaW50cyAqLwogCWlzeW5jCitCRUdJTl9GVFJfU0VDVElPTgorCWxkCXIzLCBWQ1BVX01NQ1IocjQpCisJYW5kaS4JcjUsIHIzLCBNTUNSMF9QTUFPX1NZTkMgfCBNTUNSMF9QTUFPCisJY21wd2kJcjUsIE1NQ1IwX1BNQU8KKwliZXFsCWt2bXBwY19maXhfcG1hbworRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUE1BT19CVUcpCiAJbHd6CXIzLCBWQ1BVX1BNQyhyNCkJLyogYWx3YXlzIGxvYWQgdXAgZ3Vlc3QgUE1VIHJlZ2lzdGVycyAqLwogCWx3eglyNSwgVkNQVV9QTUMgKyA0KHI0KQkvKiB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWsgKi8KIAlsd3oJcjYsIFZDUFVfUE1DICsgOChyNCkKQEAgLTE0MzksNiArMTQ1MSwzMCBAQAogMjU6CiAJLyogU2F2ZSBQTVUgcmVnaXN0ZXJzIGlmIHJlcXVlc3RlZCAqLwogCS8qIHI4IGFuZCBjcjAuZXEgYXJlIGxpdmUgaGVyZSAqLworQkVHSU5fRlRSX1NFQ1RJT04KKwkvKgorCSAqIFBPV0VSOCBzZWVtcyB0byBoYXZlIGEgaGFyZHdhcmUgYnVnIHdoZXJlIHNldHRpbmcKKwkgKiBNTUNSMFtQTUFFXSBhbG9uZyB3aXRoIE1NQ1IwW1BNQzFDRV0gYW5kL29yIE1NQ1IwW1BNQ2pDRV0KKwkgKiB3aGVuIHNvbWUgY291bnRlcnMgYXJlIGFscmVhZHkgbmVnYXRpdmUgZG9lc24ndCBzZWVtCisJICogdG8gY2F1c2UgYSBwZXJmb3JtYW5jZSBtb25pdG9yIGFsZXJ0IChhbmQgaGVuY2UgaW50ZXJydXB0KS4KKwkgKiBUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCB3aGVuIHNhdmluZyB0aGUgUE1VIHN0YXRlLAorCSAqIGlmIHRoZXJlIGlzIG5vIFBNVSBhbGVydCBwZW5kaW5nIHdoZW4gd2UgcmVhZCBNTUNSMAorCSAqIGJlZm9yZSBmcmVlemluZyB0aGUgY291bnRlcnMsIGJ1dCBvbmUgYmVjb21lcyBwZW5kaW5nCisJICogYmVmb3JlIHdlIHJlYWQgdGhlIGNvdW50ZXJzLCB3ZSBsb3NlIGl0LgorCSAqIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdlIG5lZWQgYSB3YXkgdG8gZnJlZXplIHRoZSBjb3VudGVycworCSAqIGJlZm9yZSByZWFkaW5nIE1NQ1IwLiAgTm9ybWFsbHksIGZyZWV6aW5nIHRoZSBjb3VudGVycworCSAqIGlzIGRvbmUgYnkgd3JpdGluZyBNTUNSMCAodG8gc2V0IE1NQ1IwW0ZDXSkgd2hpY2gKKwkgKiB1bmF2b2lkYWJseSB3cml0ZXMgTU1DUjBbUE1BMF0gYXMgd2VsbC4gIE9uIFBPV0VSOCwKKwkgKiB3ZSBjYW4gYWxzbyBmcmVlemUgdGhlIGNvdW50ZXJzIHVzaW5nIE1NQ1IyLCBieSB3cml0aW5nCisJICogMXMgdG8gYWxsIHRoZSBjb3VudGVyIGZyZWV6ZSBjb25kaXRpb24gYml0cyAodGhlcmUgYXJlCisJICogOSBiaXRzIGVhY2ggZm9yIDYgY291bnRlcnMpLgorCSAqLworCWxpCXIzLCAtMQkJCS8qIHNldCBhbGwgZnJlZXplIGJpdHMgKi8KKwljbHJyZGkJcjMsIHIzLCAxMAorCW1mc3ByCXIxMCwgU1BSTl9NTUNSMgorCW10c3ByCVNQUk5fTU1DUjIsIHIzCisJaXN5bmMKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FSQ0hfMjA3UykKIAlsaQlyMywgMQogCXNsZGkJcjMsIHIzLCAzMQkJLyogTU1DUjBfRkMgKGZyZWV6ZSBjb3VudGVycykgYml0ICovCiAJbWZzcHIJcjQsIFNQUk5fTU1DUjAJCS8qIHNhdmUgTU1DUjAgKi8KQEAgLTE0NjIsNiArMTQ5OCw5IEBACiAJc3RkCXI0LCBWQ1BVX01NQ1IocjkpCiAJc3RkCXI1LCBWQ1BVX01NQ1IgKyA4KHI5KQogCXN0ZAlyNiwgVkNQVV9NTUNSICsgMTYocjkpCitCRUdJTl9GVFJfU0VDVElPTgorCXN0ZAlyMTAsIFZDUFVfTU1DUiArIDI0KHI5KQorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8yMDdTKQogCXN0ZAlyNywgVkNQVV9TSUFSKHI5KQogCXN0ZAlyOCwgVkNQVV9TREFSKHI5KQogCW1mc3ByCXIzLCBTUFJOX1BNQzEKQEAgLTE0ODUsMTIgKzE1MjQsMTAgQEAKIAlzdHcJcjExLCBWQ1BVX1BNQyArIDI4KHI5KQogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8yMDEpCiBCRUdJTl9GVFJfU0VDVElPTgotCW1mc3ByCXI0LCBTUFJOX01NQ1IyCiAJbWZzcHIJcjUsIFNQUk5fU0lFUgogCW1mc3ByCXI2LCBTUFJOX1NQTUMxCiAJbWZzcHIJcjcsIFNQUk5fU1BNQzIKIAltZnNwcglyOCwgU1BSTl9NTUNSUwotCXN0ZAlyNCwgVkNQVV9NTUNSICsgMjQocjkpCiAJc3RkCXI1LCBWQ1BVX1NJRVIocjkpCiAJc3R3CXI2LCBWQ1BVX1BNQyArIDI0KHI5KQogCXN0dwlyNywgVkNQVV9QTUMgKyAyOChyOSkKQEAgLTIyMjcsNiArMjI2NCw3IEBACiAJYmVxCW1jX2NvbnQKIAkvKiBJZiBub3QsIGRlbGl2ZXIgYSBtYWNoaW5lIGNoZWNrLiAgU1JSMC8xIGFyZSBhbHJlYWR5IHNldCAqLwogCWxpCXIxMCwgQk9PSzNTX0lOVEVSUlVQVF9NQUNISU5FX0NIRUNLCisJbGQJcjExLCBWQ1BVX01TUihyOSkKIAlibAlrdm1wcGNfbXNyX2ludGVycnVwdAogCWIJZmFzdF9pbnRlcnJ1cHRfY19yZXR1cm4KIApAQCAtMjQzMSwzICsyNDY5LDIxIEBACiAJbGkJcjAsIDEKIDE6CXJsZGltaQlyMTEsIHIwLCBNU1JfVFNfU19MRywgNjMgLSBNU1JfVFNfVF9MRwogCWJscgorCisvKgorICogVGhpcyB3b3JrcyBhcm91bmQgYSBoYXJkd2FyZSBidWcgb24gUE9XRVI4RSBwcm9jZXNzb3JzLCB3aGVyZQorICogd3JpdGluZyBhIDEgdG8gdGhlIE1NQ1IwW1BNQU9dIGJpdCBkb2Vzbid0IGdlbmVyYXRlIGEKKyAqIHBlcmZvcm1hbmNlIG1vbml0b3IgaW50ZXJydXB0LiAgSW5zdGVhZCwgd2hlbiB3ZSBuZWVkIHRvIGhhdmUKKyAqIGFuIGludGVycnVwdCBwZW5kaW5nLCB3ZSBoYXZlIHRvIGFycmFuZ2UgZm9yIGEgY291bnRlciB0byBvdmVyZmxvdy4KKyAqLwora3ZtcHBjX2ZpeF9wbWFvOgorCWxpCXIzLCAwCisJbXRzcHIJU1BSTl9NTUNSMiwgcjMKKwlsaXMJcjMsIChNTUNSMF9QTVhFIHwgTU1DUjBfRkNFQ0UpQGgKKwlvcmkJcjMsIHIzLCBNTUNSMF9QTUNqQ0UgfCBNTUNSMF9DNTZSVU4KKwltdHNwcglTUFJOX01NQ1IwLCByMworCWxpcwlyMywgMHg3ZmZmCisJb3JpCXIzLCByMywgMHhmZmZmCisJbXRzcHIJU1BSTl9QTUM2LCByMworCWlzeW5jCisJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19pbnRlcnJ1cHRzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19pbnRlcnJ1cHRzLlMKaW5kZXggMzUzM2M5OS4uZTJjMjllMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaW50ZXJydXB0cy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUwpAQCAtMTA0LDggKzEwNCwyNyBAQAogCXN0YglyMywgSFNUQVRFX1JFU1RPUkVfSElENShyMTMpCiAKIAkvKiBMb2FkIHVwIGd1ZXN0IFNQUkczIHZhbHVlLCBzaW5jZSBpdCdzIHVzZXIgcmVhZGFibGUgKi8KLQlsZAlyMywgVkNQVV9TSEFSRUQocjQpCi0JbGQJcjMsIFZDUFVfU0hBUkVEX1NQUkczKHIzKQorCWx3eglyMywgVkNQVV9TSEFSRURCRShyNCkKKwljbXB3aQlyMywgMAorCWxkCXI1LCBWQ1BVX1NIQVJFRChyNCkKKwliZXEJc3ByZzNfbGl0dGxlX2VuZGlhbgorc3ByZzNfYmlnX2VuZGlhbjoKKyNpZmRlZiBfX0JJR19FTkRJQU5fXworCWxkCXIzLCBWQ1BVX1NIQVJFRF9TUFJHMyhyNSkKKyNlbHNlCisJYWRkaQlyNSwgcjUsIFZDUFVfU0hBUkVEX1NQUkczCisJbGRicngJcjMsIDAsIHI1CisjZW5kaWYKKwliCWFmdGVyX3NwcmczX2xvYWQKK3NwcmczX2xpdHRsZV9lbmRpYW46CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsZAlyMywgVkNQVV9TSEFSRURfU1BSRzMocjUpCisjZWxzZQorCWFkZGkJcjUsIHI1LCBWQ1BVX1NIQVJFRF9TUFJHMworCWxkYnJ4CXIzLCAwLCByNQorI2VuZGlmCisKK2FmdGVyX3NwcmczX2xvYWQ6CiAJbXRzcHIJU1BSTl9TUFJHMywgcjMKICNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szU182NCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wYWlyZWRfc2luZ2xlcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcGFpcmVkX3NpbmdsZXMuYwppbmRleCBjMWFiZDk1Li42YzgwMTFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wYWlyZWRfc2luZ2xlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3BhaXJlZF9zaW5nbGVzLmMKQEAgLTE2NSwxNiArMTY1LDE4IEBACiAKIHN0YXRpYyB2b2lkIGt2bXBwY19pbmplY3RfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBlYWRkciwgYm9vbCBpc19zdG9yZSkKIHsKLQl1NjQgZHNpc3I7Ci0Jc3RydWN0IGt2bV92Y3B1X2FyY2hfc2hhcmVkICpzaGFyZWQgPSB2Y3B1LT5hcmNoLnNoYXJlZDsKKwl1MzIgZHNpc3I7CisJdTY0IG1zciA9IGt2bXBwY19nZXRfbXNyKHZjcHUpOwogCi0Jc2hhcmVkLT5tc3IgPSBrdm1wcGNfc2V0X2ZpZWxkKHNoYXJlZC0+bXNyLCAzMywgMzYsIDApOwotCXNoYXJlZC0+bXNyID0ga3ZtcHBjX3NldF9maWVsZChzaGFyZWQtPm1zciwgNDIsIDQ3LCAwKTsKLQlzaGFyZWQtPmRhciA9IGVhZGRyOworCW1zciA9IGt2bXBwY19zZXRfZmllbGQobXNyLCAzMywgMzYsIDApOworCW1zciA9IGt2bXBwY19zZXRfZmllbGQobXNyLCA0MiwgNDcsIDApOworCWt2bXBwY19zZXRfbXNyKHZjcHUsIG1zcik7CisJa3ZtcHBjX3NldF9kYXIodmNwdSwgZWFkZHIpOwogCS8qIFBhZ2UgRmF1bHQgKi8KIAlkc2lzciA9IGt2bXBwY19zZXRfZmllbGQoMCwgMzMsIDMzLCAxKTsKIAlpZiAoaXNfc3RvcmUpCi0JCXNoYXJlZC0+ZHNpc3IgPSBrdm1wcGNfc2V0X2ZpZWxkKGRzaXNyLCAzOCwgMzgsIDEpOworCQlkc2lzciA9IGt2bXBwY19zZXRfZmllbGQoZHNpc3IsIDM4LCAzOCwgMSk7CisJa3ZtcHBjX3NldF9kc2lzcih2Y3B1LCBkc2lzcik7CiAJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0szU19JTlRFUlJVUFRfREFUQV9TVE9SQUdFKTsKIH0KIApAQCAtNjYwLDcgKzY2Miw3IEBACiAJaWYgKCFrdm1wcGNfaW5zdF9pc19wYWlyZWRfc2luZ2xlKHZjcHUsIGluc3QpKQogCQlyZXR1cm4gRU1VTEFURV9GQUlMOwogCi0JaWYgKCEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9GUCkpIHsKKwlpZiAoIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9GUCkpIHsKIAkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0szU19JTlRFUlJVUFRfRlBfVU5BVkFJTCk7CiAJCXJldHVybiBFTVVMQVRFX0FHQUlOOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jCmluZGV4IDAyZjFkZWYuLjhlZWYxZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwpAQCAtNTMsNiArNTMsNyBAQAogCiBzdGF0aWMgaW50IGt2bXBwY19oYW5kbGVfZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIsCiAJCQkgICAgIHVsb25nIG1zcik7CitzdGF0aWMgdm9pZCBrdm1wcGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYyk7CiAKIC8qIFNvbWUgY29tcGF0aWJpbGl0eSBkZWZpbmVzICovCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfMzIKQEAgLTg5LDYgKzkwLDcgQEAKICNlbmRpZgogCiAJa3ZtcHBjX2dpdmV1cF9leHQodmNwdSwgTVNSX0ZQIHwgTVNSX1ZFQyB8IE1TUl9WU1gpOworCWt2bXBwY19naXZldXBfZmFjKHZjcHUsIEZTQ1JfVEFSX0xHKTsKIAl2Y3B1LT5jcHUgPSAtMTsKIH0KIApAQCAtMTE1LDYgKzExNyw5IEBACiAJc3ZjcHUtPmN0ciA9IHZjcHUtPmFyY2guY3RyOwogCXN2Y3B1LT5sciAgPSB2Y3B1LT5hcmNoLmxyOwogCXN2Y3B1LT5wYyAgPSB2Y3B1LT5hcmNoLnBjOworI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CisJc3ZjcHUtPnNoYWRvd19mc2NyID0gdmNwdS0+YXJjaC5zaGFkb3dfZnNjcjsKKyNlbmRpZgogCXN2Y3B1LT5pbl91c2UgPSB0cnVlOwogfQogCkBAIC0xNTgsNiArMTYzLDkgQEAKIAl2Y3B1LT5hcmNoLmZhdWx0X2RhciAgID0gc3ZjcHUtPmZhdWx0X2RhcjsKIAl2Y3B1LT5hcmNoLmZhdWx0X2RzaXNyID0gc3ZjcHUtPmZhdWx0X2RzaXNyOwogCXZjcHUtPmFyY2gubGFzdF9pbnN0ICAgPSBzdmNwdS0+bGFzdF9pbnN0OworI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CisJdmNwdS0+YXJjaC5zaGFkb3dfZnNjciA9IHN2Y3B1LT5zaGFkb3dfZnNjcjsKKyNlbmRpZgogCXN2Y3B1LT5pbl91c2UgPSBmYWxzZTsKIAogb3V0OgpAQCAtMjQ2LDE0ICsyNTQsMTUgQEAKIAogc3RhdGljIHZvaWQga3ZtcHBjX3JlY2FsY19zaGFkb3dfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bG9uZyBzbXNyID0gdmNwdS0+YXJjaC5zaGFyZWQtPm1zcjsKKwl1bG9uZyBndWVzdF9tc3IgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KTsKKwl1bG9uZyBzbXNyID0gZ3Vlc3RfbXNyOwogCiAJLyogR3Vlc3QgTVNSIHZhbHVlcyAqLwotCXNtc3IgJj0gTVNSX0ZFMCB8IE1TUl9GRTEgfCBNU1JfU0YgfCBNU1JfU0UgfCBNU1JfQkU7CisJc21zciAmPSBNU1JfRkUwIHwgTVNSX0ZFMSB8IE1TUl9TRiB8IE1TUl9TRSB8IE1TUl9CRSB8IE1TUl9MRTsKIAkvKiBQcm9jZXNzIE1TUiB2YWx1ZXMgKi8KIAlzbXNyIHw9IE1TUl9NRSB8IE1TUl9SSSB8IE1TUl9JUiB8IE1TUl9EUiB8IE1TUl9QUiB8IE1TUl9FRTsKIAkvKiBFeHRlcm5hbCBwcm92aWRlcnMgdGhlIGd1ZXN0IHJlc2VydmVkICovCi0Jc21zciB8PSAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIHZjcHUtPmFyY2guZ3Vlc3Rfb3duZWRfZXh0KTsKKwlzbXNyIHw9IChndWVzdF9tc3IgJiB2Y3B1LT5hcmNoLmd1ZXN0X293bmVkX2V4dCk7CiAJLyogNjQtYml0IFByb2Nlc3MgTVNSIHZhbHVlcyAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CiAJc21zciB8PSBNU1JfSVNGIHwgTVNSX0hWOwpAQCAtMjYzLDE0ICsyNzIsMTQgQEAKIAogc3RhdGljIHZvaWQga3ZtcHBjX3NldF9tc3JfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbXNyKQogewotCXVsb25nIG9sZF9tc3IgPSB2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyOworCXVsb25nIG9sZF9tc3IgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KTsKIAogI2lmZGVmIEVYSVRfREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJLVk06IFNldCBNU1IgdG8gMHglbGx4XG4iLCBtc3IpOwogI2VuZGlmCiAKIAltc3IgJj0gdG9fYm9vazNzKHZjcHUpLT5tc3JfbWFzazsKLQl2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyID0gbXNyOworCWt2bXBwY19zZXRfbXNyX2Zhc3QodmNwdSwgbXNyKTsKIAlrdm1wcGNfcmVjYWxjX3NoYWRvd19tc3IodmNwdSk7CiAKIAlpZiAobXNyICYgTVNSX1BPVykgewpAQCAtMjgxLDExICsyOTAsMTEgQEAKIAogCQkJLyogVW5zZXQgUE9XIGJpdCBhZnRlciB3ZSB3b2tlIHVwICovCiAJCQltc3IgJj0gfk1TUl9QT1c7Ci0JCQl2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyID0gbXNyOworCQkJa3ZtcHBjX3NldF9tc3JfZmFzdCh2Y3B1LCBtc3IpOwogCQl9CiAJfQogCi0JaWYgKCh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgKE1TUl9QUnxNU1JfSVJ8TVNSX0RSKSkgIT0KKwlpZiAoKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgKE1TUl9QUnxNU1JfSVJ8TVNSX0RSKSkgIT0KIAkJICAgKG9sZF9tc3IgJiAoTVNSX1BSfE1TUl9JUnxNU1JfRFIpKSkgewogCQlrdm1wcGNfbW11X2ZsdXNoX3NlZ21lbnRzKHZjcHUpOwogCQlrdm1wcGNfbW11X21hcF9zZWdtZW50KHZjcHUsIGt2bXBwY19nZXRfcGModmNwdSkpOwpAQCAtMzE3LDcgKzMyNiw3IEBACiAJfQogCiAJLyogUHJlbG9hZCBGUFUgaWYgaXQncyBlbmFibGVkICovCi0JaWYgKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfRlApCisJaWYgKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX0ZQKQogCQlrdm1wcGNfaGFuZGxlX2V4dCh2Y3B1LCBCT09LM1NfSU5URVJSVVBUX0ZQX1VOQVZBSUwsIE1TUl9GUCk7CiB9CiAKQEAgLTQyNyw4ICs0MzYsOCBAQAogCiAJLyogcGF0Y2ggZGNieiBpbnRvIHJlc2VydmVkIGluc3RydWN0aW9uLCBzbyB3ZSB0cmFwICovCiAJZm9yIChpPWhwYWdlX29mZnNldDsgaSA8IGhwYWdlX29mZnNldCArIChIV19QQUdFX1NJWkUgLyA0KTsgaSsrKQotCQlpZiAoKHBhZ2VbaV0gJiAweGZmMDAwN2ZmKSA9PSBJTlNfRENCWikKLQkJCXBhZ2VbaV0gJj0gMHhmZmZmZmZmNzsKKwkJaWYgKChiZTMyX3RvX2NwdShwYWdlW2ldKSAmIDB4ZmYwMDA3ZmYpID09IElOU19EQ0JaKQorCQkJcGFnZVtpXSAmPSBjcHVfdG9fYmUzMigweGZmZmZmZmY3KTsKIAogCWt1bm1hcF9hdG9taWMocGFnZSk7CiAJcHV0X3BhZ2UoaHBhZ2UpOwpAQCAtNDM4LDcgKzQ0Nyw3IEBACiB7CiAJdWxvbmcgbXBfcGEgPSB2Y3B1LT5hcmNoLm1hZ2ljX3BhZ2VfcGE7CiAKLQlpZiAoISh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX1NGKSkKKwlpZiAoIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9TRikpCiAJCW1wX3BhID0gKHVpbnQzMl90KW1wX3BhOwogCiAJaWYgKHVubGlrZWx5KG1wX3BhKSAmJgpAQCAtNDU5LDggKzQ2OCw4IEBACiAJaW50IHBhZ2VfZm91bmQgPSAwOwogCXN0cnVjdCBrdm1wcGNfcHRlIHB0ZTsKIAlib29sIGlzX21taW8gPSBmYWxzZTsKLQlib29sIGRyID0gKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiBNU1JfRFIpID8gdHJ1ZSA6IGZhbHNlOwotCWJvb2wgaXIgPSAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9JUikgPyB0cnVlIDogZmFsc2U7CisJYm9vbCBkciA9IChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9EUikgPyB0cnVlIDogZmFsc2U7CisJYm9vbCBpciA9IChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9JUikgPyB0cnVlIDogZmFsc2U7CiAJdTY0IHZzaWQ7CiAKIAlyZWxvY2F0ZWQgPSBkYXRhID8gZHIgOiBpcjsKQEAgLTQ4MCw3ICs0ODksNyBAQAogCQlwdGUucGFnZV9zaXplID0gTU1VX1BBR0VfNjRLOwogCX0KIAotCXN3aXRjaCAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIChNU1JfRFJ8TVNSX0lSKSkgeworCXN3aXRjaCAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiAoTVNSX0RSfE1TUl9JUikpIHsKIAljYXNlIDA6CiAJCXB0ZS52cGFnZSB8PSAoKHU2NClWU0lEX1JFQUwgPDwgKFNJRF9TSElGVCAtIDEyKSk7CiAJCWJyZWFrOwpAQCAtNDg4LDcgKzQ5Nyw3IEBACiAJY2FzZSBNU1JfSVI6CiAJCXZjcHUtPmFyY2gubW11LmVzaWRfdG9fdnNpZCh2Y3B1LCBlYWRkciA+PiBTSURfU0hJRlQsICZ2c2lkKTsKIAotCQlpZiAoKHZjcHUtPmFyY2guc2hhcmVkLT5tc3IgJiAoTVNSX0RSfE1TUl9JUikpID09IE1TUl9EUikKKwkJaWYgKChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIChNU1JfRFJ8TVNSX0lSKSkgPT0gTVNSX0RSKQogCQkJcHRlLnZwYWdlIHw9ICgodTY0KVZTSURfUkVBTF9EUiA8PCAoU0lEX1NISUZUIC0gMTIpKTsKIAkJZWxzZQogCQkJcHRlLnZwYWdlIHw9ICgodTY0KVZTSURfUkVBTF9JUiA8PCAoU0lEX1NISUZUIC0gMTIpKTsKQEAgLTUxMSwyMiArNTIwLDI1IEBACiAKIAlpZiAocGFnZV9mb3VuZCA9PSAtRU5PRU5UKSB7CiAJCS8qIFBhZ2Ugbm90IGZvdW5kIGluIGd1ZXN0IFBURSBlbnRyaWVzICovCi0JCXZjcHUtPmFyY2guc2hhcmVkLT5kYXIgPSBrdm1wcGNfZ2V0X2ZhdWx0X2Rhcih2Y3B1KTsKLQkJdmNwdS0+YXJjaC5zaGFyZWQtPmRzaXNyID0gdmNwdS0+YXJjaC5mYXVsdF9kc2lzcjsKLQkJdmNwdS0+YXJjaC5zaGFyZWQtPm1zciB8PQotCQkJdmNwdS0+YXJjaC5zaGFkb3dfc3JyMSAmIDB4MDAwMDAwMDBmODAwMDAwMFVMTDsKKwkJdTY0IHNzcnIxID0gdmNwdS0+YXJjaC5zaGFkb3dfc3JyMTsKKwkJdTY0IG1zciA9IGt2bXBwY19nZXRfbXNyKHZjcHUpOworCQlrdm1wcGNfc2V0X2Rhcih2Y3B1LCBrdm1wcGNfZ2V0X2ZhdWx0X2Rhcih2Y3B1KSk7CisJCWt2bXBwY19zZXRfZHNpc3IodmNwdSwgdmNwdS0+YXJjaC5mYXVsdF9kc2lzcik7CisJCWt2bXBwY19zZXRfbXNyX2Zhc3QodmNwdSwgbXNyIHwgKHNzcnIxICYgMHhmODAwMDAwMFVMTCkpOwogCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgdmVjKTsKIAl9IGVsc2UgaWYgKHBhZ2VfZm91bmQgPT0gLUVQRVJNKSB7CiAJCS8qIFN0b3JhZ2UgcHJvdGVjdGlvbiAqLwotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+ZGFyID0ga3ZtcHBjX2dldF9mYXVsdF9kYXIodmNwdSk7Ci0JCXZjcHUtPmFyY2guc2hhcmVkLT5kc2lzciA9IHZjcHUtPmFyY2guZmF1bHRfZHNpc3IgJiB+RFNJU1JfTk9IUFRFOwotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+ZHNpc3IgfD0gRFNJU1JfUFJPVEZBVUxUOwotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyIHw9Ci0JCQl2Y3B1LT5hcmNoLnNoYWRvd19zcnIxICYgMHgwMDAwMDAwMGY4MDAwMDAwVUxMOworCQl1MzIgZHNpc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2RzaXNyOworCQl1NjQgc3NycjEgPSB2Y3B1LT5hcmNoLnNoYWRvd19zcnIxOworCQl1NjQgbXNyID0ga3ZtcHBjX2dldF9tc3IodmNwdSk7CisJCWt2bXBwY19zZXRfZGFyKHZjcHUsIGt2bXBwY19nZXRfZmF1bHRfZGFyKHZjcHUpKTsKKwkJZHNpc3IgPSAoZHNpc3IgJiB+RFNJU1JfTk9IUFRFKSB8IERTSVNSX1BST1RGQVVMVDsKKwkJa3ZtcHBjX3NldF9kc2lzcih2Y3B1LCBkc2lzcik7CisJCWt2bXBwY19zZXRfbXNyX2Zhc3QodmNwdSwgbXNyIHwgKHNzcnIxICYgMHhmODAwMDAwMFVMTCkpOwogCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgdmVjKTsKIAl9IGVsc2UgaWYgKHBhZ2VfZm91bmQgPT0gLUVJTlZBTCkgewogCQkvKiBQYWdlIG5vdCBmb3VuZCBpbiBndWVzdCBTTEIgKi8KLQkJdmNwdS0+YXJjaC5zaGFyZWQtPmRhciA9IGt2bXBwY19nZXRfZmF1bHRfZGFyKHZjcHUpOworCQlrdm1wcGNfc2V0X2Rhcih2Y3B1LCBrdm1wcGNfZ2V0X2ZhdWx0X2Rhcih2Y3B1KSk7CiAJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCB2ZWMgKyAweDgwKTsKIAl9IGVsc2UgaWYgKCFpc19tbWlvICYmCiAJCSAgIGt2bXBwY192aXNpYmxlX2dmbih2Y3B1LCBwdGUucmFkZHIgPj4gUEFHRV9TSElGVCkpIHsKQEAgLTYwNiw2ICs2MTgsMjUgQEAKIAlrdm1wcGNfcmVjYWxjX3NoYWRvd19tc3IodmNwdSk7CiB9CiAKKy8qIEdpdmUgdXAgZmFjaWxpdHkgKFRBUiAvIEVCQiAvIERTQ1IpICovCitzdGF0aWMgdm9pZCBrdm1wcGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYykKK3sKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAorCWlmICghKHZjcHUtPmFyY2guc2hhZG93X2ZzY3IgJiAoMVVMTCA8PCBmYWMpKSkgeworCQkvKiBGYWNpbGl0eSBub3QgYXZhaWxhYmxlIHRvIHRoZSBndWVzdCwgaWdub3JlIGdpdmV1cCByZXF1ZXN0Ki8KKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZmFjKSB7CisJY2FzZSBGU0NSX1RBUl9MRzoKKwkJdmNwdS0+YXJjaC50YXIgPSBtZnNwcihTUFJOX1RBUik7CisJCW10c3ByKFNQUk5fVEFSLCBjdXJyZW50LT50aHJlYWQudGFyKTsKKwkJdmNwdS0+YXJjaC5zaGFkb3dfZnNjciAmPSB+RlNDUl9UQVI7CisJCWJyZWFrOworCX0KKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IGt2bXBwY19yZWFkX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVsb25nIHNycjAgPSBrdm1wcGNfZ2V0X3BjKHZjcHUpOwpAQCAtNjE0LDExICs2NDUsMTIgQEAKIAogCXJldCA9IGt2bXBwY19sZCh2Y3B1LCAmc3JyMCwgc2l6ZW9mKHUzMiksICZsYXN0X2luc3QsIGZhbHNlKTsKIAlpZiAocmV0ID09IC1FTk9FTlQpIHsKLQkJdWxvbmcgbXNyID0gdmNwdS0+YXJjaC5zaGFyZWQtPm1zcjsKKwkJdWxvbmcgbXNyID0ga3ZtcHBjX2dldF9tc3IodmNwdSk7CiAKIAkJbXNyID0ga3ZtcHBjX3NldF9maWVsZChtc3IsIDMzLCAzMywgMSk7CiAJCW1zciA9IGt2bXBwY19zZXRfZmllbGQobXNyLCAzNCwgMzYsIDApOwotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyID0ga3ZtcHBjX3NldF9maWVsZChtc3IsIDQyLCA0NywgMCk7CisJCW1zciA9IGt2bXBwY19zZXRfZmllbGQobXNyLCA0MiwgNDcsIDApOworCQlrdm1wcGNfc2V0X21zcl9mYXN0KHZjcHUsIG1zcik7CiAJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LM1NfSU5URVJSVVBUX0lOU1RfU1RPUkFHRSk7CiAJCXJldHVybiBFTVVMQVRFX0FHQUlOOwogCX0KQEAgLTY1MSw3ICs2ODMsNyBAQAogCWlmICh2Y3B1LT5hcmNoLmhmbGFncyAmIEJPT0szU19IRkxBR19QQUlSRURfU0lOR0xFKQogCQlyZXR1cm4gUkVTVU1FX0dVRVNUOwogCi0JaWYgKCEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIG1zcikpIHsKKwlpZiAoIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIG1zcikpIHsKIAkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIGV4aXRfbnIpOwogCQlyZXR1cm4gUkVTVU1FX0dVRVNUOwogCX0KQEAgLTY4MywxNiArNzE1LDIwIEBACiAjZW5kaWYKIAogCWlmIChtc3IgJiBNU1JfRlApIHsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWVuYWJsZV9rZXJuZWxfZnAoKTsKIAkJbG9hZF9mcF9zdGF0ZSgmdmNwdS0+YXJjaC5mcCk7CiAJCXQtPmZwX3NhdmVfYXJlYSA9ICZ2Y3B1LT5hcmNoLmZwOworCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KIAogCWlmIChtc3IgJiBNU1JfVkVDKSB7CiAjaWZkZWYgQ09ORklHX0FMVElWRUMKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWVuYWJsZV9rZXJuZWxfYWx0aXZlYygpOwogCQlsb2FkX3ZyX3N0YXRlKCZ2Y3B1LT5hcmNoLnZyKTsKIAkJdC0+dnJfc2F2ZV9hcmVhID0gJnZjcHUtPmFyY2gudnI7CisJCXByZWVtcHRfZW5hYmxlKCk7CiAjZW5kaWYKIAl9CiAKQEAgLTcxNiwxOCArNzUyLDkwIEBACiAJCXJldHVybjsKIAogCWlmIChsb3N0X2V4dCAmIE1TUl9GUCkgeworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJZW5hYmxlX2tlcm5lbF9mcCgpOwogCQlsb2FkX2ZwX3N0YXRlKCZ2Y3B1LT5hcmNoLmZwKTsKKwkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIAlpZiAobG9zdF9leHQgJiBNU1JfVkVDKSB7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCQllbmFibGVfa2VybmVsX2FsdGl2ZWMoKTsKIAkJbG9hZF92cl9zdGF0ZSgmdmNwdS0+YXJjaC52cik7CisJCXByZWVtcHRfZW5hYmxlKCk7CiAJfQogI2VuZGlmCiAJY3VycmVudC0+dGhyZWFkLnJlZ3MtPm1zciB8PSBsb3N0X2V4dDsKIH0KIAorI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CisKK3N0YXRpYyB2b2lkIGt2bXBwY190cmlnZ2VyX2ZhY19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpCit7CisJLyogSW5qZWN0IHRoZSBJbnRlcnJ1cHQgQ2F1c2UgZmllbGQgYW5kIHRyaWdnZXIgYSBndWVzdCBpbnRlcnJ1cHQgKi8KKwl2Y3B1LT5hcmNoLmZzY3IgJj0gfigweGZmVUxMIDw8IDU2KTsKKwl2Y3B1LT5hcmNoLmZzY3IgfD0gKGZhYyA8PCA1Nik7CisJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0szU19JTlRFUlJVUFRfRkFDX1VOQVZBSUwpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZW11bGF0ZV9mYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpCit7CisJZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyID0gRU1VTEFURV9GQUlMOworCisJaWYgKCEoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpKQorCQllciA9IGt2bXBwY19lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUtPnJ1biwgdmNwdSk7CisKKwlpZiAoKGVyICE9IEVNVUxBVEVfRE9ORSkgJiYgKGVyICE9IEVNVUxBVEVfQUdBSU4pKSB7CisJCS8qIENvdWxkbid0IGVtdWxhdGUsIHRyaWdnZXIgaW50ZXJydXB0IGluIGd1ZXN0ICovCisJCWt2bXBwY190cmlnZ2VyX2ZhY19pbnRlcnJ1cHQodmNwdSwgZmFjKTsKKwl9Cit9CisKKy8qIEVuYWJsZSBmYWNpbGl0aWVzIChUQVIsIEVCQiwgRFNDUikgZm9yIHRoZSBndWVzdCAqLworc3RhdGljIGludCBrdm1wcGNfaGFuZGxlX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYykKK3sKKwlib29sIGd1ZXN0X2ZhY19lbmFibGVkOworCUJVR19PTighY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQVJDSF8yMDdTKSk7CisKKwkvKgorCSAqIE5vdCBldmVyeSBmYWNpbGl0eSBpcyBlbmFibGVkIGJ5IEZTQ1IgYml0cywgY2hlY2sgd2hldGhlciB0aGUKKwkgKiBndWVzdCBoYXMgdGhpcyBmYWNpbGl0eSBlbmFibGVkIGF0IGFsbC4KKwkgKi8KKwlzd2l0Y2ggKGZhYykgeworCWNhc2UgRlNDUl9UQVJfTEc6CisJY2FzZSBGU0NSX0VCQl9MRzoKKwkJZ3Vlc3RfZmFjX2VuYWJsZWQgPSAodmNwdS0+YXJjaC5mc2NyICYgKDFVTEwgPDwgZmFjKSk7CisJCWJyZWFrOworCWNhc2UgRlNDUl9UTV9MRzoKKwkJZ3Vlc3RfZmFjX2VuYWJsZWQgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9UTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ3Vlc3RfZmFjX2VuYWJsZWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFndWVzdF9mYWNfZW5hYmxlZCkgeworCQkvKiBGYWNpbGl0eSBub3QgZW5hYmxlZCBieSB0aGUgZ3Vlc3QgKi8KKwkJa3ZtcHBjX3RyaWdnZXJfZmFjX2ludGVycnVwdCh2Y3B1LCBmYWMpOworCQlyZXR1cm4gUkVTVU1FX0dVRVNUOworCX0KKworCXN3aXRjaCAoZmFjKSB7CisJY2FzZSBGU0NSX1RBUl9MRzoKKwkJLyogVEFSIHN3aXRjaGluZyBpc24ndCBsYXp5IGluIExpbnV4IHlldCAqLworCQljdXJyZW50LT50aHJlYWQudGFyID0gbWZzcHIoU1BSTl9UQVIpOworCQltdHNwcihTUFJOX1RBUiwgdmNwdS0+YXJjaC50YXIpOworCQl2Y3B1LT5hcmNoLnNoYWRvd19mc2NyIHw9IEZTQ1JfVEFSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrdm1wcGNfZW11bGF0ZV9mYWModmNwdSwgZmFjKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFJFU1VNRV9HVUVTVDsKK30KKyNlbmRpZgorCiBpbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgdW5zaWduZWQgaW50IGV4aXRfbnIpCiB7CkBAIC03ODQsNyArODkyLDkgQEAKIAkJCWt2bXBwY19tbXVfcHRlX2ZsdXNoKHZjcHUsIGt2bXBwY19nZXRfcGModmNwdSksIH4weEZGRlVMKTsKIAkJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCX0gZWxzZSB7Ci0JCQl2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyIHw9IHNoYWRvd19zcnIxICYgMHg1ODAwMDAwMDsKKwkJCXU2NCBtc3IgPSBrdm1wcGNfZ2V0X21zcih2Y3B1KTsKKwkJCW1zciB8PSBzaGFkb3dfc3JyMSAmIDB4NTgwMDAwMDA7CisJCQlrdm1wcGNfc2V0X21zcl9mYXN0KHZjcHUsIG1zcik7CiAJCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgZXhpdF9ucik7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQl9CkBAIC04MjQsOCArOTM0LDggQEAKIAkJCXIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChydW4sIHZjcHUsIGRhciwgZXhpdF9ucik7CiAJCQlzcmN1X3JlYWRfdW5sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UsIGlkeCk7CiAJCX0gZWxzZSB7Ci0JCQl2Y3B1LT5hcmNoLnNoYXJlZC0+ZGFyID0gZGFyOwotCQkJdmNwdS0+YXJjaC5zaGFyZWQtPmRzaXNyID0gZmF1bHRfZHNpc3I7CisJCQlrdm1wcGNfc2V0X2Rhcih2Y3B1LCBkYXIpOworCQkJa3ZtcHBjX3NldF9kc2lzcih2Y3B1LCBmYXVsdF9kc2lzcik7CiAJCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgZXhpdF9ucik7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQl9CkBAIC04MzMsNyArOTQzLDcgQEAKIAl9CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX0RBVEFfU0VHTUVOVDoKIAkJaWYgKGt2bXBwY19tbXVfbWFwX3NlZ21lbnQodmNwdSwga3ZtcHBjX2dldF9mYXVsdF9kYXIodmNwdSkpIDwgMCkgewotCQkJdmNwdS0+YXJjaC5zaGFyZWQtPmRhciA9IGt2bXBwY19nZXRfZmF1bHRfZGFyKHZjcHUpOworCQkJa3ZtcHBjX3NldF9kYXIodmNwdSwga3ZtcHBjX2dldF9mYXVsdF9kYXIodmNwdSkpOwogCQkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsCiAJCQkJQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NFR01FTlQpOwogCQl9CkBAIC04NzEsNyArOTgxLDcgQEAKIHByb2dyYW1faW50ZXJydXB0OgogCQlmbGFncyA9IHZjcHUtPmFyY2guc2hhZG93X3NycjEgJiAweDFmMDAwMHVsbDsKIAotCQlpZiAodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikgeworCQlpZiAoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpIHsKICNpZmRlZiBFWElUX0RFQlVHCiAJCQlwcmludGsoS0VSTl9JTkZPICJVc2Vyc3BhY2UgdHJpZ2dlcmVkIDB4NzAwIGV4Y2VwdGlvbiBhdCAweCVseCAoMHgleClcbiIsIGt2bXBwY19nZXRfcGModmNwdSksIGt2bXBwY19nZXRfbGFzdF9pbnN0KHZjcHUpKTsKICNlbmRpZgpAQCAtOTEzLDcgKzEwMjMsNyBAQAogCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMOgogCQlpZiAodmNwdS0+YXJjaC5wYXByX2VuYWJsZWQgJiYKIAkJICAgIChrdm1wcGNfZ2V0X2xhc3Rfc2ModmNwdSkgPT0gMHg0NDAwMDAyMikgJiYKLQkJICAgICEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikpIHsKKwkJICAgICEoa3ZtcHBjX2dldF9tc3IodmNwdSkgJiBNU1JfUFIpKSB7CiAJCQkvKiBTQyAxIHBhcHIgaHlwZXJjYWxscyAqLwogCQkJdWxvbmcgY21kID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgMyk7CiAJCQlpbnQgaTsKQEAgLTk0NSw3ICsxMDU1LDcgQEAKIAkJCQlncHJzW2ldID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgaSk7CiAJCQl2Y3B1LT5hcmNoLm9zaV9uZWVkZWQgPSAxOwogCQkJciA9IFJFU1VNRV9IT1NUX05WOwotCQl9IGVsc2UgaWYgKCEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9QUikgJiYKKwkJfSBlbHNlIGlmICghKGt2bXBwY19nZXRfbXNyKHZjcHUpICYgTVNSX1BSKSAmJgogCQkgICAgKCgodTMyKWt2bXBwY19nZXRfZ3ByKHZjcHUsIDApKSA9PSBLVk1fU0NfTUFHSUNfUjApKSB7CiAJCQkvKiBLVk0gUFYgaHlwZXJjYWxscyAqLwogCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgMywga3ZtcHBjX2t2bV9wdih2Y3B1KSk7CkBAIC05ODYsMTQgKzEwOTYsMjYgQEAKIAl9CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX0FMSUdOTUVOVDoKIAkJaWYgKGt2bXBwY19yZWFkX2luc3QodmNwdSkgPT0gRU1VTEFURV9ET05FKSB7Ci0JCQl2Y3B1LT5hcmNoLnNoYXJlZC0+ZHNpc3IgPSBrdm1wcGNfYWxpZ25tZW50X2RzaXNyKHZjcHUsCi0JCQkJa3ZtcHBjX2dldF9sYXN0X2luc3QodmNwdSkpOwotCQkJdmNwdS0+YXJjaC5zaGFyZWQtPmRhciA9IGt2bXBwY19hbGlnbm1lbnRfZGFyKHZjcHUsCi0JCQkJa3ZtcHBjX2dldF9sYXN0X2luc3QodmNwdSkpOworCQkJdTMyIGxhc3RfaW5zdCA9IGt2bXBwY19nZXRfbGFzdF9pbnN0KHZjcHUpOworCQkJdTMyIGRzaXNyOworCQkJdTY0IGRhcjsKKworCQkJZHNpc3IgPSBrdm1wcGNfYWxpZ25tZW50X2RzaXNyKHZjcHUsIGxhc3RfaW5zdCk7CisJCQlkYXIgPSBrdm1wcGNfYWxpZ25tZW50X2Rhcih2Y3B1LCBsYXN0X2luc3QpOworCisJCQlrdm1wcGNfc2V0X2RzaXNyKHZjcHUsIGRzaXNyKTsKKwkJCWt2bXBwY19zZXRfZGFyKHZjcHUsIGRhcik7CisKIAkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKIAkJfQogCQlyID0gUkVTVU1FX0dVRVNUOwogCQlicmVhazsKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAorCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9GQUNfVU5BVkFJTDoKKwkJa3ZtcHBjX2hhbmRsZV9mYWModmNwdSwgdmNwdS0+YXJjaC5zaGFkb3dfZnNjciA+PiA1Nik7CisJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCWJyZWFrOworI2VuZGlmCiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0s6CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX1RSQUNFOgogCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgZXhpdF9ucik7CkBAIC0xMDU0LDcgKzExNzYsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCQlzcmVncy0+dS5zLnBwYzMyLnNyW2ldID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNyW2ldOworCQkJc3JlZ3MtPnUucy5wcGMzMi5zcltpXSA9IGt2bXBwY19nZXRfc3IodmNwdSwgaSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQkJc3JlZ3MtPnUucy5wcGMzMi5pYmF0W2ldID0gdmNwdTNzLT5pYmF0W2ldLnJhdzsKQEAgLTExMTAsNiArMTIzMiwxNSBAQAogCWNhc2UgS1ZNX1JFR19QUENfSElPUjoKIAkJKnZhbCA9IGdldF9yZWdfdmFsKGlkLCB0b19ib29rM3ModmNwdSktPmhpb3IpOwogCQlicmVhazsKKwljYXNlIEtWTV9SRUdfUFBDX0xQQ1I6CisJCS8qCisJCSAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIExQQ1JfSUxFIGJpdAorCQkgKi8KKwkJaWYgKHZjcHUtPmFyY2guaW50cl9tc3IgJiBNU1JfTEUpCisJCQkqdmFsID0gZ2V0X3JlZ192YWwoaWQsIExQQ1JfSUxFKTsKKwkJZWxzZQorCQkJKnZhbCA9IGdldF9yZWdfdmFsKGlkLCAwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMTExOCw2ICsxMjQ5LDE0IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bXBwY19zZXRfbHBjcl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBuZXdfbHBjcikKK3sKKwlpZiAobmV3X2xwY3IgJiBMUENSX0lMRSkKKwkJdmNwdS0+YXJjaC5pbnRyX21zciB8PSBNU1JfTEU7CisJZWxzZQorCQl2Y3B1LT5hcmNoLmludHJfbXNyICY9IH5NU1JfTEU7Cit9CisKIHN0YXRpYyBpbnQga3ZtcHBjX3NldF9vbmVfcmVnX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGlkLAogCQkJCSB1bmlvbiBrdm1wcGNfb25lX3JlZyAqdmFsKQogewpAQCAtMTEyOCw2ICsxMjY3LDkgQEAKIAkJdG9fYm9vazNzKHZjcHUpLT5oaW9yID0gc2V0X3JlZ192YWwoaWQsICp2YWwpOwogCQl0b19ib29rM3ModmNwdSktPmhpb3JfZXhwbGljaXQgPSB0cnVlOwogCQlicmVhazsKKwljYXNlIEtWTV9SRUdfUFBDX0xQQ1I6CisJCWt2bXBwY19zZXRfbHBjcl9wcih2Y3B1LCBzZXRfcmVnX3ZhbChpZCwgKnZhbCkpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC0xMTcwLDggKzEzMTIsMTQgQEAKIAkJZ290byB1bmluaXRfdmNwdTsKIAkvKiB0aGUgcmVhbCBzaGFyZWQgcGFnZSBmaWxscyB0aGUgbGFzdCA0ayBvZiBvdXIgcGFnZSAqLwogCXZjcHUtPmFyY2guc2hhcmVkID0gKHZvaWQgKikocCArIFBBR0VfU0laRSAtIDQwOTYpOwotCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKKwkvKiBBbHdheXMgc3RhcnQgdGhlIHNoYXJlZCBzdHJ1Y3QgaW4gbmF0aXZlIGVuZGlhbiBtb2RlICovCisjaWZkZWYgX19CSUdfRU5ESUFOX18KKyAgICAgICAgdmNwdS0+YXJjaC5zaGFyZWRfYmlnX2VuZGlhbiA9IHRydWU7CisjZWxzZQorICAgICAgICB2Y3B1LT5hcmNoLnNoYXJlZF9iaWdfZW5kaWFuID0gZmFsc2U7CisjZW5kaWYKKwogCS8qCiAJICogRGVmYXVsdCB0byB0aGUgc2FtZSBhcyB0aGUgaG9zdCBpZiB3ZSdyZSBvbiBzdWZmaWNpZW50bHkKIAkgKiByZWNlbnQgbWFjaGluZSB0aGF0IHdlIGhhdmUgMVRCIHNlZ21lbnRzOwpAQCAtMTE4MCw2ICsxMzI4LDcgQEAKIAl2Y3B1LT5hcmNoLnB2ciA9IDB4M0MwMzAxOwogCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xVF9TRUdNRU5UKSkKIAkJdmNwdS0+YXJjaC5wdnIgPSBtZnNwcihTUFJOX1BWUik7CisJdmNwdS0+YXJjaC5pbnRyX21zciA9IE1TUl9TRjsKICNlbHNlCiAJLyogZGVmYXVsdCB0byBib29rM3NfMzIgKDc1MCkgKi8KIAl2Y3B1LT5hcmNoLnB2ciA9IDB4ODQyMDI7CkBAIC0xMTg3LDcgKzEzMzYsNyBAQAogCWt2bXBwY19zZXRfcHZyX3ByKHZjcHUsIHZjcHUtPmFyY2gucHZyKTsKIAl2Y3B1LT5hcmNoLnNsYl9uciA9IDY0OwogCi0JdmNwdS0+YXJjaC5zaGFkb3dfbXNyID0gTVNSX1VTRVI2NDsKKwl2Y3B1LT5hcmNoLnNoYWRvd19tc3IgPSBNU1JfVVNFUjY0ICYgfk1TUl9MRTsKIAogCWVyciA9IGt2bXBwY19tbXVfaW5pdCh2Y3B1KTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEyNjQsNyArMTQxMyw3IEBACiAjZW5kaWYKIAogCS8qIFByZWxvYWQgRlBVIGlmIGl0J3MgZW5hYmxlZCAqLwotCWlmICh2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyICYgTVNSX0ZQKQorCWlmIChrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9GUCkKIAkJa3ZtcHBjX2hhbmRsZV9leHQodmNwdSwgQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMLCBNU1JfRlApOwogCiAJa3ZtcHBjX2ZpeF9lZV9iZWZvcmVfZW50cnkoKTsKQEAgLTEyNzcsNiArMTQyNiw5IEBACiAJLyogTWFrZSBzdXJlIHdlIHNhdmUgdGhlIGd1ZXN0IEZQVS9BbHRpdmVjL1ZTWCBzdGF0ZSAqLwogCWt2bXBwY19naXZldXBfZXh0KHZjcHUsIE1TUl9GUCB8IE1TUl9WRUMgfCBNU1JfVlNYKTsKIAorCS8qIE1ha2Ugc3VyZSB3ZSBzYXZlIHRoZSBndWVzdCBUQVIvRUJCL0RTQ1Igc3RhdGUgKi8KKwlrdm1wcGNfZ2l2ZXVwX2ZhYyh2Y3B1LCBGU0NSX1RBUl9MRyk7CisKIG91dDoKIAl2Y3B1LT5tb2RlID0gT1VUU0lERV9HVUVTVF9NT0RFOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wcl9wYXByLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wcl9wYXByLmMKaW5kZXggNWVmYTk3Yi4uNTJhNjNiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHJfcGFwci5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByX3BhcHIuYwpAQCAtNTcsNyArNTcsNyBAQAogCQlmb3IgKGkgPSAwOyA7ICsraSkgewogCQkJaWYgKGkgPT0gOCkKIAkJCQlnb3RvIGRvbmU7Ci0JCQlpZiAoKCpocHRlICYgSFBURV9WX1ZBTElEKSA9PSAwKQorCQkJaWYgKChiZTY0X3RvX2NwdSgqaHB0ZSkgJiBIUFRFX1ZfVkFMSUQpID09IDApCiAJCQkJYnJlYWs7CiAJCQlocHRlICs9IDI7CiAJCX0KQEAgLTY3LDggKzY3LDggQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQlocHRlWzBdID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgNik7Ci0JaHB0ZVsxXSA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIDcpOworCWhwdGVbMF0gPSBjcHVfdG9fYmU2NChrdm1wcGNfZ2V0X2dwcih2Y3B1LCA2KSk7CisJaHB0ZVsxXSA9IGNwdV90b19iZTY0KGt2bXBwY19nZXRfZ3ByKHZjcHUsIDcpKTsKIAlwdGVnX2FkZHIgKz0gaSAqIEhQVEVfU0laRTsKIAljb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopcHRlZ19hZGRyLCBocHRlLCBIUFRFX1NJWkUpOwogCWt2bXBwY19zZXRfZ3ByKHZjcHUsIDQsIHB0ZV9pbmRleCB8IGkpOwpAQCAtOTMsNiArOTMsOCBAQAogCXB0ZWcgPSBnZXRfcHRlZ19hZGRyKHZjcHUsIHB0ZV9pbmRleCk7CiAJbXV0ZXhfbG9jaygmdmNwdS0+a3ZtLT5hcmNoLmhwdF9tdXRleCk7CiAJY29weV9mcm9tX3VzZXIocHRlLCAodm9pZCBfX3VzZXIgKilwdGVnLCBzaXplb2YocHRlKSk7CisJcHRlWzBdID0gYmU2NF90b19jcHUocHRlWzBdKTsKKwlwdGVbMV0gPSBiZTY0X3RvX2NwdShwdGVbMV0pOwogCiAJcmV0ID0gSF9OT1RfRk9VTkQ7CiAJaWYgKChwdGVbMF0gJiBIUFRFX1ZfVkFMSUQpID09IDAgfHwKQEAgLTE2OSw2ICsxNzEsOCBAQAogCiAJCXB0ZWcgPSBnZXRfcHRlZ19hZGRyKHZjcHUsIHRzaCAmIEhfQlVMS19SRU1PVkVfUFRFWCk7CiAJCWNvcHlfZnJvbV91c2VyKHB0ZSwgKHZvaWQgX191c2VyICopcHRlZywgc2l6ZW9mKHB0ZSkpOworCQlwdGVbMF0gPSBiZTY0X3RvX2NwdShwdGVbMF0pOworCQlwdGVbMV0gPSBiZTY0X3RvX2NwdShwdGVbMV0pOwogCiAJCS8qIHRzbCA9IEFWUE4gKi8KIAkJZmxhZ3MgPSAodHNoICYgSF9CVUxLX1JFTU9WRV9GTEFHUykgPj4gMjY7CkBAIC0yMDcsNiArMjExLDggQEAKIAlwdGVnID0gZ2V0X3B0ZWdfYWRkcih2Y3B1LCBwdGVfaW5kZXgpOwogCW11dGV4X2xvY2soJnZjcHUtPmt2bS0+YXJjaC5ocHRfbXV0ZXgpOwogCWNvcHlfZnJvbV91c2VyKHB0ZSwgKHZvaWQgX191c2VyICopcHRlZywgc2l6ZW9mKHB0ZSkpOworCXB0ZVswXSA9IGJlNjRfdG9fY3B1KHB0ZVswXSk7CisJcHRlWzFdID0gYmU2NF90b19jcHUocHRlWzFdKTsKIAogCXJldCA9IEhfTk9UX0ZPVU5EOwogCWlmICgocHRlWzBdICYgSFBURV9WX1ZBTElEKSA9PSAwIHx8CkBAIC0yMjUsNiArMjMxLDggQEAKIAogCXJiID0gY29tcHV0ZV90bGJpZV9yYih2LCByLCBwdGVfaW5kZXgpOwogCXZjcHUtPmFyY2gubW11LnRsYmllKHZjcHUsIHJiLCByYiAmIDEgPyB0cnVlIDogZmFsc2UpOworCXB0ZVswXSA9IGNwdV90b19iZTY0KHB0ZVswXSk7CisJcHRlWzFdID0gY3B1X3RvX2JlNjQocHRlWzFdKTsKIAljb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopcHRlZywgcHRlLCBzaXplb2YocHRlKSk7CiAJcmV0ID0gSF9TVUNDRVNTOwogCkBAIC0yNzAsNyArMjc4LDcgQEAKIAljYXNlIEhfUFVUX1RDRToKIAkJcmV0dXJuIGt2bXBwY19oX3ByX3B1dF90Y2UodmNwdSk7CiAJY2FzZSBIX0NFREU6Ci0JCXZjcHUtPmFyY2guc2hhcmVkLT5tc3IgfD0gTVNSX0VFOworCQlrdm1wcGNfc2V0X21zcl9mYXN0KHZjcHUsIGt2bXBwY19nZXRfbXNyKHZjcHUpIHwgTVNSX0VFKTsKIAkJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7CiAJCWNsZWFyX2JpdChLVk1fUkVRX1VOSEFMVCwgJnZjcHUtPnJlcXVlc3RzKTsKIAkJdmNwdS0+c3RhdC5oYWx0X3dha2V1cCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcnRhcy5jCmluZGV4IDdhMDUzMTUuLmVkYjE0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ydGFzLmMKQEAgLTIwNSw2ICsyMDUsMzIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bXBwY19ydGFzX3N3YXBfZW5kaWFuX2luKHN0cnVjdCBydGFzX2FyZ3MgKmFyZ3MpCit7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlpbnQgaTsKKworCWFyZ3MtPnRva2VuID0gYmUzMl90b19jcHUoYXJncy0+dG9rZW4pOworCWFyZ3MtPm5hcmdzID0gYmUzMl90b19jcHUoYXJncy0+bmFyZ3MpOworCWFyZ3MtPm5yZXQgPSBiZTMyX3RvX2NwdShhcmdzLT5ucmV0KTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bmFyZ3M7IGkrKykKKwkJYXJncy0+YXJnc1tpXSA9IGJlMzJfdG9fY3B1KGFyZ3MtPmFyZ3NbaV0pOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19ydGFzX3N3YXBfZW5kaWFuX291dChzdHJ1Y3QgcnRhc19hcmdzICphcmdzKQoreworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bnJldDsgaSsrKQorCQlhcmdzLT5hcmdzW2ldID0gY3B1X3RvX2JlMzIoYXJncy0+YXJnc1tpXSk7CisJYXJncy0+dG9rZW4gPSBjcHVfdG9fYmUzMihhcmdzLT50b2tlbik7CisJYXJncy0+bmFyZ3MgPSBjcHVfdG9fYmUzMihhcmdzLT5uYXJncyk7CisJYXJncy0+bnJldCA9IGNwdV90b19iZTMyKGFyZ3MtPm5yZXQpOworI2VuZGlmCit9CisKIGludCBrdm1wcGNfcnRhc19oY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHJ0YXNfdG9rZW5fZGVmaW5pdGlvbiAqZDsKQEAgLTIyMyw2ICsyNDksOCBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCisJa3ZtcHBjX3J0YXNfc3dhcF9lbmRpYW5faW4oJmFyZ3MpOworCiAJLyoKIAkgKiBhcmdzLT5yZXRzIGlzIGEgcG9pbnRlciBpbnRvIGFyZ3MtPmFyZ3MuIE5vdyB0aGF0IHdlJ3ZlCiAJICogY29waWVkIGFyZ3Mgd2UgbmVlZCB0byBmaXggaXQgdXAgdG8gcG9pbnQgaW50byBvdXIgY29weSwKQEAgLTI0Nyw2ICsyNzUsNyBAQAogCiAJaWYgKHJjID09IDApIHsKIAkJYXJncy5yZXRzID0gb3JpZ19yZXRzOworCQlrdm1wcGNfcnRhc19zd2FwX2VuZGlhbl9vdXQoJmFyZ3MpOwogCQlyYyA9IGt2bV93cml0ZV9ndWVzdCh2Y3B1LT5rdm0sIGFyZ3NfcGh5cywgJmFyZ3MsIHNpemVvZihhcmdzKSk7CiAJCWlmIChyYykKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUwppbmRleCAxZTBjYzJhLi5hY2VlMzdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19zZWdtZW50LlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfc2VnbWVudC5TCkBAIC05MCw2ICs5MCwxNSBAQAogCUxPQURfR1VFU1RfU0VHTUVOVFMKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CitCRUdJTl9GVFJfU0VDVElPTgorCS8qIFNhdmUgaG9zdCBGU0NSICovCisJbWZzcHIJcjgsIFNQUk5fRlNDUgorCXN0ZAlyOCwgSFNUQVRFX0hPU1RfRlNDUihyMTMpCisJLyogU2V0IEZTQ1IgZHVyaW5nIGd1ZXN0IGV4ZWN1dGlvbiAqLworCWxkCXI5LCBTVkNQVV9TSEFET1dfRlNDUihyMTMpCisJbXRzcHIJU1BSTl9GU0NSLCByOQorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8yMDdTKQorCiAJLyogU29tZSBndWVzdHMgbWF5IG5lZWQgdG8gaGF2ZSBkY2J6IHNldCB0byAzMiBieXRlIGxlbmd0aC4KIAkgKgogCSAqIFVzdWFsbHkgd2UgZW5zdXJlIHRoYXQgYnkgcGF0Y2hpbmcgdGhlIGd1ZXN0J3MgaW5zdHJ1Y3Rpb25zCkBAIC0yNTUsNiArMjY0LDEwIEBACiAJY21wd2kJcjEyLCBCT09LM1NfSU5URVJSVVBUX0hfRU1VTF9BU1NJU1QKIAliZXEtCWxkX2xhc3RfaW5zdAogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfSFZNT0RFKQorQkVHSU5fRlRSX1NFQ1RJT04KKwljbXB3aQlyMTIsIEJPT0szU19JTlRFUlJVUFRfRkFDX1VOQVZBSUwKKwliZXEtCWxkX2xhc3RfaW5zdAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8yMDdTKQogI2VuZGlmCiAKIAliCW5vX2xkX2xhc3RfaW5zdApAQCAtMzExLDYgKzMyNCwxOCBAQAogCiBub19kY2J6MzJfb2ZmOgogCitCRUdJTl9GVFJfU0VDVElPTgorCS8qIFNhdmUgZ3Vlc3QgRlNDUiBvbiBhIEZBQ19VTkFWQUlMIGludGVycnVwdCAqLworCWNtcHdpCXIxMiwgQk9PSzNTX0lOVEVSUlVQVF9GQUNfVU5BVkFJTAorCWJuZSsJbm9fZnNjcl9zYXZlCisJbWZzcHIJcjcsIFNQUk5fRlNDUgorCXN0ZAlyNywgU1ZDUFVfU0hBRE9XX0ZTQ1IocjEzKQorbm9fZnNjcl9zYXZlOgorCS8qIFJlc3RvcmUgaG9zdCBGU0NSICovCisJbGQJcjgsIEhTVEFURV9IT1NUX0ZTQ1IocjEzKQorCW10c3ByCVNQUk5fRlNDUiwgcjgKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FSQ0hfMjA3UykKKwogI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNTXzY0ICovCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKaW5kZXggODliN2Y4Mi4uMDAyZDUxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYm9va2UuaCIKICNpbmNsdWRlICJlNTAwLmgiCiAKKyNkZWZpbmUgWE9QX0RDQlRMUyAgMTY2CiAjZGVmaW5lIFhPUF9NU0dTTkQgIDIwNgogI2RlZmluZSBYT1BfTVNHQ0xSICAyMzgKICNkZWZpbmUgWE9QX1RMQklWQVggNzg2CkBAIC0xMDMsNiArMTA0LDE1IEBACiAJcmV0dXJuIGVtdWxhdGVkOwogfQogCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX2VtdWxfZGNidGxzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCS8qIEFsd2F5cyBmYWlsIHRvIGxvY2sgdGhlIGNhY2hlICovCisJdmNwdV9lNTAwLT5sMWNzcjAgfD0gTDFDU1IwX0NVTDsKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCiBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9vcF9lNTAwKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQl1bnNpZ25lZCBpbnQgaW5zdCwgaW50ICphZHZhbmNlKQogewpAQCAtMTE2LDYgKzEyNiwxMCBAQAogCWNhc2UgMzE6CiAJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgewogCisJCWNhc2UgWE9QX0RDQlRMUzoKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF9kY2J0bHModmNwdSk7CisJCQlicmVhazsKKwogI2lmZGVmIENPTkZJR19LVk1fRTUwME1DCiAJCWNhc2UgWE9QX01TR1NORDoKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF9tc2dzbmQodmNwdSwgcmIpOwpAQCAtMjIyLDYgKzIzNiw3IEBACiAJCWJyZWFrOwogCWNhc2UgU1BSTl9MMUNTUjE6CiAJCXZjcHVfZTUwMC0+bDFjc3IxID0gc3ByX3ZhbDsKKwkJdmNwdV9lNTAwLT5sMWNzcjEgJj0gfihMMUNTUjFfSUNGSSB8IEwxQ1NSMV9JQ0xGUik7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9ISUQwOgogCQl2Y3B1X2U1MDAtPmhpZDAgPSBzcHJfdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwppbmRleCBjMmI4ODdiLi5kYTg2ZDliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwpAQCAtOTcsMTAgKzk3LDEwIEBACiAKIAlzd2l0Y2ggKHNwcm4pIHsKIAljYXNlIFNQUk5fU1JSMDoKLQkJdmNwdS0+YXJjaC5zaGFyZWQtPnNycjAgPSBzcHJfdmFsOworCQlrdm1wcGNfc2V0X3NycjAodmNwdSwgc3ByX3ZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9TUlIxOgotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+c3JyMSA9IHNwcl92YWw7CisJCWt2bXBwY19zZXRfc3JyMSh2Y3B1LCBzcHJfdmFsKTsKIAkJYnJlYWs7CiAKIAkvKiBYWFggV2UgbmVlZCB0byBjb250ZXh0LXN3aXRjaCB0aGUgdGltZWJhc2UgZm9yCkBAIC0xMTQsMTYgKzExNCwxNiBAQAogCQlicmVhazsKIAogCWNhc2UgU1BSTl9TUFJHMDoKLQkJdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcwID0gc3ByX3ZhbDsKKwkJa3ZtcHBjX3NldF9zcHJnMCh2Y3B1LCBzcHJfdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX1NQUkcxOgotCQl2Y3B1LT5hcmNoLnNoYXJlZC0+c3ByZzEgPSBzcHJfdmFsOworCQlrdm1wcGNfc2V0X3NwcmcxKHZjcHUsIHNwcl92YWwpOwogCQlicmVhazsKIAljYXNlIFNQUk5fU1BSRzI6Ci0JCXZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMiA9IHNwcl92YWw7CisJCWt2bXBwY19zZXRfc3ByZzIodmNwdSwgc3ByX3ZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9TUFJHMzoKLQkJdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmczID0gc3ByX3ZhbDsKKwkJa3ZtcHBjX3NldF9zcHJnMyh2Y3B1LCBzcHJfdmFsKTsKIAkJYnJlYWs7CiAKIAkvKiBQSVIgY2FuIGxlZ2FsbHkgYmUgd3JpdHRlbiwgYnV0IHdlIGlnbm9yZSBpdCAqLwpAQCAtMTUwLDEwICsxNTAsMTAgQEAKIAogCXN3aXRjaCAoc3BybikgewogCWNhc2UgU1BSTl9TUlIwOgotCQlzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNycjA7CisJCXNwcl92YWwgPSBrdm1wcGNfZ2V0X3NycjAodmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9TUlIxOgotCQlzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNycjE7CisJCXNwcl92YWwgPSBrdm1wcGNfZ2V0X3NycjEodmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9QVlI6CiAJCXNwcl92YWwgPSB2Y3B1LT5hcmNoLnB2cjsKQEAgLTE3MywxNiArMTczLDE2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTUFJOX1NQUkcwOgotCQlzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcwOworCQlzcHJfdmFsID0ga3ZtcHBjX2dldF9zcHJnMCh2Y3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX1NQUkcxOgotCQlzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcxOworCQlzcHJfdmFsID0ga3ZtcHBjX2dldF9zcHJnMSh2Y3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX1NQUkcyOgotCQlzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmcyOworCQlzcHJfdmFsID0ga3ZtcHBjX2dldF9zcHJnMih2Y3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX1NQUkczOgotCQlzcHJfdmFsID0gdmNwdS0+YXJjaC5zaGFyZWQtPnNwcmczOworCQlzcHJfdmFsID0ga3ZtcHBjX2dldF9zcHJnMyh2Y3B1KTsKIAkJYnJlYWs7CiAJLyogTm90ZTogU1BSRzQtNyBhcmUgdXNlci1yZWFkYWJsZSwgc28gd2UgZG9uJ3QgZ2V0CiAJICogYSB0cmFwLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9tcGljLmMgYi9hcmNoL3Bvd2VycGMva3ZtL21waWMuYwppbmRleCBlZmJkOTk2Li5iNjhkMGRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL21waWMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL21waWMuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiAJCQkJICAgICAgdTMyIHZhbCwgaW50IGlkeCk7CiBzdGF0aWMgaW50IG9wZW5waWNfY3B1X3JlYWRfaW50ZXJuYWwodm9pZCAqb3BhcXVlLCBncGFfdCBhZGRyLAogCQkJCSAgICAgdTMyICpwdHIsIGludCBpZHgpOworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX0lSUXJlZ19pZHIoc3RydWN0IG9wZW5waWMgKm9wcCwgaW50IG5fSVJRLAorCQkJCSAgICB1aW50MzJfdCB2YWwpOwogCiBlbnVtIGlycV90eXBlIHsKIAlJUlFfVFlQRV9OT1JNQUwgPSAwLApAQCAtNTI4LDcgKzUzMCw2IEBACiAJLyogSW5pdGlhbGlzZSBJUlEgc291cmNlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBvcHAtPm1heF9pcnE7IGkrKykgewogCQlvcHAtPnNyY1tpXS5pdnByID0gb3BwLT5pdnByX3Jlc2V0OwotCQlvcHAtPnNyY1tpXS5pZHIgPSBvcHAtPmlkcl9yZXNldDsKIAogCQlzd2l0Y2ggKG9wcC0+c3JjW2ldLnR5cGUpIHsKIAkJY2FzZSBJUlFfVFlQRV9OT1JNQUw6CkBAIC01NDMsNiArNTQ0LDggQEAKIAkJY2FzZSBJUlFfVFlQRV9GU0xTUEVDSUFMOgogCQkJYnJlYWs7CiAJCX0KKworCQl3cml0ZV9JUlFyZWdfaWRyKG9wcCwgaSwgb3BwLT5pZHJfcmVzZXQpOwogCX0KIAkvKiBJbml0aWFsaXNlIElSUSBkZXN0aW5hdGlvbnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NQVTsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDNjZjU0MWEuLmJhYjIwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC0xMjUsNiArMTI1LDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1wcGNfcHJlcGFyZV90b19lbnRlcik7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KSAmJiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFKQorc3RhdGljIHZvaWQga3ZtcHBjX3N3YWJfc2hhcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaF9zaGFyZWQgKnNoYXJlZCA9IHZjcHUtPmFyY2guc2hhcmVkOworCWludCBpOworCisJc2hhcmVkLT5zcHJnMCA9IHN3YWI2NChzaGFyZWQtPnNwcmcwKTsKKwlzaGFyZWQtPnNwcmcxID0gc3dhYjY0KHNoYXJlZC0+c3ByZzEpOworCXNoYXJlZC0+c3ByZzIgPSBzd2FiNjQoc2hhcmVkLT5zcHJnMik7CisJc2hhcmVkLT5zcHJnMyA9IHN3YWI2NChzaGFyZWQtPnNwcmczKTsKKwlzaGFyZWQtPnNycjAgPSBzd2FiNjQoc2hhcmVkLT5zcnIwKTsKKwlzaGFyZWQtPnNycjEgPSBzd2FiNjQoc2hhcmVkLT5zcnIxKTsKKwlzaGFyZWQtPmRhciA9IHN3YWI2NChzaGFyZWQtPmRhcik7CisJc2hhcmVkLT5tc3IgPSBzd2FiNjQoc2hhcmVkLT5tc3IpOworCXNoYXJlZC0+ZHNpc3IgPSBzd2FiMzIoc2hhcmVkLT5kc2lzcik7CisJc2hhcmVkLT5pbnRfcGVuZGluZyA9IHN3YWIzMihzaGFyZWQtPmludF9wZW5kaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaGFyZWQtPnNyKTsgaSsrKQorCQlzaGFyZWQtPnNyW2ldID0gc3dhYjMyKHNoYXJlZC0+c3JbaV0pOworfQorI2VuZGlmCisKIGludCBrdm1wcGNfa3ZtX3B2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgbnIgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCAxMSk7CkBAIC0xMzUsNyArMTU2LDcgQEAKIAl1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIHBhcmFtNCA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIDYpOwogCXVuc2lnbmVkIGxvbmcgcjIgPSAwOwogCi0JaWYgKCEodmNwdS0+YXJjaC5zaGFyZWQtPm1zciAmIE1TUl9TRikpIHsKKwlpZiAoIShrdm1wcGNfZ2V0X21zcih2Y3B1KSAmIE1TUl9TRikpIHsKIAkJLyogMzIgYml0IG1vZGUgKi8KIAkJcGFyYW0xICY9IDB4ZmZmZmZmZmY7CiAJCXBhcmFtMiAmPSAweGZmZmZmZmZmOwpAQCAtMTQ2LDggKzE2NywyOCBAQAogCXN3aXRjaCAobnIpIHsKIAljYXNlIEtWTV9IQ0FMTF9UT0tFTihLVk1fSENfUFBDX01BUF9NQUdJQ19QQUdFKToKIAl7Ci0JCXZjcHUtPmFyY2gubWFnaWNfcGFnZV9wYSA9IHBhcmFtMTsKLQkJdmNwdS0+YXJjaC5tYWdpY19wYWdlX2VhID0gcGFyYW0yOworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfNjQpICYmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfUFJfUE9TU0lCTEUpCisJCS8qIEJvb2szUyBjYW4gYmUgbGl0dGxlIGVuZGlhbiwgZmluZCBpdCBvdXQgaGVyZSAqLworCQlpbnQgc2hhcmVkX2JpZ19lbmRpYW4gPSB0cnVlOworCQlpZiAodmNwdS0+YXJjaC5pbnRyX21zciAmIE1TUl9MRSkKKwkJCXNoYXJlZF9iaWdfZW5kaWFuID0gZmFsc2U7CisJCWlmIChzaGFyZWRfYmlnX2VuZGlhbiAhPSB2Y3B1LT5hcmNoLnNoYXJlZF9iaWdfZW5kaWFuKQorCQkJa3ZtcHBjX3N3YWJfc2hhcmVkKHZjcHUpOworCQl2Y3B1LT5hcmNoLnNoYXJlZF9iaWdfZW5kaWFuID0gc2hhcmVkX2JpZ19lbmRpYW47CisjZW5kaWYKKworCQlpZiAoIShwYXJhbTIgJiBNQUdJQ19QQUdFX0ZMQUdfTk9UX01BUFBFRF9OWCkpIHsKKwkJCS8qCisJCQkgKiBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgTGludXggbWFnaWMgcGFnZSBjb2RlIGhhZAorCQkJICogYSBidWcgd2hlcmUgdGhleSB3b3VsZCBtYXAgdGhlaXIgdHJhbXBvbGluZSBjb2RlCisJCQkgKiBOWC4gSWYgdGhhdCdzIHRoZSBjYXNlLCByZW1vdmUgIVBSIE5YIGNhcGFiaWxpdHkuCisJCQkgKi8KKwkJCXZjcHUtPmFyY2guZGlzYWJsZV9rZXJuZWxfbnggPSB0cnVlOworCQkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7CisJCX0KKworCQl2Y3B1LT5hcmNoLm1hZ2ljX3BhZ2VfcGEgPSBwYXJhbTEgJiB+MHhmZmZVTEw7CisJCXZjcHUtPmFyY2gubWFnaWNfcGFnZV9lYSA9IHBhcmFtMiAmIH4weGZmZlVMTDsKIAogCQlyMiA9IEtWTV9NQUdJQ19GRUFUX1NSIHwgS1ZNX01BR0lDX0ZFQVRfTUFTMF9UT19TUFJHNzsKIApAQCAtMzc1LDYgKzQxNiw3IEBACiAJY2FzZSBLVk1fQ0FQX1NQQVBSX1RDRToKIAljYXNlIEtWTV9DQVBfUFBDX0FMTE9DX0hUQUI6CiAJY2FzZSBLVk1fQ0FQX1BQQ19SVEFTOgorCWNhc2UgS1ZNX0NBUF9QUENfRklYVVBfSENBTEw6CiAjaWZkZWYgQ09ORklHX0tWTV9YSUNTCiAJY2FzZSBLVk1fQ0FQX0lSUV9YSUNTOgogI2VuZGlmCkBAIC0xMDE1LDEwICsxMDU3LDEwIEBACiAJdTMyIGluc3Rfbm9wID0gMHg2MDAwMDAwMDsKICNpZmRlZiBDT05GSUdfS1ZNX0JPT0tFX0hWCiAJdTMyIGluc3Rfc2MxID0gMHg0NDAwMDAyMjsKLQlwdmluZm8tPmhjYWxsWzBdID0gaW5zdF9zYzE7Ci0JcHZpbmZvLT5oY2FsbFsxXSA9IGluc3Rfbm9wOwotCXB2aW5mby0+aGNhbGxbMl0gPSBpbnN0X25vcDsKLQlwdmluZm8tPmhjYWxsWzNdID0gaW5zdF9ub3A7CisJcHZpbmZvLT5oY2FsbFswXSA9IGNwdV90b19iZTMyKGluc3Rfc2MxKTsKKwlwdmluZm8tPmhjYWxsWzFdID0gY3B1X3RvX2JlMzIoaW5zdF9ub3ApOworCXB2aW5mby0+aGNhbGxbMl0gPSBjcHVfdG9fYmUzMihpbnN0X25vcCk7CisJcHZpbmZvLT5oY2FsbFszXSA9IGNwdV90b19iZTMyKGluc3Rfbm9wKTsKICNlbHNlCiAJdTMyIGluc3RfbGlzID0gMHgzYzAwMDAwMDsKIAl1MzIgaW5zdF9vcmkgPSAweDYwMDAwMDAwOwpAQCAtMTAzNCwxMCArMTA3NiwxMCBAQAogCSAqICAgIHNjCiAJICogICAgbm9wCiAJICovCi0JcHZpbmZvLT5oY2FsbFswXSA9IGluc3RfbGlzIHwgKChLVk1fU0NfTUFHSUNfUjAgPj4gMTYpICYgaW5zdF9pbW1fbWFzayk7Ci0JcHZpbmZvLT5oY2FsbFsxXSA9IGluc3Rfb3JpIHwgKEtWTV9TQ19NQUdJQ19SMCAmIGluc3RfaW1tX21hc2spOwotCXB2aW5mby0+aGNhbGxbMl0gPSBpbnN0X3NjOwotCXB2aW5mby0+aGNhbGxbM10gPSBpbnN0X25vcDsKKwlwdmluZm8tPmhjYWxsWzBdID0gY3B1X3RvX2JlMzIoaW5zdF9saXMgfCAoKEtWTV9TQ19NQUdJQ19SMCA+PiAxNikgJiBpbnN0X2ltbV9tYXNrKSk7CisJcHZpbmZvLT5oY2FsbFsxXSA9IGNwdV90b19iZTMyKGluc3Rfb3JpIHwgKEtWTV9TQ19NQUdJQ19SMCAmIGluc3RfaW1tX21hc2spKTsKKwlwdmluZm8tPmhjYWxsWzJdID0gY3B1X3RvX2JlMzIoaW5zdF9zYyk7CisJcHZpbmZvLT5oY2FsbFszXSA9IGNwdV90b19iZTMyKGluc3Rfbm9wKTsKICNlbmRpZgogCiAJcHZpbmZvLT5mbGFncyA9IEtWTV9QUENfUFZJTkZPX0ZMQUdTX0VWX0lETEU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RyYWNlX3ByLmggYi9hcmNoL3Bvd2VycGMva3ZtL3RyYWNlX3ByLmgKaW5kZXggOGIyMmU0Ny4uZTEzNTdjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90cmFjZV9wci5oCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdHJhY2VfcHIuaApAQCAtMjU1LDcgKzI1NSw3IEBACiAJCV9fZW50cnktPmV4aXRfbnIJPSBleGl0X25yOwogCQlfX2VudHJ5LT5wYwkJPSBrdm1wcGNfZ2V0X3BjKHZjcHUpOwogCQlfX2VudHJ5LT5kYXIJCT0ga3ZtcHBjX2dldF9mYXVsdF9kYXIodmNwdSk7Ci0JCV9fZW50cnktPm1zcgkJPSB2Y3B1LT5hcmNoLnNoYXJlZC0+bXNyOworCQlfX2VudHJ5LT5tc3IJCT0ga3ZtcHBjX2dldF9tc3IodmNwdSk7CiAJCV9fZW50cnktPnNycjEJCT0gdmNwdS0+YXJjaC5zaGFkb3dfc3JyMTsKIAkJX19lbnRyeS0+bGFzdF9pbnN0CT0gdmNwdS0+YXJjaC5sYXN0X2luc3Q7CiAJKSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYyBiL2FyY2gvcG93ZXJwYy9tbS9zbGIuYwppbmRleCA5ZDFkMzNjLi45NjRhNWY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYi5jCkBAIC05Nyw3ICs5Nyw3IEBACiBzdGF0aWMgdm9pZCBfX3NsYl9mbHVzaF9hbmRfcmVib2x0KHZvaWQpCiB7CiAJLyogSWYgeW91IGNoYW5nZSB0aGlzIG1ha2Ugc3VyZSB5b3UgY2hhbmdlIFNMQl9OVU1fQk9MVEVECi0JICogYXBwcm9wcmlhdGVseSB0b28uICovCisJICogYW5kIFBSIEtWTSBhcHByb3ByaWF0ZWx5IHRvby4gKi8KIAl1bnNpZ25lZCBsb25nIGxpbmVhcl9sbHAsIHZtYWxsb2NfbGxwLCBsZmxhZ3MsIHZmbGFnczsKIAl1bnNpZ25lZCBsb25nIGtzcF9lc2lkX2RhdGEsIGtzcF92c2lkX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggZDY4ZmUzNC4uYmI2MzQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTYwLDcgKzYwLDYgQEAKIAogY29uZmlnIFMzOTAKIAlkZWZfYm9vbCB5Ci0Jc2VsZWN0IEFSQ0hfRElTQ0FSRF9NRU1CTE9DSwogCXNlbGVjdCBBUkNIX0hBU19BVE9NSUM2NF9ERUNfSUZfUE9TSVRJVkUKIAlzZWxlY3QgQVJDSF9IQVNfREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1MKIAlzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKQEAgLTEzMCw2ICsxMjksNyBAQAogCXNlbGVjdCBIQVZFX0tWTSBpZiA2NEJJVAogCXNlbGVjdCBIQVZFX01FTUJMT0NLCiAJc2VsZWN0IEhBVkVfTUVNQkxPQ0tfTk9ERV9NQVAKKwlzZWxlY3QgSEFWRV9NRU1CTE9DS19QSFlTX01BUAogCXNlbGVjdCBIQVZFX01PRF9BUkNIX1NQRUNJRklDCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJc2VsZWN0IEhBVkVfVklSVF9DUFVfQUNDT1VOVElORwogCXNlbGVjdCBLVElNRV9TQ0FMQVIgaWYgMzJCSVQKIAlzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEKKwlzZWxlY3QgTk9fQk9PVE1FTQogCXNlbGVjdCBPTERfU0lHQUNUSU9OCiAJc2VsZWN0IE9MRF9TSUdTVVNQRU5EMwogCXNlbGVjdCBTWVNDVExfRVhDRVBUSU9OX1RSQUNFCkBAIC01OTIsMjEgKzU5MywxNCBAQAogCWJvb2wgImtlcm5lbCBjcmFzaCBkdW1wcyIKIAlkZXBlbmRzIG9uIDY0QklUICYmIFNNUAogCXNlbGVjdCBLRVhFQwotCXNlbGVjdCBaRkNQRFVNUAogCWhlbHAKIAkgIEdlbmVyYXRlIGNyYXNoIGR1bXAgYWZ0ZXIgYmVpbmcgc3RhcnRlZCBieSBrZXhlYy4KIAkgIENyYXNoIGR1bXAga2VybmVscyBhcmUgbG9hZGVkIGluIHRoZSBtYWluIGtlcm5lbCB3aXRoIGtleGVjLXRvb2xzCiAJICBpbnRvIGEgc3BlY2lhbGx5IHJlc2VydmVkIHJlZ2lvbiBhbmQgdGhlbiBsYXRlciBleGVjdXRlZCBhZnRlcgogCSAgYSBjcmFzaCBieSBrZHVtcC9rZXhlYy4KLQkgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0Ci0KLWNvbmZpZyBaRkNQRFVNUAotCWRlZl9ib29sIG4KLQlwcm9tcHQgInpmY3BkdW1wIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiA2NEJJVCAmJiBTTVAKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gemZjcGR1bXAgZW5hYmxlZCBrZXJuZWwuCiAJICBSZWZlciB0byA8ZmlsZTpEb2N1bWVudGF0aW9uL3MzOTAvemZjcGR1bXAudHh0PiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisJICBUaGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgczM5MCB6ZmNwZHVtcC4KKwkgIFNlZSBhbHNvIDxmaWxlOkRvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQ+CiAKIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX21lbS5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX21lbS5jCmluZGV4IDQyYmU1MzcuLmVkY2YyYTcwNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX21lbS5jCisrKyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9tZW0uYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJhcHBsZGF0YS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggODY2ZWNiZS4uZjkwZDFmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw3IEBACiAKIEtCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgogS0JVSUxEX0NGTEFHUyArPSAtRERJU0FCTEVfQlJBTkNIX1BST0ZJTElORwotS0JVSUxEX0NGTEFHUyArPSAkKGNmbGFncy15KQorS0JVSUxEX0NGTEFHUyArPSAkKGNmbGFncy15KSAtZm5vLWRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1wYWNrZWQtc3RhY2spCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZmcmVlc3RhbmRpbmcpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAxZDQ3MDYxLi5mYTkzNGZlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC00MTIsOSArNDEyLDQgQEAKICNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KF92KQkoYXRvbWljNjRfc3ViX3JldHVybigxLCBfdikgPT0gMCkKICNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX21iKCkKLQogI2VuZGlmIC8qIF9fQVJDSF9TMzkwX0FUT01JQ19fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKaW5kZXggNTc4NjgwZi4uMTlmZjk1NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC0yNyw4ICsyNyw5IEBACiAjZGVmaW5lIHNtcF9ybWIoKQkJCXJtYigpCiAjZGVmaW5lIHNtcF93bWIoKQkJCXdtYigpCiAjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCXJlYWRfYmFycmllcl9kZXBlbmRzKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlzbXBfbWIoKQorCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpCQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pYygpCQlzbXBfbWIoKQogCiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKQkJZG8geyB2YXIgPSB2YWx1ZTsgbWIoKTsgfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Njd2Rldi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Njd2Rldi5oCmluZGV4IGE5YzJjMDYuLmI4MGU0NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jY3dkZXYuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2N3ZGV2LmgKQEAgLTIyOSw1ICsyMjksNSBAQAogCiBleHRlcm4gdm9pZCBjY3dfZGV2aWNlX2dldF9zY2hpZChzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqKTsKIAotZXh0ZXJuIHZvaWQgKmNjd19kZXZpY2VfZ2V0X2NocF9kZXNjKHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CitzdHJ1Y3QgY2hhbm5lbF9wYXRoX2Rlc2MgKmNjd19kZXZpY2VfZ2V0X2NocF9kZXNjKHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CiAjZW5kaWYgLyogX1MzOTBfQ0NXREVWX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2N3Z3JvdXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jY3dncm91cC5oCmluZGV4IGViYzI5MTMuLjA1N2NlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jY3dncm91cC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jY3dncm91cC5oCkBAIC0xMCw2ICsxMCw4IEBACiAgKiBAY291bnQ6IG51bWJlciBvZiBhdHRhY2hlZCBzbGF2ZSBkZXZpY2VzCiAgKiBAZGV2OiBlbWJlZGRlZCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAY2RldjogdmFyaWFibGUgbnVtYmVyIG9mIHNsYXZlIGRldmljZXMsIGFsbG9jYXRlZCBhcyBuZWVkZWQKKyAqIEB1bmdyb3VwX3dvcms6IHdvcmsgdG8gYmUgZG9uZSB3aGVuIGEgY2N3Z3JvdXAgbm90aWZpZXIgaGFzIGFjdGlvbgorICoJdHlwZSAlQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSCiAgKi8KIHN0cnVjdCBjY3dncm91cF9kZXZpY2UgewogCWVudW0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NocGlkLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hwaWQuaAppbmRleCAzOGM0MDVlLi43Mjk4ZWVjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hwaWQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hwaWQuaApAQCAtOCw2ICs4LDE3IEBACiAjaW5jbHVkZSA8dWFwaS9hc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vY2lvLmg+CiAKK3N0cnVjdCBjaGFubmVsX3BhdGhfZGVzYyB7CisJdTggZmxhZ3M7CisJdTggbHNuOworCXU4IGRlc2M7CisJdTggY2hwaWQ7CisJdTggc3dsYTsKKwl1OCB6ZXJvZXM7CisJdTggY2hsYTsKKwl1OCBjaHBwOworfSBfX3BhY2tlZDsKKwogc3RhdGljIGlubGluZSB2b2lkIGNocF9pZF9pbml0KHN0cnVjdCBjaHBfaWQgKmNocGlkKQogewogCW1lbXNldChjaHBpZCwgMCwgc2l6ZW9mKHN0cnVjdCBjaHBfaWQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jdGxfcmVnLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3RsX3JlZy5oCmluZGV4IDRlNjNmMWEuLjMxYWI5ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jdGxfcmVnLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2N0bF9yZWcuaApAQCAtNTcsNiArNTcsMjAgQEAKIHZvaWQgc21wX2N0bF9zZXRfYml0KGludCBjciwgaW50IGJpdCk7CiB2b2lkIHNtcF9jdGxfY2xlYXJfYml0KGludCBjciwgaW50IGJpdCk7CiAKK3VuaW9uIGN0bHJlZzAgeworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJCXVuc2lnbmVkIGxvbmcJICAgOiAzMjsKKyNlbmRpZgorCQl1bnNpZ25lZCBsb25nCSAgIDogMzsKKwkJdW5zaWduZWQgbG9uZyBsYXAgIDogMTsgLyogTG93LWFkZHJlc3MtcHJvdGVjdGlvbiBjb250cm9sICovCisJCXVuc2lnbmVkIGxvbmcJICAgOiA0OworCQl1bnNpZ25lZCBsb25nIGVkYXQgOiAxOyAvKiBFbmhhbmNlZC1EQVQtZW5hYmxlbWVudCBjb250cm9sICovCisJCXVuc2lnbmVkIGxvbmcJICAgOiAyMzsKKwl9OworfTsKKwogI2lmZGVmIENPTkZJR19TTVAKICMgZGVmaW5lIGN0bF9zZXRfYml0KGNyLCBiaXQpIHNtcF9jdGxfc2V0X2JpdChjciwgYml0KQogIyBkZWZpbmUgY3RsX2NsZWFyX2JpdChjciwgYml0KSBzbXBfY3RsX2NsZWFyX2JpdChjciwgYml0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z1dGV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnV0ZXguaAppbmRleCA2OWNmNWI1Li5hNDgxMWFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnV0ZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnV0ZXguaApAQCAtMjksNyArMjksNyBAQAogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7CiAJaW50IG9sZHZhbCA9IDAsIG5ld3ZhbCwgcmV0OwogCi0JdXBkYXRlX3ByaW1hcnlfYXNjZShjdXJyZW50KTsKKwlsb2FkX2tlcm5lbF9hc2NlKCk7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKQEAgLTc5LDcgKzc5LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JdXBkYXRlX3ByaW1hcnlfYXNjZShjdXJyZW50KTsKKwlsb2FkX2tlcm5lbF9hc2NlKCk7CiAJYXNtIHZvbGF0aWxlKAogCQkiICAgc2FjZiAyNTZcbiIKIAkJIjA6IGNzICAgJTEsJTQsMCglNSlcbiIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMTU0YjYwMC4uNDE4MWQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTMyLDE2ICszMiwyNiBAQAogI2RlZmluZSBLVk1fTlJfSVJRQ0hJUFMgMQogI2RlZmluZSBLVk1fSVJRQ0hJUF9OVU1fUElOUyA0MDk2CiAKKyNkZWZpbmUgU0lHUF9DVFJMX0MJMHgwMDgwMDAwMAorCiBzdHJ1Y3Qgc2NhX2VudHJ5IHsKLQlhdG9taWNfdCBzY247CisJYXRvbWljX3QgY3RybDsKIAlfX3UzMglyZXNlcnZlZDsKIAlfX3U2NAlzZGE7CiAJX191NjQJcmVzZXJ2ZWQyWzJdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAordW5pb24gaXB0ZV9jb250cm9sIHsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIGsgIDogMTsKKwkJdW5zaWduZWQgbG9uZyBraCA6IDMxOworCQl1bnNpZ25lZCBsb25nIGtnIDogMzI7CisJfTsKK307CiAKIHN0cnVjdCBzY2FfYmxvY2sgewotCV9fdTY0CWlwdGVfY29udHJvbDsKKwl1bmlvbiBpcHRlX2NvbnRyb2wgaXB0ZV9jb250cm9sOwogCV9fdTY0CXJlc2VydmVkWzVdOwogCV9fdTY0CW1jbjsKIAlfX3U2NAlyZXNlcnZlZDI7CkBAIC02NCw2ICs3NCw3IEBACiAjZGVmaW5lIENQVVNUQVRfWkFSQ0ggICAgICAweDAwMDAwODAwCiAjZGVmaW5lIENQVVNUQVRfTUNEUyAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIENQVVNUQVRfU00gICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVVNUQVRfSUJTICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIENQVVNUQVRfRyAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIENQVVNUQVRfR0VEICAgICAgICAweDAwMDAwMDA0CiAjZGVmaW5lIENQVVNUQVRfSiAgICAgICAgICAweDAwMDAwMDAyCkBAIC03MSw3ICs4Miw5IEBACiAKIHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgewogCWF0b21pY190IGNwdWZsYWdzOwkJLyogMHgwMDAwICovCi0JX191MzIJcHJlZml4OwkJCS8qIDB4MDAwNCAqLworCV9fdTMyIDogMTsJCQkvKiAweDAwMDQgKi8KKwlfX3UzMiBwcmVmaXggOiAxODsKKwlfX3UzMiA6IDEzOwogCV9fdTgJcmVzZXJ2ZWQwOFs0XTsJCS8qIDB4MDAwOCAqLwogI2RlZmluZSBQUk9HX0lOX1NJRSAoMTw8MCkKIAlfX3UzMglwcm9nMGM7CQkJLyogMHgwMDBjICovCkBAIC04NSwxMiArOTgsMjcgQEAKIAlfX3U4CXJlc2VydmVkNDBbNF07CQkvKiAweDAwNDAgKi8KICNkZWZpbmUgTENUTF9DUjAJMHg4MDAwCiAjZGVmaW5lIExDVExfQ1I2CTB4MDIwMAorI2RlZmluZSBMQ1RMX0NSOQkweDAwNDAKKyNkZWZpbmUgTENUTF9DUjEwCTB4MDAyMAorI2RlZmluZSBMQ1RMX0NSMTEJMHgwMDEwCiAjZGVmaW5lIExDVExfQ1IxNAkweDAwMDIKIAlfX3UxNiAgIGxjdGw7CQkJLyogMHgwMDQ0ICovCiAJX19zMTYJaWNwdWE7CQkJLyogMHgwMDQ2ICovCi0jZGVmaW5lIElDVExfTFBTVyAweDAwNDAwMDAwCisjZGVmaW5lIElDVExfUElOVAkweDIwMDAwMDAwCisjZGVmaW5lIElDVExfTFBTVwkweDAwNDAwMDAwCisjZGVmaW5lIElDVExfU1RDVEwJMHgwMDA0MDAwMAorI2RlZmluZSBJQ1RMX0lTS0UJMHgwMDAwNDAwMAorI2RlZmluZSBJQ1RMX1NTS0UJMHgwMDAwMjAwMAorI2RlZmluZSBJQ1RMX1JSQkUJMHgwMDAwMTAwMAorI2RlZmluZSBJQ1RMX1RQUk9UCTB4MDAwMDAyMDAKIAlfX3UzMglpY3RsOwkJCS8qIDB4MDA0OCAqLwogCV9fdTMyCWVjYTsJCQkvKiAweDAwNGMgKi8KKyNkZWZpbmUgSUNQVF9JTlNUCTB4MDQKKyNkZWZpbmUgSUNQVF9QUk9HSQkweDA4CisjZGVmaW5lIElDUFRfSU5TVFBST0dJCTB4MEMKKyNkZWZpbmUgSUNQVF9PUEVSRVhDCTB4MkMKKyNkZWZpbmUgSUNQVF9QQVJURVhFQwkweDM4CisjZGVmaW5lIElDUFRfSU9JTlNUCTB4NDAKIAlfX3U4CWljcHRjb2RlOwkJLyogMHgwMDUwICovCiAJX191OAlyZXNlcnZlZDUxOwkJLyogMHgwMDUxICovCiAJX191MTYJaWhjcHU7CQkJLyogMHgwMDUyICovCkBAIC0xMDksOSArMTM3LDI0IEBACiAJcHN3X3QJZ3BzdzsJCQkvKiAweDAwOTAgKi8KIAlfX3U2NAlnZzE0OwkJCS8qIDB4MDBhMCAqLwogCV9fdTY0CWdnMTU7CQkJLyogMHgwMGE4ICovCi0JX191OAlyZXNlcnZlZGIwWzMwXTsJCS8qIDB4MDBiMCAqLwotCV9fdTE2ICAgaXByY2M7CQkJLyogMHgwMGNlICovCi0JX191OAlyZXNlcnZlZGQwWzQ4XTsJCS8qIDB4MDBkMCAqLworCV9fdTgJcmVzZXJ2ZWRiMFsyMF07CQkvKiAweDAwYjAgKi8KKwlfX3UxNglleHRjcHVhZGRyOwkJLyogMHgwMGM0ICovCisJX191MTYJZWljOwkJCS8qIDB4MDBjNiAqLworCV9fdTMyCXJlc2VydmVkYzg7CQkvKiAweDAwYzggKi8KKwlfX3UxNglwZ21pbGM7CQkJLyogMHgwMGNjICovCisJX191MTYJaXByY2M7CQkJLyogMHgwMGNlICovCisJX191MzIJZHhjOwkJCS8qIDB4MDBkMCAqLworCV9fdTE2CW1jbjsJCQkvKiAweDAwZDQgKi8KKwlfX3U4CXBlcmM7CQkJLyogMHgwMGQ2ICovCisJX191OAlwZXJhdG1pZDsJCS8qIDB4MDBkNyAqLworCV9fdTY0CXBlcmFkZHI7CQkvKiAweDAwZDggKi8KKwlfX3U4CWVhaTsJCQkvKiAweDAwZTAgKi8KKwlfX3U4CXBlcmFpZDsJCQkvKiAweDAwZTEgKi8KKwlfX3U4CW9haTsJCQkvKiAweDAwZTIgKi8KKwlfX3U4CWFybWlkOwkJCS8qIDB4MDBlMyAqLworCV9fdTgJcmVzZXJ2ZWRlNFs0XTsJCS8qIDB4MDBlNCAqLworCV9fdTY0CXRlY21jOwkJCS8qIDB4MDBlOCAqLworCV9fdTgJcmVzZXJ2ZWRmMFsxNl07CQkvKiAweDAwZjAgKi8KIAlfX3U2NAlnY3JbMTZdOwkJLyogMHgwMTAwICovCiAJX191NjQJZ2JlYTsJCQkvKiAweDAxODAgKi8KIAlfX3U4CXJlc2VydmVkMTg4WzI0XTsJLyogMHgwMTg4ICovCkBAIC0xNDYsNiArMTg5LDggQEAKIAl1MzIgZXhpdF9pbnN0cnVjdGlvbjsKIAl1MzIgaW5zdHJ1Y3Rpb25fbGN0bDsKIAl1MzIgaW5zdHJ1Y3Rpb25fbGN0bGc7CisJdTMyIGluc3RydWN0aW9uX3N0Y3RsOworCXUzMiBpbnN0cnVjdGlvbl9zdGN0ZzsKIAl1MzIgZXhpdF9wcm9ncmFtX2ludGVycnVwdGlvbjsKIAl1MzIgZXhpdF9pbnN0cl9hbmRfcHJvZ3JhbTsKIAl1MzIgZGVsaXZlcl9leHRlcm5hbF9jYWxsOwpAQCAtMTY0LDYgKzIwOSw3IEBACiAJdTMyIGluc3RydWN0aW9uX3N0cHg7CiAJdTMyIGluc3RydWN0aW9uX3N0YXA7CiAJdTMyIGluc3RydWN0aW9uX3N0b3JhZ2Vfa2V5OworCXUzMiBpbnN0cnVjdGlvbl9pcHRlX2ludGVybG9jazsKIAl1MzIgaW5zdHJ1Y3Rpb25fc3RzY2g7CiAJdTMyIGluc3RydWN0aW9uX2Noc2M7CiAJdTMyIGluc3RydWN0aW9uX3N0c2k7CkBAIC0xODMsMTMgKzIyOSw1OCBAQAogCXUzMiBkaWFnbm9zZV85YzsKIH07CiAKLSNkZWZpbmUgUEdNX09QRVJBVElPTiAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgUEdNX1BSSVZJTEVHRURfT1AJIDB4MDIKLSNkZWZpbmUgUEdNX0VYRUNVVEUgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgUEdNX1BST1RFQ1RJT04gICAgICAgICAgIDB4MDQKLSNkZWZpbmUgUEdNX0FERFJFU1NJTkcgICAgICAgICAgIDB4MDUKLSNkZWZpbmUgUEdNX1NQRUNJRklDQVRJT04gICAgICAgIDB4MDYKLSNkZWZpbmUgUEdNX0RBVEEgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgUEdNX09QRVJBVElPTgkJCTB4MDEKKyNkZWZpbmUgUEdNX1BSSVZJTEVHRURfT1AJCTB4MDIKKyNkZWZpbmUgUEdNX0VYRUNVVEUJCQkweDAzCisjZGVmaW5lIFBHTV9QUk9URUNUSU9OCQkJMHgwNAorI2RlZmluZSBQR01fQUREUkVTU0lORwkJCTB4MDUKKyNkZWZpbmUgUEdNX1NQRUNJRklDQVRJT04JCTB4MDYKKyNkZWZpbmUgUEdNX0RBVEEJCQkweDA3CisjZGVmaW5lIFBHTV9GSVhFRF9QT0lOVF9PVkVSRkxPVwkweDA4CisjZGVmaW5lIFBHTV9GSVhFRF9QT0lOVF9ESVZJREUJCTB4MDkKKyNkZWZpbmUgUEdNX0RFQ0lNQUxfT1ZFUkZMT1cJCTB4MGEKKyNkZWZpbmUgUEdNX0RFQ0lNQUxfRElWSURFCQkweDBiCisjZGVmaW5lIFBHTV9IRlBfRVhQT05FTlRfT1ZFUkZMT1cJMHgwYworI2RlZmluZSBQR01fSEZQX0VYUE9ORU5UX1VOREVSRkxPVwkweDBkCisjZGVmaW5lIFBHTV9IRlBfU0lHTklGSUNBTkNFCQkweDBlCisjZGVmaW5lIFBHTV9IRlBfRElWSURFCQkJMHgwZgorI2RlZmluZSBQR01fU0VHTUVOVF9UUkFOU0xBVElPTgkJMHgxMAorI2RlZmluZSBQR01fUEFHRV9UUkFOU0xBVElPTgkJMHgxMQorI2RlZmluZSBQR01fVFJBTlNMQVRJT05fU1BFQwkJMHgxMgorI2RlZmluZSBQR01fU1BFQ0lBTF9PUEVSQVRJT04JCTB4MTMKKyNkZWZpbmUgUEdNX09QRVJBTkQJCQkweDE1CisjZGVmaW5lIFBHTV9UUkFDRV9UQUJFTAkJCTB4MTYKKyNkZWZpbmUgUEdNX1NQQUNFX1NXSVRDSAkJMHgxYworI2RlZmluZSBQR01fSEZQX1NRVUFSRV9ST09UCQkweDFkCisjZGVmaW5lIFBHTV9QQ19UUkFOU0xBVElPTl9TUEVDCQkweDFmCisjZGVmaW5lIFBHTV9BRlhfVFJBTlNMQVRJT04JCTB4MjAKKyNkZWZpbmUgUEdNX0FTWF9UUkFOU0xBVElPTgkJMHgyMQorI2RlZmluZSBQR01fTFhfVFJBTlNMQVRJT04JCTB4MjIKKyNkZWZpbmUgUEdNX0VYX1RSQU5TTEFUSU9OCQkweDIzCisjZGVmaW5lIFBHTV9QUklNQVJZX0FVVEhPUklUWQkJMHgyNAorI2RlZmluZSBQR01fU0VDT05EQVJZX0FVVEhPUklUWQkJMHgyNQorI2RlZmluZSBQR01fTEZYX1RSQU5TTEFUSU9OCQkweDI2CisjZGVmaW5lIFBHTV9MU1hfVFJBTlNMQVRJT04JCTB4MjcKKyNkZWZpbmUgUEdNX0FMRVRfU1BFQ0lGSUNBVElPTgkJMHgyOAorI2RlZmluZSBQR01fQUxFTl9UUkFOU0xBVElPTgkJMHgyOQorI2RlZmluZSBQR01fQUxFX1NFUVVFTkNFCQkweDJhCisjZGVmaW5lIFBHTV9BU1RFX1ZBTElESVRZCQkweDJiCisjZGVmaW5lIFBHTV9BU1RFX1NFUVVFTkNFCQkweDJjCisjZGVmaW5lIFBHTV9FWFRFTkRFRF9BVVRIT1JJVFkJCTB4MmQKKyNkZWZpbmUgUEdNX0xTVEVfU0VRVUVOQ0UJCTB4MmUKKyNkZWZpbmUgUEdNX0FTVEVfSU5TVEFOQ0UJCTB4MmYKKyNkZWZpbmUgUEdNX1NUQUNLX0ZVTEwJCQkweDMwCisjZGVmaW5lIFBHTV9TVEFDS19FTVBUWQkJCTB4MzEKKyNkZWZpbmUgUEdNX1NUQUNLX1NQRUNJRklDQVRJT04JCTB4MzIKKyNkZWZpbmUgUEdNX1NUQUNLX1RZUEUJCQkweDMzCisjZGVmaW5lIFBHTV9TVEFDS19PUEVSQVRJT04JCTB4MzQKKyNkZWZpbmUgUEdNX0FTQ0VfVFlQRQkJCTB4MzgKKyNkZWZpbmUgUEdNX1JFR0lPTl9GSVJTVF9UUkFOUwkJMHgzOQorI2RlZmluZSBQR01fUkVHSU9OX1NFQ09ORF9UUkFOUwkJMHgzYQorI2RlZmluZSBQR01fUkVHSU9OX1RISVJEX1RSQU5TCQkweDNiCisjZGVmaW5lIFBHTV9NT05JVE9SCQkJMHg0MAorI2RlZmluZSBQR01fUEVSCQkJCTB4ODAKKyNkZWZpbmUgUEdNX0NSWVBUT19PUEVSQVRJT04JCTB4MTE5CiAKIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMjI5LDYgKzMyMCw0NSBAQAogCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CiB9OwogCitzdHJ1Y3Qga3ZtX2h3X3dwX2luZm9fYXJjaCB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworCWludCBsZW47CisJY2hhciAqb2xkX2RhdGE7Cit9OworCitzdHJ1Y3Qga3ZtX2h3X2JwX2luZm9fYXJjaCB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBsZW47Cit9OworCisvKgorICogT25seSB0aGUgdXBwZXIgMTYgYml0cyBvZiBrdm1fZ3Vlc3RfZGVidWctPmNvbnRyb2wgYXJlIGFyY2ggc3BlY2lmaWMuCisgKiBGdXJ0aGVyIEtWTV9HVUVTVERCRyBmbGFncyB3aGljaCBhbiBiZSB1c2VkIGZyb20gdXNlcnNwYWNlIGNhbiBiZSBmb3VuZCBpbgorICogYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKKyAqLworI2RlZmluZSBLVk1fR1VFU1REQkdfRVhJVF9QRU5ESU5HIDB4MTAwMDAwMDAKKworI2RlZmluZSBndWVzdGRiZ19lbmFibGVkKHZjcHUpIFwKKwkJKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkKKyNkZWZpbmUgZ3Vlc3RkYmdfc3N0ZXBfZW5hYmxlZCh2Y3B1KSBcCisJCSh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorI2RlZmluZSBndWVzdGRiZ19od19icF9lbmFibGVkKHZjcHUpIFwKKwkJKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKyNkZWZpbmUgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpIChndWVzdGRiZ19lbmFibGVkKHZjcHUpICYmIFwKKwkJKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VYSVRfUEVORElORykpCisKK3N0cnVjdCBrdm1fZ3Vlc3RkYmdfaW5mb19hcmNoIHsKKwl1bnNpZ25lZCBsb25nIGNyMDsKKwl1bnNpZ25lZCBsb25nIGNyOTsKKwl1bnNpZ25lZCBsb25nIGNyMTA7CisJdW5zaWduZWQgbG9uZyBjcjExOworCXN0cnVjdCBrdm1faHdfYnBfaW5mb19hcmNoICpod19icF9pbmZvOworCXN0cnVjdCBrdm1faHdfd3BfaW5mb19hcmNoICpod193cF9pbmZvOworCWludCBucl9od19icDsKKwlpbnQgbnJfaHdfd3A7CisJdW5zaWduZWQgbG9uZyBsYXN0X2JwOworfTsKIAogc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCXN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNpZV9ibG9jazsKQEAgLTIzOCwxMSArMzY4LDEzIEBACiAJc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCBsb2NhbF9pbnQ7CiAJc3RydWN0IGhydGltZXIgICAgY2tjX3RpbWVyOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXN0cnVjdCBrdm1fczM5MF9wZ21faW5mbyBwZ207CiAJdW5pb24gIHsKIAkJc3RydWN0IGNwdWlkCWNwdV9pZDsKIAkJdTY0CQlzdGlkcF9kYXRhOwogCX07CiAJc3RydWN0IGdtYXAgKmdtYXA7CisJc3RydWN0IGt2bV9ndWVzdGRiZ19pbmZvX2FyY2ggZ3Vlc3RkYmc7CiAjZGVmaW5lIEtWTV9TMzkwX1BGQVVMVF9UT0tFTl9JTlZBTElECSgtMVVMKQogCXVuc2lnbmVkIGxvbmcgcGZhdWx0X3Rva2VuOwogCXVuc2lnbmVkIGxvbmcgcGZhdWx0X3NlbGVjdDsKQEAgLTI4NSw3ICs0MTcsMTAgQEAKIAlzdHJ1Y3QgZ21hcCAqZ21hcDsKIAlpbnQgY3NzX3N1cHBvcnQ7CiAJaW50IHVzZV9pcnFjaGlwOworCWludCB1c2VfY21tYTsKIAlzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyc1tNQVhfUzM5MF9JT19BREFQVEVSU107CisJd2FpdF9xdWV1ZV9oZWFkX3QgaXB0ZV93cTsKKwlzcGlubG9ja190IHN0YXJ0X3N0b3BfbG9jazsKIH07CiAKICNkZWZpbmUgS1ZNX0hWQV9FUlJfQkFECQkoLTFVTCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCmluZGV4IGJiZjgxNDEuLjQzNDkxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaApAQCAtNTYsMTMgKzU2LDE0IEBACiAJX191MTYJcGdtX2NvZGU7CQkJLyogMHgwMDhlICovCiAJX191MzIJdHJhbnNfZXhjX2NvZGU7CQkJLyogMHgwMDkwICovCiAJX191MTYJbW9uX2NsYXNzX251bTsJCQkvKiAweDAwOTQgKi8KLQlfX3UxNglwZXJfcGVyY19hdG1pZDsJCQkvKiAweDAwOTYgKi8KKwlfX3U4CXBlcl9jb2RlOwkJCS8qIDB4MDA5NiAqLworCV9fdTgJcGVyX2F0bWlkOwkJCS8qIDB4MDA5NyAqLwogCV9fdTMyCXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLwogCV9fdTMyCW1vbml0b3JfY29kZTsJCQkvKiAweDAwOWMgKi8KIAlfX3U4CWV4Y19hY2Nlc3NfaWQ7CQkJLyogMHgwMGEwICovCiAJX191OAlwZXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMSAqLwogCV9fdTgJb3BfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMiAqLwotCV9fdTgJYXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMyAqLworCV9fdTgJYXJfbW9kZV9pZDsJCQkvKiAweDAwYTMgKi8KIAlfX3U4CXBhZF8weDAwYTRbMHgwMGI4LTB4MDBhNF07CS8qIDB4MDBhNCAqLwogCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCiAJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KQEAgLTkzLDcgKzk0LDkgQEAKIAlfX3UzMglzYXZlX2FyZWFfc3luY1s4XTsJCS8qIDB4MDIwMCAqLwogCV9fdTMyCXNhdmVfYXJlYV9hc3luY1s4XTsJCS8qIDB4MDIyMCAqLwogCV9fdTMyCXNhdmVfYXJlYV9yZXN0YXJ0WzFdOwkJLyogMHgwMjQwICovCi0JX191OAlwYWRfMHgwMjQ0WzB4MDI0OC0weDAyNDRdOwkvKiAweDAyNDQgKi8KKworCS8qIENQVSBmbGFncy4gKi8KKwlfX3UzMgljcHVfZmxhZ3M7CQkJLyogMHgwMjQ0ICovCiAKIAkvKiBSZXR1cm4gcHN3cy4gKi8KIAlwc3dfdAlyZXR1cm5fcHN3OwkJCS8qIDB4MDI0OCAqLwpAQCAtMTM5LDEyICsxNDIsOSBAQAogCV9fdTMyCXBlcmNwdV9vZmZzZXQ7CQkJLyogMHgwMmYwICovCiAJX191MzIJbWFjaGluZV9mbGFnczsJCQkvKiAweDAyZjQgKi8KIAlfX3UzMglmdHJhY2VfZnVuYzsJCQkvKiAweDAyZjggKi8KLQlfX3U4CXBhZF8weDAyZmNbMHgwMzAwLTB4MDJmY107CS8qIDB4MDJmYyAqLworCV9fdTMyCXNwaW5sb2NrX2xvY2t2YWw7CQkvKiAweDAyZmMgKi8KIAotCS8qIEludGVycnVwdCByZXNwb25zZSBibG9jayAqLwotCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzMDAgKi8KLQotCV9fdTgJcGFkXzB4MDM0MFsweDBlMDAtMHgwMzQwXTsJLyogMHgwMzQwICovCisJX191OAlwYWRfMHgwMzAwWzB4MGUwMC0weDAzMDBdOwkvKiAweDAzMDAgKi8KIAogCS8qCiAJICogMHhlMDAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIElQTCBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KQEAgLTE5NiwxMiArMTk2LDEzIEBACiAJX191MTYJcGdtX2NvZGU7CQkJLyogMHgwMDhlICovCiAJX191MzIJZGF0YV9leGNfY29kZTsJCQkvKiAweDAwOTAgKi8KIAlfX3UxNgltb25fY2xhc3NfbnVtOwkJCS8qIDB4MDA5NCAqLwotCV9fdTE2CXBlcl9wZXJjX2F0bWlkOwkJCS8qIDB4MDA5NiAqLworCV9fdTgJcGVyX2NvZGU7CQkJLyogMHgwMDk2ICovCisJX191OAlwZXJfYXRtaWQ7CQkJLyogMHgwMDk3ICovCiAJX191NjQJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCiAJX191OAlleGNfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMCAqLwogCV9fdTgJcGVyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTEgKi8KIAlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KLQlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CWFyX21vZGVfaWQ7CQkJLyogMHgwMGEzICovCiAJX191OAlwYWRfMHgwMGE0WzB4MDBhOC0weDAwYTRdOwkvKiAweDAwYTQgKi8KIAlfX3U2NAl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwYTggKi8KIAlfX3U2NAltb25pdG9yX2NvZGU7CQkJLyogMHgwMGIwICovCkBAIC0yMzcsNyArMjM4LDkgQEAKIAlfX3U2NAlzYXZlX2FyZWFfc3luY1s4XTsJCS8qIDB4MDIwMCAqLwogCV9fdTY0CXNhdmVfYXJlYV9hc3luY1s4XTsJCS8qIDB4MDI0MCAqLwogCV9fdTY0CXNhdmVfYXJlYV9yZXN0YXJ0WzFdOwkJLyogMHgwMjgwICovCi0JX191OAlwYWRfMHgwMjg4WzB4MDI5MC0weDAyODhdOwkvKiAweDAyODggKi8KKworCS8qIENQVSBmbGFncy4gKi8KKwlfX3U2NAljcHVfZmxhZ3M7CQkJLyogMHgwMjg4ICovCiAKIAkvKiBSZXR1cm4gcHN3cy4gKi8KIAlwc3dfdAlyZXR1cm5fcHN3OwkJCS8qIDB4MDI5MCAqLwpAQCAtMjg1LDE1ICsyODgsMTMgQEAKIAlfX3U2NAltYWNoaW5lX2ZsYWdzOwkJCS8qIDB4MDM4OCAqLwogCV9fdTY0CWZ0cmFjZV9mdW5jOwkJCS8qIDB4MDM5MCAqLwogCV9fdTY0CWdtYXA7CQkJCS8qIDB4MDM5OCAqLwotCV9fdTgJcGFkXzB4MDNhMFsweDA0MDAtMHgwM2EwXTsJLyogMHgwM2EwICovCi0KLQkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2suICovCi0JX191OAlpcmJbNjRdOwkJCS8qIDB4MDQwMCAqLworCV9fdTMyCXNwaW5sb2NrX2xvY2t2YWw7CQkvKiAweDAzYTAgKi8KKwlfX3U4CXBhZF8weDAzYTBbMHgwNDAwLTB4MDNhNF07CS8qIDB4MDNhNCAqLwogCiAJLyogUGVyIGNwdSBwcmltYXJ5IHNwYWNlIGFjY2VzcyBsaXN0ICovCi0JX191MzIJcGFzdGVbMTZdOwkJCS8qIDB4MDQ0MCAqLworCV9fdTMyCXBhc3RlWzE2XTsJCQkvKiAweDA0MDAgKi8KIAotCV9fdTgJcGFkXzB4MDQ4MFsweDBlMDAtMHgwNDgwXTsJLyogMHgwNDgwICovCisJX191OAlwYWRfMHgwNGMwWzB4MGUwMC0weDA0NDBdOwkvKiAweDA0NDAgKi8KIAogCS8qCiAJICogMHhlMDAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIElQTCBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBmNzc2OTVhLi5hNWU2NTYyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xNiw2ICsxNiw4IEBACiAJdW5zaWduZWQgbG9uZyB2ZHNvX2Jhc2U7CiAJLyogVGhlIG1tdSBjb250ZXh0IGhhcyBleHRlbmRlZCBwYWdlIHRhYmxlcy4gKi8KIAl1bnNpZ25lZCBpbnQgaGFzX3Bnc3RlOjE7CisJLyogVGhlIG1tdSBjb250ZXh0IHVzZXMgc3RvcmFnZSBrZXlzLiAqLworCXVuc2lnbmVkIGludCB1c2Vfc2tleToxOwogfSBtbV9jb250ZXh0X3Q7CiAKICNkZWZpbmUgSU5JVF9NTV9DT05URVhUKG5hbWUpCQkJCQkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA3MWJlMzQ2Li5jMjhmMzJhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMjMsNiArMjMsNyBAQAogCW1tLT5jb250ZXh0LmFzY2VfYml0cyB8PSBfQVNDRV9UWVBFX1JFR0lPTjM7CiAjZW5kaWYKIAltbS0+Y29udGV4dC5oYXNfcGdzdGUgPSAwOworCW1tLT5jb250ZXh0LnVzZV9za2V5ID0gMDsKIAltbS0+Y29udGV4dC5hc2NlX2xpbWl0ID0gU1RBQ0tfVE9QX01BWDsKIAljcnN0X3RhYmxlX2luaXQoKHVuc2lnbmVkIGxvbmcgKikgbW0tPnBnZCwgcGdkX2VudHJ5X3R5cGUobW0pKTsKIAlyZXR1cm4gMDsKQEAgLTMwLDMzICszMSwzMSBAQAogCiAjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3VzZXJfYXNjZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGxvYWRfcHJpbWFyeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdXNlcl9hc2NlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXBnZF90ICpwZ2QgPSBtbS0+cGdkOwogCiAJUzM5MF9sb3djb3JlLnVzZXJfYXNjZSA9IG1tLT5jb250ZXh0LmFzY2VfYml0cyB8IF9fcGEocGdkKTsKLQlpZiAobG9hZF9wcmltYXJ5KQotCQlfX2N0bF9sb2FkKFMzOTBfbG93Y29yZS51c2VyX2FzY2UsIDEsIDEpOwogCXNldF9mcyhjdXJyZW50LT50aHJlYWQubW1fc2VnbWVudCk7CisJc2V0X2NwdV9mbGFnKENJRl9BU0NFKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3VzZXJfYXNjZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGxvYWRfcHJpbWFyeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl91c2VyX2FzY2Uodm9pZCkKIHsKIAlTMzkwX2xvd2NvcmUudXNlcl9hc2NlID0gUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOwogCi0JaWYgKGxvYWRfcHJpbWFyeSkKLQkJX19jdGxfbG9hZChTMzkwX2xvd2NvcmUudXNlcl9hc2NlLCAxLCAxKTsKKwlfX2N0bF9sb2FkKFMzOTBfbG93Y29yZS51c2VyX2FzY2UsIDEsIDEpOwogCV9fY3RsX2xvYWQoUzM5MF9sb3djb3JlLnVzZXJfYXNjZSwgNywgNyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcHJpbWFyeV9hc2NlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIGlubGluZSB2b2lkIGxvYWRfa2VybmVsX2FzY2Uodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGFzY2U7CiAKIAlfX2N0bF9zdG9yZShhc2NlLCAxLCAxKTsKIAlpZiAoYXNjZSAhPSBTMzkwX2xvd2NvcmUua2VybmVsX2FzY2UpCiAJCV9fY3RsX2xvYWQoUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlLCAxLCAxKTsKLQlzZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0FTQ0UpOworCXNldF9jcHVfZmxhZyhDSUZfQVNDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKQEAgLTY0LDI1ICs2MywxNyBAQAogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQl1cGRhdGVfcHJpbWFyeV9hc2NlKHRzayk7CiAJaWYgKHByZXYgPT0gbmV4dCkKIAkJcmV0dXJuOwogCWlmIChNQUNISU5FX0hBU19UTEJfTEMpCiAJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZuZXh0LT5jb250ZXh0LmNwdV9hdHRhY2hfbWFzayk7Ci0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZuZXh0LT5jb250ZXh0LmF0dGFjaF9jb3VudCkgPj4gMTYpIHsKLQkJLyogRGVsYXkgdXBkYXRlX3VzZXJfYXNjZSB1bnRpbCBhbGwgVExCIGZsdXNoZXMgYXJlIGRvbmUuICovCi0JCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVExCX1dBSVQpOwotCQkvKiBDbGVhciBvbGQgQVNDRSBieSBsb2FkaW5nIHRoZSBrZXJuZWwgQVNDRS4gKi8KLQkJY2xlYXJfdXNlcl9hc2NlKG5leHQsIDApOwotCX0gZWxzZSB7Ci0JCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobmV4dCkpOwotCQl1cGRhdGVfdXNlcl9hc2NlKG5leHQsIDApOwotCQlpZiAobmV4dC0+Y29udGV4dC5mbHVzaF9tbSkKLQkJCS8qIEZsdXNoIHBlbmRpbmcgVExCcyAqLwotCQkJX190bGJfZmx1c2hfbW0obmV4dCk7Ci0JfQorCS8qIENsZWFyIG9sZCBBU0NFIGJ5IGxvYWRpbmcgdGhlIGtlcm5lbCBBU0NFLiAqLworCV9fY3RsX2xvYWQoUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlLCAxLCAxKTsKKwlfX2N0bF9sb2FkKFMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZSwgNywgNyk7CisJLyogRGVsYXkgbG9hZGluZyBvZiB0aGUgbmV3IEFTQ0UgdG8gY29udHJvbCByZWdpc3RlcnMgQ1IxICYgQ1I3ICovCisJc2V0X2NwdV9mbGFnKENJRl9BU0NFKTsKKwlhdG9taWNfaW5jKCZuZXh0LT5jb250ZXh0LmF0dGFjaF9jb3VudCk7CiAJYXRvbWljX2RlYygmcHJldi0+Y29udGV4dC5hdHRhY2hfY291bnQpOwotCVdBUk5fT04oYXRvbWljX3JlYWQoJnByZXYtPmNvbnRleHQuYXR0YWNoX2NvdW50KSA8IDApOwogCWlmIChNQUNISU5FX0hBU19UTEJfTEMpCiAJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJnByZXYtPmNvbnRleHQuY3B1X2F0dGFjaF9tYXNrKTsKIH0KQEAgLTkzLDE1ICs4NCwxNCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CiAKLQlpZiAoIXRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1RMQl9XQUlUKSkKKwlpZiAoIW1tKQogCQlyZXR1cm47CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1RMQl9XQUlUKTsKIAl3aGlsZSAoYXRvbWljX3JlYWQoJm1tLT5jb250ZXh0LmF0dGFjaF9jb3VudCkgPj4gMTYpCiAJCWNwdV9yZWxheCgpOwogCiAJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOwotCXVwZGF0ZV91c2VyX2FzY2UobW0sIDApOworCXNldF91c2VyX2FzY2UobW0pOwogCWlmIChtbS0+Y29udGV4dC5mbHVzaF9tbSkKIAkJX190bGJfZmx1c2hfbW0obW0pOwogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0xMTMsNyArMTAzLDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCiB7Ci0gICAgICAgIHN3aXRjaF9tbShwcmV2LCBuZXh0LCBjdXJyZW50KTsKKwlzd2l0Y2hfbW0ocHJldiwgbmV4dCwgY3VycmVudCk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0KSk7CisJc2V0X3VzZXJfYXNjZShuZXh0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMjU4MzQ2Ni4uYzAzMDkwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNzgsMTAgKzc4LDE2IEBACiAJZW51bSB6cGNpX3N0YXRlIHN0YXRlOwogCXUzMgkJZmlkOwkJLyogZnVuY3Rpb24gSUQsIHVzZWQgYnkgc2NscCAqLwogCXUzMgkJZmg7CQkvKiBmdW5jdGlvbiBoYW5kbGUsIHVzZWQgYnkgaW5zbidzICovCisJdTE2CQl2Zm47CQkvKiB2aXJ0dWFsIGZ1bmN0aW9uIG51bWJlciAqLwogCXUxNgkJcGNoaWQ7CQkvKiBwaHlzaWNhbCBjaGFubmVsIElEICovCiAJdTgJCXBmZ2lkOwkJLyogZnVuY3Rpb24gZ3JvdXAgSUQgKi8KKwl1OAkJcGZ0OwkJLyogcGNpIGZ1bmN0aW9uIHR5cGUgKi8KIAl1MTYJCWRvbWFpbjsKIAorCXU4IHBmaXBbQ0xQX1BGSVBfTlJfU0VHTUVOVFNdOwkvKiBwY2kgZnVuY3Rpb24gaW50ZXJuYWwgcGF0aCAqLworCXUzMiB1aWQ7CQkJLyogdXNlciBkZWZpbmVkIGlkICovCisJdTggdXRpbF9zdHJbQ0xQX1VUSUxfU1RSX0xFTl07CS8qIHV0aWxpdHkgc3RyaW5nICovCisKIAkvKiBJUlEgc3R1ZmYgKi8KIAl1NjQJCW1zaV9hZGRyOwkvKiBNU0kgYWRkcmVzcyAqLwogCXN0cnVjdCBhaXJxX2l2ICphaWJ2OwkJLyogYWRhcHRlciBpbnRlcnJ1cHQgYml0IHZlY3RvciAqLwpAQCAtMTIwLDYgKzEyNiw4IEBACiAJcmV0dXJuICh6ZGV2LT5maCAmICgxVUwgPDwgMzEpKSA/IHRydWUgOiBmYWxzZTsKIH0KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnpwY2lfYXR0cl9ncm91cHNbXTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgUHJvdG90eXBlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE2NiwxMCArMTc0LDYgQEAKIHN0cnVjdCB6cGNpX2RldiAqZ2V0X3pkZXYoc3RydWN0IHBjaV9kZXYgKik7CiBzdHJ1Y3QgenBjaV9kZXYgKmdldF96ZGV2X2J5X2ZpZCh1MzIpOwogCi0vKiBzeXNmcyAqLwotaW50IHpwY2lfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICopOwotdm9pZCB6cGNpX3N5c2ZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqKTsKLQogLyogRE1BICovCiBpbnQgenBjaV9kbWFfaW5pdCh2b2lkKTsKIHZvaWQgenBjaV9kbWFfZXhpdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wY2lfY2xwLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGNpX2NscC5oCmluZGV4IGQzMWQ3MzkuLmRkNzhmOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wY2lfY2xwLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BjaV9jbHAuaApAQCAtNDQsNiArNDQsNyBAQAogI2RlZmluZSBDTFBfU0VUX0RJU0FCTEVfUENJX0ZOCTEJLyogWWVzLCAxIGRpc2FibGVzIGl0ICovCiAKICNkZWZpbmUgQ0xQX1VUSUxfU1RSX0xFTgk2NAorI2RlZmluZSBDTFBfUEZJUF9OUl9TRUdNRU5UUwk0CiAKIC8qIExpc3QgUENJIGZ1bmN0aW9ucyByZXF1ZXN0ICovCiBzdHJ1Y3QgY2xwX3JlcV9saXN0X3BjaSB7CkBAIC04NSw3ICs4Niw3IEBACiAJc3RydWN0IGNscF9yc3BfaGRyIGhkcjsKIAl1MzIgZm10CQkJOiAgNDsJLyogY21kIHJlcXVlc3QgYmxvY2sgZm9ybWF0ICovCiAJdTMyCQkJOiAyODsKLQl1NjQgcmVzZXJ2ZWQxOworCXU2NAkJCTogNjQ7CiAJdTE2IHZmbjsJCQkvKiB2aXJ0dWFsIGZuIG51bWJlciAqLwogCXUxNgkJCTogIDc7CiAJdTE2IHV0aWxfc3RyX2F2YWlsCTogIDE7CS8qIHV0aWxpdHkgc3RyaW5nIGF2YWlsYWJsZT8gKi8KQEAgLTk0LDEwICs5NSwxMyBAQAogCXU4IGJhcl9zaXplW1BDSV9CQVJfQ09VTlRdOwogCXUxNiBwY2hpZDsKIAl1MzIgYmFyW1BDSV9CQVJfQ09VTlRdOwotCXU2NCByZXNlcnZlZDI7CisJdTggcGZpcFtDTFBfUEZJUF9OUl9TRUdNRU5UU107CS8qIHBjaSBmdW5jdGlvbiBpbnRlcm5hbCBwYXRoICovCisJdTMyCQkJOiAyNDsKKwl1OCBwZnQ7CQkJCS8qIHBjaSBmdW5jdGlvbiB0eXBlICovCiAJdTY0IHNkbWE7CQkJLyogc3RhcnQgZG1hIGFzICovCiAJdTY0IGVkbWE7CQkJLyogZW5kIGRtYSBhcyAqLwotCXU2NCByZXNlcnZlZDNbNl07CisJdTMyIHJlc2VydmVkWzExXTsKKwl1MzIgdWlkOwkJCS8qIHVzZXIgZGVmaW5lZCBpZCAqLwogCXU4IHV0aWxfc3RyW0NMUF9VVElMX1NUUl9MRU5dOwkvKiB1dGlsaXR5IHN0cmluZyAqLwogfSBfX3BhY2tlZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggODg0MDE3Yy4uOWUxOGE2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0yMiw3ICsyMiw4IEBACiB2b2lkIHBhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CiB2b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tdV9nYXRoZXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKIAotdm9pZCBwYWdlX3RhYmxlX3Jlc2V0X3Bnc3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit2b2lkIHBhZ2VfdGFibGVfcmVzZXRfcGdzdGUoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJICAgIGJvb2wgaW5pdF9za2V5KTsKIGludCBzZXRfZ3Vlc3Rfc3RvcmFnZV9rZXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgdW5zaWduZWQgbG9uZyBrZXksIGJvb2wgbnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxMmY3NTMxLi5mY2JhNWUwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMwOSw3ICszMDksOCBAQAogI2RlZmluZSBQR1NURV9IQ19CSVQJMHgwMDIwMDAwMFVMCiAjZGVmaW5lIFBHU1RFX0dSX0JJVAkweDAwMDQwMDAwVUwKICNkZWZpbmUgUEdTVEVfR0NfQklUCTB4MDAwMjAwMDBVTAotI2RlZmluZSBQR1NURV9JTl9CSVQJMHgwMDAwODAwMFVMCS8qIElQVEUgbm90aWZ5IGJpdCAqLworI2RlZmluZSBQR1NURV9VQ19CSVQJMHgwMDAwODAwMFVMCS8qIHVzZXIgZGlydHkgKG1pZ3JhdGlvbikgKi8KKyNkZWZpbmUgUEdTVEVfSU5fQklUCTB4MDAwMDQwMDBVTAkvKiBJUFRFIG5vdGlmeSBiaXQgKi8KIAogI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAKQEAgLTM5MSw3ICszOTIsOCBAQAogI2RlZmluZSBQR1NURV9IQ19CSVQJMHgwMDIwMDAwMDAwMDAwMDAwVUwKICNkZWZpbmUgUEdTVEVfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCiAjZGVmaW5lIFBHU1RFX0dDX0JJVAkweDAwMDIwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBQR1NURV9JTl9CSVQJMHgwMDAwODAwMDAwMDAwMDAwVUwJLyogSVBURSBub3RpZnkgYml0ICovCisjZGVmaW5lIFBHU1RFX1VDX0JJVAkweDAwMDA4MDAwMDAwMDAwMDBVTAkvKiB1c2VyIGRpcnR5IChtaWdyYXRpb24pICovCisjZGVmaW5lIFBHU1RFX0lOX0JJVAkweDAwMDA0MDAwMDAwMDAwMDBVTAkvKiBJUFRFIG5vdGlmeSBiaXQgKi8KIAogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCkBAIC00NjYsNiArNDY4LDE2IEBACiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGlubGluZSBpbnQgbW1fdXNlX3NrZXkoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisjaWZkZWYgQ09ORklHX1BHU1RFCisJaWYgKG1tLT5jb250ZXh0LnVzZV9za2V5KQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiAvKgogICogcGdkL3BtZC9wdGUgcXVlcnkgZnVuY3Rpb25zCiAgKi8KQEAgLTY5OSwyNiArNzExLDE3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBwZ3N0ZV90IHBnc3RlX3VwZGF0ZV9hbGwocHRlX3QgKnB0ZXAsIHBnc3RlX3QgcGdzdGUpCitzdGF0aWMgaW5saW5lIHBnc3RlX3QgcGdzdGVfdXBkYXRlX2FsbChwdGVfdCAqcHRlcCwgcGdzdGVfdCBwZ3N0ZSwKKwkJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAjaWZkZWYgQ09ORklHX1BHU1RFCiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBiaXRzLCBza2V5OwogCi0JaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSU5WQUxJRCkKKwlpZiAoIW1tX3VzZV9za2V5KG1tKSB8fCBwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0lOVkFMSUQpCiAJCXJldHVybiBwZ3N0ZTsKIAlhZGRyZXNzID0gcHRlX3ZhbCgqcHRlcCkgJiBQQUdFX01BU0s7CiAJc2tleSA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2dldF9zdG9yYWdlX2tleShhZGRyZXNzKTsKIAliaXRzID0gc2tleSAmIChfUEFHRV9DSEFOR0VEIHwgX1BBR0VfUkVGRVJFTkNFRCk7Ci0JaWYgKCEocGdzdGVfdmFsKHBnc3RlKSAmIFBHU1RFX0hDX0JJVCkgJiYgKGJpdHMgJiBfUEFHRV9DSEFOR0VEKSkgewotCQkvKiBUcmFuc2ZlciBkaXJ0eSArIHJlZmVyZW5jZWQgYml0IHRvIGhvc3QgYml0cyBpbiBwZ3N0ZSAqLwotCQlwZ3N0ZV92YWwocGdzdGUpIHw9IGJpdHMgPDwgNTI7Ci0JCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGFkZHJlc3MsIHNrZXkgXiBiaXRzLCAwKTsKLQl9IGVsc2UgaWYgKCEocGdzdGVfdmFsKHBnc3RlKSAmIFBHU1RFX0hSX0JJVCkgJiYKLQkJICAgKGJpdHMgJiBfUEFHRV9SRUZFUkVOQ0VEKSkgewotCQkvKiBUcmFuc2ZlciByZWZlcmVuY2VkIGJpdCB0byBob3N0IGJpdCBpbiBwZ3N0ZSAqLwotCQlwZ3N0ZV92YWwocGdzdGUpIHw9IFBHU1RFX0hSX0JJVDsKLQkJcGFnZV9yZXNldF9yZWZlcmVuY2VkKGFkZHJlc3MpOwotCX0KIAkvKiBUcmFuc2ZlciBwYWdlIGNoYW5nZWQgJiByZWZlcmVuY2VkIGJpdCB0byBndWVzdCBiaXRzIGluIHBnc3RlICovCiAJcGdzdGVfdmFsKHBnc3RlKSB8PSBiaXRzIDw8IDQ4OwkJLyogR1IgYml0ICYgR0MgYml0ICovCiAJLyogQ29weSBwYWdlIGFjY2VzcyBrZXkgYW5kIGZldGNoIHByb3RlY3Rpb24gYml0IHRvIHBnc3RlICovCkBAIC03MjksMjUgKzczMiwxNCBAQAogCiB9CiAKLXN0YXRpYyBpbmxpbmUgcGdzdGVfdCBwZ3N0ZV91cGRhdGVfeW91bmcocHRlX3QgKnB0ZXAsIHBnc3RlX3QgcGdzdGUpCi17Ci0jaWZkZWYgQ09ORklHX1BHU1RFCi0JaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSU5WQUxJRCkKLQkJcmV0dXJuIHBnc3RlOwotCS8qIEdldCByZWZlcmVuY2VkIGJpdCBmcm9tIHN0b3JhZ2Uga2V5ICovCi0JaWYgKHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfdmFsKCpwdGVwKSAmIFBBR0VfTUFTSykpCi0JCXBnc3RlX3ZhbChwZ3N0ZSkgfD0gUEdTVEVfSFJfQklUIHwgUEdTVEVfR1JfQklUOwotI2VuZGlmCi0JcmV0dXJuIHBnc3RlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdzdGVfc2V0X2tleShwdGVfdCAqcHRlcCwgcGdzdGVfdCBwZ3N0ZSwgcHRlX3QgZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgcGdzdGVfc2V0X2tleShwdGVfdCAqcHRlcCwgcGdzdGVfdCBwZ3N0ZSwgcHRlX3QgZW50cnksCisJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogI2lmZGVmIENPTkZJR19QR1NURQogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIG5rZXk7CiAKLQlpZiAocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9JTlZBTElEKQorCWlmICghbW1fdXNlX3NrZXkobW0pIHx8IHB0ZV92YWwoZW50cnkpICYgX1BBR0VfSU5WQUxJRCkKIAkJcmV0dXJuOwogCVZNX0JVR19PTighKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSU5WQUxJRCkpOwogCWFkZHJlc3MgPSBwdGVfdmFsKGVudHJ5KSAmIFBBR0VfTUFTSzsKQEAgLTc1NywyMyArNzQ5LDMwIEBACiAJICoga2V5IEMvUiB0byAwLgogCSAqLwogCW5rZXkgPSAocGdzdGVfdmFsKHBnc3RlKSAmIChQR1NURV9BQ0NfQklUUyB8IFBHU1RFX0ZQX0JJVCkpID4+IDU2OworCW5rZXkgfD0gKHBnc3RlX3ZhbChwZ3N0ZSkgJiAoUEdTVEVfR1JfQklUIHwgUEdTVEVfR0NfQklUKSkgPj4gNDg7CiAJcGFnZV9zZXRfc3RvcmFnZV9rZXkoYWRkcmVzcywgbmtleSwgMCk7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBnc3RlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5KQorc3RhdGljIGlubGluZSBwZ3N0ZV90IHBnc3RlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHBnc3RlX3QgcGdzdGUsIHB0ZV90IGVudHJ5KQogewotCWlmICghTUFDSElORV9IQVNfRVNPUCAmJgotCSAgICAocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9QUkVTRU5UKSAmJgotCSAgICAocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9XUklURSkpIHsKLQkJLyoKLQkJICogV2l0aG91dCBlbmhhbmNlZCBzdXBwcmVzc2lvbi1vbi1wcm90ZWN0aW9uIGZvcmNlCi0JCSAqIHRoZSBkaXJ0eSBiaXQgb24gZm9yIGFsbCB3cml0YWJsZSBwdGVzLgotCQkgKi8KLQkJcHRlX3ZhbChlbnRyeSkgfD0gX1BBR0VfRElSVFk7Ci0JCXB0ZV92YWwoZW50cnkpICY9IH5fUEFHRV9QUk9URUNUOworCWlmICgocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9QUkVTRU5UKSAmJgorCSAgICAocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9XUklURSkgJiYKKwkgICAgIShwdGVfdmFsKGVudHJ5KSAmIF9QQUdFX0lOVkFMSUQpKSB7CisJCWlmICghTUFDSElORV9IQVNfRVNPUCkgeworCQkJLyoKKwkJCSAqIFdpdGhvdXQgZW5oYW5jZWQgc3VwcHJlc3Npb24tb24tcHJvdGVjdGlvbiBmb3JjZQorCQkJICogdGhlIGRpcnR5IGJpdCBvbiBmb3IgYWxsIHdyaXRhYmxlIHB0ZXMuCisJCQkgKi8KKwkJCXB0ZV92YWwoZW50cnkpIHw9IF9QQUdFX0RJUlRZOworCQkJcHRlX3ZhbChlbnRyeSkgJj0gfl9QQUdFX1BST1RFQ1Q7CisJCX0KKwkJaWYgKCEocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9QUk9URUNUKSkKKwkJCS8qIFRoaXMgcHRlIGFsbG93cyB3cml0ZSBhY2Nlc3MsIHNldCB1c2VyLWRpcnR5ICovCisJCQlwZ3N0ZV92YWwocGdzdGUpIHw9IFBHU1RFX1VDX0JJVDsKIAl9CiAJKnB0ZXAgPSBlbnRyeTsKKwlyZXR1cm4gcGdzdGU7CiB9CiAKIC8qKgpAQCAtODM5LDYgKzgzOCw4IEBACiB1bnNpZ25lZCBsb25nIGdtYXBfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgZ21hcCAqKTsKIHZvaWQgZ21hcF9kaXNjYXJkKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywgc3RydWN0IGdtYXAgKik7CiB2b2lkIF9fZ21hcF96YXAodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgZ21hcCAqKTsKK2Jvb2wgZ21hcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBnbWFwICopOworCiAKIHZvaWQgZ21hcF9yZWdpc3Rlcl9pcHRlX25vdGlmaWVyKHN0cnVjdCBnbWFwX25vdGlmaWVyICopOwogdm9pZCBnbWFwX3VucmVnaXN0ZXJfaXB0ZV9ub3RpZmllcihzdHJ1Y3QgZ21hcF9ub3RpZmllciAqKTsKQEAgLTg3MCw4ICs4NzEsOCBAQAogCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7CiAJCXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiAJCXBnc3RlX3ZhbChwZ3N0ZSkgJj0gfl9QR1NURV9HUFNfWkVSTzsKLQkJcGdzdGVfc2V0X2tleShwdGVwLCBwZ3N0ZSwgZW50cnkpOwotCQlwZ3N0ZV9zZXRfcHRlKHB0ZXAsIGVudHJ5KTsKKwkJcGdzdGVfc2V0X2tleShwdGVwLCBwZ3N0ZSwgZW50cnksIG1tKTsKKwkJcGdzdGUgPSBwZ3N0ZV9zZXRfcHRlKHB0ZXAsIHBnc3RlLCBlbnRyeSk7CiAJCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwogCX0gZWxzZSB7CiAJCWlmICghKHB0ZV92YWwoZW50cnkpICYgX1BBR0VfSU5WQUxJRCkgJiYgTUFDSElORV9IQVNfRURBVDEpCkBAIC0xMDE3LDQ1ICsxMDE4LDYgQEAKIH0KICNlbmRpZgogCi0vKgotICogR2V0IChhbmQgY2xlYXIpIHRoZSB1c2VyIGRpcnR5IGJpdCBmb3IgYSBwdGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfdXNlcl9kaXJ0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJCSBwdGVfdCAqcHRlcCkKLXsKLQlwZ3N0ZV90IHBnc3RlOwotCWludCBkaXJ0eSA9IDA7Ci0KLQlpZiAobW1faGFzX3Bnc3RlKG1tKSkgewotCQlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwotCQlwZ3N0ZSA9IHBnc3RlX3VwZGF0ZV9hbGwocHRlcCwgcGdzdGUpOwotCQlkaXJ0eSA9ICEhKHBnc3RlX3ZhbChwZ3N0ZSkgJiBQR1NURV9IQ19CSVQpOwotCQlwZ3N0ZV92YWwocGdzdGUpICY9IH5QR1NURV9IQ19CSVQ7Ci0JCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwotCQlyZXR1cm4gZGlydHk7Ci0JfQotCXJldHVybiBkaXJ0eTsKLX0KLQotLyoKLSAqIEdldCAoYW5kIGNsZWFyKSB0aGUgdXNlciByZWZlcmVuY2VkIGJpdCBmb3IgYSBwdGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfdXNlcl95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJCSBwdGVfdCAqcHRlcCkKLXsKLQlwZ3N0ZV90IHBnc3RlOwotCWludCB5b3VuZyA9IDA7Ci0KLQlpZiAobW1faGFzX3Bnc3RlKG1tKSkgewotCQlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwotCQlwZ3N0ZSA9IHBnc3RlX3VwZGF0ZV95b3VuZyhwdGVwLCBwZ3N0ZSk7Ci0JCXlvdW5nID0gISEocGdzdGVfdmFsKHBnc3RlKSAmIFBHU1RFX0hSX0JJVCk7Ci0JCXBnc3RlX3ZhbChwZ3N0ZSkgJj0gflBHU1RFX0hSX0JJVDsKLQkJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7Ci0JfQotCXJldHVybiB5b3VuZzsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9pcHRlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJdW5zaWduZWQgbG9uZyBwdG8gPSAodW5zaWduZWQgbG9uZykgcHRlcDsKQEAgLTExMTgsNiArMTA4MCwzNiBAQAogCWF0b21pY19zdWIoMHgxMDAwMCwgJm1tLT5jb250ZXh0LmF0dGFjaF9jb3VudCk7CiB9CiAKKy8qCisgKiBHZXQgKGFuZCBjbGVhcikgdGhlIHVzZXIgZGlydHkgYml0IGZvciBhIHB0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl91c2VyX2RpcnR5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJCSBwdGVfdCAqcHRlcCkKK3sKKwlwZ3N0ZV90IHBnc3RlOworCXB0ZV90IHB0ZTsKKwlpbnQgZGlydHk7CisKKwlpZiAoIW1tX2hhc19wZ3N0ZShtbSkpCisJCXJldHVybiAwOworCXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CisJZGlydHkgPSAhIShwZ3N0ZV92YWwocGdzdGUpICYgUEdTVEVfVUNfQklUKTsKKwlwZ3N0ZV92YWwocGdzdGUpICY9IH5QR1NURV9VQ19CSVQ7CisJcHRlID0gKnB0ZXA7CisJaWYgKGRpcnR5ICYmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKSkgeworCQlwZ3N0ZSA9IHBnc3RlX2lwdGVfbm90aWZ5KG1tLCBwdGVwLCBwZ3N0ZSk7CisJCV9fcHRlcF9pcHRlKGFkZHIsIHB0ZXApOworCQlpZiAoTUFDSElORV9IQVNfRVNPUCB8fCAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX1dSSVRFKSkKKwkJCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9QUk9URUNUOworCQllbHNlCisJCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfSU5WQUxJRDsKKwkJKnB0ZXAgPSBwdGU7CisJfQorCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOworCXJldHVybiBkaXJ0eTsKK30KKwogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCiBzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKQEAgLTExMzcsNyArMTEyOSw3IEBACiAJcHRlID0gcHRlX21rb2xkKHB0ZSk7CiAKIAlpZiAobW1faGFzX3Bnc3RlKHZtYS0+dm1fbW0pKSB7Ci0JCXBnc3RlX3NldF9wdGUocHRlcCwgcHRlKTsKKwkJcGdzdGUgPSBwZ3N0ZV9zZXRfcHRlKHB0ZXAsIHBnc3RlLCBwdGUpOwogCQlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKIAl9IGVsc2UKIAkJKnB0ZXAgPSBwdGU7CkBAIC0xMTgyLDcgKzExNzQsNyBAQAogCXB0ZV92YWwoKnB0ZXApID0gX1BBR0VfSU5WQUxJRDsKIAogCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7Ci0JCXBnc3RlID0gcGdzdGVfdXBkYXRlX2FsbCgmcHRlLCBwZ3N0ZSk7CisJCXBnc3RlID0gcGdzdGVfdXBkYXRlX2FsbCgmcHRlLCBwZ3N0ZSwgbW0pOwogCQlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKIAl9CiAJcmV0dXJuIHB0ZTsKQEAgLTEyMDUsNyArMTE5Nyw3IEBACiAJcHRlcF9mbHVzaF9sYXp5KG1tLCBhZGRyZXNzLCBwdGVwKTsKIAogCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7Ci0JCXBnc3RlID0gcGdzdGVfdXBkYXRlX2FsbCgmcHRlLCBwZ3N0ZSk7CisJCXBnc3RlID0gcGdzdGVfdXBkYXRlX2FsbCgmcHRlLCBwZ3N0ZSwgbW0pOwogCQlwZ3N0ZV9zZXQocHRlcCwgcGdzdGUpOwogCX0KIAlyZXR1cm4gcHRlOwpAQCAtMTIxOSw4ICsxMjExLDggQEAKIAogCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7CiAJCXBnc3RlID0gcGdzdGVfZ2V0KHB0ZXApOwotCQlwZ3N0ZV9zZXRfa2V5KHB0ZXAsIHBnc3RlLCBwdGUpOwotCQlwZ3N0ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7CisJCXBnc3RlX3NldF9rZXkocHRlcCwgcGdzdGUsIHB0ZSwgbW0pOworCQlwZ3N0ZSA9IHBnc3RlX3NldF9wdGUocHRlcCwgcGdzdGUsIHB0ZSk7CiAJCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwogCX0gZWxzZQogCQkqcHRlcCA9IHB0ZTsKQEAgLTEyNDYsNyArMTIzOCw3IEBACiAJCWlmICgocGdzdGVfdmFsKHBnc3RlKSAmIF9QR1NURV9HUFNfVVNBR0VfTUFTSykgPT0KIAkJICAgIF9QR1NURV9HUFNfVVNBR0VfVU5VU0VEKQogCQkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1VOVVNFRDsKLQkJcGdzdGUgPSBwZ3N0ZV91cGRhdGVfYWxsKCZwdGUsIHBnc3RlKTsKKwkJcGdzdGUgPSBwZ3N0ZV91cGRhdGVfYWxsKCZwdGUsIHBnc3RlLCB2bWEtPnZtX21tKTsKIAkJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7CiAJfQogCXJldHVybiBwdGU7CkBAIC0xMjc4LDcgKzEyNzAsNyBAQAogCXB0ZV92YWwoKnB0ZXApID0gX1BBR0VfSU5WQUxJRDsKIAogCWlmICghZnVsbCAmJiBtbV9oYXNfcGdzdGUobW0pKSB7Ci0JCXBnc3RlID0gcGdzdGVfdXBkYXRlX2FsbCgmcHRlLCBwZ3N0ZSk7CisJCXBnc3RlID0gcGdzdGVfdXBkYXRlX2FsbCgmcHRlLCBwZ3N0ZSwgbW0pOwogCQlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKIAl9CiAJcmV0dXJuIHB0ZTsKQEAgLTEzMDEsNyArMTI5Myw3IEBACiAJCXB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTsKIAogCQlpZiAobW1faGFzX3Bnc3RlKG1tKSkgewotCQkJcGdzdGVfc2V0X3B0ZShwdGVwLCBwdGUpOworCQkJcGdzdGUgPSBwZ3N0ZV9zZXRfcHRlKHB0ZXAsIHBnc3RlLCBwdGUpOwogCQkJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7CiAJCX0gZWxzZQogCQkJKnB0ZXAgPSBwdGU7CkBAIC0xMzI2LDcgKzEzMTgsNyBAQAogCXB0ZXBfZmx1c2hfZGlyZWN0KHZtYS0+dm1fbW0sIGFkZHJlc3MsIHB0ZXApOwogCiAJaWYgKG1tX2hhc19wZ3N0ZSh2bWEtPnZtX21tKSkgewotCQlwZ3N0ZV9zZXRfcHRlKHB0ZXAsIGVudHJ5KTsKKwkJcGdzdGUgPSBwZ3N0ZV9zZXRfcHRlKHB0ZXAsIHBnc3RlLCBlbnRyeSk7CiAJCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwogCX0gZWxzZQogCQkqcHRlcCA9IGVudHJ5OwpAQCAtMTczNCw2ICsxNzI2LDcgQEAKIGV4dGVybiBpbnQgdm1lbV9hZGRfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIGludCB2bWVtX3JlbW92ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gaW50IHMzOTBfZW5hYmxlX3NpZSh2b2lkKTsKK2V4dGVybiB2b2lkIHMzOTBfZW5hYmxlX3NrZXkodm9pZCk7CiAKIC8qCiAgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggZGM1ZmM0Zi4uNmYwMmQ0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTEsNiArMTEsMTMgQEAKICNpZm5kZWYgX19BU01fUzM5MF9QUk9DRVNTT1JfSAogI2RlZmluZSBfX0FTTV9TMzkwX1BST0NFU1NPUl9ICiAKKyNkZWZpbmUgQ0lGX01DQ0tfUEVORElORwkwCS8qIG1hY2hpbmUgY2hlY2sgaGFuZGxpbmcgaXMgcGVuZGluZyAqLworI2RlZmluZSBDSUZfQVNDRQkJMQkvKiB1c2VyIGFzY2UgbmVlZHMgZml4dXAgLyB1YWNjZXNzICovCisKKyNkZWZpbmUgX0NJRl9NQ0NLX1BFTkRJTkcJKDE8PENJRl9NQ0NLX1BFTkRJTkcpCisjZGVmaW5lIF9DSUZfQVNDRQkJKDE8PENJRl9BU0NFKQorCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC0yMSw2ICsyOCwyMSBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9ydW50aW1lX2luc3RyLmg+CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3B1X2ZsYWcoaW50IGZsYWcpCit7CisJUzM5MF9sb3djb3JlLmNwdV9mbGFncyB8PSAoMVUgPDwgZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9jcHVfZmxhZyhpbnQgZmxhZykKK3sKKwlTMzkwX2xvd2NvcmUuY3B1X2ZsYWdzICY9IH4oMVUgPDwgZmxhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfY3B1X2ZsYWcoaW50IGZsYWcpCit7CisJcmV0dXJuICEhKFMzOTBfbG93Y29yZS5jcHVfZmxhZ3MgJiAoMVUgPDwgZmxhZykpOworfQorCiAvKgogICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWNybyB0aGF0IHJldHVybnMgY3VycmVudAogICogaW5zdHJ1Y3Rpb24gcG9pbnRlciAoInByb2dyYW0gY291bnRlciIpLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGY0NzgzYzAuLjU1ZDY5ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTgsNiArOCwxMiBAQAogCiAjaW5jbHVkZSA8dWFwaS9hc20vcHRyYWNlLmg+CiAKKyNkZWZpbmUgUElGX1NZU0NBTEwJCTAJLyogaW5zaWRlIGEgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUgUElGX1BFUl9UUkFQCQkxCS8qIGRlbGl2ZXIgc2lndHJhcCBvbiByZXR1cm4gdG8gdXNlciAqLworCisjZGVmaW5lIF9QSUZfU1lTQ0FMTAkJKDE8PFBJRl9TWVNDQUxMKQorI2RlZmluZSBfUElGX1BFUl9UUkFQCQkoMTw8UElGX1BFUl9UUkFQKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjZGVmaW5lIFBTV19LRVJORUxfQklUUwkoUFNXX0RFRkFVTFRfS0VZIHwgUFNXX01BU0tfQkFTRSB8IFBTV19BU0NfSE9NRSB8IFwKQEAgLTE2LDYgKzIyLDUwIEBACiAJCQkgUFNXX0RFRkFVTFRfS0VZIHwgUFNXX01BU0tfQkFTRSB8IFBTV19NQVNLX01DSEVDSyB8IFwKIAkJCSBQU1dfTUFTS19QU1RBVEUgfCBQU1dfQVNDX1BSSU1BUlkpCiAKK3N0cnVjdCBwc3dfYml0cyB7CisJdW5zaWduZWQgbG9uZyBsb25nCTogMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcgk6IDE7IC8qIFBFUi1NYXNrICovCisJdW5zaWduZWQgbG9uZyBsb25nCTogMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdAk6IDE7IC8qIERBVCBNb2RlICovCisJdW5zaWduZWQgbG9uZyBsb25nIGkJOiAxOyAvKiBJbnB1dC9PdXRwdXQgTWFzayAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBlCTogMTsgLyogRXh0ZXJuYWwgTWFzayAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBrZXkJOiA0OyAvKiBQU1cgS2V5ICovCisJdW5zaWduZWQgbG9uZyBsb25nCTogMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbQk6IDE7IC8qIE1hY2hpbmUtQ2hlY2sgTWFzayAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyB3CTogMTsgLyogV2FpdCBTdGF0ZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBwCTogMTsgLyogUHJvYmxlbSBTdGF0ZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBhcwk6IDI7IC8qIEFkZHJlc3MgU3BhY2UgQ29udHJvbCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYwk6IDI7IC8qIENvbmRpdGlvbiBDb2RlICovCisJdW5zaWduZWQgbG9uZyBsb25nIHBtCTogNDsgLyogUHJvZ3JhbSBNYXNrICovCisJdW5zaWduZWQgbG9uZyBsb25nIHJpCTogMTsgLyogUnVudGltZSBJbnN0cnVtZW50YXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcJOiA2OworCXVuc2lnbmVkIGxvbmcgbG9uZyBlYWJhIDogMjsgLyogQWRkcmVzc2luZyBNb2RlICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJdW5zaWduZWQgbG9uZyBsb25nCTogMzE7CisJdW5zaWduZWQgbG9uZyBsb25nIGlhCTogNjQ7LyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyAqLworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIGxvbmcgaWEJOiAzMTsvKiBJbnN0cnVjdGlvbiBBZGRyZXNzICovCisjZW5kaWYKK307CisKK2VudW0geworCVBTV19BTU9ERV8yNEJJVCA9IDAsCisJUFNXX0FNT0RFXzMxQklUID0gMSwKKwlQU1dfQU1PREVfNjRCSVQgPSAzCit9OworCitlbnVtIHsKKwlQU1dfQVNfUFJJTUFSWQkgPSAwLAorCVBTV19BU19BQ0NSRUcJID0gMSwKKwlQU1dfQVNfU0VDT05EQVJZID0gMiwKKwlQU1dfQVNfSE9NRQkgPSAzCit9OworCisjZGVmaW5lIHBzd19iaXRzKF9fcHN3KSAoKih7CQkJXAorCXR5cGVjaGVjayhwc3dfdCwgX19wc3cpOwkJXAorCSYoKihzdHJ1Y3QgcHN3X2JpdHMgKikoJihfX3BzdykpKTsJXAorfSkpCisKIC8qCiAgKiBUaGUgcHRfcmVncyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbgogICogdGhlIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLgpAQCAtMjksNiArNzksNyBAQAogCXVuc2lnbmVkIGludCBpbnRfY29kZTsKIAl1bnNpZ25lZCBpbnQgaW50X3Bhcm07CiAJdW5zaWduZWQgbG9uZyBpbnRfcGFybV9sb25nOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCiAvKgpAQCAtNzksNiArMTMwLDIxIEBACiAjZGVmaW5lIFBFUl9DT05UUk9MX1NVU1BFTlNJT04JCTB4MDA0MDAwMDBVTAogI2RlZmluZSBQRVJfQ09OVFJPTF9BTFRFUkFUSU9OCQkweDAwMjAwMDAwVUwKIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9wdF9yZWdzX2ZsYWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBmbGFnKQoreworCXJlZ3MtPmZsYWdzIHw9ICgxVSA8PCBmbGFnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3B0X3JlZ3NfZmxhZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGZsYWcpCit7CisJcmVncy0+ZmxhZ3MgJj0gfigxVSA8PCBmbGFnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9wdF9yZWdzX2ZsYWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBmbGFnKQoreworCXJldHVybiAhIShyZWdzLT5mbGFncyAmICgxVSA8PCBmbGFnKSk7Cit9CisKIC8qCiAgKiBUaGVzZSBhcmUgZGVmaW5lZCBhcyBwZXIgbGludXgvcHRyYWNlLmgsIHdoaWNoIHNlZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NjbHAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zY2xwLmgKaW5kZXggMmY1ZTk5My4uMWFiYTg5YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NjbHAuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NscC5oCkBAIC0yOCw3ICsyOCwxMSBAQAogCiBzdHJ1Y3Qgc2NscF9jcHVfZW50cnkgewogCXU4IGFkZHJlc3M7Ci0JdTggcmVzZXJ2ZWQwWzEzXTsKKwl1OCByZXNlcnZlZDBbMl07CisJdTggOiAzOworCXU4IHNpaWYgOiAxOworCXU4IDogNDsKKwl1OCByZXNlcnZlZDJbMTBdOwogCXU4IHR5cGU7CiAJdTggcmVzZXJ2ZWQxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKQEAgLTYxLDUgKzY1LDcgQEAKIGludCBtZW1jcHlfaHNhKHZvaWQgKmRlc3QsIHVuc2lnbmVkIGxvbmcgc3JjLCBzaXplX3QgY291bnQsIGludCBtb2RlKTsKIHVuc2lnbmVkIGxvbmcgc2NscF9nZXRfaHNhX3NpemUodm9pZCk7CiB2b2lkIHNjbHBfZWFybHlfZGV0ZWN0KHZvaWQpOworaW50IHNjbHBfaGFzX3NpaWYodm9pZCk7Cit1bnNpZ25lZCBpbnQgc2NscF9nZXRfaWJjKHZvaWQpOwogCiAjZW5kaWYgLyogX0FTTV9TMzkwX1NDTFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBiMzFiMjJkLi4wODlhNDk4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtOSw3ICs5LDYgQEAKIAogCiAjZGVmaW5lIFBBUk1BUkVBCQkweDEwNDAwCi0jZGVmaW5lIE1FTU9SWV9DSFVOS1MJCTI1NgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC0zMSwyMiArMzAsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KICNkZWZpbmUgQ09NTUFORF9MSU5FICAgICAgKChjaGFyICopICAgICAgICAgICAgKDB4MTA0ODApKQogCi0jZGVmaW5lIENIVU5LX1JFQURfV1JJVEUgMAotI2RlZmluZSBDSFVOS19SRUFEX09OTFkgIDEKLQotc3RydWN0IG1lbV9jaHVuayB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlpbnQgdHlwZTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgbWVtX2NodW5rIG1lbW9yeV9jaHVua1tdOwogZXh0ZXJuIGludCBtZW1vcnlfZW5kX3NldDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGh5c21lbV9lbmQ7CiAKLXZvaWQgZGV0ZWN0X21lbW9yeV9sYXlvdXQoc3RydWN0IG1lbV9jaHVuayBjaHVua1tdLCB1bnNpZ25lZCBsb25nIG1heHNpemUpOwotdm9pZCBjcmVhdGVfbWVtX2hvbGUoc3RydWN0IG1lbV9jaHVuayBtZW1fY2h1bmtbXSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBkZXRlY3RfbWVtb3J5X21lbWJsb2NrKHZvaWQpOwogCiAvKgogICogTWFjaGluZSBmZWF0dXJlcyBkZXRlY3RlZCBpbiBoZWFkLlMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAyMTcwM2Y4Li40ZjEzMDc5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0zMCw3ICszMCw2IEBACiBleHRlcm4gaW50IHNtcF92Y3B1X3NjaGVkdWxlZChpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHNtcF95aWVsZF9jcHUoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBzbXBfeWllbGQodm9pZCk7Ci1leHRlcm4gdm9pZCBzbXBfc3RvcF9jcHUodm9pZCk7CiBleHRlcm4gdm9pZCBzbXBfY3B1X3NldF9wb2xhcml6YXRpb24oaW50IGNwdSwgaW50IHZhbCk7CiBleHRlcm4gaW50IHNtcF9jcHVfZ2V0X3BvbGFyaXphdGlvbihpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHNtcF9maWxsX3Bvc3NpYmxlX21hc2sodm9pZCk7CkBAIC01NCw2ICs1Myw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc21wX3lpZWxkKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHNtcF9maWxsX3Bvc3NpYmxlX21hc2sodm9pZCkgeyB9CiAKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfc3RvcF9jcHUodm9pZCkKIHsKIAl1MTYgcGNwdSA9IHN0YXAoKTsKQEAgLTY0LDggKzY1LDYgQEAKIAl9CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiBpbnQgc21wX3Jlc2Nhbl9jcHVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19ub3JldHVybiBjcHVfZGllKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA4M2U1ZDIxNi4uOTY4NzlmNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTExLDE4ICsxMSwyMSBAQAogCiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKKyNkZWZpbmUgU1BJTkxPQ0tfTE9DS1ZBTCAoUzM5MF9sb3djb3JlLnNwaW5sb2NrX2xvY2t2YWwpCisKIGV4dGVybiBpbnQgc3Bpbl9yZXRyeTsKIAogc3RhdGljIGlubGluZSBpbnQKLV9yYXdfY29tcGFyZV9hbmRfc3dhcCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmxvY2ssCi0JCSAgICAgIHVuc2lnbmVkIGludCBvbGQsIHVuc2lnbmVkIGludCBuZXcpCitfcmF3X2NvbXBhcmVfYW5kX3N3YXAodW5zaWduZWQgaW50ICpsb2NrLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogeworCXVuc2lnbmVkIGludCBvbGRfZXhwZWN0ZWQgPSBvbGQ7CisKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3MJJTAsJTMsJTEiCiAJCTogIj1kIiAob2xkKSwgIj1RIiAoKmxvY2spCiAJCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJRIiAoKmxvY2spCiAJCTogImNjIiwgIm1lbW9yeSIgKTsKLQlyZXR1cm4gb2xkOworCXJldHVybiBvbGQgPT0gb2xkX2V4cGVjdGVkOwogfQogCiAvKgpAQCAtMzQsNTcgKzM3LDY5IEBACiAgKiAodGhlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluIGFzbS9zcGlubG9ja190eXBlcy5oKQogICovCiAKLSNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KSAoKHgpLT5vd25lcl9jcHUgIT0gMCkKLSNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQlkbyB7IHdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKSBcCi0JCSBhcmNoX3NwaW5fcmVsYXgobG9jayk7IH0gd2hpbGUgKDApCit2b2lkIGFyY2hfc3Bpbl9sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICopOworaW50IGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KGFyY2hfc3BpbmxvY2tfdCAqKTsKK3ZvaWQgYXJjaF9zcGluX3JlbGF4KGFyY2hfc3BpbmxvY2tfdCAqKTsKK3ZvaWQgYXJjaF9zcGluX2xvY2tfd2FpdF9mbGFncyhhcmNoX3NwaW5sb2NrX3QgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLWV4dGVybiB2b2lkIGFyY2hfc3Bpbl9sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICopOwotZXh0ZXJuIHZvaWQgYXJjaF9zcGluX2xvY2tfd2FpdF9mbGFncyhhcmNoX3NwaW5sb2NrX3QgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci1leHRlcm4gaW50IGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KGFyY2hfc3BpbmxvY2tfdCAqKTsKLWV4dGVybiB2b2lkIGFyY2hfc3Bpbl9yZWxheChhcmNoX3NwaW5sb2NrX3QgKmxvY2spOworc3RhdGljIGlubGluZSB1MzIgYXJjaF9zcGluX2xvY2t2YWwoaW50IGNwdSkKK3sKKwlyZXR1cm4gfmNwdTsKK30KIAogc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3ZhbHVlX3VubG9ja2VkKGFyY2hfc3BpbmxvY2tfdCBsb2NrKQogewotCXJldHVybiBsb2NrLm93bmVyX2NwdSA9PSAwOworCXJldHVybiBsb2NrLmxvY2sgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxwKQoreworCXJldHVybiBBQ0NFU1NfT05DRShscC0+bG9jaykgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2tfb25jZShhcmNoX3NwaW5sb2NrX3QgKmxwKQoreworCWJhcnJpZXIoKTsKKwlyZXR1cm4gbGlrZWx5KGFyY2hfc3Bpbl92YWx1ZV91bmxvY2tlZCgqbHApICYmCisJCSAgICAgIF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPmxvY2ssIDAsIFNQSU5MT0NLX0xPQ0tWQUwpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3RyeXJlbGVhc2Vfb25jZShhcmNoX3NwaW5sb2NrX3QgKmxwKQoreworCXJldHVybiBfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5sb2NrLCBTUElOTE9DS19MT0NLVkFMLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbHApCiB7Ci0JaW50IG9sZDsKLQotCW9sZCA9IF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgfnNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKGxpa2VseShvbGQgPT0gMCkpCi0JCXJldHVybjsKLQlhcmNoX3NwaW5fbG9ja193YWl0KGxwKTsKKwlpZiAoIWFyY2hfc3Bpbl90cnlsb2NrX29uY2UobHApKQorCQlhcmNoX3NwaW5fbG9ja193YWl0KGxwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrX2ZsYWdzKGFyY2hfc3BpbmxvY2tfdCAqbHAsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCWludCBvbGQ7Ci0KLQlvbGQgPSBfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsIH5zbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChsaWtlbHkob2xkID09IDApKQotCQlyZXR1cm47Ci0JYXJjaF9zcGluX2xvY2tfd2FpdF9mbGFncyhscCwgZmxhZ3MpOworCWlmICghYXJjaF9zcGluX3RyeWxvY2tfb25jZShscCkpCisJCWFyY2hfc3Bpbl9sb2NrX3dhaXRfZmxhZ3MobHAsIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpscCkKIHsKLQlpbnQgb2xkOwotCi0Jb2xkID0gX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCB+c21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAobGlrZWx5KG9sZCA9PSAwKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KGxwKTsKKwlpZiAoIWFyY2hfc3Bpbl90cnlsb2NrX29uY2UobHApKQorCQlyZXR1cm4gYXJjaF9zcGluX3RyeWxvY2tfcmV0cnkobHApOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxwKQogewotCV9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgbHAtPm93bmVyX2NwdSwgMCk7CisJYXJjaF9zcGluX3RyeXJlbGVhc2Vfb25jZShscCk7CiB9Ci0JCQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwl3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZChsb2NrKSkKKwkJYXJjaF9zcGluX3JlbGF4KGxvY2spOworfQorCiAvKgogICogUmVhZC13cml0ZSBzcGlubG9ja3MsIGFsbG93aW5nIG11bHRpcGxlIHJlYWRlcnMKICAqIGJ1dCBvbmx5IG9uZSB3cml0ZXIuCkBAIC0xMTUsNDIgKzEzMCw1MCBAQAogZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV9sb2NrX3dhaXRfZmxhZ3MoYXJjaF9yd2xvY2tfdCAqbHAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJuIGludCBfcmF3X3dyaXRlX3RyeWxvY2tfcmV0cnkoYXJjaF9yd2xvY2tfdCAqbHApOwogCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9ja19vbmNlKGFyY2hfcndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGludCBvbGQgPSBBQ0NFU1NfT05DRShydy0+bG9jayk7CisJcmV0dXJuIGxpa2VseSgoaW50KSBvbGQgPj0gMCAmJgorCQkgICAgICBfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCBvbGQsIG9sZCArIDEpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrX29uY2UoYXJjaF9yd2xvY2tfdCAqcncpCit7CisJdW5zaWduZWQgaW50IG9sZCA9IEFDQ0VTU19PTkNFKHJ3LT5sb2NrKTsKKwlyZXR1cm4gbGlrZWx5KG9sZCA9PSAwICYmCisJCSAgICAgIF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIDAsIDB4ODAwMDAwMDApKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCXVuc2lnbmVkIGludCBvbGQ7Ci0Jb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKLQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgb2xkLCBvbGQgKyAxKSAhPSBvbGQpCisJaWYgKCFhcmNoX3JlYWRfdHJ5bG9ja19vbmNlKHJ3KSkKIAkJX3Jhd19yZWFkX2xvY2tfd2FpdChydyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9ja19mbGFncyhhcmNoX3J3bG9ja190ICpydywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQl1bnNpZ25lZCBpbnQgb2xkOwotCW9sZCA9IHJ3LT5sb2NrICYgMHg3ZmZmZmZmZlU7Ci0JaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkgIT0gb2xkKQorCWlmICghYXJjaF9yZWFkX3RyeWxvY2tfb25jZShydykpCiAJCV9yYXdfcmVhZF9sb2NrX3dhaXRfZmxhZ3MocncsIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JdW5zaWduZWQgaW50IG9sZCwgY21wOworCXVuc2lnbmVkIGludCBvbGQ7CiAKLQlvbGQgPSBydy0+bG9jazsKIAlkbyB7Ci0JCWNtcCA9IG9sZDsKLQkJb2xkID0gX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgb2xkLCBvbGQgLSAxKTsKLQl9IHdoaWxlIChjbXAgIT0gb2xkKTsKKwkJb2xkID0gQUNDRVNTX09OQ0UocnctPmxvY2spOworCX0gd2hpbGUgKCFfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCBvbGQsIG9sZCAtIDEpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlpZiAodW5saWtlbHkoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkgIT0gMCkpCisJaWYgKCFhcmNoX3dyaXRlX3RyeWxvY2tfb25jZShydykpCiAJCV9yYXdfd3JpdGVfbG9ja193YWl0KHJ3KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9ja19mbGFncyhhcmNoX3J3bG9ja190ICpydywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlpZiAodW5saWtlbHkoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkgIT0gMCkpCisJaWYgKCFhcmNoX3dyaXRlX3RyeWxvY2tfb25jZShydykpCiAJCV9yYXdfd3JpdGVfbG9ja193YWl0X2ZsYWdzKHJ3LCBmbGFncyk7CiB9CiAKQEAgLTE2MSwxOCArMTg0LDE2IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCXVuc2lnbmVkIGludCBvbGQ7Ci0Jb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKLQlpZiAobGlrZWx5KF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkgPT0gb2xkKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIF9yYXdfcmVhZF90cnlsb2NrX3JldHJ5KHJ3KTsKKwlpZiAoIWFyY2hfcmVhZF90cnlsb2NrX29uY2UocncpKQorCQlyZXR1cm4gX3Jhd19yZWFkX3RyeWxvY2tfcmV0cnkocncpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3dyaXRlX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JaWYgKGxpa2VseShfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCAwLCAweDgwMDAwMDAwKSA9PSAwKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIF9yYXdfd3JpdGVfdHJ5bG9ja19yZXRyeShydyk7CisJaWYgKCFhcmNoX3dyaXRlX3RyeWxvY2tfb25jZShydykpCisJCXJldHVybiBfcmF3X3dyaXRlX3RyeWxvY2tfcmV0cnkocncpOworCXJldHVybiAxOwogfQogCiAjZGVmaW5lIGFyY2hfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCA5Yzc2NjU2Li5iMmNkNmZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNiwxMyArNiwxMyBAQAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgb3duZXJfY3B1OworCXVuc2lnbmVkIGludCBsb2NrOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKSBhcmNoX3NwaW5sb2NrX3Q7CiAKLSNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEIHsgLmxvY2sgPSAwLCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKwl1bnNpZ25lZCBpbnQgbG9jazsKIH0gYXJjaF9yd2xvY2tfdDsKIAogI2RlZmluZSBfX0FSQ0hfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaAppbmRleCBlNzU5MTgxLi4yOWM4MWY4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCkBAIC0xMzIsNyArMTMyLDYgQEAKIAkJdXBkYXRlX2NyX3JlZ3MobmV4dCk7CQkJCQlcCiAJfQkJCQkJCQkJXAogCXByZXYgPSBfX3N3aXRjaF90byhwcmV2LG5leHQpOwkJCQkJXAotCXVwZGF0ZV9wcmltYXJ5X2FzY2UoY3VycmVudCk7CQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KSBkbyB7CQkJCQkgICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDc3NzY4NzAuLmFiYWQ3OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXJldHVybiB0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU1lTQ0FMTCkgPworCXJldHVybiB0ZXN0X3B0X3JlZ3NfZmxhZyhyZWdzLCBQSUZfU1lTQ0FMTCkgPwogCQkocmVncy0+aW50X2NvZGUgJiAweGZmZmYpIDogLTE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNTA2MzBlNi4uYjgzM2U5YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTc3LDMyICs3NywyMiBAQAogLyoKICAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncyBiaXQgbnVtYmVycwogICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMCQkwCS8qIGluc2lkZSBhIHN5c3RlbSBjYWxsICovCi0jZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCi0jZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCi0jZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCi0jZGVmaW5lIFRJRl9UTEJfV0FJVAkJNAkvKiB3YWl0IGZvciBUTEIgZmx1c2ggY29tcGxldGlvbiAqLwotI2RlZmluZSBUSUZfQVNDRQkJNQkvKiBwcmltYXJ5IGFzY2UgbmVlZHMgZml4dXAgLyB1YWNjZXNzICovCi0jZGVmaW5lIFRJRl9QRVJfVFJBUAkJNgkvKiBkZWxpdmVyIHNpZ3RyYXAgb24gcmV0dXJuIHRvIHVzZXIgKi8KLSNkZWZpbmUgVElGX01DQ0tfUEVORElORwk3CS8qIG1hY2hpbmUgY2hlY2sgaGFuZGxpbmcgaXMgcGVuZGluZyAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQk4CS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTkJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KLSNkZWZpbmUgVElGX1NFQ0NPTVAJCTEwCS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVAkxMQkvKiBzeXNjYWxsIHRyYWNlcG9pbnQgaW5zdHJ1bWVudGF0aW9uICovCi0jZGVmaW5lIFRJRl8zMUJJVAkJMTcJLyogMzJiaXQgcHJvY2VzcyAqLwotI2RlZmluZSBUSUZfTUVNRElFCQkxOAkvKiBpcyB0ZXJtaW5hdGluZyBkdWUgdG8gT09NIGtpbGxlciAqLwotI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTE5CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KLSNkZWZpbmUgVElGX1NJTkdMRV9TVEVQCQkyMAkvKiBUaGlzIHRhc2sgaXMgc2luZ2xlIHN0ZXBwZWQgKi8KLSNkZWZpbmUgVElGX0JMT0NLX1NURVAJCTIxCS8qIFRoaXMgdGFzayBpcyBibG9jayBzdGVwcGVkICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTAJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkxCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTMJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNAkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfU0VDQ09NUAkJNQkvKiBzZWN1cmUgY29tcHV0aW5nICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQJNgkvKiBzeXNjYWxsIHRyYWNlcG9pbnQgaW5zdHJ1bWVudGF0aW9uICovCisjZGVmaW5lIFRJRl8zMUJJVAkJMTYJLyogMzJiaXQgcHJvY2VzcyAqLworI2RlZmluZSBUSUZfTUVNRElFCQkxNwkvKiBpcyB0ZXJtaW5hdGluZyBkdWUgdG8gT09NIGtpbGxlciAqLworI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTE4CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KKyNkZWZpbmUgVElGX1NJTkdMRV9TVEVQCQkxOQkvKiBUaGlzIHRhc2sgaXMgc2luZ2xlIHN0ZXBwZWQgKi8KKyNkZWZpbmUgVElGX0JMT0NLX1NURVAJCTIwCS8qIFRoaXMgdGFzayBpcyBibG9jayBzdGVwcGVkICovCiAKLSNkZWZpbmUgX1RJRl9TWVNDQUxMCQkoMTw8VElGX1NZU0NBTEwpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKLSNkZWZpbmUgX1RJRl9UTEJfV0FJVAkJKDE8PFRJRl9UTEJfV0FJVCkKLSNkZWZpbmUgX1RJRl9BU0NFCQkoMTw8VElGX0FTQ0UpCi0jZGVmaW5lIF9USUZfUEVSX1RSQVAJCSgxPDxUSUZfUEVSX1RSQVApCi0jZGVmaW5lIF9USUZfTUNDS19QRU5ESU5HCSgxPDxUSUZfTUNDS19QRU5ESU5HKQogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDE8PFRJRl9TWVNDQUxMX0FVRElUKQogI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxPDxUSUZfU0VDQ09NUCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggMDU0MjViMS4uNTZhZjUzMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTI2LDIxICsyNiwxMiBAQAogCiAjZGVmaW5lIG1jX2NhcGFibGUoKSAxCiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9jb3JlZ3JvdXBfbWFzayhpbnQgY3B1KQotewotCXJldHVybiAmY3B1X3RvcG9sb2d5W2NwdV0uY29yZV9tYXNrOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfYm9va19tYXNrKGludCBjcHUpCi17Ci0JcmV0dXJuICZjcHVfdG9wb2xvZ3lbY3B1XS5ib29rX21hc2s7Ci19Ci0KIGludCB0b3BvbG9neV9jcHVfaW5pdChzdHJ1Y3QgY3B1ICopOwogaW50IHRvcG9sb2d5X3NldF9jcHVfbWFuYWdlbWVudChpbnQgZmMpOwogdm9pZCB0b3BvbG9neV9zY2hlZHVsZV91cGRhdGUodm9pZCk7CiB2b2lkIHN0b3JlX3RvcG9sb2d5KHN0cnVjdCBzeXNpbmZvXzE1XzFfeCAqaW5mbyk7CiB2b2lkIHRvcG9sb2d5X2V4cGVjdF9jaGFuZ2Uodm9pZCk7Citjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKGludCBjcHUpOwogCiAjZWxzZSAvKiBDT05GSUdfU0NIRURfQk9PSyAqLwogCkBAIC02NCw4ICs1NSw2IEBACiB9OwogI2VuZGlmCiAKLSNkZWZpbmUgU0RfQk9PS19JTklUCVNEX0NQVV9JTklUCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCiAjZW5kaWYgLyogX0FTTV9TMzkwX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDFiZTY0YTEuLmNkNGM2OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMTMyLDYgKzEzMiwzNCBAQAogI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgogI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKIAorI2lmZGVmIENPTkZJR19IQVZFX01BUkNIX1oxMF9GRUFUVVJFUworCisjZGVmaW5lIF9fcHV0X2dldF91c2VyX2FzbSh0bywgZnJvbSwgc2l6ZSwgc3BlYykJCVwKKyh7CQkJCQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlZzAgYXNtKCIwIikgPSBzcGVjOwkJXAorCWludCBfX3JjOwkJCQkJCVwKKwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIwOgltdmNvcwklMSwlMywlMlxuIgkJCVwKKwkJIjE6CXhyCSUwLCUwXG4iCQkJXAorCQkiMjpcbiIJCQkJCQlcCisJCSIucHVzaHNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIJCQlcCisJCSIzOglsaGkJJTAsJTVcbiIJCQlcCisJCSIJamcJMmJcbiIJCQkJXAorCQkiLnBvcHNlY3Rpb25cbiIJCQkJCVwKKwkJRVhfVEFCTEUoMGIsM2IpIEVYX1RBQkxFKDFiLDNiKQkJCVwKKwkJOiAiPWQiIChfX3JjKSwgIj1RIiAoKih0bykpCQkJXAorCQk6ICJkIiAoc2l6ZSksICJRIiAoKihmcm9tKSksCQkJXAorCQkgICJkIiAoX19yZWcwKSwgIksiICgtRUZBVUxUKQkJCVwKKwkJOiAiY2MiKTsJCQkJCVwKKwlfX3JjOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfZm4oeCwgcHRyLCBzaXplKSBfX3B1dF9nZXRfdXNlcl9hc20ocHRyLCB4LCBzaXplLCAweDgxMDAwMFVMKQorI2RlZmluZSBfX2dldF91c2VyX2ZuKHgsIHB0ciwgc2l6ZSkgX19wdXRfZ2V0X3VzZXJfYXNtKHgsIHB0ciwgc2l6ZSwgMHg4MVVMKQorCisjZWxzZSAvKiBDT05GSUdfSEFWRV9NQVJDSF9aMTBfRkVBVFVSRVMgKi8KKwogc3RhdGljIGlubGluZSBpbnQgX19wdXRfdXNlcl9mbih2b2lkICp4LCB2b2lkIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJc2l6ZSA9IF9fY29weV90b191c2VyKHB0ciwgeCwgc2l6ZSk7CkBAIC0xNDQsNiArMTcyLDggQEAKIAlyZXR1cm4gc2l6ZSA/IC1FRkFVTFQgOiAwOwogfQogCisjZW5kaWYgLyogQ09ORklHX0hBVkVfTUFSQ0hfWjEwX0ZFQVRVUkVTICovCisKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNhbGx5CiAgKiB1c2UgdGhlIHJpZ2h0IHNpemUgaWYgd2UganVzdCBoYXZlIHRoZSByaWdodCBwb2ludGVyIHR5cGUuCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IGMwMDNjNmEuLjBmYzI2NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBfX0tWTV9TMzkwCisjZGVmaW5lIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKIAogLyogRGV2aWNlIGNvbnRyb2wgQVBJOiBzMzkwLXNwZWNpZmljIGRldmljZXMgKi8KICNkZWZpbmUgS1ZNX0RFVl9GTElDX0dFVF9BTExfSVJRUwkxCkBAIC01NCw2ICs1NSwxMyBAQAogCV9fdTY0IGFkZHI7CiB9OwogCisvKiBrdm0gYXR0cl9ncm91cCAgb24gdm0gZmQgKi8KKyNkZWZpbmUgS1ZNX1MzOTBfVk1fTUVNX0NUUkwJCTAKKworLyoga3ZtIGF0dHJpYnV0ZXMgZm9yIG1lbV9jdHJsICovCisjZGVmaW5lIEtWTV9TMzkwX1ZNX01FTV9FTkFCTEVfQ01NQQkwCisjZGVmaW5lIEtWTV9TMzkwX1ZNX01FTV9DTFJfQ01NQQkxCisKIC8qIGZvciBLVk1fR0VUX1JFR1MgYW5kIEtWTV9TRVRfUkVHUyAqLwogc3RydWN0IGt2bV9yZWdzIHsKIAkvKiBnZW5lcmFsIHB1cnBvc2UgcmVncyBmb3IgczM5MCAqLwpAQCAtNzIsMTEgKzgwLDMxIEBACiAJX191NjQgZnByc1sxNl07CiB9OwogCisjZGVmaW5lIEtWTV9HVUVTVERCR19VU0VfSFdfQlAJCTB4MDAwMTAwMDAKKworI2RlZmluZSBLVk1fSFdfQlAJCQkxCisjZGVmaW5lIEtWTV9IV19XUF9XUklURQkJCTIKKyNkZWZpbmUgS1ZNX1NJTkdMRVNURVAJCQk0CisKIHN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKKwlfX3U2NCBhZGRyOworCV9fdTggdHlwZTsKKwlfX3U4IHBhZFs3XTsgLyogU2hvdWxkIGJlIHNldCB0byAwICovCit9OworCitzdHJ1Y3Qga3ZtX2h3X2JyZWFrcG9pbnQgeworCV9fdTY0IGFkZHI7CisJX191NjQgcGh5c19hZGRyOworCV9fdTY0IGxlbjsKKwlfX3U4IHR5cGU7CisJX191OCBwYWRbN107IC8qIFNob3VsZCBiZSBzZXQgdG8gMCAqLwogfTsKIAogLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CisJX191MzIgbnJfaHdfYnA7CisJX191MzIgcGFkOyAvKiBTaG91bGQgYmUgc2V0IHRvIDAgKi8KKwlzdHJ1Y3Qga3ZtX2h3X2JyZWFrcG9pbnQgX191c2VyICpod19icDsKIH07CiAKICNkZWZpbmUgS1ZNX1NZTkNfUFJFRklYICgxVUwgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3NpZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20vc2llLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5N2Y2MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3NpZS5oCkBAIC0wLDAgKzEsMjQ1IEBACisjaWZuZGVmIF9VQVBJX0FTTV9TMzkwX1NJRV9ICisjZGVmaW5lIF9VQVBJX0FTTV9TMzkwX1NJRV9ICisKKyNpbmNsdWRlIDxhc20vc2lncC5oPgorCisjZGVmaW5lIGRpYWdub3NlX2NvZGVzCQkJCQkJXAorCXsgMHgxMCwgIkRJQUcgKDB4MTApIHJlbGVhc2UgcGFnZXMiIH0sCQkJXAorCXsgMHg0NCwgIkRJQUcgKDB4NDQpIHRpbWUgc2xpY2UgZW5kIiB9LAkJCVwKKwl7IDB4OWMsICJESUFHICgweDljKSB0aW1lIHNsaWNlIGVuZCBkaXJlY3RlZCIgfSwJXAorCXsgMHgyMDQsICJESUFHICgweDIwNCkgbG9naWNhbC1jcHUgdXRpbGl6YXRpb24iIH0sCVwKKwl7IDB4MjU4LCAiRElBRyAoMHgyNTgpIHBhZ2UtcmVmZXJlbmNlIHNlcnZpY2VzIiB9LAlcCisJeyAweDMwOCwgIkRJQUcgKDB4MzA4KSBpcGwgZnVuY3Rpb25zIiB9LAkJXAorCXsgMHg1MDAsICJESUFHICgweDUwMCkgS1ZNIHZpcnRpbyBmdW5jdGlvbnMiIH0sCQlcCisJeyAweDUwMSwgIkRJQUcgKDB4NTAxKSBLVk0gYnJlYWtwb2ludCIgfQorCisjZGVmaW5lIHNpZ3Bfb3JkZXJfY29kZXMJCQkJCQlcCisJeyBTSUdQX1NFTlNFLCAiU0lHUCBzZW5zZSIgfSwJCQkJCVwKKwl7IFNJR1BfRVhURVJOQUxfQ0FMTCwgIlNJR1AgZXh0ZXJuYWwgY2FsbCIgfSwJCQlcCisJeyBTSUdQX0VNRVJHRU5DWV9TSUdOQUwsICJTSUdQIGVtZXJnZW5jeSBzaWduYWwiIH0sCQlcCisJeyBTSUdQX1NUT1AsICJTSUdQIHN0b3AiIH0sCQkJCQlcCisJeyBTSUdQX1NUT1BfQU5EX1NUT1JFX1NUQVRVUywgIlNJR1Agc3RvcCBhbmQgc3RvcmUgc3RhdHVzIiB9LAlcCisJeyBTSUdQX1NFVF9BUkNISVRFQ1RVUkUsICJTSUdQIHNldCBhcmNoaXRlY3R1cmUiIH0sCQlcCisJeyBTSUdQX1NFVF9QUkVGSVgsICJTSUdQIHNldCBwcmVmaXgiIH0sCQkJCVwKKwl7IFNJR1BfU0VOU0VfUlVOTklORywgIlNJR1Agc2Vuc2UgcnVubmluZyIgfSwJCQlcCisJeyBTSUdQX1JFU1RBUlQsICJTSUdQIHJlc3RhcnQiIH0sCQkJCVwKKwl7IFNJR1BfSU5JVElBTF9DUFVfUkVTRVQsICJTSUdQIGluaXRpYWwgY3B1IHJlc2V0IiB9LAkJXAorCXsgU0lHUF9TVE9SRV9TVEFUVVNfQVRfQUREUkVTUywgIlNJR1Agc3RvcmUgc3RhdHVzIGF0IGFkZHJlc3MiIH0KKworI2RlZmluZSBpY3B0X3Byb2dfY29kZXMJCQkJCQlcCisJeyAweDAwMDEsICJQcm9nIE9wZXJhdGlvbiIgfSwJCQkJXAorCXsgMHgwMDAyLCAiUHJvZyBQcml2aWxlZ2VkIE9wZXJhdGlvbiIgfSwJCVwKKwl7IDB4MDAwMywgIlByb2cgRXhlY3V0ZSIgfSwJCQkJXAorCXsgMHgwMDA0LCAiUHJvZyBQcm90ZWN0aW9uIiB9LAkJCQlcCisJeyAweDAwMDUsICJQcm9nIEFkZHJlc3NpbmciIH0sCQkJCVwKKwl7IDB4MDAwNiwgIlByb2cgU3BlY2lmaWNhdGlvbiIgfSwJCQlcCisJeyAweDAwMDcsICJQcm9nIERhdGEiIH0sCQkJCVwKKwl7IDB4MDAwOCwgIlByb2cgRml4ZWRwb2ludCBvdmVyZmxvdyIgfSwJCQlcCisJeyAweDAwMDksICJQcm9nIEZpeGVkcG9pbnQgZGl2aWRlIiB9LAkJCVwKKwl7IDB4MDAwQSwgIlByb2cgRGVjaW1hbCBvdmVyZmxvdyIgfSwJCQlcCisJeyAweDAwMEIsICJQcm9nIERlY2ltYWwgZGl2aWRlIiB9LAkJCVwKKwl7IDB4MDAwQywgIlByb2cgSEZQIGV4cG9uZW50IG92ZXJmbG93IiB9LAkJXAorCXsgMHgwMDBELCAiUHJvZyBIRlAgZXhwb25lbnQgdW5kZXJmbG93IiB9LAkJXAorCXsgMHgwMDBFLCAiUHJvZyBIRlAgc2lnbmlmaWNhbmNlIiB9LAkJCVwKKwl7IDB4MDAwRiwgIlByb2cgSEZQIGRpdmlkZSIgfSwJCQkJXAorCXsgMHgwMDEwLCAiUHJvZyBTZWdtZW50IHRyYW5zbGF0aW9uIiB9LAkJCVwKKwl7IDB4MDAxMSwgIlByb2cgUGFnZSB0cmFuc2xhdGlvbiIgfSwJCQlcCisJeyAweDAwMTIsICJQcm9nIFRyYW5zbGF0aW9uIHNwZWNpZmljYXRpb24iIH0sCQlcCisJeyAweDAwMTMsICJQcm9nIFNwZWNpYWwgb3BlcmF0aW9uIiB9LAkJCVwKKwl7IDB4MDAxNSwgIlByb2cgT3BlcmFuZCIgfSwJCQkJXAorCXsgMHgwMDE2LCAiUHJvZyBUcmFjZSB0YWJsZSIgfSwJCQkJXAorCXsgMHgwMDE3LCAiUHJvZyBBU050cmFuc2xhdGlvbiBzcGVjaWZpY2F0aW9uIiB9LAlcCisJeyAweDAwMUMsICJQcm9nIFNwYWNlc3dpdGNoIGV2ZW50IiB9LAkJCVwKKwl7IDB4MDAxRCwgIlByb2cgSEZQIHNxdWFyZSByb290IiB9LAkJCVwKKwl7IDB4MDAxRiwgIlByb2cgUEN0cmFuc2xhdGlvbiBzcGVjaWZpY2F0aW9uIiB9LAkJXAorCXsgMHgwMDIwLCAiUHJvZyBBRlggdHJhbnNsYXRpb24iIH0sCQkJXAorCXsgMHgwMDIxLCAiUHJvZyBBU1ggdHJhbnNsYXRpb24iIH0sCQkJXAorCXsgMHgwMDIyLCAiUHJvZyBMWCB0cmFuc2xhdGlvbiIgfSwJCQlcCisJeyAweDAwMjMsICJQcm9nIEVYIHRyYW5zbGF0aW9uIiB9LAkJCVwKKwl7IDB4MDAyNCwgIlByb2cgUHJpbWFyeSBhdXRob3JpdHkiIH0sCQkJXAorCXsgMHgwMDI1LCAiUHJvZyBTZWNvbmRhcnkgYXV0aG9yaXR5IiB9LAkJCVwKKwl7IDB4MDAyNiwgIlByb2cgTEZYdHJhbnNsYXRpb24gZXhjZXB0aW9uIiB9LAkJXAorCXsgMHgwMDI3LCAiUHJvZyBMU1h0cmFuc2xhdGlvbiBleGNlcHRpb24iIH0sCQlcCisJeyAweDAwMjgsICJQcm9nIEFMRVQgc3BlY2lmaWNhdGlvbiIgfSwJCQlcCisJeyAweDAwMjksICJQcm9nIEFMRU4gdHJhbnNsYXRpb24iIH0sCQkJXAorCXsgMHgwMDJBLCAiUHJvZyBBTEUgc2VxdWVuY2UiIH0sCQkJXAorCXsgMHgwMDJCLCAiUHJvZyBBU1RFIHZhbGlkaXR5IiB9LAkJCVwKKwl7IDB4MDAyQywgIlByb2cgQVNURSBzZXF1ZW5jZSIgfSwJCQlcCisJeyAweDAwMkQsICJQcm9nIEV4dGVuZGVkIGF1dGhvcml0eSIgfSwJCQlcCisJeyAweDAwMkUsICJQcm9nIExTVEUgc2VxdWVuY2UiIH0sCQkJXAorCXsgMHgwMDJGLCAiUHJvZyBBU1RFIGluc3RhbmNlIiB9LAkJCVwKKwl7IDB4MDAzMCwgIlByb2cgU3RhY2sgZnVsbCIgfSwJCQkJXAorCXsgMHgwMDMxLCAiUHJvZyBTdGFjayBlbXB0eSIgfSwJCQkJXAorCXsgMHgwMDMyLCAiUHJvZyBTdGFjayBzcGVjaWZpY2F0aW9uIiB9LAkJCVwKKwl7IDB4MDAzMywgIlByb2cgU3RhY2sgdHlwZSIgfSwJCQkJXAorCXsgMHgwMDM0LCAiUHJvZyBTdGFjayBvcGVyYXRpb24iIH0sCQkJXAorCXsgMHgwMDM5LCAiUHJvZyBSZWdpb24gZmlyc3QgdHJhbnNsYXRpb24iIH0sCQlcCisJeyAweDAwM0EsICJQcm9nIFJlZ2lvbiBzZWNvbmQgdHJhbnNsYXRpb24iIH0sCQlcCisJeyAweDAwM0IsICJQcm9nIFJlZ2lvbiB0aGlyZCB0cmFuc2xhdGlvbiIgfSwJCVwKKwl7IDB4MDA0MCwgIlByb2cgTW9uaXRvciBldmVudCIgfSwJCQlcCisJeyAweDAwODAsICJQcm9nIFBFUiBldmVudCIgfSwJCQkJXAorCXsgMHgwMTE5LCAiUHJvZyBDcnlwdG8gb3BlcmF0aW9uIiB9CisKKyNkZWZpbmUgZXhpdF9jb2RlX2lwYTAoaXBhMCwgb3Bjb2RlLCBtbmVtb25pYykJCVwKKwl7IChpcGEwIDw8IDggfCBvcGNvZGUpLCAjaXBhMCAiICIgbW5lbW9uaWMgfQorI2RlZmluZSBleGl0X2NvZGUob3Bjb2RlLCBtbmVtb25pYykJCQlcCisJeyBvcGNvZGUsIG1uZW1vbmljIH0KKworI2RlZmluZSBpY3B0X2luc25fY29kZXMJCQkJXAorCWV4aXRfY29kZV9pcGEwKDB4MDEsIDB4MDEsICJQUiIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHgwMSwgMHgwNCwgIlBURkYiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4MDEsIDB4MDcsICJTQ0tQRiIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhBQSwgMHgwMCwgIlJJTkVYVCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhBQSwgMHgwMSwgIlJJT04iKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QUEsIDB4MDIsICJUUklDIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEFBLCAweDAzLCAiUklPRkYiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QUEsIDB4MDQsICJSSUVNSVQiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MDIsICJTVElEUCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgwNCwgIlNDSyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgwNSwgIlNUQ0siKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MDYsICJTQ0tDIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDA3LCAiU1RDS0MiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MDgsICJTUFQiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MDksICJTVFBUIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDBkLCAiUFRMQiIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgxMCwgIlNQWCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgxMSwgIlNUUFgiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MTIsICJTVEFQIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDE0LCAiU0lFIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDE2LCAiU0VUUiIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgxNywgIlNURVRSIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDE4LCAiUEMiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MjAsICJTRVJWQyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgyOCwgIlBUIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDI5LCAiSVNLRSIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgyYSwgIlJSQkUiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MmIsICJTU0tFIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDJjLCAiVEIiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MmUsICJQR0lOIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDJmLCAiUEdPVVQiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MzAsICJDU0NIIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDMxLCAiSFNDSCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgzMiwgIk1TQ0giKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MzMsICJTU0NIIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDM0LCAiU1RTQ0giKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4MzUsICJUU0NIIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDM2LCAiVFBJIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDM3LCAiU0FMIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDM4LCAiUlNDSCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHgzOSwgIlNUQ1JXIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDNhLCAiU1RDUFMiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4M2IsICJSQ0hQIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDNjLCAiU0NITSIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHg0MCwgIkJBS1IiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4NDgsICJQQUxCIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDRjLCAiVEFSIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDUwLCAiQ1NQIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDU0LCAiTVZQRyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHg1OCwgIkJTRyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHg1YSwgIkJTQSIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHg1ZiwgIkNIU0MiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4NzQsICJTSUdBIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDc2LCAiWFNDSCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCMiwgMHg3OCwgIlNUQ0tFIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweDdjLCAiU1RDS0YiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4N2QsICJTVFNJIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweGIwLCAiU1RGTEUiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4YjEsICJTVEZMIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweGIyLCAiTFBTV0UiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjIsIDB4ZjgsICJURU5EIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEIyLCAweGZjLCAiVEFCT1JUIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweDFlLCAiS01BQyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCOSwgMHgyOCwgIlBDS01PIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweDJhLCAiS01GIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweDJiLCAiS01PIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweDJkLCAiS01DVFIiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjksIDB4MmUsICJLTSIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCOSwgMHgyZiwgIktNQyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCOSwgMHgzZSwgIktJTUQiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjksIDB4M2YsICJLTE1EIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweDhhLCAiQ1NQRyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCOSwgMHg4ZCwgIkVQU1ciKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjksIDB4OGUsICJJRFRFIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweDhmLCAiQ1JEVEUiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjksIDB4OWMsICJFUUJTIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweGEyLCAiUFRGIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEI5LCAweGFiLCAiRVNTQSIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhCOSwgMHhhZSwgIlJSQk0iKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QjksIDB4YWYsICJQRk1GIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEUzLCAweDAzLCAiTFJBRyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFMywgMHgxMywgIkxSQVkiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4RTMsIDB4MjUsICJOVFNURyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFNSwgMHgwMCwgIkxBU1AiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4RTUsIDB4MDEsICJUUFJPVCIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFNSwgMHg2MCwgIlRCRUdJTiIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFNSwgMHg2MSwgIlRCRUdJTkMiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4RUIsIDB4MjUsICJTVENURyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFQiwgMHgyZiwgIkxDVExHIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEVCLCAweDYwLCAiTFJJQyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFQiwgMHg2MSwgIlNUUklDIiksCVwKKwlleGl0X2NvZGVfaXBhMCgweEVCLCAweDYyLCAiTVJJQyIpLAlcCisJZXhpdF9jb2RlX2lwYTAoMHhFQiwgMHg4YSwgIlNRQlMiKSwJXAorCWV4aXRfY29kZV9pcGEwKDB4QzgsIDB4MDEsICJFQ1RHIiksCVwKKwlleGl0X2NvZGUoMHgwYSwgIlNWQyIpLAkJCVwKKwlleGl0X2NvZGUoMHg4MCwgIlNTTSIpLAkJCVwKKwlleGl0X2NvZGUoMHg4MiwgIkxQU1ciKSwJCVwKKwlleGl0X2NvZGUoMHg4MywgIkRJQUciKSwJCVwKKwlleGl0X2NvZGUoMHhhZSwgIlNJR1AiKSwJCVwKKwlleGl0X2NvZGUoMHhhYywgIlNUTlNNIiksCQlcCisJZXhpdF9jb2RlKDB4YWQsICJTVE9TTSIpLAkJXAorCWV4aXRfY29kZSgweGIxLCAiTFJBIiksCQkJXAorCWV4aXRfY29kZSgweGI2LCAiU1RDVEwiKSwJCVwKKwlleGl0X2NvZGUoMHhiNywgIkxDVEwiKSwJCVwKKwlleGl0X2NvZGUoMHhlZSwgIlBMTyIpCisKKyNkZWZpbmUgc2llX2ludGVyY2VwdF9jb2RlCQkJCQlcCisJeyAweDAwLCAiSG9zdCBpbnRlcnJ1cHRpb24iIH0sCQkJCVwKKwl7IDB4MDQsICJJbnN0cnVjdGlvbiIgfSwJCQkJXAorCXsgMHgwOCwgIlByb2dyYW0gaW50ZXJydXB0aW9uIiB9LAkJCVwKKwl7IDB4MGMsICJJbnN0cnVjdGlvbiBhbmQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24iIH0sCVwKKwl7IDB4MTAsICJFeHRlcm5hbCByZXF1ZXN0IiB9LAkJCQlcCisJeyAweDE0LCAiRXh0ZXJuYWwgaW50ZXJydXB0aW9uIiB9LAkJCVwKKwl7IDB4MTgsICJJL08gcmVxdWVzdCIgfSwJCQkJXAorCXsgMHgxYywgIldhaXQgc3RhdGUiIH0sCQkJCQlcCisJeyAweDIwLCAiVmFsaWRpdHkiIH0sCQkJCQlcCisJeyAweDI4LCAiU3RvcCByZXF1ZXN0IiB9LAkJCQlcCisJeyAweDJjLCAiT3BlcmF0aW9uIGV4Y2VwdGlvbiIgfSwJCQlcCisJeyAweDM4LCAiUGFydGlhbC1leGVjdXRpb24iIH0sCQkJCVwKKwl7IDB4M2MsICJJL08gaW50ZXJydXB0aW9uIiB9LAkJCQlcCisJeyAweDQwLCAiSS9PIGluc3RydWN0aW9uIiB9LAkJCQlcCisJeyAweDQ4LCAiVGltaW5nIHN1YnNldCIgfQorCisvKgorICogVGhpcyBpcyB0aGUgc2ltcGxlIGludGVyY2VwdGFibGUgaW5zdHJ1Y3Rpb25zIGRlY29kZXIuCisgKgorICogSXQgd2lsbCBiZSB1c2VkIGFzIHVzZXJzcGFjZSBpbnRlcmZhY2UgYW5kIGl0IGNhbiBiZSB1c2VkIGluIHBsYWNlcworICogdGhhdCBkb2VzIG5vdCBhbGxvdyB0byB1c2UgZ2VuZXJhbCBkZWNvZGVyIGZ1bmN0aW9ucywKKyAqIHN1Y2ggYXMgdHJhY2UgZXZlbnRzIGRlY2xhcmF0aW9ucy4KKyAqCisgKiBTb21lIHVzZXJzcGFjZSB0b29scyBtYXkgd2FudCB0byBwYXJzZSB0aGlzIGNvZGUKKyAqIGFuZCB3b3VsZCBiZSBjb25mdXNlZCBieSBzd2l0Y2goKSwgaWYoKSBhbmQgb3RoZXIgc3RhdGVtZW50cywKKyAqIGJ1dCB0aGV5IGNhbiB1bmRlcnN0YW5kIGNvbmRpdGlvbmFsIG9wZXJhdG9yLgorICovCisjZGVmaW5lIElOU05fREVDT0RFX0lQQTAoaXBhMCwgaW5zbiwgcnNoaWZ0LCBtYXNrKQkJXAorCShpbnNuID4+IDU2KSA9PSAoaXBhMCkgPwkJCQlcCisJCSgoaXBhMCA8PCA4KSB8ICgoaW5zbiA+PiByc2hpZnQpICYgbWFzaykpIDoKKworI2RlZmluZSBJTlNOX0RFQ09ERShpbnNuKSAoaW5zbiA+PiA1NikKKworLyoKKyAqIFRoZSBtYWNybyBpY3B0X2luc25fZGVjb2RlcigpIHRha2VzIGFuIGludGVyY2VwdGVkIGluc3RydWN0aW9uCisgKiBhbmQgcmV0dXJucyBhIGtleSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmluZCBhIG1uZW1vbmljIG5hbWUKKyAqIG9mIHRoZSBpbnN0cnVjdGlvbiBpbiB0aGUgaWNwdF9pbnNuX2NvZGVzIHRhYmxlLgorICovCisjZGVmaW5lIGljcHRfaW5zbl9kZWNvZGVyKGluc24pCQkJXAorCUlOU05fREVDT0RFX0lQQTAoMHgwMSwgaW5zbiwgNDgsIDB4ZmYpCVwKKwlJTlNOX0RFQ09ERV9JUEEwKDB4YWEsIGluc24sIDQ4LCAweDBmKQlcCisJSU5TTl9ERUNPREVfSVBBMCgweGIyLCBpbnNuLCA0OCwgMHhmZikJXAorCUlOU05fREVDT0RFX0lQQTAoMHhiOSwgaW5zbiwgNDgsIDB4ZmYpCVwKKwlJTlNOX0RFQ09ERV9JUEEwKDB4ZTMsIGluc24sIDQ4LCAweGZmKQlcCisJSU5TTl9ERUNPREVfSVBBMCgweGU1LCBpbnNuLCA0OCwgMHhmZikJXAorCUlOU05fREVDT0RFX0lQQTAoMHhlYiwgaW5zbiwgMTYsIDB4ZmYpCVwKKwlJTlNOX0RFQ09ERV9JUEEwKDB4YzgsIGluc24sIDQ4LCAweDBmKQlcCisJSU5TTl9ERUNPREUoaW5zbikKKworI2VuZGlmIC8qIF9VQVBJX0FTTV9TMzkwX1NJRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggY2MxMGNkZC4uYWZlMTcxNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNTAsNiArNTAsNyBAQAogCURFRklORShfX1BUX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgaW50X2NvZGUpKTsKIAlERUZJTkUoX19QVF9JTlRfUEFSTSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGludF9wYXJtKSk7CiAJREVGSU5FKF9fUFRfSU5UX1BBUk1fTE9ORywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGludF9wYXJtX2xvbmcpKTsKKwlERUZJTkUoX19QVF9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGZsYWdzKSk7CiAJREVGSU5FKF9fUFRfU0laRSwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CiAJQkxBTksoKTsKIAlERUZJTkUoX19TRl9CQUNLQ0hBSU4sIG9mZnNldG9mKHN0cnVjdCBzdGFja19mcmFtZSwgYmFja19jaGFpbikpOwpAQCAtODksMTYgKzkwLDIyIEBACiAJREVGSU5FKF9fTENfUEdNX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZ21faWxjKSk7CiAJREVGSU5FKF9fTENfUEdNX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBnbV9jb2RlKSk7CiAJREVGSU5FKF9fTENfVFJBTlNfRVhDX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdHJhbnNfZXhjX2NvZGUpKTsKLQlERUZJTkUoX19MQ19QRVJfQ0FVU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX3BlcmNfYXRtaWQpKTsKKwlERUZJTkUoX19MQ19NT05fQ0xBU1NfTlIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbW9uX2NsYXNzX251bSkpOworCURFRklORShfX0xDX1BFUl9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9jb2RlKSk7CisJREVGSU5FKF9fTENfUEVSX0FUTUlELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hdG1pZCkpOwogCURFRklORShfX0xDX1BFUl9BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hZGRyZXNzKSk7Ci0JREVGSU5FKF9fTENfUEVSX1BBSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX2FjY2Vzc19pZCkpOwotCURFRklORShfX0xDX0FSX01PREVfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgYXJfYWNjZXNzX2lkKSk7CisJREVGSU5FKF9fTENfRVhDX0FDQ0VTU19JRCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleGNfYWNjZXNzX2lkKSk7CisJREVGSU5FKF9fTENfUEVSX0FDQ0VTU19JRCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZXJfYWNjZXNzX2lkKSk7CisJREVGSU5FKF9fTENfT1BfQUNDRVNTX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIG9wX2FjY2Vzc19pZCkpOworCURFRklORShfX0xDX0FSX01PREVfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgYXJfbW9kZV9pZCkpOworCURFRklORShfX0xDX01PTl9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIG1vbml0b3JfY29kZSkpOwogCURFRklORShfX0xDX1NVQkNIQU5ORUxfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9pZCkpOwogCURFRklORShfX0xDX1NVQkNIQU5ORUxfTlIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9ucikpOwogCURFRklORShfX0xDX0lPX0lOVF9QQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX2ludF9wYXJtKSk7CiAJREVGSU5FKF9fTENfSU9fSU5UX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaW9faW50X3dvcmQpKTsKIAlERUZJTkUoX19MQ19TVEZMX0ZBQ19MSVNULCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZmxfZmFjX2xpc3QpKTsKIAlERUZJTkUoX19MQ19NQ0NLX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWNja19pbnRlcnJ1cHRpb25fY29kZSkpOworCURFRklORShfX0xDX01DQ0tfRVhUX0RBTV9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dGVybmFsX2RhbWFnZV9jb2RlKSk7CiAJREVGSU5FKF9fTENfUlNUX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmVzdGFydF9vbGRfcHN3KSk7CiAJREVGSU5FKF9fTENfRVhUX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZXJuYWxfb2xkX3BzdykpOwogCURFRklORShfX0xDX1NWQ19PTERfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN2Y19vbGRfcHN3KSk7CkBAIC0xMTUsNiArMTIyLDcgQEAKIAlERUZJTkUoX19MQ19TQVZFX0FSRUFfU1lOQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzYXZlX2FyZWFfc3luYykpOwogCURFRklORShfX0xDX1NBVkVfQVJFQV9BU1lOQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzYXZlX2FyZWFfYXN5bmMpKTsKIAlERUZJTkUoX19MQ19TQVZFX0FSRUFfUkVTVEFSVCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzYXZlX2FyZWFfcmVzdGFydCkpOworCURFRklORShfX0xDX0NQVV9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBjcHVfZmxhZ3MpKTsKIAlERUZJTkUoX19MQ19SRVRVUk5fUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHJldHVybl9wc3cpKTsKIAlERUZJTkUoX19MQ19SRVRVUk5fTUNDS19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmV0dXJuX21jY2tfcHN3KSk7CiAJREVGSU5FKF9fTENfU1lOQ19FTlRFUl9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzeW5jX2VudGVyX3RpbWVyKSk7CkBAIC0xNDIsNyArMTUwLDYgQEAKIAlERUZJTkUoX19MQ19NQ0NLX0NMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIG1jY2tfY2xvY2spKTsKIAlERUZJTkUoX19MQ19NQUNISU5FX0ZMQUdTLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIG1hY2hpbmVfZmxhZ3MpKTsKIAlERUZJTkUoX19MQ19GVFJBQ0VfRlVOQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBmdHJhY2VfZnVuYykpOwotCURFRklORShfX0xDX0lSQiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBpcmIpKTsKIAlERUZJTkUoX19MQ19EVU1QX1JFSVBMLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlwaWIpKTsKIAlCTEFOSygpOwogCURFRklORShfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X3RpbWVyX3NhdmVfYXJlYSkpOwpAQCAtMTU2LDYgKzE2Myw4IEBACiAjaWZkZWYgQ09ORklHXzMyQklUCiAJREVGSU5FKFNBVkVfQVJFQV9CQVNFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyKSk7CiAjZWxzZSAvKiBDT05GSUdfMzJCSVQgKi8KKwlERUZJTkUoX19MQ19EQVRBX0VYQ19DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGRhdGFfZXhjX2NvZGUpKTsKKwlERUZJTkUoX19MQ19NQ0NLX0ZBSUxfU1RPUl9BRERSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzKSk7CiAJREVGSU5FKF9fTENfRVhUX1BBUkFNUzIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X3BhcmFtczIpKTsKIAlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CiAJREVGSU5FKF9fTENfUEFTVEUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGFzdGUpKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggN2RmNWVkOS4uZjIwNGQ2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCSAgICAgICBzaXplb2YoY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MpKTsKIAogCXJlc3RvcmVfZnBfcmVncyhjdXJyZW50LT50aHJlYWQuZnBfcmVncy5mcHJzKTsKLQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTCk7CS8qIE5vIGxvbmdlciBpbiBhIHN5c3RlbSBjYWxsICovCisJY2xlYXJfcHRfcmVnc19mbGFnKHJlZ3MsIFBJRl9TWVNDQUxMKTsgLyogTm8gbG9uZ2VyIGluIGEgc3lzdGVtIGNhbGwgKi8KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYwppbmRleCBkNzY1OGM0Li5hM2I5MTUwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxhc20vb3NfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vaXBsLmg+CkBAIC0yMiw2ICsyMywyNCBAQAogI2RlZmluZSBQVFJfU1VCKHgsIHkpICgoKGNoYXIgKikgKHgpKSAtICgodW5zaWduZWQgbG9uZykgKHkpKSkKICNkZWZpbmUgUFRSX0RJRkYoeCwgeSkgKCh1bnNpZ25lZCBsb25nKSgoKGNoYXIgKikgKHgpKSAtICgodW5zaWduZWQgbG9uZykgKHkpKSkpCiAKK3N0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIG9sZG1lbV9yZWdpb247CisKK3N0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfdHlwZSBvbGRtZW1fdHlwZSA9IHsKKwkuY250ID0gMSwKKwkubWF4ID0gMSwKKwkudG90YWxfc2l6ZSA9IDAsCisJLnJlZ2lvbnMgPSAmb2xkbWVtX3JlZ2lvbiwKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfZHVtcF9tZW1fcmFuZ2UoaSwgbmlkLCBwX3N0YXJ0LCBwX2VuZCwgcF9uaWQpCQlcCisJZm9yIChpID0gMCwgX19uZXh0X21lbV9yYW5nZSgmaSwgbmlkLCAmbWVtYmxvY2sucGh5c21lbSwJXAorCQkJCSAgICAgJm9sZG1lbV90eXBlLCBwX3N0YXJ0LAkJXAorCQkJCSAgICAgcF9lbmQsIHBfbmlkKTsJCQlcCisJICAgICBpICE9ICh1NjQpVUxMT05HX01BWDsJCQkJCVwKKwkgICAgIF9fbmV4dF9tZW1fcmFuZ2UoJmksIG5pZCwgJm1lbWJsb2NrLnBoeXNtZW0sCQlcCisJCQkgICAgICAmb2xkbWVtX3R5cGUsCQkJCVwKKwkJCSAgICAgIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkpCisKIHN0cnVjdCBkdW1wX3NhdmVfYXJlYXMgZHVtcF9zYXZlX2FyZWFzOwogCiAvKgpAQCAtMjY0LDE5ICsyODMsNiBAQAogfQogCiAvKgotICogR2V0IG1lbW9yeSBsYXlvdXQgYW5kIGNyZWF0ZSBob2xlIGZvciBvbGRtZW0KLSAqLwotc3RhdGljIHN0cnVjdCBtZW1fY2h1bmsgKmdldF9tZW1vcnlfbGF5b3V0KHZvaWQpCi17Ci0Jc3RydWN0IG1lbV9jaHVuayAqY2h1bmtfYXJyYXk7Ci0KLQljaHVua19hcnJheSA9IGt6YWxsb2NfcGFuaWMoTUVNT1JZX0NIVU5LUyAqIHNpemVvZihzdHJ1Y3QgbWVtX2NodW5rKSk7Ci0JZGV0ZWN0X21lbW9yeV9sYXlvdXQoY2h1bmtfYXJyYXksIDApOwotCWNyZWF0ZV9tZW1faG9sZShjaHVua19hcnJheSwgT0xETUVNX0JBU0UsIE9MRE1FTV9TSVpFKTsKLQlyZXR1cm4gY2h1bmtfYXJyYXk7Ci19Ci0KLS8qCiAgKiBJbml0aWFsaXplIEVMRiBub3RlCiAgKi8KIHN0YXRpYyB2b2lkICpudF9pbml0KHZvaWQgKmJ1ZiwgRWxmNjRfV29yZCB0eXBlLCB2b2lkICpkZXNjLCBpbnQgZF9sZW4sCkBAIC00OTAsNTIgKzQ5NiwzMyBAQAogICovCiBzdGF0aWMgaW50IGdldF9tZW1fY2h1bmtfY250KHZvaWQpCiB7Ci0Jc3RydWN0IG1lbV9jaHVuayAqY2h1bmtfYXJyYXksICptZW1fY2h1bms7Ci0JaW50IGksIGNudCA9IDA7CisJaW50IGNudCA9IDA7CisJdTY0IGlkeDsKIAotCWNodW5rX2FycmF5ID0gZ2V0X21lbW9yeV9sYXlvdXQoKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUzsgaSsrKSB7Ci0JCW1lbV9jaHVuayA9ICZjaHVua19hcnJheVtpXTsKLQkJaWYgKGNodW5rX2FycmF5W2ldLnR5cGUgIT0gQ0hVTktfUkVBRF9XUklURSAmJgotCQkgICAgY2h1bmtfYXJyYXlbaV0udHlwZSAhPSBDSFVOS19SRUFEX09OTFkpCi0JCQljb250aW51ZTsKLQkJaWYgKG1lbV9jaHVuay0+c2l6ZSA9PSAwKQotCQkJY29udGludWU7CisJZm9yX2VhY2hfZHVtcF9tZW1fcmFuZ2UoaWR4LCBOVU1BX05PX05PREUsIE5VTEwsIE5VTEwsIE5VTEwpCiAJCWNudCsrOwotCX0KLQlrZnJlZShjaHVua19hcnJheSk7CiAJcmV0dXJuIGNudDsKIH0KIAogLyoKICAqIEluaXRpYWxpemUgRUxGIGxvYWRzIChuZXcga2VybmVsKQogICovCi1zdGF0aWMgaW50IGxvYWRzX2luaXQoRWxmNjRfUGhkciAqcGhkciwgdTY0IGxvYWRzX29mZnNldCkKK3N0YXRpYyB2b2lkIGxvYWRzX2luaXQoRWxmNjRfUGhkciAqcGhkciwgdTY0IGxvYWRzX29mZnNldCkKIHsKLQlzdHJ1Y3QgbWVtX2NodW5rICpjaHVua19hcnJheSwgKm1lbV9jaHVuazsKLQlpbnQgaTsKKwlwaHlzX2FkZHJfdCBzdGFydCwgZW5kOworCXU2NCBpZHg7CiAKLQljaHVua19hcnJheSA9IGdldF9tZW1vcnlfbGF5b3V0KCk7Ci0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQltZW1fY2h1bmsgPSAmY2h1bmtfYXJyYXlbaV07Ci0JCWlmIChtZW1fY2h1bmstPnNpemUgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoY2h1bmtfYXJyYXlbaV0udHlwZSAhPSBDSFVOS19SRUFEX1dSSVRFICYmCi0JCSAgICBjaHVua19hcnJheVtpXS50eXBlICE9IENIVU5LX1JFQURfT05MWSkKLQkJCWNvbnRpbnVlOwotCQllbHNlCi0JCQlwaGRyLT5wX2ZpbGVzeiA9IG1lbV9jaHVuay0+c2l6ZTsKKwlmb3JfZWFjaF9kdW1wX21lbV9yYW5nZShpZHgsIE5VTUFfTk9fTk9ERSwgJnN0YXJ0LCAmZW5kLCBOVUxMKSB7CisJCXBoZHItPnBfZmlsZXN6ID0gZW5kIC0gc3RhcnQ7CiAJCXBoZHItPnBfdHlwZSA9IFBUX0xPQUQ7Ci0JCXBoZHItPnBfb2Zmc2V0ID0gbWVtX2NodW5rLT5hZGRyOwotCQlwaGRyLT5wX3ZhZGRyID0gbWVtX2NodW5rLT5hZGRyOwotCQlwaGRyLT5wX3BhZGRyID0gbWVtX2NodW5rLT5hZGRyOwotCQlwaGRyLT5wX21lbXN6ID0gbWVtX2NodW5rLT5zaXplOworCQlwaGRyLT5wX29mZnNldCA9IHN0YXJ0OworCQlwaGRyLT5wX3ZhZGRyID0gc3RhcnQ7CisJCXBoZHItPnBfcGFkZHIgPSBzdGFydDsKKwkJcGhkci0+cF9tZW1zeiA9IGVuZCAtIHN0YXJ0OwogCQlwaGRyLT5wX2ZsYWdzID0gUEZfUiB8IFBGX1cgfCBQRl9YOwogCQlwaGRyLT5wX2FsaWduID0gUEFHRV9TSVpFOwogCQlwaGRyKys7CiAJfQotCWtmcmVlKGNodW5rX2FycmF5KTsKLQlyZXR1cm4gaTsKIH0KIAogLyoKQEAgLTU4NCw2ICs1NzEsMTQgQEAKIAkvKiBJZiB3ZSBjYW5ub3QgZ2V0IEhTQSBzaXplIGZvciB6ZmNwZHVtcCByZXR1cm4gZXJyb3IgKi8KIAlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1BfRFVNUCAmJiAhc2NscF9nZXRfaHNhX3NpemUoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBGb3Iga2R1bXAsIGV4Y2x1ZGUgcHJldmlvdXMgY3Jhc2hrZXJuZWwgbWVtb3J5ICovCisJaWYgKE9MRE1FTV9CQVNFKSB7CisJCW9sZG1lbV9yZWdpb24uYmFzZSA9IE9MRE1FTV9CQVNFOworCQlvbGRtZW1fcmVnaW9uLnNpemUgPSBPTERNRU1fU0laRTsKKwkJb2xkbWVtX3R5cGUudG90YWxfc2l6ZSA9IE9MRE1FTV9TSVpFOworCX0KKwogCW1lbV9jaHVua19jbnQgPSBnZXRfbWVtX2NodW5rX2NudCgpOwogCiAJYWxsb2Nfc2l6ZSA9IDB4MTAwMCArIGdldF9jcHVfY250KCkgKiAweDMwMCArCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggYTczNGYzNS4uMGRmZjk3MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwpAQCAtMjU4LDEzICsyNTgsMTkgQEAKIHN0YXRpYyB2b2lkIGVhcmx5X3BnbV9jaGVja19oYW5kbGVyKHZvaWQpCiB7CiAJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXA7CisJdW5zaWduZWQgbG9uZyBjcjAsIGNyMF9uZXc7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCiAJYWRkciA9IFMzOTBfbG93Y29yZS5wcm9ncmFtX29sZF9wc3cuYWRkcjsKIAlmaXh1cCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKGFkZHIgJiBQU1dfQUREUl9JTlNOKTsKIAlpZiAoIWZpeHVwKQogCQlkaXNhYmxlZF93YWl0KDApOworCS8qIERpc2FibGUgbG93IGFkZHJlc3MgcHJvdGVjdGlvbiBiZWZvcmUgc3RvcmluZyBpbnRvIGxvd2NvcmUuICovCisJX19jdGxfc3RvcmUoY3IwLCAwLCAwKTsKKwljcjBfbmV3ID0gY3IwICYgfigxVUwgPDwgMjgpOworCV9fY3RsX2xvYWQoY3IwX25ldywgMCwgMCk7CiAJUzM5MF9sb3djb3JlLnByb2dyYW1fb2xkX3Bzdy5hZGRyID0gZXh0YWJsZV9maXh1cChmaXh1cCl8UFNXX0FERFJfQU1PREU7CisJX19jdGxfbG9hZChjcjAsIDAsIDApOwogfQogCiBzdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfbG93Y29yZV9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCmluZGV4IDE2NjIwMzguLjcwMjAzMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTM3LDE4ICszOCwxNiBAQAogX19QVF9SMTQgICAgID0JX19QVF9HUFJTICsgNTYKIF9fUFRfUjE1ICAgICA9CV9fUFRfR1BSUyArIDYwCiAKLV9USUZfV09SS19TVkMgPSAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgX1RJRl9ORUVEX1JFU0NIRUQgfCBcCi0JCSBfVElGX01DQ0tfUEVORElORyB8IF9USUZfUEVSX1RSQVAgfCBfVElGX0FTQ0UpCi1fVElGX1dPUktfSU5UID0gKF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXAotCQkgX1RJRl9NQ0NLX1BFTkRJTkcgfCBfVElGX0FTQ0UpCi1fVElGX1RSQUNFICAgID0gKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0VDQ09NUCB8IFwKLQkJIF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UKQotX1RJRl9UUkFOU0ZFUiA9IChfVElGX01DQ0tfUEVORElORyB8IF9USUZfVExCX1dBSVQpCi0KIFNUQUNLX1NISUZUID0gUEFHRV9TSElGVCArIFRIUkVBRF9PUkRFUgogU1RBQ0tfU0laRSAgPSAxIDw8IFNUQUNLX1NISUZUCiBTVEFDS19JTklUICA9IFNUQUNLX1NJWkUgLSBTVEFDS19GUkFNRV9PVkVSSEVBRCAtIF9fUFRfU0laRQogCitfVElGX1dPUksJPSAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgX1RJRl9ORUVEX1JFU0NIRUQpCitfVElGX1RSQUNFCT0gKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0VDQ09NUCB8IFwKKwkJICAgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCitfQ0lGX1dPUksJPSAoX0NJRl9NQ0NLX1BFTkRJTkcgfCBfQ0lGX0FTQ0UpCitfUElGX1dPUksJPSAoX1BJRl9QRVJfVFJBUCkKKwogI2RlZmluZSBCQVNFRChuYW1lKSBuYW1lLXN5c3RlbV9jYWxsKCVyMTMpCiAKIAkubWFjcm8JVFJBQ0VfSVJRU19PTgpAQCAtMTYwLDEzICsxNTksNyBAQAogCWxjdGwJJWM0LCVjNCxfX1RBU0tfcGlkKCVyMykJCSMgbG9hZCBwaWQgdG8gY29udHJvbCByZWcuIDQKIAltdmMJX19MQ19DVVJSRU5UX1BJRCg0LCVyMCksX19UQVNLX3BpZCglcjMpCSMgc3RvcmUgcGlkIG9mIG5leHQKIAlsCSVyMTUsX19USFJFQURfa3NwKCVyMykJCSMgbG9hZCBrZXJuZWwgc3RhY2sgb2YgbmV4dAotCWxoaQklcjYsX1RJRl9UUkFOU0ZFUgkJIyB0cmFuc2ZlciBUSUYgYml0cwotCW4JJXI2LF9fVElfZmxhZ3MoJXI0KQkJIyBpc29sYXRlIFRJRiBiaXRzCi0JanoJMGYKLQlvCSVyNixfX1RJX2ZsYWdzKCVyNSkJCSMgc2V0IFRJRiBiaXRzIG9mIG5leHQKLQlzdAklcjYsX19USV9mbGFncyglcjUpCi0JbmkJX19USV9mbGFncyszKCVyNCksMjU1LV9USUZfVFJBTlNGRVIgIyBjbGVhciBUSUYgYml0cyBvZiBwcmV2Ci0wOglsbQklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkJIyBsb2FkIGdwcnMgb2YgbmV4dCB0YXNrCisJbG0JJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpCSMgbG9hZCBncHJzIG9mIG5leHQgdGFzawogCWJyCSVyMTQKIAogX19jcml0aWNhbF9zdGFydDoKQEAgLTE4MSw2ICsxNzQsNyBAQAogCXN0bQklcjgsJXIxNSxfX0xDX1NBVkVfQVJFQV9TWU5DCiAJbAklcjEyLF9fTENfVEhSRUFEX0lORk8KIAlsCSVyMTMsX19MQ19TVkNfTkVXX1BTVys0CisJbGhpCSVyMTQsX1BJRl9TWVNDQUxMCiBzeXNjX3BlcjoKIAlsCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sKIAlsYQklcjExLFNUQUNLX0ZSQU1FX09WRVJIRUFEKCVyMTUpCSMgcG9pbnRlciB0byBwdF9yZWdzCkBAIC0xOTAsOCArMTg0LDggQEAKIAltdmMJX19QVF9SOCgzMiwlcjExKSxfX0xDX1NBVkVfQVJFQV9TWU5DCiAJbXZjCV9fUFRfUFNXKDgsJXIxMSksX19MQ19TVkNfT0xEX1BTVwogCW12YwlfX1BUX0lOVF9DT0RFKDQsJXIxMSksX19MQ19TVkNfSUxDCisJc3QJJXIxNCxfX1BUX0ZMQUdTKCVyMTEpCiBzeXNjX2RvX3N2YzoKLQlvaQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9TWVNDQUxMCiAJbAklcjEwLF9fVElfc3lzY190YWJsZSglcjEyKQkjIDMxIGJpdCBzeXN0ZW0gY2FsbCB0YWJsZQogCWxoCSVyOCxfX1BUX0lOVF9DT0RFKzIoJXIxMSkKIAlzbGEJJXI4LDIJCQkJIyBzaGlmdCBhbmQgdGVzdCBmb3Igc3ZjMApAQCAtMjA3LDcgKzIwMSw3IEBACiAJc3QJJXIyLF9fUFRfT1JJR19HUFIyKCVyMTEpCiAJc3QJJXI3LFNUQUNLX0ZSQU1FX09WRVJIRUFEKCVyMTUpCiAJbAklcjksMCglcjgsJXIxMCkJCQkjIGdldCBzeXN0ZW0gY2FsbCBhZGRyLgotCXRtCV9fVElfZmxhZ3MrMiglcjEyKSxfVElGX1RSQUNFID4+IDgKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9UUkFDRQogCWpueglzeXNjX3RyYWNlc3lzCiAJYmFzcgklcjE0LCVyOQkJCSMgY2FsbCBzeXNfeHh4eAogCXN0CSVyMixfX1BUX1IyKCVyMTEpCQkjIHN0b3JlIHJldHVybiB2YWx1ZQpAQCAtMjE3LDkgKzIxMSwxMiBAQAogc3lzY190aWY6CiAJdG0JX19QVF9QU1crMSglcjExKSwweDAxCQkjIHJldHVybmluZyB0byB1c2VyID8KIAlqbm8Jc3lzY19yZXN0b3JlCi0JdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfV09SS19TVkMKLQlqbnoJc3lzY193b3JrCQkJIyBjaGVjayBmb3Igd29yawotCW5pCV9fVElfZmxhZ3MrMyglcjEyKSwyNTUtX1RJRl9TWVNDQUxMCisJdG0JX19QVF9GTEFHUyszKCVyMTEpLF9QSUZfV09SSworCWpueglzeXNjX3dvcmsKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9XT1JLCisJam56CXN5c2Nfd29yawkJCSMgY2hlY2sgZm9yIHRocmVhZCB3b3JrCisJdG0JX19MQ19DUFVfRkxBR1MrMyxfQ0lGX1dPUksKKwlqbnoJc3lzY193b3JrCiBzeXNjX3Jlc3RvcmU6CiAJbXZjCV9fTENfUkVUVVJOX1BTVyg4KSxfX1BUX1BTVyglcjExKQogCXN0cHQJX19MQ19FWElUX1RJTUVSCkBAIC0yMzEsMTcgKzIyOCwxNyBAQAogIyBPbmUgb2YgdGhlIHdvcmsgYml0cyBpcyBvbi4gRmluZCBvdXQgd2hpY2ggb25lLgogIwogc3lzY193b3JrOgotCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX01DQ0tfUEVORElORworCXRtCV9fTENfQ1BVX0ZMQUdTKzMsX0NJRl9NQ0NLX1BFTkRJTkcKIAlqbwlzeXNjX21jY2tfcGVuZGluZwogCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX05FRURfUkVTQ0hFRAogCWpvCXN5c2NfcmVzY2hlZHVsZQotCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1BFUl9UUkFQCisJdG0JX19QVF9GTEFHUyszKCVyMTEpLF9QSUZfUEVSX1RSQVAKIAlqbwlzeXNjX3NpbmdsZXN0ZXAKIAl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9TSUdQRU5ESU5HCiAJam8Jc3lzY19zaWdwZW5kaW5nCiAJdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfTk9USUZZX1JFU1VNRQogCWpvCXN5c2Nfbm90aWZ5X3Jlc3VtZQotCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX0FTQ0UKKwl0bQlfX0xDX0NQVV9GTEFHUyszLF9DSUZfQVNDRQogCWpvCXN5c2NfdWFjY2VzcwogCWoJc3lzY19yZXR1cm4JCSMgYmV3YXJlIG9mIGNyaXRpY2FsIHNlY3Rpb24gY2xlYW51cAogCkBAIC0yNTQsNyArMjUxLDcgQEAKIAlicgklcjEJCQkjIGNhbGwgc2NoZWR1bGUKIAogIwotIyBfVElGX01DQ0tfUEVORElORyBpcyBzZXQsIGNhbGwgaGFuZGxlcgorIyBfQ0lGX01DQ0tfUEVORElORyBpcyBzZXQsIGNhbGwgaGFuZGxlcgogIwogc3lzY19tY2NrX3BlbmRpbmc6CiAJbAklcjEsQkFTRUQoLkxoYW5kbGVfbWNjaykKQEAgLTI2MiwxMCArMjU5LDEwIEBACiAJYnIJJXIxCQkJIyBUSUYgYml0IHdpbGwgYmUgY2xlYXJlZCBieSBoYW5kbGVyCiAKICMKLSMgX1RJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKKyMgX0NJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKICMKIHN5c2NfdWFjY2VzczoKLQluaQlfX1RJX2ZsYWdzKzMoJXIxMiksMjU1LV9USUZfQVNDRQorCW5pCV9fTENfQ1BVX0ZMQUdTKzMsMjU1LV9DSUZfQVNDRQogCWxjdGwJJWMxLCVjMSxfX0xDX1VTRVJfQVNDRQkjIGxvYWQgcHJpbWFyeSBhc2NlCiAJaglzeXNjX3JldHVybgogCkBAIC0yNzYsNyArMjczLDcgQEAKIAlscgklcjIsJXIxMQkJIyBwYXNzIHBvaW50ZXIgdG8gcHRfcmVncwogCWwJJXIxLEJBU0VEKC5MZG9fc2lnbmFsKQogCWJhc3IJJXIxNCwlcjEJCSMgY2FsbCBkb19zaWduYWwKLQl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9TWVNDQUxMCisJdG0JX19QVF9GTEFHUyszKCVyMTEpLF9QSUZfU1lTQ0FMTAogCWpubwlzeXNjX3JldHVybgogCWxtCSVyMiwlcjcsX19QVF9SMiglcjExKQkjIGxvYWQgc3ZjIGFyZ3VtZW50cwogCWwJJXIxMCxfX1RJX3N5c2NfdGFibGUoJXIxMikJIyAzMSBiaXQgc3lzdGVtIGNhbGwgdGFibGUKQEAgLTI5NywxMCArMjk0LDEwIEBACiAJYnIJJXIxCQkJIyBjYWxsIGRvX25vdGlmeV9yZXN1bWUKIAogIwotIyBfVElGX1BFUl9UUkFQIGlzIHNldCwgY2FsbCBkb19wZXJfdHJhcAorIyBfUElGX1BFUl9UUkFQIGlzIHNldCwgY2FsbCBkb19wZXJfdHJhcAogIwogc3lzY19zaW5nbGVzdGVwOgotCW5pCV9fVElfZmxhZ3MrMyglcjEyKSwyNTUtX1RJRl9QRVJfVFJBUAorCW5pCV9fUFRfRkxBR1MrMyglcjExKSwyNTUtX1BJRl9QRVJfVFJBUAogCWxyCSVyMiwlcjExCQkjIHBhc3MgcG9pbnRlciB0byBwdF9yZWdzCiAJbAklcjEsQkFTRUQoLkxkb19wZXJfdHJhcCkKIAlsYQklcjE0LEJBU0VEKHN5c2NfcmV0dXJuKQpAQCAtMzMwLDcgKzMyNyw3IEBACiAJYmFzcgklcjE0LCVyOQkJIyBjYWxsIHN5c194eHgKIAlzdAklcjIsX19QVF9SMiglcjExKQkjIHN0b3JlIHJldHVybiB2YWx1ZQogc3lzY190cmFjZW5vZ286Ci0JdG0JX19USV9mbGFncysyKCVyMTIpLF9USUZfVFJBQ0UgPj4gOAorCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1RSQUNFCiAJanoJc3lzY19yZXR1cm4KIAlsCSVyMSxCQVNFRCguTHRyYWNlX2V4aXQpCiAJbHIJJXIyLCVyMTEJCSMgcGFzcyBwb2ludGVyIHRvIHB0X3JlZ3MKQEAgLTM4NCwxNSArMzgxLDE2IEBACiAJc3RtCSVyOCwlcjksX19QVF9QU1coJXIxMSkKIAltdmMJX19QVF9JTlRfQ09ERSg0LCVyMTEpLF9fTENfUEdNX0lMQwogCW12YwlfX1BUX0lOVF9QQVJNX0xPTkcoNCwlcjExKSxfX0xDX1RSQU5TX0VYQ19DT0RFCisJeGMJX19QVF9GTEFHUyg0LCVyMTEpLF9fUFRfRkxBR1MoJXIxMSkKIAl0bQlfX0xDX1BHTV9JTEMrMywweDgwCSMgY2hlY2sgZm9yIHBlciBleGNlcHRpb24KIAlqegkwZgogCWwJJXIxLF9fVElfdGFzayglcjEyKQogCXRtaAklcjgsMHgwMDAxCQkjIGtlcm5lbCBwZXIgZXZlbnQgPwogCWp6CXBnbV9rcHJvYmUKLQlvaQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9QRVJfVFJBUAorCW9pCV9fUFRfRkxBR1MrMyglcjExKSxfUElGX1BFUl9UUkFQCiAJbXZjCV9fVEhSRUFEX3Blcl9hZGRyZXNzKDQsJXIxKSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3Blcl9jYXVzZSgyLCVyMSksX19MQ19QRVJfQ0FVU0UKLQltdmMJX19USFJFQURfcGVyX3BhaWQoMSwlcjEpLF9fTENfUEVSX1BBSUQKKwltdmMJX19USFJFQURfcGVyX2NhdXNlKDIsJXIxKSxfX0xDX1BFUl9DT0RFCisJbXZjCV9fVEhSRUFEX3Blcl9wYWlkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKIDA6CVJFRU5BQkxFX0lSUVMKIAl4YwlfX1NGX0JBQ0tDSEFJTig0LCVyMTUpLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCiAJbAklcjEsQkFTRUQoLkxqdW1wX3RhYmxlKQpAQCAtNDIwLDkgKzQxOCw5IEBACiAjIHNpbmdsZSBzdGVwcGVkIHN5c3RlbSBjYWxsCiAjCiBwZ21fc3ZjcGVyOgotCW9pCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1BFUl9UUkFQCiAJbXZjCV9fTENfUkVUVVJOX1BTVyg0KSxfX0xDX1NWQ19ORVdfUFNXCiAJbXZjCV9fTENfUkVUVVJOX1BTVys0KDQpLEJBU0VEKC5Mc3lzY19wZXIpCisJbGhpCSVyMTQsX1BJRl9TWVNDQUxMIHwgX1BJRl9QRVJfVFJBUAogCWxwc3cJX19MQ19SRVRVUk5fUFNXCQkjIGJyYW5jaCB0byBzeXNjX3BlciBhbmQgZW5hYmxlIGlycXMKIAogLyoKQEAgLTQ0NSw2ICs0NDMsNyBAQAogCW12YwlfX1BUX1I4KDMyLCVyMTEpLF9fTENfU0FWRV9BUkVBX0FTWU5DCiAJc3RtCSVyOCwlcjksX19QVF9QU1coJXIxMSkKIAltdmMJX19QVF9JTlRfQ09ERSgxMiwlcjExKSxfX0xDX1NVQkNIQU5ORUxfSUQKKwl4YwlfX1BUX0ZMQUdTKDQsJXIxMSksX19QVF9GTEFHUyglcjExKQogCVRSQUNFX0lSUVNfT0ZGCiAJeGMJX19TRl9CQUNLQ0hBSU4oNCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KQogaW9fbG9vcDoKQEAgLTQ2Niw4ICs0NjUsMTAgQEAKIAlMT0NLREVQX1NZU19FWElUCiAJVFJBQ0VfSVJRU19PTgogaW9fdGlmOgotCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1dPUktfSU5UCisJdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfV09SSwogCWpueglpb193b3JrCQkJIyB0aGVyZSBpcyB3b3JrIHRvIGRvIChzaWduYWxzIGV0Yy4pCisJdG0JX19MQ19DUFVfRkxBR1MrMyxfQ0lGX1dPUksKKwlqbnoJaW9fd29yawogaW9fcmVzdG9yZToKIAltdmMJX19MQ19SRVRVUk5fUFNXKDgpLF9fUFRfUFNXKCVyMTEpCiAJc3RwdAlfX0xDX0VYSVRfVElNRVIKQEAgLTQ3Nyw3ICs0NzgsNyBAQAogCiAjCiAjIFRoZXJlIGlzIHdvcmsgdG9kbywgZmluZCBvdXQgaW4gd2hpY2ggY29udGV4dCB3ZSBoYXZlIGJlZW4gaW50ZXJydXB0ZWQ6Ci0jIDEpIGlmIHdlIHJldHVybiB0byB1c2VyIHNwYWNlIHdlIGNhbiBkbyBhbGwgX1RJRl9XT1JLX0lOVCB3b3JrCisjIDEpIGlmIHdlIHJldHVybiB0byB1c2VyIHNwYWNlIHdlIGNhbiBkbyBhbGwgX1RJRl9XT1JLIHdvcmsKICMgMikgaWYgd2UgcmV0dXJuIHRvIGtlcm5lbCBjb2RlIGFuZCBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCBjaGVjawogIyAgICB0aGUgcHJlZW1wdGlvbiBjb3VudGVyIGFuZCBpZiBpdCBpcyB6ZXJvIGNhbGwgcHJlZW1wdF9zY2hlZHVsZV9pcnEKICMgQmVmb3JlIGFueSB3b3JrIGNhbiBiZSBkb25lLCBhIHN3aXRjaCB0byB0aGUga2VybmVsIHN0YWNrIGlzIHJlcXVpcmVkLgpAQCAtNTIwLDExICs1MjEsOSBAQAogCiAjCiAjIE9uZSBvZiB0aGUgd29yayBiaXRzIGlzIG9uLiBGaW5kIG91dCB3aGljaCBvbmUuCi0jIENoZWNrZWQgYXJlOiBfVElGX1NJR1BFTkRJTkcsIF9USUZfTk9USUZZX1JFU1VNRSwgX1RJRl9ORUVEX1JFU0NIRUQKLSMJCWFuZCBfVElGX01DQ0tfUEVORElORwogIwogaW9fd29ya190aWY6Ci0JdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfTUNDS19QRU5ESU5HCisJdG0JX19MQ19DUFVfRkxBR1MrMyglcjEyKSxfQ0lGX01DQ0tfUEVORElORwogCWpvCWlvX21jY2tfcGVuZGluZwogCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX05FRURfUkVTQ0hFRAogCWpvCWlvX3Jlc2NoZWR1bGUKQEAgLTUzMiwxMiArNTMxLDEyIEBACiAJam8JaW9fc2lncGVuZGluZwogCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX05PVElGWV9SRVNVTUUKIAlqbwlpb19ub3RpZnlfcmVzdW1lCi0JdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfQVNDRQorCXRtCV9fTENfQ1BVX0ZMQUdTKzMsX0NJRl9BU0NFCiAJam8JaW9fdWFjY2VzcwogCWoJaW9fcmV0dXJuCQkjIGJld2FyZSBvZiBjcml0aWNhbCBzZWN0aW9uIGNsZWFudXAKIAogIwotIyBfVElGX01DQ0tfUEVORElORyBpcyBzZXQsIGNhbGwgaGFuZGxlcgorIyBfQ0lGX01DQ0tfUEVORElORyBpcyBzZXQsIGNhbGwgaGFuZGxlcgogIwogaW9fbWNja19wZW5kaW5nOgogCSMgVFJBQ0VfSVJRU19PTiBhbHJlYWR5IGRvbmUgYXQgaW9fcmV0dXJuCkBAIC01NDcsMTAgKzU0NiwxMCBAQAogCWoJaW9fcmV0dXJuCiAKICMKLSMgX1RJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKKyMgX0NJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKICMKIGlvX3VhY2Nlc3M6Ci0JbmkJX19USV9mbGFncyszKCVyMTIpLDI1NS1fVElGX0FTQ0UKKwluaQlfX0xDX0NQVV9GTEFHUyszLDI1NS1fQ0lGX0FTQ0UKIAlsY3RsCSVjMSwlYzEsX19MQ19VU0VSX0FTQ0UJIyBsb2FkIHByaW1hcnkgYXNjZQogCWoJaW9fcmV0dXJuCiAKQEAgLTYxMyw2ICs2MTIsNyBAQAogCXN0bQklcjgsJXI5LF9fUFRfUFNXKCVyMTEpCiAJbXZjCV9fUFRfSU5UX0NPREUoNCwlcjExKSxfX0xDX0VYVF9DUFVfQUREUgogCW12YwlfX1BUX0lOVF9QQVJNKDQsJXIxMSksX19MQ19FWFRfUEFSQU1TCisJeGMJX19QVF9GTEFHUyg0LCVyMTEpLF9fUFRfRkxBR1MoJXIxMSkKIAlUUkFDRV9JUlFTX09GRgogCWwJJXIxLEJBU0VEKC5MZG9fSVJRKQogCWxyCSVyMiwlcjExCQkjIHBhc3MgcG9pbnRlciB0byBwdF9yZWdzCkBAIC02NzcsNiArNjc3LDcgQEAKIAlzdG0JJXIwLCVyNyxfX1BUX1IwKCVyMTEpCiAJbXZjCV9fUFRfUjgoMzIsJXIxMSksX19MQ19HUFJFR1NfU0FWRV9BUkVBKzMyCiAJc3RtCSVyOCwlcjksX19QVF9QU1coJXIxMSkKKwl4YwlfX1BUX0ZMQUdTKDQsJXIxMSksX19QVF9GTEFHUyglcjExKQogCXhjCV9fU0ZfQkFDS0NIQUlOKDQsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAlsCSVyMSxCQVNFRCguTGRvX21hY2hpbmVfY2hlY2spCiAJbHIJJXIyLCVyMTEJCSMgcGFzcyBwb2ludGVyIHRvIHB0X3JlZ3MKQEAgLTY4OSw3ICs2OTAsNyBAQAogCWxhCSVyMTEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQoJXIxNSkKIAlscgklcjE1LCVyMQogCXNzbQlfX0xDX1BHTV9ORVdfUFNXCSMgdHVybiBkYXQgb24sIGtlZXAgaXJxcyBvZmYKLQl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9NQ0NLX1BFTkRJTkcKKwl0bQlfX0xDX0NQVV9GTEFHUyszLF9DSUZfTUNDS19QRU5ESU5HCiAJam5vCW1jY2tfcmV0dXJuCiAJVFJBQ0VfSVJRU19PRkYKIAlsCSVyMSxCQVNFRCguTGhhbmRsZV9tY2NrKQpAQCAtODQyLDYgKzg0Myw4IEBACiAJc3RtCSVyMCwlcjcsX19QVF9SMCglcjkpCiAJbXZjCV9fUFRfUFNXKDgsJXI5KSxfX0xDX1NWQ19PTERfUFNXCiAJbXZjCV9fUFRfSU5UX0NPREUoNCwlcjkpLF9fTENfU1ZDX0lMQworCXhjCV9fUFRfRkxBR1MoNCwlcjkpLF9fUFRfRkxBR1MoJXI5KQorCW12aQlfX1BUX0ZMQUdTKzMoJXI5KSxfUElGX1NZU0NBTEwKIAkjIHNldHVwIHNhdmVkIHJlZ2lzdGVyIDE1CiAJc3QJJXIxNSwyOCglcjExKQkJIyByMTUgc3RhY2sgcG9pbnRlcgogCSMgc2V0IG5ldyBwc3cgYWRkcmVzcyBhbmQgZXhpdApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCA1OTYzZTQzLi5mMmU2NzRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtNDIsMTMgKzQyLDExIEBACiBTVEFDS19TSVpFICA9IDEgPDwgU1RBQ0tfU0hJRlQKIFNUQUNLX0lOSVQgPSBTVEFDS19TSVpFIC0gU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgLSBfX1BUX1NJWkUKIAotX1RJRl9XT1JLX1NWQyA9IChfVElGX1NJR1BFTkRJTkcgfCBfVElGX05PVElGWV9SRVNVTUUgfCBfVElGX05FRURfUkVTQ0hFRCB8IFwKLQkJIF9USUZfTUNDS19QRU5ESU5HIHwgX1RJRl9QRVJfVFJBUCB8IF9USUZfQVNDRSkKLV9USUZfV09SS19JTlQgPSAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgX1RJRl9ORUVEX1JFU0NIRUQgfCBcCi0JCSBfVElGX01DQ0tfUEVORElORyB8IF9USUZfQVNDRSkKLV9USUZfVFJBQ0UgICAgPSAoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwgX1RJRl9TRUNDT01QIHwgXAotCQkgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCi1fVElGX1RSQU5TRkVSID0gKF9USUZfTUNDS19QRU5ESU5HIHwgX1RJRl9UTEJfV0FJVCkKK19USUZfV09SSwk9IChfVElGX1NJR1BFTkRJTkcgfCBfVElGX05PVElGWV9SRVNVTUUgfCBfVElGX05FRURfUkVTQ0hFRCkKK19USUZfVFJBQ0UJPSAoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwgX1RJRl9TRUNDT01QIHwgXAorCQkgICBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKK19DSUZfV09SSwk9IChfQ0lGX01DQ0tfUEVORElORyB8IF9DSUZfQVNDRSkKK19QSUZfV09SSwk9IChfUElGX1BFUl9UUkFQKQogCiAjZGVmaW5lIEJBU0VEKG5hbWUpIG5hbWUtc3lzdGVtX2NhbGwoJXIxMykKIApAQCAtMTkwLDEzICsxODgsNyBAQAogCWxjdGwJJWM0LCVjNCxfX1RBU0tfcGlkKCVyMykJCSMgbG9hZCBwaWQgdG8gY29udHJvbCByZWcuIDQKIAltdmMJX19MQ19DVVJSRU5UX1BJRCs0KDQsJXIwKSxfX1RBU0tfcGlkKCVyMykgIyBzdG9yZSBwaWQgb2YgbmV4dAogCWxnCSVyMTUsX19USFJFQURfa3NwKCVyMykJCSMgbG9hZCBrZXJuZWwgc3RhY2sgb2YgbmV4dAotCWxsaWxsCSVyNixfVElGX1RSQU5TRkVSCQkjIHRyYW5zZmVyIFRJRiBiaXRzCi0JbmcJJXI2LF9fVElfZmxhZ3MoJXI0KQkJIyBpc29sYXRlIFRJRiBiaXRzCi0JanoJMGYKLQlvZwklcjYsX19USV9mbGFncyglcjUpCQkjIHNldCBUSUYgYml0cyBvZiBuZXh0Ci0Jc3RnCSVyNixfX1RJX2ZsYWdzKCVyNSkKLQluaQlfX1RJX2ZsYWdzKzcoJXI0KSwyNTUtX1RJRl9UUkFOU0ZFUiAjIGNsZWFyIFRJRiBiaXRzIG9mIHByZXYKLTA6CWxtZwklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkJIyBsb2FkIGdwcnMgb2YgbmV4dCB0YXNrCisJbG1nCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KQkjIGxvYWQgZ3BycyBvZiBuZXh0IHRhc2sKIAlicgklcjE0CiAKIF9fY3JpdGljYWxfc3RhcnQ6CkBAIC0yMTEsNiArMjAzLDcgQEAKIAlzdG1nCSVyOCwlcjE1LF9fTENfU0FWRV9BUkVBX1NZTkMKIAlsZwklcjEwLF9fTENfTEFTVF9CUkVBSwogCWxnCSVyMTIsX19MQ19USFJFQURfSU5GTworCWxnaGkJJXIxNCxfUElGX1NZU0NBTEwKIHN5c2NfcGVyOgogCWxnCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sKIAlsYQklcjExLFNUQUNLX0ZSQU1FX09WRVJIRUFEKCVyMTUpCSMgcG9pbnRlciB0byBwdF9yZWdzCkBAIC0yMjEsOCArMjE0LDggQEAKIAltdmMJX19QVF9SOCg2NCwlcjExKSxfX0xDX1NBVkVfQVJFQV9TWU5DCiAJbXZjCV9fUFRfUFNXKDE2LCVyMTEpLF9fTENfU1ZDX09MRF9QU1cKIAltdmMJX19QVF9JTlRfQ09ERSg0LCVyMTEpLF9fTENfU1ZDX0lMQworCXN0ZwklcjE0LF9fUFRfRkxBR1MoJXIxMSkKIHN5c2NfZG9fc3ZjOgotCW9pCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1NZU0NBTEwKIAlsZwklcjEwLF9fVElfc3lzY190YWJsZSglcjEyKQkjIGFkZHJlc3Mgb2Ygc3lzdGVtIGNhbGwgdGFibGUKIAlsbGdoCSVyOCxfX1BUX0lOVF9DT0RFKzIoJXIxMSkKIAlzbGFnCSVyOCwlcjgsMgkJCSMgc2hpZnQgYW5kIHRlc3QgZm9yIHN2YyAwCkBAIC0yMzgsNyArMjMxLDcgQEAKIAlzdGcJJXIyLF9fUFRfT1JJR19HUFIyKCVyMTEpCiAJc3RnCSVyNyxTVEFDS19GUkFNRV9PVkVSSEVBRCglcjE1KQogCWxnZgklcjksMCglcjgsJXIxMCkJCQkjIGdldCBzeXN0ZW0gY2FsbCBhZGQuCi0JdG0JX19USV9mbGFncys2KCVyMTIpLF9USUZfVFJBQ0UgPj4gOAorCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1RSQUNFCiAJam56CXN5c2NfdHJhY2VzeXMKIAliYXNyCSVyMTQsJXI5CQkJIyBjYWxsIHN5c194eHh4CiAJc3RnCSVyMixfX1BUX1IyKCVyMTEpCQkjIHN0b3JlIHJldHVybiB2YWx1ZQpAQCAtMjQ4LDkgKzI0MSwxMiBAQAogc3lzY190aWY6CiAJdG0JX19QVF9QU1crMSglcjExKSwweDAxCQkjIHJldHVybmluZyB0byB1c2VyID8KIAlqbm8Jc3lzY19yZXN0b3JlCi0JdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfV09SS19TVkMKKwl0bQlfX1BUX0ZMQUdTKzcoJXIxMSksX1BJRl9XT1JLCisJam56CXN5c2Nfd29yaworCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1dPUksKIAlqbnoJc3lzY193b3JrCQkJIyBjaGVjayBmb3Igd29yawotCW5pCV9fVElfZmxhZ3MrNyglcjEyKSwyNTUtX1RJRl9TWVNDQUxMCisJdG0JX19MQ19DUFVfRkxBR1MrNyxfQ0lGX1dPUksKKwlqbnoJc3lzY193b3JrCiBzeXNjX3Jlc3RvcmU6CiAJbGcJJXIxNCxfX0xDX1ZEU09fUEVSX0NQVQogCWxtZwklcjAsJXIxMCxfX1BUX1IwKCVyMTEpCkBAIC0yNjUsMTcgKzI2MSwxNyBAQAogIyBPbmUgb2YgdGhlIHdvcmsgYml0cyBpcyBvbi4gRmluZCBvdXQgd2hpY2ggb25lLgogIwogc3lzY193b3JrOgotCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX01DQ0tfUEVORElORworCXRtCV9fTENfQ1BVX0ZMQUdTKzcsX0NJRl9NQ0NLX1BFTkRJTkcKIAlqbwlzeXNjX21jY2tfcGVuZGluZwogCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX05FRURfUkVTQ0hFRAogCWpvCXN5c2NfcmVzY2hlZHVsZQotCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1BFUl9UUkFQCisJdG0JX19QVF9GTEFHUys3KCVyMTEpLF9QSUZfUEVSX1RSQVAKIAlqbwlzeXNjX3NpbmdsZXN0ZXAKIAl0bQlfX1RJX2ZsYWdzKzcoJXIxMiksX1RJRl9TSUdQRU5ESU5HCiAJam8Jc3lzY19zaWdwZW5kaW5nCiAJdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfTk9USUZZX1JFU1VNRQogCWpvCXN5c2Nfbm90aWZ5X3Jlc3VtZQotCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX0FTQ0UKKwl0bQlfX0xDX0NQVV9GTEFHUys3LF9DSUZfQVNDRQogCWpvCXN5c2NfdWFjY2VzcwogCWoJc3lzY19yZXR1cm4JCSMgYmV3YXJlIG9mIGNyaXRpY2FsIHNlY3Rpb24gY2xlYW51cAogCkBAIC0yODcsMTcgKzI4MywxNyBAQAogCWpnCXNjaGVkdWxlCiAKICMKLSMgX1RJRl9NQ0NLX1BFTkRJTkcgaXMgc2V0LCBjYWxsIGhhbmRsZXIKKyMgX0NJRl9NQ0NLX1BFTkRJTkcgaXMgc2V0LCBjYWxsIGhhbmRsZXIKICMKIHN5c2NfbWNja19wZW5kaW5nOgogCWxhcmwJJXIxNCxzeXNjX3JldHVybgogCWpnCXMzOTBfaGFuZGxlX21jY2sJIyBUSUYgYml0IHdpbGwgYmUgY2xlYXJlZCBieSBoYW5kbGVyCiAKICMKLSMgX1RJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKKyMgX0NJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKICMKIHN5c2NfdWFjY2VzczoKLQluaQlfX1RJX2ZsYWdzKzcoJXIxMiksMjU1LV9USUZfQVNDRQorCW5pCV9fTENfQ1BVX0ZMQUdTKzcsMjU1LV9DSUZfQVNDRQogCWxjdGxnCSVjMSwlYzEsX19MQ19VU0VSX0FTQ0UJCSMgbG9hZCBwcmltYXJ5IGFzY2UKIAlqCXN5c2NfcmV0dXJuCiAKQEAgLTMwNyw3ICszMDMsNyBAQAogc3lzY19zaWdwZW5kaW5nOgogCWxncgklcjIsJXIxMQkJIyBwYXNzIHBvaW50ZXIgdG8gcHRfcmVncwogCWJyYXNsCSVyMTQsZG9fc2lnbmFsCi0JdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfU1lTQ0FMTAorCXRtCV9fUFRfRkxBR1MrNyglcjExKSxfUElGX1NZU0NBTEwKIAlqbm8Jc3lzY19yZXR1cm4KIAlsbWcJJXIyLCVyNyxfX1BUX1IyKCVyMTEpCSMgbG9hZCBzdmMgYXJndW1lbnRzCiAJbGcJJXIxMCxfX1RJX3N5c2NfdGFibGUoJXIxMikJIyBhZGRyZXNzIG9mIHN5c3RlbSBjYWxsIHRhYmxlCkBAIC0zMjcsMTAgKzMyMywxMCBAQAogCWpnCWRvX25vdGlmeV9yZXN1bWUKIAogIwotIyBfVElGX1BFUl9UUkFQIGlzIHNldCwgY2FsbCBkb19wZXJfdHJhcAorIyBfUElGX1BFUl9UUkFQIGlzIHNldCwgY2FsbCBkb19wZXJfdHJhcAogIwogc3lzY19zaW5nbGVzdGVwOgotCW5pCV9fVElfZmxhZ3MrNyglcjEyKSwyNTUtX1RJRl9QRVJfVFJBUAorCW5pCV9fUFRfRkxBR1MrNyglcjExKSwyNTUtX1BJRl9QRVJfVFJBUAogCWxncgklcjIsJXIxMQkJIyBwYXNzIHBvaW50ZXIgdG8gcHRfcmVncwogCWxhcmwJJXIxNCxzeXNjX3JldHVybgogCWpnCWRvX3Blcl90cmFwCkBAIC0zNTcsNyArMzUzLDcgQEAKIAliYXNyCSVyMTQsJXI5CQkjIGNhbGwgc3lzX3h4eAogCXN0ZwklcjIsX19QVF9SMiglcjExKQkjIHN0b3JlIHJldHVybiB2YWx1ZQogc3lzY190cmFjZW5vZ286Ci0JdG0JX19USV9mbGFncys2KCVyMTIpLF9USUZfVFJBQ0UgPj4gOAorCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1RSQUNFCiAJanoJc3lzY19yZXR1cm4KIAlsZ3IJJXIyLCVyMTEJCSMgcGFzcyBwb2ludGVyIHRvIHB0X3JlZ3MKIAlsYXJsCSVyMTQsc3lzY19yZXR1cm4KQEAgLTQxNiwxNSArNDEyLDE2IEBACiAJc3RtZwklcjgsJXI5LF9fUFRfUFNXKCVyMTEpCiAJbXZjCV9fUFRfSU5UX0NPREUoNCwlcjExKSxfX0xDX1BHTV9JTEMKIAltdmMJX19QVF9JTlRfUEFSTV9MT05HKDgsJXIxMSksX19MQ19UUkFOU19FWENfQ09ERQorCXhjCV9fUFRfRkxBR1MoOCwlcjExKSxfX1BUX0ZMQUdTKCVyMTEpCiAJc3RnCSVyMTAsX19QVF9BUkdTKCVyMTEpCiAJdG0JX19MQ19QR01fSUxDKzMsMHg4MAkjIGNoZWNrIGZvciBwZXIgZXhjZXB0aW9uCiAJanoJMGYKIAl0bWhoCSVyOCwweDAwMDEJCSMga2VybmVsIHBlciBldmVudCA/CiAJanoJcGdtX2twcm9iZQotCW9pCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1BFUl9UUkFQCisJb2kJX19QVF9GTEFHUys3KCVyMTEpLF9QSUZfUEVSX1RSQVAKIAltdmMJX19USFJFQURfcGVyX2FkZHJlc3MoOCwlcjE0KSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3Blcl9jYXVzZSgyLCVyMTQpLF9fTENfUEVSX0NBVVNFCi0JbXZjCV9fVEhSRUFEX3Blcl9wYWlkKDEsJXIxNCksX19MQ19QRVJfUEFJRAorCW12YwlfX1RIUkVBRF9wZXJfY2F1c2UoMiwlcjE0KSxfX0xDX1BFUl9DT0RFCisJbXZjCV9fVEhSRUFEX3Blcl9wYWlkKDEsJXIxNCksX19MQ19QRVJfQUNDRVNTX0lECiAwOglSRUVOQUJMRV9JUlFTCiAJeGMJX19TRl9CQUNLQ0hBSU4oOCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KQogCWxhcmwJJXIxLHBnbV9jaGVja190YWJsZQpAQCAtNDUxLDEwICs0NDgsMTAgQEAKICMgc2luZ2xlIHN0ZXBwZWQgc3lzdGVtIGNhbGwKICMKIHBnbV9zdmNwZXI6Ci0Jb2kJX19USV9mbGFncys3KCVyMTIpLF9USUZfUEVSX1RSQVAKIAltdmMJX19MQ19SRVRVUk5fUFNXKDgpLF9fTENfU1ZDX05FV19QU1cKIAlsYXJsCSVyMTQsc3lzY19wZXIKIAlzdGcJJXIxNCxfX0xDX1JFVFVSTl9QU1crOAorCWxnaGkJJXIxNCxfUElGX1NZU0NBTEwgfCBfUElGX1BFUl9UUkFQCiAJbHBzd2UJX19MQ19SRVRVUk5fUFNXCQkjIGJyYW5jaCB0byBzeXNjX3BlciBhbmQgZW5hYmxlIGlycXMKIAogLyoKQEAgLTQ3OSw2ICs0NzYsNyBAQAogCW12YwlfX1BUX1I4KDY0LCVyMTEpLF9fTENfU0FWRV9BUkVBX0FTWU5DCiAJc3RtZwklcjgsJXI5LF9fUFRfUFNXKCVyMTEpCiAJbXZjCV9fUFRfSU5UX0NPREUoMTIsJXIxMSksX19MQ19TVUJDSEFOTkVMX0lECisJeGMJX19QVF9GTEFHUyg4LCVyMTEpLF9fUFRfRkxBR1MoJXIxMSkKIAlUUkFDRV9JUlFTX09GRgogCXhjCV9fU0ZfQkFDS0NIQUlOKDgsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkKIGlvX2xvb3A6CkBAIC00OTksOCArNDk3LDEwIEBACiAJTE9DS0RFUF9TWVNfRVhJVAogCVRSQUNFX0lSUVNfT04KIGlvX3RpZjoKLQl0bQlfX1RJX2ZsYWdzKzcoJXIxMiksX1RJRl9XT1JLX0lOVAorCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1dPUksKIAlqbnoJaW9fd29yayAJCSMgdGhlcmUgaXMgd29yayB0byBkbyAoc2lnbmFscyBldGMuKQorCXRtCV9fTENfQ1BVX0ZMQUdTKzcsX0NJRl9XT1JLCisJam56CWlvX3dvcmsKIGlvX3Jlc3RvcmU6CiAJbGcJJXIxNCxfX0xDX1ZEU09fUEVSX0NQVQogCWxtZwklcjAsJXIxMCxfX1BUX1IwKCVyMTEpCkBAIC01MTMsNyArNTEzLDcgQEAKIAogIwogIyBUaGVyZSBpcyB3b3JrIHRvZG8sIGZpbmQgb3V0IGluIHdoaWNoIGNvbnRleHQgd2UgaGF2ZSBiZWVuIGludGVycnVwdGVkOgotIyAxKSBpZiB3ZSByZXR1cm4gdG8gdXNlciBzcGFjZSB3ZSBjYW4gZG8gYWxsIF9USUZfV09SS19JTlQgd29yaworIyAxKSBpZiB3ZSByZXR1cm4gdG8gdXNlciBzcGFjZSB3ZSBjYW4gZG8gYWxsIF9USUZfV09SSyB3b3JrCiAjIDIpIGlmIHdlIHJldHVybiB0byBrZXJuZWwgY29kZSBhbmQga3ZtIGlzIGVuYWJsZWQgY2hlY2sgaWYgd2UgbmVlZCB0bwogIyAgICBtb2RpZnkgdGhlIHBzdyB0byBsZWF2ZSBTSUUKICMgMykgaWYgd2UgcmV0dXJuIHRvIGtlcm5lbCBjb2RlIGFuZCBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCBjaGVjawpAQCAtNTU3LDExICs1NTcsOSBAQAogCiAjCiAjIE9uZSBvZiB0aGUgd29yayBiaXRzIGlzIG9uLiBGaW5kIG91dCB3aGljaCBvbmUuCi0jIENoZWNrZWQgYXJlOiBfVElGX1NJR1BFTkRJTkcsIF9USUZfTk9USUZZX1JFU1VNRSwgX1RJRl9ORUVEX1JFU0NIRUQKLSMJICAgICAgIGFuZCBfVElGX01DQ0tfUEVORElORwogIwogaW9fd29ya190aWY6Ci0JdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfTUNDS19QRU5ESU5HCisJdG0JX19MQ19DUFVfRkxBR1MrNyxfQ0lGX01DQ0tfUEVORElORwogCWpvCWlvX21jY2tfcGVuZGluZwogCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX05FRURfUkVTQ0hFRAogCWpvCWlvX3Jlc2NoZWR1bGUKQEAgLTU2OSwxMiArNTY3LDEyIEBACiAJam8JaW9fc2lncGVuZGluZwogCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX05PVElGWV9SRVNVTUUKIAlqbwlpb19ub3RpZnlfcmVzdW1lCi0JdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfQVNDRQorCXRtCV9fTENfQ1BVX0ZMQUdTKzcsX0NJRl9BU0NFCiAJam8JaW9fdWFjY2VzcwogCWoJaW9fcmV0dXJuCQkjIGJld2FyZSBvZiBjcml0aWNhbCBzZWN0aW9uIGNsZWFudXAKIAogIwotIyBfVElGX01DQ0tfUEVORElORyBpcyBzZXQsIGNhbGwgaGFuZGxlcgorIyBfQ0lGX01DQ0tfUEVORElORyBpcyBzZXQsIGNhbGwgaGFuZGxlcgogIwogaW9fbWNja19wZW5kaW5nOgogCSMgVFJBQ0VfSVJRU19PTiBhbHJlYWR5IGRvbmUgYXQgaW9fcmV0dXJuCkBAIC01ODMsMTAgKzU4MSwxMCBAQAogCWoJaW9fcmV0dXJuCiAKICMKLSMgX1RJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKKyMgX0NJRl9BU0NFIGlzIHNldCwgbG9hZCB1c2VyIHNwYWNlIGFzY2UKICMKIGlvX3VhY2Nlc3M6Ci0JbmkJX19USV9mbGFncys3KCVyMTIpLDI1NS1fVElGX0FTQ0UKKwluaQlfX0xDX0NQVV9GTEFHUys3LDI1NS1fQ0lGX0FTQ0UKIAlsY3RsZwklYzEsJWMxLF9fTENfVVNFUl9BU0NFCQkjIGxvYWQgcHJpbWFyeSBhc2NlCiAJaglpb19yZXR1cm4KIApAQCAtNjUwLDYgKzY0OCw3IEBACiAJbXZjCV9fUFRfSU5UX0NPREUoNCwlcjExKSxfX0xDX0VYVF9DUFVfQUREUgogCW12YwlfX1BUX0lOVF9QQVJNKDQsJXIxMSksX19MQ19FWFRfUEFSQU1TCiAJbXZjCV9fUFRfSU5UX1BBUk1fTE9ORyg4LCVyMTEpLDAoJXIxKQorCXhjCV9fUFRfRkxBR1MoOCwlcjExKSxfX1BUX0ZMQUdTKCVyMTEpCiAJVFJBQ0VfSVJRU19PRkYKIAl4YwlfX1NGX0JBQ0tDSEFJTig4LCVyMTUpLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCiAJbGdyCSVyMiwlcjExCQkjIHBhc3MgcG9pbnRlciB0byBwdF9yZWdzCkBAIC03MTYsNiArNzE1LDcgQEAKIAlzdG1nCSVyMCwlcjcsX19QVF9SMCglcjExKQogCW12YwlfX1BUX1I4KDY0LCVyMTEpLDAoJXIxNCkKIAlzdG1nCSVyOCwlcjksX19QVF9QU1coJXIxMSkKKwl4YwlfX1BUX0ZMQUdTKDgsJXIxMSksX19QVF9GTEFHUyglcjExKQogCXhjCV9fU0ZfQkFDS0NIQUlOKDgsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAlsZ3IJJXIyLCVyMTEJCSMgcGFzcyBwb2ludGVyIHRvIHB0X3JlZ3MKIAlicmFzbAklcjE0LHMzOTBfZG9fbWFjaGluZV9jaGVjawpAQCAtNzI3LDcgKzcyNyw3IEBACiAJbGEJJXIxMSxTVEFDS19GUkFNRV9PVkVSSEVBRCglcjEpCiAJbGdyCSVyMTUsJXIxCiAJc3NtCV9fTENfUEdNX05FV19QU1cJIyB0dXJuIGRhdCBvbiwga2VlcCBpcnFzIG9mZgotCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX01DQ0tfUEVORElORworCXRtCV9fTENfQ1BVX0ZMQUdTKzcsX0NJRl9NQ0NLX1BFTkRJTkcKIAlqbm8JbWNja19yZXR1cm4KIAlUUkFDRV9JUlFTX09GRgogCWJyYXNsCSVyMTQsczM5MF9oYW5kbGVfbWNjawpAQCAtODg0LDYgKzg4NCw4IEBACiAJc3RtZwklcjAsJXI3LF9fUFRfUjAoJXI5KQogCW12YwlfX1BUX1BTVygxNiwlcjkpLF9fTENfU1ZDX09MRF9QU1cKIAltdmMJX19QVF9JTlRfQ09ERSg0LCVyOSksX19MQ19TVkNfSUxDCisJeGMJX19QVF9GTEFHUyg4LCVyOSksX19QVF9GTEFHUyglcjkpCisJbXZpCV9fUFRfRkxBR1MrNyglcjkpLF9QSUZfU1lTQ0FMTAogCSMgc2V0dXAgc2F2ZWQgcmVnaXN0ZXIgcjE1CiAJc3RnCSVyMTUsNTYoJXIxMSkJCSMgcjE1IHN0YWNrIHBvaW50ZXIKIAkjIHNldCBuZXcgcHN3IGFkZHJlc3MgYW5kIGV4aXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggNDI5YWZjYy4uN2JhN2Q2NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQzNywxMyArNDM3LDEzIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkKICNpZiBkZWZpbmVkKENPTkZJR19NQVJDSF9aRUMxMikKLQkubG9uZyAzLCAweGMxMDBlZmUzLCAweGY0NmNlODAwLCAweDAwNDAwMDAwCisJLmxvbmcgMywgMHhjMTAwZWZlYSwgMHhmNDZjZTgwMCwgMHgwMDQwMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfTUFSQ0hfWjE5NikKLQkubG9uZyAyLCAweGMxMDBlZmUzLCAweGY0NmMwMDAwCisJLmxvbmcgMiwgMHhjMTAwZWZlYSwgMHhmNDZjMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfTUFSQ0hfWjEwKQotCS5sb25nIDIsIDB4YzEwMGVmZTMsIDB4ZjA2ODAwMDAKKwkubG9uZyAyLCAweGMxMDBlZmVhLCAweGYwNjgwMDAwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NQVJDSF9aOV8xMDkpCi0JLmxvbmcgMSwgMHhjMTAwZWZjMworCS5sb25nIDEsIDB4YzEwMGVmYzIKICNlbGlmIGRlZmluZWQoQ09ORklHX01BUkNIX1o5OTApCiAJLmxvbmcgMSwgMHhjMDAwMjAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfTUFSQ0hfWjkwMCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IDlhOTk4NTYuLjZkYmU4MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtNTksNyArNTksNiBAQAogCS5sb25nCTAJCQkjIGNyMTM6IGhvbWUgc3BhY2Ugc2VnbWVudCB0YWJsZQogCS5sb25nCTB4YzAwMDAwMDAJCSMgY3IxNDogbWFjaGluZSBjaGVjayBoYW5kbGluZyBvZmYKIAkubG9uZwkwCQkJIyBjcjE1OiBsaW5rYWdlIHN0YWNrIG9wZXJhdGlvbnMKLS5MbWNodW5rOi5sb25nCW1lbW9yeV9jaHVuawogLkxic3NfYmduOiAgLmxvbmcgX19ic3Nfc3RhcnQKIC5MYnNzX2VuZDogIC5sb25nIF9lbmQKIC5McGFybWFkZHI6IC5sb25nIFBBUk1BUkVBCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL25taS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwppbmRleCBjNGMwMzM4Li4yMTBlMTI4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL25taS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlsb2NhbF9tY2NrX2Rpc2FibGUoKTsKIAltY2NrID0gX19nZXRfY3B1X3ZhcihjcHVfbWNjayk7CiAJbWVtc2V0KCZfX2dldF9jcHVfdmFyKGNwdV9tY2NrKSwgMCwgc2l6ZW9mKHN0cnVjdCBtY2NrX3N0cnVjdCkpOwotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9NQ0NLX1BFTkRJTkcpOworCWNsZWFyX2NwdV9mbGFnKENJRl9NQ0NLX1BFTkRJTkcpOwogCWxvY2FsX21jY2tfZW5hYmxlKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJCSAqLwogCQkJbWNjay0+a2lsbF90YXNrID0gMTsKIAkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKLQkJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKKwkJCXNldF9jcHVfZmxhZyhDSUZfTUNDS19QRU5ESU5HKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBDb3VsZG4ndCByZXN0b3JlIGFsbCByZWdpc3RlciBjb250ZW50cyB3aGlsZSBpbgpAQCAtMzUyLDEyICszNTIsMTIgQEAKIAlpZiAobWNpLT5jcCkgewogCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KIAkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOwotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CisJCXNldF9jcHVfZmxhZyhDSUZfTUNDS19QRU5ESU5HKTsKIAl9CiAJaWYgKG1jaS0+dykgewogCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KIAkJbWNjay0+d2FybmluZyA9IDE7Ci0JCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKKwkJc2V0X2NwdV9mbGFnKENJRl9NQ0NLX1BFTkRJTkcpOwogCX0KIAlubWlfZXhpdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkZDE0NTMyLi45M2I5Y2E0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjQsNyArNjQsNyBAQAogdm9pZCBhcmNoX2NwdV9pZGxlKHZvaWQpCiB7CiAJbG9jYWxfbWNja19kaXNhYmxlKCk7Ci0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORykpIHsKKwlpZiAodGVzdF9jcHVfZmxhZyhDSUZfTUNDS19QRU5ESU5HKSkgewogCQlsb2NhbF9tY2NrX2VuYWJsZSgpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXJldHVybjsKQEAgLTc2LDcgKzc2LDcgQEAKIAogdm9pZCBhcmNoX2NwdV9pZGxlX2V4aXQodm9pZCkKIHsKLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKSkKKwlpZiAodGVzdF9jcHVfZmxhZyhDSUZfTUNDS19QRU5ESU5HKSkKIAkJczM5MF9oYW5kbGVfbWNjaygpOwogfQogCkBAIC0xMjMsNyArMTIzLDYgQEAKIAltZW1zZXQoJnAtPnRocmVhZC5wZXJfdXNlciwgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfdXNlcikpOwogCW1lbXNldCgmcC0+dGhyZWFkLnBlcl9ldmVudCwgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfZXZlbnQpKTsKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX1NJTkdMRV9TVEVQKTsKLQljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX1BFUl9UUkFQKTsKIAkvKiBJbml0aWFsaXplIHBlciB0aHJlYWQgdXNlciBhbmQgc3lzdGVtIHRpbWVyIHZhbHVlcyAqLwogCXRpID0gdGFza190aHJlYWRfaW5mbyhwKTsKIAl0aS0+dXNlcl90aW1lciA9IDA7CkBAIC0xNTIsNiArMTUxLDcgQEAKIAl9CiAJZnJhbWUtPmNoaWxkcmVncyA9ICpjdXJyZW50X3B0X3JlZ3MoKTsKIAlmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMl0gPSAwOwkvKiBjaGlsZCByZXR1cm5zIDAgb24gZm9yay4gKi8KKwlmcmFtZS0+Y2hpbGRyZWdzLmZsYWdzID0gMDsKIAlpZiAobmV3X3N0YWNrcCkKIAkJZnJhbWUtPmNoaWxkcmVncy5ncHJzWzE1XSA9IG5ld19zdGFja3A7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDFjODI2MTkuLjJkNzE2NzM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCW1lbXNldCgmdGFzay0+dGhyZWFkLnBlcl91c2VyLCAwLCBzaXplb2YodGFzay0+dGhyZWFkLnBlcl91c2VyKSk7CiAJbWVtc2V0KCZ0YXNrLT50aHJlYWQucGVyX2V2ZW50LCAwLCBzaXplb2YodGFzay0+dGhyZWFkLnBlcl9ldmVudCkpOwogCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU0lOR0xFX1NURVApOwotCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfUEVSX1RSQVApOworCWNsZWFyX3B0X3JlZ3NfZmxhZyh0YXNrX3B0X3JlZ3ModGFzayksIFBJRl9QRVJfVFJBUCk7CiAJdGFzay0+dGhyZWFkLnBlcl9mbGFncyA9IDA7CiB9CiAKQEAgLTgxMyw3ICs4MTMsNyBAQAogCQkgKiBkZWJ1Z2dlciBzdG9yZWQgYW4gaW52YWxpZCBzeXN0ZW0gY2FsbCBudW1iZXIuIFNraXAKIAkJICogdGhlIHN5c3RlbSBjYWxsIGFuZCB0aGUgc3lzdGVtIGNhbGwgcmVzdGFydCBoYW5kbGluZy4KIAkJICovCi0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMKTsKKwkJY2xlYXJfcHRfcmVnc19mbGFnKHJlZ3MsIFBJRl9TWVNDQUxMKTsKIAkJcmV0ID0gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggODhkMWNhOC4uMWUyMjY0YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzgsMTAgKzc4LDkgQEAKIHVuc2lnbmVkIGxvbmcgZWxmX2h3Y2FwID0gMDsKIGNoYXIgZWxmX3BsYXRmb3JtW0VMRl9QTEFURk9STV9TSVpFXTsKIAotc3RydWN0IG1lbV9jaHVuayBfX2luaXRkYXRhIG1lbW9yeV9jaHVua1tNRU1PUllfQ0hVTktTXTsKLQogaW50IF9faW5pdGRhdGEgbWVtb3J5X2VuZF9zZXQ7CiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKK3Vuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtYXhfcGh5c21lbV9lbmQ7CiAKIHVuc2lnbmVkIGxvbmcgVk1BTExPQ19TVEFSVDsKIEVYUE9SVF9TWU1CT0woVk1BTExPQ19TVEFSVCk7CkBAIC0yMTIsNyArMjExLDcgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfWkZDUERVTVAKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3pmY3BkdW1wKHZvaWQpCiB7CiAJaWYgKGlwbF9pbmZvLnR5cGUgIT0gSVBMX1RZUEVfRkNQX0RVTVApCkBAIC0yMjQsNyArMjIzLDcgQEAKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfemZjcGR1bXAodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwogCiAgLyoKICAqIFJlYm9vdCwgaGFsdCBhbmQgcG93ZXJfb2ZmIHN0dWJzLiBUaGV5IGp1c3QgY2FsbCBfbWFjaGluZV9yZXN0YXJ0LApAQCAtMjczLDYgKzI3Miw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9tZW0oY2hhciAqcCkKIHsKIAltZW1vcnlfZW5kID0gbWVtcGFyc2UocCwgJnApOworCW1lbW9yeV9lbmQgJj0gUEFHRV9NQVNLOwogCW1lbW9yeV9lbmRfc2V0ID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM3Myw2ICszNzMsMTAgQEAKIAltZW1fYXNzaWduX2Fic29sdXRlKFMzOTBfbG93Y29yZS5yZXN0YXJ0X3NvdXJjZSwgbGMtPnJlc3RhcnRfc291cmNlKTsKIAltZW1fYXNzaWduX2Fic29sdXRlKFMzOTBfbG93Y29yZS5yZXN0YXJ0X3BzdywgbGMtPnJlc3RhcnRfcHN3KTsKIAorI2lmZGVmIENPTkZJR19TTVAKKwlsYy0+c3BpbmxvY2tfbG9ja3ZhbCA9IGFyY2hfc3Bpbl9sb2NrdmFsKDApOworI2VuZGlmCisKIAlzZXRfcHJlZml4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIGxjKTsKIAlsb3djb3JlX3B0clswXSA9IGxjOwogfQpAQCAtNDAxLDcgKzQwNSw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcmVzb3VyY2VzKHZvaWQpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMsICpzdGRfcmVzLCAqc3ViX3JlczsKLQlpbnQgaSwgajsKKwlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZWc7CisJaW50IGo7CiAKIAljb2RlX3Jlc291cmNlLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dDsKIAljb2RlX3Jlc291cmNlLmVuZCA9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0IC0gMTsKQEAgLTQxMCwyNCArNDE1LDEzIEBACiAJYnNzX3Jlc291cmNlLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICZfX2Jzc19zdGFydDsKIAlic3NfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfX2Jzc19zdG9wIC0gMTsKIAotCWZvciAoaSA9IDA7IGkgPCBNRU1PUllfQ0hVTktTOyBpKyspIHsKLQkJaWYgKCFtZW1vcnlfY2h1bmtbaV0uc2l6ZSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX21lbWJsb2NrKG1lbW9yeSwgcmVnKSB7CiAJCXJlcyA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZigqcmVzKSk7CiAJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX01FTTsKLQkJc3dpdGNoIChtZW1vcnlfY2h1bmtbaV0udHlwZSkgewotCQljYXNlIENIVU5LX1JFQURfV1JJVEU6Ci0JCQlyZXMtPm5hbWUgPSAiU3lzdGVtIFJBTSI7Ci0JCQlicmVhazsKLQkJY2FzZSBDSFVOS19SRUFEX09OTFk6Ci0JCQlyZXMtPm5hbWUgPSAiU3lzdGVtIFJPTSI7Ci0JCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfUkVBRE9OTFk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJlcy0+bmFtZSA9ICJyZXNlcnZlZCI7Ci0JCX0KLQkJcmVzLT5zdGFydCA9IG1lbW9yeV9jaHVua1tpXS5hZGRyOwotCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBtZW1vcnlfY2h1bmtbaV0uc2l6ZSAtIDE7CisKKwkJcmVzLT5uYW1lID0gIlN5c3RlbSBSQU0iOworCQlyZXMtPnN0YXJ0ID0gcmVnLT5iYXNlOworCQlyZXMtPmVuZCA9IHJlZy0+YmFzZSArIHJlZy0+c2l6ZSAtIDE7CiAJCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpOwogCiAJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHN0YW5kYXJkX3Jlc291cmNlcyk7IGorKykgewpAQCAtNDUxLDQ4ICs0NDUsMTEgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnlfZW5kKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2bWF4LCB2bWFsbG9jX3NpemUsIHRtcDsKLQl1bnNpZ25lZCBsb25nIHJlYWxfbWVtb3J5X3NpemUgPSAwOwotCWludCBpOwotCi0KLSNpZmRlZiBDT05GSUdfWkZDUERVTVAKLQlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1BfRFVNUCAmJgotCSAgICAhT0xETUVNX0JBU0UgJiYgc2NscF9nZXRfaHNhX3NpemUoKSkgewotCQltZW1vcnlfZW5kID0gc2NscF9nZXRfaHNhX3NpemUoKTsKLQkJbWVtb3J5X2VuZF9zZXQgPSAxOwotCX0KLSNlbmRpZgotCW1lbW9yeV9lbmQgJj0gUEFHRV9NQVNLOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgYWxsIGNodW5rcyBhcmUgTUFYX09SREVSIGFsaWduZWQgc28gd2UgZG9uJ3QgbmVlZCB0aGUKLQkgKiBleHRyYSBjaGVja3MgdGhhdCBIT0xFU19JTl9aT05FIHdvdWxkIHJlcXVpcmUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Ci0JCXN0cnVjdCBtZW1fY2h1bmsgKmNodW5rOwotCQl1bnNpZ25lZCBsb25nIGFsaWduOwotCi0JCWNodW5rID0gJm1lbW9yeV9jaHVua1tpXTsKLQkJaWYgKCFjaHVuay0+c2l6ZSkKLQkJCWNvbnRpbnVlOwotCQlhbGlnbiA9IDFVTCA8PCAoTUFYX09SREVSICsgUEFHRV9TSElGVCAtIDEpOwotCQlzdGFydCA9IChjaHVuay0+YWRkciArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7Ci0JCWVuZCA9IChjaHVuay0+YWRkciArIGNodW5rLT5zaXplKSAmIH4oYWxpZ24gLSAxKTsKLQkJaWYgKHN0YXJ0ID49IGVuZCkKLQkJCW1lbXNldChjaHVuaywgMCwgc2l6ZW9mKCpjaHVuaykpOwotCQllbHNlIHsKLQkJCWNodW5rLT5hZGRyID0gc3RhcnQ7Ci0JCQljaHVuay0+c2l6ZSA9IGVuZCAtIHN0YXJ0OwotCQl9Ci0JCXJlYWxfbWVtb3J5X3NpemUgPSBtYXgocmVhbF9tZW1vcnlfc2l6ZSwKLQkJCQkgICAgICAgY2h1bmstPmFkZHIgKyBjaHVuay0+c2l6ZSk7Ci0JfQogCiAJLyogQ2hvb3NlIGtlcm5lbCBhZGRyZXNzIHNwYWNlIGxheW91dDogMiwgMywgb3IgNCBsZXZlbHMuICovCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJdm1hbGxvY19zaXplID0gVk1BTExPQ19FTkQgPzogKDEyOFVMIDw8IDMwKSAtIE1PRFVMRVNfTEVOOwotCXRtcCA9IChtZW1vcnlfZW5kID86IHJlYWxfbWVtb3J5X3NpemUpIC8gUEFHRV9TSVpFOworCXRtcCA9IChtZW1vcnlfZW5kID86IG1heF9waHlzbWVtX2VuZCkgLyBQQUdFX1NJWkU7CiAJdG1wID0gdG1wICogKHNpemVvZihzdHJ1Y3QgcGFnZSkgKyBQQUdFX1NJWkUpICsgdm1hbGxvY19zaXplOwogCWlmICh0bXAgPD0gKDFVTCA8PCA0MikpCiAJCXZtYXggPSAxVUwgPDwgNDI7CS8qIDMtbGV2ZWwga2VybmVsIHBhZ2UgdGFibGUgKi8KQEAgLTUyMCwyMSArNDc3LDExIEBACiAJdm1lbW1hcCA9IChzdHJ1Y3QgcGFnZSAqKSB0bXA7CiAKIAkvKiBUYWtlIGNhcmUgdGhhdCBtZW1vcnlfZW5kIGlzIHNldCBhbmQgPD0gdm1lbW1hcCAqLwotCW1lbW9yeV9lbmQgPSBtaW4obWVtb3J5X2VuZCA/OiByZWFsX21lbW9yeV9zaXplLCB0bXApOworCW1lbW9yeV9lbmQgPSBtaW4obWVtb3J5X2VuZCA/OiBtYXhfcGh5c21lbV9lbmQsIHRtcCk7CisJbWF4X3BmbiA9IG1heF9sb3dfcGZuID0gUEZOX0RPV04obWVtb3J5X2VuZCk7CisJbWVtYmxvY2tfcmVtb3ZlKG1lbW9yeV9lbmQsIFVMT05HX01BWCk7CiAKLQkvKiBGaXh1cCBtZW1vcnkgY2h1bmsgYXJyYXkgdG8gZml0IGludG8gMC4ubWVtb3J5X2VuZCAqLwotCWZvciAoaSA9IDA7IGkgPCBNRU1PUllfQ0hVTktTOyBpKyspIHsKLQkJc3RydWN0IG1lbV9jaHVuayAqY2h1bmsgPSAmbWVtb3J5X2NodW5rW2ldOwotCi0JCWlmICghY2h1bmstPnNpemUpCi0JCQljb250aW51ZTsKLQkJaWYgKGNodW5rLT5hZGRyID49IG1lbW9yeV9lbmQpIHsKLQkJCW1lbXNldChjaHVuaywgMCwgc2l6ZW9mKCpjaHVuaykpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNodW5rLT5hZGRyICsgY2h1bmstPnNpemUgPiBtZW1vcnlfZW5kKQotCQkJY2h1bmstPnNpemUgPSBtZW1vcnlfZW5kIC0gY2h1bmstPmFkZHI7Ci0JfQorCXByX25vdGljZSgiTWF4IG1lbW9yeSBzaXplOiAlbHVNQlxuIiwgbWVtb3J5X2VuZCA+PiAyMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92bWNvcmVpbmZvKHZvaWQpCkBAIC01NDUsODkgKzQ5Miw2IEBACiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIAogLyoKLSAqIEZpbmQgc3VpdGFibGUgbG9jYXRpb24gZm9yIGNyYXNoa2VybmVsIG1lbW9yeQotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9jcmFzaF9iYXNlKHVuc2lnbmVkIGxvbmcgY3Jhc2hfc2l6ZSwKLQkJCQkJICAgIGNoYXIgKiptc2cpCi17Ci0JdW5zaWduZWQgbG9uZyBjcmFzaF9iYXNlOwotCXN0cnVjdCBtZW1fY2h1bmsgKmNodW5rOwotCWludCBpOwotCi0JaWYgKG1lbW9yeV9jaHVua1swXS5zaXplIDwgY3Jhc2hfc2l6ZSkgewotCQkqbXNnID0gImZpcnN0IG1lbW9yeSBjaHVuayBtdXN0IGJlIGF0IGxlYXN0IGNyYXNoa2VybmVsIHNpemUiOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKE9MRE1FTV9CQVNFICYmIGNyYXNoX3NpemUgPT0gT0xETUVNX1NJWkUpCi0JCXJldHVybiBPTERNRU1fQkFTRTsKLQotCWZvciAoaSA9IE1FTU9SWV9DSFVOS1MgLSAxOyBpID49IDA7IGktLSkgewotCQljaHVuayA9ICZtZW1vcnlfY2h1bmtbaV07Ci0JCWlmIChjaHVuay0+c2l6ZSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlmIChjaHVuay0+dHlwZSAhPSBDSFVOS19SRUFEX1dSSVRFKQotCQkJY29udGludWU7Ci0JCWlmIChjaHVuay0+c2l6ZSA8IGNyYXNoX3NpemUpCi0JCQljb250aW51ZTsKLQkJY3Jhc2hfYmFzZSA9IChjaHVuay0+YWRkciArIGNodW5rLT5zaXplKSAtIGNyYXNoX3NpemU7Ci0JCWlmIChjcmFzaF9iYXNlIDwgY3Jhc2hfc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoY3Jhc2hfYmFzZSA8IHNjbHBfZ2V0X2hzYV9zaXplKCkpCi0JCQljb250aW51ZTsKLQkJaWYgKGNyYXNoX2Jhc2UgPCAodW5zaWduZWQgbG9uZykgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIGNyYXNoX2Jhc2U7Ci0JfQotCSptc2cgPSAibm8gc3VpdGFibGUgYXJlYSBmb3VuZCI7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiBjcmFzaF9iYXNlIGFuZCBjcmFzaF9zaXplIGlzIHZhbGlkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHZlcmlmeV9jcmFzaF9iYXNlKHVuc2lnbmVkIGxvbmcgY3Jhc2hfYmFzZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBjcmFzaF9zaXplLAotCQkJCSAgICBjaGFyICoqbXNnKQotewotCXN0cnVjdCBtZW1fY2h1bmsgKmNodW5rOwotCWludCBpOwotCi0JLyoKLQkgKiBCZWNhdXNlIHdlIGRvIHRoZSBzd2FwIHRvIHplcm8sIHdlIG11c3QgaGF2ZSBhdCBsZWFzdCAnY3Jhc2hfc2l6ZScKLQkgKiBieXRlcyBmcmVlIHNwYWNlIGJlZm9yZSBjcmFzaF9iYXNlCi0JICovCi0JaWYgKGNyYXNoX3NpemUgPiBjcmFzaF9iYXNlKSB7Ci0JCSptc2cgPSAiY3Jhc2hrZXJuZWwgb2Zmc2V0IG11c3QgYmUgZ3JlYXRlciB0aGFuIHNpemUiOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBGaXJzdCBtZW1vcnkgY2h1bmsgbXVzdCBiZSBhdCBsZWFzdCBjcmFzaF9zaXplICovCi0JaWYgKG1lbW9yeV9jaHVua1swXS5zaXplIDwgY3Jhc2hfc2l6ZSkgewotCQkqbXNnID0gImZpcnN0IG1lbW9yeSBjaHVuayBtdXN0IGJlIGF0IGxlYXN0IGNyYXNoa2VybmVsIHNpemUiOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyogQ2hlY2sgaWYgd2UgZml0IGludG8gdGhlIHJlc3BlY3RpdmUgbWVtb3J5IGNodW5rICovCi0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQljaHVuayA9ICZtZW1vcnlfY2h1bmtbaV07Ci0JCWlmIChjaHVuay0+c2l6ZSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlmIChjcmFzaF9iYXNlIDwgY2h1bmstPmFkZHIpCi0JCQljb250aW51ZTsKLQkJaWYgKGNyYXNoX2Jhc2UgPj0gY2h1bmstPmFkZHIgKyBjaHVuay0+c2l6ZSkKLQkJCWNvbnRpbnVlOwotCQkvKiB3ZSBoYXZlIGZvdW5kIHRoZSBtZW1vcnkgY2h1bmsgKi8KLQkJaWYgKGNyYXNoX2Jhc2UgKyBjcmFzaF9zaXplID4gY2h1bmstPmFkZHIgKyBjaHVuay0+c2l6ZSkgewotCQkJKm1zZyA9ICJzZWxlY3RlZCBtZW1vcnkgY2h1bmsgaXMgdG9vIHNtYWxsIGZvciAiCi0JCQkJImNyYXNoa2VybmVsIG1lbW9yeSI7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JKm1zZyA9ICJpbnZhbGlkIG1lbW9yeSByYW5nZSBzcGVjaWZpZWQiOwotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKgogICogV2hlbiBrZHVtcCBpcyBlbmFibGVkLCB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IG5vIG1lbW9yeSBmcm9tCiAgKiB0aGUgYXJlYSBbMCAtIGNyYXNoa2VybmVsIG1lbW9yeSBzaXplXSBhbmQKICAqIFtjcmFzaGtfcmVzLnN0YXJ0IC0gY3Jhc2hrX3Jlcy5lbmRdIGlzIHNldCBvZmZsaW5lLgpAQCAtNjUzLDIzICs1MTcsNDQgQEAKICNlbmRpZgogCiAvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIGFyZWEgYmVoaW5kIG1lbW9yeV9lbmQgaXMgcHJvdGVjdGVkCisgKi8KK3N0YXRpYyB2b2lkIHJlc2VydmVfbWVtb3J5X2VuZCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCisJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQX0RVTVAgJiYKKwkgICAgIU9MRE1FTV9CQVNFICYmIHNjbHBfZ2V0X2hzYV9zaXplKCkpIHsKKwkJbWVtb3J5X2VuZCA9IHNjbHBfZ2V0X2hzYV9zaXplKCk7CisJCW1lbW9yeV9lbmQgJj0gUEFHRV9NQVNLOworCQltZW1vcnlfZW5kX3NldCA9IDE7CisJfQorI2VuZGlmCisJaWYgKCFtZW1vcnlfZW5kX3NldCkKKwkJcmV0dXJuOworCW1lbWJsb2NrX3Jlc2VydmUobWVtb3J5X2VuZCwgVUxPTkdfTUFYKTsKK30KKworLyoKICAqIE1ha2Ugc3VyZSB0aGF0IG9sZG1lbSwgd2hlcmUgdGhlIGR1bXAgaXMgc3RvcmVkLCBpcyBwcm90ZWN0ZWQKICAqLwogc3RhdGljIHZvaWQgcmVzZXJ2ZV9vbGRtZW0odm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAotCXVuc2lnbmVkIGxvbmcgcmVhbF9zaXplID0gMDsKLQlpbnQgaTsKKwlpZiAoT0xETUVNX0JBU0UpCisJCS8qIEZvcmdldCBhbGwgbWVtb3J5IGFib3ZlIHRoZSBydW5uaW5nIGtkdW1wIHN5c3RlbSAqLworCQltZW1ibG9ja19yZXNlcnZlKE9MRE1FTV9TSVpFLCAocGh5c19hZGRyX3QpVUxPTkdfTUFYKTsKKyNlbmRpZgorfQogCi0JaWYgKCFPTERNRU1fQkFTRSkKLQkJcmV0dXJuOwotCWZvciAoaSA9IDA7IGkgPCBNRU1PUllfQ0hVTktTOyBpKyspIHsKLQkJc3RydWN0IG1lbV9jaHVuayAqY2h1bmsgPSAmbWVtb3J5X2NodW5rW2ldOwotCi0JCXJlYWxfc2l6ZSA9IG1heChyZWFsX3NpemUsIGNodW5rLT5hZGRyICsgY2h1bmstPnNpemUpOwotCX0KLQljcmVhdGVfbWVtX2hvbGUobWVtb3J5X2NodW5rLCBPTERNRU1fQkFTRSwgT0xETUVNX1NJWkUpOwotCWNyZWF0ZV9tZW1faG9sZShtZW1vcnlfY2h1bmssIE9MRE1FTV9TSVpFLCByZWFsX3NpemUgLSBPTERNRU1fU0laRSk7CisvKgorICogTWFrZSBzdXJlIHRoYXQgb2xkbWVtLCB3aGVyZSB0aGUgZHVtcCBpcyBzdG9yZWQsIGlzIHByb3RlY3RlZAorICovCitzdGF0aWMgdm9pZCByZW1vdmVfb2xkbWVtKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlpZiAoT0xETUVNX0JBU0UpCisJCS8qIEZvcmdldCBhbGwgbWVtb3J5IGFib3ZlIHRoZSBydW5uaW5nIGtkdW1wIHN5c3RlbSAqLworCQltZW1ibG9ja19yZW1vdmUoT0xETUVNX1NJWkUsIChwaHlzX2FkZHJfdClVTE9OR19NQVgpOwogI2VuZGlmCiB9CiAKQEAgLTY4MCwxNjcgKzU2NSwxMzIgQEAKIHsKICNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogCXVuc2lnbmVkIGxvbmcgbG9uZyBjcmFzaF9iYXNlLCBjcmFzaF9zaXplOwotCWNoYXIgKm1zZyA9IE5VTEw7CisJcGh5c19hZGRyX3QgbG93LCBoaWdoOwogCWludCByYzsKIAogCXJjID0gcGFyc2VfY3Jhc2hrZXJuZWwoYm9vdF9jb21tYW5kX2xpbmUsIG1lbW9yeV9lbmQsICZjcmFzaF9zaXplLAogCQkJICAgICAgICZjcmFzaF9iYXNlKTsKLQlpZiAocmMgfHwgY3Jhc2hfc2l6ZSA9PSAwKQotCQlyZXR1cm47CisKIAljcmFzaF9iYXNlID0gQUxJR04oY3Jhc2hfYmFzZSwgS0VYRUNfQ1JBU0hfTUVNX0FMSUdOKTsKIAljcmFzaF9zaXplID0gQUxJR04oY3Jhc2hfc2l6ZSwgS0VYRUNfQ1JBU0hfTUVNX0FMSUdOKTsKKwlpZiAocmMgfHwgY3Jhc2hfc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAobWVtYmxvY2subWVtb3J5LnJlZ2lvbnNbMF0uc2l6ZSA8IGNyYXNoX3NpemUpIHsKKwkJcHJfaW5mbygiY3Jhc2hrZXJuZWwgcmVzZXJ2YXRpb24gZmFpbGVkOiAlc1xuIiwKKwkJCSJmaXJzdCBtZW1vcnkgY2h1bmsgbXVzdCBiZSBhdCBsZWFzdCBjcmFzaGtlcm5lbCBzaXplIik7CisJCXJldHVybjsKKwl9CisKKwlsb3cgPSBjcmFzaF9iYXNlID86IE9MRE1FTV9CQVNFOworCWhpZ2ggPSBsb3cgKyBjcmFzaF9zaXplOworCWlmIChsb3cgPj0gT0xETUVNX0JBU0UgJiYgaGlnaCA8PSBPTERNRU1fQkFTRSArIE9MRE1FTV9TSVpFKSB7CisJCS8qIFRoZSBjcmFzaGtlcm5lbCBmaXRzIGludG8gT0xETUVNLCByZXVzZSBPTERNRU0gKi8KKwkJY3Jhc2hfYmFzZSA9IGxvdzsKKwl9IGVsc2UgeworCQkvKiBGaW5kIHN1aXRhYmxlIGFyZWEgaW4gZnJlZSBtZW1vcnkgKi8KKwkJbG93ID0gbWF4X3QodW5zaWduZWQgbG9uZywgY3Jhc2hfc2l6ZSwgc2NscF9nZXRfaHNhX3NpemUoKSk7CisJCWhpZ2ggPSBjcmFzaF9iYXNlID8gY3Jhc2hfYmFzZSArIGNyYXNoX3NpemUgOiBVTE9OR19NQVg7CisKKwkJaWYgKGNyYXNoX2Jhc2UgJiYgY3Jhc2hfYmFzZSA8IGxvdykgeworCQkJcHJfaW5mbygiY3Jhc2hrZXJuZWwgcmVzZXJ2YXRpb24gZmFpbGVkOiAlc1xuIiwKKwkJCQkiY3Jhc2hfYmFzZSB0b28gbG93Iik7CisJCQlyZXR1cm47CisJCX0KKwkJbG93ID0gY3Jhc2hfYmFzZSA/OiBsb3c7CisJCWNyYXNoX2Jhc2UgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKGxvdywgaGlnaCwgY3Jhc2hfc2l6ZSwKKwkJCQkJCSAgICBLRVhFQ19DUkFTSF9NRU1fQUxJR04pOworCX0KKworCWlmICghY3Jhc2hfYmFzZSkgeworCQlwcl9pbmZvKCJjcmFzaGtlcm5lbCByZXNlcnZhdGlvbiBmYWlsZWQ6ICVzXG4iLAorCQkJIm5vIHN1aXRhYmxlIGFyZWEgZm91bmQiKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChyZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmtkdW1wX21lbV9uYikpCiAJCXJldHVybjsKLQlpZiAoIWNyYXNoX2Jhc2UpCi0JCWNyYXNoX2Jhc2UgPSBmaW5kX2NyYXNoX2Jhc2UoY3Jhc2hfc2l6ZSwgJm1zZyk7Ci0JaWYgKCFjcmFzaF9iYXNlKSB7Ci0JCXByX2luZm8oImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZDogJXNcbiIsIG1zZyk7Ci0JCXVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZrZHVtcF9tZW1fbmIpOwotCQlyZXR1cm47Ci0JfQotCWlmICh2ZXJpZnlfY3Jhc2hfYmFzZShjcmFzaF9iYXNlLCBjcmFzaF9zaXplLCAmbXNnKSkgewotCQlwcl9pbmZvKCJjcmFzaGtlcm5lbCByZXNlcnZhdGlvbiBmYWlsZWQ6ICVzXG4iLCBtc2cpOwotCQl1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcigma2R1bXBfbWVtX25iKTsKLQkJcmV0dXJuOwotCX0KKwogCWlmICghT0xETUVNX0JBU0UgJiYgTUFDSElORV9JU19WTSkKIAkJZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoX2Jhc2UpLCBQRk5fRE9XTihjcmFzaF9zaXplKSk7CiAJY3Jhc2hrX3Jlcy5zdGFydCA9IGNyYXNoX2Jhc2U7CiAJY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaF9iYXNlICsgY3Jhc2hfc2l6ZSAtIDE7CiAJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmNyYXNoa19yZXMpOwotCWNyZWF0ZV9tZW1faG9sZShtZW1vcnlfY2h1bmssIGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUpOworCW1lbWJsb2NrX3JlbW92ZShjcmFzaF9iYXNlLCBjcmFzaF9zaXplKTsKIAlwcl9pbmZvKCJSZXNlcnZpbmcgJWxsdU1CIG9mIG1lbW9yeSBhdCAlbGx1TUIgIgogCQkiZm9yIGNyYXNoa2VybmVsIChTeXN0ZW0gUkFNOiAlbHVNQilcbiIsCi0JCWNyYXNoX3NpemUgPj4gMjAsIGNyYXNoX2Jhc2UgPj4gMjAsIG1lbW9yeV9lbmQgPj4gMjApOworCQljcmFzaF9zaXplID4+IDIwLCBjcmFzaF9iYXNlID4+IDIwLAorCQkodW5zaWduZWQgbG9uZyltZW1ibG9jay5tZW1vcnkudG90YWxfc2l6ZSA+PiAyMCk7CiAJb3NfaW5mb19jcmFzaGtlcm5lbF9hZGQoY3Jhc2hfYmFzZSwgY3Jhc2hfc2l6ZSk7CiAjZW5kaWYKIH0KIAorLyoKKyAqIFJlc2VydmUgdGhlIGluaXRyZCBmcm9tIGJlaW5nIHVzZWQgYnkgbWVtYmxvY2sKKyAqLworc3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfaW5pdHJkKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaW5pdHJkX3N0YXJ0ID0gSU5JVFJEX1NUQVJUOworCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBJTklUUkRfU0laRTsKKwltZW1ibG9ja19yZXNlcnZlKElOSVRSRF9TVEFSVCwgSU5JVFJEX1NJWkUpOworI2VuZGlmCit9CisKKy8qCisgKiBDaGVjayBmb3IgaW5pdHJkIGJlaW5nIGluIHVzYWJsZSBtZW1vcnkKKyAqLworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2luaXRyZCh2b2lkKQoreworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChJTklUUkRfU1RBUlQgJiYgSU5JVFJEX1NJWkUgJiYKKwkgICAgIW1lbWJsb2NrX2lzX3JlZ2lvbl9tZW1vcnkoSU5JVFJEX1NUQVJULCBJTklUUkRfU0laRSkpIHsKKwkJcHJfZXJyKCJpbml0cmQgZG9lcyBub3QgZml0IG1lbW9yeS5cbiIpOworCQltZW1ibG9ja19mcmVlKElOSVRSRF9TVEFSVCwgSU5JVFJEX1NJWkUpOworCQlpbml0cmRfc3RhcnQgPSBpbml0cmRfZW5kID0gMDsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIFJlc2VydmUgYWxsIGtlcm5lbCB0ZXh0CisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2tlcm5lbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOworCXN0YXJ0X3BmbiA9IFBGTl9VUChfX3BhKCZfZW5kKSk7CisKKwkvKgorCSAqIFJlc2VydmUgbWVtb3J5IHVzZWQgZm9yIGxvd2NvcmUvY29tbWFuZCBsaW5lL2tlcm5lbCBpbWFnZS4KKwkgKi8KKwltZW1ibG9ja19yZXNlcnZlKDAsICh1bnNpZ25lZCBsb25nKV9laGVhZCk7CisJbWVtYmxvY2tfcmVzZXJ2ZSgodW5zaWduZWQgbG9uZylfc3RleHQsIFBGTl9QSFlTKHN0YXJ0X3BmbikKKwkJCSAtICh1bnNpZ25lZCBsb25nKV9zdGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2VsZmNvcmVoZHIodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAorCWlmIChpc19rZHVtcF9rZXJuZWwoKSkKKwkJbWVtYmxvY2tfcmVzZXJ2ZShlbGZjb3JlaGRyX2FkZHIgLSBPTERNRU1fQkFTRSwKKwkJCQkgUEFHRV9BTElHTihlbGZjb3JlaGRyX3NpemUpKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbWVtb3J5KHZvaWQpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCWludCBpOworCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZzsKIAogCS8qCi0JICogcGFydGlhbGx5IHVzZWQgcGFnZXMgYXJlIG5vdCB1c2FibGUgLSB0aHVzCi0JICogd2UgYXJlIHJvdW5kaW5nIHVwd2FyZHM6CisJICogSW5pdCBzdG9yYWdlIGtleSBmb3IgcHJlc2VudCBtZW1vcnkKIAkgKi8KLQlzdGFydF9wZm4gPSBQRk5fVVAoX19wYSgmX2VuZCkpOwotCWVuZF9wZm4gPSBtYXhfcGZuID0gUEZOX0RPV04obWVtb3J5X2VuZCk7Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkvKgotCSAqIE1vdmUgdGhlIGluaXRyZCBpbiBjYXNlIHRoZSBiaXRtYXAgb2YgdGhlIGJvb3RtZW0gYWxsb2NhdGVyCi0JICogd291bGQgb3ZlcndyaXRlIGl0LgotCSAqLwotCi0JaWYgKElOSVRSRF9TVEFSVCAmJiBJTklUUkRfU0laRSkgewotCQl1bnNpZ25lZCBsb25nIGJtYXBfc2l6ZTsKLQkJdW5zaWduZWQgbG9uZyBzdGFydDsKLQotCQlibWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoZW5kX3BmbiAtIHN0YXJ0X3BmbiArIDEpOwotCQlibWFwX3NpemUgPSBQRk5fUEhZUyhibWFwX3NpemUpOwotCi0JCWlmIChQRk5fUEhZUyhzdGFydF9wZm4pICsgYm1hcF9zaXplID4gSU5JVFJEX1NUQVJUKSB7Ci0JCQlzdGFydCA9IFBGTl9QSFlTKHN0YXJ0X3BmbikgKyBibWFwX3NpemUgKyBQQUdFX1NJWkU7Ci0KLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAotCQkJaWYgKE9MRE1FTV9CQVNFKSB7Ci0JCQkJLyogTW92ZSBpbml0cmQgYmVoaW5kIGtkdW1wIG9sZG1lbSAqLwotCQkJCWlmIChzdGFydCArIElOSVRSRF9TSVpFID4gT0xETUVNX0JBU0UgJiYKLQkJCQkgICAgc3RhcnQgPCBPTERNRU1fQkFTRSArIE9MRE1FTV9TSVpFKQotCQkJCQlzdGFydCA9IE9MRE1FTV9CQVNFICsgT0xETUVNX1NJWkU7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChzdGFydCArIElOSVRSRF9TSVpFID4gbWVtb3J5X2VuZCkgewotCQkJCXByX2VycigiaW5pdHJkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiAiCi0JCQkJICAgICAgICJtZW1vcnkgKDB4JTA4bHggPiAweCUwOGx4KSAiCi0JCQkJICAgICAgICJkaXNhYmxpbmcgaW5pdHJkXG4iLAotCQkJCSAgICAgICBzdGFydCArIElOSVRSRF9TSVpFLCBtZW1vcnlfZW5kKTsKLQkJCQlJTklUUkRfU1RBUlQgPSBJTklUUkRfU0laRSA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCXByX2luZm8oIk1vdmluZyBpbml0cmQgKDB4JTA4bHggLT4gIgotCQkJCQkiMHglMDhseCwgc2l6ZTogJWxkKVxuIiwKLQkJCQkJSU5JVFJEX1NUQVJULCBzdGFydCwgSU5JVFJEX1NJWkUpOwotCQkJCW1lbW1vdmUoKHZvaWQgKikgc3RhcnQsICh2b2lkICopIElOSVRSRF9TVEFSVCwKLQkJCQkJSU5JVFJEX1NJWkUpOwotCQkJCUlOSVRSRF9TVEFSVCA9IHN0YXJ0OwotCQkJfQotCQl9CisJZm9yX2VhY2hfbWVtYmxvY2sobWVtb3J5LCByZWcpIHsKKwkJc3RvcmFnZV9rZXlfaW5pdF9yYW5nZShyZWctPmJhc2UsIHJlZy0+YmFzZSArIHJlZy0+c2l6ZSk7CiAJfQotI2VuZGlmCi0KLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IKLQkgKi8KLQlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oc3RhcnRfcGZuLCBlbmRfcGZuKTsKLQotCS8qCi0JICogUmVnaXN0ZXIgUkFNIGFyZWFzIHdpdGggdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgotCSAqLwotCi0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2NodW5rLCBlbmRfY2h1bmssIHBmbjsKLQotCQlpZiAoIW1lbW9yeV9jaHVua1tpXS5zaXplKQotCQkJY29udGludWU7Ci0JCXN0YXJ0X2NodW5rID0gUEZOX0RPV04obWVtb3J5X2NodW5rW2ldLmFkZHIpOwotCQllbmRfY2h1bmsgPSBzdGFydF9jaHVuayArIFBGTl9ET1dOKG1lbW9yeV9jaHVua1tpXS5zaXplKTsKLQkJZW5kX2NodW5rID0gbWluKGVuZF9jaHVuaywgZW5kX3Bmbik7Ci0JCWlmIChzdGFydF9jaHVuayA+PSBlbmRfY2h1bmspCi0JCQljb250aW51ZTsKLQkJbWVtYmxvY2tfYWRkX25vZGUoUEZOX1BIWVMoc3RhcnRfY2h1bmspLAotCQkJCSAgUEZOX1BIWVMoZW5kX2NodW5rIC0gc3RhcnRfY2h1bmspLCAwKTsKLQkJcGZuID0gbWF4KHN0YXJ0X2NodW5rLCBzdGFydF9wZm4pOwotCQlzdG9yYWdlX2tleV9pbml0X3JhbmdlKFBGTl9QSFlTKHBmbiksIFBGTl9QSFlTKGVuZF9jaHVuaykpOwotCX0KLQogCXBzd19zZXRfa2V5KFBBR0VfREVGQVVMVF9LRVkpOwogCi0JZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCwgbWF4X3Bmbik7Ci0KLQkvKgotCSAqIFJlc2VydmUgbWVtb3J5IHVzZWQgZm9yIGxvd2NvcmUvY29tbWFuZCBsaW5lL2tlcm5lbCBpbWFnZS4KLQkgKi8KLQlyZXNlcnZlX2Jvb3RtZW0oMCwgKHVuc2lnbmVkIGxvbmcpX2VoZWFkLCBCT09UTUVNX0RFRkFVTFQpOwotCXJlc2VydmVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylfc3RleHQsCi0JCQlQRk5fUEhZUyhzdGFydF9wZm4pIC0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0LAotCQkJQk9PVE1FTV9ERUZBVUxUKTsKLQkvKgotCSAqIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwIGl0c2VsZiBhcyB3ZWxsLiBXZSBkbyB0aGlzIGluIHR3bwotCSAqIHN0ZXBzIChmaXJzdCBzdGVwIHdhcyBpbml0X2Jvb3RtZW0oKSkgYmVjYXVzZSB0aGlzIGNhdGNoZXMKLQkgKiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdXMgYWNjaWRlbnRhbGx5IGluaXRpYWxpemluZyB0aGUKLQkgKiBib290bWVtIGFsbG9jYXRvciB3aXRoIGFuIGludmFsaWQgUkFNIGFyZWEuCi0JICovCi0JcmVzZXJ2ZV9ib290bWVtKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBib290bWFwX3NpemUsCi0JCQlCT09UTUVNX0RFRkFVTFQpOwotCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlpZiAoY3Jhc2hrX3Jlcy5zdGFydCkKLQkJcmVzZXJ2ZV9ib290bWVtKGNyYXNoa19yZXMuc3RhcnQsCi0JCQkJY3Jhc2hrX3Jlcy5lbmQgLSBjcmFzaGtfcmVzLnN0YXJ0ICsgMSwKLQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCWlmIChpc19rZHVtcF9rZXJuZWwoKSkKLQkJcmVzZXJ2ZV9ib290bWVtKGVsZmNvcmVoZHJfYWRkciAtIE9MRE1FTV9CQVNFLAotCQkJCVBBR0VfQUxJR04oZWxmY29yZWhkcl9zaXplKSwgQk9PVE1FTV9ERUZBVUxUKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCWlmIChJTklUUkRfU1RBUlQgJiYgSU5JVFJEX1NJWkUpIHsKLQkJaWYgKElOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFIDw9IG1lbW9yeV9lbmQpIHsKLQkJCXJlc2VydmVfYm9vdG1lbShJTklUUkRfU1RBUlQsIElOSVRSRF9TSVpFLAotCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCQkJaW5pdHJkX3N0YXJ0ID0gSU5JVFJEX1NUQVJUOwotCQkJaW5pdHJkX2VuZCA9IGluaXRyZF9zdGFydCArIElOSVRSRF9TSVpFOwotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mICIKLQkJCSAgICAgICAibWVtb3J5ICgweCUwOGx4ID4gMHglMDhseCkgIgotCQkJICAgICAgICJkaXNhYmxpbmcgaW5pdHJkXG4iLAotCQkJICAgICAgIGluaXRyZF9zdGFydCArIElOSVRSRF9TSVpFLCBtZW1vcnlfZW5kKTsKLQkJCWluaXRyZF9zdGFydCA9IGluaXRyZF9lbmQgPSAwOwotCQl9Ci0JfQotI2VuZGlmCisJLyogT25seSBjb3NtZXRpY3MgKi8KKwltZW1ibG9ja19lbmZvcmNlX21lbW9yeV9saW1pdChtZW1ibG9ja19lbmRfb2ZfRFJBTSgpKTsKIH0KIAogLyoKQEAgLTk4OSwyMyArODM5LDQ2IEBACiAKICAgICAgICAgUk9PVF9ERVYgPSBSb290X1JBTTA7CiAKKwkvKiBJcyBpbml0X21tIHJlYWxseSBuZWVkZWQ/ICovCiAJaW5pdF9tbS5zdGFydF9jb2RlID0gUEFHRV9PRkZTRVQ7CiAJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwogCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJl9lZGF0YTsKIAlpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsKIAogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7Ci0JZGV0ZWN0X21lbW9yeV9sYXlvdXQobWVtb3J5X2NodW5rLCBtZW1vcnlfZW5kKTsKIAlvc19pbmZvX2luaXQoKTsKIAlzZXR1cF9pcGwoKTsKKworCS8qIERvIHNvbWUgbWVtb3J5IHJlc2VydmF0aW9ucyAqYmVmb3JlKiBtZW1vcnkgaXMgYWRkZWQgdG8gbWVtYmxvY2sgKi8KKwlyZXNlcnZlX21lbW9yeV9lbmQoKTsKIAlyZXNlcnZlX29sZG1lbSgpOworCXJlc2VydmVfa2VybmVsKCk7CisJcmVzZXJ2ZV9pbml0cmQoKTsKKwlyZXNlcnZlX2VsZmNvcmVoZHIoKTsKKwltZW1ibG9ja19hbGxvd19yZXNpemUoKTsKKworCS8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCAqYWxsKiBpbnN0YWxsZWQgbWVtb3J5ICovCisJZGV0ZWN0X21lbW9yeV9tZW1ibG9jaygpOworCisJcmVtb3ZlX29sZG1lbSgpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIGNodW5rcyBhcmUgTUFYX09SREVSIGFsaWduZWQgc28gd2UgZG9uJ3QgbmVlZCB0aGUKKwkgKiBleHRyYSBjaGVja3MgdGhhdCBIT0xFU19JTl9aT05FIHdvdWxkIHJlcXVpcmUuCisJICoKKwkgKiBJcyB0aGlzIHN0aWxsIHJlcXVpcmVkPworCSAqLworCW1lbWJsb2NrX3RyaW1fbWVtb3J5KDFVTCA8PCAoTUFYX09SREVSIC0gMSArIFBBR0VfU0hJRlQpKTsKKwogCXNldHVwX21lbW9yeV9lbmQoKTsKLQlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CiAJc2V0dXBfbWVtb3J5KCk7CisKKwljaGVja19pbml0cmQoKTsKKwlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CisKIAlzZXR1cF9yZXNvdXJjZXMoKTsKIAlzZXR1cF92bWNvcmVpbmZvKCk7CiAJc2V0dXBfbG93Y29yZSgpOwotCiAJc21wX2ZpbGxfcG9zc2libGVfbWFzaygpOwogICAgICAgICBjcHVfaW5pdCgpOwogCXMzOTBfaW5pdF9jcHVfdG9wb2xvZ3koKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCmluZGV4IGQ4ZmQ1MDguLjQyYjQ5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJICAgICAgIHNpemVvZihjdXJyZW50LT50aHJlYWQuZnBfcmVncykpOwogCiAJcmVzdG9yZV9mcF9yZWdzKGN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLmZwcnMpOwotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMKTsJLyogTm8gbG9uZ2VyIGluIGEgc3lzdGVtIGNhbGwgKi8KKwljbGVhcl9wdF9yZWdzX2ZsYWcocmVncywgUElGX1NZU0NBTEwpOyAvKiBObyBsb25nZXIgaW4gYSBzeXN0ZW0gY2FsbCAqLwogCXJldHVybiAwOwogfQogCkBAIC0zNTYsNyArMzU2LDcgQEAKIAkgKiBjYWxsIGluZm9ybWF0aW9uLgogCSAqLwogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3lzdGVtX2NhbGwgPQotCQl0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMKSA/IHJlZ3MtPmludF9jb2RlIDogMDsKKwkJdGVzdF9wdF9yZWdzX2ZsYWcocmVncywgUElGX1NZU0NBTEwpID8gcmVncy0+aW50X2NvZGUgOiAwOwogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOwogCiAJaWYgKHNpZ25yID4gMCkgewpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCQl9CiAJCX0KIAkJLyogTm8gbG9uZ2VyIGluIGEgc3lzdGVtIGNhbGwgKi8KLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTEwpOworCQljbGVhcl9wdF9yZWdzX2ZsYWcocmVncywgUElGX1NZU0NBTEwpOwogCiAJCWlmIChpc19jb21wYXRfdGFzaygpKQogCQkJaGFuZGxlX3NpZ25hbDMyKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MpOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJfQogCiAJLyogTm8gaGFuZGxlcnMgcHJlc2VudCAtIGNoZWNrIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0ICovCi0JY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTEwpOworCWNsZWFyX3B0X3JlZ3NfZmxhZyhyZWdzLCBQSUZfU1lTQ0FMTCk7CiAJaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3lzdGVtX2NhbGwpIHsKIAkJcmVncy0+aW50X2NvZGUgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnN5c3RlbV9jYWxsOwogCQlzd2l0Y2ggKHJlZ3MtPmdwcnNbMl0pIHsKQEAgLTQwNyw5ICs0MDcsOSBAQAogCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKIAkJCS8qIFJlc3RhcnQgc3lzdGVtIGNhbGwgd2l0aCBtYWdpYyBUSUYgYml0LiAqLwogCQkJcmVncy0+Z3Byc1syXSA9IHJlZ3MtPm9yaWdfZ3ByMjsKLQkJCXNldF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTCk7CisJCQlzZXRfcHRfcmVnc19mbGFnKHJlZ3MsIFBJRl9TWVNDQUxMKTsKIAkJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVfU1RFUCkpCi0JCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QRVJfVFJBUCk7CisJCQkJY2xlYXJfcHRfcmVnc19mbGFnKHJlZ3MsIFBJRl9QRVJfVFJBUCk7CiAJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDg2ZTY1ZWMuLjI0M2M3ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMTcwLDYgKzE3MCw3IEBACiAJbGMtPnBhbmljX3N0YWNrID0gcGNwdS0+cGFuaWNfc3RhY2sgKyBQQUdFX1NJWkUKIAkJLSBTVEFDS19GUkFNRV9PVkVSSEVBRCAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncyk7CiAJbGMtPmNwdV9uciA9IGNwdTsKKwlsYy0+c3BpbmxvY2tfbG9ja3ZhbCA9IGFyY2hfc3Bpbl9sb2NrdmFsKGNwdSk7CiAjaWZuZGVmIENPTkZJR182NEJJVAogCWlmIChNQUNISU5FX0hBU19JRUVFKSB7CiAJCWxjLT5leHRlbmRlZF9zYXZlX2FyZWFfYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKQEAgLTIyNiw2ICsyMjcsNyBAQAogCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2soJmluaXRfbW0pKTsKIAlhdG9taWNfaW5jKCZpbml0X21tLmNvbnRleHQuYXR0YWNoX2NvdW50KTsKIAlsYy0+Y3B1X25yID0gY3B1OworCWxjLT5zcGlubG9ja19sb2NrdmFsID0gYXJjaF9zcGluX2xvY2t2YWwoY3B1KTsKIAlsYy0+cGVyY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKIAlsYy0+a2VybmVsX2FzY2UgPSBTMzkwX2xvd2NvcmUua2VybmVsX2FzY2U7CiAJbGMtPm1hY2hpbmVfZmxhZ3MgPSBTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFnczsKQEAgLTQwMywxNSArNDA1LDYgQEAKIH0KIAogLyoKLSAqIFN0b3AgdGhlIGN1cnJlbnQgY3B1LgotICovCi12b2lkIHNtcF9zdG9wX2NwdSh2b2lkKQotewotCXBjcHVfc2lncF9yZXRyeShwY3B1X2RldmljZXMgKyBzbXBfcHJvY2Vzc29yX2lkKCksIFNJR1BfU1RPUCwgMCk7Ci0JZm9yICg7OykgOwotfQotCi0vKgogICogVGhpcyBpcyB0aGUgbWFpbiByb3V0aW5lIHdoZXJlIGNvbW1hbmRzIGlzc3VlZCBieSBvdGhlcgogICogY3B1cyBhcmUgaGFuZGxlZC4KICAqLwpAQCAtNTE5LDcgKzUxMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNtcF9jdGxfY2xlYXJfYml0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19DUkFTSF9EVU1QKQorI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfZ2V0X3NhdmVfYXJlYShpbnQgY3B1LCB1MTYgYWRkcmVzcykKIHsKQEAgLTUzNCwxNCArNTI3LDEyIEBACiAJc2F2ZV9hcmVhID0gZHVtcF9zYXZlX2FyZWFfY3JlYXRlKGNwdSk7CiAJaWYgKCFzYXZlX2FyZWEpCiAJCXBhbmljKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzYXZlIGFyZWFcbiIpOwotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAJaWYgKGFkZHJlc3MgPT0gYm9vdF9jcHVfYWRkcmVzcykgewogCQkvKiBDb3B5IHRoZSByZWdpc3RlcnMgb2YgdGhlIGJvb3QgY3B1LiAqLwogCQljb3B5X29sZG1lbV9wYWdlKDEsICh2b2lkICopIHNhdmVfYXJlYSwgc2l6ZW9mKCpzYXZlX2FyZWEpLAogCQkJCSBTQVZFX0FSRUFfQkFTRSAtIFBBR0VfU0laRSwgMCk7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKIAkvKiBHZXQgdGhlIHJlZ2lzdGVycyBvZiBhIG5vbi1ib290IGNwdS4gKi8KIAlfX3BjcHVfc2lncF9yZWxheChhZGRyZXNzLCBTSUdQX1NUT1BfQU5EX1NUT1JFX1NUQVRVUywgMCwgTlVMTCk7CiAJbWVtY3B5X3JlYWwoc2F2ZV9hcmVhLCBsYyArIFNBVkVfQVJFQV9CQVNFLCBzaXplb2YoKnNhdmVfYXJlYSkpOwpAQCAtNTU4LDExICs1NDksMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UgLyogQ09ORklHX1pGQ1BEVU1QIHx8IENPTkZJR19DUkFTSF9EVU1QICovCisjZWxzZSAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc21wX2dldF9zYXZlX2FyZWEoaW50IGNwdSwgdTE2IGFkZHJlc3MpIHsgfQogCi0jZW5kaWYgLyogQ09ORklHX1pGQ1BEVU1QIHx8IENPTkZJR19DUkFTSF9EVU1QICovCisjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi8KIAogdm9pZCBzbXBfY3B1X3NldF9wb2xhcml6YXRpb24oaW50IGNwdSwgaW50IHZhbCkKIHsKQEAgLTgwOSw2ICs4MDAsNyBAQAogdm9pZCBfX2luaXQgc21wX3NldHVwX3Byb2Nlc3Nvcl9pZCh2b2lkKQogewogCVMzOTBfbG93Y29yZS5jcHVfbnIgPSAwOworCVMzOTBfbG93Y29yZS5zcGlubG9ja19sb2NrdmFsID0gYXJjaF9zcGluX2xvY2t2YWwoMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDM4NmQzN2EuLjA5MzFiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfc2VjID0KIAkJdGstPnh0aW1lX3NlYyArIHRrLT53YWxsX3RvX21vbm90b25pYy50dl9zZWM7CiAJdmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPSB0ay0+eHRpbWVfbnNlYyArCi0JCSsgKHRrLT53YWxsX3RvX21vbm90b25pYy50dl9uc2VjIDw8IHRrLT5zaGlmdCk7CisJCSsgKCh1NjQpIHRrLT53YWxsX3RvX21vbm90b25pYy50dl9uc2VjIDw8IHRrLT5zaGlmdCk7CiAJbnNlY3BzID0gKHU2NCkgTlNFQ19QRVJfU0VDIDw8IHRrLT5zaGlmdDsKIAl3aGlsZSAodmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPj0gbnNlY3BzKSB7CiAJCXZkc29fZGF0YS0+d3RvbV9jbG9ja19uc2VjIC09IG5zZWNwczsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCA2Mjk4ZmVkLi4zNTVhMTZjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC0zMzMsNyArMzMzLDkgQEAKIAkJbnJfbWFza3MgKj0gaW5mby0+bWFnW1RPUE9MT0dZX05SX01BRyAtIG9mZnNldCAtIDEgLSBpXTsKIAlucl9tYXNrcyA9IG1heChucl9tYXNrcywgMSk7CiAJZm9yIChpID0gMDsgaSA8IG5yX21hc2tzOyBpKyspIHsKLQkJbWFzay0+bmV4dCA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBtYXNrX2luZm8pKTsKKwkJbWFzay0+bmV4dCA9IGFsbG9jX2Jvb3RtZW1fYWxpZ24oCisJCQlyb3VuZHVwX3Bvd19vZl90d28oc2l6ZW9mKHN0cnVjdCBtYXNrX2luZm8pKSwKKwkJCXJvdW5kdXBfcG93X29mX3R3byhzaXplb2Yoc3RydWN0IG1hc2tfaW5mbykpKTsKIAkJbWFzayA9IG1hc2stPm5leHQ7CiAJfQogfQpAQCAtNDQzLDYgKzQ0NSwyMyBAQAogCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmNwdS0+ZGV2LmtvYmosICZ0b3BvbG9neV9jcHVfYXR0cl9ncm91cCk7CiB9CiAKK2NvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZWdyb3VwX21hc2soaW50IGNwdSkKK3sKKwlyZXR1cm4gJmNwdV90b3BvbG9neVtjcHVdLmNvcmVfbWFzazsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfYm9va19tYXNrKGludCBjcHUpCit7CisJcmV0dXJuICZjcHVfdG9wb2xvZ3lbY3B1XS5ib29rX21hc2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsIHMzOTBfdG9wb2xvZ3lbXSA9IHsKKwl7IGNwdV9jb3JlZ3JvdXBfbWFzaywgY3B1X2NvcmVfZmxhZ3MsIFNEX0lOSVRfTkFNRShNQykgfSwKKwl7IGNwdV9ib29rX21hc2ssIFNEX0lOSVRfTkFNRShCT09LKSB9LAorCXsgY3B1X2NwdV9tYXNrLCBTRF9JTklUX05BTUUoRElFKSB9LAorCXsgTlVMTCwgfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHRvcG9sb2d5X2luaXQodm9pZCkKIHsKIAlpZiAoIU1BQ0hJTkVfSEFTX1RPUE9MT0dZKSB7CkBAIC00NTEsNiArNDcwLDkgQEAKIAl9CiAJc2V0X3RvcG9sb2d5X3RpbWVyKCk7CiBvdXQ6CisKKwlzZXRfc2NoZWRfdG9wb2xvZ3koczM5MF90b3BvbG9neSk7CisKIAlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKGNwdV9zdWJzeXMuZGV2X3Jvb3QsICZkZXZfYXR0cl9kaXNwYXRjaGluZyk7CiB9CiBkZXZpY2VfaW5pdGNhbGwodG9wb2xvZ3lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL01ha2VmaWxlIGIvYXJjaC9zMzkwL2t2bS9NYWtlZmlsZQppbmRleCBkM2FkYjM3Li5iM2I1NTM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rdm0vTWFrZWZpbGUKQEAgLTExLDUgKzExLDcgQEAKIAogY2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtCiAKLWt2bS1vYmpzIDo9ICQoY29tbW9uLW9ianMpIGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3AubyBkaWFnLm8KK2t2bS1vYmpzIDo9ICQoY29tbW9uLW9ianMpIGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aubwora3ZtLW9ianMgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vCisKIG9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RpYWcuYyBiL2FyY2gvczM5MC9rdm0vZGlhZy5jCmluZGV4IDA4ZGZjODMuLjAxNjE2NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGlhZy5jCisrKyBiL2FyY2gvczM5MC9rdm0vZGlhZy5jCkBAIC0yMyw3ICsyMyw3IEBACiBzdGF0aWMgaW50IGRpYWdfcmVsZWFzZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwotCXVuc2lnbmVkIGxvbmcgcHJlZml4ICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXg7CisJdW5zaWduZWQgbG9uZyBwcmVmaXggID0ga3ZtX3MzOTBfZ2V0X3ByZWZpeCh2Y3B1KTsKIAogCXN0YXJ0ID0gdmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1sodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4ZjApID4+IDRdOwogCWVuZCA9IHZjcHUtPnJ1bi0+cy5yZWdzLmdwcnNbdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4Zl0gKyA0MDk2OwpAQCAtNjQsMTIgKzY0LDEyIEBACiAJaW50IHJjOwogCXUxNiByeCA9ICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhICYgMHhmMCkgPj4gNDsKIAl1MTYgcnkgPSAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MGYpOwotCXVuc2lnbmVkIGxvbmcgaHZhX3Rva2VuID0gS1ZNX0hWQV9FUlJfQkFEOwogCiAJaWYgKHZjcHUtPnJ1bi0+cy5yZWdzLmdwcnNbcnhdICYgNykKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7Ci0JaWYgKGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmcGFybSwgdmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyeF0sIHNpemVvZihwYXJtKSkpCi0JCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOworCXJjID0gcmVhZF9ndWVzdCh2Y3B1LCB2Y3B1LT5ydW4tPnMucmVncy5ncHJzW3J4XSwgJnBhcm0sIHNpemVvZihwYXJtKSk7CisJaWYgKHJjKQorCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dfY29uZCh2Y3B1LCByYyk7CiAJaWYgKHBhcm0ucGFybV92ZXJzaW9uICE9IDIgfHwgcGFybS5wYXJtX2xlbiA8IDUgfHwgcGFybS5jb2RlICE9IDB4MjU4KQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKIApAQCAtODksOCArODksNyBAQAogCQkgICAgcGFybS50b2tlbl9hZGRyICYgNyB8fCBwYXJtLnphcmNoICE9IDB4ODAwMDAwMDAwMDAwMDAwMFVMTCkKIAkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1NQRUNJRklDQVRJT04pOwogCi0JCWh2YV90b2tlbiA9IGdmbl90b19odmEodmNwdS0+a3ZtLCBncGFfdG9fZ2ZuKHBhcm0udG9rZW5fYWRkcikpOwotCQlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmFfdG9rZW4pKQorCQlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sIHBhcm0udG9rZW5fYWRkcikpCiAJCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKIAogCQl2Y3B1LT5hcmNoLnBmYXVsdF90b2tlbiA9IHBhcm0udG9rZW5fYWRkcjsKQEAgLTE2NywyMyArMTY2LDE3IEBACiAKIAlWQ1BVX0VWRU5UKHZjcHUsIDUsICJkaWFnIGlwbCBmdW5jdGlvbnMsIHN1YmNvZGUgJWx4Iiwgc3ViY29kZSk7CiAJc3dpdGNoIChzdWJjb2RlKSB7Ci0JY2FzZSAwOgotCWNhc2UgMToKLQkJcGFnZV90YWJsZV9yZXNldF9wZ3N0ZShjdXJyZW50LT5tbSwgMCwgVEFTS19TSVpFKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWNhc2UgMzoKIAkJdmNwdS0+cnVuLT5zMzkwX3Jlc2V0X2ZsYWdzID0gS1ZNX1MzOTBfUkVTRVRfQ0xFQVI7Ci0JCXBhZ2VfdGFibGVfcmVzZXRfcGdzdGUoY3VycmVudC0+bW0sIDAsIFRBU0tfU0laRSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJdmNwdS0+cnVuLT5zMzkwX3Jlc2V0X2ZsYWdzID0gMDsKLQkJcGFnZV90YWJsZV9yZXNldF9wZ3N0ZShjdXJyZW50LT5tbSwgMCwgVEFTS19TSVpFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWF0b21pY19zZXRfbWFzayhDUFVTVEFUX1NUT1BQRUQsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOworCWt2bV9zMzkwX3ZjcHVfc3RvcCh2Y3B1KTsKIAl2Y3B1LT5ydW4tPnMzOTBfcmVzZXRfZmxhZ3MgfD0gS1ZNX1MzOTBfUkVTRVRfU1VCU1lTVEVNOwogCXZjcHUtPnJ1bi0+czM5MF9yZXNldF9mbGFncyB8PSBLVk1fUzM5MF9SRVNFVF9JUEw7CiAJdmNwdS0+cnVuLT5zMzkwX3Jlc2V0X2ZsYWdzIHw9IEtWTV9TMzkwX1JFU0VUX0NQVV9JTklUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMgYi9hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjUzYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMKQEAgLTAsMCArMSw3MjYgQEAKKy8qCisgKiBndWVzdCBhY2Nlc3MgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDE0CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlICJrdm0tczM5MC5oIgorI2luY2x1ZGUgImdhY2Nlc3MuaCIKKwordW5pb24gYXNjZSB7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBvcmlnaW4gOiA1MjsgLyogUmVnaW9uLSBvciBTZWdtZW50LVRhYmxlIE9yaWdpbiAqLworCQl1bnNpZ25lZCBsb25nCSA6IDI7CisJCXVuc2lnbmVkIGxvbmcgZyAgOiAxOyAvKiBTdWJzcGFjZSBHcm91cCBDb250cm9sICovCisJCXVuc2lnbmVkIGxvbmcgcCAgOiAxOyAvKiBQcml2YXRlIFNwYWNlIENvbnRyb2wgKi8KKwkJdW5zaWduZWQgbG9uZyBzICA6IDE7IC8qIFN0b3JhZ2UtQWx0ZXJhdGlvbi1FdmVudCBDb250cm9sICovCisJCXVuc2lnbmVkIGxvbmcgeCAgOiAxOyAvKiBTcGFjZS1Td2l0Y2gtRXZlbnQgQ29udHJvbCAqLworCQl1bnNpZ25lZCBsb25nIHIgIDogMTsgLyogUmVhbC1TcGFjZSBDb250cm9sICovCisJCXVuc2lnbmVkIGxvbmcJIDogMTsKKwkJdW5zaWduZWQgbG9uZyBkdCA6IDI7IC8qIERlc2lnbmF0aW9uLVR5cGUgQ29udHJvbCAqLworCQl1bnNpZ25lZCBsb25nIHRsIDogMjsgLyogUmVnaW9uLSBvciBTZWdtZW50LVRhYmxlIExlbmd0aCAqLworCX07Cit9OworCitlbnVtIHsKKwlBU0NFX1RZUEVfU0VHTUVOVCA9IDAsCisJQVNDRV9UWVBFX1JFR0lPTjMgPSAxLAorCUFTQ0VfVFlQRV9SRUdJT04yID0gMiwKKwlBU0NFX1RZUEVfUkVHSU9OMSA9IDMKK307CisKK3VuaW9uIHJlZ2lvbjFfdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcnRvOiA1MjsvKiBSZWdpb24tVGFibGUgT3JpZ2luICovCisJCXVuc2lnbmVkIGxvbmcJIDogMjsKKwkJdW5zaWduZWQgbG9uZyBwICA6IDE7IC8qIERBVC1Qcm90ZWN0aW9uIEJpdCAqLworCQl1bnNpZ25lZCBsb25nCSA6IDE7CisJCXVuc2lnbmVkIGxvbmcgdGYgOiAyOyAvKiBSZWdpb24tU2Vjb25kLVRhYmxlIE9mZnNldCAqLworCQl1bnNpZ25lZCBsb25nIGkgIDogMTsgLyogUmVnaW9uLUludmFsaWQgQml0ICovCisJCXVuc2lnbmVkIGxvbmcJIDogMTsKKwkJdW5zaWduZWQgbG9uZyB0dCA6IDI7IC8qIFRhYmxlLVR5cGUgQml0cyAqLworCQl1bnNpZ25lZCBsb25nIHRsIDogMjsgLyogUmVnaW9uLVNlY29uZC1UYWJsZSBMZW5ndGggKi8KKwl9OworfTsKKwordW5pb24gcmVnaW9uMl90YWJsZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBydG86IDUyOy8qIFJlZ2lvbi1UYWJsZSBPcmlnaW4gKi8KKwkJdW5zaWduZWQgbG9uZwkgOiAyOworCQl1bnNpZ25lZCBsb25nIHAgIDogMTsgLyogREFULVByb3RlY3Rpb24gQml0ICovCisJCXVuc2lnbmVkIGxvbmcJIDogMTsKKwkJdW5zaWduZWQgbG9uZyB0ZiA6IDI7IC8qIFJlZ2lvbi1UaGlyZC1UYWJsZSBPZmZzZXQgKi8KKwkJdW5zaWduZWQgbG9uZyBpICA6IDE7IC8qIFJlZ2lvbi1JbnZhbGlkIEJpdCAqLworCQl1bnNpZ25lZCBsb25nCSA6IDE7CisJCXVuc2lnbmVkIGxvbmcgdHQgOiAyOyAvKiBUYWJsZS1UeXBlIEJpdHMgKi8KKwkJdW5zaWduZWQgbG9uZyB0bCA6IDI7IC8qIFJlZ2lvbi1UaGlyZC1UYWJsZSBMZW5ndGggKi8KKwl9OworfTsKKworc3RydWN0IHJlZ2lvbjNfdGFibGVfZW50cnlfZmMwIHsKKwl1bnNpZ25lZCBsb25nIHN0bzogNTI7LyogU2VnbWVudC1UYWJsZSBPcmlnaW4gKi8KKwl1bnNpZ25lZCBsb25nCSA6IDE7CisJdW5zaWduZWQgbG9uZyBmYyA6IDE7IC8qIEZvcm1hdC1Db250cm9sICovCisJdW5zaWduZWQgbG9uZyBwICA6IDE7IC8qIERBVC1Qcm90ZWN0aW9uIEJpdCAqLworCXVuc2lnbmVkIGxvbmcJIDogMTsKKwl1bnNpZ25lZCBsb25nIHRmIDogMjsgLyogU2VnbWVudC1UYWJsZSBPZmZzZXQgKi8KKwl1bnNpZ25lZCBsb25nIGkgIDogMTsgLyogUmVnaW9uLUludmFsaWQgQml0ICovCisJdW5zaWduZWQgbG9uZyBjciA6IDE7IC8qIENvbW1vbi1SZWdpb24gQml0ICovCisJdW5zaWduZWQgbG9uZyB0dCA6IDI7IC8qIFRhYmxlLVR5cGUgQml0cyAqLworCXVuc2lnbmVkIGxvbmcgdGwgOiAyOyAvKiBTZWdtZW50LVRhYmxlIExlbmd0aCAqLworfTsKKworc3RydWN0IHJlZ2lvbjNfdGFibGVfZW50cnlfZmMxIHsKKwl1bnNpZ25lZCBsb25nIHJmYWEgOiAzMzsgLyogUmVnaW9uLUZyYW1lIEFic29sdXRlIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCSA6IDE0OworCXVuc2lnbmVkIGxvbmcgYXYgOiAxOyAvKiBBQ0NGLVZhbGlkaXR5IENvbnRyb2wgKi8KKwl1bnNpZ25lZCBsb25nIGFjYzogNDsgLyogQWNjZXNzLUNvbnRyb2wgQml0cyAqLworCXVuc2lnbmVkIGxvbmcgZiAgOiAxOyAvKiBGZXRjaC1Qcm90ZWN0aW9uIEJpdCAqLworCXVuc2lnbmVkIGxvbmcgZmMgOiAxOyAvKiBGb3JtYXQtQ29udHJvbCAqLworCXVuc2lnbmVkIGxvbmcgcCAgOiAxOyAvKiBEQVQtUHJvdGVjdGlvbiBCaXQgKi8KKwl1bnNpZ25lZCBsb25nIGNvIDogMTsgLyogQ2hhbmdlLVJlY29yZGluZyBPdmVycmlkZSAqLworCXVuc2lnbmVkIGxvbmcJIDogMjsKKwl1bnNpZ25lZCBsb25nIGkgIDogMTsgLyogUmVnaW9uLUludmFsaWQgQml0ICovCisJdW5zaWduZWQgbG9uZyBjciA6IDE7IC8qIENvbW1vbi1SZWdpb24gQml0ICovCisJdW5zaWduZWQgbG9uZyB0dCA6IDI7IC8qIFRhYmxlLVR5cGUgQml0cyAqLworCXVuc2lnbmVkIGxvbmcJIDogMjsKK307CisKK3VuaW9uIHJlZ2lvbjNfdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCByZWdpb24zX3RhYmxlX2VudHJ5X2ZjMCBmYzA7CisJc3RydWN0IHJlZ2lvbjNfdGFibGVfZW50cnlfZmMxIGZjMTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nCSA6IDUzOworCQl1bnNpZ25lZCBsb25nIGZjIDogMTsgLyogRm9ybWF0LUNvbnRyb2wgKi8KKwkJdW5zaWduZWQgbG9uZwkgOiA0OworCQl1bnNpZ25lZCBsb25nIGkgIDogMTsgLyogUmVnaW9uLUludmFsaWQgQml0ICovCisJCXVuc2lnbmVkIGxvbmcgY3IgOiAxOyAvKiBDb21tb24tUmVnaW9uIEJpdCAqLworCQl1bnNpZ25lZCBsb25nIHR0IDogMjsgLyogVGFibGUtVHlwZSBCaXRzICovCisJCXVuc2lnbmVkIGxvbmcJIDogMjsKKwl9OworfTsKKworc3RydWN0IHNlZ21lbnRfZW50cnlfZmMwIHsKKwl1bnNpZ25lZCBsb25nIHB0bzogNTM7LyogUGFnZS1UYWJsZSBPcmlnaW4gKi8KKwl1bnNpZ25lZCBsb25nIGZjIDogMTsgLyogRm9ybWF0LUNvbnRyb2wgKi8KKwl1bnNpZ25lZCBsb25nIHAgIDogMTsgLyogREFULVByb3RlY3Rpb24gQml0ICovCisJdW5zaWduZWQgbG9uZwkgOiAzOworCXVuc2lnbmVkIGxvbmcgaSAgOiAxOyAvKiBTZWdtZW50LUludmFsaWQgQml0ICovCisJdW5zaWduZWQgbG9uZyBjcyA6IDE7IC8qIENvbW1vbi1TZWdtZW50IEJpdCAqLworCXVuc2lnbmVkIGxvbmcgdHQgOiAyOyAvKiBUYWJsZS1UeXBlIEJpdHMgKi8KKwl1bnNpZ25lZCBsb25nCSA6IDI7Cit9OworCitzdHJ1Y3Qgc2VnbWVudF9lbnRyeV9mYzEgeworCXVuc2lnbmVkIGxvbmcgc2ZhYSA6IDQ0OyAvKiBTZWdtZW50LUZyYW1lIEFic29sdXRlIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCSA6IDM7CisJdW5zaWduZWQgbG9uZyBhdiA6IDE7IC8qIEFDQ0YtVmFsaWRpdHkgQ29udHJvbCAqLworCXVuc2lnbmVkIGxvbmcgYWNjOiA0OyAvKiBBY2Nlc3MtQ29udHJvbCBCaXRzICovCisJdW5zaWduZWQgbG9uZyBmICA6IDE7IC8qIEZldGNoLVByb3RlY3Rpb24gQml0ICovCisJdW5zaWduZWQgbG9uZyBmYyA6IDE7IC8qIEZvcm1hdC1Db250cm9sICovCisJdW5zaWduZWQgbG9uZyBwICA6IDE7IC8qIERBVC1Qcm90ZWN0aW9uIEJpdCAqLworCXVuc2lnbmVkIGxvbmcgY28gOiAxOyAvKiBDaGFuZ2UtUmVjb3JkaW5nIE92ZXJyaWRlICovCisJdW5zaWduZWQgbG9uZwkgOiAyOworCXVuc2lnbmVkIGxvbmcgaSAgOiAxOyAvKiBTZWdtZW50LUludmFsaWQgQml0ICovCisJdW5zaWduZWQgbG9uZyBjcyA6IDE7IC8qIENvbW1vbi1TZWdtZW50IEJpdCAqLworCXVuc2lnbmVkIGxvbmcgdHQgOiAyOyAvKiBUYWJsZS1UeXBlIEJpdHMgKi8KKwl1bnNpZ25lZCBsb25nCSA6IDI7Cit9OworCit1bmlvbiBzZWdtZW50X3RhYmxlX2VudHJ5IHsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3Qgc2VnbWVudF9lbnRyeV9mYzAgZmMwOworCXN0cnVjdCBzZWdtZW50X2VudHJ5X2ZjMSBmYzE7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZwkgOiA1MzsKKwkJdW5zaWduZWQgbG9uZyBmYyA6IDE7IC8qIEZvcm1hdC1Db250cm9sICovCisJCXVuc2lnbmVkIGxvbmcJIDogNDsKKwkJdW5zaWduZWQgbG9uZyBpICA6IDE7IC8qIFNlZ21lbnQtSW52YWxpZCBCaXQgKi8KKwkJdW5zaWduZWQgbG9uZyBjcyA6IDE7IC8qIENvbW1vbi1TZWdtZW50IEJpdCAqLworCQl1bnNpZ25lZCBsb25nIHR0IDogMjsgLyogVGFibGUtVHlwZSBCaXRzICovCisJCXVuc2lnbmVkIGxvbmcJIDogMjsKKwl9OworfTsKKworZW51bSB7CisJVEFCTEVfVFlQRV9TRUdNRU5UID0gMCwKKwlUQUJMRV9UWVBFX1JFR0lPTjMgPSAxLAorCVRBQkxFX1RZUEVfUkVHSU9OMiA9IDIsCisJVEFCTEVfVFlQRV9SRUdJT04xID0gMworfTsKKwordW5pb24gcGFnZV90YWJsZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBwZnJhIDogNTI7IC8qIFBhZ2UtRnJhbWUgUmVhbCBBZGRyZXNzICovCisJCXVuc2lnbmVkIGxvbmcgeiAgOiAxOyAvKiBaZXJvIEJpdCAqLworCQl1bnNpZ25lZCBsb25nIGkgIDogMTsgLyogUGFnZS1JbnZhbGlkIEJpdCAqLworCQl1bnNpZ25lZCBsb25nIHAgIDogMTsgLyogREFULVByb3RlY3Rpb24gQml0ICovCisJCXVuc2lnbmVkIGxvbmcgY28gOiAxOyAvKiBDaGFuZ2UtUmVjb3JkaW5nIE92ZXJyaWRlICovCisJCXVuc2lnbmVkIGxvbmcJIDogODsKKwl9OworfTsKKworLyoKKyAqIHZhZGRyZXNzIHVuaW9uIGluIG9yZGVyIHRvIGVhc2lseSBkZWNvZGUgYSB2aXJ0dWFsIGFkZHJlc3MgaW50byBpdHMKKyAqIHJlZ2lvbiBmaXJzdCBpbmRleCwgcmVnaW9uIHNlY29uZCBpbmRleCBldGMuIHBhcnRzLgorICovCit1bmlvbiB2YWRkcmVzcyB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcmZ4IDogMTE7CisJCXVuc2lnbmVkIGxvbmcgcnN4IDogMTE7CisJCXVuc2lnbmVkIGxvbmcgcnR4IDogMTE7CisJCXVuc2lnbmVkIGxvbmcgc3ggIDogMTE7CisJCXVuc2lnbmVkIGxvbmcgcHggIDogODsKKwkJdW5zaWduZWQgbG9uZyBieCAgOiAxMjsKKwl9OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcmZ4MDEgOiAyOworCQl1bnNpZ25lZCBsb25nCSAgICA6IDk7CisJCXVuc2lnbmVkIGxvbmcgcnN4MDEgOiAyOworCQl1bnNpZ25lZCBsb25nCSAgICA6IDk7CisJCXVuc2lnbmVkIGxvbmcgcnR4MDEgOiAyOworCQl1bnNpZ25lZCBsb25nCSAgICA6IDk7CisJCXVuc2lnbmVkIGxvbmcgc3gwMSAgOiAyOworCQl1bnNpZ25lZCBsb25nCSAgICA6IDI5OworCX07Cit9OworCisvKgorICogcmFkZHJlc3MgdW5pb24gd2hpY2ggd2lsbCBjb250YWluIHRoZSByZXN1bHQgKHJlYWwgb3IgYWJzb2x1dGUgYWRkcmVzcykKKyAqIGFmdGVyIGEgcGFnZSB0YWJsZSB3YWxrLiBUaGUgcmZhYSwgc2ZhYSBhbmQgcGZyYSBtZW1iZXJzIGFyZSB1c2VkIHRvCisgKiBzaW1wbHkgYXNzaWduIHRoZW0gdGhlIHZhbHVlIG9mIGEgcmVnaW9uLCBzZWdtZW50IG9yIHBhZ2UgdGFibGUgZW50cnkuCisgKi8KK3VuaW9uIHJhZGRyZXNzIHsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyByZmFhIDogMzM7IC8qIFJlZ2lvbi1GcmFtZSBBYnNvbHV0ZSBBZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBzZmFhIDogNDQ7IC8qIFNlZ21lbnQtRnJhbWUgQWJzb2x1dGUgQWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgcGZyYSA6IDUyOyAvKiBQYWdlLUZyYW1lIFJlYWwgQWRkcmVzcyAqLworfTsKKworc3RhdGljIGludCBpcHRlX2xvY2tfY291bnQ7CitzdGF0aWMgREVGSU5FX01VVEVYKGlwdGVfbXV0ZXgpOworCitpbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuaW9uIGlwdGVfY29udHJvbCAqaWMgPSAmdmNwdS0+a3ZtLT5hcmNoLnNjYS0+aXB0ZV9jb250cm9sOworCisJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2EgJiAxKQorCQlyZXR1cm4gaWMtPmtoICE9IDA7CisJcmV0dXJuIGlwdGVfbG9ja19jb3VudCAhPSAwOworfQorCitzdGF0aWMgdm9pZCBpcHRlX2xvY2tfc2ltcGxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bmlvbiBpcHRlX2NvbnRyb2wgb2xkLCBuZXcsICppYzsKKworCW11dGV4X2xvY2soJmlwdGVfbXV0ZXgpOworCWlwdGVfbG9ja19jb3VudCsrOworCWlmIChpcHRlX2xvY2tfY291bnQgPiAxKQorCQlnb3RvIG91dDsKKwlpYyA9ICZ2Y3B1LT5rdm0tPmFyY2guc2NhLT5pcHRlX2NvbnRyb2w7CisJZG8geworCQlvbGQgPSBBQ0NFU1NfT05DRSgqaWMpOworCQl3aGlsZSAob2xkLmspIHsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQkJb2xkID0gQUNDRVNTX09OQ0UoKmljKTsKKwkJfQorCQluZXcgPSBvbGQ7CisJCW5ldy5rID0gMTsKKwl9IHdoaWxlIChjbXB4Y2hnKCZpYy0+dmFsLCBvbGQudmFsLCBuZXcudmFsKSAhPSBvbGQudmFsKTsKK291dDoKKwltdXRleF91bmxvY2soJmlwdGVfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBpcHRlX3VubG9ja19zaW1wbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuaW9uIGlwdGVfY29udHJvbCBvbGQsIG5ldywgKmljOworCisJbXV0ZXhfbG9jaygmaXB0ZV9tdXRleCk7CisJaXB0ZV9sb2NrX2NvdW50LS07CisJaWYgKGlwdGVfbG9ja19jb3VudCkKKwkJZ290byBvdXQ7CisJaWMgPSAmdmNwdS0+a3ZtLT5hcmNoLnNjYS0+aXB0ZV9jb250cm9sOworCWRvIHsKKwkJbmV3ID0gb2xkID0gQUNDRVNTX09OQ0UoKmljKTsKKwkJbmV3LmsgPSAwOworCX0gd2hpbGUgKGNtcHhjaGcoJmljLT52YWwsIG9sZC52YWwsIG5ldy52YWwpICE9IG9sZC52YWwpOworCWlmICghaXB0ZV9sb2NrX2NvdW50KQorCQl3YWtlX3VwKCZ2Y3B1LT5rdm0tPmFyY2guaXB0ZV93cSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpcHRlX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgaXB0ZV9sb2NrX3NpaWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuaW9uIGlwdGVfY29udHJvbCBvbGQsIG5ldywgKmljOworCisJaWMgPSAmdmNwdS0+a3ZtLT5hcmNoLnNjYS0+aXB0ZV9jb250cm9sOworCWRvIHsKKwkJb2xkID0gQUNDRVNTX09OQ0UoKmljKTsKKwkJd2hpbGUgKG9sZC5rZykgeworCQkJY29uZF9yZXNjaGVkKCk7CisJCQlvbGQgPSBBQ0NFU1NfT05DRSgqaWMpOworCQl9CisJCW5ldyA9IG9sZDsKKwkJbmV3LmsgPSAxOworCQluZXcua2grKzsKKwl9IHdoaWxlIChjbXB4Y2hnKCZpYy0+dmFsLCBvbGQudmFsLCBuZXcudmFsKSAhPSBvbGQudmFsKTsKK30KKworc3RhdGljIHZvaWQgaXB0ZV91bmxvY2tfc2lpZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5pb24gaXB0ZV9jb250cm9sIG9sZCwgbmV3LCAqaWM7CisKKwlpYyA9ICZ2Y3B1LT5rdm0tPmFyY2guc2NhLT5pcHRlX2NvbnRyb2w7CisJZG8geworCQluZXcgPSBvbGQgPSBBQ0NFU1NfT05DRSgqaWMpOworCQluZXcua2gtLTsKKwkJaWYgKCFuZXcua2gpCisJCQluZXcuayA9IDA7CisJfSB3aGlsZSAoY21weGNoZygmaWMtPnZhbCwgb2xkLnZhbCwgbmV3LnZhbCkgIT0gb2xkLnZhbCk7CisJaWYgKCFuZXcua2gpCisJCXdha2VfdXAoJnZjcHUtPmt2bS0+YXJjaC5pcHRlX3dxKTsKK30KKwordm9pZCBpcHRlX2xvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNhICYgMSkKKwkJaXB0ZV9sb2NrX3NpaWYodmNwdSk7CisJZWxzZQorCQlpcHRlX2xvY2tfc2ltcGxlKHZjcHUpOworfQorCit2b2lkIGlwdGVfdW5sb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmVjYSAmIDEpCisJCWlwdGVfdW5sb2NrX3NpaWYodmNwdSk7CisJZWxzZQorCQlpcHRlX3VubG9ja19zaW1wbGUodmNwdSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF92Y3B1X2FzY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN3aXRjaCAocHN3X2JpdHModmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cpLmFzKSB7CisJY2FzZSBQU1dfQVNfUFJJTUFSWToKKwkJcmV0dXJuIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbMV07CisJY2FzZSBQU1dfQVNfU0VDT05EQVJZOgorCQlyZXR1cm4gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjcls3XTsKKwljYXNlIFBTV19BU19IT01FOgorCQlyZXR1cm4gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclsxM107CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlcmVmX3RhYmxlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgKnZhbCkKK3sKKwlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCBncGEsIHZhbCwgc2l6ZW9mKCp2YWwpKTsKK30KKworLyoqCisgKiBndWVzdF90cmFuc2xhdGUgLSB0cmFuc2xhdGUgYSBndWVzdCB2aXJ0dWFsIGludG8gYSBndWVzdCBhYnNvbHV0ZSBhZGRyZXNzCisgKiBAdmNwdTogdmlydHVhbCBjcHUKKyAqIEBndmE6IGd1ZXN0IHZpcnR1YWwgYWRkcmVzcworICogQGdwYTogcG9pbnRzIHRvIHdoZXJlIGd1ZXN0IHBoeXNpY2FsIChhYnNvbHV0ZSkgYWRkcmVzcyBzaG91bGQgYmUgc3RvcmVkCisgKiBAd3JpdGU6IGluZGljYXRlcyBpZiBhY2Nlc3MgaXMgYSB3cml0ZSBhY2Nlc3MKKyAqCisgKiBUcmFuc2xhdGUgYSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW50byBhIGd1ZXN0IGFic29sdXRlIGFkZHJlc3MgYnkgbWVhbnMKKyAqIG9mIGR5bmFtaWMgYWRkcmVzcyB0cmFuc2xhdGlvbiBhcyBzcGVjaWZpZWQgYnkgdGhlIGFyY2hpdGVjdXR1cmUuCisgKiBJZiB0aGUgcmVzdWx0aW5nIGFic29sdXRlIGFkZHJlc3MgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgY29uZmlndXJhdGlvbgorICogYW4gYWRkcmVzc2luZyBleGNlcHRpb24gaXMgaW5kaWNhdGVkIGFuZCBAZ3BhIHdpbGwgbm90IGJlIGNoYW5nZWQuCisgKgorICogUmV0dXJuczogLSB6ZXJvIG9uIHN1Y2Nlc3M7IEBncGEgY29udGFpbnMgdGhlIHJlc3VsdGluZyBhYnNvbHV0ZSBhZGRyZXNzCisgKgkgICAgLSBhIG5lZ2F0aXZlIHZhbHVlIGlmIGd1ZXN0IGFjY2VzcyBmYWlsZWQgZHVlIHRvIGUuZy4gYnJva2VuCisgKgkgICAgICBndWVzdCBtYXBwaW5nCisgKgkgICAgLSBhIHBvc2l0dmUgdmFsdWUgaWYgYW4gYWNjZXNzIGV4Y2VwdGlvbiBoYXBwZW5lZC4gSW4gdGhpcyBjYXNlCisgKgkgICAgICB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGUgYXMgZGVmaW5lZAorICoJICAgICAgYnkgdGhlIGFyY2hpdGVjdHVyZQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBndWVzdF90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmdwYSwgaW50IHdyaXRlKQoreworCXVuaW9uIHZhZGRyZXNzIHZhZGRyID0gey5hZGRyID0gZ3ZhfTsKKwl1bmlvbiByYWRkcmVzcyByYWRkciA9IHsuYWRkciA9IGd2YX07CisJdW5pb24gcGFnZV90YWJsZV9lbnRyeSBwdGU7CisJaW50IGRhdF9wcm90ZWN0aW9uID0gMDsKKwl1bmlvbiBjdGxyZWcwIGN0bHJlZzA7CisJdW5zaWduZWQgbG9uZyBwdHI7CisJaW50IGVkYXQxLCBlZGF0MjsKKwl1bmlvbiBhc2NlIGFzY2U7CisKKwljdGxyZWcwLnZhbCA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbMF07CisJZWRhdDEgPSBjdGxyZWcwLmVkYXQgJiYgdGVzdF92ZmFjaWxpdHkoOCk7CisJZWRhdDIgPSBlZGF0MSAmJiB0ZXN0X3ZmYWNpbGl0eSg3OCk7CisJYXNjZS52YWwgPSBnZXRfdmNwdV9hc2NlKHZjcHUpOworCWlmIChhc2NlLnIpCisJCWdvdG8gcmVhbF9hZGRyZXNzOworCXB0ciA9IGFzY2Uub3JpZ2luICogNDA5NjsKKwlzd2l0Y2ggKGFzY2UuZHQpIHsKKwljYXNlIEFTQ0VfVFlQRV9SRUdJT04xOgorCQlpZiAodmFkZHIucmZ4MDEgPiBhc2NlLnRsKQorCQkJcmV0dXJuIFBHTV9SRUdJT05fRklSU1RfVFJBTlM7CisJCXB0ciArPSB2YWRkci5yZnggKiA4OworCQlicmVhazsKKwljYXNlIEFTQ0VfVFlQRV9SRUdJT04yOgorCQlpZiAodmFkZHIucmZ4KQorCQkJcmV0dXJuIFBHTV9BU0NFX1RZUEU7CisJCWlmICh2YWRkci5yc3gwMSA+IGFzY2UudGwpCisJCQlyZXR1cm4gUEdNX1JFR0lPTl9TRUNPTkRfVFJBTlM7CisJCXB0ciArPSB2YWRkci5yc3ggKiA4OworCQlicmVhazsKKwljYXNlIEFTQ0VfVFlQRV9SRUdJT04zOgorCQlpZiAodmFkZHIucmZ4IHx8IHZhZGRyLnJzeCkKKwkJCXJldHVybiBQR01fQVNDRV9UWVBFOworCQlpZiAodmFkZHIucnR4MDEgPiBhc2NlLnRsKQorCQkJcmV0dXJuIFBHTV9SRUdJT05fVEhJUkRfVFJBTlM7CisJCXB0ciArPSB2YWRkci5ydHggKiA4OworCQlicmVhazsKKwljYXNlIEFTQ0VfVFlQRV9TRUdNRU5UOgorCQlpZiAodmFkZHIucmZ4IHx8IHZhZGRyLnJzeCB8fCB2YWRkci5ydHgpCisJCQlyZXR1cm4gUEdNX0FTQ0VfVFlQRTsKKwkJaWYgKHZhZGRyLnN4MDEgPiBhc2NlLnRsKQorCQkJcmV0dXJuIFBHTV9TRUdNRU5UX1RSQU5TTEFUSU9OOworCQlwdHIgKz0gdmFkZHIuc3ggKiA4OworCQlicmVhazsKKwl9CisJc3dpdGNoIChhc2NlLmR0KSB7CisJY2FzZSBBU0NFX1RZUEVfUkVHSU9OMToJeworCQl1bmlvbiByZWdpb24xX3RhYmxlX2VudHJ5IHJmdGU7CisKKwkJaWYgKGt2bV9pc19lcnJvcl9ncGEodmNwdS0+a3ZtLCBwdHIpKQorCQkJcmV0dXJuIFBHTV9BRERSRVNTSU5HOworCQlpZiAoZGVyZWZfdGFibGUodmNwdS0+a3ZtLCBwdHIsICZyZnRlLnZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHJmdGUuaSkKKwkJCXJldHVybiBQR01fUkVHSU9OX0ZJUlNUX1RSQU5TOworCQlpZiAocmZ0ZS50dCAhPSBUQUJMRV9UWVBFX1JFR0lPTjEpCisJCQlyZXR1cm4gUEdNX1RSQU5TTEFUSU9OX1NQRUM7CisJCWlmICh2YWRkci5yc3gwMSA8IHJmdGUudGYgfHwgdmFkZHIucnN4MDEgPiByZnRlLnRsKQorCQkJcmV0dXJuIFBHTV9SRUdJT05fU0VDT05EX1RSQU5TOworCQlpZiAoZWRhdDEpCisJCQlkYXRfcHJvdGVjdGlvbiB8PSByZnRlLnA7CisJCXB0ciA9IHJmdGUucnRvICogNDA5NiArIHZhZGRyLnJzeCAqIDg7CisJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgQVNDRV9UWVBFX1JFR0lPTjI6IHsKKwkJdW5pb24gcmVnaW9uMl90YWJsZV9lbnRyeSByc3RlOworCisJCWlmIChrdm1faXNfZXJyb3JfZ3BhKHZjcHUtPmt2bSwgcHRyKSkKKwkJCXJldHVybiBQR01fQUREUkVTU0lORzsKKwkJaWYgKGRlcmVmX3RhYmxlKHZjcHUtPmt2bSwgcHRyLCAmcnN0ZS52YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChyc3RlLmkpCisJCQlyZXR1cm4gUEdNX1JFR0lPTl9TRUNPTkRfVFJBTlM7CisJCWlmIChyc3RlLnR0ICE9IFRBQkxFX1RZUEVfUkVHSU9OMikKKwkJCXJldHVybiBQR01fVFJBTlNMQVRJT05fU1BFQzsKKwkJaWYgKHZhZGRyLnJ0eDAxIDwgcnN0ZS50ZiB8fCB2YWRkci5ydHgwMSA+IHJzdGUudGwpCisJCQlyZXR1cm4gUEdNX1JFR0lPTl9USElSRF9UUkFOUzsKKwkJaWYgKGVkYXQxKQorCQkJZGF0X3Byb3RlY3Rpb24gfD0gcnN0ZS5wOworCQlwdHIgPSByc3RlLnJ0byAqIDQwOTYgKyB2YWRkci5ydHggKiA4OworCX0KKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEFTQ0VfVFlQRV9SRUdJT04zOiB7CisJCXVuaW9uIHJlZ2lvbjNfdGFibGVfZW50cnkgcnR0ZTsKKworCQlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sIHB0cikpCisJCQlyZXR1cm4gUEdNX0FERFJFU1NJTkc7CisJCWlmIChkZXJlZl90YWJsZSh2Y3B1LT5rdm0sIHB0ciwgJnJ0dGUudmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocnR0ZS5pKQorCQkJcmV0dXJuIFBHTV9SRUdJT05fVEhJUkRfVFJBTlM7CisJCWlmIChydHRlLnR0ICE9IFRBQkxFX1RZUEVfUkVHSU9OMykKKwkJCXJldHVybiBQR01fVFJBTlNMQVRJT05fU1BFQzsKKwkJaWYgKHJ0dGUuY3IgJiYgYXNjZS5wICYmIGVkYXQyKQorCQkJcmV0dXJuIFBHTV9UUkFOU0xBVElPTl9TUEVDOworCQlpZiAocnR0ZS5mYyAmJiBlZGF0MikgeworCQkJZGF0X3Byb3RlY3Rpb24gfD0gcnR0ZS5mYzEucDsKKwkJCXJhZGRyLnJmYWEgPSBydHRlLmZjMS5yZmFhOworCQkJZ290byBhYnNvbHV0ZV9hZGRyZXNzOworCQl9CisJCWlmICh2YWRkci5zeDAxIDwgcnR0ZS5mYzAudGYpCisJCQlyZXR1cm4gUEdNX1NFR01FTlRfVFJBTlNMQVRJT047CisJCWlmICh2YWRkci5zeDAxID4gcnR0ZS5mYzAudGwpCisJCQlyZXR1cm4gUEdNX1NFR01FTlRfVFJBTlNMQVRJT047CisJCWlmIChlZGF0MSkKKwkJCWRhdF9wcm90ZWN0aW9uIHw9IHJ0dGUuZmMwLnA7CisJCXB0ciA9IHJ0dGUuZmMwLnN0byAqIDQwOTYgKyB2YWRkci5zeCAqIDg7CisJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgQVNDRV9UWVBFX1NFR01FTlQ6IHsKKwkJdW5pb24gc2VnbWVudF90YWJsZV9lbnRyeSBzdGU7CisKKwkJaWYgKGt2bV9pc19lcnJvcl9ncGEodmNwdS0+a3ZtLCBwdHIpKQorCQkJcmV0dXJuIFBHTV9BRERSRVNTSU5HOworCQlpZiAoZGVyZWZfdGFibGUodmNwdS0+a3ZtLCBwdHIsICZzdGUudmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoc3RlLmkpCisJCQlyZXR1cm4gUEdNX1NFR01FTlRfVFJBTlNMQVRJT047CisJCWlmIChzdGUudHQgIT0gVEFCTEVfVFlQRV9TRUdNRU5UKQorCQkJcmV0dXJuIFBHTV9UUkFOU0xBVElPTl9TUEVDOworCQlpZiAoc3RlLmNzICYmIGFzY2UucCkKKwkJCXJldHVybiBQR01fVFJBTlNMQVRJT05fU1BFQzsKKwkJaWYgKHN0ZS5mYyAmJiBlZGF0MSkgeworCQkJZGF0X3Byb3RlY3Rpb24gfD0gc3RlLmZjMS5wOworCQkJcmFkZHIuc2ZhYSA9IHN0ZS5mYzEuc2ZhYTsKKwkJCWdvdG8gYWJzb2x1dGVfYWRkcmVzczsKKwkJfQorCQlkYXRfcHJvdGVjdGlvbiB8PSBzdGUuZmMwLnA7CisJCXB0ciA9IHN0ZS5mYzAucHRvICogMjA0OCArIHZhZGRyLnB4ICogODsKKwl9CisJfQorCWlmIChrdm1faXNfZXJyb3JfZ3BhKHZjcHUtPmt2bSwgcHRyKSkKKwkJcmV0dXJuIFBHTV9BRERSRVNTSU5HOworCWlmIChkZXJlZl90YWJsZSh2Y3B1LT5rdm0sIHB0ciwgJnB0ZS52YWwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHRlLmkpCisJCXJldHVybiBQR01fUEFHRV9UUkFOU0xBVElPTjsKKwlpZiAocHRlLnopCisJCXJldHVybiBQR01fVFJBTlNMQVRJT05fU1BFQzsKKwlpZiAocHRlLmNvICYmICFlZGF0MSkKKwkJcmV0dXJuIFBHTV9UUkFOU0xBVElPTl9TUEVDOworCWRhdF9wcm90ZWN0aW9uIHw9IHB0ZS5wOworCXJhZGRyLnBmcmEgPSBwdGUucGZyYTsKK3JlYWxfYWRkcmVzczoKKwlyYWRkci5hZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgcmFkZHIuYWRkcik7CithYnNvbHV0ZV9hZGRyZXNzOgorCWlmICh3cml0ZSAmJiBkYXRfcHJvdGVjdGlvbikKKwkJcmV0dXJuIFBHTV9QUk9URUNUSU9OOworCWlmIChrdm1faXNfZXJyb3JfZ3BhKHZjcHUtPmt2bSwgcmFkZHIuYWRkcikpCisJCXJldHVybiBQR01fQUREUkVTU0lORzsKKwkqZ3BhID0gcmFkZHIuYWRkcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfbG93X2FkZHJlc3ModW5zaWduZWQgbG9uZyBnYSkKK3sKKwkvKiBDaGVjayBmb3IgYWRkcmVzcyByYW5nZXMgMC4uNTExIGFuZCA0MDk2Li40NjA3ICovCisJcmV0dXJuIChnYSAmIH4weDExZmZ1bCkgPT0gMDsKK30KKworc3RhdGljIGludCBsb3dfYWRkcmVzc19wcm90ZWN0aW9uX2VuYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuaW9uIGN0bHJlZzAgY3RscmVnMCA9IHsudmFsID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclswXX07CisJcHN3X3QgKnBzdyA9ICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdzsKKwl1bmlvbiBhc2NlIGFzY2U7CisKKwlpZiAoIWN0bHJlZzAubGFwKQorCQlyZXR1cm4gMDsKKwlhc2NlLnZhbCA9IGdldF92Y3B1X2FzY2UodmNwdSk7CisJaWYgKHBzd19iaXRzKCpwc3cpLnQgJiYgYXNjZS5wKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IHRyYW5zX2V4Y19jb2RlX2JpdHMgeworCXVuc2lnbmVkIGxvbmcgYWRkciA6IDUyOyAvKiBUcmFuc2xhdGlvbi1leGNlcHRpb24gQWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgZnNpICA6IDI7ICAvKiBBY2Nlc3MgRXhjZXB0aW9uIEZldGNoL1N0b3JlIEluZGljYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCSAgIDogNzsKKwl1bnNpZ25lZCBsb25nIGI2MSAgOiAxOworCXVuc2lnbmVkIGxvbmcgYXMgICA6IDI7ICAvKiBBU0NFIElkZW50aWZpZXIgKi8KK307CisKK2VudW0geworCUZTSV9VTktOT1dOID0gMCwgLyogVW5rbm93biB3ZXRoZXIgZmV0Y2ggb3Igc3RvcmUgKi8KKwlGU0lfU1RPUkUgICA9IDEsIC8qIEV4Y2VwdGlvbiB3YXMgZHVlIHRvIHN0b3JlIG9wZXJhdGlvbiAqLworCUZTSV9GRVRDSCAgID0gMiAgLyogRXhjZXB0aW9uIHdhcyBkdWUgdG8gZmV0Y2ggb3BlcmF0aW9uICovCit9OworCitzdGF0aWMgaW50IGd1ZXN0X3BhZ2VfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJICAgIGludCB3cml0ZSkKK3sKKwlzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gKnBnbSA9ICZ2Y3B1LT5hcmNoLnBnbTsKKwlwc3dfdCAqcHN3ID0gJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3OworCXN0cnVjdCB0cmFuc19leGNfY29kZV9iaXRzICp0ZWNfYml0czsKKwlpbnQgbGFwX2VuYWJsZWQsIHJjOworCisJbWVtc2V0KHBnbSwgMCwgc2l6ZW9mKCpwZ20pKTsKKwl0ZWNfYml0cyA9IChzdHJ1Y3QgdHJhbnNfZXhjX2NvZGVfYml0cyAqKSZwZ20tPnRyYW5zX2V4Y19jb2RlOworCXRlY19iaXRzLT5mc2kgPSB3cml0ZSA/IEZTSV9TVE9SRSA6IEZTSV9GRVRDSDsKKwl0ZWNfYml0cy0+YXMgPSBwc3dfYml0cygqcHN3KS5hczsKKwlsYXBfZW5hYmxlZCA9IGxvd19hZGRyZXNzX3Byb3RlY3Rpb25fZW5hYmxlZCh2Y3B1KTsKKwl3aGlsZSAobnJfcGFnZXMpIHsKKwkJZ2EgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYSk7CisJCXRlY19iaXRzLT5hZGRyID0gZ2EgPj4gUEFHRV9TSElGVDsKKwkJaWYgKHdyaXRlICYmIGxhcF9lbmFibGVkICYmIGlzX2xvd19hZGRyZXNzKGdhKSkgeworCQkJcGdtLT5jb2RlID0gUEdNX1BST1RFQ1RJT047CisJCQlyZXR1cm4gcGdtLT5jb2RlOworCQl9CisJCWdhICY9IFBBR0VfTUFTSzsKKwkJaWYgKHBzd19iaXRzKCpwc3cpLnQpIHsKKwkJCXJjID0gZ3Vlc3RfdHJhbnNsYXRlKHZjcHUsIGdhLCBwYWdlcywgd3JpdGUpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCQlpZiAocmMgPT0gUEdNX1BST1RFQ1RJT04pCisJCQkJdGVjX2JpdHMtPmI2MSA9IDE7CisJCQlpZiAocmMpCisJCQkJcGdtLT5jb2RlID0gcmM7CisJCX0gZWxzZSB7CisJCQkqcGFnZXMgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBnYSk7CisJCQlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sICpwYWdlcykpCisJCQkJcGdtLT5jb2RlID0gUEdNX0FERFJFU1NJTkc7CisJCX0KKwkJaWYgKHBnbS0+Y29kZSkKKwkJCXJldHVybiBwZ20tPmNvZGU7CisJCWdhICs9IFBBR0VfU0laRTsKKwkJcGFnZXMrKzsKKwkJbnJfcGFnZXMtLTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBhY2Nlc3NfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB2b2lkICpkYXRhLAorCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSkKK3sKKwlwc3dfdCAqcHN3ID0gJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3OworCXVuc2lnbmVkIGxvbmcgX2xlbiwgbnJfcGFnZXMsIGdwYSwgaWR4OworCXVuc2lnbmVkIGxvbmcgcGFnZXNfYXJyYXlbMl07CisJdW5zaWduZWQgbG9uZyAqcGFnZXM7CisJaW50IG5lZWRfaXB0ZV9sb2NrOworCXVuaW9uIGFzY2UgYXNjZTsKKwlpbnQgcmM7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisJLyogQWNjZXNzIHJlZ2lzdGVyIG1vZGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuICovCisJaWYgKHBzd19iaXRzKCpwc3cpLnQgJiYgcHN3X2JpdHMoKnBzdykuYXMgPT0gUFNXX0FTX0FDQ1JFRykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW5yX3BhZ2VzID0gKCgoZ2EgJiB+UEFHRV9NQVNLKSArIGxlbiAtIDEpID4+IFBBR0VfU0hJRlQpICsgMTsKKwlwYWdlcyA9IHBhZ2VzX2FycmF5OworCWlmIChucl9wYWdlcyA+IEFSUkFZX1NJWkUocGFnZXNfYXJyYXkpKQorCQlwYWdlcyA9IHZtYWxsb2MobnJfcGFnZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmICghcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCWFzY2UudmFsID0gZ2V0X3ZjcHVfYXNjZSh2Y3B1KTsKKwluZWVkX2lwdGVfbG9jayA9IHBzd19iaXRzKCpwc3cpLnQgJiYgIWFzY2UucjsKKwlpZiAobmVlZF9pcHRlX2xvY2spCisJCWlwdGVfbG9jayh2Y3B1KTsKKwlyYyA9IGd1ZXN0X3BhZ2VfcmFuZ2UodmNwdSwgZ2EsIHBhZ2VzLCBucl9wYWdlcywgd3JpdGUpOworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfcGFnZXMgJiYgIXJjOyBpZHgrKykgeworCQlncGEgPSAqKHBhZ2VzICsgaWR4KSArIChnYSAmIH5QQUdFX01BU0spOworCQlfbGVuID0gbWluKFBBR0VfU0laRSAtIChncGEgJiB+UEFHRV9NQVNLKSwgbGVuKTsKKwkJaWYgKHdyaXRlKQorCQkJcmMgPSBrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIF9sZW4pOworCQllbHNlCisJCQlyYyA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCBfbGVuKTsKKwkJbGVuIC09IF9sZW47CisJCWdhICs9IF9sZW47CisJCWRhdGEgKz0gX2xlbjsKKwl9CisJaWYgKG5lZWRfaXB0ZV9sb2NrKQorCQlpcHRlX3VubG9jayh2Y3B1KTsKKwlpZiAobnJfcGFnZXMgPiBBUlJBWV9TSVpFKHBhZ2VzX2FycmF5KSkKKwkJdmZyZWUocGFnZXMpOworCXJldHVybiByYzsKK30KKworaW50IGFjY2Vzc19ndWVzdF9yZWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEsCisJCSAgICAgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgd3JpdGUpCit7CisJdW5zaWduZWQgbG9uZyBfbGVuLCBncGE7CisJaW50IHJjID0gMDsKKworCXdoaWxlIChsZW4gJiYgIXJjKSB7CisJCWdwYSA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdyYSk7CisJCV9sZW4gPSBtaW4oUEFHRV9TSVpFIC0gKGdwYSAmIH5QQUdFX01BU0spLCBsZW4pOworCQlpZiAod3JpdGUpCisJCQlyYyA9IHdyaXRlX2d1ZXN0X2Ficyh2Y3B1LCBncGEsIGRhdGEsIF9sZW4pOworCQllbHNlCisJCQlyYyA9IHJlYWRfZ3Vlc3RfYWJzKHZjcHUsIGdwYSwgZGF0YSwgX2xlbik7CisJCWxlbiAtPSBfbGVuOworCQlncmEgKz0gX2xlbjsKKwkJZGF0YSArPSBfbGVuOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogZ3Vlc3RfdHJhbnNsYXRlX2FkZHJlc3MgLSB0cmFuc2xhdGUgZ3Vlc3QgbG9naWNhbCBpbnRvIGd1ZXN0IGFic29sdXRlIGFkZHJlc3MKKyAqCisgKiBQYXJhbWV0ZXIgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBmcm9tIGd1ZXN0X3RyYW5zbGF0ZS4KKyAqIFRoZSBtZW1vcnkgY29udGVudHMgYXQgdGhlIGd1ZXN0IGFkZHJlc3MgYXJlIG5vdCBjaGFuZ2VkLgorICoKKyAqIE5vdGU6IFRoZSBJUFRFIGxvY2sgaXMgbm90IHRha2VuIGR1cmluZyB0aGlzIGZ1bmN0aW9uLCBzbyB0aGUgY2FsbGVyCisgKiBoYXMgdG8gdGFrZSBjYXJlIG9mIHRoaXMuCisgKi8KK2ludCBndWVzdF90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmdwYSwgaW50IHdyaXRlKQoreworCXN0cnVjdCBrdm1fczM5MF9wZ21faW5mbyAqcGdtID0gJnZjcHUtPmFyY2gucGdtOworCXBzd190ICpwc3cgPSAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3c7CisJc3RydWN0IHRyYW5zX2V4Y19jb2RlX2JpdHMgKnRlYzsKKwl1bmlvbiBhc2NlIGFzY2U7CisJaW50IHJjOworCisJLyogQWNjZXNzIHJlZ2lzdGVyIG1vZGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuICovCisJaWYgKHBzd19iaXRzKCpwc3cpLnQgJiYgcHN3X2JpdHMoKnBzdykuYXMgPT0gUFNXX0FTX0FDQ1JFRykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZ3ZhID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ3ZhKTsKKwltZW1zZXQocGdtLCAwLCBzaXplb2YoKnBnbSkpOworCXRlYyA9IChzdHJ1Y3QgdHJhbnNfZXhjX2NvZGVfYml0cyAqKSZwZ20tPnRyYW5zX2V4Y19jb2RlOworCXRlYy0+YXMgPSBwc3dfYml0cygqcHN3KS5hczsKKwl0ZWMtPmZzaSA9IHdyaXRlID8gRlNJX1NUT1JFIDogRlNJX0ZFVENIOworCXRlYy0+YWRkciA9IGd2YSA+PiBQQUdFX1NISUZUOworCWlmIChpc19sb3dfYWRkcmVzcyhndmEpICYmIGxvd19hZGRyZXNzX3Byb3RlY3Rpb25fZW5hYmxlZCh2Y3B1KSkgeworCQlpZiAod3JpdGUpIHsKKwkJCXJjID0gcGdtLT5jb2RlID0gUEdNX1BST1RFQ1RJT047CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlhc2NlLnZhbCA9IGdldF92Y3B1X2FzY2UodmNwdSk7CisJaWYgKHBzd19iaXRzKCpwc3cpLnQgJiYgIWFzY2UucikgewkvKiBVc2UgREFUPyAqLworCQlyYyA9IGd1ZXN0X3RyYW5zbGF0ZSh2Y3B1LCBndmEsIGdwYSwgd3JpdGUpOworCQlpZiAocmMgPiAwKSB7CisJCQlpZiAocmMgPT0gUEdNX1BST1RFQ1RJT04pCisJCQkJdGVjLT5iNjEgPSAxOworCQkJcGdtLT5jb2RlID0gcmM7CisJCX0KKwl9IGVsc2UgeworCQlyYyA9IDA7CisJCSpncGEgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBndmEpOworCQlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sICpncGEpKQorCQkJcmMgPSBwZ20tPmNvZGUgPSBQR01fQUREUkVTU0lORzsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICoga3ZtX3MzOTBfY2hlY2tfbG93X2FkZHJfcHJvdGVjdGlvbiAtIGNoZWNrIGZvciBsb3ctYWRkcmVzcyBwcm90ZWN0aW9uCisgKiBAZ2E6IEd1ZXN0IGFkZHJlc3MKKyAqCisgKiBDaGVja3Mgd2hldGhlciBhbiBhZGRyZXNzIGlzIHN1YmplY3QgdG8gbG93LWFkZHJlc3MgcHJvdGVjdGlvbiBhbmQgc2V0CisgKiB1cCB2Y3B1LT5hcmNoLnBnbSBhY2NvcmRpbmdseSBpZiBuZWNlc3NhcnkuCisgKgorICogUmV0dXJuOiAwIGlmIG5vIHByb3RlY3Rpb24gZXhjZXB0aW9uLCBvciBQR01fUFJPVEVDVElPTiBpZiBwcm90ZWN0ZWQuCisgKi8KK2ludCBrdm1fczM5MF9jaGVja19sb3dfYWRkcl9wcm90ZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSkKK3sKKwlzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gKnBnbSA9ICZ2Y3B1LT5hcmNoLnBnbTsKKwlwc3dfdCAqcHN3ID0gJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3OworCXN0cnVjdCB0cmFuc19leGNfY29kZV9iaXRzICp0ZWNfYml0czsKKworCWlmICghaXNfbG93X2FkZHJlc3MoZ2EpIHx8ICFsb3dfYWRkcmVzc19wcm90ZWN0aW9uX2VuYWJsZWQodmNwdSkpCisJCXJldHVybiAwOworCisJbWVtc2V0KHBnbSwgMCwgc2l6ZW9mKCpwZ20pKTsKKwl0ZWNfYml0cyA9IChzdHJ1Y3QgdHJhbnNfZXhjX2NvZGVfYml0cyAqKSZwZ20tPnRyYW5zX2V4Y19jb2RlOworCXRlY19iaXRzLT5mc2kgPSBGU0lfU1RPUkU7CisJdGVjX2JpdHMtPmFzID0gcHN3X2JpdHMoKnBzdykuYXM7CisJdGVjX2JpdHMtPmFkZHIgPSBnYSA+PiBQQUdFX1NISUZUOworCXBnbS0+Y29kZSA9IFBHTV9QUk9URUNUSU9OOworCisJcmV0dXJuIHBnbS0+Y29kZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oIGIvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgKaW5kZXggMzc0YTQzOS4uMDE0OWNmMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYWNjZXNzIGd1ZXN0IG1lbW9yeQogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LCAyMDE0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMiBvbmx5KQpAQCAtMTUsMTAwICsxNSwzMjEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlICJrdm0tczM5MC5oIgogCi0vKiBDb252ZXJ0IHJlYWwgdG8gYWJzb2x1dGUgYWRkcmVzcyBieSBhcHBseWluZyB0aGUgcHJlZml4IG9mIHRoZSBDUFUgKi8KKy8qKgorICoga3ZtX3MzOTBfcmVhbF90b19hYnMgLSBjb252ZXJ0IGd1ZXN0IHJlYWwgYWRkcmVzcyB0byBndWVzdCBhYnNvbHV0ZSBhZGRyZXNzCisgKiBAdmNwdSAtIGd1ZXN0IHZpcnR1YWwgY3B1CisgKiBAZ3JhIC0gZ3Vlc3QgcmVhbCBhZGRyZXNzCisgKgorICogUmV0dXJucyB0aGUgZ3Vlc3QgYWJzb2x1dGUgYWRkcmVzcyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwYXNzZWQgZ3Vlc3QgcmVhbAorICogYWRkcmVzcyBAZ3JhIG9mIGEgdmlydHVhbCBndWVzdCBjcHUgYnkgYXBwbHlpbmcgaXRzIHByZWZpeC4KKyAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9zMzkwX3JlYWxfdG9fYWJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIGdhZGRyKQorCQkJCQkJIHVuc2lnbmVkIGxvbmcgZ3JhKQogewotCXVuc2lnbmVkIGxvbmcgcHJlZml4ICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXg7Ci0JaWYgKGdhZGRyIDwgMiAqIFBBR0VfU0laRSkKLQkJZ2FkZHIgKz0gcHJlZml4OwotCWVsc2UgaWYgKGdhZGRyID49IHByZWZpeCAmJiBnYWRkciA8IHByZWZpeCArIDIgKiBQQUdFX1NJWkUpCi0JCWdhZGRyIC09IHByZWZpeDsKLQlyZXR1cm4gZ2FkZHI7CisJdW5zaWduZWQgbG9uZyBwcmVmaXggID0ga3ZtX3MzOTBfZ2V0X3ByZWZpeCh2Y3B1KTsKKworCWlmIChncmEgPCAyICogUEFHRV9TSVpFKQorCQlncmEgKz0gcHJlZml4OworCWVsc2UgaWYgKGdyYSA+PSBwcmVmaXggJiYgZ3JhIDwgcHJlZml4ICsgMiAqIFBBR0VfU0laRSkKKwkJZ3JhIC09IHByZWZpeDsKKwlyZXR1cm4gZ3JhOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpfX2dwdHJfdG9fdXB0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJCSAgdm9pZCBfX3VzZXIgKmdwdHIsCi0JCQkJCSAgaW50IHByZWZpeGluZykKKy8qKgorICoga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUgLSBjb252ZXJ0IGd1ZXN0IGxvZ2ljYWwgdG8gZWZmZWN0aXZlIGFkZHJlc3MKKyAqIEB2Y3B1OiBndWVzdCB2aXJ0dWFsIGNwdQorICogQGdhOiBndWVzdCBsb2dpY2FsIGFkZHJlc3MKKyAqCisgKiBDb252ZXJ0IGEgZ3Vlc3QgdmNwdSBsb2dpY2FsIGFkZHJlc3MgdG8gYSBndWVzdCB2Y3B1IGVmZmVjdGl2ZSBhZGRyZXNzIGJ5CisgKiBhcHBseWluZyB0aGUgcnVsZXMgb2YgdGhlIHZjcHUncyBhZGRyZXNzaW5nIG1vZGUgZGVmaW5lZCBieSBQU1cgYml0cyAzMQorICogYW5kIDMyIChleHRlbmRlbmRlZC9iYXNpYyBhZGRyZXNzaW5nIG1vZGUpLgorICoKKyAqIERlcGVuZGluZyBvbiB0aGUgdmNwdSdzIGFkZHJlc3NpbmcgbW9kZSB0aGUgdXBwZXIgNDAgYml0cyAoMjQgYml0IGFkZHJlc3NpbmcKKyAqIG1vZGUpLCAzMyBiaXRzICgzMSBiaXQgYWRkcmVzc2luZyBtb2RlKSBvciBubyBiaXRzICg2NCBiaXQgYWRkcmVzc2luZyBtb2RlKQorICogb2YgQGdhIHdpbGwgYmUgemVyb2VkIGFuZCB0aGUgcmVtYWluaW5nIGJpdHMgd2lsbCBiZSByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJCQkgIHVuc2lnbmVkIGxvbmcgZ2EpCiB7Ci0JdW5zaWduZWQgbG9uZyBnYWRkciA9ICh1bnNpZ25lZCBsb25nKSBncHRyOwotCXVuc2lnbmVkIGxvbmcgdWFkZHI7CisJcHN3X3QgKnBzdyA9ICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdzsKIAotCWlmIChwcmVmaXhpbmcpCi0JCWdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpOwotCXVhZGRyID0gZ21hcF9mYXVsdChnYWRkciwgdmNwdS0+YXJjaC5nbWFwKTsKLQlpZiAoSVNfRVJSX1ZBTFVFKHVhZGRyKSkKLQkJdWFkZHIgPSAtRUZBVUxUOwotCXJldHVybiAodm9pZCBfX3VzZXIgKil1YWRkcjsKKwlpZiAocHN3X2JpdHMoKnBzdykuZWFiYSA9PSBQU1dfQU1PREVfNjRCSVQpCisJCXJldHVybiBnYTsKKwlpZiAocHN3X2JpdHMoKnBzdykuZWFiYSA9PSBQU1dfQU1PREVfMzFCSVQpCisJCXJldHVybiBnYSAmICgoMVVMIDw8IDMxKSAtIDEpOworCXJldHVybiBnYSAmICgoMVVMIDw8IDI0KSAtIDEpOwogfQogCi0jZGVmaW5lIGdldF9ndWVzdCh2Y3B1LCB4LCBncHRyKQkJCQlcCisvKgorICogcHV0X2d1ZXN0X2xjLCByZWFkX2d1ZXN0X2xjIGFuZCB3cml0ZV9ndWVzdF9sYyBhcmUgZ3Vlc3QgYWNjZXNzIGZ1bmN0aW9ucworICogd2hpY2ggc2hhbGwgb25seSBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgbG93Y29yZSBvZiBhIHZjcHUuCisgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgZm9yIGUuZy4gaW50ZXJydXB0IGhhbmRsZXJzIHdoZXJlIG5vCisgKiBndWVzdCBtZW1vcnkgYWNjZXNzIHByb3RlY3Rpb24gZmFjaWxpdGllcywgbGlrZSBrZXkgb3IgbG93IGFkZHJlc3MKKyAqIHByb3RlY3Rpb24sIGFyZSBhcHBsaWNhYmxlLgorICogQXQgYSBsYXRlciBwb2ludCBndWVzdCB2Y3B1IGxvd2NvcmUgYWNjZXNzIHNob3VsZCBoYXBwZW4gdmlhIHBpbm5lZAorICogcHJlZml4IHBhZ2VzLCBzbyB0aGF0IHRoZXNlIHBhZ2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlCisgKiBrZXJuZWwgbWFwcGluZy4gQWxsIG9mIHRoZXNlICpfbGMgZnVuY3Rpb25zIGNhbiBiZSByZW1vdmVkIHRoZW4uCisgKi8KKworLyoqCisgKiBwdXRfZ3Vlc3RfbGMgLSB3cml0ZSBhIHNpbXBsZSB2YXJpYWJsZSB0byBhIGd1ZXN0IHZjcHUncyBsb3djb3JlCisgKiBAdmNwdTogdmlydHVhbCBjcHUKKyAqIEB4OiB2YWx1ZSB0byBjb3B5IHRvIGd1ZXN0CisgKiBAZ3JhOiB2Y3B1J3MgZGVzdGluYXRpb24gZ3Vlc3QgcmVhbCBhZGRyZXNzCisgKgorICogQ29waWVzIGEgc2ltcGxlIHZhbHVlIGZyb20ga2VybmVsIHNwYWNlIHRvIGEgZ3Vlc3QgdmNwdSdzIGxvd2NvcmUuCisgKiBUaGUgc2l6ZSBvZiB0aGUgdmFyaWFibGUgbWF5IGJlIDEsIDIsIDQgb3IgOCBieXRlcy4gVGhlIGRlc3RpbmF0aW9uCisgKiBtdXN0IGJlIGxvY2F0ZWQgaW4gdGhlIHZjcHUncyBsb3djb3JlLiBPdGhlcndpc2UgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqCisgKiBOb3RlOiBhbiBlcnJvciBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgdGhlIGtlcm5lbCBpcyBvdXQgb2YgbWVtb3J5IG9yCisgKgkgdGhlIGd1ZXN0IG1lbW9yeSBtYXBwaW5nIGlzIGJyb2tlbi4gSW4gYW55IGNhc2UgdGhlIGJlc3Qgc29sdXRpb24KKyAqCSB3b3VsZCBiZSB0byB0ZXJtaW5hdGUgdGhlIGd1ZXN0LgorICoJIEl0IGlzIHdyb25nIHRvIGluamVjdCBhIGd1ZXN0IGV4Y2VwdGlvbi4KKyAqLworI2RlZmluZSBwdXRfZ3Vlc3RfbGModmNwdSwgeCwgZ3JhKQkJCQlcCiAoewkJCQkJCQkJXAotCV9fdHlwZW9mX18oZ3B0cikgX191cHRyID0gX19ncHRyX3RvX3VwdHIodmNwdSwgZ3B0ciwgMSk7XAotCWludCBfX21hc2sgPSBzaXplb2YoX190eXBlb2ZfXygqKGdwdHIpKSkgLSAxOwkJXAotCWludCBfX3JldDsJCQkJCQlcCisJc3RydWN0IGt2bV92Y3B1ICpfX3ZjcHUgPSAodmNwdSk7CQkJXAorCV9fdHlwZW9mX18oKihncmEpKSBfX3ggPSAoeCk7CQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3BhOwkJCQkJXAogCQkJCQkJCQlcCi0JaWYgKElTX0VSUigodm9pZCBfX2ZvcmNlICopX191cHRyKSkgewkJCVwKLQkJX19yZXQgPSBQVFJfRVJSKCh2b2lkIF9fZm9yY2UgKilfX3VwdHIpOwlcCi0JfSBlbHNlIHsJCQkJCQlcCi0JCUJVR19PTigodW5zaWduZWQgbG9uZylfX3VwdHIgJiBfX21hc2spOwkJXAotCQlfX3JldCA9IGdldF91c2VyKHgsIF9fdXB0cik7CQkJXAotCX0JCQkJCQkJXAotCV9fcmV0OwkJCQkJCQlcCisJX19ncGEgPSAodW5zaWduZWQgbG9uZykoZ3JhKTsJCQkJXAorCV9fZ3BhICs9IGt2bV9zMzkwX2dldF9wcmVmaXgoX192Y3B1KTsJCQlcCisJa3ZtX3dyaXRlX2d1ZXN0KF9fdmNwdS0+a3ZtLCBfX2dwYSwgJl9feCwgc2l6ZW9mKF9feCkpOwlcCiB9KQogCi0jZGVmaW5lIHB1dF9ndWVzdCh2Y3B1LCB4LCBncHRyKQkJCQlcCi0oewkJCQkJCQkJXAotCV9fdHlwZW9mX18oZ3B0cikgX191cHRyID0gX19ncHRyX3RvX3VwdHIodmNwdSwgZ3B0ciwgMSk7XAotCWludCBfX21hc2sgPSBzaXplb2YoX190eXBlb2ZfXygqKGdwdHIpKSkgLSAxOwkJXAotCWludCBfX3JldDsJCQkJCQlcCi0JCQkJCQkJCVwKLQlpZiAoSVNfRVJSKCh2b2lkIF9fZm9yY2UgKilfX3VwdHIpKSB7CQkJXAotCQlfX3JldCA9IFBUUl9FUlIoKHZvaWQgX19mb3JjZSAqKV9fdXB0cik7CVwKLQl9IGVsc2UgewkJCQkJCVwKLQkJQlVHX09OKCh1bnNpZ25lZCBsb25nKV9fdXB0ciAmIF9fbWFzayk7CQlcCi0JCV9fcmV0ID0gcHV0X3VzZXIoeCwgX191cHRyKTsJCQlcCi0JfQkJCQkJCQlcCi0JX19yZXQ7CQkJCQkJCVwKLX0pCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9fY29weV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdG8sCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCSAgICAgICBpbnQgdG9fZ3Vlc3QsIGludCBwcmVmaXhpbmcpCisvKioKKyAqIHdyaXRlX2d1ZXN0X2xjIC0gY29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIGd1ZXN0IHZjcHUncyBsb3djb3JlCisgKiBAdmNwdTogdmlydHVhbCBjcHUKKyAqIEBncmE6IHZjcHUncyBzb3VyY2UgZ3Vlc3QgcmVhbCBhZGRyZXNzCisgKiBAZGF0YTogc291cmNlIGFkZHJlc3MgaW4ga2VybmVsIHNwYWNlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIENvcHkgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0byBndWVzdCB2Y3B1J3MgbG93Y29yZS4gVGhlIGVudGlyZSByYW5nZSBtdXN0CisgKiBiZSBsb2NhdGVkIHdpdGhpbiB0aGUgdmNwdSdzIGxvd2NvcmUsIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciAtRUZBVUxUIG9uIGVycm9yLgorICoKKyAqIE5vdGU6IGFuIGVycm9yIGluZGljYXRlcyB0aGF0IGVpdGhlciB0aGUga2VybmVsIGlzIG91dCBvZiBtZW1vcnkgb3IKKyAqCSB0aGUgZ3Vlc3QgbWVtb3J5IG1hcHBpbmcgaXMgYnJva2VuLiBJbiBhbnkgY2FzZSB0aGUgYmVzdCBzb2x1dGlvbgorICoJIHdvdWxkIGJlIHRvIHRlcm1pbmF0ZSB0aGUgZ3Vlc3QuCisgKgkgSXQgaXMgd3JvbmcgdG8gaW5qZWN0IGEgZ3Vlc3QgZXhjZXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjaworaW50IHdyaXRlX2d1ZXN0X2xjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEsIHZvaWQgKmRhdGEsCisJCSAgIHVuc2lnbmVkIGxvbmcgbGVuKQogewotCXVuc2lnbmVkIGxvbmcgX2xlbiwgcmM7Ci0Jdm9pZCBfX3VzZXIgKnVwdHI7CisJdW5zaWduZWQgbG9uZyBncGEgPSBncmEgKyBrdm1fczM5MF9nZXRfcHJlZml4KHZjcHUpOwogCi0Jd2hpbGUgKGxlbikgewotCQl1cHRyID0gdG9fZ3Vlc3QgPyAodm9pZCBfX3VzZXIgKil0byA6ICh2b2lkIF9fdXNlciAqKWZyb207Ci0JCXVwdHIgPSBfX2dwdHJfdG9fdXB0cih2Y3B1LCB1cHRyLCBwcmVmaXhpbmcpOwotCQlpZiAoSVNfRVJSKCh2b2lkIF9fZm9yY2UgKil1cHRyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlfbGVuID0gUEFHRV9TSVpFIC0gKCh1bnNpZ25lZCBsb25nKXVwdHIgJiAoUEFHRV9TSVpFIC0gMSkpOwotCQlfbGVuID0gbWluKF9sZW4sIGxlbik7Ci0JCWlmICh0b19ndWVzdCkKLQkJCXJjID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSB1cHRyLCAodm9pZCAqKWZyb20sIF9sZW4pOwotCQllbHNlCi0JCQlyYyA9IGNvcHlfZnJvbV91c2VyKCh2b2lkICopdG8sICh2b2lkIF9fdXNlciAqKXVwdHIsIF9sZW4pOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJbGVuIC09IF9sZW47Ci0JCWZyb20gKz0gX2xlbjsKLQkJdG8gKz0gX2xlbjsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGt2bV93cml0ZV9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgbGVuKTsKIH0KIAotI2RlZmluZSBjb3B5X3RvX2d1ZXN0KHZjcHUsIHRvLCBmcm9tLCBzaXplKSBcCi0JX19jb3B5X2d1ZXN0KHZjcHUsIHRvLCAodW5zaWduZWQgbG9uZylmcm9tLCBzaXplLCAxLCAxKQotI2RlZmluZSBjb3B5X2Zyb21fZ3Vlc3QodmNwdSwgdG8sIGZyb20sIHNpemUpIFwKLQlfX2NvcHlfZ3Vlc3QodmNwdSwgKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIHNpemUsIDAsIDEpCi0jZGVmaW5lIGNvcHlfdG9fZ3Vlc3RfYWJzb2x1dGUodmNwdSwgdG8sIGZyb20sIHNpemUpIFwKLQlfX2NvcHlfZ3Vlc3QodmNwdSwgdG8sICh1bnNpZ25lZCBsb25nKWZyb20sIHNpemUsIDEsIDApCi0jZGVmaW5lIGNvcHlfZnJvbV9ndWVzdF9hYnNvbHV0ZSh2Y3B1LCB0bywgZnJvbSwgc2l6ZSkgXAotCV9fY29weV9ndWVzdCh2Y3B1LCAodW5zaWduZWQgbG9uZyl0bywgZnJvbSwgc2l6ZSwgMCwgMCkKKy8qKgorICogcmVhZF9ndWVzdF9sYyAtIGNvcHkgZGF0YSBmcm9tIGd1ZXN0IHZjcHUncyBsb3djb3JlIHRvIGtlcm5lbCBzcGFjZQorICogQHZjcHU6IHZpcnR1YWwgY3B1CisgKiBAZ3JhOiB2Y3B1J3Mgc291cmNlIGd1ZXN0IHJlYWwgYWRkcmVzcworICogQGRhdGE6IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4ga2VybmVsIHNwYWNlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIENvcHkgZGF0YSBmcm9tIGd1ZXN0IHZjcHUncyBsb3djb3JlIHRvIGtlcm5lbCBzcGFjZS4gVGhlIGVudGlyZSByYW5nZSBtdXN0CisgKiBiZSBsb2NhdGVkIHdpdGhpbiB0aGUgdmNwdSdzIGxvd2NvcmUsIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciAtRUZBVUxUIG9uIGVycm9yLgorICoKKyAqIE5vdGU6IGFuIGVycm9yIGluZGljYXRlcyB0aGF0IGVpdGhlciB0aGUga2VybmVsIGlzIG91dCBvZiBtZW1vcnkgb3IKKyAqCSB0aGUgZ3Vlc3QgbWVtb3J5IG1hcHBpbmcgaXMgYnJva2VuLiBJbiBhbnkgY2FzZSB0aGUgYmVzdCBzb2x1dGlvbgorICoJIHdvdWxkIGJlIHRvIHRlcm1pbmF0ZSB0aGUgZ3Vlc3QuCisgKgkgSXQgaXMgd3JvbmcgdG8gaW5qZWN0IGEgZ3Vlc3QgZXhjZXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjaworaW50IHJlYWRfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSwKKwkJICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGdwYSA9IGdyYSArIGt2bV9zMzkwX2dldF9wcmVmaXgodmNwdSk7CisKKwlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIGxlbik7Cit9CisKK2ludCBndWVzdF90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmdwYSwgaW50IHdyaXRlKTsKKworaW50IGFjY2Vzc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHZvaWQgKmRhdGEsCisJCSB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHdyaXRlKTsKKworaW50IGFjY2Vzc19ndWVzdF9yZWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEsCisJCSAgICAgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgd3JpdGUpOworCisvKioKKyAqIHdyaXRlX2d1ZXN0IC0gY29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIGd1ZXN0IHNwYWNlCisgKiBAdmNwdTogdmlydHVhbCBjcHUKKyAqIEBnYTogZ3Vlc3QgYWRkcmVzcworICogQGRhdGE6IHNvdXJjZSBhZGRyZXNzIGluIGtlcm5lbCBzcGFjZQorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiBDb3B5IEBsZW4gYnl0ZXMgZnJvbSBAZGF0YSAoa2VybmVsIHNwYWNlKSB0byBAZ2EgKGd1ZXN0IGFkZHJlc3MpLgorICogSW4gb3JkZXIgdG8gY29weSBkYXRhIHRvIGd1ZXN0IHNwYWNlIHRoZSBQU1cgb2YgdGhlIHZjcHUgaXMgaW5zcGVjdGVkOgorICogSWYgREFUIGlzIG9mZiBkYXRhIHdpbGwgYmUgY29waWVkIHRvIGd1ZXN0IHJlYWwgb3IgYWJzb2x1dGUgbWVtb3J5LgorICogSWYgREFUIGlzIG9uIGRhdGEgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGFkZHJlc3Mgc3BhY2UgYXMgc3BlY2lmaWVkIGJ5CisgKiB0aGUgYWRkcmVzcyBzcGFjZSBiaXRzIG9mIHRoZSBQU1c6CisgKiBQcmltYXJ5LCBzZWNvbmRvcnkgb3IgaG9tZSBzcGFjZSAoYWNjZXNzIHJlZ2lzdGVyIG1vZGUgaXMgY3VycmVudGx5IG5vdAorICogaW1wbGVtZW50ZWQpLgorICogVGhlIGFkZHJlc3NpbmcgbW9kZSBvZiB0aGUgUFNXIGlzIGFsc28gaW5zcGVjdGVkLCBzbyB0aGF0IGFkZHJlc3Mgd3JhcAorICogYXJvdW5kIGlzIHRha2VuIGludG8gYWNjb3VudCBmb3IgMjQtLCAzMS0gYW5kIDY0LWJpdCBhZGRyZXNzaW5nIG1vZGUsCisgKiBpZiB0aGUgdG8gYmUgY29waWVkIGRhdGEgY3Jvc3NlcyBwYWdlIGJvdW5kYXJpZXMgaW4gZ3Vlc3QgYWRkcmVzcyBzcGFjZS4KKyAqIEluIGFkZGl0aW9uIGFsc28gbG93IGFkZHJlc3MgYW5kIERBVCBwcm90ZWN0aW9uIGFyZSBpbnNwZWN0ZWQgYmVmb3JlCisgKiBjb3B5aW5nIGFueSBkYXRhIChrZXkgcHJvdGVjdGlvbiBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSAnc3RydWN0IGt2bV9zMzkwX3BnbV9pbmZvIHBnbScgbWVtYmVyIG9mIEB2Y3B1LgorICogSW4gY2FzZSBvZiBhbiBhY2Nlc3MgZXhjZXB0aW9uIChlLmcuIHByb3RlY3Rpb24gZXhjZXB0aW9uKSBwZ20gd2lsbCBjb250YWluCisgKiBhbGwgZGF0YSBuZWNlc3Nhcnkgc28gdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0byAna3ZtX3MzOTBfaW5qZWN0X3Byb2dfdmNwdSgpJworICogd2lsbCBpbmplY3QgYSBjb3JyZWN0IGV4Y2VwdGlvbiBpbnRvIHRoZSBndWVzdC4KKyAqIElmIG5vIGFjY2VzcyBleGNlcHRpb24gaGFwcGVuZWQsIHRoZSBjb250ZW50cyBvZiBwZ20gYXJlIHVuZGVmaW5lZCB3aGVuCisgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKgorICogUmV0dXJuczogIC0gemVybyBvbiBzdWNjZXNzCisgKgkgICAgIC0gYSBuZWdhdGl2ZSB2YWx1ZSBpZiBlLmcuIHRoZSBndWVzdCBtYXBwaW5nIGlzIGJyb2tlbiBvciBpbgorICoJICAgICAgIGNhc2Ugb2Ygb3V0LW9mLW1lbW9yeS4gSW4gdGhpcyBjYXNlIHRoZSBjb250ZW50cyBvZiBwZ20gYXJlCisgKgkgICAgICAgdW5kZWZpbmVkLiBBbHNvIHBhcnRzIG9mIEBkYXRhIG1heSBoYXZlIGJlZW4gY29waWVkIHRvIGd1ZXN0CisgKgkgICAgICAgc3BhY2UuCisgKgkgICAgIC0gYSBwb3NpdGl2ZSB2YWx1ZSBpZiBhbiBhY2Nlc3MgZXhjZXB0aW9uIGhhcHBlbmVkLiBJbiB0aGlzIGNhc2UKKyAqCSAgICAgICB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGUgYW5kIHRoZQorICoJICAgICAgIGNvbnRlbnRzIG9mIHBnbSBtYXkgYmUgdXNlZCB0byBpbmplY3QgYW4gZXhjZXB0aW9uIGludG8gdGhlCisgKgkgICAgICAgZ3Vlc3QuIE5vIGRhdGEgaGFzIGJlZW4gY29waWVkIHRvIGd1ZXN0IHNwYWNlLgorICoKKyAqIE5vdGU6IGluIGNhc2UgYW4gYWNjZXNzIGV4Y2VwdGlvbiBpcyByZWNvZ25pemVkIG5vIGRhdGEgaGFzIGJlZW4gY29waWVkIHRvCisgKgkgZ3Vlc3Qgc3BhY2UgKHRoaXMgaXMgYWxzbyB0cnVlLCBpZiB0aGUgdG8gYmUgY29waWVkIGRhdGEgd291bGQgY3Jvc3MKKyAqCSBvbmUgb3IgbW9yZSBwYWdlIGJvdW5kYXJpZXMgaW4gZ3Vlc3Qgc3BhY2UpLgorICoJIFRoZXJlZm9yZSB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGZvciBudWxsaWZ5aW5nIGFuZCBzdXBwcmVzc2luZworICoJIGluc3RydWN0aW9uIGVtdWxhdGlvbi4KKyAqCSBJdCBtYXkgYWxzbyBiZSB1c2VkIGZvciB0ZXJtaW5hdGluZyBpbnN0cnVjdGlvbnMsIGlmIGl0IGlzIHVuZGVmaW5lZAorICoJIGlmIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCBpbiBndWVzdCBzcGFjZSBpbiBjYXNlIG9mIGFuIGV4Y2VwdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sKK2ludCB3cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHZvaWQgKmRhdGEsCisJCXVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiBhY2Nlc3NfZ3Vlc3QodmNwdSwgZ2EsIGRhdGEsIGxlbiwgMSk7Cit9CisKKy8qKgorICogcmVhZF9ndWVzdCAtIGNvcHkgZGF0YSBmcm9tIGd1ZXN0IHNwYWNlIHRvIGtlcm5lbCBzcGFjZQorICogQHZjcHU6IHZpcnR1YWwgY3B1CisgKiBAZ2E6IGd1ZXN0IGFkZHJlc3MKKyAqIEBkYXRhOiBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGtlcm5lbCBzcGFjZQorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiBDb3B5IEBsZW4gYnl0ZXMgZnJvbSBAZ2EgKGd1ZXN0IGFkZHJlc3MpIHRvIEBkYXRhIChrZXJuZWwgc3BhY2UpLgorICoKKyAqIFRoZSBiZWhhdmlvdXIgb2YgcmVhZF9ndWVzdCBpcyBpZGVudGljYWwgdG8gd3JpdGVfZ3Vlc3QsIGV4Y2VwdCB0aGF0CisgKiBkYXRhIHdpbGwgYmUgY29waWVkIGZyb20gZ3Vlc3Qgc3BhY2UgdG8ga2VybmVsIHNwYWNlLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjaworaW50IHJlYWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB2b2lkICpkYXRhLAorCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlyZXR1cm4gYWNjZXNzX2d1ZXN0KHZjcHUsIGdhLCBkYXRhLCBsZW4sIDApOworfQorCisvKioKKyAqIHdyaXRlX2d1ZXN0X2FicyAtIGNvcHkgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0byBndWVzdCBzcGFjZSBhYnNvbHV0ZQorICogQHZjcHU6IHZpcnR1YWwgY3B1CisgKiBAZ3BhOiBndWVzdCBwaHlzaWNhbCAoYWJzb2x1dGUpIGFkZHJlc3MKKyAqIEBkYXRhOiBzb3VyY2UgYWRkcmVzcyBpbiBrZXJuZWwgc3BhY2UKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKgorICogQ29weSBAbGVuIGJ5dGVzIGZyb20gQGRhdGEgKGtlcm5lbCBzcGFjZSkgdG8gQGdwYSAoZ3Vlc3QgYWJzb2x1dGUgYWRkcmVzcykuCisgKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgZ3Vlc3QgbWVtb3J5IHJhbmdlIGlzCisgKiB2YWxpZCBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIEd1ZXN0IGxvdyBhZGRyZXNzIGFuZCBrZXkgcHJvdGVjdGlvbiBhcmUgbm90IGNoZWNrZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqCisgKiBJZiBhbiBlcnJvciBvY2N1cnMgZGF0YSBtYXkgaGF2ZSBiZWVuIGNvcGllZCBwYXJ0aWFsbHkgdG8gZ3Vlc3QgbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjaworaW50IHdyaXRlX2d1ZXN0X2FicyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3BhLCB2b2lkICpkYXRhLAorCQkgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJcmV0dXJuIGt2bV93cml0ZV9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgbGVuKTsKK30KKworLyoqCisgKiByZWFkX2d1ZXN0X2FicyAtIGNvcHkgZGF0YSBmcm9tIGd1ZXN0IHNwYWNlIGFic29sdXRlIHRvIGtlcm5lbCBzcGFjZQorICogQHZjcHU6IHZpcnR1YWwgY3B1CisgKiBAZ3BhOiBndWVzdCBwaHlzaWNhbCAoYWJzb2x1dGUpIGFkZHJlc3MKKyAqIEBkYXRhOiBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGtlcm5lbCBzcGFjZQorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiBDb3B5IEBsZW4gYnl0ZXMgZnJvbSBAZ3BhIChndWVzdCBhYnNvbHV0ZSBhZGRyZXNzKSB0byBAZGF0YSAoa2VybmVsIHNwYWNlKS4KKyAqIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGVudGlyZSBndWVzdCBtZW1vcnkgcmFuZ2UgaXMKKyAqIHZhbGlkIG1lbW9yeSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICogR3Vlc3Qga2V5IHByb3RlY3Rpb24gaXMgbm90IGNoZWNrZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqCisgKiBJZiBhbiBlcnJvciBvY2N1cnMgZGF0YSBtYXkgaGF2ZSBiZWVuIGNvcGllZCBwYXJ0aWFsbHkgdG8ga2VybmVsIHNwYWNlLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjaworaW50IHJlYWRfZ3Vlc3RfYWJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncGEsIHZvaWQgKmRhdGEsCisJCSAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgbGVuKTsKK30KKworLyoqCisgKiB3cml0ZV9ndWVzdF9yZWFsIC0gY29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIGd1ZXN0IHNwYWNlIHJlYWwKKyAqIEB2Y3B1OiB2aXJ0dWFsIGNwdQorICogQGdyYTogZ3Vlc3QgcmVhbCBhZGRyZXNzCisgKiBAZGF0YTogc291cmNlIGFkZHJlc3MgaW4ga2VybmVsIHNwYWNlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIENvcHkgQGxlbiBieXRlcyBmcm9tIEBkYXRhIChrZXJuZWwgc3BhY2UpIHRvIEBncmEgKGd1ZXN0IHJlYWwgYWRkcmVzcykuCisgKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgZ3Vlc3QgbWVtb3J5IHJhbmdlIGlzCisgKiB2YWxpZCBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIEd1ZXN0IGxvdyBhZGRyZXNzIGFuZCBrZXkgcHJvdGVjdGlvbiBhcmUgbm90IGNoZWNrZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVCBvbiBlcnJvci4KKyAqCisgKiBJZiBhbiBlcnJvciBvY2N1cnMgZGF0YSBtYXkgaGF2ZSBiZWVuIGNvcGllZCBwYXJ0aWFsbHkgdG8gZ3Vlc3QgbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjaworaW50IHdyaXRlX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSwKKwkJICAgICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlyZXR1cm4gYWNjZXNzX2d1ZXN0X3JlYWwodmNwdSwgZ3JhLCBkYXRhLCBsZW4sIDEpOworfQorCisvKioKKyAqIHJlYWRfZ3Vlc3RfcmVhbCAtIGNvcHkgZGF0YSBmcm9tIGd1ZXN0IHNwYWNlIHJlYWwgdG8ga2VybmVsIHNwYWNlCisgKiBAdmNwdTogdmlydHVhbCBjcHUKKyAqIEBncmE6IGd1ZXN0IHJlYWwgYWRkcmVzcworICogQGRhdGE6IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4ga2VybmVsIHNwYWNlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIENvcHkgQGxlbiBieXRlcyBmcm9tIEBncmEgKGd1ZXN0IHJlYWwgYWRkcmVzcykgdG8gQGRhdGEgKGtlcm5lbCBzcGFjZSkuCisgKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgZ3Vlc3QgbWVtb3J5IHJhbmdlIGlzCisgKiB2YWxpZCBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIEd1ZXN0IGtleSBwcm90ZWN0aW9uIGlzIG5vdCBjaGVja2VkLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKgorICogSWYgYW4gZXJyb3Igb2NjdXJzIGRhdGEgbWF5IGhhdmUgYmVlbiBjb3BpZWQgcGFydGlhbGx5IHRvIGtlcm5lbCBzcGFjZS4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sKK2ludCByZWFkX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiBhY2Nlc3NfZ3Vlc3RfcmVhbCh2Y3B1LCBncmEsIGRhdGEsIGxlbiwgMCk7Cit9CisKK3ZvaWQgaXB0ZV9sb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGlwdGVfdW5sb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fczM5MF9jaGVja19sb3dfYWRkcl9wcm90ZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSk7CiAKICNlbmRpZiAvKiBfX0tWTV9TMzkwX0dBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jIGIvYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOGQ0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBrdm0gZ3Vlc3QgZGVidWcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxNAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIgb25seSkKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAgIEF1dGhvcihzKTogRGF2aWQgSGlsZGVuYnJhbmQgPGRhaGlAbGludXgudm5ldC5pYm0uY29tPgorICovCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgImt2bS1zMzkwLmgiCisjaW5jbHVkZSAiZ2FjY2Vzcy5oIgorCisvKgorICogRXh0ZW5kcyB0aGUgYWRkcmVzcyByYW5nZSBnaXZlbiBieSAqc3RhcnQgYW5kICpzdG9wIHRvIGluY2x1ZGUgdGhlIGFkZHJlc3MKKyAqIHJhbmdlIHN0YXJ0aW5nIHdpdGggZXN0YXJ0IGFuZCB0aGUgbGVuZ3RoIGxlbi4gVGFrZXMgY2FyZSBvZiBvdmVyZmxvd2luZworICogaW50ZXJ2YWxzIGFuZCB0cmllcyB0byBtaW5pbWl6ZSB0aGUgb3ZlcmFsbCBpbnRlcnZhbGwgc2l6ZS4KKyAqLworc3RhdGljIHZvaWQgZXh0ZW5kX2FkZHJlc3NfcmFuZ2UodTY0ICpzdGFydCwgdTY0ICpzdG9wLCB1NjQgZXN0YXJ0LCBpbnQgbGVuKQoreworCXU2NCBlc3RvcDsKKworCWlmIChsZW4gPiAwKQorCQlsZW4tLTsKKwllbHNlCisJCWxlbiA9IDA7CisKKwllc3RvcCA9IGVzdGFydCArIGxlbjsKKworCS8qIDAtMCByYW5nZSByZXByZXNlbnRzICJub3Qgc2V0IiAqLworCWlmICgoKnN0YXJ0ID09IDApICYmICgqc3RvcCA9PSAwKSkgeworCQkqc3RhcnQgPSBlc3RhcnQ7CisJCSpzdG9wID0gZXN0b3A7CisJfSBlbHNlIGlmICgqc3RhcnQgPD0gKnN0b3ApIHsKKwkJLyogaW5jcmVhc2UgdGhlIGV4aXN0aW5nIHJhbmdlICovCisJCWlmIChlc3RhcnQgPCAqc3RhcnQpCisJCQkqc3RhcnQgPSBlc3RhcnQ7CisJCWlmIChlc3RvcCA+ICpzdG9wKQorCQkJKnN0b3AgPSBlc3RvcDsKKwl9IGVsc2UgeworCQkvKiAib3ZlcmZsb3dpbmciIGludGVydmFsLCB3aGVyZWJ5ICpzdG9wID4gKnN0YXJ0ICovCisJCWlmIChlc3RhcnQgPD0gKnN0b3ApIHsKKwkJCWlmIChlc3RvcCA+ICpzdG9wKQorCQkJCSpzdG9wID0gZXN0b3A7CisJCX0gZWxzZSBpZiAoZXN0b3AgPiAqc3RhcnQpIHsKKwkJCWlmIChlc3RhcnQgPCAqc3RhcnQpCisJCQkJKnN0YXJ0ID0gZXN0YXJ0OworCQl9CisJCS8qIG1pbmltaXplIHRoZSByYW5nZSAqLworCQllbHNlIGlmICgoZXN0b3AgLSAqc3RvcCkgPCAoKnN0YXJ0IC0gZXN0YXJ0KSkKKwkJCSpzdG9wID0gZXN0b3A7CisJCWVsc2UKKwkJCSpzdGFydCA9IGVzdGFydDsKKwl9Cit9CisKKyNkZWZpbmUgTUFYX0lOU1RfU0laRSA2CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9hbGxfaHdfYnAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGxlbjsKKwl1NjQgKmNyOSA9ICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzldOworCXU2NCAqY3IxMCA9ICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzEwXTsKKwl1NjQgKmNyMTEgPSAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclsxMV07CisJaW50IGk7CisKKwlpZiAodmNwdS0+YXJjaC5ndWVzdGRiZy5ucl9od19icCA8PSAwIHx8CisJICAgIHZjcHUtPmFyY2guZ3Vlc3RkYmcuaHdfYnBfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBndWVzdCBpcyBub3QgaW50ZXJyZXN0ZWQgaW4gYnJhbmNoaW5nIGV2ZW50cywgd2UgY2FuIHNhdmVseQorCSAqIGxpbWl0IHRoZW0gdG8gdGhlIFBFUiBhZGRyZXNzIHJhbmdlLgorCSAqLworCWlmICghKCpjcjkgJiBQRVJfRVZFTlRfQlJBTkNIKSkKKwkJKmNyOSB8PSBQRVJfQ09OVFJPTF9CUkFOQ0hfQUREUkVTUzsKKwkqY3I5IHw9IFBFUl9FVkVOVF9JRkVUQ0ggfCBQRVJfRVZFTlRfQlJBTkNIOworCisJZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfYnA7IGkrKykgeworCQlzdGFydCA9IHZjcHUtPmFyY2guZ3Vlc3RkYmcuaHdfYnBfaW5mb1tpXS5hZGRyOworCQlsZW4gPSB2Y3B1LT5hcmNoLmd1ZXN0ZGJnLmh3X2JwX2luZm9baV0ubGVuOworCisJCS8qCisJCSAqIFRoZSBpbnN0cnVjdGlvbiBpbiBmcm9udCBvZiB0aGUgZGVzaXJlZCBicCBoYXMgdG8KKwkJICogcmVwb3J0IGluc3RydWN0aW9uLWZldGNoaW5nIGV2ZW50cworCQkgKi8KKwkJaWYgKHN0YXJ0IDwgTUFYX0lOU1RfU0laRSkgeworCQkJbGVuICs9IHN0YXJ0OworCQkJc3RhcnQgPSAwOworCQl9IGVsc2UgeworCQkJc3RhcnQgLT0gTUFYX0lOU1RfU0laRTsKKwkJCWxlbiArPSBNQVhfSU5TVF9TSVpFOworCQl9CisKKwkJZXh0ZW5kX2FkZHJlc3NfcmFuZ2UoY3IxMCwgY3IxMSwgc3RhcnQsIGxlbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBlbmFibGVfYWxsX2h3X3dwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBsZW47CisJdTY0ICpjcjkgPSAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjcls5XTsKKwl1NjQgKmNyMTAgPSAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclsxMF07CisJdTY0ICpjcjExID0gJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbMTFdOworCWludCBpOworCisJaWYgKHZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfd3AgPD0gMCB8fAorCSAgICB2Y3B1LT5hcmNoLmd1ZXN0ZGJnLmh3X3dwX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogaWYgaG9zdCB1c2VzIHN0b3JhZ2UgYWx0ZXJuYXRpb24gZm9yIHNwZWNpYWwgYWRkcmVzcworCSAqIHNwYWNlcywgZW5hYmxlIGFsbCBldmVudHMgYW5kIGdpdmUgYWxsIHRvIHRoZSBndWVzdCAqLworCWlmICgqY3I5ICYgUEVSX0VWRU5UX1NUT1JFICYmICpjcjkgJiBQRVJfQ09OVFJPTF9BTFRFUkFUSU9OKSB7CisJCSpjcjkgJj0gflBFUl9DT05UUk9MX0FMVEVSQVRJT047CisJCSpjcjEwID0gMDsKKwkJKmNyMTEgPSBQU1dfQUREUl9JTlNOOworCX0gZWxzZSB7CisJCSpjcjkgJj0gflBFUl9DT05UUk9MX0FMVEVSQVRJT047CisJCSpjcjkgfD0gUEVSX0VWRU5UX1NUT1JFOworCisJCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmd1ZXN0ZGJnLm5yX2h3X3dwOyBpKyspIHsKKwkJCXN0YXJ0ID0gdmNwdS0+YXJjaC5ndWVzdGRiZy5od193cF9pbmZvW2ldLmFkZHI7CisJCQlsZW4gPSB2Y3B1LT5hcmNoLmd1ZXN0ZGJnLmh3X3dwX2luZm9baV0ubGVuOworCisJCQlleHRlbmRfYWRkcmVzc19yYW5nZShjcjEwLCBjcjExLCBzdGFydCwgbGVuKTsKKwkJfQorCX0KK30KKwordm9pZCBrdm1fczM5MF9iYWNrdXBfZ3Vlc3RfcGVyX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2guZ3Vlc3RkYmcuY3IwID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclswXTsKKwl2Y3B1LT5hcmNoLmd1ZXN0ZGJnLmNyOSA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbOV07CisJdmNwdS0+YXJjaC5ndWVzdGRiZy5jcjEwID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclsxMF07CisJdmNwdS0+YXJjaC5ndWVzdGRiZy5jcjExID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclsxMV07Cit9CisKK3ZvaWQga3ZtX3MzOTBfcmVzdG9yZV9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclswXSA9IHZjcHUtPmFyY2guZ3Vlc3RkYmcuY3IwOworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbOV0gPSB2Y3B1LT5hcmNoLmd1ZXN0ZGJnLmNyOTsKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzEwXSA9IHZjcHUtPmFyY2guZ3Vlc3RkYmcuY3IxMDsKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzExXSA9IHZjcHUtPmFyY2guZ3Vlc3RkYmcuY3IxMTsKK30KKwordm9pZCBrdm1fczM5MF9wYXRjaF9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJLyoKKwkgKiBUT0RPOiBpZiBndWVzdCBwc3cgaGFzIHBlciBlbmFibGVkLCBvdGhlcndpc2UgMHMhCisJICogVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgcmVwb3J0ZWQgZXZlbnRzLgorCSAqIE5lZWQgdG8gaW50ZXJjZXB0IGFsbCBwc3cgY2hhbmdlcyEKKwkgKi8KKworCWlmIChndWVzdGRiZ19zc3RlcF9lbmFibGVkKHZjcHUpKSB7CisJCS8qIGRpc2FibGUgdGltZXIgKGNsb2NrLWNvbXBhcmF0b3IpIGludGVycnVwdHMgKi8KKwkJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclswXSAmPSB+MHg4MDB1bDsKKwkJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjcls5XSB8PSBQRVJfRVZFTlRfSUZFVENIOworCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzEwXSA9IDA7CisJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbMTFdID0gUFNXX0FERFJfSU5TTjsKKwl9CisKKwlpZiAoZ3Vlc3RkYmdfaHdfYnBfZW5hYmxlZCh2Y3B1KSkgeworCQllbmFibGVfYWxsX2h3X2JwKHZjcHUpOworCQllbmFibGVfYWxsX2h3X3dwKHZjcHUpOworCX0KKworCS8qIFRPRE86IEluc3RydWN0aW9uLWZldGNoaW5nLW51bGxpZmljYXRpb24gbm90IGFsbG93ZWQgZm9yIG5vdyAqLworCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzldICYgUEVSX0VWRU5UX05VTExJRklDQVRJT04pCisJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbOV0gJj0gflBFUl9FVkVOVF9OVUxMSUZJQ0FUSU9OOworfQorCisjZGVmaW5lIE1BWF9XUF9TSVpFIDEwMAorCitzdGF0aWMgaW50IF9faW1wb3J0X3dwX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgIHN0cnVjdCBrdm1faHdfYnJlYWtwb2ludCAqYnBfZGF0YSwKKwkJCSAgICBzdHJ1Y3Qga3ZtX2h3X3dwX2luZm9fYXJjaCAqd3BfaW5mbykKK3sKKwlpbnQgcmV0ID0gMDsKKwl3cF9pbmZvLT5sZW4gPSBicF9kYXRhLT5sZW47CisJd3BfaW5mby0+YWRkciA9IGJwX2RhdGEtPmFkZHI7CisJd3BfaW5mby0+cGh5c19hZGRyID0gYnBfZGF0YS0+cGh5c19hZGRyOworCXdwX2luZm8tPm9sZF9kYXRhID0gTlVMTDsKKworCWlmICh3cF9pbmZvLT5sZW4gPCAwIHx8IHdwX2luZm8tPmxlbiA+IE1BWF9XUF9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdwX2luZm8tPm9sZF9kYXRhID0ga21hbGxvYyhicF9kYXRhLT5sZW4sIEdGUF9LRVJORUwpOworCWlmICghd3BfaW5mby0+b2xkX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCS8qIHRyeSB0byBiYWNrdXAgdGhlIG9yaWdpbmFsIHZhbHVlICovCisJcmV0ID0gcmVhZF9ndWVzdCh2Y3B1LCB3cF9pbmZvLT5waHlzX2FkZHIsIHdwX2luZm8tPm9sZF9kYXRhLAorCQkJIHdwX2luZm8tPmxlbik7CisJaWYgKHJldCkgeworCQlrZnJlZSh3cF9pbmZvLT5vbGRfZGF0YSk7CisJCXdwX2luZm8tPm9sZF9kYXRhID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BWF9CUF9DT1VOVCA1MAorCitpbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKK3sKKwlpbnQgcmV0ID0gMCwgbnJfd3AgPSAwLCBucl9icCA9IDAsIGksIHNpemU7CisJc3RydWN0IGt2bV9od19icmVha3BvaW50ICpicF9kYXRhID0gTlVMTDsKKwlzdHJ1Y3Qga3ZtX2h3X3dwX2luZm9fYXJjaCAqd3BfaW5mbyA9IE5VTEw7CisJc3RydWN0IGt2bV9od19icF9pbmZvX2FyY2ggKmJwX2luZm8gPSBOVUxMOworCisJaWYgKGRiZy0+YXJjaC5ucl9od19icCA8PSAwIHx8ICFkYmctPmFyY2guaHdfYnApCisJCXJldHVybiAwOworCWVsc2UgaWYgKGRiZy0+YXJjaC5ucl9od19icCA+IE1BWF9CUF9DT1VOVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaXplID0gZGJnLT5hcmNoLm5yX2h3X2JwICogc2l6ZW9mKHN0cnVjdCBrdm1faHdfYnJlYWtwb2ludCk7CisJYnBfZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicF9kYXRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGJwX2RhdGEsIGRiZy0+YXJjaC5od19icCwgc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGJnLT5hcmNoLm5yX2h3X2JwOyBpKyspIHsKKwkJc3dpdGNoIChicF9kYXRhW2ldLnR5cGUpIHsKKwkJY2FzZSBLVk1fSFdfV1BfV1JJVEU6CisJCQlucl93cCsrOworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX0hXX0JQOgorCQkJbnJfYnArKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzaXplID0gbnJfd3AgKiBzaXplb2Yoc3RydWN0IGt2bV9od193cF9pbmZvX2FyY2gpOworCWlmIChzaXplID4gMCkgeworCQl3cF9pbmZvID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF3cF9pbmZvKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKwlzaXplID0gbnJfYnAgKiBzaXplb2Yoc3RydWN0IGt2bV9od19icF9pbmZvX2FyY2gpOworCWlmIChzaXplID4gMCkgeworCQlicF9pbmZvID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFicF9pbmZvKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCWZvciAobnJfd3AgPSAwLCBucl9icCA9IDAsIGkgPSAwOyBpIDwgZGJnLT5hcmNoLm5yX2h3X2JwOyBpKyspIHsKKwkJc3dpdGNoIChicF9kYXRhW2ldLnR5cGUpIHsKKwkJY2FzZSBLVk1fSFdfV1BfV1JJVEU6CisJCQlyZXQgPSBfX2ltcG9ydF93cF9pbmZvKHZjcHUsICZicF9kYXRhW2ldLAorCQkJCQkgICAgICAgJndwX2luZm9bbnJfd3BdKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJvcjsKKwkJCW5yX3dwKys7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSFdfQlA6CisJCQlicF9pbmZvW25yX2JwXS5sZW4gPSBicF9kYXRhW2ldLmxlbjsKKwkJCWJwX2luZm9bbnJfYnBdLmFkZHIgPSBicF9kYXRhW2ldLmFkZHI7CisJCQlucl9icCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl2Y3B1LT5hcmNoLmd1ZXN0ZGJnLm5yX2h3X2JwID0gbnJfYnA7CisJdmNwdS0+YXJjaC5ndWVzdGRiZy5od19icF9pbmZvID0gYnBfaW5mbzsKKwl2Y3B1LT5hcmNoLmd1ZXN0ZGJnLm5yX2h3X3dwID0gbnJfd3A7CisJdmNwdS0+YXJjaC5ndWVzdGRiZy5od193cF9pbmZvID0gd3BfaW5mbzsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCWtmcmVlKGJwX2RhdGEpOworCWtmcmVlKHdwX2luZm8pOworCWtmcmVlKGJwX2luZm8pOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQga3ZtX3MzOTBfY2xlYXJfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9od193cF9pbmZvX2FyY2ggKmh3X3dwX2luZm8gPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfd3A7IGkrKykgeworCQlod193cF9pbmZvID0gJnZjcHUtPmFyY2guZ3Vlc3RkYmcuaHdfd3BfaW5mb1tpXTsKKwkJa2ZyZWUoaHdfd3BfaW5mby0+b2xkX2RhdGEpOworCQlod193cF9pbmZvLT5vbGRfZGF0YSA9IE5VTEw7CisJfQorCWtmcmVlKHZjcHUtPmFyY2guZ3Vlc3RkYmcuaHdfd3BfaW5mbyk7CisJdmNwdS0+YXJjaC5ndWVzdGRiZy5od193cF9pbmZvID0gTlVMTDsKKworCWtmcmVlKHZjcHUtPmFyY2guZ3Vlc3RkYmcuaHdfYnBfaW5mbyk7CisJdmNwdS0+YXJjaC5ndWVzdGRiZy5od19icF9pbmZvID0gTlVMTDsKKworCXZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfd3AgPSAwOworCXZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfYnAgPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbl9hZGRyX3JhbmdlKHU2NCBhZGRyLCB1NjQgYSwgdTY0IGIpCit7CisJaWYgKGEgPD0gYikKKwkJcmV0dXJuIChhZGRyID49IGEpICYmIChhZGRyIDw9IGIpOworCWVsc2UKKwkJLyogIm92ZXJmbG93aW5nIiBpbnRlcnZhbCAqLworCQlyZXR1cm4gKGFkZHIgPD0gYSkgJiYgKGFkZHIgPj0gYik7Cit9CisKKyNkZWZpbmUgZW5kX29mX3JhbmdlKGJwX2luZm8pIChicF9pbmZvLT5hZGRyICsgYnBfaW5mby0+bGVuIC0gMSkKKworc3RhdGljIHN0cnVjdCBrdm1faHdfYnBfaW5mb19hcmNoICpmaW5kX2h3X2JwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBrdm1faHdfYnBfaW5mb19hcmNoICpicF9pbmZvID0gdmNwdS0+YXJjaC5ndWVzdGRiZy5od19icF9pbmZvOworCWludCBpOworCisJaWYgKHZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfYnAgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmNwdS0+YXJjaC5ndWVzdGRiZy5ucl9od19icDsgaSsrKSB7CisJCS8qIGFkZHIgaXMgZGlyZWN0bHkgdGhlIHN0YXJ0IG9yIGluIHRoZSByYW5nZSBvZiBhIGJwICovCisJCWlmIChhZGRyID09IGJwX2luZm8tPmFkZHIpCisJCQlnb3RvIGZvdW5kOworCQlpZiAoYnBfaW5mby0+bGVuID4gMCAmJgorCQkgICAgaW5fYWRkcl9yYW5nZShhZGRyLCBicF9pbmZvLT5hZGRyLCBlbmRfb2ZfcmFuZ2UoYnBfaW5mbykpKQorCQkJZ290byBmb3VuZDsKKworCQlicF9pbmZvKys7CisJfQorCisJcmV0dXJuIE5VTEw7Citmb3VuZDoKKwlyZXR1cm4gYnBfaW5mbzsKK30KKworc3RhdGljIHN0cnVjdCBrdm1faHdfd3BfaW5mb19hcmNoICphbnlfd3BfY2hhbmdlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9od193cF9pbmZvX2FyY2ggKndwX2luZm8gPSBOVUxMOworCXZvaWQgKnRlbXAgPSBOVUxMOworCisJaWYgKHZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfd3AgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmNwdS0+YXJjaC5ndWVzdGRiZy5ucl9od193cDsgaSsrKSB7CisJCXdwX2luZm8gPSAmdmNwdS0+YXJjaC5ndWVzdGRiZy5od193cF9pbmZvW2ldOworCQlpZiAoIXdwX2luZm8gfHwgIXdwX2luZm8tPm9sZF9kYXRhIHx8IHdwX2luZm8tPmxlbiA8PSAwKQorCQkJY29udGludWU7CisKKwkJdGVtcCA9IGttYWxsb2Mod3BfaW5mby0+bGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0ZW1wKQorCQkJY29udGludWU7CisKKwkJLyogcmVmZXRjaCB0aGUgd3AgZGF0YSBhbmQgY29tcGFyZSBpdCB0byB0aGUgb2xkIHZhbHVlICovCisJCWlmICghcmVhZF9ndWVzdCh2Y3B1LCB3cF9pbmZvLT5waHlzX2FkZHIsIHRlbXAsCisJCQkJd3BfaW5mby0+bGVuKSkgeworCQkJaWYgKG1lbWNtcCh0ZW1wLCB3cF9pbmZvLT5vbGRfZGF0YSwgd3BfaW5mby0+bGVuKSkgeworCQkJCWtmcmVlKHRlbXApOworCQkJCXJldHVybiB3cF9pbmZvOworCQkJfQorCQl9CisJCWtmcmVlKHRlbXApOworCQl0ZW1wID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBrdm1fczM5MF9wcmVwYXJlX2RlYnVnX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwl2Y3B1LT5ndWVzdF9kZWJ1ZyAmPSB+S1ZNX0dVRVNUREJHX0VYSVRfUEVORElORzsKK30KKworI2RlZmluZSBwZXJfYnBfZXZlbnQoY29kZSkgXAorCQkJKGNvZGUgJiAoUEVSX0VWRU5UX0lGRVRDSCB8IFBFUl9FVkVOVF9CUkFOQ0gpKQorI2RlZmluZSBwZXJfd3JpdGVfd3BfZXZlbnQoY29kZSkgXAorCQkJKGNvZGUgJiAoUEVSX0VWRU5UX1NUT1JFIHwgUEVSX0VWRU5UX1NUT1JFX1JFQUwpKQorCitzdGF0aWMgaW50IGRlYnVnX2V4aXRfcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXUzMiBwZXJjID0gKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wZXJjIDw8IDI0KTsKKwlzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCAqZGVidWdfZXhpdCA9ICZ2Y3B1LT5ydW4tPmRlYnVnLmFyY2g7CisJc3RydWN0IGt2bV9od193cF9pbmZvX2FyY2ggKndwX2luZm8gPSBOVUxMOworCXN0cnVjdCBrdm1faHdfYnBfaW5mb19hcmNoICpicF9pbmZvID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5hZGRyOworCXVuc2lnbmVkIGxvbmcgcGVyYWRkciA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wZXJhZGRyOworCisJaWYgKGd1ZXN0ZGJnX2h3X2JwX2VuYWJsZWQodmNwdSkpIHsKKwkJaWYgKHBlcl93cml0ZV93cF9ldmVudChwZXJjKSAmJgorCQkgICAgdmNwdS0+YXJjaC5ndWVzdGRiZy5ucl9od193cCA+IDApIHsKKwkJCXdwX2luZm8gPSBhbnlfd3BfY2hhbmdlZCh2Y3B1KTsKKwkJCWlmICh3cF9pbmZvKSB7CisJCQkJZGVidWdfZXhpdC0+YWRkciA9IHdwX2luZm8tPmFkZHI7CisJCQkJZGVidWdfZXhpdC0+dHlwZSA9IEtWTV9IV19XUF9XUklURTsKKwkJCQlnb3RvIGV4aXRfcmVxdWlyZWQ7CisJCQl9CisJCX0KKwkJaWYgKHBlcl9icF9ldmVudChwZXJjKSAmJgorCQkJIHZjcHUtPmFyY2guZ3Vlc3RkYmcubnJfaHdfYnAgPiAwKSB7CisJCQlicF9pbmZvID0gZmluZF9od19icCh2Y3B1LCBhZGRyKTsKKwkJCS8qIHJlbW92ZSBkdXBsaWNhdGUgZXZlbnRzIGlmIFBDPT1QRVIgYWRkcmVzcyAqLworCQkJaWYgKGJwX2luZm8gJiYgKGFkZHIgIT0gcGVyYWRkcikpIHsKKwkJCQlkZWJ1Z19leGl0LT5hZGRyID0gYWRkcjsKKwkJCQlkZWJ1Z19leGl0LT50eXBlID0gS1ZNX0hXX0JQOworCQkJCXZjcHUtPmFyY2guZ3Vlc3RkYmcubGFzdF9icCA9IGFkZHI7CisJCQkJZ290byBleGl0X3JlcXVpcmVkOworCQkJfQorCQkJLyogYnJlYWtwb2ludCBtaXNzZWQgKi8KKwkJCWJwX2luZm8gPSBmaW5kX2h3X2JwKHZjcHUsIHBlcmFkZHIpOworCQkJaWYgKGJwX2luZm8gJiYgdmNwdS0+YXJjaC5ndWVzdGRiZy5sYXN0X2JwICE9IHBlcmFkZHIpIHsKKwkJCQlkZWJ1Z19leGl0LT5hZGRyID0gcGVyYWRkcjsKKwkJCQlkZWJ1Z19leGl0LT50eXBlID0gS1ZNX0hXX0JQOworCQkJCWdvdG8gZXhpdF9yZXF1aXJlZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZ3Vlc3RkYmdfc3N0ZXBfZW5hYmxlZCh2Y3B1KSAmJiBwZXJfYnBfZXZlbnQocGVyYykpIHsKKwkJZGVidWdfZXhpdC0+YWRkciA9IGFkZHI7CisJCWRlYnVnX2V4aXQtPnR5cGUgPSBLVk1fU0lOR0xFU1RFUDsKKwkJZ290byBleGl0X3JlcXVpcmVkOworCX0KKworCXJldHVybiAwOworZXhpdF9yZXF1aXJlZDoKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBndWVzdF9wZXJfZW5hYmxlZCh2Y3B1KSBcCisJCQkgICAgICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUEVSKQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfZ3Vlc3RfcGVyX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1MzIgcGVyYyA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wZXJjIDw8IDI0OworCXU2NCBwZXJhZGRyID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPnBlcmFkZHI7CisJdTY0IGFkZHIgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5hZGRyOworCXU2NCBjcjkgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzldOworCXU2NCBjcjEwID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclsxMF07CisJdTY0IGNyMTEgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzExXTsKKwkvKiBmaWx0ZXIgYWxsIGV2ZW50cywgZGVtYW5kZWQgYnkgdGhlIGd1ZXN0ICovCisJdTMyIGd1ZXN0X3BlcmMgPSBwZXJjICYgY3I5ICYgUEVSX0VWRU5UX01BU0s7CisKKwlpZiAoIWd1ZXN0X3Blcl9lbmFibGVkKHZjcHUpKQorCQlndWVzdF9wZXJjID0gMDsKKworCS8qIGZpbHRlciAic3VjY2Vzc2Z1bC1icmFuY2hpbmciIGV2ZW50cyAqLworCWlmIChndWVzdF9wZXJjICYgUEVSX0VWRU5UX0JSQU5DSCAmJgorCSAgICBjcjkgJiBQRVJfQ09OVFJPTF9CUkFOQ0hfQUREUkVTUyAmJgorCSAgICAhaW5fYWRkcl9yYW5nZShhZGRyLCBjcjEwLCBjcjExKSkKKwkJZ3Vlc3RfcGVyYyAmPSB+UEVSX0VWRU5UX0JSQU5DSDsKKworCS8qIGZpbHRlciAiaW5zdHJ1Y3Rpb24tZmV0Y2hpbmciIGV2ZW50cyAqLworCWlmIChndWVzdF9wZXJjICYgUEVSX0VWRU5UX0lGRVRDSCAmJgorCSAgICAhaW5fYWRkcl9yYW5nZShwZXJhZGRyLCBjcjEwLCBjcjExKSkKKwkJZ3Vlc3RfcGVyYyAmPSB+UEVSX0VWRU5UX0lGRVRDSDsKKworCS8qIEFsbCBvdGhlciBQRVIgZXZlbnRzIHdpbGwgYmUgZ2l2ZW4gdG8gdGhlIGd1ZXN0ICovCisJLyogVE9ETzogQ2hlY2sgYWx0ZXJhdGVkIGFkZHJlc3MvYWRkcmVzcyBzcGFjZSAqLworCisJdmNwdS0+YXJjaC5zaWVfYmxvY2stPnBlcmMgPSBndWVzdF9wZXJjID4+IDI0OworCisJaWYgKCFndWVzdF9wZXJjKQorCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXByY2MgJj0gflBHTV9QRVI7Cit9CisKK3ZvaWQga3ZtX3MzOTBfaGFuZGxlX3Blcl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKGRlYnVnX2V4aXRfcmVxdWlyZWQodmNwdSkpCisJCXZjcHUtPmd1ZXN0X2RlYnVnIHw9IEtWTV9HVUVTVERCR19FWElUX1BFTkRJTkc7CisKKwlmaWx0ZXJfZ3Vlc3RfcGVyX2V2ZW50KHZjcHUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggZWViMWFjNy4uYTBiNTg2YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGluLWtlcm5lbCBoYW5kbGluZyBmb3Igc2llIGludGVyY2VwdHMKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwgMjAxNAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIgb25seSkKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKICNpbmNsdWRlIDxhc20va3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlICJrdm0tczM5MC5oIgogI2luY2x1ZGUgImdhY2Nlc3MuaCIKQEAgLTI5LDYgKzMxLDcgQEAKIAlbMHg4M10gPSBrdm1fczM5MF9oYW5kbGVfZGlhZywKIAlbMHhhZV0gPSBrdm1fczM5MF9oYW5kbGVfc2lncCwKIAlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfYjIsCisJWzB4YjZdID0ga3ZtX3MzOTBfaGFuZGxlX3N0Y3RsLAogCVsweGI3XSA9IGt2bV9zMzkwX2hhbmRsZV9sY3RsLAogCVsweGI5XSA9IGt2bV9zMzkwX2hhbmRsZV9iOSwKIAlbMHhlNV0gPSBrdm1fczM5MF9oYW5kbGVfZTUsCkBAIC00NCw5ICs0Nyw2IEBACiAJY2FzZSAweDEwOgogCQl2Y3B1LT5zdGF0LmV4aXRfZXh0ZXJuYWxfcmVxdWVzdCsrOwogCQlicmVhazsKLQljYXNlIDB4MTQ6Ci0JCXZjcHUtPnN0YXQuZXhpdF9leHRlcm5hbF9pbnRlcnJ1cHQrKzsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7IC8qIG5vdGhpbmcgKi8KIAl9CkBAIC02Myw4ICs2Myw3IEBACiAJdHJhY2Vfa3ZtX3MzOTBfc3RvcF9yZXF1ZXN0KHZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzKTsKIAogCWlmICh2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmIEFDVElPTl9TVE9QX09OX1NUT1ApIHsKLQkJYXRvbWljX3NldF9tYXNrKENQVVNUQVRfU1RPUFBFRCwKLQkJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKKwkJa3ZtX3MzOTBfdmNwdV9zdG9wKHZjcHUpOwogCQl2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmPSB+QUNUSU9OX1NUT1BfT05fU1RPUDsKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiJXMiLCAiY3B1IHN0b3BwZWQiKTsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKQEAgLTEwOSwyMiArMTA4LDEyMCBAQAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAorc3RhdGljIHZvaWQgX19leHRyYWN0X3Byb2dfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gKnBnbV9pbmZvKQoreworCW1lbXNldChwZ21faW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9wZ21faW5mbykpOworCXBnbV9pbmZvLT5jb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwcmNjOworCisJc3dpdGNoICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXByY2MgJiB+UEdNX1BFUikgeworCWNhc2UgUEdNX0FGWF9UUkFOU0xBVElPTjoKKwljYXNlIFBHTV9BU1hfVFJBTlNMQVRJT046CisJY2FzZSBQR01fRVhfVFJBTlNMQVRJT046CisJY2FzZSBQR01fTEZYX1RSQU5TTEFUSU9OOgorCWNhc2UgUEdNX0xTVEVfU0VRVUVOQ0U6CisJY2FzZSBQR01fTFNYX1RSQU5TTEFUSU9OOgorCWNhc2UgUEdNX0xYX1RSQU5TTEFUSU9OOgorCWNhc2UgUEdNX1BSSU1BUllfQVVUSE9SSVRZOgorCWNhc2UgUEdNX1NFQ09OREFSWV9BVVRIT1JJVFk6CisJY2FzZSBQR01fU1BBQ0VfU1dJVENIOgorCQlwZ21faW5mby0+dHJhbnNfZXhjX2NvZGUgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+dGVjbWM7CisJCWJyZWFrOworCWNhc2UgUEdNX0FMRU5fVFJBTlNMQVRJT046CisJY2FzZSBQR01fQUxFX1NFUVVFTkNFOgorCWNhc2UgUEdNX0FTVEVfSU5TVEFOQ0U6CisJY2FzZSBQR01fQVNURV9TRVFVRU5DRToKKwljYXNlIFBHTV9BU1RFX1ZBTElESVRZOgorCWNhc2UgUEdNX0VYVEVOREVEX0FVVEhPUklUWToKKwkJcGdtX2luZm8tPmV4Y19hY2Nlc3NfaWQgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWFpOworCQlicmVhazsKKwljYXNlIFBHTV9BU0NFX1RZUEU6CisJY2FzZSBQR01fUEFHRV9UUkFOU0xBVElPTjoKKwljYXNlIFBHTV9SRUdJT05fRklSU1RfVFJBTlM6CisJY2FzZSBQR01fUkVHSU9OX1NFQ09ORF9UUkFOUzoKKwljYXNlIFBHTV9SRUdJT05fVEhJUkRfVFJBTlM6CisJY2FzZSBQR01fU0VHTUVOVF9UUkFOU0xBVElPTjoKKwkJcGdtX2luZm8tPnRyYW5zX2V4Y19jb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPnRlY21jOworCQlwZ21faW5mby0+ZXhjX2FjY2Vzc19pZCAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWFpOworCQlwZ21faW5mby0+b3BfYWNjZXNzX2lkICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5vYWk7CisJCWJyZWFrOworCWNhc2UgUEdNX01PTklUT1I6CisJCXBnbV9pbmZvLT5tb25fY2xhc3NfbnIgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+bWNuOworCQlwZ21faW5mby0+bW9uX2NvZGUgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+dGVjbWM7CisJCWJyZWFrOworCWNhc2UgUEdNX0RBVEE6CisJCXBnbV9pbmZvLT5kYXRhX2V4Y19jb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmR4YzsKKwkJYnJlYWs7CisJY2FzZSBQR01fUFJPVEVDVElPTjoKKwkJcGdtX2luZm8tPnRyYW5zX2V4Y19jb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPnRlY21jOworCQlwZ21faW5mby0+ZXhjX2FjY2Vzc19pZCAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWFpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwcmNjICYgUEdNX1BFUikgeworCQlwZ21faW5mby0+cGVyX2NvZGUgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cGVyYzsKKwkJcGdtX2luZm8tPnBlcl9hdG1pZCA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wZXJhdG1pZDsKKwkJcGdtX2luZm8tPnBlcl9hZGRyZXNzID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPnBlcmFkZHI7CisJCXBnbV9pbmZvLT5wZXJfYWNjZXNzX2lkID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPnBlcmFpZDsKKwl9Cit9CisKKy8qCisgKiByZXN0b3JlIElUREIgdG8gcHJvZ3JhbS1pbnRlcnJ1cHRpb24gVERCIGluIGd1ZXN0IGxvd2NvcmUKKyAqIGFuZCBzZXQgVFggYWJvcnQgaW5kaWNhdGlvbiBpZiByZXF1aXJlZAorKi8KK3N0YXRpYyBpbnQgaGFuZGxlX2l0ZGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fczM5MF9pdGRiICppdGRiOworCWludCByYzsKKworCWlmICghSVNfVEVfRU5BQkxFRCh2Y3B1KSB8fCAhSVNfSVREQl9WQUxJRCh2Y3B1KSkKKwkJcmV0dXJuIDA7CisJaWYgKGN1cnJlbnQtPnRocmVhZC5wZXJfZmxhZ3MgJiBQRVJfRkxBR19OT19URSkKKwkJcmV0dXJuIDA7CisJaXRkYiA9IChzdHJ1Y3Qga3ZtX3MzOTBfaXRkYiAqKXZjcHUtPmFyY2guc2llX2Jsb2NrLT5pdGRiYTsKKwlyYyA9IHdyaXRlX2d1ZXN0X2xjKHZjcHUsIF9fTENfUEdNX1REQiwgaXRkYiwgc2l6ZW9mKCppdGRiKSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJbWVtc2V0KGl0ZGIsIDAsIHNpemVvZigqaXRkYikpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgcGVyX2V2ZW50KHZjcHUpICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXByY2MgJiBQR01fUEVSKQorCiBzdGF0aWMgaW50IGhhbmRsZV9wcm9nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gcGdtX2luZm87CisJcHN3X3QgcHN3OworCWludCByYzsKKwogCXZjcHUtPnN0YXQuZXhpdF9wcm9ncmFtX2ludGVycnVwdGlvbisrOwogCi0JLyogUmVzdG9yZSBJVERCIHRvIFByb2dyYW0tSW50ZXJydXB0aW9uIFREQiBpbiBndWVzdCBtZW1vcnkgKi8KLQlpZiAoSVNfVEVfRU5BQkxFRCh2Y3B1KSAmJgotCSAgICAhKGN1cnJlbnQtPnRocmVhZC5wZXJfZmxhZ3MgJiBQRVJfRkxBR19OT19URSkgJiYKLQkgICAgSVNfSVREQl9WQUxJRCh2Y3B1KSkgewotCQljb3B5X3RvX2d1ZXN0KHZjcHUsIFREQl9BRERSLCB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXRkYmEsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2l0ZGIpKTsKLQkJbWVtc2V0KCh2b2lkICopIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pdGRiYSwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfaXRkYikpOworCWlmIChndWVzdGRiZ19lbmFibGVkKHZjcHUpICYmIHBlcl9ldmVudCh2Y3B1KSkgeworCQlrdm1fczM5MF9oYW5kbGVfcGVyX2V2ZW50KHZjcHUpOworCQkvKiB0aGUgaW50ZXJydXB0IG1pZ2h0IGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQgY29tcGxldGVseSAqLworCQlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwcmNjID09IDApCisJCQlyZXR1cm4gMDsKIAl9CiAKIAl0cmFjZV9rdm1fczM5MF9pbnRlcmNlcHRfcHJvZyh2Y3B1LCB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXByY2MpOwotCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwcmNjKTsKKwlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwcmNjID09IFBHTV9TUEVDSUZJQ0FUSU9OKSB7CisJCXJjID0gcmVhZF9ndWVzdF9sYyh2Y3B1LCBfX0xDX1BHTV9ORVdfUFNXLCAmcHN3LCBzaXplb2YocHN3X3QpKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQkvKiBBdm9pZCBlbmRsZXNzIGxvb3BzIG9mIHNwZWNpZmljYXRpb24gZXhjZXB0aW9ucyAqLworCQlpZiAoIWlzX3ZhbGlkX3BzdygmcHN3KSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmMgPSBoYW5kbGVfaXRkYih2Y3B1KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCV9fZXh0cmFjdF9wcm9nX2lycSh2Y3B1LCAmcGdtX2luZm8pOworCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19pcnEodmNwdSwgJnBnbV9pbmZvKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfaW5zdHJ1Y3Rpb25fYW5kX3Byb2coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTQyLDE3ICsyMzksMTEwIEBACiAJcmV0dXJuIHJjMjsKIH0KIAorLyoqCisgKiBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0IC0gdXNlZCBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0aW9uIGludGVyY2VwdGlvbnMKKyAqCisgKiBUaGlzIGludGVyY2VwdGlvbiBvbmx5IG9jY3VycyBpZiB0aGUgQ1BVU1RBVF9FWFRfSU5UIGJpdCB3YXMgc2V0LCBvciBpZgorICogdGhlIG5ldyBQU1cgZG9lcyBub3QgaGF2ZSBleHRlcm5hbCBpbnRlcnJ1cHRzIGRpc2FibGVkLiBJbiB0aGUgZmlyc3QgY2FzZSwKKyAqIHdlJ3ZlIGdvdCB0byBkZWxpdmVyIHRoZSBpbnRlcnJ1cHQgbWFudWFsbHksIGFuZCBpbiB0aGUgc2Vjb25kIGNhc2UsIHdlCisgKiBkcm9wIHRvIHVzZXJzcGFjZSB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbiB0aGVyZS4KKyAqLworc3RhdGljIGludCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1MTYgZWljID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmVpYzsKKwlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IGlycTsKKwlwc3dfdCBuZXdwc3c7CisJaW50IHJjOworCisJdmNwdS0+c3RhdC5leGl0X2V4dGVybmFsX2ludGVycnVwdCsrOworCisJcmMgPSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfRVhUX05FV19QU1csICZuZXdwc3csIHNpemVvZihwc3dfdCkpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCS8qIFdlIGNhbiBub3QgaGFuZGxlIGNsb2NrIGNvbXBhcmF0b3Igb3IgdGltZXIgaW50ZXJydXB0IHdpdGggYmFkIFBTVyAqLworCWlmICgoZWljID09IEVYVF9JUlFfQ0xLX0NPTVAgfHwgZWljID09IEVYVF9JUlFfQ1BVX1RJTUVSKSAmJgorCSAgICAobmV3cHN3Lm1hc2sgJiBQU1dfTUFTS19FWFQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlzd2l0Y2ggKGVpYykgeworCWNhc2UgRVhUX0lSUV9DTEtfQ09NUDoKKwkJaXJxLnR5cGUgPSBLVk1fUzM5MF9JTlRfQ0xPQ0tfQ09NUDsKKwkJYnJlYWs7CisJY2FzZSBFWFRfSVJRX0NQVV9USU1FUjoKKwkJaXJxLnR5cGUgPSBLVk1fUzM5MF9JTlRfQ1BVX1RJTUVSOworCQlicmVhazsKKwljYXNlIEVYVF9JUlFfRVhURVJOQUxfQ0FMTDoKKwkJaWYgKGt2bV9zMzkwX3NpX2V4dF9jYWxsX3BlbmRpbmcodmNwdSkpCisJCQlyZXR1cm4gMDsKKwkJaXJxLnR5cGUgPSBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTDsKKwkJaXJxLnBhcm0gPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZXh0Y3B1YWRkcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiBrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCAmaXJxKTsKK30KKworLyoqCisgKiBIYW5kbGUgTU9WRSBQQUdFIHBhcnRpYWwgZXhlY3V0aW9uIGludGVyY2VwdGlvbi4KKyAqCisgKiBUaGlzIGludGVyY2VwdGlvbiBjYW4gb25seSBoYXBwZW4gZm9yIGd1ZXN0cyB3aXRoIERBVCBkaXNhYmxlZCBhbmQKKyAqIGFkZHJlc3NlcyB0aGF0IGFyZSBjdXJyZW50bHkgbm90IG1hcHBlZCBpbiB0aGUgaG9zdC4gVGh1cyB3ZSB0cnkgdG8KKyAqIHNldCB1cCB0aGUgbWFwcGluZ3MgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHVzZXIgcGFnZXMgaGVyZSAob3IgdGhyb3cKKyAqIGFkZHJlc3NpbmcgZXhjZXB0aW9ucyBpbiBjYXNlIG9mIGlsbGVnYWwgZ3Vlc3QgYWRkcmVzc2VzKS4KKyAqLworc3RhdGljIGludCBoYW5kbGVfbXZwZ19wZWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXBzd190ICpwc3cgPSAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3c7CisJdW5zaWduZWQgbG9uZyBzcmNhZGRyLCBkc3RhZGRyOworCWludCByZWcxLCByZWcyLCByYzsKKworCWt2bV9zMzkwX2dldF9yZWdzX3JyZSh2Y3B1LCAmcmVnMSwgJnJlZzIpOworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHNvdXJjZSBpcyBwYWdlZC1pbiAqLworCXNyY2FkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCB2Y3B1LT5ydW4tPnMucmVncy5ncHJzW3JlZzJdKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sIHNyY2FkZHIpKQorCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKKwlyYyA9IGt2bV9hcmNoX2ZhdWx0X2luX3BhZ2UodmNwdSwgc3JjYWRkciwgMCk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBwYWdlZC1pbiAqLworCWRzdGFkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCB2Y3B1LT5ydW4tPnMucmVncy5ncHJzW3JlZzFdKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sIGRzdGFkZHIpKQorCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKKwlyYyA9IGt2bV9hcmNoX2ZhdWx0X2luX3BhZ2UodmNwdSwgZHN0YWRkciwgMSk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXBzdy0+YWRkciA9IF9fcmV3aW5kX3BzdygqcHN3LCA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9wYXJ0aWFsX2V4ZWN1dGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgPT0gMHhiMjU0KQkvKiBNVlBHICovCisJCXJldHVybiBoYW5kbGVfbXZwZ19wZWkodmNwdSk7CisJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgPj4gOCA9PSAweGFlKQkvKiBTSUdQICovCisJCXJldHVybiBrdm1fczM5MF9oYW5kbGVfc2lncF9wZWkodmNwdSk7CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKIHN0YXRpYyBjb25zdCBpbnRlcmNlcHRfaGFuZGxlcl90IGludGVyY2VwdF9mdW5jc1tdID0gewogCVsweDAwID4+IDJdID0gaGFuZGxlX25vb3AsCiAJWzB4MDQgPj4gMl0gPSBoYW5kbGVfaW5zdHJ1Y3Rpb24sCiAJWzB4MDggPj4gMl0gPSBoYW5kbGVfcHJvZywKIAlbMHgwQyA+PiAyXSA9IGhhbmRsZV9pbnN0cnVjdGlvbl9hbmRfcHJvZywKIAlbMHgxMCA+PiAyXSA9IGhhbmRsZV9ub29wLAotCVsweDE0ID4+IDJdID0gaGFuZGxlX25vb3AsCisJWzB4MTQgPj4gMl0gPSBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0LAogCVsweDE4ID4+IDJdID0gaGFuZGxlX25vb3AsCiAJWzB4MUMgPj4gMl0gPSBrdm1fczM5MF9oYW5kbGVfd2FpdCwKIAlbMHgyMCA+PiAyXSA9IGhhbmRsZV92YWxpZGl0eSwKIAlbMHgyOCA+PiAyXSA9IGhhbmRsZV9zdG9wLAorCVsweDM4ID4+IDJdID0gaGFuZGxlX3BhcnRpYWxfZXhlY3V0aW9uLAogfTsKIAogaW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCAyMDBhOGY5Li45MGM4ZGUyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZpbmUgSU9JTlRfQ1NTSURfTUFTSyAweDAzZmMwMDAwCiAjZGVmaW5lIElPSU5UX0FJX01BU0sgMHgwNDAwMDAwMAogCitzdGF0aWMgdm9pZCBkZWxpdmVyX2NrY19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwogc3RhdGljIGludCBpc19pb2ludCh1NjQgdHlwZSkKIHsKIAlyZXR1cm4gKCh0eXBlICYgMHhmZmZlMDAwMHUpICE9IDB4ZmZmZTAwMDB1KTsKQEAgLTU2LDYgKzU4LDE3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgY2tjX2ludGVycnVwdHNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKHBzd19leHRpbnRfZGlzYWJsZWQodmNwdSkgfHwKKwkgICAgISh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzBdICYgMHg4MDB1bCkpCisJCXJldHVybiAwOworCWlmIChndWVzdGRiZ19lbmFibGVkKHZjcHUpICYmIGd1ZXN0ZGJnX3NzdGVwX2VuYWJsZWQodmNwdSkpCisJCS8qIE5vIHRpbWVyIGludGVycnVwdHMgd2hlbiBzaW5nbGUgc3RlcHBpbmcgKi8KKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyB1NjQgaW50X3dvcmRfdG9faXNjX2JpdHModTMyIGludF93b3JkKQogewogCXU4IGlzYyA9IChpbnRfd29yZCAmIDB4MzgwMDAwMDApID4+IDI3OwpAQCAtNzgsNiArOTEsMTQgQEAKIAkJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbMF0gJiAweDQwMDB1bCkKIAkJCXJldHVybiAxOwogCQlyZXR1cm4gMDsKKwljYXNlIEtWTV9TMzkwX0lOVF9DTE9DS19DT01QOgorCQlyZXR1cm4gY2tjX2ludGVycnVwdHNfZW5hYmxlZCh2Y3B1KTsKKwljYXNlIEtWTV9TMzkwX0lOVF9DUFVfVElNRVI6CisJCWlmIChwc3dfZXh0aW50X2Rpc2FibGVkKHZjcHUpKQorCQkJcmV0dXJuIDA7CisJCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzBdICYgMHg0MDB1bCkKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAljYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOgogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9JTklUOgogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOgpAQCAtMTI3LDExICsxNDgsMTYgQEAKIAogc3RhdGljIHZvaWQgX19yZXNldF9pbnRlcmNlcHRfaW5kaWNhdG9ycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYXRvbWljX2NsZWFyX21hc2soQ1BVU1RBVF9FQ0FMTF9QRU5EIHwKLQkJQ1BVU1RBVF9JT19JTlQgfCBDUFVTVEFUX0VYVF9JTlQgfCBDUFVTVEFUX1NUT1BfSU5ULAotCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKKwlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX0lPX0lOVCB8IENQVVNUQVRfRVhUX0lOVCB8IENQVVNUQVRfU1RPUF9JTlQsCisJCQkgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5sY3RsID0gMHgwMDAwOwotCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3RsICY9IH5JQ1RMX0xQU1c7CisJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmljdGwgJj0gfihJQ1RMX0xQU1cgfCBJQ1RMX1NUQ1RMIHwgSUNUTF9QSU5UKTsKKworCWlmIChndWVzdGRiZ19lbmFibGVkKHZjcHUpKSB7CisJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5sY3RsIHw9IChMQ1RMX0NSMCB8IExDVExfQ1I5IHwKKwkJCQkJICAgICAgIExDVExfQ1IxMCB8IExDVExfQ1IxMSk7CisJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3RsIHw9IChJQ1RMX1NUQ1RMIHwgSUNUTF9QSU5UKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9fc2V0X2NwdWZsYWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZmxhZykKQEAgLTE0OSw2ICsxNzUsOCBAQAogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9JTklUOgogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOgogCWNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzoKKwljYXNlIEtWTV9TMzkwX0lOVF9DTE9DS19DT01QOgorCWNhc2UgS1ZNX1MzOTBfSU5UX0NQVV9USU1FUjoKIAkJaWYgKHBzd19leHRpbnRfZGlzYWJsZWQodmNwdSkpCiAJCQlfX3NldF9jcHVmbGFnKHZjcHUsIENQVVNUQVRfRVhUX0lOVCk7CiAJCWVsc2UKQEAgLTE3NCw2ICsyMDIsMTA2IEBACiAJfQogfQogCitzdGF0aWMgaW50IF9fZGVsaXZlcl9wcm9nX2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gKnBnbV9pbmZvKQoreworCWNvbnN0IHVuc2lnbmVkIHNob3J0IHRhYmxlW10gPSB7IDIsIDQsIDQsIDYgfTsKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChwZ21faW5mby0+Y29kZSAmIH5QR01fUEVSKSB7CisJY2FzZSBQR01fQUZYX1RSQU5TTEFUSU9OOgorCWNhc2UgUEdNX0FTWF9UUkFOU0xBVElPTjoKKwljYXNlIFBHTV9FWF9UUkFOU0xBVElPTjoKKwljYXNlIFBHTV9MRlhfVFJBTlNMQVRJT046CisJY2FzZSBQR01fTFNURV9TRVFVRU5DRToKKwljYXNlIFBHTV9MU1hfVFJBTlNMQVRJT046CisJY2FzZSBQR01fTFhfVFJBTlNMQVRJT046CisJY2FzZSBQR01fUFJJTUFSWV9BVVRIT1JJVFk6CisJY2FzZSBQR01fU0VDT05EQVJZX0FVVEhPUklUWToKKwljYXNlIFBHTV9TUEFDRV9TV0lUQ0g6CisJCXJjID0gcHV0X2d1ZXN0X2xjKHZjcHUsIHBnbV9pbmZvLT50cmFuc19leGNfY29kZSwKKwkJCQkgICh1NjQgKilfX0xDX1RSQU5TX0VYQ19DT0RFKTsKKwkJYnJlYWs7CisJY2FzZSBQR01fQUxFTl9UUkFOU0xBVElPTjoKKwljYXNlIFBHTV9BTEVfU0VRVUVOQ0U6CisJY2FzZSBQR01fQVNURV9JTlNUQU5DRToKKwljYXNlIFBHTV9BU1RFX1NFUVVFTkNFOgorCWNhc2UgUEdNX0FTVEVfVkFMSURJVFk6CisJY2FzZSBQR01fRVhURU5ERURfQVVUSE9SSVRZOgorCQlyYyA9IHB1dF9ndWVzdF9sYyh2Y3B1LCBwZ21faW5mby0+ZXhjX2FjY2Vzc19pZCwKKwkJCQkgICh1OCAqKV9fTENfRVhDX0FDQ0VTU19JRCk7CisJCWJyZWFrOworCWNhc2UgUEdNX0FTQ0VfVFlQRToKKwljYXNlIFBHTV9QQUdFX1RSQU5TTEFUSU9OOgorCWNhc2UgUEdNX1JFR0lPTl9GSVJTVF9UUkFOUzoKKwljYXNlIFBHTV9SRUdJT05fU0VDT05EX1RSQU5TOgorCWNhc2UgUEdNX1JFR0lPTl9USElSRF9UUkFOUzoKKwljYXNlIFBHTV9TRUdNRU5UX1RSQU5TTEFUSU9OOgorCQlyYyA9IHB1dF9ndWVzdF9sYyh2Y3B1LCBwZ21faW5mby0+dHJhbnNfZXhjX2NvZGUsCisJCQkJICAodTY0ICopX19MQ19UUkFOU19FWENfQ09ERSk7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBwZ21faW5mby0+ZXhjX2FjY2Vzc19pZCwKKwkJCQkgICAodTggKilfX0xDX0VYQ19BQ0NFU1NfSUQpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPm9wX2FjY2Vzc19pZCwKKwkJCQkgICAodTggKilfX0xDX09QX0FDQ0VTU19JRCk7CisJCWJyZWFrOworCWNhc2UgUEdNX01PTklUT1I6CisJCXJjID0gcHV0X2d1ZXN0X2xjKHZjcHUsIHBnbV9pbmZvLT5tb25fY2xhc3NfbnIsCisJCQkJICAodTY0ICopX19MQ19NT05fQ0xBU1NfTlIpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPm1vbl9jb2RlLAorCQkJCSAgICh1NjQgKilfX0xDX01PTl9DT0RFKTsKKwkJYnJlYWs7CisJY2FzZSBQR01fREFUQToKKwkJcmMgPSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPmRhdGFfZXhjX2NvZGUsCisJCQkJICAodTMyICopX19MQ19EQVRBX0VYQ19DT0RFKTsKKwkJYnJlYWs7CisJY2FzZSBQR01fUFJPVEVDVElPTjoKKwkJcmMgPSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPnRyYW5zX2V4Y19jb2RlLAorCQkJCSAgKHU2NCAqKV9fTENfVFJBTlNfRVhDX0NPREUpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPmV4Y19hY2Nlc3NfaWQsCisJCQkJICAgKHU4ICopX19MQ19FWENfQUNDRVNTX0lEKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBnbV9pbmZvLT5jb2RlICYgUEdNX1BFUikgeworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPnBlcl9jb2RlLAorCQkJCSAgICh1OCAqKSBfX0xDX1BFUl9DT0RFKTsKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIHBnbV9pbmZvLT5wZXJfYXRtaWQsCisJCQkJICAgKHU4ICopX19MQ19QRVJfQVRNSUQpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgcGdtX2luZm8tPnBlcl9hZGRyZXNzLAorCQkJCSAgICh1NjQgKikgX19MQ19QRVJfQUREUkVTUyk7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBwZ21faW5mby0+cGVyX2FjY2Vzc19pZCwKKwkJCQkgICAodTggKikgX19MQ19QRVJfQUNDRVNTX0lEKTsKKwl9CisKKwlzd2l0Y2ggKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3B0Y29kZSkgeworCWNhc2UgSUNQVF9JTlNUOgorCWNhc2UgSUNQVF9JTlNUUFJPR0k6CisJY2FzZSBJQ1BUX09QRVJFWEM6CisJY2FzZSBJQ1BUX1BBUlRFWEVDOgorCWNhc2UgSUNQVF9JT0lOU1Q6CisJCS8qIGxhc3QgaW5zdHJ1Y3Rpb24gb25seSBzdG9yZWQgZm9yIHRoZXNlIGljcHRjb2RlcyAqLworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgdGFibGVbdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSA+PiAxNF0sCisJCQkJICAgKHUxNiAqKSBfX0xDX1BHTV9JTEMpOworCQlicmVhazsKKwljYXNlIElDUFRfUFJPR0k6CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cGdtaWxjLAorCQkJCSAgICh1MTYgKikgX19MQ19QR01fSUxDKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIDAsCisJCQkJICAgKHUxNiAqKSBfX0xDX1BHTV9JTEMpOworCX0KKworCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBwZ21faW5mby0+Y29kZSwKKwkJCSAgICh1MTYgKilfX0xDX1BHTV9JTlRfQ09ERSk7CisJcmMgfD0gd3JpdGVfZ3Vlc3RfbGModmNwdSwgX19MQ19QR01fT0xEX1BTVywKKwkJCSAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKKwlyYyB8PSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfUEdNX05FV19QU1csCisJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIHZvaWQgX19kb19kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogewpAQCAtMTg2LDI2ICszMTQsNDYgQEAKIAkJdmNwdS0+c3RhdC5kZWxpdmVyX2VtZXJnZW5jeV9zaWduYWwrKzsKIAkJdHJhY2Vfa3ZtX3MzOTBfZGVsaXZlcl9pbnRlcnJ1cHQodmNwdS0+dmNwdV9pZCwgaW50aS0+dHlwZSwKIAkJCQkJCSBpbnRpLT5lbWVyZy5jb2RlLCAwKTsKLQkJcmMgID0gcHV0X2d1ZXN0KHZjcHUsIDB4MTIwMSwgKHUxNiBfX3VzZXIgKilfX0xDX0VYVF9JTlRfQ09ERSk7Ci0JCXJjIHw9IHB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5lbWVyZy5jb2RlLAotCQkJCSh1MTYgX191c2VyICopX19MQ19FWFRfQ1BVX0FERFIpOwotCQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfRVhUX09MRF9QU1csCisJCXJjICA9IHB1dF9ndWVzdF9sYyh2Y3B1LCAweDEyMDEsICh1MTYgKilfX0xDX0VYVF9JTlRfQ09ERSk7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBpbnRpLT5lbWVyZy5jb2RlLAorCQkJCSAgICh1MTYgKilfX0xDX0VYVF9DUFVfQUREUik7CisJCXJjIHw9IHdyaXRlX2d1ZXN0X2xjKHZjcHUsIF9fTENfRVhUX09MRF9QU1csCisJCQkJICAgICAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csIHNpemVvZihwc3dfdCkpOworCQlyYyB8PSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfRVhUX05FV19QU1csCiAJCQkJICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdywgc2l6ZW9mKHBzd190KSk7Ci0JCXJjIHw9IGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csCi0JCQkJICAgICAgX19MQ19FWFRfTkVXX1BTVywgc2l6ZW9mKHBzd190KSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX0VYVEVSTkFMX0NBTEw6CiAJCVZDUFVfRVZFTlQodmNwdSwgNCwgIiVzIiwgImludGVycnVwdDogc2lncCBleHQgY2FsbCIpOwogCQl2Y3B1LT5zdGF0LmRlbGl2ZXJfZXh0ZXJuYWxfY2FsbCsrOwogCQl0cmFjZV9rdm1fczM5MF9kZWxpdmVyX2ludGVycnVwdCh2Y3B1LT52Y3B1X2lkLCBpbnRpLT50eXBlLAogCQkJCQkJIGludGktPmV4dGNhbGwuY29kZSwgMCk7Ci0JCXJjICA9IHB1dF9ndWVzdCh2Y3B1LCAweDEyMDIsICh1MTYgX191c2VyICopX19MQ19FWFRfSU5UX0NPREUpOwotCQlyYyB8PSBwdXRfZ3Vlc3QodmNwdSwgaW50aS0+ZXh0Y2FsbC5jb2RlLAotCQkJCSh1MTYgX191c2VyICopX19MQ19FWFRfQ1BVX0FERFIpOwotCQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfRVhUX09MRF9QU1csCisJCXJjICA9IHB1dF9ndWVzdF9sYyh2Y3B1LCAweDEyMDIsICh1MTYgKilfX0xDX0VYVF9JTlRfQ09ERSk7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBpbnRpLT5leHRjYWxsLmNvZGUsCisJCQkJICAgKHUxNiAqKV9fTENfRVhUX0NQVV9BRERSKTsKKwkJcmMgfD0gd3JpdGVfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfT0xEX1BTVywKKwkJCQkgICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKKwkJCQkgICAgIHNpemVvZihwc3dfdCkpOworCQlyYyB8PSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfRVhUX05FV19QU1csCisJCQkJICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKKwkJCQkgICAgc2l6ZW9mKHBzd190KSk7CisJCWJyZWFrOworCWNhc2UgS1ZNX1MzOTBfSU5UX0NMT0NLX0NPTVA6CisJCXRyYWNlX2t2bV9zMzkwX2RlbGl2ZXJfaW50ZXJydXB0KHZjcHUtPnZjcHVfaWQsIGludGktPnR5cGUsCisJCQkJCQkgaW50aS0+ZXh0LmV4dF9wYXJhbXMsIDApOworCQlkZWxpdmVyX2NrY19pbnRlcnJ1cHQodmNwdSk7CisJCWJyZWFrOworCWNhc2UgS1ZNX1MzOTBfSU5UX0NQVV9USU1FUjoKKwkJdHJhY2Vfa3ZtX3MzOTBfZGVsaXZlcl9pbnRlcnJ1cHQodmNwdS0+dmNwdV9pZCwgaW50aS0+dHlwZSwKKwkJCQkJCSBpbnRpLT5leHQuZXh0X3BhcmFtcywgMCk7CisJCXJjICA9IHB1dF9ndWVzdF9sYyh2Y3B1LCBFWFRfSVJRX0NQVV9USU1FUiwKKwkJCQkgICAodTE2ICopX19MQ19FWFRfSU5UX0NPREUpOworCQlyYyB8PSB3cml0ZV9ndWVzdF9sYyh2Y3B1LCBfX0xDX0VYVF9PTERfUFNXLAorCQkJCSAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAorCQkJCSAgICAgc2l6ZW9mKHBzd190KSk7CisJCXJjIHw9IHJlYWRfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfTkVXX1BTVywKIAkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKLQkJCQkgICAgICBfX0xDX0VYVF9ORVdfUFNXLCBzaXplb2YocHN3X3QpKTsKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zLAorCQkJCSAgICh1MzIgKilfX0xDX0VYVF9QQVJBTVMpOwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOgogCQlWQ1BVX0VWRU5UKHZjcHUsIDQsICJpbnRlcnJ1cHQ6IHNjbHAgcGFybToleCIsCkBAIC0yMTMsMzcgKzM2MSwzOSBAQAogCQl2Y3B1LT5zdGF0LmRlbGl2ZXJfc2VydmljZV9zaWduYWwrKzsKIAkJdHJhY2Vfa3ZtX3MzOTBfZGVsaXZlcl9pbnRlcnJ1cHQodmNwdS0+dmNwdV9pZCwgaW50aS0+dHlwZSwKIAkJCQkJCSBpbnRpLT5leHQuZXh0X3BhcmFtcywgMCk7Ci0JCXJjICA9IHB1dF9ndWVzdCh2Y3B1LCAweDI0MDEsICh1MTYgX191c2VyICopX19MQ19FWFRfSU5UX0NPREUpOwotCQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfRVhUX09MRF9QU1csCisJCXJjICA9IHB1dF9ndWVzdF9sYyh2Y3B1LCAweDI0MDEsICh1MTYgKilfX0xDX0VYVF9JTlRfQ09ERSk7CisJCXJjIHw9IHdyaXRlX2d1ZXN0X2xjKHZjcHUsIF9fTENfRVhUX09MRF9QU1csCisJCQkJICAgICAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csCisJCQkJICAgICBzaXplb2YocHN3X3QpKTsKKwkJcmMgfD0gcmVhZF9ndWVzdF9sYyh2Y3B1LCBfX0xDX0VYVF9ORVdfUFNXLAogCQkJCSAgICAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csIHNpemVvZihwc3dfdCkpOwotCQlyYyB8PSBjb3B5X2Zyb21fZ3Vlc3QodmNwdSwgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAotCQkJCSAgICAgIF9fTENfRVhUX05FV19QU1csIHNpemVvZihwc3dfdCkpOwotCQlyYyB8PSBwdXRfZ3Vlc3QodmNwdSwgaW50aS0+ZXh0LmV4dF9wYXJhbXMsCi0JCQkJKHUzMiBfX3VzZXIgKilfX0xDX0VYVF9QQVJBTVMpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgaW50aS0+ZXh0LmV4dF9wYXJhbXMsCisJCQkJICAgKHUzMiAqKV9fTENfRVhUX1BBUkFNUyk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9JTklUOgogCQl0cmFjZV9rdm1fczM5MF9kZWxpdmVyX2ludGVycnVwdCh2Y3B1LT52Y3B1X2lkLCBpbnRpLT50eXBlLCAwLAogCQkJCQkJIGludGktPmV4dC5leHRfcGFyYW1zMik7Ci0JCXJjICA9IHB1dF9ndWVzdCh2Y3B1LCAweDI2MDMsICh1MTYgX191c2VyICopIF9fTENfRVhUX0lOVF9DT0RFKTsKLQkJcmMgfD0gcHV0X2d1ZXN0KHZjcHUsIDB4MDYwMCwgKHUxNiBfX3VzZXIgKikgX19MQ19FWFRfQ1BVX0FERFIpOwotCQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfRVhUX09MRF9QU1csCisJCXJjICA9IHB1dF9ndWVzdF9sYyh2Y3B1LCAweDI2MDMsICh1MTYgKikgX19MQ19FWFRfSU5UX0NPREUpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgMHgwNjAwLCAodTE2ICopIF9fTENfRVhUX0NQVV9BRERSKTsKKwkJcmMgfD0gd3JpdGVfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfT0xEX1BTVywKKwkJCQkgICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdywgc2l6ZW9mKHBzd190KSk7CisJCXJjIHw9IHJlYWRfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfTkVXX1BTVywKIAkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKLQkJCQkgICAgICBfX0xDX0VYVF9ORVdfUFNXLCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gcHV0X2d1ZXN0KHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zMiwKLQkJCQkodTY0IF9fdXNlciAqKSBfX0xDX0VYVF9QQVJBTVMyKTsKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zMiwKKwkJCQkgICAodTY0ICopIF9fTENfRVhUX1BBUkFNUzIpOwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORToKIAkJdHJhY2Vfa3ZtX3MzOTBfZGVsaXZlcl9pbnRlcnJ1cHQodmNwdS0+dmNwdV9pZCwgaW50aS0+dHlwZSwgMCwKIAkJCQkJCSBpbnRpLT5leHQuZXh0X3BhcmFtczIpOwotCQlyYyAgPSBwdXRfZ3Vlc3QodmNwdSwgMHgyNjAzLCAodTE2IF9fdXNlciAqKSBfX0xDX0VYVF9JTlRfQ09ERSk7Ci0JCXJjIHw9IHB1dF9ndWVzdCh2Y3B1LCAweDA2ODAsICh1MTYgX191c2VyICopIF9fTENfRVhUX0NQVV9BRERSKTsKLQkJcmMgfD0gY29weV90b19ndWVzdCh2Y3B1LCBfX0xDX0VYVF9PTERfUFNXLAorCQlyYyAgPSBwdXRfZ3Vlc3RfbGModmNwdSwgMHgyNjAzLCAodTE2ICopX19MQ19FWFRfSU5UX0NPREUpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgMHgwNjgwLCAodTE2ICopX19MQ19FWFRfQ1BVX0FERFIpOworCQlyYyB8PSB3cml0ZV9ndWVzdF9sYyh2Y3B1LCBfX0xDX0VYVF9PTERfUFNXLAorCQkJCSAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAorCQkJCSAgICAgc2l6ZW9mKHBzd190KSk7CisJCXJjIHw9IHJlYWRfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfTkVXX1BTVywKIAkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKLQkJCQkgICAgICBfX0xDX0VYVF9ORVdfUFNXLCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gcHV0X2d1ZXN0KHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zMiwKLQkJCQkodTY0IF9fdXNlciAqKSBfX0xDX0VYVF9QQVJBTVMyKTsKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zMiwKKwkJCQkgICAodTY0ICopX19MQ19FWFRfUEFSQU1TMik7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzoKIAkJVkNQVV9FVkVOVCh2Y3B1LCA0LCAiaW50ZXJydXB0OiB2aXJ0aW8gcGFybToleCxwYXJtNjQ6JWxseCIsCkBAIC0yNTIsMTYgKzQwMiwxNyBAQAogCQl0cmFjZV9rdm1fczM5MF9kZWxpdmVyX2ludGVycnVwdCh2Y3B1LT52Y3B1X2lkLCBpbnRpLT50eXBlLAogCQkJCQkJIGludGktPmV4dC5leHRfcGFyYW1zLAogCQkJCQkJIGludGktPmV4dC5leHRfcGFyYW1zMik7Ci0JCXJjICA9IHB1dF9ndWVzdCh2Y3B1LCAweDI2MDMsICh1MTYgX191c2VyICopX19MQ19FWFRfSU5UX0NPREUpOwotCQlyYyB8PSBwdXRfZ3Vlc3QodmNwdSwgMHgwZDAwLCAodTE2IF9fdXNlciAqKV9fTENfRVhUX0NQVV9BRERSKTsKLQkJcmMgfD0gY29weV90b19ndWVzdCh2Y3B1LCBfX0xDX0VYVF9PTERfUFNXLAorCQlyYyAgPSBwdXRfZ3Vlc3RfbGModmNwdSwgMHgyNjAzLCAodTE2ICopX19MQ19FWFRfSU5UX0NPREUpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgMHgwZDAwLCAodTE2ICopX19MQ19FWFRfQ1BVX0FERFIpOworCQlyYyB8PSB3cml0ZV9ndWVzdF9sYyh2Y3B1LCBfX0xDX0VYVF9PTERfUFNXLAorCQkJCSAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAorCQkJCSAgICAgc2l6ZW9mKHBzd190KSk7CisJCXJjIHw9IHJlYWRfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfTkVXX1BTVywKIAkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKLQkJCQkgICAgICBfX0xDX0VYVF9ORVdfUFNXLCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gcHV0X2d1ZXN0KHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zLAotCQkJCSh1MzIgX191c2VyICopX19MQ19FWFRfUEFSQU1TKTsKLQkJcmMgfD0gcHV0X2d1ZXN0KHZjcHUsIGludGktPmV4dC5leHRfcGFyYW1zMiwKLQkJCQkodTY0IF9fdXNlciAqKV9fTENfRVhUX1BBUkFNUzIpOworCQlyYyB8PSBwdXRfZ3Vlc3RfbGModmNwdSwgaW50aS0+ZXh0LmV4dF9wYXJhbXMsCisJCQkJICAgKHUzMiAqKV9fTENfRVhUX1BBUkFNUyk7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBpbnRpLT5leHQuZXh0X3BhcmFtczIsCisJCQkJICAgKHU2NCAqKV9fTENfRVhUX1BBUkFNUzIpOwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX1NJR1BfU1RPUDoKIAkJVkNQVV9FVkVOVCh2Y3B1LCA0LCAiJXMiLCAiaW50ZXJydXB0OiBjcHUgc3RvcCIpOwpAQCAtMjg1LDEzICs0MzYsMTIgQEAKIAkJdmNwdS0+c3RhdC5kZWxpdmVyX3Jlc3RhcnRfc2lnbmFsKys7CiAJCXRyYWNlX2t2bV9zMzkwX2RlbGl2ZXJfaW50ZXJydXB0KHZjcHUtPnZjcHVfaWQsIGludGktPnR5cGUsCiAJCQkJCQkgMCwgMCk7Ci0JCXJjICA9IGNvcHlfdG9fZ3Vlc3QodmNwdSwKLQkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXN0YXJ0X29sZF9wc3cpLAotCQkJCSAgICAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csIHNpemVvZihwc3dfdCkpOwotCQlyYyB8PSBjb3B5X2Zyb21fZ3Vlc3QodmNwdSwgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAotCQkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmVzdGFydF9wc3cpLAotCQkJCSAgICAgIHNpemVvZihwc3dfdCkpOwotCQlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX1NUT1BQRUQsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOworCQlyYyAgPSB3cml0ZV9ndWVzdF9sYyh2Y3B1LAorCQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXN0YXJ0X29sZF9wc3cpLAorCQkJCSAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKKwkJcmMgfD0gcmVhZF9ndWVzdF9sYyh2Y3B1LCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHJlc3RhcnRfcHN3KSwKKwkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAorCQkJCSAgICBzaXplb2YocHN3X3QpKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9QUk9HUkFNX0lOVDoKIAkJVkNQVV9FVkVOVCh2Y3B1LCA0LCAiaW50ZXJydXB0OiBwZ20gY2hlY2sgY29kZToleCwgaWxjOiV4IiwKQEAgLTMwMCwxMyArNDUwLDcgQEAKIAkJdmNwdS0+c3RhdC5kZWxpdmVyX3Byb2dyYW1faW50Kys7CiAJCXRyYWNlX2t2bV9zMzkwX2RlbGl2ZXJfaW50ZXJydXB0KHZjcHUtPnZjcHVfaWQsIGludGktPnR5cGUsCiAJCQkJCQkgaW50aS0+cGdtLmNvZGUsIDApOwotCQlyYyAgPSBwdXRfZ3Vlc3QodmNwdSwgaW50aS0+cGdtLmNvZGUsICh1MTYgX191c2VyICopX19MQ19QR01fSU5UX0NPREUpOwotCQlyYyB8PSBwdXRfZ3Vlc3QodmNwdSwgdGFibGVbdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSA+PiAxNF0sCi0JCQkJKHUxNiBfX3VzZXIgKilfX0xDX1BHTV9JTEMpOwotCQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfUEdNX09MRF9QU1csCi0JCQkJICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdywgc2l6ZW9mKHBzd190KSk7Ci0JCXJjIHw9IGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csCi0JCQkJICAgICAgX19MQ19QR01fTkVXX1BTVywgc2l6ZW9mKHBzd190KSk7CisJCXJjID0gX19kZWxpdmVyX3Byb2dfaXJxKHZjcHUsICZpbnRpLT5wZ20pOwogCQlicmVhazsKIAogCWNhc2UgS1ZNX1MzOTBfTUNISzoKQEAgLTMxNywxMSArNDYxLDEyIEBACiAJCQkJCQkgaW50aS0+bWNoay5tY2ljKTsKIAkJcmMgID0ga3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXModmNwdSwKIAkJCQkJCSBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfUFJFRklYRUQpOwotCQlyYyB8PSBwdXRfZ3Vlc3QodmNwdSwgaW50aS0+bWNoay5tY2ljLCAodTY0IF9fdXNlciAqKSBfX0xDX01DQ0tfQ09ERSk7Ci0JCXJjIHw9IGNvcHlfdG9fZ3Vlc3QodmNwdSwgX19MQ19NQ0tfT0xEX1BTVywKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIGludGktPm1jaGsubWNpYywgKHU2NCAqKV9fTENfTUNDS19DT0RFKTsKKwkJcmMgfD0gd3JpdGVfZ3Vlc3RfbGModmNwdSwgX19MQ19NQ0tfT0xEX1BTVywKKwkJCQkgICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKKwkJCQkgICAgIHNpemVvZihwc3dfdCkpOworCQlyYyB8PSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfTUNLX05FV19QU1csCiAJCQkJICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdywgc2l6ZW9mKHBzd190KSk7Ci0JCXJjIHw9IGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csCi0JCQkJICAgICAgX19MQ19NQ0tfTkVXX1BTVywgc2l6ZW9mKHBzd190KSk7CiAJCWJyZWFrOwogCiAJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKQEAgLTMzNCwxOCArNDc5LDIwIEBACiAJCXZjcHUtPnN0YXQuZGVsaXZlcl9pb19pbnQrKzsKIAkJdHJhY2Vfa3ZtX3MzOTBfZGVsaXZlcl9pbnRlcnJ1cHQodmNwdS0+dmNwdV9pZCwgaW50aS0+dHlwZSwKIAkJCQkJCSBwYXJhbTAsIHBhcmFtMSk7Ci0JCXJjICA9IHB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5pby5zdWJjaGFubmVsX2lkLAotCQkJCSh1MTYgX191c2VyICopIF9fTENfU1VCQ0hBTk5FTF9JRCk7Ci0JCXJjIHw9IHB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5pby5zdWJjaGFubmVsX25yLAotCQkJCSh1MTYgX191c2VyICopIF9fTENfU1VCQ0hBTk5FTF9OUik7Ci0JCXJjIHw9IHB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5pby5pb19pbnRfcGFybSwKLQkJCQkodTMyIF9fdXNlciAqKSBfX0xDX0lPX0lOVF9QQVJNKTsKLQkJcmMgfD0gcHV0X2d1ZXN0KHZjcHUsIGludGktPmlvLmlvX2ludF93b3JkLAotCQkJCSh1MzIgX191c2VyICopIF9fTENfSU9fSU5UX1dPUkQpOwotCQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfSU9fT0xEX1BTVywKLQkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKLQkJcmMgfD0gY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKLQkJCQkgICAgICBfX0xDX0lPX05FV19QU1csIHNpemVvZihwc3dfdCkpOworCQlyYyAgPSBwdXRfZ3Vlc3RfbGModmNwdSwgaW50aS0+aW8uc3ViY2hhbm5lbF9pZCwKKwkJCQkgICAodTE2ICopX19MQ19TVUJDSEFOTkVMX0lEKTsKKwkJcmMgfD0gcHV0X2d1ZXN0X2xjKHZjcHUsIGludGktPmlvLnN1YmNoYW5uZWxfbnIsCisJCQkJICAgKHUxNiAqKV9fTENfU1VCQ0hBTk5FTF9OUik7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBpbnRpLT5pby5pb19pbnRfcGFybSwKKwkJCQkgICAodTMyICopX19MQ19JT19JTlRfUEFSTSk7CisJCXJjIHw9IHB1dF9ndWVzdF9sYyh2Y3B1LCBpbnRpLT5pby5pb19pbnRfd29yZCwKKwkJCQkgICAodTMyICopX19MQ19JT19JTlRfV09SRCk7CisJCXJjIHw9IHdyaXRlX2d1ZXN0X2xjKHZjcHUsIF9fTENfSU9fT0xEX1BTVywKKwkJCQkgICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywKKwkJCQkgICAgIHNpemVvZihwc3dfdCkpOworCQlyYyB8PSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfSU9fTkVXX1BTVywKKwkJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAorCQkJCSAgICBzaXplb2YocHN3X3QpKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC0zNTgsMjUgKzUwNSwzNSBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX3RyeV9kZWxpdmVyX2NrY19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZGVsaXZlcl9ja2NfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgcmM7CiAKLQlpZiAocHN3X2V4dGludF9kaXNhYmxlZCh2Y3B1KSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCEodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclswXSAmIDB4ODAwdWwpKQotCQlyZXR1cm4gMDsKLQlyYyAgPSBwdXRfZ3Vlc3QodmNwdSwgMHgxMDA0LCAodTE2IF9fdXNlciAqKV9fTENfRVhUX0lOVF9DT0RFKTsKLQlyYyB8PSBjb3B5X3RvX2d1ZXN0KHZjcHUsIF9fTENfRVhUX09MRF9QU1csCi0JCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKLQlyYyB8PSBjb3B5X2Zyb21fZ3Vlc3QodmNwdSwgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAotCQkJICAgICAgX19MQ19FWFRfTkVXX1BTVywgc2l6ZW9mKHBzd190KSk7CisJcmMgID0gcHV0X2d1ZXN0X2xjKHZjcHUsIDB4MTAwNCwgKHUxNiBfX3VzZXIgKilfX0xDX0VYVF9JTlRfQ09ERSk7CisJcmMgfD0gd3JpdGVfZ3Vlc3RfbGModmNwdSwgX19MQ19FWFRfT0xEX1BTVywKKwkJCSAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCBzaXplb2YocHN3X3QpKTsKKwlyYyB8PSByZWFkX2d1ZXN0X2xjKHZjcHUsIF9fTENfRVhUX05FV19QU1csCisJCQkgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LAorCQkJICAgIHNpemVvZihwc3dfdCkpOwogCWlmIChyYykgewogCQlwcmludGsoImt2bTogVGhlIGd1ZXN0IGxvd2NvcmUgaXMgbm90IG1hcHBlZCBkdXJpbmcgaW50ZXJydXB0ICIKIAkJCSJkZWxpdmVyeSwga2lsbGluZyB1c2Vyc3BhY2VcbiIpOwogCQlkb19leGl0KFNJR0tJTEwpOwogCX0KLQlyZXR1cm4gMTsKK30KKworLyogQ2hlY2sgd2hldGhlciBTSUdQIGludGVycHJldGF0aW9uIGZhY2lsaXR5IGhhcyBhbiBleHRlcm5hbCBjYWxsIHBlbmRpbmcgKi8KK2ludCBrdm1fczM5MF9zaV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlhdG9taWNfdCAqc2lncF9jdHJsID0gJnZjcHUtPmt2bS0+YXJjaC5zY2EtPmNwdVt2Y3B1LT52Y3B1X2lkXS5jdHJsOworCisJaWYgKCFwc3dfZXh0aW50X2Rpc2FibGVkKHZjcHUpICYmCisJICAgICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzBdICYgMHgyMDAwdWwpICYmCisJICAgIChhdG9taWNfcmVhZChzaWdwX2N0cmwpICYgU0lHUF9DVFJMX0MpICYmCisJICAgIChhdG9taWNfcmVhZCgmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKSAmIENQVVNUQVRfRUNBTExfUEVORCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNDA2LDE5ICs1NjMsMjMgQEAKIAkJc3Bpbl91bmxvY2soJmZpLT5sb2NrKTsKIAl9CiAKLQlpZiAoKCFyYykgJiYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ja2MgPAotCQlnZXRfdG9kX2Nsb2NrX2Zhc3QoKSArIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5lcG9jaCkpIHsKLQkJaWYgKCghcHN3X2V4dGludF9kaXNhYmxlZCh2Y3B1KSkgJiYKLQkJCSh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyWzBdICYgMHg4MDB1bCkpCi0JCQlyYyA9IDE7Ci0JfQorCWlmICghcmMgJiYga3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcih2Y3B1KSkKKwkJcmMgPSAxOworCisJaWYgKCFyYyAmJiBrdm1fczM5MF9zaV9leHRfY2FsbF9wZW5kaW5nKHZjcHUpKQorCQlyYyA9IDE7CiAKIAlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gMDsKKwlpZiAoISh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y2tjIDwKKwkgICAgICBnZXRfdG9kX2Nsb2NrX2Zhc3QoKSArIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5lcG9jaCkpCisJCXJldHVybiAwOworCWlmICghY2tjX2ludGVycnVwdHNfZW5hYmxlZCh2Y3B1KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIGludCBrdm1fczM5MF9oYW5kbGVfd2FpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC00NDEsOCArNjAyLDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOyAvKiBkaXNhYmxlZCB3YWl0ICovCiAJfQogCi0JaWYgKHBzd19leHRpbnRfZGlzYWJsZWQodmNwdSkgfHwKLQkgICAgKCEodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjclswXSAmIDB4ODAwdWwpKSkgeworCWlmICghY2tjX2ludGVycnVwdHNfZW5hYmxlZCh2Y3B1KSkgewogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICIlcyIsICJlbmFibGVkIHdhaXQgdy9vIHRpbWVyIik7CiAJCWdvdG8gbm9fdGltZXI7CiAJfQpAQCAtNDY1LDcgKzYyNSw4IEBACiAJd2hpbGUgKGxpc3RfZW1wdHkoJnZjcHUtPmFyY2gubG9jYWxfaW50Lmxpc3QpICYmCiAJCWxpc3RfZW1wdHkoJnZjcHUtPmFyY2gubG9jYWxfaW50LmZsb2F0X2ludC0+bGlzdCkgJiYKIAkJKCF2Y3B1LT5hcmNoLmxvY2FsX2ludC50aW1lcl9kdWUpICYmCi0JCSFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYKKwkJIWt2bV9zMzkwX3NpX2V4dF9jYWxsX3BlbmRpbmcodmNwdSkpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnZjcHUtPmFyY2gubG9jYWxfaW50LmxvY2spOwogCQlzcGluX3VubG9jaygmdmNwdS0+YXJjaC5sb2NhbF9pbnQuZmxvYXRfaW50LT5sb2NrKTsKQEAgLTUyMiw2ICs2ODMsMTEgQEAKIAl9CiAJYXRvbWljX3NldCgmbGktPmFjdGl2ZSwgMCk7CiAJc3Bpbl91bmxvY2tfYmgoJmxpLT5sb2NrKTsKKworCS8qIGNsZWFyIHBlbmRpbmcgZXh0ZXJuYWwgY2FsbHMgc2V0IGJ5IHNpZ3AgaW50ZXJwcmV0YXRpb24gZmFjaWxpdHkgKi8KKwlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX0VDQUxMX1BFTkQsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOworCWF0b21pY19jbGVhcl9tYXNrKFNJR1BfQ1RSTF9DLAorCQkJICAmdmNwdS0+a3ZtLT5hcmNoLnNjYS0+Y3B1W3ZjcHUtPnZjcHVfaWRdLmN0cmwpOwogfQogCiB2b2lkIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTU1NCw5ICs3MjAsOCBAQAogCQl9IHdoaWxlIChkZWxpdmVyKTsKIAl9CiAKLQlpZiAoKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ja2MgPAotCQlnZXRfdG9kX2Nsb2NrX2Zhc3QoKSArIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5lcG9jaCkpCi0JCV9fdHJ5X2RlbGl2ZXJfY2tjX2ludGVycnVwdCh2Y3B1KTsKKwlpZiAoa3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcih2Y3B1KSkKKwkJZGVsaXZlcl9ja2NfaW50ZXJydXB0KHZjcHUpOwogCiAJaWYgKGF0b21pY19yZWFkKCZmaS0+YWN0aXZlKSkgewogCQlkbyB7CkBAIC02NjAsNiArODI1LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBrdm1fczM5MF9pbmplY3RfcHJvZ19pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICBzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gKnBnbV9pbmZvKQoreworCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpID0gJnZjcHUtPmFyY2gubG9jYWxfaW50OworCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTsKKworCWludGkgPSBremFsbG9jKHNpemVvZigqaW50aSksIEdGUF9LRVJORUwpOworCWlmICghaW50aSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHByb2cgaXJxICVkIChmcm9tIGtlcm5lbCkiLAorCQkgICBwZ21faW5mby0+Y29kZSk7CisJdHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS0+dmNwdV9pZCwgS1ZNX1MzOTBfUFJPR1JBTV9JTlQsCisJCQkJICAgcGdtX2luZm8tPmNvZGUsIDAsIDEpOworCisJaW50aS0+dHlwZSA9IEtWTV9TMzkwX1BST0dSQU1fSU5UOworCW1lbWNweSgmaW50aS0+cGdtLCBwZ21faW5mbywgc2l6ZW9mKGludGktPnBnbSkpOworCXNwaW5fbG9ja19iaCgmbGktPmxvY2spOworCWxpc3RfYWRkKCZpbnRpLT5saXN0LCAmbGktPmxpc3QpOworCWF0b21pY19zZXQoJmxpLT5hY3RpdmUsIDEpOworCUJVR19PTih3YWl0cXVldWVfYWN0aXZlKGxpLT53cSkpOworCXNwaW5fdW5sb2NrX2JoKCZsaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJCQkgICAgdTY0IGNyNiwgdTY0IHNjaGlkKQogewpAQCAtODEwLDYgKzEwMDAsMTIgQEAKIAlyZXR1cm4gX19pbmplY3Rfdm0oa3ZtLCBpbnRpKTsKIH0KIAordm9pZCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLAorCQkJICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQoreworCV9faW5qZWN0X3ZtKGt2bSwgaW50aSk7Cit9CisKIGludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCkKIHsKQEAgLTgzOSw2ICsxMDM1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9TSUdQX1NUT1A6CiAJY2FzZSBLVk1fUzM5MF9SRVNUQVJUOgorCWNhc2UgS1ZNX1MzOTBfSU5UX0NMT0NLX0NPTVA6CisJY2FzZSBLVk1fUzM5MF9JTlRfQ1BVX1RJTUVSOgogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHR5cGUgJXgiLCBzMzkwaW50LT50eXBlKTsKIAkJaW50aS0+dHlwZSA9IHMzOTBpbnQtPnR5cGU7CiAJCWJyZWFrOwpAQCAtOTAwLDcgKzEwOTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhcl9mbG9hdGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm0gKmt2bSkKK3ZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmk7CiAJc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvCSpuLCAqaW50aSA9IE5VTEw7CkBAIC0xMjQ2LDcgKzE0NDQsNyBAQAogCQlicmVhazsKIAljYXNlIEtWTV9ERVZfRkxJQ19DTEVBUl9JUlFTOgogCQlyID0gMDsKLQkJY2xlYXJfZmxvYXRpbmdfaW50ZXJydXB0cyhkZXYtPmt2bSk7CisJCWt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoZGV2LT5rdm0pOwogCQlicmVhazsKIAljYXNlIEtWTV9ERVZfRkxJQ19BUEZfRU5BQkxFOgogCQlkZXYtPmt2bS0+YXJjaC5nbWFwLT5wZmF1bHRfZW5hYmxlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggOWFlNjY2NC4uMmYzZTE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMTEsNiArMTEsNyBAQAogICogICAgICAgICAgICAgICBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2VyQGRlLmlibS5jb20+CiAgKiAgICAgICAgICAgICAgIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICogICAgICAgICAgICAgICBDaHJpc3RpYW4gRWhyaGFyZHQgPGVocmhhcmR0QGRlLmlibS5jb20+CisgKiAgICAgICAgICAgICAgIEphc29uIEouIEhlcm5lIDxqamhlcm5lQHVzLmlibS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC01MSw2ICs1Miw4IEBACiAJeyAiZXhpdF9pbnN0cl9hbmRfcHJvZ3JhbV9pbnQiLCBWQ1BVX1NUQVQoZXhpdF9pbnN0cl9hbmRfcHJvZ3JhbSkgfSwKIAl7ICJpbnN0cnVjdGlvbl9sY3RsZyIsIFZDUFVfU1RBVChpbnN0cnVjdGlvbl9sY3RsZykgfSwKIAl7ICJpbnN0cnVjdGlvbl9sY3RsIiwgVkNQVV9TVEFUKGluc3RydWN0aW9uX2xjdGwpIH0sCisJeyAiaW5zdHJ1Y3Rpb25fc3RjdGwiLCBWQ1BVX1NUQVQoaW5zdHJ1Y3Rpb25fc3RjdGwpIH0sCisJeyAiaW5zdHJ1Y3Rpb25fc3RjdGciLCBWQ1BVX1NUQVQoaW5zdHJ1Y3Rpb25fc3RjdGcpIH0sCiAJeyAiZGVsaXZlcl9lbWVyZ2VuY3lfc2lnbmFsIiwgVkNQVV9TVEFUKGRlbGl2ZXJfZW1lcmdlbmN5X3NpZ25hbCkgfSwKIAl7ICJkZWxpdmVyX2V4dGVybmFsX2NhbGwiLCBWQ1BVX1NUQVQoZGVsaXZlcl9leHRlcm5hbF9jYWxsKSB9LAogCXsgImRlbGl2ZXJfc2VydmljZV9zaWduYWwiLCBWQ1BVX1NUQVQoZGVsaXZlcl9zZXJ2aWNlX3NpZ25hbCkgfSwKQEAgLTY2LDYgKzY5LDcgQEAKIAl7ICJpbnN0cnVjdGlvbl9zdHB4IiwgVkNQVV9TVEFUKGluc3RydWN0aW9uX3N0cHgpIH0sCiAJeyAiaW5zdHJ1Y3Rpb25fc3RhcCIsIFZDUFVfU1RBVChpbnN0cnVjdGlvbl9zdGFwKSB9LAogCXsgImluc3RydWN0aW9uX3N0b3JhZ2Vfa2V5IiwgVkNQVV9TVEFUKGluc3RydWN0aW9uX3N0b3JhZ2Vfa2V5KSB9LAorCXsgImluc3RydWN0aW9uX2lwdGVfaW50ZXJsb2NrIiwgVkNQVV9TVEFUKGluc3RydWN0aW9uX2lwdGVfaW50ZXJsb2NrKSB9LAogCXsgImluc3RydWN0aW9uX3N0c2NoIiwgVkNQVV9TVEFUKGluc3RydWN0aW9uX3N0c2NoKSB9LAogCXsgImluc3RydWN0aW9uX2Noc2MiLCBWQ1BVX1NUQVQoaW5zdHJ1Y3Rpb25fY2hzYykgfSwKIAl7ICJpbnN0cnVjdGlvbl9lc3NhIiwgVkNQVV9TVEFUKGluc3RydWN0aW9uX2Vzc2EpIH0sCkBAIC05MCw3ICs5NCw3IEBACiBzdGF0aWMgc3RydWN0IGdtYXBfbm90aWZpZXIgZ21hcF9ub3RpZmllcjsKIAogLyogdGVzdCBhdmFpbGFiaWxpdHkgb2YgdmZhY2lsaXR5ICovCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZmYWNpbGl0eSh1bnNpZ25lZCBsb25nIG5yKQoraW50IHRlc3RfdmZhY2lsaXR5KHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJcmV0dXJuIF9fdGVzdF9mYWNpbGl0eShuciwgKHZvaWQgKikgdmZhY2lsaXRpZXMpOwogfQpAQCAtMTYyLDYgKzE2Niw3IEBACiAJY2FzZSBLVk1fQ0FQX0lPRVZFTlRGRDoKIAljYXNlIEtWTV9DQVBfREVWSUNFX0NUUkw6CiAJY2FzZSBLVk1fQ0FQX0VOQUJMRV9DQVBfVk06CisJY2FzZSBLVk1fQ0FQX1ZNX0FUVFJJQlVURVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfTlJfVkNQVVM6CkBAIC0xODAsNiArMTg1LDI1IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKK3sKKwlnZm5fdCBjdXJfZ2ZuLCBsYXN0X2dmbjsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJc3RydWN0IGdtYXAgKmdtYXAgPSBrdm0tPmFyY2guZ21hcDsKKworCWRvd25fcmVhZCgmZ21hcC0+bW0tPm1tYXBfc2VtKTsKKwkvKiBMb29wIG92ZXIgYWxsIGd1ZXN0IHBhZ2VzICovCisJbGFzdF9nZm4gPSBtZW1zbG90LT5iYXNlX2dmbiArIG1lbXNsb3QtPm5wYWdlczsKKwlmb3IgKGN1cl9nZm4gPSBtZW1zbG90LT5iYXNlX2dmbjsgY3VyX2dmbiA8PSBsYXN0X2dmbjsgY3VyX2dmbisrKSB7CisJCWFkZHJlc3MgPSBnZm5fdG9faHZhX21lbXNsb3QobWVtc2xvdCwgY3VyX2dmbik7CisKKwkJaWYgKGdtYXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoYWRkcmVzcywgZ21hcCkpCisJCQltYXJrX3BhZ2VfZGlydHkoa3ZtLCBjdXJfZ2ZuKTsKKwl9CisJdXBfcmVhZCgmZ21hcC0+bW0tPm1tYXBfc2VtKTsKK30KKwogLyogU2VjdGlvbjogdm0gcmVsYXRlZCAqLwogLyoKICAqIEdldCAoYW5kIGNsZWFyKSB0aGUgZGlydHkgbWVtb3J5IGxvZyBmb3IgYSBtZW1vcnkgc2xvdC4KQEAgLTE4Nyw3ICsyMTEsMzYgQEAKIGludCBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgICAgICAgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKIHsKLQlyZXR1cm4gMDsKKwlpbnQgcjsKKwl1bnNpZ25lZCBsb25nIG47CisJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKKwlpbnQgaXNfZGlydHkgPSAwOworCisJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKKworCXIgPSAtRUlOVkFMOworCWlmIChsb2ctPnNsb3QgPj0gS1ZNX1VTRVJfTUVNX1NMT1RTKQorCQlnb3RvIG91dDsKKworCW1lbXNsb3QgPSBpZF90b19tZW1zbG90KGt2bS0+bWVtc2xvdHMsIGxvZy0+c2xvdCk7CisJciA9IC1FTk9FTlQ7CisJaWYgKCFtZW1zbG90LT5kaXJ0eV9iaXRtYXApCisJCWdvdG8gb3V0OworCisJa3ZtX3MzOTBfc3luY19kaXJ0eV9sb2coa3ZtLCBtZW1zbG90KTsKKwlyID0ga3ZtX2dldF9kaXJ0eV9sb2coa3ZtLCBsb2csICZpc19kaXJ0eSk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJLyogQ2xlYXIgdGhlIGRpcnR5IGxvZyAqLworCWlmIChpc19kaXJ0eSkgeworCQluID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KTsKKwkJbWVtc2V0KG1lbXNsb3QtPmRpcnR5X2JpdG1hcCwgMCwgbik7CisJfQorCXIgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKQpAQCAtMjA5LDExICsyNjIsODYgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCBrdm1fczM5MF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXN3aXRjaCAoYXR0ci0+YXR0cikgeworCWNhc2UgS1ZNX1MzOTBfVk1fTUVNX0VOQUJMRV9DTU1BOgorCQlyZXQgPSAtRUJVU1k7CisJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCWlmIChhdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpID09IDApIHsKKwkJCWt2bS0+YXJjaC51c2VfY21tYSA9IDE7CisJCQlyZXQgPSAwOworCQl9CisJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUE6CisJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOworCQlwYWdlX3RhYmxlX3Jlc2V0X3Bnc3RlKGt2bS0+YXJjaC5nbWFwLT5tbSwgMCwgVEFTS19TSVpFLCBmYWxzZSk7CisJCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgaWR4KTsKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5YSU87CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChhdHRyLT5ncm91cCkgeworCWNhc2UgS1ZNX1MzOTBfVk1fTUVNX0NUUkw6CisJCXJldCA9IGt2bV9zMzkwX21lbV9jb250cm9sKGt2bSwgYXR0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTlhJTzsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrdm1fczM5MF92bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCit7CisJcmV0dXJuIC1FTlhJTzsKK30KKworc3RhdGljIGludCBrdm1fczM5MF92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoYXR0ci0+Z3JvdXApIHsKKwljYXNlIEtWTV9TMzkwX1ZNX01FTV9DVFJMOgorCQlzd2l0Y2ggKGF0dHItPmF0dHIpIHsKKwkJY2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6CisJCWNhc2UgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BOgorCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOWElPOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOWElPOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBsb25nIGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGt2bV9kZXZpY2VfYXR0ciBhdHRyOwogCWludCByOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtMjQ2LDYgKzM3NCwyNyBAQAogCQl9CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9TRVRfREVWSUNFX0FUVFI6IHsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXR0ciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXR0cikpKQorCQkJYnJlYWs7CisJCXIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sICZhdHRyKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0dFVF9ERVZJQ0VfQVRUUjogeworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhdHRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhdHRyKSkpCisJCQlicmVhazsKKwkJciA9IGt2bV9zMzkwX3ZtX2dldF9hdHRyKGt2bSwgJmF0dHIpOworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fSEFTX0RFVklDRV9BVFRSOiB7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmF0dHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGF0dHIpKSkKKwkJCWJyZWFrOworCQlyID0ga3ZtX3MzOTBfdm1faGFzX2F0dHIoa3ZtLCAmYXR0cik7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlyID0gLUVOT1RUWTsKIAl9CkBAIC0yOTIsNiArNDQxLDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZrdm0tPmFyY2guZmxvYXRfaW50LmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2guZmxvYXRfaW50Lmxpc3QpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmt2bS0+YXJjaC5pcHRlX3dxKTsKIAogCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoa3ZtLT5hcmNoLmRiZiwgJmRlYnVnX3NwcmludGZfdmlldyk7CiAJVk1fRVZFTlQoa3ZtLCAzLCAiJXMiLCAidm0gY3JlYXRlZCIpOwpAQCAtMzA5LDYgKzQ1OSw4IEBACiAJa3ZtLT5hcmNoLmNzc19zdXBwb3J0ID0gMDsKIAlrdm0tPmFyY2gudXNlX2lycWNoaXAgPSAwOwogCisJc3Bpbl9sb2NrX2luaXQoJmt2bS0+YXJjaC5zdGFydF9zdG9wX2xvY2spOworCiAJcmV0dXJuIDA7CiBvdXRfbm9nbWFwOgogCWRlYnVnX3VucmVnaXN0ZXIoa3ZtLT5hcmNoLmRiZik7CkBAIC0zMjIsNiArNDc0LDcgQEAKIHsKIAlWQ1BVX0VWRU5UKHZjcHUsIDMsICIlcyIsICJmcmVlIGNwdSIpOwogCXRyYWNlX2t2bV9zMzkwX2Rlc3Ryb3lfdmNwdSh2Y3B1LT52Y3B1X2lkKTsKKwlrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHZjcHUpOwogCWt2bV9jbGVhcl9hc3luY19wZl9jb21wbGV0aW9uX3F1ZXVlKHZjcHUpOwogCWlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtPmt2bSkpIHsKIAkJY2xlYXJfYml0KDYzIC0gdmNwdS0+dmNwdV9pZCwKQEAgLTMzNSw5ICs0ODgsOCBAQAogCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0+a3ZtKSkKIAkJZ21hcF9mcmVlKHZjcHUtPmFyY2guZ21hcCk7CiAKLQlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmNicmxvKQotCQlfX2ZyZWVfcGFnZShfX3Bmbl90b19wYWdlKAotCQkJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5jYnJsbyA+PiBQQUdFX1NISUZUKSk7CisJaWYgKGt2bV9zMzkwX2NtbWFfZW5hYmxlZCh2Y3B1LT5rdm0pKQorCQlrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYSh2Y3B1KTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtPmFyY2guc2llX2Jsb2NrKSk7CiAKIAlrdm1fdmNwdV91bmluaXQodmNwdSk7CkBAIC0zNzIsNiArNTI0LDcgQEAKIAlpZiAoIWt2bV9pc191Y29udHJvbChrdm0pKQogCQlnbWFwX2ZyZWUoa3ZtLT5hcmNoLmdtYXApOwogCWt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMoa3ZtKTsKKwlrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKGt2bSk7CiB9CiAKIC8qIFNlY3Rpb246IHZjcHUgcmVsYXRlZCAqLwpAQCAtNDQyLDcgKzU5NSw3IEBACiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPnBwID0gMDsKIAl2Y3B1LT5hcmNoLnBmYXVsdF90b2tlbiA9IEtWTV9TMzkwX1BGQVVMVF9UT0tFTl9JTlZBTElEOwogCWt2bV9jbGVhcl9hc3luY19wZl9jb21wbGV0aW9uX3F1ZXVlKHZjcHUpOwotCWF0b21pY19zZXRfbWFzayhDUFVTVEFUX1NUT1BQRUQsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOworCWt2bV9zMzkwX3ZjcHVfc3RvcCh2Y3B1KTsKIAlrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHZjcHUpOwogfQogCkBAIC00NTEsOSArNjA0LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWZyZWVfcGFnZSh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y2JybG8pOworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5jYnJsbyA9IDA7Cit9CisKK2ludCBrdm1fczM5MF92Y3B1X3NldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5jYnJsbyA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHUtPmFyY2guc2llX2Jsb2NrLT5jYnJsbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNiMiB8PSAweDgwOworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2IyICY9IH4weDA4OworCXJldHVybiAwOworfQorCiBpbnQga3ZtX2FyY2hfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHBhZ2UgKmNicmw7CisJaW50IHJjID0gMDsKIAogCWF0b21pY19zZXQoJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncywgQ1BVU1RBVF9aQVJDSCB8CiAJCQkJCQkgICAgQ1BVU1RBVF9TTSB8CkBAIC00NjQsMTUgKzYzNCwxNyBAQAogCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNiIHw9IDB4MTA7CiAKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNiMiAgPSA4OwotCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2EgICA9IDB4QzEwMDIwMDFVOworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2EgICA9IDB4RDEwMDIwMDBVOworCWlmIChzY2xwX2hhc19zaWlmKCkpCisJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2EgfD0gMTsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZmFjICAgPSAoaW50KSAobG9uZykgdmZhY2lsaXRpZXM7Ci0JaWYgKGt2bV9lbmFibGVkX2NtbWEoKSkgewotCQljYnJsID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JCWlmIChjYnJsKSB7Ci0JCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNiMiB8PSAweDgwOwotCQkJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmVjYjIgJj0gfjB4MDg7Ci0JCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y2JybG8gPSBwYWdlX3RvX3BoeXMoY2JybCk7Ci0JCX0KKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWN0bCB8PSBJQ1RMX0lTS0UgfCBJQ1RMX1NTS0UgfCBJQ1RMX1JSQkUgfAorCQkJCSAgICAgIElDVExfVFBST1Q7CisKKwlpZiAoa3ZtX3MzOTBfY21tYV9lbmFibGVkKHZjcHUtPmt2bSkpIHsKKwkJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwX2NtbWEodmNwdSk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKIAl9CiAJaHJ0aW1lcl9pbml0KCZ2Y3B1LT5hcmNoLmNrY190aW1lciwgQ0xPQ0tfUkVBTFRJTUUsIEhSVElNRVJfTU9ERV9BQlMpOwogCXRhc2tsZXRfaW5pdCgmdmNwdS0+YXJjaC50YXNrbGV0LCBrdm1fczM5MF90YXNrbGV0LApAQCAtNDgwLDcgKzY1Miw3IEBACiAJdmNwdS0+YXJjaC5ja2NfdGltZXIuZnVuY3Rpb24gPSBrdm1fczM5MF9pZGxlX3dha2V1cDsKIAlnZXRfY3B1X2lkKCZ2Y3B1LT5hcmNoLmNwdV9pZCk7CiAJdmNwdS0+YXJjaC5jcHVfaWQudmVyc2lvbiA9IDB4ZmY7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTU4NCw3ICs3NTYsNyBAQAogCiAJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CiAJCS8qIG1hdGNoIGFnYWluc3QgYm90aCBwcmVmaXggcGFnZXMgKi8KLQkJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXggPT0gKGFkZHJlc3MgJiB+MHgxMDAwVUwpKSB7CisJCWlmIChrdm1fczM5MF9nZXRfcHJlZml4KHZjcHUpID09IChhZGRyZXNzICYgfjB4MTAwMFVMKSkgewogCQkJVkNQVV9FVkVOVCh2Y3B1LCAyLCAiZ21hcCBub3RpZmllciBmb3IgJWx4IiwgYWRkcmVzcyk7CiAJCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTU1VX1JFTE9BRCwgdmNwdSk7CiAJCQlleGl0X3NpZV9zeW5jKHZjcHUpOwpAQCAtNzY5LDEwICs5NDEsNDAgQEAKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQogCisjZGVmaW5lIFZBTElEX0dVRVNUREJHX0ZMQUdTIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IFwKKwkJCSAgICAgIEtWTV9HVUVTVERCR19VU0VfSFdfQlAgfCBcCisJCQkgICAgICBLVk1fR1VFU1REQkdfRU5BQkxFKQorCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwlpbnQgcmMgPSAwOworCisJdmNwdS0+Z3Vlc3RfZGVidWcgPSAwOworCWt2bV9zMzkwX2NsZWFyX2JwX2RhdGEodmNwdSk7CisKKwlpZiAoZGJnLT5jb250cm9sICYgflZBTElEX0dVRVNUREJHX0ZMQUdTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYmctPmNvbnRyb2wgJiBLVk1fR1VFU1REQkdfRU5BQkxFKSB7CisJCXZjcHUtPmd1ZXN0X2RlYnVnID0gZGJnLT5jb250cm9sOworCQkvKiBlbmZvcmNlIGd1ZXN0IFBFUiAqLworCQlhdG9taWNfc2V0X21hc2soQ1BVU1RBVF9QLCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKKworCQlpZiAoZGJnLT5jb250cm9sICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJCXJjID0ga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEodmNwdSwgZGJnKTsKKwl9IGVsc2UgeworCQlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX1AsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOworCQl2Y3B1LT5hcmNoLmd1ZXN0ZGJnLmxhc3RfYnAgPSAwOworCX0KKworCWlmIChyYykgeworCQl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IDA7CisJCWt2bV9zMzkwX2NsZWFyX2JwX2RhdGEodmNwdSk7CisJCWF0b21pY19jbGVhcl9tYXNrKENQVVNUQVRfUCwgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CisJfQorCisJcmV0dXJuIHJjOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC03ODcsOCArOTg5LDI3IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAorYm9vbCBrdm1fczM5MF9jbW1hX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKQoreworCWlmICghTUFDSElORV9JU19MUEFSKQorCQlyZXR1cm4gZmFsc2U7CisJLyogb25seSBlbmFibGUgZm9yIHoxMCBhbmQgbGF0ZXIgKi8KKwlpZiAoIU1BQ0hJTkVfSEFTX0VEQVQxKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFrdm0tPmFyY2gudXNlX2NtbWEpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaWJzX2VuYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBhdG9taWNfcmVhZCgmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKSAmIENQVVNUQVRfSUJTOworfQorCiBzdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CityZXRyeToKKwlzMzkwX3ZjcHVfdW5ibG9jayh2Y3B1KTsKIAkvKgogCSAqIFdlIHVzZSBNTVVfUkVMT0FEIGp1c3QgdG8gcmUtYXJtIHRoZSBpcHRlIG5vdGlmaWVyIGZvciB0aGUKIAkgKiBndWVzdCBwcmVmaXggcGFnZS4gZ21hcF9pcHRlX25vdGlmeSB3aWxsIHdhaXQgb24gdGhlIHB0bCBsb2NrLgpAQCAtNzk2LDI3ICsxMDE3LDYxIEBACiAJICogYWxyZWFkeSBmaW5pc2hlZC4gV2UgbWlnaHQgcmFjZSBhZ2FpbnN0IGEgc2Vjb25kIHVubWFwcGVyIHRoYXQKIAkgKiB3YW50cyB0byBzZXQgdGhlIGJsb2NraW5nIGJpdC4gTGV0cyBqdXN0IHJldHJ5IHRoZSByZXF1ZXN0IGxvb3AuCiAJICovCi0Jd2hpbGUgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfTU1VX1JFTE9BRCwgdmNwdSkpIHsKKwlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9NTVVfUkVMT0FELCB2Y3B1KSkgewogCQlpbnQgcmM7CiAJCXJjID0gZ21hcF9pcHRlX25vdGlmeSh2Y3B1LT5hcmNoLmdtYXAsCi0JCQkJICAgICAgdmNwdS0+YXJjaC5zaWVfYmxvY2stPnByZWZpeCwKKwkJCQkgICAgICBrdm1fczM5MF9nZXRfcHJlZml4KHZjcHUpLAogCQkJCSAgICAgIFBBR0VfU0laRSAqIDIpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7Ci0JCXMzOTBfdmNwdV91bmJsb2NrKHZjcHUpOworCQlnb3RvIHJldHJ5OwogCX0KKworCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0VOQUJMRV9JQlMsIHZjcHUpKSB7CisJCWlmICghaWJzX2VuYWJsZWQodmNwdSkpIHsKKwkJCXRyYWNlX2t2bV9zMzkwX2VuYWJsZV9kaXNhYmxlX2licyh2Y3B1LT52Y3B1X2lkLCAxKTsKKwkJCWF0b21pY19zZXRfbWFzayhDUFVTVEFUX0lCUywKKwkJCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CisJCX0KKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9ESVNBQkxFX0lCUywgdmNwdSkpIHsKKwkJaWYgKGlic19lbmFibGVkKHZjcHUpKSB7CisJCQl0cmFjZV9rdm1fczM5MF9lbmFibGVfZGlzYWJsZV9pYnModmNwdS0+dmNwdV9pZCwgMCk7CisJCQlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX0lCUywKKwkJCQkJICAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKKwkJfQorCQlnb3RvIHJldHJ5OworCX0KKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBrdm1fYXJjaF9mYXVsdF9pbl9zeW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKKy8qKgorICoga3ZtX2FyY2hfZmF1bHRfaW5fcGFnZSAtIGZhdWx0LWluIGd1ZXN0IHBhZ2UgaWYgbmVjZXNzYXJ5CisgKiBAdmNwdTogVGhlIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBjcHUKKyAqIEBncGE6IEd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MKKyAqIEB3cml0YWJsZTogV2hldGhlciB0aGUgcGFnZSBzaG91bGQgYmUgd3JpdGFibGUgb3Igbm90CisgKgorICogTWFrZSBzdXJlIHRoYXQgYSBndWVzdCBwYWdlIGhhcyBiZWVuIGZhdWx0ZWQtaW4gb24gdGhlIGhvc3QuCisgKgorICogUmV0dXJuOiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitsb25nIGt2bV9hcmNoX2ZhdWx0X2luX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGludCB3cml0YWJsZSkKIHsKLQlsb25nIHJjOwotCWh2YV90IGZhdWx0ID0gZ21hcF9mYXVsdChjdXJyZW50LT50aHJlYWQuZ21hcF9hZGRyLCB2Y3B1LT5hcmNoLmdtYXApOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJaHZhX3QgaHZhOworCWxvbmcgcmM7CisKKwlodmEgPSBnbWFwX2ZhdWx0KGdwYSwgdmNwdS0+YXJjaC5nbWFwKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKGh2YSkpCisJCXJldHVybiAobG9uZylodmE7CiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJjID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sIGZhdWx0LCAxLCAxLCAwLCBOVUxMLCBOVUxMKTsKKwlyYyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBodmEsIDEsIHdyaXRhYmxlLCAwLCBOVUxMLCBOVUxMKTsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiByYzsKKworCXJldHVybiByYyA8IDAgPyByYyA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHN0YXJ0X3Rva2VuLApAQCAtODgzLDggKzExMzgsOSBAQAogCWlmICghdmNwdS0+YXJjaC5nbWFwLT5wZmF1bHRfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlodmEgPSBnbWFwX2ZhdWx0KGN1cnJlbnQtPnRocmVhZC5nbWFwX2FkZHIsIHZjcHUtPmFyY2guZ21hcCk7Ci0JaWYgKGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmYXJjaC5wZmF1bHRfdG9rZW4sIHZjcHUtPmFyY2gucGZhdWx0X3Rva2VuLCA4KSkKKwlodmEgPSBnZm5fdG9faHZhKHZjcHUtPmt2bSwgZ3BhX3RvX2dmbihjdXJyZW50LT50aHJlYWQuZ21hcF9hZGRyKSk7CisJaHZhICs9IGN1cnJlbnQtPnRocmVhZC5nbWFwX2FkZHIgJiB+UEFHRV9NQVNLOworCWlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgdmNwdS0+YXJjaC5wZmF1bHRfdG9rZW4sICZhcmNoLnBmYXVsdF90b2tlbiwgOCkpCiAJCXJldHVybiAwOwogCiAJcmMgPSBrdm1fc2V0dXBfYXN5bmNfcGYodmNwdSwgY3VycmVudC0+dGhyZWFkLmdtYXBfYWRkciwgaHZhLCAmYXJjaCk7CkBAIC05MDcsNyArMTE2Myw3IEBACiAJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQlzY2hlZHVsZSgpOwogCi0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORykpCisJaWYgKHRlc3RfY3B1X2ZsYWcoQ0lGX01DQ0tfUEVORElORykpCiAJCXMzOTBfaGFuZGxlX21jY2soKTsKIAogCWlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtPmt2bSkpCkBAIC05MTcsNiArMTE3MywxMSBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJaWYgKGd1ZXN0ZGJnX2VuYWJsZWQodmNwdSkpIHsKKwkJa3ZtX3MzOTBfYmFja3VwX2d1ZXN0X3Blcl9yZWdzKHZjcHUpOworCQlrdm1fczM5MF9wYXRjaF9ndWVzdF9wZXJfcmVncyh2Y3B1KTsKKwl9CisKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWNwdGNvZGUgPSAwOwogCWNwdWZsYWdzID0gYXRvbWljX3JlYWQoJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CiAJVkNQVV9FVkVOVCh2Y3B1LCA2LCAiZW50ZXJpbmcgc2llIGZsYWdzICV4IiwgY3B1ZmxhZ3MpOwpAQCAtOTMzLDYgKzExOTQsOSBAQAogCQkgICB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWNwdGNvZGUpOwogCXRyYWNlX2t2bV9zMzkwX3NpZV9leGl0KHZjcHUsIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3B0Y29kZSk7CiAKKwlpZiAoZ3Vlc3RkYmdfZW5hYmxlZCh2Y3B1KSkKKwkJa3ZtX3MzOTBfcmVzdG9yZV9ndWVzdF9wZXJfcmVncyh2Y3B1KTsKKwogCWlmIChleGl0X3JlYXNvbiA+PSAwKSB7CiAJCXJjID0gMDsKIAl9IGVsc2UgaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LT5rdm0pKSB7CkBAIC05NDUsOSArMTIwOSwxMiBAQAogCX0gZWxzZSBpZiAoY3VycmVudC0+dGhyZWFkLmdtYXBfcGZhdWx0KSB7CiAJCXRyYWNlX2t2bV9zMzkwX21ham9yX2d1ZXN0X3BmYXVsdCh2Y3B1KTsKIAkJY3VycmVudC0+dGhyZWFkLmdtYXBfcGZhdWx0ID0gMDsKLQkJaWYgKGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHZjcHUpIHx8Ci0JCSAgICAoa3ZtX2FyY2hfZmF1bHRfaW5fc3luYyh2Y3B1KSA+PSAwKSkKKwkJaWYgKGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHZjcHUpKSB7CiAJCQlyYyA9IDA7CisJCX0gZWxzZSB7CisJCQlncGFfdCBncGEgPSBjdXJyZW50LT50aHJlYWQuZ21hcF9hZGRyOworCQkJcmMgPSBrdm1fYXJjaF9mYXVsdF9pbl9wYWdlKHZjcHUsIGdwYSwgMSk7CisJCX0KIAl9CiAKIAlpZiAocmMgPT0gLTEpIHsKQEAgLTk2OSwxNiArMTIzNiw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1ib29sIGt2bV9lbmFibGVkX2NtbWEodm9pZCkKLXsKLQlpZiAoIU1BQ0hJTkVfSVNfTFBBUikKLQkJcmV0dXJuIGZhbHNlOwotCS8qIG9ubHkgZW5hYmxlIGZvciB6MTAgYW5kIGxhdGVyICovCi0JaWYgKCFNQUNISU5FX0hBU19FREFUMSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCByYywgZXhpdF9yZWFzb247CkBAIC0xMDA4LDcgKzEyNjUsNyBAQAogCQl2Y3B1LT5zcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCiAJCXJjID0gdmNwdV9wb3N0X3J1bih2Y3B1LCBleGl0X3JlYXNvbik7Ci0JfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmICFyYyk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmICFndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkgJiYgIXJjKTsKIAogCXNyY3VfcmVhZF91bmxvY2soJnZjcHUtPmt2bS0+c3JjdSwgdmNwdS0+c3JjdV9pZHgpOwogCXJldHVybiByYzsKQEAgLTEwMTksMTAgKzEyNzYsMTUgQEAKIAlpbnQgcmM7CiAJc2lnc2V0X3Qgc2lnc2F2ZWQ7CiAKKwlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CisJCWt2bV9zMzkwX3ByZXBhcmVfZGVidWdfZXhpdCh2Y3B1KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHZjcHUtPnNpZ3NldF9hY3RpdmUpCiAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmdmNwdS0+c2lnc2V0LCAmc2lnc2F2ZWQpOwogCi0JYXRvbWljX2NsZWFyX21hc2soQ1BVU1RBVF9TVE9QUEVELCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKKwlrdm1fczM5MF92Y3B1X3N0YXJ0KHZjcHUpOwogCiAJc3dpdGNoIChrdm1fcnVuLT5leGl0X3JlYXNvbikgewogCWNhc2UgS1ZNX0VYSVRfUzM5MF9TSUVJQzoKQEAgLTEwMzEsNiArMTI5Myw3IEBACiAJY2FzZSBLVk1fRVhJVF9TMzkwX1JFU0VUOgogCWNhc2UgS1ZNX0VYSVRfUzM5MF9VQ09OVFJPTDoKIAljYXNlIEtWTV9FWElUX1MzOTBfVFNDSDoKKwljYXNlIEtWTV9FWElUX0RFQlVHOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTEwNTYsNiArMTMxOSwxMSBAQAogCQlyYyA9IC1FSU5UUjsKIAl9CiAKKwlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpICYmICFyYykgIHsKKwkJa3ZtX3MzOTBfcHJlcGFyZV9kZWJ1Z19leGl0KHZjcHUpOworCQlyYyA9IDA7CisJfQorCiAJaWYgKHJjID09IC1FT1BOT1RTVVBQKSB7CiAJCS8qIGludGVyY2VwdCBjYW5ub3QgYmUgaGFuZGxlZCBpbi1rZXJuZWwsIHByZXBhcmUga3ZtLXJ1biAqLwogCQlrdm1fcnVuLT5leGl0X3JlYXNvbiAgICAgICAgID0gS1ZNX0VYSVRfUzM5MF9TSUVJQzsKQEAgLTEwNzMsNyArMTM0MSw3IEBACiAKIAlrdm1fcnVuLT5wc3dfbWFzayAgICAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrOwogCWt2bV9ydW4tPnBzd19hZGRyICAgICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LmFkZHI7Ci0Ja3ZtX3J1bi0+cy5yZWdzLnByZWZpeCA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXg7CisJa3ZtX3J1bi0+cy5yZWdzLnByZWZpeCA9IGt2bV9zMzkwX2dldF9wcmVmaXgodmNwdSk7CiAJbWVtY3B5KCZrdm1fcnVuLT5zLnJlZ3MuY3JzLCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjciwgMTI4KTsKIAogCWlmICh2Y3B1LT5zaWdzZXRfYWN0aXZlKQpAQCAtMTA4Myw4MyArMTM1MSw1MiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBfX2d1ZXN0Y29weShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdGRlc3QsIHZvaWQgKmZyb20sCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIG4sIGludCBwcmVmaXgpCi17Ci0JaWYgKHByZWZpeCkKLQkJcmV0dXJuIGNvcHlfdG9fZ3Vlc3QodmNwdSwgZ3Vlc3RkZXN0LCBmcm9tLCBuKTsKLQllbHNlCi0JCXJldHVybiBjb3B5X3RvX2d1ZXN0X2Fic29sdXRlKHZjcHUsIGd1ZXN0ZGVzdCwgZnJvbSwgbik7Ci19Ci0KIC8qCiAgKiBzdG9yZSBzdGF0dXMgYXQgYWRkcmVzcwogICogd2UgdXNlIGhhdmUgdHdvIHNwZWNpYWwgY2FzZXM6CiAgKiBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfTk9BRERSOiAtPiAweDEyMDAgb24gNjQgYml0CiAgKiBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfUFJFRklYRUQ6IC0+IHByZWZpeAogICovCi1pbnQga3ZtX3MzOTBfc3RvcmVfc3RhdHVzX3VubG9hZGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBhZGRyKQoraW50IGt2bV9zMzkwX3N0b3JlX3N0YXR1c191bmxvYWRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3BhKQogewogCXVuc2lnbmVkIGNoYXIgYXJjaG1vZGUgPSAxOwotCWludCBwcmVmaXg7CisJdW5zaWduZWQgaW50IHB4OwogCXU2NCBjbGtjb21wOworCWludCByYzsKIAotCWlmIChhZGRyID09IEtWTV9TMzkwX1NUT1JFX1NUQVRVU19OT0FERFIpIHsKLQkJaWYgKGNvcHlfdG9fZ3Vlc3RfYWJzb2x1dGUodmNwdSwgMTYzdWwsICZhcmNobW9kZSwgMSkpCisJaWYgKGdwYSA9PSBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfTk9BRERSKSB7CisJCWlmICh3cml0ZV9ndWVzdF9hYnModmNwdSwgMTYzLCAmYXJjaG1vZGUsIDEpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWFkZHIgPSBTQVZFX0FSRUFfQkFTRTsKLQkJcHJlZml4ID0gMDsKLQl9IGVsc2UgaWYgKGFkZHIgPT0gS1ZNX1MzOTBfU1RPUkVfU1RBVFVTX1BSRUZJWEVEKSB7Ci0JCWlmIChjb3B5X3RvX2d1ZXN0KHZjcHUsIDE2M3VsLCAmYXJjaG1vZGUsIDEpKQorCQlncGEgPSBTQVZFX0FSRUFfQkFTRTsKKwl9IGVsc2UgaWYgKGdwYSA9PSBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfUFJFRklYRUQpIHsKKwkJaWYgKHdyaXRlX2d1ZXN0X3JlYWwodmNwdSwgMTYzLCAmYXJjaG1vZGUsIDEpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWFkZHIgPSBTQVZFX0FSRUFfQkFTRTsKLQkJcHJlZml4ID0gMTsKLQl9IGVsc2UKLQkJcHJlZml4ID0gMDsKLQotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgZnBfcmVncyksCi0JCQl2Y3B1LT5hcmNoLmd1ZXN0X2ZwcmVncy5mcHJzLCAxMjgsIHByZWZpeCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBncF9yZWdzKSwKLQkJCXZjcHUtPnJ1bi0+cy5yZWdzLmdwcnMsIDEyOCwgcHJlZml4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHBzdyksCi0JCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csIDE2LCBwcmVmaXgpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgcHJlZl9yZWcpLAotCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXgsIDQsIHByZWZpeCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsCi0JCQlhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgZnBfY3RybF9yZWcpLAotCQkJJnZjcHUtPmFyY2guZ3Vlc3RfZnByZWdzLmZwYywgNCwgcHJlZml4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHRvZF9yZWcpLAotCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT50b2RwciwgNCwgcHJlZml4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHRpbWVyKSwKLQkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1dG0sIDgsIHByZWZpeCkpCi0JCXJldHVybiAtRUZBVUxUOwotCisJCWdwYSA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIFNBVkVfQVJFQV9CQVNFKTsKKwl9CisJcmMgPSB3cml0ZV9ndWVzdF9hYnModmNwdSwgZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgZnBfcmVncyksCisJCQkgICAgIHZjcHUtPmFyY2guZ3Vlc3RfZnByZWdzLmZwcnMsIDEyOCk7CisJcmMgfD0gd3JpdGVfZ3Vlc3RfYWJzKHZjcHUsIGdwYSArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGdwX3JlZ3MpLAorCQkJICAgICAgdmNwdS0+cnVuLT5zLnJlZ3MuZ3BycywgMTI4KTsKKwlyYyB8PSB3cml0ZV9ndWVzdF9hYnModmNwdSwgZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgcHN3KSwKKwkJCSAgICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdywgMTYpOworCXB4ID0ga3ZtX3MzOTBfZ2V0X3ByZWZpeCh2Y3B1KTsKKwlyYyB8PSB3cml0ZV9ndWVzdF9hYnModmNwdSwgZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgcHJlZl9yZWcpLAorCQkJICAgICAgJnB4LCA0KTsKKwlyYyB8PSB3cml0ZV9ndWVzdF9hYnModmNwdSwKKwkJCSAgICAgIGdwYSArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGZwX2N0cmxfcmVnKSwKKwkJCSAgICAgICZ2Y3B1LT5hcmNoLmd1ZXN0X2ZwcmVncy5mcGMsIDQpOworCXJjIHw9IHdyaXRlX2d1ZXN0X2Ficyh2Y3B1LCBncGEgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCB0b2RfcmVnKSwKKwkJCSAgICAgICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+dG9kcHIsIDQpOworCXJjIHw9IHdyaXRlX2d1ZXN0X2Ficyh2Y3B1LCBncGEgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCB0aW1lciksCisJCQkgICAgICAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdXRtLCA4KTsKIAljbGtjb21wID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNrYyA+PiA4OwotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgY2xrX2NtcCksCi0JCQkmY2xrY29tcCwgOCwgcHJlZml4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGFjY19yZWdzKSwKLQkJCSZ2Y3B1LT5ydW4tPnMucmVncy5hY3JzLCA2NCwgcHJlZml4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoX19ndWVzdGNvcHkodmNwdSwKLQkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBjdHJsX3JlZ3MpLAotCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3IsIDEyOCwgcHJlZml4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7CisJcmMgfD0gd3JpdGVfZ3Vlc3RfYWJzKHZjcHUsIGdwYSArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGNsa19jbXApLAorCQkJICAgICAgJmNsa2NvbXAsIDgpOworCXJjIHw9IHdyaXRlX2d1ZXN0X2Ficyh2Y3B1LCBncGEgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBhY2NfcmVncyksCisJCQkgICAgICAmdmNwdS0+cnVuLT5zLnJlZ3MuYWNycywgNjQpOworCXJjIHw9IHdyaXRlX2d1ZXN0X2Ficyh2Y3B1LCBncGEgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBjdHJsX3JlZ3MpLAorCQkJICAgICAgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3IsIDEyOCk7CisJcmV0dXJuIHJjID8gLUVGQVVMVCA6IDA7CiB9CiAKIGludCBrdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTExNzYsNiArMTQxMywxMDkgQEAKIAlyZXR1cm4ga3ZtX3MzOTBfc3RvcmVfc3RhdHVzX3VubG9hZGVkKHZjcHUsIGFkZHIpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpc192Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBhdG9taWNfcmVhZCgmKHZjcHUpLT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpICYgQ1BVU1RBVF9TVE9QUEVEOworfQorCitzdGF0aWMgdm9pZCBfX2Rpc2FibGVfaWJzX29uX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRU5BQkxFX0lCUywgdmNwdSk7CisJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0RJU0FCTEVfSUJTLCB2Y3B1KTsKKwlleGl0X3NpZV9zeW5jKHZjcHUpOworfQorCitzdGF0aWMgdm9pZCBfX2Rpc2FibGVfaWJzX29uX2FsbF92Y3B1cyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CisJCV9fZGlzYWJsZV9pYnNfb25fdmNwdSh2Y3B1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZW5hYmxlX2lic19vbl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0RJU0FCTEVfSUJTLCB2Y3B1KTsKKwlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRU5BQkxFX0lCUywgdmNwdSk7CisJZXhpdF9zaWVfc3luYyh2Y3B1KTsKK30KKwordm9pZCBrdm1fczM5MF92Y3B1X3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgaSwgb25saW5lX3ZjcHVzLCBzdGFydGVkX3ZjcHVzID0gMDsKKworCWlmICghaXNfdmNwdV9zdG9wcGVkKHZjcHUpKQorCQlyZXR1cm47CisKKwl0cmFjZV9rdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AodmNwdS0+dmNwdV9pZCwgMSk7CisJLyogT25seSBvbmUgY3B1IGF0IGEgdGltZSBtYXkgZW50ZXIvbGVhdmUgdGhlIFNUT1BQRUQgc3RhdGUuICovCisJc3Bpbl9sb2NrX2JoKCZ2Y3B1LT5rdm0tPmFyY2guc3RhcnRfc3RvcF9sb2NrKTsKKwlvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZCgmdmNwdS0+a3ZtLT5vbmxpbmVfdmNwdXMpOworCisJZm9yIChpID0gMDsgaSA8IG9ubGluZV92Y3B1czsgaSsrKSB7CisJCWlmICghaXNfdmNwdV9zdG9wcGVkKHZjcHUtPmt2bS0+dmNwdXNbaV0pKQorCQkJc3RhcnRlZF92Y3B1cysrOworCX0KKworCWlmIChzdGFydGVkX3ZjcHVzID09IDApIHsKKwkJLyogd2UncmUgdGhlIG9ubHkgYWN0aXZlIFZDUFUgLT4gc3BlZWQgaXQgdXAgKi8KKwkJX19lbmFibGVfaWJzX29uX3ZjcHUodmNwdSk7CisJfSBlbHNlIGlmIChzdGFydGVkX3ZjcHVzID09IDEpIHsKKwkJLyoKKwkJICogQXMgd2UgYXJlIHN0YXJ0aW5nIGEgc2Vjb25kIFZDUFUsIHdlIGhhdmUgdG8gZGlzYWJsZQorCQkgKiB0aGUgSUJTIGZhY2lsaXR5IG9uIGFsbCBWQ1BVcyB0byByZW1vdmUgcG90ZW50aWFsbHkKKwkJICogb3VzdGFuZGluZyBFTkFCTEUgcmVxdWVzdHMuCisJCSAqLworCQlfX2Rpc2FibGVfaWJzX29uX2FsbF92Y3B1cyh2Y3B1LT5rdm0pOworCX0KKworCWF0b21pY19jbGVhcl9tYXNrKENQVVNUQVRfU1RPUFBFRCwgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CisJLyoKKwkgKiBBbm90aGVyIFZDUFUgbWlnaHQgaGF2ZSB1c2VkIElCUyB3aGlsZSB3ZSB3ZXJlIG9mZmxpbmUuCisJICogTGV0J3MgcGxheSBzYWZlIGFuZCBmbHVzaCB0aGUgVkNQVSBhdCBzdGFydHVwLgorCSAqLworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5paGNwdSAgPSAweGZmZmY7CisJc3Bpbl91bmxvY2tfYmgoJnZjcHUtPmt2bS0+YXJjaC5zdGFydF9zdG9wX2xvY2spOworCXJldHVybjsKK30KKwordm9pZCBrdm1fczM5MF92Y3B1X3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCBpLCBvbmxpbmVfdmNwdXMsIHN0YXJ0ZWRfdmNwdXMgPSAwOworCXN0cnVjdCBrdm1fdmNwdSAqc3RhcnRlZF92Y3B1ID0gTlVMTDsKKworCWlmIChpc192Y3B1X3N0b3BwZWQodmNwdSkpCisJCXJldHVybjsKKworCXRyYWNlX2t2bV9zMzkwX3ZjcHVfc3RhcnRfc3RvcCh2Y3B1LT52Y3B1X2lkLCAwKTsKKwkvKiBPbmx5IG9uZSBjcHUgYXQgYSB0aW1lIG1heSBlbnRlci9sZWF2ZSB0aGUgU1RPUFBFRCBzdGF0ZS4gKi8KKwlzcGluX2xvY2tfYmgoJnZjcHUtPmt2bS0+YXJjaC5zdGFydF9zdG9wX2xvY2spOworCW9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKCZ2Y3B1LT5rdm0tPm9ubGluZV92Y3B1cyk7CisKKwlhdG9taWNfc2V0X21hc2soQ1BVU1RBVF9TVE9QUEVELCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKKwlfX2Rpc2FibGVfaWJzX29uX3ZjcHUodmNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgb25saW5lX3ZjcHVzOyBpKyspIHsKKwkJaWYgKCFpc192Y3B1X3N0b3BwZWQodmNwdS0+a3ZtLT52Y3B1c1tpXSkpIHsKKwkJCXN0YXJ0ZWRfdmNwdXMrKzsKKwkJCXN0YXJ0ZWRfdmNwdSA9IHZjcHUtPmt2bS0+dmNwdXNbaV07CisJCX0KKwl9CisKKwlpZiAoc3RhcnRlZF92Y3B1cyA9PSAxKSB7CisJCS8qCisJCSAqIEFzIHdlIG9ubHkgaGF2ZSBvbmUgVkNQVSBsZWZ0LCB3ZSB3YW50IHRvIGVuYWJsZSB0aGUKKwkJICogSUJTIGZhY2lsaXR5IGZvciB0aGF0IFZDUFUgdG8gc3BlZWQgaXQgdXAuCisJCSAqLworCQlfX2VuYWJsZV9pYnNfb25fdmNwdShzdGFydGVkX3ZjcHUpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZ2Y3B1LT5rdm0tPmFyY2guc3RhcnRfc3RvcF9sb2NrKTsKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCAzYzFlMjI3Li5hODY1NWVkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC0yOCw3ICsyOCw2IEBACiAKIC8qIFRyYW5zYWN0aW9uYWwgTWVtb3J5IEV4ZWN1dGlvbiByZWxhdGVkIG1hY3JvcyAqLwogI2RlZmluZSBJU19URV9FTkFCTEVEKHZjcHUpCSgodmNwdS0+YXJjaC5zaWVfYmxvY2stPmVjYiAmIDB4MTApKQotI2RlZmluZSBUREJfQUREUgkJMHgxODAwVUwKICNkZWZpbmUgVERCX0ZPUk1BVDEJCTEKICNkZWZpbmUgSVNfSVREQl9WQUxJRCh2Y3B1KQkoKCooY2hhciAqKXZjcHUtPmFyY2guc2llX2Jsb2NrLT5pdGRiYSA9PSBUREJfRk9STUFUMSkpCiAKQEAgLTYyLDkgKzYxLDE1IEBACiAjZW5kaWYKIH0KIAorI2RlZmluZSBHVUVTVF9QUkVGSVhfU0hJRlQgMTMKK3N0YXRpYyBpbmxpbmUgdTMyIGt2bV9zMzkwX2dldF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4IDw8IEdVRVNUX1BSRUZJWF9TSElGVDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGt2bV9zMzkwX3NldF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHJlZml4KQogewotCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXggPSBwcmVmaXggJiAweDdmZmZlMDAwdTsKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4ID0gcHJlZml4ID4+IEdVRVNUX1BSRUZJWF9TSElGVDsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWhjcHUgID0gMHhmZmZmOwogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NTVVfUkVMT0FELCB2Y3B1KTsKIH0KQEAgLTEzMCw2ICsxMzUsNyBAQAogdm9pZCBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfbWFjaGluZV9jaGVja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQpOwogaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC0xMzcsMzUgKzE0Myw5NCBAQAogaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY29kZSk7CiBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLAogCQkJCQkJICAgIHU2NCBjcjYsIHU2NCBzY2hpZCk7Cit2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sCisJCQkgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpOwogaW50IGt2bV9zMzkwX21hc2tfYWRhcHRlcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgYm9vbCBtYXNrZWQpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBwcml2LmMgKi8KK2ludCBpc192YWxpZF9wc3cocHN3X3QgKnBzdyk7CiBpbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX3MzOTBfaGFuZGxlX2U1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX3MzOTBfaGFuZGxlXzAxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX3MzOTBfaGFuZGxlX2xwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fczM5MF9oYW5kbGVfc3RjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fczM5MF9oYW5kbGVfbGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9zMzkwX2hhbmRsZV9lYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBzaWdwLmMgKi8KIGludCBrdm1fczM5MF9oYW5kbGVfc2lncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9zMzkwX2hhbmRsZV9zaWdwX3BlaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBrdm0tczM5MC5jICovCitsb25nIGt2bV9hcmNoX2ZhdWx0X2luX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGludCB3cml0YWJsZSk7CiBpbnQga3ZtX3MzOTBfc3RvcmVfc3RhdHVzX3VubG9hZGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIGludCBrdm1fczM5MF92Y3B1X3N0b3JlX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgYWRkcik7Cit2b2lkIGt2bV9zMzkwX3ZjcHVfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX3MzOTBfdmNwdV9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHMzOTBfdmNwdV9ibG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzMzkwX3ZjcHVfdW5ibG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBleGl0X3NpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBleGl0X3NpZV9zeW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0vKiBhcmUgd2UgZ29pbmcgdG8gc3VwcG9ydCBjbW1hPyAqLwotYm9vbCBrdm1fZW5hYmxlZF9jbW1hKHZvaWQpOworaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworLyogaXMgY21tYSBlbmFibGVkICovCitib29sIGt2bV9zMzkwX2NtbWFfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pOworaW50IHRlc3RfdmZhY2lsaXR5KHVuc2lnbmVkIGxvbmcgbnIpOworCiAvKiBpbXBsZW1lbnRlZCBpbiBkaWFnLmMgKi8KIGludCBrdm1fczM5MF9oYW5kbGVfZGlhZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworLyogaW1wbGVtZW50ZWQgaW4gaW50ZXJydXB0LmMgKi8KK2ludCBrdm1fczM5MF9pbmplY3RfcHJvZ19pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICBzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gKnBnbV9pbmZvKTsKKworLyoqCisgKiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kIC0gY29uZGl0aW9uYWxseSBpbmplY3QgYSBwcm9ncmFtIGNoZWNrCisgKiBAdmNwdTogdmlydHVhbCBjcHUKKyAqIEByYzogb3JpZ2luYWwgcmV0dXJuL2Vycm9yIGNvZGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYWZ0ZXIgcmVndWxhciBndWVzdCBhY2Nlc3MgZnVuY3Rpb25zCisgKiBmYWlsZWQsIHRvIGNvbmRpdGlvbmFsbHkgaW5qZWN0IGEgcHJvZ3JhbSBjaGVjayB0byBhIHZjcHUuIFRoZSB0eXBpY2FsCisgKiBwYXR0ZXJuIHdvdWxkIGxvb2sgbGlrZQorICoKKyAqIHJjID0gd3JpdGVfZ3Vlc3QodmNwdSwgYWRkciwgZGF0YSwgbGVuKTsKKyAqIGlmIChyYykKKyAqCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHZjcHUsIHJjKTsKKyAqCisgKiBBIG5lZ2F0aXZlIHJldHVybiBjb2RlIGZyb20gZ3Vlc3QgYWNjZXNzIGZ1bmN0aW9ucyBpbXBsaWVzIGFuIGludGVybmFsIGVycm9yCisgKiBsaWtlIGUuZy4gb3V0IG9mIG1lbW9yeS4gSW4gdGhlc2UgY2FzZXMgbm8gcHJvZ3JhbSBjaGVjayBzaG91bGQgYmUgaW5qZWN0ZWQKKyAqIHRvIHRoZSBndWVzdC4KKyAqIEEgcG9zaXRpdmUgdmFsdWUgaW1wbGllcyB0aGF0IGFuIGV4Y2VwdGlvbiBoYXBwZW5lZCB3aGlsZSBhY2Nlc3NpbmcgYSBndWVzdCdzCisgKiBtZW1vcnkuIEluIHRoaXMgY2FzZSBhbGwgZGF0YSBiZWxvbmdpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSBjaGVjaworICogaGFzIGJlZW4gc3RvcmVkIGluIHZjcHUtPmFyY2gucGdtIGFuZCBjYW4gYmUgaW5qZWN0ZWQgd2l0aAorICoga3ZtX3MzOTBfaW5qZWN0X3Byb2dfaXJxKCkuCisgKgorICogUmV0dXJuczogLSB0aGUgb3JpZ2luYWwgQHJjIHZhbHVlIGlmIEByYyB3YXMgbmVnYXRpdmUgKGludGVybmFsIGVycm9yKQorICoJICAgIC0gemVybyBpZiBAcmMgd2FzIGFscmVhZHkgemVybworICoJICAgIC0gemVybyBvciBlcnJvciBjb2RlIGZyb20gaW5qZWN0aW5nIGlmIEByYyB3YXMgcG9zaXRpdmUKKyAqCSAgICAgIChwcm9ncmFtIGNoZWNrIGluamVjdGVkIHRvIEB2Y3B1KQorICovCitzdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJjKQoreworCWlmIChyYyA8PSAwKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2lycSh2Y3B1LCAmdmNwdS0+YXJjaC5wZ20pOworfQogCiAvKiBpbXBsZW1lbnRlZCBpbiBpbnRlcnJ1cHQuYyAqLwogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHBzd19leHRpbnRfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pOworaW50IGt2bV9zMzkwX3NpX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKworLyogaW1wbGVtZW50ZWQgaW4gZ3Vlc3RkYmcuYyAqLwordm9pZCBrdm1fczM5MF9iYWNrdXBfZ3Vlc3RfcGVyX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX3MzOTBfcmVzdG9yZV9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fczM5MF9wYXRjaF9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9zMzkwX2ltcG9ydF9icF9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpOwordm9pZCBrdm1fczM5MF9jbGVhcl9icF9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV9zMzkwX3ByZXBhcmVfZGVidWdfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fczM5MF9oYW5kbGVfcGVyX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCA0NzZlOWUyLi5mODljMWNkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMzUsOCArMzUsOCBAQAogewogCXN0cnVjdCBrdm1fdmNwdSAqY3B1cDsKIAlzNjQgaG9zdGNsaywgdmFsOworCWludCBpLCByYzsKIAl1NjQgb3AyOwotCWludCBpOwogCiAJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApOwpAQCAtNDQsOCArNDQsOSBAQAogCW9wMiA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1KTsKIAlpZiAob3AyICYgNykJLyogT3BlcmFuZCBtdXN0IGJlIG9uIGEgZG91Ymxld29yZCBib3VuZGFyeSAqLwogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKLQlpZiAoZ2V0X2d1ZXN0KHZjcHUsIHZhbCwgKHU2NCBfX3VzZXIgKikgb3AyKSkKLQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7CisJcmMgPSByZWFkX2d1ZXN0KHZjcHUsIG9wMiwgJnZhbCwgc2l6ZW9mKHZhbCkpOworCWlmIChyYykKKwkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2NvbmQodmNwdSwgcmMpOwogCiAJaWYgKHN0b3JlX3RvZF9jbG9jaygmaG9zdGNsaykpIHsKIAkJa3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAzKTsKQEAgLTY1LDggKzY2LDggQEAKIHN0YXRpYyBpbnQgaGFuZGxlX3NldF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXU2NCBvcGVyYW5kMjsKLQl1MzIgYWRkcmVzcyA9IDA7Ci0JdTggdG1wOworCXUzMiBhZGRyZXNzOworCWludCByYzsKIAogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc3B4Kys7CiAKQEAgLTgwLDE0ICs4MSwxOCBAQAogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKIAogCS8qIGdldCB0aGUgdmFsdWUgKi8KLQlpZiAoZ2V0X2d1ZXN0KHZjcHUsIGFkZHJlc3MsICh1MzIgX191c2VyICopIG9wZXJhbmQyKSkKLQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7CisJcmMgPSByZWFkX2d1ZXN0KHZjcHUsIG9wZXJhbmQyLCAmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKTsKKwlpZiAocmMpCisJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHZjcHUsIHJjKTsKIAotCWFkZHJlc3MgPSBhZGRyZXNzICYgMHg3ZmZmZTAwMHU7CisJYWRkcmVzcyAmPSAweDdmZmZlMDAwdTsKIAotCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgdmFsdWUgaXMgdmFsaWQgbWVtb3J5ICovCi0JaWYgKGNvcHlfZnJvbV9ndWVzdF9hYnNvbHV0ZSh2Y3B1LCAmdG1wLCBhZGRyZXNzLCAxKSB8fAotCSAgIChjb3B5X2Zyb21fZ3Vlc3RfYWJzb2x1dGUodmNwdSwgJnRtcCwgYWRkcmVzcyArIFBBR0VfU0laRSwgMSkpKQorCS8qCisJICogTWFrZSBzdXJlIHRoZSBuZXcgdmFsdWUgaXMgdmFsaWQgbWVtb3J5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlCisJICogZmlyc3QgcGFnZSwgc2luY2UgYWRkcmVzcyBpcyA4ayBhbGlnbmVkIGFuZCBtZW1vcnkgcGllY2VzIGFyZSBhbHdheXMKKwkgKiBhdCBsZWFzdCAxTUIgYWxpZ25lZCBhbmQgaGF2ZSBhdCBsZWFzdCBhIHNpemUgb2YgMU1CLgorCSAqLworCWlmIChrdm1faXNfZXJyb3JfZ3BhKHZjcHUtPmt2bSwgYWRkcmVzcykpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOwogCiAJa3ZtX3MzOTBfc2V0X3ByZWZpeCh2Y3B1LCBhZGRyZXNzKTsKQEAgLTEwMSw2ICsxMDYsNyBAQAogewogCXU2NCBvcGVyYW5kMjsKIAl1MzIgYWRkcmVzczsKKwlpbnQgcmM7CiAKIAl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3N0cHgrKzsKIApAQCAtMTEzLDEyICsxMTksMTIgQEAKIAlpZiAob3BlcmFuZDIgJiAzKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKIAotCWFkZHJlc3MgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4OwotCWFkZHJlc3MgPSBhZGRyZXNzICYgMHg3ZmZmZTAwMHU7CisJYWRkcmVzcyA9IGt2bV9zMzkwX2dldF9wcmVmaXgodmNwdSk7CiAKIAkvKiBnZXQgdGhlIHZhbHVlICovCi0JaWYgKHB1dF9ndWVzdCh2Y3B1LCBhZGRyZXNzLCAodTMyIF9fdXNlciAqKW9wZXJhbmQyKSkKLQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7CisJcmMgPSB3cml0ZV9ndWVzdCh2Y3B1LCBvcGVyYW5kMiwgJmFkZHJlc3MsIHNpemVvZihhZGRyZXNzKSk7CisJaWYgKHJjKQorCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dfY29uZCh2Y3B1LCByYyk7CiAKIAlWQ1BVX0VWRU5UKHZjcHUsIDUsICJzdG9yaW5nIHByZWZpeCB0byAleCIsIGFkZHJlc3MpOwogCXRyYWNlX2t2bV9zMzkwX2hhbmRsZV9wcmVmaXgodmNwdSwgMCwgYWRkcmVzcyk7CkBAIC0xMjcsMjggKzEzMyw0NCBAQAogCiBzdGF0aWMgaW50IGhhbmRsZV9zdG9yZV9jcHVfYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTY0IHVzZXJhZGRyOworCXUxNiB2Y3B1X2lkID0gdmNwdS0+dmNwdV9pZDsKKwl1NjQgZ2E7CisJaW50IHJjOwogCiAJdmNwdS0+c3RhdC5pbnN0cnVjdGlvbl9zdGFwKys7CiAKIAlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7CiAKLQl1c2VyYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1KTsKKwlnYSA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1KTsKIAotCWlmICh1c2VyYWRkciAmIDEpCisJaWYgKGdhICYgMSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7CiAKLQlpZiAocHV0X2d1ZXN0KHZjcHUsIHZjcHUtPnZjcHVfaWQsICh1MTYgX191c2VyICopdXNlcmFkZHIpKQotCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKKwlyYyA9IHdyaXRlX2d1ZXN0KHZjcHUsIGdhLCAmdmNwdV9pZCwgc2l6ZW9mKHZjcHVfaWQpKTsKKwlpZiAocmMpCisJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHZjcHUsIHJjKTsKIAotCVZDUFVfRVZFTlQodmNwdSwgNSwgInN0b3JpbmcgY3B1IGFkZHJlc3MgdG8gJWxseCIsIHVzZXJhZGRyKTsKLQl0cmFjZV9rdm1fczM5MF9oYW5kbGVfc3RhcCh2Y3B1LCB1c2VyYWRkcik7CisJVkNQVV9FVkVOVCh2Y3B1LCA1LCAic3RvcmluZyBjcHUgYWRkcmVzcyB0byAlbGx4IiwgZ2EpOworCXRyYWNlX2t2bV9zMzkwX2hhbmRsZV9zdGFwKHZjcHUsIGdhKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19za2V5X2NoZWNrX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKCEodmNwdS0+YXJjaC5zaWVfYmxvY2stPmljdGwgJiAoSUNUTF9JU0tFIHwgSUNUTF9TU0tFIHwgSUNUTF9SUkJFKSkpCisJCXJldHVybjsKKworCXMzOTBfZW5hYmxlX3NrZXkoKTsKKwl0cmFjZV9rdm1fczM5MF9za2V5X3JlbGF0ZWRfaW5zdCh2Y3B1KTsKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWN0bCAmPSB+KElDVExfSVNLRSB8IElDVExfU1NLRSB8IElDVExfUlJCRSk7Cit9CisKKwogc3RhdGljIGludCBoYW5kbGVfc2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJX19za2V5X2NoZWNrX2VuYWJsZSh2Y3B1KTsKKwogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc3RvcmFnZV9rZXkrKzsKIAogCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQpAQCAtMTYwLDkgKzE4MiwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGhhbmRsZV9pcHRlX2ludGVybG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcHN3X3QgKnBzdyA9ICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdzsKKworCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25faXB0ZV9pbnRlcmxvY2srKzsKKwlpZiAocHN3X2JpdHMoKnBzdykucCkKKwkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7CisJd2FpdF9ldmVudCh2Y3B1LT5rdm0tPmFyY2guaXB0ZV93cSwgIWlwdGVfbG9ja19oZWxkKHZjcHUpKTsKKwlwc3ctPmFkZHIgPSBfX3Jld2luZF9wc3coKnBzdywgNCk7CisJVkNQVV9FVkVOVCh2Y3B1LCA0LCAiJXMiLCAicmV0cnlpbmcgaXB0ZSBpbnRlcmxvY2sgb3BlcmF0aW9uIik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX3Rlc3RfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgaHZhOwogCWdwYV90IGFkZHI7CiAJaW50IHJlZzI7CiAKQEAgLTE3MSwxNiArMjA1LDE4IEBACiAKIAlrdm1fczM5MF9nZXRfcmVnc19ycmUodmNwdSwgTlVMTCwgJnJlZzIpOwogCWFkZHIgPSB2Y3B1LT5ydW4tPnMucmVncy5ncHJzW3JlZzJdICYgUEFHRV9NQVNLOworCWFkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBhZGRyKTsKKwlpZiAoa3ZtX3MzOTBfY2hlY2tfbG93X2FkZHJfcHJvdGVjdGlvbih2Y3B1LCBhZGRyKSkKKwkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2lycSh2Y3B1LCAmdmNwdS0+YXJjaC5wZ20pOwogCWFkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBhZGRyKTsKIAotCWh2YSA9IGdmbl90b19odmEodmNwdS0+a3ZtLCBncGFfdG9fZ2ZuKGFkZHIpKTsKLQlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQorCWlmIChrdm1faXNfZXJyb3JfZ3BhKHZjcHUtPmt2bSwgYWRkcikpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOwogCS8qCiAJICogV2UgZG9uJ3QgZXhwZWN0IGVycm9ycyBvbiBtb2Rlcm4gc3lzdGVtcywgYW5kIGRvIG5vdCBjYXJlCiAJICogYWJvdXQgc3RvcmFnZSBrZXlzICh5ZXQpLCBzbyBsZXQncyBqdXN0IGNsZWFyIHRoZSBwYWdlLgogCSAqLwotCWlmIChjbGVhcl91c2VyKCh2b2lkIF9fdXNlciAqKWh2YSwgUEFHRV9TSVpFKSAhPSAwKQorCWlmIChrdm1fY2xlYXJfZ3Vlc3QodmNwdS0+a3ZtLCBhZGRyLCBQQUdFX1NJWkUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIDApOwogCXZjcHUtPnJ1bi0+cy5yZWdzLmdwcnNbMF0gPSAwOwpAQCAtMTkwLDkgKzIyNiwxMiBAQAogc3RhdGljIGludCBoYW5kbGVfdHBpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTMyIHRwaV9kYXRhWzNdOworCWludCBjYywgcmM7CiAJdTY0IGFkZHI7Ci0JaW50IGNjOwogCisJcmMgPSAwOwogCWFkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSk7CiAJaWYgKGFkZHIgJiAzKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKQEAgLTIwMSwzMCArMjQwLDQxIEBACiAJaWYgKCFpbnRpKQogCQlnb3RvIG5vX2ludGVycnVwdDsKIAljYyA9IDE7CisJdHBpX2RhdGFbMF0gPSBpbnRpLT5pby5zdWJjaGFubmVsX2lkIDw8IDE2IHwgaW50aS0+aW8uc3ViY2hhbm5lbF9ucjsKKwl0cGlfZGF0YVsxXSA9IGludGktPmlvLmlvX2ludF9wYXJtOworCXRwaV9kYXRhWzJdID0gaW50aS0+aW8uaW9faW50X3dvcmQ7CiAJaWYgKGFkZHIpIHsKIAkJLyoKIAkJICogU3RvcmUgdGhlIHR3by13b3JkIEkvTyBpbnRlcnJ1cHRpb24gY29kZSBpbnRvIHRoZQogCQkgKiBwcm92aWRlZCBhcmVhLgogCQkgKi8KLQkJaWYgKHB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5pby5zdWJjaGFubmVsX2lkLCAodTE2IF9fdXNlciAqKWFkZHIpCi0JCSAgICB8fCBwdXRfZ3Vlc3QodmNwdSwgaW50aS0+aW8uc3ViY2hhbm5lbF9uciwgKHUxNiBfX3VzZXIgKikoYWRkciArIDIpKQotCQkgICAgfHwgcHV0X2d1ZXN0KHZjcHUsIGludGktPmlvLmlvX2ludF9wYXJtLCAodTMyIF9fdXNlciAqKShhZGRyICsgNCkpKQotCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7CisJCWxlbiA9IHNpemVvZih0cGlfZGF0YSkgLSA0OworCQlyYyA9IHdyaXRlX2d1ZXN0KHZjcHUsIGFkZHIsICZ0cGlfZGF0YSwgbGVuKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2NvbmQodmNwdSwgcmMpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFN0b3JlIHRoZSB0aHJlZS13b3JkIEkvTyBpbnRlcnJ1cHRpb24gY29kZSBpbnRvCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBsb3djb3JlIGFyZWEuCiAJCSAqLwotCQlwdXRfZ3Vlc3QodmNwdSwgaW50aS0+aW8uc3ViY2hhbm5lbF9pZCwgKHUxNiBfX3VzZXIgKikgX19MQ19TVUJDSEFOTkVMX0lEKTsKLQkJcHV0X2d1ZXN0KHZjcHUsIGludGktPmlvLnN1YmNoYW5uZWxfbnIsICh1MTYgX191c2VyICopIF9fTENfU1VCQ0hBTk5FTF9OUik7Ci0JCXB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5pby5pb19pbnRfcGFybSwgKHUzMiBfX3VzZXIgKikgX19MQ19JT19JTlRfUEFSTSk7Ci0JCXB1dF9ndWVzdCh2Y3B1LCBpbnRpLT5pby5pb19pbnRfd29yZCwgKHUzMiBfX3VzZXIgKikgX19MQ19JT19JTlRfV09SRCk7CisJCWxlbiA9IHNpemVvZih0cGlfZGF0YSk7CisJCWlmICh3cml0ZV9ndWVzdF9sYyh2Y3B1LCBfX0xDX1NVQkNIQU5ORUxfSUQsICZ0cGlfZGF0YSwgbGVuKSkKKwkJCXJjID0gLUVGQVVMVDsKIAl9Ci0Ja2ZyZWUoaW50aSk7CisJLyoKKwkgKiBJZiB3ZSBlbmNvdW50ZXIgYSBwcm9ibGVtIHN0b3JpbmcgdGhlIGludGVycnVwdGlvbiBjb2RlLCB0aGUKKwkgKiBpbnN0cnVjdGlvbiBpcyBzdXBwcmVzc2VkIGZyb20gdGhlIGd1ZXN0J3MgdmlldzogcmVpbmplY3QgdGhlCisJICogaW50ZXJydXB0LgorCSAqLworCWlmICghcmMpCisJCWtmcmVlKGludGkpOworCWVsc2UKKwkJa3ZtX3MzOTBfcmVpbmplY3RfaW9faW50KHZjcHUtPmt2bSwgaW50aSk7CiBub19pbnRlcnJ1cHQ6CiAJLyogU2V0IGNvbmRpdGlvbiBjb2RlIGFuZCB3ZSdyZSBkb25lLiAqLwotCWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgY2MpOwotCXJldHVybiAwOworCWlmICghcmMpCisJCWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgY2MpOworCXJldHVybiByYyA/IC1FRkFVTFQgOiAwOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV90c2NoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTI5MiwxMCArMzQyLDEwIEBACiAJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApOwogCi0JcmMgPSBjb3B5X3RvX2d1ZXN0KHZjcHUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3RmbF9mYWNfbGlzdCksCi0JCQkgICB2ZmFjaWxpdGllcywgNCk7CisJcmMgPSB3cml0ZV9ndWVzdF9sYyh2Y3B1LCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZmxfZmFjX2xpc3QpLAorCQkJICAgIHZmYWNpbGl0aWVzLCA0KTsKIAlpZiAocmMpCi0JCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOworCQlyZXR1cm4gcmM7CiAJVkNQVV9FVkVOVCh2Y3B1LCA1LCAic3RvcmUgZmFjaWxpdHkgbGlzdCB2YWx1ZSAleCIsCiAJCSAgICoodW5zaWduZWQgaW50ICopIHZmYWNpbGl0aWVzKTsKIAl0cmFjZV9rdm1fczM5MF9oYW5kbGVfc3RmbCh2Y3B1LCAqKHVuc2lnbmVkIGludCAqKSB2ZmFjaWxpdGllcyk7CkBAIC0zMTQsNyArMzY0LDggQEAKICNkZWZpbmUgUFNXX0FERFJfMjQgMHgwMDAwMDAwMDAwZmZmZmZmVUwKICNkZWZpbmUgUFNXX0FERFJfMzEgMHgwMDAwMDAwMDdmZmZmZmZmVUwKIAotc3RhdGljIGludCBpc192YWxpZF9wc3cocHN3X3QgKnBzdykgeworaW50IGlzX3ZhbGlkX3Bzdyhwc3dfdCAqcHN3KQorewogCWlmIChwc3ctPm1hc2sgJiBQU1dfTUFTS19VTkFTU0lHTkVEKQogCQlyZXR1cm4gMDsKIAlpZiAoKHBzdy0+bWFzayAmIFBTV19NQVNLX0FERFJfTU9ERSkgPT0gUFNXX01BU0tfQkEpIHsKQEAgLTMyNSw2ICszNzYsOCBAQAogCQlyZXR1cm4gMDsKIAlpZiAoKHBzdy0+bWFzayAmIFBTV19NQVNLX0FERFJfTU9ERSkgPT0gIFBTV19NQVNLX0VBKQogCQlyZXR1cm4gMDsKKwlpZiAocHN3LT5hZGRyICYgMSkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMzMyw2ICszODYsNyBAQAogCXBzd190ICpncHN3ID0gJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3OwogCXBzd19jb21wYXRfdCBuZXdfcHN3OwogCXU2NCBhZGRyOworCWludCByYzsKIAogCWlmIChncHN3LT5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9QUklWSUxFR0VEX09QKTsKQEAgLTM0MCw4ICszOTQsMTAgQEAKIAlhZGRyID0ga3ZtX3MzOTBfZ2V0X2Jhc2VfZGlzcF9zKHZjcHUpOwogCWlmIChhZGRyICYgNykKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7Ci0JaWYgKGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmbmV3X3BzdywgYWRkciwgc2l6ZW9mKG5ld19wc3cpKSkKLQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7CisKKwlyYyA9IHJlYWRfZ3Vlc3QodmNwdSwgYWRkciwgJm5ld19wc3csIHNpemVvZihuZXdfcHN3KSk7CisJaWYgKHJjKQorCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dfY29uZCh2Y3B1LCByYyk7CiAJaWYgKCEobmV3X3Bzdy5tYXNrICYgUFNXMzJfTUFTS19CQVNFKSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7CiAJZ3Bzdy0+bWFzayA9IChuZXdfcHN3Lm1hc2sgJiB+UFNXMzJfTUFTS19CQVNFKSA8PCAzMjsKQEAgLTM1Nyw2ICs0MTMsNyBAQAogewogCXBzd190IG5ld19wc3c7CiAJdTY0IGFkZHI7CisJaW50IHJjOwogCiAJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApOwpAQCAtMzY0LDggKzQyMSw5IEBACiAJYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1KTsKIAlpZiAoYWRkciAmIDcpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1NQRUNJRklDQVRJT04pOwotCWlmIChjb3B5X2Zyb21fZ3Vlc3QodmNwdSwgJm5ld19wc3csIGFkZHIsIHNpemVvZihuZXdfcHN3KSkpCi0JCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOworCXJjID0gcmVhZF9ndWVzdCh2Y3B1LCBhZGRyLCAmbmV3X3Bzdywgc2l6ZW9mKG5ld19wc3cpKTsKKwlpZiAocmMpCisJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHZjcHUsIHJjKTsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3BzdyA9IG5ld19wc3c7CiAJaWYgKCFpc192YWxpZF9wc3coJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3KSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7CkBAIC0zNzUsNyArNDMzLDkgQEAKIAogc3RhdGljIGludCBoYW5kbGVfc3RpZHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCXU2NCBzdGlkcF9kYXRhID0gdmNwdS0+YXJjaC5zdGlkcF9kYXRhOwogCXU2NCBvcGVyYW5kMjsKKwlpbnQgcmM7CiAKIAl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3N0aWRwKys7CiAKQEAgLTM4Nyw4ICs0NDcsOSBAQAogCWlmIChvcGVyYW5kMiAmIDcpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1NQRUNJRklDQVRJT04pOwogCi0JaWYgKHB1dF9ndWVzdCh2Y3B1LCB2Y3B1LT5hcmNoLnN0aWRwX2RhdGEsICh1NjQgX191c2VyICopb3BlcmFuZDIpKQotCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKKwlyYyA9IHdyaXRlX2d1ZXN0KHZjcHUsIG9wZXJhbmQyLCAmc3RpZHBfZGF0YSwgc2l6ZW9mKHN0aWRwX2RhdGEpKTsKKwlpZiAocmMpCisJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHZjcHUsIHJjKTsKIAogCVZDUFVfRVZFTlQodmNwdSwgNSwgIiVzIiwgInN0b3JlIGNwdSBpZCIpOwogCXJldHVybiAwOwpAQCAtNDc0LDkgKzUzNSwxMCBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoY29weV90b19ndWVzdF9hYnNvbHV0ZSh2Y3B1LCBvcGVyYW5kMiwgKHZvaWQgKikgbWVtLCBQQUdFX1NJWkUpKSB7Ci0JCXJjID0ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKLQkJZ290byBvdXRfZXhjZXB0aW9uOworCXJjID0gd3JpdGVfZ3Vlc3QodmNwdSwgb3BlcmFuZDIsICh2b2lkICopbWVtLCBQQUdFX1NJWkUpOworCWlmIChyYykgeworCQlyYyA9IGt2bV9zMzkwX2luamVjdF9wcm9nX2NvbmQodmNwdSwgcmMpOworCQlnb3RvIG91dDsKIAl9CiAJdHJhY2Vfa3ZtX3MzOTBfaGFuZGxlX3N0c2kodmNwdSwgZmMsIHNlbDEsIHNlbDIsIG9wZXJhbmQyKTsKIAlmcmVlX3BhZ2UobWVtKTsKQEAgLTQ4NSw3ICs1NDcsNyBAQAogCXJldHVybiAwOwogb3V0X25vX2RhdGE6CiAJa3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAzKTsKLW91dF9leGNlcHRpb246CitvdXQ6CiAJZnJlZV9wYWdlKG1lbSk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNDk2LDYgKzU1OCw3IEBACiAJWzB4MTBdID0gaGFuZGxlX3NldF9wcmVmaXgsCiAJWzB4MTFdID0gaGFuZGxlX3N0b3JlX3ByZWZpeCwKIAlbMHgxMl0gPSBoYW5kbGVfc3RvcmVfY3B1X2FkZHJlc3MsCisJWzB4MjFdID0gaGFuZGxlX2lwdGVfaW50ZXJsb2NrLAogCVsweDI5XSA9IGhhbmRsZV9za2V5LAogCVsweDJhXSA9IGhhbmRsZV9za2V5LAogCVsweDJiXSA9IGhhbmRsZV9za2V5LApAQCAtNTEzLDYgKzU3Niw3IEBACiAJWzB4M2FdID0gaGFuZGxlX2lvX2luc3QsCiAJWzB4M2JdID0gaGFuZGxlX2lvX2luc3QsCiAJWzB4M2NdID0gaGFuZGxlX2lvX2luc3QsCisJWzB4NTBdID0gaGFuZGxlX2lwdGVfaW50ZXJsb2NrLAogCVsweDVmXSA9IGhhbmRsZV9pb19pbnN0LAogCVsweDc0XSA9IGhhbmRsZV9pb19pbnN0LAogCVsweDc2XSA9IGhhbmRsZV9pb19pbnN0LApAQCAtNTkxLDYgKzY1NSwxMSBAQAogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKIAogCXN0YXJ0ID0gdmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyZWcyXSAmIFBBR0VfTUFTSzsKKwlpZiAodmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyZWcxXSAmIFBGTUZfQ0YpIHsKKwkJaWYgKGt2bV9zMzkwX2NoZWNrX2xvd19hZGRyX3Byb3RlY3Rpb24odmNwdSwgc3RhcnQpKQorCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2lycSh2Y3B1LCAmdmNwdS0+YXJjaC5wZ20pOworCX0KKwogCXN3aXRjaCAodmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyZWcxXSAmIFBGTUZfRlNDKSB7CiAJY2FzZSAweDAwMDAwMDAwOgogCQllbmQgPSAoc3RhcnQgKyAoMVVMIDw8IDEyKSkgJiB+KCgxVUwgPDwgMTIpIC0gMSk7CkBAIC02MDYsMTAgKzY3NSwxNSBAQAogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTsKIAl9CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdXNlcmFkZHI7CisJCXVuc2lnbmVkIGxvbmcgdXNlcmFkZHIsIGFic19hZGRyOwogCi0JCXVzZXJhZGRyID0gZ21hcF90cmFuc2xhdGUoc3RhcnQsIHZjcHUtPmFyY2guZ21hcCk7Ci0JCWlmIChJU19FUlIoKHZvaWQgKil1c2VyYWRkcikpCisJCS8qIFRyYW5zbGF0ZSBndWVzdCBhZGRyZXNzIHRvIGhvc3QgYWRkcmVzcyAqLworCQlpZiAoKHZjcHUtPnJ1bi0+cy5yZWdzLmdwcnNbcmVnMV0gJiBQRk1GX0ZTQykgPT0gMCkKKwkJCWFic19hZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgc3RhcnQpOworCQllbHNlCisJCQlhYnNfYWRkciA9IHN0YXJ0OworCQl1c2VyYWRkciA9IGdmbl90b19odmEodmNwdS0+a3ZtLCBncGFfdG9fZ2ZuKGFic19hZGRyKSk7CisJCWlmIChrdm1faXNfZXJyb3JfaHZhKHVzZXJhZGRyKSkKIAkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOwogCiAJCWlmICh2Y3B1LT5ydW4tPnMucmVncy5ncHJzW3JlZzFdICYgUEZNRl9DRikgewpAQCAtNjE4LDYgKzY5Miw3IEBACiAJCX0KIAogCQlpZiAodmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyZWcxXSAmIFBGTUZfU0spIHsKKwkJCV9fc2tleV9jaGVja19lbmFibGUodmNwdSk7CiAJCQlpZiAoc2V0X2d1ZXN0X3N0b3JhZ2Vfa2V5KGN1cnJlbnQtPm1tLCB1c2VyYWRkciwKIAkJCQkJdmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyZWcxXSAmIFBGTUZfS0VZLAogCQkJCQl2Y3B1LT5ydW4tPnMucmVncy5ncHJzW3JlZzFdICYgUEZNRl9OUSkpCkBAIC02NDIsNyArNzE3LDcgQEAKIAlWQ1BVX0VWRU5UKHZjcHUsIDUsICJjbW1hIHJlbGVhc2UgJWQgcGFnZXMiLCBlbnRyaWVzKTsKIAlnbWFwID0gdmNwdS0+YXJjaC5nbWFwOwogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fZXNzYSsrOwotCWlmICgha3ZtX2VuYWJsZWRfY21tYSgpIHx8ICF2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y2JybG8pCisJaWYgKCFrdm1fczM5MF9jbW1hX2VuYWJsZWQodmNwdS0+a3ZtKSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fT1BFUkFUSU9OKTsKIAogCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQpAQCAtNjcyLDcgKzc0NywxMCBAQAogfQogCiBzdGF0aWMgY29uc3QgaW50ZXJjZXB0X2hhbmRsZXJfdCBiOV9oYW5kbGVyc1syNTZdID0geworCVsweDhhXSA9IGhhbmRsZV9pcHRlX2ludGVybG9jaywKIAlbMHg4ZF0gPSBoYW5kbGVfZXBzdywKKwlbMHg4ZV0gPSBoYW5kbGVfaXB0ZV9pbnRlcmxvY2ssCisJWzB4OGZdID0gaGFuZGxlX2lwdGVfaW50ZXJsb2NrLAogCVsweGFiXSA9IGhhbmRsZV9lc3NhLAogCVsweGFmXSA9IGhhbmRsZV9wZm1mLAogfTsKQEAgLTY5MywzMiArNzcxLDY3IEBACiB7CiAJaW50IHJlZzEgPSAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDBmMCkgPj4gNDsKIAlpbnQgcmVnMyA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgJiAweDAwMGY7Ci0JdTY0IHVzZXJhZGRyOwogCXUzMiB2YWwgPSAwOwogCWludCByZWcsIHJjOworCXU2NCBnYTsKIAogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fbGN0bCsrOwogCiAJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApOwogCi0JdXNlcmFkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3JzKHZjcHUpOworCWdhID0ga3ZtX3MzOTBfZ2V0X2Jhc2VfZGlzcF9ycyh2Y3B1KTsKIAotCWlmICh1c2VyYWRkciAmIDMpCisJaWYgKGdhICYgMykKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7CiAKLQlWQ1BVX0VWRU5UKHZjcHUsIDUsICJsY3RsIHIxOiV4LCByMzoleCwgYWRkcjolbGx4IiwgcmVnMSwgcmVnMywKLQkJICAgdXNlcmFkZHIpOwotCXRyYWNlX2t2bV9zMzkwX2hhbmRsZV9sY3RsKHZjcHUsIDAsIHJlZzEsIHJlZzMsIHVzZXJhZGRyKTsKKwlWQ1BVX0VWRU5UKHZjcHUsIDUsICJsY3RsIHIxOiV4LCByMzoleCwgYWRkcjolbGx4IiwgcmVnMSwgcmVnMywgZ2EpOworCXRyYWNlX2t2bV9zMzkwX2hhbmRsZV9sY3RsKHZjcHUsIDAsIHJlZzEsIHJlZzMsIGdhKTsKIAogCXJlZyA9IHJlZzE7CiAJZG8gewotCQlyYyA9IGdldF9ndWVzdCh2Y3B1LCB2YWwsICh1MzIgX191c2VyICopIHVzZXJhZGRyKTsKKwkJcmMgPSByZWFkX2d1ZXN0KHZjcHUsIGdhLCAmdmFsLCBzaXplb2YodmFsKSk7CiAJCWlmIChyYykKLQkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOworCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2NvbmQodmNwdSwgcmMpOwogCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyW3JlZ10gJj0gMHhmZmZmZmZmZjAwMDAwMDAwdWw7CiAJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3JbcmVnXSB8PSB2YWw7Ci0JCXVzZXJhZGRyICs9IDQ7CisJCWdhICs9IDQ7CisJCWlmIChyZWcgPT0gcmVnMykKKwkJCWJyZWFrOworCQlyZWcgPSAocmVnICsgMSkgJSAxNjsKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiAwOworfQorCitpbnQga3ZtX3MzOTBfaGFuZGxlX3N0Y3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgcmVnMSA9ICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhICYgMHgwMGYwKSA+PiA0OworCWludCByZWczID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDAwZjsKKwl1NjQgZ2E7CisJdTMyIHZhbDsKKwlpbnQgcmVnLCByYzsKKworCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc3RjdGwrKzsKKworCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQorCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9QUklWSUxFR0VEX09QKTsKKworCWdhID0ga3ZtX3MzOTBfZ2V0X2Jhc2VfZGlzcF9ycyh2Y3B1KTsKKworCWlmIChnYSAmIDMpCisJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1NQRUNJRklDQVRJT04pOworCisJVkNQVV9FVkVOVCh2Y3B1LCA1LCAic3RjdGwgcjE6JXgsIHIzOiV4LCBhZGRyOiVsbHgiLCByZWcxLCByZWczLCBnYSk7CisJdHJhY2Vfa3ZtX3MzOTBfaGFuZGxlX3N0Y3RsKHZjcHUsIDAsIHJlZzEsIHJlZzMsIGdhKTsKKworCXJlZyA9IHJlZzE7CisJZG8geworCQl2YWwgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyW3JlZ10gJiAgMHgwMDAwMDAwMGZmZmZmZmZmdWw7CisJCXJjID0gd3JpdGVfZ3Vlc3QodmNwdSwgZ2EsICZ2YWwsIHNpemVvZih2YWwpKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2NvbmQodmNwdSwgcmMpOworCQlnYSArPSA0OwogCQlpZiAocmVnID09IHJlZzMpCiAJCQlicmVhazsKIAkJcmVnID0gKHJlZyArIDEpICUgMTY7CkBAIC03MzEsNyArODQ0LDcgQEAKIHsKIAlpbnQgcmVnMSA9ICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhICYgMHgwMGYwKSA+PiA0OwogCWludCByZWczID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDAwZjsKLQl1NjQgdXNlcmFkZHI7CisJdTY0IGdhLCB2YWw7CiAJaW50IHJlZywgcmM7CiAKIAl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX2xjdGxnKys7CkBAIC03MzksMjMgKzg1Miw1OCBAQAogCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9QUklWSUxFR0VEX09QKTsKIAotCXVzZXJhZGRyID0ga3ZtX3MzOTBfZ2V0X2Jhc2VfZGlzcF9yc3kodmNwdSk7CisJZ2EgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3JzeSh2Y3B1KTsKIAotCWlmICh1c2VyYWRkciAmIDcpCisJaWYgKGdhICYgNykKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7CiAKIAlyZWcgPSByZWcxOwogCi0JVkNQVV9FVkVOVCh2Y3B1LCA1LCAibGN0bGcgcjE6JXgsIHIzOiV4LCBhZGRyOiVsbHgiLCByZWcxLCByZWczLAotCQkgICB1c2VyYWRkcik7Ci0JdHJhY2Vfa3ZtX3MzOTBfaGFuZGxlX2xjdGwodmNwdSwgMSwgcmVnMSwgcmVnMywgdXNlcmFkZHIpOworCVZDUFVfRVZFTlQodmNwdSwgNSwgImxjdGxnIHIxOiV4LCByMzoleCwgYWRkcjolbGx4IiwgcmVnMSwgcmVnMywgZ2EpOworCXRyYWNlX2t2bV9zMzkwX2hhbmRsZV9sY3RsKHZjcHUsIDEsIHJlZzEsIHJlZzMsIGdhKTsKIAogCWRvIHsKLQkJcmMgPSBnZXRfZ3Vlc3QodmNwdSwgdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjcltyZWddLAotCQkJICAgICAgICh1NjQgX191c2VyICopIHVzZXJhZGRyKTsKKwkJcmMgPSByZWFkX2d1ZXN0KHZjcHUsIGdhLCAmdmFsLCBzaXplb2YodmFsKSk7CiAJCWlmIChyYykKLQkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOwotCQl1c2VyYWRkciArPSA4OworCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9nX2NvbmQodmNwdSwgcmMpOworCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2NyW3JlZ10gPSB2YWw7CisJCWdhICs9IDg7CisJCWlmIChyZWcgPT0gcmVnMykKKwkJCWJyZWFrOworCQlyZWcgPSAocmVnICsgMSkgJSAxNjsKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9zdGN0ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IHJlZzEgPSAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDBmMCkgPj4gNDsKKwlpbnQgcmVnMyA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgJiAweDAwMGY7CisJdTY0IGdhLCB2YWw7CisJaW50IHJlZywgcmM7CisKKwl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3N0Y3RnKys7CisKKwlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkKKwkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7CisKKwlnYSA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3BfcnN5KHZjcHUpOworCisJaWYgKGdhICYgNykKKwkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7CisKKwlyZWcgPSByZWcxOworCisJVkNQVV9FVkVOVCh2Y3B1LCA1LCAic3RjdGcgcjE6JXgsIHIzOiV4LCBhZGRyOiVsbHgiLCByZWcxLCByZWczLCBnYSk7CisJdHJhY2Vfa3ZtX3MzOTBfaGFuZGxlX3N0Y3RsKHZjcHUsIDEsIHJlZzEsIHJlZzMsIGdhKTsKKworCWRvIHsKKwkJdmFsID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjcltyZWddOworCQlyYyA9IHdyaXRlX2d1ZXN0KHZjcHUsIGdhLCAmdmFsLCBzaXplb2YodmFsKSk7CisJCWlmIChyYykKKwkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ19jb25kKHZjcHUsIHJjKTsKKwkJZ2EgKz0gODsKIAkJaWYgKHJlZyA9PSByZWczKQogCQkJYnJlYWs7CiAJCXJlZyA9IChyZWcgKyAxKSAlIDE2OwpAQCAtNzY2LDYgKzkxNCw3IEBACiAKIHN0YXRpYyBjb25zdCBpbnRlcmNlcHRfaGFuZGxlcl90IGViX2hhbmRsZXJzWzI1Nl0gPSB7CiAJWzB4MmZdID0gaGFuZGxlX2xjdGxnLAorCVsweDI1XSA9IGhhbmRsZV9zdGN0ZywKIH07CiAKIGludCBrdm1fczM5MF9oYW5kbGVfZWIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNzgxLDggKzkzMCw5IEBACiBzdGF0aWMgaW50IGhhbmRsZV90cHJvdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdTY0IGFkZHJlc3MxLCBhZGRyZXNzMjsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQl1bnNpZ25lZCBsb25nIHVzZXJfYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGh2YSwgZ3BhOworCWludCByZXQgPSAwLCBjYyA9IDA7CisJYm9vbCB3cml0YWJsZTsKIAogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fdHByb3QrKzsKIApAQCAtNzkzLDMyICs5NDMsNDEgQEAKIAogCS8qIHdlIG9ubHkgaGFuZGxlIHRoZSBMaW51eCBtZW1vcnkgZGV0ZWN0aW9uIGNhc2U6CiAJICogYWNjZXNzIGtleSA9PSAwCi0JICogZ3Vlc3QgREFUID09IG9mZgogCSAqIGV2ZXJ5dGhpbmcgZWxzZSBnb2VzIHRvIHVzZXJzcGFjZS4gKi8KIAlpZiAoYWRkcmVzczIgJiAweGYwKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19EQVQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJaXB0ZV9sb2NrKHZjcHUpOworCXJldCA9IGd1ZXN0X3RyYW5zbGF0ZV9hZGRyZXNzKHZjcHUsIGFkZHJlc3MxLCAmZ3BhLCAxKTsKKwlpZiAocmV0ID09IFBHTV9QUk9URUNUSU9OKSB7CisJCS8qIFdyaXRlIHByb3RlY3RlZD8gVHJ5IGFnYWluIHdpdGggcmVhZC1vbmx5Li4uICovCisJCWNjID0gMTsKKwkJcmV0ID0gZ3Vlc3RfdHJhbnNsYXRlX2FkZHJlc3ModmNwdSwgYWRkcmVzczEsICZncGEsIDApOworCX0KKwlpZiAocmV0KSB7CisJCWlmIChyZXQgPT0gUEdNX0FERFJFU1NJTkcgfHwgcmV0ID09IFBHTV9UUkFOU0xBVElPTl9TUEVDKSB7CisJCQlyZXQgPSBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmV0KTsKKwkJfSBlbHNlIGlmIChyZXQgPiAwKSB7CisJCQkvKiBUcmFuc2xhdGlvbiBub3QgYXZhaWxhYmxlICovCisJCQlrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIDMpOworCQkJcmV0ID0gMDsKKwkJfQorCQlnb3RvIG91dF91bmxvY2s7CisJfQogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXVzZXJfYWRkcmVzcyA9IF9fZ21hcF90cmFuc2xhdGUoYWRkcmVzczEsIHZjcHUtPmFyY2guZ21hcCk7Ci0JaWYgKElTX0VSUl9WQUxVRSh1c2VyX2FkZHJlc3MpKQotCQlnb3RvIG91dF9pbmplY3Q7Ci0Jdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIHVzZXJfYWRkcmVzcyk7Ci0JaWYgKCF2bWEpCi0JCWdvdG8gb3V0X2luamVjdDsKLQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICY9IH4oM3VsIDw8IDQ0KTsKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkpCi0JCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgfD0gKDF1bCA8PCA0NCk7Ci0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSkKLQkJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cubWFzayB8PSAoMnVsIDw8IDQ0KTsKLQotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7Ci0KLW91dF9pbmplY3Q6Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKKwlodmEgPSBnZm5fdG9faHZhX3Byb3QodmNwdS0+a3ZtLCBncGFfdG9fZ2ZuKGdwYSksICZ3cml0YWJsZSk7CisJaWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSkgeworCQlyZXQgPSBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOworCX0gZWxzZSB7CisJCWlmICghd3JpdGFibGUpCisJCQljYyA9IDE7CQkvKiBXcml0ZSBub3QgcGVybWl0dGVkID09PiByZWFkLW9ubHkgKi8KKwkJa3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCBjYyk7CisJCS8qIE5vdGU6IENDMiBvbmx5IG9jY3VycyBmb3Igc3RvcmFnZSBrZXlzIChub3Qgc3VwcG9ydGVkIHlldCkgKi8KKwl9CitvdXRfdW5sb2NrOgorCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfREFUKQorCQlpcHRlX3VubG9jayh2Y3B1KTsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQga3ZtX3MzOTBfaGFuZGxlX2U1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2lncC5jIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKaW5kZXggMjZjYWViNS4uNDMwNzlhNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKQEAgLTU0LDMzICs1NCwyMyBAQAogCiBzdGF0aWMgaW50IF9fc2lncF9lbWVyZ2VuY3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY3B1X2FkZHIpCiB7Ci0Jc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGk7Ci0Jc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpOworCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludCA9IHsKKwkJLnR5cGUgPSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZLAorCQkucGFybSA9IHZjcHUtPnZjcHVfaWQsCisJfTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1ID0gTlVMTDsKKwlpbnQgcmMgPSAwOwogCiAJaWYgKGNwdV9hZGRyIDwgS1ZNX01BWF9WQ1BVUykKIAkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUodmNwdS0+a3ZtLCBjcHVfYWRkcik7CiAJaWYgKCFkc3RfdmNwdSkKIAkJcmV0dXJuIFNJR1BfQ0NfTk9UX09QRVJBVElPTkFMOwogCi0JaW50aSA9IGt6YWxsb2Moc2l6ZW9mKCppbnRpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnRpKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IGt2bV9zMzkwX2luamVjdF92Y3B1KGRzdF92Y3B1LCAmczM5MGludCk7CisJaWYgKCFyYykKKwkJVkNQVV9FVkVOVCh2Y3B1LCA0LCAic2VudCBzaWdwIGVtZXJnIHRvIGNwdSAleCIsIGNwdV9hZGRyKTsKIAotCWludGktPnR5cGUgPSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZOwotCWludGktPmVtZXJnLmNvZGUgPSB2Y3B1LT52Y3B1X2lkOwotCi0JbGkgPSAmZHN0X3ZjcHUtPmFyY2gubG9jYWxfaW50OwotCXNwaW5fbG9ja19iaCgmbGktPmxvY2spOwotCWxpc3RfYWRkX3RhaWwoJmludGktPmxpc3QsICZsaS0+bGlzdCk7Ci0JYXRvbWljX3NldCgmbGktPmFjdGl2ZSwgMSk7Ci0JYXRvbWljX3NldF9tYXNrKENQVVNUQVRfRVhUX0lOVCwgbGktPmNwdWZsYWdzKTsKLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZShsaS0+d3EpKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUobGktPndxKTsKLQlzcGluX3VubG9ja19iaCgmbGktPmxvY2spOwotCVZDUFVfRVZFTlQodmNwdSwgNCwgInNlbnQgc2lncCBlbWVyZyB0byBjcHUgJXgiLCBjcHVfYWRkcik7Ci0KLQlyZXR1cm4gU0lHUF9DQ19PUkRFUl9DT0RFX0FDQ0VQVEVEOworCXJldHVybiByYyA/IHJjIDogU0lHUF9DQ19PUkRFUl9DT0RFX0FDQ0VQVEVEOwogfQogCiBzdGF0aWMgaW50IF9fc2lncF9jb25kaXRpb25hbF9lbWVyZ2VuY3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY3B1X2FkZHIsCkBAIC0xMTYsMzMgKzEwNiwyMyBAQAogCiBzdGF0aWMgaW50IF9fc2lncF9leHRlcm5hbF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNwdV9hZGRyKQogewotCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpOwotCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTsKKwlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQgPSB7CisJCS50eXBlID0gS1ZNX1MzOTBfSU5UX0VYVEVSTkFMX0NBTEwsCisJCS5wYXJtID0gdmNwdS0+dmNwdV9pZCwKKwl9OwogCXN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHUgPSBOVUxMOworCWludCByYzsKIAogCWlmIChjcHVfYWRkciA8IEtWTV9NQVhfVkNQVVMpCiAJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KHZjcHUtPmt2bSwgY3B1X2FkZHIpOwogCWlmICghZHN0X3ZjcHUpCiAJCXJldHVybiBTSUdQX0NDX05PVF9PUEVSQVRJT05BTDsKIAotCWludGkgPSBremFsbG9jKHNpemVvZigqaW50aSksIEdGUF9LRVJORUwpOwotCWlmICghaW50aSkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSBrdm1fczM5MF9pbmplY3RfdmNwdShkc3RfdmNwdSwgJnMzOTBpbnQpOworCWlmICghcmMpCisJCVZDUFVfRVZFTlQodmNwdSwgNCwgInNlbnQgc2lncCBleHQgY2FsbCB0byBjcHUgJXgiLCBjcHVfYWRkcik7CiAKLQlpbnRpLT50eXBlID0gS1ZNX1MzOTBfSU5UX0VYVEVSTkFMX0NBTEw7Ci0JaW50aS0+ZXh0Y2FsbC5jb2RlID0gdmNwdS0+dmNwdV9pZDsKLQotCWxpID0gJmRzdF92Y3B1LT5hcmNoLmxvY2FsX2ludDsKLQlzcGluX2xvY2tfYmgoJmxpLT5sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZpbnRpLT5saXN0LCAmbGktPmxpc3QpOwotCWF0b21pY19zZXQoJmxpLT5hY3RpdmUsIDEpOwotCWF0b21pY19zZXRfbWFzayhDUFVTVEFUX0VYVF9JTlQsIGxpLT5jcHVmbGFncyk7Ci0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUobGktPndxKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKGxpLT53cSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxpLT5sb2NrKTsKLQlWQ1BVX0VWRU5UKHZjcHUsIDQsICJzZW50IHNpZ3AgZXh0IGNhbGwgdG8gY3B1ICV4IiwgY3B1X2FkZHIpOwotCi0JcmV0dXJuIFNJR1BfQ0NfT1JERVJfQ09ERV9BQ0NFUFRFRDsKKwlyZXR1cm4gcmMgPyByYyA6IFNJR1BfQ0NfT1JERVJfQ09ERV9BQ0NFUFRFRDsKIH0KIAogc3RhdGljIGludCBfX2luamVjdF9zaWdwX3N0b3Aoc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGksIGludCBhY3Rpb24pCkBAIC0yMzUsNyArMjE1LDYgQEAKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1ID0gTlVMTDsKIAlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7CiAJaW50IHJjOwotCXU4IHRtcDsKIAogCWlmIChjcHVfYWRkciA8IEtWTV9NQVhfVkNQVVMpCiAJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KHZjcHUtPmt2bSwgY3B1X2FkZHIpOwpAQCAtMjQzLDEwICsyMjIsMTMgQEAKIAkJcmV0dXJuIFNJR1BfQ0NfTk9UX09QRVJBVElPTkFMOwogCWxpID0gJmRzdF92Y3B1LT5hcmNoLmxvY2FsX2ludDsKIAotCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgdmFsdWUgaXMgdmFsaWQgbWVtb3J5ICovCi0JYWRkcmVzcyA9IGFkZHJlc3MgJiAweDdmZmZlMDAwdTsKLQlpZiAoY29weV9mcm9tX2d1ZXN0X2Fic29sdXRlKHZjcHUsICZ0bXAsIGFkZHJlc3MsIDEpIHx8Ci0JICAgY29weV9mcm9tX2d1ZXN0X2Fic29sdXRlKHZjcHUsICZ0bXAsIGFkZHJlc3MgKyBQQUdFX1NJWkUsIDEpKSB7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIG5ldyB2YWx1ZSBpcyB2YWxpZCBtZW1vcnkuIFdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUKKwkgKiBmaXJzdCBwYWdlLCBzaW5jZSBhZGRyZXNzIGlzIDhrIGFsaWduZWQgYW5kIG1lbW9yeSBwaWVjZXMgYXJlIGFsd2F5cworCSAqIGF0IGxlYXN0IDFNQiBhbGlnbmVkIGFuZCBoYXZlIGF0IGxlYXN0IGEgc2l6ZSBvZiAxTUIuCisJICovCisJYWRkcmVzcyAmPSAweDdmZmZlMDAwdTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2dwYSh2Y3B1LT5rdm0sIGFkZHJlc3MpKSB7CiAJCSpyZWcgJj0gMHhmZmZmZmZmZjAwMDAwMDAwVUw7CiAJCSpyZWcgfD0gU0lHUF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CiAJCXJldHVybiBTSUdQX0NDX1NUQVRVU19TVE9SRUQ7CkBAIC00NTYsMyArNDM4LDM4IEBACiAJa3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7CiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBIYW5kbGUgU0lHUCBwYXJ0aWFsIGV4ZWN1dGlvbiBpbnRlcmNlcHRpb24uCisgKgorICogVGhpcyBpbnRlcmNlcHRpb24gd2lsbCBvY2N1ciBhdCB0aGUgc291cmNlIGNwdSB3aGVuIGEgc291cmNlIGNwdSBzZW5kcyBhbgorICogZXh0ZXJuYWwgY2FsbCB0byBhIHRhcmdldCBjcHUgYW5kIHRoZSB0YXJnZXQgY3B1IGhhcyB0aGUgV0FJVCBiaXQgc2V0IGluCisgKiBpdHMgY3B1ZmxhZ3MuIEludGVyY2VwdGlvbiB3aWxsIG9jY3VyciBhZnRlciB0aGUgaW50ZXJydXB0IGluZGljYXRvciBiaXRzIGF0CisgKiB0aGUgdGFyZ2V0IGNwdSBoYXZlIGJlZW4gc2V0LiBBbGwgZXJyb3IgY2FzZXMgd2lsbCBsZWFkIHRvIGluc3RydWN0aW9uCisgKiBpbnRlcmNlcHRpb24sIHRoZXJlZm9yZSBub3RoaW5nIGlzIHRvIGJlIGNoZWNrZWQgb3IgcHJlcGFyZWQuCisgKi8KK2ludCBrdm1fczM5MF9oYW5kbGVfc2lncF9wZWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCByMyA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgJiAweDAwMGY7CisJdTE2IGNwdV9hZGRyID0gdmNwdS0+cnVuLT5zLnJlZ3MuZ3Byc1tyM107CisJc3RydWN0IGt2bV92Y3B1ICpkZXN0X3ZjcHU7CisJdTggb3JkZXJfY29kZSA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3BfcnModmNwdSk7CisKKwl0cmFjZV9rdm1fczM5MF9oYW5kbGVfc2lncF9wZWkodmNwdSwgb3JkZXJfY29kZSwgY3B1X2FkZHIpOworCisJaWYgKG9yZGVyX2NvZGUgPT0gU0lHUF9FWFRFUk5BTF9DQUxMKSB7CisJCWRlc3RfdmNwdSA9IGt2bV9nZXRfdmNwdSh2Y3B1LT5rdm0sIGNwdV9hZGRyKTsKKwkJQlVHX09OKGRlc3RfdmNwdSA9PSBOVUxMKTsKKworCQlzcGluX2xvY2tfYmgoJmRlc3RfdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZkZXN0X3ZjcHUtPndxKSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGVzdF92Y3B1LT53cSk7CisJCWRlc3RfdmNwdS0+cHJlZW1wdGVkID0gdHJ1ZTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRlc3RfdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CisKKwkJa3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCBTSUdQX0NDX09SREVSX0NPREVfQUNDRVBURUQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oCmluZGV4IDEzZjMwZjUuLjY0N2U5ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oCisrKyBiL2FyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oCkBAIC02OCw2ICs2OCwyNyBAQAogCSk7CiAKIC8qCisgKiBUcmFjZSBwb2ludCBmb3Igc3RhcnQgYW5kIHN0b3Agb2YgdnBjdXMuCisgKi8KK1RSQUNFX0VWRU5UKGt2bV9zMzkwX3ZjcHVfc3RhcnRfc3RvcCwKKwkgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGlkLCBpbnQgc3RhdGUpLAorCSAgICBUUF9BUkdTKGlkLCBzdGF0ZSksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJICAgIF9fZmllbGQodW5zaWduZWQgaW50LCBpZCkKKwkJICAgIF9fZmllbGQoaW50LCBzdGF0ZSkKKwkJICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCSAgICBfX2VudHJ5LT5pZCA9IGlkOworCQkgICAgX19lbnRyeS0+c3RhdGUgPSBzdGF0ZTsKKwkJICAgICksCisKKwkgICAgVFBfcHJpbnRrKCIlcyBjcHUgJWQiLCBfX2VudHJ5LT5zdGF0ZSA/ICJzdGFydGluZyIgOiAic3RvcHBpbmciLAorCQkgICAgICBfX2VudHJ5LT5pZCkKKwkpOworCisvKgogICogVHJhY2UgcG9pbnRzIGZvciBpbmplY3Rpb24gb2YgaW50ZXJydXB0cywgZWl0aGVyIHBlciBtYWNoaW5lIG9yCiAgKiBwZXIgdmNwdS4KICAqLwpAQCAtMjIzLDYgKzI0NCwyOCBAQAogCQkgICAgICBfX2VudHJ5LT5rdm0pCiAJKTsKIAorLyoKKyAqIFRyYWNlIHBvaW50IGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGludGVybG9ja2luZy1hbmQtYnJvYWRjYXN0aW5nCisgKiBzdXBwcmVzc2lvbi4KKyAqLworVFJBQ0VfRVZFTlQoa3ZtX3MzOTBfZW5hYmxlX2Rpc2FibGVfaWJzLAorCSAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaWQsIGludCBzdGF0ZSksCisJICAgIFRQX0FSR1MoaWQsIHN0YXRlKSwKKworCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsIGlkKQorCQkgICAgX19maWVsZChpbnQsIHN0YXRlKQorCQkgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJICAgIF9fZW50cnktPmlkID0gaWQ7CisJCSAgICBfX2VudHJ5LT5zdGF0ZSA9IHN0YXRlOworCQkgICAgKSwKKworCSAgICBUUF9wcmludGsoIiVzIGlicyBvbiBjcHUgJWQiLAorCQkgICAgICBfX2VudHJ5LT5zdGF0ZSA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIiwgX19lbnRyeS0+aWQpCisJKTsKKwogCiAjZW5kaWYgLyogX1RSQUNFX0tWTVMzOTBfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3RyYWNlLmggYi9hcmNoL3MzOTAva3ZtL3RyYWNlLmgKaW5kZXggZThlNzIxMy4uOTE2ODM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS90cmFjZS5oCisrKyBiL2FyY2gvczM5MC9rdm0vdHJhY2UuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX1RSQUNFX0tWTV9ICiAKICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3NpZ3AuaD4KKyNpbmNsdWRlIDxhc20vc2llLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2Rpcy5oPgogCkBAIC0zMCw2ICszMCwyMCBAQAogCVRQX3ByaW50aygiJTAyZFslMDE2bHgtJTAxNmx4XTogIiBwX3N0ciwgX19lbnRyeS0+aWQsCQlcCiAJCSAgX19lbnRyeS0+cHN3bWFzaywgX19lbnRyeS0+cHN3YWRkciwgcF9hcmdzKQogCitUUkFDRV9FVkVOVChrdm1fczM5MF9za2V5X3JlbGF0ZWRfaW5zdCwKKwkgICAgVFBfUFJPVE8oVkNQVV9QUk9UT19DT01NT04pLAorCSAgICBUUF9BUkdTKFZDUFVfQVJHU19DT01NT04pLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCSAgICBWQ1BVX0ZJRUxEX0NPTU1PTgorCQkgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJICAgIFZDUFVfQVNTSUdOX0NPTU1PTgorCQkgICAgKSwKKwkgICAgVkNQVV9UUF9QUklOVEsoIiVzIiwgImZpcnN0IGluc3RydWN0aW9uIHJlbGF0ZWQgdG8gc2tleXMgb24gdmNwdSIpCisJKTsKKwogVFJBQ0VfRVZFTlQoa3ZtX3MzOTBfbWFqb3JfZ3Vlc3RfcGZhdWx0LAogCSAgICBUUF9QUk9UTyhWQ1BVX1BST1RPX0NPTU1PTiksCiAJICAgIFRQX0FSR1MoVkNQVV9BUkdTX0NPTU1PTiksCkBAIC0xMTEsMTcgKzEyNSw2IEBACiAJICAgIFZDUFVfVFBfUFJJTlRLKCIlcyIsICJmYXVsdCBpbiBzaWUgaW5zdHJ1Y3Rpb24iKQogCSk7CiAKLSNkZWZpbmUgc2llX2ludGVyY2VwdF9jb2RlCQkJCVwKLQl7MHgwNCwgIkluc3RydWN0aW9uIn0sCQkJCVwKLQl7MHgwOCwgIlByb2dyYW0gaW50ZXJydXB0aW9uIn0sCQkJXAotCXsweDBDLCAiSW5zdHJ1Y3Rpb24gYW5kIHByb2dyYW0gaW50ZXJydXB0aW9uIn0sCVwKLQl7MHgxMCwgIkV4dGVybmFsIHJlcXVlc3QifSwJCQlcCi0JezB4MTQsICJFeHRlcm5hbCBpbnRlcnJ1cHRpb24ifSwJCVwKLQl7MHgxOCwgIkkvTyByZXF1ZXN0In0sCQkJCVwKLQl7MHgxQywgIldhaXQgc3RhdGUifSwJCQkJXAotCXsweDIwLCAiVmFsaWRpdHkifSwJCQkJXAotCXsweDI4LCAiU3RvcCByZXF1ZXN0In0KLQogVFJBQ0VfRVZFTlQoa3ZtX3MzOTBfc2llX2V4aXQsCiAJICAgIFRQX1BST1RPKFZDUFVfUFJPVE9fQ09NTU9OLCB1OCBpY3B0Y29kZSksCiAJICAgIFRQX0FSR1MoVkNQVV9BUkdTX0NPTU1PTiwgaWNwdGNvZGUpLApAQCAtMTUxLDcgKzE1NCw2IEBACiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCiAJCSAgICBWQ1BVX0ZJRUxEX0NPTU1PTgogCQkgICAgX19maWVsZChfX3U2NCwgaW5zdHJ1Y3Rpb24pCi0JCSAgICBfX2ZpZWxkKGNoYXIsIGluc25bOF0pCiAJCSAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKApAQCAtMTYyLDEwICsxNjQsOCBAQAogCiAJICAgIFZDUFVfVFBfUFJJTlRLKCJpbnRlcmNlcHRlZCBpbnN0cnVjdGlvbiAlMDE2bGx4ICglcykiLAogCQkJICAgX19lbnRyeS0+aW5zdHJ1Y3Rpb24sCi0JCQkgICBpbnNuX3RvX21uZW1vbmljKCh1bnNpZ25lZCBjaGFyICopCi0JCQkJCSAgICAmX19lbnRyeS0+aW5zdHJ1Y3Rpb24sCi0JCQkJCSBfX2VudHJ5LT5pbnNuLCBzaXplb2YoX19lbnRyeS0+aW5zbikpID8KLQkJCSAgICJ1bmtub3duIiA6IF9fZW50cnktPmluc24pCisJCQkgICBfX3ByaW50X3N5bWJvbGljKGljcHRfaW5zbl9kZWNvZGVyKF9fZW50cnktPmluc3RydWN0aW9uKSwKKwkJCQkJICAgIGljcHRfaW5zbl9jb2RlcykpCiAJKTsKIAogLyoKQEAgLTIxMywxOCArMjEzLDYgQEAKICAqIFRyYWNlIHBvaW50cyBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIG9mIHNwZWNpYWwgaW50ZXJlc3QuCiAgKi8KIAotI2RlZmluZSBzaWdwX29yZGVyX2NvZGVzCQkJCQlcCi0Je1NJR1BfU0VOU0UsICJzZW5zZSJ9LAkJCQkJXAotCXtTSUdQX0VYVEVSTkFMX0NBTEwsICJleHRlcm5hbCBjYWxsIn0sCQkJXAotCXtTSUdQX0VNRVJHRU5DWV9TSUdOQUwsICJlbWVyZ2VuY3kgc2lnbmFsIn0sCQlcCi0Je1NJR1BfU1RPUCwgInN0b3AifSwJCQkJCVwKLQl7U0lHUF9TVE9QX0FORF9TVE9SRV9TVEFUVVMsICJzdG9wIGFuZCBzdG9yZSBzdGF0dXMifSwJXAotCXtTSUdQX1NFVF9BUkNISVRFQ1RVUkUsICJzZXQgYXJjaGl0ZWN0dXJlIn0sCQlcCi0Je1NJR1BfU0VUX1BSRUZJWCwgInNldCBwcmVmaXgifSwJCQlcCi0Je1NJR1BfU1RPUkVfU1RBVFVTX0FUX0FERFJFU1MsICJzdG9yZSBzdGF0dXMgYXQgYWRkciJ9LAlcCi0Je1NJR1BfU0VOU0VfUlVOTklORywgInNlbnNlIHJ1bm5pbmcifSwJCQlcCi0Je1NJR1BfUkVTVEFSVCwgInJlc3RhcnQifQotCiBUUkFDRV9FVkVOVChrdm1fczM5MF9oYW5kbGVfc2lncCwKIAkgICAgVFBfUFJPVE8oVkNQVV9QUk9UT19DT01NT04sIF9fdTggb3JkZXJfY29kZSwgX191MTYgY3B1X2FkZHIsIFwKIAkJICAgICBfX3UzMiBwYXJhbWV0ZXIpLApAQCAtMjUxLDEyICsyMzksMjggQEAKIAkJCSAgIF9fZW50cnktPmNwdV9hZGRyLCBfX2VudHJ5LT5wYXJhbWV0ZXIpCiAJKTsKIAotI2RlZmluZSBkaWFnbm9zZV9jb2RlcwkJCQlcCi0JezB4MTAsICJyZWxlYXNlIHBhZ2VzIn0sCQlcCi0JezB4NDQsICJ0aW1lIHNsaWNlIGVuZCJ9LAkJXAotCXsweDMwOCwgImlwbCBmdW5jdGlvbnMifSwJCVwKLQl7MHg1MDAsICJrdm0gaHlwZXJjYWxsIn0sCQlcCi0JezB4NTAxLCAia3ZtIGJyZWFrcG9pbnQifQorVFJBQ0VfRVZFTlQoa3ZtX3MzOTBfaGFuZGxlX3NpZ3BfcGVpLAorCSAgICBUUF9QUk9UTyhWQ1BVX1BST1RPX0NPTU1PTiwgX191OCBvcmRlcl9jb2RlLCBfX3UxNiBjcHVfYWRkciksCisJICAgIFRQX0FSR1MoVkNQVV9BUkdTX0NPTU1PTiwgb3JkZXJfY29kZSwgY3B1X2FkZHIpLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCSAgICBWQ1BVX0ZJRUxEX0NPTU1PTgorCQkgICAgX19maWVsZChfX3U4LCBvcmRlcl9jb2RlKQorCQkgICAgX19maWVsZChfX3UxNiwgY3B1X2FkZHIpCisJCSAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgVkNQVV9BU1NJR05fQ09NTU9OCisJCSAgICBfX2VudHJ5LT5vcmRlcl9jb2RlID0gb3JkZXJfY29kZTsKKwkJICAgIF9fZW50cnktPmNwdV9hZGRyID0gY3B1X2FkZHI7CisJCSAgICApLAorCisJICAgIFZDUFVfVFBfUFJJTlRLKCJoYW5kbGUgc2lncCBwZWkgb3JkZXIgJTAyeCAoJXMpLCBjcHUgYWRkcmVzcyAlMDR4IiwKKwkJCSAgIF9fZW50cnktPm9yZGVyX2NvZGUsCisJCQkgICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPm9yZGVyX2NvZGUsCisJCQkJCSAgICBzaWdwX29yZGVyX2NvZGVzKSwKKwkJCSAgIF9fZW50cnktPmNwdV9hZGRyKQorCSk7CiAKIFRSQUNFX0VWRU5UKGt2bV9zMzkwX2hhbmRsZV9kaWFnLAogCSAgICBUUF9QUk9UTyhWQ1BVX1BST1RPX0NPTU1PTiwgX191MTYgY29kZSksCkBAIC0zMDEsNiArMzA1LDMxIEBACiAJCQkgICBfX2VudHJ5LT5yZWcxLCBfX2VudHJ5LT5yZWczLCBfX2VudHJ5LT5hZGRyKQogCSk7CiAKK1RSQUNFX0VWRU5UKGt2bV9zMzkwX2hhbmRsZV9zdGN0bCwKKwkgICAgVFBfUFJPVE8oVkNQVV9QUk9UT19DT01NT04sIGludCBnLCBpbnQgcmVnMSwgaW50IHJlZzMsIHU2NCBhZGRyKSwKKwkgICAgVFBfQVJHUyhWQ1BVX0FSR1NfQ09NTU9OLCBnLCByZWcxLCByZWczLCBhZGRyKSwKKworCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkgICAgVkNQVV9GSUVMRF9DT01NT04KKwkJICAgIF9fZmllbGQoaW50LCBnKQorCQkgICAgX19maWVsZChpbnQsIHJlZzEpCisJCSAgICBfX2ZpZWxkKGludCwgcmVnMykKKwkJICAgIF9fZmllbGQodTY0LCBhZGRyKQorCQkgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJICAgIFZDUFVfQVNTSUdOX0NPTU1PTgorCQkgICAgX19lbnRyeS0+ZyA9IGc7CisJCSAgICBfX2VudHJ5LT5yZWcxID0gcmVnMTsKKwkJICAgIF9fZW50cnktPnJlZzMgPSByZWczOworCQkgICAgX19lbnRyeS0+YWRkciA9IGFkZHI7CisJCSAgICApLAorCisJICAgIFZDUFVfVFBfUFJJTlRLKCIlczogc3RvcmluZyBjciAleC0leCB0byAlMDE2bGx4IiwKKwkJCSAgIF9fZW50cnktPmcgPyAic3RjdGciIDogInN0Y3RsIiwKKwkJCSAgIF9fZW50cnktPnJlZzEsIF9fZW50cnktPnJlZzMsIF9fZW50cnktPmFkZHIpCisJKTsKKwogVFJBQ0VfRVZFTlQoa3ZtX3MzOTBfaGFuZGxlX3ByZWZpeCwKIAkgICAgVFBfUFJPVE8oVkNQVV9QUk9UT19DT01NT04sIGludCBzZXQsIHUzMiBhZGRyZXNzKSwKIAkgICAgVFBfQVJHUyhWQ1BVX0FSR1NfQ09NTU9OLCBzZXQsIGFkZHJlc3MpLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCmluZGV4IGY3MDk5ODMuLjViMGU0NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYworKysgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKQEAgLTI2LDgzICsyNiw4MSBAQAogCiB2b2lkIGFyY2hfc3Bpbl9sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpscCkKIHsKLQlpbnQgY291bnQgPSBzcGluX3JldHJ5OwotCXVuc2lnbmVkIGludCBjcHUgPSB+c21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHUgPSBTUElOTE9DS19MT0NLVkFMOwogCXVuc2lnbmVkIGludCBvd25lcjsKKwlpbnQgY291bnQ7CiAKIAl3aGlsZSAoMSkgewotCQlvd25lciA9IGxwLT5vd25lcl9jcHU7Ci0JCWlmICghb3duZXIgfHwgc21wX3ZjcHVfc2NoZWR1bGVkKH5vd25lcikpIHsKLQkJCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLQkJCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsCi0JCQkJCQkJICBjcHUpID09IDApCi0JCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChNQUNISU5FX0lTX0xQQVIpCi0JCQkJY29udGludWU7CisJCW93bmVyID0gQUNDRVNTX09OQ0UobHAtPmxvY2spOworCQkvKiBUcnkgdG8gZ2V0IHRoZSBsb2NrIGlmIGl0IGlzIGZyZWUuICovCisJCWlmICghb3duZXIpIHsKKwkJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5sb2NrLCAwLCBjcHUpKQorCQkJCXJldHVybjsKKwkJCWNvbnRpbnVlOwogCQl9Ci0JCW93bmVyID0gbHAtPm93bmVyX2NwdTsKLQkJaWYgKG93bmVyKQorCQkvKiBDaGVjayBpZiB0aGUgbG9jayBvd25lciBpcyBydW5uaW5nLiAqLworCQlpZiAoIXNtcF92Y3B1X3NjaGVkdWxlZCh+b3duZXIpKSB7CiAJCQlzbXBfeWllbGRfY3B1KH5vd25lcik7Ci0JCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsIGNwdSkgPT0gMCkKLQkJCXJldHVybjsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIExvb3AgZm9yIGEgd2hpbGUgb24gdGhlIGxvY2sgdmFsdWUuICovCisJCWNvdW50ID0gc3Bpbl9yZXRyeTsKKwkJZG8geworCQkJb3duZXIgPSBBQ0NFU1NfT05DRShscC0+bG9jayk7CisJCX0gd2hpbGUgKG93bmVyICYmIGNvdW50LS0gPiAwKTsKKwkJaWYgKCFvd25lcikKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBGb3IgbXVsdGlwbGUgbGF5ZXJzIG9mIGh5cGVydmlzb3JzLCBlLmcuIHovVk0gKyBMUEFSCisJCSAqIHlpZWxkIHRoZSBDUFUgaWYgdGhlIGxvY2sgaXMgc3RpbGwgdW5hdmFpbGFibGUuCisJCSAqLworCQlpZiAoIU1BQ0hJTkVfSVNfTFBBUikKKwkJCXNtcF95aWVsZF9jcHUofm93bmVyKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl9sb2NrX3dhaXQpOwogCiB2b2lkIGFyY2hfc3Bpbl9sb2NrX3dhaXRfZmxhZ3MoYXJjaF9zcGlubG9ja190ICpscCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlpbnQgY291bnQgPSBzcGluX3JldHJ5OwotCXVuc2lnbmVkIGludCBjcHUgPSB+c21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHUgPSBTUElOTE9DS19MT0NLVkFMOwogCXVuc2lnbmVkIGludCBvd25lcjsKKwlpbnQgY291bnQ7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJd2hpbGUgKDEpIHsKLQkJb3duZXIgPSBscC0+b3duZXJfY3B1OwotCQlpZiAoIW93bmVyIHx8IHNtcF92Y3B1X3NjaGVkdWxlZCh+b3duZXIpKSB7Ci0JCQlmb3IgKGNvdW50ID0gc3Bpbl9yZXRyeTsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0JCQkJaWYgKGFyY2hfc3Bpbl9pc19sb2NrZWQobHApKQotCQkJCQljb250aW51ZTsKLQkJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsCi0JCQkJCQkJICBjcHUpID09IDApCi0JCQkJCXJldHVybjsKLQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQl9Ci0JCQlpZiAoTUFDSElORV9JU19MUEFSKQotCQkJCWNvbnRpbnVlOworCQlvd25lciA9IEFDQ0VTU19PTkNFKGxwLT5sb2NrKTsKKwkJLyogVHJ5IHRvIGdldCB0aGUgbG9jayBpZiBpdCBpcyBmcmVlLiAqLworCQlpZiAoIW93bmVyKSB7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPmxvY2ssIDAsIGNwdSkpCisJCQkJcmV0dXJuOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl9Ci0JCW93bmVyID0gbHAtPm93bmVyX2NwdTsKLQkJaWYgKG93bmVyKQorCQkvKiBDaGVjayBpZiB0aGUgbG9jayBvd25lciBpcyBydW5uaW5nLiAqLworCQlpZiAoIXNtcF92Y3B1X3NjaGVkdWxlZCh+b3duZXIpKSB7CiAJCQlzbXBfeWllbGRfY3B1KH5vd25lcik7Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsIGNwdSkgPT0gMCkKLQkJCXJldHVybjsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKwkJLyogTG9vcCBmb3IgYSB3aGlsZSBvbiB0aGUgbG9jayB2YWx1ZS4gKi8KKwkJY291bnQgPSBzcGluX3JldHJ5OworCQlkbyB7CisJCQlvd25lciA9IEFDQ0VTU19PTkNFKGxwLT5sb2NrKTsKKwkJfSB3aGlsZSAob3duZXIgJiYgY291bnQtLSA+IDApOworCQlpZiAoIW93bmVyKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIEZvciBtdWx0aXBsZSBsYXllcnMgb2YgaHlwZXJ2aXNvcnMsIGUuZy4gei9WTSArIExQQVIKKwkJICogeWllbGQgdGhlIENQVSBpZiB0aGUgbG9jayBpcyBzdGlsbCB1bmF2YWlsYWJsZS4KKwkJICovCisJCWlmICghTUFDSElORV9JU19MUEFSKQorCQkJc21wX3lpZWxkX2NwdSh+b3duZXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woYXJjaF9zcGluX2xvY2tfd2FpdF9mbGFncyk7CiAKLWludCBhcmNoX3NwaW5fdHJ5bG9ja19yZXRyeShhcmNoX3NwaW5sb2NrX3QgKmxwKQordm9pZCBhcmNoX3NwaW5fcmVsYXgoYXJjaF9zcGlubG9ja190ICpscCkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gfnNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgY291bnQ7Ci0KLQlmb3IgKGNvdW50ID0gc3Bpbl9yZXRyeTsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0JCWlmIChhcmNoX3NwaW5faXNfbG9ja2VkKGxwKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KTsKLQotdm9pZCBhcmNoX3NwaW5fcmVsYXgoYXJjaF9zcGlubG9ja190ICpsb2NrKQotewotCXVuc2lnbmVkIGludCBjcHUgPSBsb2NrLT5vd25lcl9jcHU7CisJdW5zaWduZWQgaW50IGNwdSA9IGxwLT5sb2NrOwogCWlmIChjcHUgIT0gMCkgewogCQlpZiAoTUFDSElORV9JU19WTSB8fCBNQUNISU5FX0lTX0tWTSB8fAogCQkgICAgIXNtcF92Y3B1X3NjaGVkdWxlZCh+Y3B1KSkKQEAgLTExMSw2ICsxMDksMTcgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXJjaF9zcGluX3JlbGF4KTsKIAoraW50IGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KGFyY2hfc3BpbmxvY2tfdCAqbHApCit7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IHNwaW5fcmV0cnk7IGNvdW50ID4gMDsgY291bnQtLSkKKwkJaWYgKGFyY2hfc3Bpbl90cnlsb2NrX29uY2UobHApKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KTsKKwogdm9pZCBfcmF3X3JlYWRfbG9ja193YWl0KGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGludCBvbGQ7CkBAIC0xMjEsMTAgKzEzMCwxMCBAQAogCQkJc21wX3lpZWxkKCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KLQkJaWYgKCFhcmNoX3JlYWRfY2FuX2xvY2socncpKQorCQlvbGQgPSBBQ0NFU1NfT05DRShydy0+bG9jayk7CisJCWlmICgoaW50KSBvbGQgPCAwKQogCQkJY29udGludWU7Ci0JCW9sZCA9IHJ3LT5sb2NrICYgMHg3ZmZmZmZmZlU7Ci0JCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCBvbGQsIG9sZCArIDEpID09IG9sZCkKKwkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkpCiAJCQlyZXR1cm47CiAJfQogfQpAQCAtMTQxLDEyICsxNTAsMTMgQEAKIAkJCXNtcF95aWVsZCgpOwogCQkJY291bnQgPSBzcGluX3JldHJ5OwogCQl9Ci0JCWlmICghYXJjaF9yZWFkX2Nhbl9sb2NrKHJ3KSkKKwkJb2xkID0gQUNDRVNTX09OQ0UocnctPmxvY2spOworCQlpZiAoKGludCkgb2xkIDwgMCkKIAkJCWNvbnRpbnVlOwotCQlvbGQgPSBydy0+bG9jayAmIDB4N2ZmZmZmZmZVOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgb2xkLCBvbGQgKyAxKSA9PSBvbGQpCisJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCBvbGQsIG9sZCArIDEpKQogCQkJcmV0dXJuOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChfcmF3X3JlYWRfbG9ja193YWl0X2ZsYWdzKTsKQEAgLTE1NywxMCArMTY3LDEwIEBACiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAogCXdoaWxlIChjb3VudC0tID4gMCkgewotCQlpZiAoIWFyY2hfcmVhZF9jYW5fbG9jayhydykpCisJCW9sZCA9IEFDQ0VTU19PTkNFKHJ3LT5sb2NrKTsKKwkJaWYgKChpbnQpIG9sZCA8IDApCiAJCQljb250aW51ZTsKLQkJb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKLQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkgPT0gb2xkKQorCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgb2xkLCBvbGQgKyAxKSkKIAkJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE2OSw2ICsxNzksNyBAQAogCiB2b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0KGFyY2hfcndsb2NrX3QgKnJ3KQogeworCXVuc2lnbmVkIGludCBvbGQ7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAogCXdoaWxlICgxKSB7CkBAIC0xNzYsOSArMTg3LDEwIEBACiAJCQlzbXBfeWllbGQoKTsKIAkJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJfQotCQlpZiAoIWFyY2hfd3JpdGVfY2FuX2xvY2socncpKQorCQlvbGQgPSBBQ0NFU1NfT05DRShydy0+bG9jayk7CisJCWlmIChvbGQpCiAJCQljb250aW51ZTsKLQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIDAsIDB4ODAwMDAwMDApID09IDApCisJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCAwLCAweDgwMDAwMDAwKSkKIAkJCXJldHVybjsKIAl9CiB9CkBAIC0xODYsNiArMTk4LDcgQEAKIAogdm9pZCBfcmF3X3dyaXRlX2xvY2tfd2FpdF9mbGFncyhhcmNoX3J3bG9ja190ICpydywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xOTQsMjMgKzIwNywyNyBAQAogCQkJc21wX3lpZWxkKCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KLQkJaWYgKCFhcmNoX3dyaXRlX2Nhbl9sb2NrKHJ3KSkKKwkJb2xkID0gQUNDRVNTX09OQ0UocnctPmxvY2spOworCQlpZiAob2xkKQogCQkJY29udGludWU7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCAwLCAweDgwMDAwMDAwKSA9PSAwKQorCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkpCiAJCQlyZXR1cm47CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfbG9ja193YWl0X2ZsYWdzKTsKIAogaW50IF9yYXdfd3JpdGVfdHJ5bG9ja19yZXRyeShhcmNoX3J3bG9ja190ICpydykKIHsKKwl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKLQkJaWYgKCFhcmNoX3dyaXRlX2Nhbl9sb2NrKHJ3KSkKKwkJb2xkID0gQUNDRVNTX09OQ0UocnctPmxvY2spOworCQlpZiAob2xkKQogCQkJY29udGludWU7Ci0JCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCAwLCAweDgwMDAwMDAwKSA9PSAwKQorCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkpCiAJCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3MuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5jCmluZGV4IDc0MTZlZmUuLjUzZGQ1ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5jCkBAIC03Niw3ICs3Niw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCi0JdXBkYXRlX3ByaW1hcnlfYXNjZShjdXJyZW50KTsKKwlsb2FkX2tlcm5lbF9hc2NlKCk7CiAJdG1wMSA9IC0yNTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIgICBzYWNmICAwXG4iCkBAIC0xNTksNyArMTU5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CiAKLQl1cGRhdGVfcHJpbWFyeV9hc2NlKGN1cnJlbnQpOworCWxvYWRfa2VybmVsX2FzY2UoKTsKIAl0bXAxID0gLTI1NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIiAgIHNhY2YgIDBcbiIKQEAgLTIyNSw3ICsyMjUsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdG1wMTsKIAotCXVwZGF0ZV9wcmltYXJ5X2FzY2UoY3VycmVudCk7CisJbG9hZF9rZXJuZWxfYXNjZSgpOwogCWFzbSB2b2xhdGlsZSgKIAkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKQEAgLTI5Miw3ICsyOTIsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIAotCXVwZGF0ZV9wcmltYXJ5X2FzY2UoY3VycmVudCk7CisJbG9hZF9rZXJuZWxfYXNjZSgpOwogCWFzbSB2b2xhdGlsZSgKIAkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKQEAgLTM1OCw3ICszNTgsNyBAQAogewogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiAwOwotCXVwZGF0ZV9wcmltYXJ5X2FzY2UoY3VycmVudCk7CisJbG9hZF9rZXJuZWxfYXNjZSgpOwogCXJldHVybiBzdHJubGVuX3VzZXJfc3JzdChzcmMsIHNpemUpOwogfQogRVhQT1JUX1NZTUJPTChfX3N0cm5sZW5fdXNlcik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDJmNTFhOTkuLjNmM2IzNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAkgKiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIHByb2dyYW0gY2hlY2sgaGFzCiAJICogYmVlbiBudWxsaWZpZWQuIERvbid0IHNpZ25hbCBzaW5nbGUgc3RlcCB2aWEgU0lHVFJBUC4KIAkgKi8KLQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfUEVSX1RSQVApOworCWNsZWFyX3B0X3JlZ3NfZmxhZyhyZWdzLCBQSUZfUEVSX1RSQVApOwogCiAJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9tZW1fZGV0ZWN0LmMgYi9hcmNoL3MzOTAvbW0vbWVtX2RldGVjdC5jCmluZGV4IGNjYTM4ODIuLjU1MzVjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9tZW1fZGV0ZWN0LmMKKysrIGIvYXJjaC9zMzkwL21tL21lbV9kZXRlY3QuYwpAQCAtNiwxMzAgKzYsNjAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiAjZGVmaW5lIEFERFIyRyAoMVVMTCA8PCAzMSkKIAotc3RhdGljIHZvaWQgZmluZF9tZW1vcnlfY2h1bmtzKHN0cnVjdCBtZW1fY2h1bmsgY2h1bmtbXSwgdW5zaWduZWQgbG9uZyBtYXhzaXplKQorI2RlZmluZSBDSFVOS19SRUFEX1dSSVRFIDAKKyNkZWZpbmUgQ0hVTktfUkVBRF9PTkxZICAxCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19waHlzbWVtX2FkZChwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3Qgc2l6ZSkKK3sKKwltZW1ibG9ja19hZGRfcmFuZ2UoJm1lbWJsb2NrLm1lbW9yeSwgc3RhcnQsIHNpemUsIDAsIDApOworCW1lbWJsb2NrX2FkZF9yYW5nZSgmbWVtYmxvY2sucGh5c21lbSwgc3RhcnQsIHNpemUsIDAsIDApOworfQorCit2b2lkIF9faW5pdCBkZXRlY3RfbWVtb3J5X21lbWJsb2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG1lbXNpemUsIHJubWF4LCByem07Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMCwgc2l6ZTsKLQlpbnQgaSA9IDAsIHR5cGU7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplOworCWludCB0eXBlOwogCiAJcnptID0gc2NscF9nZXRfcnptKCk7CiAJcm5tYXggPSBzY2xwX2dldF9ybm1heCgpOwogCW1lbXNpemUgPSByem0gKiBybm1heDsKIAlpZiAoIXJ6bSkKIAkJcnptID0gMVVMTCA8PCAxNzsKLQlpZiAoc2l6ZW9mKGxvbmcpID09IDQpIHsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfMzJCSVQpKSB7CiAJCXJ6bSA9IG1pbihBRERSMkcsIHJ6bSk7Ci0JCW1lbXNpemUgPSBtZW1zaXplID8gbWluKEFERFIyRywgbWVtc2l6ZSkgOiBBRERSMkc7CisJCW1lbXNpemUgPSBtaW4oQUREUjJHLCBtZW1zaXplKTsKIAl9Ci0JaWYgKG1heHNpemUpCi0JCW1lbXNpemUgPSBtZW1zaXplID8gbWluKCh1bnNpZ25lZCBsb25nKW1lbXNpemUsIG1heHNpemUpIDogbWF4c2l6ZTsKKwltYXhfcGh5c21lbV9lbmQgPSBtZW1zaXplOworCWFkZHIgPSAwOworCS8qIGtlZXAgbWVtYmxvY2sgbGlzdHMgY2xvc2UgdG8gdGhlIGtlcm5lbCAqLworCW1lbWJsb2NrX3NldF9ib3R0b21fdXAodHJ1ZSk7CiAJZG8gewogCQlzaXplID0gMDsKIAkJdHlwZSA9IHRwcm90KGFkZHIpOwogCQlkbyB7CiAJCQlzaXplICs9IHJ6bTsKLQkJCWlmIChtZW1zaXplICYmIGFkZHIgKyBzaXplID49IG1lbXNpemUpCisJCQlpZiAobWF4X3BoeXNtZW1fZW5kICYmIGFkZHIgKyBzaXplID49IG1heF9waHlzbWVtX2VuZCkKIAkJCQlicmVhazsKIAkJfSB3aGlsZSAodHlwZSA9PSB0cHJvdChhZGRyICsgc2l6ZSkpOwogCQlpZiAodHlwZSA9PSBDSFVOS19SRUFEX1dSSVRFIHx8IHR5cGUgPT0gQ0hVTktfUkVBRF9PTkxZKSB7Ci0JCQlpZiAobWVtc2l6ZSAmJiAoYWRkciArIHNpemUgPiBtZW1zaXplKSkKLQkJCQlzaXplID0gbWVtc2l6ZSAtIGFkZHI7Ci0JCQljaHVua1tpXS5hZGRyID0gYWRkcjsKLQkJCWNodW5rW2ldLnNpemUgPSBzaXplOwotCQkJY2h1bmtbaV0udHlwZSA9IHR5cGU7Ci0JCQlpKys7CisJCQlpZiAobWF4X3BoeXNtZW1fZW5kICYmIChhZGRyICsgc2l6ZSA+IG1heF9waHlzbWVtX2VuZCkpCisJCQkJc2l6ZSA9IG1heF9waHlzbWVtX2VuZCAtIGFkZHI7CisJCQltZW1ibG9ja19waHlzbWVtX2FkZChhZGRyLCBzaXplKTsKIAkJfQogCQlhZGRyICs9IHNpemU7Ci0JfSB3aGlsZSAoYWRkciA8IG1lbXNpemUgJiYgaSA8IE1FTU9SWV9DSFVOS1MpOwotfQotCi0vKioKLSAqIGRldGVjdF9tZW1vcnlfbGF5b3V0IC0gZmlsbCBtZW1fY2h1bmsgYXJyYXkgd2l0aCBtZW1vcnkgbGF5b3V0IGRhdGEKLSAqIEBjaHVuazogbWVtX2NodW5rIGFycmF5IHRvIGJlIGZpbGxlZAotICogQG1heHNpemU6IG1heGltdW0gYWRkcmVzcyB3aGVyZSBtZW1vcnkgZGV0ZWN0aW9uIHNob3VsZCBzdG9wCi0gKgotICogRmlsbHMgdGhlIHBhc3NlZCBpbiBtZW1vcnkgY2h1bmsgYXJyYXkgd2l0aCB0aGUgbWVtb3J5IGxheW91dCBvZiB0aGUKLSAqIG1hY2hpbmUuIFRoZSBhcnJheSBtdXN0IGhhdmUgYSBzaXplIG9mIGF0IGxlYXN0IE1FTU9SWV9DSFVOS1MgYW5kIHdpbGwKLSAqIGJlIGZ1bGx5IGluaXRpYWxpemVkIGFmdGVyd2FyZHMuCi0gKiBJZiB0aGUgbWF4c2l6ZSBwYXJhbWF0ZXIgaGFzIGEgdmFsdWUgPiAwIG1lbW9yeSBkZXRlY3Rpb24gd2lsbCBzdG9wIGF0Ci0gKiB0aGF0IGFkZHJlc3MuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhbGwgY2h1bmtzIGhhdmUgYW4gZW5kaW5nIGFkZHJlc3MKLSAqIHRoYXQgaXMgc21hbGxlciB0aGFuIG1heHNpemUuCi0gKiBJZiBtYXhzaXplIGlzIDAgYWxsIG1lbW9yeSB3aWxsIGJlIGRldGVjdGVkLgotICovCi12b2lkIGRldGVjdF9tZW1vcnlfbGF5b3V0KHN0cnVjdCBtZW1fY2h1bmsgY2h1bmtbXSwgdW5zaWduZWQgbG9uZyBtYXhzaXplKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZsYWdzX2RhdCwgY3IwOwotCi0JbWVtc2V0KGNodW5rLCAwLCBNRU1PUllfQ0hVTktTICogc2l6ZW9mKHN0cnVjdCBtZW1fY2h1bmspKTsKLQkvKgotCSAqIERpc2FibGUgSVJRcywgREFUIGFuZCBsb3cgYWRkcmVzcyBwcm90ZWN0aW9uIHNvIHRwcm90IGRvZXMgdGhlCi0JICogcmlnaHQgdGhpbmcgYW5kIHdlIGRvbid0IGdldCBzY2hlZHVsZWQgYXdheSB3aXRoIGxvdyBhZGRyZXNzCi0JICogcHJvdGVjdGlvbiBkaXNhYmxlZC4KLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZmxhZ3NfZGF0ID0gX19hcmNoX2xvY2FsX2lycV9zdG5zbSgweGZiKTsKLQkvKgotCSAqIEluIGNhc2UgREFUIHdhcyBlbmFibGVkLCBtYWtlIHN1cmUgY2h1bmsgZG9lc24ndCByZXNpZGUgaW4gdm1hbGxvYwotCSAqIHNwYWNlLiBXZSBoYXZlIGRpc2FibGVkIERBVCBhbmQgYW55IGFjY2VzcyB0byB2bWFsbG9jIGFyZWEgd2lsbAotCSAqIGNhdXNlIGFuIGV4Y2VwdGlvbi4KLQkgKiBJZiBEQVQgd2FzIGRpc2FibGVkIHdlIGFyZSBjYWxsZWQgZnJvbSBlYXJseSBpcGwgY29kZS4KLQkgKi8KLQlpZiAodGVzdF9iaXQoNSwgJmZsYWdzX2RhdCkpIHsKLQkJaWYgKFdBUk5fT05fT05DRShpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNodW5rKSkpCi0JCQlnb3RvIG91dDsKLQl9Ci0JX19jdGxfc3RvcmUoY3IwLCAwLCAwKTsKLQlfX2N0bF9jbGVhcl9iaXQoMCwgMjgpOwotCWZpbmRfbWVtb3J5X2NodW5rcyhjaHVuaywgbWF4c2l6ZSk7Ci0JX19jdGxfbG9hZChjcjAsIDAsIDApOwotb3V0OgotCV9fYXJjaF9sb2NhbF9pcnFfc3NtKGZsYWdzX2RhdCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChkZXRlY3RfbWVtb3J5X2xheW91dCk7Ci0KLS8qCi0gKiBDcmVhdGUgbWVtb3J5IGhvbGUgd2l0aCBnaXZlbiBhZGRyZXNzIGFuZCBzaXplLgotICovCi12b2lkIGNyZWF0ZV9tZW1faG9sZShzdHJ1Y3QgbWVtX2NodW5rIG1lbV9jaHVua1tdLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQlzdHJ1Y3QgbWVtX2NodW5rICpjaHVuayA9ICZtZW1fY2h1bmtbaV07Ci0KLQkJaWYgKGNodW5rLT5zaXplID09IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGFkZHIgPiBjaHVuay0+YWRkciArIGNodW5rLT5zaXplKQotCQkJY29udGludWU7Ci0JCWlmIChhZGRyICsgc2l6ZSA8PSBjaHVuay0+YWRkcikKLQkJCWNvbnRpbnVlOwotCQkvKiBTcGxpdCAqLwotCQlpZiAoKGFkZHIgPiBjaHVuay0+YWRkcikgJiYKLQkJICAgIChhZGRyICsgc2l6ZSA8IGNodW5rLT5hZGRyICsgY2h1bmstPnNpemUpKSB7Ci0JCQlzdHJ1Y3QgbWVtX2NodW5rICpuZXcgPSBjaHVuayArIDE7Ci0KLQkJCW1lbW1vdmUobmV3LCBjaHVuaywgKE1FTU9SWV9DSFVOS1MtaS0xKSAqIHNpemVvZigqbmV3KSk7Ci0JCQluZXctPmFkZHIgPSBhZGRyICsgc2l6ZTsKLQkJCW5ldy0+c2l6ZSA9IGNodW5rLT5hZGRyICsgY2h1bmstPnNpemUgLSBuZXctPmFkZHI7Ci0JCQljaHVuay0+c2l6ZSA9IGFkZHIgLSBjaHVuay0+YWRkcjsKLQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKChhZGRyIDw9IGNodW5rLT5hZGRyKSAmJgotCQkJICAgKGFkZHIgKyBzaXplID49IGNodW5rLT5hZGRyICsgY2h1bmstPnNpemUpKSB7Ci0JCQltZW1tb3ZlKGNodW5rLCBjaHVuayArIDEsIChNRU1PUllfQ0hVTktTLWktMSkgKiBzaXplb2YoKmNodW5rKSk7Ci0JCQltZW1zZXQoJm1lbV9jaHVua1tNRU1PUllfQ0hVTktTLTFdLCAwLCBzaXplb2YoKmNodW5rKSk7Ci0JCX0gZWxzZSBpZiAoYWRkciArIHNpemUgPCBjaHVuay0+YWRkciArIGNodW5rLT5zaXplKSB7Ci0JCQljaHVuay0+c2l6ZSA9ICBjaHVuay0+YWRkciArIGNodW5rLT5zaXplIC0gYWRkciAtIHNpemU7Ci0JCQljaHVuay0+YWRkciA9IGFkZHIgKyBzaXplOwotCQl9IGVsc2UgaWYgKGFkZHIgPiBjaHVuay0+YWRkcikgewotCQkJY2h1bmstPnNpemUgPSBhZGRyIC0gY2h1bmstPmFkZHI7Ci0JCX0KLQl9CisJfSB3aGlsZSAoYWRkciA8IG1heF9waHlzbWVtX2VuZCk7CisJbWVtYmxvY2tfc2V0X2JvdHRvbV91cChmYWxzZSk7CisJaWYgKCFtYXhfcGh5c21lbV9lbmQpCisJCW1heF9waHlzbWVtX2VuZCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYyBiL2FyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCmluZGV4IDI3YzUwZjQuLmE5MGQ0NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCisrKyBiL2FyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lwbC5oPgogCiAjZGVmaW5lIEVTU0FfU0VUX1NUQUJMRQkJMQogI2RlZmluZSBFU1NBX1NFVF9VTlVTRUQJCTIKQEAgLTQzLDE0ICs0MSw2IEBACiAKIAlpZiAoIWNtbWFfZmxhZykKIAkJcmV0dXJuOwotCS8qCi0JICogRGlzYWJsZSBDTU0gZm9yIGR1bXAsIG90aGVyd2lzZSAgdGhlIHRwcm90IGJhc2VkIG1lbW9yeQotCSAqIGRldGVjdGlvbiBjYW4gZmFpbCBiZWNhdXNlIG9mIHVuc3RhYmxlIHBhZ2VzLgotCSAqLwotCWlmIChPTERNRU1fQkFTRSB8fCBpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUF9EVU1QKSB7Ci0JCWNtbWFfZmxhZyA9IDA7Ci0JCXJldHVybjsKLQl9CiAJYXNtIHZvbGF0aWxlKAogCQkiICAgICAgIC5pbnNuIHJyZiwweGI5YWIwMDAwLCUxLCUxLDAsMFxuIgogCQkiMDogICAgIGxhICAgICAgJTAsMFxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggZDdjZmQ1Ny4uMzdiODI0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC01Myw4ICs1MywxMCBAQAogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYXJnOwogCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkKLQkJdXBkYXRlX3VzZXJfYXNjZShtbSwgMSk7CisJaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgeworCQljbGVhcl91c2VyX2FzY2UoKTsKKwkJc2V0X3VzZXJfYXNjZShtbSk7CisJfQogCV9fdGxiX2ZsdXNoX2xvY2FsKCk7CiB9CiAKQEAgLTEwOCw3ICsxMTAsNyBAQAogCXBnZF90ICpwZ2Q7CiAKIAlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7Ci0JCWNsZWFyX3VzZXJfYXNjZShtbSwgMSk7CisJCWNsZWFyX3VzZXJfYXNjZSgpOwogCQlfX3RsYl9mbHVzaF9tbShtbSk7CiAJfQogCXdoaWxlIChtbS0+Y29udGV4dC5hc2NlX2xpbWl0ID4gbGltaXQpIHsKQEAgLTEzNCw3ICsxMzYsNyBAQAogCQljcnN0X3RhYmxlX2ZyZWUobW0sICh1bnNpZ25lZCBsb25nICopIHBnZCk7CiAJfQogCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pCi0JCXVwZGF0ZV91c2VyX2FzY2UobW0sIDEpOworCQlzZXRfdXNlcl9hc2NlKG1tKTsKIH0KICNlbmRpZgogCkBAIC04MzIsNiArODM0LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmdtYXBfbm90aWZpZXJfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2RvX2lwdGVfbm90aWZ5KTsKIAogc3RhdGljIGlubGluZSBpbnQgcGFnZV90YWJsZV93aXRoX3Bnc3RlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtODY0LDggKzg2Nyw3IEBACiAJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAwKTsKIAl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKIAljbGVhcl90YWJsZSh0YWJsZSwgX1BBR0VfSU5WQUxJRCwgUEFHRV9TSVpFLzIpOwotCWNsZWFyX3RhYmxlKHRhYmxlICsgUFRSU19QRVJfUFRFLCBQR1NURV9IUl9CSVQgfCBQR1NURV9IQ19CSVQsCi0JCSAgICBQQUdFX1NJWkUvMik7CisJY2xlYXJfdGFibGUodGFibGUgKyBQVFJTX1BFUl9QVEUsIDAsIFBBR0VfU0laRS8yKTsKIAlyZXR1cm4gdGFibGU7CiB9CiAKQEAgLTg4Myw4ICs4ODUsOCBAQAogCV9fZnJlZV9wYWdlKHBhZ2UpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV90YWJsZV9yZXNldF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQlwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfdGFibGVfcmVzZXRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAorCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCBpbml0X3NrZXkpCiB7CiAJcHRlX3QgKnN0YXJ0X3B0ZSwgKnB0ZTsKIAlzcGlubG9ja190ICpwdGw7CkBAIC04OTUsNiArODk3LDIyIEBACiAJZG8gewogCQlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZSk7CiAJCXBnc3RlX3ZhbChwZ3N0ZSkgJj0gfl9QR1NURV9HUFNfVVNBR0VfTUFTSzsKKwkJaWYgKGluaXRfc2tleSkgeworCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJCQlwZ3N0ZV92YWwocGdzdGUpICY9IH4oUEdTVEVfQUNDX0JJVFMgfCBQR1NURV9GUF9CSVQgfAorCQkJCQkgICAgICBQR1NURV9HUl9CSVQgfCBQR1NURV9HQ19CSVQpOworCisJCQkvKiBza2lwIGludmFsaWQgYW5kIG5vdCB3cml0YWJsZSBwYWdlcyAqLworCQkJaWYgKHB0ZV92YWwoKnB0ZSkgJiBfUEFHRV9JTlZBTElEIHx8CisJCQkgICAgIShwdGVfdmFsKCpwdGUpICYgX1BBR0VfV1JJVEUpKSB7CisJCQkJcGdzdGVfc2V0X3VubG9jayhwdGUsIHBnc3RlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYWRkcmVzcyA9IHB0ZV92YWwoKnB0ZSkgJiBQQUdFX01BU0s7CisJCQlwYWdlX3NldF9zdG9yYWdlX2tleShhZGRyZXNzLCBQQUdFX0RFRkFVTFRfS0VZLCAxKTsKKwkJfQogCQlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZSwgcGdzdGUpOwogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpOwpAQCAtOTAyLDggKzkyMCw4IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX3RhYmxlX3Jlc2V0X3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCXB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV90YWJsZV9yZXNldF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsCisJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGluaXRfc2tleSkKIHsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiAJcG1kX3QgKnBtZDsKQEAgLTkxMywxNCArOTMxLDE0IEBACiAJCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKHBtZF9ub25lX29yX2NsZWFyX2JhZChwbWQpKQogCQkJY29udGludWU7Ci0JCW5leHQgPSBwYWdlX3RhYmxlX3Jlc2V0X3B0ZShtbSwgcG1kLCBhZGRyLCBuZXh0KTsKKwkJbmV4dCA9IHBhZ2VfdGFibGVfcmVzZXRfcHRlKG1tLCBwbWQsIGFkZHIsIG5leHQsIGluaXRfc2tleSk7CiAJfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKIAlyZXR1cm4gYWRkcjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfdGFibGVfcmVzZXRfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJcGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX3RhYmxlX3Jlc2V0X3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgaW5pdF9za2V5KQogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlwdWRfdCAqcHVkOwpAQCAtOTMwLDI4ICs5NDgsMzMgQEAKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCiAJCQljb250aW51ZTsKLQkJbmV4dCA9IHBhZ2VfdGFibGVfcmVzZXRfcG1kKG1tLCBwdWQsIGFkZHIsIG5leHQpOworCQluZXh0ID0gcGFnZV90YWJsZV9yZXNldF9wbWQobW0sIHB1ZCwgYWRkciwgbmV4dCwgaW5pdF9za2V5KTsKIAl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAogCXJldHVybiBhZGRyOwogfQogCi12b2lkIHBhZ2VfdGFibGVfcmVzZXRfcGdzdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3ZvaWQgcGFnZV90YWJsZV9yZXNldF9wZ3N0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCBpbml0X3NrZXkpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBuZXh0OwogCXBnZF90ICpwZ2Q7CiAKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCWlmIChpbml0X3NrZXkgJiYgbW1fdXNlX3NrZXkobW0pKQorCQlnb3RvIG91dF91cDsKIAlhZGRyID0gc3RhcnQ7Ci0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwogCWRvIHsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCiAJCQljb250aW51ZTsKLQkJbmV4dCA9IHBhZ2VfdGFibGVfcmVzZXRfcHVkKG1tLCBwZ2QsIGFkZHIsIG5leHQpOworCQluZXh0ID0gcGFnZV90YWJsZV9yZXNldF9wdWQobW0sIHBnZCwgYWRkciwgbmV4dCwgaW5pdF9za2V5KTsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChpbml0X3NrZXkpCisJCWN1cnJlbnQtPm1tLT5jb250ZXh0LnVzZV9za2V5ID0gMTsKK291dF91cDoKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIH0KIEVYUE9SVF9TWU1CT0wocGFnZV90YWJsZV9yZXNldF9wZ3N0ZSk7CiAKQEAgLTk4OSw3ICsxMDEyLDcgQEAKIAkvKiBjaGFuZ2luZyB0aGUgZ3Vlc3Qgc3RvcmFnZSBrZXkgaXMgY29uc2lkZXJlZCBhIGNoYW5nZSBvZiB0aGUgcGFnZSAqLwogCWlmICgocGdzdGVfdmFsKG5ldykgXiBwZ3N0ZV92YWwob2xkKSkgJgogCSAgICAoUEdTVEVfQUNDX0JJVFMgfCBQR1NURV9GUF9CSVQgfCBQR1NURV9HUl9CSVQgfCBQR1NURV9HQ19CSVQpKQotCQlwZ3N0ZV92YWwobmV3KSB8PSBQR1NURV9IQ19CSVQ7CisJCXBnc3RlX3ZhbChuZXcpIHw9IFBHU1RFX1VDX0JJVDsKIAogCXBnc3RlX3NldF91bmxvY2socHRlcCwgbmV3KTsKIAlwdGVfdW5tYXBfdW5sb2NrKCpwdGVwLCBwdGwpOwpAQCAtMTAxMSw2ICsxMDM0LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3ZvaWQgcGFnZV90YWJsZV9yZXNldF9wZ3N0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCBpbml0X3NrZXkpCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodW5zaWduZWQgbG9uZyAqdGFibGUpCiB7CiB9CkBAIC0xMzU3LDYgKzEzODUsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHMzOTBfZW5hYmxlX3NpZSk7CiAKKy8qCisgKiBFbmFibGUgc3RvcmFnZSBrZXkgaGFuZGxpbmcgZnJvbSBub3cgb24gYW5kIGluaXRpYWxpemUgdGhlIHN0b3JhZ2UKKyAqIGtleXMgd2l0aCB0aGUgZGVmYXVsdCBrZXkuCisgKi8KK3ZvaWQgczM5MF9lbmFibGVfc2tleSh2b2lkKQoreworCXBhZ2VfdGFibGVfcmVzZXRfcGdzdGUoY3VycmVudC0+bW0sIDAsIFRBU0tfU0laRSwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzMzkwX2VuYWJsZV9za2V5KTsKKworLyoKKyAqIFRlc3QgYW5kIHJlc2V0IGlmIGEgZ3Vlc3QgcGFnZSBpcyBkaXJ0eQorICovCitib29sIGdtYXBfdGVzdF9hbmRfY2xlYXJfZGlydHkodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgZ21hcCAqZ21hcCkKK3sKKwlwdGVfdCAqcHRlOworCXNwaW5sb2NrX3QgKnB0bDsKKwlib29sIGRpcnR5ID0gZmFsc2U7CisKKwlwdGUgPSBnZXRfbG9ja2VkX3B0ZShnbWFwLT5tbSwgYWRkcmVzcywgJnB0bCk7CisJaWYgKHVubGlrZWx5KCFwdGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocHRlcF90ZXN0X2FuZF9jbGVhcl91c2VyX2RpcnR5KGdtYXAtPm1tLCBhZGRyZXNzLCBwdGUpKQorCQlkaXJ0eSA9IHRydWU7CisKKwlzcGluX3VubG9jayhwdGwpOworCXJldHVybiBkaXJ0eTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdtYXBfdGVzdF9hbmRfY2xlYXJfZGlydHkpOworCiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiBpbnQgcG1kcF9jbGVhcl9mbHVzaF95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgcG1kX3QgKnBtZHApCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vdm1lbS5jIGIvYXJjaC9zMzkwL21tL3ZtZW0uYwppbmRleCA3MmIwNGRlLi5mZTkwMTJhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vdm1lbS5jCisrKyBiL2FyY2gvczM5MC9tbS92bWVtLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTY2LDcgKzY3LDggQEAKIAlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKIAkJcHRlID0gKHB0ZV90ICopIHBhZ2VfdGFibGVfYWxsb2MoJmluaXRfbW0sIGFkZHJlc3MpOwogCWVsc2UKLQkJcHRlID0gYWxsb2NfYm9vdG1lbShQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpKTsKKwkJcHRlID0gYWxsb2NfYm9vdG1lbV9hbGlnbihQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpLAorCQkJCQkgIFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkpOwogCWlmICghcHRlKQogCQlyZXR1cm4gTlVMTDsKIAljbGVhcl90YWJsZSgodW5zaWduZWQgbG9uZyAqKSBwdGUsIF9QQUdFX0lOVkFMSUQsCkBAIC0zNzEsMTYgKzM3MywxNCBAQAogdm9pZCBfX2luaXQgdm1lbV9tYXBfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcm9fc3RhcnQsIHJvX2VuZDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Ci0JaW50IGk7CisJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnOworCXBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7CiAKIAlyb19zdGFydCA9IFBGTl9BTElHTigodW5zaWduZWQgbG9uZykmX3N0ZXh0KTsKIAlyb19lbmQgPSAodW5zaWduZWQgbG9uZykmX2VzaGFyZWQgJiBQQUdFX01BU0s7Ci0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQlpZiAoIW1lbW9yeV9jaHVua1tpXS5zaXplKQotCQkJY29udGludWU7Ci0JCXN0YXJ0ID0gbWVtb3J5X2NodW5rW2ldLmFkZHI7Ci0JCWVuZCA9IG1lbW9yeV9jaHVua1tpXS5hZGRyICsgbWVtb3J5X2NodW5rW2ldLnNpemU7CisJZm9yX2VhY2hfbWVtYmxvY2sobWVtb3J5LCByZWcpIHsKKwkJc3RhcnQgPSByZWctPmJhc2U7CisJCWVuZCA9IHJlZy0+YmFzZSArIHJlZy0+c2l6ZSAtIDE7CiAJCWlmIChzdGFydCA+PSByb19lbmQgfHwgZW5kIDw9IHJvX3N0YXJ0KQogCQkJdm1lbV9hZGRfbWVtKHN0YXJ0LCBlbmQgLSBzdGFydCwgMCk7CiAJCWVsc2UgaWYgKHN0YXJ0ID49IHJvX3N0YXJ0ICYmIGVuZCA8PSByb19lbmQpCkBAIC00MDAsMjMgKzQwMCwyMSBAQAogfQogCiAvKgotICogQ29udmVydCBtZW1vcnkgY2h1bmsgYXJyYXkgdG8gYSBtZW1vcnkgc2VnbWVudCBsaXN0IHNvIHRoZXJlIGlzIGEgc2luZ2xlCi0gKiBsaXN0IHRoYXQgY29udGFpbnMgYm90aCByL3cgbWVtb3J5IGFuZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLgorICogQ29udmVydCBtZW1ibG9jay5tZW1vcnkgIHRvIGEgbWVtb3J5IHNlZ21lbnQgbGlzdCBzbyB0aGVyZSBpcyBhIHNpbmdsZQorICogbGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBtZW1vcnkgc2VnbWVudHMuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHZtZW1fY29udmVydF9tZW1vcnlfY2h1bmsodm9pZCkKIHsKKwlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZWc7CiAJc3RydWN0IG1lbW9yeV9zZWdtZW50ICpzZWc7Ci0JaW50IGk7CiAKIAltdXRleF9sb2NrKCZ2bWVtX211dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUzsgaSsrKSB7Ci0JCWlmICghbWVtb3J5X2NodW5rW2ldLnNpemUpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9tZW1ibG9jayhtZW1vcnksIHJlZykgewogCQlzZWcgPSBremFsbG9jKHNpemVvZigqc2VnKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VnKQogCQkJcGFuaWMoIk91dCBvZiBtZW1vcnkuLi5cbiIpOwotCQlzZWctPnN0YXJ0ID0gbWVtb3J5X2NodW5rW2ldLmFkZHI7Ci0JCXNlZy0+c2l6ZSA9IG1lbW9yeV9jaHVua1tpXS5zaXplOworCQlzZWctPnN0YXJ0ID0gcmVnLT5iYXNlOworCQlzZWctPnNpemUgPSByZWctPnNpemU7CiAJCWluc2VydF9tZW1vcnlfc2VnbWVudChzZWcpOwogCX0KIAltdXRleF91bmxvY2soJnZtZW1fbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jCmluZGV4IDI3NmYyZTIuLmU1M2M2ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuYworKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMKQEAgLTIwOSwxMyArMjA5LDExIEBACiAJfQogfQogCi1zdGF0aWMgaW50IHByZXBhcmVfY3B1X2J1ZmZlcnModm9pZCkKK3N0YXRpYyB2b2lkIHByZXBhcmVfY3B1X2J1ZmZlcnModm9pZCkKIHsKLQlpbnQgY3B1OwotCWludCByYzsKIAlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCWludCBjcHU7CiAKLQlyYyA9IDA7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CiAJCWF0b21pY19zZXQoJmNiLT5leHRfcGFyYW1zLCAwKTsKQEAgLTIzMCw4ICsyMjgsNiBAQAogCQljYi0+b29tID0gMDsKIAkJY2ItPnN0b3BfbW9kZSA9IDA7CiAJfQotCi0JcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtMTEwNyw5ICsxMTAzLDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gc3RhcnRfYWxsX2V4aXQ7CiAKLQlyYyA9IHByZXBhcmVfY3B1X2J1ZmZlcnMoKTsKLQlpZiAocmMpCi0JCWdvdG8gc3RhcnRfYWxsX2V4aXQ7CisJcHJlcGFyZV9jcHVfYnVmZmVycygpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJcmMgPSBzdGFydF9zYW1wbGluZyhjcHUpOwpAQCAtMTE1Niw3ICsxMTUwLDcgQEAKIAlyYyA9IDA7CiAJaWYgKGh3c19zdGF0ZSA9PSBIV1NfSU5JVCkgewogCQltdXRleF91bmxvY2soJmh3c19zZW0pOwotCQlyZXR1cm4gcmM7CisJCXJldHVybiAwOwogCX0KIAlod3Nfc3RhdGUgPSBIV1NfU1RPUFBJTkc7CiAJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9wY2kvcGNpLmMgYi9hcmNoL3MzOTAvcGNpL3BjaS5jCmluZGV4IDFkZjFkMjkuLmJkZjAyNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9wY2kvcGNpLmMKKysrIGIvYXJjaC9zMzkwL3BjaS9wY2kuYwpAQCAtNTMwLDExICs1MzAsNiBAQAogCX0KIH0KIAotaW50IHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JcmV0dXJuIHpwY2lfc3lzZnNfYWRkX2RldmljZSgmcGRldi0+ZGV2KTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgenBjaV9pcnFfaW5pdCh2b2lkKQogewogCWludCByYzsKQEAgLTY3MSw2ICs2NjYsNyBAQAogCWludCBpOwogCiAJemRldi0+cGRldiA9IHBkZXY7CisJcGRldi0+ZGV2Lmdyb3VwcyA9IHpwY2lfYXR0cl9ncm91cHM7CiAJenBjaV9tYXBfcmVzb3VyY2VzKHpkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IFBDSV9CQVJfQ09VTlQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3BjaS9wY2lfY2xwLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9jbHAuYwppbmRleCBjNzQ3Mzk0Li45NjU0NWQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvcGNpL3BjaV9jbHAuYworKysgYi9hcmNoL3MzOTAvcGNpL3BjaV9jbHAuYwpAQCAtMTE0LDYgKzExNCwxNiBAQAogCXpkZXYtPmVuZF9kbWEgPSByZXNwb25zZS0+ZWRtYTsKIAl6ZGV2LT5wY2hpZCA9IHJlc3BvbnNlLT5wY2hpZDsKIAl6ZGV2LT5wZmdpZCA9IHJlc3BvbnNlLT5wZmdpZDsKKwl6ZGV2LT5wZnQgPSByZXNwb25zZS0+cGZ0OworCXpkZXYtPnZmbiA9IHJlc3BvbnNlLT52Zm47CisJemRldi0+dWlkID0gcmVzcG9uc2UtPnVpZDsKKworCW1lbWNweSh6ZGV2LT5wZmlwLCByZXNwb25zZS0+cGZpcCwgc2l6ZW9mKHpkZXYtPnBmaXApKTsKKwlpZiAocmVzcG9uc2UtPnV0aWxfc3RyX2F2YWlsKSB7CisJCW1lbWNweSh6ZGV2LT51dGlsX3N0ciwgcmVzcG9uc2UtPnV0aWxfc3RyLAorCQkgICAgICAgc2l6ZW9mKHpkZXYtPnV0aWxfc3RyKSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9wY2kvcGNpX2V2ZW50LmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9ldmVudC5jCmluZGV4IDAxZTI1MWIuLjZkN2Y1YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9wY2kvcGNpX2V2ZW50LmMKKysrIGIvYXJjaC9zMzkwL3BjaS9wY2lfZXZlbnQuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJc3dpdGNoIChjY2RmLT5wZWMpIHsKIAljYXNlIDB4MDMwMTogLyogU3RhbmRieSAtPiBDb25maWd1cmVkICovCi0JCWlmICghemRldiB8fCB6ZGV2LT5zdGF0ZSA9PSBaUENJX0ZOX1NUQVRFX0NPTkZJR1VSRUQpCisJCWlmICghemRldiB8fCB6ZGV2LT5zdGF0ZSAhPSBaUENJX0ZOX1NUQVRFX1NUQU5EQlkpCiAJCQlicmVhazsKIAkJemRldi0+c3RhdGUgPSBaUENJX0ZOX1NUQVRFX0NPTkZJR1VSRUQ7CiAJCXpkZXYtPmZoID0gY2NkZi0+Zmg7CkBAIC04Niw3ICs4Niw4IEBACiAJCXBjaV9yZXNjYW5fYnVzKHpkZXYtPmJ1cyk7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzAyOiAvKiBSZXNlcnZlZCAtPiBTdGFuZGJ5ICovCi0JCWNscF9hZGRfcGNpX2RldmljZShjY2RmLT5maWQsIGNjZGYtPmZoLCAwKTsKKwkJaWYgKCF6ZGV2KQorCQkJY2xwX2FkZF9wY2lfZGV2aWNlKGNjZGYtPmZpZCwgY2NkZi0+ZmgsIDApOwogCQlicmVhazsKIAljYXNlIDB4MDMwMzogLyogRGVjb25maWd1cmF0aW9uIHJlcXVlc3RlZCAqLwogCQlpZiAocGRldikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9wY2kvcGNpX3N5c2ZzLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9zeXNmcy5jCmluZGV4IGFiNGE5MTMuLjkxOTAyMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9wY2kvcGNpX3N5c2ZzLmMKKysrIGIvYXJjaC9zMzkwL3BjaS9wY2lfc3lzZnMuYwpAQCAtMTIsNDMgKzEyLDI5IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi1zdGF0aWMgc3NpemVfdCBzaG93X2ZpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCB6cGNpX2RldiAqemRldiA9IGdldF96ZGV2KHRvX3BjaV9kZXYoZGV2KSk7CisjZGVmaW5lIHpwY2lfYXR0cihuYW1lLCBmbXQsIG1lbWJlcikJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IG5hbWUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSBnZXRfemRldih0b19wY2lfZGV2KGRldikpOwkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10LCB6ZGV2LT5tZW1iZXIpOwkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSX1JPKG5hbWUpCiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHpkZXYtPmZpZCk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIoZnVuY3Rpb25faWQsIFNfSVJVR08sIHNob3dfZmlkLCBOVUxMKTsKK3pwY2lfYXR0cihmdW5jdGlvbl9pZCwgIjB4JTA4eFxuIiwgZmlkKTsKK3pwY2lfYXR0cihmdW5jdGlvbl9oYW5kbGUsICIweCUwOHhcbiIsIGZoKTsKK3pwY2lfYXR0cihwY2hpZCwgIjB4JTA0eFxuIiwgcGNoaWQpOworenBjaV9hdHRyKHBmZ2lkLCAiMHglMDJ4XG4iLCBwZmdpZCk7Cit6cGNpX2F0dHIodmZuLCAiMHglMDR4XG4iLCB2Zm4pOworenBjaV9hdHRyKHBmdCwgIjB4JTAyeFxuIiwgcGZ0KTsKK3pwY2lfYXR0cih1aWQsICIweCV4XG4iLCB1aWQpOworenBjaV9hdHRyKHNlZ21lbnQwLCAiMHglMDJ4XG4iLCBwZmlwWzBdKTsKK3pwY2lfYXR0cihzZWdtZW50MSwgIjB4JTAyeFxuIiwgcGZpcFsxXSk7Cit6cGNpX2F0dHIoc2VnbWVudDIsICIweCUwMnhcbiIsIHBmaXBbMl0pOworenBjaV9hdHRyKHNlZ21lbnQzLCAiMHglMDJ4XG4iLCBwZmlwWzNdKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19maChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkgICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB6cGNpX2RldiAqemRldiA9IGdldF96ZGV2KHRvX3BjaV9kZXYoZGV2KSk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHpkZXYtPmZoKTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihmdW5jdGlvbl9oYW5kbGUsIFNfSVJVR08sIHNob3dfZmgsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3BjaGlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSBnZXRfemRldih0b19wY2lfZGV2KGRldikpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDR4XG4iLCB6ZGV2LT5wY2hpZCk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIocGNoaWQsIFNfSVJVR08sIHNob3dfcGNoaWQsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3BmZ2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSBnZXRfemRldih0b19wY2lfZGV2KGRldikpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDJ4XG4iLCB6ZGV2LT5wZmdpZCk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIocGZnaWQsIFNfSVJVR08sIHNob3dfcGZnaWQsIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9yZWNvdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwpAQCAtNzAsMzggKzU2LDU1IEBACiAJcGNpX3Jlc2Nhbl9idXMoemRldi0+YnVzKTsKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgREVWSUNFX0FUVFIocmVjb3ZlciwgU19JV1VTUiwgTlVMTCwgc3RvcmVfcmVjb3Zlcik7CitzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb3Zlcik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqenBjaV9kZXZfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfZnVuY3Rpb25faWQsCi0JJmRldl9hdHRyX2Z1bmN0aW9uX2hhbmRsZSwKLQkmZGV2X2F0dHJfcGNoaWQsCi0JJmRldl9hdHRyX3BmZ2lkLAotCSZkZXZfYXR0cl9yZWNvdmVyLAorc3RhdGljIHNzaXplX3QgdXRpbF9zdHJpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHpwY2lfZGV2ICp6ZGV2ID0gZ2V0X3pkZXYocGRldik7CisKKwlyZXR1cm4gbWVtb3J5X3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgJm9mZiwgemRldi0+dXRpbF9zdHIsCisJCQkJICAgICAgIHNpemVvZih6ZGV2LT51dGlsX3N0cikpOworfQorc3RhdGljIEJJTl9BVFRSX1JPKHV0aWxfc3RyaW5nLCBDTFBfVVRJTF9TVFJfTEVOKTsKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqenBjaV9iaW5fYXR0cnNbXSA9IHsKKwkmYmluX2F0dHJfdXRpbF9zdHJpbmcsCiAJTlVMTCwKIH07CiAKLWludCB6cGNpX3N5c2ZzX2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBpLCByYyA9IDA7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqenBjaV9kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfZnVuY3Rpb25faWQuYXR0ciwKKwkmZGV2X2F0dHJfZnVuY3Rpb25faGFuZGxlLmF0dHIsCisJJmRldl9hdHRyX3BjaGlkLmF0dHIsCisJJmRldl9hdHRyX3BmZ2lkLmF0dHIsCisJJmRldl9hdHRyX3BmdC5hdHRyLAorCSZkZXZfYXR0cl92Zm4uYXR0ciwKKwkmZGV2X2F0dHJfdWlkLmF0dHIsCisJJmRldl9hdHRyX3JlY292ZXIuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHpwY2lfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSB6cGNpX2Rldl9hdHRycywKKwkuYmluX2F0dHJzID0genBjaV9iaW5fYXR0cnMsCit9OwogCi0JZm9yIChpID0gMDsgenBjaV9kZXZfYXR0cnNbaV07IGkrKykgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsIHpwY2lfZGV2X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBlcnJvcjsKLQl9Ci0JcmV0dXJuIDA7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGZpcF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9zZWdtZW50MC5hdHRyLAorCSZkZXZfYXR0cl9zZWdtZW50MS5hdHRyLAorCSZkZXZfYXR0cl9zZWdtZW50Mi5hdHRyLAorCSZkZXZfYXR0cl9zZWdtZW50My5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGZpcF9hdHRyX2dyb3VwID0geworCS5uYW1lID0gInBmaXAiLAorCS5hdHRycyA9IHBmaXBfYXR0cnMsCit9OwogCi1lcnJvcjoKLQl3aGlsZSAoLS1pID49IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYsIHpwY2lfZGV2X2F0dHJzW2ldKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgenBjaV9zeXNmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IHpwY2lfZGV2X2F0dHJzW2ldOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYsIHpwY2lfZGV2X2F0dHJzW2ldKTsKLX0KK2NvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnpwY2lfYXR0cl9ncm91cHNbXSA9IHsKKwkmenBjaV9hdHRyX2dyb3VwLAorCSZwZmlwX2F0dHJfZ3JvdXAsCisJTlVMTCwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBhMzA0MDk2Li5jMWJmOGQ2IDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTIsMTIgKzIsNyBAQAogI2RlZmluZSBfQVNNX1NDT1JFX0JJVE9QU19ICiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+IC8qIHN3YWIzMiAqLwotCi0vKgotICogY2xlYXJfYml0KCkgZG9lc24ndCBwcm92aWRlIGFueSBiYXJyaWVyIGZvciB0aGUgY29tcGlsZXIuCi0gKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zscy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZwppbmRleCA5NWFlMjNmLi5lYzcwNDc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZwpAQCAtOTMsNyArOTMsNiBAQAogQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKaW5kZXggYzZjMmJlYy4uMGIzNjRlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCkBAIC0xMDcsNyArMTA3LDYgQEAKIENPTkZJR19TTkRfU09DX1NINF9GU0k9eQogQ09ORklHX1NORF9GU0lfREE3MjEwPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCmluZGV4IDM2NzBlOTMuLjY3ODNmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKQEAgLTgwLDcgKzgwLDYgQEAKIENPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCmluZGV4IDQ3MjM2NTcuLjNjNGY2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKQEAgLTEwMCw3ICsxMDAsNiBAQAogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKIENPTkZJR19ORVdfTEVEUz15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzI2NF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzI2NF9kZWZjb25maWcKaW5kZXggMTYwMDQyNi4uZWVjZGY2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjY0X2RlZmNvbmZpZwpAQCAtNjAsNyArNjAsNiBAQAogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjY5X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjY5X2RlZmNvbmZpZwppbmRleCA5ZjA2MmI1Li44MzcwYjEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzI2OV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3JzazcyNjlfZGVmY29uZmlnCkBAIC00Myw3ICs0Myw2IEBACiBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCmluZGV4IGFlMTExNTg0Li42YTk2YjlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCkBAIC0xMDAsOCArMTAwLDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKaW5kZXggYmU5YzQ3NDEuLjIwMWFjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCkBAIC05Miw5ICs5Miw3IEBACiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9JU1AxMTZYX0hDRD15CiBDT05GSUdfVUlPPXkKIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKaW5kZXggYzhjNWU3Zi4uYjBlZjYzYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKQEAgLTk0LDcgKzk0LDYgQEAKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2gyMDA3X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDIwMDdfZGVmY29uZmlnCmluZGV4IDBkMmY0MTQuLjBjMDhkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDIwMDdfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDIwMDdfZGVmY29uZmlnCkBAIC05Nyw3ICs5Nyw2IEBACiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfTkVXX0xFRFM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwppbmRleCA1MTU2MWY1Li5kMjlkYTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwpAQCAtODgsNyArODgsNiBAQAogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD1tCiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwppbmRleCBlMmNiZDkyLi5hNzdiNzc4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKQEAgLTIxNSw3ICsyMTUsNiBAQAogQ09ORklHX1NIX1dEVD1tCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKaW5kZXggZDdmODliZS4uMWU4NDNkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpAQCAtMTE3LDcgKzExNyw2IEBACiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwppbmRleCBkNmNkZTcwLi4xZDFjNWEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwpAQCAtMzEsNiArMzEsOCBAQAogc3RhdGljIHZvaWQgZ2Fwc3BjaV9maXh1cF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKnAgPSBkZXYtPnN5c2RhdGE7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IEZpeGluZyB1cCBkZXZpY2UgJXNcbiIsIHBjaV9uYW1lKGRldikpOwogCkBAIC01MCwxMSArNTIsMjEgQEAKIAogCQkvKgogCQkgKiBSZWRpcmVjdCBkbWEgbWVtb3J5IGFsbG9jYXRpb25zIHRvIHNwZWNpYWwgbWVtb3J5IHdpbmRvdy4KKwkJICoKKwkJICogSWYgdGhpcyBHQVBTUENJIHJlZ2lvbiB3ZXJlIG1hcHBlZCBieSBhIEJBUiwgdGhlIENQVQorCQkgKiBwaHlzX2FkZHJfdCB3b3VsZCBiZSBwY2lfcmVzb3VyY2Vfc3RhcnQoKSwgYW5kIHRoZSBidXMKKwkJICogYWRkcmVzcyB3b3VsZCBiZSBwY2lfYnVzX2FkZHJlc3MocGNpX3Jlc291cmNlX3N0YXJ0KCkpLgorCQkgKiBCdXQgYXBwYXJlbnRseSB0aGVyZSdzIG5vIEJBUiBtYXBwaW5nIGl0LCBzbyB3ZSBqdXN0CisJCSAqICJrbm93IiBpdHMgQ1BVIGFkZHJlc3MgaXMgR0FQU1BDSV9ETUFfQkFTRS4KIAkJICovCisJCXJlcy5zdGFydCA9IEdBUFNQQ0lfRE1BX0JBU0U7CisJCXJlcy5lbmQgPSBHQVBTUENJX0RNQV9CQVNFICsgR0FQU1BDSV9ETUFfU0laRSAtIDE7CisJCXJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCQlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhkZXYtPmJ1cywgJnJlZ2lvbiwgJnJlcyk7CiAJCUJVR19PTighZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KCZkZXYtPmRldiwKLQkJCQkJCUdBUFNQQ0lfRE1BX0JBU0UsCi0JCQkJCQlHQVBTUENJX0RNQV9CQVNFLAotCQkJCQkJR0FQU1BDSV9ETUFfU0laRSwKKwkJCQkJCXJlcy5zdGFydCwKKwkJCQkJCXJlZ2lvbi5zdGFydCwKKwkJCQkJCXJlc291cmNlX3NpemUoJnJlcyksCiAJCQkJCQlETUFfTUVNT1JZX01BUCB8CiAJCQkJCQlETUFfTUVNT1JZX0VYQ0xVU0lWRSkpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGY0YzFjMjAuLmY1N2I4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQogCkBAIC02Miw5ICs2Myw0IEBACiAJcmV0dXJuIGM7CiB9CiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQotCiAjZW5kaWYgLyogX19BU01fU0hfQVRPTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGVhODcwNmQuLmZjOGU2NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtOSw2ICs5LDcgQEAKIAogLyogRm9yIF9fc3dhYjMyICovCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKICNpZmRlZiBDT05GSUdfR1VTQV9SQgogI2luY2x1ZGUgPGFzbS9iaXRvcHMtZ3JiLmg+CkBAIC0yMiwxMiArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CiAjZW5kaWYKIAotLyoKLSAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLgotICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX21iKCkKLQogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBiZmY5NmMyLi41YjQ1MTE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTcwLDExICs3MCw2IEBACiAJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSk7CiBleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAvKiBEeW5hbWljIERNQSBtYXBwaW5nIHN0dWZmLgogICogU3VwZXJIIGhhcyBldmVyeXRoaW5nIG1hcHBlZCBzdGF0aWNhbGx5IGxpa2UgeDg2LgogICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKaW5kZXggZjU5YjFmMy4uODUyNWE2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwpAQCAtNTYsOSArNTYsMTMgQEAKIAogCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKLQljbGtfYWRkX2FsaWFzKCJ0bXVfZmNrIiwgTlVMTCwgInBlcmlwaGVyYWxfY2xrIiwgTlVMTCk7Ci0JY2xrX2FkZF9hbGlhcygibXR1Ml9mY2siLCBOVUxMLCAicGVyaXBoZXJhbF9jbGsiLCBOVUxMKTsKLQljbGtfYWRkX2FsaWFzKCJjbXRfZmNrIiwgTlVMTCwgInBlcmlwaGVyYWxfY2xrIiwgTlVMTCk7CisJY2xrX2FkZF9hbGlhcygiZmNrIiwgInNoLXRtdS1zaDMuMCIsICJwZXJpcGhlcmFsX2NsayIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoImZjayIsICJzaC10bXUuMCIsICJwZXJpcGhlcmFsX2NsayIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoImZjayIsICJzaC10bXUuMSIsICJwZXJpcGhlcmFsX2NsayIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoImZjayIsICJzaC10bXUuMiIsICJwZXJpcGhlcmFsX2NsayIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoImZjayIsICJzaC1tdHUyIiwgInBlcmlwaGVyYWxfY2xrIiwgTlVMTCk7CisJY2xrX2FkZF9hbGlhcygiZmNrIiwgInNoLWNtdC0xNi4wIiwgInBlcmlwaGVyYWxfY2xrIiwgTlVMTCk7CisJY2xrX2FkZF9hbGlhcygiZmNrIiwgInNoLWNtdC0zMi4wIiwgInBlcmlwaGVyYWxfY2xrIiwgTlVMTCk7CiAJY2xrX2FkZF9hbGlhcygic2NpX2ljayIsIE5VTEwsICJwZXJpcGhlcmFsX2NsayIsIE5VTEwpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCmluZGV4IDM4NjBiMGIuLjU4YzE5YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwpAQCAtMTUyLDYyICsxNTIsMjQgQEAKIAkucmVzb3VyY2UgPSBldGhfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDIsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAwLCAvKiBkaXNhYmxlZCBkdWUgdG8gY29kZSBnZW5lcmF0aW9uIGlzc3VlcyAqLworc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSAzLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmODRhMDA3MiwKLQkJLmVuZAk9IDB4Zjg0YTAwNzcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSA4NiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4Zjg0YTAwNzAsIDB4MTApLAorCURFRklORV9SRVNfSVJRKDg2KSwKKwlERUZJTkVfUkVTX0lSUSg4NyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWNtdC0xNiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MF9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKIAl9LAotCS5yZXNvdXJjZQk9IGNtdDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwOCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDAsIC8qIGRpc2FibGVkIGR1ZSB0byBjb2RlIGdlbmVyYXRpb24gaXNzdWVzICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGY4NGEwMDc4LAotCQkuZW5kCT0gMHhmODRhMDA3ZCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDg3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY210MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc2MTlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yMTUsOCArMTc3LDcgQEAKIAkmc2NpZjFfZGV2aWNlLAogCSZzY2lmMl9kZXZpY2UsCiAJJmV0aF9kZXZpY2UsCi0JJmNtdDBfZGV2aWNlLAotCSZjbXQxX2RldmljZSwKKwkmY210X2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzYxOV9kZXZpY2VzX3NldHVwKHZvaWQpCkBAIC0yMzUsOCArMTk2LDcgQEAKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCiAJJnNjaWYyX2RldmljZSwKLQkmY210MF9kZXZpY2UsCi0JJmNtdDFfZGV2aWNlLAorCSZjbXRfZGV2aWNlLAogfTsKIAogI2RlZmluZSBTVEJDUjMgMHhmODBhMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjY0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyNjQuYwppbmRleCBmZGY1ODVjLi44NjM4ZmJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyNjQuYwpAQCAtMTE3LDkgKzExNyw5IEBACiAJLyogTVNUUCBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJzY2lfaWNrIiwgJm1zdHBfY2xrc1tNU1RQNzddKSwKIAlDTEtERVZfQ09OX0lEKCJ2ZGMzIiwgJm1zdHBfY2xrc1tNU1RQNzRdKSwKLQlDTEtERVZfQ09OX0lEKCJjbXRfZmNrIiwgJm1zdHBfY2xrc1tNU1RQNzJdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtY210LTE2LjAiLCAmbXN0cF9jbGtzW01TVFA3Ml0pLAogCUNMS0RFVl9DT05fSUQoInVzYjAiLCAmbXN0cF9jbGtzW01TVFA2MF0pLAotCUNMS0RFVl9DT05fSUQoIm10dTJfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMzVdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtbXR1MiIsICZtc3RwX2Nsa3NbTVNUUDM1XSksCiAJQ0xLREVWX0NPTl9JRCgic2RoaTAiLCAmbXN0cF9jbGtzW01TVFAzNF0pLAogCUNMS0RFVl9DT05fSUQoInNkaGkxIiwgJm1zdHBfY2xrc1tNU1RQMzNdKSwKIAlDTEtERVZfQ09OX0lEKCJhZGMwIiwgJm1zdHBfY2xrc1tNU1RQMzJdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzI2OS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjY5LmMKaW5kZXggNmI3ODc2Mi4uZjhhNWMyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjY5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjY5LmMKQEAgLTE1OCw5ICsxNTgsOSBAQAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFA0Ml0pLAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjYiLCAmbXN0cF9jbGtzW01TVFA0MV0pLAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFA0MF0pLAotCUNMS0RFVl9DT05fSUQoImNtdF9mY2siLCAmbXN0cF9jbGtzW01TVFA3Ml0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtMTYuMCIsICZtc3RwX2Nsa3NbTVNUUDcyXSksCiAJQ0xLREVWX0NPTl9JRCgidXNiMCIsICZtc3RwX2Nsa3NbTVNUUDYwXSksCi0JQ0xLREVWX0NPTl9JRCgibXR1Ml9mY2siLCAmbXN0cF9jbGtzW01TVFAzNV0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1tdHUyIiwgJm1zdHBfY2xrc1tNU1RQMzVdKSwKIAlDTEtERVZfQ09OX0lEKCJhZGMwIiwgJm1zdHBfY2xrc1tNU1RQMzJdKSwKIAlDTEtERVZfQ09OX0lEKCJydGMwIiwgJm1zdHBfY2xrc1tNU1RQMzBdKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCmluZGV4IDYzZTk5NmYuLjI2ZmNkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCkBAIC0xMTQsODggKzExNCwxOCBAQAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgIm14ZyIsIHZlY3RvcnMsIGdyb3VwcywKIAkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHg4MCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZjgwMTAwMCwgMHg0MDApLAorCURFRklORV9SRVNfSVJRX05BTUVEKDIyOCwgInRnaTBhIiksCisJREVGSU5FX1JFU19JUlFfTkFNRUQoMjM0LCAidGdpMWEiKSwKKwlERUZJTkVfUkVTX0lSUV9OQU1FRCgyNDAsICJ0Z2kyYSIpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyXzBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmODAxMzAwLAotCQkuZW5kCT0gMHhmZjgwMTMyNiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDIyOCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX210dTIiLAotCS5pZAkJPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm10dTJfMF9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbXR1Ml8wX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml8wX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHgxMDAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmODAxMzgwLAotCQkuZW5kCT0gMHhmZjgwMTM5MCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDIzNCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX210dTIiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm10dTJfMV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbXR1Ml8xX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml8xX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDgwLAotCS50aW1lcl9iaXQgPSAyLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8yX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZjgwMTAwMCwKLQkJLmVuZAk9IDB4ZmY4MDEwMGEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAyNDAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzJfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMl9yZXNvdXJjZXMpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXR1Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLW10dTIiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBtdHUyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml9yZXNvdXJjZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CkBAIC0yMjEsOSArMTUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm14Z19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAotCSZtdHUyXzBfZGV2aWNlLAotCSZtdHUyXzFfZGV2aWNlLAotCSZtdHUyXzJfZGV2aWNlLAorCSZtdHUyX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG14Z19kZXZpY2VzX3NldHVwKHZvaWQpCkBAIC0yNDAsOSArMTY4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm14Z19lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAotCSZtdHUyXzBfZGV2aWNlLAotCSZtdHUyXzFfZGV2aWNlLAotCSZtdHUyXzJfZGV2aWNlLAorCSZtdHUyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jCmluZGV4IDJjNjg3NDQuLmFiYzBjZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jCkBAIC0zNjUsODggKzM2NSwxOCBAQAogCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHg4MCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZmZlNDAwMCwgMHg0MDApLAorCURFRklORV9SRVNfSVJRX05BTUVEKDEwOCwgInRnaTBhIiksCisJREVGSU5FX1JFU19JUlFfTkFNRUQoMTE2LCAidGdpMWEiKSwKKwlERUZJTkVfUkVTX0lSUV9OQU1FRCgxMjQsICJ0Z2kxYiIpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyXzBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZmU0MzAwLAotCQkuZW5kCT0gMHhmZmZlNDMyNiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDEwOCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX210dTIiLAotCS5pZAkJPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm10dTJfMF9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbXR1Ml8wX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml8wX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHgxMDAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZmU0MzgwLAotCQkuZW5kCT0gMHhmZmZlNDM5MCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDExNiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX210dTIiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm10dTJfMV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbXR1Ml8xX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml8xX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDgwLAotCS50aW1lcl9iaXQgPSAyLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8yX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZlNDAwMCwKLQkJLmVuZAk9IDB4ZmZmZTQwMGEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxMjQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzJfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMl9yZXNvdXJjZXMpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXR1Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLW10dTIiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBtdHUyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml9yZXNvdXJjZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzIwMV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTQ1OSw5ICszODksNyBAQAogCSZzY2lmNl9kZXZpY2UsCiAJJnNjaWY3X2RldmljZSwKIAkmcnRjX2RldmljZSwKLQkmbXR1Ml8wX2RldmljZSwKLQkmbXR1Ml8xX2RldmljZSwKLQkmbXR1Ml8yX2RldmljZSwKKwkmbXR1Ml9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDcyMDFfZGV2aWNlc19zZXR1cCh2b2lkKQpAQCAtNDg1LDkgKzQxMyw3IEBACiAJJnNjaWY1X2RldmljZSwKIAkmc2NpZjZfZGV2aWNlLAogCSZzY2lmN19kZXZpY2UsCi0JJm10dTJfMF9kZXZpY2UsCi0JJm10dTJfMV9kZXZpY2UsCi0JJm10dTJfMl9kZXZpY2UsCisJJm10dTJfZGV2aWNlLAogfTsKIAogI2RlZmluZSBTVEJDUjMgMHhmZmZlMDQwOApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwppbmRleCBkNTVhMGYzLi4zYjQ4OTRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwpAQCAtMjY1LDExOCArMjY1LDM3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDAyLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMCwgLyogZGlzYWJsZWQgZHVlIHRvIGNvZGUgZ2VuZXJhdGlvbiBpc3N1ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsc19tYXNrID0gMywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZWMwMDIsCi0JCS5lbmQJPSAweGZmZmVjMDA3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTQyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZmZlYzAwMCwgMHgxMCksCisJREVGSU5FX1JFU19JUlEoMTQyKSwKKwlERUZJTkVfUkVTX0lSUSgxNDMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1jbXQtMTYiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDBfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCiAJfSwKLQkucmVzb3VyY2UJPSBjbXQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210MF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDgsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAwLCAvKiBkaXNhYmxlZCBkdWUgdG8gY29kZSBnZW5lcmF0aW9uIGlzc3VlcyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyX3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4ZmZmZTQwMDAsIDB4NDAwKSwKKwlERUZJTkVfUkVTX0lSUV9OQU1FRCgxNDYsICJ0Z2kwYSIpLAorCURFRklORV9SRVNfSVJRX05BTUVEKDE1MywgInRnaTFhIiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZmVjMDA4LAotCQkuZW5kCT0gMHhmZmZlYzAwZCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDE0MywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNtdDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHg4MCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZTQzMDAsCi0JCS5lbmQJPSAweGZmZmU0MzI2LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTQ2LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXR1Ml8wX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfbXR1MiIsCi0JLmlkCQk9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbXR1Ml8wX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtdHUyXzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdHUyXzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIG10dTJfMV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IC0weDEwMCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZTQzODAsCi0JCS5lbmQJPSAweGZmZmU0MzkwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTUzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXR1Ml8xX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfbXR1MiIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbXR1Ml8xX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtdHUyXzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdHUyXzFfcmVzb3VyY2VzKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1tdHUyIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gbXR1Ml9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfcmVzb3VyY2VzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtNDA0LDEwICszMjMsOCBAQAogCSZzY2lmMV9kZXZpY2UsCiAJJnNjaWYyX2RldmljZSwKIAkmc2NpZjNfZGV2aWNlLAotCSZjbXQwX2RldmljZSwKLQkmY210MV9kZXZpY2UsCi0JJm10dTJfMF9kZXZpY2UsCi0JJm10dTJfMV9kZXZpY2UsCisJJmNtdF9kZXZpY2UsCisJJm10dTJfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogfTsKIApAQCAtNDI4LDEwICszNDUsOCBAQAogCSZzY2lmMV9kZXZpY2UsCiAJJnNjaWYyX2RldmljZSwKIAkmc2NpZjNfZGV2aWNlLAotCSZjbXQwX2RldmljZSwKLQkmY210MV9kZXZpY2UsCi0JJm10dTJfMF9kZXZpY2UsCi0JJm10dTJfMV9kZXZpY2UsCisJJmNtdF9kZXZpY2UsCisJJm10dTJfZGV2aWNlLAogfTsKIAogI2RlZmluZSBTVEJDUjMgMHhmZmZlMDQwOApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwppbmRleCAyNDFlNzQ1Li40OWJjNWEzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwpAQCAtMjE3LDE0NiArMjE3LDM4IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDAyLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMCwgLyogZGlzYWJsZWQgZHVlIHRvIGNvZGUgZ2VuZXJhdGlvbiBpc3N1ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsc19tYXNrID0gMywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZWMwMDIsCi0JCS5lbmQJPSAweGZmZmVjMDA3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTQwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZmZlYzAwMCwgMHgxMCksCisJREVGSU5FX1JFU19JUlEoMTQwKSwKKwlERUZJTkVfUkVTX0lSUSgxNDQpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1jbXQtMTYiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDBfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCiAJfSwKLQkucmVzb3VyY2UJPSBjbXQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210MF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDgsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAwLCAvKiBkaXNhYmxlZCBkdWUgdG8gY29kZSBnZW5lcmF0aW9uIGlzc3VlcyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyX3Jlc291cmNlc1tdID0geworCURFRklORV9SRVNfTUVNKDB4ZmZmZTQwMDAsIDB4NDAwKSwKKwlERUZJTkVfUkVTX0lSUV9OQU1FRCgxNTYsICJ0Z2kwYSIpLAorCURFRklORV9SRVNfSVJRX05BTUVEKDE2NCwgInRnaTFhIiksCisJREVGSU5FX1JFU19JUlFfTkFNRUQoMTgwLCAidGdpMmEiKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZWMwMDgsCi0JCS5lbmQJPSAweGZmZmVjMDBkLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTQ0LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY210MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIG10dTJfMF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IC0weDgwLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8wX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZlNDMwMCwKLQkJLmVuZAk9IDB4ZmZmZTQzMjYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxNTYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzBfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgbXR1Ml8xX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gLTB4MTAwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8xX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZlNDM4MCwKLQkJLmVuZAk9IDB4ZmZmZTQzOTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxNjQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgbXR1Ml8yX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHg4MCwKLQkudGltZXJfYml0ID0gMiwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZTQwMDAsCi0JCS5lbmQJPSAweGZmZmU0MDBhLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTgwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXR1Ml8yX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfbXR1MiIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbXR1Ml8yX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtdHUyXzJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdHUyXzJfcmVzb3VyY2VzKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1tdHUycyIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IG10dTJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdHUyX3Jlc291cmNlcyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MjA2X2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMzY0LDExICsyNTYsOCBAQAogCSZzY2lmMV9kZXZpY2UsCiAJJnNjaWYyX2RldmljZSwKIAkmc2NpZjNfZGV2aWNlLAotCSZjbXQwX2RldmljZSwKLQkmY210MV9kZXZpY2UsCi0JJm10dTJfMF9kZXZpY2UsCi0JJm10dTJfMV9kZXZpY2UsCi0JJm10dTJfMl9kZXZpY2UsCisJJmNtdF9kZXZpY2UsCisJJm10dTJfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3MjA2X2RldmljZXNfc2V0dXAodm9pZCkKQEAgLTM4OCwxMSArMjc3LDggQEAKIAkmc2NpZjFfZGV2aWNlLAogCSZzY2lmMl9kZXZpY2UsCiAJJnNjaWYzX2RldmljZSwKLQkmY210MF9kZXZpY2UsCi0JJmNtdDFfZGV2aWNlLAotCSZtdHUyXzBfZGV2aWNlLAotCSZtdHUyXzFfZGV2aWNlLAotCSZtdHUyXzJfZGV2aWNlLAorCSZjbXRfZGV2aWNlLAorCSZtdHUyX2RldmljZSwKIH07CiAKICNkZWZpbmUgU1RCQ1IzIDB4ZmZmZTA0MDgKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzI2NC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjY0LmMKaW5kZXggYWQ1YjBmNC4uNjA4MTQ2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjY0LmMKQEAgLTQzMywxMjUgKzQzMywzNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwMiwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDAsIC8qIGRpc2FibGVkIGR1ZSB0byBjb2RlIGdlbmVyYXRpb24gaXNzdWVzICovCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2hhbm5lbHNfbWFzayA9IDMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJDTVQwIiwKLQkJLnN0YXJ0CT0gMHhmZmZlYzAwMiwKLQkJLmVuZAk9IDB4ZmZmZWMwMDcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxNzUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGZmZmVjMDAwLCAweDEwKSwKKwlERUZJTkVfUkVTX0lSUSgxNzUpLAorCURFRklORV9SRVNfSVJRKDE3NiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWNtdC0xNiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MF9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKIAl9LAotCS5yZXNvdXJjZQk9IGNtdDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiQ01UMSIsCi0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwOCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDAsIC8qIGRpc2FibGVkIGR1ZSB0byBjb2RlIGdlbmVyYXRpb24gaXNzdWVzICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZmZlNDAwMCwgMHg0MDApLAorCURFRklORV9SRVNfSVJRX05BTUVEKDE3OSwgInRnaTBhIiksCisJREVGSU5FX1JFU19JUlFfTkFNRUQoMTg2LCAidGdpMWEiKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gIkNNVDEiLAotCQkuc3RhcnQJPSAweGZmZmVjMDA4LAotCQkuZW5kCT0gMHhmZmZlYzAwZCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDE3NiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNtdDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBtdHUyXzBfcGxhdGZvcm1fZGF0YSA9IHsKLQkubmFtZSA9ICJNVFUyXzAiLAotCS5jaGFubmVsX29mZnNldCA9IC0weDgwLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8wX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUJPSAiTVRVMl8wIiwKLQkJLnN0YXJ0CT0gMHhmZmZlNDMwMCwKLQkJLmVuZAk9IDB4ZmZmZTQzMjYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxNzksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzBfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgbXR1Ml8xX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiTVRVMl8xIiwKLQkuY2hhbm5lbF9vZmZzZXQgPSAtMHgxMDAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdHUyXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJNVFUyXzEiLAotCQkuc3RhcnQJPSAweGZmZmU0MzgwLAotCQkuZW5kCT0gMHhmZmZlNDM5MCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDE4NiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG10dTJfMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX210dTIiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm10dTJfMV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbXR1Ml8xX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml8xX3Jlc291cmNlcyksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtbXR1MiIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IG10dTJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdHUyX3Jlc291cmNlcyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTYyMCwxMCArNTMyLDggQEAKIAkmc2NpZjVfZGV2aWNlLAogCSZzY2lmNl9kZXZpY2UsCiAJJnNjaWY3X2RldmljZSwKLQkmY210MF9kZXZpY2UsCi0JJmNtdDFfZGV2aWNlLAotCSZtdHUyXzBfZGV2aWNlLAotCSZtdHUyXzFfZGV2aWNlLAorCSZjbXRfZGV2aWNlLAorCSZtdHUyX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmcjhhNjY1OTdfdXNiX2hvc3RfZGV2aWNlLAogfTsKQEAgLTY0OSwxMCArNTU5LDggQEAKIAkmc2NpZjVfZGV2aWNlLAogCSZzY2lmNl9kZXZpY2UsCiAJJnNjaWY3X2RldmljZSwKLQkmY210MF9kZXZpY2UsCi0JJmNtdDFfZGV2aWNlLAotCSZtdHUyXzBfZGV2aWNlLAotCSZtdHUyXzFfZGV2aWNlLAorCSZjbXRfZGV2aWNlLAorCSZtdHUyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyNjkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzI2OS5jCmluZGV4IDM5OTUxMTkuLjE2Y2U1YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzI2OS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzI2OS5jCkBAIC00NTUsMTE4ICs0NTUsMzcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDIsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAwLCAvKiBkaXNhYmxlZCBkdWUgdG8gY29kZSBnZW5lcmF0aW9uIGlzc3VlcyAqLworc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWxzX21hc2sgPSAzLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZlYzAwMiwKLQkJLmVuZAk9IDB4ZmZmZWMwMDcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxODgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweGZmZmVjMDAwLCAweDEwKSwKKwlERUZJTkVfUkVTX0lSUSgxODgpLAorCURFRklORV9SRVNfSVJRKDE4OSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWNtdC0xNiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MF9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKIAl9LAotCS5yZXNvdXJjZQk9IGNtdDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwOCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDAsIC8qIGRpc2FibGVkIGR1ZSB0byBjb2RlIGdlbmVyYXRpb24gaXNzdWVzICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG10dTJfcmVzb3VyY2VzW10gPSB7CisJREVGSU5FX1JFU19NRU0oMHhmZmZlNDAwMCwgMHg0MDApLAorCURFRklORV9SRVNfSVJRX05BTUVEKDE5MiwgInRnaTBhIiksCisJREVGSU5FX1JFU19JUlFfTkFNRUQoMjAzLCAidGdpMWEiKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZWMwMDgsCi0JCS5lbmQJPSAweGZmZmVjMDBkLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTg5LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY210MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIG10dTJfMF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IC0weDgwLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8wX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZlNDMwMCwKLQkJLmVuZAk9IDB4ZmZmZTQzMjYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAxOTIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzBfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgbXR1Ml8xX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gLTB4MTAwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXR1Ml8xX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZlNDM4MCwKLQkJLmVuZAk9IDB4ZmZmZTQzOTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAyMDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdHUyXzFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9tdHUyIiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtdHUyXzFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG10dTJfMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG10dTJfMV9yZXNvdXJjZXMpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXR1Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLW10dTIiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBtdHUyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXR1Ml9yZXNvdXJjZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC02MjksMTAgKzU0OCw4IEBACiAJJnNjaWY1X2RldmljZSwKIAkmc2NpZjZfZGV2aWNlLAogCSZzY2lmN19kZXZpY2UsCi0JJmNtdDBfZGV2aWNlLAotCSZjbXQxX2RldmljZSwKLQkmbXR1Ml8wX2RldmljZSwKLQkmbXR1Ml8xX2RldmljZSwKKwkmY210X2RldmljZSwKKwkmbXR1Ml9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnI4YTY2NTk3X3VzYl9ob3N0X2RldmljZSwKIH07CkBAIC02NTgsMTAgKzU3NSw4IEBACiAJJnNjaWY1X2RldmljZSwKIAkmc2NpZjZfZGV2aWNlLAogCSZzY2lmN19kZXZpY2UsCi0JJmNtdDBfZGV2aWNlLAotCSZjbXQxX2RldmljZSwKLQkmbXR1Ml8wX2RldmljZSwKLQkmbXR1Ml8xX2RldmljZSwKKwkmY210X2RldmljZSwKKwkmbXR1Ml9kZXZpY2UsCiB9OwogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKaW5kZXggYzc2YjI1NC4uNmE3MmZkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCkBAIC0xNDMsMjUgKzE0MywxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDIsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZmZlOTQsCi0JCS5lbmQJPSAweGZmZmZmZTlmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmZmZmU5MCwgMHgyYyksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQwMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDQwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11LXNoMyIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMTcwLDY3ICsxNjMsMTAgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4ZSwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZmZmVhMCwKLQkJLmVuZAk9IDB4ZmZmZmZlYWIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYSwKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZmZlYWMsCi0JCS5lbmQJPSAweGZmZmZmZWJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcwNV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiB9OwogCkBAIC0yNDUsOCArMTgxLDYgQEAKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiB9OwogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKaW5kZXggZmYxNDY1Yy4uOTEzOWQxNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCkBAIC0xODUsMjUgKzE4NSwxOCBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDAyLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZmZmZTk0LAotCQkuZW5kCT0gMHhmZmZmZmU5ZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZmZmZlOTAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdS1zaDMiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTIxMiw2MSArMjA1LDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4ZSwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmZmZmVhMCwKLQkJLmVuZAk9IDB4ZmZmZmZlYWIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYSwKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZmZmZlYWMsCi0JCS5lbmQJPSAweGZmZmZmZWJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcweF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXApAQCAtMjc5LDggKzIxNyw2IEBACiAJJnNjaWYyX2RldmljZSwKICNlbmRpZgogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogfTsKIApAQCAtMzAzLDggKzIzOSw2IEBACiAJJnNjaWYyX2RldmljZSwKICNlbmRpZgogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogfTsKIAogdm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCmluZGV4IGUyY2U5MzYuLmU5ZWQzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYwpAQCAtMTQyLDI1ICsxNDIsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDAyLAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGE0MTJmZTk0LAotCQkuZW5kCT0gMHhhNDEyZmU5ZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4YTQxMmZlOTAsIDB4MjgpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdS1zaDMiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTE2OSw2NyArMTYyLDEwIEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTBfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweGUsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4YTQxMmZlYTAsCi0JCS5lbmQJPSAweGE0MTJmZWFiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWEsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGE0MTJmZWFjLAotCQkuZW5kCT0gMHhhNDEyZmViNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0NDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNjaWYwX2RldmljZSwKIAkmc2NpZjFfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogfTsKIApAQCAtMjQ0LDggKzE4MCw2IEBACiAJJnNjaWYwX2RldmljZSwKIAkmc2NpZjFfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogfTsKIAogdm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCmluZGV4IDFkNTcyOWQuLjg0ZGY4NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwpAQCAtMTUyLDE2MyArMTUyLDM4IEBACiAJLnJlc291cmNlCT0gdXNiZl9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsc19tYXNrID0gMHgxZiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDQ0YTAwMTAsCi0JCS5lbmQJPSAweDA0NGEwMDFiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGYwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlERUZJTkVfUkVTX01FTSgweDA0NGEwMDAwLCAweDYwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZjAwKSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWNtdC0zMiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MF9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKIAl9LAotCS5yZXNvdXJjZQk9IGNtdDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgyMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDQ0YTAwMjAsCi0JCS5lbmQJPSAweDA0NGEwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGYwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjbXQxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBjbXQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MzAsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweDA0NGEwMDMwLAotCQkuZW5kCT0gMHgwNDRhMDAzYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHhmMDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX2NtdCIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY210Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDNfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDQwLAotCS50aW1lcl9iaXQgPSAzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwNDRhMDA0MCwKLQkJLmVuZAk9IDB4MDQ0YTAwNGIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZjAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdDNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAotCS5pZAkJPSAzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDNfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNtdDNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQ0X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHg1MCwKLQkudGltZXJfYml0ID0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDQ0YTAwNTAsCi0JCS5lbmQJPSAweDA0NGEwMDViLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGYwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQ0X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKLQkuaWQJCT0gNCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjbXQ0X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBjbXQ0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210NF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDIsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4YTQxMmZlOTQsCi0JCS5lbmQJPSAweGE0MTJmZTlmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhhNDEyZmU5MCwgMHgyOCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQwMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDQwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11LXNoMyIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMzE3LDcyICsxOTIsMTEgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4ZSwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhhNDEyZmVhMCwKLQkJLmVuZAk9IDB4YTQxMmZlYWIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYSwKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4YTQxMmZlYWMsCi0JCS5lbmQJPSAweGE0MTJmZWI1LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCi0JJmNtdDBfZGV2aWNlLAotCSZjbXQxX2RldmljZSwKLQkmY210Ml9kZXZpY2UsCi0JJmNtdDNfZGV2aWNlLAotCSZjbXQ0X2RldmljZSwKKwkmY210X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmdXNiX29oY2lfZGV2aWNlLAogCSZ1c2JmX2RldmljZSwKQEAgLTM5OCwxNCArMjEyLDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjBfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNjaWYwX2RldmljZSwKIAkmc2NpZjFfZGV2aWNlLAotCSZjbXQwX2RldmljZSwKLQkmY210MV9kZXZpY2UsCi0JJmNtdDJfZGV2aWNlLAotCSZjbXQzX2RldmljZSwKLQkmY210NF9kZXZpY2UsCisJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiB9OwogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwppbmRleCBhOGJkNzc4Li5lN2E3YjNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwpAQCAtNDEsMjUgKzQxLDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAwOCwKLQkJLmVuZAk9IDB4ZmZkODAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDgwMDAwLCAweDMwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDAwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQyMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0NDApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTY4LDY2ICs2MSw5IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTBfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDE0LAotCQkuZW5kCT0gMHhmZmQ4MDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAyMCwKLQkJLmVuZAk9IDB4ZmZkODAwMmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDQwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTJfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUyX3Jlc291cmNlcyksCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g0MjAyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzY2lmMF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDQyMDJfZGV2aWNlc19zZXR1cCh2b2lkKQpAQCAtMTQwLDggKzc2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDQyMDJfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNjaWYwX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBhNDQ3YTI0Li41ZjA4YzU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTgyLDI1ICs4MiwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMDgsCi0JCS5lbmQJPSAweGZmZDgwMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ4MDAwMCwgMHgzMCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQwMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDQwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwX3BsYXRmb3JtX2RhdGEsCkBAIC0xMDksMjYgKzEwMiwyMyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwX3Jlc291cmNlcyksCiB9OwogCisvKiBTSDc3NTBSLCBTSDc3NTEgYW5kIFNINzc1MVIgYWxsIGhhdmUgdHdvIGV4dHJhIHRpbWVyIGNoYW5uZWxzICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCisKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSAzLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAxNCwKLQkJLmVuZAk9IDB4ZmZkODAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZlMTAwMDAwLCAweDIwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4YjAwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweGI4MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLApAQCAtMTM3LDEwNCArMTI3LDE1IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTFfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAyMCwKLQkJLmVuZAk9IDB4ZmZkODAwMmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDQwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTJfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUyX3Jlc291cmNlcyksCi19OwotCi0vKiBTSDc3NTBSLCBTSDc3NTEgYW5kIFNINzc1MVIgYWxsIGhhdmUgdHdvIGV4dHJhIHRpbWVyIGNoYW5uZWxzICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgXAotCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAotCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCi0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTNfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZTEwMDAwOCwKLQkJLmVuZAk9IDB4ZmUxMDAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4YjAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTNfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU0X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmUxMDAwMTQsCi0JCS5lbmQJPSAweGZlMTAwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGI4MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU0X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU0X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NF9yZXNvdXJjZXMpLAotfTsKLQogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnJ0Y19kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKKwkmdG11MV9kZXZpY2UsCiAjZW5kaWYKIH07CiAKQEAgLTI1NCwxMyArMTU1LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NTBfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKKwkmdG11MV9kZXZpY2UsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDFhYmQ5ZmIuLjk3M2I3MzZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKQEAgLTIyNywyNSArMjI3LDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAwOCwKLQkJLmVuZAk9IDB4ZmZkODAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDgwMDAwLCAweDMwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDAwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQyMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0NDApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTI1NCw2MSArMjQ3LDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMTQsCi0JCS5lbmQJPSAweGZmZDgwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDIwLAotCQkuZW5kCT0gMHhmZmQ4MDAyZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0NDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKLX07Ci0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLApAQCAtMzE2LDggKzI1NCw2IEBACiAJJnNjaWYyX2RldmljZSwKIAkmc2NpZjNfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3NzYwX2RldmljZXNfc2V0dXAodm9pZCkKQEAgLTMzMyw4ICsyNjksNiBAQAogCSZzY2lmMl9kZXZpY2UsCiAJJnNjaWYzX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jCmluZGV4IDUzNjM4ZTIuLjllZGMwNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlDTEtERVZfQ09OX0lEKCJodWRpMCIsICZtc3RwX2Nsa3NbTVNUUDAxOV0pLAogCUNMS0RFVl9DT05fSUQoInViYzAiLCAmbXN0cF9jbGtzW01TVFAwMTddKSwKIAlDTEtERVZfQ09OX0lEKCJ0bXVfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDE1XSksCi0JQ0xLREVWX0NPTl9JRCgiY210X2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxNF0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtMzIuMCIsICZtc3RwX2Nsa3NbTVNUUDAxNF0pLAogCUNMS0RFVl9DT05fSUQoInJ3ZHQwIiwgJm1zdHBfY2xrc1tNU1RQMDEzXSksCiAJQ0xLREVWX0NPTl9JRCgibWZpMCIsICZtc3RwX2Nsa3NbTVNUUDAxMV0pLAogCUNMS0RFVl9DT05fSUQoImZsY3RsMCIsICZtc3RwX2Nsa3NbTVNUUDAxMF0pLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwppbmRleCAyMmU0ODVkLi45NTViOWFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJQ0xLREVWX0NPTl9JRCgiaHVkaTAiLCAmbXN0cF9jbGtzW01TVFAwMTldKSwKIAlDTEtERVZfQ09OX0lEKCJ1YmMwIiwgJm1zdHBfY2xrc1tNU1RQMDE3XSksCiAJQ0xLREVWX0NPTl9JRCgidG11X2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxNV0pLAotCUNMS0RFVl9DT05fSUQoImNtdF9mY2siLCAmbXN0cF9jbGtzW01TVFAwMTRdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtY210LTMyLjAiLCAmbXN0cF9jbGtzW01TVFAwMTRdKSwKIAlDTEtERVZfQ09OX0lEKCJyd2R0MCIsICZtc3RwX2Nsa3NbTVNUUDAxM10pLAogCUNMS0RFVl9DT05fSUQoIm1maTAiLCAmbXN0cF9jbGtzW01TVFAwMTFdKSwKIAlDTEtERVZfQ09OX0lEKCJmbGN0bDAiLCAmbXN0cF9jbGtzW01TVFAwMTBdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKaW5kZXggYzRjYjc0MC4uOGYwN2ExYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKQEAgLTIwMywxMSArMjAzLDkgQEAKIAlDTEtERVZfQ09OX0lEKCJ1cmFtMCIsICZtc3RwX2Nsa3NbSFdCTEtfVVJBTV0pLAogCUNMS0RFVl9DT05fSUQoInh5bWVtMCIsICZtc3RwX2Nsa3NbSFdCTEtfWFlNRU1dKSwKIAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjAiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVV0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC10bXUuMCIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VXSksCiAKLQlDTEtERVZfQ09OX0lEKCJjbXRfZmNrIiwgJm1zdHBfY2xrc1tIV0JMS19DTVRdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtY210LTMyLjAiLCAmbXN0cF9jbGtzW0hXQkxLX0NNVF0pLAogCUNMS0RFVl9ERVZfSUQoInNoLXdkdC4wIiwgJm1zdHBfY2xrc1tIV0JMS19SV0RUXSksCiAJQ0xLREVWX0NPTl9JRCgiZmxjdGwwIiwgJm1zdHBfY2xrc1tIV0JMS19GTENUTF0pLAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jCmluZGV4IDM3YzQxYzcuLmNjYmNhYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlDTEtERVZfQ09OX0lEKCJzaDAiLCAmbXN0cF9jbGtzW0hXQkxLX1NIWVdBWV0pLAogCUNMS0RFVl9DT05fSUQoImh1ZGkwIiwgJm1zdHBfY2xrc1tIV0JMS19IVURJXSksCiAJQ0xLREVWX0NPTl9JRCgidWJjMCIsICZtc3RwX2Nsa3NbSFdCTEtfVUJDXSksCi0JQ0xLREVWX0NPTl9JRCgiY210X2ZjayIsICZtc3RwX2Nsa3NbSFdCTEtfQ01UXSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLWNtdC0zMi4wIiwgJm1zdHBfY2xrc1tIV0JMS19DTVRdKSwKIAlDTEtERVZfREVWX0lEKCJzaC13ZHQuMCIsICZtc3RwX2Nsa3NbSFdCTEtfUldEVF0pLAogCUNMS0RFVl9ERVZfSUQoInNoLWRtYS1lbmdpbmUuMSIsICZtc3RwX2Nsa3NbSFdCTEtfRE1BQzFdKSwKIAlDTEtERVZfQ09OX0lEKCJmbGN0bDAiLCAmbXN0cF9jbGtzW0hXQkxLX0ZMQ1RMXSksCkBAIC0yNjQsMTIgKzI2NCw4IEBACiAJQ0xLREVWX0NPTl9JRCgidmV1MCIsICZtc3RwX2Nsa3NbSFdCTEtfVkVVMkgwXSksCiAJQ0xLREVWX0NPTl9JRCgidnB1MCIsICZtc3RwX2Nsa3NbSFdCTEtfVlBVXSksCiAKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tIV0JMS19UTVUwXSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMSIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VMF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTBdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4zIiwgJm1zdHBfY2xrc1tIV0JMS19UTVUxXSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNCIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VMV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjUiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTFdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTBdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjEiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTFdKSwKIAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjAiLCAmbXN0cF9jbGtzW0hXQkxLX1NDSUYwXSksCiAJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjFdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKaW5kZXggMDEyOGFmMy4uZjU3OWRkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKQEAgLTMwNCwxNyArMzA0LDEzIEBACiAJQ0xLREVWX0NPTl9JRCgiaHVkaTAiLCAmbXN0cF9jbGtzW0hXQkxLX0hVREldKSwKIAlDTEtERVZfQ09OX0lEKCJ1YmMwIiwgJm1zdHBfY2xrc1tIV0JMS19VQkNdKSwKIAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjAiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTBdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4xIiwgJm1zdHBfY2xrc1tIV0JMS19UTVUwXSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMiIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VMF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjMiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTFdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTBdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjEiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTFdKSwKIAotCUNMS0RFVl9DT05fSUQoImNtdF9mY2siLCAmbXN0cF9jbGtzW0hXQkxLX0NNVF0pLAorCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtMTYuMCIsICZtc3RwX2Nsa3NbSFdCTEtfQ01UXSksCiAJQ0xLREVWX0RFVl9JRCgic2gtd2R0LjAiLCAmbXN0cF9jbGtzW0hXQkxLX1JXRFRdKSwKIAlDTEtERVZfREVWX0lEKCJzaC1kbWEtZW5naW5lLjEiLCAmbXN0cF9jbGtzW0hXQkxLX0RNQUMxXSksCiAKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS40IiwgJm1zdHBfY2xrc1tIV0JMS19UTVUxXSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNSIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VMV0pLAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tIV0JMS19TQ0lGMF0pLAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xIiwgJm1zdHBfY2xrc1tIV0JMS19TQ0lGMV0pLAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4yIiwgJm1zdHBfY2xrc1tIV0JMS19TQ0lGMl0pLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzM0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MzQuYwppbmRleCBlZDk1MDE1Li4xZmRmMWVlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MzQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MzQuYwpAQCAtMjAxLDE1ICsyMDEsOSBAQAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjQiLCAmbXN0cF9jbGtzW01TVFAwMjJdKSwKIAlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMDIxXSksCiAJQ0xLREVWX0NPTl9JRCgiaHNjaWYiLCAmbXN0cF9jbGtzW01TVFAwMTldKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMDE2XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDAxNl0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW01TVFAwMTZdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4zIiwgJm1zdHBfY2xrc1tNU1RQMDE1XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNCIsICZtc3RwX2Nsa3NbTVNUUDAxNV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjUiLCAmbXN0cF9jbGtzW01TVFAwMTVdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS42IiwgJm1zdHBfY2xrc1tNU1RQMDE0XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNyIsICZtc3RwX2Nsa3NbTVNUUDAxNF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjgiLCAmbXN0cF9jbGtzW01TVFAwMTRdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW01TVFAwMTZdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMTVdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjIiLCAmbXN0cF9jbGtzW01TVFAwMTRdKSwKIAlDTEtERVZfQ09OX0lEKCJzc2kwIiwgJm1zdHBfY2xrc1tNU1RQMDEyXSksCiAJQ0xLREVWX0NPTl9JRCgic3NpMSIsICZtc3RwX2Nsa3NbTVNUUDAxMV0pLAogCUNMS0RFVl9DT05fSUQoInNzaTIiLCAmbXN0cF9jbGtzW01TVFAwMTBdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKaW5kZXggNWMwZTNjMy4uOWEyOGZkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKQEAgLTEyMyw4ICsxMjMsOCBAQAogCUNMS0RFVl9DT05fSUQoInJpaWM2IiwgJm1zdHBfY2xrc1tNU1RQMDAwXSksCiAJQ0xLREVWX0NPTl9JRCgicmlpYzciLCAmbXN0cF9jbGtzW01TVFAwMDBdKSwKIAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjAiLCAmbXN0cF9jbGtzW01TVFAxMTNdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4xIiwgJm1zdHBfY2xrc1tNU1RQMTE0XSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLXRtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTEzXSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLXRtdS4xIiwgJm1zdHBfY2xrc1tNU1RQMTE0XSksCiAJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDExMl0pLAogCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjEiLCAmbXN0cF9jbGtzW01TVFAxMTFdKSwKIAlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTEwXSksCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCmluZGV4IDFjODM3ODguLjE3ZDBlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCkBAIC0xNDYsMTIgKzE0Niw4IEBACiAJQ0xLREVWX0NPTl9JRCgibW1jaWZfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDEzXSksCiAJQ0xLREVWX0NPTl9JRCgiZmxjdGxfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDEyXSksCiAKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDAwOF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4zIiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNCIsICZtc3RwX2Nsa3NbTVNUUDAwOV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjUiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKIAogCUNMS0RFVl9DT05fSUQoInNpb2ZfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDAzXSksCiAJQ0xLREVWX0NPTl9JRCgiaHNwaV9mY2siLCAmbXN0cF9jbGtzW01TVFAwMDJdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKaW5kZXggOGJiYTZmMS4uYmVjMmE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTE1NSwxOCArMTU1LDEwIEBACiAJQ0xLREVWX0NPTl9JRCgiaTJjMV9mY2siLCAmbXN0cF9jbGtzW01TVFAwMTVdKSwKIAlDTEtERVZfQ09OX0lEKCJpMmMwX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxNF0pLAogCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDAwOF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4yIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMyIsICZtc3RwX2Nsa3NbTVNUUDAwOV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjQiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS41IiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNiIsICZtc3RwX2Nsa3NbTVNUUDAxMF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjciLCAmbXN0cF9jbGtzW01TVFAwMTBdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS44IiwgJm1zdHBfY2xrc1tNU1RQMDEwXSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuOSIsICZtc3RwX2Nsa3NbTVNUUDAxMV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEwIiwgJm1zdHBfY2xrc1tNU1RQMDExXSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMTEiLCAmbXN0cF9jbGtzW01TVFAwMTFdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjAiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjIiLCAmbXN0cF9jbGtzW01TVFAwMTBdKSwKKwlDTEtERVZfSUNLX0lEKCJmY2siLCAic2gtdG11LjMiLCAmbXN0cF9jbGtzW01TVFAwMTFdKSwKIAogCUNMS0RFVl9DT05fSUQoInNkaWYxX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAwNV0pLAogCUNMS0RFVl9DT05fSUQoInNkaWYwX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAwNF0pLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCmluZGV4IGE5NDIyZGEuLjlhNDlhNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKQEAgLTEyNCwxMiArMTI0LDggQEAKIAlDTEtERVZfQ09OX0lEKCJmZTFfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDAxXSksCiAJQ0xLREVWX0NPTl9JRCgiZmUwX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAwMF0pLAogCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDAwOF0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4yIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCi0JQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMyIsICZtc3RwX2Nsa3NbTVNUUDAwOV0pLAotCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjQiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKLQlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS41IiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLXRtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCisJQ0xLREVWX0lDS19JRCgiZmNrIiwgInNoLXRtdS4xIiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCiAKIAlDTEtERVZfQ09OX0lEKCJodWRpX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDExOV0pLAogCUNMS0RFVl9DT05fSUQoImRtYWNfMTFfNl9mY2siLCAmbXN0cF9jbGtzW01TVFAxMDVdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKaW5kZXggMjQ1ZDE5Mi4uY2ViM2RlZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKQEAgLTIyOCwyNiArMjI4LDE2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAotCS50aW1lcl9iaXQgPSA1LAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gMHgyMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKLQkJLmVuZAk9IDB4MDQ0YTAwNmIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZjAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweDA0NGEwMDAwLCAweDcwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZjAwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5uYW1lCQk9ICJzaC1jbXQtMzIiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLApAQCAtMjU3LDI1ICsyNDcsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDA4LAotCQkuZW5kCT0gMHhmZmQ4MDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMjg0LDYxICsyNjcsNiBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUwX3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAxNCwKLQkJLmVuZAk9IDB4ZmZkODAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMjAsCi0JCS5lbmQJPSAweGZmZDgwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM0M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCkBAIC0zNDYsOCArMjc0LDYgQEAKIAkmc2NpZjNfZGV2aWNlLAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogCSZpaWMwX2RldmljZSwKIAkmaWljMV9kZXZpY2UsCiAJJnZwdV9kZXZpY2UsCkBAIC0zNzMsOCArMjk5LDYgQEAKIAkmc2NpZjNfZGV2aWNlLAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAogfTsKIAogdm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKaW5kZXggNmY1NmNiZC4uZjc1ZjY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKQEAgLTE3NiwyNiArMTc2LDE2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAotCS50aW1lcl9iaXQgPSA1LAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gMHgyMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKLQkJLmVuZAk9IDB4MDQ0YTAwNmIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZjAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweDA0NGEwMDAwLCAweDcwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZjAwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5uYW1lCQk9ICJzaC1jbXQtMzIiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLApAQCAtMjA1LDI1ICsxOTUsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDA4LAotCQkuZW5kCT0gMHhmZmQ4MDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDE2LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMjMyLDY3ICsyMTUsMTAgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMTQsCi0JCS5lbmQJPSAweGZmZDgwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDIwLAotCQkuZW5kCT0gMHhmZmQ4MDAyYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0NDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNjZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNjaWYwX2RldmljZSwKIAkmY210X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKIAkmaWljX2RldmljZSwKIAkmdXNiX2hvc3RfZGV2aWNlLAogCSZ2cHVfZGV2aWNlLApAQCAtMzE1LDggKzI0MSw2IEBACiAJJnNjaWYwX2RldmljZSwKIAkmY210X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCmluZGV4IDVhOTRlZmMuLjU3ZjgzYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCkBAIC00MTMsMjYgKzQxMywxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKLQkudGltZXJfYml0ID0gNSwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKKwkuY2hhbm5lbHNfbWFzayA9IDB4MjAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDQ0YTAwNjAsCi0JCS5lbmQJPSAweDA0NGEwMDZiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGYwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHgwNDRhMDAwMCwgMHg3MCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweGYwMCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKKwkubmFtZQkJPSAic2gtY210LTMyIiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKQEAgLTQ0MiwyNSArNDMyLDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAwOCwKLQkJLmVuZAk9IDB4ZmZkODAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDgwMDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDAwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQyMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0NDApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTQ2OSw2MSArNDUyLDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMTQsCi0JCS5lbmQJPSAweGZmZDgwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDIwLAotCQkuZW5kCT0gMHhmZmQ4MDAyYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IDE4LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2l1X3BsYXRmb3JtIHNpdV9wbGF0Zm9ybV9kYXRhID0gewogCS5kbWFfc2xhdmVfdHhfYQk9IFNIRE1BX1NMQVZFX1NJVUFfVFgsCiAJLmRtYV9zbGF2ZV9yeF9hCT0gU0hETUFfU0xBVkVfU0lVQV9SWCwKQEAgLTU1OSw4ICs0ODcsNiBAQAogCSZzY2lmMl9kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnVzYmZfZGV2aWNlLAogCSZpaWNfZGV2aWNlLApAQCAtNTg4LDggKzUxNCw2IEBACiAJJnNjaWYyX2RldmljZSwKIAkmY210X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCmluZGV4IDNjNWViMDkuLjM1MzNiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCkBAIC0yNDUsMjYgKzI0NSwxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKLQkudGltZXJfYml0ID0gNSwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKKwkuY2hhbm5lbHNfbWFzayA9IDB4MjAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDQ0YTAwNjAsCi0JCS5lbmQJPSAweDA0NGEwMDZiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGYwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHgwNDRhMDAwMCwgMHg3MCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweGYwMCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfY210IiwKKwkubmFtZQkJPSAic2gtY210LTMyIiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKQEAgLTI3NCwyNSArMjY0LDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAwOCwKLQkJLmVuZAk9IDB4ZmZkODAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDgwMDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDAwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQyMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0NDApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTMwMiwyNSArMjg1LDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMTQsCi0JCS5lbmQJPSAweGZmZDgwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ5MDAwMCwgMHgyYyksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDkyMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg5NDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4OTYwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMSwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxX3BsYXRmb3JtX2RhdGEsCkBAIC0zMjksMTE0ICszMDUsNiBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMjAsCi0JCS5lbmQJPSAweGZmZDgwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11M19wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDkwMDA4LAotCQkuZW5kCT0gMHhmZmQ5MDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg5MjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11M19wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ5MDAxNCwKLQkJLmVuZAk9IDB4ZmZkOTAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4OTQwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA0LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTRfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU1X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkOTAwMjAsCi0JCS5lbmQJPSAweGZmZDkwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDkyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU1X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU1X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NV9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweGE0NjVmZWMwLApAQCAtNTI3LDEwICszOTUsNiBAQAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZpaWNfZGV2aWNlLAogCSZzaDc3MjNfdXNiX2hvc3RfZGV2aWNlLApAQCAtNTYwLDEwICs0MjQsNiBAQAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAogfTsKIAogdm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKaW5kZXggNjBlYmJjNi4uYjllODRiMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKQEAgLTY0OCwyNiArNjQ4LDE2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAotCS50aW1lcl9iaXQgPSA1LAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gMHgyMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKLQkJLmVuZAk9IDB4MDQ0YTAwNmIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZjAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweDA0NGEwMDAwLCAweDcwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZjAwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5uYW1lCQk9ICJzaC1jbXQtMzIiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLApAQCAtNjc3LDI1ICs2NjcsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDA4LAotCQkuZW5kCT0gMHhmZmQ4MDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtNzA1LDI1ICs2ODgsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAxNCwKLQkJLmVuZAk9IDB4ZmZkODAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDkwMDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4OTIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDk0MCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg5NjApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAxLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKQEAgLTczMiwxMTUgKzcwOCw2IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTFfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAyMCwKLQkJLmVuZAk9IDB4ZmZkODAwMmIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDQwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTJfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUyX3Jlc291cmNlcyksCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTNfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ5MDAwOCwKLQkJLmVuZAk9IDB4ZmZkOTAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4OTIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTNfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU0X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkOTAwMTQsCi0JCS5lbmQJPSAweGZmZDkwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDk0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU0X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU0X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11NV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDkwMDIwLAotCQkuZW5kCT0gMHhmZmQ5MDAyYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg5MjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11NV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDUsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11NV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11NV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTVfcmVzb3VyY2VzKSwKLX07Ci0KIC8qIEpQVSAqLwogc3RhdGljIHN0cnVjdCB1aW9faW5mbyBqcHVfcGxhdGZvcm1fZGF0YSA9IHsKIAkubmFtZSA9ICJKUFUiLApAQCAtOTM4LDEwICs4MDUsNiBAQAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAogCSZkbWEwX2RldmljZSwKIAkmZG1hMV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCkBAIC05ODEsMTAgKzg0NCw2IEBACiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKLQkmdG11NV9kZXZpY2UsCiB9OwogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzM0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MzQuYwppbmRleCBkYWQ0ZWQxLi5mNjE3YmNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MzQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MzQuYwpAQCAtMjAwLDI1ICsyMDAsMTggQEAKIAogLyogVE1VICovCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhGRkQ4MDAwOCwKLQkJLmVuZAk9IDB4RkZEODAwMTQgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ4MDAwMCwgMHgzMCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQwMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDQwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTIyOCwyNiArMjIxLDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUxX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLQkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4RkZEODAwMTQsCi0JCS5lbmQJPSAweEZGRDgwMDIwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODEwMDAsIDB4MzApLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0ODApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NGEwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDRjMCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQkJPSAxLAorCS5uYW1lCQk9ICJzaC10bXUiLAorCS5pZAkJPSAxLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKIAl9LApAQCAtMjU2LDI1ICsyNDIsMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4RkZEODAwMjAsCi0JCS5lbmQJPSAweEZGRDgwMDMwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0NDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODIwMDAsIDB4MzApLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg1MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NTIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDU0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQkJPSAyLAorCS5uYW1lCQk9ICJzaC10bXUiLAorCS5pZAkJPSAyLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTJfcGxhdGZvcm1fZGF0YSwKIAl9LApAQCAtMjgyLDE2OSArMjYyLDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAogfTsKIAotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUzX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4RkZEODEwMDgsCi0JCS5lbmQJPSAweEZGRDgxMDE0IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0ODApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQkJPSAzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTNfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU0X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4RkZEODEwMTQsCi0JCS5lbmQJPSAweEZGRDgxMDIwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0QTApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11NF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQkJPSA0LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTRfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU1X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4RkZEODEwMjAsCi0JCS5lbmQJPSAweEZGRDgxMDMwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0QzApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11NV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQkJPSA1LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTVfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTVfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU1X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU2X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHg0LAotCS50aW1lcl9iaXQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU2X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhGRkQ4MjAwOCwKLQkJLmVuZAk9IDB4RkZEODIwMTQgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDUwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU2X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCQk9IDYsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Nl9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Nl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTZfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTdfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhGRkQ4MjAxNCwKLQkJLmVuZAk9IDB4RkZEODIwMjAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDUyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU3X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCQk9IDcsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11N19wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11N19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTdfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdThfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU4X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhGRkQ4MjAyMCwKLQkJLmVuZAk9IDB4RkZEODIwMzAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDU0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCQk9IDgsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11OF9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11OF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdThfcmVzb3VyY2VzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MzRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNjaWYwX2RldmljZSwKIAkmc2NpZjFfZGV2aWNlLApAQCAtNDU1LDEyICsyNzIsNiBAQAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAotCSZ0bXU2X2RldmljZSwKLQkmdG11N19kZXZpY2UsCi0JJnRtdThfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogfTsKIApAQCAtNDc0LDEyICsyODUsNiBAQAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAotCSZ0bXU2X2RldmljZSwKLQkmdG11N19kZXZpY2UsCi0JJnRtdThfZGV2aWNlLAogfTsKIAogdm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc1Ny5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKaW5kZXggZTQzZTVkYi4uN2IyNGVjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKQEAgLTg3LDI1ICs4NywxNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gMywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmU0MzAwMDgsCi0JCS5lbmQJPSAweGZlNDMwMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDU4MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZTQzMDAwMCwgMHgyMCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDU4MCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg1YTApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTExNCwzNCArMTA2LDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MF9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmU0MzAwMTQsCi0JCS5lbmQJPSAweGZlNDMwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDVhMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gMHhmZTAwMjAwMCwKQEAgLTc4Miw3ICs3NDYsNiBAQAogCSZzY2lmM19kZXZpY2UsCiAJJnNjaWY0X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCi0JJnRtdTFfZGV2aWNlLAogCSZkbWEwX2RldmljZSwKIAkmZG1hMV9kZXZpY2UsCiAJJmRtYTJfZGV2aWNlLApAQCAtODA2LDcgKzc2OSw2IEBACiAJJnNjaWYzX2RldmljZSwKIAkmc2NpZjRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKLQkmdG11MV9kZXZpY2UsCiB9OwogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwppbmRleCA1ZWViYmQ3Li41YTQ3ZDY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwpAQCAtMTU4LDI1ICsxNTgsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDA4LAotCQkuZW5kCT0gMHhmZmQ4MDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg1ODApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODAwMDAsIDB4MzApLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg1ODApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NWEwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDVjMCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMTg2LDI1ICsxNzksMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAxNCwKLQkJLmVuZAk9IDB4ZmZkODAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NWEwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDg4MDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZTAwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweGUyMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHhlNDApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAxLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKQEAgLTIxMywxMjQgKzE5OSwxMiBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMjAsCi0JCS5lbmQJPSAweGZmZDgwMDJmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDVjMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11M19wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDg4MDA4LAotCQkuZW5kCT0gMHhmZmQ4ODAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHhlMDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11M19wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4ODAxNCwKLQkJLmVuZAk9IDB4ZmZkODgwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZTIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA0LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTRfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU1X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODgwMjAsCi0JCS5lbmQJPSAweGZmZDg4MDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGU0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU1X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU1X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NV9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc2M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCiAJJnNjaWYyX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKLQkmdG11M19kZXZpY2UsCi0JJnRtdTRfZGV2aWNlLAotCSZ0bXU1X2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmdXNiX29oY2lfZGV2aWNlLAogCSZ1c2JmX2RldmljZSwKQEAgLTM0OSwxMCArMjIzLDYgQEAKIAkmc2NpZjJfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAogfTsKIAogdm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKaW5kZXggZTFiYThjYjcuLmU5YjUzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCkBAIC0yMjYsMjUgKzIyNiwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMDgsCi0JCS5lbmQJPSAweGZmZDgwMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ4MDAwMCwgMHgzMCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQwMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDQwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwX3BsYXRmb3JtX2RhdGEsCkBAIC0yNTQsMjUgKzI0NywxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDE0LAotCQkuZW5kCT0gMHhmZmQ4MDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkODEwMDAsIDB4MzApLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0NjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDgwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDRhMCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLApAQCAtMjgyLDI0ICsyNjgsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMjAsCi0JCS5lbmQJPSAweGZmZDgwMDJmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ4MjAwMCwgMHgyYyksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDRjMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0ZTApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NTAwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMiwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCkBAIC0zMDgsMTY4ICsyODgsNiBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUyX3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUzX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODEwMDgsCi0JCS5lbmQJPSAweGZmZDgxMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ2MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUzX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMywKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUzX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11M19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11NF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgxMDE0LAotCQkuZW5kCT0gMHhmZmQ4MTAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0ODApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11NF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDQsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11NF9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11NF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTVfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MTAyMCwKLQkJLmVuZAk9IDB4ZmZkODEwMmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NGEwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA1LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTVfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTVfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU1X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU2X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Nl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODIwMDgsCi0JCS5lbmQJPSAweGZmZDgyMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDRjMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU2X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU2X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU2X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Nl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11N19wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTdfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgyMDE0LAotCQkuZW5kCT0gMHhmZmQ4MjAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0ZTApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDcsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11N19wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11N19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTdfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdThfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU4X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MjAyMCwKLQkJLmVuZAk9IDB4ZmZkODIwMmIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NTAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdThfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA4LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdThfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdThfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU4X3Jlc291cmNlcyksCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzcwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzY2lmMF9kZXZpY2UsCiAJJnNjaWYxX2RldmljZSwKQEAgLTQ4NCwxMiArMzAyLDYgQEAKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKLQkmdG11M19kZXZpY2UsCi0JJnRtdTRfZGV2aWNlLAotCSZ0bXU1X2RldmljZSwKLQkmdG11Nl9kZXZpY2UsCi0JJnRtdTdfZGV2aWNlLAotCSZ0bXU4X2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc3MF9kZXZpY2VzX3NldHVwKHZvaWQpCkBAIC01MTMsMTIgKzMyNSw2IEBACiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKLQkmdG11NV9kZXZpY2UsCi0JJnRtdTZfZGV2aWNlLAotCSZ0bXU3X2RldmljZSwKLQkmdG11OF9kZXZpY2UsCiB9OwogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCA2NjhlNTRiLi4zZWU3ZGQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtNjIsMjUgKzYyLDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKLQkudGltZXJfYml0ID0gMCwKLQkuY2xvY2tldmVudF9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmQ4MDAwOCwKLQkJLmVuZAk9IDB4ZmZkODAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NTgwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZDgwMDAwLCAweDMwKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NTgwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDVhMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg1YzApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTBfcGxhdGZvcm1fZGF0YSwKQEAgLTkwLDI1ICs4MywxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDE0LAotCQkuZW5kCT0gMHhmZmQ4MDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg1YTApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkYzAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHhlMDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZTIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweGU0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLApAQCAtMTE3LDExNCArMTAzLDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDIwLAotCQkuZW5kCT0gMHhmZmQ4MDAyZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg1YzApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTNfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmRjMDAwOCwKLQkJLmVuZAk9IDB4ZmZkYzAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZTAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTNfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU0X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkYzAwMTQsCi0JCS5lbmQJPSAweGZmZGMwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGUyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU0X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU0X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11NV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZGMwMDIwLAotCQkuZW5kCT0gMHhmZmRjMDAyYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHhlNDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11NV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDUsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11NV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11NV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTVfcmVzb3VyY2VzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gMHhmZmU4MDAwMCwKQEAgLTM4NiwxMCArMjY0LDYgQEAKIAkmc2NpZjFfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCi0JJnRtdTJfZGV2aWNlLAotCSZ0bXUzX2RldmljZSwKLQkmdG11NF9kZXZpY2UsCi0JJnRtdTVfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZkbWEwX2RldmljZSwKIAkmZG1hMV9kZXZpY2UsCkBAIC00MDcsMTAgKzI4MSw2IEBACiAJJnNjaWYxX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKLQkmdG11M19kZXZpY2UsCi0JJnRtdTRfZGV2aWNlLAotCSZ0bXU1X2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDRhYTY3OTEuLmM3MmQ1YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0xNTIsMjUgKzE1MiwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMDgsCi0JCS5lbmQJPSAweGZmZDgwMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDU4MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ4MDAwMCwgMHgzMCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDU4MCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg1YTApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NWMwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwX3BsYXRmb3JtX2RhdGEsCkBAIC0xODAsMjUgKzE3MywxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDE0LAotCQkuZW5kCT0gMHhmZmQ4MDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg1YTApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkYzAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHhlMDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4ZTIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweGU0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLApAQCAtMjA3LDExNCArMTkzLDYgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MV9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Ml9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDIwLAotCQkuZW5kCT0gMHhmZmQ4MDAyZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg1YzApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Ml9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTNfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmRjMDAwOCwKLQkJLmVuZAk9IDB4ZmZkYzAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4ZTAwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTNfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU0X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkYzAwMTQsCi0JCS5lbmQJPSAweGZmZGMwMDFmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweGUyMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU0X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU0X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11NV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MWMsCi0JLnRpbWVyX2JpdCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZGMwMDIwLAotCQkuZW5kCT0gMHhmZmRjMDAyYiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHhlNDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11NV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDUsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11NV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11NV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTVfcmVzb3VyY2VzKSwKLX07Ci0KIC8qIERNQSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgc2g3Nzg1X2RtYWUwX2NoYW5uZWxzW10gPSB7CiAJewpAQCAtNDYwLDEwICszMzgsNiBAQAogCSZzY2lmNV9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKLQkmdG11NV9kZXZpY2UsCiAJJmRtYTBfZGV2aWNlLAogCSZkbWExX2RldmljZSwKIH07CkBAIC00ODQsMTAgKzM1OCw2IEBACiAJJnNjaWY1X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAotCSZ0bXUyX2RldmljZSwKLQkmdG11M19kZXZpY2UsCi0JJnRtdTRfZGV2aWNlLAotCSZ0bXU1X2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHBsYXRfZWFybHlfZGV2aWNlX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCmluZGV4IDVkNjE5YTUuLjQ3OWU3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC0xNzUsMjUgKzE3NSwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMDgsCi0JCS5lbmQJPSAweGZmZDgwMDEzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQwMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmQ4MDAwMCwgMHgzMCksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQwMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MjApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDQwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUwX3BsYXRmb3JtX2RhdGEsCkBAIC0yMDMsMjUgKzE5NiwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDEsCi0JLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZDgwMDE0LAotCQkuZW5kCT0gMHhmZmQ4MDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZkYTAwMDAsIDB4MmMpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0ODApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NGEwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDRjMCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLApAQCAtMjMxLDI0ICsyMTcsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkODAwMjAsCi0JCS5lbmQJPSAweGZmZDgwMDJmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oMHhmZmRjMDAwMCwgMHgyYyksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDdhMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg3YTApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4N2EwKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKKwkubmFtZQkJPSAic2gtdG11IiwKIAkuaWQJCT0gMiwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCkBAIC0yNTgsMjQgKzIzOCwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11M19wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmRhMDAwOCwKLQkJLmVuZAk9IDB4ZmZkYTAwMTMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDgwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmZGUwMDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4N2MwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDdjMCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg3YzApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAzLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTNfcGxhdGZvcm1fZGF0YSwKQEAgLTI4NCwyMjIgKzI1OCw2IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTNfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmRhMDAxNCwKLQkJLmVuZAk9IDB4ZmZkYTAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NGEwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA0LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTRfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU1X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkYTAwMjAsCi0JCS5lbmQJPSAweGZmZGEwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDRjMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU1X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU1X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11Nl9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTZfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZGMwMDA4LAotCQkuZW5kCT0gMHhmZmRjMDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg3YTApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11Nl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDYsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11Nl9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11Nl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTZfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTdfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmRjMDAxNCwKLQkJLmVuZAk9IDB4ZmZkYzAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4N2EwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTdfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA3LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTdfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU3X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU4X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11OF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkYzAwMjAsCi0JCS5lbmQJPSAweGZmZGMwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDdhMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gOCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU4X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU4X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11OF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11OV9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTlfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZGUwMDA4LAotCQkuZW5kCT0gMHhmZmRlMDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg3YzApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11OV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDksCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11OV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11OV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTlfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTEwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKLQkudGltZXJfYml0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmZGUwMDE0LAotCQkuZW5kCT0gMHhmZmRlMDAxZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg3YzApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAxMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUxMF9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11MTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZkZTAwMjAsCi0JCS5lbmQJPSAweGZmZGUwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDdjMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUxMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDExLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTExX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUxMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTExX3Jlc291cmNlcyksCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBkbWFjMF9jaGFubmVsc1tdID0gewogCXsKIAkJLm9mZnNldCA9IDAsCkBAIC02NDEsMTUgKzM5OSw2IEBACiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKLQkmdG11NV9kZXZpY2UsCi0JJnRtdTZfZGV2aWNlLAotCSZ0bXU3X2RldmljZSwKLQkmdG11OF9kZXZpY2UsCi0JJnRtdTlfZGV2aWNlLAotCSZ0bXUxMF9kZXZpY2UsCi0JJnRtdTExX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaHgzLmMKaW5kZXggMDg1NmJjYi4uYTc4YzVmZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoeDMuYwpAQCAtMTAwLDI1ICsxMDAsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LAotCS50aW1lcl9iaXQgPSAwLAotCS5jbG9ja2V2ZW50X3JhdGluZyA9IDIwMCwKKwkuY2hhbm5lbHNfbWFzayA9IDcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmYzEwMDA4LAotCQkuZW5kCT0gMHhmZmMxMDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0MDApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAorCURFRklORV9SRVNfTUVNKDB4ZmZjMTAwMDAsIDB4MzApLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0MDApKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDIwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ0MCkpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMTI4LDI1ICsxMjEsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCisJLmNoYW5uZWxzX21hc2sgPSA3LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmMxMDAxNCwKLQkJLmVuZAk9IDB4ZmZjMTAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDIwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKKwlERUZJTkVfUkVTX01FTSgweGZmYzIwMDAwLCAweDJjKSwKKwlERUZJTkVfUkVTX0lSUShldnQyaXJxKDB4NDYwKSksCisJREVGSU5FX1JFU19JUlEoZXZ0MmlycSgweDQ4MCkpLAorCURFRklORV9SRVNfSVJRKGV2dDJpcnEoMHg0YTApKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAorCS5uYW1lCQk9ICJzaC10bXUiLAogCS5pZAkJPSAxLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTFfcGxhdGZvcm1fZGF0YSwKQEAgLTE1NSwxMjQgKzE0MSwxMiBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUxX3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUyX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZjMTAwMjAsCi0JCS5lbmQJPSAweGZmYzEwMDJmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDQ0MCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUyX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXUyX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXUyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11Ml9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11M19wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweGZmYzIwMDA4LAotCQkuZW5kCT0gMHhmZmMyMDAxMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IGV2dDJpcnEoMHg0NjApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11M19wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTRfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXU0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmMyMDAxNCwKLQkJLmVuZAk9IDB4ZmZjMjAwMWYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4NDgwKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSA0LAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTRfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXU1X3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNoYW5uZWxfb2Zmc2V0ID0gMHgxYywKLQkudGltZXJfYml0ID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11NV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4ZmZjMjAwMjAsCi0JCS5lbmQJPSAweGZmYzIwMDJiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gZXZ0MmlycSgweDRhMCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXU1X2RldmljZSA9IHsKLQkubmFtZQkJPSAic2hfdG11IiwKLQkuaWQJCT0gNSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0bXU1X3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB0bXU1X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NV9yZXNvdXJjZXMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoeDNfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNjaWYwX2RldmljZSwKIAkmc2NpZjFfZGV2aWNlLAogCSZzY2lmMl9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCi0JJnRtdTNfZGV2aWNlLAotCSZ0bXU0X2RldmljZSwKLQkmdG11NV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaHgzX2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvc2V0dXAtc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L3NldHVwLXNoNS5jCmluZGV4IDE0ZDY4MjEuLjFiZjBiMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvc2V0dXAtc2g1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9zZXR1cC1zaDUuYwpAQCAtNzEsMzAgKzcxLDIwIEBACiAKICNkZWZpbmUJVE1VX0JMT0NLX09GRgkweDAxMDIwMDAwCiAjZGVmaW5lIFRNVV9CQVNFCVBIWVNfUEVSSVBIRVJBTF9CTE9DSyArIFRNVV9CTE9DS19PRkYKLSNkZWZpbmUgVE1VMF9CQVNFCShUTVVfQkFTRSArIDB4OCArICgweGMgKiAweDApKQotI2RlZmluZSBUTVUxX0JBU0UJKFRNVV9CQVNFICsgMHg4ICsgKDB4YyAqIDB4MSkpCi0jZGVmaW5lIFRNVTJfQkFTRQkoVE1VX0JBU0UgKyAweDggKyAoMHhjICogMHgyKSkKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewotCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCi0JLnRpbWVyX2JpdCA9IDAsCi0JLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorCS5jaGFubmVsc19tYXNrID0gNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFRNVTBfQkFTRSwKLQkJLmVuZAk9IFRNVTBfQkFTRSArIDB4YyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfVFVOSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCisJREVGSU5FX1JFU19NRU0oVE1VX0JBU0UsIDB4MzApLAorCURFRklORV9SRVNfSVJRKElSUV9UVU5JMCksCisJREVGSU5FX1JFU19JUlEoSVJRX1RVTkkxKSwKKwlERUZJTkVfUkVTX0lSUShJUlFfVFVOSTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCisJLm5hbWUJCT0gInNoLXRtdSIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MF9wbGF0Zm9ybV9kYXRhLApAQCAtMTAzLDY2ICs5Myw5IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTBfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTFfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAotCS50aW1lcl9iaXQgPSAxLAotCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRtdTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBUTVUxX0JBU0UsCi0JCS5lbmQJPSBUTVUxX0JBU0UgKyAweGMgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1RVTkkxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoX3RtdSIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MV9wbGF0Zm9ybV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdG11MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbF9vZmZzZXQgPSAweDFjLAotCS50aW1lcl9iaXQgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gVE1VMl9CQVNFLAotCQkuZW5kCT0gVE1VMl9CQVNFICsgMHhjIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9UVU5JMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtdTJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaF90bXUiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTJfcGxhdGZvcm1fZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHRtdTJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXUyX3Jlc291cmNlcyksCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g1X2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzY2lmMF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAotCSZ0bXUxX2RldmljZSwKLQkmdG11Ml9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g1X2RldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKaW5kZXggOTA1ODMyYS4uZjA4ZmU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWM2NC5oPgogCiAKQEAgLTUyLDEwICs1Myw0IEBACiAjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikgKGF0b21pY19kZWNfcmV0dXJuKHYpID09IDApCiAjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSwgdikgKGF0b21pY19zdWJfcmV0dXJuKGksIHYpID09IDApCiAKLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KICNlbmRpZiAvKiAhKF9fQVJDSF9TUEFSQ19BVE9NSUNfXykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXRvbWljXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2F0b21pY182NC5oCmluZGV4IGJlNTZhMjQuLjhiMmYxYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaApAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CiAjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQpAQCAtMTA4LDEwICsxMDksNCBAQAogCiBleHRlcm4gbG9uZyBhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmUoYXRvbWljNjRfdCAqdik7CiAKLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KICNlbmRpZiAvKiAhKF9fQVJDSF9TUEFSQzY0X0FUT01JQ19fKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iYXJyaWVyXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JhcnJpZXJfNjQuaAppbmRleCBiNWFhZDk2Li4zMDVkY2MzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JhcnJpZXJfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JhcnJpZXJfNjQuaApAQCAtNjgsNCArNjgsNyBAQAogCV9fX3AxOwkJCQkJCQkJXAogfSkKIAorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWMoKQliYXJyaWVyKCkKKwogI2VuZGlmIC8qICEoX19TUEFSQzY0X0JBUlJJRVJfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oCmluZGV4IDI1YTY3NjYuLjg4YzlhOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfMzIuaApAQCAtOTAsOSArOTAsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaD4KIAotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlkbyB7IH0gd2hpbGUoMCkKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc182NC5oCmluZGV4IDI5MDExY2MuLmYxYTA1MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogZXh0ZXJuIGludCB0ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOwogZXh0ZXJuIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CkBAIC0yMyw5ICsyNCw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgogCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zscy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKaW5kZXggZGM1MDMyOS4uNTNlOWI0OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCkBAIC0xNiwxMSArMTYsNiBAQAogCiAjZGVmaW5lIFBDSV9JUlFfTk9ORQkJMHhmZmZmZmZmZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCi17Ci0JLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KLX0KLQogLyogRHluYW1pYyBETUEgbWFwcGluZyBzdHVmZi4KICAqLwogI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzY0LmgKaW5kZXggMTYzM2I3MS4uYzZjNzM5NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV82NC5oCkBAIC0xNiwxMSArMTYsNiBAQAogCiAjZGVmaW5lIFBDSV9JUlFfTk9ORQkJMHhmZmZmZmZmZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCi17Ci0JLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KLX0KLQogLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgbm90IGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKICAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKICAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCmluZGV4IDE1NTViYmMuLjg1N2FkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCkBAIC01NDMsOCArNTQzLDcgQEAKIAkJCXByaW50aygiUENJOiBkZXYgaGVhZGVyIHR5cGU6ICV4XG4iLAogCQkJICAgICAgIGRldi0+aGRyX3R5cGUpOwogCi0JCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgfHwKLQkJICAgIGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpCisJCWlmIChwY2lfaXNfYnJpZGdlKGRldikpCiAJCQlvZl9zY2FuX3BjaV9icmlkZ2UocGJtLCBjaGlsZCwgZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljXzMyLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKaW5kZXggMWFkNGExZi4uMWIxMDlmYSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaApAQCAtMTY5LDE2ICsxNjksNiBAQAogI2RlZmluZSBhdG9taWM2NF9kZWNfYW5kX3Rlc3QodikJKGF0b21pYzY0X2RlY19yZXR1cm4oKHYpKSA9PSAwKQogI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikJYXRvbWljNjRfYWRkX3VubGVzcygodiksIDFMTCwgMExMKQogCi0vKgotICogV2UgbmVlZCB0byBiYXJyaWVyIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHdvcmQsIHNpbmNlIHRoZSBfYXRvbWljX3h4eCgpCi0gKiByb3V0aW5lcyBqdXN0IHRucyB0aGUgbG9jayBhbmQgdGhlbiByZWFkL21vZGlmeS93cml0ZSBvZiB0aGUgd29yZC4KLSAqIEJ1dCBhZnRlciB0aGUgd29yZCBpcyB1cGRhdGVkLCB0aGUgcm91dGluZSBpc3N1ZXMgYW4gIm1mIiBiZWZvcmUgcmV0dXJuaW5nLAotICogYW5kIHNpbmNlIGl0J3MgYSBmdW5jdGlvbiBjYWxsLCB3ZSBkb24ndCBldmVuIG5lZWQgYSBjb21waWxlciBiYXJyaWVyLgotICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaAppbmRleCBhZDIyMGVlLi43YjExYzVmIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F0b21pY182NC5oCkBAIC0xMDUsMTIgKzEwNSw2IEBACiAKICNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCi0vKiBBdG9taWMgZGVjIGFuZCBpbmMgZG9uJ3QgaW1wbGVtZW50IGJhcnJpZXIsIHNvIHByb3ZpZGUgdGhlbSBpZiBuZWVkZWQuICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX21iKCkKLQogLyogRGVmaW5lIHRoaXMgdG8gaW5kaWNhdGUgdGhhdCBjbXB4Y2hnIGlzIGFuIGVmZmljaWVudCBvcGVyYXRpb24uICovCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcKIApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKaW5kZXggYjVhMDVkMC4uOTZhNDJhZSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC03Miw2ICs3MiwyMCBAQAogI2RlZmluZSBtYigpCQlmYXN0X21iKCkKICNkZWZpbmUgaW9iKCkJCWZhc3RfaW9iKCkKIAorI2lmbmRlZiBfX3RpbGVneF9fIC8qIDMyIGJpdCAqLworLyoKKyAqIFdlIG5lZWQgdG8gYmFycmllciBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB3b3JkLCBzaW5jZSB0aGUgX2F0b21pY194eHgoKQorICogcm91dGluZXMganVzdCB0bnMgdGhlIGxvY2sgYW5kIHRoZW4gcmVhZC9tb2RpZnkvd3JpdGUgb2YgdGhlIHdvcmQuCisgKiBCdXQgYWZ0ZXIgdGhlIHdvcmQgaXMgdXBkYXRlZCwgdGhlIHJvdXRpbmUgaXNzdWVzIGFuICJtZiIgYmVmb3JlIHJldHVybmluZywKKyAqIGFuZCBzaW5jZSBpdCdzIGEgZnVuY3Rpb24gY2FsbCwgd2UgZG9uJ3QgZXZlbiBuZWVkIGEgY29tcGlsZXIgYmFycmllci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pYygpCWRvIHsgfSB3aGlsZSAoMCkKKyNlbHNlIC8qIDY0IGJpdCAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKQlzbXBfbWIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pYygpCXNtcF9tYigpCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JhcnJpZXIuaD4KIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBkNWEyMDY4Li4yMGNhYTM0IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIF9BU01fVElMRV9CSVRPUFNfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAogI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHNfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHNfMzIuaAppbmRleCAzODY4NjVhZC4uYmJmN2I2NiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHNfMzIuaApAQCAtNDksOCArNDksOCBAQAogICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KICAqCiAgKiBjbGVhcl9iaXQoKSBtYXkgbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IKLSAqIGxvY2tpbmcgcHVycG9zZXMsIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3IKLSAqIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgY3B1cy4KKyAqIGxvY2tpbmcgcHVycG9zZXMsIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBhbmQvb3IKKyAqIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgY3B1cy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdCh1bnNpZ25lZCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKQEAgLTEyMSwxMCArMTIxLDYgQEAKIAlyZXR1cm4gKF9hdG9taWNfeG9yKGFkZHIsIG1hc2spICYgbWFzaykgIT0gMDsKIH0KIAotLyogU2VlIGRpc2N1c3Npb24gYXQgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpIGluIDxhc20vYXRvbWljXzMyLmg+LiAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWRvIHt9IHdoaWxlICgwKQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmg+CiAKICNlbmRpZiAvKiBfQVNNX1RJTEVfQklUT1BTXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaAppbmRleCBhZDM0Y2QwLi5iYjFhMjkyIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzXzY0LmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wc182NC5oCkBAIC0zMiwxMCArMzIsNiBAQAogCV9faW5zbl9mZXRjaGFuZCgodm9pZCAqKShhZGRyICsgbnIgLyBCSVRTX1BFUl9MT05HKSwgfm1hc2spOwogfQogCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX21iKCkKLQotCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdCh1bnNpZ25lZCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAoMVVMIDw8IChuciAlIEJJVFNfUEVSX0xPTkcpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNzI5YWExMC4uZDc2N2ZmOSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogI2RlZmluZSBUSUZfTUVNRElFCQk3CS8qIE9PTSBraWxsZXIgYXQgd29yayAqLwogI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQk4CS8qIGNhbGxiYWNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlciAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UCTkJLyogc3lzY2FsbCB0cmFjZXBvaW50IGluc3RydW1lbnRhdGlvbiAqLworI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTAJLyogaWRsZSBpcyBwb2xsaW5nIGZvciBUSUZfTkVFRF9SRVNDSEVEICovCiAKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQpAQCAtMTQwLDYgKzE0MSw3IEBACiAjZGVmaW5lIF9USUZfTUVNRElFCQkoMTw8VElGX01FTURJRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQJKDE8PFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCisjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKIAogLyogV29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHVzZXIgc3BhY2UuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLIFwKQEAgLTE2Miw3ICsxNjQsNiBAQAogI2lmZGVmIF9fdGlsZWd4X18KICNkZWZpbmUgVFNfQ09NUEFUCQkweDAwMDEJLyogMzItYml0IGNvbXBhdGliaWxpdHkgbW9kZSAqLwogI2VuZGlmCi0jZGVmaW5lIFRTX1BPTExJTkcJCTB4MDAwNAkvKiBpbiBpZGxlIGxvb3AgYnV0IG5vdCBzbGVlcGluZyAqLwogI2RlZmluZSBUU19SRVNUT1JFX1NJR01BU0sJMHgwMDA4CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IGQxNWMwZDguLjkzODMxMTggMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC00NCwzOSArNDQsNiBAQAogLyogRm9yIG5vdywgdXNlIG51bWEgbm9kZSAtMSBmb3IgZ2xvYmFsIGFsbG9jYXRpb24uICovCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKGJ1cykJCSgodm9pZCkoYnVzKSwgLTEpCiAKLS8qCi0gKiBUSUxFIGFyY2hpdGVjdHVyZSBoYXMgbWFueSBjb3JlcyBpbnRlZ3JhdGVkIGluIG9uZSBwcm9jZXNzb3IsIHNvIHdlIG5lZWQKLSAqIHNldHVwIGJpZ2dlciBiYWxhbmNlX2ludGVydmFsIGZvciBib3RoIENQVS9OT0RFIHNjaGVkdWxpbmcgZG9tYWlucyB0bwotICogcmVkdWNlIHByb2Nlc3Mgc2NoZWR1bGluZyBjb3N0cy4KLSAqLwotCi0vKiBzY2hlZF9kb21haW5zIFNEX0NQVV9JTklUIGZvciBUSUxFIGFyY2hpdGVjdHVyZSAqLwotI2RlZmluZSBTRF9DUFVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJCQlcCi0JLm1pbl9pbnRlcnZhbAkJPSA0LAkJCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gMTI4LAkJCQkJXAotCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQkJCVwKLQkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCQkJXAotCS5idXN5X2lkeAkJPSAyLAkJCQkJXAotCS5pZGxlX2lkeAkJPSAxLAkJCQkJXAotCS5uZXdpZGxlX2lkeAkJPSAwLAkJCQkJXAotCS53YWtlX2lkeAkJPSAwLAkJCQkJXAotCS5mb3JrZXhlY19pZHgJCT0gMCwJCQkJCVwKLQkJCQkJCQkJCVwKLQkuZmxhZ3MJCQk9IDEqU0RfTE9BRF9CQUxBTkNFCQkJXAotCQkJCXwgMSpTRF9CQUxBTkNFX05FV0lETEUJCQlcCi0JCQkJfCAxKlNEX0JBTEFOQ0VfRVhFQwkJCVwKLQkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAotCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCi0JCQkJfCAwKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKLQkJCQl8IDAqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAotCQkJCXwgMCpTRF9TRVJJQUxJWkUJCQlcCi0JCQkJLAkJCQkJXAotCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gMzIsCQkJCQlcCi19Ci0KIC8qIEJ5IGRlZmluaXRpb24sIHdlIGNyZWF0ZSBub2RlcyBiYXNlZCBvbiBvbmxpbmUgbWVtb3J5LiAqLwogI2RlZmluZSBub2RlX2hhc19vbmxpbmVfbWVtKG5pZCkgMQogCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcgYi9hcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKaW5kZXggYzlkZDMxOS4uNDVmNDdmOCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvY29uZmlncy91bmljb3JlMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvdW5pY29yZTMyL2NvbmZpZ3MvdW5pY29yZTMyX2RlZmNvbmZpZwpAQCAtMTQ5LDcgKzE0OSw2IEBACiAjCVVTQiBzdXBwb3J0CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD1uCiBDT05GSUdfVVNCPW4KLUNPTkZJR19VU0JfREVWSUNFRlM9bgogQ09ORklHX1VTQl9QUklOVEVSPW4KIENPTkZJR19VU0JfU1RPUkFHRT1uCiAjCUludmVudHJhIEhpZ2hzcGVlZCBEdWFsIFJvbGUgQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBmNWUxMDhmLi42NTQ0MDdlIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMTgsMTEgKzE4LDYgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+IC8qIGZvciBQQ0lCSU9TX01JTl8qICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQotCiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfYnVyc3RfYWR2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQllbnVtIHBjaV9kbWFfYnVyc3Rfc3RyYXRlZ3kgKnN0cmF0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggMjVkMmM2Zi4uN2Q1ZmViNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yNjEsNiArMjYxLDkgQEAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX1VQUk9CRVMKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBGSVhfRUFSTFlDT05fTUVNCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIApAQCAtNDE1LDcgKzQxOCw2IEBACiAKIGNvbmZpZyBYODZfR09MREZJU0gKICAgICAgICBib29sICJHb2xkZmlzaCAoVmlydHVhbCBQbGF0Zm9ybSkiCi0gICAgICAgZGVwZW5kcyBvbiBYODZfMzIKICAgICAgICBkZXBlbmRzIG9uIFg4Nl9FWFRFTkRFRF9QTEFURk9STQogICAgICAgIC0tLWhlbHAtLS0KIAkgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBHb2xkZmlzaCB2aXJ0dWFsIHBsYXRmb3JtIHVzZWQgcHJpbWFyaWx5CkBAIC0yMzc1LDEyICsyMzc3LDkgQEAKIAlkZXBlbmRzIG9uIFNUQTJYMTEKIAogY29uZmlnIElPU0ZfTUJJCi0JYm9vbAorCXRyaXN0YXRlCisJZGVmYXVsdCBtCiAJZGVwZW5kcyBvbiBQQ0kKLQktLS1oZWxwLS0tCi0JICBUbyBiZSBzZWxlY3RlZCBieSBtb2R1bGVzIHJlcXVpcmluZyBhY2Nlc3MgdG8gdGhlIEludGVsIE9uQ2hpcCBTeXN0ZW0KLQkgIEZhYnJpYyAoSU9TRikgU2lkZWJhbmQgTWFpbEJveCBJbnRlcmZhY2UgKE1CSSkuIEZvciBNQkkgcGxhdGZvcm1zCi0JICBlbnVtZXJhYmxlIGJ5IFBDSS4KIAogc291cmNlICJuZXQvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3N0cmluZy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3N0cmluZy5jCmluZGV4IGYzYzU3ZTMuLjAwZTc4OGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9zdHJpbmcuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvc3RyaW5nLmMKQEAgLTEsOSArMSw1IEBACi0jaW5jbHVkZSAibWlzYy5oIgogI2luY2x1ZGUgIi4uL3N0cmluZy5jIgogCi0vKiBtaXNjLmggbWlnaHQgcHVsbCBpbiBzdHJpbmdfMzIuaCB3aGljaCBoYXMgYSBtYWNybyBmb3IgbWVtY3B5LiB1bmRlZiB0aGF0ICovCi0jdW5kZWYgbWVtY3B5Ci0KICNpZmRlZiBDT05GSUdfWDg2XzMyCiB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc3RyaW5nLmMgYi9hcmNoL3g4Ni9ib290L3N0cmluZy5jCmluZGV4IDUzMzkwNDAuLjQ5M2YzZmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc3RyaW5nLmMKKysrIGIvYXJjaC94ODYvYm9vdC9zdHJpbmcuYwpAQCAtMTIsMTQgKzEyLDkgQEAKICAqIFZlcnkgYmFzaWMgc3RyaW5nIGZ1bmN0aW9ucwogICovCiAKLSNpbmNsdWRlICJib290LmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJjdHlwZS5oIgogCi0vKgotICogVGhpcyBmaWxlIGdldHMgaW5jbHVkZWQgaW4gY29tcHJlc3NlZC9zdHJpbmcuYyB3aGljaCBtaWdodCBwdWxsIGluCi0gKiBzdHJpbmdfMzIuaCBhbmQgd2hpY2ggaW4gdHVybiBtYXBzIG1lbWNtcCB0byBfX2J1aWx0aW5fbWVtY21wKCkuIFVuZG8KLSAqIHRoYXQgZmlyc3QuCi0gKi8KLSN1bmRlZiBtZW1jbXAKIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3QgbGVuKQogewogCXU4IGRpZmY7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCA2MTllN2Y3Li4zMmQyZTcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTI0NCw3ICsyNDQsNiBAQAogQ09ORklHX0hJRF9QSUQ9eQogQ09ORklHX1VTQl9ISURERVY9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKaW5kZXggNjE4MWM2OS4uYTQ4MWRkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwpAQCAtMjM5LDcgKzIzOSw2IEBACiBDT05GSUdfSElEX1BJRD15CiBDT05GSUdfVVNCX0hJRERFVj15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggYjE3ZjRmNC4uNmRkMWM3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KICNpbmNsdWRlIDxhc20vcm13Y2MuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAvKgogICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKQEAgLTI0MywxMiArMjQ0LDYgQEAKIAkJICAgICA6IDogInIiICgodW5zaWduZWQpKG1hc2spKSwgIm0iICgqKGFkZHIpKQlcCiAJCSAgICAgOiAibWVtb3J5IikKIAotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGluY2x1ZGUgPGFzbS9hdG9taWM2NF8zMi5oPgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JhcnJpZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JhcnJpZXIuaAppbmRleCA2OWJiYjQ4Li41YzcxOThjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYmFycmllci5oCkBAIC0xMzcsNiArMTM3LDEwIEBACiAKICNlbmRpZgogCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiB4ODYgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkJYmFycmllcigpCisKIC8qCiAgKiBTdG9wIFJEVFNDIHNwZWN1bGF0aW9uLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHlvdSBuZWVkIHRvIHVzZSBSRFRTQwogICogKG9yIGdldF9jeWNsZXMgb3IgdnJlYWQgdGhhdCBwb3NzaWJseSBhY2Nlc3NlcyB0aGUgVFNDKSBpbiBhIGRlZmluZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggOWZjMWFmNy4uYWZjZDM1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9ybXdjYy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKICNpZiBCSVRTX1BFUl9MT05HID09IDMyCiAjIGRlZmluZSBfQklUT1BTX0xPTkdfU0hJRlQgNQpAQCAtMTAyLDcgKzEwMyw3IEBACiAgKgogICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEhvd2V2ZXIsIGl0IGRvZXMKICAqIG5vdCBjb250YWluIGEgbWVtb3J5IGJhcnJpZXIsIHNvIGlmIGl0IGlzIHVzZWQgZm9yIGxvY2tpbmcgcHVycG9zZXMsCi0gKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkKKyAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBhbmQvb3Igc21wX21iX19hZnRlcl9hdG9taWMoKQogICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KICAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCkBAIC0xNTYsOSArMTU3LDYgQEAKIAlfX2NsZWFyX2JpdChuciwgYWRkcik7CiB9CiAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCi0KIC8qKgogICogX19jaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQogICogQG5yOiB0aGUgYml0IHRvIGNoYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21kbGluZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21kbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMWY3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbWRsaW5lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9BU01fWDg2X0NNRExJTkVfSAorI2RlZmluZSBfQVNNX1g4Nl9DTURMSU5FX0gKKworaW50IGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbChjb25zdCBjaGFyICpjbWRsaW5lX3B0ciwgY29uc3QgY2hhciAqb3B0aW9uKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0NNRExJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCBhMzA3Yjc1Li40NjE1OTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTkwLDggKzE5MCw4IEBACiAjZGVmaW5lIHRyYWNlX2ludGVycnVwdCBpbnRlcnJ1cHQKICNlbmRpZgogCi0jZGVmaW5lIFZFQ1RPUl9VTkRFRklORUQJLTEKLSNkZWZpbmUgVkVDVE9SX1JFVFJJR0dFUkVECS0yCisjZGVmaW5lIFZFQ1RPUl9VTkRFRklORUQJKC0xKQorI2RlZmluZSBWRUNUT1JfUkVUUklHR0VSRUQJKC0yKQogCiB0eXBlZGVmIGludCB2ZWN0b3JfaXJxX3RbTlJfVkVDVE9SU107CiBERUNMQVJFX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvc2ZfbWJpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb3NmX21iaS5oCmluZGV4IDhlNzFjNzkuLjU3OTk1ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvc2ZfbWJpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9zZl9tYmkuaApAQCAtNTAsNiArNTAsMzIgQEAKICNkZWZpbmUgQlRfTUJJX1BDSUVfUkVBRAkweDAwCiAjZGVmaW5lIEJUX01CSV9QQ0lFX1dSSVRFCTB4MDEKIAorLyogUXVhcmsgYXZhaWxhYmxlIHVuaXRzICovCisjZGVmaW5lIFFSS19NQklfVU5JVF9IQkEJMHgwMAorI2RlZmluZSBRUktfTUJJX1VOSVRfSEIJMHgwMworI2RlZmluZSBRUktfTUJJX1VOSVRfUk1VCTB4MDQKKyNkZWZpbmUgUVJLX01CSV9VTklUX01NCTB4MDUKKyNkZWZpbmUgUVJLX01CSV9VTklUX01NRVNSQU0JMHgwNQorI2RlZmluZSBRUktfTUJJX1VOSVRfU09DCTB4MzEKKworLyogUXVhcmsgcmVhZC93cml0ZSBvcGNvZGVzICovCisjZGVmaW5lIFFSS19NQklfSEJBX1JFQUQJMHgxMAorI2RlZmluZSBRUktfTUJJX0hCQV9XUklURQkweDExCisjZGVmaW5lIFFSS19NQklfSEJfUkVBRAkweDEwCisjZGVmaW5lIFFSS19NQklfSEJfV1JJVEUJMHgxMQorI2RlZmluZSBRUktfTUJJX1JNVV9SRUFECTB4MTAKKyNkZWZpbmUgUVJLX01CSV9STVVfV1JJVEUJMHgxMQorI2RlZmluZSBRUktfTUJJX01NX1JFQUQJMHgxMAorI2RlZmluZSBRUktfTUJJX01NX1dSSVRFCTB4MTEKKyNkZWZpbmUgUVJLX01CSV9NTUVTUkFNX1JFQUQJMHgxMgorI2RlZmluZSBRUktfTUJJX01NRVNSQU1fV1JJVEUJMHgxMworI2RlZmluZSBRUktfTUJJX1NPQ19SRUFECTB4MDYKKyNkZWZpbmUgUVJLX01CSV9TT0NfV1JJVEUJMHgwNworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9TRl9NQkkpCisKK2Jvb2wgaW9zZl9tYmlfYXZhaWxhYmxlKHZvaWQpOworCiAvKioKICAqIGlvc2ZfbWJpX3JlYWQoKSAtIE1haWxCb3ggSW50ZXJmYWNlIHJlYWQgY29tbWFuZAogICogQHBvcnQ6CXBvcnQgaW5kaWNhdGluZyBzdWJ1bml0IGJlaW5nIGFjY2Vzc2VkCkBAIC04Nyw0ICsxMTMsMzMgQEAKICAqLwogaW50IGlvc2ZfbWJpX21vZGlmeSh1OCBwb3J0LCB1OCBvcGNvZGUsIHUzMiBvZmZzZXQsIHUzMiBtZHIsIHUzMiBtYXNrKTsKIAorI2Vsc2UgLyogQ09ORklHX0lPU0ZfTUJJIGlzIG5vdCBlbmFibGVkICovCitzdGF0aWMgaW5saW5lCitib29sIGlvc2ZfbWJpX2F2YWlsYWJsZSh2b2lkKQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZQoraW50IGlvc2ZfbWJpX3JlYWQodTggcG9ydCwgdTggb3Bjb2RlLCB1MzIgb2Zmc2V0LCB1MzIgKm1kcikKK3sKKwlXQVJOKDEsICJJT1NGX01CSSBkcml2ZXIgbm90IGF2YWlsYWJsZSIpOworCXJldHVybiAtRVBFUk07Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBpb3NmX21iaV93cml0ZSh1OCBwb3J0LCB1OCBvcGNvZGUsIHUzMiBvZmZzZXQsIHUzMiBtZHIpCit7CisJV0FSTigxLCAiSU9TRl9NQkkgZHJpdmVyIG5vdCBhdmFpbGFibGUiKTsKKwlyZXR1cm4gLUVQRVJNOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgaW9zZl9tYmlfbW9kaWZ5KHU4IHBvcnQsIHU4IG9wY29kZSwgdTMyIG9mZnNldCwgdTMyIG1kciwgdTMyIG1hc2spCit7CisJV0FSTigxLCAiSU9TRl9NQkkgZHJpdmVyIG5vdCBhdmFpbGFibGUiKTsKKwlyZXR1cm4gLUVQRVJNOworfQorI2VuZGlmIC8qIENPTkZJR19JT1NGX01CSSAqLworCiAjZW5kaWYgLyogSU9TRl9NQklfU1lNU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCAyNGVjMTIxLi5hMDRmZTRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKQEAgLTE4OSw3ICsxODksNiBAQAogCXZvaWQgKCpzZXRfaWR0KShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IGRlc2NfcHRyICpkdCk7CiAJdWxvbmcgKCpnZXRfY3IpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgY3IpOwogCWludCAoKnNldF9jcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBjciwgdWxvbmcgdmFsKTsKLQl2b2lkICgqc2V0X3JmbGFncykoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIHZhbCk7CiAJaW50ICgqY3BsKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CiAJaW50ICgqZ2V0X2RyKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLCB1bG9uZyAqZGVzdCk7CiAJaW50ICgqc2V0X2RyKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLCB1bG9uZyB2YWx1ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3ZGUwNjlhZi4uNDkzMTQxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC01MCwxMSArNTAsNyBAQAogCQkJICB8IFg4Nl9DUjBfRVQgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfQU0gXAogCQkJICB8IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEIHwgWDg2X0NSMF9QRykpCiAKLSNkZWZpbmUgQ1IzX1BBRV9SRVNFUlZFRF9CSVRTICgoWDg2X0NSM19QV1QgfCBYODZfQ1IzX1BDRCkgLSAxKQotI2RlZmluZSBDUjNfTk9OUEFFX1JFU0VSVkVEX0JJVFMgKChQQUdFX1NJWkUtMSkgJiB+KFg4Nl9DUjNfUFdUIHwgWDg2X0NSM19QQ0QpKQotI2RlZmluZSBDUjNfUENJRF9FTkFCTEVEX1JFU0VSVkVEX0JJVFMgMHhGRkZGRkYwMDAwMDAwMDAwVUxMCi0jZGVmaW5lIENSM19MX01PREVfUkVTRVJWRURfQklUUyAoQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTIHwJXAotCQkJCSAgMHhGRkZGRkYwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBDUjNfTF9NT0RFX1JFU0VSVkVEX0JJVFMgMHhGRkZGRkYwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIENSNF9SRVNFUlZFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJKH4odW5zaWduZWQgbG9uZykoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BWSSB8IFg4Nl9DUjRfVFNEIHwgWDg2X0NSNF9ERVwKIAkJCSAgfCBYODZfQ1I0X1BTRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9NQ0UgICAgIFwKQEAgLTEzNCw3ICsxMzAsNiBAQAogCVZDUFVfRVhSRUdfUERQVFIgPSBOUl9WQ1BVX1JFR1MsCiAJVkNQVV9FWFJFR19DUjMsCiAJVkNQVV9FWFJFR19SRkxBR1MsCi0JVkNQVV9FWFJFR19DUEwsCiAJVkNQVV9FWFJFR19TRUdNRU5UUywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmgKaW5kZXggYjU5ODI3ZS4uNjRkYzM2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmgKQEAgLTI1LDYgKzI1LDcgQEAKIHN0cnVjdCBkZXZpY2U7CiAKIGVudW0gdWNvZGVfc3RhdGUgeyBVQ09ERV9FUlJPUiwgVUNPREVfT0ssIFVDT0RFX05GT1VORCB9OworZXh0ZXJuIGJvb2wgZGlzX3Vjb2RlX2xkcjsKIAogc3RydWN0IG1pY3JvY29kZV9vcHMgewogCWVudW0gdWNvZGVfc3RhdGUgKCpyZXF1ZXN0X21pY3JvY29kZV91c2VyKSAoaW50IGNwdSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggOTZhZTRmNC4uMDg5MmVhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTY4LDcgKzY4LDYgQEAKIHZvaWQgcGNpYmlvc19zY2FuX3Jvb3QoaW50IGJ1cyk7CiAKIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSk7CiBzdHJ1Y3QgaXJxX3JvdXRpbmdfdGFibGUgKnBjaWJpb3NfZ2V0X2lycV9yb3V0aW5nX3RhYmxlKHZvaWQpOwogaW50IHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwaW4sIGludCBpcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeW5jX2JpdG9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3luY19iaXRvcHMuaAppbmRleCAwNWFmM2IzLi5mMjhhMjRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeW5jX2JpdG9wcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5bmNfYml0b3BzLmgKQEAgLTQxLDcgKzQxLDcgQEAKICAqCiAgKiBzeW5jX2NsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBIb3dldmVyLCBpdCBkb2VzCiAgKiBub3QgY29udGFpbiBhIG1lbW9yeSBiYXJyaWVyLCBzbyBpZiBpdCBpcyB1c2VkIGZvciBsb2NraW5nIHB1cnBvc2VzLAotICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCisgKiB5b3Ugc2hvdWxkIGNhbGwgc21wX21iX19iZWZvcmVfYXRvbWljKCkgYW5kL29yIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkKICAqIGluIG9yZGVyIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIG9uIG90aGVyIHByb2Nlc3NvcnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX2NsZWFyX2JpdChsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNDdlNWRlMi4uODU0MDUzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04Myw2ICs4Myw3IEBACiAjZGVmaW5lIFRJRl9GT1JLCQkxOAkvKiByZXRfZnJvbV9mb3JrICovCiAjZGVmaW5lIFRJRl9OT0haCQkxOQkvKiBpbiBhZGFwdGl2ZSBub2h6IG1vZGUgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMjAJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTIxCS8qIGlkbGUgaXMgcG9sbGluZyBmb3IgVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfSU9fQklUTUFQCQkyMgkvKiB1c2VzIEkvTyBiaXRtYXAgKi8KICNkZWZpbmUgVElGX0ZPUkNFRF9URgkJMjQJLyogdHJ1ZSBpZiBURiBpbiBlZmxhZ3MgYXJ0aWZpY2lhbGx5ICovCiAjZGVmaW5lIFRJRl9CTE9DS1NURVAJCTI1CS8qIHNldCB3aGVuIHdlIHdhbnQgREVCVUdDVExNU1JfQlRGICovCkBAIC0xMDYsNiArMTA3LDcgQEAKICNkZWZpbmUgX1RJRl9JQTMyCQkoMSA8PCBUSUZfSUEzMikKICNkZWZpbmUgX1RJRl9GT1JLCQkoMSA8PCBUSUZfRk9SSykKICNkZWZpbmUgX1RJRl9OT0haCQkoMSA8PCBUSUZfTk9IWikKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfSU9fQklUTUFQCQkoMSA8PCBUSUZfSU9fQklUTUFQKQogI2RlZmluZSBfVElGX0ZPUkNFRF9URgkJKDEgPDwgVElGX0ZPUkNFRF9URikKICNkZWZpbmUgX1RJRl9CTE9DS1NURVAJCSgxIDw8IFRJRl9CTE9DS1NURVApCkBAIC0xOTEsOCArMTkzLDYgQEAKICAqIGhhdmUgdG8gd29ycnkgYWJvdXQgYXRvbWljIGFjY2Vzc2VzLgogICovCiAjZGVmaW5lIFRTX0NPTVBBVAkJMHgwMDAyCS8qIDMyYml0IHN5c2NhbGwgYWN0aXZlICg2NEJJVCkqLwotI2RlZmluZSBUU19QT0xMSU5HCQkweDAwMDQJLyogaWRsZSB0YXNrIHBvbGxpbmcgbmVlZF9yZXNjaGVkLAotCQkJCQkgICBza2lwIHNlbmRpbmcgaW50ZXJydXB0ICovCiAjZGVmaW5lIFRTX1JFU1RPUkVfU0lHTUFTSwkweDAwMDgJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggNThkNjZmZS4uOGJhMTg4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC03NCw2ICs3NCwxMSBAQAogZG90cmFwbGlua2FnZSB2b2lkIGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZyk7CiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKIGRvdHJhcGxpbmthZ2Ugdm9pZCB0cmFjZV9kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGxvbmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yKQoreworCWRvX3BhZ2VfZmF1bHQocmVncywgZXJyb3IpOworfQogI2VuZGlmCiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vwcm9iZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vwcm9iZXMuaAppbmRleCAzMDg3ZWE5Li45M2JlZTdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91cHJvYmVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXByb2Jlcy5oCkBAIC0zMywxNSArMzMsMjcgQEAKICNkZWZpbmUgVVBST0JFX1NXQlBfSU5TTgkJMHhjYwogI2RlZmluZSBVUFJPQkVfU1dCUF9JTlNOX1NJWkUJCSAgIDEKIAorc3RydWN0IHVwcm9iZV94b2xfb3BzOworCiBzdHJ1Y3QgYXJjaF91cHJvYmUgewotCXUxNgkJCQlmaXh1cHM7CiAJdW5pb24gewogCQl1OAkJCWluc25bTUFYX1VJTlNOX0JZVEVTXTsKIAkJdTgJCQlpeG9sW01BWF9VSU5TTl9CWVRFU107CiAJfTsKKworCXUxNgkJCQlmaXh1cHM7CisJY29uc3Qgc3RydWN0IHVwcm9iZV94b2xfb3BzCSpvcHM7CisKKwl1bmlvbiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCXVuc2lnbmVkIGxvbmcJCQlyaXBfcmVsYV90YXJnZXRfYWRkcmVzczsKKwkJdW5zaWduZWQgbG9uZwkJCXJpcF9yZWxhX3RhcmdldF9hZGRyZXNzOwogI2VuZGlmCisJCXN0cnVjdCB7CisJCQlzMzIJb2ZmczsKKwkJCXU4CWlsZW47CisJCQl1OAlvcGMxOworCQl9CQkJCWJyYW5jaDsKKwl9OwogfTsKIAogc3RydWN0IGFyY2hfdXByb2JlX3Rhc2sgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCBhMzA4MzZjLi5jNjNlOTI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBTR0kgVVYgYXJjaGl0ZWN0dXJhbCBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAjaWZuZGVmIF9BU01fWDg2X1VWX1VWX0hVQl9ICkBAIC0yMDQsMTYgKzIwNCw2IEBACiAJcmV0dXJuIHV2X2h1Yl9pbmZvLT5odWJfcmV2aXNpb24gPj0gVVYyX0hVQl9SRVZJU0lPTl9CQVNFOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc191djJfMV9odWIodm9pZCkKLXsKLQlyZXR1cm4gdXZfaHViX2luZm8tPmh1Yl9yZXZpc2lvbiA9PSBVVjJfSFVCX1JFVklTSU9OX0JBU0U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3V2Ml8yX2h1Yih2b2lkKQotewotCXJldHVybiB1dl9odWJfaW5mby0+aHViX3JldmlzaW9uID09IFVWMl9IVUJfUkVWSVNJT05fQkFTRSArIDE7Ci19Ci0KIHVuaW9uIHV2aF9hcGljaWQgewogICAgIHVuc2lnbmVkIGxvbmcgICAgICAgdjsKICAgICBzdHJ1Y3QgdXZoX2FwaWNpZF9zIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAppbmRleCBlNDIyNDliLi5kZGQ4ZGI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBVViBNTVIgZGVmaW5pdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAogI2lmbmRlZiBfQVNNX1g4Nl9VVl9VVl9NTVJTX0gKQEAgLTI4MDMsNiArMjgwMyw0NiBAQAogfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIFVWM0hfR1IwX0dBTV9HUl9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVjNIX0dSMF9HQU1fR1JfQ09ORklHCQkJCTB4YzAwMDI4VUwKKworI2RlZmluZSBVVjNIX0dSMF9HQU1fR1JfQ09ORklHX01fU0tUX1NIRlQJCTAKKyNkZWZpbmUgVVYzSF9HUjBfR0FNX0dSX0NPTkZJR19TVUJTUEFDRV9TSEZUCQkxMAorI2RlZmluZSBVVjNIX0dSMF9HQU1fR1JfQ09ORklHX01fU0tUX01BU0sJCTB4MDAwMDAwMDAwMDAwMDAzZlVMCisjZGVmaW5lIFVWM0hfR1IwX0dBTV9HUl9DT05GSUdfU1VCU1BBQ0VfTUFTSwkJMHgwMDAwMDAwMDAwMDAwNDAwVUwKKwordW5pb24gdXYzaF9ncjBfZ2FtX2dyX2NvbmZpZ191IHsKKwl1bnNpZ25lZCBsb25nCXY7CisJc3RydWN0IHV2M2hfZ3IwX2dhbV9ncl9jb25maWdfcyB7CisJCXVuc2lnbmVkIGxvbmcJbV9za3Q6NjsJCQkvKiBSVyAqLworCQl1bnNpZ25lZCBsb25nCXVuZGVmXzZfOTo0OwkJCS8qIFVuZGVmaW5lZCAqLworCQl1bnNpZ25lZCBsb25nCXN1YnNwYWNlOjE7CQkJLyogUlcgKi8KKwkJdW5zaWduZWQgbG9uZwlyZXNlcnZlZDo1MzsKKwl9IHMzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIFVWM0hfR1IxX0dBTV9HUl9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVjNIX0dSMV9HQU1fR1JfQ09ORklHCQkJCTB4MTAwMDAyOFVMCisKKyNkZWZpbmUgVVYzSF9HUjFfR0FNX0dSX0NPTkZJR19NX1NLVF9TSEZUCQkwCisjZGVmaW5lIFVWM0hfR1IxX0dBTV9HUl9DT05GSUdfU1VCU1BBQ0VfU0hGVAkJMTAKKyNkZWZpbmUgVVYzSF9HUjFfR0FNX0dSX0NPTkZJR19NX1NLVF9NQVNLCQkweDAwMDAwMDAwMDAwMDAwM2ZVTAorI2RlZmluZSBVVjNIX0dSMV9HQU1fR1JfQ09ORklHX1NVQlNQQUNFX01BU0sJCTB4MDAwMDAwMDAwMDAwMDQwMFVMCisKK3VuaW9uIHV2M2hfZ3IxX2dhbV9ncl9jb25maWdfdSB7CisJdW5zaWduZWQgbG9uZwl2OworCXN0cnVjdCB1djNoX2dyMV9nYW1fZ3JfY29uZmlnX3MgeworCQl1bnNpZ25lZCBsb25nCW1fc2t0OjY7CQkJLyogUlcgKi8KKwkJdW5zaWduZWQgbG9uZwl1bmRlZl82Xzk6NDsJCQkvKiBVbmRlZmluZWQgKi8KKwkJdW5zaWduZWQgbG9uZwlzdWJzcGFjZToxOwkJCS8qIFJXICovCisJCXVuc2lnbmVkIGxvbmcJcmVzZXJ2ZWQ6NTM7CisJfSBzMzsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qICAgICAgICAgICAgICAgICAgIFVWM0hfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHMF9NTVIgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNkZWZpbmUgVVYzSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUcwX01NUgkJMHgxNjAzMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAppbmRleCBlNzA5ODg0Li5jYTA4YTI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCkBAIC0zNDMsNyArMzQzLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLUhZUEVSVklTT1JfbXVsdGljYWxsKHZvaWQgKmNhbGxfbGlzdCwgaW50IG5yX2NhbGxzKQorSFlQRVJWSVNPUl9tdWx0aWNhbGwodm9pZCAqY2FsbF9saXN0LCB1aW50MzJfdCBucl9jYWxscykKIHsKIAlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBtdWx0aWNhbGwsIGNhbGxfbGlzdCwgbnJfY2FsbHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCmluZGV4IGZkOWNiNzYuLjM0MDBkYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKQEAgLTU0LDYgKzU0LDkgQEAKICNkZWZpbmUgUFJJX3hlbl9wZm4gImx4IgogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHhlbl91bG9uZ190OwogI2RlZmluZSBQUklfeGVuX3Vsb25nICJseCIKK3R5cGVkZWYgbG9uZyB4ZW5fbG9uZ190OworI2RlZmluZSBQUklfeGVuX2xvbmcgImx4IgorCiAvKiBHdWVzdCBoYW5kbGVzIGZvciBwcmltaXRpdmUgQyB0eXBlcy4gKi8KIF9fREVGSU5FX0dVRVNUX0hBTkRMRSh1Y2hhciwgdW5zaWduZWQgY2hhcik7CiBfX0RFRklORV9HVUVTVF9IQU5ETEUodWludCwgIHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCmluZGV4IDlmYThhYTAuLjc2MTY0ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpICJBR1A6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTc1LDE0ICs3NywxMyBAQAogCWFkZHIgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKEdBUlRfTUlOX0FERFIsIEdBUlRfTUFYX0FERFIsCiAJCQkJICAgICAgYXBlcl9zaXplLCBhcGVyX3NpemUpOwogCWlmICghYWRkcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJDYW5ub3QgYWxsb2NhdGUgYXBlcnR1cmUgbWVtb3J5IGhvbGUgKCVseCwldUspXG4iLAotCQkJCWFkZHIsIGFwZXJfc2l6ZT4+MTApOworCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBhcGVydHVyZSBtZW1vcnkgaG9sZSBbbWVtICUjMDEwbHgtJSMwMTBseF0gKCV1S0IpXG4iLAorCQkgICAgICAgYWRkciwgYWRkciArIGFwZXJfc2l6ZSAtIDEsIGFwZXJfc2l6ZSA+PiAxMCk7CiAJCXJldHVybiAwOwogCX0KIAltZW1ibG9ja19yZXNlcnZlKGFkZHIsIGFwZXJfc2l6ZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwcGluZyBhcGVydHVyZSBvdmVyICVkIEtCIG9mIFJBTSBAICVseFxuIiwKLQkJCWFwZXJfc2l6ZSA+PiAxMCwgYWRkcik7CisJcHJfaW5mbygiTWFwcGluZyBhcGVydHVyZSBvdmVyIFJBTSBbbWVtICUjMDEwbHgtJSMwMTBseF0gKCV1S0IpXG4iLAorCQlhZGRyLCBhZGRyICsgYXBlcl9zaXplIC0gMSwgYXBlcl9zaXplID4+IDEwKTsKIAlyZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKGFkZHIgPj4gUEFHRV9TSElGVCwKIAkJCSAgICAgICAoYWRkcithcGVyX3NpemUpID4+IFBBR0VfU0hJRlQpOwogCkBAIC0xMjYsMTAgKzEyNywxMSBAQAogCXU2NCBhcGVyOwogCXUzMiBvbGRfb3JkZXI7CiAKLQlwcmludGsoS0VSTl9JTkZPICJBR1AgYnJpZGdlIGF0ICUwMng6JTAyeDolMDJ4XG4iLCBidXMsIHNsb3QsIGZ1bmMpOworCXByX2luZm8oInBjaSAwMDAwOiUwMng6JTAyeDolMDJ4OiBBR1AgYnJpZGdlXG4iLCBidXMsIHNsb3QsIGZ1bmMpOwogCWFwc2l6ZXJlZyA9IHJlYWRfcGNpX2NvbmZpZ18xNihidXMsIHNsb3QsIGZ1bmMsIGNhcCArIDB4MTQpOwogCWlmIChhcHNpemVyZWcgPT0gMHhmZmZmZmZmZikgewotCQlwcmludGsoS0VSTl9FUlIgIkFQU0laRSBpbiBBR1AgYnJpZGdlIHVucmVhZGFibGVcbiIpOworCQlwcl9lcnIoInBjaSAwMDAwOiUwMng6JTAyeC4lZDogQVBTSVpFIHVucmVhZGFibGVcbiIsCisJCSAgICAgICBidXMsIHNsb3QsIGZ1bmMpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE1MywxNiArMTU1LDE4IEBACiAJICogT24gc29tZSBzaWNrIGNoaXBzLCBBUFNJWkUgaXMgMC4gSXQgbWVhbnMgaXQgd2FudHMgNEcKIAkgKiBzbyBsZXQgZG91YmxlIGNoZWNrIHRoYXQgb3JkZXIsIGFuZCBsZXRzIHRydXN0IEFNRCBOQiBzZXR0aW5nczoKIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJBcGVydHVyZSBmcm9tIEFHUCBAICVMeCBvbGQgc2l6ZSAldSBNQlxuIiwKLQkJCWFwZXIsIDMyIDw8IG9sZF9vcmRlcik7CisJcHJfaW5mbygicGNpIDAwMDA6JTAyeDolMDJ4LiVkOiBBR1AgYXBlcnR1cmUgW2J1cyBhZGRyICUjMDEwTHgtJSMwMTBMeF0gKG9sZCBzaXplICV1TUIpXG4iLAorCQlidXMsIHNsb3QsIGZ1bmMsIGFwZXIsIGFwZXIgKyAoMzJVTEwgPDwgKG9sZF9vcmRlciArIDIwKSkgLSAxLAorCQkzMiA8PCBvbGRfb3JkZXIpOwogCWlmIChhcGVyICsgKDMyVUxMPDwoMjAgKyAqb3JkZXIpKSA+IDB4MTAwMDAwMDAwVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkFwZXJ0dXJlIHNpemUgJXUgTUIgKEFQU0laRSAleCkgaXMgbm90IHJpZ2h0LCB1c2luZyBzZXR0aW5ncyBmcm9tIE5CXG4iLAotCQkJCTMyIDw8ICpvcmRlciwgYXBzaXplcmVnKTsKKwkJcHJfaW5mbygicGNpIDAwMDA6JTAyeDolMDJ4LiVkOiBBR1AgYXBlcnR1cmUgc2l6ZSAldU1CIChBUFNJWkUgJSN4KSBpcyBub3QgcmlnaHQsIHVzaW5nIHNldHRpbmdzIGZyb20gTkJcbiIsCisJCQlidXMsIHNsb3QsIGZ1bmMsIDMyIDw8ICpvcmRlciwgYXBzaXplcmVnKTsKIAkJKm9yZGVyID0gb2xkX29yZGVyOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIkFwZXJ0dXJlIGZyb20gQUdQIEAgJUx4IHNpemUgJXUgTUIgKEFQU0laRSAleClcbiIsCi0JCQlhcGVyLCAzMiA8PCAqb3JkZXIsIGFwc2l6ZXJlZyk7CisJcHJfaW5mbygicGNpIDAwMDA6JTAyeDolMDJ4LiVkOiBBR1AgYXBlcnR1cmUgW2J1cyBhZGRyICUjMDEwTHgtJSMwMTBMeF0gKCV1TUIsIEFQU0laRSAlI3gpXG4iLAorCQlidXMsIHNsb3QsIGZ1bmMsIGFwZXIsIGFwZXIgKyAoMzJVTEwgPDwgKCpvcmRlciArIDIwKSkgLSAxLAorCQkzMiA8PCAqb3JkZXIsIGFwc2l6ZXJlZyk7CiAKIAlpZiAoIWFwZXJ0dXJlX3ZhbGlkKGFwZXIsICgzMioxMDI0KjEwMjQpIDw8ICpvcmRlciwgMzI8PDIwKSkKIAkJcmV0dXJuIDA7CkBAIC0yMTgsNyArMjIyLDcgQEAKIAkJCX0KIAkJfQogCX0KLQlwcmludGsoS0VSTl9JTkZPICJObyBBR1AgYnJpZGdlIGZvdW5kXG4iKTsKKwlwcl9pbmZvKCJObyBBR1AgYnJpZGdlIGZvdW5kXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzEwLDcgKzMxNCw4IEBACiAJCWlmIChlODIwX2FueV9tYXBwZWQoYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUsCiAJCQkJICAgIEU4MjBfUkFNKSkgewogCQkJLyogcmVzZXJ2ZSBpdCwgc28gd2UgY2FuIHJldXNlIGl0IGluIHNlY29uZCBrZXJuZWwgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBHQVJUXG4iKTsKKwkJCXByX2luZm8oImU4MjA6IHJlc2VydmUgW21lbSAlIzAxMEx4LSUjMDEwTHhdIGZvciBHQVJUXG4iLAorCQkJCWFwZXJfYmFzZSwgYXBlcl9iYXNlICsgYXBlcl9zaXplIC0gMSk7CiAJCQllODIwX2FkZF9yZWdpb24oYXBlcl9iYXNlLCBhcGVyX3NpemUsIEU4MjBfUkVTRVJWRUQpOwogCQkJdXBkYXRlX2U4MjAoKTsKIAkJfQpAQCAtMzU0LDcgKzM1OSw3IEBACiAJICAgICFlYXJseV9wY2lfYWxsb3dlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX0lORk8gICJDaGVja2luZyBhcGVydHVyZS4uLlxuIik7CisJcHJfaW5mbygiQ2hlY2tpbmcgYXBlcnR1cmUuLi5cbiIpOwogCiAJaWYgKCFmYWxsYmFja19hcGVyX2ZvcmNlKQogCQlhZ3BfYXBlcl9iYXNlID0gc2VhcmNoX2FncF9icmlkZ2UoJmFncF9hcGVyX29yZGVyLCAmdmFsaWRfYWdwKTsKQEAgLTM5NSw4ICs0MDAsOSBAQAogCQkJYXBlcl9iYXNlID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgQU1ENjRfR0FSVEFQRVJUVVJFQkFTRSkgJiAweDdmZmY7CiAJCQlhcGVyX2Jhc2UgPDw9IDI1OwogCi0JCQlwcmludGsoS0VSTl9JTkZPICJOb2RlICVkOiBhcGVydHVyZSBAICVMeCBzaXplICV1IE1CXG4iLAotCQkJCQlub2RlLCBhcGVyX2Jhc2UsIGFwZXJfc2l6ZSA+PiAyMCk7CisJCQlwcl9pbmZvKCJOb2RlICVkOiBhcGVydHVyZSBbYnVzIGFkZHIgJSMwMTBMeC0lIzAxMEx4XSAoJXVNQilcbiIsCisJCQkJbm9kZSwgYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUgLSAxLAorCQkJCWFwZXJfc2l6ZSA+PiAyMCk7CiAJCQlub2RlKys7CiAKIAkJCWlmICghYXBlcnR1cmVfdmFsaWQoYXBlcl9iYXNlLCBhcGVyX3NpemUsIDY0PDwyMCkpIHsKQEAgLTQwNyw5ICs0MTMsOSBAQAogCQkJCQlpZiAoIW5vX2lvbW11ICYmCiAJCQkJCSAgICBtYXhfcGZuID4gTUFYX0RNQTMyX1BGTiAmJgogCQkJCQkgICAgIXByaW50ZWRfZ2FydF9zaXplX21zZykgewotCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJ5b3UgYXJlIHVzaW5nIGlvbW11IHdpdGggYWdwLCBidXQgR0FSVCBzaXplIGlzIGxlc3MgdGhhbiA2NE1cbiIpOwotCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJwbGVhc2UgaW5jcmVhc2UgR0FSVCBzaXplIGluIHlvdXIgQklPUyBzZXR1cFxuIik7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgImlmIEJJT1MgZG9lc24ndCBoYXZlIHRoYXQgb3B0aW9uLCBjb250YWN0IHlvdXIgSFcgdmVuZG9yIVxuIik7CisJCQkJCQlwcl9lcnIoInlvdSBhcmUgdXNpbmcgaW9tbXUgd2l0aCBhZ3AsIGJ1dCBHQVJUIHNpemUgaXMgbGVzcyB0aGFuIDY0TUJcbiIpOworCQkJCQkJcHJfZXJyKCJwbGVhc2UgaW5jcmVhc2UgR0FSVCBzaXplIGluIHlvdXIgQklPUyBzZXR1cFxuIik7CisJCQkJCQlwcl9lcnIoImlmIEJJT1MgZG9lc24ndCBoYXZlIHRoYXQgb3B0aW9uLCBjb250YWN0IHlvdXIgSFcgdmVuZG9yIVxuIik7CiAJCQkJCQlwcmludGVkX2dhcnRfc2l6ZV9tc2cgPSAxOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKQEAgLTQ0NiwxMyArNDUyLDEwIEBACiAJCSAgIGZvcmNlX2lvbW11IHx8CiAJCSAgIHZhbGlkX2FncCB8fAogCQkgICBmYWxsYmFja19hcGVyX2ZvcmNlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJZb3VyIEJJT1MgZG9lc24ndCBsZWF2ZSBhIGFwZXJ0dXJlIG1lbW9yeSBob2xlXG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIlBsZWFzZSBlbmFibGUgdGhlIElPTU1VIG9wdGlvbiBpbiB0aGUgQklPUyBzZXR1cFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJUaGlzIGNvc3RzIHlvdSAlZCBNQiBvZiBSQU1cbiIsCi0JCQkJMzIgPDwgZmFsbGJhY2tfYXBlcl9vcmRlcik7CisJCXByX2luZm8oIllvdXIgQklPUyBkb2Vzbid0IGxlYXZlIGEgYXBlcnR1cmUgbWVtb3J5IGhvbGVcbiIpOworCQlwcl9pbmZvKCJQbGVhc2UgZW5hYmxlIHRoZSBJT01NVSBvcHRpb24gaW4gdGhlIEJJT1Mgc2V0dXBcbiIpOworCQlwcl9pbmZvKCJUaGlzIGNvc3RzIHlvdSAlZE1CIG9mIFJBTVxuIiwKKwkJCTMyIDw8IGZhbGxiYWNrX2FwZXJfb3JkZXIpOwogCiAJCWFwZXJfb3JkZXIgPSBmYWxsYmFja19hcGVyX29yZGVyOwogCQlhcGVyX2FsbG9jID0gYWxsb2NhdGVfYXBlcnR1cmUoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2h3X25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKaW5kZXggYTY5OGQ3MS4uZWFiNjcwNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAl9CiAKIAljbGVhcl9iaXQoMCwgJmJhY2t0cmFjZV9mbGFnKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCA3ODM0Mzg5Li4yOTNiNDFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogU0dJIFVWIEFQSUMgZnVuY3Rpb25zIChub3RlOiBub3QgYW4gSW50ZWwgY29tcGF0aWJsZSBBUElDKQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CkBAIC00NDAsNiArNDQwLDIwIEBACiAJe1VWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzJfTU1SLCBVVkhfUkhfR0FNX0FMSUFTMjEwX09WRVJMQVlfQ09ORklHXzJfTU1SfSwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdldF9uX2xzaGlmdChpbnQgbV92YWwpCit7CisJdW5pb24gdXYzaF9ncjBfZ2FtX2dyX2NvbmZpZ191IG1fZ3JfY29uZmlnOworCisJaWYgKGlzX3V2MV9odWIoKSkKKwkJcmV0dXJuIG1fdmFsOworCisJaWYgKGlzX3V2Ml9odWIoKSkKKwkJcmV0dXJuIG1fdmFsID09IDQwID8gNDAgOiAzOTsKKworCW1fZ3JfY29uZmlnLnYgPSB1dl9yZWFkX2xvY2FsX21tcihVVjNIX0dSMF9HQU1fR1JfQ09ORklHKTsKKwlyZXR1cm4gbV9ncl9jb25maWcuczMubV9za3Q7Cit9CisKIHN0YXRpYyBfX2luaXQgdm9pZCBnZXRfbG93bWVtX3JlZGlyZWN0KHVuc2lnbmVkIGxvbmcgKmJhc2UsIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7CiAJdW5pb24gdXZoX3JoX2dhbV9hbGlhczIxMF9vdmVybGF5X2NvbmZpZ18yX21tcl91IGFsaWFzOwpAQCAtODQ5LDYgKzg2Myw3IEBACiAJaW50IGdub2RlX2V4dHJhLCBtaW5fcG5vZGUgPSA5OTk5OTksIG1heF9wbm9kZSA9IC0xOwogCXVuc2lnbmVkIGxvbmcgbW1yX2Jhc2UsIHByZXNlbnQsIHBhZGRyOwogCXVuc2lnbmVkIHNob3J0IHBub2RlX21hc2s7CisJdW5zaWduZWQgY2hhciBuX2xzaGlmdDsKIAljaGFyICpodWIgPSAoaXNfdXYxX2h1YigpID8gIlVWMSIgOgogCQkgICAgKGlzX3V2Ml9odWIoKSA/ICJVVjIiIDoKIAkJCQkgICAgIlVWMyIpKTsKQEAgLTg2MCw2ICs4NzUsNyBAQAogCW1fdmFsID0gbV9uX2NvbmZpZy5zLm1fc2t0OwogCW5fdmFsID0gbV9uX2NvbmZpZy5zLm5fc2t0OwogCXBub2RlX21hc2sgPSAoMSA8PCBuX3ZhbCkgLSAxOworCW5fbHNoaWZ0ID0gZ2V0X25fbHNoaWZ0KG1fdmFsKTsKIAltbXJfYmFzZSA9CiAJICAgIHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUikgJgogCSAgICB+VVZfTU1SX0VOQUJMRTsKQEAgLTg2Nyw4ICs4ODMsOSBAQAogCW5vZGVfaWQudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9OT0RFX0lEKTsKIAlnbm9kZV9leHRyYSA9IChub2RlX2lkLnMubm9kZV9pZCAmIH4oKDEgPDwgbl92YWwpIC0gMSkpID4+IDE7CiAJZ25vZGVfdXBwZXIgPSAoKHVuc2lnbmVkIGxvbmcpZ25vZGVfZXh0cmEgIDw8IG1fdmFsKTsKLQlwcl9pbmZvKCJVVjogTjolZCBNOiVkIHBub2RlX21hc2s6MHgleCBnbm9kZV91cHBlci9leHRyYToweCVseC8weCV4XG4iLAotCQkJbl92YWwsIG1fdmFsLCBwbm9kZV9tYXNrLCBnbm9kZV91cHBlciwgZ25vZGVfZXh0cmEpOworCXByX2luZm8oIlVWOiBOOiVkIE06JWQgcG5vZGVfbWFzazoweCV4IGdub2RlX3VwcGVyL2V4dHJhOjB4JWx4LzB4JXggbl9sc2hpZnQgMHgleFxuIiwKKwkJCW5fdmFsLCBtX3ZhbCwgcG5vZGVfbWFzaywgZ25vZGVfdXBwZXIsIGdub2RlX2V4dHJhLAorCQkJbl9sc2hpZnQpOwogCiAJcHJfaW5mbygiVVY6IGdsb2JhbCBNTVIgYmFzZSAweCVseFxuIiwgbW1yX2Jhc2UpOwogCkBAIC05MzUsOCArOTUyLDcgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmh1Yl9yZXZpc2lvbiA9IHV2X2h1Yl9pbmZvLT5odWJfcmV2aXNpb247CiAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm1fc2hpZnQgPSA2NCAtIG1fdmFsOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl9sc2hpZnQgPSBpc191djJfMV9odWIoKSA/Ci0JCQkJKG1fdmFsID09IDQwID8gNDAgOiAzOSkgOiBtX3ZhbDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fbHNoaWZ0ID0gbl9sc2hpZnQ7CiAKIAkJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKIAkJYmxhZGUgPSBib290X3Bub2RlX3RvX2JsYWRlKHBub2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCAzYWIwMzQzLi5mM2ExZjA0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC04NDQsMjEgKzg0NCwxMCBAQAogCWludCBwb2xsaW5nOwogCWludCBlcnIgPSAwOwogCi0JcG9sbGluZyA9ICEhKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICYgVFNfUE9MTElORyk7Ci0JaWYgKHBvbGxpbmcpIHsKLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7Ci0JCS8qCi0JCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlCi0JCSAqIHRlc3QgTkVFRF9SRVNDSEVEOgotCQkgKi8KLQkJc21wX21iKCk7Ci0JfQogCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJaWRsZWQgPSAxOwogCQlyZXQgPSBhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19JRExFLCAwLCAwLCAmZWF4LCAmZXJyKTsKIAl9Ci0JaWYgKHBvbGxpbmcpCi0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CiAKIAlpZiAoIWlkbGVkKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggNjgzMTdjOC4uNmNjODAwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTcwNCw4ICs3MDQsNyBAQAogCWlmICghbWNhX2NmZy5tb25hcmNoX3RpbWVvdXQpCiAJCWdvdG8gb3V0OwogCWlmICgoczY0KSp0IDwgU1BJTlVOSVQpIHsKLQkJLyogQ0hFQ0tNRTogTWFrZSBwYW5pYyBkZWZhdWx0IGZvciAxIHRvbz8gKi8KLQkJaWYgKG1jYV9jZmcudG9sZXJhbnQgPCAxKQorCQlpZiAobWNhX2NmZy50b2xlcmFudCA8PSAxKQogCQkJbWNlX3BhbmljKCJUaW1lb3V0IHN5bmNocm9uaXppbmcgbWFjaGluZSBjaGVjayBvdmVyIENQVXMiLAogCQkJCSAgTlVMTCwgTlVMTCk7CiAJCWNwdV9taXNzaW5nID0gMTsKQEAgLTI0MzcsMzIgKzI0MzYsNjUgQEAKIAlpbnQgZXJyOwogCWludCBpID0gMDsKIAotCWlmICghbWNlX2F2YWlsYWJsZSgmYm9vdF9jcHVfZGF0YSkpCi0JCXJldHVybiAtRUlPOworCWlmICghbWNlX2F2YWlsYWJsZSgmYm9vdF9jcHVfZGF0YSkpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfb3V0OworCX0KIAotCXphbGxvY19jcHVtYXNrX3ZhcigmbWNlX2RldmljZV9pbml0aWFsaXplZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJm1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQsIEdGUF9LRVJORUwpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CiAKIAltY2VfaW5pdF9iYW5rcygpOwogCiAJZXJyID0gc3Vic3lzX3N5c3RlbV9yZWdpc3RlcigmbWNlX3N1YnN5cywgTlVMTCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfb3V0X21lbTsKIAogCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9iZWdpbigpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQllcnIgPSBtY2VfZGV2aWNlX2NyZWF0ZShpKTsKIAkJaWYgKGVycikgewogCQkJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9kZXZpY2VfY3JlYXRlOwogCQl9CiAJfQogCi0JcmVnaXN0ZXJfc3lzY29yZV9vcHMoJm1jZV9zeXNjb3JlX29wcyk7CiAJX19yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJm1jZV9jcHVfbm90aWZpZXIpOwogCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9kb25lKCk7CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbWNlX3N5c2NvcmVfb3BzKTsKKwogCS8qIHJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgL2Rldi9tY2Vsb2cgKi8KLQltaXNjX3JlZ2lzdGVyKCZtY2VfY2hyZGV2X2RldmljZSk7CisJZXJyID0gbWlzY19yZWdpc3RlcigmbWNlX2NocmRldl9kZXZpY2UpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3RlcjoKKwl1bnJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZtY2Vfc3lzY29yZV9vcHMpOworCisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7CisJX191bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmbWNlX2NwdV9ub3RpZmllcik7CisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKKworZXJyX2RldmljZV9jcmVhdGU6CisJLyoKKwkgKiBXZSBkaWRuJ3Qga2VlcCB0cmFjayBvZiB3aGljaCBkZXZpY2VzIHdlcmUgY3JlYXRlZCBhYm92ZSwgYnV0CisJICogZXZlbiBpZiB3ZSBoYWQsIHRoZSBzZXQgb2Ygb25saW5lIGNwdXMgbWlnaHQgaGF2ZSBjaGFuZ2VkLgorCSAqIFBsYXkgc2FmZSBhbmQgcmVtb3ZlIGZvciBldmVyeSBwb3NzaWJsZSBjcHUsIHNpbmNlCisJICogbWNlX2RldmljZV9yZW1vdmUoKSB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4KKwkgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJbWNlX2RldmljZV9yZW1vdmUoaSk7CisKK2Vycl9vdXRfbWVtOgorCWZyZWVfY3B1bWFza192YXIobWNlX2RldmljZV9pbml0aWFsaXplZCk7CisKK2Vycl9vdXQ6CisJcHJfZXJyKCJVbmFibGUgdG8gaW5pdCBkZXZpY2UgL2Rldi9tY2Vsb2cgKHJjOiAlZClcbiIsIGVycik7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jCmluZGV4IDE1Yzk4NzYuLmRkOWQ2MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMKQEAgLTk3LDYgKzk3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBtaWNyb2NvZGVfb3BzCSptaWNyb2NvZGVfb3BzOwogCitib29sIGRpc191Y29kZV9sZHI7Cittb2R1bGVfcGFyYW0oZGlzX3Vjb2RlX2xkciwgYm9vbCwgMCk7CisKIC8qCiAgKiBTeW5jaHJvbml6YXRpb24uCiAgKgpAQCAtNTQ2LDYgKzU0OSw5IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCWludCBlcnJvcjsKIAorCWlmIChkaXNfdWNvZGVfbGRyKQorCQlyZXR1cm4gMDsKKwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCiAJCW1pY3JvY29kZV9vcHMgPSBpbml0X2ludGVsX21pY3JvY29kZSgpOwogCWVsc2UgaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlX2Vhcmx5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlX2Vhcmx5LmMKaW5kZXggYmU3Zjg1MS4uNWYyOGE2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZV9lYXJseS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmVfZWFybHkuYwpAQCAtMTcsOSArMTcsMTEgQEAKICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vbWljcm9jb2RlLmg+CiAjaW5jbHVkZSA8YXNtL21pY3JvY29kZV9pbnRlbC5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2NvZGVfYW1kLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jbWRsaW5lLmg+CiAKICNkZWZpbmUgUUNIQVIoYSwgYiwgYywgZCkgKChhKSArICgoYikgPDwgOCkgKyAoKGMpIDw8IDE2KSArICgoZCkgPDwgMjQpKQogI2RlZmluZSBDUFVJRF9JTlRFTDEgUUNIQVIoJ0cnLCAnZScsICduJywgJ3UnKQpAQCAtNzIsMTAgKzc0LDMzIEBACiAJcmV0dXJuIHg4NjsKIH0KIAorc3RhdGljIGJvb2wgX19pbml0IGNoZWNrX2xvYWRlcl9kaXNhYmxlZF9ic3Aodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJY29uc3QgY2hhciAqY21kbGluZSA9IChjb25zdCBjaGFyICopX19wYV9ub2RlYnVnKGJvb3RfY29tbWFuZF9saW5lKTsKKwljb25zdCBjaGFyICpvcHQJICAgID0gImRpc191Y29kZV9sZHIiOworCWNvbnN0IGNoYXIgKm9wdGlvbiAgPSAoY29uc3QgY2hhciAqKV9fcGFfbm9kZWJ1ZyhvcHQpOworCWJvb2wgKnJlcyA9IChib29sICopX19wYV9ub2RlYnVnKCZkaXNfdWNvZGVfbGRyKTsKKworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCWNvbnN0IGNoYXIgKmNtZGxpbmUgPSBib290X2NvbW1hbmRfbGluZTsKKwljb25zdCBjaGFyICpvcHRpb24gID0gImRpc191Y29kZV9sZHIiOworCWJvb2wgKnJlcyA9ICZkaXNfdWNvZGVfbGRyOworI2VuZGlmCisKKwlpZiAoY21kbGluZV9maW5kX29wdGlvbl9ib29sKGNtZGxpbmUsIG9wdGlvbikpCisJCSpyZXMgPSB0cnVlOworCisJcmV0dXJuICpyZXM7Cit9CisKIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYnNwKHZvaWQpCiB7CiAJaW50IHZlbmRvciwgeDg2OwogCisJaWYgKGNoZWNrX2xvYWRlcl9kaXNhYmxlZF9ic3AoKSkKKwkJcmV0dXJuOworCiAJaWYgKCFoYXZlX2NwdWlkX3AoKSkKIAkJcmV0dXJuOwogCkBAIC05NiwxMCArMTIxLDIyIEBACiAJfQogfQogCitzdGF0aWMgYm9vbCBjaGVja19sb2FkZXJfZGlzYWJsZWRfYXAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcmV0dXJuIF9fcGFfbm9kZWJ1ZyhkaXNfdWNvZGVfbGRyKTsKKyNlbHNlCisJcmV0dXJuIGRpc191Y29kZV9sZHI7CisjZW5kaWYKK30KKwogdm9pZCBsb2FkX3Vjb2RlX2FwKHZvaWQpCiB7CiAJaW50IHZlbmRvciwgeDg2OwogCisJaWYgKGNoZWNrX2xvYWRlcl9kaXNhYmxlZF9hcCgpKQorCQlyZXR1cm47CisKIAlpZiAoIWhhdmVfY3B1aWRfcCgpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggYWU0MDdmNy4uODlmM2I3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTcyMSw2ICs3MjEsNyBAQAogCiAJcmV0dXJuIHNjaGVkLnN0YXRlLnVuYXNzaWduZWQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwZXJmX2Fzc2lnbl9ldmVudHMpOwogCiBpbnQgeDg2X3NjaGVkdWxlX2V2ZW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IG4sIGludCAqYXNzaWduKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYwppbmRleCBhZTk2Y2ZhLi45ODA5NzBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYwpAQCAtMTA4LDE1ICsxMDgsMzEgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgdTY0IHByZWNpc2Vfc3RvcmVfZGF0YV9oc3codTY0IHN0YXR1cykKK3N0YXRpYyB1NjQgcHJlY2lzZV9zdG9yZV9kYXRhX2hzdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBzdGF0dXMpCiB7CiAJdW5pb24gcGVyZl9tZW1fZGF0YV9zcmMgZHNlOworCXU2NCBjZmcgPSBldmVudC0+aHcuY29uZmlnICYgSU5URUxfQVJDSF9FVkVOVF9NQVNLOwogCiAJZHNlLnZhbCA9IDA7CiAJZHNlLm1lbV9vcCA9IFBFUkZfTUVNX09QX1NUT1JFOwogCWRzZS5tZW1fbHZsID0gUEVSRl9NRU1fTFZMX05BOworCisJLyoKKwkgKiBMMSBpbmZvIG9ubHkgdmFsaWQgZm9yIGZvbGxvd2luZyBldmVudHM6CisJICoKKwkgKiBNRU1fVU9QU19SRVRJUkVELlNUTEJfTUlTU19TVE9SRVMKKwkgKiBNRU1fVU9QU19SRVRJUkVELkxPQ0tfU1RPUkVTCisJICogTUVNX1VPUFNfUkVUSVJFRC5TUExJVF9TVE9SRVMKKwkgKiBNRU1fVU9QU19SRVRJUkVELkFMTF9TVE9SRVMKKwkgKi8KKwlpZiAoY2ZnICE9IDB4MTJkMCAmJiBjZmcgIT0gMHgyMmQwICYmIGNmZyAhPSAweDQyZDAgJiYgY2ZnICE9IDB4ODJkMCkKKwkJcmV0dXJuIGRzZS5tZW1fbHZsOworCiAJaWYgKHN0YXR1cyAmIDEpCi0JCWRzZS5tZW1fbHZsID0gUEVSRl9NRU1fTFZMX0wxOworCQlkc2UubWVtX2x2bCA9IFBFUkZfTUVNX0xWTF9MMSB8IFBFUkZfTUVNX0xWTF9ISVQ7CisJZWxzZQorCQlkc2UubWVtX2x2bCA9IFBFUkZfTUVNX0xWTF9MMSB8IFBFUkZfTUVNX0xWTF9NSVNTOworCiAJLyogTm90aGluZyBlbHNlIHN1cHBvcnRlZC4gU29ycnkuICovCiAJcmV0dXJuIGRzZS52YWw7CiB9CkBAIC04ODcsNyArOTAzLDcgQEAKIAkJCQlkYXRhLmRhdGFfc3JjLnZhbCA9IGxvYWRfbGF0ZW5jeV9kYXRhKHBlYnMtPmRzZSk7CiAJCQllbHNlIGlmIChldmVudC0+aHcuZmxhZ3MgJiBQRVJGX1g4Nl9FVkVOVF9QRUJTX1NUX0hTVykKIAkJCQlkYXRhLmRhdGFfc3JjLnZhbCA9Ci0JCQkJCXByZWNpc2Vfc3RvcmVfZGF0YV9oc3cocGVicy0+ZHNlKTsKKwkJCQkJcHJlY2lzZV9zdG9yZV9kYXRhX2hzdyhldmVudCwgcGVicy0+ZHNlKTsKIAkJCWVsc2UKIAkJCQlkYXRhLmRhdGFfc3JjLnZhbCA9IHByZWNpc2Vfc3RvcmVfZGF0YShwZWJzLT5kc2UpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDFlOTZjMzYuLmJlODQ2ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC0zNiw3ICszNiw3IEBACiAgKiAtIEZJWFVQX1RPUF9PRl9TVEFDSy9SRVNUT1JFX1RPUF9PRl9TVEFDSyAtIEZpeCB1cCB0aGUgaGFyZHdhcmUgc3RhY2sKICAqIGZyYW1lIHRoYXQgaXMgb3RoZXJ3aXNlIHVuZGVmaW5lZCBhZnRlciBhIFNZU0NBTEwKICAqIC0gVFJBQ0VfSVJRXyogLSBUcmFjZSBoYXJkIGludGVycnVwdCBzdGF0ZSBmb3IgbG9jayBkZWJ1Z2dpbmcuCi0gKiAtIGVycm9yZW50cnkvcGFyYW5vaWRlbnRyeS96ZXJvZW50cnkgLSBEZWZpbmUgZXhjZXB0aW9uIGVudHJ5IHBvaW50cy4KKyAqIC0gaWR0ZW50cnkgLSBEZWZpbmUgZXhjZXB0aW9uIGVudHJ5IHBvaW50cy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpAQCAtMTIwMywxMjUgKzEyMDMsMTAwIEBACiAvKgogICogRXhjZXB0aW9uIGVudHJ5IHBvaW50cy4KICAqLwotLm1hY3JvIHplcm9lbnRyeSBzeW0gZG9fc3ltCi1FTlRSWShcc3ltKQotCUlOVFJfRlJBTUUKLQlBU01fQ0xBQwotCVBBUkFWSVJUX0FESlVTVF9FWENFUFRJT05fRlJBTUUKLQlwdXNocV9jZmkgJC0xCQkvKiBPUklHX1JBWDogbm8gc3lzY2FsbCB0byByZXN0YXJ0ICovCi0Jc3VicSAkT1JJR19SQVgtUjE1LCAlcnNwCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIE9SSUdfUkFYLVIxNQotCWNhbGwgZXJyb3JfZW50cnkKLQlERUZBVUxUX0ZSQU1FIDAKLQltb3ZxICVyc3AsJXJkaQkJLyogcHRfcmVncyBwb2ludGVyICovCi0JeG9ybCAlZXNpLCVlc2kJCS8qIG5vIGVycm9yIGNvZGUgKi8KLQljYWxsIFxkb19zeW0KLQlqbXAgZXJyb3JfZXhpdAkJLyogJWVieDogbm8gc3dhcGdzIGZsYWcgKi8KLQlDRklfRU5EUFJPQwotRU5EKFxzeW0pCi0uZW5kbQotCi0ubWFjcm8gcGFyYW5vaWR6ZXJvZW50cnkgc3ltIGRvX3N5bQotRU5UUlkoXHN5bSkKLQlJTlRSX0ZSQU1FCi0JQVNNX0NMQUMKLQlQQVJBVklSVF9BREpVU1RfRVhDRVBUSU9OX0ZSQU1FCi0JcHVzaHFfY2ZpICQtMQkJLyogT1JJR19SQVg6IG5vIHN5c2NhbGwgdG8gcmVzdGFydCAqLwotCXN1YnEgJE9SSUdfUkFYLVIxNSwgJXJzcAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCBPUklHX1JBWC1SMTUKLQljYWxsIHNhdmVfcGFyYW5vaWQKLQlUUkFDRV9JUlFTX09GRgotCW1vdnEgJXJzcCwlcmRpCQkvKiBwdF9yZWdzIHBvaW50ZXIgKi8KLQl4b3JsICVlc2ksJWVzaQkJLyogbm8gZXJyb3IgY29kZSAqLwotCWNhbGwgXGRvX3N5bQotCWptcCBwYXJhbm9pZF9leGl0CS8qICVlYng6IG5vIHN3YXBncyBmbGFnICovCi0JQ0ZJX0VORFBST0MKLUVORChcc3ltKQotLmVuZG0KLQogI2RlZmluZSBJTklUX1RTU19JU1QoeCkgUEVSX0NQVV9WQVIoaW5pdF90c3MpICsgKFRTU19pc3QgKyAoKHgpIC0gMSkgKiA4KQotLm1hY3JvIHBhcmFub2lkemVyb2VudHJ5X2lzdCBzeW0gZG9fc3ltIGlzdAotRU5UUlkoXHN5bSkKLQlJTlRSX0ZSQU1FCi0JQVNNX0NMQUMKLQlQQVJBVklSVF9BREpVU1RfRVhDRVBUSU9OX0ZSQU1FCi0JcHVzaHFfY2ZpICQtMQkJLyogT1JJR19SQVg6IG5vIHN5c2NhbGwgdG8gcmVzdGFydCAqLwotCXN1YnEgJE9SSUdfUkFYLVIxNSwgJXJzcAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCBPUklHX1JBWC1SMTUKLQljYWxsIHNhdmVfcGFyYW5vaWQKLQlUUkFDRV9JUlFTX09GRl9ERUJVRwotCW1vdnEgJXJzcCwlcmRpCQkvKiBwdF9yZWdzIHBvaW50ZXIgKi8KLQl4b3JsICVlc2ksJWVzaQkJLyogbm8gZXJyb3IgY29kZSAqLwotCXN1YnEgJEVYQ0VQVElPTl9TVEtTWiwgSU5JVF9UU1NfSVNUKFxpc3QpCi0JY2FsbCBcZG9fc3ltCi0JYWRkcSAkRVhDRVBUSU9OX1NUS1NaLCBJTklUX1RTU19JU1QoXGlzdCkKLQlqbXAgcGFyYW5vaWRfZXhpdAkvKiAlZWJ4OiBubyBzd2FwZ3MgZmxhZyAqLwotCUNGSV9FTkRQUk9DCi1FTkQoXHN5bSkKLS5lbmRtCiAKLS5tYWNybyBlcnJvcmVudHJ5IHN5bSBkb19zeW0KKy5tYWNybyBpZHRlbnRyeSBzeW0gZG9fc3ltIGhhc19lcnJvcl9jb2RlOnJlcSBwYXJhbm9pZD0wIHNoaWZ0X2lzdD0tMQogRU5UUlkoXHN5bSkKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwkuaWYgXHNoaWZ0X2lzdCAhPSAtMSAmJiBccGFyYW5vaWQgPT0gMAorCS5lcnJvciAidXNpbmcgc2hpZnRfaXN0IHJlcXVpcmVzIHBhcmFub2lkPTEiCisJLmVuZGlmCisKKwkuaWYgXGhhc19lcnJvcl9jb2RlCiAJWENQVF9GUkFNRQorCS5lbHNlCisJSU5UUl9GUkFNRQorCS5lbmRpZgorCiAJQVNNX0NMQUMKIAlQQVJBVklSVF9BREpVU1RfRVhDRVBUSU9OX0ZSQU1FCisKKwkuaWZlcSBcaGFzX2Vycm9yX2NvZGUKKwlwdXNocV9jZmkgJC0xCQkJLyogT1JJR19SQVg6IG5vIHN5c2NhbGwgdG8gcmVzdGFydCAqLworCS5lbmRpZgorCiAJc3VicSAkT1JJR19SQVgtUjE1LCAlcnNwCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIE9SSUdfUkFYLVIxNQorCisJLmlmIFxwYXJhbm9pZAorCWNhbGwgc2F2ZV9wYXJhbm9pZAorCS5lbHNlCiAJY2FsbCBlcnJvcl9lbnRyeQorCS5lbmRpZgorCiAJREVGQVVMVF9GUkFNRSAwCisKKwkuaWYgXHBhcmFub2lkCisJLmlmIFxzaGlmdF9pc3QgIT0gLTEKKwlUUkFDRV9JUlFTX09GRl9ERUJVRwkJLyogcmVsb2FkIElEVCBpbiBjYXNlIG9mIHJlY3Vyc2lvbiAqLworCS5lbHNlCisJVFJBQ0VfSVJRU19PRkYKKwkuZW5kaWYKKwkuZW5kaWYKKwogCW1vdnEgJXJzcCwlcmRpCQkJLyogcHRfcmVncyBwb2ludGVyICovCisKKwkuaWYgXGhhc19lcnJvcl9jb2RlCiAJbW92cSBPUklHX1JBWCglcnNwKSwlcnNpCS8qIGdldCBlcnJvciBjb2RlICovCiAJbW92cSAkLTEsT1JJR19SQVgoJXJzcCkJCS8qIG5vIHN5c2NhbGwgdG8gcmVzdGFydCAqLworCS5lbHNlCisJeG9ybCAlZXNpLCVlc2kJCQkvKiBubyBlcnJvciBjb2RlICovCisJLmVuZGlmCisKKwkuaWYgXHNoaWZ0X2lzdCAhPSAtMQorCXN1YnEgJEVYQ0VQVElPTl9TVEtTWiwgSU5JVF9UU1NfSVNUKFxzaGlmdF9pc3QpCisJLmVuZGlmCisKIAljYWxsIFxkb19zeW0KKworCS5pZiBcc2hpZnRfaXN0ICE9IC0xCisJYWRkcSAkRVhDRVBUSU9OX1NUS1NaLCBJTklUX1RTU19JU1QoXHNoaWZ0X2lzdCkKKwkuZW5kaWYKKworCS5pZiBccGFyYW5vaWQKKwlqbXAgcGFyYW5vaWRfZXhpdAkJLyogJWVieDogbm8gc3dhcGdzIGZsYWcgKi8KKwkuZWxzZQogCWptcCBlcnJvcl9leGl0CQkJLyogJWVieDogbm8gc3dhcGdzIGZsYWcgKi8KKwkuZW5kaWYKKwogCUNGSV9FTkRQUk9DCiBFTkQoXHN5bSkKIC5lbmRtCiAKICNpZmRlZiBDT05GSUdfVFJBQ0lORwotLm1hY3JvIHRyYWNlX2Vycm9yZW50cnkgc3ltIGRvX3N5bQotZXJyb3JlbnRyeSB0cmFjZShcc3ltKSB0cmFjZShcZG9fc3ltKQotZXJyb3JlbnRyeSBcc3ltIFxkb19zeW0KKy5tYWNybyB0cmFjZV9pZHRlbnRyeSBzeW0gZG9fc3ltIGhhc19lcnJvcl9jb2RlOnJlcQoraWR0ZW50cnkgdHJhY2UoXHN5bSkgdHJhY2UoXGRvX3N5bSkgaGFzX2Vycm9yX2NvZGU9XGhhc19lcnJvcl9jb2RlCitpZHRlbnRyeSBcc3ltIFxkb19zeW0gaGFzX2Vycm9yX2NvZGU9XGhhc19lcnJvcl9jb2RlCiAuZW5kbQogI2Vsc2UKLS5tYWNybyB0cmFjZV9lcnJvcmVudHJ5IHN5bSBkb19zeW0KLWVycm9yZW50cnkgXHN5bSBcZG9fc3ltCisubWFjcm8gdHJhY2VfaWR0ZW50cnkgc3ltIGRvX3N5bSBoYXNfZXJyb3JfY29kZTpyZXEKK2lkdGVudHJ5IFxzeW0gXGRvX3N5bSBoYXNfZXJyb3JfY29kZT1caGFzX2Vycm9yX2NvZGUKIC5lbmRtCiAjZW5kaWYKIAotCS8qIGVycm9yIGNvZGUgaXMgb24gdGhlIHN0YWNrIGFscmVhZHkgKi8KLS5tYWNybyBwYXJhbm9pZGVycm9yZW50cnkgc3ltIGRvX3N5bQotRU5UUlkoXHN5bSkKLQlYQ1BUX0ZSQU1FCi0JQVNNX0NMQUMKLQlQQVJBVklSVF9BREpVU1RfRVhDRVBUSU9OX0ZSQU1FCi0Jc3VicSAkT1JJR19SQVgtUjE1LCAlcnNwCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIE9SSUdfUkFYLVIxNQotCWNhbGwgc2F2ZV9wYXJhbm9pZAotCURFRkFVTFRfRlJBTUUgMAotCVRSQUNFX0lSUVNfT0ZGCi0JbW92cSAlcnNwLCVyZGkJCQkvKiBwdF9yZWdzIHBvaW50ZXIgKi8KLQltb3ZxIE9SSUdfUkFYKCVyc3ApLCVyc2kJLyogZ2V0IGVycm9yIGNvZGUgKi8KLQltb3ZxICQtMSxPUklHX1JBWCglcnNwKQkJLyogbm8gc3lzY2FsbCB0byByZXN0YXJ0ICovCi0JY2FsbCBcZG9fc3ltCi0Jam1wIHBhcmFub2lkX2V4aXQJCS8qICVlYng6IG5vIHN3YXBncyBmbGFnICovCi0JQ0ZJX0VORFBST0MKLUVORChcc3ltKQotLmVuZG0KLQotemVyb2VudHJ5IGRpdmlkZV9lcnJvciBkb19kaXZpZGVfZXJyb3IKLXplcm9lbnRyeSBvdmVyZmxvdyBkb19vdmVyZmxvdwotemVyb2VudHJ5IGJvdW5kcyBkb19ib3VuZHMKLXplcm9lbnRyeSBpbnZhbGlkX29wIGRvX2ludmFsaWRfb3AKLXplcm9lbnRyeSBkZXZpY2Vfbm90X2F2YWlsYWJsZSBkb19kZXZpY2Vfbm90X2F2YWlsYWJsZQotcGFyYW5vaWRlcnJvcmVudHJ5IGRvdWJsZV9mYXVsdCBkb19kb3VibGVfZmF1bHQKLXplcm9lbnRyeSBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4gZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuCi1lcnJvcmVudHJ5IGludmFsaWRfVFNTIGRvX2ludmFsaWRfVFNTCi1lcnJvcmVudHJ5IHNlZ21lbnRfbm90X3ByZXNlbnQgZG9fc2VnbWVudF9ub3RfcHJlc2VudAotemVyb2VudHJ5IHNwdXJpb3VzX2ludGVycnVwdF9idWcgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZwotemVyb2VudHJ5IGNvcHJvY2Vzc29yX2Vycm9yIGRvX2NvcHJvY2Vzc29yX2Vycm9yCi1lcnJvcmVudHJ5IGFsaWdubWVudF9jaGVjayBkb19hbGlnbm1lbnRfY2hlY2sKLXplcm9lbnRyeSBzaW1kX2NvcHJvY2Vzc29yX2Vycm9yIGRvX3NpbWRfY29wcm9jZXNzb3JfZXJyb3IKK2lkdGVudHJ5IGRpdmlkZV9lcnJvciBkb19kaXZpZGVfZXJyb3IgaGFzX2Vycm9yX2NvZGU9MAoraWR0ZW50cnkgb3ZlcmZsb3cgZG9fb3ZlcmZsb3cgaGFzX2Vycm9yX2NvZGU9MAoraWR0ZW50cnkgYm91bmRzIGRvX2JvdW5kcyBoYXNfZXJyb3JfY29kZT0wCitpZHRlbnRyeSBpbnZhbGlkX29wIGRvX2ludmFsaWRfb3AgaGFzX2Vycm9yX2NvZGU9MAoraWR0ZW50cnkgZGV2aWNlX25vdF9hdmFpbGFibGUgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUgaGFzX2Vycm9yX2NvZGU9MAoraWR0ZW50cnkgZG91YmxlX2ZhdWx0IGRvX2RvdWJsZV9mYXVsdCBoYXNfZXJyb3JfY29kZT0xIHBhcmFub2lkPTEKK2lkdGVudHJ5IGNvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1biBkb19jb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4gaGFzX2Vycm9yX2NvZGU9MAoraWR0ZW50cnkgaW52YWxpZF9UU1MgZG9faW52YWxpZF9UU1MgaGFzX2Vycm9yX2NvZGU9MQoraWR0ZW50cnkgc2VnbWVudF9ub3RfcHJlc2VudCBkb19zZWdtZW50X25vdF9wcmVzZW50IGhhc19lcnJvcl9jb2RlPTEKK2lkdGVudHJ5IHNwdXJpb3VzX2ludGVycnVwdF9idWcgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZyBoYXNfZXJyb3JfY29kZT0wCitpZHRlbnRyeSBjb3Byb2Nlc3Nvcl9lcnJvciBkb19jb3Byb2Nlc3Nvcl9lcnJvciBoYXNfZXJyb3JfY29kZT0wCitpZHRlbnRyeSBhbGlnbm1lbnRfY2hlY2sgZG9fYWxpZ25tZW50X2NoZWNrIGhhc19lcnJvcl9jb2RlPTEKK2lkdGVudHJ5IHNpbWRfY29wcm9jZXNzb3JfZXJyb3IgZG9fc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvciBoYXNfZXJyb3JfY29kZT0wCiAKIAogCS8qIFJlbG9hZCBncyBzZWxlY3RvciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyAqLwpAQCAtMTM3MSw3ICsxMzQ2LDcgQEAKIEVORChkb19zb2Z0aXJxX293bl9zdGFjaykKIAogI2lmZGVmIENPTkZJR19YRU4KLXplcm9lbnRyeSB4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjayB4ZW5fZG9faHlwZXJ2aXNvcl9jYWxsYmFjaworaWR0ZW50cnkgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2sgeGVuX2RvX2h5cGVydmlzb3JfY2FsbGJhY2sgaGFzX2Vycm9yX2NvZGU9MAogCiAvKgogICogQSBub3RlIG9uIHRoZSAiY3JpdGljYWwgcmVnaW9uIiBpbiBvdXIgY2FsbGJhY2sgaGFuZGxlci4KQEAgLTE0ODIsMjEgKzE0NTcsMjEgQEAKICAqLwogCS5wdXNoc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCiAKLXBhcmFub2lkemVyb2VudHJ5X2lzdCBkZWJ1ZyBkb19kZWJ1ZyBERUJVR19TVEFDSwotcGFyYW5vaWR6ZXJvZW50cnlfaXN0IGludDMgZG9faW50MyBERUJVR19TVEFDSwotcGFyYW5vaWRlcnJvcmVudHJ5IHN0YWNrX3NlZ21lbnQgZG9fc3RhY2tfc2VnbWVudAoraWR0ZW50cnkgZGVidWcgZG9fZGVidWcgaGFzX2Vycm9yX2NvZGU9MCBwYXJhbm9pZD0xIHNoaWZ0X2lzdD1ERUJVR19TVEFDSworaWR0ZW50cnkgaW50MyBkb19pbnQzIGhhc19lcnJvcl9jb2RlPTAgcGFyYW5vaWQ9MSBzaGlmdF9pc3Q9REVCVUdfU1RBQ0sKK2lkdGVudHJ5IHN0YWNrX3NlZ21lbnQgZG9fc3RhY2tfc2VnbWVudCBoYXNfZXJyb3JfY29kZT0xIHBhcmFub2lkPTEKICNpZmRlZiBDT05GSUdfWEVOCi16ZXJvZW50cnkgeGVuX2RlYnVnIGRvX2RlYnVnCi16ZXJvZW50cnkgeGVuX2ludDMgZG9faW50MwotZXJyb3JlbnRyeSB4ZW5fc3RhY2tfc2VnbWVudCBkb19zdGFja19zZWdtZW50CitpZHRlbnRyeSB4ZW5fZGVidWcgZG9fZGVidWcgaGFzX2Vycm9yX2NvZGU9MAoraWR0ZW50cnkgeGVuX2ludDMgZG9faW50MyBoYXNfZXJyb3JfY29kZT0wCitpZHRlbnRyeSB4ZW5fc3RhY2tfc2VnbWVudCBkb19zdGFja19zZWdtZW50IGhhc19lcnJvcl9jb2RlPTEKICNlbmRpZgotZXJyb3JlbnRyeSBnZW5lcmFsX3Byb3RlY3Rpb24gZG9fZ2VuZXJhbF9wcm90ZWN0aW9uCi10cmFjZV9lcnJvcmVudHJ5IHBhZ2VfZmF1bHQgZG9fcGFnZV9mYXVsdAoraWR0ZW50cnkgZ2VuZXJhbF9wcm90ZWN0aW9uIGRvX2dlbmVyYWxfcHJvdGVjdGlvbiBoYXNfZXJyb3JfY29kZT0xCit0cmFjZV9pZHRlbnRyeSBwYWdlX2ZhdWx0IGRvX3BhZ2VfZmF1bHQgaGFzX2Vycm9yX2NvZGU9MQogI2lmZGVmIENPTkZJR19LVk1fR1VFU1QKLWVycm9yZW50cnkgYXN5bmNfcGFnZV9mYXVsdCBkb19hc3luY19wYWdlX2ZhdWx0CitpZHRlbnRyeSBhc3luY19wYWdlX2ZhdWx0IGRvX2FzeW5jX3BhZ2VfZmF1bHQgaGFzX2Vycm9yX2NvZGU9MQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLXBhcmFub2lkemVyb2VudHJ5IG1hY2hpbmVfY2hlY2sgKm1hY2hpbmVfY2hlY2tfdmVjdG9yKCVyaXApCitpZHRlbnRyeSBtYWNoaW5lX2NoZWNrIGhhc19lcnJvcl9jb2RlPTAgcGFyYW5vaWQ9MSBkb19zeW09Km1hY2hpbmVfY2hlY2tfdmVjdG9yKCVyaXApCiAjZW5kaWYKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9zZl9tYmkuYyBiL2FyY2gveDg2L2tlcm5lbC9pb3NmX21iaS5jCmluZGV4IGMzYWFlNjYuLmQzMGFjZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb3NmX21iaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb3NmX21iaS5jCkBAIC0yNSw2ICsyNSw5IEBACiAKICNpbmNsdWRlIDxhc20vaW9zZl9tYmkuaD4KIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JBWVRSQUlMCQkweDBGMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFSS19YMTAwMAkweDA5NTgKKwogc3RhdGljIERFRklORV9TUElOTE9DSyhpb3NmX21iaV9sb2NrKTsKIAogc3RhdGljIGlubGluZSB1MzIgaW9zZl9tYmlfZm9ybV9tY3IodTggb3AsIHU4IHBvcnQsIHU4IG9mZnNldCkKQEAgLTE3Nyw2ICsxODAsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW9zZl9tYmlfbW9kaWZ5KTsKIAorYm9vbCBpb3NmX21iaV9hdmFpbGFibGUodm9pZCkKK3sKKwkvKiBNYmkgaXNuJ3QgaG90LXBsdWdnYWJsZS4gTm8gcmVtb3ZlIHJvdXRpbmUgaXMgcHJvdmlkZWQgKi8KKwlyZXR1cm4gbWJpX3BkZXY7Cit9CitFWFBPUlRfU1lNQk9MKGlvc2ZfbWJpX2F2YWlsYWJsZSk7CisKIHN0YXRpYyBpbnQgaW9zZl9tYmlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICp1bnVzZWQpCiB7CkBAIC0xOTMsNyArMjAzLDggQEAKIH0KIAogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlvc2ZfbWJpX3BjaV9pZHMpID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDBGMDApIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfQkFZVFJBSUwpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfUVVBUktfWDEwMDApIH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpb3NmX21iaV9wY2lfaWRzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uYwppbmRleCAwMzMxY2IzLi43ZTk3MzcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAogCXN3aXRjaCAoa3ZtX3JlYWRfYW5kX3Jlc2V0X3BmX3JlYXNvbigpKSB7CiAJZGVmYXVsdDoKLQkJZG9fcGFnZV9mYXVsdChyZWdzLCBlcnJvcl9jb2RlKTsKKwkJdHJhY2VfZG9fcGFnZV9mYXVsdChyZWdzLCBlcnJvcl9jb2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUFZfUkVBU09OX1BBR0VfTk9UX1BSRVNFTlQ6CiAJCS8qIHBhZ2UgaXMgc3dhcHBlZCBvdXQgYnkgdGhlIGhvc3QuICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXByb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL3Vwcm9iZXMuYwppbmRleCAyZWQ4NDU5Li5hY2UyMjkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXByb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC91cHJvYmVzLmMKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgT1BDT0RFMShpbnNuKQkJKChpbnNuKS0+b3Bjb2RlLmJ5dGVzWzBdKQogI2RlZmluZSBPUENPREUyKGluc24pCQkoKGluc24pLT5vcGNvZGUuYnl0ZXNbMV0pCiAjZGVmaW5lIE9QQ09ERTMoaW5zbikJCSgoaW5zbiktPm9wY29kZS5ieXRlc1syXSkKLSNkZWZpbmUgTU9EUk1fUkVHKGluc24pCQlYODZfTU9EUk1fUkVHKGluc24tPm1vZHJtLnZhbHVlKQorI2RlZmluZSBNT0RSTV9SRUcoaW5zbikJCVg4Nl9NT0RSTV9SRUcoKGluc24pLT5tb2RybS52YWx1ZSkKIAogI2RlZmluZSBXKHJvdywgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LCBiOCwgYjksIGJhLCBiYiwgYmMsIGJkLCBiZSwgYmYpXAogCSgoKGIwIyNVTCA8PCAweDApfChiMSMjVUwgPDwgMHgxKXwoYjIjI1VMIDw8IDB4Mil8KGIzIyNVTCA8PCAweDMpIHwgICBcCkBAIC0yMjksNjMgKzIyOSw2IEBACiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KIAotLyoKLSAqIEZpZ3VyZSBvdXQgd2hpY2ggZml4dXBzIGFyY2hfdXByb2JlX3Bvc3RfeG9sKCkgd2lsbCBuZWVkIHRvIHBlcmZvcm0sIGFuZAotICogYW5ub3RhdGUgYXJjaF91cHJvYmUtPmZpeHVwcyBhY2NvcmRpbmdseS4gIFRvIHN0YXJ0IHdpdGgsCi0gKiBhcmNoX3Vwcm9iZS0+Zml4dXBzIGlzIGVpdGhlciB6ZXJvIG9yIGl0IHJlZmxlY3RzIHJpcC1yZWxhdGVkIGZpeHVwcy4KLSAqLwotc3RhdGljIHZvaWQgcHJlcGFyZV9maXh1cHMoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgaW5zbiAqaW5zbikKLXsKLQlib29sIGZpeF9pcCA9IHRydWUsIGZpeF9jYWxsID0gZmFsc2U7CS8qIGRlZmF1bHRzICovCi0JaW50IHJlZzsKLQotCWluc25fZ2V0X29wY29kZShpbnNuKTsJLyogc2hvdWxkIGJlIGEgbm9wICovCi0KLQlzd2l0Y2ggKE9QQ09ERTEoaW5zbikpIHsKLQljYXNlIDB4OWQ6Ci0JCS8qIHBvcGYgKi8KLQkJYXVwcm9iZS0+Zml4dXBzIHw9IFVQUk9CRV9GSVhfU0VURjsKLQkJYnJlYWs7Ci0JY2FzZSAweGMzOgkJLyogcmV0L2xyZXQgKi8KLQljYXNlIDB4Y2I6Ci0JY2FzZSAweGMyOgotCWNhc2UgMHhjYToKLQkJLyogaXAgaXMgY29ycmVjdCAqLwotCQlmaXhfaXAgPSBmYWxzZTsKLQkJYnJlYWs7Ci0JY2FzZSAweGU4OgkJLyogY2FsbCByZWxhdGl2ZSAtIEZpeCByZXR1cm4gYWRkciAqLwotCQlmaXhfY2FsbCA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2UgMHg5YToJCS8qIGNhbGwgYWJzb2x1dGUgLSBGaXggcmV0dXJuIGFkZHIsIG5vdCBpcCAqLwotCQlmaXhfY2FsbCA9IHRydWU7Ci0JCWZpeF9pcCA9IGZhbHNlOwotCQlicmVhazsKLQljYXNlIDB4ZmY6Ci0JCWluc25fZ2V0X21vZHJtKGluc24pOwotCQlyZWcgPSBNT0RSTV9SRUcoaW5zbik7Ci0JCWlmIChyZWcgPT0gMiB8fCByZWcgPT0gMykgewotCQkJLyogY2FsbCBvciBsY2FsbCwgaW5kaXJlY3QgKi8KLQkJCS8qIEZpeCByZXR1cm4gYWRkcjsgaXAgaXMgY29ycmVjdC4gKi8KLQkJCWZpeF9jYWxsID0gdHJ1ZTsKLQkJCWZpeF9pcCA9IGZhbHNlOwotCQl9IGVsc2UgaWYgKHJlZyA9PSA0IHx8IHJlZyA9PSA1KSB7Ci0JCQkvKiBqbXAgb3IgbGptcCwgaW5kaXJlY3QgKi8KLQkJCS8qIGlwIGlzIGNvcnJlY3QuICovCi0JCQlmaXhfaXAgPSBmYWxzZTsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4ZWE6CQkvKiBqbXAgYWJzb2x1dGUgLS0gaXAgaXMgY29ycmVjdCAqLwotCQlmaXhfaXAgPSBmYWxzZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCWlmIChmaXhfaXApCi0JCWF1cHJvYmUtPmZpeHVwcyB8PSBVUFJPQkVfRklYX0lQOwotCWlmIChmaXhfY2FsbCkKLQkJYXVwcm9iZS0+Zml4dXBzIHw9IFVQUk9CRV9GSVhfQ0FMTDsKLX0KLQogI2lmZGVmIENPTkZJR19YODZfNjQKIC8qCiAgKiBJZiBhcmNoX3Vwcm9iZS0+aW5zbiBkb2Vzbid0IHVzZSByaXAtcmVsYXRpdmUgYWRkcmVzc2luZywgcmV0dXJuCkBAIC0zMTAsMTUgKzI1MywxMSBAQAogICogIC0gVGhlIGRpc3BsYWNlbWVudCBpcyBhbHdheXMgNCBieXRlcy4KICAqLwogc3RhdGljIHZvaWQKLWhhbmRsZV9yaXByZWxfaW5zbihzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgaW5zbiAqaW5zbikKK2hhbmRsZV9yaXByZWxfaW5zbihzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBpbnNuICppbnNuKQogewogCXU4ICpjdXJzb3I7CiAJdTggcmVnOwogCi0JaWYgKG1tLT5jb250ZXh0LmlhMzJfY29tcGF0KQotCQlyZXR1cm47Ci0KLQlhdXByb2JlLT5yaXBfcmVsYV90YXJnZXRfYWRkcmVzcyA9IDB4MDsKIAlpZiAoIWluc25fcmlwX3JlbGF0aXZlKGluc24pKQogCQlyZXR1cm47CiAKQEAgLTM3Miw3ICszMTEsNDggQEAKIAkJY3Vyc29yKys7CiAJCW1lbW1vdmUoY3Vyc29yLCBjdXJzb3IgKyBpbnNuLT5kaXNwbGFjZW1lbnQubmJ5dGVzLCBpbnNuLT5pbW1lZGlhdGUubmJ5dGVzKTsKIAl9Ci0JcmV0dXJuOworfQorCisvKgorICogSWYgd2UncmUgZW11bGF0aW5nIGEgcmlwLXJlbGF0aXZlIGluc3RydWN0aW9uLCBzYXZlIHRoZSBjb250ZW50cworICogb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIHN0b3JlIHRoZSB0YXJnZXQgYWRkcmVzcyBpbiB0aGF0IHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZAorcHJlX3hvbF9yaXBfaW5zbihzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCXN0cnVjdCBhcmNoX3Vwcm9iZV90YXNrICphdXRhc2spCit7CisJaWYgKGF1cHJvYmUtPmZpeHVwcyAmIFVQUk9CRV9GSVhfUklQX0FYKSB7CisJCWF1dGFzay0+c2F2ZWRfc2NyYXRjaF9yZWdpc3RlciA9IHJlZ3MtPmF4OworCQlyZWdzLT5heCA9IGN1cnJlbnQtPnV0YXNrLT52YWRkcjsKKwkJcmVncy0+YXggKz0gYXVwcm9iZS0+cmlwX3JlbGFfdGFyZ2V0X2FkZHJlc3M7CisJfSBlbHNlIGlmIChhdXByb2JlLT5maXh1cHMgJiBVUFJPQkVfRklYX1JJUF9DWCkgeworCQlhdXRhc2stPnNhdmVkX3NjcmF0Y2hfcmVnaXN0ZXIgPSByZWdzLT5jeDsKKwkJcmVncy0+Y3ggPSBjdXJyZW50LT51dGFzay0+dmFkZHI7CisJCXJlZ3MtPmN4ICs9IGF1cHJvYmUtPnJpcF9yZWxhX3RhcmdldF9hZGRyZXNzOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9yaXByZWxfcG9zdF94b2woc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyAqY29ycmVjdGlvbikKK3sKKwlpZiAoYXVwcm9iZS0+Zml4dXBzICYgKFVQUk9CRV9GSVhfUklQX0FYIHwgVVBST0JFX0ZJWF9SSVBfQ1gpKSB7CisJCXN0cnVjdCBhcmNoX3Vwcm9iZV90YXNrICphdXRhc2s7CisKKwkJYXV0YXNrID0gJmN1cnJlbnQtPnV0YXNrLT5hdXRhc2s7CisJCWlmIChhdXByb2JlLT5maXh1cHMgJiBVUFJPQkVfRklYX1JJUF9BWCkKKwkJCXJlZ3MtPmF4ID0gYXV0YXNrLT5zYXZlZF9zY3JhdGNoX3JlZ2lzdGVyOworCQllbHNlCisJCQlyZWdzLT5jeCA9IGF1dGFzay0+c2F2ZWRfc2NyYXRjaF9yZWdpc3RlcjsKKworCQkvKgorCQkgKiBUaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gaW5jbHVkZXMgYSBkaXNwbGFjZW1lbnQsIGFuZCBzbworCQkgKiBpcyA0IGJ5dGVzIGxvbmdlciB0aGFuIHdoYXQgd2UndmUganVzdCBzaW5nbGUtc3RlcHBlZC4KKwkJICogQ2FsbGVyIG1heSBuZWVkIHRvIGFwcGx5IG90aGVyIGZpeHVwcyB0byBoYW5kbGUgc3R1ZmYKKwkJICogbGlrZSAiam1wcSAqLi4uKCVyaXApIiBhbmQgImNhbGxxICouLi4oJXJpcCkiLgorCQkgKi8KKwkJaWYgKGNvcnJlY3Rpb24pCisJCQkqY29ycmVjdGlvbiArPSA0OworCX0KIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9pbnNuXzY0Yml0cyhzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBpbnNuICppbnNuKQpAQCAtNDAxLDkgKzM4MSwxOSBAQAogCXJldHVybiB2YWxpZGF0ZV9pbnNuXzY0Yml0cyhhdXByb2JlLCBpbnNuKTsKIH0KICNlbHNlIC8qIDMyLWJpdDogKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9yaXByZWxfaW5zbihzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgaW5zbiAqaW5zbikKKy8qCisgKiBObyBSSVAtcmVsYXRpdmUgYWRkcmVzc2luZyBvbiAzMi1iaXQKKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX3JpcHJlbF9pbnNuKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IGluc24gKmluc24pCiB7Ci0JLyogTm8gUklQLXJlbGF0aXZlIGFkZHJlc3Npbmcgb24gMzItYml0ICovCit9CitzdGF0aWMgdm9pZCBwcmVfeG9sX3JpcF9pbnNuKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJc3RydWN0IGFyY2hfdXByb2JlX3Rhc2sgKmF1dGFzaykKK3sKK30KK3N0YXRpYyB2b2lkIGhhbmRsZV9yaXByZWxfcG9zdF94b2woc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJbG9uZyAqY29ycmVjdGlvbikKK3sKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9pbnNuX2JpdHMoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBpbnNuICppbnNuKQpAQCAtNDEyLDYgKzQwMiwyMjQgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKK3N0cnVjdCB1cHJvYmVfeG9sX29wcyB7CisJYm9vbAkoKmVtdWxhdGUpKHN0cnVjdCBhcmNoX3Vwcm9iZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwlpbnQJKCpwcmVfeG9sKShzdHJ1Y3QgYXJjaF91cHJvYmUgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJaW50CSgqcG9zdF94b2wpKHN0cnVjdCBhcmNoX3Vwcm9iZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHNpemVvZl9sb25nKHZvaWQpCit7CisJcmV0dXJuIGlzX2lhMzJfdGFzaygpID8gNCA6IDg7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9wcmVfeG9sX29wKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHJlX3hvbF9yaXBfaW5zbihhdXByb2JlLCByZWdzLCAmY3VycmVudC0+dXRhc2stPmF1dGFzayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGp1c3QgdGhlIHJldHVybiBhZGRyZXNzIHB1c2hlZCBieSBhIGNhbGwgaW5zbiBleGVjdXRlZCBvdXQgb2YgbGluZS4KKyAqLworc3RhdGljIGludCBhZGp1c3RfcmV0X2FkZHIodW5zaWduZWQgbG9uZyBzcCwgbG9uZyBjb3JyZWN0aW9uKQoreworCWludCByYXNpemUgPSBzaXplb2ZfbG9uZygpOworCWxvbmcgcmE7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJhLCAodm9pZCBfX3VzZXIgKilzcCwgcmFzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyYSArPSBjb3JyZWN0aW9uOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopc3AsICZyYSwgcmFzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWZhdWx0X3Bvc3RfeG9sX29wKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVwcm9iZV90YXNrICp1dGFzayA9IGN1cnJlbnQtPnV0YXNrOworCWxvbmcgY29ycmVjdGlvbiA9IChsb25nKSh1dGFzay0+dmFkZHIgLSB1dGFzay0+eG9sX3ZhZGRyKTsKKworCWhhbmRsZV9yaXByZWxfcG9zdF94b2woYXVwcm9iZSwgcmVncywgJmNvcnJlY3Rpb24pOworCWlmIChhdXByb2JlLT5maXh1cHMgJiBVUFJPQkVfRklYX0lQKQorCQlyZWdzLT5pcCArPSBjb3JyZWN0aW9uOworCisJaWYgKGF1cHJvYmUtPmZpeHVwcyAmIFVQUk9CRV9GSVhfQ0FMTCkgeworCQlpZiAoYWRqdXN0X3JldF9hZGRyKHJlZ3MtPnNwLCBjb3JyZWN0aW9uKSkgeworCQkJcmVncy0+c3AgKz0gc2l6ZW9mX2xvbmcoKTsKKwkJCXJldHVybiAtRVJFU1RBUlQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1cHJvYmVfeG9sX29wcyBkZWZhdWx0X3hvbF9vcHMgPSB7CisJLnByZV94b2wgID0gZGVmYXVsdF9wcmVfeG9sX29wLAorCS5wb3N0X3hvbCA9IGRlZmF1bHRfcG9zdF94b2xfb3AsCit9OworCitzdGF0aWMgYm9vbCBicmFuY2hfaXNfY2FsbChzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUpCit7CisJcmV0dXJuIGF1cHJvYmUtPmJyYW5jaC5vcGMxID09IDB4ZTg7Cit9CisKKyNkZWZpbmUgQ0FTRV9DT05ECQkJCQlcCisJQ09ORCg3MCwgNzEsIFhGKE9GKSkJCQkJXAorCUNPTkQoNzIsIDczLCBYRihDRikpCQkJCVwKKwlDT05EKDc0LCA3NSwgWEYoWkYpKQkJCQlcCisJQ09ORCg3OCwgNzksIFhGKFNGKSkJCQkJXAorCUNPTkQoN2EsIDdiLCBYRihQRikpCQkJCVwKKwlDT05EKDc2LCA3NywgWEYoQ0YpIHx8IFhGKFpGKSkJCQlcCisJQ09ORCg3YywgN2QsIFhGKFNGKSAhPSBYRihPRikpCQkJXAorCUNPTkQoN2UsIDdmLCBYRihaRikgfHwgWEYoU0YpICE9IFhGKE9GKSkKKworI2RlZmluZSBDT05EKG9wX3ksIG9wX24sIGV4cHIpCQkJCVwKKwljYXNlIDB4ICMjIG9wX3k6IERPKChleHByKSAhPSAwKQkJXAorCWNhc2UgMHggIyMgb3BfbjogRE8oKGV4cHIpID09IDApCisKKyNkZWZpbmUgWEYoeGYpCSghIShmbGFncyAmIFg4Nl9FRkxBR1NfICMjIHhmKSkKKworc3RhdGljIGJvb2wgaXNfY29uZF9qbXBfb3Bjb2RlKHU4IG9wY29kZSkKK3sKKwlzd2l0Y2ggKG9wY29kZSkgeworCSNkZWZpbmUgRE8oZXhwcikJXAorCQlyZXR1cm4gdHJ1ZTsKKwlDQVNFX0NPTkQKKwkjdW5kZWYJRE8KKworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGNoZWNrX2ptcF9jb25kKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlZ3MtPmZsYWdzOworCisJc3dpdGNoIChhdXByb2JlLT5icmFuY2gub3BjMSkgeworCSNkZWZpbmUgRE8oZXhwcikJXAorCQlyZXR1cm4gZXhwcjsKKwlDQVNFX0NPTkQKKwkjdW5kZWYJRE8KKworCWRlZmF1bHQ6CS8qIG5vdCBhIGNvbmRpdGlvbmFsIGptcCAqLworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKKyN1bmRlZglYRgorI3VuZGVmCUNPTkQKKyN1bmRlZglDQVNFX0NPTkQKKworc3RhdGljIGJvb2wgYnJhbmNoX2VtdWxhdGVfb3Aoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIG5ld19pcCA9IHJlZ3MtPmlwICs9IGF1cHJvYmUtPmJyYW5jaC5pbGVuOworCXVuc2lnbmVkIGxvbmcgb2ZmcyA9IChsb25nKWF1cHJvYmUtPmJyYW5jaC5vZmZzOworCisJaWYgKGJyYW5jaF9pc19jYWxsKGF1cHJvYmUpKSB7CisJCXVuc2lnbmVkIGxvbmcgbmV3X3NwID0gcmVncy0+c3AgLSBzaXplb2ZfbG9uZygpOworCQkvKgorCQkgKiBJZiBpdCBmYWlscyB3ZSBleGVjdXRlIHRoaXMgKG1hbmdsZWQsIHNlZSB0aGUgY29tbWVudCBpbgorCQkgKiBicmFuY2hfY2xlYXJfb2Zmc2V0KSBpbnNuIG91dC1vZi1saW5lLiBJbiB0aGUgbGlrZWx5IGNhc2UKKwkJICogdGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgdHJhcCwgYW5kIHRoZSBwcm9iZWQgYXBwbGljYXRpb24KKwkJICogc2hvdWxkIGRpZSBvciByZXN0YXJ0IHRoZSBzYW1lIGluc24gYWZ0ZXIgaXQgaGFuZGxlcyB0aGUKKwkJICogc2lnbmFsLCBhcmNoX3Vwcm9iZV9wb3N0X3hvbCgpIHdvbid0IGJlIGV2ZW4gY2FsbGVkLgorCQkgKgorCQkgKiBCdXQgdGhlcmUgaXMgY29ybmVyIGNhc2UsIHNlZSB0aGUgY29tbWVudCBpbiAtPnBvc3RfeG9sKCkuCisJCSAqLworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKW5ld19zcCwgJm5ld19pcCwgc2l6ZW9mX2xvbmcoKSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCXJlZ3MtPnNwID0gbmV3X3NwOworCX0gZWxzZSBpZiAoIWNoZWNrX2ptcF9jb25kKGF1cHJvYmUsIHJlZ3MpKSB7CisJCW9mZnMgPSAwOworCX0KKworCXJlZ3MtPmlwID0gbmV3X2lwICsgb2ZmczsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBicmFuY2hfcG9zdF94b2xfb3Aoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlCVUdfT04oIWJyYW5jaF9pc19jYWxsKGF1cHJvYmUpKTsKKwkvKgorCSAqIFdlIGNhbiBvbmx5IGdldCBoZXJlIGlmIGJyYW5jaF9lbXVsYXRlX29wKCkgZmFpbGVkIHRvIHB1c2ggdGhlIHJldAorCSAqIGFkZHJlc3MgX2FuZF8gYW5vdGhlciB0aHJlYWQgZXhwYW5kZWQgb3VyIHN0YWNrIGJlZm9yZSB0aGUgKG1hbmdsZWQpCisJICogImNhbGwiIGluc24gd2FzIGV4ZWN1dGVkIG91dC1vZi1saW5lLiBKdXN0IHJlc3RvcmUgLT5zcCBhbmQgcmVzdGFydC4KKwkgKiBXZSBjb3VsZCBhbHNvIHJlc3RvcmUgLT5pcCBhbmQgdHJ5IHRvIGNhbGwgYnJhbmNoX2VtdWxhdGVfb3AoKSBhZ2Fpbi4KKwkgKi8KKwlyZWdzLT5zcCArPSBzaXplb2ZfbG9uZygpOworCXJldHVybiAtRVJFU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGJyYW5jaF9jbGVhcl9vZmZzZXQoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwkvKgorCSAqIFR1cm4gdGhpcyBpbnNuIGludG8gImNhbGwgMWY7IDE6IiwgdGhpcyBpcyB3aGF0IHdlIHdpbGwgZXhlY3V0ZQorCSAqIG91dC1vZi1saW5lIGlmIC0+ZW11bGF0ZSgpIGZhaWxzLiBXZSBvbmx5IG5lZWQgdGhpcyB0byBnZW5lcmF0ZQorCSAqIGEgdHJhcCwgc28gdGhhdCB0aGUgcHJvYmVkIHRhc2sgcmVjZWl2ZXMgdGhlIGNvcnJlY3Qgc2lnbmFsIHdpdGgKKwkgKiB0aGUgcHJvcGVybHkgZmlsbGVkIHNpZ2luZm8uCisJICoKKwkgKiBCdXQgc2VlIHRoZSBjb21tZW50IGluIC0+cG9zdF94b2woKSwgaW4gdGhlIHVubGlrZWx5IGNhc2UgaXQgY2FuCisJICogc3VjY2VlZC4gU28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IC0+aXAgY2FuIG5vdCBmYWxsIGludG8KKwkgKiB0aGUgbm9uLWNhbm9uaWNhbCBhcmVhIGFuZCB0cmlnZ2VyICNHUC4KKwkgKgorCSAqIFdlIGNvdWxkIHR1cm4gaXQgaW50byAoc2F5KSAicHVzaGYiLCBidXQgdGhlbiB3ZSB3b3VsZCBuZWVkIHRvCisJICogZGl2b3JjZSAtPmluc25bXSBhbmQgLT5peG9sW10uIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIDFzdCBieXRlCisJICogb2YgLT5pbnNuW10gZm9yIHNldF9vcmlnX2luc24oKS4KKwkgKi8KKwltZW1zZXQoYXVwcm9iZS0+aW5zbiArIGluc25fb2Zmc2V0X2ltbWVkaWF0ZShpbnNuKSwKKwkJMCwgaW5zbi0+aW1tZWRpYXRlLm5ieXRlcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXByb2JlX3hvbF9vcHMgYnJhbmNoX3hvbF9vcHMgPSB7CisJLmVtdWxhdGUgID0gYnJhbmNoX2VtdWxhdGVfb3AsCisJLnBvc3RfeG9sID0gYnJhbmNoX3Bvc3RfeG9sX29wLAorfTsKKworLyogUmV0dXJucyAtRU5PU1lTIGlmIGJyYW5jaF94b2xfb3BzIGRvZXNuJ3QgaGFuZGxlIHRoaXMgaW5zbiAqLworc3RhdGljIGludCBicmFuY2hfc2V0dXBfeG9sX29wcyhzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBpbnNuICppbnNuKQoreworCXU4IG9wYzEgPSBPUENPREUxKGluc24pOworCisJLyogaGFzIHRoZSBzaWRlLWVmZmVjdCBvZiBwcm9jZXNzaW5nIHRoZSBlbnRpcmUgaW5zdHJ1Y3Rpb24gKi8KKwlpbnNuX2dldF9sZW5ndGgoaW5zbik7CisJaWYgKFdBUk5fT05fT05DRSghaW5zbl9jb21wbGV0ZShpbnNuKSkpCisJCXJldHVybiAtRU5PRVhFQzsKKworCXN3aXRjaCAob3BjMSkgeworCWNhc2UgMHhlYjoJLyogam1wIDggKi8KKwljYXNlIDB4ZTk6CS8qIGptcCAzMiAqLworCWNhc2UgMHg5MDoJLyogcHJlZml4KiArIG5vcDsgc2FtZSBhcyBqbXAgd2l0aCAub2ZmcyA9IDAgKi8KKwkJYnJlYWs7CisKKwljYXNlIDB4ZTg6CS8qIGNhbGwgcmVsYXRpdmUgKi8KKwkJYnJhbmNoX2NsZWFyX29mZnNldChhdXByb2JlLCBpbnNuKTsKKwkJYnJlYWs7CisKKwljYXNlIDB4MGY6CisJCWlmIChpbnNuLT5vcGNvZGUubmJ5dGVzICE9IDIpCisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJLyoKKwkJICogSWYgaXQgaXMgYSAibmVhciIgY29uZGl0aW9uYWwgam1wLCBPUENPREUyKCkgLSAweDEwIG1hdGNoZXMKKwkJICogT1BDT0RFMSgpIG9mIHRoZSAic2hvcnQiIGptcCB3aGljaCBjaGVja3MgdGhlIHNhbWUgY29uZGl0aW9uLgorCQkgKi8KKwkJb3BjMSA9IE9QQ09ERTIoaW5zbikgLSAweDEwOworCWRlZmF1bHQ6CisJCWlmICghaXNfY29uZF9qbXBfb3Bjb2RlKG9wYzEpKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJYXVwcm9iZS0+YnJhbmNoLm9wYzEgPSBvcGMxOworCWF1cHJvYmUtPmJyYW5jaC5pbGVuID0gaW5zbi0+bGVuZ3RoOworCWF1cHJvYmUtPmJyYW5jaC5vZmZzID0gaW5zbi0+aW1tZWRpYXRlLnZhbHVlOworCisJYXVwcm9iZS0+b3BzID0gJmJyYW5jaF94b2xfb3BzOworCXJldHVybiAwOworfQorCiAvKioKICAqIGFyY2hfdXByb2JlX2FuYWx5emVfaW5zbiAtIGluc3RydWN0aW9uIGFuYWx5c2lzIGluY2x1ZGluZyB2YWxpZGl0eSBhbmQgZml4dXBzLgogICogQG1tOiB0aGUgcHJvYmVkIGFkZHJlc3Mgc3BhY2UuCkBAIC00MjEsNDggKzYyOSw2MiBAQAogICovCiBpbnQgYXJjaF91cHJvYmVfYW5hbHl6ZV9pbnNuKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBpbnNuIGluc247CisJYm9vbCBmaXhfaXAgPSB0cnVlLCBmaXhfY2FsbCA9IGZhbHNlOworCWludCByZXQ7CiAKLQlhdXByb2JlLT5maXh1cHMgPSAwOwogCXJldCA9IHZhbGlkYXRlX2luc25fYml0cyhhdXByb2JlLCBtbSwgJmluc24pOwotCWlmIChyZXQgIT0gMCkKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaGFuZGxlX3JpcHJlbF9pbnNuKGF1cHJvYmUsIG1tLCAmaW5zbik7Ci0JcHJlcGFyZV9maXh1cHMoYXVwcm9iZSwgJmluc24pOworCXJldCA9IGJyYW5jaF9zZXR1cF94b2xfb3BzKGF1cHJvYmUsICZpbnNuKTsKKwlpZiAocmV0ICE9IC1FTk9TWVMpCisJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIEZpZ3VyZSBvdXQgd2hpY2ggZml4dXBzIGFyY2hfdXByb2JlX3Bvc3RfeG9sKCkgd2lsbCBuZWVkIHRvIHBlcmZvcm0sCisJICogYW5kIGFubm90YXRlIGFyY2hfdXByb2JlLT5maXh1cHMgYWNjb3JkaW5nbHkuIFRvIHN0YXJ0IHdpdGgsIC0+Zml4dXBzCisJICogaXMgZWl0aGVyIHplcm8gb3IgaXQgcmVmbGVjdHMgcmlwLXJlbGF0ZWQgZml4dXBzLgorCSAqLworCXN3aXRjaCAoT1BDT0RFMSgmaW5zbikpIHsKKwljYXNlIDB4OWQ6CQkvKiBwb3BmICovCisJCWF1cHJvYmUtPmZpeHVwcyB8PSBVUFJPQkVfRklYX1NFVEY7CisJCWJyZWFrOworCWNhc2UgMHhjMzoJCS8qIHJldCBvciBscmV0IC0tIGlwIGlzIGNvcnJlY3QgKi8KKwljYXNlIDB4Y2I6CisJY2FzZSAweGMyOgorCWNhc2UgMHhjYToKKwkJZml4X2lwID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgMHg5YToJCS8qIGNhbGwgYWJzb2x1dGUgLSBGaXggcmV0dXJuIGFkZHIsIG5vdCBpcCAqLworCQlmaXhfY2FsbCA9IHRydWU7CisJCWZpeF9pcCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDB4ZWE6CQkvKiBqbXAgYWJzb2x1dGUgLS0gaXAgaXMgY29ycmVjdCAqLworCQlmaXhfaXAgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSAweGZmOgorCQlpbnNuX2dldF9tb2RybSgmaW5zbik7CisJCXN3aXRjaCAoTU9EUk1fUkVHKCZpbnNuKSkgeworCQljYXNlIDI6IGNhc2UgMzoJCQkvKiBjYWxsIG9yIGxjYWxsLCBpbmRpcmVjdCAqLworCQkJZml4X2NhbGwgPSB0cnVlOworCQljYXNlIDQ6IGNhc2UgNToJCQkvKiBqbXAgb3IgbGptcCwgaW5kaXJlY3QgKi8KKwkJCWZpeF9pcCA9IGZhbHNlOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWhhbmRsZV9yaXByZWxfaW5zbihhdXByb2JlLCAmaW5zbik7CisJfQorCisJaWYgKGZpeF9pcCkKKwkJYXVwcm9iZS0+Zml4dXBzIHw9IFVQUk9CRV9GSVhfSVA7CisJaWYgKGZpeF9jYWxsKQorCQlhdXByb2JlLT5maXh1cHMgfD0gVVBST0JFX0ZJWF9DQUxMOworCisJYXVwcm9iZS0+b3BzID0gJmRlZmF1bHRfeG9sX29wczsKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLS8qCi0gKiBJZiB3ZSdyZSBlbXVsYXRpbmcgYSByaXAtcmVsYXRpdmUgaW5zdHJ1Y3Rpb24sIHNhdmUgdGhlIGNvbnRlbnRzCi0gKiBvZiB0aGUgc2NyYXRjaCByZWdpc3RlciBhbmQgc3RvcmUgdGhlIHRhcmdldCBhZGRyZXNzIGluIHRoYXQgcmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1wcmVfeG9sX3JpcF9pbnNuKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJc3RydWN0IGFyY2hfdXByb2JlX3Rhc2sgKmF1dGFzaykKLXsKLQlpZiAoYXVwcm9iZS0+Zml4dXBzICYgVVBST0JFX0ZJWF9SSVBfQVgpIHsKLQkJYXV0YXNrLT5zYXZlZF9zY3JhdGNoX3JlZ2lzdGVyID0gcmVncy0+YXg7Ci0JCXJlZ3MtPmF4ID0gY3VycmVudC0+dXRhc2stPnZhZGRyOwotCQlyZWdzLT5heCArPSBhdXByb2JlLT5yaXBfcmVsYV90YXJnZXRfYWRkcmVzczsKLQl9IGVsc2UgaWYgKGF1cHJvYmUtPmZpeHVwcyAmIFVQUk9CRV9GSVhfUklQX0NYKSB7Ci0JCWF1dGFzay0+c2F2ZWRfc2NyYXRjaF9yZWdpc3RlciA9IHJlZ3MtPmN4OwotCQlyZWdzLT5jeCA9IGN1cnJlbnQtPnV0YXNrLT52YWRkcjsKLQkJcmVncy0+Y3ggKz0gYXVwcm9iZS0+cmlwX3JlbGFfdGFyZ2V0X2FkZHJlc3M7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1wcmVfeG9sX3JpcF9pbnNuKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJc3RydWN0IGFyY2hfdXByb2JlX3Rhc2sgKmF1dGFzaykKLXsKLQkvKiBObyBSSVAtcmVsYXRpdmUgYWRkcmVzc2luZyBvbiAzMi1iaXQgKi8KLX0KLSNlbmRpZgotCiAvKgogICogYXJjaF91cHJvYmVfcHJlX3hvbCAtIHByZXBhcmUgdG8gZXhlY3V0ZSBvdXQgb2YgbGluZS4KICAqIEBhdXByb2JlOiB0aGUgcHJvYmVwb2ludCBpbmZvcm1hdGlvbi4KQEAgLTQ3MCw4NSArNjkyLDIzIEBACiAgKi8KIGludCBhcmNoX3Vwcm9iZV9wcmVfeG9sKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGFyY2hfdXByb2JlX3Rhc2sgKmF1dGFzazsKKwlzdHJ1Y3QgdXByb2JlX3Rhc2sgKnV0YXNrID0gY3VycmVudC0+dXRhc2s7CiAKLQlhdXRhc2sgPSAmY3VycmVudC0+dXRhc2stPmF1dGFzazsKLQlhdXRhc2stPnNhdmVkX3RyYXBfbnIgPSBjdXJyZW50LT50aHJlYWQudHJhcF9ucjsKKwlyZWdzLT5pcCA9IHV0YXNrLT54b2xfdmFkZHI7CisJdXRhc2stPmF1dGFzay5zYXZlZF90cmFwX25yID0gY3VycmVudC0+dGhyZWFkLnRyYXBfbnI7CiAJY3VycmVudC0+dGhyZWFkLnRyYXBfbnIgPSBVUFJPQkVfVFJBUF9OUjsKLQlyZWdzLT5pcCA9IGN1cnJlbnQtPnV0YXNrLT54b2xfdmFkZHI7Ci0JcHJlX3hvbF9yaXBfaW5zbihhdXByb2JlLCByZWdzLCBhdXRhc2spOwogCi0JYXV0YXNrLT5zYXZlZF90ZiA9ICEhKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19URik7CisJdXRhc2stPmF1dGFzay5zYXZlZF90ZiA9ICEhKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19URik7CiAJcmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19URjsKIAlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX0JMT0NLU1RFUCkpCiAJCXNldF90YXNrX2Jsb2Nrc3RlcChjdXJyZW50LCBmYWxzZSk7CiAKKwlpZiAoYXVwcm9iZS0+b3BzLT5wcmVfeG9sKQorCQlyZXR1cm4gYXVwcm9iZS0+b3BzLT5wcmVfeG9sKGF1cHJvYmUsIHJlZ3MpOwogCXJldHVybiAwOwogfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYXJjaF91cHJvYmVfcG9zdF94b2woKSB0byBhZGp1c3QgdGhlIHJldHVybgotICogYWRkcmVzcyBwdXNoZWQgYnkgYSBjYWxsIGluc3RydWN0aW9uIGV4ZWN1dGVkIG91dCBvZiBsaW5lLgotICovCi1zdGF0aWMgaW50IGFkanVzdF9yZXRfYWRkcih1bnNpZ25lZCBsb25nIHNwLCBsb25nIGNvcnJlY3Rpb24pCi17Ci0JaW50IHJhc2l6ZSwgbmNvcGllZDsKLQlsb25nIHJhID0gMDsKLQotCWlmIChpc19pYTMyX3Rhc2soKSkKLQkJcmFzaXplID0gNDsKLQllbHNlCi0JCXJhc2l6ZSA9IDg7Ci0KLQluY29waWVkID0gY29weV9mcm9tX3VzZXIoJnJhLCAodm9pZCBfX3VzZXIgKilzcCwgcmFzaXplKTsKLQlpZiAodW5saWtlbHkobmNvcGllZCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmEgKz0gY29ycmVjdGlvbjsKLQluY29waWVkID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKXNwLCAmcmEsIHJhc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KG5jb3BpZWQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGJvb2wgaXNfcmlwcmVsX2luc24oc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlKQotewotCXJldHVybiAoKGF1cHJvYmUtPmZpeHVwcyAmIChVUFJPQkVfRklYX1JJUF9BWCB8IFVQUk9CRV9GSVhfUklQX0NYKSkgIT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfcmlwcmVsX3Bvc3RfeG9sKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgKmNvcnJlY3Rpb24pCi17Ci0JaWYgKGlzX3JpcHJlbF9pbnNuKGF1cHJvYmUpKSB7Ci0JCXN0cnVjdCBhcmNoX3Vwcm9iZV90YXNrICphdXRhc2s7Ci0KLQkJYXV0YXNrID0gJmN1cnJlbnQtPnV0YXNrLT5hdXRhc2s7Ci0JCWlmIChhdXByb2JlLT5maXh1cHMgJiBVUFJPQkVfRklYX1JJUF9BWCkKLQkJCXJlZ3MtPmF4ID0gYXV0YXNrLT5zYXZlZF9zY3JhdGNoX3JlZ2lzdGVyOwotCQllbHNlCi0JCQlyZWdzLT5jeCA9IGF1dGFzay0+c2F2ZWRfc2NyYXRjaF9yZWdpc3RlcjsKLQotCQkvKgotCQkgKiBUaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gaW5jbHVkZXMgYSBkaXNwbGFjZW1lbnQsIGFuZCBzbwotCQkgKiBpcyA0IGJ5dGVzIGxvbmdlciB0aGFuIHdoYXQgd2UndmUganVzdCBzaW5nbGUtc3RlcHBlZC4KLQkJICogRmFsbCB0aHJvdWdoIHRvIGhhbmRsZSBzdHVmZiBsaWtlICJqbXBxICouLi4oJXJpcCkiIGFuZAotCQkgKiAiY2FsbHEgKi4uLiglcmlwKSIuCi0JCSAqLwotCQlpZiAoY29ycmVjdGlvbikKLQkJCSpjb3JyZWN0aW9uICs9IDQ7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1oYW5kbGVfcmlwcmVsX3Bvc3RfeG9sKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgKmNvcnJlY3Rpb24pCi17Ci0JLyogTm8gUklQLXJlbGF0aXZlIGFkZHJlc3Npbmcgb24gMzItYml0ICovCi19Ci0jZW5kaWYKLQotLyoKICAqIElmIHhvbCBpbnNuIGl0c2VsZiB0cmFwcyBhbmQgZ2VuZXJhdGVzIGEgc2lnbmFsKFNheSwKICAqIFNJR0lMTC9TSUdTRUdWL2V0YyksIHRoZW4gZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIGEgc2luZ2xlc3RlcHBlZAogICogaW5zdHJ1Y3Rpb24ganVtcHMgYmFjayB0byBpdHMgb3duIGFkZHJlc3MuIEl0IGlzIGFzc3VtZWQgdGhhdCBhbnl0aGluZwpAQCAtNTkyLDIyICs3NTIsMjUgQEAKICAqLwogaW50IGFyY2hfdXByb2JlX3Bvc3RfeG9sKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHVwcm9iZV90YXNrICp1dGFzazsKLQlsb25nIGNvcnJlY3Rpb247Ci0JaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHVwcm9iZV90YXNrICp1dGFzayA9IGN1cnJlbnQtPnV0YXNrOwogCiAJV0FSTl9PTl9PTkNFKGN1cnJlbnQtPnRocmVhZC50cmFwX25yICE9IFVQUk9CRV9UUkFQX05SKTsKIAotCXV0YXNrID0gY3VycmVudC0+dXRhc2s7CisJaWYgKGF1cHJvYmUtPm9wcy0+cG9zdF94b2wpIHsKKwkJaW50IGVyciA9IGF1cHJvYmUtPm9wcy0+cG9zdF94b2woYXVwcm9iZSwgcmVncyk7CisJCWlmIChlcnIpIHsKKwkJCWFyY2hfdXByb2JlX2Fib3J0X3hvbChhdXByb2JlLCByZWdzKTsKKwkJCS8qCisJCQkgKiBSZXN0YXJ0IHRoZSBwcm9iZWQgaW5zbi4gLT5wb3N0X3hvbCgpIG11c3QgZW5zdXJlCisJCQkgKiB0aGlzIGlzIHJlYWxseSBwb3NzaWJsZSBpZiBpdCByZXR1cm5zIC1FUkVTVEFSVC4KKwkJCSAqLworCQkJaWYgKGVyciA9PSAtRVJFU1RBUlQpCisJCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJY3VycmVudC0+dGhyZWFkLnRyYXBfbnIgPSB1dGFzay0+YXV0YXNrLnNhdmVkX3RyYXBfbnI7Ci0JY29ycmVjdGlvbiA9IChsb25nKSh1dGFzay0+dmFkZHIgLSB1dGFzay0+eG9sX3ZhZGRyKTsKLQloYW5kbGVfcmlwcmVsX3Bvc3RfeG9sKGF1cHJvYmUsIHJlZ3MsICZjb3JyZWN0aW9uKTsKLQlpZiAoYXVwcm9iZS0+Zml4dXBzICYgVVBST0JFX0ZJWF9JUCkKLQkJcmVncy0+aXAgKz0gY29ycmVjdGlvbjsKLQotCWlmIChhdXByb2JlLT5maXh1cHMgJiBVUFJPQkVfRklYX0NBTEwpCi0JCXJlc3VsdCA9IGFkanVzdF9yZXRfYWRkcihyZWdzLT5zcCwgY29ycmVjdGlvbik7Ci0KIAkvKgogCSAqIGFyY2hfdXByb2JlX3ByZV94b2woKSBkb2Vzbid0IHNhdmUgdGhlIHN0YXRlIG9mIFRJRl9CTE9DS1NURVAKIAkgKiBzbyB3ZSBjYW4gZ2V0IGFuIGV4dHJhIFNJR1RSQVAgaWYgd2UgZG8gbm90IGNsZWFyIFRGLiBXZSBuZWVkCkBAIC02MTgsNyArNzgxLDcgQEAKIAllbHNlIGlmICghKGF1cHJvYmUtPmZpeHVwcyAmIFVQUk9CRV9GSVhfU0VURikpCiAJCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gMDsKIH0KIAogLyogY2FsbGJhY2sgcm91dGluZSBmb3IgaGFuZGxpbmcgZXhjZXB0aW9ucy4gKi8KQEAgLTY1Miw4ICs4MTUsOSBAQAogCiAvKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIFhPTCBpbnN0cnVjdGlvbiBlaXRoZXIgZ2V0cyB0cmFwcGVkIG9yCi0gKiB0aGUgdGhyZWFkIGhhcyBhIGZhdGFsIHNpZ25hbCwgc28gcmVzZXQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgdG8gaXRzCi0gKiBwcm9iZWQgYWRkcmVzcy4KKyAqIHRoZSB0aHJlYWQgaGFzIGEgZmF0YWwgc2lnbmFsLCBvciBpZiBhcmNoX3Vwcm9iZV9wb3N0X3hvbCgpIGZhaWxlZC4KKyAqIFJlc2V0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIGl0cyBwcm9iZWQgYWRkcmVzcyBmb3IgdGhlIHBvdGVudGlhbAorICogcmVzdGFydCBvciBmb3IgcG9zdCBtb3J0ZW0gYW5hbHlzaXMuCiAgKi8KIHZvaWQgYXJjaF91cHJvYmVfYWJvcnRfeG9sKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC02NjgsMjUgKzgzMiwxMCBAQAogCQlyZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKIH0KIAotLyoKLSAqIFNraXAgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzIHBlciB0aGUgY3VycmVudGx5IGtub3duIHg4NiBJU0EuCi0gKiByZXA9MHg2Nio7IG5vcD0weDkwCi0gKi8KIHN0YXRpYyBib29sIF9fc2tpcF9zc3RlcChzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9VSU5TTl9CWVRFUzsgaSsrKSB7Ci0JCWlmIChhdXByb2JlLT5pbnNuW2ldID09IDB4NjYpCi0JCQljb250aW51ZTsKLQotCQlpZiAoYXVwcm9iZS0+aW5zbltpXSA9PSAweDkwKSB7Ci0JCQlyZWdzLT5pcCArPSBpICsgMTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJYnJlYWs7Ci0JfQorCWlmIChhdXByb2JlLT5vcHMtPmVtdWxhdGUpCisJCXJldHVybiBhdXByb2JlLT5vcHMtPmVtdWxhdGUoYXVwcm9iZSwgcmVncyk7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC03MDEsMjMgKzg1MCwyMSBAQAogdW5zaWduZWQgbG9uZwogYXJjaF91cmV0cHJvYmVfaGlqYWNrX3JldHVybl9hZGRyKHVuc2lnbmVkIGxvbmcgdHJhbXBvbGluZV92YWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW50IHJhc2l6ZSwgbmNvcGllZDsKKwlpbnQgcmFzaXplID0gc2l6ZW9mX2xvbmcoKSwgbmxlZnQ7CiAJdW5zaWduZWQgbG9uZyBvcmlnX3JldF92YWRkciA9IDA7IC8qIGNsZWFyIGhpZ2ggYml0cyBmb3IgMzItYml0IGFwcHMgKi8KIAotCXJhc2l6ZSA9IGlzX2lhMzJfdGFzaygpID8gNCA6IDg7Ci0JbmNvcGllZCA9IGNvcHlfZnJvbV91c2VyKCZvcmlnX3JldF92YWRkciwgKHZvaWQgX191c2VyICopcmVncy0+c3AsIHJhc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KG5jb3BpZWQpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmb3JpZ19yZXRfdmFkZHIsICh2b2lkIF9fdXNlciAqKXJlZ3MtPnNwLCByYXNpemUpKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBjaGVjayB3aGV0aGVyIGFkZHJlc3MgaGFzIGJlZW4gYWxyZWFkeSBoaWphY2tlZCAqLwogCWlmIChvcmlnX3JldF92YWRkciA9PSB0cmFtcG9saW5lX3ZhZGRyKQogCQlyZXR1cm4gb3JpZ19yZXRfdmFkZHI7CiAKLQluY29waWVkID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKXJlZ3MtPnNwLCAmdHJhbXBvbGluZV92YWRkciwgcmFzaXplKTsKLQlpZiAobGlrZWx5KCFuY29waWVkKSkKKwlubGVmdCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilyZWdzLT5zcCwgJnRyYW1wb2xpbmVfdmFkZHIsIHJhc2l6ZSk7CisJaWYgKGxpa2VseSghbmxlZnQpKQogCQlyZXR1cm4gb3JpZ19yZXRfdmFkZHI7CiAKLQlpZiAobmNvcGllZCAhPSByYXNpemUpIHsKKwlpZiAobmxlZnQgIT0gcmFzaXplKSB7CiAJCXByX2VycigidXByb2JlOiByZXR1cm4gYWRkcmVzcyBjbG9iYmVyZWQ6IHBpZD0lZCwgJSVzcD0lI2x4LCAiCiAJCQkiJSVpcD0lI2x4XG4iLCBjdXJyZW50LT5waWQsIHJlZ3MtPnNwLCByZWdzLT5pcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggZjQ3YTEwNC4uMzhhMGFmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTI4Myw2ICsyODMsOCBAQAogCQkwIC8qIFJlc2VydmVkICovIHwgZl9sbSB8IEYoM0ROT1dFWFQpIHwgRigzRE5PVyk7CiAJLyogY3B1aWQgMS5lY3ggKi8KIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkNF94ODZfZmVhdHVyZXMgPQorCQkvKiBOT1RFOiBNT05JVE9SIChhbmQgTVdBSVQpIGFyZSBlbXVsYXRlZCBhcyBOT1AsCisJCSAqIGJ1dCAqbm90KiBhZHZlcnRpc2VkIHRvIGd1ZXN0cyB2aWEgQ1BVSUQgISAqLwogCQlGKFhNTTMpIHwgRihQQ0xNVUxRRFEpIHwgMCAvKiBEVEVTNjQsIE1PTklUT1IgKi8gfAogCQkwIC8qIERTLUNQTCwgVk1YLCBTTVgsIEVTVCAqLyB8CiAJCTAgLyogVE0yICovIHwgRihTU1NFMykgfCAwIC8qIENOWFQtSUQgKi8gfCAwIC8qIFJlc2VydmVkICovIHwKQEAgLTQ5NSw2ICs0OTcsMTMgQEAKIAkJZW50cnktPmVjeCAmPSBrdm1fc3VwcG9ydGVkX3dvcmQ2X3g4Nl9mZWF0dXJlczsKIAkJY3B1aWRfbWFzaygmZW50cnktPmVjeCwgNik7CiAJCWJyZWFrOworCWNhc2UgMHg4MDAwMDAwNzogLyogQWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCAqLworCQkvKiBpbnZhcmlhbnQgVFNDIGlzIENQVUlELjgwMDAwMDA3SDpFRFhbOF0gKi8KKwkJZW50cnktPmVkeCAmPSAoMSA8PCA4KTsKKwkJLyogbWFzayBhZ2FpbnN0IGhvc3QgKi8KKwkJZW50cnktPmVkeCAmPSBib290X2NwdV9kYXRhLng4Nl9wb3dlcjsKKwkJZW50cnktPmVheCA9IGVudHJ5LT5lYnggPSBlbnRyeS0+ZWN4ID0gMDsKKwkJYnJlYWs7CiAJY2FzZSAweDgwMDAwMDA4OiB7CiAJCXVuc2lnbmVkIGdfcGh5c19hcyA9IChlbnRyeS0+ZWF4ID4+IDE2KSAmIDB4ZmY7CiAJCXVuc2lnbmVkIHZpcnRfYXMgPSBtYXgoKGVudHJ5LT5lYXggPj4gOCkgJiAweGZmLCA0OFUpOwpAQCAtNTI1LDcgKzUzNCw2IEBACiAJY2FzZSAzOiAvKiBQcm9jZXNzb3Igc2VyaWFsIG51bWJlciAqLwogCWNhc2UgNTogLyogTU9OSVRPUi9NV0FJVCAqLwogCWNhc2UgNjogLyogVGhlcm1hbCBtYW5hZ2VtZW50ICovCi0JY2FzZSAweDgwMDAwMDA3OiAvKiBBZHZhbmNlZCBwb3dlciBtYW5hZ2VtZW50ICovCiAJY2FzZSAweEMwMDAwMDAyOgogCWNhc2UgMHhDMDAwMDAwMzoKIAljYXNlIDB4QzAwMDAwMDQ6CkBAIC03MjYsNiArNzM0LDcgQEAKIG5vdF9mb3VuZDoKIAlyZXR1cm4gMzY7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcHVpZF9tYXhwaHlhZGRyKTsKIAogLyoKICAqIElmIG5vIG1hdGNoIGlzIGZvdW5kLCBjaGVjayB3aGV0aGVyIHdlIGV4Y2VlZCB0aGUgdkNQVSdzIGxpbWl0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCmluZGV4IGVlZWNiZWQuLmY5MDg3MzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oCisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCkBAIC04OCw0ICs4OCwxMSBAQAogCXJldHVybiBiZXN0ICYmIChiZXN0LT5lY3ggJiBiaXQoWDg2X0ZFQVRVUkVfWDJBUElDKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9jcHVpZF9oYXNfZ2JwYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7CisKKwliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMSwgMCk7CisJcmV0dXJuIGJlc3QgJiYgKGJlc3QtPmVkeCAmIGJpdChYODZfRkVBVFVSRV9HQlBBR0VTKSk7Cit9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCmluZGV4IDIwNWIxN2UuLmU0ZTgzM2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtMTYxLDYgKzE2MSw3IEBACiAjZGVmaW5lIEZhc3RvcCAgICAgICgodTY0KTEgPDwgNDQpICAvKiBVc2Ugb3Bjb2RlOjp1LmZhc3RvcCAqLwogI2RlZmluZSBOb1dyaXRlICAgICAoKHU2NCkxIDw8IDQ1KSAgLyogTm8gd3JpdGViYWNrICovCiAjZGVmaW5lIFNyY1dyaXRlICAgICgodTY0KTEgPDwgNDYpICAvKiBXcml0ZSBiYWNrIHNyYyBvcGVyYW5kICovCisjZGVmaW5lIE5vTW9kCSAgICAoKHU2NCkxIDw8IDQ3KSAgLyogTW9kIGZpZWxkIGlzIGlnbm9yZWQgKi8KIAogI2RlZmluZSBEc3RYYWNjICAgICAoRHN0QWNjTG8gfCBTcmNBY2NIaSB8IFNyY1dyaXRlKQogCkBAIC0xMDc3LDcgKzEwNzgsNyBAQAogCWN0eHQtPm1vZHJtX3JtIHw9IChjdHh0LT5tb2RybSAmIDB4MDcpOwogCWN0eHQtPm1vZHJtX3NlZyA9IFZDUFVfU1JFR19EUzsKIAotCWlmIChjdHh0LT5tb2RybV9tb2QgPT0gMykgeworCWlmIChjdHh0LT5tb2RybV9tb2QgPT0gMyB8fCAoY3R4dC0+ZCAmIE5vTW9kKSkgewogCQlvcC0+dHlwZSA9IE9QX1JFRzsKIAkJb3AtPmJ5dGVzID0gKGN0eHQtPmQgJiBCeXRlT3ApID8gMSA6IGN0eHQtPm9wX2J5dGVzOwogCQlvcC0+YWRkci5yZWcgPSBkZWNvZGVfcmVnaXN0ZXIoY3R4dCwgY3R4dC0+bW9kcm1fcm0sCkBAIC0xMzI0LDcgKzEzMjUsOCBAQAogCQlyYy0+ZW5kID0gbiAqIHNpemU7CiAJfQogCi0JaWYgKGN0eHQtPnJlcF9wcmVmaXggJiYgIShjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSkgeworCWlmIChjdHh0LT5yZXBfcHJlZml4ICYmIChjdHh0LT5kICYgU3RyaW5nKSAmJgorCSAgICAhKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpKSB7CiAJCWN0eHQtPmRzdC5kYXRhID0gcmMtPmRhdGEgKyByYy0+cG9zOwogCQljdHh0LT5kc3QudHlwZSA9IE9QX01FTV9TVFI7CiAJCWN0eHQtPmRzdC5jb3VudCA9IChyYy0+ZW5kIC0gcmMtPnBvcykgLyBzaXplOwpAQCAtMTQwOSwxMSArMTQxMSwxMSBAQAogfQogCiAvKiBEb2VzIG5vdCBzdXBwb3J0IGxvbmcgbW9kZSAqLwotc3RhdGljIGludCBsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCQkgICB1MTYgc2VsZWN0b3IsIGludCBzZWcpCitzdGF0aWMgaW50IF9fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3Ioc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJICAgICB1MTYgc2VsZWN0b3IsIGludCBzZWcsIHU4IGNwbCwgYm9vbCBpbl90YXNrX3N3aXRjaCkKIHsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3Qgc2VnX2Rlc2MsIG9sZF9kZXNjOwotCXU4IGRwbCwgcnBsLCBjcGw7CisJdTggZHBsLCBycGw7CiAJdW5zaWduZWQgZXJyX3ZlYyA9IEdQX1ZFQ1RPUjsKIAl1MzIgZXJyX2NvZGUgPSAwOwogCWJvb2wgbnVsbF9zZWxlY3RvciA9ICEoc2VsZWN0b3IgJiB+MHgzKTsgLyogMDAwMC0wMDAzIGFyZSBudWxsICovCkBAIC0xNDQxLDcgKzE0NDMsNiBAQAogCX0KIAogCXJwbCA9IHNlbGVjdG9yICYgMzsKLQljcGwgPSBjdHh0LT5vcHMtPmNwbChjdHh0KTsKIAogCS8qIE5VTEwgc2VsZWN0b3IgaXMgbm90IHZhbGlkIGZvciBUUiwgQ1MgYW5kIFNTIChleGNlcHQgZm9yIGxvbmcgbW9kZSkgKi8KIAlpZiAoKHNlZyA9PSBWQ1BVX1NSRUdfQ1MKQEAgLTE0ODYsNiArMTQ4Nyw5IEBACiAJCQlnb3RvIGV4Y2VwdGlvbjsKIAkJYnJlYWs7CiAJY2FzZSBWQ1BVX1NSRUdfQ1M6CisJCWlmIChpbl90YXNrX3N3aXRjaCAmJiBycGwgIT0gZHBsKQorCQkJZ290byBleGNlcHRpb247CisKIAkJaWYgKCEoc2VnX2Rlc2MudHlwZSAmIDgpKQogCQkJZ290byBleGNlcHRpb247CiAKQEAgLTE1NDMsNiArMTU0NywxMyBAQAogCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIH0KIAorc3RhdGljIGludCBsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQkgICB1MTYgc2VsZWN0b3IsIGludCBzZWcpCit7CisJdTggY3BsID0gY3R4dC0+b3BzLT5jcGwoY3R4dCk7CisJcmV0dXJuIF9fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgc2VsZWN0b3IsIHNlZywgY3BsLCBmYWxzZSk7Cit9CisKIHN0YXRpYyB2b2lkIHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQoc3RydWN0IG9wZXJhbmQgKm9wKQogewogCS8qIFRoZSA0LWJ5dGUgY2FzZSAqaXMqIGNvcnJlY3Q6IGluIDY0LWJpdCBtb2RlIHdlIHplcm8tZXh0ZW5kLiAqLwpAQCAtMjQwNCw2ICsyNDE1LDcgQEAKIAkJCQkgc3RydWN0IHRzc19zZWdtZW50XzE2ICp0c3MpCiB7CiAJaW50IHJldDsKKwl1OCBjcGw7CiAKIAljdHh0LT5fZWlwID0gdHNzLT5pcDsKIAljdHh0LT5lZmxhZ3MgPSB0c3MtPmZsYWcgfCAyOwpAQCAtMjQyNiwyMyArMjQzOCwyNSBAQAogCXNldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIHRzcy0+c3MsIFZDUFVfU1JFR19TUyk7CiAJc2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgdHNzLT5kcywgVkNQVV9TUkVHX0RTKTsKIAorCWNwbCA9IHRzcy0+Y3MgJiAzOworCiAJLyoKIAkgKiBOb3cgbG9hZCBzZWdtZW50IGRlc2NyaXB0b3JzLiBJZiBmYXVsdCBoYXBwZW5zIGF0IHRoaXMgc3RhZ2UKIAkgKiBpdCBpcyBoYW5kbGVkIGluIGEgY29udGV4dCBvZiBuZXcgdGFzawogCSAqLwotCXJldCA9IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+bGR0LCBWQ1BVX1NSRUdfTERUUik7CisJcmV0ID0gX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LCB0c3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIsIGNwbCwgdHJ1ZSk7CiAJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmV0OwotCXJldCA9IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+ZXMsIFZDUFVfU1JFR19FUyk7CisJcmV0ID0gX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LCB0c3MtPmVzLCBWQ1BVX1NSRUdfRVMsIGNwbCwgdHJ1ZSk7CiAJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmV0OwotCXJldCA9IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+Y3MsIFZDUFVfU1JFR19DUyk7CisJcmV0ID0gX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LCB0c3MtPmNzLCBWQ1BVX1NSRUdfQ1MsIGNwbCwgdHJ1ZSk7CiAJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmV0OwotCXJldCA9IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+c3MsIFZDUFVfU1JFR19TUyk7CisJcmV0ID0gX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LCB0c3MtPnNzLCBWQ1BVX1NSRUdfU1MsIGNwbCwgdHJ1ZSk7CiAJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmV0OwotCXJldCA9IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+ZHMsIFZDUFVfU1JFR19EUyk7CisJcmV0ID0gX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LCB0c3MtPmRzLCBWQ1BVX1NSRUdfRFMsIGNwbCwgdHJ1ZSk7CiAJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNDk2LDcgKzI1MTAsNyBAQAogc3RhdGljIHZvaWQgc2F2ZV9zdGF0ZV90b190c3MzMihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCQlzdHJ1Y3QgdHNzX3NlZ21lbnRfMzIgKnRzcykKIHsKLQl0c3MtPmNyMyA9IGN0eHQtPm9wcy0+Z2V0X2NyKGN0eHQsIDMpOworCS8qIENSMyBhbmQgbGR0IHNlbGVjdG9yIGFyZSBub3Qgc2F2ZWQgaW50ZW50aW9uYWxseSAqLwogCXRzcy0+ZWlwID0gY3R4dC0+X2VpcDsKIAl0c3MtPmVmbGFncyA9IGN0eHQtPmVmbGFnczsKIAl0c3MtPmVheCA9IHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQVgpOwpAQCAtMjUxNCwxMyArMjUyOCwxMyBAQAogCXRzcy0+ZHMgPSBnZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCBWQ1BVX1NSRUdfRFMpOwogCXRzcy0+ZnMgPSBnZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCBWQ1BVX1NSRUdfRlMpOwogCXRzcy0+Z3MgPSBnZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCBWQ1BVX1NSRUdfR1MpOwotCXRzcy0+bGR0X3NlbGVjdG9yID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0xEVFIpOwogfQogCiBzdGF0aWMgaW50IGxvYWRfc3RhdGVfZnJvbV90c3MzMihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCQkgc3RydWN0IHRzc19zZWdtZW50XzMyICp0c3MpCiB7CiAJaW50IHJldDsKKwl1OCBjcGw7CiAKIAlpZiAoY3R4dC0+b3BzLT5zZXRfY3IoY3R4dCwgMywgdHNzLT5jcjMpKQogCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKQEAgLTI1MzksNyArMjU1Myw4IEBACiAKIAkvKgogCSAqIFNETSBzYXlzIHRoYXQgc2VnbWVudCBzZWxlY3RvcnMgYXJlIGxvYWRlZCBiZWZvcmUgc2VnbWVudAotCSAqIGRlc2NyaXB0b3JzCisJICogZGVzY3JpcHRvcnMuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIENQTCBjaGVja3Mgd2lsbAorCSAqIHVzZSBDUy5SUEwuCiAJICovCiAJc2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgdHNzLT5sZHRfc2VsZWN0b3IsIFZDUFVfU1JFR19MRFRSKTsKIAlzZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCB0c3MtPmVzLCBWQ1BVX1NSRUdfRVMpOwpAQCAtMjU1Myw0MyArMjU2OCwzOCBAQAogCSAqIElmIHdlJ3JlIHN3aXRjaGluZyBiZXR3ZWVuIFByb3RlY3RlZCBNb2RlIGFuZCBWTTg2LCB3ZSBuZWVkIHRvIG1ha2UKIAkgKiBzdXJlIHRvIHVwZGF0ZSB0aGUgbW9kZSBiZWZvcmUgbG9hZGluZyB0aGUgc2VnbWVudCBkZXNjcmlwdG9ycyBzbwogCSAqIHRoYXQgdGhlIHNlbGVjdG9ycyBhcmUgaW50ZXJwcmV0ZWQgY29ycmVjdGx5LgotCSAqCi0JICogTmVlZCB0byBnZXQgcmZsYWdzIHRvIHRoZSB2Y3B1IHN0cnVjdCBpbW1lZGlhdGVseSBiZWNhdXNlIGl0Ci0JICogaW5mbHVlbmNlcyB0aGUgQ1BMIHdoaWNoIGlzIGNoZWNrZWQgYXQgbGVhc3Qgd2hlbiBsb2FkaW5nIHRoZSBzZWdtZW50Ci0JICogZGVzY3JpcHRvcnMgYW5kIHdoZW4gcHVzaGluZyBhbiBlcnJvciBjb2RlIHRvIHRoZSBuZXcga2VybmVsIHN0YWNrLgotCSAqCi0JICogVE9ETyBJbnRyb2R1Y2UgYSBzZXBhcmF0ZSBjdHh0LT5vcHMtPnNldF9jcGwgY2FsbGJhY2sKIAkgKi8KLQlpZiAoY3R4dC0+ZWZsYWdzICYgWDg2X0VGTEFHU19WTSkKKwlpZiAoY3R4dC0+ZWZsYWdzICYgWDg2X0VGTEFHU19WTSkgewogCQljdHh0LT5tb2RlID0gWDg2RU1VTF9NT0RFX1ZNODY7Ci0JZWxzZQorCQljcGwgPSAzOworCX0gZWxzZSB7CiAJCWN0eHQtPm1vZGUgPSBYODZFTVVMX01PREVfUFJPVDMyOwotCi0JY3R4dC0+b3BzLT5zZXRfcmZsYWdzKGN0eHQsIGN0eHQtPmVmbGFncyk7CisJCWNwbCA9IHRzcy0+Y3MgJiAzOworCX0KIAogCS8qCiAJICogTm93IGxvYWQgc2VnbWVudCBkZXNjcmlwdG9ycy4gSWYgZmF1bHQgaGFwcGVuZXMgYXQgdGhpcyBzdGFnZQogCSAqIGl0IGlzIGhhbmRsZWQgaW4gYSBjb250ZXh0IG9mIG5ldyB0YXNrCiAJICovCi0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5sZHRfc2VsZWN0b3IsIFZDUFVfU1JFR19MRFRSKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+bGR0X3NlbGVjdG9yLCBWQ1BVX1NSRUdfTERUUiwgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5lcywgVkNQVV9TUkVHX0VTKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+ZXMsIFZDUFVfU1JFR19FUywgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5jcywgVkNQVV9TUkVHX0NTKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+Y3MsIFZDUFVfU1JFR19DUywgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5zcywgVkNQVV9TUkVHX1NTKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+c3MsIFZDUFVfU1JFR19TUywgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5kcywgVkNQVV9TUkVHX0RTKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+ZHMsIFZDUFVfU1JFR19EUywgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5mcywgVkNQVV9TUkVHX0ZTKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+ZnMsIFZDUFVfU1JFR19GUywgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgdHNzLT5ncywgVkNQVV9TUkVHX0dTKTsKKwlyZXQgPSBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQsIHRzcy0+Z3MsIFZDUFVfU1JFR19HUywgY3BsLCB0cnVlKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2MDQsNiArMjYxNCw4IEBACiAJc3RydWN0IHRzc19zZWdtZW50XzMyIHRzc19zZWc7CiAJaW50IHJldDsKIAl1MzIgbmV3X3Rzc19iYXNlID0gZ2V0X2Rlc2NfYmFzZShuZXdfZGVzYyk7CisJdTMyIGVpcF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdHNzX3NlZ21lbnRfMzIsIGVpcCk7CisJdTMyIGxkdF9zZWxfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRzc19zZWdtZW50XzMyLCBsZHRfc2VsZWN0b3IpOwogCiAJcmV0ID0gb3BzLT5yZWFkX3N0ZChjdHh0LCBvbGRfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywKIAkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKQEAgLTI2MTMsOCArMjYyNSw5IEBACiAKIAlzYXZlX3N0YXRlX3RvX3RzczMyKGN0eHQsICZ0c3Nfc2VnKTsKIAotCXJldCA9IG9wcy0+d3JpdGVfc3RkKGN0eHQsIG9sZF90c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLAotCQkJICAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKKwkvKiBPbmx5IEdQIHJlZ2lzdGVycyBhbmQgc2VnbWVudCBzZWxlY3RvcnMgYXJlIHNhdmVkICovCisJcmV0ID0gb3BzLT53cml0ZV9zdGQoY3R4dCwgb2xkX3Rzc19iYXNlICsgZWlwX29mZnNldCwgJnRzc19zZWcuZWlwLAorCQkJICAgICBsZHRfc2VsX29mZnNldCAtIGVpcF9vZmZzZXQsICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KIAkJcmV0dXJuIHJldDsKQEAgLTMzODYsMTAgKzMzOTksNiBAQAogCQljdHh0LT5vcHMtPmdldF9tc3IoY3R4dCwgTVNSX0VGRVIsICZlZmVyKTsKIAkJaWYgKGVmZXIgJiBFRkVSX0xNQSkKIAkJCXJzdmQgPSBDUjNfTF9NT0RFX1JFU0VSVkVEX0JJVFM7Ci0JCWVsc2UgaWYgKGN0eHQtPm9wcy0+Z2V0X2NyKGN0eHQsIDQpICYgWDg2X0NSNF9QQUUpCi0JCQlyc3ZkID0gQ1IzX1BBRV9SRVNFUlZFRF9CSVRTOwotCQllbHNlIGlmIChjdHh0LT5vcHMtPmdldF9jcihjdHh0LCAwKSAmIFg4Nl9DUjBfUEcpCi0JCQlyc3ZkID0gQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTOwogCiAJCWlmIChuZXdfdmFsICYgcnN2ZCkKIAkJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwpAQCAtMzg2OSwxMCArMzg3OCwxMiBAQAogCU4sIE4sIE4sIE4sIE4sIE4sIE4sIE4sCiAJRChJbXBsaWNpdE9wcyB8IE1vZFJNKSwgTiwgTiwgTiwgTiwgTiwgTiwgRChJbXBsaWNpdE9wcyB8IE1vZFJNKSwKIAkvKiAweDIwIC0gMHgyRiAqLwotCURJUChNb2RSTSB8IERzdE1lbSB8IFByaXYgfCBPcDMyNjQsIGNyX3JlYWQsIGNoZWNrX2NyX3JlYWQpLAotCURJUChNb2RSTSB8IERzdE1lbSB8IFByaXYgfCBPcDMyNjQsIGRyX3JlYWQsIGNoZWNrX2RyX3JlYWQpLAotCUlJUChNb2RSTSB8IFNyY01lbSB8IFByaXYgfCBPcDMyNjQsIGVtX2NyX3dyaXRlLCBjcl93cml0ZSwgY2hlY2tfY3Jfd3JpdGUpLAotCUlJUChNb2RSTSB8IFNyY01lbSB8IFByaXYgfCBPcDMyNjQsIGVtX2RyX3dyaXRlLCBkcl93cml0ZSwgY2hlY2tfZHJfd3JpdGUpLAorCURJUChNb2RSTSB8IERzdE1lbSB8IFByaXYgfCBPcDMyNjQgfCBOb01vZCwgY3JfcmVhZCwgY2hlY2tfY3JfcmVhZCksCisJRElQKE1vZFJNIHwgRHN0TWVtIHwgUHJpdiB8IE9wMzI2NCB8IE5vTW9kLCBkcl9yZWFkLCBjaGVja19kcl9yZWFkKSwKKwlJSVAoTW9kUk0gfCBTcmNNZW0gfCBQcml2IHwgT3AzMjY0IHwgTm9Nb2QsIGVtX2NyX3dyaXRlLCBjcl93cml0ZSwKKwkJCQkJCWNoZWNrX2NyX3dyaXRlKSwKKwlJSVAoTW9kUk0gfCBTcmNNZW0gfCBQcml2IHwgT3AzMjY0IHwgTm9Nb2QsIGVtX2RyX3dyaXRlLCBkcl93cml0ZSwKKwkJCQkJCWNoZWNrX2RyX3dyaXRlKSwKIAlOLCBOLCBOLCBOLAogCUdQKE1vZFJNIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW92IHwgU3NlLCAmcGZ4XzBmXzI4XzBmXzI5KSwKIAlHUChNb2RSTSB8IERzdE1lbSB8IFNyY1JlZyB8IE1vdiB8IFNzZSwgJnBmeF8wZl8yOF8wZl8yOSksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmMgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKaW5kZXggNDg0YmM4Ny4uYmQwZGE0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5jCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuYwpAQCAtMTEzLDYgKzExMyw3IEBACiAKIAlyZXR1cm4ga3ZtX2dldF9hcGljX2ludGVycnVwdCh2KTsJLyogQVBJQyAqLwogfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2NwdV9nZXRfaW50ZXJydXB0KTsKIAogdm9pZCBrdm1faW5qZWN0X3BlbmRpbmdfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDk3MzY1MjkuLjAwNjkxMTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0zNjAsNiArMzYwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X2lzcihpbnQgdmVjLCBzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQogeworCS8qIE5vdGUgdGhhdCB3ZSBuZXZlciBnZXQgaGVyZSB3aXRoIEFQSUMgdmlydHVhbGl6YXRpb24gZW5hYmxlZC4gICovCisKIAlpZiAoIV9fYXBpY190ZXN0X2FuZF9zZXRfdmVjdG9yKHZlYywgYXBpYy0+cmVncyArIEFQSUNfSVNSKSkKIAkJKythcGljLT5pc3JfY291bnQ7CiAJQlVHX09OKGFwaWMtPmlzcl9jb3VudCA+IE1BWF9BUElDX1ZFQ1RPUik7CkBAIC0zNzEsMTIgKzM3Myw0OCBAQAogCWFwaWMtPmhpZ2hlc3RfaXNyX2NhY2hlID0gdmVjOwogfQogCitzdGF0aWMgaW5saW5lIGludCBhcGljX2ZpbmRfaGlnaGVzdF9pc3Ioc3RydWN0IGt2bV9sYXBpYyAqYXBpYykKK3sKKwlpbnQgcmVzdWx0OworCisJLyoKKwkgKiBOb3RlIHRoYXQgaXNyX2NvdW50IGlzIGFsd2F5cyAxLCBhbmQgaGlnaGVzdF9pc3JfY2FjaGUKKwkgKiBpcyBhbHdheXMgLTEsIHdpdGggQVBJQyB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLgorCSAqLworCWlmICghYXBpYy0+aXNyX2NvdW50KQorCQlyZXR1cm4gLTE7CisJaWYgKGxpa2VseShhcGljLT5oaWdoZXN0X2lzcl9jYWNoZSAhPSAtMSkpCisJCXJldHVybiBhcGljLT5oaWdoZXN0X2lzcl9jYWNoZTsKKworCXJlc3VsdCA9IGZpbmRfaGlnaGVzdF92ZWN0b3IoYXBpYy0+cmVncyArIEFQSUNfSVNSKTsKKwlBU1NFUlQocmVzdWx0ID09IC0xIHx8IHJlc3VsdCA+PSAxNik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19jbGVhcl9pc3IoaW50IHZlYywgc3RydWN0IGt2bV9sYXBpYyAqYXBpYykKIHsKLQlpZiAoX19hcGljX3Rlc3RfYW5kX2NsZWFyX3ZlY3Rvcih2ZWMsIGFwaWMtPnJlZ3MgKyBBUElDX0lTUikpCisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCWlmICghX19hcGljX3Rlc3RfYW5kX2NsZWFyX3ZlY3Rvcih2ZWMsIGFwaWMtPnJlZ3MgKyBBUElDX0lTUikpCisJCXJldHVybjsKKworCXZjcHUgPSBhcGljLT52Y3B1OworCisJLyoKKwkgKiBXZSBkbyBnZXQgaGVyZSBmb3IgQVBJQyB2aXJ0dWFsaXphdGlvbiBlbmFibGVkIGlmIHRoZSBndWVzdAorCSAqIHVzZXMgdGhlIEh5cGVyLVYgQVBJQyBlbmxpZ2h0ZW5tZW50LiAgSW4gdGhpcyBjYXNlIHdlIG1heSBuZWVkCisJICogdG8gdHJpZ2dlciBhIG5ldyBpbnRlcnJ1cHQgZGVsaXZlcnkgYnkgd3JpdGluZyB0aGUgU1ZJIGZpZWxkOworCSAqIG9uIHRoZSBvdGhlciBoYW5kIGlzcl9jb3VudCBhbmQgaGlnaGVzdF9pc3JfY2FjaGUgYXJlIHVudXNlZAorCSAqIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUuCisJICovCisJaWYgKHVubGlrZWx5KGt2bV9hcGljX3ZpZF9lbmFibGVkKHZjcHUtPmt2bSkpKQorCQlrdm1feDg2X29wcy0+aHdhcGljX2lzcl91cGRhdGUodmNwdS0+a3ZtLAorCQkJCQkgICAgICAgYXBpY19maW5kX2hpZ2hlc3RfaXNyKGFwaWMpKTsKKwllbHNlIHsKIAkJLS1hcGljLT5pc3JfY291bnQ7Ci0JQlVHX09OKGFwaWMtPmlzcl9jb3VudCA8IDApOwotCWFwaWMtPmhpZ2hlc3RfaXNyX2NhY2hlID0gLTE7CisJCUJVR19PTihhcGljLT5pc3JfY291bnQgPCAwKTsKKwkJYXBpYy0+aGlnaGVzdF9pc3JfY2FjaGUgPSAtMTsKKwl9CiB9CiAKIGludCBrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC00NTYsMjIgKzQ5NCw2IEBACiAJX19jbGVhcl9iaXQoS1ZNX0FQSUNfUFZfRU9JX1BFTkRJTkcsICZ2Y3B1LT5hcmNoLmFwaWNfYXR0ZW50aW9uKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXBpY19maW5kX2hpZ2hlc3RfaXNyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCi17Ci0JaW50IHJlc3VsdDsKLQotCS8qIE5vdGUgdGhhdCBpc3JfY291bnQgaXMgYWx3YXlzIDEgd2l0aCB2aWQgZW5hYmxlZCAqLwotCWlmICghYXBpYy0+aXNyX2NvdW50KQotCQlyZXR1cm4gLTE7Ci0JaWYgKGxpa2VseShhcGljLT5oaWdoZXN0X2lzcl9jYWNoZSAhPSAtMSkpCi0JCXJldHVybiBhcGljLT5oaWdoZXN0X2lzcl9jYWNoZTsKLQotCXJlc3VsdCA9IGZpbmRfaGlnaGVzdF92ZWN0b3IoYXBpYy0+cmVncyArIEFQSUNfSVNSKTsKLQlBU1NFUlQocmVzdWx0ID09IC0xIHx8IHJlc3VsdCA+PSAxNik7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCiB2b2lkIGt2bV9hcGljX3VwZGF0ZV90bXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnRtcikKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS0+YXJjaC5hcGljOwpAQCAtMTYwNSw2ICsxNjI3LDggQEAKIAlpbnQgdmVjdG9yID0ga3ZtX2FwaWNfaGFzX2ludGVycnVwdCh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS0+YXJjaC5hcGljOwogCisJLyogTm90ZSB0aGF0IHdlIG5ldmVyIGdldCBoZXJlIHdpdGggQVBJQyB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiAgKi8KKwogCWlmICh2ZWN0b3IgPT0gLTEpCiAJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDgxM2QzMTAuLjkzMTQ2NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJtbXUuaCIKICNpbmNsdWRlICJ4ODYuaCIKICNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgorI2luY2x1ZGUgImNwdWlkLmgiCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC01OTUsNyArNTk2LDggQEAKIAkgKiB3ZSBhbHdheXMgYXRvbWljbHkgdXBkYXRlIGl0LCBzZWUgdGhlIGNvbW1lbnRzIGluCiAJICogc3B0ZV9oYXNfdm9sYXRpbGVfYml0cygpLgogCSAqLwotCWlmIChpc193cml0YWJsZV9wdGUob2xkX3NwdGUpICYmICFpc193cml0YWJsZV9wdGUobmV3X3NwdGUpKQorCWlmIChzcHRlX2lzX2xvY2tsZXNzbHlfbW9kaWZpYWJsZShvbGRfc3B0ZSkgJiYKKwkgICAgICAhaXNfd3JpdGFibGVfcHRlKG5ld19zcHRlKSkKIAkJcmV0ID0gdHJ1ZTsKIAogCWlmICghc2hhZG93X2FjY2Vzc2VkX21hc2spCkBAIC0xMTc2LDggKzExNzgsNyBAQAogCiAvKgogICogV3JpdGUtcHJvdGVjdCBvbiB0aGUgc3BlY2lmaWVkIEBzcHRlcCwgQHB0X3Byb3RlY3QgaW5kaWNhdGVzIHdoZXRoZXIKLSAqIHNwdGUgd3JpdC1wcm90ZWN0aW9uIGlzIGNhdXNlZCBieSBwcm90ZWN0aW5nIHNoYWRvdyBwYWdlIHRhYmxlLgotICogQGZsdXNoIGluZGljYXRlcyB3aGV0aGVyIHRsYiBuZWVkIGJlIGZsdXNoZWQuCisgKiBzcHRlIHdyaXRlLXByb3RlY3Rpb24gaXMgY2F1c2VkIGJ5IHByb3RlY3Rpbmcgc2hhZG93IHBhZ2UgdGFibGUuCiAgKgogICogTm90ZTogd3JpdGUgcHJvdGVjdGlvbiBpcyBkaWZmZXJlbmNlIGJldHdlZW4gZHJpdHkgbG9nZ2luZyBhbmQgc3B0ZQogICogcHJvdGVjdGlvbjoKQEAgLTExODYsMTAgKzExODcsOSBAQAogICogLSBmb3Igc3B0ZSBwcm90ZWN0aW9uLCB0aGUgc3B0ZSBjYW4gYmUgd3JpdGFibGUgb25seSBhZnRlciB1bnN5bmMtaW5nCiAgKiAgIHNoYWRvdyBwYWdlLgogICoKLSAqIFJldHVybiB0cnVlIGlmIHRoZSBzcHRlIGlzIGRyb3BwZWQuCisgKiBSZXR1cm4gdHJ1ZSBpZiB0bGIgbmVlZCBiZSBmbHVzaGVkLgogICovCi1zdGF0aWMgYm9vbAotc3B0ZV93cml0ZV9wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlcCwgYm9vbCAqZmx1c2gsIGJvb2wgcHRfcHJvdGVjdCkKK3N0YXRpYyBib29sIHNwdGVfd3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqc3B0ZXAsIGJvb2wgcHRfcHJvdGVjdCkKIHsKIAl1NjQgc3B0ZSA9ICpzcHRlcDsKIApAQCAtMTE5OSwxNyArMTE5OSwxMSBAQAogCiAJcm1hcF9wcmludGsoInJtYXBfd3JpdGVfcHJvdGVjdDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlcCwgKnNwdGVwKTsKIAotCWlmIChfX2Ryb3BfbGFyZ2Vfc3B0ZShrdm0sIHNwdGVwKSkgewotCQkqZmx1c2ggfD0gdHJ1ZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCiAJaWYgKHB0X3Byb3RlY3QpCiAJCXNwdGUgJj0gflNQVEVfTU1VX1dSSVRFQUJMRTsKIAlzcHRlID0gc3B0ZSAmIH5QVF9XUklUQUJMRV9NQVNLOwogCi0JKmZsdXNoIHw9IG1tdV9zcHRlX3VwZGF0ZShzcHRlcCwgc3B0ZSk7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiBtbXVfc3B0ZV91cGRhdGUoc3B0ZXAsIHNwdGUpOwogfQogCiBzdGF0aWMgYm9vbCBfX3JtYXBfd3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLApAQCAtMTIyMSwxMSArMTIxNSw4IEBACiAKIAlmb3IgKHNwdGVwID0gcm1hcF9nZXRfZmlyc3QoKnJtYXBwLCAmaXRlcik7IHNwdGVwOykgewogCQlCVUdfT04oISgqc3B0ZXAgJiBQVF9QUkVTRU5UX01BU0spKTsKLQkJaWYgKHNwdGVfd3JpdGVfcHJvdGVjdChrdm0sIHNwdGVwLCAmZmx1c2gsIHB0X3Byb3RlY3QpKSB7Ci0JCQlzcHRlcCA9IHJtYXBfZ2V0X2ZpcnN0KCpybWFwcCwgJml0ZXIpOwotCQkJY29udGludWU7Ci0JCX0KIAorCQlmbHVzaCB8PSBzcHRlX3dyaXRlX3Byb3RlY3Qoa3ZtLCBzcHRlcCwgcHRfcHJvdGVjdCk7CiAJCXNwdGVwID0gcm1hcF9nZXRfbmV4dCgmaXRlcik7CiAJfQogCkBAIC0yODAyLDkgKzI3OTMsOSBAQAogfQogCiBzdGF0aWMgYm9vbAotZmFzdF9wZl9maXhfZGlyZWN0X3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNwdGVwLCB1NjQgc3B0ZSkKK2Zhc3RfcGZfZml4X2RpcmVjdF9zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQl1NjQgKnNwdGVwLCB1NjQgc3B0ZSkKIHsKLQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKTsKIAlnZm5fdCBnZm47CiAKIAlXQVJOX09OKCFzcC0+cm9sZS5kaXJlY3QpOwpAQCAtMjgzMCw2ICsyODIxLDcgQEAKIAkJCSAgICB1MzIgZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAJdTY0IHNwdGUgPSAwdWxsOwogCkBAIC0yODUzLDcgKzI4NDUsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaWYgKCFpc19sYXN0X3NwdGUoc3B0ZSwgbGV2ZWwpKQorCXNwID0gcGFnZV9oZWFkZXIoX19wYShpdGVyYXRvci5zcHRlcCkpOworCWlmICghaXNfbGFzdF9zcHRlKHNwdGUsIHNwLT5yb2xlLmxldmVsKSkKIAkJZ290byBleGl0OwogCiAJLyoKQEAgLTI4NzUsMTEgKzI4NjgsMjQgQEAKIAkJZ290byBleGl0OwogCiAJLyoKKwkgKiBEbyBub3QgZml4IHdyaXRlLXBlcm1pc3Npb24gb24gdGhlIGxhcmdlIHNwdGUgc2luY2Ugd2Ugb25seSBkaXJ0eQorCSAqIHRoZSBmaXJzdCBwYWdlIGludG8gdGhlIGRpcnR5LWJpdG1hcCBpbiBmYXN0X3BmX2ZpeF9kaXJlY3Rfc3B0ZSgpCisJICogdGhhdCBtZWFucyBvdGhlciBwYWdlcyBhcmUgbWlzc2VkIGlmIGl0cyBzbG90IGlzIGRpcnR5LWxvZ2dlZC4KKwkgKgorCSAqIEluc3RlYWQsIHdlIGxldCB0aGUgc2xvdyBwYWdlIGZhdWx0IHBhdGggY3JlYXRlIGEgbm9ybWFsIHNwdGUgdG8KKwkgKiBmaXggdGhlIGFjY2Vzcy4KKwkgKgorCSAqIFNlZSB0aGUgY29tbWVudHMgaW4ga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oKS4KKwkgKi8KKwlpZiAoc3AtPnJvbGUubGV2ZWwgPiBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlnb3RvIGV4aXQ7CisKKwkvKgogCSAqIEN1cnJlbnRseSwgZmFzdCBwYWdlIGZhdWx0IG9ubHkgd29ya3MgZm9yIGRpcmVjdCBtYXBwaW5nIHNpbmNlCiAJICogdGhlIGdmbiBpcyBub3Qgc3RhYmxlIGZvciBpbmRpcmVjdCBzaGFkb3cgcGFnZS4KIAkgKiBTZWUgRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9sb2NraW5nLnR4dCB0byBnZXQgbW9yZSBkZXRhaWwuCiAJICovCi0JcmV0ID0gZmFzdF9wZl9maXhfZGlyZWN0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIHNwdGUpOworCXJldCA9IGZhc3RfcGZfZml4X2RpcmVjdF9zcHRlKHZjcHUsIHNwLCBpdGVyYXRvci5zcHRlcCwgc3B0ZSk7CiBleGl0OgogCXRyYWNlX2Zhc3RfcGFnZV9mYXVsdCh2Y3B1LCBndmEsIGVycm9yX2NvZGUsIGl0ZXJhdG9yLnNwdGVwLAogCQkJICAgICAgc3B0ZSwgcmV0KTsKQEAgLTM1MTEsMTEgKzM1MTcsMTQgQEAKIHsKIAlpbnQgbWF4cGh5YWRkciA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7CiAJdTY0IGV4Yl9iaXRfcnN2ZCA9IDA7CisJdTY0IGdicGFnZXNfYml0X3JzdmQgPSAwOwogCiAJY29udGV4dC0+YmFkX210X3h3ciA9IDA7CiAKIAlpZiAoIWNvbnRleHQtPm54KQogCQlleGJfYml0X3JzdmQgPSByc3ZkX2JpdHMoNjMsIDYzKTsKKwlpZiAoIWd1ZXN0X2NwdWlkX2hhc19nYnBhZ2VzKHZjcHUpKQorCQlnYnBhZ2VzX2JpdF9yc3ZkID0gcnN2ZF9iaXRzKDcsIDcpOwogCXN3aXRjaCAoY29udGV4dC0+cm9vdF9sZXZlbCkgewogCWNhc2UgUFQzMl9ST09UX0xFVkVMOgogCQkvKiBubyByc3ZkIGJpdHMgZm9yIDIgbGV2ZWwgNEsgcGFnZSB0YWJsZSBlbnRyaWVzICovCkBAIC0zNTM4LDcgKzM1NDcsNyBAQAogCWNhc2UgUFQzMkVfUk9PVF9MRVZFTDoKIAkJY29udGV4dC0+cnN2ZF9iaXRzX21hc2tbMF1bMl0gPQogCQkJcnN2ZF9iaXRzKG1heHBoeWFkZHIsIDYzKSB8Ci0JCQlyc3ZkX2JpdHMoNywgOCkgfCByc3ZkX2JpdHMoMSwgMik7CS8qIFBEUFRFICovCisJCQlyc3ZkX2JpdHMoNSwgOCkgfCByc3ZkX2JpdHMoMSwgMik7CS8qIFBEUFRFICovCiAJCWNvbnRleHQtPnJzdmRfYml0c19tYXNrWzBdWzFdID0gZXhiX2JpdF9yc3ZkIHwKIAkJCXJzdmRfYml0cyhtYXhwaHlhZGRyLCA2Mik7CS8qIFBERSAqLwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1swXVswXSA9IGV4Yl9iaXRfcnN2ZCB8CkBAIC0zNTUwLDE2ICszNTU5LDE2IEBACiAJCWJyZWFrOwogCWNhc2UgUFQ2NF9ST09UX0xFVkVMOgogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1swXVszXSA9IGV4Yl9iaXRfcnN2ZCB8Ci0JCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwgcnN2ZF9iaXRzKDcsIDgpOworCQkJcnN2ZF9iaXRzKG1heHBoeWFkZHIsIDUxKSB8IHJzdmRfYml0cyg3LCA3KTsKIAkJY29udGV4dC0+cnN2ZF9iaXRzX21hc2tbMF1bMl0gPSBleGJfYml0X3JzdmQgfAotCQkJcnN2ZF9iaXRzKG1heHBoeWFkZHIsIDUxKSB8IHJzdmRfYml0cyg3LCA4KTsKKwkJCWdicGFnZXNfYml0X3JzdmQgfCByc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1swXVsxXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1swXVswXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVszXSA9IGNvbnRleHQtPnJzdmRfYml0c19tYXNrWzBdWzNdOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsyXSA9IGV4Yl9iaXRfcnN2ZCB8Ci0JCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKKwkJCWdicGFnZXNfYml0X3JzdmQgfCByc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKIAkJCXJzdmRfYml0cygxMywgMjkpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsxXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKQEAgLTQzMDQsMTUgKzQzMTMsMzIgQEAKIAkJCWlmICgqcm1hcHApCiAJCQkJX19ybWFwX3dyaXRlX3Byb3RlY3Qoa3ZtLCBybWFwcCwgZmFsc2UpOwogCi0JCQlpZiAobmVlZF9yZXNjaGVkKCkgfHwgc3Bpbl9uZWVkYnJlYWsoJmt2bS0+bW11X2xvY2spKSB7Ci0JCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CisJCQlpZiAobmVlZF9yZXNjaGVkKCkgfHwgc3Bpbl9uZWVkYnJlYWsoJmt2bS0+bW11X2xvY2spKQogCQkJCWNvbmRfcmVzY2hlZF9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKLQkJCX0KIAkJfQogCX0KIAotCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKKworCS8qCisJICoga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3MoKSBhbmQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coKQorCSAqIHdoaWNoIGRvIHRsYiBmbHVzaCBvdXQgb2YgbW11LWxvY2sgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgYnkKKwkgKiBrdm0tPnNsb3RzX2xvY2sgb3RoZXJ3aXNlIHRsYiBmbHVzaCB3b3VsZCBiZSBtaXNzZWQuCisJICovCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgma3ZtLT5zbG90c19sb2NrKTsKKworCS8qCisJICogV2UgY2FuIGZsdXNoIGFsbCB0aGUgVExCcyBvdXQgb2YgdGhlIG1tdSBsb2NrIHdpdGhvdXQgVExCCisJICogY29ycnVwdGlvbiBzaW5jZSB3ZSBqdXN0IGNoYW5nZSB0aGUgc3B0ZSBmcm9tIHdyaXRhYmxlIHRvCisJICogcmVhZG9ubHkgc28gdGhhdCB3ZSBvbmx5IG5lZWQgdG8gY2FyZSB0aGUgY2FzZSBvZiBjaGFuZ2luZworCSAqIHNwdGUgZnJvbSBwcmVzZW50IHRvIHByZXNlbnQgKGNoYW5naW5nIHRoZSBzcHRlIGZyb20gcHJlc2VudAorCSAqIHRvIG5vbnByZXNlbnQgd2lsbCBmbHVzaCBhbGwgdGhlIFRMQnMgaW1tZWRpYXRlbHkpLCBpbiBvdGhlcgorCSAqIHdvcmRzLCB0aGUgb25seSBjYXNlIHdlIGNhcmUgaXMgbW11X3NwdGVfdXBkYXRlKCkgd2hlcmUgd2UKKwkgKiBoYXZlZCBjaGVja2VkIFNQVEVfSE9TVF9XUklURUFCTEUgfCBTUFRFX01NVV9XUklURUFCTEUKKwkgKiBpbnN0ZWFkIG9mIFBUX1dSSVRBQkxFX01BU0ssIHRoYXQgbWVhbnMgaXQgZG9lcyBub3QgZGVwZW5kCisJICogb24gUFRfV1JJVEFCTEVfTUFTSyBhbnltb3JlLgorCSAqLworCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogfQogCiAjZGVmaW5lIEJBVENIX1pBUF9QQUdFUwkxMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oCmluZGV4IDM4NDJlNzAuLmI5ODIxMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAorKysgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAgLTEwNCw2ICsxMDQsMzkgQEAKIAlyZXR1cm4gcHRlICYgUFRfUFJFU0VOVF9NQVNLOwogfQogCisvKgorICogQ3VycmVudGx5LCB3ZSBoYXZlIHR3byBzb3J0cyBvZiB3cml0ZS1wcm90ZWN0aW9uLCBhKSB0aGUgZmlyc3Qgb25lCisgKiB3cml0ZS1wcm90ZWN0cyBndWVzdCBwYWdlIHRvIHN5bmMgdGhlIGd1ZXN0IG1vZGlmaWNhdGlvbiwgYikgYW5vdGhlciBvbmUgaXMKKyAqIHVzZWQgdG8gc3luYyBkaXJ0eSBiaXRtYXAgd2hlbiB3ZSBkbyBLVk1fR0VUX0RJUlRZX0xPRy4gVGhlIGRpZmZlcmVuY2VzCisgKiBiZXR3ZWVuIHRoZXNlIHR3byBzb3J0cyBhcmU6CisgKiAxKSB0aGUgZmlyc3QgY2FzZSBjbGVhcnMgU1BURV9NTVVfV1JJVEVBQkxFIGJpdC4KKyAqIDIpIHRoZSBmaXJzdCBjYXNlIHJlcXVpcmVzIGZsdXNoaW5nIHRsYiBpbW1lZGlhdGVseSBhdm9pZGluZyBjb3JydXB0aW5nCisgKiAgICBzaGFkb3cgcGFnZSB0YWJsZSBiZXR3ZWVuIGFsbCB2Y3B1cyBzbyBpdCBzaG91bGQgYmUgaW4gdGhlIHByb3RlY3Rpb24gb2YKKyAqICAgIG1tdS1sb2NrLiBBbmQgdGhlIGFub3RoZXIgY2FzZSBkb2VzIG5vdCBuZWVkIHRvIGZsdXNoIHRsYiB1bnRpbCByZXR1cm5pbmcKKyAqICAgIHRoZSBkaXJ0eSBiaXRtYXAgdG8gdXNlcnNwYWNlIHNpbmNlIGl0IG9ubHkgd3JpdGUtcHJvdGVjdHMgdGhlIHBhZ2UKKyAqICAgIGxvZ2dlZCBpbiB0aGUgYml0bWFwLCB0aGF0IG1lYW5zIHRoZSBwYWdlIGluIHRoZSBkaXJ0eSBiaXRtYXAgaXMgbm90CisgKiAgICBtaXNzZWQsIHNvIGl0IGNhbiBmbHVzaCB0bGIgb3V0IG9mIG1tdS1sb2NrLgorICoKKyAqIFNvLCB0aGVyZSBpcyB0aGUgcHJvYmxlbTogdGhlIGZpcnN0IGNhc2UgY2FuIG1lZXQgdGhlIGNvcnJ1cHRlZCB0bGIgY2F1c2VkCisgKiBieSBhbm90aGVyIGNhc2Ugd2hpY2ggd3JpdGUtcHJvdGVjdHMgcGFnZXMgYnV0IHdpdGhvdXQgZmx1c2ggdGxiCisgKiBpbW1lZGlhdGVseS4gSW4gb3JkZXIgdG8gbWFraW5nIHRoZSBmaXJzdCBjYXNlIGJlIGF3YXJlIHRoaXMgcHJvYmxlbSB3ZSBsZXQKKyAqIGl0IGZsdXNoIHRsYiBpZiB3ZSB0cnkgdG8gd3JpdGUtcHJvdGVjdCBhIHNwdGUgd2hvc2UgU1BURV9NTVVfV1JJVEVBQkxFIGJpdAorICogaXMgc2V0LCBpdCB3b3JrcyBzaW5jZSBhbm90aGVyIGNhc2UgbmV2ZXIgdG91Y2hlcyBTUFRFX01NVV9XUklURUFCTEUgYml0LgorICoKKyAqIEFueXdheSwgd2hlbmV2ZXIgYSBzcHRlIGlzIHVwZGF0ZWQgKG9ubHkgcGVybWlzc2lvbiBhbmQgc3RhdHVzIGJpdHMgYXJlCisgKiBjaGFuZ2VkKSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwdGUgd2l0aCBTUFRFX01NVV9XUklURUFCTEUgYmVjb21lcworICogcmVhZG9ubHksIGlmIHRoYXQgaGFwcGVucywgd2UgbmVlZCB0byBmbHVzaCB0bGIuIEZvcnR1bmF0ZWx5LAorICogbW11X3NwdGVfdXBkYXRlKCkgaGFzIGFscmVhZHkgaGFuZGxlZCBpdCBwZXJmZWN0bHkuCisgKgorICogVGhlIHJ1bGVzIHRvIHVzZSBTUFRFX01NVV9XUklURUFCTEUgYW5kIFBUX1dSSVRBQkxFX01BU0s6CisgKiAtIGlmIHdlIHdhbnQgdG8gc2VlIGlmIGl0IGhhcyB3cml0YWJsZSB0bGIgZW50cnkgb3IgaWYgdGhlIHNwdGUgY2FuIGJlCisgKiAgIHdyaXRhYmxlIG9uIHRoZSBtbXUgbWFwcGluZywgY2hlY2sgU1BURV9NTVVfV1JJVEVBQkxFLCB0aGlzIGlzIHRoZSBtb3N0CisgKiAgIGNhc2UsIG90aGVyd2lzZQorICogLSBpZiB3ZSBmaXggcGFnZSBmYXVsdCBvbiB0aGUgc3B0ZSBvciBkbyB3cml0ZS1wcm90ZWN0aW9uIGJ5IGRpcnR5IGxvZ2dpbmcsCisgKiAgIGNoZWNrIFBUX1dSSVRBQkxFX01BU0suCisgKgorICogVE9ETzogaW50cm9kdWNlIEFQSXMgdG8gc3BsaXQgdGhlc2UgdHdvIGNhc2VzLgorICovCiBzdGF0aWMgaW5saW5lIGludCBpc193cml0YWJsZV9wdGUodW5zaWduZWQgbG9uZyBwdGUpCiB7CiAJcmV0dXJuIHB0ZSAmIFBUX1dSSVRBQkxFX01BU0s7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDEyM2VmZDMuLjQxMDc3NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC05MTMsOCArOTEzLDcgQEAKICAqICAgYW5kIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCBkZXRlY3QgdGhlIG1hcHBpbmcgcGFnZSBpc24ndAogICogICB1c2VkIGJ5IGd1ZXN0IHRoZW4gdGxicyBhcmUgbm90IGZsdXNoZWQsIHNvIGd1ZXN0IGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZQogICogICBmcmVlZCBwYWdlcy4KLSAqICAgV2Ugc2V0IHRsYnNfZGlydHkgdG8gbGV0IHRoZSBub3RpZmllciBrbm93IHRoaXMgY2hhbmdlIGFuZCBkZWxheSB0aGUgZmx1c2gKLSAqICAgdW50aWwgc3VjaCBhIGNhc2UgYWN0dWFsbHkgaGFwcGVucy4KKyAqICAgQW5kIHdlIGluY3JlYXNlIGt2bS0+dGxic19kaXJ0eSB0byBkZWxheSB0bGJzIGZsdXNoIGluIHRoaXMgY2FzZS4KICAqLwogc3RhdGljIGludCBGTkFNRShzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CkBAIC05NDMsNyArOTQyLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmIChGTkFNRShwcmVmZXRjaF9pbnZhbGlkX2dwdGUpKHZjcHUsIHNwLCAmc3AtPnNwdFtpXSwgZ3B0ZSkpIHsKLQkJCXZjcHUtPmt2bS0+dGxic19kaXJ0eSA9IHRydWU7CisJCQl2Y3B1LT5rdm0tPnRsYnNfZGlydHkrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTk1OCw3ICs5NTcsNyBAQAogCiAJCWlmIChnZm4gIT0gc3AtPmdmbnNbaV0pIHsKIAkJCWRyb3Bfc3B0ZSh2Y3B1LT5rdm0sICZzcC0+c3B0W2ldKTsKLQkJCXZjcHUtPmt2bS0+dGxic19kaXJ0eSA9IHRydWU7CisJCQl2Y3B1LT5rdm0tPnRsYnNfZGlydHkrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wbXUuYyBiL2FyY2gveDg2L2t2bS9wbXUuYwppbmRleCA1YzRmNjMxLi5jYmVjYWE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcG11LmMKKysrIGIvYXJjaC94ODYva3ZtL3BtdS5jCkBAIC0xMDgsNyArMTA4LDEwIEBACiB7CiAJc3RydWN0IGt2bV9wbWMgKnBtYyA9IHBlcmZfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXJfY29udGV4dDsKIAlzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gJnBtYy0+dmNwdS0+YXJjaC5wbXU7Ci0JX19zZXRfYml0KHBtYy0+aWR4LCAodW5zaWduZWQgbG9uZyAqKSZwbXUtPmdsb2JhbF9zdGF0dXMpOworCWlmICghdGVzdF9hbmRfc2V0X2JpdChwbWMtPmlkeCwgKHVuc2lnbmVkIGxvbmcgKikmcG11LT5yZXByb2dyYW1fcG1pKSkgeworCQlfX3NldF9iaXQocG1jLT5pZHgsICh1bnNpZ25lZCBsb25nICopJnBtdS0+Z2xvYmFsX3N0YXR1cyk7CisJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9QTVUsIHBtYy0+dmNwdSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBrdm1fcGVyZl9vdmVyZmxvd19pbnRyKHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LApAQCAtMTE3LDcgKzEyMCw3IEBACiAJc3RydWN0IGt2bV9wbWMgKnBtYyA9IHBlcmZfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXJfY29udGV4dDsKIAlzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gJnBtYy0+dmNwdS0+YXJjaC5wbXU7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBtYy0+aWR4LCAodW5zaWduZWQgbG9uZyAqKSZwbXUtPnJlcHJvZ3JhbV9wbWkpKSB7Ci0JCWt2bV9wZXJmX292ZXJmbG93KHBlcmZfZXZlbnQsIGRhdGEsIHJlZ3MpOworCQlfX3NldF9iaXQocG1jLT5pZHgsICh1bnNpZ25lZCBsb25nICopJnBtdS0+Z2xvYmFsX3N0YXR1cyk7CiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9QTVUsIHBtYy0+dmNwdSk7CiAJCS8qCiAJCSAqIEluamVjdCBQTUkuIElmIHZjcHUgd2FzIGluIGEgZ3Vlc3QgbW9kZSBkdXJpbmcgTk1JIFBNSQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDdmNGY5YzIuLmVjODM2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTEzMzgsMjEgKzEzMzgsNiBAQAogCQl3cm1zcmwoaG9zdF9zYXZlX3VzZXJfbXNyc1tpXSwgc3ZtLT5ob3N0X3VzZXJfbXNyc1tpXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN2bV91cGRhdGVfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlpbnQgY3BsOwotCi0JaWYgKCFpc19wcm90bW9kZSh2Y3B1KSkKLQkJY3BsID0gMDsKLQllbHNlIGlmIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19WTSkKLQkJY3BsID0gMzsKLQllbHNlCi0JCWNwbCA9IHN2bS0+dm1jYi0+c2F2ZS5jcy5zZWxlY3RvciAmIDB4MzsKLQotCXN2bS0+dm1jYi0+c2F2ZS5jcGwgPSBjcGw7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN2bV9nZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLnJmbGFnczsKQEAgLTEzNjAsMTEgKzEzNDUsMTIgQEAKIAogc3RhdGljIHZvaWQgc3ZtX3NldF9yZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJmbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG9sZF9yZmxhZ3MgPSB0b19zdm0odmNwdSktPnZtY2ItPnNhdmUucmZsYWdzOwotCisgICAgICAgLyoKKyAgICAgICAgKiBBbnkgY2hhbmdlIG9mIEVGTEFHUy5WTSBpcyBhY2NvbXBhaW5lZCBieSBhIHJlbG9hZCBvZiBTUworICAgICAgICAqIChjYXVzZWQgYnkgZWl0aGVyIGEgdGFzayBzd2l0Y2ggb3IgYW4gaW50ZXItcHJpdmlsZWdlIElSRVQpLAorICAgICAgICAqIHNvIHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSB0aGUgQ1BMIGhlcmUuCisgICAgICAgICovCiAJdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLnJmbGFncyA9IHJmbGFnczsKLQlpZiAoKG9sZF9yZmxhZ3MgXiByZmxhZ3MpICYgWDg2X0VGTEFHU19WTSkKLQkJc3ZtX3VwZGF0ZV9jcGwodmNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKQpAQCAtMTYzMSw4ICsxNjE3LDE1IEBACiAJCXMtPmF0dHJpYiB8PSAodmFyLT5kYiAmIDEpIDw8IFNWTV9TRUxFQ1RPUl9EQl9TSElGVDsKIAkJcy0+YXR0cmliIHw9ICh2YXItPmcgJiAxKSA8PCBTVk1fU0VMRUNUT1JfR19TSElGVDsKIAl9Ci0JaWYgKHNlZyA9PSBWQ1BVX1NSRUdfQ1MpCi0JCXN2bV91cGRhdGVfY3BsKHZjcHUpOworCisJLyoKKwkgKiBUaGlzIGlzIGFsd2F5cyBhY2N1cmF0ZSwgZXhjZXB0IGlmIFNZU1JFVCByZXR1cm5lZCB0byBhIHNlZ21lbnQKKwkgKiB3aXRoIFNTLkRQTCAhPSAzLiAgSW50ZWwgZG9lcyBub3QgaGF2ZSB0aGlzIHF1aXJrLCBhbmQgYWx3YXlzCisJICogZm9yY2VzIFNTLkRQTCB0byAzIG9uIHN5c3JldCwgc28gd2UgaWdub3JlIHRoYXQgY2FzZTsgZml4aW5nIGl0CisJICogd291bGQgZW50YWlsIHBhc3NpbmcgdGhlIENQTCB0byB1c2Vyc3BhY2UgYW5kIGJhY2suCisJICovCisJaWYgKHNlZyA9PSBWQ1BVX1NSRUdfU1MpCisJCXN2bS0+dm1jYi0+c2F2ZS5jcGwgPSAocy0+YXR0cmliID4+IFNWTV9TRUxFQ1RPUl9EUExfU0hJRlQpICYgMzsKIAogCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX1NFRyk7CiB9CkBAIC0yNzcwLDEyICsyNzYzLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpbnZhbGlkX29wX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKLXsKLQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIFVEX1ZFQ1RPUik7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgdGFza19zd2l0Y2hfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewogCXUxNiB0c3Nfc2VsZWN0b3I7CkBAIC0zMjg3LDYgKzMyNzQsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBub3BfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJihzdm0tPnZjcHUpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtb25pdG9yX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImt2bTogTU9OSVRPUiBpbnN0cnVjdGlvbiBlbXVsYXRlZCBhcyBOT1AhXG4iKTsKKwlyZXR1cm4gbm9wX2ludGVyY2VwdGlvbihzdm0pOworfQorCitzdGF0aWMgaW50IG13YWl0X2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImt2bTogTVdBSVQgaW5zdHJ1Y3Rpb24gZW11bGF0ZWQgYXMgTk9QIVxuIik7CisJcmV0dXJuIG5vcF9pbnRlcmNlcHRpb24oc3ZtKTsKK30KKwogc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKSA9IHsKIAlbU1ZNX0VYSVRfUkVBRF9DUjBdCQkJPSBjcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1JFQURfQ1IzXQkJCT0gY3JfaW50ZXJjZXB0aW9uLApAQCAtMzM0NCw4ICszMzQ5LDggQEAKIAlbU1ZNX0VYSVRfQ0xHSV0JCQkJPSBjbGdpX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfU0tJTklUXQkJCT0gc2tpbml0X2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV0JJTlZEXSAgICAgICAgICAgICAgICAgICAgICAgPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfTU9OSVRPUl0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9NV0FJVF0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9NT05JVE9SXQkJCT0gbW9uaXRvcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX01XQUlUXQkJCT0gbXdhaXRfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9YU0VUQlZdCQkJPSB4c2V0YnZfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9OUEZdCQkJCT0gcGZfaW50ZXJjZXB0aW9uLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS90cmFjZS5oIGIvYXJjaC94ODYva3ZtL3RyYWNlLmgKaW5kZXggNTQ1MjQ1ZC4uMzM1NzRjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3RyYWNlLmgKKysrIGIvYXJjaC94ODYva3ZtL3RyYWNlLmgKQEAgLTkxLDE2ICs5MSwyMSBAQAogLyoKICAqIFRyYWNlcG9pbnQgZm9yIFBJTy4KICAqLworCisjZGVmaW5lIEtWTV9QSU9fSU4gICAwCisjZGVmaW5lIEtWTV9QSU9fT1VUICAxCisKIFRSQUNFX0VWRU5UKGt2bV9waW8sCiAJVFBfUFJPVE8odW5zaWduZWQgaW50IHJ3LCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IHNpemUsCi0JCSB1bnNpZ25lZCBpbnQgY291bnQpLAotCVRQX0FSR1MocncsIHBvcnQsIHNpemUsIGNvdW50KSwKKwkJIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAqZGF0YSksCisJVFBfQVJHUyhydywgcG9ydCwgc2l6ZSwgY291bnQsIGRhdGEpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJdW5zaWduZWQgaW50LCAJcncJCSkKIAkJX19maWVsZCgJdW5zaWduZWQgaW50LCAJcG9ydAkJKQogCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIAlzaXplCQkpCiAJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJY291bnQJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl2YWwJCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0xMDgsMTEgKzExMywxOCBAQAogCQlfX2VudHJ5LT5wb3J0CQk9IHBvcnQ7CiAJCV9fZW50cnktPnNpemUJCT0gc2l6ZTsKIAkJX19lbnRyeS0+Y291bnQJCT0gY291bnQ7CisJCWlmIChzaXplID09IDEpCisJCQlfX2VudHJ5LT52YWwJPSAqKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCQllbHNlIGlmIChzaXplID09IDIpCisJCQlfX2VudHJ5LT52YWwJPSAqKHVuc2lnbmVkIHNob3J0ICopZGF0YTsKKwkJZWxzZQorCQkJX19lbnRyeS0+dmFsCT0gKih1bnNpZ25lZCBpbnQgKilkYXRhOwogCSksCiAKLQlUUF9wcmludGsoInBpb18lcyBhdCAweCV4IHNpemUgJWQgY291bnQgJWQiLAorCVRQX3ByaW50aygicGlvXyVzIGF0IDB4JXggc2l6ZSAlZCBjb3VudCAlZCB2YWwgMHgleCAlcyIsCiAJCSAgX19lbnRyeS0+cncgPyAid3JpdGUiIDogInJlYWQiLAotCQkgIF9fZW50cnktPnBvcnQsIF9fZW50cnktPnNpemUsIF9fZW50cnktPmNvdW50KQorCQkgIF9fZW50cnktPnBvcnQsIF9fZW50cnktPnNpemUsIF9fZW50cnktPmNvdW50LCBfX2VudHJ5LT52YWwsCisJCSAgX19lbnRyeS0+Y291bnQgPiAxID8gIiguLi4pIiA6ICIiKQogKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCAxMzhjZWZmLi44MDEzMzJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC0zNTQsNiArMzU0LDcgQEAKIHN0cnVjdCBuZXN0ZWRfdm14IHsKIAkvKiBIYXMgdGhlIGxldmVsMSBndWVzdCBkb25lIHZteG9uPyAqLwogCWJvb2wgdm14b247CisJZ3BhX3Qgdm14b25fcHRyOwogCiAJLyogVGhlIGd1ZXN0LXBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgVk1DUyBMMSBrZWVwcyBmb3IgTDIgKi8KIAlncGFfdCBjdXJyZW50X3ZtcHRyOwpAQCAtNDEzLDcgKzQxNCw2IEBACiAJc3RydWN0IGt2bV92Y3B1ICAgICAgIHZjcHU7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgIGhvc3RfcnNwOwogCXU4ICAgICAgICAgICAgICAgICAgICBmYWlsOwotCXU4ICAgICAgICAgICAgICAgICAgICBjcGw7CiAJYm9vbCAgICAgICAgICAgICAgICAgIG5taV9rbm93bl91bm1hc2tlZDsKIAl1MzIgICAgICAgICAgICAgICAgICAgZXhpdF9pbnRyX2luZm87CiAJdTMyICAgICAgICAgICAgICAgICAgIGlkdF92ZWN0b3JpbmdfaW5mbzsKQEAgLTIyODMsNyArMjI4Myw3IEBACiAJcmRtc3IoTVNSX0lBMzJfVk1YX0VYSVRfQ1RMUywKIAkJbmVzdGVkX3ZteF9leGl0X2N0bHNfbG93LCBuZXN0ZWRfdm14X2V4aXRfY3Rsc19oaWdoKTsKIAluZXN0ZWRfdm14X2V4aXRfY3Rsc19sb3cgPSBWTV9FWElUX0FMV0FZU09OX1dJVEhPVVRfVFJVRV9NU1I7Ci0JLyogTm90ZSB0aGF0IGd1ZXN0IHVzZSBvZiBWTV9FWElUX0FDS19JTlRSX09OX0VYSVQgaXMgbm90IHN1cHBvcnRlZC4gKi8KKwogCW5lc3RlZF92bXhfZXhpdF9jdGxzX2hpZ2ggJj0KICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCVZNX0VYSVRfSE9TVF9BRERSX1NQQUNFX1NJWkUgfApAQCAtMjI5MSw3ICsyMjkxLDggQEAKIAkJVk1fRVhJVF9MT0FEX0lBMzJfUEFUIHwgVk1fRVhJVF9TQVZFX0lBMzJfUEFUOwogCW5lc3RlZF92bXhfZXhpdF9jdGxzX2hpZ2ggfD0gVk1fRVhJVF9BTFdBWVNPTl9XSVRIT1VUX1RSVUVfTVNSIHwKIAkJVk1fRVhJVF9MT0FEX0lBMzJfRUZFUiB8IFZNX0VYSVRfU0FWRV9JQTMyX0VGRVIgfAotCQlWTV9FWElUX1NBVkVfVk1YX1BSRUVNUFRJT05fVElNRVI7CisJCVZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUiB8IFZNX0VYSVRfQUNLX0lOVFJfT05fRVhJVDsKKwogCWlmICh2bXhfbXB4X3N1cHBvcnRlZCgpKQogCQluZXN0ZWRfdm14X2V4aXRfY3Rsc19oaWdoIHw9IFZNX0VYSVRfQ0xFQVJfQk5EQ0ZHUzsKIApAQCAtMjM1MywxMiArMjM1NCwxMSBAQAogCQkJIFZNWF9FUFRfSU5WRVBUX0JJVDsKIAkJbmVzdGVkX3ZteF9lcHRfY2FwcyAmPSB2bXhfY2FwYWJpbGl0eS5lcHQ7CiAJCS8qCi0JCSAqIFNpbmNlIGludmVwdCBpcyBjb21wbGV0ZWx5IGVtdWxhdGVkIHdlIHN1cHBvcnQgYm90aCBnbG9iYWwKLQkJICogYW5kIGNvbnRleHQgaW52YWxpZGF0aW9uIGluZGVwZW5kZW50IG9mIHdoYXQgaG9zdCBjcHUKLQkJICogc3VwcG9ydHMKKwkJICogRm9yIG5lc3RlZCBndWVzdHMsIHdlIGRvbid0IGRvIGFueXRoaW5nIHNwZWNpZmljCisJCSAqIGZvciBzaW5nbGUgY29udGV4dCBpbnZhbGlkYXRpb24uIEhlbmNlLCBvbmx5IGFkdmVydGlzZQorCQkgKiBzdXBwb3J0IGZvciBnbG9iYWwgY29udGV4dCBpbnZhbGlkYXRpb24uCiAJCSAqLwotCQluZXN0ZWRfdm14X2VwdF9jYXBzIHw9IFZNWF9FUFRfRVhURU5UX0dMT0JBTF9CSVQgfAotCQkJVk1YX0VQVF9FWFRFTlRfQ09OVEVYVF9CSVQ7CisJCW5lc3RlZF92bXhfZXB0X2NhcHMgfD0gVk1YX0VQVF9FWFRFTlRfR0xPQkFMX0JJVDsKIAl9IGVsc2UKIAkJbmVzdGVkX3ZteF9lcHRfY2FwcyA9IDA7CiAKQEAgLTMxODYsMTAgKzMxODYsNiBAQAogCWZpeF9wbW9kZV9zZWcodmNwdSwgVkNQVV9TUkVHX0RTLCAmdm14LT5ybW9kZS5zZWdzW1ZDUFVfU1JFR19EU10pOwogCWZpeF9wbW9kZV9zZWcodmNwdSwgVkNQVV9TUkVHX0ZTLCAmdm14LT5ybW9kZS5zZWdzW1ZDUFVfU1JFR19GU10pOwogCWZpeF9wbW9kZV9zZWcodmNwdSwgVkNQVV9TUkVHX0dTLCAmdm14LT5ybW9kZS5zZWdzW1ZDUFVfU1JFR19HU10pOwotCi0JLyogQ1BMIGlzIGFsd2F5cyAwIHdoZW4gQ1BVIGVudGVycyBwcm90ZWN0ZWQgbW9kZSAqLwotCV9fc2V0X2JpdChWQ1BVX0VYUkVHX0NQTCwgKHVsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7Ci0Jdm14LT5jcGwgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBmaXhfcm1vZGVfc2VnKGludCBzZWcsIHN0cnVjdCBrdm1fc2VnbWVudCAqc2F2ZSkKQEAgLTM1OTEsMjIgKzM1ODcsMTQgQEAKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAotCWlmICghaXNfcHJvdG1vZGUodmNwdSkpCisJaWYgKHVubGlrZWx5KHZteC0+cm1vZGUudm04Nl9hY3RpdmUpKQogCQlyZXR1cm4gMDsKLQotCWlmICghaXNfbG9uZ19tb2RlKHZjcHUpCi0JICAgICYmIChrdm1fZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pKSAvKiBpZiB2aXJ0dWFsIDgwODYgKi8KLQkJcmV0dXJuIDM7Ci0KLQlpZiAoIXRlc3RfYml0KFZDUFVfRVhSRUdfQ1BMLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKSkgewotCQlfX3NldF9iaXQoVkNQVV9FWFJFR19DUEwsICh1bG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpOwotCQl2bXgtPmNwbCA9IHZteF9yZWFkX2d1ZXN0X3NlZ19zZWxlY3Rvcih2bXgsIFZDUFVfU1JFR19DUykgJiAzOworCWVsc2UgeworCQlpbnQgYXIgPSB2bXhfcmVhZF9ndWVzdF9zZWdfYXIodm14LCBWQ1BVX1NSRUdfU1MpOworCQlyZXR1cm4gQVJfRFBMKGFyKTsKIAl9Ci0KLQlyZXR1cm4gdm14LT5jcGw7CiB9CiAKLQogc3RhdGljIHUzMiB2bXhfc2VnbWVudF9hY2Nlc3NfcmlnaHRzKHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyKQogewogCXUzMiBhcjsKQEAgLTM2MzQsOCArMzYyMiw2IEBACiAJY29uc3Qgc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOwogCiAJdm14X3NlZ21lbnRfY2FjaGVfY2xlYXIodm14KTsKLQlpZiAoc2VnID09IFZDUFVfU1JFR19DUykKLQkJX19jbGVhcl9iaXQoVkNQVV9FWFJFR19DUEwsICh1bG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpOwogCiAJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUgJiYgc2VnICE9IFZDUFVfU1JFR19MRFRSKSB7CiAJCXZteC0+cm1vZGUuc2Vnc1tzZWddID0gKnZhcjsKQEAgLTQ1NjQsNiArNDU1MCwxNiBAQAogCQlQSU5fQkFTRURfRVhUX0lOVFJfTUFTSzsKIH0KIAorLyoKKyAqIEluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgY2hlY2sgaWYgTDEgaGFzIHNldAorICogVk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUCisgKi8KK3N0YXRpYyBib29sIG5lc3RlZF9leGl0X2ludHJfYWNrX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIGdldF92bWNzMTIodmNwdSktPnZtX2V4aXRfY29udHJvbHMgJgorCQlWTV9FWElUX0FDS19JTlRSX09OX0VYSVQ7Cit9CisKIHN0YXRpYyBib29sIG5lc3RlZF9leGl0X29uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIGdldF92bWNzMTIodmNwdSktPnBpbl9iYXNlZF92bV9leGVjX2NvbnRyb2wgJgpAQCAtNDg3OCw2ICs0ODc0LDkgQEAKIAkJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CiAJCQl2Y3B1LT5hcmNoLmRyNiAmPSB+MTU7CiAJCQl2Y3B1LT5hcmNoLmRyNiB8PSBkcjY7CisJCQlpZiAoIShkcjYgJiB+RFI2X1JFU0VSVkVEKSkgLyogaWNlYnAgKi8KKwkJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCiAJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIERCX1ZFQ1RPUik7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNTE2Niw3ICs1MTY1LDcgQEAKIAkJCXJldHVybiAxOwogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2YWwpOwogCX0gZWxzZQotCQlpZiAoa3ZtX3NldF9kcih2Y3B1LCBkciwgdmNwdS0+YXJjaC5yZWdzW3JlZ10pKQorCQlpZiAoa3ZtX3NldF9kcih2Y3B1LCBkciwga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSkpCiAJCQlyZXR1cm4gMTsKIAogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CkBAIC01NDM5LDcgKzU0MzgsNyBAQAogCX0KIAogCS8qIGNsZWFyIGFsbCBsb2NhbCBicmVha3BvaW50IGVuYWJsZSBmbGFncyAqLwotCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdm1jc19yZWFkbChHVUVTVF9EUjcpICYgfjU1KTsKKwl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZtY3NfcmVhZGwoR1VFU1RfRFI3KSAmIH4weDU1KTsKIAogCS8qCiAJICogVE9ETzogV2hhdCBhYm91dCBkZWJ1ZyB0cmFwcyBvbiB0c3Mgc3dpdGNoPwpAQCAtNTU2NSw2ICs1NTY0LDEwIEBACiAJZ3BhX3QgZ3BhOwogCiAJZ3BhID0gdm1jc19yZWFkNjQoR1VFU1RfUEhZU0lDQUxfQUREUkVTUyk7CisJaWYgKCFrdm1faW9fYnVzX3dyaXRlKHZjcHUtPmt2bSwgS1ZNX0ZBU1RfTU1JT19CVVMsIGdwYSwgMCwgTlVMTCkpIHsKKwkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJcmV0dXJuIDE7CisJfQogCiAJcmV0ID0gaGFuZGxlX21taW9fcGFnZV9mYXVsdF9jb21tb24odmNwdSwgZ3BhLCB0cnVlKTsKIAlpZiAobGlrZWx5KHJldCA9PSBSRVRfTU1JT19QRl9FTVVMQVRFKSkKQEAgLTU2NjksMTIgKzU2NzIsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBoYW5kbGVfaW52YWxpZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgaW50IGhhbmRsZV9ub3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGhhbmRsZV9td2FpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJrdm06IE1XQUlUIGluc3RydWN0aW9uIGVtdWxhdGVkIGFzIE5PUCFcbiIpOworCXJldHVybiBoYW5kbGVfbm9wKHZjcHUpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9tb25pdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImt2bTogTU9OSVRPUiBpbnN0cnVjdGlvbiBlbXVsYXRlZCBhcyBOT1AhXG4iKTsKKwlyZXR1cm4gaGFuZGxlX25vcCh2Y3B1KTsKK30KKwogLyoKICAqIFRvIHJ1biBhbiBMMiBndWVzdCwgd2UgbmVlZCBhIHZtY3MwMiBiYXNlZCBvbiB0aGUgTDEtc3BlY2lmaWVkIHZtY3MxMi4KICAqIFdlIGNvdWxkIHJldXNlIGEgc2luZ2xlIFZNQ1MgZm9yIGFsbCB0aGUgTDIgZ3Vlc3RzLCBidXQgd2UgYWxzbyB3YW50IHRoZQpAQCAtNTgxMiw2ICs1ODI3LDE1NCBAQAogfQogCiAvKgorICogRGVjb2RlIHRoZSBtZW1vcnktYWRkcmVzcyBvcGVyYW5kIG9mIGEgdm14IGluc3RydWN0aW9uLCBhcyByZWNvcmRlZCBvbiBhbgorICogZXhpdCBjYXVzZWQgYnkgc3VjaCBhbiBpbnN0cnVjdGlvbiAocnVuIGJ5IGEgZ3Vlc3QgaHlwZXJ2aXNvcikuCisgKiBPbiBzdWNjZXNzLCByZXR1cm5zIDAuIFdoZW4gdGhlIG9wZXJhbmQgaXMgaW52YWxpZCwgcmV0dXJucyAxIGFuZCB0aHJvd3MKKyAqICNVRCBvciAjR1AuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLAorCQkJCSB1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGd2YV90ICpyZXQpCit7CisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gVm9sLiAzQiwgIkluZm9ybWF0aW9uIGZvciBWTSBFeGl0cyBEdWUgdG8gSW5zdHJ1Y3Rpb24KKwkgKiBFeGVjdXRpb24iLCBvbiBhbiBleGl0LCB2bXhfaW5zdHJ1Y3Rpb25faW5mbyBob2xkcyBtb3N0IG9mIHRoZQorCSAqIGFkZHJlc3NpbmcgY29tcG9uZW50cyBvZiB0aGUgb3BlcmFuZC4gT25seSB0aGUgZGlzcGxhY2VtZW50IHBhcnQKKwkgKiBpcyBwdXQgaW4gZXhpdF9xdWFsaWZpY2F0aW9uIChzZWUgM0IsICJCYXNpYyBWTS1FeGl0IEluZm9ybWF0aW9uIikuCisJICogRm9yIGhvdyBhbiBhY3R1YWwgYWRkcmVzcyBpcyBjYWxjdWxhdGVkIGZyb20gYWxsIHRoZXNlIGNvbXBvbmVudHMsCisJICogcmVmZXIgdG8gVm9sLiAxLCAiT3BlcmFuZCBBZGRyZXNzaW5nIi4KKwkgKi8KKwlpbnQgIHNjYWxpbmcgPSB2bXhfaW5zdHJ1Y3Rpb25faW5mbyAmIDM7CisJaW50ICBhZGRyX3NpemUgPSAodm14X2luc3RydWN0aW9uX2luZm8gPj4gNykgJiA3OworCWJvb2wgaXNfcmVnID0gdm14X2luc3RydWN0aW9uX2luZm8gJiAoMXUgPDwgMTApOworCWludCAgc2VnX3JlZyA9ICh2bXhfaW5zdHJ1Y3Rpb25faW5mbyA+PiAxNSkgJiA3OworCWludCAgaW5kZXhfcmVnID0gKHZteF9pbnN0cnVjdGlvbl9pbmZvID4+IDE4KSAmIDB4ZjsKKwlib29sIGluZGV4X2lzX3ZhbGlkID0gISh2bXhfaW5zdHJ1Y3Rpb25faW5mbyAmICgxdSA8PCAyMikpOworCWludCAgYmFzZV9yZWcgICAgICAgPSAodm14X2luc3RydWN0aW9uX2luZm8gPj4gMjMpICYgMHhmOworCWJvb2wgYmFzZV9pc192YWxpZCAgPSAhKHZteF9pbnN0cnVjdGlvbl9pbmZvICYgKDF1IDw8IDI3KSk7CisKKwlpZiAoaXNfcmVnKSB7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogQWRkciA9IHNlZ21lbnRfYmFzZSArIG9mZnNldCAqLworCS8qIG9mZnNldCA9IGJhc2UgKyBbaW5kZXggKiBzY2FsZV0gKyBkaXNwbGFjZW1lbnQgKi8KKwkqcmV0ID0gdm14X2dldF9zZWdtZW50X2Jhc2UodmNwdSwgc2VnX3JlZyk7CisJaWYgKGJhc2VfaXNfdmFsaWQpCisJCSpyZXQgKz0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgYmFzZV9yZWcpOworCWlmIChpbmRleF9pc192YWxpZCkKKwkJKnJldCArPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBpbmRleF9yZWcpPDxzY2FsaW5nOworCSpyZXQgKz0gZXhpdF9xdWFsaWZpY2F0aW9uOyAvKiBob2xkcyB0aGUgZGlzcGxhY2VtZW50ICovCisKKwlpZiAoYWRkcl9zaXplID09IDEpIC8qIDMyIGJpdCAqLworCQkqcmV0ICY9IDB4ZmZmZmZmZmY7CisKKwkvKgorCSAqIFRPRE86IHRocm93ICNHUCAoYW5kIHJldHVybiAxKSBpbiB2YXJpb3VzIGNhc2VzIHRoYXQgdGhlIFZNKgorCSAqIGluc3RydWN0aW9ucyByZXF1aXJlIGl0IC0gZS5nLiwgb2Zmc2V0IGJleW9uZCBzZWdtZW50IGxpbWl0LAorCSAqIHVudXNhYmxlIG9yIHVucmVhZGFibGUvdW53cml0YWJsZSBzZWdtZW50LCBub24tY2Fub25pY2FsIDY0LWJpdAorCSAqIGFkZHJlc3MsIGFuZCBzbyBvbi4gQ3VycmVudGx5IHRoZXNlIGFyZSBub3QgY2hlY2tlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIHZhcmlvdXMgY2hlY2tzIGluY2x1ZGluZworICogLSBpZiBpdCdzIDRLQiBhbGlnbmVkCisgKiAtIE5vIGJpdHMgYmV5b25kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdpZHRoIGFyZSBzZXQKKyAqIC0gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgZWxzZSAxCisgKiAoSW50ZWwgU0RNIFNlY3Rpb24gMzAuMykKKyAqLworc3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGV4aXRfcmVhc29uLAorCQkJCSAgZ3BhX3QgKnZtcG9pbnRlcikKK3sKKwlndmFfdCBndmE7CisJZ3BhX3Qgdm1wdHI7CisJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKKwlpbnQgbWF4cGh5YWRkciA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7CisKKwlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTiksCisJCQl2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksICZndmEpKQorCQlyZXR1cm4gMTsKKworCWlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCwgZ3ZhLCAmdm1wdHIsCisJCQkJc2l6ZW9mKHZtcHRyKSwgJmUpKSB7CisJCWt2bV9pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCAmZSk7CisJCXJldHVybiAxOworCX0KKworCXN3aXRjaCAoZXhpdF9yZWFzb24pIHsKKwljYXNlIEVYSVRfUkVBU09OX1ZNT046CisJCS8qCisJCSAqIFNETSAzOiAyNC4xMS41CisJCSAqIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIFZNWE9OIHJlZ2lvbiBjb250YWluIHRoZSBzdXBwb3J0ZWQKKwkJICogVk1DUyByZXZpc2lvbiBpZGVudGlmaWVyCisJCSAqCisJCSAqIE5vdGUgLSBJQTMyX1ZNWF9CQVNJQ1s0OF0gd2lsbCBuZXZlciBiZSAxCisJCSAqIGZvciB0aGUgbmVzdGVkIGNhc2U7CisJCSAqIHdoaWNoIHJlcGxhY2VzIHBoeXNpY2FsIGFkZHJlc3Mgd2lkdGggd2l0aCAzMgorCQkgKgorCQkgKi8KKwkJaWYgKCFJU19BTElHTkVEKHZtcHRyLCBQQUdFX1NJWkUpIHx8ICh2bXB0ciA+PiBtYXhwaHlhZGRyKSkgeworCQkJbmVzdGVkX3ZteF9mYWlsSW52YWxpZCh2Y3B1KTsKKwkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCXBhZ2UgPSBuZXN0ZWRfZ2V0X3BhZ2UodmNwdSwgdm1wdHIpOworCQlpZiAocGFnZSA9PSBOVUxMIHx8CisJCSAgICAqKHUzMiAqKWttYXAocGFnZSkgIT0gVk1DUzEyX1JFVklTSU9OKSB7CisJCQluZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpOworCQkJa3VubWFwKHBhZ2UpOworCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJCXJldHVybiAxOworCQl9CisJCWt1bm1hcChwYWdlKTsKKwkJdm14LT5uZXN0ZWQudm14b25fcHRyID0gdm1wdHI7CisJCWJyZWFrOworCWNhc2UgRVhJVF9SRUFTT05fVk1DTEVBUjoKKwkJaWYgKCFJU19BTElHTkVEKHZtcHRyLCBQQUdFX1NJWkUpIHx8ICh2bXB0ciA+PiBtYXhwaHlhZGRyKSkgeworCQkJbmVzdGVkX3ZteF9mYWlsVmFsaWQodmNwdSwKKwkJCQkJICAgICBWTVhFUlJfVk1DTEVBUl9JTlZBTElEX0FERFJFU1MpOworCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKHZtcHRyID09IHZteC0+bmVzdGVkLnZteG9uX3B0cikgeworCQkJbmVzdGVkX3ZteF9mYWlsVmFsaWQodmNwdSwKKwkJCQkJICAgICBWTVhFUlJfVk1DTEVBUl9WTVhPTl9QT0lOVEVSKTsKKwkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVYSVRfUkVBU09OX1ZNUFRSTEQ6CisJCWlmICghSVNfQUxJR05FRCh2bXB0ciwgUEFHRV9TSVpFKSB8fCAodm1wdHIgPj4gbWF4cGh5YWRkcikpIHsKKwkJCW5lc3RlZF92bXhfZmFpbFZhbGlkKHZjcHUsCisJCQkJCSAgICAgVk1YRVJSX1ZNUFRSTERfSU5WQUxJRF9BRERSRVNTKTsKKwkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmICh2bXB0ciA9PSB2bXgtPm5lc3RlZC52bXhvbl9wdHIpIHsKKwkJCW5lc3RlZF92bXhfZmFpbFZhbGlkKHZjcHUsCisJCQkJCSAgICAgVk1YRVJSX1ZNQ0xFQVJfVk1YT05fUE9JTlRFUik7CisJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7IC8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwl9CisKKwlpZiAodm1wb2ludGVyKQorCQkqdm1wb2ludGVyID0gdm1wdHI7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBFbXVsYXRlIHRoZSBWTVhPTiBpbnN0cnVjdGlvbi4KICAqIEN1cnJlbnRseSwgd2UganVzdCByZW1lbWJlciB0aGF0IFZNWCBpcyBhY3RpdmUsIGFuZCBkbyBub3Qgc2F2ZSBvciBldmVuCiAgKiBpbnNwZWN0IHRoZSBhcmd1bWVudCB0byBWTVhPTiAodGhlIHNvLWNhbGxlZCAiVk1YT04gcG9pbnRlciIpIGJlY2F1c2Ugd2UKQEAgLTU4NDksNiArNjAxMiwxMCBAQAogCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwogCQlyZXR1cm4gMTsKIAl9CisKKwlpZiAobmVzdGVkX3ZteF9jaGVja192bXB0cih2Y3B1LCBFWElUX1JFQVNPTl9WTU9OLCBOVUxMKSkKKwkJcmV0dXJuIDE7CisKIAlpZiAodm14LT5uZXN0ZWQudm14b24pIHsKIAkJbmVzdGVkX3ZteF9mYWlsVmFsaWQodmNwdSwgVk1YRVJSX1ZNWE9OX0lOX1ZNWF9ST09UX09QRVJBVElPTik7CiAJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CkBAIC01OTcxLDg4ICs2MTM4LDIwIEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qCi0gKiBEZWNvZGUgdGhlIG1lbW9yeS1hZGRyZXNzIG9wZXJhbmQgb2YgYSB2bXggaW5zdHJ1Y3Rpb24sIGFzIHJlY29yZGVkIG9uIGFuCi0gKiBleGl0IGNhdXNlZCBieSBzdWNoIGFuIGluc3RydWN0aW9uIChydW4gYnkgYSBndWVzdCBoeXBlcnZpc29yKS4KLSAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgMC4gV2hlbiB0aGUgb3BlcmFuZCBpcyBpbnZhbGlkLCByZXR1cm5zIDEgYW5kIHRocm93cwotICogI1VEIG9yICNHUC4KLSAqLwotc3RhdGljIGludCBnZXRfdm14X21lbV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sCi0JCQkJIHUzMiB2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZ3ZhX3QgKnJldCkKLXsKLQkvKgotCSAqIEFjY29yZGluZyB0byBWb2wuIDNCLCAiSW5mb3JtYXRpb24gZm9yIFZNIEV4aXRzIER1ZSB0byBJbnN0cnVjdGlvbgotCSAqIEV4ZWN1dGlvbiIsIG9uIGFuIGV4aXQsIHZteF9pbnN0cnVjdGlvbl9pbmZvIGhvbGRzIG1vc3Qgb2YgdGhlCi0JICogYWRkcmVzc2luZyBjb21wb25lbnRzIG9mIHRoZSBvcGVyYW5kLiBPbmx5IHRoZSBkaXNwbGFjZW1lbnQgcGFydAotCSAqIGlzIHB1dCBpbiBleGl0X3F1YWxpZmljYXRpb24gKHNlZSAzQiwgIkJhc2ljIFZNLUV4aXQgSW5mb3JtYXRpb24iKS4KLQkgKiBGb3IgaG93IGFuIGFjdHVhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgZnJvbSBhbGwgdGhlc2UgY29tcG9uZW50cywKLQkgKiByZWZlciB0byBWb2wuIDEsICJPcGVyYW5kIEFkZHJlc3NpbmciLgotCSAqLwotCWludCAgc2NhbGluZyA9IHZteF9pbnN0cnVjdGlvbl9pbmZvICYgMzsKLQlpbnQgIGFkZHJfc2l6ZSA9ICh2bXhfaW5zdHJ1Y3Rpb25faW5mbyA+PiA3KSAmIDc7Ci0JYm9vbCBpc19yZWcgPSB2bXhfaW5zdHJ1Y3Rpb25faW5mbyAmICgxdSA8PCAxMCk7Ci0JaW50ICBzZWdfcmVnID0gKHZteF9pbnN0cnVjdGlvbl9pbmZvID4+IDE1KSAmIDc7Ci0JaW50ICBpbmRleF9yZWcgPSAodm14X2luc3RydWN0aW9uX2luZm8gPj4gMTgpICYgMHhmOwotCWJvb2wgaW5kZXhfaXNfdmFsaWQgPSAhKHZteF9pbnN0cnVjdGlvbl9pbmZvICYgKDF1IDw8IDIyKSk7Ci0JaW50ICBiYXNlX3JlZyAgICAgICA9ICh2bXhfaW5zdHJ1Y3Rpb25faW5mbyA+PiAyMykgJiAweGY7Ci0JYm9vbCBiYXNlX2lzX3ZhbGlkICA9ICEodm14X2luc3RydWN0aW9uX2luZm8gJiAoMXUgPDwgMjcpKTsKLQotCWlmIChpc19yZWcpIHsKLQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBBZGRyID0gc2VnbWVudF9iYXNlICsgb2Zmc2V0ICovCi0JLyogb2Zmc2V0ID0gYmFzZSArIFtpbmRleCAqIHNjYWxlXSArIGRpc3BsYWNlbWVudCAqLwotCSpyZXQgPSB2bXhfZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBzZWdfcmVnKTsKLQlpZiAoYmFzZV9pc192YWxpZCkKLQkJKnJldCArPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBiYXNlX3JlZyk7Ci0JaWYgKGluZGV4X2lzX3ZhbGlkKQotCQkqcmV0ICs9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIGluZGV4X3JlZyk8PHNjYWxpbmc7Ci0JKnJldCArPSBleGl0X3F1YWxpZmljYXRpb247IC8qIGhvbGRzIHRoZSBkaXNwbGFjZW1lbnQgKi8KLQotCWlmIChhZGRyX3NpemUgPT0gMSkgLyogMzIgYml0ICovCi0JCSpyZXQgJj0gMHhmZmZmZmZmZjsKLQotCS8qCi0JICogVE9ETzogdGhyb3cgI0dQIChhbmQgcmV0dXJuIDEpIGluIHZhcmlvdXMgY2FzZXMgdGhhdCB0aGUgVk0qCi0JICogaW5zdHJ1Y3Rpb25zIHJlcXVpcmUgaXQgLSBlLmcuLCBvZmZzZXQgYmV5b25kIHNlZ21lbnQgbGltaXQsCi0JICogdW51c2FibGUgb3IgdW5yZWFkYWJsZS91bndyaXRhYmxlIHNlZ21lbnQsIG5vbi1jYW5vbmljYWwgNjQtYml0Ci0JICogYWRkcmVzcywgYW5kIHNvIG9uLiBDdXJyZW50bHkgdGhlc2UgYXJlIG5vdCBjaGVja2VkLgotCSAqLwotCXJldHVybiAwOwotfQotCiAvKiBFbXVsYXRlIHRoZSBWTUNMRUFSIGluc3RydWN0aW9uICovCiBzdGF0aWMgaW50IGhhbmRsZV92bWNsZWFyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQlndmFfdCBndmE7CiAJZ3BhX3Qgdm1wdHI7CiAJc3RydWN0IHZtY3MxMiAqdm1jczEyOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTiksCi0JCQl2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksICZndmEpKQorCWlmIChuZXN0ZWRfdm14X2NoZWNrX3ZtcHRyKHZjcHUsIEVYSVRfUkVBU09OX1ZNQ0xFQVIsICZ2bXB0cikpCiAJCXJldHVybiAxOwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQoJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LCBndmEsICZ2bXB0ciwKLQkJCQlzaXplb2Yodm1wdHIpLCAmZSkpIHsKLQkJa3ZtX2luamVjdF9wYWdlX2ZhdWx0KHZjcHUsICZlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKCFJU19BTElHTkVEKHZtcHRyLCBQQUdFX1NJWkUpKSB7Ci0JCW5lc3RlZF92bXhfZmFpbFZhbGlkKHZjcHUsIFZNWEVSUl9WTUNMRUFSX0lOVkFMSURfQUREUkVTUyk7Ci0JCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7Ci0JCXJldHVybiAxOwotCX0KLQogCWlmICh2bXB0ciA9PSB2bXgtPm5lc3RlZC5jdXJyZW50X3ZtcHRyKSB7CiAJCW5lc3RlZF9yZWxlYXNlX3ZtY3MxMih2bXgpOwogCQl2bXgtPm5lc3RlZC5jdXJyZW50X3ZtcHRyID0gLTF1bGw7CkBAIC02MzcyLDMwICs2NDcxLDE1IEBACiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQlndmFfdCBndmE7CiAJZ3BhX3Qgdm1wdHI7Ci0Jc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKIAl1MzIgZXhlY19jb250cm9sOwogCiAJaWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpCiAJCXJldHVybiAxOwogCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pLAotCQkJdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCAmZ3ZhKSkKKwlpZiAobmVzdGVkX3ZteF9jaGVja192bXB0cih2Y3B1LCBFWElUX1JFQVNPTl9WTVBUUkxELCAmdm1wdHIpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCwgZ3ZhLCAmdm1wdHIsCi0JCQkJc2l6ZW9mKHZtcHRyKSwgJmUpKSB7Ci0JCWt2bV9pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCAmZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICghSVNfQUxJR05FRCh2bXB0ciwgUEFHRV9TSVpFKSkgewotCQluZXN0ZWRfdm14X2ZhaWxWYWxpZCh2Y3B1LCBWTVhFUlJfVk1QVFJMRF9JTlZBTElEX0FERFJFU1MpOwotCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KIAlpZiAodm14LT5uZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikgewogCQlzdHJ1Y3Qgdm1jczEyICpuZXdfdm1jczEyOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTY0NzEsNyArNjU1NSw2IEBACiAJc3RydWN0IHsKIAkJdTY0IGVwdHAsIGdwYTsKIAl9IG9wZXJhbmQ7Ci0JdTY0IGVwdHBfbWFzayA9ICgoMXVsbCA8PCA1MSkgLSAxKSAmIFBBR0VfTUFTSzsKIAogCWlmICghKG5lc3RlZF92bXhfc2Vjb25kYXJ5X2N0bHNfaGlnaCAmIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHx8CiAJICAgICEobmVzdGVkX3ZteF9lcHRfY2FwcyAmIFZNWF9FUFRfSU5WRVBUX0JJVCkpIHsKQEAgLTY1MTEsMTYgKzY1OTQsMTMgQEAKIAl9CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFZNWF9FUFRfRVhURU5UX0NPTlRFWFQ6Ci0JCWlmICgob3BlcmFuZC5lcHRwICYgZXB0cF9tYXNrKSAhPQotCQkJCShuZXN0ZWRfZXB0X2dldF9jcjModmNwdSkgJiBlcHRwX21hc2spKQotCQkJYnJlYWs7CiAJY2FzZSBWTVhfRVBUX0VYVEVOVF9HTE9CQUw6CiAJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CiAJCW5lc3RlZF92bXhfc3VjY2VlZCh2Y3B1KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJLyogVHJhcCBzaW5nbGUgY29udGV4dCBpbnZhbGlkYXRpb24gaW52ZXB0IGNhbGxzICovCiAJCUJVR19PTigxKTsKIAkJYnJlYWs7CiAJfQpAQCAtNjU3MSw4ICs2NjUxLDggQEAKIAlbRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTl0JICAgICAgPSBoYW5kbGVfZXB0X3Zpb2xhdGlvbiwKIAlbRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJR10gICAgICAgICAgID0gaGFuZGxlX2VwdF9taXNjb25maWcsCiAJW0VYSVRfUkVBU09OX1BBVVNFX0lOU1RSVUNUSU9OXSAgICAgICA9IGhhbmRsZV9wYXVzZSwKLQlbRVhJVF9SRUFTT05fTVdBSVRfSU5TVFJVQ1RJT05dCSAgICAgID0gaGFuZGxlX2ludmFsaWRfb3AsCi0JW0VYSVRfUkVBU09OX01PTklUT1JfSU5TVFJVQ1RJT05dICAgICA9IGhhbmRsZV9pbnZhbGlkX29wLAorCVtFWElUX1JFQVNPTl9NV0FJVF9JTlNUUlVDVElPTl0JICAgICAgPSBoYW5kbGVfbXdhaXQsCisJW0VYSVRfUkVBU09OX01PTklUT1JfSU5TVFJVQ1RJT05dICAgICA9IGhhbmRsZV9tb25pdG9yLAogCVtFWElUX1JFQVNPTl9JTlZFUFRdICAgICAgICAgICAgICAgICAgPSBoYW5kbGVfaW52ZXB0LAogfTsKIApAQCAtNzQxMyw3ICs3NDkzLDYgQEAKIAogCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKQogCQkJCSAgfCAoMSA8PCBWQ1BVX0VYUkVHX1JGTEFHUykKLQkJCQkgIHwgKDEgPDwgVkNQVV9FWFJFR19DUEwpCiAJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfUERQVFIpCiAJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfU0VHTUVOVFMpCiAJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfQ1IzKSk7CkBAIC04NjAxLDYgKzg2ODAsMTQgQEAKIAlwcmVwYXJlX3ZtY3MxMih2Y3B1LCB2bWNzMTIsIGV4aXRfcmVhc29uLCBleGl0X2ludHJfaW5mbywKIAkJICAgICAgIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAKKwlpZiAoKGV4aXRfcmVhc29uID09IEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVCkKKwkgICAgJiYgbmVzdGVkX2V4aXRfaW50cl9hY2tfc2V0KHZjcHUpKSB7CisJCWludCBpcnEgPSBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSk7CisJCVdBUk5fT04oaXJxIDwgMCk7CisJCXZtY3MxMi0+dm1fZXhpdF9pbnRyX2luZm8gPSBpcnEgfAorCQkJSU5UUl9JTkZPX1ZBTElEX01BU0sgfCBJTlRSX1RZUEVfRVhUX0lOVFI7CisJfQorCiAJdHJhY2Vfa3ZtX25lc3RlZF92bWV4aXRfaW5qZWN0KHZtY3MxMi0+dm1fZXhpdF9yZWFzb24sCiAJCQkJICAgICAgIHZtY3MxMi0+ZXhpdF9xdWFsaWZpY2F0aW9uLAogCQkJCSAgICAgICB2bWNzMTItPmlkdF92ZWN0b3JpbmdfaW5mb19maWVsZCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCAyMDMxNmM2Li5mMzJhMDI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC03MDQsMjUgKzcwNCwxMSBAQAogCX0KIAogCWlmIChpc19sb25nX21vZGUodmNwdSkpIHsKLQkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfUENJREUpKSB7Ci0JCQlpZiAoY3IzICYgQ1IzX1BDSURfRU5BQkxFRF9SRVNFUlZFRF9CSVRTKQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UKLQkJCWlmIChjcjMgJiBDUjNfTF9NT0RFX1JFU0VSVkVEX0JJVFMpCi0JCQkJcmV0dXJuIDE7Ci0JfSBlbHNlIHsKLQkJaWYgKGlzX3BhZSh2Y3B1KSkgewotCQkJaWYgKGNyMyAmIENSM19QQUVfUkVTRVJWRURfQklUUykKLQkJCQlyZXR1cm4gMTsKLQkJCWlmIChpc19wYWdpbmcodmNwdSkgJiYKLQkJCSAgICAhbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC53YWxrX21tdSwgY3IzKSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotCQkvKgotCQkgKiBXZSBkb24ndCBjaGVjayByZXNlcnZlZCBiaXRzIGluIG5vbnBhZSBtb2RlLCBiZWNhdXNlCi0JCSAqIHRoaXMgaXNuJ3QgZW5mb3JjZWQsIGFuZCBWTXdhcmUgZGVwZW5kcyBvbiB0aGlzLgotCQkgKi8KLQl9CisJCWlmIChjcjMgJiBDUjNfTF9NT0RFX1JFU0VSVkVEX0JJVFMpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGlzX3BhZSh2Y3B1KSAmJiBpc19wYWdpbmcodmNwdSkgJiYKKwkJICAgIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmFyY2gud2Fsa19tbXUsIGNyMykpCisJCXJldHVybiAxOwogCiAJdmNwdS0+YXJjaC5jcjMgPSBjcjM7CiAJX19zZXRfYml0KFZDUFVfRVhSRUdfQ1IzLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKQEAgLTE5MzUsNiArMTkyMSw4IEBACiAKIAkJaWYgKCEoZGF0YSAmIEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9FTkFCTEUpKSB7CiAJCQl2Y3B1LT5hcmNoLmh2X3ZhcGljID0gZGF0YTsKKwkJCWlmIChrdm1fbGFwaWNfZW5hYmxlX3B2X2VvaSh2Y3B1LCAwKSkKKwkJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwogCQl9CiAJCWdmbiA9IGRhdGEgPj4gSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0FERFJFU1NfU0hJRlQ7CkBAIC0xOTQ1LDYgKzE5MzMsOCBAQAogCQkJcmV0dXJuIDE7CiAJCXZjcHUtPmFyY2guaHZfdmFwaWMgPSBkYXRhOwogCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOworCQlpZiAoa3ZtX2xhcGljX2VuYWJsZV9wdl9lb2kodmNwdSwgZ2ZuX3RvX2dwYShnZm4pIHwgS1ZNX01TUl9FTkFCTEVEKSkKKwkJCXJldHVybiAxOwogCQlicmVhazsKIAl9CiAJY2FzZSBIVl9YNjRfTVNSX0VPSToKQEAgLTI2NDcsNiArMjYzNyw3IEBACiAJY2FzZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTOgogCWNhc2UgS1ZNX0NBUF9JUlFGRDoKIAljYXNlIEtWTV9DQVBfSU9FVkVOVEZEOgorCWNhc2UgS1ZNX0NBUF9JT0VWRU5URkRfTk9fTEVOR1RIOgogCWNhc2UgS1ZNX0NBUF9QSVQyOgogCWNhc2UgS1ZNX0NBUF9QSVRfU1RBVEUyOgogCWNhc2UgS1ZNX0NBUF9TRVRfSURFTlRJVFlfTUFQX0FERFI6CkBAIC0zNjQ5LDExICszNjQwLDE5IEBACiAJCW9mZnNldCA9IGkgKiBCSVRTX1BFUl9MT05HOwogCQlrdm1fbW11X3dyaXRlX3Byb3RlY3RfcHRfbWFza2VkKGt2bSwgbWVtc2xvdCwgb2Zmc2V0LCBtYXNrKTsKIAl9Ci0JaWYgKGlzX2RpcnR5KQotCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKIAogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAorCS8qIFNlZSB0aGUgY29tbWVudHMgaW4ga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3MoKS4gKi8KKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZrdm0tPnNsb3RzX2xvY2spOworCisJLyoKKwkgKiBBbGwgdGhlIFRMQnMgY2FuIGJlIGZsdXNoZWQgb3V0IG9mIG1tdSBsb2NrLCBzZWUgdGhlIGNvbW1lbnRzIGluCisJICoga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3MoKS4KKwkgKi8KKwlpZiAoaXNfZGlydHkpCisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOworCiAJciA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcihsb2ctPmRpcnR5X2JpdG1hcCwgZGlydHlfYml0bWFwX2J1ZmZlciwgbikpCiAJCWdvdG8gb3V0OwpAQCAtNDQ4OSw4ICs0NDg4LDYgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICp2YWwsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBib29sIGluKQogewotCXRyYWNlX2t2bV9waW8oIWluLCBwb3J0LCBzaXplLCBjb3VudCk7Ci0KIAl2Y3B1LT5hcmNoLnBpby5wb3J0ID0gcG9ydDsKIAl2Y3B1LT5hcmNoLnBpby5pbiA9IGluOwogCXZjcHUtPmFyY2gucGlvLmNvdW50ICA9IGNvdW50OwpAQCAtNDUyNSw2ICs0NTIyLDcgQEAKIAlpZiAocmV0KSB7CiBkYXRhX2F2YWlsOgogCQltZW1jcHkodmFsLCB2Y3B1LT5hcmNoLnBpb19kYXRhLCBzaXplICogY291bnQpOworCQl0cmFjZV9rdm1fcGlvKEtWTV9QSU9fSU4sIHBvcnQsIHNpemUsIGNvdW50LCB2Y3B1LT5hcmNoLnBpb19kYXRhKTsKIAkJdmNwdS0+YXJjaC5waW8uY291bnQgPSAwOwogCQlyZXR1cm4gMTsKIAl9CkBAIC00NTM5LDYgKzQ1MzcsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGVtdWxfdG9fdmNwdShjdHh0KTsKIAogCW1lbWNweSh2Y3B1LT5hcmNoLnBpb19kYXRhLCB2YWwsIHNpemUgKiBjb3VudCk7CisJdHJhY2Vfa3ZtX3BpbyhLVk1fUElPX09VVCwgcG9ydCwgc2l6ZSwgY291bnQsIHZjcHUtPmFyY2gucGlvX2RhdGEpOwogCXJldHVybiBlbXVsYXRvcl9waW9faW5fb3V0KHZjcHUsIHNpemUsIHBvcnQsICh2b2lkICopdmFsLCBjb3VudCwgZmFsc2UpOwogfQogCkBAIC00NjUwLDExICs0NjQ5LDYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRvcl9zZXRfcmZsYWdzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB1bG9uZyB2YWwpCi17Ci0Ja3ZtX3NldF9yZmxhZ3MoZW11bF90b192Y3B1KGN0eHQpLCB2YWwpOwotfQotCiBzdGF0aWMgaW50IGVtdWxhdG9yX2dldF9jcGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJcmV0dXJuIGt2bV94ODZfb3BzLT5nZXRfY3BsKGVtdWxfdG9fdmNwdShjdHh0KSk7CkBAIC00ODM5LDcgKzQ4MzMsNiBAQAogCS5zZXRfaWR0CSAgICAgPSBlbXVsYXRvcl9zZXRfaWR0LAogCS5nZXRfY3IgICAgICAgICAgICAgID0gZW11bGF0b3JfZ2V0X2NyLAogCS5zZXRfY3IgICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X2NyLAotCS5zZXRfcmZsYWdzICAgICAgICAgID0gZW11bGF0b3Jfc2V0X3JmbGFncywKIAkuY3BsICAgICAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9jcGwsCiAJLmdldF9kciAgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfZHIsCiAJLnNldF9kciAgICAgICAgICAgICAgPSBlbXVsYXRvcl9zZXRfZHIsCkBAIC00OTA1LDcgKzQ4OTgsNyBAQAogCWN0eHQtPmVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAljdHh0LT5tb2RlID0gKCFpc19wcm90bW9kZSh2Y3B1KSkJCT8gWDg2RU1VTF9NT0RFX1JFQUwgOgogCQkgICAgIChjdHh0LT5lZmxhZ3MgJiBYODZfRUZMQUdTX1ZNKQk/IFg4NkVNVUxfTU9ERV9WTTg2IDoKLQkJICAgICBjc19sCQkJCT8gWDg2RU1VTF9NT0RFX1BST1Q2NCA6CisJCSAgICAgKGNzX2wgJiYgaXNfbG9uZ19tb2RlKHZjcHUpKQk/IFg4NkVNVUxfTU9ERV9QUk9UNjQgOgogCQkgICAgIGNzX2RiCQkJCT8gWDg2RU1VTF9NT0RFX1BST1QzMiA6CiAJCQkJCQkJICBYODZFTVVMX01PREVfUFJPVDE2OwogCWN0eHQtPmd1ZXN0X21vZGUgPSBpc19ndWVzdF9tb2RlKHZjcHUpOwpAQCAtNzMzMyw4ICs3MzI2LDEyIEBACiAJCWt2bV9tbXVfY2hhbmdlX21tdV9wYWdlcyhrdm0sIG5yX21tdV9wYWdlcyk7CiAJLyoKIAkgKiBXcml0ZSBwcm90ZWN0IGFsbCBwYWdlcyBmb3IgZGlydHkgbG9nZ2luZy4KLQkgKiBFeGlzdGluZyBsYXJnZXBhZ2UgbWFwcGluZ3MgYXJlIGRlc3Ryb3llZCBoZXJlIGFuZCBuZXcgb25lcyB3aWxsCi0JICogbm90IGJlIGNyZWF0ZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgbG9nZ2luZy4KKwkgKgorCSAqIEFsbCB0aGUgc3B0ZXMgaW5jbHVkaW5nIHRoZSBsYXJnZSBzcHRlcyB3aGljaCBwb2ludCB0byB0aGlzCisJICogc2xvdCBhcmUgc2V0IHRvIHJlYWRvbmx5LiBXZSBjYW4gbm90IGNyZWF0ZSBhbnkgbmV3IGxhcmdlCisJICogc3B0ZSBvbiB0aGlzIHNsb3QgdW50aWwgdGhlIGVuZCBvZiB0aGUgbG9nZ2luZy4KKwkgKgorCSAqIFNlZSB0aGUgY29tbWVudHMgaW4gZmFzdF9wYWdlX2ZhdWx0KCkuCiAJICovCiAJaWYgKChjaGFuZ2UgIT0gS1ZNX01SX0RFTEVURSkgJiYgKG1lbS0+ZmxhZ3MgJiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpCiAJCWt2bV9tbXVfc2xvdF9yZW1vdmVfd3JpdGVfYWNjZXNzKGt2bSwgbWVtLT5zbG90KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZSBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQppbmRleCBlYWJjYjZlLi40ZDRmOTZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiAKIG9iai0kKENPTkZJR19TTVApICs9IG1zci1zbXAubyBjYWNoZS1zbXAubwogCi1saWIteSA6PSBkZWxheS5vIG1pc2MubworbGliLXkgOj0gZGVsYXkubyBtaXNjLm8gY21kbGluZS5vCiBsaWIteSArPSB0aHVua18kKEJJVFMpLm8KIGxpYi15ICs9IHVzZXJjb3B5XyQoQklUUykubyB1c2VyY29weS5vIGdldHVzZXIubyBwdXR1c2VyLm8KIGxpYi15ICs9IG1lbWNweV8kKEJJVFMpLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jbWRsaW5lLmMgYi9hcmNoL3g4Ni9saWIvY21kbGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmRiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvY21kbGluZS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIE1pc2MgbGlicmFyaXplZCBmdW5jdGlvbnMgZm9yIGNtZGxpbmUgcG9raW5nLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworc3RhdGljIGlubGluZSBpbnQgbXlpc3NwYWNlKHU4IGMpCit7CisJcmV0dXJuIGMgPD0gJyAnOwkvKiBDbG9zZSBlbm91Z2ggYXBwcm94aW1hdGlvbiAqLworfQorCisvKioKKyAqIEZpbmQgYSBib29sZWFuIG9wdGlvbiAobGlrZSBxdWlldCxub2FwaWMsbm9zbXAuLi4uKQorICoKKyAqIEBjbWRsaW5lOiB0aGUgY21kbGluZSBzdHJpbmcKKyAqIEBvcHRpb246IG9wdGlvbiBzdHJpbmcgdG8gbG9vayBmb3IKKyAqCisgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGF0IEBvcHRpb24gKHN0YXJ0cyBjb3VudGluZyB3aXRoIDEpCisgKiBvciAwIG9uIG5vdCBmb3VuZC4KKyAqLworaW50IGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbChjb25zdCBjaGFyICpjbWRsaW5lLCBjb25zdCBjaGFyICpvcHRpb24pCit7CisJY2hhciBjOworCWludCBsZW4sIHBvcyA9IDAsIHdzdGFydCA9IDA7CisJY29uc3QgY2hhciAqb3BwdHIgPSBOVUxMOworCWVudW0geworCQlzdF93b3Jkc3RhcnQgPSAwLAkvKiBTdGFydCBvZiB3b3JkL2FmdGVyIHdoaXRlc3BhY2UgKi8KKwkJc3Rfd29yZGNtcCwJLyogQ29tcGFyaW5nIHRoaXMgd29yZCAqLworCQlzdF93b3Jkc2tpcCwJLyogTWlzY29tcGFyZSwgc2tpcCAqLworCX0gc3RhdGUgPSBzdF93b3Jkc3RhcnQ7CisKKwlpZiAoIWNtZGxpbmUpCisJCXJldHVybiAtMTsgICAgICAvKiBObyBjb21tYW5kIGxpbmUgKi8KKworCWxlbiA9IG1pbl90KGludCwgc3RybGVuKGNtZGxpbmUpLCBDT01NQU5EX0xJTkVfU0laRSk7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbi0tKSB7CisJCWMgPSAqKGNoYXIgKiljbWRsaW5lKys7CisJCXBvcysrOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBzdF93b3Jkc3RhcnQ6CisJCQlpZiAoIWMpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlIGlmIChteWlzc3BhY2UoYykpCisJCQkJYnJlYWs7CisKKwkJCXN0YXRlID0gc3Rfd29yZGNtcDsKKwkJCW9wcHRyID0gb3B0aW9uOworCQkJd3N0YXJ0ID0gcG9zOworCQkJLyogZmFsbCB0aHJvdWdoICovCisKKwkJY2FzZSBzdF93b3JkY21wOgorCQkJaWYgKCEqb3BwdHIpCisJCQkJaWYgKCFjIHx8IG15aXNzcGFjZShjKSkKKwkJCQkJcmV0dXJuIHdzdGFydDsKKwkJCQllbHNlCisJCQkJCXN0YXRlID0gc3Rfd29yZHNraXA7CisJCQllbHNlIGlmICghYykKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UgaWYgKGMgIT0gKm9wcHRyKyspCisJCQkJc3RhdGUgPSBzdF93b3Jkc2tpcDsKKwkJCWVsc2UgaWYgKCFsZW4pCQkvKiBsYXN0IHdvcmQgYW5kIGlzIG1hdGNoaW5nICovCisJCQkJcmV0dXJuIHdzdGFydDsKKwkJCWJyZWFrOworCisJCWNhc2Ugc3Rfd29yZHNraXA6CisJCQlpZiAoIWMpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlIGlmIChteWlzc3BhY2UoYykpCisJCQkJc3RhdGUgPSBzdF93b3Jkc3RhcnQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOwkvKiBCdWZmZXIgb3ZlcnJ1biAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IDU5N2FjMTUuLmJjNzUyN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTUwLDYgKzUwLDIxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBfX2lvcmVtYXBfY2hlY2tfcmFtKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJICAgICAgIHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7ICsraSkKKwkJaWYgKHBmbl92YWxpZChzdGFydF9wZm4gKyBpKSAmJgorCQkgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShzdGFydF9wZm4gKyBpKSkpCisJCQlyZXR1cm4gMTsKKworCVdBUk5fT05DRSgxLCAiaW9yZW1hcCBvbiBSQU0gcGZuIDB4JWx4XG4iLCBzdGFydF9wZm4pOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBSZW1hcCBhbiBhcmJpdHJhcnkgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbAogICogYWRkcmVzcyBzcGFjZS4gTmVlZGVkIHdoZW4gdGhlIGtlcm5lbCB3YW50cyB0byBhY2Nlc3MgaGlnaCBhZGRyZXNzZXMKQEAgLTkzLDE0ICsxMDgsMTEgQEAKIAkvKgogCSAqIERvbid0IGFsbG93IGFueWJvZHkgdG8gcmVtYXAgbm9ybWFsIFJBTSB0aGF0IHdlJ3JlIHVzaW5nLi4KIAkgKi8KKwlwZm4gICAgICA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwogCWxhc3RfcGZuID0gbGFzdF9hZGRyID4+IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsgcGZuIDw9IGxhc3RfcGZuOyBwZm4rKykgewotCQlpbnQgaXNfcmFtID0gcGFnZV9pc19yYW0ocGZuKTsKLQotCQlpZiAoaXNfcmFtICYmIHBmbl92YWxpZChwZm4pICYmICFQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSkpCi0JCQlyZXR1cm4gTlVMTDsKLQkJV0FSTl9PTl9PTkNFKGlzX3JhbSk7Ci0JfQorCWlmICh3YWxrX3N5c3RlbV9yYW1fcmFuZ2UocGZuLCBsYXN0X3BmbiAtIHBmbiArIDEsIE5VTEwsCisJCQkJICBfX2lvcmVtYXBfY2hlY2tfcmFtKSA9PSAxKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2L21tL3BndGFibGUuYwppbmRleCBjOTYzMTRhLi4wMDA0YWM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCkBAIC0zOTksMTMgKzM5OSwyMCBAQAogaW50IHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewotCWludCB5b3VuZzsKLQotCXlvdW5nID0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHJlc3MsIHB0ZXApOwotCWlmICh5b3VuZykKLQkJZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyZXNzKTsKLQotCXJldHVybiB5b3VuZzsKKwkvKgorCSAqIE9uIHg4NiBDUFVzLCBjbGVhcmluZyB0aGUgYWNjZXNzZWQgYml0IHdpdGhvdXQgYSBUTEIgZmx1c2gKKwkgKiBkb2Vzbid0IGNhdXNlIGRhdGEgY29ycnVwdGlvbi4gWyBJdCBjb3VsZCBjYXVzZSBpbmNvcnJlY3QKKwkgKiBwYWdlIGFnaW5nIGFuZCB0aGUgKG1pc3Rha2VuKSByZWNsYWltIG9mIGhvdCBwYWdlcywgYnV0IHRoZQorCSAqIGNoYW5jZSBvZiB0aGF0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGxvdy4gXQorCSAqCisJICogU28gYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZG9uJ3QgZmx1c2ggdGhlIFRMQiB3aGVuCisJICogY2xlYXJpbmcgdGhlIGFjY2Vzc2VkIGJpdCwgaXQgd2lsbCBldmVudHVhbGx5IGJlIGZsdXNoZWQgYnkKKwkgKiBhIGNvbnRleHQgc3dpdGNoIG9yIGEgVk0gb3BlcmF0aW9uIGFueXdheS4gWyBJbiB0aGUgcmFyZQorCSAqIGV2ZW50IG9mIGl0IG5vdCBnZXR0aW5nIGZsdXNoZWQgZm9yIGEgbG9uZyB0aW1lIHRoZSBkZWxheQorCSAqIHNob3VsZG4ndCByZWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlcmUncyBubyByZWFsIG1lbW9yeQorCSAqIHByZXNzdXJlIGZvciBzd2Fwb3V0IHRvIHJlYWN0IHRvLiBdCisJICovCisJcmV0dXJuIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBhZGRyZXNzLCBwdGVwKTsKIH0KIAogI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FjcGkuYyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKaW5kZXggMDFlZGFjNi4uNTA3NTM3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FjcGkuYworKysgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCkBAIC00ODksOCArNDg5LDEyIEBACiAJfQogCiAJbm9kZSA9IGFjcGlfZ2V0X25vZGUoZGV2aWNlLT5oYW5kbGUpOwotCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkKKwlpZiAobm9kZSA9PSBOVU1BX05PX05PREUpIHsKIAkJbm9kZSA9IHg4Nl9wY2lfcm9vdF9idXNfbm9kZShidXNudW0pOworCQlpZiAobm9kZSAhPSAwICYmIG5vZGUgIT0gTlVNQV9OT19OT0RFKQorCQkJZGV2X2luZm8oJmRldmljZS0+ZGV2LCBGV19CVUcgIm5vIF9QWE07IGZhbGxpbmcgYmFjayB0byBub2RlICVkIGZyb20gaGFyZHdhcmUgKG1heSBiZSBpbmNvbnNpc3RlbnQgd2l0aCBBQ1BJIG5vZGUgbnVtYmVycylcbiIsCisJCQkJbm9kZSk7CisJfQogCiAJaWYgKG5vZGUgIT0gTlVNQV9OT19OT0RFICYmICFub2RlX29ubGluZShub2RlKSkKIAkJbm9kZSA9IE5VTUFfTk9fTk9ERTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMgYi9hcmNoL3g4Ni9wY2kvYW1kX2J1cy5jCmluZGV4IGU4OGY0YzUuLmMyMGQyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMKKysrIGIvYXJjaC94ODYvcGNpL2FtZF9idXMuYwpAQCAtMTEsMjcgKzExLDMzIEBACiAKICNpbmNsdWRlICJidXNfbnVtYS5oIgogCi0vKgotICogVGhpcyBkaXNjb3ZlcnMgdGhlIHBjaWJ1cyA8LT4gbm9kZSBtYXBwaW5nIG9uIEFNRCBLOC4KLSAqIGFsc28gZ2V0IHBlZXIgcm9vdCBidXMgcmVzb3VyY2UgZm9yIGlvLG1taW8KLSAqLworI2RlZmluZSBBTURfTkJfRjBfTk9ERV9JRAkJCTB4NjAKKyNkZWZpbmUgQU1EX05CX0YwX1VOSVRfSUQJCQkweDY0CisjZGVmaW5lIEFNRF9OQl9GMV9DT05GSUdfTUFQX1JFRwkJMHhlMAogCi1zdHJ1Y3QgcGNpX2hvc3RicmlkZ2VfcHJvYmUgeworI2RlZmluZSBSQU5HRV9OVU0JCQkJMTYKKyNkZWZpbmUgQU1EX05CX0YxX0NPTkZJR19NQVBfUkFOR0VTCQk0CisKK3N0cnVjdCBhbWRfaG9zdGJyaWRnZSB7CiAJdTMyIGJ1czsKIAl1MzIgc2xvdDsKLQl1MzIgdmVuZG9yOwogCXUzMiBkZXZpY2U7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9ob3N0YnJpZGdlX3Byb2JlIHBjaV9wcm9iZXNbXSBfX2luaXRkYXRhID0gewotCXsgMCwgMHgxOCwgUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTEwMCB9LAotCXsgMCwgMHgxOCwgUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTIwMCB9LAotCXsgMHhmZiwgMCwgUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTIwMCB9LAotCXsgMCwgMHgxOCwgUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTMwMCB9LAorLyoKKyAqIElNUE9SVEFOVCBOT1RFOgorICogaGJfcHJvYmVzW10gYW5kIGVhcmx5X3Jvb3RfaW5mb19pbml0KCkgaXMgaW4gbWFpbnRlbmFuY2UgbW9kZS4KKyAqIEl0IG9ubHkgc3VwcG9ydHMgSzgsIEZhbTEwaCwgRmFtMTFoLCBhbmQgRmFtMTVoXzAwaC0wZmggLgorICogRnV0dXJlIHByb2Nlc3NvciB3aWxsIHJlbHkgb24gaW5mb3JtYXRpb24gaW4gQUNQSS4KKyAqLworc3RhdGljIHN0cnVjdCBhbWRfaG9zdGJyaWRnZSBoYl9wcm9iZXNbXSBfX2luaXRkYXRhID0geworCXsgMCwgMHgxOCwgMHgxMTAwIH0sIC8qIEs4ICovCisJeyAwLCAweDE4LCAweDEyMDAgfSwgLyogRmFtaWx5MTBoICovCisJeyAweGZmLCAwLCAweDEyMDAgfSwgLyogRmFtaWx5MTBoICovCisJeyAwLCAweDE4LCAweDEzMDAgfSwgLyogRmFtaWx5MTFoICovCisJeyAwLCAweDE4LCAweDE2MDAgfSwgLyogRmFtaWx5MTVoICovCiB9OwogCi0jZGVmaW5lIFJBTkdFX05VTSAxNgotCiBzdGF0aWMgc3RydWN0IHBjaV9yb290X2luZm8gX19pbml0ICpmaW5kX3BjaV9yb290X2luZm8oaW50IG5vZGUsIGludCBsaW5rKQogewogCXN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvOwpAQCAtNDUsMTIgKzUxLDEyIEBACiB9CiAKIC8qKgotICogZWFybHlfZmlsbF9tcF9idXNfdG9fbm9kZSgpCisgKiBlYXJseV9yb290X2luZm9faW5pdCgpCiAgKiBjYWxsZWQgYmVmb3JlIHBjaWJpb3Nfc2Nhbl9yb290IGFuZCBwY2lfc2Nhbl9idXMKLSAqIGZpbGxzIHRoZSBtcF9idXNfdG9fY3B1bWFzayBhcnJheSBiYXNlZCBhY2NvcmRpbmcgdG8gdGhlIExEVCBCdXMgTnVtYmVyCi0gKiBSZWdpc3RlcnMgZm91bmQgaW4gdGhlIEs4IG5vcnRoYnJpZGdlCisgKiBmaWxscyB0aGUgbXBfYnVzX3RvX2NwdW1hc2sgYXJyYXkgYmFzZWQgYWNjb3JkaW5nCisgKiB0byB0aGUgTERUIEJ1cyBOdW1iZXIgUmVnaXN0ZXJzIGZvdW5kIGluIHRoZSBub3J0aGJyaWRnZS4KICAqLwotc3RhdGljIGludCBfX2luaXQgZWFybHlfZmlsbF9tcF9idXNfaW5mbyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfcm9vdF9pbmZvX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBidXM7CkBAIC03NSwxOSArODEsMjEgQEAKIAkJcmV0dXJuIC0xOwogCiAJZm91bmQgPSBmYWxzZTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwY2lfcHJvYmVzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGJfcHJvYmVzKTsgaSsrKSB7CiAJCXUzMiBpZDsKIAkJdTE2IGRldmljZTsKIAkJdTE2IHZlbmRvcjsKIAotCQlidXMgPSBwY2lfcHJvYmVzW2ldLmJ1czsKLQkJc2xvdCA9IHBjaV9wcm9iZXNbaV0uc2xvdDsKKwkJYnVzID0gaGJfcHJvYmVzW2ldLmJ1czsKKwkJc2xvdCA9IGhiX3Byb2Jlc1tpXS5zbG90OwogCQlpZCA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDAsIFBDSV9WRU5ET1JfSUQpOwotCiAJCXZlbmRvciA9IGlkICYgMHhmZmZmOwogCQlkZXZpY2UgPSAoaWQ+PjE2KSAmIDB4ZmZmZjsKLQkJaWYgKHBjaV9wcm9iZXNbaV0udmVuZG9yID09IHZlbmRvciAmJgotCQkgICAgcGNpX3Byb2Jlc1tpXS5kZXZpY2UgPT0gZGV2aWNlKSB7CisKKwkJaWYgKHZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0FNRCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChoYl9wcm9iZXNbaV0uZGV2aWNlID09IGRldmljZSkgewogCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KQEAgLTk2LDEwICsxMDQsMTYgQEAKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gMDsKIAotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkvKgorCSAqIFdlIHNob3VsZCBsZWFybiB0b3BvbG9neSBhbmQgcm91dGluZyBpbmZvcm1hdGlvbiBmcm9tIF9QWE0gYW5kCisJICogX0NSUyBtZXRob2RzIGluIHRoZSBBQ1BJIG5hbWVzcGFjZS4gIFdlIGV4dHJhY3Qgbm9kZSBudW1iZXJzCisJICogaGVyZSB0byB3b3JrIGFyb3VuZCBCSU9TZXMgdGhhdCBkb24ndCBzdXBwbHkgX1BYTS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQU1EX05CX0YxX0NPTkZJR19NQVBfUkFOR0VTOyBpKyspIHsKIAkJaW50IG1pbl9idXM7CiAJCWludCBtYXhfYnVzOwotCQlyZWcgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCAxLCAweGUwICsgKGkgPDwgMikpOworCQlyZWcgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCAxLAorCQkJCUFNRF9OQl9GMV9DT05GSUdfTUFQX1JFRyArIChpIDw8IDIpKTsKIAogCQkvKiBDaGVjayBpZiB0aGF0IHJlZ2lzdGVyIGlzIGVuYWJsZWQgZm9yIGJ1cyByYW5nZSAqLwogCQlpZiAoKHJlZyAmIDcpICE9IDMpCkBAIC0xMTMsMTAgKzEyNywyMSBAQAogCQlpbmZvID0gYWxsb2NfcGNpX3Jvb3RfaW5mbyhtaW5fYnVzLCBtYXhfYnVzLCBub2RlLCBsaW5rKTsKIAl9CiAKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgY29kZSBleHRyYWN0cyByb3V0aW5nIGluZm9ybWF0aW9uIGZvciB1c2Ugb24gb2xkCisJICogc3lzdGVtcyB3aGVyZSBMaW51eCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgdXNlIGhvc3QgYnJpZGdlIF9DUlMKKwkgKiBtZXRob2RzIChvciB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyAicGNpPW5vY3JzIikuCisJICoKKwkgKiBXZSBvbmx5IGRvIHRoaXMgdGhyb3VnaCBGYW0xMWgsIGJlY2F1c2UgX0NSUyBzaG91bGQgYmUgZW5vdWdoIG9uCisJICogbmV3ZXIgc3lzdGVtcy4KKwkgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAweDExKQorCQlyZXR1cm4gMDsKKwogCS8qIGdldCB0aGUgZGVmYXVsdCBub2RlIGFuZCBsaW5rIGZvciBsZWZ0IG92ZXIgcmVzICovCi0JcmVnID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMCwgMHg2MCk7CisJcmVnID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMCwgQU1EX05CX0YwX05PREVfSUQpOwogCWRlZl9ub2RlID0gKHJlZyA+PiA4KSAmIDB4MDc7Ci0JcmVnID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMCwgMHg2NCk7CisJcmVnID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMCwgQU1EX05CX0YwX1VOSVRfSUQpOwogCWRlZl9saW5rID0gKHJlZyA+PiA4KSAmIDB4MDM7CiAKIAltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOwpAQCAtMzYzLDcgKzM4OCw3IEBACiAJaW50IGNwdTsKIAogCS8qIGFzc3VtZSBhbGwgY3B1cyBmcm9tIGZhbTEwaCBoYXZlIElPIEVDUyAqLwotICAgICAgICBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCAweDEwKQorCWlmIChib290X2NwdV9kYXRhLng4NiA8IDB4MTApCiAJCXJldHVybiAwOwogCiAJLyogVHJ5IHRoZSBQQ0kgbWV0aG9kIGZpcnN0LiAqLwpAQCAtMzg3LDcgKzQxMiw3IEBACiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKIAkJcmV0dXJuIDA7CiAKLQllYXJseV9maWxsX21wX2J1c19pbmZvKCk7CisJZWFybHlfcm9vdF9pbmZvX2luaXQoKTsKIAlwY2lfaW9fZWNzX2luaXQoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2Jyb2FkY29tX2J1cy5jIGIvYXJjaC94ODYvcGNpL2Jyb2FkY29tX2J1cy5jCmluZGV4IDYxNDM5MmMuLmJiNDYxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9icm9hZGNvbV9idXMuYworKysgYi9hcmNoL3g4Ni9wY2kvYnJvYWRjb21fYnVzLmMKQEAgLTYwLDggKzYwLDggQEAKIAl3b3JkMSA9IHJlYWRfcGNpX2NvbmZpZ18xNihidXMsIHNsb3QsIGZ1bmMsIDB4YzQpOwogCXdvcmQyID0gcmVhZF9wY2lfY29uZmlnXzE2KGJ1cywgc2xvdCwgZnVuYywgMHhjNik7CiAJaWYgKHdvcmQxICE9IHdvcmQyKSB7Ci0JCXJlcy5zdGFydCA9ICh3b3JkMSA8PCAxNikgfCAweDAwMDA7Ci0JCXJlcy5lbmQgICA9ICh3b3JkMiA8PCAxNikgfCAweGZmZmY7CisJCXJlcy5zdGFydCA9ICgocmVzb3VyY2Vfc2l6ZV90KSB3b3JkMSA8PCAxNikgfCAweDAwMDA7CisJCXJlcy5lbmQgICA9ICgocmVzb3VyY2Vfc2l6ZV90KSB3b3JkMiA8PCAxNikgfCAweGZmZmY7CiAJCXJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAkJdXBkYXRlX3JlcyhpbmZvLCByZXMuc3RhcnQsIHJlcy5lbmQsIHJlcy5mbGFncywgMCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2ZpeHVwLmMgYi9hcmNoL3g4Ni9wY2kvZml4dXAuYwppbmRleCA5NGFlOWFlLi5iNWU2MDI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvZml4dXAuYworKysgYi9hcmNoL3g4Ni9wY2kvZml4dXAuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CiAKIHN0YXRpYyB2b2lkIHBjaV9maXh1cF9pNDUwbngoc3RydWN0IHBjaV9kZXYgKmQpCkBAIC0zMzcsOSArMzM4LDcgQEAKIAkJICogdHlwZSBCUklER0UsIG9yIENBUkRCVVMuIEhvc3QgdG8gUENJIGNvbnRyb2xsZXJzIHVzZQogCQkgKiBQQ0kgaGVhZGVyIHR5cGUgTk9STUFMLgogCQkgKi8KLQkJaWYgKGJyaWRnZQotCQkgICAgJiYgKChicmlkZ2UtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpCi0JCSAgICAgICB8fCAoYnJpZGdlLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykpKSB7CisJCWlmIChicmlkZ2UgJiYgKHBjaV9pc19icmlkZ2UoYnJpZGdlKSkpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0JSSURHRV9DT05UUk9MLAogCQkJCQkJJmNvbmZpZyk7CiAJCQlpZiAoIShjb25maWcgJiBQQ0lfQlJJREdFX0NUTF9WR0EpKQpAQCAtNTI2LDYgKzUyNSwxOSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIDB4NDM4NSwgc2I2MDBfZGlzYWJsZV9ocGV0X2Jhcik7CiAKKyNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgorc3RhdGljIHZvaWQgc2I2MDBfaHBldF9xdWlyayhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlWzFdOworCisJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0gJiYgci0+c3RhcnQgPT0gaHBldF9hZGRyZXNzKSB7CisJCXItPmZsYWdzIHw9IElPUkVTT1VSQ0VfUENJX0ZJWEVEOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWcgMHgxNCBjb250YWlucyBIUEVUOyBtYWtpbmcgaXQgaW1tb3ZhYmxlXG4iKTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEksIDB4NDM4NSwgc2I2MDBfaHBldF9xdWlyayk7CisjZW5kaWYKKwogLyoKICAqIFR3aW5oZWFkIEgxMlkgbmVlZHMgdXMgdG8gYmxvY2sgb3V0IGEgcmVnaW9uIG90aGVyd2lzZSB3ZSBtYXAgZGV2aWNlcwogICogdGhlcmUgYW5kIGFueSBhY2Nlc3Mga2lsbHMgdGhlIGJveC4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IGRiNmIxYWIuLmExOWVkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMjcxLDExICsyNzEsMTYgQEAKIAkJCQkJIkJBUiAlZDogcmVzZXJ2aW5nICVwciAoZD0lZCwgcD0lZClcbiIsCiAJCQkJCWlkeCwgciwgZGlzYWJsZWQsIHBhc3MpOwogCQkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpZHgpIDwgMCkgewotCQkJCQkvKiBXZSdsbCBhc3NpZ24gYSBuZXcgYWRkcmVzcyBsYXRlciAqLwotCQkJCQlwY2liaW9zX3NhdmVfZndfYWRkcihkZXYsCi0JCQkJCQkJaWR4LCByLT5zdGFydCk7Ci0JCQkJCXItPmVuZCAtPSByLT5zdGFydDsKLQkJCQkJci0+c3RhcnQgPSAwOworCQkJCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BDSV9GSVhFRCkgeworCQkJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiQkFSICVkICVwUiBpcyBpbW1vdmFibGVcbiIsCisJCQkJCQkJIGlkeCwgcik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBXZSdsbCBhc3NpZ24gYSBuZXcgYWRkcmVzcyBsYXRlciAqLworCQkJCQkJcGNpYmlvc19zYXZlX2Z3X2FkZHIoZGV2LAorCQkJCQkJCQlpZHgsIHItPnN0YXJ0KTsKKwkJCQkJCXItPmVuZCAtPSByLT5zdGFydDsKKwkJCQkJCXItPnN0YXJ0ID0gMDsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzU2LDYgKzM2MSwxMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGNhbGxlZCBpbiBmc19pbml0Y2FsbCAob25lIGJlbG93IHN1YnN5c19pbml0Y2FsbCksCisgKiBnaXZlIGEgY2hhbmNlIGZvciBtb3RoZXJib2FyZCByZXNlcnZlIHJlc291cmNlcworICovCitmc19pbml0Y2FsbChwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZXMpOworCiB2b2lkIHBjaWJpb3NfcmVzb3VyY2Vfc3VydmV5X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmJ1cy0+ZGV2LCAiQWxsb2NhdGluZyByZXNvdXJjZXNcbiIpOwpAQCAtMzkyLDEyICs0MDMsNiBAQAogCWlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKCk7CiB9CiAKLS8qKgotICogY2FsbGVkIGluIGZzX2luaXRjYWxsIChvbmUgYmVsb3cgc3Vic3lzX2luaXRjYWxsKSwKLSAqIGdpdmUgYSBjaGFuY2UgZm9yIG1vdGhlcmJvYXJkIHJlc2VydmUgcmVzb3VyY2VzCi0gKi8KLWZzX2luaXRjYWxsKHBjaWJpb3NfYXNzaWduX3Jlc291cmNlcyk7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX21tYXBfb3BzID0gewogCS5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL3JtL01ha2VmaWxlIGIvYXJjaC94ODYvcmVhbG1vZGUvcm0vTWFrZWZpbGUKaW5kZXggMzQ5N2YxNC4uN2MwZDdiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcmVhbG1vZGUvcm0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvcmVhbG1vZGUvcm0vTWFrZWZpbGUKQEAgLTUyLDggKzUyLDkgQEAKIE9CSkNPUFlGTEFHU19yZWFsbW9kZS5iaW4gOj0gLU8gYmluYXJ5CiAKIHRhcmdldHMgKz0gcmVhbG1vZGUuYmluCi0kKG9iaikvcmVhbG1vZGUuYmluOiAkKG9iaikvcmVhbG1vZGUuZWxmICQob2JqKS9yZWFsbW9kZS5yZWxvY3MKKyQob2JqKS9yZWFsbW9kZS5iaW46ICQob2JqKS9yZWFsbW9kZS5lbGYgJChvYmopL3JlYWxtb2RlLnJlbG9jcyBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCisJQDoKIAogcXVpZXRfY21kX3JlbG9jcyA9IFJFTE9DUyAgJEAKICAgICAgIGNtZF9yZWxvY3MgPSBhcmNoL3g4Ni90b29scy9yZWxvY3MgLS1yZWFsbW9kZSAkPCA+ICRACmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggYzM0YmZjNC4uZjE3YjI5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMTMzOSw2ICsxMzM5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZW5fcGFuaWNfYmxvY2sgPSB7CiAJLm5vdGlmaWVyX2NhbGw9IHhlbl9wYW5pY19ldmVudCwKKwkucHJpb3JpdHkgPSBJTlRfTUlOCiB9OwogCiBpbnQgeGVuX3BhbmljX2hhbmRsZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IDg2ZTAyZWEuLjZmNmUxNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTI1MTAsNiArMjUxMCw5NSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfWEVOX1BWSAorLyoKKyAqIE1hcCBmb3JlaWduIGdmbiAoZmdmbiksIHRvIGxvY2FsIHBmbiAobHBmbikuIFRoaXMgZm9yIHRoZSB1c2VyCisgKiBzcGFjZSBjcmVhdGluZyBuZXcgZ3Vlc3Qgb24gcHZoIGRvbTAgYW5kIG5lZWRpbmcgdG8gbWFwIGRvbVUgcGFnZXMuCisgKi8KK3N0YXRpYyBpbnQgeGxhdGVfYWRkX3RvX3AybSh1bnNpZ25lZCBsb25nIGxwZm4sIHVuc2lnbmVkIGxvbmcgZmdmbiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZG9taWQpCit7CisJaW50IHJjLCBlcnIgPSAwOworCXhlbl9wZm5fdCBncGZuID0gbHBmbjsKKwl4ZW5fdWxvbmdfdCBpZHggPSBmZ2ZuOworCisJc3RydWN0IHhlbl9hZGRfdG9fcGh5c21hcF9yYW5nZSB4YXRwID0geworCQkuZG9taWQgPSBET01JRF9TRUxGLAorCQkuZm9yZWlnbl9kb21pZCA9IGRvbWlkLAorCQkuc2l6ZSA9IDEsCisJCS5zcGFjZSA9IFhFTk1BUFNQQUNFX2dtZm5fZm9yZWlnbiwKKwl9OworCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKHhhdHAuaWR4cywgJmlkeCk7CisJc2V0X3hlbl9ndWVzdF9oYW5kbGUoeGF0cC5ncGZucywgJmdwZm4pOworCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKHhhdHAuZXJycywgJmVycik7CisKKwlyYyA9IEhZUEVSVklTT1JfbWVtb3J5X29wKFhFTk1FTV9hZGRfdG9fcGh5c21hcF9yYW5nZSwgJnhhdHApOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHhsYXRlX3JlbW92ZV9mcm9tX3AybSh1bnNpZ25lZCBsb25nIHNwZm4sIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgeGVuX3JlbW92ZV9mcm9tX3BoeXNtYXAgeHJwOworCWludCBpLCByYzsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXhycC5kb21pZCA9IERPTUlEX1NFTEY7CisJCXhycC5ncGZuID0gc3BmbitpOworCQlyYyA9IEhZUEVSVklTT1JfbWVtb3J5X29wKFhFTk1FTV9yZW1vdmVfZnJvbV9waHlzbWFwLCAmeHJwKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByYzsKK30KKworc3RydWN0IHhsYXRlX3JlbWFwX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgZmdmbjsgLyogZm9yZWlnbiBkb21haW4ncyBnZm4gKi8KKwlwZ3Byb3RfdCBwcm90OworCWRvbWlkX3QgIGRvbWlkOworCWludCBpbmRleDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworfTsKKworc3RhdGljIGludCB4bGF0ZV9tYXBfcHRlX2ZuKHB0ZV90ICpwdGVwLCBwZ3RhYmxlX3QgdG9rZW4sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCWludCByYzsKKwlzdHJ1Y3QgeGxhdGVfcmVtYXBfZGF0YSAqcmVtYXAgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocmVtYXAtPnBhZ2VzW3JlbWFwLT5pbmRleCsrXSk7CisJcHRlX3QgcHRldmFsID0gcHRlX21rc3BlY2lhbChwZm5fcHRlKHBmbiwgcmVtYXAtPnByb3QpKTsKKworCXJjID0geGxhdGVfYWRkX3RvX3AybShwZm4sIHJlbWFwLT5mZ2ZuLCByZW1hcC0+ZG9taWQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZXZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4bGF0ZV9yZW1hcF9nZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBtZm4sCisJCQkJIGludCBuciwgcGdwcm90X3QgcHJvdCwgdW5zaWduZWQgZG9taWQsCisJCQkJIHN0cnVjdCBwYWdlICoqcGFnZXMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgeGxhdGVfcmVtYXBfZGF0YSBwdmhkYXRhOworCisJQlVHX09OKCFwYWdlcyk7CisKKwlwdmhkYXRhLmZnZm4gPSBtZm47CisJcHZoZGF0YS5wcm90ID0gcHJvdDsKKwlwdmhkYXRhLmRvbWlkID0gZG9taWQ7CisJcHZoZGF0YS5pbmRleCA9IDA7CisJcHZoZGF0YS5wYWdlcyA9IHBhZ2VzOworCWVyciA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uodm1hLT52bV9tbSwgYWRkciwgbnIgPDwgUEFHRV9TSElGVCwKKwkJCQkgIHhsYXRlX21hcF9wdGVfZm4sICZwdmhkYXRhKTsKKwlmbHVzaF90bGJfYWxsKCk7CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCiAjZGVmaW5lIFJFTUFQX0JBVENIX1NJWkUgMTYKIAogc3RydWN0IHJlbWFwX2RhdGEgewpAQCAtMjUyMiw3ICsyNjExLDcgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCByZW1hcF9kYXRhICpybWQgPSBkYXRhOwotCXB0ZV90IHB0ZSA9IHB0ZV9ta3NwZWNpYWwocGZuX3B0ZShybWQtPm1mbisrLCBybWQtPnByb3QpKTsKKwlwdGVfdCBwdGUgPSBwdGVfbWtzcGVjaWFsKG1mbl9wdGUocm1kLT5tZm4rKywgcm1kLT5wcm90KSk7CiAKIAlybWQtPm1tdV91cGRhdGUtPnB0ciA9IHZpcnRfdG9fbWFjaGluZShwdGVwKS5tYWRkcjsKIAlybWQtPm1tdV91cGRhdGUtPnZhbCA9IHB0ZV92YWxfbWEocHRlKTsKQEAgLTI1NDQsMTMgKzI2MzMsMTggQEAKIAl1bnNpZ25lZCBsb25nIHJhbmdlOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfSU9NQVApOwotCiAJQlVHX09OKCEoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUEZOTUFQIHwgVk1fSU8pKSA9PSAoVk1fUEZOTUFQIHwgVk1fSU8pKSk7CiAKKwlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpIHsKKyNpZmRlZiBDT05GSUdfWEVOX1BWSAorCQkvKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbG9jYWwgcGFnZSB0YWJsZXMgYW5kIHRoZSB4ZW4gSEFQICovCisJCXJldHVybiB4bGF0ZV9yZW1hcF9nZm5fcmFuZ2Uodm1hLCBhZGRyLCBtZm4sIG5yLCBwcm90LAorCQkJCQkgICAgIGRvbWlkLCBwYWdlcyk7CisjZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorICAgICAgICB9CisKIAlybWQubWZuID0gbWZuOwogCXJtZC5wcm90ID0gcHJvdDsKIApAQCAtMjU4OCw2ICsyNjgyLDI1IEBACiAJaWYgKCFwYWdlcyB8fCAheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCiAJCXJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX1hFTl9QVkgKKwl3aGlsZSAobnVtcGdzLS0pIHsKKwkJLyoKKwkJICogVGhlIG1tdSBoYXMgYWxyZWFkeSBjbGVhbmVkIHVwIHRoZSBwcm9jZXNzIG1tdQorCQkgKiByZXNvdXJjZXMgYXQgdGhpcyBwb2ludCAobG9va3VwX2FkZHJlc3Mgd2lsbCByZXR1cm4KKwkJICogTlVMTCkuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzW251bXBnc10pOworCisJCXhsYXRlX3JlbW92ZV9mcm9tX3AybShwZm4sIDEpOworCX0KKwkvKgorCSAqIFdlIGRvbid0IG5lZWQgdG8gZmx1c2ggdGxicyBiZWNhdXNlIGFzIHBhcnQgb2YKKwkgKiB4bGF0ZV9yZW1vdmVfZnJvbV9wMm0sIHRoZSBoeXBlcnZpc29yIHdpbGwgZG8gdGxiIGZsdXNoZXMKKwkgKiBhZnRlciByZW1vdmluZyB0aGUgcDJtIGVudHJpZXMgZnJvbSB0aGUgRVBUL05QVAorCSAqLworCXJldHVybiAwOworI2Vsc2UKIAlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3VubWFwX2RvbWFpbl9tZm5fcmFuZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3AybS5jIGIvYXJjaC94ODYveGVuL3AybS5jCmluZGV4IDg1ZTVkNzguLjliYjNkODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9wMm0uYworKysgYi9hcmNoL3g4Ni94ZW4vcDJtLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAqICBwZm5fdG9fbWZuKDB4YzAwMDApPTB4YzAwMDAKICAqCiAgKiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCB0aGF0IHdlIGNhbiBhc3N1bWUgZm9yIG5vbi1SQU0gcmVnaW9ucyAodGhpbmsKLSAqIFBDSSBCQVJzLCBvciBBQ1BJIHNwYWNlcyksIHdlIGNhbiBjcmVhdGUgbWFwcGluZ3MgZWFzaWx5IGIvYyB3ZQorICogUENJIEJBUnMsIG9yIEFDUEkgc3BhY2VzKSwgd2UgY2FuIGNyZWF0ZSBtYXBwaW5ncyBlYXNpbHkgYmVjYXVzZSB3ZQogICogZ2V0IHRoZSBQRk4gdmFsdWUgdG8gbWF0Y2ggdGhlIE1GTi4KICAqCiAgKiBGb3IgdGhpcyB0byB3b3JrIGVmZmljaWVudGx5IHdlIGhhdmUgb25lIG5ldyBwYWdlIHAybV9pZGVudGl0eSBhbmQKQEAgLTYwLDcgKzYwLDcgQEAKICAqIFRoZXJlIGlzIGFsc28gYSBkaWdyYW0gb2YgdGhlIFAyTSBhdCB0aGUgZW5kIHRoYXQgY2FuIGhlbHAuCiAgKiBJbWFnaW5lIHlvdXIgRTgyMCBsb29raW5nIGFzIHNvOgogICoKLSAqICAgICAgICAgICAgICAgICAgICAxR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMkdCCisgKiAgICAgICAgICAgICAgICAgICAgMUdCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJHQiAgICA0R0IKICAqIC8tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLVwvLS0tLVwgICAgICAgICAvLS0tLS0tLS0tLVwgICAgLy0tLSstLS0tLVwKICAqIHwgU3lzdGVtIFJBTSAgICAgICAgfCBTeXMgUkFNIHx8QUNQSXwgICAgICAgICB8IHJlc2VydmVkIHwgICAgfCBTeXMgUkFNIHwKICAqIFwtLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS9cLS0tLS8gICAgICAgICBcLS0tLS0tLS0tLS8gICAgXC0tLSstLS0tLS8KQEAgLTc3LDkgKzc3LDggQEAKICAqIG9mIHRoZSBQRk4gYW5kIHRoZSBlbmQgUEZOICgyNjM0MjQgYW5kIDUxMjI1NiByZXNwZWN0aXZlbHkpLiBUaGUgZmlyc3Qgc3RlcAogICogaXMgdG8gcmVzZXJ2ZV9icmsgYSB0b3AgbGVhZiBwYWdlIGlmIHRoZSBwMm1bMV0gaXMgbWlzc2luZy4gVGhlIHRvcCBsZWFmIHBhZ2UKICAqIGNvdmVycyA1MTJeMiBvZiBwYWdlIGVzdGF0ZSAoMUdCKSBhbmQgaW4gY2FzZSB0aGUgc3RhcnQgb3IgZW5kIFBGTiBpcyBub3QKLSAqIGFsaWduZWQgb24gNTEyXjIqUEFHRV9TSVpFICgxR0IpIHdlIGxvb3Agb24gYWxpZ25lZCAxR0IgUEZOcyBmcm9tIHN0YXJ0IHBmbgotICogdG8gZW5kIHBmbi4gIFdlIHJlc2VydmVfYnJrIHRvcCBsZWFmIHBhZ2VzIGlmIHRoZXkgYXJlIG1pc3NpbmcgKG1lYW5zIHRoZXkKLSAqIHBvaW50IHRvIHAybV9taWRfbWlzc2luZykuCisgKiBhbGlnbmVkIG9uIDUxMl4yKlBBR0VfU0laRSAoMUdCKSB3ZSByZXNlcnZlX2JyayBuZXcgbWlkZGxlIGFuZCBsZWFmIHBhZ2VzIGFzCisgKiByZXF1aXJlZCB0byBzcGxpdCBhbnkgZXhpc3RpbmcgcDJtX21pZF9taXNzaW5nIG1pZGRsZSBwYWdlcy4KICAqCiAgKiBXaXRoIHRoZSBFODIwIGV4YW1wbGUgYWJvdmUsIDI2MzQyNCBpcyBub3QgMUdCIGFsaWduZWQgc28gd2UgYWxsb2NhdGUgYQogICogcmVzZXJ2ZV9icmsgcGFnZSB3aGljaCB3aWxsIGNvdmVyIHRoZSBQRk5zIGVzdGF0ZSBmcm9tIDB4NDAwMDAgdG8gMHg4MDAwMC4KQEAgLTg4LDcgKzg3LDcgQEAKICAqIE5leHQgc3RhZ2UgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZG8gYSBtb3JlIGdyYW51bGFyIGJvdW5kYXJ5IGNoZWNrCiAgKiBvbiB0aGUgNE1CIChvciAyTUIgZGVwZW5kaW5nIG9uIGFyY2hpdGVjdHVyZSkgb2ZmIHRoZSBzdGFydCBhbmQgZW5kIHBmbidzLgogICogV2UgY2hlY2sgaWYgdGhlIHN0YXJ0IHBmbiBhbmQgZW5kIHBmbiB2aW9sYXRlIHRoYXQgYm91bmRhcnkgY2hlY2ssIGFuZCBpZgotICogc28gcmVzZXJ2ZV9icmsgYSBtaWRkbGUgKHAybVt4XVt5XSkgbGVhZiBwYWdlLiBUaGlzIHdheSB3ZSBoYXZlIGEgbXVjaCBmaW5lcgorICogc28gcmVzZXJ2ZV9icmsgYSAocDJtW3hdW3ldKSBsZWFmIHBhZ2UuIFRoaXMgd2F5IHdlIGhhdmUgYSBtdWNoIGZpbmVyCiAgKiBncmFudWxhcml0eSBvZiBzZXR0aW5nIHdoaWNoIFBGTnMgYXJlIG1pc3NpbmcgYW5kIHdoaWNoIG9uZXMgYXJlIGlkZW50aXR5LgogICogSW4gb3VyIGV4YW1wbGUgMjYzNDI0IGFuZCA1MTIyNTYgYm90aCBmYWlsIHRoZSBjaGVjayBzbyB3ZSByZXNlcnZlX2JyayB0d28KICAqIHBhZ2VzLiBQb3B1bGF0ZSB0aGVtIHdpdGggSU5WQUxJRF9QMk1fRU5UUlkgKHNvIHRoZXkgYm90aCBoYXZlICJtaXNzaW5nIgpAQCAtMTAyLDkgKzEwMSwxMCBAQAogICoKICAqIFRoZSBuZXh0IHN0ZXAgaXMgdG8gd2FsayBmcm9tIHRoZSBzdGFydCBwZm4gdG8gdGhlIGVuZCBwZm4gc2V0dGluZwogICogdGhlIElERU5USVRZX0ZSQU1FX0JJVCBvbiBlYWNoIFBGTi4gVGhpcyBpcyBkb25lIGluIHNldF9waHlzX3JhbmdlX2lkZW50aXR5LgotICogSWYgd2UgZmluZCB0aGF0IHRoZSBtaWRkbGUgbGVhZiBpcyBwb2ludGluZyB0byBwMm1fbWlzc2luZyB3ZSBjYW4gc3dhcCBpdAotICogb3ZlciB0byBwMm1faWRlbnRpdHkgLSB0aGlzIHdheSBjb3ZlcmluZyA0TUIgKG9yIDJNQikgUEZOIHNwYWNlLiAgQXQgdGhpcwotICogcG9pbnQgd2UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgYm91bmRhcnkgYWxpZ21lbnQgKHNvIG5vIG5lZWQgdG8KKyAqIElmIHdlIGZpbmQgdGhhdCB0aGUgbWlkZGxlIGVudHJ5IGlzIHBvaW50aW5nIHRvIHAybV9taXNzaW5nIHdlIGNhbiBzd2FwIGl0CisgKiBvdmVyIHRvIHAybV9pZGVudGl0eSAtIHRoaXMgd2F5IGNvdmVyaW5nIDRNQiAob3IgMk1CKSBQRk4gc3BhY2UgKGFuZAorICogc2ltaWxhcmx5IHN3YXBwaW5nIHAybV9taWRfbWlzc2luZyBmb3IgcDJtX21pZF9pZGVudGl0eSBmb3IgbGFyZ2VyIHJlZ2lvbnMpLgorICogQXQgdGhpcyBwb2ludCB3ZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBib3VuZGFyeSBhbGlnbWVudCAoc28gbm8gbmVlZCB0bwogICogcmVzZXJ2ZV9icmsgYSBtaWRkbGUgcGFnZSwgZmlndXJlIG91dCB3aGljaCBQRk5zIGFyZSAibWlzc2luZyIgYW5kIHdoaWNoCiAgKiBvbmVzIGFyZSBpZGVudGl0eSksIGFzIHRoYXQgaGFzIGJlZW4gZG9uZSBlYXJsaWVyLiAgSWYgd2UgZmluZCB0aGF0IHRoZQogICogbWlkZGxlIGxlYWYgaXMgbm90IG9jY3VwaWVkIGJ5IHAybV9pZGVudGl0eSBvciBwMm1fbWlzc2luZywgd2UgZGVyZWZlcmVuY2UKQEAgLTExOCw2ICsxMTgsOSBAQAogICogY29uc2lkZXJlZCBtaXNzaW5nKS4gSW4gb3VyIGNhc2UsIHAybVsxXVsyXVswLT4yNTVdIGFuZCBwMm1bMV1bNDg4XVsyNTctPjUxMV0KICAqIGNvbnRhaW4gdGhlIElOVkFMSURfUDJNX0VOVFJZIHZhbHVlIGFuZCBhcmUgY29uc2lkZXJlZCAibWlzc2luZy4iCiAgKgorICogRmluYWxseSwgdGhlIHJlZ2lvbiBiZXlvbmQgdGhlIGVuZCBvZiBvZiB0aGUgRTgyMCAoNCBHQiBpbiB0aGlzIGV4YW1wbGUpCisgKiBpcyBzZXQgdG8gYmUgaWRlbnRpdHkgKGluIGNhc2UgdGhlcmUgYXJlIE1NSU8gcmVnaW9ucyBwbGFjZWQgaGVyZSkuCisgKgogICogVGhpcyBpcyB3aGF0IHRoZSBwMm0gZW5kcyB1cCBsb29raW5nIChmb3IgdGhlIEU4MjAgYWJvdmUpIHdpdGggdGhpcwogICogZmFidWxvdXMgZHJhd2luZzoKICAqCkBAIC0xMjksMjEgKzEzMiwyNyBAQAogICogIHwtLS0tLXwgICAgXCAgICAgICAgICAgICAgICAgICAgICB8IFtwMm1faWRlbnRpdHldK1xcICAgIHwgLi4uLiAgICAgICAgICAgIHwKICAqICB8ICAyICB8LS1cICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgLi4uICAgICAgICAgIHwgXFwgICBcLS0tLS0tLS0tLS0tLS0tLS8KICAqICB8LS0tLS18ICAgXCAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS8gIFxcCi0gKiAgfCAgMyAgfFwgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwgIHAybV9pZGVudGl0eQotICogIHwtLS0tLXwgXCAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLT4vLS0tLS0tLS0tLS0tLS0tXCAgIC8tLS0tLS0tLS0tLS0tLS0tLVwKLSAqICB8IC4uICArLT4rICAgICAgICAgICAgICAgICAgICAgICAgfCBbcDJtX2lkZW50aXR5XSstLT58IH4wLCB+MCwgfjAsIC4uLiB8Ci0gKiAgXC0tLS0tLyAvICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3AybV9pZGVudGl0eV0rLS0+fCAuLi4sIH4wICAgICAgICAgfAotICogICAgICAgICAvIC8tLS0tLS0tLS0tLS0tLS1cICAgICAgICB8IC4uLi4gICAgICAgICAgfCAgIFwtLS0tLS0tLS0tLS0tLS0tLS8KLSAqICAgICAgICAvICB8IElERU5USVRZW0AwXSAgfCAgICAgIC8tKy1beF0sIH4wLCB+MC4uIHwKLSAqICAgICAgIC8gICB8IElERU5USVRZW0AyNTZdfDwtLS0tLyAgXC0tLS0tLS0tLS0tLS0tLS8KLSAqICAgICAgLyAgICB8IH4wLCB+MCwgLi4uLiAgfAotICogICAgIHwgICAgIFwtLS0tLS0tLS0tLS0tLS0vCi0gKiAgICAgfAotICogICBwMm1fbWlkX21pc3NpbmcgICAgICAgICAgIHAybV9taXNzaW5nCi0gKiAvLS0tLS0tLS0tLS0tLS0tLS1cICAgICAvLS0tLS0tLS0tLS0tXAotICogfCBbcDJtX21pc3NpbmddICAgKy0tLS0+fCB+MCwgfjAsIH4wIHwKLSAqIHwgW3AybV9taXNzaW5nXSAgICstLS0tPnwgLi4uLCB+MCAgICB8Ci0gKiBcLS0tLS0tLS0tLS0tLS0tLS0vICAgICBcLS0tLS0tLS0tLS0tLworICogIHwgIDMgIHwtXCAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcICBwMm1faWRlbnRpdHkgWzFdCisgKiAgfC0tLS0tfCAgXCAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tPi8tLS0tLS0tLS0tLS0tLS1cICAgLy0tLS0tLS0tLS0tLS0tLS0tXAorICogIHwgLi4gIHxcICB8ICAgICAgICAgICAgICAgICAgICAgICB8IFtwMm1faWRlbnRpdHldKy0tPnwgfjAsIH4wLCB+MCwgLi4uIHwKKyAqICBcLS0tLS0vIHwgfCAgICAgICAgICAgICAgICAgICAgICAgfCBbcDJtX2lkZW50aXR5XSstLT58IC4uLiwgfjAgICAgICAgICB8CisgKiAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgIHwgLi4uLiAgICAgICAgICB8ICAgXC0tLS0tLS0tLS0tLS0tLS0tLworICogICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICArLVt4XSwgfjAsIH4wLi4gK1wKKyAqICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS8gXAorICogICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXC0+IC8tLS0tLS0tLS0tLS0tLS1cCisgKiAgICAgICAgICB8IFYgIHAybV9taWRfbWlzc2luZyAgICAgICBwMm1fbWlzc2luZyAgICAgICAgICAgfCBJREVOVElUWVtAMF0gIHwKKyAqICAgICAgICAgIHwgLy0tLS0tLS0tLS0tLS0tLS0tXCAgICAgLy0tLS0tLS0tLS0tLVwgICAgICAgICB8IElERU5USVRZW0AyNTZdfAorICogICAgICAgICAgfCB8IFtwMm1fbWlzc2luZ10gICArLS0tLT58IH4wLCB+MCwgLi4ufCAgICAgICAgIHwgfjAsIH4wLCAuLi4uICB8CisgKiAgICAgICAgICB8IHwgW3AybV9taXNzaW5nXSAgICstLS0tPnwgLi4uLCB+MCAgICB8ICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS8KKyAqICAgICAgICAgIHwgfCAuLi4gICAgICAgICAgICAgfCAgICAgXC0tLS0tLS0tLS0tLS8KKyAqICAgICAgICAgIHwgXC0tLS0tLS0tLS0tLS0tLS0tLworICogICAgICAgICAgfAorICogICAgICAgICAgfCAgICAgcDJtX21pZF9pZGVudGl0eQorICogICAgICAgICAgfCAgIC8tLS0tLS0tLS0tLS0tLS0tLVwKKyAqICAgICAgICAgIFwtLT58IFtwMm1faWRlbnRpdHldICArLS0tLT5bMV0KKyAqICAgICAgICAgICAgICB8IFtwMm1faWRlbnRpdHldICArLS0tLT5bMV0KKyAqICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLwogICoKICAqIHdoZXJlIH4wIGlzIElOVkFMSURfUDJNX0VOVFJZLiBJREVOVElUWSBpcyAoUEZOIHwgSURFTlRJVFlfQklUKQogICovCkBAIC0xODcsMTMgKzE5NiwxNSBAQAogc3RhdGljIFJFU0VSVkVfQlJLX0FSUkFZKHVuc2lnbmVkIGxvbmcgKiwgcDJtX3RvcF9tZm5fcCwgUDJNX1RPUF9QRVJfUEFHRSk7CiAKIHN0YXRpYyBSRVNFUlZFX0JSS19BUlJBWSh1bnNpZ25lZCBsb25nLCBwMm1faWRlbnRpdHksIFAyTV9QRVJfUEFHRSk7CitzdGF0aWMgUkVTRVJWRV9CUktfQVJSQVkodW5zaWduZWQgbG9uZyAqLCBwMm1fbWlkX2lkZW50aXR5LCBQMk1fTUlEX1BFUl9QQUdFKTsKK3N0YXRpYyBSRVNFUlZFX0JSS19BUlJBWSh1bnNpZ25lZCBsb25nLCBwMm1fbWlkX2lkZW50aXR5X21mbiwgUDJNX01JRF9QRVJfUEFHRSk7CiAKIFJFU0VSVkVfQlJLKHAybV9taWQsIFBBR0VfU0laRSAqIChNQVhfRE9NQUlOX1BBR0VTIC8gKFAyTV9QRVJfUEFHRSAqIFAyTV9NSURfUEVSX1BBR0UpKSk7CiBSRVNFUlZFX0JSSyhwMm1fbWlkX21mbiwgUEFHRV9TSVpFICogKE1BWF9ET01BSU5fUEFHRVMgLyAoUDJNX1BFUl9QQUdFICogUDJNX01JRF9QRVJfUEFHRSkpKTsKIAogLyogV2UgbWlnaHQgaGl0IHR3byBib3VuZGFyeSB2aW9sYXRpb25zIGF0IHRoZSBzdGFydCBhbmQgZW5kLCBhdCBtYXggZWFjaAogICogYm91bmRhcnkgdmlvbGF0aW9uIHdpbGwgcmVxdWlyZSB0aHJlZSBtaWRkbGUgbm9kZXMuICovCi1SRVNFUlZFX0JSSyhwMm1fbWlkX2lkZW50aXR5LCBQQUdFX1NJWkUgKiAyICogMyk7CitSRVNFUlZFX0JSSyhwMm1fbWlkX2V4dHJhLCBQQUdFX1NJWkUgKiAyICogMyk7CiAKIC8qIFdoZW4gd2UgcG9wdWxhdGUgYmFjayBkdXJpbmcgYm9vdHVwLCB0aGUgYW1vdW50IG9mIHBhZ2VzIGNhbiB2YXJ5LiBUaGUKICAqIG1heCB3ZSBoYXZlIGlzIHNlZW4gaXMgMzk1OTc5LCBidXQgdGhhdCBkb2VzIG5vdCBtZWFuIGl0IGNhbid0IGJlIG1vcmUuCkBAIC0yNDIsMjAgKzI1MywyMCBAQAogCQl0b3BbaV0gPSBwMm1fbWlkX21pc3NpbmdfbWZuOwogfQogCi1zdGF0aWMgdm9pZCBwMm1fbWlkX2luaXQodW5zaWduZWQgbG9uZyAqKm1pZCkKK3N0YXRpYyB2b2lkIHAybV9taWRfaW5pdCh1bnNpZ25lZCBsb25nICoqbWlkLCB1bnNpZ25lZCBsb25nICpsZWFmKQogewogCXVuc2lnbmVkIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUDJNX01JRF9QRVJfUEFHRTsgaSsrKQotCQltaWRbaV0gPSBwMm1fbWlzc2luZzsKKwkJbWlkW2ldID0gbGVhZjsKIH0KIAotc3RhdGljIHZvaWQgcDJtX21pZF9tZm5faW5pdCh1bnNpZ25lZCBsb25nICptaWQpCitzdGF0aWMgdm9pZCBwMm1fbWlkX21mbl9pbml0KHVuc2lnbmVkIGxvbmcgKm1pZCwgdW5zaWduZWQgbG9uZyAqbGVhZikKIHsKIAl1bnNpZ25lZCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFAyTV9NSURfUEVSX1BBR0U7IGkrKykKLQkJbWlkW2ldID0gdmlydF90b19tZm4ocDJtX21pc3NpbmcpOworCQltaWRbaV0gPSB2aXJ0X3RvX21mbihsZWFmKTsKIH0KIAogc3RhdGljIHZvaWQgcDJtX2luaXQodW5zaWduZWQgbG9uZyAqcDJtKQpAQCAtMjg2LDcgKzI5Nyw5IEBACiAJLyogUHJlLWluaXRpYWxpemUgcDJtX3RvcF9tZm4gdG8gYmUgY29tcGxldGVseSBtaXNzaW5nICovCiAJaWYgKHAybV90b3BfbWZuID09IE5VTEwpIHsKIAkJcDJtX21pZF9taXNzaW5nX21mbiA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwotCQlwMm1fbWlkX21mbl9pbml0KHAybV9taWRfbWlzc2luZ19tZm4pOworCQlwMm1fbWlkX21mbl9pbml0KHAybV9taWRfbWlzc2luZ19tZm4sIHAybV9taXNzaW5nKTsKKwkJcDJtX21pZF9pZGVudGl0eV9tZm4gPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJcDJtX21pZF9tZm5faW5pdChwMm1fbWlkX2lkZW50aXR5X21mbiwgcDJtX2lkZW50aXR5KTsKIAogCQlwMm1fdG9wX21mbl9wID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7CiAJCXAybV90b3BfbWZuX3BfaW5pdChwMm1fdG9wX21mbl9wKTsKQEAgLTI5NSw3ICszMDgsOCBAQAogCQlwMm1fdG9wX21mbl9pbml0KHAybV90b3BfbWZuKTsKIAl9IGVsc2UgewogCQkvKiBSZWluaXRpYWxpc2UsIG1mbidzIGFsbCBjaGFuZ2UgYWZ0ZXIgbWlncmF0aW9uICovCi0JCXAybV9taWRfbWZuX2luaXQocDJtX21pZF9taXNzaW5nX21mbik7CisJCXAybV9taWRfbWZuX2luaXQocDJtX21pZF9taXNzaW5nX21mbiwgcDJtX21pc3NpbmcpOworCQlwMm1fbWlkX21mbl9pbml0KHAybV9taWRfaWRlbnRpdHlfbWZuLCBwMm1faWRlbnRpdHkpOwogCX0KIAogCWZvciAocGZuID0gMDsgcGZuIDwgeGVuX21heF9wMm1fcGZuOyBwZm4gKz0gUDJNX1BFUl9QQUdFKSB7CkBAIC0zMjcsNyArMzQxLDcgQEAKIAkJCSAqIGl0IHRvbyBsYXRlLgogCQkJICovCiAJCQltaWRfbWZuX3AgPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQkJCXAybV9taWRfbWZuX2luaXQobWlkX21mbl9wKTsKKwkJCXAybV9taWRfbWZuX2luaXQobWlkX21mbl9wLCBwMm1fbWlzc2luZyk7CiAKIAkJCXAybV90b3BfbWZuX3BbdG9waWR4XSA9IG1pZF9tZm5fcDsKIAkJfQpAQCAtMzY1LDE2ICszNzksMTcgQEAKIAogCXAybV9taXNzaW5nID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7CiAJcDJtX2luaXQocDJtX21pc3NpbmcpOworCXAybV9pZGVudGl0eSA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCXAybV9pbml0KHAybV9pZGVudGl0eSk7CiAKIAlwMm1fbWlkX21pc3NpbmcgPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQlwMm1fbWlkX2luaXQocDJtX21pZF9taXNzaW5nKTsKKwlwMm1fbWlkX2luaXQocDJtX21pZF9taXNzaW5nLCBwMm1fbWlzc2luZyk7CisJcDJtX21pZF9pZGVudGl0eSA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCXAybV9taWRfaW5pdChwMm1fbWlkX2lkZW50aXR5LCBwMm1faWRlbnRpdHkpOwogCiAJcDJtX3RvcCA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwogCXAybV90b3BfaW5pdChwMm1fdG9wKTsKIAotCXAybV9pZGVudGl0eSA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwotCXAybV9pbml0KHAybV9pZGVudGl0eSk7Ci0KIAkvKgogCSAqIFRoZSBkb21haW4gYnVpbGRlciBnaXZlcyB1cyBhIHByZS1jb25zdHJ1Y3RlZCBwMm0gYXJyYXkgaW4KIAkgKiBtZm5fbGlzdCBmb3IgYWxsIHRoZSBwYWdlcyBpbml0aWFsbHkgZ2l2ZW4gdG8gdXMsIHNvIHdlIGp1c3QKQEAgLTM4Niw3ICs0MDEsNyBAQAogCiAJCWlmIChwMm1fdG9wW3RvcGlkeF0gPT0gcDJtX21pZF9taXNzaW5nKSB7CiAJCQl1bnNpZ25lZCBsb25nICoqbWlkID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7Ci0JCQlwMm1fbWlkX2luaXQobWlkKTsKKwkJCXAybV9taWRfaW5pdChtaWQsIHAybV9taXNzaW5nKTsKIAogCQkJcDJtX3RvcFt0b3BpZHhdID0gbWlkOwogCQl9CkBAIC00OTIsNyArNTA3LDcgQEAKIAl1bnNpZ25lZCB0b3BpZHgsIG1pZGlkeCwgaWR4OwogCiAJaWYgKHVubGlrZWx5KHBmbiA+PSBNQVhfUDJNX1BGTikpCi0JCXJldHVybiBJTlZBTElEX1AyTV9FTlRSWTsKKwkJcmV0dXJuIElERU5USVRZX0ZSQU1FKHBmbik7CiAKIAl0b3BpZHggPSBwMm1fdG9wX2luZGV4KHBmbik7CiAJbWlkaWR4ID0gcDJtX21pZF9pbmRleChwZm4pOwpAQCAtNTQ1LDcgKzU2MCw3IEBACiAJCWlmICghbWlkKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCXAybV9taWRfaW5pdChtaWQpOworCQlwMm1fbWlkX2luaXQobWlkLCBwMm1fbWlzc2luZyk7CiAKIAkJaWYgKGNtcHhjaGcodG9wX3AsIHAybV9taWRfbWlzc2luZywgbWlkKSAhPSBwMm1fbWlkX21pc3NpbmcpCiAJCQlmcmVlX3AybV9wYWdlKG1pZCk7CkBAIC01NjUsNyArNTgwLDcgQEAKIAkJaWYgKCFtaWRfbWZuKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCXAybV9taWRfbWZuX2luaXQobWlkX21mbik7CisJCXAybV9taWRfbWZuX2luaXQobWlkX21mbiwgcDJtX21pc3NpbmcpOwogCiAJCW1pc3NpbmdfbWZuID0gdmlydF90b19tZm4ocDJtX21pZF9taXNzaW5nX21mbik7CiAJCW1pZF9tZm5fbWZuID0gdmlydF90b19tZm4obWlkX21mbik7CkBAIC01OTYsNyArNjExLDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgX19pbml0IGVhcmx5X2FsbG9jX3AybV9taWRkbGUodW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgY2hlY2tfYm91bmRhcnkpCitzdGF0aWMgYm9vbCBfX2luaXQgZWFybHlfYWxsb2NfcDJtKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIGNoZWNrX2JvdW5kYXJ5KQogewogCXVuc2lnbmVkIHRvcGlkeCwgbWlkaWR4LCBpZHg7CiAJdW5zaWduZWQgbG9uZyAqcDJtOwpAQCAtNjM4LDcgKzY1Myw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIF9faW5pdCBlYXJseV9hbGxvY19wMm0odW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgYm9vbCBfX2luaXQgZWFybHlfYWxsb2NfcDJtX21pZGRsZSh1bnNpZ25lZCBsb25nIHBmbikKIHsKIAl1bnNpZ25lZCB0b3BpZHggPSBwMm1fdG9wX2luZGV4KHBmbik7CiAJdW5zaWduZWQgbG9uZyAqbWlkX21mbl9wOwpAQCAtNjQ5LDcgKzY2NCw3IEBACiAJaWYgKG1pZCA9PSBwMm1fbWlkX21pc3NpbmcpIHsKIAkJbWlkID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7CiAKLQkJcDJtX21pZF9pbml0KG1pZCk7CisJCXAybV9taWRfaW5pdChtaWQsIHAybV9taXNzaW5nKTsKIAogCQlwMm1fdG9wW3RvcGlkeF0gPSBtaWQ7CiAKQEAgLTY1OCwxMiArNjczLDEyIEBACiAJLyogQW5kIHRoZSBzYXZlL3Jlc3RvcmUgUDJNIHRhYmxlcy4uICovCiAJaWYgKG1pZF9tZm5fcCA9PSBwMm1fbWlkX21pc3NpbmdfbWZuKSB7CiAJCW1pZF9tZm5fcCA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwotCQlwMm1fbWlkX21mbl9pbml0KG1pZF9tZm5fcCk7CisJCXAybV9taWRfbWZuX2luaXQobWlkX21mbl9wLCBwMm1fbWlzc2luZyk7CiAKIAkJcDJtX3RvcF9tZm5fcFt0b3BpZHhdID0gbWlkX21mbl9wOwogCQlwMm1fdG9wX21mblt0b3BpZHhdID0gdmlydF90b19tZm4obWlkX21mbl9wKTsKIAkJLyogTm90ZTogd2UgZG9uJ3Qgc2V0IG1pZF9tZm5fcFttaWRpeF0gaGVyZSwKLQkJICogbG9vayBpbiBlYXJseV9hbGxvY19wMm1fbWlkZGxlICovCisJCSAqIGxvb2sgaW4gZWFybHlfYWxsb2NfcDJtKCkgKi8KIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC03MzksNyArNzU0LDcgQEAKIAogCS8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLwogCWlmIChXQVJOX09OKHAybV90b3BbdG9waWR4XSA9PSBwMm1fbWlkX21pc3NpbmcpKQotCQllYXJseV9hbGxvY19wMm0oc2V0X3Bmbik7CisJCWVhcmx5X2FsbG9jX3AybV9taWRkbGUoc2V0X3Bmbik7CiAKIAlpZiAoV0FSTl9PTihwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSAhPSBwMm1fbWlzc2luZykpCiAJCXJldHVybiBmYWxzZTsKQEAgLTc1NCwxMyArNzY5LDEzIEBACiBib29sIF9faW5pdCBlYXJseV9zZXRfcGh5c190b19tYWNoaW5lKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG1mbikKIHsKIAlpZiAodW5saWtlbHkoIV9fc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIG1mbikpKSAgewotCQlpZiAoIWVhcmx5X2FsbG9jX3AybShwZm4pKQorCQlpZiAoIWVhcmx5X2FsbG9jX3AybV9taWRkbGUocGZuKSkKIAkJCXJldHVybiBmYWxzZTsKIAogCQlpZiAoZWFybHlfY2FuX3JldXNlX3AybV9taWRkbGUocGZuLCBtZm4pKQogCQkJcmV0dXJuIF9fc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIG1mbik7CiAKLQkJaWYgKCFlYXJseV9hbGxvY19wMm1fbWlkZGxlKHBmbiwgZmFsc2UgLyogYm91bmRhcnkgY3Jvc3NvdmVyIE9LISovKSkKKwkJaWYgKCFlYXJseV9hbGxvY19wMm0ocGZuLCBmYWxzZSAvKiBib3VuZGFyeSBjcm9zc292ZXIgT0shKi8pKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCWlmICghX19zZXRfcGh5c190b19tYWNoaW5lKHBmbiwgbWZuKSkKQEAgLTc2OSwxMiArNzg0LDMwIEBACiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3NwbGl0X3AybSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIG1pZGlkeCwgaWR4OworCisJbWlkaWR4ID0gcDJtX21pZF9pbmRleChwZm4pOworCWlkeCA9IHAybV9pbmRleChwZm4pOworCisJLyoKKwkgKiBBbGxvY2F0ZSBuZXcgbWlkZGxlIGFuZCBsZWFmIHBhZ2VzIGlmIHRoaXMgcGZuIGxpZXMgaW4gdGhlCisJICogbWlkZGxlIG9mIG9uZS4KKwkgKi8KKwlpZiAobWlkaWR4IHx8IGlkeCkKKwkJZWFybHlfYWxsb2NfcDJtX21pZGRsZShwZm4pOworCWlmIChpZHgpCisJCWVhcmx5X2FsbG9jX3AybShwZm4sIGZhbHNlKTsKK30KKwogdW5zaWduZWQgbG9uZyBfX2luaXQgc2V0X3BoeXNfcmFuZ2VfaWRlbnRpdHkodW5zaWduZWQgbG9uZyBwZm5fcywKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBmbl9lKQogewogCXVuc2lnbmVkIGxvbmcgcGZuOwogCi0JaWYgKHVubGlrZWx5KHBmbl9zID49IE1BWF9QMk1fUEZOIHx8IHBmbl9lID49IE1BWF9QMk1fUEZOKSkKKwlpZiAodW5saWtlbHkocGZuX3MgPj0gTUFYX1AyTV9QRk4pKQogCQlyZXR1cm4gMDsKIAogCWlmICh1bmxpa2VseSh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkpCkBAIC03ODMsMTkgKzgxNiwzMCBAQAogCWlmIChwZm5fcyA+IHBmbl9lKQogCQlyZXR1cm4gMDsKIAotCWZvciAocGZuID0gKHBmbl9zICYgfihQMk1fTUlEX1BFUl9QQUdFICogUDJNX1BFUl9QQUdFIC0gMSkpOwotCQlwZm4gPCBBTElHTihwZm5fZSwgKFAyTV9NSURfUEVSX1BBR0UgKiBQMk1fUEVSX1BBR0UpKTsKLQkJcGZuICs9IFAyTV9NSURfUEVSX1BBR0UgKiBQMk1fUEVSX1BBR0UpCi0JewotCQlXQVJOX09OKCFlYXJseV9hbGxvY19wMm0ocGZuKSk7Ci0JfQorCWlmIChwZm5fZSA+IE1BWF9QMk1fUEZOKQorCQlwZm5fZSA9IE1BWF9QMk1fUEZOOwogCi0JZWFybHlfYWxsb2NfcDJtX21pZGRsZShwZm5fcywgdHJ1ZSk7Ci0JZWFybHlfYWxsb2NfcDJtX21pZGRsZShwZm5fZSwgdHJ1ZSk7CisJZWFybHlfc3BsaXRfcDJtKHBmbl9zKTsKKwllYXJseV9zcGxpdF9wMm0ocGZuX2UpOwogCi0JZm9yIChwZm4gPSBwZm5fczsgcGZuIDwgcGZuX2U7IHBmbisrKQorCWZvciAocGZuID0gcGZuX3M7IHBmbiA8IHBmbl9lOykgeworCQl1bnNpZ25lZCB0b3BpZHggPSBwMm1fdG9wX2luZGV4KHBmbik7CisJCXVuc2lnbmVkIG1pZGlkeCA9IHAybV9taWRfaW5kZXgocGZuKTsKKwogCQlpZiAoIV9fc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIElERU5USVRZX0ZSQU1FKHBmbikpKQogCQkJYnJlYWs7CisJCXBmbisrOworCisJCS8qCisJCSAqIElmIHRoZSBQRk4gd2FzIHNldCB0byBhIG1pZGRsZSBvciBsZWFmIGlkZW50aXR5CisJCSAqIHBhZ2UgdGhlIHJlbWFpbmRlciBtdXN0IGFsc28gYmUgaWRlbnRpdHksIHNvIHNraXAKKwkJICogYWhlYWQgdG8gdGhlIG5leHQgbWlkZGxlIG9yIGxlYWYgZW50cnkuCisJCSAqLworCQlpZiAocDJtX3RvcFt0b3BpZHhdID09IHAybV9taWRfaWRlbnRpdHkpCisJCQlwZm4gPSBBTElHTihwZm4sIFAyTV9NSURfUEVSX1BBR0UgKiBQMk1fUEVSX1BBR0UpOworCQllbHNlIGlmIChwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSA9PSBwMm1faWRlbnRpdHkpCisJCQlwZm4gPSBBTElHTihwZm4sIFAyTV9QRVJfUEFHRSk7CisJfQogCiAJaWYgKCFXQVJOKChwZm4gLSBwZm5fcykgIT0gKHBmbl9lIC0gcGZuX3MpLAogCQkiSWRlbnRpdHkgbWFwcGluZyBmYWlsZWQuIFdlIGFyZSAlbGQgc2hvcnQgb2YgMS0xIG1hcHBpbmdzIVxuIiwKQEAgLTgyNSw4ICs4NjksMjIgQEAKIAogCS8qIEZvciBzcGFyc2UgaG9sZXMgd2VyZSB0aGUgcDJtIGxlYWYgaGFzIHJlYWwgUEZOIGFsb25nIHdpdGgKIAkgKiBQQ0kgaG9sZXMsIHN0aWNrIGluIHRoZSBQRk4gYXMgdGhlIE1GTiB2YWx1ZS4KKwkgKgorCSAqIHNldF9waHlzX3JhbmdlX2lkZW50aXR5KCkgd2lsbCBoYXZlIGFsbG9jYXRlZCBuZXcgbWlkZGxlCisJICogYW5kIGxlYWYgcGFnZXMgYXMgcmVxdWlyZWQgc28gYW4gZXhpc3RpbmcgcDJtX21pZF9taXNzaW5nCisJICogb3IgcDJtX21pc3NpbmcgbWVhbiB0aGF0IHdob2xlIHJhbmdlIHdpbGwgYmUgaWRlbnRpdHkgc28KKwkgKiB0aGVzZSBjYW4gYmUgc3dpdGNoZWQgdG8gcDJtX21pZF9pZGVudGl0eSBvciBwMm1faWRlbnRpdHkuCiAJICovCiAJaWYgKG1mbiAhPSBJTlZBTElEX1AyTV9FTlRSWSAmJiAobWZuICYgSURFTlRJVFlfRlJBTUVfQklUKSkgeworCQlpZiAocDJtX3RvcFt0b3BpZHhdID09IHAybV9taWRfaWRlbnRpdHkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAocDJtX3RvcFt0b3BpZHhdID09IHAybV9taWRfbWlzc2luZykgeworCQkJV0FSTl9PTihjbXB4Y2hnKCZwMm1fdG9wW3RvcGlkeF0sIHAybV9taWRfbWlzc2luZywKKwkJCQkJcDJtX21pZF9pZGVudGl0eSkgIT0gcDJtX21pZF9taXNzaW5nKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKIAkJaWYgKHAybV90b3BbdG9waWR4XVttaWRpZHhdID09IHAybV9pZGVudGl0eSkKIAkJCXJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCmluZGV4IDA5ODIyMzMuLjIxMDQyNmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zZXR1cC5jCisrKyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCkBAIC04OSwxMCArODksMTAgQEAKIAlmb3IgKHBmbiA9IFBGTl9ET1dOKHN0YXJ0KTsgcGZuIDwgeGVuX21heF9wMm1fcGZuOyBwZm4rKykgewogCQl1bnNpZ25lZCBsb25nIG1mbiA9IHBmbl90b19tZm4ocGZuKTsKIAotCQlpZiAoV0FSTihtZm4gPT0gcGZuLCAiVHJ5aW5nIHRvIG92ZXItd3JpdGUgMS0xIG1hcHBpbmcgKHBmbjogJWx4KVxuIiwgcGZuKSkKKwkJaWYgKFdBUk5fT05DRShtZm4gPT0gcGZuLCAiVHJ5aW5nIHRvIG92ZXItd3JpdGUgMS0xIG1hcHBpbmcgKHBmbjogJWx4KVxuIiwgcGZuKSkKIAkJCWNvbnRpbnVlOwotCQlXQVJOKG1mbiAhPSBJTlZBTElEX1AyTV9FTlRSWSwgIlRyeWluZyB0byByZW1vdmUgJWx4IHdoaWNoIGhhcyAlbHggbWZuIVxuIiwKLQkJCXBmbiwgbWZuKTsKKwkJV0FSTl9PTkNFKG1mbiAhPSBJTlZBTElEX1AyTV9FTlRSWSwgIlRyeWluZyB0byByZW1vdmUgJWx4IHdoaWNoIGhhcyAlbHggbWZuIVxuIiwKKwkJCSAgcGZuLCBtZm4pOwogCiAJCV9fc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIElOVkFMSURfUDJNX0VOVFJZKTsKIAl9CkBAIC00NjksNiArNDY5LDE1IEBACiAJfQogCiAJLyoKKwkgKiBTZXQgdGhlIHJlc3QgYXMgaWRlbnRpdHkgbWFwcGVkLCBpbiBjYXNlIFBDSSBCQVJzIGFyZQorCSAqIGxvY2F0ZWQgaGVyZS4KKwkgKgorCSAqIFBGTnMgYWJvdmUgTUFYX1AyTV9QRk4gYXJlIGNvbnNpZGVyZWQgaWRlbnRpdHkgbWFwcGVkIGFzCisJICogd2VsbC4KKwkgKi8KKwlzZXRfcGh5c19yYW5nZV9pZGVudGl0eShtYXBbaS0xXS5hZGRyIC8gUEFHRV9TSVpFLCB+MHVsKTsKKworCS8qCiAJICogSW4gZG9tVSwgdGhlIElTQSByZWdpb24gaXMgbm9ybWFsLCB1c2FibGUgbWVtb3J5LCBidXQgd2UKIAkgKiByZXNlcnZlIElTQSBtZW1vcnkgYW55d2F5IGJlY2F1c2UgdG9vIG1hbnkgdGhpbmdzIHBva2UKIAkgKiBhYm91dCBpbiB0aGVyZS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jCmluZGV4IDQ1MzI5YzguLmM0ZGY5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKKysrIGIvYXJjaC94ODYveGVuL3N1c3BlbmQuYwpAQCAtMTIsOCArMTIsMTAgQEAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAjaW5jbHVkZSAibW11LmgiCiAKLXZvaWQgeGVuX2FyY2hfcHJlX3N1c3BlbmQodm9pZCkKK3N0YXRpYyB2b2lkIHhlbl9wdl9wcmVfc3VzcGVuZCh2b2lkKQogeworCXhlbl9tbV9waW5fYWxsKCk7CisKIAl4ZW5fc3RhcnRfaW5mby0+c3RvcmVfbWZuID0gbWZuX3RvX3Bmbih4ZW5fc3RhcnRfaW5mby0+c3RvcmVfbWZuKTsKIAl4ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLm1mbiA9CiAJCW1mbl90b19wZm4oeGVuX3N0YXJ0X2luZm8tPmNvbnNvbGUuZG9tVS5tZm4pOwpAQCAtMjYsNyArMjgsNyBAQAogCQlCVUcoKTsKIH0KIAotdm9pZCB4ZW5fYXJjaF9odm1fcG9zdF9zdXNwZW5kKGludCBzdXNwZW5kX2NhbmNlbGxlZCkKK3N0YXRpYyB2b2lkIHhlbl9odm1fcG9zdF9zdXNwZW5kKGludCBzdXNwZW5kX2NhbmNlbGxlZCkKIHsKICNpZmRlZiBDT05GSUdfWEVOX1BWSFZNCiAJaW50IGNwdTsKQEAgLTQxLDcgKzQzLDcgQEAKICNlbmRpZgogfQogCi12b2lkIHhlbl9hcmNoX3Bvc3Rfc3VzcGVuZChpbnQgc3VzcGVuZF9jYW5jZWxsZWQpCitzdGF0aWMgdm9pZCB4ZW5fcHZfcG9zdF9zdXNwZW5kKGludCBzdXNwZW5kX2NhbmNlbGxlZCkKIHsKIAl4ZW5fYnVpbGRfbWZuX2xpc3RfbGlzdCgpOwogCkBAIC02MCw2ICs2MiwyMSBAQAogCQl4ZW5fdmNwdV9yZXN0b3JlKCk7CiAJfQogCisJeGVuX21tX3VucGluX2FsbCgpOworfQorCit2b2lkIHhlbl9hcmNoX3ByZV9zdXNwZW5kKHZvaWQpCit7CisgICAgaWYgKHhlbl9wdl9kb21haW4oKSkKKyAgICAgICAgeGVuX3B2X3ByZV9zdXNwZW5kKCk7Cit9CisKK3ZvaWQgeGVuX2FyY2hfcG9zdF9zdXNwZW5kKGludCBjYW5jZWxsZWQpCit7CisgICAgaWYgKHhlbl9wdl9kb21haW4oKSkKKyAgICAgICAgeGVuX3B2X3Bvc3Rfc3VzcGVuZChjYW5jZWxsZWQpOworICAgIGVsc2UKKyAgICAgICAgeGVuX2h2bV9wb3N0X3N1c3BlbmQoY2FuY2VsbGVkKTsKIH0KIAogc3RhdGljIHZvaWQgeGVuX3ZjcHVfbm90aWZ5X3Jlc3RvcmUodm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmggYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCmluZGV4IDFjYjZmNGMuLmM4MzRkNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKKysrIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaApAQCAtMzEsNiArMzEsOCBAQAogdm9pZCB4ZW5fcmVzZXJ2ZV90b3Aodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5fbWF4X3AybV9wZm47CiAKK3ZvaWQgeGVuX21tX3Bpbl9hbGwodm9pZCk7Cit2b2lkIHhlbl9tbV91bnBpbl9hbGwodm9pZCk7CiB2b2lkIHhlbl9zZXRfcGF0KHU2NCk7CiAKIGNoYXIgKiBfX2luaXQgeGVuX21lbW9yeV9zZXR1cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZTdmYjQ0Ny4uZTUxMDNiNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CiAKQEAgLTM4NywxMiArMzg4LDYgQEAKICNlbmRpZgogfQogCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX1hURU5TQV9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYmFycmllci5oCmluZGV4IDBhMjRiMDQuLjViODg3NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTEzLDYgKzEzLDkgQEAKICNkZWZpbmUgcm1iKCkgYmFycmllcigpCiAjZGVmaW5lIHdtYigpIG1iKCkKIAorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKQkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkJCWJhcnJpZXIoKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYmFycmllci5oPgogCiAjZW5kaWYgLyogX1hURU5TQV9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA3YjY4NzNhLi4zZjQ0ZmEyIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjEsOSArMjEsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9tYigpCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjE0YmUwMy4uNWQ1MmRjNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTIyLDExICsyMiw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIHBjaWJpb3NfYWxsb2NfY29udHJvbGxlcih2b2lkKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxKQotewotCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCi19Ci0KIC8qIEFzc3VtZSBzb21lIHZhbHVlcy4gKFdlIHNob3VsZCByZXZpc2UgdGhlbSwgaWYgbmVjZXNzYXJ5KSAqLwogCiAjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDIwMDAKZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggMjA2NDVlOC4uYTJjZTZhYyAxMDA2NDQKLS0tIGEvYmxvY2svTWFrZWZpbGUKKysrIGIvYmxvY2svTWFrZWZpbGUKQEAgLTIsMTMgKzIsMTUgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXIKICMKIAotb2JqLSQoQ09ORklHX0JMT0NLKSA6PSBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXRhZy5vIGJsay1zeXNmcy5vIFwKK29iai0kKENPTkZJR19CTE9DSykgOj0gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay10YWcubyBibGstc3lzZnMubyBcCiAJCQlibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFwKIAkJCWJsay1leGVjLm8gYmxrLW1lcmdlLm8gYmxrLXNvZnRpcnEubyBibGstdGltZW91dC5vIFwKIAkJCWJsay1pb3BvbGwubyBibGstbGliLm8gYmxrLW1xLm8gYmxrLW1xLXRhZy5vIFwKIAkJCWJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHUubyBibGstbXEtY3B1bWFwLm8gaW9jdGwubyBcCi0JCQlnZW5oZC5vIHNjc2lfaW9jdGwubyBwYXJ0aXRpb24tZ2VuZXJpYy5vIHBhcnRpdGlvbnMvCisJCQlnZW5oZC5vIHNjc2lfaW9jdGwubyBwYXJ0aXRpb24tZ2VuZXJpYy5vIGlvcHJpby5vIFwKKwkJCXBhcnRpdGlvbnMvCiAKK29iai0kKENPTkZJR19CT1VOQ0UpCSs9IGJvdW5jZS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9CU0cpCSs9IGJzZy5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9CU0dMSUIpCSs9IGJzZy1saWIubwogb2JqLSQoQ09ORklHX0JMS19DR1JPVVApCSs9IGJsay1jZ3JvdXAubwpAQCAtMjAsMyArMjIsNCBAQAogb2JqLSQoQ09ORklHX0JMT0NLX0NPTVBBVCkJKz0gY29tcGF0X2lvY3RsLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkJKz0gYmxrLWludGVncml0eS5vCiBvYmotJChDT05GSUdfQkxLX0NNRExJTkVfUEFSU0VSKQkrPSBjbWRsaW5lLXBhcnNlci5vCitvYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpICs9IGJpby1pbnRlZ3JpdHkubwpkaWZmIC0tZ2l0IGEvZnMvYmlvLWludGVncml0eS5jIGIvYmxvY2svYmlvLWludGVncml0eS5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGZzL2Jpby1pbnRlZ3JpdHkuYwpyZW5hbWUgdG8gYmxvY2svYmlvLWludGVncml0eS5jCmluZGV4IDFjMmNlMGMuLjllMjQxMDYgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby1pbnRlZ3JpdHkuYworKysgYi9ibG9jay9iaW8taW50ZWdyaXR5LmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogCWlmICghYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCkKIAkJcmV0dXJuIC0xOwogCi0JYnMtPmJ2ZWNfaW50ZWdyaXR5X3Bvb2wgPSBiaW92ZWNfY3JlYXRlX3Bvb2woYnMsIHBvb2xfc2l6ZSk7CisJYnMtPmJ2ZWNfaW50ZWdyaXR5X3Bvb2wgPSBiaW92ZWNfY3JlYXRlX3Bvb2wocG9vbF9zaXplKTsKIAlpZiAoIWJzLT5idmVjX2ludGVncml0eV9wb29sKSB7CiAJCW1lbXBvb2xfZGVzdHJveShicy0+YmlvX2ludGVncml0eV9wb29sKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9ibG9jay9iaW8uYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBmcy9iaW8uYwpyZW5hbWUgdG8gYmxvY2svYmlvLmMKaW5kZXggNmYwMzYyYi4uOTZkMjhlZSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvYmxvY2svYmlvLmMKQEAgLTMwNSw2ICszMDUsOCBAQAogCiAvKioKICAqIGJpb19jaGFpbiAtIGNoYWluIGJpbyBjb21wbGV0aW9ucworICogQGJpbzogdGhlIHRhcmdldCBiaW8KKyAqIEBwYXJlbnQ6IHRoZSBAYmlvJ3MgcGFyZW50IGJpbwogICoKICAqIFRoZSBjYWxsZXIgd29uJ3QgaGF2ZSBhIGJpX2VuZF9pbyBjYWxsZWQgd2hlbiBAYmlvIGNvbXBsZXRlcyAtIGluc3RlYWQsCiAgKiBAcGFyZW50J3MgYmlfZW5kX2lvIHdvbid0IGJlIGNhbGxlZCB1bnRpbCBib3RoIEBwYXJlbnQgYW5kIEBiaW8gaGF2ZQpAQCAtMTAxMSw4ICsxMDEzLDcgQEAKIAliaW8tPmJpX3ByaXZhdGUgPSBibWQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmlvX21hcF9kYXRhICpiaW9fYWxsb2NfbWFwX2RhdGEoaW50IG5yX3NlZ3MsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW92X2NvdW50LAorc3RhdGljIHN0cnVjdCBiaW9fbWFwX2RhdGEgKmJpb19hbGxvY19tYXBfZGF0YSh1bnNpZ25lZCBpbnQgaW92X2NvdW50LAogCQkJCQkgICAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaWYgKGlvdl9jb3VudCA+IFVJT19NQVhJT1YpCkBAIC0xMTU0LDcgKzExNTUsNyBAQAogCWlmIChvZmZzZXQpCiAJCW5yX3BhZ2VzKys7CiAKLQlibWQgPSBiaW9fYWxsb2NfbWFwX2RhdGEobnJfcGFnZXMsIGlvdl9jb3VudCwgZ2ZwX21hc2spOworCWJtZCA9IGJpb19hbGxvY19tYXBfZGF0YShpb3ZfY291bnQsIGdmcF9tYXNrKTsKIAlpZiAoIWJtZCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKQEAgLTE4NTksNyArMTg2MCw3IEBACiAgKiBjcmVhdGUgbWVtb3J5IHBvb2xzIGZvciBiaW92ZWMncyBpbiBhIGJpb19zZXQuCiAgKiB1c2UgdGhlIGdsb2JhbCBiaW92ZWMgc2xhYnMgY3JlYXRlZCBmb3IgZ2VuZXJhbCB1c2UuCiAgKi8KLW1lbXBvb2xfdCAqYmlvdmVjX2NyZWF0ZV9wb29sKHN0cnVjdCBiaW9fc2V0ICpicywgaW50IHBvb2xfZW50cmllcykKK21lbXBvb2xfdCAqYmlvdmVjX2NyZWF0ZV9wb29sKGludCBwb29sX2VudHJpZXMpCiB7CiAJc3RydWN0IGJpb3ZlY19zbGFiICpicCA9IGJ2ZWNfc2xhYnMgKyBCSU9WRUNfTUFYX0lEWDsKIApAQCAtMTkyMiw3ICsxOTIzLDcgQEAKIAlpZiAoIWJzLT5iaW9fcG9vbCkKIAkJZ290byBiYWQ7CiAKLQlicy0+YnZlY19wb29sID0gYmlvdmVjX2NyZWF0ZV9wb29sKGJzLCBwb29sX3NpemUpOworCWJzLT5idmVjX3Bvb2wgPSBiaW92ZWNfY3JlYXRlX3Bvb2wocG9vbF9zaXplKTsKIAlpZiAoIWJzLT5idmVjX3Bvb2wpCiAJCWdvdG8gYmFkOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCBhMGUzMDk2Li40MGQ2NTQ4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTE0Niw4ICsxNDYsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIiAgc2VjdG9yICVsbHUsIG5yL2NuciAldS8ldVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtfcnFfcG9zKHJxKSwKIAkgICAgICAgYmxrX3JxX3NlY3RvcnMocnEpLCBibGtfcnFfY3VyX3NlY3RvcnMocnEpKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGJpbyAlcCwgYmlvdGFpbCAlcCwgYnVmZmVyICVwLCBsZW4gJXVcbiIsCi0JICAgICAgIHJxLT5iaW8sIHJxLT5iaW90YWlsLCBycS0+YnVmZmVyLCBibGtfcnFfYnl0ZXMocnEpKTsKKwlwcmludGsoS0VSTl9JTkZPICIgIGJpbyAlcCwgYmlvdGFpbCAlcCwgbGVuICV1XG4iLAorCSAgICAgICBycS0+YmlvLCBycS0+YmlvdGFpbCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiAgY2RiOiAiKTsKQEAgLTI1MSw4ICsyNTEsMTAgQEAKIAkJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CiAJCWludCBpOwogCi0JCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKQotCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZoY3R4LT5kZWxheWVkX3dvcmspOworCQlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZoY3R4LT5ydW5fd29yayk7CisJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmhjdHgtPmRlbGF5X3dvcmspOworCQl9CiAJfSBlbHNlIHsKIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxLT5kZWxheV93b3JrKTsKIAl9CkBAIC01NzQsMTIgKzU3Niw5IEBACiAJaWYgKCFxKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChwZXJjcHVfY291bnRlcl9pbml0KCZxLT5tcV91c2FnZV9jb3VudGVyLCAwKSkKLQkJZ290byBmYWlsX3E7Ci0KIAlxLT5pZCA9IGlkYV9zaW1wbGVfZ2V0KCZibGtfcXVldWVfaWRhLCAwLCAwLCBnZnBfbWFzayk7CiAJaWYgKHEtPmlkIDwgMCkKLQkJZ290byBmYWlsX2M7CisJCWdvdG8gZmFpbF9xOwogCiAJcS0+YmFja2luZ19kZXZfaW5mby5yYV9wYWdlcyA9CiAJCQkoVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQpIC8gUEFHRV9DQUNIRV9TSVpFOwpAQCAtNjM3LDggKzYzNiw2IEBACiAJYmRpX2Rlc3Ryb3koJnEtPmJhY2tpbmdfZGV2X2luZm8pOwogZmFpbF9pZDoKIAlpZGFfc2ltcGxlX3JlbW92ZSgmYmxrX3F1ZXVlX2lkYSwgcS0+aWQpOwotZmFpbF9jOgotCXBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koJnEtPm1xX3VzYWdlX2NvdW50ZXIpOwogZmFpbF9xOgogCWttZW1fY2FjaGVfZnJlZShibGtfcmVxdWVzdHFfY2FjaGVwLCBxKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTg0Niw2ICs4NDMsNDcgQEAKIAkJX19mcmVlZF9yZXF1ZXN0KHJsLCBzeW5jIF4gMSk7CiB9CiAKK2ludCBibGtfdXBkYXRlX25yX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbnIpCit7CisJc3RydWN0IHJlcXVlc3RfbGlzdCAqcmw7CisKKwlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCXEtPm5yX3JlcXVlc3RzID0gbnI7CisJYmxrX3F1ZXVlX2Nvbmdlc3Rpb25fdGhyZXNob2xkKHEpOworCisJLyogY29uZ2VzdGlvbiBpc24ndCBjZ3JvdXAgYXdhcmUgYW5kIGZvbGxvd3Mgcm9vdCBibGtjZyBmb3Igbm93ICovCisJcmwgPSAmcS0+cm9vdF9ybDsKKworCWlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdID49IHF1ZXVlX2Nvbmdlc3Rpb25fb25fdGhyZXNob2xkKHEpKQorCQlibGtfc2V0X3F1ZXVlX2Nvbmdlc3RlZChxLCBCTEtfUldfU1lOQyk7CisJZWxzZSBpZiAocmwtPmNvdW50W0JMS19SV19TWU5DXSA8IHF1ZXVlX2Nvbmdlc3Rpb25fb2ZmX3RocmVzaG9sZChxKSkKKwkJYmxrX2NsZWFyX3F1ZXVlX2Nvbmdlc3RlZChxLCBCTEtfUldfU1lOQyk7CisKKwlpZiAocmwtPmNvdW50W0JMS19SV19BU1lOQ10gPj0gcXVldWVfY29uZ2VzdGlvbl9vbl90aHJlc2hvbGQocSkpCisJCWJsa19zZXRfcXVldWVfY29uZ2VzdGVkKHEsIEJMS19SV19BU1lOQyk7CisJZWxzZSBpZiAocmwtPmNvdW50W0JMS19SV19BU1lOQ10gPCBxdWV1ZV9jb25nZXN0aW9uX29mZl90aHJlc2hvbGQocSkpCisJCWJsa19jbGVhcl9xdWV1ZV9jb25nZXN0ZWQocSwgQkxLX1JXX0FTWU5DKTsKKworCWJsa19xdWV1ZV9mb3JfZWFjaF9ybChybCwgcSkgeworCQlpZiAocmwtPmNvdW50W0JMS19SV19TWU5DXSA+PSBxLT5ucl9yZXF1ZXN0cykgeworCQkJYmxrX3NldF9ybF9mdWxsKHJsLCBCTEtfUldfU1lOQyk7CisJCX0gZWxzZSB7CisJCQlibGtfY2xlYXJfcmxfZnVsbChybCwgQkxLX1JXX1NZTkMpOworCQkJd2FrZV91cCgmcmwtPndhaXRbQkxLX1JXX1NZTkNdKTsKKwkJfQorCisJCWlmIChybC0+Y291bnRbQkxLX1JXX0FTWU5DXSA+PSBxLT5ucl9yZXF1ZXN0cykgeworCQkJYmxrX3NldF9ybF9mdWxsKHJsLCBCTEtfUldfQVNZTkMpOworCQl9IGVsc2UgeworCQkJYmxrX2NsZWFyX3JsX2Z1bGwocmwsIEJMS19SV19BU1lOQyk7CisJCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfQVNZTkNdKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIERldGVybWluZSBpZiBlbGV2YXRvciBkYXRhIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aGVuIGFsbG9jYXRpbmcgdGhlCiAgKiByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAYmlvLgpAQCAtMTEzNSw3ICsxMTczLDcgQEAKIHN0cnVjdCByZXF1ZXN0ICpibGtfZ2V0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBydywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaWYgKHEtPm1xX29wcykKLQkJcmV0dXJuIGJsa19tcV9hbGxvY19yZXF1ZXN0KHEsIHJ3LCBnZnBfbWFzayk7CisJCXJldHVybiBibGtfbXFfYWxsb2NfcmVxdWVzdChxLCBydywgZ2ZwX21hc2ssIGZhbHNlKTsKIAllbHNlCiAJCXJldHVybiBibGtfb2xkX2dldF9yZXF1ZXN0KHEsIHJ3LCBnZnBfbWFzayk7CiB9CkBAIC0xMjMxLDEyICsxMjY5LDE1IEBACiBzdGF0aWMgdm9pZCBwYXJ0X3JvdW5kX3N0YXRzX3NpbmdsZShpbnQgY3B1LCBzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5vdykKIHsKKwlpbnQgaW5mbGlnaHQ7CisKIAlpZiAobm93ID09IHBhcnQtPnN0YW1wKQogCQlyZXR1cm47CiAKLQlpZiAocGFydF9pbl9mbGlnaHQocGFydCkpIHsKKwlpbmZsaWdodCA9IHBhcnRfaW5fZmxpZ2h0KHBhcnQpOworCWlmIChpbmZsaWdodCkgewogCQlfX3BhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCB0aW1lX2luX3F1ZXVlLAotCQkJCXBhcnRfaW5fZmxpZ2h0KHBhcnQpICogKG5vdyAtIHBhcnQtPnN0YW1wKSk7CisJCQkJaW5mbGlnaHQgKiAobm93IC0gcGFydC0+c3RhbXApKTsKIAkJX19wYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgaW9fdGlja3MsIChub3cgLSBwYXJ0LT5zdGFtcCkpOwogCX0KIAlwYXJ0LT5zdGFtcCA9IG5vdzsKQEAgLTEzNjAsNyArMTQwMSw2IEBACiAKIAlycS0+X19kYXRhX2xlbiA9IHJxLT5yZXNpZF9sZW4gPSBsZW47CiAJcnEtPm5yX3BoeXNfc2VnbWVudHMgPSAxOwotCXJxLT5idWZmZXIgPSBiaW9fZGF0YShiaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQpOwogCkBAIC0xNDAyLDEyICsxNDQyLDYgQEAKIAliaW8tPmJpX25leHQgPSByZXEtPmJpbzsKIAlyZXEtPmJpbyA9IGJpbzsKIAotCS8qCi0JICogbWF5IG5vdCBiZSB2YWxpZC4gaWYgdGhlIGxvdyBsZXZlbCBkcml2ZXIgc2FpZAotCSAqIGl0IGRpZG4ndCBuZWVkIGEgYm91bmNlIGJ1ZmZlciB0aGVuIGl0IGJldHRlcgotCSAqIG5vdCB0b3VjaCByZXEtPmJ1ZmZlciBlaXRoZXIuLi4KLQkgKi8KLQlyZXEtPmJ1ZmZlciA9IGJpb19kYXRhKGJpbyk7CiAJcmVxLT5fX3NlY3RvciA9IGJpby0+YmlfaXRlci5iaV9zZWN0b3I7CiAJcmVxLT5fX2RhdGFfbGVuICs9IGJpby0+YmlfaXRlci5iaV9zaXplOwogCXJlcS0+aW9wcmlvID0gaW9wcmlvX2Jlc3QocmVxLT5pb3ByaW8sIGJpb19wcmlvKGJpbykpOwpAQCAtMTQzMiw2ICsxNDY2LDggQEAKICAqIGFkZGVkIG9uIHRoZSBlbGV2YXRvciBhdCB0aGlzIHBvaW50LiAgSW4gYWRkaXRpb24sIHdlIGRvbid0IGhhdmUKICAqIHJlbGlhYmxlIGFjY2VzcyB0byB0aGUgZWxldmF0b3Igb3V0c2lkZSBxdWV1ZSBsb2NrLiAgT25seSBjaGVjayBiYXNpYwogICogbWVyZ2luZyBwYXJhbWV0ZXJzIHdpdGhvdXQgcXVlcnlpbmcgdGhlIGVsZXZhdG9yLgorICoKKyAqIENhbGxlciBtdXN0IGVuc3VyZSAhYmxrX3F1ZXVlX25vbWVyZ2VzKHEpIGJlZm9yZWhhbmQuCiAgKi8KIGJvb2wgYmxrX2F0dGVtcHRfcGx1Z19tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAogCQkJICAgIHVuc2lnbmVkIGludCAqcmVxdWVzdF9jb3VudCkKQEAgLTE0NDEsOSArMTQ3Nyw2IEBACiAJYm9vbCByZXQgPSBmYWxzZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwbHVnX2xpc3Q7CiAKLQlpZiAoYmxrX3F1ZXVlX25vbWVyZ2VzKHEpKQotCQlnb3RvIG91dDsKLQogCXBsdWcgPSBjdXJyZW50LT5wbHVnOwogCWlmICghcGx1ZykKIAkJZ290byBvdXQ7CkBAIC0xNTIyLDcgKzE1NTUsOCBAQAogCSAqIENoZWNrIGlmIHdlIGNhbiBtZXJnZSB3aXRoIHRoZSBwbHVnZ2VkIGxpc3QgYmVmb3JlIGdyYWJiaW5nCiAJICogYW55IGxvY2tzLgogCSAqLwotCWlmIChibGtfYXR0ZW1wdF9wbHVnX21lcmdlKHEsIGJpbywgJnJlcXVlc3RfY291bnQpKQorCWlmICghYmxrX3F1ZXVlX25vbWVyZ2VzKHEpICYmCisJICAgIGJsa19hdHRlbXB0X3BsdWdfbWVyZ2UocSwgYmlvLCAmcmVxdWVzdF9jb3VudCkpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CkBAIC0xNjU0LDcgKzE2ODgsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpciA9IGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoImZhaWxfbWFrZV9yZXF1ZXN0IiwKIAkJCQkJCU5VTEwsICZmYWlsX21ha2VfcmVxdWVzdCk7CiAKLQlyZXR1cm4gSVNfRVJSKGRpcikgPyBQVFJfRVJSKGRpcikgOiAwOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZGlyKTsKIH0KIAogbGF0ZV9pbml0Y2FsbChmYWlsX21ha2VfcmVxdWVzdF9kZWJ1Z2ZzKTsKQEAgLTI0MzQsNyArMjQ2OCw2IEBACiAJfQogCiAJcmVxLT5fX2RhdGFfbGVuIC09IHRvdGFsX2J5dGVzOwotCXJlcS0+YnVmZmVyID0gYmlvX2RhdGEocmVxLT5iaW8pOwogCiAJLyogdXBkYXRlIHNlY3RvciBvbmx5IGZvciByZXF1ZXN0cyB3aXRoIGNsZWFyIGRlZmluaXRpb24gb2Ygc2VjdG9yICovCiAJaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCkBAIC0yNTAzLDcgKzI1MzYsNyBAQAogLyoKICAqIHF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkCiAgKi8KLXN0YXRpYyB2b2lkIGJsa19maW5pc2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBpbnQgZXJyb3IpCit2b2lkIGJsa19maW5pc2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBpbnQgZXJyb3IpCiB7CiAJaWYgKGJsa19ycV90YWdnZWQocmVxKSkKIAkJYmxrX3F1ZXVlX2VuZF90YWcocmVxLT5xLCByZXEpOwpAQCAtMjUyOSw2ICsyNTYyLDcgQEAKIAkJX19ibGtfcHV0X3JlcXVlc3QocmVxLT5xLCByZXEpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woYmxrX2ZpbmlzaF9yZXF1ZXN0KTsKIAogLyoqCiAgKiBibGtfZW5kX2JpZGlfcmVxdWVzdCAtIENvbXBsZXRlIGEgYmlkaSByZXF1ZXN0CkBAIC0yNzUyLDEwICsyNzg2LDkgQEAKIAkvKiBCaXQgMCAoUi9XKSBpcyBpZGVudGljYWwgaW4gcnEtPmNtZF9mbGFncyBhbmQgYmlvLT5iaV9ydyAqLwogCXJxLT5jbWRfZmxhZ3MgfD0gYmlvLT5iaV9ydyAmIFJFUV9XUklURTsKIAotCWlmIChiaW9faGFzX2RhdGEoYmlvKSkgeworCWlmIChiaW9faGFzX2RhdGEoYmlvKSkKIAkJcnEtPm5yX3BoeXNfc2VnbWVudHMgPSBiaW9fcGh5c19zZWdtZW50cyhxLCBiaW8pOwotCQlycS0+YnVmZmVyID0gYmlvX2RhdGEoYmlvKTsKLQl9CisKIAlycS0+X19kYXRhX2xlbiA9IGJpby0+YmlfaXRlci5iaV9zaXplOwogCXJxLT5iaW8gPSBycS0+YmlvdGFpbCA9IGJpbzsKIApAQCAtMjgzMSw3ICsyODY0LDcgQEAKIAogLyoKICAqIENvcHkgYXR0cmlidXRlcyBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0byB0aGUgY2xvbmUgcmVxdWVzdC4KLSAqIFRoZSBhY3R1YWwgZGF0YSBwYXJ0cyAoZS5nLiAtPmNtZCwgLT5idWZmZXIsIC0+c2Vuc2UpIGFyZSBub3QgY29waWVkLgorICogVGhlIGFjdHVhbCBkYXRhIHBhcnRzIChlLmcuIC0+Y21kLCAtPnNlbnNlKSBhcmUgbm90IGNvcGllZC4KICAqLwogc3RhdGljIHZvaWQgX19ibGtfcnFfcHJlcF9jbG9uZShzdHJ1Y3QgcmVxdWVzdCAqZHN0LCBzdHJ1Y3QgcmVxdWVzdCAqc3JjKQogewpAQCAtMjg1Nyw3ICsyODkwLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgICBDbG9uZXMgYmlvcyBpbiBAcnFfc3JjIHRvIEBycSwgYW5kIGNvcGllcyBhdHRyaWJ1dGVzIG9mIEBycV9zcmMgdG8gQHJxLgotICogICAgIFRoZSBhY3R1YWwgZGF0YSBwYXJ0cyBvZiBAcnFfc3JjIChlLmcuIC0+Y21kLCAtPmJ1ZmZlciwgLT5zZW5zZSkKKyAqICAgICBUaGUgYWN0dWFsIGRhdGEgcGFydHMgb2YgQHJxX3NyYyAoZS5nLiAtPmNtZCwgLT5zZW5zZSkKICAqICAgICBhcmUgbm90IGNvcGllZCwgYW5kIGNvcHlpbmcgc3VjaCBwYXJ0cyBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuCiAgKiAgICAgQWxzbywgcGFnZXMgd2hpY2ggdGhlIG9yaWdpbmFsIGJpb3MgYXJlIHBvaW50aW5nIHRvIGFyZSBub3QgY29waWVkCiAgKiAgICAgYW5kIHRoZSBjbG9uZWQgYmlvcyBqdXN0IHBvaW50IHNhbWUgcGFnZXMuCkBAIC0yOTA0LDIwICsyOTM3LDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfcnFfcHJlcF9jbG9uZSk7CiAKLWludCBrYmxvY2tkX3NjaGVkdWxlX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK2ludCBrYmxvY2tkX3NjaGVkdWxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXJldHVybiBxdWV1ZV93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCB3b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0woa2Jsb2NrZF9zY2hlZHVsZV93b3JrKTsKIAotaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCitpbnQga2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssCisJCQkJICB1bnNpZ25lZCBsb25nIGRlbGF5KQogewogCXJldHVybiBxdWV1ZV9kZWxheWVkX3dvcmsoa2Jsb2NrZF93b3JrcXVldWUsIGR3b3JrLCBkZWxheSk7CiB9CiBFWFBPUlRfU1lNQk9MKGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKTsKIAotI2RlZmluZSBQTFVHX01BR0lDCTB4OTE4MjczNjQKK2ludCBrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihpbnQgY3B1LCBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpCit7CisJcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtibG9ja2Rfd29ya3F1ZXVlLCBkd29yaywgZGVsYXkpOworfQorRVhQT1JUX1NZTUJPTChrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29ya19vbik7CiAKIC8qKgogICogYmxrX3N0YXJ0X3BsdWcgLSBpbml0aWFsaXplIGJsa19wbHVnIGFuZCB0cmFjayBpdCBpbnNpZGUgdGhlIHRhc2tfc3RydWN0CkBAIC0yOTM3LDcgKzI5NzUsNiBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCXBsdWctPm1hZ2ljID0gUExVR19NQUdJQzsKIAlJTklUX0xJU1RfSEVBRCgmcGx1Zy0+bGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnBsdWctPm1xX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwbHVnLT5jYl9saXN0KTsKQEAgLTMwMzQsOCArMzA3MSw2IEBACiAJTElTVF9IRUFEKGxpc3QpOwogCXVuc2lnbmVkIGludCBkZXB0aDsKIAotCUJVR19PTihwbHVnLT5tYWdpYyAhPSBQTFVHX01BR0lDKTsKLQogCWZsdXNoX3BsdWdfY2FsbGJhY2tzKHBsdWcsIGZyb21fc2NoZWR1bGUpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZwbHVnLT5tcV9saXN0KSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1mbHVzaC5jIGIvYmxvY2svYmxrLWZsdXNoLmMKaW5kZXggNDNlNmI0Ny4uZmY4N2M2NiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWZsdXNoLmMKKysrIGIvYmxvY2svYmxrLWZsdXNoLmMKQEAgLTEzMCwyMSArMTMwLDEzIEBACiAJYmxrX2NsZWFyX3JxX2NvbXBsZXRlKHJxKTsKIH0KIAotc3RhdGljIHZvaWQgbXFfZmx1c2hfcnVuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQlycSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmVxdWVzdCwgbXFfZmx1c2hfd29yayk7Ci0KLQltZW1zZXQoJnJxLT5jc2QsIDAsIHNpemVvZihycS0+Y3NkKSk7Ci0JYmxrX21xX2luc2VydF9yZXF1ZXN0KHJxLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOwotfQotCiBzdGF0aWMgYm9vbCBibGtfZmx1c2hfcXVldWVfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGFkZF9mcm9udCkKIHsKIAlpZiAocnEtPnEtPm1xX29wcykgewotCQlJTklUX1dPUksoJnJxLT5tcV9mbHVzaF93b3JrLCBtcV9mbHVzaF9ydW4pOwotCQlrYmxvY2tkX3NjaGVkdWxlX3dvcmsocnEtPnEsICZycS0+bXFfZmx1c2hfd29yayk7CisJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CisKKwkJYmxrX21xX2FkZF90b19yZXF1ZXVlX2xpc3QocnEsIGFkZF9mcm9udCk7CisJCWJsa19tcV9raWNrX3JlcXVldWVfbGlzdChxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCWlmIChhZGRfZnJvbnQpCkBAIC0yMzEsOCArMjIzLDEwIEBACiAJc3RydWN0IHJlcXVlc3QgKnJxLCAqbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAotCWlmIChxLT5tcV9vcHMpCisJaWYgKHEtPm1xX29wcykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bXFfZmx1c2hfbG9jaywgZmxhZ3MpOworCQlxLT5mbHVzaF9ycS0+Y21kX2ZsYWdzID0gMDsKKwl9CiAKIAlydW5uaW5nID0gJnEtPmZsdXNoX3F1ZXVlW3EtPmZsdXNoX3J1bm5pbmdfaWR4XTsKIAlCVUdfT04ocS0+Zmx1c2hfcGVuZGluZ19pZHggPT0gcS0+Zmx1c2hfcnVubmluZ19pZHgpOwpAQCAtMzA2LDIzICszMDAsOSBAQAogCSAqLwogCXEtPmZsdXNoX3BlbmRpbmdfaWR4IF49IDE7CiAKLQlpZiAocS0+bXFfb3BzKSB7Ci0JCXN0cnVjdCBibGtfbXFfY3R4ICpjdHggPSBmaXJzdF9ycS0+bXFfY3R4OwotCQlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCA9IHEtPm1xX29wcy0+bWFwX3F1ZXVlKHEsIGN0eC0+Y3B1KTsKLQotCQlibGtfbXFfcnFfaW5pdChoY3R4LCBxLT5mbHVzaF9ycSk7Ci0JCXEtPmZsdXNoX3JxLT5tcV9jdHggPSBjdHg7Ci0KLQkJLyoKLQkJICogUmV1c2UgdGhlIHRhZyB2YWx1ZSBmcm9tIHRoZSBmaXN0IHdhaXRpbmcgcmVxdWVzdCwKLQkJICogd2l0aCBibGstbXEgdGhlIHRhZyBpcyBnZW5lcmF0ZWQgZHVyaW5nIHJlcXVlc3QKLQkJICogYWxsb2NhdGlvbiBhbmQgZHJpdmVycyBjYW4gcmVseSBvbiBpdCBiZWluZyBpbnNpZGUKLQkJICogdGhlIHJhbmdlIHRoZXkgYXNrZWQgZm9yLgotCQkgKi8KLQkJcS0+Zmx1c2hfcnEtPnRhZyA9IGZpcnN0X3JxLT50YWc7Ci0JfSBlbHNlIHsKLQkJYmxrX3JxX2luaXQocSwgcS0+Zmx1c2hfcnEpOwotCX0KKwlibGtfcnFfaW5pdChxLCBxLT5mbHVzaF9ycSk7CisJaWYgKHEtPm1xX29wcykKKwkJYmxrX21xX2Nsb25lX2ZsdXNoX3JlcXVlc3QocS0+Zmx1c2hfcnEsIGZpcnN0X3JxKTsKIAogCXEtPmZsdXNoX3JxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0ZTOwogCXEtPmZsdXNoX3JxLT5jbWRfZmxhZ3MgPSBXUklURV9GTFVTSCB8IFJFUV9GTFVTSF9TRVE7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9wb2xsLmMgYi9ibG9jay9ibGstaW9wb2xsLmMKaW5kZXggYzExZDI0ZS4uMDczNjcyOSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWlvcG9sbC5jCisrKyBiL2Jsb2NrL2Jsay1pb3BvbGwuYwpAQCAtNDksNyArNDksNyBAQAogdm9pZCBfX2Jsa19pb3BvbGxfY29tcGxldGUoc3RydWN0IGJsa19pb3BvbGwgKmlvcCkKIHsKIAlsaXN0X2RlbCgmaW9wLT5saXN0KTsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXRfdW5sb2NrKElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fYmxrX2lvcG9sbF9jb21wbGV0ZSk7CkBAIC02NCwxMiArNjQsMTIgQEAKICAqICAgICBpb3BvbGwgaGFuZGxlciB3aWxsIG5vdCBiZSBpbnZva2VkIGFnYWluIGJlZm9yZSBibGtfaW9wb2xsX3NjaGVkX3ByZXAoKQogICogICAgIGlzIGNhbGxlZC4KICAqKi8KLXZvaWQgYmxrX2lvcG9sbF9jb21wbGV0ZShzdHJ1Y3QgYmxrX2lvcG9sbCAqaW9wb2xsKQordm9pZCBibGtfaW9wb2xsX2NvbXBsZXRlKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2Jsa19pb3BvbGxfY29tcGxldGUoaW9wb2xsKTsKKwlfX2Jsa19pb3BvbGxfY29tcGxldGUoaW9wKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfY29tcGxldGUpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiB2b2lkIGJsa19pb3BvbGxfZW5hYmxlKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCiB7CiAJQlVHX09OKCF0ZXN0X2JpdChJT1BPTExfRl9TQ0hFRCwgJmlvcC0+c3RhdGUpKTsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXRfdW5sb2NrKElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1saWIuYyBiL2Jsb2NrL2Jsay1saWIuYwppbmRleCA5N2E3MzNjLi44NDExYmUzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbGliLmMKKysrIGIvYmxvY2svYmxrLWxpYi5jCkBAIC0yMjYsOCArMjI2LDggQEAKICAqICBHZW5lcmF0ZSBhbmQgaXNzdWUgbnVtYmVyIG9mIGJpb3Mgd2l0aCB6ZXJvZmlsZWQgcGFnZXMuCiAgKi8KIAotaW50IF9fYmxrZGV2X2lzc3VlX3plcm9vdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLAotCQkJc2VjdG9yX3QgbnJfc2VjdHMsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGludCBfX2Jsa2Rldl9pc3N1ZV96ZXJvb3V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKKwkJCQkgIHNlY3Rvcl90IG5yX3NlY3RzLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBiaW8gKmJpbzsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuYwppbmRleCBmN2IyMmJjLi5mODkwZDQzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWFwLmMKKysrIGIvYmxvY2svYmxrLW1hcC5jCkBAIC0xNTUsNyArMTU1LDYgQEAKIAlpZiAoIWJpb19mbGFnZ2VkKGJpbywgQklPX1VTRVJfTUFQUEVEKSkKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfQ09QWV9VU0VSOwogCi0JcnEtPmJ1ZmZlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB1bm1hcF9ycToKIAlibGtfcnFfdW5tYXBfdXNlcihiaW8pOwpAQCAtMjM4LDcgKzIzNyw2IEBACiAJYmxrX3F1ZXVlX2JvdW5jZShxLCAmYmlvKTsKIAliaW9fZ2V0KGJpbyk7CiAJYmxrX3JxX2Jpb19wcmVwKHEsIHJxLCBiaW8pOwotCXJxLT5idWZmZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnFfbWFwX3VzZXJfaW92KTsKQEAgLTMyNSw3ICszMjMsNiBAQAogCX0KIAogCWJsa19xdWV1ZV9ib3VuY2UocSwgJnJxLT5iaW8pOwotCXJxLT5idWZmZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnFfbWFwX2tlcm4pOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA2YzU4M2Y5Li5iM2JmMGRmIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtMTMsNyArMTMsNyBAQAogCQkJCQkgICAgIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgYmlvX3ZlYyBidiwgYnZwcnYgPSB7IE5VTEwgfTsKLQlpbnQgY2x1c3RlciwgaGlnaCwgaGlnaHBydiA9IDE7CisJaW50IGNsdXN0ZXIsIGhpZ2gsIGhpZ2hwcnYgPSAxLCBub19zZ19tZXJnZTsKIAl1bnNpZ25lZCBpbnQgc2VnX3NpemUsIG5yX3BoeXNfc2VnczsKIAlzdHJ1Y3QgYmlvICpmYmlvLCAqYmJpbzsKIAlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7CkBAIC0zNSwxMiArMzUsMjEgQEAKIAljbHVzdGVyID0gYmxrX3F1ZXVlX2NsdXN0ZXIocSk7CiAJc2VnX3NpemUgPSAwOwogCW5yX3BoeXNfc2VncyA9IDA7CisJbm9fc2dfbWVyZ2UgPSB0ZXN0X2JpdChRVUVVRV9GTEFHX05PX1NHX01FUkdFLCAmcS0+cXVldWVfZmxhZ3MpOworCWhpZ2ggPSAwOwogCWZvcl9lYWNoX2JpbyhiaW8pIHsKIAkJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaXRlcikgewogCQkJLyoKKwkJCSAqIElmIFNHIG1lcmdpbmcgaXMgZGlzYWJsZWQsIGVhY2ggYmlvIHZlY3RvciBpcworCQkJICogYSBzZWdtZW50CisJCQkgKi8KKwkJCWlmIChub19zZ19tZXJnZSkKKwkJCQlnb3RvIG5ld19zZWdtZW50OworCisJCQkvKgogCQkJICogdGhlIHRyaWNrIGhlcmUgaXMgbWFraW5nIHN1cmUgdGhhdCBhIGhpZ2ggcGFnZSBpcwotCQkJICogbmV2ZXIgY29uc2lkZXJlZCBwYXJ0IG9mIGFub3RoZXIgc2VnbWVudCwgc2luY2UgdGhhdAotCQkJICogbWlnaHQgY2hhbmdlIHdpdGggdGhlIGJvdW5jZSBwYWdlLgorCQkJICogbmV2ZXIgY29uc2lkZXJlZCBwYXJ0IG9mIGFub3RoZXIgc2VnbWVudCwgc2luY2UKKwkJCSAqIHRoYXQgbWlnaHQgY2hhbmdlIHdpdGggdGhlIGJvdW5jZSBwYWdlLgogCQkJICovCiAJCQloaWdoID0gcGFnZV90b19wZm4oYnYuYnZfcGFnZSkgPiBxdWV1ZV9ib3VuY2VfcGZuKHEpOwogCQkJaWYgKCFoaWdoICYmICFoaWdocHJ2ICYmIGNsdXN0ZXIpIHsKQEAgLTg0LDExICs5MywxNiBAQAogCiB2b2lkIGJsa19yZWNvdW50X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0Jc3RydWN0IGJpbyAqbnh0ID0gYmlvLT5iaV9uZXh0OworCWlmICh0ZXN0X2JpdChRVUVVRV9GTEFHX05PX1NHX01FUkdFLCAmcS0+cXVldWVfZmxhZ3MpKQorCQliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSBiaW8tPmJpX3ZjbnQ7CisJZWxzZSB7CisJCXN0cnVjdCBiaW8gKm54dCA9IGJpby0+YmlfbmV4dDsKIAotCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JYmlvLT5iaV9waHlzX3NlZ21lbnRzID0gX19ibGtfcmVjYWxjX3JxX3NlZ21lbnRzKHEsIGJpbyk7Ci0JYmlvLT5iaV9uZXh0ID0gbnh0OworCQliaW8tPmJpX25leHQgPSBOVUxMOworCQliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSBfX2Jsa19yZWNhbGNfcnFfc2VnbWVudHMocSwgYmlvKTsKKwkJYmlvLT5iaV9uZXh0ID0gbnh0OworCX0KKwogCWJpby0+YmlfZmxhZ3MgfD0gKDEgPDwgQklPX1NFR19WQUxJRCk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19yZWNvdW50X3NlZ21lbnRzKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1jcHUuYyBiL2Jsb2NrL2Jsay1tcS1jcHUuYwppbmRleCAxMzZlZjg2Li5iYjNlZDQ4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtY3B1LmMKKysrIGIvYmxvY2svYmxrLW1xLWNwdS5jCkBAIC0xLDMgKzEsOCBAQAorLyoKKyAqIENQVSBub3RpZmllciBoZWxwZXIgY29kZSBmb3IgYmxrLW1xCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgSmVucyBBeGJvZQorICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTgsMTQgKzIzLDE4IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKSBoY3B1OwogCXN0cnVjdCBibGtfbXFfY3B1X25vdGlmaWVyICpub3RpZnk7CisJaW50IHJldCA9IE5PVElGWV9PSzsKIAogCXJhd19zcGluX2xvY2soJmJsa19tcV9jcHVfbm90aWZ5X2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShub3RpZnksICZibGtfbXFfY3B1X25vdGlmeV9saXN0LCBsaXN0KQotCQlub3RpZnktPm5vdGlmeShub3RpZnktPmRhdGEsIGFjdGlvbiwgY3B1KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vdGlmeSwgJmJsa19tcV9jcHVfbm90aWZ5X2xpc3QsIGxpc3QpIHsKKwkJcmV0ID0gbm90aWZ5LT5ub3RpZnkobm90aWZ5LT5kYXRhLCBhY3Rpb24sIGNwdSk7CisJCWlmIChyZXQgIT0gTk9USUZZX09LKQorCQkJYnJlYWs7CisJfQogCiAJcmF3X3NwaW5fdW5sb2NrKCZibGtfbXFfY3B1X25vdGlmeV9sb2NrKTsKLQlyZXR1cm4gTk9USUZZX09LOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgYmxrX21xX3JlZ2lzdGVyX2NwdV9ub3RpZmllcihzdHJ1Y3QgYmxrX21xX2NwdV9ub3RpZmllciAqbm90aWZpZXIpCkBAIC00NSw3ICs1NCw3IEBACiB9CiAKIHZvaWQgYmxrX21xX2luaXRfY3B1X25vdGlmaWVyKHN0cnVjdCBibGtfbXFfY3B1X25vdGlmaWVyICpub3RpZmllciwKLQkJCSAgICAgIHZvaWQgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpLAorCQkJICAgICAgaW50ICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KSwKIAkJCSAgICAgIHZvaWQgKmRhdGEpCiB7CiAJbm90aWZpZXItPm5vdGlmeSA9IGZuOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWNwdW1hcC5jIGIvYmxvY2svYmxrLW1xLWNwdW1hcC5jCmluZGV4IDA5NzkyMTMuLjEwNjVkN2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1jcHVtYXAuYworKysgYi9ibG9jay9ibGstbXEtY3B1bWFwLmMKQEAgLTEsMyArMSw4IEBACisvKgorICogQ1BVIDwtPiBoYXJkd2FyZSBxdWV1ZSBtYXBwaW5nIGhlbHBlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBKZW5zIEF4Ym9lCisgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04MCwxOSArODUsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50ICpibGtfbXFfbWFrZV9xdWV1ZV9tYXAoc3RydWN0IGJsa19tcV9yZWcgKnJlZykKK3Vuc2lnbmVkIGludCAqYmxrX21xX21ha2VfcXVldWVfbWFwKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KQogewogCXVuc2lnbmVkIGludCAqbWFwOwogCiAJLyogSWYgY3B1cyBhcmUgb2ZmbGluZSwgbWFwIHRoZW0gdG8gZmlyc3QgaGN0eCAqLwogCW1hcCA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKm1hcCkgKiBudW1fcG9zc2libGVfY3B1cygpLCBHRlBfS0VSTkVMLAotCQkJCXJlZy0+bnVtYV9ub2RlKTsKKwkJCQlzZXQtPm51bWFfbm9kZSk7CiAJaWYgKCFtYXApCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKCFibGtfbXFfdXBkYXRlX3F1ZXVlX21hcChtYXAsIHJlZy0+bnJfaHdfcXVldWVzKSkKKwlpZiAoIWJsa19tcV91cGRhdGVfcXVldWVfbWFwKG1hcCwgc2V0LT5ucl9od19xdWV1ZXMpKQogCQlyZXR1cm4gbWFwOwogCiAJa2ZyZWUobWFwKTsKIAlyZXR1cm4gTlVMTDsKIH0KKworLyoKKyAqIFdlIGhhdmUgbm8gcXVpY2sgd2F5IG9mIGRvaW5nIHJldmVyc2UgbG9va3Vwcy4gVGhpcyBpcyBvbmx5IHVzZWQgYXQKKyAqIHF1ZXVlIGluaXQgdGltZSwgc28gcnVudGltZSBpc24ndCBpbXBvcnRhbnQuCisgKi8KK2ludCBibGtfbXFfaHdfcXVldWVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgKm1xX21hcCwgdW5zaWduZWQgaW50IGluZGV4KQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJaWYgKGluZGV4ID09IG1xX21hcFtpXSkKKwkJCXJldHVybiBjcHVfdG9fbm9kZShpKTsKKwl9CisKKwlyZXR1cm4gTlVNQV9OT19OT0RFOworfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLXN5c2ZzLmMgYi9ibG9jay9ibGstbXEtc3lzZnMuYwppbmRleCBiMGJhMjY0Li5lZDUyMTc4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtc3lzZnMuYworKysgYi9ibG9jay9ibGstbXEtc3lzZnMuYwpAQCAtMjAzLDU5ICsyMDMsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBibGtfbXFfaHdfc3lzZnNfaXBpX3Nob3coc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGNoYXIgKnBhZ2UpCi17Ci0Jc3NpemVfdCByZXQ7Ci0KLQlzcGluX2xvY2soJmhjdHgtPmxvY2spOwotCXJldCA9IHNwcmludGYocGFnZSwgIiV1XG4iLCAhIShoY3R4LT5mbGFncyAmIEJMS19NUV9GX1NIT1VMRF9JUEkpKTsKLQlzcGluX3VubG9jaygmaGN0eC0+bG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBibGtfbXFfaHdfc3lzZnNfaXBpX3N0b3JlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAotCQkJCQkgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OwotCXVuc2lnbmVkIGxvbmcgcmV0OwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKGtzdHJ0b3VsKHBhZ2UsIDEwLCAmcmV0KSkgewotCQlwcl9lcnIoImJsay1tcS1zeXNmczogaW52YWxpZCBpbnB1dCAnJXMnXG4iLCBwYWdlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZoY3R4LT5sb2NrKTsKLQlpZiAocmV0KQotCQloY3R4LT5mbGFncyB8PSBCTEtfTVFfRl9TSE9VTERfSVBJOwotCWVsc2UKLQkJaGN0eC0+ZmxhZ3MgJj0gfkJMS19NUV9GX1NIT1VMRF9JUEk7Ci0Jc3Bpbl91bmxvY2soJmhjdHgtPmxvY2spOwotCi0JaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBpKQotCQljdHgtPmlwaV9yZWRpcmVjdCA9ICEhcmV0OwotCi0JcmV0dXJuIGxlbjsKLX0KLQogc3RhdGljIHNzaXplX3QgYmxrX21xX2h3X3N5c2ZzX3RhZ3Nfc2hvdyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gYmxrX21xX3RhZ19zeXNmc19zaG93KGhjdHgtPnRhZ3MsIHBhZ2UpOwogfQogCitzdGF0aWMgc3NpemVfdCBibGtfbXFfaHdfc3lzZnNfYWN0aXZlX3Nob3coc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGNoYXIgKnBhZ2UpCit7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiV1XG4iLCBhdG9taWNfcmVhZCgmaGN0eC0+bnJfYWN0aXZlKSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGJsa19tcV9od19zeXNmc19jcHVzX3Nob3coc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGNoYXIgKnBhZ2UpCiB7Ci0JdW5zaWduZWQgaW50IGksIHF1ZXVlX251bSwgZmlyc3QgPSAxOworCXVuc2lnbmVkIGludCBpLCBmaXJzdCA9IDE7CiAJc3NpemVfdCByZXQgPSAwOwogCiAJYmxrX21xX2Rpc2FibGVfaG90cGx1ZygpOwogCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCXF1ZXVlX251bSA9IGhjdHgtPnF1ZXVlLT5tcV9tYXBbaV07Ci0JCWlmIChxdWV1ZV9udW0gIT0gaGN0eC0+cXVldWVfbnVtKQotCQkJY29udGludWU7Ci0KKwlmb3JfZWFjaF9jcHUoaSwgaGN0eC0+Y3B1bWFzaykgewogCQlpZiAoZmlyc3QpCiAJCQlyZXQgKz0gc3ByaW50ZihyZXQgKyBwYWdlLCAiJXUiLCBpKTsKIAkJZWxzZQpAQCAtMzA3LDE1ICsyNzIsMTQgQEAKIAkuYXR0ciA9IHsubmFtZSA9ICJkaXNwYXRjaGVkIiwgLm1vZGUgPSBTX0lSVUdPIH0sCiAJLnNob3cgPSBibGtfbXFfaHdfc3lzZnNfZGlzcGF0Y2hlZF9zaG93LAogfTsKK3N0YXRpYyBzdHJ1Y3QgYmxrX21xX2h3X2N0eF9zeXNmc19lbnRyeSBibGtfbXFfaHdfc3lzZnNfYWN0aXZlID0geworCS5hdHRyID0gey5uYW1lID0gImFjdGl2ZSIsIC5tb2RlID0gU19JUlVHTyB9LAorCS5zaG93ID0gYmxrX21xX2h3X3N5c2ZzX2FjdGl2ZV9zaG93LAorfTsKIHN0YXRpYyBzdHJ1Y3QgYmxrX21xX2h3X2N0eF9zeXNmc19lbnRyeSBibGtfbXFfaHdfc3lzZnNfcGVuZGluZyA9IHsKIAkuYXR0ciA9IHsubmFtZSA9ICJwZW5kaW5nIiwgLm1vZGUgPSBTX0lSVUdPIH0sCiAJLnNob3cgPSBibGtfbXFfaHdfc3lzZnNfcnFfbGlzdF9zaG93LAogfTsKLXN0YXRpYyBzdHJ1Y3QgYmxrX21xX2h3X2N0eF9zeXNmc19lbnRyeSBibGtfbXFfaHdfc3lzZnNfaXBpID0gewotCS5hdHRyID0gey5uYW1lID0gImlwaV9yZWRpcmVjdCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1J9LAotCS5zaG93ID0gYmxrX21xX2h3X3N5c2ZzX2lwaV9zaG93LAotCS5zdG9yZSA9IGJsa19tcV9od19zeXNmc19pcGlfc3RvcmUsCi19Owogc3RhdGljIHN0cnVjdCBibGtfbXFfaHdfY3R4X3N5c2ZzX2VudHJ5IGJsa19tcV9od19zeXNmc190YWdzID0gewogCS5hdHRyID0gey5uYW1lID0gInRhZ3MiLCAubW9kZSA9IFNfSVJVR08gfSwKIAkuc2hvdyA9IGJsa19tcV9od19zeXNmc190YWdzX3Nob3csCkBAIC0zMzAsOSArMjk0LDkgQEAKIAkmYmxrX21xX2h3X3N5c2ZzX3J1bi5hdHRyLAogCSZibGtfbXFfaHdfc3lzZnNfZGlzcGF0Y2hlZC5hdHRyLAogCSZibGtfbXFfaHdfc3lzZnNfcGVuZGluZy5hdHRyLAotCSZibGtfbXFfaHdfc3lzZnNfaXBpLmF0dHIsCiAJJmJsa19tcV9od19zeXNmc190YWdzLmF0dHIsCiAJJmJsa19tcV9od19zeXNmc19jcHVzLmF0dHIsCisJJmJsa19tcV9od19zeXNmc19hY3RpdmUuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzYzLDYgKzMyNyw0MiBAQAogCS5yZWxlYXNlCT0gYmxrX21xX3N5c2ZzX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgdm9pZCBibGtfbXFfdW5yZWdpc3Rlcl9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQoreworCXN0cnVjdCBibGtfbXFfY3R4ICpjdHg7CisJaW50IGk7CisKKwlpZiAoIWhjdHgtPm5yX2N0eCB8fCAhKGhjdHgtPmZsYWdzICYgQkxLX01RX0ZfU1lTRlNfVVApKQorCQlyZXR1cm47CisKKwloY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGkpCisJCWtvYmplY3RfZGVsKCZjdHgtPmtvYmopOworCisJa29iamVjdF9kZWwoJmhjdHgtPmtvYmopOworfQorCitzdGF0aWMgaW50IGJsa19tcV9yZWdpc3Rlcl9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gaGN0eC0+cXVldWU7CisJc3RydWN0IGJsa19tcV9jdHggKmN0eDsKKwlpbnQgaSwgcmV0OworCisJaWYgKCFoY3R4LT5ucl9jdHggfHwgIShoY3R4LT5mbGFncyAmIEJMS19NUV9GX1NZU0ZTX1VQKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBrb2JqZWN0X2FkZCgmaGN0eC0+a29iaiwgJnEtPm1xX2tvYmosICIldSIsIGhjdHgtPnF1ZXVlX251bSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWhjdHhfZm9yX2VhY2hfY3R4KGhjdHgsIGN0eCwgaSkgeworCQlyZXQgPSBrb2JqZWN0X2FkZCgmY3R4LT5rb2JqLCAmaGN0eC0+a29iaiwgImNwdSV1IiwgY3R4LT5jcHUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBibGtfbXFfdW5yZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0+cXVldWU7CkBAIC0zNzEsMTEgKzM3MSwxMSBAQAogCWludCBpLCBqOwogCiAJcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHsKLQkJaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBqKSB7Ci0JCQlrb2JqZWN0X2RlbCgmY3R4LT5rb2JqKTsKKwkJYmxrX21xX3VucmVnaXN0ZXJfaGN0eChoY3R4KTsKKworCQloY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGopCiAJCQlrb2JqZWN0X3B1dCgmY3R4LT5rb2JqKTsKLQkJfQotCQlrb2JqZWN0X2RlbCgmaGN0eC0+a29iaik7CisKIAkJa29iamVjdF9wdXQoJmhjdHgtPmtvYmopOwogCX0KIApAQCAtMzg2LDE1ICszODYsMzAgQEAKIAlrb2JqZWN0X3B1dCgmZGlza190b19kZXYoZGlzayktPmtvYmopOwogfQogCitzdGF0aWMgdm9pZCBibGtfbXFfc3lzZnNfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OworCWludCBpLCBqOworCisJa29iamVjdF9pbml0KCZxLT5tcV9rb2JqLCAmYmxrX21xX2t0eXBlKTsKKworCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7CisJCWtvYmplY3RfaW5pdCgmaGN0eC0+a29iaiwgJmJsa19tcV9od19rdHlwZSk7CisKKwkJaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBqKQorCQkJa29iamVjdF9pbml0KCZjdHgtPmtvYmosICZibGtfbXFfY3R4X2t0eXBlKTsKKwl9Cit9CisKIGludCBibGtfbXFfcmVnaXN0ZXJfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkaXNrX3RvX2RldihkaXNrKTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OwotCXN0cnVjdCBibGtfbXFfY3R4ICpjdHg7Ci0JaW50IHJldCwgaSwgajsKKwlpbnQgcmV0LCBpOwogCi0Ja29iamVjdF9pbml0KCZxLT5tcV9rb2JqLCAmYmxrX21xX2t0eXBlKTsKKwlibGtfbXFfc3lzZnNfaW5pdChxKTsKIAogCXJldCA9IGtvYmplY3RfYWRkKCZxLT5tcV9rb2JqLCBrb2JqZWN0X2dldCgmZGV2LT5rb2JqKSwgIiVzIiwgIm1xIik7CiAJaWYgKHJldCA8IDApCkBAIC00MDMsMjAgKzQxOCwxMCBAQAogCWtvYmplY3RfdWV2ZW50KCZxLT5tcV9rb2JqLCBLT0JKX0FERCk7CiAKIAlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkgewotCQlrb2JqZWN0X2luaXQoJmhjdHgtPmtvYmosICZibGtfbXFfaHdfa3R5cGUpOwotCQlyZXQgPSBrb2JqZWN0X2FkZCgmaGN0eC0+a29iaiwgJnEtPm1xX2tvYmosICIldSIsIGkpOworCQloY3R4LT5mbGFncyB8PSBCTEtfTVFfRl9TWVNGU19VUDsKKwkJcmV0ID0gYmxrX21xX3JlZ2lzdGVyX2hjdHgoaGN0eCk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKLQotCQlpZiAoIWhjdHgtPm5yX2N0eCkKLQkJCWNvbnRpbnVlOwotCi0JCWhjdHhfZm9yX2VhY2hfY3R4KGhjdHgsIGN0eCwgaikgewotCQkJa29iamVjdF9pbml0KCZjdHgtPmtvYmosICZibGtfbXFfY3R4X2t0eXBlKTsKLQkJCXJldCA9IGtvYmplY3RfYWRkKCZjdHgtPmtvYmosICZoY3R4LT5rb2JqLCAiY3B1JXUiLCBjdHgtPmNwdSk7Ci0JCQlpZiAocmV0KQotCQkJCWJyZWFrOwotCQl9CiAJfQogCiAJaWYgKHJldCkgewpAQCAtNDI2LDMgKzQzMSwyNiBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgYmxrX21xX3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CisJaW50IGk7CisKKwlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkKKwkJYmxrX21xX3VucmVnaXN0ZXJfaGN0eChoY3R4KTsKK30KKworaW50IGJsa19tcV9zeXNmc19yZWdpc3RlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7CisJCXJldCA9IGJsa19tcV9yZWdpc3Rlcl9oY3R4KGhjdHgpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS10YWcuYyBiL2Jsb2NrL2Jsay1tcS10YWcuYwppbmRleCA4M2FlOTZjLi5kOTBjNGFlIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtdGFnLmMKKysrIGIvYmxvY2svYmxrLW1xLXRhZy5jCkBAIC0xLDc4ICsxLDM0NSBAQAorLyoKKyAqIEZhc3QgYW5kIHNjYWxhYmxlIGJpdG1hcCB0YWdnaW5nIHZhcmlhbnQuIFVzZXMgc3BhcnNlciBiaXRtYXBzIHNwcmVhZAorICogb3ZlciBtdWx0aXBsZSBjYWNoZWxpbmVzIHRvIGF2b2lkIHBpbmctcG9uZyBiZXR3ZWVuIG11bHRpcGxlIHN1Ym1pdHRlcnMKKyAqIG9yIHN1Ym1pdHRlciBhbmQgY29tcGxldGVyLiBVc2VzIHJvbGxpbmcgd2FrZXVwcyB0byBhdm9pZCBmYWxsaW5nIG9mCisgKiB0aGUgc2NhbGluZyBjbGlmZiB3aGVuIHdlIHJ1biBvdXQgb2YgdGFncyBhbmQgaGF2ZSB0byBzdGFydCBwdXR0aW5nCisgKiBzdWJtaXR0ZXJzIHRvIHNsZWVwLgorICoKKyAqIFVzZXMgYWN0aXZlIHF1ZXVlIHRyYWNraW5nIHRvIHN1cHBvcnQgZmFpcmVyIGRpc3RyaWJ1dGlvbiBvZiB0YWdzCisgKiBiZXR3ZWVuIG11bHRpcGxlIHN1Ym1pdHRlcnMgd2hlbiBhIHNoYXJlZCB0YWcgbWFwIGlzIHVzZWQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgSmVucyBBeGJvZQorICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1X2lkYS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSA8bGludXgvYmxrLW1xLmg+CiAjaW5jbHVkZSAiYmxrLmgiCiAjaW5jbHVkZSAiYmxrLW1xLmgiCiAjaW5jbHVkZSAiYmxrLW1xLXRhZy5oIgogCi0vKgotICogUGVyIHRhZ2dlZCBxdWV1ZSAodGFnIGFkZHJlc3Mgc3BhY2UpIG1hcAotICovCi1zdHJ1Y3QgYmxrX21xX3RhZ3MgewotCXVuc2lnbmVkIGludCBucl90YWdzOwotCXVuc2lnbmVkIGludCBucl9yZXNlcnZlZF90YWdzOwotCXVuc2lnbmVkIGludCBucl9iYXRjaF9tb3ZlOwotCXVuc2lnbmVkIGludCBucl9tYXhfY2FjaGU7Ci0KLQlzdHJ1Y3QgcGVyY3B1X2lkYSBmcmVlX3RhZ3M7Ci0Jc3RydWN0IHBlcmNwdV9pZGEgcmVzZXJ2ZWRfdGFnczsKLX07Ci0KLXZvaWQgYmxrX21xX3dhaXRfZm9yX3RhZ3Moc3RydWN0IGJsa19tcV90YWdzICp0YWdzKQorc3RhdGljIGJvb2wgYnRfaGFzX2ZyZWVfdGFncyhzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidCkKIHsKLQlpbnQgdGFnID0gYmxrX21xX2dldF90YWcodGFncywgX19HRlBfV0FJVCwgZmFsc2UpOwotCWJsa19tcV9wdXRfdGFnKHRhZ3MsIHRhZyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnQtPm1hcF9ucjsgaSsrKSB7CisJCXN0cnVjdCBibGtfYWxpZ25fYml0bWFwICpibSA9ICZidC0+bWFwW2ldOworCQlpbnQgcmV0OworCisJCXJldCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmJtLT53b3JkLCBibS0+ZGVwdGgpOworCQlpZiAocmV0IDwgYm0tPmRlcHRoKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiBib29sIGJsa19tcV9oYXNfZnJlZV90YWdzKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncykKIHsKLQlyZXR1cm4gIXRhZ3MgfHwKLQkJcGVyY3B1X2lkYV9mcmVlX3RhZ3MoJnRhZ3MtPmZyZWVfdGFncywgbnJfY3B1X2lkcykgIT0gMDsKKwlpZiAoIXRhZ3MpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGJ0X2hhc19mcmVlX3RhZ3MoJnRhZ3MtPmJpdG1hcF90YWdzKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2Jsa19tcV9nZXRfdGFnKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgZ2ZwX3QgZ2ZwKQorc3RhdGljIGlubGluZSB2b2lkIGJ0X2luZGV4X2luYyh1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCSppbmRleCA9ICgqaW5kZXggKyAxKSAmIChCVF9XQUlUX1FVRVVFUyAtIDEpOworfQorCisvKgorICogSWYgYSBwcmV2aW91c2x5IGluYWN0aXZlIHF1ZXVlIGdvZXMgYWN0aXZlLCBidW1wIHRoZSBhY3RpdmUgdXNlciBjb3VudC4KKyAqLworYm9vbCBfX2Jsa19tcV90YWdfYnVzeShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCkKK3sKKwlpZiAoIXRlc3RfYml0KEJMS19NUV9TX1RBR19BQ1RJVkUsICZoY3R4LT5zdGF0ZSkgJiYKKwkgICAgIXRlc3RfYW5kX3NldF9iaXQoQkxLX01RX1NfVEFHX0FDVElWRSwgJmhjdHgtPnN0YXRlKSkKKwkJYXRvbWljX2luYygmaGN0eC0+dGFncy0+YWN0aXZlX3F1ZXVlcyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFdha2V1cCBhbGwgcG90ZW50aWFsbHkgc2xlZXBpbmcgb24gbm9ybWFsIChub24tcmVzZXJ2ZWQpIHRhZ3MKKyAqLworc3RhdGljIHZvaWQgYmxrX21xX3RhZ193YWtldXBfYWxsKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncykKK3sKKwlzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidDsKKwlpbnQgaSwgd2FrZV9pbmRleDsKKworCWJ0ID0gJnRhZ3MtPmJpdG1hcF90YWdzOworCXdha2VfaW5kZXggPSBidC0+d2FrZV9pbmRleDsKKwlmb3IgKGkgPSAwOyBpIDwgQlRfV0FJVF9RVUVVRVM7IGkrKykgeworCQlzdHJ1Y3QgYnRfd2FpdF9zdGF0ZSAqYnMgPSAmYnQtPmJzW3dha2VfaW5kZXhdOworCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZicy0+d2FpdCkpCisJCQl3YWtlX3VwKCZicy0+d2FpdCk7CisKKwkJYnRfaW5kZXhfaW5jKCZ3YWtlX2luZGV4KTsKKwl9Cit9CisKKy8qCisgKiBJZiBhIHByZXZpb3VzbHkgYnVzeSBxdWV1ZSBnb2VzIGluYWN0aXZlLCBwb3RlbnRpYWwgd2FpdGVycyBjb3VsZCBub3cKKyAqIGJlIGFsbG93ZWQgdG8gcXVldWUuIFdha2UgdGhlbSB1cCBhbmQgY2hlY2suCisgKi8KK3ZvaWQgX19ibGtfbXFfdGFnX2lkbGUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCit7CisJc3RydWN0IGJsa19tcV90YWdzICp0YWdzID0gaGN0eC0+dGFnczsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEJMS19NUV9TX1RBR19BQ1RJVkUsICZoY3R4LT5zdGF0ZSkpCisJCXJldHVybjsKKworCWF0b21pY19kZWMoJnRhZ3MtPmFjdGl2ZV9xdWV1ZXMpOworCisJYmxrX21xX3RhZ193YWtldXBfYWxsKHRhZ3MpOworfQorCisvKgorICogRm9yIHNoYXJlZCB0YWcgdXNlcnMsIHdlIHRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSB1c2VycworICogYW5kIGF0dGVtcHQgdG8gcHJvdmlkZSBhIGZhaXIgc2hhcmUgb2YgdGhlIHRhZyBkZXB0aCBmb3IgZWFjaCBvZiB0aGVtLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaGN0eF9tYXlfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCisJCQkJICBzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidCkKK3sKKwl1bnNpZ25lZCBpbnQgZGVwdGgsIHVzZXJzOworCisJaWYgKCFoY3R4IHx8ICEoaGN0eC0+ZmxhZ3MgJiBCTEtfTVFfRl9UQUdfU0hBUkVEKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCF0ZXN0X2JpdChCTEtfTVFfU19UQUdfQUNUSVZFLCAmaGN0eC0+c3RhdGUpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogRG9uJ3QgdHJ5IGRpdmlkaW5nIGFuIGFudAorCSAqLworCWlmIChidC0+ZGVwdGggPT0gMSkKKwkJcmV0dXJuIHRydWU7CisKKwl1c2VycyA9IGF0b21pY19yZWFkKCZoY3R4LT50YWdzLT5hY3RpdmVfcXVldWVzKTsKKwlpZiAoIXVzZXJzKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogQWxsb3cgYXQgbGVhc3Qgc29tZSB0YWdzCisJICovCisJZGVwdGggPSBtYXgoKGJ0LT5kZXB0aCArIHVzZXJzIC0gMSkgLyB1c2VycywgNFUpOworCXJldHVybiBhdG9taWNfcmVhZCgmaGN0eC0+bnJfYWN0aXZlKSA8IGRlcHRoOworfQorCitzdGF0aWMgaW50IF9fYnRfZ2V0X3dvcmQoc3RydWN0IGJsa19hbGlnbl9iaXRtYXAgKmJtLCB1bnNpZ25lZCBpbnQgbGFzdF90YWcpCit7CisJaW50IHRhZywgb3JnX2xhc3RfdGFnLCBlbmQ7CisKKwlvcmdfbGFzdF90YWcgPSBsYXN0X3RhZzsKKwllbmQgPSBibS0+ZGVwdGg7CisJZG8geworcmVzdGFydDoKKwkJdGFnID0gZmluZF9uZXh0X3plcm9fYml0KCZibS0+d29yZCwgZW5kLCBsYXN0X3RhZyk7CisJCWlmICh1bmxpa2VseSh0YWcgPj0gZW5kKSkgeworCQkJLyoKKwkJCSAqIFdlIHN0YXJ0ZWQgd2l0aCBhbiBvZmZzZXQsIHN0YXJ0IGZyb20gMCB0bworCQkJICogZXhoYXVzdCB0aGUgbWFwLgorCQkJICovCisJCQlpZiAob3JnX2xhc3RfdGFnICYmIGxhc3RfdGFnKSB7CisJCQkJZW5kID0gbGFzdF90YWc7CisJCQkJbGFzdF90YWcgPSAwOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCQlsYXN0X3RhZyA9IHRhZyArIDE7CisJfSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKHRhZywgJmJtLT53b3JkKSk7CisKKwlyZXR1cm4gdGFnOworfQorCisvKgorICogU3RyYWlnaHQgZm9yd2FyZCBiaXRtYXAgdGFnIGltcGxlbWVudGF0aW9uLCB3aGVyZSBlYWNoIGJpdCBpcyBhIHRhZworICogKGNsZWFyZWQgPT0gZnJlZSwgYW5kIHNldCA9PSBidXN5KS4gVGhlIHNtYWxsIHR3aXN0IGlzIHVzaW5nIHBlci1jcHUKKyAqIGxhc3RfdGFnIGNhY2hlcywgd2hpY2ggYmxrLW1xIHN0b3JlcyBpbiB0aGUgYmxrX21xX2N0eCBzb2Z0d2FyZSBxdWV1ZQorICogY29udGV4dHMuIFRoaXMgZW5hYmxlcyB1cyB0byBkcmFzdGljYWxseSBsaW1pdCB0aGUgc3BhY2Ugc2VhcmNoZWQsCisgKiB3aXRob3V0IGRpcnR5aW5nIGFuIGV4dHJhIHNoYXJlZCBjYWNoZWxpbmUgbGlrZSB3ZSB3b3VsZCBpZiB3ZSBzdG9yZWQKKyAqIHRoZSBjYWNoZSB2YWx1ZSBpbnNpZGUgdGhlIHNoYXJlZCBibGtfbXFfYml0bWFwX3RhZ3Mgc3RydWN0dXJlLiBPbiB0b3AKKyAqIG9mIHRoYXQsIGVhY2ggd29yZCBvZiB0YWdzIGlzIGluIGEgc2VwYXJhdGUgY2FjaGVsaW5lLiBUaGlzIG1lYW5zIHRoYXQKKyAqIG11bHRpcGxlIHVzZXJzIHdpbGwgdGVuZCB0byBzdGljayB0byBkaWZmZXJlbnQgY2FjaGVsaW5lcywgYXQgbGVhc3QKKyAqIHVudGlsIHRoZSBtYXAgaXMgZXhoYXVzdGVkLgorICovCitzdGF0aWMgaW50IF9fYnRfZ2V0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidCwKKwkJICAgIHVuc2lnbmVkIGludCAqdGFnX2NhY2hlKQoreworCXVuc2lnbmVkIGludCBsYXN0X3RhZywgb3JnX2xhc3RfdGFnOworCWludCBpbmRleCwgaSwgdGFnOworCisJaWYgKCFoY3R4X21heV9xdWV1ZShoY3R4LCBidCkpCisJCXJldHVybiAtMTsKKworCWxhc3RfdGFnID0gb3JnX2xhc3RfdGFnID0gKnRhZ19jYWNoZTsKKwlpbmRleCA9IFRBR19UT19JTkRFWChidCwgbGFzdF90YWcpOworCisJZm9yIChpID0gMDsgaSA8IGJ0LT5tYXBfbnI7IGkrKykgeworCQl0YWcgPSBfX2J0X2dldF93b3JkKCZidC0+bWFwW2luZGV4XSwgVEFHX1RPX0JJVChidCwgbGFzdF90YWcpKTsKKwkJaWYgKHRhZyAhPSAtMSkgeworCQkJdGFnICs9IChpbmRleCA8PCBidC0+Yml0c19wZXJfd29yZCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlsYXN0X3RhZyA9IDA7CisJCWlmICgrK2luZGV4ID49IGJ0LT5tYXBfbnIpCisJCQlpbmRleCA9IDA7CisJfQorCisJKnRhZ19jYWNoZSA9IDA7CisJcmV0dXJuIC0xOworCisJLyoKKwkgKiBPbmx5IHVwZGF0ZSB0aGUgY2FjaGUgZnJvbSB0aGUgYWxsb2NhdGlvbiBwYXRoLCBpZiB3ZSBlbmRlZAorCSAqIHVwIHVzaW5nIHRoZSBzcGVjaWZpYyBjYWNoZWQgdGFnLgorCSAqLworZG9uZToKKwlpZiAodGFnID09IG9yZ19sYXN0X3RhZykgeworCQlsYXN0X3RhZyA9IHRhZyArIDE7CisJCWlmIChsYXN0X3RhZyA+PSBidC0+ZGVwdGggLSAxKQorCQkJbGFzdF90YWcgPSAwOworCisJCSp0YWdfY2FjaGUgPSBsYXN0X3RhZzsKKwl9CisKKwlyZXR1cm4gdGFnOworfQorCitzdGF0aWMgc3RydWN0IGJ0X3dhaXRfc3RhdGUgKmJ0X3dhaXRfcHRyKHN0cnVjdCBibGtfbXFfYml0bWFwX3RhZ3MgKmJ0LAorCQkJCQkgc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCit7CisJc3RydWN0IGJ0X3dhaXRfc3RhdGUgKmJzOworCisJaWYgKCFoY3R4KQorCQlyZXR1cm4gJmJ0LT5ic1swXTsKKworCWJzID0gJmJ0LT5ic1toY3R4LT53YWl0X2luZGV4XTsKKwlidF9pbmRleF9pbmMoJmhjdHgtPndhaXRfaW5kZXgpOworCXJldHVybiBiczsKK30KKworc3RhdGljIGludCBidF9nZXQoc3RydWN0IGJsa19tcV9iaXRtYXBfdGFncyAqYnQsIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAorCQkgIHVuc2lnbmVkIGludCAqbGFzdF90YWcsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgYnRfd2FpdF9zdGF0ZSAqYnM7CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IHRhZzsKKworCXRhZyA9IF9fYnRfZ2V0KGhjdHgsIGJ0LCBsYXN0X3RhZyk7CisJaWYgKHRhZyAhPSAtMSkKKwkJcmV0dXJuIHRhZzsKKworCWlmICghKGdmcCAmIF9fR0ZQX1dBSVQpKQorCQlyZXR1cm4gLTE7CisKKwlicyA9IGJ0X3dhaXRfcHRyKGJ0LCBoY3R4KTsKKwlkbyB7CisJCWJvb2wgd2FzX2VtcHR5OworCisJCXdhc19lbXB0eSA9IGxpc3RfZW1wdHkoJndhaXQudGFza19saXN0KTsKKwkJcHJlcGFyZV90b193YWl0KCZicy0+d2FpdCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCQl0YWcgPSBfX2J0X2dldChoY3R4LCBidCwgbGFzdF90YWcpOworCQlpZiAodGFnICE9IC0xKQorCQkJYnJlYWs7CisKKwkJaWYgKHdhc19lbXB0eSkKKwkJCWF0b21pY19zZXQoJmJzLT53YWl0X2NudCwgYnQtPndha2VfY250KTsKKworCQlpb19zY2hlZHVsZSgpOworCX0gd2hpbGUgKDEpOworCisJZmluaXNoX3dhaXQoJmJzLT53YWl0LCAmd2FpdCk7CisJcmV0dXJuIHRhZzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2Jsa19tcV9nZXRfdGFnKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywKKwkJCQkgICAgIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpsYXN0X3RhZywgZ2ZwX3QgZ2ZwKQogewogCWludCB0YWc7CiAKLQl0YWcgPSBwZXJjcHVfaWRhX2FsbG9jKCZ0YWdzLT5mcmVlX3RhZ3MsIChnZnAgJiBfX0dGUF9XQUlUKSA/Ci0JCQkgICAgICAgVEFTS19VTklOVEVSUlVQVElCTEUgOiBUQVNLX1JVTk5JTkcpOwotCWlmICh0YWcgPCAwKQotCQlyZXR1cm4gQkxLX01RX1RBR19GQUlMOwotCXJldHVybiB0YWcgKyB0YWdzLT5ucl9yZXNlcnZlZF90YWdzOworCXRhZyA9IGJ0X2dldCgmdGFncy0+Yml0bWFwX3RhZ3MsIGhjdHgsIGxhc3RfdGFnLCBnZnApOworCWlmICh0YWcgPj0gMCkKKwkJcmV0dXJuIHRhZyArIHRhZ3MtPm5yX3Jlc2VydmVkX3RhZ3M7CisKKwlyZXR1cm4gQkxLX01RX1RBR19GQUlMOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fYmxrX21xX2dldF9yZXNlcnZlZF90YWcoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLAogCQkJCQkgICAgICBnZnBfdCBnZnApCiB7Ci0JaW50IHRhZzsKKwlpbnQgdGFnLCB6ZXJvID0gMDsKIAogCWlmICh1bmxpa2VseSghdGFncy0+bnJfcmVzZXJ2ZWRfdGFncykpIHsKIAkJV0FSTl9PTl9PTkNFKDEpOwogCQlyZXR1cm4gQkxLX01RX1RBR19GQUlMOwogCX0KIAotCXRhZyA9IHBlcmNwdV9pZGFfYWxsb2MoJnRhZ3MtPnJlc2VydmVkX3RhZ3MsIChnZnAgJiBfX0dGUF9XQUlUKSA/Ci0JCQkgICAgICAgVEFTS19VTklOVEVSUlVQVElCTEUgOiBUQVNLX1JVTk5JTkcpOworCXRhZyA9IGJ0X2dldCgmdGFncy0+YnJlc2VydmVkX3RhZ3MsIE5VTEwsICZ6ZXJvLCBnZnApOwogCWlmICh0YWcgPCAwKQogCQlyZXR1cm4gQkxLX01RX1RBR19GQUlMOworCiAJcmV0dXJuIHRhZzsKIH0KIAotdW5zaWduZWQgaW50IGJsa19tcV9nZXRfdGFnKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgZ2ZwX3QgZ2ZwLCBib29sIHJlc2VydmVkKQordW5zaWduZWQgaW50IGJsa19tcV9nZXRfdGFnKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB1bnNpZ25lZCBpbnQgKmxhc3RfdGFnLAorCQkJICAgIGdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCkKIHsKIAlpZiAoIXJlc2VydmVkKQotCQlyZXR1cm4gX19ibGtfbXFfZ2V0X3RhZyh0YWdzLCBnZnApOworCQlyZXR1cm4gX19ibGtfbXFfZ2V0X3RhZyhoY3R4LT50YWdzLCBoY3R4LCBsYXN0X3RhZywgZ2ZwKTsKIAotCXJldHVybiBfX2Jsa19tcV9nZXRfcmVzZXJ2ZWRfdGFnKHRhZ3MsIGdmcCk7CisJcmV0dXJuIF9fYmxrX21xX2dldF9yZXNlcnZlZF90YWcoaGN0eC0+dGFncywgZ2ZwKTsKK30KKworc3RhdGljIHN0cnVjdCBidF93YWl0X3N0YXRlICpidF93YWtlX3B0cihzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidCkKK3sKKwlpbnQgaSwgd2FrZV9pbmRleDsKKworCXdha2VfaW5kZXggPSBidC0+d2FrZV9pbmRleDsKKwlmb3IgKGkgPSAwOyBpIDwgQlRfV0FJVF9RVUVVRVM7IGkrKykgeworCQlzdHJ1Y3QgYnRfd2FpdF9zdGF0ZSAqYnMgPSAmYnQtPmJzW3dha2VfaW5kZXhdOworCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZicy0+d2FpdCkpIHsKKwkJCWlmICh3YWtlX2luZGV4ICE9IGJ0LT53YWtlX2luZGV4KQorCQkJCWJ0LT53YWtlX2luZGV4ID0gd2FrZV9pbmRleDsKKworCQkJcmV0dXJuIGJzOworCQl9CisKKwkJYnRfaW5kZXhfaW5jKCZ3YWtlX2luZGV4KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYnRfY2xlYXJfdGFnKHN0cnVjdCBibGtfbXFfYml0bWFwX3RhZ3MgKmJ0LCB1bnNpZ25lZCBpbnQgdGFnKQoreworCWNvbnN0IGludCBpbmRleCA9IFRBR19UT19JTkRFWChidCwgdGFnKTsKKwlzdHJ1Y3QgYnRfd2FpdF9zdGF0ZSAqYnM7CisKKwkvKgorCSAqIFRoZSB1bmxvY2sgbWVtb3J5IGJhcnJpZXIgbmVlZCB0byBvcmRlciBhY2Nlc3MgdG8gcmVxIGluIGZyZWUKKwkgKiBwYXRoIGFuZCBjbGVhcmluZyB0YWcgYml0CisJICovCisJY2xlYXJfYml0X3VubG9jayhUQUdfVE9fQklUKGJ0LCB0YWcpLCAmYnQtPm1hcFtpbmRleF0ud29yZCk7CisKKwlicyA9IGJ0X3dha2VfcHRyKGJ0KTsKKwlpZiAoYnMgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmYnMtPndhaXRfY250KSkgeworCQlhdG9taWNfc2V0KCZicy0+d2FpdF9jbnQsIGJ0LT53YWtlX2NudCk7CisJCWJ0X2luZGV4X2luYygmYnQtPndha2VfaW5kZXgpOworCQl3YWtlX3VwKCZicy0+d2FpdCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBfX2Jsa19tcV9wdXRfdGFnKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgdW5zaWduZWQgaW50IHRhZykKIHsKIAlCVUdfT04odGFnID49IHRhZ3MtPm5yX3RhZ3MpOwogCi0JcGVyY3B1X2lkYV9mcmVlKCZ0YWdzLT5mcmVlX3RhZ3MsIHRhZyAtIHRhZ3MtPm5yX3Jlc2VydmVkX3RhZ3MpOworCWJ0X2NsZWFyX3RhZygmdGFncy0+Yml0bWFwX3RhZ3MsIHRhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fYmxrX21xX3B1dF9yZXNlcnZlZF90YWcoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLApAQCAtODAsMjIgKzM0Nyw0MyBAQAogewogCUJVR19PTih0YWcgPj0gdGFncy0+bnJfcmVzZXJ2ZWRfdGFncyk7CiAKLQlwZXJjcHVfaWRhX2ZyZWUoJnRhZ3MtPnJlc2VydmVkX3RhZ3MsIHRhZyk7CisJYnRfY2xlYXJfdGFnKCZ0YWdzLT5icmVzZXJ2ZWRfdGFncywgdGFnKTsKIH0KIAotdm9pZCBibGtfbXFfcHV0X3RhZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCB0YWcpCit2b2lkIGJsa19tcV9wdXRfdGFnKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB1bnNpZ25lZCBpbnQgdGFnLAorCQkgICAgdW5zaWduZWQgaW50ICpsYXN0X3RhZykKIHsKLQlpZiAodGFnID49IHRhZ3MtPm5yX3Jlc2VydmVkX3RhZ3MpCi0JCV9fYmxrX21xX3B1dF90YWcodGFncywgdGFnKTsKLQllbHNlCisJc3RydWN0IGJsa19tcV90YWdzICp0YWdzID0gaGN0eC0+dGFnczsKKworCWlmICh0YWcgPj0gdGFncy0+bnJfcmVzZXJ2ZWRfdGFncykgeworCQljb25zdCBpbnQgcmVhbF90YWcgPSB0YWcgLSB0YWdzLT5ucl9yZXNlcnZlZF90YWdzOworCisJCV9fYmxrX21xX3B1dF90YWcodGFncywgcmVhbF90YWcpOworCQkqbGFzdF90YWcgPSByZWFsX3RhZzsKKwl9IGVsc2UKIAkJX19ibGtfbXFfcHV0X3Jlc2VydmVkX3RhZyh0YWdzLCB0YWcpOwogfQogCi1zdGF0aWMgaW50IF9fYmxrX21xX3RhZ19pdGVyKHVuc2lnbmVkIGlkLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgYnRfZm9yX2VhY2hfZnJlZShzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZnJlZV9tYXAsIHVuc2lnbmVkIGludCBvZmYpCiB7Ci0JdW5zaWduZWQgbG9uZyAqdGFnX21hcCA9IGRhdGE7Ci0JX19zZXRfYml0KGlkLCB0YWdfbWFwKTsKLQlyZXR1cm4gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBidC0+bWFwX25yOyBpKyspIHsKKwkJc3RydWN0IGJsa19hbGlnbl9iaXRtYXAgKmJtID0gJmJ0LT5tYXBbaV07CisJCWludCBiaXQgPSAwOworCisJCWRvIHsKKwkJCWJpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmYm0tPndvcmQsIGJtLT5kZXB0aCwgYml0KTsKKwkJCWlmIChiaXQgPj0gYm0tPmRlcHRoKQorCQkJCWJyZWFrOworCisJCQlfX3NldF9iaXQoYml0ICsgb2ZmLCBmcmVlX21hcCk7CisJCQliaXQrKzsKKwkJfSB3aGlsZSAoMSk7CisKKwkJb2ZmICs9ICgxIDw8IGJ0LT5iaXRzX3Blcl93b3JkKTsKKwl9CiB9CiAKIHZvaWQgYmxrX21xX3RhZ19idXN5X2l0ZXIoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLApAQCAtMTA5LDIxICszOTcsMTI4IEBACiAJaWYgKCF0YWdfbWFwKQogCQlyZXR1cm47CiAKLQlwZXJjcHVfaWRhX2Zvcl9lYWNoX2ZyZWUoJnRhZ3MtPmZyZWVfdGFncywgX19ibGtfbXFfdGFnX2l0ZXIsIHRhZ19tYXApOworCWJ0X2Zvcl9lYWNoX2ZyZWUoJnRhZ3MtPmJpdG1hcF90YWdzLCB0YWdfbWFwLCB0YWdzLT5ucl9yZXNlcnZlZF90YWdzKTsKIAlpZiAodGFncy0+bnJfcmVzZXJ2ZWRfdGFncykKLQkJcGVyY3B1X2lkYV9mb3JfZWFjaF9mcmVlKCZ0YWdzLT5yZXNlcnZlZF90YWdzLCBfX2Jsa19tcV90YWdfaXRlciwKLQkJCXRhZ19tYXApOworCQlidF9mb3JfZWFjaF9mcmVlKCZ0YWdzLT5icmVzZXJ2ZWRfdGFncywgdGFnX21hcCwgMCk7CiAKIAlmbihkYXRhLCB0YWdfbWFwKTsKIAlrZnJlZSh0YWdfbWFwKTsKIH0KK0VYUE9SVF9TWU1CT0woYmxrX21xX3RhZ19idXN5X2l0ZXIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGJ0X3VudXNlZF90YWdzKHN0cnVjdCBibGtfbXFfYml0bWFwX3RhZ3MgKmJ0KQoreworCXVuc2lnbmVkIGludCBpLCB1c2VkOworCisJZm9yIChpID0gMCwgdXNlZCA9IDA7IGkgPCBidC0+bWFwX25yOyBpKyspIHsKKwkJc3RydWN0IGJsa19hbGlnbl9iaXRtYXAgKmJtID0gJmJ0LT5tYXBbaV07CisKKwkJdXNlZCArPSBiaXRtYXBfd2VpZ2h0KCZibS0+d29yZCwgYm0tPmRlcHRoKTsKKwl9CisKKwlyZXR1cm4gYnQtPmRlcHRoIC0gdXNlZDsKK30KKworc3RhdGljIHZvaWQgYnRfdXBkYXRlX2NvdW50KHN0cnVjdCBibGtfbXFfYml0bWFwX3RhZ3MgKmJ0LAorCQkJICAgIHVuc2lnbmVkIGludCBkZXB0aCkKK3sKKwl1bnNpZ25lZCBpbnQgdGFnc19wZXJfd29yZCA9IDFVIDw8IGJ0LT5iaXRzX3Blcl93b3JkOworCXVuc2lnbmVkIGludCBtYXBfZGVwdGggPSBkZXB0aDsKKworCWlmIChkZXB0aCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYnQtPm1hcF9ucjsgaSsrKSB7CisJCQlidC0+bWFwW2ldLmRlcHRoID0gbWluKG1hcF9kZXB0aCwgdGFnc19wZXJfd29yZCk7CisJCQltYXBfZGVwdGggLT0gYnQtPm1hcFtpXS5kZXB0aDsKKwkJfQorCX0KKworCWJ0LT53YWtlX2NudCA9IEJUX1dBSVRfQkFUQ0g7CisJaWYgKGJ0LT53YWtlX2NudCA+IGRlcHRoIC8gNCkKKwkJYnQtPndha2VfY250ID0gbWF4KDFVLCBkZXB0aCAvIDQpOworCisJYnQtPmRlcHRoID0gZGVwdGg7Cit9CisKK3N0YXRpYyBpbnQgYnRfYWxsb2Moc3RydWN0IGJsa19tcV9iaXRtYXBfdGFncyAqYnQsIHVuc2lnbmVkIGludCBkZXB0aCwKKwkJCWludCBub2RlLCBib29sIHJlc2VydmVkKQoreworCWludCBpOworCisJYnQtPmJpdHNfcGVyX3dvcmQgPSBpbG9nMihCSVRTX1BFUl9MT05HKTsKKworCS8qCisJICogRGVwdGggY2FuIGJlIHplcm8gZm9yIHJlc2VydmVkIHRhZ3MsIHRoYXQncyBub3QgYSBmYWlsdXJlCisJICogY29uZGl0aW9uLgorCSAqLworCWlmIChkZXB0aCkgeworCQl1bnNpZ25lZCBpbnQgbnIsIHRhZ3NfcGVyX3dvcmQ7CisKKwkJdGFnc19wZXJfd29yZCA9ICgxIDw8IGJ0LT5iaXRzX3Blcl93b3JkKTsKKworCQkvKgorCQkgKiBJZiB0aGUgdGFnIHNwYWNlIGlzIHNtYWxsLCBzaHJpbmsgdGhlIG51bWJlciBvZiB0YWdzCisJCSAqIHBlciB3b3JkIHNvIHdlIHNwcmVhZCBvdmVyIGEgZmV3IGNhY2hlbGluZXMsIGF0IGxlYXN0LgorCQkgKiBJZiBsZXNzIHRoYW4gNCB0YWdzLCBqdXN0IGZvcmdldCBhYm91dCBpdCwgaXQncyBub3QKKwkJICogZ29pbmcgdG8gd29yayBvcHRpbWFsbHkgYW55d2F5LgorCQkgKi8KKwkJaWYgKGRlcHRoID49IDQpIHsKKwkJCXdoaWxlICh0YWdzX3Blcl93b3JkICogNCA+IGRlcHRoKSB7CisJCQkJYnQtPmJpdHNfcGVyX3dvcmQtLTsKKwkJCQl0YWdzX3Blcl93b3JkID0gKDEgPDwgYnQtPmJpdHNfcGVyX3dvcmQpOworCQkJfQorCQl9CisKKwkJbnIgPSBBTElHTihkZXB0aCwgdGFnc19wZXJfd29yZCkgLyB0YWdzX3Blcl93b3JkOworCQlidC0+bWFwID0ga3phbGxvY19ub2RlKG5yICogc2l6ZW9mKHN0cnVjdCBibGtfYWxpZ25fYml0bWFwKSwKKwkJCQkJCUdGUF9LRVJORUwsIG5vZGUpOworCQlpZiAoIWJ0LT5tYXApCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlidC0+bWFwX25yID0gbnI7CisJfQorCisJYnQtPmJzID0ga3phbGxvYyhCVF9XQUlUX1FVRVVFUyAqIHNpemVvZigqYnQtPmJzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidC0+YnMpIHsKKwkJa2ZyZWUoYnQtPm1hcCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBCVF9XQUlUX1FVRVVFUzsgaSsrKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidC0+YnNbaV0ud2FpdCk7CisKKwlidF91cGRhdGVfY291bnQoYnQsIGRlcHRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnRfZnJlZShzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzICpidCkKK3sKKwlrZnJlZShidC0+bWFwKTsKKwlrZnJlZShidC0+YnMpOworfQorCitzdGF0aWMgc3RydWN0IGJsa19tcV90YWdzICpibGtfbXFfaW5pdF9iaXRtYXBfdGFncyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsCisJCQkJCQkgICBpbnQgbm9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGVwdGggPSB0YWdzLT5ucl90YWdzIC0gdGFncy0+bnJfcmVzZXJ2ZWRfdGFnczsKKworCWlmIChidF9hbGxvYygmdGFncy0+Yml0bWFwX3RhZ3MsIGRlcHRoLCBub2RlLCBmYWxzZSkpCisJCWdvdG8gZW5vbWVtOworCWlmIChidF9hbGxvYygmdGFncy0+YnJlc2VydmVkX3RhZ3MsIHRhZ3MtPm5yX3Jlc2VydmVkX3RhZ3MsIG5vZGUsIHRydWUpKQorCQlnb3RvIGVub21lbTsKKworCXJldHVybiB0YWdzOworZW5vbWVtOgorCWJ0X2ZyZWUoJnRhZ3MtPmJpdG1hcF90YWdzKTsKKwlrZnJlZSh0YWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KIAogc3RydWN0IGJsa19tcV90YWdzICpibGtfbXFfaW5pdF90YWdzKHVuc2lnbmVkIGludCB0b3RhbF90YWdzLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlc2VydmVkX3RhZ3MsIGludCBub2RlKQogewotCXVuc2lnbmVkIGludCBucl90YWdzLCBucl9jYWNoZTsKIAlzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3M7Ci0JaW50IHJldDsKIAogCWlmICh0b3RhbF90YWdzID4gQkxLX01RX1RBR19NQVgpIHsKIAkJcHJfZXJyKCJibGstbXE6IHRhZyBkZXB0aCB0b28gbGFyZ2VcbiIpOwpAQCAtMTM0LDczICs1MjksNTkgQEAKIAlpZiAoIXRhZ3MpCiAJCXJldHVybiBOVUxMOwogCi0JbnJfdGFncyA9IHRvdGFsX3RhZ3MgLSByZXNlcnZlZF90YWdzOwotCW5yX2NhY2hlID0gbnJfdGFncyAvIG51bV9wb3NzaWJsZV9jcHVzKCk7Ci0KLQlpZiAobnJfY2FjaGUgPCBCTEtfTVFfVEFHX0NBQ0hFX01JTikKLQkJbnJfY2FjaGUgPSBCTEtfTVFfVEFHX0NBQ0hFX01JTjsKLQllbHNlIGlmIChucl9jYWNoZSA+IEJMS19NUV9UQUdfQ0FDSEVfTUFYKQotCQlucl9jYWNoZSA9IEJMS19NUV9UQUdfQ0FDSEVfTUFYOwotCiAJdGFncy0+bnJfdGFncyA9IHRvdGFsX3RhZ3M7CiAJdGFncy0+bnJfcmVzZXJ2ZWRfdGFncyA9IHJlc2VydmVkX3RhZ3M7Ci0JdGFncy0+bnJfbWF4X2NhY2hlID0gbnJfY2FjaGU7Ci0JdGFncy0+bnJfYmF0Y2hfbW92ZSA9IG1heCgxdSwgbnJfY2FjaGUgLyAyKTsKIAotCXJldCA9IF9fcGVyY3B1X2lkYV9pbml0KCZ0YWdzLT5mcmVlX3RhZ3MsIHRhZ3MtPm5yX3RhZ3MgLQotCQkJCXRhZ3MtPm5yX3Jlc2VydmVkX3RhZ3MsCi0JCQkJdGFncy0+bnJfbWF4X2NhY2hlLAotCQkJCXRhZ3MtPm5yX2JhdGNoX21vdmUpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2ZyZWVfdGFnczsKLQotCWlmIChyZXNlcnZlZF90YWdzKSB7Ci0JCS8qCi0JCSAqIFdpdGggbWF4X2NhaGUgYW5kIGJhdGNoIHNldCB0byAxLCB0aGUgYWxsb2NhdG9yIGZhbGxiYWNrcyB0bwotCQkgKiBubyBjYWNoZWQuIEl0J3MgZmluZSByZXNlcnZlZCB0YWdzIGFsbG9jYXRpb24gaXMgc2xvdy4KLQkJICovCi0JCXJldCA9IF9fcGVyY3B1X2lkYV9pbml0KCZ0YWdzLT5yZXNlcnZlZF90YWdzLCByZXNlcnZlZF90YWdzLAotCQkJCTEsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJfcmVzZXJ2ZWRfdGFnczsKLQl9Ci0KLQlyZXR1cm4gdGFnczsKLQotZXJyX3Jlc2VydmVkX3RhZ3M6Ci0JcGVyY3B1X2lkYV9kZXN0cm95KCZ0YWdzLT5mcmVlX3RhZ3MpOwotZXJyX2ZyZWVfdGFnczoKLQlrZnJlZSh0YWdzKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gYmxrX21xX2luaXRfYml0bWFwX3RhZ3ModGFncywgbm9kZSk7CiB9CiAKIHZvaWQgYmxrX21xX2ZyZWVfdGFncyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MpCiB7Ci0JcGVyY3B1X2lkYV9kZXN0cm95KCZ0YWdzLT5mcmVlX3RhZ3MpOwotCXBlcmNwdV9pZGFfZGVzdHJveSgmdGFncy0+cmVzZXJ2ZWRfdGFncyk7CisJYnRfZnJlZSgmdGFncy0+Yml0bWFwX3RhZ3MpOworCWJ0X2ZyZWUoJnRhZ3MtPmJyZXNlcnZlZF90YWdzKTsKIAlrZnJlZSh0YWdzKTsKIH0KIAordm9pZCBibGtfbXFfdGFnX2luaXRfbGFzdF90YWcoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB1bnNpZ25lZCBpbnQgKnRhZykKK3sKKwl1bnNpZ25lZCBpbnQgZGVwdGggPSB0YWdzLT5ucl90YWdzIC0gdGFncy0+bnJfcmVzZXJ2ZWRfdGFnczsKKworCSp0YWcgPSBwcmFuZG9tX3UzMigpICUgZGVwdGg7Cit9CisKK2ludCBibGtfbXFfdGFnX3VwZGF0ZV9kZXB0aChzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCB0ZGVwdGgpCit7CisJdGRlcHRoIC09IHRhZ3MtPm5yX3Jlc2VydmVkX3RhZ3M7CisJaWYgKHRkZXB0aCA+IHRhZ3MtPm5yX3RhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBEb24ndCBuZWVkIChvciBjYW4ndCkgdXBkYXRlIHJlc2VydmVkIHRhZ3MgaGVyZSwgdGhleSByZW1haW4KKwkgKiBzdGF0aWMgYW5kIHNob3VsZCBuZXZlciBuZWVkIHJlc2l6aW5nLgorCSAqLworCWJ0X3VwZGF0ZV9jb3VudCgmdGFncy0+Yml0bWFwX3RhZ3MsIHRkZXB0aCk7CisJYmxrX21xX3RhZ193YWtldXBfYWxsKHRhZ3MpOworCXJldHVybiAwOworfQorCiBzc2l6ZV90IGJsa19tcV90YWdfc3lzZnNfc2hvdyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIGNoYXIgKnBhZ2UpCiB7CiAJY2hhciAqb3JpZ19wYWdlID0gcGFnZTsKLQl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGludCBmcmVlLCByZXM7CiAKIAlpZiAoIXRhZ3MpCiAJCXJldHVybiAwOwogCi0JcGFnZSArPSBzcHJpbnRmKHBhZ2UsICJucl90YWdzPSV1LCByZXNlcnZlZF90YWdzPSV1LCBiYXRjaF9tb3ZlPSV1LCIKLQkJCSIgbWF4X2NhY2hlPSV1XG4iLCB0YWdzLT5ucl90YWdzLCB0YWdzLT5ucl9yZXNlcnZlZF90YWdzLAotCQkJdGFncy0+bnJfYmF0Y2hfbW92ZSwgdGFncy0+bnJfbWF4X2NhY2hlKTsKKwlwYWdlICs9IHNwcmludGYocGFnZSwgIm5yX3RhZ3M9JXUsIHJlc2VydmVkX3RhZ3M9JXUsICIKKwkJCSJiaXRzX3Blcl93b3JkPSV1XG4iLAorCQkJdGFncy0+bnJfdGFncywgdGFncy0+bnJfcmVzZXJ2ZWRfdGFncywKKwkJCXRhZ3MtPmJpdG1hcF90YWdzLmJpdHNfcGVyX3dvcmQpOwogCi0JcGFnZSArPSBzcHJpbnRmKHBhZ2UsICJucl9mcmVlPSV1LCBucl9yZXNlcnZlZD0ldVxuIiwKLQkJCXBlcmNwdV9pZGFfZnJlZV90YWdzKCZ0YWdzLT5mcmVlX3RhZ3MsIG5yX2NwdV9pZHMpLAotCQkJcGVyY3B1X2lkYV9mcmVlX3RhZ3MoJnRhZ3MtPnJlc2VydmVkX3RhZ3MsIG5yX2NwdV9pZHMpKTsKKwlmcmVlID0gYnRfdW51c2VkX3RhZ3MoJnRhZ3MtPmJpdG1hcF90YWdzKTsKKwlyZXMgPSBidF91bnVzZWRfdGFncygmdGFncy0+YnJlc2VydmVkX3RhZ3MpOwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlwYWdlICs9IHNwcmludGYocGFnZSwgIiAgY3B1JTAydTogbnJfZnJlZT0ldVxuIiwgY3B1LAotCQkJCXBlcmNwdV9pZGFfZnJlZV90YWdzKCZ0YWdzLT5mcmVlX3RhZ3MsIGNwdSkpOwotCX0KKwlwYWdlICs9IHNwcmludGYocGFnZSwgIm5yX2ZyZWU9JXUsIG5yX3Jlc2VydmVkPSV1XG4iLCBmcmVlLCByZXMpOworCXBhZ2UgKz0gc3ByaW50ZihwYWdlLCAiYWN0aXZlX3F1ZXVlcz0ldVxuIiwgYXRvbWljX3JlYWQoJnRhZ3MtPmFjdGl2ZV9xdWV1ZXMpKTsKIAogCXJldHVybiBwYWdlIC0gb3JpZ19wYWdlOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLXRhZy5oIGIvYmxvY2svYmxrLW1xLXRhZy5oCmluZGV4IDk0N2JhMmMuLmM5NTlkZTUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS10YWcuaAorKysgYi9ibG9jay9ibGstbXEtdGFnLmgKQEAgLTEsMTcgKzEsNTkgQEAKICNpZm5kZWYgSU5UX0JMS19NUV9UQUdfSAogI2RlZmluZSBJTlRfQkxLX01RX1RBR19ICiAKLXN0cnVjdCBibGtfbXFfdGFnczsKKyNpbmNsdWRlICJibGstbXEuaCIKKworZW51bSB7CisJQlRfV0FJVF9RVUVVRVMJPSA4LAorCUJUX1dBSVRfQkFUQ0gJPSA4LAorfTsKKworc3RydWN0IGJ0X3dhaXRfc3RhdGUgeworCWF0b21pY190IHdhaXRfY250OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisKKyNkZWZpbmUgVEFHX1RPX0lOREVYKGJ0LCB0YWcpCSgodGFnKSA+PiAoYnQpLT5iaXRzX3Blcl93b3JkKQorI2RlZmluZSBUQUdfVE9fQklUKGJ0LCB0YWcpCSgodGFnKSAmICgoMSA8PCAoYnQpLT5iaXRzX3Blcl93b3JkKSAtIDEpKQorCitzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzIHsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CisJdW5zaWduZWQgaW50IHdha2VfY250OworCXVuc2lnbmVkIGludCBiaXRzX3Blcl93b3JkOworCisJdW5zaWduZWQgaW50IG1hcF9ucjsKKwlzdHJ1Y3QgYmxrX2FsaWduX2JpdG1hcCAqbWFwOworCisJdW5zaWduZWQgaW50IHdha2VfaW5kZXg7CisJc3RydWN0IGJ0X3dhaXRfc3RhdGUgKmJzOworfTsKKworLyoKKyAqIFRhZyBhZGRyZXNzIHNwYWNlIG1hcC4KKyAqLworc3RydWN0IGJsa19tcV90YWdzIHsKKwl1bnNpZ25lZCBpbnQgbnJfdGFnczsKKwl1bnNpZ25lZCBpbnQgbnJfcmVzZXJ2ZWRfdGFnczsKKworCWF0b21pY190IGFjdGl2ZV9xdWV1ZXM7CisKKwlzdHJ1Y3QgYmxrX21xX2JpdG1hcF90YWdzIGJpdG1hcF90YWdzOworCXN0cnVjdCBibGtfbXFfYml0bWFwX3RhZ3MgYnJlc2VydmVkX3RhZ3M7CisKKwlzdHJ1Y3QgcmVxdWVzdCAqKnJxczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDsKK307CisKIAogZXh0ZXJuIHN0cnVjdCBibGtfbXFfdGFncyAqYmxrX21xX2luaXRfdGFncyh1bnNpZ25lZCBpbnQgbnJfdGFncywgdW5zaWduZWQgaW50IHJlc2VydmVkX3RhZ3MsIGludCBub2RlKTsKIGV4dGVybiB2b2lkIGJsa19tcV9mcmVlX3RhZ3Moc3RydWN0IGJsa19tcV90YWdzICp0YWdzKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBibGtfbXFfZ2V0X3RhZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIGdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCk7Ci1leHRlcm4gdm9pZCBibGtfbXFfd2FpdF9mb3JfdGFncyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MpOwotZXh0ZXJuIHZvaWQgYmxrX21xX3B1dF90YWcoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB1bnNpZ25lZCBpbnQgdGFnKTsKLWV4dGVybiB2b2lkIGJsa19tcV90YWdfYnVzeV9pdGVyKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgdm9pZCAoKmZuKSh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nICopLCB2b2lkICpkYXRhKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYmxrX21xX2dldF90YWcoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHVuc2lnbmVkIGludCAqbGFzdF90YWcsIGdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCk7CitleHRlcm4gdm9pZCBibGtfbXFfcHV0X3RhZyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgdW5zaWduZWQgaW50IHRhZywgdW5zaWduZWQgaW50ICpsYXN0X3RhZyk7CiBleHRlcm4gYm9vbCBibGtfbXFfaGFzX2ZyZWVfdGFncyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MpOwogZXh0ZXJuIHNzaXplX3QgYmxrX21xX3RhZ19zeXNmc19zaG93KHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgY2hhciAqcGFnZSk7CitleHRlcm4gdm9pZCBibGtfbXFfdGFnX2luaXRfbGFzdF90YWcoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB1bnNpZ25lZCBpbnQgKmxhc3RfdGFnKTsKK2V4dGVybiBpbnQgYmxrX21xX3RhZ191cGRhdGVfZGVwdGgoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB1bnNpZ25lZCBpbnQgZGVwdGgpOwogCiBlbnVtIHsKIAlCTEtfTVFfVEFHX0NBQ0hFX01JTgk9IDEsCkBAIC0yNCw0ICs2NiwyMyBAQAogCUJMS19NUV9UQUdfTUFYCQk9IEJMS19NUV9UQUdfRkFJTCAtIDEsCiB9OwogCitleHRlcm4gYm9vbCBfX2Jsa19tcV90YWdfYnVzeShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqKTsKK2V4dGVybiB2b2lkIF9fYmxrX21xX3RhZ19pZGxlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICopOworCitzdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX3RhZ19idXN5KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQoreworCWlmICghKGhjdHgtPmZsYWdzICYgQkxLX01RX0ZfVEFHX1NIQVJFRCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBfX2Jsa19tcV90YWdfYnVzeShoY3R4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsa19tcV90YWdfaWRsZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCkKK3sKKwlpZiAoIShoY3R4LT5mbGFncyAmIEJMS19NUV9GX1RBR19TSEFSRUQpKQorCQlyZXR1cm47CisKKwlfX2Jsa19tcV90YWdfaWRsZShoY3R4KTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuYyBiL2Jsb2NrL2Jsay1tcS5jCmluZGV4IDFkMmE5YmQuLjBmNTg3OWMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS5jCisrKyBiL2Jsb2NrL2Jsay1tcS5jCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIEJsb2NrIG11bHRpcXVldWUgY29yZSBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgSmVucyBBeGJvZQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CkBAIC01NiwzOCArNjIsNDAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBoY3R4LT5ucl9jdHhfbWFwOyBpKyspCi0JCWlmIChoY3R4LT5jdHhfbWFwW2ldKQorCWZvciAoaSA9IDA7IGkgPCBoY3R4LT5jdHhfbWFwLm1hcF9zaXplOyBpKyspCisJCWlmIChoY3R4LT5jdHhfbWFwLm1hcFtpXS53b3JkKQogCQkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJsa19hbGlnbl9iaXRtYXAgKmdldF9ibShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKKwkJCQkJICAgICAgc3RydWN0IGJsa19tcV9jdHggKmN0eCkKK3sKKwlyZXR1cm4gJmhjdHgtPmN0eF9tYXAubWFwW2N0eC0+aW5kZXhfaHcgLyBoY3R4LT5jdHhfbWFwLmJpdHNfcGVyX3dvcmRdOworfQorCisjZGVmaW5lIENUWF9UT19CSVQoaGN0eCwgY3R4KQlcCisJKChjdHgpLT5pbmRleF9odyAmICgoaGN0eCktPmN0eF9tYXAuYml0c19wZXJfd29yZCAtIDEpKQorCiAvKgogICogTWFyayB0aGlzIGN0eCBhcyBoYXZpbmcgcGVuZGluZyB3b3JrIGluIHRoaXMgaGFyZHdhcmUgcXVldWUKICAqLwogc3RhdGljIHZvaWQgYmxrX21xX2hjdHhfbWFya19wZW5kaW5nKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAogCQkJCSAgICAgc3RydWN0IGJsa19tcV9jdHggKmN0eCkKIHsKLQlpZiAoIXRlc3RfYml0KGN0eC0+aW5kZXhfaHcsIGhjdHgtPmN0eF9tYXApKQotCQlzZXRfYml0KGN0eC0+aW5kZXhfaHcsIGhjdHgtPmN0eF9tYXApOworCXN0cnVjdCBibGtfYWxpZ25fYml0bWFwICpibSA9IGdldF9ibShoY3R4LCBjdHgpOworCisJaWYgKCF0ZXN0X2JpdChDVFhfVE9fQklUKGhjdHgsIGN0eCksICZibS0+d29yZCkpCisJCXNldF9iaXQoQ1RYX1RPX0JJVChoY3R4LCBjdHgpLCAmYm0tPndvcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKl9fYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCi0JCQkJCSAgICAgIGdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCkKK3N0YXRpYyB2b2lkIGJsa19tcV9oY3R4X2NsZWFyX3BlbmRpbmcoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCisJCQkJICAgICAgc3RydWN0IGJsa19tcV9jdHggKmN0eCkKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JdW5zaWduZWQgaW50IHRhZzsKKwlzdHJ1Y3QgYmxrX2FsaWduX2JpdG1hcCAqYm0gPSBnZXRfYm0oaGN0eCwgY3R4KTsKIAotCXRhZyA9IGJsa19tcV9nZXRfdGFnKGhjdHgtPnRhZ3MsIGdmcCwgcmVzZXJ2ZWQpOwotCWlmICh0YWcgIT0gQkxLX01RX1RBR19GQUlMKSB7Ci0JCXJxID0gaGN0eC0+cnFzW3RhZ107Ci0JCXJxLT50YWcgPSB0YWc7Ci0KLQkJcmV0dXJuIHJxOwotCX0KLQotCXJldHVybiBOVUxMOworCWNsZWFyX2JpdChDVFhfVE9fQklUKGhjdHgsIGN0eCksICZibS0+d29yZCk7CiB9CiAKIHN0YXRpYyBpbnQgYmxrX21xX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQpAQCAtMTg2LDc4ICsxOTQsOTUgQEAKIAlpZiAoYmxrX3F1ZXVlX2lvX3N0YXQocSkpCiAJCXJ3X2ZsYWdzIHw9IFJFUV9JT19TVEFUOwogCisJSU5JVF9MSVNUX0hFQUQoJnJxLT5xdWV1ZWxpc3QpOworCS8qIGNzZC9yZXF1ZXVlX3dvcmsvZmlmb190aW1lIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKi8KKwlycS0+cSA9IHE7CiAJcnEtPm1xX2N0eCA9IGN0eDsKLQlycS0+Y21kX2ZsYWdzID0gcndfZmxhZ3M7Ci0JcnEtPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOworCXJxLT5jbWRfZmxhZ3MgfD0gcndfZmxhZ3M7CisJLyogZG8gbm90IHRvdWNoIGF0b21pYyBmbGFncywgaXQgbmVlZHMgYXRvbWljIG9wcyBhZ2FpbnN0IHRoZSB0aW1lciAqLworCXJxLT5jcHUgPSAtMTsKKwlJTklUX0hMSVNUX05PREUoJnJxLT5oYXNoKTsKKwlSQl9DTEVBUl9OT0RFKCZycS0+cmJfbm9kZSk7CisJcnEtPnJxX2Rpc2sgPSBOVUxMOworCXJxLT5wYXJ0ID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUAorCXJxLT5ybCA9IE5VTEw7CiAJc2V0X3N0YXJ0X3RpbWVfbnMocnEpOworCXJxLT5pb19zdGFydF90aW1lX25zID0gMDsKKyNlbmRpZgorCXJxLT5ucl9waHlzX3NlZ21lbnRzID0gMDsKKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKKwlycS0+bnJfaW50ZWdyaXR5X3NlZ21lbnRzID0gMDsKKyNlbmRpZgorCXJxLT5zcGVjaWFsID0gTlVMTDsKKwkvKiB0YWcgd2FzIGFscmVhZHkgc2V0ICovCisJcnEtPmVycm9ycyA9IDA7CisKKwlycS0+ZXh0cmFfbGVuID0gMDsKKwlycS0+c2Vuc2VfbGVuID0gMDsKKwlycS0+cmVzaWRfbGVuID0gMDsKKwlycS0+c2Vuc2UgPSBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnJxLT50aW1lb3V0X2xpc3QpOworCXJxLT5lbmRfaW8gPSBOVUxMOworCXJxLT5lbmRfaW9fZGF0YSA9IE5VTEw7CisJcnEtPm5leHRfcnEgPSBOVUxMOworCiAJY3R4LT5ycV9kaXNwYXRjaGVkW3J3X2lzX3N5bmMocndfZmxhZ3MpXSsrOwogfQogCi1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X3Bpbm5lZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkJCSAgIGludCBydywgZ2ZwX3QgZ2ZwLAotCQkJCQkJICAgYm9vbCByZXNlcnZlZCkKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCitfX2Jsa19tcV9hbGxvY19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKKwkJc3RydWN0IGJsa19tcV9jdHggKmN0eCwgaW50IHJ3LCBnZnBfdCBnZnAsIGJvb2wgcmVzZXJ2ZWQpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxOworCXVuc2lnbmVkIGludCB0YWc7CiAKLQlkbyB7Ci0JCXN0cnVjdCBibGtfbXFfY3R4ICpjdHggPSBibGtfbXFfZ2V0X2N0eChxKTsKLQkJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHggPSBxLT5tcV9vcHMtPm1hcF9xdWV1ZShxLCBjdHgtPmNwdSk7CisJdGFnID0gYmxrX21xX2dldF90YWcoaGN0eCwgJmN0eC0+bGFzdF90YWcsIGdmcCwgcmVzZXJ2ZWQpOworCWlmICh0YWcgIT0gQkxLX01RX1RBR19GQUlMKSB7CisJCXJxID0gaGN0eC0+dGFncy0+cnFzW3RhZ107CiAKLQkJcnEgPSBfX2Jsa19tcV9hbGxvY19yZXF1ZXN0KGhjdHgsIGdmcCAmIH5fX0dGUF9XQUlULCByZXNlcnZlZCk7Ci0JCWlmIChycSkgewotCQkJYmxrX21xX3JxX2N0eF9pbml0KHEsIGN0eCwgcnEsIHJ3KTsKLQkJCWJyZWFrOworCQlycS0+Y21kX2ZsYWdzID0gMDsKKwkJaWYgKGJsa19tcV90YWdfYnVzeShoY3R4KSkgeworCQkJcnEtPmNtZF9mbGFncyA9IFJFUV9NUV9JTkZMSUdIVDsKKwkJCWF0b21pY19pbmMoJmhjdHgtPm5yX2FjdGl2ZSk7CiAJCX0KIAotCQlibGtfbXFfcHV0X2N0eChjdHgpOwotCQlpZiAoIShnZnAgJiBfX0dGUF9XQUlUKSkKLQkJCWJyZWFrOworCQlycS0+dGFnID0gdGFnOworCQlibGtfbXFfcnFfY3R4X2luaXQocSwgY3R4LCBycSwgcncpOworCQlyZXR1cm4gcnE7CisJfQogCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHJ3LCBnZnBfdCBnZnAsCisJCWJvb2wgcmVzZXJ2ZWQpCit7CisJc3RydWN0IGJsa19tcV9jdHggKmN0eDsKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisKKwlpZiAoYmxrX21xX3F1ZXVlX2VudGVyKHEpKQorCQlyZXR1cm4gTlVMTDsKKworCWN0eCA9IGJsa19tcV9nZXRfY3R4KHEpOworCWhjdHggPSBxLT5tcV9vcHMtPm1hcF9xdWV1ZShxLCBjdHgtPmNwdSk7CisKKwlycSA9IF9fYmxrX21xX2FsbG9jX3JlcXVlc3QocSwgaGN0eCwgY3R4LCBydywgZ2ZwICYgfl9fR0ZQX1dBSVQsCisJCQkJICAgIHJlc2VydmVkKTsKKwlpZiAoIXJxICYmIChnZnAgJiBfX0dGUF9XQUlUKSkgewogCQlfX2Jsa19tcV9ydW5faHdfcXVldWUoaGN0eCk7Ci0JCWJsa19tcV93YWl0X2Zvcl90YWdzKGhjdHgtPnRhZ3MpOwotCX0gd2hpbGUgKDEpOworCQlibGtfbXFfcHV0X2N0eChjdHgpOwogCisJCWN0eCA9IGJsa19tcV9nZXRfY3R4KHEpOworCQloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgY3R4LT5jcHUpOworCQlycSA9ICBfX2Jsa19tcV9hbGxvY19yZXF1ZXN0KHEsIGhjdHgsIGN0eCwgcncsIGdmcCwgcmVzZXJ2ZWQpOworCX0KKwlibGtfbXFfcHV0X2N0eChjdHgpOwogCXJldHVybiBycTsKIH0KLQotc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgcncsIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQlpZiAoYmxrX21xX3F1ZXVlX2VudGVyKHEpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJxID0gYmxrX21xX2FsbG9jX3JlcXVlc3RfcGlubmVkKHEsIHJ3LCBnZnAsIGZhbHNlKTsKLQlpZiAocnEpCi0JCWJsa19tcV9wdXRfY3R4KHJxLT5tcV9jdHgpOwotCXJldHVybiBycTsKLX0KLQotc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXNlcnZlZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgcncsCi0JCQkJCSAgICAgIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQlpZiAoYmxrX21xX3F1ZXVlX2VudGVyKHEpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJxID0gYmxrX21xX2FsbG9jX3JlcXVlc3RfcGlubmVkKHEsIHJ3LCBnZnAsIHRydWUpOwotCWlmIChycSkKLQkJYmxrX21xX3B1dF9jdHgocnEtPm1xX2N0eCk7Ci0JcmV0dXJuIHJxOwotfQotRVhQT1JUX1NZTUJPTChibGtfbXFfYWxsb2NfcmVzZXJ2ZWRfcmVxdWVzdCk7Ci0KLS8qCi0gKiBSZS1pbml0IGFuZCBzZXQgcGR1LCBpZiB3ZSBoYXZlIGl0Ci0gKi8KLXZvaWQgYmxrX21xX3JxX2luaXQoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfcnFfaW5pdChoY3R4LT5xdWV1ZSwgcnEpOwotCi0JaWYgKGhjdHgtPmNtZF9zaXplKQotCQlycS0+c3BlY2lhbCA9IGJsa19tcV9ycV90b19wZHUocnEpOwotfQorRVhQT1JUX1NZTUJPTChibGtfbXFfYWxsb2NfcmVxdWVzdCk7CiAKIHN0YXRpYyB2b2lkIF9fYmxrX21xX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAkJCQkgIHN0cnVjdCBibGtfbXFfY3R4ICpjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSkKQEAgLTI2NSw5ICsyOTAsMTEgQEAKIAljb25zdCBpbnQgdGFnID0gcnEtPnRhZzsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOwogCi0JYmxrX21xX3JxX2luaXQoaGN0eCwgcnEpOwotCWJsa19tcV9wdXRfdGFnKGhjdHgtPnRhZ3MsIHRhZyk7CisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTVFfSU5GTElHSFQpCisJCWF0b21pY19kZWMoJmhjdHgtPm5yX2FjdGl2ZSk7CiAKKwljbGVhcl9iaXQoUkVRX0FUT01fU1RBUlRFRCwgJnJxLT5hdG9taWNfZmxhZ3MpOworCWJsa19tcV9wdXRfdGFnKGhjdHgsIHRhZywgJmN0eC0+bGFzdF90YWcpOwogCWJsa19tcV9xdWV1ZV9leGl0KHEpOwogfQogCkBAIC0yODMsMjAgKzMxMCw0NyBAQAogCV9fYmxrX21xX2ZyZWVfcmVxdWVzdChoY3R4LCBjdHgsIHJxKTsKIH0KIAotYm9vbCBibGtfbXFfZW5kX2lvX3BhcnRpYWwoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBucl9ieXRlcykKKy8qCisgKiBDbG9uZSBhbGwgcmVsZXZhbnQgc3RhdGUgZnJvbSBhIHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBwdXQgb24gaG9sZCBpbgorICogdGhlIGZsdXNoIHN0YXRlIG1hY2hpbmUgaW50byB0aGUgcHJlYWxsb2NhdGVkIGZsdXNoIHJlcXVlc3QgdGhhdCBoYW5ncworICogb2ZmIHRoZSByZXF1ZXN0IHF1ZXVlLgorICoKKyAqIEZvciBhIGRyaXZlciB0aGUgZmx1c2ggcmVxdWVzdCBzaG91bGQgYmUgaW52aXNpYmxlLCB0aGF0J3Mgd2h5IHdlIGFyZQorICogaW1wZXJzb25hdGluZyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBoZXJlLgorICovCit2b2lkIGJsa19tcV9jbG9uZV9mbHVzaF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpmbHVzaF9ycSwKKwkJc3RydWN0IHJlcXVlc3QgKm9yaWdfcnEpCiB7Ci0JaWYgKGJsa191cGRhdGVfcmVxdWVzdChycSwgZXJyb3IsIGJsa19ycV9ieXRlcyhycSkpKQotCQlyZXR1cm4gdHJ1ZTsKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCA9CisJCW9yaWdfcnEtPnEtPm1xX29wcy0+bWFwX3F1ZXVlKG9yaWdfcnEtPnEsIG9yaWdfcnEtPm1xX2N0eC0+Y3B1KTsKIAorCWZsdXNoX3JxLT5tcV9jdHggPSBvcmlnX3JxLT5tcV9jdHg7CisJZmx1c2hfcnEtPnRhZyA9IG9yaWdfcnEtPnRhZzsKKwltZW1jcHkoYmxrX21xX3JxX3RvX3BkdShmbHVzaF9ycSksIGJsa19tcV9ycV90b19wZHUob3JpZ19ycSksCisJCWhjdHgtPmNtZF9zaXplKTsKK30KKworaW5saW5lIHZvaWQgX19ibGtfbXFfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKQorewogCWJsa19hY2NvdW50X2lvX2RvbmUocnEpOwogCi0JaWYgKHJxLT5lbmRfaW8pCisJaWYgKHJxLT5lbmRfaW8pIHsKIAkJcnEtPmVuZF9pbyhycSwgZXJyb3IpOwotCWVsc2UKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoYmxrX2JpZGlfcnEocnEpKSkKKwkJCWJsa19tcV9mcmVlX3JlcXVlc3QocnEtPm5leHRfcnEpOwogCQlibGtfbXFfZnJlZV9yZXF1ZXN0KHJxKTsKLQlyZXR1cm4gZmFsc2U7CisJfQogfQotRVhQT1JUX1NZTUJPTChibGtfbXFfZW5kX2lvX3BhcnRpYWwpOworRVhQT1JUX1NZTUJPTChfX2Jsa19tcV9lbmRfaW8pOworCit2b2lkIGJsa19tcV9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpCit7CisJaWYgKGJsa191cGRhdGVfcmVxdWVzdChycSwgZXJyb3IsIGJsa19ycV9ieXRlcyhycSkpKQorCQlCVUcoKTsKKwlfX2Jsa19tcV9lbmRfaW8ocnEsIGVycm9yKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX2VuZF9pbyk7CiAKIHN0YXRpYyB2b2lkIF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlKHZvaWQgKmRhdGEpCiB7CkBAIC0zMDUsMTggKzM1OSwyMiBAQAogCXJxLT5xLT5zb2Z0aXJxX2RvbmVfZm4ocnEpOwogfQogCi12b2lkIF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIHZvaWQgYmxrX21xX2lwaV9jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4ID0gcnEtPm1xX2N0eDsKKwlib29sIHNoYXJlZCA9IGZhbHNlOwogCWludCBjcHU7CiAKLQlpZiAoIWN0eC0+aXBpX3JlZGlyZWN0KSB7CisJaWYgKCF0ZXN0X2JpdChRVUVVRV9GTEFHX1NBTUVfQ09NUCwgJnJxLT5xLT5xdWV1ZV9mbGFncykpIHsKIAkJcnEtPnEtPnNvZnRpcnFfZG9uZV9mbihycSk7CiAJCXJldHVybjsKIAl9CiAKIAljcHUgPSBnZXRfY3B1KCk7Ci0JaWYgKGNwdSAhPSBjdHgtPmNwdSAmJiBjcHVfb25saW5lKGN0eC0+Y3B1KSkgeworCWlmICghdGVzdF9iaXQoUVVFVUVfRkxBR19TQU1FX0ZPUkNFLCAmcnEtPnEtPnF1ZXVlX2ZsYWdzKSkKKwkJc2hhcmVkID0gY3B1c19zaGFyZV9jYWNoZShjcHUsIGN0eC0+Y3B1KTsKKworCWlmIChjcHUgIT0gY3R4LT5jcHUgJiYgIXNoYXJlZCAmJiBjcHVfb25saW5lKGN0eC0+Y3B1KSkgewogCQlycS0+Y3NkLmZ1bmMgPSBfX2Jsa19tcV9jb21wbGV0ZV9yZXF1ZXN0X3JlbW90ZTsKIAkJcnEtPmNzZC5pbmZvID0gcnE7CiAJCXJxLT5jc2QuZmxhZ3MgPSAwOwpAQCAtMzI3LDYgKzM4NSwxNiBAQAogCXB1dF9jcHUoKTsKIH0KIAordm9pZCBfX2Jsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOworCisJaWYgKCFxLT5zb2Z0aXJxX2RvbmVfZm4pCisJCWJsa19tcV9lbmRfaW8ocnEsIHJxLT5lcnJvcnMpOworCWVsc2UKKwkJYmxrX21xX2lwaV9jb21wbGV0ZV9yZXF1ZXN0KHJxKTsKK30KKwogLyoqCiAgKiBibGtfbXFfY29tcGxldGVfcmVxdWVzdCAtIGVuZCBJL08gb24gYSByZXF1ZXN0CiAgKiBAcnE6CQl0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQKQEAgLTMzNyw3ICs0MDUsOSBAQAogICoqLwogdm9pZCBibGtfbXFfY29tcGxldGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWYgKHVubGlrZWx5KGJsa19zaG91bGRfZmFrZV90aW1lb3V0KHJxLT5xKSkpCisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKKworCWlmICh1bmxpa2VseShibGtfc2hvdWxkX2Zha2VfdGltZW91dChxKSkpCiAJCXJldHVybjsKIAlpZiAoIWJsa19tYXJrX3JxX2NvbXBsZXRlKHJxKSkKIAkJX19ibGtfbXFfY29tcGxldGVfcmVxdWVzdChycSk7CkBAIC0zNTAsMTMgKzQyMCwzMSBAQAogCiAJdHJhY2VfYmxvY2tfcnFfaXNzdWUocSwgcnEpOwogCisJcnEtPnJlc2lkX2xlbiA9IGJsa19ycV9ieXRlcyhycSk7CisJaWYgKHVubGlrZWx5KGJsa19iaWRpX3JxKHJxKSkpCisJCXJxLT5uZXh0X3JxLT5yZXNpZF9sZW4gPSBibGtfcnFfYnl0ZXMocnEtPm5leHRfcnEpOworCiAJLyoKIAkgKiBKdXN0IG1hcmsgc3RhcnQgdGltZSBhbmQgc2V0IHRoZSBzdGFydGVkIGJpdC4gRHVlIHRvIG1lbW9yeQogCSAqIG9yZGVyaW5nLCB3ZSBrbm93IHdlJ2xsIHNlZSB0aGUgY29ycmVjdCBkZWFkbGluZSBhcyBsb25nIGFzCi0JICogUkVRX0FUT01JQ19TVEFSVEVEIGlzIHNlZW4uCisJICogUkVRX0FUT01JQ19TVEFSVEVEIGlzIHNlZW4uIFVzZSB0aGUgZGVmYXVsdCBxdWV1ZSB0aW1lb3V0LAorCSAqIHVubGVzcyBvbmUgaGFzIGJlZW4gc2V0IGluIHRoZSByZXF1ZXN0LgogCSAqLwotCXJxLT5kZWFkbGluZSA9IGppZmZpZXMgKyBxLT5ycV90aW1lb3V0OwotCXNldF9iaXQoUkVRX0FUT01fU1RBUlRFRCwgJnJxLT5hdG9taWNfZmxhZ3MpOworCWlmICghcnEtPnRpbWVvdXQpCisJCXJxLT5kZWFkbGluZSA9IGppZmZpZXMgKyBxLT5ycV90aW1lb3V0OworCWVsc2UKKwkJcnEtPmRlYWRsaW5lID0gamlmZmllcyArIHJxLT50aW1lb3V0OworCisJLyoKKwkgKiBNYXJrIHVzIGFzIHN0YXJ0ZWQgYW5kIGNsZWFyIGNvbXBsZXRlLiBDb21wbGV0ZSBtaWdodCBoYXZlIGJlZW4KKwkgKiBzZXQgaWYgcmVxdWV1ZSByYWNlZCB3aXRoIHRpbWVvdXQsIHdoaWNoIHRoZW4gbWFya2VkIGl0IGFzCisJICogY29tcGxldGUuIFNvIGJlIHN1cmUgdG8gY2xlYXIgY29tcGxldGUgYWdhaW4gd2hlbiB3ZSBzdGFydAorCSAqIHRoZSByZXF1ZXN0LCBvdGhlcndpc2Ugd2UnbGwgaWdub3JlIHRoZSBjb21wbGV0aW9uIGV2ZW50LgorCSAqLworCWlmICghdGVzdF9iaXQoUkVRX0FUT01fU1RBUlRFRCwgJnJxLT5hdG9taWNfZmxhZ3MpKQorCQlzZXRfYml0KFJFUV9BVE9NX1NUQVJURUQsICZycS0+YXRvbWljX2ZsYWdzKTsKKwlpZiAodGVzdF9iaXQoUkVRX0FUT01fQ09NUExFVEUsICZycS0+YXRvbWljX2ZsYWdzKSkKKwkJY2xlYXJfYml0KFJFUV9BVE9NX0NPTVBMRVRFLCAmcnEtPmF0b21pY19mbGFncyk7CiAKIAlpZiAocS0+ZG1hX2RyYWluX3NpemUgJiYgYmxrX3JxX2J5dGVzKHJxKSkgewogCQkvKgpAQCAtMzc4LDcgKzQ2Niw3IEBACiAJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0VORDsKIH0KIAotc3RhdGljIHZvaWQgYmxrX21xX3JlcXVldWVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgdm9pZCBfX2Jsa19tcV9yZXF1ZXVlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CiAKQEAgLTM5MSw2ICs0NzksODYgQEAKIAkJcnEtPm5yX3BoeXNfc2VnbWVudHMtLTsKIH0KIAordm9pZCBibGtfbXFfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlfX2Jsa19tcV9yZXF1ZXVlX3JlcXVlc3QocnEpOworCWJsa19jbGVhcl9ycV9jb21wbGV0ZShycSk7CisKKwlCVUdfT04oYmxrX3F1ZXVlZF9ycShycSkpOworCWJsa19tcV9hZGRfdG9fcmVxdWV1ZV9saXN0KHJxLCB0cnVlKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX3JlcXVldWVfcmVxdWVzdCk7CisKK3N0YXRpYyB2b2lkIGJsa19tcV9yZXF1ZXVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLCByZXF1ZXVlX3dvcmspOworCUxJU1RfSEVBRChycV9saXN0KTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cmVxdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcS0+cmVxdWV1ZV9saXN0LCAmcnFfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cmVxdWV1ZV9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnEsIG5leHQsICZycV9saXN0LCBxdWV1ZWxpc3QpIHsKKwkJaWYgKCEocnEtPmNtZF9mbGFncyAmIFJFUV9TT0ZUQkFSUklFUikpCisJCQljb250aW51ZTsKKworCQlycS0+Y21kX2ZsYWdzICY9IH5SRVFfU09GVEJBUlJJRVI7CisJCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOworCQlibGtfbXFfaW5zZXJ0X3JlcXVlc3QocnEsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZycV9saXN0KSkgeworCQlycSA9IGxpc3RfZW50cnkocnFfbGlzdC5uZXh0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcnEtPnF1ZXVlbGlzdCk7CisJCWJsa19tcV9pbnNlcnRfcmVxdWVzdChycSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJfQorCisJYmxrX21xX3J1bl9xdWV1ZXMocSwgZmFsc2UpOworfQorCit2b2lkIGJsa19tcV9hZGRfdG9fcmVxdWV1ZV9saXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYm9vbCBhdF9oZWFkKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogV2UgYWJ1c2UgdGhpcyBmbGFnIHRoYXQgaXMgb3RoZXJ3aXNlIHVzZWQgYnkgdGhlIEkvTyBzY2hlZHVsZXIgdG8KKwkgKiByZXF1ZXN0IGhlYWQgaW5zZXJ0YXRpb24gZnJvbSB0aGUgd29ya3F1ZXVlLgorCSAqLworCUJVR19PTihycS0+Y21kX2ZsYWdzICYgUkVRX1NPRlRCQVJSSUVSKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5yZXF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlpZiAoYXRfaGVhZCkgeworCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKKwkJbGlzdF9hZGQoJnJxLT5xdWV1ZWxpc3QsICZxLT5yZXF1ZXVlX2xpc3QpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZxLT5yZXF1ZXVlX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5yZXF1ZXVlX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX2FkZF90b19yZXF1ZXVlX2xpc3QpOworCit2b2lkIGJsa19tcV9raWNrX3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnEtPnJlcXVldWVfd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19tcV9raWNrX3JlcXVldWVfbGlzdCk7CisKK3N0cnVjdCByZXF1ZXN0ICpibGtfbXFfdGFnX3RvX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB1bnNpZ25lZCBpbnQgdGFnKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gaGN0eC0+cXVldWU7CisKKwlpZiAoKHEtPmZsdXNoX3JxLT5jbWRfZmxhZ3MgJiBSRVFfRkxVU0hfU0VRKSAmJgorCSAgICBxLT5mbHVzaF9ycS0+dGFnID09IHRhZykKKwkJcmV0dXJuIHEtPmZsdXNoX3JxOworCisJcmV0dXJuIGhjdHgtPnRhZ3MtPnJxc1t0YWddOworfQorRVhQT1JUX1NZTUJPTChibGtfbXFfdGFnX3RvX3JxKTsKKwogc3RydWN0IGJsa19tcV90aW1lb3V0X2RhdGEgewogCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OwogCXVuc2lnbmVkIGxvbmcgKm5leHQ7CkBAIC00MTIsMTIgKzU4MCwxMyBAQAogCWRvIHsKIAkJc3RydWN0IHJlcXVlc3QgKnJxOwogCi0JCXRhZyA9IGZpbmRfbmV4dF96ZXJvX2JpdChmcmVlX3RhZ3MsIGhjdHgtPnF1ZXVlX2RlcHRoLCB0YWcpOwotCQlpZiAodGFnID49IGhjdHgtPnF1ZXVlX2RlcHRoKQorCQl0YWcgPSBmaW5kX25leHRfemVyb19iaXQoZnJlZV90YWdzLCBoY3R4LT50YWdzLT5ucl90YWdzLCB0YWcpOworCQlpZiAodGFnID49IGhjdHgtPnRhZ3MtPm5yX3RhZ3MpCiAJCQlicmVhazsKIAotCQlycSA9IGhjdHgtPnJxc1t0YWcrK107Ci0KKwkJcnEgPSBibGtfbXFfdGFnX3RvX3JxKGhjdHgsIHRhZysrKTsKKwkJaWYgKHJxLT5xICE9IGhjdHgtPnF1ZXVlKQorCQkJY29udGludWU7CiAJCWlmICghdGVzdF9iaXQoUkVRX0FUT01fU1RBUlRFRCwgJnJxLT5hdG9taWNfZmxhZ3MpKQogCQkJY29udGludWU7CiAKQEAgLTQ0Miw2ICs2MTEsMjggQEAKIAlibGtfbXFfdGFnX2J1c3lfaXRlcihoY3R4LT50YWdzLCBibGtfbXFfdGltZW91dF9jaGVjaywgJmRhdGEpOwogfQogCitzdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIGJsa19tcV9ycV90aW1lZF9vdXQoc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CisKKwkvKgorCSAqIFdlIGtub3cgdGhhdCBjb21wbGV0ZSBpcyBzZXQgYXQgdGhpcyBwb2ludC4gSWYgU1RBUlRFRCBpc24ndCBzZXQKKwkgKiBhbnltb3JlLCB0aGVuIHRoZSByZXF1ZXN0IGlzbid0IGFjdGl2ZSBhbmQgdGhlICJ0aW1lb3V0IiBzaG91bGQKKwkgKiBqdXN0IGJlIGlnbm9yZWQuIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gdGhlIGJpdGZsYWcgb3JkZXJpbmcuCisJICogVGltZW91dCBmaXJzdCBjaGVja3MgaWYgU1RBUlRFRCBpcyBzZXQsIGFuZCBpZiBpdCBpcywgYXNzdW1lcworCSAqIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQnV0IGlmIHdlIHJhY2Ugd2l0aCBjb21wbGV0aW9uLCB0aGVuCisJICogd2UgYm90aCBmbGFncyB3aWxsIGdldCBjbGVhcmVkLiBTbyBjaGVjayBoZXJlIGFnYWluLCBhbmQgaWdub3JlCisJICogYSB0aW1lb3V0IGV2ZW50IHdpdGggYSByZXF1ZXN0IHRoYXQgaXNuJ3QgYWN0aXZlLgorCSAqLworCWlmICghdGVzdF9iaXQoUkVRX0FUT01fU1RBUlRFRCwgJnJxLT5hdG9taWNfZmxhZ3MpKQorCQlyZXR1cm4gQkxLX0VIX05PVF9IQU5ETEVEOworCisJaWYgKCFxLT5tcV9vcHMtPnRpbWVvdXQpCisJCXJldHVybiBCTEtfRUhfUkVTRVRfVElNRVI7CisKKwlyZXR1cm4gcS0+bXFfb3BzLT50aW1lb3V0KHJxKTsKK30KKwogc3RhdGljIHZvaWQgYmxrX21xX3JxX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKSBkYXRhOwpAQCAtNDQ5LDExICs2NDAsMjQgQEAKIAl1bnNpZ25lZCBsb25nIG5leHQgPSAwOwogCWludCBpLCBuZXh0X3NldCA9IDA7CiAKLQlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkKLQkJYmxrX21xX2h3X2N0eF9jaGVja190aW1lb3V0KGhjdHgsICZuZXh0LCAmbmV4dF9zZXQpOworCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7CisJCS8qCisJCSAqIElmIG5vdCBzb2Z0d2FyZSBxdWV1ZXMgYXJlIGN1cnJlbnRseSBtYXBwZWQgdG8gdGhpcworCQkgKiBoYXJkd2FyZSBxdWV1ZSwgdGhlcmUncyBub3RoaW5nIHRvIGNoZWNrCisJCSAqLworCQlpZiAoIWhjdHgtPm5yX2N0eCB8fCAhaGN0eC0+dGFncykKKwkJCWNvbnRpbnVlOwogCi0JaWYgKG5leHRfc2V0KQotCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIHJvdW5kX2ppZmZpZXNfdXAobmV4dCkpOworCQlibGtfbXFfaHdfY3R4X2NoZWNrX3RpbWVvdXQoaGN0eCwgJm5leHQsICZuZXh0X3NldCk7CisJfQorCisJaWYgKG5leHRfc2V0KSB7CisJCW5leHQgPSBibGtfcnFfdGltZW91dChyb3VuZF9qaWZmaWVzX3VwKG5leHQpKTsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBuZXh0KTsKKwl9IGVsc2UgeworCQlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkKKwkJCWJsa19tcV90YWdfaWRsZShoY3R4KTsKKwl9CiB9CiAKIC8qCkBAIC00OTUsOSArNjk5LDM4IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIGJsa19tcV9hZGRfdGltZXIoc3RydWN0IHJlcXVlc3QgKnJxKQorLyoKKyAqIFByb2Nlc3Mgc29mdHdhcmUgcXVldWVzIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBidXN5LCBzcGxpY2luZyB0aGVtCisgKiB0byB0aGUgZm9yLWRpc3BhdGNoCisgKi8KK3N0YXRpYyB2b2lkIGZsdXNoX2J1c3lfY3R4cyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKLQlfX2Jsa19hZGRfdGltZXIocnEsIE5VTEwpOworCXN0cnVjdCBibGtfbXFfY3R4ICpjdHg7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGN0eC0+Y3R4X21hcC5tYXBfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBibGtfYWxpZ25fYml0bWFwICpibSA9ICZoY3R4LT5jdHhfbWFwLm1hcFtpXTsKKwkJdW5zaWduZWQgaW50IG9mZiwgYml0OworCisJCWlmICghYm0tPndvcmQpCisJCQljb250aW51ZTsKKworCQliaXQgPSAwOworCQlvZmYgPSBpICogaGN0eC0+Y3R4X21hcC5iaXRzX3Blcl93b3JkOworCQlkbyB7CisJCQliaXQgPSBmaW5kX25leHRfYml0KCZibS0+d29yZCwgYm0tPmRlcHRoLCBiaXQpOworCQkJaWYgKGJpdCA+PSBibS0+ZGVwdGgpCisJCQkJYnJlYWs7CisKKwkJCWN0eCA9IGhjdHgtPmN0eHNbYml0ICsgb2ZmXTsKKwkJCWNsZWFyX2JpdChiaXQsICZibS0+d29yZCk7CisJCQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmN0eC0+cnFfbGlzdCwgbGlzdCk7CisJCQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKworCQkJYml0Kys7CisJCX0gd2hpbGUgKDEpOworCX0KIH0KIAogLyoKQEAgLTUwOSwxMCArNzQyLDExIEBACiBzdGF0aWMgdm9pZCBfX2Jsa19tcV9ydW5faHdfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBoY3R4LT5xdWV1ZTsKLQlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OwogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlMSVNUX0hFQUQocnFfbGlzdCk7Ci0JaW50IGJpdCwgcXVldWVkOworCWludCBxdWV1ZWQ7CisKKwlXQVJOX09OKCFjcHVtYXNrX3Rlc3RfY3B1KHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIGhjdHgtPmNwdW1hc2spKTsKIAogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChCTEtfTVFfU19TVE9QUEVELCAmaGN0eC0+c3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtNTIyLDE1ICs3NTYsNyBAQAogCS8qCiAJICogVG91Y2ggYW55IHNvZnR3YXJlIHF1ZXVlIHRoYXQgaGFzIHBlbmRpbmcgZW50cmllcy4KIAkgKi8KLQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgaGN0eC0+Y3R4X21hcCwgaGN0eC0+bnJfY3R4KSB7Ci0JCWNsZWFyX2JpdChiaXQsIGhjdHgtPmN0eF9tYXApOwotCQljdHggPSBoY3R4LT5jdHhzW2JpdF07Ci0JCUJVR19PTihiaXQgIT0gY3R4LT5pbmRleF9odyk7Ci0KLQkJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmN0eC0+cnFfbGlzdCwgJnJxX2xpc3QpOwotCQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLQl9CisJZmx1c2hfYnVzeV9jdHhzKGhjdHgsICZycV9saXN0KTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBwcmV2aW91cyBlbnRyaWVzIG9uIG91ciBkaXNwYXRjaCBsaXN0LCBncmFiIHRoZW0KQEAgLTU0NCwxMyArNzcwLDkgQEAKIAl9CiAKIAkvKgotCSAqIERlbGV0ZSBhbmQgcmV0dXJuIGFsbCBlbnRyaWVzIGZyb20gb3VyIGRpc3BhdGNoIGxpc3QKLQkgKi8KLQlxdWV1ZWQgPSAwOwotCi0JLyoKIAkgKiBOb3cgcHJvY2VzcyBhbGwgdGhlIGVudHJpZXMsIHNlbmRpbmcgdGhlbSB0byB0aGUgZHJpdmVyLgogCSAqLworCXF1ZXVlZCA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZycV9saXN0KSkgewogCQlpbnQgcmV0OwogCkBAIC01NjUsMTMgKzc4Nyw4IEBACiAJCQlxdWV1ZWQrKzsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJMS19NUV9SUV9RVUVVRV9CVVNZOgotCQkJLyoKLQkJCSAqIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIG1lY2hhbmlzbSB0byBzdG9wIHRoZSBxdWV1ZQotCQkJICogbGlrZSBibGtfc3RvcF9xdWV1ZSwgb3RoZXJ3aXNlIHdlIHdpbGwgd2FzdGUgY3B1Ci0JCQkgKiB0aW1lCi0JCQkgKi8KIAkJCWxpc3RfYWRkKCZycS0+cXVldWVsaXN0LCAmcnFfbGlzdCk7Ci0JCQlibGtfbXFfcmVxdWV1ZV9yZXF1ZXN0KHJxKTsKKwkJCV9fYmxrX21xX3JlcXVldWVfcmVxdWVzdChycSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigiYmxrLW1xOiBiYWQgcmV0dXJuIG9uIHF1ZXVlOiAlZFxuIiwgcmV0KTsKQEAgLTYwMSwxNyArODE4LDQ0IEBACiAJfQogfQogCisvKgorICogSXQnZCBiZSBncmVhdCBpZiB0aGUgd29ya3F1ZXVlIEFQSSBoYWQgYSB3YXkgdG8gcGFzcworICogaW4gYSBtYXNrIGFuZCBoYWQgc29tZSBzbWFydHMgZm9yIG1vcmUgY2xldmVyIHBsYWNlbWVudC4KKyAqIEZvciBub3cgd2UganVzdCByb3VuZC1yb2JpbiBoZXJlLCBzd2l0Y2hpbmcgZm9yIGV2ZXJ5CisgKiBCTEtfTVFfQ1BVX1dPUktfQkFUQ0ggcXVldWVkIGl0ZW1zLgorICovCitzdGF0aWMgaW50IGJsa19tcV9oY3R4X25leHRfY3B1KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQoreworCWludCBjcHUgPSBoY3R4LT5uZXh0X2NwdTsKKworCWlmICgtLWhjdHgtPm5leHRfY3B1X2JhdGNoIDw9IDApIHsKKwkJaW50IG5leHRfY3B1OworCisJCW5leHRfY3B1ID0gY3B1bWFza19uZXh0KGhjdHgtPm5leHRfY3B1LCBoY3R4LT5jcHVtYXNrKTsKKwkJaWYgKG5leHRfY3B1ID49IG5yX2NwdV9pZHMpCisJCQluZXh0X2NwdSA9IGNwdW1hc2tfZmlyc3QoaGN0eC0+Y3B1bWFzayk7CisKKwkJaGN0eC0+bmV4dF9jcHUgPSBuZXh0X2NwdTsKKwkJaGN0eC0+bmV4dF9jcHVfYmF0Y2ggPSBCTEtfTVFfQ1BVX1dPUktfQkFUQ0g7CisJfQorCisJcmV0dXJuIGNwdTsKK30KKwogdm9pZCBibGtfbXFfcnVuX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBib29sIGFzeW5jKQogewogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChCTEtfTVFfU19TVE9QUEVELCAmaGN0eC0+c3RhdGUpKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFhc3luYykKKwlpZiAoIWFzeW5jICYmIGNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBoY3R4LT5jcHVtYXNrKSkKIAkJX19ibGtfbXFfcnVuX2h3X3F1ZXVlKGhjdHgpOworCWVsc2UgaWYgKGhjdHgtPnF1ZXVlLT5ucl9od19xdWV1ZXMgPT0gMSkKKwkJa2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoJmhjdHgtPnJ1bl93b3JrLCAwKTsKIAllbHNlIHsKLQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBoY3R4LT5xdWV1ZTsKKwkJdW5zaWduZWQgaW50IGNwdTsKIAotCQlrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhxLCAmaGN0eC0+ZGVsYXllZF93b3JrLCAwKTsKKwkJY3B1ID0gYmxrX21xX2hjdHhfbmV4dF9jcHUoaGN0eCk7CisJCWtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJmhjdHgtPnJ1bl93b3JrLCAwKTsKIAl9CiB9CiAKQEAgLTYyNiwxNCArODcwLDE3IEBACiAJCSAgICB0ZXN0X2JpdChCTEtfTVFfU19TVE9QUEVELCAmaGN0eC0+c3RhdGUpKQogCQkJY29udGludWU7CiAKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWJsa19tcV9ydW5faHdfcXVldWUoaGN0eCwgYXN5bmMpOworCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woYmxrX21xX3J1bl9xdWV1ZXMpOwogCiB2b2lkIGJsa19tcV9zdG9wX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQogewotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhjdHgtPmRlbGF5ZWRfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaGN0eC0+cnVuX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhjdHgtPmRlbGF5X3dvcmspOwogCXNldF9iaXQoQkxLX01RX1NfU1RPUFBFRCwgJmhjdHgtPnN0YXRlKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX21xX3N0b3BfaHdfcXVldWUpOwpAQCAtNjUxLDExICs4OTgsMjUgQEAKIHZvaWQgYmxrX21xX3N0YXJ0X2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQogewogCWNsZWFyX2JpdChCTEtfTVFfU19TVE9QUEVELCAmaGN0eC0+c3RhdGUpOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJX19ibGtfbXFfcnVuX2h3X3F1ZXVlKGhjdHgpOworCXByZWVtcHRfZW5hYmxlKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19tcV9zdGFydF9od19xdWV1ZSk7CiAKLXZvaWQgYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQordm9pZCBibGtfbXFfc3RhcnRfaHdfcXVldWVzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OworCWludCBpOworCisJcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpCisJCWJsa19tcV9zdGFydF9od19xdWV1ZShoY3R4KTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX3N0YXJ0X2h3X3F1ZXVlcyk7CisKKwordm9pZCBibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgYXN5bmMpCiB7CiAJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CiAJaW50IGk7CkBAIC02NjUsMTkgKzkyNiw0NyBAQAogCQkJY29udGludWU7CiAKIAkJY2xlYXJfYml0KEJMS19NUV9TX1NUT1BQRUQsICZoY3R4LT5zdGF0ZSk7Ci0JCWJsa19tcV9ydW5faHdfcXVldWUoaGN0eCwgdHJ1ZSk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlibGtfbXFfcnVuX2h3X3F1ZXVlKGhjdHgsIGFzeW5jKTsKKwkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyk7CiAKLXN0YXRpYyB2b2lkIGJsa19tcV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGJsa19tcV9ydW5fd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CiAKLQloY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBibGtfbXFfaHdfY3R4LCBkZWxheWVkX3dvcmsud29yayk7CisJaGN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmxrX21xX2h3X2N0eCwgcnVuX3dvcmsud29yayk7CisKIAlfX2Jsa19tcV9ydW5faHdfcXVldWUoaGN0eCk7CiB9CiAKK3N0YXRpYyB2b2lkIGJsa19tcV9kZWxheV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKworCWhjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa19tcV9od19jdHgsIGRlbGF5X3dvcmsud29yayk7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJMS19NUV9TX1NUT1BQRUQsICZoY3R4LT5zdGF0ZSkpCisJCV9fYmxrX21xX3J1bl9od19xdWV1ZShoY3R4KTsKK30KKwordm9pZCBibGtfbXFfZGVsYXlfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHVuc2lnbmVkIGxvbmcgbXNlY3MpCit7CisJdW5zaWduZWQgbG9uZyB0bW8gPSBtc2Vjc190b19qaWZmaWVzKG1zZWNzKTsKKworCWlmIChoY3R4LT5xdWV1ZS0+bnJfaHdfcXVldWVzID09IDEpCisJCWtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKCZoY3R4LT5kZWxheV93b3JrLCB0bW8pOworCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgY3B1OworCisJCWNwdSA9IGJsa19tcV9oY3R4X25leHRfY3B1KGhjdHgpOworCQlrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsICZoY3R4LT5kZWxheV93b3JrLCB0bW8pOworCX0KK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX2RlbGF5X3F1ZXVlKTsKKwogc3RhdGljIHZvaWQgX19ibGtfbXFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCiAJCQkJICAgIHN0cnVjdCByZXF1ZXN0ICpycSwgYm9vbCBhdF9oZWFkKQogewpAQCAtNjg5LDEyICs5NzgsMTMgQEAKIAkJbGlzdF9hZGQoJnJxLT5xdWV1ZWxpc3QsICZjdHgtPnJxX2xpc3QpOwogCWVsc2UKIAkJbGlzdF9hZGRfdGFpbCgmcnEtPnF1ZXVlbGlzdCwgJmN0eC0+cnFfbGlzdCk7CisKIAlibGtfbXFfaGN0eF9tYXJrX3BlbmRpbmcoaGN0eCwgY3R4KTsKIAogCS8qCiAJICogV2UgZG8gdGhpcyBlYXJseSwgdG8gZW5zdXJlIHdlIGFyZSBvbiB0aGUgcmlnaHQgQ1BVLgogCSAqLwotCWJsa19tcV9hZGRfdGltZXIocnEpOworCWJsa19hZGRfdGltZXIocnEpOwogfQogCiB2b2lkIGJsa19tcV9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgYXRfaGVhZCwgYm9vbCBydW5fcXVldWUsCkBAIC03MTksMTAgKzEwMDksMTAgQEAKIAkJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiAJfQogCi0JYmxrX21xX3B1dF9jdHgoY3VycmVudF9jdHgpOwotCiAJaWYgKHJ1bl9xdWV1ZSkKIAkJYmxrX21xX3J1bl9od19xdWV1ZShoY3R4LCBhc3luYyk7CisKKwlibGtfbXFfcHV0X2N0eChjdXJyZW50X2N0eCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJsa19tcV9pbnNlcnRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC03NTgsOSArMTA0OCw4IEBACiAJfQogCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCi0JYmxrX21xX3B1dF9jdHgoY3VycmVudF9jdHgpOwotCiAJYmxrX21xX3J1bl9od19xdWV1ZShoY3R4LCBmcm9tX3NjaGVkdWxlKTsKKwlibGtfbXFfcHV0X2N0eChjdXJyZW50X2N0eCk7CiB9CiAKIHN0YXRpYyBpbnQgcGx1Z19jdHhfY21wKHZvaWQgKnByaXYsIHN0cnVjdCBsaXN0X2hlYWQgKmEsIHN0cnVjdCBsaXN0X2hlYWQgKmIpCkBAIC04MjMsMjQgKzExMTIsOTQgQEAKIHN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlpbml0X3JlcXVlc3RfZnJvbV9iaW8ocnEsIGJpbyk7Ci0JYmxrX2FjY291bnRfaW9fc3RhcnQocnEsIDEpOworCisJaWYgKGJsa19kb19pb19zdGF0KHJxKSkgeworCQlycS0+c3RhcnRfdGltZSA9IGppZmZpZXM7CisJCWJsa19hY2NvdW50X2lvX3N0YXJ0KHJxLCAxKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGJsa19tcV9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfbWVyZ2VfcXVldWVfaW8oc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCisJCQkJCSBzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4LAorCQkJCQkgc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBoY3R4LT5xdWV1ZTsKKworCWlmICghKGhjdHgtPmZsYWdzICYgQkxLX01RX0ZfU0hPVUxEX01FUkdFKSkgeworCQlibGtfbXFfYmlvX3RvX3JlcXVlc3QocnEsIGJpbyk7CisJCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKK2luc2VydF9ycToKKwkJX19ibGtfbXFfaW5zZXJ0X3JlcXVlc3QoaGN0eCwgcnEsIGZhbHNlKTsKKwkJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJCWlmICghYmxrX21xX2F0dGVtcHRfbWVyZ2UocSwgY3R4LCBiaW8pKSB7CisJCQlibGtfbXFfYmlvX3RvX3JlcXVlc3QocnEsIGJpbyk7CisJCQlnb3RvIGluc2VydF9ycTsKKwkJfQorCisJCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCQlfX2Jsa19tcV9mcmVlX3JlcXVlc3QoaGN0eCwgY3R4LCBycSk7CisJCXJldHVybiB0cnVlOworCX0KK30KKworc3RydWN0IGJsa19tYXBfY3R4IHsKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OworfTsKKworc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpibGtfbXFfbWFwX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJCSAgc3RydWN0IGJpbyAqYmlvLAorCQkJCQkgIHN0cnVjdCBibGtfbWFwX2N0eCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKIAlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKKworCWlmICh1bmxpa2VseShibGtfbXFfcXVldWVfZW50ZXIocSkpKSB7CisJCWJpb19lbmRpbyhiaW8sIC1FSU8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljdHggPSBibGtfbXFfZ2V0X2N0eChxKTsKKwloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgY3R4LT5jcHUpOworCisJaWYgKHJ3X2lzX3N5bmMoYmlvLT5iaV9ydykpCisJCXJ3IHw9IFJFUV9TWU5DOworCisJdHJhY2VfYmxvY2tfZ2V0cnEocSwgYmlvLCBydyk7CisJcnEgPSBfX2Jsa19tcV9hbGxvY19yZXF1ZXN0KHEsIGhjdHgsIGN0eCwgcncsIEdGUF9BVE9NSUMsIGZhbHNlKTsKKwlpZiAodW5saWtlbHkoIXJxKSkgeworCQlfX2Jsa19tcV9ydW5faHdfcXVldWUoaGN0eCk7CisJCWJsa19tcV9wdXRfY3R4KGN0eCk7CisJCXRyYWNlX2Jsb2NrX3NsZWVwcnEocSwgYmlvLCBydyk7CisKKwkJY3R4ID0gYmxrX21xX2dldF9jdHgocSk7CisJCWhjdHggPSBxLT5tcV9vcHMtPm1hcF9xdWV1ZShxLCBjdHgtPmNwdSk7CisJCXJxID0gX19ibGtfbXFfYWxsb2NfcmVxdWVzdChxLCBoY3R4LCBjdHgsIHJ3LAorCQkJCQkgICAgX19HRlBfV0FJVHxHRlBfQVRPTUlDLCBmYWxzZSk7CisJfQorCisJaGN0eC0+cXVldWVkKys7CisJZGF0YS0+aGN0eCA9IGhjdHg7CisJZGF0YS0+Y3R4ID0gY3R4OworCXJldHVybiBycTsKK30KKworLyoKKyAqIE11bHRpcGxlIGhhcmR3YXJlIHF1ZXVlIHZhcmlhbnQuIFRoaXMgd2lsbCBub3QgdXNlIHBlci1wcm9jZXNzIHBsdWdzLAorICogYnV0IHdpbGwgYXR0ZW1wdCB0byBieXBhc3MgdGhlIGhjdHggcXVldWVpbmcgaWYgd2UgY2FuIGdvIHN0cmFpZ2h0IHRvCisgKiBoYXJkd2FyZSBmb3IgU1lOQyBJTy4KKyAqLworc3RhdGljIHZvaWQgYmxrX21xX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQorewogCWNvbnN0IGludCBpc19zeW5jID0gcndfaXNfc3luYyhiaW8tPmJpX3J3KTsKIAljb25zdCBpbnQgaXNfZmx1c2hfZnVhID0gYmlvLT5iaV9ydyAmIChSRVFfRkxVU0ggfCBSRVFfRlVBKTsKLQlpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKKwlzdHJ1Y3QgYmxrX21hcF9jdHggZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JdW5zaWduZWQgaW50IHVzZV9wbHVnLCByZXF1ZXN0X2NvdW50ID0gMDsKLQotCS8qCi0JICogSWYgd2UgaGF2ZSBtdWx0aXBsZSBoYXJkd2FyZSBxdWV1ZXMsIGp1c3QgZ28gZGlyZWN0bHkgdG8KLQkgKiBvbmUgb2YgdGhvc2UgZm9yIHN5bmMgSU8uCi0JICovCi0JdXNlX3BsdWcgPSAhaXNfZmx1c2hfZnVhICYmICgocS0+bnJfaHdfcXVldWVzID09IDEpIHx8ICFpc19zeW5jKTsKIAogCWJsa19xdWV1ZV9ib3VuY2UocSwgJmJpbyk7CiAKQEAgLTg0OSwzNyArMTIwOCw4OSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVzZV9wbHVnICYmIGJsa19hdHRlbXB0X3BsdWdfbWVyZ2UocSwgYmlvLCAmcmVxdWVzdF9jb3VudCkpCisJcnEgPSBibGtfbXFfbWFwX3JlcXVlc3QocSwgYmlvLCAmZGF0YSk7CisJaWYgKHVubGlrZWx5KCFycSkpCiAJCXJldHVybjsKIAotCWlmIChibGtfbXFfcXVldWVfZW50ZXIocSkpIHsKKwlpZiAodW5saWtlbHkoaXNfZmx1c2hfZnVhKSkgeworCQlibGtfbXFfYmlvX3RvX3JlcXVlc3QocnEsIGJpbyk7CisJCWJsa19pbnNlcnRfZmx1c2gocnEpOworCQlnb3RvIHJ1bl9xdWV1ZTsKKwl9CisKKwlpZiAoaXNfc3luYykgeworCQlpbnQgcmV0OworCisJCWJsa19tcV9iaW9fdG9fcmVxdWVzdChycSwgYmlvKTsKKwkJYmxrX21xX3N0YXJ0X3JlcXVlc3QocnEsIHRydWUpOworCQlibGtfYWRkX3RpbWVyKHJxKTsKKworCQkvKgorCQkgKiBGb3IgT0sgcXVldWUsIHdlIGFyZSBkb25lLiBGb3IgZXJyb3IsIGtpbGwgaXQuIEFueSBvdGhlcgorCQkgKiBlcnJvciAoYnVzeSksIGp1c3QgYWRkIGl0IHRvIG91ciBsaXN0IGFzIHdlIHByZXZpb3VzbHkKKwkJICogd291bGQgaGF2ZSBkb25lCisJCSAqLworCQlyZXQgPSBxLT5tcV9vcHMtPnF1ZXVlX3JxKGRhdGEuaGN0eCwgcnEpOworCQlpZiAocmV0ID09IEJMS19NUV9SUV9RVUVVRV9PSykKKwkJCWdvdG8gZG9uZTsKKwkJZWxzZSB7CisJCQlfX2Jsa19tcV9yZXF1ZXVlX3JlcXVlc3QocnEpOworCisJCQlpZiAocmV0ID09IEJMS19NUV9SUV9RVUVVRV9FUlJPUikgeworCQkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQkJCWJsa19tcV9lbmRfaW8ocnEsIHJxLT5lcnJvcnMpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghYmxrX21xX21lcmdlX3F1ZXVlX2lvKGRhdGEuaGN0eCwgZGF0YS5jdHgsIHJxLCBiaW8pKSB7CisJCS8qCisJCSAqIEZvciBhIFNZTkMgcmVxdWVzdCwgc2VuZCBpdCB0byB0aGUgaGFyZHdhcmUgaW1tZWRpYXRlbHkuIEZvcgorCQkgKiBhbiBBU1lOQyByZXF1ZXN0LCBqdXN0IGVuc3VyZSB0aGF0IHdlIHJ1biBpdCBsYXRlciBvbi4gVGhlCisJCSAqIGxhdHRlciBhbGxvd3MgZm9yIG1lcmdpbmcgb3Bwb3J0dW5pdGllcyBhbmQgbW9yZSBlZmZpY2llbnQKKwkJICogZGlzcGF0Y2hpbmcuCisJCSAqLworcnVuX3F1ZXVlOgorCQlibGtfbXFfcnVuX2h3X3F1ZXVlKGRhdGEuaGN0eCwgIWlzX3N5bmMgfHwgaXNfZmx1c2hfZnVhKTsKKwl9Citkb25lOgorCWJsa19tcV9wdXRfY3R4KGRhdGEuY3R4KTsKK30KKworLyoKKyAqIFNpbmdsZSBoYXJkd2FyZSBxdWV1ZSB2YXJpYW50LiBUaGlzIHdpbGwgYXR0ZW1wdCB0byB1c2UgYW55IHBlci1wcm9jZXNzCisgKiBwbHVnIGZvciBtZXJnaW5nIGFuZCBJTyBkZWZlcnJhbC4KKyAqLworc3RhdGljIHZvaWQgYmxrX3NxX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQoreworCWNvbnN0IGludCBpc19zeW5jID0gcndfaXNfc3luYyhiaW8tPmJpX3J3KTsKKwljb25zdCBpbnQgaXNfZmx1c2hfZnVhID0gYmlvLT5iaV9ydyAmIChSRVFfRkxVU0ggfCBSRVFfRlVBKTsKKwl1bnNpZ25lZCBpbnQgdXNlX3BsdWcsIHJlcXVlc3RfY291bnQgPSAwOworCXN0cnVjdCBibGtfbWFwX2N0eCBkYXRhOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBtdWx0aXBsZSBoYXJkd2FyZSBxdWV1ZXMsIGp1c3QgZ28gZGlyZWN0bHkgdG8KKwkgKiBvbmUgb2YgdGhvc2UgZm9yIHN5bmMgSU8uCisJICovCisJdXNlX3BsdWcgPSAhaXNfZmx1c2hfZnVhICYmICFpc19zeW5jOworCisJYmxrX3F1ZXVlX2JvdW5jZShxLCAmYmlvKTsKKworCWlmIChiaW9faW50ZWdyaXR5X2VuYWJsZWQoYmlvKSAmJiBiaW9faW50ZWdyaXR5X3ByZXAoYmlvKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRUlPKTsKIAkJcmV0dXJuOwogCX0KIAotCWN0eCA9IGJsa19tcV9nZXRfY3R4KHEpOwotCWhjdHggPSBxLT5tcV9vcHMtPm1hcF9xdWV1ZShxLCBjdHgtPmNwdSk7CisJaWYgKHVzZV9wbHVnICYmICFibGtfcXVldWVfbm9tZXJnZXMocSkgJiYKKwkgICAgYmxrX2F0dGVtcHRfcGx1Z19tZXJnZShxLCBiaW8sICZyZXF1ZXN0X2NvdW50KSkKKwkJcmV0dXJuOwogCi0JaWYgKGlzX3N5bmMpCi0JCXJ3IHw9IFJFUV9TWU5DOwotCXRyYWNlX2Jsb2NrX2dldHJxKHEsIGJpbywgcncpOwotCXJxID0gX19ibGtfbXFfYWxsb2NfcmVxdWVzdChoY3R4LCBHRlBfQVRPTUlDLCBmYWxzZSk7Ci0JaWYgKGxpa2VseShycSkpCi0JCWJsa19tcV9ycV9jdHhfaW5pdChxLCBjdHgsIHJxLCBydyk7Ci0JZWxzZSB7Ci0JCWJsa19tcV9wdXRfY3R4KGN0eCk7Ci0JCXRyYWNlX2Jsb2NrX3NsZWVwcnEocSwgYmlvLCBydyk7Ci0JCXJxID0gYmxrX21xX2FsbG9jX3JlcXVlc3RfcGlubmVkKHEsIHJ3LCBfX0dGUF9XQUlUfEdGUF9BVE9NSUMsCi0JCQkJCQkJZmFsc2UpOwotCQljdHggPSBycS0+bXFfY3R4OwotCQloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgY3R4LT5jcHUpOwotCX0KLQotCWhjdHgtPnF1ZXVlZCsrOworCXJxID0gYmxrX21xX21hcF9yZXF1ZXN0KHEsIGJpbywgJmRhdGEpOwogCiAJaWYgKHVubGlrZWx5KGlzX2ZsdXNoX2Z1YSkpIHsKIAkJYmxrX21xX2Jpb190b19yZXF1ZXN0KHJxLCBiaW8pOwotCQlibGtfbXFfcHV0X2N0eChjdHgpOwogCQlibGtfaW5zZXJ0X2ZsdXNoKHJxKTsKIAkJZ290byBydW5fcXVldWU7CiAJfQpAQCAtOTAxLDMxICsxMzEyLDIzIEBACiAJCQkJdHJhY2VfYmxvY2tfcGx1ZyhxKTsKIAkJCX0KIAkJCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZwbHVnLT5tcV9saXN0KTsKLQkJCWJsa19tcV9wdXRfY3R4KGN0eCk7CisJCQlibGtfbXFfcHV0X2N0eChkYXRhLmN0eCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0KLQlpZiAoKGhjdHgtPmZsYWdzICYgQkxLX01RX0ZfU0hPVUxEX01FUkdFKSAmJgotCSAgICBibGtfbXFfYXR0ZW1wdF9tZXJnZShxLCBjdHgsIGJpbykpCi0JCV9fYmxrX21xX2ZyZWVfcmVxdWVzdChoY3R4LCBjdHgsIHJxKTsKLQllbHNlIHsKLQkJYmxrX21xX2Jpb190b19yZXF1ZXN0KHJxLCBiaW8pOwotCQlfX2Jsa19tcV9pbnNlcnRfcmVxdWVzdChoY3R4LCBycSwgZmFsc2UpOworCWlmICghYmxrX21xX21lcmdlX3F1ZXVlX2lvKGRhdGEuaGN0eCwgZGF0YS5jdHgsIHJxLCBiaW8pKSB7CisJCS8qCisJCSAqIEZvciBhIFNZTkMgcmVxdWVzdCwgc2VuZCBpdCB0byB0aGUgaGFyZHdhcmUgaW1tZWRpYXRlbHkuIEZvcgorCQkgKiBhbiBBU1lOQyByZXF1ZXN0LCBqdXN0IGVuc3VyZSB0aGF0IHdlIHJ1biBpdCBsYXRlciBvbi4gVGhlCisJCSAqIGxhdHRlciBhbGxvd3MgZm9yIG1lcmdpbmcgb3Bwb3J0dW5pdGllcyBhbmQgbW9yZSBlZmZpY2llbnQKKwkJICogZGlzcGF0Y2hpbmcuCisJCSAqLworcnVuX3F1ZXVlOgorCQlibGtfbXFfcnVuX2h3X3F1ZXVlKGRhdGEuaGN0eCwgIWlzX3N5bmMgfHwgaXNfZmx1c2hfZnVhKTsKIAl9CiAKLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLQlibGtfbXFfcHV0X2N0eChjdHgpOwotCi0JLyoKLQkgKiBGb3IgYSBTWU5DIHJlcXVlc3QsIHNlbmQgaXQgdG8gdGhlIGhhcmR3YXJlIGltbWVkaWF0ZWx5LiBGb3IgYW4KLQkgKiBBU1lOQyByZXF1ZXN0LCBqdXN0IGVuc3VyZSB0aGF0IHdlIHJ1biBpdCBsYXRlciBvbi4gVGhlIGxhdHRlcgotCSAqIGFsbG93cyBmb3IgbWVyZ2luZyBvcHBvcnR1bml0aWVzIGFuZCBtb3JlIGVmZmljaWVudCBkaXNwYXRjaGluZy4KLQkgKi8KLXJ1bl9xdWV1ZToKLQlibGtfbXFfcnVuX2h3X3F1ZXVlKGhjdHgsICFpc19zeW5jIHx8IGlzX2ZsdXNoX2Z1YSk7CisJYmxrX21xX3B1dF9jdHgoZGF0YS5jdHgpOwogfQogCiAvKgpAQCAtOTM3LDMyICsxMzQwLDE1MyBAQAogfQogRVhQT1JUX1NZTUJPTChibGtfbXFfbWFwX3F1ZXVlKTsKIAotc3RydWN0IGJsa19tcV9od19jdHggKmJsa19tcV9hbGxvY19zaW5nbGVfaHdfcXVldWUoc3RydWN0IGJsa19tcV9yZWcgKnJlZywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBoY3R4X2luZGV4KQorc3RhdGljIHZvaWQgYmxrX21xX2ZyZWVfcnFfbWFwKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LAorCQlzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCBoY3R4X2lkeCkKIHsKLQlyZXR1cm4ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgYmxrX21xX2h3X2N0eCksCi0JCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIHJlZy0+bnVtYV9ub2RlKTsKLX0KLUVYUE9SVF9TWU1CT0woYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZSk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLXZvaWQgYmxrX21xX2ZyZWVfc2luZ2xlX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAotCQkJCSB1bnNpZ25lZCBpbnQgaGN0eF9pbmRleCkKLXsKLQlrZnJlZShoY3R4KTsKLX0KLUVYUE9SVF9TWU1CT0woYmxrX21xX2ZyZWVfc2luZ2xlX2h3X3F1ZXVlKTsKKwlpZiAodGFncy0+cnFzICYmIHNldC0+b3BzLT5leGl0X3JlcXVlc3QpIHsKKwkJaW50IGk7CiAKLXN0YXRpYyB2b2lkIGJsa19tcV9oY3R4X25vdGlmeSh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3B1KQorCQlmb3IgKGkgPSAwOyBpIDwgdGFncy0+bnJfdGFnczsgaSsrKSB7CisJCQlpZiAoIXRhZ3MtPnJxc1tpXSkKKwkJCQljb250aW51ZTsKKwkJCXNldC0+b3BzLT5leGl0X3JlcXVlc3Qoc2V0LT5kcml2ZXJfZGF0YSwgdGFncy0+cnFzW2ldLAorCQkJCQkJaGN0eF9pZHgsIGkpOworCQl9CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0YWdzLT5wYWdlX2xpc3QpKSB7CisJCXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0YWdzLT5wYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpOworCQlsaXN0X2RlbF9pbml0KCZwYWdlLT5scnUpOworCQlfX2ZyZWVfcGFnZXMocGFnZSwgcGFnZS0+cHJpdmF0ZSk7CisJfQorCisJa2ZyZWUodGFncy0+cnFzKTsKKworCWJsa19tcV9mcmVlX3RhZ3ModGFncyk7Cit9CisKK3N0YXRpYyBzaXplX3Qgb3JkZXJfdG9fc2l6ZSh1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IGJsa19tcV9od19jdHggKmhjdHggPSBkYXRhOworCXJldHVybiAoc2l6ZV90KVBBR0VfU0laRSA8PCBvcmRlcjsKK30KKworc3RhdGljIHN0cnVjdCBibGtfbXFfdGFncyAqYmxrX21xX2luaXRfcnFfbWFwKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LAorCQl1bnNpZ25lZCBpbnQgaGN0eF9pZHgpCit7CisJc3RydWN0IGJsa19tcV90YWdzICp0YWdzOworCXVuc2lnbmVkIGludCBpLCBqLCBlbnRyaWVzX3Blcl9wYWdlLCBtYXhfb3JkZXIgPSA0OworCXNpemVfdCBycV9zaXplLCBsZWZ0OworCisJdGFncyA9IGJsa19tcV9pbml0X3RhZ3Moc2V0LT5xdWV1ZV9kZXB0aCwgc2V0LT5yZXNlcnZlZF90YWdzLAorCQkJCXNldC0+bnVtYV9ub2RlKTsKKwlpZiAoIXRhZ3MpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnRhZ3MtPnBhZ2VfbGlzdCk7CisKKwl0YWdzLT5ycXMgPSBrbWFsbG9jX25vZGUoc2V0LT5xdWV1ZV9kZXB0aCAqIHNpemVvZihzdHJ1Y3QgcmVxdWVzdCAqKSwKKwkJCQkJR0ZQX0tFUk5FTCwgc2V0LT5udW1hX25vZGUpOworCWlmICghdGFncy0+cnFzKSB7CisJCWJsa19tcV9mcmVlX3RhZ3ModGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogcnFfc2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBwbHVzIGRyaXZlciBwYXlsb2FkLCByb3VuZGVkCisJICogdG8gdGhlIGNhY2hlbGluZSBzaXplCisJICovCisJcnFfc2l6ZSA9IHJvdW5kX3VwKHNpemVvZihzdHJ1Y3QgcmVxdWVzdCkgKyBzZXQtPmNtZF9zaXplLAorCQkJCWNhY2hlX2xpbmVfc2l6ZSgpKTsKKwlsZWZ0ID0gcnFfc2l6ZSAqIHNldC0+cXVldWVfZGVwdGg7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2V0LT5xdWV1ZV9kZXB0aDsgKSB7CisJCWludCB0aGlzX29yZGVyID0gbWF4X29yZGVyOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJaW50IHRvX2RvOworCQl2b2lkICpwOworCisJCXdoaWxlIChsZWZ0IDwgb3JkZXJfdG9fc2l6ZSh0aGlzX29yZGVyIC0gMSkgJiYgdGhpc19vcmRlcikKKwkJCXRoaXNfb3JkZXItLTsKKworCQlkbyB7CisJCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShzZXQtPm51bWFfbm9kZSwgR0ZQX0tFUk5FTCwKKwkJCQkJCXRoaXNfb3JkZXIpOworCQkJaWYgKHBhZ2UpCisJCQkJYnJlYWs7CisJCQlpZiAoIXRoaXNfb3JkZXItLSkKKwkJCQlicmVhazsKKwkJCWlmIChvcmRlcl90b19zaXplKHRoaXNfb3JkZXIpIDwgcnFfc2l6ZSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoMSk7CisKKwkJaWYgKCFwYWdlKQorCQkJZ290byBmYWlsOworCisJCXBhZ2UtPnByaXZhdGUgPSB0aGlzX29yZGVyOworCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZ0YWdzLT5wYWdlX2xpc3QpOworCisJCXAgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWVudHJpZXNfcGVyX3BhZ2UgPSBvcmRlcl90b19zaXplKHRoaXNfb3JkZXIpIC8gcnFfc2l6ZTsKKwkJdG9fZG8gPSBtaW4oZW50cmllc19wZXJfcGFnZSwgc2V0LT5xdWV1ZV9kZXB0aCAtIGkpOworCQlsZWZ0IC09IHRvX2RvICogcnFfc2l6ZTsKKwkJZm9yIChqID0gMDsgaiA8IHRvX2RvOyBqKyspIHsKKwkJCXRhZ3MtPnJxc1tpXSA9IHA7CisJCQlpZiAoc2V0LT5vcHMtPmluaXRfcmVxdWVzdCkgeworCQkJCWlmIChzZXQtPm9wcy0+aW5pdF9yZXF1ZXN0KHNldC0+ZHJpdmVyX2RhdGEsCisJCQkJCQl0YWdzLT5ycXNbaV0sIGhjdHhfaWR4LCBpLAorCQkJCQkJc2V0LT5udW1hX25vZGUpKQorCQkJCQlnb3RvIGZhaWw7CisJCQl9CisKKwkJCXAgKz0gcnFfc2l6ZTsKKwkJCWkrKzsKKwkJfQorCX0KKworCXJldHVybiB0YWdzOworCitmYWlsOgorCXByX3dhcm4oIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWVzdHNcbiIsIF9fZnVuY19fKTsKKwlibGtfbXFfZnJlZV9ycV9tYXAoc2V0LCB0YWdzLCBoY3R4X2lkeCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19tcV9mcmVlX2JpdG1hcChzdHJ1Y3QgYmxrX21xX2N0eG1hcCAqYml0bWFwKQoreworCWtmcmVlKGJpdG1hcC0+bWFwKTsKK30KKworc3RhdGljIGludCBibGtfbXFfYWxsb2NfYml0bWFwKHN0cnVjdCBibGtfbXFfY3R4bWFwICpiaXRtYXAsIGludCBub2RlKQoreworCXVuc2lnbmVkIGludCBicHcgPSA4LCB0b3RhbCwgbnVtX21hcHMsIGk7CisKKwliaXRtYXAtPmJpdHNfcGVyX3dvcmQgPSBicHc7CisKKwludW1fbWFwcyA9IEFMSUdOKG5yX2NwdV9pZHMsIGJwdykgLyBicHc7CisJYml0bWFwLT5tYXAgPSBremFsbG9jX25vZGUobnVtX21hcHMgKiBzaXplb2Yoc3RydWN0IGJsa19hbGlnbl9iaXRtYXApLAorCQkJCQlHRlBfS0VSTkVMLCBub2RlKTsKKwlpZiAoIWJpdG1hcC0+bWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJpdG1hcC0+bWFwX3NpemUgPSBudW1fbWFwczsKKworCXRvdGFsID0gbnJfY3B1X2lkczsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX21hcHM7IGkrKykgeworCQliaXRtYXAtPm1hcFtpXS5kZXB0aCA9IG1pbih0b3RhbCwgYml0bWFwLT5iaXRzX3Blcl93b3JkKTsKKwkJdG90YWwgLT0gYml0bWFwLT5tYXBbaV0uZGVwdGg7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmxrX21xX2hjdHhfY3B1X29mZmxpbmUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGludCBjcHUpCit7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBoY3R4LT5xdWV1ZTsKIAlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OwogCUxJU1RfSEVBRCh0bXApOwogCi0JaWYgKGFjdGlvbiAhPSBDUFVfREVBRCAmJiBhY3Rpb24gIT0gQ1BVX0RFQURfRlJPWkVOKQotCQlyZXR1cm47Ci0KIAkvKgogCSAqIE1vdmUgY3R4IGVudHJpZXMgdG8gbmV3IENQVSwgaWYgdGhpcyBvbmUgaXMgZ29pbmcgYXdheS4KIAkgKi8KQEAgLTk3MSwxMiArMTQ5NSwxMiBAQAogCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+cnFfbGlzdCkpIHsKIAkJbGlzdF9zcGxpY2VfaW5pdCgmY3R4LT5ycV9saXN0LCAmdG1wKTsKLQkJY2xlYXJfYml0KGN0eC0+aW5kZXhfaHcsIGhjdHgtPmN0eF9tYXApOworCQlibGtfbXFfaGN0eF9jbGVhcl9wZW5kaW5nKGhjdHgsIGN0eCk7CiAJfQogCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCiAJaWYgKGxpc3RfZW1wdHkoJnRtcCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIE5PVElGWV9PSzsKIAogCWN0eCA9IGJsa19tcV9nZXRfY3R4KHEpOwogCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKQEAgLTk5MywyMTAgKzE1MTcsMTAzIEBACiAJYmxrX21xX2hjdHhfbWFya19wZW5kaW5nKGhjdHgsIGN0eCk7CiAKIAlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLQlibGtfbXFfcHV0X2N0eChjdHgpOwogCiAJYmxrX21xX3J1bl9od19xdWV1ZShoY3R4LCB0cnVlKTsKKwlibGtfbXFfcHV0X2N0eChjdHgpOworCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBpbnQgYmxrX21xX2luaXRfaHdfY29tbWFuZHMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCi0JCQkJICAgaW50ICgqaW5pdCkodm9pZCAqLCBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqLAotCQkJCQlzdHJ1Y3QgcmVxdWVzdCAqLCB1bnNpZ25lZCBpbnQpLAotCQkJCSAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJsa19tcV9oY3R4X2NwdV9vbmxpbmUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGludCBjcHUpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBoY3R4LT5xdWV1ZTsKKwlzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCA9IHEtPnRhZ19zZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGN0eC0+cXVldWVfZGVwdGg7IGkrKykgewotCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBoY3R4LT5ycXNbaV07CisJaWYgKHNldC0+dGFnc1toY3R4LT5xdWV1ZV9udW1dKQorCQlyZXR1cm4gTk9USUZZX09LOwogCi0JCXJldCA9IGluaXQoZGF0YSwgaGN0eCwgcnEsIGkpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfQorCXNldC0+dGFnc1toY3R4LT5xdWV1ZV9udW1dID0gYmxrX21xX2luaXRfcnFfbWFwKHNldCwgaGN0eC0+cXVldWVfbnVtKTsKKwlpZiAoIXNldC0+dGFnc1toY3R4LT5xdWV1ZV9udW1dKQorCQlyZXR1cm4gTk9USUZZX1NUT1A7CiAKLQlyZXR1cm4gcmV0OworCWhjdHgtPnRhZ3MgPSBzZXQtPnRhZ3NbaGN0eC0+cXVldWVfbnVtXTsKKwlyZXR1cm4gTk9USUZZX09LOwogfQogCi1pbnQgYmxrX21xX2luaXRfY29tbWFuZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkgaW50ICgqaW5pdCkodm9pZCAqLCBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqLAotCQkJCQlzdHJ1Y3QgcmVxdWVzdCAqLCB1bnNpZ25lZCBpbnQpLAotCQkJIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJsa19tcV9oY3R4X25vdGlmeSh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHggPSBkYXRhOworCisJaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKQorCQlyZXR1cm4gYmxrX21xX2hjdHhfY3B1X29mZmxpbmUoaGN0eCwgY3B1KTsKKwllbHNlIGlmIChhY3Rpb24gPT0gQ1BVX09OTElORSB8fCBhY3Rpb24gPT0gQ1BVX09OTElORV9GUk9aRU4pCisJCXJldHVybiBibGtfbXFfaGN0eF9jcHVfb25saW5lKGhjdHgsIGNwdSk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgdm9pZCBibGtfbXFfZXhpdF9od19xdWV1ZXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCXN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBpbnQgbnJfcXVldWUpCiB7CiAJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldCA9IDA7CiAKIAlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkgewotCQlyZXQgPSBibGtfbXFfaW5pdF9od19jb21tYW5kcyhoY3R4LCBpbml0LCBkYXRhKTsKLQkJaWYgKHJldCkKKwkJaWYgKGkgPT0gbnJfcXVldWUpCiAJCQlicmVhazsKKworCQlpZiAoc2V0LT5vcHMtPmV4aXRfaGN0eCkKKwkJCXNldC0+b3BzLT5leGl0X2hjdHgoaGN0eCwgaSk7CisKKwkJYmxrX21xX3VucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZoY3R4LT5jcHVfbm90aWZpZXIpOworCQlrZnJlZShoY3R4LT5jdHhzKTsKKwkJYmxrX21xX2ZyZWVfYml0bWFwKCZoY3R4LT5jdHhfbWFwKTsKIAl9CiAKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChibGtfbXFfaW5pdF9jb21tYW5kcyk7Ci0KLXN0YXRpYyB2b2lkIGJsa19tcV9mcmVlX2h3X2NvbW1hbmRzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAotCQkJCSAgICB2b2lkICgqZnJlZSkodm9pZCAqLCBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqLAotCQkJCQlzdHJ1Y3QgcmVxdWVzdCAqLCB1bnNpZ25lZCBpbnQpLAotCQkJCSAgICB2b2lkICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGhjdHgtPnF1ZXVlX2RlcHRoOyBpKyspIHsKLQkJc3RydWN0IHJlcXVlc3QgKnJxID0gaGN0eC0+cnFzW2ldOwotCi0JCWZyZWUoZGF0YSwgaGN0eCwgcnEsIGkpOwotCX0KIH0KIAotdm9pZCBibGtfbXFfZnJlZV9jb21tYW5kcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCSAgdm9pZCAoKmZyZWUpKHZvaWQgKiwgc3RydWN0IGJsa19tcV9od19jdHggKiwKLQkJCQkJc3RydWN0IHJlcXVlc3QgKiwgdW5zaWduZWQgaW50KSwKLQkJCSAgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGJsa19tcV9mcmVlX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkKLQkJYmxrX21xX2ZyZWVfaHdfY29tbWFuZHMoaGN0eCwgZnJlZSwgZGF0YSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGJsa19tcV9mcmVlX2NvbW1hbmRzKTsKLQotc3RhdGljIHZvaWQgYmxrX21xX2ZyZWVfcnFfbWFwKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZoY3R4LT5wYWdlX2xpc3QpKSB7Ci0JCXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZoY3R4LT5wYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlsaXN0X2RlbF9pbml0KCZwYWdlLT5scnUpOwotCQlfX2ZyZWVfcGFnZXMocGFnZSwgcGFnZS0+cHJpdmF0ZSk7CisJcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHsKKwkJZnJlZV9jcHVtYXNrX3ZhcihoY3R4LT5jcHVtYXNrKTsKKwkJa2ZyZWUoaGN0eCk7CiAJfQotCi0Ja2ZyZWUoaGN0eC0+cnFzKTsKLQotCWlmIChoY3R4LT50YWdzKQotCQlibGtfbXFfZnJlZV90YWdzKGhjdHgtPnRhZ3MpOwotfQotCi1zdGF0aWMgc2l6ZV90IG9yZGVyX3RvX3NpemUodW5zaWduZWQgaW50IG9yZGVyKQotewotCXNpemVfdCByZXQgPSBQQUdFX1NJWkU7Ci0KLQl3aGlsZSAob3JkZXItLSkKLQkJcmV0ICo9IDI7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGJsa19tcV9pbml0X3JxX21hcChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKLQkJCSAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF90YWdzLCBpbnQgbm9kZSkKLXsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZW50cmllc19wZXJfcGFnZSwgbWF4X29yZGVyID0gNDsKLQlzaXplX3QgcnFfc2l6ZSwgbGVmdDsKLQotCUlOSVRfTElTVF9IRUFEKCZoY3R4LT5wYWdlX2xpc3QpOwotCi0JaGN0eC0+cnFzID0ga21hbGxvY19ub2RlKGhjdHgtPnF1ZXVlX2RlcHRoICogc2l6ZW9mKHN0cnVjdCByZXF1ZXN0ICopLAotCQkJCQlHRlBfS0VSTkVMLCBub2RlKTsKLQlpZiAoIWhjdHgtPnJxcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKgotCSAqIHJxX3NpemUgaXMgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgcGx1cyBkcml2ZXIgcGF5bG9hZCwgcm91bmRlZAotCSAqIHRvIHRoZSBjYWNoZWxpbmUgc2l6ZQotCSAqLwotCXJxX3NpemUgPSByb3VuZF91cChzaXplb2Yoc3RydWN0IHJlcXVlc3QpICsgaGN0eC0+Y21kX3NpemUsCi0JCQkJY2FjaGVfbGluZV9zaXplKCkpOwotCWxlZnQgPSBycV9zaXplICogaGN0eC0+cXVldWVfZGVwdGg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaGN0eC0+cXVldWVfZGVwdGg7KSB7Ci0JCWludCB0aGlzX29yZGVyID0gbWF4X29yZGVyOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJaW50IHRvX2RvOwotCQl2b2lkICpwOwotCi0JCXdoaWxlIChsZWZ0IDwgb3JkZXJfdG9fc2l6ZSh0aGlzX29yZGVyIC0gMSkgJiYgdGhpc19vcmRlcikKLQkJCXRoaXNfb3JkZXItLTsKLQotCQlkbyB7Ci0JCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMLCB0aGlzX29yZGVyKTsKLQkJCWlmIChwYWdlKQotCQkJCWJyZWFrOwotCQkJaWYgKCF0aGlzX29yZGVyLS0pCi0JCQkJYnJlYWs7Ci0JCQlpZiAob3JkZXJfdG9fc2l6ZSh0aGlzX29yZGVyKSA8IHJxX3NpemUpCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKDEpOwotCi0JCWlmICghcGFnZSkKLQkJCWJyZWFrOwotCi0JCXBhZ2UtPnByaXZhdGUgPSB0aGlzX29yZGVyOwotCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZoY3R4LT5wYWdlX2xpc3QpOwotCi0JCXAgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JCWVudHJpZXNfcGVyX3BhZ2UgPSBvcmRlcl90b19zaXplKHRoaXNfb3JkZXIpIC8gcnFfc2l6ZTsKLQkJdG9fZG8gPSBtaW4oZW50cmllc19wZXJfcGFnZSwgaGN0eC0+cXVldWVfZGVwdGggLSBpKTsKLQkJbGVmdCAtPSB0b19kbyAqIHJxX3NpemU7Ci0JCWZvciAoaiA9IDA7IGogPCB0b19kbzsgaisrKSB7Ci0JCQloY3R4LT5ycXNbaV0gPSBwOwotCQkJYmxrX21xX3JxX2luaXQoaGN0eCwgaGN0eC0+cnFzW2ldKTsKLQkJCXAgKz0gcnFfc2l6ZTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCWlmIChpIDwgKHJlc2VydmVkX3RhZ3MgKyBCTEtfTVFfVEFHX01JTikpCi0JCWdvdG8gZXJyX3JxX21hcDsKLQllbHNlIGlmIChpICE9IGhjdHgtPnF1ZXVlX2RlcHRoKSB7Ci0JCWhjdHgtPnF1ZXVlX2RlcHRoID0gaTsKLQkJcHJfd2FybigiJXM6IHF1ZXVlIGRlcHRoIHNldCB0byAldSBiZWNhdXNlIG9mIGxvdyBtZW1vcnlcbiIsCi0JCQkJCV9fZnVuY19fLCBpKTsKLQl9Ci0KLQloY3R4LT50YWdzID0gYmxrX21xX2luaXRfdGFncyhoY3R4LT5xdWV1ZV9kZXB0aCwgcmVzZXJ2ZWRfdGFncywgbm9kZSk7Ci0JaWYgKCFoY3R4LT50YWdzKSB7Ci1lcnJfcnFfbWFwOgotCQlibGtfbXFfZnJlZV9ycV9tYXAoaGN0eCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJsa19tcV9pbml0X2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkgc3RydWN0IGJsa19tcV9yZWcgKnJlZywgdm9pZCAqZHJpdmVyX2RhdGEpCisJCXN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KQogewogCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OwotCXVuc2lnbmVkIGludCBpLCBqOworCXVuc2lnbmVkIGludCBpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIGhhcmR3YXJlIHF1ZXVlcwogCSAqLwogCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7Ci0JCXVuc2lnbmVkIGludCBudW1fbWFwczsKIAkJaW50IG5vZGU7CiAKIAkJbm9kZSA9IGhjdHgtPm51bWFfbm9kZTsKIAkJaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFKQotCQkJbm9kZSA9IGhjdHgtPm51bWFfbm9kZSA9IHJlZy0+bnVtYV9ub2RlOworCQkJbm9kZSA9IGhjdHgtPm51bWFfbm9kZSA9IHNldC0+bnVtYV9ub2RlOwogCi0JCUlOSVRfREVMQVlFRF9XT1JLKCZoY3R4LT5kZWxheWVkX3dvcmssIGJsa19tcV93b3JrX2ZuKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmhjdHgtPnJ1bl93b3JrLCBibGtfbXFfcnVuX3dvcmtfZm4pOworCQlJTklUX0RFTEFZRURfV09SSygmaGN0eC0+ZGVsYXlfd29yaywgYmxrX21xX2RlbGF5X3dvcmtfZm4pOwogCQlzcGluX2xvY2tfaW5pdCgmaGN0eC0+bG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZoY3R4LT5kaXNwYXRjaCk7CiAJCWhjdHgtPnF1ZXVlID0gcTsKIAkJaGN0eC0+cXVldWVfbnVtID0gaTsKLQkJaGN0eC0+ZmxhZ3MgPSByZWctPmZsYWdzOwotCQloY3R4LT5xdWV1ZV9kZXB0aCA9IHJlZy0+cXVldWVfZGVwdGg7Ci0JCWhjdHgtPmNtZF9zaXplID0gcmVnLT5jbWRfc2l6ZTsKKwkJaGN0eC0+ZmxhZ3MgPSBzZXQtPmZsYWdzOworCQloY3R4LT5jbWRfc2l6ZSA9IHNldC0+Y21kX3NpemU7CiAKIAkJYmxrX21xX2luaXRfY3B1X25vdGlmaWVyKCZoY3R4LT5jcHVfbm90aWZpZXIsCiAJCQkJCQlibGtfbXFfaGN0eF9ub3RpZnksIGhjdHgpOwogCQlibGtfbXFfcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZoY3R4LT5jcHVfbm90aWZpZXIpOwogCi0JCWlmIChibGtfbXFfaW5pdF9ycV9tYXAoaGN0eCwgcmVnLT5yZXNlcnZlZF90YWdzLCBub2RlKSkKLQkJCWJyZWFrOworCQloY3R4LT50YWdzID0gc2V0LT50YWdzW2ldOwogCiAJCS8qCiAJCSAqIEFsbG9jYXRlIHNwYWNlIGZvciBhbGwgcG9zc2libGUgY3B1cyB0byBhdm9pZCBhbGxvY2F0aW9uIGluCkBAIC0xMjA3LDE3ICsxNjI0LDEzIEBACiAJCWlmICghaGN0eC0+Y3R4cykKIAkJCWJyZWFrOwogCi0JCW51bV9tYXBzID0gQUxJR04obnJfY3B1X2lkcywgQklUU19QRVJfTE9ORykgLyBCSVRTX1BFUl9MT05HOwotCQloY3R4LT5jdHhfbWFwID0ga3phbGxvY19ub2RlKG51bV9tYXBzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAotCQkJCQkJR0ZQX0tFUk5FTCwgbm9kZSk7Ci0JCWlmICghaGN0eC0+Y3R4X21hcCkKKwkJaWYgKGJsa19tcV9hbGxvY19iaXRtYXAoJmhjdHgtPmN0eF9tYXAsIG5vZGUpKQogCQkJYnJlYWs7CiAKLQkJaGN0eC0+bnJfY3R4X21hcCA9IG51bV9tYXBzOwogCQloY3R4LT5ucl9jdHggPSAwOwogCi0JCWlmIChyZWctPm9wcy0+aW5pdF9oY3R4ICYmCi0JCSAgICByZWctPm9wcy0+aW5pdF9oY3R4KGhjdHgsIGRyaXZlcl9kYXRhLCBpKSkKKwkJaWYgKHNldC0+b3BzLT5pbml0X2hjdHggJiYKKwkJICAgIHNldC0+b3BzLT5pbml0X2hjdHgoaGN0eCwgc2V0LT5kcml2ZXJfZGF0YSwgaSkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTEyMjcsMTcgKzE2NDAsNyBAQAogCS8qCiAJICogSW5pdCBmYWlsZWQKIAkgKi8KLQlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaikgewotCQlpZiAoaSA9PSBqKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHJlZy0+b3BzLT5leGl0X2hjdHgpCi0JCQlyZWctPm9wcy0+ZXhpdF9oY3R4KGhjdHgsIGopOwotCi0JCWJsa19tcV91bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaGN0eC0+Y3B1X25vdGlmaWVyKTsKLQkJYmxrX21xX2ZyZWVfcnFfbWFwKGhjdHgpOwotCQlrZnJlZShoY3R4LT5jdHhzKTsKLQl9CisJYmxrX21xX2V4aXRfaHdfcXVldWVzKHEsIHNldCwgaSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTEyNTgsMTIgKzE2NjEsMTMgQEAKIAkJX19jdHgtPnF1ZXVlID0gcTsKIAogCQkvKiBJZiB0aGUgY3B1IGlzbid0IG9ubGluZSwgdGhlIGNwdSBpcyBtYXBwZWQgdG8gZmlyc3QgaGN0eCAqLwotCQloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgaSk7Ci0JCWhjdHgtPm5yX2N0eCsrOwotCiAJCWlmICghY3B1X29ubGluZShpKSkKIAkJCWNvbnRpbnVlOwogCisJCWhjdHggPSBxLT5tcV9vcHMtPm1hcF9xdWV1ZShxLCBpKTsKKwkJY3B1bWFza19zZXRfY3B1KGksIGhjdHgtPmNwdW1hc2spOworCQloY3R4LT5ucl9jdHgrKzsKKwogCQkvKgogCQkgKiBTZXQgbG9jYWwgbm9kZSwgSUZGIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBodyBxdWV1ZS4gSWYKIAkJICogbm90LCB3ZSByZW1haW4gb24gdGhlIGhvbWUgbm9kZSBvZiB0aGUgZGV2aWNlCkBAIC0xMjgwLDYgKzE2ODQsNyBAQAogCXN0cnVjdCBibGtfbXFfY3R4ICpjdHg7CiAKIAlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkgeworCQljcHVtYXNrX2NsZWFyKGhjdHgtPmNwdW1hc2spOwogCQloY3R4LT5ucl9jdHggPSAwOwogCX0KIApAQCAtMTI4OCwxMTUgKzE2OTMsMjA4IEBACiAJICovCiAJcXVldWVfZm9yX2VhY2hfY3R4KHEsIGN0eCwgaSkgewogCQkvKiBJZiB0aGUgY3B1IGlzbid0IG9ubGluZSwgdGhlIGNwdSBpcyBtYXBwZWQgdG8gZmlyc3QgaGN0eCAqLworCQlpZiAoIWNwdV9vbmxpbmUoaSkpCisJCQljb250aW51ZTsKKwogCQloY3R4ID0gcS0+bXFfb3BzLT5tYXBfcXVldWUocSwgaSk7CisJCWNwdW1hc2tfc2V0X2NwdShpLCBoY3R4LT5jcHVtYXNrKTsKIAkJY3R4LT5pbmRleF9odyA9IGhjdHgtPm5yX2N0eDsKIAkJaGN0eC0+Y3R4c1toY3R4LT5ucl9jdHgrK10gPSBjdHg7CiAJfQorCisJcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHsKKwkJLyoKKwkJICogSWYgbm90IHNvZnR3YXJlIHF1ZXVlcyBhcmUgbWFwcGVkIHRvIHRoaXMgaGFyZHdhcmUgcXVldWUsCisJCSAqIGRpc2FibGUgaXQgYW5kIGZyZWUgdGhlIHJlcXVlc3QgZW50cmllcworCQkgKi8KKwkJaWYgKCFoY3R4LT5ucl9jdHgpIHsKKwkJCXN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0ID0gcS0+dGFnX3NldDsKKworCQkJaWYgKHNldC0+dGFnc1tpXSkgeworCQkJCWJsa19tcV9mcmVlX3JxX21hcChzZXQsIHNldC0+dGFnc1tpXSwgaSk7CisJCQkJc2V0LT50YWdzW2ldID0gTlVMTDsKKwkJCQloY3R4LT50YWdzID0gTlVMTDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBiYXRjaCByb3VuZHJvYmluIGNvdW50cworCQkgKi8KKwkJaGN0eC0+bmV4dF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGhjdHgtPmNwdW1hc2spOworCQloY3R4LT5uZXh0X2NwdV9iYXRjaCA9IEJMS19NUV9DUFVfV09SS19CQVRDSDsKKwl9CiB9CiAKLXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpibGtfbXFfaW5pdF9xdWV1ZShzdHJ1Y3QgYmxrX21xX3JlZyAqcmVnLAotCQkJCQl2b2lkICpkcml2ZXJfZGF0YSkKK3N0YXRpYyB2b2lkIGJsa19tcV91cGRhdGVfdGFnX3NldF9kZXB0aChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCkKK3sKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKwlib29sIHNoYXJlZDsKKwlpbnQgaTsKKworCWlmIChzZXQtPnRhZ19saXN0Lm5leHQgPT0gc2V0LT50YWdfbGlzdC5wcmV2KQorCQlzaGFyZWQgPSBmYWxzZTsKKwllbHNlCisJCXNoYXJlZCA9IHRydWU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZzZXQtPnRhZ19saXN0LCB0YWdfc2V0X2xpc3QpIHsKKwkJYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTsKKworCQlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkgeworCQkJaWYgKHNoYXJlZCkKKwkJCQloY3R4LT5mbGFncyB8PSBCTEtfTVFfRl9UQUdfU0hBUkVEOworCQkJZWxzZQorCQkJCWhjdHgtPmZsYWdzICY9IH5CTEtfTVFfRl9UQUdfU0hBUkVEOworCQl9CisJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsa19tcV9kZWxfcXVldWVfdGFnX3NldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCA9IHEtPnRhZ19zZXQ7CisKKwlibGtfbXFfZnJlZXplX3F1ZXVlKHEpOworCisJbXV0ZXhfbG9jaygmc2V0LT50YWdfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZxLT50YWdfc2V0X2xpc3QpOworCWJsa19tcV91cGRhdGVfdGFnX3NldF9kZXB0aChzZXQpOworCW11dGV4X3VubG9jaygmc2V0LT50YWdfbGlzdF9sb2NrKTsKKworCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxKTsKK30KKworc3RhdGljIHZvaWQgYmxrX21xX2FkZF9xdWV1ZV90YWdfc2V0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LAorCQkJCSAgICAgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJcS0+dGFnX3NldCA9IHNldDsKKworCW11dGV4X2xvY2soJnNldC0+dGFnX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcS0+dGFnX3NldF9saXN0LCAmc2V0LT50YWdfbGlzdCk7CisJYmxrX21xX3VwZGF0ZV90YWdfc2V0X2RlcHRoKHNldCk7CisJbXV0ZXhfdW5sb2NrKCZzZXQtPnRhZ19saXN0X2xvY2spOworfQorCitzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX21xX2luaXRfcXVldWUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGJsa19tcV9od19jdHggKipoY3R4czsKIAlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCXVuc2lnbmVkIGludCAqbWFwOwogCWludCBpOwogCi0JaWYgKCFyZWctPm5yX2h3X3F1ZXVlcyB8fAotCSAgICAhcmVnLT5vcHMtPnF1ZXVlX3JxIHx8ICFyZWctPm9wcy0+bWFwX3F1ZXVlIHx8Ci0JICAgICFyZWctPm9wcy0+YWxsb2NfaGN0eCB8fCAhcmVnLT5vcHMtPmZyZWVfaGN0eCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQlpZiAoIXJlZy0+cXVldWVfZGVwdGgpCi0JCXJlZy0+cXVldWVfZGVwdGggPSBCTEtfTVFfTUFYX0RFUFRIOwotCWVsc2UgaWYgKHJlZy0+cXVldWVfZGVwdGggPiBCTEtfTVFfTUFYX0RFUFRIKSB7Ci0JCXByX2VycigiYmxrLW1xOiBxdWV1ZWRlcHRoIHRvbyBsYXJnZSAoJXUpXG4iLCByZWctPnF1ZXVlX2RlcHRoKTsKLQkJcmVnLT5xdWV1ZV9kZXB0aCA9IEJMS19NUV9NQVhfREVQVEg7Ci0JfQotCi0JaWYgKHJlZy0+cXVldWVfZGVwdGggPCAocmVnLT5yZXNlcnZlZF90YWdzICsgQkxLX01RX1RBR19NSU4pKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQogCWN0eCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgYmxrX21xX2N0eCk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JaGN0eHMgPSBrbWFsbG9jX25vZGUocmVnLT5ucl9od19xdWV1ZXMgKiBzaXplb2YoKmhjdHhzKSwgR0ZQX0tFUk5FTCwKLQkJCXJlZy0+bnVtYV9ub2RlKTsKKwloY3R4cyA9IGttYWxsb2Nfbm9kZShzZXQtPm5yX2h3X3F1ZXVlcyAqIHNpemVvZigqaGN0eHMpLCBHRlBfS0VSTkVMLAorCQkJc2V0LT5udW1hX25vZGUpOwogCiAJaWYgKCFoY3R4cykKIAkJZ290byBlcnJfcGVyY3B1OwogCi0JZm9yIChpID0gMDsgaSA8IHJlZy0+bnJfaHdfcXVldWVzOyBpKyspIHsKLQkJaGN0eHNbaV0gPSByZWctPm9wcy0+YWxsb2NfaGN0eChyZWcsIGkpOworCW1hcCA9IGJsa19tcV9tYWtlX3F1ZXVlX21hcChzZXQpOworCWlmICghbWFwKQorCQlnb3RvIGVycl9tYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2V0LT5ucl9od19xdWV1ZXM7IGkrKykgeworCQlpbnQgbm9kZSA9IGJsa19tcV9od19xdWV1ZV90b19ub2RlKG1hcCwgaSk7CisKKwkJaGN0eHNbaV0gPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBibGtfbXFfaHdfY3R4KSwKKwkJCQkJR0ZQX0tFUk5FTCwgbm9kZSk7CiAJCWlmICghaGN0eHNbaV0pCiAJCQlnb3RvIGVycl9oY3R4czsKIAotCQloY3R4c1tpXS0+bnVtYV9ub2RlID0gTlVNQV9OT19OT0RFOworCQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmaGN0eHNbaV0tPmNwdW1hc2ssIEdGUF9LRVJORUwpKQorCQkJZ290byBlcnJfaGN0eHM7CisKKwkJYXRvbWljX3NldCgmaGN0eHNbaV0tPm5yX2FjdGl2ZSwgMCk7CisJCWhjdHhzW2ldLT5udW1hX25vZGUgPSBub2RlOwogCQloY3R4c1tpXS0+cXVldWVfbnVtID0gaTsKIAl9CiAKLQlxID0gYmxrX2FsbG9jX3F1ZXVlX25vZGUoR0ZQX0tFUk5FTCwgcmVnLT5udW1hX25vZGUpOworCXEgPSBibGtfYWxsb2NfcXVldWVfbm9kZShHRlBfS0VSTkVMLCBzZXQtPm51bWFfbm9kZSk7CiAJaWYgKCFxKQogCQlnb3RvIGVycl9oY3R4czsKIAotCXEtPm1xX21hcCA9IGJsa19tcV9tYWtlX3F1ZXVlX21hcChyZWcpOwotCWlmICghcS0+bXFfbWFwKQorCWlmIChwZXJjcHVfY291bnRlcl9pbml0KCZxLT5tcV91c2FnZV9jb3VudGVyLCAwKSkKIAkJZ290byBlcnJfbWFwOwogCiAJc2V0dXBfdGltZXIoJnEtPnRpbWVvdXQsIGJsa19tcV9ycV90aW1lciwgKHVuc2lnbmVkIGxvbmcpIHEpOwogCWJsa19xdWV1ZV9ycV90aW1lb3V0KHEsIDMwMDAwKTsKIAogCXEtPm5yX3F1ZXVlcyA9IG5yX2NwdV9pZHM7Ci0JcS0+bnJfaHdfcXVldWVzID0gcmVnLT5ucl9od19xdWV1ZXM7CisJcS0+bnJfaHdfcXVldWVzID0gc2V0LT5ucl9od19xdWV1ZXM7CisJcS0+bXFfbWFwID0gbWFwOwogCiAJcS0+cXVldWVfY3R4ID0gY3R4OwogCXEtPnF1ZXVlX2h3X2N0eCA9IGhjdHhzOwogCi0JcS0+bXFfb3BzID0gcmVnLT5vcHM7CisJcS0+bXFfb3BzID0gc2V0LT5vcHM7CiAJcS0+cXVldWVfZmxhZ3MgfD0gUVVFVUVfRkxBR19NUV9ERUZBVUxUOwogCisJaWYgKCEoc2V0LT5mbGFncyAmIEJMS19NUV9GX1NHX01FUkdFKSkKKwkJcS0+cXVldWVfZmxhZ3MgfD0gMSA8PCBRVUVVRV9GTEFHX05PX1NHX01FUkdFOworCiAJcS0+c2dfcmVzZXJ2ZWRfc2l6ZSA9IElOVF9NQVg7CiAKLQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHEsIGJsa19tcV9tYWtlX3JlcXVlc3QpOwotCWJsa19xdWV1ZV9ycV90aW1lZF9vdXQocSwgcmVnLT5vcHMtPnRpbWVvdXQpOwotCWlmIChyZWctPnRpbWVvdXQpCi0JCWJsa19xdWV1ZV9ycV90aW1lb3V0KHEsIHJlZy0+dGltZW91dCk7CisJSU5JVF9XT1JLKCZxLT5yZXF1ZXVlX3dvcmssIGJsa19tcV9yZXF1ZXVlX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZxLT5yZXF1ZXVlX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZxLT5yZXF1ZXVlX2xvY2spOwogCi0JaWYgKHJlZy0+b3BzLT5jb21wbGV0ZSkKLQkJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShxLCByZWctPm9wcy0+Y29tcGxldGUpOworCWlmIChxLT5ucl9od19xdWV1ZXMgPiAxKQorCQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHEsIGJsa19tcV9tYWtlX3JlcXVlc3QpOworCWVsc2UKKwkJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChxLCBibGtfc3FfbWFrZV9yZXF1ZXN0KTsKKworCWJsa19xdWV1ZV9ycV90aW1lZF9vdXQocSwgYmxrX21xX3JxX3RpbWVkX291dCk7CisJaWYgKHNldC0+dGltZW91dCkKKwkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQocSwgc2V0LT50aW1lb3V0KTsKKworCS8qCisJICogRG8gdGhpcyBhZnRlciBibGtfcXVldWVfbWFrZV9yZXF1ZXN0KCkgb3ZlcnJpZGVzIGl0Li4uCisJICovCisJcS0+bnJfcmVxdWVzdHMgPSBzZXQtPnF1ZXVlX2RlcHRoOworCisJaWYgKHNldC0+b3BzLT5jb21wbGV0ZSkKKwkJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShxLCBzZXQtPm9wcy0+Y29tcGxldGUpOwogCiAJYmxrX21xX2luaXRfZmx1c2gocSk7Ci0JYmxrX21xX2luaXRfY3B1X3F1ZXVlcyhxLCByZWctPm5yX2h3X3F1ZXVlcyk7CisJYmxrX21xX2luaXRfY3B1X3F1ZXVlcyhxLCBzZXQtPm5yX2h3X3F1ZXVlcyk7CiAKLQlxLT5mbHVzaF9ycSA9IGt6YWxsb2Mocm91bmRfdXAoc2l6ZW9mKHN0cnVjdCByZXF1ZXN0KSArIHJlZy0+Y21kX3NpemUsCi0JCQkJY2FjaGVfbGluZV9zaXplKCkpLCBHRlBfS0VSTkVMKTsKKwlxLT5mbHVzaF9ycSA9IGt6YWxsb2Mocm91bmRfdXAoc2l6ZW9mKHN0cnVjdCByZXF1ZXN0KSArCisJCQkJc2V0LT5jbWRfc2l6ZSwgY2FjaGVfbGluZV9zaXplKCkpLAorCQkJCUdGUF9LRVJORUwpOwogCWlmICghcS0+Zmx1c2hfcnEpCiAJCWdvdG8gZXJyX2h3OwogCi0JaWYgKGJsa19tcV9pbml0X2h3X3F1ZXVlcyhxLCByZWcsIGRyaXZlcl9kYXRhKSkKKwlpZiAoYmxrX21xX2luaXRfaHdfcXVldWVzKHEsIHNldCkpCiAJCWdvdG8gZXJyX2ZsdXNoX3JxOwogCi0JYmxrX21xX21hcF9zd3F1ZXVlKHEpOwotCiAJbXV0ZXhfbG9jaygmYWxsX3FfbXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJnEtPmFsbF9xX25vZGUsICZhbGxfcV9saXN0KTsKIAltdXRleF91bmxvY2soJmFsbF9xX211dGV4KTsKIAorCWJsa19tcV9hZGRfcXVldWVfdGFnX3NldChzZXQsIHEpOworCisJYmxrX21xX21hcF9zd3F1ZXVlKHEpOworCiAJcmV0dXJuIHE7CiAKIGVycl9mbHVzaF9ycToKIAlrZnJlZShxLT5mbHVzaF9ycSk7CiBlcnJfaHc6Ci0Ja2ZyZWUocS0+bXFfbWFwKTsKLWVycl9tYXA6CiAJYmxrX2NsZWFudXBfcXVldWUocSk7CiBlcnJfaGN0eHM6Ci0JZm9yIChpID0gMDsgaSA8IHJlZy0+bnJfaHdfcXVldWVzOyBpKyspIHsKKwlrZnJlZShtYXApOworCWZvciAoaSA9IDA7IGkgPCBzZXQtPm5yX2h3X3F1ZXVlczsgaSsrKSB7CiAJCWlmICghaGN0eHNbaV0pCiAJCQlicmVhazsKLQkJcmVnLT5vcHMtPmZyZWVfaGN0eChoY3R4c1tpXSwgaSk7CisJCWZyZWVfY3B1bWFza192YXIoaGN0eHNbaV0tPmNwdW1hc2spOworCQlrZnJlZShoY3R4c1tpXSk7CiAJfQorZXJyX21hcDoKIAlrZnJlZShoY3R4cyk7CiBlcnJfcGVyY3B1OgogCWZyZWVfcGVyY3B1KGN0eCk7CkBAIC0xNDA2LDE4ICsxOTA0LDE0IEBACiAKIHZvaWQgYmxrX21xX2ZyZWVfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0Jc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7Ci0JaW50IGk7CisJc3RydWN0IGJsa19tcV90YWdfc2V0CSpzZXQgPSBxLT50YWdfc2V0OwogCi0JcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHsKLQkJa2ZyZWUoaGN0eC0+Y3R4X21hcCk7Ci0JCWtmcmVlKGhjdHgtPmN0eHMpOwotCQlibGtfbXFfZnJlZV9ycV9tYXAoaGN0eCk7Ci0JCWJsa19tcV91bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaGN0eC0+Y3B1X25vdGlmaWVyKTsKLQkJaWYgKHEtPm1xX29wcy0+ZXhpdF9oY3R4KQotCQkJcS0+bXFfb3BzLT5leGl0X2hjdHgoaGN0eCwgaSk7Ci0JCXEtPm1xX29wcy0+ZnJlZV9oY3R4KGhjdHgsIGkpOwotCX0KKwlibGtfbXFfZGVsX3F1ZXVlX3RhZ19zZXQocSk7CisKKwlibGtfbXFfZXhpdF9od19xdWV1ZXMocSwgc2V0LCBzZXQtPm5yX2h3X3F1ZXVlcyk7CisJYmxrX21xX2ZyZWVfaHdfcXVldWVzKHEsIHNldCk7CisKKwlwZXJjcHVfY291bnRlcl9kZXN0cm95KCZxLT5tcV91c2FnZV9jb3VudGVyKTsKIAogCWZyZWVfcGVyY3B1KHEtPnF1ZXVlX2N0eCk7CiAJa2ZyZWUocS0+cXVldWVfaHdfY3R4KTsKQEAgLTE0MzcsNiArMTkzMSw4IEBACiB7CiAJYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTsKIAorCWJsa19tcV9zeXNmc191bnJlZ2lzdGVyKHEpOworCiAJYmxrX21xX3VwZGF0ZV9xdWV1ZV9tYXAocS0+bXFfbWFwLCBxLT5ucl9od19xdWV1ZXMpOwogCiAJLyoKQEAgLTE0NDcsNiArMTk0Myw4IEBACiAKIAlibGtfbXFfbWFwX3N3cXVldWUocSk7CiAKKwlibGtfbXFfc3lzZnNfcmVnaXN0ZXIocSk7CisKIAlibGtfbXFfdW5mcmVlemVfcXVldWUocSk7CiB9CiAKQEAgLTE0NTYsMTAgKzE5NTQsMTAgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAogCS8qCi0JICogQmVmb3JlIG5ldyBtYXBwaW5nIGlzIGVzdGFibGlzaGVkLCBob3RhZGRlZCBjcHUgbWlnaHQgYWxyZWFkeSBzdGFydAotCSAqIGhhbmRsaW5nIHJlcXVlc3RzLiBUaGlzIGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgYXMgd2UgbWFwIG9mZmxpbmUKLQkgKiBDUFVzIHRvIGZpcnN0IGhhcmR3YXJlIHF1ZXVlLiBXZSB3aWxsIHJlLWluaXQgcXVldWUgYmVsb3cgdG8gZ2V0Ci0JICogb3B0aW1hbCBzZXR0aW5ncy4KKwkgKiBCZWZvcmUgbmV3IG1hcHBpbmdzIGFyZSBlc3RhYmxpc2hlZCwgaG90YWRkZWQgY3B1IG1pZ2h0IGFscmVhZHkKKwkgKiBzdGFydCBoYW5kbGluZyByZXF1ZXN0cy4gVGhpcyBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIGFzIHdlIG1hcAorCSAqIG9mZmxpbmUgQ1BVcyB0byBmaXJzdCBoYXJkd2FyZSBxdWV1ZS4gV2Ugd2lsbCByZS1pbml0IHRoZSBxdWV1ZQorCSAqIGJlbG93IHRvIGdldCBvcHRpbWFsIHNldHRpbmdzLgogCSAqLwogCWlmIChhY3Rpb24gIT0gQ1BVX0RFQUQgJiYgYWN0aW9uICE9IENQVV9ERUFEX0ZST1pFTiAmJgogCSAgICBhY3Rpb24gIT0gQ1BVX09OTElORSAmJiBhY3Rpb24gIT0gQ1BVX09OTElORV9GUk9aRU4pCkBAIC0xNDcyLDYgKzE5NzAsODEgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCitpbnQgYmxrX21xX2FsbG9jX3RhZ19zZXQoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpCit7CisJaW50IGk7CisKKwlpZiAoIXNldC0+bnJfaHdfcXVldWVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXNldC0+cXVldWVfZGVwdGggfHwgc2V0LT5xdWV1ZV9kZXB0aCA+IEJMS19NUV9NQVhfREVQVEgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzZXQtPnF1ZXVlX2RlcHRoIDwgc2V0LT5yZXNlcnZlZF90YWdzICsgQkxLX01RX1RBR19NSU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzZXQtPm5yX2h3X3F1ZXVlcyB8fCAhc2V0LT5vcHMtPnF1ZXVlX3JxIHx8ICFzZXQtPm9wcy0+bWFwX3F1ZXVlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCisJc2V0LT50YWdzID0ga21hbGxvY19ub2RlKHNldC0+bnJfaHdfcXVldWVzICoKKwkJCQkgc2l6ZW9mKHN0cnVjdCBibGtfbXFfdGFncyAqKSwKKwkJCQkgR0ZQX0tFUk5FTCwgc2V0LT5udW1hX25vZGUpOworCWlmICghc2V0LT50YWdzKQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBzZXQtPm5yX2h3X3F1ZXVlczsgaSsrKSB7CisJCXNldC0+dGFnc1tpXSA9IGJsa19tcV9pbml0X3JxX21hcChzZXQsIGkpOworCQlpZiAoIXNldC0+dGFnc1tpXSkKKwkJCWdvdG8gb3V0X3Vud2luZDsKKwl9CisKKwltdXRleF9pbml0KCZzZXQtPnRhZ19saXN0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzZXQtPnRhZ19saXN0KTsKKworCXJldHVybiAwOworCitvdXRfdW53aW5kOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJYmxrX21xX2ZyZWVfcnFfbWFwKHNldCwgc2V0LT50YWdzW2ldLCBpKTsKK291dDoKKwlyZXR1cm4gLUVOT01FTTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX21xX2FsbG9jX3RhZ19zZXQpOworCit2b2lkIGJsa19tcV9mcmVlX3RhZ19zZXQoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2V0LT5ucl9od19xdWV1ZXM7IGkrKykgeworCQlpZiAoc2V0LT50YWdzW2ldKQorCQkJYmxrX21xX2ZyZWVfcnFfbWFwKHNldCwgc2V0LT50YWdzW2ldLCBpKTsKKwl9CisKKwlrZnJlZShzZXQtPnRhZ3MpOworfQorRVhQT1JUX1NZTUJPTChibGtfbXFfZnJlZV90YWdfc2V0KTsKKworaW50IGJsa19tcV91cGRhdGVfbnJfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBucikKK3sKKwlzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCA9IHEtPnRhZ19zZXQ7CisJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CisJaW50IGksIHJldDsKKworCWlmICghc2V0IHx8IG5yID4gc2V0LT5xdWV1ZV9kZXB0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSAwOworCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7CisJCXJldCA9IGJsa19tcV90YWdfdXBkYXRlX2RlcHRoKGhjdHgtPnRhZ3MsIG5yKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCWlmICghcmV0KQorCQlxLT5ucl9yZXF1ZXN0cyA9IG5yOworCisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBibGtfbXFfZGlzYWJsZV9ob3RwbHVnKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmYWxsX3FfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmggYi9ibG9jay9ibGstbXEuaAppbmRleCBlYmJlNmJhLi5kZTdiM2JiIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuaAorKysgYi9ibG9jay9ibGstbXEuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgSU5UX0JMS19NUV9ICiAjZGVmaW5lIElOVF9CTEtfTVFfSAogCitzdHJ1Y3QgYmxrX21xX3RhZ19zZXQ7CisKIHN0cnVjdCBibGtfbXFfY3R4IHsKIAlzdHJ1Y3QgewogCQlzcGlubG9ja190CQlsb2NrOwpAQCAtOSw3ICsxMSw4IEBACiAKIAl1bnNpZ25lZCBpbnQJCWNwdTsKIAl1bnNpZ25lZCBpbnQJCWluZGV4X2h3OwotCXVuc2lnbmVkIGludAkJaXBpX3JlZGlyZWN0OworCisJdW5zaWduZWQgaW50CQlsYXN0X3RhZyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogaW5jcmVtZW50ZWQgYXQgZGlzcGF0Y2ggdGltZSAqLwogCXVuc2lnbmVkIGxvbmcJCXJxX2Rpc3BhdGNoZWRbMl07CkBAIC0yMCwyMSArMjMsMjMgQEAKIAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpxdWV1ZTsKIAlzdHJ1Y3Qga29iamVjdAkJa29iajsKLX07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIHZvaWQgX19ibGtfbXFfY29tcGxldGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogdm9pZCBibGtfbXFfcnVuX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBib29sIGFzeW5jKTsKIHZvaWQgYmxrX21xX2luaXRfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogdm9pZCBibGtfbXFfZHJhaW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogdm9pZCBibGtfbXFfZnJlZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci12b2lkIGJsa19tcV9ycV9pbml0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwordm9pZCBibGtfbXFfY2xvbmVfZmx1c2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqZmx1c2hfcnEsCisJCXN0cnVjdCByZXF1ZXN0ICpvcmlnX3JxKTsKK2ludCBibGtfbXFfdXBkYXRlX25yX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbnIpOwogCiAvKgogICogQ1BVIGhvdHBsdWcgaGVscGVycwogICovCiBzdHJ1Y3QgYmxrX21xX2NwdV9ub3RpZmllcjsKIHZvaWQgYmxrX21xX2luaXRfY3B1X25vdGlmaWVyKHN0cnVjdCBibGtfbXFfY3B1X25vdGlmaWVyICpub3RpZmllciwKLQkJCSAgICAgIHZvaWQgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpLAorCQkJICAgICAgaW50ICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KSwKIAkJCSAgICAgIHZvaWQgKmRhdGEpOwogdm9pZCBibGtfbXFfcmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBibGtfbXFfY3B1X25vdGlmaWVyICpub3RpZmllcik7CiB2b2lkIGJsa19tcV91bnJlZ2lzdGVyX2NwdV9ub3RpZmllcihzdHJ1Y3QgYmxrX21xX2NwdV9ub3RpZmllciAqbm90aWZpZXIpOwpAQCAtNDUsMTAgKzUwLDIzIEBACiAvKgogICogQ1BVIC0+IHF1ZXVlIG1hcHBpbmdzCiAgKi8KLXN0cnVjdCBibGtfbXFfcmVnOwotZXh0ZXJuIHVuc2lnbmVkIGludCAqYmxrX21xX21ha2VfcXVldWVfbWFwKHN0cnVjdCBibGtfbXFfcmVnICpyZWcpOworZXh0ZXJuIHVuc2lnbmVkIGludCAqYmxrX21xX21ha2VfcXVldWVfbWFwKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KTsKIGV4dGVybiBpbnQgYmxrX21xX3VwZGF0ZV9xdWV1ZV9tYXAodW5zaWduZWQgaW50ICptYXAsIHVuc2lnbmVkIGludCBucl9xdWV1ZXMpOworZXh0ZXJuIGludCBibGtfbXFfaHdfcXVldWVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgKm1hcCwgdW5zaWduZWQgaW50KTsKIAotdm9pZCBibGtfbXFfYWRkX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICpycSk7CisvKgorICogc3lzZnMgaGVscGVycworICovCitleHRlcm4gaW50IGJsa19tcV9zeXNmc19yZWdpc3RlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBibGtfbXFfc3lzZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CisKKy8qCisgKiBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBzcGFyc2VyIGJpdG1hcCwgYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3ByZWFkCisgKiB0aGUgYml0cyBvdmVyIG1vcmUgY2FjaGVsaW5lcy4KKyAqLworc3RydWN0IGJsa19hbGlnbl9iaXRtYXAgeworCXVuc2lnbmVkIGxvbmcgd29yZDsKKwl1bnNpZ25lZCBsb25nIGRlcHRoOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggNzUwMGY4Ny4uMjMzMjFmYiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTQ4LDExICs0OCwxMCBAQAogc3RhdGljIHNzaXplX3QKIHF1ZXVlX3JlcXVlc3RzX3N0b3JlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHJlcXVlc3RfbGlzdCAqcmw7CiAJdW5zaWduZWQgbG9uZyBucjsKLQlpbnQgcmV0OworCWludCByZXQsIGVycjsKIAotCWlmICghcS0+cmVxdWVzdF9mbikKKwlpZiAoIXEtPnJlcXVlc3RfZm4gJiYgIXEtPm1xX29wcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBxdWV1ZV92YXJfc3RvcmUoJm5yLCBwYWdlLCBjb3VudCk7CkBAIC02Miw0MCArNjEsMTQgQEAKIAlpZiAobnIgPCBCTEtERVZfTUlOX1JRKQogCQluciA9IEJMS0RFVl9NSU5fUlE7CiAKLQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCXEtPm5yX3JlcXVlc3RzID0gbnI7Ci0JYmxrX3F1ZXVlX2Nvbmdlc3Rpb25fdGhyZXNob2xkKHEpOworCWlmIChxLT5yZXF1ZXN0X2ZuKQorCQllcnIgPSBibGtfdXBkYXRlX25yX3JlcXVlc3RzKHEsIG5yKTsKKwllbHNlCisJCWVyciA9IGJsa19tcV91cGRhdGVfbnJfcmVxdWVzdHMocSwgbnIpOwogCi0JLyogY29uZ2VzdGlvbiBpc24ndCBjZ3JvdXAgYXdhcmUgYW5kIGZvbGxvd3Mgcm9vdCBibGtjZyBmb3Igbm93ICovCi0JcmwgPSAmcS0+cm9vdF9ybDsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKHJsLT5jb3VudFtCTEtfUldfU1lOQ10gPj0gcXVldWVfY29uZ2VzdGlvbl9vbl90aHJlc2hvbGQocSkpCi0JCWJsa19zZXRfcXVldWVfY29uZ2VzdGVkKHEsIEJMS19SV19TWU5DKTsKLQllbHNlIGlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdIDwgcXVldWVfY29uZ2VzdGlvbl9vZmZfdGhyZXNob2xkKHEpKQotCQlibGtfY2xlYXJfcXVldWVfY29uZ2VzdGVkKHEsIEJMS19SV19TWU5DKTsKLQotCWlmIChybC0+Y291bnRbQkxLX1JXX0FTWU5DXSA+PSBxdWV1ZV9jb25nZXN0aW9uX29uX3RocmVzaG9sZChxKSkKLQkJYmxrX3NldF9xdWV1ZV9jb25nZXN0ZWQocSwgQkxLX1JXX0FTWU5DKTsKLQllbHNlIGlmIChybC0+Y291bnRbQkxLX1JXX0FTWU5DXSA8IHF1ZXVlX2Nvbmdlc3Rpb25fb2ZmX3RocmVzaG9sZChxKSkKLQkJYmxrX2NsZWFyX3F1ZXVlX2Nvbmdlc3RlZChxLCBCTEtfUldfQVNZTkMpOwotCi0JYmxrX3F1ZXVlX2Zvcl9lYWNoX3JsKHJsLCBxKSB7Ci0JCWlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdID49IHEtPm5yX3JlcXVlc3RzKSB7Ci0JCQlibGtfc2V0X3JsX2Z1bGwocmwsIEJMS19SV19TWU5DKTsKLQkJfSBlbHNlIHsKLQkJCWJsa19jbGVhcl9ybF9mdWxsKHJsLCBCTEtfUldfU1lOQyk7Ci0JCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfU1lOQ10pOwotCQl9Ci0KLQkJaWYgKHJsLT5jb3VudFtCTEtfUldfQVNZTkNdID49IHEtPm5yX3JlcXVlc3RzKSB7Ci0JCQlibGtfc2V0X3JsX2Z1bGwocmwsIEJMS19SV19BU1lOQyk7Ci0JCX0gZWxzZSB7Ci0JCQlibGtfY2xlYXJfcmxfZnVsbChybCwgQkxLX1JXX0FTWU5DKTsKLQkJCXdha2VfdXAoJnJsLT53YWl0W0JMS19SV19BU1lOQ10pOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU0NCw4ICs1MTcsNiBAQAogCWlmIChxLT5xdWV1ZV90YWdzKQogCQlfX2Jsa19xdWV1ZV9mcmVlX3RhZ3MocSk7CiAKLQlwZXJjcHVfY291bnRlcl9kZXN0cm95KCZxLT5tcV91c2FnZV9jb3VudGVyKTsKLQogCWlmIChxLT5tcV9vcHMpCiAJCWJsa19tcV9mcmVlX3F1ZXVlKHEpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCmluZGV4IDAzMzc0NWMuLjkzNTNiNDYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jCisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCkBAIC03NDQsNyArNzQ0LDcgQEAKIHN0YXRpYyBib29sIHRocm90bF9zbGljZV91c2VkKHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgYm9vbCBydykKIHsKIAlpZiAodGltZV9pbl9yYW5nZShqaWZmaWVzLCB0Zy0+c2xpY2Vfc3RhcnRbcnddLCB0Zy0+c2xpY2VfZW5kW3J3XSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTg0Miw3ICs4NDIsNyBAQAogCWlmICh0Zy0+aW9fZGlzcFtyd10gKyAxIDw9IGlvX2FsbG93ZWQpIHsKIAkJaWYgKHdhaXQpCiAJCQkqd2FpdCA9IDA7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAkvKiBDYWxjIGFwcHJveCB0aW1lIHRvIGRpc3BhdGNoICovCkBAIC04ODAsNyArODgwLDcgQEAKIAlpZiAodGctPmJ5dGVzX2Rpc3BbcnddICsgYmlvLT5iaV9pdGVyLmJpX3NpemUgPD0gYnl0ZXNfYWxsb3dlZCkgewogCQlpZiAod2FpdCkKIAkJCSp3YWl0ID0gMDsKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCX0KIAogCS8qIENhbGMgYXBwcm94IHRpbWUgdG8gZGlzcGF0Y2ggKi8KQEAgLTkyMyw3ICs5MjMsNyBAQAogCWlmICh0Zy0+YnBzW3J3XSA9PSAtMSAmJiB0Zy0+aW9wc1tyd10gPT0gLTEpIHsKIAkJaWYgKHdhaXQpCiAJCQkqd2FpdCA9IDA7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAkvKgpAQCAtMTI1OCw3ICsxMjU4LDcgQEAKICAqIG9mIHRocm90bF9kYXRhLT5zZXJ2aWNlX3F1ZXVlLiAgVGhvc2UgYmlvJ3MgYXJlIHJlYWR5IGFuZCBpc3N1ZWQgYnkgdGhpcwogICogZnVuY3Rpb24uCiAgKi8KLXZvaWQgYmxrX3Rocm90bF9kaXNwYXRjaF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGJsa190aHJvdGxfZGlzcGF0Y2hfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHRocm90bF9kYXRhICp0ZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGhyb3RsX2RhdGEsCiAJCQkJCSAgICAgIGRpc3BhdGNoX3dvcmspOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRpbWVvdXQuYyBiL2Jsb2NrL2Jsay10aW1lb3V0LmMKaW5kZXggZDk2ZjcwNjEuLjk1YTA5NTkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aW1lb3V0LmMKKysrIGIvYmxvY2svYmxrLXRpbWVvdXQuYwpAQCAtOTYsMTEgKzk2LDcgQEAKIAkJCV9fYmxrX2NvbXBsZXRlX3JlcXVlc3QocmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBCTEtfRUhfUkVTRVRfVElNRVI6Ci0JCWlmIChxLT5tcV9vcHMpCi0JCQlibGtfbXFfYWRkX3RpbWVyKHJlcSk7Ci0JCWVsc2UKLQkJCWJsa19hZGRfdGltZXIocmVxKTsKLQorCQlibGtfYWRkX3RpbWVyKHJlcSk7CiAJCWJsa19jbGVhcl9ycV9jb21wbGV0ZShyZXEpOwogCQlicmVhazsKIAljYXNlIEJMS19FSF9OT1RfSEFORExFRDoKQEAgLTE3MCw3ICsxNjYsMjYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hYm9ydF9yZXF1ZXN0KTsKIAotdm9pZCBfX2Jsa19hZGRfdGltZXIoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGxpc3RfaGVhZCAqdGltZW91dF9saXN0KQordW5zaWduZWQgbG9uZyBibGtfcnFfdGltZW91dCh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJdW5zaWduZWQgbG9uZyBtYXh0OworCisJbWF4dCA9IHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArIEJMS19NQVhfVElNRU9VVCk7CisJaWYgKHRpbWVfYWZ0ZXIodGltZW91dCwgbWF4dCkpCisJCXRpbWVvdXQgPSBtYXh0OworCisJcmV0dXJuIHRpbWVvdXQ7Cit9CisKKy8qKgorICogYmxrX2FkZF90aW1lciAtIFN0YXJ0IHRpbWVvdXQgdGltZXIgZm9yIGEgc2luZ2xlIHJlcXVlc3QKKyAqIEByZXE6CXJlcXVlc3QgdGhhdCBpcyBhYm91dCB0byBzdGFydCBydW5uaW5nLgorICoKKyAqIE5vdGVzOgorICogICAgRWFjaCByZXF1ZXN0IGhhcyBpdHMgb3duIHRpbWVyLCBhbmQgYXMgaXQgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlLCB3ZQorICogICAgc2V0IHVwIHRoZSB0aW1lci4gV2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMsIHdlIGNhbmNlbCB0aGUgdGltZXIuCisgKi8KK3ZvaWQgYmxrX2FkZF90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcmVxLT5xOwogCXVuc2lnbmVkIGxvbmcgZXhwaXJ5OwpAQCAtMTg4LDMyICsyMDMsMjkgQEAKIAkJcmVxLT50aW1lb3V0ID0gcS0+cnFfdGltZW91dDsKIAogCXJlcS0+ZGVhZGxpbmUgPSBqaWZmaWVzICsgcmVxLT50aW1lb3V0OwotCWlmICh0aW1lb3V0X2xpc3QpCi0JCWxpc3RfYWRkX3RhaWwoJnJlcS0+dGltZW91dF9saXN0LCB0aW1lb3V0X2xpc3QpOworCWlmICghcS0+bXFfb3BzKQorCQlsaXN0X2FkZF90YWlsKCZyZXEtPnRpbWVvdXRfbGlzdCwgJnJlcS0+cS0+dGltZW91dF9saXN0KTsKIAogCS8qCiAJICogSWYgdGhlIHRpbWVyIGlzbid0IGFscmVhZHkgcGVuZGluZyBvciB0aGlzIHRpbWVvdXQgaXMgZWFybGllcgogCSAqIHRoYW4gYW4gZXhpc3Rpbmcgb25lLCBtb2RpZnkgdGhlIHRpbWVyLiBSb3VuZCB1cCB0byBuZXh0IG5lYXJlc3QKIAkgKiBzZWNvbmQuCiAJICovCi0JZXhwaXJ5ID0gcm91bmRfamlmZmllc191cChyZXEtPmRlYWRsaW5lKTsKKwlleHBpcnkgPSBibGtfcnFfdGltZW91dChyb3VuZF9qaWZmaWVzX3VwKHJlcS0+ZGVhZGxpbmUpKTsKIAogCWlmICghdGltZXJfcGVuZGluZygmcS0+dGltZW91dCkgfHwKLQkgICAgdGltZV9iZWZvcmUoZXhwaXJ5LCBxLT50aW1lb3V0LmV4cGlyZXMpKQotCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGV4cGlyeSk7CisJICAgIHRpbWVfYmVmb3JlKGV4cGlyeSwgcS0+dGltZW91dC5leHBpcmVzKSkgeworCQl1bnNpZ25lZCBsb25nIGRpZmYgPSBxLT50aW1lb3V0LmV4cGlyZXMgLSBleHBpcnk7CisKKwkJLyoKKwkJICogRHVlIHRvIGFkZGVkIHRpbWVyIHNsYWNrIHRvIGdyb3VwIHRpbWVycywgdGhlIHRpbWVyCisJCSAqIHdpbGwgb2Z0ZW4gYmUgYSBsaXR0bGUgaW4gZnJvbnQgb2Ygd2hhdCB3ZSBhc2tlZCBmb3IuCisJCSAqIFNvIGFwcGx5IHNvbWUgdG9sZXJhbmNlIGhlcmUgdG9vLCBvdGhlcndpc2Ugd2Uga2VlcAorCQkgKiBtb2RpZnlpbmcgdGhlIHRpbWVyIGJlY2F1c2UgZXhwaXJlcyBmb3IgdmFsdWUgWAorCQkgKiB3aWxsIGJlIFggKyBzb21ldGhpbmcuCisJCSAqLworCQlpZiAoIXRpbWVyX3BlbmRpbmcoJnEtPnRpbWVvdXQpIHx8IChkaWZmID49IEhaIC8gMikpCisJCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGV4cGlyeSk7CisJfQogCiB9Ci0KLS8qKgotICogYmxrX2FkZF90aW1lciAtIFN0YXJ0IHRpbWVvdXQgdGltZXIgZm9yIGEgc2luZ2xlIHJlcXVlc3QKLSAqIEByZXE6CXJlcXVlc3QgdGhhdCBpcyBhYm91dCB0byBzdGFydCBydW5uaW5nLgotICoKLSAqIE5vdGVzOgotICogICAgRWFjaCByZXF1ZXN0IGhhcyBpdHMgb3duIHRpbWVyLCBhbmQgYXMgaXQgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlLCB3ZQotICogICAgc2V0IHVwIHRoZSB0aW1lci4gV2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMsIHdlIGNhbmNlbCB0aGUgdGltZXIuCi0gKi8KLXZvaWQgYmxrX2FkZF90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKQotewotCV9fYmxrX2FkZF90aW1lcihyZXEsICZyZXEtPnEtPnRpbWVvdXRfbGlzdCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggMWQ4ODBmMS4uNDUzODVlOSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKKysrIGIvYmxvY2svYmxrLmgKQEAgLTksNiArOSw5IEBACiAvKiBOdW1iZXIgb2YgcmVxdWVzdHMgYSAiYmF0Y2hpbmciIHByb2Nlc3MgbWF5IHN1Ym1pdCAqLwogI2RlZmluZSBCTEtfQkFUQ0hfUkVRCTMyCiAKKy8qIE1heCBmdXR1cmUgdGltZXIgZXhwaXJ5IGZvciB0aW1lb3V0cyAqLworI2RlZmluZSBCTEtfTUFYX1RJTUVPVVQJCSg1ICogSFopCisKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYmxrX3JlcXVlc3RxX2NhY2hlcDsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxdWVzdF9jYWNoZXA7CiBleHRlcm4gc3RydWN0IGtvYmpfdHlwZSBibGtfcXVldWVfa3R5cGU7CkBAIC0zNyw5ICs0MCw5IEBACiB2b2lkIGJsa19ycV90aW1lZF9vdXRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgYmxrX3JxX2NoZWNrX2V4cGlyZWQoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBsb25nICpuZXh0X3RpbWVvdXQsCiAJCQkgIHVuc2lnbmVkIGludCAqbmV4dF9zZXQpOwotdm9pZCBfX2Jsa19hZGRfdGltZXIoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGxpc3RfaGVhZCAqdGltZW91dF9saXN0KTsKK3Vuc2lnbmVkIGxvbmcgYmxrX3JxX3RpbWVvdXQodW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgYmxrX2FkZF90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKTsKIHZvaWQgYmxrX2RlbGV0ZV90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqKTsKLXZvaWQgYmxrX2FkZF90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqKTsKIAogCiBib29sIGJpb19hdHRlbXB0X2Zyb250X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLApAQCAtMTg1LDYgKzE4OCw4IEBACiAJcmV0dXJuIHEtPm5yX2Nvbmdlc3Rpb25fb2ZmOwogfQogCitleHRlcm4gaW50IGJsa191cGRhdGVfbnJfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKKwogLyoKICAqIENvbnRyaWJ1dGUgdG8gSU8gc3RhdGlzdGljcyBJRkY6CiAgKgpkaWZmIC0tZ2l0IGEvbW0vYm91bmNlLmMgYi9ibG9jay9ib3VuY2UuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW0vYm91bmNlLmMKcmVuYW1lIHRvIGJsb2NrL2JvdW5jZS5jCmRpZmYgLS1naXQgYS9ibG9jay9ic2cuYyBiL2Jsb2NrL2JzZy5jCmluZGV4IDQyMGE1YTkuLmU1MjE0YzEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JzZy5jCisrKyBiL2Jsb2NrL2JzZy5jCkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCS8qCiAJICogd2UgbmVlZCBhIHByb3BlciB0cmFuc3BvcnQgdG8gc2VuZCBjb21tYW5kcywgbm90IGEgc3RhY2tlZCBkZXZpY2UKIAkgKi8KLQlpZiAoIXEtPnJlcXVlc3RfZm4pCisJaWYgKCFxdWV1ZV9pc19ycV9iYXNlZChxKSkKIAkJcmV0dXJuIDA7CiAKIAliY2QgPSAmcS0+YnNnX2RldjsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IGUwOTg1ZjEuLjIyZGZmZWIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtOTA4LDcgKzkwOCw3IEBACiB7CiAJaWYgKGNmcWQtPmJ1c3lfcXVldWVzKSB7CiAJCWNmcV9sb2coY2ZxZCwgInNjaGVkdWxlIGRpc3BhdGNoIik7Ci0JCWtibG9ja2Rfc2NoZWR1bGVfd29yayhjZnFkLT5xdWV1ZSwgJmNmcWQtPnVucGx1Z193b3JrKTsKKwkJa2Jsb2NrZF9zY2hlZHVsZV93b3JrKCZjZnFkLT51bnBsdWdfd29yayk7CiAJfQogfQogCkBAIC00NDYwLDcgKzQ0NjAsNyBAQAogc3RhdGljIHNzaXplX3QKIGNmcV92YXJfc2hvdyh1bnNpZ25lZCBpbnQgdmFyLCBjaGFyICpwYWdlKQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgdmFyKTsKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIHZhcik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CmRpZmYgLS1naXQgYS9mcy9pb3ByaW8uYyBiL2Jsb2NrL2lvcHJpby5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9pb3ByaW8uYwpyZW5hbWUgdG8gYmxvY2svaW9wcmlvLmMKZGlmZiAtLWdpdCBhL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwppbmRleCAyNjQ4Nzk3Li45YzI4YTViIDEwMDY0NAotLS0gYS9ibG9jay9zY3NpX2lvY3RsLmMKKysrIGIvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0yMDUsMTAgKzIwNSw2IEBACiAJaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCXJldHVybiAwOwogCi0JLyogaWYgdGhlcmUncyBubyBmaWx0ZXIgc2V0LCBhc3N1bWUgd2UncmUgZmlsdGVyaW5nIGV2ZXJ5dGhpbmcgb3V0ICovCi0JaWYgKCFmaWx0ZXIpCi0JCXJldHVybiAtRVBFUk07Ci0KIAkvKiBBbnlib2R5IHdobyBjYW4gb3BlbiB0aGUgZGV2aWNlIGNhbiBkbyBhIHJlYWQtc2FmZSBjb21tYW5kICovCiAJaWYgKHRlc3RfYml0KGNtZFswXSwgZmlsdGVyLT5yZWFkX29rKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jcnlwdG8vY2hhaW5pdi5jIGIvY3J5cHRvL2NoYWluaXYuYwppbmRleCA4MzRkOGRkLi45YzI5NGM4IDEwMDY0NAotLS0gYS9jcnlwdG8vY2hhaW5pdi5jCisrKyBiL2NyeXB0by9jaGFpbml2LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWludCBlcnIgPSBjdHgtPmVycjsKIAogCWlmICghY3R4LT5xdWV1ZS5xbGVuKSB7Ci0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJY2xlYXJfYml0KENIQUlOSVZfU1RBVEVfSU5VU0UsICZjdHgtPnN0YXRlKTsKIAogCQlpZiAoIWN0eC0+cXVldWUucWxlbiB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDBhMGE5MGY1Mi4uMGU4N2EzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTMyLDYgKzEzMiw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc29jL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9jbGsvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2h3c3BpbmxvY2svS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDcxODNiNmEuLmY5OGI1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtMzMsNiArMzMsOSBAQAogIyByZWFsbHkgZWFybHkuCiBvYmotJChDT05GSUdfRE1BREVWSUNFUykJKz0gZG1hLwogCisjIFNPQyBzcGVjaWZpYyBpbmZyYXN0cnVjdHVyZSBkcml2ZXJzLgorb2JqLXkJCQkJKz0gc29jLworCiBvYmotJChDT05GSUdfVklSVElPKQkJKz0gdmlydGlvLwogb2JqLSQoQ09ORklHX1hFTikJCSs9IHhlbi8KIApAQCAtODAsNyArODMsNiBAQAogb2JqLSQoQ09ORklHX0RJTykJCSs9IGRpby8KIG9iai0kKENPTkZJR19TQlVTKQkJKz0gc2J1cy8KIG9iai0kKENPTkZJR19aT1JSTykJCSs9IHpvcnJvLwotb2JqLSQoQ09ORklHX01BQykJCSs9IG1hY2ludG9zaC8KIG9iai0kKENPTkZJR19BVEFfT1ZFUl9FVEgpCSs9IGJsb2NrL2FvZS8KIG9iai0kKENPTkZJR19QQVJJREUpIAkJKz0gYmxvY2svcGFyaWRlLwogb2JqLSQoQ09ORklHX1RDKQkJKz0gdGMvCkBAIC0xMzgsNyArMTQwLDYgQEAKIAogb2JqLSQoQ09ORklHX01BSUxCT1gpCQkrPSBtYWlsYm94Lwogb2JqLSQoQ09ORklHX0hXU1BJTkxPQ0spCSs9IGh3c3BpbmxvY2svCi1vYmotJChDT05GSUdfTkZDKQkJKz0gbmZjLwogb2JqLSQoQ09ORklHX0lPTU1VX1NVUFBPUlQpCSs9IGlvbW11Lwogb2JqLSQoQ09ORklHX1JFTU9URVBST0MpCSs9IHJlbW90ZXByb2MvCiBvYmotJChDT05GSUdfUlBNU0cpCQkrPSBycG1zZy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX2xwc3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX2xwc3MuYwppbmRleCA1MTA2OWIyLi42MzQwN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9scHNzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbHBzcy5jCkBAIC0yMDAsNiArMjAwLDcgQEAKIAl7ICI4MDg2MEYxNCIsIExQU1NfQUREUihieXRfc2Rpb19kZXZfZGVzYykgfSwKIAl7ICI4MDg2MEY0MSIsIExQU1NfQUREUihieXRfaTJjX2Rldl9kZXNjKSB9LAogCXsgIklOVDMzQjIiLCB9LAorCXsgIklOVDMzRkMiLCB9LAogCiAJeyAiSU5UMzQzMCIsIExQU1NfQUREUihscHRfZGV2X2Rlc2MpIH0sCiAJeyAiSU5UMzQzMSIsIExQU1NfQUREUihscHRfZGV2X2Rlc2MpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCmluZGV4IDhmYThkZWEuLjRiN2I0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCkBAIC0xLDEwICsxLDEwIEBACiBtZW51ICJHZW5lcmljIERyaXZlciBPcHRpb25zIgogCi1jb25maWcgVUVWRU5UX0hFTFBFUl9QQVRICi0Jc3RyaW5nICJwYXRoIHRvIHVldmVudCBoZWxwZXIiCi0JZGVmYXVsdCAiIgorY29uZmlnIFVFVkVOVF9IRUxQRVIKKwlib29sICJTdXBwb3J0IGZvciB1ZXZlbnQgaGVscGVyIgorCWRlZmF1bHQgeQogCWhlbHAKLQkgIFBhdGggdG8gdWV2ZW50IGhlbHBlciBwcm9ncmFtIGZvcmtlZCBieSB0aGUga2VybmVsIGZvcgorCSAgVGhlIHVldmVudCBoZWxwZXIgcHJvZ3JhbSBpcyBmb3JrZWQgYnkgdGhlIGtlcm5lbCBmb3IKIAkgIGV2ZXJ5IHVldmVudC4KIAkgIEJlZm9yZSB0aGUgc3dpdGNoIHRvIHRoZSBuZXRsaW5rLWJhc2VkIHVldmVudCBzb3VyY2UsIHRoaXMgd2FzCiAJICB1c2VkIHRvIGhvb2sgaG90cGx1ZyBzY3JpcHRzIGludG8ga2VybmVsIGRldmljZSBldmVudHMuIEl0CkBAIC0xNSw4ICsxNSwxMyBAQAogCSAgdGhhdCBpdCBjcmVhdGVzIGEgaGlnaCBzeXN0ZW0gbG9hZCwgb3Igb24gc21hbGxlciBzeXN0ZW1zCiAJICBpdCBpcyBrbm93biB0byBjcmVhdGUgb3V0LW9mLW1lbW9yeSBzaXR1YXRpb25zIGR1cmluZyBib290dXAuCiAKLQkgIFRvIGRpc2FibGUgdXNlciBzcGFjZSBoZWxwZXIgcHJvZ3JhbSBleGVjdXRpb24gYXQgZWFybHkgYm9vdAotCSAgdGltZSBzcGVjaWZ5IGFuIGVtcHR5IHN0cmluZyBoZXJlLiBUaGlzIHNldHRpbmcgY2FuIGJlIGFsdGVyZWQKK2NvbmZpZyBVRVZFTlRfSEVMUEVSX1BBVEgKKwlzdHJpbmcgInBhdGggdG8gdWV2ZW50IGhlbHBlciIKKwlkZXBlbmRzIG9uIFVFVkVOVF9IRUxQRVIKKwlkZWZhdWx0ICIiCisJaGVscAorCSAgVG8gZGlzYWJsZSB1c2VyIHNwYWNlIGhlbHBlciBwcm9ncmFtIGV4ZWN1dGlvbiBhdCBieSBkZWZhdWx0CisJICBzcGVjaWZ5IGFuIGVtcHR5IHN0cmluZyBoZXJlLiBUaGlzIHNldHRpbmcgY2FuIHN0aWxsIGJlIGFsdGVyZWQKIAkgIHZpYSAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcgb3IgdmlhIC9zeXMva2VybmVsL3VldmVudF9oZWxwZXIKIAkgIGxhdGVyIGF0IHJ1bnRpbWUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9iYXNlLmggYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCmluZGV4IDI0ZjQyNDIuLjI1MWM1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmgKKysrIGIvZHJpdmVycy9iYXNlL2Jhc2UuaApAQCAtNjMsOCArNjMsNiBAQAogICoJYmluZGluZyBvZiBkcml2ZXJzIHdoaWNoIHdlcmUgdW5hYmxlIHRvIGdldCBhbGwgdGhlIHJlc291cmNlcyBuZWVkZWQgYnkKICAqCXRoZSBkZXZpY2U7IHR5cGljYWxseSBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYW5vdGhlciBkcml2ZXIgZ2V0dGluZwogICoJcHJvYmVkIGZpcnN0LgotICogQGRyaXZlcl9kYXRhIC0gcHJpdmF0ZSBwb2ludGVyIGZvciBkcml2ZXIgc3BlY2lmaWMgaW5mby4gIFdpbGwgdHVybiBpbnRvIGEKLSAqIGxpc3Qgc29vbi4KICAqIEBkZXZpY2UgLSBwb2ludGVyIGJhY2sgdG8gdGhlIHN0cnVjdCBjbGFzcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCiAgKiBhc3NvY2lhdGVkIHdpdGguCiAgKgpAQCAtNzYsNyArNzQsNiBAQAogCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2RyaXZlcjsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9idXM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9wcm9iZTsKLQl2b2lkICpkcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiB9OwogI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IDYyZWM2MWUuLmU0ZmZiY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC01ODcsMjkgKzU4NywzIEBACiAJCXB1dF9kZXZpY2UoZGV2KTsKIAl9CiB9Ci0KLS8qCi0gKiBUaGVzZSBleHBvcnRzIGNhbid0IGJlIF9HUEwgZHVlIHRvIC5oIGZpbGVzIHVzaW5nIHRoaXMgd2l0aGluIHRoZW0sIGFuZCBpdAotICogbWlnaHQgYnJlYWsgc29tZXRoaW5nIHRoYXQgd2FzIHByZXZpb3VzbHkgd29ya2luZy4uLgotICovCi12b2lkICpkZXZfZ2V0X2RydmRhdGEoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQotewotCWlmIChkZXYgJiYgZGV2LT5wKQotCQlyZXR1cm4gZGV2LT5wLT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0woZGV2X2dldF9kcnZkYXRhKTsKLQotaW50IGRldl9zZXRfZHJ2ZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFkZXYtPnApIHsKLQkJZXJyb3IgPSBkZXZpY2VfcHJpdmF0ZV9pbml0KGRldik7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0JZGV2LT5wLT5kcml2ZXJfZGF0YSA9IGRhdGE7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGRldl9zZXRfZHJ2ZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2cmVzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2cmVzLmMKaW5kZXggZGI0ZTI2NC4uNTIzMDI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RldnJlcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZXZyZXMuYwpAQCAtODMxLDMgKzgzMSwxMDAgQEAKIAlXQVJOX09OKHJjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fa2ZyZWUpOworCisvKioKKyAqIGRldm1fa21lbWR1cCAtIFJlc291cmNlLW1hbmFnZWQga21lbWR1cAorICogQGRldjogRGV2aWNlIHRoaXMgbWVtb3J5IGJlbG9uZ3MgdG8KKyAqIEBzcmM6IE1lbW9yeSByZWdpb24gdG8gZHVwbGljYXRlCisgKiBAbGVuOiBNZW1vcnkgcmVnaW9uIGxlbmd0aAorICogQGdmcDogR0ZQIG1hc2sgdG8gdXNlCisgKgorICogRHVwbGljYXRlIHJlZ2lvbiBvZiBhIG1lbW9yeSB1c2luZyByZXNvdXJjZSBtYW5hZ2VkIGttYWxsb2MKKyAqLwordm9pZCAqZGV2bV9rbWVtZHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBnZnBfdCBnZnApCit7CisJdm9pZCAqcDsKKworCXAgPSBkZXZtX2ttYWxsb2MoZGV2LCBsZW4sIGdmcCk7CisJaWYgKHApCisJCW1lbWNweShwLCBzcmMsIGxlbik7CisKKwlyZXR1cm4gcDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fa21lbWR1cCk7CisKK3N0cnVjdCBwYWdlc19kZXZyZXMgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7Cit9OworCitzdGF0aWMgaW50IGRldm1fcGFnZXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMsIHZvaWQgKnApCit7CisJc3RydWN0IHBhZ2VzX2RldnJlcyAqZGV2cmVzID0gcmVzOworCXN0cnVjdCBwYWdlc19kZXZyZXMgKnRhcmdldCA9IHA7CisKKwlyZXR1cm4gZGV2cmVzLT5hZGRyID09IHRhcmdldC0+YWRkcjsKK30KKworc3RhdGljIHZvaWQgZGV2bV9wYWdlc19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQoreworCXN0cnVjdCBwYWdlc19kZXZyZXMgKmRldnJlcyA9IHJlczsKKworCWZyZWVfcGFnZXMoZGV2cmVzLT5hZGRyLCBkZXZyZXMtPm9yZGVyKTsKK30KKworLyoqCisgKiBkZXZtX2dldF9mcmVlX3BhZ2VzIC0gUmVzb3VyY2UtbWFuYWdlZCBfX2dldF9mcmVlX3BhZ2VzCisgKiBAZGV2OiBEZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZvcgorICogQGdmcF9tYXNrOiBBbGxvY2F0aW9uIGdmcCBmbGFncworICogQG9yZGVyOiBBbGxvY2F0aW9uIHNpemUgaXMgKDEgPDwgb3JkZXIpIHBhZ2VzCisgKgorICogTWFuYWdlZCBnZXRfZnJlZV9wYWdlcy4gIE1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIGlzCisgKiBhdXRvbWF0aWNhbGx5IGZyZWVkIG9uIGRyaXZlciBkZXRhY2guCisgKgorICogUkVUVVJOUzoKKyAqIEFkZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuCisgKi8KKwordW5zaWduZWQgbG9uZyBkZXZtX2dldF9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHBhZ2VzX2RldnJlcyAqZGV2cmVzOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7CisKKwlpZiAodW5saWtlbHkoIWFkZHIpKQorCQlyZXR1cm4gMDsKKworCWRldnJlcyA9IGRldnJlc19hbGxvYyhkZXZtX3BhZ2VzX3JlbGVhc2UsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHBhZ2VzX2RldnJlcyksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZGV2cmVzKSkgeworCQlmcmVlX3BhZ2VzKGFkZHIsIG9yZGVyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2cmVzLT5hZGRyID0gYWRkcjsKKwlkZXZyZXMtPm9yZGVyID0gb3JkZXI7CisKKwlkZXZyZXNfYWRkKGRldiwgZGV2cmVzKTsKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fZ2V0X2ZyZWVfcGFnZXMpOworCisvKioKKyAqIGRldm1fZnJlZV9wYWdlcyAtIFJlc291cmNlLW1hbmFnZWQgZnJlZV9wYWdlcworICogQGRldjogRGV2aWNlIHRoaXMgbWVtb3J5IGJlbG9uZ3MgdG8KKyAqIEBhZGRyOiBNZW1vcnkgdG8gZnJlZQorICoKKyAqIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCB3aXRoIGRldm1fZ2V0X2ZyZWVfcGFnZXMoKS4gVW5saWtlIGZyZWVfcGFnZXMsCisgKiB0aGVyZSBpcyBubyBuZWVkIHRvIHN1cHBseSB0aGUgQG9yZGVyLgorICovCit2b2lkIGRldm1fZnJlZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgcGFnZXNfZGV2cmVzIGRldnJlcyA9IHsgLmFkZHIgPSBhZGRyIH07CisKKwlXQVJOX09OKGRldnJlc19yZWxlYXNlKGRldiwgZGV2bV9wYWdlc19yZWxlYXNlLCBkZXZtX3BhZ2VzX21hdGNoLAorCQkJICAgICAgICZkZXZyZXMpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fZnJlZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hLWJ1Zi5jIGIvZHJpdmVycy9iYXNlL2RtYS1idWYuYwppbmRleCBlYTc3NzAxLi44NDBjN2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZG1hLWJ1Zi5jCisrKyBiL2RyaXZlcnMvYmFzZS9kbWEtYnVmLmMKQEAgLTQ5MSw3ICs0OTEsNyBAQAogICogCQkJZG1hLWJ1ZiBidWZmZXIuCiAgKgogICogVGhpcyBmdW5jdGlvbiBhZGp1c3RzIHRoZSBwYXNzZWQgaW4gdm1hIHNvIHRoYXQgaXQgcG9pbnRzIGF0IHRoZSBmaWxlIG9mIHRoZQotICogZG1hX2J1ZiBvcGVyYXRpb24uIEl0IGFsc29nIGFkanVzdHMgdGhlIHN0YXJ0aW5nIHBnb2ZmIGFuZCBkb2VzIGJvdW5kcworICogZG1hX2J1ZiBvcGVyYXRpb24uIEl0IGFsc28gYWRqdXN0cyB0aGUgc3RhcnRpbmcgcGdvZmYgYW5kIGRvZXMgYm91bmRzCiAgKiBjaGVja2luZyBvbiB0aGUgc2l6ZSBvZiB0aGUgdm1hLiBUaGVuIGl0IGNhbGxzIHRoZSBleHBvcnRlcnMgbW1hcCBmdW5jdGlvbiB0bwogICogc2V0IHVwIHRoZSBtYXBwaW5nLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kbWEtY29oZXJlbnQuYyBiL2RyaXZlcnMvYmFzZS9kbWEtY29oZXJlbnQuYwppbmRleCBiYzI1NmI2Li43ZDZlODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZG1hLWNvaGVyZW50LmMKKysrIGIvZHJpdmVycy9iYXNlL2RtYS1jb2hlcmVudC5jCkBAIC0xMCwxMyArMTAsMTMgQEAKIHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKIAl2b2lkCQkqdmlydF9iYXNlOwogCWRtYV9hZGRyX3QJZGV2aWNlX2Jhc2U7Ci0JcGh5c19hZGRyX3QJcGZuX2Jhc2U7CisJdW5zaWduZWQgbG9uZwlwZm5fYmFzZTsKIAlpbnQJCXNpemU7CiAJaW50CQlmbGFnczsKIAl1bnNpZ25lZCBsb25nCSpiaXRtYXA7CiB9OwogCi1pbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKK2ludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsCiAJCQkJZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAl2b2lkIF9faW9tZW0gKm1lbV9iYXNlID0gTlVMTDsKQEAgLTMyLDcgKzMyLDcgQEAKIAogCS8qIEZJWE1FOiB0aGlzIHJvdXRpbmUganVzdCBpZ25vcmVzIERNQV9NRU1PUllfSU5DTFVERVNfQ0hJTERSRU4gKi8KIAotCW1lbV9iYXNlID0gaW9yZW1hcChidXNfYWRkciwgc2l6ZSk7CisJbWVtX2Jhc2UgPSBpb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7CiAJaWYgKCFtZW1fYmFzZSkKIAkJZ290byBvdXQ7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogCWRldi0+ZG1hX21lbS0+dmlydF9iYXNlID0gbWVtX2Jhc2U7CiAJZGV2LT5kbWFfbWVtLT5kZXZpY2VfYmFzZSA9IGRldmljZV9hZGRyOwotCWRldi0+ZG1hX21lbS0+cGZuX2Jhc2UgPSBQRk5fRE9XTihidXNfYWRkcik7CisJZGV2LT5kbWFfbWVtLT5wZm5fYmFzZSA9IFBGTl9ET1dOKHBoeXNfYWRkcik7CiAJZGV2LT5kbWFfbWVtLT5zaXplID0gcGFnZXM7CiAJZGV2LT5kbWFfbWVtLT5mbGFncyA9IGZsYWdzOwogCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogCQkqcmV0ID0gLUVOWElPOwogCQlpZiAob2ZmIDwgY291bnQgJiYgdXNlcl9jb3VudCA8PSBjb3VudCAtIG9mZikgewotCQkJdW5zaWduZWQgcGZuID0gbWVtLT5wZm5fYmFzZSArIHN0YXJ0ICsgb2ZmOworCQkJdW5zaWduZWQgbG9uZyBwZm4gPSBtZW0tPnBmbl9iYXNlICsgc3RhcnQgKyBvZmY7CiAJCQkqcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgcGZuLAogCQkJCQkgICAgICAgdXNlcl9jb3VudCA8PCBQQUdFX1NISUZULAogCQkJCQkgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RtYS1jb250aWd1b3VzLmMgYi9kcml2ZXJzL2Jhc2UvZG1hLWNvbnRpZ3VvdXMuYwppbmRleCAxNjVjMmMyLi5jMzRlYzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZG1hLWNvbnRpZ3VvdXMuYworKysgYi9kcml2ZXJzL2Jhc2UvZG1hLWNvbnRpZ3VvdXMuYwpAQCAtMzcsNiArMzcsNyBAQAogCXVuc2lnbmVkIGxvbmcJYmFzZV9wZm47CiAJdW5zaWduZWQgbG9uZwljb3VudDsKIAl1bnNpZ25lZCBsb25nCSpiaXRtYXA7CisJc3RydWN0IG11dGV4CWxvY2s7CiB9OwogCiBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19kZWZhdWx0X2FyZWE7CkBAIC0xNjEsNiArMTYyLDcgQEAKIAkJaW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKGJhc2VfcGZuKSk7CiAJfSB3aGlsZSAoLS1pKTsKIAorCW11dGV4X2luaXQoJmNtYS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2MSw2ICsyNjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBjbGVhcl9jbWFfYml0bWFwKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBwZm4sIGludCBjb3VudCkKK3sKKwltdXRleF9sb2NrKCZjbWEtPmxvY2spOworCWJpdG1hcF9jbGVhcihjbWEtPmJpdG1hcCwgcGZuIC0gY21hLT5iYXNlX3BmbiwgY291bnQpOworCW11dGV4X3VubG9jaygmY21hLT5sb2NrKTsKK30KKwogLyoqCiAgKiBkbWFfYWxsb2NfZnJvbV9jb250aWd1b3VzKCkgLSBhbGxvY2F0ZSBwYWdlcyBmcm9tIGNvbnRpZ3VvdXMgYXJlYQogICogQGRldjogICBQb2ludGVyIHRvIGRldmljZSBmb3Igd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLgpAQCAtMjY5LDcgKzI3OCw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGJ1ZmZlciBmb3Igc3BlY2lmaWVkIGRldmljZS4gSXQgdXNlcwogICogZGV2aWNlIHNwZWNpZmljIGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgaWYgYXZhaWxhYmxlIG9yIHRoZSBkZWZhdWx0Ci0gKiBnbG9iYWwgb25lLiBSZXF1aXJlcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZ2V0X2Rldl9jbWFfYXJlYSgpIGhlbHBlcgorICogZ2xvYmFsIG9uZS4gUmVxdWlyZXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRldl9nZXRfY21hX2FyZWEoKSBoZWxwZXIKICAqIGZ1bmN0aW9uLgogICovCiBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2Zyb21fY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBjb3VudCwKQEAgLTI5NCwzMCArMzAzLDQxIEBACiAKIAltYXNrID0gKDEgPDwgYWxpZ24pIC0gMTsKIAotCW11dGV4X2xvY2soJmNtYV9tdXRleCk7CiAKIAlmb3IgKDs7KSB7CisJCW11dGV4X2xvY2soJmNtYS0+bG9jayk7CiAJCXBhZ2VubyA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGNtYS0+Yml0bWFwLCBjbWEtPmNvdW50LAogCQkJCQkJICAgIHN0YXJ0LCBjb3VudCwgbWFzayk7Ci0JCWlmIChwYWdlbm8gPj0gY21hLT5jb3VudCkKKwkJaWYgKHBhZ2VubyA+PSBjbWEtPmNvdW50KSB7CisJCQltdXRleF91bmxvY2soJmNtYS0+bG9jayk7CiAJCQlicmVhazsKKwkJfQorCQliaXRtYXBfc2V0KGNtYS0+Yml0bWFwLCBwYWdlbm8sIGNvdW50KTsKKwkJLyoKKwkJICogSXQncyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZS4gV2UndmUgbWFya2VkIHRoaXMgcmVnaW9uIGZvcgorCQkgKiBvdXIgZXhjbHVzaXZlIHVzZS4gSWYgdGhlIG1pZ3JhdGlvbiBmYWlscyB3ZSB3aWxsIHRha2UgdGhlCisJCSAqIGxvY2sgYWdhaW4gYW5kIHVubWFyayBpdC4KKwkJICovCisJCW11dGV4X3VubG9jaygmY21hLT5sb2NrKTsKIAogCQlwZm4gPSBjbWEtPmJhc2VfcGZuICsgcGFnZW5vOworCQltdXRleF9sb2NrKCZjbWFfbXV0ZXgpOwogCQlyZXQgPSBhbGxvY19jb250aWdfcmFuZ2UocGZuLCBwZm4gKyBjb3VudCwgTUlHUkFURV9DTUEpOworCQltdXRleF91bmxvY2soJmNtYV9tdXRleCk7CiAJCWlmIChyZXQgPT0gMCkgewotCQkJYml0bWFwX3NldChjbWEtPmJpdG1hcCwgcGFnZW5vLCBjb3VudCk7CiAJCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKHJldCAhPSAtRUJVU1kpIHsKKwkJCWNsZWFyX2NtYV9iaXRtYXAoY21hLCBwZm4sIGNvdW50KTsKIAkJCWJyZWFrOwogCQl9CisJCWNsZWFyX2NtYV9iaXRtYXAoY21hLCBwZm4sIGNvdW50KTsKIAkJcHJfZGVidWcoIiVzKCk6IG1lbW9yeSByYW5nZSBhdCAlcCBpcyBidXN5LCByZXRyeWluZ1xuIiwKIAkJCSBfX2Z1bmNfXywgcGZuX3RvX3BhZ2UocGZuKSk7CiAJCS8qIHRyeSBhZ2FpbiB3aXRoIGEgYml0IGRpZmZlcmVudCBtZW1vcnkgdGFyZ2V0ICovCiAJCXN0YXJ0ID0gcGFnZW5vICsgbWFzayArIDE7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjbWFfbXV0ZXgpOwogCXByX2RlYnVnKCIlcygpOiByZXR1cm5lZCAlcFxuIiwgX19mdW5jX18sIHBhZ2UpOwogCXJldHVybiBwYWdlOwogfQpAQCAtMzUwLDEwICszNzAsOCBAQAogCiAJVk1fQlVHX09OKHBmbiArIGNvdW50ID4gY21hLT5iYXNlX3BmbiArIGNtYS0+Y291bnQpOwogCi0JbXV0ZXhfbG9jaygmY21hX211dGV4KTsKLQliaXRtYXBfY2xlYXIoY21hLT5iaXRtYXAsIHBmbiAtIGNtYS0+YmFzZV9wZm4sIGNvdW50KTsKIAlmcmVlX2NvbnRpZ19yYW5nZShwZm4sIGNvdW50KTsKLQltdXRleF91bmxvY2soJmNtYV9tdXRleCk7CisJY2xlYXJfY21hX2JpdG1hcChjbWEsIHBmbiwgY291bnQpOwogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcuYyBiL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jCmluZGV4IDBjZTM5YTMuLjZjZDA4ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIC8qKgogICogZG1hbV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeSAtIE1hbmFnZWQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KCkKICAqIEBkZXY6IERldmljZSB0byBkZWNsYXJlIGNvaGVyZW50IG1lbW9yeSBmb3IKLSAqIEBidXNfYWRkcjogQnVzIGFkZHJlc3Mgb2YgY29oZXJlbnQgbWVtb3J5IHRvIGJlIGRlY2xhcmVkCisgKiBAcGh5c19hZGRyOiBQaHlzaWNhbCBhZGRyZXNzIG9mIGNvaGVyZW50IG1lbW9yeSB0byBiZSBkZWNsYXJlZAogICogQGRldmljZV9hZGRyOiBEZXZpY2UgYWRkcmVzcyBvZiBjb2hlcmVudCBtZW1vcnkgdG8gYmUgZGVjbGFyZWQKICAqIEBzaXplOiBTaXplIG9mIGNvaGVyZW50IG1lbW9yeSB0byBiZSBkZWNsYXJlZAogICogQGZsYWdzOiBGbGFncwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgKiBSRVRVUk5TOgogICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS4KICAqLwotaW50IGRtYW1fZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAoraW50IGRtYW1fZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsCiAJCQkJIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJdm9pZCAqcmVzOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmMgPSBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoZGV2LCBidXNfYWRkciwgZGV2aWNlX2FkZHIsIHNpemUsCisJcmMgPSBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoZGV2LCBwaHlzX2FkZHIsIGRldmljZV9hZGRyLCBzaXplLAogCQkJCQkgZmxhZ3MpOwogCWlmIChyYyA9PSAwKQogCQlkZXZyZXNfYWRkKGRldiwgcmVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYwppbmRleCBhZTA5OGEyLi5lZWU1NWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIHN0YXRpYyB2b2lkIGdlbnBkX3NkX2NvdW50ZXJfaW5jKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQpCiB7CiAJYXRvbWljX2luYygmZ2VucGQtPnNkX2NvdW50KTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogfQogCiBzdGF0aWMgdm9pZCBnZW5wZF9hY3F1aXJlX2xvY2soc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtcmJ0cmVlLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jCmluZGV4IDkzMGNhZDQuLjZhN2U0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtcmJ0cmVlLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1yYnRyZWUuYwpAQCAtMjMsMTYgKzIzLDE2IEBACiBzdGF0aWMgaW50IHJlZ2NhY2hlX3JidHJlZV9leGl0KHN0cnVjdCByZWdtYXAgKm1hcCk7CiAKIHN0cnVjdCByZWdjYWNoZV9yYnRyZWVfbm9kZSB7Ci0JLyogdGhlIGFjdHVhbCByYnRyZWUgbm9kZSBob2xkaW5nIHRoaXMgYmxvY2sgKi8KLQlzdHJ1Y3QgcmJfbm9kZSBub2RlOwotCS8qIGJhc2UgcmVnaXN0ZXIgaGFuZGxlZCBieSB0aGlzIGJsb2NrICovCi0JdW5zaWduZWQgaW50IGJhc2VfcmVnOwogCS8qIGJsb2NrIG9mIGFkamFjZW50IHJlZ2lzdGVycyAqLwogCXZvaWQgKmJsb2NrOwogCS8qIFdoaWNoIHJlZ2lzdGVycyBhcmUgcHJlc2VudCAqLwogCWxvbmcgKmNhY2hlX3ByZXNlbnQ7CisJLyogYmFzZSByZWdpc3RlciBoYW5kbGVkIGJ5IHRoaXMgYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgYmFzZV9yZWc7CiAJLyogbnVtYmVyIG9mIHJlZ2lzdGVycyBhdmFpbGFibGUgaW4gdGhlIGJsb2NrICovCiAJdW5zaWduZWQgaW50IGJsa2xlbjsKKwkvKiB0aGUgYWN0dWFsIHJidHJlZSBub2RlIGhvbGRpbmcgdGhpcyBibG9jayAqLworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHJlZ2NhY2hlX3JidHJlZV9jdHggewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtaTJjLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYwppbmRleCBlYmQxODk1Li5jYTE5M2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYwpAQCAtMTQsNiArMTQsNzkgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAorCitzdGF0aWMgaW50IHJlZ21hcF9zbWJ1c19ieXRlX3JlZ19yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICp2YWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChkZXYpOworCWludCByZXQ7CisKKwlpZiAocmVnID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaTJjLCByZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKnZhbCA9IHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZ21hcF9zbWJ1c19ieXRlX3JlZ193cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQ7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRvX2kyY19jbGllbnQoZGV2KTsKKworCWlmICh2YWwgPiAweGZmIHx8IHJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoaTJjLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2J1cyByZWdtYXBfc21idXNfYnl0ZSA9IHsKKwkucmVnX3dyaXRlID0gcmVnbWFwX3NtYnVzX2J5dGVfcmVnX3dyaXRlLAorCS5yZWdfcmVhZCA9IHJlZ21hcF9zbWJ1c19ieXRlX3JlZ19yZWFkLAorfTsKKworc3RhdGljIGludCByZWdtYXBfc21idXNfd29yZF9yZWdfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdmFsKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQ7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKHJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGkyYywgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSp2YWwgPSByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWdtYXBfc21idXNfd29yZF9yZWdfd3JpdGUodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0OworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlpZiAodmFsID4gMHhmZmZmIHx8IHJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoaTJjLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2J1cyByZWdtYXBfc21idXNfd29yZCA9IHsKKwkucmVnX3dyaXRlID0gcmVnbWFwX3NtYnVzX3dvcmRfcmVnX3dyaXRlLAorCS5yZWdfcmVhZCA9IHJlZ21hcF9zbWJ1c193b3JkX3JlZ19yZWFkLAorfTsKKwogc3RhdGljIGludCByZWdtYXBfaTJjX3dyaXRlKHZvaWQgKmNvbnRleHQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0OwpAQCAtOTcsNiArMTcwLDIzIEBACiAJLnJlYWQgPSByZWdtYXBfaTJjX3JlYWQsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgKnJlZ21hcF9nZXRfaTJjX2J1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCQljb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKQoreworCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShpMmMtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCisJCXJldHVybiAmcmVnbWFwX2kyYzsKKwllbHNlIGlmIChjb25maWctPnZhbF9iaXRzID09IDE2ICYmIGNvbmZpZy0+cmVnX2JpdHMgPT0gOCAmJgorCQkgaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLAorCQkJCQkgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKKwkJcmV0dXJuICZyZWdtYXBfc21idXNfd29yZDsKKwllbHNlIGlmIChjb25maWctPnZhbF9iaXRzID09IDggJiYgY29uZmlnLT5yZWdfYml0cyA9PSA4ICYmCisJCSBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShpMmMtPmFkYXB0ZXIsCisJCQkJCSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gJnJlZ21hcF9zbWJ1c19ieXRlOworCisJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKK30KKwogLyoqCiAgKiByZWdtYXBfaW5pdF9pMmMoKTogSW5pdGlhbGlzZSByZWdpc3RlciBtYXAKICAqCkBAIC0xMDksNyArMTk5LDEyIEBACiBzdHJ1Y3QgcmVnbWFwICpyZWdtYXBfaW5pdF9pMmMoc3RydWN0IGkyY19jbGllbnQgKmkyYywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKQogewotCXJldHVybiByZWdtYXBfaW5pdCgmaTJjLT5kZXYsICZyZWdtYXBfaTJjLCAmaTJjLT5kZXYsIGNvbmZpZyk7CisJY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgKmJ1cyA9IHJlZ21hcF9nZXRfaTJjX2J1cyhpMmMsIGNvbmZpZyk7CisKKwlpZiAoSVNfRVJSKGJ1cykpCisJCXJldHVybiBFUlJfQ0FTVChidXMpOworCisJcmV0dXJuIHJlZ21hcF9pbml0KCZpMmMtPmRldiwgYnVzLCAmaTJjLT5kZXYsIGNvbmZpZyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWdtYXBfaW5pdF9pMmMpOwogCkBAIC0xMjYsNyArMjIxLDEyIEBACiBzdHJ1Y3QgcmVnbWFwICpkZXZtX3JlZ21hcF9pbml0X2kyYyhzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKQogewotCXJldHVybiBkZXZtX3JlZ21hcF9pbml0KCZpMmMtPmRldiwgJnJlZ21hcF9pMmMsICZpMmMtPmRldiwgY29uZmlnKTsKKwljb25zdCBzdHJ1Y3QgcmVnbWFwX2J1cyAqYnVzID0gcmVnbWFwX2dldF9pMmNfYnVzKGkyYywgY29uZmlnKTsKKworCWlmIChJU19FUlIoYnVzKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGJ1cyk7CisKKwlyZXR1cm4gZGV2bV9yZWdtYXBfaW5pdCgmaTJjLT5kZXYsIGJ1cywgJmkyYy0+ZGV2LCBjb25maWcpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9yZWdtYXBfaW5pdF9pMmMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pcnEuYyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWlycS5jCmluZGV4IGVkZjg4ZjIuLjYyOTlhNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWlycS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWlycS5jCkBAIC0xMCwxMyArMTAsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKQEAgLTM0Nyw2ICszNDcsOSBAQAogCWludCByZXQgPSAtRU5PTUVNOwogCXUzMiByZWc7CiAKKwlpZiAoY2hpcC0+bnVtX3JlZ3MgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bnVtX2lycXM7IGkrKykgewogCQlpZiAoY2hpcC0+aXJxc1tpXS5yZWdfb2Zmc2V0ICUgbWFwLT5yZWdfc3RyaWRlKQogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1tbWlvLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1tbWlvLmMKaW5kZXggMWUwM2U3Zi4uMDRhMzI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtbW1pby5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLW1taW8uYwpAQCAtNjEsOSArNjEsMjggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWdtYXBfbW1pb19jb3VudF9jaGVjayhzaXplX3QgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnbWFwX21taW9fY291bnRfY2hlY2soc2l6ZV90IGNvdW50LCB1MzIgb2Zmc2V0KQogewotCUJVR19PTihjb3VudCAlIDIgIT0gMCk7CisJQlVHX09OKGNvdW50IDw9IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWdtYXBfbW1pb19nZXRfb2Zmc2V0KGNvbnN0IHZvaWQgKnJlZywgc2l6ZV90IHJlZ19zaXplKQoreworCXN3aXRjaCAocmVnX3NpemUpIHsKKwljYXNlIDE6CisJCXJldHVybiAqKHU4ICopcmVnOworCWNhc2UgMjoKKwkJcmV0dXJuICoodTE2ICopcmVnOworCWNhc2UgNDoKKwkJcmV0dXJuICoodTMyICopcmVnOworI2lmZGVmIENPTkZJR182NEJJVAorCWNhc2UgODoKKwkJcmV0dXJuICoodTY0ICopcmVnOworI2VuZGlmCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQogfQogCiBzdGF0aWMgaW50IHJlZ21hcF9tbWlvX2dhdGhlcl93cml0ZSh2b2lkICpjb250ZXh0LApAQCAtNzEsNyArOTAsNyBAQAogCQkJCSAgICBjb25zdCB2b2lkICp2YWwsIHNpemVfdCB2YWxfc2l6ZSkKIHsKIAlzdHJ1Y3QgcmVnbWFwX21taW9fY29udGV4dCAqY3R4ID0gY29udGV4dDsKLQl1MzIgb2Zmc2V0OworCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJaW50IHJldDsKIAogCXJlZ21hcF9tbWlvX3JlZ3NpemVfY2hlY2socmVnX3NpemUpOwpAQCAtODIsNyArMTAxLDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0Jb2Zmc2V0ID0gKih1MzIgKilyZWc7CisJb2Zmc2V0ID0gcmVnbWFwX21taW9fZ2V0X29mZnNldChyZWcsIHJlZ19zaXplKTsKIAogCXdoaWxlICh2YWxfc2l6ZSkgewogCQlzd2l0Y2ggKGN0eC0+dmFsX2J5dGVzKSB7CkBAIC0xMTgsOSArMTM3LDkgQEAKIHN0YXRpYyBpbnQgcmVnbWFwX21taW9fd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCByZWdtYXBfbW1pb19jb250ZXh0ICpjdHggPSBjb250ZXh0OwotCXUzMiBvZmZzZXQgPSBjdHgtPnJlZ19ieXRlcyArIGN0eC0+cGFkX2J5dGVzOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBjdHgtPnJlZ19ieXRlcyArIGN0eC0+cGFkX2J5dGVzOwogCi0JcmVnbWFwX21taW9fY291bnRfY2hlY2soY291bnQpOworCXJlZ21hcF9tbWlvX2NvdW50X2NoZWNrKGNvdW50LCBvZmZzZXQpOwogCiAJcmV0dXJuIHJlZ21hcF9tbWlvX2dhdGhlcl93cml0ZShjb250ZXh0LCBkYXRhLCBjdHgtPnJlZ19ieXRlcywKIAkJCQkJZGF0YSArIG9mZnNldCwgY291bnQgLSBvZmZzZXQpOwpAQCAtMTMxLDcgKzE1MCw3IEBACiAJCQkgICAgdm9pZCAqdmFsLCBzaXplX3QgdmFsX3NpemUpCiB7CiAJc3RydWN0IHJlZ21hcF9tbWlvX2NvbnRleHQgKmN0eCA9IGNvbnRleHQ7Ci0JdTMyIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCWludCByZXQ7CiAKIAlyZWdtYXBfbW1pb19yZWdzaXplX2NoZWNrKHJlZ19zaXplKTsKQEAgLTE0Miw3ICsxNjEsNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlvZmZzZXQgPSAqKHUzMiAqKXJlZzsKKwlvZmZzZXQgPSByZWdtYXBfbW1pb19nZXRfb2Zmc2V0KHJlZywgcmVnX3NpemUpOwogCiAJd2hpbGUgKHZhbF9zaXplKSB7CiAJCXN3aXRjaCAoY3R4LT52YWxfYnl0ZXMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC5jCmluZGV4IDYzZTMwZWYuLjc0ZDhjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAuYwpAQCAtMzUsMTAgKzM1LDE0IEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWwsCiAJCQkgICAgICAgYm9vbCAqY2hhbmdlKTsKIAorc3RhdGljIGludCBfcmVnbWFwX2J1c19yZWdfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCXVuc2lnbmVkIGludCAqdmFsKTsKIHN0YXRpYyBpbnQgX3JlZ21hcF9idXNfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJICAgIHVuc2lnbmVkIGludCAqdmFsKTsKIHN0YXRpYyBpbnQgX3JlZ21hcF9idXNfZm9ybWF0dGVkX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWwpOworc3RhdGljIGludCBfcmVnbWFwX2J1c19yZWdfd3JpdGUodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKKwkJCQkgdW5zaWduZWQgaW50IHZhbCk7CiBzdGF0aWMgaW50IF9yZWdtYXBfYnVzX3Jhd193cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCSB1bnNpZ25lZCBpbnQgdmFsKTsKIApAQCAtMTkyLDYgKzE5NiwxMyBAQAogCWJbMF0gPSBjcHVfdG9fYmUxNih2YWwgPDwgc2hpZnQpOwogfQogCitzdGF0aWMgdm9pZCByZWdtYXBfZm9ybWF0XzE2X2xlKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCV9fbGUxNiAqYiA9IGJ1ZjsKKworCWJbMF0gPSBjcHVfdG9fbGUxNih2YWwgPDwgc2hpZnQpOworfQorCiBzdGF0aWMgdm9pZCByZWdtYXBfZm9ybWF0XzE2X25hdGl2ZSh2b2lkICpidWYsIHVuc2lnbmVkIGludCB2YWwsCiAJCQkJICAgIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKQEAgLTIxNiw2ICsyMjcsMTMgQEAKIAliWzBdID0gY3B1X3RvX2JlMzIodmFsIDw8IHNoaWZ0KTsKIH0KIAorc3RhdGljIHZvaWQgcmVnbWFwX2Zvcm1hdF8zMl9sZSh2b2lkICpidWYsIHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBzaGlmdCkKK3sKKwlfX2xlMzIgKmIgPSBidWY7CisKKwliWzBdID0gY3B1X3RvX2xlMzIodmFsIDw8IHNoaWZ0KTsKK30KKwogc3RhdGljIHZvaWQgcmVnbWFwX2Zvcm1hdF8zMl9uYXRpdmUodm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgdmFsLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CkBAIC0yNDAsNiArMjU4LDEzIEBACiAJcmV0dXJuIGJlMTZfdG9fY3B1KGJbMF0pOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHJlZ21hcF9wYXJzZV8xNl9sZShjb25zdCB2b2lkICpidWYpCit7CisJY29uc3QgX19sZTE2ICpiID0gYnVmOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KGJbMF0pOworfQorCiBzdGF0aWMgdm9pZCByZWdtYXBfcGFyc2VfMTZfYmVfaW5wbGFjZSh2b2lkICpidWYpCiB7CiAJX19iZTE2ICpiID0gYnVmOwpAQCAtMjQ3LDYgKzI3MiwxMyBAQAogCWJbMF0gPSBiZTE2X3RvX2NwdShiWzBdKTsKIH0KIAorc3RhdGljIHZvaWQgcmVnbWFwX3BhcnNlXzE2X2xlX2lucGxhY2Uodm9pZCAqYnVmKQoreworCV9fbGUxNiAqYiA9IGJ1ZjsKKworCWJbMF0gPSBsZTE2X3RvX2NwdShiWzBdKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCByZWdtYXBfcGFyc2VfMTZfbmF0aXZlKGNvbnN0IHZvaWQgKmJ1ZikKIHsKIAlyZXR1cm4gKih1MTYgKilidWY7CkBAIC0yNjksNiArMzAxLDEzIEBACiAJcmV0dXJuIGJlMzJfdG9fY3B1KGJbMF0pOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHJlZ21hcF9wYXJzZV8zMl9sZShjb25zdCB2b2lkICpidWYpCit7CisJY29uc3QgX19sZTMyICpiID0gYnVmOworCisJcmV0dXJuIGxlMzJfdG9fY3B1KGJbMF0pOworfQorCiBzdGF0aWMgdm9pZCByZWdtYXBfcGFyc2VfMzJfYmVfaW5wbGFjZSh2b2lkICpidWYpCiB7CiAJX19iZTMyICpiID0gYnVmOwpAQCAtMjc2LDYgKzMxNSwxMyBAQAogCWJbMF0gPSBiZTMyX3RvX2NwdShiWzBdKTsKIH0KIAorc3RhdGljIHZvaWQgcmVnbWFwX3BhcnNlXzMyX2xlX2lucGxhY2Uodm9pZCAqYnVmKQoreworCV9fbGUzMiAqYiA9IGJ1ZjsKKworCWJbMF0gPSBsZTMyX3RvX2NwdShiWzBdKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCByZWdtYXBfcGFyc2VfMzJfbmF0aXZlKGNvbnN0IHZvaWQgKmJ1ZikKIHsKIAlyZXR1cm4gKih1MzIgKilidWY7CkBAIC00OTUsNiArNTQxLDEyIEBACiAKIAkJbWFwLT5kZWZlcl9jYWNoaW5nID0gZmFsc2U7CiAJCWdvdG8gc2tpcF9mb3JtYXRfaW5pdGlhbGl6YXRpb247CisJfSBlbHNlIGlmICghYnVzLT5yZWFkIHx8ICFidXMtPndyaXRlKSB7CisJCW1hcC0+cmVnX3JlYWQgPSBfcmVnbWFwX2J1c19yZWdfcmVhZDsKKwkJbWFwLT5yZWdfd3JpdGUgPSBfcmVnbWFwX2J1c19yZWdfd3JpdGU7CisKKwkJbWFwLT5kZWZlcl9jYWNoaW5nID0gZmFsc2U7CisJCWdvdG8gc2tpcF9mb3JtYXRfaW5pdGlhbGl6YXRpb247CiAJfSBlbHNlIHsKIAkJbWFwLT5yZWdfcmVhZCAgPSBfcmVnbWFwX2J1c19yZWFkOwogCX0KQEAgLTYwOCw2ICs2NjAsMTEgQEAKIAkJCW1hcC0+Zm9ybWF0LnBhcnNlX3ZhbCA9IHJlZ21hcF9wYXJzZV8xNl9iZTsKIAkJCW1hcC0+Zm9ybWF0LnBhcnNlX2lucGxhY2UgPSByZWdtYXBfcGFyc2VfMTZfYmVfaW5wbGFjZTsKIAkJCWJyZWFrOworCQljYXNlIFJFR01BUF9FTkRJQU5fTElUVExFOgorCQkJbWFwLT5mb3JtYXQuZm9ybWF0X3ZhbCA9IHJlZ21hcF9mb3JtYXRfMTZfbGU7CisJCQltYXAtPmZvcm1hdC5wYXJzZV92YWwgPSByZWdtYXBfcGFyc2VfMTZfbGU7CisJCQltYXAtPmZvcm1hdC5wYXJzZV9pbnBsYWNlID0gcmVnbWFwX3BhcnNlXzE2X2xlX2lucGxhY2U7CisJCQlicmVhazsKIAkJY2FzZSBSRUdNQVBfRU5ESUFOX05BVElWRToKIAkJCW1hcC0+Zm9ybWF0LmZvcm1hdF92YWwgPSByZWdtYXBfZm9ybWF0XzE2X25hdGl2ZTsKIAkJCW1hcC0+Zm9ybWF0LnBhcnNlX3ZhbCA9IHJlZ21hcF9wYXJzZV8xNl9uYXRpdmU7CkBAIC02MjksNiArNjg2LDExIEBACiAJCQltYXAtPmZvcm1hdC5wYXJzZV92YWwgPSByZWdtYXBfcGFyc2VfMzJfYmU7CiAJCQltYXAtPmZvcm1hdC5wYXJzZV9pbnBsYWNlID0gcmVnbWFwX3BhcnNlXzMyX2JlX2lucGxhY2U7CiAJCQlicmVhazsKKwkJY2FzZSBSRUdNQVBfRU5ESUFOX0xJVFRMRToKKwkJCW1hcC0+Zm9ybWF0LmZvcm1hdF92YWwgPSByZWdtYXBfZm9ybWF0XzMyX2xlOworCQkJbWFwLT5mb3JtYXQucGFyc2VfdmFsID0gcmVnbWFwX3BhcnNlXzMyX2xlOworCQkJbWFwLT5mb3JtYXQucGFyc2VfaW5wbGFjZSA9IHJlZ21hcF9wYXJzZV8zMl9sZV9pbnBsYWNlOworCQkJYnJlYWs7CiAJCWNhc2UgUkVHTUFQX0VORElBTl9OQVRJVkU6CiAJCQltYXAtPmZvcm1hdC5mb3JtYXRfdmFsID0gcmVnbWFwX2Zvcm1hdF8zMl9uYXRpdmU7CiAJCQltYXAtPmZvcm1hdC5wYXJzZV92YWwgPSByZWdtYXBfcGFyc2VfMzJfbmF0aXZlOwpAQCAtMTI4NCw2ICsxMzQ2LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBfcmVnbWFwX2J1c19yZWdfd3JpdGUodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKKwkJCQkgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgcmVnbWFwICptYXAgPSBjb250ZXh0OworCisJcmV0dXJuIG1hcC0+YnVzLT5yZWdfd3JpdGUobWFwLT5idXNfY29udGV4dCwgcmVnLCB2YWwpOworfQorCiBzdGF0aWMgaW50IF9yZWdtYXBfYnVzX3Jhd193cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCSB1bnNpZ25lZCBpbnQgdmFsKQogewpAQCAtMTYxNSw2ICsxNjg1LDkgQEAKIAlzaXplX3QgcGFpcl9zaXplID0gcmVnX2J5dGVzICsgcGFkX2J5dGVzICsgdmFsX2J5dGVzOwogCXNpemVfdCBsZW4gPSBwYWlyX3NpemUgKiBudW1fcmVnczsKIAorCWlmICghbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWJ1ZiA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjYyLDcgKzE3MzUsNyBAQAogCWludCByZXQ7CiAJaW50IGksIG47CiAJc3RydWN0IHJlZ19kZWZhdWx0ICpiYXNlOwotCXVuc2lnbmVkIGludCB0aGlzX3BhZ2U7CisJdW5zaWduZWQgaW50IHRoaXNfcGFnZSA9IDA7CiAJLyoKIAkgKiB0aGUgc2V0IG9mIHJlZ2lzdGVycyBhcmUgbm90IG5lY2Nlc3NhcmlseSBpbiBvcmRlciwgYnV0CiAJICogc2luY2UgdGhlIG9yZGVyIG9mIHdyaXRlIG11c3QgYmUgcHJlc2VydmVkIHRoaXMgYWxnb3JpdGhtCkBAIC0xOTI1LDYgKzE5OTgsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9yZWdtYXBfYnVzX3JlZ19yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJCQkJdW5zaWduZWQgaW50ICp2YWwpCit7CisJc3RydWN0IHJlZ21hcCAqbWFwID0gY29udGV4dDsKKworCXJldHVybiBtYXAtPmJ1cy0+cmVnX3JlYWQobWFwLT5idXNfY29udGV4dCwgcmVnLCB2YWwpOworfQorCiBzdGF0aWMgaW50IF9yZWdtYXBfYnVzX3JlYWQodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICB1bnNpZ25lZCBpbnQgKnZhbCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggNzQ4ZGVhNC4uNzU4ZGEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTE0MDYsNyArMTQwNiw3IEBACiAKIAkJdHJhY2sgPSBibG9jayAvIChmbG9wcHktPmR0eXBlLT5zZWN0cyAqIGZsb3BweS0+dHlwZS0+c2VjdF9tdWx0KTsKIAkJc2VjdG9yID0gYmxvY2sgJSAoZmxvcHB5LT5kdHlwZS0+c2VjdHMgKiBmbG9wcHktPnR5cGUtPnNlY3RfbXVsdCk7Ci0JCWRhdGEgPSBycS0+YnVmZmVyICsgNTEyICogY250OworCQlkYXRhID0gYmlvX2RhdGEocnEtPmJpbykgKyA1MTIgKiBjbnQ7CiAjaWZkZWYgREVCVUcKIAkJcHJpbnRrKCJhY2Nlc3MgdG8gdHJhY2sgJWQsIHNlY3RvciAlZCwgd2l0aCBidWZmZXIgYXQgIgogCQkgICAgICAgIjB4JTA4bHhcbiIsIHRyYWNrLCBzZWN0b3IsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwppbmRleCA5NmI2MjllLi4yMTA0YjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAKIAlSZXFDbnQgPSAwOwogCVJlcUNtZCA9IHJxX2RhdGFfZGlyKGZkX3JlcXVlc3QpOwogCVJlcUJsb2NrID0gYmxrX3JxX3BvcyhmZF9yZXF1ZXN0KTsKLQlSZXFCdWZmZXIgPSBmZF9yZXF1ZXN0LT5idWZmZXI7CisJUmVxQnVmZmVyID0gYmlvX2RhdGEoZmRfcmVxdWVzdC0+YmlvKTsKIAlzZXR1cF9yZXFfcGFyYW1zKCBkcml2ZSApOwogCWRvX2ZkX2FjdGlvbiggZHJpdmUgKTsKIApAQCAtMTk1Miw3ICsxOTUyLDcgQEAKIAkJZ290byBFbm9tZW07CiAJfQogCVRyYWNrQnVmZmVyID0gRE1BQnVmZmVyICsgNTEyOwotCVBoeXNETUFCdWZmZXIgPSB2aXJ0X3RvX3BoeXMoRE1BQnVmZmVyKTsKKwlQaHlzRE1BQnVmZmVyID0gYXRhcmlfc3RyYW1fdG9fcGh5cyhETUFCdWZmZXIpOwogCVBoeXNUcmFja0J1ZmZlciA9IHZpcnRfdG9fcGh5cyhUcmFja0J1ZmZlcik7CiAJQnVmZmVyRHJpdmUgPSBCdWZmZXJTaWRlID0gQnVmZmVyVHJhY2sgPSAtMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDczODk0Y2EuLjQ1OTVjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTQwODAsNyArNDA4MCw3IEBACiAJCWdvdG8gZGVmYXVsdF9pbnRfbW9kZTsKIAogCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KGgtPnBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKLQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGgtPnBkZXYsIGNjaXNzX21zaXhfZW50cmllcywgNCk7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeF9leGFjdChoLT5wZGV2LCBjY2lzc19tc2l4X2VudHJpZXMsIDQpOwogCQlpZiAoIWVycikgewogCQkJaC0+aW50clswXSA9IGNjaXNzX21zaXhfZW50cmllc1swXS52ZWN0b3I7CiAJCQloLT5pbnRyWzFdID0gY2Npc3NfbXNpeF9lbnRyaWVzWzFdLnZlY3RvcjsKQEAgLTQwODgsMTAgKzQwODgsNiBAQAogCQkJaC0+aW50clszXSA9IGNjaXNzX21zaXhfZW50cmllc1szXS52ZWN0b3I7CiAJCQloLT5tc2l4X3ZlY3RvciA9IDE7CiAJCQlyZXR1cm47Ci0JCX0KLQkJaWYgKGVyciA+IDApIHsKLQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCi0JCQkJIm9ubHkgJWQgTVNJLVggdmVjdG9ycyBhdmFpbGFibGVcbiIsIGVycik7CiAJCX0gZWxzZSB7CiAJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAogCQkJCSJNU0ktWCBpbml0IGZhaWxlZCAlZFxuIiwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2FjdGxvZy5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKaW5kZXggOTBhZTRiYS4uMDVhMTc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kcmJkX2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfZGVidWcuaD4KICNpbmNsdWRlICJkcmJkX2ludC5oIgotI2luY2x1ZGUgImRyYmRfd3JhcHBlcnMuaCIKIAogCiBlbnVtIGFsX3RyYW5zYWN0aW9uX3R5cGVzIHsKQEAgLTIwNCw3ICsyMDMsNyBAQAogCiAJQlVHX09OKCFiZGV2LT5tZF9iZGV2KTsKIAotCWRyYmRfZGJnKGRldmljZSwgIm1ldGFfZGF0YSBpbzogJXMgWyVkXTolcygsJWxsdXMsJXMpICVwU1xuIiwKKwlkeW5hbWljX2RyYmRfZGJnKGRldmljZSwgIm1ldGFfZGF0YSBpbzogJXMgWyVkXTolcygsJWxsdXMsJXMpICVwU1xuIiwKIAkgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgX19mdW5jX18sCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNlY3RvciwgKHJ3ICYgV1JJVEUpID8gIldSSVRFIiA6ICJSRUFEIiwKIAkgICAgICh2b2lkKilfUkVUX0lQXyApOwpAQCAtMjc2LDcgKzI3NSw2IEBACiAJcmV0dXJuIF9hbF9nZXQoZGV2aWNlLCBmaXJzdCwgdHJ1ZSk7CiB9CiAKLXN0YXRpYwogYm9vbCBkcmJkX2FsX2JlZ2luX2lvX3ByZXBhcmUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkcmJkX2ludGVydmFsICppKQogewogCS8qIGZvciBiaW9zIGNyb3NzaW5nIGFjdGl2aXR5IGxvZyBleHRlbnQgYm91bmRhcmllcywKQEAgLTg0Niw3ICs4NDQsNyBAQAogCWludCB3YWtlX3VwID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHNpemUgPD0gMCB8fCAhSVNfQUxJR05FRChzaXplLCA1MTIpIHx8IHNpemUgPiBEUkJEX01BWF9CSU9fU0laRSkgeworCWlmIChzaXplIDw9IDAgfHwgIUlTX0FMSUdORUQoc2l6ZSwgNTEyKSB8fCBzaXplID4gRFJCRF9NQVhfRElTQ0FSRF9TSVpFKSB7CiAJCWRyYmRfZXJyKGRldmljZSwgImRyYmRfc2V0X2luX3N5bmM6IHNlY3Rvcj0lbGx1cyBzaXplPSVkIG5vbnNlbnNlIVxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXNlY3Rvciwgc2l6ZSk7CiAJCXJldHVybjsKQEAgLTkyMCw3ICs5MTgsNyBAQAogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCi0JaWYgKHNpemUgPCAwIHx8ICFJU19BTElHTkVEKHNpemUsIDUxMikgfHwgc2l6ZSA+IERSQkRfTUFYX0JJT19TSVpFKSB7CisJaWYgKHNpemUgPCAwIHx8ICFJU19BTElHTkVEKHNpemUsIDUxMikgfHwgc2l6ZSA+IERSQkRfTUFYX0RJU0NBUkRfU0laRSkgewogCQlkcmJkX2VycihkZXZpY2UsICJzZWN0b3I6ICVsbHVzLCBzaXplOiAlZFxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VjdG9yLCBzaXplKTsKIAkJcmV0dXJuIDA7CkBAIC0xMDIzLDggKzEwMjEsNyBAQAogCXVuc2lnbmVkIGludCBlbnIgPSBCTV9TRUNUX1RPX0VYVChzZWN0b3IpOwogCXN0cnVjdCBibV9leHRlbnQgKmJtX2V4dDsKIAlpbnQgaSwgc2lnOwotCWludCBzYSA9IDIwMDsgLyogU3RlcCBhc2lkZSAyMDAgdGltZXMsIHRoZW4gZ3JhYiB0aGUgZXh0ZW50IGFuZCBsZXQgYXBwLUlPIHdhaXQuCi0JCQkgMjAwIHRpbWVzIC0+IDIwIHNlY29uZHMuICovCisJYm9vbCBzYTsKIAogcmV0cnk6CiAJc2lnID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldmljZS0+YWxfd2FpdCwKQEAgLTEwMzUsMTIgKzEwMzIsMTUgQEAKIAlpZiAodGVzdF9iaXQoQk1FX0xPQ0tFRCwgJmJtX2V4dC0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAorCS8qIHN0ZXAgYXNpZGUgb25seSB3aGlsZSB3ZSBhcmUgYWJvdmUgYy1taW4tcmF0ZTsgdW5sZXNzIGRpc2FibGVkLiAqLworCXNhID0gZHJiZF9yc19jX21pbl9yYXRlX3Rocm90dGxlKGRldmljZSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQUxfRVhUX1BFUl9CTV9TRUNUOyBpKyspIHsKIAkJc2lnID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldmljZS0+YWxfd2FpdCwKIAkJCQkJICAgICAgICFfaXNfaW5fYWwoZGV2aWNlLCBlbnIgKiBBTF9FWFRfUEVSX0JNX1NFQ1QgKyBpKSB8fAotCQkJCQkgICAgICAgdGVzdF9iaXQoQk1FX1BSSU9SSVRZLCAmYm1fZXh0LT5mbGFncykpOworCQkJCQkgICAgICAgKHNhICYmIHRlc3RfYml0KEJNRV9QUklPUklUWSwgJmJtX2V4dC0+ZmxhZ3MpKSk7CiAKLQkJaWYgKHNpZyB8fCAodGVzdF9iaXQoQk1FX1BSSU9SSVRZLCAmYm1fZXh0LT5mbGFncykgJiYgc2EpKSB7CisJCWlmIChzaWcgfHwgKHNhICYmIHRlc3RfYml0KEJNRV9QUklPUklUWSwgJmJtX2V4dC0+ZmxhZ3MpKSkgewogCQkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5hbF9sb2NrKTsKIAkJCWlmIChsY19wdXQoZGV2aWNlLT5yZXN5bmMsICZibV9leHQtPmxjZSkgPT0gMCkgewogCQkJCWJtX2V4dC0+ZmxhZ3MgPSAwOyAvKiBjbGVhcnMgQk1FX05PX1dSSVRFUyBhbmQgZXZlbnR1YWxseSBCTUVfUFJJT1JJVFkgKi8KQEAgLTEwNTIsOSArMTA1Miw2IEBACiAJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCWlmIChzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTApKQogCQkJCXJldHVybiAtRUlOVFI7Ci0JCQlpZiAoc2EgJiYgLS1zYSA9PSAwKQotCQkJCWRyYmRfd2FybihkZXZpY2UsICJkcmJkX3JzX2JlZ2luX2lvKCkgc3RlcHBlZCBhc2lkZSBmb3IgMjBzZWMuIgotCQkJCQkgIlJlc3luYyBzdGFsbGVkP1xuIik7CiAJCQlnb3RvIHJldHJ5OwogCQl9CiAJfQpAQCAtMTI4OCw3ICsxMjg1LDcgQEAKIAlzZWN0b3JfdCBlc2VjdG9yLCBucl9zZWN0b3JzOwogCWludCB3YWtlX3VwID0gMDsKIAotCWlmIChzaXplIDw9IDAgfHwgIUlTX0FMSUdORUQoc2l6ZSwgNTEyKSB8fCBzaXplID4gRFJCRF9NQVhfQklPX1NJWkUpIHsKKwlpZiAoc2l6ZSA8PSAwIHx8ICFJU19BTElHTkVEKHNpemUsIDUxMikgfHwgc2l6ZSA+IERSQkRfTUFYX0RJU0NBUkRfU0laRSkgewogCQlkcmJkX2VycihkZXZpY2UsICJkcmJkX3JzX2ZhaWxlZF9pbzogc2VjdG9yPSVsbHVzIHNpemU9JWQgbm9uc2Vuc2UhXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VjdG9yLCBzaXplKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmggYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaAppbmRleCBlNzA5M2Q0Li5hNzZjZWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaApAQCAtMzgyLDYgKzM4MiwxMiBAQAogCV9fRUVfQ0FMTF9BTF9DT01QTEVURV9JTywKIAlfX0VFX01BWV9TRVRfSU5fU1lOQywKIAorCS8qIGlzIHRoaXMgYSBUUklNIGFrYSBSRVFfRElTQ0FSRD8gKi8KKwlfX0VFX0lTX1RSSU0sCisJLyogb3VyIGxvd2VyIGxldmVsIGNhbm5vdCBoYW5kbGUgdHJpbSwKKwkgKiBhbmQgd2Ugd2FudCB0byBmYWxsIGJhY2sgdG8gemVyb291dCBpbnN0ZWFkICovCisJX19FRV9JU19UUklNX1VTRV9aRVJPT1VULAorCiAJLyogSW4gY2FzZSBhIGJhcnJpZXIgZmFpbGVkLAogCSAqIHdlIG5lZWQgdG8gcmVzdWJtaXQgd2l0aG91dCB0aGUgYmFycmllciBmbGFnLiAqLwogCV9fRUVfUkVTVUJNSVRURUQsCkBAIC00MDUsNyArNDExLDkgQEAKIH07CiAjZGVmaW5lIEVFX0NBTExfQUxfQ09NUExFVEVfSU8gKDE8PF9fRUVfQ0FMTF9BTF9DT01QTEVURV9JTykKICNkZWZpbmUgRUVfTUFZX1NFVF9JTl9TWU5DICAgICAoMTw8X19FRV9NQVlfU0VUX0lOX1NZTkMpCi0jZGVmaW5lCUVFX1JFU1VCTUlUVEVEICAgICAgICAgKDE8PF9fRUVfUkVTVUJNSVRURUQpCisjZGVmaW5lIEVFX0lTX1RSSU0gICAgICAgICAgICAgKDE8PF9fRUVfSVNfVFJJTSkKKyNkZWZpbmUgRUVfSVNfVFJJTV9VU0VfWkVST09VVCAoMTw8X19FRV9JU19UUklNX1VTRV9aRVJPT1VUKQorI2RlZmluZSBFRV9SRVNVQk1JVFRFRCAgICAgICAgICgxPDxfX0VFX1JFU1VCTUlUVEVEKQogI2RlZmluZSBFRV9XQVNfRVJST1IgICAgICAgICAgICgxPDxfX0VFX1dBU19FUlJPUikKICNkZWZpbmUgRUVfSEFTX0RJR0VTVCAgICAgICAgICAoMTw8X19FRV9IQVNfRElHRVNUKQogI2RlZmluZSBFRV9SRVNUQVJUX1JFUVVFU1RTCSgxPDxfX0VFX1JFU1RBUlRfUkVRVUVTVFMpCkBAIC01NzksNiArNTg3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsKIAlzdHJ1Y3QgcmVzX29wdHMgcmVzX29wdHM7CiAJc3RydWN0IG11dGV4IGNvbmZfdXBkYXRlOwkvKiBtdXRleCBmb3IgcmVhZHktY29weS11cGRhdGUgb2YgbmV0X2NvbmYgYW5kIGRpc2tfY29uZiAqLworCXN0cnVjdCBtdXRleCBhZG1fbXV0ZXg7CQkvKiBtdXRleCB0byBzZXJpYWxpemUgYWRtaW5pc3RyYXRpdmUgcmVxdWVzdHMgKi8KIAlzcGlubG9ja190IHJlcV9sb2NrOwogCiAJdW5zaWduZWQgc3VzcDoxOwkJLyogSU8gc3VzcGVuZGVkIGJ5IHVzZXIgKi8KQEAgLTYwOSw2ICs2MTgsNyBAQAogCXN0cnVjdCBkcmJkX3NvY2tldCBkYXRhOwkvKiBkYXRhL2JhcnJpZXIvY3N0YXRlL3BhcmFtZXRlciBwYWNrZXRzICovCiAJc3RydWN0IGRyYmRfc29ja2V0IG1ldGE7CS8qIHBpbmcvYWNrIChtZXRhZGF0YSkgcGFja2V0cyAqLwogCWludCBhZ3JlZWRfcHJvX3ZlcnNpb247CQkvKiBhY3R1YWxseSB1c2VkIHByb3RvY29sIHZlcnNpb24gKi8KKwl1MzIgYWdyZWVkX2ZlYXR1cmVzOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9yZWNlaXZlZDsJLyogaW4gamlmZmllcywgZWl0aGVyIHNvY2tldCAqLwogCXVuc2lnbmVkIGludCBrb19jb3VudDsKIApAQCAtODE0LDYgKzgyNCwyOCBAQAogCXN0cnVjdCBzdWJtaXRfd29ya2VyIHN1Ym1pdDsKIH07CiAKK3N0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IHsKKwkvKiBhc3NpZ25lZCBmcm9tIGRyYmRfZ2VubG1zZ2hkciAqLworCXVuc2lnbmVkIGludCBtaW5vcjsKKwkvKiBhc3NpZ25lZCBmcm9tIHJlcXVlc3QgYXR0cmlidXRlcywgaWYgcHJlc2VudCAqLworCXVuc2lnbmVkIGludCB2b2x1bWU7CisjZGVmaW5lIFZPTFVNRV9VTlNQRUNJRklFRAkJKC0xVSkKKwkvKiBwb2ludGVyIGludG8gdGhlIHJlcXVlc3Qgc2tiLAorCSAqIGxpbWl0ZWQgbGlmZXRpbWUhICovCisJY2hhciAqcmVzb3VyY2VfbmFtZTsKKwlzdHJ1Y3QgbmxhdHRyICpteV9hZGRyOworCXN0cnVjdCBubGF0dHIgKnBlZXJfYWRkcjsKKworCS8qIHJlcGx5IGJ1ZmZlciAqLworCXN0cnVjdCBza19idWZmICpyZXBseV9za2I7CisJLyogcG9pbnRlciBpbnRvIHJlcGx5IGJ1ZmZlciAqLworCXN0cnVjdCBkcmJkX2dlbmxtc2doZHIgKnJlcGx5X2RoOworCS8qIHJlc29sdmVkIGZyb20gYXR0cmlidXRlcywgaWYgcG9zc2libGUgKi8KKwlzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgZHJiZF9yZXNvdXJjZSAqcmVzb3VyY2U7CisJc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbjsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRyYmRfZGV2aWNlICptaW5vcl90b19kZXZpY2UodW5zaWduZWQgaW50IG1pbm9yKQogewogCXJldHVybiAoc3RydWN0IGRyYmRfZGV2aWNlICopaWRyX2ZpbmQoJmRyYmRfZGV2aWNlcywgbWlub3IpOwpAQCAtODIxLDcgKzg1Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKmZpcnN0X3BlZXJfZGV2aWNlKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlKQogewotCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZpY2UtPnBlZXJfZGV2aWNlcywgc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UsIHBlZXJfZGV2aWNlcyk7CisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZGV2aWNlLT5wZWVyX2RldmljZXMsIHN0cnVjdCBkcmJkX3BlZXJfZGV2aWNlLCBwZWVyX2RldmljZXMpOwogfQogCiAjZGVmaW5lIGZvcl9lYWNoX3Jlc291cmNlKHJlc291cmNlLCBfcmVzb3VyY2VzKSBcCkBAIC0xMTM5LDYgKzExNzEsMTIgQEAKICNkZWZpbmUgRFJCRF9NQVhfU0laRV9IODBfUEFDS0VUICgxVSA8PCAxNSkgLyogSGVhZGVyIDgwIG9ubHkgYWxsb3dzIHBhY2tldHMgdXAgdG8gMzJLaUIgZGF0YSAqLwogI2RlZmluZSBEUkJEX01BWF9CSU9fU0laRV9QOTUgICAgKDFVIDw8IDE3KSAvKiBQcm90b2NvbCA5NSB0byA5OSBhbGxvd3MgYmlvcyB1cCB0byAxMjhLaUIgKi8KIAorLyogRm9yIG5vdywgZG9uJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBhY3Rpdml0eSBsb2cgZXh0ZW50IHdvcnRoIG9mIGRhdGEKKyAqIHRvIGJlIGRpc2NhcmRlZCBpbiBvbmUgZ28uIFdlIG1heSBuZWVkIHRvIHJld29yayBkcmJkX2FsX2JlZ2luX2lvKCkKKyAqIHRvIGFsbG93IGZvciBldmVuIGxhcmdlciBkaXNjYXJkIHJhbmdlcyAqLworI2RlZmluZSBEUkJEX01BWF9ESVNDQVJEX1NJWkUJQUxfRVhURU5UX1NJWkUKKyNkZWZpbmUgRFJCRF9NQVhfRElTQ0FSRF9TRUNUT1JTIChEUkJEX01BWF9ESVNDQVJEX1NJWkUgPj4gOSkKKwogZXh0ZXJuIGludCAgZHJiZF9ibV9pbml0KHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlKTsKIGV4dGVybiBpbnQgIGRyYmRfYm1fcmVzaXplKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgc2V0X25ld19iaXRzKTsKIGV4dGVybiB2b2lkIGRyYmRfYm1fY2xlYW51cChzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSk7CkBAIC0xMjI5LDkgKzEyNjcsOSBAQAogZXh0ZXJuIHJ3bG9ja190IGdsb2JhbF9zdGF0ZV9sb2NrOwogCiBleHRlcm4gaW50IGNvbm5fbG93ZXN0X21pbm9yKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOwotZW51bSBkcmJkX3JldF9jb2RlIGRyYmRfY3JlYXRlX2RldmljZShzdHJ1Y3QgZHJiZF9yZXNvdXJjZSAqcmVzb3VyY2UsIHVuc2lnbmVkIGludCBtaW5vciwgaW50IHZucik7CitleHRlcm4gZW51bSBkcmJkX3JldF9jb2RlIGRyYmRfY3JlYXRlX2RldmljZShzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCAqYWRtX2N0eCwgdW5zaWduZWQgaW50IG1pbm9yKTsKIGV4dGVybiB2b2lkIGRyYmRfZGVzdHJveV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpOwotZXh0ZXJuIHZvaWQgZHJiZF9kZWxldGVfZGV2aWNlKHN0cnVjdCBkcmJkX2RldmljZSAqbWRldik7CitleHRlcm4gdm9pZCBkcmJkX2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpOwogCiBleHRlcm4gc3RydWN0IGRyYmRfcmVzb3VyY2UgKmRyYmRfY3JlYXRlX3Jlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgZHJiZF9mcmVlX3Jlc291cmNlKHN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSk7CkBAIC0xMjU3LDcgKzEyOTUsNyBAQAogCiAKIC8qIGRyYmRfbmwuYyAqLwotZXh0ZXJuIGludCBkcmJkX21zZ19wdXRfaW5mbyhjb25zdCBjaGFyICppbmZvKTsKK2V4dGVybiBpbnQgZHJiZF9tc2dfcHV0X2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqaW5mbyk7CiBleHRlcm4gdm9pZCBkcmJkX3N1c3BlbmRfaW8oc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpOwogZXh0ZXJuIHZvaWQgZHJiZF9yZXN1bWVfaW8oc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpOwogZXh0ZXJuIGNoYXIgKnBwc2l6ZShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKTsKQEAgLTEyODMsNiArMTMyMSwxMCBAQAogZXh0ZXJuIGludCBkcmJkX2toZWxwZXIoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIGNoYXIgKmNtZCk7CiAKIC8qIGRyYmRfd29ya2VyLmMgKi8KKy8qIGJpX2VuZF9pbyBoYW5kbGVycyAqLworZXh0ZXJuIHZvaWQgZHJiZF9tZF9pb19jb21wbGV0ZShzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcik7CitleHRlcm4gdm9pZCBkcmJkX3BlZXJfcmVxdWVzdF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcik7CitleHRlcm4gdm9pZCBkcmJkX3JlcXVlc3RfZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBkcmJkX3dvcmtlcihzdHJ1Y3QgZHJiZF90aHJlYWQgKnRoaSk7CiBlbnVtIGRyYmRfcmV0X2NvZGUgZHJiZF9yZXN5bmNfYWZ0ZXJfdmFsaWQoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIGludCBvX21pbm9yKTsKIHZvaWQgZHJiZF9yZXN5bmNfYWZ0ZXJfY2hhbmdlZChzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSk7CkBAIC0xMzMyLDE2ICsxMzc0LDIwIEBACiBleHRlcm4gdm9pZCByZXN5bmNfdGltZXJfZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKIGV4dGVybiB2b2lkIHN0YXJ0X3Jlc3luY190aW1lcl9mbih1bnNpZ25lZCBsb25nIGRhdGEpOwogCitleHRlcm4gdm9pZCBkcmJkX2VuZGlvX3dyaXRlX3NlY19maW5hbChzdHJ1Y3QgZHJiZF9wZWVyX3JlcXVlc3QgKnBlZXJfcmVxKTsKKwogLyogZHJiZF9yZWNlaXZlci5jICovCiBleHRlcm4gaW50IGRyYmRfcmVjZWl2ZXIoc3RydWN0IGRyYmRfdGhyZWFkICp0aGkpOwogZXh0ZXJuIGludCBkcmJkX2FzZW5kZXIoc3RydWN0IGRyYmRfdGhyZWFkICp0aGkpOwotZXh0ZXJuIGludCBkcmJkX3JzX3Nob3VsZF9zbG93X2Rvd24oc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIHNlY3Rvcl90IHNlY3Rvcik7CitleHRlcm4gYm9vbCBkcmJkX3JzX2NfbWluX3JhdGVfdGhyb3R0bGUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIGJvb2wgZHJiZF9yc19zaG91bGRfc2xvd19kb3duKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBzZWN0b3JfdCBzZWN0b3IpOwogZXh0ZXJuIGludCBkcmJkX3N1Ym1pdF9wZWVyX3JlcXVlc3Qoc3RydWN0IGRyYmRfZGV2aWNlICosCiAJCQkJICAgIHN0cnVjdCBkcmJkX3BlZXJfcmVxdWVzdCAqLCBjb25zdCB1bnNpZ25lZCwKIAkJCQkgICAgY29uc3QgaW50KTsKIGV4dGVybiBpbnQgZHJiZF9mcmVlX3BlZXJfcmVxcyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKiwgc3RydWN0IGxpc3RfaGVhZCAqKTsKIGV4dGVybiBzdHJ1Y3QgZHJiZF9wZWVyX3JlcXVlc3QgKmRyYmRfYWxsb2NfcGVlcl9yZXEoc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKiwgdTY0LAogCQkJCQkJICAgICBzZWN0b3JfdCwgdW5zaWduZWQgaW50LAorCQkJCQkJICAgICBib29sLAogCQkJCQkJICAgICBnZnBfdCkgX19tdXN0X2hvbGQobG9jYWwpOwogZXh0ZXJuIHZvaWQgX19kcmJkX2ZyZWVfcGVlcl9yZXEoc3RydWN0IGRyYmRfZGV2aWNlICosIHN0cnVjdCBkcmJkX3BlZXJfcmVxdWVzdCAqLAogCQkJCSBpbnQpOwpAQCAtMTQwMSw2ICsxNDQ3LDM3IEBACiAJCQkoY2hhciopJnZhbCwgc2l6ZW9mKHZhbCkpOwogfQogCisvKiBzZXRzIHRoZSBudW1iZXIgb2YgNTEyIGJ5dGUgc2VjdG9ycyBvZiBvdXIgdmlydHVhbCBkZXZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmJkX3NldF9teV9jYXBhY2l0eShzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwKKwkJCQkJc2VjdG9yX3Qgc2l6ZSkKK3sKKwkvKiBzZXRfY2FwYWNpdHkoZGV2aWNlLT50aGlzX2JkZXYtPmJkX2Rpc2ssIHNpemUpOyAqLworCXNldF9jYXBhY2l0eShkZXZpY2UtPnZkaXNrLCBzaXplKTsKKwlkZXZpY2UtPnRoaXNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IChsb2ZmX3Qpc2l6ZSA8PCA5OworfQorCisvKgorICogdXNlZCB0byBzdWJtaXQgb3VyIHByaXZhdGUgYmlvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmJkX2dlbmVyaWNfbWFrZV9yZXF1ZXN0KHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLAorCQkJCQkgICAgIGludCBmYXVsdF90eXBlLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJX19yZWxlYXNlKGxvY2FsKTsKKwlpZiAoIWJpby0+YmlfYmRldikgeworCQlwcmludGsoS0VSTl9FUlIgImRyYmQlZDogZHJiZF9nZW5lcmljX21ha2VfcmVxdWVzdDogIgorCQkJCSJiaW8tPmJpX2JkZXYgPT0gTlVMTFxuIiwKKwkJICAgICAgIGRldmljZV90b19taW5vcihkZXZpY2UpKTsKKwkJZHVtcF9zdGFjaygpOworCQliaW9fZW5kaW8oYmlvLCAtRU5PREVWKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkcmJkX2luc2VydF9mYXVsdChkZXZpY2UsIGZhdWx0X3R5cGUpKQorCQliaW9fZW5kaW8oYmlvLCAtRUlPKTsKKwllbHNlCisJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Cit9CisKIHZvaWQgZHJiZF9idW1wX3dyaXRlX29yZGVyaW5nKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIGVudW0gd3JpdGVfb3JkZXJpbmdfZSB3byk7CiAKIC8qIGRyYmRfcHJvYy5jICovCkBAIC0xNDEwLDYgKzE0ODcsNyBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmRyYmRfcm9sZV9zdHIoZW51bSBkcmJkX3JvbGUgcyk7CiAKIC8qIGRyYmRfYWN0bG9nLmMgKi8KK2V4dGVybiBib29sIGRyYmRfYWxfYmVnaW5faW9fcHJlcGFyZShzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRyYmRfaW50ZXJ2YWwgKmkpOwogZXh0ZXJuIGludCBkcmJkX2FsX2JlZ2luX2lvX25vbmJsb2NrKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZHJiZF9pbnRlcnZhbCAqaSk7CiBleHRlcm4gdm9pZCBkcmJkX2FsX2JlZ2luX2lvX2NvbW1pdChzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgYm9vbCBkZWxlZ2F0ZSk7CiBleHRlcm4gYm9vbCBkcmJkX2FsX2JlZ2luX2lvX2Zhc3RwYXRoKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZHJiZF9pbnRlcnZhbCAqaSk7CkBAIC0yMTQ0LDcgKzIyMjIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmZpcnN0X2Nvbm5lY3Rpb24oc3RydWN0IGRyYmRfcmVzb3VyY2UgKnJlc291cmNlKQogewotCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZyZXNvdXJjZS0+Y29ubmVjdGlvbnMsCisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmcmVzb3VyY2UtPmNvbm5lY3Rpb25zLAogCQkJCXN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24sIGNvbm5lY3Rpb25zKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCmluZGV4IDMzMWU1Y2MuLjk2MDY0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKQEAgLTE2MDcsOCArMTYwNyw4IEBACiAJCXJldHVybiBiaV9ydyAmIFJFUV9TWU5DID8gRFBfUldfU1lOQyA6IDA7CiB9CiAKLS8qIFVzZWQgdG8gc2VuZCB3cml0ZSByZXF1ZXN0cwotICogUl9QUklNQVJZIC0+IFBlZXIJKFBfREFUQSkKKy8qIFVzZWQgdG8gc2VuZCB3cml0ZSBvciBUUklNIGFrYSBSRVFfRElTQ0FSRCByZXF1ZXN0cworICogUl9QUklNQVJZIC0+IFBlZXIJKFBfREFUQSwgUF9UUklNKQogICovCiBpbnQgZHJiZF9zZW5kX2RibG9jayhzdHJ1Y3QgZHJiZF9wZWVyX2RldmljZSAqcGVlcl9kZXZpY2UsIHN0cnVjdCBkcmJkX3JlcXVlc3QgKnJlcSkKIHsKQEAgLTE2NDAsNiArMTY0MCwxNiBAQAogCQkJZHBfZmxhZ3MgfD0gRFBfU0VORF9XUklURV9BQ0s7CiAJfQogCXAtPmRwX2ZsYWdzID0gY3B1X3RvX2JlMzIoZHBfZmxhZ3MpOworCisJaWYgKGRwX2ZsYWdzICYgRFBfRElTQ0FSRCkgeworCQlzdHJ1Y3QgcF90cmltICp0ID0gKHN0cnVjdCBwX3RyaW0qKXA7CisJCXQtPnNpemUgPSBjcHVfdG9fYmUzMihyZXEtPmkuc2l6ZSk7CisJCWVyciA9IF9fc2VuZF9jb21tYW5kKHBlZXJfZGV2aWNlLT5jb25uZWN0aW9uLCBkZXZpY2UtPnZuciwgc29jaywgUF9UUklNLCBzaXplb2YoKnQpLCBOVUxMLCAwKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogb3VyIGRpZ2VzdCBpcyBzdGlsbCBvbmx5IG92ZXIgdGhlIHBheWxvYWQuCisJICogVFJJTSBkb2VzIG5vdCBjYXJyeSBhbnkgcGF5bG9hZC4gKi8KIAlpZiAoZGdzKQogCQlkcmJkX2NzdW1fYmlvKHBlZXJfZGV2aWNlLT5jb25uZWN0aW9uLT5pbnRlZ3JpdHlfdGZtLCByZXEtPm1hc3Rlcl9iaW8sIHAgKyAxKTsKIAllcnIgPSBfX3NlbmRfY29tbWFuZChwZWVyX2RldmljZS0+Y29ubmVjdGlvbiwgZGV2aWNlLT52bnIsIHNvY2ssIFBfREFUQSwgc2l6ZW9mKCpwKSArIGRncywgTlVMTCwgcmVxLT5pLnNpemUpOwpAQCAtMTY3NSw2ICsxNjg1LDcgQEAKIAkJICAgICAuLi4gQmUgbm9pc3kgYWJvdXQgZGlnZXN0IHRvbyBsYXJnZSAuLi4KIAkJfSAqLwogCX0KK291dDoKIAltdXRleF91bmxvY2soJnNvY2stPm11dGV4KTsgIC8qIGxvY2tlZCBieSBkcmJkX3ByZXBhcmVfY29tbWFuZCgpICovCiAKIAlyZXR1cm4gZXJyOwpAQCAtMjU3MCw2ICsyNTgxLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcmVzb3VyY2UtPmNvbm5lY3Rpb25zKTsKIAlsaXN0X2FkZF90YWlsX3JjdSgmcmVzb3VyY2UtPnJlc291cmNlcywgJmRyYmRfcmVzb3VyY2VzKTsKIAltdXRleF9pbml0KCZyZXNvdXJjZS0+Y29uZl91cGRhdGUpOworCW11dGV4X2luaXQoJnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZyZXNvdXJjZS0+cmVxX2xvY2spOwogCXJldHVybiByZXNvdXJjZTsKIApAQCAtMjY4NywxNCArMjY5OSwxNiBAQAogCXJldHVybiAwOwogfQogCi1lbnVtIGRyYmRfcmV0X2NvZGUgZHJiZF9jcmVhdGVfZGV2aWNlKHN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgaW50IG1pbm9yLCBpbnQgdm5yKQorZW51bSBkcmJkX3JldF9jb2RlIGRyYmRfY3JlYXRlX2RldmljZShzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCAqYWRtX2N0eCwgdW5zaWduZWQgaW50IG1pbm9yKQogeworCXN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSA9IGFkbV9jdHgtPnJlc291cmNlOwogCXN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247CiAJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKnBlZXJfZGV2aWNlLCAqdG1wX3BlZXJfZGV2aWNlOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwogCWludCBpZDsKKwlpbnQgdm5yID0gYWRtX2N0eC0+dm9sdW1lOwogCWVudW0gZHJiZF9yZXRfY29kZSBlcnIgPSBFUlJfTk9NRU07CiAKIAlkZXZpY2UgPSBtaW5vcl90b19kZXZpY2UobWlub3IpOwpAQCAtMjc2Myw3ICsyNzc3LDcgQEAKIAlpZiAoaWQgPCAwKSB7CiAJCWlmIChpZCA9PSAtRU5PU1BDKSB7CiAJCQllcnIgPSBFUlJfTUlOT1JfRVhJU1RTOwotCQkJZHJiZF9tc2dfcHV0X2luZm8oInJlcXVlc3RlZCBtaW5vciBleGlzdHMgYWxyZWFkeSIpOworCQkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC0+cmVwbHlfc2tiLCAicmVxdWVzdGVkIG1pbm9yIGV4aXN0cyBhbHJlYWR5Iik7CiAJCX0KIAkJZ290byBvdXRfbm9fbWlub3JfaWRyOwogCX0KQEAgLTI3NzMsNyArMjc4Nyw3IEBACiAJaWYgKGlkIDwgMCkgewogCQlpZiAoaWQgPT0gLUVOT1NQQykgewogCQkJZXJyID0gRVJSX01JTk9SX0VYSVNUUzsKLQkJCWRyYmRfbXNnX3B1dF9pbmZvKCJyZXF1ZXN0ZWQgbWlub3IgZXhpc3RzIGFscmVhZHkiKTsKKwkJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgtPnJlcGx5X3NrYiwgInJlcXVlc3RlZCBtaW5vciBleGlzdHMgYWxyZWFkeSIpOwogCQl9CiAJCWdvdG8gb3V0X2lkcl9yZW1vdmVfbWlub3I7CiAJfQpAQCAtMjc5NCw3ICsyODA4LDcgQEAKIAkJaWYgKGlkIDwgMCkgewogCQkJaWYgKGlkID09IC1FTk9TUEMpIHsKIAkJCQllcnIgPSBFUlJfSU5WQUxJRF9SRVFVRVNUOwotCQkJCWRyYmRfbXNnX3B1dF9pbmZvKCJyZXF1ZXN0ZWQgdm9sdW1lIGV4aXN0cyBhbHJlYWR5Iik7CisJCQkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC0+cmVwbHlfc2tiLCAicmVxdWVzdGVkIHZvbHVtZSBleGlzdHMgYWxyZWFkeSIpOwogCQkJfQogCQkJZ290byBvdXRfaWRyX3JlbW92ZV9mcm9tX3Jlc291cmNlOwogCQl9CkBAIC0yODAzLDcgKzI4MTcsNyBAQAogCiAJaWYgKGluaXRfc3VibWl0dGVyKGRldmljZSkpIHsKIAkJZXJyID0gRVJSX05PTUVNOwotCQlkcmJkX21zZ19wdXRfaW5mbygidW5hYmxlIHRvIGNyZWF0ZSBzdWJtaXQgd29ya3F1ZXVlIik7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgtPnJlcGx5X3NrYiwgInVuYWJsZSB0byBjcmVhdGUgc3VibWl0IHdvcmtxdWV1ZSIpOwogCQlnb3RvIG91dF9pZHJfcmVtb3ZlX3ZvbDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCmluZGV4IDUyNjQxNGIuLjFiMzVjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgImRyYmRfaW50LmgiCiAjaW5jbHVkZSAiZHJiZF9wcm90b2NvbC5oIgogI2luY2x1ZGUgImRyYmRfcmVxLmgiCi0jaW5jbHVkZSAiZHJiZF93cmFwcGVycy5oIgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kcmJkX2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTgyLDMyICs4MSw2IEBACiAvKiB1c2VkIGJsa2Rldl9nZXRfYnlfcGF0aCwgdG8gY2xhaW0gb3VyIG1ldGEgZGF0YSBkZXZpY2UocykgKi8KIHN0YXRpYyBjaGFyICpkcmJkX21faG9sZGVyID0gIkhhbmRzIG9mZiEgdGhpcyBpcyBEUkJEJ3MgbWV0YSBkYXRhIGRldmljZS4iOwogCi0vKiBDb25maWd1cmF0aW9uIGlzIHN0cmljdGx5IHNlcmlhbGl6ZWQsIGJlY2F1c2UgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UKLSAqIHByb2Nlc3NpbmcgaXMgc3RyaWN0bHkgc2VyaWFsaXplZCBieSB0aGUgZ2VubF9sb2NrKCkuCi0gKiBXaGljaCBtZWFucyB3ZSBjYW4gdXNlIG9uZSBzdGF0aWMgZ2xvYmFsIGRyYmRfY29uZmlnX2NvbnRleHQgc3RydWN0LgotICovCi1zdGF0aWMgc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgewotCS8qIGFzc2lnbmVkIGZyb20gZHJiZF9nZW5sbXNnaGRyICovCi0JdW5zaWduZWQgaW50IG1pbm9yOwotCS8qIGFzc2lnbmVkIGZyb20gcmVxdWVzdCBhdHRyaWJ1dGVzLCBpZiBwcmVzZW50ICovCi0JdW5zaWduZWQgaW50IHZvbHVtZTsKLSNkZWZpbmUgVk9MVU1FX1VOU1BFQ0lGSUVECQkoLTFVKQotCS8qIHBvaW50ZXIgaW50byB0aGUgcmVxdWVzdCBza2IsCi0JICogbGltaXRlZCBsaWZldGltZSEgKi8KLQljaGFyICpyZXNvdXJjZV9uYW1lOwotCXN0cnVjdCBubGF0dHIgKm15X2FkZHI7Ci0Jc3RydWN0IG5sYXR0ciAqcGVlcl9hZGRyOwotCi0JLyogcmVwbHkgYnVmZmVyICovCi0Jc3RydWN0IHNrX2J1ZmYgKnJlcGx5X3NrYjsKLQkvKiBwb2ludGVyIGludG8gcmVwbHkgYnVmZmVyICovCi0Jc3RydWN0IGRyYmRfZ2VubG1zZ2hkciAqcmVwbHlfZGg7Ci0JLyogcmVzb2x2ZWQgZnJvbSBhdHRyaWJ1dGVzLCBpZiBwb3NzaWJsZSAqLwotCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlOwotCXN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZTsKLQlzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uOwotfSBhZG1fY3R4OwotCiBzdGF0aWMgdm9pZCBkcmJkX2FkbV9zZW5kX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJZ2VubG1zZ19lbmQoc2tiLCBnZW5sbXNnX2RhdGEobmxtc2dfZGF0YShubG1zZ19oZHIoc2tiKSkpKTsKQEAgLTExNyw5ICs5MCw4IEBACiAKIC8qIFVzZWQgb24gYSBmcmVzaCAiZHJiZF9hZG1fcHJlcGFyZSJkIHJlcGx5X3NrYiwgdGhpcyBjYW5ub3QgZmFpbDogVGhlIG9ubHkKICAqIHJlYXNvbiBpdCBjb3VsZCBmYWlsIHdhcyBubyBzcGFjZSBpbiBza2IsIGFuZCB0aGVyZSBhcmUgNGsgYXZhaWxhYmxlLiAqLwotaW50IGRyYmRfbXNnX3B1dF9pbmZvKGNvbnN0IGNoYXIgKmluZm8pCitpbnQgZHJiZF9tc2dfcHV0X2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqaW5mbykKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWRtX2N0eC5yZXBseV9za2I7CiAJc3RydWN0IG5sYXR0ciAqbmxhOwogCWludCBlcnIgPSAtRU1TR1NJWkU7CiAKQEAgLTE0Myw0MiArMTE1LDQ2IEBACiAgKiBhbmQgcGVyLWZhbWlseSBwcml2YXRlIGluZm8tPnBvaW50ZXJzLgogICogQnV0IHdlIG5lZWQgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggb2xkZXIga2VybmVscy4KICAqIElmIGl0IHJldHVybnMgc3VjY2Vzc2Z1bGx5LCBhZG1fY3R4IG1lbWJlcnMgYXJlIHZhbGlkLgorICoKKyAqIEF0IHRoaXMgcG9pbnQsIHdlIHN0aWxsIHJlbHkgb24gdGhlIGdsb2JhbCBnZW5sX2xvY2soKS4KKyAqIElmIHdlIHdhbnQgdG8gYXZvaWQgdGhhdCwgYW5kIGFsbG93ICJnZW5sX2ZhbWlseS5wYXJhbGxlbF9vcHMiLCB3ZSBtYXkgbmVlZAorICogdG8gYWRkIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIGFnYWluc3Qgb2JqZWN0IGRlc3RydWN0aW9uL21vZGlmaWNhdGlvbi4KICAqLwogI2RlZmluZSBEUkJEX0FETV9ORUVEX01JTk9SCTEKICNkZWZpbmUgRFJCRF9BRE1fTkVFRF9SRVNPVVJDRQkyCiAjZGVmaW5lIERSQkRfQURNX05FRURfQ09OTkVDVElPTiA0Ci1zdGF0aWMgaW50IGRyYmRfYWRtX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKLQkJdW5zaWduZWQgZmxhZ3MpCitzdGF0aWMgaW50IGRyYmRfYWRtX3ByZXBhcmUoc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgKmFkbV9jdHgsCisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IGRyYmRfZ2VubG1zZ2hkciAqZF9pbiA9IGluZm8tPnVzZXJoZHI7CiAJY29uc3QgdTggY21kID0gaW5mby0+Z2VubGhkci0+Y21kOwogCWludCBlcnI7CiAKLQltZW1zZXQoJmFkbV9jdHgsIDAsIHNpemVvZihhZG1fY3R4KSk7CisJbWVtc2V0KGFkbV9jdHgsIDAsIHNpemVvZigqYWRtX2N0eCkpOwogCiAJLyogZ2VubF9yY3ZfbXNnIG9ubHkgY2hlY2tzIGZvciBDQVBfTkVUX0FETUlOIG9uICJHRU5MX0FETUlOX1BFUk0iIDooICovCiAJaWYgKGNtZCAhPSBEUkJEX0FETV9HRVRfU1RBVFVTICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCSAgICAgICByZXR1cm4gLUVQRVJNOwogCi0JYWRtX2N0eC5yZXBseV9za2IgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikgeworCWFkbV9jdHgtPnJlcGx5X3NrYiA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkbV9jdHgtPnJlcGx5X3NrYikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JYWRtX2N0eC5yZXBseV9kaCA9IGdlbmxtc2dfcHV0X3JlcGx5KGFkbV9jdHgucmVwbHlfc2tiLAorCWFkbV9jdHgtPnJlcGx5X2RoID0gZ2VubG1zZ19wdXRfcmVwbHkoYWRtX2N0eC0+cmVwbHlfc2tiLAogCQkJCQlpbmZvLCAmZHJiZF9nZW5sX2ZhbWlseSwgMCwgY21kKTsKIAkvKiBwdXQgb2YgYSBmZXcgYnl0ZXMgaW50byBhIGZyZXNoIHNrYiBvZiA+PSA0ayB3aWxsIGFsd2F5cyBzdWNjZWVkLgogCSAqIGJ1dCBhbnl3YXlzICovCi0JaWYgKCFhZG1fY3R4LnJlcGx5X2RoKSB7CisJaWYgKCFhZG1fY3R4LT5yZXBseV9kaCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JYWRtX2N0eC5yZXBseV9kaC0+bWlub3IgPSBkX2luLT5taW5vcjsKLQlhZG1fY3R4LnJlcGx5X2RoLT5yZXRfY29kZSA9IE5PX0VSUk9SOworCWFkbV9jdHgtPnJlcGx5X2RoLT5taW5vciA9IGRfaW4tPm1pbm9yOworCWFkbV9jdHgtPnJlcGx5X2RoLT5yZXRfY29kZSA9IE5PX0VSUk9SOwogCi0JYWRtX2N0eC52b2x1bWUgPSBWT0xVTUVfVU5TUEVDSUZJRUQ7CisJYWRtX2N0eC0+dm9sdW1lID0gVk9MVU1FX1VOU1BFQ0lGSUVEOwogCWlmIChpbmZvLT5hdHRyc1tEUkJEX05MQV9DRkdfQ09OVEVYVF0pIHsKIAkJc3RydWN0IG5sYXR0ciAqbmxhOwogCQkvKiBwYXJzZSBhbmQgdmFsaWRhdGUgb25seSAqLwpAQCAtMTg4LDExMSArMTY0LDEzMSBAQAogCiAJCS8qIEl0IHdhcyBwcmVzZW50LCBhbmQgdmFsaWQsCiAJCSAqIGNvcHkgaXQgb3ZlciB0byB0aGUgcmVwbHkgc2tiLiAqLwotCQllcnIgPSBubGFfcHV0X25vaGRyKGFkbV9jdHgucmVwbHlfc2tiLAorCQllcnIgPSBubGFfcHV0X25vaGRyKGFkbV9jdHgtPnJlcGx5X3NrYiwKIAkJCQlpbmZvLT5hdHRyc1tEUkJEX05MQV9DRkdfQ09OVEVYVF0tPm5sYV9sZW4sCiAJCQkJaW5mby0+YXR0cnNbRFJCRF9OTEFfQ0ZHX0NPTlRFWFRdKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZmFpbDsKIAotCQkvKiBhbmQgYXNzaWduIHN0dWZmIHRvIHRoZSBnbG9iYWwgYWRtX2N0eCAqLworCQkvKiBhbmQgYXNzaWduIHN0dWZmIHRvIHRoZSBhZG1fY3R4ICovCiAJCW5sYSA9IG5lc3RlZF9hdHRyX3RiW19fbmxhX3R5cGUoVF9jdHhfdm9sdW1lKV07CiAJCWlmIChubGEpCi0JCQlhZG1fY3R4LnZvbHVtZSA9IG5sYV9nZXRfdTMyKG5sYSk7CisJCQlhZG1fY3R4LT52b2x1bWUgPSBubGFfZ2V0X3UzMihubGEpOwogCQlubGEgPSBuZXN0ZWRfYXR0cl90YltfX25sYV90eXBlKFRfY3R4X3Jlc291cmNlX25hbWUpXTsKIAkJaWYgKG5sYSkKLQkJCWFkbV9jdHgucmVzb3VyY2VfbmFtZSA9IG5sYV9kYXRhKG5sYSk7Ci0JCWFkbV9jdHgubXlfYWRkciA9IG5lc3RlZF9hdHRyX3RiW19fbmxhX3R5cGUoVF9jdHhfbXlfYWRkcildOwotCQlhZG1fY3R4LnBlZXJfYWRkciA9IG5lc3RlZF9hdHRyX3RiW19fbmxhX3R5cGUoVF9jdHhfcGVlcl9hZGRyKV07Ci0JCWlmICgoYWRtX2N0eC5teV9hZGRyICYmCi0JCSAgICAgbmxhX2xlbihhZG1fY3R4Lm15X2FkZHIpID4gc2l6ZW9mKGFkbV9jdHguY29ubmVjdGlvbi0+bXlfYWRkcikpIHx8Ci0JCSAgICAoYWRtX2N0eC5wZWVyX2FkZHIgJiYKLQkJICAgICBubGFfbGVuKGFkbV9jdHgucGVlcl9hZGRyKSA+IHNpemVvZihhZG1fY3R4LmNvbm5lY3Rpb24tPnBlZXJfYWRkcikpKSB7CisJCQlhZG1fY3R4LT5yZXNvdXJjZV9uYW1lID0gbmxhX2RhdGEobmxhKTsKKwkJYWRtX2N0eC0+bXlfYWRkciA9IG5lc3RlZF9hdHRyX3RiW19fbmxhX3R5cGUoVF9jdHhfbXlfYWRkcildOworCQlhZG1fY3R4LT5wZWVyX2FkZHIgPSBuZXN0ZWRfYXR0cl90YltfX25sYV90eXBlKFRfY3R4X3BlZXJfYWRkcildOworCQlpZiAoKGFkbV9jdHgtPm15X2FkZHIgJiYKKwkJICAgICBubGFfbGVuKGFkbV9jdHgtPm15X2FkZHIpID4gc2l6ZW9mKGFkbV9jdHgtPmNvbm5lY3Rpb24tPm15X2FkZHIpKSB8fAorCQkgICAgKGFkbV9jdHgtPnBlZXJfYWRkciAmJgorCQkgICAgIG5sYV9sZW4oYWRtX2N0eC0+cGVlcl9hZGRyKSA+IHNpemVvZihhZG1fY3R4LT5jb25uZWN0aW9uLT5wZWVyX2FkZHIpKSkgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KIAotCWFkbV9jdHgubWlub3IgPSBkX2luLT5taW5vcjsKLQlhZG1fY3R4LmRldmljZSA9IG1pbm9yX3RvX2RldmljZShkX2luLT5taW5vcik7Ci0JaWYgKGFkbV9jdHgucmVzb3VyY2VfbmFtZSkgewotCQlhZG1fY3R4LnJlc291cmNlID0gZHJiZF9maW5kX3Jlc291cmNlKGFkbV9jdHgucmVzb3VyY2VfbmFtZSk7CisJYWRtX2N0eC0+bWlub3IgPSBkX2luLT5taW5vcjsKKwlhZG1fY3R4LT5kZXZpY2UgPSBtaW5vcl90b19kZXZpY2UoZF9pbi0+bWlub3IpOworCisJLyogV2UgYXJlIHByb3RlY3RlZCBieSB0aGUgZ2xvYmFsIGdlbmxfbG9jaygpLgorCSAqIEJ1dCB3ZSBtYXkgZXhwbGljaXRseSBkcm9wIGl0L3JldGFrZSBpdCBpbiBkcmJkX2FkbV9zZXRfcm9sZSgpLAorCSAqIHNvIG1ha2Ugc3VyZSB0aGlzIG9iamVjdCBzdGF5cyBhcm91bmQuICovCisJaWYgKGFkbV9jdHgtPmRldmljZSkKKwkJa3JlZl9nZXQoJmFkbV9jdHgtPmRldmljZS0+a3JlZik7CisKKwlpZiAoYWRtX2N0eC0+cmVzb3VyY2VfbmFtZSkgeworCQlhZG1fY3R4LT5yZXNvdXJjZSA9IGRyYmRfZmluZF9yZXNvdXJjZShhZG1fY3R4LT5yZXNvdXJjZV9uYW1lKTsKIAl9CiAKLQlpZiAoIWFkbV9jdHguZGV2aWNlICYmIChmbGFncyAmIERSQkRfQURNX05FRURfTUlOT1IpKSB7Ci0JCWRyYmRfbXNnX3B1dF9pbmZvKCJ1bmtub3duIG1pbm9yIik7CisJaWYgKCFhZG1fY3R4LT5kZXZpY2UgJiYgKGZsYWdzICYgRFJCRF9BRE1fTkVFRF9NSU5PUikpIHsKKwkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC0+cmVwbHlfc2tiLCAidW5rbm93biBtaW5vciIpOwogCQlyZXR1cm4gRVJSX01JTk9SX0lOVkFMSUQ7CiAJfQotCWlmICghYWRtX2N0eC5yZXNvdXJjZSAmJiAoZmxhZ3MgJiBEUkJEX0FETV9ORUVEX1JFU09VUkNFKSkgewotCQlkcmJkX21zZ19wdXRfaW5mbygidW5rbm93biByZXNvdXJjZSIpOwotCQlpZiAoYWRtX2N0eC5yZXNvdXJjZV9uYW1lKQorCWlmICghYWRtX2N0eC0+cmVzb3VyY2UgJiYgKGZsYWdzICYgRFJCRF9BRE1fTkVFRF9SRVNPVVJDRSkpIHsKKwkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC0+cmVwbHlfc2tiLCAidW5rbm93biByZXNvdXJjZSIpOworCQlpZiAoYWRtX2N0eC0+cmVzb3VyY2VfbmFtZSkKIAkJCXJldHVybiBFUlJfUkVTX05PVF9LTk9XTjsKIAkJcmV0dXJuIEVSUl9JTlZBTElEX1JFUVVFU1Q7CiAJfQogCiAJaWYgKGZsYWdzICYgRFJCRF9BRE1fTkVFRF9DT05ORUNUSU9OKSB7Ci0JCWlmIChhZG1fY3R4LnJlc291cmNlKSB7Ci0JCQlkcmJkX21zZ19wdXRfaW5mbygibm8gcmVzb3VyY2UgbmFtZSBleHBlY3RlZCIpOworCQlpZiAoYWRtX2N0eC0+cmVzb3VyY2UpIHsKKwkJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgtPnJlcGx5X3NrYiwgIm5vIHJlc291cmNlIG5hbWUgZXhwZWN0ZWQiKTsKIAkJCXJldHVybiBFUlJfSU5WQUxJRF9SRVFVRVNUOwogCQl9Ci0JCWlmIChhZG1fY3R4LmRldmljZSkgewotCQkJZHJiZF9tc2dfcHV0X2luZm8oIm5vIG1pbm9yIG51bWJlciBleHBlY3RlZCIpOworCQlpZiAoYWRtX2N0eC0+ZGV2aWNlKSB7CisJCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LT5yZXBseV9za2IsICJubyBtaW5vciBudW1iZXIgZXhwZWN0ZWQiKTsKIAkJCXJldHVybiBFUlJfSU5WQUxJRF9SRVFVRVNUOwogCQl9Ci0JCWlmIChhZG1fY3R4Lm15X2FkZHIgJiYgYWRtX2N0eC5wZWVyX2FkZHIpCi0JCQlhZG1fY3R4LmNvbm5lY3Rpb24gPSBjb25uX2dldF9ieV9hZGRycyhubGFfZGF0YShhZG1fY3R4Lm15X2FkZHIpLAotCQkJCQkJCSAgbmxhX2xlbihhZG1fY3R4Lm15X2FkZHIpLAotCQkJCQkJCSAgbmxhX2RhdGEoYWRtX2N0eC5wZWVyX2FkZHIpLAotCQkJCQkJCSAgbmxhX2xlbihhZG1fY3R4LnBlZXJfYWRkcikpOwotCQlpZiAoIWFkbV9jdHguY29ubmVjdGlvbikgewotCQkJZHJiZF9tc2dfcHV0X2luZm8oInVua25vd24gY29ubmVjdGlvbiIpOworCQlpZiAoYWRtX2N0eC0+bXlfYWRkciAmJiBhZG1fY3R4LT5wZWVyX2FkZHIpCisJCQlhZG1fY3R4LT5jb25uZWN0aW9uID0gY29ubl9nZXRfYnlfYWRkcnMobmxhX2RhdGEoYWRtX2N0eC0+bXlfYWRkciksCisJCQkJCQkJICBubGFfbGVuKGFkbV9jdHgtPm15X2FkZHIpLAorCQkJCQkJCSAgbmxhX2RhdGEoYWRtX2N0eC0+cGVlcl9hZGRyKSwKKwkJCQkJCQkgIG5sYV9sZW4oYWRtX2N0eC0+cGVlcl9hZGRyKSk7CisJCWlmICghYWRtX2N0eC0+Y29ubmVjdGlvbikgeworCQkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC0+cmVwbHlfc2tiLCAidW5rbm93biBjb25uZWN0aW9uIik7CiAJCQlyZXR1cm4gRVJSX0lOVkFMSURfUkVRVUVTVDsKIAkJfQogCX0KIAogCS8qIHNvbWUgbW9yZSBwYXJhbm9pYSwgaWYgdGhlIHJlcXVlc3Qgd2FzIG92ZXItZGV0ZXJtaW5lZCAqLwotCWlmIChhZG1fY3R4LmRldmljZSAmJiBhZG1fY3R4LnJlc291cmNlICYmCi0JICAgIGFkbV9jdHguZGV2aWNlLT5yZXNvdXJjZSAhPSBhZG1fY3R4LnJlc291cmNlKSB7CisJaWYgKGFkbV9jdHgtPmRldmljZSAmJiBhZG1fY3R4LT5yZXNvdXJjZSAmJgorCSAgICBhZG1fY3R4LT5kZXZpY2UtPnJlc291cmNlICE9IGFkbV9jdHgtPnJlc291cmNlKSB7CiAJCXByX3dhcm5pbmcoInJlcXVlc3Q6IG1pbm9yPSV1LCByZXNvdXJjZT0lczsgYnV0IHRoYXQgbWlub3IgYmVsb25ncyB0byByZXNvdXJjZSAlc1xuIiwKLQkJCQlhZG1fY3R4Lm1pbm9yLCBhZG1fY3R4LnJlc291cmNlLT5uYW1lLAotCQkJCWFkbV9jdHguZGV2aWNlLT5yZXNvdXJjZS0+bmFtZSk7Ci0JCWRyYmRfbXNnX3B1dF9pbmZvKCJtaW5vciBleGlzdHMgaW4gZGlmZmVyZW50IHJlc291cmNlIik7CisJCQkJYWRtX2N0eC0+bWlub3IsIGFkbV9jdHgtPnJlc291cmNlLT5uYW1lLAorCQkJCWFkbV9jdHgtPmRldmljZS0+cmVzb3VyY2UtPm5hbWUpOworCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LT5yZXBseV9za2IsICJtaW5vciBleGlzdHMgaW4gZGlmZmVyZW50IHJlc291cmNlIik7CiAJCXJldHVybiBFUlJfSU5WQUxJRF9SRVFVRVNUOwogCX0KLQlpZiAoYWRtX2N0eC5kZXZpY2UgJiYKLQkgICAgYWRtX2N0eC52b2x1bWUgIT0gVk9MVU1FX1VOU1BFQ0lGSUVEICYmCi0JICAgIGFkbV9jdHgudm9sdW1lICE9IGFkbV9jdHguZGV2aWNlLT52bnIpIHsKKwlpZiAoYWRtX2N0eC0+ZGV2aWNlICYmCisJICAgIGFkbV9jdHgtPnZvbHVtZSAhPSBWT0xVTUVfVU5TUEVDSUZJRUQgJiYKKwkgICAgYWRtX2N0eC0+dm9sdW1lICE9IGFkbV9jdHgtPmRldmljZS0+dm5yKSB7CiAJCXByX3dhcm5pbmcoInJlcXVlc3Q6IG1pbm9yPSV1LCB2b2x1bWU9JXU7IGJ1dCB0aGF0IG1pbm9yIGlzIHZvbHVtZSAldSBpbiAlc1xuIiwKLQkJCQlhZG1fY3R4Lm1pbm9yLCBhZG1fY3R4LnZvbHVtZSwKLQkJCQlhZG1fY3R4LmRldmljZS0+dm5yLAotCQkJCWFkbV9jdHguZGV2aWNlLT5yZXNvdXJjZS0+bmFtZSk7Ci0JCWRyYmRfbXNnX3B1dF9pbmZvKCJtaW5vciBleGlzdHMgYXMgZGlmZmVyZW50IHZvbHVtZSIpOworCQkJCWFkbV9jdHgtPm1pbm9yLCBhZG1fY3R4LT52b2x1bWUsCisJCQkJYWRtX2N0eC0+ZGV2aWNlLT52bnIsCisJCQkJYWRtX2N0eC0+ZGV2aWNlLT5yZXNvdXJjZS0+bmFtZSk7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgtPnJlcGx5X3NrYiwgIm1pbm9yIGV4aXN0cyBhcyBkaWZmZXJlbnQgdm9sdW1lIik7CiAJCXJldHVybiBFUlJfSU5WQUxJRF9SRVFVRVNUOwogCX0KIAorCS8qIHN0aWxsLCBwcm92aWRlIGFkbV9jdHgtPnJlc291cmNlIGFsd2F5cywgaWYgcG9zc2libGUuICovCisJaWYgKCFhZG1fY3R4LT5yZXNvdXJjZSkgeworCQlhZG1fY3R4LT5yZXNvdXJjZSA9IGFkbV9jdHgtPmRldmljZSA/IGFkbV9jdHgtPmRldmljZS0+cmVzb3VyY2UKKwkJCTogYWRtX2N0eC0+Y29ubmVjdGlvbiA/IGFkbV9jdHgtPmNvbm5lY3Rpb24tPnJlc291cmNlIDogTlVMTDsKKwkJaWYgKGFkbV9jdHgtPnJlc291cmNlKQorCQkJa3JlZl9nZXQoJmFkbV9jdHgtPnJlc291cmNlLT5rcmVmKTsKKwl9CisKIAlyZXR1cm4gTk9fRVJST1I7CiAKIGZhaWw6Ci0Jbmxtc2dfZnJlZShhZG1fY3R4LnJlcGx5X3NrYik7Ci0JYWRtX2N0eC5yZXBseV9za2IgPSBOVUxMOworCW5sbXNnX2ZyZWUoYWRtX2N0eC0+cmVwbHlfc2tiKTsKKwlhZG1fY3R4LT5yZXBseV9za2IgPSBOVUxMOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZHJiZF9hZG1fZmluaXNoKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCByZXRjb2RlKQorc3RhdGljIGludCBkcmJkX2FkbV9maW5pc2goc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgKmFkbV9jdHgsCisJc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IHJldGNvZGUpCiB7Ci0JaWYgKGFkbV9jdHguY29ubmVjdGlvbikgewotCQlrcmVmX3B1dCgmYWRtX2N0eC5jb25uZWN0aW9uLT5rcmVmLCBkcmJkX2Rlc3Ryb3lfY29ubmVjdGlvbik7Ci0JCWFkbV9jdHguY29ubmVjdGlvbiA9IE5VTEw7CisJaWYgKGFkbV9jdHgtPmRldmljZSkgeworCQlrcmVmX3B1dCgmYWRtX2N0eC0+ZGV2aWNlLT5rcmVmLCBkcmJkX2Rlc3Ryb3lfZGV2aWNlKTsKKwkJYWRtX2N0eC0+ZGV2aWNlID0gTlVMTDsKIAl9Ci0JaWYgKGFkbV9jdHgucmVzb3VyY2UpIHsKLQkJa3JlZl9wdXQoJmFkbV9jdHgucmVzb3VyY2UtPmtyZWYsIGRyYmRfZGVzdHJveV9yZXNvdXJjZSk7Ci0JCWFkbV9jdHgucmVzb3VyY2UgPSBOVUxMOworCWlmIChhZG1fY3R4LT5jb25uZWN0aW9uKSB7CisJCWtyZWZfcHV0KCZhZG1fY3R4LT5jb25uZWN0aW9uLT5rcmVmLCAmZHJiZF9kZXN0cm95X2Nvbm5lY3Rpb24pOworCQlhZG1fY3R4LT5jb25uZWN0aW9uID0gTlVMTDsKKwl9CisJaWYgKGFkbV9jdHgtPnJlc291cmNlKSB7CisJCWtyZWZfcHV0KCZhZG1fY3R4LT5yZXNvdXJjZS0+a3JlZiwgZHJiZF9kZXN0cm95X3Jlc291cmNlKTsKKwkJYWRtX2N0eC0+cmVzb3VyY2UgPSBOVUxMOwogCX0KIAotCWlmICghYWRtX2N0eC5yZXBseV9za2IpCisJaWYgKCFhZG1fY3R4LT5yZXBseV9za2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYWRtX2N0eC5yZXBseV9kaC0+cmV0X2NvZGUgPSByZXRjb2RlOwotCWRyYmRfYWRtX3NlbmRfcmVwbHkoYWRtX2N0eC5yZXBseV9za2IsIGluZm8pOworCWFkbV9jdHgtPnJlcGx5X2RoLT5yZXRfY29kZSA9IHJldGNvZGU7CisJZHJiZF9hZG1fc2VuZF9yZXBseShhZG1fY3R4LT5yZXBseV9za2IsIGluZm8pOwogCXJldHVybiAwOwogfQogCkBAIC00MjYsNiArNDIyLDE0IEBACiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCisJaWYgKGZwID09IEZQX05PVF9BVkFJTCkgeworCQkvKiBJTyBTdXNwZW5kaW5nIHdvcmtzIG9uIHRoZSB3aG9sZSByZXNvdXJjZS4KKwkJICAgRG8gaXQgb25seSBmb3Igb25lIGRldmljZS4gKi8KKwkJdm5yID0gMDsKKwkJcGVlcl9kZXZpY2UgPSBpZHJfZ2V0X25leHQoJmNvbm5lY3Rpb24tPnBlZXJfZGV2aWNlcywgJnZucik7CisJCWRyYmRfY2hhbmdlX3N0YXRlKHBlZXJfZGV2aWNlLT5kZXZpY2UsIENTX1ZFUkJPU0UgfCBDU19IQVJELCBOUyhzdXNwX2ZlbiwgMCkpOworCX0KKwogCXJldHVybiBmcDsKIH0KIApAQCAtNDM4LDEyICs0NDIsMTMgQEAKIAljaGFyICpleF90b19zdHJpbmc7CiAJaW50IHI7CiAKKwlzcGluX2xvY2tfaXJxKCZjb25uZWN0aW9uLT5yZXNvdXJjZS0+cmVxX2xvY2spOwogCWlmIChjb25uZWN0aW9uLT5jc3RhdGUgPj0gQ19XRl9SRVBPUlRfUEFSQU1TKSB7CiAJCWRyYmRfZXJyKGNvbm5lY3Rpb24sICJFeHBlY3RlZCBjc3RhdGUgPCBDX1dGX1JFUE9SVF9QQVJBTVNcbiIpOworCQlzcGluX3VubG9ja19pcnEoJmNvbm5lY3Rpb24tPnJlc291cmNlLT5yZXFfbG9jayk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZjb25uZWN0aW9uLT5yZXNvdXJjZS0+cmVxX2xvY2spOwogCWNvbm5lY3RfY250ID0gY29ubmVjdGlvbi0+Y29ubmVjdF9jbnQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25uZWN0aW9uLT5yZXNvdXJjZS0+cmVxX2xvY2spOwogCkBAIC02NTQsMTEgKzY1OSwxMSBAQAogCQkJcHV0X2xkZXYoZGV2aWNlKTsKIAkJfQogCX0gZWxzZSB7Ci0JCW11dGV4X2xvY2soJmRldmljZS0+cmVzb3VyY2UtPmNvbmZfdXBkYXRlKTsKKwkJLyogQ2FsbGVkIGZyb20gZHJiZF9hZG1fc2V0X3JvbGUgb25seS4KKwkJICogV2UgYXJlIHN0aWxsIGhvbGRpbmcgdGhlIGNvbmZfdXBkYXRlIG11dGV4LiAqLwogCQluYyA9IGZpcnN0X3BlZXJfZGV2aWNlKGRldmljZSktPmNvbm5lY3Rpb24tPm5ldF9jb25mOwogCQlpZiAobmMpCiAJCQluYy0+ZGlzY2FyZF9teV9kYXRhID0gMDsgLyogd2l0aG91dCBjb3B5OyBzaW5nbGUgYml0IG9wIGlzIGF0b21pYyAqLwotCQltdXRleF91bmxvY2soJmRldmljZS0+cmVzb3VyY2UtPmNvbmZfdXBkYXRlKTsKIAogCQlzZXRfZGlza19ybyhkZXZpY2UtPnZkaXNrLCBmYWxzZSk7CiAJCWlmIChnZXRfbGRldihkZXZpY2UpKSB7CkBAIC03MDAsMTEgKzcwNSwxMiBAQAogCiBpbnQgZHJiZF9hZG1fc2V0X3JvbGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCBhZG1fY3R4OwogCXN0cnVjdCBzZXRfcm9sZV9wYXJtcyBwYXJtczsKIAlpbnQgZXJyOwogCWVudW0gZHJiZF9yZXRfY29kZSByZXRjb2RlOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKQEAgLTcxNSwxNyArNzIxLDIyIEBACiAJCWVyciA9IHNldF9yb2xlX3Bhcm1zX2Zyb21fYXR0cnMoJnBhcm1zLCBpbmZvKTsKIAkJaWYgKGVycikgewogCQkJcmV0Y29kZSA9IEVSUl9NQU5EQVRPUllfVEFHOwotCQkJZHJiZF9tc2dfcHV0X2luZm8oZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOworCQkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC5yZXBseV9za2IsIGZyb21fYXR0cnNfZXJyX3RvX3R4dChlcnIpKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQorCWdlbmxfdW5sb2NrKCk7CisJbXV0ZXhfbG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIAogCWlmIChpbmZvLT5nZW5saGRyLT5jbWQgPT0gRFJCRF9BRE1fUFJJTUFSWSkKIAkJcmV0Y29kZSA9IGRyYmRfc2V0X3JvbGUoYWRtX2N0eC5kZXZpY2UsIFJfUFJJTUFSWSwgcGFybXMuYXNzdW1lX3VwdG9kYXRlKTsKIAllbHNlCiAJCXJldGNvZGUgPSBkcmJkX3NldF9yb2xlKGFkbV9jdHguZGV2aWNlLCBSX1NFQ09OREFSWSwgMCk7CisKKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CisJZ2VubF9sb2NrKCk7CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMDQsMTUgKzExMTUsMTggQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIGNvbnN0IHEgPSBkZXZpY2UtPnJxX3F1ZXVlOwogCXVuc2lnbmVkIGludCBtYXhfaHdfc2VjdG9ycyA9IG1heF9iaW9fc2l6ZSA+PiA5OwogCXVuc2lnbmVkIGludCBtYXhfc2VnbWVudHMgPSAwOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpiID0gTlVMTDsKIAogCWlmIChnZXRfbGRldl9pZl9zdGF0ZShkZXZpY2UsIERfQVRUQUNISU5HKSkgewotCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIGNvbnN0IGIgPSBkZXZpY2UtPmxkZXYtPmJhY2tpbmdfYmRldi0+YmRfZGlzay0+cXVldWU7CisJCWIgPSBkZXZpY2UtPmxkZXYtPmJhY2tpbmdfYmRldi0+YmRfZGlzay0+cXVldWU7CiAKIAkJbWF4X2h3X3NlY3RvcnMgPSBtaW4ocXVldWVfbWF4X2h3X3NlY3RvcnMoYiksIG1heF9iaW9fc2l6ZSA+PiA5KTsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQltYXhfc2VnbWVudHMgPSByY3VfZGVyZWZlcmVuY2UoZGV2aWNlLT5sZGV2LT5kaXNrX2NvbmYpLT5tYXhfYmlvX2J2ZWNzOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcHV0X2xkZXYoZGV2aWNlKTsKKworCQlibGtfc2V0X3N0YWNraW5nX2xpbWl0cygmcS0+bGltaXRzKTsKKwkJYmxrX3F1ZXVlX21heF93cml0ZV9zYW1lX3NlY3RvcnMocSwgMCk7CiAJfQogCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCA1MTIpOwpAQCAtMTEyMSw4ICsxMTM1LDI1IEBACiAJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBtYXhfc2VnbWVudHMgPyBtYXhfc2VnbWVudHMgOiBCTEtfTUFYX1NFR01FTlRTKTsKIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCBQQUdFX0NBQ0hFX1NJWkUtMSk7CiAKLQlpZiAoZ2V0X2xkZXZfaWZfc3RhdGUoZGV2aWNlLCBEX0FUVEFDSElORykpIHsKLQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKiBjb25zdCBiID0gZGV2aWNlLT5sZGV2LT5iYWNraW5nX2JkZXYtPmJkX2Rpc2stPnF1ZXVlOworCWlmIChiKSB7CisJCXN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLT5jb25uZWN0aW9uOworCisJCWlmIChibGtfcXVldWVfZGlzY2FyZChiKSAmJgorCQkgICAgKGNvbm5lY3Rpb24tPmNzdGF0ZSA8IENfQ09OTkVDVEVEIHx8IGNvbm5lY3Rpb24tPmFncmVlZF9mZWF0dXJlcyAmIEZGX1RSSU0pKSB7CisJCQkvKiBGb3Igbm93LCBkb24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGFjdGl2aXR5IGxvZyBleHRlbnQgd29ydGggb2YgZGF0YQorCQkJICogdG8gYmUgZGlzY2FyZGVkIGluIG9uZSBnby4gV2UgbWF5IG5lZWQgdG8gcmV3b3JrIGRyYmRfYWxfYmVnaW5faW8oKQorCQkJICogdG8gYWxsb3cgZm9yIGV2ZW4gbGFyZ2VyIGRpc2NhcmQgcmFuZ2VzICovCisJCQlxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycyA9IERSQkRfTUFYX0RJU0NBUkRfU0VDVE9SUzsKKworCQkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19ESVNDQVJELCBxKTsKKwkJCS8qIFJFQUxMWT8gSXMgc3RhY2tpbmcgc2VjZGlzY2FyZCAibGVnYWwiPyAqLworCQkJaWYgKGJsa19xdWV1ZV9zZWNkaXNjYXJkKGIpKQorCQkJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCwgcSk7CisJCX0gZWxzZSB7CisJCQlxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycyA9IDA7CisJCQlxdWV1ZV9mbGFnX2NsZWFyX3VubG9ja2VkKFFVRVVFX0ZMQUdfRElTQ0FSRCwgcSk7CisJCQlxdWV1ZV9mbGFnX2NsZWFyX3VubG9ja2VkKFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCwgcSk7CisJCX0KIAogCQlibGtfcXVldWVfc3RhY2tfbGltaXRzKHEsIGIpOwogCkBAIC0xMTY0LDggKzExOTUsMTQgQEAKIAkJCXBlZXIgPSBEUkJEX01BWF9CSU9fU0laRV9QOTU7ICAvKiBkcmJkIDguMy44IG9ud2FyZHMsIGJlZm9yZSA4LjQuMCAqLwogCQllbHNlCiAJCQlwZWVyID0gRFJCRF9NQVhfQklPX1NJWkU7Ci0JfQogCisJCS8qIFdlIG1heSBsYXRlciBkZXRhY2ggYW5kIHJlLWF0dGFjaCBvbiBhIGRpc2Nvbm5lY3RlZCBQcmltYXJ5LgorCQkgKiBBdm9pZCB0aGlzIHNldHRpbmcgdG8ganVtcCBiYWNrIGluIHRoYXQgY2FzZS4KKwkJICogV2Ugd2FudCB0byBzdG9yZSB3aGF0IHdlIGtub3cgdGhlIHBlZXIgRFJCRCBjYW4gaGFuZGxlLAorCQkgKiBub3Qgd2hhdCB0aGUgcGVlciBJTyBiYWNrZW5kIGNhbiBoYW5kbGUuICovCisJCWlmIChwZWVyID4gZGV2aWNlLT5wZWVyX21heF9iaW9fc2l6ZSkKKwkJCWRldmljZS0+cGVlcl9tYXhfYmlvX3NpemUgPSBwZWVyOworCX0KIAluZXcgPSBtaW4obG9jYWwsIHBlZXIpOwogCiAJaWYgKGRldmljZS0+c3RhdGUucm9sZSA9PSBSX1BSSU1BUlkgJiYgbmV3IDwgbm93KQpAQCAtMTI1OCwxOSArMTI5NSwyMSBAQAogCiBpbnQgZHJiZF9hZG1fZGlza19vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgZGlza19jb25mICpuZXdfZGlza19jb25mLCAqb2xkX2Rpc2tfY29uZjsKIAlzdHJ1Y3QgZmlmb19idWZmZXIgKm9sZF9wbGFuID0gTlVMTCwgKm5ld19wbGFuID0gTlVMTDsKIAlpbnQgZXJyLCBmaWZvX3NpemU7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQotCQlnb3RvIG91dDsKKwkJZ290byBmaW5pc2g7CiAKIAlkZXZpY2UgPSBhZG1fY3R4LmRldmljZTsKKwltdXRleF9sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCiAJLyogd2UgYWxzbyBuZWVkIGEgZGlzawogCSAqIHRvIGNoYW5nZSB0aGUgb3B0aW9ucyBvbiAqLwpAQCAtMTI5NCw3ICsxMzMzLDcgQEAKIAllcnIgPSBkaXNrX2NvbmZfZnJvbV9hdHRyc19mb3JfY2hhbmdlKG5ld19kaXNrX2NvbmYsIGluZm8pOwogCWlmIChlcnIgJiYgZXJyICE9IC1FTk9NU0cpIHsKIAkJcmV0Y29kZSA9IEVSUl9NQU5EQVRPUllfVEFHOwotCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCBmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCkBAIC0xMzg1LDEyICsxNDI0LDE1IEBACiBzdWNjZXNzOgogCXB1dF9sZGV2KGRldmljZSk7CiAgb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CisgZmluaXNoOgorCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcmJkX2FkbV9hdHRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCBhZG1fY3R4OwogCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlOwogCWludCBlcnI7CiAJZW51bSBkcmJkX3JldF9jb2RlIHJldGNvZGU7CkBAIC0xNDA2LDEzICsxNDQ4LDE0IEBACiAJZW51bSBkcmJkX3N0YXRlX3J2IHJ2OwogCXN0cnVjdCBuZXRfY29uZiAqbmM7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQogCQlnb3RvIGZpbmlzaDsKIAogCWRldmljZSA9IGFkbV9jdHguZGV2aWNlOworCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiAJY29ubl9yZWNvbmZpZ19zdGFydChmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLT5jb25uZWN0aW9uKTsKIAogCS8qIGlmIHlvdSB3YW50IHRvIHJlY29uZmlndXJlLCBwbGVhc2UgdGVhciBkb3duIGZpcnN0ICovCkBAIC0xNDU1LDcgKzE0OTgsNyBAQAogCWVyciA9IGRpc2tfY29uZl9mcm9tX2F0dHJzKG5ld19kaXNrX2NvbmYsIGluZm8pOwogCWlmIChlcnIpIHsKIAkJcmV0Y29kZSA9IEVSUl9NQU5EQVRPUllfVEFHOwotCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCBmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CiAJCWdvdG8gZmFpbDsKIAl9CiAKQEAgLTE2MTksNyArMTY2Miw3IEBACiAJfQogCiAJaWYgKGRldmljZS0+c3RhdGUuY29ubiA8IENfQ09OTkVDVEVEICYmCi0JICAgIGRldmljZS0+c3RhdGUucm9sZSA9PSBSX1BSSU1BUlkgJiYKKwkgICAgZGV2aWNlLT5zdGF0ZS5yb2xlID09IFJfUFJJTUFSWSAmJiBkZXZpY2UtPmVkX3V1aWQgJiYKIAkgICAgKGRldmljZS0+ZWRfdXVpZCAmIH4oKHU2NCkxKSkgIT0gKG5iYy0+bWQudXVpZFtVSV9DVVJSRU5UXSAmIH4oKHU2NCkxKSkpIHsKIAkJZHJiZF9lcnIoZGV2aWNlLCAiQ2FuIG9ubHkgYXR0YWNoIHRvIGRhdGEgd2l0aCBjdXJyZW50IFVVSUQ9JTAxNmxsWFxuIiwKIAkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2aWNlLT5lZF91dWlkKTsKQEAgLTE3OTcsNyArMTg0MCw4IEBACiAJa29iamVjdF91ZXZlbnQoJmRpc2tfdG9fZGV2KGRldmljZS0+dmRpc2spLT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAJcHV0X2xkZXYoZGV2aWNlKTsKIAljb25uX3JlY29uZmlnX2RvbmUoZmlyc3RfcGVlcl9kZXZpY2UoZGV2aWNlKS0+Y29ubmVjdGlvbik7Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogCiAgZm9yY2VfZGlza2xlc3NfZGVjOgpAQCAtMTgxOSw5ICsxODYzLDkgQEAKIAlrZnJlZShuZXdfZGlza19jb25mKTsKIAlsY19kZXN0cm95KHJlc3luY19scnUpOwogCWtmcmVlKG5ld19wbGFuKTsKLQorCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKICBmaW5pc2g6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NjAsMTEgKzE5MDQsMTIgQEAKICAqIE9ubHkgdGhlbiB3ZSBoYXZlIGZpbmFsbHkgZGV0YWNoZWQuICovCiBpbnQgZHJiZF9hZG1fZGV0YWNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlzdHJ1Y3QgZGV0YWNoX3Bhcm1zIHBhcm1zID0geyB9OwogCWludCBlcnI7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQpAQCAtMTg3NCwxNCArMTkxOSwxNiBAQAogCQllcnIgPSBkZXRhY2hfcGFybXNfZnJvbV9hdHRycygmcGFybXMsIGluZm8pOwogCQlpZiAoZXJyKSB7CiAJCQlyZXRjb2RlID0gRVJSX01BTkRBVE9SWV9UQUc7Ci0JCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKKwltdXRleF9sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCXJldGNvZGUgPSBhZG1fZGV0YWNoKGFkbV9jdHguZGV2aWNlLCBwYXJtcy5mb3JjZV9kZXRhY2gpOworCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIG91dDoKLQlkcmJkX2FkbV9maW5pc2goaW5mbywgcmV0Y29kZSk7CisJZHJiZF9hZG1fZmluaXNoKCZhZG1fY3R4LCBpbmZvLCByZXRjb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA1NSw2ICsyMTAyLDcgQEAKIAogaW50IGRyYmRfYWRtX25ldF9vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uOwogCXN0cnVjdCBuZXRfY29uZiAqb2xkX25ldF9jb25mLCAqbmV3X25ldF9jb25mID0gTlVMTDsKQEAgLTIwNjMsMTMgKzIxMTEsMTQgQEAKIAlpbnQgcnNyOyAvKiByZS1zeW5jIHJ1bm5pbmcgKi8KIAlzdHJ1Y3QgY3J5cHRvIGNyeXB0byA9IHsgfTsKIAotCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9DT05ORUNUSU9OKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX0NPTk5FQ1RJT04pOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQotCQlnb3RvIG91dDsKKwkJZ290byBmaW5pc2g7CiAKIAljb25uZWN0aW9uID0gYWRtX2N0eC5jb25uZWN0aW9uOworCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiAKIAluZXdfbmV0X2NvbmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X2NvbmYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19uZXRfY29uZikgewpAQCAtMjA4NCw3ICsyMTMzLDcgQEAKIAlvbGRfbmV0X2NvbmYgPSBjb25uZWN0aW9uLT5uZXRfY29uZjsKIAogCWlmICghb2xkX25ldF9jb25mKSB7Ci0JCWRyYmRfbXNnX3B1dF9pbmZvKCJuZXQgY29uZiBtaXNzaW5nLCB0cnkgY29ubmVjdCIpOworCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgIm5ldCBjb25mIG1pc3NpbmcsIHRyeSBjb25uZWN0Iik7CiAJCXJldGNvZGUgPSBFUlJfSU5WQUxJRF9SRVFVRVNUOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtMjA5Niw3ICsyMTQ1LDcgQEAKIAllcnIgPSBuZXRfY29uZl9mcm9tX2F0dHJzX2Zvcl9jaGFuZ2UobmV3X25ldF9jb25mLCBpbmZvKTsKIAlpZiAoZXJyICYmIGVyciAhPSAtRU5PTVNHKSB7CiAJCXJldGNvZGUgPSBFUlJfTUFOREFUT1JZX1RBRzsKLQkJZHJiZF9tc2dfcHV0X2luZm8oZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOworCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0yMTY3LDEyICsyMjE2LDE1IEBACiAgZG9uZToKIAljb25uX3JlY29uZmlnX2RvbmUoY29ubmVjdGlvbik7CiAgb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CisgZmluaXNoOgorCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcmJkX2FkbV9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAlzdHJ1Y3QgZHJiZF9wZWVyX2RldmljZSAqcGVlcl9kZXZpY2U7CiAJc3RydWN0IG5ldF9jb25mICpvbGRfbmV0X2NvbmYsICpuZXdfbmV0X2NvbmYgPSBOVUxMOwogCXN0cnVjdCBjcnlwdG8gY3J5cHRvID0geyB9OwpAQCAtMjE4MiwxNCArMjIzNCwxNCBAQAogCWludCBpOwogCWludCBlcnI7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfUkVTT1VSQ0UpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfUkVTT1VSQ0UpOwogCiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCiAJCWdvdG8gb3V0OwogCWlmICghKGFkbV9jdHgubXlfYWRkciAmJiBhZG1fY3R4LnBlZXJfYWRkcikpIHsKLQkJZHJiZF9tc2dfcHV0X2luZm8oImNvbm5lY3Rpb24gZW5kcG9pbnQocykgbWlzc2luZyIpOworCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgImNvbm5lY3Rpb24gZW5kcG9pbnQocykgbWlzc2luZyIpOwogCQlyZXRjb2RlID0gRVJSX0lOVkFMSURfUkVRVUVTVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjIxNSw2ICsyMjY3LDcgQEAKIAkJfQogCX0KIAorCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiAJY29ubmVjdGlvbiA9IGZpcnN0X2Nvbm5lY3Rpb24oYWRtX2N0eC5yZXNvdXJjZSk7CiAJY29ubl9yZWNvbmZpZ19zdGFydChjb25uZWN0aW9uKTsKIApAQCAtMjIzNSw3ICsyMjg4LDcgQEAKIAllcnIgPSBuZXRfY29uZl9mcm9tX2F0dHJzKG5ld19uZXRfY29uZiwgaW5mbyk7CiAJaWYgKGVyciAmJiBlcnIgIT0gLUVOT01TRykgewogCQlyZXRjb2RlID0gRVJSX01BTkRBVE9SWV9UQUc7Ci0JCWRyYmRfbXNnX3B1dF9pbmZvKGZyb21fYXR0cnNfZXJyX3RvX3R4dChlcnIpKTsKKwkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC5yZXBseV9za2IsIGZyb21fYXR0cnNfZXJyX3RvX3R4dChlcnIpKTsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtMjI4NCw3ICsyMzM3LDggQEAKIAlyZXRjb2RlID0gY29ubl9yZXF1ZXN0X3N0YXRlKGNvbm5lY3Rpb24sIE5TKGNvbm4sIENfVU5DT05ORUNURUQpLCBDU19WRVJCT1NFKTsKIAogCWNvbm5fcmVjb25maWdfZG9uZShjb25uZWN0aW9uKTsKLQlkcmJkX2FkbV9maW5pc2goaW5mbywgcmV0Y29kZSk7CisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiAKIGZhaWw6CkBAIC0yMjkyLDggKzIzNDYsOSBAQAogCWtmcmVlKG5ld19uZXRfY29uZik7CiAKIAljb25uX3JlY29uZmlnX2RvbmUoY29ubmVjdGlvbik7CisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzU2LDEzICsyNDExLDE0IEBACiAKIGludCBkcmJkX2FkbV9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAlzdHJ1Y3QgZGlzY29ubmVjdF9wYXJtcyBwYXJtczsKIAlzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uOwogCWVudW0gZHJiZF9zdGF0ZV9ydiBydjsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlpbnQgZXJyOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX0NPTk5FQ1RJT04pOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfQ09OTkVDVElPTik7CiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCkBAIC0yMzc0LDE4ICsyNDMwLDIwIEBACiAJCWVyciA9IGRpc2Nvbm5lY3RfcGFybXNfZnJvbV9hdHRycygmcGFybXMsIGluZm8pOwogCQlpZiAoZXJyKSB7CiAJCQlyZXRjb2RlID0gRVJSX01BTkRBVE9SWV9UQUc7Ci0JCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOwogCQkJZ290byBmYWlsOwogCQl9CiAJfQogCisJbXV0ZXhfbG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIAlydiA9IGNvbm5fdHJ5X2Rpc2Nvbm5lY3QoY29ubmVjdGlvbiwgcGFybXMuZm9yY2VfZGlzY29ubmVjdCk7CiAJaWYgKHJ2IDwgU1NfU1VDQ0VTUykKIAkJcmV0Y29kZSA9IHJ2OyAgLyogRklYTUU6IFR5cGUgbWlzbWF0Y2guICovCiAJZWxzZQogCQlyZXRjb2RlID0gTk9fRVJST1I7CisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogIGZhaWw6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MDcsNiArMjQ2NSw3IEBACiAKIGludCBkcmJkX2FkbV9yZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCBhZG1fY3R4OwogCXN0cnVjdCBkaXNrX2NvbmYgKm9sZF9kaXNrX2NvbmYsICpuZXdfZGlza19jb25mID0gTlVMTDsKIAlzdHJ1Y3QgcmVzaXplX3Bhcm1zIHJzOwogCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlOwpAQCAtMjQxNywxMiArMjQ3NiwxMyBAQAogCXNlY3Rvcl90IHVfc2l6ZTsKIAlpbnQgZXJyOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKLQkJZ290byBmYWlsOworCQlnb3RvIGZpbmlzaDsKIAorCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiAJZGV2aWNlID0gYWRtX2N0eC5kZXZpY2U7CiAJaWYgKCFnZXRfbGRldihkZXZpY2UpKSB7CiAJCXJldGNvZGUgPSBFUlJfTk9fRElTSzsKQEAgLTI0MzYsNyArMjQ5Niw3IEBACiAJCWVyciA9IHJlc2l6ZV9wYXJtc19mcm9tX2F0dHJzKCZycywgaW5mbyk7CiAJCWlmIChlcnIpIHsKIAkJCXJldGNvZGUgPSBFUlJfTUFOREFUT1JZX1RBRzsKLQkJCWRyYmRfbXNnX3B1dF9pbmZvKGZyb21fYXR0cnNfZXJyX3RvX3R4dChlcnIpKTsKKwkJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCBmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CiAJCQlnb3RvIGZhaWxfbGRldjsKIAkJfQogCX0KQEAgLTI0ODIsNyArMjU0Miw3IEBACiAJCQlnb3RvIGZhaWxfbGRldjsKIAkJfQogCi0JCWlmIChkZXZpY2UtPnN0YXRlLmNvbm4gIT0gQ19DT05ORUNURUQpIHsKKwkJaWYgKGRldmljZS0+c3RhdGUuY29ubiAhPSBDX0NPTk5FQ1RFRCAmJiAhcnMucmVzaXplX2ZvcmNlKSB7CiAJCQlyZXRjb2RlID0gRVJSX01EX0xBWU9VVF9DT05ORUNURUQ7CiAJCQlnb3RvIGZhaWxfbGRldjsKIAkJfQpAQCAtMjUyOCw3ICsyNTg4LDkgQEAKIAl9CiAKICBmYWlsOgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CisgZmluaXNoOgorCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiAKICBmYWlsX2xkZXY6CkBAIC0yNTM4LDExICsyNjAwLDEyIEBACiAKIGludCBkcmJkX2FkbV9yZXNvdXJjZV9vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlzdHJ1Y3QgcmVzX29wdHMgcmVzX29wdHM7CiAJaW50IGVycjsKIAotCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9SRVNPVVJDRSk7CisJcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoJmFkbV9jdHgsIHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9SRVNPVVJDRSk7CiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCkBAIC0yNTU1LDMzICsyNjE4LDM3IEBACiAJZXJyID0gcmVzX29wdHNfZnJvbV9hdHRycygmcmVzX29wdHMsIGluZm8pOwogCWlmIChlcnIgJiYgZXJyICE9IC1FTk9NU0cpIHsKIAkJcmV0Y29kZSA9IEVSUl9NQU5EQVRPUllfVEFHOwotCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCBmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwltdXRleF9sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCWVyciA9IHNldF9yZXNvdXJjZV9vcHRpb25zKGFkbV9jdHgucmVzb3VyY2UsICZyZXNfb3B0cyk7CiAJaWYgKGVycikgewogCQlyZXRjb2RlID0gRVJSX0lOVkFMSURfUkVRVUVTVDsKIAkJaWYgKGVyciA9PSAtRU5PTUVNKQogCQkJcmV0Y29kZSA9IEVSUl9OT01FTTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCiBmYWlsOgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogfQogCiBpbnQgZHJiZF9hZG1faW52YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJldGNvZGU7IC8qIGVudW0gZHJiZF9yZXRfY29kZSByc3AuIGVudW0gZHJiZF9zdGF0ZV9ydiAqLwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKIAkJZ290byBvdXQ7CiAKKwltdXRleF9sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCWRldmljZSA9IGFkbV9jdHguZGV2aWNlOwogCiAJLyogSWYgdGhlcmUgaXMgc3RpbGwgYml0bWFwIElPIHBlbmRpbmcsIHByb2JhYmx5IGJlY2F1c2Ugb2YgYSBwcmV2aW91cwpAQCAtMjYwNSwyNiArMjY3MiwyOSBAQAogCX0gZWxzZQogCQlyZXRjb2RlID0gZHJiZF9yZXF1ZXN0X3N0YXRlKGRldmljZSwgTlMoY29ubiwgQ19TVEFSVElOR19TWU5DX1QpKTsKIAlkcmJkX3Jlc3VtZV9pbyhkZXZpY2UpOwotCisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRyYmRfYWRtX3NpbXBsZV9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCXVuaW9uIGRyYmRfc3RhdGUgbWFzaywgdW5pb24gZHJiZF9zdGF0ZSB2YWwpCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAotCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9NSU5PUik7CisJcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoJmFkbV9jdHgsIHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9NSU5PUik7CiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCiAJCWdvdG8gb3V0OwogCisJbXV0ZXhfbG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIAlyZXRjb2RlID0gZHJiZF9yZXF1ZXN0X3N0YXRlKGFkbV9jdHguZGV2aWNlLCBtYXNrLCB2YWwpOworCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIG91dDoKLQlkcmJkX2FkbV9maW5pc2goaW5mbywgcmV0Y29kZSk7CisJZHJiZF9hZG1fZmluaXNoKCZhZG1fY3R4LCBpbmZvLCByZXRjb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYzOSwxNSArMjcwOSwxNyBAQAogCiBpbnQgZHJiZF9hZG1faW52YWxpZGF0ZV9wZWVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAlpbnQgcmV0Y29kZTsgLyogZHJiZF9yZXRfY29kZSwgZHJiZF9zdGF0ZV9ydiAqLwogCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKIAkJZ290byBvdXQ7CiAKKwltdXRleF9sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCWRldmljZSA9IGFkbV9jdHguZGV2aWNlOwogCiAJLyogSWYgdGhlcmUgaXMgc3RpbGwgYml0bWFwIElPIHBlbmRpbmcsIHByb2JhYmx5IGJlY2F1c2Ugb2YgYSBwcmV2aW91cwpAQCAtMjY3NCw0MCArMjc0Niw0NSBAQAogCX0gZWxzZQogCQlyZXRjb2RlID0gZHJiZF9yZXF1ZXN0X3N0YXRlKGRldmljZSwgTlMoY29ubiwgQ19TVEFSVElOR19TWU5DX1MpKTsKIAlkcmJkX3Jlc3VtZV9pbyhkZXZpY2UpOwotCisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogfQogCiBpbnQgZHJiZF9hZG1fcGF1c2Vfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJZW51bSBkcmJkX3JldF9jb2RlIHJldGNvZGU7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQogCQlnb3RvIG91dDsKIAorCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiAJaWYgKGRyYmRfcmVxdWVzdF9zdGF0ZShhZG1fY3R4LmRldmljZSwgTlModXNlcl9pc3AsIDEpKSA9PSBTU19OT1RISU5HX1RPX0RPKQogCQlyZXRjb2RlID0gRVJSX1BBVVNFX0lTX1NFVDsKKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcmJkX2FkbV9yZXN1bWVfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJdW5pb24gZHJiZF9kZXZfc3RhdGUgczsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAotCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9NSU5PUik7CisJcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoJmFkbV9jdHgsIHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9NSU5PUik7CiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCiAJCWdvdG8gb3V0OwogCisJbXV0ZXhfbG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIAlpZiAoZHJiZF9yZXF1ZXN0X3N0YXRlKGFkbV9jdHguZGV2aWNlLCBOUyh1c2VyX2lzcCwgMCkpID09IFNTX05PVEhJTkdfVE9fRE8pIHsKIAkJcyA9IGFkbV9jdHguZGV2aWNlLT5zdGF0ZTsKIAkJaWYgKHMuY29ubiA9PSBDX1BBVVNFRF9TWU5DX1MgfHwgcy5jb25uID09IENfUEFVU0VEX1NZTkNfVCkgewpAQCAtMjcxNyw5ICsyNzk0LDkgQEAKIAkJCXJldGNvZGUgPSBFUlJfUEFVU0VfSVNfQ0xFQVI7CiAJCX0KIAl9Ci0KKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3MzAsMTUgKzI4MDcsMTcgQEAKIAogaW50IGRyYmRfYWRtX3Jlc3VtZV9pbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJldGNvZGU7IC8qIGVudW0gZHJiZF9yZXRfY29kZSByc3AuIGVudW0gZHJiZF9zdGF0ZV9ydiAqLwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKIAkJZ290byBvdXQ7CiAKKwltdXRleF9sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCWRldmljZSA9IGFkbV9jdHguZGV2aWNlOwogCWlmICh0ZXN0X2JpdChORVdfQ1VSX1VVSUQsICZkZXZpY2UtPmZsYWdzKSkgewogCQlkcmJkX3V1aWRfbmV3X2N1cnJlbnQoZGV2aWNlKTsKQEAgLTI3NTMsOSArMjgzMiw5IEBACiAJCQl0bF9yZXN0YXJ0KGZpcnN0X3BlZXJfZGV2aWNlKGRldmljZSktPmNvbm5lY3Rpb24sIEZBSUxfRlJPWkVOX0RJU0tfSU8pOwogCX0KIAlkcmJkX3Jlc3VtZV9pbyhkZXZpY2UpOwotCisJbXV0ZXhfdW5sb2NrKCZhZG1fY3R4LnJlc291cmNlLT5hZG1fbXV0ZXgpOwogb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTMxLDEwICszMDEwLDExIEBACiAKIGludCBkcmJkX2FkbV9nZXRfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlpbnQgZXJyOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKQEAgLTI5NDYsNyArMzAyNiw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwlkcmJkX2FkbV9maW5pc2goJmFkbV9jdHgsIGluZm8sIHJldGNvZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTMzLDExICszMjEzLDEyIEBACiAKIGludCBkcmJkX2FkbV9nZXRfdGltZW91dF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlzdHJ1Y3QgdGltZW91dF9wYXJtcyB0cDsKIAlpbnQgZXJyOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKQEAgLTMxNTQsMTcgKzMyMzUsMTggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcmJkX2FkbV9zdGFydF9vdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2U7CiAJZW51bSBkcmJkX3JldF9jb2RlIHJldGNvZGU7CiAJc3RydWN0IHN0YXJ0X292X3Bhcm1zIHBhcm1zOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX01JTk9SKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKQEAgLTMxNzksMTAgKzMyNjEsMTIgQEAKIAkJaW50IGVyciA9IHN0YXJ0X292X3Bhcm1zX2Zyb21fYXR0cnMoJnBhcm1zLCBpbmZvKTsKIAkJaWYgKGVycikgewogCQkJcmV0Y29kZSA9IEVSUl9NQU5EQVRPUllfVEFHOwotCQkJZHJiZF9tc2dfcHV0X2luZm8oZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOworCQkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC5yZXBseV9za2IsIGZyb21fYXR0cnNfZXJyX3RvX3R4dChlcnIpKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQorCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CisKIAkvKiB3X21ha2Vfb3ZfcmVxdWVzdCBleHBlY3RzIHBvc2l0aW9uIHRvIGJlIGFsaWduZWQgKi8KIAlkZXZpY2UtPm92X3N0YXJ0X3NlY3RvciA9IHBhcm1zLm92X3N0YXJ0X3NlY3RvciAmIH4oQk1fU0VDVF9QRVJfQklULTEpOwogCWRldmljZS0+b3Zfc3RvcF9zZWN0b3IgPSBwYXJtcy5vdl9zdG9wX3NlY3RvcjsKQEAgLTMxOTMsMjEgKzMyNzcsMjQgQEAKIAl3YWl0X2V2ZW50KGRldmljZS0+bWlzY193YWl0LCAhdGVzdF9iaXQoQklUTUFQX0lPLCAmZGV2aWNlLT5mbGFncykpOwogCXJldGNvZGUgPSBkcmJkX3JlcXVlc3Rfc3RhdGUoZGV2aWNlLCBOUyhjb25uLCBDX1ZFUklGWV9TKSk7CiAJZHJiZF9yZXN1bWVfaW8oZGV2aWNlKTsKKworCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIG91dDoKLQlkcmJkX2FkbV9maW5pc2goaW5mbywgcmV0Y29kZSk7CisJZHJiZF9hZG1fZmluaXNoKCZhZG1fY3R4LCBpbmZvLCByZXRjb2RlKTsKIAlyZXR1cm4gMDsKIH0KIAogCiBpbnQgZHJiZF9hZG1fbmV3X2NfdXVpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2U7CiAJZW51bSBkcmJkX3JldF9jb2RlIHJldGNvZGU7CiAJaW50IHNraXBfaW5pdGlhbF9zeW5jID0gMDsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXdfY191dWlkX3Bhcm1zIGFyZ3M7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQpAQCAtMzIxOSwxMSArMzMwNiwxMiBAQAogCQllcnIgPSBuZXdfY191dWlkX3Bhcm1zX2Zyb21fYXR0cnMoJmFyZ3MsIGluZm8pOwogCQlpZiAoZXJyKSB7CiAJCQlyZXRjb2RlID0gRVJSX01BTkRBVE9SWV9UQUc7Ci0JCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgZnJvbV9hdHRyc19lcnJfdG9fdHh0KGVycikpOwogCQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfQogCisJbXV0ZXhfbG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIAltdXRleF9sb2NrKGRldmljZS0+c3RhdGVfbXV0ZXgpOyAvKiBQcm90ZWN0cyB1cyBhZ2FpbnN0IHNlcmlhbGl6ZWQgc3RhdGUgY2hhbmdlcy4gKi8KIAogCWlmICghZ2V0X2xkZXYoZGV2aWNlKSkgewpAQCAtMzI2OCwyMiArMzM1NiwyNCBAQAogCXB1dF9sZGV2KGRldmljZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKGRldmljZS0+c3RhdGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIG91dF9ub2xvY2s6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGRyYmRfcmV0X2NvZGUKLWRyYmRfY2hlY2tfcmVzb3VyY2VfbmFtZShjb25zdCBjaGFyICpuYW1lKQorZHJiZF9jaGVja19yZXNvdXJjZV9uYW1lKHN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0ICphZG1fY3R4KQogeworCWNvbnN0IGNoYXIgKm5hbWUgPSBhZG1fY3R4LT5yZXNvdXJjZV9uYW1lOwogCWlmICghbmFtZSB8fCAhbmFtZVswXSkgewotCQlkcmJkX21zZ19wdXRfaW5mbygicmVzb3VyY2UgbmFtZSBtaXNzaW5nIik7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgtPnJlcGx5X3NrYiwgInJlc291cmNlIG5hbWUgbWlzc2luZyIpOwogCQlyZXR1cm4gRVJSX01BTkRBVE9SWV9UQUc7CiAJfQogCS8qIGlmIHdlIHdhbnQgdG8gdXNlIHRoZXNlIGluIHN5c2ZzL2NvbmZpZ2ZzL2RlYnVnZnMgc29tZSBkYXksCiAJICogd2UgbXVzdCBub3QgYWxsb3cgc2xhc2hlcyAqLwogCWlmIChzdHJjaHIobmFtZSwgJy8nKSkgewotCQlkcmJkX21zZ19wdXRfaW5mbygiaW52YWxpZCByZXNvdXJjZSBuYW1lIik7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgtPnJlcGx5X3NrYiwgImludmFsaWQgcmVzb3VyY2UgbmFtZSIpOwogCQlyZXR1cm4gRVJSX0lOVkFMSURfUkVRVUVTVDsKIAl9CiAJcmV0dXJuIE5PX0VSUk9SOwpAQCAtMzI5MSwxMSArMzM4MSwxMiBAQAogCiBpbnQgZHJiZF9hZG1fbmV3X3Jlc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGRyYmRfY29uZmlnX2NvbnRleHQgYWRtX2N0eDsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAlzdHJ1Y3QgcmVzX29wdHMgcmVzX29wdHM7CiAJaW50IGVycjsKIAotCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKHNrYiwgaW5mbywgMCk7CisJcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoJmFkbV9jdHgsIHNrYiwgaW5mbywgMCk7CiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCkBAIC0zMzA1LDQ4ICszMzk2LDUwIEBACiAJZXJyID0gcmVzX29wdHNfZnJvbV9hdHRycygmcmVzX29wdHMsIGluZm8pOwogCWlmIChlcnIgJiYgZXJyICE9IC1FTk9NU0cpIHsKIAkJcmV0Y29kZSA9IEVSUl9NQU5EQVRPUllfVEFHOwotCQlkcmJkX21zZ19wdXRfaW5mbyhmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCBmcm9tX2F0dHJzX2Vycl90b190eHQoZXJyKSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJldGNvZGUgPSBkcmJkX2NoZWNrX3Jlc291cmNlX25hbWUoYWRtX2N0eC5yZXNvdXJjZV9uYW1lKTsKKwlyZXRjb2RlID0gZHJiZF9jaGVja19yZXNvdXJjZV9uYW1lKCZhZG1fY3R4KTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKIAkJZ290byBvdXQ7CiAKIAlpZiAoYWRtX2N0eC5yZXNvdXJjZSkgewogCQlpZiAoaW5mby0+bmxoZHItPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRVhDTCkgewogCQkJcmV0Y29kZSA9IEVSUl9JTlZBTElEX1JFUVVFU1Q7Ci0JCQlkcmJkX21zZ19wdXRfaW5mbygicmVzb3VyY2UgZXhpc3RzIik7CisJCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgInJlc291cmNlIGV4aXN0cyIpOwogCQl9CiAJCS8qIGVsc2U6IHN0aWxsIE5PX0VSUk9SICovCiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIG5vdCB5ZXQgc2FmZSBmb3IgZ2VubF9mYW1pbHkucGFyYWxsZWxfb3BzICovCiAJaWYgKCFjb25uX2NyZWF0ZShhZG1fY3R4LnJlc291cmNlX25hbWUsICZyZXNfb3B0cykpCiAJCXJldGNvZGUgPSBFUlJfTk9NRU07CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcmJkX2FkbV9uZXdfbWlub3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCBhZG1fY3R4OwogCXN0cnVjdCBkcmJkX2dlbmxtc2doZHIgKmRoID0gaW5mby0+dXNlcmhkcjsKIAllbnVtIGRyYmRfcmV0X2NvZGUgcmV0Y29kZTsKIAotCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9SRVNPVVJDRSk7CisJcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoJmFkbV9jdHgsIHNrYiwgaW5mbywgRFJCRF9BRE1fTkVFRF9SRVNPVVJDRSk7CiAJaWYgKCFhZG1fY3R4LnJlcGx5X3NrYikKIAkJcmV0dXJuIHJldGNvZGU7CiAJaWYgKHJldGNvZGUgIT0gTk9fRVJST1IpCiAJCWdvdG8gb3V0OwogCiAJaWYgKGRoLT5taW5vciA+IE1JTk9STUFTSykgewotCQlkcmJkX21zZ19wdXRfaW5mbygicmVxdWVzdGVkIG1pbm9yIG91dCBvZiByYW5nZSIpOworCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgInJlcXVlc3RlZCBtaW5vciBvdXQgb2YgcmFuZ2UiKTsKIAkJcmV0Y29kZSA9IEVSUl9JTlZBTElEX1JFUVVFU1Q7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoYWRtX2N0eC52b2x1bWUgPiBEUkJEX1ZPTFVNRV9NQVgpIHsKLQkJZHJiZF9tc2dfcHV0X2luZm8oInJlcXVlc3RlZCB2b2x1bWUgaWQgb3V0IG9mIHJhbmdlIik7CisJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCAicmVxdWVzdGVkIHZvbHVtZSBpZCBvdXQgb2YgcmFuZ2UiKTsKIAkJcmV0Y29kZSA9IEVSUl9JTlZBTElEX1JFUVVFU1Q7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMzNjAsOSArMzQ1MywxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRjb2RlID0gZHJiZF9jcmVhdGVfZGV2aWNlKGFkbV9jdHgucmVzb3VyY2UsIGRoLT5taW5vciwgYWRtX2N0eC52b2x1bWUpOworCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CisJcmV0Y29kZSA9IGRyYmRfY3JlYXRlX2RldmljZSgmYWRtX2N0eCwgZGgtPm1pbm9yKTsKKwltdXRleF91bmxvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzODMsMzUgKzM0NzgsNDAgQEAKIAogaW50IGRyYmRfYWRtX2RlbF9taW5vcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogeworCXN0cnVjdCBkcmJkX2NvbmZpZ19jb250ZXh0IGFkbV9jdHg7CiAJZW51bSBkcmJkX3JldF9jb2RlIHJldGNvZGU7CiAKLQlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZShza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOworCXJldGNvZGUgPSBkcmJkX2FkbV9wcmVwYXJlKCZhZG1fY3R4LCBza2IsIGluZm8sIERSQkRfQURNX05FRURfTUlOT1IpOwogCWlmICghYWRtX2N0eC5yZXBseV9za2IpCiAJCXJldHVybiByZXRjb2RlOwogCWlmIChyZXRjb2RlICE9IE5PX0VSUk9SKQogCQlnb3RvIG91dDsKIAorCW11dGV4X2xvY2soJmFkbV9jdHgucmVzb3VyY2UtPmFkbV9tdXRleCk7CiAJcmV0Y29kZSA9IGFkbV9kZWxfbWlub3IoYWRtX2N0eC5kZXZpY2UpOworCW11dGV4X3VubG9jaygmYWRtX2N0eC5yZXNvdXJjZS0+YWRtX211dGV4KTsKIG91dDoKLQlkcmJkX2FkbV9maW5pc2goaW5mbywgcmV0Y29kZSk7CisJZHJiZF9hZG1fZmluaXNoKCZhZG1fY3R4LCBpbmZvLCByZXRjb2RlKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGRyYmRfYWRtX2Rvd24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCBhZG1fY3R4OwogCXN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZTsKIAlzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uOwogCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlOwogCWludCByZXRjb2RlOyAvKiBlbnVtIGRyYmRfcmV0X2NvZGUgcnNwLiBlbnVtIGRyYmRfc3RhdGVfcnYgKi8KIAl1bnNpZ25lZCBpOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX1JFU09VUkNFKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX1JFU09VUkNFKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKLQkJZ290byBvdXQ7CisJCWdvdG8gZmluaXNoOwogCiAJcmVzb3VyY2UgPSBhZG1fY3R4LnJlc291cmNlOworCW11dGV4X2xvY2soJnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCS8qIGRlbW90ZSAqLwogCWZvcl9lYWNoX2Nvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVzb3VyY2UpIHsKIAkJc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKnBlZXJfZGV2aWNlOwpAQCAtMzQxOSwxNCArMzUxOSwxNCBAQAogCQlpZHJfZm9yX2VhY2hfZW50cnkoJmNvbm5lY3Rpb24tPnBlZXJfZGV2aWNlcywgcGVlcl9kZXZpY2UsIGkpIHsKIAkJCXJldGNvZGUgPSBkcmJkX3NldF9yb2xlKHBlZXJfZGV2aWNlLT5kZXZpY2UsIFJfU0VDT05EQVJZLCAwKTsKIAkJCWlmIChyZXRjb2RlIDwgU1NfU1VDQ0VTUykgewotCQkJCWRyYmRfbXNnX3B1dF9pbmZvKCJmYWlsZWQgdG8gZGVtb3RlIik7CisJCQkJZHJiZF9tc2dfcHV0X2luZm8oYWRtX2N0eC5yZXBseV9za2IsICJmYWlsZWQgdG8gZGVtb3RlIik7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KIAogCQlyZXRjb2RlID0gY29ubl90cnlfZGlzY29ubmVjdChjb25uZWN0aW9uLCAwKTsKIAkJaWYgKHJldGNvZGUgPCBTU19TVUNDRVNTKSB7Ci0JCQlkcmJkX21zZ19wdXRfaW5mbygiZmFpbGVkIHRvIGRpc2Nvbm5lY3QiKTsKKwkJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCAiZmFpbGVkIHRvIGRpc2Nvbm5lY3QiKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtMzQzNSw3ICszNTM1LDcgQEAKIAlpZHJfZm9yX2VhY2hfZW50cnkoJnJlc291cmNlLT5kZXZpY2VzLCBkZXZpY2UsIGkpIHsKIAkJcmV0Y29kZSA9IGFkbV9kZXRhY2goZGV2aWNlLCAwKTsKIAkJaWYgKHJldGNvZGUgPCBTU19TVUNDRVNTIHx8IHJldGNvZGUgPiBOT19FUlJPUikgewotCQkJZHJiZF9tc2dfcHV0X2luZm8oImZhaWxlZCB0byBkZXRhY2giKTsKKwkJCWRyYmRfbXNnX3B1dF9pbmZvKGFkbV9jdHgucmVwbHlfc2tiLCAiZmFpbGVkIHRvIGRldGFjaCIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0zNDUzLDcgKzM1NTMsNyBAQAogCQlyZXRjb2RlID0gYWRtX2RlbF9taW5vcihkZXZpY2UpOwogCQlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikgewogCQkJLyogImNhbiBub3QgaGFwcGVuIiAqLwotCQkJZHJiZF9tc2dfcHV0X2luZm8oImZhaWxlZCB0byBkZWxldGUgdm9sdW1lIik7CisJCQlkcmJkX21zZ19wdXRfaW5mbyhhZG1fY3R4LnJlcGx5X3NrYiwgImZhaWxlZCB0byBkZWxldGUgdm9sdW1lIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTM0NjIsMjUgKzM1NjIsMjggQEAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAlkcmJkX2ZyZWVfcmVzb3VyY2UocmVzb3VyY2UpOwogCXJldGNvZGUgPSBOT19FUlJPUjsKLQogb3V0OgotCWRyYmRfYWRtX2ZpbmlzaChpbmZvLCByZXRjb2RlKTsKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5hZG1fbXV0ZXgpOworZmluaXNoOgorCWRyYmRfYWRtX2ZpbmlzaCgmYWRtX2N0eCwgaW5mbywgcmV0Y29kZSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBkcmJkX2FkbV9kZWxfcmVzb3VyY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZHJiZF9jb25maWdfY29udGV4dCBhZG1fY3R4OwogCXN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZTsKIAlzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uOwogCWVudW0gZHJiZF9yZXRfY29kZSByZXRjb2RlOwogCi0JcmV0Y29kZSA9IGRyYmRfYWRtX3ByZXBhcmUoc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX1JFU09VUkNFKTsKKwlyZXRjb2RlID0gZHJiZF9hZG1fcHJlcGFyZSgmYWRtX2N0eCwgc2tiLCBpbmZvLCBEUkJEX0FETV9ORUVEX1JFU09VUkNFKTsKIAlpZiAoIWFkbV9jdHgucmVwbHlfc2tiKQogCQlyZXR1cm4gcmV0Y29kZTsKIAlpZiAocmV0Y29kZSAhPSBOT19FUlJPUikKLQkJZ290byBvdXQ7CisJCWdvdG8gZmluaXNoOwogCiAJcmVzb3VyY2UgPSBhZG1fY3R4LnJlc291cmNlOworCW11dGV4X2xvY2soJnJlc291cmNlLT5hZG1fbXV0ZXgpOwogCWZvcl9lYWNoX2Nvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVzb3VyY2UpIHsKIAkJaWYgKGNvbm5lY3Rpb24tPmNzdGF0ZSA+IENfU1RBTkRBTE9ORSkgewogCQkJcmV0Y29kZSA9IEVSUl9ORVRfQ09ORklHVVJFRDsKQEAgLTM0OTksNyArMzYwMiw5IEBACiAJZHJiZF9mcmVlX3Jlc291cmNlKHJlc291cmNlKTsKIAlyZXRjb2RlID0gTk9fRVJST1I7CiBvdXQ6Ci0JZHJiZF9hZG1fZmluaXNoKGluZm8sIHJldGNvZGUpOworCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPmFkbV9tdXRleCk7CitmaW5pc2g6CisJZHJiZF9hZG1fZmluaXNoKCZhZG1fY3R4LCBpbmZvLCByZXRjb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxhLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubGEuYwppbmRleCBmYTY3MmI2ZC4uYjJkNDc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxhLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxhLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSAiZHJiZF93cmFwcGVycy5oIgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvZHJiZF9nZW5sX2FwaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvYy5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvYy5jCmluZGV4IDJmMjZlOGYuLjg5NzM2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3Byb2MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm9jLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB+MThzIGF2ZXJhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJaSA9IChkZXZpY2UtPnJzX2xhc3RfbWFyayArIDIpICUgRFJCRF9TWU5DX01BUktTOwogCWR0ID0gKGppZmZpZXMgLSBkZXZpY2UtPnJzX21hcmtfdGltZVtpXSkgLyBIWjsKLQlpZiAoZHQgPiAoRFJCRF9TWU5DX01BUktfU1RFUCAqIERSQkRfU1lOQ19NQVJLUykpCisJaWYgKGR0ID4gMTgwKQogCQlzdGFsbGVkID0gMTsKIAogCWlmICghZHQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm90b2NvbC5oIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvdG9jb2wuaAppbmRleCAzYzA0ZWMwLi4yZGE5MTA0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvdG9jb2wuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm90b2NvbC5oCkBAIC01NCw2ICs1NCwxMSBAQAogCVBfQ09OTl9TVF9DSEdfUkVQTFkgICA9IDB4MmIsIC8qIG1ldGEgc29jazogQ29ubmVjdGlvbiBzaWRlIHN0YXRlIHJlcSByZXBseSAqLwogCVBfUkVUUllfV1JJVEUJICAgICAgPSAweDJjLCAvKiBQcm90b2NvbCBDOiByZXRyeSBjb25mbGljdGluZyB3cml0ZSByZXF1ZXN0ICovCiAJUF9QUk9UT0NPTF9VUERBVEUgICAgID0gMHgyZCwgLyogZGF0YSBzb2NrOiBpcyB1c2VkIGluIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zICovCisgICAgICAgIC8qIDB4MmUgdG8gMHgzMCByZXNlcnZlZCwgdXNlZCBpbiBkcmJkIDkgKi8KKworCS8qIFJFUV9ESVNDQVJELiBXZSB1c2VkICJkaXNjYXJkIiBpbiBkaWZmZXJlbnQgY29udGV4dHMgYmVmb3JlLAorCSAqIHdoaWNoIGlzIHdoeSBJIGNob3NlIFRSSU0gaGVyZSwgdG8gZGlzYW1iaWd1YXRlLiAqLworCVBfVFJJTSAgICAgICAgICAgICAgICA9IDB4MzEsCiAKIAlQX01BWV9JR05PUkUJICAgICAgPSAweDEwMCwgLyogRmxhZyB0byB0ZXN0IGlmIChjbWQgPiBQX01BWV9JR05PUkUpIC4uLiAqLwogCVBfTUFYX09QVF9DTUQJICAgICAgPSAweDEwMSwKQEAgLTExOSw2ICsxMjQsMTEgQEAKIAl1MzIJICAgIGRwX2ZsYWdzOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IHBfdHJpbSB7CisJc3RydWN0IHBfZGF0YSBwX2RhdGE7CisJdTMyCSAgICBzaXplOwkvKiA9PSBiaW8tPmJpX3NpemUgKi8KK30gX19wYWNrZWQ7CisKIC8qCiAgKiBjb21tYW5kcyB3aGljaCBzaGFyZSBhIHN0cnVjdDoKICAqICBwX2Jsb2NrX2FjazoKQEAgLTE1MCw2ICsxNjAsOCBAQAogICogICBSZXBvcnRQYXJhbXMKICAqLwogCisjZGVmaW5lIEZGX1RSSU0gICAgICAxCisKIHN0cnVjdCBwX2Nvbm5lY3Rpb25fZmVhdHVyZXMgewogCXUzMiBwcm90b2NvbF9taW47CiAJdTMyIGZlYXR1cmVfZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYwppbmRleCA2OGUzOTkyLi5iNmM4YWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKQEAgLTQ2LDkgKzQ2LDEwIEBACiAjaW5jbHVkZSAiZHJiZF9pbnQuaCIKICNpbmNsdWRlICJkcmJkX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAiZHJiZF9yZXEuaCIKLQogI2luY2x1ZGUgImRyYmRfdmxpLmgiCiAKKyNkZWZpbmUgUFJPX0ZFQVRVUkVTIChGRl9UUklNKQorCiBzdHJ1Y3QgcGFja2V0X2luZm8gewogCWVudW0gZHJiZF9wYWNrZXQgY21kOwogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtNjUsNyArNjYsNyBAQAogc3RhdGljIGludCBkcmJkX2RvX2ZlYXR1cmVzKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOwogc3RhdGljIGludCBkcmJkX2RvX2F1dGgoc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbik7CiBzdGF0aWMgaW50IGRyYmRfZGlzY29ubmVjdGVkKHN0cnVjdCBkcmJkX3BlZXJfZGV2aWNlICopOwotCitzdGF0aWMgdm9pZCBjb25uX3dhaXRfYWN0aXZlX2VlX2VtcHR5KHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOwogc3RhdGljIGVudW0gZmluaXNoX2Vwb2NoIGRyYmRfbWF5X2ZpbmlzaF9lcG9jaChzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICosIHN0cnVjdCBkcmJkX2Vwb2NoICosIGVudW0gZXBvY2hfZXZlbnQpOwogc3RhdGljIGludCBlX2VuZF9ibG9jayhzdHJ1Y3QgZHJiZF93b3JrICosIGludCk7CiAKQEAgLTIzNCw5ICsyMzUsMTcgQEAKICAqIEByZXRyeToJd2hldGhlciB0byByZXRyeSwgaWYgbm90IGVub3VnaCBwYWdlcyBhcmUgYXZhaWxhYmxlIHJpZ2h0IG5vdwogICoKICAqIFRyaWVzIHRvIGFsbG9jYXRlIG51bWJlciBwYWdlcywgZmlyc3QgZnJvbSBvdXIgb3duIHBhZ2UgcG9vbCwgdGhlbiBmcm9tCi0gKiB0aGUga2VybmVsLCB1bmxlc3MgdGhpcyBhbGxvY2F0aW9uIHdvdWxkIGV4Y2VlZCB0aGUgbWF4X2J1ZmZlcnMgc2V0dGluZy4KKyAqIHRoZSBrZXJuZWwuCiAgKiBQb3NzaWJseSByZXRyeSB1bnRpbCBEUkJEIGZyZWVzIHN1ZmZpY2llbnQgcGFnZXMgc29tZXdoZXJlIGVsc2UuCiAgKgorICogSWYgdGhpcyBhbGxvY2F0aW9uIHdvdWxkIGV4Y2VlZCB0aGUgbWF4X2J1ZmZlcnMgc2V0dGluZywgd2UgdGhyb3R0bGUKKyAqIGFsbG9jYXRpb24gKHNjaGVkdWxlX3RpbWVvdXQpIHRvIGdpdmUgdGhlIHN5c3RlbSBzb21lIHJvb20gdG8gYnJlYXRoZS4KKyAqCisgKiBXZSBkbyBub3QgdXNlIG1heC1idWZmZXJzIGFzIGhhcmQgbGltaXQsIGJlY2F1c2UgaXQgY291bGQgbGVhZCB0bworICogY29uZ2VzdGlvbiBhbmQgZnVydGhlciB0byBhIGRpc3RyaWJ1dGVkIGRlYWRsb2NrIGR1cmluZyBvbmxpbmUtdmVyaWZ5IG9yCisgKiAoY2hlY2tzdW0gYmFzZWQpIHJlc3luYywgaWYgdGhlIG1heC1idWZmZXJzLCBzb2NrZXQgYnVmZmVyIHNpemVzIGFuZAorICogcmVzeW5jLXJhdGUgc2V0dGluZ3MgYXJlIG1pcy1jb25maWd1cmVkLgorICoKICAqIFJldHVybnMgYSBwYWdlIGNoYWluIGxpbmtlZCB2aWEgcGFnZS0+cHJpdmF0ZS4KICAqLwogc3RydWN0IHBhZ2UgKmRyYmRfYWxsb2NfcGFnZXMoc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKnBlZXJfZGV2aWNlLCB1bnNpZ25lZCBpbnQgbnVtYmVyLApAQCAtMjQ2LDEwICsyNTUsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2NvbmYgKm5jOwogCURFRklORV9XQUlUKHdhaXQpOwotCWludCBteGI7CisJdW5zaWduZWQgaW50IG14YjsKIAotCS8qIFllcywgd2UgbWF5IHJ1biB1cCB0byBAbnVtYmVyIG92ZXIgbWF4X2J1ZmZlcnMuIElmIHdlCi0JICogZm9sbG93IGl0IHN0cmljdGx5LCB0aGUgYWRtaW4gd2lsbCBnZXQgaXQgd3JvbmcgYW55d2F5cy4gKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJbmMgPSByY3VfZGVyZWZlcmVuY2UocGVlcl9kZXZpY2UtPmNvbm5lY3Rpb24tPm5ldF9jb25mKTsKIAlteGIgPSBuYyA/IG5jLT5tYXhfYnVmZmVycyA6IDEwMDAwMDA7CkBAIC0yNzcsNyArMjg0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2NoZWR1bGUoKTsKKwkJaWYgKHNjaGVkdWxlX3RpbWVvdXQoSFovMTApID09IDApCisJCQlteGIgPSBVSU5UX01BWDsKIAl9CiAJZmluaXNoX3dhaXQoJmRyYmRfcHBfd2FpdCwgJndhaXQpOwogCkBAIC0zMzEsNyArMzM5LDcgQEAKIAogc3RydWN0IGRyYmRfcGVlcl9yZXF1ZXN0ICoKIGRyYmRfYWxsb2NfcGVlcl9yZXEoc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKnBlZXJfZGV2aWNlLCB1NjQgaWQsIHNlY3Rvcl90IHNlY3RvciwKLQkJICAgIHVuc2lnbmVkIGludCBkYXRhX3NpemUsIGdmcF90IGdmcF9tYXNrKSBfX211c3RfaG9sZChsb2NhbCkKKwkJICAgIHVuc2lnbmVkIGludCBkYXRhX3NpemUsIGJvb2wgaGFzX3BheWxvYWQsIGdmcF90IGdmcF9tYXNrKSBfX211c3RfaG9sZChsb2NhbCkKIHsKIAlzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSA9IHBlZXJfZGV2aWNlLT5kZXZpY2U7CiAJc3RydWN0IGRyYmRfcGVlcl9yZXF1ZXN0ICpwZWVyX3JlcTsKQEAgLTM0OCw3ICszNTYsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoZGF0YV9zaXplKSB7CisJaWYgKGhhc19wYXlsb2FkICYmIGRhdGFfc2l6ZSkgewogCQlwYWdlID0gZHJiZF9hbGxvY19wYWdlcyhwZWVyX2RldmljZSwgbnJfcGFnZXMsIChnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKTsKIAkJaWYgKCFwYWdlKQogCQkJZ290byBmYWlsOwpAQCAtMTAyNiwyNCArMTAzNCwyNyBAQAogCWlmIChkcmJkX3NlbmRfcHJvdG9jb2woY29ubmVjdGlvbikgPT0gLUVPUE5PVFNVUFApCiAJCXJldHVybiAtMTsKIAorCS8qIFByZXZlbnQgYSByYWNlIGJldHdlZW4gcmVzeW5jLWhhbmRzaGFrZSBhbmQKKwkgKiBiZWluZyBwcm9tb3RlZCB0byBQcmltYXJ5LgorCSAqCisJICogR3JhYiBhbmQgcmVsZWFzZSB0aGUgc3RhdGUgbXV0ZXgsIHNvIHdlIGtub3cgdGhhdCBhbnkgY3VycmVudAorCSAqIGRyYmRfc2V0X3JvbGUoKSBpcyBmaW5pc2hlZCwgYW5kIGFueSBpbmNvbWluZyBkcmJkX3NldF9yb2xlCisJICogd2lsbCBzZWUgdGhlIFNUQVRFX1NFTlQgZmxhZywgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIGNsZWFyZWQuCisJICovCisJaWRyX2Zvcl9lYWNoX2VudHJ5KCZjb25uZWN0aW9uLT5wZWVyX2RldmljZXMsIHBlZXJfZGV2aWNlLCB2bnIpCisJCW11dGV4X2xvY2socGVlcl9kZXZpY2UtPmRldmljZS0+c3RhdGVfbXV0ZXgpOworCiAJc2V0X2JpdChTVEFURV9TRU5ULCAmY29ubmVjdGlvbi0+ZmxhZ3MpOwogCisJaWRyX2Zvcl9lYWNoX2VudHJ5KCZjb25uZWN0aW9uLT5wZWVyX2RldmljZXMsIHBlZXJfZGV2aWNlLCB2bnIpCisJCW11dGV4X3VubG9jayhwZWVyX2RldmljZS0+ZGV2aWNlLT5zdGF0ZV9tdXRleCk7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaWRyX2Zvcl9lYWNoX2VudHJ5KCZjb25uZWN0aW9uLT5wZWVyX2RldmljZXMsIHBlZXJfZGV2aWNlLCB2bnIpIHsKIAkJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UgPSBwZWVyX2RldmljZS0+ZGV2aWNlOwogCQlrcmVmX2dldCgmZGV2aWNlLT5rcmVmKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQkJLyogUHJldmVudCBhIHJhY2UgYmV0d2VlbiByZXN5bmMtaGFuZHNoYWtlIGFuZAotCQkgKiBiZWluZyBwcm9tb3RlZCB0byBQcmltYXJ5LgotCQkgKgotCQkgKiBHcmFiIGFuZCByZWxlYXNlIHRoZSBzdGF0ZSBtdXRleCwgc28gd2Uga25vdyB0aGF0IGFueSBjdXJyZW50Ci0JCSAqIGRyYmRfc2V0X3JvbGUoKSBpcyBmaW5pc2hlZCwgYW5kIGFueSBpbmNvbWluZyBkcmJkX3NldF9yb2xlCi0JCSAqIHdpbGwgc2VlIHRoZSBTVEFURV9TRU5UIGZsYWcsIGFuZCB3YWl0IGZvciBpdCB0byBiZSBjbGVhcmVkLgotCQkgKi8KLQkJbXV0ZXhfbG9jayhkZXZpY2UtPnN0YXRlX211dGV4KTsKLQkJbXV0ZXhfdW5sb2NrKGRldmljZS0+c3RhdGVfbXV0ZXgpOwotCiAJCWlmIChkaXNjYXJkX215X2RhdGEpCiAJCQlzZXRfYml0KERJU0NBUkRfTVlfREFUQSwgJmRldmljZS0+ZmxhZ3MpOwogCQllbHNlCkBAIC0xMzE1LDYgKzEzMjYsMjAgQEAKIAl1bnNpZ25lZCBucl9wYWdlcyA9IChkcyArIFBBR0VfU0laRSAtMSkgPj4gUEFHRV9TSElGVDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAorCWlmIChwZWVyX3JlcS0+ZmxhZ3MgJiBFRV9JU19UUklNX1VTRV9aRVJPT1VUKSB7CisJCS8qIHdhaXQgZm9yIGFsbCBwZW5kaW5nIElPIGNvbXBsZXRpb25zLCBiZWZvcmUgd2Ugc3RhcnQKKwkJICogemVyb2luZyB0aGluZ3Mgb3V0LiAqLworCQljb25uX3dhaXRfYWN0aXZlX2VlX2VtcHR5KGZpcnN0X3BlZXJfZGV2aWNlKGRldmljZSktPmNvbm5lY3Rpb24pOworCQlpZiAoYmxrZGV2X2lzc3VlX3plcm9vdXQoZGV2aWNlLT5sZGV2LT5iYWNraW5nX2JkZXYsCisJCQlzZWN0b3IsIGRzID4+IDksIEdGUF9OT0lPKSkKKwkJCXBlZXJfcmVxLT5mbGFncyB8PSBFRV9XQVNfRVJST1I7CisJCWRyYmRfZW5kaW9fd3JpdGVfc2VjX2ZpbmFsKHBlZXJfcmVxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBlZXJfcmVxLT5mbGFncyAmIEVFX0lTX1RSSU0pCisJCW5yX3BhZ2VzID0gMDsgLyogZGlzY2FyZHMgZG9uJ3QgaGF2ZSBhbnkgcGF5bG9hZC4gKi8KKwogCS8qIEluIG1vc3QgY2FzZXMsIHdlIHdpbGwgb25seSBuZWVkIG9uZSBiaW8uICBCdXQgaW4gY2FzZSB0aGUgbG93ZXIKIAkgKiBsZXZlbCByZXN0cmljdGlvbnMgaGFwcGVuIHRvIGJlIGRpZmZlcmVudCBhdCB0aGlzIG9mZnNldCBvbiB0aGlzCiAJICogc2lkZSB0aGFuIHRob3NlIG9mIHRoZSBzZW5kaW5nIHBlZXIsIHdlIG1heSBuZWVkIHRvIHN1Ym1pdCB0aGUKQEAgLTEzMjYsNyArMTM1MSw3IEBACiBuZXh0X2JpbzoKIAliaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sIG5yX3BhZ2VzKTsKIAlpZiAoIWJpbykgewotCQlkcmJkX2VycihkZXZpY2UsICJzdWJtaXRfZWU6IEFsbG9jYXRpb24gb2YgYSBiaW8gZmFpbGVkXG4iKTsKKwkJZHJiZF9lcnIoZGV2aWNlLCAic3VibWl0X2VlOiBBbGxvY2F0aW9uIG9mIGEgYmlvIGZhaWxlZCAobnJfcGFnZXM9JXUpXG4iLCBucl9wYWdlcyk7CiAJCWdvdG8gZmFpbDsKIAl9CiAJLyogPiBwZWVyX3JlcS0+aS5zZWN0b3IsIHVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBiaW8gKi8KQEAgLTEzNDAsNiArMTM2NSwxMSBAQAogCWJpb3MgPSBiaW87CiAJKytuX2Jpb3M7CiAKKwlpZiAocncgJiBSRVFfRElTQ0FSRCkgeworCQliaW8tPmJpX2l0ZXIuYmlfc2l6ZSA9IGRzOworCQlnb3RvIHN1Ym1pdDsKKwl9CisKIAlwYWdlX2NoYWluX2Zvcl9lYWNoKHBhZ2UpIHsKIAkJdW5zaWduZWQgbGVuID0gbWluX3QodW5zaWduZWQsIGRzLCBQQUdFX1NJWkUpOwogCQlpZiAoIWJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGxlbiwgMCkpIHsKQEAgLTEzNjAsOCArMTM5MCw5IEBACiAJCXNlY3RvciArPSBsZW4gPj4gOTsKIAkJLS1ucl9wYWdlczsKIAl9Ci0JRF9BU1NFUlQoZGV2aWNlLCBwYWdlID09IE5VTEwpOwogCURfQVNTRVJUKGRldmljZSwgZHMgPT0gMCk7CitzdWJtaXQ6CisJRF9BU1NFUlQoZGV2aWNlLCBwYWdlID09IE5VTEwpOwogCiAJYXRvbWljX3NldCgmcGVlcl9yZXEtPnBlbmRpbmdfYmlvcywgbl9iaW9zKTsKIAlkbyB7CkBAIC0xNDkwLDE5ICsxNTIxLDIxIEBACiAgKiBhbmQgZnJvbSByZWNlaXZlX0RhdGEgKi8KIHN0YXRpYyBzdHJ1Y3QgZHJiZF9wZWVyX3JlcXVlc3QgKgogcmVhZF9pbl9ibG9jayhzdHJ1Y3QgZHJiZF9wZWVyX2RldmljZSAqcGVlcl9kZXZpY2UsIHU2NCBpZCwgc2VjdG9yX3Qgc2VjdG9yLAotCSAgICAgIGludCBkYXRhX3NpemUpIF9fbXVzdF9ob2xkKGxvY2FsKQorCSAgICAgIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpIF9fbXVzdF9ob2xkKGxvY2FsKQogewogCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlID0gcGVlcl9kZXZpY2UtPmRldmljZTsKIAljb25zdCBzZWN0b3JfdCBjYXBhY2l0eSA9IGRyYmRfZ2V0X2NhcGFjaXR5KGRldmljZS0+dGhpc19iZGV2KTsKIAlzdHJ1Y3QgZHJiZF9wZWVyX3JlcXVlc3QgKnBlZXJfcmVxOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBkZ3MsIGRzLCBlcnI7CisJaW50IGRhdGFfc2l6ZSA9IHBpLT5zaXplOwogCXZvaWQgKmRpZ19pbiA9IHBlZXJfZGV2aWNlLT5jb25uZWN0aW9uLT5pbnRfZGlnX2luOwogCXZvaWQgKmRpZ192diA9IHBlZXJfZGV2aWNlLT5jb25uZWN0aW9uLT5pbnRfZGlnX3Z2OwogCXVuc2lnbmVkIGxvbmcgKmRhdGE7CisJc3RydWN0IHBfdHJpbSAqdHJpbSA9IChwaS0+Y21kID09IFBfVFJJTSkgPyBwaS0+ZGF0YSA6IE5VTEw7CiAKIAlkZ3MgPSAwOwotCWlmIChwZWVyX2RldmljZS0+Y29ubmVjdGlvbi0+cGVlcl9pbnRlZ3JpdHlfdGZtKSB7CisJaWYgKCF0cmltICYmIHBlZXJfZGV2aWNlLT5jb25uZWN0aW9uLT5wZWVyX2ludGVncml0eV90Zm0pIHsKIAkJZGdzID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShwZWVyX2RldmljZS0+Y29ubmVjdGlvbi0+cGVlcl9pbnRlZ3JpdHlfdGZtKTsKIAkJLyoKIAkJICogRklYTUU6IFJlY2VpdmUgdGhlIGluY29taW5nIGRpZ2VzdCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlcgpAQCAtMTUxNCw5ICsxNTQ3LDE1IEBACiAJCWRhdGFfc2l6ZSAtPSBkZ3M7CiAJfQogCisJaWYgKHRyaW0pIHsKKwkJRF9BU1NFUlQocGVlcl9kZXZpY2UsIGRhdGFfc2l6ZSA9PSAwKTsKKwkJZGF0YV9zaXplID0gYmUzMl90b19jcHUodHJpbS0+c2l6ZSk7CisJfQorCiAJaWYgKCFleHBlY3QoSVNfQUxJR05FRChkYXRhX3NpemUsIDUxMikpKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAoIWV4cGVjdChkYXRhX3NpemUgPD0gRFJCRF9NQVhfQklPX1NJWkUpKQorCS8qIHByZXBhcmUgZm9yIGxhcmdlciB0cmltIHJlcXVlc3RzLiAqLworCWlmICghdHJpbSAmJiAhZXhwZWN0KGRhdGFfc2l6ZSA8PSBEUkJEX01BWF9CSU9fU0laRSkpCiAJCXJldHVybiBOVUxMOwogCiAJLyogZXZlbiB0aG91Z2ggd2UgdHJ1c3Qgb3V0IHBlZXIsCkBAIC0xNTMyLDExICsxNTcxLDExIEBACiAJLyogR0ZQX05PSU8sIGJlY2F1c2Ugd2UgbXVzdCBub3QgY2F1c2UgYXJiaXRyYXJ5IHdyaXRlLW91dDogaW4gYSBEUkJECiAJICogImNyaXNzLWNyb3NzIiBzZXR1cCwgdGhhdCBtaWdodCBjYXVzZSB3cml0ZS1vdXQgb24gc29tZSBvdGhlciBEUkJELAogCSAqIHdoaWNoIGluIHR1cm4gbWlnaHQgYmxvY2sgb24gdGhlIG90aGVyIG5vZGUgYXQgdGhpcyB2ZXJ5IHBsYWNlLiAgKi8KLQlwZWVyX3JlcSA9IGRyYmRfYWxsb2NfcGVlcl9yZXEocGVlcl9kZXZpY2UsIGlkLCBzZWN0b3IsIGRhdGFfc2l6ZSwgR0ZQX05PSU8pOworCXBlZXJfcmVxID0gZHJiZF9hbGxvY19wZWVyX3JlcShwZWVyX2RldmljZSwgaWQsIHNlY3RvciwgZGF0YV9zaXplLCB0cmltID09IE5VTEwsIEdGUF9OT0lPKTsKIAlpZiAoIXBlZXJfcmVxKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICghZGF0YV9zaXplKQorCWlmICh0cmltKQogCQlyZXR1cm4gcGVlcl9yZXE7CiAKIAlkcyA9IGRhdGFfc2l6ZTsKQEAgLTE2NzYsMTIgKzE3MTUsMTIgQEAKIH0KIAogc3RhdGljIGludCByZWN2X3Jlc3luY19yZWFkKHN0cnVjdCBkcmJkX3BlZXJfZGV2aWNlICpwZWVyX2RldmljZSwgc2VjdG9yX3Qgc2VjdG9yLAotCQkJICAgIGludCBkYXRhX3NpemUpIF9fcmVsZWFzZXMobG9jYWwpCisJCQkgICAgc3RydWN0IHBhY2tldF9pbmZvICpwaSkgX19yZWxlYXNlcyhsb2NhbCkKIHsKIAlzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSA9IHBlZXJfZGV2aWNlLT5kZXZpY2U7CiAJc3RydWN0IGRyYmRfcGVlcl9yZXF1ZXN0ICpwZWVyX3JlcTsKIAotCXBlZXJfcmVxID0gcmVhZF9pbl9ibG9jayhwZWVyX2RldmljZSwgSURfU1lOQ0VSLCBzZWN0b3IsIGRhdGFfc2l6ZSk7CisJcGVlcl9yZXEgPSByZWFkX2luX2Jsb2NrKHBlZXJfZGV2aWNlLCBJRF9TWU5DRVIsIHNlY3RvciwgcGkpOwogCWlmICghcGVlcl9yZXEpCiAJCWdvdG8gZmFpbDsKIApAQCAtMTY5Nyw3ICsxNzM2LDcgQEAKIAlsaXN0X2FkZCgmcGVlcl9yZXEtPncubGlzdCwgJmRldmljZS0+c3luY19lZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2UtPnJlc291cmNlLT5yZXFfbG9jayk7CiAKLQlhdG9taWNfYWRkKGRhdGFfc2l6ZSA+PiA5LCAmZGV2aWNlLT5yc19zZWN0X2V2KTsKKwlhdG9taWNfYWRkKHBpLT5zaXplID4+IDksICZkZXZpY2UtPnJzX3NlY3RfZXYpOwogCWlmIChkcmJkX3N1Ym1pdF9wZWVyX3JlcXVlc3QoZGV2aWNlLCBwZWVyX3JlcSwgV1JJVEUsIERSQkRfRkFVTFRfUlNfV1IpID09IDApCiAJCXJldHVybiAwOwogCkBAIC0xNzg1LDcgKzE4MjQsNyBAQAogCQkvKiBkYXRhIGlzIHN1Ym1pdHRlZCB0byBkaXNrIHdpdGhpbiByZWN2X3Jlc3luY19yZWFkLgogCQkgKiBjb3JyZXNwb25kaW5nIHB1dF9sZGV2IGRvbmUgYmVsb3cgb24gZXJyb3IsCiAJCSAqIG9yIGluIGRyYmRfcGVlcl9yZXF1ZXN0X2VuZGlvLiAqLwotCQllcnIgPSByZWN2X3Jlc3luY19yZWFkKHBlZXJfZGV2aWNlLCBzZWN0b3IsIHBpLT5zaXplKTsKKwkJZXJyID0gcmVjdl9yZXN5bmNfcmVhZChwZWVyX2RldmljZSwgc2VjdG9yLCBwaSk7CiAJfSBlbHNlIHsKIAkJaWYgKF9fcmF0ZWxpbWl0KCZkcmJkX3JhdGVsaW1pdF9zdGF0ZSkpCiAJCQlkcmJkX2VycihkZXZpY2UsICJDYW4gbm90IHdyaXRlIHJlc3luYyBkYXRhIHRvIGxvY2FsIGRpc2suXG4iKTsKQEAgLTIxOTYsNyArMjIzNSw3IEBACiAJICovCiAKIAlzZWN0b3IgPSBiZTY0X3RvX2NwdShwLT5zZWN0b3IpOwotCXBlZXJfcmVxID0gcmVhZF9pbl9ibG9jayhwZWVyX2RldmljZSwgcC0+YmxvY2tfaWQsIHNlY3RvciwgcGktPnNpemUpOworCXBlZXJfcmVxID0gcmVhZF9pbl9ibG9jayhwZWVyX2RldmljZSwgcC0+YmxvY2tfaWQsIHNlY3RvciwgcGkpOwogCWlmICghcGVlcl9yZXEpIHsKIAkJcHV0X2xkZXYoZGV2aWNlKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0yMjA2LDcgKzIyNDUsMTUgQEAKIAogCWRwX2ZsYWdzID0gYmUzMl90b19jcHUocC0+ZHBfZmxhZ3MpOwogCXJ3IHw9IHdpcmVfZmxhZ3NfdG9fYmlvKGRwX2ZsYWdzKTsKLQlpZiAocGVlcl9yZXEtPnBhZ2VzID09IE5VTEwpIHsKKwlpZiAocGktPmNtZCA9PSBQX1RSSU0pIHsKKwkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShkZXZpY2UtPmxkZXYtPmJhY2tpbmdfYmRldik7CisJCXBlZXJfcmVxLT5mbGFncyB8PSBFRV9JU19UUklNOworCQlpZiAoIWJsa19xdWV1ZV9kaXNjYXJkKHEpKQorCQkJcGVlcl9yZXEtPmZsYWdzIHw9IEVFX0lTX1RSSU1fVVNFX1pFUk9PVVQ7CisJCURfQVNTRVJUKHBlZXJfZGV2aWNlLCBwZWVyX3JlcS0+aS5zaXplID4gMCk7CisJCURfQVNTRVJUKHBlZXJfZGV2aWNlLCBydyAmIFJFUV9ESVNDQVJEKTsKKwkJRF9BU1NFUlQocGVlcl9kZXZpY2UsIHBlZXJfcmVxLT5wYWdlcyA9PSBOVUxMKTsKKwl9IGVsc2UgaWYgKHBlZXJfcmVxLT5wYWdlcyA9PSBOVUxMKSB7CiAJCURfQVNTRVJUKGRldmljZSwgcGVlcl9yZXEtPmkuc2l6ZSA9PSAwKTsKIAkJRF9BU1NFUlQoZGV2aWNlLCBkcF9mbGFncyAmIERQX0ZMVVNIKTsKIAl9CkBAIC0yMjQyLDcgKzIyODksMTIgQEAKIAkJdXBkYXRlX3BlZXJfc2VxKHBlZXJfZGV2aWNlLCBwZWVyX3NlcSk7CiAJCXNwaW5fbG9ja19pcnEoJmRldmljZS0+cmVzb3VyY2UtPnJlcV9sb2NrKTsKIAl9Ci0JbGlzdF9hZGQoJnBlZXJfcmVxLT53Lmxpc3QsICZkZXZpY2UtPmFjdGl2ZV9lZSk7CisJLyogaWYgd2UgdXNlIHRoZSB6ZXJvb3V0IGZhbGxiYWNrIGNvZGUsIHdlIHByb2Nlc3Mgc3luY2hyb25vdXNseQorCSAqIGFuZCB3ZSB3YWl0IGZvciBhbGwgcGVuZGluZyByZXF1ZXN0cywgcmVzcGVjdGl2ZWx5IHdhaXQgZm9yCisJICogYWN0aXZlX2VlIHRvIGJlY29tZSBlbXB0eSBpbiBkcmJkX3N1Ym1pdF9wZWVyX3JlcXVlc3QoKTsKKwkgKiBiZXR0ZXIgbm90IGFkZCBvdXJzZWx2ZXMgaGVyZS4gKi8KKwlpZiAoKHBlZXJfcmVxLT5mbGFncyAmIEVFX0lTX1RSSU1fVVNFX1pFUk9PVVQpID09IDApCisJCWxpc3RfYWRkKCZwZWVyX3JlcS0+dy5saXN0LCAmZGV2aWNlLT5hY3RpdmVfZWUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5yZXNvdXJjZS0+cmVxX2xvY2spOwogCiAJaWYgKGRldmljZS0+c3RhdGUuY29ubiA9PSBDX1NZTkNfVEFSR0VUKQpAQCAtMjMxMywxNCArMjM2NSwzMyBAQAogICogVGhlIGN1cnJlbnQgc3luYyByYXRlIHVzZWQgaGVyZSB1c2VzIG9ubHkgdGhlIG1vc3QgcmVjZW50IHR3byBzdGVwIG1hcmtzLAogICogdG8gaGF2ZSBhIHNob3J0IHRpbWUgYXZlcmFnZSBzbyB3ZSBjYW4gcmVhY3QgZmFzdGVyLgogICovCi1pbnQgZHJiZF9yc19zaG91bGRfc2xvd19kb3duKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBzZWN0b3JfdCBzZWN0b3IpCitib29sIGRyYmRfcnNfc2hvdWxkX3Nsb3dfZG93bihzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgc2VjdG9yX3Qgc2VjdG9yKQoreworCXN0cnVjdCBsY19lbGVtZW50ICp0bXA7CisJYm9vbCB0aHJvdHRsZSA9IHRydWU7CisKKwlpZiAoIWRyYmRfcnNfY19taW5fcmF0ZV90aHJvdHRsZShkZXZpY2UpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxKCZkZXZpY2UtPmFsX2xvY2spOworCXRtcCA9IGxjX2ZpbmQoZGV2aWNlLT5yZXN5bmMsIEJNX1NFQ1RfVE9fRVhUKHNlY3RvcikpOworCWlmICh0bXApIHsKKwkJc3RydWN0IGJtX2V4dGVudCAqYm1fZXh0ID0gbGNfZW50cnkodG1wLCBzdHJ1Y3QgYm1fZXh0ZW50LCBsY2UpOworCQlpZiAodGVzdF9iaXQoQk1FX1BSSU9SSVRZLCAmYm1fZXh0LT5mbGFncykpCisJCQl0aHJvdHRsZSA9IGZhbHNlOworCQkvKiBEbyBub3Qgc2xvdyBkb3duIGlmIGFwcCBJTyBpcyBhbHJlYWR5IHdhaXRpbmcgZm9yIHRoaXMgZXh0ZW50ICovCisJfQorCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5hbF9sb2NrKTsKKworCXJldHVybiB0aHJvdHRsZTsKK30KKworYm9vbCBkcmJkX3JzX2NfbWluX3JhdGVfdGhyb3R0bGUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZpY2UtPmxkZXYtPmJhY2tpbmdfYmRldi0+YmRfY29udGFpbnMtPmJkX2Rpc2s7CiAJdW5zaWduZWQgbG9uZyBkYiwgZHQsIGRiZHQ7Ci0Jc3RydWN0IGxjX2VsZW1lbnQgKnRtcDsKLQlpbnQgY3Vycl9ldmVudHM7Ci0JaW50IHRocm90dGxlID0gMDsKIAl1bnNpZ25lZCBpbnQgY19taW5fcmF0ZTsKKwlpbnQgY3Vycl9ldmVudHM7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY19taW5fcmF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkZXZpY2UtPmxkZXYtPmRpc2tfY29uZiktPmNfbWluX3JhdGU7CkBAIC0yMzI4LDI0ICsyMzk5LDExIEBACiAKIAkvKiBmZWF0dXJlIGRpc2FibGVkPyAqLwogCWlmIChjX21pbl9yYXRlID09IDApCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5hbF9sb2NrKTsKLQl0bXAgPSBsY19maW5kKGRldmljZS0+cmVzeW5jLCBCTV9TRUNUX1RPX0VYVChzZWN0b3IpKTsKLQlpZiAodG1wKSB7Ci0JCXN0cnVjdCBibV9leHRlbnQgKmJtX2V4dCA9IGxjX2VudHJ5KHRtcCwgc3RydWN0IGJtX2V4dGVudCwgbGNlKTsKLQkJaWYgKHRlc3RfYml0KEJNRV9QUklPUklUWSwgJmJtX2V4dC0+ZmxhZ3MpKSB7Ci0JCQlzcGluX3VubG9ja19pcnEoJmRldmljZS0+YWxfbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQkvKiBEbyBub3Qgc2xvdyBkb3duIGlmIGFwcCBJTyBpcyBhbHJlYWR5IHdhaXRpbmcgZm9yIHRoaXMgZXh0ZW50ICovCi0JfQotCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5hbF9sb2NrKTsKKwkJcmV0dXJuIGZhbHNlOwogCiAJY3Vycl9ldmVudHMgPSAoaW50KXBhcnRfc3RhdF9yZWFkKCZkaXNrLT5wYXJ0MCwgc2VjdG9yc1swXSkgKwogCQkgICAgICAoaW50KXBhcnRfc3RhdF9yZWFkKCZkaXNrLT5wYXJ0MCwgc2VjdG9yc1sxXSkgLQogCQkJYXRvbWljX3JlYWQoJmRldmljZS0+cnNfc2VjdF9ldik7Ci0KIAlpZiAoIWRldmljZS0+cnNfbGFzdF9ldmVudHMgfHwgY3Vycl9ldmVudHMgLSBkZXZpY2UtPnJzX2xhc3RfZXZlbnRzID4gNjQpIHsKIAkJdW5zaWduZWQgbG9uZyByc19sZWZ0OwogCQlpbnQgaTsKQEAgLTIzNjgsMTIgKzI0MjYsMTEgQEAKIAkJZGJkdCA9IEJpdDJLQihkYi9kdCk7CiAKIAkJaWYgKGRiZHQgPiBjX21pbl9yYXRlKQotCQkJdGhyb3R0bGUgPSAxOworCQkJcmV0dXJuIHRydWU7CiAJfQotCXJldHVybiB0aHJvdHRsZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLQogc3RhdGljIGludCByZWNlaXZlX0RhdGFSZXF1ZXN0KHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpCiB7CiAJc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKnBlZXJfZGV2aWNlOwpAQCAtMjQzNiw3ICsyNDkzLDggQEAKIAkvKiBHRlBfTk9JTywgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjYXVzZSBhcmJpdHJhcnkgd3JpdGUtb3V0OiBpbiBhIERSQkQKIAkgKiAiY3Jpc3MtY3Jvc3MiIHNldHVwLCB0aGF0IG1pZ2h0IGNhdXNlIHdyaXRlLW91dCBvbiBzb21lIG90aGVyIERSQkQsCiAJICogd2hpY2ggaW4gdHVybiBtaWdodCBibG9jayBvbiB0aGUgb3RoZXIgbm9kZSBhdCB0aGlzIHZlcnkgcGxhY2UuICAqLwotCXBlZXJfcmVxID0gZHJiZF9hbGxvY19wZWVyX3JlcShwZWVyX2RldmljZSwgcC0+YmxvY2tfaWQsIHNlY3Rvciwgc2l6ZSwgR0ZQX05PSU8pOworCXBlZXJfcmVxID0gZHJiZF9hbGxvY19wZWVyX3JlcShwZWVyX2RldmljZSwgcC0+YmxvY2tfaWQsIHNlY3Rvciwgc2l6ZSwKKwkJCXRydWUgLyogaGFzIHJlYWwgcGF5bG9hZCAqLywgR0ZQX05PSU8pOwogCWlmICghcGVlcl9yZXEpIHsKIAkJcHV0X2xkZXYoZGV2aWNlKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNjQ4LDYgKzM3MDYsMTMgQEAKIAkJcHV0X2xkZXYoZGV2aWNlKTsKIAl9CiAKKwlkZXZpY2UtPnBlZXJfbWF4X2Jpb19zaXplID0gYmUzMl90b19jcHUocC0+bWF4X2Jpb19zaXplKTsKKwlkcmJkX3JlY29uc2lkZXJfbWF4X2Jpb19zaXplKGRldmljZSk7CisJLyogTGVhdmUgZHJiZF9yZWNvbnNpZGVyX21heF9iaW9fc2l6ZSgpIGJlZm9yZSBkcmJkX2RldGVybWluZV9kZXZfc2l6ZSgpLgorCSAgIEluIGNhc2Ugd2UgY2xlYXJlZCB0aGUgUVVFVUVfRkxBR19ESVNDQVJEIGZyb20gb3VyIHF1ZXVlIGluCisJICAgZHJiZF9yZWNvbnNpZGVyX21heF9iaW9fc2l6ZSgpLCB3ZSBjYW4gYmUgc3VyZSB0aGF0IGFmdGVyCisJICAgZHJiZF9kZXRlcm1pbmVfZGV2X3NpemUoKSBubyBSRVFfRElTQ0FSRHMgYXJlIGluIHRoZSBxdWV1ZS4gKi8KKwogCWRkc2YgPSBiZTE2X3RvX2NwdShwLT5kZHNfZmxhZ3MpOwogCWlmIChnZXRfbGRldihkZXZpY2UpKSB7CiAJCWRkID0gZHJiZF9kZXRlcm1pbmVfZGV2X3NpemUoZGV2aWNlLCBkZHNmLCBOVUxMKTsKQEAgLTM2NjAsOSArMzcyNSw2IEBACiAJCWRyYmRfc2V0X215X2NhcGFjaXR5KGRldmljZSwgcF9zaXplKTsKIAl9CiAKLQlkZXZpY2UtPnBlZXJfbWF4X2Jpb19zaXplID0gYmUzMl90b19jcHUocC0+bWF4X2Jpb19zaXplKTsKLQlkcmJkX3JlY29uc2lkZXJfbWF4X2Jpb19zaXplKGRldmljZSk7Ci0KIAlpZiAoZ2V0X2xkZXYoZGV2aWNlKSkgewogCQlpZiAoZGV2aWNlLT5sZGV2LT5rbm93bl9zaXplICE9IGRyYmRfZ2V0X2NhcGFjaXR5KGRldmljZS0+bGRldi0+YmFja2luZ19iZGV2KSkgewogCQkJZGV2aWNlLT5sZGV2LT5rbm93bl9zaXplID0gZHJiZF9nZXRfY2FwYWNpdHkoZGV2aWNlLT5sZGV2LT5iYWNraW5nX2JkZXYpOwpAQCAtNDQyMyw2ICs0NDg1LDcgQEAKIAlbUF9PVVRfT0ZfU1lOQ10gICAgID0geyAwLCBzaXplb2Yoc3RydWN0IHBfYmxvY2tfZGVzYyksIHJlY2VpdmVfb3V0X29mX3N5bmMgfSwKIAlbUF9DT05OX1NUX0NIR19SRVFdID0geyAwLCBzaXplb2Yoc3RydWN0IHBfcmVxX3N0YXRlKSwgcmVjZWl2ZV9yZXFfY29ubl9zdGF0ZSB9LAogCVtQX1BST1RPQ09MX1VQREFURV0gPSB7IDEsIHNpemVvZihzdHJ1Y3QgcF9wcm90b2NvbCksIHJlY2VpdmVfcHJvdG9jb2wgfSwKKwlbUF9UUklNXQkgICAgPSB7IDAsIHNpemVvZihzdHJ1Y3QgcF90cmltKSwgcmVjZWl2ZV9EYXRhIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBkcmJkZChzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uKQpAQCAtNDYzMCw2ICs0NjkzLDcgQEAKIAltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CiAJcC0+cHJvdG9jb2xfbWluID0gY3B1X3RvX2JlMzIoUFJPX1ZFUlNJT05fTUlOKTsKIAlwLT5wcm90b2NvbF9tYXggPSBjcHVfdG9fYmUzMihQUk9fVkVSU0lPTl9NQVgpOworCXAtPmZlYXR1cmVfZmxhZ3MgPSBjcHVfdG9fYmUzMihQUk9fRkVBVFVSRVMpOwogCXJldHVybiBjb25uX3NlbmRfY29tbWFuZChjb25uZWN0aW9uLCBzb2NrLCBQX0NPTk5FQ1RJT05fRkVBVFVSRVMsIHNpemVvZigqcCksIE5VTEwsIDApOwogfQogCkBAIC00NjgzLDEwICs0NzQ3LDE0IEBACiAJCWdvdG8gaW5jb21wYXQ7CiAKIAljb25uZWN0aW9uLT5hZ3JlZWRfcHJvX3ZlcnNpb24gPSBtaW5fdChpbnQsIFBST19WRVJTSU9OX01BWCwgcC0+cHJvdG9jb2xfbWF4KTsKKwljb25uZWN0aW9uLT5hZ3JlZWRfZmVhdHVyZXMgPSBQUk9fRkVBVFVSRVMgJiBiZTMyX3RvX2NwdShwLT5mZWF0dXJlX2ZsYWdzKTsKIAogCWRyYmRfaW5mbyhjb25uZWN0aW9uLCAiSGFuZHNoYWtlIHN1Y2Nlc3NmdWw6ICIKIAkgICAgICJBZ3JlZWQgbmV0d29yayBwcm90b2NvbCB2ZXJzaW9uICVkXG4iLCBjb25uZWN0aW9uLT5hZ3JlZWRfcHJvX3ZlcnNpb24pOwogCisJZHJiZF9pbmZvKGNvbm5lY3Rpb24sICJBZ3JlZWQgdG8lc3N1cHBvcnQgVFJJTSBvbiBwcm90b2NvbCBsZXZlbFxuIiwKKwkJICBjb25uZWN0aW9uLT5hZ3JlZWRfZmVhdHVyZXMgJiBGRl9UUklNID8gIiAiIDogIiBub3QgIik7CisKIAlyZXR1cm4gMTsKIAogIGluY29tcGF0OgpAQCAtNDc3OCw2ICs0ODQ2LDEyIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAocGkuc2l6ZSA8IENIQUxMRU5HRV9MRU4pIHsKKwkJZHJiZF9lcnIoY29ubmVjdGlvbiwgIkF1dGhDaGFsbGVuZ2UgcGF5bG9hZCB0b28gc21hbGwuXG4iKTsKKwkJcnYgPSAtMTsKKwkJZ290byBmYWlsOworCX0KKwogCXBlZXJzX2NoID0ga21hbGxvYyhwaS5zaXplLCBHRlBfTk9JTyk7CiAJaWYgKHBlZXJzX2NoID09IE5VTEwpIHsKIAkJZHJiZF9lcnIoY29ubmVjdGlvbiwgImttYWxsb2Mgb2YgcGVlcnNfY2ggZmFpbGVkXG4iKTsKQEAgLTQ3OTEsNiArNDg2NSwxMiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJaWYgKCFtZW1jbXAobXlfY2hhbGxlbmdlLCBwZWVyc19jaCwgQ0hBTExFTkdFX0xFTikpIHsKKwkJZHJiZF9lcnIoY29ubmVjdGlvbiwgIlBlZXIgcHJlc2VudGVkIHRoZSBzYW1lIGNoYWxsZW5nZSFcbiIpOworCQlydiA9IC0xOworCQlnb3RvIGZhaWw7CisJfQorCiAJcmVzcF9zaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShjb25uZWN0aW9uLT5jcmFtX2htYWNfdGZtKTsKIAlyZXNwb25zZSA9IGttYWxsb2MocmVzcF9zaXplLCBHRlBfTk9JTyk7CiAJaWYgKHJlc3BvbnNlID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMKaW5kZXggMzc3OWM4ZC4uMDk4MDNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMKQEAgLTUyMiw2ICs1MjIsMTMgQEAKIAkJbW9kX3JxX3N0YXRlKHJlcSwgbSwgUlFfTE9DQUxfUEVORElORywgUlFfTE9DQUxfQ09NUExFVEVEKTsKIAkJYnJlYWs7CiAKKwljYXNlIERJU0NBUkRfQ09NUExFVEVEX05PVFNVUFA6CisJY2FzZSBESVNDQVJEX0NPTVBMRVRFRF9XSVRIX0VSUk9SOgorCQkvKiBJJ2QgcmF0aGVyIG5vdCBkZXRhY2ggZnJvbSBsb2NhbCBkaXNrIGp1c3QgYmVjYXVzZSBpdAorCQkgKiBmYWlsZWQgYSBSRVFfRElTQ0FSRC4gKi8KKwkJbW9kX3JxX3N0YXRlKHJlcSwgbSwgUlFfTE9DQUxfUEVORElORywgUlFfTE9DQUxfQ09NUExFVEVEKTsKKwkJYnJlYWs7CisKIAljYXNlIFFVRVVFX0ZPUl9ORVRfUkVBRDoKIAkJLyogUkVBRCBvciBSRUFEQSwgYW5kCiAJCSAqIG5vIGxvY2FsIGRpc2ssCkBAIC0xMjM1LDYgKzEyNDIsNyBAQAogCQlpZiAobGlzdF9lbXB0eSgmaW5jb21pbmcpKQogCQkJYnJlYWs7CiAKK3NraXBfZmFzdF9wYXRoOgogCQl3YWl0X2V2ZW50KGRldmljZS0+YWxfd2FpdCwgcHJlcGFyZV9hbF90cmFuc2FjdGlvbl9ub25ibG9jayhkZXZpY2UsICZpbmNvbWluZywgJnBlbmRpbmcpKTsKIAkJLyogTWF5YmUgbW9yZSB3YXMgcXVldWVkLCB3aGlsZSB3ZSBwcmVwYXJlZCB0aGUgdHJhbnNhY3Rpb24/CiAJCSAqIFRyeSB0byBzdHVmZiB0aGVtIGludG8gdGhpcyB0cmFuc2FjdGlvbiBhcyB3ZWxsLgpAQCAtMTI3Myw2ICsxMjgxLDI1IEBACiAJCQlsaXN0X2RlbF9pbml0KCZyZXEtPnRsX3JlcXVlc3RzKTsKIAkJCWRyYmRfc2VuZF9hbmRfc3VibWl0KGRldmljZSwgcmVxKTsKIAkJfQorCisJCS8qIElmIGFsbCBjdXJyZW50bHkgaG90IGFjdGl2aXR5IGxvZyBleHRlbnRzIGFyZSBrZXB0IGJ1c3kgYnkKKwkJICogaW5jb21pbmcgcmVxdWVzdHMsIHdlIHN0aWxsIG11c3Qgbm90IHRvdGFsbHkgc3RhcnZlIG5ldworCQkgKiByZXF1ZXN0cyB0byBjb2xkIGV4dGVudHMuIEluIHRoYXQgY2FzZSwgcHJlcGFyZSBvbmUgcmVxdWVzdAorCQkgKiBpbiBibG9ja2luZyBtb2RlLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZpbmNvbWluZywgdGxfcmVxdWVzdHMpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnJlcS0+dGxfcmVxdWVzdHMpOworCQkJcmVxLT5ycV9zdGF0ZSB8PSBSUV9JTl9BQ1RfTE9HOworCQkJaWYgKCFkcmJkX2FsX2JlZ2luX2lvX3ByZXBhcmUoZGV2aWNlLCAmcmVxLT5pKSkgeworCQkJCS8qIENvcnJlc3BvbmRpbmcgZXh0ZW50IHdhcyBob3QgYWZ0ZXIgYWxsPyAqLworCQkJCWRyYmRfc2VuZF9hbmRfc3VibWl0KGRldmljZSwgcmVxKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogRm91bmQgYSByZXF1ZXN0IHRvIGEgY29sZCBleHRlbnQuCisJCQkJICogUHV0IG9uICJwZW5kaW5nIiBsaXN0LAorCQkJCSAqIGFuZCB0cnkgdG8gY3VtdWxhdGUgd2l0aCBtb3JlLiAqLworCQkJCWxpc3RfYWRkKCZyZXEtPnRsX3JlcXVlc3RzLCAmcGVuZGluZyk7CisJCQkJZ290byBza2lwX2Zhc3RfcGF0aDsKKwkJCX0KKwkJfQogCX0KIH0KIApAQCAtMTMyNiwyMyArMTM1MywzNSBAQAogCXJldHVybiBsaW1pdDsKIH0KIAotc3RhdGljIHN0cnVjdCBkcmJkX3JlcXVlc3QgKmZpbmRfb2xkZXN0X3JlcXVlc3Qoc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbikKK3N0YXRpYyB2b2lkIGZpbmRfb2xkZXN0X3JlcXVlc3RzKAorCQlzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uLAorCQlzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwKKwkJc3RydWN0IGRyYmRfcmVxdWVzdCAqKm9sZGVzdF9yZXFfd2FpdGluZ19mb3JfcGVlciwKKwkJc3RydWN0IGRyYmRfcmVxdWVzdCAqKm9sZGVzdF9yZXFfd2FpdGluZ19mb3JfZGlzaykKIHsKLQkvKiBXYWxrIHRoZSB0cmFuc2ZlciBsb2csCi0JICogYW5kIGZpbmQgdGhlIG9sZGVzdCBub3QgeWV0IGNvbXBsZXRlZCByZXF1ZXN0ICovCiAJc3RydWN0IGRyYmRfcmVxdWVzdCAqcjsKKwkqb2xkZXN0X3JlcV93YWl0aW5nX2Zvcl9wZWVyID0gTlVMTDsKKwkqb2xkZXN0X3JlcV93YWl0aW5nX2Zvcl9kaXNrID0gTlVMTDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsICZjb25uZWN0aW9uLT50cmFuc2Zlcl9sb2csIHRsX3JlcXVlc3RzKSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmci0+Y29tcGxldGlvbl9yZWYpKQotCQkJcmV0dXJuIHI7CisJCWNvbnN0IHVuc2lnbmVkIHMgPSByLT5ycV9zdGF0ZTsKKwkJaWYgKCEqb2xkZXN0X3JlcV93YWl0aW5nX2Zvcl9wZWVyCisJCSYmICgocyAmIFJRX05FVF9NQVNLKSAmJiAhKHMgJiBSUV9ORVRfRE9ORSkpKQorCQkJKm9sZGVzdF9yZXFfd2FpdGluZ19mb3JfcGVlciA9IHI7CisKKwkJaWYgKCEqb2xkZXN0X3JlcV93YWl0aW5nX2Zvcl9kaXNrCisJCSYmIChzICYgUlFfTE9DQUxfUEVORElORykgJiYgci0+ZGV2aWNlID09IGRldmljZSkKKwkJCSpvbGRlc3RfcmVxX3dhaXRpbmdfZm9yX2Rpc2sgPSByOworCisJCWlmICgqb2xkZXN0X3JlcV93YWl0aW5nX2Zvcl9wZWVyICYmICpvbGRlc3RfcmVxX3dhaXRpbmdfZm9yX2Rpc2spCisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIHZvaWQgcmVxdWVzdF90aW1lcl9mbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UgPSAoc3RydWN0IGRyYmRfZGV2aWNlICopIGRhdGE7CiAJc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IGZpcnN0X3BlZXJfZGV2aWNlKGRldmljZSktPmNvbm5lY3Rpb247Ci0Jc3RydWN0IGRyYmRfcmVxdWVzdCAqcmVxOyAvKiBvbGRlc3QgcmVxdWVzdCAqLworCXN0cnVjdCBkcmJkX3JlcXVlc3QgKnJlcV9kaXNrLCAqcmVxX3BlZXI7IC8qIG9sZGVzdCByZXF1ZXN0ICovCiAJc3RydWN0IG5ldF9jb25mICpuYzsKIAl1bnNpZ25lZCBsb25nIGVudCA9IDAsIGR0ID0gMCwgZXQsIG50OyAvKiBlZmZlY3RpdmUgdGltZW91dCA9IGtvX2NvdW50ICogdGltZW91dCAqLwogCXVuc2lnbmVkIGxvbmcgbm93OwpAQCAtMTM2Niw4ICsxNDA1LDggQEAKIAlub3cgPSBqaWZmaWVzOwogCiAJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5yZXNvdXJjZS0+cmVxX2xvY2spOwotCXJlcSA9IGZpbmRfb2xkZXN0X3JlcXVlc3QoY29ubmVjdGlvbik7Ci0JaWYgKCFyZXEpIHsKKwlmaW5kX29sZGVzdF9yZXF1ZXN0cyhjb25uZWN0aW9uLCBkZXZpY2UsICZyZXFfcGVlciwgJnJlcV9kaXNrKTsKKwlpZiAocmVxX3BlZXIgPT0gTlVMTCAmJiByZXFfZGlzayA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5yZXNvdXJjZS0+cmVxX2xvY2spOwogCQltb2RfdGltZXIoJmRldmljZS0+cmVxdWVzdF90aW1lciwgbm93ICsgZXQpOwogCQlyZXR1cm47CkBAIC0xMzg5LDE5ICsxNDI4LDI2IEBACiAJICogfjE5OCBkYXlzIHdpdGggMjUwIEhaLCB3ZSBoYXZlIGEgd2luZG93IHdoZXJlIHRoZSB0aW1lb3V0IHdvdWxkIG5lZWQKIAkgKiB0byBleHBpcmUgdHdpY2UgKHdvcnN0IGNhc2UpIHRvIGJlY29tZSBlZmZlY3RpdmUuIEdvb2QgZW5vdWdoLgogCSAqLwotCWlmIChlbnQgJiYgcmVxLT5ycV9zdGF0ZSAmIFJRX05FVF9QRU5ESU5HICYmCi0JCSB0aW1lX2FmdGVyKG5vdywgcmVxLT5zdGFydF90aW1lICsgZW50KSAmJgorCWlmIChlbnQgJiYgcmVxX3BlZXIgJiYKKwkJIHRpbWVfYWZ0ZXIobm93LCByZXFfcGVlci0+c3RhcnRfdGltZSArIGVudCkgJiYKIAkJIXRpbWVfaW5fcmFuZ2Uobm93LCBjb25uZWN0aW9uLT5sYXN0X3JlY29ubmVjdF9qaWYsIGNvbm5lY3Rpb24tPmxhc3RfcmVjb25uZWN0X2ppZiArIGVudCkpIHsKIAkJZHJiZF93YXJuKGRldmljZSwgIlJlbW90ZSBmYWlsZWQgdG8gZmluaXNoIGEgcmVxdWVzdCB3aXRoaW4ga28tY291bnQgKiB0aW1lb3V0XG4iKTsKIAkJX2RyYmRfc2V0X3N0YXRlKF9OUyhkZXZpY2UsIGNvbm4sIENfVElNRU9VVCksIENTX1ZFUkJPU0UgfCBDU19IQVJELCBOVUxMKTsKIAl9Ci0JaWYgKGR0ICYmIHJlcS0+cnFfc3RhdGUgJiBSUV9MT0NBTF9QRU5ESU5HICYmIHJlcS0+ZGV2aWNlID09IGRldmljZSAmJgotCQkgdGltZV9hZnRlcihub3csIHJlcS0+c3RhcnRfdGltZSArIGR0KSAmJgorCWlmIChkdCAmJiByZXFfZGlzayAmJgorCQkgdGltZV9hZnRlcihub3csIHJlcV9kaXNrLT5zdGFydF90aW1lICsgZHQpICYmCiAJCSF0aW1lX2luX3JhbmdlKG5vdywgZGV2aWNlLT5sYXN0X3JlYXR0YWNoX2ppZiwgZGV2aWNlLT5sYXN0X3JlYXR0YWNoX2ppZiArIGR0KSkgewogCQlkcmJkX3dhcm4oZGV2aWNlLCAiTG9jYWwgYmFja2luZyBkZXZpY2UgZmFpbGVkIHRvIG1lZXQgdGhlIGRpc2stdGltZW91dFxuIik7CiAJCV9fZHJiZF9jaGtfaW9fZXJyb3IoZGV2aWNlLCBEUkJEX0ZPUkNFX0RFVEFDSCk7CiAJfQotCW50ID0gKHRpbWVfYWZ0ZXIobm93LCByZXEtPnN0YXJ0X3RpbWUgKyBldCkgPyBub3cgOiByZXEtPnN0YXJ0X3RpbWUpICsgZXQ7CisKKwkvKiBSZXNjaGVkdWxlIHRpbWVyIGZvciB0aGUgbmVhcmVzdCBub3QgYWxyZWFkeSBleHBpcmVkIHRpbWVvdXQuCisJICogRmFsbGJhY2sgdG8gbm93ICsgbWluKGVmZmVjdGl2ZSBuZXR3b3JrIHRpbWVvdXQsIGRpc2sgdGltZW91dCkuICovCisJZW50ID0gKGVudCAmJiByZXFfcGVlciAmJiB0aW1lX2JlZm9yZShub3csIHJlcV9wZWVyLT5zdGFydF90aW1lICsgZW50KSkKKwkJPyByZXFfcGVlci0+c3RhcnRfdGltZSArIGVudCA6IG5vdyArIGV0OworCWR0ID0gKGR0ICYmIHJlcV9kaXNrICYmIHRpbWVfYmVmb3JlKG5vdywgcmVxX2Rpc2stPnN0YXJ0X3RpbWUgKyBkdCkpCisJCT8gcmVxX2Rpc2stPnN0YXJ0X3RpbWUgKyBkdCA6IG5vdyArIGV0OworCW50ID0gdGltZV9iZWZvcmUoZW50LCBkdCkgPyBlbnQgOiBkdDsKIAlzcGluX3VubG9ja19pcnEoJmNvbm5lY3Rpb24tPnJlc291cmNlLT5yZXFfbG9jayk7CiAJbW9kX3RpbWVyKCZkZXZpY2UtPnJlcXVlc3RfdGltZXIsIG50KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5oIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmgKaW5kZXggYzY4NGM5Ni4uODU2NmNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmgKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZHJiZC5oPgogI2luY2x1ZGUgImRyYmRfaW50LmgiCi0jaW5jbHVkZSAiZHJiZF93cmFwcGVycy5oIgogCiAvKiBUaGUgcmVxdWVzdCBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgaW4gaXJxIGNvbnRleHQgYnkgdGhlIElERSBkcml2ZXJzLAogICAgYW5kIGluIFNvZnRpcnFzL1Rhc2tsZXRzL0JIIGNvbnRleHQgYnkgdGhlIFNDU0kgZHJpdmVycywKQEAgLTExMSwxMSArMTEwLDE0IEBACiAJQkFSUklFUl9BQ0tFRCwgLyogaW4gcHJvdG9jb2wgQSBhbmQgQiAqLwogCURBVEFfUkVDRUlWRUQsIC8qIChyZW1vdGUgcmVhZCkgKi8KIAorCUNPTVBMRVRFRF9PSywKIAlSRUFEX0NPTVBMRVRFRF9XSVRIX0VSUk9SLAogCVJFQURfQUhFQURfQ09NUExFVEVEX1dJVEhfRVJST1IsCiAJV1JJVEVfQ09NUExFVEVEX1dJVEhfRVJST1IsCisJRElTQ0FSRF9DT01QTEVURURfTk9UU1VQUCwKKwlESVNDQVJEX0NPTVBMRVRFRF9XSVRIX0VSUk9SLAorCiAJQUJPUlRfRElTS19JTywKLQlDT01QTEVURURfT0ssCiAJUkVTRU5ELAogCUZBSUxfRlJPWkVOX0RJU0tfSU8sCiAJUkVTVEFSVF9GUk9aRU5fRElTS19JTywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jCmluZGV4IDFhODQzNDUuLmE1ZDhhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYwpAQCAtNTQsOCArNTQsOCBAQAogc3RhdGljIGVudW0gZHJiZF9zdGF0ZV9ydiBpc192YWxpZF9zdGF0ZShzdHJ1Y3QgZHJiZF9kZXZpY2UgKiwgdW5pb24gZHJiZF9zdGF0ZSk7CiBzdGF0aWMgZW51bSBkcmJkX3N0YXRlX3J2IGlzX3ZhbGlkX3NvZnRfdHJhbnNpdGlvbih1bmlvbiBkcmJkX3N0YXRlLCB1bmlvbiBkcmJkX3N0YXRlLCBzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICopOwogc3RhdGljIGVudW0gZHJiZF9zdGF0ZV9ydiBpc192YWxpZF90cmFuc2l0aW9uKHVuaW9uIGRyYmRfc3RhdGUgb3MsIHVuaW9uIGRyYmRfc3RhdGUgbnMpOwotc3RhdGljIHVuaW9uIGRyYmRfc3RhdGUgc2FuaXRpemVfc3RhdGUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIHVuaW9uIGRyYmRfc3RhdGUgbnMsCi0JCQkJICAgICAgIGVudW0gc2FuaXRpemVfc3RhdGVfd2FybmluZ3MgKndhcm4pOworc3RhdGljIHVuaW9uIGRyYmRfc3RhdGUgc2FuaXRpemVfc3RhdGUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIHVuaW9uIGRyYmRfc3RhdGUgb3MsCisJCQkJICAgICAgIHVuaW9uIGRyYmRfc3RhdGUgbnMsIGVudW0gc2FuaXRpemVfc3RhdGVfd2FybmluZ3MgKndhcm4pOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfc3VzcCh1bmlvbiBkcmJkX3N0YXRlIHMpCiB7CkBAIC0yODcsNyArMjg3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPnJlc291cmNlLT5yZXFfbG9jaywgZmxhZ3MpOwogCW9zID0gZHJiZF9yZWFkX3N0YXRlKGRldmljZSk7Ci0JbnMgPSBzYW5pdGl6ZV9zdGF0ZShkZXZpY2UsIGFwcGx5X21hc2tfdmFsKG9zLCBtYXNrLCB2YWwpLCBOVUxMKTsKKwlucyA9IHNhbml0aXplX3N0YXRlKGRldmljZSwgb3MsIGFwcGx5X21hc2tfdmFsKG9zLCBtYXNrLCB2YWwpLCBOVUxMKTsKIAlydiA9IGlzX3ZhbGlkX3RyYW5zaXRpb24ob3MsIG5zKTsKIAlpZiAocnYgPj0gU1NfU1VDQ0VTUykKIAkJcnYgPSBTU19VTktOT1dOX0VSUk9SOyAgLyogY29udCB3YWl0aW5nLCBvdGhlcndpc2UgZmFpbC4gKi8KQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+cmVzb3VyY2UtPnJlcV9sb2NrLCBmbGFncyk7CiAJb3MgPSBkcmJkX3JlYWRfc3RhdGUoZGV2aWNlKTsKLQlucyA9IHNhbml0aXplX3N0YXRlKGRldmljZSwgYXBwbHlfbWFza192YWwob3MsIG1hc2ssIHZhbCksIE5VTEwpOworCW5zID0gc2FuaXRpemVfc3RhdGUoZGV2aWNlLCBvcywgYXBwbHlfbWFza192YWwob3MsIG1hc2ssIHZhbCksIE5VTEwpOwogCXJ2ID0gaXNfdmFsaWRfdHJhbnNpdGlvbihvcywgbnMpOwogCWlmIChydiA8IFNTX1NVQ0NFU1MpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlLT5yZXNvdXJjZS0+cmVxX2xvY2ssIGZsYWdzKTsKQEAgLTc0MCw4ICs3NDAsOCBAQAogICogV2hlbiB3ZSBsb29zZSBjb25uZWN0aW9uLCB3ZSBoYXZlIHRvIHNldCB0aGUgc3RhdGUgb2YgdGhlIHBlZXJzIGRpc2sgKHBkc2spCiAgKiB0byBEX1VOS05PV04uIFRoaXMgcnVsZSBhbmQgbWFueSBtb3JlIGFsb25nIHRob3NlIGxpbmVzIGFyZSBpbiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdW5pb24gZHJiZF9zdGF0ZSBzYW5pdGl6ZV9zdGF0ZShzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgdW5pb24gZHJiZF9zdGF0ZSBucywKLQkJCQkgICAgICAgZW51bSBzYW5pdGl6ZV9zdGF0ZV93YXJuaW5ncyAqd2FybikKK3N0YXRpYyB1bmlvbiBkcmJkX3N0YXRlIHNhbml0aXplX3N0YXRlKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCB1bmlvbiBkcmJkX3N0YXRlIG9zLAorCQkJCSAgICAgICB1bmlvbiBkcmJkX3N0YXRlIG5zLCBlbnVtIHNhbml0aXplX3N0YXRlX3dhcm5pbmdzICp3YXJuKQogewogCWVudW0gZHJiZF9mZW5jaW5nX3AgZnA7CiAJZW51bSBkcmJkX2Rpc2tfc3RhdGUgZGlza19taW4sIGRpc2tfbWF4LCBwZHNrX21pbiwgcGRza19tYXg7CkBAIC04ODIsMTEgKzg4MiwxMyBAQAogCX0KIAogCWlmIChmcCA9PSBGUF9TVE9OSVRIICYmCi0JICAgIChucy5yb2xlID09IFJfUFJJTUFSWSAmJiBucy5jb25uIDwgQ19DT05ORUNURUQgJiYgbnMucGRzayA+IERfT1VUREFURUQpKQorCSAgICAobnMucm9sZSA9PSBSX1BSSU1BUlkgJiYgbnMuY29ubiA8IENfQ09OTkVDVEVEICYmIG5zLnBkc2sgPiBEX09VVERBVEVEKSAmJgorCSAgICAhKG9zLnJvbGUgPT0gUl9QUklNQVJZICYmIG9zLmNvbm4gPCBDX0NPTk5FQ1RFRCAmJiBvcy5wZHNrID4gRF9PVVREQVRFRCkpCiAJCW5zLnN1c3BfZmVuID0gMTsgLyogU3VzcGVuZCBJTyB3aGlsZSBmZW5jZS1wZWVyIGhhbmRsZXIgcnVucyAocGVlciBsb3N0KSAqLwogCiAJaWYgKGRldmljZS0+cmVzb3VyY2UtPnJlc19vcHRzLm9uX25vX2RhdGEgPT0gT05EX1NVU1BFTkRfSU8gJiYKLQkgICAgKG5zLnJvbGUgPT0gUl9QUklNQVJZICYmIG5zLmRpc2sgPCBEX1VQX1RPX0RBVEUgJiYgbnMucGRzayA8IERfVVBfVE9fREFURSkpCisJICAgIChucy5yb2xlID09IFJfUFJJTUFSWSAmJiBucy5kaXNrIDwgRF9VUF9UT19EQVRFICYmIG5zLnBkc2sgPCBEX1VQX1RPX0RBVEUpICYmCisJICAgICEob3Mucm9sZSA9PSBSX1BSSU1BUlkgJiYgb3MuZGlzayA8IERfVVBfVE9fREFURSAmJiBvcy5wZHNrIDwgRF9VUF9UT19EQVRFKSkKIAkJbnMuc3VzcF9ub2QgPSAxOyAvKiBTdXNwZW5kIElPIHdoaWxlIG5vIGRhdGEgYXZhaWxhYmxlIChubyBhY2Nlc3NpYmxlIGRhdGEgYXZhaWxhYmxlKSAqLwogCiAJaWYgKG5zLmFmdHJfaXNwIHx8IG5zLnBlZXJfaXNwIHx8IG5zLnVzZXJfaXNwKSB7CkBAIC05NTgsNyArOTYwLDcgQEAKIAogCW9zID0gZHJiZF9yZWFkX3N0YXRlKGRldmljZSk7CiAKLQlucyA9IHNhbml0aXplX3N0YXRlKGRldmljZSwgbnMsICZzc3cpOworCW5zID0gc2FuaXRpemVfc3RhdGUoZGV2aWNlLCBvcywgbnMsICZzc3cpOwogCWlmIChucy5pID09IG9zLmkpCiAJCXJldHVybiBTU19OT1RISU5HX1RPX0RPOwogCkBAIC0xNjU2LDcgKzE2NTgsNyBAQAogCWlkcl9mb3JfZWFjaF9lbnRyeSgmY29ubmVjdGlvbi0+cGVlcl9kZXZpY2VzLCBwZWVyX2RldmljZSwgdm5yKSB7CiAJCXN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlID0gcGVlcl9kZXZpY2UtPmRldmljZTsKIAkJb3MgPSBkcmJkX3JlYWRfc3RhdGUoZGV2aWNlKTsKLQkJbnMgPSBzYW5pdGl6ZV9zdGF0ZShkZXZpY2UsIGFwcGx5X21hc2tfdmFsKG9zLCBtYXNrLCB2YWwpLCBOVUxMKTsKKwkJbnMgPSBzYW5pdGl6ZV9zdGF0ZShkZXZpY2UsIG9zLCBhcHBseV9tYXNrX3ZhbChvcywgbWFzaywgdmFsKSwgTlVMTCk7CiAKIAkJaWYgKGZsYWdzICYgQ1NfSUdOX09VVERfRkFJTCAmJiBucy5kaXNrID09IERfT1VUREFURUQgJiYgb3MuZGlzayA8IERfT1VUREFURUQpCiAJCQlucy5kaXNrID0gb3MuZGlzazsKQEAgLTE3MTgsNyArMTcyMCw3IEBACiAJCW51bWJlcl9vZl92b2x1bWVzKys7CiAJCW9zID0gZHJiZF9yZWFkX3N0YXRlKGRldmljZSk7CiAJCW5zID0gYXBwbHlfbWFza192YWwob3MsIG1hc2ssIHZhbCk7Ci0JCW5zID0gc2FuaXRpemVfc3RhdGUoZGV2aWNlLCBucywgTlVMTCk7CisJCW5zID0gc2FuaXRpemVfc3RhdGUoZGV2aWNlLCBvcywgbnMsIE5VTEwpOwogCiAJCWlmIChmbGFncyAmIENTX0lHTl9PVVREX0ZBSUwgJiYgbnMuZGlzayA9PSBEX09VVERBVEVEICYmIG9zLmRpc2sgPCBEX09VVERBVEVEKQogCQkJbnMuZGlzayA9IG9zLmRpc2s7CkBAIC0xNzYzLDE5ICsxNzY1LDE5IEBACiBzdGF0aWMgZW51bSBkcmJkX3N0YXRlX3J2CiBfY29ubl9ycV9jb25kKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHVuaW9uIGRyYmRfc3RhdGUgbWFzaywgdW5pb24gZHJiZF9zdGF0ZSB2YWwpCiB7Ci0JZW51bSBkcmJkX3N0YXRlX3J2IHJ2OworCWVudW0gZHJiZF9zdGF0ZV9ydiBlcnIsIHJ2ID0gU1NfVU5LTk9XTl9FUlJPUjsgLyogY29udGludWUgd2FpdGluZyAqLzsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ09OTl9XRF9TVF9DSEdfT0tBWSwgJmNvbm5lY3Rpb24tPmZsYWdzKSkKLQkJcmV0dXJuIFNTX0NXX1NVQ0NFU1M7CisJCXJ2ID0gU1NfQ1dfU1VDQ0VTUzsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ09OTl9XRF9TVF9DSEdfRkFJTCwgJmNvbm5lY3Rpb24tPmZsYWdzKSkKLQkJcmV0dXJuIFNTX0NXX0ZBSUxFRF9CWV9QRUVSOworCQlydiA9IFNTX0NXX0ZBSUxFRF9CWV9QRUVSOwogCi0JcnYgPSBjb25uX2lzX3ZhbGlkX3RyYW5zaXRpb24oY29ubmVjdGlvbiwgbWFzaywgdmFsLCAwKTsKLQlpZiAocnYgPT0gU1NfU1VDQ0VTUyAmJiBjb25uZWN0aW9uLT5jc3RhdGUgPT0gQ19XRl9SRVBPUlRfUEFSQU1TKQotCQlydiA9IFNTX1VOS05PV05fRVJST1I7IC8qIGNvbnRpbnVlIHdhaXRpbmcgKi8KKwllcnIgPSBjb25uX2lzX3ZhbGlkX3RyYW5zaXRpb24oY29ubmVjdGlvbiwgbWFzaywgdmFsLCAwKTsKKwlpZiAoZXJyID09IFNTX1NVQ0NFU1MgJiYgY29ubmVjdGlvbi0+Y3N0YXRlID09IENfV0ZfUkVQT1JUX1BBUkFNUykKKwkJcmV0dXJuIHJ2OwogCi0JcmV0dXJuIHJ2OworCXJldHVybiBlcnI7CiB9CiAKIGVudW0gZHJiZF9zdGF0ZV9ydgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd29ya2VyLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYwppbmRleCAyYzRjZTQyLi5kOGY1N2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAKIC8qIHdyaXRlcyBvbiBiZWhhbGYgb2YgdGhlIHBhcnRuZXIsIG9yIHJlc3luYyB3cml0ZXMsCiAgKiAic3VibWl0dGVkIiBieSB0aGUgcmVjZWl2ZXIsIGZpbmFsIHN0YWdlLiAgKi8KLXN0YXRpYyB2b2lkIGRyYmRfZW5kaW9fd3JpdGVfc2VjX2ZpbmFsKHN0cnVjdCBkcmJkX3BlZXJfcmVxdWVzdCAqcGVlcl9yZXEpIF9fcmVsZWFzZXMobG9jYWwpCit2b2lkIGRyYmRfZW5kaW9fd3JpdGVfc2VjX2ZpbmFsKHN0cnVjdCBkcmJkX3BlZXJfcmVxdWVzdCAqcGVlcl9yZXEpIF9fcmVsZWFzZXMobG9jYWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJc3RydWN0IGRyYmRfcGVlcl9kZXZpY2UgKnBlZXJfZGV2aWNlID0gcGVlcl9yZXEtPnBlZXJfZGV2aWNlOwpAQCAtMTUwLDcgKzE1MCw5IEBACiAKIAlkb193YWtlID0gbGlzdF9lbXB0eShibG9ja19pZCA9PSBJRF9TWU5DRVIgPyAmZGV2aWNlLT5zeW5jX2VlIDogJmRldmljZS0+YWN0aXZlX2VlKTsKIAotCWlmICh0ZXN0X2JpdChfX0VFX1dBU19FUlJPUiwgJnBlZXJfcmVxLT5mbGFncykpCisJLyogRklYTUUgZG8gd2Ugd2FudCB0byBkZXRhY2ggZm9yIGZhaWxlZCBSRVFfRElTQ0FSRD8KKwkgKiAoKHBlZXJfcmVxLT5mbGFncyAmIChFRV9XQVNfRVJST1J8RUVfSVNfVFJJTSkpID09IEVFX1dBU19FUlJPUikgKi8KKwlpZiAocGVlcl9yZXEtPmZsYWdzICYgRUVfV0FTX0VSUk9SKQogCQlfX2RyYmRfY2hrX2lvX2Vycm9yKGRldmljZSwgRFJCRF9XUklURV9FUlJPUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlLT5yZXNvdXJjZS0+cmVxX2xvY2ssIGZsYWdzKTsKIApAQCAtMTc2LDEwICsxNzgsMTIgQEAKIAlzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSA9IHBlZXJfcmVxLT5wZWVyX2RldmljZS0+ZGV2aWNlOwogCWludCB1cHRvZGF0ZSA9IGJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKTsKIAlpbnQgaXNfd3JpdGUgPSBiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURTsKKwlpbnQgaXNfZGlzY2FyZCA9ICEhKGJpby0+YmlfcncgJiBSRVFfRElTQ0FSRCk7CiAKIAlpZiAoZXJyb3IgJiYgX19yYXRlbGltaXQoJmRyYmRfcmF0ZWxpbWl0X3N0YXRlKSkKIAkJZHJiZF93YXJuKGRldmljZSwgIiVzOiBlcnJvcj0lZCBzPSVsbHVzXG4iLAotCQkJCWlzX3dyaXRlID8gIndyaXRlIiA6ICJyZWFkIiwgZXJyb3IsCisJCQkJaXNfd3JpdGUgPyAoaXNfZGlzY2FyZCA/ICJkaXNjYXJkIiA6ICJ3cml0ZSIpCisJCQkJCTogInJlYWQiLCBlcnJvciwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBlZXJfcmVxLT5pLnNlY3Rvcik7CiAJaWYgKCFlcnJvciAmJiAhdXB0b2RhdGUpIHsKIAkJaWYgKF9fcmF0ZWxpbWl0KCZkcmJkX3JhdGVsaW1pdF9zdGF0ZSkpCkBAIC0yNjMsNyArMjY3LDEyIEBACiAKIAkvKiB0byBhdm9pZCByZWN1cnNpb24gaW4gX19yZXFfbW9kICovCiAJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQl3aGF0ID0gKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKQorCQlpZiAoYmlvLT5iaV9ydyAmIFJFUV9ESVNDQVJEKQorCQkJd2hhdCA9IChlcnJvciA9PSAtRU9QTk9UU1VQUCkKKwkJCQk/IERJU0NBUkRfQ09NUExFVEVEX05PVFNVUFAKKwkJCQk6IERJU0NBUkRfQ09NUExFVEVEX1dJVEhfRVJST1I7CisJCWVsc2UKKwkJCXdoYXQgPSAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpCiAJCQk/IFdSSVRFX0NPTVBMRVRFRF9XSVRIX0VSUk9SCiAJCQk6IChiaW9fcncoYmlvKSA9PSBSRUFEKQogCQkJICA/IFJFQURfQ09NUExFVEVEX1dJVEhfRVJST1IKQEAgLTM5NSw3ICs0MDQsNyBAQAogCS8qIEdGUF9UUlksIGJlY2F1c2UgaWYgdGhlcmUgaXMgbm8gbWVtb3J5IGF2YWlsYWJsZSByaWdodCBub3csIHRoaXMgbWF5CiAJICogYmUgcmVzY2hlZHVsZWQgZm9yIGxhdGVyLiBJdCBpcyAib25seSIgYmFja2dyb3VuZCByZXN5bmMsIGFmdGVyIGFsbC4gKi8KIAlwZWVyX3JlcSA9IGRyYmRfYWxsb2NfcGVlcl9yZXEocGVlcl9kZXZpY2UsIElEX1NZTkNFUiAvKiB1bnVzZWQgKi8sIHNlY3RvciwKLQkJCQkgICAgICAgc2l6ZSwgR0ZQX1RSWSk7CisJCQkJICAgICAgIHNpemUsIHRydWUgLyogaGFzIHJlYWwgcGF5bG9hZCAqLywgR0ZQX1RSWSk7CiAJaWYgKCFwZWVyX3JlcSkKIAkJZ290byBkZWZlcjsKIApAQCAtNDkyLDEwICs1MDEsOSBAQAogCXJldHVybiBmYjsKIH0KIAotc3RhdGljIGludCBkcmJkX3JzX2NvbnRyb2xsZXIoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGRyYmRfcnNfY29udHJvbGxlcihzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IHNlY3RfaW4pCiB7CiAJc3RydWN0IGRpc2tfY29uZiAqZGM7Ci0JdW5zaWduZWQgaW50IHNlY3RfaW47ICAvKiBOdW1iZXIgb2Ygc2VjdG9ycyB0aGF0IGNhbWUgaW4gc2luY2UgdGhlIGxhc3QgdHVybiAqLwogCXVuc2lnbmVkIGludCB3YW50OyAgICAgLyogVGhlIG51bWJlciBvZiBzZWN0b3JzIHdlIHdhbnQgaW4gdGhlIHByb3h5ICovCiAJaW50IHJlcV9zZWN0OyAvKiBOdW1iZXIgb2Ygc2VjdG9ycyB0byByZXF1ZXN0IGluIHRoaXMgdHVybiAqLwogCWludCBjb3JyZWN0aW9uOyAvKiBOdW1iZXIgb2Ygc2VjdG9ycyBtb3JlIHdlIG5lZWQgaW4gdGhlIHByb3h5Ki8KQEAgLTUwNSw5ICs1MTMsNiBAQAogCWludCBtYXhfc2VjdDsKIAlzdHJ1Y3QgZmlmb19idWZmZXIgKnBsYW47CiAKLQlzZWN0X2luID0gYXRvbWljX3hjaGcoJmRldmljZS0+cnNfc2VjdF9pbiwgMCk7IC8qIE51bWJlciBvZiBzZWN0b3JzIHRoYXQgY2FtZSBpbiAqLwotCWRldmljZS0+cnNfaW5fZmxpZ2h0IC09IHNlY3RfaW47Ci0KIAlkYyA9IHJjdV9kZXJlZmVyZW5jZShkZXZpY2UtPmxkZXYtPmRpc2tfY29uZik7CiAJcGxhbiA9IHJjdV9kZXJlZmVyZW5jZShkZXZpY2UtPnJzX3BsYW5fcyk7CiAKQEAgLTU1MCwxMSArNTU1LDE2IEBACiAKIHN0YXRpYyBpbnQgZHJiZF9yc19udW1iZXJfcmVxdWVzdHMoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IG51bWJlcjsKKwl1bnNpZ25lZCBpbnQgc2VjdF9pbjsgIC8qIE51bWJlciBvZiBzZWN0b3JzIHRoYXQgY2FtZSBpbiBzaW5jZSB0aGUgbGFzdCB0dXJuICovCisJaW50IG51bWJlciwgbXhiOworCisJc2VjdF9pbiA9IGF0b21pY194Y2hnKCZkZXZpY2UtPnJzX3NlY3RfaW4sIDApOworCWRldmljZS0+cnNfaW5fZmxpZ2h0IC09IHNlY3RfaW47CiAKIAlyY3VfcmVhZF9sb2NrKCk7CisJbXhiID0gZHJiZF9nZXRfbWF4X2J1ZmZlcnMoZGV2aWNlKSAvIDI7CiAJaWYgKHJjdV9kZXJlZmVyZW5jZShkZXZpY2UtPnJzX3BsYW5fcyktPnNpemUpIHsKLQkJbnVtYmVyID0gZHJiZF9yc19jb250cm9sbGVyKGRldmljZSkgPj4gKEJNX0JMT0NLX1NISUZUIC0gOSk7CisJCW51bWJlciA9IGRyYmRfcnNfY29udHJvbGxlcihkZXZpY2UsIHNlY3RfaW4pID4+IChCTV9CTE9DS19TSElGVCAtIDkpOwogCQlkZXZpY2UtPmNfc3luY19yYXRlID0gbnVtYmVyICogSFogKiAoQk1fQkxPQ0tfU0laRSAvIDEwMjQpIC8gU0xFRVBfVElNRTsKIAl9IGVsc2UgewogCQlkZXZpY2UtPmNfc3luY19yYXRlID0gcmN1X2RlcmVmZXJlbmNlKGRldmljZS0+bGRldi0+ZGlza19jb25mKS0+cmVzeW5jX3JhdGU7CkBAIC01NjIsOCArNTcyLDE0IEBACiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JLyogaWdub3JlIHRoZSBhbW91bnQgb2YgcGVuZGluZyByZXF1ZXN0cywgdGhlIHJlc3luYyBjb250cm9sbGVyIHNob3VsZAotCSAqIHRocm90dGxlIGRvd24gdG8gaW5jb21pbmcgcmVwbHkgcmF0ZSBzb29uIGVub3VnaCBhbnl3YXlzLiAqLworCS8qIERvbid0IGhhdmUgbW9yZSB0aGFuICJtYXgtYnVmZmVycyIvMiBpbi1mbGlnaHQuCisJICogT3RoZXJ3aXNlIHdlIG1heSBjYXVzZSB0aGUgcmVtb3RlIHNpdGUgdG8gc3RhbGwgb24gZHJiZF9hbGxvY19wYWdlcygpLAorCSAqIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBkaXN0cmlidXRlZCBkZWFkbG9jayBvbiBjb25nZXN0aW9uIGR1cmluZworCSAqIG9ubGluZS12ZXJpZnkgb3IgKGNoZWNrc3VtLWJhc2VkKSByZXN5bmMsIGlmIG1heC1idWZmZXJzLAorCSAqIHNvY2tldCBidWZmZXIgc2l6ZXMgYW5kIHJlc3luYyByYXRlIHNldHRpbmdzIGFyZSBtaXMtY29uZmlndXJlZC4gKi8KKwlpZiAobXhiIC0gZGV2aWNlLT5yc19pbl9mbGlnaHQgPCBudW1iZXIpCisJCW51bWJlciA9IG14YiAtIGRldmljZS0+cnNfaW5fZmxpZ2h0OworCiAJcmV0dXJuIG51bWJlcjsKIH0KIApAQCAtNTk3LDcgKzYxMyw3IEBACiAKIAltYXhfYmlvX3NpemUgPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhkZXZpY2UtPnJxX3F1ZXVlKSA8PCA5OwogCW51bWJlciA9IGRyYmRfcnNfbnVtYmVyX3JlcXVlc3RzKGRldmljZSk7Ci0JaWYgKG51bWJlciA9PSAwKQorCWlmIChudW1iZXIgPD0gMCkKIAkJZ290byByZXF1ZXVlOwogCiAJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CkBAIC02NDcsNyArNjYzLDcgQEAKIAkJICovCiAJCWFsaWduID0gMTsKIAkJcm9sbGJhY2tfaSA9IGk7Ci0JCWZvciAoOzspIHsKKwkJd2hpbGUgKGkgPCBudW1iZXIpIHsKIAkJCWlmIChzaXplICsgQk1fQkxPQ0tfU0laRSA+IG1heF9iaW9fc2l6ZSkKIAkJCQlicmVhazsKIApAQCAtMTY3MCwxMSArMTY4NiwxNSBAQAogCX0KIAljbGVhcl9iaXQoQl9SU19IX0RPTkUsICZkZXZpY2UtPmZsYWdzKTsKIAotCXdyaXRlX2xvY2tfaXJxKCZnbG9iYWxfc3RhdGVfbG9jayk7CisJLyogcmVxX2xvY2s6IHNlcmlhbGl6ZSB3aXRoIGRyYmRfc2VuZF9hbmRfc3VibWl0KCkgYW5kIG90aGVycworCSAqIGdsb2JhbF9zdGF0ZV9sb2NrOiBmb3Igc3RhYmxlIHN5bmMtYWZ0ZXIgZGVwZW5kZW5jaWVzICovCisJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5yZXNvdXJjZS0+cmVxX2xvY2spOworCXdyaXRlX2xvY2soJmdsb2JhbF9zdGF0ZV9sb2NrKTsKIAkvKiBEaWQgc29tZSBjb25uZWN0aW9uIGJyZWFrYWdlIG9yIElPIGVycm9yIHJhY2Ugd2l0aCB1cz8gKi8KIAlpZiAoZGV2aWNlLT5zdGF0ZS5jb25uIDwgQ19DT05ORUNURUQKIAl8fCAhZ2V0X2xkZXZfaWZfc3RhdGUoZGV2aWNlLCBEX05FR09USUFUSU5HKSkgewotCQl3cml0ZV91bmxvY2tfaXJxKCZnbG9iYWxfc3RhdGVfbG9jayk7CisJCXdyaXRlX3VubG9jaygmZ2xvYmFsX3N0YXRlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJmRldmljZS0+cmVzb3VyY2UtPnJlcV9sb2NrKTsKIAkJbXV0ZXhfdW5sb2NrKGRldmljZS0+c3RhdGVfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMTcxNCw3ICsxNzM0LDggQEAKIAkJfQogCQlfZHJiZF9wYXVzZV9hZnRlcihkZXZpY2UpOwogCX0KLQl3cml0ZV91bmxvY2tfaXJxKCZnbG9iYWxfc3RhdGVfbG9jayk7CisJd3JpdGVfdW5sb2NrKCZnbG9iYWxfc3RhdGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2UtPnJlc291cmNlLT5yZXFfbG9jayk7CiAKIAlpZiAociA9PSBTU19TVUNDRVNTKSB7CiAJCS8qIHJlc2V0IHJzX2xhc3RfYmNhc3Qgd2hlbiBhIHJlc3luYyBvciB2ZXJpZnkgaXMgc3RhcnRlZCwKQEAgLTE3NzgsMzQgKzE3OTksNiBAQAogCW11dGV4X3VubG9jayhkZXZpY2UtPnN0YXRlX211dGV4KTsKIH0KIAotLyogSWYgdGhlIHJlc291cmNlIGFscmVhZHkgY2xvc2VkIHRoZSBjdXJyZW50IGVwb2NoLCBidXQgd2UgZGlkIG5vdAotICogKGJlY2F1c2Ugd2UgaGF2ZSBub3QgeWV0IHNlZW4gbmV3IHJlcXVlc3RzKSwgd2Ugc2hvdWxkIHNlbmQgdGhlCi0gKiBjb3JyZXNwb25kaW5nIGJhcnJpZXIgbm93LiAgTXVzdCBiZSBjaGVja2VkIHdpdGhpbiB0aGUgc2FtZSBzcGlubG9jawotICogdGhhdCBpcyB1c2VkIHRvIGNoZWNrIGZvciBuZXcgcmVxdWVzdHMuICovCi1zdGF0aWMgYm9vbCBuZWVkX3RvX3NlbmRfYmFycmllcihzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICpjb25uZWN0aW9uKQotewotCWlmICghY29ubmVjdGlvbi0+c2VuZC5zZWVuX2FueV93cml0ZV95ZXQpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIFNraXAgYmFycmllcnMgdGhhdCBkbyBub3QgY29udGFpbiBhbnkgd3JpdGVzLgotCSAqIFRoaXMgbWF5IGhhcHBlbiBkdXJpbmcgQUhFQUQgbW9kZS4gKi8KLQlpZiAoIWNvbm5lY3Rpb24tPnNlbmQuY3VycmVudF9lcG9jaF93cml0ZXMpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIC0+cmVxX2xvY2sgaXMgaGVsZCB3aGVuIHJlcXVlc3RzIGFyZSBxdWV1ZWQgb24KLQkgKiBjb25uZWN0aW9uLT5zZW5kZXJfd29yaywgYW5kIHB1dCBpbnRvIC0+dHJhbnNmZXJfbG9nLgotCSAqIEl0IGlzIGFsc28gaGVsZCB3aGVuIC0+Y3VycmVudF90bGVfbnIgaXMgaW5jcmVhc2VkLgotCSAqIFNvIGVpdGhlciB0aGVyZSBhcmUgYWxyZWFkeSBuZXcgcmVxdWVzdHMgcXVldWVkLAotCSAqIGFuZCBjb3JyZXNwb25kaW5nIGJhcnJpZXJzIHdpbGwgYmUgc2VuZCB0aGVyZS4KLQkgKiBPciBub3RoaW5nIG5ldyBpcyBxdWV1ZWQgeWV0LCBzbyB0aGUgZGlmZmVyZW5jZSB3aWxsIGJlIDEuCi0JICovCi0JaWYgKGF0b21pY19yZWFkKCZjb25uZWN0aW9uLT5jdXJyZW50X3RsZV9ucikgIT0KLQkgICAgY29ubmVjdGlvbi0+c2VuZC5jdXJyZW50X2Vwb2NoX25yICsgMSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBib29sIGRlcXVldWVfd29ya19iYXRjaChzdHJ1Y3QgZHJiZF93b3JrX3F1ZXVlICpxdWV1ZSwgc3RydWN0IGxpc3RfaGVhZCAqd29ya19saXN0KQogewogCXNwaW5fbG9ja19pcnEoJnF1ZXVlLT5xX2xvY2spOwpAQCAtMTg2NCwxMiArMTg1NywyMiBAQAogCQkJc3Bpbl91bmxvY2tfaXJxKCZjb25uZWN0aW9uLT5yZXNvdXJjZS0+cmVxX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KLQkJc2VuZF9iYXJyaWVyID0gbmVlZF90b19zZW5kX2JhcnJpZXIoY29ubmVjdGlvbik7CisKKwkJLyogV2UgZm91bmQgbm90aGluZyBuZXcgdG8gZG8sIG5vIHRvLWJlLWNvbW11bmljYXRlZCByZXF1ZXN0LAorCQkgKiBubyBvdGhlciB3b3JrIGl0ZW0uICBXZSBtYXkgc3RpbGwgbmVlZCB0byBjbG9zZSB0aGUgbGFzdAorCQkgKiBlcG9jaC4gIE5leHQgaW5jb21pbmcgcmVxdWVzdCBlcG9jaCB3aWxsIGJlIGNvbm5lY3Rpb24gLT4KKwkJICogY3VycmVudCB0cmFuc2ZlciBsb2cgZXBvY2ggbnVtYmVyLiAgSWYgdGhhdCBpcyBkaWZmZXJlbnQKKwkJICogZnJvbSB0aGUgZXBvY2ggb2YgdGhlIGxhc3QgcmVxdWVzdCB3ZSBjb21tdW5pY2F0ZWQsIGl0IGlzCisJCSAqIHNhZmUgdG8gc2VuZCB0aGUgZXBvY2ggc2VwYXJhdGluZyBiYXJyaWVyIG5vdy4KKwkJICovCisJCXNlbmRfYmFycmllciA9CisJCQlhdG9taWNfcmVhZCgmY29ubmVjdGlvbi0+Y3VycmVudF90bGVfbnIpICE9CisJCQljb25uZWN0aW9uLT5zZW5kLmN1cnJlbnRfZXBvY2hfbnI7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29ubmVjdGlvbi0+cmVzb3VyY2UtPnJlcV9sb2NrKTsKLQkJaWYgKHNlbmRfYmFycmllcikgewotCQkJZHJiZF9zZW5kX2JhcnJpZXIoY29ubmVjdGlvbik7Ci0JCQljb25uZWN0aW9uLT5zZW5kLmN1cnJlbnRfZXBvY2hfbnIrKzsKLQkJfQorCisJCWlmIChzZW5kX2JhcnJpZXIpCisJCQltYXliZV9zZW5kX2JhcnJpZXIoY29ubmVjdGlvbiwKKwkJCQkJY29ubmVjdGlvbi0+c2VuZC5jdXJyZW50X2Vwb2NoX25yICsgMSk7CiAJCXNjaGVkdWxlKCk7CiAJCS8qIG1heSBiZSB3b2tlbiB1cCBmb3Igb3RoZXIgdGhpbmdzIGJ1dCBuZXcgd29yaywgdG9vLAogCQkgKiBlLmcuIGlmIHRoZSBjdXJyZW50IGVwb2NoIGdvdCBjbG9zZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93cmFwcGVycy5oIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd3JhcHBlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiOWViYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93cmFwcGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotI2lmbmRlZiBfRFJCRF9XUkFQUEVSU19ICi0jZGVmaW5lIF9EUkJEX1dSQVBQRVJTX0gKLQotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlICJkcmJkX2ludC5oIgotCi0vKiBzZWUgZ2V0X3NiX2JkZXYgYW5kIGJkX2NsYWltICovCi1leHRlcm4gY2hhciAqZHJiZF9zZWNfaG9sZGVyOwotCi0vKiBzZXRzIHRoZSBudW1iZXIgb2YgNTEyIGJ5dGUgc2VjdG9ycyBvZiBvdXIgdmlydHVhbCBkZXZpY2UgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcmJkX3NldF9teV9jYXBhY2l0eShzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwKLQkJCQkJc2VjdG9yX3Qgc2l6ZSkKLXsKLQkvKiBzZXRfY2FwYWNpdHkoZGV2aWNlLT50aGlzX2JkZXYtPmJkX2Rpc2ssIHNpemUpOyAqLwotCXNldF9jYXBhY2l0eShkZXZpY2UtPnZkaXNrLCBzaXplKTsKLQlkZXZpY2UtPnRoaXNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IChsb2ZmX3Qpc2l6ZSA8PCA5OwotfQotCi0jZGVmaW5lIGRyYmRfYmlvX3VwdG9kYXRlKGJpbykgYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpCi0KLS8qIGJpX2VuZF9pbyBoYW5kbGVycyAqLwotZXh0ZXJuIHZvaWQgZHJiZF9tZF9pb19jb21wbGV0ZShzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcik7Ci1leHRlcm4gdm9pZCBkcmJkX3BlZXJfcmVxdWVzdF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcik7Ci1leHRlcm4gdm9pZCBkcmJkX3JlcXVlc3RfZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpOwotCi0vKgotICogdXNlZCB0byBzdWJtaXQgb3VyIHByaXZhdGUgYmlvCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcmJkX2dlbmVyaWNfbWFrZV9yZXF1ZXN0KHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLAotCQkJCQkgICAgIGludCBmYXVsdF90eXBlLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JX19yZWxlYXNlKGxvY2FsKTsKLQlpZiAoIWJpby0+YmlfYmRldikgewotCQlwcmludGsoS0VSTl9FUlIgImRyYmQlZDogZHJiZF9nZW5lcmljX21ha2VfcmVxdWVzdDogIgotCQkJCSJiaW8tPmJpX2JkZXYgPT0gTlVMTFxuIiwKLQkJICAgICAgIGRldmljZV90b19taW5vcihkZXZpY2UpKTsKLQkJZHVtcF9zdGFjaygpOwotCQliaW9fZW5kaW8oYmlvLCAtRU5PREVWKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChkcmJkX2luc2VydF9mYXVsdChkZXZpY2UsIGZhdWx0X3R5cGUpKQotCQliaW9fZW5kaW8oYmlvLCAtRUlPKTsKLQllbHNlCi0JCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Ci19Ci0KLSNpZm5kZWYgX19DSEVDS0VSX18KLSMgdW5kZWYgX19jb25kX2xvY2sKLSMgZGVmaW5lIF9fY29uZF9sb2NrKHgsYykgKGMpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCBmYTliYjc0Li42NzdkYjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTIzNTEsNyArMjM1MSw3IEBACiAJfQogCiAJaWYgKENUKENPTU1BTkQpICE9IEZEX1JFQUQgfHwKLQkgICAgcmF3X2NtZC0+a2VybmVsX2RhdGEgPT0gY3VycmVudF9yZXEtPmJ1ZmZlcikgeworCSAgICByYXdfY21kLT5rZXJuZWxfZGF0YSA9PSBiaW9fZGF0YShjdXJyZW50X3JlcS0+YmlvKSkgewogCQkvKiB0cmFuc2ZlciBkaXJlY3RseSBmcm9tIGJ1ZmZlciAqLwogCQljb250LT5kb25lKDEpOwogCX0gZWxzZSBpZiAoQ1QoQ09NTUFORCkgPT0gRkRfUkVBRCkgewpAQCAtMjY0MCw3ICsyNjQwLDcgQEAKIAkJcmF3X2NtZC0+ZmxhZ3MgJj0gfkZEX1JBV19XUklURTsKIAkJcmF3X2NtZC0+ZmxhZ3MgfD0gRkRfUkFXX1JFQUQ7CiAJCUNPTU1BTkQgPSBGTV9NT0RFKF9mbG9wcHksIEZEX1JFQUQpOwotCX0gZWxzZSBpZiAoKHVuc2lnbmVkIGxvbmcpY3VycmVudF9yZXEtPmJ1ZmZlciA8IE1BWF9ETUFfQUREUkVTUykgeworCX0gZWxzZSBpZiAoKHVuc2lnbmVkIGxvbmcpYmlvX2RhdGEoY3VycmVudF9yZXEtPmJpbykgPCBNQVhfRE1BX0FERFJFU1MpIHsKIAkJdW5zaWduZWQgbG9uZyBkbWFfbGltaXQ7CiAJCWludCBkaXJlY3QsIGluZGlyZWN0OwogCkBAIC0yNjU0LDEzICsyNjU0LDEzIEBACiAJCSAqLwogCQltYXhfc2l6ZSA9IGJ1ZmZlcl9jaGFpbl9zaXplKCk7CiAJCWRtYV9saW1pdCA9IChNQVhfRE1BX0FERFJFU1MgLQotCQkJICAgICAoKHVuc2lnbmVkIGxvbmcpY3VycmVudF9yZXEtPmJ1ZmZlcikpID4+IDk7CisJCQkgICAgICgodW5zaWduZWQgbG9uZyliaW9fZGF0YShjdXJyZW50X3JlcS0+YmlvKSkpID4+IDk7CiAJCWlmICgodW5zaWduZWQgbG9uZyltYXhfc2l6ZSA+IGRtYV9saW1pdCkKIAkJCW1heF9zaXplID0gZG1hX2xpbWl0OwogCQkvKiA2NCBrYiBib3VuZGFyaWVzICovCi0JCWlmIChDUk9TU182NEtCKGN1cnJlbnRfcmVxLT5idWZmZXIsIG1heF9zaXplIDw8IDkpKQorCQlpZiAoQ1JPU1NfNjRLQihiaW9fZGF0YShjdXJyZW50X3JlcS0+YmlvKSwgbWF4X3NpemUgPDwgOSkpCiAJCQltYXhfc2l6ZSA9IChLXzY0IC0KLQkJCQkgICAgKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcmVxLT5idWZmZXIpICUKKwkJCQkgICAgKCh1bnNpZ25lZCBsb25nKWJpb19kYXRhKGN1cnJlbnRfcmVxLT5iaW8pKSAlCiAJCQkJICAgIEtfNjQpID4+IDk7CiAJCWRpcmVjdCA9IHRyYW5zZmVyX3NpemUoc3NpemUsIG1heF9zZWN0b3IsIG1heF9zaXplKSAtIGZzZWN0b3JfdDsKIAkJLyoKQEAgLTI2NzcsNyArMjY3Nyw3IEBACiAJCSAgICAgICAoRFAtPnJlYWRfdHJhY2sgJiAoMSA8PCBEUlMtPnByb2JlZF9mb3JtYXQpKSkpKSkgewogCQkJbWF4X3NpemUgPSBibGtfcnFfc2VjdG9ycyhjdXJyZW50X3JlcSk7CiAJCX0gZWxzZSB7Ci0JCQlyYXdfY21kLT5rZXJuZWxfZGF0YSA9IGN1cnJlbnRfcmVxLT5idWZmZXI7CisJCQlyYXdfY21kLT5rZXJuZWxfZGF0YSA9IGJpb19kYXRhKGN1cnJlbnRfcmVxLT5iaW8pOwogCQkJcmF3X2NtZC0+bGVuZ3RoID0gY3VycmVudF9jb3VudF9zZWN0b3JzIDw8IDk7CiAJCQlpZiAocmF3X2NtZC0+bGVuZ3RoID09IDApIHsKIAkJCQlEUFJJTlQoIiVzOiB6ZXJvIGRtYSB0cmFuc2ZlciBhdHRlbXB0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTI3MzEsNyArMjczMSw3IEBACiAJcmF3X2NtZC0+bGVuZ3RoID0gKChyYXdfY21kLT5sZW5ndGggLSAxKSB8IChzc2l6ZSAtIDEpKSArIDE7CiAJcmF3X2NtZC0+bGVuZ3RoIDw8PSA5OwogCWlmICgocmF3X2NtZC0+bGVuZ3RoIDwgY3VycmVudF9jb3VudF9zZWN0b3JzIDw8IDkpIHx8Ci0JICAgIChyYXdfY21kLT5rZXJuZWxfZGF0YSAhPSBjdXJyZW50X3JlcS0+YnVmZmVyICYmCisJICAgIChyYXdfY21kLT5rZXJuZWxfZGF0YSAhPSBiaW9fZGF0YShjdXJyZW50X3JlcS0+YmlvKSAmJgogCSAgICAgQ1QoQ09NTUFORCkgPT0gRkRfV1JJVEUgJiYKIAkgICAgIChhbGlnbmVkX3NlY3Rvcl90ICsgKHJhd19jbWQtPmxlbmd0aCA+PiA5KSA+IGJ1ZmZlcl9tYXggfHwKIAkgICAgICBhbGlnbmVkX3NlY3Rvcl90IDwgYnVmZmVyX21pbikpIHx8CkBAIC0yNzM5LDcgKzI3MzksNyBAQAogCSAgICByYXdfY21kLT5sZW5ndGggPD0gMCB8fCBjdXJyZW50X2NvdW50X3NlY3RvcnMgPD0gMCkgewogCQlEUFJJTlQoImZyYWN0aW9uYXJ5IGN1cnJlbnQgY291bnQgYj0lbHggcz0lbHhcbiIsCiAJCSAgICAgICByYXdfY21kLT5sZW5ndGgsIGN1cnJlbnRfY291bnRfc2VjdG9ycyk7Ci0JCWlmIChyYXdfY21kLT5rZXJuZWxfZGF0YSAhPSBjdXJyZW50X3JlcS0+YnVmZmVyKQorCQlpZiAocmF3X2NtZC0+a2VybmVsX2RhdGEgIT0gYmlvX2RhdGEoY3VycmVudF9yZXEtPmJpbykpCiAJCQlwcl9pbmZvKCJhZGRyPSVkLCBsZW5ndGg9JWxkXG4iLAogCQkJCShpbnQpKChyYXdfY21kLT5rZXJuZWxfZGF0YSAtCiAJCQkJICAgICAgIGZsb3BweV90cmFja19idWZmZXIpID4+IDkpLApAQCAtMjc1Niw3ICsyNzU2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHJhd19jbWQtPmtlcm5lbF9kYXRhICE9IGN1cnJlbnRfcmVxLT5idWZmZXIpIHsKKwlpZiAocmF3X2NtZC0+a2VybmVsX2RhdGEgIT0gYmlvX2RhdGEoY3VycmVudF9yZXEtPmJpbykpIHsKIAkJaWYgKHJhd19jbWQtPmtlcm5lbF9kYXRhIDwgZmxvcHB5X3RyYWNrX2J1ZmZlciB8fAogCQkgICAgY3VycmVudF9jb3VudF9zZWN0b3JzIDwgMCB8fAogCQkgICAgcmF3X2NtZC0+bGVuZ3RoIDwgMCB8fApAQCAtMzgxMiw3ICszODEyLDcgQEAKIAliaW8uYmlfaXRlci5iaV9zaXplID0gc2l6ZTsKIAliaW8uYmlfYmRldiA9IGJkZXY7CiAJYmlvLmJpX2l0ZXIuYmlfc2VjdG9yID0gMDsKLQliaW8uYmlfZmxhZ3MgPSAoMSA8PCBCSU9fUVVJRVQpOworCWJpby5iaV9mbGFncyB8PSAoMSA8PCBCSU9fUVVJRVQpOwogCWJpby5iaV9wcml2YXRlID0gJmNiZGF0YTsKIAliaW8uYmlfZW5kX2lvID0gZmxvcHB5X3JiMF9jYjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9oZC5jIGIvZHJpdmVycy9ibG9jay9oZC5jCmluZGV4IGJmMzk3YmYuLjhhMjkwYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKQEAgLTQ2NCwxMSArNDY0LDExIEBACiAKIG9rX3RvX3JlYWQ6CiAJcmVxID0gaGRfcmVxOwotCWluc3coSERfREFUQSwgcmVxLT5idWZmZXIsIDI1Nik7CisJaW5zdyhIRF9EQVRBLCBiaW9fZGF0YShyZXEtPmJpbyksIDI1Nik7CiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiByZWFkOiBzZWN0b3IgJWxkLCByZW1haW5pbmcgPSAldSwgYnVmZmVyPSVwXG4iLAogCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgYmxrX3JxX3BvcyhyZXEpICsgMSwKLQkgICAgICAgYmxrX3JxX3NlY3RvcnMocmVxKSAtIDEsIHJlcS0+YnVmZmVyKzUxMik7CisJICAgICAgIGJsa19ycV9zZWN0b3JzKHJlcSkgLSAxLCBiaW9fZGF0YShyZXEtPmJpbykrNTEyKTsKICNlbmRpZgogCWlmIChoZF9lbmRfcmVxdWVzdCgwLCA1MTIpKSB7CiAJCVNFVF9IQU5ETEVSKCZyZWFkX2ludHIpOwpAQCAtNTA1LDcgKzUwNSw3IEBACiBva190b193cml0ZToKIAlpZiAoaGRfZW5kX3JlcXVlc3QoMCwgNTEyKSkgewogCQlTRVRfSEFORExFUigmd3JpdGVfaW50cik7Ci0JCW91dHN3KEhEX0RBVEEsIHJlcS0+YnVmZmVyLCAyNTYpOworCQlvdXRzdyhIRF9EQVRBLCBiaW9fZGF0YShyZXEtPmJpbyksIDI1Nik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYyNCw3ICs2MjQsNyBAQAogCXByaW50aygiJXM6ICVzaW5nOiBDSFM9JWQvJWQvJWQsIHNlY3RvcnM9JWQsIGJ1ZmZlcj0lcFxuIiwKIAkJcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsCiAJCXJlcV9kYXRhX2RpcihyZXEpID09IFJFQUQgPyAicmVhZCIgOiAid3JpdCIsCi0JCWN5bCwgaGVhZCwgc2VjLCBuc2VjdCwgcmVxLT5idWZmZXIpOworCQljeWwsIGhlYWQsIHNlYywgbnNlY3QsIGJpb19kYXRhKHJlcS0+YmlvKSk7CiAjZW5kaWYKIAlpZiAocmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykgewogCQlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKQEAgLTY0Myw3ICs2NDMsNyBAQAogCQkJCWJhZF9yd19pbnRyKCk7CiAJCQkJZ290byByZXBlYXQ7CiAJCQl9Ci0JCQlvdXRzdyhIRF9EQVRBLCByZXEtPmJ1ZmZlciwgMjU2KTsKKwkJCW91dHN3KEhEX0RBVEEsIGJpb19kYXRhKHJlcS0+YmlvKSwgMjU2KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKCJ1bmtub3duIGhkLWNvbW1hbmRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCBmNzBhMjMwLi42Y2IxYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNTQ4LDcgKzU0OCw3IEBACiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRhdGE7CiAJc3RydWN0IGJpbyAqYmlvOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIWJpb19saXN0X2VtcHR5KCZsby0+bG9fYmlvX2xpc3QpKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jIGIvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMKaW5kZXggZWI1OWIxMi4uZTM1MmNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMKKysrIGIvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogCiBzdGF0aWMgdm9pZCBtZ19yZWFkX29uZShzdHJ1Y3QgbWdfaG9zdCAqaG9zdCwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKLQl1MTYgKmJ1ZmYgPSAodTE2ICopcmVxLT5idWZmZXI7CisJdTE2ICpidWZmID0gKHUxNiAqKWJpb19kYXRhKHJlcS0+YmlvKTsKIAl1MzIgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBNR19TRUNUT1JfU0laRSA+PiAxOyBpKyspCkBAIC00OTYsNyArNDk2LDcgQEAKIAkJbWdfYmFkX3J3X2ludHIoaG9zdCk7CiAKIAlNR19EQkcoInJlcXVlc3RlZCAlZCBzZWN0cyAoZnJvbSAlbGQpLCBidWZmZXI9MHglcFxuIiwKLQkgICAgICAgYmxrX3JxX3NlY3RvcnMocmVxKSwgYmxrX3JxX3BvcyhyZXEpLCByZXEtPmJ1ZmZlcik7CisJICAgICAgIGJsa19ycV9zZWN0b3JzKHJlcSksIGJsa19ycV9wb3MocmVxKSwgYmlvX2RhdGEocmVxLT5iaW8pKTsKIAogCWRvIHsKIAkJaWYgKG1nX3dhaXQoaG9zdCwgQVRBX0RSUSwKQEAgLTUxNCw3ICs1MTQsNyBAQAogCiBzdGF0aWMgdm9pZCBtZ193cml0ZV9vbmUoc3RydWN0IG1nX2hvc3QgKmhvc3QsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7Ci0JdTE2ICpidWZmID0gKHUxNiAqKXJlcS0+YnVmZmVyOworCXUxNiAqYnVmZiA9ICh1MTYgKiliaW9fZGF0YShyZXEtPmJpbyk7CiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUdfU0VDVE9SX1NJWkUgPj4gMTsgaSsrKQpAQCAtNTM0LDcgKzUzNCw3IEBACiAJfQogCiAJTUdfREJHKCJyZXF1ZXN0ZWQgJWQgc2VjdHMgKGZyb20gJWxkKSwgYnVmZmVyPTB4JXBcbiIsCi0JICAgICAgIHJlbSwgYmxrX3JxX3BvcyhyZXEpLCByZXEtPmJ1ZmZlcik7CisJICAgICAgIHJlbSwgYmxrX3JxX3BvcyhyZXEpLCBiaW9fZGF0YShyZXEtPmJpbykpOwogCiAJaWYgKG1nX3dhaXQoaG9zdCwgQVRBX0RSUSwKIAkJICAgIE1HX1RNQVhfV0FJVF9XUl9EUlEpICE9IE1HX0VSUl9OT05FKSB7CkBAIC01ODUsNyArNTg1LDcgQEAKIAltZ19yZWFkX29uZShob3N0LCByZXEpOwogCiAJTUdfREJHKCJzZWN0b3IgJWxkLCByZW1haW5pbmc9JWxkLCBidWZmZXI9MHglcFxuIiwKLQkgICAgICAgYmxrX3JxX3BvcyhyZXEpLCBibGtfcnFfc2VjdG9ycyhyZXEpIC0gMSwgcmVxLT5idWZmZXIpOworCSAgICAgICBibGtfcnFfcG9zKHJlcSksIGJsa19ycV9zZWN0b3JzKHJlcSkgLSAxLCBiaW9fZGF0YShyZXEtPmJpbykpOwogCiAJLyogc2VuZCByZWFkIGNvbmZpcm0gKi8KIAlvdXRiKE1HX0NNRF9SRF9DT05GLCAodW5zaWduZWQgbG9uZylob3N0LT5kZXZfYmFzZSArIE1HX1JFR19DT01NQU5EKTsKQEAgLTYyNCw3ICs2MjQsNyBAQAogCQkvKiB3cml0ZSAxIHNlY3RvciBhbmQgc2V0IGhhbmRsZXIgaWYgcmVtYWlucyAqLwogCQltZ193cml0ZV9vbmUoaG9zdCwgcmVxKTsKIAkJTUdfREJHKCJzZWN0b3IgJWxkLCByZW1haW5pbmc9JWxkLCBidWZmZXI9MHglcFxuIiwKLQkJICAgICAgIGJsa19ycV9wb3MocmVxKSwgYmxrX3JxX3NlY3RvcnMocmVxKSwgcmVxLT5idWZmZXIpOworCQkgICAgICAgYmxrX3JxX3BvcyhyZXEpLCBibGtfcnFfc2VjdG9ycyhyZXEpLCBiaW9fZGF0YShyZXEtPmJpbykpOwogCQlob3N0LT5tZ19kb19pbnRyID0gbWdfd3JpdGVfaW50cjsKIAkJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIDMgKiBIWik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jIGIvZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jCmluZGV4IDU5YzVhYmUuLmFiYzg1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYworKysgYi9kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsay1tcS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CkBAIC0xNzMsNjAgKzE3NCwzNCBAQAogCXJldHVybiBmYWxzZTsgLyogZGV2aWNlIHByZXNlbnQgKi8KIH0KIAotLyoKLSAqIE9idGFpbiBhbiBlbXB0eSBjb21tYW5kIHNsb3QuCi0gKgotICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQgc2luY2UgaXQgY291bGQgYmUgY2FsbGVkCi0gKiBhdCB0aGUgc2FtZSB0aW1lIG9uIG11bHRpcGxlIENQVXMuIFRoZSBhbGxvY2F0aW9uIG9mIHRoZQotICogY29tbWFuZCBzbG90IG11c3QgYmUgYXRvbWljLgotICoKLSAqIEBwb3J0IFBvaW50ZXIgdG8gdGhlIHBvcnQgZGF0YSBzdHJ1Y3R1cmUuCi0gKgotICogcmV0dXJuIHZhbHVlCi0gKgk+PSAwCUluZGV4IG9mIGNvbW1hbmQgc2xvdCBvYnRhaW5lZC4KLSAqCS0xCU5vIGNvbW1hbmQgc2xvdHMgYXZhaWxhYmxlLgotICovCi1zdGF0aWMgaW50IGdldF9zbG90KHN0cnVjdCBtdGlwX3BvcnQgKnBvcnQpCitzdGF0aWMgc3RydWN0IG10aXBfY21kICptdGlwX2dldF9pbnRfY29tbWFuZChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkKQogewotCWludCBzbG90LCBpOwotCXVuc2lnbmVkIGludCBudW1fY29tbWFuZF9zbG90cyA9IHBvcnQtPmRkLT5zbG90X2dyb3VwcyAqIDMyOworCXN0cnVjdCByZXF1ZXN0ICpycTsKIAotCS8qCi0JICogVHJ5IDEwIHRpbWVzLCBiZWNhdXNlIHRoZXJlIGlzIGEgc21hbGwgcmFjZSBoZXJlLgotCSAqICB0aGF0J3Mgb2ssIGJlY2F1c2UgaXQncyBzdGlsbCBjaGVhcGVyIHRoYW4gYSBsb2NrLgotCSAqCi0JICogUmFjZTogU2luY2UgdGhpcyBzZWN0aW9uIGlzIG5vdCBwcm90ZWN0ZWQgYnkgbG9jaywgc2FtZSBiaXQKLQkgKiBjb3VsZCBiZSBjaG9zZW4gYnkgZGlmZmVyZW50IHByb2Nlc3MgY29udGV4dHMgcnVubmluZyBpbgotCSAqIGRpZmZlcmVudCBwcm9jZXNzb3IuIFNvIGluc3RlYWQgb2YgY29zdGx5IGxvY2ssIHdlIGFyZSBnb2luZwotCSAqIHdpdGggbG9vcC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlzbG90ID0gZmluZF9uZXh0X3plcm9fYml0KHBvcnQtPmFsbG9jYXRlZCwKLQkJCQkJIG51bV9jb21tYW5kX3Nsb3RzLCAxKTsKLQkJaWYgKChzbG90IDwgbnVtX2NvbW1hbmRfc2xvdHMpICYmCi0JCSAgICAoIXRlc3RfYW5kX3NldF9iaXQoc2xvdCwgcG9ydC0+YWxsb2NhdGVkKSkpCi0JCQlyZXR1cm4gc2xvdDsKLQl9Ci0JZGV2X3dhcm4oJnBvcnQtPmRkLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGEgdGFnLlxuIik7CisJcnEgPSBibGtfbXFfYWxsb2NfcmVxdWVzdChkZC0+cXVldWUsIDAsIF9fR0ZQX1dBSVQsIHRydWUpOworCXJldHVybiBibGtfbXFfcnFfdG9fcGR1KHJxKTsKK30KIAotCW10aXBfY2hlY2tfc3VycHJpc2VfcmVtb3ZhbChwb3J0LT5kZC0+cGRldik7Ci0JcmV0dXJuIC0xOworc3RhdGljIHZvaWQgbXRpcF9wdXRfaW50X2NvbW1hbmQoc3RydWN0IGRyaXZlcl9kYXRhICpkZCwgc3RydWN0IG10aXBfY21kICpjbWQpCit7CisJYmxrX3B1dF9yZXF1ZXN0KGJsa19tcV9ycV9mcm9tX3BkdShjbWQpKTsKIH0KIAogLyoKLSAqIFJlbGVhc2UgYSBjb21tYW5kIHNsb3QuCi0gKgotICogQHBvcnQgUG9pbnRlciB0byB0aGUgcG9ydCBkYXRhIHN0cnVjdHVyZS4KLSAqIEB0YWcgIFRhZyBvZiBjb21tYW5kIHRvIHJlbGVhc2UKLSAqCi0gKiByZXR1cm4gdmFsdWUKLSAqCU5vbmUKKyAqIE9uY2Ugd2UgYWRkIHN1cHBvcnQgZm9yIG9uZSBoY3R4IHBlciBtdGlwIGdyb3VwLCB0aGlzIHdpbGwgY2hhbmdlIGEgYml0CiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX3Nsb3Qoc3RydWN0IG10aXBfcG9ydCAqcG9ydCwgaW50IHRhZykKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqbXRpcF9ycV9mcm9tX3RhZyhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkLAorCQkJCQl1bnNpZ25lZCBpbnQgdGFnKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNsZWFyX2JpdCh0YWcsIHBvcnQtPmFsbG9jYXRlZCk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlyZXR1cm4gYmxrX21xX3RhZ190b19ycShkZC0+cXVldWUtPnF1ZXVlX2h3X2N0eFswXSwgdGFnKTsKK30KKworc3RhdGljIHN0cnVjdCBtdGlwX2NtZCAqbXRpcF9jbWRfZnJvbV90YWcoc3RydWN0IGRyaXZlcl9kYXRhICpkZCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgdGFnKQoreworCXN0cnVjdCByZXF1ZXN0ICpycSA9IG10aXBfcnFfZnJvbV90YWcoZGQsIHRhZyk7CisKKwlyZXR1cm4gYmxrX21xX3JxX3RvX3BkdShycSk7CiB9CiAKIC8qCkBAIC0yNDgsOTMgKzIyMywyOCBAQAogICoJTm9uZQogICovCiBzdGF0aWMgdm9pZCBtdGlwX2FzeW5jX2NvbXBsZXRlKHN0cnVjdCBtdGlwX3BvcnQgKnBvcnQsCi0JCQkJaW50IHRhZywKLQkJCQl2b2lkICpkYXRhLAotCQkJCWludCBzdGF0dXMpCisJCQkJaW50IHRhZywgc3RydWN0IG10aXBfY21kICpjbWQsIGludCBzdGF0dXMpCiB7Ci0Jc3RydWN0IG10aXBfY21kICpjbWQ7Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkZCA9IGRhdGE7Ci0JaW50IHVuYWxpZ25lZCwgY2Jfc3RhdHVzID0gc3RhdHVzID8gLUVJTyA6IDA7Ci0Jdm9pZCAoKmZ1bmMpKHZvaWQgKiwgaW50KTsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkID0gcG9ydC0+ZGQ7CisJc3RydWN0IHJlcXVlc3QgKnJxOwogCiAJaWYgKHVubGlrZWx5KCFkZCkgfHwgdW5saWtlbHkoIXBvcnQpKQogCQlyZXR1cm47CiAKLQljbWQgPSAmcG9ydC0+Y29tbWFuZHNbdGFnXTsKLQogCWlmICh1bmxpa2VseShzdGF0dXMgPT0gUE9SVF9JUlFfVEZfRVJSKSkgewogCQlkZXZfd2FybigmcG9ydC0+ZGQtPnBkZXYtPmRldiwKIAkJCSJDb21tYW5kIHRhZyAlZCBmYWlsZWQgZHVlIHRvIFRGRVxuIiwgdGFnKTsKIAl9CiAKLQkvKiBDbGVhciB0aGUgYWN0aXZlIGZsYWcgKi8KLQlhdG9taWNfc2V0KCZwb3J0LT5jb21tYW5kc1t0YWddLmFjdGl2ZSwgMCk7CisJLyogVW5tYXAgdGhlIERNQSBzY2F0dGVyIGxpc3QgZW50cmllcyAqLworCWRtYV91bm1hcF9zZygmZGQtPnBkZXYtPmRldiwgY21kLT5zZywgY21kLT5zY2F0dGVyX2VudHMsIGNtZC0+ZGlyZWN0aW9uKTsKIAotCS8qIFVwcGVyIGxheWVyIGNhbGxiYWNrICovCi0JZnVuYyA9IGNtZC0+YXN5bmNfY2FsbGJhY2s7Ci0JaWYgKGxpa2VseShmdW5jICYmIGNtcHhjaGcoJmNtZC0+YXN5bmNfY2FsbGJhY2ssIGZ1bmMsIDApID09IGZ1bmMpKSB7CisJcnEgPSBtdGlwX3JxX2Zyb21fdGFnKGRkLCB0YWcpOwogCi0JCS8qIFVubWFwIHRoZSBETUEgc2NhdHRlciBsaXN0IGVudHJpZXMgKi8KLQkJZG1hX3VubWFwX3NnKCZkZC0+cGRldi0+ZGV2LAotCQkJY21kLT5zZywKLQkJCWNtZC0+c2NhdHRlcl9lbnRzLAotCQkJY21kLT5kaXJlY3Rpb24pOworCWlmICh1bmxpa2VseShjbWQtPnVuYWxpZ25lZCkpCisJCXVwKCZwb3J0LT5jbWRfc2xvdF91bmFsKTsKIAotCQlmdW5jKGNtZC0+YXN5bmNfZGF0YSwgY2Jfc3RhdHVzKTsKLQkJdW5hbGlnbmVkID0gY21kLT51bmFsaWduZWQ7Ci0KLQkJLyogQ2xlYXIgdGhlIGFsbG9jYXRlZCBiaXQgZm9yIHRoZSBjb21tYW5kICovCi0JCXJlbGVhc2Vfc2xvdChwb3J0LCB0YWcpOwotCi0JCWlmICh1bmxpa2VseSh1bmFsaWduZWQpKQotCQkJdXAoJnBvcnQtPmNtZF9zbG90X3VuYWwpOwotCQllbHNlCi0JCQl1cCgmcG9ydC0+Y21kX3Nsb3QpOwotCX0KLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBjbGVhbiB0aGUgcGVuZGluZyBjb21tYW5kIGluIHRoZQotICogY29tbWFuZCBzbG90IGR1cmluZyB0aGUgc3VycHJpc2UgcmVtb3ZhbCBvZiBkZXZpY2UgYW5kIHJldHVybgotICogZXJyb3IgdG8gdGhlIHVwcGVyIGxheWVyLgotICoKLSAqIEBkZCBQb2ludGVyIHRvIHRoZSBEUklWRVJfREFUQSBzdHJ1Y3R1cmUuCi0gKgotICogcmV0dXJuIHZhbHVlCi0gKglOb25lCi0gKi8KLXN0YXRpYyB2b2lkIG10aXBfY29tbWFuZF9jbGVhbnVwKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQpCi17Ci0JaW50IHRhZyA9IDA7Ci0Jc3RydWN0IG10aXBfY21kICpjbWQ7Ci0Jc3RydWN0IG10aXBfcG9ydCAqcG9ydCA9IGRkLT5wb3J0OwotCXVuc2lnbmVkIGludCBudW1fY21kX3Nsb3RzID0gZGQtPnNsb3RfZ3JvdXBzICogMzI7Ci0KLQlpZiAoIXRlc3RfYml0KE1USVBfRERGX0lOSVRfRE9ORV9CSVQsICZkZC0+ZGRfZmxhZykpCi0JCXJldHVybjsKLQotCWlmICghcG9ydCkKLQkJcmV0dXJuOwotCi0JY21kID0gJnBvcnQtPmNvbW1hbmRzW01USVBfVEFHX0lOVEVSTkFMXTsKLQlpZiAoYXRvbWljX3JlYWQoJmNtZC0+YWN0aXZlKSkKLQkJaWYgKHJlYWRsKHBvcnQtPmNtZF9pc3N1ZVtNVElQX1RBR19JTlRFUk5BTF0pICYKLQkJCQkJKDEgPDwgTVRJUF9UQUdfSU5URVJOQUwpKQotCQkJaWYgKGNtZC0+Y29tcF9mdW5jKQotCQkJCWNtZC0+Y29tcF9mdW5jKHBvcnQsIE1USVBfVEFHX0lOVEVSTkFMLAotCQkJCQkgY21kLT5jb21wX2RhdGEsIC1FTk9ERVYpOwotCi0Jd2hpbGUgKDEpIHsKLQkJdGFnID0gZmluZF9uZXh0X2JpdChwb3J0LT5hbGxvY2F0ZWQsIG51bV9jbWRfc2xvdHMsIHRhZyk7Ci0JCWlmICh0YWcgPj0gbnVtX2NtZF9zbG90cykKLQkJCWJyZWFrOwotCi0JCWNtZCA9ICZwb3J0LT5jb21tYW5kc1t0YWddOwotCQlpZiAoYXRvbWljX3JlYWQoJmNtZC0+YWN0aXZlKSkKLQkJCW10aXBfYXN5bmNfY29tcGxldGUocG9ydCwgdGFnLCBkZCwgLUVOT0RFVik7Ci0JfQotCi0Jc2V0X2JpdChNVElQX0RERl9DTEVBTlVQX0JJVCwgJmRkLT5kZF9mbGFnKTsKKwlibGtfbXFfZW5kX2lvKHJxLCBzdGF0dXMgPyAtRUlPIDogMCk7CiB9CiAKIC8qCkBAIC0zODgsOCArMjk4LDYgQEAKIHsKIAlpbnQgZ3JvdXAgPSB0YWcgPj4gNTsKIAotCWF0b21pY19zZXQoJnBvcnQtPmNvbW1hbmRzW3RhZ10uYWN0aXZlLCAxKTsKLQogCS8qIGd1YXJkIFNBQ1QgYW5kIENJIHJlZ2lzdGVycyAqLwogCXNwaW5fbG9jaygmcG9ydC0+Y21kX2lzc3VlX2xvY2tbZ3JvdXBdKTsKIAl3cml0ZWwoKDEgPDwgTVRJUF9UQUdfQklUKHRhZykpLApAQCAtMzk3LDEwICszMDUsNiBAQAogCXdyaXRlbCgoMSA8PCBNVElQX1RBR19CSVQodGFnKSksCiAJCQlwb3J0LT5jbWRfaXNzdWVbTVRJUF9UQUdfSU5ERVgodGFnKV0pOwogCXNwaW5fdW5sb2NrKCZwb3J0LT5jbWRfaXNzdWVfbG9ja1tncm91cF0pOwotCi0JLyogU2V0IHRoZSBjb21tYW5kJ3MgdGltZW91dCB2YWx1ZS4qLwotCXBvcnQtPmNvbW1hbmRzW3RhZ10uY29tcF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoCi0JCQkJCU1USVBfTkNRX0NPTU1BTkRfVElNRU9VVF9NUyk7CiB9CiAKIC8qCkBAIC02NDgsMTMyICs1NTIsMTMgQEAKIAogCW1lbXNldCh0YWdtYXAsIDAsIHNpemVvZih0YWdtYXApKTsKIAlmb3IgKGdyb3VwID0gU0xPVEJJVFNfSU5fTE9OR1M7IGdyb3VwID4gMDsgZ3JvdXAtLSkKLQkJdGFnbWFwX2xlbiA9IHNwcmludGYodGFnbWFwICsgdGFnbWFwX2xlbiwgIiUwMTZsWCAiLAorCQl0YWdtYXBfbGVuICs9IHNwcmludGYodGFnbWFwICsgdGFnbWFwX2xlbiwgIiUwMTZsWCAiLAogCQkJCQkJdGFnYml0c1tncm91cC0xXSk7CiAJZGV2X3dhcm4oJmRkLT5wZGV2LT5kZXYsCiAJCQkiJWQgY29tbWFuZChzKSAlczogdGFnbWFwIFslc10iLCBjbnQsIG1zZywgdGFnbWFwKTsKIH0KIAogLyoKLSAqIENhbGxlZCBwZXJpb2RpY2FsbHkgdG8gc2VlIGlmIGFueSByZWFkL3dyaXRlIGNvbW1hbmRzIGFyZQotICogdGFraW5nIHRvbyBsb25nIHRvIGNvbXBsZXRlLgotICoKLSAqIEBkYXRhIFBvaW50ZXIgdG8gdGhlIFBPUlQgZGF0YSBzdHJ1Y3R1cmUuCi0gKgotICogcmV0dXJuIHZhbHVlCi0gKglOb25lCi0gKi8KLXN0YXRpYyB2b2lkIG10aXBfdGltZW91dF9mdW5jdGlvbih1bnNpZ25lZCBsb25nIGludCBkYXRhKQotewotCXN0cnVjdCBtdGlwX3BvcnQgKnBvcnQgPSAoc3RydWN0IG10aXBfcG9ydCAqKSBkYXRhOwotCXN0cnVjdCBob3N0X3RvX2Rldl9maXMgKmZpczsKLQlzdHJ1Y3QgbXRpcF9jbWQgKmNtZDsKLQlpbnQgdW5hbGlnbmVkLCB0YWcsIGNtZHRvX2NudCA9IDA7Ci0JdW5zaWduZWQgaW50IGJpdCwgZ3JvdXA7Ci0JdW5zaWduZWQgaW50IG51bV9jb21tYW5kX3Nsb3RzOwotCXVuc2lnbmVkIGxvbmcgdG8sIHRhZ2FjY3VtW1NMT1RCSVRTX0lOX0xPTkdTXTsKLQl2b2lkICgqZnVuYykodm9pZCAqLCBpbnQpOwotCi0JaWYgKHVubGlrZWx5KCFwb3J0KSkKLQkJcmV0dXJuOwotCi0JaWYgKHVubGlrZWx5KHBvcnQtPmRkLT5zcikpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdChNVElQX0RERl9SRVNVTUVfQklULCAmcG9ydC0+ZGQtPmRkX2ZsYWcpKSB7Ci0JCW1vZF90aW1lcigmcG9ydC0+Y21kX3RpbWVyLAotCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMzAwMDApKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBjbGVhciB0aGUgdGFnIGFjY3VtdWxhdG9yICovCi0JbWVtc2V0KHRhZ2FjY3VtLCAwLCBTTE9UQklUU19JTl9MT05HUyAqIHNpemVvZihsb25nKSk7Ci0JbnVtX2NvbW1hbmRfc2xvdHMgPSBwb3J0LT5kZC0+c2xvdF9ncm91cHMgKiAzMjsKLQotCWZvciAodGFnID0gMDsgdGFnIDwgbnVtX2NvbW1hbmRfc2xvdHM7IHRhZysrKSB7Ci0JCS8qCi0JCSAqIFNraXAgaW50ZXJuYWwgY29tbWFuZCBzbG90IGFzIGl0IGhhcwotCQkgKiBpdHMgb3duIHRpbWVvdXQgbWVjaGFuaXNtCi0JCSAqLwotCQlpZiAodGFnID09IE1USVBfVEFHX0lOVEVSTkFMKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5jb21tYW5kc1t0YWddLmFjdGl2ZSkgJiYKLQkJICAgKHRpbWVfYWZ0ZXIoamlmZmllcywgcG9ydC0+Y29tbWFuZHNbdGFnXS5jb21wX3RpbWUpKSkgewotCQkJZ3JvdXAgPSB0YWcgPj4gNTsKLQkJCWJpdCA9IHRhZyAmIDB4MUY7Ci0KLQkJCWNtZCA9ICZwb3J0LT5jb21tYW5kc1t0YWddOwotCQkJZmlzID0gKHN0cnVjdCBob3N0X3RvX2Rldl9maXMgKikgY21kLT5jb21tYW5kOwotCi0JCQlzZXRfYml0KHRhZywgdGFnYWNjdW0pOwotCQkJY21kdG9fY250Kys7Ci0JCQlpZiAoY21kdG9fY250ID09IDEpCi0JCQkJc2V0X2JpdChNVElQX1BGX0VIX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncyk7Ci0KLQkJCS8qCi0JCQkgKiBDbGVhciB0aGUgY29tcGxldGVkIGJpdC4gVGhpcyBzaG91bGQgcHJldmVudAotCQkJICogIGFueSBpbnRlcnJ1cHQgaGFuZGxlcnMgZnJvbSB0cnlpbmcgdG8gcmV0aXJlCi0JCQkgKiAgdGhlIGNvbW1hbmQuCi0JCQkgKi8KLQkJCXdyaXRlbCgxIDw8IGJpdCwgcG9ydC0+Y29tcGxldGVkW2dyb3VwXSk7Ci0KLQkJCS8qIENsZWFyIHRoZSBhY3RpdmUgZmxhZyBmb3IgdGhlIGNvbW1hbmQgKi8KLQkJCWF0b21pY19zZXQoJnBvcnQtPmNvbW1hbmRzW3RhZ10uYWN0aXZlLCAwKTsKLQotCQkJZnVuYyA9IGNtZC0+YXN5bmNfY2FsbGJhY2s7Ci0JCQlpZiAoZnVuYyAmJgotCQkJICAgIGNtcHhjaGcoJmNtZC0+YXN5bmNfY2FsbGJhY2ssIGZ1bmMsIDApID09IGZ1bmMpIHsKLQotCQkJCS8qIFVubWFwIHRoZSBETUEgc2NhdHRlciBsaXN0IGVudHJpZXMgKi8KLQkJCQlkbWFfdW5tYXBfc2coJnBvcnQtPmRkLT5wZGV2LT5kZXYsCi0JCQkJCQljbWQtPnNnLAotCQkJCQkJY21kLT5zY2F0dGVyX2VudHMsCi0JCQkJCQljbWQtPmRpcmVjdGlvbik7Ci0KLQkJCQlmdW5jKGNtZC0+YXN5bmNfZGF0YSwgLUVJTyk7Ci0JCQkJdW5hbGlnbmVkID0gY21kLT51bmFsaWduZWQ7Ci0KLQkJCQkvKiBDbGVhciB0aGUgYWxsb2NhdGVkIGJpdCBmb3IgdGhlIGNvbW1hbmQuICovCi0JCQkJcmVsZWFzZV9zbG90KHBvcnQsIHRhZyk7Ci0KLQkJCQlpZiAodW5hbGlnbmVkKQotCQkJCQl1cCgmcG9ydC0+Y21kX3Nsb3RfdW5hbCk7Ci0JCQkJZWxzZQotCQkJCQl1cCgmcG9ydC0+Y21kX3Nsb3QpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGNtZHRvX2NudCkgewotCQlwcmludF90YWdzKHBvcnQtPmRkLCAidGltZWQgb3V0IiwgdGFnYWNjdW0sIGNtZHRvX2NudCk7Ci0JCWlmICghdGVzdF9iaXQoTVRJUF9QRl9JQ19BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpKSB7Ci0JCQltdGlwX2RldmljZV9yZXNldChwb3J0LT5kZCk7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnN2Y193YWl0KTsKLQkJfQotCQljbGVhcl9iaXQoTVRJUF9QRl9FSF9BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpOwotCX0KLQotCWlmIChwb3J0LT5pY19wYXVzZV90aW1lcikgewotCQl0byAgPSBwb3J0LT5pY19wYXVzZV90aW1lciArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRvKSkgewotCQkJaWYgKCF0ZXN0X2JpdChNVElQX1BGX0lDX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncykpIHsKLQkJCQlwb3J0LT5pY19wYXVzZV90aW1lciA9IDA7Ci0JCQkJY2xlYXJfYml0KE1USVBfUEZfU0VfQUNUSVZFX0JJVCwgJnBvcnQtPmZsYWdzKTsKLQkJCQljbGVhcl9iaXQoTVRJUF9QRl9ETV9BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpOwotCQkJCWNsZWFyX2JpdChNVElQX1BGX0lDX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncyk7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdmNfd2FpdCk7Ci0JCQl9Ci0KLQotCQl9Ci0JfQotCi0JLyogUmVzdGFydCB0aGUgdGltZXIgKi8KLQltb2RfdGltZXIoJnBvcnQtPmNtZF90aW1lciwKLQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTVRJUF9USU1FT1VUX0NIRUNLX1BFUklPRCkpOwotfQotCi0vKgogICogSW50ZXJuYWwgY29tbWFuZCBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLgogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgSVNSIHdoZW4gYW4gaW50ZXJuYWwKQEAgLTc4OSwyOCArNTc0LDE5IEBACiAgKglOb25lCiAgKi8KIHN0YXRpYyB2b2lkIG10aXBfY29tcGxldGlvbihzdHJ1Y3QgbXRpcF9wb3J0ICpwb3J0LAotCQkJICAgIGludCB0YWcsCi0JCQkgICAgdm9pZCAqZGF0YSwKLQkJCSAgICBpbnQgc3RhdHVzKQorCQkJICAgIGludCB0YWcsIHN0cnVjdCBtdGlwX2NtZCAqY29tbWFuZCwgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgbXRpcF9jbWQgKmNvbW1hbmQgPSAmcG9ydC0+Y29tbWFuZHNbdGFnXTsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IGRhdGE7CisJc3RydWN0IGNvbXBsZXRpb24gKndhaXRpbmcgPSBjb21tYW5kLT5jb21wX2RhdGE7CiAJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBQT1JUX0lSUV9URl9FUlIpKQogCQlkZXZfd2FybigmcG9ydC0+ZGQtPnBkZXYtPmRldiwKIAkJCSJJbnRlcm5hbCBjb21tYW5kICVkIGNvbXBsZXRlZCB3aXRoIFRGRVxuIiwgdGFnKTsKIAotCWNvbW1hbmQtPmFzeW5jX2NhbGxiYWNrID0gTlVMTDsKLQljb21tYW5kLT5jb21wX2Z1bmMgPSBOVUxMOwotCiAJY29tcGxldGUod2FpdGluZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG10aXBfbnVsbF9jb21wbGV0aW9uKHN0cnVjdCBtdGlwX3BvcnQgKnBvcnQsCi0JCQkgICAgaW50IHRhZywKLQkJCSAgICB2b2lkICpkYXRhLAotCQkJICAgIGludCBzdGF0dXMpCisJCQkgICAgaW50IHRhZywgc3RydWN0IG10aXBfY21kICpjb21tYW5kLCBpbnQgc3RhdHVzKQogewotCXJldHVybjsKIH0KIAogc3RhdGljIGludCBtdGlwX3JlYWRfbG9nX3BhZ2Uoc3RydWN0IG10aXBfcG9ydCAqcG9ydCwgdTggcGFnZSwgdTE2ICpidWZmZXIsCkBAIC04NDIsMTkgKzYxOCwxNiBAQAogCiAJcG9ydCA9IGRkLT5wb3J0OwogCi0JLyogU3RvcCB0aGUgdGltZXIgdG8gcHJldmVudCBjb21tYW5kIHRpbWVvdXRzLiAqLwotCWRlbF90aW1lcigmcG9ydC0+Y21kX3RpbWVyKTsKIAlzZXRfYml0KE1USVBfUEZfRUhfQUNUSVZFX0JJVCwgJnBvcnQtPmZsYWdzKTsKIAogCWlmICh0ZXN0X2JpdChNVElQX1BGX0lDX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncykgJiYKIAkJCXRlc3RfYml0KE1USVBfVEFHX0lOVEVSTkFMLCBwb3J0LT5hbGxvY2F0ZWQpKSB7Ci0JCWNtZCA9ICZwb3J0LT5jb21tYW5kc1tNVElQX1RBR19JTlRFUk5BTF07CisJCWNtZCA9IG10aXBfY21kX2Zyb21fdGFnKGRkLCBNVElQX1RBR19JTlRFUk5BTCk7CiAJCWRiZ19wcmludGsoTVRJUF9EUlZfTkFNRSAiIFRGRSBmb3IgdGhlIGludGVybmFsIGNvbW1hbmRcbiIpOwogCi0JCWF0b21pY19pbmMoJmNtZC0+YWN0aXZlKTsgLyogYWN0aXZlID4gMSBpbmRpY2F0ZXMgZXJyb3IgKi8KIAkJaWYgKGNtZC0+Y29tcF9kYXRhICYmIGNtZC0+Y29tcF9mdW5jKSB7CiAJCQljbWQtPmNvbXBfZnVuYyhwb3J0LCBNVElQX1RBR19JTlRFUk5BTCwKLQkJCQkJY21kLT5jb21wX2RhdGEsIFBPUlRfSVJRX1RGX0VSUik7CisJCQkJCWNtZCwgUE9SVF9JUlFfVEZfRVJSKTsKIAkJfQogCQlnb3RvIGhhbmRsZV90ZmVfZXhpdDsKIAl9CkBAIC04NjYsNiArNjM5LDggQEAKIAlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBkZC0+c2xvdF9ncm91cHM7IGdyb3VwKyspIHsKIAkJY29tcGxldGVkID0gcmVhZGwocG9ydC0+Y29tcGxldGVkW2dyb3VwXSk7CiAKKwkJZGV2X3dhcm4oJmRkLT5wZGV2LT5kZXYsICJnPSV1LCBjb21wPSV4XG4iLCBncm91cCwgY29tcGxldGVkKTsKKwogCQkvKiBjbGVhciBjb21wbGV0ZWQgc3RhdHVzIHJlZ2lzdGVyIGluIHRoZSBoYXJkd2FyZS4qLwogCQl3cml0ZWwoY29tcGxldGVkLCBwb3J0LT5jb21wbGV0ZWRbZ3JvdXBdKTsKIApAQCAtODc5LDE1ICs2NTQsMTEgQEAKIAkJCWlmICh0YWcgPT0gTVRJUF9UQUdfSU5URVJOQUwpCiAJCQkJY29udGludWU7CiAKLQkJCWNtZCA9ICZwb3J0LT5jb21tYW5kc1t0YWddOworCQkJY21kID0gbXRpcF9jbWRfZnJvbV90YWcoZGQsIHRhZyk7CiAJCQlpZiAobGlrZWx5KGNtZC0+Y29tcF9mdW5jKSkgewogCQkJCXNldF9iaXQodGFnLCB0YWdhY2N1bSk7CiAJCQkJY21kX2NudCsrOwotCQkJCWF0b21pY19zZXQoJmNtZC0+YWN0aXZlLCAwKTsKLQkJCQljbWQtPmNvbXBfZnVuYyhwb3J0LAotCQkJCQkgdGFnLAotCQkJCQkgY21kLT5jb21wX2RhdGEsCi0JCQkJCSAwKTsKKwkJCQljbWQtPmNvbXBfZnVuYyhwb3J0LCB0YWcsIGNtZCwgMCk7CiAJCQl9IGVsc2UgewogCQkJCWRldl9lcnIoJnBvcnQtPmRkLT5wZGV2LT5kZXYsCiAJCQkJCSJNaXNzaW5nIGNvbXBsZXRpb24gZnVuYyBmb3IgdGFnICVkIiwKQEAgLTk0NywxMSArNzE4LDcgQEAKIAkJZm9yIChiaXQgPSAwOyBiaXQgPCAzMjsgYml0KyspIHsKIAkJCXJlaXNzdWUgPSAxOwogCQkJdGFnID0gKGdyb3VwIDw8IDUpICsgYml0OwotCQkJY21kID0gJnBvcnQtPmNvbW1hbmRzW3RhZ107Ci0KLQkJCS8qIElmIHRoZSBhY3RpdmUgYml0IGlzIHNldCByZS1pc3N1ZSB0aGUgY29tbWFuZCAqLwotCQkJaWYgKGF0b21pY19yZWFkKCZjbWQtPmFjdGl2ZSkgPT0gMCkKLQkJCQljb250aW51ZTsKKwkJCWNtZCA9IG10aXBfY21kX2Zyb21fdGFnKGRkLCB0YWcpOwogCiAJCQlmaXMgPSAoc3RydWN0IGhvc3RfdG9fZGV2X2ZpcyAqKWNtZC0+Y29tbWFuZDsKIApAQCAtOTcwLDExICs3MzcsOSBAQAogCQkJCQl0YWcsCiAJCQkJCWZhaWxfcmVhc29uICE9IE5VTEwgPwogCQkJCQkJZmFpbF9yZWFzb24gOiAidW5rbm93biIpOwotCQkJCQlhdG9taWNfc2V0KCZjbWQtPmFjdGl2ZSwgMCk7CiAJCQkJCWlmIChjbWQtPmNvbXBfZnVuYykgewogCQkJCQkJY21kLT5jb21wX2Z1bmMocG9ydCwgdGFnLAotCQkJCQkJCWNtZC0+Y29tcF9kYXRhLAotCQkJCQkJCS1FTk9EQVRBKTsKKwkJCQkJCQljbWQsIC1FTk9EQVRBKTsKIAkJCQkJfQogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC05OTcsMTQgKzc2Miw5IEBACiAJCQkvKiBSZXRpcmUgYSBjb21tYW5kIHRoYXQgd2lsbCBub3QgYmUgcmVpc3N1ZWQgKi8KIAkJCWRldl93YXJuKCZwb3J0LT5kZC0+cGRldi0+ZGV2LAogCQkJCSJyZXRpcmluZyB0YWcgJWRcbiIsIHRhZyk7Ci0JCQlhdG9taWNfc2V0KCZjbWQtPmFjdGl2ZSwgMCk7CiAKIAkJCWlmIChjbWQtPmNvbXBfZnVuYykKLQkJCQljbWQtPmNvbXBfZnVuYygKLQkJCQkJcG9ydCwKLQkJCQkJdGFnLAotCQkJCQljbWQtPmNvbXBfZGF0YSwKLQkJCQkJUE9SVF9JUlFfVEZfRVJSKTsKKwkJCQljbWQtPmNvbXBfZnVuYyhwb3J0LCB0YWcsIGNtZCwgUE9SVF9JUlFfVEZfRVJSKTsKIAkJCWVsc2UKIAkJCQlkZXZfd2FybigmcG9ydC0+ZGQtPnBkZXYtPmRldiwKIAkJCQkJIkJhZCBjb21wbGV0aW9uIGZvciB0YWcgJWRcbiIsCkBAIC0xMDE3LDkgKzc3Nyw2IEBACiAJLyogY2xlYXIgZWhfYWN0aXZlICovCiAJY2xlYXJfYml0KE1USVBfUEZfRUhfQUNUSVZFX0JJVCwgJnBvcnQtPmZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnN2Y193YWl0KTsKLQotCW1vZF90aW1lcigmcG9ydC0+Y21kX3RpbWVyLAotCQkgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTVRJUF9USU1FT1VUX0NIRUNLX1BFUklPRCkpOwogfQogCiAvKgpAQCAtMTA0OCwxNSArODA1LDEwIEBACiAJCQlpZiAodW5saWtlbHkodGFnID09IE1USVBfVEFHX0lOVEVSTkFMKSkKIAkJCQljb250aW51ZTsKIAotCQkJY29tbWFuZCA9ICZwb3J0LT5jb21tYW5kc1t0YWddOwotCQkJLyogbWFrZSBpbnRlcm5hbCBjYWxsYmFjayAqLwotCQkJaWYgKGxpa2VseShjb21tYW5kLT5jb21wX2Z1bmMpKSB7Ci0JCQkJY29tbWFuZC0+Y29tcF9mdW5jKAotCQkJCQlwb3J0LAotCQkJCQl0YWcsCi0JCQkJCWNvbW1hbmQtPmNvbXBfZGF0YSwKLQkJCQkJMCk7Ci0JCQl9IGVsc2UgeworCQkJY29tbWFuZCA9IG10aXBfY21kX2Zyb21fdGFnKGRkLCB0YWcpOworCQkJaWYgKGxpa2VseShjb21tYW5kLT5jb21wX2Z1bmMpKQorCQkJCWNvbW1hbmQtPmNvbXBfZnVuYyhwb3J0LCB0YWcsIGNvbW1hbmQsIDApOworCQkJZWxzZSB7CiAJCQkJZGV2X2RiZygmZGQtPnBkZXYtPmRldiwKIAkJCQkJIk51bGwgY29tcGxldGlvbiBmb3IgdGFnICVkIiwKIAkJCQkJdGFnKTsKQEAgLTEwODEsMTYgKzgzMywxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIG10aXBfcHJvY2Vzc19sZWdhY3koc3RydWN0IGRyaXZlcl9kYXRhICpkZCwgdTMyIHBvcnRfc3RhdCkKIHsKIAlzdHJ1Y3QgbXRpcF9wb3J0ICpwb3J0ID0gZGQtPnBvcnQ7Ci0Jc3RydWN0IG10aXBfY21kICpjbWQgPSAmcG9ydC0+Y29tbWFuZHNbTVRJUF9UQUdfSU5URVJOQUxdOworCXN0cnVjdCBtdGlwX2NtZCAqY21kID0gbXRpcF9jbWRfZnJvbV90YWcoZGQsIE1USVBfVEFHX0lOVEVSTkFMKTsKIAogCWlmICh0ZXN0X2JpdChNVElQX1BGX0lDX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncykgJiYKIAkgICAgKGNtZCAhPSBOVUxMKSAmJiAhKHJlYWRsKHBvcnQtPmNtZF9pc3N1ZVtNVElQX1RBR19JTlRFUk5BTF0pCiAJCSYgKDEgPDwgTVRJUF9UQUdfSU5URVJOQUwpKSkgewogCQlpZiAoY21kLT5jb21wX2Z1bmMpIHsKLQkJCWNtZC0+Y29tcF9mdW5jKHBvcnQsCi0JCQkJTVRJUF9UQUdfSU5URVJOQUwsCi0JCQkJY21kLT5jb21wX2RhdGEsCi0JCQkJMCk7CisJCQljbWQtPmNvbXBfZnVuYyhwb3J0LCBNVElQX1RBR19JTlRFUk5BTCwgY21kLCAwKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTExMDMsOCArODUyLDYgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG10aXBfcHJvY2Vzc19lcnJvcnMoc3RydWN0IGRyaXZlcl9kYXRhICpkZCwgdTMyIHBvcnRfc3RhdCkKIHsKLQlpZiAobGlrZWx5KHBvcnRfc3RhdCAmIChQT1JUX0lSUV9URl9FUlIgfCBQT1JUX0lSUV9JRl9FUlIpKSkKLQkJbXRpcF9oYW5kbGVfdGZlKGRkKTsKIAogCWlmICh1bmxpa2VseShwb3J0X3N0YXQgJiBQT1JUX0lSUV9DT05ORUNUKSkgewogCQlkZXZfd2FybigmZGQtPnBkZXYtPmRldiwKQEAgLTExMjIsNiArODY5LDEyIEBACiAJCWRldl93YXJuKCZkZC0+cGRldi0+ZGV2LAogCQkJIlBvcnQgc3RhdCBlcnJvcnMgJXggdW5oYW5kbGVkXG4iLAogCQkJKHBvcnRfc3RhdCAmIH5QT1JUX0lSUV9IQU5ETEVEKSk7CisJCWlmIChtdGlwX2NoZWNrX3N1cnByaXNlX3JlbW92YWwoZGQtPnBkZXYpKQorCQkJcmV0dXJuOworCX0KKwlpZiAobGlrZWx5KHBvcnRfc3RhdCAmIChQT1JUX0lSUV9URl9FUlIgfCBQT1JUX0lSUV9JRl9FUlIpKSkgeworCQlzZXRfYml0KE1USVBfUEZfRUhfQUNUSVZFX0JJVCwgJmRkLT5wb3J0LT5mbGFncyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGQtPnBvcnQtPnN2Y193YWl0KTsKIAl9CiB9CiAKQEAgLTEyMjIsNyArOTc1LDYgQEAKIAogc3RhdGljIHZvaWQgbXRpcF9pc3N1ZV9ub25fbmNxX2NvbW1hbmQoc3RydWN0IG10aXBfcG9ydCAqcG9ydCwgaW50IHRhZykKIHsKLQlhdG9taWNfc2V0KCZwb3J0LT5jb21tYW5kc1t0YWddLmFjdGl2ZSwgMSk7CiAJd3JpdGVsKDEgPDwgTVRJUF9UQUdfQklUKHRhZyksCiAJCXBvcnQtPmNtZF9pc3N1ZVtNVElQX1RBR19JTkRFWCh0YWcpXSk7CiB9CkBAIC0xMjgwLDYgKzEwMzIsOCBAQAogCXVuc2lnbmVkIGludCBuOwogCXVuc2lnbmVkIGludCBhY3RpdmUgPSAxOwogCisJYmxrX21xX3N0b3BfaHdfcXVldWVzKHBvcnQtPmRkLT5xdWV1ZSk7CisKIAl0byA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCWRvIHsKIAkJaWYgKHRlc3RfYml0KE1USVBfUEZfU1ZDX1RIRF9BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpICYmCkBAIC0xMjg3LDggKzEwNDEsMTMgQEAKIAkJCW1zbGVlcCgyMCk7CiAJCQljb250aW51ZTsgLyogc3ZjIHRoZCBpcyBhY3RpdmVseSBpc3N1aW5nIGNvbW1hbmRzICovCiAJCX0KKworCQltc2xlZXAoMTAwKTsKKwkJaWYgKG10aXBfY2hlY2tfc3VycHJpc2VfcmVtb3ZhbChwb3J0LT5kZC0+cGRldikpCisJCQlnb3RvIGVycl9mYXVsdDsKIAkJaWYgKHRlc3RfYml0KE1USVBfRERGX1JFTU9WRV9QRU5ESU5HX0JJVCwgJnBvcnQtPmRkLT5kZF9mbGFnKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQkJZ290byBlcnJfZmF1bHQ7CisKIAkJLyoKIAkJICogSWdub3JlIHNfYWN0aXZlIGJpdCAwIG9mIGFycmF5IGVsZW1lbnQgMC4KIAkJICogVGhpcyBiaXQgd2lsbCBhbHdheXMgYmUgc2V0CkBAIC0xMjk5LDExICsxMDU4LDEzIEBACiAKIAkJaWYgKCFhY3RpdmUpCiAJCQlicmVhazsKLQotCQltc2xlZXAoMjApOwogCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRvKSk7CiAKKwlibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMocG9ydC0+ZGQtPnF1ZXVlLCB0cnVlKTsKIAlyZXR1cm4gYWN0aXZlID8gLUVCVVNZIDogMDsKK2Vycl9mYXVsdDoKKwlibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMocG9ydC0+ZGQtPnF1ZXVlLCB0cnVlKTsKKwlyZXR1cm4gLUVGQVVMVDsKIH0KIAogLyoKQEAgLTEzMzUsMTAgKzEwOTYsOSBAQAogewogCXN0cnVjdCBtdGlwX2NtZF9zZyAqY29tbWFuZF9zZzsKIAlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKLQlpbnQgcnYgPSAwLCByZWFkeTJnbyA9IDE7Ci0Jc3RydWN0IG10aXBfY21kICppbnRfY21kID0gJnBvcnQtPmNvbW1hbmRzW01USVBfVEFHX0lOVEVSTkFMXTsKLQl1bnNpZ25lZCBsb25nIHRvOworCXN0cnVjdCBtdGlwX2NtZCAqaW50X2NtZDsKIAlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkID0gcG9ydC0+ZGQ7CisJaW50IHJ2ID0gMDsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIDggYnl0ZSBhbGlnbmVkLiBUaGlzIGlzIGFzaWMgc3BlY2lmaWMuICovCiAJaWYgKGJ1ZmZlciAmIDB4MDAwMDAwMDcpIHsKQEAgLTEzNDYsMTkgKzExMDYsOCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQl0byA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCWRvIHsKLQkJcmVhZHkyZ28gPSAhdGVzdF9hbmRfc2V0X2JpdChNVElQX1RBR19JTlRFUk5BTCwKLQkJCQkJCXBvcnQtPmFsbG9jYXRlZCk7Ci0JCWlmIChyZWFkeTJnbykKLQkJCWJyZWFrOwotCQltZGVsYXkoMTAwKTsKLQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0bykpOwotCWlmICghcmVhZHkyZ28pIHsKLQkJZGV2X3dhcm4oJmRkLT5wZGV2LT5kZXYsCi0JCQkiSW50ZXJuYWwgY21kIGFjdGl2ZS4gbmV3IGNtZCBbJTAyWF1cbiIsIGZpcy0+Y29tbWFuZCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQorCWludF9jbWQgPSBtdGlwX2dldF9pbnRfY29tbWFuZChkZCk7CisKIAlzZXRfYml0KE1USVBfUEZfSUNfQUNUSVZFX0JJVCwgJnBvcnQtPmZsYWdzKTsKIAlwb3J0LT5pY19wYXVzZV90aW1lciA9IDA7CiAKQEAgLTEzNjgsMTAgKzExMTcsMTEgQEAKIAlpZiAoYXRvbWljID09IEdGUF9LRVJORUwpIHsKIAkJaWYgKGZpcy0+Y29tbWFuZCAhPSBBVEFfQ01EX1NUQU5EQllOT1cxKSB7CiAJCQkvKiB3YWl0IGZvciBpbyB0byBjb21wbGV0ZSBpZiBub24gYXRvbWljICovCi0JCQlpZiAobXRpcF9xdWllc2NlX2lvKHBvcnQsIDUwMDApIDwgMCkgeworCQkJaWYgKG10aXBfcXVpZXNjZV9pbyhwb3J0LAorCQkJCQlNVElQX1FVSUVTQ0VfSU9fVElNRU9VVF9NUykgPCAwKSB7CiAJCQkJZGV2X3dhcm4oJmRkLT5wZGV2LT5kZXYsCiAJCQkJCSJGYWlsZWQgdG8gcXVpZXNjZSBJT1xuIik7Ci0JCQkJcmVsZWFzZV9zbG90KHBvcnQsIE1USVBfVEFHX0lOVEVSTkFMKTsKKwkJCQltdGlwX3B1dF9pbnRfY29tbWFuZChkZCwgaW50X2NtZCk7CiAJCQkJY2xlYXJfYml0KE1USVBfUEZfSUNfQUNUSVZFX0JJVCwgJnBvcnQtPmZsYWdzKTsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnN2Y193YWl0KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTQxNiw5ICsxMTY2LDkgQEAKIAogCWlmIChhdG9taWMgPT0gR0ZQX0tFUk5FTCkgewogCQkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSBvciB0aW1lb3V0LiAqLwotCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCWlmICgocnYgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKIAkJCQkmd2FpdCwKLQkJCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSA8PSAwKSB7CisJCQkJbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkpIDw9IDApIHsKIAkJCWlmIChydiA9PSAtRVJFU1RBUlRTWVMpIHsgLyogaW50ZXJydXB0ZWQgKi8KIAkJCQlkZXZfZXJyKCZkZC0+cGRldi0+ZGV2LAogCQkJCQkiSW50ZXJuYWwgY29tbWFuZCBbJTAyWF0gd2FzIGludGVycnVwdGVkIGFmdGVyICVsdSBtc1xuIiwKQEAgLTE0OTcsOCArMTI0Nyw3IEBACiAJfQogZXhlY19pY19leGl0OgogCS8qIENsZWFyIHRoZSBhbGxvY2F0ZWQgYW5kIGFjdGl2ZSBiaXRzIGZvciB0aGUgaW50ZXJuYWwgY29tbWFuZC4gKi8KLQlhdG9taWNfc2V0KCZpbnRfY21kLT5hY3RpdmUsIDApOwotCXJlbGVhc2Vfc2xvdChwb3J0LCBNVElQX1RBR19JTlRFUk5BTCk7CisJbXRpcF9wdXRfaW50X2NvbW1hbmQoZGQsIGludF9jbWQpOwogCWlmIChydiA+PSAwICYmIG10aXBfcGF1c2VfbmNxKHBvcnQsIGZpcykpIHsKIAkJLyogTkNRIHBhdXNlZCAqLwogCQlyZXR1cm4gcnY7CkBAIC0xNTI5LDYgKzEyNzgsMzcgQEAKIAkJYmUxNl90b19jcHVzKCZidWZbaV0pOwogfQogCitzdGF0aWMgdm9pZCBtdGlwX3NldF90aW1lb3V0KHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQsCisJCQkJCXN0cnVjdCBob3N0X3RvX2Rldl9maXMgKmZpcywKKwkJCQkJdW5zaWduZWQgaW50ICp0aW1lb3V0LCB1OCBlcmFzZW1vZGUpCit7CisJc3dpdGNoIChmaXMtPmNvbW1hbmQpIHsKKwljYXNlIEFUQV9DTURfRE9XTkxPQURfTUlDUk86CisJCSp0aW1lb3V0ID0gMTIwMDAwOyAvKiAyIG1pbnV0ZXMgKi8KKwkJYnJlYWs7CisJY2FzZSBBVEFfQ01EX1NFQ19FUkFTRV9VTklUOgorCWNhc2UgMHhGQzoKKwkJaWYgKGVyYXNlbW9kZSkKKwkJCSp0aW1lb3V0ID0gKCgqKGRkLT5wb3J0LT5pZGVudGlmeSArIDkwKSAqIDIpICogNjAwMDApOworCQllbHNlCisJCQkqdGltZW91dCA9ICgoKihkZC0+cG9ydC0+aWRlbnRpZnkgKyA4OSkgKiAyKSAqIDYwMDAwKTsKKwkJYnJlYWs7CisJY2FzZSBBVEFfQ01EX1NUQU5EQllOT1cxOgorCQkqdGltZW91dCA9IDEyMDAwMDsgIC8qIDIgbWludXRlcyAqLworCQlicmVhazsKKwljYXNlIDB4Rjc6CisJY2FzZSAweEZBOgorCQkqdGltZW91dCA9IDYwMDAwOyAgLyogNjAgc2Vjb25kcyAqLworCQlicmVhazsKKwljYXNlIEFUQV9DTURfU01BUlQ6CisJCSp0aW1lb3V0ID0gMTUwMDA7ICAvKiAxNSBzZWNvbmRzICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp0aW1lb3V0ID0gTVRJUF9JT0NUTF9DTURfVElNRU9VVF9NUzsKKwkJYnJlYWs7CisJfQorfQorCiAvKgogICogUmVxdWVzdCB0aGUgZGV2aWNlIGlkZW50aXR5IGluZm9ybWF0aW9uLgogICoKQEAgLTE1NzYsNyArMTM1Niw3IEBACiAJCQkJc2l6ZW9mKHUxNikgKiBBVEFfSURfV09SRFMsCiAJCQkJMCwKIAkJCQlHRlBfS0VSTkVMLAotCQkJCU1USVBfSU5URVJOQUxfQ09NTUFORF9USU1FT1VUX01TKQorCQkJCU1USVBfSU5UX0NNRF9USU1FT1VUX01TKQogCQkJCTwgMCkgewogCQlydiA9IC0xOwogCQlnb3RvIG91dDsKQEAgLTE2NDQsNiArMTQyNCw3IEBACiAJaW50IHJ2OwogCXN0cnVjdCBob3N0X3RvX2Rldl9maXMJZmlzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAKIAkvKiBCdWlsZCB0aGUgRklTLiAqLwogCW1lbXNldCgmZmlzLCAwLCBzaXplb2Yoc3RydWN0IGhvc3RfdG9fZGV2X2ZpcykpOwpAQCAtMTY1MSw2ICsxNDMyLDggQEAKIAlmaXMub3B0cwk9IDEgPDwgNzsKIAlmaXMuY29tbWFuZAk9IEFUQV9DTURfU1RBTkRCWU5PVzE7CiAKKwltdGlwX3NldF90aW1lb3V0KHBvcnQtPmRkLCAmZmlzLCAmdGltZW91dCwgMCk7CisKIAlzdGFydCA9IGppZmZpZXM7CiAJcnYgPSBtdGlwX2V4ZWNfaW50ZXJuYWxfY29tbWFuZChwb3J0LAogCQkJCQkmZmlzLApAQCAtMTY1OSw3ICsxNDQyLDcgQEAKIAkJCQkJMCwKIAkJCQkJMCwKIAkJCQkJR0ZQX0FUT01JQywKLQkJCQkJMTUwMDApOworCQkJCQl0aW1lb3V0KTsKIAlkYmdfcHJpbnRrKE1USVBfRFJWX05BTUUgIlRpbWUgdGFrZW4gdG8gY29tcGxldGUgc3RhbmRieSBjbWQ6ICVkIG1zXG4iLAogCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnQpKTsKIAlpZiAocnYpCkBAIC0xNzA1LDcgKzE0ODgsNyBAQAogCQkJCQlzZWN0b3JzICogQVRBX1NFQ1RfU0laRSwKIAkJCQkJMCwKIAkJCQkJR0ZQX0FUT01JQywKLQkJCQkJTVRJUF9JTlRFUk5BTF9DT01NQU5EX1RJTUVPVVRfTVMpOworCQkJCQlNVElQX0lOVF9DTURfVElNRU9VVF9NUyk7CiB9CiAKIC8qCkBAIC0xOTk4LDYgKzE3ODEsNyBAQAogewogCXN0cnVjdCBob3N0X3RvX2Rldl9maXMJZmlzOwogCXN0cnVjdCBob3N0X3RvX2Rldl9maXMgKnJlcGx5ID0gKHBvcnQtPnJ4ZmlzICsgUlhfRklTX0QySF9SRUcpOworCXVuc2lnbmVkIGludCB0bzsKIAogCS8qIEJ1aWxkIHRoZSBGSVMuICovCiAJbWVtc2V0KCZmaXMsIDAsIHNpemVvZihzdHJ1Y3QgaG9zdF90b19kZXZfZmlzKSk7CkBAIC0yMDExLDYgKzE3OTUsOCBAQAogCWZpcy5jeWxfaGkJPSBjb21tYW5kWzVdOwogCWZpcy5kZXZpY2UJPSBjb21tYW5kWzZdICYgfjB4MTA7IC8qIENsZWFyIHRoZSBkZXYgYml0Ki8KIAorCW10aXBfc2V0X3RpbWVvdXQocG9ydC0+ZGQsICZmaXMsICZ0bywgMCk7CisKIAlkYmdfcHJpbnRrKE1USVBfRFJWX05BTUUgIiAlczogVXNlciBDb21tYW5kOiBjbWQgJXgsIGZlYXQgJXgsIG5zZWN0ICV4LCBzZWN0ICV4LCBsY3lsICV4LCBoY3lsICV4LCBzZWwgJXhcbiIsCiAJCV9fZnVuY19fLAogCQljb21tYW5kWzBdLApAQCAtMjAyOSw3ICsxODE1LDcgQEAKIAkJCQkgMCwKIAkJCQkgMCwKIAkJCQkgR0ZQX0tFUk5FTCwKLQkJCQkgTVRJUF9JT0NUTF9DT01NQU5EX1RJTUVPVVRfTVMpIDwgMCkgeworCQkJCSB0bykgPCAwKSB7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTIwNjksNiArMTg1NSw3IEBACiAJdTggKmJ1ZiA9IE5VTEw7CiAJZG1hX2FkZHJfdCBkbWFfYWRkciA9IDA7CiAJaW50IHJ2ID0gMCwgeGZlcl9zeiA9IGNvbW1hbmRbM107CisJdW5zaWduZWQgaW50IHRvOwogCiAJaWYgKHhmZXJfc3opIHsKIAkJaWYgKCF1c2VyX2J1ZmZlcikKQEAgLTIxMDAsNiArMTg4Nyw4IEBACiAJCWZpcy5jeWxfaGkJPSAweEMyOwogCX0KIAorCW10aXBfc2V0X3RpbWVvdXQocG9ydC0+ZGQsICZmaXMsICZ0bywgMCk7CisKIAlpZiAoeGZlcl9zeikKIAkJcmVwbHkgPSAocG9ydC0+cnhmaXMgKyBSWF9GSVNfUElPX1NFVFVQKTsKIAllbHNlCkBAIC0yMTIyLDcgKzE5MTEsNyBAQAogCQkJCSAoeGZlcl9zeiA/IEFUQV9TRUNUX1NJWkUgKiB4ZmVyX3N6IDogMCksCiAJCQkJIDAsCiAJCQkJIEdGUF9LRVJORUwsCi0JCQkJIE1USVBfSU9DVExfQ09NTUFORF9USU1FT1VUX01TKQorCQkJCSB0bykKIAkJCQkgPCAwKSB7CiAJCXJ2ID0gLUVGQVVMVDsKIAkJZ290byBleGl0X2RyaXZlX2NvbW1hbmQ7CkBAIC0yMjAyLDM2ICsxOTkxLDYgQEAKIAl9CiAJcmV0dXJuIHJ2OwogfQotc3RhdGljIHZvaWQgbXRpcF9zZXRfdGltZW91dChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkLAotCQkJCQlzdHJ1Y3QgaG9zdF90b19kZXZfZmlzICpmaXMsCi0JCQkJCXVuc2lnbmVkIGludCAqdGltZW91dCwgdTggZXJhc2Vtb2RlKQotewotCXN3aXRjaCAoZmlzLT5jb21tYW5kKSB7Ci0JY2FzZSBBVEFfQ01EX0RPV05MT0FEX01JQ1JPOgotCQkqdGltZW91dCA9IDEyMDAwMDsgLyogMiBtaW51dGVzICovCi0JCWJyZWFrOwotCWNhc2UgQVRBX0NNRF9TRUNfRVJBU0VfVU5JVDoKLQljYXNlIDB4RkM6Ci0JCWlmIChlcmFzZW1vZGUpCi0JCQkqdGltZW91dCA9ICgoKihkZC0+cG9ydC0+aWRlbnRpZnkgKyA5MCkgKiAyKSAqIDYwMDAwKTsKLQkJZWxzZQotCQkJKnRpbWVvdXQgPSAoKCooZGQtPnBvcnQtPmlkZW50aWZ5ICsgODkpICogMikgKiA2MDAwMCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRBX0NNRF9TVEFOREJZTk9XMToKLQkJKnRpbWVvdXQgPSAxMjAwMDA7ICAvKiAyIG1pbnV0ZXMgKi8KLQkJYnJlYWs7Ci0JY2FzZSAweEY3OgotCWNhc2UgMHhGQToKLQkJKnRpbWVvdXQgPSA2MDAwMDsgIC8qIDYwIHNlY29uZHMgKi8KLQkJYnJlYWs7Ci0JY2FzZSBBVEFfQ01EX1NNQVJUOgotCQkqdGltZW91dCA9IDE1MDAwOyAgLyogMTUgc2Vjb25kcyAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqdGltZW91dCA9IE1USVBfSU9DVExfQ09NTUFORF9USU1FT1VUX01TOwotCQlicmVhazsKLQl9Ci19CiAKIC8qCiAgKiBFeGVjdXRlcyBhIHRhc2tmaWxlCkBAIC0yNjA2LDIyICsyMzY1LDIxIEBACiAgKiByZXR1cm4gdmFsdWUKICAqCU5vbmUKICAqLwotc3RhdGljIHZvaWQgbXRpcF9od19zdWJtaXRfaW8oc3RydWN0IGRyaXZlcl9kYXRhICpkZCwgc2VjdG9yX3Qgc2VjdG9yLAotCQkJICAgICAgaW50IG5zZWN0LCBpbnQgbmVudHMsIGludCB0YWcsIHZvaWQgKmNhbGxiYWNrLAotCQkJICAgICAgdm9pZCAqZGF0YSwgaW50IGRpciwgaW50IHVuYWxpZ25lZCkKK3N0YXRpYyB2b2lkIG10aXBfaHdfc3VibWl0X2lvKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCSAgICAgIHN0cnVjdCBtdGlwX2NtZCAqY29tbWFuZCwgaW50IG5lbnRzLAorCQkJICAgICAgc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCiB7CiAJc3RydWN0IGhvc3RfdG9fZGV2X2ZpcwkqZmlzOwogCXN0cnVjdCBtdGlwX3BvcnQgKnBvcnQgPSBkZC0+cG9ydDsKLQlzdHJ1Y3QgbXRpcF9jbWQgKmNvbW1hbmQgPSAmcG9ydC0+Y29tbWFuZHNbdGFnXTsKLQlpbnQgZG1hX2RpciA9IChkaXIgPT0gUkVBRCkgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFOwotCXU2NCBzdGFydCA9IHNlY3RvcjsKKwlpbnQgZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTsKKwl1NjQgc3RhcnQgPSBibGtfcnFfcG9zKHJxKTsKKwl1bnNpZ25lZCBpbnQgbnNlY3QgPSBibGtfcnFfc2VjdG9ycyhycSk7CiAKIAkvKiBNYXAgdGhlIHNjYXR0ZXIgbGlzdCBmb3IgRE1BIGFjY2VzcyAqLwogCW5lbnRzID0gZG1hX21hcF9zZygmZGQtPnBkZXYtPmRldiwgY29tbWFuZC0+c2csIG5lbnRzLCBkbWFfZGlyKTsKIAogCWNvbW1hbmQtPnNjYXR0ZXJfZW50cyA9IG5lbnRzOwogCi0JY29tbWFuZC0+dW5hbGlnbmVkID0gdW5hbGlnbmVkOwogCS8qCiAJICogVGhlIG51bWJlciBvZiByZXRyaWVzIGZvciB0aGlzIGNvbW1hbmQgYmVmb3JlIGl0IGlzCiAJICogcmVwb3J0ZWQgYXMgYSBmYWlsdXJlIHRvIHRoZSB1cHBlciBsYXllcnMuCkBAIC0yNjMyLDggKzIzOTAsMTAgQEAKIAlmaXMgPSBjb21tYW5kLT5jb21tYW5kOwogCWZpcy0+dHlwZSAgICAgICAgPSAweDI3OwogCWZpcy0+b3B0cyAgICAgICAgPSAxIDw8IDc7Ci0JZmlzLT5jb21tYW5kICAgICA9Ci0JCShkaXIgPT0gUkVBRCA/IEFUQV9DTURfRlBETUFfUkVBRCA6IEFUQV9DTURfRlBETUFfV1JJVEUpOworCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkKKwkJZmlzLT5jb21tYW5kID0gQVRBX0NNRF9GUERNQV9SRUFEOworCWVsc2UKKwkJZmlzLT5jb21tYW5kID0gQVRBX0NNRF9GUERNQV9XUklURTsKIAlmaXMtPmxiYV9sb3cgICAgID0gc3RhcnQgJiAweEZGOwogCWZpcy0+bGJhX21pZCAgICAgPSAoc3RhcnQgPj4gOCkgJiAweEZGOwogCWZpcy0+bGJhX2hpICAgICAgPSAoc3RhcnQgPj4gMTYpICYgMHhGRjsKQEAgLTI2NDMsMTQgKzI0MDMsMTQgQEAKIAlmaXMtPmRldmljZQkgPSAxIDw8IDY7CiAJZmlzLT5mZWF0dXJlcyAgICA9IG5zZWN0ICYgMHhGRjsKIAlmaXMtPmZlYXR1cmVzX2V4ID0gKG5zZWN0ID4+IDgpICYgMHhGRjsKLQlmaXMtPnNlY3RfY291bnQgID0gKCh0YWcgPDwgMykgfCAodGFnID4+IDUpKTsKKwlmaXMtPnNlY3RfY291bnQgID0gKChycS0+dGFnIDw8IDMpIHwgKHJxLT50YWcgPj4gNSkpOwogCWZpcy0+c2VjdF9jbnRfZXggPSAwOwogCWZpcy0+Y29udHJvbCAgICAgPSAwOwogCWZpcy0+cmVzMiAgICAgICAgPSAwOwogCWZpcy0+cmVzMyAgICAgICAgPSAwOwogCWZpbGxfY29tbWFuZF9zZyhkZCwgY29tbWFuZCwgbmVudHMpOwogCi0JaWYgKHVuYWxpZ25lZCkKKwlpZiAoY29tbWFuZC0+dW5hbGlnbmVkKQogCQlmaXMtPmRldmljZSB8PSAxIDw8IDc7CiAKIAkvKiBQb3B1bGF0ZSB0aGUgY29tbWFuZCBoZWFkZXIgKi8KQEAgLTI2NjgsODEgKzI0MjgsMTcgQEAKIAljb21tYW5kLT5kaXJlY3Rpb24gPSBkbWFfZGlyOwogCiAJLyoKLQkgKiBTZXQgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gYW5kIGRhdGEgZm9yIHRoZSBjb21tYW5kIHBhc3NlZAotCSAqIGZyb20gdGhlIHVwcGVyIGxheWVyLgotCSAqLwotCWNvbW1hbmQtPmFzeW5jX2RhdGEgPSBkYXRhOwotCWNvbW1hbmQtPmFzeW5jX2NhbGxiYWNrID0gY2FsbGJhY2s7Ci0KLQkvKgogCSAqIFRvIHByZXZlbnQgdGhpcyBjb21tYW5kIGZyb20gYmVpbmcgaXNzdWVkCiAJICogaWYgYW4gaW50ZXJuYWwgY29tbWFuZCBpcyBpbiBwcm9ncmVzcyBvciBlcnJvciBoYW5kbGluZyBpcyBhY3RpdmUuCiAJICovCiAJaWYgKHBvcnQtPmZsYWdzICYgTVRJUF9QRl9QQVVTRV9JTykgewotCQlzZXRfYml0KHRhZywgcG9ydC0+Y21kc190b19pc3N1ZSk7CisJCXNldF9iaXQocnEtPnRhZywgcG9ydC0+Y21kc190b19pc3N1ZSk7CiAJCXNldF9iaXQoTVRJUF9QRl9JU1NVRV9DTURTX0JJVCwgJnBvcnQtPmZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIElzc3VlIHRoZSBjb21tYW5kIHRvIHRoZSBoYXJkd2FyZSAqLwotCW10aXBfaXNzdWVfbmNxX2NvbW1hbmQocG9ydCwgdGFnKTsKLQotCXJldHVybjsKLX0KLQotLyoKLSAqIFJlbGVhc2UgYSBjb21tYW5kIHNsb3QuCi0gKgotICogQGRkICBQb2ludGVyIHRvIHRoZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuCi0gKiBAdGFnIFNsb3QgdGFnCi0gKgotICogcmV0dXJuIHZhbHVlCi0gKiAgICAgIE5vbmUKLSAqLwotc3RhdGljIHZvaWQgbXRpcF9od19yZWxlYXNlX3NjYXR0ZXJsaXN0KHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQsIGludCB0YWcsCi0JCQkJCQkJCWludCB1bmFsaWduZWQpCi17Ci0Jc3RydWN0IHNlbWFwaG9yZSAqc2VtID0gdW5hbGlnbmVkID8gJmRkLT5wb3J0LT5jbWRfc2xvdF91bmFsIDoKLQkJCQkJCQkmZGQtPnBvcnQtPmNtZF9zbG90OwotCXJlbGVhc2Vfc2xvdChkZC0+cG9ydCwgdGFnKTsKLQl1cChzZW0pOwotfQotCi0vKgotICogT2J0YWluIGEgY29tbWFuZCBzbG90IGFuZCByZXR1cm4gaXRzIGFzc29jaWF0ZWQgc2NhdHRlciBsaXN0LgotICoKLSAqIEBkZCAgUG9pbnRlciB0byB0aGUgZHJpdmVyIGRhdGEgc3RydWN0dXJlLgotICogQHRhZyBQb2ludGVyIHRvIGFuIGludCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgYWxsb2NhdGVkIGNvbW1hbmQKLSAqICAgICAgICAgICAgc2xvdCB0YWcuCi0gKgotICogcmV0dXJuIHZhbHVlCi0gKglQb2ludGVyIHRvIHRoZSBzY2F0dGVyIGxpc3QgZm9yIHRoZSBhbGxvY2F0ZWQgY29tbWFuZCBzbG90Ci0gKglvciBOVUxMIGlmIG5vIGNvbW1hbmQgc2xvdHMgYXJlIGF2YWlsYWJsZS4KLSAqLwotc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqbXRpcF9od19nZXRfc2NhdHRlcmxpc3Qoc3RydWN0IGRyaXZlcl9kYXRhICpkZCwKLQkJCQkJCSAgIGludCAqdGFnLCBpbnQgdW5hbGlnbmVkKQotewotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbSA9IHVuYWxpZ25lZCA/ICZkZC0+cG9ydC0+Y21kX3Nsb3RfdW5hbCA6Ci0JCQkJCQkJJmRkLT5wb3J0LT5jbWRfc2xvdDsKLQotCS8qCi0JICogSXQgaXMgcG9zc2libGUgdGhhdCwgZXZlbiB3aXRoIHRoaXMgc2VtYXBob3JlLCBhIHRocmVhZAotCSAqIG1heSB0aGluayB0aGF0IG5vIGNvbW1hbmQgc2xvdHMgYXJlIGF2YWlsYWJsZS4gVGhlcmVmb3JlLCB3ZQotCSAqIG5lZWQgdG8gbWFrZSBhbiBhdHRlbXB0IHRvIGdldF9zbG90KCkuCi0JICovCi0JZG93bihzZW0pOwotCSp0YWcgPSBnZXRfc2xvdChkZC0+cG9ydCk7Ci0KLQlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRJUF9EREZfUkVNT1ZFX1BFTkRJTkdfQklULCAmZGQtPmRkX2ZsYWcpKSkgewotCQl1cChzZW0pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKHVubGlrZWx5KCp0YWcgPCAwKSkgewotCQl1cChzZW0pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gZGQtPnBvcnQtPmNvbW1hbmRzWyp0YWddLnNnOworCW10aXBfaXNzdWVfbmNxX2NvbW1hbmQocG9ydCwgcnEtPnRhZyk7CiB9CiAKIC8qCkBAIC0zMTEzLDYgKzI4MDksNyBAQAogCQlpZiAoZGQtPnF1ZXVlKSB7CiAJCQlkZC0+cXVldWUtPnF1ZXVlZGF0YSA9IE5VTEw7CiAJCQlibGtfY2xlYW51cF9xdWV1ZShkZC0+cXVldWUpOworCQkJYmxrX21xX2ZyZWVfdGFnX3NldCgmZGQtPnRhZ3MpOwogCQkJZGQtPnF1ZXVlID0gTlVMTDsKIAkJfQogCX0KQEAgLTMyNzAsNiArMjk2NywxMSBAQAogCWludCByZXQ7CiAKIAl3aGlsZSAoMSkgeworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8CisJCQl0ZXN0X2JpdChNVElQX1BGX1NWQ19USERfU1RPUF9CSVQsICZwb3J0LT5mbGFncykpCisJCQlnb3RvIHN0X291dDsKKwkJY2xlYXJfYml0KE1USVBfUEZfU1ZDX1RIRF9BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpOworCiAJCS8qCiAJCSAqIHRoZSBjb25kaXRpb24gaXMgdG8gY2hlY2sgbmVpdGhlciBhbiBpbnRlcm5hbCBjb21tYW5kIGlzCiAJCSAqIGlzIGluIHByb2dyZXNzIG5vciBlcnJvciBoYW5kbGluZyBpcyBhY3RpdmUKQEAgLTMyNzcsMTEgKzI5NzksMTIgQEAKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnQtPnN2Y193YWl0LCAocG9ydC0+ZmxhZ3MpICYmCiAJCQkhKHBvcnQtPmZsYWdzICYgTVRJUF9QRl9QQVVTRV9JTykpOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlnb3RvIHN0X291dDsKLQogCQlzZXRfYml0KE1USVBfUEZfU1ZDX1RIRF9BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpOwogCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwKKwkJCXRlc3RfYml0KE1USVBfUEZfU1ZDX1RIRF9TVE9QX0JJVCwgJnBvcnQtPmZsYWdzKSkKKwkJCWdvdG8gc3Rfb3V0OworCiAJCS8qIElmIEkgYW0gYW4gb3JwaGFuLCBzdGFydCBzZWxmIGNsZWFudXAgKi8KIAkJaWYgKHRlc3RfYml0KE1USVBfUEZfU1JfQ0xFQU5VUF9CSVQsICZwb3J0LT5mbGFncykpCiAJCQlicmVhazsKQEAgLTMyOTAsNiArMjk5MywxNiBAQAogCQkJCSZkZC0+ZGRfZmxhZykpKQogCQkJZ290byBzdF9vdXQ7CiAKK3Jlc3RhcnRfZWg6CisJCS8qIERlbXV4IGJpdHM6IHN0YXJ0IHdpdGggZXJyb3IgaGFuZGxpbmcgKi8KKwkJaWYgKHRlc3RfYml0KE1USVBfUEZfRUhfQUNUSVZFX0JJVCwgJnBvcnQtPmZsYWdzKSkgeworCQkJbXRpcF9oYW5kbGVfdGZlKGRkKTsKKwkJCWNsZWFyX2JpdChNVElQX1BGX0VIX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncyk7CisJCX0KKworCQlpZiAodGVzdF9iaXQoTVRJUF9QRl9FSF9BQ1RJVkVfQklULCAmcG9ydC0+ZmxhZ3MpKQorCQkJZ290byByZXN0YXJ0X2VoOworCiAJCWlmICh0ZXN0X2JpdChNVElQX1BGX0lTU1VFX0NNRFNfQklULCAmcG9ydC0+ZmxhZ3MpKSB7CiAJCQlzbG90ID0gMTsKIAkJCS8qIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGxvb3AgdG8gb25lIGl0ZXJhdGlvbiAqLwpAQCAtMzMxOSwxNiArMzAzMiwxNCBAQAogCQkJfQogCiAJCQljbGVhcl9iaXQoTVRJUF9QRl9JU1NVRV9DTURTX0JJVCwgJnBvcnQtPmZsYWdzKTsKLQkJfSBlbHNlIGlmICh0ZXN0X2JpdChNVElQX1BGX1JFQlVJTERfQklULCAmcG9ydC0+ZmxhZ3MpKSB7CisJCX0KKworCQlpZiAodGVzdF9iaXQoTVRJUF9QRl9SRUJVSUxEX0JJVCwgJnBvcnQtPmZsYWdzKSkgewogCQkJaWYgKG10aXBfZnRsX3JlYnVpbGRfcG9sbChkZCkgPCAwKQogCQkJCXNldF9iaXQoTVRJUF9EREZfUkVCVUlMRF9GQUlMRURfQklULAogCQkJCQkJCSZkZC0+ZGRfZmxhZyk7CiAJCQljbGVhcl9iaXQoTVRJUF9QRl9SRUJVSUxEX0JJVCwgJnBvcnQtPmZsYWdzKTsKIAkJfQotCQljbGVhcl9iaXQoTVRJUF9QRl9TVkNfVEhEX0FDVElWRV9CSVQsICZwb3J0LT5mbGFncyk7Ci0KLQkJaWYgKHRlc3RfYml0KE1USVBfUEZfU1ZDX1RIRF9TVE9QX0JJVCwgJnBvcnQtPmZsYWdzKSkKLQkJCWdvdG8gc3Rfb3V0OwogCX0KIAogCS8qIHdhaXQgZm9yIHBjaSByZW1vdmUgdG8gZXhpdCAqLwpAQCAtMzM2NSw3ICszMDc2LDYgQEAKICAqLwogc3RhdGljIHZvaWQgbXRpcF9kbWFfZnJlZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkKQogewotCWludCBpOwogCXN0cnVjdCBtdGlwX3BvcnQgKnBvcnQgPSBkZC0+cG9ydDsKIAogCWlmIChwb3J0LT5ibG9jazEpCkBAIC0zMzc2LDEzICszMDg2LDYgQEAKIAkJZG1hbV9mcmVlX2NvaGVyZW50KCZkZC0+cGRldi0+ZGV2LCBBSENJX0NNRF9UQkxfU1osCiAJCQkJcG9ydC0+Y29tbWFuZF9saXN0LCBwb3J0LT5jb21tYW5kX2xpc3RfZG1hKTsKIAl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTVRJUF9NQVhfQ09NTUFORF9TTE9UUzsgaSsrKSB7Ci0JCWlmIChwb3J0LT5jb21tYW5kc1tpXS5jb21tYW5kKQotCQkJZG1hbV9mcmVlX2NvaGVyZW50KCZkZC0+cGRldi0+ZGV2LCBDTURfRE1BX0FMTE9DX1NaLAotCQkJCXBvcnQtPmNvbW1hbmRzW2ldLmNvbW1hbmQsCi0JCQkJcG9ydC0+Y29tbWFuZHNbaV0uY29tbWFuZF9kbWEpOwotCX0KIH0KIAogLyoKQEAgLTMzOTYsOCArMzA5OSw2IEBACiBzdGF0aWMgaW50IG10aXBfZG1hX2FsbG9jKHN0cnVjdCBkcml2ZXJfZGF0YSAqZGQpCiB7CiAJc3RydWN0IG10aXBfcG9ydCAqcG9ydCA9IGRkLT5wb3J0OwotCWludCBpLCBydiA9IDA7Ci0JdTMyIGhvc3RfY2FwXzY0ID0gcmVhZGwoZGQtPm1taW8gKyBIT1NUX0NBUCkgJiBIT1NUX0NBUF82NDsKIAogCS8qIEFsbG9jYXRlIGRtYSBtZW1vcnkgZm9yIFJYIEZpcywgSWRlbnRpZnksIGFuZCBTZWN0b3IgQnVmZmZlciAqLwogCXBvcnQtPmJsb2NrMSA9CkBAIC0zNDMwLDQzICszMTMxLDY1IEBACiAJcG9ydC0+c21hcnRfYnVmICAgICA9IHBvcnQtPmJsb2NrMSArIEFIQ0lfU01BUlRCVUZfT0ZGU0VUOwogCXBvcnQtPnNtYXJ0X2J1Zl9kbWEgPSBwb3J0LT5ibG9jazFfZG1hICsgQUhDSV9TTUFSVEJVRl9PRkZTRVQ7CiAKLQkvKiBTZXR1cCBwZXIgY29tbWFuZCBTR0wgRE1BIHJlZ2lvbiAqLwotCi0JLyogUG9pbnQgdGhlIGNvbW1hbmQgaGVhZGVycyBhdCB0aGUgY29tbWFuZCB0YWJsZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVRJUF9NQVhfQ09NTUFORF9TTE9UUzsgaSsrKSB7Ci0JCXBvcnQtPmNvbW1hbmRzW2ldLmNvbW1hbmQgPQotCQkJZG1hbV9hbGxvY19jb2hlcmVudCgmZGQtPnBkZXYtPmRldiwgQ01EX0RNQV9BTExPQ19TWiwKLQkJCQkmcG9ydC0+Y29tbWFuZHNbaV0uY29tbWFuZF9kbWEsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBvcnQtPmNvbW1hbmRzW2ldLmNvbW1hbmQpIHsKLQkJCXJ2ID0gLUVOT01FTTsKLQkJCW10aXBfZG1hX2ZyZWUoZGQpOwotCQkJcmV0dXJuIHJ2OwotCQl9Ci0JCW1lbXNldChwb3J0LT5jb21tYW5kc1tpXS5jb21tYW5kLCAwLCBDTURfRE1BX0FMTE9DX1NaKTsKLQotCQlwb3J0LT5jb21tYW5kc1tpXS5jb21tYW5kX2hlYWRlciA9IHBvcnQtPmNvbW1hbmRfbGlzdCArCi0JCQkJCShzaXplb2Yoc3RydWN0IG10aXBfY21kX2hkcikgKiBpKTsKLQkJcG9ydC0+Y29tbWFuZHNbaV0uY29tbWFuZF9oZWFkZXJfZG1hID0KLQkJCQkJZGQtPnBvcnQtPmNvbW1hbmRfbGlzdF9kbWEgKwotCQkJCQkoc2l6ZW9mKHN0cnVjdCBtdGlwX2NtZF9oZHIpICogaSk7Ci0KLQkJaWYgKGhvc3RfY2FwXzY0KQotCQkJcG9ydC0+Y29tbWFuZHNbaV0uY29tbWFuZF9oZWFkZXItPmN0YmF1ID0KLQkJCQlfX2ZvcmNlX2JpdDJpbnQgY3B1X3RvX2xlMzIoCi0JCQkJKHBvcnQtPmNvbW1hbmRzW2ldLmNvbW1hbmRfZG1hID4+IDE2KSA+PiAxNik7Ci0KLQkJcG9ydC0+Y29tbWFuZHNbaV0uY29tbWFuZF9oZWFkZXItPmN0YmEgPQotCQkJCV9fZm9yY2VfYml0MmludCBjcHVfdG9fbGUzMigKLQkJCQlwb3J0LT5jb21tYW5kc1tpXS5jb21tYW5kX2RtYSAmIDB4RkZGRkZGRkYpOwotCi0JCXNnX2luaXRfdGFibGUocG9ydC0+Y29tbWFuZHNbaV0uc2csIE1USVBfTUFYX1NHKTsKLQotCQkvKiBNYXJrIGNvbW1hbmQgYXMgY3VycmVudGx5IGluYWN0aXZlICovCi0JCWF0b21pY19zZXQoJmRkLT5wb3J0LT5jb21tYW5kc1tpXS5hY3RpdmUsIDApOwotCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdGlwX2h3X2dldF9pZGVudGlmeShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkKQoreworCXN0cnVjdCBzbWFydF9hdHRyIGF0dHIyNDI7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCBydjsKKworCWlmIChtdGlwX2dldF9pZGVudGlmeShkZC0+cG9ydCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICgqKGRkLT5wb3J0LT5pZGVudGlmeSArIE1USVBfRlRMX1JFQlVJTERfT0ZGU0VUKSA9PQorCQlNVElQX0ZUTF9SRUJVSUxEX01BR0lDKSB7CisJCXNldF9iaXQoTVRJUF9QRl9SRUJVSUxEX0JJVCwgJmRkLT5wb3J0LT5mbGFncyk7CisJCXJldHVybiBNVElQX0ZUTF9SRUJVSUxEX01BR0lDOworCX0KKwltdGlwX2R1bXBfaWRlbnRpZnkoZGQtPnBvcnQpOworCisJLyogY2hlY2sgd3JpdGUgcHJvdGVjdCwgb3ZlciB0ZW1wIGFuZCByZWJ1aWxkIHN0YXR1c2VzICovCisJcnYgPSBtdGlwX3JlYWRfbG9nX3BhZ2UoZGQtPnBvcnQsIEFUQV9MT0dfU0FUQV9OQ1EsCisJCQkJZGQtPnBvcnQtPmxvZ19idWYsCisJCQkJZGQtPnBvcnQtPmxvZ19idWZfZG1hLCAxKTsKKwlpZiAocnYpIHsKKwkJZGV2X3dhcm4oJmRkLT5wZGV2LT5kZXYsCisJCQkiRXJyb3IgaW4gUkVBRCBMT0cgRVhUICgxMGgpIGNvbW1hbmRcbiIpOworCQkvKiBub24tY3JpdGljYWwgZXJyb3IsIGRvbid0IGZhaWwgdGhlIGxvYWQgKi8KKwl9IGVsc2UgeworCQlidWYgPSAodW5zaWduZWQgY2hhciAqKWRkLT5wb3J0LT5sb2dfYnVmOworCQlpZiAoYnVmWzI1OV0gJiAweDEpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGRldi0+ZGV2LAorCQkJCSJXcml0ZSBwcm90ZWN0IGJpdCBpcyBzZXQuXG4iKTsKKwkJCXNldF9iaXQoTVRJUF9EREZfV1JJVEVfUFJPVEVDVF9CSVQsICZkZC0+ZGRfZmxhZyk7CisJCX0KKwkJaWYgKGJ1ZlsyODhdID09IDB4RjcpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGRldi0+ZGV2LAorCQkJCSJFeGNlZWRlZCBUbWF4LCBkcml2ZSBpbiB0aGVybWFsIHNodXRkb3duLlxuIik7CisJCQlzZXRfYml0KE1USVBfRERGX09WRVJfVEVNUF9CSVQsICZkZC0+ZGRfZmxhZyk7CisJCX0KKwkJaWYgKGJ1ZlsyODhdID09IDB4QkYpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGRldi0+ZGV2LAorCQkJCSJEcml2ZSBpbmRpY2F0ZXMgcmVidWlsZCBoYXMgZmFpbGVkLlxuIik7CisJCQkvKiBUT0RPICovCisJCX0KKwl9CisKKwkvKiBnZXQgd3JpdGUgcHJvdGVjdCBwcm9nZXNzICovCisJbWVtc2V0KCZhdHRyMjQyLCAwLCBzaXplb2Yoc3RydWN0IHNtYXJ0X2F0dHIpKTsKKwlpZiAobXRpcF9nZXRfc21hcnRfYXR0cihkZC0+cG9ydCwgMjQyLCAmYXR0cjI0MikpCisJCWRldl93YXJuKCZkZC0+cGRldi0+ZGV2LAorCQkJCSJVbmFibGUgdG8gY2hlY2sgd3JpdGUgcHJvdGVjdCBwcm9ncmVzc1xuIik7CisJZWxzZQorCQlkZXZfaW5mbygmZGQtPnBkZXYtPmRldiwKKwkJCQkiV3JpdGUgcHJvdGVjdCBwcm9ncmVzczogJXUlJSAoJXUgYmxvY2tzKVxuIiwKKwkJCQlhdHRyMjQyLmN1ciwgbGUzMl90b19jcHUoYXR0cjI0Mi5kYXRhKSk7CisKKwlyZXR1cm4gcnY7Cit9CisKIC8qCiAgKiBDYWxsZWQgb25jZSBmb3IgZWFjaCBjYXJkLgogICoKQEAgLTM0ODEsOCArMzIwNCw2IEBACiAJaW50IHJ2OwogCXVuc2lnbmVkIGludCBudW1fY29tbWFuZF9zbG90czsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHRpbWV0YWtlbjsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0Jc3RydWN0IHNtYXJ0X2F0dHIgYXR0cjI0MjsKIAogCWRkLT5tbWlvID0gcGNpbV9pb21hcF90YWJsZShkZC0+cGRldilbTVRJUF9BQkFSXTsKIApAQCAtMzUxMyw4ICszMjM0LDYgQEAKIAllbHNlCiAJCWRkLT51bmFsX3FkZXB0aCA9IDA7CiAKLQkvKiBDb3VudGluZyBzZW1hcGhvcmUgdG8gdHJhY2sgY29tbWFuZCBzbG90IHVzYWdlICovCi0Jc2VtYV9pbml0KCZkZC0+cG9ydC0+Y21kX3Nsb3QsIG51bV9jb21tYW5kX3Nsb3RzIC0gMSAtIGRkLT51bmFsX3FkZXB0aCk7CiAJc2VtYV9pbml0KCZkZC0+cG9ydC0+Y21kX3Nsb3RfdW5hbCwgZGQtPnVuYWxfcWRlcHRoKTsKIAogCS8qIFNwaW5sb2NrIHRvIHByZXZlbnQgY29uY3VycmVudCBpc3N1ZSAqLwpAQCAtMzU5OSw3MyArMzMxOCwxNiBAQAogCXdyaXRlbChyZWFkbChkZC0+bW1pbyArIEhPU1RfQ1RMKSB8IEhPU1RfSVJRX0VOLAogCQkJCQlkZC0+bW1pbyArIEhPU1RfQ1RMKTsKIAotCWluaXRfdGltZXIoJmRkLT5wb3J0LT5jbWRfdGltZXIpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRkLT5wb3J0LT5zdmNfd2FpdCk7CiAKLQlkZC0+cG9ydC0+Y21kX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyBpbnQpIGRkLT5wb3J0OwotCWRkLT5wb3J0LT5jbWRfdGltZXIuZnVuY3Rpb24gPSBtdGlwX3RpbWVvdXRfZnVuY3Rpb247Ci0JbW9kX3RpbWVyKCZkZC0+cG9ydC0+Y21kX3RpbWVyLAotCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhNVElQX1RJTUVPVVRfQ0hFQ0tfUEVSSU9EKSk7Ci0KLQogCWlmICh0ZXN0X2JpdChNVElQX0RERl9SRU1PVkVfUEVORElOR19CSVQsICZkZC0+ZGRfZmxhZykpIHsKIAkJcnYgPSAtRUZBVUxUOwogCQlnb3RvIG91dDM7CiAJfQogCi0JaWYgKG10aXBfZ2V0X2lkZW50aWZ5KGRkLT5wb3J0LCBOVUxMKSA8IDApIHsKLQkJcnYgPSAtRUZBVUxUOwotCQlnb3RvIG91dDM7Ci0JfQotCW10aXBfZHVtcF9pZGVudGlmeShkZC0+cG9ydCk7Ci0KLQlpZiAoKihkZC0+cG9ydC0+aWRlbnRpZnkgKyBNVElQX0ZUTF9SRUJVSUxEX09GRlNFVCkgPT0KLQkJTVRJUF9GVExfUkVCVUlMRF9NQUdJQykgewotCQlzZXRfYml0KE1USVBfUEZfUkVCVUlMRF9CSVQsICZkZC0+cG9ydC0+ZmxhZ3MpOwotCQlyZXR1cm4gTVRJUF9GVExfUkVCVUlMRF9NQUdJQzsKLQl9Ci0KLQkvKiBjaGVjayB3cml0ZSBwcm90ZWN0LCBvdmVyIHRlbXAgYW5kIHJlYnVpbGQgc3RhdHVzZXMgKi8KLQlydiA9IG10aXBfcmVhZF9sb2dfcGFnZShkZC0+cG9ydCwgQVRBX0xPR19TQVRBX05DUSwKLQkJCQlkZC0+cG9ydC0+bG9nX2J1ZiwKLQkJCQlkZC0+cG9ydC0+bG9nX2J1Zl9kbWEsIDEpOwotCWlmIChydikgewotCQlkZXZfd2FybigmZGQtPnBkZXYtPmRldiwKLQkJCSJFcnJvciBpbiBSRUFEIExPRyBFWFQgKDEwaCkgY29tbWFuZFxuIik7Ci0JCS8qIG5vbi1jcml0aWNhbCBlcnJvciwgZG9uJ3QgZmFpbCB0aGUgbG9hZCAqLwotCX0gZWxzZSB7Ci0JCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopZGQtPnBvcnQtPmxvZ19idWY7Ci0JCWlmIChidWZbMjU5XSAmIDB4MSkgewotCQkJZGV2X2luZm8oJmRkLT5wZGV2LT5kZXYsCi0JCQkJIldyaXRlIHByb3RlY3QgYml0IGlzIHNldC5cbiIpOwotCQkJc2V0X2JpdChNVElQX0RERl9XUklURV9QUk9URUNUX0JJVCwgJmRkLT5kZF9mbGFnKTsKLQkJfQotCQlpZiAoYnVmWzI4OF0gPT0gMHhGNykgewotCQkJZGV2X2luZm8oJmRkLT5wZGV2LT5kZXYsCi0JCQkJIkV4Y2VlZGVkIFRtYXgsIGRyaXZlIGluIHRoZXJtYWwgc2h1dGRvd24uXG4iKTsKLQkJCXNldF9iaXQoTVRJUF9EREZfT1ZFUl9URU1QX0JJVCwgJmRkLT5kZF9mbGFnKTsKLQkJfQotCQlpZiAoYnVmWzI4OF0gPT0gMHhCRikgewotCQkJZGV2X2luZm8oJmRkLT5wZGV2LT5kZXYsCi0JCQkJIkRyaXZlIGlzIGluIHNlY3VyaXR5IGxvY2tlZCBzdGF0ZS5cbiIpOwotCQkJc2V0X2JpdChNVElQX0RERl9TRUNfTE9DS19CSVQsICZkZC0+ZGRfZmxhZyk7Ci0JCX0KLQl9Ci0KLQkvKiBnZXQgd3JpdGUgcHJvdGVjdCBwcm9nZXNzICovCi0JbWVtc2V0KCZhdHRyMjQyLCAwLCBzaXplb2Yoc3RydWN0IHNtYXJ0X2F0dHIpKTsKLQlpZiAobXRpcF9nZXRfc21hcnRfYXR0cihkZC0+cG9ydCwgMjQyLCAmYXR0cjI0MikpCi0JCWRldl93YXJuKCZkZC0+cGRldi0+ZGV2LAotCQkJCSJVbmFibGUgdG8gY2hlY2sgd3JpdGUgcHJvdGVjdCBwcm9ncmVzc1xuIik7Ci0JZWxzZQotCQlkZXZfaW5mbygmZGQtPnBkZXYtPmRldiwKLQkJCQkiV3JpdGUgcHJvdGVjdCBwcm9ncmVzczogJXUlJSAoJXUgYmxvY2tzKVxuIiwKLQkJCQlhdHRyMjQyLmN1ciwgbGUzMl90b19jcHUoYXR0cjI0Mi5kYXRhKSk7CiAJcmV0dXJuIHJ2OwogCiBvdXQzOgotCWRlbF90aW1lcl9zeW5jKCZkZC0+cG9ydC0+Y21kX3RpbWVyKTsKLQogCS8qIERpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgSEJBLiAqLwogCXdyaXRlbChyZWFkbChkZC0+bW1pbyArIEhPU1RfQ1RMKSAmIH5IT1NUX0lSUV9FTiwKIAkJCWRkLT5tbWlvICsgSE9TVF9DVEwpOwpAQCAtMzY4NSw2ICszMzQ3LDIyIEBACiAJcmV0dXJuIHJ2OwogfQogCitzdGF0aWMgdm9pZCBtdGlwX3N0YW5kYnlfZHJpdmUoc3RydWN0IGRyaXZlcl9kYXRhICpkZCkKK3sKKwlpZiAoZGQtPnNyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNlbmQgc3RhbmRieSBpbW1lZGlhdGUgKEUwaCkgdG8gdGhlIGRyaXZlIHNvIHRoYXQgaXQKKwkgKiBzYXZlcyBpdHMgc3RhdGUuCisJICovCisJaWYgKCF0ZXN0X2JpdChNVElQX1BGX1JFQlVJTERfQklULCAmZGQtPnBvcnQtPmZsYWdzKSAmJgorCSAgICAhdGVzdF9iaXQoTVRJUF9EREZfU0VDX0xPQ0tfQklULCAmZGQtPmRkX2ZsYWcpKQorCQlpZiAobXRpcF9zdGFuZGJ5X2ltbWVkaWF0ZShkZC0+cG9ydCkpCisJCQlkZXZfd2FybigmZGQtPnBkZXYtPmRldiwKKwkJCQkiU1RBTkRCWSBJTU1FRElBVEUgZmFpbGVkXG4iKTsKK30KKwogLyoKICAqIENhbGxlZCB0byBkZWluaXRpYWxpemUgYW4gaW50ZXJmYWNlLgogICoKQEAgLTM3MDAsMTIgKzMzNzgsNiBAQAogCSAqIHNhdmVzIGl0cyBzdGF0ZS4KIAkgKi8KIAlpZiAoIWRkLT5zcikgewotCQlpZiAoIXRlc3RfYml0KE1USVBfUEZfUkVCVUlMRF9CSVQsICZkZC0+cG9ydC0+ZmxhZ3MpICYmCi0JCSAgICAhdGVzdF9iaXQoTVRJUF9EREZfU0VDX0xPQ0tfQklULCAmZGQtPmRkX2ZsYWcpKQotCQkJaWYgKG10aXBfc3RhbmRieV9pbW1lZGlhdGUoZGQtPnBvcnQpKQotCQkJCWRldl93YXJuKCZkZC0+cGRldi0+ZGV2LAotCQkJCQkiU1RBTkRCWSBJTU1FRElBVEUgZmFpbGVkXG4iKTsKLQogCQkvKiBkZS1pbml0aWFsaXplIHRoZSBwb3J0LiAqLwogCQltdGlwX2RlaW5pdF9wb3J0KGRkLT5wb3J0KTsKIApAQCAtMzcxNCw4ICszMzg2LDYgQEAKIAkJCQlkZC0+bW1pbyArIEhPU1RfQ1RMKTsKIAl9CiAKLQlkZWxfdGltZXJfc3luYygmZGQtPnBvcnQtPmNtZF90aW1lcik7Ci0KIAkvKiBSZWxlYXNlIHRoZSBJUlEuICovCiAJaXJxX3NldF9hZmZpbml0eV9oaW50KGRkLT5wZGV2LT5pcnEsIE5VTEwpOwogCWRldm1fZnJlZV9pcnEoJmRkLT5wZGV2LT5kZXYsIGRkLT5wZGV2LT5pcnEsIGRkKTsKQEAgLTQwMzIsMTAwICszNzAyLDEzOCBAQAogICoKICAqIEBxdWV1ZSBQb2ludGVyIHRvIHRoZSByZXF1ZXN0IHF1ZXVlLiBVbnVzZWQgb3RoZXIgdGhhbiB0byBvYnRhaW4KICAqICAgICAgICAgICAgICB0aGUgZHJpdmVyIGRhdGEgc3RydWN0dXJlLgotICogQGJpbyAgIFBvaW50ZXIgdG8gdGhlIEJJTy4KKyAqIEBycSAgICBQb2ludGVyIHRvIHRoZSByZXF1ZXN0LgogICoKICAqLwotc3RhdGljIHZvaWQgbXRpcF9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgaW50IG10aXBfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkID0gcXVldWUtPnF1ZXVlZGF0YTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXN0cnVjdCBiaW9fdmVjIGJ2ZWM7Ci0Jc3RydWN0IGJ2ZWNfaXRlciBpdGVyOwotCWludCBuZW50cyA9IDA7Ci0JaW50IHRhZyA9IDAsIHVuYWxpZ25lZCA9IDA7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkZCA9IGhjdHgtPnF1ZXVlLT5xdWV1ZWRhdGE7CisJc3RydWN0IG10aXBfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTsKKwl1bnNpZ25lZCBpbnQgbmVudHM7CiAKIAlpZiAodW5saWtlbHkoZGQtPmRkX2ZsYWcgJiBNVElQX0RERl9TVE9QX0lPKSkgewogCQlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRJUF9EREZfUkVNT1ZFX1BFTkRJTkdfQklULAogCQkJCQkJCSZkZC0+ZGRfZmxhZykpKSB7Ci0JCQliaW9fZW5kaW8oYmlvLCAtRU5YSU8pOwotCQkJcmV0dXJuOworCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCQlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRJUF9EREZfT1ZFUl9URU1QX0JJVCwgJmRkLT5kZF9mbGFnKSkpIHsKLQkJCWJpb19lbmRpbyhiaW8sIC1FTk9EQVRBKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAtRU5PREFUQTsKIAkJfQogCQlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRJUF9EREZfV1JJVEVfUFJPVEVDVF9CSVQsCiAJCQkJCQkJJmRkLT5kZF9mbGFnKSAmJgotCQkJCWJpb19kYXRhX2RpcihiaW8pKSkgewotCQkJYmlvX2VuZGlvKGJpbywgLUVOT0RBVEEpOwotCQkJcmV0dXJuOworCQkJCXJxX2RhdGFfZGlyKHJxKSkpIHsKKwkJCXJldHVybiAtRU5PREFUQTsKIAkJfQotCQlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRJUF9EREZfU0VDX0xPQ0tfQklULCAmZGQtPmRkX2ZsYWcpKSkgewotCQkJYmlvX2VuZGlvKGJpbywgLUVOT0RBVEEpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICh0ZXN0X2JpdChNVElQX0RERl9SRUJVSUxEX0ZBSUxFRF9CSVQsICZkZC0+ZGRfZmxhZykpIHsKLQkJCWJpb19lbmRpbyhiaW8sIC1FTlhJTyk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKHVubGlrZWx5KHRlc3RfYml0KE1USVBfRERGX1NFQ19MT0NLX0JJVCwgJmRkLT5kZF9mbGFnKSkpCisJCQlyZXR1cm4gLUVOT0RBVEE7CisJCWlmICh0ZXN0X2JpdChNVElQX0RERl9SRUJVSUxEX0ZBSUxFRF9CSVQsICZkZC0+ZGRfZmxhZykpCisJCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWlmICh1bmxpa2VseShiaW8tPmJpX3J3ICYgUkVRX0RJU0NBUkQpKSB7Ci0JCWJpb19lbmRpbyhiaW8sIG10aXBfc2VuZF90cmltKGRkLCBiaW8tPmJpX2l0ZXIuYmlfc2VjdG9yLAotCQkJCQkJYmlvX3NlY3RvcnMoYmlvKSkpOwotCQlyZXR1cm47CisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRElTQ0FSRCkgeworCQlpbnQgZXJyOworCisJCWVyciA9IG10aXBfc2VuZF90cmltKGRkLCBibGtfcnFfcG9zKHJxKSwgYmxrX3JxX3NlY3RvcnMocnEpKTsKKwkJYmxrX21xX2VuZF9pbyhycSwgZXJyKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHVubGlrZWx5KCFiaW9faGFzX2RhdGEoYmlvKSkpIHsKLQkJYmxrX3F1ZXVlX2ZsdXNoKHF1ZXVlLCAwKTsKLQkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JCXJldHVybjsKLQl9CisJLyogQ3JlYXRlIHRoZSBzY2F0dGVyIGxpc3QgZm9yIHRoaXMgcmVxdWVzdC4gKi8KKwluZW50cyA9IGJsa19ycV9tYXBfc2coaGN0eC0+cXVldWUsIHJxLCBjbWQtPnNnKTsKIAotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSAmJiBiaW9fc2VjdG9ycyhiaW8pIDw9IDY0ICYmCi0JCQkJCQkJZGQtPnVuYWxfcWRlcHRoKSB7Ci0JCWlmIChiaW8tPmJpX2l0ZXIuYmlfc2VjdG9yICUgOCAhPSAwKQotCQkJLyogVW5hbGlnbmVkIG9uIDRrIGJvdW5kYXJpZXMgKi8KLQkJCXVuYWxpZ25lZCA9IDE7Ci0JCWVsc2UgaWYgKGJpb19zZWN0b3JzKGJpbykgJSA4ICE9IDApIC8qIEFsaWduZWQgYnV0IG5vdCA0ay84ayAqLwotCQkJdW5hbGlnbmVkID0gMTsKLQl9Ci0KLQlzZyA9IG10aXBfaHdfZ2V0X3NjYXR0ZXJsaXN0KGRkLCAmdGFnLCB1bmFsaWduZWQpOwotCWlmIChsaWtlbHkoc2cgIT0gTlVMTCkpIHsKLQkJYmxrX3F1ZXVlX2JvdW5jZShxdWV1ZSwgJmJpbyk7Ci0KLQkJaWYgKHVubGlrZWx5KChiaW8pLT5iaV92Y250ID4gTVRJUF9NQVhfU0cpKSB7Ci0JCQlkZXZfd2FybigmZGQtPnBkZXYtPmRldiwKLQkJCQkiTWF4aW11bSBudW1iZXIgb2YgU0dMIGVudHJpZXMgZXhjZWVkZWRcbiIpOwotCQkJYmlvX2lvX2Vycm9yKGJpbyk7Ci0JCQltdGlwX2h3X3JlbGVhc2Vfc2NhdHRlcmxpc3QoZGQsIHRhZywgdW5hbGlnbmVkKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIENyZWF0ZSB0aGUgc2NhdHRlciBsaXN0IGZvciB0aGlzIGJpby4gKi8KLQkJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpdGVyKSB7Ci0JCQlzZ19zZXRfcGFnZSgmc2dbbmVudHNdLAotCQkJCQlidmVjLmJ2X3BhZ2UsCi0JCQkJCWJ2ZWMuYnZfbGVuLAotCQkJCQlidmVjLmJ2X29mZnNldCk7Ci0JCQluZW50cysrOwotCQl9Ci0KLQkJLyogSXNzdWUgdGhlIHJlYWQvd3JpdGUuICovCi0JCW10aXBfaHdfc3VibWl0X2lvKGRkLAotCQkJCWJpby0+YmlfaXRlci5iaV9zZWN0b3IsCi0JCQkJYmlvX3NlY3RvcnMoYmlvKSwKLQkJCQluZW50cywKLQkJCQl0YWcsCi0JCQkJYmlvX2VuZGlvLAotCQkJCWJpbywKLQkJCQliaW9fZGF0YV9kaXIoYmlvKSwKLQkJCQl1bmFsaWduZWQpOwotCX0gZWxzZQotCQliaW9faW9fZXJyb3IoYmlvKTsKKwkvKiBJc3N1ZSB0aGUgcmVhZC93cml0ZS4gKi8KKwltdGlwX2h3X3N1Ym1pdF9pbyhkZCwgcnEsIGNtZCwgbmVudHMsIGhjdHgpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbCBtdGlwX2NoZWNrX3VuYWxfZGVwdGgoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCisJCQkJICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkZCA9IGhjdHgtPnF1ZXVlLT5xdWV1ZWRhdGE7CisJc3RydWN0IG10aXBfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTsKKworCWlmICghZGQtPnVuYWxfcWRlcHRoIHx8IHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHVuYWxpZ25lZCBkZXB0aCBtdXN0IGJlIGxpbWl0ZWQgb24gdGhpcyBjb250cm9sbGVyLCBtYXJrIGl0CisJICogYXMgdW5hbGlnbmVkIGlmIHRoZSBJTyBpc24ndCBvbiBhIDRrIGJvdW5kYXJ5IChzdGFydCBvZiBsZW5ndGgpLgorCSAqLworCWlmIChibGtfcnFfc2VjdG9ycyhycSkgPD0gNjQpIHsKKwkJaWYgKChibGtfcnFfcG9zKHJxKSAmIDcpIHx8IChibGtfcnFfc2VjdG9ycyhycSkgJiA3KSkKKwkJCWNtZC0+dW5hbGlnbmVkID0gMTsKKwl9CisKKwlpZiAoY21kLT51bmFsaWduZWQgJiYgZG93bl90cnlsb2NrKCZkZC0+cG9ydC0+Y21kX3Nsb3RfdW5hbCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IG10aXBfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpbnQgcmV0OworCisJaWYgKG10aXBfY2hlY2tfdW5hbF9kZXB0aChoY3R4LCBycSkpCisJCXJldHVybiBCTEtfTVFfUlFfUVVFVUVfQlVTWTsKKworCXJldCA9IG10aXBfc3VibWl0X3JlcXVlc3QoaGN0eCwgcnEpOworCWlmICghcmV0KQorCQlyZXR1cm4gQkxLX01RX1JRX1FVRVVFX09LOworCisJcnEtPmVycm9ycyA9IHJldDsKKwlyZXR1cm4gQkxLX01RX1JRX1FVRVVFX0VSUk9SOworfQorCitzdGF0aWMgdm9pZCBtdGlwX2ZyZWVfY21kKHZvaWQgKmRhdGEsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCSAgdW5zaWduZWQgaW50IGhjdHhfaWR4LCB1bnNpZ25lZCBpbnQgcmVxdWVzdF9pZHgpCit7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkZCA9IGRhdGE7CisJc3RydWN0IG10aXBfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTsKKworCWlmICghY21kLT5jb21tYW5kKQorCQlyZXR1cm47CisKKwlkbWFtX2ZyZWVfY29oZXJlbnQoJmRkLT5wZGV2LT5kZXYsIENNRF9ETUFfQUxMT0NfU1osCisJCQkJY21kLT5jb21tYW5kLCBjbWQtPmNvbW1hbmRfZG1hKTsKK30KKworc3RhdGljIGludCBtdGlwX2luaXRfY21kKHZvaWQgKmRhdGEsIHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IGhjdHhfaWR4LAorCQkJIHVuc2lnbmVkIGludCByZXF1ZXN0X2lkeCwgdW5zaWduZWQgaW50IG51bWFfbm9kZSkKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkID0gZGF0YTsKKwlzdHJ1Y3QgbXRpcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpOworCXUzMiBob3N0X2NhcF82NCA9IHJlYWRsKGRkLT5tbWlvICsgSE9TVF9DQVApICYgSE9TVF9DQVBfNjQ7CisKKwljbWQtPmNvbW1hbmQgPSBkbWFtX2FsbG9jX2NvaGVyZW50KCZkZC0+cGRldi0+ZGV2LCBDTURfRE1BX0FMTE9DX1NaLAorCQkJJmNtZC0+Y29tbWFuZF9kbWEsIEdGUF9LRVJORUwpOworCWlmICghY21kLT5jb21tYW5kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChjbWQtPmNvbW1hbmQsIDAsIENNRF9ETUFfQUxMT0NfU1opOworCisJLyogUG9pbnQgdGhlIGNvbW1hbmQgaGVhZGVycyBhdCB0aGUgY29tbWFuZCB0YWJsZXMuICovCisJY21kLT5jb21tYW5kX2hlYWRlciA9IGRkLT5wb3J0LT5jb21tYW5kX2xpc3QgKworCQkJCShzaXplb2Yoc3RydWN0IG10aXBfY21kX2hkcikgKiByZXF1ZXN0X2lkeCk7CisJY21kLT5jb21tYW5kX2hlYWRlcl9kbWEgPSBkZC0+cG9ydC0+Y29tbWFuZF9saXN0X2RtYSArCisJCQkJKHNpemVvZihzdHJ1Y3QgbXRpcF9jbWRfaGRyKSAqIHJlcXVlc3RfaWR4KTsKKworCWlmIChob3N0X2NhcF82NCkKKwkJY21kLT5jb21tYW5kX2hlYWRlci0+Y3RiYXUgPSBfX2ZvcmNlX2JpdDJpbnQgY3B1X3RvX2xlMzIoKGNtZC0+Y29tbWFuZF9kbWEgPj4gMTYpID4+IDE2KTsKKworCWNtZC0+Y29tbWFuZF9oZWFkZXItPmN0YmEgPSBfX2ZvcmNlX2JpdDJpbnQgY3B1X3RvX2xlMzIoY21kLT5jb21tYW5kX2RtYSAmIDB4RkZGRkZGRkYpOworCisJc2dfaW5pdF90YWJsZShjbWQtPnNnLCBNVElQX01BWF9TRyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxrX21xX29wcyBtdGlwX21xX29wcyA9IHsKKwkucXVldWVfcnEJPSBtdGlwX3F1ZXVlX3JxLAorCS5tYXBfcXVldWUJPSBibGtfbXFfbWFwX3F1ZXVlLAorCS5pbml0X3JlcXVlc3QJPSBtdGlwX2luaXRfY21kLAorCS5leGl0X3JlcXVlc3QJPSBtdGlwX2ZyZWVfY21kLAorfTsKKwogLyoKICAqIEJsb2NrIGxheWVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgogICoKQEAgLTQxNDgsMTEgKzM4NTYsNyBAQAogCWlmIChkZC0+ZGlzaykKIAkJZ290byBza2lwX2NyZWF0ZV9kaXNrOyAvKiBodyBpbml0IGRvbmUsIGJlZm9yZSByZWJ1aWxkICovCiAKLQkvKiBJbml0aWFsaXplIHRoZSBwcm90b2NvbCBsYXllci4gKi8KLQl3YWl0X2Zvcl9yZWJ1aWxkID0gbXRpcF9od19pbml0KGRkKTsKLQlpZiAod2FpdF9mb3JfcmVidWlsZCA8IDApIHsKLQkJZGV2X2VycigmZGQtPnBkZXYtPmRldiwKLQkJCSJQcm90b2NvbCBsYXllciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCWlmIChtdGlwX2h3X2luaXQoZGQpKSB7CiAJCXJ2ID0gLUVJTlZBTDsKIAkJZ290byBwcm90b2NvbF9pbml0X2Vycm9yOwogCX0KQEAgLTQxOTQsMjkgKzM4OTgsNTMgQEAKIAogCW10aXBfaHdfZGVidWdmc19pbml0KGRkKTsKIAotCS8qCi0JICogaWYgcmVidWlsZCBwZW5kaW5nLCBzdGFydCB0aGUgc2VydmljZSB0aHJlYWQsIGFuZCBkZWxheSB0aGUgYmxvY2sKLQkgKiBxdWV1ZSBjcmVhdGlvbiBhbmQgYWRkX2Rpc2soKQotCSAqLwotCWlmICh3YWl0X2Zvcl9yZWJ1aWxkID09IE1USVBfRlRMX1JFQlVJTERfTUFHSUMpCi0JCWdvdG8gc3RhcnRfc2VydmljZV90aHJlYWQ7Ci0KIHNraXBfY3JlYXRlX2Rpc2s6Ci0JLyogQWxsb2NhdGUgdGhlIHJlcXVlc3QgcXVldWUuICovCi0JZGQtPnF1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlX25vZGUoR0ZQX0tFUk5FTCwgZGQtPm51bWFfbm9kZSk7Ci0JaWYgKGRkLT5xdWV1ZSA9PSBOVUxMKSB7CisJbWVtc2V0KCZkZC0+dGFncywgMCwgc2l6ZW9mKGRkLT50YWdzKSk7CisJZGQtPnRhZ3Mub3BzID0gJm10aXBfbXFfb3BzOworCWRkLT50YWdzLm5yX2h3X3F1ZXVlcyA9IDE7CisJZGQtPnRhZ3MucXVldWVfZGVwdGggPSBNVElQX01BWF9DT01NQU5EX1NMT1RTOworCWRkLT50YWdzLnJlc2VydmVkX3RhZ3MgPSAxOworCWRkLT50YWdzLmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBtdGlwX2NtZCk7CisJZGQtPnRhZ3MubnVtYV9ub2RlID0gZGQtPm51bWFfbm9kZTsKKwlkZC0+dGFncy5mbGFncyA9IEJMS19NUV9GX1NIT1VMRF9NRVJHRTsKKwlkZC0+dGFncy5kcml2ZXJfZGF0YSA9IGRkOworCisJcnYgPSBibGtfbXFfYWxsb2NfdGFnX3NldCgmZGQtPnRhZ3MpOworCWlmIChydikgewogCQlkZXZfZXJyKCZkZC0+cGRldi0+ZGV2LAogCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSByZXF1ZXN0IHF1ZXVlXG4iKTsKIAkJcnYgPSAtRU5PTUVNOwogCQlnb3RvIGJsb2NrX3F1ZXVlX2FsbG9jX2luaXRfZXJyb3I7CiAJfQogCi0JLyogQXR0YWNoIG91ciByZXF1ZXN0IGZ1bmN0aW9uIHRvIHRoZSByZXF1ZXN0IHF1ZXVlLiAqLwotCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QoZGQtPnF1ZXVlLCBtdGlwX21ha2VfcmVxdWVzdCk7CisJLyogQWxsb2NhdGUgdGhlIHJlcXVlc3QgcXVldWUuICovCisJZGQtPnF1ZXVlID0gYmxrX21xX2luaXRfcXVldWUoJmRkLT50YWdzKTsKKwlpZiAoSVNfRVJSKGRkLT5xdWV1ZSkpIHsKKwkJZGV2X2VycigmZGQtPnBkZXYtPmRldiwKKwkJCSJVbmFibGUgdG8gYWxsb2NhdGUgcmVxdWVzdCBxdWV1ZVxuIik7CisJCXJ2ID0gLUVOT01FTTsKKwkJZ290byBibG9ja19xdWV1ZV9hbGxvY19pbml0X2Vycm9yOworCX0KIAogCWRkLT5kaXNrLT5xdWV1ZQkJPSBkZC0+cXVldWU7CiAJZGQtPnF1ZXVlLT5xdWV1ZWRhdGEJPSBkZDsKIAorCS8qIEluaXRpYWxpemUgdGhlIHByb3RvY29sIGxheWVyLiAqLworCXdhaXRfZm9yX3JlYnVpbGQgPSBtdGlwX2h3X2dldF9pZGVudGlmeShkZCk7CisJaWYgKHdhaXRfZm9yX3JlYnVpbGQgPCAwKSB7CisJCWRldl9lcnIoJmRkLT5wZGV2LT5kZXYsCisJCQkiUHJvdG9jb2wgbGF5ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJcnYgPSAtRUlOVkFMOworCQlnb3RvIGluaXRfaHdfY21kc19lcnJvcjsKKwl9CisKKwkvKgorCSAqIGlmIHJlYnVpbGQgcGVuZGluZywgc3RhcnQgdGhlIHNlcnZpY2UgdGhyZWFkLCBhbmQgZGVsYXkgdGhlIGJsb2NrCisJICogcXVldWUgY3JlYXRpb24gYW5kIGFkZF9kaXNrKCkKKwkgKi8KKwlpZiAod2FpdF9mb3JfcmVidWlsZCA9PSBNVElQX0ZUTF9SRUJVSUxEX01BR0lDKQorCQlnb3RvIHN0YXJ0X3NlcnZpY2VfdGhyZWFkOworCiAJLyogU2V0IGRldmljZSBsaW1pdHMuICovCiAJc2V0X2JpdChRVUVVRV9GTEFHX05PTlJPVCwgJmRkLT5xdWV1ZS0+cXVldWVfZmxhZ3MpOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoZGQtPnF1ZXVlLCBNVElQX01BWF9TRyk7CkBAIC00Mjk1LDggKzQwMjMsOSBAQAogCWRlbF9nZW5kaXNrKGRkLT5kaXNrKTsKIAogcmVhZF9jYXBhY2l0eV9lcnJvcjoKK2luaXRfaHdfY21kc19lcnJvcjoKIAlibGtfY2xlYW51cF9xdWV1ZShkZC0+cXVldWUpOwotCisJYmxrX21xX2ZyZWVfdGFnX3NldCgmZGQtPnRhZ3MpOwogYmxvY2tfcXVldWVfYWxsb2NfaW5pdF9lcnJvcjoKIAltdGlwX2h3X2RlYnVnZnNfZXhpdChkZCk7CiBkaXNrX2luZGV4X2Vycm9yOgpAQCAtNDM0NSw2ICs0MDc0LDkgQEAKIAkJCQlrb2JqZWN0X3B1dChrb2JqKTsKIAkJCX0KIAkJfQorCisJCW10aXBfc3RhbmRieV9kcml2ZShkZCk7CisKIAkJLyoKIAkJICogRGVsZXRlIG91ciBnZW5kaXNrIHN0cnVjdHVyZS4gVGhpcyBhbHNvIHJlbW92ZXMgdGhlIGRldmljZQogCQkgKiBmcm9tIC9kZXYKQEAgLTQzNTcsNiArNDA4OSw3IEBACiAJCQlpZiAoZGQtPmRpc2stPnF1ZXVlKSB7CiAJCQkJZGVsX2dlbmRpc2soZGQtPmRpc2spOwogCQkJCWJsa19jbGVhbnVwX3F1ZXVlKGRkLT5xdWV1ZSk7CisJCQkJYmxrX21xX2ZyZWVfdGFnX3NldCgmZGQtPnRhZ3MpOwogCQkJCWRkLT5xdWV1ZSA9IE5VTEw7CiAJCQl9IGVsc2UKIAkJCQlwdXRfZGlzayhkZC0+ZGlzayk7CkBAIC00MzkxLDYgKzQxMjQsOCBAQAogICovCiBzdGF0aWMgaW50IG10aXBfYmxvY2tfc2h1dGRvd24oc3RydWN0IGRyaXZlcl9kYXRhICpkZCkKIHsKKwltdGlwX2h3X3NodXRkb3duKGRkKTsKKwogCS8qIERlbGV0ZSBvdXIgZ2VuZGlzayBzdHJ1Y3R1cmUsIGFuZCBjbGVhbnVwIHRoZSBibGsgcXVldWUuICovCiAJaWYgKGRkLT5kaXNrKSB7CiAJCWRldl9pbmZvKCZkZC0+cGRldi0+ZGV2LApAQCAtNDM5OSw2ICs0MTM0LDcgQEAKIAkJaWYgKGRkLT5kaXNrLT5xdWV1ZSkgewogCQkJZGVsX2dlbmRpc2soZGQtPmRpc2spOwogCQkJYmxrX2NsZWFudXBfcXVldWUoZGQtPnF1ZXVlKTsKKwkJCWJsa19tcV9mcmVlX3RhZ19zZXQoJmRkLT50YWdzKTsKIAkJfSBlbHNlCiAJCQlwdXRfZGlzayhkZC0+ZGlzayk7CiAJCWRkLT5kaXNrICA9IE5VTEw7CkBAIC00NDA4LDggKzQxNDQsNiBAQAogCXNwaW5fbG9jaygmcnNzZF9pbmRleF9sb2NrKTsKIAlpZGFfcmVtb3ZlKCZyc3NkX2luZGV4X2lkYSwgZGQtPmluZGV4KTsKIAlzcGluX3VubG9jaygmcnNzZF9pbmRleF9sb2NrKTsKLQotCW10aXBfaHdfc2h1dGRvd24oZGQpOwogCXJldHVybiAwOwogfQogCkBAIC00NDc5LDYgKzQyMTMsNTcgQEAKIHN0YXRpYyBERUZJTkVfSEFORExFUig2KTsKIHN0YXRpYyBERUZJTkVfSEFORExFUig3KTsKIAorc3RhdGljIHZvaWQgbXRpcF9kaXNhYmxlX2xpbmtfb3B0cyhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcG9zOworCXVuc2lnbmVkIHNob3J0IHBjaWVfZGV2X2N0cmw7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAocG9zKSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsCisJCQlwb3MgKyBQQ0lfRVhQX0RFVkNUTCwKKwkJCSZwY2llX2Rldl9jdHJsKTsKKwkJaWYgKHBjaWVfZGV2X2N0cmwgJiAoMSA8PCAxMSkgfHwKKwkJICAgIHBjaWVfZGV2X2N0cmwgJiAoMSA8PCA0KSkgeworCQkJZGV2X2luZm8oJmRkLT5wZGV2LT5kZXYsCisJCQkJIkRpc2FibGluZyBFUk8vTm8tU25vb3Agb24gYnJpZGdlIGRldmljZSAlMDR4OiUwNHhcbiIsCisJCQkJCXBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlKTsKKwkJCXBjaWVfZGV2X2N0cmwgJj0gfihQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOIHwKKwkJCQkJCVBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOKTsKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LAorCQkJCXBvcyArIFBDSV9FWFBfREVWQ1RMLAorCQkJCXBjaWVfZGV2X2N0cmwpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGlwX2ZpeF9lcm9fbm9zbm9vcChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKgorCSAqIFRoaXMgd29ya2Fyb3VuZCBpcyBzcGVjaWZpYyB0byBBTUQvQVRJIGNoaXBzZXQgd2l0aCBhIFBDSSB1cHN0cmVhbQorCSAqIGRldmljZSB3aXRoIGRldmljZSBpZCAweDVhWFgKKwkgKi8KKwlpZiAocGRldi0+YnVzICYmIHBkZXYtPmJ1cy0+c2VsZikgeworCQlpZiAocGRldi0+YnVzLT5zZWxmLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkgJiYKKwkJICAgICgocGRldi0+YnVzLT5zZWxmLT5kZXZpY2UgJiAweGZmMDApID09IDB4NWEwMCkpIHsKKwkJCW10aXBfZGlzYWJsZV9saW5rX29wdHMoZGQsIHBkZXYtPmJ1cy0+c2VsZik7CisJCX0gZWxzZSB7CisJCQkvKiBDaGVjayBmdXJ0aGVyIHVwIHRoZSB0b3BvbG9neSAqLworCQkJc3RydWN0IHBjaV9kZXYgKnBhcmVudF9kZXYgPSBwZGV2LT5idXMtPnNlbGY7CisJCQlpZiAocGFyZW50X2Rldi0+YnVzICYmCisJCQkJcGFyZW50X2Rldi0+YnVzLT5wYXJlbnQgJiYKKwkJCQlwYXJlbnRfZGV2LT5idXMtPnBhcmVudC0+c2VsZiAmJgorCQkJCXBhcmVudF9kZXYtPmJ1cy0+cGFyZW50LT5zZWxmLT52ZW5kb3IgPT0KKwkJCQkJIFBDSV9WRU5ET1JfSURfQVRJICYmCisJCQkJKHBhcmVudF9kZXYtPmJ1cy0+cGFyZW50LT5zZWxmLT5kZXZpY2UgJgorCQkJCQkweGZmMDApID09IDB4NWEwMCkgeworCQkJCW10aXBfZGlzYWJsZV9saW5rX29wdHMoZGQsCisJCQkJCXBhcmVudF9kZXYtPmJ1cy0+cGFyZW50LT5zZWxmKTsKKwkJCX0KKwkJfQorCX0KK30KKwogLyoKICAqIENhbGxlZCBmb3IgZWFjaCBzdXBwb3J0ZWQgUENJIGRldmljZSBkZXRlY3RlZC4KICAqCkBAIC00NjMwLDYgKzQ0MTUsOCBAQAogCQlnb3RvIG1zaV9pbml0aWFsaXplX2VycjsKIAl9CiAKKwltdGlwX2ZpeF9lcm9fbm9zbm9vcChkZCwgcGRldik7CisKIAkvKiBJbml0aWFsaXplIHRoZSBibG9jayBsYXllci4gKi8KIAlydiA9IG10aXBfYmxvY2tfaW5pdGlhbGl6ZShkZCk7CiAJaWYgKHJ2IDwgMCkgewpAQCAtNDcxMCw4ICs0NDk3LDYgQEAKIAkJZGV2X3dhcm4oJmRkLT5wZGV2LT5kZXYsCiAJCQkiQ29tcGxldGlvbiB3b3JrZXJzIHN0aWxsIGFjdGl2ZSFcbiIpOwogCX0KLQkvKiBDbGVhbnVwIHRoZSBvdXRzdGFuZGluZyBjb21tYW5kcyAqLwotCW10aXBfY29tbWFuZF9jbGVhbnVwKGRkKTsKIAogCS8qIENsZWFuIHVwIHRoZSBibG9jayBsYXllci4gKi8KIAltdGlwX2Jsb2NrX3JlbW92ZShkZCk7CkBAIC00NzM3LDggKzQ1MjIsNiBAQAogCiAJcGNpbV9pb3VubWFwX3JlZ2lvbnMocGRldiwgMSA8PCBNVElQX0FCQVIpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlwY2lfZGV2X3B1dChwZGV2KTsKLQogfQogCiAvKgpAQCAtNDkzNSwxMyArNDcxOCwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXRpcF9leGl0KHZvaWQpCiB7Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRmc19wYXJlbnQpOwotCiAJLyogUmVsZWFzZSB0aGUgYWxsb2NhdGVkIG1ham9yIGJsb2NrIGRldmljZSBudW1iZXIuICovCiAJdW5yZWdpc3Rlcl9ibGtkZXYobXRpcF9tYWpvciwgTVRJUF9EUlZfTkFNRSk7CiAKIAkvKiBVbnJlZ2lzdGVyIHRoZSBQQ0kgZHJpdmVyLiAqLwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXRpcF9wY2lfZHJpdmVyKTsKKworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZnNfcGFyZW50KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiTWljcm9uIFRlY2hub2xvZ3ksIEluYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5oIGIvZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5oCmluZGV4IGZmYjk1NWUuLjRiOWI1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguaAorKysgYi9kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmgKQEAgLTQwLDkgKzQwLDExIEBACiAjZGVmaW5lIE1USVBfTUFYX1JFVFJJRVMJMgogCiAvKiBWYXJpb3VzIHRpbWVvdXQgdmFsdWVzIGluIG1zICovCi0jZGVmaW5lIE1USVBfTkNRX0NPTU1BTkRfVElNRU9VVF9NUyAgICAgICA1MDAwCi0jZGVmaW5lIE1USVBfSU9DVExfQ09NTUFORF9USU1FT1VUX01TICAgICA1MDAwCi0jZGVmaW5lIE1USVBfSU5URVJOQUxfQ09NTUFORF9USU1FT1VUX01TICA1MDAwCisjZGVmaW5lIE1USVBfTkNRX0NNRF9USU1FT1VUX01TICAgICAgMTUwMDAKKyNkZWZpbmUgTVRJUF9JT0NUTF9DTURfVElNRU9VVF9NUyAgICA1MDAwCisjZGVmaW5lIE1USVBfSU5UX0NNRF9USU1FT1VUX01TICAgICAgNTAwMAorI2RlZmluZSBNVElQX1FVSUVTQ0VfSU9fVElNRU9VVF9NUyAgIChNVElQX05DUV9DTURfVElNRU9VVF9NUyAqIFwKKwkJCQkgICAgIChNVElQX01BWF9SRVRSSUVTICsgMSkpCiAKIC8qIGNoZWNrIGZvciB0aW1lb3V0cyBldmVyeSA1MDBtcyAqLwogI2RlZmluZSBNVElQX1RJTUVPVVRfQ0hFQ0tfUEVSSU9ECTUwMApAQCAtMzMxLDEyICszMzMsOCBAQAogCSAqLwogCXZvaWQgKCpjb21wX2Z1bmMpKHN0cnVjdCBtdGlwX3BvcnQgKnBvcnQsCiAJCQkJaW50IHRhZywKLQkJCQl2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBtdGlwX2NtZCAqY21kLAogCQkJCWludCBzdGF0dXMpOwotCS8qIEFkZGl0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBtYXkgYmUgY2FsbGVkIGJ5IGNvbXBfZnVuYygpICovCi0Jdm9pZCAoKmFzeW5jX2NhbGxiYWNrKSh2b2lkICpkYXRhLCBpbnQgc3RhdHVzKTsKLQotCXZvaWQgKmFzeW5jX2RhdGE7IC8qIEFkZGwuIGRhdGEgcGFzc2VkIHRvIGFzeW5jX2NhbGxiYWNrKCkgKi8KIAogCWludCBzY2F0dGVyX2VudHM7IC8qIE51bWJlciBvZiBzY2F0dGVyIGxpc3QgZW50cmllcyB1c2VkICovCiAKQEAgLTM0NywxMCArMzQ1LDYgQEAKIAlpbnQgcmV0cmllczsgLyogVGhlIG51bWJlciBvZiByZXRyaWVzIGxlZnQgZm9yIHRoaXMgY29tbWFuZC4gKi8KIAogCWludCBkaXJlY3Rpb247IC8qIERhdGEgdHJhbnNmZXIgZGlyZWN0aW9uICovCi0KLQl1bnNpZ25lZCBsb25nIGNvbXBfdGltZTsgLyogY29tbWFuZCBjb21wbGV0aW9uIHRpbWUsIGluIGppZmZpZXMgKi8KLQotCWF0b21pY190IGFjdGl2ZTsgLyogZGVjbGFyZXMgaWYgdGhpcyBjb21tYW5kIHNlbnQgdG8gdGhlIGRyaXZlLiAqLwogfTsKIAogLyogU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBwb3J0LiAqLwpAQCAtNDM2LDEyICs0MzAsNiBAQAogCSAqIG9yIGVycm9yIGhhbmRsaW5nIGlzIGFjdGl2ZQogCSAqLwogCXVuc2lnbmVkIGxvbmcgY21kc190b19pc3N1ZVtTTE9UQklUU19JTl9MT05HU107Ci0JLyoKLQkgKiBBcnJheSBvZiBjb21tYW5kIHNsb3RzLiBTdHJ1Y3R1cmUgaW5jbHVkZXMgcG9pbnRlcnMgdG8gdGhlCi0JICogY29tbWFuZCBoZWFkZXIgYW5kIGNvbW1hbmQgdGFibGUsIGFuZCBjb21wbGV0aW9uIGZ1bmN0aW9uIGFuZCBkYXRhCi0JICogcG9pbnRlcnMuCi0JICovCi0Jc3RydWN0IG10aXBfY21kIGNvbW1hbmRzW01USVBfTUFYX0NPTU1BTkRfU0xPVFNdOwogCS8qIFVzZWQgYnkgbXRpcF9zZXJ2aWNlX3RocmVhZCB0byB3YWl0IGZvciBhbiBldmVudCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHN2Y193YWl0OwogCS8qCkBAIC00NTIsMTMgKzQ0MCw3IEBACiAJLyoKIAkgKiBUaW1lciB1c2VkIHRvIGNvbXBsZXRlIGNvbW1hbmRzIHRoYXQgaGF2ZSBiZWVuIGFjdGl2ZSBmb3IgdG9vIGxvbmcuCiAJICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgY21kX3RpbWVyOwogCXVuc2lnbmVkIGxvbmcgaWNfcGF1c2VfdGltZXI7Ci0JLyoKLQkgKiBTZW1hcGhvcmUgdXNlZCB0byBibG9jayB0aHJlYWRzIGlmIHRoZXJlIGFyZSBubwotCSAqIGNvbW1hbmQgc2xvdHMgYXZhaWxhYmxlLgotCSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgY21kX3Nsb3Q7CiAKIAkvKiBTZW1hcGhvcmUgdG8gY29udHJvbCBxdWV1ZSBkZXB0aCBvZiB1bmFsaWduZWQgSU9zICovCiAJc3RydWN0IHNlbWFwaG9yZSBjbWRfc2xvdF91bmFsOwpAQCAtNDg1LDYgKzQ2Nyw4IEBACiAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7IC8qIE91ciByZXF1ZXN0IHF1ZXVlLiAqLwogCisJc3RydWN0IGJsa19tcV90YWdfc2V0IHRhZ3M7IC8qIGJsa19tcSB0YWdzICovCisKIAlzdHJ1Y3QgbXRpcF9wb3J0ICpwb3J0OyAvKiBQb2ludGVyIHRvIHRoZSBwb3J0IGRhdGEgc3RydWN0dXJlLiAqLwogCiAJdW5zaWduZWQgcHJvZHVjdF90eXBlOyAvKiBtYWdpYyB2YWx1ZSBkZWNsYXJpbmcgdGhlIHByb2R1Y3QgdHlwZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggM2E3MGVhMi4uNTZhMDI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkID0gZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZuYmQtPndhaXRpbmdfcXVldWUpKSB7CiAJCS8qIHdhaXQgZm9yIHNvbWV0aGluZyB0byBkbyAqLwogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobmJkLT53YWl0aW5nX3dxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jCmluZGV4IDA5MWI5ZWEuLjc3MDg3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrLmMKQEAgLTMyLDYgKzMyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CisJc3RydWN0IGJsa19tcV90YWdfc2V0IHRhZ19zZXQ7CiAJc3RydWN0IGhydGltZXIgdGltZXI7CiAJdW5zaWduZWQgaW50IHF1ZXVlX2RlcHRoOwogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTIwMiw4ICsyMDMsOCBAQAogCQllbnRyeSA9IGxsaXN0X3JldmVyc2Vfb3JkZXIoZW50cnkpOwogCQlkbyB7CiAJCQljbWQgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBudWxsYl9jbWQsIGxsX2xpc3QpOwotCQkJZW5kX2NtZChjbWQpOwogCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwkJCWVuZF9jbWQoY21kKTsKIAkJfSB3aGlsZSAoZW50cnkpOwogCX0KIApAQCAtMjI2LDcgKzIyNyw3IEBACiAKIHN0YXRpYyB2b2lkIG51bGxfc29mdGlycV9kb25lX2ZuKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQllbmRfY21kKHJxLT5zcGVjaWFsKTsKKwllbmRfY21kKGJsa19tcV9ycV90b19wZHUocnEpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG51bGxfaGFuZGxlX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQpCkBAIC0zMTEsNyArMzEyLDcgQEAKIAogc3RhdGljIGludCBudWxsX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IG51bGxiX2NtZCAqY21kID0gcnEtPnNwZWNpYWw7CisJc3RydWN0IG51bGxiX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7CiAKIAljbWQtPnJxID0gcnE7CiAJY21kLT5ucSA9IGhjdHgtPmRyaXZlcl9kYXRhOwpAQCAtMzIwLDQ2ICszMjEsNiBAQAogCXJldHVybiBCTEtfTVFfUlFfUVVFVUVfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqbnVsbF9hbGxvY19oY3R4KHN0cnVjdCBibGtfbXFfcmVnICpyZWcsIHVuc2lnbmVkIGludCBoY3R4X2luZGV4KQotewotCWludCBiX3NpemUgPSBESVZfUk9VTkRfVVAocmVnLT5ucl9od19xdWV1ZXMsIG5yX29ubGluZV9ub2Rlcyk7Ci0JaW50IHRpcCA9IChyZWctPm5yX2h3X3F1ZXVlcyAlIG5yX29ubGluZV9ub2Rlcyk7Ci0JaW50IG5vZGUgPSAwLCBpLCBuOwotCi0JLyoKLQkgKiBTcGxpdCBzdWJtaXQgcXVldWVzIGV2ZW5seSB3cnQgdG8gdGhlIG51bWJlciBvZiBub2Rlcy4gSWYgdW5ldmVuLAotCSAqIGZpbGwgdGhlIGZpcnN0IGJ1Y2tldHMgd2l0aCBvbmUgZXh0cmEsIHVudGlsIHRoZSByZXN0IGlzIGZpbGxlZCB3aXRoCi0JICogbm8gZXh0cmEuCi0JICovCi0JZm9yIChpID0gMCwgbiA9IDE7IGkgPCBoY3R4X2luZGV4OyBpKyssIG4rKykgewotCQlpZiAobiAlIGJfc2l6ZSA9PSAwKSB7Ci0JCQluID0gMDsKLQkJCW5vZGUrKzsKLQotCQkJdGlwLS07Ci0JCQlpZiAoIXRpcCkKLQkJCQliX3NpemUgPSByZWctPm5yX2h3X3F1ZXVlcyAvIG5yX29ubGluZV9ub2RlczsKLQkJfQotCX0KLQotCS8qCi0JICogQSBub2RlIG1pZ2h0IG5vdCBiZSBvbmxpbmUsIHRoZXJlZm9yZSBtYXAgdGhlIHJlbGF0aXZlIG5vZGUgaWQgdG8gdGhlCi0JICogcmVhbCBub2RlIGlkLgotCSAqLwotCWZvcl9lYWNoX29ubGluZV9ub2RlKG4pIHsKLQkJaWYgKCFub2RlKQotCQkJYnJlYWs7Ci0JCW5vZGUtLTsKLQl9Ci0KLQlyZXR1cm4ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgYmxrX21xX2h3X2N0eCksIEdGUF9LRVJORUwsIG4pOwotfQotCi1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfaGN0eChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgdW5zaWduZWQgaW50IGhjdHhfaW5kZXgpCi17Ci0Ja2ZyZWUoaGN0eCk7Ci19Ci0KIHN0YXRpYyB2b2lkIG51bGxfaW5pdF9xdWV1ZShzdHJ1Y3QgbnVsbGIgKm51bGxiLCBzdHJ1Y3QgbnVsbGJfcXVldWUgKm5xKQogewogCUJVR19PTighbnVsbGIpOwpAQCAtMzg5LDE5ICszNTAsMTQgQEAKIAkuY29tcGxldGUJPSBudWxsX3NvZnRpcnFfZG9uZV9mbiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmxrX21xX3JlZyBudWxsX21xX3JlZyA9IHsKLQkub3BzCQk9ICZudWxsX21xX29wcywKLQkucXVldWVfZGVwdGgJPSA2NCwKLQkuY21kX3NpemUJPSBzaXplb2Yoc3RydWN0IG51bGxiX2NtZCksCi0JLmZsYWdzCQk9IEJMS19NUV9GX1NIT1VMRF9NRVJHRSwKLX07Ci0KIHN0YXRpYyB2b2lkIG51bGxfZGVsX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKQogewogCWxpc3RfZGVsX2luaXQoJm51bGxiLT5saXN0KTsKIAogCWRlbF9nZW5kaXNrKG51bGxiLT5kaXNrKTsKIAlibGtfY2xlYW51cF9xdWV1ZShudWxsYi0+cSk7CisJaWYgKHF1ZXVlX21vZGUgPT0gTlVMTF9RX01RKQorCQlibGtfbXFfZnJlZV90YWdfc2V0KCZudWxsYi0+dGFnX3NldCk7CiAJcHV0X2Rpc2sobnVsbGItPmRpc2spOwogCWtmcmVlKG51bGxiKTsKIH0KQEAgLTUwNiw3ICs0NjIsNyBAQAogCiAJbnVsbGIgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpudWxsYiksIEdGUF9LRVJORUwsIGhvbWVfbm9kZSk7CiAJaWYgKCFudWxsYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrX2luaXQoJm51bGxiLT5sb2NrKTsKIApAQCAtNTE0LDQ5ICs0NzAsNDQgQEAKIAkJc3VibWl0X3F1ZXVlcyA9IG5yX29ubGluZV9ub2RlczsKIAogCWlmIChzZXR1cF9xdWV1ZXMobnVsbGIpKQotCQlnb3RvIGVycjsKKwkJZ290byBvdXRfZnJlZV9udWxsYjsKIAogCWlmIChxdWV1ZV9tb2RlID09IE5VTExfUV9NUSkgewotCQludWxsX21xX3JlZy5udW1hX25vZGUgPSBob21lX25vZGU7Ci0JCW51bGxfbXFfcmVnLnF1ZXVlX2RlcHRoID0gaHdfcXVldWVfZGVwdGg7Ci0JCW51bGxfbXFfcmVnLm5yX2h3X3F1ZXVlcyA9IHN1Ym1pdF9xdWV1ZXM7CisJCW51bGxiLT50YWdfc2V0Lm9wcyA9ICZudWxsX21xX29wczsKKwkJbnVsbGItPnRhZ19zZXQubnJfaHdfcXVldWVzID0gc3VibWl0X3F1ZXVlczsKKwkJbnVsbGItPnRhZ19zZXQucXVldWVfZGVwdGggPSBod19xdWV1ZV9kZXB0aDsKKwkJbnVsbGItPnRhZ19zZXQubnVtYV9ub2RlID0gaG9tZV9ub2RlOworCQludWxsYi0+dGFnX3NldC5jbWRfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbnVsbGJfY21kKTsKKwkJbnVsbGItPnRhZ19zZXQuZmxhZ3MgPSBCTEtfTVFfRl9TSE9VTERfTUVSR0U7CisJCW51bGxiLT50YWdfc2V0LmRyaXZlcl9kYXRhID0gbnVsbGI7CiAKLQkJaWYgKHVzZV9wZXJfbm9kZV9oY3R4KSB7Ci0JCQludWxsX21xX3JlZy5vcHMtPmFsbG9jX2hjdHggPSBudWxsX2FsbG9jX2hjdHg7Ci0JCQludWxsX21xX3JlZy5vcHMtPmZyZWVfaGN0eCA9IG51bGxfZnJlZV9oY3R4OwotCQl9IGVsc2UgewotCQkJbnVsbF9tcV9yZWcub3BzLT5hbGxvY19oY3R4ID0gYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZTsKLQkJCW51bGxfbXFfcmVnLm9wcy0+ZnJlZV9oY3R4ID0gYmxrX21xX2ZyZWVfc2luZ2xlX2h3X3F1ZXVlOwotCQl9CisJCWlmIChibGtfbXFfYWxsb2NfdGFnX3NldCgmbnVsbGItPnRhZ19zZXQpKQorCQkJZ290byBvdXRfY2xlYW51cF9xdWV1ZXM7CiAKLQkJbnVsbGItPnEgPSBibGtfbXFfaW5pdF9xdWV1ZSgmbnVsbF9tcV9yZWcsIG51bGxiKTsKKwkJbnVsbGItPnEgPSBibGtfbXFfaW5pdF9xdWV1ZSgmbnVsbGItPnRhZ19zZXQpOworCQlpZiAoIW51bGxiLT5xKQorCQkJZ290byBvdXRfY2xlYW51cF90YWdzOwogCX0gZWxzZSBpZiAocXVldWVfbW9kZSA9PSBOVUxMX1FfQklPKSB7CiAJCW51bGxiLT5xID0gYmxrX2FsbG9jX3F1ZXVlX25vZGUoR0ZQX0tFUk5FTCwgaG9tZV9ub2RlKTsKKwkJaWYgKCFudWxsYi0+cSkKKwkJCWdvdG8gb3V0X2NsZWFudXBfcXVldWVzOwogCQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG51bGxiLT5xLCBudWxsX3F1ZXVlX2Jpbyk7CiAJCWluaXRfZHJpdmVyX3F1ZXVlcyhudWxsYik7CiAJfSBlbHNlIHsKIAkJbnVsbGItPnEgPSBibGtfaW5pdF9xdWV1ZV9ub2RlKG51bGxfcmVxdWVzdF9mbiwgJm51bGxiLT5sb2NrLCBob21lX25vZGUpOworCQlpZiAoIW51bGxiLT5xKQorCQkJZ290byBvdXRfY2xlYW51cF9xdWV1ZXM7CiAJCWJsa19xdWV1ZV9wcmVwX3JxKG51bGxiLT5xLCBudWxsX3JxX3ByZXBfZm4pOwotCQlpZiAobnVsbGItPnEpCi0JCQlibGtfcXVldWVfc29mdGlycV9kb25lKG51bGxiLT5xLCBudWxsX3NvZnRpcnFfZG9uZV9mbik7CisJCWJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUobnVsbGItPnEsIG51bGxfc29mdGlycV9kb25lX2ZuKTsKIAkJaW5pdF9kcml2ZXJfcXVldWVzKG51bGxiKTsKIAl9CiAKLQlpZiAoIW51bGxiLT5xKQotCQlnb3RvIHF1ZXVlX2ZhaWw7Ci0KIAludWxsYi0+cS0+cXVldWVkYXRhID0gbnVsbGI7CiAJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIG51bGxiLT5xKTsKIAogCWRpc2sgPSBudWxsYi0+ZGlzayA9IGFsbG9jX2Rpc2tfbm9kZSgxLCBob21lX25vZGUpOwotCWlmICghZGlzaykgewotcXVldWVfZmFpbDoKLQkJYmxrX2NsZWFudXBfcXVldWUobnVsbGItPnEpOwotCQljbGVhbnVwX3F1ZXVlcyhudWxsYik7Ci1lcnI6Ci0JCWtmcmVlKG51bGxiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghZGlzaykKKwkJZ290byBvdXRfY2xlYW51cF9ibGtfcXVldWU7CiAKIAltdXRleF9sb2NrKCZsb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZudWxsYi0+bGlzdCwgJm51bGxiX2xpc3QpOwpAQCAtNTc5LDYgKzUzMCwxOCBAQAogCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAibnVsbGIlZCIsIG51bGxiLT5pbmRleCk7CiAJYWRkX2Rpc2soZGlzayk7CiAJcmV0dXJuIDA7CisKK291dF9jbGVhbnVwX2Jsa19xdWV1ZToKKwlibGtfY2xlYW51cF9xdWV1ZShudWxsYi0+cSk7CitvdXRfY2xlYW51cF90YWdzOgorCWlmIChxdWV1ZV9tb2RlID09IE5VTExfUV9NUSkKKwkJYmxrX21xX2ZyZWVfdGFnX3NldCgmbnVsbGItPnRhZ19zZXQpOworb3V0X2NsZWFudXBfcXVldWVzOgorCWNsZWFudXBfcXVldWVzKG51bGxiKTsKK291dF9mcmVlX251bGxiOgorCWtmcmVlKG51bGxiKTsKK291dDoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbnVsbF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL252bWUtY29yZS5jIGIvZHJpdmVycy9ibG9jay9udm1lLWNvcmUuYwppbmRleCA3YzY0ZmE3Li5hODQyYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL252bWUtY29yZS5jCisrKyBiL2RyaXZlcnMvYmxvY2svbnZtZS1jb3JlLmMKQEAgLTI3NzUsNiArMjc3NSwxNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIG52bWVfcmVzZXRfbm90aWZ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHByZXBhcmUpCit7CisgICAgICAgc3RydWN0IG52bWVfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKyAgICAgICBpZiAocHJlcGFyZSkKKyAgICAgICAgICAgICAgIG52bWVfZGV2X3NodXRkb3duKGRldik7CisgICAgICAgZWxzZQorICAgICAgICAgICAgICAgbnZtZV9kZXZfcmVzdW1lKGRldik7Cit9CisKIHN0YXRpYyB2b2lkIG52bWVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG52bWVfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC0yODM5LDYgKzI4NDksNyBAQAogCS5saW5rX3Jlc2V0CT0gbnZtZV9saW5rX3Jlc2V0LAogCS5zbG90X3Jlc2V0CT0gbnZtZV9zbG90X3Jlc2V0LAogCS5yZXN1bWUJCT0gbnZtZV9lcnJvcl9yZXN1bWUsCisJLnJlc2V0X25vdGlmeQk9IG52bWVfcmVzZXRfbm90aWZ5LAogfTsKIAogLyogTW92ZSB0byBwY2lfaWRzLmggbGF0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKaW5kZXggZTc2YmRjMC4uNzE5Y2IxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCQkJcGNkX2N1cnJlbnQgPSBjZDsKIAkJCXBjZF9zZWN0b3IgPSBibGtfcnFfcG9zKHBjZF9yZXEpOwogCQkJcGNkX2NvdW50ID0gYmxrX3JxX2N1cl9zZWN0b3JzKHBjZF9yZXEpOwotCQkJcGNkX2J1ZiA9IHBjZF9yZXEtPmJ1ZmZlcjsKKwkJCXBjZF9idWYgPSBiaW9fZGF0YShwY2RfcmVxLT5iaW8pOwogCQkJcGNkX2J1c3kgPSAxOwogCQkJcHNfc2V0X2ludHIoZG9fcGNkX3JlYWQsIE5VTEwsIDAsIG5pY2UpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKaW5kZXggMTlhZDhmMC4uZmVhN2U3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCkBAIC00NTQsNyArNDU0LDcgQEAKIAkJaWYgKHBkX2Jsb2NrICsgcGRfY291bnQgPiBnZXRfY2FwYWNpdHkocGRfcmVxLT5ycV9kaXNrKSkKIAkJCXJldHVybiBGYWlsOwogCQlwZF9ydW4gPSBibGtfcnFfc2VjdG9ycyhwZF9yZXEpOwotCQlwZF9idWYgPSBwZF9yZXEtPmJ1ZmZlcjsKKwkJcGRfYnVmID0gYmlvX2RhdGEocGRfcmVxLT5iaW8pOwogCQlwZF9yZXRyaWVzID0gMDsKIAkJaWYgKHBkX2NtZCA9PSBSRUFEKQogCQkJcmV0dXJuIGRvX3BkX3JlYWRfc3RhcnQoKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwZF9sb2NrLCBzYXZlZF9mbGFncyk7CiAJX19ibGtfZW5kX3JlcXVlc3RfY3VyKHBkX3JlcSwgMCk7CiAJcGRfY291bnQgPSBibGtfcnFfY3VyX3NlY3RvcnMocGRfcmVxKTsKLQlwZF9idWYgPSBwZF9yZXEtPmJ1ZmZlcjsKKwlwZF9idWYgPSBiaW9fZGF0YShwZF9yZXEtPmJpbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRfbG9jaywgc2F2ZWRfZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggZjVjODZkNS4uOWExNWZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC03OTUsNyArNzk1LDcgQEAKIAl9CiAKIAlwZl9jbWQgPSBycV9kYXRhX2RpcihwZl9yZXEpOwotCXBmX2J1ZiA9IHBmX3JlcS0+YnVmZmVyOworCXBmX2J1ZiA9IGJpb19kYXRhKHBmX3JlcS0+YmlvKTsKIAlwZl9yZXRyaWVzID0gMDsKIAogCXBmX2J1c3kgPSAxOwpAQCAtODI3LDcgKzgyNyw3IEBACiAJCWlmICghcGZfcmVxKQogCQkJcmV0dXJuIDE7CiAJCXBmX2NvdW50ID0gYmxrX3JxX2N1cl9zZWN0b3JzKHBmX3JlcSk7Ci0JCXBmX2J1ZiA9IHBmX3JlcS0+YnVmZmVyOworCQlwZl9idWYgPSBiaW9fZGF0YShwZl9yZXEtPmJpbyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCBhMmFmNzNkLi5lZjE2NmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAKIAlzdHJ1Y3QgcGFja2V0X2RhdGEgKnBrdDsKIAlsb25nIG1pbl9zbGVlcF90aW1lLCByZXNpZHVlOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCXNldF9mcmVlemFibGUoKTsKIAogCWZvciAoOzspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc2tkX21haW4uYyBiL2RyaXZlcnMvYmxvY2svc2tkX21haW4uYwppbmRleCBhNjlkZDkzLi42MDg1MzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3NrZF9tYWluLmMKKysrIGIvZHJpdmVycy9ibG9jay9za2RfbWFpbi5jCkBAIC01NjMsNyArNTYzLDYgQEAKIAogCXJlcSA9IHNrcmVxLT5yZXE7CiAJYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQocmVxLCBwYWdlLCBsZW4pOwotCXJlcS0+YnVmZmVyID0gYnVmOwogfQogCiBzdGF0aWMgdm9pZCBza2RfcmVxdWVzdF9mbl9ub3Rfb25saW5lKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKQEAgLTc0NCw2ICs3NDMsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJc2tyZXEtPmRpc2NhcmRfcGFnZSA9IDE7CisJCQlyZXEtPmNvbXBsZXRpb25fZGF0YSA9IHBhZ2U7CiAJCQlza2RfcHJlcF9kaXNjYXJkX2NkYihzY3NpX3JlcSwgc2tyZXEsIHBhZ2UsIGxiYSwgY291bnQpOwogCiAJCX0gZWxzZSBpZiAoZmx1c2ggPT0gU0tEX0ZMVVNIX1pFUk9fU0laRV9GSVJTVCkgewpAQCAtODU4LDggKzg1OCw3IEBACiAJCShza3JlcS0+ZGlzY2FyZF9wYWdlID09IDEpKSB7CiAJCXByX2RlYnVnKCIlczolczolZCwgZnJlZSB0aGUgcGFnZSEiLAogCQkJIHNrZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcmVxLT5idWZmZXIpOwotCQlyZXEtPmJ1ZmZlciA9IE5VTEw7CisJCV9fZnJlZV9wYWdlKHJlcS0+Y29tcGxldGlvbl9kYXRhKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoZXJyb3IpKSB7CkBAIC0zOTQ1LDE1ICszOTQ0LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IFNLRF9NQVhfTVNJWF9DT1VOVDsgaSsrKQogCQllbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCXJjID0gcGNpX2VuYWJsZV9tc2l4X3JhbmdlKHBkZXYsIGVudHJpZXMsCi0JCQkJICAgU0tEX01JTl9NU0lYX0NPVU5ULCBTS0RfTUFYX01TSVhfQ09VTlQpOwotCWlmIChyYyA8IDApIHsKKwlyYyA9IHBjaV9lbmFibGVfbXNpeF9leGFjdChwZGV2LCBlbnRyaWVzLCBTS0RfTUFYX01TSVhfQ09VTlQpOworCWlmIChyYykgewogCQlwcl9lcnIoIiglcyk6IGZhaWxlZCB0byBlbmFibGUgTVNJLVggJWRcbiIsCiAJCSAgICAgICBza2RfbmFtZShza2RldiksIHJjKTsKIAkJZ290byBtc2l4X291dDsKIAl9CiAKLQlza2Rldi0+bXNpeF9jb3VudCA9IHJjOworCXNrZGV2LT5tc2l4X2NvdW50ID0gU0tEX01BWF9NU0lYX0NPVU5UOwogCXNrZGV2LT5tc2l4X2VudHJpZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tkX21zaXhfZW50cnkpICoKIAkJCQkgICAgICBza2Rldi0+bXNpeF9jb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2Rldi0+bXNpeF9lbnRyaWVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCmluZGV4IGIwMmQ1M2EuLjZiNDRiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCkBAIC01NDksNyArNTQ5LDcgQEAKIAkJY2FzZSBSRUFEOgogCQkJZXJyID0gZmxvcHB5X3JlYWRfc2VjdG9ycyhmcywgYmxrX3JxX3BvcyhyZXEpLAogCQkJCQkJICBibGtfcnFfY3VyX3NlY3RvcnMocmVxKSwKLQkJCQkJCSAgcmVxLT5idWZmZXIpOworCQkJCQkJICBiaW9fZGF0YShyZXEtPmJpbykpOwogCQkJYnJlYWs7CiAJCX0KIAlkb25lOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltMy5jIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCmluZGV4IGM3NGY3YjUuLjUyM2VlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCQlzd2ltM19kYmcoImRvX2ZkX3JlcTogZGV2PSVzIGNtZD0lZCBzZWM9JWxkIG5yX3NlYz0ldSBidWY9JXBcbiIsCiAJCQkgIHJlcS0+cnFfZGlzay0+ZGlza19uYW1lLCByZXEtPmNtZCwKIAkJCSAgKGxvbmcpYmxrX3JxX3BvcyhyZXEpLCBibGtfcnFfc2VjdG9ycyhyZXEpLAotCQkJICByZXEtPmJ1ZmZlcik7CisJCQkgIGJpb19kYXRhKHJlcS0+YmlvKSk7CiAJCXN3aW0zX2RiZygiICAgICAgICAgICBlcnJvcnM9JWQgY3VycmVudF9ucl9zZWN0b3JzPSV1XG4iLAogCQkJICByZXEtPmVycm9ycywgYmxrX3JxX2N1cl9zZWN0b3JzKHJlcSkpOwogI2VuZGlmCkBAIC00NzksMTEgKzQ3OSwxMSBAQAogCQkvKiBTZXQgdXAgMyBkbWEgY29tbWFuZHM6IHdyaXRlIHByZWFtYmxlLCBkYXRhLCBwb3N0YW1ibGUgKi8KIAkJaW5pdF9kbWEoY3AsIE9VVFBVVF9NT1JFLCB3cml0ZV9wcmVhbWJsZSwgc2l6ZW9mKHdyaXRlX3ByZWFtYmxlKSk7CiAJCSsrY3A7Ci0JCWluaXRfZG1hKGNwLCBPVVRQVVRfTU9SRSwgcmVxLT5idWZmZXIsIDUxMik7CisJCWluaXRfZG1hKGNwLCBPVVRQVVRfTU9SRSwgYmlvX2RhdGEocmVxLT5iaW8pLCA1MTIpOwogCQkrK2NwOwogCQlpbml0X2RtYShjcCwgT1VUUFVUX0xBU1QsIHdyaXRlX3Bvc3RhbWJsZSwgc2l6ZW9mKHdyaXRlX3Bvc3RhbWJsZSkpOwogCX0gZWxzZSB7Ci0JCWluaXRfZG1hKGNwLCBJTlBVVF9MQVNULCByZXEtPmJ1ZmZlciwgbiAqIDUxMik7CisJCWluaXRfZG1hKGNwLCBJTlBVVF9MQVNULCBiaW9fZGF0YShyZXEtPmJpbyksIG4gKiA1MTIpOwogCX0KIAkrK2NwOwogCW91dF9sZTE2KCZjcC0+Y29tbWFuZCwgREJETUFfU1RPUCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IGNiOWIxZjguLmY2M2QzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0zMCw2ICszMCw5IEBACiAJLyogVGhlIGRpc2sgc3RydWN0dXJlIGZvciB0aGUga2VybmVsLiAqLwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwogCisJLyogQmxvY2sgbGF5ZXIgdGFncy4gKi8KKwlzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgdGFnX3NldDsKKwogCS8qIFByb2Nlc3MgY29udGV4dCBmb3IgY29uZmlnIHNwYWNlIHVwZGF0ZXMgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CiAKQEAgLTExMiw3ICsxMTUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmlydGJsa19yZXF1ZXN0X2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgdmlydGJsa19yZXEgKnZiciA9IHJlcS0+c3BlY2lhbDsKKwlzdHJ1Y3QgdmlydGJsa19yZXEgKnZiciA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKIAlpbnQgZXJyb3IgPSB2aXJ0YmxrX3Jlc3VsdCh2YnIpOwogCiAJaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKQEAgLTE0NywxOCArMTUwLDE5IEBACiAKIAkvKiBJbiBjYXNlIHF1ZXVlIGlzIHN0b3BwZWQgd2FpdGluZyBmb3IgbW9yZSBidWZmZXJzLiAqLwogCWlmIChyZXFfZG9uZSkKLQkJYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKHZibGstPmRpc2stPnF1ZXVlKTsKKwkJYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKHZibGstPmRpc2stPnF1ZXVlLCB0cnVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2YmxrLT52cV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgdmlydGlvX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gaGN0eC0+cXVldWUtPnF1ZXVlZGF0YTsKLQlzdHJ1Y3QgdmlydGJsa19yZXEgKnZiciA9IHJlcS0+c3BlY2lhbDsKKwlzdHJ1Y3QgdmlydGJsa19yZXEgKnZiciA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBudW07CiAJY29uc3QgYm9vbCBsYXN0ID0gKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0VORCkgIT0gMDsKIAlpbnQgZXJyOworCWJvb2wgbm90aWZ5ID0gZmFsc2U7CiAKIAlCVUdfT04ocmVxLT5ucl9waHlzX3NlZ21lbnRzICsgMiA+IHZibGstPnNnX2VsZW1zKTsKIApAQCAtMjExLDEwICsyMTUsMTIgQEAKIAkJcmV0dXJuIEJMS19NUV9SUV9RVUVVRV9FUlJPUjsKIAl9CiAKLQlpZiAobGFzdCkKLQkJdmlydHF1ZXVlX2tpY2sodmJsay0+dnEpOwotCisJaWYgKGxhc3QgJiYgdmlydHF1ZXVlX2tpY2tfcHJlcGFyZSh2YmxrLT52cSkpCisJCW5vdGlmeSA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmJsay0+dnFfbG9jaywgZmxhZ3MpOworCisJaWYgKG5vdGlmeSkKKwkJdmlydHF1ZXVlX25vdGlmeSh2YmxrLT52cSk7CiAJcmV0dXJuIEJMS19NUV9SUV9RVUVVRV9PSzsKIH0KIApAQCAtNDgwLDMzICs0ODYsMjcgQEAKIAlfX0FUVFIoY2FjaGVfdHlwZSwgU19JUlVHT3xTX0lXVVNSLAogCSAgICAgICB2aXJ0YmxrX2NhY2hlX3R5cGVfc2hvdywgdmlydGJsa19jYWNoZV90eXBlX3N0b3JlKTsKIAotc3RhdGljIHN0cnVjdCBibGtfbXFfb3BzIHZpcnRpb19tcV9vcHMgPSB7Ci0JLnF1ZXVlX3JxCT0gdmlydGlvX3F1ZXVlX3JxLAotCS5tYXBfcXVldWUJPSBibGtfbXFfbWFwX3F1ZXVlLAotCS5hbGxvY19oY3R4CT0gYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZSwKLQkuZnJlZV9oY3R4CT0gYmxrX21xX2ZyZWVfc2luZ2xlX2h3X3F1ZXVlLAotCS5jb21wbGV0ZQk9IHZpcnRibGtfcmVxdWVzdF9kb25lLAotfTsKLQotc3RhdGljIHN0cnVjdCBibGtfbXFfcmVnIHZpcnRpb19tcV9yZWcgPSB7Ci0JLm9wcwkJPSAmdmlydGlvX21xX29wcywKLQkubnJfaHdfcXVldWVzCT0gMSwKLQkucXVldWVfZGVwdGgJPSAwLCAvKiBTZXQgaW4gdmlydGJsa19wcm9iZSAqLwotCS5udW1hX25vZGUJPSBOVU1BX05PX05PREUsCi0JLmZsYWdzCQk9IEJMS19NUV9GX1NIT1VMRF9NRVJHRSwKLX07Ci1tb2R1bGVfcGFyYW1fbmFtZWQocXVldWVfZGVwdGgsIHZpcnRpb19tcV9yZWcucXVldWVfZGVwdGgsIHVpbnQsIDA0NDQpOwotCi1zdGF0aWMgaW50IHZpcnRibGtfaW5pdF92YnIodm9pZCAqZGF0YSwgc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCi0JCQkgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IG5yKQorc3RhdGljIGludCB2aXJ0YmxrX2luaXRfcmVxdWVzdCh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCXVuc2lnbmVkIGludCBoY3R4X2lkeCwgdW5zaWduZWQgaW50IHJlcXVlc3RfaWR4LAorCQl1bnNpZ25lZCBpbnQgbnVtYV9ub2RlKQogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGF0YTsKLQlzdHJ1Y3QgdmlydGJsa19yZXEgKnZiciA9IHJxLT5zcGVjaWFsOworCXN0cnVjdCB2aXJ0YmxrX3JlcSAqdmJyID0gYmxrX21xX3JxX3RvX3BkdShycSk7CiAKIAlzZ19pbml0X3RhYmxlKHZici0+c2csIHZibGstPnNnX2VsZW1zKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBibGtfbXFfb3BzIHZpcnRpb19tcV9vcHMgPSB7CisJLnF1ZXVlX3JxCT0gdmlydGlvX3F1ZXVlX3JxLAorCS5tYXBfcXVldWUJPSBibGtfbXFfbWFwX3F1ZXVlLAorCS5jb21wbGV0ZQk9IHZpcnRibGtfcmVxdWVzdF9kb25lLAorCS5pbml0X3JlcXVlc3QJPSB2aXJ0YmxrX2luaXRfcmVxdWVzdCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlydGJsa19xdWV1ZV9kZXB0aDsKK21vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZV9kZXB0aCwgdmlydGJsa19xdWV1ZV9kZXB0aCwgdWludCwgMDQ0NCk7CisKIHN0YXRpYyBpbnQgdmlydGJsa19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsazsKQEAgLTU2MSwyNCArNTYxLDM0IEBACiAJfQogCiAJLyogRGVmYXVsdCBxdWV1ZSBzaXppbmcgaXMgdG8gZmlsbCB0aGUgcmluZy4gKi8KLQlpZiAoIXZpcnRpb19tcV9yZWcucXVldWVfZGVwdGgpIHsKLQkJdmlydGlvX21xX3JlZy5xdWV1ZV9kZXB0aCA9IHZibGstPnZxLT5udW1fZnJlZTsKKwlpZiAoIXZpcnRibGtfcXVldWVfZGVwdGgpIHsKKwkJdmlydGJsa19xdWV1ZV9kZXB0aCA9IHZibGstPnZxLT5udW1fZnJlZTsKIAkJLyogLi4uIGJ1dCB3aXRob3V0IGluZGlyZWN0IGRlc2NzLCB3ZSB1c2UgMiBkZXNjcyBwZXIgcmVxICovCiAJCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQykpCi0JCQl2aXJ0aW9fbXFfcmVnLnF1ZXVlX2RlcHRoIC89IDI7CisJCQl2aXJ0YmxrX3F1ZXVlX2RlcHRoIC89IDI7CiAJfQotCXZpcnRpb19tcV9yZWcuY21kX3NpemUgPQorCisJbWVtc2V0KCZ2YmxrLT50YWdfc2V0LCAwLCBzaXplb2YodmJsay0+dGFnX3NldCkpOworCXZibGstPnRhZ19zZXQub3BzID0gJnZpcnRpb19tcV9vcHM7CisJdmJsay0+dGFnX3NldC5ucl9od19xdWV1ZXMgPSAxOworCXZibGstPnRhZ19zZXQucXVldWVfZGVwdGggPSB2aXJ0YmxrX3F1ZXVlX2RlcHRoOworCXZibGstPnRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFOworCXZibGstPnRhZ19zZXQuZmxhZ3MgPSBCTEtfTVFfRl9TSE9VTERfTUVSR0U7CisJdmJsay0+dGFnX3NldC5jbWRfc2l6ZSA9CiAJCXNpemVvZihzdHJ1Y3QgdmlydGJsa19yZXEpICsKIAkJc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiBzZ19lbGVtczsKKwl2YmxrLT50YWdfc2V0LmRyaXZlcl9kYXRhID0gdmJsazsKIAotCXEgPSB2YmxrLT5kaXNrLT5xdWV1ZSA9IGJsa19tcV9pbml0X3F1ZXVlKCZ2aXJ0aW9fbXFfcmVnLCB2YmxrKTsKKwllcnIgPSBibGtfbXFfYWxsb2NfdGFnX3NldCgmdmJsay0+dGFnX3NldCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfcHV0X2Rpc2s7CisKKwlxID0gdmJsay0+ZGlzay0+cXVldWUgPSBibGtfbXFfaW5pdF9xdWV1ZSgmdmJsay0+dGFnX3NldCk7CiAJaWYgKCFxKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3B1dF9kaXNrOworCQlnb3RvIG91dF9mcmVlX3RhZ3M7CiAJfQogCi0JYmxrX21xX2luaXRfY29tbWFuZHMocSwgdmlydGJsa19pbml0X3ZiciwgdmJsayk7Ci0KIAlxLT5xdWV1ZWRhdGEgPSB2YmxrOwogCiAJdmlydGJsa19uYW1lX2Zvcm1hdCgidmQiLCBpbmRleCwgdmJsay0+ZGlzay0+ZGlza19uYW1lLCBESVNLX05BTUVfTEVOKTsKQEAgLTY3OSw2ICs2ODksOCBAQAogb3V0X2RlbF9kaXNrOgogCWRlbF9nZW5kaXNrKHZibGstPmRpc2spOwogCWJsa19jbGVhbnVwX3F1ZXVlKHZibGstPmRpc2stPnF1ZXVlKTsKK291dF9mcmVlX3RhZ3M6CisJYmxrX21xX2ZyZWVfdGFnX3NldCgmdmJsay0+dGFnX3NldCk7CiBvdXRfcHV0X2Rpc2s6CiAJcHV0X2Rpc2sodmJsay0+ZGlzayk7CiBvdXRfZnJlZV92cToKQEAgLTcwNSw2ICs3MTcsOCBAQAogCWRlbF9nZW5kaXNrKHZibGstPmRpc2spOwogCWJsa19jbGVhbnVwX3F1ZXVlKHZibGstPmRpc2stPnF1ZXVlKTsKIAorCWJsa19tcV9mcmVlX3RhZ19zZXQoJnZibGstPnRhZ19zZXQpOworCiAJLyogU3RvcCBhbGwgdGhlIHZpcnRxdWV1ZXMuICovCiAJdmRldi0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKIApAQCAtNzQ5LDcgKzc2Myw3IEBACiAJdmJsay0+Y29uZmlnX2VuYWJsZSA9IHRydWU7CiAJcmV0ID0gaW5pdF92cSh2ZGV2LT5wcml2KTsKIAlpZiAoIXJldCkKLQkJYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKHZibGstPmRpc2stPnF1ZXVlKTsKKwkJYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKHZibGstPmRpc2stPnF1ZXVlLCB0cnVlKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9jb21tb24uaAppbmRleCBiZTA1Mjc3Li5mNjViODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svY29tbW9uLmgKQEAgLTMxNCw3ICszMTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZwkJCXN0X3JkX3NlY3Q7CiAJdW5zaWduZWQgbG9uZyBsb25nCQkJc3Rfd3Jfc2VjdDsKIAotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRpbmdfdG9fZnJlZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZnJlZV93b3JrOwogCS8qIFRocmVhZCBzaHV0ZG93biB3YWl0IHF1ZXVlLiAqLwogCXdhaXRfcXVldWVfaGVhZF90CXNodXRkb3duX3dxOwogfTsKQEAgLTM2MSw3ICszNjEsNyBAQAogI2RlZmluZSB4ZW5fYmxraWZfcHV0KF9iKQkJCQlcCiAJZG8gewkJCQkJCVwKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJihfYiktPnJlZmNudCkpCVwKLQkJCXdha2VfdXAoJihfYiktPndhaXRpbmdfdG9fZnJlZSk7XAorCQkJc2NoZWR1bGVfd29yaygmKF9iKS0+ZnJlZV93b3JrKTtcCiAJfSB3aGlsZSAoMCkKIAogc3RydWN0IHBoeXNfcmVxIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL3hlbmJ1cy5jCmluZGV4IDlhNTQ3ZTYuLjNhOGI4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay94ZW5idXMuYwpAQCAtMzUsMTIgKzM1LDI2IEBACiBzdGF0aWMgaW50IGNvbm5lY3RfcmluZyhzdHJ1Y3QgYmFja2VuZF9pbmZvICopOwogc3RhdGljIHZvaWQgYmFja2VuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKiwgY29uc3QgY2hhciAqKiwKIAkJCSAgICB1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgeGVuX2Jsa2lmX2ZyZWUoc3RydWN0IHhlbl9ibGtpZiAqYmxraWYpOworc3RhdGljIHZvaWQgeGVuX3ZiZF9mcmVlKHN0cnVjdCB4ZW5fdmJkICp2YmQpOwogCiBzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuX2Jsa2JrX3hlbmJ1cyhzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSkKIHsKIAlyZXR1cm4gYmUtPmRldjsKIH0KIAorLyoKKyAqIFRoZSBsYXN0IHJlcXVlc3QgY291bGQgZnJlZSB0aGUgZGV2aWNlIGZyb20gc29mdGlycSBjb250ZXh0IGFuZAorICogeGVuX2Jsa2lmX2ZyZWUoKSBjYW4gc2xlZXAuCisgKi8KK3N0YXRpYyB2b2lkIHhlbl9ibGtpZl9kZWZlcnJlZF9mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgeGVuX2Jsa2lmICpibGtpZjsKKworCWJsa2lmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB4ZW5fYmxraWYsIGZyZWVfd29yayk7CisJeGVuX2Jsa2lmX2ZyZWUoYmxraWYpOworfQorCiBzdGF0aWMgaW50IGJsa2JhY2tfbmFtZShzdHJ1Y3QgeGVuX2Jsa2lmICpibGtpZiwgY2hhciAqYnVmKQogewogCWNoYXIgKmRldnBhdGgsICpkZXZuYW1lOwpAQCAtMTIxLDcgKzEzNSw2IEBACiAJaW5pdF9jb21wbGV0aW9uKCZibGtpZi0+ZHJhaW5fY29tcGxldGUpOwogCWF0b21pY19zZXQoJmJsa2lmLT5kcmFpbiwgMCk7CiAJYmxraWYtPnN0X3ByaW50ID0gamlmZmllczsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZibGtpZi0+d2FpdGluZ190b19mcmVlKTsKIAlibGtpZi0+cGVyc2lzdGVudF9nbnRzLnJiX25vZGUgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZibGtpZi0+ZnJlZV9wYWdlc19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYmxraWYtPmZyZWVfcGFnZXMpOwpAQCAtMTMyLDYgKzE0NSw3IEBACiAJSU5JVF9XT1JLKCZibGtpZi0+cGVyc2lzdGVudF9wdXJnZV93b3JrLCB4ZW5fYmxrYmtfdW5tYXBfcHVyZ2VkX2dyYW50cyk7CiAKIAlJTklUX0xJU1RfSEVBRCgmYmxraWYtPnBlbmRpbmdfZnJlZSk7CisJSU5JVF9XT1JLKCZibGtpZi0+ZnJlZV93b3JrLCB4ZW5fYmxraWZfZGVmZXJyZWRfZnJlZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgWEVOX0JMS0lGX1JFUVM7IGkrKykgewogCQlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMzEsNyArMjQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgeGVuX2Jsa2lmX2Rpc2Nvbm5lY3Qoc3RydWN0IHhlbl9ibGtpZiAqYmxraWYpCitzdGF0aWMgaW50IHhlbl9ibGtpZl9kaXNjb25uZWN0KHN0cnVjdCB4ZW5fYmxraWYgKmJsa2lmKQogewogCWlmIChibGtpZi0+eGVuYmxrZCkgewogCQlrdGhyZWFkX3N0b3AoYmxraWYtPnhlbmJsa2QpOwpAQCAtMjM5LDkgKzI1MywxMiBAQAogCQlibGtpZi0+eGVuYmxrZCA9IE5VTEw7CiAJfQogCi0JYXRvbWljX2RlYygmYmxraWYtPnJlZmNudCk7Ci0Jd2FpdF9ldmVudChibGtpZi0+d2FpdGluZ190b19mcmVlLCBhdG9taWNfcmVhZCgmYmxraWYtPnJlZmNudCkgPT0gMCk7Ci0JYXRvbWljX2luYygmYmxraWYtPnJlZmNudCk7CisJLyogVGhlIGFib3ZlIGt0aHJlYWRfc3RvcCgpIGd1YXJhbnRlZXMgdGhhdCBhdCB0aGlzIHBvaW50IHdlCisJICogZG9uJ3QgaGF2ZSBhbnkgZGlzY2FyZF9pbyBvciBvdGhlcl9pbyByZXF1ZXN0cy4gU28sIGNoZWNraW5nCisJICogZm9yIGluZmxpZ2h0IElPIGlzIGVub3VnaC4KKwkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmJsa2lmLT5pbmZsaWdodCkgPiAwKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGJsa2lmLT5pcnEpIHsKIAkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihibGtpZi0+aXJxLCBibGtpZik7CkBAIC0yNTIsNiArMjY5LDggQEAKIAkJeGVuYnVzX3VubWFwX3JpbmdfdmZyZWUoYmxraWYtPmJlLT5kZXYsIGJsa2lmLT5ibGtfcmluZyk7CiAJCWJsa2lmLT5ibGtfcmluZ3MuY29tbW9uLnNyaW5nID0gTlVMTDsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgeGVuX2Jsa2lmX2ZyZWUoc3RydWN0IHhlbl9ibGtpZiAqYmxraWYpCkBAIC0yNTksOCArMjc4LDggQEAKIAlzdHJ1Y3QgcGVuZGluZ19yZXEgKnJlcSwgKm47CiAJaW50IGkgPSAwLCBqOwogCi0JaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZibGtpZi0+cmVmY250KSkKLQkJQlVHKCk7CisJeGVuX2Jsa2lmX2Rpc2Nvbm5lY3QoYmxraWYpOworCXhlbl92YmRfZnJlZSgmYmxraWYtPnZiZCk7CiAKIAkvKiBSZW1vdmUgYWxsIHBlcnNpc3RlbnQgZ3JhbnRzIGFuZCB0aGUgY2FjaGUgb2YgYmFsbG9vbmVkIHBhZ2VzLiAqLwogCXhlbl9ibGtia19mcmVlX2NhY2hlcyhibGtpZik7CkBAIC00NDksMTYgKzQ2OCwxNSBAQAogCQliZS0+YmFja2VuZF93YXRjaC5ub2RlID0gTlVMTDsKIAl9CiAKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwogCWlmIChiZS0+YmxraWYpIHsKIAkJeGVuX2Jsa2lmX2Rpc2Nvbm5lY3QoYmUtPmJsa2lmKTsKLQkJeGVuX3ZiZF9mcmVlKCZiZS0+YmxraWYtPnZiZCk7Ci0JCXhlbl9ibGtpZl9mcmVlKGJlLT5ibGtpZik7Ci0JCWJlLT5ibGtpZiA9IE5VTEw7CisJCXhlbl9ibGtpZl9wdXQoYmUtPmJsa2lmKTsKIAl9CiAKIAlrZnJlZShiZS0+bW9kZSk7CiAJa2ZyZWUoYmUpOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCkBAIC00ODEsMTAgKzQ5OSwxNSBAQAogCXN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYgPSBiZS0+ZGV2OwogCXN0cnVjdCB4ZW5fYmxraWYgKmJsa2lmID0gYmUtPmJsa2lmOwogCWludCBlcnI7Ci0JaW50IHN0YXRlID0gMDsKKwlpbnQgc3RhdGUgPSAwLCBkaXNjYXJkX2VuYWJsZTsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gYmUtPmJsa2lmLT52YmQuYmRldjsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCisJZXJyID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGRldi0+bm9kZW5hbWUsICJkaXNjYXJkLWVuYWJsZSIsICIlZCIsCisJCQkgICAmZGlzY2FyZF9lbmFibGUpOworCWlmIChlcnIgPT0gMSAmJiAhZGlzY2FyZF9lbmFibGUpCisJCXJldHVybjsKKwogCWlmIChibGtfcXVldWVfZGlzY2FyZChxKSkgewogCQllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwKIAkJCSJkaXNjYXJkLWdyYW51bGFyaXR5IiwgIiV1IiwKQEAgLTcwMCw3ICs3MjMsMTEgQEAKIAkJICogRW5mb3JjZSBwcmVjb25kaXRpb24gYmVmb3JlIHBvdGVudGlhbCBsZWFrIHBvaW50LgogCQkgKiB4ZW5fYmxraWZfZGlzY29ubmVjdCgpIGlzIGlkZW1wb3RlbnQuCiAJCSAqLwotCQl4ZW5fYmxraWZfZGlzY29ubmVjdChiZS0+YmxraWYpOworCQllcnIgPSB4ZW5fYmxraWZfZGlzY29ubmVjdChiZS0+YmxraWYpOworCQlpZiAoZXJyKSB7CisJCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAicGVuZGluZyBJL08iKTsKKwkJCWJyZWFrOworCQl9CiAKIAkJZXJyID0gY29ubmVjdF9yaW5nKGJlKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCmluZGV4IGVmZTFiNDcuLjVkZWIyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwpAQCAtNjEyLDEwICs2MTIsMTAgQEAKIAkJfQogCiAJCXByX2RlYnVnKCJkb19ibGtfcmVxICVwOiBjbWQgJXAsIHNlYyAlbHgsICIKLQkJCSAiKCV1LyV1KSBidWZmZXI6JXAgWyVzXVxuIiwKKwkJCSAiKCV1LyV1KSBbJXNdXG4iLAogCQkJIHJlcSwgcmVxLT5jbWQsICh1bnNpZ25lZCBsb25nKWJsa19ycV9wb3MocmVxKSwKIAkJCSBibGtfcnFfY3VyX3NlY3RvcnMocmVxKSwgYmxrX3JxX3NlY3RvcnMocmVxKSwKLQkJCSByZXEtPmJ1ZmZlciwgcnFfZGF0YV9kaXIocmVxKSA/ICJ3cml0ZSIgOiAicmVhZCIpOworCQkJIHJxX2RhdGFfZGlyKHJlcSkgPyAid3JpdGUiIDogInJlYWQiKTsKIAogCQlpZiAoYmxraWZfcXVldWVfcmVxdWVzdChyZXEpKSB7CiAJCQlibGtfcmVxdWV1ZV9yZXF1ZXN0KHJxLCByZXEpOwpAQCAtMTYzNSwzNiArMTYzNSwyNCBAQAogc3RhdGljIHZvaWQgYmxrZnJvbnRfc2V0dXBfZGlzY2FyZChzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbykKIHsKIAlpbnQgZXJyOwotCWNoYXIgKnR5cGU7CiAJdW5zaWduZWQgaW50IGRpc2NhcmRfZ3JhbnVsYXJpdHk7CiAJdW5zaWduZWQgaW50IGRpc2NhcmRfYWxpZ25tZW50OwogCXVuc2lnbmVkIGludCBkaXNjYXJkX3NlY3VyZTsKIAotCXR5cGUgPSB4ZW5idXNfcmVhZChYQlRfTklMLCBpbmZvLT54YmRldi0+b3RoZXJlbmQsICJ0eXBlIiwgTlVMTCk7Ci0JaWYgKElTX0VSUih0eXBlKSkKLQkJcmV0dXJuOwotCi0JaW5mby0+ZmVhdHVyZV9zZWNkaXNjYXJkID0gMDsKLQlpZiAoc3RybmNtcCh0eXBlLCAicGh5IiwgMykgPT0gMCkgewotCQllcnIgPSB4ZW5idXNfZ2F0aGVyKFhCVF9OSUwsIGluZm8tPnhiZGV2LT5vdGhlcmVuZCwKLQkJCSJkaXNjYXJkLWdyYW51bGFyaXR5IiwgIiV1IiwgJmRpc2NhcmRfZ3JhbnVsYXJpdHksCi0JCQkiZGlzY2FyZC1hbGlnbm1lbnQiLCAiJXUiLCAmZGlzY2FyZF9hbGlnbm1lbnQsCi0JCQlOVUxMKTsKLQkJaWYgKCFlcnIpIHsKLQkJCWluZm8tPmZlYXR1cmVfZGlzY2FyZCA9IDE7Ci0JCQlpbmZvLT5kaXNjYXJkX2dyYW51bGFyaXR5ID0gZGlzY2FyZF9ncmFudWxhcml0eTsKLQkJCWluZm8tPmRpc2NhcmRfYWxpZ25tZW50ID0gZGlzY2FyZF9hbGlnbm1lbnQ7Ci0JCX0KLQkJZXJyID0geGVuYnVzX2dhdGhlcihYQlRfTklMLCBpbmZvLT54YmRldi0+b3RoZXJlbmQsCi0JCQkgICAgImRpc2NhcmQtc2VjdXJlIiwgIiVkIiwgJmRpc2NhcmRfc2VjdXJlLAotCQkJICAgIE5VTEwpOwotCQlpZiAoIWVycikKLQkJCWluZm8tPmZlYXR1cmVfc2VjZGlzY2FyZCA9IGRpc2NhcmRfc2VjdXJlOwotCi0JfSBlbHNlIGlmIChzdHJuY21wKHR5cGUsICJmaWxlIiwgNCkgPT0gMCkKLQkJaW5mby0+ZmVhdHVyZV9kaXNjYXJkID0gMTsKLQotCWtmcmVlKHR5cGUpOworCWluZm8tPmZlYXR1cmVfZGlzY2FyZCA9IDE7CisJZXJyID0geGVuYnVzX2dhdGhlcihYQlRfTklMLCBpbmZvLT54YmRldi0+b3RoZXJlbmQsCisJCSJkaXNjYXJkLWdyYW51bGFyaXR5IiwgIiV1IiwgJmRpc2NhcmRfZ3JhbnVsYXJpdHksCisJCSJkaXNjYXJkLWFsaWdubWVudCIsICIldSIsICZkaXNjYXJkX2FsaWdubWVudCwKKwkJTlVMTCk7CisJaWYgKCFlcnIpIHsKKwkJaW5mby0+ZGlzY2FyZF9ncmFudWxhcml0eSA9IGRpc2NhcmRfZ3JhbnVsYXJpdHk7CisJCWluZm8tPmRpc2NhcmRfYWxpZ25tZW50ID0gZGlzY2FyZF9hbGlnbm1lbnQ7CisJfQorCWVyciA9IHhlbmJ1c19nYXRoZXIoWEJUX05JTCwgaW5mby0+eGJkZXYtPm90aGVyZW5kLAorCQkgICAgImRpc2NhcmQtc2VjdXJlIiwgIiVkIiwgJmRpc2NhcmRfc2VjdXJlLAorCQkgICAgTlVMTCk7CisJaWYgKCFlcnIpCisJCWluZm8tPmZlYXR1cmVfc2VjZGlzY2FyZCA9ICEhZGlzY2FyZF9zZWN1cmU7CiB9CiAKIHN0YXRpYyBpbnQgYmxrZnJvbnRfc2V0dXBfaW5kaXJlY3Qoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IDEzOTNiODguLmFiM2VhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC02NjEsNyArNjYxLDcgQEAKIAkJCXJxX2RhdGFfZGlyKHJlcSkpOwogCiAJCWFjZS0+cmVxID0gcmVxOwotCQlhY2UtPmRhdGFfcHRyID0gcmVxLT5idWZmZXI7CisJCWFjZS0+ZGF0YV9wdHIgPSBiaW9fZGF0YShyZXEtPmJpbyk7CiAJCWFjZS0+ZGF0YV9jb3VudCA9IGJsa19ycV9jdXJfc2VjdG9ycyhyZXEpICogQUNFX0JVRl9QRVJfU0VDVE9SOwogCQlhY2Vfb3V0MzIoYWNlLCBBQ0VfTVBVTEJBLCBibGtfcnFfcG9zKHJlcSkgJiAweDBGRkZGRkZGKTsKIApAQCAtNzMzLDcgKzczMyw3IEBACiAJCQkgKiAgICAgIGJsa19ycV9zZWN0b3JzKGFjZS0+cmVxKSwKIAkJCSAqICAgICAgYmxrX3JxX2N1cl9zZWN0b3JzKGFjZS0+cmVxKSk7CiAJCQkgKi8KLQkJCWFjZS0+ZGF0YV9wdHIgPSBhY2UtPnJlcS0+YnVmZmVyOworCQkJYWNlLT5kYXRhX3B0ciA9IGJpb19kYXRhKGFjZS0+cmVxLT5iaW8pOwogCQkJYWNlLT5kYXRhX2NvdW50ID0gYmxrX3JxX2N1cl9zZWN0b3JzKGFjZS0+cmVxKSAqIDE2OwogCQkJYWNlX2ZzbV95aWVsZGlycShhY2UpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3oycmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKaW5kZXggMjdkZTUwNDYuLjk2OGY5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svejJyYW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKQEAgLTg3LDEzICs4NywxNSBAQAogCQl3aGlsZSAobGVuKSB7CiAJCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCAmIFoyUkFNX0NIVU5LTUFTSzsKIAkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFoyUkFNX0NIVU5LU0laRSAtIGFkZHI7CisJCQl2b2lkICpidWZmZXIgPSBiaW9fZGF0YShyZXEtPmJpbyk7CisKIAkJCWlmIChsZW4gPCBzaXplKQogCQkJCXNpemUgPSBsZW47CiAJCQlhZGRyICs9IHoycmFtX21hcFsgc3RhcnQgPj4gWjJSQU1fQ0hVTktTSElGVCBdOwogCQkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkKLQkJCQltZW1jcHkocmVxLT5idWZmZXIsIChjaGFyICopYWRkciwgc2l6ZSk7CisJCQkJbWVtY3B5KGJ1ZmZlciwgKGNoYXIgKilhZGRyLCBzaXplKTsKIAkJCWVsc2UKLQkJCQltZW1jcHkoKGNoYXIgKilhZGRyLCByZXEtPmJ1ZmZlciwgc2l6ZSk7CisJCQkJbWVtY3B5KChjaGFyICopYWRkciwgYnVmZmVyLCBzaXplKTsKIAkJCXN0YXJ0ICs9IHNpemU7CiAJCQlsZW4gLT0gc2l6ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwppbmRleCBmMWZiZjRmLi5lMDBmOGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwpAQCAtMTE4LDEwICsxMTgsNiBAQAogCiBpbnQgaGNpX3VhcnRfdHhfd2FrZXVwKHN0cnVjdCBoY2lfdWFydCAqaHUpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGh1LT50dHk7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBodS0+aGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoSENJX1VBUlRfU0VORElORywgJmh1LT50eF9zdGF0ZSkpIHsKIAkJc2V0X2JpdChIQ0lfVUFSVF9UWF9XQUtFVVAsICZodS0+dHhfc3RhdGUpOwogCQlyZXR1cm4gMDsKQEAgLTEyOSw2ICsxMjUsMjIgQEAKIAogCUJUX0RCRygiIik7CiAKKwlzY2hlZHVsZV93b3JrKCZodS0+d3JpdGVfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGNpX3VhcnRfd3JpdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGhjaV91YXJ0ICpodSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaGNpX3VhcnQsIHdyaXRlX3dvcmspOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBodS0+dHR5OworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaHUtPmhkZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIFJFVklTSVQ6IHNob3VsZCB3ZSBjb3BlIHdpdGggYmFkIHNrYnMgb3IgLT53cml0ZSgpIHJldHVybmluZworCSAqIGFuZCBlcnJvciB2YWx1ZSA/CisJICovCisKIHJlc3RhcnQ6CiAJY2xlYXJfYml0KEhDSV9VQVJUX1RYX1dBS0VVUCwgJmh1LT50eF9zdGF0ZSk7CiAKQEAgLTE1Myw3ICsxNjUsNiBAQAogCQlnb3RvIHJlc3RhcnQ7CiAKIAljbGVhcl9iaXQoSENJX1VBUlRfU0VORElORywgJmh1LT50eF9zdGF0ZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGhjaV91YXJ0X2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yODIsNiArMjkzLDcgQEAKIAl0dHktPnJlY2VpdmVfcm9vbSA9IDY1NTM2OwogCiAJSU5JVF9XT1JLKCZodS0+aW5pdF9yZWFkeSwgaGNpX3VhcnRfaW5pdF93b3JrKTsKKwlJTklUX1dPUksoJmh1LT53cml0ZV93b3JrLCBoY2lfdWFydF93cml0ZV93b3JrKTsKIAogCXNwaW5fbG9ja19pbml0KCZodS0+cnhfbG9jayk7CiAKQEAgLTMxOSw2ICszMzEsOCBAQAogCWlmIChoZGV2KQogCQloY2lfdWFydF9jbG9zZShoZGV2KTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmh1LT53cml0ZV93b3JrKTsKKwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1VBUlRfUFJPVE9fU0VULCAmaHUtPmZsYWdzKSkgewogCQlpZiAoaGRldikgewogCQkJaWYgKHRlc3RfYml0KEhDSV9VQVJUX1JFR0lTVEVSRUQsICZodS0+ZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgKaW5kZXggZmZmYTYxZi4uMTJkZjEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oCkBAIC02OCw2ICs2OCw3IEBACiAJdW5zaWduZWQgbG9uZwkJaGRldl9mbGFnczsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAlpbml0X3JlYWR5OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3cml0ZV93b3JrOwogCiAJc3RydWN0IGhjaV91YXJ0X3Byb3RvCSpwcm90bzsKIAl2b2lkCQkJKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9LY29uZmlnIGIvZHJpdmVycy9idXMvS2NvbmZpZwppbmRleCA1NTIzNzNjLi5hMTE4ZWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvYnVzL0tjb25maWcKQEAgLTQsNiArNCwxNCBAQAogCiBtZW51ICJCdXMgZGV2aWNlcyIKIAorY29uZmlnIEJSQ01TVEJfR0lTQl9BUkIKKwlib29sICJCcm9hZGNvbSBTVEIgR0lTQiBidXMgYXJiaXRlciIKKwlkZXBlbmRzIG9uIEFSTQorCWhlbHAKKwkgIERyaXZlciBmb3IgdGhlIEJyb2FkY29tIFNldCBUb3AgQm94IFN5c3RlbS1vbi1hLWNoaXAgaW50ZXJuYWwgYnVzCisJICBhcmJpdGVyLiBUaGlzIGRyaXZlciBwcm92aWRlcyB0aW1lb3V0IGFuZCB0YXJnZXQgYWJvcnQgZXJyb3IgaGFuZGxpbmcKKwkgIGFuZCBpbnRlcm5hbCBidXMgbWFzdGVyIGRlY29kaW5nLgorCiBjb25maWcgSU1YX1dFSU0KIAlib29sICJGcmVlc2NhbGUgRUlNIERSSVZFUiIKIAlkZXBlbmRzIG9uIEFSQ0hfTVhDCkBAIC00MSw0ICs0OSwxNCBAQAogCWhlbHAKIAkgIERyaXZlciBzdXBwb3J0aW5nIHRoZSBDQ0kgY2FjaGUgY29oZXJlbnQgaW50ZXJjb25uZWN0IGZvciBBUk0KIAkgIHBsYXRmb3Jtcy4KKworY29uZmlnIFZFWFBSRVNTX0NPTkZJRworCWJvb2wgIlZlcnNhdGlsZSBFeHByZXNzIGNvbmZpZ3VyYXRpb24gYnVzIgorCWRlZmF1bHQgeSBpZiBBUkNIX1ZFWFBSRVNTCisJZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IFJFR01BUAorCWhlbHAKKwkgIFBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBBUk0gTHRkLgorCSAgVmVyc2F0aWxlIEV4cHJlc3MuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9NYWtlZmlsZSBiL2RyaXZlcnMvYnVzL01ha2VmaWxlCmluZGV4IDg5NDdiZGQuLjZhNGVhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYnVzL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGJ1cyBkcml2ZXJzLgogIwogCitvYmotJChDT05GSUdfQlJDTVNUQl9HSVNCX0FSQikJKz0gYnJjbXN0Yl9naXNiLm8KIG9iai0kKENPTkZJR19JTVhfV0VJTSkJKz0gaW14LXdlaW0ubwogb2JqLSQoQ09ORklHX01WRUJVX01CVVMpICs9IG12ZWJ1LW1idXMubwogb2JqLSQoQ09ORklHX09NQVBfT0NQMlNDUCkJKz0gb21hcC1vY3Ayc2NwLm8KQEAgLTEwLDMgKzExLDUgQEAKIG9iai0kKENPTkZJR19PTUFQX0lOVEVSQ09OTkVDVCkJKz0gb21hcF9sM19zbXgubyBvbWFwX2wzX25vYy5vCiAjIENDSSBjYWNoZSBjb2hlcmVudCBpbnRlcmNvbm5lY3QgZm9yIEFSTSBwbGF0Zm9ybXMKIG9iai0kKENPTkZJR19BUk1fQ0NJKQkJKz0gYXJtLWNjaS5vCisKK29iai0kKENPTkZJR19WRVhQUkVTU19DT05GSUcpCSs9IHZleHByZXNzLWNvbmZpZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9icmNtc3RiX2dpc2IuYyBiL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNTliNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2J1cy9icmNtc3RiX2dpc2IuYwpAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorCisjZGVmaW5lIEFSQl9USU1FUgkJCTB4MDA4CisjZGVmaW5lIEFSQl9FUlJfQ0FQX0NMUgkJCTB4N2U0CisjZGVmaW5lICBBUkJfRVJSX0NBUF9DTEVBUgkJKDEgPDwgMCkKKyNkZWZpbmUgQVJCX0VSUl9DQVBfSElfQUREUgkJMHg3ZTgKKyNkZWZpbmUgQVJCX0VSUl9DQVBfQUREUgkJMHg3ZWMKKyNkZWZpbmUgQVJCX0VSUl9DQVBfREFUQQkJMHg3ZjAKKyNkZWZpbmUgQVJCX0VSUl9DQVBfU1RBVFVTCQkweDdmNAorI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX1RJTUVPVVQJKDEgPDwgMTIpCisjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfVEVBCQkoMSA8PCAxMSkKKyNkZWZpbmUgIEFSQl9FUlJfQ0FQX1NUQVRVU19CU19TSElGVAkoMSA8PCAyKQorI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX0JTX01BU0sJMHgzYworI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX1dSSVRFCSgxIDw8IDEpCisjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfVkFMSUQJKDEgPDwgMCkKKyNkZWZpbmUgQVJCX0VSUl9DQVBfTUFTVEVSCQkweDdmOAorCitzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgeworCXZvaWQgX19pb21lbQkqYmFzZTsKKwlzdHJ1Y3QgbXV0ZXgJbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CisJdTMyIHZhbGlkX21hc2s7CisJY29uc3QgY2hhciAqbWFzdGVyX25hbWVzW3NpemVvZih1MzIpICogQklUU19QRVJfQllURV07Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlX2xpc3QpOworCitzdGF0aWMgc3NpemVfdCBnaXNiX2FyYl9nZXRfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXUzMiB0aW1lb3V0OworCisJbXV0ZXhfbG9jaygmZ2Rldi0+bG9jayk7CisJdGltZW91dCA9IGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfVElNRVIpOworCW11dGV4X3VubG9jaygmZ2Rldi0+bG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHRpbWVvdXQpOworfQorCitzdGF0aWMgc3NpemVfdCBnaXNiX2FyYl9zZXRfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlICpnZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHZhbCwgcmV0OworCisJcmV0ID0ga3N0cnRvaW50KGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHZhbCA9PSAwIHx8IHZhbCA+PSAweGZmZmZmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmdkZXYtPmxvY2spOworCWlvd3JpdGUzMih2YWwsIGdkZXYtPmJhc2UgKyBBUkJfVElNRVIpOworCW11dGV4X3VubG9jaygmZ2Rldi0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2JyY21zdGJfZ2lzYl9tYXN0ZXJfdG9fc3RyKHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiwKKwkJCQkJCXUzMiBtYXN0ZXJzKQoreworCXUzMiBtYXNrID0gZ2Rldi0+dmFsaWRfbWFzayAmIG1hc3RlcnM7CisKKwlpZiAoaHdlaWdodF9sb25nKG1hc2spICE9IDEpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGdkZXYtPm1hc3Rlcl9uYW1lc1tmZnMobWFzaykgLSAxXTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2dpc2JfYXJiX2RlY29kZV9hZGRyKHN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiwKKwkJCQkJY29uc3QgY2hhciAqcmVhc29uKQoreworCXUzMiBjYXBfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgYXJiX2FkZHI7CisJdTMyIG1hc3RlcjsKKwljb25zdCBjaGFyICptX25hbWU7CisJY2hhciBtX2ZtdFsxMV07CisKKwljYXBfc3RhdHVzID0gaW9yZWFkMzIoZ2Rldi0+YmFzZSArIEFSQl9FUlJfQ0FQX1NUQVRVUyk7CisKKwkvKiBJbnZhbGlkIGNhcHR1cmVkIGFkZHJlc3MsIGJhaWwgb3V0ICovCisJaWYgKCEoY2FwX3N0YXR1cyAmIEFSQl9FUlJfQ0FQX1NUQVRVU19WQUxJRCkpCisJCXJldHVybiAxOworCisJLyogUmVhZCB0aGUgYWRkcmVzcyBhbmQgbWFzdGVyICovCisJYXJiX2FkZHIgPSBpb3JlYWQzMihnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfQUREUikgJiAweGZmZmZmZmZmOworI2lmIChJU19FTkFCTEVEKENPTkZJR19QSFlTX0FERFJfVF82NEJJVCkpCisJYXJiX2FkZHIgfD0gKHU2NClpb3JlYWQzMihnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfSElfQUREUikgPDwgMzI7CisjZW5kaWYKKwltYXN0ZXIgPSBpb3JlYWQzMihnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfTUFTVEVSKTsKKworCW1fbmFtZSA9IGJyY21zdGJfZ2lzYl9tYXN0ZXJfdG9fc3RyKGdkZXYsIG1hc3Rlcik7CisJaWYgKCFtX25hbWUpIHsKKwkJc25wcmludGYobV9mbXQsIHNpemVvZihtX2ZtdCksICIweCUwOHgiLCBtYXN0ZXIpOworCQltX25hbWUgPSBtX2ZtdDsKKwl9CisKKwlwcl9jcml0KCIlczogJXMgYXQgMHglbHggWyVjICVzXSwgY29yZTogJXNcbiIsCisJCV9fZnVuY19fLCByZWFzb24sIGFyYl9hZGRyLAorCQljYXBfc3RhdHVzICYgQVJCX0VSUl9DQVBfU1RBVFVTX1dSSVRFID8gJ1cnIDogJ1InLAorCQljYXBfc3RhdHVzICYgQVJCX0VSUl9DQVBfU1RBVFVTX1RJTUVPVVQgPyAidGltZW91dCIgOiAiIiwKKwkJbV9uYW1lKTsKKworCS8qIGNsZWFyIHRoZSBHSVNCIGVycm9yICovCisJaW93cml0ZTMyKEFSQl9FUlJfQ0FQX0NMRUFSLCBnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfQ0xSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJyY21zdGJfYnVzX2Vycm9yX2hhbmRsZXIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAorCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlICpnZGV2OworCisJLyogaXRlcmF0ZSBvdmVyIGVhY2ggR0lTQiBhcmIgcmVnaXN0ZXJlZCBoYW5kbGVycyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2RldiwgJmJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlX2xpc3QsIG5leHQpCisJCXJldCB8PSBicmNtc3RiX2dpc2JfYXJiX2RlY29kZV9hZGRyKGdkZXYsICJidXMgZXJyb3IiKTsKKwkvKgorCSAqIElmIGl0IHdhcyBhbiBpbXByZWNpc2UgYWJvcnQsIHRoZW4gd2UgbmVlZCB0byBjb3JyZWN0IHRoZQorCSAqIHJldHVybiBhZGRyZXNzIHRvIGJlIF9hZnRlcl8gdGhlIGluc3RydWN0aW9uLgorCSovCisJaWYgKGZzciAmICgxIDw8IDEwKSkKKwkJcmVncy0+QVJNX3BjICs9IDQ7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9faW5pdCBicmNtc3RiX2hvb2tfZmF1bHRfY29kZSh2b2lkKQoreworCWhvb2tfZmF1bHRfY29kZSgyMiwgYnJjbXN0Yl9idXNfZXJyb3JfaGFuZGxlciwgU0lHQlVTLCAwLAorCQkJImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYnJjbXN0Yl9naXNiX3RpbWVvdXRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJYnJjbXN0Yl9naXNiX2FyYl9kZWNvZGVfYWRkcihkZXZfaWQsICJ0aW1lb3V0Iik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBicmNtc3RiX2dpc2JfdGVhX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWJyY21zdGJfZ2lzYl9hcmJfZGVjb2RlX2FkZHIoZGV2X2lkLCAidGFyZ2V0IGFib3J0Iik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihnaXNiX2FyYl90aW1lb3V0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJZ2lzYl9hcmJfZ2V0X3RpbWVvdXQsIGdpc2JfYXJiX3NldF90aW1lb3V0KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdpc2JfYXJiX3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2dpc2JfYXJiX3RpbWVvdXQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ2lzYl9hcmJfc3lzZnNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBnaXNiX2FyYl9zeXNmc19hdHRycywKK307CisKK3N0YXRpYyBpbnQgYnJjbXN0Yl9naXNiX2FyYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgKmdkZXY7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCBlcnIsIHRpbWVvdXRfaXJxLCB0ZWFfaXJxOworCXVuc2lnbmVkIGludCBudW1fbWFzdGVycywgaiA9IDA7CisJaW50IGksIGZpcnN0LCBsYXN0OworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJdGltZW91dF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCXRlYV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCisJZ2RldiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmdkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmZ2Rldi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmdkZXYtPm5leHQpOworCisJZ2Rldi0+YmFzZSA9IGRldm1fcmVxdWVzdF9hbmRfaW9yZW1hcCgmcGRldi0+ZGV2LCByKTsKKwlpZiAoIWdkZXYtPmJhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCB0aW1lb3V0X2lycSwKKwkJCQlicmNtc3RiX2dpc2JfdGltZW91dF9oYW5kbGVyLCAwLCBwZGV2LT5uYW1lLAorCQkJCWdkZXYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCB0ZWFfaXJxLAorCQkJCWJyY21zdGJfZ2lzYl90ZWFfaGFuZGxlciwgMCwgcGRldi0+bmFtZSwKKwkJCQlnZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIElmIHdlIGRvIG5vdCBoYXZlIGEgdmFsaWQgbWFzaywgYXNzdW1lIGFsbCBtYXN0ZXJzIGFyZSBlbmFibGVkICovCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRuLCAiYnJjbSxnaXNiLWFyYi1tYXN0ZXItbWFzayIsCisJCQkJJmdkZXYtPnZhbGlkX21hc2spKQorCQlnZGV2LT52YWxpZF9tYXNrID0gMHhmZmZmZmZmZjsKKworCS8qIFByb2NlZWQgd2l0aCByZWFkaW5nIHRoZSBsaXR0ZXJhbCBuYW1lcyBpZiB3ZSBhZ3JlZSBvbiB0aGUKKwkgKiBudW1iZXIgb2YgbWFzdGVycworCSAqLworCW51bV9tYXN0ZXJzID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkbiwKKwkJCSJicmNtLGdpc2ItYXJiLW1hc3Rlci1uYW1lcyIpOworCWlmIChod2VpZ2h0X2xvbmcoZ2Rldi0+dmFsaWRfbWFzaykgPT0gbnVtX21hc3RlcnMpIHsKKwkJZmlyc3QgPSBmZnMoZ2Rldi0+dmFsaWRfbWFzaykgLSAxOworCQlsYXN0ID0gZmxzKGdkZXYtPnZhbGlkX21hc2spIC0gMTsKKworCQlmb3IgKGkgPSBmaXJzdDsgaSA8IGxhc3Q7IGkrKykgeworCQkJaWYgKCEoZ2Rldi0+dmFsaWRfbWFzayAmIEJJVChpKSkpCisJCQkJY29udGludWU7CisKKwkJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KGRuLAorCQkJCQkiYnJjbSxnaXNiLWFyYi1tYXN0ZXItbmFtZXMiLCBqLAorCQkJCQkmZ2Rldi0+bWFzdGVyX25hbWVzW2ldKTsKKwkJCWorKzsKKwkJfQorCX0KKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZnaXNiX2FyYl9zeXNmc19hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2Rldik7CisKKwlsaXN0X2FkZF90YWlsKCZnZGV2LT5uZXh0LCAmYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2VfbGlzdCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVnaXN0ZXJlZCBtZW06ICVwLCBpcnFzOiAlZCwgJWRcbiIsCisJCQlnZGV2LT5iYXNlLCB0aW1lb3V0X2lycSwgdGVhX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYnJjbXN0Yl9naXNiX2FyYl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxnaXNiLWFyYiIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBicmNtc3RiX2dpc2JfYXJiX2RyaXZlciA9IHsKKwkucHJvYmUJPSBicmNtc3RiX2dpc2JfYXJiX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImJyY20tZ2lzYi1hcmIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gYnJjbXN0Yl9naXNiX2FyYl9vZl9tYXRjaCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYnJjbV9naXNiX2RyaXZlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYnJjbXN0Yl9naXNiX2FyYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChicmNtX2dpc2JfZHJpdmVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCmluZGV4IDAwYjczNDQuLjI2YzM3NzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9tdmVidS1tYnVzLmMKKysrIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCkBAIC03MDQsNyArNzA0LDYgQEAKIAkJCQkJIHBoeXNfYWRkcl90IHNkcmFtd2luc19waHlzX2Jhc2UsCiAJCQkJCSBzaXplX3Qgc2RyYW13aW5zX3NpemUpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKIAlpbnQgd2luOwogCiAJbWJ1cy0+bWJ1c3dpbnNfYmFzZSA9IGlvcmVtYXAobWJ1c3dpbnNfcGh5c19iYXNlLCBtYnVzd2luc19zaXplKTsKQEAgLTcxNywxMiArNzE2LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxjb2hlcmVuY3ktZmFicmljIik7Ci0JaWYgKG5wKSB7Ci0JCW1idXMtPmh3X2lvX2NvaGVyZW5jeSA9IDE7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQl9Ci0KIAlmb3IgKHdpbiA9IDA7IHdpbiA8IG1idXMtPnNvYy0+bnVtX3dpbnM7IHdpbisrKQogCQltdmVidV9tYnVzX2Rpc2FibGVfd2luZG93KG1idXMsIHdpbik7CiAKQEAgLTg5Miw3ICs4ODUsNyBAQAogCX0KIH0KIAotaW50IF9faW5pdCBtdmVidV9tYnVzX2R0X2luaXQodm9pZCkKK2ludCBfX2luaXQgbXZlYnVfbWJ1c19kdF9pbml0KGJvb2wgaXNfY29oZXJlbnQpCiB7CiAJc3RydWN0IHJlc291cmNlIG1idXN3aW5zX3Jlcywgc2RyYW13aW5zX3JlczsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqY29udHJvbGxlcjsKQEAgLTkzMCw2ICs5MjMsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltYnVzX3N0YXRlLmh3X2lvX2NvaGVyZW5jeSA9IGlzX2NvaGVyZW50OworCiAJLyogR2V0IG9wdGlvbmFsIHBjaWUte21lbSxpb30tYXBlcnR1cmUgcHJvcGVydGllcyAqLwogCW12ZWJ1X21idXNfZ2V0X3BjaWVfcmVzb3VyY2VzKG5wLCAmbWJ1c19zdGF0ZS5wY2llX21lbV9hcGVydHVyZSwKIAkJCQkJICAmbWJ1c19zdGF0ZS5wY2llX2lvX2FwZXJ0dXJlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmMgYi9kcml2ZXJzL2J1cy9vbWFwX2wzX25vYy5jCmluZGV4IGZlZWVjYWUuLjUzMWFlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmMKKysrIGIvZHJpdmVycy9idXMvb21hcF9sM19ub2MuYwpAQCAtMSw0MyArMSw0NSBAQAogLyoKLSAqIE9NQVA0WFhYIEwzIEludGVyY29ubmVjdCBlcnJvciBoYW5kbGluZyBkcml2ZXIKKyAqIE9NQVAgTDMgSW50ZXJjb25uZWN0IGVycm9yIGhhbmRsaW5nIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCiAgKglTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgogICoJU3JpY2hhcmFuIDxyLnNyaWNoYXJhbkB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3Ci0gKiBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJvbWFwX2wzX25vYy5oIgogCi0vKgotICogSW50ZXJydXB0IEhhbmRsZXIgZm9yIEwzIGVycm9yIGRldGVjdGlvbi4KLSAqCTEpIElkZW50aWZ5IHRoZSBMMyBjbG9ja2RvbWFpbiBwYXJ0aXRpb24gdG8gd2hpY2ggdGhlIGVycm9yIGJlbG9uZ3MgdG8uCi0gKgkyKSBJZGVudGlmeSB0aGUgc2xhdmUgd2hlcmUgdGhlIGVycm9yIGluZm9ybWF0aW9uIGlzIGxvZ2dlZAotICoJMykgUHJpbnQgdGhlIGxvZ2dlZCBpbmZvcm1hdGlvbi4KLSAqCTQpIEFkZCBkdW1wIHN0YWNrIHRvIHByb3ZpZGUga2VybmVsIHRyYWNlLgorLyoqCisgKiBsM19oYW5kbGVfdGFyZ2V0KCkgLSBIYW5kbGUgVGFyZ2V0IHNwZWNpZmljIHBhcnNlIGFuZCByZXBvcnRpbmcKKyAqIEBsMzoJCXBvaW50ZXIgdG8gbDMgc3RydWN0CisgKiBAYmFzZToJYmFzZSBhZGRyZXNzIG9mIGNsa2RtCisgKiBAZmxhZ19tdXg6CWZsYWdtdXggY29ycmVzcG9uZGluZyB0byB0aGUgZXZlbnQKKyAqIEBlcnJfc3JjOgllcnJvciBzb3VyY2UgaW5kZXggb2YgdGhlIHNsYXZlICh0YXJnZXQpCiAgKgotICogVHdvIFR5cGVzIG9mIGVycm9ycyA6CisgKiBUaGlzIGRvZXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBlcnJvciBpbnRlcnJ1cHQgaGFuZGxpbmc6CisgKgkzKSBQYXJzZSBpbiB0aGUgc2xhdmUgaW5mb3JtYXRpb24KKyAqCTQpIFByaW50IHRoZSBsb2dnZWQgaW5mb3JtYXRpb24uCisgKgk1KSBBZGQgZHVtcCBzdGFjayB0byBwcm92aWRlIGtlcm5lbCB0cmFjZS4KKyAqCTYpIENsZWFyIHRoZSBzb3VyY2UgaWYga25vd24uCisgKgorICogVGhpcyBoYW5kbGVzIHR3byB0eXBlcyBvZiBlcnJvcnM6CiAgKgkxKSBDdXN0b20gZXJyb3JzIGluIEwzIDoKICAqCQlUYXJnZXQgbGlrZSBETU0vRlcvRU1JRiBnZW5lcmF0ZXMgU1JFU1A9RVJSIGVycm9yCiAgKgkyKSBTdGFuZGFyZCBMMyBlcnJvcjoKQEAgLTUzLDIxNCArNTUsMjY0IEBACiAgKgljYW4gYmUgdHJhcHBlZCBhcyB3ZWxsLiBCdXQgdGhlIHRyYXBwaW5nIGlzIGltcGxlbWVudGVkIGFzIHBhcnQKICAqCXNlY3VyZSBzb2Z0d2FyZSBhbmQgaGVuY2UgbmVlZCBub3QgYmUgaW1wbGVtZW50ZWQgaGVyZS4KICAqLworc3RhdGljIGludCBsM19oYW5kbGVfdGFyZ2V0KHN0cnVjdCBvbWFwX2wzICpsMywgdm9pZCBfX2lvbWVtICpiYXNlLAorCQkJICAgIHN0cnVjdCBsM19mbGFnbXV4X2RhdGEgKmZsYWdfbXV4LCBpbnQgZXJyX3NyYykKK3sKKwlpbnQgazsKKwl1MzIgc3RkX2Vycl9tYWluLCBjbGVhciwgbWFzdGVyaWQ7CisJdTggb3BfY29kZSwgbV9yZXFfaW5mbzsKKwl2b2lkIF9faW9tZW0gKmwzX3RhcmdfYmFzZTsKKwl2b2lkIF9faW9tZW0gKmwzX3Rhcmdfc3RkZXJyLCAqbDNfdGFyZ19zbHZvZnNsc2IsICpsM190YXJnX21zdGFkZHI7CisJdm9pZCBfX2lvbWVtICpsM190YXJnX2hkciwgKmwzX3RhcmdfaW5mbzsKKwlzdHJ1Y3QgbDNfdGFyZ2V0X2RhdGEgKmwzX3RhcmdfaW5zdDsKKwlzdHJ1Y3QgbDNfbWFzdGVyc19kYXRhICptYXN0ZXI7CisJY2hhciAqdGFyZ2V0X25hbWUsICptYXN0ZXJfbmFtZSA9ICJVTiBJREVOVElGSUVEIjsKKwljaGFyICplcnJfZGVzY3JpcHRpb247CisJY2hhciBlcnJfc3RyaW5nWzMwXSA9IHsgMCB9OworCWNoYXIgaW5mb19zdHJpbmdbNjBdID0geyAwIH07CisKKwkvKiBXZSBET05PVCBleHBlY3QgZXJyX3NyYyB0byBnbyBvdXQgb2YgYm91bmRzICovCisJQlVHX09OKGVycl9zcmMgPiBNQVhfQ0xLRE1fVEFSR0VUUyk7CisKKwlpZiAoZXJyX3NyYyA8IGZsYWdfbXV4LT5udW1fdGFyZ19kYXRhKSB7CisJCWwzX3RhcmdfaW5zdCA9ICZmbGFnX211eC0+bDNfdGFyZ1tlcnJfc3JjXTsKKwkJdGFyZ2V0X25hbWUgPSBsM190YXJnX2luc3QtPm5hbWU7CisJCWwzX3RhcmdfYmFzZSA9IGJhc2UgKyBsM190YXJnX2luc3QtPm9mZnNldDsKKwl9IGVsc2UgeworCQl0YXJnZXRfbmFtZSA9IEwzX1RBUkdFVF9OT1RfU1VQUE9SVEVEOworCX0KKworCWlmICh0YXJnZXRfbmFtZSA9PSBMM19UQVJHRVRfTk9UX1NVUFBPUlRFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBSZWFkIHRoZSBzdGRlcnJsb2dfbWFpbl9zb3VyY2UgZnJvbSBjbGsgZG9tYWluICovCisJbDNfdGFyZ19zdGRlcnIgPSBsM190YXJnX2Jhc2UgKyBMM19UQVJHX1NUREVSUkxPR19NQUlOOworCWwzX3Rhcmdfc2x2b2ZzbHNiID0gbDNfdGFyZ19iYXNlICsgTDNfVEFSR19TVERFUlJMT0dfU0xWT0ZTTFNCOworCisJc3RkX2Vycl9tYWluID0gcmVhZGxfcmVsYXhlZChsM190YXJnX3N0ZGVycik7CisKKwlzd2l0Y2ggKHN0ZF9lcnJfbWFpbiAmIENVU1RPTV9FUlJPUikgeworCWNhc2UgU1RBTkRBUkRfRVJST1I6CisJCWVycl9kZXNjcmlwdGlvbiA9ICJTdGFuZGFyZCI7CisJCXNucHJpbnRmKGVycl9zdHJpbmcsIHNpemVvZihlcnJfc3RyaW5nKSwKKwkJCSAiOiBBdCBBZGRyZXNzOiAweCUwOFggIiwKKwkJCSByZWFkbF9yZWxheGVkKGwzX3Rhcmdfc2x2b2ZzbHNiKSk7CisKKwkJbDNfdGFyZ19tc3RhZGRyID0gbDNfdGFyZ19iYXNlICsgTDNfVEFSR19TVERFUlJMT0dfTVNUQUREUjsKKwkJbDNfdGFyZ19oZHIgPSBsM190YXJnX2Jhc2UgKyBMM19UQVJHX1NUREVSUkxPR19IRFI7CisJCWwzX3RhcmdfaW5mbyA9IGwzX3RhcmdfYmFzZSArIEwzX1RBUkdfU1RERVJSTE9HX0lORk87CisJCWJyZWFrOworCisJY2FzZSBDVVNUT01fRVJST1I6CisJCWVycl9kZXNjcmlwdGlvbiA9ICJDdXN0b20iOworCisJCWwzX3RhcmdfbXN0YWRkciA9IGwzX3RhcmdfYmFzZSArCisJCQkJICBMM19UQVJHX1NUREVSUkxPR19DSU5GT19NU1RBRERSOworCQlsM190YXJnX2hkciA9IGwzX3RhcmdfYmFzZSArIEwzX1RBUkdfU1RERVJSTE9HX0NJTkZPX09QQ09ERTsKKwkJbDNfdGFyZ19pbmZvID0gbDNfdGFyZ19iYXNlICsgTDNfVEFSR19TVERFUlJMT0dfQ0lORk9fSU5GTzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBOb3RoaW5nIHRvIGJlIGhhbmRsZWQgaGVyZSBhcyBvZiBub3cgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogU1RERVJSTE9HX01TVEFERFIgU3RvcmVzIHRoZSBOVFRQIG1hc3RlciBhZGRyZXNzLiAqLworCW1hc3RlcmlkID0gKHJlYWRsX3JlbGF4ZWQobDNfdGFyZ19tc3RhZGRyKSAmCisJCSAgICBsMy0+bXN0X2FkZHJfbWFzaykgPj4gX19mZnMobDMtPm1zdF9hZGRyX21hc2spOworCisJZm9yIChrID0gMCwgbWFzdGVyID0gbDMtPmwzX21hc3RlcnM7IGsgPCBsMy0+bnVtX21hc3RlcnM7CisJICAgICBrKyssIG1hc3RlcisrKSB7CisJCWlmIChtYXN0ZXJpZCA9PSBtYXN0ZXItPmlkKSB7CisJCQltYXN0ZXJfbmFtZSA9IG1hc3Rlci0+bmFtZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJb3BfY29kZSA9IHJlYWRsX3JlbGF4ZWQobDNfdGFyZ19oZHIpICYgMHg3OworCisJbV9yZXFfaW5mbyA9IHJlYWRsX3JlbGF4ZWQobDNfdGFyZ19pbmZvKSAmIDB4RjsKKwlzbnByaW50ZihpbmZvX3N0cmluZywgc2l6ZW9mKGluZm9fc3RyaW5nKSwKKwkJICI6ICVzIGluICVzIG1vZGUgZHVyaW5nICVzIGFjY2VzcyIsCisJCSAobV9yZXFfaW5mbyAmIEJJVCgwKSkgPyAiT3Bjb2RlIEZldGNoIiA6ICJEYXRhIEFjY2VzcyIsCisJCSAobV9yZXFfaW5mbyAmIEJJVCgxKSkgPyAiU3VwZXJ2aXNvciIgOiAiVXNlciIsCisJCSAobV9yZXFfaW5mbyAmIEJJVCgzKSkgPyAiRGVidWciIDogIkZ1bmN0aW9uYWwiKTsKKworCVdBUk4odHJ1ZSwKKwkgICAgICIlczpMMyAlcyBFcnJvcjogTUFTVEVSICVzIFRBUkdFVCAlcyAoJXMpJXMlc1xuIiwKKwkgICAgIGRldl9uYW1lKGwzLT5kZXYpLAorCSAgICAgZXJyX2Rlc2NyaXB0aW9uLAorCSAgICAgbWFzdGVyX25hbWUsIHRhcmdldF9uYW1lLAorCSAgICAgbDNfdHJhbnNhY3Rpb25fdHlwZVtvcF9jb2RlXSwKKwkgICAgIGVycl9zdHJpbmcsIGluZm9fc3RyaW5nKTsKKworCS8qIGNsZWFyIHRoZSBzdGQgZXJyb3IgbG9nKi8KKwljbGVhciA9IHN0ZF9lcnJfbWFpbiB8IENMRUFSX1NUREVSUl9MT0c7CisJd3JpdGVsX3JlbGF4ZWQoY2xlYXIsIGwzX3Rhcmdfc3RkZXJyKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGwzX2ludGVycnVwdF9oYW5kbGVyKCkgLSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgbDMgZXZlbnRzCisgKiBAaXJxOglpcnEgbnVtYmVyCisgKiBAX2wzOglwb2ludGVyIHRvIGwzIHN0cnVjdHVyZQorICoKKyAqIEludGVycnVwdCBIYW5kbGVyIGZvciBMMyBlcnJvciBkZXRlY3Rpb24uCisgKgkxKSBJZGVudGlmeSB0aGUgTDMgY2xvY2tkb21haW4gcGFydGl0aW9uIHRvIHdoaWNoIHRoZSBlcnJvciBiZWxvbmdzIHRvLgorICoJMikgSWRlbnRpZnkgdGhlIHNsYXZlIHdoZXJlIHRoZSBlcnJvciBpbmZvcm1hdGlvbiBpcyBsb2dnZWQKKyAqCS4uLiBoYW5kbGUgdGhlIHNsYXZlIGV2ZW50Li4KKyAqCTcpIGlmIHRoZSBzbGF2ZSBpcyB1bmtub3duLCBtYXNrIG91dCB0aGUgc2xhdmUuCisgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBsM19pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpfbDMpCiB7Ci0KLQlzdHJ1Y3Qgb21hcDRfbDMgKmwzID0gX2wzOwotCWludCBpbnR0eXBlLCBpLCBrOworCXN0cnVjdCBvbWFwX2wzICpsMyA9IF9sMzsKKwlpbnQgaW50dHlwZSwgaSwgcmV0OwogCWludCBlcnJfc3JjID0gMDsKLQl1MzIgc3RkX2Vycl9tYWluLCBlcnJfcmVnLCBjbGVhciwgbWFzdGVyaWQ7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlLCAqbDNfdGFyZ19iYXNlOwotCWNoYXIgKnRhcmdldF9uYW1lLCAqbWFzdGVyX25hbWUgPSAiVU4gSURFTlRJRklFRCI7CisJdTMyIGVycl9yZWcsIG1hc2tfdmFsOworCXZvaWQgX19pb21lbSAqYmFzZSwgKm1hc2tfcmVnOworCXN0cnVjdCBsM19mbGFnbXV4X2RhdGEgKmZsYWdfbXV4OwogCiAJLyogR2V0IHRoZSBUeXBlIG9mIGludGVycnVwdCAqLwogCWludHR5cGUgPSBpcnEgPT0gbDMtPmFwcF9pcnEgPyBMM19BUFBMSUNBVElPTl9FUlJPUiA6IEwzX0RFQlVHX0VSUk9SOwogCi0JZm9yIChpID0gMDsgaSA8IEwzX01PRFVMRVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsMy0+bnVtX21vZHVsZXM7IGkrKykgewogCQkvKgogCQkgKiBSZWFkIHRoZSByZWdlcnIgcmVnaXN0ZXIgb2YgdGhlIGNsb2NrIGRvbWFpbgogCQkgKiB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZQogCQkgKi8KIAkJYmFzZSA9IGwzLT5sM19iYXNlW2ldOwotCQllcnJfcmVnID0gX19yYXdfcmVhZGwoYmFzZSArIGwzX2ZsYWdtdXhbaV0gKwotCQkJCQkrIEwzX0ZMQUdNVVhfUkVHRVJSMCArIChpbnR0eXBlIDw8IDMpKTsKKwkJZmxhZ19tdXggPSBsMy0+bDNfZmxhZ211eFtpXTsKKwkJZXJyX3JlZyA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIGZsYWdfbXV4LT5vZmZzZXQgKworCQkJCQlMM19GTEFHTVVYX1JFR0VSUjAgKyAoaW50dHlwZSA8PCAzKSk7CisKKwkJZXJyX3JlZyAmPSB+KGludHR5cGUgPyBmbGFnX211eC0+bWFza19hcHBfYml0cyA6CisJCQkJZmxhZ19tdXgtPm1hc2tfZGJnX2JpdHMpOwogCiAJCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBhbmQgYW5hbHlzZSAqLwogCQlpZiAoZXJyX3JlZykgewogCQkJLyogSWRlbnRpZnkgdGhlIHNvdXJjZSBmcm9tIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyICovCiAJCQllcnJfc3JjID0gX19mZnMoZXJyX3JlZyk7CiAKLQkJCS8qIFJlYWQgdGhlIHN0ZGVycmxvZ19tYWluX3NvdXJjZSBmcm9tIGNsayBkb21haW4gKi8KLQkJCWwzX3RhcmdfYmFzZSA9IGJhc2UgKyAqKGwzX3RhcmdbaV0gKyBlcnJfc3JjKTsKLQkJCXN0ZF9lcnJfbWFpbiA9ICBfX3Jhd19yZWFkbChsM190YXJnX2Jhc2UgKwotCQkJCQlMM19UQVJHX1NUREVSUkxPR19NQUlOKTsKLQkJCW1hc3RlcmlkID0gX19yYXdfcmVhZGwobDNfdGFyZ19iYXNlICsKLQkJCQkJTDNfVEFSR19TVERFUlJMT0dfTVNUQUREUik7CisJCQlyZXQgPSBsM19oYW5kbGVfdGFyZ2V0KGwzLCBiYXNlLCBmbGFnX211eCwgZXJyX3NyYyk7CiAKLQkJCXN3aXRjaCAoc3RkX2Vycl9tYWluICYgQ1VTVE9NX0VSUk9SKSB7Ci0JCQljYXNlIFNUQU5EQVJEX0VSUk9SOgotCQkJCXRhcmdldF9uYW1lID0KLQkJCQkJbDNfdGFyZ19pbnN0X25hbWVbaV1bZXJyX3NyY107Ci0JCQkJV0FSTih0cnVlLCAiTDMgc3RhbmRhcmQgZXJyb3I6IFRBUkdFVDolcyBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQkJCXRhcmdldF9uYW1lLAotCQkJCQlfX3Jhd19yZWFkbChsM190YXJnX2Jhc2UgKwotCQkJCQkJTDNfVEFSR19TVERFUlJMT0dfU0xWT0ZTTFNCKSk7Ci0JCQkJLyogY2xlYXIgdGhlIHN0ZCBlcnJvciBsb2cqLwotCQkJCWNsZWFyID0gc3RkX2Vycl9tYWluIHwgQ0xFQVJfU1RERVJSX0xPRzsKLQkJCQl3cml0ZWwoY2xlYXIsIGwzX3RhcmdfYmFzZSArCi0JCQkJCUwzX1RBUkdfU1RERVJSTE9HX01BSU4pOwotCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIENlcnRhaW4gcGxhZm9ybXMgbWF5IGhhdmUgInVuZG9jdW1lbnRlZCIgc3RhdHVzCisJCQkgKiBwZW5kaW5nIG9uIGJvb3QuIFNvIGRvbnQgZ2VuZXJhdGUgYSBzZXZlcmUgd2FybmluZworCQkJICogaGVyZS4gSnVzdCBtYXNrIGl0IG9mZiB0byBwcmV2ZW50IHRoZSBlcnJvciBmcm9tCisJCQkgKiByZW9jY3VyaW5nIGFuZCBsb2NraW5nIHVwIHRoZSBzeXN0ZW0uCisJCQkgKi8KKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGwzLT5kZXYsCisJCQkJCSJMMyAlcyBlcnJvcjogdGFyZ2V0ICVkIG1vZDolZCAlc1xuIiwKKwkJCQkJaW50dHlwZSA/ICJkZWJ1ZyIgOiAiYXBwbGljYXRpb24iLAorCQkJCQllcnJfc3JjLCBpLCAiKHVuY2xlYXJhYmxlKSIpOwogCi0JCQljYXNlIENVU1RPTV9FUlJPUjoKLQkJCQl0YXJnZXRfbmFtZSA9Ci0JCQkJCWwzX3RhcmdfaW5zdF9uYW1lW2ldW2Vycl9zcmNdOwotCQkJCWZvciAoayA9IDA7IGsgPCBOVU1fT0ZfTDNfTUFTVEVSUzsgaysrKSB7Ci0JCQkJCWlmIChtYXN0ZXJpZCA9PSBsM19tYXN0ZXJzW2tdLmlkKQotCQkJCQkJbWFzdGVyX25hbWUgPQotCQkJCQkJCWwzX21hc3RlcnNba10ubmFtZTsKLQkJCQl9Ci0JCQkJV0FSTih0cnVlLCAiTDMgY3VzdG9tIGVycm9yOiBNQVNURVI6JXMgVEFSR0VUOiVzXG4iLAotCQkJCQltYXN0ZXJfbmFtZSwgdGFyZ2V0X25hbWUpOwotCQkJCS8qIGNsZWFyIHRoZSBzdGQgZXJyb3IgbG9nKi8KLQkJCQljbGVhciA9IHN0ZF9lcnJfbWFpbiB8IENMRUFSX1NUREVSUl9MT0c7Ci0JCQkJd3JpdGVsKGNsZWFyLCBsM190YXJnX2Jhc2UgKwotCQkJCQlMM19UQVJHX1NUREVSUkxPR19NQUlOKTsKLQkJCQlicmVhazsKKwkJCQltYXNrX3JlZyA9IGJhc2UgKyBmbGFnX211eC0+b2Zmc2V0ICsKKwkJCQkJICAgTDNfRkxBR01VWF9NQVNLMCArIChpbnR0eXBlIDw8IDMpOworCQkJCW1hc2tfdmFsID0gcmVhZGxfcmVsYXhlZChtYXNrX3JlZyk7CisJCQkJbWFza192YWwgJj0gfigxIDw8IGVycl9zcmMpOworCQkJCXdyaXRlbF9yZWxheGVkKG1hc2tfdmFsLCBtYXNrX3JlZyk7CiAKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogTm90aGluZyB0byBiZSBoYW5kbGVkIGhlcmUgYXMgb2Ygbm93ICovCi0JCQkJYnJlYWs7CisJCQkJLyogTWFyayB0aGVzZSBiaXRzIGFzIHRvIGJlIGlnbm9yZWQgKi8KKwkJCQlpZiAoaW50dHlwZSkKKwkJCQkJZmxhZ19tdXgtPm1hc2tfYXBwX2JpdHMgfD0gMSA8PCBlcnJfc3JjOworCQkJCWVsc2UKKwkJCQkJZmxhZ19tdXgtPm1hc2tfZGJnX2JpdHMgfD0gMSA8PCBlcnJfc3JjOwogCQkJfQotCQkvKiBFcnJvciBmb3VuZCBzbyBicmVhayB0aGUgZm9yIGxvb3AgKi8KLQkJYnJlYWs7CisKKwkJCS8qIEVycm9yIGZvdW5kIHNvIGJyZWFrIHRoZSBmb3IgbG9vcCAqLworCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IG9tYXA0X2wzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RhdGljIHN0cnVjdCBvbWFwNF9sMyAqbDM7Ci0Jc3RydWN0IHJlc291cmNlCSpyZXM7Ci0JaW50IHJldDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGwzX25vY19tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1sMy1ub2MiLCAuZGF0YSA9ICZvbWFwX2wzX2RhdGF9LAorCXsuY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWwzLW5vYyIsIC5kYXRhID0gJmRyYV9sM19kYXRhfSwKKwl7LmNvbXBhdGlibGUgPSAidGksYW00MzcyLWwzLW5vYyIsIC5kYXRhID0gJmFtNDM3Ml9sM19kYXRhfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsM19ub2NfbWF0Y2gpOwogCi0JbDMgPSBremFsbG9jKHNpemVvZigqbDMpLCBHRlBfS0VSTkVMKTsKK3N0YXRpYyBpbnQgb21hcF9sM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOworCXN0YXRpYyBzdHJ1Y3Qgb21hcF9sMyAqbDM7CisJaW50IHJldCwgaSwgcmVzX2lkeDsKKworCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGwzX25vY19tYXRjaCwgJnBkZXYtPmRldik7CisJaWYgKCFvZl9pZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJPRiBkYXRhIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsMyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmwzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsMykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwltZW1jcHkobDMsIG9mX2lkLT5kYXRhLCBzaXplb2YoKmwzKSk7CisJbDMtPmRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbDMpOwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCByZXNvdXJjZSAwXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIwOwotCX0KIAotCWwzLT5sM19iYXNlWzBdID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghbDMtPmwzX2Jhc2VbMF0pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjA7Ci0JfQorCS8qIEdldCBtZW0gcmVzb3VyY2VzICovCisJZm9yIChpID0gMCwgcmVzX2lkeCA9IDA7IGkgPCBsMy0+bnVtX21vZHVsZXM7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCByZXNvdXJjZSAxXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIxOwotCX0KLQotCWwzLT5sM19iYXNlWzFdID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghbDMtPmwzX2Jhc2VbMV0pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBmaW5kIHJlc291cmNlIDJcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JbDMtPmwzX2Jhc2VbMl0gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JaWYgKCFsMy0+bDNfYmFzZVsyXSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKKwkJaWYgKGwzLT5sM19iYXNlW2ldID09IEwzX0JBU0VfSVNfU1VCTU9EVUxFKSB7CisJCQkvKiBGaXJzdCBlbnRyeSBjYW5ub3QgYmUgc3VibW9kdWxlICovCisJCQlCVUdfT04oaSA9PSAwKTsKKwkJCWwzLT5sM19iYXNlW2ldID0gbDMtPmwzX2Jhc2VbaSAtIDFdOworCQkJY29udGludWU7CisJCX0KKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCByZXNfaWR4KTsKKwkJbDMtPmwzX2Jhc2VbaV0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwkJaWYgKElTX0VSUihsMy0+bDNfYmFzZVtpXSkpIHsKKwkJCWRldl9lcnIobDMtPmRldiwgImlvcmVtYXAgJWQgZmFpbGVkXG4iLCBpKTsKKwkJCXJldHVybiBQVFJfRVJSKGwzLT5sM19iYXNlW2ldKTsKKwkJfQorCQlyZXNfaWR4Kys7CiAJfQogCiAJLyoKIAkgKiBTZXR1cCBpbnRlcnJ1cHQgSGFuZGxlcnMKIAkgKi8KIAlsMy0+ZGVidWdfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlyZXQgPSByZXF1ZXN0X2lycShsMy0+ZGVidWdfaXJxLAotCQkJbDNfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQlJUlFGX0RJU0FCTEVELCAibDMtZGJnLWlycSIsIGwzKTsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGwzLT5kZXYsIGwzLT5kZWJ1Z19pcnEsIGwzX2ludGVycnVwdF9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfRElTQUJMRUQsICJsMy1kYmctaXJxIiwgbDMpOwogCWlmIChyZXQpIHsKLQkJcHJfY3JpdCgiTDM6IHJlcXVlc3RfaXJxIGZhaWxlZCB0byByZWdpc3RlciBmb3IgMHgleFxuIiwKLQkJCQkJCWwzLT5kZWJ1Z19pcnEpOwotCQlnb3RvIGVycjM7CisJCWRldl9lcnIobDMtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgJWRcbiIsCisJCQlsMy0+ZGVidWdfaXJxKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlsMy0+YXBwX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JcmV0ID0gcmVxdWVzdF9pcnEobDMtPmFwcF9pcnEsCi0JCQlsM19pbnRlcnJ1cHRfaGFuZGxlciwKLQkJCUlSUUZfRElTQUJMRUQsICJsMy1hcHAtaXJxIiwgbDMpOwotCWlmIChyZXQpIHsKLQkJcHJfY3JpdCgiTDM6IHJlcXVlc3RfaXJxIGZhaWxlZCB0byByZWdpc3RlciBmb3IgMHgleFxuIiwKLQkJCQkJCWwzLT5hcHBfaXJxKTsKLQkJZ290byBlcnI0OwotCX0KKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGwzLT5kZXYsIGwzLT5hcHBfaXJxLCBsM19pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX0RJU0FCTEVELCAibDMtYXBwLWlycSIsIGwzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGwzLT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yICVkXG4iLCBsMy0+YXBwX2lycSk7CiAKLQlyZXR1cm4gMDsKLQotZXJyNDoKLQlmcmVlX2lycShsMy0+ZGVidWdfaXJxLCBsMyk7Ci1lcnIzOgotCWlvdW5tYXAobDMtPmwzX2Jhc2VbMl0pOwotZXJyMjoKLQlpb3VubWFwKGwzLT5sM19iYXNlWzFdKTsKLWVycjE6Ci0JaW91bm1hcChsMy0+bDNfYmFzZVswXSk7Ci1lcnIwOgotCWtmcmVlKGwzKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9tYXA0X2wzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBvbWFwNF9sMyAqbDMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWZyZWVfaXJxKGwzLT5hcHBfaXJxLCBsMyk7Ci0JZnJlZV9pcnEobDMtPmRlYnVnX2lycSwgbDMpOwotCWlvdW5tYXAobDMtPmwzX2Jhc2VbMF0pOwotCWlvdW5tYXAobDMtPmwzX2Jhc2VbMV0pOwotCWlvdW5tYXAobDMtPmwzX2Jhc2VbMl0pOwotCWtmcmVlKGwzKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfT0YpCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBsM19ub2NfbWF0Y2hbXSA9IHsKLQl7LmNvbXBhdGlibGUgPSAidGksb21hcDQtbDMtbm9jIiwgfSwKLQl7fSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsM19ub2NfbWF0Y2gpOwotI2Vsc2UKLSNkZWZpbmUgbDNfbm9jX21hdGNoIE5VTEwKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwNF9sM19kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IG9tYXA0X2wzX3Byb2JlLAotCS5yZW1vdmUJCT0gb21hcDRfbDNfcmVtb3ZlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9sM19kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9tYXBfbDNfcHJvYmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJvbWFwX2wzX25vYyIsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gbDNfbm9jX21hdGNoLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIobDNfbm9jX21hdGNoKSwKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgb21hcDRfbDNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcF9sM19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDRfbDNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX2wzX2RyaXZlcik7CiB9Ci1wb3N0Y29yZV9pbml0Y2FsbF9zeW5jKG9tYXA0X2wzX2luaXQpOworcG9zdGNvcmVfaW5pdGNhbGxfc3luYyhvbWFwX2wzX2luaXQpOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgb21hcDRfbDNfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG9tYXBfbDNfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwNF9sM19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX2wzX2RyaXZlcik7CiB9Ci1tb2R1bGVfZXhpdChvbWFwNF9sM19leGl0KTsKK21vZHVsZV9leGl0KG9tYXBfbDNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9vbWFwX2wzX25vYy5oIGIvZHJpdmVycy9idXMvb21hcF9sM19ub2MuaAppbmRleCBhNmNlMzRkLi41NTFlMDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9vbWFwX2wzX25vYy5oCisrKyBiL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmgKQEAgLTEsMjkgKzEsMjUgQEAKIC8qCi0gKiBPTUFQNFhYWCBMMyBJbnRlcmNvbm5lY3QgIGVycm9yIGhhbmRsaW5nIGRyaXZlciBoZWFkZXIKKyAqIE9NQVAgTDMgSW50ZXJjb25uZWN0ICBlcnJvciBoYW5kbGluZyBkcml2ZXIgaGVhZGVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRleGFzIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KICAqCVNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CiAgKglzcmljaGFyYW4gPHIuc3JpY2hhcmFuQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKLSAqIFVTQQogICovCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9MM19JTlRFUkNPTk5FQ1RfM1hYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9MM19JTlRFUkNPTk5FQ1RfM1hYWF9ICisjaWZuZGVmIF9fT01BUF9MM19OT0NfSAorI2RlZmluZSBfX09NQVBfTDNfTk9DX0gKIAotI2RlZmluZSBMM19NT0RVTEVTCQkJMworI2RlZmluZSBNQVhfTDNfTU9EVUxFUwkJCTMKKyNkZWZpbmUgTUFYX0NMS0RNX1RBUkdFVFMJCTMxCisKICNkZWZpbmUgQ0xFQVJfU1RERVJSX0xPRwkJKDEgPDwgMzEpCiAjZGVmaW5lIENVU1RPTV9FUlJPUgkJCTB4MgogI2RlZmluZSBTVEFOREFSRF9FUlJPUgkJCTB4MApAQCAtMzMsNjMgKzI5LDE2NSBAQAogCiAvKiBMMyBUQVJHIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgTDNfVEFSR19TVERFUlJMT0dfTUFJTgkJMHg0OAorI2RlZmluZSBMM19UQVJHX1NUREVSUkxPR19IRFIJCTB4NGMKKyNkZWZpbmUgTDNfVEFSR19TVERFUlJMT0dfTVNUQUREUgkweDUwCisjZGVmaW5lIEwzX1RBUkdfU1RERVJSTE9HX0lORk8JCTB4NTgKICNkZWZpbmUgTDNfVEFSR19TVERFUlJMT0dfU0xWT0ZTTFNCCTB4NWMKLSNkZWZpbmUgTDNfVEFSR19TVERFUlJMT0dfTVNUQUREUgkweDY4CisjZGVmaW5lIEwzX1RBUkdfU1RERVJSTE9HX0NJTkZPX0lORk8JMHg2NAorI2RlZmluZSBMM19UQVJHX1NUREVSUkxPR19DSU5GT19NU1RBRERSCTB4NjgKKyNkZWZpbmUgTDNfVEFSR19TVERFUlJMT0dfQ0lORk9fT1BDT0RFCTB4NmMKICNkZWZpbmUgTDNfRkxBR01VWF9SRUdFUlIwCQkweGMKKyNkZWZpbmUgTDNfRkxBR01VWF9NQVNLMAkJMHg4CiAKLSNkZWZpbmUgTlVNX09GX0wzX01BU1RFUlMJKHNpemVvZihsM19tYXN0ZXJzKS9zaXplb2YobDNfbWFzdGVyc1swXSkpCisjZGVmaW5lIEwzX1RBUkdFVF9OT1RfU1VQUE9SVEVECQlOVUxMCiAKLXN0YXRpYyB1MzIgbDNfZmxhZ211eFtMM19NT0RVTEVTXSA9IHsKLQkweDUwMCwKLQkweDEwMDAsCi0JMFgwMjAwCisjZGVmaW5lIEwzX0JBU0VfSVNfU1VCTU9EVUxFCQkoKHZvaWQgX19pb21lbSAqKSgxIDw8IDApKQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGwzX3RyYW5zYWN0aW9uX3R5cGVbXSA9IHsKKwkvKiAwIDAgMCAqLyAiSWRsZSIsCisJLyogMCAwIDEgKi8gIldyaXRlIiwKKwkvKiAwIDEgMCAqLyAiUmVhZCIsCisJLyogMCAxIDEgKi8gIlJlYWRFeCIsCisJLyogMSAwIDAgKi8gIlJlYWQgTGluayIsCisJLyogMSAwIDEgKi8gIldyaXRlIE5vbi1Qb3N0ZWQiLAorCS8qIDEgMSAwICovICJXcml0ZSBDb25kaXRpb25hbCIsCisJLyogMSAxIDEgKi8gIldyaXRlIEJyb2FkY2FzdCIsCiB9OwogCi0vKiBMMyBUYXJnZXQgc3RhbmRhcmQgRXJyb3IgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotc3RhdGljIHUzMiBsM190YXJnX2luc3RfY2xrMVtdID0gewotCTB4MTAwLCAvKiBETU0xICovCi0JMHgyMDAsIC8qIERNTTIgKi8KLQkweDMwMCwgLyogQUJFICovCi0JMHg0MDAsIC8qIEw0Q0ZHICovCi0JMHg2MDAsICAvKiBDTEsyIFBXUiBESVNDICovCi0JMHgwLAkvKiBIb3N0IENMSzEgKi8KLQkweDkwMAkvKiBMNCBXYWtldXAgKi8KLX07Ci0KLXN0YXRpYyB1MzIgbDNfdGFyZ19pbnN0X2NsazJbXSA9IHsKLQkweDUwMCwgLyogQ09SVEVYIE0zICovCi0JMHgzMDAsIC8qIERTUyAqLwotCTB4MTAwLCAvKiBHUE1DICovCi0JMHg0MDAsIC8qIElTUyAqLwotCTB4NzAwLCAvKiBJVkFIRCAqLwotCTB4RDAwLCAvKiBtaXNzaW5nIGluIFRSTSAgY29ycmVzcG9uZHMgdG8gQUVTMSovCi0JMHg5MDAsIC8qIEw0IFBFUjAqLwotCTB4MjAwLCAvKiBPQ01SQU0gKi8KLQkweDEwMCwgLyogbWlzc2luZyBpbiBUUk0gY29ycmVzcG9uZHMgdG8gR1BNQyBzRVJST1IqLwotCTB4NjAwLCAvKiBTR1ggKi8KLQkweDgwMCwgLyogU0wyICovCi0JMHgxNjAwLCAvKiBDMkMgKi8KLQkweDExMDAsCS8qIG1pc3NpbmcgaW4gVFJNIGNvcnJlc3BvbmRzIFBXUiBESVNDIENMSzEqLwotCTB4RjAwLCAvKiBtaXNzaW5nIGluIFRSTSBjb3Jyc3BvbmRzIHRvIFNIQTEqLwotCTB4RTAwLCAvKiBtaXNzaW5nIGluIFRSTSBjb3JyZXNwb25kcyB0byBBRVMyKi8KLQkweEMwMCwgLyogTDQgUEVSMyAqLwotCTB4QTAwLCAvKiBMNCBQRVIxKi8KLQkweEIwMCwgLyogTDQgUEVSMiovCi0JMHgwLCAvKiBIT1NUIENMSzIgKi8KLQkweDE4MDAsIC8qIENBTCAqLwotCTB4MTcwMCAvKiBMTEkgKi8KLX07Ci0KLXN0YXRpYyB1MzIgbDNfdGFyZ19pbnN0X2NsazNbXSA9IHsKLQkweDAxMDAJLyogRU1VU1MgKi8sCi0JMHgwMzAwLCAvKiBERUJVR1NTX0NUX1RCUiAqLwotCTB4MCAvKiBIT1NUIENMSzMgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbDNfbWFzdGVyc19kYXRhIHsKKy8qKgorICogc3RydWN0IGwzX21hc3RlcnNfZGF0YSAtIEwzIE1hc3RlciBpbmZvcm1hdGlvbgorICogQGlkOgkJSUQgb2YgdGhlIEwzIE1hc3RlcgorICogQG5hbWU6CW1hc3RlciBuYW1lCisgKi8KK3N0cnVjdCBsM19tYXN0ZXJzX2RhdGEgewogCXUzMiBpZDsKLQljaGFyIG5hbWVbMTBdOwotfSBsM19tYXN0ZXJzW10gPSB7CisJY2hhciAqbmFtZTsKK307CisKKy8qKgorICogc3RydWN0IGwzX3RhcmdldF9kYXRhIC0gTDMgVGFyZ2V0IGluZm9ybWF0aW9uCisgKiBAb2Zmc2V0OglPZmZzZXQgZnJvbSBiYXNlIGZvciBMMyBUYXJnZXQKKyAqIEBuYW1lOglUYXJnZXQgbmFtZQorICoKKyAqIFRhcmdldCBpbmZvcm1hdGlvbiBpcyBvcmdhbml6ZWQgaW5kZXhlZCBieSBiaXQgZmllbGQgZGVmaW5pdGlvbnMuCisgKi8KK3N0cnVjdCBsM190YXJnZXRfZGF0YSB7CisJdTMyIG9mZnNldDsKKwljaGFyICpuYW1lOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbDNfZmxhZ211eF9kYXRhIC0gRmxhZyBNdXggaW5mb3JtYXRpb24KKyAqIEBvZmZzZXQ6CW9mZnNldCBmcm9tIGJhc2UgZm9yIGZsYWdtdXggcmVnaXN0ZXIKKyAqIEBsM190YXJnOglhcnJheSBpbmRleGVkIGJ5IGZsYWdtdXggaW5kZXggKGJpdCBvZmZzZXQpIHBvaW50aW5nIHRvIHRoZQorICoJCXRhcmdldCBkYXRhLiB1bnN1cHBvcnRlZCBvbmVzIGFyZSBtYXJrZWQgd2l0aAorICoJCUwzX1RBUkdFVF9OT1RfU1VQUE9SVEVECisgKiBAbnVtX3RhcmdfZGF0YTogbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFyZ2V0IGRhdGEKKyAqIEBtYXNrX2FwcF9iaXRzOiBpZ25vcmUgdGhlc2UgZnJvbSByYXcgYXBwbGljYXRpb24gaXJxIHN0YXR1cworICogQG1hc2tfZGJnX2JpdHM6IGlnbm9yZSB0aGVzZSBmcm9tIHJhdyBkZWJ1ZyBpcnEgc3RhdHVzCisgKi8KK3N0cnVjdCBsM19mbGFnbXV4X2RhdGEgeworCXUzMiBvZmZzZXQ7CisJc3RydWN0IGwzX3RhcmdldF9kYXRhICpsM190YXJnOworCXU4IG51bV90YXJnX2RhdGE7CisJdTMyIG1hc2tfYXBwX2JpdHM7CisJdTMyIG1hc2tfZGJnX2JpdHM7Cit9OworCisKKy8qKgorICogc3RydWN0IG9tYXBfbDMgLSBEZXNjcmlwdGlvbiBvZiBkYXRhIHJlbGV2YW50IGZvciBMMyBidXMuCisgKiBAZGV2OglkZXZpY2UgcmVwcmVzZW50aW5nIHRoZSBidXMgKHBvcHVsYXRlZCBydW50aW1lKQorICogQGwzX2Jhc2U6CWJhc2UgYWRkcmVzc2VzIG9mIG1vZHVsZXMgKHBvcHVsYXRlZCBydW50aW1lIGlmIDApCisgKgkJaWYgc2V0IHRvIEwzX0JBU0VfSVNfU1VCTU9EVUxFLCB0aGVuIHVzZXMgcHJldmlvdXMKKyAqCQltb2R1bGUgaW5kZXggYXMgdGhlIGJhc2UgYWRkcmVzcworICogQGwzX2ZsYWdfbXV4OiBhcnJheSBjb250YWluaW5nIGZsYWcgbXV4IGRhdGEgcGVyIG1vZHVsZQorICoJCSBvZmZzZXQgZnJvbSBjb3JyZXNwb25kaW5nIG1vZHVsZSBiYXNlIGluZGV4ZWQgcGVyCisgKgkJIG1vZHVsZS4KKyAqIEBudW1fbW9kdWxlczogbnVtYmVyIG9mIGNsb2NrIGRvbWFpbnMgLyBtb2R1bGVzLgorICogQGwzX21hc3RlcnM6CWFycmF5IHBvaW50aW5nIHRvIG1hc3RlciBkYXRhIGNvbnRhaW5pbmcgbmFtZSBhbmQgcmVnaXN0ZXIKKyAqCQlvZmZzZXQgZm9yIHRoZSBtYXN0ZXIuCisgKiBAbnVtX21hc3RlcjogbnVtYmVyIG9mIG1hc3RlcnMKKyAqIEBtc3RfYWRkcl9tYXNrOiBNYXNrIHJlcHJlc2VudGluZyBNU1RBRERSIGluZm9ybWF0aW9uIG9mIE5UVFAgcGFja2V0CisgKiBAZGVidWdfaXJxOglpcnEgbnVtYmVyIG9mIHRoZSBkZWJ1ZyBpbnRlcnJ1cHQgKHBvcHVsYXRlZCBydW50aW1lKQorICogQGFwcF9pcnE6CWlycSBudW1iZXIgb2YgdGhlIGFwcGxpY2F0aW9uIGludGVycnVwdCAocG9wdWxhdGVkIHJ1bnRpbWUpCisgKi8KK3N0cnVjdCBvbWFwX2wzIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwl2b2lkIF9faW9tZW0gKmwzX2Jhc2VbTUFYX0wzX01PRFVMRVNdOworCXN0cnVjdCBsM19mbGFnbXV4X2RhdGEgKipsM19mbGFnbXV4OworCWludCBudW1fbW9kdWxlczsKKworCXN0cnVjdCBsM19tYXN0ZXJzX2RhdGEgKmwzX21hc3RlcnM7CisJaW50IG51bV9tYXN0ZXJzOworCXUzMiBtc3RfYWRkcl9tYXNrOworCisJaW50IGRlYnVnX2lycTsKKwlpbnQgYXBwX2lycTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbDNfdGFyZ2V0X2RhdGEgb21hcF9sM190YXJnZXRfZGF0YV9jbGsxW10gPSB7CisJezB4MTAwLAkiRE1NMSIsfSwKKwl7MHgyMDAsCSJETU0yIix9LAorCXsweDMwMCwJIkFCRSIsfSwKKwl7MHg0MDAsCSJMNENGRyIsfSwKKwl7MHg2MDAsCSJDTEsyUFdSRElTQyIsfSwKKwl7MHgwLAkiSE9TVENMSzEiLH0sCisJezB4OTAwLAkiTDRXQUtFVVAiLH0sCit9OworCitzdGF0aWMgc3RydWN0IGwzX2ZsYWdtdXhfZGF0YSBvbWFwX2wzX2ZsYWdtdXhfY2xrMSA9IHsKKwkub2Zmc2V0ID0gMHg1MDAsCisJLmwzX3RhcmcgPSBvbWFwX2wzX3RhcmdldF9kYXRhX2NsazEsCisJLm51bV90YXJnX2RhdGEgPSBBUlJBWV9TSVpFKG9tYXBfbDNfdGFyZ2V0X2RhdGFfY2xrMSksCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgbDNfdGFyZ2V0X2RhdGEgb21hcF9sM190YXJnZXRfZGF0YV9jbGsyW10gPSB7CisJezB4NTAwLAkiQ09SVEVYTTMiLH0sCisJezB4MzAwLAkiRFNTIix9LAorCXsweDEwMCwJIkdQTUMiLH0sCisJezB4NDAwLAkiSVNTIix9LAorCXsweDcwMCwJIklWQUhEIix9LAorCXsweEQwMCwJIkFFUzEiLH0sCisJezB4OTAwLAkiTDRQRVIwIix9LAorCXsweDIwMCwJIk9DTVJBTSIsfSwKKwl7MHgxMDAsCSJHUE1Dc0VSUk9SIix9LAorCXsweDYwMCwJIlNHWCIsfSwKKwl7MHg4MDAsCSJTTDIiLH0sCisJezB4MTYwMCwgIkMyQyIsfSwKKwl7MHgxMTAwLCAiUFdSRElTQ0NMSzEiLH0sCisJezB4RjAwLAkiU0hBMSIsfSwKKwl7MHhFMDAsCSJBRVMyIix9LAorCXsweEMwMCwJIkw0UEVSMyIsfSwKKwl7MHhBMDAsCSJMNFBFUjEiLH0sCisJezB4QjAwLAkiTDRQRVIyIix9LAorCXsweDAsCSJIT1NUQ0xLMiIsfSwKKwl7MHgxODAwLCAiQ0FMIix9LAorCXsweDE3MDAsICJMTEkiLH0sCit9OworCitzdGF0aWMgc3RydWN0IGwzX2ZsYWdtdXhfZGF0YSBvbWFwX2wzX2ZsYWdtdXhfY2xrMiA9IHsKKwkub2Zmc2V0ID0gMHgxMDAwLAorCS5sM190YXJnID0gb21hcF9sM190YXJnZXRfZGF0YV9jbGsyLAorCS5udW1fdGFyZ19kYXRhID0gQVJSQVlfU0laRShvbWFwX2wzX3RhcmdldF9kYXRhX2NsazIpLAorfTsKKworCitzdGF0aWMgc3RydWN0IGwzX3RhcmdldF9kYXRhIG9tYXBfbDNfdGFyZ2V0X2RhdGFfY2xrM1tdID0geworCXsweDAxMDAsICJFTVVTUyIsfSwKKwl7MHgwMzAwLCAiREVCVUcgU09VUkNFIix9LAorCXsweDAsCSJIT1NUIENMSzMiLH0sCit9OworCitzdGF0aWMgc3RydWN0IGwzX2ZsYWdtdXhfZGF0YSBvbWFwX2wzX2ZsYWdtdXhfY2xrMyA9IHsKKwkub2Zmc2V0ID0gMHgwMjAwLAorCS5sM190YXJnID0gb21hcF9sM190YXJnZXRfZGF0YV9jbGszLAorCS5udW1fdGFyZ19kYXRhID0gQVJSQVlfU0laRShvbWFwX2wzX3RhcmdldF9kYXRhX2NsazMpLAorfTsKKworc3RhdGljIHN0cnVjdCBsM19tYXN0ZXJzX2RhdGEgb21hcF9sM19tYXN0ZXJzW10gPSB7CiAJeyAweDAgLCAiTVBVIn0sCiAJeyAweDEwLCAiQ1NfQURQIn0sCiAJeyAweDE0LCAieHh4In0sCkBAIC0xMTcsNjAgKzIxNSwyNjEgQEAKIAl7IDB4QzgsICJVU0JIT1NURlMifQogfTsKIAotc3RhdGljIGNoYXIgKmwzX3RhcmdfaW5zdF9uYW1lW0wzX01PRFVMRVNdWzIxXSA9IHsKLQl7Ci0JCSJETU0xIiwKLQkJIkRNTTIiLAotCQkiQUJFIiwKLQkJIkw0Q0ZHIiwKLQkJIkNMSzIgUFdSIERJU0MiLAotCQkiSE9TVCBDTEsxIiwKLQkJIkw0IFdBS0VVUCIKLQl9LAotCXsKLQkJIkNPUlRFWCBNMyIgLAotCQkiRFNTICIsCi0JCSJHUE1DICIsCi0JCSJJU1MgIiwKLQkJIklWQUhEICIsCi0JCSJBRVMxIiwKLQkJIkw0IFBFUjAiLAotCQkiT0NNUkFNICIsCi0JCSJHUE1DIHNFUlJPUiIsCi0JCSJTR1ggIiwKLQkJIlNMMiAiLAotCQkiQzJDICIsCi0JCSJQV1IgRElTQyBDTEsxIiwKLQkJIlNIQTEiLAotCQkiQUVTMiIsCi0JCSJMNCBQRVIzIiwKLQkJIkw0IFBFUjEiLAotCQkiTDQgUEVSMiIsCi0JCSJIT1NUIENMSzIiLAotCQkiQ0FMIiwKLQkJIkxMSSIKLQl9LAotCXsKLQkJIkVNVVNTIiwKLQkJIkRFQlVHIFNPVVJDRSIsCi0JCSJIT1NUIENMSzMiCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgbDNfZmxhZ211eF9kYXRhICpvbWFwX2wzX2ZsYWdtdXhbXSA9IHsKKwkmb21hcF9sM19mbGFnbXV4X2NsazEsCisJJm9tYXBfbDNfZmxhZ211eF9jbGsyLAorCSZvbWFwX2wzX2ZsYWdtdXhfY2xrMywKIH07CiAKLXN0YXRpYyB1MzIgKmwzX3RhcmdbTDNfTU9EVUxFU10gPSB7Ci0JbDNfdGFyZ19pbnN0X2NsazEsCi0JbDNfdGFyZ19pbnN0X2NsazIsCi0JbDNfdGFyZ19pbnN0X2NsazMsCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbDMgb21hcF9sM19kYXRhID0geworCS5sM19mbGFnbXV4ID0gb21hcF9sM19mbGFnbXV4LAorCS5udW1fbW9kdWxlcyA9IEFSUkFZX1NJWkUob21hcF9sM19mbGFnbXV4KSwKKwkubDNfbWFzdGVycyA9IG9tYXBfbDNfbWFzdGVycywKKwkubnVtX21hc3RlcnMgPSBBUlJBWV9TSVpFKG9tYXBfbDNfbWFzdGVycyksCisJLyogVGhlIDYgTVNCcyBvZiByZWdpc3RlciBmaWVsZCB1c2VkIHRvIGRpc3Rpbmd1aXNoIGluaXRpYXRvciAqLworCS5tc3RfYWRkcl9tYXNrID0gMHhGQywKIH07CiAKLXN0cnVjdCBvbWFwNF9sMyB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBjbGsgKmljazsKLQotCS8qIG1lbW9yeSBiYXNlICovCi0Jdm9pZCBfX2lvbWVtICpsM19iYXNlW0wzX01PRFVMRVNdOwotCi0JaW50IGRlYnVnX2lycTsKLQlpbnQgYXBwX2lycTsKKy8qIERSQTcgZGF0YSAqLworc3RhdGljIHN0cnVjdCBsM190YXJnZXRfZGF0YSBkcmFfbDNfdGFyZ2V0X2RhdGFfY2xrMVtdID0geworCXsweDJhMDAsICJBRVMxIix9LAorCXsweDAyMDAsICJETU1fUDEiLH0sCisJezB4MDYwMCwgIkRTUDJfU0RNQSIsfSwKKwl7MHgwYjAwLCAiRVZFMiIsfSwKKwl7MHgxMzAwLCAiRE1NX1AyIix9LAorCXsweDJjMDAsICJBRVMyIix9LAorCXsweDAzMDAsICJEU1AxX1NETUEiLH0sCisJezB4MGEwMCwgIkVWRTEiLH0sCisJezB4MGMwMCwgIkVWRTMiLH0sCisJezB4MGQwMCwgIkVWRTQiLH0sCisJezB4MjkwMCwgIkRTUyIsfSwKKwl7MHgwMTAwLCAiR1BNQyIsfSwKKwl7MHgzNzAwLCAiUENJRTEiLH0sCisJezB4MTYwMCwgIklWQV9DT05GSUciLH0sCisJezB4MTgwMCwgIklWQV9TTDJJRiIsfSwKKwl7MHgwNTAwLCAiTDRfQ0ZHIix9LAorCXsweDFkMDAsICJMNF9XS1VQIix9LAorCXsweDM4MDAsICJQQ0lFMiIsfSwKKwl7MHgzMzAwLCAiU0hBMl8xIix9LAorCXsweDEyMDAsICJHUFUiLH0sCisJezB4MTAwMCwgIklQVTEiLH0sCisJezB4MTEwMCwgIklQVTIiLH0sCisJezB4MjAwMCwgIlRQQ0NfRURNQSIsfSwKKwl7MHgyZTAwLCAiVFBUQzFfRURNQSIsfSwKKwl7MHgyYjAwLCAiVFBUQzJfRURNQSIsfSwKKwl7MHgwNzAwLCAiVkNQMSIsfSwKKwl7MHgyNTAwLCAiTDRfUEVSMl9QMyIsfSwKKwl7MHgwZTAwLCAiTDRfUEVSM19QMyIsfSwKKwl7MHgyMjAwLCAiTU1VMSIsfSwKKwl7MHgxNDAwLCAiUFJVU1MxIix9LAorCXsweDE1MDAsICJQUlVTUzIifSwKKwl7MHgwODAwLCAiVkNQMSIsfSwKIH07Ci0jZW5kaWYKKworc3RhdGljIHN0cnVjdCBsM19mbGFnbXV4X2RhdGEgZHJhX2wzX2ZsYWdtdXhfY2xrMSA9IHsKKwkub2Zmc2V0ID0gMHg4MDM1MDAsCisJLmwzX3RhcmcgPSBkcmFfbDNfdGFyZ2V0X2RhdGFfY2xrMSwKKwkubnVtX3RhcmdfZGF0YSA9IEFSUkFZX1NJWkUoZHJhX2wzX3RhcmdldF9kYXRhX2NsazEpLAorfTsKKworc3RhdGljIHN0cnVjdCBsM190YXJnZXRfZGF0YSBkcmFfbDNfdGFyZ2V0X2RhdGFfY2xrMltdID0geworCXsweDAsCSJIT1NUIENMSzEiLH0sCisJezB4MCwJIkhPU1QgQ0xLMiIsfSwKKwl7MHhkZWFkLCBMM19UQVJHRVRfTk9UX1NVUFBPUlRFRCx9LAorCXsweDM0MDAsICJTSEEyXzIiLH0sCisJezB4MDkwMCwgIkJCMkQiLH0sCisJezB4ZGVhZCwgTDNfVEFSR0VUX05PVF9TVVBQT1JURUQsfSwKKwl7MHgyMTAwLCAiTDRfUEVSMV9QMyIsfSwKKwl7MHgxYzAwLCAiTDRfUEVSMV9QMSIsfSwKKwl7MHgxZjAwLCAiTDRfUEVSMV9QMiIsfSwKKwl7MHgyMzAwLCAiTDRfUEVSMl9QMSIsfSwKKwl7MHgyNDAwLCAiTDRfUEVSMl9QMiIsfSwKKwl7MHgyNjAwLCAiTDRfUEVSM19QMSIsfSwKKwl7MHgyNzAwLCAiTDRfUEVSM19QMiIsfSwKKwl7MHgyZjAwLCAiTUNBU1AxIix9LAorCXsweDMwMDAsICJNQ0FTUDIiLH0sCisJezB4MzEwMCwgIk1DQVNQMyIsfSwKKwl7MHgyODAwLCAiTU1VMiIsfSwKKwl7MHgwZjAwLCAiT0NNQ19SQU0xIix9LAorCXsweDE3MDAsICJPQ01DX1JBTTIiLH0sCisJezB4MTkwMCwgIk9DTUNfUkFNMyIsfSwKKwl7MHgxZTAwLCAiT0NNQ19ST00iLH0sCisJezB4MzkwMCwgIlFTUEkiLH0sCit9OworCitzdGF0aWMgc3RydWN0IGwzX2ZsYWdtdXhfZGF0YSBkcmFfbDNfZmxhZ211eF9jbGsyID0geworCS5vZmZzZXQgPSAweDgwMzYwMCwKKwkubDNfdGFyZyA9IGRyYV9sM190YXJnZXRfZGF0YV9jbGsyLAorCS5udW1fdGFyZ19kYXRhID0gQVJSQVlfU0laRShkcmFfbDNfdGFyZ2V0X2RhdGFfY2xrMiksCit9OworCitzdGF0aWMgc3RydWN0IGwzX3RhcmdldF9kYXRhIGRyYV9sM190YXJnZXRfZGF0YV9jbGszW10gPSB7CisJezB4MDEwMCwgIkwzX0lOU1RSIn0sCisJezB4MDMwMCwgIkRFQlVHU1NfQ1RfVEJSIn0sCisJezB4MCwJICJIT1NUIENMSzMifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbDNfZmxhZ211eF9kYXRhIGRyYV9sM19mbGFnbXV4X2NsazMgPSB7CisJLm9mZnNldCA9IDB4MjAwLAorCS5sM190YXJnID0gZHJhX2wzX3RhcmdldF9kYXRhX2NsazMsCisJLm51bV90YXJnX2RhdGEgPSBBUlJBWV9TSVpFKGRyYV9sM190YXJnZXRfZGF0YV9jbGszKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbDNfbWFzdGVyc19kYXRhIGRyYV9sM19tYXN0ZXJzW10gPSB7CisJeyAweDAsICJNUFUiIH0sCisJeyAweDQsICJDU19EQVAiIH0sCisJeyAweDUsICJJRUVFMTUwMF8yX09DUCIgfSwKKwl7IDB4OCwgIkRTUDFfTURNQSIgfSwKKwl7IDB4OSwgIkRTUDFfQ0ZHIiB9LAorCXsgMHhBLCAiRFNQMV9ETUEiIH0sCisJeyAweEIsICJEU1AyX01ETUEiIH0sCisJeyAweEMsICJEU1AyX0NGRyIgfSwKKwl7IDB4RCwgIkRTUDJfRE1BIiB9LAorCXsgMHhFLCAiSVZBIiB9LAorCXsgMHgxMCwgIkVWRTFfUDEiIH0sCisJeyAweDExLCAiRVZFMl9QMSIgfSwKKwl7IDB4MTIsICJFVkUzX1AxIiB9LAorCXsgMHgxMywgIkVWRTRfUDEiIH0sCisJeyAweDE0LCAiUFJVU1MxIFBSVTEiIH0sCisJeyAweDE1LCAiUFJVU1MxIFBSVTIiIH0sCisJeyAweDE2LCAiUFJVU1MyIFBSVTEiIH0sCisJeyAweDE3LCAiUFJVU1MyIFBSVTIiIH0sCisJeyAweDE4LCAiSVBVMSIgfSwKKwl7IDB4MTksICJJUFUyIiB9LAorCXsgMHgxQSwgIlNETUEiIH0sCisJeyAweDFCLCAiQ0RNQSIgfSwKKwl7IDB4MUMsICJUQzFfRURNQSIgfSwKKwl7IDB4MUQsICJUQzJfRURNQSIgfSwKKwl7IDB4MjAsICJEU1MiIH0sCisJeyAweDIxLCAiTU1VMSIgfSwKKwl7IDB4MjIsICJQQ0lFMSIgfSwKKwl7IDB4MjMsICJNTVUyIiB9LAorCXsgMHgyNCwgIlZJUDEiIH0sCisJeyAweDI1LCAiVklQMiIgfSwKKwl7IDB4MjYsICJWSVAzIiB9LAorCXsgMHgyNywgIlZQRSIgfSwKKwl7IDB4MjgsICJHUFVfUDEiIH0sCisJeyAweDI5LCAiQkIyRCIgfSwKKwl7IDB4MjksICJHUFVfUDIiIH0sCisJeyAweDJCLCAiR01BQ19TVyIgfSwKKwl7IDB4MkMsICJVU0IzIiB9LAorCXsgMHgyRCwgIlVTQjJfU1MiIH0sCisJeyAweDJFLCAiVVNCMl9VTFBJX1NTMSIgfSwKKwl7IDB4MkYsICJVU0IyX1VMUElfU1MyIiB9LAorCXsgMHgzMCwgIkNTSTJfMSIgfSwKKwl7IDB4MzEsICJDU0kyXzIiIH0sCisJeyAweDMzLCAiU0FUQSIgfSwKKwl7IDB4MzQsICJFVkUxX1AyIiB9LAorCXsgMHgzNSwgIkVWRTJfUDIiIH0sCisJeyAweDM2LCAiRVZFM19QMiIgfSwKKwl7IDB4MzcsICJFVkU0X1AyIiB9Cit9OworCitzdGF0aWMgc3RydWN0IGwzX2ZsYWdtdXhfZGF0YSAqZHJhX2wzX2ZsYWdtdXhbXSA9IHsKKwkmZHJhX2wzX2ZsYWdtdXhfY2xrMSwKKwkmZHJhX2wzX2ZsYWdtdXhfY2xrMiwKKwkmZHJhX2wzX2ZsYWdtdXhfY2xrMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9sMyBkcmFfbDNfZGF0YSA9IHsKKwkubDNfYmFzZSA9IHsgWzFdID0gTDNfQkFTRV9JU19TVUJNT0RVTEUgfSwKKwkubDNfZmxhZ211eCA9IGRyYV9sM19mbGFnbXV4LAorCS5udW1fbW9kdWxlcyA9IEFSUkFZX1NJWkUoZHJhX2wzX2ZsYWdtdXgpLAorCS5sM19tYXN0ZXJzID0gZHJhX2wzX21hc3RlcnMsCisJLm51bV9tYXN0ZXJzID0gQVJSQVlfU0laRShkcmFfbDNfbWFzdGVycyksCisJLyogVGhlIDYgTVNCcyBvZiByZWdpc3RlciBmaWVsZCB1c2VkIHRvIGRpc3Rpbmd1aXNoIGluaXRpYXRvciAqLworCS5tc3RfYWRkcl9tYXNrID0gMHhGQywKK307CisKKy8qIEFNNDM3MiBkYXRhICovCitzdGF0aWMgc3RydWN0IGwzX3RhcmdldF9kYXRhIGFtNDM3Ml9sM190YXJnZXRfZGF0YV8yMDBmW10gPSB7CisJezB4ZjAwLCAgIkVNSUYiLH0sCisJezB4MTIwMCwgIkRFUyIsfSwKKwl7MHg0MDAsICAiT0NNQ1JBTSIsfSwKKwl7MHg3MDAsICAiVFBUQzAiLH0sCisJezB4ODAwLCAgIlRQVEMxIix9LAorCXsweDkwMCwgICJUUFRDMiJ9LAorCXsweGIwMCwgICJUUENDIix9LAorCXsweGQwMCwgICJERUJVR1NTIix9LAorCXsweGRlYWQsIEwzX1RBUkdFVF9OT1RfU1VQUE9SVEVELH0sCisJezB4MjAwLCAgIlNIQSIsfSwKKwl7MHhjMDAsICAiU0dYNTMwIix9LAorCXsweDUwMCwgICJBRVMwIix9LAorCXsweGEwMCwgICJMNF9GQVNUIix9LAorCXsweDMwMCwgICJNUFVTU19MMl9SQU0iLH0sCisJezB4MTAwLCAgIklDU1MiLH0sCit9OworCitzdGF0aWMgc3RydWN0IGwzX2ZsYWdtdXhfZGF0YSBhbTQzNzJfbDNfZmxhZ211eF8yMDBmID0geworCS5vZmZzZXQgPSAweDEwMDAsCisJLmwzX3RhcmcgPSBhbTQzNzJfbDNfdGFyZ2V0X2RhdGFfMjAwZiwKKwkubnVtX3RhcmdfZGF0YSA9IEFSUkFZX1NJWkUoYW00MzcyX2wzX3RhcmdldF9kYXRhXzIwMGYpLAorfTsKKworc3RhdGljIHN0cnVjdCBsM190YXJnZXRfZGF0YSBhbTQzNzJfbDNfdGFyZ2V0X2RhdGFfMTAwc1tdID0geworCXsweDEwMCwgIkw0X1BFUl8wIix9LAorCXsweDIwMCwgIkw0X1BFUl8xIix9LAorCXsweDMwMCwgIkw0X1BFUl8yIix9LAorCXsweDQwMCwgIkw0X1BFUl8zIix9LAorCXsweDgwMCwgIk1jQVNQMCIsfSwKKwl7MHg5MDAsICJNY0FTUDEiLH0sCisJezB4QzAwLCAiTU1DSFMyIix9LAorCXsweDcwMCwgIkdQTUMiLH0sCisJezB4RDAwLCAiTDRfRlciLH0sCisJezB4ZGVhZCwgTDNfVEFSR0VUX05PVF9TVVBQT1JURUQsfSwKKwl7MHg1MDAsICJBRENUU0MiLH0sCisJezB4RTAwLCAiTDRfV0tVUCIsfSwKKwl7MHhBMDAsICJNQUdfQ0FSRCIsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbDNfZmxhZ211eF9kYXRhIGFtNDM3Ml9sM19mbGFnbXV4XzEwMHMgPSB7CisJLm9mZnNldCA9IDB4NjAwLAorCS5sM190YXJnID0gYW00MzcyX2wzX3RhcmdldF9kYXRhXzEwMHMsCisJLm51bV90YXJnX2RhdGEgPSBBUlJBWV9TSVpFKGFtNDM3Ml9sM190YXJnZXRfZGF0YV8xMDBzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbDNfbWFzdGVyc19kYXRhIGFtNDM3Ml9sM19tYXN0ZXJzW10gPSB7CisJeyAweDAsICJNMSAoMTI4LWJpdCkifSwKKwl7IDB4MSwgIk0yICg2NC1iaXQpIn0sCisJeyAweDQsICJEQVAifSwKKwl7IDB4NSwgIlAxNTAwIn0sCisJeyAweEMsICJJQ1NTMCJ9LAorCXsgMHhELCAiSUNTUzEifSwKKwl7IDB4MTQsICJXYWtldXAgUHJvY2Vzc29yIn0sCisJeyAweDE4LCAiVFBUQzAgUmVhZCJ9LAorCXsgMHgxOSwgIlRQVEMwIFdyaXRlIn0sCisJeyAweDFBLCAiVFBUQzEgUmVhZCJ9LAorCXsgMHgxQiwgIlRQVEMxIFdyaXRlIn0sCisJeyAweDFDLCAiVFBUQzIgUmVhZCJ9LAorCXsgMHgxRCwgIlRQVEMyIFdyaXRlIn0sCisJeyAweDIwLCAiU0dYNTMwIn0sCisJeyAweDIxLCAiT0NQIFdQIFRyYWZmaWMgUHJvYmUifSwKKwl7IDB4MjIsICJPQ1AgV1AgRE1BIFByb2ZpbGluZyJ9LAorCXsgMHgyMywgIk9DUCBXUCBFdmVudCBUcmFjZSJ9LAorCXsgMHgyNSwgIkRTUyJ9LAorCXsgMHgyOCwgIkNyeXB0byBETUEgUkQifSwKKwl7IDB4MjksICJDcnlwdG8gRE1BIFdSIn0sCisJeyAweDJDLCAiVlBGRTAifSwKKwl7IDB4MkQsICJWUEZFMSJ9LAorCXsgMHgzMCwgIkdFTUFDIn0sCisJeyAweDM0LCAiVVNCMCBSRCJ9LAorCXsgMHgzNSwgIlVTQjAgV1IifSwKKwl7IDB4MzYsICJVU0IxIFJEIn0sCisJeyAweDM3LCAiVVNCMSBXUiJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBsM19mbGFnbXV4X2RhdGEgKmFtNDM3Ml9sM19mbGFnbXV4W10gPSB7CisJJmFtNDM3Ml9sM19mbGFnbXV4XzIwMGYsCisJJmFtNDM3Ml9sM19mbGFnbXV4XzEwMHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbDMgYW00MzcyX2wzX2RhdGEgPSB7CisJLmwzX2ZsYWdtdXggPSBhbTQzNzJfbDNfZmxhZ211eCwKKwkubnVtX21vZHVsZXMgPSBBUlJBWV9TSVpFKGFtNDM3Ml9sM19mbGFnbXV4KSwKKwkubDNfbWFzdGVycyA9IGFtNDM3Ml9sM19tYXN0ZXJzLAorCS5udW1fbWFzdGVycyA9IEFSUkFZX1NJWkUoYW00MzcyX2wzX21hc3RlcnMpLAorCS8qIEFsbCA2IGJpdHMgb2YgcmVnaXN0ZXIgZmllbGQgdXNlZCB0byBkaXN0aW5ndWlzaCBpbml0aWF0b3IgKi8KKwkubXN0X2FkZHJfbWFzayA9IDB4M0YsCit9OworCisjZW5kaWYJLyogX19PTUFQX0wzX05PQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy92ZXhwcmVzcy1jb25maWcuYyBiL2RyaXZlcnMvYnVzL3ZleHByZXNzLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NDc2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2J1cy92ZXhwcmVzcy1jb25maWcuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIExpbWl0ZWQKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdmV4cHJlc3MuaD4KKworCitzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZSB7CisJc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2Vfb3BzICpvcHM7CisJdm9pZCAqY29udGV4dDsKK307CisKKworc3RhdGljIERFRklORV9NVVRFWCh2ZXhwcmVzc19jb25maWdfbXV0ZXgpOworc3RhdGljIHN0cnVjdCBjbGFzcyAqdmV4cHJlc3NfY29uZmlnX2NsYXNzOworc3RhdGljIHUzMiB2ZXhwcmVzc19jb25maWdfc2l0ZV9tYXN0ZXIgPSBWRVhQUkVTU19TSVRFX01BU1RFUjsKKworCit2b2lkIHZleHByZXNzX2NvbmZpZ19zZXRfbWFzdGVyKHUzMiBzaXRlKQoreworCXZleHByZXNzX2NvbmZpZ19zaXRlX21hc3RlciA9IHNpdGU7Cit9CisKK3UzMiB2ZXhwcmVzc19jb25maWdfZ2V0X21hc3Rlcih2b2lkKQoreworCXJldHVybiB2ZXhwcmVzc19jb25maWdfc2l0ZV9tYXN0ZXI7Cit9CisKK3ZvaWQgdmV4cHJlc3NfY29uZmlnX2xvY2sodm9pZCAqYXJnKQoreworCW11dGV4X2xvY2soJnZleHByZXNzX2NvbmZpZ19tdXRleCk7Cit9CisKK3ZvaWQgdmV4cHJlc3NfY29uZmlnX3VubG9jayh2b2lkICphcmcpCit7CisJbXV0ZXhfdW5sb2NrKCZ2ZXhwcmVzc19jb25maWdfbXV0ZXgpOworfQorCisKK3N0YXRpYyB2b2lkIHZleHByZXNzX2NvbmZpZ19maW5kX3Byb3Aoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQljb25zdCBjaGFyICpuYW1lLCB1MzIgKnZhbCkKK3sKKwkvKiBEZWZhdWx0IHZhbHVlICovCisJKnZhbCA9IDA7CisKKwlvZl9ub2RlX2dldChub2RlKTsKKwl3aGlsZSAobm9kZSkgeworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgbmFtZSwgdmFsKSA9PSAwKSB7CisJCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJCXJldHVybjsKKwkJfQorCQlub2RlID0gb2ZfZ2V0X25leHRfcGFyZW50KG5vZGUpOworCX0KK30KKworaW50IHZleHByZXNzX2NvbmZpZ19nZXRfdG9wbyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiAqc2l0ZSwKKwkJdTMyICpwb3NpdGlvbiwgdTMyICpkY2MpCit7CisJdmV4cHJlc3NfY29uZmlnX2ZpbmRfcHJvcChub2RlLCAiYXJtLHZleHByZXNzLHNpdGUiLCBzaXRlKTsKKwlpZiAoKnNpdGUgPT0gVkVYUFJFU1NfU0lURV9NQVNURVIpCisJCSpzaXRlID0gdmV4cHJlc3NfY29uZmlnX3NpdGVfbWFzdGVyOworCWlmIChXQVJOX09OKHZleHByZXNzX2NvbmZpZ19zaXRlX21hc3RlciA9PSBWRVhQUkVTU19TSVRFX01BU1RFUikpCisJCXJldHVybiAtRUlOVkFMOworCXZleHByZXNzX2NvbmZpZ19maW5kX3Byb3Aobm9kZSwgImFybSx2ZXhwcmVzcyxwb3NpdGlvbiIsIHBvc2l0aW9uKTsKKwl2ZXhwcmVzc19jb25maWdfZmluZF9wcm9wKG5vZGUsICJhcm0sdmV4cHJlc3MsZGNjIiwgZGNjKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHZleHByZXNzX2NvbmZpZ19kZXZyZXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKK3sKKwlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZSAqYnJpZGdlID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSByZXM7CisKKwlicmlkZ2UtPm9wcy0+cmVnbWFwX2V4aXQocmVnbWFwLCBicmlkZ2UtPmNvbnRleHQpOworfQorCitzdHJ1Y3QgcmVnbWFwICpkZXZtX3JlZ21hcF9pbml0X3ZleHByZXNzX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IHJlZ21hcCAqKnJlczsKKworCWlmIChXQVJOX09OKGRldi0+cGFyZW50LT5jbGFzcyAhPSB2ZXhwcmVzc19jb25maWdfY2xhc3MpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWJyaWRnZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7CisJaWYgKFdBUk5fT04oIWJyaWRnZSkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcmVzID0gZGV2cmVzX2FsbG9jKHZleHByZXNzX2NvbmZpZ19kZXZyZXNfcmVsZWFzZSwgc2l6ZW9mKCpyZXMpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmVnbWFwID0gYnJpZGdlLT5vcHMtPnJlZ21hcF9pbml0KGRldiwgYnJpZGdlLT5jb250ZXh0KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpIHsKKwkJZGV2cmVzX2ZyZWUocmVzKTsKKwkJcmV0dXJuIHJlZ21hcDsKKwl9CisKKwkqcmVzID0gcmVnbWFwOworCWRldnJlc19hZGQoZGV2LCByZXMpOworCisJcmV0dXJuIHJlZ21hcDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fcmVnbWFwX2luaXRfdmV4cHJlc3NfY29uZmlnKTsKKworc3RydWN0IGRldmljZSAqdmV4cHJlc3NfY29uZmlnX2JyaWRnZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlX29wcyAqb3BzLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZSAqYnJpZGdlOworCisJaWYgKCF2ZXhwcmVzc19jb25maWdfY2xhc3MpIHsKKwkJdmV4cHJlc3NfY29uZmlnX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLAorCQkJCSJ2ZXhwcmVzcy1jb25maWciKTsKKwkJaWYgKElTX0VSUih2ZXhwcmVzc19jb25maWdfY2xhc3MpKQorCQkJcmV0dXJuICh2b2lkICopdmV4cHJlc3NfY29uZmlnX2NsYXNzOworCX0KKworCWRldiA9IGRldmljZV9jcmVhdGUodmV4cHJlc3NfY29uZmlnX2NsYXNzLCBwYXJlbnQsIDAsCisJCQlOVUxMLCAiJXMuYnJpZGdlIiwgZGV2X25hbWUocGFyZW50KSk7CisKKwlpZiAoSVNfRVJSKGRldikpCisJCXJldHVybiBkZXY7CisKKwlicmlkZ2UgPSBkZXZtX2ttYWxsb2MoZGV2LCBzaXplb2YoKmJyaWRnZSksIEdGUF9LRVJORUwpOworCWlmICghYnJpZGdlKSB7CisJCXB1dF9kZXZpY2UoZGV2KTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCWJyaWRnZS0+b3BzID0gb3BzOworCWJyaWRnZS0+Y29udGV4dCA9IGNvbnRleHQ7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBicmlkZ2UpOworCisJZGV2X2RiZyhwYXJlbnQsICJSZWdpc3RlcmVkIGJyaWRnZSAnJXMnLCBwYXJlbnQgbm9kZSAlcFxuIiwKKwkJCWRldl9uYW1lKGRldiksIHBhcmVudC0+b2Zfbm9kZSk7CisKKwlyZXR1cm4gZGV2OworfQorCisKK3N0YXRpYyBpbnQgdmV4cHJlc3NfY29uZmlnX25vZGVfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGRhdGE7CisKKwlkZXZfZGJnKGRldiwgIlBhcmVudCBub2RlICVwLCBsb29raW5nIGZvciAlcFxuIiwKKwkJCWRldi0+cGFyZW50LT5vZl9ub2RlLCBub2RlKTsKKworCXJldHVybiBkZXYtPnBhcmVudC0+b2Zfbm9kZSA9PSBub2RlOworfQorCitzdGF0aWMgaW50IHZleHByZXNzX2NvbmZpZ19wb3B1bGF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpicmlkZ2U7CisJc3RydWN0IGRldmljZSAqcGFyZW50OworCisJYnJpZGdlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAiYXJtLHZleHByZXNzLGNvbmZpZy1icmlkZ2UiLCAwKTsKKwlpZiAoIWJyaWRnZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJlbnQgPSBjbGFzc19maW5kX2RldmljZSh2ZXhwcmVzc19jb25maWdfY2xhc3MsIE5VTEwsIGJyaWRnZSwKKwkJCXZleHByZXNzX2NvbmZpZ19ub2RlX21hdGNoKTsKKwlpZiAoV0FSTl9PTighcGFyZW50KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gb2ZfcGxhdGZvcm1fcG9wdWxhdGUobm9kZSwgTlVMTCwgTlVMTCwgcGFyZW50KTsKK30KKworc3RhdGljIGludCBfX2luaXQgdmV4cHJlc3NfY29uZmlnX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisKKwkvKiBOZWVkIHRoZSBjb25maWcgZGV2aWNlcyBlYXJseSwgYmVmb3JlIHRoZSAibm9ybWFsIiBkZXZpY2VzLi4uICovCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5vZGUsIE5VTEwsICJhcm0sdmV4cHJlc3MsY29uZmlnLWJ1cyIpIHsKKwkJZXJyID0gdmV4cHJlc3NfY29uZmlnX3BvcHVsYXRlKG5vZGUpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKHZleHByZXNzX2NvbmZpZ19pbml0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IDhhM2FmZjcuLjQ5YWM1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTMxMiwzNiArMzEyLDI0IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICptcndfYWRkcmVzc19zcGFjZVtdID0geyAiRE1BIiwgIkdBQSIgfTsKIAotI2lmIChFUlJMT0dNQVNLIT1DRF9OT1RISU5HKQotI2RlZmluZSBjZGluZm8odHlwZSwgZm10LCBhcmdzLi4uKQkJCVwKKyNpZiAoRVJSTE9HTUFTSyAhPSBDRF9OT1RISU5HKQorI2RlZmluZSBjZF9kYmcodHlwZSwgZm10LCAuLi4pCQkJCVwKIGRvIHsJCQkJCQkJXAogCWlmICgoRVJSTE9HTUFTSyAmIHR5cGUpIHx8IGRlYnVnID09IDEpCQlcCi0JCXByX2luZm8oZm10LCAjI2FyZ3MpOwkJCVwKKwkJcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsJCVwKIH0gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBjZGluZm8odHlwZSwgZm10LCBhcmdzLi4uKQkJCVwKKyNkZWZpbmUgY2RfZGJnKHR5cGUsIGZtdCwgLi4uKQkJCQlcCiBkbyB7CQkJCQkJCVwKIAlpZiAoMCAmJiAoRVJSTE9HTUFTSyAmIHR5cGUpIHx8IGRlYnVnID09IDEpCVwKLQkJcHJfaW5mbyhmbXQsICMjYXJncyk7CQkJXAorCQlwcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pOwkJXAogfSB3aGlsZSAoMCkKICNlbmRpZgogCi0vKiBUaGVzZSBhcmUgdXNlZCB0byBzaW1wbGlmeSBnZXR0aW5nIGRhdGEgaW4gZnJvbSBhbmQgYmFjayB0byB1c2VyIGxhbmQgKi8KLSNkZWZpbmUgSU9DVExfSU4oYXJnLCB0eXBlLCBpbikJCQkJCVwKLQlpZiAoY29weV9mcm9tX3VzZXIoJihpbiksICh0eXBlIF9fdXNlciAqKSAoYXJnKSwgc2l6ZW9mIChpbikpKQlcCi0JCXJldHVybiAtRUZBVUxUOwotCi0jZGVmaW5lIElPQ1RMX09VVChhcmcsIHR5cGUsIG91dCkgXAotCWlmIChjb3B5X3RvX3VzZXIoKHR5cGUgX191c2VyICopIChhcmcpLCAmKG91dCksIHNpemVvZiAob3V0KSkpCVwKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIC8qIFRoZSAoY2RvLT5jYXBhYmlsaXR5ICYgfmNkaS0+bWFzayAmIENEQ19YWFgpIGNvbnN0cnVjdCB3YXMgdXNlZCBpbgogICAgYSBsb3Qgb2YgcGxhY2VzLiBUaGlzIG1hY3JvIG1ha2VzIHRoZSBjb2RlIG1vcmUgY2xlYXIuICovCiAjZGVmaW5lIENEUk9NX0NBTih0eXBlKSAoY2RpLT5vcHMtPmNhcGFiaWxpdHkgJiB+Y2RpLT5tYXNrICYgKHR5cGUpKQogCi0vKiB1c2VkIGluIHRoZSBhdWRpbyBpb2N0bHMgKi8KLSNkZWZpbmUgQ0hFQ0tBVURJTyBpZiAoKHJldD1jaGVja19mb3JfYXVkaW9fZGlzYyhjZGksIGNkbykpKSByZXR1cm4gcmV0Ci0KIC8qCiAgKiBBbm90aGVyIHBvcHVsYXIgT1MgdXNlcyA3IHNlY29uZHMgYXMgdGhlIGhhcmQgdGltZW91dCBmb3IgZGVmYXVsdAogICogY29tbWFuZHMsIHNvIGl0IGlzIGEgZ29vZCBjaG9pY2UgZm9yIHVzIGFzIHdlbGwuCkBAIC0zNDksMjEgKzMzNyw2IEBACiAjZGVmaW5lIENEUk9NX0RFRl9USU1FT1VUCSg3ICogSFopCiAKIC8qIE5vdC1leHBvcnRlZCByb3V0aW5lcy4gKi8KLXN0YXRpYyBpbnQgb3Blbl9mb3JfZGF0YShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGkpOwotc3RhdGljIGludCBjaGVja19mb3JfYXVkaW9fZGlzYyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksCi0JCQkgc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKiBjZG8pOwotc3RhdGljIHZvaWQgc2FuaXRpemVfZm9ybWF0KHVuaW9uIGNkcm9tX2FkZHIgKmFkZHIsIAotCQl1X2NoYXIgKiBjdXJyLCB1X2NoYXIgcmVxdWVzdGVkKTsKLXN0YXRpYyBpbnQgbW1jX2lvY3RsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCB1bnNpZ25lZCBpbnQgY21kLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQotaW50IGNkcm9tX2dldF9sYXN0X3dyaXR0ZW4oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICosIGxvbmcgKik7Ci1zdGF0aWMgaW50IGNkcm9tX2dldF9uZXh0X3dyaXRhYmxlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBsb25nICopOwotc3RhdGljIHZvaWQgY2Ryb21fY291bnRfdHJhY2tzKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCB0cmFja3R5cGUqKTsKLQotc3RhdGljIGludCBjZHJvbV9tcndfZXhpdChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSk7Ci0KLXN0YXRpYyBpbnQgY2Ryb21fZ2V0X2Rpc2NfaW5mbyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgZGlzY19pbmZvcm1hdGlvbiAqZGkpOwogCiBzdGF0aWMgdm9pZCBjZHJvbV9zeXNjdGxfcmVnaXN0ZXIodm9pZCk7CiAKQEAgLTM4MiwxMTIgKzM1NSw2NCBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IGNkcm9tX2ZsdXNoX2NhY2hlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQoreworCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CisKKwlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgTlVMTCwgMCwgQ0dDX0RBVEFfTk9ORSk7CisJY2djLmNtZFswXSA9IEdQQ01EX0ZMVVNIX0NBQ0hFOworCisJY2djLnRpbWVvdXQgPSA1ICogNjAgKiBIWjsKKworCXJldHVybiBjZGktPm9wcy0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKK30KKworLyogcmVxdWlyZXMgQ0QgUi9SVyAqLworc3RhdGljIGludCBjZHJvbV9nZXRfZGlzY19pbmZvKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJICAgICAgIGRpc2NfaW5mb3JtYXRpb24gKmRpKQoreworCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKKwlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOworCWludCByZXQsIGJ1ZmxlbjsKKworCS8qIHNldCB1cCBjb21tYW5kIGFuZCBnZXQgdGhlIGRpc2MgaW5mbyAqLworCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBkaSwgc2l6ZW9mKCpkaSksIENHQ19EQVRBX1JFQUQpOworCWNnYy5jbWRbMF0gPSBHUENNRF9SRUFEX0RJU0NfSU5GTzsKKwljZ2MuY21kWzhdID0gY2djLmJ1ZmxlbiA9IDI7CisJY2djLnF1aWV0ID0gMTsKKworCXJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogbm90IGFsbCBkcml2ZXMgaGF2ZSB0aGUgc2FtZSBkaXNjX2luZm8gbGVuZ3RoLCBzbyByZXF1ZXVlCisJICogcGFja2V0IHdpdGggdGhlIGxlbmd0aCB0aGUgZHJpdmUgdGVsbHMgdXMgaXQgY2FuIHN1cHBseQorCSAqLworCWJ1ZmxlbiA9IGJlMTZfdG9fY3B1KGRpLT5kaXNjX2luZm9ybWF0aW9uX2xlbmd0aCkgKworCQlzaXplb2YoZGktPmRpc2NfaW5mb3JtYXRpb25fbGVuZ3RoKTsKKworCWlmIChidWZsZW4gPiBzaXplb2YoZGlzY19pbmZvcm1hdGlvbikpCisJCWJ1ZmxlbiA9IHNpemVvZihkaXNjX2luZm9ybWF0aW9uKTsKKworCWNnYy5jbWRbOF0gPSBjZ2MuYnVmbGVuID0gYnVmbGVuOworCXJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogcmV0dXJuIGFjdHVhbCBmaWxsIHNpemUgKi8KKwlyZXR1cm4gYnVmbGVuOworfQorCiAvKiBUaGlzIG1hY3JvIG1ha2VzIHN1cmUgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBvbiBjZHJvbV9kZXZpY2Vfb3BzCiAgKiBleGlzdGVuY2UgaW4gdGhlIHJ1bi10aW1lIHJvdXRpbmVzIGJlbG93LiBDaGFuZ2VfY2FwYWJpbGl0eSBpcyBhCiAgKiBoYWNrIHRvIGhhdmUgdGhlIGNhcGFiaWxpdHkgZmxhZ3MgZGVmaW5lZCBjb25zdCwgd2hpbGUgd2UgY2FuIHN0aWxsCiAgKiBjaGFuZ2UgaXQgaGVyZSB3aXRob3V0IGdjYyBjb21wbGFpbmluZyBhdCBldmVyeSBsaW5lLgogICovCi0jZGVmaW5lIEVOU1VSRShjYWxsLCBiaXRzKSBpZiAoY2RvLT5jYWxsID09IE5VTEwpICpjaGFuZ2VfY2FwYWJpbGl0eSAmPSB+KGJpdHMpCi0KLWludCByZWdpc3Rlcl9jZHJvbShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKLXsKLQlzdGF0aWMgY2hhciBiYW5uZXJfcHJpbnRlZDsKLSAgICAgICAgc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOwotICAgICAgICBpbnQgKmNoYW5nZV9jYXBhYmlsaXR5ID0gKGludCAqKSZjZG8tPmNhcGFiaWxpdHk7IC8qIGhhY2sgKi8KLQotCWNkaW5mbyhDRF9PUEVOLCAiZW50ZXJpbmcgcmVnaXN0ZXJfY2Ryb21cbiIpOyAKLQotCWlmIChjZG8tPm9wZW4gPT0gTlVMTCB8fCBjZG8tPnJlbGVhc2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFiYW5uZXJfcHJpbnRlZCkgewotCQlwcl9pbmZvKCJVbmlmb3JtIENELVJPTSBkcml2ZXIgIiBSRVZJU0lPTiAiXG4iKTsKLQkJYmFubmVyX3ByaW50ZWQgPSAxOwotCQljZHJvbV9zeXNjdGxfcmVnaXN0ZXIoKTsKLQl9Ci0KLQlFTlNVUkUoZHJpdmVfc3RhdHVzLCBDRENfRFJJVkVfU1RBVFVTICk7Ci0JaWYgKGNkby0+Y2hlY2tfZXZlbnRzID09IE5VTEwgJiYgY2RvLT5tZWRpYV9jaGFuZ2VkID09IE5VTEwpCi0JCSpjaGFuZ2VfY2FwYWJpbGl0eSA9IH4oQ0RDX01FRElBX0NIQU5HRUQgfCBDRENfU0VMRUNUX0RJU0MpOwotCUVOU1VSRSh0cmF5X21vdmUsIENEQ19DTE9TRV9UUkFZIHwgQ0RDX09QRU5fVFJBWSk7Ci0JRU5TVVJFKGxvY2tfZG9vciwgQ0RDX0xPQ0spOwotCUVOU1VSRShzZWxlY3Rfc3BlZWQsIENEQ19TRUxFQ1RfU1BFRUQpOwotCUVOU1VSRShnZXRfbGFzdF9zZXNzaW9uLCBDRENfTVVMVElfU0VTU0lPTik7Ci0JRU5TVVJFKGdldF9tY24sIENEQ19NQ04pOwotCUVOU1VSRShyZXNldCwgQ0RDX1JFU0VUKTsKLQlFTlNVUkUoZ2VuZXJpY19wYWNrZXQsIENEQ19HRU5FUklDX1BBQ0tFVCk7Ci0JY2RpLT5tY19mbGFncyA9IDA7Ci0JY2RvLT5uX21pbm9ycyA9IDA7Ci0gICAgICAgIGNkaS0+b3B0aW9ucyA9IENET19VU0VfRkZMQUdTOwotCQotCWlmIChhdXRvY2xvc2U9PTEgJiYgQ0RST01fQ0FOKENEQ19DTE9TRV9UUkFZKSkKLQkJY2RpLT5vcHRpb25zIHw9IChpbnQpIENET19BVVRPX0NMT1NFOwotCWlmIChhdXRvZWplY3Q9PTEgJiYgQ0RST01fQ0FOKENEQ19PUEVOX1RSQVkpKQotCQljZGktPm9wdGlvbnMgfD0gKGludCkgQ0RPX0FVVE9fRUpFQ1Q7Ci0JaWYgKGxvY2tkb29yPT0xKQotCQljZGktPm9wdGlvbnMgfD0gKGludCkgQ0RPX0xPQ0s7Ci0JaWYgKGNoZWNrX21lZGlhX3R5cGU9PTEpCi0JCWNkaS0+b3B0aW9ucyB8PSAoaW50KSBDRE9fQ0hFQ0tfVFlQRTsKLQotCWlmIChDRFJPTV9DQU4oQ0RDX01SV19XKSkKLQkJY2RpLT5leGl0ID0gY2Ryb21fbXJ3X2V4aXQ7Ci0KLQlpZiAoY2RpLT5kaXNrKQotCQljZGktPmNkZGFfbWV0aG9kID0gQ0REQV9CUENfRlVMTDsKLQllbHNlCi0JCWNkaS0+Y2RkYV9tZXRob2QgPSBDRERBX09MRDsKLQotCWlmICghY2RvLT5nZW5lcmljX3BhY2tldCkKLQkJY2RvLT5nZW5lcmljX3BhY2tldCA9IGNkcm9tX2R1bW15X2dlbmVyaWNfcGFja2V0OwotCi0JY2RpbmZvKENEX1JFR19VTlJFRywgImRyaXZlIFwiL2Rldi8lc1wiIHJlZ2lzdGVyZWRcbiIsIGNkaS0+bmFtZSk7Ci0JbXV0ZXhfbG9jaygmY2Ryb21fbXV0ZXgpOwotCWxpc3RfYWRkKCZjZGktPmxpc3QsICZjZHJvbV9saXN0KTsKLQltdXRleF91bmxvY2soJmNkcm9tX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLSN1bmRlZiBFTlNVUkUKLQotdm9pZCB1bnJlZ2lzdGVyX2Nkcm9tKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQotewotCWNkaW5mbyhDRF9PUEVOLCAiZW50ZXJpbmcgdW5yZWdpc3Rlcl9jZHJvbVxuIik7IAotCi0JbXV0ZXhfbG9jaygmY2Ryb21fbXV0ZXgpOwotCWxpc3RfZGVsKCZjZGktPmxpc3QpOwotCW11dGV4X3VubG9jaygmY2Ryb21fbXV0ZXgpOwotCi0JaWYgKGNkaS0+ZXhpdCkKLQkJY2RpLT5leGl0KGNkaSk7Ci0KLQljZGktPm9wcy0+bl9taW5vcnMtLTsKLQljZGluZm8oQ0RfUkVHX1VOUkVHLCAiZHJpdmUgXCIvZGV2LyVzXCIgdW5yZWdpc3RlcmVkXG4iLCBjZGktPm5hbWUpOwotfQotCi1pbnQgY2Ryb21fZ2V0X21lZGlhX2V2ZW50KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJICBzdHJ1Y3QgbWVkaWFfZXZlbnRfZGVzYyAqbWVkKQotewotCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbOF07Ci0Jc3RydWN0IGV2ZW50X2hlYWRlciAqZWggPSAoc3RydWN0IGV2ZW50X2hlYWRlciAqKSBidWZmZXI7Ci0KLQlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgQ0dDX0RBVEFfUkVBRCk7Ci0JY2djLmNtZFswXSA9IEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OOwotCWNnYy5jbWRbMV0gPSAxOwkJLyogSU1NRUQgKi8KLQljZ2MuY21kWzRdID0gMSA8PCA0OwkvKiBtZWRpYSBldmVudCAqLwotCWNnYy5jbWRbOF0gPSBzaXplb2YoYnVmZmVyKTsKLQljZ2MucXVpZXQgPSAxOwotCi0JaWYgKGNkaS0+b3BzLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKQotCQlyZXR1cm4gMTsKLQotCWlmIChiZTE2X3RvX2NwdShlaC0+ZGF0YV9sZW4pIDwgc2l6ZW9mKCptZWQpKQotCQlyZXR1cm4gMTsKLQotCWlmIChlaC0+bmVhIHx8IGVoLT5ub3RpZmljYXRpb25fY2xhc3MgIT0gMHg0KQotCQlyZXR1cm4gMTsKLQotCW1lbWNweShtZWQsICZidWZmZXJbc2l6ZW9mKCplaCldLCBzaXplb2YoKm1lZCkpOwotCXJldHVybiAwOwotfQorI2RlZmluZSBFTlNVUkUoY2FsbCwgYml0cykJCQlcCitkbyB7CQkJCQkJXAorCWlmIChjZG8tPmNhbGwgPT0gTlVMTCkJCQlcCisJCSpjaGFuZ2VfY2FwYWJpbGl0eSAmPSB+KGJpdHMpOwlcCit9IHdoaWxlICgwKQogCiAvKgogICogdGhlIGZpcnN0IHByb3RvdHlwZXMgdXNlZCAweDJjIGFzIHRoZSBwYWdlIGNvZGUgZm9yIHRoZSBtcncgbW9kZSBwYWdlLApAQCAtNjA1LDE4ICs1MzAsNiBAQAogCXJldHVybiBjZGktPm9wcy0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKIH0KIAotc3RhdGljIGludCBjZHJvbV9mbHVzaF9jYWNoZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKLXsKLQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIE5VTEwsIDAsIENHQ19EQVRBX05PTkUpOwotCWNnYy5jbWRbMF0gPSBHUENNRF9GTFVTSF9DQUNIRTsKLQotCWNnYy50aW1lb3V0ID0gNSAqIDYwICogSFo7Ci0KLQlyZXR1cm4gY2RpLT5vcHMtPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYyk7Ci19Ci0KIHN0YXRpYyBpbnQgY2Ryb21fbXJ3X2V4aXQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCiB7CiAJZGlzY19pbmZvcm1hdGlvbiBkaTsKQEAgLTY1MCwxNyArNTYzLDE5IEBACiAJY2djLmJ1ZmZlciA9IGJ1ZmZlcjsKIAljZ2MuYnVmbGVuID0gc2l6ZW9mKGJ1ZmZlcik7CiAKLQlpZiAoKHJldCA9IGNkcm9tX21vZGVfc2Vuc2UoY2RpLCAmY2djLCBjZGktPm1yd19tb2RlX3BhZ2UsIDApKSkKKwlyZXQgPSBjZHJvbV9tb2RlX3NlbnNlKGNkaSwgJmNnYywgY2RpLT5tcndfbW9kZV9wYWdlLCAwKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbXBoID0gKHN0cnVjdCBtb2RlX3BhZ2VfaGVhZGVyICopIGJ1ZmZlcjsKKwltcGggPSAoc3RydWN0IG1vZGVfcGFnZV9oZWFkZXIgKilidWZmZXI7CiAJb2Zmc2V0ID0gYmUxNl90b19jcHUobXBoLT5kZXNjX2xlbmd0aCk7CiAJc2l6ZSA9IGJlMTZfdG9fY3B1KG1waC0+bW9kZV9kYXRhX2xlbmd0aCkgKyAyOwogCiAJYnVmZmVyW29mZnNldCArIDNdID0gc3BhY2U7CiAJY2djLmJ1ZmxlbiA9IHNpemU7CiAKLQlpZiAoKHJldCA9IGNkcm9tX21vZGVfc2VsZWN0KGNkaSwgJmNnYykpKQorCXJldCA9IGNkcm9tX21vZGVfc2VsZWN0KGNkaSwgJmNnYyk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXByX2luZm8oIiVzOiBtcncgYWRkcmVzcyBzcGFjZSAlcyBzZWxlY3RlZFxuIiwKQEAgLTY2OCw2ICs1ODMsMTA2IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCByZWdpc3Rlcl9jZHJvbShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKK3sKKwlzdGF0aWMgY2hhciBiYW5uZXJfcHJpbnRlZDsKKwlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CisJaW50ICpjaGFuZ2VfY2FwYWJpbGl0eSA9IChpbnQgKikmY2RvLT5jYXBhYmlsaXR5OyAvKiBoYWNrICovCisKKwljZF9kYmcoQ0RfT1BFTiwgImVudGVyaW5nIHJlZ2lzdGVyX2Nkcm9tXG4iKTsKKworCWlmIChjZG8tPm9wZW4gPT0gTlVMTCB8fCBjZG8tPnJlbGVhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFiYW5uZXJfcHJpbnRlZCkgeworCQlwcl9pbmZvKCJVbmlmb3JtIENELVJPTSBkcml2ZXIgIiBSRVZJU0lPTiAiXG4iKTsKKwkJYmFubmVyX3ByaW50ZWQgPSAxOworCQljZHJvbV9zeXNjdGxfcmVnaXN0ZXIoKTsKKwl9CisKKwlFTlNVUkUoZHJpdmVfc3RhdHVzLCBDRENfRFJJVkVfU1RBVFVTKTsKKwlpZiAoY2RvLT5jaGVja19ldmVudHMgPT0gTlVMTCAmJiBjZG8tPm1lZGlhX2NoYW5nZWQgPT0gTlVMTCkKKwkJKmNoYW5nZV9jYXBhYmlsaXR5ID0gfihDRENfTUVESUFfQ0hBTkdFRCB8IENEQ19TRUxFQ1RfRElTQyk7CisJRU5TVVJFKHRyYXlfbW92ZSwgQ0RDX0NMT1NFX1RSQVkgfCBDRENfT1BFTl9UUkFZKTsKKwlFTlNVUkUobG9ja19kb29yLCBDRENfTE9DSyk7CisJRU5TVVJFKHNlbGVjdF9zcGVlZCwgQ0RDX1NFTEVDVF9TUEVFRCk7CisJRU5TVVJFKGdldF9sYXN0X3Nlc3Npb24sIENEQ19NVUxUSV9TRVNTSU9OKTsKKwlFTlNVUkUoZ2V0X21jbiwgQ0RDX01DTik7CisJRU5TVVJFKHJlc2V0LCBDRENfUkVTRVQpOworCUVOU1VSRShnZW5lcmljX3BhY2tldCwgQ0RDX0dFTkVSSUNfUEFDS0VUKTsKKwljZGktPm1jX2ZsYWdzID0gMDsKKwljZG8tPm5fbWlub3JzID0gMDsKKwljZGktPm9wdGlvbnMgPSBDRE9fVVNFX0ZGTEFHUzsKKworCWlmIChhdXRvY2xvc2UgPT0gMSAmJiBDRFJPTV9DQU4oQ0RDX0NMT1NFX1RSQVkpKQorCQljZGktPm9wdGlvbnMgfD0gKGludCkgQ0RPX0FVVE9fQ0xPU0U7CisJaWYgKGF1dG9lamVjdCA9PSAxICYmIENEUk9NX0NBTihDRENfT1BFTl9UUkFZKSkKKwkJY2RpLT5vcHRpb25zIHw9IChpbnQpIENET19BVVRPX0VKRUNUOworCWlmIChsb2NrZG9vciA9PSAxKQorCQljZGktPm9wdGlvbnMgfD0gKGludCkgQ0RPX0xPQ0s7CisJaWYgKGNoZWNrX21lZGlhX3R5cGUgPT0gMSkKKwkJY2RpLT5vcHRpb25zIHw9IChpbnQpIENET19DSEVDS19UWVBFOworCisJaWYgKENEUk9NX0NBTihDRENfTVJXX1cpKQorCQljZGktPmV4aXQgPSBjZHJvbV9tcndfZXhpdDsKKworCWlmIChjZGktPmRpc2spCisJCWNkaS0+Y2RkYV9tZXRob2QgPSBDRERBX0JQQ19GVUxMOworCWVsc2UKKwkJY2RpLT5jZGRhX21ldGhvZCA9IENEREFfT0xEOworCisJaWYgKCFjZG8tPmdlbmVyaWNfcGFja2V0KQorCQljZG8tPmdlbmVyaWNfcGFja2V0ID0gY2Ryb21fZHVtbXlfZ2VuZXJpY19wYWNrZXQ7CisKKwljZF9kYmcoQ0RfUkVHX1VOUkVHLCAiZHJpdmUgXCIvZGV2LyVzXCIgcmVnaXN0ZXJlZFxuIiwgY2RpLT5uYW1lKTsKKwltdXRleF9sb2NrKCZjZHJvbV9tdXRleCk7CisJbGlzdF9hZGQoJmNkaS0+bGlzdCwgJmNkcm9tX2xpc3QpOworCW11dGV4X3VubG9jaygmY2Ryb21fbXV0ZXgpOworCXJldHVybiAwOworfQorI3VuZGVmIEVOU1VSRQorCit2b2lkIHVucmVnaXN0ZXJfY2Ryb20oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCit7CisJY2RfZGJnKENEX09QRU4sICJlbnRlcmluZyB1bnJlZ2lzdGVyX2Nkcm9tXG4iKTsKKworCW11dGV4X2xvY2soJmNkcm9tX211dGV4KTsKKwlsaXN0X2RlbCgmY2RpLT5saXN0KTsKKwltdXRleF91bmxvY2soJmNkcm9tX211dGV4KTsKKworCWlmIChjZGktPmV4aXQpCisJCWNkaS0+ZXhpdChjZGkpOworCisJY2RpLT5vcHMtPm5fbWlub3JzLS07CisJY2RfZGJnKENEX1JFR19VTlJFRywgImRyaXZlIFwiL2Rldi8lc1wiIHVucmVnaXN0ZXJlZFxuIiwgY2RpLT5uYW1lKTsKK30KKworaW50IGNkcm9tX2dldF9tZWRpYV9ldmVudChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCSAgc3RydWN0IG1lZGlhX2V2ZW50X2Rlc2MgKm1lZCkKK3sKKwlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzhdOworCXN0cnVjdCBldmVudF9oZWFkZXIgKmVoID0gKHN0cnVjdCBldmVudF9oZWFkZXIgKilidWZmZXI7CisKKwlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgQ0dDX0RBVEFfUkVBRCk7CisJY2djLmNtZFswXSA9IEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OOworCWNnYy5jbWRbMV0gPSAxOwkJLyogSU1NRUQgKi8KKwljZ2MuY21kWzRdID0gMSA8PCA0OwkvKiBtZWRpYSBldmVudCAqLworCWNnYy5jbWRbOF0gPSBzaXplb2YoYnVmZmVyKTsKKwljZ2MucXVpZXQgPSAxOworCisJaWYgKGNkaS0+b3BzLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKQorCQlyZXR1cm4gMTsKKworCWlmIChiZTE2X3RvX2NwdShlaC0+ZGF0YV9sZW4pIDwgc2l6ZW9mKCptZWQpKQorCQlyZXR1cm4gMTsKKworCWlmIChlaC0+bmVhIHx8IGVoLT5ub3RpZmljYXRpb25fY2xhc3MgIT0gMHg0KQorCQlyZXR1cm4gMTsKKworCW1lbWNweShtZWQsICZidWZmZXJbc2l6ZW9mKCplaCldLCBzaXplb2YoKm1lZCkpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNkcm9tX2dldF9yYW5kb21fd3JpdGFibGUoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCiAJCQkgICAgICBzdHJ1Y3QgcndydF9mZWF0dXJlX2Rlc2MgKnJmZCkKIHsKQEAgLTgzOSw3ICs4NTQsNyBAQAogCWVsc2UgaWYgKENERl9SV1JUID09IGJlMTZfdG9fY3B1KHJmZC5mZWF0dXJlX2NvZGUpKQogCQlyZXQgPSAhcmZkLmN1cnI7CiAKLQljZGluZm8oQ0RfT1BFTiwgImNhbiBvcGVuIGZvciByYW5kb20gd3JpdGVcbiIpOworCWNkX2RiZyhDRF9PUEVOLCAiY2FuIG9wZW4gZm9yIHJhbmRvbSB3cml0ZVxuIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTI4LDEyICs5NDMsMTIgQEAKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwogCiAJaWYgKGNkaS0+bW1jM19wcm9maWxlICE9IDB4MWEpIHsKLQkJY2RpbmZvKENEX0NMT1NFLCAiJXM6IE5vIERWRCtSV1xuIiwgY2RpLT5uYW1lKTsKKwkJY2RfZGJnKENEX0NMT1NFLCAiJXM6IE5vIERWRCtSV1xuIiwgY2RpLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghY2RpLT5tZWRpYV93cml0dGVuKSB7Ci0JCWNkaW5mbyhDRF9DTE9TRSwgIiVzOiBEVkQrUlcgbWVkaWEgY2xlYW5cbiIsIGNkaS0+bmFtZSk7CisJCWNkX2RiZyhDRF9DTE9TRSwgIiVzOiBEVkQrUlcgbWVkaWEgY2xlYW5cbiIsIGNkaS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk2OSw2ICs5ODQsMTYwIEBACiAjZW5kaWYKIH0KIAorLyogYmFkbHkgYnJva2VuLCBJIGtub3cuIElzIGR1ZSBmb3IgYSBmaXh1cCBhbnl0aW1lLiAqLworc3RhdGljIHZvaWQgY2Ryb21fY291bnRfdHJhY2tzKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCB0cmFja3R5cGUgKnRyYWNrcykKK3sKKwlzdHJ1Y3QgY2Ryb21fdG9jaGRyIGhlYWRlcjsKKwlzdHJ1Y3QgY2Ryb21fdG9jZW50cnkgZW50cnk7CisJaW50IHJldCwgaTsKKwl0cmFja3MtPmRhdGEgPSAwOworCXRyYWNrcy0+YXVkaW8gPSAwOworCXRyYWNrcy0+Y2RpID0gMDsKKwl0cmFja3MtPnhhID0gMDsKKwl0cmFja3MtPmVycm9yID0gMDsKKwljZF9kYmcoQ0RfQ09VTlRfVFJBQ0tTLCAiZW50ZXJpbmcgY2Ryb21fY291bnRfdHJhY2tzXG4iKTsKKwkvKiBHcmFiIHRoZSBUT0MgaGVhZGVyIHNvIHdlIGNhbiBzZWUgaG93IG1hbnkgdHJhY2tzIHRoZXJlIGFyZSAqLworCXJldCA9IGNkaS0+b3BzLT5hdWRpb19pb2N0bChjZGksIENEUk9NUkVBRFRPQ0hEUiwgJmhlYWRlcik7CisJaWYgKHJldCkgeworCQlpZiAocmV0ID09IC1FTk9NRURJVU0pCisJCQl0cmFja3MtPmVycm9yID0gQ0RTX05PX0RJU0M7CisJCWVsc2UKKwkJCXRyYWNrcy0+ZXJyb3IgPSBDRFNfTk9fSU5GTzsKKwkJcmV0dXJuOworCX0KKwkvKiBjaGVjayB3aGF0IHR5cGUgb2YgdHJhY2tzIGFyZSBvbiB0aGlzIGRpc2MgKi8KKwllbnRyeS5jZHRlX2Zvcm1hdCA9IENEUk9NX01TRjsKKwlmb3IgKGkgPSBoZWFkZXIuY2R0aF90cmswOyBpIDw9IGhlYWRlci5jZHRoX3RyazE7IGkrKykgeworCQllbnRyeS5jZHRlX3RyYWNrID0gaTsKKwkJaWYgKGNkaS0+b3BzLT5hdWRpb19pb2N0bChjZGksIENEUk9NUkVBRFRPQ0VOVFJZLCAmZW50cnkpKSB7CisJCQl0cmFja3MtPmVycm9yID0gQ0RTX05PX0lORk87CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGVudHJ5LmNkdGVfY3RybCAmIENEUk9NX0RBVEFfVFJBQ0spIHsKKwkJCWlmIChlbnRyeS5jZHRlX2Zvcm1hdCA9PSAweDEwKQorCQkJCXRyYWNrcy0+Y2RpKys7CisJCQllbHNlIGlmIChlbnRyeS5jZHRlX2Zvcm1hdCA9PSAweDIwKQorCQkJCXRyYWNrcy0+eGErKzsKKwkJCWVsc2UKKwkJCQl0cmFja3MtPmRhdGErKzsKKwkJfSBlbHNlIHsKKwkJCXRyYWNrcy0+YXVkaW8rKzsKKwkJfQorCQljZF9kYmcoQ0RfQ09VTlRfVFJBQ0tTLCAidHJhY2sgJWQ6IGZvcm1hdD0lZCwgY3RybD0lZFxuIiwKKwkJICAgICAgIGksIGVudHJ5LmNkdGVfZm9ybWF0LCBlbnRyeS5jZHRlX2N0cmwpOworCX0KKwljZF9kYmcoQ0RfQ09VTlRfVFJBQ0tTLCAiZGlzYyBoYXMgJWQgdHJhY2tzOiAlZD1hdWRpbyAlZD1kYXRhICVkPUNkLUkgJWQ9WEFcbiIsCisJICAgICAgIGhlYWRlci5jZHRoX3RyazEsIHRyYWNrcy0+YXVkaW8sIHRyYWNrcy0+ZGF0YSwKKwkgICAgICAgdHJhY2tzLT5jZGksIHRyYWNrcy0+eGEpOworfQorCitzdGF0aWMKK2ludCBvcGVuX2Zvcl9kYXRhKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQoreworCWludCByZXQ7CisJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOworCXRyYWNrdHlwZSB0cmFja3M7CisJY2RfZGJnKENEX09QRU4sICJlbnRlcmluZyBvcGVuX2Zvcl9kYXRhXG4iKTsKKwkvKiBDaGVjayBpZiB0aGUgZHJpdmVyIGNhbiByZXBvcnQgZHJpdmUgc3RhdHVzLiAgSWYgaXQgY2FuLCB3ZQorCSAgIGNhbiBkbyBjbGV2ZXIgdGhpbmdzLiAgSWYgaXQgY2FuJ3QsIHdlbGwsIHdlIGF0IGxlYXN0IHRyaWVkISAqLworCWlmIChjZG8tPmRyaXZlX3N0YXR1cyAhPSBOVUxMKSB7CisJCXJldCA9IGNkby0+ZHJpdmVfc3RhdHVzKGNkaSwgQ0RTTF9DVVJSRU5UKTsKKwkJY2RfZGJnKENEX09QRU4sICJkcml2ZV9zdGF0dXM9JWRcbiIsIHJldCk7CisJCWlmIChyZXQgPT0gQ0RTX1RSQVlfT1BFTikgeworCQkJY2RfZGJnKENEX09QRU4sICJ0aGUgdHJheSBpcyBvcGVuLi4uXG4iKTsKKwkJCS8qIGNhbi9tYXkgaSBjbG9zZSBpdD8gKi8KKwkJCWlmIChDRFJPTV9DQU4oQ0RDX0NMT1NFX1RSQVkpICYmCisJCQkgICAgY2RpLT5vcHRpb25zICYgQ0RPX0FVVE9fQ0xPU0UpIHsKKwkJCQljZF9kYmcoQ0RfT1BFTiwgInRyeWluZyB0byBjbG9zZSB0aGUgdHJheVxuIik7CisJCQkJcmV0PWNkby0+dHJheV9tb3ZlKGNkaSwwKTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCWNkX2RiZyhDRF9PUEVOLCAiYnVtbWVyLiB0cmllZCB0byBjbG9zZSB0aGUgdHJheSBidXQgZmFpbGVkLlxuIik7CisJCQkJCS8qIElnbm9yZSB0aGUgZXJyb3IgZnJvbSB0aGUgbG93CisJCQkJCWxldmVsIGRyaXZlci4gIFdlIGRvbid0IGNhcmUgd2h5IGl0CisJCQkJCWNvdWxkbid0IGNsb3NlIHRoZSB0cmF5LiAgV2Ugb25seSBjYXJlIAorCQkJCQl0aGF0IHRoZXJlIGlzIG5vIGRpc2MgaW4gdGhlIGRyaXZlLCAKKwkJCQkJc2luY2UgdGhhdCBpcyB0aGUgX1JFQUxfIHByb2JsZW0gaGVyZS4qLworCQkJCQlyZXQ9LUVOT01FRElVTTsKKwkJCQkJZ290byBjbGVhbl91cF9hbmRfcmV0dXJuOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJY2RfZGJnKENEX09QRU4sICJidW1tZXIuIHRoaXMgZHJpdmUgY2FuJ3QgY2xvc2UgdGhlIHRyYXkuXG4iKTsKKwkJCQlyZXQ9LUVOT01FRElVTTsKKwkJCQlnb3RvIGNsZWFuX3VwX2FuZF9yZXR1cm47CisJCQl9CisJCQkvKiBPaywgdGhlIGRvb3Igc2hvdWxkIGJlIGNsb3NlZCBub3cuLiBDaGVjayBhZ2FpbiAqLworCQkJcmV0ID0gY2RvLT5kcml2ZV9zdGF0dXMoY2RpLCBDRFNMX0NVUlJFTlQpOworCQkJaWYgKChyZXQgPT0gQ0RTX05PX0RJU0MpIHx8IChyZXQ9PUNEU19UUkFZX09QRU4pKSB7CisJCQkJY2RfZGJnKENEX09QRU4sICJidW1tZXIuIHRoZSB0cmF5IGlzIHN0aWxsIG5vdCBjbG9zZWQuXG4iKTsKKwkJCQljZF9kYmcoQ0RfT1BFTiwgInRyYXkgbWlnaHQgbm90IGNvbnRhaW4gYSBtZWRpdW1cbiIpOworCQkJCXJldD0tRU5PTUVESVVNOworCQkJCWdvdG8gY2xlYW5fdXBfYW5kX3JldHVybjsKKwkJCX0KKwkJCWNkX2RiZyhDRF9PUEVOLCAidGhlIHRyYXkgaXMgbm93IGNsb3NlZFxuIik7CisJCX0KKwkJLyogdGhlIGRvb3Igc2hvdWxkIGJlIGNsb3NlZCBub3csIGNoZWNrIGZvciB0aGUgZGlzYyAqLworCQlyZXQgPSBjZG8tPmRyaXZlX3N0YXR1cyhjZGksIENEU0xfQ1VSUkVOVCk7CisJCWlmIChyZXQhPUNEU19ESVNDX09LKSB7CisJCQlyZXQgPSAtRU5PTUVESVVNOworCQkJZ290byBjbGVhbl91cF9hbmRfcmV0dXJuOworCQl9CisJfQorCWNkcm9tX2NvdW50X3RyYWNrcyhjZGksICZ0cmFja3MpOworCWlmICh0cmFja3MuZXJyb3IgPT0gQ0RTX05PX0RJU0MpIHsKKwkJY2RfZGJnKENEX09QRU4sICJidW1tZXIuIG5vIGRpc2MuXG4iKTsKKwkJcmV0PS1FTk9NRURJVU07CisJCWdvdG8gY2xlYW5fdXBfYW5kX3JldHVybjsKKwl9CisJLyogQ0QtUGxheWVycyB3aGljaCBkb24ndCB1c2UgT19OT05CTE9DSywgd29ya21hbgorCSAqIGZvciBleGFtcGxlLCBuZWVkIGJpdCBDRE9fQ0hFQ0tfVFlQRSBjbGVhcmVkISAqLworCWlmICh0cmFja3MuZGF0YT09MCkgeworCQlpZiAoY2RpLT5vcHRpb25zICYgQ0RPX0NIRUNLX1RZUEUpIHsKKwkJICAgIC8qIGdpdmUgcGVvcGxlIGEgd2FybmluZyBzaG90LCBub3cgdGhhdCBDRE9fQ0hFQ0tfVFlQRQorCQkgICAgICAgaXMgdGhlIGRlZmF1bHQgY2FzZSEgKi8KKwkJICAgIGNkX2RiZyhDRF9PUEVOLCAiYnVtbWVyLiB3cm9uZyBtZWRpYSB0eXBlLlxuIik7CisJCSAgICBjZF9kYmcoQ0RfV0FSTklORywgInBpZCAlZCBtdXN0IG9wZW4gZGV2aWNlIE9fTk9OQkxPQ0shXG4iLAorCQkJICAgKHVuc2lnbmVkIGludCl0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCSAgICByZXQ9LUVNRURJVU1UWVBFOworCQkgICAgZ290byBjbGVhbl91cF9hbmRfcmV0dXJuOworCQl9CisJCWVsc2UgeworCQkgICAgY2RfZGJnKENEX09QRU4sICJ3cm9uZyBtZWRpYSB0eXBlLCBidXQgQ0RPX0NIRUNLX1RZUEUgbm90IHNldFxuIik7CisJCX0KKwl9CisKKwljZF9kYmcoQ0RfT1BFTiwgImFsbCBzZWVtcyB3ZWxsLCBvcGVuaW5nIHRoZSBkZXZpY2VuIik7CisKKwkvKiBhbGwgc2VlbXMgd2VsbCwgd2UgY2FuIG9wZW4gdGhlIGRldmljZSAqLworCXJldCA9IGNkby0+b3BlbihjZGksIDApOyAvKiBvcGVuIGZvciBkYXRhICovCisJY2RfZGJnKENEX09QRU4sICJvcGVuaW5nIHRoZSBkZXZpY2UgZ2F2ZSBtZSAlZFxuIiwgcmV0KTsKKwkvKiBBZnRlciBhbGwgdGhpcyBjYXJlZnVsIGNoZWNraW5nLCB3ZSBzaG91bGRuJ3QgaGF2ZSBwcm9ibGVtcworCSAgIG9wZW5pbmcgdGhlIGRldmljZSwgYnV0IHdlIGRvbid0IHdhbnQgdGhlIGRldmljZSBsb2NrZWQgaWYgCisJICAgdGhpcyBzb21laG93IGZhaWxzLi4uICovCisJaWYgKHJldCkgeworCQljZF9kYmcoQ0RfT1BFTiwgIm9wZW4gZGV2aWNlIGZhaWxlZFxuIik7CisJCWdvdG8gY2xlYW5fdXBfYW5kX3JldHVybjsKKwl9CisJaWYgKENEUk9NX0NBTihDRENfTE9DSykgJiYgKGNkaS0+b3B0aW9ucyAmIENET19MT0NLKSkgeworCQkJY2RvLT5sb2NrX2Rvb3IoY2RpLCAxKTsKKwkJCWNkX2RiZyhDRF9PUEVOLCAiZG9vciBsb2NrZWRcbiIpOworCX0KKwljZF9kYmcoQ0RfT1BFTiwgImRldmljZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKKwlyZXR1cm4gcmV0OworCisJLyogU29tZXRoaW5nIGZhaWxlZC4gIFRyeSB0byB1bmxvY2sgdGhlIGRyaXZlLCBiZWNhdXNlIHNvbWUgZHJpdmVycworCShub3RhYmx5IGlkZS1jZCkgbG9jayB0aGUgZHJpdmUgYWZ0ZXIgZXZlcnkgY29tbWFuZC4gIFRoaXMgcHJvZHVjZWQKKwlhIG5hc3R5IGJ1ZyB3aGVyZSBhZnRlciBtb3VudCBmYWlsZWQsIHRoZSBkcml2ZSB3b3VsZCByZW1haW4gbG9ja2VkISAgCisJVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRyaXZlIGdldHMgdW5sb2NrZWQgYWZ0ZXIgYSBtb3VudCBmYWlscy4gIFRoaXMgCisJaXMgYSBnb3RvIHRvIGF2b2lkIGJsb2F0aW5nIHRoZSBkcml2ZXIgd2l0aCByZWR1bmRhbnQgY29kZS4gKi8gCitjbGVhbl91cF9hbmRfcmV0dXJuOgorCWNkX2RiZyhDRF9PUEVOLCAib3BlbiBmYWlsZWRcbiIpOworCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spICYmIGNkaS0+b3B0aW9ucyAmIENET19MT0NLKSB7CisJCQljZG8tPmxvY2tfZG9vcihjZGksIDApOworCQkJY2RfZGJnKENEX09QRU4sICJkb29yIHVubG9ja2VkXG4iKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogLyogV2UgdXNlIHRoZSBvcGVuLW9wdGlvbiBPX05PTkJMT0NLIHRvIGluZGljYXRlIHRoYXQgdGhlCiAgKiBwdXJwb3NlIG9mIG9wZW5pbmcgaXMgb25seSBmb3Igc3Vic2VxdWVudCBpb2N0bCgpIGNhbGxzOyBubyBkZXZpY2UKICAqIGludGVncml0eSBjaGVja3MgYXJlIHBlcmZvcm1lZC4KQEAgLTk3NywxMSArMTE0NiwxMiBAQAogICogaXMgaW4gdGhlaXIgb3duIGludGVyZXN0OiBkZXZpY2UgY29udHJvbCBiZWNvbWVzIGEgbG90IGVhc2llcgogICogdGhpcyB3YXkuCiAgKi8KLWludCBjZHJvbV9vcGVuKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCitpbnQgY2Ryb21fb3BlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkgICAgICAgZm1vZGVfdCBtb2RlKQogewogCWludCByZXQ7CiAKLQljZGluZm8oQ0RfT1BFTiwgImVudGVyaW5nIGNkcm9tX29wZW5cbiIpOyAKKwljZF9kYmcoQ0RfT1BFTiwgImVudGVyaW5nIGNkcm9tX29wZW5cbiIpOwogCiAJLyogb3BlbiBpcyBldmVudCBzeW5jaHJvbml6YXRpb24gcG9pbnQsIGNoZWNrIGV2ZW50cyBmaXJzdCAqLwogCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwpAQCAtMTAxMCwxMyArMTE4MCwxMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JY2RpbmZvKENEX09QRU4sICJVc2UgY291bnQgZm9yIFwiL2Rldi8lc1wiIG5vdyAlZFxuIiwKLQkJCWNkaS0+bmFtZSwgY2RpLT51c2VfY291bnQpOworCWNkX2RiZyhDRF9PUEVOLCAiVXNlIGNvdW50IGZvciBcIi9kZXYvJXNcIiBub3cgJWRcbiIsCisJICAgICAgIGNkaS0+bmFtZSwgY2RpLT51c2VfY291bnQpOwogCXJldHVybiAwOwogZXJyX3JlbGVhc2U6CiAJaWYgKENEUk9NX0NBTihDRENfTE9DSykgJiYgY2RpLT5vcHRpb25zICYgQ0RPX0xPQ0spIHsKIAkJY2RpLT5vcHMtPmxvY2tfZG9vcihjZGksIDApOwotCQljZGluZm8oQ0RfT1BFTiwgImRvb3IgdW5sb2NrZWQuXG4iKTsKKwkJY2RfZGJnKENEX09QRU4sICJkb29yIHVubG9ja2VkXG4iKTsKIAl9CiAJY2RpLT5vcHMtPnJlbGVhc2UoY2RpKTsKIGVycjoKQEAgLTEwMjQsMTEzICsxMTk0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMKLWludCBvcGVuX2Zvcl9kYXRhKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKLQl0cmFja3R5cGUgdHJhY2tzOwotCWNkaW5mbyhDRF9PUEVOLCAiZW50ZXJpbmcgb3Blbl9mb3JfZGF0YVxuIik7Ci0JLyogQ2hlY2sgaWYgdGhlIGRyaXZlciBjYW4gcmVwb3J0IGRyaXZlIHN0YXR1cy4gIElmIGl0IGNhbiwgd2UKLQkgICBjYW4gZG8gY2xldmVyIHRoaW5ncy4gIElmIGl0IGNhbid0LCB3ZWxsLCB3ZSBhdCBsZWFzdCB0cmllZCEgKi8KLQlpZiAoY2RvLT5kcml2ZV9zdGF0dXMgIT0gTlVMTCkgewotCQlyZXQgPSBjZG8tPmRyaXZlX3N0YXR1cyhjZGksIENEU0xfQ1VSUkVOVCk7Ci0JCWNkaW5mbyhDRF9PUEVOLCAiZHJpdmVfc3RhdHVzPSVkXG4iLCByZXQpOyAKLQkJaWYgKHJldCA9PSBDRFNfVFJBWV9PUEVOKSB7Ci0JCQljZGluZm8oQ0RfT1BFTiwgInRoZSB0cmF5IGlzIG9wZW4uLi5cbiIpOyAKLQkJCS8qIGNhbi9tYXkgaSBjbG9zZSBpdD8gKi8KLQkJCWlmIChDRFJPTV9DQU4oQ0RDX0NMT1NFX1RSQVkpICYmCi0JCQkgICAgY2RpLT5vcHRpb25zICYgQ0RPX0FVVE9fQ0xPU0UpIHsKLQkJCQljZGluZm8oQ0RfT1BFTiwgInRyeWluZyB0byBjbG9zZSB0aGUgdHJheS5cbiIpOyAKLQkJCQlyZXQ9Y2RvLT50cmF5X21vdmUoY2RpLDApOwotCQkJCWlmIChyZXQpIHsKLQkJCQkJY2RpbmZvKENEX09QRU4sICJidW1tZXIuIHRyaWVkIHRvIGNsb3NlIHRoZSB0cmF5IGJ1dCBmYWlsZWQuXG4iKTsgCi0JCQkJCS8qIElnbm9yZSB0aGUgZXJyb3IgZnJvbSB0aGUgbG93Ci0JCQkJCWxldmVsIGRyaXZlci4gIFdlIGRvbid0IGNhcmUgd2h5IGl0Ci0JCQkJCWNvdWxkbid0IGNsb3NlIHRoZSB0cmF5LiAgV2Ugb25seSBjYXJlIAotCQkJCQl0aGF0IHRoZXJlIGlzIG5vIGRpc2MgaW4gdGhlIGRyaXZlLCAKLQkJCQkJc2luY2UgdGhhdCBpcyB0aGUgX1JFQUxfIHByb2JsZW0gaGVyZS4qLwotCQkJCQlyZXQ9LUVOT01FRElVTTsKLQkJCQkJZ290byBjbGVhbl91cF9hbmRfcmV0dXJuOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJY2RpbmZvKENEX09QRU4sICJidW1tZXIuIHRoaXMgZHJpdmUgY2FuJ3QgY2xvc2UgdGhlIHRyYXkuXG4iKTsgCi0JCQkJcmV0PS1FTk9NRURJVU07Ci0JCQkJZ290byBjbGVhbl91cF9hbmRfcmV0dXJuOwotCQkJfQotCQkJLyogT2ssIHRoZSBkb29yIHNob3VsZCBiZSBjbG9zZWQgbm93Li4gQ2hlY2sgYWdhaW4gKi8KLQkJCXJldCA9IGNkby0+ZHJpdmVfc3RhdHVzKGNkaSwgQ0RTTF9DVVJSRU5UKTsKLQkJCWlmICgocmV0ID09IENEU19OT19ESVNDKSB8fCAocmV0PT1DRFNfVFJBWV9PUEVOKSkgewotCQkJCWNkaW5mbyhDRF9PUEVOLCAiYnVtbWVyLiB0aGUgdHJheSBpcyBzdGlsbCBub3QgY2xvc2VkLlxuIik7IAotCQkJCWNkaW5mbyhDRF9PUEVOLCAidHJheSBtaWdodCBub3QgY29udGFpbiBhIG1lZGl1bS5cbiIpOwotCQkJCXJldD0tRU5PTUVESVVNOwotCQkJCWdvdG8gY2xlYW5fdXBfYW5kX3JldHVybjsKLQkJCX0KLQkJCWNkaW5mbyhDRF9PUEVOLCAidGhlIHRyYXkgaXMgbm93IGNsb3NlZC5cbiIpOyAKLQkJfQotCQkvKiB0aGUgZG9vciBzaG91bGQgYmUgY2xvc2VkIG5vdywgY2hlY2sgZm9yIHRoZSBkaXNjICovCi0JCXJldCA9IGNkby0+ZHJpdmVfc3RhdHVzKGNkaSwgQ0RTTF9DVVJSRU5UKTsKLQkJaWYgKHJldCE9Q0RTX0RJU0NfT0spIHsKLQkJCXJldCA9IC1FTk9NRURJVU07Ci0JCQlnb3RvIGNsZWFuX3VwX2FuZF9yZXR1cm47Ci0JCX0KLQl9Ci0JY2Ryb21fY291bnRfdHJhY2tzKGNkaSwgJnRyYWNrcyk7Ci0JaWYgKHRyYWNrcy5lcnJvciA9PSBDRFNfTk9fRElTQykgewotCQljZGluZm8oQ0RfT1BFTiwgImJ1bW1lci4gbm8gZGlzYy5cbiIpOwotCQlyZXQ9LUVOT01FRElVTTsKLQkJZ290byBjbGVhbl91cF9hbmRfcmV0dXJuOwotCX0KLQkvKiBDRC1QbGF5ZXJzIHdoaWNoIGRvbid0IHVzZSBPX05PTkJMT0NLLCB3b3JrbWFuCi0JICogZm9yIGV4YW1wbGUsIG5lZWQgYml0IENET19DSEVDS19UWVBFIGNsZWFyZWQhICovCi0JaWYgKHRyYWNrcy5kYXRhPT0wKSB7Ci0JCWlmIChjZGktPm9wdGlvbnMgJiBDRE9fQ0hFQ0tfVFlQRSkgewotCQkgICAgLyogZ2l2ZSBwZW9wbGUgYSB3YXJuaW5nIHNob3QsIG5vdyB0aGF0IENET19DSEVDS19UWVBFCi0JCSAgICAgICBpcyB0aGUgZGVmYXVsdCBjYXNlISAqLwotCQkgICAgY2RpbmZvKENEX09QRU4sICJidW1tZXIuIHdyb25nIG1lZGlhIHR5cGUuXG4iKTsgCi0JCSAgICBjZGluZm8oQ0RfV0FSTklORywgInBpZCAlZCBtdXN0IG9wZW4gZGV2aWNlIE9fTk9OQkxPQ0shXG4iLAotCQkJCQkodW5zaWduZWQgaW50KXRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJICAgIHJldD0tRU1FRElVTVRZUEU7Ci0JCSAgICBnb3RvIGNsZWFuX3VwX2FuZF9yZXR1cm47Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgICBjZGluZm8oQ0RfT1BFTiwgIndyb25nIG1lZGlhIHR5cGUsIGJ1dCBDRE9fQ0hFQ0tfVFlQRSBub3Qgc2V0LlxuIik7Ci0JCX0KLQl9Ci0KLQljZGluZm8oQ0RfT1BFTiwgImFsbCBzZWVtcyB3ZWxsLCBvcGVuaW5nIHRoZSBkZXZpY2UuXG4iKTsgCi0KLQkvKiBhbGwgc2VlbXMgd2VsbCwgd2UgY2FuIG9wZW4gdGhlIGRldmljZSAqLwotCXJldCA9IGNkby0+b3BlbihjZGksIDApOyAvKiBvcGVuIGZvciBkYXRhICovCi0JY2RpbmZvKENEX09QRU4sICJvcGVuaW5nIHRoZSBkZXZpY2UgZ2F2ZSBtZSAlZC5cbiIsIHJldCk7IAotCS8qIEFmdGVyIGFsbCB0aGlzIGNhcmVmdWwgY2hlY2tpbmcsIHdlIHNob3VsZG4ndCBoYXZlIHByb2JsZW1zCi0JICAgb3BlbmluZyB0aGUgZGV2aWNlLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGUgZGV2aWNlIGxvY2tlZCBpZiAKLQkgICB0aGlzIHNvbWVob3cgZmFpbHMuLi4gKi8KLQlpZiAocmV0KSB7Ci0JCWNkaW5mbyhDRF9PUEVOLCAib3BlbiBkZXZpY2UgZmFpbGVkLlxuIik7IAotCQlnb3RvIGNsZWFuX3VwX2FuZF9yZXR1cm47Ci0JfQotCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spICYmIChjZGktPm9wdGlvbnMgJiBDRE9fTE9DSykpIHsKLQkJCWNkby0+bG9ja19kb29yKGNkaSwgMSk7Ci0JCQljZGluZm8oQ0RfT1BFTiwgImRvb3IgbG9ja2VkLlxuIik7Ci0JfQotCWNkaW5mbyhDRF9PUEVOLCAiZGV2aWNlIG9wZW5lZCBzdWNjZXNzZnVsbHkuXG4iKTsgCi0JcmV0dXJuIHJldDsKLQotCS8qIFNvbWV0aGluZyBmYWlsZWQuICBUcnkgdG8gdW5sb2NrIHRoZSBkcml2ZSwgYmVjYXVzZSBzb21lIGRyaXZlcnMKLQkobm90YWJseSBpZGUtY2QpIGxvY2sgdGhlIGRyaXZlIGFmdGVyIGV2ZXJ5IGNvbW1hbmQuICBUaGlzIHByb2R1Y2VkCi0JYSBuYXN0eSBidWcgd2hlcmUgYWZ0ZXIgbW91bnQgZmFpbGVkLCB0aGUgZHJpdmUgd291bGQgcmVtYWluIGxvY2tlZCEgIAotCVRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkcml2ZSBnZXRzIHVubG9ja2VkIGFmdGVyIGEgbW91bnQgZmFpbHMuICBUaGlzIAotCWlzIGEgZ290byB0byBhdm9pZCBibG9hdGluZyB0aGUgZHJpdmVyIHdpdGggcmVkdW5kYW50IGNvZGUuICovIAotY2xlYW5fdXBfYW5kX3JldHVybjoKLQljZGluZm8oQ0RfT1BFTiwgIm9wZW4gZmFpbGVkLlxuIik7IAotCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spICYmIGNkaS0+b3B0aW9ucyAmIENET19MT0NLKSB7Ci0JCQljZG8tPmxvY2tfZG9vcihjZGksIDApOwotCQkJY2RpbmZvKENEX09QRU4sICJkb29yIHVubG9ja2VkLlxuIik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIFRoaXMgY29kZSBpcyBzaW1pbGFyIHRvIHRoYXQgaW4gb3Blbl9mb3JfZGF0YS4gVGhlIHJvdXRpbmUgaXMgY2FsbGVkCiAgICB3aGVuZXZlciBhbiBhdWRpbyBwbGF5IG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQuCiAqLwpAQCAtMTEzOSwyMSArMTIwMiwyMSBAQAogewogICAgICAgICBpbnQgcmV0OwogCXRyYWNrdHlwZSB0cmFja3M7Ci0JY2RpbmZvKENEX09QRU4sICJlbnRlcmluZyBjaGVja19mb3JfYXVkaW9fZGlzY1xuIik7CisJY2RfZGJnKENEX09QRU4sICJlbnRlcmluZyBjaGVja19mb3JfYXVkaW9fZGlzY1xuIik7CiAJaWYgKCEoY2RpLT5vcHRpb25zICYgQ0RPX0NIRUNLX1RZUEUpKQogCQlyZXR1cm4gMDsKIAlpZiAoY2RvLT5kcml2ZV9zdGF0dXMgIT0gTlVMTCkgewogCQlyZXQgPSBjZG8tPmRyaXZlX3N0YXR1cyhjZGksIENEU0xfQ1VSUkVOVCk7Ci0JCWNkaW5mbyhDRF9PUEVOLCAiZHJpdmVfc3RhdHVzPSVkXG4iLCByZXQpOyAKKwkJY2RfZGJnKENEX09QRU4sICJkcml2ZV9zdGF0dXM9JWRcbiIsIHJldCk7CiAJCWlmIChyZXQgPT0gQ0RTX1RSQVlfT1BFTikgewotCQkJY2RpbmZvKENEX09QRU4sICJ0aGUgdHJheSBpcyBvcGVuLi4uXG4iKTsgCisJCQljZF9kYmcoQ0RfT1BFTiwgInRoZSB0cmF5IGlzIG9wZW4uLi5cbiIpOwogCQkJLyogY2FuL21heSBpIGNsb3NlIGl0PyAqLwogCQkJaWYgKENEUk9NX0NBTihDRENfQ0xPU0VfVFJBWSkgJiYKIAkJCSAgICBjZGktPm9wdGlvbnMgJiBDRE9fQVVUT19DTE9TRSkgewotCQkJCWNkaW5mbyhDRF9PUEVOLCAidHJ5aW5nIHRvIGNsb3NlIHRoZSB0cmF5LlxuIik7IAorCQkJCWNkX2RiZyhDRF9PUEVOLCAidHJ5aW5nIHRvIGNsb3NlIHRoZSB0cmF5XG4iKTsKIAkJCQlyZXQ9Y2RvLT50cmF5X21vdmUoY2RpLDApOwogCQkJCWlmIChyZXQpIHsKLQkJCQkJY2RpbmZvKENEX09QRU4sICJidW1tZXIuIHRyaWVkIHRvIGNsb3NlIHRyYXkgYnV0IGZhaWxlZC5cbiIpOyAKKwkJCQkJY2RfZGJnKENEX09QRU4sICJidW1tZXIuIHRyaWVkIHRvIGNsb3NlIHRyYXkgYnV0IGZhaWxlZC5cbiIpOwogCQkJCQkvKiBJZ25vcmUgdGhlIGVycm9yIGZyb20gdGhlIGxvdwogCQkJCQlsZXZlbCBkcml2ZXIuICBXZSBkb24ndCBjYXJlIHdoeSBpdAogCQkJCQljb3VsZG4ndCBjbG9zZSB0aGUgdHJheS4gIFdlIG9ubHkgY2FyZSAKQEAgLTExNjIsMjAgKzEyMjUsMjAgQEAKIAkJCQkJcmV0dXJuIC1FTk9NRURJVU07CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQljZGluZm8oQ0RfT1BFTiwgImJ1bW1lci4gdGhpcyBkcml2ZXIgY2FuJ3QgY2xvc2UgdGhlIHRyYXkuXG4iKTsgCisJCQkJY2RfZGJnKENEX09QRU4sICJidW1tZXIuIHRoaXMgZHJpdmVyIGNhbid0IGNsb3NlIHRoZSB0cmF5LlxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRURJVU07CiAJCQl9CiAJCQkvKiBPaywgdGhlIGRvb3Igc2hvdWxkIGJlIGNsb3NlZCBub3cuLiBDaGVjayBhZ2FpbiAqLwogCQkJcmV0ID0gY2RvLT5kcml2ZV9zdGF0dXMoY2RpLCBDRFNMX0NVUlJFTlQpOwogCQkJaWYgKChyZXQgPT0gQ0RTX05PX0RJU0MpIHx8IChyZXQ9PUNEU19UUkFZX09QRU4pKSB7Ci0JCQkJY2RpbmZvKENEX09QRU4sICJidW1tZXIuIHRoZSB0cmF5IGlzIHN0aWxsIG5vdCBjbG9zZWQuXG4iKTsgCisJCQkJY2RfZGJnKENEX09QRU4sICJidW1tZXIuIHRoZSB0cmF5IGlzIHN0aWxsIG5vdCBjbG9zZWQuXG4iKTsKIAkJCQlyZXR1cm4gLUVOT01FRElVTTsKIAkJCX0JCiAJCQlpZiAocmV0IT1DRFNfRElTQ19PSykgewotCQkJCWNkaW5mbyhDRF9PUEVOLCAiYnVtbWVyLiBkaXNjIGlzbid0IHJlYWR5LlxuIik7IAorCQkJCWNkX2RiZyhDRF9PUEVOLCAiYnVtbWVyLiBkaXNjIGlzbid0IHJlYWR5LlxuIik7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CQotCQkJY2RpbmZvKENEX09QRU4sICJ0aGUgdHJheSBpcyBub3cgY2xvc2VkLlxuIik7IAorCQkJY2RfZGJnKENEX09QRU4sICJ0aGUgdHJheSBpcyBub3cgY2xvc2VkXG4iKTsKIAkJfQkKIAl9CiAJY2Ryb21fY291bnRfdHJhY2tzKGNkaSwgJnRyYWNrcyk7CkBAIC0xMTkzLDE3ICsxMjU2LDE4IEBACiAJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOwogCWludCBvcGVuZWRfZm9yX2RhdGE7CiAKLQljZGluZm8oQ0RfQ0xPU0UsICJlbnRlcmluZyBjZHJvbV9yZWxlYXNlXG4iKTsKKwljZF9kYmcoQ0RfQ0xPU0UsICJlbnRlcmluZyBjZHJvbV9yZWxlYXNlXG4iKTsKIAogCWlmIChjZGktPnVzZV9jb3VudCA+IDApCiAJCWNkaS0+dXNlX2NvdW50LS07CiAKIAlpZiAoY2RpLT51c2VfY291bnQgPT0gMCkgewotCQljZGluZm8oQ0RfQ0xPU0UsICJVc2UgY291bnQgZm9yIFwiL2Rldi8lc1wiIG5vdyB6ZXJvXG4iLCBjZGktPm5hbWUpOworCQljZF9kYmcoQ0RfQ0xPU0UsICJVc2UgY291bnQgZm9yIFwiL2Rldi8lc1wiIG5vdyB6ZXJvXG4iLAorCQkgICAgICAgY2RpLT5uYW1lKTsKIAkJY2Ryb21fZHZkX3J3X2Nsb3NlX3dyaXRlKGNkaSk7CiAKIAkJaWYgKChjZG8tPmNhcGFiaWxpdHkgJiBDRENfTE9DSykgJiYgIWNkaS0+a2VlcGxvY2tlZCkgewotCQkJY2RpbmZvKENEX0NMT1NFLCAiVW5sb2NraW5nIGRvb3IhXG4iKTsKKwkJCWNkX2RiZyhDRF9DTE9TRSwgIlVubG9ja2luZyBkb29yIVxuIik7CiAJCQljZG8tPmxvY2tfZG9vcihjZGksIDApOwogCQl9CiAJfQpAQCAtMTI2Miw3ICsxMzI2LDcgQEAKIAlzdHJ1Y3QgY2Ryb21fY2hhbmdlcl9pbmZvICppbmZvOwogCWludCByZXQ7CiAKLQljZGluZm8oQ0RfQ0hBTkdFUiwgImVudGVyaW5nIGNkcm9tX3Nsb3Rfc3RhdHVzKClcbiIpOyAKKwljZF9kYmcoQ0RfQ0hBTkdFUiwgImVudGVyaW5nIGNkcm9tX3Nsb3Rfc3RhdHVzKClcbiIpOwogCWlmIChjZGktPnNhbnlvX3Nsb3QpCiAJCXJldHVybiBDRFNfTk9fSU5GTzsKIAkKQEAgLTEyOTIsNyArMTM1Niw3IEBACiAJaW50IG5zbG90cyA9IDE7CiAJc3RydWN0IGNkcm9tX2NoYW5nZXJfaW5mbyAqaW5mbzsKIAotCWNkaW5mbyhDRF9DSEFOR0VSLCAiZW50ZXJpbmcgY2Ryb21fbnVtYmVyX29mX3Nsb3RzKClcbiIpOyAKKwljZF9kYmcoQ0RfQ0hBTkdFUiwgImVudGVyaW5nIGNkcm9tX251bWJlcl9vZl9zbG90cygpXG4iKTsKIAkvKiBjZHJvbV9yZWFkX21lY2hfc3RhdHVzIHJlcXVpcmVzIGEgdmFsaWQgdmFsdWUgZm9yIGNhcGFjaXR5OiAqLwogCWNkaS0+Y2FwYWNpdHkgPSAwOyAKIApAQCAtMTMxMyw3ICsxMzc3LDcgQEAKIHsKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwogCi0JY2RpbmZvKENEX0NIQU5HRVIsICJlbnRlcmluZyBjZHJvbV9sb2FkX3VubG9hZCgpXG4iKTsgCisJY2RfZGJnKENEX0NIQU5HRVIsICJlbnRlcmluZyBjZHJvbV9sb2FkX3VubG9hZCgpXG4iKTsKIAlpZiAoY2RpLT5zYW55b19zbG90ICYmIHNsb3QgPCAwKQogCQlyZXR1cm4gMDsKIApAQCAtMTM0Miw3ICsxNDA2LDcgQEAKIAlpbnQgY3Vyc2xvdDsKIAlpbnQgcmV0OwogCi0JY2RpbmZvKENEX0NIQU5HRVIsICJlbnRlcmluZyBjZHJvbV9zZWxlY3RfZGlzYygpXG4iKTsgCisJY2RfZGJnKENEX0NIQU5HRVIsICJlbnRlcmluZyBjZHJvbV9zZWxlY3RfZGlzYygpXG4iKTsKIAlpZiAoIUNEUk9NX0NBTihDRENfU0VMRUNUX0RJU0MpKQogCQlyZXR1cm4gLUVEUklWRV9DQU5UX0RPX1RISVM7CiAKQEAgLTE0NzYsNTEgKzE1NDAsNiBAQAogCXJldHVybiBtZWRpYV9jaGFuZ2VkKGNkaSwgMCk7CiB9CiAKLS8qIGJhZGx5IGJyb2tlbiwgSSBrbm93LiBJcyBkdWUgZm9yIGEgZml4dXAgYW55dGltZS4gKi8KLXN0YXRpYyB2b2lkIGNkcm9tX2NvdW50X3RyYWNrcyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgdHJhY2t0eXBlKiB0cmFja3MpCi17Ci0Jc3RydWN0IGNkcm9tX3RvY2hkciBoZWFkZXI7Ci0Jc3RydWN0IGNkcm9tX3RvY2VudHJ5IGVudHJ5OwotCWludCByZXQsIGk7Ci0JdHJhY2tzLT5kYXRhPTA7Ci0JdHJhY2tzLT5hdWRpbz0wOwotCXRyYWNrcy0+Y2RpPTA7Ci0JdHJhY2tzLT54YT0wOwotCXRyYWNrcy0+ZXJyb3I9MDsKLQljZGluZm8oQ0RfQ09VTlRfVFJBQ0tTLCAiZW50ZXJpbmcgY2Ryb21fY291bnRfdHJhY2tzXG4iKTsgCi0JLyogR3JhYiB0aGUgVE9DIGhlYWRlciBzbyB3ZSBjYW4gc2VlIGhvdyBtYW55IHRyYWNrcyB0aGVyZSBhcmUgKi8KLQlpZiAoKHJldCA9IGNkaS0+b3BzLT5hdWRpb19pb2N0bChjZGksIENEUk9NUkVBRFRPQ0hEUiwgJmhlYWRlcikpKSB7Ci0JCWlmIChyZXQgPT0gLUVOT01FRElVTSkKLQkJCXRyYWNrcy0+ZXJyb3IgPSBDRFNfTk9fRElTQzsKLQkJZWxzZQotCQkJdHJhY2tzLT5lcnJvciA9IENEU19OT19JTkZPOwotCQlyZXR1cm47Ci0JfQkKLQkvKiBjaGVjayB3aGF0IHR5cGUgb2YgdHJhY2tzIGFyZSBvbiB0aGlzIGRpc2MgKi8KLQllbnRyeS5jZHRlX2Zvcm1hdCA9IENEUk9NX01TRjsKLQlmb3IgKGkgPSBoZWFkZXIuY2R0aF90cmswOyBpIDw9IGhlYWRlci5jZHRoX3RyazE7IGkrKykgewotCQllbnRyeS5jZHRlX3RyYWNrICA9IGk7Ci0JCWlmIChjZGktPm9wcy0+YXVkaW9faW9jdGwoY2RpLCBDRFJPTVJFQURUT0NFTlRSWSwgJmVudHJ5KSkgewotCQkJdHJhY2tzLT5lcnJvcj1DRFNfTk9fSU5GTzsKLQkJCXJldHVybjsKLQkJfQkKLQkJaWYgKGVudHJ5LmNkdGVfY3RybCAmIENEUk9NX0RBVEFfVFJBQ0spIHsKLQkJICAgIGlmIChlbnRyeS5jZHRlX2Zvcm1hdCA9PSAweDEwKQotCQkJdHJhY2tzLT5jZGkrKzsKLQkJICAgIGVsc2UgaWYgKGVudHJ5LmNkdGVfZm9ybWF0ID09IDB4MjApIAotCQkJdHJhY2tzLT54YSsrOwotCQkgICAgZWxzZQotCQkJdHJhY2tzLT5kYXRhKys7Ci0JCX0gZWxzZQotCQkgICAgdHJhY2tzLT5hdWRpbysrOwotCQljZGluZm8oQ0RfQ09VTlRfVFJBQ0tTLCAidHJhY2sgJWQ6IGZvcm1hdD0lZCwgY3RybD0lZFxuIiwKLQkJICAgICAgIGksIGVudHJ5LmNkdGVfZm9ybWF0LCBlbnRyeS5jZHRlX2N0cmwpOwotCX0JCi0JY2RpbmZvKENEX0NPVU5UX1RSQUNLUywgImRpc2MgaGFzICVkIHRyYWNrczogJWQ9YXVkaW8gJWQ9ZGF0YSAlZD1DZC1JICVkPVhBXG4iLCAKLQkJaGVhZGVyLmNkdGhfdHJrMSwgdHJhY2tzLT5hdWRpbywgdHJhY2tzLT5kYXRhLCAKLQkJdHJhY2tzLT5jZGksIHRyYWNrcy0+eGEpOwotfQkKLQogLyogUmVxdWVzdHMgdG8gdGhlIGxvdy1sZXZlbCBkcml2ZXJzIHdpbGwgL2Fsd2F5cy8gYmUgZG9uZSBpbiB0aGUKICAgIGZvbGxvd2luZyBmb3JtYXQgY29udmVudGlvbjoKIApAQCAtMTYzMiw3ICsxNjUxLDcgQEAKIAlzd2l0Y2ggKGFpLT50eXBlKSB7CiAJLyogTFUgZGF0YSBzZW5kICovCiAJY2FzZSBEVkRfTFVfU0VORF9BR0lEOgotCQljZGluZm8oQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0xVX1NFTkRfQUdJRFxuIik7IAorCQljZF9kYmcoQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0xVX1NFTkRfQUdJRFxuIik7CiAJCWNnYy5xdWlldCA9IDE7CiAJCXNldHVwX3JlcG9ydF9rZXkoJmNnYywgYWktPmxzYS5hZ2lkLCAwKTsKIApAQCAtMTY0NCw3ICsxNjYzLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIERWRF9MVV9TRU5EX0tFWTE6Ci0JCWNkaW5mbyhDRF9EVkQsICJlbnRlcmluZyBEVkRfTFVfU0VORF9LRVkxXG4iKTsgCisJCWNkX2RiZyhDRF9EVkQsICJlbnRlcmluZyBEVkRfTFVfU0VORF9LRVkxXG4iKTsKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCBhaS0+bHNrLmFnaWQsIDIpOwogCiAJCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKQEAgLTE2NTUsNyArMTY3NCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBEVkRfTFVfU0VORF9DSEFMTEVOR0U6Ci0JCWNkaW5mbyhDRF9EVkQsICJlbnRlcmluZyBEVkRfTFVfU0VORF9DSEFMTEVOR0VcbiIpOyAKKwkJY2RfZGJnKENEX0RWRCwgImVudGVyaW5nIERWRF9MVV9TRU5EX0NIQUxMRU5HRVxuIik7CiAJCXNldHVwX3JlcG9ydF9rZXkoJmNnYywgYWktPmxzYy5hZ2lkLCAxKTsKIAogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCkBAIC0xNjY3LDcgKzE2ODYsNyBAQAogCiAJLyogUG9zdC1hdXRoIGtleSAqLwogCWNhc2UgRFZEX0xVX1NFTkRfVElUTEVfS0VZOgotCQljZGluZm8oQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0xVX1NFTkRfVElUTEVfS0VZXG4iKTsgCisJCWNkX2RiZyhDRF9EVkQsICJlbnRlcmluZyBEVkRfTFVfU0VORF9USVRMRV9LRVlcbiIpOwogCQljZ2MucXVpZXQgPSAxOwogCQlzZXR1cF9yZXBvcnRfa2V5KCZjZ2MsIGFpLT5sc3RrLmFnaWQsIDQpOwogCQljZ2MuY21kWzVdID0gYWktPmxzdGsubGJhOwpAQCAtMTY4Niw3ICsxNzA1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIERWRF9MVV9TRU5EX0FTRjoKLQkJY2RpbmZvKENEX0RWRCwgImVudGVyaW5nIERWRF9MVV9TRU5EX0FTRlxuIik7IAorCQljZF9kYmcoQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0xVX1NFTkRfQVNGXG4iKTsKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCBhaS0+bHNhc2YuYWdpZCwgNSk7CiAJCQogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCkBAIC0xNjk3LDcgKzE3MTYsNyBAQAogCiAJLyogTFUgZGF0YSByZWNlaXZlIChMVSBjaGFuZ2VzIHN0YXRlKSAqLwogCWNhc2UgRFZEX0hPU1RfU0VORF9DSEFMTEVOR0U6Ci0JCWNkaW5mbyhDRF9EVkQsICJlbnRlcmluZyBEVkRfSE9TVF9TRU5EX0NIQUxMRU5HRVxuIik7IAorCQljZF9kYmcoQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0hPU1RfU0VORF9DSEFMTEVOR0VcbiIpOwogCQlzZXR1cF9zZW5kX2tleSgmY2djLCBhaS0+aHNjLmFnaWQsIDEpOwogCQlidWZbMV0gPSAweGU7CiAJCWNvcHlfY2hhbCgmYnVmWzRdLCBhaS0+aHNjLmNoYWwpOwpAQCAtMTcwOSw3ICsxNzI4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIERWRF9IT1NUX1NFTkRfS0VZMjoKLQkJY2RpbmZvKENEX0RWRCwgImVudGVyaW5nIERWRF9IT1NUX1NFTkRfS0VZMlxuIik7IAorCQljZF9kYmcoQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0hPU1RfU0VORF9LRVkyXG4iKTsKIAkJc2V0dXBfc2VuZF9rZXkoJmNnYywgYWktPmhzay5hZ2lkLCAzKTsKIAkJYnVmWzFdID0gMHhhOwogCQljb3B5X2tleSgmYnVmWzRdLCBhaS0+aHNrLmtleSk7CkBAIC0xNzI0LDcgKzE3NDMsNyBAQAogCS8qIE1pc2MgKi8KIAljYXNlIERWRF9JTlZBTElEQVRFX0FHSUQ6CiAJCWNnYy5xdWlldCA9IDE7Ci0JCWNkaW5mbyhDRF9EVkQsICJlbnRlcmluZyBEVkRfSU5WQUxJREFURV9BR0lEXG4iKTsgCisJCWNkX2RiZyhDRF9EVkQsICJlbnRlcmluZyBEVkRfSU5WQUxJREFURV9BR0lEXG4iKTsKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCBhaS0+bHNhLmFnaWQsIDB4M2YpOwogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTczMiw3ICsxNzUxLDcgQEAKIAogCS8qIEdldCByZWdpb24gc2V0dGluZ3MgKi8KIAljYXNlIERWRF9MVV9TRU5EX1JQQ19TVEFURToKLQkJY2RpbmZvKENEX0RWRCwgImVudGVyaW5nIERWRF9MVV9TRU5EX1JQQ19TVEFURVxuIik7CisJCWNkX2RiZyhDRF9EVkQsICJlbnRlcmluZyBEVkRfTFVfU0VORF9SUENfU1RBVEVcbiIpOwogCQlzZXR1cF9yZXBvcnRfa2V5KCZjZ2MsIDAsIDgpOwogCQltZW1zZXQoJnJwY19zdGF0ZSwgMCwgc2l6ZW9mKHJwY19zdGF0ZV90KSk7CiAJCWNnYy5idWZmZXIgPSAoY2hhciAqKSAmcnBjX3N0YXRlOwpAQCAtMTc0OSw3ICsxNzY4LDcgQEAKIAogCS8qIFNldCByZWdpb24gc2V0dGluZ3MgKi8KIAljYXNlIERWRF9IT1NUX1NFTkRfUlBDX1NUQVRFOgotCQljZGluZm8oQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0hPU1RfU0VORF9SUENfU1RBVEVcbiIpOworCQljZF9kYmcoQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0hPU1RfU0VORF9SUENfU1RBVEVcbiIpOwogCQlzZXR1cF9zZW5kX2tleSgmY2djLCAwLCA2KTsKIAkJYnVmWzFdID0gNjsKIAkJYnVmWzRdID0gYWktPmhycGNzLnBkcmM7CkBAIC0xNzU5LDcgKzE3NzgsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWNkaW5mbyhDRF9XQVJOSU5HLCAiSW52YWxpZCBEVkQga2V5IGlvY3RsICglZClcbiIsIGFpLT50eXBlKTsKKwkJY2RfZGJnKENEX1dBUk5JTkcsICJJbnZhbGlkIERWRCBrZXkgaW9jdGwgKCVkKVxuIiwgYWktPnR5cGUpOwogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiAKQEAgLTE4OTEsNyArMTkxMCw4IEBACiAKIAlzLT5iY2EubGVuID0gYnVmWzBdIDw8IDggfCBidWZbMV07CiAJaWYgKHMtPmJjYS5sZW4gPCAxMiB8fCBzLT5iY2EubGVuID4gMTg4KSB7Ci0JCWNkaW5mbyhDRF9XQVJOSU5HLCAiUmVjZWl2ZWQgaW52YWxpZCBCQ0EgbGVuZ3RoICglZClcbiIsIHMtPmJjYS5sZW4pOworCQljZF9kYmcoQ0RfV0FSTklORywgIlJlY2VpdmVkIGludmFsaWQgQkNBIGxlbmd0aCAoJWQpXG4iLAorCQkgICAgICAgcy0+YmNhLmxlbik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5MjcsMTQgKzE5NDcsMTMgQEAKIAogCXMtPm1hbnVmYWN0LmxlbiA9IGJ1ZlswXSA8PCA4IHwgYnVmWzFdOwogCWlmIChzLT5tYW51ZmFjdC5sZW4gPCAwKSB7Ci0JCWNkaW5mbyhDRF9XQVJOSU5HLCAiUmVjZWl2ZWQgaW52YWxpZCBtYW51ZmFjdHVyZSBpbmZvIGxlbmd0aCIKLQkJCQkgICAiICglZClcbiIsIHMtPm1hbnVmYWN0Lmxlbik7CisJCWNkX2RiZyhDRF9XQVJOSU5HLCAiUmVjZWl2ZWQgaW52YWxpZCBtYW51ZmFjdHVyZSBpbmZvIGxlbmd0aCAoJWQpXG4iLAorCQkgICAgICAgcy0+bWFudWZhY3QubGVuKTsKIAkJcmV0ID0gLUVJTzsKIAl9IGVsc2UgewogCQlpZiAocy0+bWFudWZhY3QubGVuID4gMjA0OCkgewotCQkJY2RpbmZvKENEX1dBUk5JTkcsICJSZWNlaXZlZCBpbnZhbGlkIG1hbnVmYWN0dXJlIGluZm8gIgotCQkJCQkibGVuZ3RoICglZCk6IHRydW5jYXRpbmcgdG8gMjA0OFxuIiwKLQkJCQkJcy0+bWFudWZhY3QubGVuKTsKKwkJCWNkX2RiZyhDRF9XQVJOSU5HLCAiUmVjZWl2ZWQgaW52YWxpZCBtYW51ZmFjdHVyZSBpbmZvIGxlbmd0aCAoJWQpOiB0cnVuY2F0aW5nIHRvIDIwNDhcbiIsCisJCQkgICAgICAgcy0+bWFudWZhY3QubGVuKTsKIAkJCXMtPm1hbnVmYWN0LmxlbiA9IDIwNDg7CiAJCX0KIAkJbWVtY3B5KHMtPm1hbnVmYWN0LnZhbHVlLCAmYnVmWzRdLCBzLT5tYW51ZmFjdC5sZW4pOwpAQCAtMTk2NSw4ICsxOTg0LDggQEAKIAkJcmV0dXJuIGR2ZF9yZWFkX21hbnVmYWN0KGNkaSwgcywgY2djKTsKIAkJCiAJZGVmYXVsdDoKLQkJY2RpbmZvKENEX1dBUk5JTkcsICI6IEludmFsaWQgRFZEIHN0cnVjdHVyZSByZWFkIHJlcXVlc3RlZCAoJWQpXG4iLAotCQkJCQlzLT50eXBlKTsKKwkJY2RfZGJnKENEX1dBUk5JTkcsICI6IEludmFsaWQgRFZEIHN0cnVjdHVyZSByZWFkIHJlcXVlc3RlZCAoJWQpXG4iLAorCQkgICAgICAgcy0+dHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KQEAgLTIyNTUsNyArMjI3NCw3IEBACiAJdTggcmVxdWVzdGVkX2Zvcm1hdDsKIAlpbnQgcmV0OwogCi0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01NVUxUSVNFU1NJT05cbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NTVVMVElTRVNTSU9OXG4iKTsKIAogCWlmICghKGNkaS0+b3BzLT5jYXBhYmlsaXR5ICYgQ0RDX01VTFRJX1NFU1NJT04pKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTIyNzcsMTMgKzIyOTYsMTMgQEAKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZtc19pbmZvLCBzaXplb2YobXNfaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWNkaW5mbyhDRF9ET19JT0NUTCwgIkNEUk9NTVVMVElTRVNTSU9OIHN1Y2Nlc3NmdWxcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgIkNEUk9NTVVMVElTRVNTSU9OIHN1Y2Nlc3NmdWxcbiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNkcm9tX2lvY3RsX2VqZWN0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQogewotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NRUpFQ1RcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NRUpFQ1RcbiIpOwogCiAJaWYgKCFDRFJPTV9DQU4oQ0RDX09QRU5fVFJBWSkpCiAJCXJldHVybiAtRU5PU1lTOwpAQCAtMjMwMCw3ICsyMzE5LDcgQEAKIAogc3RhdGljIGludCBjZHJvbV9pb2N0bF9jbG9zZXRyYXkoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01DTE9TRVRSQVlcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NQ0xPU0VUUkFZXG4iKTsKIAogCWlmICghQ0RST01fQ0FOKENEQ19DTE9TRV9UUkFZKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yMzEwLDcgKzIzMjksNyBAQAogc3RhdGljIGludCBjZHJvbV9pb2N0bF9lamVjdF9zdyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01FSkVDVF9TV1xuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01FSkVDVF9TV1xuIik7CiAKIAlpZiAoIUNEUk9NX0NBTihDRENfT1BFTl9UUkFZKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yMzI5LDcgKzIzNDgsNyBAQAogCXN0cnVjdCBjZHJvbV9jaGFuZ2VyX2luZm8gKmluZm87CiAJaW50IHJldDsKIAotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX01FRElBX0NIQU5HRURcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX01FRElBX0NIQU5HRURcbiIpOwogCiAJaWYgKCFDRFJPTV9DQU4oQ0RDX01FRElBX0NIQU5HRUQpKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTIzNTUsNyArMjM3NCw3IEBACiBzdGF0aWMgaW50IGNkcm9tX2lvY3RsX3NldF9vcHRpb25zKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9TRVRfT1BUSU9OU1xuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fU0VUX09QVElPTlNcbiIpOwogCiAJLyoKIAkgKiBPcHRpb25zIG5lZWQgdG8gYmUgaW4gc3luYyB3aXRoIGNhcGFiaWxpdHkuCkBAIC0yMzgzLDcgKzI0MDIsNyBAQAogc3RhdGljIGludCBjZHJvbV9pb2N0bF9jbGVhcl9vcHRpb25zKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9DTEVBUl9PUFRJT05TXG4iKTsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9DTEVBUl9PUFRJT05TXG4iKTsKIAogCWNkaS0+b3B0aW9ucyAmPSB+KGludCkgYXJnOwogCXJldHVybiBjZGktPm9wdGlvbnM7CkBAIC0yMzkyLDcgKzI0MTEsNyBAQAogc3RhdGljIGludCBjZHJvbV9pb2N0bF9zZWxlY3Rfc3BlZWQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX1NFTEVDVF9TUEVFRFxuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fU0VMRUNUX1NQRUVEXG4iKTsKIAogCWlmICghQ0RST01fQ0FOKENEQ19TRUxFQ1RfU1BFRUQpKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTI0MDIsNyArMjQyMSw3IEBACiBzdGF0aWMgaW50IGNkcm9tX2lvY3RsX3NlbGVjdF9kaXNjKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9TRUxFQ1RfRElTQ1xuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fU0VMRUNUX0RJU0NcbiIpOwogCiAJaWYgKCFDRFJPTV9DQU4oQ0RDX1NFTEVDVF9ESVNDKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yNDIwLDE0ICsyNDM5LDE0IEBACiAJaWYgKGNkaS0+b3BzLT5zZWxlY3RfZGlzYykKIAkJcmV0dXJuIGNkaS0+b3BzLT5zZWxlY3RfZGlzYyhjZGksIGFyZyk7CiAKLQljZGluZm8oQ0RfQ0hBTkdFUiwgIlVzaW5nIGdlbmVyaWMgY2Ryb21fc2VsZWN0X2Rpc2MoKVxuIik7CisJY2RfZGJnKENEX0NIQU5HRVIsICJVc2luZyBnZW5lcmljIGNkcm9tX3NlbGVjdF9kaXNjKClcbiIpOwogCXJldHVybiBjZHJvbV9zZWxlY3RfZGlzYyhjZGksIGFyZyk7CiB9CiAKIHN0YXRpYyBpbnQgY2Ryb21faW9jdGxfcmVzZXQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCiAJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fUkVTRVRcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX1JFU0VUXG4iKTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0yNDQwLDcgKzI0NTksNyBAQAogc3RhdGljIGludCBjZHJvbV9pb2N0bF9sb2NrX2Rvb3Ioc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNkaW5mbyhDRF9ET19JT0NUTCwgIiVzb2NraW5nIGRvb3IuXG4iLCBhcmcgPyAiTCIgOiAiVW5sIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiJXNvY2tpbmcgZG9vclxuIiwgYXJnID8gIkwiIDogIlVubCIpOwogCiAJaWYgKCFDRFJPTV9DQU4oQ0RDX0xPQ0spKQogCQlyZXR1cm4gLUVEUklWRV9DQU5UX0RPX1RISVM7CkBAIC0yNDU5LDcgKzI0NzgsNyBAQAogc3RhdGljIGludCBjZHJvbV9pb2N0bF9kZWJ1ZyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiJXNhYmxpbmcgZGVidWcuXG4iLCBhcmcgPyAiRW4iIDogIkRpcyIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgIiVzYWJsaW5nIGRlYnVnXG4iLCBhcmcgPyAiRW4iIDogIkRpcyIpOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTI0NjksNyArMjQ4OCw3IEBACiAKIHN0YXRpYyBpbnQgY2Ryb21faW9jdGxfZ2V0X2NhcGFiaWxpdHkoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fR0VUX0NBUEFCSUxJVFlcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0dFVF9DQVBBQklMSVRZXG4iKTsKIAlyZXR1cm4gKGNkaS0+b3BzLT5jYXBhYmlsaXR5ICYgfmNkaS0+bWFzayk7CiB9CiAKQEAgLTI0ODUsNyArMjUwNCw3IEBACiAJc3RydWN0IGNkcm9tX21jbiBtY247CiAJaW50IHJldDsKIAotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0dFVF9NQ05cbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0dFVF9NQ05cbiIpOwogCiAJaWYgKCEoY2RpLT5vcHMtPmNhcGFiaWxpdHkgJiBDRENfTUNOKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yNDk1LDE0ICsyNTE0LDE0IEBACiAKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZtY24sIHNpemVvZihtY24pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01fR0VUX01DTiBzdWNjZXNzZnVsXG4iKTsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJDRFJPTV9HRVRfTUNOIHN1Y2Nlc3NmdWxcbiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNkcm9tX2lvY3RsX2RyaXZlX3N0YXR1cyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fRFJJVkVfU1RBVFVTXG4iKTsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9EUklWRV9TVEFUVVNcbiIpOwogCiAJaWYgKCEoY2RpLT5vcHMtPmNhcGFiaWxpdHkgJiBDRENfRFJJVkVfU1RBVFVTKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yNTM1LDcgKzI1NTQsNyBAQAogewogCXRyYWNrdHlwZSB0cmFja3M7CiAKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9ESVNDX1NUQVRVU1xuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fRElTQ19TVEFUVVNcbiIpOwogCiAJY2Ryb21fY291bnRfdHJhY2tzKGNkaSwgJnRyYWNrcyk7CiAJaWYgKHRyYWNrcy5lcnJvcikKQEAgLTI1NTcsMTMgKzI1NzYsMTMgQEAKIAkJcmV0dXJuIENEU19EQVRBXzE7CiAJLyogUG9saWN5IG1vZGUgb2ZmICovCiAKLQljZGluZm8oQ0RfV0FSTklORywiVGhpcyBkaXNjIGRvZXNuJ3QgaGF2ZSBhbnkgdHJhY2tzIEkgcmVjb2duaXplIVxuIik7CisJY2RfZGJnKENEX1dBUk5JTkcsICJUaGlzIGRpc2MgZG9lc24ndCBoYXZlIGFueSB0cmFja3MgSSByZWNvZ25pemUhXG4iKTsKIAlyZXR1cm4gQ0RTX05PX0lORk87CiB9CiAKIHN0YXRpYyBpbnQgY2Ryb21faW9jdGxfY2hhbmdlcl9uc2xvdHMoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCiB7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fQ0hBTkdFUl9OU0xPVFNcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0NIQU5HRVJfTlNMT1RTXG4iKTsKIAlyZXR1cm4gY2RpLT5jYXBhY2l0eTsKIH0KIApAQCAtMjU3NCw3ICsyNTkzLDcgQEAKIAl1OCByZXF1ZXN0ZWQsIGJhY2s7CiAJaW50IHJldDsKIAotCS8qIGNkaW5mbyhDRF9ET19JT0NUTCwiZW50ZXJpbmcgQ0RST01TVUJDSE5MXG4iKTsqLworCS8qIGNkX2RiZyhDRF9ET19JT0NUTCwiZW50ZXJpbmcgQ0RST01TVUJDSE5MXG4iKTsqLwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZxLCBhcmdwLCBzaXplb2YocSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI1OTQsNyArMjYxMyw3IEBACiAKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZxLCBzaXplb2YocSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTVNVQkNITkwgc3VjY2Vzc2Z1bFxuIik7ICovCisJLyogY2RfZGJnKENEX0RPX0lPQ1RMLCAiQ0RST01TVUJDSE5MIHN1Y2Nlc3NmdWxcbiIpOyAqLwogCXJldHVybiAwOwogfQogCkBAIC0yNjA0LDcgKzI2MjMsNyBAQAogCXN0cnVjdCBjZHJvbV90b2NoZHIgaGVhZGVyOwogCWludCByZXQ7CiAKLQkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVJFQURUT0NIRFJcbiIpOyAqLworCS8qIGNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUkVBRFRPQ0hEUlxuIik7ICovCiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmhlYWRlciwgYXJncCwgc2l6ZW9mKGhlYWRlcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI2MTUsNyArMjYzNCw3IEBACiAKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01SRUFEVE9DSERSIHN1Y2Nlc3NmdWxcbiIpOyAqLworCS8qIGNkX2RiZyhDRF9ET19JT0NUTCwgIkNEUk9NUkVBRFRPQ0hEUiBzdWNjZXNzZnVsXG4iKTsgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYyNiw3ICsyNjQ1LDcgQEAKIAl1OCByZXF1ZXN0ZWRfZm9ybWF0OwogCWludCByZXQ7CiAKLQkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVJFQURUT0NFTlRSWVxuIik7ICovCisJLyogY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01SRUFEVE9DRU5UUllcbiIpOyAqLwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZlbnRyeSwgYXJncCwgc2l6ZW9mKGVudHJ5KSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjY0Myw3ICsyNjYyLDcgQEAKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmVudHJ5LCBzaXplb2YoZW50cnkpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01SRUFEVE9DRU5UUlkgc3VjY2Vzc2Z1bFxuIik7ICovCisJLyogY2RfZGJnKENEX0RPX0lPQ1RMLCAiQ0RST01SRUFEVE9DRU5UUlkgc3VjY2Vzc2Z1bFxuIik7ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NTIsNyArMjY3MSw3IEBACiB7CiAJc3RydWN0IGNkcm9tX21zZiBtc2Y7CiAKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVBMQVlNU0ZcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUExBWU1TRlxuIik7CiAKIAlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCiAJCXJldHVybiAtRU5PU1lTOwpAQCAtMjY2Nyw3ICsyNjg2LDcgQEAKIAlzdHJ1Y3QgY2Ryb21fdGkgdGk7CiAJaW50IHJldDsKIAotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUExBWVRSS0lORFxuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QTEFZVFJLSU5EXG4iKTsKIAogCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yNjg0LDcgKzI3MDMsNyBAQAogewogCXN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbHVtZTsKIAotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NVk9MQ1RSTFxuIik7CisJY2RfZGJnKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01WT0xDVFJMXG4iKTsKIAogCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC0yNjk5LDcgKzI3MTgsNyBAQAogCXN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbHVtZTsKIAlpbnQgcmV0OwogCi0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01WT0xSRUFEXG4iKTsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVZPTFJFQURcbiIpOwogCiAJaWYgKCFDRFJPTV9DQU4oQ0RDX1BMQVlfQVVESU8pKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTI3MTgsNyArMjczNyw3IEBACiB7CiAJaW50IHJldDsKIAotCWNkaW5mbyhDRF9ET19JT0NUTCwgImRvaW5nIGF1ZGlvIGlvY3RsIChzdGFydC9zdG9wL3BhdXNlL3Jlc3VtZSlcbiIpOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImRvaW5nIGF1ZGlvIGlvY3RsIChzdGFydC9zdG9wL3BhdXNlL3Jlc3VtZSlcbiIpOwogCiAJaWYgKCFDRFJPTV9DQU4oQ0RDX1BMQVlfQVVESU8pKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTI3MjksNiArMjc0OCw1NTYgQEAKIH0KIAogLyoKKyAqIFJlcXVpcmVkIHdoZW4gd2UgbmVlZCB0byB1c2UgUkVBRF8xMCB0byBpc3N1ZSBvdGhlciB0aGFuIDIwNDggYmxvY2sKKyAqIHJlYWRzCisgKi8KK3N0YXRpYyBpbnQgY2Ryb21fc3dpdGNoX2Jsb2Nrc2l6ZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgaW50IHNpemUpCit7CisJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOworCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CisJc3RydWN0IG1vZGVzZWxfaGVhZCBtaDsKKworCW1lbXNldCgmbWgsIDAsIHNpemVvZihtaCkpOworCW1oLmJsb2NrX2Rlc2NfbGVuZ3RoID0gMHgwODsKKwltaC5ibG9ja19sZW5ndGhfbWVkID0gKHNpemUgPj4gOCkgJiAweGZmOworCW1oLmJsb2NrX2xlbmd0aF9sbyA9IHNpemUgJiAweGZmOworCisJbWVtc2V0KCZjZ2MsIDAsIHNpemVvZihjZ2MpKTsKKwljZ2MuY21kWzBdID0gMHgxNTsKKwljZ2MuY21kWzFdID0gMSA8PCA0OworCWNnYy5jbWRbNF0gPSAxMjsKKwljZ2MuYnVmbGVuID0gc2l6ZW9mKG1oKTsKKwljZ2MuYnVmZmVyID0gKGNoYXIgKikgJm1oOworCWNnYy5kYXRhX2RpcmVjdGlvbiA9IENHQ19EQVRBX1dSSVRFOworCW1oLmJsb2NrX2Rlc2NfbGVuZ3RoID0gMHgwODsKKwltaC5ibG9ja19sZW5ndGhfbWVkID0gKHNpemUgPj4gOCkgJiAweGZmOworCW1oLmJsb2NrX2xlbmd0aF9sbyA9IHNpemUgJiAweGZmOworCisJcmV0dXJuIGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKK30KKworc3RhdGljIGludCBjZHJvbV9nZXRfdHJhY2tfaW5mbyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQlfX3UxNiB0cmFjaywgX191OCB0eXBlLCB0cmFja19pbmZvcm1hdGlvbiAqdGkpCit7CisJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOworCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CisJaW50IHJldCwgYnVmbGVuOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIHRpLCA4LCBDR0NfREFUQV9SRUFEKTsKKwljZ2MuY21kWzBdID0gR1BDTURfUkVBRF9UUkFDS19SWk9ORV9JTkZPOworCWNnYy5jbWRbMV0gPSB0eXBlICYgMzsKKwljZ2MuY21kWzRdID0gKHRyYWNrICYgMHhmZjAwKSA+PiA4OworCWNnYy5jbWRbNV0gPSB0cmFjayAmIDB4ZmY7CisJY2djLmNtZFs4XSA9IDg7CisJY2djLnF1aWV0ID0gMTsKKworCXJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYnVmbGVuID0gYmUxNl90b19jcHUodGktPnRyYWNrX2luZm9ybWF0aW9uX2xlbmd0aCkgKworCQlzaXplb2YodGktPnRyYWNrX2luZm9ybWF0aW9uX2xlbmd0aCk7CisKKwlpZiAoYnVmbGVuID4gc2l6ZW9mKHRyYWNrX2luZm9ybWF0aW9uKSkKKwkJYnVmbGVuID0gc2l6ZW9mKHRyYWNrX2luZm9ybWF0aW9uKTsKKworCWNnYy5jbWRbOF0gPSBjZ2MuYnVmbGVuID0gYnVmbGVuOworCXJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogcmV0dXJuIGFjdHVhbCBmaWxsIHNpemUgKi8KKwlyZXR1cm4gYnVmbGVuOworfQorCisvKiByZXR1cm4gdGhlIGxhc3Qgd3JpdHRlbiBibG9jayBvbiB0aGUgQ0QtUiBtZWRpYS4gdGhpcyBpcyBmb3IgdGhlIHVkZgorICAgZmlsZSBzeXN0ZW0uICovCitpbnQgY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgbG9uZyAqbGFzdF93cml0dGVuKQoreworCXN0cnVjdCBjZHJvbV90b2NlbnRyeSB0b2M7CisJZGlzY19pbmZvcm1hdGlvbiBkaTsKKwl0cmFja19pbmZvcm1hdGlvbiB0aTsKKwlfX3UzMiBsYXN0X3RyYWNrOworCWludCByZXQgPSAtMSwgdGlfc2l6ZTsKKworCWlmICghQ0RST01fQ0FOKENEQ19HRU5FUklDX1BBQ0tFVCkpCisJCWdvdG8gdXNlX3RvYzsKKworCXJldCA9IGNkcm9tX2dldF9kaXNjX2luZm8oY2RpLCAmZGkpOworCWlmIChyZXQgPCAoaW50KShvZmZzZXRvZih0eXBlb2YoZGkpLCBsYXN0X3RyYWNrX2xzYikKKwkJCSsgc2l6ZW9mKGRpLmxhc3RfdHJhY2tfbHNiKSkpCisJCWdvdG8gdXNlX3RvYzsKKworCS8qIGlmIHVuaXQgZGlkbid0IHJldHVybiBtc2IsIGl0J3MgemVyb2VkIGJ5IGNkcm9tX2dldF9kaXNjX2luZm8gKi8KKwlsYXN0X3RyYWNrID0gKGRpLmxhc3RfdHJhY2tfbXNiIDw8IDgpIHwgZGkubGFzdF90cmFja19sc2I7CisJdGlfc2l6ZSA9IGNkcm9tX2dldF90cmFja19pbmZvKGNkaSwgbGFzdF90cmFjaywgMSwgJnRpKTsKKwlpZiAodGlfc2l6ZSA8IChpbnQpb2Zmc2V0b2YodHlwZW9mKHRpKSwgdHJhY2tfc3RhcnQpKQorCQlnb3RvIHVzZV90b2M7CisKKwkvKiBpZiB0aGlzIHRyYWNrIGlzIGJsYW5rLCB0cnkgdGhlIHByZXZpb3VzLiAqLworCWlmICh0aS5ibGFuaykgeworCQlpZiAobGFzdF90cmFjayA9PSAxKQorCQkJZ290byB1c2VfdG9jOworCQlsYXN0X3RyYWNrLS07CisJCXRpX3NpemUgPSBjZHJvbV9nZXRfdHJhY2tfaW5mbyhjZGksIGxhc3RfdHJhY2ssIDEsICZ0aSk7CisJfQorCisJaWYgKHRpX3NpemUgPCAoaW50KShvZmZzZXRvZih0eXBlb2YodGkpLCB0cmFja19zaXplKQorCQkJCSsgc2l6ZW9mKHRpLnRyYWNrX3NpemUpKSkKKwkJZ290byB1c2VfdG9jOworCisJLyogaWYgbGFzdCByZWNvcmRlZCBmaWVsZCBpcyB2YWxpZCwgcmV0dXJuIGl0LiAqLworCWlmICh0aS5scmFfdiAmJiB0aV9zaXplID49IChpbnQpKG9mZnNldG9mKHR5cGVvZih0aSksIGxhc3RfcmVjX2FkZHJlc3MpCisJCQkJKyBzaXplb2YodGkubGFzdF9yZWNfYWRkcmVzcykpKSB7CisJCSpsYXN0X3dyaXR0ZW4gPSBiZTMyX3RvX2NwdSh0aS5sYXN0X3JlY19hZGRyZXNzKTsKKwl9IGVsc2UgeworCQkvKiBtYWtlIGl0IHVwIGluc3RlYWQgKi8KKwkJKmxhc3Rfd3JpdHRlbiA9IGJlMzJfdG9fY3B1KHRpLnRyYWNrX3N0YXJ0KSArCisJCQkJYmUzMl90b19jcHUodGkudHJhY2tfc2l6ZSk7CisJCWlmICh0aS5mcmVlX2Jsb2NrcykKKwkJCSpsYXN0X3dyaXR0ZW4gLT0gKGJlMzJfdG9fY3B1KHRpLmZyZWVfYmxvY2tzKSArIDcpOworCX0KKwlyZXR1cm4gMDsKKworCS8qIHRoaXMgaXMgd2hlcmUgd2UgZW5kIHVwIGlmIHRoZSBkcml2ZSBlaXRoZXIgY2FuJ3QgZG8gYQorCSAgIEdQQ01EX1JFQURfRElTQ19JTkZPIG9yIEdQQ01EX1JFQURfVFJBQ0tfUlpPTkVfSU5GTyBvciBpZgorCSAgIGl0IGRvZXNuJ3QgZ2l2ZSBlbm91Z2ggaW5mb3JtYXRpb24gb3IgZmFpbHMuIHRoZW4gd2UgcmV0dXJuCisJICAgdGhlIHRvYyBjb250ZW50cy4gKi8KK3VzZV90b2M6CisJdG9jLmNkdGVfZm9ybWF0ID0gQ0RST01fTVNGOworCXRvYy5jZHRlX3RyYWNrID0gQ0RST01fTEVBRE9VVDsKKwlpZiAoKHJldCA9IGNkaS0+b3BzLT5hdWRpb19pb2N0bChjZGksIENEUk9NUkVBRFRPQ0VOVFJZLCAmdG9jKSkpCisJCXJldHVybiByZXQ7CisJc2FuaXRpemVfZm9ybWF0KCZ0b2MuY2R0ZV9hZGRyLCAmdG9jLmNkdGVfZm9ybWF0LCBDRFJPTV9MQkEpOworCSpsYXN0X3dyaXR0ZW4gPSB0b2MuY2R0ZV9hZGRyLmxiYTsKKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJuIHRoZSBuZXh0IHdyaXRhYmxlIGJsb2NrLiBhbHNvIGZvciB1ZGYgZmlsZSBzeXN0ZW0uICovCitzdGF0aWMgaW50IGNkcm9tX2dldF9uZXh0X3dyaXRhYmxlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCSAgIGxvbmcgKm5leHRfd3JpdGFibGUpCit7CisJZGlzY19pbmZvcm1hdGlvbiBkaTsKKwl0cmFja19pbmZvcm1hdGlvbiB0aTsKKwlfX3UxNiBsYXN0X3RyYWNrOworCWludCByZXQsIHRpX3NpemU7CisKKwlpZiAoIUNEUk9NX0NBTihDRENfR0VORVJJQ19QQUNLRVQpKQorCQlnb3RvIHVzZV9sYXN0X3dyaXR0ZW47CisKKwlyZXQgPSBjZHJvbV9nZXRfZGlzY19pbmZvKGNkaSwgJmRpKTsKKwlpZiAocmV0IDwgMCB8fCByZXQgPCBvZmZzZXRvZih0eXBlb2YoZGkpLCBsYXN0X3RyYWNrX2xzYikKKwkJCQkrIHNpemVvZihkaS5sYXN0X3RyYWNrX2xzYikpCisJCWdvdG8gdXNlX2xhc3Rfd3JpdHRlbjsKKworCS8qIGlmIHVuaXQgZGlkbid0IHJldHVybiBtc2IsIGl0J3MgemVyb2VkIGJ5IGNkcm9tX2dldF9kaXNjX2luZm8gKi8KKwlsYXN0X3RyYWNrID0gKGRpLmxhc3RfdHJhY2tfbXNiIDw8IDgpIHwgZGkubGFzdF90cmFja19sc2I7CisJdGlfc2l6ZSA9IGNkcm9tX2dldF90cmFja19pbmZvKGNkaSwgbGFzdF90cmFjaywgMSwgJnRpKTsKKwlpZiAodGlfc2l6ZSA8IDAgfHwgdGlfc2l6ZSA8IG9mZnNldG9mKHR5cGVvZih0aSksIHRyYWNrX3N0YXJ0KSkKKwkJZ290byB1c2VfbGFzdF93cml0dGVuOworCisJLyogaWYgdGhpcyB0cmFjayBpcyBibGFuaywgdHJ5IHRoZSBwcmV2aW91cy4gKi8KKwlpZiAodGkuYmxhbmspIHsKKwkJaWYgKGxhc3RfdHJhY2sgPT0gMSkKKwkJCWdvdG8gdXNlX2xhc3Rfd3JpdHRlbjsKKwkJbGFzdF90cmFjay0tOworCQl0aV9zaXplID0gY2Ryb21fZ2V0X3RyYWNrX2luZm8oY2RpLCBsYXN0X3RyYWNrLCAxLCAmdGkpOworCQlpZiAodGlfc2l6ZSA8IDApCisJCQlnb3RvIHVzZV9sYXN0X3dyaXR0ZW47CisJfQorCisJLyogaWYgbmV4dCByZWNvcmRhYmxlIGFkZHJlc3MgZmllbGQgaXMgdmFsaWQsIHVzZSBpdC4gKi8KKwlpZiAodGkubndhX3YgJiYgdGlfc2l6ZSA+PSBvZmZzZXRvZih0eXBlb2YodGkpLCBuZXh0X3dyaXRhYmxlKQorCQkJCSsgc2l6ZW9mKHRpLm5leHRfd3JpdGFibGUpKSB7CisJCSpuZXh0X3dyaXRhYmxlID0gYmUzMl90b19jcHUodGkubmV4dF93cml0YWJsZSk7CisJCXJldHVybiAwOworCX0KKwordXNlX2xhc3Rfd3JpdHRlbjoKKwlyZXQgPSBjZHJvbV9nZXRfbGFzdF93cml0dGVuKGNkaSwgbmV4dF93cml0YWJsZSk7CisJaWYgKHJldCkgeworCQkqbmV4dF93cml0YWJsZSA9IDA7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJKm5leHRfd3JpdGFibGUgKz0gNzsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IG1tY19pb2N0bF9jZHJvbV9yZWFkX2RhdGEoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCQkJCSAgICAgIHZvaWQgX191c2VyICphcmcsCisJCQkJCSAgICAgIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAorCQkJCQkgICAgICBpbnQgY21kKQoreworCXN0cnVjdCByZXF1ZXN0X3NlbnNlIHNlbnNlOworCXN0cnVjdCBjZHJvbV9tc2YgbXNmOworCWludCBibG9ja3NpemUgPSAwLCBmb3JtYXQgPSAwLCBsYmE7CisJaW50IHJldDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDRFJPTVJFQURSQVc6CisJCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRV9SQVc7CisJCWJyZWFrOworCWNhc2UgQ0RST01SRUFETU9ERTE6CisJCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRTsKKwkJZm9ybWF0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBDRFJPTVJFQURNT0RFMjoKKwkJYmxvY2tzaXplID0gQ0RfRlJBTUVTSVpFX1JBVzA7CisJCWJyZWFrOworCX0KKwlpZiAoY29weV9mcm9tX3VzZXIoJm1zZiwgKHN0cnVjdCBjZHJvbV9tc2YgX191c2VyICopYXJnLCBzaXplb2YobXNmKSkpCisJCXJldHVybiAtRUZBVUxUOworCWxiYSA9IG1zZl90b19sYmEobXNmLmNkbXNmX21pbjAsIG1zZi5jZG1zZl9zZWMwLCBtc2YuY2Rtc2ZfZnJhbWUwKTsKKwkvKiBGSVhNRTogd2UgbmVlZCB1cHBlciBib3VuZCBjaGVja2luZywgdG9vISEgKi8KKwlpZiAobGJhIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZ2MtPmJ1ZmZlciA9IGt6YWxsb2MoYmxvY2tzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2djLT5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoJnNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKKwljZ2MtPnNlbnNlID0gJnNlbnNlOworCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9SRUFEOworCXJldCA9IGNkcm9tX3JlYWRfYmxvY2soY2RpLCBjZ2MsIGxiYSwgMSwgZm9ybWF0LCBibG9ja3NpemUpOworCWlmIChyZXQgJiYgc2Vuc2Uuc2Vuc2Vfa2V5ID09IDB4MDUgJiYKKwkgICAgc2Vuc2UuYXNjID09IDB4MjAgJiYKKwkgICAgc2Vuc2UuYXNjcSA9PSAweDAwKSB7CisJCS8qCisJCSAqIFNDU0ktSUkgZGV2aWNlcyBhcmUgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQKKwkJICogUkVBRF9DRCwgc28gbGV0J3MgdHJ5IHN3aXRjaGluZyBibG9jayBzaXplCisJCSAqLworCQkvKiBGSVhNRTogc3dpdGNoIGJhY2sgYWdhaW4uLi4gKi8KKwkJcmV0ID0gY2Ryb21fc3dpdGNoX2Jsb2Nrc2l6ZShjZGksIGJsb2Nrc2l6ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJY2djLT5zZW5zZSA9IE5VTEw7CisJCXJldCA9IGNkcm9tX3JlYWRfY2QoY2RpLCBjZ2MsIGxiYSwgYmxvY2tzaXplLCAxKTsKKwkJcmV0IHw9IGNkcm9tX3N3aXRjaF9ibG9ja3NpemUoY2RpLCBibG9ja3NpemUpOworCX0KKwlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJnLCBjZ2MtPmJ1ZmZlciwgYmxvY2tzaXplKSkKKwkJcmV0ID0gLUVGQVVMVDsKK291dDoKKwlrZnJlZShjZ2MtPmJ1ZmZlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcmVhZF9hdWRpbyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJICAgICAgIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8gcmE7CisJaW50IGxiYTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcmEsIChzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbyBfX3VzZXIgKilhcmcsCisJCQkgICBzaXplb2YocmEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAocmEuYWRkcl9mb3JtYXQgPT0gQ0RST01fTVNGKQorCQlsYmEgPSBtc2ZfdG9fbGJhKHJhLmFkZHIubXNmLm1pbnV0ZSwKKwkJCQkgcmEuYWRkci5tc2Yuc2Vjb25kLAorCQkJCSByYS5hZGRyLm1zZi5mcmFtZSk7CisJZWxzZSBpZiAocmEuYWRkcl9mb3JtYXQgPT0gQ0RST01fTEJBKQorCQlsYmEgPSByYS5hZGRyLmxiYTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRklYTUU6IHdlIG5lZWQgdXBwZXIgYm91bmQgY2hlY2tpbmcsIHRvbyEhICovCisJaWYgKGxiYSA8IDAgfHwgcmEubmZyYW1lcyA8PSAwIHx8IHJhLm5mcmFtZXMgPiBDRF9GUkFNRVMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNkcm9tX3JlYWRfY2RkYShjZGksIHJhLmJ1ZiwgbGJhLCByYS5uZnJhbWVzKTsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fc3ViY2hhbm5lbChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJICAgICAgIHZvaWQgX191c2VyICphcmcpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY2Ryb21fc3ViY2hubCBxOworCXVfY2hhciByZXF1ZXN0ZWQsIGJhY2s7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZxLCAoc3RydWN0IGNkcm9tX3N1YmNobmwgX191c2VyICopYXJnLCBzaXplb2YocSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXF1ZXN0ZWQgPSBxLmNkc2NfZm9ybWF0OworCWlmICghKChyZXF1ZXN0ZWQgPT0gQ0RST01fTVNGKSB8fAorCSAgICAgIChyZXF1ZXN0ZWQgPT0gQ0RST01fTEJBKSkpCisJCXJldHVybiAtRUlOVkFMOworCXEuY2RzY19mb3JtYXQgPSBDRFJPTV9NU0Y7CisJcmV0ID0gY2Ryb21fcmVhZF9zdWJjaGFubmVsKGNkaSwgJnEsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJYmFjayA9IHEuY2RzY19mb3JtYXQ7IC8qIGxvY2FsIGNvcHkgKi8KKwlzYW5pdGl6ZV9mb3JtYXQoJnEuY2RzY19hYnNhZGRyLCAmYmFjaywgcmVxdWVzdGVkKTsKKwlzYW5pdGl6ZV9mb3JtYXQoJnEuY2RzY19yZWxhZGRyLCAmcS5jZHNjX2Zvcm1hdCwgcmVxdWVzdGVkKTsKKwlpZiAoY29weV90b191c2VyKChzdHJ1Y3QgY2Ryb21fc3ViY2hubCBfX3VzZXIgKilhcmcsICZxLCBzaXplb2YocSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBjZF9kYmcoQ0RfRE9fSU9DVEwsICJDRFJPTVNVQkNITkwgc3VjY2Vzc2Z1bFxuIik7ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3BsYXlfbXNmKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQkgICAgIHZvaWQgX191c2VyICphcmcsCisJCQkJCSAgICAgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpCit7CisJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOworCXN0cnVjdCBjZHJvbV9tc2YgbXNmOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUExBWU1TRlxuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZtc2YsIChzdHJ1Y3QgY2Ryb21fbXNmIF9fdXNlciAqKWFyZywgc2l6ZW9mKG1zZikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljZ2MtPmNtZFswXSA9IEdQQ01EX1BMQVlfQVVESU9fTVNGOworCWNnYy0+Y21kWzNdID0gbXNmLmNkbXNmX21pbjA7CisJY2djLT5jbWRbNF0gPSBtc2YuY2Rtc2Zfc2VjMDsKKwljZ2MtPmNtZFs1XSA9IG1zZi5jZG1zZl9mcmFtZTA7CisJY2djLT5jbWRbNl0gPSBtc2YuY2Rtc2ZfbWluMTsKKwljZ2MtPmNtZFs3XSA9IG1zZi5jZG1zZl9zZWMxOworCWNnYy0+Y21kWzhdID0gbXNmLmNkbXNmX2ZyYW1lMTsKKwljZ2MtPmRhdGFfZGlyZWN0aW9uID0gQ0dDX0RBVEFfTk9ORTsKKwlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3BsYXlfYmxrKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQkgICAgIHZvaWQgX191c2VyICphcmcsCisJCQkJCSAgICAgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpCit7CisJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOworCXN0cnVjdCBjZHJvbV9ibGsgYmxrOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUExBWUJMS1xuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZibGssIChzdHJ1Y3QgY2Ryb21fYmxrIF9fdXNlciAqKWFyZywgc2l6ZW9mKGJsaykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljZ2MtPmNtZFswXSA9IEdQQ01EX1BMQVlfQVVESU9fMTA7CisJY2djLT5jbWRbMl0gPSAoYmxrLmZyb20gPj4gMjQpICYgMHhmZjsKKwljZ2MtPmNtZFszXSA9IChibGsuZnJvbSA+PiAxNikgJiAweGZmOworCWNnYy0+Y21kWzRdID0gKGJsay5mcm9tID4+ICA4KSAmIDB4ZmY7CisJY2djLT5jbWRbNV0gPSBibGsuZnJvbSAmIDB4ZmY7CisJY2djLT5jbWRbN10gPSAoYmxrLmxlbiA+PiA4KSAmIDB4ZmY7CisJY2djLT5jbWRbOF0gPSBibGsubGVuICYgMHhmZjsKKwljZ2MtPmRhdGFfZGlyZWN0aW9uID0gQ0dDX0RBVEFfTk9ORTsKKwlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3ZvbHVtZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJICAgdm9pZCBfX3VzZXIgKmFyZywKKwkJCQkJICAgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MsCisJCQkJCSAgIHVuc2lnbmVkIGludCBjbWQpCit7CisJc3RydWN0IGNkcm9tX3ZvbGN0cmwgdm9sY3RybDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclszMl07CisJY2hhciBtYXNrW3NpemVvZihidWZmZXIpXTsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQ7CisJaW50IHJldDsKKworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NVk9MVU1FXG4iKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdm9sY3RybCwgKHN0cnVjdCBjZHJvbV92b2xjdHJsIF9fdXNlciAqKWFyZywKKwkJCSAgIHNpemVvZih2b2xjdHJsKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJY2djLT5idWZmZXIgPSBidWZmZXI7CisJY2djLT5idWZsZW4gPSAyNDsKKwlyZXQgPSBjZHJvbV9tb2RlX3NlbnNlKGNkaSwgY2djLCBHUE1PREVfQVVESU9fQ1RMX1BBR0UsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJCQorCS8qIG9yaWdpbmFsbHkgdGhlIGNvZGUgZGVwZW5kZWQgb24gYnVmZmVyWzFdIHRvIGRldGVybWluZQorCSAgIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlIGZvciB0cmFuc2Zlci4gYnVmZmVyWzFdIGlzCisJICAgdW5mb3J0dW5hdGVseSBhbWJpZ2lvdXMgYW5kIHRoZSBvbmx5IHJlbGlhYmxlIHdheSBzZWVtCisJICAgdG8gYmUgdG8gc2ltcGx5IHNraXAgb3ZlciB0aGUgYmxvY2sgZGVzY3JpcHRvci4uLiAqLworCW9mZnNldCA9IDggKyBiZTE2X3RvX2NwdSgqKF9fYmUxNiAqKShidWZmZXIgKyA2KSk7CisKKwlpZiAob2Zmc2V0ICsgMTYgPiBzaXplb2YoYnVmZmVyKSkKKwkJcmV0dXJuIC1FMkJJRzsKKworCWlmIChvZmZzZXQgKyAxNiA+IGNnYy0+YnVmbGVuKSB7CisJCWNnYy0+YnVmbGVuID0gb2Zmc2V0ICsgMTY7CisJCXJldCA9IGNkcm9tX21vZGVfc2Vuc2UoY2RpLCBjZ2MsCisJCQkJICAgICAgIEdQTU9ERV9BVURJT19DVExfUEFHRSwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmICgoYnVmZmVyW29mZnNldF0gJiAweDNmKSAhPSBHUE1PREVfQVVESU9fQ1RMX1BBR0UgfHwKKwkgICAgYnVmZmVyW29mZnNldCArIDFdIDwgMTQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbm93IHdlIGhhdmUgdGhlIGN1cnJlbnQgdm9sdW1lIHNldHRpbmdzLiBpZiBpdCB3YXMgb25seQorCSAgIGEgQ0RST01WT0xSRUFELCByZXR1cm4gdGhlc2UgdmFsdWVzICovCisJaWYgKGNtZCA9PSBDRFJPTVZPTFJFQUQpIHsKKwkJdm9sY3RybC5jaGFubmVsMCA9IGJ1ZmZlcltvZmZzZXQrOV07CisJCXZvbGN0cmwuY2hhbm5lbDEgPSBidWZmZXJbb2Zmc2V0KzExXTsKKwkJdm9sY3RybC5jaGFubmVsMiA9IGJ1ZmZlcltvZmZzZXQrMTNdOworCQl2b2xjdHJsLmNoYW5uZWwzID0gYnVmZmVyW29mZnNldCsxNV07CisJCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBjZHJvbV92b2xjdHJsIF9fdXNlciAqKWFyZywgJnZvbGN0cmwsCisJCQkJIHNpemVvZih2b2xjdHJsKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCQkKKwkvKiBnZXQgdGhlIHZvbHVtZSBtYXNrICovCisJY2djLT5idWZmZXIgPSBtYXNrOworCXJldCA9IGNkcm9tX21vZGVfc2Vuc2UoY2RpLCBjZ2MsIEdQTU9ERV9BVURJT19DVExfUEFHRSwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWJ1ZmZlcltvZmZzZXQgKyA5XSAgPSB2b2xjdHJsLmNoYW5uZWwwICYgbWFza1tvZmZzZXQgKyA5XTsKKwlidWZmZXJbb2Zmc2V0ICsgMTFdID0gdm9sY3RybC5jaGFubmVsMSAmIG1hc2tbb2Zmc2V0ICsgMTFdOworCWJ1ZmZlcltvZmZzZXQgKyAxM10gPSB2b2xjdHJsLmNoYW5uZWwyICYgbWFza1tvZmZzZXQgKyAxM107CisJYnVmZmVyW29mZnNldCArIDE1XSA9IHZvbGN0cmwuY2hhbm5lbDMgJiBtYXNrW29mZnNldCArIDE1XTsKKworCS8qIHNldCB2b2x1bWUgKi8KKwljZ2MtPmJ1ZmZlciA9IGJ1ZmZlciArIG9mZnNldCAtIDg7CisJbWVtc2V0KGNnYy0+YnVmZmVyLCAwLCA4KTsKKwlyZXR1cm4gY2Ryb21fbW9kZV9zZWxlY3QoY2RpLCBjZ2MpOworfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IG1tY19pb2N0bF9jZHJvbV9zdGFydF9zdG9wKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQkgICAgICAgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MsCisJCQkJCSAgICAgICBpbnQgY21kKQoreworCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVNUQVJUL0NEUk9NU1RPUFxuIik7CisJY2djLT5jbWRbMF0gPSBHUENNRF9TVEFSVF9TVE9QX1VOSVQ7CisJY2djLT5jbWRbMV0gPSAxOworCWNnYy0+Y21kWzRdID0gKGNtZCA9PSBDRFJPTVNUQVJUKSA/IDEgOiAwOworCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOworCXJldHVybiBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcGF1c2VfcmVzdW1lKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQkJIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAorCQkJCQkJIGludCBjbWQpCit7CisJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUEFVU0UvQ0RST01SRVNVTUVcbiIpOworCWNnYy0+Y21kWzBdID0gR1BDTURfUEFVU0VfUkVTVU1FOworCWNnYy0+Y21kWzhdID0gKGNtZCA9PSBDRFJPTVJFU1VNRSkgPyAxIDogMDsKKwljZ2MtPmRhdGFfZGlyZWN0aW9uID0gQ0dDX0RBVEFfTk9ORTsKKwlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2R2ZF9yZWFkX3N0cnVjdChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJICAgICAgdm9pZCBfX3VzZXIgKmFyZywKKwkJCQkJICAgICAgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpCit7CisJaW50IHJldDsKKwlkdmRfc3RydWN0ICpzOworCWludCBzaXplID0gc2l6ZW9mKGR2ZF9zdHJ1Y3QpOworCisJaWYgKCFDRFJPTV9DQU4oQ0RDX0RWRCkpCisJCXJldHVybiAtRU5PU1lTOworCisJcyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIERWRF9SRUFEX1NUUlVDVFxuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKHMsIGFyZywgc2l6ZSkpIHsKKwkJa2ZyZWUocyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldCA9IGR2ZF9yZWFkX3N0cnVjdChjZGksIHMsIGNnYyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgcywgc2l6ZSkpCisJCXJldCA9IC1FRkFVTFQ7CitvdXQ6CisJa2ZyZWUocyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfZHZkX2F1dGgoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCQkJICAgICAgIHZvaWQgX191c2VyICphcmcpCit7CisJaW50IHJldDsKKwlkdmRfYXV0aGluZm8gYWk7CisJaWYgKCFDRFJPTV9DQU4oQ0RDX0RWRCkpCisJCXJldHVybiAtRU5PU1lTOworCWNkX2RiZyhDRF9ET19JT0NUTCwgImVudGVyaW5nIERWRF9BVVRIXG4iKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFpLCAoZHZkX2F1dGhpbmZvIF9fdXNlciAqKWFyZywgc2l6ZW9mKGFpKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldCA9IGR2ZF9kb19hdXRoKGNkaSwgJmFpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmIChjb3B5X3RvX3VzZXIoKGR2ZF9hdXRoaW5mbyBfX3VzZXIgKilhcmcsICZhaSwgc2l6ZW9mKGFpKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IG1tY19pb2N0bF9jZHJvbV9uZXh0X3dyaXRhYmxlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQkJICB2b2lkIF9fdXNlciAqYXJnKQoreworCWludCByZXQ7CisJbG9uZyBuZXh0ID0gMDsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9ORVhUX1dSSVRBQkxFXG4iKTsKKwlyZXQgPSBjZHJvbV9nZXRfbmV4dF93cml0YWJsZShjZGksICZuZXh0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmIChjb3B5X3RvX3VzZXIoKGxvbmcgX191c2VyICopYXJnLCAmbmV4dCwgc2l6ZW9mKG5leHQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX2xhc3Rfd3JpdHRlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJCSB2b2lkIF9fdXNlciAqYXJnKQoreworCWludCByZXQ7CisJbG9uZyBsYXN0ID0gMDsKKwljZF9kYmcoQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9MQVNUX1dSSVRURU5cbiIpOworCXJldCA9IGNkcm9tX2dldF9sYXN0X3dyaXR0ZW4oY2RpLCAmbGFzdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoY29weV90b191c2VyKChsb25nIF9fdXNlciAqKWFyZywgJmxhc3QsIHNpemVvZihsYXN0KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tY19pb2N0bChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOworCXZvaWQgX191c2VyICp1c2VycHRyID0gKHZvaWQgX191c2VyICopYXJnOworCisJbWVtc2V0KCZjZ2MsIDAsIHNpemVvZihjZ2MpKTsKKworCS8qIGJ1aWxkIGEgdW5pZmllZCBjb21tYW5kIGFuZCBxdWV1ZSBpdCB0aHJvdWdoCisJICAgY2RvLT5nZW5lcmljX3BhY2tldCgpICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENEUk9NUkVBRFJBVzoKKwljYXNlIENEUk9NUkVBRE1PREUxOgorCWNhc2UgQ0RST01SRUFETU9ERTI6CisJCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcmVhZF9kYXRhKGNkaSwgdXNlcnB0ciwgJmNnYywgY21kKTsKKwljYXNlIENEUk9NUkVBREFVRElPOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3JlYWRfYXVkaW8oY2RpLCB1c2VycHRyKTsKKwljYXNlIENEUk9NU1VCQ0hOTDoKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9zdWJjaGFubmVsKGNkaSwgdXNlcnB0cik7CisJY2FzZSBDRFJPTVBMQVlNU0Y6CisJCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcGxheV9tc2YoY2RpLCB1c2VycHRyLCAmY2djKTsKKwljYXNlIENEUk9NUExBWUJMSzoKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9wbGF5X2JsayhjZGksIHVzZXJwdHIsICZjZ2MpOworCWNhc2UgQ0RST01WT0xDVFJMOgorCWNhc2UgQ0RST01WT0xSRUFEOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3ZvbHVtZShjZGksIHVzZXJwdHIsICZjZ2MsIGNtZCk7CisJY2FzZSBDRFJPTVNUQVJUOgorCWNhc2UgQ0RST01TVE9QOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3N0YXJ0X3N0b3AoY2RpLCAmY2djLCBjbWQpOworCWNhc2UgQ0RST01QQVVTRToKKwljYXNlIENEUk9NUkVTVU1FOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3BhdXNlX3Jlc3VtZShjZGksICZjZ2MsIGNtZCk7CisJY2FzZSBEVkRfUkVBRF9TVFJVQ1Q6CisJCXJldHVybiBtbWNfaW9jdGxfZHZkX3JlYWRfc3RydWN0KGNkaSwgdXNlcnB0ciwgJmNnYyk7CisJY2FzZSBEVkRfQVVUSDoKKwkJcmV0dXJuIG1tY19pb2N0bF9kdmRfYXV0aChjZGksIHVzZXJwdHIpOworCWNhc2UgQ0RST01fTkVYVF9XUklUQUJMRToKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9uZXh0X3dyaXRhYmxlKGNkaSwgdXNlcnB0cik7CisJY2FzZSBDRFJPTV9MQVNUX1dSSVRURU46CisJCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fbGFzdF93cml0dGVuKGNkaSwgdXNlcnB0cik7CisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKKy8qCiAgKiBKdXN0IGFib3V0IGV2ZXJ5IGltYWdpbmFibGUgaW9jdGwgaXMgc3VwcG9ydGVkIGluIHRoZSBVbmlmb3JtIGxheWVyCiAgKiB0aGVzZSBkYXlzLgogICogQVRBUEkgLyBTQ1NJIHNwZWNpZmljIGNvZGUgbm93IG1haW5seSByZXNpZGVzIGluIG1tY19pb2N0bCgpLgpAQCAtMjc5Niw3ICszMzY1LDcgQEAKIAl9CiAKIAkvKgotCSAqIE5vdGU6IG1vc3Qgb2YgdGhlIGNkaW5mbygpIGNhbGxzIGFyZSBjb21tZW50ZWQgb3V0IGhlcmUsCisJICogTm90ZTogbW9zdCBvZiB0aGUgY2RfZGJnKCkgY2FsbHMgYXJlIGNvbW1lbnRlZCBvdXQgaGVyZSwKIAkgKiBiZWNhdXNlIHRoZXkgZmlsbCB1cCB0aGUgc3lzIGxvZyB3aGVuIENEIHBsYXllcnMgcG9sbAogCSAqIHRoZSBkcml2ZS4KIAkgKi8KQEAgLTI4MjUsNTcwICszMzk0LDYgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotLyoKLSAqIFJlcXVpcmVkIHdoZW4gd2UgbmVlZCB0byB1c2UgUkVBRF8xMCB0byBpc3N1ZSBvdGhlciB0aGFuIDIwNDggYmxvY2sKLSAqIHJlYWRzCi0gKi8KLXN0YXRpYyBpbnQgY2Ryb21fc3dpdGNoX2Jsb2Nrc2l6ZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOwotCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7Ci0Jc3RydWN0IG1vZGVzZWxfaGVhZCBtaDsKLQotCW1lbXNldCgmbWgsIDAsIHNpemVvZihtaCkpOwotCW1oLmJsb2NrX2Rlc2NfbGVuZ3RoID0gMHgwODsKLQltaC5ibG9ja19sZW5ndGhfbWVkID0gKHNpemUgPj4gOCkgJiAweGZmOwotCW1oLmJsb2NrX2xlbmd0aF9sbyA9IHNpemUgJiAweGZmOwotCi0JbWVtc2V0KCZjZ2MsIDAsIHNpemVvZihjZ2MpKTsKLQljZ2MuY21kWzBdID0gMHgxNTsKLQljZ2MuY21kWzFdID0gMSA8PCA0OwotCWNnYy5jbWRbNF0gPSAxMjsKLQljZ2MuYnVmbGVuID0gc2l6ZW9mKG1oKTsKLQljZ2MuYnVmZmVyID0gKGNoYXIgKikgJm1oOwotCWNnYy5kYXRhX2RpcmVjdGlvbiA9IENHQ19EQVRBX1dSSVRFOwotCW1oLmJsb2NrX2Rlc2NfbGVuZ3RoID0gMHgwODsKLQltaC5ibG9ja19sZW5ndGhfbWVkID0gKHNpemUgPj4gOCkgJiAweGZmOwotCW1oLmJsb2NrX2xlbmd0aF9sbyA9IHNpemUgJiAweGZmOwotCi0JcmV0dXJuIGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcmVhZF9kYXRhKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJCQl2b2lkIF9fdXNlciAqYXJnLAotCQkJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYywKLQkJCQkJaW50IGNtZCkKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKLQlzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKLQlpbnQgYmxvY2tzaXplID0gMCwgZm9ybWF0ID0gMCwgbGJhOwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQ0RST01SRUFEUkFXOgotCQlibG9ja3NpemUgPSBDRF9GUkFNRVNJWkVfUkFXOwotCQlicmVhazsKLQljYXNlIENEUk9NUkVBRE1PREUxOgotCQlibG9ja3NpemUgPSBDRF9GUkFNRVNJWkU7Ci0JCWZvcm1hdCA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgQ0RST01SRUFETU9ERTI6Ci0JCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRV9SQVcwOwotCQlicmVhazsKLQl9Ci0JSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fbXNmLCBtc2YpOwotCWxiYSA9IG1zZl90b19sYmEobXNmLmNkbXNmX21pbjAsIG1zZi5jZG1zZl9zZWMwLCBtc2YuY2Rtc2ZfZnJhbWUwKTsKLQkvKiBGSVhNRTogd2UgbmVlZCB1cHBlciBib3VuZCBjaGVja2luZywgdG9vISEgKi8KLQlpZiAobGJhIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljZ2MtPmJ1ZmZlciA9IGt6YWxsb2MoYmxvY2tzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2djLT5idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1zZXQoJnNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKLQljZ2MtPnNlbnNlID0gJnNlbnNlOwotCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9SRUFEOwotCXJldCA9IGNkcm9tX3JlYWRfYmxvY2soY2RpLCBjZ2MsIGxiYSwgMSwgZm9ybWF0LCBibG9ja3NpemUpOwotCWlmIChyZXQgJiYgc2Vuc2Uuc2Vuc2Vfa2V5ID09IDB4MDUgJiYKLQkJICAgc2Vuc2UuYXNjID09IDB4MjAgJiYKLQkJICAgc2Vuc2UuYXNjcSA9PSAweDAwKSB7Ci0JCS8qCi0JCSAqIFNDU0ktSUkgZGV2aWNlcyBhcmUgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQKLQkJICogUkVBRF9DRCwgc28gbGV0J3MgdHJ5IHN3aXRjaGluZyBibG9jayBzaXplCi0JCSAqLwotCQkvKiBGSVhNRTogc3dpdGNoIGJhY2sgYWdhaW4uLi4gKi8KLQkJcmV0ID0gY2Ryb21fc3dpdGNoX2Jsb2Nrc2l6ZShjZGksIGJsb2Nrc2l6ZSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQkJY2djLT5zZW5zZSA9IE5VTEw7Ci0JCXJldCA9IGNkcm9tX3JlYWRfY2QoY2RpLCBjZ2MsIGxiYSwgYmxvY2tzaXplLCAxKTsKLQkJcmV0IHw9IGNkcm9tX3N3aXRjaF9ibG9ja3NpemUoY2RpLCBibG9ja3NpemUpOwotCX0KLQlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJnLCBjZ2MtPmJ1ZmZlciwgYmxvY2tzaXplKSkKLQkJcmV0ID0gLUVGQVVMVDsKLW91dDoKLQlrZnJlZShjZ2MtPmJ1ZmZlcik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcmVhZF9hdWRpbyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKLQkJCQkJdm9pZCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbyByYTsKLQlpbnQgbGJhOwotCi0JSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbywgcmEpOwotCi0JaWYgKHJhLmFkZHJfZm9ybWF0ID09IENEUk9NX01TRikKLQkJbGJhID0gbXNmX3RvX2xiYShyYS5hZGRyLm1zZi5taW51dGUsCi0JCQkJIHJhLmFkZHIubXNmLnNlY29uZCwKLQkJCQkgcmEuYWRkci5tc2YuZnJhbWUpOwotCWVsc2UgaWYgKHJhLmFkZHJfZm9ybWF0ID09IENEUk9NX0xCQSkKLQkJbGJhID0gcmEuYWRkci5sYmE7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEZJWE1FOiB3ZSBuZWVkIHVwcGVyIGJvdW5kIGNoZWNraW5nLCB0b28hISAqLwotCWlmIChsYmEgPCAwIHx8IHJhLm5mcmFtZXMgPD0gMCB8fCByYS5uZnJhbWVzID4gQ0RfRlJBTUVTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBjZHJvbV9yZWFkX2NkZGEoY2RpLCByYS5idWYsIGxiYSwgcmEubmZyYW1lcyk7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3N1YmNoYW5uZWwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCi0JCQkJCXZvaWQgX191c2VyICphcmcpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgY2Ryb21fc3ViY2hubCBxOwotCXVfY2hhciByZXF1ZXN0ZWQsIGJhY2s7Ci0JSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fc3ViY2hubCwgcSk7Ci0JcmVxdWVzdGVkID0gcS5jZHNjX2Zvcm1hdDsKLQlpZiAoISgocmVxdWVzdGVkID09IENEUk9NX01TRikgfHwKLQkgICAgICAocmVxdWVzdGVkID09IENEUk9NX0xCQSkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlxLmNkc2NfZm9ybWF0ID0gQ0RST01fTVNGOwotCXJldCA9IGNkcm9tX3JlYWRfc3ViY2hhbm5lbChjZGksICZxLCAwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWJhY2sgPSBxLmNkc2NfZm9ybWF0OyAvKiBsb2NhbCBjb3B5ICovCi0Jc2FuaXRpemVfZm9ybWF0KCZxLmNkc2NfYWJzYWRkciwgJmJhY2ssIHJlcXVlc3RlZCk7Ci0Jc2FuaXRpemVfZm9ybWF0KCZxLmNkc2NfcmVsYWRkciwgJnEuY2RzY19mb3JtYXQsIHJlcXVlc3RlZCk7Ci0JSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3N1YmNobmwsIHEpOwotCS8qIGNkaW5mbyhDRF9ET19JT0NUTCwgIkNEUk9NU1VCQ0hOTCBzdWNjZXNzZnVsXG4iKTsgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcGxheV9tc2Yoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCi0JCQkJCXZvaWQgX191c2VyICphcmcsCi0JCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQotewotCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKLQlzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVBMQVlNU0ZcbiIpOwotCUlPQ1RMX0lOKGFyZywgc3RydWN0IGNkcm9tX21zZiwgbXNmKTsKLQljZ2MtPmNtZFswXSA9IEdQQ01EX1BMQVlfQVVESU9fTVNGOwotCWNnYy0+Y21kWzNdID0gbXNmLmNkbXNmX21pbjA7Ci0JY2djLT5jbWRbNF0gPSBtc2YuY2Rtc2Zfc2VjMDsKLQljZ2MtPmNtZFs1XSA9IG1zZi5jZG1zZl9mcmFtZTA7Ci0JY2djLT5jbWRbNl0gPSBtc2YuY2Rtc2ZfbWluMTsKLQljZ2MtPmNtZFs3XSA9IG1zZi5jZG1zZl9zZWMxOwotCWNnYy0+Y21kWzhdID0gbXNmLmNkbXNmX2ZyYW1lMTsKLQljZ2MtPmRhdGFfZGlyZWN0aW9uID0gQ0dDX0RBVEFfTk9ORTsKLQlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3BsYXlfYmxrKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJCQl2b2lkIF9fdXNlciAqYXJnLAotCQkJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYykKLXsKLQlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7Ci0Jc3RydWN0IGNkcm9tX2JsayBibGs7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QTEFZQkxLXG4iKTsKLQlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV9ibGssIGJsayk7Ci0JY2djLT5jbWRbMF0gPSBHUENNRF9QTEFZX0FVRElPXzEwOwotCWNnYy0+Y21kWzJdID0gKGJsay5mcm9tID4+IDI0KSAmIDB4ZmY7Ci0JY2djLT5jbWRbM10gPSAoYmxrLmZyb20gPj4gMTYpICYgMHhmZjsKLQljZ2MtPmNtZFs0XSA9IChibGsuZnJvbSA+PiAgOCkgJiAweGZmOwotCWNnYy0+Y21kWzVdID0gYmxrLmZyb20gJiAweGZmOwotCWNnYy0+Y21kWzddID0gKGJsay5sZW4gPj4gOCkgJiAweGZmOwotCWNnYy0+Y21kWzhdID0gYmxrLmxlbiAmIDB4ZmY7Ci0JY2djLT5kYXRhX2RpcmVjdGlvbiA9IENHQ19EQVRBX05PTkU7Ci0JcmV0dXJuIGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCBjZ2MpOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgaW50IG1tY19pb2N0bF9jZHJvbV92b2x1bWUoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCi0JCQkJCXZvaWQgX191c2VyICphcmcsCi0JCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAotCQkJCQl1bnNpZ25lZCBpbnQgY21kKQotewotCXN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbGN0cmw7Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbMzJdOwotCWNoYXIgbWFza1tzaXplb2YoYnVmZmVyKV07Ci0JdW5zaWduZWQgc2hvcnQgb2Zmc2V0OwotCWludCByZXQ7Ci0KLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVZPTFVNRVxuIik7Ci0KLQlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV92b2xjdHJsLCB2b2xjdHJsKTsKLQotCWNnYy0+YnVmZmVyID0gYnVmZmVyOwotCWNnYy0+YnVmbGVuID0gMjQ7Ci0JcmV0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksIGNnYywgR1BNT0RFX0FVRElPX0NUTF9QQUdFLCAwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCQkKLQkvKiBvcmlnaW5hbGx5IHRoZSBjb2RlIGRlcGVuZGVkIG9uIGJ1ZmZlclsxXSB0byBkZXRlcm1pbmUKLQkgICBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgdHJhbnNmZXIuIGJ1ZmZlclsxXSBpcwotCSAgIHVuZm9ydHVuYXRlbHkgYW1iaWdpb3VzIGFuZCB0aGUgb25seSByZWxpYWJsZSB3YXkgc2VlbQotCSAgIHRvIGJlIHRvIHNpbXBseSBza2lwIG92ZXIgdGhlIGJsb2NrIGRlc2NyaXB0b3IuLi4gKi8KLQlvZmZzZXQgPSA4ICsgYmUxNl90b19jcHUoKihfX2JlMTYgKikoYnVmZmVyICsgNikpOwotCi0JaWYgKG9mZnNldCArIDE2ID4gc2l6ZW9mKGJ1ZmZlcikpCi0JCXJldHVybiAtRTJCSUc7Ci0KLQlpZiAob2Zmc2V0ICsgMTYgPiBjZ2MtPmJ1ZmxlbikgewotCQljZ2MtPmJ1ZmxlbiA9IG9mZnNldCArIDE2OwotCQlyZXQgPSBjZHJvbV9tb2RlX3NlbnNlKGNkaSwgY2djLAotCQkJCQlHUE1PREVfQVVESU9fQ1RMX1BBR0UsIDApOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAoKGJ1ZmZlcltvZmZzZXRdICYgMHgzZikgIT0gR1BNT0RFX0FVRElPX0NUTF9QQUdFIHx8Ci0JCQlidWZmZXJbb2Zmc2V0ICsgMV0gPCAxNCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBub3cgd2UgaGF2ZSB0aGUgY3VycmVudCB2b2x1bWUgc2V0dGluZ3MuIGlmIGl0IHdhcyBvbmx5Ci0JICAgYSBDRFJPTVZPTFJFQUQsIHJldHVybiB0aGVzZSB2YWx1ZXMgKi8KLQlpZiAoY21kID09IENEUk9NVk9MUkVBRCkgewotCQl2b2xjdHJsLmNoYW5uZWwwID0gYnVmZmVyW29mZnNldCs5XTsKLQkJdm9sY3RybC5jaGFubmVsMSA9IGJ1ZmZlcltvZmZzZXQrMTFdOwotCQl2b2xjdHJsLmNoYW5uZWwyID0gYnVmZmVyW29mZnNldCsxM107Ci0JCXZvbGN0cmwuY2hhbm5lbDMgPSBidWZmZXJbb2Zmc2V0KzE1XTsKLQkJSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3ZvbGN0cmwsIHZvbGN0cmwpOwotCQlyZXR1cm4gMDsKLQl9Ci0JCQotCS8qIGdldCB0aGUgdm9sdW1lIG1hc2sgKi8KLQljZ2MtPmJ1ZmZlciA9IG1hc2s7Ci0JcmV0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksIGNnYywgR1BNT0RFX0FVRElPX0NUTF9QQUdFLCAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JYnVmZmVyW29mZnNldCArIDldICA9IHZvbGN0cmwuY2hhbm5lbDAgJiBtYXNrW29mZnNldCArIDldOwotCWJ1ZmZlcltvZmZzZXQgKyAxMV0gPSB2b2xjdHJsLmNoYW5uZWwxICYgbWFza1tvZmZzZXQgKyAxMV07Ci0JYnVmZmVyW29mZnNldCArIDEzXSA9IHZvbGN0cmwuY2hhbm5lbDIgJiBtYXNrW29mZnNldCArIDEzXTsKLQlidWZmZXJbb2Zmc2V0ICsgMTVdID0gdm9sY3RybC5jaGFubmVsMyAmIG1hc2tbb2Zmc2V0ICsgMTVdOwotCi0JLyogc2V0IHZvbHVtZSAqLwotCWNnYy0+YnVmZmVyID0gYnVmZmVyICsgb2Zmc2V0IC0gODsKLQltZW1zZXQoY2djLT5idWZmZXIsIDAsIDgpOwotCXJldHVybiBjZHJvbV9tb2RlX3NlbGVjdChjZGksIGNnYyk7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3N0YXJ0X3N0b3Aoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCi0JCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAotCQkJCQlpbnQgY21kKQotewotCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVNUQVJUL0NEUk9NU1RPUFxuIik7Ci0JY2djLT5jbWRbMF0gPSBHUENNRF9TVEFSVF9TVE9QX1VOSVQ7Ci0JY2djLT5jbWRbMV0gPSAxOwotCWNnYy0+Y21kWzRdID0gKGNtZCA9PSBDRFJPTVNUQVJUKSA/IDEgOiAwOwotCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOwotCXJldHVybiBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcGF1c2VfcmVzdW1lKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYywKLQkJCQkJaW50IGNtZCkKLXsKLQlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7Ci0JY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QQVVTRS9DRFJPTVJFU1VNRVxuIik7Ci0JY2djLT5jbWRbMF0gPSBHUENNRF9QQVVTRV9SRVNVTUU7Ci0JY2djLT5jbWRbOF0gPSAoY21kID09IENEUk9NUkVTVU1FKSA/IDEgOiAwOwotCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOwotCXJldHVybiBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfZHZkX3JlYWRfc3RydWN0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJCQkJdm9pZCBfX3VzZXIgKmFyZywKLQkJCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQotewotCWludCByZXQ7Ci0JZHZkX3N0cnVjdCAqczsKLQlpbnQgc2l6ZSA9IHNpemVvZihkdmRfc3RydWN0KTsKLQotCWlmICghQ0RST01fQ0FOKENEQ19EVkQpKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBEVkRfUkVBRF9TVFJVQ1RcbiIpOwotCWlmIChjb3B5X2Zyb21fdXNlcihzLCBhcmcsIHNpemUpKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXQgPSBkdmRfcmVhZF9zdHJ1Y3QoY2RpLCBzLCBjZ2MpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsIHMsIHNpemUpKQotCQlyZXQgPSAtRUZBVUxUOwotb3V0OgotCWtmcmVlKHMpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2R2ZF9hdXRoKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJCQl2b2lkIF9fdXNlciAqYXJnKQotewotCWludCByZXQ7Ci0JZHZkX2F1dGhpbmZvIGFpOwotCWlmICghQ0RST01fQ0FOKENEQ19EVkQpKQotCQlyZXR1cm4gLUVOT1NZUzsKLQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBEVkRfQVVUSFxuIik7Ci0JSU9DVExfSU4oYXJnLCBkdmRfYXV0aGluZm8sIGFpKTsKLQlyZXQgPSBkdmRfZG9fYXV0aChjZGksICZhaSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlJT0NUTF9PVVQoYXJnLCBkdmRfYXV0aGluZm8sIGFpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fbmV4dF93cml0YWJsZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKLQkJCQkJCXZvaWQgX191c2VyICphcmcpCi17Ci0JaW50IHJldDsKLQlsb25nIG5leHQgPSAwOwotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX05FWFRfV1JJVEFCTEVcbiIpOwotCXJldCA9IGNkcm9tX2dldF9uZXh0X3dyaXRhYmxlKGNkaSwgJm5leHQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JSU9DVExfT1VUKGFyZywgbG9uZywgbmV4dCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX2xhc3Rfd3JpdHRlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKLQkJCQkJCXZvaWQgX191c2VyICphcmcpCi17Ci0JaW50IHJldDsKLQlsb25nIGxhc3QgPSAwOwotCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0xBU1RfV1JJVFRFTlxuIik7Ci0JcmV0ID0gY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbihjZGksICZsYXN0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCUlPQ1RMX09VVChhcmcsIGxvbmcsIGxhc3QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1tY19pb2N0bChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgdW5zaWduZWQgaW50IGNtZCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCXZvaWQgX191c2VyICp1c2VycHRyID0gKHZvaWQgX191c2VyICopYXJnOwotCi0JbWVtc2V0KCZjZ2MsIDAsIHNpemVvZihjZ2MpKTsKLQotCS8qIGJ1aWxkIGEgdW5pZmllZCBjb21tYW5kIGFuZCBxdWV1ZSBpdCB0aHJvdWdoCi0JICAgY2RvLT5nZW5lcmljX3BhY2tldCgpICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIENEUk9NUkVBRFJBVzoKLQljYXNlIENEUk9NUkVBRE1PREUxOgotCWNhc2UgQ0RST01SRUFETU9ERTI6Ci0JCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcmVhZF9kYXRhKGNkaSwgdXNlcnB0ciwgJmNnYywgY21kKTsKLQljYXNlIENEUk9NUkVBREFVRElPOgotCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3JlYWRfYXVkaW8oY2RpLCB1c2VycHRyKTsKLQljYXNlIENEUk9NU1VCQ0hOTDoKLQkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9zdWJjaGFubmVsKGNkaSwgdXNlcnB0cik7Ci0JY2FzZSBDRFJPTVBMQVlNU0Y6Ci0JCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcGxheV9tc2YoY2RpLCB1c2VycHRyLCAmY2djKTsKLQljYXNlIENEUk9NUExBWUJMSzoKLQkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9wbGF5X2JsayhjZGksIHVzZXJwdHIsICZjZ2MpOwotCWNhc2UgQ0RST01WT0xDVFJMOgotCWNhc2UgQ0RST01WT0xSRUFEOgotCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3ZvbHVtZShjZGksIHVzZXJwdHIsICZjZ2MsIGNtZCk7Ci0JY2FzZSBDRFJPTVNUQVJUOgotCWNhc2UgQ0RST01TVE9QOgotCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3N0YXJ0X3N0b3AoY2RpLCAmY2djLCBjbWQpOwotCWNhc2UgQ0RST01QQVVTRToKLQljYXNlIENEUk9NUkVTVU1FOgotCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3BhdXNlX3Jlc3VtZShjZGksICZjZ2MsIGNtZCk7Ci0JY2FzZSBEVkRfUkVBRF9TVFJVQ1Q6Ci0JCXJldHVybiBtbWNfaW9jdGxfZHZkX3JlYWRfc3RydWN0KGNkaSwgdXNlcnB0ciwgJmNnYyk7Ci0JY2FzZSBEVkRfQVVUSDoKLQkJcmV0dXJuIG1tY19pb2N0bF9kdmRfYXV0aChjZGksIHVzZXJwdHIpOwotCWNhc2UgQ0RST01fTkVYVF9XUklUQUJMRToKLQkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9uZXh0X3dyaXRhYmxlKGNkaSwgdXNlcnB0cik7Ci0JY2FzZSBDRFJPTV9MQVNUX1dSSVRURU46Ci0JCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fbGFzdF93cml0dGVuKGNkaSwgdXNlcnB0cik7Ci0JfQotCi0JcmV0dXJuIC1FTk9UVFk7Ci19Ci0KLXN0YXRpYyBpbnQgY2Ryb21fZ2V0X3RyYWNrX2luZm8oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIF9fdTE2IHRyYWNrLCBfX3U4IHR5cGUsCi0JCQkgdHJhY2tfaW5mb3JtYXRpb24gKnRpKQotewotCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKLQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCWludCByZXQsIGJ1ZmxlbjsKLQotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCB0aSwgOCwgQ0dDX0RBVEFfUkVBRCk7Ci0JY2djLmNtZFswXSA9IEdQQ01EX1JFQURfVFJBQ0tfUlpPTkVfSU5GTzsKLQljZ2MuY21kWzFdID0gdHlwZSAmIDM7Ci0JY2djLmNtZFs0XSA9ICh0cmFjayAmIDB4ZmYwMCkgPj4gODsKLQljZ2MuY21kWzVdID0gdHJhY2sgJiAweGZmOwotCWNnYy5jbWRbOF0gPSA4OwotCWNnYy5xdWlldCA9IDE7Ci0KLQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCi0JCXJldHVybiByZXQ7Ci0JCi0JYnVmbGVuID0gYmUxNl90b19jcHUodGktPnRyYWNrX2luZm9ybWF0aW9uX2xlbmd0aCkgKwotCQkgICAgIHNpemVvZih0aS0+dHJhY2tfaW5mb3JtYXRpb25fbGVuZ3RoKTsKLQotCWlmIChidWZsZW4gPiBzaXplb2YodHJhY2tfaW5mb3JtYXRpb24pKQotCQlidWZsZW4gPSBzaXplb2YodHJhY2tfaW5mb3JtYXRpb24pOwotCi0JY2djLmNtZFs4XSA9IGNnYy5idWZsZW4gPSBidWZsZW47Ci0JaWYgKChyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQotCQlyZXR1cm4gcmV0OwotCi0JLyogcmV0dXJuIGFjdHVhbCBmaWxsIHNpemUgKi8KLQlyZXR1cm4gYnVmbGVuOwotfQotCi0vKiByZXF1aXJlcyBDRCBSL1JXICovCi1zdGF0aWMgaW50IGNkcm9tX2dldF9kaXNjX2luZm8oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGRpc2NfaW5mb3JtYXRpb24gKmRpKQotewotCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKLQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCWludCByZXQsIGJ1ZmxlbjsKLQotCS8qIHNldCB1cCBjb21tYW5kIGFuZCBnZXQgdGhlIGRpc2MgaW5mbyAqLwotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBkaSwgc2l6ZW9mKCpkaSksIENHQ19EQVRBX1JFQUQpOwotCWNnYy5jbWRbMF0gPSBHUENNRF9SRUFEX0RJU0NfSU5GTzsKLQljZ2MuY21kWzhdID0gY2djLmJ1ZmxlbiA9IDI7Ci0JY2djLnF1aWV0ID0gMTsKLQotCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKLQotCS8qIG5vdCBhbGwgZHJpdmVzIGhhdmUgdGhlIHNhbWUgZGlzY19pbmZvIGxlbmd0aCwgc28gcmVxdWV1ZQotCSAqIHBhY2tldCB3aXRoIHRoZSBsZW5ndGggdGhlIGRyaXZlIHRlbGxzIHVzIGl0IGNhbiBzdXBwbHkKLQkgKi8KLQlidWZsZW4gPSBiZTE2X3RvX2NwdShkaS0+ZGlzY19pbmZvcm1hdGlvbl9sZW5ndGgpICsKLQkJICAgICBzaXplb2YoZGktPmRpc2NfaW5mb3JtYXRpb25fbGVuZ3RoKTsKLQotCWlmIChidWZsZW4gPiBzaXplb2YoZGlzY19pbmZvcm1hdGlvbikpCi0JCWJ1ZmxlbiA9IHNpemVvZihkaXNjX2luZm9ybWF0aW9uKTsKLQotCWNnYy5jbWRbOF0gPSBjZ2MuYnVmbGVuID0gYnVmbGVuOwotCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHJldHVybiBhY3R1YWwgZmlsbCBzaXplICovCi0JcmV0dXJuIGJ1ZmxlbjsKLX0KLQotLyogcmV0dXJuIHRoZSBsYXN0IHdyaXR0ZW4gYmxvY2sgb24gdGhlIENELVIgbWVkaWEuIHRoaXMgaXMgZm9yIHRoZSB1ZGYKLSAgIGZpbGUgc3lzdGVtLiAqLwotaW50IGNkcm9tX2dldF9sYXN0X3dyaXR0ZW4oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGxvbmcgKmxhc3Rfd3JpdHRlbikKLXsKLQlzdHJ1Y3QgY2Ryb21fdG9jZW50cnkgdG9jOwotCWRpc2NfaW5mb3JtYXRpb24gZGk7Ci0JdHJhY2tfaW5mb3JtYXRpb24gdGk7Ci0JX191MzIgbGFzdF90cmFjazsKLQlpbnQgcmV0ID0gLTEsIHRpX3NpemU7Ci0KLQlpZiAoIUNEUk9NX0NBTihDRENfR0VORVJJQ19QQUNLRVQpKQotCQlnb3RvIHVzZV90b2M7Ci0KLQlyZXQgPSBjZHJvbV9nZXRfZGlzY19pbmZvKGNkaSwgJmRpKTsKLQlpZiAocmV0IDwgKGludCkob2Zmc2V0b2YodHlwZW9mKGRpKSwgbGFzdF90cmFja19sc2IpCi0JCQkrIHNpemVvZihkaS5sYXN0X3RyYWNrX2xzYikpKQotCQlnb3RvIHVzZV90b2M7Ci0KLQkvKiBpZiB1bml0IGRpZG4ndCByZXR1cm4gbXNiLCBpdCdzIHplcm9lZCBieSBjZHJvbV9nZXRfZGlzY19pbmZvICovCi0JbGFzdF90cmFjayA9IChkaS5sYXN0X3RyYWNrX21zYiA8PCA4KSB8IGRpLmxhc3RfdHJhY2tfbHNiOwotCXRpX3NpemUgPSBjZHJvbV9nZXRfdHJhY2tfaW5mbyhjZGksIGxhc3RfdHJhY2ssIDEsICZ0aSk7Ci0JaWYgKHRpX3NpemUgPCAoaW50KW9mZnNldG9mKHR5cGVvZih0aSksIHRyYWNrX3N0YXJ0KSkKLQkJZ290byB1c2VfdG9jOwotCi0JLyogaWYgdGhpcyB0cmFjayBpcyBibGFuaywgdHJ5IHRoZSBwcmV2aW91cy4gKi8KLQlpZiAodGkuYmxhbmspIHsKLQkJaWYgKGxhc3RfdHJhY2s9PTEpCi0JCQlnb3RvIHVzZV90b2M7Ci0JCWxhc3RfdHJhY2stLTsKLQkJdGlfc2l6ZSA9IGNkcm9tX2dldF90cmFja19pbmZvKGNkaSwgbGFzdF90cmFjaywgMSwgJnRpKTsKLQl9Ci0KLQlpZiAodGlfc2l6ZSA8IChpbnQpKG9mZnNldG9mKHR5cGVvZih0aSksIHRyYWNrX3NpemUpCi0JCQkJKyBzaXplb2YodGkudHJhY2tfc2l6ZSkpKQotCQlnb3RvIHVzZV90b2M7Ci0KLQkvKiBpZiBsYXN0IHJlY29yZGVkIGZpZWxkIGlzIHZhbGlkLCByZXR1cm4gaXQuICovCi0JaWYgKHRpLmxyYV92ICYmIHRpX3NpemUgPj0gKGludCkob2Zmc2V0b2YodHlwZW9mKHRpKSwgbGFzdF9yZWNfYWRkcmVzcykKLQkJCQkrIHNpemVvZih0aS5sYXN0X3JlY19hZGRyZXNzKSkpIHsKLQkJKmxhc3Rfd3JpdHRlbiA9IGJlMzJfdG9fY3B1KHRpLmxhc3RfcmVjX2FkZHJlc3MpOwotCX0gZWxzZSB7Ci0JCS8qIG1ha2UgaXQgdXAgaW5zdGVhZCAqLwotCQkqbGFzdF93cml0dGVuID0gYmUzMl90b19jcHUodGkudHJhY2tfc3RhcnQpICsKLQkJCQliZTMyX3RvX2NwdSh0aS50cmFja19zaXplKTsKLQkJaWYgKHRpLmZyZWVfYmxvY2tzKQotCQkJKmxhc3Rfd3JpdHRlbiAtPSAoYmUzMl90b19jcHUodGkuZnJlZV9ibG9ja3MpICsgNyk7Ci0JfQotCXJldHVybiAwOwotCi0JLyogdGhpcyBpcyB3aGVyZSB3ZSBlbmQgdXAgaWYgdGhlIGRyaXZlIGVpdGhlciBjYW4ndCBkbyBhCi0JICAgR1BDTURfUkVBRF9ESVNDX0lORk8gb3IgR1BDTURfUkVBRF9UUkFDS19SWk9ORV9JTkZPIG9yIGlmCi0JICAgaXQgZG9lc24ndCBnaXZlIGVub3VnaCBpbmZvcm1hdGlvbiBvciBmYWlscy4gdGhlbiB3ZSByZXR1cm4KLQkgICB0aGUgdG9jIGNvbnRlbnRzLiAqLwotdXNlX3RvYzoKLQl0b2MuY2R0ZV9mb3JtYXQgPSBDRFJPTV9NU0Y7Ci0JdG9jLmNkdGVfdHJhY2sgPSBDRFJPTV9MRUFET1VUOwotCWlmICgocmV0ID0gY2RpLT5vcHMtPmF1ZGlvX2lvY3RsKGNkaSwgQ0RST01SRUFEVE9DRU5UUlksICZ0b2MpKSkKLQkJcmV0dXJuIHJldDsKLQlzYW5pdGl6ZV9mb3JtYXQoJnRvYy5jZHRlX2FkZHIsICZ0b2MuY2R0ZV9mb3JtYXQsIENEUk9NX0xCQSk7Ci0JKmxhc3Rfd3JpdHRlbiA9IHRvYy5jZHRlX2FkZHIubGJhOwotCXJldHVybiAwOwotfQotCi0vKiByZXR1cm4gdGhlIG5leHQgd3JpdGFibGUgYmxvY2suIGFsc28gZm9yIHVkZiBmaWxlIHN5c3RlbS4gKi8KLXN0YXRpYyBpbnQgY2Ryb21fZ2V0X25leHRfd3JpdGFibGUoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGxvbmcgKm5leHRfd3JpdGFibGUpCi17Ci0JZGlzY19pbmZvcm1hdGlvbiBkaTsKLQl0cmFja19pbmZvcm1hdGlvbiB0aTsKLQlfX3UxNiBsYXN0X3RyYWNrOwotCWludCByZXQsIHRpX3NpemU7Ci0KLQlpZiAoIUNEUk9NX0NBTihDRENfR0VORVJJQ19QQUNLRVQpKQotCQlnb3RvIHVzZV9sYXN0X3dyaXR0ZW47Ci0KLQlyZXQgPSBjZHJvbV9nZXRfZGlzY19pbmZvKGNkaSwgJmRpKTsKLQlpZiAocmV0IDwgMCB8fCByZXQgPCBvZmZzZXRvZih0eXBlb2YoZGkpLCBsYXN0X3RyYWNrX2xzYikKLQkJCQkrIHNpemVvZihkaS5sYXN0X3RyYWNrX2xzYikpCi0JCWdvdG8gdXNlX2xhc3Rfd3JpdHRlbjsKLQotCS8qIGlmIHVuaXQgZGlkbid0IHJldHVybiBtc2IsIGl0J3MgemVyb2VkIGJ5IGNkcm9tX2dldF9kaXNjX2luZm8gKi8KLQlsYXN0X3RyYWNrID0gKGRpLmxhc3RfdHJhY2tfbXNiIDw8IDgpIHwgZGkubGFzdF90cmFja19sc2I7Ci0JdGlfc2l6ZSA9IGNkcm9tX2dldF90cmFja19pbmZvKGNkaSwgbGFzdF90cmFjaywgMSwgJnRpKTsKLQlpZiAodGlfc2l6ZSA8IDAgfHwgdGlfc2l6ZSA8IG9mZnNldG9mKHR5cGVvZih0aSksIHRyYWNrX3N0YXJ0KSkKLQkJZ290byB1c2VfbGFzdF93cml0dGVuOwotCi0gICAgICAgIC8qIGlmIHRoaXMgdHJhY2sgaXMgYmxhbmssIHRyeSB0aGUgcHJldmlvdXMuICovCi0JaWYgKHRpLmJsYW5rKSB7Ci0JCWlmIChsYXN0X3RyYWNrID09IDEpCi0JCQlnb3RvIHVzZV9sYXN0X3dyaXR0ZW47Ci0JCWxhc3RfdHJhY2stLTsKLQkJdGlfc2l6ZSA9IGNkcm9tX2dldF90cmFja19pbmZvKGNkaSwgbGFzdF90cmFjaywgMSwgJnRpKTsKLQkJaWYgKHRpX3NpemUgPCAwKQotCQkJZ290byB1c2VfbGFzdF93cml0dGVuOwotCX0KLQotCS8qIGlmIG5leHQgcmVjb3JkYWJsZSBhZGRyZXNzIGZpZWxkIGlzIHZhbGlkLCB1c2UgaXQuICovCi0JaWYgKHRpLm53YV92ICYmIHRpX3NpemUgPj0gb2Zmc2V0b2YodHlwZW9mKHRpKSwgbmV4dF93cml0YWJsZSkKLQkJCQkrIHNpemVvZih0aS5uZXh0X3dyaXRhYmxlKSkgewotCQkqbmV4dF93cml0YWJsZSA9IGJlMzJfdG9fY3B1KHRpLm5leHRfd3JpdGFibGUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLXVzZV9sYXN0X3dyaXR0ZW46Ci0JaWYgKChyZXQgPSBjZHJvbV9nZXRfbGFzdF93cml0dGVuKGNkaSwgbmV4dF93cml0YWJsZSkpKSB7Ci0JCSpuZXh0X3dyaXRhYmxlID0gMDsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgewotCQkqbmV4dF93cml0YWJsZSArPSA3OwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KIEVYUE9SVF9TWU1CT0woY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbik7CiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2Nkcm9tKTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jZHJvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKaW5kZXggNTFlNzVhZC4uNTg0YmMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9nZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCXNwaW5fdW5sb2NrKCZnZHJvbV9sb2NrKTsKIAkJYmxvY2sgPSBibGtfcnFfcG9zKHJlcSkvR0RfVE9fQkxLICsgR0RfU0VTU0lPTl9PRkZTRVQ7CiAJCWJsb2NrX2NudCA9IGJsa19ycV9zZWN0b3JzKHJlcSkvR0RfVE9fQkxLOwotCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHJlcS0+YnVmZmVyKSwgR0RST01fRE1BX1NUQVJUQUREUl9SRUcpOworCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGJpb19kYXRhKHJlcS0+YmlvKSksIEdEUk9NX0RNQV9TVEFSVEFERFJfUkVHKTsKIAkJX19yYXdfd3JpdGVsKGJsb2NrX2NudCAqIEdEUk9NX0hBUkRfU0VDVE9SLCBHRFJPTV9ETUFfTEVOR1RIX1JFRyk7CiAJCV9fcmF3X3dyaXRlbCgxLCBHRFJPTV9ETUFfRElSRUNUSU9OX1JFRyk7CiAJCV9fcmF3X3dyaXRlbCgxLCBHRFJPTV9ETUFfRU5BQkxFX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IDk3NDMyMWEuLjE0NzkwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC0zNDUsNyArMzQ1LDYgQEAKIAkJCWZyZWVfaXJxKGFwYnNbaV0uaXJxLCAmZHVtbXkpOwogCQlpb3VubWFwKGFwYnNbaV0uUmFtSU8pOwogCX0KLQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IDFjNGJiNGYuLjVkNjY1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCXN0cnVjdCB0aW1lc3BlYyBidXN5X3VudGlsOwogCiAJaXBtaV9zaV9zZXRfbm90X2J1c3koJmJ1c3lfdW50aWwpOwotCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUFYX05JQ0UpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCWludCBidXN5X3dhaXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCAxMDJjNTBkLi4wNmNlYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC05MDIsNiArOTAyLDcgQEAKIAlhZGRfdGltZXJfcmFuZG9tbmVzcyhkaXNrLT5yYW5kb20sIDB4MTAwICsgZGlza19kZXZ0KGRpc2spKTsKIAl0cmFjZV9hZGRfZGlza19yYW5kb21uZXNzKGRpc2tfZGV2dChkaXNrKSwgRU5UUk9QWV9CSVRTKCZpbnB1dF9wb29sKSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChhZGRfZGlza19yYW5kb21uZXNzKTsKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9LY29uZmlnIGIvZHJpdmVycy9jbGsvS2NvbmZpZwppbmRleCA2ZjU2ZDNhLi4zYTIxOTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2xrL0tjb25maWcKQEAgLTMwLDE0ICszMCw3IEBACiAgICAgICAgICAgU3VwcG9ydHMgdGhlIGNsb2NraW5nIHN1YnN5c3RlbSBvZiB0aGUgV004MzF4LzJ4IHNlcmllcyBvZgogCSAgUE1JQ3MgZnJvbSBXb2xmc29uIE1pY3JvbGVjdHJvbmljcy4KIAotY29uZmlnIENPTU1PTl9DTEtfVkVSU0FUSUxFCi0JYm9vbCAiQ2xvY2sgZHJpdmVyIGZvciBBUk0gUmVmZXJlbmNlIGRlc2lnbnMiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9SRUFMVklFVyB8fCBBUkNIX1ZFWFBSRVNTIHx8IEFSTTY0Ci0JLS0taGVscC0tLQotICAgICAgICAgIFN1cHBvcnRzIGNsb2NraW5nIG9uIEFSTSBSZWZlcmVuY2UgZGVzaWduczoKLQkgIC0gSW50ZWdyYXRvci9BUCBhbmQgSW50ZWdyYXRvci9DUAotCSAgLSBSZWFsVmlldyBQQjExNzYsIEVCLCBQQjExTVAgYW5kIFBCWAotCSAgLSBWZXJzYXRpbGUgRXhwcmVzcworc291cmNlICJkcml2ZXJzL2Nsay92ZXJzYXRpbGUvS2NvbmZpZyIKIAogY29uZmlnIENPTU1PTl9DTEtfTUFYNzc2ODYKIAl0cmlzdGF0ZSAiQ2xvY2sgZHJpdmVyIGZvciBNYXhpbSA3NzY4NiBNRkQiCkBAIC0xMTUsMyArMTA4LDUgQEAKIAogc291cmNlICJkcml2ZXJzL2Nsay9iY20vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9jbGsvbXZlYnUvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2Nsay9zYW1zdW5nL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9NYWtlZmlsZSBiL2RyaXZlcnMvY2xrL01ha2VmaWxlCmluZGV4IDA3NDUwNTkuLjUwYjJhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xrL01ha2VmaWxlCkBAIC00Miw3ICs0Miw3IEBACiBvYmotJChDT05GSUdfQVJDSF9NWFMpCQkJKz0gbXhzLwogb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfUUNPTSkJCSs9IHFjb20vCiBvYmotJChDT05GSUdfQVJDSF9ST0NLQ0hJUCkJCSs9IHJvY2tjaGlwLwotb2JqLSQoQ09ORklHX1BMQVRfU0FNU1VORykJCSs9IHNhbXN1bmcvCitvYmotJChDT05GSUdfQ09NTU9OX0NMS19TQU1TVU5HKQkrPSBzYW1zdW5nLwogb2JqLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEVfTVVMVEkpCSs9IHNobW9iaWxlLwogb2JqLSQoQ09ORklHX0FSQ0hfU0lSRikJCQkrPSBzaXJmLwogb2JqLSQoQ09ORklHX0FSQ0hfU09DRlBHQSkJCSs9IHNvY2ZwZ2EvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL01ha2VmaWxlIGIvZHJpdmVycy9jbGsvYXQ5MS9NYWtlZmlsZQppbmRleCA0NmMxZDNkLi40OTk4YWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9hdDkxL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvTWFrZWZpbGUKQEAgLTIsOCArMiw4IEBACiAjIE1ha2VmaWxlIGZvciBhdDkxIHNwZWNpZmljIGNsawogIwogCi1vYmoteSArPSBwbWMubwotb2JqLXkgKz0gY2xrLW1haW4ubyBjbGstcGxsLm8gY2xrLXBsbGRpdi5vIGNsay1tYXN0ZXIubworb2JqLXkgKz0gcG1jLm8gc2NrYy5vCitvYmoteSArPSBjbGstc2xvdy5vIGNsay1tYWluLm8gY2xrLXBsbC5vIGNsay1wbGxkaXYubyBjbGstbWFzdGVyLm8KIG9iai15ICs9IGNsay1zeXN0ZW0ubyBjbGstcGVyaXBoZXJhbC5vIGNsay1wcm9ncmFtbWFibGUubwogCiBvYmotJChDT05GSUdfSEFWRV9BVDkxX1VUTUkpCQkrPSBjbGstdXRtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1tYWluLmMgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1tYWluLmMKaW5kZXggOGU5ZThjYy4uNzMzMzA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstbWFpbi5jCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLW1haW4uYwpAQCAtMzAsOTkgKzMwLDQxMiBAQAogI2RlZmluZSBNQUlORl9MT09QX01JTl9XQUlUCShVU0VDX1BFUl9TRUMgLyBTTE9XX0NMT0NLX0ZSRVEpCiAjZGVmaW5lIE1BSU5GX0xPT1BfTUFYX1dBSVQJTUFJTkZSRFlfVElNRU9VVAogCi1zdHJ1Y3QgY2xrX21haW4geworI2RlZmluZSBNT1JfS0VZX01BU0sJCSgweGZmIDw8IDE2KQorCitzdHJ1Y3QgY2xrX21haW5fb3NjIHsKIAlzdHJ1Y3QgY2xrX2h3IGh3OwogCXN0cnVjdCBhdDkxX3BtYyAqcG1jOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiB9OwogCi0jZGVmaW5lIHRvX2Nsa19tYWluKGh3KSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBjbGtfbWFpbiwgaHcpCisjZGVmaW5lIHRvX2Nsa19tYWluX29zYyhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX21haW5fb3NjLCBodykKIAotc3RhdGljIGlycXJldHVybl90IGNsa19tYWluX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0cnVjdCBjbGtfbWFpbl9yY19vc2MgeworCXN0cnVjdCBjbGtfaHcgaHc7CisJc3RydWN0IGF0OTFfcG1jICpwbWM7CisJdW5zaWduZWQgaW50IGlycTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXVuc2lnbmVkIGxvbmcgYWNjdXJhY3k7Cit9OworCisjZGVmaW5lIHRvX2Nsa19tYWluX3JjX29zYyhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX21haW5fcmNfb3NjLCBodykKKworc3RydWN0IGNsa19ybTkyMDBfbWFpbiB7CisJc3RydWN0IGNsa19odyBodzsKKwlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYzsKK307CisKKyNkZWZpbmUgdG9fY2xrX3JtOTIwMF9tYWluKGh3KSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBjbGtfcm05MjAwX21haW4sIGh3KQorCitzdHJ1Y3QgY2xrX3NhbTl4NV9tYWluIHsKKwlzdHJ1Y3QgY2xrX2h3IGh3OworCXN0cnVjdCBhdDkxX3BtYyAqcG1jOworCXVuc2lnbmVkIGludCBpcnE7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwl1OCBwYXJlbnQ7Cit9OworCisjZGVmaW5lIHRvX2Nsa19zYW05eDVfbWFpbihodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX3NhbTl4NV9tYWluLCBodykKKworc3RhdGljIGlycXJldHVybl90IGNsa19tYWluX29zY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGNsa19tYWluICpjbGttYWluID0gKHN0cnVjdCBjbGtfbWFpbiAqKWRldl9pZDsKKwlzdHJ1Y3QgY2xrX21haW5fb3NjICpvc2MgPSBkZXZfaWQ7CiAKLQl3YWtlX3VwKCZjbGttYWluLT53YWl0KTsKLQlkaXNhYmxlX2lycV9ub3N5bmMoY2xrbWFpbi0+aXJxKTsKKwl3YWtlX3VwKCZvc2MtPndhaXQpOworCWRpc2FibGVfaXJxX25vc3luYyhvc2MtPmlycSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgY2xrX21haW5fcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3N0YXRpYyBpbnQgY2xrX21haW5fb3NjX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCiB7Ci0Jc3RydWN0IGNsa19tYWluICpjbGttYWluID0gdG9fY2xrX21haW4oaHcpOwotCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gY2xrbWFpbi0+cG1jOwotCXVuc2lnbmVkIGxvbmcgaGFsdF90aW1lLCB0aW1lb3V0OworCXN0cnVjdCBjbGtfbWFpbl9vc2MgKm9zYyA9IHRvX2Nsa19tYWluX29zYyhodyk7CisJc3RydWN0IGF0OTFfcG1jICpwbWMgPSBvc2MtPnBtYzsKIAl1MzIgdG1wOwogCi0Jd2hpbGUgKCEocG1jX3JlYWQocG1jLCBBVDkxX1BNQ19TUikgJiBBVDkxX1BNQ19NT1NDUykpIHsKLQkJZW5hYmxlX2lycShjbGttYWluLT5pcnEpOwotCQl3YWl0X2V2ZW50KGNsa21haW4tPndhaXQsCi0JCQkgICBwbWNfcmVhZChwbWMsIEFUOTFfUE1DX1NSKSAmIEFUOTFfUE1DX01PU0NTKTsKLQl9Ci0KLQlpZiAoY2xrbWFpbi0+cmF0ZSkKKwl0bXAgPSBwbWNfcmVhZChwbWMsIEFUOTFfQ0tHUl9NT1IpICYgfk1PUl9LRVlfTUFTSzsKKwlpZiAodG1wICYgQVQ5MV9QTUNfT1NDQllQQVNTKQogCQlyZXR1cm4gMDsKIAotCXRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhNQUlORlJEWV9USU1FT1VUKTsKLQlkbyB7Ci0JCWhhbHRfdGltZSA9IGppZmZpZXM7Ci0JCXRtcCA9IHBtY19yZWFkKHBtYywgQVQ5MV9DS0dSX01DRlIpOwotCQlpZiAodG1wICYgQVQ5MV9QTUNfTUFJTlJEWSkKLQkJCXJldHVybiAwOwotCQl1c2xlZXBfcmFuZ2UoTUFJTkZfTE9PUF9NSU5fV0FJVCwgTUFJTkZfTE9PUF9NQVhfV0FJVCk7Ci0JfSB3aGlsZSAodGltZV9iZWZvcmUoaGFsdF90aW1lLCB0aW1lb3V0KSk7CisJaWYgKCEodG1wICYgQVQ5MV9QTUNfTU9TQ0VOKSkgeworCQl0bXAgfD0gQVQ5MV9QTUNfTU9TQ0VOIHwgQVQ5MV9QTUNfS0VZOworCQlwbWNfd3JpdGUocG1jLCBBVDkxX0NLR1JfTU9SLCB0bXApOworCX0KKworCXdoaWxlICghKHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1MpKSB7CisJCWVuYWJsZV9pcnEob3NjLT5pcnEpOworCQl3YWl0X2V2ZW50KG9zYy0+d2FpdCwKKwkJCSAgIHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1MpOworCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsa19tYWluX2lzX3ByZXBhcmVkKHN0cnVjdCBjbGtfaHcgKmh3KQorc3RhdGljIHZvaWQgY2xrX21haW5fb3NjX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKIHsKLQlzdHJ1Y3QgY2xrX21haW4gKmNsa21haW4gPSB0b19jbGtfbWFpbihodyk7CisJc3RydWN0IGNsa19tYWluX29zYyAqb3NjID0gdG9fY2xrX21haW5fb3NjKGh3KTsKKwlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyA9IG9zYy0+cG1jOworCXUzMiB0bXAgPSBwbWNfcmVhZChwbWMsIEFUOTFfQ0tHUl9NT1IpOwogCi0JcmV0dXJuICEhKHBtY19yZWFkKGNsa21haW4tPnBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1MpOworCWlmICh0bXAgJiBBVDkxX1BNQ19PU0NCWVBBU1MpCisJCXJldHVybjsKKworCWlmICghKHRtcCAmIEFUOTFfUE1DX01PU0NFTikpCisJCXJldHVybjsKKworCXRtcCAmPSB+KEFUOTFfUE1DX0tFWSB8IEFUOTFfUE1DX01PU0NFTik7CisJcG1jX3dyaXRlKHBtYywgQVQ5MV9DS0dSX01PUiwgdG1wIHwgQVQ5MV9QTUNfS0VZKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX21haW5fcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3N0YXRpYyBpbnQgY2xrX21haW5fb3NjX2lzX3ByZXBhcmVkKHN0cnVjdCBjbGtfaHcgKmh3KQogewotCXUzMiB0bXA7Ci0Jc3RydWN0IGNsa19tYWluICpjbGttYWluID0gdG9fY2xrX21haW4oaHcpOwotCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gY2xrbWFpbi0+cG1jOworCXN0cnVjdCBjbGtfbWFpbl9vc2MgKm9zYyA9IHRvX2Nsa19tYWluX29zYyhodyk7CisJc3RydWN0IGF0OTFfcG1jICpwbWMgPSBvc2MtPnBtYzsKKwl1MzIgdG1wID0gcG1jX3JlYWQocG1jLCBBVDkxX0NLR1JfTU9SKTsKIAotCWlmIChjbGttYWluLT5yYXRlKQotCQlyZXR1cm4gY2xrbWFpbi0+cmF0ZTsKKwlpZiAodG1wICYgQVQ5MV9QTUNfT1NDQllQQVNTKQorCQlyZXR1cm4gMTsKIAotCXRtcCA9IHBtY19yZWFkKHBtYywgQVQ5MV9DS0dSX01DRlIpICYgQVQ5MV9QTUNfTUFJTkY7Ci0JY2xrbWFpbi0+cmF0ZSA9ICh0bXAgKiBwYXJlbnRfcmF0ZSkgLyBNQUlORl9ESVY7Ci0KLQlyZXR1cm4gY2xrbWFpbi0+cmF0ZTsKKwlyZXR1cm4gISEoKHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1MpICYmCisJCSAgKHBtY19yZWFkKHBtYywgQVQ5MV9DS0dSX01PUikgJiBBVDkxX1BNQ19NT1NDRU4pKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG1haW5fb3BzID0gewotCS5wcmVwYXJlID0gY2xrX21haW5fcHJlcGFyZSwKLQkuaXNfcHJlcGFyZWQgPSBjbGtfbWFpbl9pc19wcmVwYXJlZCwKLQkucmVjYWxjX3JhdGUgPSBjbGtfbWFpbl9yZWNhbGNfcmF0ZSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtYWluX29zY19vcHMgPSB7CisJLnByZXBhcmUgPSBjbGtfbWFpbl9vc2NfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gY2xrX21haW5fb3NjX3VucHJlcGFyZSwKKwkuaXNfcHJlcGFyZWQgPSBjbGtfbWFpbl9vc2NfaXNfcHJlcGFyZWQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAotYXQ5MV9jbGtfcmVnaXN0ZXJfbWFpbihzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKLQkJICAgICAgIHVuc2lnbmVkIGludCBpcnEsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCithdDkxX2Nsa19yZWdpc3Rlcl9tYWluX29zYyhzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKKwkJCSAgIHVuc2lnbmVkIGludCBpcnEsCisJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgY29uc3QgY2hhciAqcGFyZW50X25hbWUsCisJCQkgICBib29sIGJ5cGFzcykKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBjbGtfbWFpbiAqY2xrbWFpbjsKKwlzdHJ1Y3QgY2xrX21haW5fb3NjICpvc2M7CiAJc3RydWN0IGNsayAqY2xrID0gTlVMTDsKIAlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OwogCi0JaWYgKCFwbWMgfHwgIWlycSB8fCAhbmFtZSkKKwlpZiAoIXBtYyB8fCAhaXJxIHx8ICFuYW1lIHx8ICFwYXJlbnRfbmFtZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlpZiAoIXJhdGUgJiYgIXBhcmVudF9uYW1lKQorCW9zYyA9IGt6YWxsb2Moc2l6ZW9mKCpvc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9zYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpbml0Lm5hbWUgPSBuYW1lOworCWluaXQub3BzID0gJm1haW5fb3NjX29wczsKKwlpbml0LnBhcmVudF9uYW1lcyA9ICZwYXJlbnRfbmFtZTsKKwlpbml0Lm51bV9wYXJlbnRzID0gMTsKKwlpbml0LmZsYWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQ7CisKKwlvc2MtPmh3LmluaXQgPSAmaW5pdDsKKwlvc2MtPnBtYyA9IHBtYzsKKwlvc2MtPmlycSA9IGlycTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm9zYy0+d2FpdCk7CisJaXJxX3NldF9zdGF0dXNfZmxhZ3Mob3NjLT5pcnEsIElSUV9OT0FVVE9FTik7CisJcmV0ID0gcmVxdWVzdF9pcnEob3NjLT5pcnEsIGNsa19tYWluX29zY19pcnFfaGFuZGxlciwKKwkJCSAgSVJRRl9UUklHR0VSX0hJR0gsIG5hbWUsIG9zYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWlmIChieXBhc3MpCisJCXBtY193cml0ZShwbWMsIEFUOTFfQ0tHUl9NT1IsCisJCQkgIChwbWNfcmVhZChwbWMsIEFUOTFfQ0tHUl9NT1IpICYKKwkJCSAgIH4oTU9SX0tFWV9NQVNLIHwgQVQ5MV9QTUNfTU9TQ0VOKSkgfAorCQkJICBBVDkxX1BNQ19PU0NCWVBBU1MgfCBBVDkxX1BNQ19LRVkpOworCisJY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZvc2MtPmh3KTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZnJlZV9pcnEoaXJxLCBvc2MpOworCQlrZnJlZShvc2MpOworCX0KKworCXJldHVybiBjbGs7Cit9CisKK3ZvaWQgX19pbml0IG9mX2F0OTFybTkyMDBfY2xrX21haW5fb3NjX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSAgICAgc3RydWN0IGF0OTFfcG1jICpwbWMpCit7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGludCBpcnE7CisJY29uc3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOworCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOworCWJvb2wgYnlwYXNzOworCisJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJjbG9jay1vdXRwdXQtbmFtZXMiLCAmbmFtZSk7CisJYnlwYXNzID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiYXRtZWwsb3NjLWJ5cGFzcyIpOworCXBhcmVudF9uYW1lID0gb2ZfY2xrX2dldF9wYXJlbnRfbmFtZShucCwgMCk7CisKKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKCFpcnEpCisJCXJldHVybjsKKworCWNsayA9IGF0OTFfY2xrX3JlZ2lzdGVyX21haW5fb3NjKHBtYywgaXJxLCBuYW1lLCBwYXJlbnRfbmFtZSwgYnlwYXNzKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybjsKKworCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgY2xrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGNsa19tYWluX3JjX29zY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsa19tYWluX3JjX29zYyAqb3NjID0gZGV2X2lkOworCisJd2FrZV91cCgmb3NjLT53YWl0KTsKKwlkaXNhYmxlX2lycV9ub3N5bmMob3NjLT5pcnEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGNsa19tYWluX3JjX29zY19wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBjbGtfbWFpbl9yY19vc2MgKm9zYyA9IHRvX2Nsa19tYWluX3JjX29zYyhodyk7CisJc3RydWN0IGF0OTFfcG1jICpwbWMgPSBvc2MtPnBtYzsKKwl1MzIgdG1wOworCisJdG1wID0gcG1jX3JlYWQocG1jLCBBVDkxX0NLR1JfTU9SKSAmIH5NT1JfS0VZX01BU0s7CisKKwlpZiAoISh0bXAgJiBBVDkxX1BNQ19NT1NDUkNFTikpIHsKKwkJdG1wIHw9IEFUOTFfUE1DX01PU0NSQ0VOIHwgQVQ5MV9QTUNfS0VZOworCQlwbWNfd3JpdGUocG1jLCBBVDkxX0NLR1JfTU9SLCB0bXApOworCX0KKworCXdoaWxlICghKHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1JDUykpIHsKKwkJZW5hYmxlX2lycShvc2MtPmlycSk7CisJCXdhaXRfZXZlbnQob3NjLT53YWl0LAorCQkJICAgcG1jX3JlYWQocG1jLCBBVDkxX1BNQ19TUikgJiBBVDkxX1BNQ19NT1NDUkNTKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX21haW5fcmNfb3NjX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX21haW5fcmNfb3NjICpvc2MgPSB0b19jbGtfbWFpbl9yY19vc2MoaHcpOworCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gb3NjLT5wbWM7CisJdTMyIHRtcCA9IHBtY19yZWFkKHBtYywgQVQ5MV9DS0dSX01PUik7CisKKwlpZiAoISh0bXAgJiBBVDkxX1BNQ19NT1NDUkNFTikpCisJCXJldHVybjsKKworCXRtcCAmPSB+KE1PUl9LRVlfTUFTSyB8IEFUOTFfUE1DX01PU0NSQ0VOKTsKKwlwbWNfd3JpdGUocG1jLCBBVDkxX0NLR1JfTU9SLCB0bXAgfCBBVDkxX1BNQ19LRVkpOworfQorCitzdGF0aWMgaW50IGNsa19tYWluX3JjX29zY19pc19wcmVwYXJlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX21haW5fcmNfb3NjICpvc2MgPSB0b19jbGtfbWFpbl9yY19vc2MoaHcpOworCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gb3NjLT5wbWM7CisKKwlyZXR1cm4gISEoKHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1JDUykgJiYKKwkJICAocG1jX3JlYWQocG1jLCBBVDkxX0NLR1JfTU9SKSAmIEFUOTFfUE1DX01PU0NSQ0VOKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19tYWluX3JjX29zY19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBjbGtfbWFpbl9yY19vc2MgKm9zYyA9IHRvX2Nsa19tYWluX3JjX29zYyhodyk7CisKKwlyZXR1cm4gb3NjLT5mcmVxdWVuY3k7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19tYWluX3JjX29zY19yZWNhbGNfYWNjdXJhY3koc3RydWN0IGNsa19odyAqaHcsCisJCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2FjYykKK3sKKwlzdHJ1Y3QgY2xrX21haW5fcmNfb3NjICpvc2MgPSB0b19jbGtfbWFpbl9yY19vc2MoaHcpOworCisJcmV0dXJuIG9zYy0+YWNjdXJhY3k7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtYWluX3JjX29zY19vcHMgPSB7CisJLnByZXBhcmUgPSBjbGtfbWFpbl9yY19vc2NfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gY2xrX21haW5fcmNfb3NjX3VucHJlcGFyZSwKKwkuaXNfcHJlcGFyZWQgPSBjbGtfbWFpbl9yY19vc2NfaXNfcHJlcGFyZWQsCisJLnJlY2FsY19yYXRlID0gY2xrX21haW5fcmNfb3NjX3JlY2FsY19yYXRlLAorCS5yZWNhbGNfYWNjdXJhY3kgPSBjbGtfbWFpbl9yY19vc2NfcmVjYWxjX2FjY3VyYWN5LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK2F0OTFfY2xrX3JlZ2lzdGVyX21haW5fcmNfb3NjKHN0cnVjdCBhdDkxX3BtYyAqcG1jLAorCQkJICAgICAgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICB1MzIgZnJlcXVlbmN5LCB1MzIgYWNjdXJhY3kpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY2xrX21haW5fcmNfb3NjICpvc2M7CisJc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OworCisJaWYgKCFwbWMgfHwgIWlycSB8fCAhbmFtZSB8fCAhZnJlcXVlbmN5KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW9zYyA9IGt6YWxsb2Moc2l6ZW9mKCpvc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9zYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpbml0Lm5hbWUgPSBuYW1lOworCWluaXQub3BzID0gJm1haW5fcmNfb3NjX29wczsKKwlpbml0LnBhcmVudF9uYW1lcyA9IE5VTEw7CisJaW5pdC5udW1fcGFyZW50cyA9IDA7CisJaW5pdC5mbGFncyA9IENMS19JU19ST09UIHwgQ0xLX0lHTk9SRV9VTlVTRUQ7CisKKwlvc2MtPmh3LmluaXQgPSAmaW5pdDsKKwlvc2MtPnBtYyA9IHBtYzsKKwlvc2MtPmlycSA9IGlycTsKKwlvc2MtPmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKwlvc2MtPmFjY3VyYWN5ID0gYWNjdXJhY3k7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvc2MtPndhaXQpOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKG9zYy0+aXJxLCBJUlFfTk9BVVRPRU4pOworCXJldCA9IHJlcXVlc3RfaXJxKG9zYy0+aXJxLCBjbGtfbWFpbl9yY19vc2NfaXJxX2hhbmRsZXIsCisJCQkgIElSUUZfVFJJR0dFUl9ISUdILCBuYW1lLCBvc2MpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJm9zYy0+aHcpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlmcmVlX2lycShpcnEsIG9zYyk7CisJCWtmcmVlKG9zYyk7CisJfQorCisJcmV0dXJuIGNsazsKK30KKwordm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTl4NV9jbGtfbWFpbl9yY19vc2Nfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCXN0cnVjdCBhdDkxX3BtYyAqcG1jKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXUzMiBmcmVxdWVuY3kgPSAwOworCXUzMiBhY2N1cmFjeSA9IDA7CisJY29uc3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOworCisJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJjbG9jay1vdXRwdXQtbmFtZXMiLCAmbmFtZSk7CisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmZnJlcXVlbmN5KTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWFjY3VyYWN5IiwgJmFjY3VyYWN5KTsKKworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwlpZiAoIWlycSkKKwkJcmV0dXJuOworCisJY2xrID0gYXQ5MV9jbGtfcmVnaXN0ZXJfbWFpbl9yY19vc2MocG1jLCBpcnEsIG5hbWUsIGZyZXF1ZW5jeSwKKwkJCQkJICAgIGFjY3VyYWN5KTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybjsKKworCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgY2xrKTsKK30KKworCitzdGF0aWMgaW50IGNsa19tYWluX3Byb2JlX2ZyZXF1ZW5jeShzdHJ1Y3QgYXQ5MV9wbWMgKnBtYykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXBfdGltZSwgdGltZW91dDsKKwl1MzIgdG1wOworCisJdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKE1BSU5GUkRZX1RJTUVPVVQpOworCWRvIHsKKwkJcHJlcF90aW1lID0gamlmZmllczsKKwkJdG1wID0gcG1jX3JlYWQocG1jLCBBVDkxX0NLR1JfTUNGUik7CisJCWlmICh0bXAgJiBBVDkxX1BNQ19NQUlOUkRZKQorCQkJcmV0dXJuIDA7CisJCXVzbGVlcF9yYW5nZShNQUlORl9MT09QX01JTl9XQUlULCBNQUlORl9MT09QX01BWF9XQUlUKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShwcmVwX3RpbWUsIHRpbWVvdXQpKTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfbWFpbl9yZWNhbGNfcmF0ZShzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXUzMiB0bXA7CisKKwlpZiAocGFyZW50X3JhdGUpCisJCXJldHVybiBwYXJlbnRfcmF0ZTsKKworCXRtcCA9IHBtY19yZWFkKHBtYywgQVQ5MV9DS0dSX01DRlIpOworCWlmICghKHRtcCAmIEFUOTFfUE1DX01BSU5SRFkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKHRtcCAmIEFUOTFfUE1DX01BSU5GKSAqIFNMT1dfQ0xPQ0tfRlJFUSkgLyBNQUlORl9ESVY7Cit9CisKK3N0YXRpYyBpbnQgY2xrX3JtOTIwMF9tYWluX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IGNsa19ybTkyMDBfbWFpbiAqY2xrbWFpbiA9IHRvX2Nsa19ybTkyMDBfbWFpbihodyk7CisKKwlyZXR1cm4gY2xrX21haW5fcHJvYmVfZnJlcXVlbmN5KGNsa21haW4tPnBtYyk7Cit9CisKK3N0YXRpYyBpbnQgY2xrX3JtOTIwMF9tYWluX2lzX3ByZXBhcmVkKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBjbGtfcm05MjAwX21haW4gKmNsa21haW4gPSB0b19jbGtfcm05MjAwX21haW4oaHcpOworCisJcmV0dXJuICEhKHBtY19yZWFkKGNsa21haW4tPnBtYywgQVQ5MV9DS0dSX01DRlIpICYgQVQ5MV9QTUNfTUFJTlJEWSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19ybTkyMDBfbWFpbl9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBjbGtfcm05MjAwX21haW4gKmNsa21haW4gPSB0b19jbGtfcm05MjAwX21haW4oaHcpOworCisJcmV0dXJuIGNsa19tYWluX3JlY2FsY19yYXRlKGNsa21haW4tPnBtYywgcGFyZW50X3JhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgcm05MjAwX21haW5fb3BzID0geworCS5wcmVwYXJlID0gY2xrX3JtOTIwMF9tYWluX3ByZXBhcmUsCisJLmlzX3ByZXBhcmVkID0gY2xrX3JtOTIwMF9tYWluX2lzX3ByZXBhcmVkLAorCS5yZWNhbGNfcmF0ZSA9IGNsa19ybTkyMDBfbWFpbl9yZWNhbGNfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CithdDkxX2Nsa19yZWdpc3Rlcl9ybTkyMDBfbWFpbihzdHJ1Y3QgYXQ5MV9wbWMgKnBtYywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSkKK3sKKwlzdHJ1Y3QgY2xrX3JtOTIwMF9tYWluICpjbGttYWluOworCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKKworCWlmICghcG1jIHx8ICFuYW1lKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmICghcGFyZW50X25hbWUpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJY2xrbWFpbiA9IGt6YWxsb2Moc2l6ZW9mKCpjbGttYWluKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMzAsMTkgKzQ0MywxNTQgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpbml0Lm5hbWUgPSBuYW1lOwotCWluaXQub3BzID0gJm1haW5fb3BzOwotCWluaXQucGFyZW50X25hbWVzID0gcGFyZW50X25hbWUgPyAmcGFyZW50X25hbWUgOiBOVUxMOwotCWluaXQubnVtX3BhcmVudHMgPSBwYXJlbnRfbmFtZSA/IDEgOiAwOwotCWluaXQuZmxhZ3MgPSBwYXJlbnRfbmFtZSA/IDAgOiBDTEtfSVNfUk9PVDsKKwlpbml0Lm9wcyA9ICZybTkyMDBfbWFpbl9vcHM7CisJaW5pdC5wYXJlbnRfbmFtZXMgPSAmcGFyZW50X25hbWU7CisJaW5pdC5udW1fcGFyZW50cyA9IDE7CisJaW5pdC5mbGFncyA9IDA7CiAKIAljbGttYWluLT5ody5pbml0ID0gJmluaXQ7Ci0JY2xrbWFpbi0+cmF0ZSA9IHJhdGU7CisJY2xrbWFpbi0+cG1jID0gcG1jOworCisJY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZjbGttYWluLT5odyk7CisJaWYgKElTX0VSUihjbGspKQorCQlrZnJlZShjbGttYWluKTsKKworCXJldHVybiBjbGs7Cit9CisKK3ZvaWQgX19pbml0IG9mX2F0OTFybTkyMDBfY2xrX21haW5fc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJIHN0cnVjdCBhdDkxX3BtYyAqcG1jKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKKwljb25zdCBjaGFyICpuYW1lID0gbnAtPm5hbWU7CisKKwlwYXJlbnRfbmFtZSA9IG9mX2Nsa19nZXRfcGFyZW50X25hbWUobnAsIDApOworCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgJm5hbWUpOworCisJY2xrID0gYXQ5MV9jbGtfcmVnaXN0ZXJfcm05MjAwX21haW4ocG1jLCBuYW1lLCBwYXJlbnRfbmFtZSk7CisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm47CisKKwlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjbGtfc2FtOXg1X21haW5faXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbGtfc2FtOXg1X21haW4gKmNsa21haW4gPSBkZXZfaWQ7CisKKwl3YWtlX3VwKCZjbGttYWluLT53YWl0KTsKKwlkaXNhYmxlX2lycV9ub3N5bmMoY2xrbWFpbi0+aXJxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBjbGtfc2FtOXg1X21haW5fcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3NhbTl4NV9tYWluICpjbGttYWluID0gdG9fY2xrX3NhbTl4NV9tYWluKGh3KTsKKwlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyA9IGNsa21haW4tPnBtYzsKKworCXdoaWxlICghKHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1NFTFMpKSB7CisJCWVuYWJsZV9pcnEoY2xrbWFpbi0+aXJxKTsKKwkJd2FpdF9ldmVudChjbGttYWluLT53YWl0LAorCQkJICAgcG1jX3JlYWQocG1jLCBBVDkxX1BNQ19TUikgJiBBVDkxX1BNQ19NT1NDU0VMUyk7CisJfQorCisJcmV0dXJuIGNsa19tYWluX3Byb2JlX2ZyZXF1ZW5jeShwbWMpOworfQorCitzdGF0aWMgaW50IGNsa19zYW05eDVfbWFpbl9pc19wcmVwYXJlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3NhbTl4NV9tYWluICpjbGttYWluID0gdG9fY2xrX3NhbTl4NV9tYWluKGh3KTsKKworCXJldHVybiAhIShwbWNfcmVhZChjbGttYWluLT5wbWMsIEFUOTFfUE1DX1NSKSAmIEFUOTFfUE1DX01PU0NTRUxTKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3NhbTl4NV9tYWluX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGNsa19zYW05eDVfbWFpbiAqY2xrbWFpbiA9IHRvX2Nsa19zYW05eDVfbWFpbihodyk7CisKKwlyZXR1cm4gY2xrX21haW5fcmVjYWxjX3JhdGUoY2xrbWFpbi0+cG1jLCBwYXJlbnRfcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2xrX3NhbTl4NV9tYWluX3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KQoreworCXN0cnVjdCBjbGtfc2FtOXg1X21haW4gKmNsa21haW4gPSB0b19jbGtfc2FtOXg1X21haW4oaHcpOworCXN0cnVjdCBhdDkxX3BtYyAqcG1jID0gY2xrbWFpbi0+cG1jOworCXUzMiB0bXA7CisKKwlpZiAoaW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRtcCA9IHBtY19yZWFkKHBtYywgQVQ5MV9DS0dSX01PUikgJiB+TU9SX0tFWV9NQVNLOworCisJaWYgKGluZGV4ICYmICEodG1wICYgQVQ5MV9QTUNfTU9TQ1NFTCkpCisJCXBtY193cml0ZShwbWMsIEFUOTFfQ0tHUl9NT1IsIHRtcCB8IEFUOTFfUE1DX01PU0NTRUwpOworCWVsc2UgaWYgKCFpbmRleCAmJiAodG1wICYgQVQ5MV9QTUNfTU9TQ1NFTCkpCisJCXBtY193cml0ZShwbWMsIEFUOTFfQ0tHUl9NT1IsIHRtcCAmIH5BVDkxX1BNQ19NT1NDU0VMKTsKKworCXdoaWxlICghKHBtY19yZWFkKHBtYywgQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTU9TQ1NFTFMpKSB7CisJCWVuYWJsZV9pcnEoY2xrbWFpbi0+aXJxKTsKKwkJd2FpdF9ldmVudChjbGttYWluLT53YWl0LAorCQkJICAgcG1jX3JlYWQocG1jLCBBVDkxX1BNQ19TUikgJiBBVDkxX1BNQ19NT1NDU0VMUyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBjbGtfc2FtOXg1X21haW5fZ2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3NhbTl4NV9tYWluICpjbGttYWluID0gdG9fY2xrX3NhbTl4NV9tYWluKGh3KTsKKworCXJldHVybiAhIShwbWNfcmVhZChjbGttYWluLT5wbWMsIEFUOTFfQ0tHUl9NT1IpICYgQVQ5MV9QTUNfTU9TQ0VOKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbTl4NV9tYWluX29wcyA9IHsKKwkucHJlcGFyZSA9IGNsa19zYW05eDVfbWFpbl9wcmVwYXJlLAorCS5pc19wcmVwYXJlZCA9IGNsa19zYW05eDVfbWFpbl9pc19wcmVwYXJlZCwKKwkucmVjYWxjX3JhdGUgPSBjbGtfc2FtOXg1X21haW5fcmVjYWxjX3JhdGUsCisJLnNldF9wYXJlbnQgPSBjbGtfc2FtOXg1X21haW5fc2V0X3BhcmVudCwKKwkuZ2V0X3BhcmVudCA9IGNsa19zYW05eDVfbWFpbl9nZXRfcGFyZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK2F0OTFfY2xrX3JlZ2lzdGVyX3NhbTl4NV9tYWluKHN0cnVjdCBhdDkxX3BtYyAqcG1jLAorCQkJICAgICAgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLAorCQkJICAgICAgaW50IG51bV9wYXJlbnRzKQoreworCWludCByZXQ7CisJc3RydWN0IGNsa19zYW05eDVfbWFpbiAqY2xrbWFpbjsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CisKKwlpZiAoIXBtYyB8fCAhaXJxIHx8ICFuYW1lKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmICghcGFyZW50X25hbWVzIHx8ICFudW1fcGFyZW50cykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljbGttYWluID0ga3phbGxvYyhzaXplb2YoKmNsa21haW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsa21haW4pCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5pdC5uYW1lID0gbmFtZTsKKwlpbml0Lm9wcyA9ICZzYW05eDVfbWFpbl9vcHM7CisJaW5pdC5wYXJlbnRfbmFtZXMgPSBwYXJlbnRfbmFtZXM7CisJaW5pdC5udW1fcGFyZW50cyA9IG51bV9wYXJlbnRzOworCWluaXQuZmxhZ3MgPSBDTEtfU0VUX1BBUkVOVF9HQVRFOworCisJY2xrbWFpbi0+aHcuaW5pdCA9ICZpbml0OwogCWNsa21haW4tPnBtYyA9IHBtYzsKIAljbGttYWluLT5pcnEgPSBpcnE7CisJY2xrbWFpbi0+cGFyZW50ID0gISEocG1jX3JlYWQoY2xrbWFpbi0+cG1jLCBBVDkxX0NLR1JfTU9SKSAmCisJCQkgICAgIEFUOTFfUE1DX01PU0NFTik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2xrbWFpbi0+d2FpdCk7CiAJaXJxX3NldF9zdGF0dXNfZmxhZ3MoY2xrbWFpbi0+aXJxLCBJUlFfTk9BVVRPRU4pOwotCXJldCA9IHJlcXVlc3RfaXJxKGNsa21haW4tPmlycSwgY2xrX21haW5faXJxX2hhbmRsZXIsCi0JCQkgIElSUUZfVFJJR0dFUl9ISUdILCAiY2xrLW1haW4iLCBjbGttYWluKTsKKwlyZXQgPSByZXF1ZXN0X2lycShjbGttYWluLT5pcnEsIGNsa19zYW05eDVfbWFpbl9pcnFfaGFuZGxlciwKKwkJCSAgSVJRRl9UUklHR0VSX0hJR0gsIG5hbWUsIGNsa21haW4pOwogCWlmIChyZXQpCiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKQEAgLTE1NSwzMyArNjAzLDM2IEBACiAJcmV0dXJuIGNsazsKIH0KIAotCi0KLXN0YXRpYyB2b2lkIF9faW5pdAotb2ZfYXQ5MV9jbGtfbWFpbl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgYXQ5MV9wbWMgKnBtYykKK3ZvaWQgX19pbml0IG9mX2F0OTFzYW05eDVfY2xrX21haW5fc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJIHN0cnVjdCBhdDkxX3BtYyAqcG1jKQogewogCXN0cnVjdCBjbGsgKmNsazsKKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZXNbMl07CisJaW50IG51bV9wYXJlbnRzOwogCXVuc2lnbmVkIGludCBpcnE7Ci0JY29uc3QgY2hhciAqcGFyZW50X25hbWU7CiAJY29uc3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOwotCXUzMiByYXRlID0gMDsKKwlpbnQgaTsKIAotCXBhcmVudF9uYW1lID0gb2ZfY2xrX2dldF9wYXJlbnRfbmFtZShucCwgMCk7CisJbnVtX3BhcmVudHMgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhucCwgImNsb2NrcyIsICIjY2xvY2stY2VsbHMiKTsKKwlpZiAobnVtX3BhcmVudHMgPD0gMCB8fCBudW1fcGFyZW50cyA+IDIpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50czsgKytpKSB7CisJCXBhcmVudF9uYW1lc1tpXSA9IG9mX2Nsa19nZXRfcGFyZW50X25hbWUobnAsIGkpOworCQlpZiAoIXBhcmVudF9uYW1lc1tpXSkKKwkJCXJldHVybjsKKwl9CisKIAlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImNsb2NrLW91dHB1dC1uYW1lcyIsICZuYW1lKTsKLQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZyYXRlKTsKKwogCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKIAlpZiAoIWlycSkKIAkJcmV0dXJuOwogCi0JY2xrID0gYXQ5MV9jbGtfcmVnaXN0ZXJfbWFpbihwbWMsIGlycSwgbmFtZSwgcGFyZW50X25hbWUsIHJhdGUpOworCWNsayA9IGF0OTFfY2xrX3JlZ2lzdGVyX3NhbTl4NV9tYWluKHBtYywgaXJxLCBuYW1lLCBwYXJlbnRfbmFtZXMsCisJCQkJCSAgICBudW1fcGFyZW50cyk7CiAJaWYgKElTX0VSUihjbGspKQogCQlyZXR1cm47CiAKIAlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7CiB9Ci0KLXZvaWQgX19pbml0IG9mX2F0OTFybTkyMDBfY2xrX21haW5fc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJIHN0cnVjdCBhdDkxX3BtYyAqcG1jKQotewotCW9mX2F0OTFfY2xrX21haW5fc2V0dXAobnAsIHBtYyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zbG93LmMgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zbG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMGM0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXNsb3cuYwpAQCAtMCwwICsxLDQ2NyBAQAorLyoKKyAqIGRyaXZlcnMvY2xrL2F0OTEvY2xrLXNsb3cuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQm9yaXMgQlJFWklMTE9OIDxiLmJyZXppbGxvbkBvdmVya2l6LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSAicG1jLmgiCisjaW5jbHVkZSAic2NrYy5oIgorCisjZGVmaW5lIFNMT1dfQ0xPQ0tfRlJFUQkJMzI3NjgKKyNkZWZpbmUgU0xPV0NLX1NXX0NZQ0xFUwk1CisjZGVmaW5lIFNMT1dDS19TV19USU1FX1VTRUMJKChTTE9XQ0tfU1dfQ1lDTEVTICogVVNFQ19QRVJfU0VDKSAvIFwKKwkJCQkgU0xPV19DTE9DS19GUkVRKQorCisjZGVmaW5lCUFUOTFfU0NLQ19DUgkJCTB4MDAKKyNkZWZpbmUJCUFUOTFfU0NLQ19SQ0VOCQkoMSA8PCAwKQorI2RlZmluZQkJQVQ5MV9TQ0tDX09TQzMyRU4JKDEgPDwgMSkKKyNkZWZpbmUJCUFUOTFfU0NLQ19PU0MzMkJZUAkoMSA8PCAyKQorI2RlZmluZQkJQVQ5MV9TQ0tDX09TQ1NFTAkoMSA8PCAzKQorCitzdHJ1Y3QgY2xrX3Nsb3dfb3NjIHsKKwlzdHJ1Y3QgY2xrX2h3IGh3OworCXZvaWQgX19pb21lbSAqc2NrY3I7CisJdW5zaWduZWQgbG9uZyBzdGFydHVwX3VzZWM7Cit9OworCisjZGVmaW5lIHRvX2Nsa19zbG93X29zYyhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX3Nsb3dfb3NjLCBodykKKworc3RydWN0IGNsa19zbG93X3JjX29zYyB7CisJc3RydWN0IGNsa19odyBodzsKKwl2b2lkIF9faW9tZW0gKnNja2NyOworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXVuc2lnbmVkIGxvbmcgYWNjdXJhY3k7CisJdW5zaWduZWQgbG9uZyBzdGFydHVwX3VzZWM7Cit9OworCisjZGVmaW5lIHRvX2Nsa19zbG93X3JjX29zYyhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX3Nsb3dfcmNfb3NjLCBodykKKworc3RydWN0IGNsa19zYW05MjYwX3Nsb3cgeworCXN0cnVjdCBjbGtfaHcgaHc7CisJc3RydWN0IGF0OTFfcG1jICpwbWM7Cit9OworCisjZGVmaW5lIHRvX2Nsa19zYW05MjYwX3Nsb3coaHcpIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGNsa19zYW05MjYwX3Nsb3csIGh3KQorCitzdHJ1Y3QgY2xrX3NhbTl4NV9zbG93IHsKKwlzdHJ1Y3QgY2xrX2h3IGh3OworCXZvaWQgX19pb21lbSAqc2NrY3I7CisJdTggcGFyZW50OworfTsKKworI2RlZmluZSB0b19jbGtfc2FtOXg1X3Nsb3coaHcpIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGNsa19zYW05eDVfc2xvdywgaHcpCisKKworc3RhdGljIGludCBjbGtfc2xvd19vc2NfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3Nsb3dfb3NjICpvc2MgPSB0b19jbGtfc2xvd19vc2MoaHcpOworCXZvaWQgX19pb21lbSAqc2NrY3IgPSBvc2MtPnNja2NyOworCXUzMiB0bXAgPSByZWFkbChzY2tjcik7CisKKwlpZiAodG1wICYgQVQ5MV9TQ0tDX09TQzMyQllQKQorCQlyZXR1cm4gMDsKKworCXdyaXRlbCh0bXAgfCBBVDkxX1NDS0NfT1NDMzJFTiwgc2NrY3IpOworCisJdXNsZWVwX3JhbmdlKG9zYy0+c3RhcnR1cF91c2VjLCBvc2MtPnN0YXJ0dXBfdXNlYyArIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19zbG93X29zY191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IGNsa19zbG93X29zYyAqb3NjID0gdG9fY2xrX3Nsb3dfb3NjKGh3KTsKKwl2b2lkIF9faW9tZW0gKnNja2NyID0gb3NjLT5zY2tjcjsKKwl1MzIgdG1wID0gcmVhZGwoc2NrY3IpOworCisJaWYgKHRtcCAmIEFUOTFfU0NLQ19PU0MzMkJZUCkKKwkJcmV0dXJuOworCisJd3JpdGVsKHRtcCAmIH5BVDkxX1NDS0NfT1NDMzJFTiwgc2NrY3IpOworfQorCitzdGF0aWMgaW50IGNsa19zbG93X29zY19pc19wcmVwYXJlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3Nsb3dfb3NjICpvc2MgPSB0b19jbGtfc2xvd19vc2MoaHcpOworCXZvaWQgX19pb21lbSAqc2NrY3IgPSBvc2MtPnNja2NyOworCXUzMiB0bXAgPSByZWFkbChzY2tjcik7CisKKwlpZiAodG1wICYgQVQ5MV9TQ0tDX09TQzMyQllQKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAhISh0bXAgJiBBVDkxX1NDS0NfT1NDMzJFTik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzbG93X29zY19vcHMgPSB7CisJLnByZXBhcmUgPSBjbGtfc2xvd19vc2NfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gY2xrX3Nsb3dfb3NjX3VucHJlcGFyZSwKKwkuaXNfcHJlcGFyZWQgPSBjbGtfc2xvd19vc2NfaXNfcHJlcGFyZWQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqIF9faW5pdAorYXQ5MV9jbGtfcmVnaXN0ZXJfc2xvd19vc2Modm9pZCBfX2lvbWVtICpzY2tjciwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnR1cCwKKwkJCSAgIGJvb2wgYnlwYXNzKQoreworCXN0cnVjdCBjbGtfc2xvd19vc2MgKm9zYzsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOworCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CisKKwlpZiAoIXNja2NyIHx8ICFuYW1lIHx8ICFwYXJlbnRfbmFtZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlvc2MgPSBremFsbG9jKHNpemVvZigqb3NjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvc2MpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5pdC5uYW1lID0gbmFtZTsKKwlpbml0Lm9wcyA9ICZzbG93X29zY19vcHM7CisJaW5pdC5wYXJlbnRfbmFtZXMgPSAmcGFyZW50X25hbWU7CisJaW5pdC5udW1fcGFyZW50cyA9IDE7CisJaW5pdC5mbGFncyA9IENMS19JR05PUkVfVU5VU0VEOworCisJb3NjLT5ody5pbml0ID0gJmluaXQ7CisJb3NjLT5zY2tjciA9IHNja2NyOworCW9zYy0+c3RhcnR1cF91c2VjID0gc3RhcnR1cDsKKworCWlmIChieXBhc3MpCisJCXdyaXRlbCgocmVhZGwoc2NrY3IpICYgfkFUOTFfU0NLQ19PU0MzMkVOKSB8IEFUOTFfU0NLQ19PU0MzMkJZUCwKKwkJICAgICAgIHNja2NyKTsKKworCWNsayA9IGNsa19yZWdpc3RlcihOVUxMLCAmb3NjLT5odyk7CisJaWYgKElTX0VSUihjbGspKQorCQlrZnJlZShvc2MpOworCisJcmV0dXJuIGNsazsKK30KKwordm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTl4NV9jbGtfc2xvd19vc2Nfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJICAgICB2b2lkIF9faW9tZW0gKnNja2NyKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKKwljb25zdCBjaGFyICpuYW1lID0gbnAtPm5hbWU7CisJdTMyIHN0YXJ0dXA7CisJYm9vbCBieXBhc3M7CisKKwlwYXJlbnRfbmFtZSA9IG9mX2Nsa19nZXRfcGFyZW50X25hbWUobnAsIDApOworCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgJm5hbWUpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYXRtZWwsc3RhcnR1cC10aW1lLXVzZWMiLCAmc3RhcnR1cCk7CisJYnlwYXNzID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiYXRtZWwsb3NjLWJ5cGFzcyIpOworCisJY2xrID0gYXQ5MV9jbGtfcmVnaXN0ZXJfc2xvd19vc2Moc2NrY3IsIG5hbWUsIHBhcmVudF9uYW1lLCBzdGFydHVwLAorCQkJCQkgYnlwYXNzKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybjsKKworCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgY2xrKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3Nsb3dfcmNfb3NjX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGNsa19zbG93X3JjX29zYyAqb3NjID0gdG9fY2xrX3Nsb3dfcmNfb3NjKGh3KTsKKworCXJldHVybiBvc2MtPmZyZXF1ZW5jeTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3Nsb3dfcmNfb3NjX3JlY2FsY19hY2N1cmFjeShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfYWNjKQoreworCXN0cnVjdCBjbGtfc2xvd19yY19vc2MgKm9zYyA9IHRvX2Nsa19zbG93X3JjX29zYyhodyk7CisKKwlyZXR1cm4gb3NjLT5hY2N1cmFjeTsKK30KKworc3RhdGljIGludCBjbGtfc2xvd19yY19vc2NfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3Nsb3dfcmNfb3NjICpvc2MgPSB0b19jbGtfc2xvd19yY19vc2MoaHcpOworCXZvaWQgX19pb21lbSAqc2NrY3IgPSBvc2MtPnNja2NyOworCisJd3JpdGVsKHJlYWRsKHNja2NyKSB8IEFUOTFfU0NLQ19SQ0VOLCBzY2tjcik7CisKKwl1c2xlZXBfcmFuZ2Uob3NjLT5zdGFydHVwX3VzZWMsIG9zYy0+c3RhcnR1cF91c2VjICsgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX3Nsb3dfcmNfb3NjX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3Nsb3dfcmNfb3NjICpvc2MgPSB0b19jbGtfc2xvd19yY19vc2MoaHcpOworCXZvaWQgX19pb21lbSAqc2NrY3IgPSBvc2MtPnNja2NyOworCisJd3JpdGVsKHJlYWRsKHNja2NyKSAmIH5BVDkxX1NDS0NfUkNFTiwgc2NrY3IpOworfQorCitzdGF0aWMgaW50IGNsa19zbG93X3JjX29zY19pc19wcmVwYXJlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3Nsb3dfcmNfb3NjICpvc2MgPSB0b19jbGtfc2xvd19yY19vc2MoaHcpOworCisJcmV0dXJuICEhKHJlYWRsKG9zYy0+c2NrY3IpICYgQVQ5MV9TQ0tDX1JDRU4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2xvd19yY19vc2Nfb3BzID0geworCS5wcmVwYXJlID0gY2xrX3Nsb3dfcmNfb3NjX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IGNsa19zbG93X3JjX29zY191bnByZXBhcmUsCisJLmlzX3ByZXBhcmVkID0gY2xrX3Nsb3dfcmNfb3NjX2lzX3ByZXBhcmVkLAorCS5yZWNhbGNfcmF0ZSA9IGNsa19zbG93X3JjX29zY19yZWNhbGNfcmF0ZSwKKwkucmVjYWxjX2FjY3VyYWN5ID0gY2xrX3Nsb3dfcmNfb3NjX3JlY2FsY19hY2N1cmFjeSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CithdDkxX2Nsa19yZWdpc3Rlcl9zbG93X3JjX29zYyh2b2lkIF9faW9tZW0gKnNja2NyLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY2N1cmFjeSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnR1cCkKK3sKKwlzdHJ1Y3QgY2xrX3Nsb3dfcmNfb3NjICpvc2M7CisJc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OworCisJaWYgKCFzY2tjciB8fCAhbmFtZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlvc2MgPSBremFsbG9jKHNpemVvZigqb3NjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvc2MpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5pdC5uYW1lID0gbmFtZTsKKwlpbml0Lm9wcyA9ICZzbG93X3JjX29zY19vcHM7CisJaW5pdC5wYXJlbnRfbmFtZXMgPSBOVUxMOworCWluaXQubnVtX3BhcmVudHMgPSAwOworCWluaXQuZmxhZ3MgPSBDTEtfSVNfUk9PVCB8IENMS19JR05PUkVfVU5VU0VEOworCisJb3NjLT5ody5pbml0ID0gJmluaXQ7CisJb3NjLT5zY2tjciA9IHNja2NyOworCW9zYy0+ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworCW9zYy0+YWNjdXJhY3kgPSBhY2N1cmFjeTsKKwlvc2MtPnN0YXJ0dXBfdXNlYyA9IHN0YXJ0dXA7CisKKwljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJm9zYy0+aHcpOworCWlmIChJU19FUlIoY2xrKSkKKwkJa2ZyZWUob3NjKTsKKworCXJldHVybiBjbGs7Cit9CisKK3ZvaWQgX19pbml0IG9mX2F0OTFzYW05eDVfY2xrX3Nsb3dfcmNfb3NjX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQl2b2lkIF9faW9tZW0gKnNja2NyKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwl1MzIgZnJlcXVlbmN5ID0gMDsKKwl1MzIgYWNjdXJhY3kgPSAwOworCXUzMiBzdGFydHVwID0gMDsKKwljb25zdCBjaGFyICpuYW1lID0gbnAtPm5hbWU7CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImNsb2NrLW91dHB1dC1uYW1lcyIsICZuYW1lKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZmcmVxdWVuY3kpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiY2xvY2stYWNjdXJhY3kiLCAmYWNjdXJhY3kpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYXRtZWwsc3RhcnR1cC10aW1lLXVzZWMiLCAmc3RhcnR1cCk7CisKKwljbGsgPSBhdDkxX2Nsa19yZWdpc3Rlcl9zbG93X3JjX29zYyhzY2tjciwgbmFtZSwgZnJlcXVlbmN5LCBhY2N1cmFjeSwKKwkJCQkJICAgIHN0YXJ0dXApOworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuOworCisJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBjbGspOworfQorCitzdGF0aWMgaW50IGNsa19zYW05eDVfc2xvd19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgY2xrX3NhbTl4NV9zbG93ICpzbG93Y2sgPSB0b19jbGtfc2FtOXg1X3Nsb3coaHcpOworCXZvaWQgX19pb21lbSAqc2NrY3IgPSBzbG93Y2stPnNja2NyOworCXUzMiB0bXA7CisKKwlpZiAoaW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRtcCA9IHJlYWRsKHNja2NyKTsKKworCWlmICgoIWluZGV4ICYmICEodG1wICYgQVQ5MV9TQ0tDX09TQ1NFTCkpIHx8CisJICAgIChpbmRleCAmJiAodG1wICYgQVQ5MV9TQ0tDX09TQ1NFTCkpKQorCQlyZXR1cm4gMDsKKworCWlmIChpbmRleCkKKwkJdG1wIHw9IEFUOTFfU0NLQ19PU0NTRUw7CisJZWxzZQorCQl0bXAgJj0gfkFUOTFfU0NLQ19PU0NTRUw7CisKKwl3cml0ZWwodG1wLCBzY2tjcik7CisKKwl1c2xlZXBfcmFuZ2UoU0xPV0NLX1NXX1RJTUVfVVNFQywgU0xPV0NLX1NXX1RJTUVfVVNFQyArIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBjbGtfc2FtOXg1X3Nsb3dfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgY2xrX3NhbTl4NV9zbG93ICpzbG93Y2sgPSB0b19jbGtfc2FtOXg1X3Nsb3coaHcpOworCisJcmV0dXJuICEhKHJlYWRsKHNsb3djay0+c2NrY3IpICYgQVQ5MV9TQ0tDX09TQ1NFTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzYW05eDVfc2xvd19vcHMgPSB7CisJLnNldF9wYXJlbnQgPSBjbGtfc2FtOXg1X3Nsb3dfc2V0X3BhcmVudCwKKwkuZ2V0X3BhcmVudCA9IGNsa19zYW05eDVfc2xvd19nZXRfcGFyZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQKK2F0OTFfY2xrX3JlZ2lzdGVyX3NhbTl4NV9zbG93KHZvaWQgX19pb21lbSAqc2NrY3IsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqKnBhcmVudF9uYW1lcywKKwkJCSAgICAgIGludCBudW1fcGFyZW50cykKK3sKKwlzdHJ1Y3QgY2xrX3NhbTl4NV9zbG93ICpzbG93Y2s7CisJc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OworCisJaWYgKCFzY2tjciB8fCAhbmFtZSB8fCAhcGFyZW50X25hbWVzIHx8ICFudW1fcGFyZW50cykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlzbG93Y2sgPSBremFsbG9jKHNpemVvZigqc2xvd2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG93Y2spCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5pdC5uYW1lID0gbmFtZTsKKwlpbml0Lm9wcyA9ICZzYW05eDVfc2xvd19vcHM7CisJaW5pdC5wYXJlbnRfbmFtZXMgPSBwYXJlbnRfbmFtZXM7CisJaW5pdC5udW1fcGFyZW50cyA9IG51bV9wYXJlbnRzOworCWluaXQuZmxhZ3MgPSAwOworCisJc2xvd2NrLT5ody5pbml0ID0gJmluaXQ7CisJc2xvd2NrLT5zY2tjciA9IHNja2NyOworCXNsb3djay0+cGFyZW50ID0gISEocmVhZGwoc2NrY3IpICYgQVQ5MV9TQ0tDX09TQ1NFTCk7CisKKwljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJnNsb3djay0+aHcpOworCWlmIChJU19FUlIoY2xrKSkKKwkJa2ZyZWUoc2xvd2NrKTsKKworCXJldHVybiBjbGs7Cit9CisKK3ZvaWQgX19pbml0IG9mX2F0OTFzYW05eDVfY2xrX3Nsb3dfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJIHZvaWQgX19pb21lbSAqc2NrY3IpCit7CisJc3RydWN0IGNsayAqY2xrOworCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lc1syXTsKKwlpbnQgbnVtX3BhcmVudHM7CisJY29uc3QgY2hhciAqbmFtZSA9IG5wLT5uYW1lOworCWludCBpOworCisJbnVtX3BhcmVudHMgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhucCwgImNsb2NrcyIsICIjY2xvY2stY2VsbHMiKTsKKwlpZiAobnVtX3BhcmVudHMgPD0gMCB8fCBudW1fcGFyZW50cyA+IDIpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50czsgKytpKSB7CisJCXBhcmVudF9uYW1lc1tpXSA9IG9mX2Nsa19nZXRfcGFyZW50X25hbWUobnAsIGkpOworCQlpZiAoIXBhcmVudF9uYW1lc1tpXSkKKwkJCXJldHVybjsKKwl9CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImNsb2NrLW91dHB1dC1uYW1lcyIsICZuYW1lKTsKKworCWNsayA9IGF0OTFfY2xrX3JlZ2lzdGVyX3NhbTl4NV9zbG93KHNja2NyLCBuYW1lLCBwYXJlbnRfbmFtZXMsCisJCQkJCSAgICBudW1fcGFyZW50cyk7CisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm47CisKKwlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7Cit9CisKK3N0YXRpYyB1OCBjbGtfc2FtOTI2MF9zbG93X2dldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IGNsa19zYW05MjYwX3Nsb3cgKnNsb3djayA9IHRvX2Nsa19zYW05MjYwX3Nsb3coaHcpOworCisJcmV0dXJuICEhKHBtY19yZWFkKHNsb3djay0+cG1jLCBBVDkxX1BNQ19TUikgJiBBVDkxX1BNQ19PU0NTRUwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2FtOTI2MF9zbG93X29wcyA9IHsKKwkuZ2V0X3BhcmVudCA9IGNsa19zYW05MjYwX3Nsb3dfZ2V0X3BhcmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogX19pbml0CithdDkxX2Nsa19yZWdpc3Rlcl9zYW05MjYwX3Nsb3coc3RydWN0IGF0OTFfcG1jICpwbWMsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLAorCQkJICAgICAgIGludCBudW1fcGFyZW50cykKK3sKKwlzdHJ1Y3QgY2xrX3NhbTkyNjBfc2xvdyAqc2xvd2NrOworCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKKworCWlmICghcG1jIHx8ICFuYW1lKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmICghcGFyZW50X25hbWVzIHx8ICFudW1fcGFyZW50cykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlzbG93Y2sgPSBremFsbG9jKHNpemVvZigqc2xvd2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG93Y2spCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5pdC5uYW1lID0gbmFtZTsKKwlpbml0Lm9wcyA9ICZzYW05MjYwX3Nsb3dfb3BzOworCWluaXQucGFyZW50X25hbWVzID0gcGFyZW50X25hbWVzOworCWluaXQubnVtX3BhcmVudHMgPSBudW1fcGFyZW50czsKKwlpbml0LmZsYWdzID0gMDsKKworCXNsb3djay0+aHcuaW5pdCA9ICZpbml0OworCXNsb3djay0+cG1jID0gcG1jOworCisJY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZzbG93Y2stPmh3KTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCWtmcmVlKHNsb3djayk7CisKKwlyZXR1cm4gY2xrOworfQorCit2b2lkIF9faW5pdCBvZl9hdDkxc2FtOTI2MF9jbGtfc2xvd19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgIHN0cnVjdCBhdDkxX3BtYyAqcG1jKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZXNbMl07CisJaW50IG51bV9wYXJlbnRzOworCWNvbnN0IGNoYXIgKm5hbWUgPSBucC0+bmFtZTsKKwlpbnQgaTsKKworCW51bV9wYXJlbnRzID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2FyZ3MobnAsICJjbG9ja3MiLCAiI2Nsb2NrLWNlbGxzIik7CisJaWYgKG51bV9wYXJlbnRzIDw9IDAgfHwgbnVtX3BhcmVudHMgPiAxKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudHM7ICsraSkgeworCQlwYXJlbnRfbmFtZXNbaV0gPSBvZl9jbGtfZ2V0X3BhcmVudF9uYW1lKG5wLCBpKTsKKwkJaWYgKCFwYXJlbnRfbmFtZXNbaV0pCisJCQlyZXR1cm47CisJfQorCisJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJjbG9jay1vdXRwdXQtbmFtZXMiLCAmbmFtZSk7CisKKwljbGsgPSBhdDkxX2Nsa19yZWdpc3Rlcl9zYW05MjYwX3Nsb3cocG1jLCBuYW1lLCBwYXJlbnRfbmFtZXMsCisJCQkJCSAgICAgbnVtX3BhcmVudHMpOworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuOworCisJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBjbGspOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXQ5MS9wbWMuYyBiL2RyaXZlcnMvY2xrL2F0OTEvcG1jLmMKaW5kZXggNmE2MTQ3Ny4uNTI0MTk2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9wbWMuYworKysgYi9kcml2ZXJzL2Nsay9hdDkxL3BtYy5jCkBAIC0yMjksMTEgKzIyOSwyOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwbWNfY2xrX2lkc1tdIF9faW5pdGNvbnN0ID0geworCS8qIFNsb3cgb3NjaWxsYXRvciAqLworCXsKKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAtY2xrLXNsb3ciLAorCQkuZGF0YSA9IG9mX2F0OTFzYW05MjYwX2Nsa19zbG93X3NldHVwLAorCX0sCiAJLyogTWFpbiBjbG9jayAqLwogCXsKKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1jbGstbWFpbi1vc2MiLAorCQkuZGF0YSA9IG9mX2F0OTFybTkyMDBfY2xrX21haW5fb3NjX3NldHVwLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1tYWluLXJjLW9zYyIsCisJCS5kYXRhID0gb2ZfYXQ5MXNhbTl4NV9jbGtfbWFpbl9yY19vc2Nfc2V0dXAsCisJfSwKKwl7CiAJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtY2xrLW1haW4iLAogCQkuZGF0YSA9IG9mX2F0OTFybTkyMDBfY2xrX21haW5fc2V0dXAsCiAJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2xrLW1haW4iLAorCQkuZGF0YSA9IG9mX2F0OTFzYW05eDVfY2xrX21haW5fc2V0dXAsCisJfSwKIAkvKiBQTEwgY2xvY2tzICovCiAJewogCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWNsay1wbGwiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXQ5MS9wbWMuaCBiL2RyaXZlcnMvY2xrL2F0OTEvcG1jLmgKaW5kZXggNDQxMzUwOS4uNmM3NjI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9wbWMuaAorKysgYi9kcml2ZXJzL2Nsay9hdDkxL3BtYy5oCkBAIC01OCw4ICs1OCwxNyBAQAogaW50IG9mX2F0OTFfZ2V0X2Nsa19yYW5nZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSwKIAkJCSAgc3RydWN0IGNsa19yYW5nZSAqcmFuZ2UpOwogCitleHRlcm4gdm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTkyNjBfY2xrX3Nsb3dfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCSBzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBvZl9hdDkxcm05MjAwX2Nsa19tYWluX29zY19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJICAgIHN0cnVjdCBhdDkxX3BtYyAqcG1jKTsKK2V4dGVybiB2b2lkIF9faW5pdCBvZl9hdDkxc2FtOXg1X2Nsa19tYWluX3JjX29zY19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJICAgICAgIHN0cnVjdCBhdDkxX3BtYyAqcG1jKTsKIGV4dGVybiB2b2lkIF9faW5pdCBvZl9hdDkxcm05MjAwX2Nsa19tYWluX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCQlzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyk7CitleHRlcm4gdm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTl4NV9jbGtfbWFpbl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJc3RydWN0IGF0OTFfcG1jICpwbWMpOwogCiBleHRlcm4gdm9pZCBfX2luaXQgb2ZfYXQ5MXJtOTIwMF9jbGtfcGxsX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCSAgICAgICBzdHJ1Y3QgYXQ5MV9wbWMgKnBtYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL3Nja2MuYyBiL2RyaXZlcnMvY2xrL2F0OTEvc2NrYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODRkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsay9hdDkxL3Nja2MuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogZHJpdmVycy9jbGsvYXQ5MS9zY2tjLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIEJvcmlzIEJSRVpJTExPTiA8Yi5icmV6aWxsb25Ab3Zlcmtpei5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJzY2tjLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNja2NfY2xrX2lkc1tdIF9faW5pdGNvbnN0ID0geworCS8qIFNsb3cgY2xvY2sgKi8KKwl7CisJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2xrLXNsb3ctb3NjIiwKKwkJLmRhdGEgPSBvZl9hdDkxc2FtOXg1X2Nsa19zbG93X29zY19zZXR1cCwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1jbGstc2xvdy1yYy1vc2MiLAorCQkuZGF0YSA9IG9mX2F0OTFzYW05eDVfY2xrX3Nsb3dfcmNfb3NjX3NldHVwLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNsay1zbG93IiwKKwkJLmRhdGEgPSBvZl9hdDkxc2FtOXg1X2Nsa19zbG93X3NldHVwLAorCX0sCisJeyAvKnNlbnRpbmVsKi8gfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9mX2F0OTFzYW05eDVfc2NrY19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGRucDsKKwl2b2lkICgqY2xrX3NldHVwKShzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgdm9pZCBfX2lvbWVtICopOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmNsa19pZDsKKwl2b2lkIF9faW9tZW0gKnJlZ2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisKKwlpZiAoIXJlZ2Jhc2UpCisJCXJldHVybjsKKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkbnApIHsKKwkJY2xrX2lkID0gb2ZfbWF0Y2hfbm9kZShzY2tjX2Nsa19pZHMsIGNoaWxkbnApOworCQlpZiAoIWNsa19pZCkKKwkJCWNvbnRpbnVlOworCQljbGtfc2V0dXAgPSBjbGtfaWQtPmRhdGE7CisJCWNsa19zZXR1cChjaGlsZG5wLCByZWdiYXNlKTsKKwl9Cit9CitDTEtfT0ZfREVDTEFSRShhdDkxc2FtOXg1X2Nsa19zY2tjLCAiYXRtZWwsYXQ5MXNhbTl4NS1zY2tjIiwKKwkgICAgICAgb2ZfYXQ5MXNhbTl4NV9zY2tjX3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2F0OTEvc2NrYy5oIGIvZHJpdmVycy9jbGsvYXQ5MS9zY2tjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2ZmNmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvc2NrYy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBkcml2ZXJzL2Nsay9hdDkxL3Nja2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQm9yaXMgQlJFWklMTE9OIDxiLmJyZXppbGxvbkBvdmVya2l6LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19BVDkxX1NDS0NfSF8KKyNkZWZpbmUgX19BVDkxX1NDS0NfSF8KKworZXh0ZXJuIHZvaWQgX19pbml0IG9mX2F0OTFzYW05eDVfY2xrX3Nsb3dfb3NjX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQkgICAgdm9pZCBfX2lvbWVtICpzY2tjcik7CitleHRlcm4gdm9pZCBfX2luaXQgb2ZfYXQ5MXNhbTl4NV9jbGtfc2xvd19yY19vc2Nfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCSAgICAgICB2b2lkIF9faW9tZW0gKnNja2NyKTsKK2V4dGVybiB2b2lkIF9faW5pdCBvZl9hdDkxc2FtOXg1X2Nsa19zbG93X3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQl2b2lkIF9faW9tZW0gKnNja2NyKTsKKworI2VuZGlmIC8qIF9fQVQ5MV9TQ0tDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL0tjb25maWcgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxOTZlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvS2NvbmZpZwpAQCAtMCwwICsxLDI2IEBACitjb25maWcgQ09NTU9OX0NMS19TQU1TVU5HCisJYm9vbAorCXNlbGVjdCBDT01NT05fQ0xLCisKK2NvbmZpZyBTM0MyNDEwX0NPTU1PTl9DTEsKKwlib29sCisJc2VsZWN0IENPTU1PTl9DTEtfU0FNU1VORworCWhlbHAKKwkgIEJ1aWxkIHRoZSBzM2MyNDEwIGNsb2NrIGRyaXZlciBiYXNlZCBvbiB0aGUgY29tbW9uIGNsb2NrIGZyYW1ld29yay4KKworY29uZmlnIFMzQzI0MTBfQ09NTU9OX0RDTEsKKwlib29sCisJc2VsZWN0IENPTU1PTl9DTEtfU0FNU1VORworCXNlbGVjdCBSRUdNQVBfTU1JTworCWhlbHAKKwkgIFRlbXBvcmFyeSBzeW1ib2wgdG8gYnVpbGQgdGhlIGRjbGsgZHJpdmVyIGJhc2VkIG9uIHRoZSBjb21tb24gY2xvY2sKKwkgIGZyYW1ld29yay4KKworY29uZmlnIFMzQzI0MTJfQ09NTU9OX0NMSworCWJvb2wKKwlzZWxlY3QgQ09NTU9OX0NMS19TQU1TVU5HCisKK2NvbmZpZyBTM0MyNDQzX0NPTU1PTl9DTEsKKwlib29sCisJc2VsZWN0IENPTU1PTl9DTEtfU0FNU1VORworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL01ha2VmaWxlIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9NYWtlZmlsZQppbmRleCA4ZWI0Nzk5Li42OWU4MTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvTWFrZWZpbGUKQEAgLTMsOSArMywxNiBAQAogIwogCiBvYmotJChDT05GSUdfQ09NTU9OX0NMSykJKz0gY2xrLm8gY2xrLXBsbC5vCitvYmotJChDT05GSUdfU09DX0VYWU5PUzMyNTApCSs9IGNsay1leHlub3MzMjUwLm8KIG9iai0kKENPTkZJR19BUkNIX0VYWU5PUzQpCSs9IGNsay1leHlub3M0Lm8KIG9iai0kKENPTkZJR19TT0NfRVhZTk9TNTI1MCkJKz0gY2xrLWV4eW5vczUyNTAubworb2JqLSQoQ09ORklHX1NPQ19FWFlOT1M1MjYwKQkrPSBjbGstZXh5bm9zNTI2MC5vCitvYmotJChDT05GSUdfU09DX0VYWU5PUzU0MTApCSs9IGNsay1leHlub3M1NDEwLm8KIG9iai0kKENPTkZJR19TT0NfRVhZTk9TNTQyMCkJKz0gY2xrLWV4eW5vczU0MjAubwogb2JqLSQoQ09ORklHX1NPQ19FWFlOT1M1NDQwKQkrPSBjbGstZXh5bm9zNTQ0MC5vCiBvYmotJChDT05GSUdfQVJDSF9FWFlOT1MpCSs9IGNsay1leHlub3MtYXVkc3Mubworb2JqLSQoQ09ORklHX1MzQzI0MTBfQ09NTU9OX0NMSykrPSBjbGstczNjMjQxMC5vCitvYmotJChDT05GSUdfUzNDMjQxMF9DT01NT05fRENMSykrPSBjbGstczNjMjQxMC1kY2xrLm8KK29iai0kKENPTkZJR19TM0MyNDEyX0NPTU1PTl9DTEspKz0gY2xrLXMzYzI0MTIubworb2JqLSQoQ09ORklHX1MzQzI0NDNfQ09NTU9OX0NMSykrPSBjbGstczNjMjQ0My5vCiBvYmotJChDT05GSUdfQVJDSF9TM0M2NFhYKQkrPSBjbGstczNjNjR4eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MzMjUwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MzMjUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExN2JkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczMyNTAuYwpAQCAtMCwwICsxLDc4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29tbW9uIENsb2NrIEZyYW1ld29yayBzdXBwb3J0IGZvciBFeHlub3MzMjUwIFNvQy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vczMyNTAuaD4KKworI2luY2x1ZGUgImNsay5oIgorI2luY2x1ZGUgImNsay1wbGwuaCIKKworI2RlZmluZSBTUkNfTEVGVEJVUwkJMHg0MjAwCisjZGVmaW5lIERJVl9MRUZUQlVTCQkweDQ1MDAKKyNkZWZpbmUgR0FURV9JUF9MRUZUQlVTCQkweDQ4MDAKKyNkZWZpbmUgU1JDX1JJR0hUQlVTCQkweDgyMDAKKyNkZWZpbmUgRElWX1JJR0hUQlVTCQkweDg1MDAKKyNkZWZpbmUgR0FURV9JUF9SSUdIVEJVUwkweDg4MDAKKyNkZWZpbmUgR0FURV9JUF9QRVJJUgkJMHg4OTYwCisjZGVmaW5lIE1QTExfTE9DSwkJMHhjMDEwCisjZGVmaW5lIE1QTExfQ09OMAkJMHhjMTEwCisjZGVmaW5lIFZQTExfTE9DSwkJMHhjMDIwCisjZGVmaW5lIFZQTExfQ09OMAkJMHhjMTIwCisjZGVmaW5lIFVQTExfTE9DSwkJMHhjMDMwCisjZGVmaW5lIFVQTExfQ09OMAkJMHhjMTMwCisjZGVmaW5lIFNSQ19UT1AwCQkweGMyMTAKKyNkZWZpbmUgU1JDX1RPUDEJCTB4YzIxNAorI2RlZmluZSBTUkNfQ0FNCQkJMHhjMjIwCisjZGVmaW5lIFNSQ19NRkMJCQkweGMyMjgKKyNkZWZpbmUgU1JDX0czRAkJCTB4YzIyYworI2RlZmluZSBTUkNfTENECQkJMHhjMjM0CisjZGVmaW5lIFNSQ19JU1AJCQkweGMyMzgKKyNkZWZpbmUgU1JDX0ZTWVMJCTB4YzI0MAorI2RlZmluZSBTUkNfUEVSSUwwCQkweGMyNTAKKyNkZWZpbmUgU1JDX1BFUklMMQkJMHhjMjU0CisjZGVmaW5lIFNSQ19NQVNLX1RPUAkJMHhjMzEwCisjZGVmaW5lIFNSQ19NQVNLX0NBTQkJMHhjMzIwCisjZGVmaW5lIFNSQ19NQVNLX0xDRAkJMHhjMzM0CisjZGVmaW5lIFNSQ19NQVNLX0lTUAkJMHhjMzM4CisjZGVmaW5lIFNSQ19NQVNLX0ZTWVMJCTB4YzM0MAorI2RlZmluZSBTUkNfTUFTS19QRVJJTDAJCTB4YzM1MAorI2RlZmluZSBTUkNfTUFTS19QRVJJTDEJCTB4YzM1NAorI2RlZmluZSBESVZfVE9QCQkJMHhjNTEwCisjZGVmaW5lIERJVl9DQU0JCQkweGM1MjAKKyNkZWZpbmUgRElWX01GQwkJCTB4YzUyOAorI2RlZmluZSBESVZfRzNECQkJMHhjNTJjCisjZGVmaW5lIERJVl9MQ0QJCQkweGM1MzQKKyNkZWZpbmUgRElWX0lTUAkJCTB4YzUzOAorI2RlZmluZSBESVZfRlNZUzAJCTB4YzU0MAorI2RlZmluZSBESVZfRlNZUzEJCTB4YzU0NAorI2RlZmluZSBESVZfRlNZUzIJCTB4YzU0OAorI2RlZmluZSBESVZfUEVSSUwwCQkweGM1NTAKKyNkZWZpbmUgRElWX1BFUklMMQkJMHhjNTU0CisjZGVmaW5lIERJVl9QRVJJTDMJCTB4YzU1YworI2RlZmluZSBESVZfUEVSSUw0CQkweGM1NjAKKyNkZWZpbmUgRElWX1BFUklMNQkJMHhjNTY0CisjZGVmaW5lIERJVl9DQU0xCQkweGM1NjgKKyNkZWZpbmUgQ0xLRElWMl9SQVRJTwkJMHhjNTgwCisjZGVmaW5lIEdBVEVfU0NMS19DQU0JCTB4YzgyMAorI2RlZmluZSBHQVRFX1NDTEtfTUZDCQkweGM4MjgKKyNkZWZpbmUgR0FURV9TQ0xLX0czRAkJMHhjODJjCisjZGVmaW5lIEdBVEVfU0NMS19MQ0QJCTB4YzgzNAorI2RlZmluZSBHQVRFX1NDTEtfSVNQX1RPUAkweGM4MzgKKyNkZWZpbmUgR0FURV9TQ0xLX0ZTWVMJCTB4Yzg0MAorI2RlZmluZSBHQVRFX1NDTEtfUEVSSUwJCTB4Yzg1MAorI2RlZmluZSBHQVRFX0lQX0NBTQkJMHhjOTIwCisjZGVmaW5lIEdBVEVfSVBfTUZDCQkweGM5MjgKKyNkZWZpbmUgR0FURV9JUF9HM0QJCTB4YzkyYworI2RlZmluZSBHQVRFX0lQX0xDRAkJMHhjOTM0CisjZGVmaW5lIEdBVEVfSVBfSVNQCQkweGM5MzgKKyNkZWZpbmUgR0FURV9JUF9GU1lTCQkweGM5NDAKKyNkZWZpbmUgR0FURV9JUF9QRVJJTAkJMHhjOTUwCisjZGVmaW5lIEdBVEVfQkxPQ0sJCTB4Yzk3MAorI2RlZmluZSBBUExMX0xPQ0sJCTB4MTQwMDAKKyNkZWZpbmUgQVBMTF9DT04wCQkweDE0MTAwCisjZGVmaW5lIFNSQ19DUFUJCQkweDE0MjAwCisjZGVmaW5lIERJVl9DUFUwCQkweDE0NTAwCisjZGVmaW5lIERJVl9DUFUxCQkweDE0NTA0CisKKy8qIGxpc3Qgb2YgUExMcyB0byBiZSByZWdpc3RlcmVkICovCitlbnVtIGV4eW5vczMyNTBfcGxscyB7CisJYXBsbCwgbXBsbCwgdnBsbCwgdXBsbCwKKwlucl9wbGxzCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKworLyoKKyAqIFN1cHBvcnQgZm9yIENNVSBzYXZlL3Jlc3RvcmUgYWNyb3NzIHN5c3RlbSBzdXNwZW5kcworICovCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfY2xrX3JlZ19kdW1wICpleHlub3MzMjUwX2Nsa19yZWdzOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHlub3MzMjUwX2NtdV9jbGtfcmVnc1tdIF9faW5pdGRhdGEgPSB7CisJU1JDX0xFRlRCVVMsCisJRElWX0xFRlRCVVMsCisJR0FURV9JUF9MRUZUQlVTLAorCVNSQ19SSUdIVEJVUywKKwlESVZfUklHSFRCVVMsCisJR0FURV9JUF9SSUdIVEJVUywKKwlHQVRFX0lQX1BFUklSLAorCU1QTExfTE9DSywKKwlNUExMX0NPTjAsCisJVlBMTF9MT0NLLAorCVZQTExfQ09OMCwKKwlVUExMX0xPQ0ssCisJVVBMTF9DT04wLAorCVNSQ19UT1AwLAorCVNSQ19UT1AxLAorCVNSQ19DQU0sCisJU1JDX01GQywKKwlTUkNfRzNELAorCVNSQ19MQ0QsCisJU1JDX0lTUCwKKwlTUkNfRlNZUywKKwlTUkNfUEVSSUwwLAorCVNSQ19QRVJJTDEsCisJU1JDX01BU0tfVE9QLAorCVNSQ19NQVNLX0NBTSwKKwlTUkNfTUFTS19MQ0QsCisJU1JDX01BU0tfSVNQLAorCVNSQ19NQVNLX0ZTWVMsCisJU1JDX01BU0tfUEVSSUwwLAorCVNSQ19NQVNLX1BFUklMMSwKKwlESVZfVE9QLAorCURJVl9DQU0sCisJRElWX01GQywKKwlESVZfRzNELAorCURJVl9MQ0QsCisJRElWX0lTUCwKKwlESVZfRlNZUzAsCisJRElWX0ZTWVMxLAorCURJVl9GU1lTMiwKKwlESVZfUEVSSUwwLAorCURJVl9QRVJJTDEsCisJRElWX1BFUklMMywKKwlESVZfUEVSSUw0LAorCURJVl9QRVJJTDUsCisJRElWX0NBTTEsCisJQ0xLRElWMl9SQVRJTywKKwlHQVRFX1NDTEtfQ0FNLAorCUdBVEVfU0NMS19NRkMsCisJR0FURV9TQ0xLX0czRCwKKwlHQVRFX1NDTEtfTENELAorCUdBVEVfU0NMS19JU1BfVE9QLAorCUdBVEVfU0NMS19GU1lTLAorCUdBVEVfU0NMS19QRVJJTCwKKwlHQVRFX0lQX0NBTSwKKwlHQVRFX0lQX01GQywKKwlHQVRFX0lQX0czRCwKKwlHQVRFX0lQX0xDRCwKKwlHQVRFX0lQX0lTUCwKKwlHQVRFX0lQX0ZTWVMsCisJR0FURV9JUF9QRVJJTCwKKwlHQVRFX0JMT0NLLAorCUFQTExfTE9DSywKKwlTUkNfQ1BVLAorCURJVl9DUFUwLAorCURJVl9DUFUxLAorfTsKKworc3RhdGljIGludCBleHlub3MzMjUwX2Nsa19zdXNwZW5kKHZvaWQpCit7CisJc2Ftc3VuZ19jbGtfc2F2ZShyZWdfYmFzZSwgZXh5bm9zMzI1MF9jbGtfcmVncywKKwkJCQlBUlJBWV9TSVpFKGV4eW5vczMyNTBfY211X2Nsa19yZWdzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczMyNTBfY2xrX3Jlc3VtZSh2b2lkKQoreworCXNhbXN1bmdfY2xrX3Jlc3RvcmUocmVnX2Jhc2UsIGV4eW5vczMyNTBfY2xrX3JlZ3MsCisJCQkJQVJSQVlfU0laRShleHlub3MzMjUwX2NtdV9jbGtfcmVncykpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vczMyNTBfY2xrX3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kID0gZXh5bm9zMzI1MF9jbGtfc3VzcGVuZCwKKwkucmVzdW1lID0gZXh5bm9zMzI1MF9jbGtfcmVzdW1lLAorfTsKKworc3RhdGljIHZvaWQgZXh5bm9zMzI1MF9jbGtfc2xlZXBfaW5pdCh2b2lkKQoreworCWV4eW5vczMyNTBfY2xrX3JlZ3MgPQorCQlzYW1zdW5nX2Nsa19hbGxvY19yZWdfZHVtcChleHlub3MzMjUwX2NtdV9jbGtfcmVncywKKwkJCQkJICAgQVJSQVlfU0laRShleHlub3MzMjUwX2NtdV9jbGtfcmVncykpOworCWlmICghZXh5bm9zMzI1MF9jbGtfcmVncykgeworCQlwcl93YXJuKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHNsZWVwIHNhdmUgZGF0YVxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmZXh5bm9zMzI1MF9jbGtfc3lzY29yZV9vcHMpOworCXJldHVybjsKK2VycjoKKwlrZnJlZShleHlub3MzMjUwX2Nsa19yZWdzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zMzI1MF9jbGtfc2xlZXBfaW5pdCh2b2lkKSB7IH0KKyNlbmRpZgorCisvKiBsaXN0IG9mIGFsbCBwYXJlbnQgY2xvY2sgbGlzdCAqLworUE5BTUUobW91dF92cGxsc3JjX3ApCQk9IHsgImZpbl9wbGwiLCB9OworCitQTkFNRShtb3V0X2FwbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X2FwbGwiLCB9OworUE5BTUUobW91dF9tcGxsX3ApCQk9IHsgImZpbl9wbGwiLCAiZm91dF9tcGxsIiwgfTsKK1BOQU1FKG1vdXRfdnBsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfdnBsbCIsIH07CitQTkFNRShtb3V0X3VwbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X3VwbGwiLCB9OworCitQTkFNRShtb3V0X21wbGxfdXNlcl9wKQkJPSB7ICJmaW5fcGxsIiwgImRpdl9tcGxsX3ByZSIsIH07CitQTkFNRShtb3V0X2VwbGxfdXNlcl9wKQkJPSB7ICJmaW5fcGxsIiwgIm1vdXRfZXBsbCIsIH07CitQTkFNRShtb3V0X2NvcmVfcCkJCT0geyAibW91dF9hcGxsIiwgIm1vdXRfbXBsbF91c2VyX2MiLCB9OworUE5BTUUobW91dF9ocG1fcCkJCT0geyAibW91dF9hcGxsIiwgIm1vdXRfbXBsbF91c2VyX2MiLCB9OworCitQTkFNRShtb3V0X2ViaV9wKQkJPSB7ICJkaXZfYWNsa18yMDAiLCAiZGl2X2FjbGtfMTYwIiwgfTsKK1BOQU1FKG1vdXRfZWJpXzFfcCkJCT0geyAibW91dF9lYmkiLCAibW91dF92cGxsIiwgfTsKKworUE5BTUUobW91dF9nZGxfcCkJCT0geyAibW91dF9tcGxsX3VzZXJfbCIsIH07CitQTkFNRShtb3V0X2dkcl9wKQkJPSB7ICJtb3V0X21wbGxfdXNlcl9yIiwgfTsKKworUE5BTUUobW91dF9hY2xrXzQwMF9tY3Vpc3Bfc3ViX3ApCisJCQkJPSB7ICJmaW5fcGxsIiwgImRpdl9hY2xrXzQwMF9tY3Vpc3AiLCB9OworUE5BTUUobW91dF9hY2xrXzI2Nl8wX3ApCT0geyAiZGl2X21wbGxfcHJlIiwgIm1vdXRfdnBsbCIsIH07CitQTkFNRShtb3V0X2FjbGtfMjY2XzFfcCkJPSB7ICJtb3V0X2VwbGxfdXNlciIsIH07CitQTkFNRShtb3V0X2FjbGtfMjY2X3ApCQk9IHsgIm1vdXRfYWNsa18yNjZfMCIsICJtb3V0X2FjbGtfMjY2XzEiLCB9OworUE5BTUUobW91dF9hY2xrXzI2Nl9zdWJfcCkJPSB7ICJmaW5fcGxsIiwgImRpdl9hY2xrXzI2NiIsIH07CisKK1BOQU1FKGdyb3VwX2Rpdl9tcGxsX3ByZV9wKQk9IHsgImRpdl9tcGxsX3ByZSIsIH07CitQTkFNRShncm91cF9lcGxsX3ZwbGxfcCkJPSB7ICJtb3V0X2VwbGxfdXNlciIsICJtb3V0X3ZwbGwiIH07CitQTkFNRShncm91cF9zY2xrX3ApCQk9IHsgInh4dGkiLCAieHVzYnh0aSIsCisJCQkJICAgICJub25lIiwgIm5vbmUiLAorCQkJCSAgICAibm9uZSIsICJub25lIiwgImRpdl9tcGxsX3ByZSIsCisJCQkJICAgICJtb3V0X2VwbGxfdXNlciIsICJtb3V0X3ZwbGwiLCB9OworUE5BTUUoZ3JvdXBfc2Nsa19hdWRpb19wKQk9IHsgImF1ZGlvY2RjbGsiLCAibm9uZSIsCisJCQkJICAgICJub25lIiwgIm5vbmUiLAorCQkJCSAgICAieHh0aSIsICJ4dXNieHRpIiwKKwkJCQkgICAgImRpdl9tcGxsX3ByZSIsICJtb3V0X2VwbGxfdXNlciIsCisJCQkJICAgICJtb3V0X3ZwbGwiLCB9OworUE5BTUUoZ3JvdXBfc2Nsa19jYW1fYmxrX3ApCT0geyAieHh0aSIsICJ4dXNieHRpIiwKKwkJCQkgICAgIm5vbmUiLCAibm9uZSIsICJub25lIiwKKwkJCQkgICAgIm5vbmUiLCAiZGl2X21wbGxfcHJlIiwKKwkJCQkgICAgIm1vdXRfZXBsbF91c2VyIiwgIm1vdXRfdnBsbCIsCisJCQkJICAgICJkaXZfY2FtX2Jsa18zMjAiLCB9OworUE5BTUUoZ3JvdXBfc2Nsa19maW1kMF9wKQk9IHsgInh4dGkiLCAieHVzYnh0aSIsCisJCQkJICAgICJtX2JpdGNsa2hzZGl2NF8ybCIsICJub25lIiwKKwkJCQkgICAgIm5vbmUiLCAibm9uZSIsICJkaXZfbXBsbF9wcmUiLAorCQkJCSAgICAibW91dF9lcGxsX3VzZXIiLCAibW91dF92cGxsIiwKKwkJCQkgICAgIm5vbmUiLCAibm9uZSIsICJub25lIiwKKwkJCQkgICAgImRpdl9sY2RfYmxrXzE0NSIsIH07CisKK1BOQU1FKG1vdXRfbWZjX3ApCQk9IHsgIm1vdXRfbWZjXzAiLCAibW91dF9tZmNfMSIgfTsKK1BOQU1FKG1vdXRfZzNkX3ApCQk9IHsgIm1vdXRfZzNkXzAiLCAibW91dF9nM2RfMSIgfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayBmaXhlZF9mYWN0b3JfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRkZBQ1RPUigwLCAic2Nsa19tcGxsXzE2MDAiLCAibW91dF9tcGxsIiwgMSwgMSwgMCksCisJRkZBQ1RPUigwLCAic2Nsa19tcGxsX21pZiIsICJtb3V0X21wbGwiLCAxLCAyLCAwKSwKKwlGRkFDVE9SKDAsICJzY2xrX2JwbGwiLCAiZm91dF9icGxsIiwgMSwgMiwgMCksCisJRkZBQ1RPUigwLCAiZGl2X2NhbV9ibGtfMzIwIiwgInNjbGtfbXBsbF8xNjAwIiwgMSwgNSwgMCksCisJRkZBQ1RPUigwLCAiZGl2X2xjZF9ibGtfMTQ1IiwgInNjbGtfbXBsbF8xNjAwIiwgMSwgMTEsIDApLAorCisJLyogSEFDSzogZmluX3BsbCBoYXJkY29kZWQgdG8geHVzYnh0aSB1bnRpbCBkZXRlY3Rpb24gaXMgaW1wbGVtZW50ZWQuICovCisJRkZBQ1RPUihDTEtfRklOX1BMTCwgImZpbl9wbGwiLCAieHVzYnh0aSIsIDEsIDEsIDApLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX211eF9jbG9jayBtdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJLyoKKwkgKiBOT1RFOiBGb2xsb3dpbmcgdGFibGUgaXMgc29ydGVkIGJ5IHJlZ2lzdGVyIGFkZHJlc3MgaW4gYXNjZW5kaW5nCisJICogb3JkZXIgYW5kIHRoZW4gYml0ZmllbGQgc2hpZnQgaW4gZGVzY2VuZGluZyBvcmRlciwgYXMgaXQgaXMgZG9uZQorCSAqIGluIHRoZSBVc2VyJ3MgTWFudWFsLiBXaGVuIGFkZGluZyBuZXcgZW50cmllcywgcGxlYXNlIG1ha2Ugc3VyZQorCSAqIHRoYXQgdGhlIG9yZGVyIGlzIHByZXNlcnZlZCwgdG8gYXZvaWQgbWVyZ2UgY29uZmxpY3RzIGFuZCBtYWtlCisJICogZnVydGhlciB3b3JrIHdpdGggZGVmaW5lZCBkYXRhIGVhc2llci4KKwkgKi8KKworCS8qIFNSQ19MRUZUQlVTICovCisJTVVYKENMS19NT1VUX01QTExfVVNFUl9MLCAibW91dF9tcGxsX3VzZXJfbCIsIG1vdXRfbXBsbF91c2VyX3AsCisJICAgIFNSQ19MRUZUQlVTLCA0LCAxKSwKKwlNVVgoQ0xLX01PVVRfR0RMLCAibW91dF9nZGwiLCBtb3V0X2dkbF9wLCBTUkNfTEVGVEJVUywgMCwgMSksCisKKwkvKiBTUkNfUklHSFRCVVMgKi8KKwlNVVgoQ0xLX01PVVRfTVBMTF9VU0VSX1IsICJtb3V0X21wbGxfdXNlcl9yIiwgbW91dF9tcGxsX3VzZXJfcCwKKwkgICAgU1JDX1JJR0hUQlVTLCA0LCAxKSwKKwlNVVgoQ0xLX01PVVRfR0RSLCAibW91dF9nZHIiLCBtb3V0X2dkcl9wLCBTUkNfUklHSFRCVVMsIDAsIDEpLAorCisJLyogU1JDX1RPUDAgKi8KKwlNVVgoQ0xLX01PVVRfRUJJLCAibW91dF9lYmkiLCBtb3V0X2ViaV9wLCBTUkNfVE9QMCwgMjgsIDEpLAorCU1VWChDTEtfTU9VVF9BQ0xLXzIwMCwgIm1vdXRfYWNsa18yMDAiLCBncm91cF9kaXZfbXBsbF9wcmVfcCxTUkNfVE9QMCwgMjQsIDEpLAorCU1VWChDTEtfTU9VVF9BQ0xLXzE2MCwgIm1vdXRfYWNsa18xNjAiLCBncm91cF9kaXZfbXBsbF9wcmVfcCwgU1JDX1RPUDAsIDIwLCAxKSwKKwlNVVgoQ0xLX01PVVRfQUNMS18xMDAsICJtb3V0X2FjbGtfMTAwIiwgZ3JvdXBfZGl2X21wbGxfcHJlX3AsIFNSQ19UT1AwLCAxNiwgMSksCisJTVVYKENMS19NT1VUX0FDTEtfMjY2XzEsICJtb3V0X2FjbGtfMjY2XzEiLCBtb3V0X2FjbGtfMjY2XzFfcCwgU1JDX1RPUDAsIDE0LCAxKSwKKwlNVVgoQ0xLX01PVVRfQUNMS18yNjZfMCwgIm1vdXRfYWNsa18yNjZfMCIsIG1vdXRfYWNsa18yNjZfMF9wLCBTUkNfVE9QMCwgMTMsIDEpLAorCU1VWChDTEtfTU9VVF9BQ0xLXzI2NiwgIm1vdXRfYWNsa18yNjYiLCBtb3V0X2FjbGtfMjY2X3AsIFNSQ19UT1AwLCAxMiwgMSksCisJTVVYKENMS19NT1VUX1ZQTEwsICJtb3V0X3ZwbGwiLCBtb3V0X3ZwbGxfcCwgU1JDX1RPUDAsIDgsIDEpLAorCU1VWChDTEtfTU9VVF9FUExMX1VTRVIsICJtb3V0X2VwbGxfdXNlciIsIG1vdXRfZXBsbF91c2VyX3AsIFNSQ19UT1AwLCA0LCAxKSwKKwlNVVgoQ0xLX01PVVRfRUJJXzEsICJtb3V0X2ViaV8xIiwgbW91dF9lYmlfMV9wLCBTUkNfVE9QMCwgMCwgMSksCisKKwkvKiBTUkNfVE9QMSAqLworCU1VWChDTEtfTU9VVF9VUExMLCAibW91dF91cGxsIiwgbW91dF91cGxsX3AsIFNSQ19UT1AxLCAyOCwgMSksCisJTVVYKENMS19NT1VUX0FDTEtfNDAwX01DVUlTUF9TVUIsICJtb3V0X2FjbGtfNDAwX21jdWlzcF9zdWIiLCBtb3V0X2FjbGtfNDAwX21jdWlzcF9zdWJfcCwKKwkJU1JDX1RPUDEsIDI0LCAxKSwKKwlNVVgoQ0xLX01PVVRfQUNMS18yNjZfU1VCLCAibW91dF9hY2xrXzI2Nl9zdWIiLCBtb3V0X2FjbGtfMjY2X3N1Yl9wLCBTUkNfVE9QMSwgMjAsIDEpLAorCU1VWChDTEtfTU9VVF9NUExMLCAibW91dF9tcGxsIiwgbW91dF9tcGxsX3AsIFNSQ19UT1AxLCAxMiwgMSksCisJTVVYKENMS19NT1VUX0FDTEtfNDAwX01DVUlTUCwgIm1vdXRfYWNsa180MDBfbWN1aXNwIiwgZ3JvdXBfZGl2X21wbGxfcHJlX3AsIFNSQ19UT1AxLCA4LCAxKSwKKwlNVVgoQ0xLX01PVVRfVlBMTFNSQywgIm1vdXRfdnBsbHNyYyIsIG1vdXRfdnBsbHNyY19wLCBTUkNfVE9QMSwgMCwgMSksCisKKwkvKiBTUkNfQ0FNICovCisJTVVYKENMS19NT1VUX0NBTTEsICJtb3V0X2NhbTEiLCBncm91cF9zY2xrX3AsIFNSQ19DQU0sIDIwLCA0KSwKKwlNVVgoQ0xLX01PVVRfQ0FNX0JMSywgIm1vdXRfY2FtX2JsayIsIGdyb3VwX3NjbGtfY2FtX2Jsa19wLCBTUkNfQ0FNLCAwLCA0KSwKKworCS8qIFNSQ19NRkMgKi8KKwlNVVgoQ0xLX01PVVRfTUZDLCAibW91dF9tZmMiLCBtb3V0X21mY19wLCBTUkNfTUZDLCA4LCAxKSwKKwlNVVgoQ0xLX01PVVRfTUZDXzEsICJtb3V0X21mY18xIiwgZ3JvdXBfZXBsbF92cGxsX3AsIFNSQ19NRkMsIDQsIDEpLAorCU1VWChDTEtfTU9VVF9NRkNfMCwgIm1vdXRfbWZjXzAiLCBncm91cF9kaXZfbXBsbF9wcmVfcCwgU1JDX01GQywgMCwgMSksCisKKwkvKiBTUkNfRzNEICovCisJTVVYKENMS19NT1VUX0czRCwgIm1vdXRfZzNkIiwgbW91dF9nM2RfcCwgU1JDX0czRCwgOCwgMSksCisJTVVYKENMS19NT1VUX0czRF8xLCAibW91dF9nM2RfMSIsIGdyb3VwX2VwbGxfdnBsbF9wLCBTUkNfRzNELCA0LCAxKSwKKwlNVVgoQ0xLX01PVVRfRzNEXzAsICJtb3V0X2czZF8wIiwgZ3JvdXBfZGl2X21wbGxfcHJlX3AsIFNSQ19HM0QsIDAsIDEpLAorCisJLyogU1JDX0xDRCAqLworCU1VWChDTEtfTU9VVF9NSVBJMCwgIm1vdXRfbWlwaTAiLCBncm91cF9zY2xrX3AsIFNSQ19MQ0QsIDEyLCA0KSwKKwlNVVgoQ0xLX01PVVRfRklNRDAsICJtb3V0X2ZpbWQwIiwgZ3JvdXBfc2Nsa19maW1kMF9wLCBTUkNfTENELCAwLCA0KSwKKworCS8qIFNSQ19JU1AgKi8KKwlNVVgoQ0xLX01PVVRfVUFSVF9JU1AsICJtb3V0X3VhcnRfaXNwIiwgZ3JvdXBfc2Nsa19wLCBTUkNfSVNQLCAxMiwgNCksCisJTVVYKENMS19NT1VUX1NQSTFfSVNQLCAibW91dF9zcGkxX2lzcCIsIGdyb3VwX3NjbGtfcCwgU1JDX0lTUCwgOCwgNCksCisJTVVYKENMS19NT1VUX1NQSTBfSVNQLCAibW91dF9zcGkwX2lzcCIsIGdyb3VwX3NjbGtfcCwgU1JDX0lTUCwgNCwgNCksCisKKwkvKiBTUkNfRlNZUyAqLworCU1VWChDTEtfTU9VVF9UU0FEQywgIm1vdXRfdHNhZGMiLCBncm91cF9zY2xrX3AsIFNSQ19GU1lTLCAyOCwgNCksCisJTVVYKENMS19NT1VUX01NQzEsICJtb3V0X21tYzEiLCBncm91cF9zY2xrX3AsIFNSQ19GU1lTLCA0LCAzKSwKKwlNVVgoQ0xLX01PVVRfTU1DMCwgIm1vdXRfbW1jMCIsIGdyb3VwX3NjbGtfcCwgU1JDX0ZTWVMsIDAsIDMpLAorCisJLyogU1JDX1BFUklMMCAqLworCU1VWChDTEtfTU9VVF9VQVJUMSwgIm1vdXRfdWFydDEiLCBncm91cF9zY2xrX3AsIFNSQ19QRVJJTDAsIDQsIDQpLAorCU1VWChDTEtfTU9VVF9VQVJUMCwgIm1vdXRfdWFydDAiLCBncm91cF9zY2xrX3AsIFNSQ19QRVJJTDAsIDAsIDQpLAorCisJLyogU1JDX1BFUklMMSAqLworCU1VWChDTEtfTU9VVF9TUEkxLCAibW91dF9zcGkxIiwgZ3JvdXBfc2Nsa19wLCBTUkNfUEVSSUwxLCAyMCwgNCksCisJTVVYKENMS19NT1VUX1NQSTAsICJtb3V0X3NwaTAiLCBncm91cF9zY2xrX3AsIFNSQ19QRVJJTDEsIDE2LCA0KSwKKwlNVVgoQ0xLX01PVVRfQVVESU8sICJtb3V0X2F1ZGlvIiwgZ3JvdXBfc2Nsa19hdWRpb19wLCBTUkNfUEVSSUwxLCA0LCA0KSwKKworCS8qIFNSQ19DUFUgKi8KKwlNVVgoQ0xLX01PVVRfTVBMTF9VU0VSX0MsICJtb3V0X21wbGxfdXNlcl9jIiwgbW91dF9tcGxsX3VzZXJfcCwKKwkgICAgU1JDX0NQVSwgMjQsIDEpLAorCU1VWChDTEtfTU9VVF9IUE0sICJtb3V0X2hwbSIsIG1vdXRfaHBtX3AsIFNSQ19DUFUsIDIwLCAxKSwKKwlNVVgoQ0xLX01PVVRfQ09SRSwgIm1vdXRfY29yZSIsIG1vdXRfY29yZV9wLCBTUkNfQ1BVLCAxNiwgMSksCisJTVVYKENMS19NT1VUX0FQTEwsICJtb3V0X2FwbGwiLCBtb3V0X2FwbGxfcCwgU1JDX0NQVSwgMCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIGRpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwkvKgorCSAqIE5PVEU6IEZvbGxvd2luZyB0YWJsZSBpcyBzb3J0ZWQgYnkgcmVnaXN0ZXIgYWRkcmVzcyBpbiBhc2NlbmRpbmcKKwkgKiBvcmRlciBhbmQgdGhlbiBiaXRmaWVsZCBzaGlmdCBpbiBkZXNjZW5kaW5nIG9yZGVyLCBhcyBpdCBpcyBkb25lCisJICogaW4gdGhlIFVzZXIncyBNYW51YWwuIFdoZW4gYWRkaW5nIG5ldyBlbnRyaWVzLCBwbGVhc2UgbWFrZSBzdXJlCisJICogdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkLCB0byBhdm9pZCBtZXJnZSBjb25mbGljdHMgYW5kIG1ha2UKKwkgKiBmdXJ0aGVyIHdvcmsgd2l0aCBkZWZpbmVkIGRhdGEgZWFzaWVyLgorCSAqLworCisJLyogRElWX0xFRlRCVVMgKi8KKwlESVYoQ0xLX0RJVl9HUEwsICJkaXZfZ3BsIiwgImRpdl9nZGwiLCBESVZfTEVGVEJVUywgNCwgMyksCisJRElWKENMS19ESVZfR0RMLCAiZGl2X2dkbCIsICJtb3V0X2dkbCIsIERJVl9MRUZUQlVTLCAwLCA0KSwKKworCS8qIERJVl9SSUdIVEJVUyAqLworCURJVihDTEtfRElWX0dQUiwgImRpdl9ncHIiLCAiZGl2X2dkciIsIERJVl9SSUdIVEJVUywgNCwgMyksCisJRElWKENMS19ESVZfR0RSLCAiZGl2X2dkciIsICJtb3V0X2dkciIsIERJVl9SSUdIVEJVUywgMCwgNCksCisKKwkvKiBESVZfVE9QICovCisJRElWKENMS19ESVZfTVBMTF9QUkUsICJkaXZfbXBsbF9wcmUiLCAic2Nsa19tcGxsX21pZiIsIERJVl9UT1AsIDI4LCAyKSwKKwlESVYoQ0xLX0RJVl9BQ0xLXzQwMF9NQ1VJU1AsICJkaXZfYWNsa180MDBfbWN1aXNwIiwKKwkgICAgIm1vdXRfYWNsa180MDBfbWN1aXNwIiwgRElWX1RPUCwgMjQsIDMpLAorCURJVihDTEtfRElWX0VCSSwgImRpdl9lYmkiLCAibW91dF9lYmlfMSIsIERJVl9UT1AsIDE2LCAzKSwKKwlESVYoQ0xLX0RJVl9BQ0xLXzIwMCwgImRpdl9hY2xrXzIwMCIsICJtb3V0X2FjbGtfMjAwIiwgRElWX1RPUCwgMTIsIDMpLAorCURJVihDTEtfRElWX0FDTEtfMTYwLCAiZGl2X2FjbGtfMTYwIiwgIm1vdXRfYWNsa18xNjAiLCBESVZfVE9QLCA4LCAzKSwKKwlESVYoQ0xLX0RJVl9BQ0xLXzEwMCwgImRpdl9hY2xrXzEwMCIsICJtb3V0X2FjbGtfMTAwIiwgRElWX1RPUCwgNCwgNCksCisJRElWKENMS19ESVZfQUNMS18yNjYsICJkaXZfYWNsa18yNjYiLCAibW91dF9hY2xrXzI2NiIsIERJVl9UT1AsIDAsIDMpLAorCisJLyogRElWX0NBTSAqLworCURJVihDTEtfRElWX0NBTTEsICJkaXZfY2FtMSIsICJtb3V0X2NhbTEiLCBESVZfQ0FNLCAyMCwgNCksCisJRElWKENMS19ESVZfQ0FNX0JMSywgImRpdl9jYW1fYmxrIiwgIm1vdXRfY2FtX2JsayIsIERJVl9DQU0sIDAsIDQpLAorCisJLyogRElWX01GQyAqLworCURJVihDTEtfRElWX01GQywgImRpdl9tZmMiLCAibW91dF9tZmMiLCBESVZfTUZDLCAwLCA0KSwKKworCS8qIERJVl9HM0QgKi8KKwlESVYoQ0xLX0RJVl9HM0QsICJkaXZfZzNkIiwgIm1vdXRfZzNkIiwgRElWX0czRCwgMCwgNCksCisKKwkvKiBESVZfTENEICovCisJRElWX0YoQ0xLX0RJVl9NSVBJMF9QUkUsICJkaXZfbWlwaTBfcHJlIiwgImRpdl9taXBpMCIsIERJVl9MQ0QsIDIwLCA0LAorCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlESVYoQ0xLX0RJVl9NSVBJMCwgImRpdl9taXBpMCIsICJtb3V0X21pcGkwIiwgRElWX0xDRCwgMTYsIDQpLAorCURJVihDTEtfRElWX0ZJTUQwLCAiZGl2X2ZpbWQwIiwgIm1vdXRfZmltZDAiLCBESVZfTENELCAwLCA0KSwKKworCS8qIERJVl9JU1AgKi8KKwlESVYoQ0xLX0RJVl9VQVJUX0lTUCwgImRpdl91YXJ0X2lzcCIsICJtb3V0X3VhcnRfaXNwIiwgRElWX0lTUCwgMjgsIDQpLAorCURJVl9GKENMS19ESVZfU1BJMV9JU1BfUFJFLCAiZGl2X3NwaTFfaXNwX3ByZSIsICJkaXZfc3BpMV9pc3AiLAorCQlESVZfSVNQLCAyMCwgOCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJRElWKENMS19ESVZfU1BJMV9JU1AsICJkaXZfc3BpMV9pc3AiLCAibW91dF9zcGkxX2lzcCIsIERJVl9JU1AsIDE2LCA0KSwKKwlESVZfRihDTEtfRElWX1NQSTBfSVNQX1BSRSwgImRpdl9zcGkwX2lzcF9wcmUiLCAiZGl2X3NwaTBfaXNwIiwKKwkJRElWX0lTUCwgOCwgOCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJRElWKENMS19ESVZfU1BJMF9JU1AsICJkaXZfc3BpMF9pc3AiLCAibW91dF9zcGkwX2lzcCIsIERJVl9JU1AsIDAsIDQpLAorCisJLyogRElWX0ZTWVMwICovCisJRElWX0YoQ0xLX0RJVl9UU0FEQ19QUkUsICJkaXZfdHNhZGNfcHJlIiwgImRpdl90c2FkYyIsIERJVl9GU1lTMCwgOCwgOCwKKwkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJRElWKENMS19ESVZfVFNBREMsICJkaXZfdHNhZGMiLCAibW91dF90c2FkYyIsIERJVl9GU1lTMCwgMCwgNCksCisKKwkvKiBESVZfRlNZUzEgKi8KKwlESVZfRihDTEtfRElWX01NQzFfUFJFLCAiZGl2X21tYzFfcHJlIiwgImRpdl9tbWMxIiwgRElWX0ZTWVMxLCAyNCwgOCwKKwkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJRElWKENMS19ESVZfTU1DMSwgImRpdl9tbWMxIiwgIm1vdXRfbW1jMSIsIERJVl9GU1lTMSwgMTYsIDQpLAorCURJVl9GKENMS19ESVZfTU1DMF9QUkUsICJkaXZfbW1jMF9wcmUiLCAiZGl2X21tYzAiLCBESVZfRlNZUzEsIDgsIDgsCisJCUNMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCURJVihDTEtfRElWX01NQzAsICJkaXZfbW1jMCIsICJtb3V0X21tYzAiLCBESVZfRlNZUzEsIDAsIDQpLAorCisJLyogRElWX1BFUklMMCAqLworCURJVihDTEtfRElWX1VBUlQxLCAiZGl2X3VhcnQxIiwgIm1vdXRfdWFydDEiLCBESVZfUEVSSUwwLCA0LCA0KSwKKwlESVYoQ0xLX0RJVl9VQVJUMCwgImRpdl91YXJ0MCIsICJtb3V0X3VhcnQwIiwgRElWX1BFUklMMCwgMCwgNCksCisKKwkvKiBESVZfUEVSSUwxICovCisJRElWX0YoQ0xLX0RJVl9TUEkxX1BSRSwgImRpdl9zcGkxX3ByZSIsICJkaXZfc3BpMSIsIERJVl9QRVJJTDEsIDI0LCA4LAorCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlESVYoQ0xLX0RJVl9TUEkxLCAiZGl2X3NwaTEiLCAibW91dF9zcGkxIiwgRElWX1BFUklMMSwgMTYsIDQpLAorCURJVl9GKENMS19ESVZfU1BJMF9QUkUsICJkaXZfc3BpMF9wcmUiLCAiZGl2X3NwaTAiLCBESVZfUEVSSUwxLCA4LCA4LAorCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlESVYoQ0xLX0RJVl9TUEkwLCAiZGl2X3NwaTAiLCAibW91dF9zcGkwIiwgRElWX1BFUklMMSwgMCwgNCksCisKKwkvKiBESVZfUEVSSUw0ICovCisJRElWKENMS19ESVZfUENNLCAiZGl2X3BjbSIsICJkaXZfYXVkaW8iLCBESVZfUEVSSUw0LCAyMCwgOCksCisJRElWKENMS19ESVZfQVVESU8sICJkaXZfYXVkaW8iLCAibW91dF9hdWRpbyIsIERJVl9QRVJJTDQsIDE2LCA0KSwKKworCS8qIERJVl9QRVJJTDUgKi8KKwlESVYoQ0xLX0RJVl9JMlMsICJkaXZfaTJzIiwgImRpdl9hdWRpbyIsIERJVl9QRVJJTDUsIDgsIDYpLAorCisJLyogRElWX0NQVTAgKi8KKwlESVYoQ0xLX0RJVl9DT1JFMiwgImRpdl9jb3JlMiIsICJkaXZfY29yZSIsIERJVl9DUFUwLCAyOCwgMyksCisJRElWKENMS19ESVZfQVBMTCwgImRpdl9hcGxsIiwgIm1vdXRfYXBsbCIsIERJVl9DUFUwLCAyNCwgMyksCisJRElWKENMS19ESVZfUENMS19EQkcsICJkaXZfcGNsa19kYmciLCAiZGl2X2NvcmUyIiwgRElWX0NQVTAsIDIwLCAzKSwKKwlESVYoQ0xLX0RJVl9BVEIsICJkaXZfYXRiIiwgImRpdl9jb3JlMiIsIERJVl9DUFUwLCAxNiwgMyksCisJRElWKENMS19ESVZfQ09SRU0sICJkaXZfY29yZW0iLCAiZGl2X2NvcmUyIiwgRElWX0NQVTAsIDQsIDMpLAorCURJVihDTEtfRElWX0NPUkUsICJkaXZfY29yZSIsICJtb3V0X2NvcmUiLCBESVZfQ1BVMCwgMCwgMyksCisKKwkvKiBESVZfQ1BVMSAqLworCURJVihDTEtfRElWX0hQTSwgImRpdl9ocG0iLCAiZGl2X2NvcHkiLCBESVZfQ1BVMSwgNCwgMyksCisJRElWKENMS19ESVZfQ09QWSwgImRpdl9jb3B5IiwgIm1vdXRfaHBtIiwgRElWX0NQVTEsIDAsIDMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwkvKgorCSAqIE5PVEU6IEZvbGxvd2luZyB0YWJsZSBpcyBzb3J0ZWQgYnkgcmVnaXN0ZXIgYWRkcmVzcyBpbiBhc2NlbmRpbmcKKwkgKiBvcmRlciBhbmQgdGhlbiBiaXRmaWVsZCBzaGlmdCBpbiBkZXNjZW5kaW5nIG9yZGVyLCBhcyBpdCBpcyBkb25lCisJICogaW4gdGhlIFVzZXIncyBNYW51YWwuIFdoZW4gYWRkaW5nIG5ldyBlbnRyaWVzLCBwbGVhc2UgbWFrZSBzdXJlCisJICogdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkLCB0byBhdm9pZCBtZXJnZSBjb25mbGljdHMgYW5kIG1ha2UKKwkgKiBmdXJ0aGVyIHdvcmsgd2l0aCBkZWZpbmVkIGRhdGEgZWFzaWVyLgorCSAqLworCisJLyogR0FURV9JUF9MRUZUQlVTICovCisJR0FURShDTEtfQVNZTkNfRzNELCAiYXN5bmNfZzNkIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfTEVGVEJVUywgNiwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0FTWU5DX01GQ0wsICJhc3luY19tZmNsIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfTEVGVEJVUywgNCwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1BQTVVMRUZULCAicHBtdWxlZnQiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9MRUZUQlVTLCAxLAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfR1BJT19MRUZULCAiZ3Bpb19sZWZ0IiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfTEVGVEJVUywgMCwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCisJLyogR0FURV9JUF9SSUdIVEJVUyAqLworCUdBVEUoQ0xLX0FTWU5DX0lTUE1YLCAiYXN5bmNfaXNwbXgiLCAiZGl2X2FjbGtfMTAwIiwKKwkJR0FURV9JUF9SSUdIVEJVUywgOSwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0FTWU5DX0ZTWVNELCAiYXN5bmNfZnN5c2QiLCAiZGl2X2FjbGtfMTAwIiwKKwkJR0FURV9JUF9SSUdIVEJVUywgNSwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0FTWU5DX0xDRDBYLCAiYXN5bmNfbGNkMHgiLCAiZGl2X2FjbGtfMTAwIiwKKwkJR0FURV9JUF9SSUdIVEJVUywgMywgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0FTWU5DX0NBTVgsICJhc3luY19jYW14IiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUklHSFRCVVMsIDIsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19QUE1VUklHSFQsICJwcG11cmlnaHQiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9SSUdIVEJVUywgMSwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0dQSU9fUklHSFQsICJncGlvX3JpZ2h0IiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUklHSFRCVVMsIDAsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKworCS8qIEdBVEVfSVBfUEVSSVIgKi8KKwlHQVRFKENMS19NT05PQ05ULCAibW9ub2NudCIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCAyMiwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RaUEM2LCAidHpwYzYiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgMjEsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19QUk9WSVNJT05LRVkxLCAicHJvdmlzaW9ua2V5MSIsICJkaXZfYWNsa18xMDAiLAorCQlHQVRFX0lQX1BFUklSLCAyMCwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1BST1ZJU0lPTktFWTAsICJwcm92aXNpb25rZXkwIiwgImRpdl9hY2xrXzEwMCIsCisJCUdBVEVfSVBfUEVSSVIsIDE5LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfQ01VX0lTUFBBUlQsICJjbXVfaXNwcGFydCIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCAxOCwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RNVV9BUEJJRiwgInRtdV9hcGJpZiIsICJkaXZfYWNsa18xMDAiLAorCQlHQVRFX0lQX1BFUklSLCAxNywgMCwgMCksCisJR0FURShDTEtfS0VZSUYsICJrZXlpZiIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCAxNiwgMCwgMCksCisJR0FURShDTEtfUlRDLCAicnRjIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSVIsIDE1LCAwLCAwKSwKKwlHQVRFKENMS19XRFQsICJ3ZHQiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgMTQsIDAsIDApLAorCUdBVEUoQ0xLX01DVCwgIm1jdCIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCAxMywgMCwgMCksCisJR0FURShDTEtfU0VDS0VZLCAic2Vja2V5IiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSVIsIDEyLAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfVFpQQzUsICJ0enBjNSIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCAxMCwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RaUEM0LCAidHpwYzQiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgOSwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RaUEMzLCAidHpwYzMiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgOCwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RaUEMyLCAidHpwYzIiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgNywKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RaUEMxLCAidHpwYzEiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgNiwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1RaUEMwLCAidHpwYzAiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgNSwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0NNVV9DT1JFUEFSVCwgImNtdV9jb3JlcGFydCIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCA0LAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfQ01VX1RPUFBBUlQsICJjbXVfdG9wcGFydCIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklSLCAzLAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfUE1VX0FQQklGLCAicG11X2FwYmlmIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSVIsIDIsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19TWVNSRUcsICJzeXNyZWciLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJUiwgMSwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX0NISVBfSUQsICJjaGlwX2lkIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSVIsIDAsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKworCS8qIEdBVEVfU0NMS19DQU0gKi8KKwlHQVRFKENMS19TQ0xLX0pQRUcsICJzY2xrX2pwZWciLCAiZGl2X2NhbV9ibGsiLAorCQlHQVRFX1NDTEtfQ0FNLCA4LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX00yTVNDQUxFUiwgInNjbGtfbTJtc2NhbGVyIiwgImRpdl9jYW1fYmxrIiwKKwkJR0FURV9TQ0xLX0NBTSwgMiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19HU0NBTEVSMSwgInNjbGtfZ3NjYWxlcjEiLCAiZGl2X2NhbV9ibGsiLAorCQlHQVRFX1NDTEtfQ0FNLCAxLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX0dTQ0FMRVIwLCAic2Nsa19nc2NhbGVyMCIsICJkaXZfY2FtX2JsayIsCisJCUdBVEVfU0NMS19DQU0sIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCisJLyogR0FURV9TQ0xLX01GQyAqLworCUdBVEUoQ0xLX1NDTEtfTUZDLCAic2Nsa19tZmMiLCAiZGl2X21mYyIsCisJCUdBVEVfU0NMS19NRkMsIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCisJLyogR0FURV9TQ0xLX0czRCAqLworCUdBVEUoQ0xLX1NDTEtfRzNELCAic2Nsa19nM2QiLCAiZGl2X2czZCIsCisJCUdBVEVfU0NMS19HM0QsIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCisJLyogR0FURV9TQ0xLX0xDRCAqLworCUdBVEUoQ0xLX1NDTEtfTUlQSURQSFkyTCwgInNjbGtfbWlwaWRwaHkybCIsICJkaXZfbWlwaTAiLAorCQlHQVRFX1NDTEtfTENELCA0LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX01JUEkwLCAic2Nsa19taXBpMCIsICJkaXZfbWlwaTBfcHJlIiwKKwkJR0FURV9TQ0xLX0xDRCwgMywgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19GSU1EMCwgInNjbGtfZmltZDAiLCAiZGl2X2ZpbWQwIiwKKwkJR0FURV9TQ0xLX0xDRCwgMCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisKKwkvKiBHQVRFX1NDTEtfSVNQX1RPUCAqLworCUdBVEUoQ0xLX1NDTEtfQ0FNMSwgInNjbGtfY2FtMSIsICJkaXZfY2FtMSIsCisJCUdBVEVfU0NMS19JU1BfVE9QLCA0LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX1VBUlRfSVNQLCAic2Nsa191YXJ0X2lzcCIsICJkaXZfdWFydF9pc3AiLAorCQlHQVRFX1NDTEtfSVNQX1RPUCwgMywgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19TUEkxX0lTUCwgInNjbGtfc3BpMV9pc3AiLCAiZGl2X3NwaTFfaXNwIiwKKwkJR0FURV9TQ0xLX0lTUF9UT1AsIDIsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoQ0xLX1NDTEtfU1BJMF9JU1AsICJzY2xrX3NwaTBfaXNwIiwgImRpdl9zcGkwX2lzcCIsCisJCUdBVEVfU0NMS19JU1BfVE9QLCAxLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKworCS8qIEdBVEVfU0NMS19GU1lTICovCisJR0FURShDTEtfU0NMS19VUExMLCAic2Nsa191cGxsIiwgIm1vdXRfdXBsbCIsIEdBVEVfU0NMS19GU1lTLCAxMCwgMCwgMCksCisJR0FURShDTEtfU0NMS19UU0FEQywgInNjbGtfdHNhZGMiLCAiZGl2X3RzYWRjX3ByZSIsCisJCUdBVEVfU0NMS19GU1lTLCA5LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX0VCSSwgInNjbGtfZWJpIiwgImRpdl9lYmkiLAorCQlHQVRFX1NDTEtfRlNZUywgNiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19NTUMxLCAic2Nsa19tbWMxIiwgImRpdl9tbWMxX3ByZSIsCisJCUdBVEVfU0NMS19GU1lTLCAxLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX01NQzAsICJzY2xrX21tYzAiLCAiZGl2X21tYzBfcHJlIiwKKwkJR0FURV9TQ0xLX0ZTWVMsIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCisJLyogR0FURV9TQ0xLX1BFUklMICovCisJR0FURShDTEtfU0NMS19JMlMsICJzY2xrX2kycyIsICJkaXZfaTJzIiwKKwkJR0FURV9TQ0xLX1BFUklMLCAxOCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19QQ00sICJzY2xrX3BjbSIsICJkaXZfcGNtIiwKKwkJR0FURV9TQ0xLX1BFUklMLCAxNiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19TUEkxLCAic2Nsa19zcGkxIiwgImRpdl9zcGkxX3ByZSIsCisJCUdBVEVfU0NMS19QRVJJTCwgNywgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19TUEkwLCAic2Nsa19zcGkwIiwgImRpdl9zcGkwX3ByZSIsCisJCUdBVEVfU0NMS19QRVJJTCwgNiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19VQVJUMSwgInNjbGtfdWFydDEiLCAiZGl2X3VhcnQxIiwKKwkJR0FURV9TQ0xLX1BFUklMLCAxLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX1VBUlQwLCAic2Nsa191YXJ0MCIsICJkaXZfdWFydDAiLAorCQlHQVRFX1NDTEtfUEVSSUwsIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCisJLyogR0FURV9JUF9DQU0gKi8KKwlHQVRFKENMS19RRUpQRUcsICJxZWpwZWciLCAiZGl2X2NhbV9ibGtfMzIwIiwgR0FURV9JUF9DQU0sIDE5LAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfUElYRUxBU1lOQ00xLCAicGl4ZWxhc3luY20xIiwgImRpdl9jYW1fYmxrXzMyMCIsCisJCUdBVEVfSVBfQ0FNLCAxOCwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1BJWEVMQVNZTkNNMCwgInBpeGVsYXN5bmNtMCIsICJkaXZfY2FtX2Jsa18zMjAiLAorCQlHQVRFX0lQX0NBTSwgMTcsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19QUE1VQ0FNSUYsICJwcG11Y2FtaWYiLCAiZGl2X2NhbV9ibGtfMzIwIiwKKwkJR0FURV9JUF9DQU0sIDE2LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfUUVNMk1TQ0FMRVIsICJxZW0ybXNjYWxlciIsICJkaXZfY2FtX2Jsa18zMjAiLAorCQlHQVRFX0lQX0NBTSwgMTQsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19RRUdTQ0FMRVIxLCAicWVnc2NhbGVyMSIsICJkaXZfY2FtX2Jsa18zMjAiLAorCQlHQVRFX0lQX0NBTSwgMTMsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19RRUdTQ0FMRVIwLCAicWVnc2NhbGVyMCIsICJkaXZfY2FtX2Jsa18zMjAiLAorCQlHQVRFX0lQX0NBTSwgMTIsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19TTU1VSlBFRywgInNtbXVqcGVnIiwgImRpdl9jYW1fYmxrXzMyMCIsCisJCUdBVEVfSVBfQ0FNLCAxMSwgMCwgMCksCisJR0FURShDTEtfU01NVU0yTTJTQ0FMRVIsICJzbW11bTJtMnNjYWxlciIsICJkaXZfY2FtX2Jsa18zMjAiLAorCQlHQVRFX0lQX0NBTSwgOSwgMCwgMCksCisJR0FURShDTEtfU01NVUdTQ0FMRVIxLCAic21tdWdzY2FsZXIxIiwgImRpdl9jYW1fYmxrXzMyMCIsCisJCUdBVEVfSVBfQ0FNLCA4LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VR1NDQUxFUjAsICJzbW11Z3NjYWxlcjAiLCAiZGl2X2NhbV9ibGtfMzIwIiwKKwkJR0FURV9JUF9DQU0sIDcsIDAsIDApLAorCUdBVEUoQ0xLX0pQRUcsICJqcGVnIiwgImRpdl9jYW1fYmxrXzMyMCIsIEdBVEVfSVBfQ0FNLCA2LCAwLCAwKSwKKwlHQVRFKENMS19NMk1TQ0FMRVIsICJtMm1zY2FsZXIiLCAiZGl2X2NhbV9ibGtfMzIwIiwKKwkJR0FURV9JUF9DQU0sIDIsIDAsIDApLAorCUdBVEUoQ0xLX0dTQ0FMRVIxLCAiZ3NjYWxlcjEiLCAiZGl2X2NhbV9ibGtfMzIwIiwgR0FURV9JUF9DQU0sIDEsIDAsIDApLAorCUdBVEUoQ0xLX0dTQ0FMRVIwLCAiZ3NjYWxlcjAiLCAiZGl2X2NhbV9ibGtfMzIwIiwgR0FURV9JUF9DQU0sIDAsIDAsIDApLAorCisJLyogR0FURV9JUF9NRkMgKi8KKwlHQVRFKENMS19RRU1GQywgInFlbWZjIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfTUZDLCA1LAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfUFBNVU1GQ19MLCAicHBtdW1mY19sIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfTUZDLCAzLAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfU01NVU1GQ19MLCAic21tdW1mY19sIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfTUZDLCAxLCAwLCAwKSwKKwlHQVRFKENMS19NRkMsICJtZmMiLCAiZGl2X2FjbGtfMjAwIiwgR0FURV9JUF9NRkMsIDAsIDAsIDApLAorCisJLyogR0FURV9JUF9HM0QgKi8KKwlHQVRFKENMS19TTU1VRzNELCAic21tdWczZCIsICJkaXZfYWNsa18yMDAiLCBHQVRFX0lQX0czRCwgMywgMCwgMCksCisJR0FURShDTEtfUUVHM0QsICJxZWczZCIsICJkaXZfYWNsa18yMDAiLCBHQVRFX0lQX0czRCwgMiwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1BQTVVHM0QsICJwcG11ZzNkIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfRzNELCAxLAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfRzNELCAiZzNkIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfRzNELCAwLCAwLCAwKSwKKworCS8qIEdBVEVfSVBfTENEICovCisJR0FURShDTEtfUUVfQ0gxX0xDRCwgInFlX2NoMV9sY2QiLCAiZGl2X2FjbGtfMTYwIiwgR0FURV9JUF9MQ0QsIDcsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19RRV9DSDBfTENELCAicWVfY2gwX2xjZCIsICJkaXZfYWNsa18xNjAiLCBHQVRFX0lQX0xDRCwgNiwKKwkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoQ0xLX1BQTVVMQ0QwLCAicHBtdWxjZDAiLCAiZGl2X2FjbGtfMTYwIiwgR0FURV9JUF9MQ0QsIDUsCisJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19TTU1VRklNRDAsICJzbW11ZmltZDAiLCAiZGl2X2FjbGtfMTYwIiwgR0FURV9JUF9MQ0QsIDQsIDAsIDApLAorCUdBVEUoQ0xLX0RTSU0wLCAiZHNpbTAiLCAiZGl2X2FjbGtfMTYwIiwgR0FURV9JUF9MQ0QsIDMsIDAsIDApLAorCUdBVEUoQ0xLX1NNSUVTLCAic21pZXMiLCAiZGl2X2FjbGtfMTYwIiwgR0FURV9JUF9MQ0QsIDIsIDAsIDApLAorCUdBVEUoQ0xLX0ZJTUQwLCAiZmltZDAiLCAiZGl2X2FjbGtfMTYwIiwgR0FURV9JUF9MQ0QsIDAsIDAsIDApLAorCisJLyogR0FURV9JUF9JU1AgKi8KKwlHQVRFKENMS19DQU0xLCAiY2FtMSIsICJtb3V0X2FjbGtfMjY2X3N1YiIsIEdBVEVfSVBfSVNQLCA1LCAwLCAwKSwKKwlHQVRFKENMS19VQVJUX0lTUF9UT1AsICJ1YXJ0X2lzcF90b3AiLCAibW91dF9hY2xrXzI2Nl9zdWIiLAorCQlHQVRFX0lQX0lTUCwgMywgMCwgMCksCisJR0FURShDTEtfU1BJMV9JU1BfVE9QLCAic3BpMV9pc3BfdG9wIiwgIm1vdXRfYWNsa18yNjZfc3ViIiwKKwkJR0FURV9JUF9JU1AsIDIsIDAsIDApLAorCUdBVEUoQ0xLX1NQSTBfSVNQX1RPUCwgInNwaTBfaXNwX3RvcCIsICJtb3V0X2FjbGtfMjY2X3N1YiIsCisJCUdBVEVfSVBfSVNQLCAxLCAwLCAwKSwKKworCS8qIEdBVEVfSVBfRlNZUyAqLworCUdBVEUoQ0xLX1RTQURDLCAidHNhZGMiLCAiZGl2X2FjbGtfMjAwIiwgR0FURV9JUF9GU1lTLCAyMCwgMCwgMCksCisJR0FURShDTEtfUFBNVUZJTEUsICJwcG11ZmlsZSIsICJkaXZfYWNsa18yMDAiLCBHQVRFX0lQX0ZTWVMsIDE3LAorCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfVVNCT1RHLCAidXNib3RnIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfRlNZUywgMTMsIDAsIDApLAorCUdBVEUoQ0xLX1VTQkhPU1QsICJ1c2Job3N0IiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfRlNZUywgMTIsIDAsIDApLAorCUdBVEUoQ0xLX1NST01DLCAic3JvbWMiLCAiZGl2X2FjbGtfMjAwIiwgR0FURV9JUF9GU1lTLCAxMSwgMCwgMCksCisJR0FURShDTEtfU0RNTUMxLCAic2RtbWMxIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfRlNZUywgNiwgMCwgMCksCisJR0FURShDTEtfU0RNTUMwLCAic2RtbWMwIiwgImRpdl9hY2xrXzIwMCIsIEdBVEVfSVBfRlNZUywgNSwgMCwgMCksCisJR0FURShDTEtfUERNQTEsICJwZG1hMSIsICJkaXZfYWNsa18yMDAiLCBHQVRFX0lQX0ZTWVMsIDEsIDAsIDApLAorCUdBVEUoQ0xLX1BETUEwLCAicGRtYTAiLCAiZGl2X2FjbGtfMjAwIiwgR0FURV9JUF9GU1lTLCAwLCAwLCAwKSwKKworCS8qIEdBVEVfSVBfUEVSSUwgKi8KKwlHQVRFKENMS19QV00sICJwd20iLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJTCwgMjQsIDAsIDApLAorCUdBVEUoQ0xLX1BDTSwgInBjbSIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCAyMywgMCwgMCksCisJR0FURShDTEtfSTJTLCAiaTJzIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSUwsIDIxLCAwLCAwKSwKKwlHQVRFKENMS19TUEkxLCAic3BpMSIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCAxNywgMCwgMCksCisJR0FURShDTEtfU1BJMCwgInNwaTAiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJTCwgMTYsIDAsIDApLAorCUdBVEUoQ0xLX0kyQzcsICJpMmM3IiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSUwsIDEzLCAwLCAwKSwKKwlHQVRFKENMS19JMkM2LCAiaTJjNiIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCAxMiwgMCwgMCksCisJR0FURShDTEtfSTJDNSwgImkyYzUiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJTCwgMTEsIDAsIDApLAorCUdBVEUoQ0xLX0kyQzQsICJpMmM0IiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSUwsIDEwLCAwLCAwKSwKKwlHQVRFKENMS19JMkMzLCAiaTJjMyIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCA5LCAwLCAwKSwKKwlHQVRFKENMS19JMkMyLCAiaTJjMiIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCA4LCAwLCAwKSwKKwlHQVRFKENMS19JMkMxLCAiaTJjMSIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCA3LCAwLCAwKSwKKwlHQVRFKENMS19JMkMwLCAiaTJjMCIsICJkaXZfYWNsa18xMDAiLCBHQVRFX0lQX1BFUklMLCA2LCAwLCAwKSwKKwlHQVRFKENMS19VQVJUMSwgInVhcnQxIiwgImRpdl9hY2xrXzEwMCIsIEdBVEVfSVBfUEVSSUwsIDEsIDAsIDApLAorCUdBVEUoQ0xLX1VBUlQwLCAidWFydDAiLCAiZGl2X2FjbGtfMTAwIiwgR0FURV9JUF9QRVJJTCwgMCwgMCwgMCksCit9OworCisvKiBBUExMICYgTVBMTCAmIEJQTEwgJiBVUExMICovCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX3JhdGVfdGFibGUgZXh5bm9zMzI1MF9wbGxfcmF0ZXNbXSA9IHsKKwlQTExfMzVYWF9SQVRFKDEyMDAwMDAwMDAsIDQwMCwgNCwgMSksCisJUExMXzM1WFhfUkFURSgxMTAwMDAwMDAwLCAyNzUsIDMsIDEpLAorCVBMTF8zNVhYX1JBVEUoMTA2NjAwMDAwMCwgNTMzLCA2LCAxKSwKKwlQTExfMzVYWF9SQVRFKDEwMDAwMDAwMDAsIDI1MCwgMywgMSksCisJUExMXzM1WFhfUkFURSggOTYwMDAwMDAwLCAzMjAsIDQsIDEpLAorCVBMTF8zNVhYX1JBVEUoIDkwMDAwMDAwMCwgMzAwLCA0LCAxKSwKKwlQTExfMzVYWF9SQVRFKCA4NTAwMDAwMDAsIDQyNSwgNiwgMSksCisJUExMXzM1WFhfUkFURSggODAwMDAwMDAwLCAyMDAsIDMsIDEpLAorCVBMTF8zNVhYX1JBVEUoIDcwMDAwMDAwMCwgMTc1LCAzLCAxKSwKKwlQTExfMzVYWF9SQVRFKCA2NjcwMDAwMDAsIDY2NywgMTIsIDEpLAorCVBMTF8zNVhYX1JBVEUoIDYwMDAwMDAwMCwgNDAwLCA0LCAyKSwKKwlQTExfMzVYWF9SQVRFKCA1MzMwMDAwMDAsIDUzMywgNiwgMiksCisJUExMXzM1WFhfUkFURSggNTIwMDAwMDAwLCAyNjAsIDMsIDIpLAorCVBMTF8zNVhYX1JBVEUoIDUwMDAwMDAwMCwgMjUwLCAzLCAyKSwKKwlQTExfMzVYWF9SQVRFKCA0MDAwMDAwMDAsIDIwMCwgMywgMiksCisJUExMXzM1WFhfUkFURSggMjAwMDAwMDAwLCAyMDAsIDMsIDMpLAorCVBMTF8zNVhYX1JBVEUoIDEwMDAwMDAwMCwgMjAwLCAzLCA0KSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CisKKy8qIFZQTEwgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfcmF0ZV90YWJsZSBleHlub3MzMjUwX3ZwbGxfcmF0ZXNbXSA9IHsKKwlQTExfMzZYWF9SQVRFKDYwMDAwMDAwMCwgMTAwLCAyLCAxLCAgICAgMCksCisJUExMXzM2WFhfUkFURSg1MzMwMDAwMDAsIDI2NiwgMywgMiwgMzI3NjgpLAorCVBMTF8zNlhYX1JBVEUoNTE5MjMwOTg3LCAxNzMsIDIsIDIsICA1MDQ2KSwKKwlQTExfMzZYWF9SQVRFKDUwMDAwMDAwMCwgMjUwLCAzLCAyLCAgICAgMCksCisJUExMXzM2WFhfUkFURSg0NDU1MDAwMDAsIDE0OCwgMiwgMiwgMzI3NjgpLAorCVBMTF8zNlhYX1JBVEUoNDQ1MDU1MDA3LCAxNDgsIDIsIDIsIDIzMDQ3KSwKKwlQTExfMzZYWF9SQVRFKDQwMDAwMDAwMCwgMjAwLCAzLCAyLCAgICAgMCksCisJUExMXzM2WFhfUkFURSgzNzEyNTAwMDAsIDEyMywgMiwgMiwgNDkxNTIpLAorCVBMTF8zNlhYX1JBVEUoMzcwODc4OTk3LCAxODUsIDMsIDIsIDI4ODAzKSwKKwlQTExfMzZYWF9SQVRFKDM0MDAwMDAwMCwgMTcwLCAzLCAyLCAgICAgMCksCisJUExMXzM2WFhfUkFURSgzMzUwMDAwMTUsIDExMSwgMiwgMiwgNDM2OTEpLAorCVBMTF8zNlhYX1JBVEUoMzMzMDAwMDAwLCAxMTEsIDIsIDIsICAgICAwKSwKKwlQTExfMzZYWF9SQVRFKDMzMDAwMDAwMCwgMTEwLCAyLCAyLCAgICAgMCksCisJUExMXzM2WFhfUkFURSgzMjAwMDAwMTUsIDEwNiwgMiwgMiwgNDM2OTEpLAorCVBMTF8zNlhYX1JBVEUoMzAwMDAwMDAwLCAxMDAsIDIsIDIsICAgICAwKSwKKwlQTExfMzZYWF9SQVRFKDI3NTAwMDAwMCwgMjc1LCAzLCAzLCAgICAgMCksCisJUExMXzM2WFhfUkFURSgyMjI3NTAwMDAsIDE0OCwgMiwgMywgMzI3NjgpLAorCVBMTF8zNlhYX1JBVEUoMjIyNTI4MDA3LCAxNDgsIDIsIDMsIDIzMDY5KSwKKwlQTExfMzZYWF9SQVRFKDE2MDAwMDAwMCwgMTYwLCAzLCAzLCAgICAgMCksCisJUExMXzM2WFhfUkFURSgxNDg1MDAwMDAsICA5OSwgMiwgMywgICAgIDApLAorCVBMTF8zNlhYX1JBVEUoMTQ4MzUyMDA1LCAgOTgsIDIsIDMsIDU5MDcwKSwKKwlQTExfMzZYWF9SQVRFKDEwODAwMDAwMCwgMTQ0LCAyLCA0LCAgICAgMCksCisJUExMXzM2WFhfUkFURSggNzQyNTAwMDAsICA5OSwgMiwgNCwgICAgIDApLAorCVBMTF8zNlhYX1JBVEUoIDc0MTc2MDAyLCAgOTgsIDMsIDQsIDU5MDcwKSwKKwlQTExfMzZYWF9SQVRFKCA1NDA1NDAwMCwgMjE2LCAzLCA1LCAxNDE1NiksCisJUExMXzM2WFhfUkFURSggNTQwMDAwMDAsIDE0NCwgMiwgNSwgICAgIDApLAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX3BsbF9jbG9jayBleHlub3MzMjUwX3BsbHNbbnJfcGxsc10gX19pbml0ZGF0YSA9IHsKKwlbYXBsbF0gPSBQTEwocGxsXzM1eHgsIENMS19GT1VUX0FQTEwsICJmb3V0X2FwbGwiLCAiZmluX3BsbCIsCisJCQlBUExMX0xPQ0ssIEFQTExfQ09OMCwgTlVMTCksCisJW21wbGxdID0gUExMKHBsbF8zNXh4LCBDTEtfRk9VVF9NUExMLCAiZm91dF9tcGxsIiwgImZpbl9wbGwiLAorCQkJTVBMTF9MT0NLLCBNUExMX0NPTjAsIE5VTEwpLAorCVt2cGxsXSA9IFBMTChwbGxfMzZ4eCwgQ0xLX0ZPVVRfVlBMTCwgImZvdXRfdnBsbCIsICJmaW5fcGxsIiwKKwkJCVZQTExfTE9DSywgVlBMTF9DT04wLCBOVUxMKSwKKwlbdXBsbF0gPSBQTEwocGxsXzM1eHgsIENMS19GT1VUX1VQTEwsICJmb3V0X3VwbGwiLCAiZmluX3BsbCIsCisJCQlVUExMX0xPQ0ssIFVQTExfQ09OMCwgTlVMTCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zMzI1MF9jbXVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4OworCisJcmVnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFyZWdfYmFzZSkKKwkJcGFuaWMoIiVzOiBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOworCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIENMS19OUl9DTEtTKTsKKwlpZiAoIWN0eCkKKwkJcGFuaWMoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgY29udGV4dC5cbiIsIF9fZnVuY19fKTsKKworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihjdHgsIGZpeGVkX2ZhY3Rvcl9jbGtzLAorCQkJCQkgIEFSUkFZX1NJWkUoZml4ZWRfZmFjdG9yX2Nsa3MpKTsKKworCWV4eW5vczMyNTBfcGxsc1thcGxsXS5yYXRlX3RhYmxlID0gZXh5bm9zMzI1MF9wbGxfcmF0ZXM7CisJZXh5bm9zMzI1MF9wbGxzW21wbGxdLnJhdGVfdGFibGUgPSBleHlub3MzMjUwX3BsbF9yYXRlczsKKwlleHlub3MzMjUwX3BsbHNbdnBsbF0ucmF0ZV90YWJsZSA9IGV4eW5vczMyNTBfdnBsbF9yYXRlczsKKwlleHlub3MzMjUwX3BsbHNbdXBsbF0ucmF0ZV90YWJsZSA9IGV4eW5vczMyNTBfcGxsX3JhdGVzOworCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKGN0eCwgZXh5bm9zMzI1MF9wbGxzLAorCQkJCQlBUlJBWV9TSVpFKGV4eW5vczMyNTBfcGxscyksIHJlZ19iYXNlKTsKKworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIG11eF9jbGtzLCBBUlJBWV9TSVpFKG11eF9jbGtzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgZGl2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2X2Nsa3MpKTsKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGN0eCwgZ2F0ZV9jbGtzLCBBUlJBWV9TSVpFKGdhdGVfY2xrcykpOworCisJZXh5bm9zMzI1MF9jbGtfc2xlZXBfaW5pdCgpOworfQorQ0xLX09GX0RFQ0xBUkUoZXh5bm9zMzI1MF9jbXUsICJzYW1zdW5nLGV4eW5vczMyNTAtY211IiwgZXh5bm9zMzI1MF9jbXVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M0LmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M0LmMKaW5kZXggYjRmOTY3Mi4uYzRkZjI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczQuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAvKiBmaXhlZCByYXRlIGNsb2NrcyBnZW5lcmF0ZWQgaW5zaWRlIHRoZSBzb2MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrIGV4eW5vczRfZml4ZWRfcmF0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKIAlGUkFURSgwLCAic2Nsa19oZG1pMjRtIiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDI0MDAwMDAwKSwKLQlGUkFURSgwLCAic2Nsa19oZG1pcGh5IiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDI3MDAwMDAwKSwKKwlGUkFURShDTEtfU0NMS19IRE1JUEhZLCAic2Nsa19oZG1pcGh5IiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDI3MDAwMDAwKSwKIAlGUkFURSgwLCAic2Nsa191c2JwaHkwIiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDQ4MDAwMDAwKSwKIH07CiAKQEAgLTkwMyw3ICs5MDMsNyBAQAogCUdBVEUoQ0xLX0FVRFNTLCAiYXVkc3MiLCAic2Nsa19lcGxsIiwgRTRYMTJfR0FURV9JUF9NQVVESU8sIDAsIDAsIDApLAogCUdBVEUoQ0xLX01ETklFMCwgIm1kbmllMCIsICJhY2xrMTYwIiwgR0FURV9JUF9MQ0QwLCAyLCAwLCAwKSwKIAlHQVRFKENMS19ST1RBVE9SLCAicm90YXRvciIsICJhY2xrMjAwIiwgRTRYMTJfR0FURV9JUF9JTUFHRSwgMSwgMCwgMCksCi0JR0FURShDTEtfTURNQTIsICJtZG1hMiIsICJhY2xrMjAwIiwgRTRYMTJfR0FURV9JUF9JTUFHRSwgMiwgMCwgMCksCisJR0FURShDTEtfTURNQSwgIm1kbWEiLCAiYWNsazIwMCIsIEU0WDEyX0dBVEVfSVBfSU1BR0UsIDIsIDAsIDApLAogCUdBVEUoQ0xLX1NNTVVfTURNQSwgInNtbXVfbWRtYSIsICJhY2xrMjAwIiwgRTRYMTJfR0FURV9JUF9JTUFHRSwgNSwgMCwKIAkJMCksCiAJR0FURShDTEtfTUlQSV9IU0ksICJtaXBpX2hzaSIsICJhY2xrMTMzIiwgR0FURV9JUF9GU1lTLCAxMCwgMCwgMCksCkBAIC0xMDQzLDcgKzEwNDMsNyBAQAogCXJldHVybiB4b207CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBleHlub3M0X2Nsa19yZWdpc3Rlcl9maW5wbGwodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M0X2Nsa19yZWdpc3Rlcl9maW5wbGwoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgpCiB7CiAJc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayBmY2xrOwogCXN0cnVjdCBjbGsgKmNsazsKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJZmNsay5wYXJlbnRfbmFtZSA9IE5VTEw7CiAJZmNsay5mbGFncyA9IENMS19JU19ST09UOwogCWZjbGsuZml4ZWRfcmF0ZSA9IGZpbnBsbF9mOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoJmZjbGssIDEpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCAmZmNsaywgMSk7CiAKIH0KIApAQCAtMTE3NiwyMiArMTE3NiwyNSBAQAogc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczRfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICAgZW51bSBleHlub3M0X3NvYyBzb2MpCiB7CisJc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHg7CiAJZXh5bm9zNF9zb2MgPSBzb2M7CiAKIAlyZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKIAlpZiAoIXJlZ19iYXNlKQogCQlwYW5pYygiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CiAKLQlzYW1zdW5nX2Nsa19pbml0KG5wLCByZWdfYmFzZSwgQ0xLX05SX0NMS1MpOworCWN0eCA9IHNhbXN1bmdfY2xrX2luaXQobnAsIHJlZ19iYXNlLCBDTEtfTlJfQ0xLUyk7CisJaWYgKCFjdHgpCisJCXBhbmljKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGNvbnRleHQuXG4iLCBfX2Z1bmNfXyk7CiAKLQlzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoZXh5bm9zNF9maXhlZF9yYXRlX2V4dF9jbGtzLAorCXNhbXN1bmdfY2xrX29mX3JlZ2lzdGVyX2ZpeGVkX2V4dChjdHgsIGV4eW5vczRfZml4ZWRfcmF0ZV9leHRfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNF9maXhlZF9yYXRlX2V4dF9jbGtzKSwKIAkJCWV4dF9jbGtfbWF0Y2gpOwogCi0JZXh5bm9zNF9jbGtfcmVnaXN0ZXJfZmlucGxsKCk7CisJZXh5bm9zNF9jbGtfcmVnaXN0ZXJfZmlucGxsKGN0eCk7CiAKIAlpZiAoZXh5bm9zNF9zb2MgPT0gRVhZTk9TNDIxMCkgewotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9tdXgoZXh5bm9zNDIxMF9tdXhfZWFybHksCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIGV4eW5vczQyMTBfbXV4X2Vhcmx5LAogCQkJCQlBUlJBWV9TSVpFKGV4eW5vczQyMTBfbXV4X2Vhcmx5KSk7CiAKIAkJaWYgKF9nZXRfcmF0ZSgiZmluX3BsbCIpID09IDI0MDAwMDAwKSB7CkBAIC0xMjA1LDcgKzEyMDgsNyBAQAogCQkJZXh5bm9zNDIxMF9wbGxzW3ZwbGxdLnJhdGVfdGFibGUgPQogCQkJCQkJCWV4eW5vczQyMTBfdnBsbF9yYXRlczsKIAotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwoZXh5bm9zNDIxMF9wbGxzLAorCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwoY3R4LCBleHlub3M0MjEwX3BsbHMsCiAJCQkJCUFSUkFZX1NJWkUoZXh5bm9zNDIxMF9wbGxzKSwgcmVnX2Jhc2UpOwogCX0gZWxzZSB7CiAJCWlmIChfZ2V0X3JhdGUoImZpbl9wbGwiKSA9PSAyNDAwMDAwMCkgewpAQCAtMTIxNyw0MiArMTIyMCw0MiBAQAogCQkJCQkJCWV4eW5vczR4MTJfdnBsbF9yYXRlczsKIAkJfQogCi0JCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChleHlub3M0eDEyX3BsbHMsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChjdHgsIGV4eW5vczR4MTJfcGxscywKIAkJCQkJQVJSQVlfU0laRShleHlub3M0eDEyX3BsbHMpLCByZWdfYmFzZSk7CiAJfQogCi0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShleHlub3M0X2ZpeGVkX3JhdGVfY2xrcywKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9yYXRlKGN0eCwgZXh5bm9zNF9maXhlZF9yYXRlX2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczRfZml4ZWRfcmF0ZV9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGV4eW5vczRfbXV4X2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgZXh5bm9zNF9tdXhfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNF9tdXhfY2xrcykpOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihleHlub3M0X2Rpdl9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczRfZGl2X2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczRfZGl2X2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGV4eW5vczRfZ2F0ZV9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoY3R4LCBleHlub3M0X2dhdGVfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNF9nYXRlX2Nsa3MpKTsKIAogCWlmIChleHlub3M0X3NvYyA9PSBFWFlOT1M0MjEwKSB7Ci0JCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoZXh5bm9zNDIxMF9maXhlZF9yYXRlX2Nsa3MsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBleHlub3M0MjEwX2ZpeGVkX3JhdGVfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNDIxMF9maXhlZF9yYXRlX2Nsa3MpKTsKLQkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGV4eW5vczQyMTBfbXV4X2Nsa3MsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIGV4eW5vczQyMTBfbXV4X2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczQyMTBfbXV4X2Nsa3MpKTsKLQkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGV4eW5vczQyMTBfZGl2X2Nsa3MsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczQyMTBfZGl2X2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczQyMTBfZGl2X2Nsa3MpKTsKLQkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShleHlub3M0MjEwX2dhdGVfY2xrcywKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIGV4eW5vczQyMTBfZ2F0ZV9jbGtzLAogCQkJQVJSQVlfU0laRShleHlub3M0MjEwX2dhdGVfY2xrcykpOwotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhleHlub3M0MjEwX2FsaWFzZXMsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgZXh5bm9zNDIxMF9hbGlhc2VzLAogCQkJQVJSQVlfU0laRShleHlub3M0MjEwX2FsaWFzZXMpKTsKIAl9IGVsc2UgewotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9tdXgoZXh5bm9zNHgxMl9tdXhfY2xrcywKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgZXh5bm9zNHgxMl9tdXhfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNHgxMl9tdXhfY2xrcykpOwotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9kaXYoZXh5bm9zNHgxMl9kaXZfY2xrcywKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgZXh5bm9zNHgxMl9kaXZfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNHgxMl9kaXZfY2xrcykpOwotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGV4eW5vczR4MTJfZ2F0ZV9jbGtzLAorCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGN0eCwgZXh5bm9zNHgxMl9nYXRlX2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczR4MTJfZ2F0ZV9jbGtzKSk7Ci0JCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGV4eW5vczR4MTJfYWxpYXNlcywKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoY3R4LCBleHlub3M0eDEyX2FsaWFzZXMsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczR4MTJfYWxpYXNlcykpOwogCX0KIAotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGV4eW5vczRfYWxpYXNlcywKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhjdHgsIGV4eW5vczRfYWxpYXNlcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNF9hbGlhc2VzKSk7CiAKIAlleHlub3M0X2Nsa19zbGVlcF9pbml0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1MjUwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1MjUwLmMKaW5kZXggZTdlZTQ0Mi4uMWZhZDRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTI1MC5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczUyNTAuYwpAQCAtMjQsMTAgKzI0LDE0IEBACiAjZGVmaW5lIEFQTExfQ09OMAkJMHgxMDAKICNkZWZpbmUgU1JDX0NQVQkJCTB4MjAwCiAjZGVmaW5lIERJVl9DUFUwCQkweDUwMAorI2RlZmluZSBQV1JfQ1RSTDEJCTB4MTAyMAorI2RlZmluZSBQV1JfQ1RSTDIJCTB4MTAyNAogI2RlZmluZSBNUExMX0xPQ0sJCTB4NDAwMAogI2RlZmluZSBNUExMX0NPTjAJCTB4NDEwMAogI2RlZmluZSBTUkNfQ09SRTEJCTB4NDIwNAogI2RlZmluZSBHQVRFX0lQX0FDUAkJMHg4ODAwCisjZGVmaW5lIEdBVEVfSVBfSVNQMAkJMHhjODAwCisjZGVmaW5lIEdBVEVfSVBfSVNQMQkJMHhjODA0CiAjZGVmaW5lIENQTExfTE9DSwkJMHgxMDAyMAogI2RlZmluZSBFUExMX0xPQ0sJCTB4MTAwMzAKICNkZWZpbmUgVlBMTF9MT0NLCQkweDEwMDQwCkBAIC0zNyw2ICs0MSw3IEBACiAjZGVmaW5lIFZQTExfQ09OMAkJMHgxMDE0MAogI2RlZmluZSBHUExMX0NPTjAJCTB4MTAxNTAKICNkZWZpbmUgU1JDX1RPUDAJCTB4MTAyMTAKKyNkZWZpbmUgU1JDX1RPUDEJCTB4MTAyMTQKICNkZWZpbmUgU1JDX1RPUDIJCTB4MTAyMTgKICNkZWZpbmUgU1JDX1RPUDMJCTB4MTAyMWMKICNkZWZpbmUgU1JDX0dTQ0wJCTB4MTAyMjAKQEAgLTcxLDYgKzc2LDcgQEAKICNkZWZpbmUgR0FURV9JUF9HU0NMCQkweDEwOTIwCiAjZGVmaW5lIEdBVEVfSVBfRElTUDEJCTB4MTA5MjgKICNkZWZpbmUgR0FURV9JUF9NRkMJCTB4MTA5MmMKKyNkZWZpbmUgR0FURV9JUF9HM0QJCTB4MTA5MzAKICNkZWZpbmUgR0FURV9JUF9HRU4JCTB4MTA5MzQKICNkZWZpbmUgR0FURV9JUF9GU1lTCQkweDEwOTQ0CiAjZGVmaW5lIEdBVEVfSVBfUEVSSUMJCTB4MTA5NTAKQEAgLTgwLDYgKzg2LDIzIEBACiAjZGVmaW5lIFNSQ19DRFJFWAkJMHgyMDIwMAogI2RlZmluZSBQTExfRElWMl9TRUwJCTB4MjBhMjQKIAorLypCZWxvdyBkZWZpbml0aW9ucyBhcmUgdXNlZCBmb3IgUFdSX0NUUkwgc2V0dGluZ3MqLworI2RlZmluZSBQV1JfQ1RSTDFfQ09SRTJfRE9XTl9SQVRJTwkJKDcgPDwgMjgpCisjZGVmaW5lIFBXUl9DVFJMMV9DT1JFMV9ET1dOX1JBVElPCQkoNyA8PCAxNikKKyNkZWZpbmUgUFdSX0NUUkwxX0RJVjJfRE9XTl9FTgkJCSgxIDw8IDkpCisjZGVmaW5lIFBXUl9DVFJMMV9ESVYxX0RPV05fRU4JCQkoMSA8PCA4KQorI2RlZmluZSBQV1JfQ1RSTDFfVVNFX0NPUkUxX1dGRQkJCSgxIDw8IDUpCisjZGVmaW5lIFBXUl9DVFJMMV9VU0VfQ09SRTBfV0ZFCQkJKDEgPDwgNCkKKyNkZWZpbmUgUFdSX0NUUkwxX1VTRV9DT1JFMV9XRkkJCQkoMSA8PCAxKQorI2RlZmluZSBQV1JfQ1RSTDFfVVNFX0NPUkUwX1dGSQkJCSgxIDw8IDApCisKKyNkZWZpbmUgUFdSX0NUUkwyX0RJVjJfVVBfRU4JCQkoMSA8PCAyNSkKKyNkZWZpbmUgUFdSX0NUUkwyX0RJVjFfVVBfRU4JCQkoMSA8PCAyNCkKKyNkZWZpbmUgUFdSX0NUUkwyX0RVUl9TVEFOREJZMl9WQUwJCSgxIDw8IDE2KQorI2RlZmluZSBQV1JfQ1RSTDJfRFVSX1NUQU5EQlkxX1ZBTAkJKDEgPDwgOCkKKyNkZWZpbmUgUFdSX0NUUkwyX0NPUkUyX1VQX1JBVElPCQkoMSA8PCA0KQorI2RlZmluZSBQV1JfQ1RSTDJfQ09SRTFfVVBfUkFUSU8JCSgxIDw8IDApCisKIC8qIGxpc3Qgb2YgUExMcyB0byBiZSByZWdpc3RlcmVkICovCiBlbnVtIGV4eW5vczUyNTBfcGxscyB7CiAJYXBsbCwgbXBsbCwgY3BsbCwgZXBsbCwgdnBsbCwgZ3BsbCwgYnBsbCwKQEAgLTk4LDggKzEyMSwxMSBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh5bm9zNTI1MF9jbGtfcmVnc1tdIF9faW5pdGRhdGEgPSB7CiAJU1JDX0NQVSwKIAlESVZfQ1BVMCwKKwlQV1JfQ1RSTDEsCisJUFdSX0NUUkwyLAogCVNSQ19DT1JFMSwKIAlTUkNfVE9QMCwKKwlTUkNfVE9QMSwKIAlTUkNfVE9QMiwKIAlTUkNfVE9QMywKIAlTUkNfR1NDTCwKQEAgLTEzMyw2ICsxNTksNyBAQAogCURJVl9QRVJJQzUsCiAJR0FURV9JUF9HU0NMLAogCUdBVEVfSVBfTUZDLAorCUdBVEVfSVBfRzNELAogCUdBVEVfSVBfR0VOLAogCUdBVEVfSVBfRlNZUywKIAlHQVRFX0lQX1BFUklDLApAQCAtMTQxLDYgKzE2OCw4IEBACiAJUExMX0RJVjJfU0VMLAogCUdBVEVfSVBfRElTUDEsCiAJR0FURV9JUF9BQ1AsCisJR0FURV9JUF9JU1AwLAorCUdBVEVfSVBfSVNQMSwKIH07CiAKIHN0YXRpYyBpbnQgZXh5bm9zNTI1MF9jbGtfc3VzcGVuZCh2b2lkKQpAQCAtMTg5LDEzICsyMTgsMTYgQEAKIFBOQU1FKG1vdXRfdnBsbF9wKQk9IHsgIm1vdXRfdnBsbHNyYyIsICJmb3V0X3ZwbGwiIH07CiBQTkFNRShtb3V0X2NwbGxfcCkJPSB7ICJmaW5fcGxsIiwgImZvdXRfY3BsbCIgfTsKIFBOQU1FKG1vdXRfZXBsbF9wKQk9IHsgImZpbl9wbGwiLCAiZm91dF9lcGxsIiB9OworUE5BTUUobW91dF9ncGxsX3ApCT0geyAiZmluX3BsbCIsICJmb3V0X2dwbGwiIH07CiBQTkFNRShtb3V0X21wbGxfdXNlcl9wKQk9IHsgImZpbl9wbGwiLCAibW91dF9tcGxsIiB9OwogUE5BTUUobW91dF9icGxsX3VzZXJfcCkJPSB7ICJmaW5fcGxsIiwgIm1vdXRfYnBsbCIgfTsKIFBOQU1FKG1vdXRfYWNsazE2Nl9wKQk9IHsgIm1vdXRfY3BsbCIsICJtb3V0X21wbGxfdXNlciIgfTsKIFBOQU1FKG1vdXRfYWNsazIwMF9wKQk9IHsgIm1vdXRfbXBsbF91c2VyIiwgIm1vdXRfYnBsbF91c2VyIiB9OworUE5BTUUobW91dF9hY2xrNDAwX3ApCT0geyAibW91dF9hY2xrNDAwX2czZF9taWQiLCAibW91dF9ncGxsIiB9OwogUE5BTUUobW91dF9hY2xrMjAwX3N1Yl9wKSA9IHsgImZpbl9wbGwiLCAiZGl2X2FjbGsyMDAiIH07CiBQTkFNRShtb3V0X2FjbGsyNjZfc3ViX3ApID0geyAiZmluX3BsbCIsICJkaXZfYWNsazI2NiIgfTsKIFBOQU1FKG1vdXRfYWNsazMzM19zdWJfcCkgPSB7ICJmaW5fcGxsIiwgImRpdl9hY2xrMzMzIiB9OworUE5BTUUobW91dF9hY2xrNDAwX2lzcF9zdWJfcCkgPSB7ICJmaW5fcGxsIiwgImRpdl9hY2xrNDAwX2lzcCIgfTsKIFBOQU1FKG1vdXRfaGRtaV9wKQk9IHsgImRpdl9oZG1pX3BpeGVsIiwgInNjbGtfaGRtaXBoeSIgfTsKIFBOQU1FKG1vdXRfdXNiM19wKQk9IHsgIm1vdXRfbXBsbF91c2VyIiwgIm1vdXRfY3BsbCIgfTsKIFBOQU1FKG1vdXRfZ3JvdXAxX3ApCT0geyAiZmluX3BsbCIsICJmaW5fcGxsIiwgInNjbGtfaGRtaTI3bSIsCkBAIC0yNzMsMTUgKzMwNSwyMyBAQAogCU1VWCgwLCAibW91dF9hY2xrMTY2IiwgbW91dF9hY2xrMTY2X3AsIFNSQ19UT1AwLCA4LCAxKSwKIAlNVVgoMCwgIm1vdXRfYWNsazIwMCIsIG1vdXRfYWNsazIwMF9wLCBTUkNfVE9QMCwgMTIsIDEpLAogCU1VWCgwLCAibW91dF9hY2xrMzMzIiwgbW91dF9hY2xrMTY2X3AsIFNSQ19UT1AwLCAxNiwgMSksCisJTVVYKDAsICJtb3V0X2FjbGs0MDBfZzNkX21pZCIsIG1vdXRfYWNsazIwMF9wLCBTUkNfVE9QMCwgMjAsIDEpLAorCisJTVVYKDAsICJtb3V0X2FjbGs0MDBfaXNwIiwgbW91dF9hY2xrMjAwX3AsIFNSQ19UT1AxLCAyNCwgMSksCisJTVVYKDAsICJtb3V0X2FjbGs0MDBfZzNkIiwgbW91dF9hY2xrNDAwX3AsIFNSQ19UT1AxLCAyOCwgMSksCiAKIAlNVVgoMCwgIm1vdXRfY3BsbCIsIG1vdXRfY3BsbF9wLCBTUkNfVE9QMiwgOCwgMSksCiAJTVVYKDAsICJtb3V0X2VwbGwiLCBtb3V0X2VwbGxfcCwgU1JDX1RPUDIsIDEyLCAxKSwKIAlNVVgoMCwgIm1vdXRfdnBsbCIsIG1vdXRfdnBsbF9wLCBTUkNfVE9QMiwgMTYsIDEpLAogCU1VWCgwLCAibW91dF9tcGxsX3VzZXIiLCBtb3V0X21wbGxfdXNlcl9wLCBTUkNfVE9QMiwgMjAsIDEpLAogCU1VWCgwLCAibW91dF9icGxsX3VzZXIiLCBtb3V0X2JwbGxfdXNlcl9wLCBTUkNfVE9QMiwgMjQsIDEpLAorCU1VWChDTEtfTU9VVF9HUExMLCAibW91dF9ncGxsIiwgbW91dF9ncGxsX3AsIFNSQ19UT1AyLCAyOCwgMSksCiAKIAlNVVgoMCwgIm1vdXRfYWNsazIwMF9kaXNwMV9zdWIiLCBtb3V0X2FjbGsyMDBfc3ViX3AsIFNSQ19UT1AzLCA0LCAxKSwKIAlNVVgoMCwgIm1vdXRfYWNsazI2Nl9nc2NsX3N1YiIsIG1vdXRfYWNsazI2Nl9zdWJfcCwgU1JDX1RPUDMsIDgsIDEpLAorCU1VWCgwLCAibW91dF9hY2xrXzI2Nl9pc3Bfc3ViIiwgbW91dF9hY2xrMjY2X3N1Yl9wLCBTUkNfVE9QMywgMTYsIDEpLAorCU1VWCgwLCAibW91dF9hY2xrXzQwMF9pc3Bfc3ViIiwgbW91dF9hY2xrNDAwX2lzcF9zdWJfcCwKKwkJCVNSQ19UT1AzLCAyMCwgMSksCiAJTVVYKDAsICJtb3V0X2FjbGszMzNfc3ViIiwgbW91dF9hY2xrMzMzX3N1Yl9wLCBTUkNfVE9QMywgMjQsIDEpLAogCiAJTVVYKDAsICJtb3V0X2NhbV9iYXllciIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19HU0NMLCAxMiwgNCksCkBAIC0zNTEsNyArMzkxLDEwIEBACiAJRElWKDAsICJkaXZfYWNsazIwMCIsICJtb3V0X2FjbGsyMDAiLCBESVZfVE9QMCwgMTIsIDMpLAogCURJVigwLCAiZGl2X2FjbGsyNjYiLCAibW91dF9tcGxsX3VzZXIiLCBESVZfVE9QMCwgMTYsIDMpLAogCURJVigwLCAiZGl2X2FjbGszMzMiLCAibW91dF9hY2xrMzMzIiwgRElWX1RPUDAsIDIwLCAzKSwKKwlESVYoMCwgImRpdl9hY2xrNDAwX2czZCIsICJtb3V0X2FjbGs0MDBfZzNkIiwgRElWX1RPUDAsCisJCQkJCQkJMjQsIDMpLAogCisJRElWKDAsICJkaXZfYWNsazQwMF9pc3AiLCAibW91dF9hY2xrNDAwX2lzcCIsIERJVl9UT1AxLCAyMCwgMyksCiAJRElWKDAsICJkaXZfYWNsazY2X3ByZSIsICJtb3V0X21wbGxfdXNlciIsIERJVl9UT1AxLCAyNCwgMyksCiAKIAlESVYoMCwgImRpdl9jYW1fYmF5ZXIiLCAibW91dF9jYW1fYmF5ZXIiLCBESVZfR1NDTCwgMTIsIDQpLApAQCAtNDI4LDYgKzQ3MSw3IEBACiAJICogQ01VX0FDUAogCSAqLwogCUdBVEUoQ0xLX01ETUEwLCAibWRtYTAiLCAiZGl2X2FjbGsyNjYiLCBHQVRFX0lQX0FDUCwgMSwgMCwgMCksCisJR0FURShDTEtfU1NTLCAic3NzIiwgImRpdl9hY2xrMjY2IiwgR0FURV9JUF9BQ1AsIDIsIDAsIDApLAogCUdBVEUoQ0xLX0cyRCwgImcyZCIsICJkaXZfYWNsazIwMCIsIEdBVEVfSVBfQUNQLCAzLCAwLCAwKSwKIAlHQVRFKENMS19TTU1VX01ETUEwLCAic21tdV9tZG1hMCIsICJkaXZfYWNsazI2NiIsIEdBVEVfSVBfQUNQLCA1LCAwLCAwKSwKIApAQCAtNTMzLDcgKzU3Nyw4IEBACiAJCTApLAogCUdBVEUoQ0xLX1NNTVVfTUZDTCwgInNtbXVfbWZjbCIsICJtb3V0X2FjbGszMzNfc3ViIiwgR0FURV9JUF9NRkMsIDIsIDAsCiAJCTApLAotCisJR0FURShDTEtfRzNELCAiZzNkIiwgImRpdl9hY2xrNDAwX2czZCIsIEdBVEVfSVBfRzNELCAwLAorCQkJCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKIAlHQVRFKENMS19ST1RBVE9SLCAicm90YXRvciIsICJkaXZfYWNsazI2NiIsIEdBVEVfSVBfR0VOLCAxLCAwLCAwKSwKIAlHQVRFKENMS19KUEVHLCAianBlZyIsICJkaXZfYWNsazE2NiIsIEdBVEVfSVBfR0VOLCAyLCAwLCAwKSwKIAlHQVRFKENMS19NRE1BMSwgIm1kbWExIiwgImRpdl9hY2xrMjY2IiwgR0FURV9JUF9HRU4sIDQsIDAsIDApLApAQCAtNjE1LDYgKzY2MCwzMSBAQAogCUdBVEUoQ0xLX1dEVCwgIndkdCIsICJkaXZfYWNsazY2IiwgR0FURV9JUF9QRVJJUywgMTksIDAsIDApLAogCUdBVEUoQ0xLX1JUQywgInJ0YyIsICJkaXZfYWNsazY2IiwgR0FURV9JUF9QRVJJUywgMjAsIDAsIDApLAogCUdBVEUoQ0xLX1RNVSwgInRtdSIsICJkaXZfYWNsazY2IiwgR0FURV9JUF9QRVJJUywgMjEsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfVFYsICJzbW11X3R2IiwgIm1vdXRfYWNsazIwMF9kaXNwMV9zdWIiLAorCQkJR0FURV9JUF9ESVNQMSwgMiwgMCwgMCksCisJR0FURShDTEtfU01NVV9GSU1EMSwgInNtbXVfZmltZDEiLCAibW91dF9hY2xrMjAwX2Rpc3AxX3N1YiIsCisJCQlHQVRFX0lQX0RJU1AxLCA4LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VXzJELCAic21tdV8yZCIsICJkaXZfYWNsazIwMCIsIEdBVEVfSVBfQUNQLCA3LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0ZJTUNfSVNQLCAic21tdV9maW1jX2lzcCIsICJtb3V0X2FjbGtfMjY2X2lzcF9zdWIiLAorCQkJR0FURV9JUF9JU1AwLCA4LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0ZJTUNfRFJDLCAic21tdV9maW1jX2RyYyIsICJtb3V0X2FjbGtfMjY2X2lzcF9zdWIiLAorCQkJR0FURV9JUF9JU1AwLCA5LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0ZJTUNfRkQsICJzbW11X2ZpbWNfZmQiLCAibW91dF9hY2xrXzI2Nl9pc3Bfc3ViIiwKKwkJCUdBVEVfSVBfSVNQMCwgMTAsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfRklNQ19TQ0MsICJzbW11X2ZpbWNfc2NjIiwgIm1vdXRfYWNsa18yNjZfaXNwX3N1YiIsCisJCQlHQVRFX0lQX0lTUDAsIDExLCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0ZJTUNfU0NQLCAic21tdV9maW1jX3NjcCIsICJtb3V0X2FjbGtfMjY2X2lzcF9zdWIiLAorCQkJR0FURV9JUF9JU1AwLCAxMiwgMCwgMCksCisJR0FURShDTEtfU01NVV9GSU1DX01DVSwgInNtbXVfZmltY19tY3UiLCAibW91dF9hY2xrXzQwMF9pc3Bfc3ViIiwKKwkJCUdBVEVfSVBfSVNQMCwgMTMsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfRklNQ19PREMsICJzbW11X2ZpbWNfb2RjIiwgIm1vdXRfYWNsa18yNjZfaXNwX3N1YiIsCisJCQlHQVRFX0lQX0lTUDEsIDQsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfRklNQ19ESVMwLCAic21tdV9maW1jX2RpczAiLCAibW91dF9hY2xrXzI2Nl9pc3Bfc3ViIiwKKwkJCUdBVEVfSVBfSVNQMSwgNSwgMCwgMCksCisJR0FURShDTEtfU01NVV9GSU1DX0RJUzEsICJzbW11X2ZpbWNfZGlzMSIsICJtb3V0X2FjbGtfMjY2X2lzcF9zdWIiLAorCQkJR0FURV9JUF9JU1AxLCA2LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0ZJTUNfM0ROUiwgInNtbXVfZmltY18zZG5yIiwgIm1vdXRfYWNsa18yNjZfaXNwX3N1YiIsCisJCQlHQVRFX0lQX0lTUDEsIDcsIDAsIDApLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYW1zdW5nX3BsbF9yYXRlX3RhYmxlIHZwbGxfMjRtaHpfdGJsW10gX19pbml0ZGF0YSA9IHsKQEAgLTY4Niw2ICs3NTYsOSBAQAogLyogcmVnaXN0ZXIgZXh5bm94NTI1MCBjbG9ja3MgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1MjUwX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CisJc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHg7CisJdW5zaWduZWQgaW50IHRtcDsKKwogCWlmIChucCkgewogCQlyZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKIAkJaWYgKCFyZWdfYmFzZSkKQEAgLTY5NCwxMSArNzY3LDEzIEBACiAJCXBhbmljKCIlczogdW5hYmxlIHRvIGRldGVybWluZSBzb2NcbiIsIF9fZnVuY19fKTsKIAl9CiAKLQlzYW1zdW5nX2Nsa19pbml0KG5wLCByZWdfYmFzZSwgQ0xLX05SX0NMS1MpOwotCXNhbXN1bmdfY2xrX29mX3JlZ2lzdGVyX2ZpeGVkX2V4dChleHlub3M1MjUwX2ZpeGVkX3JhdGVfZXh0X2Nsa3MsCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIENMS19OUl9DTEtTKTsKKwlpZiAoIWN0eCkKKwkJcGFuaWMoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgY29udGV4dC5cbiIsIF9fZnVuY19fKTsKKwlzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoY3R4LCBleHlub3M1MjUwX2ZpeGVkX3JhdGVfZXh0X2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczUyNTBfZml4ZWRfcmF0ZV9leHRfY2xrcyksCiAJCQlleHRfY2xrX21hdGNoKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9tdXgoZXh5bm9zNTI1MF9wbGxfcG11eF9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIGV4eW5vczUyNTBfcGxsX3BtdXhfY2xrcywKIAkJCQlBUlJBWV9TSVpFKGV4eW5vczUyNTBfcGxsX3BtdXhfY2xrcykpOwogCiAJaWYgKF9nZXRfcmF0ZSgiZmluX3BsbCIpID09IDI0ICogTUhaKSB7CkBAIC03MDksMTkgKzc4NCw0MCBAQAogCWlmIChfZ2V0X3JhdGUoIm1vdXRfdnBsbHNyYyIpID09IDI0ICogTUhaKQogCQlleHlub3M1MjUwX3BsbHNbdnBsbF0ucmF0ZV90YWJsZSA9ICB2cGxsXzI0bWh6X3RibDsKIAotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChleHlub3M1MjUwX3BsbHMsIEFSUkFZX1NJWkUoZXh5bm9zNTI1MF9wbGxzKSwKLQkJCQkJcmVnX2Jhc2UpOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoZXh5bm9zNTI1MF9maXhlZF9yYXRlX2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKGN0eCwgZXh5bm9zNTI1MF9wbGxzLAorCQkJQVJSQVlfU0laRShleHlub3M1MjUwX3BsbHMpLAorCQkJcmVnX2Jhc2UpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBleHlub3M1MjUwX2ZpeGVkX3JhdGVfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNTI1MF9maXhlZF9yYXRlX2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoZXh5bm9zNTI1MF9maXhlZF9mYWN0b3JfY2xrcywKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoY3R4LCBleHlub3M1MjUwX2ZpeGVkX2ZhY3Rvcl9jbGtzLAogCQkJQVJSQVlfU0laRShleHlub3M1MjUwX2ZpeGVkX2ZhY3Rvcl9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGV4eW5vczUyNTBfbXV4X2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgZXh5bm9zNTI1MF9tdXhfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNTI1MF9tdXhfY2xrcykpOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihleHlub3M1MjUwX2Rpdl9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczUyNTBfZGl2X2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczUyNTBfZGl2X2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGV4eW5vczUyNTBfZ2F0ZV9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoY3R4LCBleHlub3M1MjUwX2dhdGVfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNTI1MF9nYXRlX2Nsa3MpKTsKIAorCS8qCisJICogRW5hYmxlIGFybSBjbG9jayBkb3duIChpbiBpZGxlKSBhbmQgc2V0IGFybSBkaXZpZGVyCisJICogcmF0aW9zIGluIFdGSS9XRkUgc3RhdGUuCisJICovCisJdG1wID0gKFBXUl9DVFJMMV9DT1JFMl9ET1dOX1JBVElPIHwgUFdSX0NUUkwxX0NPUkUxX0RPV05fUkFUSU8gfAorCQlQV1JfQ1RSTDFfRElWMl9ET1dOX0VOIHwgUFdSX0NUUkwxX0RJVjFfRE9XTl9FTiB8CisJCVBXUl9DVFJMMV9VU0VfQ09SRTFfV0ZFIHwgUFdSX0NUUkwxX1VTRV9DT1JFMF9XRkUgfAorCQlQV1JfQ1RSTDFfVVNFX0NPUkUxX1dGSSB8IFBXUl9DVFJMMV9VU0VfQ09SRTBfV0ZJKTsKKwlfX3Jhd193cml0ZWwodG1wLCByZWdfYmFzZSArIFBXUl9DVFJMMSk7CisKKwkvKgorCSAqIEVuYWJsZSBhcm0gY2xvY2sgdXAgKG9uIGV4aXRpbmcgaWRsZSkuIFNldCBhcm0gZGl2aWRlcgorCSAqIHJhdGlvcyB3aGVuIG5vdCBpbiBpZGxlIGFsb25nIHdpdGggdGhlIHN0YW5kYnkgZHVyYXRpb24KKwkgKiByYXRpb3MuCisJICovCisJdG1wID0gKFBXUl9DVFJMMl9ESVYyX1VQX0VOIHwgUFdSX0NUUkwyX0RJVjFfVVBfRU4gfAorCQlQV1JfQ1RSTDJfRFVSX1NUQU5EQlkyX1ZBTCB8IFBXUl9DVFJMMl9EVVJfU1RBTkRCWTFfVkFMIHwKKwkJUFdSX0NUUkwyX0NPUkUyX1VQX1JBVElPIHwgUFdSX0NUUkwyX0NPUkUxX1VQX1JBVElPKTsKKwlfX3Jhd193cml0ZWwodG1wLCByZWdfYmFzZSArIFBXUl9DVFJMMik7CisKIAlleHlub3M1MjUwX2Nsa19zbGVlcF9pbml0KCk7CiAKIAlwcl9pbmZvKCJFeHlub3M1MjUwOiBjbG9jayBzZXR1cCBjb21wbGV0ZWQsIGFybWNsaz0lbGRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1MjYwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1MjYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1OTZiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczUyNjAuYwpAQCAtMCwwICsxLDE5ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEF1dGhvcjogUmFodWwgU2hhcm1hIDxyYWh1bC5zaGFybWFAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb21tb24gQ2xvY2sgRnJhbWV3b3JrIHN1cHBvcnQgZm9yIEV4eW5vczUyNjAgU29DLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgorCisjaW5jbHVkZSAiY2xrLWV4eW5vczUyNjAuaCIKKyNpbmNsdWRlICJjbGsuaCIKKyNpbmNsdWRlICJjbGstcGxsLmgiCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9leHlub3M1MjYwLWNsay5oPgorCitzdGF0aWMgTElTVF9IRUFEKGNsb2NrX3JlZ19jYWNoZV9saXN0KTsKKworc3RydWN0IGV4eW5vczUyNjBfY2xvY2tfcmVnX2NhY2hlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcmVnX2R1bXAgKnJkdW1wOworCXVuc2lnbmVkIGludCByZF9udW07Cit9OworCitzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyB7CisJLyogbGlzdCBvZiBwbGwgY2xvY2tzIGFuZCByZXNwZWN0aXZlIGNvdW50ICovCisJc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrICpwbGxfY2xrczsKKwl1bnNpZ25lZCBpbnQgbnJfcGxsX2Nsa3M7CisJLyogbGlzdCBvZiBtdXggY2xvY2tzIGFuZCByZXNwZWN0aXZlIGNvdW50ICovCisJc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrICptdXhfY2xrczsKKwl1bnNpZ25lZCBpbnQgbnJfbXV4X2Nsa3M7CisJLyogbGlzdCBvZiBkaXYgY2xvY2tzIGFuZCByZXNwZWN0aXZlIGNvdW50ICovCisJc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrICpkaXZfY2xrczsKKwl1bnNpZ25lZCBpbnQgbnJfZGl2X2Nsa3M7CisJLyogbGlzdCBvZiBnYXRlIGNsb2NrcyBhbmQgcmVzcGVjdGl2ZSBjb3VudCAqLworCXN0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgKmdhdGVfY2xrczsKKwl1bnNpZ25lZCBpbnQgbnJfZ2F0ZV9jbGtzOworCS8qIGxpc3Qgb2YgZml4ZWQgY2xvY2tzIGFuZCByZXNwZWN0aXZlIGNvdW50ICovCisJc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayAqZml4ZWRfY2xrczsKKwl1bnNpZ25lZCBpbnQgbnJfZml4ZWRfY2xrczsKKwkvKiB0b3RhbCBudW1iZXIgb2YgY2xvY2tzIHdpdGggSURzIGFzc2lnbmVkKi8KKwl1bnNpZ25lZCBpbnQgbnJfY2xrX2lkczsKKworCS8qIGxpc3QgYW5kIG51bWJlciBvZiBjbG9ja3MgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAqY2xrX3JlZ3M7CisJdW5zaWduZWQgaW50IG5yX2Nsa19yZWdzOworfTsKKworLyoKKyAqIEFwcGxpY2FibGUgZm9yIGFsbCAyNTUwIFR5cGUgUExMUyBmb3IgRXh5bm9zNTI2MCwgbGlzdGVkIGJlbG93CisgKiBESVNQX1BMTCwgRUdMX1BMTCwgS0ZDX1BMTCwgTUVNX1BMTCwgQlVTX1BMTCwgTUVESUFfUExMLCBHM0RfUExMLgorICovCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX3JhdGVfdGFibGUgcGxsMjU1MF8yNG1oel90YmxbXSBfX2luaXRkYXRhID0geworCVBMTF8zNVhYX1JBVEUoMTcwMDAwMDAwMCwgNDI1LCA2LCAwKSwKKwlQTExfMzVYWF9SQVRFKDE2MDAwMDAwMDAsIDIwMCwgMywgMCksCisJUExMXzM1WFhfUkFURSgxNTAwMDAwMDAwLCAyNTAsIDQsIDApLAorCVBMTF8zNVhYX1JBVEUoMTQwMDAwMDAwMCwgMTc1LCAzLCAwKSwKKwlQTExfMzVYWF9SQVRFKDEzMDAwMDAwMDAsIDMyNSwgNiwgMCksCisJUExMXzM1WFhfUkFURSgxMjAwMDAwMDAwLCA0MDAsIDQsIDEpLAorCVBMTF8zNVhYX1JBVEUoMTEwMDAwMDAwMCwgMjc1LCAzLCAxKSwKKwlQTExfMzVYWF9SQVRFKDEwMDAwMDAwMDAsIDI1MCwgMywgMSksCisJUExMXzM1WFhfUkFURSg5MzMwMDAwMDAsIDMxMSwgNCwgMSksCisJUExMXzM1WFhfUkFURSg5MDAwMDAwMDAsIDMwMCwgNCwgMSksCisJUExMXzM1WFhfUkFURSg4MDAwMDAwMDAsIDIwMCwgMywgMSksCisJUExMXzM1WFhfUkFURSg3MzMwMDAwMDAsIDczMywgMTIsIDEpLAorCVBMTF8zNVhYX1JBVEUoNzAwMDAwMDAwLCAxNzUsIDMsIDEpLAorCVBMTF8zNVhYX1JBVEUoNjY3MDAwMDAwLCA2NjcsIDEyLCAxKSwKKwlQTExfMzVYWF9SQVRFKDYzMzAwMDAwMCwgMjExLCA0LCAxKSwKKwlQTExfMzVYWF9SQVRFKDYyMDAwMDAwMCwgMzEwLCAzLCAyKSwKKwlQTExfMzVYWF9SQVRFKDYwMDAwMDAwMCwgNDAwLCA0LCAyKSwKKwlQTExfMzVYWF9SQVRFKDU0MzAwMDAwMCwgMzYyLCA0LCAyKSwKKwlQTExfMzVYWF9SQVRFKDUzMzAwMDAwMCwgNTMzLCA2LCAyKSwKKwlQTExfMzVYWF9SQVRFKDUwMDAwMDAwMCwgMjUwLCAzLCAyKSwKKwlQTExfMzVYWF9SQVRFKDQ1MDAwMDAwMCwgMzAwLCA0LCAyKSwKKwlQTExfMzVYWF9SQVRFKDQwMDAwMDAwMCwgMjAwLCAzLCAyKSwKKwlQTExfMzVYWF9SQVRFKDM1MDAwMDAwMCwgMTc1LCAzLCAyKSwKKwlQTExfMzVYWF9SQVRFKDMwMDAwMDAwMCwgNDAwLCA0LCAzKSwKKwlQTExfMzVYWF9SQVRFKDI2NjAwMDAwMCwgMjY2LCAzLCAzKSwKKwlQTExfMzVYWF9SQVRFKDIwMDAwMDAwMCwgMjAwLCAzLCAzKSwKKwlQTExfMzVYWF9SQVRFKDE2MDAwMDAwMCwgMTYwLCAzLCAzKSwKK307CisKKy8qCisgKiBBcHBsaWNhYmxlIGZvciAyNjUwIFR5cGUgUExMIGZvciBBVURfUExMLgorICovCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX3JhdGVfdGFibGUgcGxsMjY1MF8yNG1oel90YmxbXSBfX2luaXRkYXRhID0geworCVBMTF8zNlhYX1JBVEUoMTYwMDAwMDAwMCwgMjAwLCAzLCAwLCAwKSwKKwlQTExfMzZYWF9SQVRFKDEyMDAwMDAwMDAsIDEwMCwgMiwgMCwgMCksCisJUExMXzM2WFhfUkFURSgxMDAwMDAwMDAwLCAyNTAsIDMsIDEsIDApLAorCVBMTF8zNlhYX1JBVEUoODAwMDAwMDAwLCAyMDAsIDMsIDEsIDApLAorCVBMTF8zNlhYX1JBVEUoNjAwMDAwMDAwLCAxMDAsIDIsIDEsIDApLAorCVBMTF8zNlhYX1JBVEUoNTMyMDAwMDAwLCAyNjYsIDMsIDIsIDApLAorCVBMTF8zNlhYX1JBVEUoNDgwMDAwMDAwLCAxNjAsIDIsIDIsIDApLAorCVBMTF8zNlhYX1JBVEUoNDMyMDAwMDAwLCAxNDQsIDIsIDIsIDApLAorCVBMTF8zNlhYX1JBVEUoNDAwMDAwMDAwLCAyMDAsIDMsIDIsIDApLAorCVBMTF8zNlhYX1JBVEUoMzk0MDczMTMwLCA0NTksIDcsIDIsIDQ5MjgyKSwKKwlQTExfMzZYWF9SQVRFKDMzMzAwMDAwMCwgMTExLCAyLCAyLCAwKSwKKwlQTExfMzZYWF9SQVRFKDMwMDAwMDAwMCwgMTAwLCAyLCAyLCAwKSwKKwlQTExfMzZYWF9SQVRFKDI2NjAwMDAwMCwgMjY2LCAzLCAzLCAwKSwKKwlQTExfMzZYWF9SQVRFKDIwMDAwMDAwMCwgMjAwLCAzLCAzLCAwKSwKKwlQTExfMzZYWF9SQVRFKDE2NjAwMDAwMCwgMTY2LCAzLCAzLCAwKSwKKwlQTExfMzZYWF9SQVRFKDEzMzAwMDAwMCwgMjY2LCAzLCA0LCAwKSwKKwlQTExfMzZYWF9SQVRFKDEwMDAwMDAwMCwgMjAwLCAzLCA0LCAwKSwKKwlQTExfMzZYWF9SQVRFKDY2MDAwMDAwLCAxNzYsIDIsIDUsIDApLAorfTsKKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCitzdGF0aWMgaW50IGV4eW5vczUyNjBfY2xrX3N1c3BlbmQodm9pZCkKK3sKKwlzdHJ1Y3QgZXh5bm9zNTI2MF9jbG9ja19yZWdfY2FjaGUgKmNhY2hlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZSwgJmNsb2NrX3JlZ19jYWNoZV9saXN0LCBub2RlKQorCQlzYW1zdW5nX2Nsa19zYXZlKGNhY2hlLT5yZWdfYmFzZSwgY2FjaGUtPnJkdW1wLAorCQkJCWNhY2hlLT5yZF9udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczUyNjBfY2xrX3Jlc3VtZSh2b2lkKQoreworCXN0cnVjdCBleHlub3M1MjYwX2Nsb2NrX3JlZ19jYWNoZSAqY2FjaGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlLCAmY2xvY2tfcmVnX2NhY2hlX2xpc3QsIG5vZGUpCisJCXNhbXN1bmdfY2xrX3Jlc3RvcmUoY2FjaGUtPnJlZ19iYXNlLCBjYWNoZS0+cmR1bXAsCisJCQkJY2FjaGUtPnJkX251bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgZXh5bm9zNTI2MF9jbGtfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQgPSBleHlub3M1MjYwX2Nsa19zdXNwZW5kLAorCS5yZXN1bWUgPSBleHlub3M1MjYwX2Nsa19yZXN1bWUsCit9OworCitzdGF0aWMgdm9pZCBleHlub3M1MjYwX2Nsa19zbGVlcF9pbml0KHZvaWQgX19pb21lbSAqcmVnX2Jhc2UsCisJCQl1bnNpZ25lZCBsb25nICpyZHVtcCwKKwkJCXVuc2lnbmVkIGxvbmcgbnJfcmR1bXApCit7CisJc3RydWN0IGV4eW5vczUyNjBfY2xvY2tfcmVnX2NhY2hlICpyZWdfY2FjaGU7CisKKwlyZWdfY2FjaGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXh5bm9zNTI2MF9jbG9ja19yZWdfY2FjaGUpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWdfY2FjaGUpCisJCXBhbmljKCJjb3VsZCBub3QgYWxsb2NhdGUgcmVnaXN0ZXIgY2FjaGUuXG4iKTsKKworCXJlZ19jYWNoZS0+cmR1bXAgPSBzYW1zdW5nX2Nsa19hbGxvY19yZWdfZHVtcChyZHVtcCwgbnJfcmR1bXApOworCisJaWYgKCFyZWdfY2FjaGUtPnJkdW1wKQorCQlwYW5pYygiY291bGQgbm90IGFsbG9jYXRlIHJlZ2lzdGVyIGR1bXAgc3RvcmFnZS5cbiIpOworCisJaWYgKGxpc3RfZW1wdHkoJmNsb2NrX3JlZ19jYWNoZV9saXN0KSkKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vczUyNjBfY2xrX3N5c2NvcmVfb3BzKTsKKworCXJlZ19jYWNoZS0+cmRfbnVtID0gbnJfcmR1bXA7CisJcmVnX2NhY2hlLT5yZWdfYmFzZSA9IHJlZ19iYXNlOworCWxpc3RfYWRkX3RhaWwoJnJlZ19jYWNoZS0+bm9kZSwgJmNsb2NrX3JlZ19jYWNoZV9saXN0KTsKK30KKworI2Vsc2UKK3N0YXRpYyB2b2lkIGV4eW5vczUyNjBfY2xrX3NsZWVwX2luaXQodm9pZCBfX2lvbWVtICpyZWdfYmFzZSwKKwkJCXVuc2lnbmVkIGxvbmcgKnJkdW1wLAorCQkJdW5zaWduZWQgbG9uZyBucl9yZHVtcCl7fQorI2VuZGlmCisKKy8qCisgKiBDb21tb24gZnVuY3Rpb24gd2hpY2ggcmVnaXN0ZXJzIHBsbHMsIG11eGVzLCBkaXZpZGVycyBhbmQgZ2F0ZXMKKyAqIGZvciBlYWNoIENNVS4gSXQgYWxzbyBhZGQgQ01VIHJlZ2lzdGVyIGxpc3QgdG8gcmVnaXN0ZXIgY2FjaGUuCisgKi8KKwordm9pZCBfX2luaXQgZXh5bm9zNTI2MF9jbXVfcmVnaXN0ZXJfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQlzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyAqY211KQoreworCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CisJc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHg7CisKKwlyZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoIXJlZ19iYXNlKQorCQlwYW5pYygiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisKKwljdHggPSBzYW1zdW5nX2Nsa19pbml0KG5wLCByZWdfYmFzZSwgY211LT5ucl9jbGtfaWRzKTsKKwlpZiAoIWN0eCkKKwkJcGFuaWMoIiVzOiB1bmFibGUgdG8gYWxsbG9jYXRlIGN0eFxuIiwgX19mdW5jX18pOworCisJaWYgKGNtdS0+cGxsX2Nsa3MpCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChjdHgsIGNtdS0+cGxsX2Nsa3MsIGNtdS0+bnJfcGxsX2Nsa3MsCisJCQlyZWdfYmFzZSk7CisJaWYgKGNtdS0+bXV4X2Nsa3MpCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsICBjbXUtPm11eF9jbGtzLAorCQkJY211LT5ucl9tdXhfY2xrcyk7CisJaWYgKGNtdS0+ZGl2X2Nsa3MpCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGNtdS0+ZGl2X2Nsa3MsIGNtdS0+bnJfZGl2X2Nsa3MpOworCWlmIChjbXUtPmdhdGVfY2xrcykKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIGNtdS0+Z2F0ZV9jbGtzLAorCQkJY211LT5ucl9nYXRlX2Nsa3MpOworCWlmIChjbXUtPmZpeGVkX2Nsa3MpCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBjbXUtPmZpeGVkX2Nsa3MsCisJCQljbXUtPm5yX2ZpeGVkX2Nsa3MpOworCWlmIChjbXUtPmNsa19yZWdzKQorCQlleHlub3M1MjYwX2Nsa19zbGVlcF9pbml0KHJlZ19iYXNlLCBjbXUtPmNsa19yZWdzLAorCQkJY211LT5ucl9jbGtfcmVncyk7Cit9CisKKworLyogQ01VX0FVRCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhdWRfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCU1VWF9TRUxfQVVELAorCURJVl9BVUQwLAorCURJVl9BVUQxLAorCUVOX0FDTEtfQVVELAorCUVOX1BDTEtfQVVELAorCUVOX1NDTEtfQVVELAorCUVOX0lQX0FVRCwKK307CisKK1BOQU1FKG1vdXRfYXVkX3BsbF91c2VyX3ApID0geyJmaW5fcGxsIiwgImZvdXRfYXVkX3BsbCJ9OworUE5BTUUobW91dF9zY2xrX2F1ZF9pMnNfcCkgPSB7Im1vdXRfYXVkX3BsbF91c2VyIiwgImlvY2xrX2kyc19jZGNsayJ9OworUE5BTUUobW91dF9zY2xrX2F1ZF9wY21fcCkgPSB7Im1vdXRfYXVkX3BsbF91c2VyIiwgImlvY2xrX3BjbV9leHRjbGsifTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIGF1ZF9tdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKEFVRF9NT1VUX0FVRF9QTExfVVNFUiwgIm1vdXRfYXVkX3BsbF91c2VyIiwgbW91dF9hdWRfcGxsX3VzZXJfcCwKKwkJCU1VWF9TRUxfQVVELCAwLCAxKSwKKwlNVVgoQVVEX01PVVRfU0NMS19BVURfSTJTLCAibW91dF9zY2xrX2F1ZF9pMnMiLCBtb3V0X3NjbGtfYXVkX2kyc19wLAorCQkJTVVYX1NFTF9BVUQsIDQsIDEpLAorCU1VWChBVURfTU9VVF9TQ0xLX0FVRF9QQ00sICJtb3V0X3NjbGtfYXVkX3BjbSIsIG1vdXRfc2Nsa19hdWRfcGNtX3AsCisJCQlNVVhfU0VMX0FVRCwgOCwgMSksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgYXVkX2Rpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlESVYoQVVEX0RPVVRfQUNMS19BVURfMTMxLCAiZG91dF9hY2xrX2F1ZF8xMzEiLCAibW91dF9hdWRfcGxsX3VzZXIiLAorCQkJRElWX0FVRDAsIDAsIDQpLAorCisJRElWKEFVRF9ET1VUX1NDTEtfQVVEX0kyUywgImRvdXRfc2Nsa19hdWRfaTJzIiwgIm1vdXRfc2Nsa19hdWRfaTJzIiwKKwkJCURJVl9BVUQxLCAwLCA0KSwKKwlESVYoQVVEX0RPVVRfU0NMS19BVURfUENNLCAiZG91dF9zY2xrX2F1ZF9wY20iLCAibW91dF9zY2xrX2F1ZF9wY20iLAorCQkJRElWX0FVRDEsIDQsIDgpLAorCURJVihBVURfRE9VVF9TQ0xLX0FVRF9VQVJULCAiZG91dF9zY2xrX2F1ZF91YXJ0IiwgIm1vdXRfYXVkX3BsbF91c2VyIiwKKwkJCURJVl9BVUQxLCAxMiwgNCksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrIGF1ZF9nYXRlX2Nsa3NbXSBfX2luaXRkYXRhID0geworCUdBVEUoQVVEX1NDTEtfSTJTLCAic2Nsa19hdWRfaTJzIiwgImRvdXRfc2Nsa19hdWRfaTJzIiwKKwkJCUVOX1NDTEtfQVVELCAwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKEFVRF9TQ0xLX1BDTSwgInNjbGtfYXVkX3BjbSIsICJkb3V0X3NjbGtfYXVkX3BjbSIsCisJCQlFTl9TQ0xLX0FVRCwgMSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShBVURfU0NMS19BVURfVUFSVCwgInNjbGtfYXVkX3VhcnQiLCAiZG91dF9zY2xrX2F1ZF91YXJ0IiwKKwkJCUVOX1NDTEtfQVVELCAyLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKworCUdBVEUoQVVEX0NMS19TUkFNQywgImNsa19zcmFtYyIsICJkb3V0X2FjbGtfYXVkXzEzMSIsIEVOX0lQX0FVRCwKKwkJCTAsIDAsIDApLAorCUdBVEUoQVVEX0NMS19ETUFDLCAiY2xrX2RtYWMiLCAiZG91dF9hY2xrX2F1ZF8xMzEiLAorCQkJRU5fSVBfQVVELCAxLCAwLCAwKSwKKwlHQVRFKEFVRF9DTEtfSTJTLCAiY2xrX2kycyIsICJkb3V0X2FjbGtfYXVkXzEzMSIsIEVOX0lQX0FVRCwgMiwgMCwgMCksCisJR0FURShBVURfQ0xLX1BDTSwgImNsa19wY20iLCAiZG91dF9hY2xrX2F1ZF8xMzEiLCBFTl9JUF9BVUQsIDMsIDAsIDApLAorCUdBVEUoQVVEX0NMS19BVURfVUFSVCwgImNsa19hdWRfdWFydCIsICJkb3V0X2FjbGtfYXVkXzEzMSIsCisJCQlFTl9JUF9BVUQsIDQsIDAsIDApLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczUyNjBfY2xrX2F1ZF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGV4eW5vczUyNjBfY211X2luZm8gY211ID0gezB9OworCisJY211Lm11eF9jbGtzID0gYXVkX211eF9jbGtzOworCWNtdS5ucl9tdXhfY2xrcyA9IEFSUkFZX1NJWkUoYXVkX211eF9jbGtzKTsKKwljbXUuZGl2X2Nsa3MgPSBhdWRfZGl2X2Nsa3M7CisJY211Lm5yX2Rpdl9jbGtzID0gQVJSQVlfU0laRShhdWRfZGl2X2Nsa3MpOworCWNtdS5nYXRlX2Nsa3MgPSBhdWRfZ2F0ZV9jbGtzOworCWNtdS5ucl9nYXRlX2Nsa3MgPSBBUlJBWV9TSVpFKGF1ZF9nYXRlX2Nsa3MpOworCWNtdS5ucl9jbGtfaWRzID0gQVVEX05SX0NMSzsKKwljbXUuY2xrX3JlZ3MgPSBhdWRfY2xrX3JlZ3M7CisJY211Lm5yX2Nsa19yZWdzID0gQVJSQVlfU0laRShhdWRfY2xrX3JlZ3MpOworCisJZXh5bm9zNTI2MF9jbXVfcmVnaXN0ZXJfb25lKG5wLCAmY211KTsKK30KKworQ0xLX09GX0RFQ0xBUkUoZXh5bm9zNTI2MF9jbGtfYXVkLCAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWF1ZCIsCisJCWV4eW5vczUyNjBfY2xrX2F1ZF9pbml0KTsKKworCisvKiBDTVVfRElTUCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkaXNwX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlNVVhfU0VMX0RJU1AwLAorCU1VWF9TRUxfRElTUDEsCisJTVVYX1NFTF9ESVNQMiwKKwlNVVhfU0VMX0RJU1AzLAorCU1VWF9TRUxfRElTUDQsCisJRElWX0RJU1AsCisJRU5fQUNMS19ESVNQLAorCUVOX1BDTEtfRElTUCwKKwlFTl9TQ0xLX0RJU1AwLAorCUVOX1NDTEtfRElTUDEsCisJRU5fSVBfRElTUCwKKwlFTl9JUF9ESVNQX0JVUywKK307CisKK1BOQU1FKG1vdXRfcGh5Y2xrX2RwdHhfcGh5X2NoM190eGRfY2xrX3VzZXJfcCkgPSB7ImZpbl9wbGwiLAorCQkJInBoeWNsa19kcHR4X3BoeV9jaDNfdHhkX2NsayJ9OworUE5BTUUobW91dF9waHljbGtfZHB0eF9waHlfY2gyX3R4ZF9jbGtfdXNlcl9wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX2RwdHhfcGh5X2NoMl90eGRfY2xrIn07CitQTkFNRShtb3V0X3BoeWNsa19kcHR4X3BoeV9jaDFfdHhkX2Nsa191c2VyX3ApID0geyJmaW5fcGxsIiwKKwkJCSJwaHljbGtfZHB0eF9waHlfY2gxX3R4ZF9jbGsifTsKK1BOQU1FKG1vdXRfcGh5Y2xrX2RwdHhfcGh5X2NoMF90eGRfY2xrX3VzZXJfcCkgPSB7ImZpbl9wbGwiLAorCQkJInBoeWNsa19kcHR4X3BoeV9jaDBfdHhkX2NsayJ9OworUE5BTUUobW91dF9hY2xrX2Rpc3BfMjIyX3VzZXJfcCkgPSB7ImZpbl9wbGwiLCAiZG91dF9hY2xrX2Rpc3BfMjIyIn07CitQTkFNRShtb3V0X3NjbGtfZGlzcF9waXhlbF91c2VyX3ApID0geyJmaW5fcGxsIiwgImRvdXRfc2Nsa19kaXNwX3BpeGVsIn07CitQTkFNRShtb3V0X2FjbGtfZGlzcF8zMzNfdXNlcl9wKSA9IHsiZmluX3BsbCIsICJkb3V0X2FjbGtfZGlzcF8zMzMifTsKK1BOQU1FKG1vdXRfcGh5Y2xrX2hkbWlfcGh5X3RtZHNfY2xrb191c2VyX3ApID0geyJmaW5fcGxsIiwKKwkJCSJwaHljbGtfaGRtaV9waHlfdG1kc19jbGtvIn07CitQTkFNRShtb3V0X3BoeWNsa19oZG1pX3BoeV9yZWZfY2xrb191c2VyX3ApID0geyJmaW5fcGxsIiwKKwkJCSJwaHljbGtfaGRtaV9waHlfcmVmX2Nsa28ifTsKK1BOQU1FKG1vdXRfcGh5Y2xrX2hkbWlfcGh5X3BpeGVsX2Nsa29fdXNlcl9wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX2hkbWlfcGh5X3BpeGVsX2Nsa28ifTsKK1BOQU1FKG1vdXRfcGh5Y2xrX2hkbWlfbGlua19vX3RtZHNfY2xraGlfdXNlcl9wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX2hkbWlfbGlua19vX3RtZHNfY2xraGkifTsKK1BOQU1FKG1vdXRfcGh5Y2xrX21pcGlfZHBoeV80bF9tX3R4Ynl0ZV9jbGtoc19wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX21pcGlfZHBoeV80bF9tX3R4Ynl0ZV9jbGtocyJ9OworUE5BTUUobW91dF9waHljbGtfZHB0eF9waHlfb19yZWZfY2xrXzI0bV91c2VyX3ApID0geyJmaW5fcGxsIiwKKwkJCSJwaHljbGtfZHB0eF9waHlfb19yZWZfY2xrXzI0bSJ9OworUE5BTUUobW91dF9waHljbGtfZHB0eF9waHlfY2xrX2RpdjJfdXNlcl9wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX2RwdHhfcGh5X2Nsa19kaXYyIn07CitQTkFNRShtb3V0X3NjbGtfaGRtaV9waXhlbF9wKSA9IHsibW91dF9zY2xrX2Rpc3BfcGl4ZWxfdXNlciIsCisJCQkibW91dF9hY2xrX2Rpc3BfMjIyX3VzZXIifTsKK1BOQU1FKG1vdXRfcGh5Y2xrX21pcGlfZHBoeV80bG1yeGNsa19lc2MwX3VzZXJfcCkgPSB7ImZpbl9wbGwiLAorCQkJInBoeWNsa19taXBpX2RwaHlfNGxfbV9yeGNsa2VzYzAifTsKK1BOQU1FKG1vdXRfc2Nsa19oZG1pX3NwZGlmX3ApID0geyJmaW5fcGxsIiwgImlvY2xrX3NwZGlmX2V4dGNsayIsCisJCQkiZG91dF9hY2xrX3BlcmlfYXVkIiwgInBoeWNsa19oZG1pX3BoeV9yZWZfY2tvIn07CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBkaXNwX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoRElTUF9NT1VUX0FDTEtfRElTUF8zMzNfVVNFUiwgIm1vdXRfYWNsa19kaXNwXzMzM191c2VyIiwKKwkJCW1vdXRfYWNsa19kaXNwXzMzM191c2VyX3AsCisJCQlNVVhfU0VMX0RJU1AwLCAwLCAxKSwKKwlNVVgoRElTUF9NT1VUX1NDTEtfRElTUF9QSVhFTF9VU0VSLCAibW91dF9zY2xrX2Rpc3BfcGl4ZWxfdXNlciIsCisJCQltb3V0X3NjbGtfZGlzcF9waXhlbF91c2VyX3AsCisJCQlNVVhfU0VMX0RJU1AwLCA0LCAxKSwKKwlNVVgoRElTUF9NT1VUX0FDTEtfRElTUF8yMjJfVVNFUiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCW1vdXRfYWNsa19kaXNwXzIyMl91c2VyX3AsCisJCQlNVVhfU0VMX0RJU1AwLCA4LCAxKSwKKwlNVVgoRElTUF9NT1VUX1BIWUNMS19EUFRYX1BIWV9DSDBfVFhEX0NMS19VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX2RwdHhfcGh5X2NoMF90eGRfY2xrX3VzZXIiLAorCQkJbW91dF9waHljbGtfZHB0eF9waHlfY2gwX3R4ZF9jbGtfdXNlcl9wLAorCQkJTVVYX1NFTF9ESVNQMCwgMTYsIDEpLAorCU1VWChESVNQX01PVVRfUEhZQ0xLX0RQVFhfUEhZX0NIMV9UWERfQ0xLX1VTRVIsCisJCQkibW91dF9waHljbGtfZHB0eF9waHlfY2gxX3R4ZF9jbGtfdXNlciIsCisJCQltb3V0X3BoeWNsa19kcHR4X3BoeV9jaDFfdHhkX2Nsa191c2VyX3AsCisJCQlNVVhfU0VMX0RJU1AwLCAyMCwgMSksCisJTVVYKERJU1BfTU9VVF9QSFlDTEtfRFBUWF9QSFlfQ0gyX1RYRF9DTEtfVVNFUiwKKwkJCSJtb3V0X3BoeWNsa19kcHR4X3BoeV9jaDJfdHhkX2Nsa191c2VyIiwKKwkJCW1vdXRfcGh5Y2xrX2RwdHhfcGh5X2NoMl90eGRfY2xrX3VzZXJfcCwKKwkJCU1VWF9TRUxfRElTUDAsIDI0LCAxKSwKKwlNVVgoRElTUF9NT1VUX1BIWUNMS19EUFRYX1BIWV9DSDNfVFhEX0NMS19VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX2RwdHhfcGh5X2NoM190eGRfY2xrX3VzZXIiLAorCQkJbW91dF9waHljbGtfZHB0eF9waHlfY2gzX3R4ZF9jbGtfdXNlcl9wLAorCQkJTVVYX1NFTF9ESVNQMCwgMjgsIDEpLAorCisJTVVYKERJU1BfTU9VVF9QSFlDTEtfRFBUWF9QSFlfQ0xLX0RJVjJfVVNFUiwKKwkJCSJtb3V0X3BoeWNsa19kcHR4X3BoeV9jbGtfZGl2Ml91c2VyIiwKKwkJCW1vdXRfcGh5Y2xrX2RwdHhfcGh5X2Nsa19kaXYyX3VzZXJfcCwKKwkJCU1VWF9TRUxfRElTUDEsIDAsIDEpLAorCU1VWChESVNQX01PVVRfUEhZQ0xLX0RQVFhfUEhZX09fUkVGX0NMS18yNE1fVVNFUiwKKwkJCSJtb3V0X3BoeWNsa19kcHR4X3BoeV9vX3JlZl9jbGtfMjRtX3VzZXIiLAorCQkJbW91dF9waHljbGtfZHB0eF9waHlfb19yZWZfY2xrXzI0bV91c2VyX3AsCisJCQlNVVhfU0VMX0RJU1AxLCA0LCAxKSwKKwlNVVgoRElTUF9NT1VUX1BIWUNMS19NSVBJX0RQSFlfNExfTV9UWEJZVEVfQ0xLSFMsCisJCQkibW91dF9waHljbGtfbWlwaV9kcGh5XzRsX21fdHhieXRlX2Nsa2hzIiwKKwkJCW1vdXRfcGh5Y2xrX21pcGlfZHBoeV80bF9tX3R4Ynl0ZV9jbGtoc19wLAorCQkJTVVYX1NFTF9ESVNQMSwgOCwgMSksCisJTVVYKERJU1BfTU9VVF9QSFlDTEtfSERNSV9MSU5LX09fVE1EU19DTEtISV9VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX2hkbWlfbGlua19vX3RtZHNfY2xraGlfdXNlciIsCisJCQltb3V0X3BoeWNsa19oZG1pX2xpbmtfb190bWRzX2Nsa2hpX3VzZXJfcCwKKwkJCU1VWF9TRUxfRElTUDEsIDE2LCAxKSwKKwlNVVgoRElTUF9NT1VUX0hETUlfUEhZX1BJWEVMLAorCQkJIm1vdXRfcGh5Y2xrX2hkbWlfcGh5X3BpeGVsX2Nsa29fdXNlciIsCisJCQltb3V0X3BoeWNsa19oZG1pX3BoeV9waXhlbF9jbGtvX3VzZXJfcCwKKwkJCU1VWF9TRUxfRElTUDEsIDIwLCAxKSwKKwlNVVgoRElTUF9NT1VUX1BIWUNMS19IRE1JX1BIWV9SRUZfQ0xLT19VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX2hkbWlfcGh5X3JlZl9jbGtvX3VzZXIiLAorCQkJbW91dF9waHljbGtfaGRtaV9waHlfcmVmX2Nsa29fdXNlcl9wLAorCQkJTVVYX1NFTF9ESVNQMSwgMjQsIDEpLAorCU1VWChESVNQX01PVVRfUEhZQ0xLX0hETUlfUEhZX1RNRFNfQ0xLT19VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX2hkbWlfcGh5X3RtZHNfY2xrb191c2VyIiwKKwkJCW1vdXRfcGh5Y2xrX2hkbWlfcGh5X3RtZHNfY2xrb191c2VyX3AsCisJCQlNVVhfU0VMX0RJU1AxLCAyOCwgMSksCisKKwlNVVgoRElTUF9NT1VUX1BIWUNMS19NSVBJX0RQSFlfNExNUlhDTEtfRVNDMF9VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX21pcGlfZHBoeV80bG1yeGNsa19lc2MwX3VzZXIiLAorCQkJbW91dF9waHljbGtfbWlwaV9kcGh5XzRsbXJ4Y2xrX2VzYzBfdXNlcl9wLAorCQkJTVVYX1NFTF9ESVNQMiwgMCwgMSksCisJTVVYKERJU1BfTU9VVF9TQ0xLX0hETUlfUElYRUwsICJtb3V0X3NjbGtfaGRtaV9waXhlbCIsCisJCQltb3V0X3NjbGtfaGRtaV9waXhlbF9wLAorCQkJTVVYX1NFTF9ESVNQMiwgNCwgMSksCisKKwlNVVgoRElTUF9NT1VUX1NDTEtfSERNSV9TUERJRiwgIm1vdXRfc2Nsa19oZG1pX3NwZGlmIiwKKwkJCW1vdXRfc2Nsa19oZG1pX3NwZGlmX3AsCisJCQlNVVhfU0VMX0RJU1A0LCA0LCAyKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBkaXNwX2Rpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlESVYoRElTUF9ET1VUX1BDTEtfRElTUF8xMTEsICJkb3V0X3BjbGtfZGlzcF8xMTEiLAorCQkJIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCURJVl9ESVNQLCA4LCA0KSwKKwlESVYoRElTUF9ET1VUX1NDTEtfRklNRDFfRVhUQ0xLUExMLCAiZG91dF9zY2xrX2ZpbWQxX2V4dGNsa3BsbCIsCisJCQkibW91dF9zY2xrX2Rpc3BfcGl4ZWxfdXNlciIsCisJCQlESVZfRElTUCwgMTIsIDQpLAorCURJVihESVNQX0RPVVRfU0NMS19IRE1JX1BIWV9QSVhFTF9DTEtJLAorCQkJImRvdXRfc2Nsa19oZG1pX3BoeV9waXhlbF9jbGtpIiwKKwkJCSJtb3V0X3NjbGtfaGRtaV9waXhlbCIsCisJCQlESVZfRElTUCwgMTYsIDQpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBkaXNwX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShESVNQX01PVVRfSERNSV9QSFlfUElYRUxfVVNFUiwgInNjbGtfaGRtaV9saW5rX2lfcGl4ZWwiLAorCQkJIm1vdXRfcGh5Y2xrX2hkbWlfcGh5X3BpeGVsX2Nsa29fdXNlciIsCisJCQlFTl9TQ0xLX0RJU1AwLCAyNiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShESVNQX1NDTEtfUElYRUwsICJzY2xrX2hkbWlfcGh5X3BpeGVsX2Nsa2kiLAorCQkJImRvdXRfc2Nsa19oZG1pX3BoeV9waXhlbF9jbGtpIiwKKwkJCUVOX1NDTEtfRElTUDAsIDI5LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKworCUdBVEUoRElTUF9DTEtfRFAsICJjbGtfZHB0eF9saW5rIiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDQsIDAsIDApLAorCUdBVEUoRElTUF9DTEtfRFBQSFksICJjbGtfZHB0eF9waHkiLCAibW91dF9hY2xrX2Rpc3BfMjIyX3VzZXIiLAorCQkJRU5fSVBfRElTUCwgNSwgMCwgMCksCisJR0FURShESVNQX0NMS19EU0lNMSwgImNsa19kc2ltMSIsICJtb3V0X2FjbGtfZGlzcF8yMjJfdXNlciIsCisJCQlFTl9JUF9ESVNQLCA2LCAwLCAwKSwKKwlHQVRFKERJU1BfQ0xLX0ZJTUQxLCAiY2xrX2ZpbWQxIiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDcsIDAsIDApLAorCUdBVEUoRElTUF9DTEtfSERNSSwgImNsa19oZG1pIiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDgsIDAsIDApLAorCUdBVEUoRElTUF9DTEtfSERNSVBIWSwgImNsa19oZG1pcGh5IiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDksIDAsIDApLAorCUdBVEUoRElTUF9DTEtfTUlQSVBIWSwgImNsa19taXBpX2RwaHkiLCAibW91dF9hY2xrX2Rpc3BfMjIyX3VzZXIiLAorCQkJRU5fSVBfRElTUCwgMTAsIDAsIDApLAorCUdBVEUoRElTUF9DTEtfTUlYRVIsICJjbGtfbWl4ZXIiLCAibW91dF9hY2xrX2Rpc3BfMjIyX3VzZXIiLAorCQkJRU5fSVBfRElTUCwgMTEsIDAsIDApLAorCUdBVEUoRElTUF9DTEtfUElYRUxfRElTUCwgImNsa19waXhlbF9kaXNwIiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDEyLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShESVNQX0NMS19QSVhFTF9NSVhFUiwgImNsa19waXhlbF9taXhlciIsICJtb3V0X2FjbGtfZGlzcF8yMjJfdXNlciIsCisJCQlFTl9JUF9ESVNQLCAxMywgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoRElTUF9DTEtfU01NVV9GSU1EMU0wLCAiY2xrX3NtbXUzX2ZpbWQxbTAiLAorCQkJIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDIyLCAwLCAwKSwKKwlHQVRFKERJU1BfQ0xLX1NNTVVfRklNRDFNMSwgImNsa19zbW11M19maW1kMW0xIiwKKwkJCSJtb3V0X2FjbGtfZGlzcF8yMjJfdXNlciIsCisJCQlFTl9JUF9ESVNQLCAyMywgMCwgMCksCisJR0FURShESVNQX0NMS19TTU1VX1RWLCAiY2xrX3NtbXUzX3R2IiwgIm1vdXRfYWNsa19kaXNwXzIyMl91c2VyIiwKKwkJCUVOX0lQX0RJU1AsIDI1LCAwLCAwKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1MjYwX2Nsa19kaXNwX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyBjbXUgPSB7MH07CisKKwljbXUubXV4X2Nsa3MgPSBkaXNwX211eF9jbGtzOworCWNtdS5ucl9tdXhfY2xrcyA9IEFSUkFZX1NJWkUoZGlzcF9tdXhfY2xrcyk7CisJY211LmRpdl9jbGtzID0gZGlzcF9kaXZfY2xrczsKKwljbXUubnJfZGl2X2Nsa3MgPSBBUlJBWV9TSVpFKGRpc3BfZGl2X2Nsa3MpOworCWNtdS5nYXRlX2Nsa3MgPSBkaXNwX2dhdGVfY2xrczsKKwljbXUubnJfZ2F0ZV9jbGtzID0gQVJSQVlfU0laRShkaXNwX2dhdGVfY2xrcyk7CisJY211Lm5yX2Nsa19pZHMgPSBESVNQX05SX0NMSzsKKwljbXUuY2xrX3JlZ3MgPSBkaXNwX2Nsa19yZWdzOworCWNtdS5ucl9jbGtfcmVncyA9IEFSUkFZX1NJWkUoZGlzcF9jbGtfcmVncyk7CisKKwlleHlub3M1MjYwX2NtdV9yZWdpc3Rlcl9vbmUobnAsICZjbXUpOworfQorCitDTEtfT0ZfREVDTEFSRShleHlub3M1MjYwX2Nsa19kaXNwLCAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWRpc3AiLAorCQlleHlub3M1MjYwX2Nsa19kaXNwX2luaXQpOworCisKKy8qIENNVV9FR0wgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZWdsX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlFR0xfUExMX0xPQ0ssCisJRUdMX1BMTF9DT04wLAorCUVHTF9QTExfQ09OMSwKKwlFR0xfUExMX0ZSRVFfREVULAorCU1VWF9TRUxfRUdMLAorCU1VWF9FTkFCTEVfRUdMLAorCURJVl9FR0wsCisJRElWX0VHTF9QTExfRkRFVCwKKwlFTl9BQ0xLX0VHTCwKKwlFTl9QQ0xLX0VHTCwKKwlFTl9TQ0xLX0VHTCwKK307CisKK1BOQU1FKG1vdXRfZWdsX2JfcCkgPSB7Im1vdXRfZWdsX3BsbCIsICJkb3V0X2J1c19wbGwifTsKK1BOQU1FKG1vdXRfZWdsX3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2VnbF9wbGwifTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIGVnbF9tdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKEVHTF9NT1VUX0VHTF9QTEwsICJtb3V0X2VnbF9wbGwiLCBtb3V0X2VnbF9wbGxfcCwKKwkJCU1VWF9TRUxfRUdMLCA0LCAxKSwKKwlNVVgoRUdMX01PVVRfRUdMX0IsICJtb3V0X2VnbF9iIiwgbW91dF9lZ2xfYl9wLCBNVVhfU0VMX0VHTCwgMTYsIDEpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIGVnbF9kaXZfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKEVHTF9ET1VUX0VHTDEsICJkb3V0X2VnbDEiLCAibW91dF9lZ2xfYiIsIERJVl9FR0wsIDAsIDMpLAorCURJVihFR0xfRE9VVF9FR0wyLCAiZG91dF9lZ2wyIiwgImRvdXRfZWdsMSIsIERJVl9FR0wsIDQsIDMpLAorCURJVihFR0xfRE9VVF9BQ0xLX0VHTCwgImRvdXRfYWNsa19lZ2wiLCAiZG91dF9lZ2wyIiwgRElWX0VHTCwgOCwgMyksCisJRElWKEVHTF9ET1VUX1BDTEtfRUdMLCAiZG91dF9wY2xrX2VnbCIsICJkb3V0X2VnbF9hdGNsayIsCisJCQlESVZfRUdMLCAxMiwgMyksCisJRElWKEVHTF9ET1VUX0VHTF9BVENMSywgImRvdXRfZWdsX2F0Y2xrIiwgImRvdXRfZWdsMiIsIERJVl9FR0wsIDE2LCAzKSwKKwlESVYoRUdMX0RPVVRfRUdMX1BDTEtfREJHLCAiZG91dF9lZ2xfcGNsa19kYmciLCAiZG91dF9lZ2xfYXRjbGsiLAorCQkJRElWX0VHTCwgMjAsIDMpLAorCURJVihFR0xfRE9VVF9FR0xfUExMLCAiZG91dF9lZ2xfcGxsIiwgIm1vdXRfZWdsX2IiLCBESVZfRUdMLCAyNCwgMyksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIGVnbF9wbGxfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJUExMKHBsbF8yNTUweHgsIEVHTF9GT1VUX0VHTF9QTEwsICJmb3V0X2VnbF9wbGwiLCAiZmluX3BsbCIsCisJCUVHTF9QTExfTE9DSywgRUdMX1BMTF9DT04wLAorCQlwbGwyNTUwXzI0bWh6X3RibCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNTI2MF9jbGtfZWdsX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyBjbXUgPSB7MH07CisKKwljbXUucGxsX2Nsa3MgPSBlZ2xfcGxsX2Nsa3M7CisJY211Lm5yX3BsbF9jbGtzID0gIEFSUkFZX1NJWkUoZWdsX3BsbF9jbGtzKTsKKwljbXUubXV4X2Nsa3MgPSBlZ2xfbXV4X2Nsa3M7CisJY211Lm5yX211eF9jbGtzID0gQVJSQVlfU0laRShlZ2xfbXV4X2Nsa3MpOworCWNtdS5kaXZfY2xrcyA9IGVnbF9kaXZfY2xrczsKKwljbXUubnJfZGl2X2Nsa3MgPSBBUlJBWV9TSVpFKGVnbF9kaXZfY2xrcyk7CisJY211Lm5yX2Nsa19pZHMgPSBFR0xfTlJfQ0xLOworCWNtdS5jbGtfcmVncyA9IGVnbF9jbGtfcmVnczsKKwljbXUubnJfY2xrX3JlZ3MgPSBBUlJBWV9TSVpFKGVnbF9jbGtfcmVncyk7CisKKwlleHlub3M1MjYwX2NtdV9yZWdpc3Rlcl9vbmUobnAsICZjbXUpOworfQorCitDTEtfT0ZfREVDTEFSRShleHlub3M1MjYwX2Nsa19lZ2wsICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2stZWdsIiwKKwkJZXh5bm9zNTI2MF9jbGtfZWdsX2luaXQpOworCisKKy8qIENNVV9GU1lTICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZzeXNfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCU1VWF9TRUxfRlNZUzAsCisJTVVYX1NFTF9GU1lTMSwKKwlFTl9BQ0xLX0ZTWVMsCisJRU5fQUNMS19GU1lTX1NFQ1VSRV9SVElDLAorCUVOX0FDTEtfRlNZU19TRUNVUkVfU01NVV9SVElDLAorCUVOX1NDTEtfRlNZUywKKwlFTl9JUF9GU1lTLAorCUVOX0lQX0ZTWVNfU0VDVVJFX1JUSUMsCisJRU5fSVBfRlNZU19TRUNVUkVfU01NVV9SVElDLAorfTsKKworUE5BTUUobW91dF9waHljbGtfdXNiaG9zdDIwX3BoeWNsa191c2VyX3ApID0geyJmaW5fcGxsIiwKKwkJCSJwaHljbGtfdXNiaG9zdDIwX3BoeV9waHljbG9jayJ9OworUE5BTUUobW91dF9waHljbGtfdXNiaG9zdDIwX2ZyZWVjbGtfdXNlcl9wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX3VzYmhvc3QyMF9waHlfZnJlZWNsayJ9OworUE5BTUUobW91dF9waHljbGtfdXNiaG9zdDIwX2NsazQ4bW9oY2lfdXNlcl9wKSA9IHsiZmluX3BsbCIsCisJCQkicGh5Y2xrX3VzYmhvc3QyMF9waHlfY2xrNDhtb2hjaSJ9OworUE5BTUUobW91dF9waHljbGtfdXNiZHJkMzBfcGlwZV9wY2xrX3VzZXJfcCkgPSB7ImZpbl9wbGwiLAorCQkJInBoeWNsa191c2JkcmQzMF91ZHJkMzBfcGlwZV9wY2xrIn07CitQTkFNRShtb3V0X3BoeWNsa191c2JkcmQzMF9waHljbG9ja191c2VyX3ApID0geyJmaW5fcGxsIiwKKwkJCSJwaHljbGtfdXNiZHJkMzBfdWRyZDMwX3BoeWNsb2NrIn07CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBmc3lzX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoRlNZU19NT1VUX1BIWUNMS19VU0JEUkQzMF9QSFlDTE9DS19VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX3VzYmRyZDMwX3BoeWNsb2NrX3VzZXIiLAorCQkJbW91dF9waHljbGtfdXNiZHJkMzBfcGh5Y2xvY2tfdXNlcl9wLAorCQkJTVVYX1NFTF9GU1lTMSwgMCwgMSksCisJTVVYKEZTWVNfTU9VVF9QSFlDTEtfVVNCRFJEMzBfUElQRV9QQ0xLX1VTRVIsCisJCQkibW91dF9waHljbGtfdXNiZHJkMzBfcGlwZV9wY2xrX3VzZXIiLAorCQkJbW91dF9waHljbGtfdXNiZHJkMzBfcGlwZV9wY2xrX3VzZXJfcCwKKwkJCU1VWF9TRUxfRlNZUzEsIDQsIDEpLAorCU1VWChGU1lTX01PVVRfUEhZQ0xLX1VTQkhPU1QyMF9DTEs0OE1PSENJX1VTRVIsCisJCQkibW91dF9waHljbGtfdXNiaG9zdDIwX2NsazQ4bW9oY2lfdXNlciIsCisJCQltb3V0X3BoeWNsa191c2Job3N0MjBfY2xrNDhtb2hjaV91c2VyX3AsCisJCQlNVVhfU0VMX0ZTWVMxLCA4LCAxKSwKKwlNVVgoRlNZU19NT1VUX1BIWUNMS19VU0JIT1NUMjBfRlJFRUNMS19VU0VSLAorCQkJIm1vdXRfcGh5Y2xrX3VzYmhvc3QyMF9mcmVlY2xrX3VzZXIiLAorCQkJbW91dF9waHljbGtfdXNiaG9zdDIwX2ZyZWVjbGtfdXNlcl9wLAorCQkJTVVYX1NFTF9GU1lTMSwgMTIsIDEpLAorCU1VWChGU1lTX01PVVRfUEhZQ0xLX1VTQkhPU1QyMF9QSFlDTEtfVVNFUiwKKwkJCSJtb3V0X3BoeWNsa191c2Job3N0MjBfcGh5Y2xrX3VzZXIiLAorCQkJbW91dF9waHljbGtfdXNiaG9zdDIwX3BoeWNsa191c2VyX3AsCisJCQlNVVhfU0VMX0ZTWVMxLCAxNiwgMSksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrIGZzeXNfZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKEZTWVNfUEhZQ0xLX1VTQkhPU1QyMCwgInBoeWNsa191c2Job3N0MjBfcGh5Y2xvY2siLAorCQkJIm1vdXRfcGh5Y2xrX3VzYmRyZDMwX3BoeWNsb2NrX3VzZXIiLAorCQkJRU5fU0NMS19GU1lTLCAxLCAwLCAwKSwKKwlHQVRFKEZTWVNfUEhZQ0xLX1VTQkRSRDMwLCAicGh5Y2xrX3VzYmRyZDMwX3VkcmQzMF9waHljbG9ja19nIiwKKwkJCSJtb3V0X3BoeWNsa191c2JkcmQzMF9waHljbG9ja191c2VyIiwKKwkJCUVOX1NDTEtfRlNZUywgNywgMCwgMCksCisKKwlHQVRFKEZTWVNfQ0xLX01NQzAsICJjbGtfbW1jMCIsICJkb3V0X2FjbGtfZnN5c18yMDAiLAorCQkJRU5fSVBfRlNZUywgNiwgMCwgMCksCisJR0FURShGU1lTX0NMS19NTUMxLCAiY2xrX21tYzEiLCAiZG91dF9hY2xrX2ZzeXNfMjAwIiwKKwkJCUVOX0lQX0ZTWVMsIDcsIDAsIDApLAorCUdBVEUoRlNZU19DTEtfTU1DMiwgImNsa19tbWMyIiwgImRvdXRfYWNsa19mc3lzXzIwMCIsCisJCQlFTl9JUF9GU1lTLCA4LCAwLCAwKSwKKwlHQVRFKEZTWVNfQ0xLX1BETUEsICJjbGtfcGRtYSIsICJkb3V0X2FjbGtfZnN5c18yMDAiLAorCQkJRU5fSVBfRlNZUywgOSwgMCwgMCksCisJR0FURShGU1lTX0NMS19TUk9NQywgImNsa19zcm9tYyIsICJkb3V0X2FjbGtfZnN5c18yMDAiLAorCQkJRU5fSVBfRlNZUywgMTMsIDAsIDApLAorCUdBVEUoRlNZU19DTEtfVVNCRFJEMzAsICJjbGtfdXNiZHJkMzAiLCAiZG91dF9hY2xrX2ZzeXNfMjAwIiwKKwkJCUVOX0lQX0ZTWVMsIDE0LCAwLCAwKSwKKwlHQVRFKEZTWVNfQ0xLX1VTQkhPU1QyMCwgImNsa191c2Job3N0MjAiLCAiZG91dF9hY2xrX2ZzeXNfMjAwIiwKKwkJCUVOX0lQX0ZTWVMsIDE1LCAwLCAwKSwKKwlHQVRFKEZTWVNfQ0xLX1VTQkxJTkssICJjbGtfdXNibGluayIsICJkb3V0X2FjbGtfZnN5c18yMDAiLAorCQkJRU5fSVBfRlNZUywgMTgsIDAsIDApLAorCUdBVEUoRlNZU19DTEtfVFNJLCAiY2xrX3RzaSIsICJkb3V0X2FjbGtfZnN5c18yMDAiLAorCQkJRU5fSVBfRlNZUywgMjAsIDAsIDApLAorCisJR0FURShGU1lTX0NMS19SVElDLCAiY2xrX3J0aWMiLCAiZG91dF9hY2xrX2ZzeXNfMjAwIiwKKwkJCUVOX0lQX0ZTWVNfU0VDVVJFX1JUSUMsIDExLCAwLCAwKSwKKwlHQVRFKEZTWVNfQ0xLX1NNTVVfUlRJQywgImNsa19zbW11X3J0aWMiLCAiZG91dF9hY2xrX2ZzeXNfMjAwIiwKKwkJCUVOX0lQX0ZTWVNfU0VDVVJFX1NNTVVfUlRJQywgMTIsIDAsIDApLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczUyNjBfY2xrX2ZzeXNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBleHlub3M1MjYwX2NtdV9pbmZvIGNtdSA9IHswfTsKKworCWNtdS5tdXhfY2xrcyA9IGZzeXNfbXV4X2Nsa3M7CisJY211Lm5yX211eF9jbGtzID0gQVJSQVlfU0laRShmc3lzX211eF9jbGtzKTsKKwljbXUuZ2F0ZV9jbGtzID0gZnN5c19nYXRlX2Nsa3M7CisJY211Lm5yX2dhdGVfY2xrcyA9IEFSUkFZX1NJWkUoZnN5c19nYXRlX2Nsa3MpOworCWNtdS5ucl9jbGtfaWRzID0gRlNZU19OUl9DTEs7CisJY211LmNsa19yZWdzID0gZnN5c19jbGtfcmVnczsKKwljbXUubnJfY2xrX3JlZ3MgPSBBUlJBWV9TSVpFKGZzeXNfY2xrX3JlZ3MpOworCisJZXh5bm9zNTI2MF9jbXVfcmVnaXN0ZXJfb25lKG5wLCAmY211KTsKK30KKworQ0xLX09GX0RFQ0xBUkUoZXh5bm9zNTI2MF9jbGtfZnN5cywgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1mc3lzIiwKKwkJZXh5bm9zNTI2MF9jbGtfZnN5c19pbml0KTsKKworCisvKiBDTVVfRzJEICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGcyZF9jbGtfcmVnc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYX1NFTF9HMkQsCisJTVVYX1NUQVRfRzJELAorCURJVl9HMkQsCisJRU5fQUNMS19HMkQsCisJRU5fQUNMS19HMkRfU0VDVVJFX1NTUywKKwlFTl9BQ0xLX0cyRF9TRUNVUkVfU0xJTV9TU1MsCisJRU5fQUNMS19HMkRfU0VDVVJFX1NNTVVfU0xJTV9TU1MsCisJRU5fQUNMS19HMkRfU0VDVVJFX1NNTVVfU1NTLAorCUVOX0FDTEtfRzJEX1NFQ1VSRV9TTU1VX01ETUEsCisJRU5fQUNMS19HMkRfU0VDVVJFX1NNTVVfRzJELAorCUVOX1BDTEtfRzJELAorCUVOX1BDTEtfRzJEX1NFQ1VSRV9TTU1VX1NMSU1fU1NTLAorCUVOX1BDTEtfRzJEX1NFQ1VSRV9TTU1VX1NTUywKKwlFTl9QQ0xLX0cyRF9TRUNVUkVfU01NVV9NRE1BLAorCUVOX1BDTEtfRzJEX1NFQ1VSRV9TTU1VX0cyRCwKKwlFTl9JUF9HMkQsCisJRU5fSVBfRzJEX1NFQ1VSRV9TU1MsCisJRU5fSVBfRzJEX1NFQ1VSRV9TTElNX1NTUywKKwlFTl9JUF9HMkRfU0VDVVJFX1NNTVVfU0xJTV9TU1MsCisJRU5fSVBfRzJEX1NFQ1VSRV9TTU1VX1NTUywKKwlFTl9JUF9HMkRfU0VDVVJFX1NNTVVfTURNQSwKKwlFTl9JUF9HMkRfU0VDVVJFX1NNTVVfRzJELAorfTsKKworUE5BTUUobW91dF9hY2xrX2cyZF8zMzNfdXNlcl9wKSA9IHsiZmluX3BsbCIsICJkb3V0X2FjbGtfZzJkXzMzMyJ9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgZzJkX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoRzJEX01PVVRfQUNMS19HMkRfMzMzX1VTRVIsICJtb3V0X2FjbGtfZzJkXzMzM191c2VyIiwKKwkJCW1vdXRfYWNsa19nMmRfMzMzX3VzZXJfcCwKKwkJCU1VWF9TRUxfRzJELCAwLCAxKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBnMmRfZGl2X2Nsa3NbXSBfX2luaXRkYXRhID0geworCURJVihHMkRfRE9VVF9QQ0xLX0cyRF84MywgImRvdXRfcGNsa19nMmRfODMiLCAibW91dF9hY2xrX2cyZF8zMzNfdXNlciIsCisJCQlESVZfRzJELCAwLCAzKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgZzJkX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShHMkRfQ0xLX0cyRCwgImNsa19nMmQiLCAibW91dF9hY2xrX2cyZF8zMzNfdXNlciIsCisJCQlFTl9JUF9HMkQsIDQsIDAsIDApLAorCUdBVEUoRzJEX0NMS19KUEVHLCAiY2xrX2pwZWciLCAibW91dF9hY2xrX2cyZF8zMzNfdXNlciIsCisJCQlFTl9JUF9HMkQsIDUsIDAsIDApLAorCUdBVEUoRzJEX0NMS19NRE1BLCAiY2xrX21kbWEiLCAibW91dF9hY2xrX2cyZF8zMzNfdXNlciIsCisJCQlFTl9JUF9HMkQsIDYsIDAsIDApLAorCUdBVEUoRzJEX0NMS19TTU1VM19KUEVHLCAiY2xrX3NtbXUzX2pwZWciLCAibW91dF9hY2xrX2cyZF8zMzNfdXNlciIsCisJCQlFTl9JUF9HMkQsIDE2LCAwLCAwKSwKKworCUdBVEUoRzJEX0NMS19TU1MsICJjbGtfc3NzIiwgIm1vdXRfYWNsa19nMmRfMzMzX3VzZXIiLAorCQkJRU5fSVBfRzJEX1NFQ1VSRV9TU1MsIDE3LCAwLCAwKSwKKworCUdBVEUoRzJEX0NMS19TTElNX1NTUywgImNsa19zbGltX3NzcyIsICJtb3V0X2FjbGtfZzJkXzMzM191c2VyIiwKKwkJCUVOX0lQX0cyRF9TRUNVUkVfU0xJTV9TU1MsIDExLCAwLCAwKSwKKworCUdBVEUoRzJEX0NMS19TTU1VX1NMSU1fU1NTLCAiY2xrX3NtbXVfc2xpbV9zc3MiLAorCQkJIm1vdXRfYWNsa19nMmRfMzMzX3VzZXIiLAorCQkJRU5fSVBfRzJEX1NFQ1VSRV9TTU1VX1NMSU1fU1NTLCAxMywgMCwgMCksCisKKwlHQVRFKEcyRF9DTEtfU01NVV9TU1MsICJjbGtfc21tdV9zc3MiLCAibW91dF9hY2xrX2cyZF8zMzNfdXNlciIsCisJCQlFTl9JUF9HMkRfU0VDVVJFX1NNTVVfU1NTLCAxNCwgMCwgMCksCisKKwlHQVRFKEcyRF9DTEtfU01NVV9NRE1BLCAiY2xrX3NtbXVfbWRtYSIsICJtb3V0X2FjbGtfZzJkXzMzM191c2VyIiwKKwkJCUVOX0lQX0cyRF9TRUNVUkVfU01NVV9NRE1BLCAxMiwgMCwgMCksCisKKwlHQVRFKEcyRF9DTEtfU01NVTNfRzJELCAiY2xrX3NtbXUzX2cyZCIsICJtb3V0X2FjbGtfZzJkXzMzM191c2VyIiwKKwkJCUVOX0lQX0cyRF9TRUNVUkVfU01NVV9HMkQsIDE1LCAwLCAwKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1MjYwX2Nsa19nMmRfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBleHlub3M1MjYwX2NtdV9pbmZvIGNtdSA9IHswfTsKKworCWNtdS5tdXhfY2xrcyA9IGcyZF9tdXhfY2xrczsKKwljbXUubnJfbXV4X2Nsa3MgPSBBUlJBWV9TSVpFKGcyZF9tdXhfY2xrcyk7CisJY211LmRpdl9jbGtzID0gZzJkX2Rpdl9jbGtzOworCWNtdS5ucl9kaXZfY2xrcyA9IEFSUkFZX1NJWkUoZzJkX2Rpdl9jbGtzKTsKKwljbXUuZ2F0ZV9jbGtzID0gZzJkX2dhdGVfY2xrczsKKwljbXUubnJfZ2F0ZV9jbGtzID0gQVJSQVlfU0laRShnMmRfZ2F0ZV9jbGtzKTsKKwljbXUubnJfY2xrX2lkcyA9IEcyRF9OUl9DTEs7CisJY211LmNsa19yZWdzID0gZzJkX2Nsa19yZWdzOworCWNtdS5ucl9jbGtfcmVncyA9IEFSUkFZX1NJWkUoZzJkX2Nsa19yZWdzKTsKKworCWV4eW5vczUyNjBfY211X3JlZ2lzdGVyX29uZShucCwgJmNtdSk7Cit9CisKK0NMS19PRl9ERUNMQVJFKGV4eW5vczUyNjBfY2xrX2cyZCwgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1nMmQiLAorCQlleHlub3M1MjYwX2Nsa19nMmRfaW5pdCk7CisKKworLyogQ01VX0czRCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnM2RfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCUczRF9QTExfTE9DSywKKwlHM0RfUExMX0NPTjAsCisJRzNEX1BMTF9DT04xLAorCUczRF9QTExfRkRFVCwKKwlNVVhfU0VMX0czRCwKKwlESVZfRzNELAorCURJVl9HM0RfUExMX0ZERVQsCisJRU5fQUNMS19HM0QsCisJRU5fUENMS19HM0QsCisJRU5fU0NMS19HM0QsCisJRU5fSVBfRzNELAorfTsKKworUE5BTUUobW91dF9nM2RfcGxsX3ApID0geyJmaW5fcGxsIiwgImZvdXRfZzNkX3BsbCJ9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgZzNkX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoRzNEX01PVVRfRzNEX1BMTCwgIm1vdXRfZzNkX3BsbCIsIG1vdXRfZzNkX3BsbF9wLAorCQkJTVVYX1NFTF9HM0QsIDAsIDEpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIGczZF9kaXZfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKEczRF9ET1VUX1BDTEtfRzNELCAiZG91dF9wY2xrX2czZCIsICJkb3V0X2FjbGtfZzNkIiwgRElWX0czRCwgMCwgMyksCisJRElWKEczRF9ET1VUX0FDTEtfRzNELCAiZG91dF9hY2xrX2czZCIsICJtb3V0X2czZF9wbGwiLCBESVZfRzNELCA0LCAzKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgZzNkX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShHM0RfQ0xLX0czRCwgImNsa19nM2QiLCAiZG91dF9hY2xrX2czZCIsIEVOX0lQX0czRCwgMiwgMCwgMCksCisJR0FURShHM0RfQ0xLX0czRF9IUE0sICJjbGtfZzNkX2hwbSIsICJkb3V0X2FjbGtfZzNkIiwKKwkJCUVOX0lQX0czRCwgMywgMCwgMCksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIGczZF9wbGxfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJUExMKHBsbF8yNTUwLCBHM0RfRk9VVF9HM0RfUExMLCAiZm91dF9nM2RfcGxsIiwgImZpbl9wbGwiLAorCQlHM0RfUExMX0xPQ0ssIEczRF9QTExfQ09OMCwKKwkJcGxsMjU1MF8yNG1oel90YmwpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczUyNjBfY2xrX2czZF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGV4eW5vczUyNjBfY211X2luZm8gY211ID0gezB9OworCisJY211LnBsbF9jbGtzID0gZzNkX3BsbF9jbGtzOworCWNtdS5ucl9wbGxfY2xrcyA9ICBBUlJBWV9TSVpFKGczZF9wbGxfY2xrcyk7CisJY211Lm11eF9jbGtzID0gZzNkX211eF9jbGtzOworCWNtdS5ucl9tdXhfY2xrcyA9IEFSUkFZX1NJWkUoZzNkX211eF9jbGtzKTsKKwljbXUuZGl2X2Nsa3MgPSBnM2RfZGl2X2Nsa3M7CisJY211Lm5yX2Rpdl9jbGtzID0gQVJSQVlfU0laRShnM2RfZGl2X2Nsa3MpOworCWNtdS5nYXRlX2Nsa3MgPSBnM2RfZ2F0ZV9jbGtzOworCWNtdS5ucl9nYXRlX2Nsa3MgPSBBUlJBWV9TSVpFKGczZF9nYXRlX2Nsa3MpOworCWNtdS5ucl9jbGtfaWRzID0gRzNEX05SX0NMSzsKKwljbXUuY2xrX3JlZ3MgPSBnM2RfY2xrX3JlZ3M7CisJY211Lm5yX2Nsa19yZWdzID0gQVJSQVlfU0laRShnM2RfY2xrX3JlZ3MpOworCisJZXh5bm9zNTI2MF9jbXVfcmVnaXN0ZXJfb25lKG5wLCAmY211KTsKK30KKworQ0xLX09GX0RFQ0xBUkUoZXh5bm9zNTI2MF9jbGtfZzNkLCAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLWczZCIsCisJCWV4eW5vczUyNjBfY2xrX2czZF9pbml0KTsKKworCisvKiBDTVVfR1NDTCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnc2NsX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlNVVhfU0VMX0dTQ0wsCisJRElWX0dTQ0wsCisJRU5fQUNMS19HU0NMLAorCUVOX0FDTEtfR1NDTF9GSU1DLAorCUVOX0FDTEtfR1NDTF9TRUNVUkVfU01NVV9HU0NMMCwKKwlFTl9BQ0xLX0dTQ0xfU0VDVVJFX1NNTVVfR1NDTDEsCisJRU5fQUNMS19HU0NMX1NFQ1VSRV9TTU1VX01TQ0wwLAorCUVOX0FDTEtfR1NDTF9TRUNVUkVfU01NVV9NU0NMMSwKKwlFTl9QQ0xLX0dTQ0wsCisJRU5fUENMS19HU0NMX0ZJTUMsCisJRU5fUENMS19HU0NMX1NFQ1VSRV9TTU1VX0dTQ0wwLAorCUVOX1BDTEtfR1NDTF9TRUNVUkVfU01NVV9HU0NMMSwKKwlFTl9QQ0xLX0dTQ0xfU0VDVVJFX1NNTVVfTVNDTDAsCisJRU5fUENMS19HU0NMX1NFQ1VSRV9TTU1VX01TQ0wxLAorCUVOX1NDTEtfR1NDTCwKKwlFTl9TQ0xLX0dTQ0xfRklNQywKKwlFTl9JUF9HU0NMLAorCUVOX0lQX0dTQ0xfRklNQywKKwlFTl9JUF9HU0NMX1NFQ1VSRV9TTU1VX0dTQ0wwLAorCUVOX0lQX0dTQ0xfU0VDVVJFX1NNTVVfR1NDTDEsCisJRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9NU0NMMCwKKwlFTl9JUF9HU0NMX1NFQ1VSRV9TTU1VX01TQ0wxLAorfTsKKworUE5BTUUobW91dF9hY2xrX2dzY2xfMzMzX3VzZXJfcCkgPSB7ImZpbl9wbGwiLCAiZG91dF9hY2xrX2dzY2xfMzMzIn07CitQTkFNRShtb3V0X2FjbGtfbTJtXzQwMF91c2VyX3ApID0geyJmaW5fcGxsIiwgImRvdXRfYWNsa19nc2NsXzQwMCJ9OworUE5BTUUobW91dF9hY2xrX2dzY2xfZmltY191c2VyX3ApID0geyJmaW5fcGxsIiwgImRvdXRfYWNsa19nc2NsXzQwMCJ9OworUE5BTUUobW91dF9hY2xrX2NzaXNfcCkgPSB7ImRvdXRfYWNsa19jc2lzXzIwMCIsICJtb3V0X2FjbGtfZ3NjbF9maW1jX3VzZXIifTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIGdzY2xfbXV4X2Nsa3NbXSBfX2luaXRkYXRhID0geworCU1VWChHU0NMX01PVVRfQUNMS19HU0NMXzMzM19VU0VSLCAibW91dF9hY2xrX2dzY2xfMzMzX3VzZXIiLAorCQkJbW91dF9hY2xrX2dzY2xfMzMzX3VzZXJfcCwKKwkJCU1VWF9TRUxfR1NDTCwgMCwgMSksCisJTVVYKEdTQ0xfTU9VVF9BQ0xLX00yTV80MDBfVVNFUiwgIm1vdXRfYWNsa19tMm1fNDAwX3VzZXIiLAorCQkJbW91dF9hY2xrX20ybV80MDBfdXNlcl9wLAorCQkJTVVYX1NFTF9HU0NMLCA0LCAxKSwKKwlNVVgoR1NDTF9NT1VUX0FDTEtfR1NDTF9GSU1DX1VTRVIsICJtb3V0X2FjbGtfZ3NjbF9maW1jX3VzZXIiLAorCQkJbW91dF9hY2xrX2dzY2xfZmltY191c2VyX3AsCisJCQlNVVhfU0VMX0dTQ0wsIDgsIDEpLAorCU1VWChHU0NMX01PVVRfQUNMS19DU0lTLCAibW91dF9hY2xrX2NzaXMiLCBtb3V0X2FjbGtfY3Npc19wLAorCQkJTVVYX1NFTF9HU0NMLCAyNCwgMSksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgZ3NjbF9kaXZfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKEdTQ0xfRE9VVF9QQ0xLX00yTV8xMDAsICJkb3V0X3BjbGtfbTJtXzEwMCIsCisJCQkibW91dF9hY2xrX20ybV80MDBfdXNlciIsCisJCQlESVZfR1NDTCwgMCwgMyksCisJRElWKEdTQ0xfRE9VVF9BQ0xLX0NTSVNfMjAwLCAiZG91dF9hY2xrX2NzaXNfMjAwIiwKKwkJCSJtb3V0X2FjbGtfbTJtXzQwMF91c2VyIiwKKwkJCURJVl9HU0NMLCA0LCAzKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgZ3NjbF9nYXRlX2Nsa3NbXSBfX2luaXRkYXRhID0geworCUdBVEUoR1NDTF9TQ0xLX0NTSVMwX1dSQVAsICJzY2xrX2NzaXMwX3dyYXAiLCAiZG91dF9hY2xrX2NzaXNfMjAwIiwKKwkJCUVOX1NDTEtfR1NDTF9GSU1DLCAwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKEdTQ0xfU0NMS19DU0lTMV9XUkFQLCAic2Nsa19jc2lzMV93cmFwIiwgImRvdXRfYWNsa19jc2lzXzIwMCIsCisJCQlFTl9TQ0xLX0dTQ0xfRklNQywgMSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisKKwlHQVRFKEdTQ0xfQ0xLX0dTQ0wwLCAiY2xrX2dzY2wwIiwgIm1vdXRfYWNsa19nc2NsXzMzM191c2VyIiwKKwkJCUVOX0lQX0dTQ0wsIDIsIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfR1NDTDEsICJjbGtfZ3NjbDEiLCAibW91dF9hY2xrX2dzY2xfMzMzX3VzZXIiLAorCQkJRU5fSVBfR1NDTCwgMywgMCwgMCksCisJR0FURShHU0NMX0NMS19NU0NMMCwgImNsa19tc2NsMCIsICJtb3V0X2FjbGtfZ3NjbF8zMzNfdXNlciIsCisJCQlFTl9JUF9HU0NMLCA0LCAwLCAwKSwKKwlHQVRFKEdTQ0xfQ0xLX01TQ0wxLCAiY2xrX21zY2wxIiwgIm1vdXRfYWNsa19nc2NsXzMzM191c2VyIiwKKwkJCUVOX0lQX0dTQ0wsIDUsIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfUElYRUxfR1NDTDAsICJjbGtfcGl4ZWxfZ3NjbDAiLAorCQkJIm1vdXRfYWNsa19nc2NsXzMzM191c2VyIiwKKwkJCUVOX0lQX0dTQ0wsIDgsIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfUElYRUxfR1NDTDEsICJjbGtfcGl4ZWxfZ3NjbDEiLAorCQkJIm1vdXRfYWNsa19nc2NsXzMzM191c2VyIiwKKwkJCUVOX0lQX0dTQ0wsIDksIDAsIDApLAorCisJR0FURShHU0NMX0NMS19TTU1VM19MSVRFX0EsICJjbGtfc21tdTNfbGl0ZV9hIiwKKwkJCSJtb3V0X2FjbGtfZ3NjbF9maW1jX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9GSU1DLCA1LCAwLCAwKSwKKwlHQVRFKEdTQ0xfQ0xLX1NNTVUzX0xJVEVfQiwgImNsa19zbW11M19saXRlX2IiLAorCQkJIm1vdXRfYWNsa19nc2NsX2ZpbWNfdXNlciIsCisJCQlFTl9JUF9HU0NMX0ZJTUMsIDYsIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfU01NVTNfTElURV9ELCAiY2xrX3NtbXUzX2xpdGVfZCIsCisJCQkibW91dF9hY2xrX2dzY2xfZmltY191c2VyIiwKKwkJCUVOX0lQX0dTQ0xfRklNQywgNywgMCwgMCksCisJR0FURShHU0NMX0NMS19DU0lTMCwgImNsa19jc2lzMCIsICJtb3V0X2FjbGtfZ3NjbF9maW1jX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9GSU1DLCA4LCAwLCAwKSwKKwlHQVRFKEdTQ0xfQ0xLX0NTSVMxLCAiY2xrX2NzaXMxIiwgIm1vdXRfYWNsa19nc2NsX2ZpbWNfdXNlciIsCisJCQlFTl9JUF9HU0NMX0ZJTUMsIDksIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfRklNQ19MSVRFX0EsICJjbGtfZmltY19saXRlX2EiLAorCQkJIm1vdXRfYWNsa19nc2NsX2ZpbWNfdXNlciIsCisJCQlFTl9JUF9HU0NMX0ZJTUMsIDEwLCAwLCAwKSwKKwlHQVRFKEdTQ0xfQ0xLX0ZJTUNfTElURV9CLCAiY2xrX2ZpbWNfbGl0ZV9iIiwKKwkJCSJtb3V0X2FjbGtfZ3NjbF9maW1jX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9GSU1DLCAxMSwgMCwgMCksCisJR0FURShHU0NMX0NMS19GSU1DX0xJVEVfRCwgImNsa19maW1jX2xpdGVfZCIsCisJCQkibW91dF9hY2xrX2dzY2xfZmltY191c2VyIiwKKwkJCUVOX0lQX0dTQ0xfRklNQywgMTIsIDAsIDApLAorCisJR0FURShHU0NMX0NMS19TTU1VM19HU0NMMCwgImNsa19zbW11M19nc2NsMCIsCisJCQkibW91dF9hY2xrX2dzY2xfMzMzX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9HU0NMMCwgMTcsIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfU01NVTNfR1NDTDEsICJjbGtfc21tdTNfZ3NjbDEiLCAibW91dF9hY2xrX2dzY2xfMzMzX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9HU0NMMSwgMTgsIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfU01NVTNfTVNDTDAsICJjbGtfc21tdTNfbXNjbDAiLAorCQkJIm1vdXRfYWNsa19tMm1fNDAwX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9NU0NMMCwgMTksIDAsIDApLAorCUdBVEUoR1NDTF9DTEtfU01NVTNfTVNDTDEsICJjbGtfc21tdTNfbXNjbDEiLAorCQkJIm1vdXRfYWNsa19tMm1fNDAwX3VzZXIiLAorCQkJRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9NU0NMMSwgMjAsIDAsIDApLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczUyNjBfY2xrX2dzY2xfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBleHlub3M1MjYwX2NtdV9pbmZvIGNtdSA9IHswfTsKKworCWNtdS5tdXhfY2xrcyA9IGdzY2xfbXV4X2Nsa3M7CisJY211Lm5yX211eF9jbGtzID0gQVJSQVlfU0laRShnc2NsX211eF9jbGtzKTsKKwljbXUuZGl2X2Nsa3MgPSBnc2NsX2Rpdl9jbGtzOworCWNtdS5ucl9kaXZfY2xrcyA9IEFSUkFZX1NJWkUoZ3NjbF9kaXZfY2xrcyk7CisJY211LmdhdGVfY2xrcyA9IGdzY2xfZ2F0ZV9jbGtzOworCWNtdS5ucl9nYXRlX2Nsa3MgPSBBUlJBWV9TSVpFKGdzY2xfZ2F0ZV9jbGtzKTsKKwljbXUubnJfY2xrX2lkcyA9IEdTQ0xfTlJfQ0xLOworCWNtdS5jbGtfcmVncyA9IGdzY2xfY2xrX3JlZ3M7CisJY211Lm5yX2Nsa19yZWdzID0gQVJSQVlfU0laRShnc2NsX2Nsa19yZWdzKTsKKworCWV4eW5vczUyNjBfY211X3JlZ2lzdGVyX29uZShucCwgJmNtdSk7Cit9CisKK0NMS19PRl9ERUNMQVJFKGV4eW5vczUyNjBfY2xrX2dzY2wsICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2stZ3NjbCIsCisJCWV4eW5vczUyNjBfY2xrX2dzY2xfaW5pdCk7CisKKworLyogQ01VX0lTUCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpc3BfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCU1VWF9TRUxfSVNQMCwKKwlNVVhfU0VMX0lTUDEsCisJRElWX0lTUCwKKwlFTl9BQ0xLX0lTUDAsCisJRU5fQUNMS19JU1AxLAorCUVOX1BDTEtfSVNQMCwKKwlFTl9QQ0xLX0lTUDEsCisJRU5fU0NMS19JU1AsCisJRU5fSVBfSVNQMCwKKwlFTl9JUF9JU1AxLAorfTsKKworUE5BTUUobW91dF9pc3BfNDAwX3VzZXJfcCkgPSB7ImZpbl9wbGwiLCAiZG91dF9hY2xrX2lzcDFfNDAwIn07CitQTkFNRShtb3V0X2lzcF8yNjZfdXNlcl9wKQkgPSB7ImZpbl9wbGwiLCAiZG91dF9hY2xrX2lzcDFfMjY2In07CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBpc3BfbXV4X2Nsa3NbXSBfX2luaXRkYXRhID0geworCU1VWChJU1BfTU9VVF9JU1BfMjY2X1VTRVIsICJtb3V0X2lzcF8yNjZfdXNlciIsIG1vdXRfaXNwXzI2Nl91c2VyX3AsCisJCQlNVVhfU0VMX0lTUDAsIDAsIDEpLAorCU1VWChJU1BfTU9VVF9JU1BfNDAwX1VTRVIsICJtb3V0X2lzcF80MDBfdXNlciIsIG1vdXRfaXNwXzQwMF91c2VyX3AsCisJCQlNVVhfU0VMX0lTUDAsIDQsIDEpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIGlzcF9kaXZfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKElTUF9ET1VUX1BDTEtfSVNQXzY2LCAiZG91dF9wY2xrX2lzcF82NiIsICJtb3V0X2tmYyIsCisJCQlESVZfSVNQLCAwLCAzKSwKKwlESVYoSVNQX0RPVVRfUENMS19JU1BfMTMzLCAiZG91dF9wY2xrX2lzcF8xMzMiLCAibW91dF9rZmMiLAorCQkJRElWX0lTUCwgNCwgNCksCisJRElWKElTUF9ET1VUX0NBNV9BVENMS0lOLCAiZG91dF9jYTVfYXRjbGtpbiIsICJtb3V0X2tmYyIsCisJCQlESVZfSVNQLCAxMiwgMyksCisJRElWKElTUF9ET1VUX0NBNV9QQ0xLREJHLCAiZG91dF9jYTVfcGNsa2RiZyIsICJtb3V0X2tmYyIsCisJCQlESVZfSVNQLCAxNiwgNCksCisJRElWKElTUF9ET1VUX1NDTEtfTVBXTSwgImRvdXRfc2Nsa19tcHdtIiwgIm1vdXRfa2ZjIiwgRElWX0lTUCwgMjAsIDIpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBpc3BfZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKElTUF9DTEtfR0lDLCAiY2xrX2lzcF9naWMiLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDAsIDE1LCAwLCAwKSwKKworCUdBVEUoSVNQX0NMS19DQTUsICJjbGtfaXNwX2NhNSIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgMSwgMCwgMCksCisJR0FURShJU1BfQ0xLX0ZJTUNfRFJDLCAiY2xrX2lzcF9maW1jX2RyYyIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgMiwgMCwgMCksCisJR0FURShJU1BfQ0xLX0ZJTUNfRkQsICJjbGtfaXNwX2ZpbWNfZmQiLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDMsIDAsIDApLAorCUdBVEUoSVNQX0NMS19GSU1DLCAiY2xrX2lzcF9maW1jIiwgIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCA0LCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfRklNQ19TQ0FMRVJDLCAiY2xrX2lzcF9maW1jX3NjYWxlcmMiLAorCQkJIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCA1LCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfRklNQ19TQ0FMRVJQLCAiY2xrX2lzcF9maW1jX3NjYWxlcnAiLAorCQkJIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCA2LCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfSTJDMCwgImNsa19pc3BfaTJjMCIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgNywgMCwgMCksCisJR0FURShJU1BfQ0xLX0kyQzEsICJjbGtfaXNwX2kyYzEiLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDgsIDAsIDApLAorCUdBVEUoSVNQX0NMS19NQ1VDVEwsICJjbGtfaXNwX21jdWN0bCIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgOSwgMCwgMCksCisJR0FURShJU1BfQ0xLX01QV00sICJjbGtfaXNwX21wd20iLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDEwLCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfTVRDQURDLCAiY2xrX2lzcF9tdGNhZGMiLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDExLCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfUFdNLCAiY2xrX2lzcF9wd20iLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDE0LCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfU01NVV9EUkMsICJjbGtfc21tdV9kcmMiLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDIxLCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfU01NVV9GRCwgImNsa19zbW11X2ZkIiwgIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCAyMiwgMCwgMCksCisJR0FURShJU1BfQ0xLX1NNTVVfSVNQLCAiY2xrX3NtbXVfaXNwIiwgIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCAyMywgMCwgMCksCisJR0FURShJU1BfQ0xLX1NNTVVfSVNQQ1gsICJjbGtfc21tdV9pc3BjeCIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgMjQsIDAsIDApLAorCUdBVEUoSVNQX0NMS19TTU1VX1NDQUxFUkMsICJjbGtfaXNwX3NtbXVfc2NhbGVyYyIsCisJCQkibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDI1LCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfU01NVV9TQ0FMRVJQLCAiY2xrX2lzcF9zbW11X3NjYWxlcnAiLAorCQkJIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCAyNiwgMCwgMCksCisJR0FURShJU1BfQ0xLX1NQSTAsICJjbGtfaXNwX3NwaTAiLCAibW91dF9hY2xrX2lzcDFfMjY2IiwKKwkJCUVOX0lQX0lTUDEsIDI3LCAwLCAwKSwKKwlHQVRFKElTUF9DTEtfU1BJMSwgImNsa19pc3Bfc3BpMSIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgMjgsIDAsIDApLAorCUdBVEUoSVNQX0NMS19XRFQsICJjbGtfaXNwX3dkdCIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRU5fSVBfSVNQMSwgMzEsIDAsIDApLAorCUdBVEUoSVNQX0NMS19VQVJULCAiY2xrX2lzcF91YXJ0IiwgIm1vdXRfYWNsa19pc3AxXzI2NiIsCisJCQlFTl9JUF9JU1AxLCAzMCwgMCwgMCksCisKKwlHQVRFKElTUF9TQ0xLX1VBUlRfRVhULCAic2Nsa19pc3BfdWFydF9leHQiLCAiZmluX3BsbCIsCisJCQlFTl9TQ0xLX0lTUCwgNywgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShJU1BfU0NMS19TUEkxX0VYVCwgInNjbGtfaXNwX3NwaTFfZXh0IiwgImZpbl9wbGwiLAorCQkJRU5fU0NMS19JU1AsIDgsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoSVNQX1NDTEtfU1BJMF9FWFQsICJzY2xrX2lzcF9zcGkwX2V4dCIsICJmaW5fcGxsIiwKKwkJCUVOX1NDTEtfSVNQLCA5LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1MjYwX2Nsa19pc3BfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBleHlub3M1MjYwX2NtdV9pbmZvIGNtdSA9IHswfTsKKworCWNtdS5tdXhfY2xrcyA9IGlzcF9tdXhfY2xrczsKKwljbXUubnJfbXV4X2Nsa3MgPSBBUlJBWV9TSVpFKGlzcF9tdXhfY2xrcyk7CisJY211LmRpdl9jbGtzID0gaXNwX2Rpdl9jbGtzOworCWNtdS5ucl9kaXZfY2xrcyA9IEFSUkFZX1NJWkUoaXNwX2Rpdl9jbGtzKTsKKwljbXUuZ2F0ZV9jbGtzID0gaXNwX2dhdGVfY2xrczsKKwljbXUubnJfZ2F0ZV9jbGtzID0gQVJSQVlfU0laRShpc3BfZ2F0ZV9jbGtzKTsKKwljbXUubnJfY2xrX2lkcyA9IElTUF9OUl9DTEs7CisJY211LmNsa19yZWdzID0gaXNwX2Nsa19yZWdzOworCWNtdS5ucl9jbGtfcmVncyA9IEFSUkFZX1NJWkUoaXNwX2Nsa19yZWdzKTsKKworCWV4eW5vczUyNjBfY211X3JlZ2lzdGVyX29uZShucCwgJmNtdSk7Cit9CisKK0NMS19PRl9ERUNMQVJFKGV4eW5vczUyNjBfY2xrX2lzcCwgInNhbXN1bmcsZXh5bm9zNTI2MC1jbG9jay1pc3AiLAorCQlleHlub3M1MjYwX2Nsa19pc3BfaW5pdCk7CisKKworLyogQ01VX0tGQyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmNfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCUtGQ19QTExfTE9DSywKKwlLRkNfUExMX0NPTjAsCisJS0ZDX1BMTF9DT04xLAorCUtGQ19QTExfRkRFVCwKKwlNVVhfU0VMX0tGQzAsCisJTVVYX1NFTF9LRkMyLAorCURJVl9LRkMsCisJRElWX0tGQ19QTExfRkRFVCwKKwlFTl9BQ0xLX0tGQywKKwlFTl9QQ0xLX0tGQywKKwlFTl9TQ0xLX0tGQywKKwlFTl9JUF9LRkMsCit9OworCitQTkFNRShtb3V0X2tmY19wbGxfcCkgPSB7ImZpbl9wbGwiLCAiZm91dF9rZmNfcGxsIn07CitQTkFNRShtb3V0X2tmY19wKQkgPSB7Im1vdXRfa2ZjX3BsbCIsICJkb3V0X21lZGlhX3BsbCJ9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sga2ZjX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoS0ZDX01PVVRfS0ZDX1BMTCwgIm1vdXRfa2ZjX3BsbCIsIG1vdXRfa2ZjX3BsbF9wLAorCQkJTVVYX1NFTF9LRkMwLCAwLCAxKSwKKwlNVVgoS0ZDX01PVVRfS0ZDLCAibW91dF9rZmMiLCBtb3V0X2tmY19wLCBNVVhfU0VMX0tGQzIsIDAsIDEpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIGtmY19kaXZfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKEtGQ19ET1VUX0tGQzEsICJkb3V0X2tmYzEiLCAibW91dF9rZmMiLCBESVZfS0ZDLCAwLCAzKSwKKwlESVYoS0ZDX0RPVVRfS0ZDMiwgImRvdXRfa2ZjMiIsICJkb3V0X2tmYzEiLCBESVZfS0ZDLCA0LCAzKSwKKwlESVYoS0ZDX0RPVVRfS0ZDX0FUQ0xLLCAiZG91dF9rZmNfYXRjbGsiLCAiZG91dF9rZmMyIiwgRElWX0tGQywgOCwgMyksCisJRElWKEtGQ19ET1VUX0tGQ19QQ0xLX0RCRywgImRvdXRfa2ZjX3BjbGtfZGJnIiwgImRvdXRfa2ZjMiIsCisJCQlESVZfS0ZDLCAxMiwgMyksCisJRElWKEtGQ19ET1VUX0FDTEtfS0ZDLCAiZG91dF9hY2xrX2tmYyIsICJkb3V0X2tmYzIiLCBESVZfS0ZDLCAxNiwgMyksCisJRElWKEtGQ19ET1VUX1BDTEtfS0ZDLCAiZG91dF9wY2xrX2tmYyIsICJkb3V0X2tmYzIiLCBESVZfS0ZDLCAyMCwgMyksCisJRElWKEtGQ19ET1VUX0tGQ19QTEwsICJkb3V0X2tmY19wbGwiLCAibW91dF9rZmMiLCBESVZfS0ZDLCAyNCwgMyksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIGtmY19wbGxfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJUExMKHBsbF8yNTUweHgsIEtGQ19GT1VUX0tGQ19QTEwsICJmb3V0X2tmY19wbGwiLCAiZmluX3BsbCIsCisJCUtGQ19QTExfTE9DSywgS0ZDX1BMTF9DT04wLAorCQlwbGwyNTUwXzI0bWh6X3RibCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNTI2MF9jbGtfa2ZjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyBjbXUgPSB7MH07CisKKwljbXUucGxsX2Nsa3MgPSBrZmNfcGxsX2Nsa3M7CisJY211Lm5yX3BsbF9jbGtzID0gIEFSUkFZX1NJWkUoa2ZjX3BsbF9jbGtzKTsKKwljbXUubXV4X2Nsa3MgPSBrZmNfbXV4X2Nsa3M7CisJY211Lm5yX211eF9jbGtzID0gQVJSQVlfU0laRShrZmNfbXV4X2Nsa3MpOworCWNtdS5kaXZfY2xrcyA9IGtmY19kaXZfY2xrczsKKwljbXUubnJfZGl2X2Nsa3MgPSBBUlJBWV9TSVpFKGtmY19kaXZfY2xrcyk7CisJY211Lm5yX2Nsa19pZHMgPSBLRkNfTlJfQ0xLOworCWNtdS5jbGtfcmVncyA9IGtmY19jbGtfcmVnczsKKwljbXUubnJfY2xrX3JlZ3MgPSBBUlJBWV9TSVpFKGtmY19jbGtfcmVncyk7CisKKwlleHlub3M1MjYwX2NtdV9yZWdpc3Rlcl9vbmUobnAsICZjbXUpOworfQorCitDTEtfT0ZfREVDTEFSRShleHlub3M1MjYwX2Nsa19rZmMsICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2sta2ZjIiwKKwkJZXh5bm9zNTI2MF9jbGtfa2ZjX2luaXQpOworCisKKy8qIENNVV9NRkMgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWZjX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlNVVhfU0VMX01GQywKKwlESVZfTUZDLAorCUVOX0FDTEtfTUZDLAorCUVOX0FDTEtfU0VDVVJFX1NNTVUyX01GQywKKwlFTl9QQ0xLX01GQywKKwlFTl9QQ0xLX1NFQ1VSRV9TTU1VMl9NRkMsCisJRU5fSVBfTUZDLAorCUVOX0lQX01GQ19TRUNVUkVfU01NVTJfTUZDLAorfTsKKworUE5BTUUobW91dF9hY2xrX21mY18zMzNfdXNlcl9wKSA9IHsiZmluX3BsbCIsICJkb3V0X2FjbGtfbWZjXzMzMyJ9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgbWZjX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoTUZDX01PVVRfQUNMS19NRkNfMzMzX1VTRVIsICJtb3V0X2FjbGtfbWZjXzMzM191c2VyIiwKKwkJCW1vdXRfYWNsa19tZmNfMzMzX3VzZXJfcCwKKwkJCU1VWF9TRUxfTUZDLCAwLCAxKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBtZmNfZGl2X2Nsa3NbXSBfX2luaXRkYXRhID0geworCURJVihNRkNfRE9VVF9QQ0xLX01GQ184MywgImRvdXRfcGNsa19tZmNfODMiLCAibW91dF9hY2xrX21mY18zMzNfdXNlciIsCisJCQlESVZfTUZDLCAwLCAzKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgbWZjX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShNRkNfQ0xLX01GQywgImNsa19tZmMiLCAibW91dF9hY2xrX21mY18zMzNfdXNlciIsCisJCQlFTl9JUF9NRkMsIDEsIDAsIDApLAorCUdBVEUoTUZDX0NMS19TTU1VMl9NRkNNMCwgImNsa19zbW11Ml9tZmNtMCIsICJtb3V0X2FjbGtfbWZjXzMzM191c2VyIiwKKwkJCUVOX0lQX01GQ19TRUNVUkVfU01NVTJfTUZDLCA2LCAwLCAwKSwKKwlHQVRFKE1GQ19DTEtfU01NVTJfTUZDTTEsICJjbGtfc21tdTJfbWZjbTEiLCAibW91dF9hY2xrX21mY18zMzNfdXNlciIsCisJCQlFTl9JUF9NRkNfU0VDVVJFX1NNTVUyX01GQywgNywgMCwgMCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNTI2MF9jbGtfbWZjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyBjbXUgPSB7MH07CisKKwljbXUubXV4X2Nsa3MgPSBtZmNfbXV4X2Nsa3M7CisJY211Lm5yX211eF9jbGtzID0gQVJSQVlfU0laRShtZmNfbXV4X2Nsa3MpOworCWNtdS5kaXZfY2xrcyA9IG1mY19kaXZfY2xrczsKKwljbXUubnJfZGl2X2Nsa3MgPSBBUlJBWV9TSVpFKG1mY19kaXZfY2xrcyk7CisJY211LmdhdGVfY2xrcyA9IG1mY19nYXRlX2Nsa3M7CisJY211Lm5yX2dhdGVfY2xrcyA9IEFSUkFZX1NJWkUobWZjX2dhdGVfY2xrcyk7CisJY211Lm5yX2Nsa19pZHMgPSBNRkNfTlJfQ0xLOworCWNtdS5jbGtfcmVncyA9IG1mY19jbGtfcmVnczsKKwljbXUubnJfY2xrX3JlZ3MgPSBBUlJBWV9TSVpFKG1mY19jbGtfcmVncyk7CisKKwlleHlub3M1MjYwX2NtdV9yZWdpc3Rlcl9vbmUobnAsICZjbXUpOworfQorCitDTEtfT0ZfREVDTEFSRShleHlub3M1MjYwX2Nsa19tZmMsICJzYW1zdW5nLGV4eW5vczUyNjAtY2xvY2stbWZjIiwKKwkJZXh5bm9zNTI2MF9jbGtfbWZjX2luaXQpOworCisKKy8qIENNVV9NSUYgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlmX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlNRU1fUExMX0xPQ0ssCisJQlVTX1BMTF9MT0NLLAorCU1FRElBX1BMTF9MT0NLLAorCU1FTV9QTExfQ09OMCwKKwlNRU1fUExMX0NPTjEsCisJTUVNX1BMTF9GREVULAorCUJVU19QTExfQ09OMCwKKwlCVVNfUExMX0NPTjEsCisJQlVTX1BMTF9GREVULAorCU1FRElBX1BMTF9DT04wLAorCU1FRElBX1BMTF9DT04xLAorCU1FRElBX1BMTF9GREVULAorCU1VWF9TRUxfTUlGLAorCURJVl9NSUYsCisJRElWX01JRl9QTExfRkRFVCwKKwlFTl9BQ0xLX01JRiwKKwlFTl9BQ0xLX01JRl9TRUNVUkVfRFJFWDFfVFosCisJRU5fQUNMS19NSUZfU0VDVVJFX0RSRVgwX1RaLAorCUVOX0FDTEtfTUlGX1NFQ1VSRV9JTlRNRU0sCisJRU5fUENMS19NSUYsCisJRU5fUENMS19NSUZfU0VDVVJFX01PTk9DTlQsCisJRU5fUENMS19NSUZfU0VDVVJFX1JUQ19BUEJJRiwKKwlFTl9QQ0xLX01JRl9TRUNVUkVfRFJFWDFfVFosCisJRU5fUENMS19NSUZfU0VDVVJFX0RSRVgwX1RaLAorCUVOX1NDTEtfTUlGLAorCUVOX0lQX01JRiwKKwlFTl9JUF9NSUZfU0VDVVJFX01PTk9DTlQsCisJRU5fSVBfTUlGX1NFQ1VSRV9SVENfQVBCSUYsCisJRU5fSVBfTUlGX1NFQ1VSRV9EUkVYMV9UWiwKKwlFTl9JUF9NSUZfU0VDVVJFX0RSRVgwX1RaLAorCUVOX0lQX01JRl9TRUNVUkVfSU5URU1FTSwKK307CisKK1BOQU1FKG1vdXRfbWVtX3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X21lbV9wbGwifTsKK1BOQU1FKG1vdXRfYnVzX3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2J1c19wbGwifTsKK1BOQU1FKG1vdXRfbWVkaWFfcGxsX3ApID0geyJmaW5fcGxsIiwgImZvdXRfbWVkaWFfcGxsIn07CitQTkFNRShtb3V0X21pZl9kcmV4X3ApID0geyJkb3V0X21lbV9wbGwiLCAiZG91dF9idXNfcGxsIn07CitQTkFNRShtb3V0X21pZl9kcmV4MnhfcCkgPSB7ImRvdXRfbWVtX3BsbCIsICJkb3V0X2J1c19wbGwifTsKK1BOQU1FKG1vdXRfY2xrbV9waHlfcCkgPSB7Im1vdXRfbWlmX2RyZXgiLCAiZG91dF9tZWRpYV9wbGwifTsKK1BOQU1FKG1vdXRfY2xrMnhfcGh5X3ApID0geyJtb3V0X21pZl9kcmV4MngiLCAiZG91dF9tZWRpYV9wbGwifTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIG1pZl9tdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKE1JRl9NT1VUX01FTV9QTEwsICJtb3V0X21lbV9wbGwiLCBtb3V0X21lbV9wbGxfcCwKKwkJCU1VWF9TRUxfTUlGLCAwLCAxKSwKKwlNVVgoTUlGX01PVVRfQlVTX1BMTCwgIm1vdXRfYnVzX3BsbCIsIG1vdXRfYnVzX3BsbF9wLAorCQkJTVVYX1NFTF9NSUYsIDQsIDEpLAorCU1VWChNSUZfTU9VVF9NRURJQV9QTEwsICJtb3V0X21lZGlhX3BsbCIsIG1vdXRfbWVkaWFfcGxsX3AsCisJCQlNVVhfU0VMX01JRiwgOCwgMSksCisJTVVYKE1JRl9NT1VUX01JRl9EUkVYLCAibW91dF9taWZfZHJleCIsIG1vdXRfbWlmX2RyZXhfcCwKKwkJCU1VWF9TRUxfTUlGLCAxMiwgMSksCisJTVVYKE1JRl9NT1VUX0NMS01fUEhZLCAibW91dF9jbGttX3BoeSIsIG1vdXRfY2xrbV9waHlfcCwKKwkJCU1VWF9TRUxfTUlGLCAxNiwgMSksCisJTVVYKE1JRl9NT1VUX01JRl9EUkVYMlgsICJtb3V0X21pZl9kcmV4MngiLCBtb3V0X21pZl9kcmV4MnhfcCwKKwkJCU1VWF9TRUxfTUlGLCAyMCwgMSksCisJTVVYKE1JRl9NT1VUX0NMSzJYX1BIWSwgIm1vdXRfY2xrMnhfcGh5IiwgbW91dF9jbGsyeF9waHlfcCwKKwkJCU1VWF9TRUxfTUlGLCAyNCwgMSksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgbWlmX2Rpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlESVYoTUlGX0RPVVRfTUVESUFfUExMLCAiZG91dF9tZWRpYV9wbGwiLCAibW91dF9tZWRpYV9wbGwiLAorCQkJRElWX01JRiwgMCwgMyksCisJRElWKE1JRl9ET1VUX01FTV9QTEwsICJkb3V0X21lbV9wbGwiLCAibW91dF9tZW1fcGxsIiwKKwkJCURJVl9NSUYsIDQsIDMpLAorCURJVihNSUZfRE9VVF9CVVNfUExMLCAiZG91dF9idXNfcGxsIiwgIm1vdXRfYnVzX3BsbCIsCisJCQlESVZfTUlGLCA4LCAzKSwKKwlESVYoTUlGX0RPVVRfQ0xLTV9QSFksICJkb3V0X2Nsa21fcGh5IiwgIm1vdXRfY2xrbV9waHkiLAorCQkJRElWX01JRiwgMTIsIDMpLAorCURJVihNSUZfRE9VVF9DTEsyWF9QSFksICJkb3V0X2NsazJ4X3BoeSIsICJtb3V0X2NsazJ4X3BoeSIsCisJCQlESVZfTUlGLCAxNiwgNCksCisJRElWKE1JRl9ET1VUX0FDTEtfTUlGXzQ2NiwgImRvdXRfYWNsa19taWZfNDY2IiwgImRvdXRfY2xrMnhfcGh5IiwKKwkJCURJVl9NSUYsIDIwLCAzKSwKKwlESVYoTUlGX0RPVVRfQUNMS19CVVNfMjAwLCAiZG91dF9hY2xrX2J1c18yMDAiLCAiZG91dF9idXNfcGxsIiwKKwkJCURJVl9NSUYsIDI0LCAzKSwKKwlESVYoTUlGX0RPVVRfQUNMS19CVVNfMTAwLCAiZG91dF9hY2xrX2J1c18xMDAiLCAiZG91dF9idXNfcGxsIiwKKwkJCURJVl9NSUYsIDI4LCA0KSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgbWlmX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShNSUZfQ0xLX0xQRERSM1BIWV9XUkFQMCwgImNsa19scGRkcjNwaHlfd3JhcDAiLCAiZG91dF9jbGsyeF9waHkiLAorCQkJRU5fSVBfTUlGLCAxMiwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoTUlGX0NMS19MUEREUjNQSFlfV1JBUDEsICJjbGtfbHBkZHIzcGh5X3dyYXAxIiwgImRvdXRfY2xrMnhfcGh5IiwKKwkJCUVOX0lQX01JRiwgMTMsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKworCUdBVEUoTUlGX0NMS19NT05PQ05ULCAiY2xrX21vbm9jbnQiLCAiZG91dF9hY2xrX2J1c18xMDAiLAorCQkJRU5fSVBfTUlGX1NFQ1VSRV9NT05PQ05ULCAyMiwKKwkJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKworCUdBVEUoTUlGX0NMS19NSUZfUlRDLCAiY2xrX21pZl9ydGMiLCAiZG91dF9hY2xrX2J1c18xMDAiLAorCQkJRU5fSVBfTUlGX1NFQ1VSRV9SVENfQVBCSUYsIDIzLAorCQkJQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCisJR0FURShNSUZfQ0xLX0RSRVgxLCAiY2xrX2RyZXgxIiwgImRvdXRfYWNsa19taWZfNDY2IiwKKwkJCUVOX0lQX01JRl9TRUNVUkVfRFJFWDFfVFosIDksCisJCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisKKwlHQVRFKE1JRl9DTEtfRFJFWDAsICJjbGtfZHJleDAiLCAiZG91dF9hY2xrX21pZl80NjYiLAorCQkJRU5fSVBfTUlGX1NFQ1VSRV9EUkVYMF9UWiwgOSwKKwkJCUNMS19JR05PUkVfVU5VU0VELCAwKSwKKworCUdBVEUoTUlGX0NMS19JTlRNRU0sICJjbGtfaW50bWVtIiwgImRvdXRfYWNsa19idXNfMjAwIiwKKwkJCUVOX0lQX01JRl9TRUNVUkVfSU5URU1FTSwgMTEsCisJCQlDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisKKwlHQVRFKE1JRl9TQ0xLX0xQRERSM1BIWV9XUkFQX1UwLCAic2Nsa19scGRkcjNwaHlfd3JhcF91MCIsCisJCQkiZG91dF9jbGttX3BoeSIsIEVOX1NDTEtfTUlGLCAwLAorCQkJQ0xLX0lHTk9SRV9VTlVTRUQgfCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKE1JRl9TQ0xLX0xQRERSM1BIWV9XUkFQX1UxLCAic2Nsa19scGRkcjNwaHlfd3JhcF91MSIsCisJCQkiZG91dF9jbGttX3BoeSIsIEVOX1NDTEtfTUlGLCAxLAorCQkJQ0xLX0lHTk9SRV9VTlVTRUQgfCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfY2xvY2sgbWlmX3BsbF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlQTEwocGxsXzI1NTB4eCwgTUlGX0ZPVVRfTUVNX1BMTCwgImZvdXRfbWVtX3BsbCIsICJmaW5fcGxsIiwKKwkJTUVNX1BMTF9MT0NLLCBNRU1fUExMX0NPTjAsCisJCXBsbDI1NTBfMjRtaHpfdGJsKSwKKwlQTEwocGxsXzI1NTB4eCwgTUlGX0ZPVVRfQlVTX1BMTCwgImZvdXRfYnVzX3BsbCIsICJmaW5fcGxsIiwKKwkJQlVTX1BMTF9MT0NLLCBCVVNfUExMX0NPTjAsCisJCXBsbDI1NTBfMjRtaHpfdGJsKSwKKwlQTEwocGxsXzI1NTB4eCwgTUlGX0ZPVVRfTUVESUFfUExMLCAiZm91dF9tZWRpYV9wbGwiLCAiZmluX3BsbCIsCisJCU1FRElBX1BMTF9MT0NLLCBNRURJQV9QTExfQ09OMCwKKwkJcGxsMjU1MF8yNG1oel90YmwpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczUyNjBfY2xrX21pZl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGV4eW5vczUyNjBfY211X2luZm8gY211ID0gezB9OworCisJY211LnBsbF9jbGtzID0gbWlmX3BsbF9jbGtzOworCWNtdS5ucl9wbGxfY2xrcyA9ICBBUlJBWV9TSVpFKG1pZl9wbGxfY2xrcyk7CisJY211Lm11eF9jbGtzID0gbWlmX211eF9jbGtzOworCWNtdS5ucl9tdXhfY2xrcyA9IEFSUkFZX1NJWkUobWlmX211eF9jbGtzKTsKKwljbXUuZGl2X2Nsa3MgPSBtaWZfZGl2X2Nsa3M7CisJY211Lm5yX2Rpdl9jbGtzID0gQVJSQVlfU0laRShtaWZfZGl2X2Nsa3MpOworCWNtdS5nYXRlX2Nsa3MgPSBtaWZfZ2F0ZV9jbGtzOworCWNtdS5ucl9nYXRlX2Nsa3MgPSBBUlJBWV9TSVpFKG1pZl9nYXRlX2Nsa3MpOworCWNtdS5ucl9jbGtfaWRzID0gTUlGX05SX0NMSzsKKwljbXUuY2xrX3JlZ3MgPSBtaWZfY2xrX3JlZ3M7CisJY211Lm5yX2Nsa19yZWdzID0gQVJSQVlfU0laRShtaWZfY2xrX3JlZ3MpOworCisJZXh5bm9zNTI2MF9jbXVfcmVnaXN0ZXJfb25lKG5wLCAmY211KTsKK30KKworQ0xLX09GX0RFQ0xBUkUoZXh5bm9zNTI2MF9jbGtfbWlmLCAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLW1pZiIsCisJCWV4eW5vczUyNjBfY2xrX21pZl9pbml0KTsKKworCisvKiBDTVVfUEVSSSAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJpX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlNVVhfU0VMX1BFUkksCisJTVVYX1NFTF9QRVJJMSwKKwlESVZfUEVSSSwKKwlFTl9QQ0xLX1BFUkkwLAorCUVOX1BDTEtfUEVSSTEsCisJRU5fUENMS19QRVJJMiwKKwlFTl9QQ0xLX1BFUkkzLAorCUVOX1BDTEtfUEVSSV9TRUNVUkVfQ0hJUElELAorCUVOX1BDTEtfUEVSSV9TRUNVUkVfUFJPVktFWTAsCisJRU5fUENMS19QRVJJX1NFQ1VSRV9QUk9WS0VZMSwKKwlFTl9QQ0xLX1BFUklfU0VDVVJFX1NFQ0tFWSwKKwlFTl9QQ0xLX1BFUklfU0VDVVJFX0FOVElSQktDTlQsCisJRU5fUENMS19QRVJJX1NFQ1VSRV9UT1BfUlRDLAorCUVOX1BDTEtfUEVSSV9TRUNVUkVfVFpQQywKKwlFTl9TQ0xLX1BFUkksCisJRU5fU0NMS19QRVJJX1NFQ1VSRV9UT1BfUlRDLAorCUVOX0lQX1BFUkkwLAorCUVOX0lQX1BFUkkxLAorCUVOX0lQX1BFUkkyLAorCUVOX0lQX1BFUklfU0VDVVJFX0NISVBJRCwKKwlFTl9JUF9QRVJJX1NFQ1VSRV9QUk9WS0VZMCwKKwlFTl9JUF9QRVJJX1NFQ1VSRV9QUk9WS0VZMSwKKwlFTl9JUF9QRVJJX1NFQ1VSRV9TRUNLRVksCisJRU5fSVBfUEVSSV9TRUNVUkVfQU5USVJCS0NOVCwKKwlFTl9JUF9QRVJJX1NFQ1VSRV9UT1BfUlRDLAorCUVOX0lQX1BFUklfU0VDVVJFX1RaUEMsCit9OworCitQTkFNRShtb3V0X3NjbGtfcGNtX3ApID0geyJpb2Nsa19wY21fZXh0Y2xrIiwgImZpbl9wbGwiLCAiZG91dF9hY2xrX3BlcmlfYXVkIiwKKwkJCSJwaHljbGtfaGRtaV9waHlfcmVmX2NrbyJ9OworUE5BTUUobW91dF9zY2xrX2kyc2NvZF9wKSA9IHsiaW9jbGtfaTJzX2NkY2xrIiwgImZpbl9wbGwiLCAiZG91dF9hY2xrX3BlcmlfYXVkIiwKKwkJCSJwaHljbGtfaGRtaV9waHlfcmVmX2NrbyJ9OworUE5BTUUobW91dF9zY2xrX3NwZGlmX3ApID0geyJpb2Nsa19zcGRpZl9leHRjbGsiLCAiZmluX3BsbCIsCisJCQkiZG91dF9hY2xrX3BlcmlfYXVkIiwgInBoeWNsa19oZG1pX3BoeV9yZWZfY2tvIn07CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBwZXJpX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoUEVSSV9NT1VUX1NDTEtfUENNLCAibW91dF9zY2xrX3BjbSIsIG1vdXRfc2Nsa19wY21fcCwKKwkJCU1VWF9TRUxfUEVSSTEsIDQsIDIpLAorCU1VWChQRVJJX01PVVRfU0NMS19JMlNDT0QsICJtb3V0X3NjbGtfaTJzY29kIiwgbW91dF9zY2xrX2kyc2NvZF9wLAorCQkJTVVYX1NFTF9QRVJJMSwgMTIsIDIpLAorCU1VWChQRVJJX01PVVRfU0NMS19TUERJRiwgIm1vdXRfc2Nsa19zcGRpZiIsIG1vdXRfc2Nsa19zcGRpZl9wLAorCQkJTVVYX1NFTF9QRVJJMSwgMjAsIDIpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIHBlcmlfZGl2X2Nsa3NbXSBfX2luaXRkYXRhID0geworCURJVihQRVJJX0RPVVRfUENNLCAiZG91dF9wY20iLCAibW91dF9zY2xrX3BjbSIsIERJVl9QRVJJLCAwLCA4KSwKKwlESVYoUEVSSV9ET1VUX0kyUywgImRvdXRfaTJzIiwgIm1vdXRfc2Nsa19pMnNjb2QiLCBESVZfUEVSSSwgOCwgNiksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrIHBlcmlfZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKFBFUklfU0NMS19QQ00xLCAic2Nsa19wY20xIiwgImRvdXRfcGNtIiwgRU5fU0NMS19QRVJJLCAwLAorCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShQRVJJX1NDTEtfSTJTLCAic2Nsa19pMnMiLCAiZG91dF9pMnMiLCBFTl9TQ0xLX1BFUkksIDEsCisJCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKFBFUklfU0NMS19TUERJRiwgInNjbGtfc3BkaWYiLCAiZG91dF9zY2xrX3Blcmlfc3BpMF9iIiwKKwkJCUVOX1NDTEtfUEVSSSwgMiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShQRVJJX1NDTEtfU1BJMCwgInNjbGtfc3BpMCIsICJkb3V0X3NjbGtfcGVyaV9zcGkwX2IiLAorCQkJRU5fU0NMS19QRVJJLCA3LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKFBFUklfU0NMS19TUEkxLCAic2Nsa19zcGkxIiwgImRvdXRfc2Nsa19wZXJpX3NwaTFfYiIsCisJCQlFTl9TQ0xLX1BFUkksIDgsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoUEVSSV9TQ0xLX1NQSTIsICJzY2xrX3NwaTIiLCAiZG91dF9zY2xrX3Blcmlfc3BpMl9iIiwKKwkJCUVOX1NDTEtfUEVSSSwgOSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShQRVJJX1NDTEtfVUFSVDAsICJzY2xrX3VhcnQwIiwgImRvdXRfc2Nsa19wZXJpX3VhcnQwIiwKKwkJCUVOX1NDTEtfUEVSSSwgMTAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoUEVSSV9TQ0xLX1VBUlQxLCAic2Nsa191YXJ0MSIsICJkb3V0X3NjbGtfcGVyaV91YXJ0MSIsCisJCQlFTl9TQ0xLX1BFUkksIDExLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKFBFUklfU0NMS19VQVJUMiwgInNjbGtfdWFydDIiLCAiZG91dF9zY2xrX3BlcmlfdWFydDIiLAorCQkJRU5fU0NMS19QRVJJLCAxMiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisKKwlHQVRFKFBFUklfQ0xLX0FCQiwgImNsa19hYmIiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMCwgMSwgMCwgMCksCisJR0FURShQRVJJX0NMS19FRlVTRV9XUklURVIsICJjbGtfZWZ1c2Vfd3JpdGVyIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTAsIDUsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfSERNSUNFQywgImNsa19oZG1pY2VjIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTAsIDYsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfSTJDMTAsICJjbGtfaTJjMTAiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMCwgNywgMCwgMCksCisJR0FURShQRVJJX0NMS19JMkMxMSwgImNsa19pMmMxMSIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCA4LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX0kyQzgsICJjbGtfaTJjOCIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCA5LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX0kyQzksICJjbGtfaTJjOSIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAxMCwgMCwgMCksCisJR0FURShQRVJJX0NMS19JMkM0LCAiY2xrX2kyYzQiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMCwgMTEsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfSTJDNSwgImNsa19pMmM1IiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTAsIDEyLCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX0kyQzYsICJjbGtfaTJjNiIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAxMywgMCwgMCksCisJR0FURShQRVJJX0NMS19JMkM3LCAiY2xrX2kyYzciLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMCwgMTQsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfSTJDSERNSSwgImNsa19pMmNoZG1pIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTAsIDE1LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX0kyUywgImNsa19wZXJpX2kycyIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAxNiwgMCwgMCksCisJR0FURShQRVJJX0NMS19NQ1QsICJjbGtfbWN0IiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTAsIDE3LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX1BDTSwgImNsa19wZXJpX3BjbSIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAxOCwgMCwgMCksCisJR0FURShQRVJJX0NMS19IU0lDMCwgImNsa19oc2ljMCIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAyMCwgMCwgMCksCisJR0FURShQRVJJX0NMS19IU0lDMSwgImNsa19oc2ljMSIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAyMSwgMCwgMCksCisJR0FURShQRVJJX0NMS19IU0lDMiwgImNsa19oc2ljMiIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAyMiwgMCwgMCksCisJR0FURShQRVJJX0NMS19IU0lDMywgImNsa19oc2ljMyIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkwLCAyMywgMCwgMCksCisJR0FURShQRVJJX0NMS19XRFRfRUdMLCAiY2xrX3dkdF9lZ2wiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMCwgMjQsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfV0RUX0tGQywgImNsa193ZHRfa2ZjIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTAsIDI1LCAwLCAwKSwKKworCUdBVEUoUEVSSV9DTEtfVUFSVDQsICJjbGtfdWFydDQiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMCwgMCwgMCksCisJR0FURShQRVJJX0NMS19QV00sICJjbGtfcHdtIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTIsIDMsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfU1BESUYsICJjbGtfc3BkaWYiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgNiwgMCwgMCksCisJR0FURShQRVJJX0NMS19TUEkwLCAiY2xrX3NwaTAiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgNywgMCwgMCksCisJR0FURShQRVJJX0NMS19TUEkxLCAiY2xrX3NwaTEiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgOCwgMCwgMCksCisJR0FURShQRVJJX0NMS19TUEkyLCAiY2xrX3NwaTIiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgOSwgMCwgMCksCisJR0FURShQRVJJX0NMS19UTVUwLCAiY2xrX3RtdTAiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMTAsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVE1VMSwgImNsa190bXUxIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTIsIDExLCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX1RNVTIsICJjbGtfdG11MiIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUkkyLCAxMiwgMCwgMCksCisJR0FURShQRVJJX0NMS19UTVUzLCAiY2xrX3RtdTMiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMTMsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVE1VNCwgImNsa190bXU0IiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSTIsIDE0LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX0FEQywgImNsa19hZGMiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMTgsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVUFSVDAsICJjbGtfdWFydDAiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMTksIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVUFSVDEsICJjbGtfdWFydDEiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMjAsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVUFSVDIsICJjbGtfdWFydDIiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJMiwgMjEsIDAsIDApLAorCisJR0FURShQRVJJX0NMS19DSElQSUQsICJjbGtfY2hpcGlkIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfQ0hJUElELCAyLCAwLCAwKSwKKworCUdBVEUoUEVSSV9DTEtfUFJPVktFWTAsICJjbGtfcHJvdmtleTAiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJX1NFQ1VSRV9QUk9WS0VZMCwgMSwgMCwgMCksCisKKwlHQVRFKFBFUklfQ0xLX1BST1ZLRVkxLCAiY2xrX3Byb3ZrZXkxIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfUFJPVktFWTEsIDIsIDAsIDApLAorCisJR0FURShQRVJJX0NMS19TRUNLRVksICJjbGtfc2Vja2V5IiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfU0VDS0VZLCA1LCAwLCAwKSwKKworCUdBVEUoUEVSSV9DTEtfVE9QX1JUQywgImNsa190b3BfcnRjIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfVE9QX1JUQywgNSwgMCwgMCksCisKKwlHQVRFKFBFUklfQ0xLX1RaUEMwLCAiY2xrX3R6cGMwIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfVFpQQywgMTAsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVFpQQzEsICJjbGtfdHpwYzEiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJX1NFQ1VSRV9UWlBDLCAxMSwgMCwgMCksCisJR0FURShQRVJJX0NMS19UWlBDMiwgImNsa190enBjMiIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUklfU0VDVVJFX1RaUEMsIDEyLCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX1RaUEMzLCAiY2xrX3R6cGMzIiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfVFpQQywgMTMsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVFpQQzQsICJjbGtfdHpwYzQiLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJX1NFQ1VSRV9UWlBDLCAxNCwgMCwgMCksCisJR0FURShQRVJJX0NMS19UWlBDNSwgImNsa190enBjNSIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUklfU0VDVVJFX1RaUEMsIDE1LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX1RaUEM2LCAiY2xrX3R6cGM2IiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfVFpQQywgMTYsIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVFpQQzcsICJjbGtfdHpwYzciLCAiZG91dF9hY2xrX3BlcmlfNjYiLAorCQlFTl9JUF9QRVJJX1NFQ1VSRV9UWlBDLCAxNywgMCwgMCksCisJR0FURShQRVJJX0NMS19UWlBDOCwgImNsa190enBjOCIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUklfU0VDVVJFX1RaUEMsIDE4LCAwLCAwKSwKKwlHQVRFKFBFUklfQ0xLX1RaUEM5LCAiY2xrX3R6cGM5IiwgImRvdXRfYWNsa19wZXJpXzY2IiwKKwkJRU5fSVBfUEVSSV9TRUNVUkVfVFpQQywgMTksIDAsIDApLAorCUdBVEUoUEVSSV9DTEtfVFpQQzEwLCAiY2xrX3R6cGMxMCIsICJkb3V0X2FjbGtfcGVyaV82NiIsCisJCUVOX0lQX1BFUklfU0VDVVJFX1RaUEMsIDIwLCAwLCAwKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1MjYwX2Nsa19wZXJpX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZXh5bm9zNTI2MF9jbXVfaW5mbyBjbXUgPSB7MH07CisKKwljbXUubXV4X2Nsa3MgPSBwZXJpX211eF9jbGtzOworCWNtdS5ucl9tdXhfY2xrcyA9IEFSUkFZX1NJWkUocGVyaV9tdXhfY2xrcyk7CisJY211LmRpdl9jbGtzID0gcGVyaV9kaXZfY2xrczsKKwljbXUubnJfZGl2X2Nsa3MgPSBBUlJBWV9TSVpFKHBlcmlfZGl2X2Nsa3MpOworCWNtdS5nYXRlX2Nsa3MgPSBwZXJpX2dhdGVfY2xrczsKKwljbXUubnJfZ2F0ZV9jbGtzID0gQVJSQVlfU0laRShwZXJpX2dhdGVfY2xrcyk7CisJY211Lm5yX2Nsa19pZHMgPSBQRVJJX05SX0NMSzsKKwljbXUuY2xrX3JlZ3MgPSBwZXJpX2Nsa19yZWdzOworCWNtdS5ucl9jbGtfcmVncyA9IEFSUkFZX1NJWkUocGVyaV9jbGtfcmVncyk7CisKKwlleHlub3M1MjYwX2NtdV9yZWdpc3Rlcl9vbmUobnAsICZjbXUpOworfQorCitDTEtfT0ZfREVDTEFSRShleHlub3M1MjYwX2Nsa19wZXJpLCAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLXBlcmkiLAorCQlleHlub3M1MjYwX2Nsa19wZXJpX2luaXQpOworCisKKy8qIENNVV9UT1AgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG9wX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlESVNQX1BMTF9MT0NLLAorCUFVRF9QTExfTE9DSywKKwlESVNQX1BMTF9DT04wLAorCURJU1BfUExMX0NPTjEsCisJRElTUF9QTExfRkRFVCwKKwlBVURfUExMX0NPTjAsCisJQVVEX1BMTF9DT04xLAorCUFVRF9QTExfQ09OMiwKKwlBVURfUExMX0ZERVQsCisJTVVYX1NFTF9UT1BfUExMMCwKKwlNVVhfU0VMX1RPUF9NRkMsCisJTVVYX1NFTF9UT1BfRzJELAorCU1VWF9TRUxfVE9QX0dTQ0wsCisJTVVYX1NFTF9UT1BfSVNQMTAsCisJTVVYX1NFTF9UT1BfSVNQMTEsCisJTVVYX1NFTF9UT1BfRElTUDAsCisJTVVYX1NFTF9UT1BfRElTUDEsCisJTVVYX1NFTF9UT1BfQlVTLAorCU1VWF9TRUxfVE9QX1BFUkkwLAorCU1VWF9TRUxfVE9QX1BFUkkxLAorCU1VWF9TRUxfVE9QX0ZTWVMsCisJRElWX1RPUF9HMkRfTUZDLAorCURJVl9UT1BfR1NDTF9JU1AwLAorCURJVl9UT1BfSVNQMTAsCisJRElWX1RPUF9JU1AxMSwKKwlESVZfVE9QX0RJU1AsCisJRElWX1RPUF9CVVMsCisJRElWX1RPUF9QRVJJMCwKKwlESVZfVE9QX1BFUkkxLAorCURJVl9UT1BfUEVSSTIsCisJRElWX1RPUF9GU1lTMCwKKwlESVZfVE9QX0ZTWVMxLAorCURJVl9UT1BfSFBNLAorCURJVl9UT1BfUExMX0ZERVQsCisJRU5fQUNMS19UT1AsCisJRU5fU0NMS19UT1AsCisJRU5fSVBfVE9QLAorfTsKKworLyogZml4ZWQgcmF0ZSBjbG9ja3MgZ2VuZXJhdGVkIGluc2lkZSB0aGUgc29jICovCitzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrIGZpeGVkX3JhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRlJBVEUoUEhZQ0xLX0RQVFhfUEhZX0NIM19UWERfQ0xLLCAicGh5Y2xrX2RwdHhfcGh5X2NoM190eGRfY2xrIiwgTlVMTCwKKwkJCUNMS19JU19ST09ULCAyNzAwMDAwMDApLAorCUZSQVRFKFBIWUNMS19EUFRYX1BIWV9DSDJfVFhEX0NMSywgInBoeWNsa19kcHR4X3BoeV9jaDJfdHhkX2NsayIsIE5VTEwsCisJCQlDTEtfSVNfUk9PVCwgMjcwMDAwMDAwKSwKKwlGUkFURShQSFlDTEtfRFBUWF9QSFlfQ0gxX1RYRF9DTEssICJwaHljbGtfZHB0eF9waHlfY2gxX3R4ZF9jbGsiLCBOVUxMLAorCQkJQ0xLX0lTX1JPT1QsIDI3MDAwMDAwMCksCisJRlJBVEUoUEhZQ0xLX0RQVFhfUEhZX0NIMF9UWERfQ0xLLCAicGh5Y2xrX2RwdHhfcGh5X2NoMF90eGRfY2xrIiwgTlVMTCwKKwkJCUNMS19JU19ST09ULCAyNzAwMDAwMDApLAorCUZSQVRFKHBoeWNsa19oZG1pX3BoeV90bWRzX2Nsa28sICJwaHljbGtfaGRtaV9waHlfdG1kc19jbGtvIiwgTlVMTCwKKwkJCUNMS19JU19ST09ULCAyNTAwMDAwMDApLAorCUZSQVRFKFBIWUNMS19IRE1JX1BIWV9QSVhFTF9DTEtPLCAicGh5Y2xrX2hkbWlfcGh5X3BpeGVsX2Nsa28iLCBOVUxMLAorCQkJQ0xLX0lTX1JPT1QsIDE2NjAwMDAwMDApLAorCUZSQVRFKFBIWUNMS19IRE1JX0xJTktfT19UTURTX0NMS0hJLCAicGh5Y2xrX2hkbWlfbGlua19vX3RtZHNfY2xraGkiLAorCQkJTlVMTCwgQ0xLX0lTX1JPT1QsIDEyNTAwMDAwMCksCisJRlJBVEUoUEhZQ0xLX01JUElfRFBIWV80TF9NX1RYQllURUNMS0hTLAorCQkJInBoeWNsa19taXBpX2RwaHlfNGxfbV90eGJ5dGVjbGtocyIgLCBOVUxMLAorCQkJQ0xLX0lTX1JPT1QsIDE4NzUwMDAwMCksCisJRlJBVEUoUEhZQ0xLX0RQVFhfUEhZX09fUkVGX0NMS18yNE0sICJwaHljbGtfZHB0eF9waHlfb19yZWZfY2xrXzI0bSIsCisJCQlOVUxMLCBDTEtfSVNfUk9PVCwgMjQwMDAwMDApLAorCUZSQVRFKFBIWUNMS19EUFRYX1BIWV9DTEtfRElWMiwgInBoeWNsa19kcHR4X3BoeV9jbGtfZGl2MiIsIE5VTEwsCisJCQlDTEtfSVNfUk9PVCwgMTM1MDAwMDAwKSwKKwlGUkFURShQSFlDTEtfTUlQSV9EUEhZXzRMX01fUlhDTEtFU0MwLAorCQkJInBoeWNsa19taXBpX2RwaHlfNGxfbV9yeGNsa2VzYzAiLCBOVUxMLAorCQkJQ0xLX0lTX1JPT1QsIDIwMDAwMDAwKSwKKwlGUkFURShQSFlDTEtfVVNCSE9TVDIwX1BIWV9QSFlDTE9DSywgInBoeWNsa191c2Job3N0MjBfcGh5X3BoeWNsb2NrIiwKKwkJCU5VTEwsIENMS19JU19ST09ULCA2MDAwMDAwMCksCisJRlJBVEUoUEhZQ0xLX1VTQkhPU1QyMF9QSFlfRlJFRUNMSywgInBoeWNsa191c2Job3N0MjBfcGh5X2ZyZWVjbGsiLAorCQkJTlVMTCwgQ0xLX0lTX1JPT1QsIDYwMDAwMDAwKSwKKwlGUkFURShQSFlDTEtfVVNCSE9TVDIwX1BIWV9DTEs0OE1PSENJLAorCQkJInBoeWNsa191c2Job3N0MjBfcGh5X2NsazQ4bW9oY2kiLAorCQkJTlVMTCwgQ0xLX0lTX1JPT1QsIDQ4MDAwMDAwKSwKKwlGUkFURShQSFlDTEtfVVNCRFJEMzBfVURSRDMwX1BJUEVfUENMSywKKwkJCSJwaHljbGtfdXNiZHJkMzBfdWRyZDMwX3BpcGVfcGNsayIsIE5VTEwsCisJCQlDTEtfSVNfUk9PVCwgMTI1MDAwMDAwKSwKKwlGUkFURShQSFlDTEtfVVNCRFJEMzBfVURSRDMwX1BIWUNMT0NLLAorCQkJInBoeWNsa191c2JkcmQzMF91ZHJkMzBfcGh5Y2xvY2siLCBOVUxMLAorCQkJQ0xLX0lTX1JPT1QsIDYwMDAwMDAwKSwKK307CisKK1BOQU1FKG1vdXRfbWVtdG9wX3BsbF91c2VyX3ApID0geyJmaW5fcGxsIiwgImRvdXRfbWVtX3BsbCJ9OworUE5BTUUobW91dF9idXN0b3BfcGxsX3VzZXJfcCkgPSB7ImZpbl9wbGwiLCAiZG91dF9idXNfcGxsIn07CitQTkFNRShtb3V0X21lZGlhdG9wX3BsbF91c2VyX3ApID0geyJmaW5fcGxsIiwgImRvdXRfbWVkaWFfcGxsIn07CitQTkFNRShtb3V0X2F1ZHRvcF9wbGxfdXNlcl9wKSA9IHsiZmluX3BsbCIsICJtb3V0X2F1ZF9wbGwifTsKK1BOQU1FKG1vdXRfYXVkX3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2F1ZF9wbGwifTsKK1BOQU1FKG1vdXRfZGlzcF9wbGxfcCkgPSB7ImZpbl9wbGwiLCAiZm91dF9kaXNwX3BsbCJ9OworUE5BTUUobW91dF9tZmNfYnVzdG9wXzMzM19wKSA9IHsibW91dF9idXN0b3BfcGxsX3VzZXIiLCAibW91dF9kaXNwX3BsbCJ9OworUE5BTUUobW91dF9hY2xrX21mY18zMzNfcCkgPSB7Im1vdXRfbWVkaWF0b3BfcGxsX3VzZXIiLCAibW91dF9tZmNfYnVzdG9wXzMzMyJ9OworUE5BTUUobW91dF9nMmRfYnVzdG9wXzMzM19wKSA9IHsibW91dF9idXN0b3BfcGxsX3VzZXIiLCAibW91dF9kaXNwX3BsbCJ9OworUE5BTUUobW91dF9hY2xrX2cyZF8zMzNfcCkgPSB7Im1vdXRfbWVkaWF0b3BfcGxsX3VzZXIiLCAibW91dF9nMmRfYnVzdG9wXzMzMyJ9OworUE5BTUUobW91dF9nc2NsX2J1c3RvcF8zMzNfcCkgPSB7Im1vdXRfYnVzdG9wX3BsbF91c2VyIiwgIm1vdXRfZGlzcF9wbGwifTsKK1BOQU1FKG1vdXRfYWNsa19nc2NsXzMzM19wKSA9IHsibW91dF9tZWRpYXRvcF9wbGxfdXNlciIsCisJCQkibW91dF9nc2NsX2J1c3RvcF8zMzMifTsKK1BOQU1FKG1vdXRfbTJtX21lZGlhdG9wXzQwMF9wKSA9IHsibW91dF9tZWRpYXRvcF9wbGxfdXNlciIsICJtb3V0X2Rpc3BfcGxsIn07CitQTkFNRShtb3V0X2FjbGtfZ3NjbF80MDBfcCkgPSB7Im1vdXRfYnVzdG9wX3BsbF91c2VyIiwKKwkJCSJtb3V0X20ybV9tZWRpYXRvcF80MDAifTsKK1BOQU1FKG1vdXRfZ3NjbF9idXN0b3BfZmltY19wKSA9IHsibW91dF9idXN0b3BfcGxsX3VzZXIiLCAibW91dF9kaXNwX3BsbCJ9OworUE5BTUUobW91dF9hY2xrX2dzY2xfZmltY19wKSA9IHsibW91dF9tZWRpYXRvcF9wbGxfdXNlciIsCisJCQkibW91dF9nc2NsX2J1c3RvcF9maW1jIn07CitQTkFNRShtb3V0X2lzcDFfbWVkaWFfMjY2X3ApID0geyJtb3V0X21lZGlhdG9wX3BsbF91c2VyIiwKKwkJCSJtb3V0X21lbXRvcF9wbGxfdXNlciJ9OworUE5BTUUobW91dF9hY2xrX2lzcDFfMjY2X3ApID0geyJtb3V0X2J1c3RvcF9wbGxfdXNlciIsICJtb3V0X2lzcDFfbWVkaWFfMjY2In07CitQTkFNRShtb3V0X2lzcDFfbWVkaWFfNDAwX3ApID0geyJtb3V0X21lZGlhdG9wX3BsbF91c2VyIiwgIm1vdXRfZGlzcF9wbGwifTsKK1BOQU1FKG1vdXRfYWNsa19pc3AxXzQwMF9wKSA9IHsibW91dF9idXN0b3BfcGxsX3VzZXIiLCAibW91dF9pc3AxX21lZGlhXzQwMCJ9OworUE5BTUUobW91dF9zY2xrX2lzcF9zcGlfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9idXN0b3BfcGxsX3VzZXIifTsKK1BOQU1FKG1vdXRfc2Nsa19pc3BfdWFydF9wKSA9IHsiZmluX3BsbCIsICJtb3V0X2J1c3RvcF9wbGxfdXNlciJ9OworUE5BTUUobW91dF9zY2xrX2lzcF9zZW5zb3JfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9idXN0b3BfcGxsX3VzZXIifTsKK1BOQU1FKG1vdXRfZGlzcF9kaXNwXzMzM19wKSA9IHsibW91dF9kaXNwX3BsbCIsICJtb3V0X2J1c3RvcF9wbGxfdXNlciJ9OworUE5BTUUobW91dF9hY2xrX2Rpc3BfMzMzX3ApID0geyJtb3V0X21lZGlhdG9wX3BsbF91c2VyIiwgIm1vdXRfZGlzcF9kaXNwXzMzMyJ9OworUE5BTUUobW91dF9kaXNwX2Rpc3BfMjIyX3ApID0geyJtb3V0X2Rpc3BfcGxsIiwgIm1vdXRfYnVzdG9wX3BsbF91c2VyIn07CitQTkFNRShtb3V0X2FjbGtfZGlzcF8yMjJfcCkgPSB7Im1vdXRfbWVkaWF0b3BfcGxsX3VzZXIiLCAibW91dF9kaXNwX2Rpc3BfMjIyIn07CitQTkFNRShtb3V0X2Rpc3BfbWVkaWFfcGl4ZWxfcCkgPSB7Im1vdXRfbWVkaWF0b3BfcGxsX3VzZXIiLAorCQkJIm1vdXRfYnVzdG9wX3BsbF91c2VyIn07CitQTkFNRShtb3V0X3NjbGtfZGlzcF9waXhlbF9wKSA9IHsibW91dF9kaXNwX3BsbCIsICJtb3V0X2Rpc3BfbWVkaWFfcGl4ZWwifTsKK1BOQU1FKG1vdXRfYnVzX2J1c3RvcF80MDBfcCkgPSB7Im1vdXRfYnVzdG9wX3BsbF91c2VyIiwgIm1vdXRfbWVtdG9wX3BsbF91c2VyIn07CitQTkFNRShtb3V0X2J1c19idXN0b3BfMTAwX3ApID0geyJtb3V0X2J1c3RvcF9wbGxfdXNlciIsICJtb3V0X21lbXRvcF9wbGxfdXNlciJ9OworUE5BTUUobW91dF9zY2xrX3Blcmlfc3BpX2Nsa19wKSA9IHsiZmluX3BsbCIsICJtb3V0X2J1c3RvcF9wbGxfdXNlciJ9OworUE5BTUUobW91dF9zY2xrX3BlcmlfdWFydF91Y2xrX3ApID0geyJmaW5fcGxsIiwgIm1vdXRfYnVzdG9wX3BsbF91c2VyIn07CitQTkFNRShtb3V0X3NjbGtfZnN5c191c2JfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9idXN0b3BfcGxsX3VzZXIifTsKK1BOQU1FKG1vdXRfc2Nsa19mc3lzX21tY19zZGNsa2luX2FfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9idXN0b3BfcGxsX3VzZXIifTsKK1BOQU1FKG1vdXRfc2Nsa19mc3lzX21tYzBfc2RjbGtpbl9iX3ApID0geyJtb3V0X3NjbGtfZnN5c19tbWMwX3NkY2xraW5fYSIsCisJCQkibW91dF9tZWRpYXRvcF9wbGxfdXNlciJ9OworUE5BTUUobW91dF9zY2xrX2ZzeXNfbW1jMV9zZGNsa2luX2JfcCkgPSB7Im1vdXRfc2Nsa19mc3lzX21tYzFfc2RjbGtpbl9hIiwKKwkJCSJtb3V0X21lZGlhdG9wX3BsbF91c2VyIn07CitQTkFNRShtb3V0X3NjbGtfZnN5c19tbWMyX3NkY2xraW5fYl9wKSA9IHsibW91dF9zY2xrX2ZzeXNfbW1jMl9zZGNsa2luX2EiLAorCQkJIm1vdXRfbWVkaWF0b3BfcGxsX3VzZXIifTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIHRvcF9tdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKFRPUF9NT1VUX01FRElBVE9QX1BMTF9VU0VSLCAibW91dF9tZWRpYXRvcF9wbGxfdXNlciIsCisJCQltb3V0X21lZGlhdG9wX3BsbF91c2VyX3AsCisJCQlNVVhfU0VMX1RPUF9QTEwwLCAwLCAxKSwKKwlNVVgoVE9QX01PVVRfTUVNVE9QX1BMTF9VU0VSLCAibW91dF9tZW10b3BfcGxsX3VzZXIiLAorCQkJbW91dF9tZW10b3BfcGxsX3VzZXJfcCwKKwkJCU1VWF9TRUxfVE9QX1BMTDAsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9CVVNUT1BfUExMX1VTRVIsICJtb3V0X2J1c3RvcF9wbGxfdXNlciIsCisJCQltb3V0X2J1c3RvcF9wbGxfdXNlcl9wLAorCQkJTVVYX1NFTF9UT1BfUExMMCwgOCwgMSksCisJTVVYKFRPUF9NT1VUX0RJU1BfUExMLCAibW91dF9kaXNwX3BsbCIsIG1vdXRfZGlzcF9wbGxfcCwKKwkJCU1VWF9TRUxfVE9QX1BMTDAsIDEyLCAxKSwKKwlNVVgoVE9QX01PVVRfQVVEX1BMTCwgIm1vdXRfYXVkX3BsbCIsIG1vdXRfYXVkX3BsbF9wLAorCQkJTVVYX1NFTF9UT1BfUExMMCwgMTYsIDEpLAorCU1VWChUT1BfTU9VVF9BVURUT1BfUExMX1VTRVIsICJtb3V0X2F1ZHRvcF9wbGxfdXNlciIsCisJCQltb3V0X2F1ZHRvcF9wbGxfdXNlcl9wLAorCQkJTVVYX1NFTF9UT1BfUExMMCwgMjQsIDEpLAorCisJTVVYKFRPUF9NT1VUX0RJU1BfRElTUF8zMzMsICJtb3V0X2Rpc3BfZGlzcF8zMzMiLCBtb3V0X2Rpc3BfZGlzcF8zMzNfcCwKKwkJCU1VWF9TRUxfVE9QX0RJU1AwLCAwLCAxKSwKKwlNVVgoVE9QX01PVVRfQUNMS19ESVNQXzMzMywgIm1vdXRfYWNsa19kaXNwXzMzMyIsIG1vdXRfYWNsa19kaXNwXzMzM19wLAorCQkJTVVYX1NFTF9UT1BfRElTUDAsIDgsIDEpLAorCU1VWChUT1BfTU9VVF9ESVNQX0RJU1BfMjIyLCAibW91dF9kaXNwX2Rpc3BfMjIyIiwgbW91dF9kaXNwX2Rpc3BfMjIyX3AsCisJCQlNVVhfU0VMX1RPUF9ESVNQMCwgMTIsIDEpLAorCU1VWChUT1BfTU9VVF9BQ0xLX0RJU1BfMjIyLCAibW91dF9hY2xrX2Rpc3BfMjIyIiwgbW91dF9hY2xrX2Rpc3BfMjIyX3AsCisJCQlNVVhfU0VMX1RPUF9ESVNQMCwgMjAsIDEpLAorCisJTVVYKFRPUF9NT1VUX0ZJTUQxLCAibW91dF9zY2xrX2Rpc3BfcGl4ZWwiLCBtb3V0X3NjbGtfZGlzcF9waXhlbF9wLAorCQkJTVVYX1NFTF9UT1BfRElTUDEsIDAsIDEpLAorCU1VWChUT1BfTU9VVF9ESVNQX01FRElBX1BJWEVMLCAibW91dF9kaXNwX21lZGlhX3BpeGVsIiwKKwkJCW1vdXRfZGlzcF9tZWRpYV9waXhlbF9wLAorCQkJTVVYX1NFTF9UT1BfRElTUDEsIDgsIDEpLAorCisJTVVYKFRPUF9NT1VUX1NDTEtfUEVSSV9TUEkyX0NMSywgIm1vdXRfc2Nsa19wZXJpX3NwaTJfY2xrIiwKKwkJCW1vdXRfc2Nsa19wZXJpX3NwaV9jbGtfcCwKKwkJCU1VWF9TRUxfVE9QX1BFUkkxLCAwLCAxKSwKKwlNVVgoVE9QX01PVVRfU0NMS19QRVJJX1NQSTFfQ0xLLCAibW91dF9zY2xrX3Blcmlfc3BpMV9jbGsiLAorCQkJbW91dF9zY2xrX3Blcmlfc3BpX2Nsa19wLAorCQkJTVVYX1NFTF9UT1BfUEVSSTEsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9TQ0xLX1BFUklfU1BJMF9DTEssICJtb3V0X3NjbGtfcGVyaV9zcGkwX2NsayIsCisJCQltb3V0X3NjbGtfcGVyaV9zcGlfY2xrX3AsCisJCQlNVVhfU0VMX1RPUF9QRVJJMSwgOCwgMSksCisJTVVYKFRPUF9NT1VUX1NDTEtfUEVSSV9VQVJUMV9VQ0xLLCAibW91dF9zY2xrX3BlcmlfdWFydDFfdWNsayIsCisJCQltb3V0X3NjbGtfcGVyaV91YXJ0X3VjbGtfcCwKKwkJCU1VWF9TRUxfVE9QX1BFUkkxLCAxMiwgMSksCisJTVVYKFRPUF9NT1VUX1NDTEtfUEVSSV9VQVJUMl9VQ0xLLCAibW91dF9zY2xrX3BlcmlfdWFydDJfdWNsayIsCisJCQltb3V0X3NjbGtfcGVyaV91YXJ0X3VjbGtfcCwKKwkJCU1VWF9TRUxfVE9QX1BFUkkxLCAxNiwgMSksCisJTVVYKFRPUF9NT1VUX1NDTEtfUEVSSV9VQVJUMF9VQ0xLLCAibW91dF9zY2xrX3BlcmlfdWFydDBfdWNsayIsCisJCQltb3V0X3NjbGtfcGVyaV91YXJ0X3VjbGtfcCwKKwkJCU1VWF9TRUxfVE9QX1BFUkkxLCAyMCwgMSksCisKKworCU1VWChUT1BfTU9VVF9CVVMxX0JVU1RPUF80MDAsICJtb3V0X2J1czFfYnVzdG9wXzQwMCIsCisJCQltb3V0X2J1c19idXN0b3BfNDAwX3AsCisJCQlNVVhfU0VMX1RPUF9CVVMsIDAsIDEpLAorCU1VWChUT1BfTU9VVF9CVVMxX0JVU1RPUF8xMDAsICJtb3V0X2J1czFfYnVzdG9wXzEwMCIsCisJCQltb3V0X2J1c19idXN0b3BfMTAwX3AsCisJCQlNVVhfU0VMX1RPUF9CVVMsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9CVVMyX0JVU1RPUF8xMDAsICJtb3V0X2J1czJfYnVzdG9wXzEwMCIsCisJCQltb3V0X2J1c19idXN0b3BfMTAwX3AsCisJCQlNVVhfU0VMX1RPUF9CVVMsIDgsIDEpLAorCU1VWChUT1BfTU9VVF9CVVMyX0JVU1RPUF80MDAsICJtb3V0X2J1czJfYnVzdG9wXzQwMCIsCisJCQltb3V0X2J1c19idXN0b3BfNDAwX3AsCisJCQlNVVhfU0VMX1RPUF9CVVMsIDEyLCAxKSwKKwlNVVgoVE9QX01PVVRfQlVTM19CVVNUT1BfNDAwLCAibW91dF9idXMzX2J1c3RvcF80MDAiLAorCQkJbW91dF9idXNfYnVzdG9wXzQwMF9wLAorCQkJTVVYX1NFTF9UT1BfQlVTLCAxNiwgMSksCisJTVVYKFRPUF9NT1VUX0JVUzNfQlVTVE9QXzEwMCwgIm1vdXRfYnVzM19idXN0b3BfMTAwIiwKKwkJCW1vdXRfYnVzX2J1c3RvcF8xMDBfcCwKKwkJCU1VWF9TRUxfVE9QX0JVUywgMjAsIDEpLAorCU1VWChUT1BfTU9VVF9CVVM0X0JVU1RPUF80MDAsICJtb3V0X2J1czRfYnVzdG9wXzQwMCIsCisJCQltb3V0X2J1c19idXN0b3BfNDAwX3AsCisJCQlNVVhfU0VMX1RPUF9CVVMsIDI0LCAxKSwKKwlNVVgoVE9QX01PVVRfQlVTNF9CVVNUT1BfMTAwLCAibW91dF9idXM0X2J1c3RvcF8xMDAiLAorCQkJbW91dF9idXNfYnVzdG9wXzEwMF9wLAorCQkJTVVYX1NFTF9UT1BfQlVTLCAyOCwgMSksCisKKwlNVVgoVE9QX01PVVRfU0NMS19GU1lTX1VTQiwgIm1vdXRfc2Nsa19mc3lzX3VzYiIsCisJCQltb3V0X3NjbGtfZnN5c191c2JfcCwKKwkJCU1VWF9TRUxfVE9QX0ZTWVMsIDAsIDEpLAorCU1VWChUT1BfTU9VVF9TQ0xLX0ZTWVNfTU1DMl9TRENMS0lOX0EsICJtb3V0X3NjbGtfZnN5c19tbWMyX3NkY2xraW5fYSIsCisJCQltb3V0X3NjbGtfZnN5c19tbWNfc2RjbGtpbl9hX3AsCisJCQlNVVhfU0VMX1RPUF9GU1lTLCA0LCAxKSwKKwlNVVgoVE9QX01PVVRfU0NMS19GU1lTX01NQzJfU0RDTEtJTl9CLCAibW91dF9zY2xrX2ZzeXNfbW1jMl9zZGNsa2luX2IiLAorCQkJbW91dF9zY2xrX2ZzeXNfbW1jMl9zZGNsa2luX2JfcCwKKwkJCU1VWF9TRUxfVE9QX0ZTWVMsIDgsIDEpLAorCU1VWChUT1BfTU9VVF9TQ0xLX0ZTWVNfTU1DMV9TRENMS0lOX0EsICJtb3V0X3NjbGtfZnN5c19tbWMxX3NkY2xraW5fYSIsCisJCQltb3V0X3NjbGtfZnN5c19tbWNfc2RjbGtpbl9hX3AsCisJCQlNVVhfU0VMX1RPUF9GU1lTLCAxMiwgMSksCisJTVVYKFRPUF9NT1VUX1NDTEtfRlNZU19NTUMxX1NEQ0xLSU5fQiwgIm1vdXRfc2Nsa19mc3lzX21tYzFfc2RjbGtpbl9iIiwKKwkJCW1vdXRfc2Nsa19mc3lzX21tYzFfc2RjbGtpbl9iX3AsCisJCQlNVVhfU0VMX1RPUF9GU1lTLCAxNiwgMSksCisJTVVYKFRPUF9NT1VUX1NDTEtfRlNZU19NTUMwX1NEQ0xLSU5fQSwgIm1vdXRfc2Nsa19mc3lzX21tYzBfc2RjbGtpbl9hIiwKKwkJCW1vdXRfc2Nsa19mc3lzX21tY19zZGNsa2luX2FfcCwKKwkJCU1VWF9TRUxfVE9QX0ZTWVMsIDIwLCAxKSwKKwlNVVgoVE9QX01PVVRfU0NMS19GU1lTX01NQzBfU0RDTEtJTl9CLCAibW91dF9zY2xrX2ZzeXNfbW1jMF9zZGNsa2luX2IiLAorCQkJbW91dF9zY2xrX2ZzeXNfbW1jMF9zZGNsa2luX2JfcCwKKwkJCU1VWF9TRUxfVE9QX0ZTWVMsIDI0LCAxKSwKKworCU1VWChUT1BfTU9VVF9JU1AxX01FRElBXzQwMCwgIm1vdXRfaXNwMV9tZWRpYV80MDAiLAorCQkJbW91dF9pc3AxX21lZGlhXzQwMF9wLAorCQkJTVVYX1NFTF9UT1BfSVNQMTAsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9BQ0xLX0lTUDFfNDAwLCAibW91dF9hY2xrX2lzcDFfNDAwIiwgbW91dF9hY2xrX2lzcDFfNDAwX3AsCisJCQlNVVhfU0VMX1RPUF9JU1AxMCwgOCAsIDEpLAorCU1VWChUT1BfTU9VVF9JU1AxX01FRElBXzI2NiwgIm1vdXRfaXNwMV9tZWRpYV8yNjYiLAorCQkJbW91dF9pc3AxX21lZGlhXzI2Nl9wLAorCQkJTVVYX1NFTF9UT1BfSVNQMTAsIDE2LCAxKSwKKwlNVVgoVE9QX01PVVRfQUNMS19JU1AxXzI2NiwgIm1vdXRfYWNsa19pc3AxXzI2NiIsIG1vdXRfYWNsa19pc3AxXzI2Nl9wLAorCQkJTVVYX1NFTF9UT1BfSVNQMTAsIDIwLCAxKSwKKworCU1VWChUT1BfTU9VVF9TQ0xLX0lTUDFfU1BJMCwgIm1vdXRfc2Nsa19pc3AxX3NwaTAiLCBtb3V0X3NjbGtfaXNwX3NwaV9wLAorCQkJTVVYX1NFTF9UT1BfSVNQMTEsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9TQ0xLX0lTUDFfU1BJMSwgIm1vdXRfc2Nsa19pc3AxX3NwaTEiLCBtb3V0X3NjbGtfaXNwX3NwaV9wLAorCQkJTVVYX1NFTF9UT1BfSVNQMTEsIDgsIDEpLAorCU1VWChUT1BfTU9VVF9TQ0xLX0lTUDFfVUFSVCwgIm1vdXRfc2Nsa19pc3AxX3VhcnQiLAorCQkJbW91dF9zY2xrX2lzcF91YXJ0X3AsCisJCQlNVVhfU0VMX1RPUF9JU1AxMSwgMTIsIDEpLAorCU1VWChUT1BfTU9VVF9TQ0xLX0lTUDFfU0VOU09SMCwgIm1vdXRfc2Nsa19pc3AxX3NlbnNvcjAiLAorCQkJbW91dF9zY2xrX2lzcF9zZW5zb3JfcCwKKwkJCU1VWF9TRUxfVE9QX0lTUDExLCAxNiwgMSksCisJTVVYKFRPUF9NT1VUX1NDTEtfSVNQMV9TRU5TT1IxLCAibW91dF9zY2xrX2lzcDFfc2Vuc29yMSIsCisJCQltb3V0X3NjbGtfaXNwX3NlbnNvcl9wLAorCQkJTVVYX1NFTF9UT1BfSVNQMTEsIDIwLCAxKSwKKwlNVVgoVE9QX01PVVRfU0NMS19JU1AxX1NFTlNPUjIsICJtb3V0X3NjbGtfaXNwMV9zZW5zb3IyIiwKKwkJCW1vdXRfc2Nsa19pc3Bfc2Vuc29yX3AsCisJCQlNVVhfU0VMX1RPUF9JU1AxMSwgMjQsIDEpLAorCisJTVVYKFRPUF9NT1VUX01GQ19CVVNUT1BfMzMzLCAibW91dF9tZmNfYnVzdG9wXzMzMyIsCisJCQltb3V0X21mY19idXN0b3BfMzMzX3AsCisJCQlNVVhfU0VMX1RPUF9NRkMsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9BQ0xLX01GQ18zMzMsICJtb3V0X2FjbGtfbWZjXzMzMyIsIG1vdXRfYWNsa19tZmNfMzMzX3AsCisJCQlNVVhfU0VMX1RPUF9NRkMsIDgsIDEpLAorCisJTVVYKFRPUF9NT1VUX0cyRF9CVVNUT1BfMzMzLCAibW91dF9nMmRfYnVzdG9wXzMzMyIsCisJCQltb3V0X2cyZF9idXN0b3BfMzMzX3AsCisJCQlNVVhfU0VMX1RPUF9HMkQsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9BQ0xLX0cyRF8zMzMsICJtb3V0X2FjbGtfZzJkXzMzMyIsIG1vdXRfYWNsa19nMmRfMzMzX3AsCisJCQlNVVhfU0VMX1RPUF9HMkQsIDgsIDEpLAorCisJTVVYKFRPUF9NT1VUX00yTV9NRURJQVRPUF80MDAsICJtb3V0X20ybV9tZWRpYXRvcF80MDAiLAorCQkJbW91dF9tMm1fbWVkaWF0b3BfNDAwX3AsCisJCQlNVVhfU0VMX1RPUF9HU0NMLCAwLCAxKSwKKwlNVVgoVE9QX01PVVRfQUNMS19HU0NMXzQwMCwgIm1vdXRfYWNsa19nc2NsXzQwMCIsCisJCQltb3V0X2FjbGtfZ3NjbF80MDBfcCwKKwkJCU1VWF9TRUxfVE9QX0dTQ0wsIDQsIDEpLAorCU1VWChUT1BfTU9VVF9HU0NMX0JVU1RPUF8zMzMsICJtb3V0X2dzY2xfYnVzdG9wXzMzMyIsCisJCQltb3V0X2dzY2xfYnVzdG9wXzMzM19wLAorCQkJTVVYX1NFTF9UT1BfR1NDTCwgOCwgMSksCisJTVVYKFRPUF9NT1VUX0FDTEtfR1NDTF8zMzMsICJtb3V0X2FjbGtfZ3NjbF8zMzMiLAorCQkJbW91dF9hY2xrX2dzY2xfMzMzX3AsCisJCQlNVVhfU0VMX1RPUF9HU0NMLCAxMiwgMSksCisJTVVYKFRPUF9NT1VUX0dTQ0xfQlVTVE9QX0ZJTUMsICJtb3V0X2dzY2xfYnVzdG9wX2ZpbWMiLAorCQkJbW91dF9nc2NsX2J1c3RvcF9maW1jX3AsCisJCQlNVVhfU0VMX1RPUF9HU0NMLCAxNiwgMSksCisJTVVYKFRPUF9NT1VUX0FDTEtfR1NDTF9GSU1DLCAibW91dF9hY2xrX2dzY2xfZmltYyIsCisJCQltb3V0X2FjbGtfZ3NjbF9maW1jX3AsCisJCQlNVVhfU0VMX1RPUF9HU0NMLCAyMCwgMSksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgdG9wX2Rpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlESVYoVE9QX0RPVVRfQUNMS19HMkRfMzMzLCAiZG91dF9hY2xrX2cyZF8zMzMiLCAibW91dF9hY2xrX2cyZF8zMzMiLAorCQkJRElWX1RPUF9HMkRfTUZDLCAwLCAzKSwKKwlESVYoVE9QX0RPVVRfQUNMS19NRkNfMzMzLCAiZG91dF9hY2xrX21mY18zMzMiLCAibW91dF9hY2xrX21mY18zMzMiLAorCQkJRElWX1RPUF9HMkRfTUZDLCA0LCAzKSwKKworCURJVihUT1BfRE9VVF9BQ0xLX0dTQ0xfMzMzLCAiZG91dF9hY2xrX2dzY2xfMzMzIiwgIm1vdXRfYWNsa19nc2NsXzMzMyIsCisJCQlESVZfVE9QX0dTQ0xfSVNQMCwgMCwgMyksCisJRElWKFRPUF9ET1VUX0FDTEtfR1NDTF80MDAsICJkb3V0X2FjbGtfZ3NjbF80MDAiLCAibW91dF9hY2xrX2dzY2xfNDAwIiwKKwkJCURJVl9UT1BfR1NDTF9JU1AwLCA0LCAzKSwKKwlESVYoVE9QX0RPVVRfQUNMS19HU0NMX0ZJTUMsICJkb3V0X2FjbGtfZ3NjbF9maW1jIiwKKwkJCSJtb3V0X2FjbGtfZ3NjbF9maW1jIiwgRElWX1RPUF9HU0NMX0lTUDAsIDgsIDMpLAorCURJVihUT1BfRE9VVF9TQ0xLX0lTUDFfU0VOU09SMF9BLCAiZG91dF9zY2xrX2lzcDFfc2Vuc29yMF9hIiwKKwkJCSJtb3V0X2FjbGtfZ3NjbF9maW1jIiwgRElWX1RPUF9HU0NMX0lTUDAsIDE2LCA0KSwKKwlESVYoVE9QX0RPVVRfU0NMS19JU1AxX1NFTlNPUjFfQSwgImRvdXRfc2Nsa19pc3AxX3NlbnNvcjFfYSIsCisJCQkibW91dF9hY2xrX2dzY2xfNDAwIiwgRElWX1RPUF9HU0NMX0lTUDAsIDIwLCA0KSwKKwlESVYoVE9QX0RPVVRfU0NMS19JU1AxX1NFTlNPUjJfQSwgImRvdXRfc2Nsa19pc3AxX3NlbnNvcjJfYSIsCisJCQkibW91dF9hY2xrX2dzY2xfZmltYyIsIERJVl9UT1BfR1NDTF9JU1AwLCAyNCwgNCksCisKKwlESVYoVE9QX0RPVVRfQUNMS19JU1AxXzI2NiwgImRvdXRfYWNsa19pc3AxXzI2NiIsICJtb3V0X2FjbGtfaXNwMV8yNjYiLAorCQkJRElWX1RPUF9JU1AxMCwgMCwgMyksCisJRElWKFRPUF9ET1VUX0FDTEtfSVNQMV80MDAsICJkb3V0X2FjbGtfaXNwMV80MDAiLCAibW91dF9hY2xrX2lzcDFfNDAwIiwKKwkJCURJVl9UT1BfSVNQMTAsIDQsIDMpLAorCURJVihUT1BfRE9VVF9TQ0xLX0lTUDFfU1BJMF9BLCAiZG91dF9zY2xrX2lzcDFfc3BpMF9hIiwKKwkJCSJtb3V0X3NjbGtfaXNwMV9zcGkwIiwgRElWX1RPUF9JU1AxMCwgMTIsIDQpLAorCURJVihUT1BfRE9VVF9TQ0xLX0lTUDFfU1BJMF9CLCAiZG91dF9zY2xrX2lzcDFfc3BpMF9iIiwKKwkJCSJkb3V0X3NjbGtfaXNwMV9zcGkwX2EiLCBESVZfVE9QX0lTUDEwLCAxNiwgOCksCisKKwlESVYoVE9QX0RPVVRfU0NMS19JU1AxX1NQSTFfQSwgImRvdXRfc2Nsa19pc3AxX3NwaTFfYSIsCisJCQkibW91dF9zY2xrX2lzcDFfc3BpMSIsIERJVl9UT1BfSVNQMTEsIDAsIDQpLAorCURJVihUT1BfRE9VVF9TQ0xLX0lTUDFfU1BJMV9CLCAiZG91dF9zY2xrX2lzcDFfc3BpMV9iIiwKKwkJCSJkb3V0X3NjbGtfaXNwMV9zcGkxX2EiLCBESVZfVE9QX0lTUDExLCA0LCA4KSwKKwlESVYoVE9QX0RPVVRfU0NMS19JU1AxX1VBUlQsICJkb3V0X3NjbGtfaXNwMV91YXJ0IiwKKwkJCSJtb3V0X3NjbGtfaXNwMV91YXJ0IiwgRElWX1RPUF9JU1AxMSwgMTIsIDQpLAorCURJVihUT1BfRE9VVF9TQ0xLX0lTUDFfU0VOU09SMF9CLCAiZG91dF9zY2xrX2lzcDFfc2Vuc29yMF9iIiwKKwkJCSJkb3V0X3NjbGtfaXNwMV9zZW5zb3IwX2EiLCBESVZfVE9QX0lTUDExLCAxNiwgNCksCisJRElWKFRPUF9ET1VUX1NDTEtfSVNQMV9TRU5TT1IxX0IsICJkb3V0X3NjbGtfaXNwMV9zZW5zb3IxX2IiLAorCQkJImRvdXRfc2Nsa19pc3AxX3NlbnNvcjFfYSIsIERJVl9UT1BfSVNQMTEsIDIwLCA0KSwKKwlESVYoVE9QX0RPVVRfU0NMS19JU1AxX1NFTlNPUjJfQiwgImRvdXRfc2Nsa19pc3AxX3NlbnNvcjJfYiIsCisJCQkiZG91dF9zY2xrX2lzcDFfc2Vuc29yMl9hIiwgRElWX1RPUF9JU1AxMSwgMjQsIDQpLAorCisJRElWKFRPUF9ET1VUVE9QX19TQ0xLX0hQTV9UQVJHRVRDTEssICJkb3V0X3NjbGtfaHBtX3RhcmdldGNsayIsCisJCQkibW91dF9idXN0b3BfcGxsX3VzZXIiLCBESVZfVE9QX0hQTSwgMCwgMyksCisKKwlESVYoVE9QX0RPVVRfQUNMS19ESVNQXzMzMywgImRvdXRfYWNsa19kaXNwXzMzMyIsICJtb3V0X2FjbGtfZGlzcF8zMzMiLAorCQkJRElWX1RPUF9ESVNQLCAwLCAzKSwKKwlESVYoVE9QX0RPVVRfQUNMS19ESVNQXzIyMiwgImRvdXRfYWNsa19kaXNwXzIyMiIsICJtb3V0X2FjbGtfZGlzcF8yMjIiLAorCQkJRElWX1RPUF9ESVNQLCA0LCAzKSwKKwlESVYoVE9QX0RPVVRfU0NMS19ESVNQX1BJWEVMLCAiZG91dF9zY2xrX2Rpc3BfcGl4ZWwiLAorCQkJIm1vdXRfc2Nsa19kaXNwX3BpeGVsIiwJRElWX1RPUF9ESVNQLCA4LCAzKSwKKworCURJVihUT1BfRE9VVF9BQ0xLX0JVUzFfNDAwLCAiZG91dF9hY2xrX2J1czFfNDAwIiwKKwkJCSJtb3V0X2J1czFfYnVzdG9wXzQwMCIsCURJVl9UT1BfQlVTLCAwLCAzKSwKKwlESVYoVE9QX0RPVVRfQUNMS19CVVMxXzEwMCwgImRvdXRfYWNsa19idXMxXzEwMCIsCisJCQkibW91dF9idXMxX2J1c3RvcF8xMDAiLAlESVZfVE9QX0JVUywgNCwgNCksCisJRElWKFRPUF9ET1VUX0FDTEtfQlVTMl80MDAsICJkb3V0X2FjbGtfYnVzMl80MDAiLAorCQkJIm1vdXRfYnVzMl9idXN0b3BfNDAwIiwJRElWX1RPUF9CVVMsIDgsIDMpLAorCURJVihUT1BfRE9VVF9BQ0xLX0JVUzJfMTAwLCAiZG91dF9hY2xrX2J1czJfMTAwIiwKKwkJCSJtb3V0X2J1czJfYnVzdG9wXzEwMCIsCURJVl9UT1BfQlVTLCAxMiwgNCksCisJRElWKFRPUF9ET1VUX0FDTEtfQlVTM180MDAsICJkb3V0X2FjbGtfYnVzM180MDAiLAorCQkJIm1vdXRfYnVzM19idXN0b3BfNDAwIiwgRElWX1RPUF9CVVMsIDE2LCAzKSwKKwlESVYoVE9QX0RPVVRfQUNMS19CVVMzXzEwMCwgImRvdXRfYWNsa19idXMzXzEwMCIsCisJCQkibW91dF9idXMzX2J1c3RvcF8xMDAiLAlESVZfVE9QX0JVUywgMjAsIDQpLAorCURJVihUT1BfRE9VVF9BQ0xLX0JVUzRfNDAwLCAiZG91dF9hY2xrX2J1czRfNDAwIiwKKwkJCSJtb3V0X2J1czRfYnVzdG9wXzQwMCIsCURJVl9UT1BfQlVTLCAyNCwgMyksCisJRElWKFRPUF9ET1VUX0FDTEtfQlVTNF8xMDAsICJkb3V0X2FjbGtfYnVzNF8xMDAiLAorCQkJIm1vdXRfYnVzNF9idXN0b3BfMTAwIiwJRElWX1RPUF9CVVMsIDI4LCA0KSwKKworCURJVihUT1BfRE9VVF9TQ0xLX1BFUklfU1BJMF9BLCAiZG91dF9zY2xrX3Blcmlfc3BpMF9hIiwKKwkJCSJtb3V0X3NjbGtfcGVyaV9zcGkwX2NsayIsIERJVl9UT1BfUEVSSTAsIDQsIDQpLAorCURJVihUT1BfRE9VVF9TQ0xLX1BFUklfU1BJMF9CLCAiZG91dF9zY2xrX3Blcmlfc3BpMF9iIiwKKwkJCSJkb3V0X3NjbGtfcGVyaV9zcGkwX2EiLCBESVZfVE9QX1BFUkkwLCA4LCA4KSwKKwlESVYoVE9QX0RPVVRfU0NMS19QRVJJX1NQSTFfQSwgImRvdXRfc2Nsa19wZXJpX3NwaTFfYSIsCisJCQkibW91dF9zY2xrX3Blcmlfc3BpMV9jbGsiLCBESVZfVE9QX1BFUkkwLCAxNiwgNCksCisJRElWKFRPUF9ET1VUX1NDTEtfUEVSSV9TUEkxX0IsICJkb3V0X3NjbGtfcGVyaV9zcGkxX2IiLAorCQkJImRvdXRfc2Nsa19wZXJpX3NwaTFfYSIsIERJVl9UT1BfUEVSSTAsIDIwLCA4KSwKKworCURJVihUT1BfRE9VVF9TQ0xLX1BFUklfU1BJMl9BLCAiZG91dF9zY2xrX3Blcmlfc3BpMl9hIiwKKwkJCSJtb3V0X3NjbGtfcGVyaV9zcGkyX2NsayIsIERJVl9UT1BfUEVSSTEsIDAsIDQpLAorCURJVihUT1BfRE9VVF9TQ0xLX1BFUklfU1BJMl9CLCAiZG91dF9zY2xrX3Blcmlfc3BpMl9iIiwKKwkJCSJkb3V0X3NjbGtfcGVyaV9zcGkyX2EiLCBESVZfVE9QX1BFUkkxLCA0LCA4KSwKKwlESVYoVE9QX0RPVVRfU0NMS19QRVJJX1VBUlQxLCAiZG91dF9zY2xrX3BlcmlfdWFydDEiLAorCQkJIm1vdXRfc2Nsa19wZXJpX3VhcnQxX3VjbGsiLCBESVZfVE9QX1BFUkkxLCAxNiwgNCksCisJRElWKFRPUF9ET1VUX1NDTEtfUEVSSV9VQVJUMiwgImRvdXRfc2Nsa19wZXJpX3VhcnQyIiwKKwkJCSJtb3V0X3NjbGtfcGVyaV91YXJ0Ml91Y2xrIiwgRElWX1RPUF9QRVJJMSwgMjAsIDQpLAorCURJVihUT1BfRE9VVF9TQ0xLX1BFUklfVUFSVDAsICJkb3V0X3NjbGtfcGVyaV91YXJ0MCIsCisJCQkibW91dF9zY2xrX3BlcmlfdWFydDBfdWNsayIsIERJVl9UT1BfUEVSSTEsIDI0LCA0KSwKKworCURJVihUT1BfRE9VVF9BQ0xLX1BFUklfNjYsICJkb3V0X2FjbGtfcGVyaV82NiIsICJtb3V0X2J1c3RvcF9wbGxfdXNlciIsCisJCQlESVZfVE9QX1BFUkkyLCAyMCwgNCksCisJRElWKFRPUF9ET1VUX0FDTEtfUEVSSV9BVUQsICJkb3V0X2FjbGtfcGVyaV9hdWQiLAorCQkJIm1vdXRfYXVkdG9wX3BsbF91c2VyIiwgRElWX1RPUF9QRVJJMiwgMjQsIDMpLAorCisJRElWKFRPUF9ET1VUX0FDTEtfRlNZU18yMDAsICJkb3V0X2FjbGtfZnN5c18yMDAiLAorCQkJIm1vdXRfYnVzdG9wX3BsbF91c2VyIiwgRElWX1RPUF9GU1lTMCwgMCwgMyksCisJRElWKFRPUF9ET1VUX1NDTEtfRlNZU19VU0JEUkQzMF9TVVNQRU5EX0NMSywKKwkJCSJkb3V0X3NjbGtfZnN5c191c2JkcmQzMF9zdXNwZW5kX2NsayIsCisJCQkibW91dF9zY2xrX2ZzeXNfdXNiIiwgRElWX1RPUF9GU1lTMCwgNCwgNCksCisJRElWKFRPUF9ET1VUX1NDTEtfRlNZU19NTUMwX1NEQ0xLSU5fQSwgImRvdXRfc2Nsa19mc3lzX21tYzBfc2RjbGtpbl9hIiwKKwkJCSJtb3V0X3NjbGtfZnN5c19tbWMwX3NkY2xraW5fYiIsCisJCQlESVZfVE9QX0ZTWVMwLCAxMiwgNCksCisJRElWKFRPUF9ET1VUX1NDTEtfRlNZU19NTUMwX1NEQ0xLSU5fQiwgImRvdXRfc2Nsa19mc3lzX21tYzBfc2RjbGtpbl9iIiwKKwkJCSJkb3V0X3NjbGtfZnN5c19tbWMwX3NkY2xraW5fYSIsCisJCQlESVZfVE9QX0ZTWVMwLCAxNiwgOCksCisKKworCURJVihUT1BfRE9VVF9TQ0xLX0ZTWVNfTU1DMV9TRENMS0lOX0EsICJkb3V0X3NjbGtfZnN5c19tbWMxX3NkY2xraW5fYSIsCisJCQkibW91dF9zY2xrX2ZzeXNfbW1jMV9zZGNsa2luX2IiLAorCQkJRElWX1RPUF9GU1lTMSwgMCwgNCksCisJRElWKFRPUF9ET1VUX1NDTEtfRlNZU19NTUMxX1NEQ0xLSU5fQiwgImRvdXRfc2Nsa19mc3lzX21tYzFfc2RjbGtpbl9iIiwKKwkJCSJkb3V0X3NjbGtfZnN5c19tbWMxX3NkY2xraW5fYSIsCisJCQlESVZfVE9QX0ZTWVMxLCA0LCA4KSwKKwlESVYoVE9QX0RPVVRfU0NMS19GU1lTX01NQzJfU0RDTEtJTl9BLCAiZG91dF9zY2xrX2ZzeXNfbW1jMl9zZGNsa2luX2EiLAorCQkJIm1vdXRfc2Nsa19mc3lzX21tYzJfc2RjbGtpbl9iIiwKKwkJCURJVl9UT1BfRlNZUzEsIDEyLCA0KSwKKwlESVYoVE9QX0RPVVRfU0NMS19GU1lTX01NQzJfU0RDTEtJTl9CLCAiZG91dF9zY2xrX2ZzeXNfbW1jMl9zZGNsa2luX2IiLAorCQkJImRvdXRfc2Nsa19mc3lzX21tYzJfc2RjbGtpbl9hIiwKKwkJCURJVl9UT1BfRlNZUzEsIDE2LCA4KSwKKworfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayB0b3BfZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKFRPUF9TQ0xLX01NQzAsICJzY2xrX2ZzeXNfbW1jMF9zZGNsa2luIiwKKwkJCSJkb3V0X3NjbGtfZnN5c19tbWMwX3NkY2xraW5fYiIsCisJCQlFTl9TQ0xLX1RPUCwgNywgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShUT1BfU0NMS19NTUMxLCAic2Nsa19mc3lzX21tYzFfc2RjbGtpbiIsCisJCQkiZG91dF9zY2xrX2ZzeXNfbW1jMV9zZGNsa2luX2IiLAorCQkJRU5fU0NMS19UT1AsIDgsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoVE9QX1NDTEtfTU1DMiwgInNjbGtfZnN5c19tbWMyX3NkY2xraW4iLAorCQkJImRvdXRfc2Nsa19mc3lzX21tYzJfc2RjbGtpbl9iIiwKKwkJCUVOX1NDTEtfVE9QLCA5LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKFRPUF9TQ0xLX0ZJTUQxLCAic2Nsa19kaXNwX3BpeGVsIiwgImRvdXRfc2Nsa19kaXNwX3BpeGVsIiwKKwkJCUVOX0FDTEtfVE9QLCAxMCwgQ0xLX0lHTk9SRV9VTlVTRUQgfAorCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIHRvcF9wbGxfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJUExMKHBsbF8yNTUweHgsIFRPUF9GT1VUX0RJU1BfUExMLCAiZm91dF9kaXNwX3BsbCIsICJmaW5fcGxsIiwKKwkJRElTUF9QTExfTE9DSywgRElTUF9QTExfQ09OMCwKKwkJcGxsMjU1MF8yNG1oel90YmwpLAorCVBMTChwbGxfMjY1MHh4LCBUT1BfRk9VVF9BVURfUExMLCAiZm91dF9hdWRfcGxsIiwgImZpbl9wbGwiLAorCQlBVURfUExMX0xPQ0ssIEFVRF9QTExfQ09OMCwKKwkJcGxsMjY1MF8yNG1oel90YmwpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczUyNjBfY2xrX3RvcF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGV4eW5vczUyNjBfY211X2luZm8gY211ID0gezB9OworCisJY211LnBsbF9jbGtzID0gdG9wX3BsbF9jbGtzOworCWNtdS5ucl9wbGxfY2xrcyA9ICBBUlJBWV9TSVpFKHRvcF9wbGxfY2xrcyk7CisJY211Lm11eF9jbGtzID0gdG9wX211eF9jbGtzOworCWNtdS5ucl9tdXhfY2xrcyA9IEFSUkFZX1NJWkUodG9wX211eF9jbGtzKTsKKwljbXUuZGl2X2Nsa3MgPSB0b3BfZGl2X2Nsa3M7CisJY211Lm5yX2Rpdl9jbGtzID0gQVJSQVlfU0laRSh0b3BfZGl2X2Nsa3MpOworCWNtdS5nYXRlX2Nsa3MgPSB0b3BfZ2F0ZV9jbGtzOworCWNtdS5ucl9nYXRlX2Nsa3MgPSBBUlJBWV9TSVpFKHRvcF9nYXRlX2Nsa3MpOworCWNtdS5maXhlZF9jbGtzID0gZml4ZWRfcmF0ZV9jbGtzOworCWNtdS5ucl9maXhlZF9jbGtzID0gQVJSQVlfU0laRShmaXhlZF9yYXRlX2Nsa3MpOworCWNtdS5ucl9jbGtfaWRzID0gVE9QX05SX0NMSzsKKwljbXUuY2xrX3JlZ3MgPSB0b3BfY2xrX3JlZ3M7CisJY211Lm5yX2Nsa19yZWdzID0gQVJSQVlfU0laRSh0b3BfY2xrX3JlZ3MpOworCisJZXh5bm9zNTI2MF9jbXVfcmVnaXN0ZXJfb25lKG5wLCAmY211KTsKK30KKworQ0xLX09GX0RFQ0xBUkUoZXh5bm9zNTI2MF9jbGtfdG9wLCAic2Ftc3VuZyxleHlub3M1MjYwLWNsb2NrLXRvcCIsCisJCWV4eW5vczUyNjBfY2xrX3RvcF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczUyNjAuaCBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczUyNjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzM5NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTI2MC5oCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBBdXRob3I6IFJhaHVsIFNoYXJtYSA8cmFodWwuc2hhcm1hQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29tbW9uIENsb2NrIEZyYW1ld29yayBzdXBwb3J0IGZvciBFeHlub3M1MjYwIFNvQy4KKyAqLworCisjaWZuZGVmIF9fQ0xLX0VYWU5PUzUyNjBfSAorI2RlZmluZSBfX0NMS19FWFlOT1M1MjYwX0gKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9BVUQKKyovCisjZGVmaW5lIE1VWF9TRUxfQVVECQkJCTB4MDIwMAorI2RlZmluZSBNVVhfRU5BQkxFX0FVRAkJCQkweDAzMDAKKyNkZWZpbmUgTVVYX1NUQVRfQVVECQkJCTB4MDQwMAorI2RlZmluZSBNVVhfSUdOT1JFX0FVRAkJCQkweDA1MDAKKyNkZWZpbmUgRElWX0FVRDAJCQkJMHgwNjAwCisjZGVmaW5lIERJVl9BVUQxCQkJCTB4MDYwNAorI2RlZmluZSBESVZfU1RBVF9BVUQwCQkJCTB4MDcwMAorI2RlZmluZSBESVZfU1RBVF9BVUQxCQkJCTB4MDcwNAorI2RlZmluZSBFTl9BQ0xLX0FVRAkJCQkweDA4MDAKKyNkZWZpbmUgRU5fUENMS19BVUQJCQkJMHgwOTAwCisjZGVmaW5lIEVOX1NDTEtfQVVECQkJCTB4MGEwMAorI2RlZmluZSBFTl9JUF9BVUQJCQkJMHgwYjAwCisKKy8qCisqUmVnaXN0ZXJzIGZvciBDTVVfRElTUAorKi8KKyNkZWZpbmUgTVVYX1NFTF9ESVNQMAkJCQkweDAyMDAKKyNkZWZpbmUgTVVYX1NFTF9ESVNQMQkJCQkweDAyMDQKKyNkZWZpbmUgTVVYX1NFTF9ESVNQMgkJCQkweDAyMDgKKyNkZWZpbmUgTVVYX1NFTF9ESVNQMwkJCQkweDAyMEMKKyNkZWZpbmUgTVVYX1NFTF9ESVNQNAkJCQkweDAyMTAKKyNkZWZpbmUgTVVYX0VOQUJMRV9ESVNQMAkJCTB4MDMwMAorI2RlZmluZSBNVVhfRU5BQkxFX0RJU1AxCQkJMHgwMzA0CisjZGVmaW5lIE1VWF9FTkFCTEVfRElTUDIJCQkweDAzMDgKKyNkZWZpbmUgTVVYX0VOQUJMRV9ESVNQMwkJCTB4MDMwYworI2RlZmluZSBNVVhfRU5BQkxFX0RJU1A0CQkJMHgwMzEwCisjZGVmaW5lIE1VWF9TVEFUX0RJU1AwCQkJCTB4MDQwMAorI2RlZmluZSBNVVhfU1RBVF9ESVNQMQkJCQkweDA0MDQKKyNkZWZpbmUgTVVYX1NUQVRfRElTUDIJCQkJMHgwNDA4CisjZGVmaW5lIE1VWF9TVEFUX0RJU1AzCQkJCTB4MDQwYworI2RlZmluZSBNVVhfU1RBVF9ESVNQNAkJCQkweDA0MTAKKyNkZWZpbmUgTVVYX0lHTk9SRV9ESVNQMAkJCTB4MDUwMAorI2RlZmluZSBNVVhfSUdOT1JFX0RJU1AxCQkJMHgwNTA0CisjZGVmaW5lIE1VWF9JR05PUkVfRElTUDIJCQkweDA1MDgKKyNkZWZpbmUgTVVYX0lHTk9SRV9ESVNQMwkJCTB4MDUwYworI2RlZmluZSBNVVhfSUdOT1JFX0RJU1A0CQkJMHgwNTEwCisjZGVmaW5lIERJVl9ESVNQCQkJCTB4MDYwMAorI2RlZmluZSBESVZfU1RBVF9ESVNQCQkJCTB4MDcwMAorI2RlZmluZSBFTl9BQ0xLX0RJU1AJCQkJMHgwODAwCisjZGVmaW5lIEVOX1BDTEtfRElTUAkJCQkweDA5MDAKKyNkZWZpbmUgRU5fU0NMS19ESVNQMAkJCQkweDBhMDAKKyNkZWZpbmUgRU5fU0NMS19ESVNQMQkJCQkweDBhMDQKKyNkZWZpbmUgRU5fSVBfRElTUAkJCQkweDBiMDAKKyNkZWZpbmUgRU5fSVBfRElTUF9CVVMJCQkJMHgwYjA0CisKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9FR0wKKyovCisjZGVmaW5lIEVHTF9QTExfTE9DSwkJCQkweDAwMDAKKyNkZWZpbmUgRUdMX0RQTExfTE9DSwkJCQkweDAwMDQKKyNkZWZpbmUgRUdMX1BMTF9DT04wCQkJCTB4MDEwMAorI2RlZmluZSBFR0xfUExMX0NPTjEJCQkJMHgwMTA0CisjZGVmaW5lIEVHTF9QTExfRlJFUV9ERVQJCQkweDAxMGMKKyNkZWZpbmUgRUdMX0RQTExfQ09OMAkJCQkweDAxMTAKKyNkZWZpbmUgRUdMX0RQTExfQ09OMQkJCQkweDAxMTQKKyNkZWZpbmUgRUdMX0RQTExfRlJFUV9ERVQJCQkweDAxMWMKKyNkZWZpbmUgTVVYX1NFTF9FR0wJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9FTkFCTEVfRUdMCQkJCTB4MDMwMAorI2RlZmluZSBNVVhfU1RBVF9FR0wJCQkJMHgwNDAwCisjZGVmaW5lIERJVl9FR0wJCQkJCTB4MDYwMAorI2RlZmluZSBESVZfRUdMX1BMTF9GREVUCQkJMHgwNjA0CisjZGVmaW5lIERJVl9TVEFUX0VHTAkJCQkweDA3MDAKKyNkZWZpbmUgRElWX1NUQVRfRUdMX1BMTF9GREVUCQkJMHgwNzA0CisjZGVmaW5lIEVOX0FDTEtfRUdMCQkJCTB4MDgwMAorI2RlZmluZSBFTl9QQ0xLX0VHTAkJCQkweDA5MDAKKyNkZWZpbmUgRU5fU0NMS19FR0wJCQkJMHgwYTAwCisjZGVmaW5lIEVOX0lQX0VHTAkJCQkweDBiMDAKKyNkZWZpbmUgQ0xLT1VUX0NNVV9FR0wJCQkJMHgwYzAwCisjZGVmaW5lIENMS09VVF9DTVVfRUdMX0RJVl9TVEFUCQkJMHgwYzA0CisjZGVmaW5lIEFSTUNMS19TVE9QQ1RSTAkJCQkweDEwMDAKKyNkZWZpbmUgRUFHTEVfRU1BX0NUUkwJCQkJMHgxMDA4CisjZGVmaW5lIEVBR0xFX0VNQV9TVEFUVVMJCQkweDEwMGMKKyNkZWZpbmUgUFdSX0NUUkwJCQkJMHgxMDIwCisjZGVmaW5lIFBXUl9DVFJMMgkJCQkweDEwMjQKKyNkZWZpbmUgQ0xLU1RPUF9DVFJMCQkJCTB4MTAyOAorI2RlZmluZSBJTlRSX1NQUkVBRF9FTgkJCQkweDEwODAKKyNkZWZpbmUgSU5UUl9TUFJFQURfVVNFX1NUQU5EQllXRkkJCTB4MTA4NAorI2RlZmluZSBJTlRSX1NQUkVBRF9CTE9DS0lOR19EVVJBVElPTgkJMHgxMDg4CisjZGVmaW5lIENNVV9FR0xfU1BBUkUwCQkJCTB4MjAwMAorI2RlZmluZSBDTVVfRUdMX1NQQVJFMQkJCQkweDIwMDQKKyNkZWZpbmUgQ01VX0VHTF9TUEFSRTIJCQkJMHgyMDA4CisjZGVmaW5lIENNVV9FR0xfU1BBUkUzCQkJCTB4MjAwYworI2RlZmluZSBDTVVfRUdMX1NQQVJFNAkJCQkweDIwMTAKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9GU1lTCisqLworCisjZGVmaW5lIE1VWF9TRUxfRlNZUzAJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9TRUxfRlNZUzEJCQkJMHgwMjA0CisjZGVmaW5lIE1VWF9FTkFCTEVfRlNZUzAJCQkweDAzMDAKKyNkZWZpbmUgTVVYX0VOQUJMRV9GU1lTMQkJCTB4MDMwNAorI2RlZmluZSBNVVhfU1RBVF9GU1lTMAkJCQkweDA0MDAKKyNkZWZpbmUgTVVYX1NUQVRfRlNZUzEJCQkJMHgwNDA0CisjZGVmaW5lIE1VWF9JR05PUkVfRlNZUzAJCQkweDA1MDAKKyNkZWZpbmUgTVVYX0lHTk9SRV9GU1lTMQkJCTB4MDUwNAorI2RlZmluZSBFTl9BQ0xLX0ZTWVMJCQkJMHgwODAwCisjZGVmaW5lIEVOX0FDTEtfRlNZU19TRUNVUkVfUlRJQwkJMHgwODA0CisjZGVmaW5lIEVOX0FDTEtfRlNZU19TRUNVUkVfU01NVV9SVElDCQkweDA4MDgKKyNkZWZpbmUgRU5fUENMS19GU1lTCQkJCTB4MDkwMAorI2RlZmluZSBFTl9TQ0xLX0ZTWVMJCQkJMHgwYTAwCisjZGVmaW5lIEVOX0lQX0ZTWVMJCQkJMHgwYjAwCisjZGVmaW5lIEVOX0lQX0ZTWVNfU0VDVVJFX1JUSUMJCQkweDBiMDQKKyNkZWZpbmUgRU5fSVBfRlNZU19TRUNVUkVfU01NVV9SVElDCQkweDBiMDgKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9HMkQKKyovCisKKyNkZWZpbmUgTVVYX1NFTF9HMkQJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9FTkFCTEVfRzJECQkJCTB4MDMwMAorI2RlZmluZSBNVVhfU1RBVF9HMkQJCQkJMHgwNDAwCisjZGVmaW5lIERJVl9HMkQJCQkJCTB4MDYwMAorI2RlZmluZSBESVZfU1RBVF9HMkQJCQkJMHgwNzAwCisjZGVmaW5lIEVOX0FDTEtfRzJECQkJCTB4MDgwMAorI2RlZmluZSBFTl9BQ0xLX0cyRF9TRUNVUkVfU1NTCQkJMHgwODA0CisjZGVmaW5lIEVOX0FDTEtfRzJEX1NFQ1VSRV9TTElNX1NTUwkJMHgwODA4CisjZGVmaW5lIEVOX0FDTEtfRzJEX1NFQ1VSRV9TTU1VX1NMSU1fU1NTCTB4MDgwYworI2RlZmluZSBFTl9BQ0xLX0cyRF9TRUNVUkVfU01NVV9TU1MJCTB4MDgxMAorI2RlZmluZSBFTl9BQ0xLX0cyRF9TRUNVUkVfU01NVV9NRE1BCQkweDA4MTQKKyNkZWZpbmUgRU5fQUNMS19HMkRfU0VDVVJFX1NNTVVfRzJECQkweDA4MTgKKyNkZWZpbmUgRU5fUENMS19HMkQJCQkJMHgwOTAwCisjZGVmaW5lIEVOX1BDTEtfRzJEX1NFQ1VSRV9TTU1VX1NMSU1fU1NTCTB4MDkwNAorI2RlZmluZSBFTl9QQ0xLX0cyRF9TRUNVUkVfU01NVV9TU1MJCTB4MDkwOAorI2RlZmluZSBFTl9QQ0xLX0cyRF9TRUNVUkVfU01NVV9NRE1BCQkweDA5MGMKKyNkZWZpbmUgRU5fUENMS19HMkRfU0VDVVJFX1NNTVVfRzJECQkweDA5MTAKKyNkZWZpbmUgRU5fSVBfRzJECQkJCTB4MGIwMAorI2RlZmluZSBFTl9JUF9HMkRfU0VDVVJFX1NTUwkJCTB4MGIwNAorI2RlZmluZSBFTl9JUF9HMkRfU0VDVVJFX1NMSU1fU1NTCQkweDBiMDgKKyNkZWZpbmUgRU5fSVBfRzJEX1NFQ1VSRV9TTU1VX1NMSU1fU1NTCQkweDBiMGMKKyNkZWZpbmUgRU5fSVBfRzJEX1NFQ1VSRV9TTU1VX1NTUwkJMHgwYjEwCisjZGVmaW5lIEVOX0lQX0cyRF9TRUNVUkVfU01NVV9NRE1BCQkweDBiMTQKKyNkZWZpbmUgRU5fSVBfRzJEX1NFQ1VSRV9TTU1VX0cyRAkJMHgwYjE4CisKKy8qCisqUmVnaXN0ZXJzIGZvciBDTVVfRzNECisqLworCisjZGVmaW5lIEczRF9QTExfTE9DSwkJCQkweDAwMDAKKyNkZWZpbmUgRzNEX1BMTF9DT04wCQkJCTB4MDEwMAorI2RlZmluZSBHM0RfUExMX0NPTjEJCQkJMHgwMTA0CisjZGVmaW5lIEczRF9QTExfRkRFVAkJCQkweDAxMGMKKyNkZWZpbmUgTVVYX1NFTF9HM0QJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9FTl9HM0QJCQkJMHgwMzAwCisjZGVmaW5lIE1VWF9TVEFUX0czRAkJCQkweDA0MDAKKyNkZWZpbmUgTVVYX0lHTk9SRV9HM0QJCQkJMHgwNTAwCisjZGVmaW5lIERJVl9HM0QJCQkJCTB4MDYwMAorI2RlZmluZSBESVZfRzNEX1BMTF9GREVUCQkJMHgwNjA0CisjZGVmaW5lIERJVl9TVEFUX0czRAkJCQkweDA3MDAKKyNkZWZpbmUgRElWX1NUQVRfRzNEX1BMTF9GREVUCQkJMHgwNzA0CisjZGVmaW5lIEVOX0FDTEtfRzNECQkJCTB4MDgwMAorI2RlZmluZSBFTl9QQ0xLX0czRAkJCQkweDA5MDAKKyNkZWZpbmUgRU5fU0NMS19HM0QJCQkJMHgwYTAwCisjZGVmaW5lIEVOX0lQX0czRAkJCQkweDBiMDAKKyNkZWZpbmUgQ0xLT1VUX0NNVV9HM0QJCQkJMHgwYzAwCisjZGVmaW5lIENMS09VVF9DTVVfRzNEX0RJVl9TVEFUCQkJMHgwYzA0CisjZGVmaW5lIEczRENMS19TVE9QQ1RSTAkJCQkweDEwMDAKKyNkZWZpbmUgRzNEX0VNQV9DVFJMCQkJCTB4MTAwOAorI2RlZmluZSBHM0RfRU1BX1NUQVRVUwkJCQkweDEwMGMKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9HU0NMCisqLworCisjZGVmaW5lIE1VWF9TRUxfR1NDTAkJCQkweDAyMDAKKyNkZWZpbmUgTVVYX0VOX0dTQ0wJCQkJMHgwMzAwCisjZGVmaW5lIE1VWF9TVEFUX0dTQ0wJCQkJMHgwNDAwCisjZGVmaW5lIE1VWF9JR05PUkVfR1NDTAkJCQkweDA1MDAKKyNkZWZpbmUgRElWX0dTQ0wJCQkJMHgwNjAwCisjZGVmaW5lIERJVl9TVEFUX0dTQ0wJCQkJMHgwNzAwCisjZGVmaW5lIEVOX0FDTEtfR1NDTAkJCQkweDA4MDAKKyNkZWZpbmUgRU5fQUNMS19HU0NMX0ZJTUMJCQkweDA4MDQKKyNkZWZpbmUgRU5fQUNMS19HU0NMX1NFQ1VSRV9TTU1VX0dTQ0wwCQkweDA4MDgKKyNkZWZpbmUgRU5fQUNMS19HU0NMX1NFQ1VSRV9TTU1VX0dTQ0wxCQkweDA4MGMKKyNkZWZpbmUgRU5fQUNMS19HU0NMX1NFQ1VSRV9TTU1VX01TQ0wwCQkweDA4MTAKKyNkZWZpbmUgRU5fQUNMS19HU0NMX1NFQ1VSRV9TTU1VX01TQ0wxCQkweDA4MTQKKyNkZWZpbmUgRU5fUENMS19HU0NMCQkJCTB4MDkwMAorI2RlZmluZSBFTl9QQ0xLX0dTQ0xfRklNQwkJCTB4MDkwNAorI2RlZmluZSBFTl9QQ0xLX0dTQ0xfU0VDVVJFX1NNTVVfR1NDTDAJCTB4MDkwOAorI2RlZmluZSBFTl9QQ0xLX0dTQ0xfU0VDVVJFX1NNTVVfR1NDTDEJCTB4MDkwYworI2RlZmluZSBFTl9QQ0xLX0dTQ0xfU0VDVVJFX1NNTVVfTVNDTDAJCTB4MDkxMAorI2RlZmluZSBFTl9QQ0xLX0dTQ0xfU0VDVVJFX1NNTVVfTVNDTDEJCTB4MDkxNAorI2RlZmluZSBFTl9TQ0xLX0dTQ0wJCQkJMHgwYTAwCisjZGVmaW5lIEVOX1NDTEtfR1NDTF9GSU1DCQkJMHgwYTA0CisjZGVmaW5lIEVOX0lQX0dTQ0wJCQkJMHgwYjAwCisjZGVmaW5lIEVOX0lQX0dTQ0xfRklNQwkJCQkweDBiMDQKKyNkZWZpbmUgRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9HU0NMMAkJMHgwYjA4CisjZGVmaW5lIEVOX0lQX0dTQ0xfU0VDVVJFX1NNTVVfR1NDTDEJCTB4MGIwYworI2RlZmluZSBFTl9JUF9HU0NMX1NFQ1VSRV9TTU1VX01TQ0wwCQkweDBiMTAKKyNkZWZpbmUgRU5fSVBfR1NDTF9TRUNVUkVfU01NVV9NU0NMMQkJMHgwYjE0CisKKy8qCisqUmVnaXN0ZXJzIGZvciBDTVVfSVNQCisqLworI2RlZmluZSBNVVhfU0VMX0lTUDAJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9TRUxfSVNQMQkJCQkweDAyMDQKKyNkZWZpbmUgTVVYX0VOQUJMRV9JU1AwCQkJCTB4MDMwMAorI2RlZmluZSBNVVhfRU5BQkxFX0lTUDEJCQkJMHgwMzA0CisjZGVmaW5lIE1VWF9TVEFUX0lTUDAJCQkJMHgwNDAwCisjZGVmaW5lIE1VWF9TVEFUX0lTUDEJCQkJMHgwNDA0CisjZGVmaW5lIE1VWF9JR05PUkVfSVNQMAkJCQkweDA1MDAKKyNkZWZpbmUgTVVYX0lHTk9SRV9JU1AxCQkJCTB4MDUwNAorI2RlZmluZSBESVZfSVNQCQkJCQkweDA2MDAKKyNkZWZpbmUgRElWX1NUQVRfSVNQCQkJCTB4MDcwMAorI2RlZmluZSBFTl9BQ0xLX0lTUDAJCQkJMHgwODAwCisjZGVmaW5lIEVOX0FDTEtfSVNQMQkJCQkweDA4MDQKKyNkZWZpbmUgRU5fUENMS19JU1AwCQkJCTB4MDkwMAorI2RlZmluZSBFTl9QQ0xLX0lTUDEJCQkJMHgwOTA0CisjZGVmaW5lIEVOX1NDTEtfSVNQCQkJCTB4MGEwMAorI2RlZmluZSBFTl9JUF9JU1AwCQkJCTB4MGIwMAorI2RlZmluZSBFTl9JUF9JU1AxCQkJCTB4MGIwNAorCisvKgorKlJlZ2lzdGVycyBmb3IgQ01VX0tGQworKi8KKyNkZWZpbmUgS0ZDX1BMTF9MT0NLCQkJCTB4MDAwMAorI2RlZmluZSBLRkNfUExMX0NPTjAJCQkJMHgwMTAwCisjZGVmaW5lIEtGQ19QTExfQ09OMQkJCQkweDAxMDQKKyNkZWZpbmUgS0ZDX1BMTF9GREVUCQkJCTB4MDEwYworI2RlZmluZSBNVVhfU0VMX0tGQzAJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9TRUxfS0ZDMgkJCQkweDAyMDgKKyNkZWZpbmUgTVVYX0VOQUJMRV9LRkMwCQkJCTB4MDMwMAorI2RlZmluZSBNVVhfRU5BQkxFX0tGQzIJCQkJMHgwMzA4CisjZGVmaW5lIE1VWF9TVEFUX0tGQzAJCQkJMHgwNDAwCisjZGVmaW5lIE1VWF9TVEFUX0tGQzIJCQkJMHgwNDA4CisjZGVmaW5lIERJVl9LRkMJCQkJCTB4MDYwMAorI2RlZmluZSBESVZfS0ZDX1BMTF9GREVUCQkJMHgwNjA0CisjZGVmaW5lIERJVl9TVEFUX0tGQwkJCQkweDA3MDAKKyNkZWZpbmUgRElWX1NUQVRfS0ZDX1BMTF9GREVUCQkJMHgwNzA0CisjZGVmaW5lIEVOX0FDTEtfS0ZDCQkJCTB4MDgwMAorI2RlZmluZSBFTl9QQ0xLX0tGQwkJCQkweDA5MDAKKyNkZWZpbmUgRU5fU0NMS19LRkMJCQkJMHgwYTAwCisjZGVmaW5lIEVOX0lQX0tGQwkJCQkweDBiMDAKKyNkZWZpbmUgQ0xLT1VUX0NNVV9LRkMJCQkJMHgwYzAwCisjZGVmaW5lIENMS09VVF9DTVVfS0ZDX0RJVl9TVEFUCQkJMHgwYzA0CisjZGVmaW5lIEFSTUNMS19TVE9QQ1RSTF9LRkMJCQkweDEwMDAKKyNkZWZpbmUgQVJNX0VNQV9DVFJMCQkJCTB4MTAwOAorI2RlZmluZSBBUk1fRU1BX1NUQVRVUwkJCQkweDEwMGMKKyNkZWZpbmUgUFdSX0NUUkxfS0ZDCQkJCTB4MTAyMAorI2RlZmluZSBQV1JfQ1RSTDJfS0ZDCQkJCTB4MTAyNAorI2RlZmluZSBDTEtTVE9QX0NUUkxfS0ZDCQkJMHgxMDI4CisjZGVmaW5lIElOVFJfU1BSRUFEX0VOQUJMRV9LRkMJCQkweDEwODAKKyNkZWZpbmUgSU5UUl9TUFJFQURfVVNFX1NUQU5EQllXRklfS0ZDCQkweDEwODQKKyNkZWZpbmUgSU5UUl9TUFJFQURfQkxPQ0tJTkdfRFVSQVRJT05fS0ZDCTB4MTA4OAorI2RlZmluZSBDTVVfS0ZDX1NQQVJFMAkJCQkweDIwMDAKKyNkZWZpbmUgQ01VX0tGQ19TUEFSRTEJCQkJMHgyMDA0CisjZGVmaW5lIENNVV9LRkNfU1BBUkUyCQkJCTB4MjAwOAorI2RlZmluZSBDTVVfS0ZDX1NQQVJFMwkJCQkweDIwMGMKKyNkZWZpbmUgQ01VX0tGQ19TUEFSRTQJCQkJMHgyMDEwCisKKy8qCisqUmVnaXN0ZXJzIGZvciBDTVVfTUZDCisqLworI2RlZmluZSBNVVhfU0VMX01GQwkJCQkweDAyMDAKKyNkZWZpbmUgTVVYX0VOQUJMRV9NRkMJCQkJMHgwMzAwCisjZGVmaW5lIE1VWF9TVEFUX01GQwkJCQkweDA0MDAKKyNkZWZpbmUgRElWX01GQwkJCQkJMHgwNjAwCisjZGVmaW5lIERJVl9TVEFUX01GQwkJCQkweDA3MDAKKyNkZWZpbmUgRU5fQUNMS19NRkMJCQkJMHgwODAwCisjZGVmaW5lIEVOX0FDTEtfU0VDVVJFX1NNTVUyX01GQwkJMHgwODA0CisjZGVmaW5lIEVOX1BDTEtfTUZDCQkJCTB4MDkwMAorI2RlZmluZSBFTl9QQ0xLX1NFQ1VSRV9TTU1VMl9NRkMJCTB4MDkwNAorI2RlZmluZSBFTl9JUF9NRkMJCQkJMHgwYjAwCisjZGVmaW5lIEVOX0lQX01GQ19TRUNVUkVfU01NVTJfTUZDCQkweDBiMDQKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9NSUYKKyovCisjZGVmaW5lIE1FTV9QTExfTE9DSwkJCQkweDAwMDAKKyNkZWZpbmUgQlVTX1BMTF9MT0NLCQkJCTB4MDAwNAorI2RlZmluZSBNRURJQV9QTExfTE9DSwkJCQkweDAwMDgKKyNkZWZpbmUgTUVNX1BMTF9DT04wCQkJCTB4MDEwMAorI2RlZmluZSBNRU1fUExMX0NPTjEJCQkJMHgwMTA0CisjZGVmaW5lIE1FTV9QTExfRkRFVAkJCQkweDAxMGMKKyNkZWZpbmUgQlVTX1BMTF9DT04wCQkJCTB4MDExMAorI2RlZmluZSBCVVNfUExMX0NPTjEJCQkJMHgwMTE0CisjZGVmaW5lIEJVU19QTExfRkRFVAkJCQkweDAxMWMKKyNkZWZpbmUgTUVESUFfUExMX0NPTjAJCQkJMHgwMTIwCisjZGVmaW5lIE1FRElBX1BMTF9DT04xCQkJCTB4MDEyNAorI2RlZmluZSBNRURJQV9QTExfRkRFVAkJCQkweDAxMmMKKyNkZWZpbmUgTVVYX1NFTF9NSUYJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9FTkFCTEVfTUlGCQkJCTB4MDMwMAorI2RlZmluZSBNVVhfU1RBVF9NSUYJCQkJMHgwNDAwCisjZGVmaW5lIE1VWF9JR05PUkVfTUlGCQkJCTB4MDUwMAorI2RlZmluZSBESVZfTUlGCQkJCQkweDA2MDAKKyNkZWZpbmUgRElWX01JRl9QTExfRkRFVAkJCTB4MDYwNAorI2RlZmluZSBESVZfU1RBVF9NSUYJCQkJMHgwNzAwCisjZGVmaW5lIERJVl9TVEFUX01JRl9QTExfRkRFVAkJCTB4MDcwNAorI2RlZmluZSBFTl9BQ0xLX01JRgkJCQkweDA4MDAKKyNkZWZpbmUgRU5fQUNMS19NSUZfU0VDVVJFX0RSRVgxX1RaCQkweDA4MDQKKyNkZWZpbmUgRU5fQUNMS19NSUZfU0VDVVJFX0RSRVgwX1RaCQkweDA4MDgKKyNkZWZpbmUgRU5fQUNMS19NSUZfU0VDVVJFX0lOVE1FTQkJMHgwODBjCisjZGVmaW5lIEVOX1BDTEtfTUlGCQkJCTB4MDkwMAorI2RlZmluZSBFTl9QQ0xLX01JRl9TRUNVUkVfTU9OT0NOVAkJMHgwOTA0CisjZGVmaW5lIEVOX1BDTEtfTUlGX1NFQ1VSRV9SVENfQVBCSUYJCTB4MDkwOAorI2RlZmluZSBFTl9QQ0xLX01JRl9TRUNVUkVfRFJFWDFfVFoJCTB4MDkwYworI2RlZmluZSBFTl9QQ0xLX01JRl9TRUNVUkVfRFJFWDBfVFoJCTB4MDkxMAorI2RlZmluZSBFTl9TQ0xLX01JRgkJCQkweDBhMDAKKyNkZWZpbmUgRU5fSVBfTUlGCQkJCTB4MGIwMAorI2RlZmluZSBFTl9JUF9NSUZfU0VDVVJFX01PTk9DTlQJCTB4MGIwNAorI2RlZmluZSBFTl9JUF9NSUZfU0VDVVJFX1JUQ19BUEJJRgkJMHgwYjA4CisjZGVmaW5lIEVOX0lQX01JRl9TRUNVUkVfRFJFWDFfVFoJCTB4MGIwYworI2RlZmluZSBFTl9JUF9NSUZfU0VDVVJFX0RSRVgwX1RaCQkweDBiMTAKKyNkZWZpbmUgRU5fSVBfTUlGX1NFQ1VSRV9JTlRFTUVNCQkweDBiMTQKKyNkZWZpbmUgQ0xLT1VUX0NNVV9NSUZfRElWX1NUQVQJCQkweDBjMDQKKyNkZWZpbmUgRFJFWF9GUkVRX0NUUkwJCQkJMHgxMDAwCisjZGVmaW5lIFBBVVNFCQkJCQkweDEwMDQKKyNkZWZpbmUgRERSUEhZX0xPQ0tfQ1RSTAkJCTB4MTAwOAorI2RlZmluZSBDTEtPVVRfQ01VX01JRgkJCQkweGNiMDAKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9QRVJJCisqLworI2RlZmluZSBNVVhfU0VMX1BFUkkJCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9TRUxfUEVSSTEJCQkJMHgwMjA0CisjZGVmaW5lIE1VWF9FTkFCTEVfUEVSSQkJCQkweDAzMDAKKyNkZWZpbmUgTVVYX0VOQUJMRV9QRVJJMQkJCTB4MDMwNAorI2RlZmluZSBNVVhfU1RBVF9QRVJJCQkJCTB4MDQwMAorI2RlZmluZSBNVVhfU1RBVF9QRVJJMQkJCQkweDA0MDQKKyNkZWZpbmUgTVVYX0lHTk9SRV9QRVJJCQkJCTB4MDUwMAorI2RlZmluZSBNVVhfSUdOT1JFX1BFUkkxCQkJMHgwNTA0CisjZGVmaW5lIERJVl9QRVJJCQkJCTB4MDYwMAorI2RlZmluZSBESVZfU1RBVF9QRVJJCQkJCTB4MDcwMAorI2RlZmluZSBFTl9QQ0xLX1BFUkkwCQkJCTB4MDgwMAorI2RlZmluZSBFTl9QQ0xLX1BFUkkxCQkJCTB4MDgwNAorI2RlZmluZSBFTl9QQ0xLX1BFUkkyCQkJCTB4MDgwOAorI2RlZmluZSBFTl9QQ0xLX1BFUkkzCQkJCTB4MDgwYworI2RlZmluZSBFTl9QQ0xLX1BFUklfU0VDVVJFX0NISVBJRAkJMHgwODEwCisjZGVmaW5lIEVOX1BDTEtfUEVSSV9TRUNVUkVfUFJPVktFWTAJCTB4MDgxNAorI2RlZmluZSBFTl9QQ0xLX1BFUklfU0VDVVJFX1BST1ZLRVkxCQkweDA4MTgKKyNkZWZpbmUgRU5fUENMS19QRVJJX1NFQ1VSRV9TRUNLRVkJCTB4MDgxYworI2RlZmluZSBFTl9QQ0xLX1BFUklfU0VDVVJFX0FOVElSQktDTlQJCTB4MDgyMAorI2RlZmluZSBFTl9QQ0xLX1BFUklfU0VDVVJFX1RPUF9SVEMJCTB4MDgyNAorI2RlZmluZSBFTl9QQ0xLX1BFUklfU0VDVVJFX1RaUEMJCTB4MDgyOAorI2RlZmluZSBFTl9TQ0xLX1BFUkkJCQkJMHgwYTAwCisjZGVmaW5lIEVOX1NDTEtfUEVSSV9TRUNVUkVfVE9QX1JUQwkJMHgwYTA0CisjZGVmaW5lIEVOX0lQX1BFUkkwCQkJCTB4MGIwMAorI2RlZmluZSBFTl9JUF9QRVJJMQkJCQkweDBiMDQKKyNkZWZpbmUgRU5fSVBfUEVSSTIJCQkJMHgwYjA4CisjZGVmaW5lIEVOX0lQX1BFUklfU0VDVVJFX0NISVBJRAkJMHgwYjBjCisjZGVmaW5lIEVOX0lQX1BFUklfU0VDVVJFX1BST1ZLRVkwCQkweDBiMTAKKyNkZWZpbmUgRU5fSVBfUEVSSV9TRUNVUkVfUFJPVktFWTEJCTB4MGIxNAorI2RlZmluZSBFTl9JUF9QRVJJX1NFQ1VSRV9TRUNLRVkJCTB4MGIxOAorI2RlZmluZSBFTl9JUF9QRVJJX1NFQ1VSRV9BTlRJUkJLQ05UCQkweDBiMWMKKyNkZWZpbmUgRU5fSVBfUEVSSV9TRUNVUkVfVE9QX1JUQwkJMHgwYjIwCisjZGVmaW5lIEVOX0lQX1BFUklfU0VDVVJFX1RaUEMJCQkweDBiMjQKKworLyoKKypSZWdpc3RlcnMgZm9yIENNVV9UT1AKKyovCisjZGVmaW5lIERJU1BfUExMX0xPQ0sJCQkJMHgwMDAwCisjZGVmaW5lIEFVRF9QTExfTE9DSwkJCQkweDAwMDQKKyNkZWZpbmUgRElTUF9QTExfQ09OMAkJCQkweDAxMDAKKyNkZWZpbmUgRElTUF9QTExfQ09OMQkJCQkweDAxMDQKKyNkZWZpbmUgRElTUF9QTExfRkRFVAkJCQkweDAxMDgKKyNkZWZpbmUgQVVEX1BMTF9DT04wCQkJCTB4MDExMAorI2RlZmluZSBBVURfUExMX0NPTjEJCQkJMHgwMTE0CisjZGVmaW5lIEFVRF9QTExfQ09OMgkJCQkweDAxMTgKKyNkZWZpbmUgQVVEX1BMTF9GREVUCQkJCTB4MDExYworI2RlZmluZSBNVVhfU0VMX1RPUF9QTEwwCQkJMHgwMjAwCisjZGVmaW5lIE1VWF9TRUxfVE9QX01GQwkJCQkweDAyMDQKKyNkZWZpbmUgTVVYX1NFTF9UT1BfRzJECQkJCTB4MDIwOAorI2RlZmluZSBNVVhfU0VMX1RPUF9HU0NMCQkJMHgwMjBjCisjZGVmaW5lIE1VWF9TRUxfVE9QX0lTUDEwCQkJMHgwMjE0CisjZGVmaW5lIE1VWF9TRUxfVE9QX0lTUDExCQkJMHgwMjE4CisjZGVmaW5lIE1VWF9TRUxfVE9QX0RJU1AwCQkJMHgwMjFjCisjZGVmaW5lIE1VWF9TRUxfVE9QX0RJU1AxCQkJMHgwMjIwCisjZGVmaW5lIE1VWF9TRUxfVE9QX0JVUwkJCQkweDAyMjQKKyNkZWZpbmUgTVVYX1NFTF9UT1BfUEVSSTAJCQkweDAyMjgKKyNkZWZpbmUgTVVYX1NFTF9UT1BfUEVSSTEJCQkweDAyMmMKKyNkZWZpbmUgTVVYX1NFTF9UT1BfRlNZUwkJCTB4MDIzMAorI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9QTEwwCQkJMHgwMzAwCisjZGVmaW5lIE1VWF9FTkFCTEVfVE9QX01GQwkJCTB4MDMwNAorI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9HMkQJCQkweDAzMDgKKyNkZWZpbmUgTVVYX0VOQUJMRV9UT1BfR1NDTAkJCTB4MDMwYworI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9JU1AxMAkJCTB4MDMxNAorI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9JU1AxMQkJCTB4MDMxOAorI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9ESVNQMAkJCTB4MDMxYworI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9ESVNQMQkJCTB4MDMyMAorI2RlZmluZSBNVVhfRU5BQkxFX1RPUF9CVVMJCQkweDAzMjQKKyNkZWZpbmUgTVVYX0VOQUJMRV9UT1BfUEVSSTAJCQkweDAzMjgKKyNkZWZpbmUgTVVYX0VOQUJMRV9UT1BfUEVSSTEJCQkweDAzMmMKKyNkZWZpbmUgTVVYX0VOQUJMRV9UT1BfRlNZUwkJCTB4MDMzMAorI2RlZmluZSBNVVhfU1RBVF9UT1BfUExMMAkJCTB4MDQwMAorI2RlZmluZSBNVVhfU1RBVF9UT1BfTUZDCQkJMHgwNDA0CisjZGVmaW5lIE1VWF9TVEFUX1RPUF9HMkQJCQkweDA0MDgKKyNkZWZpbmUgTVVYX1NUQVRfVE9QX0dTQ0wJCQkweDA0MGMKKyNkZWZpbmUgTVVYX1NUQVRfVE9QX0lTUDEwCQkJMHgwNDE0CisjZGVmaW5lIE1VWF9TVEFUX1RPUF9JU1AxMQkJCTB4MDQxOAorI2RlZmluZSBNVVhfU1RBVF9UT1BfRElTUDAJCQkweDA0MWMKKyNkZWZpbmUgTVVYX1NUQVRfVE9QX0RJU1AxCQkJMHgwNDIwCisjZGVmaW5lIE1VWF9TVEFUX1RPUF9CVVMJCQkweDA0MjQKKyNkZWZpbmUgTVVYX1NUQVRfVE9QX1BFUkkwCQkJMHgwNDI4CisjZGVmaW5lIE1VWF9TVEFUX1RPUF9QRVJJMQkJCTB4MDQyYworI2RlZmluZSBNVVhfU1RBVF9UT1BfRlNZUwkJCTB4MDQzMAorI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9QTEwwCQkJMHgwNTAwCisjZGVmaW5lIE1VWF9JR05PUkVfVE9QX01GQwkJCTB4MDUwNAorI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9HMkQJCQkweDA1MDgKKyNkZWZpbmUgTVVYX0lHTk9SRV9UT1BfR1NDTAkJCTB4MDUwYworI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9JU1AxMAkJCTB4MDUxNAorI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9JU1AxMQkJCTB4MDUxOAorI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9ESVNQMAkJCTB4MDUxYworI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9ESVNQMQkJCTB4MDUyMAorI2RlZmluZSBNVVhfSUdOT1JFX1RPUF9CVVMJCQkweDA1MjQKKyNkZWZpbmUgTVVYX0lHTk9SRV9UT1BfUEVSSTAJCQkweDA1MjgKKyNkZWZpbmUgTVVYX0lHTk9SRV9UT1BfUEVSSTEJCQkweDA1MmMKKyNkZWZpbmUgTVVYX0lHTk9SRV9UT1BfRlNZUwkJCTB4MDUzMAorI2RlZmluZSBESVZfVE9QX0cyRF9NRkMJCQkJMHgwNjAwCisjZGVmaW5lIERJVl9UT1BfR1NDTF9JU1AwCQkJMHgwNjA0CisjZGVmaW5lIERJVl9UT1BfSVNQMTAJCQkJMHgwNjA4CisjZGVmaW5lIERJVl9UT1BfSVNQMTEJCQkJMHgwNjBjCisjZGVmaW5lIERJVl9UT1BfRElTUAkJCQkweDA2MTAKKyNkZWZpbmUgRElWX1RPUF9CVVMJCQkJMHgwNjE0CisjZGVmaW5lIERJVl9UT1BfUEVSSTAJCQkJMHgwNjE4CisjZGVmaW5lIERJVl9UT1BfUEVSSTEJCQkJMHgwNjFjCisjZGVmaW5lIERJVl9UT1BfUEVSSTIJCQkJMHgwNjIwCisjZGVmaW5lIERJVl9UT1BfRlNZUzAJCQkJMHgwNjI0CisjZGVmaW5lIERJVl9UT1BfRlNZUzEJCQkJMHgwNjI4CisjZGVmaW5lIERJVl9UT1BfSFBNCQkJCTB4MDYyYworI2RlZmluZSBESVZfVE9QX1BMTF9GREVUCQkJMHgwNjMwCisjZGVmaW5lIERJVl9TVEFUX1RPUF9HMkRfTUZDCQkJMHgwNzAwCisjZGVmaW5lIERJVl9TVEFUX1RPUF9HU0NMX0lTUDAJCQkweDA3MDQKKyNkZWZpbmUgRElWX1NUQVRfVE9QX0lTUDEwCQkJMHgwNzA4CisjZGVmaW5lIERJVl9TVEFUX1RPUF9JU1AxMQkJCTB4MDcwYworI2RlZmluZSBESVZfU1RBVF9UT1BfRElTUAkJCTB4MDcxMAorI2RlZmluZSBESVZfU1RBVF9UT1BfQlVTCQkJMHgwNzE0CisjZGVmaW5lIERJVl9TVEFUX1RPUF9QRVJJMAkJCTB4MDcxOAorI2RlZmluZSBESVZfU1RBVF9UT1BfUEVSSTEJCQkweDA3MWMKKyNkZWZpbmUgRElWX1NUQVRfVE9QX1BFUkkyCQkJMHgwNzIwCisjZGVmaW5lIERJVl9TVEFUX1RPUF9GU1lTMAkJCTB4MDcyNAorI2RlZmluZSBESVZfU1RBVF9UT1BfRlNZUzEJCQkweDA3MjgKKyNkZWZpbmUgRElWX1NUQVRfVE9QX0hQTQkJCTB4MDcyYworI2RlZmluZSBESVZfU1RBVF9UT1BfUExMX0ZERVQJCQkweDA3MzAKKyNkZWZpbmUgRU5fQUNMS19UT1AJCQkJMHgwODAwCisjZGVmaW5lIEVOX1NDTEtfVE9QCQkJCTB4MGEwMAorI2RlZmluZSBFTl9JUF9UT1AJCQkJMHgwYjAwCisjZGVmaW5lIENMS09VVF9DTVVfVE9QCQkJCTB4MGMwMAorI2RlZmluZSBDTEtPVVRfQ01VX1RPUF9ESVZfU1RBVAkJCTB4MGMwNAorCisjZW5kaWYgLypfX0NMS19FWFlOT1M1MjYwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQxMC5jIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTA1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDEwLmMKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEF1dGhvcjogVGFyZWsgRGFraHJhbiA8dC5kYWtocmFuQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29tbW9uIENsb2NrIEZyYW1ld29yayBzdXBwb3J0IGZvciBFeHlub3M1NDEwIFNvQy4KKyovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9leHlub3M1NDEwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKworI2luY2x1ZGUgImNsay5oIgorCisjZGVmaW5lIEFQTExfTE9DSyAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBBUExMX0NPTjAgICAgICAgICAgICAgICAweDEwMAorI2RlZmluZSBDUExMX0xPQ0sgICAgICAgICAgICAgICAweDEwMDIwCisjZGVmaW5lIENQTExfQ09OMCAgICAgICAgICAgICAgIDB4MTAxMjAKKyNkZWZpbmUgTVBMTF9MT0NLICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIE1QTExfQ09OMCAgICAgICAgICAgICAgIDB4NDEwMAorI2RlZmluZSBCUExMX0xPQ0sgICAgICAgICAgICAgICAweDIwMDEwCisjZGVmaW5lIEJQTExfQ09OMCAgICAgICAgICAgICAgIDB4MjAxMTAKKyNkZWZpbmUgS1BMTF9MT0NLICAgICAgICAgICAgICAgMHgyODAwMAorI2RlZmluZSBLUExMX0NPTjAgICAgICAgICAgICAgICAweDI4MTAwCisKKyNkZWZpbmUgU1JDX0NQVQkJCTB4MjAwCisjZGVmaW5lIERJVl9DUFUwCQkweDUwMAorI2RlZmluZSBTUkNfQ1BFUkkxCQkweDQyMDQKKyNkZWZpbmUgRElWX1RPUDAJCTB4MTA1MTAKKyNkZWZpbmUgRElWX1RPUDEJCTB4MTA1MTQKKyNkZWZpbmUgRElWX0ZTWVMxCQkweDEwNTRjCisjZGVmaW5lIERJVl9GU1lTMgkJMHgxMDU1MAorI2RlZmluZSBESVZfUEVSSUMwCQkweDEwNTU4CisjZGVmaW5lIFNSQ19UT1AwCQkweDEwMjEwCisjZGVmaW5lIFNSQ19UT1AxCQkweDEwMjE0CisjZGVmaW5lIFNSQ19UT1AyCQkweDEwMjE4CisjZGVmaW5lIFNSQ19GU1lTCQkweDEwMjQ0CisjZGVmaW5lIFNSQ19QRVJJQzAJCTB4MTAyNTAKKyNkZWZpbmUgU1JDX01BU0tfRlNZUwkJMHgxMDM0MAorI2RlZmluZSBTUkNfTUFTS19QRVJJQzAJCTB4MTAzNTAKKyNkZWZpbmUgR0FURV9CVVNfRlNZUzAJCTB4MTA3NDAKKyNkZWZpbmUgR0FURV9JUF9GU1lTCQkweDEwOTQ0CisjZGVmaW5lIEdBVEVfSVBfUEVSSUMJCTB4MTA5NTAKKyNkZWZpbmUgR0FURV9JUF9QRVJJUwkJMHgxMDk2MAorI2RlZmluZSBTUkNfQ0RSRVgJCTB4MjAyMDAKKyNkZWZpbmUgU1JDX0tGQwkJCTB4MjgyMDAKKyNkZWZpbmUgRElWX0tGQzAJCTB4Mjg1MDAKKworLyogbGlzdCBvZiBQTExzICovCitlbnVtIGV4eW5vczU0MTBfcGxscyB7CisJYXBsbCwgY3BsbCwgbXBsbCwKKwlicGxsLCBrcGxsLAorCW5yX3BsbHMgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBQTExzICovCit9OworCisvKiBsaXN0IG9mIGFsbCBwYXJlbnQgY2xvY2tzICovCitQTkFNRShhcGxsX3ApCQk9IHsgImZpbl9wbGwiLCAiZm91dF9hcGxsIiwgfTsKK1BOQU1FKGJwbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X2JwbGwiLCB9OworUE5BTUUoY3BsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfY3BsbCIgfTsKK1BOQU1FKG1wbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X21wbGwiLCB9OworUE5BTUUoa3BsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfa3BsbCIsIH07CisKK1BOQU1FKG1vdXRfY3B1X3ApCT0geyAibW91dF9hcGxsIiwgInNjbGtfbXBsbCIsIH07CitQTkFNRShtb3V0X2tmY19wKQk9IHsgIm1vdXRfa3BsbCIsICJzY2xrX21wbGwiLCB9OworCitQTkFNRShtcGxsX3VzZXJfcCkJPSB7ICJmaW5fcGxsIiwgInNjbGtfbXBsbCIsIH07CitQTkFNRShicGxsX3VzZXJfcCkJPSB7ICJmaW5fcGxsIiwgInNjbGtfYnBsbCIsIH07CitQTkFNRShtcGxsX2JwbGxfcCkJPSB7ICJzY2xrX21wbGxfbXV4ZWQiLCAic2Nsa19icGxsX211eGVkIiwgfTsKKworUE5BTUUoZ3JvdXAyX3ApCQk9IHsgImZpbl9wbGwiLCAiZmluX3BsbCIsICJub25lIiwgIm5vbmUiLAorCQkJIm5vbmUiLCAibm9uZSIsICJzY2xrX21wbGxfYnBsbCIsCisJCQkgIm5vbmUiLCAibm9uZSIsICJzY2xrX2NwbGwiIH07CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgZXh5bm9zNTQxMF9tdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKDAsICJtb3V0X2FwbGwiLCBhcGxsX3AsIFNSQ19DUFUsIDAsIDEpLAorCU1VWCgwLCAibW91dF9jcHUiLCBtb3V0X2NwdV9wLCBTUkNfQ1BVLCAxNiwgMSksCisKKwlNVVgoMCwgIm1vdXRfa3BsbCIsIGtwbGxfcCwgU1JDX0tGQywgMCwgMSksCisJTVVYKDAsICJtb3V0X2tmYyIsIG1vdXRfa2ZjX3AsIFNSQ19LRkMsIDE2LCAxKSwKKworCU1VWCgwLCAic2Nsa19tcGxsIiwgbXBsbF9wLCBTUkNfQ1BFUkkxLCA4LCAxKSwKKwlNVVgoMCwgInNjbGtfbXBsbF9tdXhlZCIsIG1wbGxfdXNlcl9wLCBTUkNfVE9QMiwgMjAsIDEpLAorCisJTVVYKDAsICJzY2xrX2JwbGwiLCBicGxsX3AsIFNSQ19DRFJFWCwgMCwgMSksCisJTVVYKDAsICJzY2xrX2JwbGxfbXV4ZWQiLCBicGxsX3VzZXJfcCwgU1JDX1RPUDIsIDI0LCAxKSwKKworCU1VWCgwLCAic2Nsa19jcGxsIiwgY3BsbF9wLCBTUkNfVE9QMiwgOCwgMSksCisKKwlNVVgoMCwgInNjbGtfbXBsbF9icGxsIiwgbXBsbF9icGxsX3AsIFNSQ19UT1AxLCAyMCwgMSksCisKKwlNVVgoMCwgIm1vdXRfbW1jMCIsIGdyb3VwMl9wLCBTUkNfRlNZUywgMCwgNCksCisJTVVYKDAsICJtb3V0X21tYzEiLCBncm91cDJfcCwgU1JDX0ZTWVMsIDQsIDQpLAorCU1VWCgwLCAibW91dF9tbWMyIiwgZ3JvdXAyX3AsIFNSQ19GU1lTLCA4LCA0KSwKKworCU1VWCgwLCAibW91dF91YXJ0MCIsIGdyb3VwMl9wLCBTUkNfUEVSSUMwLCAwLCA0KSwKKwlNVVgoMCwgIm1vdXRfdWFydDEiLCBncm91cDJfcCwgU1JDX1BFUklDMCwgNCwgNCksCisJTVVYKDAsICJtb3V0X3VhcnQyIiwgZ3JvdXAyX3AsIFNSQ19QRVJJQzAsIDgsIDQpLAorCisJTVVYKDAsICJtb3V0X2FjbGsyMDAiLCBtcGxsX2JwbGxfcCwgU1JDX1RPUDAsIDEyLCAxKSwKKwlNVVgoMCwgIm1vdXRfYWNsazQwMCIsIG1wbGxfYnBsbF9wLCBTUkNfVE9QMCwgMjAsIDEpLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBleHlub3M1NDEwX2Rpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlESVYoMCwgImRpdl9hcm0iLCAibW91dF9jcHUiLCBESVZfQ1BVMCwgMCwgMyksCisJRElWKDAsICJkaXZfYXJtMiIsICJkaXZfYXJtIiwgRElWX0NQVTAsIDI4LCAzKSwKKworCURJVigwLCAiZGl2X2FjcCIsICJkaXZfYXJtMiIsIERJVl9DUFUwLCA4LCAzKSwKKwlESVYoMCwgImRpdl9jcHVkIiwgImRpdl9hcm0yIiwgRElWX0NQVTAsIDQsIDMpLAorCURJVigwLCAiZGl2X2F0YiIsICJkaXZfYXJtMiIsIERJVl9DUFUwLCAxNiwgMyksCisJRElWKDAsICJwY2xrX2RiZyIsICJkaXZfYXJtMiIsIERJVl9DUFUwLCAyMCwgMyksCisKKwlESVYoMCwgImRpdl9rZmMiLCAibW91dF9rZmMiLCBESVZfS0ZDMCwgMCwgMyksCisJRElWKDAsICJkaXZfYWNsayIsICJkaXZfa2ZjIiwgRElWX0tGQzAsIDQsIDMpLAorCURJVigwLCAiZGl2X3BjbGsiLCAiZGl2X2tmYyIsIERJVl9LRkMwLCAyMCwgMyksCisKKwlESVYoMCwgImFjbGs2Nl9wcmUiLCAic2Nsa19tcGxsX211eGVkIiwgRElWX1RPUDEsIDI0LCAzKSwKKwlESVYoMCwgImFjbGs2NiIsICJhY2xrNjZfcHJlIiwgRElWX1RPUDAsIDAsIDMpLAorCisJRElWKDAsICJkaXZfbW1jMCIsICJtb3V0X21tYzAiLCBESVZfRlNZUzEsIDAsIDQpLAorCURJVigwLCAiZGl2X21tYzEiLCAibW91dF9tbWMxIiwgRElWX0ZTWVMxLCAxNiwgNCksCisJRElWKDAsICJkaXZfbW1jMiIsICJtb3V0X21tYzIiLCBESVZfRlNZUzIsIDAsIDQpLAorCisJRElWX0YoMCwgImRpdl9tbWNfcHJlMCIsICJkaXZfbW1jMCIsCisJCQlESVZfRlNZUzEsIDgsIDgsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCURJVl9GKDAsICJkaXZfbW1jX3ByZTEiLCAiZGl2X21tYzEiLAorCQkJRElWX0ZTWVMxLCAyNCwgOCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJRElWX0YoMCwgImRpdl9tbWNfcHJlMiIsICJkaXZfbW1jMiIsCisJCQlESVZfRlNZUzIsIDgsIDgsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCisJRElWKDAsICJkaXZfdWFydDAiLCAibW91dF91YXJ0MCIsIERJVl9QRVJJQzAsIDAsIDQpLAorCURJVigwLCAiZGl2X3VhcnQxIiwgIm1vdXRfdWFydDEiLCBESVZfUEVSSUMwLCA0LCA0KSwKKwlESVYoMCwgImRpdl91YXJ0MiIsICJtb3V0X3VhcnQyIiwgRElWX1BFUklDMCwgOCwgNCksCisJRElWKDAsICJkaXZfdWFydDMiLCAibW91dF91YXJ0MyIsIERJVl9QRVJJQzAsIDEyLCA0KSwKKworCURJVigwLCAiYWNsazIwMCIsICJtb3V0X2FjbGsyMDAiLCBESVZfVE9QMCwgMTIsIDMpLAorCURJVigwLCAiYWNsazQwMCIsICJtb3V0X2FjbGs0MDAiLCBESVZfVE9QMCwgMjQsIDMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgZXh5bm9zNTQxMF9nYXRlX2Nsa3NbXSBfX2luaXRkYXRhID0geworCUdBVEUoQ0xLX01DVCwgIm1jdCIsICJhY2xrNjYiLCBHQVRFX0lQX1BFUklTLCAxOCwgMCwgMCksCisKKwlHQVRFKENMS19TQ0xLX01NQzAsICJzY2xrX21tYzAiLCAiZGl2X21tY19wcmUwIiwKKwkJCVNSQ19NQVNLX0ZTWVMsIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoQ0xLX1NDTEtfTU1DMSwgInNjbGtfbW1jMSIsICJkaXZfbW1jX3ByZTEiLAorCQkJU1JDX01BU0tfRlNZUywgNCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19NTUMyLCAic2Nsa19tbWMyIiwgImRpdl9tbWNfcHJlMiIsCisJCQlTUkNfTUFTS19GU1lTLCA4LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKworCUdBVEUoQ0xLX01NQzAsICJzZG1tYzAiLCAiYWNsazIwMCIsIEdBVEVfQlVTX0ZTWVMwLCAxMiwgMCwgMCksCisJR0FURShDTEtfTU1DMSwgInNkbW1jMSIsICJhY2xrMjAwIiwgR0FURV9CVVNfRlNZUzAsIDEzLCAwLCAwKSwKKwlHQVRFKENMS19NTUMyLCAic2RtbWMyIiwgImFjbGsyMDAiLCBHQVRFX0JVU19GU1lTMCwgMTQsIDAsIDApLAorCisJR0FURShDTEtfVUFSVDAsICJ1YXJ0MCIsICJhY2xrNjYiLCBHQVRFX0lQX1BFUklDLCAwLCAwLCAwKSwKKwlHQVRFKENMS19VQVJUMSwgInVhcnQxIiwgImFjbGs2NiIsIEdBVEVfSVBfUEVSSUMsIDEsIDAsIDApLAorCUdBVEUoQ0xLX1VBUlQyLCAidWFydDIiLCAiYWNsazY2IiwgR0FURV9JUF9QRVJJQywgMiwgMCwgMCksCisKKwlHQVRFKENMS19TQ0xLX1VBUlQwLCAic2Nsa191YXJ0MCIsICJkaXZfdWFydDAiLAorCQkJU1JDX01BU0tfUEVSSUMwLCAwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX1VBUlQxLCAic2Nsa191YXJ0MSIsICJkaXZfdWFydDEiLAorCQkJU1JDX01BU0tfUEVSSUMwLCA0LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX1VBUlQyLCAic2Nsa191YXJ0MiIsICJkaXZfdWFydDIiLAorCQkJU1JDX01BU0tfUEVSSUMwLCA4LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfY2xvY2sgZXh5bm9zNTQxMF9wbGxzW25yX3BsbHNdIF9faW5pdGRhdGEgPSB7CisJW2FwbGxdID0gUExMKHBsbF8zNXh4LCBDTEtfRk9VVF9BUExMLCAiZm91dF9hcGxsIiwgImZpbl9wbGwiLCBBUExMX0xPQ0ssCisJCUFQTExfQ09OMCwgTlVMTCksCisJW2NwbGxdID0gUExMKHBsbF8zNXh4LCBDTEtfRk9VVF9DUExMLCAiZm91dF9jcGxsIiwgImZpbl9wbGwiLCBDUExMX0xPQ0ssCisJCUNQTExfQ09OMCwgTlVMTCksCisJW21wbGxdID0gUExMKHBsbF8zNXh4LCBDTEtfRk9VVF9NUExMLCAiZm91dF9tcGxsIiwgImZpbl9wbGwiLCBNUExMX0xPQ0ssCisJCU1QTExfQ09OMCwgTlVMTCksCisJW2JwbGxdID0gUExMKHBsbF8zNXh4LCBDTEtfRk9VVF9CUExMLCAiZm91dF9icGxsIiwgImZpbl9wbGwiLCBCUExMX0xPQ0ssCisJCUJQTExfQ09OMCwgTlVMTCksCisJW2twbGxdID0gUExMKHBsbF8zNXh4LCBDTEtfRk9VVF9LUExMLCAiZm91dF9rcGxsIiwgImZpbl9wbGwiLCBLUExMX0xPQ0ssCisJCUtQTExfQ09OMCwgTlVMTCksCit9OworCisvKiByZWdpc3RlciBleHlub3M1NDEwIGNsb2NrcyAqLworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczU0MTBfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOworCisJcmVnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFyZWdfYmFzZSkKKwkJcGFuaWMoIiVzOiBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOworCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIENMS19OUl9DTEtTKTsKKworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChjdHgsIGV4eW5vczU0MTBfcGxscywKKwkJCUFSUkFZX1NJWkUoZXh5bm9zNTQxMF9wbGxzKSwgcmVnX2Jhc2UpOworCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgZXh5bm9zNTQxMF9tdXhfY2xrcywKKwkJCUFSUkFZX1NJWkUoZXh5bm9zNTQxMF9tdXhfY2xrcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczU0MTBfZGl2X2Nsa3MsCisJCQlBUlJBWV9TSVpFKGV4eW5vczU0MTBfZGl2X2Nsa3MpKTsKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGN0eCwgZXh5bm9zNTQxMF9nYXRlX2Nsa3MsCisJCQlBUlJBWV9TSVpFKGV4eW5vczU0MTBfZ2F0ZV9jbGtzKSk7CisKKwlwcl9kZWJ1ZygiRXh5bm9zNTQxMDogY2xvY2sgc2V0dXAgY29tcGxldGVkLlxuIik7Cit9CitDTEtfT0ZfREVDTEFSRShleHlub3M1NDEwX2NsaywgInNhbXN1bmcsZXh5bm9zNTQxMC1jbG9jayIsIGV4eW5vczU0MTBfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQyMC5jIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQyMC5jCmluZGV4IDYwYjI2ODEuLjlkN2Q3ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0MjAuYworKysgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDIwLmMKQEAgLTI3LDE4ICsyNywyNCBAQAogI2RlZmluZSBESVZfQ1BVMQkJMHg1MDQKICNkZWZpbmUgR0FURV9CVVNfQ1BVCQkweDcwMAogI2RlZmluZSBHQVRFX1NDTEtfQ1BVCQkweDgwMAorI2RlZmluZSBDTEtPVVRfQ01VX0NQVQkJMHhhMDAKKyNkZWZpbmUgR0FURV9JUF9HMkQJCTB4ODgwMAogI2RlZmluZSBDUExMX0xPQ0sJCTB4MTAwMjAKICNkZWZpbmUgRFBMTF9MT0NLCQkweDEwMDMwCiAjZGVmaW5lIEVQTExfTE9DSwkJMHgxMDA0MAogI2RlZmluZSBSUExMX0xPQ0sJCTB4MTAwNTAKICNkZWZpbmUgSVBMTF9MT0NLCQkweDEwMDYwCiAjZGVmaW5lIFNQTExfTE9DSwkJMHgxMDA3MAotI2RlZmluZSBWUExMX0xPQ0sJCTB4MTAwNzAKKyNkZWZpbmUgVlBMTF9MT0NLCQkweDEwMDgwCiAjZGVmaW5lIE1QTExfTE9DSwkJMHgxMDA5MAogI2RlZmluZSBDUExMX0NPTjAJCTB4MTAxMjAKICNkZWZpbmUgRFBMTF9DT04wCQkweDEwMTI4CiAjZGVmaW5lIEVQTExfQ09OMAkJMHgxMDEzMAorI2RlZmluZSBFUExMX0NPTjEJCTB4MTAxMzQKKyNkZWZpbmUgRVBMTF9DT04yCQkweDEwMTM4CiAjZGVmaW5lIFJQTExfQ09OMAkJMHgxMDE0MAorI2RlZmluZSBSUExMX0NPTjEJCTB4MTAxNDQKKyNkZWZpbmUgUlBMTF9DT04yCQkweDEwMTQ4CiAjZGVmaW5lIElQTExfQ09OMAkJMHgxMDE1MAogI2RlZmluZSBTUExMX0NPTjAJCTB4MTAxNjAKICNkZWZpbmUgVlBMTF9DT04wCQkweDEwMTcwCkBAIC01MSwyMSArNTcsMzEgQEAKICNkZWZpbmUgU1JDX1RPUDUJCTB4MTAyMTQKICNkZWZpbmUgU1JDX1RPUDYJCTB4MTAyMTgKICNkZWZpbmUgU1JDX1RPUDcJCTB4MTAyMWMKKyNkZWZpbmUgU1JDX1RPUDgJCTB4MTAyMjAgLyogNTgwMCBzcGVjaWZpYyAqLworI2RlZmluZSBTUkNfVE9QOQkJMHgxMDIyNCAvKiA1ODAwIHNwZWNpZmljICovCiAjZGVmaW5lIFNSQ19ESVNQMTAJCTB4MTAyMmMKICNkZWZpbmUgU1JDX01BVQkJCTB4MTAyNDAKICNkZWZpbmUgU1JDX0ZTWVMJCTB4MTAyNDQKICNkZWZpbmUgU1JDX1BFUklDMAkJMHgxMDI1MAogI2RlZmluZSBTUkNfUEVSSUMxCQkweDEwMjU0CisjZGVmaW5lIFNSQ19JU1AJCQkweDEwMjcwCisjZGVmaW5lIFNSQ19DQU0JCQkweDEwMjc0IC8qIDU4MDAgc3BlY2lmaWMgKi8KICNkZWZpbmUgU1JDX1RPUDEwCQkweDEwMjgwCiAjZGVmaW5lIFNSQ19UT1AxMQkJMHgxMDI4NAogI2RlZmluZSBTUkNfVE9QMTIJCTB4MTAyODgKLSNkZWZpbmUJU1JDX01BU0tfRElTUDEwCQkweDEwMzJjCisjZGVmaW5lIFNSQ19UT1AxMwkJMHgxMDI4YyAvKiA1ODAwIHNwZWNpZmljICovCisjZGVmaW5lIFNSQ19NQVNLX1RPUDIJCTB4MTAzMDgKKyNkZWZpbmUgU1JDX01BU0tfVE9QNwkJMHgxMDMxYworI2RlZmluZSBTUkNfTUFTS19ESVNQMTAJCTB4MTAzMmMKKyNkZWZpbmUgU1JDX01BU0tfTUFVCQkweDEwMzM0CiAjZGVmaW5lIFNSQ19NQVNLX0ZTWVMJCTB4MTAzNDAKICNkZWZpbmUgU1JDX01BU0tfUEVSSUMwCQkweDEwMzUwCiAjZGVmaW5lIFNSQ19NQVNLX1BFUklDMQkJMHgxMDM1NAogI2RlZmluZSBESVZfVE9QMAkJMHgxMDUwMAogI2RlZmluZSBESVZfVE9QMQkJMHgxMDUwNAogI2RlZmluZSBESVZfVE9QMgkJMHgxMDUwOAorI2RlZmluZSBESVZfVE9QOAkJMHgxMDUyMCAvKiA1ODAwIHNwZWNpZmljICovCisjZGVmaW5lIERJVl9UT1A5CQkweDEwNTI0IC8qIDU4MDAgc3BlY2lmaWMgKi8KICNkZWZpbmUgRElWX0RJU1AxMAkJMHgxMDUyYwogI2RlZmluZSBESVZfTUFVCQkJMHgxMDU0NAogI2RlZmluZSBESVZfRlNZUzAJCTB4MTA1NDgKQEAgLTc2LDU0ICs5Miw4MiBAQAogI2RlZmluZSBESVZfUEVSSUMyCQkweDEwNTYwCiAjZGVmaW5lIERJVl9QRVJJQzMJCTB4MTA1NjQKICNkZWZpbmUgRElWX1BFUklDNAkJMHgxMDU2OAorI2RlZmluZSBESVZfQ0FNCQkJMHgxMDU3NCAvKiA1ODAwIHNwZWNpZmljICovCisjZGVmaW5lIFNDTEtfRElWX0lTUDAJCTB4MTA1ODAKKyNkZWZpbmUgU0NMS19ESVZfSVNQMQkJMHgxMDU4NAorI2RlZmluZSBESVYyX1JBVElPMAkJMHgxMDU5MAorI2RlZmluZSBESVY0X1JBVElPCQkweDEwNWEwCiAjZGVmaW5lIEdBVEVfQlVTX1RPUAkJMHgxMDcwMAorI2RlZmluZSBHQVRFX0JVU19HRU4JCTB4MTA3M2MKICNkZWZpbmUgR0FURV9CVVNfRlNZUzAJCTB4MTA3NDAKKyNkZWZpbmUgR0FURV9CVVNfRlNZUzIJCTB4MTA3NDgKICNkZWZpbmUgR0FURV9CVVNfUEVSSUMJCTB4MTA3NTAKICNkZWZpbmUgR0FURV9CVVNfUEVSSUMxCQkweDEwNzU0CiAjZGVmaW5lIEdBVEVfQlVTX1BFUklTMAkJMHgxMDc2MAogI2RlZmluZSBHQVRFX0JVU19QRVJJUzEJCTB4MTA3NjQKKyNkZWZpbmUgR0FURV9CVVNfTk9DCQkweDEwNzcwCisjZGVmaW5lIEdBVEVfVE9QX1NDTEtfSVNQCTB4MTA4NzAKICNkZWZpbmUgR0FURV9JUF9HU0NMMAkJMHgxMDkxMAogI2RlZmluZSBHQVRFX0lQX0dTQ0wxCQkweDEwOTIwCisjZGVmaW5lIEdBVEVfSVBfQ0FNCQkweDEwOTI0IC8qIDU4MDAgc3BlY2lmaWMgKi8KICNkZWZpbmUgR0FURV9JUF9NRkMJCTB4MTA5MmMKICNkZWZpbmUgR0FURV9JUF9ESVNQMQkJMHgxMDkyOAogI2RlZmluZSBHQVRFX0lQX0czRAkJMHgxMDkzMAogI2RlZmluZSBHQVRFX0lQX0dFTgkJMHgxMDkzNAorI2RlZmluZSBHQVRFX0lQX0ZTWVMJCTB4MTA5NDQKKyNkZWZpbmUgR0FURV9JUF9QRVJJQwkJMHgxMDk1MAorI2RlZmluZSBHQVRFX0lQX1BFUklTCQkweDEwOTYwCiAjZGVmaW5lIEdBVEVfSVBfTVNDTAkJMHgxMDk3MAogI2RlZmluZSBHQVRFX1RPUF9TQ0xLX0dTQ0wJMHgxMDgyMAogI2RlZmluZSBHQVRFX1RPUF9TQ0xLX0RJU1AxCTB4MTA4MjgKICNkZWZpbmUgR0FURV9UT1BfU0NMS19NQVUJMHgxMDgzYwogI2RlZmluZSBHQVRFX1RPUF9TQ0xLX0ZTWVMJMHgxMDg0MAogI2RlZmluZSBHQVRFX1RPUF9TQ0xLX1BFUklDCTB4MTA4NTAKKyNkZWZpbmUgVE9QX1NQQVJFMgkJMHgxMGIwOAogI2RlZmluZSBCUExMX0xPQ0sJCTB4MjAwMTAKICNkZWZpbmUgQlBMTF9DT04wCQkweDIwMTEwCi0jZGVmaW5lIFNSQ19DRFJFWAkJMHgyMDIwMAogI2RlZmluZSBLUExMX0xPQ0sJCTB4MjgwMDAKICNkZWZpbmUgS1BMTF9DT04wCQkweDI4MTAwCiAjZGVmaW5lIFNSQ19LRkMJCQkweDI4MjAwCiAjZGVmaW5lIERJVl9LRkMwCQkweDI4NTAwCiAKKy8qIEV4eW5vczV4IFNvQyB0eXBlICovCitlbnVtIGV4eW5vczV4X3NvYyB7CisJRVhZTk9TNTQyMCwKKwlFWFlOT1M1ODAwLAorfTsKKwogLyogbGlzdCBvZiBQTExzICovCi1lbnVtIGV4eW5vczU0MjBfcGxscyB7CitlbnVtIGV4eW5vczV4X3BsbHMgewogCWFwbGwsIGNwbGwsIGRwbGwsIGVwbGwsIHJwbGwsIGlwbGwsIHNwbGwsIHZwbGwsIG1wbGwsCiAJYnBsbCwga3BsbCwKIAlucl9wbGxzCQkJLyogbnVtYmVyIG9mIFBMTHMgKi8KIH07CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnJlZ19iYXNlOworc3RhdGljIGVudW0gZXh5bm9zNXhfc29jIGV4eW5vczV4X3NvYzsKIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAotc3RhdGljIHN0cnVjdCBzYW1zdW5nX2Nsa19yZWdfZHVtcCAqZXh5bm9zNTQyMF9zYXZlOworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2Nsa19yZWdfZHVtcCAqZXh5bm9zNXhfc2F2ZTsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcmVnX2R1bXAgKmV4eW5vczU4MDBfc2F2ZTsKIAogLyoKICAqIGxpc3Qgb2YgY29udHJvbGxlciByZWdpc3RlcnMgdG8gYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGR1cmluZyBhCiAgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh5bm9zNTQyMF9jbGtfcmVnc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHlub3M1eF9jbGtfcmVnc1tdIF9faW5pdGRhdGEgPSB7CiAJU1JDX0NQVSwKIAlESVZfQ1BVMCwKIAlESVZfQ1BVMSwKIAlHQVRFX0JVU19DUFUsCiAJR0FURV9TQ0xLX0NQVSwKKwlDTEtPVVRfQ01VX0NQVSwKKwlFUExMX0NPTjAsCisJRVBMTF9DT04xLAorCUVQTExfQ09OMiwKKwlSUExMX0NPTjAsCisJUlBMTF9DT04xLAorCVJQTExfQ09OMiwKIAlTUkNfVE9QMCwKIAlTUkNfVE9QMSwKIAlTUkNfVE9QMiwKQEAgLTE0MCwxMCArMTg0LDEzIEBACiAJU1JDX1RPUDEwLAogCVNSQ19UT1AxMSwKIAlTUkNfVE9QMTIsCisJU1JDX01BU0tfVE9QMiwKKwlTUkNfTUFTS19UT1A3LAogCVNSQ19NQVNLX0RJU1AxMCwKIAlTUkNfTUFTS19GU1lTLAogCVNSQ19NQVNLX1BFUklDMCwKIAlTUkNfTUFTS19QRVJJQzEsCisJU1JDX0lTUCwKIAlESVZfVE9QMCwKIAlESVZfVE9QMSwKIAlESVZfVE9QMiwKQEAgLTE1Nyw0MSArMjA0LDcxIEBACiAJRElWX1BFUklDMiwKIAlESVZfUEVSSUMzLAogCURJVl9QRVJJQzQsCisJU0NMS19ESVZfSVNQMCwKKwlTQ0xLX0RJVl9JU1AxLAorCURJVjJfUkFUSU8wLAorCURJVjRfUkFUSU8sCiAJR0FURV9CVVNfVE9QLAorCUdBVEVfQlVTX0dFTiwKIAlHQVRFX0JVU19GU1lTMCwKKwlHQVRFX0JVU19GU1lTMiwKIAlHQVRFX0JVU19QRVJJQywKIAlHQVRFX0JVU19QRVJJQzEsCiAJR0FURV9CVVNfUEVSSVMwLAogCUdBVEVfQlVTX1BFUklTMSwKKwlHQVRFX0JVU19OT0MsCisJR0FURV9UT1BfU0NMS19JU1AsCiAJR0FURV9JUF9HU0NMMCwKIAlHQVRFX0lQX0dTQ0wxLAogCUdBVEVfSVBfTUZDLAogCUdBVEVfSVBfRElTUDEsCiAJR0FURV9JUF9HM0QsCiAJR0FURV9JUF9HRU4sCisJR0FURV9JUF9GU1lTLAorCUdBVEVfSVBfUEVSSUMsCisJR0FURV9JUF9QRVJJUywKIAlHQVRFX0lQX01TQ0wsCiAJR0FURV9UT1BfU0NMS19HU0NMLAogCUdBVEVfVE9QX1NDTEtfRElTUDEsCiAJR0FURV9UT1BfU0NMS19NQVUsCiAJR0FURV9UT1BfU0NMS19GU1lTLAogCUdBVEVfVE9QX1NDTEtfUEVSSUMsCi0JU1JDX0NEUkVYLAorCVRPUF9TUEFSRTIsCiAJU1JDX0tGQywKIAlESVZfS0ZDMCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4eW5vczU4MDBfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCVNSQ19UT1A4LAorCVNSQ19UT1A5LAorCVNSQ19DQU0sCisJU1JDX1RPUDEsCisJRElWX1RPUDgsCisJRElWX1RPUDksCisJRElWX0NBTSwKKwlHQVRFX0lQX0NBTSwKK307CisKIHN0YXRpYyBpbnQgZXh5bm9zNTQyMF9jbGtfc3VzcGVuZCh2b2lkKQogewotCXNhbXN1bmdfY2xrX3NhdmUocmVnX2Jhc2UsIGV4eW5vczU0MjBfc2F2ZSwKLQkJCQlBUlJBWV9TSVpFKGV4eW5vczU0MjBfY2xrX3JlZ3MpKTsKKwlzYW1zdW5nX2Nsa19zYXZlKHJlZ19iYXNlLCBleHlub3M1eF9zYXZlLAorCQkJCUFSUkFZX1NJWkUoZXh5bm9zNXhfY2xrX3JlZ3MpKTsKKworCWlmIChleHlub3M1eF9zb2MgPT0gRVhZTk9TNTgwMCkKKwkJc2Ftc3VuZ19jbGtfc2F2ZShyZWdfYmFzZSwgZXh5bm9zNTgwMF9zYXZlLAorCQkJCUFSUkFZX1NJWkUoZXh5bm9zNTgwMF9jbGtfcmVncykpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGV4eW5vczU0MjBfY2xrX3Jlc3VtZSh2b2lkKQogewotCXNhbXN1bmdfY2xrX3Jlc3RvcmUocmVnX2Jhc2UsIGV4eW5vczU0MjBfc2F2ZSwKLQkJCQlBUlJBWV9TSVpFKGV4eW5vczU0MjBfY2xrX3JlZ3MpKTsKKwlzYW1zdW5nX2Nsa19yZXN0b3JlKHJlZ19iYXNlLCBleHlub3M1eF9zYXZlLAorCQkJCUFSUkFZX1NJWkUoZXh5bm9zNXhfY2xrX3JlZ3MpKTsKKworCWlmIChleHlub3M1eF9zb2MgPT0gRVhZTk9TNTgwMCkKKwkJc2Ftc3VuZ19jbGtfcmVzdG9yZShyZWdfYmFzZSwgZXh5bm9zNTgwMF9zYXZlLAorCQkJCUFSUkFZX1NJWkUoZXh5bm9zNTgwMF9jbGtfcmVncykpOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vczU0MjBfY2xrX3N5c2NvcmVfb3BzID0gewpAQCAtMjAxLDEwOCArMjc4LDE4MyBAQAogCiBzdGF0aWMgdm9pZCBleHlub3M1NDIwX2Nsa19zbGVlcF9pbml0KHZvaWQpCiB7Ci0JZXh5bm9zNTQyMF9zYXZlID0gc2Ftc3VuZ19jbGtfYWxsb2NfcmVnX2R1bXAoZXh5bm9zNTQyMF9jbGtfcmVncywKLQkJCQkJQVJSQVlfU0laRShleHlub3M1NDIwX2Nsa19yZWdzKSk7Ci0JaWYgKCFleHlub3M1NDIwX3NhdmUpIHsKKwlleHlub3M1eF9zYXZlID0gc2Ftc3VuZ19jbGtfYWxsb2NfcmVnX2R1bXAoZXh5bm9zNXhfY2xrX3JlZ3MsCisJCQkJCUFSUkFZX1NJWkUoZXh5bm9zNXhfY2xrX3JlZ3MpKTsKKwlpZiAoIWV4eW5vczV4X3NhdmUpIHsKIAkJcHJfd2FybigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBzbGVlcCBzYXZlIGRhdGEsIG5vIHNsZWVwIHN1cHBvcnQhXG4iLAogCQkJX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCisJaWYgKGV4eW5vczV4X3NvYyA9PSBFWFlOT1M1ODAwKSB7CisJCWV4eW5vczU4MDBfc2F2ZSA9CisJCQlzYW1zdW5nX2Nsa19hbGxvY19yZWdfZHVtcChleHlub3M1ODAwX2Nsa19yZWdzLAorCQkJCQlBUlJBWV9TSVpFKGV4eW5vczU4MDBfY2xrX3JlZ3MpKTsKKwkJaWYgKCFleHlub3M1ODAwX3NhdmUpCisJCQlnb3RvIGVycl9zb2M7CisJfQorCiAJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vczU0MjBfY2xrX3N5c2NvcmVfb3BzKTsKKwlyZXR1cm47CitlcnJfc29jOgorCWtmcmVlKGV4eW5vczV4X3NhdmUpOworCXByX3dhcm4oIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgc2xlZXAgc2F2ZSBkYXRhLCBubyBzbGVlcCBzdXBwb3J0IVxuIiwKKwkJX19mdW5jX18pOworCXJldHVybjsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBleHlub3M1NDIwX2Nsa19zbGVlcF9pbml0KHZvaWQpIHt9CiAjZW5kaWYKIAogLyogbGlzdCBvZiBhbGwgcGFyZW50IGNsb2NrcyAqLwotUE5BTUUobXNwbGxfY3B1X3ApCT0geyAic2Nsa19jcGxsIiwgInNjbGtfZHBsbCIsCi0JCQkJInNjbGtfbXBsbCIsICJzY2xrX3NwbGwiIH07Ci1QTkFNRShjcHVfcCkJCT0geyAibW91dF9hcGxsIiAsICJtb3V0X21zcGxsX2NwdSIgfTsKLVBOQU1FKGtmY19wKQkJPSB7ICJtb3V0X2twbGwiICwgIm1vdXRfbXNwbGxfa2ZjIiB9OwotUE5BTUUoYXBsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfYXBsbCIsIH07Ci1QTkFNRShicGxsX3ApCQk9IHsgImZpbl9wbGwiLCAiZm91dF9icGxsIiwgfTsKLVBOQU1FKGNwbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X2NwbGwiLCB9OwotUE5BTUUoZHBsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfZHBsbCIsIH07Ci1QTkFNRShlcGxsX3ApCQk9IHsgImZpbl9wbGwiLCAiZm91dF9lcGxsIiwgfTsKLVBOQU1FKGlwbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X2lwbGwiLCB9OwotUE5BTUUoa3BsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfa3BsbCIsIH07Ci1QTkFNRShtcGxsX3ApCQk9IHsgImZpbl9wbGwiLCAiZm91dF9tcGxsIiwgfTsKLVBOQU1FKHJwbGxfcCkJCT0geyAiZmluX3BsbCIsICJmb3V0X3JwbGwiLCB9OwotUE5BTUUoc3BsbF9wKQkJPSB7ICJmaW5fcGxsIiwgImZvdXRfc3BsbCIsIH07Ci1QTkFNRSh2cGxsX3ApCQk9IHsgImZpbl9wbGwiLCAiZm91dF92cGxsIiwgfTsKK1BOQU1FKG1vdXRfbXNwbGxfY3B1X3ApID0geyJtb3V0X3NjbGtfY3BsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJIm1vdXRfc2Nsa19tcGxsIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X2NwdV9wKSA9IHsibW91dF9hcGxsIiAsICJtb3V0X21zcGxsX2NwdSJ9OworUE5BTUUobW91dF9rZmNfcCkgPSB7Im1vdXRfa3BsbCIgLCAibW91dF9tc3BsbF9rZmMifTsKK1BOQU1FKG1vdXRfYXBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2FwbGwifTsKK1BOQU1FKG1vdXRfYnBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2JwbGwifTsKK1BOQU1FKG1vdXRfY3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2NwbGwifTsKK1BOQU1FKG1vdXRfZHBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2RwbGwifTsKK1BOQU1FKG1vdXRfZXBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2VwbGwifTsKK1BOQU1FKG1vdXRfaXBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2lwbGwifTsKK1BOQU1FKG1vdXRfa3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X2twbGwifTsKK1BOQU1FKG1vdXRfbXBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X21wbGwifTsKK1BOQU1FKG1vdXRfcnBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X3JwbGwifTsKK1BOQU1FKG1vdXRfc3BsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X3NwbGwifTsKK1BOQU1FKG1vdXRfdnBsbF9wKSA9IHsiZmluX3BsbCIsICJmb3V0X3ZwbGwifTsKIAotUE5BTUUoZ3JvdXAxX3ApCQk9IHsgInNjbGtfY3BsbCIsICJzY2xrX2RwbGwiLCAic2Nsa19tcGxsIiB9OwotUE5BTUUoZ3JvdXAyX3ApCQk9IHsgImZpbl9wbGwiLCAic2Nsa19jcGxsIiwgInNjbGtfZHBsbCIsICJzY2xrX21wbGwiLAotCQkJICAic2Nsa19zcGxsIiwgInNjbGtfaXBsbCIsICJzY2xrX2VwbGwiLCAic2Nsa19ycGxsIiB9OwotUE5BTUUoZ3JvdXAzX3ApCQk9IHsgInNjbGtfcnBsbCIsICJzY2xrX3NwbGwiIH07Ci1QTkFNRShncm91cDRfcCkJCT0geyAic2Nsa19pcGxsIiwgInNjbGtfZHBsbCIsICJzY2xrX21wbGwiIH07Ci1QTkFNRShncm91cDVfcCkJCT0geyAic2Nsa192cGxsIiwgInNjbGtfZHBsbCIgfTsKK1BOQU1FKG1vdXRfZ3JvdXAxX3ApID0geyJtb3V0X3NjbGtfY3BsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJCSJtb3V0X3NjbGtfbXBsbCJ9OworUE5BTUUobW91dF9ncm91cDJfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zY2xrX2NwbGwiLAorCQkJIm1vdXRfc2Nsa19kcGxsIiwgIm1vdXRfc2Nsa19tcGxsIiwgIm1vdXRfc2Nsa19zcGxsIiwKKwkJCSJtb3V0X3NjbGtfaXBsbCIsICJtb3V0X3NjbGtfZXBsbCIsICJtb3V0X3NjbGtfcnBsbCJ9OworUE5BTUUobW91dF9ncm91cDNfcCkgPSB7Im1vdXRfc2Nsa19ycGxsIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X2dyb3VwNF9wKSA9IHsibW91dF9zY2xrX2lwbGwiLCAibW91dF9zY2xrX2RwbGwiLCAibW91dF9zY2xrX21wbGwifTsKK1BOQU1FKG1vdXRfZ3JvdXA1X3ApID0geyJtb3V0X3NjbGtfdnBsbCIsICJtb3V0X3NjbGtfZHBsbCJ9OwogCi1QTkFNRShzd19hY2xrNjZfcCkJPSB7ICJkb3V0X2FjbGs2NiIsICJzY2xrX3NwbGwiIH07Ci1QTkFNRShhY2xrNjZfcGVyaWNfcCkJPSB7ICJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazY2IiB9OworUE5BTUUobW91dF9maW1kMV9maW5hbF9wKSA9IHsibW91dF9maW1kMSIsICJtb3V0X2ZpbWQxX29wdCJ9OworUE5BTUUobW91dF9zd19hY2xrNjZfcCkJPSB7ImRvdXRfYWNsazY2IiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazY2X3BlcmljX3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGs2NiJ9OworUE5BTUUobW91dF91c2VyX3BjbGs2Nl9ncGlvX3ApID0geyJtb3V0X3N3X2FjbGs2NiIsICJmZl9zd19hY2xrNjYifTsKIAotUE5BTUUoc3dfYWNsazIwMF9mc3lzX3ApID0geyAiZG91dF9hY2xrMjAwX2ZzeXMiLCAic2Nsa19zcGxsIn07Ci1QTkFNRSh1c2VyX2FjbGsyMDBfZnN5c19wKQk9IHsgImZpbl9wbGwiLCAibW91dF9zd19hY2xrMjAwX2ZzeXMiIH07CitQTkFNRShtb3V0X3N3X2FjbGsyMDBfZnN5c19wKSA9IHsiZG91dF9hY2xrMjAwX2ZzeXMiLCAibW91dF9zY2xrX3NwbGwifTsKK1BOQU1FKG1vdXRfc3dfcGNsazIwMF9mc3lzX3ApID0geyJkb3V0X3BjbGsyMDBfZnN5cyIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX3BjbGsyMDBfZnN5c19wKQk9IHsiZmluX3BsbCIsICJtb3V0X3N3X3BjbGsyMDBfZnN5cyJ9OworUE5BTUUobW91dF91c2VyX2FjbGsyMDBfZnN5c19wKQk9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGsyMDBfZnN5cyJ9OwogCi1QTkFNRShzd19hY2xrMjAwX2ZzeXMyX3ApID0geyAiZG91dF9hY2xrMjAwX2ZzeXMyIiwgInNjbGtfc3BsbCJ9OwotUE5BTUUodXNlcl9hY2xrMjAwX2ZzeXMyX3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGsyMDBfZnN5czIiIH07CitQTkFNRShtb3V0X3N3X2FjbGsyMDBfZnN5czJfcCkgPSB7ImRvdXRfYWNsazIwMF9mc3lzMiIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGsyMDBfZnN5czJfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zd19hY2xrMjAwX2ZzeXMyIn07CitQTkFNRShtb3V0X3N3X2FjbGsxMDBfbm9jX3ApID0geyJkb3V0X2FjbGsxMDBfbm9jIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazEwMF9ub2NfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zd19hY2xrMTAwX25vYyJ9OwogCi1QTkFNRShzd19hY2xrMjAwX3ApID0geyAiZG91dF9hY2xrMjAwIiwgInNjbGtfc3BsbCJ9OwotUE5BTUUoYWNsazIwMF9kaXNwMV9wKQk9IHsgImZpbl9wbGwiLCAibW91dF9zd19hY2xrMjAwIiB9OworUE5BTUUobW91dF9zd19hY2xrNDAwX3djb3JlX3ApID0geyJkb3V0X2FjbGs0MDBfd2NvcmUiLCAibW91dF9zY2xrX3NwbGwifTsKK1BOQU1FKG1vdXRfYWNsazQwMF93Y29yZV9icGxsX3ApID0geyJtb3V0X2FjbGs0MDBfd2NvcmUiLCAic2Nsa19icGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazQwMF93Y29yZV9wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGs0MDBfd2NvcmUifTsKIAotUE5BTUUoc3dfYWNsazQwMF9tc2NsX3ApID0geyAiZG91dF9hY2xrNDAwX21zY2wiLCAic2Nsa19zcGxsIn07Ci1QTkFNRSh1c2VyX2FjbGs0MDBfbXNjbF9wKQk9IHsgImZpbl9wbGwiLCAibW91dF9zd19hY2xrNDAwX21zY2wiIH07CitQTkFNRShtb3V0X3N3X2FjbGs0MDBfaXNwX3ApID0geyJkb3V0X2FjbGs0MDBfaXNwIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazQwMF9pc3BfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zd19hY2xrNDAwX2lzcCJ9OwogCi1QTkFNRShzd19hY2xrMzMzX3ApID0geyAiZG91dF9hY2xrMzMzIiwgInNjbGtfc3BsbCJ9OwotUE5BTUUodXNlcl9hY2xrMzMzX3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMzMiIH07CitQTkFNRShtb3V0X3N3X2FjbGszMzNfNDMyX2lzcDBfcCkgPSB7ImRvdXRfYWNsazMzM180MzJfaXNwMCIsCisJCQkJCSJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGszMzNfNDMyX2lzcDBfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zd19hY2xrMzMzXzQzMl9pc3AwIn07CiAKLVBOQU1FKHN3X2FjbGsxNjZfcCkgPSB7ICJkb3V0X2FjbGsxNjYiLCAic2Nsa19zcGxsIn07Ci1QTkFNRSh1c2VyX2FjbGsxNjZfcCkJPSB7ICJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazE2NiIgfTsKK1BOQU1FKG1vdXRfc3dfYWNsazMzM180MzJfaXNwX3ApID0geyJkb3V0X2FjbGszMzNfNDMyX2lzcCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGszMzNfNDMyX2lzcF9wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMzNfNDMyX2lzcCJ9OwogCi1QTkFNRShzd19hY2xrMjY2X3ApID0geyAiZG91dF9hY2xrMjY2IiwgInNjbGtfc3BsbCJ9OwotUE5BTUUodXNlcl9hY2xrMjY2X3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGsyNjYiIH07CitQTkFNRShtb3V0X3N3X2FjbGsyMDBfcCkgPSB7ImRvdXRfYWNsazIwMCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGsyMDBfZGlzcDFfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zd19hY2xrMjAwIn07CiAKLVBOQU1FKHN3X2FjbGszMzNfNDMyX2dzY2xfcCkgPSB7ICJkb3V0X2FjbGszMzNfNDMyX2dzY2wiLCAic2Nsa19zcGxsIn07Ci1QTkFNRSh1c2VyX2FjbGszMzNfNDMyX2dzY2xfcCkJPSB7ICJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazMzM180MzJfZ3NjbCIgfTsKK1BOQU1FKG1vdXRfc3dfYWNsazQwMF9tc2NsX3ApID0geyJkb3V0X2FjbGs0MDBfbXNjbCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGs0MDBfbXNjbF9wKQk9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGs0MDBfbXNjbCJ9OwogCi1QTkFNRShzd19hY2xrMzAwX2dzY2xfcCkgPSB7ICJkb3V0X2FjbGszMDBfZ3NjbCIsICJzY2xrX3NwbGwifTsKLVBOQU1FKHVzZXJfYWNsazMwMF9nc2NsX3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMDBfZ3NjbCIgfTsKK1BOQU1FKG1vdXRfc3dfYWNsazMzM19wKSA9IHsiZG91dF9hY2xrMzMzIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazMzM19wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMzMifTsKIAotUE5BTUUoc3dfYWNsazMwMF9kaXNwMV9wKSA9IHsgImRvdXRfYWNsazMwMF9kaXNwMSIsICJzY2xrX3NwbGwifTsKLVBOQU1FKHVzZXJfYWNsazMwMF9kaXNwMV9wKQk9IHsgImZpbl9wbGwiLCAibW91dF9zd19hY2xrMzAwX2Rpc3AxIiB9OworUE5BTUUobW91dF9zd19hY2xrMTY2X3ApID0geyJkb3V0X2FjbGsxNjYiLCAibW91dF9zY2xrX3NwbGwifTsKK1BOQU1FKG1vdXRfdXNlcl9hY2xrMTY2X3ApID0geyJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazE2NiJ9OwogCi1QTkFNRShzd19hY2xrMzAwX2pwZWdfcCkgPSB7ICJkb3V0X2FjbGszMDBfanBlZyIsICJzY2xrX3NwbGwifTsKLVBOQU1FKHVzZXJfYWNsazMwMF9qcGVnX3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMDBfanBlZyIgfTsKK1BOQU1FKG1vdXRfc3dfYWNsazI2Nl9wKSA9IHsiZG91dF9hY2xrMjY2IiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazI2Nl9wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGsyNjYifTsKK1BOQU1FKG1vdXRfdXNlcl9hY2xrMjY2X2lzcF9wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGsyNjYifTsKIAotUE5BTUUoc3dfYWNsa19nM2RfcCkgPSB7ICJkb3V0X2FjbGtfZzNkIiwgInNjbGtfc3BsbCJ9OwotUE5BTUUodXNlcl9hY2xrX2czZF9wKQk9IHsgImZpbl9wbGwiLCAibW91dF9zd19hY2xrX2czZCIgfTsKK1BOQU1FKG1vdXRfc3dfYWNsazMzM180MzJfZ3NjbF9wKSA9IHsiZG91dF9hY2xrMzMzXzQzMl9nc2NsIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazMzM180MzJfZ3NjbF9wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMzNfNDMyX2dzY2wifTsKIAotUE5BTUUoc3dfYWNsazI2Nl9nMmRfcCkgPSB7ICJkb3V0X2FjbGsyNjZfZzJkIiwgInNjbGtfc3BsbCJ9OwotUE5BTUUodXNlcl9hY2xrMjY2X2cyZF9wKQk9IHsgImZpbl9wbGwiLCAibW91dF9zd19hY2xrMjY2X2cyZCIgfTsKK1BOQU1FKG1vdXRfc3dfYWNsazMwMF9nc2NsX3ApID0geyJkb3V0X2FjbGszMDBfZ3NjbCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGszMDBfZ3NjbF9wKQk9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMDBfZ3NjbCJ9OwogCi1QTkFNRShzd19hY2xrMzMzX2cyZF9wKSA9IHsgImRvdXRfYWNsazMzM19nMmQiLCAic2Nsa19zcGxsIn07Ci1QTkFNRSh1c2VyX2FjbGszMzNfZzJkX3ApCT0geyAiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMzNfZzJkIiB9OworUE5BTUUobW91dF9zd19hY2xrMzAwX2Rpc3AxX3ApID0geyJkb3V0X2FjbGszMDBfZGlzcDEiLCAibW91dF9zY2xrX3NwbGwifTsKK1BOQU1FKG1vdXRfc3dfYWNsazQwMF9kaXNwMV9wKSA9IHsiZG91dF9hY2xrNDAwX2Rpc3AxIiwgIm1vdXRfc2Nsa19zcGxsIn07CitQTkFNRShtb3V0X3VzZXJfYWNsazMwMF9kaXNwMV9wKSA9IHsiZmluX3BsbCIsICJtb3V0X3N3X2FjbGszMDBfZGlzcDEifTsKK1BOQU1FKG1vdXRfdXNlcl9hY2xrNDAwX2Rpc3AxX3ApID0geyJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazQwMF9kaXNwMSJ9OwogCi1QTkFNRShhdWRpbzBfcCkJPSB7ICJmaW5fcGxsIiwgImNkY2xrMCIsICJzY2xrX2RwbGwiLCAic2Nsa19tcGxsIiwKLQkJICAic2Nsa19zcGxsIiwgInNjbGtfaXBsbCIsICJzY2xrX2VwbGwiLCAic2Nsa19ycGxsIiB9OwotUE5BTUUoYXVkaW8xX3ApCT0geyAiZmluX3BsbCIsICJjZGNsazEiLCAic2Nsa19kcGxsIiwgInNjbGtfbXBsbCIsCi0JCSAgInNjbGtfc3BsbCIsICJzY2xrX2lwbGwiLCAic2Nsa19lcGxsIiwgInNjbGtfcnBsbCIgfTsKLVBOQU1FKGF1ZGlvMl9wKQk9IHsgImZpbl9wbGwiLCAiY2RjbGsyIiwgInNjbGtfZHBsbCIsICJzY2xrX21wbGwiLAotCQkgICJzY2xrX3NwbGwiLCAic2Nsa19pcGxsIiwgInNjbGtfZXBsbCIsICJzY2xrX3JwbGwiIH07Ci1QTkFNRShzcGRpZl9wKQk9IHsgImZpbl9wbGwiLCAiZG91dF9hdWRpbzAiLCAiZG91dF9hdWRpbzEiLCAiZG91dF9hdWRpbzIiLAotCQkgICJzcGRpZl9leHRjbGsiLCAic2Nsa19pcGxsIiwgInNjbGtfZXBsbCIsICJzY2xrX3JwbGwiIH07Ci1QTkFNRShoZG1pX3ApCT0geyAiZG91dF9oZG1pX3BpeGVsIiwgInNjbGtfaGRtaXBoeSIgfTsKLVBOQU1FKG1hdWRpbzBfcCkJPSB7ICJmaW5fcGxsIiwgIm1hdWRpb19jbGsiLCAic2Nsa19kcGxsIiwgInNjbGtfbXBsbCIsCi0JCQkgICJzY2xrX3NwbGwiLCAic2Nsa19pcGxsIiwgInNjbGtfZXBsbCIsICJzY2xrX3JwbGwiIH07CitQTkFNRShtb3V0X3N3X2FjbGszMDBfanBlZ19wKSA9IHsiZG91dF9hY2xrMzAwX2pwZWciLCAibW91dF9zY2xrX3NwbGwifTsKK1BOQU1FKG1vdXRfdXNlcl9hY2xrMzAwX2pwZWdfcCkgPSB7ImZpbl9wbGwiLCAibW91dF9zd19hY2xrMzAwX2pwZWcifTsKKworUE5BTUUobW91dF9zd19hY2xrX2czZF9wKSA9IHsiZG91dF9hY2xrX2czZCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGtfZzNkX3ApID0geyJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsa19nM2QifTsKKworUE5BTUUobW91dF9zd19hY2xrMjY2X2cyZF9wKSA9IHsiZG91dF9hY2xrMjY2X2cyZCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGsyNjZfZzJkX3ApID0geyJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazI2Nl9nMmQifTsKKworUE5BTUUobW91dF9zd19hY2xrMzMzX2cyZF9wKSA9IHsiZG91dF9hY2xrMzMzX2cyZCIsICJtb3V0X3NjbGtfc3BsbCJ9OworUE5BTUUobW91dF91c2VyX2FjbGszMzNfZzJkX3ApID0geyJmaW5fcGxsIiwgIm1vdXRfc3dfYWNsazMzM19nMmQifTsKKworUE5BTUUobW91dF9hdWRpbzBfcCkgPSB7ImZpbl9wbGwiLCAiY2RjbGswIiwgIm1vdXRfc2Nsa19kcGxsIiwKKwkJCSJtb3V0X3NjbGtfbXBsbCIsICJtb3V0X3NjbGtfc3BsbCIsICJtb3V0X3NjbGtfaXBsbCIsCisJCQkibW91dF9zY2xrX2VwbGwiLCAibW91dF9zY2xrX3JwbGwifTsKK1BOQU1FKG1vdXRfYXVkaW8xX3ApID0geyJmaW5fcGxsIiwgImNkY2xrMSIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkibW91dF9zY2xrX21wbGwiLCAibW91dF9zY2xrX3NwbGwiLCAibW91dF9zY2xrX2lwbGwiLAorCQkJIm1vdXRfc2Nsa19lcGxsIiwgIm1vdXRfc2Nsa19ycGxsIn07CitQTkFNRShtb3V0X2F1ZGlvMl9wKSA9IHsiZmluX3BsbCIsICJjZGNsazIiLCAibW91dF9zY2xrX2RwbGwiLAorCQkJIm1vdXRfc2Nsa19tcGxsIiwgIm1vdXRfc2Nsa19zcGxsIiwgIm1vdXRfc2Nsa19pcGxsIiwKKwkJCSJtb3V0X3NjbGtfZXBsbCIsICJtb3V0X3NjbGtfcnBsbCJ9OworUE5BTUUobW91dF9zcGRpZl9wKSA9IHsiZmluX3BsbCIsICJkb3V0X2F1ZGlvMCIsICJkb3V0X2F1ZGlvMSIsCisJCQkiZG91dF9hdWRpbzIiLCAic3BkaWZfZXh0Y2xrIiwgIm1vdXRfc2Nsa19pcGxsIiwKKwkJCSJtb3V0X3NjbGtfZXBsbCIsICJtb3V0X3NjbGtfcnBsbCJ9OworUE5BTUUobW91dF9oZG1pX3ApID0geyJkb3V0X2hkbWlfcGl4ZWwiLCAic2Nsa19oZG1pcGh5In07CitQTkFNRShtb3V0X21hdWRpbzBfcCkgPSB7ImZpbl9wbGwiLCAibWF1ZGlvX2NsayIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkgIm1vdXRfc2Nsa19tcGxsIiwgIm1vdXRfc2Nsa19zcGxsIiwgIm1vdXRfc2Nsa19pcGxsIiwKKwkJCSAibW91dF9zY2xrX2VwbGwiLCAibW91dF9zY2xrX3JwbGwifTsKK1BOQU1FKG1vdXRfbWF1X2VwbGxfY2xrX3ApID0geyJtb3V0X3NjbGtfZXBsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJIm1vdXRfc2Nsa19tcGxsIiwgIm1vdXRfc2Nsa19zcGxsIn07CisvKiBMaXN0IG9mIHBhcmVudHMgc3BlY2lmaWMgdG8gZXh5bm9zNTgwMCAqLworUE5BTUUobW91dF9lcGxsMl81ODAwX3ApCT0geyAibW91dF9zY2xrX2VwbGwiLCAiZmZfZG91dF9lcGxsMiIgfTsKK1BOQU1FKG1vdXRfZ3JvdXAxXzU4MDBfcCkJPSB7ICJtb3V0X3NjbGtfY3BsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJIm1vdXRfc2Nsa19tcGxsIiwgImZmX2RvdXRfc3BsbDIiIH07CitQTkFNRShtb3V0X2dyb3VwMl81ODAwX3ApCT0geyAibW91dF9zY2xrX2NwbGwiLCAibW91dF9zY2xrX2RwbGwiLAorCQkJCQkibW91dF9zY2xrX21wbGwiLCAiZmZfZG91dF9zcGxsMiIsCisJCQkJCSJtb3V0X2VwbGwyIiwgIm1vdXRfc2Nsa19pcGxsIiB9OworUE5BTUUobW91dF9ncm91cDNfNTgwMF9wKQk9IHsgIm1vdXRfc2Nsa19jcGxsIiwgIm1vdXRfc2Nsa19kcGxsIiwKKwkJCQkJIm1vdXRfc2Nsa19tcGxsIiwgImZmX2RvdXRfc3BsbDIiLAorCQkJCQkibW91dF9lcGxsMiIgfTsKK1BOQU1FKG1vdXRfZ3JvdXA1XzU4MDBfcCkJPSB7ICJtb3V0X3NjbGtfY3BsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJCSJtb3V0X3NjbGtfbXBsbCIsICJtb3V0X3NjbGtfc3BsbCIgfTsKK1BOQU1FKG1vdXRfZ3JvdXA2XzU4MDBfcCkJPSB7ICJtb3V0X3NjbGtfaXBsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJIm1vdXRfc2Nsa19tcGxsIiwgImZmX2RvdXRfc3BsbDIiIH07CitQTkFNRShtb3V0X2dyb3VwN181ODAwX3ApCT0geyAibW91dF9zY2xrX2NwbGwiLCAibW91dF9zY2xrX2RwbGwiLAorCQkJCQkibW91dF9zY2xrX21wbGwiLCAibW91dF9zY2xrX3NwbGwiLAorCQkJCQkibW91dF9lcGxsMiIsICJtb3V0X3NjbGtfaXBsbCIgfTsKK1BOQU1FKG1vdXRfbWF1X2VwbGxfY2xrXzU4MDBfcCkJPSB7ICJtb3V0X3NjbGtfZXBsbCIsICJtb3V0X3NjbGtfZHBsbCIsCisJCQkJCSJtb3V0X3NjbGtfbXBsbCIsCisJCQkJCSJmZl9kb3V0X3NwbGwyIiB9OworUE5BTUUobW91dF9ncm91cDhfNTgwMF9wKQk9IHsgImRvdXRfYWNsazQzMl9zY2FsZXIiLCAiZG91dF9zY2xrX3N3IiB9OworUE5BTUUobW91dF9ncm91cDlfNTgwMF9wKQk9IHsgImRvdXRfb3NjX2RpdiIsICJtb3V0X3N3X2FjbGs0MzJfc2NhbGVyIiB9OworUE5BTUUobW91dF9ncm91cDEwXzU4MDBfcCkJPSB7ICJkb3V0X2FjbGs0MzJfY2FtIiwgImRvdXRfc2Nsa19zdyIgfTsKK1BOQU1FKG1vdXRfZ3JvdXAxMV81ODAwX3ApCT0geyAiZG91dF9vc2NfZGl2IiwgIm1vdXRfc3dfYWNsazQzMl9jYW0iIH07CitQTkFNRShtb3V0X2dyb3VwMTJfNTgwMF9wKQk9IHsgImRvdXRfYWNsa2ZsMV81NTBfY2FtIiwgImRvdXRfc2Nsa19zdyIgfTsKK1BOQU1FKG1vdXRfZ3JvdXAxM181ODAwX3ApCT0geyAiZG91dF9vc2NfZGl2IiwgIm1vdXRfc3dfYWNsa2ZsMV81NTBfY2FtIiB9OworUE5BTUUobW91dF9ncm91cDE0XzU4MDBfcCkJPSB7ICJkb3V0X2FjbGs1NTBfY2FtIiwgImRvdXRfc2Nsa19zdyIgfTsKK1BOQU1FKG1vdXRfZ3JvdXAxNV81ODAwX3ApCT0geyAiZG91dF9vc2NfZGl2IiwgIm1vdXRfc3dfYWNsazU1MF9jYW0iIH07CiAKIC8qIGZpeGVkIHJhdGUgY2xvY2tzIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBzb2MgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrIGV4eW5vczU0MjBfZml4ZWRfcmF0ZV9leHRfY2xrc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jaworCQlleHlub3M1eF9maXhlZF9yYXRlX2V4dF9jbGtzW10gX19pbml0ZGF0YSA9IHsKIAlGUkFURShDTEtfRklOX1BMTCwgImZpbl9wbGwiLCBOVUxMLCBDTEtfSVNfUk9PVCwgMCksCiB9OwogCiAvKiBmaXhlZCByYXRlIGNsb2NrcyBnZW5lcmF0ZWQgaW5zaWRlIHRoZSBzb2MgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrIGV4eW5vczU0MjBfZml4ZWRfcmF0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrIGV4eW5vczV4X2ZpeGVkX3JhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CiAJRlJBVEUoQ0xLX1NDTEtfSERNSVBIWSwgInNjbGtfaGRtaXBoeSIsIE5VTEwsIENMS19JU19ST09ULCAyNDAwMDAwMCksCiAJRlJBVEUoMCwgInNjbGtfcHdpIiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDI0MDAwMDAwKSwKIAlGUkFURSgwLCAic2Nsa191c2JoMjAiLCBOVUxMLCBDTEtfSVNfUk9PVCwgNDgwMDAwMDApLApAQCAtMzEwLDE0NiArNDYyLDMwOSBAQAogCUZSQVRFKDAsICJzY2xrX3VzYmgyMF9zY2FuX2NsayIsIE5VTEwsIENMS19JU19ST09ULCA0ODAwMDAwMDApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayBleHlub3M1NDIwX2ZpeGVkX2ZhY3Rvcl9jbGtzW10gX19pbml0ZGF0YSA9IHsKLQlGRkFDVE9SKDAsICJzY2xrX2hzaWNfMTJtIiwgImZpbl9wbGwiLCAxLCAyLCAwKSwKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9mYWN0b3JfY2xvY2sKKwkJZXh5bm9zNXhfZml4ZWRfZmFjdG9yX2Nsa3NbXSBfX2luaXRkYXRhID0geworCUZGQUNUT1IoMCwgImZmX2hzaWNfMTJtIiwgImZpbl9wbGwiLCAxLCAyLCAwKSwKKwlGRkFDVE9SKDAsICJmZl9zd19hY2xrNjYiLCAibW91dF9zd19hY2xrNjYiLCAxLCAyLCAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgZXh5bm9zNTQyMF9tdXhfY2xrc1tdIF9faW5pdGRhdGEgPSB7Ci0JTVVYKDAsICJtb3V0X21zcGxsX2tmYyIsIG1zcGxsX2NwdV9wLCBTUkNfVE9QNywgOCwgMiksCi0JTVVYKDAsICJtb3V0X21zcGxsX2NwdSIsIG1zcGxsX2NwdV9wLCBTUkNfVE9QNywgMTIsIDIpLAotCU1VWCgwLCAibW91dF9hcGxsIiwgYXBsbF9wLCBTUkNfQ1BVLCAwLCAxKSwKLQlNVVgoMCwgIm1vdXRfY3B1IiwgY3B1X3AsIFNSQ19DUFUsIDE2LCAxKSwKLQlNVVgoMCwgIm1vdXRfa3BsbCIsIGtwbGxfcCwgU1JDX0tGQywgMCwgMSksCi0JTVVYKDAsICJtb3V0X2NwdV9rZmMiLCBrZmNfcCwgU1JDX0tGQywgMTYsIDEpLAorc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jaworCQlleHlub3M1ODAwX2ZpeGVkX2ZhY3Rvcl9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlGRkFDVE9SKDAsICJmZl9kb3V0X2VwbGwyIiwgIm1vdXRfc2Nsa19lcGxsIiwgMSwgMiwgMCksCisJRkZBQ1RPUigwLCAiZmZfZG91dF9zcGxsMiIsICJtb3V0X3NjbGtfc3BsbCIsIDEsIDIsIDApLAorfTsKIAotCU1VWCgwLCAic2Nsa19icGxsIiwgYnBsbF9wLCBTUkNfQ0RSRVgsIDAsIDEpLAorc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIGV4eW5vczU4MDBfbXV4X2Nsa3NbXSBfX2luaXRkYXRhID0geworCU1VWCgwLCAibW91dF9hY2xrNDAwX2lzcCIsIG1vdXRfZ3JvdXAzXzU4MDBfcCwgU1JDX1RPUDAsIDAsIDMpLAorCU1VWCgwLCAibW91dF9hY2xrNDAwX21zY2wiLCBtb3V0X2dyb3VwM181ODAwX3AsIFNSQ19UT1AwLCA0LCAzKSwKKwlNVVgoMCwgIm1vdXRfYWNsazQwMF93Y29yZSIsIG1vdXRfZ3JvdXAyXzU4MDBfcCwgU1JDX1RPUDAsIDE2LCAzKSwKKwlNVVgoMCwgIm1vdXRfYWNsazEwMF9ub2MiLCBtb3V0X2dyb3VwMV81ODAwX3AsIFNSQ19UT1AwLCAyMCwgMiksCiAKLQlNVVhfQSgwLCAibW91dF9hY2xrNDAwX21zY2wiLCBncm91cDFfcCwKLQkJCVNSQ19UT1AwLCA0LCAyLCAiYWNsazQwMF9tc2NsIiksCi0JTVVYKDAsICJtb3V0X2FjbGsyMDAiLCBncm91cDFfcCwgU1JDX1RPUDAsIDgsIDIpLAotCU1VWCgwLCAibW91dF9hY2xrMjAwX2ZzeXMyIiwgZ3JvdXAxX3AsIFNSQ19UT1AwLCAxMiwgMiksCi0JTVVYKDAsICJtb3V0X2FjbGsyMDBfZnN5cyIsIGdyb3VwMV9wLCBTUkNfVE9QMCwgMjgsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMzMzXzQzMl9nc2NsIiwgbW91dF9ncm91cDZfNTgwMF9wLCBTUkNfVE9QMSwgMCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGszMzNfNDMyX2lzcCIsIG1vdXRfZ3JvdXA2XzU4MDBfcCwgU1JDX1RPUDEsIDQsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMzMzXzQzMl9pc3AwIiwgbW91dF9ncm91cDZfNTgwMF9wLCBTUkNfVE9QMSwgMTIsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMjY2IiwgbW91dF9ncm91cDVfNTgwMF9wLCBTUkNfVE9QMSwgMjAsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMzMzIiwgbW91dF9ncm91cDFfNTgwMF9wLCBTUkNfVE9QMSwgMjgsIDIpLAogCi0JTVVYKDAsICJtb3V0X2FjbGszMzNfNDMyX2dzY2wiLCBncm91cDRfcCwgU1JDX1RPUDEsIDAsIDIpLAotCU1VWCgwLCAibW91dF9hY2xrNjYiLCBncm91cDFfcCwgU1JDX1RPUDEsIDgsIDIpLAotCU1VWCgwLCAibW91dF9hY2xrMjY2IiwgZ3JvdXAxX3AsIFNSQ19UT1AxLCAyMCwgMiksCi0JTVVYKDAsICJtb3V0X2FjbGsxNjYiLCBncm91cDFfcCwgU1JDX1RPUDEsIDI0LCAyKSwKLQlNVVgoMCwgIm1vdXRfYWNsazMzMyIsIGdyb3VwMV9wLCBTUkNfVE9QMSwgMjgsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrNDAwX2Rpc3AxIiwgbW91dF9ncm91cDdfNTgwMF9wLCBTUkNfVE9QMiwgNCwgMyksCisJTVVYKDAsICJtb3V0X2FjbGszMzNfZzJkIiwgbW91dF9ncm91cDVfNTgwMF9wLCBTUkNfVE9QMiwgOCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGsyNjZfZzJkIiwgbW91dF9ncm91cDVfNTgwMF9wLCBTUkNfVE9QMiwgMTIsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMzAwX2pwZWciLCBtb3V0X2dyb3VwNV81ODAwX3AsIFNSQ19UT1AyLCAyMCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGszMDBfZGlzcDEiLCBtb3V0X2dyb3VwNV81ODAwX3AsIFNSQ19UT1AyLCAyNCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGszMDBfZ3NjbCIsIG1vdXRfZ3JvdXA1XzU4MDBfcCwgU1JDX1RPUDIsIDI4LCAyKSwKIAotCU1VWCgwLCAibW91dF9hY2xrMzMzX2cyZCIsIGdyb3VwMV9wLCBTUkNfVE9QMiwgOCwgMiksCi0JTVVYKDAsICJtb3V0X2FjbGsyNjZfZzJkIiwgZ3JvdXAxX3AsIFNSQ19UT1AyLCAxMiwgMiksCi0JTVVYKDAsICJtb3V0X2FjbGtfZzNkIiwgZ3JvdXA1X3AsIFNSQ19UT1AyLCAxNiwgMSksCi0JTVVYKDAsICJtb3V0X2FjbGszMDBfanBlZyIsIGdyb3VwMV9wLCBTUkNfVE9QMiwgMjAsIDIpLAotCU1VWCgwLCAibW91dF9hY2xrMzAwX2Rpc3AxIiwgZ3JvdXAxX3AsIFNSQ19UT1AyLCAyNCwgMiksCi0JTVVYKDAsICJtb3V0X2FjbGszMDBfZ3NjbCIsIGdyb3VwMV9wLCBTUkNfVE9QMiwgMjgsIDIpLAorCU1VWCgwLCAibW91dF9tYXVfZXBsbF9jbGsiLCBtb3V0X21hdV9lcGxsX2Nsa181ODAwX3AsIFNSQ19UT1A3LAorCQkJMjAsIDIpLAorCU1VWCgwLCAic2Nsa19icGxsIiwgbW91dF9icGxsX3AsIFNSQ19UT1A3LCAyNCwgMSksCisJTVVYKDAsICJtb3V0X2VwbGwyIiwgbW91dF9lcGxsMl81ODAwX3AsIFNSQ19UT1A3LCAyOCwgMSksCiAKLQlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrNDAwX21zY2wiLCB1c2VyX2FjbGs0MDBfbXNjbF9wLAorCU1VWCgwLCAibW91dF9hY2xrNTUwX2NhbSIsIG1vdXRfZ3JvdXAzXzU4MDBfcCwgU1JDX1RPUDgsIDE2LCAzKSwKKwlNVVgoMCwgIm1vdXRfYWNsa2ZsMV81NTBfY2FtIiwgbW91dF9ncm91cDNfNTgwMF9wLCBTUkNfVE9QOCwgMjAsIDMpLAorCU1VWCgwLCAibW91dF9hY2xrNDMyX2NhbSIsIG1vdXRfZ3JvdXA2XzU4MDBfcCwgU1JDX1RPUDgsIDI0LCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazQzMl9zY2FsZXIiLCBtb3V0X2dyb3VwNl81ODAwX3AsIFNSQ19UT1A4LCAyOCwgMiksCisKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrNTUwX2NhbSIsIG1vdXRfZ3JvdXAxNV81ODAwX3AsCisJCQkJCQkJU1JDX1RPUDksIDE2LCAxKSwKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrZmwxXzU1MF9jYW0iLCBtb3V0X2dyb3VwMTNfNTgwMF9wLAorCQkJCQkJCVNSQ19UT1A5LCAyMCwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazQzMl9jYW0iLCBtb3V0X2dyb3VwMTFfNTgwMF9wLAorCQkJCQkJCVNSQ19UT1A5LCAyNCwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazQzMl9zY2FsZXIiLCBtb3V0X2dyb3VwOV81ODAwX3AsCisJCQkJCQkJU1JDX1RPUDksIDI4LCAxKSwKKworCU1VWCgwLCAibW91dF9zd19hY2xrNTUwX2NhbSIsIG1vdXRfZ3JvdXAxNF81ODAwX3AsIFNSQ19UT1AxMywgMTYsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrZmwxXzU1MF9jYW0iLCBtb3V0X2dyb3VwMTJfNTgwMF9wLAorCQkJCQkJCVNSQ19UT1AxMywgMjAsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrNDMyX2NhbSIsIG1vdXRfZ3JvdXAxMF81ODAwX3AsCisJCQkJCQkJU1JDX1RPUDEzLCAyNCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGs0MzJfc2NhbGVyIiwgbW91dF9ncm91cDhfNTgwMF9wLAorCQkJCQkJCVNSQ19UT1AxMywgMjgsIDEpLAorCisJTVVYKDAsICJtb3V0X2ZpbWQxIiwgbW91dF9ncm91cDJfcCwgU1JDX0RJU1AxMCwgNCwgMyksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgZXh5bm9zNTgwMF9kaXZfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKDAsICJkb3V0X2FjbGs0MDBfd2NvcmUiLCAibW91dF9hY2xrNDAwX3djb3JlIiwgRElWX1RPUDAsIDE2LCAzKSwKKworCURJVigwLCAiZG91dF9hY2xrNTUwX2NhbSIsICJtb3V0X2FjbGs1NTBfY2FtIiwKKwkJCQlESVZfVE9QOCwgMTYsIDMpLAorCURJVigwLCAiZG91dF9hY2xrZmwxXzU1MF9jYW0iLCAibW91dF9hY2xrZmwxXzU1MF9jYW0iLAorCQkJCURJVl9UT1A4LCAyMCwgMyksCisJRElWKDAsICJkb3V0X2FjbGs0MzJfY2FtIiwgIm1vdXRfYWNsazQzMl9jYW0iLAorCQkJCURJVl9UT1A4LCAyNCwgMyksCisJRElWKDAsICJkb3V0X2FjbGs0MzJfc2NhbGVyIiwgIm1vdXRfYWNsazQzMl9zY2FsZXIiLAorCQkJCURJVl9UT1A4LCAyOCwgMyksCisKKwlESVYoMCwgImRvdXRfb3NjX2RpdiIsICJmaW5fcGxsIiwgRElWX1RPUDksIDIwLCAzKSwKKwlESVYoMCwgImRvdXRfc2Nsa19zdyIsICJzY2xrX3NwbGwiLCBESVZfVE9QOSwgMjQsIDYpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBleHlub3M1ODAwX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShDTEtfQUNMSzU1MF9DQU0sICJhY2xrNTUwX2NhbSIsICJtb3V0X3VzZXJfYWNsazU1MF9jYW0iLAorCQkJCUdBVEVfQlVTX1RPUCwgMjQsIDAsIDApLAorCUdBVEUoQ0xLX0FDTEs0MzJfU0NBTEVSLCAiYWNsazQzMl9zY2FsZXIiLCAibW91dF91c2VyX2FjbGs0MzJfc2NhbGVyIiwKKwkJCQlHQVRFX0JVU19UT1AsIDI3LCAwLCAwKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBleHlub3M1NDIwX211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoMCwgInNjbGtfYnBsbCIsIG1vdXRfYnBsbF9wLCBUT1BfU1BBUkUyLCAwLCAxKSwKKwlNVVgoMCwgIm1vdXRfYWNsazQwMF93Y29yZV9icGxsIiwgbW91dF9hY2xrNDAwX3djb3JlX2JwbGxfcCwKKwkJCQlUT1BfU1BBUkUyLCA0LCAxKSwKKworCU1VWCgwLCAibW91dF9hY2xrNDAwX2lzcCIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AwLCAwLCAyKSwKKwlNVVhfQSgwLCAibW91dF9hY2xrNDAwX21zY2wiLCBtb3V0X2dyb3VwMV9wLAorCQkJCVNSQ19UT1AwLCA0LCAyLCAiYWNsazQwMF9tc2NsIiksCisJTVVYKDAsICJtb3V0X2FjbGs0MDBfd2NvcmUiLCBtb3V0X2dyb3VwMV9wLCBTUkNfVE9QMCwgMTYsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMTAwX25vYyIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AwLCAyMCwgMiksCisKKwlNVVgoMCwgIm1vdXRfYWNsazMzM180MzJfZ3NjbCIsIG1vdXRfZ3JvdXA0X3AsIFNSQ19UT1AxLCAwLCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazMzM180MzJfaXNwIiwgbW91dF9ncm91cDRfcCwKKwkJCQlTUkNfVE9QMSwgNCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGszMzNfNDMyX2lzcDAiLCBtb3V0X2dyb3VwNF9wLCBTUkNfVE9QMSwgMTIsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMjY2IiwgbW91dF9ncm91cDFfcCwgU1JDX1RPUDEsIDIwLCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazMzMyIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AxLCAyOCwgMiksCisKKwlNVVgoMCwgIm1vdXRfYWNsazQwMF9kaXNwMSIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AyLCA0LCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazMzM19nMmQiLCBtb3V0X2dyb3VwMV9wLCBTUkNfVE9QMiwgOCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGsyNjZfZzJkIiwgbW91dF9ncm91cDFfcCwgU1JDX1RPUDIsIDEyLCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazMwMF9qcGVnIiwgbW91dF9ncm91cDFfcCwgU1JDX1RPUDIsIDIwLCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazMwMF9kaXNwMSIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AyLCAyNCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGszMDBfZ3NjbCIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AyLCAyOCwgMiksCisKKwlNVVgoMCwgIm1vdXRfbWF1X2VwbGxfY2xrIiwgbW91dF9tYXVfZXBsbF9jbGtfcCwgU1JDX1RPUDcsIDIwLCAyKSwKKworCU1VWCgwLCAibW91dF9maW1kMSIsIG1vdXRfZ3JvdXAzX3AsIFNSQ19ESVNQMTAsIDQsIDEpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIGV4eW5vczU0MjBfZGl2X2Nsa3NbXSBfX2luaXRkYXRhID0geworCURJVigwLCAiZG91dF9hY2xrNDAwX3djb3JlIiwgIm1vdXRfYWNsazQwMF93Y29yZV9icGxsIiwKKwkJCURJVl9UT1AwLCAxNiwgMyksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIGV4eW5vczV4X211eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoMCwgIm1vdXRfdXNlcl9wY2xrNjZfZ3BpbyIsIG1vdXRfdXNlcl9wY2xrNjZfZ3Bpb19wLAorCQkJU1JDX1RPUDcsIDQsIDEpLAorCU1VWCgwLCAibW91dF9tc3BsbF9rZmMiLCBtb3V0X21zcGxsX2NwdV9wLCBTUkNfVE9QNywgOCwgMiksCisJTVVYKDAsICJtb3V0X21zcGxsX2NwdSIsIG1vdXRfbXNwbGxfY3B1X3AsIFNSQ19UT1A3LCAxMiwgMiksCisKKwlNVVgoMCwgIm1vdXRfYXBsbCIsIG1vdXRfYXBsbF9wLCBTUkNfQ1BVLCAwLCAxKSwKKwlNVVgoMCwgIm1vdXRfY3B1IiwgbW91dF9jcHVfcCwgU1JDX0NQVSwgMTYsIDEpLAorCU1VWCgwLCAibW91dF9rcGxsIiwgbW91dF9rcGxsX3AsIFNSQ19LRkMsIDAsIDEpLAorCU1VWCgwLCAibW91dF9rZmMiLCBtb3V0X2tmY19wLCBTUkNfS0ZDLCAxNiwgMSksCisKKwlNVVgoMCwgIm1vdXRfYWNsazIwMCIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AwLCA4LCAyKSwKKwlNVVgoMCwgIm1vdXRfYWNsazIwMF9mc3lzMiIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AwLCAxMiwgMiksCisJTVVYKDAsICJtb3V0X3BjbGsyMDBfZnN5cyIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AwLCAyNCwgMiksCisJTVVYKDAsICJtb3V0X2FjbGsyMDBfZnN5cyIsIG1vdXRfZ3JvdXAxX3AsIFNSQ19UT1AwLCAyOCwgMiksCisKKwlNVVgoMCwgIm1vdXRfYWNsazY2IiwgbW91dF9ncm91cDFfcCwgU1JDX1RPUDEsIDgsIDIpLAorCU1VWCgwLCAibW91dF9hY2xrMTY2IiwgbW91dF9ncm91cDFfcCwgU1JDX1RPUDEsIDI0LCAyKSwKKworCU1VWCgwLCAibW91dF9hY2xrX2czZCIsIG1vdXRfZ3JvdXA1X3AsIFNSQ19UT1AyLCAxNiwgMSksCisKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrNDAwX2lzcCIsIG1vdXRfdXNlcl9hY2xrNDAwX2lzcF9wLAorCQkJU1JDX1RPUDMsIDAsIDEpLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGs0MDBfbXNjbCIsIG1vdXRfdXNlcl9hY2xrNDAwX21zY2xfcCwKIAkJCVNSQ19UT1AzLCA0LCAxKSwKLQlNVVhfQSgwLCAibW91dF9hY2xrMjAwX2Rpc3AxIiwgYWNsazIwMF9kaXNwMV9wLAotCQkJU1JDX1RPUDMsIDgsIDEsICJhY2xrMjAwX2Rpc3AxIiksCi0JTVVYKDAsICJtb3V0X3VzZXJfYWNsazIwMF9mc3lzMiIsIHVzZXJfYWNsazIwMF9mc3lzMl9wLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGsyMDBfZGlzcDEiLCBtb3V0X3VzZXJfYWNsazIwMF9kaXNwMV9wLAorCQkJU1JDX1RPUDMsIDgsIDEpLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGsyMDBfZnN5czIiLCBtb3V0X3VzZXJfYWNsazIwMF9mc3lzMl9wLAogCQkJU1JDX1RPUDMsIDEyLCAxKSwKLQlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMjAwX2ZzeXMiLCB1c2VyX2FjbGsyMDBfZnN5c19wLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGs0MDBfd2NvcmUiLCBtb3V0X3VzZXJfYWNsazQwMF93Y29yZV9wLAorCQkJU1JDX1RPUDMsIDE2LCAxKSwKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMTAwX25vYyIsIG1vdXRfdXNlcl9hY2xrMTAwX25vY19wLAorCQkJU1JDX1RPUDMsIDIwLCAxKSwKKwlNVVgoMCwgIm1vdXRfdXNlcl9wY2xrMjAwX2ZzeXMiLCBtb3V0X3VzZXJfcGNsazIwMF9mc3lzX3AsCisJCQlTUkNfVE9QMywgMjQsIDEpLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGsyMDBfZnN5cyIsIG1vdXRfdXNlcl9hY2xrMjAwX2ZzeXNfcCwKIAkJCVNSQ19UT1AzLCAyOCwgMSksCiAKLQlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMzMzXzQzMl9nc2NsIiwgdXNlcl9hY2xrMzMzXzQzMl9nc2NsX3AsCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazMzM180MzJfZ3NjbCIsIG1vdXRfdXNlcl9hY2xrMzMzXzQzMl9nc2NsX3AsCiAJCQlTUkNfVE9QNCwgMCwgMSksCi0JTVVYKDAsICJtb3V0X2FjbGs2Nl9wZXJpYyIsIGFjbGs2Nl9wZXJpY19wLCBTUkNfVE9QNCwgOCwgMSksCi0JTVVYKDAsICJtb3V0X3VzZXJfYWNsazI2NiIsIHVzZXJfYWNsazI2Nl9wLCBTUkNfVE9QNCwgMjAsIDEpLAotCU1VWCgwLCAibW91dF91c2VyX2FjbGsxNjYiLCB1c2VyX2FjbGsxNjZfcCwgU1JDX1RPUDQsIDI0LCAxKSwKLQlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMzMzIiwgdXNlcl9hY2xrMzMzX3AsIFNSQ19UT1A0LCAyOCwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazMzM180MzJfaXNwIiwgbW91dF91c2VyX2FjbGszMzNfNDMyX2lzcF9wLAorCQkJU1JDX1RPUDQsIDQsIDEpLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGs2Nl9wZXJpYyIsIG1vdXRfdXNlcl9hY2xrNjZfcGVyaWNfcCwKKwkJCVNSQ19UT1A0LCA4LCAxKSwKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMzMzXzQzMl9pc3AwIiwgbW91dF91c2VyX2FjbGszMzNfNDMyX2lzcDBfcCwKKwkJCVNSQ19UT1A0LCAxMiwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazI2Nl9pc3AiLCBtb3V0X3VzZXJfYWNsazI2Nl9pc3BfcCwKKwkJCVNSQ19UT1A0LCAxNiwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazI2NiIsIG1vdXRfdXNlcl9hY2xrMjY2X3AsIFNSQ19UT1A0LCAyMCwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazE2NiIsIG1vdXRfdXNlcl9hY2xrMTY2X3AsIFNSQ19UT1A0LCAyNCwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazMzMyIsIG1vdXRfdXNlcl9hY2xrMzMzX3AsIFNSQ19UT1A0LCAyOCwgMSksCiAKLQlNVVgoMCwgIm1vdXRfYWNsazY2X3BzZ2VuIiwgYWNsazY2X3BlcmljX3AsIFNSQ19UT1A1LCA0LCAxKSwKLQlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMzMzX2cyZCIsIHVzZXJfYWNsazMzM19nMmRfcCwgU1JDX1RPUDUsIDgsIDEpLAotCU1VWCgwLCAibW91dF91c2VyX2FjbGsyNjZfZzJkIiwgdXNlcl9hY2xrMjY2X2cyZF9wLCBTUkNfVE9QNSwgMTIsIDEpLAotCU1VWF9BKDAsICJtb3V0X3VzZXJfYWNsa19nM2QiLCB1c2VyX2FjbGtfZzNkX3AsCi0JCQlTUkNfVE9QNSwgMTYsIDEsICJhY2xrZzNkIiksCi0JTVVYKDAsICJtb3V0X3VzZXJfYWNsazMwMF9qcGVnIiwgdXNlcl9hY2xrMzAwX2pwZWdfcCwKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrNDAwX2Rpc3AxIiwgbW91dF91c2VyX2FjbGs0MDBfZGlzcDFfcCwKKwkJCVNSQ19UT1A1LCAwLCAxKSwKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrNjZfcHNnZW4iLCBtb3V0X3VzZXJfYWNsazY2X3BlcmljX3AsCisJCQlTUkNfVE9QNSwgNCwgMSksCisJTVVYKDAsICJtb3V0X3VzZXJfYWNsazMzM19nMmQiLCBtb3V0X3VzZXJfYWNsazMzM19nMmRfcCwKKwkJCVNSQ19UT1A1LCA4LCAxKSwKKwlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMjY2X2cyZCIsIG1vdXRfdXNlcl9hY2xrMjY2X2cyZF9wLAorCQkJU1JDX1RPUDUsIDEyLCAxKSwKKwlNVVgoQ0xLX01PVVRfRzNELCAibW91dF91c2VyX2FjbGtfZzNkIiwgbW91dF91c2VyX2FjbGtfZzNkX3AsCisJCQlTUkNfVE9QNSwgMTYsIDEpLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGszMDBfanBlZyIsIG1vdXRfdXNlcl9hY2xrMzAwX2pwZWdfcCwKIAkJCVNSQ19UT1A1LCAyMCwgMSksCi0JTVVYKDAsICJtb3V0X3VzZXJfYWNsazMwMF9kaXNwMSIsIHVzZXJfYWNsazMwMF9kaXNwMV9wLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGszMDBfZGlzcDEiLCBtb3V0X3VzZXJfYWNsazMwMF9kaXNwMV9wLAogCQkJU1JDX1RPUDUsIDI0LCAxKSwKLQlNVVgoMCwgIm1vdXRfdXNlcl9hY2xrMzAwX2dzY2wiLCB1c2VyX2FjbGszMDBfZ3NjbF9wLAorCU1VWCgwLCAibW91dF91c2VyX2FjbGszMDBfZ3NjbCIsIG1vdXRfdXNlcl9hY2xrMzAwX2dzY2xfcCwKIAkJCVNSQ19UT1A1LCAyOCwgMSksCiAKLQlNVVgoMCwgInNjbGtfbXBsbCIsIG1wbGxfcCwgU1JDX1RPUDYsIDAsIDEpLAotCU1VWCgwLCAic2Nsa192cGxsIiwgdnBsbF9wLCBTUkNfVE9QNiwgNCwgMSksCi0JTVVYKDAsICJzY2xrX3NwbGwiLCBzcGxsX3AsIFNSQ19UT1A2LCA4LCAxKSwKLQlNVVgoMCwgInNjbGtfaXBsbCIsIGlwbGxfcCwgU1JDX1RPUDYsIDEyLCAxKSwKLQlNVVgoMCwgInNjbGtfcnBsbCIsIHJwbGxfcCwgU1JDX1RPUDYsIDE2LCAxKSwKLQlNVVgoMCwgInNjbGtfZXBsbCIsIGVwbGxfcCwgU1JDX1RPUDYsIDIwLCAxKSwKLQlNVVgoMCwgInNjbGtfZHBsbCIsIGRwbGxfcCwgU1JDX1RPUDYsIDI0LCAxKSwKLQlNVVgoMCwgInNjbGtfY3BsbCIsIGNwbGxfcCwgU1JDX1RPUDYsIDI4LCAxKSwKKwlNVVgoMCwgIm1vdXRfc2Nsa19tcGxsIiwgbW91dF9tcGxsX3AsIFNSQ19UT1A2LCAwLCAxKSwKKwlNVVgoQ0xLX01PVVRfVlBMTCwgIm1vdXRfc2Nsa192cGxsIiwgbW91dF92cGxsX3AsIFNSQ19UT1A2LCA0LCAxKSwKKwlNVVgoMCwgIm1vdXRfc2Nsa19zcGxsIiwgbW91dF9zcGxsX3AsIFNSQ19UT1A2LCA4LCAxKSwKKwlNVVgoMCwgIm1vdXRfc2Nsa19pcGxsIiwgbW91dF9pcGxsX3AsIFNSQ19UT1A2LCAxMiwgMSksCisJTVVYKDAsICJtb3V0X3NjbGtfcnBsbCIsIG1vdXRfcnBsbF9wLCBTUkNfVE9QNiwgMTYsIDEpLAorCU1VWCgwLCAibW91dF9zY2xrX2VwbGwiLCBtb3V0X2VwbGxfcCwgU1JDX1RPUDYsIDIwLCAxKSwKKwlNVVgoMCwgIm1vdXRfc2Nsa19kcGxsIiwgbW91dF9kcGxsX3AsIFNSQ19UT1A2LCAyNCwgMSksCisJTVVYKDAsICJtb3V0X3NjbGtfY3BsbCIsIG1vdXRfY3BsbF9wLCBTUkNfVE9QNiwgMjgsIDEpLAogCi0JTVVYKDAsICJtb3V0X3N3X2FjbGs0MDBfbXNjbCIsIHN3X2FjbGs0MDBfbXNjbF9wLCBTUkNfVE9QMTAsIDQsIDEpLAotCU1VWCgwLCAibW91dF9zd19hY2xrMjAwIiwgc3dfYWNsazIwMF9wLCBTUkNfVE9QMTAsIDgsIDEpLAotCU1VWCgwLCAibW91dF9zd19hY2xrMjAwX2ZzeXMyIiwgc3dfYWNsazIwMF9mc3lzMl9wLAorCU1VWCgwLCAibW91dF9zd19hY2xrNDAwX2lzcCIsIG1vdXRfc3dfYWNsazQwMF9pc3BfcCwKKwkJCVNSQ19UT1AxMCwgMCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGs0MDBfbXNjbCIsIG1vdXRfc3dfYWNsazQwMF9tc2NsX3AsCisJCQlTUkNfVE9QMTAsIDQsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMjAwIiwgbW91dF9zd19hY2xrMjAwX3AsIFNSQ19UT1AxMCwgOCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGsyMDBfZnN5czIiLCBtb3V0X3N3X2FjbGsyMDBfZnN5czJfcCwKIAkJCVNSQ19UT1AxMCwgMTIsIDEpLAotCU1VWCgwLCAibW91dF9zd19hY2xrMjAwX2ZzeXMiLCBzd19hY2xrMjAwX2ZzeXNfcCwgU1JDX1RPUDEwLCAyOCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGs0MDBfd2NvcmUiLCBtb3V0X3N3X2FjbGs0MDBfd2NvcmVfcCwKKwkJCVNSQ19UT1AxMCwgMTYsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMTAwX25vYyIsIG1vdXRfc3dfYWNsazEwMF9ub2NfcCwKKwkJCVNSQ19UT1AxMCwgMjAsIDEpLAorCU1VWCgwLCAibW91dF9zd19wY2xrMjAwX2ZzeXMiLCBtb3V0X3N3X3BjbGsyMDBfZnN5c19wLAorCQkJU1JDX1RPUDEwLCAyNCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGsyMDBfZnN5cyIsIG1vdXRfc3dfYWNsazIwMF9mc3lzX3AsCisJCQlTUkNfVE9QMTAsIDI4LCAxKSwKIAotCU1VWCgwLCAibW91dF9zd19hY2xrMzMzXzQzMl9nc2NsIiwgc3dfYWNsazMzM180MzJfZ3NjbF9wLAorCU1VWCgwLCAibW91dF9zd19hY2xrMzMzXzQzMl9nc2NsIiwgbW91dF9zd19hY2xrMzMzXzQzMl9nc2NsX3AsCiAJCQlTUkNfVE9QMTEsIDAsIDEpLAotCU1VWCgwLCAibW91dF9zd19hY2xrNjYiLCBzd19hY2xrNjZfcCwgU1JDX1RPUDExLCA4LCAxKSwKLQlNVVgoMCwgIm1vdXRfc3dfYWNsazI2NiIsIHN3X2FjbGsyNjZfcCwgU1JDX1RPUDExLCAyMCwgMSksCi0JTVVYKDAsICJtb3V0X3N3X2FjbGsxNjYiLCBzd19hY2xrMTY2X3AsIFNSQ19UT1AxMSwgMjQsIDEpLAotCU1VWCgwLCAibW91dF9zd19hY2xrMzMzIiwgc3dfYWNsazMzM19wLCBTUkNfVE9QMTEsIDI4LCAxKSwKKwlNVVgoMCwgIm1vdXRfc3dfYWNsazMzM180MzJfaXNwIiwgbW91dF9zd19hY2xrMzMzXzQzMl9pc3BfcCwKKwkJCVNSQ19UT1AxMSwgNCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGs2NiIsIG1vdXRfc3dfYWNsazY2X3AsIFNSQ19UT1AxMSwgOCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGszMzNfNDMyX2lzcDAiLCBtb3V0X3N3X2FjbGszMzNfNDMyX2lzcDBfcCwKKwkJCVNSQ19UT1AxMSwgMTIsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMjY2IiwgbW91dF9zd19hY2xrMjY2X3AsIFNSQ19UT1AxMSwgMjAsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMTY2IiwgbW91dF9zd19hY2xrMTY2X3AsIFNSQ19UT1AxMSwgMjQsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMzMzIiwgbW91dF9zd19hY2xrMzMzX3AsIFNSQ19UT1AxMSwgMjgsIDEpLAogCi0JTVVYKDAsICJtb3V0X3N3X2FjbGszMzNfZzJkIiwgc3dfYWNsazMzM19nMmRfcCwgU1JDX1RPUDEyLCA4LCAxKSwKLQlNVVgoMCwgIm1vdXRfc3dfYWNsazI2Nl9nMmQiLCBzd19hY2xrMjY2X2cyZF9wLCBTUkNfVE9QMTIsIDEyLCAxKSwKLQlNVVgoMCwgIm1vdXRfc3dfYWNsa19nM2QiLCBzd19hY2xrX2czZF9wLCBTUkNfVE9QMTIsIDE2LCAxKSwKLQlNVVgoMCwgIm1vdXRfc3dfYWNsazMwMF9qcGVnIiwgc3dfYWNsazMwMF9qcGVnX3AsIFNSQ19UT1AxMiwgMjAsIDEpLAotCU1VWCgwLCAibW91dF9zd19hY2xrMzAwX2Rpc3AxIiwgc3dfYWNsazMwMF9kaXNwMV9wLAorCU1VWCgwLCAibW91dF9zd19hY2xrNDAwX2Rpc3AxIiwgbW91dF9zd19hY2xrNDAwX2Rpc3AxX3AsCisJCQlTUkNfVE9QMTIsIDQsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMzMzX2cyZCIsIG1vdXRfc3dfYWNsazMzM19nMmRfcCwKKwkJCVNSQ19UT1AxMiwgOCwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGsyNjZfZzJkIiwgbW91dF9zd19hY2xrMjY2X2cyZF9wLAorCQkJU1JDX1RPUDEyLCAxMiwgMSksCisJTVVYKDAsICJtb3V0X3N3X2FjbGtfZzNkIiwgbW91dF9zd19hY2xrX2czZF9wLCBTUkNfVE9QMTIsIDE2LCAxKSwKKwlNVVgoMCwgIm1vdXRfc3dfYWNsazMwMF9qcGVnIiwgbW91dF9zd19hY2xrMzAwX2pwZWdfcCwKKwkJCVNSQ19UT1AxMiwgMjAsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMzAwX2Rpc3AxIiwgbW91dF9zd19hY2xrMzAwX2Rpc3AxX3AsCiAJCQlTUkNfVE9QMTIsIDI0LCAxKSwKLQlNVVgoMCwgIm1vdXRfc3dfYWNsazMwMF9nc2NsIiwgc3dfYWNsazMwMF9nc2NsX3AsIFNSQ19UT1AxMiwgMjgsIDEpLAorCU1VWCgwLCAibW91dF9zd19hY2xrMzAwX2dzY2wiLCBtb3V0X3N3X2FjbGszMDBfZ3NjbF9wLAorCQkJU1JDX1RPUDEyLCAyOCwgMSksCiAKIAkvKiBESVNQMSBCbG9jayAqLwotCU1VWCgwLCAibW91dF9maW1kMSIsIGdyb3VwM19wLCBTUkNfRElTUDEwLCA0LCAxKSwKLQlNVVgoMCwgIm1vdXRfbWlwaTEiLCBncm91cDJfcCwgU1JDX0RJU1AxMCwgMTYsIDMpLAotCU1VWCgwLCAibW91dF9kcDEiLCBncm91cDJfcCwgU1JDX0RJU1AxMCwgMjAsIDMpLAotCU1VWCgwLCAibW91dF9waXhlbCIsIGdyb3VwMl9wLCBTUkNfRElTUDEwLCAyNCwgMyksCi0JTVVYKENMS19NT1VUX0hETUksICJtb3V0X2hkbWkiLCBoZG1pX3AsIFNSQ19ESVNQMTAsIDI4LCAxKSwKKwlNVVgoMCwgIm1vdXRfbWlwaTEiLCBtb3V0X2dyb3VwMl9wLCBTUkNfRElTUDEwLCAxNiwgMyksCisJTVVYKDAsICJtb3V0X2RwMSIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19ESVNQMTAsIDIwLCAzKSwKKwlNVVgoMCwgIm1vdXRfcGl4ZWwiLCBtb3V0X2dyb3VwMl9wLCBTUkNfRElTUDEwLCAyNCwgMyksCisJTVVYKENMS19NT1VUX0hETUksICJtb3V0X2hkbWkiLCBtb3V0X2hkbWlfcCwgU1JDX0RJU1AxMCwgMjgsIDEpLAorCU1VWCgwLCAibW91dF9maW1kMV9vcHQiLCBtb3V0X2dyb3VwMl9wLCBTUkNfRElTUDEwLCA4LCAzKSwKKworCU1VWCgwLCAibW91dF9maW1kMV9maW5hbCIsIG1vdXRfZmltZDFfZmluYWxfcCwgVE9QX1NQQVJFMiwgOCwgMSksCiAKIAkvKiBNQVUgQmxvY2sgKi8KLQlNVVgoMCwgIm1vdXRfbWF1ZGlvMCIsIG1hdWRpbzBfcCwgU1JDX01BVSwgMjgsIDMpLAorCU1VWChDTEtfTU9VVF9NQVVESU8wLCAibW91dF9tYXVkaW8wIiwgbW91dF9tYXVkaW8wX3AsIFNSQ19NQVUsIDI4LCAzKSwKIAogCS8qIEZTWVMgQmxvY2sgKi8KLQlNVVgoMCwgIm1vdXRfdXNiZDMwMSIsIGdyb3VwMl9wLCBTUkNfRlNZUywgNCwgMyksCi0JTVVYKDAsICJtb3V0X21tYzAiLCBncm91cDJfcCwgU1JDX0ZTWVMsIDgsIDMpLAotCU1VWCgwLCAibW91dF9tbWMxIiwgZ3JvdXAyX3AsIFNSQ19GU1lTLCAxMiwgMyksCi0JTVVYKDAsICJtb3V0X21tYzIiLCBncm91cDJfcCwgU1JDX0ZTWVMsIDE2LCAzKSwKLQlNVVgoMCwgIm1vdXRfdXNiZDMwMCIsIGdyb3VwMl9wLCBTUkNfRlNZUywgMjAsIDMpLAotCU1VWCgwLCAibW91dF91bmlwcm8iLCBncm91cDJfcCwgU1JDX0ZTWVMsIDI0LCAzKSwKKwlNVVgoMCwgIm1vdXRfdXNiZDMwMSIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19GU1lTLCA0LCAzKSwKKwlNVVgoMCwgIm1vdXRfbW1jMCIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19GU1lTLCA4LCAzKSwKKwlNVVgoMCwgIm1vdXRfbW1jMSIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19GU1lTLCAxMiwgMyksCisJTVVYKDAsICJtb3V0X21tYzIiLCBtb3V0X2dyb3VwMl9wLCBTUkNfRlNZUywgMTYsIDMpLAorCU1VWCgwLCAibW91dF91c2JkMzAwIiwgbW91dF9ncm91cDJfcCwgU1JDX0ZTWVMsIDIwLCAzKSwKKwlNVVgoMCwgIm1vdXRfdW5pcHJvIiwgbW91dF9ncm91cDJfcCwgU1JDX0ZTWVMsIDI0LCAzKSwKKwlNVVgoMCwgIm1vdXRfbXBoeV9yZWZjbGsiLCBtb3V0X2dyb3VwMl9wLCBTUkNfRlNZUywgMjgsIDMpLAogCiAJLyogUEVSSUMgQmxvY2sgKi8KLQlNVVgoMCwgIm1vdXRfdWFydDAiLCBncm91cDJfcCwgU1JDX1BFUklDMCwgNCwgMyksCi0JTVVYKDAsICJtb3V0X3VhcnQxIiwgZ3JvdXAyX3AsIFNSQ19QRVJJQzAsIDgsIDMpLAotCU1VWCgwLCAibW91dF91YXJ0MiIsIGdyb3VwMl9wLCBTUkNfUEVSSUMwLCAxMiwgMyksCi0JTVVYKDAsICJtb3V0X3VhcnQzIiwgZ3JvdXAyX3AsIFNSQ19QRVJJQzAsIDE2LCAzKSwKLQlNVVgoMCwgIm1vdXRfcHdtIiwgZ3JvdXAyX3AsIFNSQ19QRVJJQzAsIDI0LCAzKSwKLQlNVVgoMCwgIm1vdXRfc3BkaWYiLCBzcGRpZl9wLCBTUkNfUEVSSUMwLCAyOCwgMyksCi0JTVVYKDAsICJtb3V0X2F1ZGlvMCIsIGF1ZGlvMF9wLCBTUkNfUEVSSUMxLCA4LCAzKSwKLQlNVVgoMCwgIm1vdXRfYXVkaW8xIiwgYXVkaW8xX3AsIFNSQ19QRVJJQzEsIDEyLCAzKSwKLQlNVVgoMCwgIm1vdXRfYXVkaW8yIiwgYXVkaW8yX3AsIFNSQ19QRVJJQzEsIDE2LCAzKSwKLQlNVVgoMCwgIm1vdXRfc3BpMCIsIGdyb3VwMl9wLCBTUkNfUEVSSUMxLCAyMCwgMyksCi0JTVVYKDAsICJtb3V0X3NwaTEiLCBncm91cDJfcCwgU1JDX1BFUklDMSwgMjQsIDMpLAotCU1VWCgwLCAibW91dF9zcGkyIiwgZ3JvdXAyX3AsIFNSQ19QRVJJQzEsIDI4LCAzKSwKKwlNVVgoMCwgIm1vdXRfdWFydDAiLCBtb3V0X2dyb3VwMl9wLCBTUkNfUEVSSUMwLCA0LCAzKSwKKwlNVVgoMCwgIm1vdXRfdWFydDEiLCBtb3V0X2dyb3VwMl9wLCBTUkNfUEVSSUMwLCA4LCAzKSwKKwlNVVgoMCwgIm1vdXRfdWFydDIiLCBtb3V0X2dyb3VwMl9wLCBTUkNfUEVSSUMwLCAxMiwgMyksCisJTVVYKDAsICJtb3V0X3VhcnQzIiwgbW91dF9ncm91cDJfcCwgU1JDX1BFUklDMCwgMTYsIDMpLAorCU1VWCgwLCAibW91dF9wd20iLCBtb3V0X2dyb3VwMl9wLCBTUkNfUEVSSUMwLCAyNCwgMyksCisJTVVYKDAsICJtb3V0X3NwZGlmIiwgbW91dF9zcGRpZl9wLCBTUkNfUEVSSUMwLCAyOCwgMyksCisJTVVYKDAsICJtb3V0X2F1ZGlvMCIsIG1vdXRfYXVkaW8wX3AsIFNSQ19QRVJJQzEsIDgsIDMpLAorCU1VWCgwLCAibW91dF9hdWRpbzEiLCBtb3V0X2F1ZGlvMV9wLCBTUkNfUEVSSUMxLCAxMiwgMyksCisJTVVYKDAsICJtb3V0X2F1ZGlvMiIsIG1vdXRfYXVkaW8yX3AsIFNSQ19QRVJJQzEsIDE2LCAzKSwKKwlNVVgoMCwgIm1vdXRfc3BpMCIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19QRVJJQzEsIDIwLCAzKSwKKwlNVVgoMCwgIm1vdXRfc3BpMSIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19QRVJJQzEsIDI0LCAzKSwKKwlNVVgoMCwgIm1vdXRfc3BpMiIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19QRVJJQzEsIDI4LCAzKSwKKworCS8qIElTUCBCbG9jayAqLworCU1VWCgwLCAibW91dF9wd21faXNwIiwgbW91dF9ncm91cDJfcCwgU1JDX0lTUCwgMjQsIDMpLAorCU1VWCgwLCAibW91dF91YXJ0X2lzcCIsIG1vdXRfZ3JvdXAyX3AsIFNSQ19JU1AsIDIwLCAzKSwKKwlNVVgoMCwgIm1vdXRfc3BpMF9pc3AiLCBtb3V0X2dyb3VwMl9wLCBTUkNfSVNQLCAxMiwgMyksCisJTVVYKDAsICJtb3V0X3NwaTFfaXNwIiwgbW91dF9ncm91cDJfcCwgU1JDX0lTUCwgMTYsIDMpLAorCU1VWCgwLCAibW91dF9pc3Bfc2Vuc29yIiwgbW91dF9ncm91cDJfcCwgU1JDX0lTUCwgMjgsIDMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBleHlub3M1NDIwX2Rpdl9jbGtzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgZXh5bm9zNXhfZGl2X2Nsa3NbXSBfX2luaXRkYXRhID0gewogCURJVigwLCAiZGl2X2FybSIsICJtb3V0X2NwdSIsIERJVl9DUFUwLCAwLCAzKSwKIAlESVYoMCwgInNjbGtfYXBsbCIsICJtb3V0X2FwbGwiLCBESVZfQ1BVMCwgMjQsIDMpLAogCURJVigwLCAiYXJtY2xrMiIsICJkaXZfYXJtIiwgRElWX0NQVTAsIDI4LCAzKSwKLQlESVYoMCwgImRpdl9rZmMiLCAibW91dF9jcHVfa2ZjIiwgRElWX0tGQzAsIDAsIDMpLAorCURJVigwLCAiZGl2X2tmYyIsICJtb3V0X2tmYyIsIERJVl9LRkMwLCAwLCAzKSwKIAlESVYoMCwgInNjbGtfa3BsbCIsICJtb3V0X2twbGwiLCBESVZfS0ZDMCwgMjQsIDMpLAogCisJRElWKDAsICJkb3V0X2FjbGs0MDBfaXNwIiwgIm1vdXRfYWNsazQwMF9pc3AiLCBESVZfVE9QMCwgMCwgMyksCiAJRElWKDAsICJkb3V0X2FjbGs0MDBfbXNjbCIsICJtb3V0X2FjbGs0MDBfbXNjbCIsIERJVl9UT1AwLCA0LCAzKSwKIAlESVYoMCwgImRvdXRfYWNsazIwMCIsICJtb3V0X2FjbGsyMDAiLCBESVZfVE9QMCwgOCwgMyksCiAJRElWKDAsICJkb3V0X2FjbGsyMDBfZnN5czIiLCAibW91dF9hY2xrMjAwX2ZzeXMyIiwgRElWX1RPUDAsIDEyLCAzKSwKKwlESVYoMCwgImRvdXRfYWNsazEwMF9ub2MiLCAibW91dF9hY2xrMTAwX25vYyIsIERJVl9UT1AwLCAyMCwgMyksCiAJRElWKDAsICJkb3V0X3BjbGsyMDBfZnN5cyIsICJtb3V0X3BjbGsyMDBfZnN5cyIsIERJVl9UT1AwLCAyNCwgMyksCiAJRElWKDAsICJkb3V0X2FjbGsyMDBfZnN5cyIsICJtb3V0X2FjbGsyMDBfZnN5cyIsIERJVl9UT1AwLCAyOCwgMyksCiAKIAlESVYoMCwgImRvdXRfYWNsazMzM180MzJfZ3NjbCIsICJtb3V0X2FjbGszMzNfNDMyX2dzY2wiLAogCQkJRElWX1RPUDEsIDAsIDMpLAorCURJVigwLCAiZG91dF9hY2xrMzMzXzQzMl9pc3AiLCAibW91dF9hY2xrMzMzXzQzMl9pc3AiLAorCQkJRElWX1RPUDEsIDQsIDMpLAogCURJVigwLCAiZG91dF9hY2xrNjYiLCAibW91dF9hY2xrNjYiLCBESVZfVE9QMSwgOCwgNiksCisJRElWKDAsICJkb3V0X2FjbGszMzNfNDMyX2lzcDAiLCAibW91dF9hY2xrMzMzXzQzMl9pc3AwIiwKKwkJCURJVl9UT1AxLCAxNiwgMyksCiAJRElWKDAsICJkb3V0X2FjbGsyNjYiLCAibW91dF9hY2xrMjY2IiwgRElWX1RPUDEsIDIwLCAzKSwKIAlESVYoMCwgImRvdXRfYWNsazE2NiIsICJtb3V0X2FjbGsxNjYiLCBESVZfVE9QMSwgMjQsIDMpLAogCURJVigwLCAiZG91dF9hY2xrMzMzIiwgIm1vdXRfYWNsazMzMyIsIERJVl9UT1AxLCAyOCwgMyksCkBAIC00NTgsMTUgKzc3MywxNiBAQAogCURJVigwLCAiZG91dF9hY2xrMjY2X2cyZCIsICJtb3V0X2FjbGsyNjZfZzJkIiwgRElWX1RPUDIsIDEyLCAzKSwKIAlESVYoMCwgImRvdXRfYWNsa19nM2QiLCAibW91dF9hY2xrX2czZCIsIERJVl9UT1AyLCAxNiwgMyksCiAJRElWKDAsICJkb3V0X2FjbGszMDBfanBlZyIsICJtb3V0X2FjbGszMDBfanBlZyIsIERJVl9UT1AyLCAyMCwgMyksCi0JRElWX0EoMCwgImRvdXRfYWNsazMwMF9kaXNwMSIsICJtb3V0X2FjbGszMDBfZGlzcDEiLAotCQkJRElWX1RPUDIsIDI0LCAzLCAiYWNsazMwMF9kaXNwMSIpLAorCURJVigwLCAiZG91dF9hY2xrMzAwX2Rpc3AxIiwgIm1vdXRfYWNsazMwMF9kaXNwMSIsIERJVl9UT1AyLCAyNCwgMyksCiAJRElWKDAsICJkb3V0X2FjbGszMDBfZ3NjbCIsICJtb3V0X2FjbGszMDBfZ3NjbCIsIERJVl9UT1AyLCAyOCwgMyksCiAKIAkvKiBESVNQMSBCbG9jayAqLwotCURJVigwLCAiZG91dF9maW1kMSIsICJtb3V0X2ZpbWQxIiwgRElWX0RJU1AxMCwgMCwgNCksCisJRElWKDAsICJkb3V0X2ZpbWQxIiwgIm1vdXRfZmltZDFfZmluYWwiLCBESVZfRElTUDEwLCAwLCA0KSwKIAlESVYoMCwgImRvdXRfbWlwaTEiLCAibW91dF9taXBpMSIsIERJVl9ESVNQMTAsIDE2LCA4KSwKIAlESVYoMCwgImRvdXRfZHAxIiwgIm1vdXRfZHAxIiwgRElWX0RJU1AxMCwgMjQsIDQpLAogCURJVihDTEtfRE9VVF9QSVhFTCwgImRvdXRfaGRtaV9waXhlbCIsICJtb3V0X3BpeGVsIiwgRElWX0RJU1AxMCwgMjgsIDQpLAorCURJVigwLCAiZG91dF9kaXNwMV9ibGsiLCAiYWNsazIwMF9kaXNwMSIsIERJVjJfUkFUSU8wLCAxNiwgMiksCisJRElWKDAsICJkb3V0X2FjbGs0MDBfZGlzcDEiLCAibW91dF9hY2xrNDAwX2Rpc3AxIiwgRElWX1RPUDIsIDQsIDMpLAogCiAJLyogQXVkaW8gQmxvY2sgKi8KIAlESVYoMCwgImRvdXRfbWF1ZGlvMCIsICJtb3V0X21hdWRpbzAiLCBESVZfTUFVLCAyMCwgNCksCkBAIC00ODQsNiArODAwLDcgQEAKIAlESVYoMCwgImRvdXRfbW1jMiIsICJtb3V0X21tYzIiLCBESVZfRlNZUzEsIDIwLCAxMCksCiAKIAlESVYoMCwgImRvdXRfdW5pcHJvIiwgIm1vdXRfdW5pcHJvIiwgRElWX0ZTWVMyLCAyNCwgOCksCisJRElWKDAsICJkb3V0X21waHlfcmVmY2xrIiwgIm1vdXRfbXBoeV9yZWZjbGsiLCBESVZfRlNZUzIsIDE2LCA4KSwKIAogCS8qIFVBUlQgYW5kIFBXTSAqLwogCURJVigwLCAiZG91dF91YXJ0MCIsICJtb3V0X3VhcnQwIiwgRElWX1BFUklDMCwgOCwgNCksCkBAIC00OTcsNiArODE0LDkgQEAKIAlESVYoMCwgImRvdXRfc3BpMSIsICJtb3V0X3NwaTEiLCBESVZfUEVSSUMxLCAyNCwgNCksCiAJRElWKDAsICJkb3V0X3NwaTIiLCAibW91dF9zcGkyIiwgRElWX1BFUklDMSwgMjgsIDQpLAogCisJLyogTWZjIEJsb2NrICovCisJRElWKDAsICJkb3V0X21mY19ibGsiLCAibW91dF91c2VyX2FjbGszMzMiLCBESVY0X1JBVElPLCAwLCAyKSwKKwogCS8qIFBDTSAqLwogCURJVigwLCAiZG91dF9wY20xIiwgImRvdXRfYXVkaW8xIiwgRElWX1BFUklDMiwgMTYsIDgpLAogCURJVigwLCAiZG91dF9wY20yIiwgImRvdXRfYXVkaW8yIiwgRElWX1BFUklDMiwgMjQsIDgpLApAQCAtNTA5LDE1ICs4MjksNDMgQEAKIAlESVYoMCwgImRvdXRfYXVkaW8yIiwgIm1vdXRfYXVkaW8yIiwgRElWX1BFUklDMywgMjgsIDQpLAogCiAJLyogU1BJIFByZS1SYXRpbyAqLwotCURJVigwLCAiZG91dF9wcmVfc3BpMCIsICJkb3V0X3NwaTAiLCBESVZfUEVSSUM0LCA4LCA4KSwKLQlESVYoMCwgImRvdXRfcHJlX3NwaTEiLCAiZG91dF9zcGkxIiwgRElWX1BFUklDNCwgMTYsIDgpLAotCURJVigwLCAiZG91dF9wcmVfc3BpMiIsICJkb3V0X3NwaTIiLCBESVZfUEVSSUM0LCAyNCwgOCksCisJRElWKDAsICJkb3V0X3NwaTBfcHJlIiwgImRvdXRfc3BpMCIsIERJVl9QRVJJQzQsIDgsIDgpLAorCURJVigwLCAiZG91dF9zcGkxX3ByZSIsICJkb3V0X3NwaTEiLCBESVZfUEVSSUM0LCAxNiwgOCksCisJRElWKDAsICJkb3V0X3NwaTJfcHJlIiwgImRvdXRfc3BpMiIsIERJVl9QRVJJQzQsIDI0LCA4KSwKKworCS8qIEdTQ0wgQmxvY2sgKi8KKwlESVYoMCwgImRvdXRfZ3NjbF9ibGtfMzAwIiwgIm1vdXRfdXNlcl9hY2xrMzAwX2dzY2wiLAorCQkJRElWMl9SQVRJTzAsIDQsIDIpLAorCURJVigwLCAiZG91dF9nc2NsX2Jsa18zMzMiLCAiYWNsazMzM180MzJfZ3NjbCIsIERJVjJfUkFUSU8wLCA2LCAyKSwKKworCS8qIE1TQ0wgQmxvY2sgKi8KKwlESVYoMCwgImRvdXRfbXNjbF9ibGsiLCAiYWNsazQwMF9tc2NsIiwgRElWMl9SQVRJTzAsIDI4LCAyKSwKKworCS8qIFBTR0VOICovCisJRElWKDAsICJkb3V0X2dlbl9ibGsiLCAibW91dF91c2VyX2FjbGsyNjYiLCBESVYyX1JBVElPMCwgOCwgMSksCisJRElWKDAsICJkb3V0X2pwZ19ibGsiLCAiYWNsazE2NiIsIERJVjJfUkFUSU8wLCAyMCwgMSksCisKKwkvKiBJU1AgQmxvY2sgKi8KKwlESVYoMCwgImRvdXRfaXNwX3NlbnNvcjAiLCAibW91dF9pc3Bfc2Vuc29yIiwgU0NMS19ESVZfSVNQMCwgOCwgOCksCisJRElWKDAsICJkb3V0X2lzcF9zZW5zb3IxIiwgIm1vdXRfaXNwX3NlbnNvciIsIFNDTEtfRElWX0lTUDAsIDE2LCA4KSwKKwlESVYoMCwgImRvdXRfaXNwX3NlbnNvcjIiLCAibW91dF9pc3Bfc2Vuc29yIiwgU0NMS19ESVZfSVNQMCwgMjQsIDgpLAorCURJVigwLCAiZG91dF9wd21faXNwIiwgIm1vdXRfcHdtX2lzcCIsIFNDTEtfRElWX0lTUDEsIDI4LCA0KSwKKwlESVYoMCwgImRvdXRfdWFydF9pc3AiLCAibW91dF91YXJ0X2lzcCIsIFNDTEtfRElWX0lTUDEsIDI0LCA0KSwKKwlESVYoMCwgImRvdXRfc3BpMF9pc3AiLCAibW91dF9zcGkwX2lzcCIsIFNDTEtfRElWX0lTUDEsIDE2LCA0KSwKKwlESVYoMCwgImRvdXRfc3BpMV9pc3AiLCAibW91dF9zcGkxX2lzcCIsIFNDTEtfRElWX0lTUDEsIDIwLCA0KSwKKwlESVZfRigwLCAiZG91dF9zcGkwX2lzcF9wcmUiLCAiZG91dF9zcGkwX2lzcCIsIFNDTEtfRElWX0lTUDEsIDAsIDgsCisJCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlESVZfRigwLCAiZG91dF9zcGkxX2lzcF9wcmUiLCAiZG91dF9zcGkxX2lzcCIsIFNDTEtfRElWX0lTUDEsIDgsIDgsCisJCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrIGV4eW5vczU0MjBfZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKLQkvKiBUT0RPOiBSZS12ZXJpZnkgdGhlIENHIGJpdHMgZm9yIGFsbCB0aGUgZ2F0ZSBjbG9ja3MgKi8KLQlHQVRFX0EoQ0xLX01DVCwgInBjbGtfc3QiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9CVVNfUEVSSVMxLCAyLCAwLCAwLAotCQkibWN0IiksCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBleHlub3M1eF9nYXRlX2Nsa3NbXSBfX2luaXRkYXRhID0geworCS8qIEcyRCAqLworCUdBVEUoQ0xLX01ETUEwLCAibWRtYTAiLCAiYWNsazI2Nl9nMmQiLCBHQVRFX0lQX0cyRCwgMSwgMCwgMCksCisJR0FURShDTEtfU1NTLCAic3NzIiwgImFjbGsyNjZfZzJkIiwgR0FURV9JUF9HMkQsIDIsIDAsIDApLAorCUdBVEUoQ0xLX0cyRCwgImcyZCIsICJhY2xrMzMzX2cyZCIsIEdBVEVfSVBfRzJELCAzLCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX01ETUEwLCAic21tdV9tZG1hMCIsICJhY2xrMjY2X2cyZCIsIEdBVEVfSVBfRzJELCA1LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0cyRCwgInNtbXVfZzJkIiwgImFjbGszMzNfZzJkIiwgR0FURV9JUF9HMkQsIDcsIDAsIDApLAogCiAJR0FURSgwLCAiYWNsazIwMF9mc3lzIiwgIm1vdXRfdXNlcl9hY2xrMjAwX2ZzeXMiLAogCQkJR0FURV9CVVNfRlNZUzAsIDksIENMS19JR05PUkVfVU5VU0VELCAwKSwKQEAgLTUzMCwyMCArODc4LDQyIEBACiAJCQlHQVRFX0JVU19UT1AsIDEsIENMS19JR05PUkVfVU5VU0VELCAwKSwKIAlHQVRFKDAsICJhY2xrMzAwX2pwZWciLCAibW91dF91c2VyX2FjbGszMDBfanBlZyIsCiAJCQlHQVRFX0JVU19UT1AsIDQsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKDAsICJhY2xrMzMzXzQzMl9pc3AwIiwgIm1vdXRfdXNlcl9hY2xrMzMzXzQzMl9pc3AwIiwKKwkJCUdBVEVfQlVTX1RPUCwgNSwgMCwgMCksCiAJR0FURSgwLCAiYWNsazMwMF9nc2NsIiwgIm1vdXRfdXNlcl9hY2xrMzAwX2dzY2wiLAogCQkJR0FURV9CVVNfVE9QLCA2LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCiAJR0FURSgwLCAiYWNsazMzM180MzJfZ3NjbCIsICJtb3V0X3VzZXJfYWNsazMzM180MzJfZ3NjbCIsCiAJCQlHQVRFX0JVU19UT1AsIDcsIENMS19JR05PUkVfVU5VU0VELCAwKSwKLQlHQVRFKDAsICJwY2xrNjZfZ3BpbyIsICJtb3V0X3N3X2FjbGs2NiIsCisJR0FURSgwLCAiYWNsazMzM180MzJfaXNwIiwgIm1vdXRfdXNlcl9hY2xrMzMzXzQzMl9pc3AiLAorCQkJR0FURV9CVVNfVE9QLCA4LCAwLCAwKSwKKwlHQVRFKENMS19QQ0xLNjZfR1BJTywgInBjbGs2Nl9ncGlvIiwgIm1vdXRfdXNlcl9wY2xrNjZfZ3BpbyIsCiAJCQlHQVRFX0JVU19UT1AsIDksIENMS19JR05PUkVfVU5VU0VELCAwKSwKLQlHQVRFKDAsICJhY2xrNjZfcHNnZW4iLCAibW91dF9hY2xrNjZfcHNnZW4iLAorCUdBVEUoMCwgImFjbGs2Nl9wc2dlbiIsICJtb3V0X3VzZXJfYWNsazY2X3BzZ2VuIiwKIAkJCUdBVEVfQlVTX1RPUCwgMTAsIENMS19JR05PUkVfVU5VU0VELCAwKSwKLQlHQVRFKDAsICJhY2xrNjZfcGVyaWMiLCAibW91dF9hY2xrNjZfcGVyaWMiLAotCQkJR0FURV9CVVNfVE9QLCAxMSwgMCwgMCksCisJR0FURShDTEtfQUNMSzY2X1BFUklDLCAiYWNsazY2X3BlcmljIiwgIm1vdXRfdXNlcl9hY2xrNjZfcGVyaWMiLAorCQkJR0FURV9CVVNfVE9QLCAxMSwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoMCwgImFjbGsyNjZfaXNwIiwgIm1vdXRfdXNlcl9hY2xrMjY2X2lzcCIsCisJCQlHQVRFX0JVU19UT1AsIDEzLCAwLCAwKSwKIAlHQVRFKDAsICJhY2xrMTY2IiwgIm1vdXRfdXNlcl9hY2xrMTY2IiwKIAkJCUdBVEVfQlVTX1RPUCwgMTQsIENMS19JR05PUkVfVU5VU0VELCAwKSwKIAlHQVRFKDAsICJhY2xrMzMzIiwgIm1vdXRfYWNsazMzMyIsCiAJCQlHQVRFX0JVU19UT1AsIDE1LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURSgwLCAiYWNsazQwMF9pc3AiLCAibW91dF91c2VyX2FjbGs0MDBfaXNwIiwKKwkJCUdBVEVfQlVTX1RPUCwgMTYsIDAsIDApLAorCUdBVEUoMCwgImFjbGs0MDBfbXNjbCIsICJtb3V0X3VzZXJfYWNsazQwMF9tc2NsIiwKKwkJCUdBVEVfQlVTX1RPUCwgMTcsIDAsIDApLAorCUdBVEUoMCwgImFjbGsyMDBfZGlzcDEiLCAibW91dF91c2VyX2FjbGsyMDBfZGlzcDEiLAorCQkJR0FURV9CVVNfVE9QLCAxOCwgMCwgMCksCisJR0FURShDTEtfU0NMS19NUEhZX0lYVEFMMjQsICJzY2xrX21waHlfaXh0YWwyNCIsICJtcGh5X3JlZmNsa19peHRhbDI0IiwKKwkJCUdBVEVfQlVTX1RPUCwgMjgsIDAsIDApLAorCUdBVEUoQ0xLX1NDTEtfSFNJQ18xMk0sICJzY2xrX2hzaWNfMTJtIiwgImZmX2hzaWNfMTJtIiwKKwkJCUdBVEVfQlVTX1RPUCwgMjksIDAsIDApLAorCisJR0FURSgwLCAiYWNsazMwMF9kaXNwMSIsICJtb3V0X3VzZXJfYWNsazMwMF9kaXNwMSIsCisJCQlTUkNfTUFTS19UT1AyLCAyNCwgMCwgMCksCisKKwlHQVRFKENMS19NQVVfRVBMTCwgIm1hdV9lcGxsIiwgIm1vdXRfbWF1X2VwbGxfY2xrIiwKKwkJCVNSQ19NQVNLX1RPUDcsIDIwLCAwLCAwKSwKIAogCS8qIHNjbGsgKi8KIAlHQVRFKENMS19TQ0xLX1VBUlQwLCAic2Nsa191YXJ0MCIsICJkb3V0X3VhcnQwIiwKQEAgLTU1NCwxMSArOTI0LDExIEBACiAJCUdBVEVfVE9QX1NDTEtfUEVSSUMsIDIsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAogCUdBVEUoQ0xLX1NDTEtfVUFSVDMsICJzY2xrX3VhcnQzIiwgImRvdXRfdWFydDMiLAogCQlHQVRFX1RPUF9TQ0xLX1BFUklDLCAzLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKLQlHQVRFKENMS19TQ0xLX1NQSTAsICJzY2xrX3NwaTAiLCAiZG91dF9wcmVfc3BpMCIsCisJR0FURShDTEtfU0NMS19TUEkwLCAic2Nsa19zcGkwIiwgImRvdXRfc3BpMF9wcmUiLAogCQlHQVRFX1RPUF9TQ0xLX1BFUklDLCA2LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKLQlHQVRFKENMS19TQ0xLX1NQSTEsICJzY2xrX3NwaTEiLCAiZG91dF9wcmVfc3BpMSIsCisJR0FURShDTEtfU0NMS19TUEkxLCAic2Nsa19zcGkxIiwgImRvdXRfc3BpMV9wcmUiLAogCQlHQVRFX1RPUF9TQ0xLX1BFUklDLCA3LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKLQlHQVRFKENMS19TQ0xLX1NQSTIsICJzY2xrX3NwaTIiLCAiZG91dF9wcmVfc3BpMiIsCisJR0FURShDTEtfU0NMS19TUEkyLCAic2Nsa19zcGkyIiwgImRvdXRfc3BpMl9wcmUiLAogCQlHQVRFX1RPUF9TQ0xLX1BFUklDLCA4LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKIAlHQVRFKENMS19TQ0xLX1NQRElGLCAic2Nsa19zcGRpZiIsICJtb3V0X3NwZGlmIiwKIAkJR0FURV9UT1BfU0NMS19QRVJJQywgOSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCkBAIC01ODgsMTY0ICs5NTgsMTkxIEBACiAJR0FURShDTEtfU0NMS19VU0JEMzAxLCAic2Nsa191c2JkMzAxIiwgImRvdXRfdXNiZDMwMSIsCiAJCUdBVEVfVE9QX1NDTEtfRlNZUywgMTAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAogCi0JR0FURShDTEtfU0NMS19VU0JEMzAxLCAic2Nsa191bmlwcm8iLCAiZG91dF91bmlwcm8iLAotCQlTUkNfTUFTS19GU1lTLCAyNCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCi0KLQlHQVRFKENMS19TQ0xLX0dTQ0xfV0EsICJzY2xrX2dzY2xfd2EiLCAiYWNsSzMzM180MzJfZ3NjbCIsCi0JCUdBVEVfVE9QX1NDTEtfR1NDTCwgNiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCi0JR0FURShDTEtfU0NMS19HU0NMX1dCLCAic2Nsa19nc2NsX3diIiwgImFjbGszMzNfNDMyX2dzY2wiLAotCQlHQVRFX1RPUF9TQ0xLX0dTQ0wsIDcsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAotCiAJLyogRGlzcGxheSAqLwogCUdBVEUoQ0xLX1NDTEtfRklNRDEsICJzY2xrX2ZpbWQxIiwgImRvdXRfZmltZDEiLAotCQlHQVRFX1RPUF9TQ0xLX0RJU1AxLCAwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwkJCUdBVEVfVE9QX1NDTEtfRElTUDEsIDAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAogCUdBVEUoQ0xLX1NDTEtfTUlQSTEsICJzY2xrX21pcGkxIiwgImRvdXRfbWlwaTEiLAotCQlHQVRFX1RPUF9TQ0xLX0RJU1AxLCAzLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwkJCUdBVEVfVE9QX1NDTEtfRElTUDEsIDMsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAogCUdBVEUoQ0xLX1NDTEtfSERNSSwgInNjbGtfaGRtaSIsICJtb3V0X2hkbWkiLAotCQlHQVRFX1RPUF9TQ0xLX0RJU1AxLCA5LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwkJCUdBVEVfVE9QX1NDTEtfRElTUDEsIDksIDAsIDApLAogCUdBVEUoQ0xLX1NDTEtfUElYRUwsICJzY2xrX3BpeGVsIiwgImRvdXRfaGRtaV9waXhlbCIsCi0JCUdBVEVfVE9QX1NDTEtfRElTUDEsIDEwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwkJCUdBVEVfVE9QX1NDTEtfRElTUDEsIDEwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKIAlHQVRFKENMS19TQ0xLX0RQMSwgInNjbGtfZHAxIiwgImRvdXRfZHAxIiwKLQkJR0FURV9UT1BfU0NMS19ESVNQMSwgMjAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCQkJR0FURV9UT1BfU0NMS19ESVNQMSwgMjAsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAogCiAJLyogTWF1ZGlvIEJsb2NrICovCiAJR0FURShDTEtfU0NMS19NQVVESU8wLCAic2Nsa19tYXVkaW8wIiwgImRvdXRfbWF1ZGlvMCIsCiAJCUdBVEVfVE9QX1NDTEtfTUFVLCAwLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKIAlHQVRFKENMS19TQ0xLX01BVVBDTTAsICJzY2xrX21hdXBjbTAiLCAiZG91dF9tYXVwY20wIiwKIAkJR0FURV9UT1BfU0NMS19NQVUsIDEsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAotCS8qIEZTWVMgKi8KKworCS8qIEZTWVMgQmxvY2sgKi8KIAlHQVRFKENMS19UU0ksICJ0c2kiLCAiYWNsazIwMF9mc3lzIiwgR0FURV9CVVNfRlNZUzAsIDAsIDAsIDApLAogCUdBVEUoQ0xLX1BETUEwLCAicGRtYTAiLCAiYWNsazIwMF9mc3lzIiwgR0FURV9CVVNfRlNZUzAsIDEsIDAsIDApLAogCUdBVEUoQ0xLX1BETUExLCAicGRtYTEiLCAiYWNsazIwMF9mc3lzIiwgR0FURV9CVVNfRlNZUzAsIDIsIDAsIDApLAogCUdBVEUoQ0xLX1VGUywgInVmcyIsICJhY2xrMjAwX2ZzeXMyIiwgR0FURV9CVVNfRlNZUzAsIDMsIDAsIDApLAotCUdBVEUoQ0xLX1JUSUMsICJydGljIiwgImFjbGsyMDBfZnN5cyIsIEdBVEVfQlVTX0ZTWVMwLCA1LCAwLCAwKSwKLQlHQVRFKENMS19NTUMwLCAibW1jMCIsICJhY2xrMjAwX2ZzeXMyIiwgR0FURV9CVVNfRlNZUzAsIDEyLCAwLCAwKSwKLQlHQVRFKENMS19NTUMxLCAibW1jMSIsICJhY2xrMjAwX2ZzeXMyIiwgR0FURV9CVVNfRlNZUzAsIDEzLCAwLCAwKSwKLQlHQVRFKENMS19NTUMyLCAibW1jMiIsICJhY2xrMjAwX2ZzeXMyIiwgR0FURV9CVVNfRlNZUzAsIDE0LCAwLCAwKSwKKwlHQVRFKENMS19SVElDLCAicnRpYyIsICJhY2xrMjAwX2ZzeXMiLCBHQVRFX0lQX0ZTWVMsIDksIDAsIDApLAorCUdBVEUoQ0xLX01NQzAsICJtbWMwIiwgImFjbGsyMDBfZnN5czIiLCBHQVRFX0lQX0ZTWVMsIDEyLCAwLCAwKSwKKwlHQVRFKENMS19NTUMxLCAibW1jMSIsICJhY2xrMjAwX2ZzeXMyIiwgR0FURV9JUF9GU1lTLCAxMywgMCwgMCksCisJR0FURShDTEtfTU1DMiwgIm1tYzIiLCAiYWNsazIwMF9mc3lzMiIsIEdBVEVfSVBfRlNZUywgMTQsIDAsIDApLAogCUdBVEUoQ0xLX1NST01DLCAic3JvbWMiLCAiYWNsazIwMF9mc3lzMiIsCi0JCQlHQVRFX0JVU19GU1lTMCwgMTksIENMS19JR05PUkVfVU5VU0VELCAwKSwKLQlHQVRFKENMS19VU0JIMjAsICJ1c2JoMjAiLCAiYWNsazIwMF9mc3lzIiwgR0FURV9CVVNfRlNZUzAsIDIwLCAwLCAwKSwKLQlHQVRFKENMS19VU0JEMzAwLCAidXNiZDMwMCIsICJhY2xrMjAwX2ZzeXMiLCBHQVRFX0JVU19GU1lTMCwgMjEsIDAsIDApLAotCUdBVEUoQ0xLX1VTQkQzMDEsICJ1c2JkMzAxIiwgImFjbGsyMDBfZnN5cyIsIEdBVEVfQlVTX0ZTWVMwLCAyOCwgMCwgMCksCisJCQlHQVRFX0lQX0ZTWVMsIDE3LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShDTEtfVVNCSDIwLCAidXNiaDIwIiwgImFjbGsyMDBfZnN5cyIsIEdBVEVfSVBfRlNZUywgMTgsIDAsIDApLAorCUdBVEUoQ0xLX1VTQkQzMDAsICJ1c2JkMzAwIiwgImFjbGsyMDBfZnN5cyIsIEdBVEVfSVBfRlNZUywgMTksIDAsIDApLAorCUdBVEUoQ0xLX1VTQkQzMDEsICJ1c2JkMzAxIiwgImFjbGsyMDBfZnN5cyIsIEdBVEVfSVBfRlNZUywgMjAsIDAsIDApLAorCUdBVEUoQ0xLX1NDTEtfVU5JUFJPLCAic2Nsa191bmlwcm8iLCAiZG91dF91bmlwcm8iLAorCQkJU1JDX01BU0tfRlNZUywgMjQsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAogCi0JLyogVUFSVCAqLwotCUdBVEUoQ0xLX1VBUlQwLCAidWFydDAiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDQsIDAsIDApLAotCUdBVEUoQ0xLX1VBUlQxLCAidWFydDEiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDUsIDAsIDApLAotCUdBVEVfQShDTEtfVUFSVDIsICJ1YXJ0MiIsICJhY2xrNjZfcGVyaWMiLAotCQlHQVRFX0JVU19QRVJJQywgNiwgQ0xLX0lHTk9SRV9VTlVTRUQsIDAsICJ1YXJ0MiIpLAotCUdBVEUoQ0xLX1VBUlQzLCAidWFydDMiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDcsIDAsIDApLAotCS8qIEkyQyAqLwotCUdBVEUoQ0xLX0kyQzAsICJpMmMwIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfQlVTX1BFUklDLCA5LCAwLCAwKSwKLQlHQVRFKENMS19JMkMxLCAiaTJjMSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMTAsIDAsIDApLAotCUdBVEUoQ0xLX0kyQzIsICJpMmMyIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfQlVTX1BFUklDLCAxMSwgMCwgMCksCi0JR0FURShDTEtfSTJDMywgImkyYzMiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDEyLCAwLCAwKSwKLQlHQVRFKENMS19JMkM0LCAiaTJjNCIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMTMsIDAsIDApLAotCUdBVEUoQ0xLX0kyQzUsICJpMmM1IiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfQlVTX1BFUklDLCAxNCwgMCwgMCksCi0JR0FURShDTEtfSTJDNiwgImkyYzYiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDE1LCAwLCAwKSwKLQlHQVRFKENMS19JMkM3LCAiaTJjNyIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMTYsIDAsIDApLAotCUdBVEUoQ0xLX0kyQ19IRE1JLCAiaTJjX2hkbWkiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDE3LCAwLAotCQkwKSwKLQlHQVRFKENMS19UU0FEQywgInRzYWRjIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfQlVTX1BFUklDLCAxOCwgMCwgMCksCi0JLyogU1BJICovCi0JR0FURShDTEtfU1BJMCwgInNwaTAiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDE5LCAwLCAwKSwKLQlHQVRFKENMS19TUEkxLCAic3BpMSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMjAsIDAsIDApLAotCUdBVEUoQ0xLX1NQSTIsICJzcGkyIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfQlVTX1BFUklDLCAyMSwgMCwgMCksCisJLyogUEVSSUMgQmxvY2sgKi8KKwlHQVRFKENMS19VQVJUMCwgInVhcnQwIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDAsIDAsIDApLAorCUdBVEUoQ0xLX1VBUlQxLCAidWFydDEiLCAiYWNsazY2X3BlcmljIiwgR0FURV9JUF9QRVJJQywgMSwgMCwgMCksCisJR0FURShDTEtfVUFSVDIsICJ1YXJ0MiIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0lQX1BFUklDLCAyLCAwLCAwKSwKKwlHQVRFKENMS19VQVJUMywgInVhcnQzIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDMsIDAsIDApLAorCUdBVEUoQ0xLX0kyQzAsICJpMmMwIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDYsIDAsIDApLAorCUdBVEUoQ0xLX0kyQzEsICJpMmMxIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDcsIDAsIDApLAorCUdBVEUoQ0xLX0kyQzIsICJpMmMyIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDgsIDAsIDApLAorCUdBVEUoQ0xLX0kyQzMsICJpMmMzIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDksIDAsIDApLAorCUdBVEUoQ0xLX1VTSTAsICJ1c2kwIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDEwLCAwLCAwKSwKKwlHQVRFKENMS19VU0kxLCAidXNpMSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0lQX1BFUklDLCAxMSwgMCwgMCksCisJR0FURShDTEtfVVNJMiwgInVzaTIiLCAiYWNsazY2X3BlcmljIiwgR0FURV9JUF9QRVJJQywgMTIsIDAsIDApLAorCUdBVEUoQ0xLX1VTSTMsICJ1c2kzIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDEzLCAwLCAwKSwKKwlHQVRFKENMS19JMkNfSERNSSwgImkyY19oZG1pIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDE0LCAwLCAwKSwKKwlHQVRFKENMS19UU0FEQywgInRzYWRjIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDE1LCAwLCAwKSwKKwlHQVRFKENMS19TUEkwLCAic3BpMCIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0lQX1BFUklDLCAxNiwgMCwgMCksCisJR0FURShDTEtfU1BJMSwgInNwaTEiLCAiYWNsazY2X3BlcmljIiwgR0FURV9JUF9QRVJJQywgMTcsIDAsIDApLAorCUdBVEUoQ0xLX1NQSTIsICJzcGkyIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDE4LCAwLCAwKSwKKwlHQVRFKENMS19JMlMxLCAiaTJzMSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0lQX1BFUklDLCAyMCwgMCwgMCksCisJR0FURShDTEtfSTJTMiwgImkyczIiLCAiYWNsazY2X3BlcmljIiwgR0FURV9JUF9QRVJJQywgMjEsIDAsIDApLAorCUdBVEUoQ0xLX1BDTTEsICJwY20xIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDIyLCAwLCAwKSwKKwlHQVRFKENMS19QQ00yLCAicGNtMiIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0lQX1BFUklDLCAyMywgMCwgMCksCisJR0FURShDTEtfUFdNLCAicHdtIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDI0LCAwLCAwKSwKKwlHQVRFKENMS19TUERJRiwgInNwZGlmIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDI2LCAwLCAwKSwKKwlHQVRFKENMS19VU0k0LCAidXNpNCIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0lQX1BFUklDLCAyOCwgMCwgMCksCisJR0FURShDTEtfVVNJNSwgInVzaTUiLCAiYWNsazY2X3BlcmljIiwgR0FURV9JUF9QRVJJQywgMzAsIDAsIDApLAorCUdBVEUoQ0xLX1VTSTYsICJ1c2k2IiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfSVBfUEVSSUMsIDMxLCAwLCAwKSwKKwogCUdBVEUoQ0xLX0tFWUlGLCAia2V5aWYiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDIyLCAwLCAwKSwKLQkvKiBJMlMgKi8KLQlHQVRFKENMS19JMlMxLCAiaTJzMSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMjMsIDAsIDApLAotCUdBVEUoQ0xLX0kyUzIsICJpMnMyIiwgImFjbGs2Nl9wZXJpYyIsIEdBVEVfQlVTX1BFUklDLCAyNCwgMCwgMCksCi0JLyogUENNICovCi0JR0FURShDTEtfUENNMSwgInBjbTEiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMsIDI1LCAwLCAwKSwKLQlHQVRFKENMS19QQ00yLCAicGNtMiIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMjYsIDAsIDApLAotCS8qIFBXTSAqLwotCUdBVEUoQ0xLX1BXTSwgInB3bSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMjcsIDAsIDApLAotCS8qIFNQRElGICovCi0JR0FURShDTEtfU1BESUYsICJzcGRpZiIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQywgMjksIDAsIDApLAogCi0JR0FURShDTEtfSTJDOCwgImkyYzgiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMxLCAwLCAwLCAwKSwKLQlHQVRFKENMS19JMkM5LCAiaTJjOSIsICJhY2xrNjZfcGVyaWMiLCBHQVRFX0JVU19QRVJJQzEsIDEsIDAsIDApLAotCUdBVEUoQ0xLX0kyQzEwLCAiaTJjMTAiLCAiYWNsazY2X3BlcmljIiwgR0FURV9CVVNfUEVSSUMxLCAyLCAwLCAwKSwKLQorCS8qIFBFUklTIEJsb2NrICovCiAJR0FURShDTEtfQ0hJUElELCAiY2hpcGlkIiwgImFjbGs2Nl9wc2dlbiIsCi0JCQlHQVRFX0JVU19QRVJJUzAsIDEyLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJCQlHQVRFX0lQX1BFUklTLCAwLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCiAJR0FURShDTEtfU1lTUkVHLCAic3lzcmVnIiwgImFjbGs2Nl9wc2dlbiIsCi0JCQlHQVRFX0JVU19QRVJJUzAsIDEzLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCi0JR0FURShDTEtfVFpQQzAsICJ0enBjMCIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzAsIDE4LCAwLCAwKSwKLQlHQVRFKENMS19UWlBDMSwgInR6cGMxIiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfQlVTX1BFUklTMCwgMTksIDAsIDApLAotCUdBVEUoQ0xLX1RaUEMyLCAidHpwYzIiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9CVVNfUEVSSVMwLCAyMCwgMCwgMCksCi0JR0FURShDTEtfVFpQQzMsICJ0enBjMyIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzAsIDIxLCAwLCAwKSwKLQlHQVRFKENMS19UWlBDNCwgInR6cGM0IiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfQlVTX1BFUklTMCwgMjIsIDAsIDApLAotCUdBVEUoQ0xLX1RaUEM1LCAidHpwYzUiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9CVVNfUEVSSVMwLCAyMywgMCwgMCksCi0JR0FURShDTEtfVFpQQzYsICJ0enBjNiIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzAsIDI0LCAwLCAwKSwKLQlHQVRFKENMS19UWlBDNywgInR6cGM3IiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfQlVTX1BFUklTMCwgMjUsIDAsIDApLAotCUdBVEUoQ0xLX1RaUEM4LCAidHpwYzgiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9CVVNfUEVSSVMwLCAyNiwgMCwgMCksCi0JR0FURShDTEtfVFpQQzksICJ0enBjOSIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzAsIDI3LCAwLCAwKSwKKwkJCUdBVEVfSVBfUEVSSVMsIDEsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKENMS19UWlBDMCwgInR6cGMwIiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfSVBfUEVSSVMsIDYsIDAsIDApLAorCUdBVEUoQ0xLX1RaUEMxLCAidHpwYzEiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgNywgMCwgMCksCisJR0FURShDTEtfVFpQQzIsICJ0enBjMiIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0lQX1BFUklTLCA4LCAwLCAwKSwKKwlHQVRFKENMS19UWlBDMywgInR6cGMzIiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfSVBfUEVSSVMsIDksIDAsIDApLAorCUdBVEUoQ0xLX1RaUEM0LCAidHpwYzQiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTAsIDAsIDApLAorCUdBVEUoQ0xLX1RaUEM1LCAidHpwYzUiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTEsIDAsIDApLAorCUdBVEUoQ0xLX1RaUEM2LCAidHpwYzYiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTIsIDAsIDApLAorCUdBVEUoQ0xLX1RaUEM3LCAidHpwYzciLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTMsIDAsIDApLAorCUdBVEUoQ0xLX1RaUEM4LCAidHpwYzgiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTQsIDAsIDApLAorCUdBVEUoQ0xLX1RaUEM5LCAidHpwYzkiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTUsIDAsIDApLAorCUdBVEUoQ0xLX0hETUlfQ0VDLCAiaGRtaV9jZWMiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMTYsIDAsIDApLAorCUdBVEUoQ0xLX01DVCwgIm1jdCIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0lQX1BFUklTLCAxOCwgMCwgMCksCisJR0FURShDTEtfV0RULCAid2R0IiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfSVBfUEVSSVMsIDE5LCAwLCAwKSwKKwlHQVRFKENMS19SVEMsICJydGMiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMjAsIDAsIDApLAorCUdBVEUoQ0xLX1RNVSwgInRtdSIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0lQX1BFUklTLCAyMSwgMCwgMCksCisJR0FURShDTEtfVE1VX0dQVSwgInRtdV9ncHUiLCAiYWNsazY2X3BzZ2VuIiwgR0FURV9JUF9QRVJJUywgMjIsIDAsIDApLAogCi0JR0FURShDTEtfSERNSV9DRUMsICJoZG1pX2NlYyIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzEsIDAsIDAsCi0JCTApLAogCUdBVEUoQ0xLX1NFQ0tFWSwgInNlY2tleSIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzEsIDEsIDAsIDApLAotCUdBVEUoQ0xLX1dEVCwgIndkdCIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzEsIDMsIDAsIDApLAotCUdBVEUoQ0xLX1JUQywgInJ0YyIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzEsIDQsIDAsIDApLAotCUdBVEUoQ0xLX1RNVSwgInRtdSIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0JVU19QRVJJUzEsIDUsIDAsIDApLAotCUdBVEUoQ0xLX1RNVV9HUFUsICJ0bXVfZ3B1IiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfQlVTX1BFUklTMSwgNiwgMCwgMCksCisKKwkvKiBHRU4gQmxvY2sgKi8KKwlHQVRFKENMS19ST1RBVE9SLCAicm90YXRvciIsICJtb3V0X3VzZXJfYWNsazI2NiIsIEdBVEVfSVBfR0VOLCAxLCAwLCAwKSwKKwlHQVRFKENMS19KUEVHLCAianBlZyIsICJhY2xrMzAwX2pwZWciLCBHQVRFX0lQX0dFTiwgMiwgMCwgMCksCisJR0FURShDTEtfSlBFRzIsICJqcGVnMiIsICJhY2xrMzAwX2pwZWciLCBHQVRFX0lQX0dFTiwgMywgMCwgMCksCisJR0FURShDTEtfTURNQTEsICJtZG1hMSIsICJtb3V0X3VzZXJfYWNsazI2NiIsIEdBVEVfSVBfR0VOLCA0LCAwLCAwKSwKKwlHQVRFKENMS19UT1BfUlRDLCAidG9wX3J0YyIsICJhY2xrNjZfcHNnZW4iLCBHQVRFX0lQX0dFTiwgNSwgMCwgMCksCisJR0FURShDTEtfU01NVV9ST1RBVE9SLCAic21tdV9yb3RhdG9yIiwgImRvdXRfZ2VuX2JsayIsCisJCQlHQVRFX0lQX0dFTiwgNiwgMCwgMCksCisJR0FURShDTEtfU01NVV9KUEVHLCAic21tdV9qcGVnIiwgImRvdXRfanBnX2JsayIsIEdBVEVfSVBfR0VOLCA3LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX01ETUExLCAic21tdV9tZG1hMSIsICJkb3V0X2dlbl9ibGsiLAorCQkJR0FURV9JUF9HRU4sIDksIDAsIDApLAorCisJLyogR0FURV9JUF9HRU4gZG9lc24ndCBsaXN0IGdhdGVzIGZvciBzbW11X2pwZWcyIGFuZCBtYyAqLworCUdBVEUoQ0xLX1NNTVVfSlBFRzIsICJzbW11X2pwZWcyIiwgImRvdXRfanBnX2JsayIsCisJCQlHQVRFX0JVU19HRU4sIDI4LCAwLCAwKSwKKwlHQVRFKENMS19NQywgIm1jIiwgImFjbGs2Nl9wc2dlbiIsIEdBVEVfQlVTX0dFTiwgMTIsIDAsIDApLAorCisJLyogR1NDTCBCbG9jayAqLworCUdBVEUoQ0xLX1NDTEtfR1NDTF9XQSwgInNjbGtfZ3NjbF93YSIsICJtb3V0X3VzZXJfYWNsazMzM180MzJfZ3NjbCIsCisJCQlHQVRFX1RPUF9TQ0xLX0dTQ0wsIDYsIDAsIDApLAorCUdBVEUoQ0xLX1NDTEtfR1NDTF9XQiwgInNjbGtfZ3NjbF93YiIsICJtb3V0X3VzZXJfYWNsazMzM180MzJfZ3NjbCIsCisJCQlHQVRFX1RPUF9TQ0xLX0dTQ0wsIDcsIDAsIDApLAogCiAJR0FURShDTEtfR1NDTDAsICJnc2NsMCIsICJhY2xrMzAwX2dzY2wiLCBHQVRFX0lQX0dTQ0wwLCAwLCAwLCAwKSwKIAlHQVRFKENMS19HU0NMMSwgImdzY2wxIiwgImFjbGszMDBfZ3NjbCIsIEdBVEVfSVBfR1NDTDAsIDEsIDAsIDApLAotCUdBVEUoQ0xLX0NMS18zQUEsICJjbGtfM2FhIiwgImFjbGszMDBfZ3NjbCIsIEdBVEVfSVBfR1NDTDAsIDQsIDAsIDApLAorCUdBVEUoQ0xLX0ZJTUNfM0FBLCAiZmltY18zYWEiLCAiYWNsazMzM180MzJfZ3NjbCIsCisJCQlHQVRFX0lQX0dTQ0wwLCA0LCAwLCAwKSwKKwlHQVRFKENMS19GSU1DX0xJVEUwLCAiZmltY19saXRlMCIsICJhY2xrMzMzXzQzMl9nc2NsIiwKKwkJCUdBVEVfSVBfR1NDTDAsIDUsIDAsIDApLAorCUdBVEUoQ0xLX0ZJTUNfTElURTEsICJmaW1jX2xpdGUxIiwgImFjbGszMzNfNDMyX2dzY2wiLAorCQkJR0FURV9JUF9HU0NMMCwgNiwgMCwgMCksCiAKLQlHQVRFKENMS19TTU1VXzNBQSwgInNtbXVfM2FhIiwgImFjbGszMzNfNDMyX2dzY2wiLCBHQVRFX0lQX0dTQ0wxLCAyLCAwLAotCQkwKSwKLQlHQVRFKENMS19TTU1VX0ZJTUNMMCwgInNtbXVfZmltY2wwIiwgImFjbGszMzNfNDMyX2dzY2wiLAorCUdBVEUoQ0xLX1NNTVVfM0FBLCAic21tdV8zYWEiLCAiZG91dF9nc2NsX2Jsa18zMzMiLAorCQkJR0FURV9JUF9HU0NMMSwgMiwgMCwgMCksCisJR0FURShDTEtfU01NVV9GSU1DTDAsICJzbW11X2ZpbWNsMCIsICJkb3V0X2dzY2xfYmxrXzMzMyIsCiAJCQlHQVRFX0lQX0dTQ0wxLCAzLCAwLCAwKSwKLQlHQVRFKENMS19TTU1VX0ZJTUNMMSwgInNtbXVfZmltY2wxIiwgImFjbGszMzNfNDMyX2dzY2wiLAorCUdBVEUoQ0xLX1NNTVVfRklNQ0wxLCAic21tdV9maW1jbDEiLCAiZG91dF9nc2NsX2Jsa18zMzMiLAogCQkJR0FURV9JUF9HU0NMMSwgNCwgMCwgMCksCi0JR0FURShDTEtfU01NVV9HU0NMMCwgInNtbXVfZ3NjbDAiLCAiYWNsazMwMF9nc2NsIiwgR0FURV9JUF9HU0NMMSwgNiwgMCwKLQkJMCksCi0JR0FURShDTEtfU01NVV9HU0NMMSwgInNtbXVfZ3NjbDEiLCAiYWNsazMwMF9nc2NsIiwgR0FURV9JUF9HU0NMMSwgNywgMCwKLQkJMCksCi0JR0FURShDTEtfR1NDTF9XQSwgImdzY2xfd2EiLCAiYWNsazMwMF9nc2NsIiwgR0FURV9JUF9HU0NMMSwgMTIsIDAsIDApLAotCUdBVEUoQ0xLX0dTQ0xfV0IsICJnc2NsX3diIiwgImFjbGszMDBfZ3NjbCIsIEdBVEVfSVBfR1NDTDEsIDEzLCAwLCAwKSwKLQlHQVRFKENMS19TTU1VX0ZJTUNMMywgInNtbXVfZmltY2wzLCIsICJhY2xrMzMzXzQzMl9nc2NsIiwKKwlHQVRFKENMS19TTU1VX0dTQ0wwLCAic21tdV9nc2NsMCIsICJkb3V0X2dzY2xfYmxrXzMwMCIsCisJCQlHQVRFX0lQX0dTQ0wxLCA2LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX0dTQ0wxLCAic21tdV9nc2NsMSIsICJkb3V0X2dzY2xfYmxrXzMwMCIsCisJCQlHQVRFX0lQX0dTQ0wxLCA3LCAwLCAwKSwKKwlHQVRFKENMS19HU0NMX1dBLCAiZ3NjbF93YSIsICJzY2xrX2dzY2xfd2EiLCBHQVRFX0lQX0dTQ0wxLCAxMiwgMCwgMCksCisJR0FURShDTEtfR1NDTF9XQiwgImdzY2xfd2IiLCAic2Nsa19nc2NsX3diIiwgR0FURV9JUF9HU0NMMSwgMTMsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfRklNQ0wzLCAic21tdV9maW1jbDMsIiwgImRvdXRfZ3NjbF9ibGtfMzMzIiwKIAkJCUdBVEVfSVBfR1NDTDEsIDE2LCAwLCAwKSwKIAlHQVRFKENMS19GSU1DX0xJVEUzLCAiZmltY19saXRlMyIsICJhY2xrMzMzXzQzMl9nc2NsIiwKIAkJCUdBVEVfSVBfR1NDTDEsIDE3LCAwLCAwKSwKIAotCUdBVEUoQ0xLX0ZJTUQxLCAiZmltZDEiLCAiYWNsazMwMF9kaXNwMSIsIEdBVEVfSVBfRElTUDEsIDAsIDAsIDApLAotCUdBVEUoQ0xLX0RTSU0xLCAiZHNpbTEiLCAiYWNsazIwMF9kaXNwMSIsIEdBVEVfSVBfRElTUDEsIDMsIDAsIDApLAotCUdBVEUoQ0xLX0RQMSwgImRwMSIsICJhY2xrMjAwX2Rpc3AxIiwgR0FURV9JUF9ESVNQMSwgNCwgMCwgMCksCi0JR0FURShDTEtfTUlYRVIsICJtaXhlciIsICJhY2xrMTY2IiwgR0FURV9JUF9ESVNQMSwgNSwgMCwgMCksCi0JR0FURShDTEtfSERNSSwgImhkbWkiLCAiYWNsazIwMF9kaXNwMSIsIEdBVEVfSVBfRElTUDEsIDYsIDAsIDApLAotCUdBVEUoQ0xLX1NNTVVfRklNRDEsICJzbW11X2ZpbWQxIiwgImFjbGszMDBfZGlzcDEiLCBHQVRFX0lQX0RJU1AxLCA4LCAwLAotCQkwKSwKLQotCUdBVEUoQ0xLX01GQywgIm1mYyIsICJhY2xrMzMzIiwgR0FURV9JUF9NRkMsIDAsIDAsIDApLAotCUdBVEUoQ0xLX1NNTVVfTUZDTCwgInNtbXVfbWZjbCIsICJhY2xrMzMzIiwgR0FURV9JUF9NRkMsIDEsIDAsIDApLAotCUdBVEUoQ0xLX1NNTVVfTUZDUiwgInNtbXVfbWZjciIsICJhY2xrMzMzIiwgR0FURV9JUF9NRkMsIDIsIDAsIDApLAotCi0JR0FURShDTEtfRzNELCAiZzNkIiwgImFjbGtnM2QiLCBHQVRFX0lQX0czRCwgOSwgMCwgMCksCi0KLQlHQVRFKENMS19ST1RBVE9SLCAicm90YXRvciIsICJhY2xrMjY2IiwgR0FURV9JUF9HRU4sIDEsIDAsIDApLAotCUdBVEUoQ0xLX0pQRUcsICJqcGVnIiwgImFjbGszMDBfanBlZyIsIEdBVEVfSVBfR0VOLCAyLCAwLCAwKSwKLQlHQVRFKENMS19KUEVHMiwgImpwZWcyIiwgImFjbGszMDBfanBlZyIsIEdBVEVfSVBfR0VOLCAzLCAwLCAwKSwKLQlHQVRFKENMS19NRE1BMSwgIm1kbWExIiwgImFjbGsyNjYiLCBHQVRFX0lQX0dFTiwgNCwgMCwgMCksCi0JR0FURShDTEtfU01NVV9ST1RBVE9SLCAic21tdV9yb3RhdG9yIiwgImFjbGsyNjYiLCBHQVRFX0lQX0dFTiwgNiwgMCwgMCksCi0JR0FURShDTEtfU01NVV9KUEVHLCAic21tdV9qcGVnIiwgImFjbGszMDBfanBlZyIsIEdBVEVfSVBfR0VOLCA3LCAwLCAwKSwKLQlHQVRFKENMS19TTU1VX01ETUExLCAic21tdV9tZG1hMSIsICJhY2xrMjY2IiwgR0FURV9JUF9HRU4sIDksIDAsIDApLAotCisJLyogTVNDTCBCbG9jayAqLwogCUdBVEUoQ0xLX01TQ0wwLCAibXNjbDAiLCAiYWNsazQwMF9tc2NsIiwgR0FURV9JUF9NU0NMLCAwLCAwLCAwKSwKIAlHQVRFKENMS19NU0NMMSwgIm1zY2wxIiwgImFjbGs0MDBfbXNjbCIsIEdBVEVfSVBfTVNDTCwgMSwgMCwgMCksCiAJR0FURShDTEtfTVNDTDIsICJtc2NsMiIsICJhY2xrNDAwX21zY2wiLCBHQVRFX0lQX01TQ0wsIDIsIDAsIDApLAotCUdBVEUoQ0xLX1NNTVVfTVNDTDAsICJzbW11X21zY2wwIiwgImFjbGs0MDBfbXNjbCIsIEdBVEVfSVBfTVNDTCwgOCwgMCwKLQkJMCksCi0JR0FURShDTEtfU01NVV9NU0NMMSwgInNtbXVfbXNjbDEiLCAiYWNsazQwMF9tc2NsIiwgR0FURV9JUF9NU0NMLCA5LCAwLAotCQkwKSwKLQlHQVRFKENMS19TTU1VX01TQ0wyLCAic21tdV9tc2NsMiIsICJhY2xrNDAwX21zY2wiLCBHQVRFX0lQX01TQ0wsIDEwLCAwLAotCQkwKSwKLQlHQVRFKENMS19TTU1VX01JWEVSLCAic21tdV9taXhlciIsICJhY2xrMjAwX2Rpc3AxIiwgR0FURV9JUF9ESVNQMSwgOSwgMCwKLQkJMCksCisJR0FURShDTEtfU01NVV9NU0NMMCwgInNtbXVfbXNjbDAiLCAiZG91dF9tc2NsX2JsayIsCisJCQlHQVRFX0lQX01TQ0wsIDgsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfTVNDTDEsICJzbW11X21zY2wxIiwgImRvdXRfbXNjbF9ibGsiLAorCQkJR0FURV9JUF9NU0NMLCA5LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX01TQ0wyLCAic21tdV9tc2NsMiIsICJkb3V0X21zY2xfYmxrIiwKKwkJCUdBVEVfSVBfTVNDTCwgMTAsIDAsIDApLAorCisJR0FURShDTEtfRklNRDEsICJmaW1kMSIsICJhY2xrMzAwX2Rpc3AxIiwgR0FURV9JUF9ESVNQMSwgMCwgMCwgMCksCisJR0FURShDTEtfRFNJTTEsICJkc2ltMSIsICJhY2xrMjAwX2Rpc3AxIiwgR0FURV9JUF9ESVNQMSwgMywgMCwgMCksCisJR0FURShDTEtfRFAxLCAiZHAxIiwgImFjbGsyMDBfZGlzcDEiLCBHQVRFX0lQX0RJU1AxLCA0LCAwLCAwKSwKKwlHQVRFKENMS19NSVhFUiwgIm1peGVyIiwgImFjbGsyMDBfZGlzcDEiLCBHQVRFX0lQX0RJU1AxLCA1LCAwLCAwKSwKKwlHQVRFKENMS19IRE1JLCAiaGRtaSIsICJhY2xrMjAwX2Rpc3AxIiwgR0FURV9JUF9ESVNQMSwgNiwgMCwgMCksCisJR0FURShDTEtfU01NVV9GSU1EMU0wLCAic21tdV9maW1kMW0wIiwgImRvdXRfZGlzcDFfYmxrIiwKKwkJCUdBVEVfSVBfRElTUDEsIDcsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfRklNRDFNMSwgInNtbXVfZmltZDFtMSIsICJkb3V0X2Rpc3AxX2JsayIsCisJCQlHQVRFX0lQX0RJU1AxLCA4LCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX01JWEVSLCAic21tdV9taXhlciIsICJhY2xrMjAwX2Rpc3AxIiwKKwkJCUdBVEVfSVBfRElTUDEsIDksIDAsIDApLAorCisJLyogSVNQICovCisJR0FURShDTEtfU0NMS19VQVJUX0lTUCwgInNjbGtfdWFydF9pc3AiLCAiZG91dF91YXJ0X2lzcCIsCisJCQlHQVRFX1RPUF9TQ0xLX0lTUCwgMCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisJR0FURShDTEtfU0NMS19TUEkwX0lTUCwgInNjbGtfc3BpMF9pc3AiLCAiZG91dF9zcGkwX2lzcF9wcmUiLAorCQkJR0FURV9UT1BfU0NMS19JU1AsIDEsIENMS19TRVRfUkFURV9QQVJFTlQsIDApLAorCUdBVEUoQ0xLX1NDTEtfU1BJMV9JU1AsICJzY2xrX3NwaTFfaXNwIiwgImRvdXRfc3BpMV9pc3BfcHJlIiwKKwkJCUdBVEVfVE9QX1NDTEtfSVNQLCAyLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX1BXTV9JU1AsICJzY2xrX3B3bV9pc3AiLCAiZG91dF9wd21faXNwIiwKKwkJCUdBVEVfVE9QX1NDTEtfSVNQLCAzLCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX0lTUF9TRU5TT1IwLCAic2Nsa19pc3Bfc2Vuc29yMCIsICJkb3V0X2lzcF9zZW5zb3IwIiwKKwkJCUdBVEVfVE9QX1NDTEtfSVNQLCA0LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX0lTUF9TRU5TT1IxLCAic2Nsa19pc3Bfc2Vuc29yMSIsICJkb3V0X2lzcF9zZW5zb3IxIiwKKwkJCUdBVEVfVE9QX1NDTEtfSVNQLCA4LCBDTEtfU0VUX1JBVEVfUEFSRU5ULCAwKSwKKwlHQVRFKENMS19TQ0xLX0lTUF9TRU5TT1IyLCAic2Nsa19pc3Bfc2Vuc29yMiIsICJkb3V0X2lzcF9zZW5zb3IyIiwKKwkJCUdBVEVfVE9QX1NDTEtfSVNQLCAxMiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMCksCisKKwlHQVRFKENMS19NRkMsICJtZmMiLCAiYWNsazMzMyIsIEdBVEVfSVBfTUZDLCAwLCAwLCAwKSwKKwlHQVRFKENMS19TTU1VX01GQ0wsICJzbW11X21mY2wiLCAiZG91dF9tZmNfYmxrIiwgR0FURV9JUF9NRkMsIDEsIDAsIDApLAorCUdBVEUoQ0xLX1NNTVVfTUZDUiwgInNtbXVfbWZjciIsICJkb3V0X21mY19ibGsiLCBHQVRFX0lQX01GQywgMiwgMCwgMCksCisKKwlHQVRFKENMS19HM0QsICJnM2QiLCAibW91dF91c2VyX2FjbGtfZzNkIiwgR0FURV9JUF9HM0QsIDksIDAsIDApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzYW1zdW5nX3BsbF9jbG9jayBleHlub3M1NDIwX3BsbHNbbnJfcGxsc10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfY2xvY2sgZXh5bm9zNXhfcGxsc1tucl9wbGxzXSBfX2luaXRkYXRhID0gewogCVthcGxsXSA9IFBMTChwbGxfMjU1MCwgQ0xLX0ZPVVRfQVBMTCwgImZvdXRfYXBsbCIsICJmaW5fcGxsIiwgQVBMTF9MT0NLLAogCQlBUExMX0NPTjAsIE5VTEwpLAogCVtjcGxsXSA9IFBMTChwbGxfMjU1MCwgQ0xLX0ZPVVRfQ1BMTCwgImZvdXRfY3BsbCIsICJmaW5fcGxsIiwgQ1BMTF9MT0NLLApAQCAtNzc2LDggKzExNzMsMTEgQEAKIH07CiAKIC8qIHJlZ2lzdGVyIGV4eW5vczU0MjAgY2xvY2tzICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNTQyMF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQorc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczV4X2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCWVudW0gZXh5bm9zNXhfc29jIHNvYykKIHsKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwogCWlmIChucCkgewogCQlyZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKIAkJaWYgKCFyZWdfYmFzZSkKQEAgLTc4NiwyMyArMTE4Niw1NiBAQAogCQlwYW5pYygiJXM6IHVuYWJsZSB0byBkZXRlcm1pbmUgc29jXG4iLCBfX2Z1bmNfXyk7CiAJfQogCi0Jc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIENMS19OUl9DTEtTKTsKLQlzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoZXh5bm9zNTQyMF9maXhlZF9yYXRlX2V4dF9jbGtzLAotCQkJQVJSQVlfU0laRShleHlub3M1NDIwX2ZpeGVkX3JhdGVfZXh0X2Nsa3MpLAorCWV4eW5vczV4X3NvYyA9IHNvYzsKKworCWN0eCA9IHNhbXN1bmdfY2xrX2luaXQobnAsIHJlZ19iYXNlLCBDTEtfTlJfQ0xLUyk7CisJaWYgKCFjdHgpCisJCXBhbmljKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGNvbnRleHQuXG4iLCBfX2Z1bmNfXyk7CisKKwlzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoY3R4LCBleHlub3M1eF9maXhlZF9yYXRlX2V4dF9jbGtzLAorCQkJQVJSQVlfU0laRShleHlub3M1eF9maXhlZF9yYXRlX2V4dF9jbGtzKSwKIAkJCWV4dF9jbGtfbWF0Y2gpOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChleHlub3M1NDIwX3BsbHMsIEFSUkFZX1NJWkUoZXh5bm9zNTQyMF9wbGxzKSwKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwoY3R4LCBleHlub3M1eF9wbGxzLCBBUlJBWV9TSVpFKGV4eW5vczV4X3BsbHMpLAogCQkJCQlyZWdfYmFzZSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShleHlub3M1NDIwX2ZpeGVkX3JhdGVfY2xrcywKLQkJCUFSUkFZX1NJWkUoZXh5bm9zNTQyMF9maXhlZF9yYXRlX2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoZXh5bm9zNTQyMF9maXhlZF9mYWN0b3JfY2xrcywKLQkJCUFSUkFZX1NJWkUoZXh5bm9zNTQyMF9maXhlZF9mYWN0b3JfY2xrcykpOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChleHlub3M1NDIwX211eF9jbGtzLAotCQkJQVJSQVlfU0laRShleHlub3M1NDIwX211eF9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGV4eW5vczU0MjBfZGl2X2Nsa3MsCi0JCQlBUlJBWV9TSVpFKGV4eW5vczU0MjBfZGl2X2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGV4eW5vczU0MjBfZ2F0ZV9jbGtzLAotCQkJQVJSQVlfU0laRShleHlub3M1NDIwX2dhdGVfY2xrcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBleHlub3M1eF9maXhlZF9yYXRlX2Nsa3MsCisJCQlBUlJBWV9TSVpFKGV4eW5vczV4X2ZpeGVkX3JhdGVfY2xrcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihjdHgsIGV4eW5vczV4X2ZpeGVkX2ZhY3Rvcl9jbGtzLAorCQkJQVJSQVlfU0laRShleHlub3M1eF9maXhlZF9mYWN0b3JfY2xrcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIGV4eW5vczV4X211eF9jbGtzLAorCQkJQVJSQVlfU0laRShleHlub3M1eF9tdXhfY2xrcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczV4X2Rpdl9jbGtzLAorCQkJQVJSQVlfU0laRShleHlub3M1eF9kaXZfY2xrcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoY3R4LCBleHlub3M1eF9nYXRlX2Nsa3MsCisJCQlBUlJBWV9TSVpFKGV4eW5vczV4X2dhdGVfY2xrcykpOworCisJaWYgKHNvYyA9PSBFWFlOT1M1NDIwKSB7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIGV4eW5vczU0MjBfbXV4X2Nsa3MsCisJCQkJQVJSQVlfU0laRShleHlub3M1NDIwX211eF9jbGtzKSk7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczU0MjBfZGl2X2Nsa3MsCisJCQkJQVJSQVlfU0laRShleHlub3M1NDIwX2Rpdl9jbGtzKSk7CisJfSBlbHNlIHsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKAorCQkJCWN0eCwgZXh5bm9zNTgwMF9maXhlZF9mYWN0b3JfY2xrcywKKwkJCQlBUlJBWV9TSVpFKGV4eW5vczU4MDBfZml4ZWRfZmFjdG9yX2Nsa3MpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgZXh5bm9zNTgwMF9tdXhfY2xrcywKKwkJCQlBUlJBWV9TSVpFKGV4eW5vczU4MDBfbXV4X2Nsa3MpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgZXh5bm9zNTgwMF9kaXZfY2xrcywKKwkJCQlBUlJBWV9TSVpFKGV4eW5vczU4MDBfZGl2X2Nsa3MpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIGV4eW5vczU4MDBfZ2F0ZV9jbGtzLAorCQkJCUFSUkFZX1NJWkUoZXh5bm9zNTgwMF9nYXRlX2Nsa3MpKTsKKwl9CiAKIAlleHlub3M1NDIwX2Nsa19zbGVlcF9pbml0KCk7CiB9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1NDIwX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJZXh5bm9zNXhfY2xrX2luaXQobnAsIEVYWU5PUzU0MjApOworfQogQ0xLX09GX0RFQ0xBUkUoZXh5bm9zNTQyMF9jbGssICJzYW1zdW5nLGV4eW5vczU0MjAtY2xvY2siLCBleHlub3M1NDIwX2Nsa19pbml0KTsKKworc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczU4MDBfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlleHlub3M1eF9jbGtfaW5pdChucCwgRVhZTk9TNTgwMCk7Cit9CitDTEtfT0ZfREVDTEFSRShleHlub3M1ODAwX2NsaywgInNhbXN1bmcsZXh5bm9zNTgwMC1jbG9jayIsIGV4eW5vczU4MDBfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jCmluZGV4IDJiZmFkNWEuLjY0N2YxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0NDAuYworKysgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDQwLmMKQEAgLTkzLDYgKzkzLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBleHlub3M1NDQwX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKIAogCXJlZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghcmVnX2Jhc2UpIHsKQEAgLTEwMSwyMiArMTAyLDI1IEBACiAJCXJldHVybjsKIAl9CiAKLQlzYW1zdW5nX2Nsa19pbml0KG5wLCByZWdfYmFzZSwgQ0xLX05SX0NMS1MpOwotCXNhbXN1bmdfY2xrX29mX3JlZ2lzdGVyX2ZpeGVkX2V4dChleHlub3M1NDQwX2ZpeGVkX3JhdGVfZXh0X2Nsa3MsCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIENMS19OUl9DTEtTKTsKKwlpZiAoIWN0eCkKKwkJcGFuaWMoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgY29udGV4dC5cbiIsIF9fZnVuY19fKTsKKworCXNhbXN1bmdfY2xrX29mX3JlZ2lzdGVyX2ZpeGVkX2V4dChjdHgsIGV4eW5vczU0NDBfZml4ZWRfcmF0ZV9leHRfY2xrcywKIAkJQVJSQVlfU0laRShleHlub3M1NDQwX2ZpeGVkX3JhdGVfZXh0X2Nsa3MpLCBleHRfY2xrX21hdGNoKTsKIAogCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbDI1NTB4KCJjcGxsYSIsICJ4dGFsIiwgcmVnX2Jhc2UgKyAweDFjLCAweDEwKTsKIAlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwyNTUweCgiY3BsbGIiLCAieHRhbCIsIHJlZ19iYXNlICsgMHgyMCwgMHgxMCk7CiAKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9yYXRlKGV4eW5vczU0NDBfZml4ZWRfcmF0ZV9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBleHlub3M1NDQwX2ZpeGVkX3JhdGVfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNTQ0MF9maXhlZF9yYXRlX2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoZXh5bm9zNTQ0MF9maXhlZF9mYWN0b3JfY2xrcywKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoY3R4LCBleHlub3M1NDQwX2ZpeGVkX2ZhY3Rvcl9jbGtzLAogCQkJQVJSQVlfU0laRShleHlub3M1NDQwX2ZpeGVkX2ZhY3Rvcl9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGV4eW5vczU0NDBfbXV4X2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgZXh5bm9zNTQ0MF9tdXhfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNTQ0MF9tdXhfY2xrcykpOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihleHlub3M1NDQwX2Rpdl9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIGV4eW5vczU0NDBfZGl2X2Nsa3MsCiAJCQlBUlJBWV9TSVpFKGV4eW5vczU0NDBfZGl2X2Nsa3MpKTsKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGV4eW5vczU0NDBfZ2F0ZV9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoY3R4LCBleHlub3M1NDQwX2dhdGVfY2xrcywKIAkJCUFSUkFZX1NJWkUoZXh5bm9zNTQ0MF9nYXRlX2Nsa3MpKTsKIAogCXByX2luZm8oIkV4eW5vczU0NDA6IGFybV9jbGsgPSAlbGRIelxuIiwgX2dldF9yYXRlKCJhcm1fY2xrIikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstcGxsLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1wbGwuYwppbmRleCA4MWU2ZDJmLi5iMDdmYWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1wbGwuYworKysgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1wbGwuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlICJjbGsuaCIKICNpbmNsdWRlICJjbGstcGxsLmgiCiAKQEAgLTU5LDYgKzYwLDcyIEBACiB9CiAKIC8qCisgKiBQTEwyMTI2IENsb2NrIFR5cGUKKyAqLworCisjZGVmaW5lIFBMTDIxMjZfTURJVl9NQVNLCSgweGZmKQorI2RlZmluZSBQTEwyMTI2X1BESVZfTUFTSwkoMHgzZikKKyNkZWZpbmUgUExMMjEyNl9TRElWX01BU0sJKDB4MykKKyNkZWZpbmUgUExMMjEyNl9NRElWX1NISUZUCSgxNikKKyNkZWZpbmUgUExMMjEyNl9QRElWX1NISUZUCSg4KQorI2RlZmluZSBQTEwyMTI2X1NESVZfU0hJRlQJKDApCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhbXN1bmdfcGxsMjEyNl9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBzYW1zdW5nX2Nsa19wbGwgKnBsbCA9IHRvX2Nsa19wbGwoaHcpOworCXUzMiBwbGxfY29uLCBtZGl2LCBwZGl2LCBzZGl2OworCXU2NCBmdmNvID0gcGFyZW50X3JhdGU7CisKKwlwbGxfY29uID0gX19yYXdfcmVhZGwocGxsLT5jb25fcmVnKTsKKwltZGl2ID0gKHBsbF9jb24gPj4gUExMMjEyNl9NRElWX1NISUZUKSAmIFBMTDIxMjZfTURJVl9NQVNLOworCXBkaXYgPSAocGxsX2NvbiA+PiBQTEwyMTI2X1BESVZfU0hJRlQpICYgUExMMjEyNl9QRElWX01BU0s7CisJc2RpdiA9IChwbGxfY29uID4+IFBMTDIxMjZfU0RJVl9TSElGVCkgJiBQTEwyMTI2X1NESVZfTUFTSzsKKworCWZ2Y28gKj0gKG1kaXYgKyA4KTsKKwlkb19kaXYoZnZjbywgKHBkaXYgKyAyKSA8PCBzZGl2KTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylmdmNvOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2Ftc3VuZ19wbGwyMTI2X2Nsa19vcHMgPSB7CisJLnJlY2FsY19yYXRlID0gc2Ftc3VuZ19wbGwyMTI2X3JlY2FsY19yYXRlLAorfTsKKworLyoKKyAqIFBMTDMwMDAgQ2xvY2sgVHlwZQorICovCisKKyNkZWZpbmUgUExMMzAwMF9NRElWX01BU0sJKDB4ZmYpCisjZGVmaW5lIFBMTDMwMDBfUERJVl9NQVNLCSgweDMpCisjZGVmaW5lIFBMTDMwMDBfU0RJVl9NQVNLCSgweDMpCisjZGVmaW5lIFBMTDMwMDBfTURJVl9TSElGVAkoMTYpCisjZGVmaW5lIFBMTDMwMDBfUERJVl9TSElGVAkoOCkKKyNkZWZpbmUgUExMMzAwMF9TRElWX1NISUZUCSgwKQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYW1zdW5nX3BsbDMwMDBfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcGxsICpwbGwgPSB0b19jbGtfcGxsKGh3KTsKKwl1MzIgcGxsX2NvbiwgbWRpdiwgcGRpdiwgc2RpdjsKKwl1NjQgZnZjbyA9IHBhcmVudF9yYXRlOworCisJcGxsX2NvbiA9IF9fcmF3X3JlYWRsKHBsbC0+Y29uX3JlZyk7CisJbWRpdiA9IChwbGxfY29uID4+IFBMTDMwMDBfTURJVl9TSElGVCkgJiBQTEwzMDAwX01ESVZfTUFTSzsKKwlwZGl2ID0gKHBsbF9jb24gPj4gUExMMzAwMF9QRElWX1NISUZUKSAmIFBMTDMwMDBfUERJVl9NQVNLOworCXNkaXYgPSAocGxsX2NvbiA+PiBQTEwzMDAwX1NESVZfU0hJRlQpICYgUExMMzAwMF9TRElWX01BU0s7CisKKwlmdmNvICo9ICgyICogKG1kaXYgKyA4KSk7CisJZG9fZGl2KGZ2Y28sIHBkaXYgPDwgc2Rpdik7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnZjbzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbXN1bmdfcGxsMzAwMF9jbGtfb3BzID0geworCS5yZWNhbGNfcmF0ZSA9IHNhbXN1bmdfcGxsMzAwMF9yZWNhbGNfcmF0ZSwKK307CisKKy8qCiAgKiBQTEwzNXh4IENsb2NrIFR5cGUKICAqLwogLyogTWF4aW11bSBsb2NrIHRpbWUgY2FuIGJlIDI3MCAqIFBESVYgY3ljbGVzICovCkBAIC01NjQsNyArNjMxLDkgQEAKICNkZWZpbmUgUExMNjU1Ml9QRElWX01BU0sJMHgzZgogI2RlZmluZSBQTEw2NTUyX1NESVZfTUFTSwkweDcKICNkZWZpbmUgUExMNjU1Ml9NRElWX1NISUZUCTE2CisjZGVmaW5lIFBMTDY1NTJfTURJVl9TSElGVF8yNDE2CTE0CiAjZGVmaW5lIFBMTDY1NTJfUERJVl9TSElGVAk4CisjZGVmaW5lIFBMTDY1NTJfUERJVl9TSElGVF8yNDE2CTUKICNkZWZpbmUgUExMNjU1Ml9TRElWX1NISUZUCTAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Ftc3VuZ19wbGw2NTUyX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LApAQCAtNTc1LDggKzY0NCwxMyBAQAogCXU2NCBmdmNvID0gcGFyZW50X3JhdGU7CiAKIAlwbGxfY29uID0gX19yYXdfcmVhZGwocGxsLT5jb25fcmVnKTsKLQltZGl2ID0gKHBsbF9jb24gPj4gUExMNjU1Ml9NRElWX1NISUZUKSAmIFBMTDY1NTJfTURJVl9NQVNLOwotCXBkaXYgPSAocGxsX2NvbiA+PiBQTEw2NTUyX1BESVZfU0hJRlQpICYgUExMNjU1Ml9QRElWX01BU0s7CisJaWYgKHBsbC0+dHlwZSA9PSBwbGxfNjU1Ml9zM2MyNDE2KSB7CisJCW1kaXYgPSAocGxsX2NvbiA+PiBQTEw2NTUyX01ESVZfU0hJRlRfMjQxNikgJiBQTEw2NTUyX01ESVZfTUFTSzsKKwkJcGRpdiA9IChwbGxfY29uID4+IFBMTDY1NTJfUERJVl9TSElGVF8yNDE2KSAmIFBMTDY1NTJfUERJVl9NQVNLOworCX0gZWxzZSB7CisJCW1kaXYgPSAocGxsX2NvbiA+PiBQTEw2NTUyX01ESVZfU0hJRlQpICYgUExMNjU1Ml9NRElWX01BU0s7CisJCXBkaXYgPSAocGxsX2NvbiA+PiBQTEw2NTUyX1BESVZfU0hJRlQpICYgUExMNjU1Ml9QRElWX01BU0s7CisJfQogCXNkaXYgPSAocGxsX2NvbiA+PiBQTEw2NTUyX1NESVZfU0hJRlQpICYgUExMNjU1Ml9TRElWX01BU0s7CiAKIAlmdmNvICo9IG1kaXY7CkBAIC02MjgsNiArNzAyLDE2OSBAQAogfTsKIAogLyoKKyAqIFBMTCBDbG9jayBUeXBlIG9mIFMzQzI0WFggYmVmb3JlIFMzQzI0NDMKKyAqLworCisjZGVmaW5lIFBMTFMzQzI0MTBfTURJVl9NQVNLCQkoMHhmZikKKyNkZWZpbmUgUExMUzNDMjQxMF9QRElWX01BU0sJCSgweDFmKQorI2RlZmluZSBQTExTM0MyNDEwX1NESVZfTUFTSwkJKDB4MykKKyNkZWZpbmUgUExMUzNDMjQxMF9NRElWX1NISUZUCQkoMTIpCisjZGVmaW5lIFBMTFMzQzI0MTBfUERJVl9TSElGVAkJKDQpCisjZGVmaW5lIFBMTFMzQzI0MTBfU0RJVl9TSElGVAkJKDApCisKKyNkZWZpbmUgUExMUzNDMjQxMF9FTkFCTEVfUkVHX09GRlNFVAkweDEwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhbXN1bmdfczNjMjQxMF9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IHNhbXN1bmdfY2xrX3BsbCAqcGxsID0gdG9fY2xrX3BsbChodyk7CisJdTMyIHBsbF9jb24sIG1kaXYsIHBkaXYsIHNkaXY7CisJdTY0IGZ2Y28gPSBwYXJlbnRfcmF0ZTsKKworCXBsbF9jb24gPSBfX3Jhd19yZWFkbChwbGwtPmNvbl9yZWcpOworCW1kaXYgPSAocGxsX2NvbiA+PiBQTExTM0MyNDEwX01ESVZfU0hJRlQpICYgUExMUzNDMjQxMF9NRElWX01BU0s7CisJcGRpdiA9IChwbGxfY29uID4+IFBMTFMzQzI0MTBfUERJVl9TSElGVCkgJiBQTExTM0MyNDEwX1BESVZfTUFTSzsKKwlzZGl2ID0gKHBsbF9jb24gPj4gUExMUzNDMjQxMF9TRElWX1NISUZUKSAmIFBMTFMzQzI0MTBfU0RJVl9NQVNLOworCisJZnZjbyAqPSAobWRpdiArIDgpOworCWRvX2RpdihmdmNvLCAocGRpdiArIDIpIDw8IHNkaXYpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpZnZjbzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Ftc3VuZ19zM2MyNDQwX21wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IHNhbXN1bmdfY2xrX3BsbCAqcGxsID0gdG9fY2xrX3BsbChodyk7CisJdTMyIHBsbF9jb24sIG1kaXYsIHBkaXYsIHNkaXY7CisJdTY0IGZ2Y28gPSBwYXJlbnRfcmF0ZTsKKworCXBsbF9jb24gPSBfX3Jhd19yZWFkbChwbGwtPmNvbl9yZWcpOworCW1kaXYgPSAocGxsX2NvbiA+PiBQTExTM0MyNDEwX01ESVZfU0hJRlQpICYgUExMUzNDMjQxMF9NRElWX01BU0s7CisJcGRpdiA9IChwbGxfY29uID4+IFBMTFMzQzI0MTBfUERJVl9TSElGVCkgJiBQTExTM0MyNDEwX1BESVZfTUFTSzsKKwlzZGl2ID0gKHBsbF9jb24gPj4gUExMUzNDMjQxMF9TRElWX1NISUZUKSAmIFBMTFMzQzI0MTBfU0RJVl9NQVNLOworCisJZnZjbyAqPSAoMiAqIChtZGl2ICsgOCkpOworCWRvX2RpdihmdmNvLCAocGRpdiArIDIpIDw8IHNkaXYpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpZnZjbzsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3MzYzI0MTBfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIGRyYXRlLAorCQkJCQl1bnNpZ25lZCBsb25nIHByYXRlKQoreworCXN0cnVjdCBzYW1zdW5nX2Nsa19wbGwgKnBsbCA9IHRvX2Nsa19wbGwoaHcpOworCWNvbnN0IHN0cnVjdCBzYW1zdW5nX3BsbF9yYXRlX3RhYmxlICpyYXRlOworCXUzMiB0bXA7CisKKwkvKiBHZXQgcmVxdWlyZWQgcmF0ZSBzZXR0aW5ncyBmcm9tIHRhYmxlICovCisJcmF0ZSA9IHNhbXN1bmdfZ2V0X3BsbF9zZXR0aW5ncyhwbGwsIGRyYXRlKTsKKwlpZiAoIXJhdGUpIHsKKwkJcHJfZXJyKCIlczogSW52YWxpZCByYXRlIDogJWx1IGZvciBwbGwgY2xrICVzXG4iLCBfX2Z1bmNfXywKKwkJCWRyYXRlLCBfX2Nsa19nZXRfbmFtZShody0+Y2xrKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXRtcCA9IF9fcmF3X3JlYWRsKHBsbC0+Y29uX3JlZyk7CisKKwkvKiBDaGFuZ2UgUExMIFBNUyB2YWx1ZXMgKi8KKwl0bXAgJj0gfigoUExMUzNDMjQxMF9NRElWX01BU0sgPDwgUExMUzNDMjQxMF9NRElWX1NISUZUKSB8CisJCQkoUExMUzNDMjQxMF9QRElWX01BU0sgPDwgUExMUzNDMjQxMF9QRElWX1NISUZUKSB8CisJCQkoUExMUzNDMjQxMF9TRElWX01BU0sgPDwgUExMUzNDMjQxMF9TRElWX1NISUZUKSk7CisJdG1wIHw9IChyYXRlLT5tZGl2IDw8IFBMTFMzQzI0MTBfTURJVl9TSElGVCkgfAorCQkJKHJhdGUtPnBkaXYgPDwgUExMUzNDMjQxMF9QRElWX1NISUZUKSB8CisJCQkocmF0ZS0+c2RpdiA8PCBQTExTM0MyNDEwX1NESVZfU0hJRlQpOworCV9fcmF3X3dyaXRlbCh0bXAsIHBsbC0+Y29uX3JlZyk7CisKKwkvKiBUaW1lIHRvIHNldHRsZSBhY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCAqLworCXVkZWxheSgzMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zM2MyNDEwX3BsbF9lbmFibGUoc3RydWN0IGNsa19odyAqaHcsIGludCBiaXQsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBzYW1zdW5nX2Nsa19wbGwgKnBsbCA9IHRvX2Nsa19wbGwoaHcpOworCXUzMiBwbGxfZW4gPSBfX3Jhd19yZWFkbChwbGwtPmxvY2tfcmVnICsgUExMUzNDMjQxMF9FTkFCTEVfUkVHX09GRlNFVCk7CisJdTMyIHBsbF9lbl9vcmlnID0gcGxsX2VuOworCisJaWYgKGVuYWJsZSkKKwkJcGxsX2VuICY9IH5CSVQoYml0KTsKKwllbHNlCisJCXBsbF9lbiB8PSBCSVQoYml0KTsKKworCV9fcmF3X3dyaXRlbChwbGxfZW4sIHBsbC0+bG9ja19yZWcgKyBQTExTM0MyNDEwX0VOQUJMRV9SRUdfT0ZGU0VUKTsKKworCS8qIGlmIHdlIHN0YXJ0ZWQgdGhlIFVQTEwsIHRoZW4gYWxsb3cgdG8gc2V0dGxlICovCisJaWYgKGVuYWJsZSAmJiAocGxsX2VuX29yaWcgJiBCSVQoYml0KSkpCisJCXVkZWxheSgzMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zM2MyNDEwX21wbGxfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXJldHVybiBzYW1zdW5nX3MzYzI0MTBfcGxsX2VuYWJsZShodywgNSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhbXN1bmdfczNjMjQxMF9tcGxsX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc2Ftc3VuZ19zM2MyNDEwX3BsbF9lbmFibGUoaHcsIDUsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3MzYzI0MTBfdXBsbF9lbmFibGUoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0dXJuIHNhbXN1bmdfczNjMjQxMF9wbGxfZW5hYmxlKGh3LCA3LCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgc2Ftc3VuZ19zM2MyNDEwX3VwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzYW1zdW5nX3MzYzI0MTBfcGxsX2VuYWJsZShodywgNywgZmFsc2UpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2Ftc3VuZ19zM2MyNDEwX21wbGxfY2xrX21pbl9vcHMgPSB7CisJLnJlY2FsY19yYXRlID0gc2Ftc3VuZ19zM2MyNDEwX3BsbF9yZWNhbGNfcmF0ZSwKKwkuZW5hYmxlID0gc2Ftc3VuZ19zM2MyNDEwX21wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gc2Ftc3VuZ19zM2MyNDEwX21wbGxfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzYW1zdW5nX3MzYzI0MTBfdXBsbF9jbGtfbWluX29wcyA9IHsKKwkucmVjYWxjX3JhdGUgPSBzYW1zdW5nX3MzYzI0MTBfcGxsX3JlY2FsY19yYXRlLAorCS5lbmFibGUgPSBzYW1zdW5nX3MzYzI0MTBfdXBsbF9lbmFibGUsCisJLmRpc2FibGUgPSBzYW1zdW5nX3MzYzI0MTBfdXBsbF9kaXNhYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbXN1bmdfczNjMjQ0MF9tcGxsX2Nsa19taW5fb3BzID0geworCS5yZWNhbGNfcmF0ZSA9IHNhbXN1bmdfczNjMjQ0MF9tcGxsX3JlY2FsY19yYXRlLAorCS5lbmFibGUgPSBzYW1zdW5nX3MzYzI0MTBfbXBsbF9lbmFibGUsCisJLmRpc2FibGUgPSBzYW1zdW5nX3MzYzI0MTBfbXBsbF9kaXNhYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbXN1bmdfczNjMjQxMF9tcGxsX2Nsa19vcHMgPSB7CisJLnJlY2FsY19yYXRlID0gc2Ftc3VuZ19zM2MyNDEwX3BsbF9yZWNhbGNfcmF0ZSwKKwkuZW5hYmxlID0gc2Ftc3VuZ19zM2MyNDEwX21wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gc2Ftc3VuZ19zM2MyNDEwX21wbGxfZGlzYWJsZSwKKwkucm91bmRfcmF0ZSA9IHNhbXN1bmdfcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gc2Ftc3VuZ19zM2MyNDEwX3BsbF9zZXRfcmF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBzYW1zdW5nX3MzYzI0MTBfdXBsbF9jbGtfb3BzID0geworCS5yZWNhbGNfcmF0ZSA9IHNhbXN1bmdfczNjMjQxMF9wbGxfcmVjYWxjX3JhdGUsCisJLmVuYWJsZSA9IHNhbXN1bmdfczNjMjQxMF91cGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHNhbXN1bmdfczNjMjQxMF91cGxsX2Rpc2FibGUsCisJLnJvdW5kX3JhdGUgPSBzYW1zdW5nX3BsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IHNhbXN1bmdfczNjMjQxMF9wbGxfc2V0X3JhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2Ftc3VuZ19zM2MyNDQwX21wbGxfY2xrX29wcyA9IHsKKwkucmVjYWxjX3JhdGUgPSBzYW1zdW5nX3MzYzI0NDBfbXBsbF9yZWNhbGNfcmF0ZSwKKwkuZW5hYmxlID0gc2Ftc3VuZ19zM2MyNDEwX21wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gc2Ftc3VuZ19zM2MyNDEwX21wbGxfZGlzYWJsZSwKKwkucm91bmRfcmF0ZSA9IHNhbXN1bmdfcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gc2Ftc3VuZ19zM2MyNDEwX3BsbF9zZXRfcmF0ZSwKK307CisKKy8qCiAgKiBQTEwyNTUweCBDbG9jayBUeXBlCiAgKi8KIApAQCAtNzEwLDggKzk0NywyMDYgQEAKIAlyZXR1cm4gY2xrOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX3NhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChzdHJ1Y3Qgc2Ftc3VuZ19wbGxfY2xvY2sgKnBsbF9jbGssCi0JCQkJCQl2b2lkIF9faW9tZW0gKmJhc2UpCisvKgorICogUExMMjU1MHh4IENsb2NrIFR5cGUKKyAqLworCisvKiBNYXhpbXVtIGxvY2sgdGltZSBjYW4gYmUgMjcwICogUERJViBjeWNsZXMgKi8KKyNkZWZpbmUgUExMMjU1MFhYX0xPQ0tfRkFDVE9SIDI3MAorCisjZGVmaW5lIFBMTDI1NTBYWF9NX01BU0sJCTB4M0ZGCisjZGVmaW5lIFBMTDI1NTBYWF9QX01BU0sJCTB4M0YKKyNkZWZpbmUgUExMMjU1MFhYX1NfTUFTSwkJMHg3CisjZGVmaW5lIFBMTDI1NTBYWF9MT0NLX1NUQVRfTUFTSwkweDEKKyNkZWZpbmUgUExMMjU1MFhYX01fU0hJRlQJCTkKKyNkZWZpbmUgUExMMjU1MFhYX1BfU0hJRlQJCTMKKyNkZWZpbmUgUExMMjU1MFhYX1NfU0hJRlQJCTAKKyNkZWZpbmUgUExMMjU1MFhYX0xPQ0tfU1RBVF9TSElGVAkyMQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYW1zdW5nX3BsbDI1NTB4eF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBzYW1zdW5nX2Nsa19wbGwgKnBsbCA9IHRvX2Nsa19wbGwoaHcpOworCXUzMiBtZGl2LCBwZGl2LCBzZGl2LCBwbGxfY29uOworCXU2NCBmdmNvID0gcGFyZW50X3JhdGU7CisKKwlwbGxfY29uID0gX19yYXdfcmVhZGwocGxsLT5jb25fcmVnKTsKKwltZGl2ID0gKHBsbF9jb24gPj4gUExMMjU1MFhYX01fU0hJRlQpICYgUExMMjU1MFhYX01fTUFTSzsKKwlwZGl2ID0gKHBsbF9jb24gPj4gUExMMjU1MFhYX1BfU0hJRlQpICYgUExMMjU1MFhYX1BfTUFTSzsKKwlzZGl2ID0gKHBsbF9jb24gPj4gUExMMjU1MFhYX1NfU0hJRlQpICYgUExMMjU1MFhYX1NfTUFTSzsKKworCWZ2Y28gKj0gbWRpdjsKKwlkb19kaXYoZnZjbywgKHBkaXYgPDwgc2RpdikpOworCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWZ2Y287Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzYW1zdW5nX3BsbDI1NTB4eF9tcF9jaGFuZ2UodTMyIG1kaXYsIHUzMiBwZGl2LCB1MzIgcGxsX2NvbikKK3sKKwl1MzIgb2xkX21kaXYsIG9sZF9wZGl2OworCisJb2xkX21kaXYgPSAocGxsX2NvbiA+PiBQTEwyNTUwWFhfTV9TSElGVCkgJiBQTEwyNTUwWFhfTV9NQVNLOworCW9sZF9wZGl2ID0gKHBsbF9jb24gPj4gUExMMjU1MFhYX1BfU0hJRlQpICYgUExMMjU1MFhYX1BfTUFTSzsKKworCXJldHVybiBtZGl2ICE9IG9sZF9tZGl2IHx8IHBkaXYgIT0gb2xkX3BkaXY7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19wbGwyNTUweHhfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgZHJhdGUsCisJCQkJCXVuc2lnbmVkIGxvbmcgcHJhdGUpCit7CisJc3RydWN0IHNhbXN1bmdfY2xrX3BsbCAqcGxsID0gdG9fY2xrX3BsbChodyk7CisJY29uc3Qgc3RydWN0IHNhbXN1bmdfcGxsX3JhdGVfdGFibGUgKnJhdGU7CisJdTMyIHRtcDsKKworCS8qIEdldCByZXF1aXJlZCByYXRlIHNldHRpbmdzIGZyb20gdGFibGUgKi8KKwlyYXRlID0gc2Ftc3VuZ19nZXRfcGxsX3NldHRpbmdzKHBsbCwgZHJhdGUpOworCWlmICghcmF0ZSkgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIHJhdGUgOiAlbHUgZm9yIHBsbCBjbGsgJXNcbiIsIF9fZnVuY19fLAorCQkJZHJhdGUsIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdG1wID0gX19yYXdfcmVhZGwocGxsLT5jb25fcmVnKTsKKworCWlmICghKHNhbXN1bmdfcGxsMjU1MHh4X21wX2NoYW5nZShyYXRlLT5tZGl2LCByYXRlLT5wZGl2LCB0bXApKSkgeworCQkvKiBJZiBvbmx5IHMgY2hhbmdlLCBjaGFuZ2UganVzdCBzIHZhbHVlIG9ubHkqLworCQl0bXAgJj0gfihQTEwyNTUwWFhfU19NQVNLIDw8IFBMTDI1NTBYWF9TX1NISUZUKTsKKwkJdG1wIHw9IHJhdGUtPnNkaXYgPDwgUExMMjU1MFhYX1NfU0hJRlQ7CisJCV9fcmF3X3dyaXRlbCh0bXAsIHBsbC0+Y29uX3JlZyk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0IFBMTCBsb2NrIHRpbWUuICovCisJX19yYXdfd3JpdGVsKHJhdGUtPnBkaXYgKiBQTEwyNTUwWFhfTE9DS19GQUNUT1IsIHBsbC0+bG9ja19yZWcpOworCisJLyogQ2hhbmdlIFBMTCBQTVMgdmFsdWVzICovCisJdG1wICY9IH4oKFBMTDI1NTBYWF9NX01BU0sgPDwgUExMMjU1MFhYX01fU0hJRlQpIHwKKwkJCShQTEwyNTUwWFhfUF9NQVNLIDw8IFBMTDI1NTBYWF9QX1NISUZUKSB8CisJCQkoUExMMjU1MFhYX1NfTUFTSyA8PCBQTEwyNTUwWFhfU19TSElGVCkpOworCXRtcCB8PSAocmF0ZS0+bWRpdiA8PCBQTEwyNTUwWFhfTV9TSElGVCkgfAorCQkJKHJhdGUtPnBkaXYgPDwgUExMMjU1MFhYX1BfU0hJRlQpIHwKKwkJCShyYXRlLT5zZGl2IDw8IFBMTDI1NTBYWF9TX1NISUZUKTsKKwlfX3Jhd193cml0ZWwodG1wLCBwbGwtPmNvbl9yZWcpOworCisJLyogd2FpdF9sb2NrX3RpbWUgKi8KKwlkbyB7CisJCWNwdV9yZWxheCgpOworCQl0bXAgPSBfX3Jhd19yZWFkbChwbGwtPmNvbl9yZWcpOworCX0gd2hpbGUgKCEodG1wICYgKFBMTDI1NTBYWF9MT0NLX1NUQVRfTUFTSworCQkJPDwgUExMMjU1MFhYX0xPQ0tfU1RBVF9TSElGVCkpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2Ftc3VuZ19wbGwyNTUweHhfY2xrX29wcyA9IHsKKwkucmVjYWxjX3JhdGUgPSBzYW1zdW5nX3BsbDI1NTB4eF9yZWNhbGNfcmF0ZSwKKwkucm91bmRfcmF0ZSA9IHNhbXN1bmdfcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gc2Ftc3VuZ19wbGwyNTUweHhfc2V0X3JhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgc2Ftc3VuZ19wbGwyNTUweHhfY2xrX21pbl9vcHMgPSB7CisJLnJlY2FsY19yYXRlID0gc2Ftc3VuZ19wbGwyNTUweHhfcmVjYWxjX3JhdGUsCit9OworCisvKgorICogUExMMjY1MFhYIENsb2NrIFR5cGUKKyAqLworCisvKiBNYXhpbXVtIGxvY2sgdGltZSBjYW4gYmUgMzAwMCAqIFBESVYgY3ljbGVzICovCisjZGVmaW5lIFBMTDI2NTBYWF9MT0NLX0ZBQ1RPUiAzMDAwCisKKyNkZWZpbmUgUExMMjY1MFhYX01ESVZfU0hJRlQJCTkKKyNkZWZpbmUgUExMMjY1MFhYX1BESVZfU0hJRlQJCTMKKyNkZWZpbmUgUExMMjY1MFhYX1NESVZfU0hJRlQJCTAKKyNkZWZpbmUgUExMMjY1MFhYX0tESVZfU0hJRlQJCTAKKyNkZWZpbmUgUExMMjY1MFhYX01ESVZfTUFTSwkJMHgxZmYKKyNkZWZpbmUgUExMMjY1MFhYX1BESVZfTUFTSwkJMHgzZgorI2RlZmluZSBQTEwyNjUwWFhfU0RJVl9NQVNLCQkweDcKKyNkZWZpbmUgUExMMjY1MFhYX0tESVZfTUFTSwkJMHhmZmZmCisjZGVmaW5lIFBMTDI2NTBYWF9QTExfRU5BQkxFX1NISUZUCTIzCisjZGVmaW5lIFBMTDI2NTBYWF9QTExfTE9DS1RJTUVfU0hJRlQJMjEKKyNkZWZpbmUgUExMMjY1MFhYX1BMTF9GT1VUTUFTS19TSElGVAkzMQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYW1zdW5nX3BsbDI2NTB4eF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBzYW1zdW5nX2Nsa19wbGwgKnBsbCA9IHRvX2Nsa19wbGwoaHcpOworCXUzMiBtZGl2LCBwZGl2LCBzZGl2LCBwbGxfY29uMCwgcGxsX2NvbjI7CisJczE2IGtkaXY7CisJdTY0IGZ2Y28gPSBwYXJlbnRfcmF0ZTsKKworCXBsbF9jb24wID0gX19yYXdfcmVhZGwocGxsLT5jb25fcmVnKTsKKwlwbGxfY29uMiA9IF9fcmF3X3JlYWRsKHBsbC0+Y29uX3JlZyArIDgpOworCW1kaXYgPSAocGxsX2NvbjAgPj4gUExMMjY1MFhYX01ESVZfU0hJRlQpICYgUExMMjY1MFhYX01ESVZfTUFTSzsKKwlwZGl2ID0gKHBsbF9jb24wID4+IFBMTDI2NTBYWF9QRElWX1NISUZUKSAmIFBMTDI2NTBYWF9QRElWX01BU0s7CisJc2RpdiA9IChwbGxfY29uMCA+PiBQTEwyNjUwWFhfU0RJVl9TSElGVCkgJiBQTEwyNjUwWFhfU0RJVl9NQVNLOworCWtkaXYgPSAoczE2KShwbGxfY29uMiAmIFBMTDI2NTBYWF9LRElWX01BU0spOworCisJZnZjbyAqPSAobWRpdiA8PCAxNikgKyBrZGl2OworCWRvX2RpdihmdmNvLCAocGRpdiA8PCBzZGl2KSk7CisJZnZjbyA+Pj0gMTY7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnZjbzsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3BsbDI2NTB4eF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBkcmF0ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcGxsICpwbGwgPSB0b19jbGtfcGxsKGh3KTsKKwl1MzIgdG1wLCBwbGxfY29uMCwgcGxsX2NvbjI7CisJY29uc3Qgc3RydWN0IHNhbXN1bmdfcGxsX3JhdGVfdGFibGUgKnJhdGU7CisKKwlyYXRlID0gc2Ftc3VuZ19nZXRfcGxsX3NldHRpbmdzKHBsbCwgZHJhdGUpOworCWlmICghcmF0ZSkgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIHJhdGUgOiAlbHUgZm9yIHBsbCBjbGsgJXNcbiIsIF9fZnVuY19fLAorCQkJZHJhdGUsIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGxsX2NvbjAgPSBfX3Jhd19yZWFkbChwbGwtPmNvbl9yZWcpOworCXBsbF9jb24yID0gX19yYXdfcmVhZGwocGxsLT5jb25fcmVnICsgOCk7CisKKwkgLyogQ2hhbmdlIFBMTCBQTVMgdmFsdWVzICovCisJcGxsX2NvbjAgJj0gfihQTEwyNjUwWFhfTURJVl9NQVNLIDw8IFBMTDI2NTBYWF9NRElWX1NISUZUIHwKKwkJCVBMTDI2NTBYWF9QRElWX01BU0sgPDwgUExMMjY1MFhYX1BESVZfU0hJRlQgfAorCQkJUExMMjY1MFhYX1NESVZfTUFTSyA8PCBQTEwyNjUwWFhfU0RJVl9TSElGVCk7CisJcGxsX2NvbjAgfD0gcmF0ZS0+bWRpdiA8PCBQTEwyNjUwWFhfTURJVl9TSElGVDsKKwlwbGxfY29uMCB8PSByYXRlLT5wZGl2IDw8IFBMTDI2NTBYWF9QRElWX1NISUZUOworCXBsbF9jb24wIHw9IHJhdGUtPnNkaXYgPDwgUExMMjY1MFhYX1NESVZfU0hJRlQ7CisJcGxsX2NvbjAgfD0gMSA8PCBQTEwyNjUwWFhfUExMX0VOQUJMRV9TSElGVDsKKwlwbGxfY29uMCB8PSAxIDw8IFBMTDI2NTBYWF9QTExfRk9VVE1BU0tfU0hJRlQ7CisKKwlwbGxfY29uMiAmPSB+KFBMTDI2NTBYWF9LRElWX01BU0sgPDwgUExMMjY1MFhYX0tESVZfU0hJRlQpOworCXBsbF9jb24yIHw9ICgofihyYXRlLT5rZGl2KSArIDEpICYgUExMMjY1MFhYX0tESVZfTUFTSykKKwkJCTw8IFBMTDI2NTBYWF9LRElWX1NISUZUOworCisJLyogU2V0IFBMTCBsb2NrIHRpbWUuICovCisJX19yYXdfd3JpdGVsKFBMTDI2NTBYWF9MT0NLX0ZBQ1RPUiAqIHJhdGUtPnBkaXYsIHBsbC0+bG9ja19yZWcpOworCisJX19yYXdfd3JpdGVsKHBsbF9jb24wLCBwbGwtPmNvbl9yZWcpOworCV9fcmF3X3dyaXRlbChwbGxfY29uMiwgcGxsLT5jb25fcmVnICsgOCk7CisKKwlkbyB7CisJCXRtcCA9IF9fcmF3X3JlYWRsKHBsbC0+Y29uX3JlZyk7CisJfSB3aGlsZSAoISh0bXAgJiAoMHgxIDw8IFBMTDI2NTBYWF9QTExfTE9DS1RJTUVfU0hJRlQpKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbXN1bmdfcGxsMjY1MHh4X2Nsa19vcHMgPSB7CisJLnJlY2FsY19yYXRlID0gc2Ftc3VuZ19wbGwyNjUweHhfcmVjYWxjX3JhdGUsCisJLnNldF9yYXRlID0gc2Ftc3VuZ19wbGwyNjUweHhfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBzYW1zdW5nX3BsbF9yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHNhbXN1bmdfcGxsMjY1MHh4X2Nsa19taW5fb3BzID0geworCS5yZWNhbGNfcmF0ZSA9IHNhbXN1bmdfcGxsMjY1MHh4X3JlY2FsY19yYXRlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IF9zYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCisJCQkJc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrICpwbGxfY2xrLAorCQkJCXZvaWQgX19pb21lbSAqYmFzZSkKIHsKIAlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcGxsICpwbGw7CiAJc3RydWN0IGNsayAqY2xrOwpAQCAtNzQ2LDYgKzExODEsMTIgQEAKIAl9CiAKIAlzd2l0Y2ggKHBsbF9jbGstPnR5cGUpIHsKKwljYXNlIHBsbF8yMTI2OgorCQlpbml0Lm9wcyA9ICZzYW1zdW5nX3BsbDIxMjZfY2xrX29wczsKKwkJYnJlYWs7CisJY2FzZSBwbGxfMzAwMDoKKwkJaW5pdC5vcHMgPSAmc2Ftc3VuZ19wbGwzMDAwX2Nsa19vcHM7CisJCWJyZWFrOwogCS8qIGNsa19vcHMgZm9yIDM1eHggYW5kIDI1NTAgYXJlIHNpbWlsYXIgKi8KIAljYXNlIHBsbF8zNXh4OgogCWNhc2UgcGxsXzI1NTA6CkBAIC03NzMsNiArMTIxNCw3IEBACiAJCQlpbml0Lm9wcyA9ICZzYW1zdW5nX3BsbDM2eHhfY2xrX29wczsKIAkJYnJlYWs7CiAJY2FzZSBwbGxfNjU1MjoKKwljYXNlIHBsbF82NTUyX3MzYzI0MTY6CiAJCWluaXQub3BzID0gJnNhbXN1bmdfcGxsNjU1Ml9jbGtfb3BzOwogCQlicmVhazsKIAljYXNlIHBsbF82NTUzOgpAQCAtNzg2LDYgKzEyMjgsMzYgQEAKIAkJZWxzZQogCQkJaW5pdC5vcHMgPSAmc2Ftc3VuZ19wbGw0Nnh4X2Nsa19vcHM7CiAJCWJyZWFrOworCWNhc2UgcGxsX3MzYzI0MTBfbXBsbDoKKwkJaWYgKCFwbGwtPnJhdGVfdGFibGUpCisJCQlpbml0Lm9wcyA9ICZzYW1zdW5nX3MzYzI0MTBfbXBsbF9jbGtfbWluX29wczsKKwkJZWxzZQorCQkJaW5pdC5vcHMgPSAmc2Ftc3VuZ19zM2MyNDEwX21wbGxfY2xrX29wczsKKwkJYnJlYWs7CisJY2FzZSBwbGxfczNjMjQxMF91cGxsOgorCQlpZiAoIXBsbC0+cmF0ZV90YWJsZSkKKwkJCWluaXQub3BzID0gJnNhbXN1bmdfczNjMjQxMF91cGxsX2Nsa19taW5fb3BzOworCQllbHNlCisJCQlpbml0Lm9wcyA9ICZzYW1zdW5nX3MzYzI0MTBfdXBsbF9jbGtfb3BzOworCQlicmVhazsKKwljYXNlIHBsbF9zM2MyNDQwX21wbGw6CisJCWlmICghcGxsLT5yYXRlX3RhYmxlKQorCQkJaW5pdC5vcHMgPSAmc2Ftc3VuZ19zM2MyNDQwX21wbGxfY2xrX21pbl9vcHM7CisJCWVsc2UKKwkJCWluaXQub3BzID0gJnNhbXN1bmdfczNjMjQ0MF9tcGxsX2Nsa19vcHM7CisJCWJyZWFrOworCWNhc2UgcGxsXzI1NTB4eDoKKwkJaWYgKCFwbGwtPnJhdGVfdGFibGUpCisJCQlpbml0Lm9wcyA9ICZzYW1zdW5nX3BsbDI1NTB4eF9jbGtfbWluX29wczsKKwkJZWxzZQorCQkJaW5pdC5vcHMgPSAmc2Ftc3VuZ19wbGwyNTUweHhfY2xrX29wczsKKwkJYnJlYWs7CisJY2FzZSBwbGxfMjY1MHh4OgorCQlpZiAoIXBsbC0+cmF0ZV90YWJsZSkKKwkJCWluaXQub3BzID0gJnNhbXN1bmdfcGxsMjY1MHh4X2Nsa19taW5fb3BzOworCQllbHNlCisJCQlpbml0Lm9wcyA9ICZzYW1zdW5nX3BsbDI2NTB4eF9jbGtfb3BzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl93YXJuKCIlczogVW5rbm93biBwbGwgdHlwZSBmb3IgcGxsIGNsayAlc1xuIiwKIAkJCV9fZnVuY19fLCBwbGxfY2xrLT5uYW1lKTsKQEAgLTgwNCw3ICsxMjc2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNhbXN1bmdfY2xrX2FkZF9sb29rdXAoY2xrLCBwbGxfY2xrLT5pZCk7CisJc2Ftc3VuZ19jbGtfYWRkX2xvb2t1cChjdHgsIGNsaywgcGxsX2Nsay0+aWQpOwogCiAJaWYgKCFwbGxfY2xrLT5hbGlhcykKIAkJcmV0dXJuOwpAQCAtODE1LDExICsxMjg3LDEyIEBACiAJCQlfX2Z1bmNfXywgcGxsX2Nsay0+bmFtZSwgcmV0KTsKIH0KIAotdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCBzYW1zdW5nX3BsbF9jbG9jayAqcGxsX2xpc3QsCi0JCQkJdW5zaWduZWQgaW50IG5yX3BsbCwgdm9pZCBfX2lvbWVtICpiYXNlKQordm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAorCQkJc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrICpwbGxfbGlzdCwKKwkJCXVuc2lnbmVkIGludCBucl9wbGwsIHZvaWQgX19pb21lbSAqYmFzZSkKIHsKIAlpbnQgY250OwogCiAJZm9yIChjbnQgPSAwOyBjbnQgPCBucl9wbGw7IGNudCsrKQotCQlfc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKCZwbGxfbGlzdFtjbnRdLCBiYXNlKTsKKwkJX3NhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChjdHgsICZwbGxfbGlzdFtjbnRdLCBiYXNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXBsbC5oIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstcGxsLmgKaW5kZXggNmMzOTAzMC4uYzBlZDRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstcGxsLmgKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstcGxsLmgKQEAgLTEzLDYgKzEzLDggQEAKICNkZWZpbmUgX19TQU1TVU5HX0NMS19QTExfSAogCiBlbnVtIHNhbXN1bmdfcGxsX3R5cGUgeworCXBsbF8yMTI2LAorCXBsbF8zMDAwLAogCXBsbF8zNXh4LAogCXBsbF8zNnh4LAogCXBsbF8yNTUwLApAQCAtMjQsNyArMjYsMTMgQEAKIAlwbGxfNDY1MCwKIAlwbGxfNDY1MGMsCiAJcGxsXzY1NTIsCisJcGxsXzY1NTJfczNjMjQxNiwKIAlwbGxfNjU1MywKKwlwbGxfczNjMjQxMF9tcGxsLAorCXBsbF9zM2MyNDEwX3VwbGwsCisJcGxsX3MzYzI0NDBfbXBsbCwKKwlwbGxfMjU1MHh4LAorCXBsbF8yNjUweHgsCiB9OwogCiAjZGVmaW5lIFBMTF8zNVhYX1JBVEUoX3JhdGUsIF9tLCBfcCwgX3MpCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQxMC1kY2xrLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1zM2MyNDEwLWRjbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQ5Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQxMC1kY2xrLmMKQEAgLTAsMCArMSw0NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENvbW1vbiBDbG9jayBGcmFtZXdvcmsgc3VwcG9ydCBmb3IgczNjMjR4eCBleHRlcm5hbCBjbG9jayBvdXRwdXQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImNsay5oIgorCisvKiBsZWdhY3kgYWNjZXNzIHRvIG1pc2NjciwgdW50aWwgZHQgY29udmVyc2lvbiBpcyBmaW5pc2hlZCAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorCisjZGVmaW5lIE1VWF9EQ0xLMAkwCisjZGVmaW5lIE1VWF9EQ0xLMQkxCisjZGVmaW5lIERJVl9EQ0xLMAkyCisjZGVmaW5lIERJVl9EQ0xLMQkzCisjZGVmaW5lIEdBVEVfRENMSzAJNAorI2RlZmluZSBHQVRFX0RDTEsxCTUKKyNkZWZpbmUgTVVYX0NMS09VVDAJNgorI2RlZmluZSBNVVhfQ0xLT1VUMQk3CisjZGVmaW5lIERDTEtfTUFYX0NMS1MJKE1VWF9DTEtPVVQxICsgMSkKKworZW51bSBzdXBwb3J0ZWRfc29jcyB7CisJUzNDMjQxMCwKKwlTM0MyNDEyLAorCVMzQzI0NDAsCisJUzNDMjQ0MywKK307CisKK3N0cnVjdCBzM2MyNHh4X2RjbGtfZHJ2X2RhdGEgeworCWNvbnN0IGNoYXIgKipjbGtvdXQwX3BhcmVudF9uYW1lczsKKwlpbnQgY2xrb3V0MF9udW1fcGFyZW50czsKKwljb25zdCBjaGFyICoqY2xrb3V0MV9wYXJlbnRfbmFtZXM7CisJaW50IGNsa291dDFfbnVtX3BhcmVudHM7CisJY29uc3QgY2hhciAqKm11eF9wYXJlbnRfbmFtZXM7CisJaW50IG11eF9udW1fcGFyZW50czsKK307CisKKy8qCisgKiBDbG9jayBmb3Igb3V0cHV0LXBhcmVudCBzZWxlY3Rpb24gaW4gbWlzY2NyCisgKi8KKworc3RydWN0IHMzYzI0eHhfY2xrb3V0IHsKKwlzdHJ1Y3QgY2xrX2h3CQlodzsKKwl1MzIJCQltYXNrOworCXU4CQkJc2hpZnQ7Cit9OworCisjZGVmaW5lIHRvX3MzYzI0eHhfY2xrb3V0KF9odykgY29udGFpbmVyX29mKF9odywgc3RydWN0IHMzYzI0eHhfY2xrb3V0LCBodykKKworc3RhdGljIHU4IHMzYzI0eHhfY2xrb3V0X2dldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IHMzYzI0eHhfY2xrb3V0ICpjbGtvdXQgPSB0b19zM2MyNHh4X2Nsa291dChodyk7CisJaW50IG51bV9wYXJlbnRzID0gX19jbGtfZ2V0X251bV9wYXJlbnRzKGh3LT5jbGspOworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbF9yZWxheGVkKFMzQzI0WFhfTUlTQ0NSKSA+PiBjbGtvdXQtPnNoaWZ0OworCXZhbCA+Pj0gY2xrb3V0LT5zaGlmdDsKKwl2YWwgJj0gY2xrb3V0LT5tYXNrOworCisJaWYgKHZhbCA+PSBudW1fcGFyZW50cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfY2xrb3V0X3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KQoreworCXN0cnVjdCBzM2MyNHh4X2Nsa291dCAqY2xrb3V0ID0gdG9fczNjMjR4eF9jbGtvdXQoaHcpOworCWludCByZXQgPSAwOworCisJczNjMjQxMF9tb2RpZnlfbWlzY2NyKChjbGtvdXQtPm1hc2sgPDwgY2xrb3V0LT5zaGlmdCksCisJCQkgICAgICAoaW5kZXggPDwgY2xrb3V0LT5zaGlmdCkpOworCisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGNsa19vcHMgczNjMjR4eF9jbGtvdXRfb3BzID0geworCS5nZXRfcGFyZW50ID0gczNjMjR4eF9jbGtvdXRfZ2V0X3BhcmVudCwKKwkuc2V0X3BhcmVudCA9IHMzYzI0eHhfY2xrb3V0X3NldF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlID0gX19jbGtfbXV4X2RldGVybWluZV9yYXRlLAorfTsKKworc3RydWN0IGNsayAqczNjMjR4eF9yZWdpc3Rlcl9jbGtvdXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCB1OCBudW1fcGFyZW50cywKKwkJdTggc2hpZnQsIHUzMiBtYXNrKQoreworCXN0cnVjdCBzM2MyNHh4X2Nsa291dCAqY2xrb3V0OworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0OworCisJLyogYWxsb2NhdGUgdGhlIGNsa291dCAqLworCWNsa291dCA9IGt6YWxsb2Moc2l6ZW9mKCpjbGtvdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsa291dCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpbml0Lm5hbWUgPSBuYW1lOworCWluaXQub3BzID0gJnMzYzI0eHhfY2xrb3V0X29wczsKKwlpbml0LmZsYWdzID0gQ0xLX0lTX0JBU0lDOworCWluaXQucGFyZW50X25hbWVzID0gcGFyZW50X25hbWVzOworCWluaXQubnVtX3BhcmVudHMgPSBudW1fcGFyZW50czsKKworCWNsa291dC0+c2hpZnQgPSBzaGlmdDsKKwljbGtvdXQtPm1hc2sgPSBtYXNrOworCWNsa291dC0+aHcuaW5pdCA9ICZpbml0OworCisJY2xrID0gY2xrX3JlZ2lzdGVyKGRldiwgJmNsa291dC0+aHcpOworCisJcmV0dXJuIGNsazsKK30KKworLyoKKyAqIGRjbGsgYW5kIGNsa291dCBpbml0CisgKi8KKworc3RydWN0IHMzYzI0eHhfZGNsayB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGNsazBfZGl2X2NoYW5nZV9uYjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGNsazFfZGl2X2NoYW5nZV9uYjsKKwlzcGlubG9ja190IGRjbGtfbG9jazsKKwl1bnNpZ25lZCBsb25nIHJlZ19zYXZlOworfTsKKworI2RlZmluZSB0b19zM2MyNHh4X2RjbGswKHgpIFwKKwkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBzM2MyNHh4X2RjbGssIGRjbGswX2Rpdl9jaGFuZ2VfbmIpCisKKyNkZWZpbmUgdG9fczNjMjR4eF9kY2xrMSh4KSBcCisJCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgczNjMjR4eF9kY2xrLCBkY2xrMV9kaXZfY2hhbmdlX25iKQorCitzdGF0aWMgY29uc3QgY2hhciAqZGNsa19zM2MyNDEwX3BbXSA9IHsgInBjbGsiLCAidWNsayIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjbGtvdXQwX3MzYzI0MTBfcFtdID0geyAibXBsbCIsICJ1cGxsIiwgImZjbGsiLCAiaGNsayIsICJwY2xrIiwKKwkJCSAgICAgImdhdGVfZGNsazAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqY2xrb3V0MV9zM2MyNDEwX3BbXSA9IHsgIm1wbGwiLCAidXBsbCIsICJmY2xrIiwgImhjbGsiLCAicGNsayIsCisJCQkgICAgICJnYXRlX2RjbGsxIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqY2xrb3V0MF9zM2MyNDEyX3BbXSA9IHsgIm1wbGwiLCAidXBsbCIsICJydGNfY2xrb3V0IiwKKwkJCSAgICAgImhjbGsiLCAicGNsayIsICJnYXRlX2RjbGswIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNsa291dDFfczNjMjQxMl9wW10gPSB7ICJ4dGkiLCAidXBsbCIsICJmY2xrIiwgImhjbGsiLCAicGNsayIsCisJCQkgICAgICJnYXRlX2RjbGsxIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqY2xrb3V0MF9zM2MyNDQwX3BbXSA9IHsgInh0aSIsICJ1cGxsIiwgImZjbGsiLCAiaGNsayIsICJwY2xrIiwKKwkJCSAgICAgImdhdGVfZGNsazAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqY2xrb3V0MV9zM2MyNDQwX3BbXSA9IHsgIm1wbGwiLCAidXBsbCIsICJydGNfY2xrb3V0IiwKKwkJCSAgICAgImhjbGsiLCAicGNsayIsICJnYXRlX2RjbGsxIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGNsa19zM2MyNDQzX3BbXSA9IHsgInBjbGsiLCAiZXBsbCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjbGtvdXQwX3MzYzI0NDNfcFtdID0geyAieHRpIiwgImVwbGwiLCAiYXJtY2xrIiwgImhjbGsiLCAicGNsayIsCisJCQkgICAgICJnYXRlX2RjbGswIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNsa291dDFfczNjMjQ0M19wW10gPSB7ICJkdW1teSIsICJlcGxsIiwgInJ0Y19jbGtvdXQiLAorCQkJICAgICAiaGNsayIsICJwY2xrIiwgImdhdGVfZGNsazEiIH07CisKKyNkZWZpbmUgRENMS0NPTl9EQ0xLX0RJVl9NQVNLCQkweGYKKyNkZWZpbmUgRENMS0NPTl9EQ0xLMF9ESVZfU0hJRlQJCTQKKyNkZWZpbmUgRENMS0NPTl9EQ0xLMF9DTVBfU0hJRlQJCTgKKyNkZWZpbmUgRENMS0NPTl9EQ0xLMV9ESVZfU0hJRlQJCTIwCisjZGVmaW5lIERDTEtDT05fRENMSzFfQ01QX1NISUZUCQkyNAorCitzdGF0aWMgdm9pZCBzM2MyNHh4X2RjbGtfdXBkYXRlX2NtcChzdHJ1Y3QgczNjMjR4eF9kY2xrICpzM2MyNHh4X2RjbGssCisJCQkJICAgIGludCBkaXZfc2hpZnQsIGludCBjbXBfc2hpZnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdTMyIGRjbGtfY29uLCBkaXYsIGNtcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzM2MyNHh4X2RjbGstPmRjbGtfbG9jaywgZmxhZ3MpOworCisJZGNsa19jb24gPSByZWFkbF9yZWxheGVkKHMzYzI0eHhfZGNsay0+YmFzZSk7CisKKwlkaXYgPSAoKGRjbGtfY29uID4+IGRpdl9zaGlmdCkgJiBEQ0xLQ09OX0RDTEtfRElWX01BU0spICsgMTsKKwljbXAgPSAoKGRpdiArIDEpIC8gMikgLSAxOworCisJZGNsa19jb24gJj0gfihEQ0xLQ09OX0RDTEtfRElWX01BU0sgPDwgY21wX3NoaWZ0KTsKKwlkY2xrX2NvbiB8PSAoY21wIDw8IGNtcF9zaGlmdCk7CisKKwl3cml0ZWxfcmVsYXhlZChkY2xrX2NvbiwgczNjMjR4eF9kY2xrLT5iYXNlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMzYzI0eHhfZGNsay0+ZGNsa19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9kY2xrMF9kaXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9kY2xrICpzM2MyNHh4X2RjbGsgPSB0b19zM2MyNHh4X2RjbGswKG5iKTsKKworCWlmIChldmVudCA9PSBQT1NUX1JBVEVfQ0hBTkdFKSB7CisJCXMzYzI0eHhfZGNsa191cGRhdGVfY21wKHMzYzI0eHhfZGNsaywKKwkJCURDTEtDT05fRENMSzBfRElWX1NISUZULCBEQ0xLQ09OX0RDTEswX0NNUF9TSElGVCk7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfZGNsazFfZGl2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHMzYzI0eHhfZGNsayAqczNjMjR4eF9kY2xrID0gdG9fczNjMjR4eF9kY2xrMShuYik7CisKKwlpZiAoZXZlbnQgPT0gUE9TVF9SQVRFX0NIQU5HRSkgeworCQlzM2MyNHh4X2RjbGtfdXBkYXRlX2NtcChzM2MyNHh4X2RjbGssCisJCQlEQ0xLQ09OX0RDTEsxX0RJVl9TSElGVCwgRENMS0NPTl9EQ0xLMV9DTVBfU0hJRlQpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBzM2MyNHh4X2RjbGtfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzM2MyNHh4X2RjbGsgKnMzYzI0eHhfZGNsayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJczNjMjR4eF9kY2xrLT5yZWdfc2F2ZSA9IHJlYWRsX3JlbGF4ZWQoczNjMjR4eF9kY2xrLT5iYXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X2RjbGtfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHMzYzI0eHhfZGNsayAqczNjMjR4eF9kY2xrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl3cml0ZWxfcmVsYXhlZChzM2MyNHh4X2RjbGstPnJlZ19zYXZlLCBzM2MyNHh4X2RjbGstPmJhc2UpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhzM2MyNHh4X2RjbGtfcG1fb3BzLAorCQkJIHMzYzI0eHhfZGNsa19zdXNwZW5kLCBzM2MyNHh4X2RjbGtfcmVzdW1lKTsKKworc3RhdGljIGludCBzM2MyNHh4X2RjbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9kY2xrICpzM2MyNHh4X2RjbGs7CisJc3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGNsayAqKmNsa190YWJsZTsKKwlzdHJ1Y3QgczNjMjR4eF9kY2xrX2Rydl9kYXRhICpkY2xrX3ZhcmlhbnQ7CisJaW50IHJldCwgaTsKKworCXMzYzI0eHhfZGNsayA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnMzYzI0eHhfZGNsayksCisJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghczNjMjR4eF9kY2xrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMzYzI0eHhfZGNsay0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzM2MyNHh4X2RjbGspOworCXNwaW5fbG9ja19pbml0KCZzM2MyNHh4X2RjbGstPmRjbGtfbG9jayk7CisKKwljbGtfdGFibGUgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBjbGsgKikgKiBEQ0xLX01BWF9DTEtTLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsa190YWJsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzM2MyNHh4X2RjbGstPmNsa19kYXRhLmNsa3MgPSBjbGtfdGFibGU7CisJczNjMjR4eF9kY2xrLT5jbGtfZGF0YS5jbGtfbnVtID0gRENMS19NQVhfQ0xLUzsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJczNjMjR4eF9kY2xrLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIG1lbSk7CisJaWYgKElTX0VSUihzM2MyNHh4X2RjbGstPmJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihzM2MyNHh4X2RjbGstPmJhc2UpOworCisJZGNsa192YXJpYW50ID0gKHN0cnVjdCBzM2MyNHh4X2RjbGtfZHJ2X2RhdGEgKikKKwkJCQlwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpLT5kcml2ZXJfZGF0YTsKKworCisJY2xrX3RhYmxlW01VWF9EQ0xLMF0gPSBjbGtfcmVnaXN0ZXJfbXV4KCZwZGV2LT5kZXYsICJtdXhfZGNsazAiLAorCQkJCWRjbGtfdmFyaWFudC0+bXV4X3BhcmVudF9uYW1lcywKKwkJCQlkY2xrX3ZhcmlhbnQtPm11eF9udW1fcGFyZW50cywgMCwKKwkJCQlzM2MyNHh4X2RjbGstPmJhc2UsIDEsIDEsIDAsCisJCQkJJnMzYzI0eHhfZGNsay0+ZGNsa19sb2NrKTsKKwljbGtfdGFibGVbTVVYX0RDTEsxXSA9IGNsa19yZWdpc3Rlcl9tdXgoJnBkZXYtPmRldiwgIm11eF9kY2xrMSIsCisJCQkJZGNsa192YXJpYW50LT5tdXhfcGFyZW50X25hbWVzLAorCQkJCWRjbGtfdmFyaWFudC0+bXV4X251bV9wYXJlbnRzLCAwLAorCQkJCXMzYzI0eHhfZGNsay0+YmFzZSwgMTcsIDEsIDAsCisJCQkJJnMzYzI0eHhfZGNsay0+ZGNsa19sb2NrKTsKKworCWNsa190YWJsZVtESVZfRENMSzBdID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXIoJnBkZXYtPmRldiwgImRpdl9kY2xrMCIsCisJCQkJIm11eF9kY2xrMCIsIDAsIHMzYzI0eHhfZGNsay0+YmFzZSwKKwkJCQk0LCA0LCAwLCAmczNjMjR4eF9kY2xrLT5kY2xrX2xvY2spOworCWNsa190YWJsZVtESVZfRENMSzFdID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXIoJnBkZXYtPmRldiwgImRpdl9kY2xrMSIsCisJCQkJIm11eF9kY2xrMSIsIDAsIHMzYzI0eHhfZGNsay0+YmFzZSwKKwkJCQkyMCwgNCwgMCwgJnMzYzI0eHhfZGNsay0+ZGNsa19sb2NrKTsKKworCWNsa190YWJsZVtHQVRFX0RDTEswXSA9IGNsa19yZWdpc3Rlcl9nYXRlKCZwZGV2LT5kZXYsICJnYXRlX2RjbGswIiwKKwkJCQkiZGl2X2RjbGswIiwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwKKwkJCQlzM2MyNHh4X2RjbGstPmJhc2UsIDAsIDAsCisJCQkJJnMzYzI0eHhfZGNsay0+ZGNsa19sb2NrKTsKKwljbGtfdGFibGVbR0FURV9EQ0xLMV0gPSBjbGtfcmVnaXN0ZXJfZ2F0ZSgmcGRldi0+ZGV2LCAiZ2F0ZV9kY2xrMSIsCisJCQkJImRpdl9kY2xrMSIsIENMS19TRVRfUkFURV9QQVJFTlQsCisJCQkJczNjMjR4eF9kY2xrLT5iYXNlLCAxNiwgMCwKKwkJCQkmczNjMjR4eF9kY2xrLT5kY2xrX2xvY2spOworCisJY2xrX3RhYmxlW01VWF9DTEtPVVQwXSA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xrb3V0KCZwZGV2LT5kZXYsCisJCQkJImNsa291dDAiLCBkY2xrX3ZhcmlhbnQtPmNsa291dDBfcGFyZW50X25hbWVzLAorCQkJCWRjbGtfdmFyaWFudC0+Y2xrb3V0MF9udW1fcGFyZW50cywgNCwgNyk7CisJY2xrX3RhYmxlW01VWF9DTEtPVVQxXSA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xrb3V0KCZwZGV2LT5kZXYsCisJCQkJImNsa291dDEiLCBkY2xrX3ZhcmlhbnQtPmNsa291dDFfcGFyZW50X25hbWVzLAorCQkJCWRjbGtfdmFyaWFudC0+Y2xrb3V0MV9udW1fcGFyZW50cywgOCwgNyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRENMS19NQVhfQ0xLUzsgaSsrKQorCQlpZiAoSVNfRVJSKGNsa190YWJsZVtpXSkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNsb2NrICVkIGZhaWxlZCB0byByZWdpc3RlclxuIiwgaSk7CisJCQlyZXQgPSBQVFJfRVJSKGNsa190YWJsZVtpXSk7CisJCQlnb3RvIGVycl9jbGtfcmVnaXN0ZXI7CisJCX0KKworCXJldCA9IGNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrX3RhYmxlW01VWF9EQ0xLMF0sICJkY2xrMCIsIE5VTEwpOworCWlmICghcmV0KQorCQlyZXQgPSBjbGtfcmVnaXN0ZXJfY2xrZGV2KGNsa190YWJsZVtNVVhfRENMSzFdLCAiZGNsazEiLCBOVUxMKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGtfdGFibGVbTVVYX0NMS09VVDBdLAorCQkJCQkgICJjbGtvdXQwIiwgTlVMTCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrX3RhYmxlW01VWF9DTEtPVVQxXSwKKwkJCQkJICAiY2xrb3V0MSIsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGFsaWFzZXMsICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jbGtfcmVnaXN0ZXI7CisJfQorCisJczNjMjR4eF9kY2xrLT5kY2xrMF9kaXZfY2hhbmdlX25iLm5vdGlmaWVyX2NhbGwgPQorCQkJCQkJczNjMjR4eF9kY2xrMF9kaXZfbm90aWZ5OworCisJczNjMjR4eF9kY2xrLT5kY2xrMV9kaXZfY2hhbmdlX25iLm5vdGlmaWVyX2NhbGwgPQorCQkJCQkJczNjMjR4eF9kY2xrMV9kaXZfbm90aWZ5OworCisJcmV0ID0gY2xrX25vdGlmaWVyX3JlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzBdLAorCQkJCSAgICAmczNjMjR4eF9kY2xrLT5kY2xrMF9kaXZfY2hhbmdlX25iKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGtfcmVnaXN0ZXI7CisKKwlyZXQgPSBjbGtfbm90aWZpZXJfcmVnaXN0ZXIoY2xrX3RhYmxlW0RJVl9EQ0xLMV0sCisJCQkJICAgICZzM2MyNHh4X2RjbGstPmRjbGsxX2Rpdl9jaGFuZ2VfbmIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RjbGtfbm90aWZ5OworCisJcmV0dXJuIDA7CisKK2Vycl9kY2xrX25vdGlmeToKKwljbGtfbm90aWZpZXJfdW5yZWdpc3RlcihjbGtfdGFibGVbRElWX0RDTEswXSwKKwkJCQkmczNjMjR4eF9kY2xrLT5kY2xrMF9kaXZfY2hhbmdlX25iKTsKK2Vycl9jbGtfcmVnaXN0ZXI6CisJZm9yIChpID0gMDsgaSA8IERDTEtfTUFYX0NMS1M7IGkrKykKKwkJaWYgKGNsa190YWJsZVtpXSAmJiAhSVNfRVJSKGNsa190YWJsZVtpXSkpCisJCQljbGtfdW5yZWdpc3RlcihjbGtfdGFibGVbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X2RjbGtfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHMzYzI0eHhfZGNsayAqczNjMjR4eF9kY2xrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGNsayAqKmNsa190YWJsZSA9IHMzYzI0eHhfZGNsay0+Y2xrX2RhdGEuY2xrczsKKwlpbnQgaTsKKworCWNsa19ub3RpZmllcl91bnJlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzFdLAorCQkJCSZzM2MyNHh4X2RjbGstPmRjbGsxX2Rpdl9jaGFuZ2VfbmIpOworCWNsa19ub3RpZmllcl91bnJlZ2lzdGVyKGNsa190YWJsZVtESVZfRENMSzBdLAorCQkJCSZzM2MyNHh4X2RjbGstPmRjbGswX2Rpdl9jaGFuZ2VfbmIpOworCisJZm9yIChpID0gMDsgaSA8IERDTEtfTUFYX0NMS1M7IGkrKykKKwkJY2xrX3VucmVnaXN0ZXIoY2xrX3RhYmxlW2ldKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZGNsa19kcnZfZGF0YSBkY2xrX3ZhcmlhbnRzW10gPSB7CisJW1MzQzI0MTBdID0geworCQkuY2xrb3V0MF9wYXJlbnRfbmFtZXMgPSBjbGtvdXQwX3MzYzI0MTBfcCwKKwkJLmNsa291dDBfbnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGNsa291dDBfczNjMjQxMF9wKSwKKwkJLmNsa291dDFfcGFyZW50X25hbWVzID0gY2xrb3V0MV9zM2MyNDEwX3AsCisJCS5jbGtvdXQxX251bV9wYXJlbnRzID0gQVJSQVlfU0laRShjbGtvdXQxX3MzYzI0MTBfcCksCisJCS5tdXhfcGFyZW50X25hbWVzID0gZGNsa19zM2MyNDEwX3AsCisJCS5tdXhfbnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRjbGtfczNjMjQxMF9wKSwKKwl9LAorCVtTM0MyNDEyXSA9IHsKKwkJLmNsa291dDBfcGFyZW50X25hbWVzID0gY2xrb3V0MF9zM2MyNDEyX3AsCisJCS5jbGtvdXQwX251bV9wYXJlbnRzID0gQVJSQVlfU0laRShjbGtvdXQwX3MzYzI0MTJfcCksCisJCS5jbGtvdXQxX3BhcmVudF9uYW1lcyA9IGNsa291dDFfczNjMjQxMl9wLAorCQkuY2xrb3V0MV9udW1fcGFyZW50cyA9IEFSUkFZX1NJWkUoY2xrb3V0MV9zM2MyNDEyX3ApLAorCQkubXV4X3BhcmVudF9uYW1lcyA9IGRjbGtfczNjMjQxMF9wLAorCQkubXV4X251bV9wYXJlbnRzID0gQVJSQVlfU0laRShkY2xrX3MzYzI0MTBfcCksCisJfSwKKwlbUzNDMjQ0MF0gPSB7CisJCS5jbGtvdXQwX3BhcmVudF9uYW1lcyA9IGNsa291dDBfczNjMjQ0MF9wLAorCQkuY2xrb3V0MF9udW1fcGFyZW50cyA9IEFSUkFZX1NJWkUoY2xrb3V0MF9zM2MyNDQwX3ApLAorCQkuY2xrb3V0MV9wYXJlbnRfbmFtZXMgPSBjbGtvdXQxX3MzYzI0NDBfcCwKKwkJLmNsa291dDFfbnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGNsa291dDFfczNjMjQ0MF9wKSwKKwkJLm11eF9wYXJlbnRfbmFtZXMgPSBkY2xrX3MzYzI0MTBfcCwKKwkJLm11eF9udW1fcGFyZW50cyA9IEFSUkFZX1NJWkUoZGNsa19zM2MyNDEwX3ApLAorCX0sCisJW1MzQzI0NDNdID0geworCQkuY2xrb3V0MF9wYXJlbnRfbmFtZXMgPSBjbGtvdXQwX3MzYzI0NDNfcCwKKwkJLmNsa291dDBfbnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGNsa291dDBfczNjMjQ0M19wKSwKKwkJLmNsa291dDFfcGFyZW50X25hbWVzID0gY2xrb3V0MV9zM2MyNDQzX3AsCisJCS5jbGtvdXQxX251bV9wYXJlbnRzID0gQVJSQVlfU0laRShjbGtvdXQxX3MzYzI0NDNfcCksCisJCS5tdXhfcGFyZW50X25hbWVzID0gZGNsa19zM2MyNDQzX3AsCisJCS5tdXhfbnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGRjbGtfczNjMjQ0M19wKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczNjMjR4eF9kY2xrX2RyaXZlcl9pZHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJzM2MyNDEwLWRjbGsiLAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJmRjbGtfdmFyaWFudHNbUzNDMjQxMF0sCisJfSwgeworCQkubmFtZQkJPSAiczNjMjQxMi1kY2xrIiwKKwkJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSZkY2xrX3ZhcmlhbnRzW1MzQzI0MTJdLAorCX0sIHsKKwkJLm5hbWUJCT0gInMzYzI0NDAtZGNsayIsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmZGNsa192YXJpYW50c1tTM0MyNDQwXSwKKwl9LCB7CisJCS5uYW1lCQk9ICJzM2MyNDQzLWRjbGsiLAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJmRjbGtfdmFyaWFudHNbUzNDMjQ0M10sCisJfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHMzYzI0eHhfZGNsa19kcml2ZXJfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9kY2xrX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiczNjMjR4eC1kY2xrIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gJnMzYzI0eHhfZGNsa19wbV9vcHMsCisJfSwKKwkucHJvYmUgPSBzM2MyNHh4X2RjbGtfcHJvYmUsCisJLnJlbW92ZSA9IHMzYzI0eHhfZGNsa19yZW1vdmUsCisJLmlkX3RhYmxlID0gczNjMjR4eF9kY2xrX2RyaXZlcl9pZHMsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzM2MyNHh4X2RjbGtfZHJpdmVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgUzNDMjRYWCBleHRlcm5hbCBjbG9jayBvdXRwdXRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1zM2MyNDEwLmMgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1zM2MyNDEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwNzE2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0MTAuYwpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29tbW9uIENsb2NrIEZyYW1ld29yayBzdXBwb3J0IGZvciBTM0MyNDEwIGFuZCBmb2xsb3dpbmcgU29Dcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3MzYzI0MTAuaD4KKworI2luY2x1ZGUgImNsay5oIgorI2luY2x1ZGUgImNsay1wbGwuaCIKKworI2RlZmluZSBMT0NLVElNRQkweDAwCisjZGVmaW5lIE1QTExDT04JCTB4MDQKKyNkZWZpbmUgVVBMTENPTgkJMHgwOAorI2RlZmluZSBDTEtDT04JCTB4MGMKKyNkZWZpbmUgQ0xLU0xPVwkJMHgxMAorI2RlZmluZSBDTEtESVZOCQkweDE0CisjZGVmaW5lIENBTURJVk4JCTB4MTgKKworLyogdGhlIHNvYyB0eXBlcyAqLworZW51bSBzdXBwb3J0ZWRfc29jcyB7CisJUzNDMjQxMCwKKwlTM0MyNDQwLAorCVMzQzI0NDIsCit9OworCisvKiBsaXN0IG9mIFBMTHMgdG8gYmUgcmVnaXN0ZXJlZCAqLworZW51bSBzM2MyNDEwX3BsbHMgeworCW1wbGwsIHVwbGwsCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIHN0cnVjdCBzYW1zdW5nX2Nsa19yZWdfZHVtcCAqczNjMjQxMF9zYXZlOworCisvKgorICogbGlzdCBvZiBjb250cm9sbGVyIHJlZ2lzdGVycyB0byBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgZHVyaW5nIGEKKyAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDEwX2Nsa19yZWdzW10gX19pbml0ZGF0YSA9IHsKKwlMT0NLVElNRSwKKwlNUExMQ09OLAorCVVQTExDT04sCisJQ0xLQ09OLAorCUNMS1NMT1csCisJQ0xLRElWTiwKKwlDQU1ESVZOLAorfTsKKworc3RhdGljIGludCBzM2MyNDEwX2Nsa19zdXNwZW5kKHZvaWQpCit7CisJc2Ftc3VuZ19jbGtfc2F2ZShyZWdfYmFzZSwgczNjMjQxMF9zYXZlLAorCQkJCUFSUkFZX1NJWkUoczNjMjQxMF9jbGtfcmVncykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfY2xrX3Jlc3VtZSh2b2lkKQoreworCXNhbXN1bmdfY2xrX3Jlc3RvcmUocmVnX2Jhc2UsIHMzYzI0MTBfc2F2ZSwKKwkJCQlBUlJBWV9TSVpFKHMzYzI0MTBfY2xrX3JlZ3MpKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDEwX2Nsa19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZCA9IHMzYzI0MTBfY2xrX3N1c3BlbmQsCisJLnJlc3VtZSA9IHMzYzI0MTBfY2xrX3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfY2xrX3NsZWVwX2luaXQodm9pZCkKK3sKKwlzM2MyNDEwX3NhdmUgPSBzYW1zdW5nX2Nsa19hbGxvY19yZWdfZHVtcChzM2MyNDEwX2Nsa19yZWdzLAorCQkJCQkJQVJSQVlfU0laRShzM2MyNDEwX2Nsa19yZWdzKSk7CisJaWYgKCFzM2MyNDEwX3NhdmUpIHsKKwkJcHJfd2FybigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBzbGVlcCBzYXZlIGRhdGEsIG5vIHNsZWVwIHN1cHBvcnQhXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0MTBfY2xrX3N5c2NvcmVfb3BzKTsKKwlyZXR1cm47Cit9CisjZWxzZQorc3RhdGljIHZvaWQgczNjMjQxMF9jbGtfc2xlZXBfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKK1BOQU1FKGZjbGtfcCkgPSB7ICJtcGxsIiwgImRpdl9zbG93IiB9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgczNjMjQxMF9jb21tb25fbXV4ZXNbXSBfX2luaXRkYXRhID0geworCU1VWChGQ0xLLCAiZmNsayIsIGZjbGtfcCwgQ0xLU0xPVywgNCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfdGFibGUgZGl2c2xvd19kW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDEgfSwKKwl7IC52YWwgPSAxLCAuZGl2ID0gMiB9LAorCXsgLnZhbCA9IDIsIC5kaXYgPSA0IH0sCisJeyAudmFsID0gMywgLmRpdiA9IDYgfSwKKwl7IC52YWwgPSA0LCAuZGl2ID0gOCB9LAorCXsgLnZhbCA9IDUsIC5kaXYgPSAxMCB9LAorCXsgLnZhbCA9IDYsIC5kaXYgPSAxMiB9LAorCXsgLnZhbCA9IDcsIC5kaXYgPSAxNCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBzM2MyNDEwX2NvbW1vbl9kaXZpZGVyc1tdIF9faW5pdGRhdGEgPSB7CisJRElWX1QoMCwgImRpdl9zbG93IiwgInh0aSIsIENMS1NMT1csIDAsIDMsIGRpdnNsb3dfZCksCisJRElWKFBDTEssICJwY2xrIiwgImhjbGsiLCBDTEtESVZOLCAwLCAxKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgczNjMjQxMF9jb21tb25fZ2F0ZXNbXSBfX2luaXRkYXRhID0geworCUdBVEUoUENMS19TUEksICJzcGkiLCAicGNsayIsIENMS0NPTiwgMTgsIDAsIDApLAorCUdBVEUoUENMS19JMlMsICJpMnMiLCAicGNsayIsIENMS0NPTiwgMTcsIDAsIDApLAorCUdBVEUoUENMS19JMkMsICJpMmMiLCAicGNsayIsIENMS0NPTiwgMTYsIDAsIDApLAorCUdBVEUoUENMS19BREMsICJhZGMiLCAicGNsayIsIENMS0NPTiwgMTUsIDAsIDApLAorCUdBVEUoUENMS19SVEMsICJydGMiLCAicGNsayIsIENMS0NPTiwgMTQsIDAsIDApLAorCUdBVEUoUENMS19HUElPLCAiZ3BpbyIsICJwY2xrIiwgQ0xLQ09OLCAxMywgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoUENMS19VQVJUMiwgInVhcnQyIiwgInBjbGsiLCBDTEtDT04sIDEyLCAwLCAwKSwKKwlHQVRFKFBDTEtfVUFSVDEsICJ1YXJ0MSIsICJwY2xrIiwgQ0xLQ09OLCAxMSwgMCwgMCksCisJR0FURShQQ0xLX1VBUlQwLCAidWFydDAiLCAicGNsayIsIENMS0NPTiwgMTAsIDAsIDApLAorCUdBVEUoUENMS19TREksICJzZGkiLCAicGNsayIsIENMS0NPTiwgOSwgMCwgMCksCisJR0FURShQQ0xLX1BXTSwgInB3bSIsICJwY2xrIiwgQ0xLQ09OLCA4LCAwLCAwKSwKKwlHQVRFKEhDTEtfVVNCRCwgInVzYi1kZXZpY2UiLCAiaGNsayIsIENMS0NPTiwgNywgMCwgMCksCisJR0FURShIQ0xLX1VTQkgsICJ1c2ItaG9zdCIsICJoY2xrIiwgQ0xLQ09OLCA2LCAwLCAwKSwKKwlHQVRFKEhDTEtfTENELCAibGNkIiwgImhjbGsiLCBDTEtDT04sIDUsIDAsIDApLAorCUdBVEUoSENMS19OQU5ELCAibmFuZCIsICJoY2xrIiwgQ0xLQ09OLCA0LCAwLCAwKSwKK307CisKKy8qIHNob3VsZCBiZSBhZGRlZCBfYWZ0ZXJfIHRoZSBzb2Mtc3BlY2lmaWMgY2xvY2tzIGFyZSBjcmVhdGVkICovCitzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyBzM2MyNDEwX2NvbW1vbl9hbGlhc2VzW10gX19pbml0ZGF0YSA9IHsKKwlBTElBUyhQQ0xLX0kyQywgInMzYzI0MTAtaTJjLjAiLCAiaTJjIiksCisJQUxJQVMoUENMS19BREMsIE5VTEwsICJhZGMiKSwKKwlBTElBUyhQQ0xLX1JUQywgTlVMTCwgInJ0YyIpLAorCUFMSUFTKFBDTEtfUFdNLCBOVUxMLCAidGltZXJzIiksCisJQUxJQVMoSENMS19MQ0QsIE5VTEwsICJsY2QiKSwKKwlBTElBUyhIQ0xLX1VTQkQsIE5VTEwsICJ1c2ItZGV2aWNlIiksCisJQUxJQVMoSENMS19VU0JILCBOVUxMLCAidXNiLWhvc3QiKSwKKwlBTElBUyhVQ0xLLCBOVUxMLCAidXNiLWJ1cy1ob3N0IiksCisJQUxJQVMoVUNMSywgTlVMTCwgInVzYi1idXMtZ2FkZ2V0IiksCisJQUxJQVMoQVJNQ0xLLCBOVUxMLCAiYXJtY2xrIiksCisJQUxJQVMoVUNMSywgTlVMTCwgInVjbGsiKSwKKwlBTElBUyhIQ0xLLCBOVUxMLCAiaGNsayIpLAorCUFMSUFTKE1QTEwsIE5VTEwsICJtcGxsIiksCisJQUxJQVMoRkNMSywgTlVMTCwgImZjbGsiKSwKK307CisKKy8qIFMzQzI0MTAgc3BlY2lmaWMgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfcmF0ZV90YWJsZSBwbGxfczNjMjQxMF8xMm1oel90YmxbXSBfX2luaXRkYXRhID0geworCS8qIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyICovCisJLyogMjQxMEEgZXh0cmFzICovCisJUExMXzM1WFhfUkFURSgyNzAwMDAwMDAsIDEyNywgMSwgMSksCisJUExMXzM1WFhfUkFURSgyNjgwMDAwMDAsIDEyNiwgMSwgMSksCisJUExMXzM1WFhfUkFURSgyNjYwMDAwMDAsIDEyNSwgMSwgMSksCisJUExMXzM1WFhfUkFURSgyMjYwMDAwMDAsIDEwNSwgMSwgMSksCisJUExMXzM1WFhfUkFURSgyMTAwMDAwMDAsIDEzMiwgMiwgMSksCisJLyogMjQxMCBjb21tb24gKi8KKwlQTExfMzVYWF9SQVRFKDIwMzAwMDAwMCwgMTYxLCAzLCAxKSwKKwlQTExfMzVYWF9SQVRFKDE5MjAwMDAwMCwgODgsIDEsIDEpLAorCVBMTF8zNVhYX1JBVEUoMTg2MDAwMDAwLCA4NSwgMSwgMSksCisJUExMXzM1WFhfUkFURSgxODAwMDAwMDAsIDgyLCAxLCAxKSwKKwlQTExfMzVYWF9SQVRFKDE3MDAwMDAwMCwgNzcsIDEsIDEpLAorCVBMTF8zNVhYX1JBVEUoMTU4MDAwMDAwLCA3MSwgMSwgMSksCisJUExMXzM1WFhfUkFURSgxNTIwMDAwMDAsIDY4LCAxLCAxKSwKKwlQTExfMzVYWF9SQVRFKDE0NzAwMDAwMCwgOTAsIDIsIDEpLAorCVBMTF8zNVhYX1JBVEUoMTM1MDAwMDAwLCA4MiwgMiwgMSksCisJUExMXzM1WFhfUkFURSgxMjQwMDAwMDAsIDExNiwgMSwgMiksCisJUExMXzM1WFhfUkFURSgxMTgwMDAwMDAsIDE1MCwgMiwgMiksCisJUExMXzM1WFhfUkFURSgxMTMwMDAwMDAsIDEwNSwgMSwgMiksCisJUExMXzM1WFhfUkFURSgxMDEwMDAwMDAsIDEyNywgMiwgMiksCisJUExMXzM1WFhfUkFURSg5MDAwMDAwMCwgMTEyLCAyLCAyKSwKKwlQTExfMzVYWF9SQVRFKDg1MDAwMDAwLCAxMDUsIDIsIDIpLAorCVBMTF8zNVhYX1JBVEUoNzkwMDAwMDAsIDcxLCAxLCAyKSwKKwlQTExfMzVYWF9SQVRFKDY4MDAwMDAwLCA4MiwgMiwgMiksCisJUExMXzM1WFhfUkFURSg1NjAwMDAwMCwgMTQyLCAyLCAzKSwKKwlQTExfMzVYWF9SQVRFKDQ4MDAwMDAwLCAxMjAsIDIsIDMpLAorCVBMTF8zNVhYX1JBVEUoNTEwMDAwMDAsIDE2MSwgMywgMyksCisJUExMXzM1WFhfUkFURSg0NTAwMDAwMCwgODIsIDEsIDMpLAorCVBMTF8zNVhYX1JBVEUoMzQwMDAwMDAsIDgyLCAyLCAzKSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIHMzYzI0MTBfcGxsc1tdIF9faW5pdGRhdGEgPSB7CisJW21wbGxdID0gUExMKHBsbF9zM2MyNDEwX21wbGwsIE1QTEwsICJtcGxsIiwgInh0aSIsCisJCQkJCQlMT0NLVElNRSwgTVBMTENPTiwgTlVMTCksCisJW3VwbGxdID0gUExMKHBsbF9zM2MyNDEwX3VwbGwsIFVQTEwsICJ1cGxsIiwgInh0aSIsCisJCQkJCQlMT0NLVElNRSwgVVBMTENPTiwgTlVMTCksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgczNjMjQxMF9kaXZpZGVyc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKEhDTEssICJoY2xrIiwgIm1wbGwiLCBDTEtESVZOLCAxLCAxKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayBzM2MyNDEwX2ZmYWN0b3JbXSBfX2luaXRkYXRhID0geworCS8qCisJICogYXJtY2xrIGlzIGRpcmVjdGx5IHN1cHBsaWVkIGJ5IHRoZSBmY2xrLCB3aXRob3V0CisJICogc3dpdGNoaW5nIHBvc3NpYmlsaXR5IGxpa2Ugb24gdGhlIHMzYzI0NHggYmVsb3cuCisJICovCisJRkZBQ1RPUihBUk1DTEssICJhcm1jbGsiLCAiZmNsayIsIDEsIDEsIDApLAorCisJLyogdWNsayBpcyBmZWQgZnJvbSB0aGUgdW5tb2RpZmllZCB1cGxsICovCisJRkZBQ1RPUihVQ0xLLCAidWNsayIsICJ1cGxsIiwgMSwgMSwgMCksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyBzM2MyNDEwX2FsaWFzZXNbXSBfX2luaXRkYXRhID0geworCUFMSUFTKFBDTEtfVUFSVDAsICJzM2MyNDEwLXVhcnQuMCIsICJ1YXJ0IiksCisJQUxJQVMoUENMS19VQVJUMSwgInMzYzI0MTAtdWFydC4xIiwgInVhcnQiKSwKKwlBTElBUyhQQ0xLX1VBUlQyLCAiczNjMjQxMC11YXJ0LjIiLCAidWFydCIpLAorCUFMSUFTKFBDTEtfVUFSVDAsICJzM2MyNDEwLXVhcnQuMCIsICJjbGtfdWFydF9iYXVkMCIpLAorCUFMSUFTKFBDTEtfVUFSVDEsICJzM2MyNDEwLXVhcnQuMSIsICJjbGtfdWFydF9iYXVkMCIpLAorCUFMSUFTKFBDTEtfVUFSVDIsICJzM2MyNDEwLXVhcnQuMiIsICJjbGtfdWFydF9iYXVkMCIpLAorCUFMSUFTKFVDTEssIE5VTEwsICJjbGtfdWFydF9iYXVkMSIpLAorfTsKKworLyogUzNDMjQ0eCBzcGVjaWZpYyBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX3BsbF9yYXRlX3RhYmxlIHBsbF9zM2MyNDR4XzEybWh6X3RibFtdIF9faW5pdGRhdGEgPSB7CisJLyogc29ydGVkIGluIGRlc2NlbmRpbmcgb3JkZXIgKi8KKwlQTExfMzVYWF9SQVRFKDQwMDAwMDAwMCwgMHg1YywgMSwgMSksCisJUExMXzM1WFhfUkFURSgzOTAwMDAwMDAsIDB4N2EsIDIsIDEpLAorCVBMTF8zNVhYX1JBVEUoMzgwMDAwMDAwLCAweDU3LCAxLCAxKSwKKwlQTExfMzVYWF9SQVRFKDM3MDAwMDAwMCwgMHhiMSwgNCwgMSksCisJUExMXzM1WFhfUkFURSgzNjAwMDAwMDAsIDB4NzAsIDIsIDEpLAorCVBMTF8zNVhYX1JBVEUoMzUwMDAwMDAwLCAweGE3LCA0LCAxKSwKKwlQTExfMzVYWF9SQVRFKDM0MDAwMDAwMCwgMHg0ZCwgMSwgMSksCisJUExMXzM1WFhfUkFURSgzMzAwMDAwMDAsIDB4NjYsIDIsIDEpLAorCVBMTF8zNVhYX1JBVEUoMzIwMDAwMDAwLCAweDk4LCA0LCAxKSwKKwlQTExfMzVYWF9SQVRFKDMxMDAwMDAwMCwgMHg5MywgNCwgMSksCisJUExMXzM1WFhfUkFURSgzMDAwMDAwMDAsIDB4NzUsIDMsIDEpLAorCVBMTF8zNVhYX1JBVEUoMjQwMDAwMDAwLCAweDcwLCAxLCAyKSwKKwlQTExfMzVYWF9SQVRFKDIzMDAwMDAwMCwgMHg2YiwgMSwgMiksCisJUExMXzM1WFhfUkFURSgyMjAwMDAwMDAsIDB4NjYsIDEsIDIpLAorCVBMTF8zNVhYX1JBVEUoMjEwMDAwMDAwLCAweDg0LCAyLCAyKSwKKwlQTExfMzVYWF9SQVRFKDIwMDAwMDAwMCwgMHg1YywgMSwgMiksCisJUExMXzM1WFhfUkFURSgxOTAwMDAwMDAsIDB4NTcsIDEsIDIpLAorCVBMTF8zNVhYX1JBVEUoMTgwMDAwMDAwLCAweDcwLCAyLCAyKSwKKwlQTExfMzVYWF9SQVRFKDE3MDAwMDAwMCwgMHg0ZCwgMSwgMiksCisJUExMXzM1WFhfUkFURSgxNjAwMDAwMDAsIDB4OTgsIDQsIDIpLAorCVBMTF8zNVhYX1JBVEUoMTUwMDAwMDAwLCAweDc1LCAzLCAyKSwKKwlQTExfMzVYWF9SQVRFKDEyMDAwMDAwMCwgMHg3MCwgMSwgMyksCisJUExMXzM1WFhfUkFURSgxMTAwMDAwMDAsIDB4NjYsIDEsIDMpLAorCVBMTF8zNVhYX1JBVEUoMTAwMDAwMDAwLCAweDVjLCAxLCAzKSwKKwlQTExfMzVYWF9SQVRFKDkwMDAwMDAwLCAweDcwLCAyLCAzKSwKKwlQTExfMzVYWF9SQVRFKDgwMDAwMDAwLCAweDk4LCA0LCAzKSwKKwlQTExfMzVYWF9SQVRFKDc1MDAwMDAwLCAweDc1LCAzLCAzKSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIHMzYzI0NHhfY29tbW9uX3BsbHNbXSBfX2luaXRkYXRhID0geworCVttcGxsXSA9IFBMTChwbGxfczNjMjQ0MF9tcGxsLCBNUExMLCAibXBsbCIsICJ4dGkiLAorCQkJCQkJTE9DS1RJTUUsIE1QTExDT04sIE5VTEwpLAorCVt1cGxsXSA9IFBMTChwbGxfczNjMjQxMF91cGxsLCBVUExMLCAidXBsbCIsICJ4dGkiLAorCQkJCQkJTE9DS1RJTUUsIFVQTExDT04sIE5VTEwpLAorfTsKKworUE5BTUUoaGNsa19wKSA9IHsgImZjbGsiLCAiZGl2X2hjbGtfMiIsICJkaXZfaGNsa180IiwgImRpdl9oY2xrXzMiIH07CitQTkFNRShhcm1jbGtfcCkgPSB7ICJmY2xrIiwgImhjbGsiIH07CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBzM2MyNDR4X2NvbW1vbl9tdXhlc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKEhDTEssICJoY2xrIiwgaGNsa19wLCBDTEtESVZOLCAxLCAyKSwKKwlNVVgoQVJNQ0xLLCAiYXJtY2xrIiwgYXJtY2xrX3AsIENBTURJVk4sIDEyLCAxKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayBzM2MyNDR4X2NvbW1vbl9mZmFjdG9yW10gX19pbml0ZGF0YSA9IHsKKwlGRkFDVE9SKDAsICJkaXZfaGNsa18yIiwgImZjbGsiLCAxLCAyLCAwKSwKKwlGRkFDVE9SKDAsICJmZl9jYW0iLCAiZGl2X2NhbSIsIDIsIDEsIENMS19TRVRfUkFURV9QQVJFTlQpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2X3RhYmxlIGRpdl9oY2xrXzRfZFtdID0geworCXsgLnZhbCA9IDAsIC5kaXYgPSA0IH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDggfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfdGFibGUgZGl2X2hjbGtfM19kW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDMgfSwKKwl7IC52YWwgPSAxLCAuZGl2ID0gNiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBzM2MyNDR4X2NvbW1vbl9kaXZpZGVyc1tdIF9faW5pdGRhdGEgPSB7CisJRElWKFVDTEssICJ1Y2xrIiwgInVwbGwiLCBDTEtESVZOLCAzLCAxKSwKKwlESVYoMCwgImRpdl9oY2xrIiwgImZjbGsiLCBDTEtESVZOLCAxLCAxKSwKKwlESVZfVCgwLCAiZGl2X2hjbGtfNCIsICJmY2xrIiwgQ0FNRElWTiwgOSwgMSwgZGl2X2hjbGtfNF9kKSwKKwlESVZfVCgwLCAiZGl2X2hjbGtfMyIsICJmY2xrIiwgQ0FNRElWTiwgOCwgMSwgZGl2X2hjbGtfM19kKSwKKwlESVYoMCwgImRpdl9jYW0iLCAidXBsbCIsIENBTURJVk4sIDAsIDMpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBzM2MyNDR4X2NvbW1vbl9nYXRlc1tdIF9faW5pdGRhdGEgPSB7CisJR0FURShIQ0xLX0NBTSwgImNhbSIsICJoY2xrIiwgQ0xLQ09OLCAxOSwgMCwgMCksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyBzM2MyNDR4X2NvbW1vbl9hbGlhc2VzW10gX19pbml0ZGF0YSA9IHsKKwlBTElBUyhQQ0xLX1VBUlQwLCAiczNjMjQ0MC11YXJ0LjAiLCAidWFydCIpLAorCUFMSUFTKFBDTEtfVUFSVDEsICJzM2MyNDQwLXVhcnQuMSIsICJ1YXJ0IiksCisJQUxJQVMoUENMS19VQVJUMiwgInMzYzI0NDAtdWFydC4yIiwgInVhcnQiKSwKKwlBTElBUyhQQ0xLX1VBUlQwLCAiczNjMjQ0MC11YXJ0LjAiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhQQ0xLX1VBUlQxLCAiczNjMjQ0MC11YXJ0LjEiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhQQ0xLX1VBUlQyLCAiczNjMjQ0MC11YXJ0LjIiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhIQ0xLX0NBTSwgTlVMTCwgImNhbWlmIiksCisJQUxJQVMoQ0FNSUYsIE5VTEwsICJjYW1pZi11cGxsIiksCit9OworCisvKiBTM0MyNDQwIHNwZWNpZmljIGNsb2NrcyAqLworCitQTkFNRShzM2MyNDQwX2NhbWlmX3ApID0geyAidXBsbCIsICJmZl9jYW0iIH07CisKK3N0cnVjdCBzYW1zdW5nX211eF9jbG9jayBzM2MyNDQwX211eGVzW10gX19pbml0ZGF0YSA9IHsKKwlNVVgoQ0FNSUYsICJjYW1pZiIsIHMzYzI0NDBfY2FtaWZfcCwgQ0FNRElWTiwgNCwgMSksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrIHMzYzI0NDBfZ2F0ZXNbXSBfX2luaXRkYXRhID0geworCUdBVEUoUENMS19BQzk3LCAiYWM5NyIsICJwY2xrIiwgQ0xLQ09OLCAyMCwgMCwgMCksCit9OworCisvKiBTM0MyNDQyIHNwZWNpZmljIGNsb2NrcyAqLworCitzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9mYWN0b3JfY2xvY2sgczNjMjQ0Ml9mZmFjdG9yW10gX19pbml0ZGF0YSA9IHsKKwlGRkFDVE9SKDAsICJ1cGxsXzMiLCAidXBsbCIsIDEsIDMsIDApLAorfTsKKworUE5BTUUoczNjMjQ0Ml9jYW1pZl9wKSA9IHsgInVwbGwiLCAiZmZfY2FtIiwgInVwbGwiLCAidXBsbF8zIiB9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgczNjMjQ0Ml9tdXhlc1tdIF9faW5pdGRhdGEgPSB7CisJTVVYKENBTUlGLCAiY2FtaWYiLCBzM2MyNDQyX2NhbWlmX3AsIENBTURJVk4sIDQsIDIpLAorfTsKKworLyoKKyAqIGZpeGVkIHJhdGUgY2xvY2tzIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBzb2MKKyAqIE9ubHkgbmVjZXNzYXJ5IHVudGlsIHRoZSBkZXZpY2V0cmVlLW1vdmUgaXMgY29tcGxldGUKKyAqLworI2RlZmluZSBYVEkJMQorc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayBzM2MyNDEwX2NvbW1vbl9mcmF0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlGUkFURShYVEksICJ4dGkiLCBOVUxMLCBDTEtfSVNfUk9PVCwgMCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQxMF9jb21tb25fY2xrX3JlZ2lzdGVyX2ZpeGVkX2V4dCgKKwkJc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCisJCXVuc2lnbmVkIGxvbmcgeHRpX2YpCit7CisJc3RydWN0IHNhbXN1bmdfY2xvY2tfYWxpYXMgeHRpX2FsaWFzID0gQUxJQVMoWFRJLCBOVUxMLCAieHRhbCIpOworCisJczNjMjQxMF9jb21tb25fZnJhdGVfY2xrc1swXS5maXhlZF9yYXRlID0geHRpX2Y7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShjdHgsIHMzYzI0MTBfY29tbW9uX2ZyYXRlX2Nsa3MsCisJCQkJQVJSQVlfU0laRShzM2MyNDEwX2NvbW1vbl9mcmF0ZV9jbGtzKSk7CisKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhjdHgsICZ4dGlfYWxpYXMsIDEpOworfQorCit2b2lkIF9faW5pdCBzM2MyNDEwX2NvbW1vbl9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1bnNpZ25lZCBsb25nIHh0aV9mLAorCQkJCSAgICBpbnQgY3VycmVudF9zb2MsCisJCQkJICAgIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwlyZWdfYmFzZSA9IGJhc2U7CisKKwlpZiAobnApIHsKKwkJcmVnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghcmVnX2Jhc2UpCisJCQlwYW5pYygiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIE5SX0NMS1MpOworCWlmICghY3R4KQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBjb250ZXh0LlxuIiwgX19mdW5jX18pOworCisJLyogUmVnaXN0ZXIgZXh0ZXJuYWwgY2xvY2tzIG9ubHkgaW4gbm9uLWR0IGNhc2VzICovCisJaWYgKCFucCkKKwkJczNjMjQxMF9jb21tb25fY2xrX3JlZ2lzdGVyX2ZpeGVkX2V4dChjdHgsIHh0aV9mKTsKKworCWlmIChjdXJyZW50X3NvYyA9PSAyNDEwKSB7CisJCWlmIChfZ2V0X3JhdGUoInh0aSIpID09IDEyICogTUhaKSB7CisJCQlzM2MyNDEwX3BsbHNbbXBsbF0ucmF0ZV90YWJsZSA9IHBsbF9zM2MyNDEwXzEybWh6X3RibDsKKwkJCXMzYzI0MTBfcGxsc1t1cGxsXS5yYXRlX3RhYmxlID0gcGxsX3MzYzI0MTBfMTJtaHpfdGJsOworCQl9CisKKwkJLyogUmVnaXN0ZXIgUExMcy4gKi8KKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKGN0eCwgczNjMjQxMF9wbGxzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQxMF9wbGxzKSwgcmVnX2Jhc2UpOworCisJfSBlbHNlIHsgLyogUzNDMjQ0MCwgUzNDMjQ0MiAqLworCQlpZiAoX2dldF9yYXRlKCJ4dGkiKSA9PSAxMiAqIE1IWikgeworCQkJLyoKKwkJCSAqIHBsbHMgZm9sbG93IGRpZmZlcmVudCBjYWxjdWxhdGlvbiBzY2hlbWVzLCB3aXRoIHRoZQorCQkJICogdXBsbCBmb2xsb3dpbmcgdGhlIHNhbWUgc2NoZW1lIGFzIHRoZSBzM2MyNDEwIHBsbHMKKwkJCSAqLworCQkJczNjMjQ0eF9jb21tb25fcGxsc1ttcGxsXS5yYXRlX3RhYmxlID0KKwkJCQkJCQlwbGxfczNjMjQ0eF8xMm1oel90Ymw7CisJCQlzM2MyNDR4X2NvbW1vbl9wbGxzW3VwbGxdLnJhdGVfdGFibGUgPQorCQkJCQkJCXBsbF9zM2MyNDEwXzEybWh6X3RibDsKKwkJfQorCisJCS8qIFJlZ2lzdGVyIFBMTHMuICovCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChjdHgsIHMzYzI0NHhfY29tbW9uX3BsbHMsCisJCQkJQVJSQVlfU0laRShzM2MyNDR4X2NvbW1vbl9wbGxzKSwgcmVnX2Jhc2UpOworCX0KKworCS8qIFJlZ2lzdGVyIGNvbW1vbiBpbnRlcm5hbCBjbG9ja3MuICovCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQxMF9jb21tb25fbXV4ZXMsCisJCQlBUlJBWV9TSVpFKHMzYzI0MTBfY29tbW9uX211eGVzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjMjQxMF9jb21tb25fZGl2aWRlcnMsCisJCQlBUlJBWV9TSVpFKHMzYzI0MTBfY29tbW9uX2RpdmlkZXJzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0MTBfY29tbW9uX2dhdGVzLAorCQlBUlJBWV9TSVpFKHMzYzI0MTBfY29tbW9uX2dhdGVzKSk7CisKKwlpZiAoY3VycmVudF9zb2MgPT0gUzNDMjQ0MCB8fCBjdXJyZW50X3NvYyA9PSBTM0MyNDQyKSB7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIHMzYzI0NHhfY29tbW9uX2RpdmlkZXJzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0eF9jb21tb25fZGl2aWRlcnMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0NHhfY29tbW9uX2dhdGVzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0eF9jb21tb25fZ2F0ZXMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQ0eF9jb21tb25fbXV4ZXMsCisJCQkJQVJSQVlfU0laRShzM2MyNDR4X2NvbW1vbl9tdXhlcykpOworCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoY3R4LCBzM2MyNDR4X2NvbW1vbl9mZmFjdG9yLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0eF9jb21tb25fZmZhY3RvcikpOworCX0KKworCS8qIFJlZ2lzdGVyIFNvQy1zcGVjaWZpYyBjbG9ja3MuICovCisJc3dpdGNoIChjdXJyZW50X3NvYykgeworCWNhc2UgUzNDMjQxMDoKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjMjQxMF9kaXZpZGVycywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0MTBfZGl2aWRlcnMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKGN0eCwgczNjMjQxMF9mZmFjdG9yLAorCQkJCUFSUkFZX1NJWkUoczNjMjQxMF9mZmFjdG9yKSk7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQxMF9hbGlhc2VzLAorCQkJQVJSQVlfU0laRShzM2MyNDEwX2NvbW1vbl9hbGlhc2VzKSk7CisJCWJyZWFrOworCWNhc2UgUzNDMjQ0MDoKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQ0MF9tdXhlcywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0NDBfbXV4ZXMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0NDBfZ2F0ZXMsCisJCQkJQVJSQVlfU0laRShzM2MyNDQwX2dhdGVzKSk7CisJCWJyZWFrOworCWNhc2UgUzNDMjQ0MjoKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQ0Ml9tdXhlcywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0NDJfbXV4ZXMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKGN0eCwgczNjMjQ0Ml9mZmFjdG9yLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0Ml9mZmFjdG9yKSk7CisJCWJyZWFrOworCX0KKworCS8qCisJICogUmVnaXN0ZXIgY29tbW9uIGFsaWFzZXMgYXQgdGhlIGVuZCwgYXMgc29tZSBvZiB0aGUgYWxpYXNlZCBjbG9ja3MKKwkgKiBhcmUgU29DIHNwZWNpZmljLgorCSAqLworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQxMF9jb21tb25fYWxpYXNlcywKKwkJQVJSQVlfU0laRShzM2MyNDEwX2NvbW1vbl9hbGlhc2VzKSk7CisKKwlpZiAoY3VycmVudF9zb2MgPT0gUzNDMjQ0MCB8fCBjdXJyZW50X3NvYyA9PSBTM0MyNDQyKSB7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQ0eF9jb21tb25fYWxpYXNlcywKKwkJCUFSUkFZX1NJWkUoczNjMjQ0eF9jb21tb25fYWxpYXNlcykpOworCX0KKworCXMzYzI0MTBfY2xrX3NsZWVwX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHMzYzI0MTBfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzM2MyNDEwX2NvbW1vbl9jbGtfaW5pdChucCwgMCwgUzNDMjQxMCwgMCk7Cit9CitDTEtfT0ZfREVDTEFSRShzM2MyNDEwX2NsaywgInNhbXN1bmcsczNjMjQxMC1jbG9jayIsIHMzYzI0MTBfY2xrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQ0MF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXMzYzI0MTBfY29tbW9uX2Nsa19pbml0KG5wLCAwLCBTM0MyNDQwLCAwKTsKK30KK0NMS19PRl9ERUNMQVJFKHMzYzI0NDBfY2xrLCAic2Ftc3VuZyxzM2MyNDQwLWNsb2NrIiwgczNjMjQ0MF9jbGtfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDQyX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJczNjMjQxMF9jb21tb25fY2xrX2luaXQobnAsIDAsIFMzQzI0NDIsIDApOworfQorQ0xLX09GX0RFQ0xBUkUoczNjMjQ0Ml9jbGssICJzYW1zdW5nLHMzYzI0NDItY2xvY2siLCBzM2MyNDQyX2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0MTIuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0MTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2U0MzEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQxMi5jCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb21tb24gQ2xvY2sgRnJhbWV3b3JrIHN1cHBvcnQgZm9yIFMzQzI0MTIgYW5kIFMzQzI0MTMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9zM2MyNDEyLmg+CisKKyNpbmNsdWRlICJjbGsuaCIKKyNpbmNsdWRlICJjbGstcGxsLmgiCisKKyNkZWZpbmUgTE9DS1RJTUUJMHgwMAorI2RlZmluZSBNUExMQ09OCQkweDA0CisjZGVmaW5lIFVQTExDT04JCTB4MDgKKyNkZWZpbmUgQ0xLQ09OCQkweDBjCisjZGVmaW5lIENMS0RJVk4JCTB4MTQKKyNkZWZpbmUgQ0xLU1JDCQkweDFjCisKKy8qIGxpc3Qgb2YgUExMcyB0byBiZSByZWdpc3RlcmVkICovCitlbnVtIHMzYzI0MTJfcGxscyB7CisJbXBsbCwgdXBsbCwKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnJlZ19iYXNlOworCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfY2xrX3JlZ19kdW1wICpzM2MyNDEyX3NhdmU7CisKKy8qCisgKiBsaXN0IG9mIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHRvIGJlIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgYQorICogc3VzcGVuZC9yZXN1bWUgY3ljbGUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0MTJfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCUxPQ0tUSU1FLAorCU1QTExDT04sCisJVVBMTENPTiwKKwlDTEtDT04sCisJQ0xLRElWTiwKKwlDTEtTUkMsCit9OworCitzdGF0aWMgaW50IHMzYzI0MTJfY2xrX3N1c3BlbmQodm9pZCkKK3sKKwlzYW1zdW5nX2Nsa19zYXZlKHJlZ19iYXNlLCBzM2MyNDEyX3NhdmUsCisJCQkJQVJSQVlfU0laRShzM2MyNDEyX2Nsa19yZWdzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMl9jbGtfcmVzdW1lKHZvaWQpCit7CisJc2Ftc3VuZ19jbGtfcmVzdG9yZShyZWdfYmFzZSwgczNjMjQxMl9zYXZlLAorCQkJCUFSUkFZX1NJWkUoczNjMjQxMl9jbGtfcmVncykpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0MTJfY2xrX3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kID0gczNjMjQxMl9jbGtfc3VzcGVuZCwKKwkucmVzdW1lID0gczNjMjQxMl9jbGtfcmVzdW1lLAorfTsKKworc3RhdGljIHZvaWQgczNjMjQxMl9jbGtfc2xlZXBfaW5pdCh2b2lkKQoreworCXMzYzI0MTJfc2F2ZSA9IHNhbXN1bmdfY2xrX2FsbG9jX3JlZ19kdW1wKHMzYzI0MTJfY2xrX3JlZ3MsCisJCQkJCQlBUlJBWV9TSVpFKHMzYzI0MTJfY2xrX3JlZ3MpKTsKKwlpZiAoIXMzYzI0MTJfc2F2ZSkgeworCQlwcl93YXJuKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHNsZWVwIHNhdmUgZGF0YSwgbm8gc2xlZXAgc3VwcG9ydCFcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjQxMl9jbGtfc3lzY29yZV9vcHMpOworCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBzM2MyNDEyX2Nsa19zbGVlcF9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2X3RhYmxlIGRpdnh0aV9kW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDEgfSwKKwl7IC52YWwgPSAxLCAuZGl2ID0gMiB9LAorCXsgLnZhbCA9IDIsIC5kaXYgPSA0IH0sCisJeyAudmFsID0gMywgLmRpdiA9IDYgfSwKKwl7IC52YWwgPSA0LCAuZGl2ID0gOCB9LAorCXsgLnZhbCA9IDUsIC5kaXYgPSAxMCB9LAorCXsgLnZhbCA9IDYsIC5kaXYgPSAxMiB9LAorCXsgLnZhbCA9IDcsIC5kaXYgPSAxNCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBzM2MyNDEyX2RpdmlkZXJzW10gX19pbml0ZGF0YSA9IHsKKwlESVZfVCgwLCAiZGl2X3h0aSIsICJ4dGkiLCBDTEtTUkMsIDAsIDMsIGRpdnh0aV9kKSwKKwlESVYoMCwgImRpdl9jYW0iLCAibXV4X2NhbSIsIENMS0RJVk4sIDE2LCA0KSwKKwlESVYoMCwgImRpdl9pMnMiLCAibXV4X2kycyIsIENMS0RJVk4sIDEyLCA0KSwKKwlESVYoMCwgImRpdl91YXJ0IiwgIm11eF91YXJ0IiwgQ0xLRElWTiwgOCwgNCksCisJRElWKDAsICJkaXZfdXNiIiwgIm11eF91c2IiLCBDTEtESVZOLCA2LCAxKSwKKwlESVYoMCwgImRpdl9oY2xrX2hhbGYiLCAiaGNsayIsIENMS0RJVk4sIDUsIDEpLAorCURJVihBUk1ESVYsICJhcm1kaXYiLCAibXN5c2NsayIsIENMS0RJVk4sIDMsIDEpLAorCURJVihQQ0xLLCAicGNsayIsICJoY2xrIiwgQ0xLRElWTiwgMiwgMSksCisJRElWKEhDTEssICJoY2xrIiwgImFybWRpdiIsIENMS0RJVk4sIDAsIDIpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZml4ZWRfZmFjdG9yX2Nsb2NrIHMzYzI0MTJfZmZhY3RvcltdIF9faW5pdGRhdGEgPSB7CisJRkZBQ1RPUigwLCAiZmZfaGNsayIsICJoY2xrIiwgMiwgMSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCksCit9OworCisvKgorICogVGhlIGZpcnN0IHR3byB1c2UgdGhlIE9NWzRdIHNldHRpbmcsIHdoaWNoIGlzIG5vdCByZWFkYWJsZSBmcm9tCisgKiBzb2Z0d2FyZSwgc28gYXNzdW1lIGl0IGlzIHNldCB0byB4dGkuCisgKi8KK1BOQU1FKGVyZWZjbGtfcCkgPSB7ICJ4dGkiLCAieHRpIiwgInh0aSIsICJleHQiIH07CitQTkFNRSh1cmVmY2xrX3ApID0geyAieHRpIiwgInh0aSIsICJ4dGkiLCAiZXh0IiB9OworCitQTkFNRShjYW1jbGtfcCkgPSB7ICJ1c3lzY2xrIiwgImhjbGsiIH07CitQTkFNRSh1c2JjbGtfcCkgPSB7ICJ1c3lzY2xrIiwgImhjbGsiIH07CitQTkFNRShpMnNjbGtfcCkgPSB7ICJlcmVmY2xrIiwgIm1wbGwiIH07CitQTkFNRSh1YXJ0Y2xrX3ApID0geyAiZXJlZmNsayIsICJtcGxsIiB9OworUE5BTUUodXN5c2Nsa19wKSA9IHsgInVyZWZjbGsiLCAidXBsbCIgfTsKK1BOQU1FKG1zeXNjbGtfcCkgPSB7ICJtZGl2Y2xrIiwgIm1wbGwiIH07CitQTkFNRShtZGl2Y2xrX3ApID0geyAieHRpIiwgImRpdl94dGkiIH07CitQTkFNRShhcm1jbGtfcCkgPSB7ICJhcm1kaXYiLCAiaGNsayIgfTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIHMzYzI0MTJfbXV4ZXNbXSBfX2luaXRkYXRhID0geworCU1VWCgwLCAiZXJlZmNsayIsIGVyZWZjbGtfcCwgQ0xLU1JDLCAxNCwgMiksCisJTVVYKDAsICJ1cmVmY2xrIiwgdXJlZmNsa19wLCBDTEtTUkMsIDEyLCAyKSwKKwlNVVgoMCwgIm11eF9jYW0iLCBjYW1jbGtfcCwgQ0xLU1JDLCAxMSwgMSksCisJTVVYKDAsICJtdXhfdXNiIiwgdXNiY2xrX3AsIENMS1NSQywgMTAsIDEpLAorCU1VWCgwLCAibXV4X2kycyIsIGkyc2Nsa19wLCBDTEtTUkMsIDksIDEpLAorCU1VWCgwLCAibXV4X3VhcnQiLCB1YXJ0Y2xrX3AsIENMS1NSQywgOCwgMSksCisJTVVYKFVTWVNDTEssICJ1c3lzY2xrIiwgdXN5c2Nsa19wLCBDTEtTUkMsIDUsIDEpLAorCU1VWChNU1lTQ0xLLCAibXN5c2NsayIsIG1zeXNjbGtfcCwgQ0xLU1JDLCA0LCAxKSwKKwlNVVgoTURJVkNMSywgIm1kaXZjbGsiLCBtZGl2Y2xrX3AsIENMS1NSQywgMywgMSksCisJTVVYKEFSTUNMSywgImFybWNsayIsIGFybWNsa19wLCBDTEtESVZOLCA0LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfY2xvY2sgczNjMjQxMl9wbGxzW10gX19pbml0ZGF0YSA9IHsKKwlbbXBsbF0gPSBQTEwocGxsX3MzYzI0NDBfbXBsbCwgTVBMTCwgIm1wbGwiLCAieHRpIiwKKwkJCQkJCUxPQ0tUSU1FLCBNUExMQ09OLCBOVUxMKSwKKwlbdXBsbF0gPSBQTEwocGxsX3MzYzI0MTBfdXBsbCwgVVBMTCwgInVwbGwiLCAidXJlZmNsayIsCisJCQkJCQlMT0NLVElNRSwgVVBMTENPTiwgTlVMTCksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrIHMzYzI0MTJfZ2F0ZXNbXSBfX2luaXRkYXRhID0geworCUdBVEUoUENMS19XRFQsICJ3ZHQiLCAicGNsayIsIENMS0NPTiwgMjgsIDAsIDApLAorCUdBVEUoUENMS19TUEksICJzcGkiLCAicGNsayIsIENMS0NPTiwgMjcsIDAsIDApLAorCUdBVEUoUENMS19JMlMsICJpMnMiLCAicGNsayIsIENMS0NPTiwgMjYsIDAsIDApLAorCUdBVEUoUENMS19JMkMsICJpMmMiLCAicGNsayIsIENMS0NPTiwgMjUsIDAsIDApLAorCUdBVEUoUENMS19BREMsICJhZGMiLCAicGNsayIsIENMS0NPTiwgMjQsIDAsIDApLAorCUdBVEUoUENMS19SVEMsICJydGMiLCAicGNsayIsIENMS0NPTiwgMjMsIDAsIDApLAorCUdBVEUoUENMS19HUElPLCAiZ3BpbyIsICJwY2xrIiwgQ0xLQ09OLCAyMiwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoUENMS19VQVJUMiwgInVhcnQyIiwgInBjbGsiLCBDTEtDT04sIDIxLCAwLCAwKSwKKwlHQVRFKFBDTEtfVUFSVDEsICJ1YXJ0MSIsICJwY2xrIiwgQ0xLQ09OLCAyMCwgMCwgMCksCisJR0FURShQQ0xLX1VBUlQwLCAidWFydDAiLCAicGNsayIsIENMS0NPTiwgMTksIDAsIDApLAorCUdBVEUoUENMS19TREksICJzZGkiLCAicGNsayIsIENMS0NPTiwgMTgsIDAsIDApLAorCUdBVEUoUENMS19QV00sICJwd20iLCAicGNsayIsIENMS0NPTiwgMTcsIDAsIDApLAorCUdBVEUoUENMS19VU0JELCAidXNiLWRldmljZSIsICJwY2xrIiwgQ0xLQ09OLCAxNiwgMCwgMCksCisJR0FURShTQ0xLX0NBTSwgInNjbGtfY2FtIiwgImRpdl9jYW0iLCBDTEtDT04sIDE1LCAwLCAwKSwKKwlHQVRFKFNDTEtfVUFSVCwgInNjbGtfdWFydCIsICJkaXZfdWFydCIsIENMS0NPTiwgMTQsIDAsIDApLAorCUdBVEUoU0NMS19JMlMsICJzY2xrX2kycyIsICJkaXZfaTJzIiwgQ0xLQ09OLCAxMywgMCwgMCksCisJR0FURShTQ0xLX1VTQkgsICJzY2xrX3VzYmgiLCAiZGl2X3VzYiIsIENMS0NPTiwgMTIsIDAsIDApLAorCUdBVEUoU0NMS19VU0JELCAic2Nsa191c2JkIiwgImRpdl91c2IiLCBDTEtDT04sIDExLCAwLCAwKSwKKwlHQVRFKEhDTEtfSEFMRiwgImhjbGtfaGFsZiIsICJkaXZfaGNsa19oYWxmIiwgQ0xLQ09OLCAxMCwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoSENMS19YMiwgImhjbGt4MiIsICJmZl9oY2xrIiwgQ0xLQ09OLCA5LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX1NEUkFNLCAic2RyYW0iLCAiaGNsayIsIENMS0NPTiwgOCwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoSENMS19VU0JILCAidXNiLWhvc3QiLCAiaGNsayIsIENMS0NPTiwgNiwgMCwgMCksCisJR0FURShIQ0xLX0xDRCwgImxjZCIsICJoY2xrIiwgQ0xLQ09OLCA1LCAwLCAwKSwKKwlHQVRFKEhDTEtfTkFORCwgIm5hbmQiLCAiaGNsayIsIENMS0NPTiwgNCwgMCwgMCksCisJR0FURShIQ0xLX0RNQTMsICJkbWEzIiwgImhjbGsiLCBDTEtDT04sIDMsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKEhDTEtfRE1BMiwgImRtYTIiLCAiaGNsayIsIENMS0NPTiwgMiwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoSENMS19ETUExLCAiZG1hMSIsICJoY2xrIiwgQ0xLQ09OLCAxLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0RNQTAsICJkbWEwIiwgImhjbGsiLCBDTEtDT04sIDAsIENMS19JR05PUkVfVU5VU0VELCAwKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Nsb2NrX2FsaWFzIHMzYzI0MTJfYWxpYXNlc1tdIF9faW5pdGRhdGEgPSB7CisJQUxJQVMoUENMS19VQVJUMCwgInMzYzI0MTItdWFydC4wIiwgInVhcnQiKSwKKwlBTElBUyhQQ0xLX1VBUlQxLCAiczNjMjQxMi11YXJ0LjEiLCAidWFydCIpLAorCUFMSUFTKFBDTEtfVUFSVDIsICJzM2MyNDEyLXVhcnQuMiIsICJ1YXJ0IiksCisJQUxJQVMoUENMS19VQVJUMCwgInMzYzI0MTItdWFydC4wIiwgImNsa191YXJ0X2JhdWQyIiksCisJQUxJQVMoUENMS19VQVJUMSwgInMzYzI0MTItdWFydC4xIiwgImNsa191YXJ0X2JhdWQyIiksCisJQUxJQVMoUENMS19VQVJUMiwgInMzYzI0MTItdWFydC4yIiwgImNsa191YXJ0X2JhdWQyIiksCisJQUxJQVMoU0NMS19VQVJULCBOVUxMLCAiY2xrX3VhcnRfYmF1ZDMiKSwKKwlBTElBUyhQQ0xLX0kyQywgInMzYzI0MTAtaTJjLjAiLCAiaTJjIiksCisJQUxJQVMoUENMS19BREMsIE5VTEwsICJhZGMiKSwKKwlBTElBUyhQQ0xLX1JUQywgTlVMTCwgInJ0YyIpLAorCUFMSUFTKFBDTEtfUFdNLCBOVUxMLCAidGltZXJzIiksCisJQUxJQVMoSENMS19MQ0QsIE5VTEwsICJsY2QiKSwKKwlBTElBUyhQQ0xLX1VTQkQsIE5VTEwsICJ1c2ItZGV2aWNlIiksCisJQUxJQVMoU0NMS19VU0JELCBOVUxMLCAidXNiLWJ1cy1nYWRnZXQiKSwKKwlBTElBUyhIQ0xLX1VTQkgsIE5VTEwsICJ1c2ItaG9zdCIpLAorCUFMSUFTKFNDTEtfVVNCSCwgTlVMTCwgInVzYi1idXMtaG9zdCIpLAorCUFMSUFTKEFSTUNMSywgTlVMTCwgImFybWNsayIpLAorCUFMSUFTKEhDTEssIE5VTEwsICJoY2xrIiksCisJQUxJQVMoTVBMTCwgTlVMTCwgIm1wbGwiKSwKKwlBTElBUyhNU1lTQ0xLLCBOVUxMLCAiZmNsayIpLAorfTsKKworLyoKKyAqIGZpeGVkIHJhdGUgY2xvY2tzIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBzb2MKKyAqIE9ubHkgbmVjZXNzYXJ5IHVudGlsIHRoZSBkZXZpY2V0cmVlLW1vdmUgaXMgY29tcGxldGUKKyAqLworI2RlZmluZSBYVEkJMQorc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayBzM2MyNDEyX2NvbW1vbl9mcmF0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlGUkFURShYVEksICJ4dGkiLCBOVUxMLCBDTEtfSVNfUk9PVCwgMCksCisJRlJBVEUoMCwgImV4dCIsIE5VTEwsIENMS19JU19ST09ULCAwKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDEyX2NvbW1vbl9jbGtfcmVnaXN0ZXJfZml4ZWRfZXh0KAorCQlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKKwkJdW5zaWduZWQgbG9uZyB4dGlfZiwgdW5zaWduZWQgbG9uZyBleHRfZikKK3sKKwkvKiB4dGFsIGFsaWFzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgY3B1ZnJlcSBkcml2ZXIgKi8KKwlzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyB4dGlfYWxpYXMgPSBBTElBUyhYVEksIE5VTEwsICJ4dGFsIik7CisKKwlzM2MyNDEyX2NvbW1vbl9mcmF0ZV9jbGtzWzBdLmZpeGVkX3JhdGUgPSB4dGlfZjsKKwlzM2MyNDEyX2NvbW1vbl9mcmF0ZV9jbGtzWzFdLmZpeGVkX3JhdGUgPSBleHRfZjsKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9yYXRlKGN0eCwgczNjMjQxMl9jb21tb25fZnJhdGVfY2xrcywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0MTJfY29tbW9uX2ZyYXRlX2Nsa3MpKTsKKworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgJnh0aV9hbGlhcywgMSk7Cit9CisKK3ZvaWQgX19pbml0IHMzYzI0MTJfY29tbW9uX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHVuc2lnbmVkIGxvbmcgeHRpX2YsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgZXh0X2YsIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwlyZWdfYmFzZSA9IGJhc2U7CisKKwlpZiAobnApIHsKKwkJcmVnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghcmVnX2Jhc2UpCisJCQlwYW5pYygiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIE5SX0NMS1MpOworCWlmICghY3R4KQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBjb250ZXh0LlxuIiwgX19mdW5jX18pOworCisJLyogUmVnaXN0ZXIgZXh0ZXJuYWwgY2xvY2tzIG9ubHkgaW4gbm9uLWR0IGNhc2VzICovCisJaWYgKCFucCkKKwkJczNjMjQxMl9jb21tb25fY2xrX3JlZ2lzdGVyX2ZpeGVkX2V4dChjdHgsIHh0aV9mLCBleHRfZik7CisKKwkvKiBSZWdpc3RlciBQTExzLiAqLworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX3BsbChjdHgsIHMzYzI0MTJfcGxscywgQVJSQVlfU0laRShzM2MyNDEyX3BsbHMpLAorCQkJCSByZWdfYmFzZSk7CisKKwkvKiBSZWdpc3RlciBjb21tb24gaW50ZXJuYWwgY2xvY2tzLiAqLworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIHMzYzI0MTJfbXV4ZXMsIEFSUkFZX1NJWkUoczNjMjQxMl9tdXhlcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIHMzYzI0MTJfZGl2aWRlcnMsCisJCQkJCSAgQVJSQVlfU0laRShzM2MyNDEyX2RpdmlkZXJzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0MTJfZ2F0ZXMsCisJCQkJCUFSUkFZX1NJWkUoczNjMjQxMl9nYXRlcykpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihjdHgsIHMzYzI0MTJfZmZhY3RvciwKKwkJCQkJICBBUlJBWV9TSVpFKHMzYzI0MTJfZmZhY3RvcikpOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQxMl9hbGlhc2VzLAorCQkJCSAgIEFSUkFZX1NJWkUoczNjMjQxMl9hbGlhc2VzKSk7CisKKwlzM2MyNDEyX2Nsa19zbGVlcF9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDEyX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJczNjMjQxMl9jb21tb25fY2xrX2luaXQobnAsIDAsIDAsIDApOworfQorQ0xLX09GX0RFQ0xBUkUoczNjMjQxMl9jbGssICJzYW1zdW5nLHMzYzI0MTItY2xvY2siLCBzM2MyNDEyX2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0NDMuYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzI0NDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJiZGFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjMjQ0My5jCkBAIC0wLDAgKzEsNDY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb21tb24gQ2xvY2sgRnJhbWV3b3JrIHN1cHBvcnQgZm9yIFMzQzI0NDMgYW5kIGZvbGxvd2luZyBTb0NzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgorCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svczNjMjQ0My5oPgorCisjaW5jbHVkZSAiY2xrLmgiCisjaW5jbHVkZSAiY2xrLXBsbC5oIgorCisvKiBTM0MyNDE2IGNsb2NrIGNvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBMT0NLQ09OMAkweDAwCisjZGVmaW5lIExPQ0tDT04xCTB4MDQKKyNkZWZpbmUgTVBMTENPTgkJMHgxMAorI2RlZmluZSBFUExMQ09OCQkweDE4CisjZGVmaW5lIEVQTExDT05fSwkweDFDCisjZGVmaW5lIENMS1NSQwkJMHgyMAorI2RlZmluZSBDTEtESVYwCQkweDI0CisjZGVmaW5lIENMS0RJVjEJCTB4MjgKKyNkZWZpbmUgQ0xLRElWMgkJMHgyQworI2RlZmluZSBIQ0xLQ09OCQkweDMwCisjZGVmaW5lIFBDTEtDT04JCTB4MzQKKyNkZWZpbmUgU0NMS0NPTgkJMHgzOAorCisvKiB0aGUgc29jIHR5cGVzICovCitlbnVtIHN1cHBvcnRlZF9zb2NzIHsKKwlTM0MyNDE2LAorCVMzQzI0NDMsCisJUzNDMjQ1MCwKK307CisKKy8qIGxpc3Qgb2YgUExMcyB0byBiZSByZWdpc3RlcmVkICovCitlbnVtIHMzYzI0NDNfcGxscyB7CisJbXBsbCwgZXBsbCwKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnJlZ19iYXNlOworCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfY2xrX3JlZ19kdW1wICpzM2MyNDQzX3NhdmU7CisKKy8qCisgKiBsaXN0IG9mIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHRvIGJlIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgYQorICogc3VzcGVuZC9yZXN1bWUgY3ljbGUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfY2xrX3JlZ3NbXSBfX2luaXRkYXRhID0geworCUxPQ0tDT04wLAorCUxPQ0tDT04xLAorCU1QTExDT04sCisJRVBMTENPTiwKKwlFUExMQ09OX0ssCisJQ0xLU1JDLAorCUNMS0RJVjAsCisJQ0xLRElWMSwKKwlDTEtESVYyLAorCVBDTEtDT04sCisJSENMS0NPTiwKKwlTQ0xLQ09OLAorfTsKKworc3RhdGljIGludCBzM2MyNDQzX2Nsa19zdXNwZW5kKHZvaWQpCit7CisJc2Ftc3VuZ19jbGtfc2F2ZShyZWdfYmFzZSwgczNjMjQ0M19zYXZlLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0M19jbGtfcmVncykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfY2xrX3Jlc3VtZSh2b2lkKQoreworCXNhbXN1bmdfY2xrX3Jlc3RvcmUocmVnX2Jhc2UsIHMzYzI0NDNfc2F2ZSwKKwkJCQlBUlJBWV9TSVpFKHMzYzI0NDNfY2xrX3JlZ3MpKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDQzX2Nsa19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZCA9IHMzYzI0NDNfY2xrX3N1c3BlbmQsCisJLnJlc3VtZSA9IHMzYzI0NDNfY2xrX3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfY2xrX3NsZWVwX2luaXQodm9pZCkKK3sKKwlzM2MyNDQzX3NhdmUgPSBzYW1zdW5nX2Nsa19hbGxvY19yZWdfZHVtcChzM2MyNDQzX2Nsa19yZWdzLAorCQkJCQkJQVJSQVlfU0laRShzM2MyNDQzX2Nsa19yZWdzKSk7CisJaWYgKCFzM2MyNDQzX3NhdmUpIHsKKwkJcHJfd2FybigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBzbGVlcCBzYXZlIGRhdGEsIG5vIHNsZWVwIHN1cHBvcnQhXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0NDNfY2xrX3N5c2NvcmVfb3BzKTsKKwlyZXR1cm47Cit9CisjZWxzZQorc3RhdGljIHZvaWQgczNjMjQ0M19jbGtfc2xlZXBfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKK1BOQU1FKGVwbGxyZWZfcCkgPSB7ICJtcGxscmVmIiwgIm1wbGxyZWYiLCAieHRpIiwgImV4dCIgfTsKK1BOQU1FKGVzeXNjbGtfcCkgPSB7ICJlcGxscmVmIiwgImVwbGwiIH07CitQTkFNRShtcGxscmVmX3ApID0geyAieHRpIiwgIm1kaXZjbGsiIH07CitQTkFNRShtc3lzY2xrX3ApID0geyAibXBsbHJlZiIsICJtcGxsIiB9OworUE5BTUUoYXJtY2xrX3ApID0geyAiYXJtZGl2IiAsICJoY2xrIiB9OworUE5BTUUoaTJzMF9wKSA9IHsgImRpdl9pMnMwIiwgImV4dF9pMnMiLCAiZXBsbHJlZiIsICJlcGxscmVmIiB9OworCitzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgczNjMjQ0M19jb21tb25fbXV4ZXNbXSBfX2luaXRkYXRhID0geworCU1VWCgwLCAiZXBsbHJlZiIsIGVwbGxyZWZfcCwgQ0xLU1JDLCA3LCAyKSwKKwlNVVgoRVNZU0NMSywgImVzeXNjbGsiLCBlc3lzY2xrX3AsIENMS1NSQywgNiwgMSksCisJTVVYKDAsICJtcGxscmVmIiwgbXBsbHJlZl9wLCBDTEtTUkMsIDMsIDEpLAorCU1VWF9BKE1TWVNDTEssICJtc3lzY2xrIiwgbXN5c2Nsa19wLCBDTEtTUkMsIDQsIDEsICJtc3lzY2xrIiksCisJTVVYX0EoQVJNQ0xLLCAiYXJtY2xrIiwgYXJtY2xrX3AsIENMS0RJVjAsIDEzLCAxLCAiYXJtY2xrIiksCisJTVVYKDAsICJtdXhfaTJzMCIsIGkyczBfcCwgQ0xLU1JDLCAxNCwgMiksCit9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfdGFibGUgaGNsa19kW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDEgfSwKKwl7IC52YWwgPSAxLCAuZGl2ID0gMiB9LAorCXsgLnZhbCA9IDMsIC5kaXYgPSA0IH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2X3RhYmxlIG1kaXZjbGtfZFtdID0geworCXsgLnZhbCA9IDAsIC5kaXYgPSAxIH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDMgfSwKKwl7IC52YWwgPSAyLCAuZGl2ID0gNSB9LAorCXsgLnZhbCA9IDMsIC5kaXYgPSA3IH0sCisJeyAudmFsID0gNCwgLmRpdiA9IDkgfSwKKwl7IC52YWwgPSA1LCAuZGl2ID0gMTEgfSwKKwl7IC52YWwgPSA2LCAuZGl2ID0gMTMgfSwKKwl7IC52YWwgPSA3LCAuZGl2ID0gMTUgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgczNjMjQ0M19jb21tb25fZGl2aWRlcnNbXSBfX2luaXRkYXRhID0geworCURJVl9UKDAsICJtZGl2Y2xrIiwgInh0aSIsIENMS0RJVjAsIDYsIDMsIG1kaXZjbGtfZCksCisJRElWKDAsICJwcmVkaXYiLCAibXN5c2NsayIsIENMS0RJVjAsIDQsIDIpLAorCURJVl9UKEhDTEssICJoY2xrIiwgInByZWRpdiIsIENMS0RJVjAsIDAsIDIsIGhjbGtfZCksCisJRElWKFBDTEssICJwY2xrIiwgImhjbGsiLCBDTEtESVYwLCAyLCAxKSwKKwlESVYoMCwgImRpdl9oc3NwaTBfZXBsbCIsICJlc3lzY2xrIiwgQ0xLRElWMSwgMjQsIDIpLAorCURJVigwLCAiZGl2X2ZpbWQiLCAiZXN5c2NsayIsIENMS0RJVjEsIDE2LCA4KSwKKwlESVYoMCwgImRpdl9pMnMwIiwgImVzeXNjbGsiLCBDTEtESVYxLCAxMiwgNCksCisJRElWKDAsICJkaXZfdWFydCIsICJlc3lzY2xrIiwgQ0xLRElWMSwgOCwgNCksCisJRElWKDAsICJkaXZfaHNtbWMxIiwgImVzeXNjbGsiLCBDTEtESVYxLCA2LCAyKSwKKwlESVYoMCwgImRpdl91c2Job3N0IiwgImVzeXNjbGsiLCBDTEtESVYxLCA0LCAyKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgczNjMjQ0M19jb21tb25fZ2F0ZXNbXSBfX2luaXRkYXRhID0geworCUdBVEUoU0NMS19IU01NQ19FWFQsICJzY2xrX2hzbW1jZXh0IiwgImV4dCIsIFNDTEtDT04sIDEzLCAwLCAwKSwKKwlHQVRFKFNDTEtfSFNNTUMxLCAic2Nsa19oc21tYzEiLCAiZGl2X2hzbW1jMSIsIFNDTEtDT04sIDEyLCAwLCAwKSwKKwlHQVRFKFNDTEtfRklNRCwgInNjbGtfZmltZCIsICJkaXZfZmltZCIsIFNDTEtDT04sIDEwLCAwLCAwKSwKKwlHQVRFKFNDTEtfSTJTMCwgInNjbGtfaTJzMCIsICJtdXhfaTJzMCIsIFNDTEtDT04sIDksIDAsIDApLAorCUdBVEUoU0NMS19VQVJULCAic2Nsa191YXJ0IiwgImRpdl91YXJ0IiwgU0NMS0NPTiwgOCwgMCwgMCksCisJR0FURShTQ0xLX1VTQkgsICJzY2xrX3VzYmhvc3QiLCAiZGl2X3VzYmhvc3QiLCBTQ0xLQ09OLCAxLCAwLCAwKSwKKwlHQVRFKEhDTEtfRFJBTSwgImRyYW0iLCAiaGNsayIsIEhDTEtDT04sIDE5LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX1NTTUMsICJzc21jIiwgImhjbGsiLCBIQ0xLQ09OLCAxOCwgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoSENMS19IU01NQzEsICJoc21tYzEiLCAiaGNsayIsIEhDTEtDT04sIDE2LCAwLCAwKSwKKwlHQVRFKEhDTEtfVVNCRCwgInVzYi1kZXZpY2UiLCAiaGNsayIsIEhDTEtDT04sIDEyLCAwLCAwKSwKKwlHQVRFKEhDTEtfVVNCSCwgInVzYi1ob3N0IiwgImhjbGsiLCBIQ0xLQ09OLCAxMSwgMCwgMCksCisJR0FURShIQ0xLX0xDRCwgImxjZCIsICJoY2xrIiwgSENMS0NPTiwgOSwgMCwgMCksCisJR0FURShIQ0xLX0RNQTUsICJkbWE1IiwgImhjbGsiLCBIQ0xLQ09OLCA1LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0RNQTQsICJkbWE0IiwgImhjbGsiLCBIQ0xLQ09OLCA0LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0RNQTMsICJkbWEzIiwgImhjbGsiLCBIQ0xLQ09OLCAzLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0RNQTIsICJkbWEyIiwgImhjbGsiLCBIQ0xLQ09OLCAyLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0RNQTEsICJkbWExIiwgImhjbGsiLCBIQ0xLQ09OLCAxLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0RNQTAsICJkbWEwIiwgImhjbGsiLCBIQ0xLQ09OLCAwLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShQQ0xLX0dQSU8sICJncGlvIiwgInBjbGsiLCBQQ0xLQ09OLCAxMywgQ0xLX0lHTk9SRV9VTlVTRUQsIDApLAorCUdBVEUoUENMS19SVEMsICJydGMiLCAicGNsayIsIFBDTEtDT04sIDEyLCAwLCAwKSwKKwlHQVRFKFBDTEtfV0RULCAid2R0IiwgInBjbGsiLCBQQ0xLQ09OLCAxMSwgMCwgMCksCisJR0FURShQQ0xLX1BXTSwgInB3bSIsICJwY2xrIiwgUENMS0NPTiwgMTAsIDAsIDApLAorCUdBVEUoUENMS19JMlMwLCAiaTJzMCIsICJwY2xrIiwgUENMS0NPTiwgOSwgMCwgMCksCisJR0FURShQQ0xLX0FDOTcsICJhYzk3IiwgInBjbGsiLCBQQ0xLQ09OLCA4LCAwLCAwKSwKKwlHQVRFKFBDTEtfQURDLCAiYWRjIiwgInBjbGsiLCBQQ0xLQ09OLCA3LCAwLCAwKSwKKwlHQVRFKFBDTEtfU1BJMCwgInNwaTAiLCAicGNsayIsIFBDTEtDT04sIDYsIDAsIDApLAorCUdBVEUoUENMS19JMkMwLCAiaTJjMCIsICJwY2xrIiwgUENMS0NPTiwgNCwgMCwgMCksCisJR0FURShQQ0xLX1VBUlQzLCAidWFydDMiLCAicGNsayIsIFBDTEtDT04sIDMsIDAsIDApLAorCUdBVEUoUENMS19VQVJUMiwgInVhcnQyIiwgInBjbGsiLCBQQ0xLQ09OLCAyLCAwLCAwKSwKKwlHQVRFKFBDTEtfVUFSVDEsICJ1YXJ0MSIsICJwY2xrIiwgUENMS0NPTiwgMSwgMCwgMCksCisJR0FURShQQ0xLX1VBUlQwLCAidWFydDAiLCAicGNsayIsIFBDTEtDT04sIDAsIDAsIDApLAorfTsKKworc3RydWN0IHNhbXN1bmdfY2xvY2tfYWxpYXMgczNjMjQ0M19jb21tb25fYWxpYXNlc1tdIF9faW5pdGRhdGEgPSB7CisJQUxJQVMoSENMSywgTlVMTCwgImhjbGsiKSwKKwlBTElBUyhIQ0xLX1NTTUMsIE5VTEwsICJuYW5kIiksCisJQUxJQVMoUENMS19VQVJUMCwgInMzYzI0NDAtdWFydC4wIiwgInVhcnQiKSwKKwlBTElBUyhQQ0xLX1VBUlQxLCAiczNjMjQ0MC11YXJ0LjEiLCAidWFydCIpLAorCUFMSUFTKFBDTEtfVUFSVDIsICJzM2MyNDQwLXVhcnQuMiIsICJ1YXJ0IiksCisJQUxJQVMoUENMS19VQVJUMywgInMzYzI0NDAtdWFydC4zIiwgInVhcnQiKSwKKwlBTElBUyhQQ0xLX1VBUlQwLCAiczNjMjQ0MC11YXJ0LjAiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhQQ0xLX1VBUlQxLCAiczNjMjQ0MC11YXJ0LjEiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhQQ0xLX1VBUlQyLCAiczNjMjQ0MC11YXJ0LjIiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhQQ0xLX1VBUlQzLCAiczNjMjQ0MC11YXJ0LjMiLCAiY2xrX3VhcnRfYmF1ZDIiKSwKKwlBTElBUyhTQ0xLX1VBUlQsIE5VTEwsICJjbGtfdWFydF9iYXVkMyIpLAorCUFMSUFTKFBDTEtfUFdNLCBOVUxMLCAidGltZXJzIiksCisJQUxJQVMoUENMS19SVEMsIE5VTEwsICJydGMiKSwKKwlBTElBUyhQQ0xLX1dEVCwgTlVMTCwgIndhdGNoZG9nIiksCisJQUxJQVMoUENMS19BREMsIE5VTEwsICJhZGMiKSwKKwlBTElBUyhQQ0xLX0kyQzAsICJzM2MyNDEwLWkyYy4wIiwgImkyYyIpLAorCUFMSUFTKEhDTEtfVVNCRCwgTlVMTCwgInVzYi1kZXZpY2UiKSwKKwlBTElBUyhIQ0xLX1VTQkgsIE5VTEwsICJ1c2ItaG9zdCIpLAorCUFMSUFTKFNDTEtfVVNCSCwgTlVMTCwgInVzYi1idXMtaG9zdCIpLAorCUFMSUFTKFBDTEtfU1BJMCwgInMzYzI0NDMtc3BpLjAiLCAic3BpIiksCisJQUxJQVMoUENMS19TUEkwLCAiczNjMjQ0My1zcGkuMCIsICJzcGlfYnVzY2xrMCIpLAorCUFMSUFTKEhDTEtfSFNNTUMxLCAiczNjLXNkaGNpLjEiLCAiaHNtbWMiKSwKKwlBTElBUyhIQ0xLX0hTTU1DMSwgInMzYy1zZGhjaS4xIiwgIm1tY19idXNjbGsuMCIpLAorCUFMSUFTKFBDTEtfSTJTMCwgInNhbXN1bmctaTJzLjAiLCAiaWlzIiksCisJQUxJQVMoU0NMS19JMlMwLCBOVUxMLCAiaTJzLWlmIiksCisJQUxJQVMoSENMS19MQ0QsIE5VTEwsICJsY2QiKSwKKwlBTElBUyhTQ0xLX0ZJTUQsIE5VTEwsICJzY2xrX2ZpbWQiKSwKK307CisKKy8qIFMzQzI0MTYgc3BlY2lmaWMgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19wbGxfY2xvY2sgczNjMjQxNl9wbGxfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJW21wbGxdID0gUExMKHBsbF82NTUyX3MzYzI0MTYsIDAsICJtcGxsIiwgIm1wbGxyZWYiLAorCQkJCQkJTE9DS0NPTjAsIE1QTExDT04sIE5VTEwpLAorCVtlcGxsXSA9IFBMTChwbGxfNjU1MywgMCwgImVwbGwiLCAiZXBsbHJlZiIsCisJCQkJCQlMT0NLQ09OMSwgRVBMTENPTiwgTlVMTCksCit9OworCitQTkFNRShzM2MyNDE2X2hzbW1jMF9wKSA9IHsgInNjbGtfaHNtbWMwIiwgInNjbGtfaHNtbWNleHQiIH07CitQTkFNRShzM2MyNDE2X2hzbW1jMV9wKSA9IHsgInNjbGtfaHNtbWMxIiwgInNjbGtfaHNtbWNleHQiIH07CitQTkFNRShzM2MyNDE2X2hzc3BpMF9wKSA9IHsgImhzc3BpMF9lcGxsIiwgImhzc3BpMF9tcGxsIiB9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfdGFibGUgYXJtZGl2X3MzYzI0MTZfZFtdID0geworCXsgLnZhbCA9IDAsIC5kaXYgPSAxIH0sCisJeyAudmFsID0gMSwgLmRpdiA9IDIgfSwKKwl7IC52YWwgPSAyLCAuZGl2ID0gMyB9LAorCXsgLnZhbCA9IDMsIC5kaXYgPSA0IH0sCisJeyAudmFsID0gNSwgLmRpdiA9IDYgfSwKKwl7IC52YWwgPSA3LCAuZGl2ID0gOCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBzM2MyNDE2X2RpdmlkZXJzW10gX19pbml0ZGF0YSA9IHsKKwlESVZfVChBUk1ESVYsICJhcm1kaXYiLCAibXN5c2NsayIsIENMS0RJVjAsIDksIDMsIGFybWRpdl9zM2MyNDE2X2QpLAorCURJVigwLCAiZGl2X2hzc3BpMF9tcGxsIiwgIm1zeXNjbGsiLCBDTEtESVYyLCAwLCA0KSwKKwlESVYoMCwgImRpdl9oc21tYzAiLCAiZXN5c2NsayIsIENMS0RJVjIsIDYsIDIpLAorfTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIHMzYzI0MTZfbXV4ZXNbXSBfX2luaXRkYXRhID0geworCU1VWChNVVhfSFNNTUMwLCAibXV4X2hzbW1jMCIsIHMzYzI0MTZfaHNtbWMwX3AsIENMS1NSQywgMTYsIDEpLAorCU1VWChNVVhfSFNNTUMxLCAibXV4X2hzbW1jMSIsIHMzYzI0MTZfaHNtbWMxX3AsIENMS1NSQywgMTcsIDEpLAorCU1VWChNVVhfSFNTUEkwLCAibXV4X2hzc3BpMCIsIHMzYzI0MTZfaHNzcGkwX3AsIENMS1NSQywgMTgsIDEpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBzM2MyNDE2X2dhdGVzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKDAsICJoc3NwaTBfbXBsbCIsICJkaXZfaHNzcGkwX21wbGwiLCBTQ0xLQ09OLCAxOSwgMCwgMCksCisJR0FURSgwLCAiaHNzcGkwX2VwbGwiLCAiZGl2X2hzc3BpMF9lcGxsIiwgU0NMS0NPTiwgMTQsIDAsIDApLAorCUdBVEUoMCwgInNjbGtfaHNtbWMwIiwgImRpdl9oc21tYzAiLCBTQ0xLQ09OLCA2LCAwLCAwKSwKKwlHQVRFKEhDTEtfMkQsICIyZCIsICJoY2xrIiwgSENMS0NPTiwgMjAsIDAsIDApLAorCUdBVEUoSENMS19IU01NQzAsICJoc21tYzAiLCAiaGNsayIsIEhDTEtDT04sIDE1LCAwLCAwKSwKKwlHQVRFKEhDTEtfSVJPTSwgImlyb20iLCAiaGNsayIsIEhDTEtDT04sIDEzLCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShQQ0xLX1BDTSwgInBjbSIsICJwY2xrIiwgUENMS0NPTiwgMTksIDAsIDApLAorfTsKKworc3RydWN0IHNhbXN1bmdfY2xvY2tfYWxpYXMgczNjMjQxNl9hbGlhc2VzW10gX19pbml0ZGF0YSA9IHsKKwlBTElBUyhIQ0xLX0hTTU1DMCwgInMzYy1zZGhjaS4wIiwgImhzbW1jIiksCisJQUxJQVMoSENMS19IU01NQzAsICJzM2Mtc2RoY2kuMCIsICJtbWNfYnVzY2xrLjAiKSwKKwlBTElBUyhNVVhfSFNNTUMwLCAiczNjLXNkaGNpLjAiLCAibW1jX2J1c2Nsay4yIiksCisJQUxJQVMoTVVYX0hTTU1DMSwgInMzYy1zZGhjaS4xIiwgIm1tY19idXNjbGsuMiIpLAorCUFMSUFTKE1VWF9IU1NQSTAsICJzM2MyNDQzLXNwaS4wIiwgInNwaV9idXNjbGsyIiksCisJQUxJQVMoQVJNRElWLCBOVUxMLCAiYXJtZGl2IiksCit9OworCisvKiBTM0MyNDQzIHNwZWNpZmljIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrIHMzYzI0NDNfcGxsX2Nsa3NbXSBfX2luaXRkYXRhID0geworCVttcGxsXSA9IFBMTChwbGxfMzAwMCwgMCwgIm1wbGwiLCAibXBsbHJlZiIsCisJCQkJCQlMT0NLQ09OMCwgTVBMTENPTiwgTlVMTCksCisJW2VwbGxdID0gUExMKHBsbF8yMTI2LCAwLCAiZXBsbCIsICJlcGxscmVmIiwKKwkJCQkJCUxPQ0tDT04xLCBFUExMQ09OLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl90YWJsZSBhcm1kaXZfczNjMjQ0M19kW10gPSB7CisJeyAudmFsID0gMCwgLmRpdiA9IDEgfSwKKwl7IC52YWwgPSA4LCAuZGl2ID0gMiB9LAorCXsgLnZhbCA9IDIsIC5kaXYgPSAzIH0sCisJeyAudmFsID0gOSwgLmRpdiA9IDQgfSwKKwl7IC52YWwgPSAxMCwgLmRpdiA9IDYgfSwKKwl7IC52YWwgPSAxMSwgLmRpdiA9IDggfSwKKwl7IC52YWwgPSAxMywgLmRpdiA9IDEyIH0sCisJeyAudmFsID0gMTUsIC5kaXYgPSAxNiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBzM2MyNDQzX2RpdmlkZXJzW10gX19pbml0ZGF0YSA9IHsKKwlESVZfVChBUk1ESVYsICJhcm1kaXYiLCAibXN5c2NsayIsIENMS0RJVjAsIDksIDQsIGFybWRpdl9zM2MyNDQzX2QpLAorCURJVigwLCAiZGl2X2NhbSIsICJlc3lzY2xrIiwgQ0xLRElWMSwgMjYsIDQpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBzM2MyNDQzX2dhdGVzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKFNDTEtfSFNTUEkwLCAic2Nsa19oc3NwaTAiLCAiZGl2X2hzc3BpMF9lcGxsIiwgU0NMS0NPTiwgMTQsIDAsIDApLAorCUdBVEUoU0NMS19DQU0sICJzY2xrX2NhbSIsICJkaXZfY2FtIiwgU0NMS0NPTiwgMTEsIDAsIDApLAorCUdBVEUoSENMS19DRkMsICJjZmMiLCAiaGNsayIsIEhDTEtDT04sIDE3LCBDTEtfSUdOT1JFX1VOVVNFRCwgMCksCisJR0FURShIQ0xLX0NBTSwgImNhbSIsICJoY2xrIiwgSENMS0NPTiwgOCwgMCwgMCksCisJR0FURShQQ0xLX1NQSTEsICJzcGkxIiwgInBjbGsiLCBQQ0xLQ09OLCAxNSwgMCwgMCksCisJR0FURShQQ0xLX1NESSwgInNkaSIsICJwY2xrIiwgUENMS0NPTiwgNSwgMCwgMCksCit9OworCitzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyBzM2MyNDQzX2FsaWFzZXNbXSBfX2luaXRkYXRhID0geworCUFMSUFTKFNDTEtfSFNTUEkwLCAiczNjMjQ0My1zcGkuMCIsICJzcGlfYnVzY2xrMiIpLAorCUFMSUFTKFNDTEtfSFNNTUMxLCAiczNjLXNkaGNpLjEiLCAibW1jX2J1c2Nsay4yIiksCisJQUxJQVMoU0NMS19DQU0sIE5VTEwsICJjYW1pZi11cGxsIiksCisJQUxJQVMoUENMS19TUEkxLCAiczNjMjQxMC1zcGkuMCIsICJzcGkiKSwKKwlBTElBUyhQQ0xLX1NESSwgTlVMTCwgInNkaSIpLAorCUFMSUFTKEhDTEtfQ0ZDLCBOVUxMLCAiY2ZjIiksCisJQUxJQVMoQVJNRElWLCBOVUxMLCAiYXJtZGl2IiksCit9OworCisvKiBTM0MyNDUwIHNwZWNpZmljIGNsb2NrcyAqLworCitQTkFNRShzM2MyNDUwX2NhbV9wKSA9IHsgImRpdl9jYW0iLCAiaGNsayIgfTsKK1BOQU1FKHMzYzI0NTBfaHNzcGkxX3ApID0geyAiaHNzcGkxX2VwbGwiLCAiaHNzcGkxX21wbGwiIH07CitQTkFNRShpMnMxX3ApID0geyAiZGl2X2kyczEiLCAiZXh0X2kycyIsICJlcGxscmVmIiwgImVwbGxyZWYiIH07CisKK3N0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayBzM2MyNDUwX2RpdmlkZXJzW10gX19pbml0ZGF0YSA9IHsKKwlESVYoMCwgImRpdl9jYW0iLCAiZXN5c2NsayIsIENMS0RJVjEsIDI2LCA0KSwKKwlESVYoMCwgImRpdl9oc3NwaTFfZXBsbCIsICJlc3lzY2xrIiwgQ0xLRElWMiwgMjQsIDIpLAorCURJVigwLCAiZGl2X2hzc3BpMV9tcGxsIiwgIm1zeXNjbGsiLCBDTEtESVYyLCAxNiwgNCksCisJRElWKDAsICJkaXZfaTJzMSIsICJlc3lzY2xrIiwgQ0xLRElWMiwgMTIsIDQpLAorfTsKKworc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIHMzYzI0NTBfbXV4ZXNbXSBfX2luaXRkYXRhID0geworCU1VWCgwLCAibXV4X2NhbSIsIHMzYzI0NTBfY2FtX3AsIENMS1NSQywgMjAsIDEpLAorCU1VWChNVVhfSFNTUEkxLCAibXV4X2hzc3BpMSIsIHMzYzI0NTBfaHNzcGkxX3AsIENMS1NSQywgMTksIDEpLAorCU1VWCgwLCAibXV4X2kyczEiLCBpMnMxX3AsIENMS1NSQywgMTIsIDIpLAorfTsKKworc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayBzM2MyNDUwX2dhdGVzW10gX19pbml0ZGF0YSA9IHsKKwlHQVRFKFNDTEtfSTJTMSwgInNjbGtfaTJzMSIsICJkaXZfaTJzMSIsIFNDTEtDT04sIDUsIDAsIDApLAorCUdBVEUoSENMS19DRkMsICJjZmMiLCAiaGNsayIsIEhDTEtDT04sIDE3LCAwLCAwKSwKKwlHQVRFKEhDTEtfQ0FNLCAiY2FtIiwgImhjbGsiLCBIQ0xLQ09OLCA4LCAwLCAwKSwKKwlHQVRFKEhDTEtfRE1BNywgImRtYTciLCAiaGNsayIsIEhDTEtDT04sIDcsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKEhDTEtfRE1BNiwgImRtYTYiLCAiaGNsayIsIEhDTEtDT04sIDYsIENMS19JR05PUkVfVU5VU0VELCAwKSwKKwlHQVRFKFBDTEtfSTJTMSwgImkyczEiLCAicGNsayIsIFBDTEtDT04sIDE3LCAwLCAwKSwKKwlHQVRFKFBDTEtfSTJDMSwgImkyYzEiLCAicGNsayIsIFBDTEtDT04sIDE2LCAwLCAwKSwKKwlHQVRFKFBDTEtfU1BJMSwgInNwaTEiLCAicGNsayIsIFBDTEtDT04sIDE0LCAwLCAwKSwKK307CisKK3N0cnVjdCBzYW1zdW5nX2Nsb2NrX2FsaWFzIHMzYzI0NTBfYWxpYXNlc1tdIF9faW5pdGRhdGEgPSB7CisJQUxJQVMoUENMS19TUEkxLCAiczNjMjQ0My1zcGkuMSIsICJzcGkiKSwKKwlBTElBUyhQQ0xLX1NQSTEsICJzM2MyNDQzLXNwaS4xIiwgInNwaV9idXNjbGswIiksCisJQUxJQVMoTVVYX0hTU1BJMSwgInMzYzI0NDMtc3BpLjEiLCAic3BpX2J1c2NsazIiKSwKKwlBTElBUyhQQ0xLX0kyQzEsICJzM2MyNDEwLWkyYy4xIiwgImkyYyIpLAorfTsKKworLyoKKyAqIGZpeGVkIHJhdGUgY2xvY2tzIGdlbmVyYXRlZCBvdXRzaWRlIHRoZSBzb2MKKyAqIE9ubHkgbmVjZXNzYXJ5IHVudGlsIHRoZSBkZXZpY2V0cmVlLW1vdmUgaXMgY29tcGxldGUKKyAqLworc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayBzM2MyNDQzX2NvbW1vbl9mcmF0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlGUkFURSgwLCAieHRpIiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDApLAorCUZSQVRFKDAsICJleHQiLCBOVUxMLCBDTEtfSVNfUk9PVCwgMCksCisJRlJBVEUoMCwgImV4dF9pMnMiLCBOVUxMLCBDTEtfSVNfUk9PVCwgMCksCisJRlJBVEUoMCwgImV4dF91YXJ0IiwgTlVMTCwgQ0xLX0lTX1JPT1QsIDApLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHMzYzI0NDNfY29tbW9uX2Nsa19yZWdpc3Rlcl9maXhlZF9leHQoCisJCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LCB1bnNpZ25lZCBsb25nIHh0aV9mKQoreworCXMzYzI0NDNfY29tbW9uX2ZyYXRlX2Nsa3NbMF0uZml4ZWRfcmF0ZSA9IHh0aV9mOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBzM2MyNDQzX2NvbW1vbl9mcmF0ZV9jbGtzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0M19jb21tb25fZnJhdGVfY2xrcykpOworfQorCit2b2lkIF9faW5pdCBzM2MyNDQzX2NvbW1vbl9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1bnNpZ25lZCBsb25nIHh0aV9mLAorCQkJCSAgICBpbnQgY3VycmVudF9zb2MsCisJCQkJICAgIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwlyZWdfYmFzZSA9IGJhc2U7CisKKwlpZiAobnApIHsKKwkJcmVnX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghcmVnX2Jhc2UpCisJCQlwYW5pYygiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIE5SX0NMS1MpOworCWlmICghY3R4KQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBjb250ZXh0LlxuIiwgX19mdW5jX18pOworCisJLyogUmVnaXN0ZXIgZXh0ZXJuYWwgY2xvY2tzIG9ubHkgaW4gbm9uLWR0IGNhc2VzICovCisJaWYgKCFucCkKKwkJczNjMjQ0M19jb21tb25fY2xrX3JlZ2lzdGVyX2ZpeGVkX2V4dChjdHgsIHh0aV9mKTsKKworCS8qIFJlZ2lzdGVyIFBMTHMuICovCisJaWYgKGN1cnJlbnRfc29jID09IFMzQzI0MTYgfHwgY3VycmVudF9zb2MgPT0gUzNDMjQ1MCkKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKGN0eCwgczNjMjQxNl9wbGxfY2xrcywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0MTZfcGxsX2Nsa3MpLCByZWdfYmFzZSk7CisJZWxzZQorCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9wbGwoY3R4LCBzM2MyNDQzX3BsbF9jbGtzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0M19wbGxfY2xrcyksIHJlZ19iYXNlKTsKKworCS8qIFJlZ2lzdGVyIGNvbW1vbiBpbnRlcm5hbCBjbG9ja3MuICovCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQ0M19jb21tb25fbXV4ZXMsCisJCQlBUlJBWV9TSVpFKHMzYzI0NDNfY29tbW9uX211eGVzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjMjQ0M19jb21tb25fZGl2aWRlcnMsCisJCQlBUlJBWV9TSVpFKHMzYzI0NDNfY29tbW9uX2RpdmlkZXJzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0NDNfY29tbW9uX2dhdGVzLAorCQlBUlJBWV9TSVpFKHMzYzI0NDNfY29tbW9uX2dhdGVzKSk7CisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoY3R4LCBzM2MyNDQzX2NvbW1vbl9hbGlhc2VzLAorCQlBUlJBWV9TSVpFKHMzYzI0NDNfY29tbW9uX2FsaWFzZXMpKTsKKworCS8qIFJlZ2lzdGVyIFNvQy1zcGVjaWZpYyBjbG9ja3MuICovCisJc3dpdGNoIChjdXJyZW50X3NvYykgeworCWNhc2UgUzNDMjQ1MDoKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjMjQ1MF9kaXZpZGVycywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0NTBfZGl2aWRlcnMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQ1MF9tdXhlcywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0NTBfbXV4ZXMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0NTBfZ2F0ZXMsCisJCQkJQVJSQVlfU0laRShzM2MyNDUwX2dhdGVzKSk7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQ1MF9hbGlhc2VzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ1MF9hbGlhc2VzKSk7CisJCS8qIGZhbGwgdGhyb3VnaCwgYXMgczNjMjQ1MCBleHRlbmRzIHRoZSBzM2MyNDE2IGNsb2NrcyAqLworCWNhc2UgUzNDMjQxNjoKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjMjQxNl9kaXZpZGVycywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0MTZfZGl2aWRlcnMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjMjQxNl9tdXhlcywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0MTZfbXV4ZXMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0MTZfZ2F0ZXMsCisJCQkJQVJSQVlfU0laRShzM2MyNDE2X2dhdGVzKSk7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQxNl9hbGlhc2VzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQxNl9hbGlhc2VzKSk7CisJCWJyZWFrOworCWNhc2UgUzNDMjQ0MzoKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjMjQ0M19kaXZpZGVycywKKwkJCQlBUlJBWV9TSVpFKHMzYzI0NDNfZGl2aWRlcnMpKTsKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShjdHgsIHMzYzI0NDNfZ2F0ZXMsCisJCQkJQVJSQVlfU0laRShzM2MyNDQzX2dhdGVzKSk7CisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjMjQ0M19hbGlhc2VzLAorCQkJCUFSUkFZX1NJWkUoczNjMjQ0M19hbGlhc2VzKSk7CisJCWJyZWFrOworCX0KKworCXMzYzI0NDNfY2xrX3NsZWVwX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHMzYzI0MTZfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzM2MyNDQzX2NvbW1vbl9jbGtfaW5pdChucCwgMCwgUzNDMjQxNiwgMCk7Cit9CitDTEtfT0ZfREVDTEFSRShzM2MyNDE2X2NsaywgInNhbXN1bmcsczNjMjQxNi1jbG9jayIsIHMzYzI0MTZfY2xrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQ0M19jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXMzYzI0NDNfY29tbW9uX2Nsa19pbml0KG5wLCAwLCBTM0MyNDQzLCAwKTsKK30KK0NMS19PRl9ERUNMQVJFKHMzYzI0NDNfY2xrLCAic2Ftc3VuZyxzM2MyNDQzLWNsb2NrIiwgczNjMjQ0M19jbGtfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDUwX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJczNjMjQ0M19jb21tb25fY2xrX2luaXQobnAsIDAsIFMzQzI0NTAsIDApOworfQorQ0xLX09GX0RFQ0xBUkUoczNjMjQ1MF9jbGssICJzYW1zdW5nLHMzYzI0NTAtY2xvY2siLCBzM2MyNDUwX2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzY0eHguYyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLXMzYzY0eHguYwppbmRleCA4YmRhNjU4Li5lZmExNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1zM2M2NHh4LmMKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstczNjNjR4eC5jCkBAIC00NDIsMTIgKzQ0MiwxNCBAQAogCUFMSUFTKE1FTTBfU1JPTSwgTlVMTCwgInNyb20iKSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzM2M2NHh4X2Nsa19yZWdpc3Rlcl9maXhlZF9leHQodW5zaWduZWQgbG9uZyBmaW5fcGxsX2YsCi0JCQkJCQkJdW5zaWduZWQgbG9uZyB4dXNieHRpX2YpCitzdGF0aWMgdm9pZCBfX2luaXQgczNjNjR4eF9jbGtfcmVnaXN0ZXJfZml4ZWRfZXh0KAorCQkJCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAorCQkJCXVuc2lnbmVkIGxvbmcgZmluX3BsbF9mLAorCQkJCXVuc2lnbmVkIGxvbmcgeHVzYnh0aV9mKQogewogCXMzYzY0eHhfZml4ZWRfcmF0ZV9leHRfY2xrc1swXS5maXhlZF9yYXRlID0gZmluX3BsbF9mOwogCXMzYzY0eHhfZml4ZWRfcmF0ZV9leHRfY2xrc1sxXS5maXhlZF9yYXRlID0geHVzYnh0aV9mOwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoczNjNjR4eF9maXhlZF9yYXRlX2V4dF9jbGtzLAorCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBzM2M2NHh4X2ZpeGVkX3JhdGVfZXh0X2Nsa3MsCiAJCQkJQVJSQVlfU0laRShzM2M2NHh4X2ZpeGVkX3JhdGVfZXh0X2Nsa3MpKTsKIH0KIApAQCAtNDU2LDYgKzQ1OCw4IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgeHVzYnh0aV9mLCBib29sIHMzYzY0MDAsCiAJCQkgICAgIHZvaWQgX19pb21lbSAqYmFzZSkKIHsKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwogCXJlZ19iYXNlID0gYmFzZTsKIAlpc19zM2M2NDAwID0gczNjNjQwMDsKIApAQCAtNDY1LDQ4ICs0NjksNTAgQEAKIAkJCXBhbmljKCIlczogZmFpbGVkIHRvIG1hcCByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKIAl9CiAKLQlzYW1zdW5nX2Nsa19pbml0KG5wLCByZWdfYmFzZSwgTlJfQ0xLUyk7CisJY3R4ID0gc2Ftc3VuZ19jbGtfaW5pdChucCwgcmVnX2Jhc2UsIE5SX0NMS1MpOworCWlmICghY3R4KQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBjb250ZXh0LlxuIiwgX19mdW5jX18pOwogCiAJLyogUmVnaXN0ZXIgZXh0ZXJuYWwgY2xvY2tzLiAqLwogCWlmICghbnApCi0JCXMzYzY0eHhfY2xrX3JlZ2lzdGVyX2ZpeGVkX2V4dCh4dGFsX2YsIHh1c2J4dGlfZik7CisJCXMzYzY0eHhfY2xrX3JlZ2lzdGVyX2ZpeGVkX2V4dChjdHgsIHh0YWxfZiwgeHVzYnh0aV9mKTsKIAogCS8qIFJlZ2lzdGVyIFBMTHMuICovCi0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKHMzYzY0eHhfcGxsX2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKGN0eCwgczNjNjR4eF9wbGxfY2xrcywKIAkJCQlBUlJBWV9TSVpFKHMzYzY0eHhfcGxsX2Nsa3MpLCByZWdfYmFzZSk7CiAKIAkvKiBSZWdpc3RlciBjb21tb24gaW50ZXJuYWwgY2xvY2tzLiAqLwotCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoczNjNjR4eF9maXhlZF9yYXRlX2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShjdHgsIHMzYzY0eHhfZml4ZWRfcmF0ZV9jbGtzLAogCQkJCQlBUlJBWV9TSVpFKHMzYzY0eHhfZml4ZWRfcmF0ZV9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KHMzYzY0eHhfbXV4X2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KGN0eCwgczNjNjR4eF9tdXhfY2xrcywKIAkJCQkJQVJSQVlfU0laRShzM2M2NHh4X211eF9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KHMzYzY0eHhfZGl2X2Nsa3MsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjNjR4eF9kaXZfY2xrcywKIAkJCQkJQVJSQVlfU0laRShzM2M2NHh4X2Rpdl9jbGtzKSk7Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShzM2M2NHh4X2dhdGVfY2xrcywKKwlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGN0eCwgczNjNjR4eF9nYXRlX2Nsa3MsCiAJCQkJCUFSUkFZX1NJWkUoczNjNjR4eF9nYXRlX2Nsa3MpKTsKIAogCS8qIFJlZ2lzdGVyIFNvQy1zcGVjaWZpYyBjbG9ja3MuICovCiAJaWYgKGlzX3MzYzY0MDApIHsKLQkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KHMzYzY0MDBfbXV4X2Nsa3MsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChjdHgsIHMzYzY0MDBfbXV4X2Nsa3MsCiAJCQkJCUFSUkFZX1NJWkUoczNjNjQwMF9tdXhfY2xrcykpOwotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9kaXYoczNjNjQwMF9kaXZfY2xrcywKKwkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KGN0eCwgczNjNjQwMF9kaXZfY2xrcywKIAkJCQkJQVJSQVlfU0laRShzM2M2NDAwX2Rpdl9jbGtzKSk7Ci0JCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoczNjNjQwMF9nYXRlX2Nsa3MsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoY3R4LCBzM2M2NDAwX2dhdGVfY2xrcywKIAkJCQkJQVJSQVlfU0laRShzM2M2NDAwX2dhdGVfY2xrcykpOwotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhzM2M2NDAwX2Nsb2NrX2FsaWFzZXMsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKGN0eCwgczNjNjQwMF9jbG9ja19hbGlhc2VzLAogCQkJCQlBUlJBWV9TSVpFKHMzYzY0MDBfY2xvY2tfYWxpYXNlcykpOwogCX0gZWxzZSB7Ci0JCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChzM2M2NDEwX211eF9jbGtzLAorCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9tdXgoY3R4LCBzM2M2NDEwX211eF9jbGtzLAogCQkJCQlBUlJBWV9TSVpFKHMzYzY0MTBfbXV4X2Nsa3MpKTsKLQkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZGl2KHMzYzY0MTBfZGl2X2Nsa3MsCisJCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihjdHgsIHMzYzY0MTBfZGl2X2Nsa3MsCiAJCQkJCUFSUkFZX1NJWkUoczNjNjQxMF9kaXZfY2xrcykpOwotCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKHMzYzY0MTBfZ2F0ZV9jbGtzLAorCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKGN0eCwgczNjNjQxMF9nYXRlX2Nsa3MsCiAJCQkJCUFSUkFZX1NJWkUoczNjNjQxMF9nYXRlX2Nsa3MpKTsKLQkJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoczNjNjQxMF9jbG9ja19hbGlhc2VzLAorCQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhjdHgsIHMzYzY0MTBfY2xvY2tfYWxpYXNlcywKIAkJCQkJQVJSQVlfU0laRShzM2M2NDEwX2Nsb2NrX2FsaWFzZXMpKTsKIAl9CiAKLQlzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhzM2M2NHh4X2Nsb2NrX2FsaWFzZXMsCisJc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoY3R4LCBzM2M2NHh4X2Nsb2NrX2FsaWFzZXMsCiAJCQkJCUFSUkFZX1NJWkUoczNjNjR4eF9jbG9ja19hbGlhc2VzKSk7CiAJczNjNjR4eF9jbGtfc2xlZXBfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay5jIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGsuYwppbmRleCA5MWJlYzNlLi40OTYyOWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay5jCisrKyBiL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmMKQEAgLTE0LDEzICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlICJjbGsuaCIKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgY2xrICoqY2xrX3RhYmxlOwotc3RhdGljIHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7Ci0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7Ci0jZW5kaWYKLQogdm9pZCBzYW1zdW5nX2Nsa19zYXZlKHZvaWQgX19pb21lbSAqYmFzZSwKIAkJCQkgICAgc3RydWN0IHNhbXN1bmdfY2xrX3JlZ19kdW1wICpyZCwKIAkJCQkgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQpAQCAtNTUsNDAgKzQ4LDU4IEBACiB9CiAKIC8qIHNldHVwIHRoZSBlc3NlbnRpYWxzIHJlcXVpcmVkIHRvIHN1cHBvcnQgY2xvY2sgbG9va3VwIHVzaW5nIGNjZiAqLwotdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB2b2lkIF9faW9tZW0gKmJhc2UsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgbnJfY2xrcykKK3N0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqX19pbml0IHNhbXN1bmdfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCXZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBucl9jbGtzKQogewotCXJlZ19iYXNlID0gYmFzZTsKKwlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eDsKKwlzdHJ1Y3QgY2xrICoqY2xrX3RhYmxlOworCWludCByZXQ7CisJaW50IGk7CiAKLQljbGtfdGFibGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2xrICopICogbnJfY2xrcywgR0ZQX0tFUk5FTCk7CisJY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXBhbmljKCJjb3VsZCBub3QgYWxsb2NhdGUgY2xvY2sgcHJvdmlkZXIgY29udGV4dC5cbiIpOworCisJY2xrX3RhYmxlID0ga2NhbGxvYyhucl9jbGtzLCBzaXplb2Yoc3RydWN0IGNsayAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGtfdGFibGUpCiAJCXBhbmljKCJjb3VsZCBub3QgYWxsb2NhdGUgY2xvY2sgbG9va3VwIHRhYmxlXG4iKTsKIAotCWlmICghbnApCi0JCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY2xrczsgKytpKQorCQljbGtfdGFibGVbaV0gPSBFUlJfUFRSKC1FTk9FTlQpOwogCi0jaWZkZWYgQ09ORklHX09GCi0JY2xrX2RhdGEuY2xrcyA9IGNsa190YWJsZTsKLQljbGtfZGF0YS5jbGtfbnVtID0gbnJfY2xrczsKLQlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCAmY2xrX2RhdGEpOwotI2VuZGlmCisJY3R4LT5yZWdfYmFzZSA9IGJhc2U7CisJY3R4LT5jbGtfZGF0YS5jbGtzID0gY2xrX3RhYmxlOworCWN0eC0+Y2xrX2RhdGEuY2xrX251bSA9IG5yX2Nsa3M7CisJc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7CisKKwlpZiAoIW5wKQorCQlyZXR1cm4gY3R4OworCisJcmV0ID0gb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwKKwkJCSZjdHgtPmNsa19kYXRhKTsKKwlpZiAocmV0KQorCQlwYW5pYygiY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVcbiIpOworCisJcmV0dXJuIGN0eDsKIH0KIAogLyogYWRkIGEgY2xvY2sgaW5zdGFuY2UgdG8gdGhlIGNsb2NrIGxvb2t1cCB0YWJsZSB1c2VkIGZvciBkdCBiYXNlZCBsb29rdXAgKi8KLXZvaWQgc2Ftc3VuZ19jbGtfYWRkX2xvb2t1cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGludCBpZCkKK3ZvaWQgc2Ftc3VuZ19jbGtfYWRkX2xvb2t1cChzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwgc3RydWN0IGNsayAqY2xrLAorCQkJCXVuc2lnbmVkIGludCBpZCkKIHsKLQlpZiAoY2xrX3RhYmxlICYmIGlkKQotCQljbGtfdGFibGVbaWRdID0gY2xrOworCWlmIChjdHgtPmNsa19kYXRhLmNsa3MgJiYgaWQpCisJCWN0eC0+Y2xrX2RhdGEuY2xrc1tpZF0gPSBjbGs7CiB9CiAKIC8qIHJlZ2lzdGVyIGEgbGlzdCBvZiBhbGlhc2VzICovCi12b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9hbGlhcyhzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyAqbGlzdCwKLQkJCQkJdW5zaWduZWQgaW50IG5yX2NsaykKK3ZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX2FsaWFzKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAorCQkJCXN0cnVjdCBzYW1zdW5nX2Nsb2NrX2FsaWFzICpsaXN0LAorCQkJCXVuc2lnbmVkIGludCBucl9jbGspCiB7CiAJc3RydWN0IGNsayAqY2xrOwogCXVuc2lnbmVkIGludCBpZHgsIHJldDsKIAotCWlmICghY2xrX3RhYmxlKSB7CisJaWYgKCFjdHgtPmNsa19kYXRhLmNsa3MpIHsKIAkJcHJfZXJyKCIlczogY2xvY2sgdGFibGUgbWlzc2luZ1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQpAQCAtMTAwLDcgKzExMSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWNsayA9IGNsa190YWJsZVtsaXN0LT5pZF07CisJCWNsayA9IGN0eC0+Y2xrX2RhdGEuY2xrc1tsaXN0LT5pZF07CiAJCWlmICghY2xrKSB7CiAJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZmluZCBjbG9jayAlZFxuIiwgX19mdW5jX18sCiAJCQkJbGlzdC0+aWQpOwpAQCAtMTE1LDcgKzEyNiw3IEBACiB9CiAKIC8qIHJlZ2lzdGVyIGEgbGlzdCBvZiBmaXhlZCBjbG9ja3MgKi8KLXZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoCit2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9yYXRlKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAogCQlzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrICpsaXN0LCB1bnNpZ25lZCBpbnQgbnJfY2xrKQogewogCXN0cnVjdCBjbGsgKmNsazsKQEAgLTEzMCw3ICsxNDEsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlzYW1zdW5nX2Nsa19hZGRfbG9va3VwKGNsaywgbGlzdC0+aWQpOworCQlzYW1zdW5nX2Nsa19hZGRfbG9va3VwKGN0eCwgY2xrLCBsaXN0LT5pZCk7CiAKIAkJLyoKIAkJICogVW5jb25kaXRpb25hbGx5IGFkZCBhIGNsb2NrIGxvb2t1cCBmb3IgdGhlIGZpeGVkIHJhdGUgY2xvY2tzLgpAQCAtMTQ0LDcgKzE1NSw3IEBACiB9CiAKIC8qIHJlZ2lzdGVyIGEgbGlzdCBvZiBmaXhlZCBmYWN0b3IgY2xvY2tzICovCi12b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoCit2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3Ioc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCiAJCXN0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayAqbGlzdCwgdW5zaWduZWQgaW50IG5yX2NsaykKIHsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0xNTksMjggKzE3MCwzMCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlzYW1zdW5nX2Nsa19hZGRfbG9va3VwKGNsaywgbGlzdC0+aWQpOworCQlzYW1zdW5nX2Nsa19hZGRfbG9va3VwKGN0eCwgY2xrLCBsaXN0LT5pZCk7CiAJfQogfQogCiAvKiByZWdpc3RlciBhIGxpc3Qgb2YgbXV4IGNsb2NrcyAqLwotdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KHN0cnVjdCBzYW1zdW5nX211eF9jbG9jayAqbGlzdCwKLQkJCQkJdW5zaWduZWQgaW50IG5yX2NsaykKK3ZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKKwkJCQlzdHJ1Y3Qgc2Ftc3VuZ19tdXhfY2xvY2sgKmxpc3QsCisJCQkJdW5zaWduZWQgaW50IG5yX2NsaykKIHsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJdW5zaWduZWQgaW50IGlkeCwgcmV0OwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBucl9jbGs7IGlkeCsrLCBsaXN0KyspIHsKIAkJY2xrID0gY2xrX3JlZ2lzdGVyX211eChOVUxMLCBsaXN0LT5uYW1lLCBsaXN0LT5wYXJlbnRfbmFtZXMsCi0JCQlsaXN0LT5udW1fcGFyZW50cywgbGlzdC0+ZmxhZ3MsIHJlZ19iYXNlICsgbGlzdC0+b2Zmc2V0LAotCQkJbGlzdC0+c2hpZnQsIGxpc3QtPndpZHRoLCBsaXN0LT5tdXhfZmxhZ3MsICZsb2NrKTsKKwkJCWxpc3QtPm51bV9wYXJlbnRzLCBsaXN0LT5mbGFncywKKwkJCWN0eC0+cmVnX2Jhc2UgKyBsaXN0LT5vZmZzZXQsCisJCQlsaXN0LT5zaGlmdCwgbGlzdC0+d2lkdGgsIGxpc3QtPm11eF9mbGFncywgJmN0eC0+bG9jayk7CiAJCWlmIChJU19FUlIoY2xrKSkgewogCQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzXG4iLCBfX2Z1bmNfXywKIAkJCQlsaXN0LT5uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc2Ftc3VuZ19jbGtfYWRkX2xvb2t1cChjbGssIGxpc3QtPmlkKTsKKwkJc2Ftc3VuZ19jbGtfYWRkX2xvb2t1cChjdHgsIGNsaywgbGlzdC0+aWQpOwogCiAJCS8qIHJlZ2lzdGVyIGEgY2xvY2sgbG9va3VwIG9ubHkgaWYgYSBjbG9jayBhbGlhcyBpcyBzcGVjaWZpZWQgKi8KIAkJaWYgKGxpc3QtPmFsaWFzKSB7CkBAIC0xOTQsOCArMjA3LDkgQEAKIH0KIAogLyogcmVnaXN0ZXIgYSBsaXN0IG9mIGRpdiBjbG9ja3MgKi8KLXZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgKmxpc3QsCi0JCQkJCXVuc2lnbmVkIGludCBucl9jbGspCit2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9kaXYoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCisJCQkJc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrICpsaXN0LAorCQkJCXVuc2lnbmVkIGludCBucl9jbGspCiB7CiAJc3RydWN0IGNsayAqY2xrOwogCXVuc2lnbmVkIGludCBpZHgsIHJldDsKQEAgLTIwMywyMiArMjE3LDIyIEBACiAJZm9yIChpZHggPSAwOyBpZHggPCBucl9jbGs7IGlkeCsrLCBsaXN0KyspIHsKIAkJaWYgKGxpc3QtPnRhYmxlKQogCQkJY2xrID0gY2xrX3JlZ2lzdGVyX2RpdmlkZXJfdGFibGUoTlVMTCwgbGlzdC0+bmFtZSwKLQkJCQkJbGlzdC0+cGFyZW50X25hbWUsIGxpc3QtPmZsYWdzLAotCQkJCQlyZWdfYmFzZSArIGxpc3QtPm9mZnNldCwgbGlzdC0+c2hpZnQsCi0JCQkJCWxpc3QtPndpZHRoLCBsaXN0LT5kaXZfZmxhZ3MsCi0JCQkJCWxpc3QtPnRhYmxlLCAmbG9jayk7CisJCQkJbGlzdC0+cGFyZW50X25hbWUsIGxpc3QtPmZsYWdzLAorCQkJCWN0eC0+cmVnX2Jhc2UgKyBsaXN0LT5vZmZzZXQsCisJCQkJbGlzdC0+c2hpZnQsIGxpc3QtPndpZHRoLCBsaXN0LT5kaXZfZmxhZ3MsCisJCQkJbGlzdC0+dGFibGUsICZjdHgtPmxvY2spOwogCQllbHNlCiAJCQljbGsgPSBjbGtfcmVnaXN0ZXJfZGl2aWRlcihOVUxMLCBsaXN0LT5uYW1lLAotCQkJCQlsaXN0LT5wYXJlbnRfbmFtZSwgbGlzdC0+ZmxhZ3MsCi0JCQkJCXJlZ19iYXNlICsgbGlzdC0+b2Zmc2V0LCBsaXN0LT5zaGlmdCwKLQkJCQkJbGlzdC0+d2lkdGgsIGxpc3QtPmRpdl9mbGFncywgJmxvY2spOworCQkJCWxpc3QtPnBhcmVudF9uYW1lLCBsaXN0LT5mbGFncywKKwkJCQljdHgtPnJlZ19iYXNlICsgbGlzdC0+b2Zmc2V0LCBsaXN0LT5zaGlmdCwKKwkJCQlsaXN0LT53aWR0aCwgbGlzdC0+ZGl2X2ZsYWdzLCAmY3R4LT5sb2NrKTsKIAkJaWYgKElTX0VSUihjbGspKSB7CiAJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXNcbiIsIF9fZnVuY19fLAogCQkJCWxpc3QtPm5hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlzYW1zdW5nX2Nsa19hZGRfbG9va3VwKGNsaywgbGlzdC0+aWQpOworCQlzYW1zdW5nX2Nsa19hZGRfbG9va3VwKGN0eCwgY2xrLCBsaXN0LT5pZCk7CiAKIAkJLyogcmVnaXN0ZXIgYSBjbG9jayBsb29rdXAgb25seSBpZiBhIGNsb2NrIGFsaWFzIGlzIHNwZWNpZmllZCAqLwogCQlpZiAobGlzdC0+YWxpYXMpIHsKQEAgLTIzMiwxNiArMjQ2LDE3IEBACiB9CiAKIC8qIHJlZ2lzdGVyIGEgbGlzdCBvZiBnYXRlIGNsb2NrcyAqLwotdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrICpsaXN0LAotCQkJCQkJdW5zaWduZWQgaW50IG5yX2NsaykKK3ZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX2dhdGUoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCisJCQkJc3RydWN0IHNhbXN1bmdfZ2F0ZV9jbG9jayAqbGlzdCwKKwkJCQl1bnNpZ25lZCBpbnQgbnJfY2xrKQogewogCXN0cnVjdCBjbGsgKmNsazsKIAl1bnNpZ25lZCBpbnQgaWR4LCByZXQ7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IG5yX2NsazsgaWR4KyssIGxpc3QrKykgewogCQljbGsgPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBsaXN0LT5uYW1lLCBsaXN0LT5wYXJlbnRfbmFtZSwKLQkJCQlsaXN0LT5mbGFncywgcmVnX2Jhc2UgKyBsaXN0LT5vZmZzZXQsCi0JCQkJbGlzdC0+Yml0X2lkeCwgbGlzdC0+Z2F0ZV9mbGFncywgJmxvY2spOworCQkJCWxpc3QtPmZsYWdzLCBjdHgtPnJlZ19iYXNlICsgbGlzdC0+b2Zmc2V0LAorCQkJCWxpc3QtPmJpdF9pZHgsIGxpc3QtPmdhdGVfZmxhZ3MsICZjdHgtPmxvY2spOwogCQlpZiAoSVNfRVJSKGNsaykpIHsKIAkJCXByX2VycigiJXM6IGZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlc1xuIiwgX19mdW5jX18sCiAJCQkJbGlzdC0+bmFtZSk7CkBAIC0yNTcsNyArMjcyLDcgQEAKIAkJCQkJX19mdW5jX18sIGxpc3QtPmFsaWFzKTsKIAkJfQogCi0JCXNhbXN1bmdfY2xrX2FkZF9sb29rdXAoY2xrLCBsaXN0LT5pZCk7CisJCXNhbXN1bmdfY2xrX2FkZF9sb29rdXAoY3R4LCBjbGssIGxpc3QtPmlkKTsKIAl9CiB9CiAKQEAgLTI2NiwyMSArMjgxLDIxIEBACiAgKiB0cmVlIGFuZCByZWdpc3RlciBpdAogICovCiAjaWZkZWYgQ09ORklHX09GCi12b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoCit2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCiAJCQlzdHJ1Y3Qgc2Ftc3VuZ19maXhlZF9yYXRlX2Nsb2NrICpmaXhlZF9yYXRlX2NsaywKIAkJCXVuc2lnbmVkIGludCBucl9maXhlZF9yYXRlX2NsaywKIAkJCXN0cnVjdCBvZl9kZXZpY2VfaWQgKmNsa19tYXRjaGVzKQogewogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpjbGtfbnA7CiAJdTMyIGZyZXE7CiAKLQlmb3JfZWFjaF9tYXRjaGluZ19ub2RlX2FuZF9tYXRjaChucCwgY2xrX21hdGNoZXMsICZtYXRjaCkgewotCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmZnJlcSkpCisJZm9yX2VhY2hfbWF0Y2hpbmdfbm9kZV9hbmRfbWF0Y2goY2xrX25wLCBjbGtfbWF0Y2hlcywgJm1hdGNoKSB7CisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjbGtfbnAsICJjbG9jay1mcmVxdWVuY3kiLCAmZnJlcSkpCiAJCQljb250aW51ZTsKLQkJZml4ZWRfcmF0ZV9jbGtbKHUzMiltYXRjaC0+ZGF0YV0uZml4ZWRfcmF0ZSA9IGZyZXE7CisJCWZpeGVkX3JhdGVfY2xrWyh1bnNpZ25lZCBsb25nKW1hdGNoLT5kYXRhXS5maXhlZF9yYXRlID0gZnJlcTsKIAl9Ci0Jc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShmaXhlZF9yYXRlX2NsaywgbnJfZml4ZWRfcmF0ZV9jbGspOworCXNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY3R4LCBmaXhlZF9yYXRlX2NsaywgbnJfZml4ZWRfcmF0ZV9jbGspOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmggYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay5oCmluZGV4IGM3MTQxYmEuLjk2OTNiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLmgKKysrIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGsuaApAQCAtMjIsNiArMjIsMTggQEAKICNpbmNsdWRlICJjbGstcGxsLmgiCiAKIC8qKgorICogc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyOiBpbmZvcm1hdGlvbiBhYm91dCBjbG9jayBwcm92aWRlcgorICogQHJlZ19iYXNlOiB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSByZWdpc3RlciBiYXNlLgorICogQGNsa19kYXRhOiBob2xkcyBjbG9jayByZWxhdGVkIGRhdGEgbGlrZSBjbGsqIGFuZCBudW1iZXIgb2YgY2xvY2tzLgorICogQGxvY2s6IG1haW50YWlucyBleGNsdXNpb24gYnd0d2VlbiBjYWxsYmFja3MgZm9yIGEgZ2l2ZW4gY2xvY2stcHJvdmlkZXIuCisgKi8KK3N0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciB7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSBjbGtfZGF0YTsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCisvKioKICAqIHN0cnVjdCBzYW1zdW5nX2Nsb2NrX2FsaWFzOiBpbmZvcm1hdGlvbiBhYm91dCBtdXggY2xvY2sKICAqIEBpZDogcGxhdGZvcm0gc3BlY2lmaWMgaWQgb2YgdGhlIGNsb2NrLgogICogQGRldl9uYW1lOiBuYW1lIG9mIHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhpcyBjbG9jayBiZWxvbmdzLgpAQCAtMzEyLDQwICszMjQsNTIgQEAKIAlfX1BMTChfdHlwLCBfaWQsIE5VTEwsIF9uYW1lLCBfcG5hbWUsIENMS19HRVRfUkFURV9OT0NBQ0hFLAlcCiAJCV9sb2NrLCBfY29uLCBfcnRhYmxlLCBfYWxpYXMpCiAKLWV4dGVybiB2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHZvaWQgX19pb21lbSAqYmFzZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBucl9jbGtzKTsKK2V4dGVybiBzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKl9faW5pdCBzYW1zdW5nX2Nsa19pbml0KAorCQkJc3RydWN0IGRldmljZV9ub2RlICpucCwgdm9pZCBfX2lvbWVtICpiYXNlLAorCQkJdW5zaWduZWQgbG9uZyBucl9jbGtzKTsKIGV4dGVybiB2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19vZl9yZWdpc3Rlcl9maXhlZF9leHQoCi0JCXN0cnVjdCBzYW1zdW5nX2ZpeGVkX3JhdGVfY2xvY2sgKmZpeGVkX3JhdGVfY2xrLAotCQl1bnNpZ25lZCBpbnQgbnJfZml4ZWRfcmF0ZV9jbGssCi0JCXN0cnVjdCBvZl9kZXZpY2VfaWQgKmNsa19tYXRjaGVzKTsKKwkJCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAorCQkJc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayAqZml4ZWRfcmF0ZV9jbGssCisJCQl1bnNpZ25lZCBpbnQgbnJfZml4ZWRfcmF0ZV9jbGssCisJCQlzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpjbGtfbWF0Y2hlcyk7CiAKLWV4dGVybiB2b2lkIHNhbXN1bmdfY2xrX2FkZF9sb29rdXAoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBpbnQgaWQpOworZXh0ZXJuIHZvaWQgc2Ftc3VuZ19jbGtfYWRkX2xvb2t1cChzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKKwkJCXN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IGlkKTsKIAotZXh0ZXJuIHZvaWQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoc3RydWN0IHNhbXN1bmdfY2xvY2tfYWxpYXMgKmxpc3QsCi0JCXVuc2lnbmVkIGludCBucl9jbGspOworZXh0ZXJuIHZvaWQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfYWxpYXMoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCisJCQlzdHJ1Y3Qgc2Ftc3VuZ19jbG9ja19hbGlhcyAqbGlzdCwKKwkJCXVuc2lnbmVkIGludCBucl9jbGspOwogZXh0ZXJuIHZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoCi0JCXN0cnVjdCBzYW1zdW5nX2ZpeGVkX3JhdGVfY2xvY2sgKmNsa19saXN0LCB1bnNpZ25lZCBpbnQgbnJfY2xrKTsKKwkJCXN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAorCQkJc3RydWN0IHNhbXN1bmdfZml4ZWRfcmF0ZV9jbG9jayAqY2xrX2xpc3QsCisJCQl1bnNpZ25lZCBpbnQgbnJfY2xrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoCi0JCXN0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayAqbGlzdCwgdW5zaWduZWQgaW50IG5yX2Nsayk7Ci1leHRlcm4gdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfbXV4KHN0cnVjdCBzYW1zdW5nX211eF9jbG9jayAqY2xrX2xpc3QsCi0JCXVuc2lnbmVkIGludCBucl9jbGspOwotZXh0ZXJuIHZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX2RpdihzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgKmNsa19saXN0LAotCQl1bnNpZ25lZCBpbnQgbnJfY2xrKTsKLWV4dGVybiB2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9nYXRlKAotCQlzdHJ1Y3Qgc2Ftc3VuZ19nYXRlX2Nsb2NrICpjbGtfbGlzdCwgdW5zaWduZWQgaW50IG5yX2Nsayk7Ci1leHRlcm4gdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCBzYW1zdW5nX3BsbF9jbG9jayAqcGxsX2xpc3QsCi0JCXVuc2lnbmVkIGludCBucl9jbGssIHZvaWQgX19pb21lbSAqYmFzZSk7CisJCQlzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKKwkJCXN0cnVjdCBzYW1zdW5nX2ZpeGVkX2ZhY3Rvcl9jbG9jayAqbGlzdCwKKwkJCXVuc2lnbmVkIGludCBucl9jbGspOworZXh0ZXJuIHZvaWQgX19pbml0IHNhbXN1bmdfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKKwkJCXN0cnVjdCBzYW1zdW5nX211eF9jbG9jayAqY2xrX2xpc3QsCisJCQl1bnNpZ25lZCBpbnQgbnJfY2xrKTsKK2V4dGVybiB2b2lkIF9faW5pdCBzYW1zdW5nX2Nsa19yZWdpc3Rlcl9kaXYoc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHgsCisJCQlzdHJ1Y3Qgc2Ftc3VuZ19kaXZfY2xvY2sgKmNsa19saXN0LAorCQkJdW5zaWduZWQgaW50IG5yX2Nsayk7CitleHRlcm4gdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfZ2F0ZShzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcHJvdmlkZXIgKmN0eCwKKwkJCXN0cnVjdCBzYW1zdW5nX2dhdGVfY2xvY2sgKmNsa19saXN0LAorCQkJdW5zaWduZWQgaW50IG5yX2Nsayk7CitleHRlcm4gdm9pZCBfX2luaXQgc2Ftc3VuZ19jbGtfcmVnaXN0ZXJfcGxsKHN0cnVjdCBzYW1zdW5nX2Nsa19wcm92aWRlciAqY3R4LAorCQkJc3RydWN0IHNhbXN1bmdfcGxsX2Nsb2NrICpwbGxfbGlzdCwKKwkJCXVuc2lnbmVkIGludCBucl9jbGssIHZvaWQgX19pb21lbSAqYmFzZSk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9nZXRfcmF0ZShjb25zdCBjaGFyICpjbGtfbmFtZSk7CiAKIGV4dGVybiB2b2lkIHNhbXN1bmdfY2xrX3NhdmUodm9pZCBfX2lvbWVtICpiYXNlLAotCQkJICAgICBzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcmVnX2R1bXAgKnJkLAotCQkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOworCQkJc3RydWN0IHNhbXN1bmdfY2xrX3JlZ19kdW1wICpyZCwKKwkJCXVuc2lnbmVkIGludCBudW1fcmVncyk7CiBleHRlcm4gdm9pZCBzYW1zdW5nX2Nsa19yZXN0b3JlKHZvaWQgX19pb21lbSAqYmFzZSwKLQkJCQljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcmVnX2R1bXAgKnJkLAotCQkJCXVuc2lnbmVkIGludCBudW1fcmVncyk7CisJCQljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcmVnX2R1bXAgKnJkLAorCQkJdW5zaWduZWQgaW50IG51bV9yZWdzKTsKIGV4dGVybiBzdHJ1Y3Qgc2Ftc3VuZ19jbGtfcmVnX2R1bXAgKnNhbXN1bmdfY2xrX2FsbG9jX3JlZ19kdW1wKAotCQkJCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqcmR1bXAsCi0JCQkJCQl1bnNpZ25lZCBsb25nIG5yX3JkdW1wKTsKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnJkdW1wLAorCQkJdW5zaWduZWQgbG9uZyBucl9yZHVtcCk7CiAKICNlbmRpZiAvKiBfX1NBTVNVTkdfQ0xLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RpL2Nsay00M3h4LmMgYi9kcml2ZXJzL2Nsay90aS9jbGstNDN4eC5jCmluZGV4IDY3YzhkZTUuLjUyN2E0M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3RpL2Nsay00M3h4LmMKKysrIGIvZHJpdmVycy9jbGsvdGkvY2xrLTQzeHguYwpAQCAtMTA1LDYgKzEwNSwxMiBAQAogCURUX0NMSyhOVUxMLCAiZnVuY18xMm1fY2xrIiwgImZ1bmNfMTJtX2NsayIpLAogCURUX0NMSyhOVUxMLCAidnRwX2Nsa19kaXYiLCAidnRwX2Nsa19kaXYiKSwKIAlEVF9DTEsoTlVMTCwgInVzYnBoeV8zMmtoel9jbGttdXgiLCAidXNicGh5XzMya2h6X2Nsa211eCIpLAorCURUX0NMSygiNDgzMDAyMDAuZWhycHdtIiwgInRiY2xrIiwgImVocnB3bTBfdGJjbGsiKSwKKwlEVF9DTEsoIjQ4MzAyMjAwLmVocnB3bSIsICJ0YmNsayIsICJlaHJwd20xX3RiY2xrIiksCisJRFRfQ0xLKCI0ODMwNDIwMC5laHJwd20iLCAidGJjbGsiLCAiZWhycHdtMl90YmNsayIpLAorCURUX0NMSygiNDgzMDYyMDAuZWhycHdtIiwgInRiY2xrIiwgImVocnB3bTNfdGJjbGsiKSwKKwlEVF9DTEsoIjQ4MzA4MjAwLmVocnB3bSIsICJ0YmNsayIsICJlaHJwd200X3RiY2xrIiksCisJRFRfQ0xLKCI0ODMwYTIwMC5laHJwd20iLCAidGJjbGsiLCAiZWhycHdtNV90YmNsayIpLAogCXsgLm5vZGVfbmFtZSA9IE5VTEwgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9LY29uZmlnIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzMGM5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9LY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKK2NvbmZpZyBDT01NT05fQ0xLX1ZFUlNBVElMRQorCWJvb2wgIkNsb2NrIGRyaXZlciBmb3IgQVJNIFJlZmVyZW5jZSBkZXNpZ25zIgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfUkVBTFZJRVcgfHwgQVJDSF9WRVhQUkVTUyB8fCBBUk02NAorCS0tLWhlbHAtLS0KKyAgICAgICAgICBTdXBwb3J0cyBjbG9ja2luZyBvbiBBUk0gUmVmZXJlbmNlIGRlc2lnbnM6CisJICAtIEludGVncmF0b3IvQVAgYW5kIEludGVncmF0b3IvQ1AKKwkgIC0gUmVhbFZpZXcgUEIxMTc2LCBFQiwgUEIxMU1QIGFuZCBQQlgKKwkgIC0gVmVyc2F0aWxlIEV4cHJlc3MKKworY29uZmlnIENMS19TUDgxMAorCWJvb2wgIkNsb2NrIGRyaXZlciBmb3IgQVJNIFNQODEwIFN5c3RlbSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gQ09NTU9OX0NMS19WRVJTQVRJTEUKKwlkZWZhdWx0IHkgaWYgQVJDSF9WRVhQUkVTUworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnRzIGNsb2NrIG11eGluZyAoUkVGQ0xLL1RJTUNMSyB0byBUSU1FUkNMS0VOMC0zKSBjYXBhYmlsaXRpZXMKKwkgIG9mIHRoZSBBUk0gU1A4MTAgU3lzdGVtIENvbnRyb2xsZXIgY2VsbC4KKworY29uZmlnIENMS19WRVhQUkVTU19PU0MKKwlib29sICJDbG9jayBkcml2ZXIgZm9yIFZlcnNhdGlsZSBFeHByZXNzIE9TQyBjbG9jayBnZW5lcmF0b3JzIgorCWRlcGVuZHMgb24gQ09NTU9OX0NMS19WRVJTQVRJTEUKKwlkZXBlbmRzIG9uIFZFWFBSRVNTX0NPTkZJRworCWRlZmF1bHQgeSBpZiBBUkNIX1ZFWFBSRVNTCisJLS0taGVscC0tLQorCSAgU2ltcGxlIHJlZ21hcC1iYXNlZCBkcml2ZXIgZHJpdmluZyBjbG9jayBnZW5lcmF0b3JzIG9uIFZlcnNhdGlsZQorCSAgRXhwcmVzcyBwbGF0Zm9ybXMgaGlkZGVuIGJlaGluZCBpdHMgY29uZmlndXJhdGlvbiBpbmZyYXN0cnVjdHVyZSwKKwkgIGNvbW1vbmx5IGtub3duIGFzIE9TQ3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvTWFrZWZpbGUKaW5kZXggYzE2Y2E3OC4uZmQ0NDlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9NYWtlZmlsZQpAQCAtMyw1ICszLDYgQEAKIG9iai0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpCSs9IGNsay1pbnRlZ3JhdG9yLm8KIG9iai0kKENPTkZJR19JTlRFR1JBVE9SX0lNUEQxKQkrPSBjbGstaW1wZDEubwogb2JqLSQoQ09ORklHX0FSQ0hfUkVBTFZJRVcpCSs9IGNsay1yZWFsdmlldy5vCi1vYmotJChDT05GSUdfQVJDSF9WRVhQUkVTUykJKz0gY2xrLXZleHByZXNzLm8gY2xrLXNwODEwLm8KLW9iai0kKENPTkZJR19WRVhQUkVTU19DT05GSUcpCSs9IGNsay12ZXhwcmVzcy1vc2Mubworb2JqLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1MpCSs9IGNsay12ZXhwcmVzcy5vCitvYmotJChDT05GSUdfQ0xLX1NQODEwKQkJKz0gY2xrLXNwODEwLm8KK29iai0kKENPTkZJR19DTEtfVkVYUFJFU1NfT1NDKQkrPSBjbGstdmV4cHJlc3Mtb3NjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCmluZGV4IDQyMjM5MTIuLjUyOWE1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMKKysrIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYwpAQCAtMTEsOCArMTEsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMaW1pdGVkCiAgKi8KIAotI2RlZmluZSBwcl9mbXQoZm10KSAidmV4cHJlc3Mtb3NjOiAiIGZtdAotCiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0yMiw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdmV4cHJlc3MuaD4KIAogc3RydWN0IHZleHByZXNzX29zYyB7Ci0Jc3RydWN0IHZleHByZXNzX2NvbmZpZ19mdW5jICpmdW5jOworCXN0cnVjdCByZWdtYXAgKnJlZzsKIAlzdHJ1Y3QgY2xrX2h3IGh3OwogCXVuc2lnbmVkIGxvbmcgcmF0ZV9taW47CiAJdW5zaWduZWQgbG9uZyByYXRlX21heDsKQEAgLTM2LDcgKzM0LDcgQEAKIAlzdHJ1Y3QgdmV4cHJlc3Nfb3NjICpvc2MgPSB0b192ZXhwcmVzc19vc2MoaHcpOwogCXUzMiByYXRlOwogCi0JdmV4cHJlc3NfY29uZmlnX3JlYWQob3NjLT5mdW5jLCAwLCAmcmF0ZSk7CisJcmVnbWFwX3JlYWQob3NjLT5yZWcsIDAsICZyYXRlKTsKIAogCXJldHVybiByYXRlOwogfQpAQCAtNjAsNyArNTgsNyBAQAogewogCXN0cnVjdCB2ZXhwcmVzc19vc2MgKm9zYyA9IHRvX3ZleHByZXNzX29zYyhodyk7CiAKLQlyZXR1cm4gdmV4cHJlc3NfY29uZmlnX3dyaXRlKG9zYy0+ZnVuYywgMCwgcmF0ZSk7CisJcmV0dXJuIHJlZ21hcF93cml0ZShvc2MtPnJlZywgMCwgcmF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyB2ZXhwcmVzc19vc2Nfb3BzID0gewpAQCAtNzAsNTggKzY4LDMxIEBACiB9OwogCiAKLXN0cnVjdCBjbGsgKiBfX2luaXQgdmV4cHJlc3Nfb3NjX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdmV4cHJlc3Nfb3NjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKLQlzdHJ1Y3QgdmV4cHJlc3Nfb3NjICpvc2MgPSBremFsbG9jKHNpemVvZigqb3NjKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIW9zYykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlvc2MtPmZ1bmMgPSB2ZXhwcmVzc19jb25maWdfZnVuY19nZXRfYnlfZGV2KGRldik7Ci0JaWYgKCFvc2MtPmZ1bmMpIHsKLQkJa2ZyZWUob3NjKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaW5pdC5uYW1lID0gZGV2X25hbWUoZGV2KTsKLQlpbml0Lm9wcyA9ICZ2ZXhwcmVzc19vc2Nfb3BzOwotCWluaXQuZmxhZ3MgPSBDTEtfSVNfUk9PVDsKLQlpbml0Lm51bV9wYXJlbnRzID0gMDsKLQlvc2MtPmh3LmluaXQgPSAmaW5pdDsKLQotCXJldHVybiBjbGtfcmVnaXN0ZXIoTlVMTCwgJm9zYy0+aHcpOwotfQotCi12b2lkIF9faW5pdCB2ZXhwcmVzc19vc2Nfb2Zfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoteworCXN0cnVjdCBjbGtfbG9va3VwICpjbCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOyAvKiBOb24tRFQgbG9va3VwICovCiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAlzdHJ1Y3QgdmV4cHJlc3Nfb3NjICpvc2M7CiAJc3RydWN0IGNsayAqY2xrOwogCXUzMiByYW5nZVsyXTsKIAotCXZleHByZXNzX3N5c3JlZ19vZl9lYXJseV9pbml0KCk7Ci0KLQlvc2MgPSBremFsbG9jKHNpemVvZigqb3NjKSwgR0ZQX0tFUk5FTCk7CisJb3NjID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqb3NjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvc2MpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlvc2MtPmZ1bmMgPSB2ZXhwcmVzc19jb25maWdfZnVuY19nZXRfYnlfbm9kZShub2RlKTsKLQlpZiAoIW9zYy0+ZnVuYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBvYnRhaW4gY29uZmlnIGZ1bmMgZm9yIG5vZGUgJyVzJyFcbiIsCi0JCQkJbm9kZS0+ZnVsbF9uYW1lKTsKLQkJZ290byBlcnJvcjsKLQl9CisJb3NjLT5yZWcgPSBkZXZtX3JlZ21hcF9pbml0X3ZleHByZXNzX2NvbmZpZygmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKG9zYy0+cmVnKSkKKwkJcmV0dXJuIFBUUl9FUlIob3NjLT5yZWcpOwogCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5vZGUsICJmcmVxLXJhbmdlIiwgcmFuZ2UsCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KHBkZXYtPmRldi5vZl9ub2RlLCAiZnJlcS1yYW5nZSIsIHJhbmdlLAogCQkJQVJSQVlfU0laRShyYW5nZSkpID09IDApIHsKIAkJb3NjLT5yYXRlX21pbiA9IHJhbmdlWzBdOwogCQlvc2MtPnJhdGVfbWF4ID0gcmFuZ2VbMV07CiAJfQogCi0Jb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsICZpbml0Lm5hbWUpOwotCWlmICghaW5pdC5uYW1lKQotCQlpbml0Lm5hbWUgPSBub2RlLT5mdWxsX25hbWU7CisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHBkZXYtPmRldi5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJCSZpbml0Lm5hbWUpICE9IDApCisJCWluaXQubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCiAJaW5pdC5vcHMgPSAmdmV4cHJlc3Nfb3NjX29wczsKIAlpbml0LmZsYWdzID0gQ0xLX0lTX1JPT1Q7CkBAIC0xMzAsMjAgKzEwMSwzNyBAQAogCW9zYy0+aHcuaW5pdCA9ICZpbml0OwogCiAJY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZvc2MtPmh3KTsKLQlpZiAoSVNfRVJSKGNsaykpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJyVzJyFcbiIsIGluaXQubmFtZSk7Ci0JCWdvdG8gZXJyb3I7CisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm4gUFRSX0VSUihjbGspOworCisJb2ZfY2xrX2FkZF9wcm92aWRlcihwZGV2LT5kZXYub2Zfbm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBjbGspOworCisJLyogT25seSBoYXBwZW5zIGZvciBub24tRFQgY2FzZXMgKi8KKwlpZiAoY2wpIHsKKwkJY2wtPmNsayA9IGNsazsKKwkJY2xrZGV2X2FkZChjbCk7CiAJfQogCi0Jb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVnaXN0ZXJlZCBjbG9jayAnJXMnXG4iLCBpbml0Lm5hbWUpOwogCi0JcHJfZGVidWcoIlJlZ2lzdGVyZWQgY2xvY2sgJyVzJ1xuIiwgaW5pdC5uYW1lKTsKLQotCXJldHVybjsKLQotZXJyb3I6Ci0JaWYgKG9zYy0+ZnVuYykKLQkJdmV4cHJlc3NfY29uZmlnX2Z1bmNfcHV0KG9zYy0+ZnVuYyk7Ci0Ja2ZyZWUob3NjKTsKKwlyZXR1cm4gMDsKIH0KLUNMS19PRl9ERUNMQVJFKHZleHByZXNzX3NvYywgImFybSx2ZXhwcmVzcy1vc2MiLCB2ZXhwcmVzc19vc2Nfb2Zfc2V0dXApOworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB2ZXhwcmVzc19vc2Nfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1vc2MiLCB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZXhwcmVzc19vc2NfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gInZleHByZXNzLW9zYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZleHByZXNzX29zY19vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHZleHByZXNzX29zY19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZleHByZXNzX29zY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmV4cHJlc3Nfb3NjX2RyaXZlcik7Cit9Citjb3JlX2luaXRjYWxsKHZleHByZXNzX29zY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwppbmRleCA5NjkxOGUxLi40M2YxYWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCkBAIC0xOTEsMyArMTkxLDE0IEBACiAKIGNvbmZpZyBDTEtTUkNfUUNPTQogCWJvb2wKKworY29uZmlnIENMS1NSQ19WRVJTQVRJTEUKKwlib29sICJBUk0gVmVyc2F0aWxlIChFeHByZXNzKSByZWZlcmVuY2UgcGxhdGZvcm1zIGNsb2NrIHNvdXJjZSIKKwlkZXBlbmRzIG9uIEdFTkVSSUNfU0NIRURfQ0xPQ0sgJiYgIUFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJc2VsZWN0IENMS1NSQ19PRgorCWRlZmF1bHQgeSBpZiBNRkRfVkVYUFJFU1NfU1lTUkVHCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBjbG9jayBzb3VyY2UgYmFzZWQgb24gZnJlZSBydW5uaW5nCisJICBjb3VudGVyIGF2YWlsYWJsZSBpbiB0aGUgIlN5c3RlbSBSZWdpc3RlcnMiIGJsb2NrIG9mCisJICBBUk0gVmVyc2F0aWxlLCBSZWFsVmlldyBhbmQgVmVyc2F0aWxlIEV4cHJlc3MgcmVmZXJlbmNlCisJICBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQppbmRleCA5OGNiNmM1Li42ZjI1YmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKQEAgLTM5LDMgKzM5LDQgQEAKIG9iai0kKENPTkZJR19DTEtTUkNfTUVUQUdfR0VORVJJQykJKz0gbWV0YWdfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQVJDSF9IQVNfVElDS19CUk9BRENBU1QpCSs9IGR1bW15X3RpbWVyLm8KIG9iai0kKENPTkZJR19BUkNIX0tFWVNUT05FKQkJKz0gdGltZXIta2V5c3RvbmUubworb2JqLSQoQ09ORklHX0NMS1NSQ19WRVJTQVRJTEUpCQkrPSB2ZXJzYXRpbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jYWRlbmNlX3R0Y190aW1lci5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9jYWRlbmNlX3R0Y190aW1lci5jCmluZGV4IDQ5ZmJlMjguLjdhMDg4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvY2FkZW5jZV90dGNfdGltZXIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2NhZGVuY2VfdHRjX3RpbWVyLmMKQEAgLTExOCwxMSArMTE4LDExIEBACiAJdTMyIGN0cmxfcmVnOwogCiAJLyogRGlzYWJsZSB0aGUgY291bnRlciwgc2V0IHRoZSBjb3VudGVyIHZhbHVlICBhbmQgcmUtZW5hYmxlIGNvdW50ZXIgKi8KLQljdHJsX3JlZyA9IF9fcmF3X3JlYWRsKHRpbWVyLT5iYXNlX2FkZHIgKyBUVENfQ05UX0NOVFJMX09GRlNFVCk7CisJY3RybF9yZWcgPSByZWFkbF9yZWxheGVkKHRpbWVyLT5iYXNlX2FkZHIgKyBUVENfQ05UX0NOVFJMX09GRlNFVCk7CiAJY3RybF9yZWcgfD0gVFRDX0NOVF9DTlRSTF9ESVNBQkxFX01BU0s7Ci0JX19yYXdfd3JpdGVsKGN0cmxfcmVnLCB0aW1lci0+YmFzZV9hZGRyICsgVFRDX0NOVF9DTlRSTF9PRkZTRVQpOworCXdyaXRlbF9yZWxheGVkKGN0cmxfcmVnLCB0aW1lci0+YmFzZV9hZGRyICsgVFRDX0NOVF9DTlRSTF9PRkZTRVQpOwogCi0JX19yYXdfd3JpdGVsKGN5Y2xlcywgdGltZXItPmJhc2VfYWRkciArIFRUQ19JTlRSX1ZBTF9PRkZTRVQpOworCXdyaXRlbF9yZWxheGVkKGN5Y2xlcywgdGltZXItPmJhc2VfYWRkciArIFRUQ19JTlRSX1ZBTF9PRkZTRVQpOwogCiAJLyoKIAkgKiBSZXNldCB0aGUgY291bnRlciAoMHgxMCkgc28gdGhhdCBpdCBzdGFydHMgZnJvbSAwLCBvbmUtc2hvdApAQCAtMTMwLDcgKzEzMCw3IEBACiAJICovCiAJY3RybF9yZWcgfD0gQ05UX0NOVFJMX1JFU0VUOwogCWN0cmxfcmVnICY9IH5UVENfQ05UX0NOVFJMX0RJU0FCTEVfTUFTSzsKLQlfX3Jhd193cml0ZWwoY3RybF9yZWcsIHRpbWVyLT5iYXNlX2FkZHIgKyBUVENfQ05UX0NOVFJMX09GRlNFVCk7CisJd3JpdGVsX3JlbGF4ZWQoY3RybF9yZWcsIHRpbWVyLT5iYXNlX2FkZHIgKyBUVENfQ05UX0NOVFJMX09GRlNFVCk7CiB9CiAKIC8qKgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJc3RydWN0IHR0Y190aW1lciAqdGltZXIgPSAmdHRjZS0+dHRjOwogCiAJLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBhbmQgY2FsbCBldmVudCBoYW5kbGVyICovCi0JX19yYXdfcmVhZGwodGltZXItPmJhc2VfYWRkciArIFRUQ19JU1JfT0ZGU0VUKTsKKwlyZWFkbF9yZWxheGVkKHRpbWVyLT5iYXNlX2FkZHIgKyBUVENfSVNSX09GRlNFVCk7CiAKIAl0dGNlLT5jZS5ldmVudF9oYW5kbGVyKCZ0dGNlLT5jZSk7CiAKQEAgLTE2MywxMyArMTYzLDEzIEBACiB7CiAJc3RydWN0IHR0Y190aW1lciAqdGltZXIgPSAmdG9fdHRjX3RpbWVyX2Nsa3NyYyhjcyktPnR0YzsKIAotCXJldHVybiAoY3ljbGVfdClfX3Jhd19yZWFkbCh0aW1lci0+YmFzZV9hZGRyICsKKwlyZXR1cm4gKGN5Y2xlX3QpcmVhZGxfcmVsYXhlZCh0aW1lci0+YmFzZV9hZGRyICsKIAkJCQlUVENfQ09VTlRfVkFMX09GRlNFVCk7CiB9CiAKIHN0YXRpYyB1NjQgbm90cmFjZSB0dGNfc2NoZWRfY2xvY2tfcmVhZCh2b2lkKQogewotCXJldHVybiBfX3Jhd19yZWFkbCh0dGNfc2NoZWRfY2xvY2tfdmFsX3JlZyk7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQodHRjX3NjaGVkX2Nsb2NrX3ZhbF9yZWcpOwogfQogCiAvKioKQEAgLTIxMSwxNyArMjExLDE3IEBACiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JCWN0cmxfcmVnID0gX19yYXdfcmVhZGwodGltZXItPmJhc2VfYWRkciArCisJCWN0cmxfcmVnID0gcmVhZGxfcmVsYXhlZCh0aW1lci0+YmFzZV9hZGRyICsKIAkJCQkJVFRDX0NOVF9DTlRSTF9PRkZTRVQpOwogCQljdHJsX3JlZyB8PSBUVENfQ05UX0NOVFJMX0RJU0FCTEVfTUFTSzsKLQkJX19yYXdfd3JpdGVsKGN0cmxfcmVnLAorCQl3cml0ZWxfcmVsYXhlZChjdHJsX3JlZywKIAkJCQl0aW1lci0+YmFzZV9hZGRyICsgVFRDX0NOVF9DTlRSTF9PRkZTRVQpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJY3RybF9yZWcgPSBfX3Jhd19yZWFkbCh0aW1lci0+YmFzZV9hZGRyICsKKwkJY3RybF9yZWcgPSByZWFkbF9yZWxheGVkKHRpbWVyLT5iYXNlX2FkZHIgKwogCQkJCQlUVENfQ05UX0NOVFJMX09GRlNFVCk7CiAJCWN0cmxfcmVnICY9IH5UVENfQ05UX0NOVFJMX0RJU0FCTEVfTUFTSzsKLQkJX19yYXdfd3JpdGVsKGN0cmxfcmVnLAorCQl3cml0ZWxfcmVsYXhlZChjdHJsX3JlZywKIAkJCQl0aW1lci0+YmFzZV9hZGRyICsgVFRDX0NOVF9DTlRSTF9PRkZTRVQpOwogCQlicmVhazsKIAl9CkBAIC0yNjYsOCArMjY2LDggQEAKIAkJICogb2YgYW4gYWJvcnQuCiAJCSAqLwogCQl0dGNjcy0+c2NhbGVfY2xrX2N0cmxfcmVnX29sZCA9Ci0JCQlfX3Jhd19yZWFkbCh0dGNjcy0+dHRjLmJhc2VfYWRkciArCi0JCQkJCVRUQ19DTEtfQ05UUkxfT0ZGU0VUKTsKKwkJCXJlYWRsX3JlbGF4ZWQodHRjY3MtPnR0Yy5iYXNlX2FkZHIgKworCQkJVFRDX0NMS19DTlRSTF9PRkZTRVQpOwogCiAJCXBzdiA9ICh0dGNjcy0+c2NhbGVfY2xrX2N0cmxfcmVnX29sZCAmCiAJCQkJVFRDX0NMS19DTlRSTF9QU1ZfTUFTSykgPj4KQEAgLTI5MSw4ICsyOTEsOCBAQAogCQkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJCS8qIHNjYWxlIHVwOiBhZGp1c3QgZGl2aWRlciBub3cgLSBiZWZvcmUgZnJlcXVlbmN5IGNoYW5nZSAqLwotCQlfX3Jhd193cml0ZWwodHRjY3MtPnNjYWxlX2Nsa19jdHJsX3JlZ19uZXcsCi0JCQkJdHRjY3MtPnR0Yy5iYXNlX2FkZHIgKyBUVENfQ0xLX0NOVFJMX09GRlNFVCk7CisJCXdyaXRlbF9yZWxheGVkKHR0Y2NzLT5zY2FsZV9jbGtfY3RybF9yZWdfbmV3LAorCQkJICAgICAgIHR0Y2NzLT50dGMuYmFzZV9hZGRyICsgVFRDX0NMS19DTlRSTF9PRkZTRVQpOwogCQlicmVhazsKIAl9CiAJY2FzZSBQT1NUX1JBVEVfQ0hBTkdFOgpAQCAtMzAxLDggKzMwMSw4IEBACiAJCQlyZXR1cm4gTk9USUZZX09LOwogCiAJCS8qIHNjYWxlIGRvd246IGFkanVzdCBkaXZpZGVyIG5vdyAtIGFmdGVyIGZyZXF1ZW5jeSBjaGFuZ2UgKi8KLQkJX19yYXdfd3JpdGVsKHR0Y2NzLT5zY2FsZV9jbGtfY3RybF9yZWdfbmV3LAotCQkJCXR0Y2NzLT50dGMuYmFzZV9hZGRyICsgVFRDX0NMS19DTlRSTF9PRkZTRVQpOworCQl3cml0ZWxfcmVsYXhlZCh0dGNjcy0+c2NhbGVfY2xrX2N0cmxfcmVnX25ldywKKwkJCSAgICAgICB0dGNjcy0+dHRjLmJhc2VfYWRkciArIFRUQ19DTEtfQ05UUkxfT0ZGU0VUKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFCT1JUX1JBVEVfQ0hBTkdFOgpAQCAtMzExLDggKzMxMSw4IEBACiAJCQlyZXR1cm4gTk9USUZZX09LOwogCiAJCS8qIHJlc3RvcmUgb3JpZ2luYWwgcmVnaXN0ZXIgdmFsdWUgKi8KLQkJX19yYXdfd3JpdGVsKHR0Y2NzLT5zY2FsZV9jbGtfY3RybF9yZWdfb2xkLAotCQkJCXR0Y2NzLT50dGMuYmFzZV9hZGRyICsgVFRDX0NMS19DTlRSTF9PRkZTRVQpOworCQl3cml0ZWxfcmVsYXhlZCh0dGNjcy0+c2NhbGVfY2xrX2N0cmxfcmVnX29sZCwKKwkJCSAgICAgICB0dGNjcy0+dHRjLmJhc2VfYWRkciArIFRUQ19DTEtfQ05UUkxfT0ZGU0VUKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtMzU5LDEwICszNTksMTAgQEAKIAkgKiB3aXRoIG5vIGludGVycnVwdCBhbmQgaXQgcm9sbHMgb3ZlciBhdCAweEZGRkYuIFByZS1zY2FsZQogCSAqIGl0IGJ5IDMyIGFsc28uIExldCBpdCBzdGFydCBydW5uaW5nIG5vdy4KIAkgKi8KLQlfX3Jhd193cml0ZWwoMHgwLCAgdHRjY3MtPnR0Yy5iYXNlX2FkZHIgKyBUVENfSUVSX09GRlNFVCk7Ci0JX19yYXdfd3JpdGVsKENMS19DTlRSTF9QUkVTQ0FMRSB8IENMS19DTlRSTF9QUkVTQ0FMRV9FTiwKKwl3cml0ZWxfcmVsYXhlZCgweDAsICB0dGNjcy0+dHRjLmJhc2VfYWRkciArIFRUQ19JRVJfT0ZGU0VUKTsKKwl3cml0ZWxfcmVsYXhlZChDTEtfQ05UUkxfUFJFU0NBTEUgfCBDTEtfQ05UUkxfUFJFU0NBTEVfRU4sCiAJCSAgICAgdHRjY3MtPnR0Yy5iYXNlX2FkZHIgKyBUVENfQ0xLX0NOVFJMX09GRlNFVCk7Ci0JX19yYXdfd3JpdGVsKENOVF9DTlRSTF9SRVNFVCwKKwl3cml0ZWxfcmVsYXhlZChDTlRfQ05UUkxfUkVTRVQsCiAJCSAgICAgdHRjY3MtPnR0Yy5iYXNlX2FkZHIgKyBUVENfQ05UX0NOVFJMX09GRlNFVCk7CiAKIAllcnIgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmdHRjY3MtPmNzLCB0dGNjcy0+dHRjLmZyZXEgLyBQUkVTQ0FMRSk7CkBAIC00MzgsMTAgKzQzOCwxMCBAQAogCSAqIGlzIHByZXNjYWxlZCBieSAzMiB1c2luZyB0aGUgaW50ZXJ2YWwgaW50ZXJydXB0LiBMZWF2ZSBpdAogCSAqIGRpc2FibGVkIGZvciBub3cuCiAJICovCi0JX19yYXdfd3JpdGVsKDB4MjMsIHR0Y2NlLT50dGMuYmFzZV9hZGRyICsgVFRDX0NOVF9DTlRSTF9PRkZTRVQpOwotCV9fcmF3X3dyaXRlbChDTEtfQ05UUkxfUFJFU0NBTEUgfCBDTEtfQ05UUkxfUFJFU0NBTEVfRU4sCisJd3JpdGVsX3JlbGF4ZWQoMHgyMywgdHRjY2UtPnR0Yy5iYXNlX2FkZHIgKyBUVENfQ05UX0NOVFJMX09GRlNFVCk7CisJd3JpdGVsX3JlbGF4ZWQoQ0xLX0NOVFJMX1BSRVNDQUxFIHwgQ0xLX0NOVFJMX1BSRVNDQUxFX0VOLAogCQkgICAgIHR0Y2NlLT50dGMuYmFzZV9hZGRyICsgVFRDX0NMS19DTlRSTF9PRkZTRVQpOwotCV9fcmF3X3dyaXRlbCgweDEsICB0dGNjZS0+dHRjLmJhc2VfYWRkciArIFRUQ19JRVJfT0ZGU0VUKTsKKwl3cml0ZWxfcmVsYXhlZCgweDEsICB0dGNjZS0+dHRjLmJhc2VfYWRkciArIFRUQ19JRVJfT0ZGU0VUKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgdHRjX2Nsb2NrX2V2ZW50X2ludGVycnVwdCwKIAkJCSAgSVJRRl9USU1FUiwgdHRjY2UtPmNlLm5hbWUsIHR0Y2NlKTsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQlCVUcoKTsKIAl9CiAKLQljbGtzZWwgPSBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlYWRkciArIFRUQ19DTEtfQ05UUkxfT0ZGU0VUKTsKKwljbGtzZWwgPSByZWFkbF9yZWxheGVkKHRpbWVyX2Jhc2VhZGRyICsgVFRDX0NMS19DTlRSTF9PRkZTRVQpOwogCWNsa3NlbCA9ICEhKGNsa3NlbCAmIFRUQ19DTEtfQ05UUkxfQ1NSQ19NQVNLKTsKIAljbGtfY3MgPSBvZl9jbGtfZ2V0KHRpbWVyLCBjbGtzZWwpOwogCWlmIChJU19FUlIoY2xrX2NzKSkgewpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCUJVRygpOwogCX0KIAotCWNsa3NlbCA9IF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2VhZGRyICsgNCArIFRUQ19DTEtfQ05UUkxfT0ZGU0VUKTsKKwljbGtzZWwgPSByZWFkbF9yZWxheGVkKHRpbWVyX2Jhc2VhZGRyICsgNCArIFRUQ19DTEtfQ05UUkxfT0ZGU0VUKTsKIAljbGtzZWwgPSAhIShjbGtzZWwgJiBUVENfQ0xLX0NOVFJMX0NTUkNfTUFTSyk7CiAJY2xrX2NlID0gb2ZfY2xrX2dldCh0aW1lciwgY2xrc2VsKTsKIAlpZiAoSVNfRVJSKGNsa19jZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvZXh5bm9zX21jdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9leHlub3NfbWN0LmMKaW5kZXggYWNmNWEzMi4uOGQ2NDIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9leHlub3NfbWN0LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9leHlub3NfbWN0LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgogCiAjZGVmaW5lIEVYWU5PUzRfTUNUUkVHKHgpCQkoeCkKICNkZWZpbmUgRVhZTk9TNF9NQ1RfR19DTlRfTAkJRVhZTk9TNF9NQ1RSRUcoMHgxMDApCkBAIC0xOTIsMTIgKzE5MywxOSBAQAogCS5yZXN1bWUJCT0gZXh5bm9zNF9mcmNfcmVzdW1lLAogfTsKIAorc3RhdGljIHU2NCBub3RyYWNlIGV4eW5vczRfcmVhZF9zY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBleHlub3M0X2ZyY19yZWFkKCZtY3RfZnJjKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGV4eW5vczRfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewogCWV4eW5vczRfbWN0X2ZyY19zdGFydCgwLCAwKTsKIAogCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmbWN0X2ZyYywgY2xrX3JhdGUpKQogCQlwYW5pYygiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlXG4iLCBtY3RfZnJjLm5hbWUpOworCisJc2NoZWRfY2xvY2tfcmVnaXN0ZXIoZXh5bm9zNF9yZWFkX3NjaGVkX2Nsb2NrLCA2NCwgY2xrX3JhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBleHlub3M0X21jdF9jb21wMF9zdG9wKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwppbmRleCAwYjE4MzZhLi5iYzhkMDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKQEAgLTExLDUwICsxMSw3MSBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLXN0cnVjdCBzaF9jbXRfcHJpdiB7Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlOwotCXZvaWQgX19pb21lbSAqbWFwYmFzZV9zdHI7Ci0Jc3RydWN0IGNsayAqY2xrOworc3RydWN0IHNoX2NtdF9kZXZpY2U7CisKKy8qCisgKiBUaGUgQ01UIGNvbWVzIGluIDUgZGlmZmVyZW50IGlkZW50aWZpZWQgZmxhdm91cnMsIGRlcGVuZGluZyBub3Qgb25seSBvbiB0aGUKKyAqIFNvQyBidXQgYWxzbyBvbiB0aGUgcGFydGljdWxhciBpbnN0YW5jZS4gVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgbWFpbgorICogY2hhcmFjdGVyaXN0aWNzIG9mIHRob3NlIGZsYXZvdXJzLgorICoKKyAqCQkJMTZCCTMyQgkzMkItRgk0OEIJNDhCLTIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDaGFubmVscwkJMgkxLzQJMQk2CTIvOAorICogQ29udHJvbCBXaWR0aAkxNgkxNgkxNgkxNgkzMgorICogQ291bnRlciBXaWR0aAkxNgkzMgkzMgkzMi80OAkzMi80OAorICogU2hhcmVkIFN0YXJ0L1N0b3AJWQlZCVkJWQlOCisgKgorICogVGhlIDQ4LWJpdCBnZW4yIHZlcnNpb24gaGFzIGEgcGVyLWNoYW5uZWwgc3RhcnQvc3RvcCByZWdpc3RlciBsb2NhdGVkIGluIHRoZQorICogY2hhbm5lbCByZWdpc3RlcnMgYmxvY2suIEFsbCBvdGhlciB2ZXJzaW9ucyBoYXZlIGEgc2hhcmVkIHN0YXJ0L3N0b3AgcmVnaXN0ZXIKKyAqIGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzcGFjZS4KKyAqCisgKiBDaGFubmVscyBhcmUgaW5kZXhlZCBmcm9tIDAgdG8gTi0xIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgY2hhbm5lbCBpbmRleAorICogaW5mZXJzIHRoZSBzdGFydC9zdG9wIGJpdCBwb3NpdGlvbiBpbiB0aGUgY29udHJvbCByZWdpc3RlciBhbmQgdGhlIGNoYW5uZWwKKyAqIHJlZ2lzdGVycyBibG9jayBhZGRyZXNzLiBTb21lIENNVCBpbnN0YW5jZXMgaGF2ZSBhIHN1YnNldCBvZiBjaGFubmVscworICogYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHRoZSBpbmRleCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IG1hdGNoIHRoZQorICogInJlYWwiIGluZGV4IGFzIGltcGxlbWVudGVkIGluIGhhcmR3YXJlLiBUaGlzIGlzIGZvciBpbnN0YW5jZSB0aGUgY2FzZSB3aXRoCisgKiBDTVQwIG9uIHI4YTc3NDAsIHdoaWNoIGlzIGEgMzItYml0IHZhcmlhbnQgd2l0aCBhIHNpbmdsZSBjaGFubmVsIG51bWJlcmVkIDAKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGJ1dCB1c2luZyBzdGFydC9zdG9wIGJpdCA1IGFuZCBoYXZpbmcgaXRzIHJlZ2lzdGVycworICogYmxvY2sgYXQgMHg2MC4KKyAqCisgKiBTaW1pbGFybHkgQ01UMCBvbiByOGE3M2E0LCByOGE3NzkwIGFuZCByOGE3NzkxLCB3aGlsZSBpbXBsZW1lbnRpbmcgMzItYml0CisgKiBjaGFubmVscyBvbmx5LCBpcyBhIDQ4LWJpdCBnZW4yIENNVCB3aXRoIHRoZSA0OC1iaXQgY2hhbm5lbHMgdW5hdmFpbGFibGUuCisgKi8KKworZW51bSBzaF9jbXRfbW9kZWwgeworCVNIX0NNVF8xNkJJVCwKKwlTSF9DTVRfMzJCSVQsCisJU0hfQ01UXzMyQklUX0ZBU1QsCisJU0hfQ01UXzQ4QklULAorCVNIX0NNVF80OEJJVF9HRU4yLAorfTsKKworc3RydWN0IHNoX2NtdF9pbmZvIHsKKwllbnVtIHNoX2NtdF9tb2RlbCBtb2RlbDsKKwogCXVuc2lnbmVkIGxvbmcgd2lkdGg7IC8qIDE2IG9yIDMyIGJpdCB2ZXJzaW9uIG9mIGhhcmR3YXJlIGJsb2NrICovCiAJdW5zaWduZWQgbG9uZyBvdmVyZmxvd19iaXQ7CiAJdW5zaWduZWQgbG9uZyBjbGVhcl9iaXRzOwotCXN0cnVjdCBpcnFhY3Rpb24gaXJxYWN0aW9uOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbWF0Y2hfdmFsdWU7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X21hdGNoX3ZhbHVlOwotCXVuc2lnbmVkIGxvbmcgbWF4X21hdGNoX3ZhbHVlOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQlyYXdfc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2VkOwotCXN0cnVjdCBjbG9ja3NvdXJjZSBjczsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX2N5Y2xlczsKLQlib29sIGNzX2VuYWJsZWQ7CiAKIAkvKiBjYWxsYmFja3MgZm9yIENNU1RSIGFuZCBDTUNTUiBhY2Nlc3MgKi8KIAl1bnNpZ25lZCBsb25nICgqcmVhZF9jb250cm9sKSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgb2Zmcyk7CkBAIC02NywyNiArODgsNzIgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVlKTsKIH07CiAKLS8qIEV4YW1wbGVzIG9mIHN1cHBvcnRlZCBDTVQgdGltZXIgcmVnaXN0ZXIgbGF5b3V0cyBhbmQgSS9PIGFjY2VzcyB3aWR0aHM6Ci0gKgotICogIjE2LWJpdCBjb3VudGVyIGFuZCAxNi1iaXQgY29udHJvbCIgYXMgZm91bmQgb24gc2g3MjYzOgotICogQ01TVFIgMHhmZmZlYzAwMCAxNi1iaXQKLSAqIENNQ1NSIDB4ZmZmZWMwMDIgMTYtYml0Ci0gKiBDTUNOVCAweGZmZmVjMDA0IDE2LWJpdAotICogQ01DT1IgMHhmZmZlYzAwNiAxNi1iaXQKLSAqCi0gKiAiMzItYml0IGNvdW50ZXIgYW5kIDE2LWJpdCBjb250cm9sIiBhcyBmb3VuZCBvbiBzaDczNzIsIHNoNzNhMCwgcjhhNzc0MDoKLSAqIENNU1RSIDB4ZmZjYTAwMDAgMTYtYml0Ci0gKiBDTUNTUiAweGZmY2EwMDYwIDE2LWJpdAotICogQ01DTlQgMHhmZmNhMDA2NCAzMi1iaXQKLSAqIENNQ09SIDB4ZmZjYTAwNjggMzItYml0Ci0gKgotICogIjMyLWJpdCBjb3VudGVyIGFuZCAzMi1iaXQgY29udHJvbCIgYXMgZm91bmQgb24gcjhhNzNhNCBhbmQgcjhhNzc5MDoKLSAqIENNU1RSIDB4ZmZjYTA1MDAgMzItYml0Ci0gKiBDTUNTUiAweGZmY2EwNTEwIDMyLWJpdAotICogQ01DTlQgMHhmZmNhMDUxNCAzMi1iaXQKLSAqIENNQ09SIDB4ZmZjYTA1MTggMzItYml0Ci0gKi8KK3N0cnVjdCBzaF9jbXRfY2hhbm5lbCB7CisJc3RydWN0IHNoX2NtdF9kZXZpY2UgKmNtdDsKKworCXVuc2lnbmVkIGludCBpbmRleDsJLyogSW5kZXggaW4gdGhlIGRvY3VtZW50YXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgaHdpZHg7CS8qIFJlYWwgaGFyZHdhcmUgaW5kZXggKi8KKworCXZvaWQgX19pb21lbSAqaW9zdGFydDsKKwl2b2lkIF9faW9tZW0gKmlvY3RybDsKKworCXVuc2lnbmVkIGludCB0aW1lcl9iaXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgbmV4dF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIG1heF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJcmF3X3NwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNlZDsKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgY3M7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9jeWNsZXM7CisJYm9vbCBjc19lbmFibGVkOworfTsKKworc3RydWN0IHNoX2NtdF9kZXZpY2UgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwljb25zdCBzdHJ1Y3Qgc2hfY210X2luZm8gKmluZm87CisJYm9vbCBsZWdhY3k7CisKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2VfY2g7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlOworCXN0cnVjdCBjbGsgKmNsazsKKworCXN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2hhbm5lbHM7CisJdW5zaWduZWQgaW50IG51bV9jaGFubmVsczsKKworCWJvb2wgaGFzX2Nsb2NrZXZlbnQ7CisJYm9vbCBoYXNfY2xvY2tzb3VyY2U7Cit9OworCisjZGVmaW5lIFNIX0NNVDE2X0NNQ1NSX0NNRgkJKDEgPDwgNykKKyNkZWZpbmUgU0hfQ01UMTZfQ01DU1JfQ01JRQkJKDEgPDwgNikKKyNkZWZpbmUgU0hfQ01UMTZfQ01DU1JfQ0tTOAkJKDAgPDwgMCkKKyNkZWZpbmUgU0hfQ01UMTZfQ01DU1JfQ0tTMzIJCSgxIDw8IDApCisjZGVmaW5lIFNIX0NNVDE2X0NNQ1NSX0NLUzEyOAkJKDIgPDwgMCkKKyNkZWZpbmUgU0hfQ01UMTZfQ01DU1JfQ0tTNTEyCQkoMyA8PCAwKQorI2RlZmluZSBTSF9DTVQxNl9DTUNTUl9DS1NfTUFTSwkJKDMgPDwgMCkKKworI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9DTUYJCSgxIDw8IDE1KQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9PVkYJCSgxIDw8IDE0KQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9XUkZMRwkJKDEgPDwgMTMpCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX1NUVEYJCSgxIDw8IDEyKQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9TVFBGCQkoMSA8PCAxMSkKKyNkZWZpbmUgU0hfQ01UMzJfQ01DU1JfU1NJRQkJKDEgPDwgMTApCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NNUwkJKDEgPDwgOSkKKyNkZWZpbmUgU0hfQ01UMzJfQ01DU1JfQ01NCQkoMSA8PCA4KQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9DTVRPVVRfSUUJKDEgPDwgNykKKyNkZWZpbmUgU0hfQ01UMzJfQ01DU1JfQ01SX05PTkUJCSgwIDw8IDQpCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NNUl9ETUEJCSgxIDw8IDQpCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NNUl9JUlEJCSgyIDw8IDQpCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NNUl9NQVNLCQkoMyA8PCA0KQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9EQkdJVkQJCSgxIDw8IDMpCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NLU19SQ0xLOAkoNCA8PCAwKQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9DS1NfUkNMSzMyCSg1IDw8IDApCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NLU19SQ0xLMTI4CSg2IDw8IDApCisjZGVmaW5lIFNIX0NNVDMyX0NNQ1NSX0NLU19SQ0xLMQkoNyA8PCAwKQorI2RlZmluZSBTSF9DTVQzMl9DTUNTUl9DS1NfTUFTSwkJKDcgPDwgMCkKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfY210X3JlYWQxNih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgb2ZmcykKIHsKQEAgLTExMCw2NCArMTc3LDEyMyBAQAogCWlvd3JpdGUzMih2YWx1ZSwgYmFzZSArIChvZmZzIDw8IDIpKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9jbXRfaW5mbyBzaF9jbXRfaW5mb1tdID0geworCVtTSF9DTVRfMTZCSVRdID0geworCQkubW9kZWwgPSBTSF9DTVRfMTZCSVQsCisJCS53aWR0aCA9IDE2LAorCQkub3ZlcmZsb3dfYml0ID0gU0hfQ01UMTZfQ01DU1JfQ01GLAorCQkuY2xlYXJfYml0cyA9IH5TSF9DTVQxNl9DTUNTUl9DTUYsCisJCS5yZWFkX2NvbnRyb2wgPSBzaF9jbXRfcmVhZDE2LAorCQkud3JpdGVfY29udHJvbCA9IHNoX2NtdF93cml0ZTE2LAorCQkucmVhZF9jb3VudCA9IHNoX2NtdF9yZWFkMTYsCisJCS53cml0ZV9jb3VudCA9IHNoX2NtdF93cml0ZTE2LAorCX0sCisJW1NIX0NNVF8zMkJJVF0gPSB7CisJCS5tb2RlbCA9IFNIX0NNVF8zMkJJVCwKKwkJLndpZHRoID0gMzIsCisJCS5vdmVyZmxvd19iaXQgPSBTSF9DTVQzMl9DTUNTUl9DTUYsCisJCS5jbGVhcl9iaXRzID0gfihTSF9DTVQzMl9DTUNTUl9DTUYgfCBTSF9DTVQzMl9DTUNTUl9PVkYpLAorCQkucmVhZF9jb250cm9sID0gc2hfY210X3JlYWQxNiwKKwkJLndyaXRlX2NvbnRyb2wgPSBzaF9jbXRfd3JpdGUxNiwKKwkJLnJlYWRfY291bnQgPSBzaF9jbXRfcmVhZDMyLAorCQkud3JpdGVfY291bnQgPSBzaF9jbXRfd3JpdGUzMiwKKwl9LAorCVtTSF9DTVRfMzJCSVRfRkFTVF0gPSB7CisJCS5tb2RlbCA9IFNIX0NNVF8zMkJJVF9GQVNULAorCQkud2lkdGggPSAzMiwKKwkJLm92ZXJmbG93X2JpdCA9IFNIX0NNVDMyX0NNQ1NSX0NNRiwKKwkJLmNsZWFyX2JpdHMgPSB+KFNIX0NNVDMyX0NNQ1NSX0NNRiB8IFNIX0NNVDMyX0NNQ1NSX09WRiksCisJCS5yZWFkX2NvbnRyb2wgPSBzaF9jbXRfcmVhZDE2LAorCQkud3JpdGVfY29udHJvbCA9IHNoX2NtdF93cml0ZTE2LAorCQkucmVhZF9jb3VudCA9IHNoX2NtdF9yZWFkMzIsCisJCS53cml0ZV9jb3VudCA9IHNoX2NtdF93cml0ZTMyLAorCX0sCisJW1NIX0NNVF80OEJJVF0gPSB7CisJCS5tb2RlbCA9IFNIX0NNVF80OEJJVCwKKwkJLndpZHRoID0gMzIsCisJCS5vdmVyZmxvd19iaXQgPSBTSF9DTVQzMl9DTUNTUl9DTUYsCisJCS5jbGVhcl9iaXRzID0gfihTSF9DTVQzMl9DTUNTUl9DTUYgfCBTSF9DTVQzMl9DTUNTUl9PVkYpLAorCQkucmVhZF9jb250cm9sID0gc2hfY210X3JlYWQzMiwKKwkJLndyaXRlX2NvbnRyb2wgPSBzaF9jbXRfd3JpdGUzMiwKKwkJLnJlYWRfY291bnQgPSBzaF9jbXRfcmVhZDMyLAorCQkud3JpdGVfY291bnQgPSBzaF9jbXRfd3JpdGUzMiwKKwl9LAorCVtTSF9DTVRfNDhCSVRfR0VOMl0gPSB7CisJCS5tb2RlbCA9IFNIX0NNVF80OEJJVF9HRU4yLAorCQkud2lkdGggPSAzMiwKKwkJLm92ZXJmbG93X2JpdCA9IFNIX0NNVDMyX0NNQ1NSX0NNRiwKKwkJLmNsZWFyX2JpdHMgPSB+KFNIX0NNVDMyX0NNQ1NSX0NNRiB8IFNIX0NNVDMyX0NNQ1NSX09WRiksCisJCS5yZWFkX2NvbnRyb2wgPSBzaF9jbXRfcmVhZDMyLAorCQkud3JpdGVfY29udHJvbCA9IHNoX2NtdF93cml0ZTMyLAorCQkucmVhZF9jb3VudCA9IHNoX2NtdF9yZWFkMzIsCisJCS53cml0ZV9jb3VudCA9IHNoX2NtdF93cml0ZTMyLAorCX0sCit9OworCiAjZGVmaW5lIENNQ1NSIDAgLyogY2hhbm5lbCByZWdpc3RlciAqLwogI2RlZmluZSBDTUNOVCAxIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ01DT1IgMiAvKiBjaGFubmVsIHJlZ2lzdGVyICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaF9jbXRfcmVhZF9jbXN0cihzdHJ1Y3Qgc2hfY210X3ByaXYgKnApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2hfY210X3JlYWRfY21zdHIoc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCkKIHsKLQlyZXR1cm4gcC0+cmVhZF9jb250cm9sKHAtPm1hcGJhc2Vfc3RyLCAwKTsKKwlpZiAoY2gtPmlvc3RhcnQpCisJCXJldHVybiBjaC0+Y210LT5pbmZvLT5yZWFkX2NvbnRyb2woY2gtPmlvc3RhcnQsIDApOworCWVsc2UKKwkJcmV0dXJuIGNoLT5jbXQtPmluZm8tPnJlYWRfY29udHJvbChjaC0+Y210LT5tYXBiYXNlLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2NtdF9yZWFkX2NtY3NyKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCkKLXsKLQlyZXR1cm4gcC0+cmVhZF9jb250cm9sKHAtPm1hcGJhc2UsIENNQ1NSKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2NtdF9yZWFkX2NtY250KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCkKLXsKLQlyZXR1cm4gcC0+cmVhZF9jb3VudChwLT5tYXBiYXNlLCBDTUNOVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGVfY21zdHIoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorc3RhdGljIGlubGluZSB2b2lkIHNoX2NtdF93cml0ZV9jbXN0cihzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0JcC0+d3JpdGVfY29udHJvbChwLT5tYXBiYXNlX3N0ciwgMCwgdmFsdWUpOworCWlmIChjaC0+aW9zdGFydCkKKwkJY2gtPmNtdC0+aW5mby0+d3JpdGVfY29udHJvbChjaC0+aW9zdGFydCwgMCwgdmFsdWUpOworCWVsc2UKKwkJY2gtPmNtdC0+aW5mby0+d3JpdGVfY29udHJvbChjaC0+Y210LT5tYXBiYXNlLCAwLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGVfY21jc3Ioc3RydWN0IHNoX2NtdF9wcml2ICpwLAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2NtdF9yZWFkX2NtY3NyKHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2gpCit7CisJcmV0dXJuIGNoLT5jbXQtPmluZm8tPnJlYWRfY29udHJvbChjaC0+aW9jdHJsLCBDTUNTUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGVfY21jc3Ioc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotCXAtPndyaXRlX2NvbnRyb2wocC0+bWFwYmFzZSwgQ01DU1IsIHZhbHVlKTsKKwljaC0+Y210LT5pbmZvLT53cml0ZV9jb250cm9sKGNoLT5pb2N0cmwsIENNQ1NSLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGVfY21jbnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2NtdF9yZWFkX2NtY250KHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2gpCit7CisJcmV0dXJuIGNoLT5jbXQtPmluZm8tPnJlYWRfY291bnQoY2gtPmlvY3RybCwgQ01DTlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfY210X3dyaXRlX2NtY250KHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2gsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlwLT53cml0ZV9jb3VudChwLT5tYXBiYXNlLCBDTUNOVCwgdmFsdWUpOworCWNoLT5jbXQtPmluZm8tPndyaXRlX2NvdW50KGNoLT5pb2N0cmwsIENNQ05ULCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGVfY21jb3Ioc3RydWN0IHNoX2NtdF9wcml2ICpwLAorc3RhdGljIGlubGluZSB2b2lkIHNoX2NtdF93cml0ZV9jbWNvcihzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0JcC0+d3JpdGVfY291bnQocC0+bWFwYmFzZSwgQ01DT1IsIHZhbHVlKTsKKwljaC0+Y210LT5pbmZvLT53cml0ZV9jb3VudChjaC0+aW9jdHJsLCBDTUNPUiwgdmFsdWUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9jbXRfZ2V0X2NvdW50ZXIoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfY210X2dldF9jb3VudGVyKHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2gsCiAJCQkJCWludCAqaGFzX3dyYXBwZWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2MSwgdjIsIHYzOwogCWludCBvMSwgbzI7CiAKLQlvMSA9IHNoX2NtdF9yZWFkX2NtY3NyKHApICYgcC0+b3ZlcmZsb3dfYml0OworCW8xID0gc2hfY210X3JlYWRfY21jc3IoY2gpICYgY2gtPmNtdC0+aW5mby0+b3ZlcmZsb3dfYml0OwogCiAJLyogTWFrZSBzdXJlIHRoZSB0aW1lciB2YWx1ZSBpcyBzdGFibGUuIFN0b2xlbiBmcm9tIGFjcGlfcG0uYyAqLwogCWRvIHsKIAkJbzIgPSBvMTsKLQkJdjEgPSBzaF9jbXRfcmVhZF9jbWNudChwKTsKLQkJdjIgPSBzaF9jbXRfcmVhZF9jbWNudChwKTsKLQkJdjMgPSBzaF9jbXRfcmVhZF9jbWNudChwKTsKLQkJbzEgPSBzaF9jbXRfcmVhZF9jbWNzcihwKSAmIHAtPm92ZXJmbG93X2JpdDsKKwkJdjEgPSBzaF9jbXRfcmVhZF9jbWNudChjaCk7CisJCXYyID0gc2hfY210X3JlYWRfY21jbnQoY2gpOworCQl2MyA9IHNoX2NtdF9yZWFkX2NtY250KGNoKTsKKwkJbzEgPSBzaF9jbXRfcmVhZF9jbWNzcihjaCkgJiBjaC0+Y210LT5pbmZvLT5vdmVyZmxvd19iaXQ7CiAJfSB3aGlsZSAodW5saWtlbHkoKG8xICE9IG8yKSB8fCAodjEgPiB2MiAmJiB2MSA8IHYzKQogCQkJICB8fCAodjIgPiB2MyAmJiB2MiA8IHYxKSB8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSkpOwogCkBAIC0xNzcsNTIgKzMwMyw1NiBAQAogCiBzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzaF9jbXRfbG9jayk7CiAKLXN0YXRpYyB2b2lkIHNoX2NtdF9zdGFydF9zdG9wX2NoKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHN0YXJ0KQorc3RhdGljIHZvaWQgc2hfY210X3N0YXJ0X3N0b3BfY2goc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwgaW50IHN0YXJ0KQogewotCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbHVlOwogCiAJLyogc3RhcnQgc3RvcCByZWdpc3RlciBzaGFyZWQgYnkgbXVsdGlwbGUgdGltZXIgY2hhbm5lbHMgKi8KIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNoX2NtdF9sb2NrLCBmbGFncyk7Ci0JdmFsdWUgPSBzaF9jbXRfcmVhZF9jbXN0cihwKTsKKwl2YWx1ZSA9IHNoX2NtdF9yZWFkX2Ntc3RyKGNoKTsKIAogCWlmIChzdGFydCkKLQkJdmFsdWUgfD0gMSA8PCBjZmctPnRpbWVyX2JpdDsKKwkJdmFsdWUgfD0gMSA8PCBjaC0+dGltZXJfYml0OwogCWVsc2UKLQkJdmFsdWUgJj0gfigxIDw8IGNmZy0+dGltZXJfYml0KTsKKwkJdmFsdWUgJj0gfigxIDw8IGNoLT50aW1lcl9iaXQpOwogCi0Jc2hfY210X3dyaXRlX2Ntc3RyKHAsIHZhbHVlKTsKKwlzaF9jbXRfd3JpdGVfY21zdHIoY2gsIHZhbHVlKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hfY210X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBzaF9jbXRfZW5hYmxlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyAqcmF0ZSkKK3N0YXRpYyBpbnQgc2hfY210X2VuYWJsZShzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nICpyYXRlKQogewogCWludCBrLCByZXQ7CiAKLQlwbV9ydW50aW1lX2dldF9zeW5jKCZwLT5wZGV2LT5kZXYpOwotCWRldl9wbV9zeXNjb3JlX2RldmljZSgmcC0+cGRldi0+ZGV2LCB0cnVlKTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZjaC0+Y210LT5wZGV2LT5kZXYpOworCWRldl9wbV9zeXNjb3JlX2RldmljZSgmY2gtPmNtdC0+cGRldi0+ZGV2LCB0cnVlKTsKIAogCS8qIGVuYWJsZSBjbG9jayAqLwotCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKKwlyZXQgPSBjbGtfZW5hYmxlKGNoLT5jbXQtPmNsayk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIGNsb2NrXG4iKTsKKwkJZGV2X2VycigmY2gtPmNtdC0+cGRldi0+ZGV2LCAiY2gldTogY2Fubm90IGVuYWJsZSBjbG9ja1xuIiwKKwkJCWNoLT5pbmRleCk7CiAJCWdvdG8gZXJyMDsKIAl9CiAKIAkvKiBtYWtlIHN1cmUgY2hhbm5lbCBpcyBkaXNhYmxlZCAqLwotCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDApOworCXNoX2NtdF9zdGFydF9zdG9wX2NoKGNoLCAwKTsKIAogCS8qIGNvbmZpZ3VyZSBjaGFubmVsLCBwZXJpb2RpYyBtb2RlIGFuZCBtYXhpbXVtIHRpbWVvdXQgKi8KLQlpZiAocC0+d2lkdGggPT0gMTYpIHsKLQkJKnJhdGUgPSBjbGtfZ2V0X3JhdGUocC0+Y2xrKSAvIDUxMjsKLQkJc2hfY210X3dyaXRlX2NtY3NyKHAsIDB4NDMpOworCWlmIChjaC0+Y210LT5pbmZvLT53aWR0aCA9PSAxNikgeworCQkqcmF0ZSA9IGNsa19nZXRfcmF0ZShjaC0+Y210LT5jbGspIC8gNTEyOworCQlzaF9jbXRfd3JpdGVfY21jc3IoY2gsIFNIX0NNVDE2X0NNQ1NSX0NNSUUgfAorCQkJCSAgIFNIX0NNVDE2X0NNQ1NSX0NLUzUxMik7CiAJfSBlbHNlIHsKLQkJKnJhdGUgPSBjbGtfZ2V0X3JhdGUocC0+Y2xrKSAvIDg7Ci0JCXNoX2NtdF93cml0ZV9jbWNzcihwLCAweDAxYTQpOworCQkqcmF0ZSA9IGNsa19nZXRfcmF0ZShjaC0+Y210LT5jbGspIC8gODsKKwkJc2hfY210X3dyaXRlX2NtY3NyKGNoLCBTSF9DTVQzMl9DTUNTUl9DTU0gfAorCQkJCSAgIFNIX0NNVDMyX0NNQ1NSX0NNVE9VVF9JRSB8CisJCQkJICAgU0hfQ01UMzJfQ01DU1JfQ01SX0lSUSB8CisJCQkJICAgU0hfQ01UMzJfQ01DU1JfQ0tTX1JDTEs4KTsKIAl9CiAKLQlzaF9jbXRfd3JpdGVfY21jb3IocCwgMHhmZmZmZmZmZik7Ci0Jc2hfY210X3dyaXRlX2NtY250KHAsIDApOworCXNoX2NtdF93cml0ZV9jbWNvcihjaCwgMHhmZmZmZmZmZik7CisJc2hfY210X3dyaXRlX2NtY250KGNoLCAwKTsKIAogCS8qCiAJICogQWNjb3JkaW5nIHRvIHRoZSBzaDczYTAgdXNlcidzIG1hbnVhbCwgYXMgQ01DTlQgY2FuIGJlIG9wZXJhdGVkCkBAIC0yMzYsNDEgKzM2Niw0MiBAQAogCSAqIHRha2UgUkNMS3gyIGF0IG1heGltdW0uCiAJICovCiAJZm9yIChrID0gMDsgayA8IDEwMDsgaysrKSB7Ci0JCWlmICghc2hfY210X3JlYWRfY21jbnQocCkpCisJCWlmICghc2hfY210X3JlYWRfY21jbnQoY2gpKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxKTsKIAl9CiAKLQlpZiAoc2hfY210X3JlYWRfY21jbnQocCkpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiY2Fubm90IGNsZWFyIENNQ05UXG4iKTsKKwlpZiAoc2hfY210X3JlYWRfY21jbnQoY2gpKSB7CisJCWRldl9lcnIoJmNoLT5jbXQtPnBkZXYtPmRldiwgImNoJXU6IGNhbm5vdCBjbGVhciBDTUNOVFxuIiwKKwkJCWNoLT5pbmRleCk7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gZXJyMTsKIAl9CiAKIAkvKiBlbmFibGUgY2hhbm5lbCAqLwotCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDEpOworCXNoX2NtdF9zdGFydF9zdG9wX2NoKGNoLCAxKTsKIAlyZXR1cm4gMDsKICBlcnIxOgogCS8qIHN0b3AgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShwLT5jbGspOworCWNsa19kaXNhYmxlKGNoLT5jbXQtPmNsayk7CiAKICBlcnIwOgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNoX2NtdF9kaXNhYmxlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCkKK3N0YXRpYyB2b2lkIHNoX2NtdF9kaXNhYmxlKHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2gpCiB7CiAJLyogZGlzYWJsZSBjaGFubmVsICovCi0Jc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisJc2hfY210X3N0YXJ0X3N0b3BfY2goY2gsIDApOwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGluIENNVCBibG9jayAqLwotCXNoX2NtdF93cml0ZV9jbWNzcihwLCAwKTsKKwlzaF9jbXRfd3JpdGVfY21jc3IoY2gsIDApOwogCiAJLyogc3RvcCBjbG9jayAqLwotCWNsa19kaXNhYmxlKHAtPmNsayk7CisJY2xrX2Rpc2FibGUoY2gtPmNtdC0+Y2xrKTsKIAotCWRldl9wbV9zeXNjb3JlX2RldmljZSgmcC0+cGRldi0+ZGV2LCBmYWxzZSk7Ci0JcG1fcnVudGltZV9wdXQoJnAtPnBkZXYtPmRldik7CisJZGV2X3BtX3N5c2NvcmVfZGV2aWNlKCZjaC0+Y210LT5wZGV2LT5kZXYsIGZhbHNlKTsKKwlwbV9ydW50aW1lX3B1dCgmY2gtPmNtdC0+cGRldi0+ZGV2KTsKIH0KIAogLyogcHJpdmF0ZSBmbGFncyAqLwpAQCAtMjgwLDI0ICs0MTEsMjQgQEAKICNkZWZpbmUgRkxBR19TS0lQRVZFTlQgKDEgPDwgMykKICNkZWZpbmUgRkxBR19JUlFDT05URVhUICgxIDw8IDQpCiAKLXN0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkoc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwKIAkJCQkJICAgICAgaW50IGFic29sdXRlKQogewogCXVuc2lnbmVkIGxvbmcgbmV3X21hdGNoOwotCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSBwLT5uZXh0X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSBjaC0+bmV4dF9tYXRjaF92YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IDA7CiAJaW50IGhhc193cmFwcGVkOwogCi0Jbm93ID0gc2hfY210X2dldF9jb3VudGVyKHAsICZoYXNfd3JhcHBlZCk7Ci0JcC0+ZmxhZ3MgfD0gRkxBR19SRVBST0dSQU07IC8qIGZvcmNlIHJlcHJvZ3JhbSAqLworCW5vdyA9IHNoX2NtdF9nZXRfY291bnRlcihjaCwgJmhhc193cmFwcGVkKTsKKwljaC0+ZmxhZ3MgfD0gRkxBR19SRVBST0dSQU07IC8qIGZvcmNlIHJlcHJvZ3JhbSAqLwogCiAJaWYgKGhhc193cmFwcGVkKSB7CiAJCS8qIHdlJ3JlIGNvbXBldGluZyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KIAkJICogIC0+IGxldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmVwcm9ncmFtIHRoZSB0aW1lci4KIAkJICogIC0+IGludGVycnVwdCBudW1iZXIgdHdvIGhhbmRsZXMgdGhlIGV2ZW50LgogCQkgKi8KLQkJcC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CisJCWNoLT5mbGFncyB8PSBGTEFHX1NLSVBFVkVOVDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzA5LDIwICs0NDAsMjAgQEAKIAkJICogYnV0IGRvbid0IHNhdmUgdGhlIG5ldyBtYXRjaCB2YWx1ZSB5ZXQuCiAJCSAqLwogCQluZXdfbWF0Y2ggPSBub3cgKyB2YWx1ZSArIGRlbGF5OwotCQlpZiAobmV3X21hdGNoID4gcC0+bWF4X21hdGNoX3ZhbHVlKQotCQkJbmV3X21hdGNoID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCQlpZiAobmV3X21hdGNoID4gY2gtPm1heF9tYXRjaF92YWx1ZSkKKwkJCW5ld19tYXRjaCA9IGNoLT5tYXhfbWF0Y2hfdmFsdWU7CiAKLQkJc2hfY210X3dyaXRlX2NtY29yKHAsIG5ld19tYXRjaCk7CisJCXNoX2NtdF93cml0ZV9jbWNvcihjaCwgbmV3X21hdGNoKTsKIAotCQlub3cgPSBzaF9jbXRfZ2V0X2NvdW50ZXIocCwgJmhhc193cmFwcGVkKTsKLQkJaWYgKGhhc193cmFwcGVkICYmIChuZXdfbWF0Y2ggPiBwLT5tYXRjaF92YWx1ZSkpIHsKKwkJbm93ID0gc2hfY210X2dldF9jb3VudGVyKGNoLCAmaGFzX3dyYXBwZWQpOworCQlpZiAoaGFzX3dyYXBwZWQgJiYgKG5ld19tYXRjaCA+IGNoLT5tYXRjaF92YWx1ZSkpIHsKIAkJCS8qIHdlIGFyZSBjaGFuZ2luZyB0byBhIGdyZWF0ZXIgbWF0Y2ggdmFsdWUsCiAJCQkgKiBzbyB0aGlzIHdyYXAgbXVzdCBiZSBjYXVzZWQgYnkgdGhlIGNvdW50ZXIKIAkJCSAqIG1hdGNoaW5nIHRoZSBvbGQgdmFsdWUuCiAJCQkgKiAtPiBmaXJzdCBpbnRlcnJ1cHQgcmVwcm9ncmFtcyB0aGUgdGltZXIuCiAJCQkgKiAtPiBpbnRlcnJ1cHQgbnVtYmVyIHR3byBoYW5kbGVzIHRoZSBldmVudC4KIAkJCSAqLwotCQkJcC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CisJCQljaC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zMzMsNyArNDY0LDcgQEAKIAkJCSAqIC0+IHNhdmUgcHJvZ3JhbW1lZCBtYXRjaCB2YWx1ZS4KIAkJCSAqIC0+IGxldCBpc3IgaGFuZGxlIHRoZSBldmVudC4KIAkJCSAqLwotCQkJcC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CisJCQljaC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zNDQsNyArNDc1LDcgQEAKIAkJCSAqIC0+IHNhdmUgcHJvZ3JhbW1lZCBtYXRjaCB2YWx1ZS4KIAkJCSAqIC0+IGxldCBpc3IgaGFuZGxlIHRoZSBldmVudC4KIAkJCSAqLwotCQkJcC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CisJCQljaC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zNjAsMTM4ICs0OTEsMTQxIEBACiAJCQlkZWxheSA9IDE7CiAKIAkJaWYgKCFkZWxheSkKLQkJCWRldl93YXJuKCZwLT5wZGV2LT5kZXYsICJ0b28gbG9uZyBkZWxheVxuIik7CisJCQlkZXZfd2FybigmY2gtPmNtdC0+cGRldi0+ZGV2LCAiY2gldTogdG9vIGxvbmcgZGVsYXlcbiIsCisJCQkJIGNoLT5pbmRleCk7CiAKIAl9IHdoaWxlIChkZWxheSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fc2hfY210X3NldF9uZXh0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBkZWx0YSkKK3N0YXRpYyB2b2lkIF9fc2hfY210X3NldF9uZXh0KHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2gsIHVuc2lnbmVkIGxvbmcgZGVsdGEpCiB7Ci0JaWYgKGRlbHRhID4gcC0+bWF4X21hdGNoX3ZhbHVlKQotCQlkZXZfd2FybigmcC0+cGRldi0+ZGV2LCAiZGVsdGEgb3V0IG9mIHJhbmdlXG4iKTsKKwlpZiAoZGVsdGEgPiBjaC0+bWF4X21hdGNoX3ZhbHVlKQorCQlkZXZfd2FybigmY2gtPmNtdC0+cGRldi0+ZGV2LCAiY2gldTogZGVsdGEgb3V0IG9mIHJhbmdlXG4iLAorCQkJIGNoLT5pbmRleCk7CiAKLQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGE7Ci0Jc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHAsIDApOworCWNoLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGE7CisJc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KGNoLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2hfY210X3NldF9uZXh0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBkZWx0YSkKK3N0YXRpYyB2b2lkIHNoX2NtdF9zZXRfbmV4dChzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nIGRlbHRhKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKLQlfX3NoX2NtdF9zZXRfbmV4dChwLCBkZWx0YSk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJX19zaF9jbXRfc2V0X25leHQoY2gsIGRlbHRhKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNoX2NtdF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGRldl9pZDsKKwlzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoID0gZGV2X2lkOwogCiAJLyogY2xlYXIgZmxhZ3MgKi8KLQlzaF9jbXRfd3JpdGVfY21jc3IocCwgc2hfY210X3JlYWRfY21jc3IocCkgJiBwLT5jbGVhcl9iaXRzKTsKKwlzaF9jbXRfd3JpdGVfY21jc3IoY2gsIHNoX2NtdF9yZWFkX2NtY3NyKGNoKSAmCisJCQkgICBjaC0+Y210LT5pbmZvLT5jbGVhcl9iaXRzKTsKIAogCS8qIHVwZGF0ZSBjbG9jayBzb3VyY2UgY291bnRlciB0byBiZWdpbiB3aXRoIGlmIGVuYWJsZWQKIAkgKiB0aGUgd3JhcCBmbGFnIHNob3VsZCBiZSBjbGVhcmVkIGJ5IHRoZSB0aW1lciBzcGVjaWZpYwogCSAqIGlzciBiZWZvcmUgd2UgZW5kIHVwIGhlcmUuCiAJICovCi0JaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkKLQkJcC0+dG90YWxfY3ljbGVzICs9IHAtPm1hdGNoX3ZhbHVlICsgMTsKKwlpZiAoY2gtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkKKwkJY2gtPnRvdGFsX2N5Y2xlcyArPSBjaC0+bWF0Y2hfdmFsdWUgKyAxOwogCi0JaWYgKCEocC0+ZmxhZ3MgJiBGTEFHX1JFUFJPR1JBTSkpCi0JCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisJaWYgKCEoY2gtPmZsYWdzICYgRkxBR19SRVBST0dSQU0pKQorCQljaC0+bmV4dF9tYXRjaF92YWx1ZSA9IGNoLT5tYXhfbWF0Y2hfdmFsdWU7CiAKLQlwLT5mbGFncyB8PSBGTEFHX0lSUUNPTlRFWFQ7CisJY2gtPmZsYWdzIHw9IEZMQUdfSVJRQ09OVEVYVDsKIAotCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkgewotCQlpZiAoIShwLT5mbGFncyAmIEZMQUdfU0tJUEVWRU5UKSkgewotCQkJaWYgKHAtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKLQkJCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOwotCQkJCXAtPmZsYWdzIHw9IEZMQUdfUkVQUk9HUkFNOworCWlmIChjaC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpIHsKKwkJaWYgKCEoY2gtPmZsYWdzICYgRkxBR19TS0lQRVZFTlQpKSB7CisJCQlpZiAoY2gtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKKwkJCQljaC0+bmV4dF9tYXRjaF92YWx1ZSA9IGNoLT5tYXhfbWF0Y2hfdmFsdWU7CisJCQkJY2gtPmZsYWdzIHw9IEZMQUdfUkVQUk9HUkFNOwogCQkJfQogCi0JCQlwLT5jZWQuZXZlbnRfaGFuZGxlcigmcC0+Y2VkKTsKKwkJCWNoLT5jZWQuZXZlbnRfaGFuZGxlcigmY2gtPmNlZCk7CiAJCX0KIAl9CiAKLQlwLT5mbGFncyAmPSB+RkxBR19TS0lQRVZFTlQ7CisJY2gtPmZsYWdzICY9IH5GTEFHX1NLSVBFVkVOVDsKIAotCWlmIChwLT5mbGFncyAmIEZMQUdfUkVQUk9HUkFNKSB7Ci0JCXAtPmZsYWdzICY9IH5GTEFHX1JFUFJPR1JBTTsKLQkJc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHAsIDEpOworCWlmIChjaC0+ZmxhZ3MgJiBGTEFHX1JFUFJPR1JBTSkgeworCQljaC0+ZmxhZ3MgJj0gfkZMQUdfUkVQUk9HUkFNOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkoY2gsIDEpOwogCi0JCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkKLQkJCWlmICgocC0+Y2VkLm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfU0hVVERPV04pCi0JCQkgICAgfHwgKHAtPm1hdGNoX3ZhbHVlID09IHAtPm5leHRfbWF0Y2hfdmFsdWUpKQotCQkJCXAtPmZsYWdzICY9IH5GTEFHX1JFUFJPR1JBTTsKKwkJaWYgKGNoLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkKKwkJCWlmICgoY2gtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1NIVVRET1dOKQorCQkJICAgIHx8IChjaC0+bWF0Y2hfdmFsdWUgPT0gY2gtPm5leHRfbWF0Y2hfdmFsdWUpKQorCQkJCWNoLT5mbGFncyAmPSB+RkxBR19SRVBST0dSQU07CiAJfQogCi0JcC0+ZmxhZ3MgJj0gfkZMQUdfSVJRQ09OVEVYVDsKKwljaC0+ZmxhZ3MgJj0gfkZMQUdfSVJRQ09OVEVYVDsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBzaF9jbXRfc3RhcnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGZsYWcpCitzdGF0aWMgaW50IHNoX2NtdF9zdGFydChzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nIGZsYWcpCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghKHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKLQkJcmV0ID0gc2hfY210X2VuYWJsZShwLCAmcC0+cmF0ZSk7CisJaWYgKCEoY2gtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKKwkJcmV0ID0gc2hfY210X2VuYWJsZShjaCwgJmNoLT5yYXRlKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCXAtPmZsYWdzIHw9IGZsYWc7CisJY2gtPmZsYWdzIHw9IGZsYWc7CiAKIAkvKiBzZXR1cCB0aW1lb3V0IGlmIG5vIGNsb2NrZXZlbnQgKi8KLQlpZiAoKGZsYWcgPT0gRkxBR19DTE9DS1NPVVJDRSkgJiYgKCEocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpKSkKLQkJX19zaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKKwlpZiAoKGZsYWcgPT0gRkxBR19DTE9DS1NPVVJDRSkgJiYgKCEoY2gtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKSkpCisJCV9fc2hfY210X3NldF9uZXh0KGNoLCBjaC0+bWF4X21hdGNoX3ZhbHVlKTsKICBvdXQ6Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNoX2NtdF9zdG9wKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBmbGFnKQorc3RhdGljIHZvaWQgc2hfY210X3N0b3Aoc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwgdW5zaWduZWQgbG9uZyBmbGFnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBmOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOwogCi0JZiA9IHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpOwotCXAtPmZsYWdzICY9IH5mbGFnOworCWYgPSBjaC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSk7CisJY2gtPmZsYWdzICY9IH5mbGFnOwogCi0JaWYgKGYgJiYgIShwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKSkpCi0JCXNoX2NtdF9kaXNhYmxlKHApOworCWlmIChmICYmICEoY2gtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKKwkJc2hfY210X2Rpc2FibGUoY2gpOwogCiAJLyogYWRqdXN0IHRoZSB0aW1lb3V0IHRvIG1heGltdW0gaWYgb25seSBjbG9ja3NvdXJjZSBsZWZ0ICovCi0JaWYgKChmbGFnID09IEZMQUdfQ0xPQ0tFVkVOVCkgJiYgKHAtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkpCi0JCV9fc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7CisJaWYgKChmbGFnID09IEZMQUdfQ0xPQ0tFVkVOVCkgJiYgKGNoLT5mbGFncyAmIEZMQUdfQ0xPQ0tTT1VSQ0UpKQorCQlfX3NoX2NtdF9zZXRfbmV4dChjaCwgY2gtPm1heF9tYXRjaF92YWx1ZSk7CiAKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IHNoX2NtdF9wcml2ICpjc190b19zaF9jbXQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNzX3RvX3NoX2NtdChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXJldHVybiBjb250YWluZXJfb2YoY3MsIHN0cnVjdCBzaF9jbXRfcHJpdiwgY3MpOworCXJldHVybiBjb250YWluZXJfb2YoY3MsIHN0cnVjdCBzaF9jbXRfY2hhbm5lbCwgY3MpOwogfQogCiBzdGF0aWMgY3ljbGVfdCBzaF9jbXRfY2xvY2tzb3VyY2VfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGNzX3RvX3NoX2NtdChjcyk7CisJc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCA9IGNzX3RvX3NoX2NtdChjcyk7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgcmF3OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGhhc193cmFwcGVkOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7Ci0JdmFsdWUgPSBwLT50b3RhbF9jeWNsZXM7Ci0JcmF3ID0gc2hfY210X2dldF9jb3VudGVyKHAsICZoYXNfd3JhcHBlZCk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCXZhbHVlID0gY2gtPnRvdGFsX2N5Y2xlczsKKwlyYXcgPSBzaF9jbXRfZ2V0X2NvdW50ZXIoY2gsICZoYXNfd3JhcHBlZCk7CiAKIAlpZiAodW5saWtlbHkoaGFzX3dyYXBwZWQpKQotCQlyYXcgKz0gcC0+bWF0Y2hfdmFsdWUgKyAxOwotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisJCXJhdyArPSBjaC0+bWF0Y2hfdmFsdWUgKyAxOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHZhbHVlICsgcmF3OwogfQpAQCAtNDk5LDUzICs2MzMsNTMgQEAKIHN0YXRpYyBpbnQgc2hfY210X2Nsb2Nrc291cmNlX2VuYWJsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCWludCByZXQ7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY3NfdG9fc2hfY210KGNzKTsKKwlzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoID0gY3NfdG9fc2hfY210KGNzKTsKIAotCVdBUk5fT04ocC0+Y3NfZW5hYmxlZCk7CisJV0FSTl9PTihjaC0+Y3NfZW5hYmxlZCk7CiAKLQlwLT50b3RhbF9jeWNsZXMgPSAwOworCWNoLT50b3RhbF9jeWNsZXMgPSAwOwogCi0JcmV0ID0gc2hfY210X3N0YXJ0KHAsIEZMQUdfQ0xPQ0tTT1VSQ0UpOworCXJldCA9IHNoX2NtdF9zdGFydChjaCwgRkxBR19DTE9DS1NPVVJDRSk7CiAJaWYgKCFyZXQpIHsKLQkJX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX2h6KGNzLCBwLT5yYXRlKTsKLQkJcC0+Y3NfZW5hYmxlZCA9IHRydWU7CisJCV9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9oeihjcywgY2gtPnJhdGUpOworCQljaC0+Y3NfZW5hYmxlZCA9IHRydWU7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja3NvdXJjZV9kaXNhYmxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY3NfdG9fc2hfY210KGNzKTsKKwlzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoID0gY3NfdG9fc2hfY210KGNzKTsKIAotCVdBUk5fT04oIXAtPmNzX2VuYWJsZWQpOworCVdBUk5fT04oIWNoLT5jc19lbmFibGVkKTsKIAotCXNoX2NtdF9zdG9wKHAsIEZMQUdfQ0xPQ0tTT1VSQ0UpOwotCXAtPmNzX2VuYWJsZWQgPSBmYWxzZTsKKwlzaF9jbXRfc3RvcChjaCwgRkxBR19DTE9DS1NPVVJDRSk7CisJY2gtPmNzX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgc2hfY210X2Nsb2Nrc291cmNlX3N1c3BlbmQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjc190b19zaF9jbXQoY3MpOworCXN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2ggPSBjc190b19zaF9jbXQoY3MpOwogCi0Jc2hfY210X3N0b3AocCwgRkxBR19DTE9DS1NPVVJDRSk7Ci0JcG1fZ2VucGRfc3lzY29yZV9wb3dlcm9mZigmcC0+cGRldi0+ZGV2KTsKKwlzaF9jbXRfc3RvcChjaCwgRkxBR19DTE9DS1NPVVJDRSk7CisJcG1fZ2VucGRfc3lzY29yZV9wb3dlcm9mZigmY2gtPmNtdC0+cGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgc2hfY210X2Nsb2Nrc291cmNlX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGNzX3RvX3NoX2NtdChjcyk7CisJc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCA9IGNzX3RvX3NoX2NtdChjcyk7CiAKLQlwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb24oJnAtPnBkZXYtPmRldik7Ci0Jc2hfY210X3N0YXJ0KHAsIEZMQUdfQ0xPQ0tTT1VSQ0UpOworCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvbigmY2gtPmNtdC0+cGRldi0+ZGV2KTsKKwlzaF9jbXRfc3RhcnQoY2gsIEZMQUdfQ0xPQ0tTT1VSQ0UpOwogfQogCi1zdGF0aWMgaW50IHNoX2NtdF9yZWdpc3Rlcl9jbG9ja3NvdXJjZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCi0JCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQorc3RhdGljIGludCBzaF9jbXRfcmVnaXN0ZXJfY2xvY2tzb3VyY2Uoc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzID0gJnAtPmNzOworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmY2gtPmNzOwogCiAJY3MtPm5hbWUgPSBuYW1lOwotCWNzLT5yYXRpbmcgPSByYXRpbmc7CisJY3MtPnJhdGluZyA9IDEyNTsKIAljcy0+cmVhZCA9IHNoX2NtdF9jbG9ja3NvdXJjZV9yZWFkOwogCWNzLT5lbmFibGUgPSBzaF9jbXRfY2xvY2tzb3VyY2VfZW5hYmxlOwogCWNzLT5kaXNhYmxlID0gc2hfY210X2Nsb2Nrc291cmNlX2Rpc2FibGU7CkBAIC01NTQsNDcgKzY4OCw0OCBAQAogCWNzLT5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyhzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KTsKIAljcy0+ZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUzsKIAotCWRldl9pbmZvKCZwLT5wZGV2LT5kZXYsICJ1c2VkIGFzIGNsb2NrIHNvdXJjZVxuIik7CisJZGV2X2luZm8oJmNoLT5jbXQtPnBkZXYtPmRldiwgImNoJXU6IHVzZWQgYXMgY2xvY2sgc291cmNlXG4iLAorCQkgY2gtPmluZGV4KTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggZHVtbXkgMSBIeiB2YWx1ZSwgZ2V0cyB1cGRhdGVkIGluIC0+ZW5hYmxlKCkgKi8KIAljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihjcywgMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfY210X3ByaXYgKmNlZF90b19zaF9jbXQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQorc3RhdGljIHN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2VkX3RvX3NoX2NtdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjZWQsIHN0cnVjdCBzaF9jbXRfcHJpdiwgY2VkKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNlZCwgc3RydWN0IHNoX2NtdF9jaGFubmVsLCBjZWQpOwogfQogCi1zdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcGVyaW9kaWMpCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQoc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwgaW50IHBlcmlvZGljKQogewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJmNoLT5jZWQ7CiAKLQlzaF9jbXRfc3RhcnQocCwgRkxBR19DTE9DS0VWRU5UKTsKKwlzaF9jbXRfc3RhcnQoY2gsIEZMQUdfQ0xPQ0tFVkVOVCk7CiAKIAkvKiBUT0RPOiBjYWxjdWxhdGUgZ29vZCBzaGlmdCBmcm9tIHJhdGUgYW5kIGNvdW50ZXIgYml0IHdpZHRoICovCiAKIAljZWQtPnNoaWZ0ID0gMzI7Ci0JY2VkLT5tdWx0ID0gZGl2X3NjKHAtPnJhdGUsIE5TRUNfUEVSX1NFQywgY2VkLT5zaGlmdCk7Ci0JY2VkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKHAtPm1heF9tYXRjaF92YWx1ZSwgY2VkKTsKKwljZWQtPm11bHQgPSBkaXZfc2MoY2gtPnJhdGUsIE5TRUNfUEVSX1NFQywgY2VkLT5zaGlmdCk7CisJY2VkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKGNoLT5tYXhfbWF0Y2hfdmFsdWUsIGNlZCk7CiAJY2VkLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MWYsIGNlZCk7CiAKIAlpZiAocGVyaW9kaWMpCi0JCXNoX2NtdF9zZXRfbmV4dChwLCAoKHAtPnJhdGUgKyBIWi8yKSAvIEhaKSAtIDEpOworCQlzaF9jbXRfc2V0X25leHQoY2gsICgoY2gtPnJhdGUgKyBIWi8yKSAvIEhaKSAtIDEpOwogCWVsc2UKLQkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7CisJCXNoX2NtdF9zZXRfbmV4dChjaCwgY2gtPm1heF9tYXRjaF92YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY2VkX3RvX3NoX2NtdChjZWQpOworCXN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2ggPSBjZWRfdG9fc2hfY210KGNlZCk7CiAKIAkvKiBkZWFsIHdpdGggb2xkIHNldHRpbmcgZmlyc3QgKi8KIAlzd2l0Y2ggKGNlZC0+bW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQlzaF9jbXRfc3RvcChwLCBGTEFHX0NMT0NLRVZFTlQpOworCQlzaF9jbXRfc3RvcChjaCwgRkxBR19DTE9DS0VWRU5UKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC02MDIsMTYgKzczNywxOCBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQkJZGV2X2luZm8oJnAtPnBkZXYtPmRldiwgInVzZWQgZm9yIHBlcmlvZGljIGNsb2NrIGV2ZW50c1xuIik7Ci0JCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChwLCAxKTsKKwkJZGV2X2luZm8oJmNoLT5jbXQtPnBkZXYtPmRldiwKKwkJCSAiY2gldTogdXNlZCBmb3IgcGVyaW9kaWMgY2xvY2sgZXZlbnRzXG4iLCBjaC0+aW5kZXgpOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQoY2gsIDEpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCWRldl9pbmZvKCZwLT5wZGV2LT5kZXYsICJ1c2VkIGZvciBvbmVzaG90IGNsb2NrIGV2ZW50c1xuIik7Ci0JCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChwLCAwKTsKKwkJZGV2X2luZm8oJmNoLT5jbXQtPnBkZXYtPmRldiwKKwkJCSAiY2gldTogdXNlZCBmb3Igb25lc2hvdCBjbG9jayBldmVudHNcbiIsIGNoLT5pbmRleCk7CisJCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChjaCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6Ci0JCXNoX2NtdF9zdG9wKHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisJCXNoX2NtdF9zdG9wKGNoLCBGTEFHX0NMT0NLRVZFTlQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTYyMSwxOTYgKzc1OCwzNDEgQEAKIHN0YXRpYyBpbnQgc2hfY210X2Nsb2NrX2V2ZW50X25leHQodW5zaWduZWQgbG9uZyBkZWx0YSwKIAkJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY2VkX3RvX3NoX2NtdChjZWQpOworCXN0cnVjdCBzaF9jbXRfY2hhbm5lbCAqY2ggPSBjZWRfdG9fc2hfY210KGNlZCk7CiAKIAlCVUdfT04oY2VkLT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwotCWlmIChsaWtlbHkocC0+ZmxhZ3MgJiBGTEFHX0lSUUNPTlRFWFQpKQotCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGEgLSAxOworCWlmIChsaWtlbHkoY2gtPmZsYWdzICYgRkxBR19JUlFDT05URVhUKSkKKwkJY2gtPm5leHRfbWF0Y2hfdmFsdWUgPSBkZWx0YSAtIDE7CiAJZWxzZQotCQlzaF9jbXRfc2V0X25leHQocCwgZGVsdGEgLSAxKTsKKwkJc2hfY210X3NldF9uZXh0KGNoLCBkZWx0YSAtIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9zdXNwZW5kKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKIHsKLQlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjZWRfdG9fc2hfY210KGNlZCk7CisJc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCA9IGNlZF90b19zaF9jbXQoY2VkKTsKIAotCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvZmYoJnAtPnBkZXYtPmRldik7Ci0JY2xrX3VucHJlcGFyZShwLT5jbGspOworCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvZmYoJmNoLT5jbXQtPnBkZXYtPmRldik7CisJY2xrX3VucHJlcGFyZShjaC0+Y210LT5jbGspOwogfQogCiBzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfcmVzdW1lKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKIHsKLQlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjZWRfdG9fc2hfY210KGNlZCk7CisJc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCA9IGNlZF90b19zaF9jbXQoY2VkKTsKIAotCWNsa19wcmVwYXJlKHAtPmNsayk7Ci0JcG1fZ2VucGRfc3lzY29yZV9wb3dlcm9uKCZwLT5wZGV2LT5kZXYpOworCWNsa19wcmVwYXJlKGNoLT5jbXQtPmNsayk7CisJcG1fZ2VucGRfc3lzY29yZV9wb3dlcm9uKCZjaC0+Y210LT5wZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBzaF9jbXRfcmVnaXN0ZXJfY2xvY2tldmVudChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCi0JCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQorc3RhdGljIGludCBzaF9jbXRfcmVnaXN0ZXJfY2xvY2tldmVudChzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJnAtPmNlZDsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmY2gtPmNlZDsKKwlpbnQgaXJxOworCWludCByZXQ7CiAKLQltZW1zZXQoY2VkLCAwLCBzaXplb2YoKmNlZCkpOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoY2gtPmNtdC0+cGRldiwgY2gtPmNtdC0+bGVnYWN5ID8gMCA6IGNoLT5pbmRleCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmY2gtPmNtdC0+cGRldi0+ZGV2LCAiY2gldTogZmFpbGVkIHRvIGdldCBpcnFcbiIsCisJCQljaC0+aW5kZXgpOworCQlyZXR1cm4gaXJxOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgc2hfY210X2ludGVycnVwdCwKKwkJCSAgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCB8IElSUUZfTk9CQUxBTkNJTkcsCisJCQkgIGRldl9uYW1lKCZjaC0+Y210LT5wZGV2LT5kZXYpLCBjaCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjaC0+Y210LT5wZGV2LT5kZXYsICJjaCV1OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCisJCQljaC0+aW5kZXgsIGlycSk7CisJCXJldHVybiByZXQ7CisJfQogCiAJY2VkLT5uYW1lID0gbmFtZTsKIAljZWQtPmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CiAJY2VkLT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwotCWNlZC0+cmF0aW5nID0gcmF0aW5nOwotCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2VkLT5yYXRpbmcgPSAxMjU7CisJY2VkLT5jcHVtYXNrID0gY3B1X3Bvc3NpYmxlX21hc2s7CiAJY2VkLT5zZXRfbmV4dF9ldmVudCA9IHNoX2NtdF9jbG9ja19ldmVudF9uZXh0OwogCWNlZC0+c2V0X21vZGUgPSBzaF9jbXRfY2xvY2tfZXZlbnRfbW9kZTsKIAljZWQtPnN1c3BlbmQgPSBzaF9jbXRfY2xvY2tfZXZlbnRfc3VzcGVuZDsKIAljZWQtPnJlc3VtZSA9IHNoX2NtdF9jbG9ja19ldmVudF9yZXN1bWU7CiAKLQlkZXZfaW5mbygmcC0+cGRldi0+ZGV2LCAidXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iKTsKKwlkZXZfaW5mbygmY2gtPmNtdC0+cGRldi0+ZGV2LCAiY2gldTogdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLAorCQkgY2gtPmluZGV4KTsKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKLX0KLQotc3RhdGljIGludCBzaF9jbXRfcmVnaXN0ZXIoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBjaGFyICpuYW1lLAotCQkJICAgdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nKQotewotCWlmIChjbG9ja2V2ZW50X3JhdGluZykKLQkJc2hfY210X3JlZ2lzdGVyX2Nsb2NrZXZlbnQocCwgbmFtZSwgY2xvY2tldmVudF9yYXRpbmcpOwotCi0JaWYgKGNsb2Nrc291cmNlX3JhdGluZykKLQkJc2hfY210X3JlZ2lzdGVyX2Nsb2Nrc291cmNlKHAsIG5hbWUsIGNsb2Nrc291cmNlX3JhdGluZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaF9jbXRfc2V0dXAoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBzaF9jbXRfcmVnaXN0ZXIoc3RydWN0IHNoX2NtdF9jaGFubmVsICpjaCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIGJvb2wgY2xvY2tldmVudCwgYm9vbCBjbG9ja3NvdXJjZSkKIHsKLQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKnJlczI7Ci0JaW50IGlycSwgcmV0OwotCXJldCA9IC1FTlhJTzsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCXAtPnBkZXYgPSBwZGV2OwotCi0JaWYgKCFjZmcpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJZ290byBlcnIwOworCWlmIChjbG9ja2V2ZW50KSB7CisJCWNoLT5jbXQtPmhhc19jbG9ja2V2ZW50ID0gdHJ1ZTsKKwkJcmV0ID0gc2hfY210X3JlZ2lzdGVyX2Nsb2NrZXZlbnQoY2gsIG5hbWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAJfQogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHAtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoY2xvY2tzb3VyY2UpIHsKKwkJY2gtPmNtdC0+aGFzX2Nsb2Nrc291cmNlID0gdHJ1ZTsKKwkJc2hfY210X3JlZ2lzdGVyX2Nsb2Nrc291cmNlKGNoLCBuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbXRfc2V0dXBfY2hhbm5lbChzdHJ1Y3Qgc2hfY210X2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJdW5zaWduZWQgaW50IGh3aWR4LCBib29sIGNsb2NrZXZlbnQsCisJCQkJYm9vbCBjbG9ja3NvdXJjZSwgc3RydWN0IHNoX2NtdF9kZXZpY2UgKmNtdCkKK3sKKwlpbnQgcmV0OworCisJLyogU2tpcCB1bnVzZWQgY2hhbm5lbHMuICovCisJaWYgKCFjbG9ja2V2ZW50ICYmICFjbG9ja3NvdXJjZSkKKwkJcmV0dXJuIDA7CisKKwljaC0+Y210ID0gY210OworCWNoLT5pbmRleCA9IGluZGV4OworCWNoLT5od2lkeCA9IGh3aWR4OworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBjaGFubmVsIGNvbnRyb2wgcmVnaXN0ZXIgYmxvY2suIEZvciB0aGUKKwkgKiB0aW1lcnMgd2l0aCBhIHBlci1jaGFubmVsIHN0YXJ0L3N0b3AgcmVnaXN0ZXIsIGNvbXB1dGUgaXRzIGFkZHJlc3MKKwkgKiBhcyB3ZWxsLgorCSAqCisJICogRm9yIGxlZ2FjeSBjb25maWd1cmF0aW9uIHRoZSBhZGRyZXNzIGhhcyBiZWVuIG1hcHBlZCBleHBsaWNpdGx5LgorCSAqLworCWlmIChjbXQtPmxlZ2FjeSkgeworCQljaC0+aW9jdHJsID0gY210LT5tYXBiYXNlX2NoOworCX0gZWxzZSB7CisJCXN3aXRjaCAoY210LT5pbmZvLT5tb2RlbCkgeworCQljYXNlIFNIX0NNVF8xNkJJVDoKKwkJCWNoLT5pb2N0cmwgPSBjbXQtPm1hcGJhc2UgKyAyICsgY2gtPmh3aWR4ICogNjsKKwkJCWJyZWFrOworCQljYXNlIFNIX0NNVF8zMkJJVDoKKwkJY2FzZSBTSF9DTVRfNDhCSVQ6CisJCQljaC0+aW9jdHJsID0gY210LT5tYXBiYXNlICsgMHgxMCArIGNoLT5od2lkeCAqIDB4MTA7CisJCQlicmVhazsKKwkJY2FzZSBTSF9DTVRfMzJCSVRfRkFTVDoKKwkJCS8qCisJCQkgKiBUaGUgMzItYml0ICJmYXN0IiB0aW1lciBoYXMgYSBzaW5nbGUgY2hhbm5lbCBhdCBod2lkeAorCQkJICogNSBidXQgaXMgbG9jYXRlZCBhdCBvZmZzZXQgMHg0MCBpbnN0ZWFkIG9mIDB4NjAgZm9yCisJCQkgKiBzb21lIHJlYXNvbi4KKwkJCSAqLworCQkJY2gtPmlvY3RybCA9IGNtdC0+bWFwYmFzZSArIDB4NDA7CisJCQlicmVhazsKKwkJY2FzZSBTSF9DTVRfNDhCSVRfR0VOMjoKKwkJCWNoLT5pb3N0YXJ0ID0gY210LT5tYXBiYXNlICsgY2gtPmh3aWR4ICogMHgxMDA7CisJCQljaC0+aW9jdHJsID0gY2gtPmlvc3RhcnQgKyAweDEwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY210LT5pbmZvLT53aWR0aCA9PSAoc2l6ZW9mKGNoLT5tYXhfbWF0Y2hfdmFsdWUpICogOCkpCisJCWNoLT5tYXhfbWF0Y2hfdmFsdWUgPSB+MDsKKwllbHNlCisJCWNoLT5tYXhfbWF0Y2hfdmFsdWUgPSAoMSA8PCBjbXQtPmluZm8tPndpZHRoKSAtIDE7CisKKwljaC0+bWF0Y2hfdmFsdWUgPSBjaC0+bWF4X21hdGNoX3ZhbHVlOworCXJhd19zcGluX2xvY2tfaW5pdCgmY2gtPmxvY2spOworCisJaWYgKGNtdC0+bGVnYWN5KSB7CisJCWNoLT50aW1lcl9iaXQgPSBjaC0+aHdpZHg7CisJfSBlbHNlIHsKKwkJY2gtPnRpbWVyX2JpdCA9IGNtdC0+aW5mby0+bW9kZWwgPT0gU0hfQ01UXzQ4QklUX0dFTjIKKwkJCSAgICAgID8gMCA6IGNoLT5od2lkeDsKKwl9CisKKwlyZXQgPSBzaF9jbXRfcmVnaXN0ZXIoY2gsIGRldl9uYW1lKCZjbXQtPnBkZXYtPmRldiksCisJCQkgICAgICBjbG9ja2V2ZW50LCBjbG9ja3NvdXJjZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbXQtPnBkZXYtPmRldiwgImNoJXU6IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsCisJCQljaC0+aW5kZXgpOworCQlyZXR1cm4gcmV0OworCX0KKwljaC0+Y3NfZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X21hcF9tZW1vcnkoc3RydWN0IHNoX2NtdF9kZXZpY2UgKmNtdCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShjbXQtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZjbXQtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJY210LT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJaWYgKGNtdC0+bWFwYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNtdC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9tYXBfbWVtb3J5X2xlZ2FjeShzdHJ1Y3Qgc2hfY210X2RldmljZSAqY210KQoreworCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IGNtdC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXMsICpyZXMyOworCisJLyogbWFwIG1lbW9yeSwgbGV0IG1hcGJhc2VfY2ggcG9pbnQgdG8gb3VyIGNoYW5uZWwgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoY210LT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKLQkJZ290byBlcnIwOworCQlkZXZfZXJyKCZjbXQtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJY210LT5tYXBiYXNlX2NoID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGNtdC0+bWFwYmFzZV9jaCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNtdC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCS8qIG9wdGlvbmFsIHJlc291cmNlIGZvciB0aGUgc2hhcmVkIHRpbWVyIHN0YXJ0L3N0b3AgcmVnaXN0ZXIgKi8KLQlyZXMyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHAtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKLQotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocC0+cGRldiwgMCk7Ci0JaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnFcbiIpOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JLyogbWFwIG1lbW9yeSwgbGV0IG1hcGJhc2UgcG9pbnQgdG8gb3VyIGNoYW5uZWwgKi8KLQlwLT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JaWYgKHAtPm1hcGJhc2UgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7Ci0JCWdvdG8gZXJyMDsKLQl9CisJcmVzMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShjbXQtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKIAogCS8qIG1hcCBzZWNvbmQgcmVzb3VyY2UgZm9yIENNU1RSICovCi0JcC0+bWFwYmFzZV9zdHIgPSBpb3JlbWFwX25vY2FjaGUocmVzMiA/IHJlczItPnN0YXJ0IDoKLQkJCQkJIHJlcy0+c3RhcnQgLSBjZmctPmNoYW5uZWxfb2Zmc2V0LAotCQkJCQkgcmVzMiA/IHJlc291cmNlX3NpemUocmVzMikgOiAyKTsKLQlpZiAocC0+bWFwYmFzZV9zdHIgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIHNlY29uZCBtZW1vcnlcbiIpOwotCQlnb3RvIGVycjE7CisJY210LT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlczIgPyByZXMyLT5zdGFydCA6CisJCQkJICAgICAgIHJlcy0+c3RhcnQgLSBjZmctPmNoYW5uZWxfb2Zmc2V0LAorCQkJCSAgICAgICByZXMyID8gcmVzb3VyY2Vfc2l6ZShyZXMyKSA6IDIpOworCWlmIChjbXQtPm1hcGJhc2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZjbXQtPnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gc2Vjb25kIG1lbW9yeVxuIik7CisJCWlvdW5tYXAoY210LT5tYXBiYXNlX2NoKTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQkvKiByZXF1ZXN0IGlycSB1c2luZyBzZXR1cF9pcnEoKSAodG9vIGVhcmx5IGZvciByZXF1ZXN0X2lycSgpKSAqLwotCXAtPmlycWFjdGlvbi5uYW1lID0gZGV2X25hbWUoJnAtPnBkZXYtPmRldik7Ci0JcC0+aXJxYWN0aW9uLmhhbmRsZXIgPSBzaF9jbXRfaW50ZXJydXB0OwotCXAtPmlycWFjdGlvbi5kZXZfaWQgPSBwOwotCXAtPmlycWFjdGlvbi5mbGFncyA9IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwgfCBJUlFGX05PQkFMQU5DSU5HOwotCi0JLyogZ2V0IGhvbGQgb2YgY2xvY2sgKi8KLQlwLT5jbGsgPSBjbGtfZ2V0KCZwLT5wZGV2LT5kZXYsICJjbXRfZmNrIik7Ci0JaWYgKElTX0VSUihwLT5jbGspKSB7Ci0JCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xvY2tcbiIpOwotCQlyZXQgPSBQVFJfRVJSKHAtPmNsayk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQlyZXQgPSBjbGtfcHJlcGFyZShwLT5jbGspOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjM7Ci0KLQlpZiAocmVzMiAmJiAocmVzb3VyY2Vfc2l6ZShyZXMyKSA9PSA0KSkgewotCQkvKiBhc3N1bWUgYm90aCBDTVNUUiBhbmQgQ01DU1IgdG8gYmUgMzItYml0ICovCi0JCXAtPnJlYWRfY29udHJvbCA9IHNoX2NtdF9yZWFkMzI7Ci0JCXAtPndyaXRlX2NvbnRyb2wgPSBzaF9jbXRfd3JpdGUzMjsKLQl9IGVsc2UgewotCQlwLT5yZWFkX2NvbnRyb2wgPSBzaF9jbXRfcmVhZDE2OwotCQlwLT53cml0ZV9jb250cm9sID0gc2hfY210X3dyaXRlMTY7Ci0JfQotCi0JaWYgKHJlc291cmNlX3NpemUocmVzKSA9PSA2KSB7Ci0JCXAtPndpZHRoID0gMTY7Ci0JCXAtPnJlYWRfY291bnQgPSBzaF9jbXRfcmVhZDE2OwotCQlwLT53cml0ZV9jb3VudCA9IHNoX2NtdF93cml0ZTE2OwotCQlwLT5vdmVyZmxvd19iaXQgPSAweDgwOwotCQlwLT5jbGVhcl9iaXRzID0gfjB4ODA7Ci0JfSBlbHNlIHsKLQkJcC0+d2lkdGggPSAzMjsKLQkJcC0+cmVhZF9jb3VudCA9IHNoX2NtdF9yZWFkMzI7Ci0JCXAtPndyaXRlX2NvdW50ID0gc2hfY210X3dyaXRlMzI7Ci0JCXAtPm92ZXJmbG93X2JpdCA9IDB4ODAwMDsKLQkJcC0+Y2xlYXJfYml0cyA9IH4weGMwMDA7Ci0JfQotCi0JaWYgKHAtPndpZHRoID09IChzaXplb2YocC0+bWF4X21hdGNoX3ZhbHVlKSAqIDgpKQotCQlwLT5tYXhfbWF0Y2hfdmFsdWUgPSB+MDsKKwkvKiBpZGVudGlmeSB0aGUgbW9kZWwgYmFzZWQgb24gdGhlIHJlc291cmNlcyAqLworCWlmIChyZXNvdXJjZV9zaXplKHJlcykgPT0gNikKKwkJY210LT5pbmZvID0gJnNoX2NtdF9pbmZvW1NIX0NNVF8xNkJJVF07CisJZWxzZSBpZiAocmVzMiAmJiAocmVzb3VyY2Vfc2l6ZShyZXMyKSA9PSA0KSkKKwkJY210LT5pbmZvID0gJnNoX2NtdF9pbmZvW1NIX0NNVF80OEJJVF9HRU4yXTsKIAllbHNlCi0JCXAtPm1heF9tYXRjaF92YWx1ZSA9ICgxIDw8IHAtPndpZHRoKSAtIDE7Ci0KLQlwLT5tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKLQlyYXdfc3Bpbl9sb2NrX2luaXQoJnAtPmxvY2spOwotCi0JcmV0ID0gc2hfY210X3JlZ2lzdGVyKHAsIChjaGFyICopZGV2X25hbWUoJnAtPnBkZXYtPmRldiksCi0JCQkgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAotCQkJICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAicmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyNDsKLQl9Ci0JcC0+Y3NfZW5hYmxlZCA9IGZhbHNlOwotCi0JcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7Ci0JCWdvdG8gZXJyNDsKLQl9Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwKTsKKwkJY210LT5pbmZvID0gJnNoX2NtdF9pbmZvW1NIX0NNVF8zMkJJVF07CiAKIAlyZXR1cm4gMDsKLWVycjQ6Ci0JY2xrX3VucHJlcGFyZShwLT5jbGspOwotZXJyMzoKLQljbGtfcHV0KHAtPmNsayk7Ci1lcnIyOgotCWlvdW5tYXAocC0+bWFwYmFzZV9zdHIpOwotZXJyMToKLQlpb3VubWFwKHAtPm1hcGJhc2UpOwotZXJyMDoKK30KKworc3RhdGljIHZvaWQgc2hfY210X3VubWFwX21lbW9yeShzdHJ1Y3Qgc2hfY210X2RldmljZSAqY210KQoreworCWlvdW5tYXAoY210LT5tYXBiYXNlKTsKKwlpZiAoY210LT5tYXBiYXNlX2NoKQorCQlpb3VubWFwKGNtdC0+bWFwYmFzZV9jaCk7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X3NldHVwKHN0cnVjdCBzaF9jbXRfZGV2aWNlICpjbXQsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX3RpbWVyX2NvbmZpZyAqY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQgPSBwZGV2LT5pZF9lbnRyeTsKKwl1bnNpZ25lZCBpbnQgaHdfY2hhbm5lbHM7CisJaW50IHJldDsKKworCW1lbXNldChjbXQsIDAsIHNpemVvZigqY210KSk7CisJY210LT5wZGV2ID0gcGRldjsKKworCWlmICghY2ZnKSB7CisJCWRldl9lcnIoJmNtdC0+cGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwljbXQtPmluZm8gPSAoY29uc3Qgc3RydWN0IHNoX2NtdF9pbmZvICopaWQtPmRyaXZlcl9kYXRhOworCWNtdC0+bGVnYWN5ID0gY210LT5pbmZvID8gZmFsc2UgOiB0cnVlOworCisJLyogR2V0IGhvbGQgb2YgY2xvY2suICovCisJY210LT5jbGsgPSBjbGtfZ2V0KCZjbXQtPnBkZXYtPmRldiwgY210LT5sZWdhY3kgPyAiY210X2ZjayIgOiAiZmNrIik7CisJaWYgKElTX0VSUihjbXQtPmNsaykpIHsKKwkJZGV2X2VycigmY210LT5wZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY210LT5jbGspOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlKGNtdC0+Y2xrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY2xrX3B1dDsKKworCS8qCisJICogTWFwIHRoZSBtZW1vcnkgcmVzb3VyY2UocykuIFdlIG5lZWQgdG8gc3VwcG9ydCBib3RoIHRoZSBsZWdhY3kKKwkgKiBwbGF0Zm9ybSBkZXZpY2UgY29uZmlndXJhdGlvbiAod2l0aCBvbmUgZGV2aWNlIHBlciBjaGFubmVsKSBhbmQgdGhlCisJICogbmV3IHZlcnNpb24gKHdpdGggbXVsdGlwbGUgY2hhbm5lbHMgcGVyIGRldmljZSkuCisJICovCisJaWYgKGNtdC0+bGVnYWN5KQorCQlyZXQgPSBzaF9jbXRfbWFwX21lbW9yeV9sZWdhY3koY210KTsKKwllbHNlCisJCXJldCA9IHNoX2NtdF9tYXBfbWVtb3J5KGNtdCk7CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY2xrX3VucHJlcGFyZTsKKworCS8qIEFsbG9jYXRlIGFuZCBzZXR1cCB0aGUgY2hhbm5lbHMuICovCisJaWYgKGNtdC0+bGVnYWN5KSB7CisJCWNtdC0+bnVtX2NoYW5uZWxzID0gMTsKKwkJaHdfY2hhbm5lbHMgPSAwOworCX0gZWxzZSB7CisJCWNtdC0+bnVtX2NoYW5uZWxzID0gaHdlaWdodDgoY2ZnLT5jaGFubmVsc19tYXNrKTsKKwkJaHdfY2hhbm5lbHMgPSBjZmctPmNoYW5uZWxzX21hc2s7CisJfQorCisJY210LT5jaGFubmVscyA9IGt6YWxsb2MoY210LT5udW1fY2hhbm5lbHMgKiBzaXplb2YoKmNtdC0+Y2hhbm5lbHMpLAorCQkJCUdGUF9LRVJORUwpOworCWlmIChjbXQtPmNoYW5uZWxzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJaWYgKGNtdC0+bGVnYWN5KSB7CisJCXJldCA9IHNoX2NtdF9zZXR1cF9jaGFubmVsKCZjbXQtPmNoYW5uZWxzWzBdLAorCQkJCQkgICBjZmctPnRpbWVyX2JpdCwgY2ZnLT50aW1lcl9iaXQsCisJCQkJCSAgIGNmZy0+Y2xvY2tldmVudF9yYXRpbmcgIT0gMCwKKwkJCQkJICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcgIT0gMCwgY210KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycl91bm1hcDsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgbWFzayA9IGh3X2NoYW5uZWxzOworCQl1bnNpZ25lZCBpbnQgaTsKKworCQkvKgorCQkgKiBVc2UgdGhlIGZpcnN0IGNoYW5uZWwgYXMgYSBjbG9jayBldmVudCBkZXZpY2UgYW5kIHRoZSBzZWNvbmQKKwkJICogY2hhbm5lbCBhcyBhIGNsb2NrIHNvdXJjZS4gSWYgb25seSBvbmUgY2hhbm5lbCBpcyBhdmFpbGFibGUKKwkJICogdXNlIGl0IGZvciBib3RoLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNtdC0+bnVtX2NoYW5uZWxzOyArK2kpIHsKKwkJCXVuc2lnbmVkIGludCBod2lkeCA9IGZmcyhtYXNrKSAtIDE7CisJCQlib29sIGNsb2Nrc291cmNlID0gaSA9PSAxIHx8IGNtdC0+bnVtX2NoYW5uZWxzID09IDE7CisJCQlib29sIGNsb2NrZXZlbnQgPSBpID09IDA7CisKKwkJCXJldCA9IHNoX2NtdF9zZXR1cF9jaGFubmVsKCZjbXQtPmNoYW5uZWxzW2ldLCBpLCBod2lkeCwKKwkJCQkJCSAgIGNsb2NrZXZlbnQsIGNsb2Nrc291cmNlLAorCQkJCQkJICAgY210KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXJyX3VubWFwOworCisJCQltYXNrICY9IH4oMSA8PCBod2lkeCk7CisJCX0KKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjbXQpOworCisJcmV0dXJuIDA7CisKK2Vycl91bm1hcDoKKwlrZnJlZShjbXQtPmNoYW5uZWxzKTsKKwlzaF9jbXRfdW5tYXBfbWVtb3J5KGNtdCk7CitlcnJfY2xrX3VucHJlcGFyZToKKwljbGtfdW5wcmVwYXJlKGNtdC0+Y2xrKTsKK2Vycl9jbGtfcHV0OgorCWNsa19wdXQoY210LT5jbGspOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2hfY210X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNoX3RpbWVyX2NvbmZpZyAqY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNoX2NtdF9kZXZpY2UgKmNtdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKIAlpZiAoIWlzX2Vhcmx5X3BsYXRmb3JtX2RldmljZShwZGV2KSkgewpAQCAtODE4LDIwICsxMTAwLDIwIEBACiAJCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCX0KIAotCWlmIChwKSB7CisJaWYgKGNtdCkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAia2VwdCBhcyBlYXJseXRpbWVyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHAgPT0gTlVMTCkgeworCWNtdCA9IGt6YWxsb2Moc2l6ZW9mKCpjbXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY210ID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0ID0gc2hfY210X3NldHVwKHAsIHBkZXYpOworCXJldCA9IHNoX2NtdF9zZXR1cChjbXQsIHBkZXYpOwogCWlmIChyZXQpIHsKLQkJa2ZyZWUocCk7CisJCWtmcmVlKGNtdCk7CiAJCXBtX3J1bnRpbWVfaWRsZSgmcGRldi0+ZGV2KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC04MzksNyArMTEyMSw3IEBACiAJCXJldHVybiAwOwogCiAgb3V0OgotCWlmIChjZmctPmNsb2NrZXZlbnRfcmF0aW5nIHx8IGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKQorCWlmIChjbXQtPmhhc19jbG9ja2V2ZW50IHx8IGNtdC0+aGFzX2Nsb2Nrc291cmNlKQogCQlwbV9ydW50aW1lX2lycV9zYWZlKCZwZGV2LT5kZXYpOwogCWVsc2UKIAkJcG1fcnVudGltZV9pZGxlKCZwZGV2LT5kZXYpOwpAQCAtODUyLDEyICsxMTM0LDI0IEBACiAJcmV0dXJuIC1FQlVTWTsgLyogY2Fubm90IHVucmVnaXN0ZXIgY2xvY2tldmVudCBhbmQgY2xvY2tzb3VyY2UgKi8KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgc2hfY210X2lkX3RhYmxlW10gPSB7CisJeyAic2hfY210IiwgMCB9LAorCXsgInNoLWNtdC0xNiIsIChrZXJuZWxfdWxvbmdfdCkmc2hfY210X2luZm9bU0hfQ01UXzE2QklUXSB9LAorCXsgInNoLWNtdC0zMiIsIChrZXJuZWxfdWxvbmdfdCkmc2hfY210X2luZm9bU0hfQ01UXzMyQklUXSB9LAorCXsgInNoLWNtdC0zMi1mYXN0IiwgKGtlcm5lbF91bG9uZ190KSZzaF9jbXRfaW5mb1tTSF9DTVRfMzJCSVRfRkFTVF0gfSwKKwl7ICJzaC1jbXQtNDgiLCAoa2VybmVsX3Vsb25nX3QpJnNoX2NtdF9pbmZvW1NIX0NNVF80OEJJVF0gfSwKKwl7ICJzaC1jbXQtNDgtZ2VuMiIsIChrZXJuZWxfdWxvbmdfdCkmc2hfY210X2luZm9bU0hfQ01UXzQ4QklUX0dFTjJdIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgc2hfY210X2lkX3RhYmxlKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfY210X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNoX2NtdF9wcm9iZSwKIAkucmVtb3ZlCQk9IHNoX2NtdF9yZW1vdmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNoX2NtdCIsCi0JfQorCX0sCisJLmlkX3RhYmxlCT0gc2hfY210X2lkX3RhYmxlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2hfY210X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMKaW5kZXggZTMwZDc2ZS4uZjJjMWMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMKQEAgLTExLDM3ICsxMSw0OCBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotc3RydWN0IHNoX210dTJfcHJpdiB7CitzdHJ1Y3Qgc2hfbXR1Ml9kZXZpY2U7CisKK3N0cnVjdCBzaF9tdHUyX2NoYW5uZWwgeworCXN0cnVjdCBzaF9tdHUyX2RldmljZSAqbXR1OworCXVuc2lnbmVkIGludCBpbmRleDsKKworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxOworCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjZWQ7Cit9OworCitzdHJ1Y3Qgc2hfbXR1Ml9kZXZpY2UgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKIAl2b2lkIF9faW9tZW0gKm1hcGJhc2U7CiAJc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBpcnFhY3Rpb24gaXJxYWN0aW9uOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCXVuc2lnbmVkIGxvbmcgcGVyaW9kaWM7Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjZWQ7CisKKwlzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaGFubmVsczsKKwl1bnNpZ25lZCBpbnQgbnVtX2NoYW5uZWxzOworCisJYm9vbCBsZWdhY3k7CisJYm9vbCBoYXNfY2xvY2tldmVudDsKIH07CiAKIHN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNoX210dTJfbG9jayk7CkBAIC01NSw2ICs2Niw4OCBAQAogI2RlZmluZSBUQ05UIDUgLyogY2hhbm5lbCByZWdpc3RlciAqLwogI2RlZmluZSBUR1IgIDYgLyogY2hhbm5lbCByZWdpc3RlciAqLwogCisjZGVmaW5lIFRDUl9DQ0xSX05PTkUJCSgwIDw8IDUpCisjZGVmaW5lIFRDUl9DQ0xSX1RHUkEJCSgxIDw8IDUpCisjZGVmaW5lIFRDUl9DQ0xSX1RHUkIJCSgyIDw8IDUpCisjZGVmaW5lIFRDUl9DQ0xSX1NZTkMJCSgzIDw8IDUpCisjZGVmaW5lIFRDUl9DQ0xSX1RHUkMJCSg1IDw8IDUpCisjZGVmaW5lIFRDUl9DQ0xSX1RHUkQJCSg2IDw8IDUpCisjZGVmaW5lIFRDUl9DQ0xSX01BU0sJCSg3IDw8IDUpCisjZGVmaW5lIFRDUl9DS0VHX1JJU0lORwkJKDAgPDwgMykKKyNkZWZpbmUgVENSX0NLRUdfRkFMTElORwkoMSA8PCAzKQorI2RlZmluZSBUQ1JfQ0tFR19CT1RICQkoMiA8PCAzKQorI2RlZmluZSBUQ1JfQ0tFR19NQVNLCQkoMyA8PCAzKQorLyogVmFsdWVzIDQgdG8gNyBhcmUgY2hhbm5lbC1kZXBlbmRlbnQgKi8KKyNkZWZpbmUgVENSX1RQU0NfUDEJCSgwIDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX1A0CQkoMSA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19QMTYJCSgyIDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX1A2NAkJKDMgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0gwX1RDTEtBCSg0IDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX0NIMF9UQ0xLQgkoNSA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DSDBfVENMS0MJKDYgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0gwX1RDTEtECSg3IDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX0NIMV9UQ0xLQQkoNCA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DSDFfVENMS0IJKDUgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0gxX1AyNTYJKDYgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0gxX1RDTlQyCSg3IDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX0NIMl9UQ0xLQQkoNCA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DSDJfVENMS0IJKDUgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0gyX1RDTEtDCSg2IDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX0NIMl9QMTAyNAkoNyA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DSDM0X1AyNTYJKDQgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0gzNF9QMTAyNAkoNSA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DSDM0X1RDTEtBCSg2IDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX0NIMzRfVENMS0IJKDcgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfTUFTSwkJKDcgPDwgMCkKKworI2RlZmluZSBUTURSX0JGRQkJKDEgPDwgNikKKyNkZWZpbmUgVE1EUl9CRkIJCSgxIDw8IDUpCisjZGVmaW5lIFRNRFJfQkZBCQkoMSA8PCA0KQorI2RlZmluZSBUTURSX01EX05PUk1BTAkJKDAgPDwgMCkKKyNkZWZpbmUgVE1EUl9NRF9QV01fMQkJKDIgPDwgMCkKKyNkZWZpbmUgVE1EUl9NRF9QV01fMgkJKDMgPDwgMCkKKyNkZWZpbmUgVE1EUl9NRF9QSEFTRV8xCQkoNCA8PCAwKQorI2RlZmluZSBUTURSX01EX1BIQVNFXzIJCSg1IDw8IDApCisjZGVmaW5lIFRNRFJfTURfUEhBU0VfMwkJKDYgPDwgMCkKKyNkZWZpbmUgVE1EUl9NRF9QSEFTRV80CQkoNyA8PCAwKQorI2RlZmluZSBUTURSX01EX1BXTV9TWU5DCSg4IDw8IDApCisjZGVmaW5lIFRNRFJfTURfUFdNX0NPTVBfQ1JFU1QJKDEzIDw8IDApCisjZGVmaW5lIFRNRFJfTURfUFdNX0NPTVBfVFJPVUdICSgxNCA8PCAwKQorI2RlZmluZSBUTURSX01EX1BXTV9DT01QX0JPVEgJKDE1IDw8IDApCisjZGVmaW5lIFRNRFJfTURfTUFTSwkJKDE1IDw8IDApCisKKyNkZWZpbmUgVElPQ19JT0NIKG4pCQkoKG4pIDw8IDQpCisjZGVmaW5lIFRJT0NfSU9DTChuKQkJKChuKSA8PCAwKQorI2RlZmluZSBUSU9SX09DX1JFVEFJTgkJKDAgPDwgMCkKKyNkZWZpbmUgVElPUl9PQ18wX0NMRUFSCQkoMSA8PCAwKQorI2RlZmluZSBUSU9SX09DXzBfU0VUCQkoMiA8PCAwKQorI2RlZmluZSBUSU9SX09DXzBfVE9HR0xFCSgzIDw8IDApCisjZGVmaW5lIFRJT1JfT0NfMV9DTEVBUgkJKDUgPDwgMCkKKyNkZWZpbmUgVElPUl9PQ18xX1NFVAkJKDYgPDwgMCkKKyNkZWZpbmUgVElPUl9PQ18xX1RPR0dMRQkoNyA8PCAwKQorI2RlZmluZSBUSU9SX0lDX1JJU0lORwkJKDggPDwgMCkKKyNkZWZpbmUgVElPUl9JQ19GQUxMSU5HCQkoOSA8PCAwKQorI2RlZmluZSBUSU9SX0lDX0JPVEgJCSgxMCA8PCAwKQorI2RlZmluZSBUSU9SX0lDX1RDTlQJCSgxMiA8PCAwKQorI2RlZmluZSBUSU9SX01BU0sJCSgxNSA8PCAwKQorCisjZGVmaW5lIFRJRVJfVFRHRQkJKDEgPDwgNykKKyNkZWZpbmUgVElFUl9UVEdFMgkJKDEgPDwgNikKKyNkZWZpbmUgVElFUl9UQ0lFVQkJKDEgPDwgNSkKKyNkZWZpbmUgVElFUl9UQ0lFVgkJKDEgPDwgNCkKKyNkZWZpbmUgVElFUl9UR0lFRAkJKDEgPDwgMykKKyNkZWZpbmUgVElFUl9UR0lFQwkJKDEgPDwgMikKKyNkZWZpbmUgVElFUl9UR0lFQgkJKDEgPDwgMSkKKyNkZWZpbmUgVElFUl9UR0lFQQkJKDEgPDwgMCkKKworI2RlZmluZSBUU1JfVENGRAkJKDEgPDwgNykKKyNkZWZpbmUgVFNSX1RDRlUJCSgxIDw8IDUpCisjZGVmaW5lIFRTUl9UQ0ZWCQkoMSA8PCA0KQorI2RlZmluZSBUU1JfVEdGRAkJKDEgPDwgMykKKyNkZWZpbmUgVFNSX1RHRkMJCSgxIDw8IDIpCisjZGVmaW5lIFRTUl9UR0ZCCQkoMSA8PCAxKQorI2RlZmluZSBUU1JfVEdGQQkJKDEgPDwgMCkKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXR1Ml9yZWdfb2Zmc1tdID0gewogCVtUQ1JdID0gMCwKIAlbVE1EUl0gPSAxLApAQCAtNjUsMTM1ICsxNTgsMTQzIEBACiAJW1RHUl0gPSA4LAogfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX210dTJfcmVhZChzdHJ1Y3Qgc2hfbXR1Ml9wcml2ICpwLCBpbnQgcmVnX25yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX210dTJfcmVhZChzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaCwgaW50IHJlZ19ucikKIHsKLQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBwLT5tYXBiYXNlOwotCXVuc2lnbmVkIGxvbmcgb2ZmczsKLQotCWlmIChyZWdfbnIgPT0gVFNUUikKLQkJcmV0dXJuIGlvcmVhZDgoYmFzZSArIGNmZy0+Y2hhbm5lbF9vZmZzZXQpOwotCi0Jb2ZmcyA9IG10dTJfcmVnX29mZnNbcmVnX25yXTsKLQotCWlmICgocmVnX25yID09IFRDTlQpIHx8IChyZWdfbnIgPT0gVEdSKSkKLQkJcmV0dXJuIGlvcmVhZDE2KGJhc2UgKyBvZmZzKTsKLQllbHNlCi0JCXJldHVybiBpb3JlYWQ4KGJhc2UgKyBvZmZzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNoX210dTJfd3JpdGUoc3RydWN0IHNoX210dTJfcHJpdiAqcCwgaW50IHJlZ19uciwKLQkJCQl1bnNpZ25lZCBsb25nIHZhbHVlKQotewotCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IHAtPm1hcGJhc2U7CiAJdW5zaWduZWQgbG9uZyBvZmZzOwogCiAJaWYgKHJlZ19uciA9PSBUU1RSKSB7Ci0JCWlvd3JpdGU4KHZhbHVlLCBiYXNlICsgY2ZnLT5jaGFubmVsX29mZnNldCk7Ci0JCXJldHVybjsKKwkJaWYgKGNoLT5tdHUtPmxlZ2FjeSkKKwkJCXJldHVybiBpb3JlYWQ4KGNoLT5tdHUtPm1hcGJhc2UpOworCQllbHNlCisJCQlyZXR1cm4gaW9yZWFkOChjaC0+bXR1LT5tYXBiYXNlICsgMHgyODApOwogCX0KIAogCW9mZnMgPSBtdHUyX3JlZ19vZmZzW3JlZ19ucl07CiAKIAlpZiAoKHJlZ19uciA9PSBUQ05UKSB8fCAocmVnX25yID09IFRHUikpCi0JCWlvd3JpdGUxNih2YWx1ZSwgYmFzZSArIG9mZnMpOworCQlyZXR1cm4gaW9yZWFkMTYoY2gtPmJhc2UgKyBvZmZzKTsKIAllbHNlCi0JCWlvd3JpdGU4KHZhbHVlLCBiYXNlICsgb2Zmcyk7CisJCXJldHVybiBpb3JlYWQ4KGNoLT5iYXNlICsgb2Zmcyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNoX210dTJfc3RhcnRfc3RvcF9jaChzdHJ1Y3Qgc2hfbXR1Ml9wcml2ICpwLCBpbnQgc3RhcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfbXR1Ml93cml0ZShzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaCwgaW50IHJlZ19uciwKKwkJCQl1bnNpZ25lZCBsb25nIHZhbHVlKQogewotCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGxvbmcgb2ZmczsKKworCWlmIChyZWdfbnIgPT0gVFNUUikgeworCQlpZiAoY2gtPm10dS0+bGVnYWN5KQorCQkJcmV0dXJuIGlvd3JpdGU4KHZhbHVlLCBjaC0+bXR1LT5tYXBiYXNlKTsKKwkJZWxzZQorCQkJcmV0dXJuIGlvd3JpdGU4KHZhbHVlLCBjaC0+bXR1LT5tYXBiYXNlICsgMHgyODApOworCX0KKworCW9mZnMgPSBtdHUyX3JlZ19vZmZzW3JlZ19ucl07CisKKwlpZiAoKHJlZ19uciA9PSBUQ05UKSB8fCAocmVnX25yID09IFRHUikpCisJCWlvd3JpdGUxNih2YWx1ZSwgY2gtPmJhc2UgKyBvZmZzKTsKKwllbHNlCisJCWlvd3JpdGU4KHZhbHVlLCBjaC0+YmFzZSArIG9mZnMpOworfQorCitzdGF0aWMgdm9pZCBzaF9tdHUyX3N0YXJ0X3N0b3BfY2goc3RydWN0IHNoX210dTJfY2hhbm5lbCAqY2gsIGludCBzdGFydCkKK3sKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWx1ZTsKIAogCS8qIHN0YXJ0IHN0b3AgcmVnaXN0ZXIgc2hhcmVkIGJ5IG11bHRpcGxlIHRpbWVyIGNoYW5uZWxzICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzaF9tdHUyX2xvY2ssIGZsYWdzKTsKLQl2YWx1ZSA9IHNoX210dTJfcmVhZChwLCBUU1RSKTsKKwl2YWx1ZSA9IHNoX210dTJfcmVhZChjaCwgVFNUUik7CiAKIAlpZiAoc3RhcnQpCi0JCXZhbHVlIHw9IDEgPDwgY2ZnLT50aW1lcl9iaXQ7CisJCXZhbHVlIHw9IDEgPDwgY2gtPmluZGV4OwogCWVsc2UKLQkJdmFsdWUgJj0gfigxIDw8IGNmZy0+dGltZXJfYml0KTsKKwkJdmFsdWUgJj0gfigxIDw8IGNoLT5pbmRleCk7CiAKLQlzaF9tdHUyX3dyaXRlKHAsIFRTVFIsIHZhbHVlKTsKKwlzaF9tdHUyX3dyaXRlKGNoLCBUU1RSLCB2YWx1ZSk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNoX210dTJfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHNoX210dTJfZW5hYmxlKHN0cnVjdCBzaF9tdHUyX3ByaXYgKnApCitzdGF0aWMgaW50IHNoX210dTJfZW5hYmxlKHN0cnVjdCBzaF9tdHUyX2NoYW5uZWwgKmNoKQogeworCXVuc2lnbmVkIGxvbmcgcGVyaW9kaWM7CisJdW5zaWduZWQgbG9uZyByYXRlOwogCWludCByZXQ7CiAKLQlwbV9ydW50aW1lX2dldF9zeW5jKCZwLT5wZGV2LT5kZXYpOwotCWRldl9wbV9zeXNjb3JlX2RldmljZSgmcC0+cGRldi0+ZGV2LCB0cnVlKTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZjaC0+bXR1LT5wZGV2LT5kZXYpOworCWRldl9wbV9zeXNjb3JlX2RldmljZSgmY2gtPm10dS0+cGRldi0+ZGV2LCB0cnVlKTsKIAogCS8qIGVuYWJsZSBjbG9jayAqLwotCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKKwlyZXQgPSBjbGtfZW5hYmxlKGNoLT5tdHUtPmNsayk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIGNsb2NrXG4iKTsKKwkJZGV2X2VycigmY2gtPm10dS0+cGRldi0+ZGV2LCAiY2gldTogY2Fubm90IGVuYWJsZSBjbG9ja1xuIiwKKwkJCWNoLT5pbmRleCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogbWFrZSBzdXJlIGNoYW5uZWwgaXMgZGlzYWJsZWQgKi8KLQlzaF9tdHUyX3N0YXJ0X3N0b3BfY2gocCwgMCk7CisJc2hfbXR1Ml9zdGFydF9zdG9wX2NoKGNoLCAwKTsKIAotCXAtPnJhdGUgPSBjbGtfZ2V0X3JhdGUocC0+Y2xrKSAvIDY0OwotCXAtPnBlcmlvZGljID0gKHAtPnJhdGUgKyBIWi8yKSAvIEhaOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2gtPm10dS0+Y2xrKSAvIDY0OworCXBlcmlvZGljID0gKHJhdGUgKyBIWi8yKSAvIEhaOwogCi0JLyogIlBlcmlvZGljIENvdW50ZXIgT3BlcmF0aW9uIiAqLwotCXNoX210dTJfd3JpdGUocCwgVENSLCAweDIzKTsgLyogVEdSQSBjbGVhciwgZGl2aWRlIGNsb2NrIGJ5IDY0ICovCi0Jc2hfbXR1Ml93cml0ZShwLCBUSU9SLCAwKTsKLQlzaF9tdHUyX3dyaXRlKHAsIFRHUiwgcC0+cGVyaW9kaWMpOwotCXNoX210dTJfd3JpdGUocCwgVENOVCwgMCk7Ci0Jc2hfbXR1Ml93cml0ZShwLCBUTURSLCAwKTsKLQlzaF9tdHUyX3dyaXRlKHAsIFRJRVIsIDB4MDEpOworCS8qCisJICogIlBlcmlvZGljIENvdW50ZXIgT3BlcmF0aW9uIgorCSAqIENsZWFyIG9uIFRHUkEgY29tcGFyZSBtYXRjaCwgZGl2aWRlIGNsb2NrIGJ5IDY0LgorCSAqLworCXNoX210dTJfd3JpdGUoY2gsIFRDUiwgVENSX0NDTFJfVEdSQSB8IFRDUl9UUFNDX1A2NCk7CisJc2hfbXR1Ml93cml0ZShjaCwgVElPUiwgVElPQ19JT0NIKFRJT1JfT0NfMF9DTEVBUikgfAorCQkgICAgICBUSU9DX0lPQ0woVElPUl9PQ18wX0NMRUFSKSk7CisJc2hfbXR1Ml93cml0ZShjaCwgVEdSLCBwZXJpb2RpYyk7CisJc2hfbXR1Ml93cml0ZShjaCwgVENOVCwgMCk7CisJc2hfbXR1Ml93cml0ZShjaCwgVE1EUiwgVE1EUl9NRF9OT1JNQUwpOworCXNoX210dTJfd3JpdGUoY2gsIFRJRVIsIFRJRVJfVEdJRUEpOwogCiAJLyogZW5hYmxlIGNoYW5uZWwgKi8KLQlzaF9tdHUyX3N0YXJ0X3N0b3BfY2gocCwgMSk7CisJc2hfbXR1Ml9zdGFydF9zdG9wX2NoKGNoLCAxKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzaF9tdHUyX2Rpc2FibGUoc3RydWN0IHNoX210dTJfcHJpdiAqcCkKK3N0YXRpYyB2b2lkIHNoX210dTJfZGlzYWJsZShzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaCkKIHsKIAkvKiBkaXNhYmxlIGNoYW5uZWwgKi8KLQlzaF9tdHUyX3N0YXJ0X3N0b3BfY2gocCwgMCk7CisJc2hfbXR1Ml9zdGFydF9zdG9wX2NoKGNoLCAwKTsKIAogCS8qIHN0b3AgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShwLT5jbGspOworCWNsa19kaXNhYmxlKGNoLT5tdHUtPmNsayk7CiAKLQlkZXZfcG1fc3lzY29yZV9kZXZpY2UoJnAtPnBkZXYtPmRldiwgZmFsc2UpOwotCXBtX3J1bnRpbWVfcHV0KCZwLT5wZGV2LT5kZXYpOworCWRldl9wbV9zeXNjb3JlX2RldmljZSgmY2gtPm10dS0+cGRldi0+ZGV2LCBmYWxzZSk7CisJcG1fcnVudGltZV9wdXQoJmNoLT5tdHUtPnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzaF9tdHUyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHNoX210dTJfcHJpdiAqcCA9IGRldl9pZDsKKwlzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaCA9IGRldl9pZDsKIAogCS8qIGFja25vd2xlZGdlIGludGVycnVwdCAqLwotCXNoX210dTJfcmVhZChwLCBUU1IpOwotCXNoX210dTJfd3JpdGUocCwgVFNSLCAweGZlKTsKKwlzaF9tdHUyX3JlYWQoY2gsIFRTUik7CisJc2hfbXR1Ml93cml0ZShjaCwgVFNSLCB+VFNSX1RHRkEpOwogCiAJLyogbm90aWZ5IGNsb2NrZXZlbnQgbGF5ZXIgKi8KLQlwLT5jZWQuZXZlbnRfaGFuZGxlcigmcC0+Y2VkKTsKKwljaC0+Y2VkLmV2ZW50X2hhbmRsZXIoJmNoLT5jZWQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHN0cnVjdCBzaF9tdHUyX3ByaXYgKmNlZF90b19zaF9tdHUyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3N0YXRpYyBzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjZWRfdG9fc2hfbXR1MihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjZWQsIHN0cnVjdCBzaF9tdHUyX3ByaXYsIGNlZCk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjZWQsIHN0cnVjdCBzaF9tdHUyX2NoYW5uZWwsIGNlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX210dTJfY2xvY2tfZXZlbnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQogewotCXN0cnVjdCBzaF9tdHUyX3ByaXYgKnAgPSBjZWRfdG9fc2hfbXR1MihjZWQpOworCXN0cnVjdCBzaF9tdHUyX2NoYW5uZWwgKmNoID0gY2VkX3RvX3NoX210dTIoY2VkKTsKIAlpbnQgZGlzYWJsZWQgPSAwOwogCiAJLyogZGVhbCB3aXRoIG9sZCBzZXR0aW5nIGZpcnN0ICovCiAJc3dpdGNoIChjZWQtPm1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlzaF9tdHUyX2Rpc2FibGUocCk7CisJCXNoX210dTJfZGlzYWJsZShjaCk7CiAJCWRpc2FibGVkID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIwMiwxMiArMzAzLDEzIEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlkZXZfaW5mbygmcC0+cGRldi0+ZGV2LCAidXNlZCBmb3IgcGVyaW9kaWMgY2xvY2sgZXZlbnRzXG4iKTsKLQkJc2hfbXR1Ml9lbmFibGUocCk7CisJCWRldl9pbmZvKCZjaC0+bXR1LT5wZGV2LT5kZXYsCisJCQkgImNoJXU6IHVzZWQgZm9yIHBlcmlvZGljIGNsb2NrIGV2ZW50c1xuIiwgY2gtPmluZGV4KTsKKwkJc2hfbXR1Ml9lbmFibGUoY2gpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKIAkJaWYgKCFkaXNhYmxlZCkKLQkJCXNoX210dTJfZGlzYWJsZShwKTsKKwkJCXNoX210dTJfZGlzYWJsZShjaCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CiAJZGVmYXVsdDoKQEAgLTIxNywxMjUgKzMxOSwyMDcgQEAKIAogc3RhdGljIHZvaWQgc2hfbXR1Ml9jbG9ja19ldmVudF9zdXNwZW5kKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKIHsKLQlwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb2ZmKCZjZWRfdG9fc2hfbXR1MihjZWQpLT5wZGV2LT5kZXYpOworCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvZmYoJmNlZF90b19zaF9tdHUyKGNlZCktPm10dS0+cGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgc2hfbXR1Ml9jbG9ja19ldmVudF9yZXN1bWUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQogewotCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvbigmY2VkX3RvX3NoX210dTIoY2VkKS0+cGRldi0+ZGV2KTsKKwlwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb24oJmNlZF90b19zaF9tdHUyKGNlZCktPm10dS0+cGRldi0+ZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgc2hfbXR1Ml9yZWdpc3Rlcl9jbG9ja2V2ZW50KHN0cnVjdCBzaF9tdHUyX3ByaXYgKnAsCi0JCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQorc3RhdGljIHZvaWQgc2hfbXR1Ml9yZWdpc3Rlcl9jbG9ja2V2ZW50KHN0cnVjdCBzaF9tdHUyX2NoYW5uZWwgKmNoLAorCQkJCQljb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJmNoLT5jZWQ7CiAJaW50IHJldDsKIAotCW1lbXNldChjZWQsIDAsIHNpemVvZigqY2VkKSk7Ci0KIAljZWQtPm5hbWUgPSBuYW1lOwogCWNlZC0+ZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQzsKLQljZWQtPnJhdGluZyA9IHJhdGluZzsKLQljZWQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNlZC0+cmF0aW5nID0gMjAwOworCWNlZC0+Y3B1bWFzayA9IGNwdV9wb3NzaWJsZV9tYXNrOwogCWNlZC0+c2V0X21vZGUgPSBzaF9tdHUyX2Nsb2NrX2V2ZW50X21vZGU7CiAJY2VkLT5zdXNwZW5kID0gc2hfbXR1Ml9jbG9ja19ldmVudF9zdXNwZW5kOwogCWNlZC0+cmVzdW1lID0gc2hfbXR1Ml9jbG9ja19ldmVudF9yZXN1bWU7CiAKLQlkZXZfaW5mbygmcC0+cGRldi0+ZGV2LCAidXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iKTsKKwlkZXZfaW5mbygmY2gtPm10dS0+cGRldi0+ZGV2LCAiY2gldTogdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLAorCQkgY2gtPmluZGV4KTsKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKIAotCXJldCA9IHNldHVwX2lycShwLT5pcnFhY3Rpb24uaXJxLCAmcC0+aXJxYWN0aW9uKTsKKwlyZXQgPSByZXF1ZXN0X2lycShjaC0+aXJxLCBzaF9tdHUyX2ludGVycnVwdCwKKwkJCSAgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCB8IElSUUZfTk9CQUxBTkNJTkcsCisJCQkgIGRldl9uYW1lKCZjaC0+bXR1LT5wZGV2LT5kZXYpLCBjaCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCi0JCQlwLT5pcnFhY3Rpb24uaXJxKTsKKwkJZGV2X2VycigmY2gtPm10dS0+cGRldi0+ZGV2LCAiY2gldTogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAorCQkJY2gtPmluZGV4LCBjaC0+aXJxKTsKIAkJcmV0dXJuOwogCX0KIH0KIAotc3RhdGljIGludCBzaF9tdHUyX3JlZ2lzdGVyKHN0cnVjdCBzaF9tdHUyX3ByaXYgKnAsIGNoYXIgKm5hbWUsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZykKK3N0YXRpYyBpbnQgc2hfbXR1Ml9yZWdpc3RlcihzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBib29sIGNsb2NrZXZlbnQpCiB7Ci0JaWYgKGNsb2NrZXZlbnRfcmF0aW5nKQotCQlzaF9tdHUyX3JlZ2lzdGVyX2Nsb2NrZXZlbnQocCwgbmFtZSwgY2xvY2tldmVudF9yYXRpbmcpOworCWlmIChjbG9ja2V2ZW50KSB7CisJCWNoLT5tdHUtPmhhc19jbG9ja2V2ZW50ID0gdHJ1ZTsKKwkJc2hfbXR1Ml9yZWdpc3Rlcl9jbG9ja2V2ZW50KGNoLCBuYW1lKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaF9tdHUyX3NldHVwKHN0cnVjdCBzaF9tdHUyX3ByaXYgKnAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNoX210dTJfc2V0dXBfY2hhbm5lbChzdHJ1Y3Qgc2hfbXR1Ml9jaGFubmVsICpjaCwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCSBzdHJ1Y3Qgc2hfbXR1Ml9kZXZpY2UgKm10dSkKIHsKLQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNoYW5uZWxfb2Zmc2V0c1tdID0geworCQkweDMwMCwgMHgzODAsIDB4MDAwLAorCX07CisJYm9vbCBjbG9ja2V2ZW50OworCisJY2gtPm10dSA9IG10dTsKKworCWlmIChtdHUtPmxlZ2FjeSkgeworCQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBtdHUtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJCWNsb2NrZXZlbnQgPSBjZmctPmNsb2NrZXZlbnRfcmF0aW5nICE9IDA7CisKKwkJY2gtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEobXR1LT5wZGV2LCAwKTsKKwkJY2gtPmJhc2UgPSBtdHUtPm1hcGJhc2UgLSBjZmctPmNoYW5uZWxfb2Zmc2V0OworCQljaC0+aW5kZXggPSBjZmctPnRpbWVyX2JpdDsKKwl9IGVsc2UgeworCQljaGFyIG5hbWVbNl07CisKKwkJY2xvY2tldmVudCA9IHRydWU7CisKKwkJc3ByaW50ZihuYW1lLCAidGdpJXVhIiwgaW5kZXgpOworCQljaC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUobXR1LT5wZGV2LCBuYW1lKTsKKwkJY2gtPmJhc2UgPSBtdHUtPm1hcGJhc2UgKyBjaGFubmVsX29mZnNldHNbaW5kZXhdOworCQljaC0+aW5kZXggPSBpbmRleDsKKwl9CisKKwlpZiAoY2gtPmlycSA8IDApIHsKKwkJLyogU2tpcCBjaGFubmVscyB3aXRoIG5vIGRlY2xhcmVkIGludGVycnVwdC4gKi8KKwkJaWYgKCFtdHUtPmxlZ2FjeSkKKwkJCXJldHVybiAwOworCisJCWRldl9lcnIoJm10dS0+cGRldi0+ZGV2LCAiY2gldTogZmFpbGVkIHRvIGdldCBpcnFcbiIsCisJCQljaC0+aW5kZXgpOworCQlyZXR1cm4gY2gtPmlycTsKKwl9CisKKwlyZXR1cm4gc2hfbXR1Ml9yZWdpc3RlcihjaCwgZGV2X25hbWUoJm10dS0+cGRldi0+ZGV2KSwgY2xvY2tldmVudCk7Cit9CisKK3N0YXRpYyBpbnQgc2hfbXR1Ml9tYXBfbWVtb3J5KHN0cnVjdCBzaF9tdHUyX2RldmljZSAqbXR1KQorewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpcnEsIHJldDsKLQlyZXQgPSAtRU5YSU87CiAKLQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JcC0+cGRldiA9IHBkZXY7Ci0KLQlpZiAoIWNmZykgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcCk7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocC0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShtdHUtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOwotCQlnb3RvIGVycjA7CisJCWRldl9lcnIoJm10dS0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHAtPnBkZXYsIDApOwotCWlmIChpcnEgPCAwKSB7Ci0JCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaXJxXG4iKTsKLQkJZ290byBlcnIwOworCW10dS0+bWFwYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChtdHUtPm1hcGJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qCisJICogSW4gbGVnYWN5IHBsYXRmb3JtIGRldmljZSBjb25maWd1cmF0aW9uICh3aXRoIG9uZSBkZXZpY2UgcGVyIGNoYW5uZWwpCisJICogdGhlIHJlc291cmNlIHBvaW50cyB0byB0aGUgY2hhbm5lbCBiYXNlIGFkZHJlc3MuCisJICovCisJaWYgKG10dS0+bGVnYWN5KSB7CisJCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IG10dS0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCW10dS0+bWFwYmFzZSArPSBjZmctPmNoYW5uZWxfb2Zmc2V0OwogCX0KIAotCS8qIG1hcCBtZW1vcnksIGxldCBtYXBiYXNlIHBvaW50IHRvIG91ciBjaGFubmVsICovCi0JcC0+bWFwYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmIChwLT5tYXBiYXNlID09IE5VTEwpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JLyogc2V0dXAgZGF0YSBmb3Igc2V0dXBfaXJxKCkgKHRvbyBlYXJseSBmb3IgcmVxdWVzdF9pcnEoKSkgKi8KLQlwLT5pcnFhY3Rpb24ubmFtZSA9IGRldl9uYW1lKCZwLT5wZGV2LT5kZXYpOwotCXAtPmlycWFjdGlvbi5oYW5kbGVyID0gc2hfbXR1Ml9pbnRlcnJ1cHQ7Ci0JcC0+aXJxYWN0aW9uLmRldl9pZCA9IHA7Ci0JcC0+aXJxYWN0aW9uLmlycSA9IGlycTsKLQlwLT5pcnFhY3Rpb24uZmxhZ3MgPSBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMIHwgSVJRRl9OT0JBTEFOQ0lORzsKLQotCS8qIGdldCBob2xkIG9mIGNsb2NrICovCi0JcC0+Y2xrID0gY2xrX2dldCgmcC0+cGRldi0+ZGV2LCAibXR1Ml9mY2siKTsKLQlpZiAoSVNfRVJSKHAtPmNsaykpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7Ci0JCXJldCA9IFBUUl9FUlIocC0+Y2xrKTsKLQkJZ290byBlcnIxOwotCX0KLQotCXJldCA9IGNsa19wcmVwYXJlKHAtPmNsayk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyMjsKLQotCXJldCA9IHNoX210dTJfcmVnaXN0ZXIocCwgKGNoYXIgKilkZXZfbmFtZSgmcC0+cGRldi0+ZGV2KSwKLQkJCSAgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnIzOwotCiAJcmV0dXJuIDA7Ci0gZXJyMzoKLQljbGtfdW5wcmVwYXJlKHAtPmNsayk7Ci0gZXJyMjoKLQljbGtfcHV0KHAtPmNsayk7Ci0gZXJyMToKLQlpb3VubWFwKHAtPm1hcGJhc2UpOwotIGVycjA6Cit9CisKK3N0YXRpYyB2b2lkIHNoX210dTJfdW5tYXBfbWVtb3J5KHN0cnVjdCBzaF9tdHUyX2RldmljZSAqbXR1KQoreworCWlmIChtdHUtPmxlZ2FjeSkgeworCQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBtdHUtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCQltdHUtPm1hcGJhc2UgLT0gY2ZnLT5jaGFubmVsX29mZnNldDsKKwl9CisKKwlpb3VubWFwKG10dS0+bWFwYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgc2hfbXR1Ml9zZXR1cChzdHJ1Y3Qgc2hfbXR1Ml9kZXZpY2UgKm10dSwKKwkJCSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkID0gcGRldi0+aWRfZW50cnk7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCW10dS0+cGRldiA9IHBkZXY7CisJbXR1LT5sZWdhY3kgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAobXR1LT5sZWdhY3kgJiYgIWNmZykgeworCQlkZXZfZXJyKCZtdHUtPnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogR2V0IGhvbGQgb2YgY2xvY2suICovCisJbXR1LT5jbGsgPSBjbGtfZ2V0KCZtdHUtPnBkZXYtPmRldiwgbXR1LT5sZWdhY3kgPyAibXR1Ml9mY2siIDogImZjayIpOworCWlmIChJU19FUlIobXR1LT5jbGspKSB7CisJCWRldl9lcnIoJm10dS0+cGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKG10dS0+Y2xrKTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZShtdHUtPmNsayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2Nsa19wdXQ7CisKKwkvKiBNYXAgdGhlIG1lbW9yeSByZXNvdXJjZS4gKi8KKwlyZXQgPSBzaF9tdHUyX21hcF9tZW1vcnkobXR1KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZtdHUtPnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZ290byBlcnJfY2xrX3VucHJlcGFyZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGNoYW5uZWxzLiAqLworCWlmIChtdHUtPmxlZ2FjeSkKKwkJbXR1LT5udW1fY2hhbm5lbHMgPSAxOworCWVsc2UKKwkJbXR1LT5udW1fY2hhbm5lbHMgPSAzOworCisJbXR1LT5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKCptdHUtPmNoYW5uZWxzKSAqIG10dS0+bnVtX2NoYW5uZWxzLAorCQkJCUdGUF9LRVJORUwpOworCWlmIChtdHUtPmNoYW5uZWxzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJaWYgKG10dS0+bGVnYWN5KSB7CisJCXJldCA9IHNoX210dTJfc2V0dXBfY2hhbm5lbCgmbXR1LT5jaGFubmVsc1swXSwgMCwgbXR1KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycl91bm1hcDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbXR1LT5udW1fY2hhbm5lbHM7ICsraSkgeworCQkJcmV0ID0gc2hfbXR1Ml9zZXR1cF9jaGFubmVsKCZtdHUtPmNoYW5uZWxzW2ldLCBpLCBtdHUpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtdHUpOworCisJcmV0dXJuIDA7CisKK2Vycl91bm1hcDoKKwlrZnJlZShtdHUtPmNoYW5uZWxzKTsKKwlzaF9tdHUyX3VubWFwX21lbW9yeShtdHUpOworZXJyX2Nsa191bnByZXBhcmU6CisJY2xrX3VucHJlcGFyZShtdHUtPmNsayk7CitlcnJfY2xrX3B1dDoKKwljbGtfcHV0KG10dS0+Y2xrKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNoX210dTJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc2hfbXR1Ml9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNoX3RpbWVyX2NvbmZpZyAqY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNoX210dTJfZGV2aWNlICptdHUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0OwogCiAJaWYgKCFpc19lYXJseV9wbGF0Zm9ybV9kZXZpY2UocGRldikpIHsKQEAgLTM0MywyMCArNTI3LDIwIEBACiAJCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCX0KIAotCWlmIChwKSB7CisJaWYgKG10dSkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAia2VwdCBhcyBlYXJseXRpbWVyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHAgPT0gTlVMTCkgeworCW10dSA9IGt6YWxsb2Moc2l6ZW9mKCptdHUpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXR1ID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0ID0gc2hfbXR1Ml9zZXR1cChwLCBwZGV2KTsKKwlyZXQgPSBzaF9tdHUyX3NldHVwKG10dSwgcGRldik7CiAJaWYgKHJldCkgewotCQlrZnJlZShwKTsKKwkJa2ZyZWUobXR1KTsKIAkJcG1fcnVudGltZV9pZGxlKCZwZGV2LT5kZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTM2NCw3ICs1NDgsNyBAQAogCQlyZXR1cm4gMDsKIAogIG91dDoKLQlpZiAoY2ZnLT5jbG9ja2V2ZW50X3JhdGluZykKKwlpZiAobXR1LT5oYXNfY2xvY2tldmVudCkKIAkJcG1fcnVudGltZV9pcnFfc2FmZSgmcGRldi0+ZGV2KTsKIAllbHNlCiAJCXBtX3J1bnRpbWVfaWRsZSgmcGRldi0+ZGV2KTsKQEAgLTM3NywxMiArNTYxLDIwIEBACiAJcmV0dXJuIC1FQlVTWTsgLyogY2Fubm90IHVucmVnaXN0ZXIgY2xvY2tldmVudCAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzaF9tdHUyX2lkX3RhYmxlW10gPSB7CisJeyAic2hfbXR1MiIsIDEgfSwKKwl7ICJzaC1tdHUyIiwgMCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBzaF9tdHUyX2lkX3RhYmxlKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfbXR1Ml9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzaF9tdHUyX3Byb2JlLAogCS5yZW1vdmUJCT0gc2hfbXR1Ml9yZW1vdmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNoX210dTIiLAotCX0KKwl9LAorCS5pZF90YWJsZQk9IHNoX210dTJfaWRfdGFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tdHUyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCmluZGV4IGVjZDdiNjAuLjRiYTJjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwpAQCAtMTEsMzUgKzExLDQxIEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotc3RydWN0IHNoX3RtdV9wcml2IHsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2U7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBpcnFhY3Rpb24gaXJxYWN0aW9uOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CitlbnVtIHNoX3RtdV9tb2RlbCB7CisJU0hfVE1VX0xFR0FDWSwKKwlTSF9UTVUsCisJU0hfVE1VX1NIMywKK307CisKK3N0cnVjdCBzaF90bXVfZGV2aWNlOworCitzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgeworCXN0cnVjdCBzaF90bXVfZGV2aWNlICp0bXU7CisJdW5zaWduZWQgaW50IGluZGV4OworCisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdW5zaWduZWQgbG9uZyBwZXJpb2RpYzsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNlZDsKQEAgLTQ4LDYgKzU0LDIxIEBACiAJdW5zaWduZWQgaW50IGVuYWJsZV9jb3VudDsKIH07CiAKK3N0cnVjdCBzaF90bXVfZGV2aWNlIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJdm9pZCBfX2lvbWVtICptYXBiYXNlOworCXN0cnVjdCBjbGsgKmNsazsKKworCWVudW0gc2hfdG11X21vZGVsIG1vZGVsOworCisJc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaGFubmVsczsKKwl1bnNpZ25lZCBpbnQgbnVtX2NoYW5uZWxzOworCisJYm9vbCBoYXNfY2xvY2tldmVudDsKKwlib29sIGhhc19jbG9ja3NvdXJjZTsKK307CisKIHN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNoX3RtdV9sb2NrKTsKIAogI2RlZmluZSBUU1RSIC0xIC8qIHNoYXJlZCByZWdpc3RlciAqLwpAQCAtNTUsMTg5ICs3NiwyMDggQEAKICNkZWZpbmUgVENOVCAxIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KICNkZWZpbmUgVENSIDIgLyogY2hhbm5lbCByZWdpc3RlciAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2hfdG11X3JlYWQoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBpbnQgcmVnX25yKQorI2RlZmluZSBUQ1JfVU5GCQkJKDEgPDwgOCkKKyNkZWZpbmUgVENSX1VOSUUJCSgxIDw8IDUpCisjZGVmaW5lIFRDUl9UUFNDX0NMSzQJCSgwIDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX0NMSzE2CQkoMSA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DTEs2NAkJKDIgPDwgMCkKKyNkZWZpbmUgVENSX1RQU0NfQ0xLMjU2CQkoMyA8PCAwKQorI2RlZmluZSBUQ1JfVFBTQ19DTEsxMDI0CSg0IDw8IDApCisjZGVmaW5lIFRDUl9UUFNDX01BU0sJCSg3IDw8IDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaF90bXVfcmVhZChzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNoLCBpbnQgcmVnX25yKQogewotCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IHAtPm1hcGJhc2U7Ci0JdW5zaWduZWQgbG9uZyBvZmZzOwotCi0JaWYgKHJlZ19uciA9PSBUU1RSKQotCQlyZXR1cm4gaW9yZWFkOChiYXNlIC0gY2ZnLT5jaGFubmVsX29mZnNldCk7Ci0KLQlvZmZzID0gcmVnX25yIDw8IDI7Ci0KLQlpZiAocmVnX25yID09IFRDUikKLQkJcmV0dXJuIGlvcmVhZDE2KGJhc2UgKyBvZmZzKTsKLQllbHNlCi0JCXJldHVybiBpb3JlYWQzMihiYXNlICsgb2Zmcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF90bXVfd3JpdGUoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBpbnQgcmVnX25yLAotCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0Jc3RydWN0IHNoX3RpbWVyX2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gcC0+bWFwYmFzZTsKIAl1bnNpZ25lZCBsb25nIG9mZnM7CiAKIAlpZiAocmVnX25yID09IFRTVFIpIHsKLQkJaW93cml0ZTgodmFsdWUsIGJhc2UgLSBjZmctPmNoYW5uZWxfb2Zmc2V0KTsKLQkJcmV0dXJuOworCQlzd2l0Y2ggKGNoLT50bXUtPm1vZGVsKSB7CisJCWNhc2UgU0hfVE1VX0xFR0FDWToKKwkJCXJldHVybiBpb3JlYWQ4KGNoLT50bXUtPm1hcGJhc2UpOworCQljYXNlIFNIX1RNVV9TSDM6CisJCQlyZXR1cm4gaW9yZWFkOChjaC0+dG11LT5tYXBiYXNlICsgMik7CisJCWNhc2UgU0hfVE1VOgorCQkJcmV0dXJuIGlvcmVhZDgoY2gtPnRtdS0+bWFwYmFzZSArIDQpOworCQl9CiAJfQogCiAJb2ZmcyA9IHJlZ19uciA8PCAyOwogCiAJaWYgKHJlZ19uciA9PSBUQ1IpCi0JCWlvd3JpdGUxNih2YWx1ZSwgYmFzZSArIG9mZnMpOworCQlyZXR1cm4gaW9yZWFkMTYoY2gtPmJhc2UgKyBvZmZzKTsKIAllbHNlCi0JCWlvd3JpdGUzMih2YWx1ZSwgYmFzZSArIG9mZnMpOworCQlyZXR1cm4gaW9yZWFkMzIoY2gtPmJhc2UgKyBvZmZzKTsKIH0KIAotc3RhdGljIHZvaWQgc2hfdG11X3N0YXJ0X3N0b3BfY2goc3RydWN0IHNoX3RtdV9wcml2ICpwLCBpbnQgc3RhcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfdG11X3dyaXRlKHN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2gsIGludCByZWdfbnIsCisJCQkJdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZnM7CisKKwlpZiAocmVnX25yID09IFRTVFIpIHsKKwkJc3dpdGNoIChjaC0+dG11LT5tb2RlbCkgeworCQljYXNlIFNIX1RNVV9MRUdBQ1k6CisJCQlyZXR1cm4gaW93cml0ZTgodmFsdWUsIGNoLT50bXUtPm1hcGJhc2UpOworCQljYXNlIFNIX1RNVV9TSDM6CisJCQlyZXR1cm4gaW93cml0ZTgodmFsdWUsIGNoLT50bXUtPm1hcGJhc2UgKyAyKTsKKwkJY2FzZSBTSF9UTVU6CisJCQlyZXR1cm4gaW93cml0ZTgodmFsdWUsIGNoLT50bXUtPm1hcGJhc2UgKyA0KTsKKwkJfQorCX0KKworCW9mZnMgPSByZWdfbnIgPDwgMjsKKworCWlmIChyZWdfbnIgPT0gVENSKQorCQlpb3dyaXRlMTYodmFsdWUsIGNoLT5iYXNlICsgb2Zmcyk7CisJZWxzZQorCQlpb3dyaXRlMzIodmFsdWUsIGNoLT5iYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX3RtdV9zdGFydF9zdG9wX2NoKHN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2gsIGludCBzdGFydCkKK3sKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWx1ZTsKIAogCS8qIHN0YXJ0IHN0b3AgcmVnaXN0ZXIgc2hhcmVkIGJ5IG11bHRpcGxlIHRpbWVyIGNoYW5uZWxzICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzaF90bXVfbG9jaywgZmxhZ3MpOwotCXZhbHVlID0gc2hfdG11X3JlYWQocCwgVFNUUik7CisJdmFsdWUgPSBzaF90bXVfcmVhZChjaCwgVFNUUik7CiAKIAlpZiAoc3RhcnQpCi0JCXZhbHVlIHw9IDEgPDwgY2ZnLT50aW1lcl9iaXQ7CisJCXZhbHVlIHw9IDEgPDwgY2gtPmluZGV4OwogCWVsc2UKLQkJdmFsdWUgJj0gfigxIDw8IGNmZy0+dGltZXJfYml0KTsKKwkJdmFsdWUgJj0gfigxIDw8IGNoLT5pbmRleCk7CiAKLQlzaF90bXVfd3JpdGUocCwgVFNUUiwgdmFsdWUpOworCXNoX3RtdV93cml0ZShjaCwgVFNUUiwgdmFsdWUpOwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaF90bXVfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IF9fc2hfdG11X2VuYWJsZShzdHJ1Y3Qgc2hfdG11X3ByaXYgKnApCitzdGF0aWMgaW50IF9fc2hfdG11X2VuYWJsZShzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNoKQogewogCWludCByZXQ7CiAKIAkvKiBlbmFibGUgY2xvY2sgKi8KLQlyZXQgPSBjbGtfZW5hYmxlKHAtPmNsayk7CisJcmV0ID0gY2xrX2VuYWJsZShjaC0+dG11LT5jbGspOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBjbG9ja1xuIik7CisJCWRldl9lcnIoJmNoLT50bXUtPnBkZXYtPmRldiwgImNoJXU6IGNhbm5vdCBlbmFibGUgY2xvY2tcbiIsCisJCQljaC0+aW5kZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIG1ha2Ugc3VyZSBjaGFubmVsIGlzIGRpc2FibGVkICovCi0Jc2hfdG11X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisJc2hfdG11X3N0YXJ0X3N0b3BfY2goY2gsIDApOwogCiAJLyogbWF4aW11bSB0aW1lb3V0ICovCi0Jc2hfdG11X3dyaXRlKHAsIFRDT1IsIDB4ZmZmZmZmZmYpOwotCXNoX3RtdV93cml0ZShwLCBUQ05ULCAweGZmZmZmZmZmKTsKKwlzaF90bXVfd3JpdGUoY2gsIFRDT1IsIDB4ZmZmZmZmZmYpOworCXNoX3RtdV93cml0ZShjaCwgVENOVCwgMHhmZmZmZmZmZik7CiAKIAkvKiBjb25maWd1cmUgY2hhbm5lbCB0byBwYXJlbnQgY2xvY2sgLyA0LCBpcnEgb2ZmICovCi0JcC0+cmF0ZSA9IGNsa19nZXRfcmF0ZShwLT5jbGspIC8gNDsKLQlzaF90bXVfd3JpdGUocCwgVENSLCAweDAwMDApOworCWNoLT5yYXRlID0gY2xrX2dldF9yYXRlKGNoLT50bXUtPmNsaykgLyA0OworCXNoX3RtdV93cml0ZShjaCwgVENSLCBUQ1JfVFBTQ19DTEs0KTsKIAogCS8qIGVuYWJsZSBjaGFubmVsICovCi0Jc2hfdG11X3N0YXJ0X3N0b3BfY2gocCwgMSk7CisJc2hfdG11X3N0YXJ0X3N0b3BfY2goY2gsIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2hfdG11X2VuYWJsZShzdHJ1Y3Qgc2hfdG11X3ByaXYgKnApCitzdGF0aWMgaW50IHNoX3RtdV9lbmFibGUoc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCkKIHsKLQlpZiAocC0+ZW5hYmxlX2NvdW50KysgPiAwKQorCWlmIChjaC0+ZW5hYmxlX2NvdW50KysgPiAwKQogCQlyZXR1cm4gMDsKIAotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnAtPnBkZXYtPmRldik7Ci0JZGV2X3BtX3N5c2NvcmVfZGV2aWNlKCZwLT5wZGV2LT5kZXYsIHRydWUpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmNoLT50bXUtPnBkZXYtPmRldik7CisJZGV2X3BtX3N5c2NvcmVfZGV2aWNlKCZjaC0+dG11LT5wZGV2LT5kZXYsIHRydWUpOwogCi0JcmV0dXJuIF9fc2hfdG11X2VuYWJsZShwKTsKKwlyZXR1cm4gX19zaF90bXVfZW5hYmxlKGNoKTsKIH0KIAotc3RhdGljIHZvaWQgX19zaF90bXVfZGlzYWJsZShzdHJ1Y3Qgc2hfdG11X3ByaXYgKnApCitzdGF0aWMgdm9pZCBfX3NoX3RtdV9kaXNhYmxlKHN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2gpCiB7CiAJLyogZGlzYWJsZSBjaGFubmVsICovCi0Jc2hfdG11X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisJc2hfdG11X3N0YXJ0X3N0b3BfY2goY2gsIDApOwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGluIFRNVSBibG9jayAqLwotCXNoX3RtdV93cml0ZShwLCBUQ1IsIDB4MDAwMCk7CisJc2hfdG11X3dyaXRlKGNoLCBUQ1IsIFRDUl9UUFNDX0NMSzQpOwogCiAJLyogc3RvcCBjbG9jayAqLwotCWNsa19kaXNhYmxlKHAtPmNsayk7CisJY2xrX2Rpc2FibGUoY2gtPnRtdS0+Y2xrKTsKIH0KIAotc3RhdGljIHZvaWQgc2hfdG11X2Rpc2FibGUoc3RydWN0IHNoX3RtdV9wcml2ICpwKQorc3RhdGljIHZvaWQgc2hfdG11X2Rpc2FibGUoc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCkKIHsKLQlpZiAoV0FSTl9PTihwLT5lbmFibGVfY291bnQgPT0gMCkpCisJaWYgKFdBUk5fT04oY2gtPmVuYWJsZV9jb3VudCA9PSAwKSkKIAkJcmV0dXJuOwogCi0JaWYgKC0tcC0+ZW5hYmxlX2NvdW50ID4gMCkKKwlpZiAoLS1jaC0+ZW5hYmxlX2NvdW50ID4gMCkKIAkJcmV0dXJuOwogCi0JX19zaF90bXVfZGlzYWJsZShwKTsKKwlfX3NoX3RtdV9kaXNhYmxlKGNoKTsKIAotCWRldl9wbV9zeXNjb3JlX2RldmljZSgmcC0+cGRldi0+ZGV2LCBmYWxzZSk7Ci0JcG1fcnVudGltZV9wdXQoJnAtPnBkZXYtPmRldik7CisJZGV2X3BtX3N5c2NvcmVfZGV2aWNlKCZjaC0+dG11LT5wZGV2LT5kZXYsIGZhbHNlKTsKKwlwbV9ydW50aW1lX3B1dCgmY2gtPnRtdS0+cGRldi0+ZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgc2hfdG11X3NldF9uZXh0KHN0cnVjdCBzaF90bXVfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBkZWx0YSwKK3N0YXRpYyB2b2lkIHNoX3RtdV9zZXRfbmV4dChzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nIGRlbHRhLAogCQkJICAgIGludCBwZXJpb2RpYykKIHsKIAkvKiBzdG9wIHRpbWVyICovCi0Jc2hfdG11X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisJc2hfdG11X3N0YXJ0X3N0b3BfY2goY2gsIDApOwogCiAJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCi0Jc2hfdG11X3JlYWQocCwgVENSKTsKKwlzaF90bXVfcmVhZChjaCwgVENSKTsKIAogCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KLQlzaF90bXVfd3JpdGUocCwgVENSLCAweDAwMjApOworCXNoX3RtdV93cml0ZShjaCwgVENSLCBUQ1JfVU5JRSB8IFRDUl9UUFNDX0NMSzQpOwogCiAJLyogcmVsb2FkIGRlbHRhIHZhbHVlIGluIGNhc2Ugb2YgcGVyaW9kaWMgdGltZXIgKi8KIAlpZiAocGVyaW9kaWMpCi0JCXNoX3RtdV93cml0ZShwLCBUQ09SLCBkZWx0YSk7CisJCXNoX3RtdV93cml0ZShjaCwgVENPUiwgZGVsdGEpOwogCWVsc2UKLQkJc2hfdG11X3dyaXRlKHAsIFRDT1IsIDB4ZmZmZmZmZmYpOworCQlzaF90bXVfd3JpdGUoY2gsIFRDT1IsIDB4ZmZmZmZmZmYpOwogCi0Jc2hfdG11X3dyaXRlKHAsIFRDTlQsIGRlbHRhKTsKKwlzaF90bXVfd3JpdGUoY2gsIFRDTlQsIGRlbHRhKTsKIAogCS8qIHN0YXJ0IHRpbWVyICovCi0Jc2hfdG11X3N0YXJ0X3N0b3BfY2gocCwgMSk7CisJc2hfdG11X3N0YXJ0X3N0b3BfY2goY2gsIDEpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfdG11X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHNoX3RtdV9wcml2ICpwID0gZGV2X2lkOworCXN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2ggPSBkZXZfaWQ7CiAKIAkvKiBkaXNhYmxlIG9yIGFja25vd2xlZGdlIGludGVycnVwdCAqLwotCWlmIChwLT5jZWQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKQotCQlzaF90bXVfd3JpdGUocCwgVENSLCAweDAwMDApOworCWlmIChjaC0+Y2VkLm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCkKKwkJc2hfdG11X3dyaXRlKGNoLCBUQ1IsIFRDUl9UUFNDX0NMSzQpOwogCWVsc2UKLQkJc2hfdG11X3dyaXRlKHAsIFRDUiwgMHgwMDIwKTsKKwkJc2hfdG11X3dyaXRlKGNoLCBUQ1IsIFRDUl9VTklFIHwgVENSX1RQU0NfQ0xLNCk7CiAKIAkvKiBub3RpZnkgY2xvY2tldmVudCBsYXllciAqLwotCXAtPmNlZC5ldmVudF9oYW5kbGVyKCZwLT5jZWQpOworCWNoLT5jZWQuZXZlbnRfaGFuZGxlcigmY2gtPmNlZCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IHNoX3RtdV9wcml2ICpjc190b19zaF90bXUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3N0YXRpYyBzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNzX3RvX3NoX3RtdShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXJldHVybiBjb250YWluZXJfb2YoY3MsIHN0cnVjdCBzaF90bXVfcHJpdiwgY3MpOworCXJldHVybiBjb250YWluZXJfb2YoY3MsIHN0cnVjdCBzaF90bXVfY2hhbm5lbCwgY3MpOwogfQogCiBzdGF0aWMgY3ljbGVfdCBzaF90bXVfY2xvY2tzb3VyY2VfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXN0cnVjdCBzaF90bXVfcHJpdiAqcCA9IGNzX3RvX3NoX3RtdShjcyk7CisJc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCA9IGNzX3RvX3NoX3RtdShjcyk7CiAKLQlyZXR1cm4gc2hfdG11X3JlYWQocCwgVENOVCkgXiAweGZmZmZmZmZmOworCXJldHVybiBzaF90bXVfcmVhZChjaCwgVENOVCkgXiAweGZmZmZmZmZmOwogfQogCiBzdGF0aWMgaW50IHNoX3RtdV9jbG9ja3NvdXJjZV9lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQlzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAgPSBjc190b19zaF90bXUoY3MpOworCXN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2ggPSBjc190b19zaF90bXUoY3MpOwogCWludCByZXQ7CiAKLQlpZiAoV0FSTl9PTihwLT5jc19lbmFibGVkKSkKKwlpZiAoV0FSTl9PTihjaC0+Y3NfZW5hYmxlZCkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gc2hfdG11X2VuYWJsZShwKTsKKwlyZXQgPSBzaF90bXVfZW5hYmxlKGNoKTsKIAlpZiAoIXJldCkgewotCQlfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfaHooY3MsIHAtPnJhdGUpOwotCQlwLT5jc19lbmFibGVkID0gdHJ1ZTsKKwkJX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX2h6KGNzLCBjaC0+cmF0ZSk7CisJCWNoLT5jc19lbmFibGVkID0gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjQ1LDQ4ICsyODUsNDggQEAKIAogc3RhdGljIHZvaWQgc2hfdG11X2Nsb2Nrc291cmNlX2Rpc2FibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQlzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAgPSBjc190b19zaF90bXUoY3MpOworCXN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2ggPSBjc190b19zaF90bXUoY3MpOwogCi0JaWYgKFdBUk5fT04oIXAtPmNzX2VuYWJsZWQpKQorCWlmIChXQVJOX09OKCFjaC0+Y3NfZW5hYmxlZCkpCiAJCXJldHVybjsKIAotCXNoX3RtdV9kaXNhYmxlKHApOwotCXAtPmNzX2VuYWJsZWQgPSBmYWxzZTsKKwlzaF90bXVfZGlzYWJsZShjaCk7CisJY2gtPmNzX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgc2hfdG11X2Nsb2Nrc291cmNlX3N1c3BlbmQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQlzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAgPSBjc190b19zaF90bXUoY3MpOworCXN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2ggPSBjc190b19zaF90bXUoY3MpOwogCi0JaWYgKCFwLT5jc19lbmFibGVkKQorCWlmICghY2gtPmNzX2VuYWJsZWQpCiAJCXJldHVybjsKIAotCWlmICgtLXAtPmVuYWJsZV9jb3VudCA9PSAwKSB7Ci0JCV9fc2hfdG11X2Rpc2FibGUocCk7Ci0JCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvZmYoJnAtPnBkZXYtPmRldik7CisJaWYgKC0tY2gtPmVuYWJsZV9jb3VudCA9PSAwKSB7CisJCV9fc2hfdG11X2Rpc2FibGUoY2gpOworCQlwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb2ZmKCZjaC0+dG11LT5wZGV2LT5kZXYpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgc2hfdG11X2Nsb2Nrc291cmNlX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXN0cnVjdCBzaF90bXVfcHJpdiAqcCA9IGNzX3RvX3NoX3RtdShjcyk7CisJc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCA9IGNzX3RvX3NoX3RtdShjcyk7CiAKLQlpZiAoIXAtPmNzX2VuYWJsZWQpCisJaWYgKCFjaC0+Y3NfZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JaWYgKHAtPmVuYWJsZV9jb3VudCsrID09IDApIHsKLQkJcG1fZ2VucGRfc3lzY29yZV9wb3dlcm9uKCZwLT5wZGV2LT5kZXYpOwotCQlfX3NoX3RtdV9lbmFibGUocCk7CisJaWYgKGNoLT5lbmFibGVfY291bnQrKyA9PSAwKSB7CisJCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvbigmY2gtPnRtdS0+cGRldi0+ZGV2KTsKKwkJX19zaF90bXVfZW5hYmxlKGNoKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2hfdG11X3JlZ2lzdGVyX2Nsb2Nrc291cmNlKHN0cnVjdCBzaF90bXVfcHJpdiAqcCwKLQkJCQkgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyByYXRpbmcpCitzdGF0aWMgaW50IHNoX3RtdV9yZWdpc3Rlcl9jbG9ja3NvdXJjZShzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNoLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmcC0+Y3M7CisJc3RydWN0IGNsb2Nrc291cmNlICpjcyA9ICZjaC0+Y3M7CiAKIAljcy0+bmFtZSA9IG5hbWU7Ci0JY3MtPnJhdGluZyA9IHJhdGluZzsKKwljcy0+cmF0aW5nID0gMjAwOwogCWNzLT5yZWFkID0gc2hfdG11X2Nsb2Nrc291cmNlX3JlYWQ7CiAJY3MtPmVuYWJsZSA9IHNoX3RtdV9jbG9ja3NvdXJjZV9lbmFibGU7CiAJY3MtPmRpc2FibGUgPSBzaF90bXVfY2xvY2tzb3VyY2VfZGlzYWJsZTsKQEAgLTI5NSw0MyArMzM1LDQ0IEBACiAJY3MtPm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKTsKIAljcy0+ZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUzsKIAotCWRldl9pbmZvKCZwLT5wZGV2LT5kZXYsICJ1c2VkIGFzIGNsb2NrIHNvdXJjZVxuIik7CisJZGV2X2luZm8oJmNoLT50bXUtPnBkZXYtPmRldiwgImNoJXU6IHVzZWQgYXMgY2xvY2sgc291cmNlXG4iLAorCQkgY2gtPmluZGV4KTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggZHVtbXkgMSBIeiB2YWx1ZSwgZ2V0cyB1cGRhdGVkIGluIC0+ZW5hYmxlKCkgKi8KIAljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihjcywgMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfdG11X3ByaXYgKmNlZF90b19zaF90bXUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQorc3RhdGljIHN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2VkX3RvX3NoX3RtdShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjZWQsIHN0cnVjdCBzaF90bXVfcHJpdiwgY2VkKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNlZCwgc3RydWN0IHNoX3RtdV9jaGFubmVsLCBjZWQpOwogfQogCi1zdGF0aWMgdm9pZCBzaF90bXVfY2xvY2tfZXZlbnRfc3RhcnQoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBpbnQgcGVyaW9kaWMpCitzdGF0aWMgdm9pZCBzaF90bXVfY2xvY2tfZXZlbnRfc3RhcnQoc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCwgaW50IHBlcmlvZGljKQogewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJmNoLT5jZWQ7CiAKLQlzaF90bXVfZW5hYmxlKHApOworCXNoX3RtdV9lbmFibGUoY2gpOwogCi0JY2xvY2tldmVudHNfY29uZmlnKGNlZCwgcC0+cmF0ZSk7CisJY2xvY2tldmVudHNfY29uZmlnKGNlZCwgY2gtPnJhdGUpOwogCiAJaWYgKHBlcmlvZGljKSB7Ci0JCXAtPnBlcmlvZGljID0gKHAtPnJhdGUgKyBIWi8yKSAvIEhaOwotCQlzaF90bXVfc2V0X25leHQocCwgcC0+cGVyaW9kaWMsIDEpOworCQljaC0+cGVyaW9kaWMgPSAoY2gtPnJhdGUgKyBIWi8yKSAvIEhaOworCQlzaF90bXVfc2V0X25leHQoY2gsIGNoLT5wZXJpb2RpYywgMSk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBzaF90bXVfY2xvY2tfZXZlbnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQogewotCXN0cnVjdCBzaF90bXVfcHJpdiAqcCA9IGNlZF90b19zaF90bXUoY2VkKTsKKwlzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNoID0gY2VkX3RvX3NoX3RtdShjZWQpOwogCWludCBkaXNhYmxlZCA9IDA7CiAKIAkvKiBkZWFsIHdpdGggb2xkIHNldHRpbmcgZmlyc3QgKi8KIAlzd2l0Y2ggKGNlZC0+bW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQlzaF90bXVfZGlzYWJsZShwKTsKKwkJc2hfdG11X2Rpc2FibGUoY2gpOwogCQlkaXNhYmxlZCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zNDAsMTYgKzM4MSwxOCBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQkJZGV2X2luZm8oJnAtPnBkZXYtPmRldiwgInVzZWQgZm9yIHBlcmlvZGljIGNsb2NrIGV2ZW50c1xuIik7Ci0JCXNoX3RtdV9jbG9ja19ldmVudF9zdGFydChwLCAxKTsKKwkJZGV2X2luZm8oJmNoLT50bXUtPnBkZXYtPmRldiwKKwkJCSAiY2gldTogdXNlZCBmb3IgcGVyaW9kaWMgY2xvY2sgZXZlbnRzXG4iLCBjaC0+aW5kZXgpOworCQlzaF90bXVfY2xvY2tfZXZlbnRfc3RhcnQoY2gsIDEpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCWRldl9pbmZvKCZwLT5wZGV2LT5kZXYsICJ1c2VkIGZvciBvbmVzaG90IGNsb2NrIGV2ZW50c1xuIik7Ci0JCXNoX3RtdV9jbG9ja19ldmVudF9zdGFydChwLCAwKTsKKwkJZGV2X2luZm8oJmNoLT50bXUtPnBkZXYtPmRldiwKKwkJCSAiY2gldTogdXNlZCBmb3Igb25lc2hvdCBjbG9jayBldmVudHNcbiIsIGNoLT5pbmRleCk7CisJCXNoX3RtdV9jbG9ja19ldmVudF9zdGFydChjaCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCQlpZiAoIWRpc2FibGVkKQotCQkJc2hfdG11X2Rpc2FibGUocCk7CisJCQlzaF90bXVfZGlzYWJsZShjaCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CiAJZGVmYXVsdDoKQEAgLTM2MCwxNDcgKzQwMywyMzQgQEAKIHN0YXRpYyBpbnQgc2hfdG11X2Nsb2NrX2V2ZW50X25leHQodW5zaWduZWQgbG9uZyBkZWx0YSwKIAkJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0Jc3RydWN0IHNoX3RtdV9wcml2ICpwID0gY2VkX3RvX3NoX3RtdShjZWQpOworCXN0cnVjdCBzaF90bXVfY2hhbm5lbCAqY2ggPSBjZWRfdG9fc2hfdG11KGNlZCk7CiAKIAlCVUdfT04oY2VkLT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwogCiAJLyogcHJvZ3JhbSBuZXcgZGVsdGEgdmFsdWUgKi8KLQlzaF90bXVfc2V0X25leHQocCwgZGVsdGEsIDApOworCXNoX3RtdV9zZXRfbmV4dChjaCwgZGVsdGEsIDApOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzaF90bXVfY2xvY2tfZXZlbnRfc3VzcGVuZChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCiB7Ci0JcG1fZ2VucGRfc3lzY29yZV9wb3dlcm9mZigmY2VkX3RvX3NoX3RtdShjZWQpLT5wZGV2LT5kZXYpOworCXBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvZmYoJmNlZF90b19zaF90bXUoY2VkKS0+dG11LT5wZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBzaF90bXVfY2xvY2tfZXZlbnRfcmVzdW1lKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKIHsKLQlwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb24oJmNlZF90b19zaF90bXUoY2VkKS0+cGRldi0+ZGV2KTsKKwlwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb24oJmNlZF90b19zaF90bXUoY2VkKS0+dG11LT5wZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBzaF90bXVfcmVnaXN0ZXJfY2xvY2tldmVudChzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAsCi0JCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQorc3RhdGljIHZvaWQgc2hfdG11X3JlZ2lzdGVyX2Nsb2NrZXZlbnQoc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmcC0+Y2VkOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZjaC0+Y2VkOwogCWludCByZXQ7CiAKLQltZW1zZXQoY2VkLCAwLCBzaXplb2YoKmNlZCkpOwotCiAJY2VkLT5uYW1lID0gbmFtZTsKIAljZWQtPmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CiAJY2VkLT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwotCWNlZC0+cmF0aW5nID0gcmF0aW5nOworCWNlZC0+cmF0aW5nID0gMjAwOwogCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAJY2VkLT5zZXRfbmV4dF9ldmVudCA9IHNoX3RtdV9jbG9ja19ldmVudF9uZXh0OwogCWNlZC0+c2V0X21vZGUgPSBzaF90bXVfY2xvY2tfZXZlbnRfbW9kZTsKIAljZWQtPnN1c3BlbmQgPSBzaF90bXVfY2xvY2tfZXZlbnRfc3VzcGVuZDsKIAljZWQtPnJlc3VtZSA9IHNoX3RtdV9jbG9ja19ldmVudF9yZXN1bWU7CiAKLQlkZXZfaW5mbygmcC0+cGRldi0+ZGV2LCAidXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iKTsKKwlkZXZfaW5mbygmY2gtPnRtdS0+cGRldi0+ZGV2LCAiY2gldTogdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLAorCQkgY2gtPmluZGV4KTsKIAogCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoY2VkLCAxLCAweDMwMCwgMHhmZmZmZmZmZik7CiAKLQlyZXQgPSBzZXR1cF9pcnEocC0+aXJxYWN0aW9uLmlycSwgJnAtPmlycWFjdGlvbik7CisJcmV0ID0gcmVxdWVzdF9pcnEoY2gtPmlycSwgc2hfdG11X2ludGVycnVwdCwKKwkJCSAgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCB8IElSUUZfTk9CQUxBTkNJTkcsCisJCQkgIGRldl9uYW1lKCZjaC0+dG11LT5wZGV2LT5kZXYpLCBjaCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCi0JCQlwLT5pcnFhY3Rpb24uaXJxKTsKKwkJZGV2X2VycigmY2gtPnRtdS0+cGRldi0+ZGV2LCAiY2gldTogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAorCQkJY2gtPmluZGV4LCBjaC0+aXJxKTsKIAkJcmV0dXJuOwogCX0KIH0KIAotc3RhdGljIGludCBzaF90bXVfcmVnaXN0ZXIoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBjaGFyICpuYW1lLAotCQkgICAgdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZywKLQkJICAgIHVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nKQorc3RhdGljIGludCBzaF90bXVfcmVnaXN0ZXIoc3RydWN0IHNoX3RtdV9jaGFubmVsICpjaCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIGJvb2wgY2xvY2tldmVudCwgYm9vbCBjbG9ja3NvdXJjZSkKIHsKLQlpZiAoY2xvY2tldmVudF9yYXRpbmcpCi0JCXNoX3RtdV9yZWdpc3Rlcl9jbG9ja2V2ZW50KHAsIG5hbWUsIGNsb2NrZXZlbnRfcmF0aW5nKTsKLQllbHNlIGlmIChjbG9ja3NvdXJjZV9yYXRpbmcpCi0JCXNoX3RtdV9yZWdpc3Rlcl9jbG9ja3NvdXJjZShwLCBuYW1lLCBjbG9ja3NvdXJjZV9yYXRpbmcpOworCWlmIChjbG9ja2V2ZW50KSB7CisJCWNoLT50bXUtPmhhc19jbG9ja2V2ZW50ID0gdHJ1ZTsKKwkJc2hfdG11X3JlZ2lzdGVyX2Nsb2NrZXZlbnQoY2gsIG5hbWUpOworCX0gZWxzZSBpZiAoY2xvY2tzb3VyY2UpIHsKKwkJY2gtPnRtdS0+aGFzX2Nsb2Nrc291cmNlID0gdHJ1ZTsKKwkJc2hfdG11X3JlZ2lzdGVyX2Nsb2Nrc291cmNlKGNoLCBuYW1lKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaF90bXVfc2V0dXAoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBzaF90bXVfY2hhbm5lbF9zZXR1cChzdHJ1Y3Qgc2hfdG11X2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJYm9vbCBjbG9ja2V2ZW50LCBib29sIGNsb2Nrc291cmNlLAorCQkJCXN0cnVjdCBzaF90bXVfZGV2aWNlICp0bXUpCit7CisJLyogU2tpcCB1bnVzZWQgY2hhbm5lbHMuICovCisJaWYgKCFjbG9ja2V2ZW50ICYmICFjbG9ja3NvdXJjZSkKKwkJcmV0dXJuIDA7CisKKwljaC0+dG11ID0gdG11OworCisJaWYgKHRtdS0+bW9kZWwgPT0gU0hfVE1VX0xFR0FDWSkgeworCQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSB0bXUtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJCS8qCisJCSAqIFRoZSBTSDMgdmFyaWFudCAoU0g3NzB4LCBTSDc3MDUsIFNINzcxMCBhbmQgU0g3NzIwKSBtYXBzCisJCSAqIGNoYW5uZWwgcmVnaXN0ZXJzIGJsb2NrcyBhdCBiYXNlICsgMiArIDEyICogaW5kZXgsIHdoaWxlIGFsbAorCQkgKiBvdGhlciB2YXJpYW50cyBtYXAgdGhlbSBhdCBiYXNlICsgNCArIDEyICogaW5kZXguIFdlIGNhbgorCQkgKiBjb21wdXRlIHRoZSBpbmRleCBieSBqdXN0IGRpdmlkaW5nIGJ5IDEyLCB0aGUgMiBieXRlcyBvciA0CisJCSAqIGJ5dGVzIG9mZnNldCBiZWluZyBoaWRkZW4gYnkgdGhlIGludGVnZXIgZGl2aXNpb24uCisJCSAqLworCQljaC0+aW5kZXggPSBjZmctPmNoYW5uZWxfb2Zmc2V0IC8gMTI7CisJCWNoLT5iYXNlID0gdG11LT5tYXBiYXNlICsgY2ZnLT5jaGFubmVsX29mZnNldDsKKwl9IGVsc2UgeworCQljaC0+aW5kZXggPSBpbmRleDsKKworCQlpZiAodG11LT5tb2RlbCA9PSBTSF9UTVVfU0gzKQorCQkJY2gtPmJhc2UgPSB0bXUtPm1hcGJhc2UgKyA0ICsgY2gtPmluZGV4ICogMTI7CisJCWVsc2UKKwkJCWNoLT5iYXNlID0gdG11LT5tYXBiYXNlICsgOCArIGNoLT5pbmRleCAqIDEyOworCX0KKworCWNoLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHRtdS0+cGRldiwgY2gtPmluZGV4KTsKKwlpZiAoY2gtPmlycSA8IDApIHsKKwkJZGV2X2VycigmdG11LT5wZGV2LT5kZXYsICJjaCV1OiBmYWlsZWQgdG8gZ2V0IGlycVxuIiwKKwkJCWNoLT5pbmRleCk7CisJCXJldHVybiBjaC0+aXJxOworCX0KKworCWNoLT5jc19lbmFibGVkID0gZmFsc2U7CisJY2gtPmVuYWJsZV9jb3VudCA9IDA7CisKKwlyZXR1cm4gc2hfdG11X3JlZ2lzdGVyKGNoLCBkZXZfbmFtZSgmdG11LT5wZGV2LT5kZXYpLAorCQkJICAgICAgIGNsb2NrZXZlbnQsIGNsb2Nrc291cmNlKTsKK30KKworc3RhdGljIGludCBzaF90bXVfbWFwX21lbW9yeShzdHJ1Y3Qgc2hfdG11X2RldmljZSAqdG11KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRtdS0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnRtdS0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwl0bXUtPm1hcGJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAodG11LT5tYXBiYXNlID09IE5VTEwpCisJCXJldHVybiAtRU5YSU87CisKKwkvKgorCSAqIEluIGxlZ2FjeSBwbGF0Zm9ybSBkZXZpY2UgY29uZmlndXJhdGlvbiAod2l0aCBvbmUgZGV2aWNlIHBlciBjaGFubmVsKQorCSAqIHRoZSByZXNvdXJjZSBwb2ludHMgdG8gdGhlIGNoYW5uZWwgYmFzZSBhZGRyZXNzLgorCSAqLworCWlmICh0bXUtPm1vZGVsID09IFNIX1RNVV9MRUdBQ1kpIHsKKwkJc3RydWN0IHNoX3RpbWVyX2NvbmZpZyAqY2ZnID0gdG11LT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJdG11LT5tYXBiYXNlIC09IGNmZy0+Y2hhbm5lbF9vZmZzZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX3RtdV91bm1hcF9tZW1vcnkoc3RydWN0IHNoX3RtdV9kZXZpY2UgKnRtdSkKK3sKKwlpZiAodG11LT5tb2RlbCA9PSBTSF9UTVVfTEVHQUNZKSB7CisJCXN0cnVjdCBzaF90aW1lcl9jb25maWcgKmNmZyA9IHRtdS0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCXRtdS0+bWFwYmFzZSArPSBjZmctPmNoYW5uZWxfb2Zmc2V0OworCX0KKworCWlvdW5tYXAodG11LT5tYXBiYXNlKTsKK30KKworc3RhdGljIGludCBzaF90bXVfc2V0dXAoc3RydWN0IHNoX3RtdV9kZXZpY2UgKnRtdSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgaXJxLCByZXQ7Ci0JcmV0ID0gLUVOWElPOwotCi0JbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCXAtPnBkZXYgPSBwZGV2OworCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkID0gcGRldi0+aWRfZW50cnk7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKIAogCWlmICghY2ZnKSB7Ci0JCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7Ci0JCWdvdG8gZXJyMDsKKwkJZGV2X2VycigmdG11LT5wZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHApOworCXRtdS0+cGRldiA9IHBkZXY7CisJdG11LT5tb2RlbCA9IGlkLT5kcml2ZXJfZGF0YTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKLQkJZ290byBlcnIwOworCS8qIEdldCBob2xkIG9mIGNsb2NrLiAqLworCXRtdS0+Y2xrID0gY2xrX2dldCgmdG11LT5wZGV2LT5kZXYsCisJCQkgICB0bXUtPm1vZGVsID09IFNIX1RNVV9MRUdBQ1kgPyAidG11X2ZjayIgOiAiZmNrIik7CisJaWYgKElTX0VSUih0bXUtPmNsaykpIHsKKwkJZGV2X2VycigmdG11LT5wZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIodG11LT5jbGspOwogCX0KIAotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocC0+cGRldiwgMCk7Ci0JaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnFcbiIpOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JLyogbWFwIG1lbW9yeSwgbGV0IG1hcGJhc2UgcG9pbnQgdG8gb3VyIGNoYW5uZWwgKi8KLQlwLT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JaWYgKHAtPm1hcGJhc2UgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7Ci0JCWdvdG8gZXJyMDsKLQl9Ci0KLQkvKiBzZXR1cCBkYXRhIGZvciBzZXR1cF9pcnEoKSAodG9vIGVhcmx5IGZvciByZXF1ZXN0X2lycSgpKSAqLwotCXAtPmlycWFjdGlvbi5uYW1lID0gZGV2X25hbWUoJnAtPnBkZXYtPmRldik7Ci0JcC0+aXJxYWN0aW9uLmhhbmRsZXIgPSBzaF90bXVfaW50ZXJydXB0OwotCXAtPmlycWFjdGlvbi5kZXZfaWQgPSBwOwotCXAtPmlycWFjdGlvbi5pcnEgPSBpcnE7Ci0JcC0+aXJxYWN0aW9uLmZsYWdzID0gSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCB8IElSUUZfTk9CQUxBTkNJTkc7Ci0KLQkvKiBnZXQgaG9sZCBvZiBjbG9jayAqLwotCXAtPmNsayA9IGNsa19nZXQoJnAtPnBkZXYtPmRldiwgInRtdV9mY2siKTsKLQlpZiAoSVNfRVJSKHAtPmNsaykpIHsKLQkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7Ci0JCXJldCA9IFBUUl9FUlIocC0+Y2xrKTsKLQkJZ290byBlcnIxOwotCX0KLQotCXJldCA9IGNsa19wcmVwYXJlKHAtPmNsayk7CisJcmV0ID0gY2xrX3ByZXBhcmUodG11LT5jbGspOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2Nsa19wdXQ7CiAKLQlwLT5jc19lbmFibGVkID0gZmFsc2U7Ci0JcC0+ZW5hYmxlX2NvdW50ID0gMDsKKwkvKiBNYXAgdGhlIG1lbW9yeSByZXNvdXJjZS4gKi8KKwlyZXQgPSBzaF90bXVfbWFwX21lbW9yeSh0bXUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnRtdS0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQlnb3RvIGVycl9jbGtfdW5wcmVwYXJlOworCX0KIAotCXJldCA9IHNoX3RtdV9yZWdpc3RlcihwLCAoY2hhciAqKWRldl9uYW1lKCZwLT5wZGV2LT5kZXYpLAotCQkJICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKLQkJCSAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnIzOworCS8qIEFsbG9jYXRlIGFuZCBzZXR1cCB0aGUgY2hhbm5lbHMuICovCisJaWYgKHRtdS0+bW9kZWwgPT0gU0hfVE1VX0xFR0FDWSkKKwkJdG11LT5udW1fY2hhbm5lbHMgPSAxOworCWVsc2UKKwkJdG11LT5udW1fY2hhbm5lbHMgPSBod2VpZ2h0OChjZmctPmNoYW5uZWxzX21hc2spOworCisJdG11LT5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKCp0bXUtPmNoYW5uZWxzKSAqIHRtdS0+bnVtX2NoYW5uZWxzLAorCQkJCUdGUF9LRVJORUwpOworCWlmICh0bXUtPmNoYW5uZWxzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJaWYgKHRtdS0+bW9kZWwgPT0gU0hfVE1VX0xFR0FDWSkgeworCQlyZXQgPSBzaF90bXVfY2hhbm5lbF9zZXR1cCgmdG11LT5jaGFubmVsc1swXSwgMCwKKwkJCQkJICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZyAhPSAwLAorCQkJCQkgICBjZmctPmNsb2Nrc291cmNlX3JhdGluZyAhPSAwLCB0bXUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyX3VubWFwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFVzZSB0aGUgZmlyc3QgY2hhbm5lbCBhcyBhIGNsb2NrIGV2ZW50IGRldmljZSBhbmQgdGhlIHNlY29uZAorCQkgKiBjaGFubmVsIGFzIGEgY2xvY2sgc291cmNlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHRtdS0+bnVtX2NoYW5uZWxzOyArK2kpIHsKKwkJCXJldCA9IHNoX3RtdV9jaGFubmVsX3NldHVwKCZ0bXUtPmNoYW5uZWxzW2ldLCBpLAorCQkJCQkJICAgaSA9PSAwLCBpID09IDEsIHRtdSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRtdSk7CiAKIAlyZXR1cm4gMDsKIAotIGVycjM6Ci0JY2xrX3VucHJlcGFyZShwLT5jbGspOwotIGVycjI6Ci0JY2xrX3B1dChwLT5jbGspOwotIGVycjE6Ci0JaW91bm1hcChwLT5tYXBiYXNlKTsKLSBlcnIwOgorZXJyX3VubWFwOgorCWtmcmVlKHRtdS0+Y2hhbm5lbHMpOworCXNoX3RtdV91bm1hcF9tZW1vcnkodG11KTsKK2Vycl9jbGtfdW5wcmVwYXJlOgorCWNsa191bnByZXBhcmUodG11LT5jbGspOworZXJyX2Nsa19wdXQ6CisJY2xrX3B1dCh0bXUtPmNsayk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzaF90bXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnICpjZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc2hfdG11X2RldmljZSAqdG11ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaW50IHJldDsKIAogCWlmICghaXNfZWFybHlfcGxhdGZvcm1fZGV2aWNlKHBkZXYpKSB7CkBAIC01MDgsMjAgKzYzOCwyMCBAQAogCQlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAl9CiAKLQlpZiAocCkgeworCWlmICh0bXUpIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgImtlcHQgYXMgZWFybHl0aW1lclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwotCWlmIChwID09IE5VTEwpIHsKKwl0bXUgPSBremFsbG9jKHNpemVvZigqdG11KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRtdSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJldCA9IHNoX3RtdV9zZXR1cChwLCBwZGV2KTsKKwlyZXQgPSBzaF90bXVfc2V0dXAodG11LCBwZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWtmcmVlKHApOworCQlrZnJlZSh0bXUpOwogCQlwbV9ydW50aW1lX2lkbGUoJnBkZXYtPmRldik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNTI5LDcgKzY1OSw3IEBACiAJCXJldHVybiAwOwogCiAgb3V0OgotCWlmIChjZmctPmNsb2NrZXZlbnRfcmF0aW5nIHx8IGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKQorCWlmICh0bXUtPmhhc19jbG9ja2V2ZW50IHx8IHRtdS0+aGFzX2Nsb2Nrc291cmNlKQogCQlwbV9ydW50aW1lX2lycV9zYWZlKCZwZGV2LT5kZXYpOwogCWVsc2UKIAkJcG1fcnVudGltZV9pZGxlKCZwZGV2LT5kZXYpOwpAQCAtNTQyLDEyICs2NzIsMjEgQEAKIAlyZXR1cm4gLUVCVVNZOyAvKiBjYW5ub3QgdW5yZWdpc3RlciBjbG9ja2V2ZW50IGFuZCBjbG9ja3NvdXJjZSAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzaF90bXVfaWRfdGFibGVbXSA9IHsKKwl7ICJzaF90bXUiLCBTSF9UTVVfTEVHQUNZIH0sCisJeyAic2gtdG11IiwgU0hfVE1VIH0sCisJeyAic2gtdG11LXNoMyIsIFNIX1RNVV9TSDMgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBzaF90bXVfaWRfdGFibGUpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF90bXVfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2hfdG11X3Byb2JlLAogCS5yZW1vdmUJCT0gc2hfdG11X3JlbW92ZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAic2hfdG11IiwKLQl9CisJfSwKKwkuaWRfdGFibGUJPSBzaF90bXVfaWRfdGFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF90bXVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1tYXJjby5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1tYXJjby5jCmluZGV4IDdmNTM3NGQuLmRiZDMwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWFyY28uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1hcmNvLmMKQEAgLTI1MiwxNSArMjUyLDEzIEBACiB9CiAKIC8qIGluaXRpYWxpemUgdGhlIGtlcm5lbCBqaWZmeSB0aW1lciBzb3VyY2UgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzaXJmc29jX21hcmNvX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzaXJmc29jX21hcmNvX3RpbWVyX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTMyIHRpbWVyX2RpdjsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKLQkvKiB0aW1lcidzIGlucHV0IGNsb2NrIGlzIGlvIGNsb2NrICovCi0JY2xrID0gY2xrX2dldF9zeXMoImlvIiwgTlVMTCk7Ci0KKwljbGsgPSBvZl9jbGtfZ2V0KG5wLCAwKTsKIAlCVUdfT04oSVNfRVJSKGNsaykpOwogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIApAQCAtMzAzLDYgKzMwMSw2IEBACiAJaWYgKCFzaXJmc29jX3RpbWVyMV9pcnEuaXJxKQogCQlwYW5pYygiTm8gaXJxIHBhc3NlZCBmb3IgdGltZXIxIHZpYSBEVFxuIik7CiAKLQlzaXJmc29jX21hcmNvX3RpbWVyX2luaXQoKTsKKwlzaXJmc29jX21hcmNvX3RpbWVyX2luaXQobnApOwogfQogQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShzaXJmc29jX21hcmNvX3RpbWVyLCAic2lyZixtYXJjby10aWNrIiwgc2lyZnNvY19vZl90aW1lcl9pbml0ICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLXByaW1hMi5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1wcmltYTIuYwppbmRleCAxYTZiMmQ2Li5hNzIyYWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLXByaW1hMi5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItcHJpbWEyLmMKQEAgLTYxLDcgKzYxLDggQEAKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZSA9IGRldl9pZDsKIAotCVdBUk5fT04oIShyZWFkbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfU1RBVFVTKSAmIEJJVCgwKSkpOworCVdBUk5fT04oIShyZWFkbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfU1RBVFVTKSAmCisJCUJJVCgwKSkpOwogCiAJLyogY2xlYXIgdGltZXIwIGludGVycnVwdCAqLwogCXdyaXRlbF9yZWxheGVkKEJJVCgwKSwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9TVEFUVVMpOwpAQCAtNzcsOSArNzgsMTEgQEAKIAl1NjQgY3ljbGVzOwogCiAJLyogbGF0Y2ggdGhlIDY0LWJpdCB0aW1lciBjb3VudGVyICovCi0Jd3JpdGVsX3JlbGF4ZWQoU0lSRlNPQ19USU1FUl9MQVRDSF9CSVQsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0gpOworCXdyaXRlbF9yZWxheGVkKFNJUkZTT0NfVElNRVJfTEFUQ0hfQklULAorCQlzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0xBVENIKTsKIAljeWNsZXMgPSByZWFkbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0hFRF9ISSk7Ci0JY3ljbGVzID0gKGN5Y2xlcyA8PCAzMikgfCByZWFkbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0hFRF9MTyk7CisJY3ljbGVzID0gKGN5Y2xlcyA8PCAzMikgfAorCQlyZWFkbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0hFRF9MTyk7CiAKIAlyZXR1cm4gY3ljbGVzOwogfQpAQCAtODksMTEgKzkyLDEzIEBACiB7CiAJdW5zaWduZWQgbG9uZyBub3csIG5leHQ7CiAKLQl3cml0ZWxfcmVsYXhlZChTSVJGU09DX1RJTUVSX0xBVENIX0JJVCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9MQVRDSCk7CisJd3JpdGVsX3JlbGF4ZWQoU0lSRlNPQ19USU1FUl9MQVRDSF9CSVQsCisJCXNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0gpOwogCW5vdyA9IHJlYWRsX3JlbGF4ZWQoc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9MQVRDSEVEX0xPKTsKIAluZXh0ID0gbm93ICsgZGVsdGE7CiAJd3JpdGVsX3JlbGF4ZWQobmV4dCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9NQVRDSF8wKTsKLQl3cml0ZWxfcmVsYXhlZChTSVJGU09DX1RJTUVSX0xBVENIX0JJVCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9MQVRDSCk7CisJd3JpdGVsX3JlbGF4ZWQoU0lSRlNPQ19USU1FUl9MQVRDSF9CSVQsCisJCXNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0gpOwogCW5vdyA9IHJlYWRsX3JlbGF4ZWQoc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9MQVRDSEVEX0xPKTsKIAogCXJldHVybiBuZXh0IC0gbm93ID4gZGVsdGEgPyAtRVRJTUUgOiAwOwpAQCAtMTA4LDEwICsxMTMsMTIgQEAKIAkJV0FSTl9PTigxKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQl3cml0ZWxfcmVsYXhlZCh2YWwgfCBCSVQoMCksIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfSU5UX0VOKTsKKwkJd3JpdGVsX3JlbGF4ZWQodmFsIHwgQklUKDApLAorCQkJc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9JTlRfRU4pOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQl3cml0ZWxfcmVsYXhlZCh2YWwgJiB+QklUKDApLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0lOVF9FTik7CisJCXdyaXRlbF9yZWxheGVkKHZhbCAmIH5CSVQoMCksCisJCQlzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0lOVF9FTik7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgpAQCAtMTIzLDEwICsxMzAsMTMgQEAKIHsKIAlpbnQgaTsKIAotCXdyaXRlbF9yZWxheGVkKFNJUkZTT0NfVElNRVJfTEFUQ0hfQklULCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0xBVENIKTsKKwl3cml0ZWxfcmVsYXhlZChTSVJGU09DX1RJTUVSX0xBVENIX0JJVCwKKwkJc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9MQVRDSCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0lSRlNPQ19USU1FUl9SRUdfQ05UOyBpKyspCi0JCXNpcmZzb2NfdGltZXJfcmVnX3ZhbFtpXSA9IHJlYWRsX3JlbGF4ZWQoc2lyZnNvY190aW1lcl9iYXNlICsgc2lyZnNvY190aW1lcl9yZWdfbGlzdFtpXSk7CisJCXNpcmZzb2NfdGltZXJfcmVnX3ZhbFtpXSA9CisJCQlyZWFkbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfYmFzZSArCisJCQkJc2lyZnNvY190aW1lcl9yZWdfbGlzdFtpXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpcmZzb2NfY2xvY2tzb3VyY2VfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCkBAIC0xMzQsMTAgKzE0NCwxMyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNJUkZTT0NfVElNRVJfUkVHX0NOVCAtIDI7IGkrKykKLQkJd3JpdGVsX3JlbGF4ZWQoc2lyZnNvY190aW1lcl9yZWdfdmFsW2ldLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBzaXJmc29jX3RpbWVyX3JlZ19saXN0W2ldKTsKKwkJd3JpdGVsX3JlbGF4ZWQoc2lyZnNvY190aW1lcl9yZWdfdmFsW2ldLAorCQkJc2lyZnNvY190aW1lcl9iYXNlICsgc2lyZnNvY190aW1lcl9yZWdfbGlzdFtpXSk7CiAKLQl3cml0ZWxfcmVsYXhlZChzaXJmc29jX3RpbWVyX3JlZ192YWxbU0lSRlNPQ19USU1FUl9SRUdfQ05UIC0gMl0sIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfQ09VTlRFUl9MTyk7Ci0Jd3JpdGVsX3JlbGF4ZWQoc2lyZnNvY190aW1lcl9yZWdfdmFsW1NJUkZTT0NfVElNRVJfUkVHX0NOVCAtIDFdLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0NPVU5URVJfSEkpOworCXdyaXRlbF9yZWxheGVkKHNpcmZzb2NfdGltZXJfcmVnX3ZhbFtTSVJGU09DX1RJTUVSX1JFR19DTlQgLSAyXSwKKwkJc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9DT1VOVEVSX0xPKTsKKwl3cml0ZWxfcmVsYXhlZChzaXJmc29jX3RpbWVyX3JlZ192YWxbU0lSRlNPQ19USU1FUl9SRUdfQ05UIC0gMV0sCisJCXNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfQ09VTlRFUl9ISSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHNpcmZzb2NfY2xvY2tldmVudCA9IHsKQEAgLTE4NSwxMSArMTk4LDggQEAKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJc3RydWN0IGNsayAqY2xrOwogCi0JLyogdGltZXIncyBpbnB1dCBjbG9jayBpcyBpbyBjbG9jayAqLwotCWNsayA9IGNsa19nZXRfc3lzKCJpbyIsIE5VTEwpOwotCisJY2xrID0gb2ZfY2xrX2dldChucCwgMCk7CiAJQlVHX09OKElTX0VSUihjbGspKTsKLQogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAogCUJVR19PTihyYXRlIDwgUFJJTUEyX0NMT0NLX0ZSRVEpOwpAQCAtMjAyLDcgKzIxMiw3IEBACiAJc2lyZnNvY190aW1lcl9pcnEuaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCiAJd3JpdGVsX3JlbGF4ZWQocmF0ZSAvIFBSSU1BMl9DTE9DS19GUkVRIC8gMiAtIDEsCi0JCSAgICAgICBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0RJVik7CisJCXNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfRElWKTsKIAl3cml0ZWxfcmVsYXhlZCgwLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX0NPVU5URVJfTE8pOwogCXdyaXRlbF9yZWxheGVkKDAsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfQ09VTlRFUl9ISSk7CiAJd3JpdGVsX3JlbGF4ZWQoQklUKDApLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSX1NUQVRVUyk7CkBAIC0yMTYsNCArMjI2LDUgQEAKIAogCXNpcmZzb2NfY2xvY2tldmVudF9pbml0KCk7CiB9Ci1DTE9DS1NPVVJDRV9PRl9ERUNMQVJFKHNpcmZzb2NfcHJpbWEyX3RpbWVyLCAic2lyZixwcmltYTItdGljayIsIHNpcmZzb2NfcHJpbWEyX3RpbWVyX2luaXQpOworQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShzaXJmc29jX3ByaW1hMl90aW1lciwKKwkic2lyZixwcmltYTItdGljayIsIHNpcmZzb2NfcHJpbWEyX3RpbWVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS92ZXJzYXRpbGUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdmVyc2F0aWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5OGU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdmVyc2F0aWxlLmMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIExpbWl0ZWQKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgorCisjZGVmaW5lIFNZU18yNE1IWiAweDA1YworCitzdGF0aWMgdm9pZCBfX2lvbWVtICp2ZXJzYXRpbGVfc3lzXzI0bWh6OworCitzdGF0aWMgdTY0IG5vdHJhY2UgdmVyc2F0aWxlX3N5c18yNG1oel9yZWFkKHZvaWQpCit7CisJcmV0dXJuIHJlYWRsKHZlcnNhdGlsZV9zeXNfMjRtaHopOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOworCisJaWYgKCFiYXNlKQorCQlyZXR1cm47CisKKwl2ZXJzYXRpbGVfc3lzXzI0bWh6ID0gYmFzZSArIFNZU18yNE1IWjsKKworCXNjaGVkX2Nsb2NrX3JlZ2lzdGVyKHZlcnNhdGlsZV9zeXNfMjRtaHpfcmVhZCwgMzIsIDI0MDAwMDAwKTsKK30KK0NMT0NLU09VUkNFX09GX0RFQ0xBUkUodmVyc2F0aWxlLCAiYXJtLHZleHByZXNzLXN5c3JlZyIsCisJCSAgICAgICB2ZXJzYXRpbGVfc2NoZWRfY2xvY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCmluZGV4IGIxNGYxZDMuLmY2MTJkNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCkBAIC00Myw2ICs0Myw4IEBACiBzdGF0aWMgaW50IGNuX2FscmVhZHlfaW5pdGlhbGl6ZWQ7CiAKIC8qCisgKiBTZW5kcyBtdWx0IChtdWx0aXBsZSkgY25fbXNnIGF0IGEgdGltZS4KKyAqCiAgKiBtc2ctPnNlcSBhbmQgbXNnLT5hY2sgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIG1lc3NhZ2UgZ2VuZWFsb2d5LgogICogV2hlbiBzb21lb25lIHNlbmRzIG1lc3NhZ2UgaXQgcHV0cyB0aGVyZSBsb2NhbGx5IHVuaXF1ZSBzZXF1ZW5jZQogICogYW5kIHJhbmRvbSBhY2tub3dsZWRnZSBudW1iZXJzLiAgU2VxdWVuY2UgbnVtYmVyIG1heSBiZSBjb3BpZWQgaW50bwpAQCAtNjIsMTAgKzY0LDEzIEBACiAgKiB0aGUgYWNrbm93bGVkZ2VtZW50IG51bWJlciBpbiB0aGUgb3JpZ2luYWwgbWVzc2FnZSArIDEsIHRoZW4gaXQgaXMKICAqIGEgbmV3IG1lc3NhZ2UuCiAgKgorICogSWYgbXNnLT5sZW4gIT0gbGVuLCB0aGVuIGFkZGl0aW9uYWwgY25fbXNnIG1lc3NhZ2VzIGFyZSBleHBlY3RlZCBmb2xsb3dpbmcKKyAqIHRoZSBmaXJzdCBtc2cuCisgKgogICogVGhlIG1lc3NhZ2UgaXMgc2VudCB0bywgdGhlIHBvcnRpZCBpZiBnaXZlbiwgdGhlIGdyb3VwIGlmIGdpdmVuLCBib3RoIGlmCiAgKiBib3RoLCBvciBpZiBib3RoIGFyZSB6ZXJvIHRoZW4gdGhlIGdyb3VwIGlzIGxvb2tlZCB1cCBhbmQgc2VudCB0aGVyZS4KICAqLwotaW50IGNuX25ldGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICptc2csIHUzMiBwb3J0aWQsIHUzMiBfX2dyb3VwLAoraW50IGNuX25ldGxpbmtfc2VuZF9tdWx0KHN0cnVjdCBjbl9tc2cgKm1zZywgdTE2IGxlbiwgdTMyIHBvcnRpZCwgdTMyIF9fZ3JvdXAsCiAJZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpfX2NicTsKQEAgLTk4LDcgKzEwMyw3IEBACiAJaWYgKCFwb3J0aWQgJiYgIW5ldGxpbmtfaGFzX2xpc3RlbmVycyhkZXYtPm5scywgZ3JvdXApKQogCQlyZXR1cm4gLUVTUkNIOwogCi0Jc2l6ZSA9IHNpemVvZigqbXNnKSArIG1zZy0+bGVuOworCXNpemUgPSBzaXplb2YoKm1zZykgKyBsZW47CiAKIAlza2IgPSBubG1zZ19uZXcoc2l6ZSwgZ2ZwX21hc2spOwogCWlmICghc2tiKQpAQCAtMTIxLDYgKzEyNiwxNCBAQAogCQkJCQkgZ2ZwX21hc2spOwogCXJldHVybiBuZXRsaW5rX3VuaWNhc3QoZGV2LT5ubHMsIHNrYiwgcG9ydGlkLCAhKGdmcF9tYXNrJl9fR0ZQX1dBSVQpKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNuX25ldGxpbmtfc2VuZF9tdWx0KTsKKworLyogc2FtZSBhcyBjbl9uZXRsaW5rX3NlbmRfbXVsdCBleGNlcHQgbXNnLT5sZW4gaXMgdXNlZCBmb3IgbGVuICovCitpbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZywgdTMyIHBvcnRpZCwgdTMyIF9fZ3JvdXAsCisJZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNuX25ldGxpbmtfc2VuZF9tdWx0KG1zZywgbXNnLT5sZW4sIHBvcnRpZCwgX19ncm91cCwgZ2ZwX21hc2spOworfQogRVhQT1JUX1NZTUJPTF9HUEwoY25fbmV0bGlua19zZW5kKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLmFybSBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLmFybQppbmRleCA2YTdkZDNlLi4zNmQyMGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy5hcm0KKysrIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcuYXJtCkBAIC0zMSw3ICszMSw3IEBACiAKIGNvbmZpZyBBUk1fRVhZTk9TNDIxMF9DUFVGUkVRCiAJYm9vbCAiU0FNU1VORyBFWFlOT1M0MjEwIgotCWRlcGVuZHMgb24gQ1BVX0VYWU5PUzQyMTAgJiYgIUFSQ0hfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gQ1BVX0VYWU5PUzQyMTAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgQVJNX0VYWU5PU19DUFVGUkVRCiAJaGVscApAQCAtNDIsNyArNDIsNyBAQAogCiBjb25maWcgQVJNX0VYWU5PUzRYMTJfQ1BVRlJFUQogCWJvb2wgIlNBTVNVTkcgRVhZTk9TNHgxMiIKLQlkZXBlbmRzIG9uIChTT0NfRVhZTk9TNDIxMiB8fCBTT0NfRVhZTk9TNDQxMikgJiYgIUFSQ0hfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gU09DX0VYWU5PUzQyMTIgfHwgU09DX0VYWU5PUzQ0MTIKIAlkZWZhdWx0IHkKIAlzZWxlY3QgQVJNX0VYWU5PU19DUFVGUkVRCiAJaGVscApAQCAtNTMsNyArNTMsNyBAQAogCiBjb25maWcgQVJNX0VYWU5PUzUyNTBfQ1BVRlJFUQogCWJvb2wgIlNBTVNVTkcgRVhZTk9TNTI1MCIKLQlkZXBlbmRzIG9uIFNPQ19FWFlOT1M1MjUwICYmICFBUkNIX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIFNPQ19FWFlOT1M1MjUwCiAJZGVmYXVsdCB5CiAJc2VsZWN0IEFSTV9FWFlOT1NfQ1BVRlJFUQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9leHlub3MtY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2V4eW5vcy1jcHVmcmVxLmMKaW5kZXggYzNlNTVhYS4uMWUwZWM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2V4eW5vcy1jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2V4eW5vcy1jcHVmcmVxLmMKQEAgLTE3LDggKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlICJleHlub3MtY3B1ZnJlcS5oIgogCkBAIC0xNjUsMTQgKzE2NCwyMiBAQAogCiAJZXh5bm9zX2luZm8tPmRldiA9ICZwZGV2LT5kZXY7CiAKLQlpZiAoc29jX2lzX2V4eW5vczQyMTAoKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczQyMTAiKSkgeworCQlleHlub3NfaW5mby0+dHlwZSA9IEVYWU5PU19TT0NfNDIxMDsKIAkJcmV0ID0gZXh5bm9zNDIxMF9jcHVmcmVxX2luaXQoZXh5bm9zX2luZm8pOwotCWVsc2UgaWYgKHNvY19pc19leHlub3M0MjEyKCkgfHwgc29jX2lzX2V4eW5vczQ0MTIoKSkKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0MjEyIikpIHsKKwkJZXh5bm9zX2luZm8tPnR5cGUgPSBFWFlOT1NfU09DXzQyMTI7CiAJCXJldCA9IGV4eW5vczR4MTJfY3B1ZnJlcV9pbml0KGV4eW5vc19pbmZvKTsKLQllbHNlIGlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQorCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczQ0MTIiKSkgeworCQlleHlub3NfaW5mby0+dHlwZSA9IEVYWU5PU19TT0NfNDQxMjsKKwkJcmV0ID0gZXh5bm9zNHgxMl9jcHVmcmVxX2luaXQoZXh5bm9zX2luZm8pOworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczUyNTAiKSkgeworCQlleHlub3NfaW5mby0+dHlwZSA9IEVYWU5PU19TT0NfNTI1MDsKIAkJcmV0ID0gZXh5bm9zNTI1MF9jcHVmcmVxX2luaXQoZXh5bm9zX2luZm8pOwotCWVsc2UKLQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCIlczogVW5rbm93biBTb0MgdHlwZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlpZiAocmV0KQogCQlnb3RvIGVycl92ZGRfYXJtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2V4eW5vcy1jcHVmcmVxLmggYi9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zLWNwdWZyZXEuaAppbmRleCBiNzJmZjEwLi45ZjIwNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zLWNwdWZyZXEuaAorKysgYi9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zLWNwdWZyZXEuaApAQCAtMTcsNiArMTcsMTMgQEAKIAlMMjAsCiB9OwogCitlbnVtIGV4eW5vc19zb2NfdHlwZSB7CisJRVhZTk9TX1NPQ180MjEwLAorCUVYWU5PU19TT0NfNDIxMiwKKwlFWFlOT1NfU09DXzQ0MTIsCisJRVhZTk9TX1NPQ181MjUwLAorfTsKKwogI2RlZmluZSBBUExMX0ZSRVEoZiwgYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBiMCwgYjEsIGIyLCBtLCBwLCBzKSBcCiAJeyBcCiAJCS5mcmVxID0gKGYpICogMTAwMCwgXApAQCAtMzQsNiArNDEsNyBAQAogfTsKIAogc3RydWN0IGV4eW5vc19kdmZzX2luZm8geworCWVudW0gZXh5bm9zX3NvY190eXBlIHR5cGU7CiAJc3RydWN0IGRldmljZQkqZGV2OwogCXVuc2lnbmVkIGxvbmcJbXBsbF9mcmVxX2toejsKIAl1bnNpZ25lZCBpbnQJcGxsX3NhZmVfaWR4OwpAQCAtNDIsNiArNTAsNyBAQAogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZQkqZnJlcV90YWJsZTsKIAl2b2lkICgqc2V0X2ZyZXEpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIAlib29sICgqbmVlZF9hcGxsX2NoYW5nZSkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCXZvaWQgX19pb21lbQkqY211X3JlZ3M7CiB9OwogCiAjaWZkZWYgQ09ORklHX0FSTV9FWFlOT1M0MjEwX0NQVUZSRVEKQEAgLTY5LDI0ICs3OCwyMSBAQAogfQogI2VuZGlmCiAKLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjZGVmaW5lIEVYWU5PUzRfQ0xLU1JDX0NQVQkJCTB4MTQyMDAKKyNkZWZpbmUgRVhZTk9TNF9DTEtNVVhfU1RBVENQVQkJCTB4MTQ0MDAKIAotI2RlZmluZSBFWFlOT1M0X0NMS1NSQ19DUFUJCQkoUzVQX1ZBX0NNVSArIDB4MTQyMDApCi0jZGVmaW5lIEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFUJCQkoUzVQX1ZBX0NNVSArIDB4MTQ0MDApCi0KLSNkZWZpbmUgRVhZTk9TNF9DTEtESVZfQ1BVCQkJKFM1UF9WQV9DTVUgKyAweDE0NTAwKQotI2RlZmluZSBFWFlOT1M0X0NMS0RJVl9DUFUxCQkJKFM1UF9WQV9DTVUgKyAweDE0NTA0KQotI2RlZmluZSBFWFlOT1M0X0NMS0RJVl9TVEFUQ1BVCQkJKFM1UF9WQV9DTVUgKyAweDE0NjAwKQotI2RlZmluZSBFWFlOT1M0X0NMS0RJVl9TVEFUQ1BVMQkJCShTNVBfVkFfQ01VICsgMHgxNDYwNCkKKyNkZWZpbmUgRVhZTk9TNF9DTEtESVZfQ1BVCQkJMHgxNDUwMAorI2RlZmluZSBFWFlOT1M0X0NMS0RJVl9DUFUxCQkJMHgxNDUwNAorI2RlZmluZSBFWFlOT1M0X0NMS0RJVl9TVEFUQ1BVCQkJMHgxNDYwMAorI2RlZmluZSBFWFlOT1M0X0NMS0RJVl9TVEFUQ1BVMQkJCTB4MTQ2MDQKIAogI2RlZmluZSBFWFlOT1M0X0NMS1NSQ19DUFVfTVVYQ09SRV9TSElGVAkoMTYpCiAjZGVmaW5lIEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFVfTVVYQ09SRV9NQVNLCSgweDcgPDwgRVhZTk9TNF9DTEtTUkNfQ1BVX01VWENPUkVfU0hJRlQpCiAKLSNkZWZpbmUgRVhZTk9TNV9BUExMX0xPQ0sJCQkoUzVQX1ZBX0NNVSArIDB4MDAwMDApCi0jZGVmaW5lIEVYWU5PUzVfQVBMTF9DT04wCQkJKFM1UF9WQV9DTVUgKyAweDAwMTAwKQotI2RlZmluZSBFWFlOT1M1X0NMS01VWF9TVEFUQ1BVCQkJKFM1UF9WQV9DTVUgKyAweDAwNDAwKQotI2RlZmluZSBFWFlOT1M1X0NMS0RJVl9DUFUwCQkJKFM1UF9WQV9DTVUgKyAweDAwNTAwKQotI2RlZmluZSBFWFlOT1M1X0NMS0RJVl9DUFUxCQkJKFM1UF9WQV9DTVUgKyAweDAwNTA0KQotI2RlZmluZSBFWFlOT1M1X0NMS0RJVl9TVEFUQ1BVMAkJCShTNVBfVkFfQ01VICsgMHgwMDYwMCkKLSNkZWZpbmUgRVhZTk9TNV9DTEtESVZfU1RBVENQVTEJCQkoUzVQX1ZBX0NNVSArIDB4MDA2MDQpCisjZGVmaW5lIEVYWU5PUzVfQVBMTF9MT0NLCQkJMHgwMDAwMAorI2RlZmluZSBFWFlOT1M1X0FQTExfQ09OMAkJCTB4MDAxMDAKKyNkZWZpbmUgRVhZTk9TNV9DTEtNVVhfU1RBVENQVQkJCTB4MDA0MDAKKyNkZWZpbmUgRVhZTk9TNV9DTEtESVZfQ1BVMAkJCTB4MDA1MDAKKyNkZWZpbmUgRVhZTk9TNV9DTEtESVZfQ1BVMQkJCTB4MDA1MDQKKyNkZWZpbmUgRVhZTk9TNV9DTEtESVZfU1RBVENQVTAJCQkweDAwNjAwCisjZGVmaW5lIEVYWU5PUzVfQ0xLRElWX1NUQVRDUFUxCQkJMHgwMDYwNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2V4eW5vczQyMTAtY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2V4eW5vczQyMTAtY3B1ZnJlcS5jCmluZGV4IDYzODRlNWIuLjYxYTU0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9leHlub3M0MjEwLWNwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zNDIxMC1jcHVmcmVxLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAKICNpbmNsdWRlICJleHlub3MtY3B1ZnJlcS5oIgogCkBAIC0yMyw2ICsyNSw3IEBACiBzdGF0aWMgc3RydWN0IGNsayAqbW91dGNvcmU7CiBzdGF0aWMgc3RydWN0IGNsayAqbW91dF9tcGxsOwogc3RhdGljIHN0cnVjdCBjbGsgKm1vdXRfYXBsbDsKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX2R2ZnNfaW5mbyAqY3B1ZnJlcTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBleHlub3M0MjEwX3ZvbHRfdGFibGVbXSA9IHsKIAkxMjUwMDAwLCAxMTUwMDAwLCAxMDUwMDAwLCA5NzUwMDAsIDk1MDAwMCwKQEAgLTYwLDIwICs2MywyMCBAQAogCiAJdG1wID0gYXBsbF9mcmVxXzQyMTBbZGl2X2luZGV4XS5jbGtfZGl2X2NwdTA7CiAKLQlfX3Jhd193cml0ZWwodG1wLCBFWFlOT1M0X0NMS0RJVl9DUFUpOworCV9fcmF3X3dyaXRlbCh0bXAsIGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNF9DTEtESVZfQ1BVKTsKIAogCWRvIHsKLQkJdG1wID0gX19yYXdfcmVhZGwoRVhZTk9TNF9DTEtESVZfU1RBVENQVSk7CisJCXRtcCA9IF9fcmF3X3JlYWRsKGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNF9DTEtESVZfU1RBVENQVSk7CiAJfSB3aGlsZSAodG1wICYgMHgxMTExMTExKTsKIAogCS8qIENoYW5nZSBEaXZpZGVyIC0gQ1BVMSAqLwogCiAJdG1wID0gYXBsbF9mcmVxXzQyMTBbZGl2X2luZGV4XS5jbGtfZGl2X2NwdTE7CiAKLQlfX3Jhd193cml0ZWwodG1wLCBFWFlOT1M0X0NMS0RJVl9DUFUxKTsKKwlfX3Jhd193cml0ZWwodG1wLCBjcHVmcmVxLT5jbXVfcmVncyArIEVYWU5PUzRfQ0xLRElWX0NQVTEpOwogCiAJZG8gewotCQl0bXAgPSBfX3Jhd19yZWFkbChFWFlOT1M0X0NMS0RJVl9TVEFUQ1BVMSk7CisJCXRtcCA9IF9fcmF3X3JlYWRsKGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNF9DTEtESVZfU1RBVENQVTEpOwogCX0gd2hpbGUgKHRtcCAmIDB4MTEpOwogfQogCkBAIC04NSw3ICs4OCw3IEBACiAJY2xrX3NldF9wYXJlbnQobW91dGNvcmUsIG1vdXRfbXBsbCk7CiAKIAlkbyB7Ci0JCXRtcCA9IChfX3Jhd19yZWFkbChFWFlOT1M0X0NMS01VWF9TVEFUQ1BVKQorCQl0bXAgPSAoX19yYXdfcmVhZGwoY3B1ZnJlcS0+Y211X3JlZ3MgKyBFWFlOT1M0X0NMS01VWF9TVEFUQ1BVKQogCQkJPj4gRVhZTk9TNF9DTEtTUkNfQ1BVX01VWENPUkVfU0hJRlQpOwogCQl0bXAgJj0gMHg3OwogCX0gd2hpbGUgKHRtcCAhPSAweDIpOwpAQCAtOTYsNyArOTksNyBAQAogCWNsa19zZXRfcGFyZW50KG1vdXRjb3JlLCBtb3V0X2FwbGwpOwogCiAJZG8gewotCQl0bXAgPSBfX3Jhd19yZWFkbChFWFlOT1M0X0NMS01VWF9TVEFUQ1BVKTsKKwkJdG1wID0gX19yYXdfcmVhZGwoY3B1ZnJlcS0+Y211X3JlZ3MgKyBFWFlOT1M0X0NMS01VWF9TVEFUQ1BVKTsKIAkJdG1wICY9IEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFVfTVVYQ09SRV9NQVNLOwogCX0gd2hpbGUgKHRtcCAhPSAoMHgxIDw8IEVYWU5PUzRfQ0xLU1JDX0NQVV9NVVhDT1JFX1NISUZUKSk7CiB9CkBAIC0xMTUsOCArMTE4LDMwIEBACiAKIGludCBleHlub3M0MjEwX2NwdWZyZXFfaW5pdChzdHJ1Y3QgZXh5bm9zX2R2ZnNfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAorCS8qCisJICogSEFDSzogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIGdldCBhY2Nlc3MgdG8gY2xvY2sKKwkgKiBjb250cm9sbGVyIHJlZ2lzdGVycyBkaXJlY3RseSBhbmQgcmVtb3ZlIHN0YXRpYyBtYXBwaW5ncyBhbmQKKwkgKiBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0gaGVhZGVycy4gSXQgaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZQorCSAqIEV4eW5vcyBtdWx0aS1wbGF0Zm9ybSBzdXBwb3J0IGFuZCB3aWxsIGJlIHJlbW92ZWQgdG9nZXRoZXIgd2l0aAorCSAqIHRoaXMgd2hvbGUgZHJpdmVyIGFzIHNvb24gYXMgRXh5bm9zIGdldHMgbWlncmF0ZWQgdG8gdXNlCisJICogY3B1ZnJlcS1jcHUwIGRyaXZlci4KKwkgKi8KKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJzYW1zdW5nLGV4eW5vczQyMTAtY2xvY2siKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBmaW5kIGNsb2NrIGNvbnRyb2xsZXIgRFQgbm9kZVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mby0+Y211X3JlZ3MgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFpbmZvLT5jbXVfcmVncykgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gbWFwIENNVSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCiAJY3B1X2NsayA9IGNsa19nZXQoTlVMTCwgImFybWNsayIpOwogCWlmIChJU19FUlIoY3B1X2NsaykpCiAJCXJldHVybiBQVFJfRVJSKGNwdV9jbGspOwpAQCAtMTQzLDYgKzE2OCw4IEBACiAJaW5mby0+ZnJlcV90YWJsZSA9IGV4eW5vczQyMTBfZnJlcV90YWJsZTsKIAlpbmZvLT5zZXRfZnJlcSA9IGV4eW5vczQyMTBfc2V0X2ZyZXF1ZW5jeTsKIAorCWNwdWZyZXEgPSBpbmZvOworCiAJcmV0dXJuIDA7CiAKIGVycl9tb3V0X2FwbGw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zNHgxMi1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zNHgxMi1jcHVmcmVxLmMKaW5kZXggNDY2Yzc2YS4uMzUxYTIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2V4eW5vczR4MTItY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9leHlub3M0eDEyLWNwdWZyZXEuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogI2luY2x1ZGUgImV4eW5vcy1jcHVmcmVxLmgiCiAKQEAgLTIzLDYgKzI1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrICptb3V0Y29yZTsKIHN0YXRpYyBzdHJ1Y3QgY2xrICptb3V0X21wbGw7CiBzdGF0aWMgc3RydWN0IGNsayAqbW91dF9hcGxsOworc3RhdGljIHN0cnVjdCBleHlub3NfZHZmc19pbmZvICpjcHVmcmVxOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGV4eW5vczR4MTJfdm9sdF90YWJsZVtdID0gewogCTEzNTAwMDAsIDEyODc1MDAsIDEyNTAwMDAsIDExODc1MDAsIDExMzc1MDAsIDEwODc1MDAsIDEwMzc1MDAsCkBAIC0xMDAsMjggKzEwMywyNiBAQAogc3RhdGljIHZvaWQgZXh5bm9zNHgxMl9zZXRfY2xrZGl2KHVuc2lnbmVkIGludCBkaXZfaW5kZXgpCiB7CiAJdW5zaWduZWQgaW50IHRtcDsKLQl1bnNpZ25lZCBpbnQgc3RhdF9jcHUxOwogCiAJLyogQ2hhbmdlIERpdmlkZXIgLSBDUFUwICovCiAKIAl0bXAgPSBhcGxsX2ZyZXFfNHgxMltkaXZfaW5kZXhdLmNsa19kaXZfY3B1MDsKIAotCV9fcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzRfQ0xLRElWX0NQVSk7CisJX19yYXdfd3JpdGVsKHRtcCwgY3B1ZnJlcS0+Y211X3JlZ3MgKyBFWFlOT1M0X0NMS0RJVl9DUFUpOwogCi0Jd2hpbGUgKF9fcmF3X3JlYWRsKEVYWU5PUzRfQ0xLRElWX1NUQVRDUFUpICYgMHgxMTExMTExMSkKKwl3aGlsZSAoX19yYXdfcmVhZGwoY3B1ZnJlcS0+Y211X3JlZ3MgKyBFWFlOT1M0X0NMS0RJVl9TVEFUQ1BVKQorCSAgICAgICAmIDB4MTExMTExMTEpCiAJCWNwdV9yZWxheCgpOwogCiAJLyogQ2hhbmdlIERpdmlkZXIgLSBDUFUxICovCiAJdG1wID0gYXBsbF9mcmVxXzR4MTJbZGl2X2luZGV4XS5jbGtfZGl2X2NwdTE7CiAKLQlfX3Jhd193cml0ZWwodG1wLCBFWFlOT1M0X0NMS0RJVl9DUFUxKTsKLQlpZiAoc29jX2lzX2V4eW5vczQyMTIoKSkKLQkJc3RhdF9jcHUxID0gMHgxMTsKLQllbHNlCi0JCXN0YXRfY3B1MSA9IDB4MTExOworCV9fcmF3X3dyaXRlbCh0bXAsIGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNF9DTEtESVZfQ1BVMSk7CiAKLQl3aGlsZSAoX19yYXdfcmVhZGwoRVhZTk9TNF9DTEtESVZfU1RBVENQVTEpICYgc3RhdF9jcHUxKQorCWRvIHsKIAkJY3B1X3JlbGF4KCk7CisJCXRtcCA9IF9fcmF3X3JlYWRsKGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNF9DTEtESVZfU1RBVENQVTEpOworCX0gd2hpbGUgKHRtcCAhPSAweDApOwogfQogCiBzdGF0aWMgdm9pZCBleHlub3M0eDEyX3NldF9hcGxsKHVuc2lnbmVkIGludCBpbmRleCkKQEAgLTEzMyw3ICsxMzQsNyBAQAogCiAJZG8gewogCQljcHVfcmVsYXgoKTsKLQkJdG1wID0gKF9fcmF3X3JlYWRsKEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFUpCisJCXRtcCA9IChfX3Jhd19yZWFkbChjcHVmcmVxLT5jbXVfcmVncyArIEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFUpCiAJCQk+PiBFWFlOT1M0X0NMS1NSQ19DUFVfTVVYQ09SRV9TSElGVCk7CiAJCXRtcCAmPSAweDc7CiAJfSB3aGlsZSAodG1wICE9IDB4Mik7CkBAIC0xNDUsNyArMTQ2LDcgQEAKIAogCWRvIHsKIAkJY3B1X3JlbGF4KCk7Ci0JCXRtcCA9IF9fcmF3X3JlYWRsKEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFUpOworCQl0bXAgPSBfX3Jhd19yZWFkbChjcHVmcmVxLT5jbXVfcmVncyArIEVYWU5PUzRfQ0xLTVVYX1NUQVRDUFUpOwogCQl0bXAgJj0gRVhZTk9TNF9DTEtNVVhfU1RBVENQVV9NVVhDT1JFX01BU0s7CiAJfSB3aGlsZSAodG1wICE9ICgweDEgPDwgRVhZTk9TNF9DTEtTUkNfQ1BVX01VWENPUkVfU0hJRlQpKTsKIH0KQEAgLTE2NCw4ICsxNjUsMzAgQEAKIAogaW50IGV4eW5vczR4MTJfY3B1ZnJlcV9pbml0KHN0cnVjdCBleHlub3NfZHZmc19pbmZvICppbmZvKQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJdW5zaWduZWQgbG9uZyByYXRlOwogCisJLyoKKwkgKiBIQUNLOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gZ2V0IGFjY2VzcyB0byBjbG9jaworCSAqIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGRpcmVjdGx5IGFuZCByZW1vdmUgc3RhdGljIG1hcHBpbmdzIGFuZAorCSAqIGRlcGVuZGVuY2llcyBvbiBwbGF0Zm9ybSBoZWFkZXJzLiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlCisJICogRXh5bm9zIG11bHRpLXBsYXRmb3JtIHN1cHBvcnQgYW5kIHdpbGwgYmUgcmVtb3ZlZCB0b2dldGhlciB3aXRoCisJICogdGhpcyB3aG9sZSBkcml2ZXIgYXMgc29vbiBhcyBFeHlub3MgZ2V0cyBtaWdyYXRlZCB0byB1c2UKKwkgKiBjcHVmcmVxLWNwdTAgZHJpdmVyLgorCSAqLworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInNhbXN1bmcsZXh5bm9zNDQxMi1jbG9jayIpOworCWlmICghbnApIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGZpbmQgY2xvY2sgY29udHJvbGxlciBEVCBub2RlXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmZvLT5jbXVfcmVncyA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoIWluZm8tPmNtdV9yZWdzKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBtYXAgQ01VIHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKIAljcHVfY2xrID0gY2xrX2dldChOVUxMLCAiYXJtY2xrIik7CiAJaWYgKElTX0VSUihjcHVfY2xrKSkKIAkJcmV0dXJuIFBUUl9FUlIoY3B1X2Nsayk7CkBAIC0xODQsNyArMjA3LDcgQEAKIAlpZiAoSVNfRVJSKG1vdXRfYXBsbCkpCiAJCWdvdG8gZXJyX21vdXRfYXBsbDsKIAotCWlmIChzb2NfaXNfZXh5bm9zNDIxMigpKQorCWlmIChpbmZvLT50eXBlID09IEVYWU5PU19TT0NfNDIxMikKIAkJYXBsbF9mcmVxXzR4MTIgPSBhcGxsX2ZyZXFfNDIxMjsKIAllbHNlCiAJCWFwbGxfZnJlcV80eDEyID0gYXBsbF9mcmVxXzQ0MTI7CkBAIC0xOTcsNiArMjIwLDggQEAKIAlpbmZvLT5mcmVxX3RhYmxlID0gZXh5bm9zNHgxMl9mcmVxX3RhYmxlOwogCWluZm8tPnNldF9mcmVxID0gZXh5bm9zNHgxMl9zZXRfZnJlcXVlbmN5OwogCisJY3B1ZnJlcSA9IGluZm87CisKIAlyZXR1cm4gMDsKIAogZXJyX21vdXRfYXBsbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9leHlub3M1MjUwLWNwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9leHlub3M1MjUwLWNwdWZyZXEuYwppbmRleCAzNjNhMGIzLi5jOTFjZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvZXh5bm9zNTI1MC1jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2V4eW5vczUyNTAtY3B1ZnJlcS5jCkBAIC0xNiw4ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogI2luY2x1ZGUgImV4eW5vcy1jcHVmcmVxLmgiCiAKQEAgLTI1LDYgKzI1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrICptb3V0Y29yZTsKIHN0YXRpYyBzdHJ1Y3QgY2xrICptb3V0X21wbGw7CiBzdGF0aWMgc3RydWN0IGNsayAqbW91dF9hcGxsOworc3RhdGljIHN0cnVjdCBleHlub3NfZHZmc19pbmZvICpjcHVmcmVxOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGV4eW5vczUyNTBfdm9sdF90YWJsZVtdID0gewogCTEzMDAwMDAsIDEyNTAwMDAsIDEyMjUwMDAsIDEyMDAwMDAsIDExNTAwMDAsCkBAIC04NywxNyArODgsMTggQEAKIAogCXRtcCA9IGFwbGxfZnJlcV81MjUwW2Rpdl9pbmRleF0uY2xrX2Rpdl9jcHUwOwogCi0JX19yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNV9DTEtESVZfQ1BVMCk7CisJX19yYXdfd3JpdGVsKHRtcCwgY3B1ZnJlcS0+Y211X3JlZ3MgKyBFWFlOT1M1X0NMS0RJVl9DUFUwKTsKIAotCXdoaWxlIChfX3Jhd19yZWFkbChFWFlOT1M1X0NMS0RJVl9TVEFUQ1BVMCkgJiAweDExMTExMTExKQorCXdoaWxlIChfX3Jhd19yZWFkbChjcHVmcmVxLT5jbXVfcmVncyArIEVYWU5PUzVfQ0xLRElWX1NUQVRDUFUwKQorCSAgICAgICAmIDB4MTExMTExMTEpCiAJCWNwdV9yZWxheCgpOwogCiAJLyogQ2hhbmdlIERpdmlkZXIgLSBDUFUxICovCiAJdG1wID0gYXBsbF9mcmVxXzUyNTBbZGl2X2luZGV4XS5jbGtfZGl2X2NwdTE7CiAKLQlfX3Jhd193cml0ZWwodG1wLCBFWFlOT1M1X0NMS0RJVl9DUFUxKTsKKwlfX3Jhd193cml0ZWwodG1wLCBjcHVmcmVxLT5jbXVfcmVncyArIEVYWU5PUzVfQ0xLRElWX0NQVTEpOwogCi0Jd2hpbGUgKF9fcmF3X3JlYWRsKEVYWU5PUzVfQ0xLRElWX1NUQVRDUFUxKSAmIDB4MTEpCisJd2hpbGUgKF9fcmF3X3JlYWRsKGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNV9DTEtESVZfU1RBVENQVTEpICYgMHgxMSkKIAkJY3B1X3JlbGF4KCk7CiB9CiAKQEAgLTExMSw3ICsxMTMsOCBAQAogCiAJZG8gewogCQljcHVfcmVsYXgoKTsKLQkJdG1wID0gKF9fcmF3X3JlYWRsKEVYWU5PUzVfQ0xLTVVYX1NUQVRDUFUpID4+IDE2KTsKKwkJdG1wID0gKF9fcmF3X3JlYWRsKGNwdWZyZXEtPmNtdV9yZWdzICsgRVhZTk9TNV9DTEtNVVhfU1RBVENQVSkKKwkJCT4+IDE2KTsKIAkJdG1wICY9IDB4NzsKIAl9IHdoaWxlICh0bXAgIT0gMHgyKTsKIApAQCAtMTIyLDcgKzEyNSw3IEBACiAKIAlkbyB7CiAJCWNwdV9yZWxheCgpOwotCQl0bXAgPSBfX3Jhd19yZWFkbChFWFlOT1M1X0NMS01VWF9TVEFUQ1BVKTsKKwkJdG1wID0gX19yYXdfcmVhZGwoY3B1ZnJlcS0+Y211X3JlZ3MgKyBFWFlOT1M1X0NMS01VWF9TVEFUQ1BVKTsKIAkJdG1wICY9ICgweDcgPDwgMTYpOwogCX0gd2hpbGUgKHRtcCAhPSAoMHgxIDw8IDE2KSk7CiB9CkBAIC0xNDEsOCArMTQ0LDMwIEBACiAKIGludCBleHlub3M1MjUwX2NwdWZyZXFfaW5pdChzdHJ1Y3QgZXh5bm9zX2R2ZnNfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAorCS8qCisJICogSEFDSzogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIGdldCBhY2Nlc3MgdG8gY2xvY2sKKwkgKiBjb250cm9sbGVyIHJlZ2lzdGVycyBkaXJlY3RseSBhbmQgcmVtb3ZlIHN0YXRpYyBtYXBwaW5ncyBhbmQKKwkgKiBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0gaGVhZGVycy4gSXQgaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZQorCSAqIEV4eW5vcyBtdWx0aS1wbGF0Zm9ybSBzdXBwb3J0IGFuZCB3aWxsIGJlIHJlbW92ZWQgdG9nZXRoZXIgd2l0aAorCSAqIHRoaXMgd2hvbGUgZHJpdmVyIGFzIHNvb24gYXMgRXh5bm9zIGdldHMgbWlncmF0ZWQgdG8gdXNlCisJICogY3B1ZnJlcS1jcHUwIGRyaXZlci4KKwkgKi8KKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJzYW1zdW5nLGV4eW5vczUyNTAtY2xvY2siKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBmaW5kIGNsb2NrIGNvbnRyb2xsZXIgRFQgbm9kZVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mby0+Y211X3JlZ3MgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFpbmZvLT5jbXVfcmVncykgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gbWFwIENNVSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCiAJY3B1X2NsayA9IGNsa19nZXQoTlVMTCwgImFybWNsayIpOwogCWlmIChJU19FUlIoY3B1X2NsaykpCiAJCXJldHVybiBQVFJfRVJSKGNwdV9jbGspOwpAQCAtMTY5LDYgKzE5NCw4IEBACiAJaW5mby0+ZnJlcV90YWJsZSA9IGV4eW5vczUyNTBfZnJlcV90YWJsZTsKIAlpbmZvLT5zZXRfZnJlcSA9IGV4eW5vczUyNTBfc2V0X2ZyZXF1ZW5jeTsKIAorCWNwdWZyZXEgPSBpbmZvOworCiAJcmV0dXJuIDA7CiAKIGVycl9tb3V0X2FwbGw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvczNjMjR4eC1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvczNjMjR4eC1jcHVmcmVxLmMKaW5kZXggYmUxYjJiNS4uMjI3ZWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL3MzYzI0eHgtY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9zM2MyNHh4LWNwdWZyZXEuYwpAQCAtMTQxLDYgKzE0MSw3IEBACiAKIHN0YXRpYyB2b2lkIHMzY19jcHVmcmVxX3NldGZ2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQogeworCWNmZy0+bXBsbCA9IF9jbGtfbXBsbDsKIAkoY2ZnLT5pbmZvLT5zZXRfZnZjbykoY2ZnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL0tjb25maWcuYXJtIGIvZHJpdmVycy9jcHVpZGxlL0tjb25maWcuYXJtCmluZGV4IDM3MWU3NWQuLmI2ZDY5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9LY29uZmlnLmFybQorKysgYi9kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy5hcm0KQEAgLTEsNiArMSwxMSBAQAogIwogIyBBUk0gQ1BVIElkbGUgZHJpdmVycwogIworY29uZmlnIEFSTV9BUk1BREFfMzcwX1hQX0NQVUlETEUKKwlib29sICJDUFUgSWRsZSBEcml2ZXIgZm9yIEFybWFkYSAzNzAvWFAgZmFtaWx5IHByb2Nlc3NvcnMiCisJZGVwZW5kcyBvbiBBUkNIX01WRUJVCisJaGVscAorCSAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIGNwdWlkbGUgb24gQXJtYWRhIDM3MC9YUCBwcm9jZXNzb3JzLgogCiBjb25maWcgQVJNX0JJR19MSVRUTEVfQ1BVSURMRQogCWJvb2wgIlN1cHBvcnQgZm9yIEFSTSBiaWcuTElUVExFIHByb2Nlc3NvcnMiCkBAIC01MCwzICs1NSw5IEBACiAJZGVwZW5kcyBvbiBBUkNIX0FUOTEKIAloZWxwCiAJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgY3B1aWRsZSBmb3IgQVQ5MSBwcm9jZXNzb3JzCisKK2NvbmZpZyBBUk1fRVhZTk9TX0NQVUlETEUKKwlib29sICJDcHUgSWRsZSBEcml2ZXIgZm9yIHRoZSBFeHlub3MgcHJvY2Vzc29ycyIKKwlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TCisJaGVscAorCSAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIGNwdWlkbGUgZm9yIEV4eW5vcyBwcm9jZXNzb3JzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUgYi9kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUKaW5kZXggNTM0ZmZmNS4uOWI1YjJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBUk0gU29DIGRyaXZlcnMKK29iai0kKENPTkZJR19BUk1fQVJNQURBXzM3MF9YUF9DUFVJRExFKSArPSBjcHVpZGxlLWFybWFkYS0zNzAteHAubwogb2JqLSQoQ09ORklHX0FSTV9CSUdfTElUVExFX0NQVUlETEUpCSs9IGNwdWlkbGUtYmlnX2xpdHRsZS5vCiBvYmotJChDT05GSUdfQVJNX0NMUFM3MTFYX0NQVUlETEUpCSs9IGNwdWlkbGUtY2xwczcxMXgubwogb2JqLSQoQ09ORklHX0FSTV9ISUdIQkFOS19DUFVJRExFKQkrPSBjcHVpZGxlLWNhbHhlZGEubwpAQCAtMTQsNiArMTUsNyBAQAogb2JqLSQoQ09ORklHX0FSTV9aWU5RX0NQVUlETEUpCQkrPSBjcHVpZGxlLXp5bnEubwogb2JqLSQoQ09ORklHX0FSTV9VODUwMF9DUFVJRExFKSAgICAgICAgICs9IGNwdWlkbGUtdXg1MDAubwogb2JqLSQoQ09ORklHX0FSTV9BVDkxX0NQVUlETEUpICAgICAgICAgICs9IGNwdWlkbGUtYXQ5MS5vCitvYmotJChDT05GSUdfQVJNX0VYWU5PU19DUFVJRExFKSAgICAgICAgKz0gY3B1aWRsZS1leHlub3MubwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFBPV0VSUEMgZHJpdmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NvdXBsZWQuYyBiL2RyaXZlcnMvY3B1aWRsZS9jb3VwbGVkLmMKaW5kZXggY2I2NjU0Yi4uNzNmZTJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NvdXBsZWQuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY291cGxlZC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIHsKIAlpbnQgbiA9IGRldi0+Y291cGxlZC0+b25saW5lX2NvdW50OwogCi0Jc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWF0b21pY19pbmMoYSk7CiAKIAl3aGlsZSAoYXRvbWljX3JlYWQoYSkgPCBuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYXJtYWRhLTM3MC14cC5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYXJtYWRhLTM3MC14cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTg3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1hcm1hZGEtMzcwLXhwLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIE1hcnZlbGwgQXJtYWRhIDM3MCBhbmQgQXJtYWRhIFhQIFNvQyBjcHVpZGxlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsCisgKgorICogTmFkYXYgSGFrbGFpIDxuYWRhdmhAbWFydmVsbC5jb20+CisgKiBHcmVnb3J5IENMRU1FTlQgPGdyZWdvcnkuY2xlbWVudEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogTWFpbnRhaW5lcjogR3JlZ29yeSBDTEVNRU5UIDxncmVnb3J5LmNsZW1lbnRAZnJlZS1lbGVjdHJvbnMuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWlkbGUuaD4KKworI2RlZmluZSBBUk1BREFfMzcwX1hQX01BWF9TVEFURVMJMworI2RlZmluZSBBUk1BREFfMzcwX1hQX0ZMQUdfREVFUF9JRExFCTB4MTAwMDAKKworc3RhdGljIGludCAoKmFybWFkYV8zNzBfeHBfY3B1X3N1c3BlbmQpKGludCk7CisKK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9lbnRlcl9pZGxlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2LAorCQkJCWludCBpbmRleCkKK3sKKwlpbnQgcmV0OworCWJvb2wgZGVlcGlkbGUgPSBmYWxzZTsKKwljcHVfcG1fZW50ZXIoKTsKKworCWlmIChkcnYtPnN0YXRlc1tpbmRleF0uZmxhZ3MgJiBBUk1BREFfMzcwX1hQX0ZMQUdfREVFUF9JRExFKQorCQlkZWVwaWRsZSA9IHRydWU7CisKKwlyZXQgPSBhcm1hZGFfMzcwX3hwX2NwdV9zdXNwZW5kKGRlZXBpZGxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJY3B1X3BtX2V4aXQoKTsKKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX2RyaXZlciBhcm1hZGFfMzcwX3hwX2lkbGVfZHJpdmVyID0geworCS5uYW1lCQkJPSAiYXJtYWRhXzM3MF94cF9pZGxlIiwKKwkuc3RhdGVzWzBdCQk9IEFSTV9DUFVJRExFX1dGSV9TVEFURSwKKwkuc3RhdGVzWzFdCQk9IHsKKwkJLmVudGVyCQkJPSBhcm1hZGFfMzcwX3hwX2VudGVyX2lkbGUsCisJCS5leGl0X2xhdGVuY3kJCT0gMTAsCisJCS5wb3dlcl91c2FnZQkJPSA1MCwKKwkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAsCisJCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5uYW1lCQkJPSAiTVYgQ1BVIElETEUiLAorCQkuZGVzYwkJCT0gIkNQVSBwb3dlciBkb3duIiwKKwl9LAorCS5zdGF0ZXNbMl0JCT0geworCQkuZW50ZXIJCQk9IGFybWFkYV8zNzBfeHBfZW50ZXJfaWRsZSwKKwkJLmV4aXRfbGF0ZW5jeQkJPSAxMDAsCisJCS5wb3dlcl91c2FnZQkJPSA1LAorCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDEwMDAsCisJCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAorCQkJCQkJQVJNQURBXzM3MF9YUF9GTEFHX0RFRVBfSURMRSwKKwkJLm5hbWUJCQk9ICJNViBDUFUgREVFUCBJRExFIiwKKwkJLmRlc2MJCQk9ICJDUFUgYW5kIEwyIEZhYnJpYyBwb3dlciBkb3duIiwKKwl9LAorCS5zdGF0ZV9jb3VudCA9IEFSTUFEQV8zNzBfWFBfTUFYX1NUQVRFUywKK307CisKK3N0YXRpYyBpbnQgYXJtYWRhXzM3MF94cF9jcHVpZGxlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisKKwlhcm1hZGFfMzcwX3hwX2NwdV9zdXNwZW5kID0gKHZvaWQgKikocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCXJldHVybiBjcHVpZGxlX3JlZ2lzdGVyKCZhcm1hZGFfMzcwX3hwX2lkbGVfZHJpdmVyLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtYWRhXzM3MF94cF9jcHVpZGxlX3BsYXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNwdWlkbGUtYXJtYWRhLTM3MC14cCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gYXJtYWRhXzM3MF94cF9jcHVpZGxlX3Byb2JlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhcm1hZGFfMzcwX3hwX2NwdWlkbGVfcGxhdF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJHcmVnb3J5IENMRU1FTlQgPGdyZWdvcnkuY2xlbWVudEBmcmVlLWVsZWN0cm9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFybWFkYSAzNzAvWFAgY3B1IGlkbGUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1leHlub3MuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWV4eW5vcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDE1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1leHlub3MuYwpAQCAtMCwwICsxLDk5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vcy9jcHVpZGxlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9jcHVpZGxlLmg+CisKK3N0YXRpYyB2b2lkICgqZXh5bm9zX2VudGVyX2FmdHIpKHZvaWQpOworCitzdGF0aWMgaW50IGlkbGVfZmluaXNoZXIodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlleHlub3NfZW50ZXJfYWZ0cigpOworCWNwdV9kb19pZGxlKCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBleHlub3NfZW50ZXJfY29yZTBfYWZ0cihzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgKmRydiwKKwkJCQlpbnQgaW5kZXgpCit7CisJY3B1X3BtX2VudGVyKCk7CisJY3B1X3N1c3BlbmQoMCwgaWRsZV9maW5pc2hlcik7CisJY3B1X3BtX2V4aXQoKTsKKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIGludCBleHlub3NfZW50ZXJfbG93cG93ZXIoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYsCisJCQkJaW50IGluZGV4KQoreworCWludCBuZXdfaW5kZXggPSBpbmRleDsKKworCS8qIEFGVFIgY2FuIG9ubHkgYmUgZW50ZXJlZCB3aGVuIGNvcmVzIG90aGVyIHRoYW4gQ1BVMCBhcmUgb2ZmbGluZSAqLworCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEgfHwgZGV2LT5jcHUgIT0gMCkKKwkJbmV3X2luZGV4ID0gZHJ2LT5zYWZlX3N0YXRlX2luZGV4OworCisJaWYgKG5ld19pbmRleCA9PSAwKQorCQlyZXR1cm4gYXJtX2NwdWlkbGVfc2ltcGxlX2VudGVyKGRldiwgZHJ2LCBuZXdfaW5kZXgpOworCWVsc2UKKwkJcmV0dXJuIGV4eW5vc19lbnRlcl9jb3JlMF9hZnRyKGRldiwgZHJ2LCBuZXdfaW5kZXgpOworfQorCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfZHJpdmVyIGV4eW5vc19pZGxlX2RyaXZlciA9IHsKKwkubmFtZQkJCT0gImV4eW5vc19pZGxlIiwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5zdGF0ZXMgPSB7CisJCVswXSA9IEFSTV9DUFVJRExFX1dGSV9TVEFURSwKKwkJWzFdID0geworCQkJLmVudGVyCQkJPSBleHlub3NfZW50ZXJfbG93cG93ZXIsCisJCQkuZXhpdF9sYXRlbmN5CQk9IDMwMCwKKwkJCS50YXJnZXRfcmVzaWRlbmN5CT0gMTAwMDAwLAorCQkJLmZsYWdzCQkJPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJCS5uYW1lCQkJPSAiQzEiLAorCQkJLmRlc2MJCQk9ICJBUk0gcG93ZXIgZG93biIsCisJCX0sCisJfSwKKwkuc3RhdGVfY291bnQgPSAyLAorCS5zYWZlX3N0YXRlX2luZGV4ID0gMCwKK307CisKK3N0YXRpYyBpbnQgZXh5bm9zX2NwdWlkbGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJZXh5bm9zX2VudGVyX2FmdHIgPSAodm9pZCAqKShwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CisKKwlyZXQgPSBjcHVpZGxlX3JlZ2lzdGVyKCZleHlub3NfaWRsZV9kcml2ZXIsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWlkbGUgZHJpdmVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXh5bm9zX2NwdWlkbGVfZHJpdmVyID0geworCS5wcm9iZQk9IGV4eW5vc19jcHVpZGxlX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImV4eW5vc19jcHVpZGxlIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZXh5bm9zX2NwdWlkbGVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL254L254LTg0Mi5jIGIvZHJpdmVycy9jcnlwdG8vbngvbngtODQyLmMKaW5kZXggMWU1NDgxZC4uNWNlOGI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vbngvbngtODQyLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vbngvbngtODQyLmMKQEAgLTExOTcsMTIgKzExOTcsNyBAQAogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoZGV2X3NldF9kcnZkYXRhKCZ2aW9kZXYtPmRldiwgcmN1X2RlcmVmZXJlbmNlKGRldmRhdGEpKSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZGV2X2VycigmdmlvZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0IGRyaXZlciBkYXRhIGZvciBkZXZpY2VcbiIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBlcnJvcjsKLQl9CisJZGV2X3NldF9kcnZkYXRhKCZ2aW9kZXYtPmRldiwgcmN1X2RlcmVmZXJlbmNlKGRldmRhdGEpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnZpb2Rldi0+ZGV2LmtvYmosICZueDg0Ml9hdHRyaWJ1dGVfZ3JvdXApKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9lZG1hLmMgYi9kcml2ZXJzL2RtYS9lZG1hLmMKaW5kZXggOTI2MzYwYy4uZDA4YzRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2VkbWEuYwpAQCAtNTcsMTQgKzU3LDQ4IEBACiAjZGVmaW5lIEVETUFfTUFYX1NMT1RTCQlNQVhfTlJfU0cKICNkZWZpbmUgRURNQV9ERVNDUklQVE9SUwkxNgogCitzdHJ1Y3QgZWRtYV9wc2V0IHsKKwl1MzIJCQkJbGVuOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXN0cnVjdCBlZG1hY2NfcGFyYW0JCXBhcmFtOworfTsKKwogc3RydWN0IGVkbWFfZGVzYyB7CiAJc3RydWN0IHZpcnRfZG1hX2Rlc2MJCXZkZXNjOwogCXN0cnVjdCBsaXN0X2hlYWQJCW5vZGU7CisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uCWRpcmVjdGlvbjsKIAlpbnQJCQkJY3ljbGljOwogCWludAkJCQlhYnN5bmM7CiAJaW50CQkJCXBzZXRfbnI7CisJc3RydWN0IGVkbWFfY2hhbgkJKmVjaGFuOwogCWludAkJCQlwcm9jZXNzZWQ7Ci0Jc3RydWN0IGVkbWFjY19wYXJhbQkJcHNldFswXTsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyA0IGVsZW1lbnRzIGFyZSB1c2VkIGZvciByZXNpZHVlIGFjY291bnRpbmcuCisJICoKKwkgKiAtIHByb2Nlc3NlZF9zdGF0OiB0aGUgbnVtYmVyIG9mIFNHIGVsZW1lbnRzIHdlIGhhdmUgdHJhdmVyc2VkCisJICogc28gZmFyIHRvIGNvdmVyIGFjY291bnRpbmcuIFRoaXMgaXMgdXBkYXRlZCBkaXJlY3RseSB0byBwcm9jZXNzZWQKKwkgKiBkdXJpbmcgZWRtYV9jYWxsYmFjayBhbmQgaXMgYWx3YXlzIDw9IHByb2Nlc3NlZCwgYmVjYXVzZSBwcm9jZXNzZWQKKwkgKiByZWZlcnMgdG8gdGhlIG51bWJlciBvZiBwZW5kaW5nIHRyYW5zZmVyIChwcm9ncmFtbWVkIHRvIEVETUEKKwkgKiBjb250cm9sbGVyKSwgd2hlcmUgYXMgcHJvY2Vzc2VkX3N0YXQgdHJhY2tzIG51bWJlciBvZiB0cmFuc2ZlcnMKKwkgKiBhY2NvdW50ZWQgZm9yIHNvIGZhci4KKwkgKgorCSAqIC0gcmVzaWR1ZTogVGhlIGFtb3VudCBvZiBieXRlcyB3ZSBoYXZlIGxlZnQgdG8gdHJhbnNmZXIgZm9yIHRoaXMgZGVzYworCSAqCisJICogLSByZXNpZHVlX3N0YXQ6IFRoZSByZXNpZHVlIGluIGJ5dGVzIG9mIGRhdGEgd2UgaGF2ZSBjb3ZlcmVkCisJICogc28gZmFyIGZvciBhY2NvdW50aW5nLiBUaGlzIGlzIHVwZGF0ZWQgZGlyZWN0bHkgdG8gcmVzaWR1ZQorCSAqIGR1cmluZyBjYWxsYmFja3MgdG8ga2VlcCBpdCBjdXJyZW50LgorCSAqCisJICogLSBzZ19sZW46IFRyYWNrcyB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGludGVybWVkaWF0ZSB0cmFuc2ZlciwKKwkgKiB0aGlzIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSB0aGUgcmVzaWR1ZSBkdXJpbmcgaW50ZXJtZWRpYXRlIHRyYW5zZmVyCisJICogY29tcGxldGlvbiBjYWxsYmFjay4KKwkgKi8KKwlpbnQJCQkJcHJvY2Vzc2VkX3N0YXQ7CisJdTMyCQkJCXNnX2xlbjsKKwl1MzIJCQkJcmVzaWR1ZTsKKwl1MzIJCQkJcmVzaWR1ZV9zdGF0OworCisJc3RydWN0IGVkbWFfcHNldAkJcHNldFswXTsKIH07CiAKIHN0cnVjdCBlZG1hX2NjOwpAQCAtMTM2LDEyICsxNzAsMTQgQEAKIAkvKiBGaW5kIG91dCBob3cgbWFueSBsZWZ0ICovCiAJbGVmdCA9IGVkZXNjLT5wc2V0X25yIC0gZWRlc2MtPnByb2Nlc3NlZDsKIAluc2xvdHMgPSBtaW4oTUFYX05SX1NHLCBsZWZ0KTsKKwllZGVzYy0+c2dfbGVuID0gMDsKIAogCS8qIFdyaXRlIGRlc2NyaXB0b3IgUGFSQU0gc2V0KHMpICovCiAJZm9yIChpID0gMDsgaSA8IG5zbG90czsgaSsrKSB7CiAJCWogPSBpICsgZWRlc2MtPnByb2Nlc3NlZDsKLQkJZWRtYV93cml0ZV9zbG90KGVjaGFuLT5zbG90W2ldLCAmZWRlc2MtPnBzZXRbal0pOwotCQlkZXZfZGJnKGVjaGFuLT52Y2hhbi5jaGFuLmRldmljZS0+ZGV2LAorCQllZG1hX3dyaXRlX3Nsb3QoZWNoYW4tPnNsb3RbaV0sICZlZGVzYy0+cHNldFtqXS5wYXJhbSk7CisJCWVkZXNjLT5zZ19sZW4gKz0gZWRlc2MtPnBzZXRbal0ubGVuOworCQlkZXZfdmRiZyhlY2hhbi0+dmNoYW4uY2hhbi5kZXZpY2UtPmRldiwKIAkJCSJcbiBwc2V0WyVkXTpcbiIKIAkJCSIgIGNobnVtXHQlZFxuIgogCQkJIiAgc2xvdFx0JWRcbiIKQEAgLTE1NCwxNCArMTkwLDE0IEBACiAJCQkiICBjaWR4XHQlMDh4XG4iCiAJCQkiICBsa3JsZFx0JTA4eFxuIiwKIAkJCWosIGVjaGFuLT5jaF9udW0sIGVjaGFuLT5zbG90W2ldLAotCQkJZWRlc2MtPnBzZXRbal0ub3B0LAotCQkJZWRlc2MtPnBzZXRbal0uc3JjLAotCQkJZWRlc2MtPnBzZXRbal0uZHN0LAotCQkJZWRlc2MtPnBzZXRbal0uYV9iX2NudCwKLQkJCWVkZXNjLT5wc2V0W2pdLmNjbnQsCi0JCQllZGVzYy0+cHNldFtqXS5zcmNfZHN0X2JpZHgsCi0JCQllZGVzYy0+cHNldFtqXS5zcmNfZHN0X2NpZHgsCi0JCQllZGVzYy0+cHNldFtqXS5saW5rX2JjbnRybGQpOworCQkJZWRlc2MtPnBzZXRbal0ucGFyYW0ub3B0LAorCQkJZWRlc2MtPnBzZXRbal0ucGFyYW0uc3JjLAorCQkJZWRlc2MtPnBzZXRbal0ucGFyYW0uZHN0LAorCQkJZWRlc2MtPnBzZXRbal0ucGFyYW0uYV9iX2NudCwKKwkJCWVkZXNjLT5wc2V0W2pdLnBhcmFtLmNjbnQsCisJCQllZGVzYy0+cHNldFtqXS5wYXJhbS5zcmNfZHN0X2JpZHgsCisJCQllZGVzYy0+cHNldFtqXS5wYXJhbS5zcmNfZHN0X2NpZHgsCisJCQllZGVzYy0+cHNldFtqXS5wYXJhbS5saW5rX2JjbnRybGQpOwogCQkvKiBMaW5rIHRvIHRoZSBwcmV2aW91cyBzbG90IGlmIG5vdCB0aGUgbGFzdCBzZXQgKi8KIAkJaWYgKGkgIT0gKG5zbG90cyAtIDEpKQogCQkJZWRtYV9saW5rKGVjaGFuLT5zbG90W2ldLCBlY2hhbi0+c2xvdFtpKzFdKTsKQEAgLTE4Myw3ICsyMTksOCBAQAogCX0KIAogCWlmIChlZGVzYy0+cHJvY2Vzc2VkIDw9IE1BWF9OUl9TRykgewotCQlkZXZfZGJnKGRldiwgImZpcnN0IHRyYW5zZmVyIHN0YXJ0aW5nICVkXG4iLCBlY2hhbi0+Y2hfbnVtKTsKKwkJZGV2X2RiZyhkZXYsICJmaXJzdCB0cmFuc2ZlciBzdGFydGluZyBvbiBjaGFubmVsICVkXG4iLAorCQkJZWNoYW4tPmNoX251bSk7CiAJCWVkbWFfc3RhcnQoZWNoYW4tPmNoX251bSk7CiAJfSBlbHNlIHsKIAkJZGV2X2RiZyhkZXYsICJjaGFuOiAlZDogY29tcGxldGVkICVkIGVsZW1lbnRzLCByZXN1bWluZ1xuIiwKQEAgLTE5Nyw3ICsyMzQsNyBAQAogCSAqIE1BWF9OUl9TRwogCSAqLwogCWlmIChlY2hhbi0+bWlzc2VkKSB7Ci0JCWRldl9kYmcoZGV2LCAibWlzc2VkIGV2ZW50IGluIGV4ZWN1dGUgZGV0ZWN0ZWRcbiIpOworCQlkZXZfZGJnKGRldiwgIm1pc3NlZCBldmVudCBvbiBjaGFubmVsICVkXG4iLCBlY2hhbi0+Y2hfbnVtKTsKIAkJZWRtYV9jbGVhbl9jaGFubmVsKGVjaGFuLT5jaF9udW0pOwogCQllZG1hX3N0b3AoZWNoYW4tPmNoX251bSk7CiAJCWVkbWFfc3RhcnQoZWNoYW4tPmNoX251bSk7CkBAIC0yNDIsNiArMjc5LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZWRtYV9kbWFfcGF1c2Uoc3RydWN0IGVkbWFfY2hhbiAqZWNoYW4pCit7CisJLyogUGF1c2UvUmVzdW1lIG9ubHkgYWxsb3dlZCB3aXRoIGN5Y2xpYyBtb2RlICovCisJaWYgKCFlY2hhbi0+ZWRlc2MtPmN5Y2xpYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZG1hX3BhdXNlKGVjaGFuLT5jaF9udW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVkbWFfZG1hX3Jlc3VtZShzdHJ1Y3QgZWRtYV9jaGFuICplY2hhbikKK3sKKwkvKiBQYXVzZS9SZXN1bWUgb25seSBhbGxvd2VkIHdpdGggY3ljbGljIG1vZGUgKi8KKwlpZiAoIWVjaGFuLT5lZGVzYy0+Y3ljbGljKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVkbWFfcmVzdW1lKGVjaGFuLT5jaF9udW0pOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGVkbWFfY29udHJvbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGVudW0gZG1hX2N0cmxfY21kIGNtZCwKIAkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMjU3LDYgKzMxNCwxNCBAQAogCQljb25maWcgPSAoc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKilhcmc7CiAJCXJldCA9IGVkbWFfc2xhdmVfY29uZmlnKGVjaGFuLCBjb25maWcpOwogCQlicmVhazsKKwljYXNlIERNQV9QQVVTRToKKwkJcmV0ID0gZWRtYV9kbWFfcGF1c2UoZWNoYW4pOworCQlicmVhazsKKworCWNhc2UgRE1BX1JFU1VNRToKKwkJcmV0ID0gZWRtYV9kbWFfcmVzdW1lKGVjaGFuKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PU1lTOwogCX0KQEAgLTI3NSwxOCArMzQwLDIzIEBACiAgKiBAZG1hX2xlbmd0aDogVG90YWwgbGVuZ3RoIG9mIHRoZSBETUEgdHJhbnNmZXIKICAqIEBkaXJlY3Rpb246IERpcmVjdGlvbiBvZiB0aGUgdHJhbnNmZXIKICAqLwotc3RhdGljIGludCBlZG1hX2NvbmZpZ19wc2V0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IGVkbWFjY19wYXJhbSAqcHNldCwKK3N0YXRpYyBpbnQgZWRtYV9jb25maWdfcHNldChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBlZG1hX3BzZXQgKmVwc2V0LAogCWRtYV9hZGRyX3Qgc3JjX2FkZHIsIGRtYV9hZGRyX3QgZHN0X2FkZHIsIHUzMiBidXJzdCwKIAllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkZXZfd2lkdGgsIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLAogCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAJc3RydWN0IGVkbWFfY2hhbiAqZWNoYW4gPSB0b19lZG1hX2NoYW4oY2hhbik7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gY2hhbi0+ZGV2aWNlLT5kZXY7CisJc3RydWN0IGVkbWFjY19wYXJhbSAqcGFyYW0gPSAmZXBzZXQtPnBhcmFtOwogCWludCBhY250LCBiY250LCBjY250LCBjaWR4OwogCWludCBzcmNfYmlkeCwgZHN0X2JpZHgsIHNyY19jaWR4LCBkc3RfY2lkeDsKIAlpbnQgYWJzeW5jOwogCiAJYWNudCA9IGRldl93aWR0aDsKKworCS8qIHNyYy9kc3RfbWF4YnVyc3QgPT0gMCBpcyB0aGUgc2FtZSBjYXNlIGFzIHNyYy9kc3RfbWF4YnVyc3QgPT0gMSAqLworCWlmICghYnVyc3QpCisJCWJ1cnN0ID0gMTsKIAkvKgogCSAqIElmIHRoZSBtYXhidXJzdCBpcyBlcXVhbCB0byB0aGUgZmlmbyB3aWR0aCwgdXNlCiAJICogQS1zeW5jZWQgdHJhbnNmZXJzLiBUaGlzIGFsbG93cyBmb3IgbGFyZ2UgY29udGlndW91cwpAQCAtMzM3LDQxICs0MDcsNTAgQEAKIAkJY2lkeCA9IGFjbnQgKiBiY250OwogCX0KIAorCWVwc2V0LT5sZW4gPSBkbWFfbGVuZ3RoOworCiAJaWYgKGRpcmVjdGlvbiA9PSBETUFfTUVNX1RPX0RFVikgewogCQlzcmNfYmlkeCA9IGFjbnQ7CiAJCXNyY19jaWR4ID0gY2lkeDsKIAkJZHN0X2JpZHggPSAwOwogCQlkc3RfY2lkeCA9IDA7CisJCWVwc2V0LT5hZGRyID0gc3JjX2FkZHI7CiAJfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pICB7CiAJCXNyY19iaWR4ID0gMDsKIAkJc3JjX2NpZHggPSAwOwogCQlkc3RfYmlkeCA9IGFjbnQ7CiAJCWRzdF9jaWR4ID0gY2lkeDsKKwkJZXBzZXQtPmFkZHIgPSBkc3RfYWRkcjsKKwl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBETUFfTUVNX1RPX01FTSkgIHsKKwkJc3JjX2JpZHggPSBhY250OworCQlzcmNfY2lkeCA9IGNpZHg7CisJCWRzdF9iaWR4ID0gYWNudDsKKwkJZHN0X2NpZHggPSBjaWR4OwogCX0gZWxzZSB7CiAJCWRldl9lcnIoZGV2LCAiJXM6IGRpcmVjdGlvbiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBzZXQtPm9wdCA9IEVETUFfVENDKEVETUFfQ0hBTl9TTE9UKGVjaGFuLT5jaF9udW0pKTsKKwlwYXJhbS0+b3B0ID0gRURNQV9UQ0MoRURNQV9DSEFOX1NMT1QoZWNoYW4tPmNoX251bSkpOwogCS8qIENvbmZpZ3VyZSBBIG9yIEFCIHN5bmNocm9uaXplZCB0cmFuc2ZlcnMgKi8KIAlpZiAoYWJzeW5jKQotCQlwc2V0LT5vcHQgfD0gU1lOQ0RJTTsKKwkJcGFyYW0tPm9wdCB8PSBTWU5DRElNOwogCi0JcHNldC0+c3JjID0gc3JjX2FkZHI7Ci0JcHNldC0+ZHN0ID0gZHN0X2FkZHI7CisJcGFyYW0tPnNyYyA9IHNyY19hZGRyOworCXBhcmFtLT5kc3QgPSBkc3RfYWRkcjsKIAotCXBzZXQtPnNyY19kc3RfYmlkeCA9IChkc3RfYmlkeCA8PCAxNikgfCBzcmNfYmlkeDsKLQlwc2V0LT5zcmNfZHN0X2NpZHggPSAoZHN0X2NpZHggPDwgMTYpIHwgc3JjX2NpZHg7CisJcGFyYW0tPnNyY19kc3RfYmlkeCA9IChkc3RfYmlkeCA8PCAxNikgfCBzcmNfYmlkeDsKKwlwYXJhbS0+c3JjX2RzdF9jaWR4ID0gKGRzdF9jaWR4IDw8IDE2KSB8IHNyY19jaWR4OwogCi0JcHNldC0+YV9iX2NudCA9IGJjbnQgPDwgMTYgfCBhY250OwotCXBzZXQtPmNjbnQgPSBjY250OworCXBhcmFtLT5hX2JfY250ID0gYmNudCA8PCAxNiB8IGFjbnQ7CisJcGFyYW0tPmNjbnQgPSBjY250OwogCS8qCiAJICogT25seSB0aW1lIHdoZW4gKGJjbnRybGQpIGF1dG8gcmVsb2FkIGlzIHJlcXVpcmVkIGlzIGZvcgogCSAqIEEtc3luYyBjYXNlLCBhbmQgaW4gdGhpcyBjYXNlLCBhIHJlcXVpcmVtZW50IG9mIHJlbG9hZCB2YWx1ZQogCSAqIG9mIFNaXzY0Sy0xIG9ubHkgaXMgYXNzdXJlZC4gJ2xpbmsnIGlzIGluaXRpYWxseSBzZXQgdG8gTlVMTAogCSAqIGFuZCB0aGVuIGxhdGVyIHdpbGwgYmUgcG9wdWxhdGVkIGJ5IGVkbWFfZXhlY3V0ZS4KIAkgKi8KLQlwc2V0LT5saW5rX2JjbnRybGQgPSAweGZmZmZmZmZmOworCXBhcmFtLT5saW5rX2JjbnRybGQgPSAweGZmZmZmZmZmOwogCXJldHVybiBhYnN5bmM7CiB9CiAKQEAgLTQwMSwyMyArNDgwLDI2IEBACiAJCWRldl93aWR0aCA9IGVjaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7CiAJCWJ1cnN0ID0gZWNoYW4tPmNmZy5kc3RfbWF4YnVyc3Q7CiAJfSBlbHNlIHsKLQkJZGV2X2VycihkZXYsICIlczogYmFkIGRpcmVjdGlvbj9cbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlczogYmFkIGRpcmVjdGlvbjogJWRcbiIsIF9fZnVuY19fLCBkaXJlY3Rpb24pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlpZiAoZGV2X3dpZHRoID09IERNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklORUQpIHsKLQkJZGV2X2VycihkZXYsICJVbmRlZmluZWQgc2xhdmUgYnVzd2lkdGhcbiIpOworCQlkZXZfZXJyKGRldiwgIiVzOiBVbmRlZmluZWQgc2xhdmUgYnVzd2lkdGhcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJZWRlc2MgPSBremFsbG9jKHNpemVvZigqZWRlc2MpICsgc2dfbGVuICoKIAkJc2l6ZW9mKGVkZXNjLT5wc2V0WzBdKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFlZGVzYykgewotCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGRlc2NyaXB0b3JcbiIpOworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgYSBkZXNjcmlwdG9yXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWVkZXNjLT5wc2V0X25yID0gc2dfbGVuOworCWVkZXNjLT5yZXNpZHVlID0gMDsKKwllZGVzYy0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCWVkZXNjLT5lY2hhbiA9IGVjaGFuOwogCiAJLyogQWxsb2NhdGUgYSBQYVJBTSBzbG90LCBpZiBuZWVkZWQgKi8KIAluc2xvdHMgPSBtaW5fdCh1bnNpZ25lZCwgTUFYX05SX1NHLCBzZ19sZW4pOwpAQCAtNDI5LDcgKzUxMSw4IEBACiAJCQkJCQlFRE1BX1NMT1RfQU5ZKTsKIAkJCWlmIChlY2hhbi0+c2xvdFtpXSA8IDApIHsKIAkJCQlrZnJlZShlZGVzYyk7Ci0JCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2xvdFxuIik7CisJCQkJZGV2X2VycihkZXYsICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHNsb3RcbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQpAQCAtNDUyLDE2ICs1MzUsNTYgQEAKIAkJfQogCiAJCWVkZXNjLT5hYnN5bmMgPSByZXQ7CisJCWVkZXNjLT5yZXNpZHVlICs9IHNnX2RtYV9sZW4oc2cpOwogCiAJCS8qIElmIHRoaXMgaXMgdGhlIGxhc3QgaW4gYSBjdXJyZW50IFNHIHNldCBvZiB0cmFuc2FjdGlvbnMsCiAJCSAgIGVuYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgbmV4dCBzZXQgaXMgcHJvY2Vzc2VkICovCiAJCWlmICghKChpKzEpICUgTUFYX05SX1NHKSkKLQkJCWVkZXNjLT5wc2V0W2ldLm9wdCB8PSBUQ0lOVEVOOworCQkJZWRlc2MtPnBzZXRbaV0ucGFyYW0ub3B0IHw9IFRDSU5URU47CiAKIAkJLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBzZXQsIGVuYWJsZSBjb21wbGV0aW9uIGludGVycnVwdCBmbGFnICovCiAJCWlmIChpID09IHNnX2xlbiAtIDEpCi0JCQllZGVzYy0+cHNldFtpXS5vcHQgfD0gVENJTlRFTjsKKwkJCWVkZXNjLT5wc2V0W2ldLnBhcmFtLm9wdCB8PSBUQ0lOVEVOOwogCX0KKwllZGVzYy0+cmVzaWR1ZV9zdGF0ID0gZWRlc2MtPnJlc2lkdWU7CisKKwlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmZWNoYW4tPnZjaGFuLCAmZWRlc2MtPnZkZXNjLCB0eF9mbGFncyk7Cit9CisKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZWRtYV9wcmVwX2RtYV9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRlc3QsIGRtYV9hZGRyX3Qgc3JjLAorCXNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgdHhfZmxhZ3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZWRtYV9kZXNjICplZGVzYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjaGFuLT5kZXZpY2UtPmRldjsKKwlzdHJ1Y3QgZWRtYV9jaGFuICplY2hhbiA9IHRvX2VkbWFfY2hhbihjaGFuKTsKKworCWlmICh1bmxpa2VseSghZWNoYW4gfHwgIWxlbikpCisJCXJldHVybiBOVUxMOworCisJZWRlc2MgPSBremFsbG9jKHNpemVvZigqZWRlc2MpICsgc2l6ZW9mKGVkZXNjLT5wc2V0WzBdKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFlZGVzYykgeworCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllZGVzYy0+cHNldF9uciA9IDE7CisKKwlyZXQgPSBlZG1hX2NvbmZpZ19wc2V0KGNoYW4sICZlZGVzYy0+cHNldFswXSwgc3JjLCBkZXN0LCAxLAorCQkJICAgICAgIERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTLCBsZW4sIERNQV9NRU1fVE9fTUVNKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwllZGVzYy0+YWJzeW5jID0gcmV0OworCisJLyoKKwkgKiBFbmFibGUgaW50ZXJtZWRpYXRlIHRyYW5zZmVyIGNoYWluaW5nIHRvIHJlLXRyaWdnZXIgY2hhbm5lbAorCSAqIG9uIGNvbXBsZXRpb24gb2YgZXZlcnkgVFIsIGFuZCBlbmFibGUgdHJhbnNmZXItY29tcGxldGlvbgorCSAqIGludGVycnVwdCBvbiBjb21wbGV0aW9uIG9mIHRoZSB3aG9sZSB0cmFuc2Zlci4KKwkgKi8KKwllZGVzYy0+cHNldFswXS5wYXJhbS5vcHQgfD0gSVRDQ0hFTjsKKwllZGVzYy0+cHNldFswXS5wYXJhbS5vcHQgfD0gVENJTlRFTjsKIAogCXJldHVybiB2Y2hhbl90eF9wcmVwKCZlY2hhbi0+dmNoYW4sICZlZGVzYy0+dmRlc2MsIHR4X2ZsYWdzKTsKIH0KQEAgLTQ5MywxMiArNjE2LDEyIEBACiAJCWRldl93aWR0aCA9IGVjaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7CiAJCWJ1cnN0ID0gZWNoYW4tPmNmZy5kc3RfbWF4YnVyc3Q7CiAJfSBlbHNlIHsKLQkJZGV2X2VycihkZXYsICIlczogYmFkIGRpcmVjdGlvbj9cbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlczogYmFkIGRpcmVjdGlvbjogJWRcbiIsIF9fZnVuY19fLCBkaXJlY3Rpb24pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlpZiAoZGV2X3dpZHRoID09IERNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklORUQpIHsKLQkJZGV2X2VycihkZXYsICJVbmRlZmluZWQgc2xhdmUgYnVzd2lkdGhcbiIpOworCQlkZXZfZXJyKGRldiwgIiVzOiBVbmRlZmluZWQgc2xhdmUgYnVzd2lkdGhcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC01MjMsMTYgKzY0NiwxOCBAQAogCWVkZXNjID0ga3phbGxvYyhzaXplb2YoKmVkZXNjKSArIG5zbG90cyAqCiAJCXNpemVvZihlZGVzYy0+cHNldFswXSksIEdGUF9BVE9NSUMpOwogCWlmICghZWRlc2MpIHsKLQkJZGV2X2RiZyhkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgYSBkZXNjcmlwdG9yXG4iKTsKKwkJZGV2X2VycihkZXYsICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGEgZGVzY3JpcHRvclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAllZGVzYy0+Y3ljbGljID0gMTsKIAllZGVzYy0+cHNldF9uciA9IG5zbG90czsKKwllZGVzYy0+cmVzaWR1ZSA9IGVkZXNjLT5yZXNpZHVlX3N0YXQgPSBidWZfbGVuOworCWVkZXNjLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisJZWRlc2MtPmVjaGFuID0gZWNoYW47CiAKLQlkZXZfZGJnKGRldiwgIiVzOiBuc2xvdHM9JWRcbiIsIF9fZnVuY19fLCBuc2xvdHMpOwotCWRldl9kYmcoZGV2LCAiJXM6IHBlcmlvZF9sZW49JWRcbiIsIF9fZnVuY19fLCBwZXJpb2RfbGVuKTsKLQlkZXZfZGJnKGRldiwgIiVzOiBidWZfbGVuPSVkXG4iLCBfX2Z1bmNfXywgYnVmX2xlbik7CisJZGV2X2RiZyhkZXYsICIlczogY2hhbm5lbD0lZCBuc2xvdHM9JWQgcGVyaW9kX2xlbj0lenUgYnVmX2xlbj0lenVcbiIsCisJCV9fZnVuY19fLCBlY2hhbi0+Y2hfbnVtLCBuc2xvdHMsIHBlcmlvZF9sZW4sIGJ1Zl9sZW4pOwogCiAJZm9yIChpID0gMDsgaSA8IG5zbG90czsgaSsrKSB7CiAJCS8qIEFsbG9jYXRlIGEgUGFSQU0gc2xvdCwgaWYgbmVlZGVkICovCkBAIC01NDIsNyArNjY3LDggQEAKIAkJCQkJCUVETUFfU0xPVF9BTlkpOwogCQkJaWYgKGVjaGFuLT5zbG90W2ldIDwgMCkgewogCQkJCWtmcmVlKGVkZXNjKTsKLQkJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBzbG90XG4iKTsKKwkJCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgc2xvdFxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CkBAIC01NjYsOCArNjkyLDggQEAKIAkJZWxzZQogCQkJc3JjX2FkZHIgKz0gcGVyaW9kX2xlbjsKIAotCQlkZXZfZGJnKGRldiwgIiVzOiBDb25maWd1cmUgcGVyaW9kICVkIG9mIGJ1ZjpcbiIsIF9fZnVuY19fLCBpKTsKLQkJZGV2X2RiZyhkZXYsCisJCWRldl92ZGJnKGRldiwgIiVzOiBDb25maWd1cmUgcGVyaW9kICVkIG9mIGJ1ZjpcbiIsIF9fZnVuY19fLCBpKTsKKwkJZGV2X3ZkYmcoZGV2LAogCQkJIlxuIHBzZXRbJWRdOlxuIgogCQkJIiAgY2hudW1cdCVkXG4iCiAJCQkiICBzbG90XHQlZFxuIgpAQCAtNTgwLDE0ICs3MDYsMTQgQEAKIAkJCSIgIGNpZHhcdCUwOHhcbiIKIAkJCSIgIGxrcmxkXHQlMDh4XG4iLAogCQkJaSwgZWNoYW4tPmNoX251bSwgZWNoYW4tPnNsb3RbaV0sCi0JCQllZGVzYy0+cHNldFtpXS5vcHQsCi0JCQllZGVzYy0+cHNldFtpXS5zcmMsCi0JCQllZGVzYy0+cHNldFtpXS5kc3QsCi0JCQllZGVzYy0+cHNldFtpXS5hX2JfY250LAotCQkJZWRlc2MtPnBzZXRbaV0uY2NudCwKLQkJCWVkZXNjLT5wc2V0W2ldLnNyY19kc3RfYmlkeCwKLQkJCWVkZXNjLT5wc2V0W2ldLnNyY19kc3RfY2lkeCwKLQkJCWVkZXNjLT5wc2V0W2ldLmxpbmtfYmNudHJsZCk7CisJCQllZGVzYy0+cHNldFtpXS5wYXJhbS5vcHQsCisJCQllZGVzYy0+cHNldFtpXS5wYXJhbS5zcmMsCisJCQllZGVzYy0+cHNldFtpXS5wYXJhbS5kc3QsCisJCQllZGVzYy0+cHNldFtpXS5wYXJhbS5hX2JfY250LAorCQkJZWRlc2MtPnBzZXRbaV0ucGFyYW0uY2NudCwKKwkJCWVkZXNjLT5wc2V0W2ldLnBhcmFtLnNyY19kc3RfYmlkeCwKKwkJCWVkZXNjLT5wc2V0W2ldLnBhcmFtLnNyY19kc3RfY2lkeCwKKwkJCWVkZXNjLT5wc2V0W2ldLnBhcmFtLmxpbmtfYmNudHJsZCk7CiAKIAkJZWRlc2MtPmFic3luYyA9IHJldDsKIApAQCAtNTk1LDcgKzcyMSw3IEBACiAJCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBldmVyeSBwZXJpb2QgYmVjYXVzZSBjYWxsYmFjawogCQkgKiBoYXMgdG8gYmUgY2FsbGVkIGZvciBldmVyeSBwZXJpb2QuCiAJCSAqLwotCQllZGVzYy0+cHNldFtpXS5vcHQgfD0gVENJTlRFTjsKKwkJZWRlc2MtPnBzZXRbaV0ucGFyYW0ub3B0IHw9IFRDSU5URU47CiAJfQogCiAJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmVjaGFuLT52Y2hhbiwgJmVkZXNjLT52ZGVzYywgdHhfZmxhZ3MpOwpAQCAtNjA2LDcgKzczMiw2IEBACiAJc3RydWN0IGVkbWFfY2hhbiAqZWNoYW4gPSBkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGVjaGFuLT52Y2hhbi5jaGFuLmRldmljZS0+ZGV2OwogCXN0cnVjdCBlZG1hX2Rlc2MgKmVkZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVkbWFjY19wYXJhbSBwOwogCiAJZWRlc2MgPSBlY2hhbi0+ZWRlc2M7CkBAIC02MTcsMjcgKzc0MiwzNCBAQAogCiAJc3dpdGNoIChjaF9zdGF0dXMpIHsKIAljYXNlIEVETUFfRE1BX0NPTVBMRVRFOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWNoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrKCZlY2hhbi0+dmNoYW4ubG9jayk7CiAKIAkJaWYgKGVkZXNjKSB7CiAJCQlpZiAoZWRlc2MtPmN5Y2xpYykgewogCQkJCXZjaGFuX2N5Y2xpY19jYWxsYmFjaygmZWRlc2MtPnZkZXNjKTsKIAkJCX0gZWxzZSBpZiAoZWRlc2MtPnByb2Nlc3NlZCA9PSBlZGVzYy0+cHNldF9ucikgewogCQkJCWRldl9kYmcoZGV2LCAiVHJhbnNmZXIgY29tcGxldGUsIHN0b3BwaW5nIGNoYW5uZWwgJWRcbiIsIGNoX251bSk7CisJCQkJZWRlc2MtPnJlc2lkdWUgPSAwOwogCQkJCWVkbWFfc3RvcChlY2hhbi0+Y2hfbnVtKTsKIAkJCQl2Y2hhbl9jb29raWVfY29tcGxldGUoJmVkZXNjLT52ZGVzYyk7CiAJCQkJZWRtYV9leGVjdXRlKGVjaGFuKTsKIAkJCX0gZWxzZSB7CiAJCQkJZGV2X2RiZyhkZXYsICJJbnRlcm1lZGlhdGUgdHJhbnNmZXIgY29tcGxldGUgb24gY2hhbm5lbCAlZFxuIiwgY2hfbnVtKTsKKworCQkJCS8qIFVwZGF0ZSBzdGF0aXN0aWNzIGZvciB0eF9zdGF0dXMgKi8KKwkJCQllZGVzYy0+cmVzaWR1ZSAtPSBlZGVzYy0+c2dfbGVuOworCQkJCWVkZXNjLT5yZXNpZHVlX3N0YXQgPSBlZGVzYy0+cmVzaWR1ZTsKKwkJCQllZGVzYy0+cHJvY2Vzc2VkX3N0YXQgPSBlZGVzYy0+cHJvY2Vzc2VkOworCiAJCQkJZWRtYV9leGVjdXRlKGVjaGFuKTsKIAkJCX0KIAkJfQogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZlY2hhbi0+dmNoYW4ubG9jayk7CiAKIAkJYnJlYWs7CiAJY2FzZSBFRE1BX0RNQV9DQ19FUlJPUjoKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVjaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9jaygmZWNoYW4tPnZjaGFuLmxvY2spOwogCiAJCWVkbWFfcmVhZF9zbG90KEVETUFfQ0hBTl9TTE9UKGVjaGFuLT5zbG90WzBdKSwgJnApOwogCkBAIC02NjgsNyArODAwLDcgQEAKIAkJCWVkbWFfdHJpZ2dlcl9jaGFubmVsKGVjaGFuLT5jaF9udW0pOwogCQl9CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWNoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmVjaGFuLT52Y2hhbi5sb2NrKTsKIAogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNzA0LDcgKzgzNiw3IEBACiAJZWNoYW4tPmFsbG9jZWQgPSB0cnVlOwogCWVjaGFuLT5zbG90WzBdID0gZWNoYW4tPmNoX251bTsKIAotCWRldl9kYmcoZGV2LCAiYWxsb2NhdGVkIGNoYW5uZWwgZm9yICV1OiV1XG4iLAorCWRldl9kYmcoZGV2LCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQgZm9yICV1OiV1XG4iLCBlY2hhbi0+Y2hfbnVtLAogCQlFRE1BX0NUTFIoZWNoYW4tPmNoX251bSksIEVETUFfQ0hBTl9TTE9UKGVjaGFuLT5jaF9udW0pKTsKIAogCXJldHVybiAwOwpAQCAtNzU2LDIzICs4ODgsNTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgc2l6ZV90IGVkbWFfZGVzY19zaXplKHN0cnVjdCBlZG1hX2Rlc2MgKmVkZXNjKQorc3RhdGljIHUzMiBlZG1hX3Jlc2lkdWUoc3RydWN0IGVkbWFfZGVzYyAqZWRlc2MpCiB7CisJYm9vbCBkc3QgPSBlZGVzYy0+ZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNOworCXN0cnVjdCBlZG1hX3BzZXQgKnBzZXQgPSBlZGVzYy0+cHNldDsKKwlkbWFfYWRkcl90IGRvbmUsIHBvczsKIAlpbnQgaTsKLQlzaXplX3Qgc2l6ZTsKIAotCWlmIChlZGVzYy0+YWJzeW5jKQotCQlmb3IgKHNpemUgPSBpID0gMDsgaSA8IGVkZXNjLT5wc2V0X25yOyBpKyspCi0JCQlzaXplICs9IChlZGVzYy0+cHNldFtpXS5hX2JfY250ICYgMHhmZmZmKSAqCi0JCQkJKGVkZXNjLT5wc2V0W2ldLmFfYl9jbnQgPj4gMTYpICoKLQkJCQkgZWRlc2MtPnBzZXRbaV0uY2NudDsKLQllbHNlCi0JCXNpemUgPSAoZWRlc2MtPnBzZXRbMF0uYV9iX2NudCAmIDB4ZmZmZikgKgotCQkJKGVkZXNjLT5wc2V0WzBdLmFfYl9jbnQgPj4gMTYpICsKLQkJCShlZGVzYy0+cHNldFswXS5hX2JfY250ICYgMHhmZmZmKSAqCi0JCQkoU1pfNjRLIC0gMSkgKiBlZGVzYy0+cHNldFswXS5jY250OworCS8qCisJICogV2UgYWx3YXlzIHJlYWQgdGhlIGRzdC9zcmMgcG9zaXRpb24gZnJvbSB0aGUgZmlyc3QgUmFtUGFyCisJICogcHNldC4gVGhhdCdzIHRoZSBvbmUgd2hpY2ggaXMgYWN0aXZlIG5vdy4KKwkgKi8KKwlwb3MgPSBlZG1hX2dldF9wb3NpdGlvbihlZGVzYy0+ZWNoYW4tPnNsb3RbMF0sIGRzdCk7CiAKLQlyZXR1cm4gc2l6ZTsKKwkvKgorCSAqIEN5Y2xpYyBpcyBzaW1wbGUuIEp1c3Qgc3VidHJhY3QgcHNldFswXS5hZGRyIGZyb20gcG9zLgorCSAqCisJICogV2UgbmV2ZXIgdXBkYXRlIGVkZXNjLT5yZXNpZHVlIGluIHRoZSBjeWNsaWMgY2FzZSwgc28gd2UKKwkgKiBjYW4gdGVsbCB0aGUgcmVtYWluaW5nIHJvb20gdG8gdGhlIGVuZCBvZiB0aGUgY2lyY3VsYXIKKwkgKiBidWZmZXIuCisJICovCisJaWYgKGVkZXNjLT5jeWNsaWMpIHsKKwkJZG9uZSA9IHBvcyAtIHBzZXQtPmFkZHI7CisJCWVkZXNjLT5yZXNpZHVlX3N0YXQgPSBlZGVzYy0+cmVzaWR1ZSAtIGRvbmU7CisJCXJldHVybiBlZGVzYy0+cmVzaWR1ZV9zdGF0OworCX0KKworCS8qCisJICogRm9yIFNHIG9wZXJhdGlvbiB3ZSBjYXRjaCB1cCB3aXRoIHRoZSBsYXN0IHByb2Nlc3NlZAorCSAqIHN0YXR1cy4KKwkgKi8KKwlwc2V0ICs9IGVkZXNjLT5wcm9jZXNzZWRfc3RhdDsKKworCWZvciAoaSA9IGVkZXNjLT5wcm9jZXNzZWRfc3RhdDsgaSA8IGVkZXNjLT5wcm9jZXNzZWQ7IGkrKywgcHNldCsrKSB7CisJCS8qCisJCSAqIElmIHdlIGFyZSBpbnNpZGUgdGhpcyBwc2V0IGFkZHJlc3MgcmFuZ2UsIHdlIGtub3cKKwkJICogdGhpcyBpcyB0aGUgYWN0aXZlIG9uZS4gR2V0IHRoZSBjdXJyZW50IGRlbHRhIGFuZAorCQkgKiBzdG9wIHdhbGtpbmcgdGhlIHBzZXRzLgorCQkgKi8KKwkJaWYgKHBvcyA+PSBwc2V0LT5hZGRyICYmIHBvcyA8IHBzZXQtPmFkZHIgKyBwc2V0LT5sZW4pCisJCQlyZXR1cm4gZWRlc2MtPnJlc2lkdWVfc3RhdCAtIChwb3MgLSBwc2V0LT5hZGRyKTsKKworCQkvKiBPdGhlcndpc2UgbWFyayBpdCBkb25lIGFuZCB1cGRhdGUgcmVzaWR1ZV9zdGF0LiAqLworCQllZGVzYy0+cHJvY2Vzc2VkX3N0YXQrKzsKKwkJZWRlc2MtPnJlc2lkdWVfc3RhdCAtPSBwc2V0LT5sZW47CisJfQorCXJldHVybiBlZGVzYy0+cmVzaWR1ZV9zdGF0OwogfQogCiAvKiBDaGVjayByZXF1ZXN0IGNvbXBsZXRpb24gc3RhdHVzICovCkBAIC03OTAsMTMgKzk1MSwxMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVjaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JdmRlc2MgPSB2Y2hhbl9maW5kX2Rlc2MoJmVjaGFuLT52Y2hhbiwgY29va2llKTsKLQlpZiAodmRlc2MpIHsKLQkJdHhzdGF0ZS0+cmVzaWR1ZSA9IGVkbWFfZGVzY19zaXplKHRvX2VkbWFfZGVzYygmdmRlc2MtPnR4KSk7Ci0JfSBlbHNlIGlmIChlY2hhbi0+ZWRlc2MgJiYgZWNoYW4tPmVkZXNjLT52ZGVzYy50eC5jb29raWUgPT0gY29va2llKSB7Ci0JCXN0cnVjdCBlZG1hX2Rlc2MgKmVkZXNjID0gZWNoYW4tPmVkZXNjOwotCQl0eHN0YXRlLT5yZXNpZHVlID0gZWRtYV9kZXNjX3NpemUoZWRlc2MpOwotCX0KKwlpZiAoZWNoYW4tPmVkZXNjICYmIGVjaGFuLT5lZGVzYy0+dmRlc2MudHguY29va2llID09IGNvb2tpZSkKKwkJdHhzdGF0ZS0+cmVzaWR1ZSA9IGVkbWFfcmVzaWR1ZShlY2hhbi0+ZWRlc2MpOworCWVsc2UgaWYgKCh2ZGVzYyA9IHZjaGFuX2ZpbmRfZGVzYygmZWNoYW4tPnZjaGFuLCBjb29raWUpKSkKKwkJdHhzdGF0ZS0+cmVzaWR1ZSA9IHRvX2VkbWFfZGVzYygmdmRlc2MtPnR4KS0+cmVzaWR1ZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTgyMiwxOCArOTgwLDQzIEBACiAJfQogfQogCisjZGVmaW5lIEVETUFfRE1BX0JVU1dJRFRIUwkoQklUKERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVMpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpKQorCitzdGF0aWMgaW50IGVkbWFfZG1hX2RldmljZV9zbGF2ZV9jYXBzKHN0cnVjdCBkbWFfY2hhbiAqZGNoYW4sCisJCQkJICAgICAgc3RydWN0IGRtYV9zbGF2ZV9jYXBzICpjYXBzKQoreworCWNhcHMtPnNyY19hZGRyX3dpZHRocyA9IEVETUFfRE1BX0JVU1dJRFRIUzsKKwljYXBzLT5kc3RuX2FkZHJfd2lkdGhzID0gRURNQV9ETUFfQlVTV0lEVEhTOworCWNhcHMtPmRpcmVjdGlvbnMgPSBCSVQoRE1BX0RFVl9UT19NRU0pIHwgQklUKERNQV9NRU1fVE9fREVWKTsKKwljYXBzLT5jbWRfcGF1c2UgPSB0cnVlOworCWNhcHMtPmNtZF90ZXJtaW5hdGUgPSB0cnVlOworCWNhcHMtPnJlc2lkdWVfZ3JhbnVsYXJpdHkgPSBETUFfUkVTSURVRV9HUkFOVUxBUklUWV9ERVNDUklQVE9SOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGVkbWFfZG1hX2luaXQoc3RydWN0IGVkbWFfY2MgKmVjYywgc3RydWN0IGRtYV9kZXZpY2UgKmRtYSwKIAkJCSAgc3RydWN0IGRldmljZSAqZGV2KQogewogCWRtYS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBlZG1hX3ByZXBfc2xhdmVfc2c7CiAJZG1hLT5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0gZWRtYV9wcmVwX2RtYV9jeWNsaWM7CisJZG1hLT5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gZWRtYV9wcmVwX2RtYV9tZW1jcHk7CiAJZG1hLT5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPSBlZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCWRtYS0+ZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBlZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CiAJZG1hLT5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGVkbWFfaXNzdWVfcGVuZGluZzsKIAlkbWEtPmRldmljZV90eF9zdGF0dXMgPSBlZG1hX3R4X3N0YXR1czsKIAlkbWEtPmRldmljZV9jb250cm9sID0gZWRtYV9jb250cm9sOworCWRtYS0+ZGV2aWNlX3NsYXZlX2NhcHMgPSBlZG1hX2RtYV9kZXZpY2Vfc2xhdmVfY2FwczsKIAlkbWEtPmRldiA9IGRldjsKIAorCS8qCisJICogY29kZSB1c2luZyBkbWEgbWVtY3B5IG11c3QgbWFrZSBzdXJlIGFsaWdubWVudCBvZgorCSAqIGxlbmd0aCBpcyBhdCBkbWEtPmNvcHlfYWxpZ24gYm91bmRhcnkuCisJICovCisJZG1hLT5jb3B5X2FsaWduID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7CisKIAlJTklUX0xJU1RfSEVBRCgmZG1hLT5jaGFubmVscyk7CiB9CiAKQEAgLTg2MSw2ICsxMDQ0LDggQEAKIAogCWRtYV9jYXBfemVybyhlY2MtPmRtYV9zbGF2ZS5jYXBfbWFzayk7CiAJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBlY2MtPmRtYV9zbGF2ZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgZWNjLT5kbWFfc2xhdmUuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGVjYy0+ZG1hX3NsYXZlLmNhcF9tYXNrKTsKIAogCWVkbWFfZG1hX2luaXQoZWNjLCAmZWNjLT5kbWFfc2xhdmUsICZwZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwppbmRleCAzM2VkZDY3Li4yYzY5NGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKQEAgLTEwMTgsNyArMTAxOCw3IEBACiAJfQogCWVkYWNfaW5jX2NlX2Vycm9yKG1jaSwgZW5hYmxlX3Blcl9sYXllcl9yZXBvcnQsIHBvcywgZXJyb3JfY291bnQpOwogCi0JaWYgKG1jaS0+c2NydWJfbW9kZSAmIFNDUlVCX1NXX1NSQykgeworCWlmIChtY2ktPnNjcnViX21vZGUgPT0gU0NSVUJfU1dfU1JDKSB7CiAJCS8qCiAJCQkqIFNvbWUgbWVtb3J5IGNvbnRyb2xsZXJzIChjYWxsZWQgTUNzIGJlbG93KSBjYW4gcmVtYXAKIAkJCSogbWVtb3J5IHNvIHRoYXQgaXQgaXMgc3RpbGwgYXZhaWxhYmxlIGF0IGEgZGlmZmVyZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTgyODc1cF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTgyODc1cF9lZGFjLmMKaW5kZXggOGQwNDUwYi4uNjRiNjgzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4Mjg3NXBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pODI4NzVwX2VkYWMuYwpAQCAtMjc1LDcgKzI3NSw2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAl2b2lkIF9faW9tZW0gKndpbmRvdzsKLQlpbnQgZXJyOwogCiAJKm92cmZsX3BkZXYgPSBOVUxMOwogCSpvdnJmbF93aW5kb3cgPSBOVUxMOwpAQCAtMjkzLDEzICsyOTIsOCBAQAogCQlpZiAoZGV2ID09IE5VTEwpCiAJCQlyZXR1cm4gMTsKIAotCQllcnIgPSBwY2lfYnVzX2FkZF9kZXZpY2UoZGV2KTsKLQkJaWYgKGVycikgewotCQkJaTgyODc1cF9wcmludGsoS0VSTl9FUlIsCi0JCQkJIiVzKCk6IHBjaV9idXNfYWRkX2RldmljZSgpIEZhaWxlZFxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCX0KIAkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGRldi0+YnVzKTsKKwkJcGNpX2J1c19hZGRfZGV2aWNlKGRldik7CiAJfQogCiAJKm92cmZsX3BkZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jIGIvZHJpdmVycy9lZGFjL21jZV9hbWQuYwppbmRleCA1MWI5Y2FhLi41ZjQzNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmMKQEAgLTYsNyArNiw2IEBACiBzdGF0aWMgc3RydWN0IGFtZF9kZWNvZGVyX29wcyAqZmFtX29wczsKIAogc3RhdGljIHU4IHhlY19tYXNrCSA9IDB4ZjsKLXN0YXRpYyB1OCBuYl9lcnJfY3B1bWFzayA9IDB4ZjsKIAogc3RhdGljIGJvb2wgcmVwb3J0X2dhcnRfZXJyb3JzOwogc3RhdGljIHZvaWQgKCpuYl9idXNfZGVjb2RlcikoaW50IG5vZGVfaWQsIHN0cnVjdCBtY2UgKm0pOwpAQCAtODUyLDcgKzg1MSw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSAweDE0OgotCQluYl9lcnJfY3B1bWFzayAgPSAweDM7CiAJCWZhbV9vcHMtPm1jMF9tY2UgPSBjYXRfbWMwX21jZTsKIAkJZmFtX29wcy0+bWMxX21jZSA9IGNhdF9tYzFfbWNlOwogCQlmYW1fb3BzLT5tYzJfbWNlID0gazhfbWMyX21jZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZXh0Y29uL0tjb25maWcgYi9kcml2ZXJzL2V4dGNvbi9LY29uZmlnCmluZGV4IGJlNTZlOGEuLmFlYmRlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZXh0Y29uL0tjb25maWcKKysrIGIvZHJpdmVycy9leHRjb24vS2NvbmZpZwpAQCAtMjgsMTMgKzI4LDEzIEBACiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBleHRjb24gZGV2aWNlIGRyaXZlciBiYXNlZCBvbiBBREMgdmFsdWVzLgogCiBjb25maWcgRVhUQ09OX01BWDE0NTc3Ci0JdHJpc3RhdGUgIk1BWDE0NTc3IEVYVENPTiBTdXBwb3J0IgorCXRyaXN0YXRlICJNQVgxNDU3Ny83NzgzNiBFWFRDT04gU3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1GRF9NQVgxNDU3NwogCXNlbGVjdCBJUlFfRE9NQUlOCiAJc2VsZWN0IFJFR01BUF9JMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIE1VSUMgZGV2aWNlIG9mCi0JICBNYXhpbSBNQVgxNDU3NyBQTUlDLiBUaGUgTUFYMTQ1NzcgTVVJQyBpcyBhIFVTQiBwb3J0IGFjY2Vzc29yeQorCSAgTWF4aW0gTUFYMTQ1NzcvNzc4MzYuIFRoZSBNQVgxNDU3Ny83NzgzNiBNVUlDIGlzIGEgVVNCIHBvcnQgYWNjZXNzb3J5CiAJICBkZXRlY3RvciBhbmQgc3dpdGNoLgogCiBjb25maWcgRVhUQ09OX01BWDc3NjkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2V4dGNvbi9leHRjb24tYWRjLWphY2suYyBiL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1hZGMtamFjay5jCmluZGV4IGUyM2YxYzIuLmUxOGY5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1hZGMtamFjay5jCisrKyBiL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1hZGMtamFjay5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBAY2hhbjoJCWlpbyBjaGFubmVsIGJlaW5nIHF1ZXJpZWQuCiAgKi8KIHN0cnVjdCBhZGNfamFja19kYXRhIHsKLQlzdHJ1Y3QgZXh0Y29uX2RldiBlZGV2OworCXN0cnVjdCBleHRjb25fZGV2ICplZGV2OwogCiAJY29uc3QgY2hhciAqKmNhYmxlX25hbWVzOwogCWludCBudW1fY2FibGVzOwpAQCAtNjQsNyArNjQsNyBAQAogCiAJcmV0ID0gaWlvX3JlYWRfY2hhbm5lbF9yYXcoZGF0YS0+Y2hhbiwgJmFkY192YWwpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJmRhdGEtPmVkZXYuZGV2LCAicmVhZCBjaGFubmVsKCkgZXJyb3I6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZkYXRhLT5lZGV2LT5kZXYsICJyZWFkIGNoYW5uZWwoKSBlcnJvcjogJWRcbiIsIHJldCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgwLDcgKzgwLDcgQEAKIAl9CiAJLyogaWYgbm8gZGVmIGhhcyBtZXQsIGl0IG1lYW5zIHN0YXRlID0gMCAobm8gY2FibGVzIGF0dGFjaGVkKSAqLwogCi0JZXh0Y29uX3NldF9zdGF0ZSgmZGF0YS0+ZWRldiwgc3RhdGUpOworCWV4dGNvbl9zZXRfc3RhdGUoZGF0YS0+ZWRldiwgc3RhdGUpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWRjX2phY2tfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpfZGF0YSkKQEAgLTEwMiwzMyArMTAyLDMzIEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRhdGEtPmVkZXYubmFtZSA9IHBkYXRhLT5uYW1lOwotCiAJaWYgKCFwZGF0YS0+Y2FibGVfbmFtZXMpIHsKLQkJZXJyID0gLUVJTlZBTDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3I6IGNhYmxlX25hbWVzIG5vdCBkZWZpbmVkLlxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkYXRhLT5lZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWRhdGEtPmVkZXYuc3VwcG9ydGVkX2NhYmxlID0gcGRhdGEtPmNhYmxlX25hbWVzOworCWRhdGEtPmVkZXYgPSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwgcGRhdGEtPmNhYmxlX25hbWVzKTsKKwlpZiAoSVNfRVJSKGRhdGEtPmVkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBleHRjb24gZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRhdGEtPmVkZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRhdGEtPmVkZXYtPm5hbWUgPSBwZGF0YS0+bmFtZTsKIAogCS8qIENoZWNrIHRoZSBsZW5ndGggb2YgYXJyYXkgYW5kIHNldCBudW1fY2FibGVzICovCi0JZm9yIChpID0gMDsgZGF0YS0+ZWRldi5zdXBwb3J0ZWRfY2FibGVbaV07IGkrKykKKwlmb3IgKGkgPSAwOyBkYXRhLT5lZGV2LT5zdXBwb3J0ZWRfY2FibGVbaV07IGkrKykKIAkJOwogCWlmIChpID09IDAgfHwgaSA+IFNVUFBPUlRFRF9DQUJMRV9NQVgpIHsKLQkJZXJyID0gLUVJTlZBTDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3I6IHBkYXRhLT5jYWJsZV9uYW1lcyBzaXplID0gJWRcbiIsCiAJCQkJaSAtIDEpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRhdGEtPm51bV9jYWJsZXMgPSBpOwogCiAJaWYgKCFwZGF0YS0+YWRjX2NvbmRpdGlvbnMgfHwKIAkJCSFwZGF0YS0+YWRjX2NvbmRpdGlvbnNbMF0uc3RhdGUpIHsKLQkJZXJyID0gLUVJTlZBTDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3I6IGFkY19jb25kaXRpb25zIG5vdCBkZWZpbmVkLlxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZGF0YS0+YWRjX2NvbmRpdGlvbnMgPSBwZGF0YS0+YWRjX2NvbmRpdGlvbnM7CiAKQEAgLTEzOCwxMCArMTM4LDggQEAKIAlkYXRhLT5udW1fY29uZGl0aW9ucyA9IGk7CiAKIAlkYXRhLT5jaGFuID0gaWlvX2NoYW5uZWxfZ2V0KCZwZGV2LT5kZXYsIHBkYXRhLT5jb25zdW1lcl9jaGFubmVsKTsKLQlpZiAoSVNfRVJSKGRhdGEtPmNoYW4pKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2hhbik7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoSVNfRVJSKGRhdGEtPmNoYW4pKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5jaGFuKTsKIAogCWRhdGEtPmhhbmRsaW5nX2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyhwZGF0YS0+aGFuZGxpbmdfZGVsYXlfbXMpOwogCkBAIC0xNDksMTUgKzE0NywxNCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CiAKLQllcnIgPSBleHRjb25fZGV2X3JlZ2lzdGVyKCZkYXRhLT5lZGV2KTsKKwllcnIgPSBkZXZtX2V4dGNvbl9kZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgZGF0YS0+ZWRldik7CiAJaWYgKGVycikKLQkJZ290byBvdXQ7CisJCXJldHVybiBlcnI7CiAKIAlkYXRhLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICghZGF0YS0+aXJxKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfaXJxOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAllcnIgPSByZXF1ZXN0X2FueV9jb250ZXh0X2lycShkYXRhLT5pcnEsIGFkY19qYWNrX2lycV90aHJlYWQsCkBAIC0xNjUsMTUgKzE2MiwxMCBAQAogCiAJaWYgKGVyciA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3I6IGlycSAlZFxuIiwgZGF0YS0+aXJxKTsKLQkJZ290byBlcnJfaXJxOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXJldHVybiAwOwotCi1lcnJfaXJxOgotCWV4dGNvbl9kZXZfdW5yZWdpc3RlcigmZGF0YS0+ZWRldik7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBhZGNfamFja19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTE4Miw3ICsxNzQsNiBAQAogCiAJZnJlZV9pcnEoZGF0YS0+aXJxLCBkYXRhKTsKIAljYW5jZWxfd29ya19zeW5jKCZkYXRhLT5oYW5kbGVyLndvcmspOwotCWV4dGNvbl9kZXZfdW5yZWdpc3RlcigmZGF0YS0+ZWRldik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1hcml6b25hLmMgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tYXJpem9uYS5jCmluZGV4IDk4YTE0ZjYuLjZjODRlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1hcml6b25hLmMKKysrIGIvZHJpdmVycy9leHRjb24vZXh0Y29uLWFyaXpvbmEuYwpAQCAtOTEsNyArOTEsNyBAQAogCiAJaW50IGhwZGV0X2lwOwogCi0Jc3RydWN0IGV4dGNvbl9kZXYgZWRldjsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldjsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJpem9uYV9taWNkX2NvbmZpZyBtaWNkX2RlZmF1bHRfbW9kZXNbXSA9IHsKQEAgLTU0Niw3ICs1NDYsNyBAQAogCX0KIAogCS8qIElmIHRoZSBjYWJsZSB3YXMgcmVtb3ZlZCB3aGlsZSBtZWFzdXJpbmcgaWdub3JlIHRoZSByZXN1bHQgKi8KLQlyZXQgPSBleHRjb25fZ2V0X2NhYmxlX3N0YXRlXygmaW5mby0+ZWRldiwgQVJJWk9OQV9DQUJMRV9NRUNIQU5JQ0FMKTsKKwlyZXQgPSBleHRjb25fZ2V0X2NhYmxlX3N0YXRlXyhpbmZvLT5lZGV2LCBBUklaT05BX0NBQkxFX01FQ0hBTklDQUwpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoYXJpem9uYS0+ZGV2LCAiRmFpbGVkIHRvIGNoZWNrIGNhYmxlIHN0YXRlOiAlZFxuIiwKIAkJCXJldCk7CkBAIC01ODEsNyArNTgxLDcgQEAKIAllbHNlCiAJCXJlcG9ydCA9IEFSSVpPTkFfQ0FCTEVfSEVBRFBIT05FOwogCi0JcmV0ID0gZXh0Y29uX3NldF9jYWJsZV9zdGF0ZV8oJmluZm8tPmVkZXYsIHJlcG9ydCwgdHJ1ZSk7CisJcmV0ID0gZXh0Y29uX3NldF9jYWJsZV9zdGF0ZV8oaW5mby0+ZWRldiwgcmVwb3J0LCB0cnVlKTsKIAlpZiAocmV0ICE9IDApCiAJCWRldl9lcnIoYXJpem9uYS0+ZGV2LCAiRmFpbGVkIHRvIHJlcG9ydCBIUC9saW5lOiAlZFxuIiwKIAkJCXJldCk7CkBAIC02NjQsNyArNjY0LDcgQEAKIAkJCSAgIEFSSVpPTkFfQUNDREVUX01PREVfTUFTSywgQVJJWk9OQV9BQ0NERVRfTU9ERV9NSUMpOwogCiAJLyogSnVzdCByZXBvcnQgaGVhZHBob25lICovCi0JcmV0ID0gZXh0Y29uX3VwZGF0ZV9zdGF0ZSgmaW5mby0+ZWRldiwKKwlyZXQgPSBleHRjb25fdXBkYXRlX3N0YXRlKGluZm8tPmVkZXYsCiAJCQkJICAxIDw8IEFSSVpPTkFfQ0FCTEVfSEVBRFBIT05FLAogCQkJCSAgMSA8PCBBUklaT05BX0NBQkxFX0hFQURQSE9ORSk7CiAJaWYgKHJldCAhPSAwKQpAQCAtNzIzLDcgKzcyMyw3IEBACiAJCQkgICBBUklaT05BX0FDQ0RFVF9NT0RFX01BU0ssIEFSSVpPTkFfQUNDREVUX01PREVfTUlDKTsKIAogCS8qIEp1c3QgcmVwb3J0IGhlYWRwaG9uZSAqLwotCXJldCA9IGV4dGNvbl91cGRhdGVfc3RhdGUoJmluZm8tPmVkZXYsCisJcmV0ID0gZXh0Y29uX3VwZGF0ZV9zdGF0ZShpbmZvLT5lZGV2LAogCQkJCSAgMSA8PCBBUklaT05BX0NBQkxFX0hFQURQSE9ORSwKIAkJCQkgIDEgPDwgQVJJWk9OQV9DQUJMRV9IRUFEUEhPTkUpOwogCWlmIChyZXQgIT0gMCkKQEAgLTc2NCw3ICs3NjQsNyBAQAogCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwogCiAJLyogSWYgdGhlIGNhYmxlIHdhcyByZW1vdmVkIHdoaWxlIG1lYXN1cmluZyBpZ25vcmUgdGhlIHJlc3VsdCAqLwotCXJldCA9IGV4dGNvbl9nZXRfY2FibGVfc3RhdGVfKCZpbmZvLT5lZGV2LCBBUklaT05BX0NBQkxFX01FQ0hBTklDQUwpOworCXJldCA9IGV4dGNvbl9nZXRfY2FibGVfc3RhdGVfKGluZm8tPmVkZXYsIEFSSVpPTkFfQ0FCTEVfTUVDSEFOSUNBTCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihhcml6b25hLT5kZXYsICJGYWlsZWQgdG8gY2hlY2sgY2FibGUgc3RhdGU6ICVkXG4iLAogCQkJCXJldCk7CkBAIC04MTIsNyArODEyLDcgQEAKIAlpZiAoaW5mby0+ZGV0ZWN0aW5nICYmICh2YWwgJiBBUklaT05BX01JQ0RfTFZMXzgpKSB7CiAJCWFyaXpvbmFfaWRlbnRpZnlfaGVhZHBob25lKGluZm8pOwogCi0JCXJldCA9IGV4dGNvbl91cGRhdGVfc3RhdGUoJmluZm8tPmVkZXYsCisJCXJldCA9IGV4dGNvbl91cGRhdGVfc3RhdGUoaW5mby0+ZWRldiwKIAkJCQkJICAxIDw8IEFSSVpPTkFfQ0FCTEVfTUlDUk9QSE9ORSwKIAkJCQkJICAxIDw8IEFSSVpPTkFfQ0FCTEVfTUlDUk9QSE9ORSk7CiAKQEAgLTk5OSw3ICs5OTksNyBAQAogCiAJaWYgKGluZm8tPmxhc3RfamFja2RldCA9PSBwcmVzZW50KSB7CiAJCWRldl9kYmcoYXJpem9uYS0+ZGV2LCAiRGV0ZWN0ZWQgamFja1xuIik7Ci0JCXJldCA9IGV4dGNvbl9zZXRfY2FibGVfc3RhdGVfKCZpbmZvLT5lZGV2LAorCQlyZXQgPSBleHRjb25fc2V0X2NhYmxlX3N0YXRlXyhpbmZvLT5lZGV2LAogCQkJCQkgICAgICBBUklaT05BX0NBQkxFX01FQ0hBTklDQUwsIHRydWUpOwogCiAJCWlmIChyZXQgIT0gMCkKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJCQkJCSBpbmZvLT5taWNkX3Jhbmdlc1tpXS5rZXksIDApOwogCQlpbnB1dF9zeW5jKGluZm8tPmlucHV0KTsKIAotCQlyZXQgPSBleHRjb25fdXBkYXRlX3N0YXRlKCZpbmZvLT5lZGV2LCAweGZmZmZmZmZmLCAwKTsKKwkJcmV0ID0gZXh0Y29uX3VwZGF0ZV9zdGF0ZShpbmZvLT5lZGV2LCAweGZmZmZmZmZmLCAwKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZGV2X2Vycihhcml6b25hLT5kZXYsICJSZW1vdmFsIHJlcG9ydCBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CkBAIC0xMTA1LDE1ICsxMTA1LDE0IEBACiAJaW5mbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpbmZvLT5taWN2ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoYXJpem9uYS0+ZGV2LCAiTUlDVkREIik7CiAJaWYgKElTX0VSUihpbmZvLT5taWN2ZGQpKSB7CiAJCXJldCA9IFBUUl9FUlIoaW5mby0+bWljdmRkKTsKIAkJZGV2X2Vycihhcml6b25hLT5kZXYsICJGYWlsZWQgdG8gZ2V0IE1JQ1ZERDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyOworCQlyZXR1cm4gcmV0OwogCX0KIAogCW11dGV4X2luaXQoJmluZm8tPmxvY2spOwpAQCAtMTE1MSwxNSArMTE1MCwxOSBAQAogCQlicmVhazsKIAl9CiAKLQlpbmZvLT5lZGV2Lm5hbWUgPSAiSGVhZHNldCBKYWNrIjsKLQlpbmZvLT5lZGV2LmRldi5wYXJlbnQgPSBhcml6b25hLT5kZXY7Ci0JaW5mby0+ZWRldi5zdXBwb3J0ZWRfY2FibGUgPSBhcml6b25hX2NhYmxlOworCWluZm8tPmVkZXYgPSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwgYXJpem9uYV9jYWJsZSk7CisJaWYgKElTX0VSUihpbmZvLT5lZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZXh0Y29uIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpbmZvLT5lZGV2LT5uYW1lID0gIkhlYWRzZXQgSmFjayI7CisJaW5mby0+ZWRldi0+ZGV2LnBhcmVudCA9IGFyaXpvbmEtPmRldjsKIAotCXJldCA9IGV4dGNvbl9kZXZfcmVnaXN0ZXIoJmluZm8tPmVkZXYpOworCXJldCA9IGRldm1fZXh0Y29uX2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCBpbmZvLT5lZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGFyaXpvbmEtPmRldiwgImV4dGNvbl9kZXZfcmVnaXN0ZXIoKSBmYWlsZWQ6ICVkXG4iLAogCQkJcmV0KTsKLQkJZ290byBlcnI7CisJCXJldHVybiByZXQ7CiAJfQogCiAJaW5mby0+aW5wdXQgPSBkZXZtX2lucHV0X2FsbG9jYXRlX2RldmljZSgmcGRldi0+ZGV2KTsKQEAgLTE0MTAsOCArMTQxMyw2IEBACiBlcnJfaW5wdXQ6CiBlcnJfcmVnaXN0ZXI6CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCWV4dGNvbl9kZXZfdW5yZWdpc3RlcigmaW5mby0+ZWRldik7Ci1lcnI6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ0NSw3ICsxNDQ2LDYgQEAKIAlyZWdtYXBfdXBkYXRlX2JpdHMoYXJpem9uYS0+cmVnbWFwLCBBUklaT05BX0pBQ0tfREVURUNUX0FOQUxPR1VFLAogCQkJICAgQVJJWk9OQV9KRDFfRU5BLCAwKTsKIAlhcml6b25hX2NsazMya19kaXNhYmxlKGFyaXpvbmEpOwotCWV4dGNvbl9kZXZfdW5yZWdpc3RlcigmaW5mby0+ZWRldik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1jbGFzcy5jIGIvZHJpdmVycy9leHRjb24vZXh0Y29uLWNsYXNzLmMKaW5kZXggN2FiMjFhYS4uMThkNDJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9leHRjb24vZXh0Y29uLWNsYXNzLmMKKysrIGIvZHJpdmVycy9leHRjb24vZXh0Y29uLWNsYXNzLmMKQEAgLTU2NSw2ICs1NjUsMTAwIEBACiB7CiB9CiAKKy8qCisgKiBleHRjb25fZGV2X2FsbG9jYXRlKCkgLSBBbGxvY2F0ZSB0aGUgbWVtb3J5IG9mIGV4dGNvbiBkZXZpY2UuCisgKiBAc3VwcG9ydGVkX2NhYmxlOglBcnJheSBvZiBzdXBwb3J0ZWQgY2FibGUgbmFtZXMgZW5kaW5nIHdpdGggTlVMTC4KKyAqCQkJSWYgc3VwcG9ydGVkX2NhYmxlIGlzIE5VTEwsIGNhYmxlIG5hbWUgcmVsYXRlZCBBUElzCisgKgkJCWFyZSBkaXNhYmxlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgbWVtb3J5IGZvciBleHRjb24gZGV2aWNlIHdpdGhvdXQgYWxsb2NhdGluZworICogbWVtb3J5IGluIGVhY2ggZXh0Y29uIHByb3ZpZGVyIGRyaXZlciBhbmQgaW5pdGlhbGl6ZSBkZWZhdWx0IHNldHRpbmcgZm9yCisgKiBleHRjb24gZGV2aWNlLgorICoKKyAqIFJldHVybiB0aGUgcG9pbnRlciBvZiBleHRjb24gZGV2aWNlIGlmIHN1Y2Nlc3Mgb3IgRVJSX1BUUihlcnIpIGlmIGZhaWwKKyAqLworc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbl9kZXZfYWxsb2NhdGUoY29uc3QgY2hhciAqKnN1cHBvcnRlZF9jYWJsZSkKK3sKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldjsKKworCWVkZXYgPSBremFsbG9jKHNpemVvZigqZWRldiksIEdGUF9LRVJORUwpOworCWlmICghZWRldikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllZGV2LT5tYXhfc3VwcG9ydGVkID0gMDsKKwllZGV2LT5zdXBwb3J0ZWRfY2FibGUgPSBzdXBwb3J0ZWRfY2FibGU7CisKKwlyZXR1cm4gZWRldjsKK30KKworLyoKKyAqIGV4dGNvbl9kZXZfZnJlZSgpIC0gRnJlZSB0aGUgbWVtb3J5IG9mIGV4dGNvbiBkZXZpY2UuCisgKiBAZWRldjoJdGhlIGV4dGNvbiBkZXZpY2UgdG8gZnJlZQorICovCit2b2lkIGV4dGNvbl9kZXZfZnJlZShzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikKK3sKKwlrZnJlZShlZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGV4dGNvbl9kZXZfZnJlZSk7CisKK3N0YXRpYyBpbnQgZGV2bV9leHRjb25fZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBleHRjb25fZGV2ICoqciA9IHJlczsKKworCWlmIChXQVJOX09OKCFyIHx8ICEqcikpCisJCXJldHVybiAwOworCisJcmV0dXJuICpyID09IGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGRldm1fZXh0Y29uX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQoreworCWV4dGNvbl9kZXZfZnJlZSgqKHN0cnVjdCBleHRjb25fZGV2ICoqKXJlcyk7Cit9CisKKy8qKgorICogZGV2bV9leHRjb25fZGV2X2FsbG9jYXRlIC0gQWxsb2NhdGUgbWFuYWdlZCBleHRjb24gZGV2aWNlCisgKiBAZGV2OgkJZGV2aWNlIG93bmluZyB0aGUgZXh0Y29uIGRldmljZSBiZWluZyBjcmVhdGVkCisgKiBAc3VwcG9ydGVkX2NhYmxlOglBcnJheSBvZiBzdXBwb3J0ZWQgY2FibGUgbmFtZXMgZW5kaW5nIHdpdGggTlVMTC4KKyAqCQkJSWYgc3VwcG9ydGVkX2NhYmxlIGlzIE5VTEwsIGNhYmxlIG5hbWUgcmVsYXRlZCBBUElzCisgKgkJCWFyZSBkaXNhYmxlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hbmFnZXMgYXV0b21hdGljYWxseSB0aGUgbWVtb3J5IG9mIGV4dGNvbiBkZXZpY2UgdXNpbmcgZGV2aWNlCisgKiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzaW1wbGlmeSB0aGUgY29udHJvbCBvZiBmcmVlaW5nIHRoZSBtZW1vcnkgb2YgZXh0Y29uCisgKiBkZXZpY2UuCisgKgorICogUmV0dXJucyB0aGUgcG9pbnRlciBtZW1vcnkgb2YgYWxsb2NhdGVkIGV4dGNvbl9kZXYgaWYgc3VjY2VzcworICogb3IgRVJSX1BUUihlcnIpIGlmIGZhaWwKKyAqLworc3RydWN0IGV4dGNvbl9kZXYgKmRldm1fZXh0Y29uX2Rldl9hbGxvY2F0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBjb25zdCBjaGFyICoqc3VwcG9ydGVkX2NhYmxlKQoreworCXN0cnVjdCBleHRjb25fZGV2ICoqcHRyLCAqZWRldjsKKworCXB0ciA9IGRldnJlc19hbGxvYyhkZXZtX2V4dGNvbl9kZXZfcmVsZWFzZSwgc2l6ZW9mKCpwdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB0cikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllZGV2ID0gZXh0Y29uX2Rldl9hbGxvY2F0ZShzdXBwb3J0ZWRfY2FibGUpOworCWlmIChJU19FUlIoZWRldikpIHsKKwkJZGV2cmVzX2ZyZWUocHRyKTsKKwkJcmV0dXJuIGVkZXY7CisJfQorCisJKnB0ciA9IGVkZXY7CisJZGV2cmVzX2FkZChkZXYsIHB0cik7CisKKwlyZXR1cm4gZWRldjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fZXh0Y29uX2Rldl9hbGxvY2F0ZSk7CisKK3ZvaWQgZGV2bV9leHRjb25fZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikKK3sKKwlXQVJOX09OKGRldnJlc19yZWxlYXNlKGRldiwgZGV2bV9leHRjb25fZGV2X3JlbGVhc2UsCisJCQkgICAgICAgZGV2bV9leHRjb25fZGV2X21hdGNoLCBlZGV2KSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2V4dGNvbl9kZXZfZnJlZSk7CisKIC8qKgogICogZXh0Y29uX2Rldl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSBuZXcgZXh0Y29uIGRldmljZQogICogQGVkZXYJOiB0aGUgbmV3IGV4dGNvbiBkZXZpY2UgKHNob3VsZCBiZSBhbGxvY2F0ZWQgYmVmb3JlIGNhbGxpbmcpCkBAIC04MTksNiArOTEzLDYzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChleHRjb25fZGV2X3VucmVnaXN0ZXIpOwogCitzdGF0aWMgdm9pZCBkZXZtX2V4dGNvbl9kZXZfdW5yZWcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCit7CisJZXh0Y29uX2Rldl91bnJlZ2lzdGVyKCooc3RydWN0IGV4dGNvbl9kZXYgKiopcmVzKTsKK30KKworLyoqCisgKiBkZXZtX2V4dGNvbl9kZXZfcmVnaXN0ZXIoKSAtIFJlc291cmNlLW1hbmFnZWQgZXh0Y29uX2Rldl9yZWdpc3RlcigpCisgKiBAZGV2OglkZXZpY2UgdG8gYWxsb2NhdGUgZXh0Y29uIGRldmljZQorICogQGVkZXY6CXRoZSBuZXcgZXh0Y29uIGRldmljZSB0byByZWdpc3RlcgorICoKKyAqIE1hbmFnZWQgZXh0Y29uX2Rldl9yZWdpc3RlcigpIGZ1bmN0aW9uLiBJZiBleHRjb24gZGV2aWNlIGlzIGF0dGFjaGVkIHdpdGgKKyAqIHRoaXMgZnVuY3Rpb24sIHRoYXQgZXh0Y29uIGRldmljZSBpcyBhdXRvbWF0aWNhbGx5IHVucmVnaXN0ZXJlZCBvbiBkcml2ZXIKKyAqIGRldGFjaC4gSW50ZXJuYWxseSB0aGlzIGZ1bmN0aW9uIGNhbGxzIGV4dGNvbl9kZXZfcmVnaXN0ZXIoKSBmdW5jdGlvbi4KKyAqIFRvIGdldCBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0aGF0IGZ1bmN0aW9uLgorICoKKyAqIElmIGV4dGNvbiBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUKKyAqIHVucmVnaXN0ZXJlZCBzZXBhcmF0ZWx5LCBkZXZtX2V4dGNvbl9kZXZfdW5yZWdpc3RlcigpIHNob3VsZCBiZSB1c2VkLgorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzIG9yIG5lZ2FpdmUgZXJyb3IgbnVtYmVyIGlmIGZhaWx1cmUuCisgKi8KK2ludCBkZXZtX2V4dGNvbl9kZXZfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikKK3sKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqKnB0cjsKKwlpbnQgcmV0OworCisJcHRyID0gZGV2cmVzX2FsbG9jKGRldm1fZXh0Y29uX2Rldl91bnJlZywgc2l6ZW9mKCpwdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBleHRjb25fZGV2X3JlZ2lzdGVyKGVkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2cmVzX2ZyZWUocHRyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqcHRyID0gZWRldjsKKwlkZXZyZXNfYWRkKGRldiwgcHRyKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9leHRjb25fZGV2X3JlZ2lzdGVyKTsKKworLyoqCisgKiBkZXZtX2V4dGNvbl9kZXZfdW5yZWdpc3RlcigpIC0gUmVzb3VyY2UtbWFuYWdlZCBleHRjb25fZGV2X3VucmVnaXN0ZXIoKQorICogQGRldjoJZGV2aWNlIHRoZSBleHRjb24gYmVsb25ncyB0bworICogQGVkZXY6CXRoZSBleHRjb24gZGV2aWNlIHRvIHVucmVnaXN0ZXIKKyAqCisgKiBVbnJlZ2lzdGVyIGV4dGNvbiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmVkIHdpdGggZGV2bV9leHRjb25fZGV2X3JlZ2lzdGVyKCkKKyAqIGZ1bmN0aW9uLgorICovCit2b2lkIGRldm1fZXh0Y29uX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpCit7CisJV0FSTl9PTihkZXZyZXNfcmVsZWFzZShkZXYsIGRldm1fZXh0Y29uX2Rldl91bnJlZywKKwkJCSAgICAgICBkZXZtX2V4dGNvbl9kZXZfbWF0Y2gsIGVkZXYpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fZXh0Y29uX2Rldl91bnJlZ2lzdGVyKTsKKwogI2lmZGVmIENPTkZJR19PRgogLyoKICAqIGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlIC0gR2V0IHRoZSBleHRjb24gZGV2aWNlIGZyb20gZGV2aWNldHJlZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9leHRjb24vZXh0Y29uLWdwaW8uYyBiL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1ncGlvLmMKaW5kZXggMTNkNTIyMi4uNjQ1YjI4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9leHRjb24vZXh0Y29uLWdwaW8uYworKysgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tZ3Bpby5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXh0Y29uL2V4dGNvbi1ncGlvLmg+CiAKIHN0cnVjdCBncGlvX2V4dGNvbl9kYXRhIHsKLQlzdHJ1Y3QgZXh0Y29uX2RldiBlZGV2OworCXN0cnVjdCBleHRjb25fZGV2ICplZGV2OwogCXVuc2lnbmVkIGdwaW87CiAJYm9vbCBncGlvX2FjdGl2ZV9sb3c7CiAJY29uc3QgY2hhciAqc3RhdGVfb247CkBAIC01Myw3ICs1Myw3IEBACiAJc3RhdGUgPSBncGlvX2dldF92YWx1ZShkYXRhLT5ncGlvKTsKIAlpZiAoZGF0YS0+Z3Bpb19hY3RpdmVfbG93KQogCQlzdGF0ZSA9ICFzdGF0ZTsKLQlleHRjb25fc2V0X3N0YXRlKCZkYXRhLT5lZGV2LCBzdGF0ZSk7CisJZXh0Y29uX3NldF9zdGF0ZShkYXRhLT5lZGV2LCBzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBncGlvX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTY3LDkgKzY3LDEwIEBACiAKIHN0YXRpYyBzc2l6ZV90IGV4dGNvbl9ncGlvX3ByaW50X3N0YXRlKHN0cnVjdCBleHRjb25fZGV2ICplZGV2LCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGdwaW9fZXh0Y29uX2RhdGEJKmV4dGNvbl9kYXRhID0KLQkJY29udGFpbmVyX29mKGVkZXYsIHN0cnVjdCBncGlvX2V4dGNvbl9kYXRhLCBlZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBlZGV2LT5kZXYucGFyZW50OworCXN0cnVjdCBncGlvX2V4dGNvbl9kYXRhICpleHRjb25fZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWNvbnN0IGNoYXIgKnN0YXRlOworCiAJaWYgKGV4dGNvbl9nZXRfc3RhdGUoZWRldikpCiAJCXN0YXRlID0gZXh0Y29uX2RhdGEtPnN0YXRlX29uOwogCWVsc2UKQEAgLTk4LDE1ICs5OSwyMSBAQAogCWlmICghZXh0Y29uX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXh0Y29uX2RhdGEtPmVkZXYubmFtZSA9IHBkYXRhLT5uYW1lOwotCWV4dGNvbl9kYXRhLT5lZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWV4dGNvbl9kYXRhLT5lZGV2ID0gZGV2bV9leHRjb25fZGV2X2FsbG9jYXRlKCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZXh0Y29uX2RhdGEtPmVkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBleHRjb24gZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWV4dGNvbl9kYXRhLT5lZGV2LT5uYW1lID0gcGRhdGEtPm5hbWU7CisJZXh0Y29uX2RhdGEtPmVkZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCiAJZXh0Y29uX2RhdGEtPmdwaW8gPSBwZGF0YS0+Z3BpbzsKIAlleHRjb25fZGF0YS0+Z3Bpb19hY3RpdmVfbG93ID0gcGRhdGEtPmdwaW9fYWN0aXZlX2xvdzsKIAlleHRjb25fZGF0YS0+c3RhdGVfb24gPSBwZGF0YS0+c3RhdGVfb247CiAJZXh0Y29uX2RhdGEtPnN0YXRlX29mZiA9IHBkYXRhLT5zdGF0ZV9vZmY7CiAJZXh0Y29uX2RhdGEtPmNoZWNrX29uX3Jlc3VtZSA9IHBkYXRhLT5jaGVja19vbl9yZXN1bWU7CiAJaWYgKHBkYXRhLT5zdGF0ZV9vbiAmJiBwZGF0YS0+c3RhdGVfb2ZmKQotCQlleHRjb25fZGF0YS0+ZWRldi5wcmludF9zdGF0ZSA9IGV4dGNvbl9ncGlvX3ByaW50X3N0YXRlOworCQlleHRjb25fZGF0YS0+ZWRldi0+cHJpbnRfc3RhdGUgPSBleHRjb25fZ3Bpb19wcmludF9zdGF0ZTsKIAogCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZSgmcGRldi0+ZGV2LCBleHRjb25fZGF0YS0+Z3BpbywgR1BJT0ZfRElSX0lOLAogCQkJCSAgICBwZGV2LT5uYW1lKTsKQEAgLTEyMSwzNCArMTI4LDI3IEBACiAJCQkJbXNlY3NfdG9famlmZmllcyhwZGF0YS0+ZGVib3VuY2UpOwogCX0KIAotCXJldCA9IGV4dGNvbl9kZXZfcmVnaXN0ZXIoJmV4dGNvbl9kYXRhLT5lZGV2KTsKKwlyZXQgPSBkZXZtX2V4dGNvbl9kZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgZXh0Y29uX2RhdGEtPmVkZXYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmV4dGNvbl9kYXRhLT53b3JrLCBncGlvX2V4dGNvbl93b3JrKTsKIAogCWV4dGNvbl9kYXRhLT5pcnEgPSBncGlvX3RvX2lycShleHRjb25fZGF0YS0+Z3Bpbyk7Ci0JaWYgKGV4dGNvbl9kYXRhLT5pcnEgPCAwKSB7Ci0JCXJldCA9IGV4dGNvbl9kYXRhLT5pcnE7Ci0JCWdvdG8gZXJyOwotCX0KKwlpZiAoZXh0Y29uX2RhdGEtPmlycSA8IDApCisJCXJldHVybiBleHRjb25fZGF0YS0+aXJxOwogCiAJcmV0ID0gcmVxdWVzdF9hbnlfY29udGV4dF9pcnEoZXh0Y29uX2RhdGEtPmlycSwgZ3Bpb19pcnFfaGFuZGxlciwKIAkJCQkgICAgICBwZGF0YS0+aXJxX2ZsYWdzLCBwZGV2LT5uYW1lLAogCQkJCSAgICAgIGV4dGNvbl9kYXRhKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7CisJCXJldHVybiByZXQ7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBleHRjb25fZGF0YSk7CiAJLyogUGVyZm9ybSBpbml0aWFsIGRldGVjdGlvbiAqLwogCWdwaW9fZXh0Y29uX3dvcmsoJmV4dGNvbl9kYXRhLT53b3JrLndvcmspOwogCiAJcmV0dXJuIDA7Ci0KLWVycjoKLQlleHRjb25fZGV2X3VucmVnaXN0ZXIoJmV4dGNvbl9kYXRhLT5lZGV2KTsKLQotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZ3Bpb19leHRjb25fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xNTcsNyArMTU3LDYgQEAKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZXh0Y29uX2RhdGEtPndvcmspOwogCWZyZWVfaXJxKGV4dGNvbl9kYXRhLT5pcnEsIGV4dGNvbl9kYXRhKTsKLQlleHRjb25fZGV2X3VucmVnaXN0ZXIoJmV4dGNvbl9kYXRhLT5lZGV2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTc3LmMgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4MTQ1NzcuYwppbmRleCAzODQ2OTQxLi5kNDllODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4MTQ1NzcuYworKysgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4MTQ1NzcuYwpAQCAtMSw4ICsxLDkgQEAKIC8qCi0gKiBleHRjb24tbWF4MTQ1NzcuYyAtIE1BWDE0NTc3IGV4dGNvbiBkcml2ZXIgdG8gc3VwcG9ydCBNQVgxNDU3NyBNVUlDCisgKiBleHRjb24tbWF4MTQ1NzcuYyAtIE1BWDE0NTc3Lzc3ODM2IGV4dGNvbiBkcml2ZXIgdG8gc3VwcG9ydCBNVUlDCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Rybm9pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMywyMDE0IFNhbXN1bmcgRWxlY3Rybm9pY3MKICAqIENoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPgorICogS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNCw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL21heDE0NTc3LXByaXZhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4KIAotI2RlZmluZQlERVZfTkFNRQkJCSJtYXgxNDU3Ny1tdWljIgogI2RlZmluZQlERUxBWV9NU19ERUZBVUxUCQkxNzAwMAkJLyogdW5pdDogbWlsbGlzZWNvbmQgKi8KIAogZW51bSBtYXgxNDU3N19tdWljX2FkY19kZWJvdW5jZV90aW1lIHsKQEAgLTQwLDYgKzQwLDQyIEBACiAJTUFYMTQ1NzdfTVVJQ19TVEFUVVNfRU5ELAogfTsKIAorLyoqCisgKiBzdHJ1Y3QgbWF4MTQ1NzdfbXVpY19pcnEKKyAqIEBpcnE6IHRoZSBpbmRleCBvZiBpcnEgbGlzdCBvZiBNVUlDIGRldmljZS4KKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiBpcnEuCisgKiBAdmlycTogdGhlIHZpcnR1YWwgaXJxIHRvIHVzZSBpcnEgZG9tYWluCisgKi8KK3N0cnVjdCBtYXgxNDU3N19tdWljX2lycSB7CisJdW5zaWduZWQgaW50IGlycTsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCB2aXJxOworfTsKKworc3RhdGljIHN0cnVjdCBtYXgxNDU3N19tdWljX2lycSBtYXgxNDU3N19tdWljX2lycXNbXSA9IHsKKwl7IE1BWDE0NTc3X0lSUV9JTlQxX0FEQywJIm11aWMtQURDIiB9LAorCXsgTUFYMTQ1NzdfSVJRX0lOVDFfQURDTE9XLAkibXVpYy1BRENMT1ciIH0sCisJeyBNQVgxNDU3N19JUlFfSU5UMV9BRENFUlIsCSJtdWljLUFEQ0Vycm9yIiB9LAorCXsgTUFYMTQ1NzdfSVJRX0lOVDJfQ0hHVFlQLAkibXVpYy1DSEdUWVAiIH0sCisJeyBNQVgxNDU3N19JUlFfSU5UMl9DSEdERVRSVU4sCSJtdWljLUNIR0RFVFJVTiIgfSwKKwl7IE1BWDE0NTc3X0lSUV9JTlQyX0RDRFRNUiwJIm11aWMtRENEVE1SIiB9LAorCXsgTUFYMTQ1NzdfSVJRX0lOVDJfREJDSEcsCSJtdWljLURCQ0hHIiB9LAorCXsgTUFYMTQ1NzdfSVJRX0lOVDJfVkJWT0xULAkibXVpYy1WQlZPTFQiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG1heDE0NTc3X211aWNfaXJxIG1heDc3ODM2X211aWNfaXJxc1tdID0geworCXsgTUFYMTQ1NzdfSVJRX0lOVDFfQURDLAkibXVpYy1BREMiIH0sCisJeyBNQVgxNDU3N19JUlFfSU5UMV9BRENMT1csCSJtdWljLUFEQ0xPVyIgfSwKKwl7IE1BWDE0NTc3X0lSUV9JTlQxX0FEQ0VSUiwJIm11aWMtQURDRXJyb3IiIH0sCisJeyBNQVg3NzgzNl9JUlFfSU5UMV9BREMxSywJIm11aWMtQURDMUsiIH0sCisJeyBNQVgxNDU3N19JUlFfSU5UMl9DSEdUWVAsCSJtdWljLUNIR1RZUCIgfSwKKwl7IE1BWDE0NTc3X0lSUV9JTlQyX0NIR0RFVFJVTiwJIm11aWMtQ0hHREVUUlVOIiB9LAorCXsgTUFYMTQ1NzdfSVJRX0lOVDJfRENEVE1SLAkibXVpYy1EQ0RUTVIiIH0sCisJeyBNQVgxNDU3N19JUlFfSU5UMl9EQkNIRywJIm11aWMtREJDSEciIH0sCisJeyBNQVgxNDU3N19JUlFfSU5UMl9WQlZPTFQsCSJtdWljLVZCVk9MVCIgfSwKKwl7IE1BWDc3ODM2X0lSUV9JTlQyX1ZJRFJNLAkibXVpYy1WSURSTSIgfSwKK307CisKIHN0cnVjdCBtYXgxNDU3N19tdWljX2luZm8gewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbWF4MTQ1NzcgKm1heDE0NTc3OwpAQCAtNDgsNiArODQsOCBAQAogCWludCBwcmV2X2NoZ190eXBlOwogCXU4IHN0YXR1c1tNQVgxNDU3N19NVUlDX1NUQVRVU19FTkRdOwogCisJc3RydWN0IG1heDE0NTc3X211aWNfaXJxICptdWljX2lycXM7CisJdW5zaWduZWQgaW50IG11aWNfaXJxc19udW07CiAJYm9vbCBpcnFfYWRjOwogCWJvb2wgaXJxX2NoZzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3dvcms7CkBAIC03NCwyOSArMTEyLDYgQEAKIAlNQVgxNDU3N19DQUJMRV9HUk9VUF9DSEcsCiB9OwogCi0vKioKLSAqIHN0cnVjdCBtYXgxNDU3N19tdWljX2lycQotICogQGlycTogdGhlIGluZGV4IG9mIGlycSBsaXN0IG9mIE1VSUMgZGV2aWNlLgotICogQG5hbWU6IHRoZSBuYW1lIG9mIGlycS4KLSAqIEB2aXJxOiB0aGUgdmlydHVhbCBpcnEgdG8gdXNlIGlycSBkb21haW4KLSAqLwotc3RydWN0IG1heDE0NTc3X211aWNfaXJxIHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdW5zaWduZWQgaW50IHZpcnE7Ci19OwotCi1zdGF0aWMgc3RydWN0IG1heDE0NTc3X211aWNfaXJxIG11aWNfaXJxc1tdID0gewotCXsgTUFYMTQ1NzdfSVJRX0lOVDFfQURDLAkibXVpYy1BREMiIH0sCi0JeyBNQVgxNDU3N19JUlFfSU5UMV9BRENMT1csCSJtdWljLUFEQ0xPVyIgfSwKLQl7IE1BWDE0NTc3X0lSUV9JTlQxX0FEQ0VSUiwJIm11aWMtQURDRXJyb3IiIH0sCi0JeyBNQVgxNDU3N19JUlFfSU5UMl9DSEdUWVAsCSJtdWljLUNIR1RZUCIgfSwKLQl7IE1BWDE0NTc3X0lSUV9JTlQyX0NIR0RFVFJVTiwJIm11aWMtQ0hHREVUUlVOIiB9LAotCXsgTUFYMTQ1NzdfSVJRX0lOVDJfRENEVE1SLAkibXVpYy1EQ0RUTVIiIH0sCi0JeyBNQVgxNDU3N19JUlFfSU5UMl9EQkNIRywJIm11aWMtREJDSEciIH0sCi0JeyBNQVgxNDU3N19JUlFfSU5UMl9WQlZPTFQsCSJtdWljLVZCVk9MVCIgfSwKLX07Ci0KIC8qIERlZmluZSBzdXBwb3J0ZWQgYWNjZXNzb3J5IHR5cGUgKi8KIGVudW0gbWF4MTQ1NzdfbXVpY19hY2NfdHlwZSB7CiAJTUFYMTQ1NzdfTVVJQ19BRENfR1JPVU5EID0gMHgwLApAQCAtNTI4LDIxICs1NDMsMTIgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXgxNDU3N19tdWljX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCisvKgorICogU2V0cyBpcnFfYWRjIG9yIGlycV9jaGcgaW4gbWF4MTQ1NzdfbXVpY19pbmZvIGFuZCByZXR1cm5zIDEuCisgKiBSZXR1cm5zIDAgaWYgaXJxX3R5cGUgZG9lcyBub3QgbWF0Y2ggcmVnaXN0ZXJlZCBJUlEgZm9yIHRoaXMgZGV2aWNlIHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgbWF4MTQ1NzdfcGFyc2VfaXJxKHN0cnVjdCBtYXgxNDU3N19tdWljX2luZm8gKmluZm8sIGludCBpcnFfdHlwZSkKIHsKLQlzdHJ1Y3QgbWF4MTQ1NzdfbXVpY19pbmZvICppbmZvID0gZGF0YTsKLQlpbnQgaSwgaXJxX3R5cGUgPSAtMTsKLQotCS8qCi0JICogV2UgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgZGlmZmVyZW50IG5lc3RlZCBJUlEtcy4KLQkgKiBJbmNsdWRpbmcgY2hhbmdlcyBpbiBJTlQxX0FEQyBhbmQgSU5UMl9DR0hUWVAgYXQgb25jZS4KLQkgKiBIb3dldmVyIHdlIG9ubHkgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgd2FzIEFEQywgY2hhcmdlcgotCSAqIG9yIGJvdGggaW50ZXJydXB0cyBzbyBkZWNvZGUgSVJRIGFuZCB0dXJuIG9uIHByb3BlciBmbGFncy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdWljX2lycXMpOyBpKyspCi0JCWlmIChpcnEgPT0gbXVpY19pcnFzW2ldLnZpcnEpCi0JCQlpcnFfdHlwZSA9IG11aWNfaXJxc1tpXS5pcnE7Ci0KIAlzd2l0Y2ggKGlycV90eXBlKSB7CiAJY2FzZSBNQVgxNDU3N19JUlFfSU5UMV9BREM6CiAJY2FzZSBNQVgxNDU3N19JUlFfSU5UMV9BRENMT1c6CkBAIC01NTAsNyArNTU2LDcgQEAKIAkJLyogSGFuZGxlIGFsbCBvZiBhY2Nlc3NvcnkgZXhjZXB0IGZvcgogCQkgICB0eXBlIG9mIGNoYXJnZXIgYWNjZXNzb3J5ICovCiAJCWluZm8tPmlycV9hZGMgPSB0cnVlOwotCQlicmVhazsKKwkJcmV0dXJuIDE7CiAJY2FzZSBNQVgxNDU3N19JUlFfSU5UMl9DSEdUWVA6CiAJY2FzZSBNQVgxNDU3N19JUlFfSU5UMl9DSEdERVRSVU46CiAJY2FzZSBNQVgxNDU3N19JUlFfSU5UMl9EQ0RUTVI6CkBAIC01NTgsOCArNTY0LDYyIEBACiAJY2FzZSBNQVgxNDU3N19JUlFfSU5UMl9WQlZPTFQ6CiAJCS8qIEhhbmRsZSBjaGFyZ2VyIGFjY2Vzc29yeSAqLwogCQlpbmZvLT5pcnFfY2hnID0gdHJ1ZTsKLQkJYnJlYWs7CisJCXJldHVybiAxOwogCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIFNldHMgaXJxX2FkYyBvciBpcnFfY2hnIGluIG1heDE0NTc3X211aWNfaW5mbyBhbmQgcmV0dXJucyAxLgorICogUmV0dXJucyAwIGlmIGlycV90eXBlIGRvZXMgbm90IG1hdGNoIHJlZ2lzdGVyZWQgSVJRIGZvciB0aGlzIGRldmljZSB0eXBlLgorICovCitzdGF0aWMgaW50IG1heDc3ODM2X3BhcnNlX2lycShzdHJ1Y3QgbWF4MTQ1NzdfbXVpY19pbmZvICppbmZvLCBpbnQgaXJxX3R5cGUpCit7CisJLyogRmlyc3QgY2hlY2sgY29tbW9uIG1heDE0NTc3IGludGVycnVwdHMgKi8KKwlpZiAobWF4MTQ1NzdfcGFyc2VfaXJxKGluZm8sIGlycV90eXBlKSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKGlycV90eXBlKSB7CisJY2FzZSBNQVg3NzgzNl9JUlFfSU5UMV9BREMxSzoKKwkJaW5mby0+aXJxX2FkYyA9IHRydWU7CisJCXJldHVybiAxOworCWNhc2UgTUFYNzc4MzZfSVJRX0lOVDJfVklEUk06CisJCS8qIEhhbmRsZSBjaGFyZ2VyIGFjY2Vzc29yeSAqLworCQlpbmZvLT5pcnFfY2hnID0gdHJ1ZTsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWF4MTQ1NzdfbXVpY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtYXgxNDU3N19tdWljX2luZm8gKmluZm8gPSBkYXRhOworCWludCBpLCBpcnFfdHlwZSA9IC0xOworCWJvb2wgaXJxX3BhcnNlZDsKKworCS8qCisJICogV2UgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgZGlmZmVyZW50IG5lc3RlZCBJUlEtcy4KKwkgKiBJbmNsdWRpbmcgY2hhbmdlcyBpbiBJTlQxX0FEQyBhbmQgSU5UMl9DR0hUWVAgYXQgb25jZS4KKwkgKiBIb3dldmVyIHdlIG9ubHkgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgd2FzIEFEQywgY2hhcmdlcgorCSAqIG9yIGJvdGggaW50ZXJydXB0cyBzbyBkZWNvZGUgSVJRIGFuZCB0dXJuIG9uIHByb3BlciBmbGFncy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bXVpY19pcnFzX251bTsgaSsrKQorCQlpZiAoaXJxID09IGluZm8tPm11aWNfaXJxc1tpXS52aXJxKQorCQkJaXJxX3R5cGUgPSBpbmZvLT5tdWljX2lycXNbaV0uaXJxOworCisJc3dpdGNoIChpbmZvLT5tYXgxNDU3Ny0+ZGV2X3R5cGUpIHsKKwljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDc3ODM2OgorCQlpcnFfcGFyc2VkID0gbWF4Nzc4MzZfcGFyc2VfaXJxKGluZm8sIGlycV90eXBlKTsKKwkJYnJlYWs7CisJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVgxNDU3NzoKKwlkZWZhdWx0OgorCQlpcnFfcGFyc2VkID0gbWF4MTQ1NzdfcGFyc2VfaXJxKGluZm8sIGlycV90eXBlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFpcnFfcGFyc2VkKSB7CiAJCWRldl9lcnIoaW5mby0+ZGV2LCAibXVpYyBpbnRlcnJ1cHQ6IGlycSAlZCBvY2N1cnJlZCwgc2tpcHBlZFxuIiwKIAkJCQlpcnFfdHlwZSk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTY0NCwxMyArNzA0LDI0IEBACiAKIAlJTklUX1dPUksoJmluZm8tPmlycV93b3JrLCBtYXgxNDU3N19tdWljX2lycV93b3JrKTsKIAorCXN3aXRjaCAobWF4MTQ1NzctPmRldl90eXBlKSB7CisJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVg3NzgzNjoKKwkJaW5mby0+bXVpY19pcnFzID0gbWF4Nzc4MzZfbXVpY19pcnFzOworCQlpbmZvLT5tdWljX2lycXNfbnVtID0gQVJSQVlfU0laRShtYXg3NzgzNl9tdWljX2lycXMpOworCQlicmVhazsKKwljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDE0NTc3OgorCWRlZmF1bHQ6CisJCWluZm8tPm11aWNfaXJxcyA9IG1heDE0NTc3X211aWNfaXJxczsKKwkJaW5mby0+bXVpY19pcnFzX251bSA9IEFSUkFZX1NJWkUobWF4MTQ1NzdfbXVpY19pcnFzKTsKKwl9CisKIAkvKiBTdXBwb3J0IGlycSBkb21haW4gZm9yIG1heDE0NTc3IE1VSUMgZGV2aWNlICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXVpY19pcnFzKTsgaSsrKSB7Ci0JCXN0cnVjdCBtYXgxNDU3N19tdWljX2lycSAqbXVpY19pcnEgPSAmbXVpY19pcnFzW2ldOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tdWljX2lycXNfbnVtOyBpKyspIHsKKwkJc3RydWN0IG1heDE0NTc3X211aWNfaXJxICptdWljX2lycSA9ICZpbmZvLT5tdWljX2lycXNbaV07CiAJCXVuc2lnbmVkIGludCB2aXJxID0gMDsKIAogCQl2aXJxID0gcmVnbWFwX2lycV9nZXRfdmlycShtYXgxNDU3Ny0+aXJxX2RhdGEsIG11aWNfaXJxLT5pcnEpOwotCQlpZiAoIXZpcnEpCisJCWlmICh2aXJxIDw9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJbXVpY19pcnEtPnZpcnEgPSB2aXJxOwogCkBAIC02NjgsMTQgKzczOSwxNiBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgZXh0Y29uIGRldmljZSAqLwotCWluZm8tPmVkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppbmZvLT5lZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvLT5lZGV2KSB7CisJaW5mby0+ZWRldiA9IGRldm1fZXh0Y29uX2Rldl9hbGxvY2F0ZSgmcGRldi0+ZGV2LAorCQkJCQkgICAgICBtYXgxNDU3N19leHRjb25fY2FibGUpOworCWlmIChJU19FUlIoaW5mby0+ZWRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZXh0Y29uXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWluZm8tPmVkZXYtPm5hbWUgPSBERVZfTkFNRTsKLQlpbmZvLT5lZGV2LT5zdXBwb3J0ZWRfY2FibGUgPSBtYXgxNDU3N19leHRjb25fY2FibGU7Ci0JcmV0ID0gZXh0Y29uX2Rldl9yZWdpc3RlcihpbmZvLT5lZGV2KTsKKworCWluZm8tPmVkZXYtPm5hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKKworCXJldCA9IGRldm1fZXh0Y29uX2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCBpbmZvLT5lZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBleHRjb24gZGV2aWNlXG4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTY5NCw3ICs3NjcsNyBAQAogCQkJTUFYMTQ1NzdfUkVHX0RFVklDRUlELCAmaWQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWFkIHJldmlzaW9uIG51bWJlclxuIik7Ci0JCWdvdG8gZXJyX2V4dGNvbjsKKwkJcmV0dXJuIHJldDsKIAl9CiAJZGV2X2luZm8oaW5mby0+ZGV2LCAiZGV2aWNlIElEIDogMHgleFxuIiwgaWQpOwogCkBAIC03MTAsMTkgKzc4MywxMCBAQAogCSAqIGRyaXZlciBzaG91bGQgbm90aWZ5IGNhYmxlIHN0YXRlIHRvIHVwcGVyIGxheWVyLgogCSAqLwogCUlOSVRfREVMQVlFRF9XT1JLKCZpbmZvLT53cV9kZXRjYWJsZSwgbWF4MTQ1NzdfbXVpY19kZXRlY3RfY2FibGVfd3EpOwotCXJldCA9IHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCAmaW5mby0+d3FfZGV0Y2FibGUsCisJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZpbmZvLT53cV9kZXRjYWJsZSwKIAkJCWRlbGF5X2ppZmZpZXMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJmYWlsZWQgdG8gc2NoZWR1bGUgZGVsYXllZCB3b3JrIGZvciBjYWJsZSBkZXRlY3RcbiIpOwotCQlnb3RvIGVycl9leHRjb247Ci0JfQogCiAJcmV0dXJuIHJldDsKLQotZXJyX2V4dGNvbjoKLQlleHRjb25fZGV2X3VucmVnaXN0ZXIoaW5mby0+ZWRldik7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtYXgxNDU3N19tdWljX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNzMwLDIzICs3OTQsMzAgQEAKIAlzdHJ1Y3QgbWF4MTQ1NzdfbXVpY19pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAljYW5jZWxfd29ya19zeW5jKCZpbmZvLT5pcnFfd29yayk7Ci0JZXh0Y29uX2Rldl91bnJlZ2lzdGVyKGluZm8tPmVkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIG1heDE0NTc3X211aWNfaWRbXSA9IHsKKwl7ICJtYXgxNDU3Ny1tdWljIiwgTUFYSU1fREVWSUNFX1RZUEVfTUFYMTQ1NzcsIH0sCisJeyAibWF4Nzc4MzYtbXVpYyIsIE1BWElNX0RFVklDRV9UWVBFX01BWDc3ODM2LCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIG1heDE0NTc3X211aWNfaWQpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXgxNDU3N19tdWljX2RyaXZlciA9IHsKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBERVZfTkFNRSwKKwkJLm5hbWUJPSAibWF4MTQ1NzctbXVpYyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlCQk9IG1heDE0NTc3X211aWNfcHJvYmUsCiAJLnJlbW92ZQkJPSBtYXgxNDU3N19tdWljX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBtYXgxNDU3N19tdWljX2lkLAogfTsKIAogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtYXgxNDU3N19tdWljX2RyaXZlcik7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiTUFYSU0gMTQ1NzcgRXh0Y29uIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1heGltIDE0NTc3Lzc3ODM2IEV4dGNvbiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPiwgS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmV4dGNvbi1tYXgxNDU3NyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDc3NjkzLmMgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4Nzc2OTMuYwppbmRleCBkYTI2OGZiLi4yYzdjM2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4Nzc2OTMuYworKysgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4Nzc2OTMuYwpAQCAtMTE3NSwyNSArMTE3NSwyNCBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgZXh0Y29uIGRldmljZSAqLwotCWluZm8tPmVkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBleHRjb25fZGV2KSwKLQkJCQkgIEdGUF9LRVJORUwpOwotCWlmICghaW5mby0+ZWRldikgeworCWluZm8tPmVkZXYgPSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwKKwkJCQkJICAgICAgbWF4Nzc2OTNfZXh0Y29uX2NhYmxlKTsKKwlpZiAoSVNfRVJSKGluZm8tPmVkZXYpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV4dGNvblxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lycTsKIAl9CiAJaW5mby0+ZWRldi0+bmFtZSA9IERFVl9OQU1FOwogCWluZm8tPmVkZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWluZm8tPmVkZXYtPnN1cHBvcnRlZF9jYWJsZSA9IG1heDc3NjkzX2V4dGNvbl9jYWJsZTsKLQlyZXQgPSBleHRjb25fZGV2X3JlZ2lzdGVyKGluZm8tPmVkZXYpOworCisJcmV0ID0gZGV2bV9leHRjb25fZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGluZm8tPmVkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGNvbiBkZXZpY2VcbiIpOwogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0KIAkvKiBJbml0aWFsaXplIE1VSUMgcmVnaXN0ZXIgYnkgdXNpbmcgcGxhdGZvcm0gZGF0YSBvciBkZWZhdWx0IGRhdGEgKi8KLQlpZiAocGRhdGEtPm11aWNfZGF0YSkgeworCWlmIChwZGF0YSAmJiBwZGF0YS0+bXVpY19kYXRhKSB7CiAJCWluaXRfZGF0YSA9IHBkYXRhLT5tdWljX2RhdGEtPmluaXRfZGF0YTsKIAkJbnVtX2luaXRfZGF0YSA9IHBkYXRhLT5tdWljX2RhdGEtPm51bV9pbml0X2RhdGE7CiAJfSBlbHNlIHsKQEAgLTEyMjYsNyArMTIyNSw3IEBACiAJCQkJPSBpbml0X2RhdGFbaV0uZGF0YTsKIAl9CiAKLQlpZiAocGRhdGEtPm11aWNfZGF0YSkgeworCWlmIChwZGF0YSAmJiBwZGF0YS0+bXVpY19kYXRhKSB7CiAJCXN0cnVjdCBtYXg3NzY5M19tdWljX3BsYXRmb3JtX2RhdGEgKm11aWNfcGRhdGEKIAkJCQkJCSAgID0gcGRhdGEtPm11aWNfZGF0YTsKIApAQCAtMTI2Nyw3ICsxMjY2LDcgQEAKIAkJCU1BWDc3NjkzX01VSUNfUkVHX0lELCAmaWQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWFkIHJldmlzaW9uIG51bWJlclxuIik7Ci0JCWdvdG8gZXJyX2V4dGNvbjsKKwkJZ290byBlcnJfaXJxOwogCX0KIAlkZXZfaW5mbyhpbmZvLT5kZXYsICJkZXZpY2UgSUQgOiAweCV4XG4iLCBpZCk7CiAKQEAgLTEyODMsMTIgKzEyODIsMTEgQEAKIAkgKiBkcml2ZXIgc2hvdWxkIG5vdGlmeSBjYWJsZSBzdGF0ZSB0byB1cHBlciBsYXllci4KIAkgKi8KIAlJTklUX0RFTEFZRURfV09SSygmaW5mby0+d3FfZGV0Y2FibGUsIG1heDc3NjkzX211aWNfZGV0ZWN0X2NhYmxlX3dxKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPndxX2RldGNhYmxlLCBkZWxheV9qaWZmaWVzKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgJmluZm8tPndxX2RldGNhYmxlLAorCQkJZGVsYXlfamlmZmllcyk7CiAKIAlyZXR1cm4gcmV0OwogCi1lcnJfZXh0Y29uOgotCWV4dGNvbl9kZXZfdW5yZWdpc3RlcihpbmZvLT5lZGV2KTsKIGVycl9pcnE6CiAJd2hpbGUgKC0taSA+PSAwKQogCQlmcmVlX2lycShtdWljX2lycXNbaV0udmlycSwgaW5mbyk7CkBAIC0xMzA0LDcgKzEzMDIsNiBAQAogCQlmcmVlX2lycShtdWljX2lycXNbaV0udmlycSwgaW5mbyk7CiAJY2FuY2VsX3dvcmtfc3luYygmaW5mby0+aXJxX3dvcmspOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGluZm8tPmRvY2spOwotCWV4dGNvbl9kZXZfdW5yZWdpc3RlcihpbmZvLT5lZGV2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDg5OTcuYyBiL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1tYXg4OTk3LmMKaW5kZXggNmEwMDQ2NC4uZDlmN2YxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDg5OTcuYworKysgYi9kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4ODk5Ny5jCkBAIC02OTksMjMgKzY5OSwyMiBAQAogCX0KIAogCS8qIEV4dGVybmFsIGNvbm5lY3RvciAqLwotCWluZm8tPmVkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBleHRjb25fZGV2KSwKLQkJCQkgIEdGUF9LRVJORUwpOwotCWlmICghaW5mby0+ZWRldikgeworCWluZm8tPmVkZXYgPSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwgbWF4ODk5N19leHRjb25fY2FibGUpOworCWlmIChJU19FUlIoaW5mby0+ZWRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZXh0Y29uXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaXJxOwogCX0KIAlpbmZvLT5lZGV2LT5uYW1lID0gREVWX05BTUU7CiAJaW5mby0+ZWRldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JaW5mby0+ZWRldi0+c3VwcG9ydGVkX2NhYmxlID0gbWF4ODk5N19leHRjb25fY2FibGU7Ci0JcmV0ID0gZXh0Y29uX2Rldl9yZWdpc3RlcihpbmZvLT5lZGV2KTsKKworCXJldCA9IGRldm1fZXh0Y29uX2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCBpbmZvLT5lZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBleHRjb24gZGV2aWNlXG4iKTsKIAkJZ290byBlcnJfaXJxOwogCX0KIAotCWlmIChwZGF0YS0+bXVpY19wZGF0YSkgeworCWlmIChwZGF0YSAmJiBwZGF0YS0+bXVpY19wZGF0YSkgewogCQlzdHJ1Y3QgbWF4ODk5N19tdWljX3BsYXRmb3JtX2RhdGEgKm11aWNfcGRhdGEKIAkJCT0gcGRhdGEtPm11aWNfcGRhdGE7CiAKQEAgLTc3MCw3ICs3NjksOCBAQAogCSAqIGRyaXZlciBzaG91bGQgbm90aWZ5IGNhYmxlIHN0YXRlIHRvIHVwcGVyIGxheWVyLgogCSAqLwogCUlOSVRfREVMQVlFRF9XT1JLKCZpbmZvLT53cV9kZXRjYWJsZSwgbWF4ODk5N19tdWljX2RldGVjdF9jYWJsZV93cSk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbmZvLT53cV9kZXRjYWJsZSwgZGVsYXlfamlmZmllcyk7CisJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZpbmZvLT53cV9kZXRjYWJsZSwKKwkJCWRlbGF5X2ppZmZpZXMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTc4OSw4ICs3ODksNiBAQAogCQlmcmVlX2lycShtdWljX2lycXNbaV0udmlycSwgaW5mbyk7CiAJY2FuY2VsX3dvcmtfc3luYygmaW5mby0+aXJxX3dvcmspOwogCi0JZXh0Y29uX2Rldl91bnJlZ2lzdGVyKGluZm8tPmVkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1wYWxtYXMuYyBiL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi1wYWxtYXMuYwppbmRleCBkZGZmMmI3Li43NDE3Y2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2V4dGNvbi9leHRjb24tcGFsbWFzLmMKKysrIGIvZHJpdmVycy9leHRjb24vZXh0Y29uLXBhbG1hcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9wYWxtYXMuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtNTYsNyArNTcsNyBAQAogCWlmICh2YnVzX2xpbmVfc3RhdGUgJiBQQUxNQVNfSU5UM19MSU5FX1NUQVRFX1ZCVVMpIHsKIAkJaWYgKHBhbG1hc191c2ItPmxpbmtzdGF0ICE9IFBBTE1BU19VU0JfU1RBVEVfVkJVUykgewogCQkJcGFsbWFzX3VzYi0+bGlua3N0YXQgPSBQQUxNQVNfVVNCX1NUQVRFX1ZCVVM7Ci0JCQlleHRjb25fc2V0X2NhYmxlX3N0YXRlKCZwYWxtYXNfdXNiLT5lZGV2LCAiVVNCIiwgdHJ1ZSk7CisJCQlleHRjb25fc2V0X2NhYmxlX3N0YXRlKHBhbG1hc191c2ItPmVkZXYsICJVU0IiLCB0cnVlKTsKIAkJCWRldl9pbmZvKHBhbG1hc191c2ItPmRldiwgIlVTQiBjYWJsZSBpcyBhdHRhY2hlZFxuIik7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZGJnKHBhbG1hc191c2ItPmRldiwKQEAgLTY1LDcgKzY2LDcgQEAKIAl9IGVsc2UgaWYgKCEodmJ1c19saW5lX3N0YXRlICYgUEFMTUFTX0lOVDNfTElORV9TVEFURV9WQlVTKSkgewogCQlpZiAocGFsbWFzX3VzYi0+bGlua3N0YXQgPT0gUEFMTUFTX1VTQl9TVEFURV9WQlVTKSB7CiAJCQlwYWxtYXNfdXNiLT5saW5rc3RhdCA9IFBBTE1BU19VU0JfU1RBVEVfRElTQ09OTkVDVDsKLQkJCWV4dGNvbl9zZXRfY2FibGVfc3RhdGUoJnBhbG1hc191c2ItPmVkZXYsICJVU0IiLCBmYWxzZSk7CisJCQlleHRjb25fc2V0X2NhYmxlX3N0YXRlKHBhbG1hc191c2ItPmVkZXYsICJVU0IiLCBmYWxzZSk7CiAJCQlkZXZfaW5mbyhwYWxtYXNfdXNiLT5kZXYsICJVU0IgY2FibGUgaXMgZGV0YWNoZWRcbiIpOwogCQl9IGVsc2UgewogCQkJZGV2X2RiZyhwYWxtYXNfdXNiLT5kZXYsCkBAIC05Miw3ICs5Myw3IEBACiAJCQlQQUxNQVNfVVNCX0lEX0lOVF9MQVRDSF9DTFIsCiAJCQlQQUxNQVNfVVNCX0lEX0lOVF9FTl9ISV9DTFJfSURfR05EKTsKIAkJcGFsbWFzX3VzYi0+bGlua3N0YXQgPSBQQUxNQVNfVVNCX1NUQVRFX0lEOwotCQlleHRjb25fc2V0X2NhYmxlX3N0YXRlKCZwYWxtYXNfdXNiLT5lZGV2LCAiVVNCLUhPU1QiLCB0cnVlKTsKKwkJZXh0Y29uX3NldF9jYWJsZV9zdGF0ZShwYWxtYXNfdXNiLT5lZGV2LCAiVVNCLUhPU1QiLCB0cnVlKTsKIAkJZGV2X2luZm8ocGFsbWFzX3VzYi0+ZGV2LCAiVVNCLUhPU1QgY2FibGUgaXMgYXR0YWNoZWRcbiIpOwogCX0gZWxzZSBpZiAoKHNldCAmIFBBTE1BU19VU0JfSURfSU5UX1NSQ19JRF9GTE9BVCkgJiYKIAkJCQkoaWRfc3JjICYgUEFMTUFTX1VTQl9JRF9JTlRfU1JDX0lEX0ZMT0FUKSkgewpAQCAtMTAwLDE3ICsxMDEsMTcgQEAKIAkJCVBBTE1BU19VU0JfSURfSU5UX0xBVENIX0NMUiwKIAkJCVBBTE1BU19VU0JfSURfSU5UX0VOX0hJX0NMUl9JRF9GTE9BVCk7CiAJCXBhbG1hc191c2ItPmxpbmtzdGF0ID0gUEFMTUFTX1VTQl9TVEFURV9ESVNDT05ORUNUOwotCQlleHRjb25fc2V0X2NhYmxlX3N0YXRlKCZwYWxtYXNfdXNiLT5lZGV2LCAiVVNCLUhPU1QiLCBmYWxzZSk7CisJCWV4dGNvbl9zZXRfY2FibGVfc3RhdGUocGFsbWFzX3VzYi0+ZWRldiwgIlVTQi1IT1NUIiwgZmFsc2UpOwogCQlkZXZfaW5mbyhwYWxtYXNfdXNiLT5kZXYsICJVU0ItSE9TVCBjYWJsZSBpcyBkZXRhY2hlZFxuIik7CiAJfSBlbHNlIGlmICgocGFsbWFzX3VzYi0+bGlua3N0YXQgPT0gUEFMTUFTX1VTQl9TVEFURV9JRCkgJiYKIAkJCQkoIShzZXQgJiBQQUxNQVNfVVNCX0lEX0lOVF9TUkNfSURfR05EKSkpIHsKIAkJcGFsbWFzX3VzYi0+bGlua3N0YXQgPSBQQUxNQVNfVVNCX1NUQVRFX0RJU0NPTk5FQ1Q7Ci0JCWV4dGNvbl9zZXRfY2FibGVfc3RhdGUoJnBhbG1hc191c2ItPmVkZXYsICJVU0ItSE9TVCIsIGZhbHNlKTsKKwkJZXh0Y29uX3NldF9jYWJsZV9zdGF0ZShwYWxtYXNfdXNiLT5lZGV2LCAiVVNCLUhPU1QiLCBmYWxzZSk7CiAJCWRldl9pbmZvKHBhbG1hc191c2ItPmRldiwgIlVTQi1IT1NUIGNhYmxlIGlzIGRldGFjaGVkXG4iKTsKIAl9IGVsc2UgaWYgKChwYWxtYXNfdXNiLT5saW5rc3RhdCA9PSBQQUxNQVNfVVNCX1NUQVRFX0RJU0NPTk5FQ1QpICYmCiAJCQkJKGlkX3NyYyAmIFBBTE1BU19VU0JfSURfSU5UX1NSQ19JRF9HTkQpKSB7CiAJCXBhbG1hc191c2ItPmxpbmtzdGF0ID0gUEFMTUFTX1VTQl9TVEFURV9JRDsKLQkJZXh0Y29uX3NldF9jYWJsZV9zdGF0ZSgmcGFsbWFzX3VzYi0+ZWRldiwgIlVTQi1IT1NUIiwgdHJ1ZSk7CisJCWV4dGNvbl9zZXRfY2FibGVfc3RhdGUocGFsbWFzX3VzYi0+ZWRldiwgIlVTQi1IT1NUIiwgdHJ1ZSk7CiAJCWRldl9pbmZvKHBhbG1hc191c2ItPmRldiwgIiBVU0ItSE9TVCBjYWJsZSBpcyBhdHRhY2hlZFxuIik7CiAJfQogCkBAIC0xODYsMTMgKzE4NywyMCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGFsbWFzX3VzYik7CiAKLQlwYWxtYXNfdXNiLT5lZGV2LnN1cHBvcnRlZF9jYWJsZSA9IHBhbG1hc19leHRjb25fY2FibGU7Ci0JcGFsbWFzX3VzYi0+ZWRldi5kZXYucGFyZW50ID0gcGFsbWFzX3VzYi0+ZGV2OwotCXBhbG1hc191c2ItPmVkZXYubXV0dWFsbHlfZXhjbHVzaXZlID0gbXV0dWFsbHlfZXhjbHVzaXZlOworCXBhbG1hc191c2ItPmVkZXYgPSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwKKwkJCQkJCSAgICBwYWxtYXNfZXh0Y29uX2NhYmxlKTsKKwlpZiAoSVNfRVJSKHBhbG1hc191c2ItPmVkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBleHRjb24gZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBhbG1hc191c2ItPmVkZXYtPm5hbWUgPSBrc3RyZHVwKG5vZGUtPm5hbWUsIEdGUF9LRVJORUwpOworCXBhbG1hc191c2ItPmVkZXYtPmRldi5wYXJlbnQgPSBwYWxtYXNfdXNiLT5kZXY7CisJcGFsbWFzX3VzYi0+ZWRldi0+bXV0dWFsbHlfZXhjbHVzaXZlID0gbXV0dWFsbHlfZXhjbHVzaXZlOwogCi0Jc3RhdHVzID0gZXh0Y29uX2Rldl9yZWdpc3RlcigmcGFsbWFzX3VzYi0+ZWRldik7CisJc3RhdHVzID0gZGV2bV9leHRjb25fZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHBhbG1hc191c2ItPmVkZXYpOwogCWlmIChzdGF0dXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGNvbiBkZXZpY2VcbiIpOworCQlrZnJlZShwYWxtYXNfdXNiLT5lZGV2LT5uYW1lKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTIwNiw3ICsyMTQsOCBAQAogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IElSUSAlZCwgZXJyICVkXG4iLAogCQkJCQlwYWxtYXNfdXNiLT5pZF9pcnEsIHN0YXR1cyk7Ci0JCQlnb3RvIGZhaWxfZXh0Y29uOworCQkJa2ZyZWUocGFsbWFzX3VzYi0+ZWRldi0+bmFtZSk7CisJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQogCkBAIC0yMjAsMjUgKzIyOSwyMSBAQAogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IElSUSAlZCwgZXJyICVkXG4iLAogCQkJCQlwYWxtYXNfdXNiLT52YnVzX2lycSwgc3RhdHVzKTsKLQkJCWdvdG8gZmFpbF9leHRjb247CisJCQlrZnJlZShwYWxtYXNfdXNiLT5lZGV2LT5uYW1lKTsKKwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9CiAKIAlwYWxtYXNfZW5hYmxlX2lycShwYWxtYXNfdXNiKTsKIAlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwZGV2LT5kZXYsIHRydWUpOwogCXJldHVybiAwOwotCi1mYWlsX2V4dGNvbjoKLQlleHRjb25fZGV2X3VucmVnaXN0ZXIoJnBhbG1hc191c2ItPmVkZXYpOwotCi0JcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBwYWxtYXNfdXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwYWxtYXNfdXNiICpwYWxtYXNfdXNiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlleHRjb25fZGV2X3VucmVnaXN0ZXIoJnBhbG1hc191c2ItPmVkZXYpOworCWtmcmVlKHBhbG1hc191c2ItPmVkZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKaW5kZXggN2E3MDFhNS4uNDE5OTg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIG1lbnUgIklFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgfHwgQlJPS0VOCisJZGVwZW5kcyBvbiBQQ0kgfHwgQ09NUElMRV9URVNUCiAJIyBmaXJld2lyZS1jb3JlIGRvZXMgbm90IGRlcGVuZCBvbiBQQ0kgYnV0IGlzCiAJIyBub3QgdXNlZnVsIHdpdGhvdXQgUENJIGNvbnRyb2xsZXIgZHJpdmVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCmluZGV4IDRhZjBhN2IuLmMzOTg2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwpAQCAtMTQ2Miw4ICsxNDYyLDggQEAKIAogCW5ldCA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICJmaXJld2lyZSVkIiwgZnduZXRfaW5pdF9kZXYpOwogCWlmIChuZXQgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJbXV0ZXhfdW5sb2NrKCZmd25ldF9kZXZpY2VfbXV0ZXgpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlhbGxvY2F0ZWRfbmV0ZGV2ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKaW5kZXggNTg2ZjJmNy4uNTc5ODU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKQEAgLTI4Miw2ICsyODIsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RTQjgyQUEyCTB4ODAyNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDYzMFgJMHgzMDQ0CiAjZGVmaW5lIFBDSV9SRVZfSURfVklBX1ZUNjMwNgkJMHg0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDYzMTUJMHgzNDAzCiAKICNkZWZpbmUgUVVJUktfQ1lDTEVfVElNRVIJCTB4MQogI2RlZmluZSBRVUlSS19SRVNFVF9QQUNLRVQJCTB4MgpAQCAtMzM0LDYgKzMzNSwxMiBAQAogCXtQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfVlQ2MzBYLCBQQ0lfUkVWX0lEX1ZJQV9WVDYzMDYsCiAJCVFVSVJLX0NZQ0xFX1RJTUVSIHwgUVVJUktfSVJfV0FLRX0sCiAKKwl7UENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBX1ZUNjMxNSwgMCwKKwkJUVVJUktfQ1lDTEVfVElNRVIgfCBRVUlSS19OT19NU0l9LAorCisJe1BDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9WVDYzMTUsIFBDSV9BTllfSUQsCisJCTB9LAorCiAJe1BDSV9WRU5ET1JfSURfVklBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlRVUlSS19DWUNMRV9USU1FUiB8IFFVSVJLX05PX01TSX0sCiB9OwpAQCAtMzQ5OCw3ICszNTA1LDcgQEAKIAkJfQogCiAJCWNsZWFyX2JpdF91bmxvY2soMCwgJmN0eC0+Zmx1c2hpbmdfY29tcGxldGlvbnMpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCX0KIAogCXRhc2tsZXRfZW5hYmxlKCZjdHgtPmNvbnRleHQudGFza2xldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IGE4NmM0OWEuLjRhMWI1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC01Niw2ICs1Niw3IEBACiAJZGVwZW5kcyBvbiBBQ1BJCiAKIGNvbmZpZyBHUElPTElCX0lSUUNISVAKKwlzZWxlY3QgSVJRX0RPTUFJTgogCWJvb2wKIAogY29uZmlnIERFQlVHX0dQSU8KQEAgLTI0Myw2ICsyNDQsMTUgQEAKIAkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IHRoZSBvbi1jaGlwIEdQSU8gbGluZXMgb24gdGhlIE9DVEVPTgogCSAgZmFtaWx5IG9mIFNPQ3MuCiAKK2NvbmZpZyBHUElPX09NQVAKKwlib29sICJUSSBPTUFQIEdQSU8gc3VwcG9ydCIgaWYgQ09NUElMRV9URVNUICYmICFBUkNIX09NQVAyUExVUworCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAKKwlkZXBlbmRzIG9uIEFSTQorCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBlbmFibGUgR1BJTyBzdXBwb3J0IGZvciBUSSBPTUFQIFNvQ3MuCisKIGNvbmZpZyBHUElPX1BMMDYxCiAJYm9vbCAiUHJpbWVDZWxsIFBMMDYxIEdQSU8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBCkBAIC0yNTksNyArMjY5LDcgQEAKIAogY29uZmlnIEdQSU9fUkNBUgogCXRyaXN0YXRlICJSZW5lc2FzIFItQ2FyIEdQSU8iCi0JZGVwZW5kcyBvbiBBUk0KKwlkZXBlbmRzIG9uIEFSTSAmJiAoQVJDSF9TSE1PQklMRSB8fCBDT01QSUxFX1RFU1QpCiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgR1BJTyBvbiBSZW5lc2FzIFItQ2FyIFNvQ3MuCiAKQEAgLTUxMCw2ICs1MjAsNyBAQAogY29uZmlnIEdQSU9fUENBOTUzWF9JUlEKIAlib29sICJJbnRlcnJ1cHQgY29udHJvbGxlciBzdXBwb3J0IGZvciBQQ0E5NTN4IgogCWRlcGVuZHMgb24gR1BJT19QQ0E5NTNYPXkKKwlzZWxlY3QgR1BJT0xJQl9JUlFDSElQCiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIGVuYWJsZSB0aGUgcGNhOTUzeCB0byBiZSB1c2VkIGFzIGFuIGludGVycnVwdAogCSAgY29udHJvbGxlci4gSXQgcmVxdWlyZXMgdGhlIGRyaXZlciB0byBiZSBidWlsdCBpbiB0aGUga2VybmVsLgpAQCAtNTc5LDYgKzU5MCw3IEBACiBjb25maWcgR1BJT19UQzM1ODlYCiAJYm9vbCAiVEMzNTg5WCBHUElPcyIKIAlkZXBlbmRzIG9uIE1GRF9UQzM1ODlYCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgR1BJT3MgZm91bmQgb24gdGhlIFRDMzU4OVgKIAkgIEkvTyBFeHBhbmRlci4KQEAgLTY5OSwxMyArNzExLDEzIEBACiBjb25maWcgR1BJT19JTlRFTF9NSUQKIAlib29sICJJbnRlbCBNaWQgR1BJTyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIFg4NgotCXNlbGVjdCBJUlFfRE9NQUlOCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCBJbnRlbCBNaWQgR1BJTy4KIAogY29uZmlnIEdQSU9fUENICiAJdHJpc3RhdGUgIkludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uZHVjdG9yIElPSChNTDcyMjMvTUw3ODMxKSBHUElPIgotCWRlcGVuZHMgb24gUENJICYmIFg4NgorCWRlcGVuZHMgb24gUENJICYmIChYODZfMzIgfHwgQ09NUElMRV9URVNUKQogCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSChQbGF0Zm9ybSBjb250cm9sbGVyIEh1YikgR1BJTyBvZiBJbnRlbCBUb3BjbGlmZgpAQCAtNzM5LDcgKzc1MSw3IEBACiAKIGNvbmZpZyBHUElPX1RJTUJFUkRBTEUKIAlib29sICJTdXBwb3J0IGZvciB0aW1iZXJkYWxlIEdQSU8gSVAiCi0JZGVwZW5kcyBvbiBNRkRfVElNQkVSREFMRSAmJiBIQVNfSU9NRU0KKwlkZXBlbmRzIG9uIE1GRF9USU1CRVJEQUxFCiAJLS0taGVscC0tLQogCUFkZCBzdXBwb3J0IGZvciB0aGUgR1BJTyBJUCBpbiB0aGUgdGltYmVyZGFsZSBGUEdBLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggNjMwOWFmZi4uZDEwZjZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtNTgsNyArNTgsNyBAQAogb2JqLSQoQ09ORklHX0dQSU9fTVhDKQkJKz0gZ3Bpby1teGMubwogb2JqLSQoQ09ORklHX0dQSU9fTVhTKQkJKz0gZ3Bpby1teHMubwogb2JqLSQoQ09ORklHX0dQSU9fT0NURU9OKQkrPSBncGlvLW9jdGVvbi5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQKQkJKz0gZ3Bpby1vbWFwLm8KK29iai0kKENPTkZJR19HUElPX09NQVApCQkrPSBncGlvLW9tYXAubwogb2JqLSQoQ09ORklHX0dQSU9fUENBOTUzWCkJKz0gZ3Bpby1wY2E5NTN4Lm8KIG9iai0kKENPTkZJR19HUElPX1BDRjg1N1gpCSs9IGdwaW8tcGNmODU3eC5vCiBvYmotJChDT05GSUdfR1BJT19QQ0gpCQkrPSBncGlvLXBjaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZGV2cmVzLmMgYi9kcml2ZXJzL2dwaW8vZGV2cmVzLmMKaW5kZXggMzA3NDY0Zi4uNjU5NzhjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2RldnJlcy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9kZXZyZXMuYwpAQCAtNTIsNiArNTIsMjIgQEAKIEVYUE9SVF9TWU1CT0woZGV2bV9ncGlvZF9nZXQpOwogCiAvKioKKyAqIGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsIC0gUmVzb3VyY2UtbWFuYWdlZCBncGlvZF9nZXRfb3B0aW9uYWwoKQorICogQGRldjogR1BJTyBjb25zdW1lcgorICogQGNvbl9pZDogZnVuY3Rpb24gd2l0aGluIHRoZSBHUElPIGNvbnN1bWVyCisgKgorICogTWFuYWdlZCBncGlvZF9nZXRfb3B0aW9uYWwoKS4gR1BJTyBkZXNjcmlwdG9ycyByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24KKyAqIGFyZSBhdXRvbWF0aWNhbGx5IGRpc3Bvc2VkIG9uIGRyaXZlciBkZXRhY2guIFNlZSBncGlvZF9nZXRfb3B0aW9uYWwoKSBmb3IKKyAqIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGJlaGF2aW9yIGFuZCByZXR1cm4gdmFsdWVzLgorICovCitzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sgZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3sKKwlyZXR1cm4gZGV2bV9ncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwoZGV2LCBjb25faWQsIDApOworfQorRVhQT1JUX1NZTUJPTChkZXZtX2dwaW9kX2dldF9vcHRpb25hbCk7CisKKy8qKgogICogZGV2bV9ncGlvZF9nZXRfaW5kZXggLSBSZXNvdXJjZS1tYW5hZ2VkIGdwaW9kX2dldF9pbmRleCgpCiAgKiBAZGV2OglHUElPIGNvbnN1bWVyCiAgKiBAY29uX2lkOglmdW5jdGlvbiB3aXRoaW4gdGhlIEdQSU8gY29uc3VtZXIKQEAgLTg3LDYgKzEwMywzMyBAQAogRVhQT1JUX1NZTUJPTChkZXZtX2dwaW9kX2dldF9pbmRleCk7CiAKIC8qKgorICogZGV2bV9ncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwgLSBSZXNvdXJjZS1tYW5hZ2VkIGdwaW9kX2dldF9pbmRleF9vcHRpb25hbCgpCisgKiBAZGV2OiBHUElPIGNvbnN1bWVyCisgKiBAY29uX2lkOiBmdW5jdGlvbiB3aXRoaW4gdGhlIEdQSU8gY29uc3VtZXIKKyAqIEBpbmRleDogaW5kZXggb2YgdGhlIEdQSU8gdG8gb2J0YWluIGluIHRoZSBjb25zdW1lcgorICoKKyAqIE1hbmFnZWQgZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKCkuIEdQSU8gZGVzY3JpcHRvcnMgcmV0dXJuZWQgZnJvbSB0aGlzCisgKiBmdW5jdGlvbiBhcmUgYXV0b21hdGljYWxseSBkaXNwb3NlZCBvbiBkcml2ZXIgZGV0YWNoLiBTZWUKKyAqIGdwaW9kX2dldF9pbmRleF9vcHRpb25hbCgpIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBiZWhhdmlvciBhbmQKKyAqIHJldHVybiB2YWx1ZXMuCisgKi8KK3N0cnVjdCBncGlvX2Rlc2MgKl9fbXVzdF9jaGVjayBkZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkJICAgICBjb25zdCBjaGFyICpjb25faWQsCisJCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqZGVzYzsKKworCWRlc2MgPSBkZXZtX2dwaW9kX2dldF9pbmRleChkZXYsIGNvbl9pZCwgaW5kZXgpOworCWlmIChJU19FUlIoZGVzYykpIHsKKwkJaWYgKFBUUl9FUlIoZGVzYykgPT0gLUVOT0VOVCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkZXNjOworfQorRVhQT1JUX1NZTUJPTChkZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbCk7CisKKy8qKgogICogZGV2bV9ncGlvZF9wdXQgLSBSZXNvdXJjZS1tYW5hZ2VkIGdwaW9kX3B1dCgpCiAgKiBAZGVzYzoJR1BJTyBkZXNjcmlwdG9yIHRvIGRpc3Bvc2Ugb2YKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1hZHA1NTIwLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1hZHA1NTIwLmMKaW5kZXggNjEzMjY1OS4uZjFhZGU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tYWRwNTUyMC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWFkcDU1MjAuYwpAQCAtMTA2LDEwICsxMDYsOCBAQAogCX0KIAogCWRldiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iKTsKKwlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWRldi0+bWFzdGVyID0gcGRldi0+ZGV2LnBhcmVudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tYWRwNTU4OC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tYWRwNTU4OC5jCmluZGV4IGQ5NzQwMjAuLmVmMTliYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWFkcDU1ODguYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1hZHA1NTg4LmMKQEAgLTM3OSwxMCArMzc5LDggQEAKIAl9CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIG1lbW9yeVxuIik7CisJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlkZXYtPmNsaWVudCA9IGNsaWVudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tYnQ4eHguYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWJ0OHh4LmMKaW5kZXggZWNiM2NhMmQuLjY1NTcxNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tYnQ4eHguYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJc3RydWN0IGJ0OHh4Z3BpbyAqYmc7CiAJaW50IGVycjsKIAotCWJnID0ga3phbGxvYyhzaXplb2YoKmJnKSwgR0ZQX0tFUk5FTCk7CisJYmcgPSBkZXZtX2t6YWxsb2MoJmRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGJ0OHh4Z3BpbyksIEdGUF9LRVJORUwpOwogCWlmICghYmcpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xODgsOSArMTg4LDkgQEAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidDh4eGdwaW86IENhbid0IGVuYWJsZSBkZXZpY2UuXG4iKTsKLQkJZ290byBlcnJfZnJlZWJnOworCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZkZXYtPmRldiwgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksCiAJCQkJcGNpX3Jlc291cmNlX2xlbihkZXYsIDApLAogCQkJCSJidDh4eGdwaW8iKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJidDh4eGdwaW86IENhbid0IHJlcXVlc3QgaW9tZW0gKDB4JWxseCkuXG4iLApAQCAtMjAxLDExICsyMDEsMTEgQEAKIAlwY2lfc2V0X21hc3RlcihkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGJnKTsKIAotCWJnLT5tbWlvID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwgMHgxMDAwKTsKKwliZy0+bW1pbyA9IGRldm1faW9yZW1hcCgmZGV2LT5kZXYsIHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLCAweDEwMDApOwogCWlmICghYmctPm1taW8pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidDh4eGdwaW86IGlvcmVtYXAoKSBmYWlsZWRcbiIpOwogCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9yZWxlYXNlX21lbTsKKwkJZ290byBlcnJfZGlzYWJsZTsKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTIyMCwxOCArMjIwLDEzIEBACiAJZXJyID0gZ3Bpb2NoaXBfYWRkKCZiZy0+Z3Bpbyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgImJ0OHh4Z3BpbzogRmFpbGVkIHRvIHJlZ2lzdGVyIEdQSU9zXG4iKTsKLQkJZ290byBlcnJfcmVsZWFzZV9tZW07CisJCWdvdG8gZXJyX2Rpc2FibGU7CiAJfQogCiAJcmV0dXJuIDA7CiAKLWVycl9yZWxlYXNlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksCi0JCQkgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogZXJyX2Rpc2FibGU6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci1lcnJfZnJlZWJnOgotCWtmcmVlKGJnKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNTAsOCArMjQ1LDYgQEAKIAlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCi0Ja2ZyZWUoYmcpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1kYXZpbmNpLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kYXZpbmNpLmMKaW5kZXggMzM5ZjlkYS4uOWYwNjgyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWRhdmluY2kuYwpAQCAtMjMwLDEwICsyMzAsOCBAQAogCWNoaXBzID0gZGV2bV9remFsbG9jKGRldiwKIAkJCSAgICAgbmdwaW8gKiBzaXplb2Yoc3RydWN0IGRhdmluY2lfZ3Bpb19jb250cm9sbGVyKSwKIAkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwcykgewotCQlkZXZfZXJyKGRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJaWYgKCFjaGlwcykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMKaW5kZXggZWQ1NzExZi4uY2QzYjgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jCkBAIC0xOTgsNiArMTk4LDggQEAKIAkJYnJlYWs7CiAJfQogCisJaXJxX3NldHVwX2FsdF9jaGlwKGQsIHR5cGUpOworCiAJd3JpdGVsKGxldmVsLCBncGlvLT5yZWdzICsgR1BJT19JTlRUWVBFX0xFVkVMKTsKIAl3cml0ZWwocG9sYXJpdHksIGdwaW8tPnJlZ3MgKyBHUElPX0lOVF9QT0xBUklUWSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmdjLT5sb2NrLCBmbGFncyk7CkBAIC0yMTMsNyArMjE1LDcgQEAKIAlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYwkqaXJxX2djOwogCXVuc2lnbmVkIGludCBod2lycSwgbmdwaW8gPSBnYy0+bmdwaW87CiAJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0OwotCWludCBlcnIsIGlycTsKKwlpbnQgZXJyLCBpcnEsIGk7CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKIAlpZiAoIWlycSkgewpAQCAtMjI3LDcgKzIyOSw3IEBACiAJaWYgKCFncGlvLT5kb21haW4pCiAJCXJldHVybjsKIAotCWVyciA9IGlycV9hbGxvY19kb21haW5fZ2VuZXJpY19jaGlwcyhncGlvLT5kb21haW4sIG5ncGlvLCAxLAorCWVyciA9IGlycV9hbGxvY19kb21haW5fZ2VuZXJpY19jaGlwcyhncGlvLT5kb21haW4sIG5ncGlvLCAyLAogCQkJCQkgICAgICJncGlvLWR3YXBiIiwgaGFuZGxlX2xldmVsX2lycSwKIAkJCQkJICAgICBJUlFfTk9SRVFVRVNULCAwLAogCQkJCQkgICAgIElSUV9HQ19JTklUX05FU1RFRF9MT0NLKTsKQEAgLTI0OCwyMCArMjUwLDI0IEBACiAJaXJxX2djLT5yZWdfYmFzZSA9IGdwaW8tPnJlZ3M7CiAJaXJxX2djLT5wcml2YXRlID0gZ3BpbzsKIAotCWN0ID0gaXJxX2djLT5jaGlwX3R5cGVzOwotCWN0LT5jaGlwLmlycV9hY2sgPSBpcnFfZ2NfYWNrX3NldF9iaXQ7Ci0JY3QtPmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OwotCWN0LT5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OwotCWN0LT5jaGlwLmlycV9zZXRfdHlwZSA9IGR3YXBiX2lycV9zZXRfdHlwZTsKLQljdC0+Y2hpcC5pcnFfZW5hYmxlID0gZHdhcGJfaXJxX2VuYWJsZTsKLQljdC0+Y2hpcC5pcnFfZGlzYWJsZSA9IGR3YXBiX2lycV9kaXNhYmxlOwotCWN0LT5jaGlwLmlycV9yZXF1ZXN0X3Jlc291cmNlcyA9IGR3YXBiX2lycV9yZXFyZXM7Ci0JY3QtPmNoaXAuaXJxX3JlbGVhc2VfcmVzb3VyY2VzID0gZHdhcGJfaXJxX3JlbHJlczsKLQljdC0+cmVncy5hY2sgPSBHUElPX1BPUlRBX0VPSTsKLQljdC0+cmVncy5tYXNrID0gR1BJT19JTlRNQVNLOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJY3QgPSAmaXJxX2djLT5jaGlwX3R5cGVzW2ldOworCQljdC0+Y2hpcC5pcnFfYWNrID0gaXJxX2djX2Fja19zZXRfYml0OworCQljdC0+Y2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CisJCWN0LT5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OworCQljdC0+Y2hpcC5pcnFfc2V0X3R5cGUgPSBkd2FwYl9pcnFfc2V0X3R5cGU7CisJCWN0LT5jaGlwLmlycV9lbmFibGUgPSBkd2FwYl9pcnFfZW5hYmxlOworCQljdC0+Y2hpcC5pcnFfZGlzYWJsZSA9IGR3YXBiX2lycV9kaXNhYmxlOworCQljdC0+Y2hpcC5pcnFfcmVxdWVzdF9yZXNvdXJjZXMgPSBkd2FwYl9pcnFfcmVxcmVzOworCQljdC0+Y2hpcC5pcnFfcmVsZWFzZV9yZXNvdXJjZXMgPSBkd2FwYl9pcnFfcmVscmVzOworCQljdC0+cmVncy5hY2sgPSBHUElPX1BPUlRBX0VPSTsKKwkJY3QtPnJlZ3MubWFzayA9IEdQSU9fSU5UTUFTSzsKKwkJY3QtPnR5cGUgPSBJUlFfVFlQRV9MRVZFTF9NQVNLOworCX0KIAotCWlycV9zZXR1cF9nZW5lcmljX2NoaXAoaXJxX2djLCBJUlFfTVNLKHBvcnQtPmJnYy5nYy5uZ3BpbyksCi0JCQlJUlFfR0NfSU5JVF9ORVNURURfTE9DSywgSVJRX05PUkVRVUVTVCwgMCk7CisJaXJxX2djLT5jaGlwX3R5cGVzWzBdLnR5cGUgPSBJUlFfVFlQRV9MRVZFTF9NQVNLOworCWlycV9nYy0+Y2hpcF90eXBlc1sxXS50eXBlID0gSVJRX1RZUEVfRURHRV9CT1RIOworCWlycV9nYy0+Y2hpcF90eXBlc1sxXS5oYW5kbGVyID0gaGFuZGxlX2VkZ2VfaXJxOwogCiAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoaXJxLCBkd2FwYl9pcnFfaGFuZGxlcik7CiAJaXJxX3NldF9oYW5kbGVyX2RhdGEoaXJxLCBncGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWVtLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1lbS5jCmluZGV4IDg3NjViZDYuLmNkZTM2MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWVtLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZW0uYwpAQCAtMjEyLDcgKzIxMiw3IEBACiB7CiAJLyogdXBwZXIgMTYgYml0cyBjb250YWlucyBtYXNrIGFuZCBsb3dlciAxNiBhY3R1YWwgdmFsdWUgKi8KIAllbV9naW9fd3JpdGUoZ3Bpb190b19wcml2KGNoaXApLCByZWcsCi0JCSAgICAgKDEgPDwgKHNoaWZ0ICsgMTYpKSB8ICh2YWx1ZSA8PCBzaGlmdCkpOworCQkgICAgIChCSVQoc2hpZnQgKyAxNikpIHwgKHZhbHVlIDw8IHNoaWZ0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVtX2dpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCkBAIC0yODQsNyArMjg0LDYgQEAKIAogCXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1lcDkzeHguYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWVwOTN4eC5jCmluZGV4IDgwODI5ZjMuLmRjYzJiYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWVwOTN4eC5jCkBAIC0zNDQsMzcgKzM0NCwyNCBAQAogewogCXN0cnVjdCBlcDkzeHhfZ3BpbyAqZXA5M3h4X2dwaW87CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jdm9pZCBfX2lvbWVtICptbWlvOwogCWludCBpOwotCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAotCWVwOTN4eF9ncGlvID0ga3phbGxvYyhzaXplb2YoKmVwOTN4eF9ncGlvKSwgR0ZQX0tFUk5FTCk7CisJZXA5M3h4X2dwaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9ncGlvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlcDkzeHhfZ3BpbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVzKSB7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gZXhpdF9mcmVlOwotCX0KLQotCW1taW8gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JaWYgKCFtbWlvKSB7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZ290byBleGl0X3JlbGVhc2U7Ci0JfQotCWVwOTN4eF9ncGlvLT5tbWlvX2Jhc2UgPSBtbWlvOworCWVwOTN4eF9ncGlvLT5tbWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZXA5M3h4X2dwaW8tPm1taW9fYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGVwOTN4eF9ncGlvLT5tbWlvX2Jhc2UpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspIHsKIAkJc3RydWN0IGJncGlvX2NoaXAgKmJnYyA9ICZlcDkzeHhfZ3Bpby0+YmdjW2ldOwogCQlzdHJ1Y3QgZXA5M3h4X2dwaW9fYmFuayAqYmFuayA9ICZlcDkzeHhfZ3Bpb19iYW5rc1tpXTsKIAotCQlpZiAoZXA5M3h4X2dwaW9fYWRkX2JhbmsoYmdjLCAmcGRldi0+ZGV2LCBtbWlvLCBiYW5rKSkKKwkJaWYgKGVwOTN4eF9ncGlvX2FkZF9iYW5rKGJnYywgJnBkZXYtPmRldiwKKwkJCQkJIGVwOTN4eF9ncGlvLT5tbWlvX2Jhc2UsIGJhbmspKQogCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhZGQgZ3BpbyBiYW5rICVzXG4iLAogCQkJCWJhbmstPmxhYmVsKTsKIAl9CkBAIC0zODIsMTMgKzM2OSw2IEBACiAJZXA5M3h4X2dwaW9faW5pdF9pcnEoKTsKIAogCXJldHVybiAwOwotCi1leGl0X3JlbGVhc2U6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci1leGl0X2ZyZWU6Ci0Ja2ZyZWUoZXA5M3h4X2dwaW8pOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyBmYWlsZWQgd2l0aCBlcnJubyAlZFxuIiwgX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXA5M3h4X2dwaW9fZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tZ2UuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWdlLmMKaW5kZXggN2I5NWE0YS4uMTIzN2E3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ2UuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1nZS5jCkBAIC0xOCwxNSArMTgsOSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2RlZmluZSBHRUZfR1BJT19ESVJFQ1QJCTB4MDAKQEAgLTM5LDI4ICszMywyNiBAQAogI2RlZmluZSBHRUZfR1BJT19PVkVSUlVOCTB4MUMKICNkZWZpbmUgR0VGX0dQSU9fTU9ERQkJMHgyMAogCi1zdGF0aWMgdm9pZCBfZ2VmX2dwaW9fc2V0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBnZWZfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1jaGlwID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGNoaXApOwogCXVuc2lnbmVkIGludCBkYXRhOwogCi0JZGF0YSA9IGlvcmVhZDMyYmUocmVnKTsKLQkvKiB2YWx1ZTogMD1sb3c7IDE9aGlnaCAqLwotCWlmICh2YWx1ZSAmIDB4MSkKLQkJZGF0YSA9IGRhdGEgfCAoMHgxIDw8IG9mZnNldCk7CisJZGF0YSA9IGlvcmVhZDMyYmUobW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fT1VUKTsKKwlpZiAodmFsdWUpCisJCWRhdGEgPSBkYXRhIHwgQklUKG9mZnNldCk7CiAJZWxzZQotCQlkYXRhID0gZGF0YSAmIH4oMHgxIDw8IG9mZnNldCk7Ci0KLQlpb3dyaXRlMzJiZShkYXRhLCByZWcpOworCQlkYXRhID0gZGF0YSAmIH5CSVQob2Zmc2V0KTsKKwlpb3dyaXRlMzJiZShkYXRhLCBtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19PVVQpOwogfQogCi0KIHN0YXRpYyBpbnQgZ2VmX2dwaW9fZGlyX2luKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbWNoaXAgPSB0b19vZl9tbV9ncGlvX2NoaXAoY2hpcCk7CiAKIAlkYXRhID0gaW9yZWFkMzJiZShtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19ESVJFQ1QpOwotCWRhdGEgPSBkYXRhIHwgKDB4MSA8PCBvZmZzZXQpOworCWRhdGEgPSBkYXRhIHwgQklUKG9mZnNldCk7CiAJaW93cml0ZTMyYmUoZGF0YSwgbW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fRElSRUNUKTsKIAogCXJldHVybiAwOwpAQCAtNzEsMTEgKzYzLDExIEBACiAJdW5zaWduZWQgaW50IGRhdGE7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1jaGlwID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGNoaXApOwogCi0JLyogU2V0IGRpcmVjdGlvbiBiZWZvcmUgc3dpdGNoaW5nIHRvIGlucHV0ICovCi0JX2dlZl9ncGlvX3NldChtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19PVVQsIG9mZnNldCwgdmFsdWUpOworCS8qIFNldCB2YWx1ZSBiZWZvcmUgc3dpdGNoaW5nIHRvIG91dHB1dCAqLworCWdlZl9ncGlvX3NldChtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19PVVQsIG9mZnNldCwgdmFsdWUpOwogCiAJZGF0YSA9IGlvcmVhZDMyYmUobW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fRElSRUNUKTsKLQlkYXRhID0gZGF0YSAmIH4oMHgxIDw8IG9mZnNldCk7CisJZGF0YSA9IGRhdGEgJiB+QklUKG9mZnNldCk7CiAJaW93cml0ZTMyYmUoZGF0YSwgbW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fRElSRUNUKTsKIAogCXJldHVybiAwOwpAQCAtODMsMTE2ICs3NSw1NiBAQAogCiBzdGF0aWMgaW50IGdlZl9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JdW5zaWduZWQgaW50IGRhdGE7Ci0JaW50IHN0YXRlID0gMDsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbWNoaXAgPSB0b19vZl9tbV9ncGlvX2NoaXAoY2hpcCk7CiAKLQlkYXRhID0gaW9yZWFkMzJiZShtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19JTik7Ci0Jc3RhdGUgPSAoaW50KSgoZGF0YSA+PiBvZmZzZXQpICYgMHgxKTsKLQotCXJldHVybiBzdGF0ZTsKKwlyZXR1cm4gISEoaW9yZWFkMzJiZShtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19JTikgJiBCSVQob2Zmc2V0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlZl9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbWNoaXAgPSB0b19vZl9tbV9ncGlvX2NoaXAoY2hpcCk7Ci0KLQlfZ2VmX2dwaW9fc2V0KG1tY2hpcC0+cmVncyArIEdFRl9HUElPX09VVCwgb2Zmc2V0LCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGdlZl9ncGlvX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCWludCByZXR2YWw7Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqZ2VmX2dwaW9fY2hpcDsKLQotCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImdlZixzYmM2MTAtZ3BpbyIpIHsKLQotCQlwcl9kZWJ1ZygiJXM6IEluaXRpYWxpc2luZyBHRUYgR1BJT1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0KLQkJLyogQWxsb2NhdGUgY2hpcCBzdHJ1Y3R1cmUgKi8KLQkJZ2VmX2dwaW9fY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpnZWZfZ3Bpb19jaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZ2VmX2dwaW9fY2hpcCkgewotCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZVxuIiwKLQkJCQlucC0+ZnVsbF9uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KLQkJZ2VmX2dwaW9fY2hpcC0+Z2Mub2ZfZ3Bpb19uX2NlbGxzID0gMjsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MubmdwaW8gPSAxOTsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOwotCQlnZWZfZ3Bpb19jaGlwLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwotCQlnZWZfZ3Bpb19jaGlwLT5nYy5zZXQgPSBnZWZfZ3Bpb19zZXQ7Ci0KLQkJLyogVGhpcyBmdW5jdGlvbiBhZGRzIGEgbWVtb3J5IG1hcHBlZCBHUElPIGNoaXAgKi8KLQkJcmV0dmFsID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBnZWZfZ3Bpb19jaGlwKTsKLQkJaWYgKHJldHZhbCkgewotCQkJa2ZyZWUoZ2VmX2dwaW9fY2hpcCk7Ci0JCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gYWRkIEdQSU9cbiIsIG5wLT5mdWxsX25hbWUpOwotCQl9Ci0JfQotCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZ2VmLHNiYzMxMC1ncGlvIikgewotCi0JCXByX2RlYnVnKCIlczogSW5pdGlhbGlzaW5nIEdFRiBHUElPXG4iLCBucC0+ZnVsbF9uYW1lKTsKLQotCQkvKiBBbGxvY2F0ZSBjaGlwIHN0cnVjdHVyZSAqLwotCQlnZWZfZ3Bpb19jaGlwID0ga3phbGxvYyhzaXplb2YoKmdlZl9ncGlvX2NoaXApLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFnZWZfZ3Bpb19jaGlwKSB7Ci0JCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgc3RydWN0dXJlXG4iLAotCQkJCW5wLT5mdWxsX25hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBTZXR1cCBwb2ludGVycyB0byBjaGlwIGZ1bmN0aW9ucyAqLwotCQlnZWZfZ3Bpb19jaGlwLT5nYy5vZl9ncGlvX25fY2VsbHMgPSAyOwotCQlnZWZfZ3Bpb19jaGlwLT5nYy5uZ3BpbyA9IDY7Ci0JCWdlZl9ncGlvX2NoaXAtPmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IGdlZl9ncGlvX2Rpcl9vdXQ7Ci0JCWdlZl9ncGlvX2NoaXAtPmdjLmdldCA9IGdlZl9ncGlvX2dldDsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2Muc2V0ID0gZ2VmX2dwaW9fc2V0OwotCi0JCS8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhIG1lbW9yeSBtYXBwZWQgR1BJTyBjaGlwICovCi0JCXJldHZhbCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgZ2VmX2dwaW9fY2hpcCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCWtmcmVlKGdlZl9ncGlvX2NoaXApOwotCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFkZCBHUElPXG4iLCBucC0+ZnVsbF9uYW1lKTsKLQkJfQotCX0KLQotCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImdlLGltcDNhLWdwaW8iKSB7Ci0KLQkJcHJfZGVidWcoIiVzOiBJbml0aWFsaXNpbmcgR0UgR1BJT1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0KLQkJLyogQWxsb2NhdGUgY2hpcCBzdHJ1Y3R1cmUgKi8KLQkJZ2VmX2dwaW9fY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpnZWZfZ3Bpb19jaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZ2VmX2dwaW9fY2hpcCkgewotCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZVxuIiwKLQkJCQlucC0+ZnVsbF9uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KLQkJZ2VmX2dwaW9fY2hpcC0+Z2Mub2ZfZ3Bpb19uX2NlbGxzID0gMjsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MubmdwaW8gPSAxNjsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOwotCQlnZWZfZ3Bpb19jaGlwLT5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKLQkJZ2VmX2dwaW9fY2hpcC0+Z2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwotCQlnZWZfZ3Bpb19jaGlwLT5nYy5zZXQgPSBnZWZfZ3Bpb19zZXQ7Ci0KLQkJLyogVGhpcyBmdW5jdGlvbiBhZGRzIGEgbWVtb3J5IG1hcHBlZCBHUElPIGNoaXAgKi8KLQkJcmV0dmFsID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBnZWZfZ3Bpb19jaGlwKTsKLQkJaWYgKHJldHZhbCkgewotCQkJa2ZyZWUoZ2VmX2dwaW9fY2hpcCk7Ci0JCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gYWRkIEdQSU9cbiIsIG5wLT5mdWxsX25hbWUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBnZWZfZ3Bpb19pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlCT0gImdlZixzYmM2MTAtZ3BpbyIsCisJCS5kYXRhCQk9ICh2b2lkICopMTksCisJfSwgeworCQkuY29tcGF0aWJsZQk9ICJnZWYsc2JjMzEwLWdwaW8iLAorCQkuZGF0YQkJPSAodm9pZCAqKTYsCisJfSwgeworCQkuY29tcGF0aWJsZQk9ICJnZSxpbXAzYS1ncGlvIiwKKwkJLmRhdGEJCT0gKHZvaWQgKikxNiwKKwl9LAorCXsgfQogfTsKLWFyY2hfaW5pdGNhbGwoZ2VmX2dwaW9faW5pdCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBnZWZfZ3Bpb19pZHMpOworCitzdGF0aWMgaW50IF9faW5pdCBnZWZfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KKwkJb2ZfbWF0Y2hfZGV2aWNlKGdlZl9ncGlvX2lkcywgJnBkZXYtPmRldik7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1jaGlwOworCisJbW1jaGlwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbW1jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtbWNoaXApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KKwltbWNoaXAtPmdjLm5ncGlvID0gKHUxNikodWludHB0cl90KW9mX2lkLT5kYXRhOworCW1tY2hpcC0+Z2Mub2ZfZ3Bpb19uX2NlbGxzID0gMjsKKwltbWNoaXAtPmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKKwltbWNoaXAtPmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBnZWZfZ3Bpb19kaXJfb3V0OworCW1tY2hpcC0+Z2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OworCW1tY2hpcC0+Z2Muc2V0ID0gZ2VmX2dwaW9fc2V0OworCisJLyogVGhpcyBmdW5jdGlvbiBhZGRzIGEgbWVtb3J5IG1hcHBlZCBHUElPIGNoaXAgKi8KKwlyZXR1cm4gb2ZfbW1fZ3Bpb2NoaXBfYWRkKHBkZXYtPmRldi5vZl9ub2RlLCBtbWNoaXApOworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2VmX2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJnZWYtZ3BpbyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gZ2VmX2dwaW9faWRzLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcl9wcm9iZShnZWZfZ3Bpb19kcml2ZXIsIGdlZl9ncGlvX3Byb2JlKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJHRSBJL08gRlBHQSBHUElPIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMKaW5kZXggYjVkZmY5ZS4uZmVhOGM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWdlbmVyaWMuYwpAQCAtMzg4LDYgKzM4OCwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3Bpb19waW4pCit7CisJaWYgKGdwaW9fcGluIDwgY2hpcC0+bmdwaW8pCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIGludCBiZ3Bpb19yZW1vdmUoc3RydWN0IGJncGlvX2NoaXAgKmJnYykKIHsKIAlyZXR1cm4gZ3Bpb2NoaXBfcmVtb3ZlKCZiZ2MtPmdjKTsKQEAgLTQxMyw2ICs0MjEsNyBAQAogCWJnYy0+Z2MubGFiZWwgPSBkZXZfbmFtZShkZXYpOwogCWJnYy0+Z2MuYmFzZSA9IC0xOwogCWJnYy0+Z2MubmdwaW8gPSBiZ2MtPmJpdHM7CisJYmdjLT5nYy5yZXF1ZXN0ID0gYmdwaW9fcmVxdWVzdDsKIAogCXJldCA9IGJncGlvX3NldHVwX2lvKGJnYywgZGF0LCBzZXQsIGNscik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWdyZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKaW5kZXggODRkMjQ3OC4uM2MzZjUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdyZ3Bpb19tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ3JncGlvX21hdGNoW10gPSB7CiAJey5uYW1lID0gIkdBSVNMRVJfR1BJTyJ9LAogCXsubmFtZSA9ICIwMV8wMWEifSwKIAl7fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWphbnotdHRsLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1qYW56LXR0bC5jCmluZGV4IDJlY2QzYTAuLjQyODUyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWphbnotdHRsLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tamFuei10dGwuYwpAQCAtMTUyLDM0ICsxNTIsMjEgQEAKIAlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZXJyKGRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gb3V0X3JldHVybjsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQltb2QgPSBremFsbG9jKHNpemVvZigqbW9kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2QpIHsKLQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmV0dXJuOwotCX0KKwltb2QgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1vZCksIEdGUF9LRVJORUwpOworCWlmICghbW9kKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1vZCk7CiAJc3Bpbl9sb2NrX2luaXQoJm1vZC0+bG9jayk7CiAKIAkvKiBnZXQgYWNjZXNzIHRvIHRoZSBNT0RVTGJ1cyByZWdpc3RlcnMgZm9yIHRoaXMgbW9kdWxlICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKGRldiwgIk1PRFVMYnVzIHJlZ2lzdGVycyBub3QgZm91bmRcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dF9mcmVlX21vZDsKLQl9Ci0KLQltb2QtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JaWYgKCFtb2QtPnJlZ3MpIHsKLQkJZGV2X2VycihkZXYsICJNT0RVTGJ1cyByZWdpc3RlcnMgbm90IGlvcmVtYXBcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX21vZDsKLQl9CisJbW9kLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1vZC0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKG1vZC0+cmVncyk7CiAKIAl0dGxfc2V0dXBfZGV2aWNlKG1vZCk7CiAKQEAgLTE5OCwxNyArMTg1LDEwIEBACiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKGdwaW8pOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gYWRkIEdQSU8gY2hpcFxuIik7Ci0JCWdvdG8gb3V0X2lvdW5tYXBfcmVnczsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKLQotb3V0X2lvdW5tYXBfcmVnczoKLQlpb3VubWFwKG1vZC0+cmVncyk7Ci1vdXRfZnJlZV9tb2Q6Ci0Ja2ZyZWUobW9kKTsKLW91dF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0dGxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yMjMsOCArMjAzLDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpb3VubWFwKG1vZC0+cmVncyk7Ci0Ja2ZyZWUobW9kKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8ta2VtcGxkLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1rZW1wbGQuYwppbmRleCBjNmQ4ODE3Li4xZTVlNTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1rZW1wbGQuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1rZW1wbGQuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC9rZW1wbGQuaD4KIAogI2RlZmluZSBLRU1QTERfR1BJT19NQVhfTlVNCQkxNgotI2RlZmluZSBLRU1QTERfR1BJT19NQVNLKHgpCQkoMSA8PCAoKHgpICUgOCkpCisjZGVmaW5lIEtFTVBMRF9HUElPX01BU0soeCkJCShCSVQoKHgpICUgOCkpCiAjZGVmaW5lIEtFTVBMRF9HUElPX0RJUl9OVU0oeCkJCSgweDQwICsgKHgpIC8gOCkKICNkZWZpbmUgS0VNUExEX0dQSU9fTFZMX05VTSh4KQkJKDB4NDIgKyAoeCkgLyA4KQogI2RlZmluZSBLRU1QTERfR1BJT19FVlRfTFZMX0VER0UJMHg0NgpAQCAtMjE2LDQgKzIxNiw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIktFTSBQTEQgR1BJTyBEcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQnJ1bm5lciA8bWljaGFlbC5icnVubmVyQGtvbnRyb24uY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpncGlvLWtlbXBsZCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTprZW1wbGQtZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tbHlueHBvaW50LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1seW54cG9pbnQuYwppbmRleCA5YTgyYTkwLi4yYmVhODliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1seW54cG9pbnQuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1seW54cG9pbnQuYwpAQCAtMzc1LDEwICszNzUsOCBAQAogCWludCByZXQgPSAtRU5PREVWOwogCiAJbGcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGxwX2dwaW8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxnKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2FuJ3QgYWxsb2NhdGUgbHBfZ3BpbyBjaGlwIGRhdGFcbiIpOworCWlmICghbGcpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWxnLT5wZGV2ID0gcGRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tYXg3MzB4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tYXg3MzB4LmMKaW5kZXggODY3Mjc1NS4uMDgxNDU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tbWF4NzMweC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1heDczMHguYwpAQCAtMjM3LDEwICsyMzcsOSBAQAogCXRzLT53cml0ZShkZXYsIDB4MDQsIDB4MDApOwogCiAJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZ0cy0+Y2hpcCk7Ci0JaWYgKCFyZXQpIHsKKwlpZiAoIXJldCkKIAkJbXV0ZXhfZGVzdHJveSgmdHMtPmxvY2spOwotCQlrZnJlZSh0cyk7Ci0JfSBlbHNlCisJZWxzZQogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZW1vdmUgR1BJTyBjb250cm9sbGVyOiAlZFxuIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tY3AyM3MwOC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbWNwMjNzMDguYwppbmRleCAzZDUzZmQ2Li5mZTdjMGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1tY3AyM3MwOC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1jcDIzczA4LmMKQEAgLTcxNCw3ICs3MTQsNyBAQAogCiAjaWZkZWYgQ09ORklHX09GCiAjaWZkZWYgQ09ORklHX1NQSV9NQVNURVIKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1jcDIzczA4X3NwaV9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWNwMjNzMDhfc3BpX29mX21hdGNoW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJtaWNyb2NoaXAsbWNwMjNzMDgiLAogCQkuZGF0YSA9ICh2b2lkICopIE1DUF9UWVBFX1MwOCwKQEAgLTczOCw3ICs3MzgsNyBAQAogI2VuZGlmCiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JMkMpCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtY3AyM3MwOF9pMmNfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1jcDIzczA4X2kyY19vZl9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAibWljcm9jaGlwLG1jcDIzMDA4IiwKIAkJLmRhdGEgPSAodm9pZCAqKSBNQ1BfVFlQRV8wMDgsCkBAIC04NjcsNyArODY3LDcgQEAKIHsKIAlzdHJ1Y3QgbWNwMjNzMDhfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CiAJdW5zaWduZWQJCQlhZGRyOwotCXVuc2lnbmVkCQkJY2hpcHMgPSAwOworCWludAkJCQljaGlwcyA9IDA7CiAJc3RydWN0IG1jcDIzczA4X2RyaXZlcl9kYXRhCSpkYXRhOwogCWludAkJCQlzdGF0dXMsIHR5cGU7CiAJdW5zaWduZWQJCQliYXNlID0gLTEsCkBAIC04OTQsMTEgKzg5NCwxNCBAQAogCQkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIHNwaS1wcmVzZW50LW1hc2tcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KKwogCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgQVJSQVlfU0laRShwZGF0YS0+Y2hpcCk7IGFkZHIrKykgewotCQkJaWYgKChzcGlfcHJlc2VudF9tYXNrICYgKDEgPDwgYWRkcikpKQotCQkJCWNoaXBzKys7CiAJCQlwdWxsdXBzW2FkZHJdID0gMDsKKwkJCWlmIChzcGlfcHJlc2VudF9tYXNrICYgKDEgPDwgYWRkcikpCisJCQkJY2hpcHMrKzsKIAkJfQorCQlpZiAoIWNoaXBzKQorCQkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKIAkJdHlwZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhOwogCQlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnNwaS0+ZGV2KTsKQEAgLTkzNyw2ICs5NDAsMTAgQEAKIAkJaWYgKCEoc3BpX3ByZXNlbnRfbWFzayAmICgxIDw8IGFkZHIpKSkKIAkJCWNvbnRpbnVlOwogCQljaGlwcy0tOworCQlpZiAoY2hpcHMgPCAwKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgIkZBVEFMOiBpbnZhbGlkIG5lZ2F0aXZlIGNoaXAgaWRcbiIpOworCQkJZ290byBmYWlsOworCQl9CiAJCWRhdGEtPm1jcFthZGRyXSA9ICZkYXRhLT5jaGlwW2NoaXBzXTsKIAkJc3RhdHVzID0gbWNwMjNzMDhfcHJvYmVfb25lKGRhdGEtPm1jcFthZGRyXSwgJnNwaS0+ZGV2LCBzcGksCiAJCQkJCSAgICAweDQwIHwgKGFkZHIgPDwgMSksIHR5cGUsIGJhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tb3hhcnQuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1veGFydC5jCmluZGV4IGNjZDQ1NzAuLjQ2NjFlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW1veGFydC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1veGFydC5jCkBAIC0xMTMsMTAgKzExMyw4IEBACiAJaW50IHJldDsKIAogCW1nYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWdjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZ2MpIHsKLQkJZGV2X2VycihkZXYsICJjYW4ndCBhbGxvY2F0ZSBHUElPIGNoaXAgY29udGFpbmVyXG4iKTsKKwlpZiAoIW1nYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCW1nYy0+Z3BpbyA9IG1veGFydF90ZW1wbGF0ZV9jaGlwOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW12ZWJ1LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tdmVidS5jCmluZGV4IGQ0MjUwOTQuLjQxOGUzODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW12ZWJ1LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbXZlYnUuYwpAQCAtNTM1LDcgKzUzNSw3IEBACiAjZGVmaW5lIG12ZWJ1X2dwaW9fZGJnX3Nob3cgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG12ZWJ1X2dwaW9fb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG12ZWJ1X2dwaW9fb2ZfbWF0Y2hbXSA9IHsKIAl7CiAJCS5jb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZ3BpbyIsCiAJCS5kYXRhICAgICAgID0gKHZvaWQgKikgTVZFQlVfR1BJT19TT0NfVkFSSUFOVF9PUklPTiwKQEAgLTU3NCwxMCArNTc0LDggQEAKIAkJc29jX3ZhcmlhbnQgPSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX09SSU9OOwogCiAJbXZjaGlwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXZlYnVfZ3Bpb19jaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtdmNoaXApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisJaWYgKCFtdmNoaXApCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgIm5ncGlvcyIsICZuZ3Bpb3MpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1pc3NpbmcgbmdwaW9zIE9GIHByb3BlcnR5XG4iKTsKQEAgLTczOCw5ICs3MzYsNCBAQAogCX0sCiAJLnByb2JlCQk9IG12ZWJ1X2dwaW9fcHJvYmUsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9ncGlvX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdmVidV9ncGlvX2RyaXZlcik7Ci19Ci1wb3N0Y29yZV9pbml0Y2FsbChtdmVidV9ncGlvX2luaXQpOworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdmVidV9ncGlvX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKaW5kZXggMTliODg2Yy4uMDBmMjlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwpAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CiAKICNkZWZpbmUgT0ZGX01PREUJMQpAQCAtNTIsNyArNTIsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdTE2IGlycTsKLQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCXUzMiBub25fd2FrZXVwX2dwaW9zOwogCXUzMiBlbmFibGVkX25vbl93YWtldXBfZ3Bpb3M7CiAJc3RydWN0IGdwaW9fcmVncyBjb250ZXh0OwpAQCAtODQsMjIgKzgzLDIxIEBACiB9OwogCiAjZGVmaW5lIEdQSU9fSU5ERVgoYmFuaywgZ3BpbykgKGdwaW8gJSBiYW5rLT53aWR0aCkKLSNkZWZpbmUgR1BJT19CSVQoYmFuaywgZ3BpbykgKDEgPDwgR1BJT19JTkRFWChiYW5rLCBncGlvKSkKKyNkZWZpbmUgR1BJT19CSVQoYmFuaywgZ3BpbykgKEJJVChHUElPX0lOREVYKGJhbmssIGdwaW8pKSkKICNkZWZpbmUgR1BJT19NT0RfQ1RSTF9CSVQJQklUKDApCiAKICNkZWZpbmUgQkFOS19VU0VEKGJhbmspIChiYW5rLT5tb2RfdXNhZ2UgfHwgYmFuay0+aXJxX3VzYWdlKQotI2RlZmluZSBMSU5FX1VTRUQobGluZSwgb2Zmc2V0KSAobGluZSAmICgxIDw8IG9mZnNldCkpCisjZGVmaW5lIExJTkVfVVNFRChsaW5lLCBvZmZzZXQpIChsaW5lICYgKEJJVChvZmZzZXQpKSkKIAogc3RhdGljIGludCBpcnFfdG9fZ3BpbyhzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCB1bnNpZ25lZCBpbnQgZ3Bpb19pcnEpCiB7CiAJcmV0dXJuIGJhbmstPmNoaXAuYmFzZSArIGdwaW9faXJxOwogfQogCi1zdGF0aWMgaW50IG9tYXBfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19iYW5rICpfaXJxX2RhdGFfZ2V0X2Jhbmsoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGdwaW9fYmFuaywgY2hpcCk7Ci0KLQlyZXR1cm4gaXJxX2ZpbmRfbWFwcGluZyhiYW5rLT5kb21haW4sIG9mZnNldCk7CisJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGdwaW9fYmFuaywgY2hpcCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBpc19pbnB1dCkKQEAgLTExMCw5ICsxMDgsOSBAQAogCXJlZyArPSBiYW5rLT5yZWdzLT5kaXJlY3Rpb247CiAJbCA9IHJlYWRsX3JlbGF4ZWQocmVnKTsKIAlpZiAoaXNfaW5wdXQpCi0JCWwgfD0gMSA8PCBncGlvOworCQlsIHw9IEJJVChncGlvKTsKIAllbHNlCi0JCWwgJj0gfigxIDw8IGdwaW8pOworCQlsICY9IH4oQklUKGdwaW8pKTsKIAl3cml0ZWxfcmVsYXhlZChsLCByZWcpOwogCWJhbmstPmNvbnRleHQub2UgPSBsOwogfQpAQCAtMTU1LDE0ICsxNTMsMTQgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2UgKyBiYW5rLT5yZWdzLT5kYXRhaW47CiAKLQlyZXR1cm4gKHJlYWRsX3JlbGF4ZWQocmVnKSAmICgxIDw8IG9mZnNldCkpICE9IDA7CisJcmV0dXJuIChyZWFkbF9yZWxheGVkKHJlZykgJiAoQklUKG9mZnNldCkpKSAhPSAwOwogfQogCiBzdGF0aWMgaW50IF9nZXRfZ3Bpb19kYXRhb3V0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBvZmZzZXQpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlICsgYmFuay0+cmVncy0+ZGF0YW91dDsKIAotCXJldHVybiAocmVhZGxfcmVsYXhlZChyZWcpICYgKDEgPDwgb2Zmc2V0KSkgIT0gMDsKKwlyZXR1cm4gKHJlYWRsX3JlbGF4ZWQocmVnKSAmIChCSVQob2Zmc2V0KSkpICE9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZ3Bpb19ybXcodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCkBAIC0xODAsNyArMTc4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZ3Bpb19kYmNrX2VuYWJsZShzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rKQogewogCWlmIChiYW5rLT5kYmNrX2VuYWJsZV9tYXNrICYmICFiYW5rLT5kYmNrX2VuYWJsZWQpIHsKLQkJY2xrX2VuYWJsZShiYW5rLT5kYmNrKTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGJhbmstPmRiY2spOwogCQliYW5rLT5kYmNrX2VuYWJsZWQgPSB0cnVlOwogCiAJCXdyaXRlbF9yZWxheGVkKGJhbmstPmRiY2tfZW5hYmxlX21hc2ssCkBAIC0xOTgsNyArMTk2LDcgQEAKIAkJICovCiAJCXdyaXRlbF9yZWxheGVkKDAsIGJhbmstPmJhc2UgKyBiYW5rLT5yZWdzLT5kZWJvdW5jZV9lbik7CiAKLQkJY2xrX2Rpc2FibGUoYmFuay0+ZGJjayk7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShiYW5rLT5kYmNrKTsKIAkJYmFuay0+ZGJja19lbmFibGVkID0gZmFsc2U7CiAJfQogfQpAQCAtMjMxLDcgKzIyOSw3IEBACiAKIAlsID0gR1BJT19CSVQoYmFuaywgZ3Bpbyk7CiAKLQljbGtfZW5hYmxlKGJhbmstPmRiY2spOworCWNsa19wcmVwYXJlX2VuYWJsZShiYW5rLT5kYmNrKTsKIAlyZWcgPSBiYW5rLT5iYXNlICsgYmFuay0+cmVncy0+ZGVib3VuY2U7CiAJd3JpdGVsX3JlbGF4ZWQoZGVib3VuY2UsIHJlZyk7CiAKQEAgLTI0NSw3ICsyNDMsNyBAQAogCWJhbmstPmRiY2tfZW5hYmxlX21hc2sgPSB2YWw7CiAKIAl3cml0ZWxfcmVsYXhlZCh2YWwsIHJlZyk7Ci0JY2xrX2Rpc2FibGUoYmFuay0+ZGJjayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGJhbmstPmRiY2spOwogCS8qCiAJICogRW5hYmxlIGRlYm91bmNlIGNsb2NrIHBlciBtb2R1bGUuCiAJICogVGhpcyBjYWxsIGlzIG1hbmRhdG9yeSBiZWNhdXNlIGluIG9tYXBfZ3Bpb19yZXF1ZXN0KCkgd2hlbgpAQCAtMjkwLDcgKzI4OCw3IEBACiAJCWJhbmstPmNvbnRleHQuZGVib3VuY2UgPSAwOwogCQl3cml0ZWxfcmVsYXhlZChiYW5rLT5jb250ZXh0LmRlYm91bmNlLCBiYW5rLT5iYXNlICsKIAkJCSAgICAgYmFuay0+cmVncy0+ZGVib3VuY2UpOwotCQljbGtfZGlzYWJsZShiYW5rLT5kYmNrKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGJhbmstPmRiY2spOwogCQliYW5rLT5kYmNrX2VuYWJsZWQgPSBmYWxzZTsKIAl9CiB9CkBAIC0yOTksNyArMjk3LDcgQEAKIAkJCQkJCXVuc2lnbmVkIHRyaWdnZXIpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gYmFuay0+YmFzZTsKLQl1MzIgZ3Bpb19iaXQgPSAxIDw8IGdwaW87CisJdTMyIGdwaW9fYml0ID0gQklUKGdwaW8pOwogCiAJX2dwaW9fcm13KGJhc2UsIGJhbmstPnJlZ3MtPmxldmVsZGV0ZWN0MCwgZ3Bpb19iaXQsCiAJCSAgdHJpZ2dlciAmIElSUV9UWVBFX0xFVkVMX0xPVyk7CkBAIC0zNjgsOSArMzY2LDkgQEAKIAogCWwgPSByZWFkbF9yZWxheGVkKHJlZyk7CiAJaWYgKChsID4+IGdwaW8pICYgMSkKLQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CisJCWwgJj0gfihCSVQoZ3BpbykpOwogCWVsc2UKLQkJbCB8PSAxIDw8IGdwaW87CisJCWwgfD0gQklUKGdwaW8pOwogCiAJd3JpdGVsX3JlbGF4ZWQobCwgcmVnKTsKIH0KQEAgLTM5MiwxMSArMzkwLDExIEBACiAKIAkJbCA9IHJlYWRsX3JlbGF4ZWQocmVnKTsKIAkJaWYgKCh0cmlnZ2VyICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKQotCQkJYmFuay0+dG9nZ2xlX21hc2sgfD0gMSA8PCBncGlvOworCQkJYmFuay0+dG9nZ2xlX21hc2sgfD0gQklUKGdwaW8pOwogCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKQotCQkJbCB8PSAxIDw8IGdwaW87CisJCQlsIHw9IEJJVChncGlvKTsKIAkJZWxzZSBpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfRkFMTElORykKLQkJCWwgJj0gfigxIDw8IGdwaW8pOworCQkJbCAmPSB+KEJJVChncGlvKSk7CiAJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC00MTMsMTAgKzQxMSwxMCBAQAogCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQkJbCB8PSAyIDw8IChncGlvIDw8IDEpOwogCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfRkFMTElORykKLQkJCWwgfD0gMSA8PCAoZ3BpbyA8PCAxKTsKKwkJCWwgfD0gQklUKGdwaW8gPDwgMSk7CiAKIAkJLyogRW5hYmxlIHdha2UtdXAgZHVyaW5nIGlkbGUgZm9yIGR5bmFtaWMgdGljayAqLwotCQlfZ3Bpb19ybXcoYmFzZSwgYmFuay0+cmVncy0+d2t1cF9lbiwgMSA8PCBncGlvLCB0cmlnZ2VyKTsKKwkJX2dwaW9fcm13KGJhc2UsIGJhbmstPnJlZ3MtPndrdXBfZW4sIEJJVChncGlvKSwgdHJpZ2dlcik7CiAJCWJhbmstPmNvbnRleHQud2FrZV9lbiA9CiAJCQlyZWFkbF9yZWxheGVkKGJhbmstPmJhc2UgKyBiYW5rLT5yZWdzLT53a3VwX2VuKTsKIAkJd3JpdGVsX3JlbGF4ZWQobCwgcmVnKTsKQEAgLTQzMCw3ICs0MjgsNyBAQAogCQl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2UgKyBiYW5rLT5yZWdzLT5waW5jdHJsOwogCiAJCS8qIENsYWltIHRoZSBwaW4gZm9yIE1QVSAqLwotCQl3cml0ZWxfcmVsYXhlZChyZWFkbF9yZWxheGVkKHJlZykgfCAoMSA8PCBvZmZzZXQpLCByZWcpOworCQl3cml0ZWxfcmVsYXhlZChyZWFkbF9yZWxheGVkKHJlZykgfCAoQklUKG9mZnNldCkpLCByZWcpOwogCX0KIAogCWlmIChiYW5rLT5yZWdzLT5jdHJsICYmICFCQU5LX1VTRUQoYmFuaykpIHsKQEAgLTQ1Myw3ICs0NTEsNyBAQAogCSAgICAhTElORV9VU0VEKGJhbmstPm1vZF91c2FnZSwgb2Zmc2V0KSAmJgogCSAgICAhTElORV9VU0VEKGJhbmstPmlycV91c2FnZSwgb2Zmc2V0KSkgewogCQkvKiBEaXNhYmxlIHdha2UtdXAgZHVyaW5nIGlkbGUgZm9yIGR5bmFtaWMgdGljayAqLwotCQlfZ3Bpb19ybXcoYmFzZSwgYmFuay0+cmVncy0+d2t1cF9lbiwgMSA8PCBvZmZzZXQsIDApOworCQlfZ3Bpb19ybXcoYmFzZSwgYmFuay0+cmVncy0+d2t1cF9lbiwgQklUKG9mZnNldCksIDApOwogCQliYW5rLT5jb250ZXh0Lndha2VfZW4gPQogCQkJcmVhZGxfcmVsYXhlZChiYW5rLT5iYXNlICsgYmFuay0+cmVncy0+d2t1cF9lbik7CiAJfQpAQCAtNDc5LDcgKzQ3Nyw3IEBACiAKIHN0YXRpYyBpbnQgZ3Bpb19pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCiB7Ci0Jc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CiAJdW5zaWduZWQgZ3BpbyA9IDA7CiAJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTA5LDIwICs1MDcsMTIgQEAKIAlpZiAoIUxJTkVfVVNFRChiYW5rLT5tb2RfdXNhZ2UsIG9mZnNldCkpIHsKIAkJX2VuYWJsZV9ncGlvX21vZHVsZShiYW5rLCBvZmZzZXQpOwogCQlfc2V0X2dwaW9fZGlyZWN0aW9uKGJhbmssIG9mZnNldCwgMSk7Ci0JfSBlbHNlIGlmICghZ3Bpb19pc19pbnB1dChiYW5rLCAxIDw8IG9mZnNldCkpIHsKKwl9IGVsc2UgaWYgKCFncGlvX2lzX2lucHV0KGJhbmssIEJJVChvZmZzZXQpKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHZhbCA9IGdwaW9fbG9ja19hc19pcnEoJmJhbmstPmNoaXAsIG9mZnNldCk7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKGJhbmstPmRldiwgInVuYWJsZSB0byBsb2NrIG9mZnNldCAlZCBmb3IgSVJRXG4iLAotCQkJb2Zmc2V0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWJhbmstPmlycV91c2FnZSB8PSAxIDw8IEdQSU9fSU5ERVgoYmFuaywgZ3Bpbyk7CisJYmFuay0+aXJxX3VzYWdlIHw9IEJJVChHUElPX0lOREVYKGJhbmssIGdwaW8pKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKQEAgLTU1OSw3ICs1NDksNyBAQAogewogCXZvaWQgX19pb21lbSAqcmVnID0gYmFuay0+YmFzZTsKIAl1MzIgbDsKLQl1MzIgbWFzayA9ICgxIDw8IGJhbmstPndpZHRoKSAtIDE7CisJdTMyIG1hc2sgPSAoQklUKGJhbmstPndpZHRoKSkgLSAxOwogCiAJcmVnICs9IGJhbmstPnJlZ3MtPmlycWVuYWJsZTsKIAlsID0gcmVhZGxfcmVsYXhlZChyZWcpOwpAQCAtNjY0LDcgKzY1NCw3IEBACiAvKiBVc2UgZGlzYWJsZV9pcnFfd2FrZSgpIGFuZCBlbmFibGVfaXJxX3dha2UoKSBmdW5jdGlvbnMgZnJvbSBkcml2ZXJzICovCiBzdGF0aWMgaW50IGdwaW9fd2FrZV9lbmFibGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gX2lycV9kYXRhX2dldF9iYW5rKGQpOwogCXVuc2lnbmVkIGludCBncGlvID0gaXJxX3RvX2dwaW8oYmFuaywgZC0+aHdpcnEpOwogCiAJcmV0dXJuIF9zZXRfZ3Bpb193YWtldXAoYmFuaywgZ3BpbywgZW5hYmxlKTsKQEAgLTY5MSw3ICs2ODEsNyBAQAogCQlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBvZmZzZXQsIElSUV9UWVBFX05PTkUpOwogCQlfZW5hYmxlX2dwaW9fbW9kdWxlKGJhbmssIG9mZnNldCk7CiAJfQotCWJhbmstPm1vZF91c2FnZSB8PSAxIDw8IG9mZnNldDsKKwliYW5rLT5tb2RfdXNhZ2UgfD0gQklUKG9mZnNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC03MDMsNyArNjkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKLQliYW5rLT5tb2RfdXNhZ2UgJj0gfigxIDw8IG9mZnNldCk7CisJYmFuay0+bW9kX3VzYWdlICY9IH4oQklUKG9mZnNldCkpOwogCV9kaXNhYmxlX2dwaW9fbW9kdWxlKGJhbmssIG9mZnNldCk7CiAJX3Jlc2V0X2dwaW8oYmFuaywgYmFuay0+Y2hpcC5iYXNlICsgb2Zmc2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CkBAIC03MzIsMTEgKzcyMiwxMiBAQAogCXVuc2lnbmVkIGludCBiaXQ7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKIAlpbnQgdW5tYXNrZWQgPSAwOwotCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOworCXN0cnVjdCBpcnFfY2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOworCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOwogCi0JY2hhaW5lZF9pcnFfZW50ZXIoY2hpcCwgZGVzYyk7CisJY2hhaW5lZF9pcnFfZW50ZXIoaXJxY2hpcCwgZGVzYyk7CiAKLQliYW5rID0gaXJxX2dldF9oYW5kbGVyX2RhdGEoaXJxKTsKKwliYW5rID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBncGlvX2JhbmssIGNoaXApOwogCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgYmFuay0+cmVncy0+aXJxc3RhdHVzOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoYmFuay0+ZGV2KTsKIApAQCAtNzY0LDcgKzc1NSw3IEBACiAJCWNvbmZpZ3VyZWQsIHdlIGNvdWxkIHVubWFzayBHUElPIGJhbmsgaW50ZXJydXB0IGltbWVkaWF0ZWx5ICovCiAJCWlmICghbGV2ZWxfbWFzayAmJiAhdW5tYXNrZWQpIHsKIAkJCXVubWFza2VkID0gMTsKLQkJCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CisJCQljaGFpbmVkX2lycV9leGl0KGlycWNoaXAsIGRlc2MpOwogCQl9CiAKIAkJaWYgKCFpc3IpCkBAIC03NzIsNyArNzYzLDcgQEAKIAogCQl3aGlsZSAoaXNyKSB7CiAJCQliaXQgPSBfX2Zmcyhpc3IpOwotCQkJaXNyICY9IH4oMSA8PCBiaXQpOworCQkJaXNyICY9IH4oQklUKGJpdCkpOwogCiAJCQkvKgogCQkJICogU29tZSBjaGlwcyBjYW4ndCByZXNwb25kIHRvIGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nCkBAIC03ODEsMTAgKzc3MiwxMSBAQAogCQkJICogdG8gcmVzcG9uZCB0byB0aGUgSVJRIGZvciB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgogCQkJICogVGhpcyB3aWxsIGJlIGluZGljYXRlZCBpbiB0aGUgYmFuayB0b2dnbGVfbWFzay4KIAkJCSAqLwotCQkJaWYgKGJhbmstPnRvZ2dsZV9tYXNrICYgKDEgPDwgYml0KSkKKwkJCWlmIChiYW5rLT50b2dnbGVfbWFzayAmIChCSVQoYml0KSkpCiAJCQkJX3RvZ2dsZV9ncGlvX2VkZ2VfdHJpZ2dlcmluZyhiYW5rLCBiaXQpOwogCi0JCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhiYW5rLT5kb21haW4sIGJpdCkpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYmFuay0+Y2hpcC5pcnFkb21haW4sCisJCQkJCQkJICAgIGJpdCkpOwogCQl9CiAJfQogCS8qIGlmIGJhbmsgaGFzIGFueSBsZXZlbCBzZW5zaXRpdmUgR1BJTyBwaW4gaW50ZXJydXB0CkBAIC03OTMsMjAgKzc4NSwyMCBAQAogCWludGVycnVwdCAqLwogZXhpdDoKIAlpZiAoIXVubWFza2VkKQotCQljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOworCQljaGFpbmVkX2lycV9leGl0KGlycWNoaXAsIGRlc2MpOwogCXBtX3J1bnRpbWVfcHV0KGJhbmstPmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9faXJxX3NodXRkb3duKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IF9pcnFfZGF0YV9nZXRfYmFuayhkKTsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycV90b19ncGlvKGJhbmssIGQtPmh3aXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIG9mZnNldCA9IEdQSU9fSU5ERVgoYmFuaywgZ3Bpbyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCWdwaW9fdW5sb2NrX2FzX2lycSgmYmFuay0+Y2hpcCwgb2Zmc2V0KTsKLQliYW5rLT5pcnFfdXNhZ2UgJj0gfigxIDw8IG9mZnNldCk7CisJYmFuay0+aXJxX3VzYWdlICY9IH4oQklUKG9mZnNldCkpOwogCV9kaXNhYmxlX2dwaW9fbW9kdWxlKGJhbmssIG9mZnNldCk7CiAJX3Jlc2V0X2dwaW8oYmFuaywgZ3Bpbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwpAQCAtODIxLDcgKzgxMyw3IEBACiAKIHN0YXRpYyB2b2lkIGdwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhiYW5rLCBkLT5od2lycSk7CiAKIAlfY2xlYXJfZ3Bpb19pcnFzdGF0dXMoYmFuaywgZ3Bpbyk7CkBAIC04MjksNyArODIxLDcgQEAKIAogc3RhdGljIHZvaWQgZ3Bpb19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhiYW5rLCBkLT5od2lycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtODQxLDcgKzgzMyw3IEBACiAKIHN0YXRpYyB2b2lkIGdwaW9fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhiYW5rLCBkLT5od2lycSk7CiAJdW5zaWduZWQgaW50IGlycV9tYXNrID0gR1BJT19CSVQoYmFuaywgZ3Bpbyk7CiAJdTMyIHRyaWdnZXIgPSBpcnFkX2dldF90cmlnZ2VyX3R5cGUoZCk7CkBAIC05MzYsNiArOTI4LDIxIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCBncGlvX2dldF9kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKnJlZzsKKwlpbnQgZGlyOworCisJYmFuayA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZ3Bpb19iYW5rLCBjaGlwKTsKKwlyZWcgPSBiYW5rLT5iYXNlICsgYmFuay0+cmVncy0+ZGlyZWN0aW9uOworCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CisJZGlyID0gISEocmVhZGxfcmVsYXhlZChyZWcpICYgQklUKG9mZnNldCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZGlyOworfQorCiBzdGF0aWMgaW50IGdwaW9faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CkBAIC05NTQsNyArOTYxLDcgQEAKIAl1MzIgbWFzazsKIAogCWJhbmsgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGdwaW9fYmFuaywgY2hpcCk7Ci0JbWFzayA9ICgxIDw8IG9mZnNldCk7CisJbWFzayA9IChCSVQob2Zmc2V0KSk7CiAKIAlpZiAoZ3Bpb19pc19pbnB1dChiYW5rLCBtYXNrKSkKIAkJcmV0dXJuIF9nZXRfZ3Bpb19kYXRhaW4oYmFuaywgb2Zmc2V0KTsKQEAgLTEwODEsMTAgKzEwODgsMTIgQEAKIAkJCSAgICAgICBJUlFfTk9SRVFVRVNUIHwgSVJRX05PUFJPQkUsIDApOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2dwaW9fY2hpcF9pbml0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmspCitzdGF0aWMgaW50IG9tYXBfZ3Bpb19jaGlwX2luaXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaykKIHsKIAlpbnQgajsKIAlzdGF0aWMgaW50IGdwaW87CisJaW50IGlycV9iYXNlID0gMDsKKwlpbnQgcmV0OwogCiAJLyoKIAkgKiBSRVZJU0lUIGV2ZW50dWFsbHkgc3dpdGNoIGZyb20gT01BUC1zcGVjaWZpYyBncGlvIHN0cnVjdHMKQEAgLTEwOTIsMTIgKzExMDEsMTIgQEAKIAkgKi8KIAliYW5rLT5jaGlwLnJlcXVlc3QgPSBvbWFwX2dwaW9fcmVxdWVzdDsKIAliYW5rLT5jaGlwLmZyZWUgPSBvbWFwX2dwaW9fZnJlZTsKKwliYW5rLT5jaGlwLmdldF9kaXJlY3Rpb24gPSBncGlvX2dldF9kaXJlY3Rpb247CiAJYmFuay0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBncGlvX2lucHV0OwogCWJhbmstPmNoaXAuZ2V0ID0gZ3Bpb19nZXQ7CiAJYmFuay0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gZ3Bpb19vdXRwdXQ7CiAJYmFuay0+Y2hpcC5zZXRfZGVib3VuY2UgPSBncGlvX2RlYm91bmNlOwogCWJhbmstPmNoaXAuc2V0ID0gZ3Bpb19zZXQ7Ci0JYmFuay0+Y2hpcC50b19pcnEgPSBvbWFwX2dwaW9fdG9faXJxOwogCWlmIChiYW5rLT5pc19tcHVpbykgewogCQliYW5rLT5jaGlwLmxhYmVsID0gIm1wdWlvIjsKIAkJaWYgKGJhbmstPnJlZ3MtPndrdXBfZW4pCkBAIC0xMTEwLDIyICsxMTE5LDQ4IEBACiAJfQogCWJhbmstPmNoaXAubmdwaW8gPSBiYW5rLT53aWR0aDsKIAotCWdwaW9jaGlwX2FkZCgmYmFuay0+Y2hpcCk7CisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZiYW5rLT5jaGlwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoYmFuay0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIGdwaW8gY2hpcCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQorCS8qCisJICogUkVWSVNJVDogT25jZSB3ZSBoYXZlIE9NQVAxIHN1cHBvcnRpbmcgU1BBUlNFX0lSUSwgd2UgY2FuIGRyb3AKKwkgKiBpcnFfYWxsb2NfZGVzY3MoKSBzaW5jZSBhIGJhc2UgSVJRIG9mZnNldCB3aWxsIG5vIGxvbmdlciBiZSBuZWVkZWQuCisJICovCisJaXJxX2Jhc2UgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGJhbmstPndpZHRoLCAwKTsKKwlpZiAoaXJxX2Jhc2UgPCAwKSB7CisJCWRldl9lcnIoYmFuay0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgSVJRIG51bWJlcnNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisjZW5kaWYKKworCXJldCA9IGdwaW9jaGlwX2lycWNoaXBfYWRkKCZiYW5rLT5jaGlwLCAmZ3Bpb19pcnFfY2hpcCwKKwkJCQkgICBpcnFfYmFzZSwgZ3Bpb19pcnFfaGFuZGxlciwKKwkJCQkgICBJUlFfVFlQRV9OT05FKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycihiYW5rLT5kZXYsICJDb3VsZG4ndCBhZGQgaXJxY2hpcCB0byBncGlvY2hpcCAlZFxuIiwgcmV0KTsKKwkJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZiYW5rLT5jaGlwKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZ3Bpb2NoaXBfc2V0X2NoYWluZWRfaXJxY2hpcCgmYmFuay0+Y2hpcCwgJmdwaW9faXJxX2NoaXAsCisJCQkJICAgICBiYW5rLT5pcnEsIGdwaW9faXJxX2hhbmRsZXIpOwogCiAJZm9yIChqID0gMDsgaiA8IGJhbmstPndpZHRoOyBqKyspIHsKLQkJaW50IGlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhiYW5rLT5kb21haW4sIGopOworCQlpbnQgaXJxID0gaXJxX2ZpbmRfbWFwcGluZyhiYW5rLT5jaGlwLmlycWRvbWFpbiwgaik7CiAJCWlycV9zZXRfbG9ja2RlcF9jbGFzcyhpcnEsICZncGlvX2xvY2tfY2xhc3MpOwotCQlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGJhbmspOwogCQlpZiAoYmFuay0+aXNfbXB1aW8pIHsKIAkJCW9tYXBfbXB1aW9fYWxsb2NfZ2MoYmFuaywgaXJxLCBiYW5rLT53aWR0aCk7Ci0JCX0gZWxzZSB7Ci0JCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmZ3Bpb19pcnFfY2hpcCwKLQkJCQkJCSBoYW5kbGVfc2ltcGxlX2lycSk7Ci0JCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBOVUxMLCBOVUxMKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCAwKTsKIAkJfQogCX0KLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihiYW5rLT5pcnEsIGdwaW9faXJxX2hhbmRsZXIpOwotCWlycV9zZXRfaGFuZGxlcl9kYXRhKGJhbmstPmlycSwgYmFuayk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcF9ncGlvX21hdGNoW107CkBAIC0xMTM4LDkgKzExNzMsNyBAQAogCWNvbnN0IHN0cnVjdCBvbWFwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQotCWludCBpcnFfYmFzZTsKLSNlbmRpZgorCWludCByZXQ7CiAKIAltYXRjaCA9IG9mX21hdGNoX2RldmljZShvZl9tYXRjaF9wdHIob21hcF9ncGlvX21hdGNoKSwgZGV2KTsKIApAQCAtMTE2Miw2ICsxMTk1LDcgQEAKIAogCWJhbmstPmlycSA9IHJlcy0+c3RhcnQ7CiAJYmFuay0+ZGV2ID0gZGV2OworCWJhbmstPmNoaXAuZGV2ID0gZGV2OwogCWJhbmstPmRiY2tfZmxhZyA9IHBkYXRhLT5kYmNrX2ZsYWc7CiAJYmFuay0+c3RyaWRlID0gcGRhdGEtPmJhbmtfc3RyaWRlOwogCWJhbmstPndpZHRoID0gcGRhdGEtPmJhbmtfd2lkdGg7CkBAIC0xMTgyLDI5ICsxMjE2LDYgQEAKIAkJCQlwZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQotCS8qCi0JICogUkVWSVNJVDogT25jZSB3ZSBoYXZlIE9NQVAxIHN1cHBvcnRpbmcgU1BBUlNFX0lSUSwgd2UgY2FuIGRyb3AKLQkgKiBpcnFfYWxsb2NfZGVzY3MoKSBhbmQgaXJxX2RvbWFpbl9hZGRfbGVnYWN5KCkgYW5kIGp1c3QgdXNlIGEKLQkgKiBsaW5lYXIgSVJRIGRvbWFpbiBtYXBwaW5nIGZvciBhbGwgT01BUCBwbGF0Zm9ybXMuCi0JICovCi0JaXJxX2Jhc2UgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGJhbmstPndpZHRoLCAwKTsKLQlpZiAoaXJxX2Jhc2UgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgSVJRIG51bWJlcnNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQliYW5rLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9sZWdhY3kobm9kZSwgYmFuay0+d2lkdGgsIGlycV9iYXNlLAotCQkJCQkgICAgIDAsICZpcnFfZG9tYWluX3NpbXBsZV9vcHMsIE5VTEwpOwotI2Vsc2UKLQliYW5rLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgYmFuay0+d2lkdGgsCi0JCQkJCSAgICAgJmlycV9kb21haW5fc2ltcGxlX29wcywgTlVMTCk7Ci0jZW5kaWYKLQlpZiAoIWJhbmstPmRvbWFpbikgewotCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIGFuIElSUSBkb21haW5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlpZiAoYmFuay0+cmVncy0+c2V0X2RhdGFvdXQgJiYgYmFuay0+cmVncy0+Y2xyX2RhdGFvdXQpCiAJCWJhbmstPnNldF9kYXRhb3V0ID0gX3NldF9ncGlvX2RhdGFvdXRfcmVnOwogCWVsc2UKQEAgLTEyMTYsNyArMTIyNyw3IEBACiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAliYW5rLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKIAlpZiAoSVNfRVJSKGJhbmstPmJhc2UpKSB7Ci0JCWlycV9kb21haW5fcmVtb3ZlKGJhbmstPmRvbWFpbik7CisJCWlycV9kb21haW5fcmVtb3ZlKGJhbmstPmNoaXAuaXJxZG9tYWluKTsKIAkJcmV0dXJuIFBUUl9FUlIoYmFuay0+YmFzZSk7CiAJfQogCkBAIC0xMjMwLDcgKzEyNDEsMTEgQEAKIAkJbXB1aW9faW5pdChiYW5rKTsKIAogCW9tYXBfZ3Bpb19tb2RfaW5pdChiYW5rKTsKLQlvbWFwX2dwaW9fY2hpcF9pbml0KGJhbmspOworCisJcmV0ID0gb21hcF9ncGlvX2NoaXBfaW5pdChiYW5rKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJb21hcF9ncGlvX3Nob3dfcmV2KGJhbmspOwogCiAJcG1fcnVudGltZV9wdXQoYmFuay0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXBhbG1hcy5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcGFsbWFzLmMKaW5kZXggZGE5ZDMzMi4uODZiZGJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tcGFsbWFzLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tcGFsbWFzLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCS5uZ3BpbyA9IDE2LAogfTsKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfcGFsbWFzX2dwaW9fbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3BhbG1hc19ncGlvX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMtZ3BpbyIsIC5kYXRhID0gJnBhbG1hc19kZXZfZGF0YSx9LAogCXsgLmNvbXBhdGlibGUgPSAidGksdHBzNjU5MTMtZ3BpbyIsIC5kYXRhID0gJnBhbG1hc19kZXZfZGF0YSx9LAogCXsgLmNvbXBhdGlibGUgPSAidGksdHBzNjU5MTQtZ3BpbyIsIC5kYXRhID0gJnBhbG1hc19kZXZfZGF0YSx9LApAQCAtMTczLDEwICsxNzMsOCBAQAogCiAJcGFsbWFzX2dwaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKIAkJCQlzaXplb2YoKnBhbG1hc19ncGlvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWxtYXNfZ3BpbykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgcGFsbWFzX2dwaW9cbiIpOworCWlmICghcGFsbWFzX2dwaW8pCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXBhbG1hc19ncGlvLT5wYWxtYXMgPSBwYWxtYXM7CiAJcGFsbWFzX2dwaW8tPmdwaW9fY2hpcC5vd25lciA9IFRISVNfTU9EVUxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jCmluZGV4IGQ1NTBkOGUuLmU3MjFhMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1M3guYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMKQEAgLTE1LDggKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcGNhOTUzeC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTkxLDcgKzg5LDYgQEAKIAl1OCBpcnFfc3RhdFtNQVhfQkFOS107CiAJdTggaXJxX3RyaWdfcmFpc2VbTUFYX0JBTktdOwogCXU4IGlycV90cmlnX2ZhbGxbTUFYX0JBTktdOwotCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CiAjZW5kaWYKIAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CkBAIC0xMDAsNiArOTcsMTEgQEAKIAlpbnQJY2hpcF90eXBlOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNhOTUzeF9jaGlwICp0b19wY2Eoc3RydWN0IGdwaW9fY2hpcCAqZ2MpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKK30KKwogc3RhdGljIGludCBwY2E5NTN4X3JlYWRfc2luZ2xlKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAsIGludCByZWcsIHUzMiAqdmFsLAogCQkJCWludCBvZmYpCiB7CkBAIC0yMDIsMTIgKzIwNCwxMCBAQAogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSB0b19wY2EoZ2MpOwogCXU4IHJlZ192YWw7CiAJaW50IHJldCwgb2Zmc2V0ID0gMDsKIAotCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7Ci0KIAltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJcmVnX3ZhbCA9IGNoaXAtPnJlZ19kaXJlY3Rpb25bb2ZmIC8gQkFOS19TWl0gfCAoMXUgPDwgKG9mZiAlIEJBTktfU1opKTsKIApAQCAtMjMzLDEyICsyMzMsMTAgQEAKIHN0YXRpYyBpbnQgcGNhOTUzeF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCiAJCXVuc2lnbmVkIG9mZiwgaW50IHZhbCkKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSB0b19wY2EoZ2MpOwogCXU4IHJlZ192YWw7CiAJaW50IHJldCwgb2Zmc2V0ID0gMDsKIAotCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7Ci0KIAltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJLyogc2V0IG91dHB1dCBsZXZlbCAqLwogCWlmICh2YWwpCkBAIC0yODUsMTIgKzI4MywxMCBAQAogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSB0b19wY2EoZ2MpOwogCXUzMiByZWdfdmFsOwogCWludCByZXQsIG9mZnNldCA9IDA7CiAKLQljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGNhOTUzeF9jaGlwLCBncGlvX2NoaXApOwotCiAJbXV0ZXhfbG9jaygmY2hpcC0+aTJjX2xvY2spOwogCXN3aXRjaCAoY2hpcC0+Y2hpcF90eXBlKSB7CiAJY2FzZSBQQ0E5NTNYX1RZUEU6CkBAIC0zMTUsMTIgKzMxMSwxMCBAQAogCiBzdGF0aWMgdm9pZCBwY2E5NTN4X2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYsIGludCB2YWwpCiB7Ci0Jc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcDsKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gdG9fcGNhKGdjKTsKIAl1OCByZWdfdmFsOwogCWludCByZXQsIG9mZnNldCA9IDA7CiAKLQljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGNhOTUzeF9jaGlwLCBncGlvX2NoaXApOwotCiAJbXV0ZXhfbG9jaygmY2hpcC0+aTJjX2xvY2spOwogCWlmICh2YWwpCiAJCXJlZ192YWwgPSBjaGlwLT5yZWdfb3V0cHV0W29mZiAvIEJBTktfU1pdCkBAIC0zNjcsMzggKzM2MSwzNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0dQSU9fUENBOTUzWF9JUlEKLXN0YXRpYyBpbnQgcGNhOTUzeF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmKQotewotCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXA7Ci0KLQljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGNhOTUzeF9jaGlwLCBncGlvX2NoaXApOwotCXJldHVybiBpcnFfY3JlYXRlX21hcHBpbmcoY2hpcC0+ZG9tYWluLCBvZmYpOwotfQotCiBzdGF0aWMgdm9pZCBwY2E5NTN4X2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gdG9fcGNhKGdjKTsKIAogCWNoaXAtPmlycV9tYXNrW2QtPmh3aXJxIC8gQkFOS19TWl0gJj0gfigxIDw8IChkLT5od2lycSAlIEJBTktfU1opKTsKIH0KIAogc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gdG9fcGNhKGdjKTsKIAogCWNoaXAtPmlycV9tYXNrW2QtPmh3aXJxIC8gQkFOS19TWl0gfD0gMSA8PCAoZC0+aHdpcnEgJSBCQU5LX1NaKTsKIH0KIAogc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSB0b19wY2EoZ2MpOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+aXJxX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwY2E5NTN4X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSB0b19wY2EoZ2MpOwogCXU4IG5ld19pcnFzOwogCWludCBsZXZlbCwgaTsKIApAQCAtNDIwLDcgKzQxMCw4IEBACiAKIHN0YXRpYyBpbnQgcGNhOTUzeF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gdG9fcGNhKGdjKTsKIAlpbnQgYmFua19uYiA9IGQtPmh3aXJxIC8gQkFOS19TWjsKIAl1OCBtYXNrID0gMSA8PCAoZC0+aHdpcnEgJSBCQU5LX1NaKTsKIApAQCAtNTAzLDQ0ICs0OTQsMjUgQEAKIAlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZGV2aWQ7CiAJdTggcGVuZGluZ1tNQVhfQkFOS107CiAJdTggbGV2ZWw7CisJdW5zaWduZWQgbmhhbmRsZWQgPSAwOwogCWludCBpOwogCiAJaWYgKCFwY2E5NTN4X2lycV9wZW5kaW5nKGNoaXAsIHBlbmRpbmcpKQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCXJldHVybiBJUlFfTk9ORTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQkFOSyhjaGlwKTsgaSsrKSB7CiAJCXdoaWxlIChwZW5kaW5nW2ldKSB7CiAJCQlsZXZlbCA9IF9fZmZzKHBlbmRpbmdbaV0pOwotCQkJaGFuZGxlX25lc3RlZF9pcnEoaXJxX2ZpbmRfbWFwcGluZyhjaGlwLT5kb21haW4sCisJCQloYW5kbGVfbmVzdGVkX2lycShpcnFfZmluZF9tYXBwaW5nKGNoaXAtPmdwaW9fY2hpcC5pcnFkb21haW4sCiAJCQkJCQkJbGV2ZWwgKyAoQkFOS19TWiAqIGkpKSk7CiAJCQlwZW5kaW5nW2ldICY9IH4oMSA8PCBsZXZlbCk7CisJCQluaGFuZGxlZCsrOwogCQl9CiAJfQogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiAobmhhbmRsZWQgPiAwKSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CiAKLXN0YXRpYyBpbnQgcGNhOTUzeF9ncGlvX2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsCi0JCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCi17Ci0JaXJxX2NsZWFyX3N0YXR1c19mbGFncyhpcnEsIElSUV9OT1JFUVVFU1QpOwotCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgZC0+aG9zdF9kYXRhKTsKLQlpcnFfc2V0X2NoaXAoaXJxLCAmcGNhOTUzeF9pcnFfY2hpcCk7Ci0JaXJxX3NldF9uZXN0ZWRfdGhyZWFkKGlycSwgdHJ1ZSk7Ci0jaWZkZWYgQ09ORklHX0FSTQotCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKLSNlbHNlCi0JaXJxX3NldF9ub3Byb2JlKGlycSk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIHBjYTk1M3hfaXJxX3NpbXBsZV9vcHMgPSB7Ci0JLm1hcCA9IHBjYTk1M3hfZ3Bpb19pcnFfbWFwLAotCS54bGF0ZSA9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCwKLX07Ci0KIHN0YXRpYyBpbnQgcGNhOTUzeF9pcnFfc2V0dXAoc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkLAogCQkJICAgICBpbnQgaXJxX2Jhc2UpCkBAIC01NzIsMTkgKzU0NCwxMiBAQAogCQkJY2hpcC0+aXJxX3N0YXRbaV0gJj0gY2hpcC0+cmVnX2RpcmVjdGlvbltpXTsKIAkJbXV0ZXhfaW5pdCgmY2hpcC0+aXJxX2xvY2spOwogCi0JCWNoaXAtPmRvbWFpbiA9IGlycV9kb21haW5fYWRkX3NpbXBsZShjbGllbnQtPmRldi5vZl9ub2RlLAotCQkJCQkJY2hpcC0+Z3Bpb19jaGlwLm5ncGlvLAotCQkJCQkJaXJxX2Jhc2UsCi0JCQkJCQkmcGNhOTUzeF9pcnFfc2ltcGxlX29wcywKLQkJCQkJCWNoaXApOwotCQlpZiAoIWNoaXAtPmRvbWFpbikKLQkJCXJldHVybiAtRU5PREVWOwotCiAJCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LAogCQkJCQljbGllbnQtPmlycSwKIAkJCQkJICAgTlVMTCwKIAkJCQkJICAgcGNhOTUzeF9pcnFfaGFuZGxlciwKLQkJCQkJICAgSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwKKwkJCQkJICAgSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCB8CisJCQkJCQkgICBJUlFGX1NIQVJFRCwKIAkJCQkJICAgZGV2X25hbWUoJmNsaWVudC0+ZGV2KSwgY2hpcCk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLApAQCAtNTkyLDcgKzU1NywxNiBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCWNoaXAtPmdwaW9fY2hpcC50b19pcnEgPSBwY2E5NTN4X2dwaW9fdG9faXJxOworCQlyZXQgPSAgZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoJmNoaXAtPmdwaW9fY2hpcCwKKwkJCQkJICAgICZwY2E5NTN4X2lycV9jaGlwLAorCQkJCQkgICAgaXJxX2Jhc2UsCisJCQkJCSAgICBoYW5kbGVfc2ltcGxlX2lycSwKKwkJCQkJICAgIElSUV9UWVBFX05PTkUpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiY291bGQgbm90IGNvbm5lY3QgaXJxY2hpcCB0byBncGlvY2hpcFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NTYsMTEgKzczMCwxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBwY2E5NTN4X2lycV9zZXR1cChjaGlwLCBpZCwgaXJxX2Jhc2UpOworCXJldCA9IGdwaW9jaGlwX2FkZCgmY2hpcC0+Z3Bpb19jaGlwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZ3Bpb2NoaXBfYWRkKCZjaGlwLT5ncGlvX2NoaXApOworCXJldCA9IHBjYTk1M3hfaXJxX3NldHVwKGNoaXAsIGlkLCBpcnFfYmFzZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tcGNmODU3eC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcGNmODU3eC5jCmluZGV4IDgyNzM1ODIuLjI3YjQ2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXBjZjg1N3guYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1wY2Y4NTd4LmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCS8qIGVuYWJsZSByZWFsIGlycSAqLwogCXN0YXR1cyA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LCBjbGllbnQtPmlycSwKIAkJCQlOVUxMLCBwY2Y4NTd4X2lycSwgSVJRRl9PTkVTSE9UIHwKLQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfU0hBUkVELAogCQkJCWRldl9uYW1lKCZjbGllbnQtPmRldiksIGdwaW8pOwogCiAJaWYgKHN0YXR1cykKQEAgLTMxOSw3ICszMTksNyBAQAogCQlzdGF0dXMgPSBwY2Y4NTd4X2lycV9kb21haW5faW5pdChncGlvLCBjbGllbnQpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpcnFfZG9tYWluIGluaXQgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbF9pcnFfZG9tYWluOwogCQl9CiAJfQogCkBAIC00MTQsMTIgKzQxNCwxMyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAicHJvYmUgZXJyb3IgJWQgZm9yICclcydcbiIsCi0JCQlzdGF0dXMsIGNsaWVudC0+bmFtZSk7Ci0KIAlpZiAoY2xpZW50LT5pcnEpCiAJCXBjZjg1N3hfaXJxX2RvbWFpbl9jbGVhbnVwKGdwaW8pOwogCitmYWlsX2lycV9kb21haW46CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJwcm9iZSBlcnJvciAlZCBmb3IgJyVzJ1xuIiwKKwkJc3RhdHVzLCBjbGllbnQtPm5hbWUpOworCiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tcGNoLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1wY2guYwppbmRleCA4M2ExNTYzLi5kNmVhYzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1wY2guYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1wY2guYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNkZWZpbmUgUENIX0VER0VfRkFMTElORwkwCiAjZGVmaW5lIFBDSF9FREdFX1JJU0lORwkJQklUKDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1wbDA2MS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcGwwNjEuYwppbmRleCBiMGY0NzUyLi44NGI0OWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1wbDA2MS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXBsMDYxLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CkBAIC04OCw3ICs4Nyw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCWdwaW9kaXIgPSByZWFkYihjaGlwLT5iYXNlICsgR1BJT0RJUik7Ci0JZ3Bpb2RpciAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlncGlvZGlyICY9IH4oQklUKG9mZnNldCkpOwogCXdyaXRlYihncGlvZGlyLCBjaGlwLT5iYXNlICsgR1BJT0RJUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDYsMTYgKzEwNSwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7Ci0Jd3JpdGViKCEhdmFsdWUgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgKDEgPDwgKG9mZnNldCArIDIpKSk7CisJd3JpdGViKCEhdmFsdWUgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgKEJJVChvZmZzZXQgKyAyKSkpOwogCWdwaW9kaXIgPSByZWFkYihjaGlwLT5iYXNlICsgR1BJT0RJUik7Ci0JZ3Bpb2RpciB8PSAxIDw8IG9mZnNldDsKKwlncGlvZGlyIHw9IEJJVChvZmZzZXQpOwogCXdyaXRlYihncGlvZGlyLCBjaGlwLT5iYXNlICsgR1BJT0RJUik7CiAKIAkvKgogCSAqIGdwaW8gdmFsdWUgaXMgc2V0IGFnYWluLCBiZWNhdXNlIHBsMDYxIGRvZXNuJ3QgYWxsb3cgdG8gc2V0IHZhbHVlIG9mCiAJICogYSBncGlvIHBpbiBiZWZvcmUgY29uZmlndXJpbmcgaXQgaW4gT1VUIG1vZGUuCiAJICovCi0Jd3JpdGViKCEhdmFsdWUgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgKDEgPDwgKG9mZnNldCArIDIpKSk7CisJd3JpdGViKCEhdmFsdWUgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgKEJJVChvZmZzZXQgKyAyKSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTI1LDE0ICsxMjQsMTQgQEAKIHsKIAlzdHJ1Y3QgcGwwNjFfZ3BpbyAqY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBsMDYxX2dwaW8sIGdjKTsKIAotCXJldHVybiAhIXJlYWRiKGNoaXAtPmJhc2UgKyAoMSA8PCAob2Zmc2V0ICsgMikpKTsKKwlyZXR1cm4gISFyZWFkYihjaGlwLT5iYXNlICsgKEJJVChvZmZzZXQgKyAyKSkpOwogfQogCiBzdGF0aWMgdm9pZCBwbDA2MV9zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogewogCXN0cnVjdCBwbDA2MV9ncGlvICpjaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGwwNjFfZ3BpbywgZ2MpOwogCi0Jd3JpdGViKCEhdmFsdWUgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgKDEgPDwgKG9mZnNldCArIDIpKSk7CisJd3JpdGViKCEhdmFsdWUgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgKEJJVChvZmZzZXQgKyAyKSkpOwogfQogCiBzdGF0aWMgaW50IHBsMDYxX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHJpZ2dlcikKQEAgLTIwNyw3ICsyMDYsNyBAQAogewogCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IHBsMDYxX2dwaW8gKmNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwbDA2MV9ncGlvLCBnYyk7Ci0JdTggbWFzayA9IDEgPDwgKGlycWRfdG9faHdpcnEoZCkgJSBQTDA2MV9HUElPX05SKTsKKwl1OCBtYXNrID0gQklUKGlycWRfdG9faHdpcnEoZCkgJSBQTDA2MV9HUElPX05SKTsKIAl1OCBncGlvaWU7CiAKIAlzcGluX2xvY2soJmNoaXAtPmxvY2spOwpAQCAtMjIwLDcgKzIxOSw3IEBACiB7CiAJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlzdHJ1Y3QgcGwwNjFfZ3BpbyAqY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBsMDYxX2dwaW8sIGdjKTsKLQl1OCBtYXNrID0gMSA8PCAoaXJxZF90b19od2lycShkKSAlIFBMMDYxX0dQSU9fTlIpOworCXU4IG1hc2sgPSBCSVQoaXJxZF90b19od2lycShkKSAlIFBMMDYxX0dQSU9fTlIpOwogCXU4IGdwaW9pZTsKIAogCXNwaW5fbG9jaygmY2hpcC0+bG9jayk7CkBAIC0zMDIsOSArMzAxLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQTDA2MV9HUElPX05SOyBpKyspIHsKIAkJaWYgKHBkYXRhKSB7Ci0JCQlpZiAocGRhdGEtPmRpcmVjdGlvbnMgJiAoMSA8PCBpKSkKKwkJCWlmIChwZGF0YS0+ZGlyZWN0aW9ucyAmIChCSVQoaSkpKQogCQkJCXBsMDYxX2RpcmVjdGlvbl9vdXRwdXQoJmNoaXAtPmdjLCBpLAotCQkJCQkJcGRhdGEtPnZhbHVlcyAmICgxIDw8IGkpKTsKKwkJCQkJCXBkYXRhLT52YWx1ZXMgJiAoQklUKGkpKSk7CiAJCQllbHNlCiAJCQkJcGwwNjFfZGlyZWN0aW9uX2lucHV0KCZjaGlwLT5nYywgaSk7CiAJCX0KQEAgLTMzMSw3ICszMzAsNyBAQAogCWNoaXAtPmNzYXZlX3JlZ3MuZ3Bpb19pZSA9IHJlYWRiKGNoaXAtPmJhc2UgKyBHUElPSUUpOwogCiAJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBQTDA2MV9HUElPX05SOyBvZmZzZXQrKykgewotCQlpZiAoY2hpcC0+Y3NhdmVfcmVncy5ncGlvX2RpciAmICgxIDw8IG9mZnNldCkpCisJCWlmIChjaGlwLT5jc2F2ZV9yZWdzLmdwaW9fZGlyICYgKEJJVChvZmZzZXQpKSkKIAkJCWNoaXAtPmNzYXZlX3JlZ3MuZ3Bpb19kYXRhIHw9CiAJCQkJcGwwNjFfZ2V0X3ZhbHVlKCZjaGlwLT5nYywgb2Zmc2V0KSA8PCBvZmZzZXQ7CiAJfQpAQCAtMzQ1LDEwICszNDQsMTAgQEAKIAlpbnQgb2Zmc2V0OwogCiAJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBQTDA2MV9HUElPX05SOyBvZmZzZXQrKykgewotCQlpZiAoY2hpcC0+Y3NhdmVfcmVncy5ncGlvX2RpciAmICgxIDw8IG9mZnNldCkpCisJCWlmIChjaGlwLT5jc2F2ZV9yZWdzLmdwaW9fZGlyICYgKEJJVChvZmZzZXQpKSkKIAkJCXBsMDYxX2RpcmVjdGlvbl9vdXRwdXQoJmNoaXAtPmdjLCBvZmZzZXQsCiAJCQkJCWNoaXAtPmNzYXZlX3JlZ3MuZ3Bpb19kYXRhICYKLQkJCQkJKDEgPDwgb2Zmc2V0KSk7CisJCQkJCShCSVQob2Zmc2V0KSkpOwogCQllbHNlCiAJCQlwbDA2MV9kaXJlY3Rpb25faW5wdXQoJmNoaXAtPmdjLCBvZmZzZXQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXJjNXQ1ODMuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXJjNXQ1ODMuYwppbmRleCA5YjQyMzE3Li41NjJiMGM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tcmM1dDU4My5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXJjNXQ1ODMuYwpAQCAtMTE5LDEwICsxMTksOCBAQAogCiAJcmM1dDU4M19ncGlvID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcmM1dDU4M19ncGlvKSwKIAkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYzV0NTgzX2dwaW8pIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIk1lbSBhbGxvY2F0aW9uIGZvciByYzV0NTgzX2dwaW8gZmFpbGVkIik7CisJaWYgKCFyYzV0NTgzX2dwaW8pCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXJjNXQ1ODNfZ3Bpby0+Z3Bpb19jaGlwLmxhYmVsID0gImdwaW8tcmM1dDU4MyIsCiAJcmM1dDU4M19ncGlvLT5ncGlvX2NoaXAub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXJjYXIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXJjYXIuYwppbmRleCAwM2M5MTQ4Li4wYzlmODAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1yY2FyLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tcmNhci5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1yY2FyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCkBAIC0zNjIsNyArMzYzLDYgQEAKIAogCXAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjA7CiAJfQpAQCAtMzc3LDYgKzM3Nyw5IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwKTsKIAorCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCiAJaW8gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CiAKQEAgLTQ2MCw2ICs0NjMsOCBAQAogZXJyMToKIAlpcnFfZG9tYWluX3JlbW92ZShwLT5pcnFfZG9tYWluKTsKIGVycjA6CisJcG1fcnVudGltZV9wdXQoZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00NzMsNiArNDc4LDggQEAKIAkJcmV0dXJuIHJldDsKIAogCWlycV9kb21haW5fcmVtb3ZlKHAtPmlycV9kb21haW4pOworCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tcmRjMzIxeC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcmRjMzIxeC5jCmluZGV4IDg4NTc3YzMuLjlmYTdlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXJkYzMyMXguYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1yZGMzMjF4LmMKQEAgLTE0MSwxNyArMTQxLDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJkYzMyMXhfZ3Bpb19kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRjMzIxeF9ncGlvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZGMzMjF4X2dwaW9fZGV2KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOworCXJkYzMyMXhfZ3Bpb19kZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCByZGMzMjF4X2dwaW8pLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXJkYzMyMXhfZ3Bpb19kZXYpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSU8sICJncGlvLXJlZzEiKTsKIAlpZiAoIXIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBncGlvLXJlZzEgcmVzb3VyY2VcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dF9mcmVlOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmcmRjMzIxeF9ncGlvX2Rldi0+bG9jayk7CkBAIC0xNjIsOCArMTYwLDcgQEAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lPLCAiZ3Bpby1yZWcyIik7CiAJaWYgKCFyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZ3Bpby1yZWcyIHJlc291cmNlXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZnJlZTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmRjMzIxeF9ncGlvX2Rldi0+cmVnMl9jdHJsX2Jhc2UgPSByLT5zdGFydDsKQEAgLTE4NywyMSArMTg0LDE3IEBACiAJCQkJCXJkYzMyMXhfZ3Bpb19kZXYtPnJlZzFfZGF0YV9iYXNlLAogCQkJCQkmcmRjMzIxeF9ncGlvX2Rldi0+ZGF0YV9yZWdbMF0pOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWU7CisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocmRjMzIxeF9ncGlvX2Rldi0+c2JfcGRldiwKIAkJCQkJcmRjMzIxeF9ncGlvX2Rldi0+cmVnMl9kYXRhX2Jhc2UsCiAJCQkJCSZyZGMzMjF4X2dwaW9fZGV2LT5kYXRhX3JlZ1sxXSk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfZnJlZTsKKwkJcmV0dXJuIGVycjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZWdpc3RlcmluZyAlZCBHUElPc1xuIiwKIAkJCQkJcmRjMzIxeF9ncGlvX2Rldi0+Y2hpcC5uZ3Bpbyk7CiAJcmV0dXJuIGdwaW9jaGlwX2FkZCgmcmRjMzIxeF9ncGlvX2Rldi0+Y2hpcCk7Ci0KLW91dF9mcmVlOgotCWtmcmVlKHJkYzMyMXhfZ3Bpb19kZXYpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgcmRjMzIxeF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMjEzLDggKzIwNiw2IEBACiAJaWYgKHJldCkKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHVucmVnaXN0ZXIgY2hpcFxuIik7CiAKLQlrZnJlZShyZGMzMjF4X2dwaW9fZGV2KTsKLQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNjaC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tc2NoLmMKaW5kZXggNWFmNjU3MS4uYTliMWNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tc2NoLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tc2NoLmMKQEAgLTk3LDggKzk3LDYgQEAKIAl1OCBjdXJyX2RpcnM7CiAJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CiAKLQlzY2hfZ3Bpb19jb3JlX3NldChnYywgZ3Bpb19udW0sIHZhbCk7Ci0KIAlzcGluX2xvY2soJmdwaW9fbG9jayk7CiAKIAlvZmZzZXQgPSBDR0lPICsgZ3Bpb19udW0gLyA4OwpAQCAtMTA5LDYgKzEwNywxNyBAQAogCQlvdXRiKGN1cnJfZGlycyAmIH4oMSA8PCBiaXQpLCBncGlvX2JhICsgb2Zmc2V0KTsKIAogCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOworCisJLyoKKwkgKiBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldCwgd3JpdGluZyB0byB0aGUgbGV2ZWwgcmVnaXN0ZXIgaGFzIG5vCisJICogZWZmZWN0IHdoZW4gR1BJTyBpcyBwcm9ncmFtbWVkIGFzIGlucHV0LgorCSAqIEFjdHVhbGx5IHRoZSB0aGUgbGV2ZWwgcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IHdoZW4gY29uZmlndXJlZCBhcyBpbnB1dC4KKwkgKiBUaHVzIHByZXNldHRpbmcgdGhlIG91dHB1dCBsZXZlbCBiZWZvcmUgc3dpdGNoaW5nIHRvIG91dHB1dCBpcyBfTk9UXyBwb3NzaWJsZS4KKwkgKiBIZW5jZSB3ZSBzZXQgdGhlIGxldmVsIGFmdGVyIGNvbmZpZ3VyaW5nIHRoZSBHUElPIGFzIG91dHB1dC4KKwkgKiBCdXQgd2UgY2Fubm90IHByZXZlbnQgYSBzaG9ydCBsb3cgcHVsc2UgaWYgZGlyZWN0aW9uIGlzIHNldCB0byBoaWdoCisJICogYW5kIGFuIGV4dGVybmFsIHB1bGwtdXAgaXMgY29ubmVjdGVkLgorCSAqLworCXNjaF9ncGlvX2NvcmVfc2V0KGdjLCBncGlvX251bSwgdmFsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc4LDggKzE4Nyw2IEBACiAJdTggY3Vycl9kaXJzOwogCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwogCi0Jc2NoX2dwaW9fcmVzdW1lX3NldChnYywgZ3Bpb19udW0sIHZhbCk7Ci0KIAlvZmZzZXQgPSBSR0lPICsgZ3Bpb19udW0gLyA4OwogCWJpdCA9IGdwaW9fbnVtICUgODsKIApAQCAtMTkwLDYgKzE5NywxNyBAQAogCQlvdXRiKGN1cnJfZGlycyAmIH4oMSA8PCBiaXQpLCBncGlvX2JhICsgb2Zmc2V0KTsKIAogCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOworCisJLyoKKwkqIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LCB3cml0aW5nIHRvIHRoZSBsZXZlbCByZWdpc3RlciBoYXMgbm8KKwkqIGVmZmVjdCB3aGVuIEdQSU8gaXMgcHJvZ3JhbW1lZCBhcyBpbnB1dC4KKwkqIEFjdHVhbGx5IHRoZSB0aGUgbGV2ZWwgcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IHdoZW4gY29uZmlndXJlZCBhcyBpbnB1dC4KKwkqIFRodXMgcHJlc2V0dGluZyB0aGUgb3V0cHV0IGxldmVsIGJlZm9yZSBzd2l0Y2hpbmcgdG8gb3V0cHV0IGlzIF9OT1RfIHBvc3NpYmxlLgorCSogSGVuY2Ugd2Ugc2V0IHRoZSBsZXZlbCBhZnRlciBjb25maWd1cmluZyB0aGUgR1BJTyBhcyBvdXRwdXQuCisJKiBCdXQgd2UgY2Fubm90IHByZXZlbnQgYSBzaG9ydCBsb3cgcHVsc2UgaWYgZGlyZWN0aW9uIGlzIHNldCB0byBoaWdoCisJKiBhbmQgYW4gZXh0ZXJuYWwgcHVsbC11cCBpcyBjb25uZWN0ZWQuCisJKi8KKwlzY2hfZ3Bpb19yZXN1bWVfc2V0KGdjLCBncGlvX251bSwgdmFsKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tc2NoMzExeC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tc2NoMzExeC5jCmluZGV4IDAzNTczODcuLmY5NDJiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNjaDMxMXguYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1zY2gzMTF4LmMKQEAgLTMyNywxNCArMzI3LDIyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIENoZWNrIGRldmljZSBJRC4gV2UgY3VycmVudGx5IGtub3cgYWJvdXQ6Ci0JICogU0NIMzExMiAoMHg3YyksIFNDSDMxMTQgKDB4N2QpLCBhbmQgU0NIMzExNiAoMHg3ZikuICovCisJLyogQ2hlY2sgZGV2aWNlIElELiAqLwogCXJlZyA9IHNjaDMxMXhfc2lvX2luYihzaW9fY29uZmlnX3BvcnQsIDB4MjApOwotCWlmICghKHJlZyA9PSAweDdjIHx8IHJlZyA9PSAweDdkIHx8IHJlZyA9PSAweDdmKSkgeworCXN3aXRjaCAocmVnKSB7CisJY2FzZSAweDdjOiAvKiBTQ0gzMTEyICovCisJCWRldl9pZCA9IDI7CisJCWJyZWFrOworCWNhc2UgMHg3ZDogLyogU0NIMzExNCAqLworCQlkZXZfaWQgPSA0OworCQlicmVhazsKKwljYXNlIDB4N2Y6IC8qIFNDSDMxMTYgKi8KKwkJZGV2X2lkID0gNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwogCX0KLQlkZXZfaWQgPSByZWcgPT0gMHg3YyA/IDIgOiByZWcgPT0gMHg3ZCA/IDQgOiA2OwogCiAJLyogU2VsZWN0IGxvZ2ljYWwgZGV2aWNlIEEgKHJ1bnRpbWUgcmVnaXN0ZXJzKSAqLwogCXNjaDMxMXhfc2lvX291dGIoc2lvX2NvbmZpZ19wb3J0LCAweDA3LCAweDBhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNwZWFyLXNwaWNzLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1zcGVhci1zcGljcy5jCmluZGV4IDMwYmNjNTMuLjM1MzI2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNwZWFyLXNwaWNzLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tc3BlYXItc3BpY3MuYwpAQCAtMTI5LDEwICsxMjksOCBAQAogCWludCByZXQ7CiAKIAlzcGljcyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnNwaWNzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGljcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsXG4iKTsKKwlpZiAoIXNwaWNzKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXNwaWNzLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1zeDE1MHguYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXN4MTUweC5jCmluZGV4IDEzZDczZmIuLmI1MWNhOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXN4MTUweC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXN4MTUweC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3N4MTUweC5oPgogCiAjZGVmaW5lIE5PX1VQREFURV9QRU5ESU5HCS0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMKaW5kZXggMTAxOTMyMC4uNTFmN2NiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tdGMzNTg5eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRjMzU4OXguYwpAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdGMzNTg5eC5oPgogCkBAIC0zMSwxMCArMjksNiBAQAogCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7Ci0Jc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKLQotCWludCBpcnFfYmFzZTsKLQogCS8qIENhY2hlcyBvZiBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlcnMgZm9yIGJ1c19sb2NrICovCiAJdTggcmVnc1tDQUNIRV9OUl9SRUdTXVtDQUNIRV9OUl9CQU5LU107CiAJdTggb2xkcmVnc1tDQUNIRV9OUl9SRUdTXVtDQUNIRV9OUl9CQU5LU107CkBAIC05NSwzMCArODksNiBAQAogCXJldHVybiB0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIHJlZywgMSA8PCBwb3MsIDApOwogfQogCi0vKioKLSAqIHRjMzU4OXhfZ3Bpb19pcnFfZ2V0X2lycSgpOiBNYXAgYSBoYXJkd2FyZSBJUlEgb24gYSBjaGlwIHRvIGEgTGludXggSVJRCi0gKgotICogQHRjMzU4OXhfZ3BpbzogdGMzNTg5eF9ncGlvX2lycSBjb250cm9sbGVyIHRvIG9wZXJhdGUgb24uCi0gKiBAaXJxOiBpbmRleCBvZiB0aGUgaGFyZHdhcmUgaW50ZXJydXB0IHJlcXVlc3RlZCBpbiB0aGUgY2hpcCBJUlFzCi0gKgotICogVXNlZnVsIGZvciBkcml2ZXJzIHRvIHJlcXVlc3QgdGhlaXIgb3duIElSUXMuCi0gKi8KLXN0YXRpYyBpbnQgdGMzNTg5eF9ncGlvX2lycV9nZXRfaXJxKHN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbywKLQkJCQkgICAgIGludCBod2lycSkKLXsKLQlpZiAoIXRjMzU4OXhfZ3BpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gaXJxX2NyZWF0ZV9tYXBwaW5nKHRjMzU4OXhfZ3Bpby0+ZG9tYWluLCBod2lycSk7Ci19Ci0KLXN0YXRpYyBpbnQgdGMzNTg5eF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gdG9fdGMzNTg5eF9ncGlvKGNoaXApOwotCi0JcmV0dXJuIHRjMzU4OXhfZ3Bpb19pcnFfZ2V0X2lycSh0YzM1ODl4X2dwaW8sIG9mZnNldCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHRlbXBsYXRlX2NoaXAgPSB7CiAJLmxhYmVsCQkJPSAidGMzNTg5eCIsCiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKQEAgLTEyNiwxMyArOTYsMTMgQEAKIAkuZ2V0CQkJPSB0YzM1ODl4X2dwaW9fZ2V0LAogCS5kaXJlY3Rpb25fb3V0cHV0CT0gdGMzNTg5eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCiAJLnNldAkJCT0gdGMzNTg5eF9ncGlvX3NldCwKLQkudG9faXJxCQkJPSB0YzM1ODl4X2dwaW9fdG9faXJxLAogCS5jYW5fc2xlZXAJCT0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBpbnQgdGMzNTg5eF9ncGlvX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdGMzNTg5eF9ncGlvLCBjaGlwKTsKIAlpbnQgb2Zmc2V0ID0gZC0+aHdpcnE7CiAJaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7CiAJaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKQEAgLTE1OSwxNCArMTI5LDE2IEBACiAKIHN0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCB0YzM1ODl4X2dwaW8sIGNoaXApOwogCiAJbXV0ZXhfbG9jaygmdGMzNTg5eF9ncGlvLT5pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdGMzNTg5eF9ncGlvLCBjaGlwKTsKIAlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IHRjMzU4OXhfZ3Bpby0+dGMzNTg5eDsKIAlzdGF0aWMgY29uc3QgdTggcmVnbWFwW10gPSB7CiAJCVtSRUdfSUJFXQk9IFRDMzU4OXhfR1BJT0lCRTAsCkBAIC0xOTQsNyArMTY2LDggQEAKIAogc3RhdGljIHZvaWQgdGMzNTg5eF9ncGlvX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHRjMzU4OXhfZ3BpbywgY2hpcCk7CiAJaW50IG9mZnNldCA9IGQtPmh3aXJxOwogCWludCByZWdvZmZzZXQgPSBvZmZzZXQgLyA4OwogCWludCBtYXNrID0gMSA8PCAob2Zmc2V0ICUgOCk7CkBAIC0yMDQsNyArMTc3LDggQEAKIAogc3RhdGljIHZvaWQgdGMzNTg5eF9ncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdGMzNTg5eF9ncGlvLCBjaGlwKTsKIAlpbnQgb2Zmc2V0ID0gZC0+aHdpcnE7CiAJaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7CiAJaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKQEAgLTI0Miw3ICsyMTYsOCBAQAogCQl3aGlsZSAoc3RhdCkgewogCQkJaW50IGJpdCA9IF9fZmZzKHN0YXQpOwogCQkJaW50IGxpbmUgPSBpICogOCArIGJpdDsKLQkJCWludCBpcnEgPSB0YzM1ODl4X2dwaW9faXJxX2dldF9pcnEodGMzNTg5eF9ncGlvLCBsaW5lKTsKKwkJCWludCBpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHRjMzU4OXhfZ3Bpby0+Y2hpcC5pcnFkb21haW4sCisJCQkJCQkgICBsaW5lKTsKIAogCQkJaGFuZGxlX25lc3RlZF9pcnEoaXJxKTsKIAkJCXN0YXQgJj0gfigxIDw8IGJpdCk7CkBAIC0yNTQsNjEgKzIyOSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHRjMzU4OXhfZ3Bpb19pcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAotCQkJCWlycV9od19udW1iZXJfdCBod2lycSkKLXsKLQlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eF9ncGlvID0gZC0+aG9zdF9kYXRhOwotCi0JaXJxX3NldF9jaGlwX2RhdGEoaXJxLCB0YzM1ODl4X2dwaW8pOwotCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZ0YzM1ODl4X2dwaW9faXJxX2NoaXAsCi0JCQkJaGFuZGxlX3NpbXBsZV9pcnEpOwotCWlycV9zZXRfbmVzdGVkX3RocmVhZChpcnEsIDEpOwotI2lmZGVmIENPTkZJR19BUk0KLQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0jZWxzZQotCWlycV9zZXRfbm9wcm9iZShpcnEpOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGMzNTg5eF9ncGlvX2lycV91bm1hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlycSkKLXsKLSNpZmRlZiBDT05GSUdfQVJNCi0Jc2V0X2lycV9mbGFncyhpcnEsIDApOwotI2VuZGlmCi0JaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgTlVMTCwgTlVMTCk7Ci0JaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBOVUxMKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyB0YzM1ODl4X2lycV9vcHMgPSB7Ci0JLm1hcCAgICA9IHRjMzU4OXhfZ3Bpb19pcnFfbWFwLAotCS51bm1hcCAgPSB0YzM1ODl4X2dwaW9faXJxX3VubWFwLAotCS54bGF0ZSAgPSBpcnFfZG9tYWluX3hsYXRlX3R3b2NlbGwsCi19OwotCi1zdGF0aWMgaW50IHRjMzU4OXhfZ3Bpb19pcnFfaW5pdChzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8sCi0JCQkJc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlpbnQgYmFzZSA9IHRjMzU4OXhfZ3Bpby0+aXJxX2Jhc2U7Ci0KLQkvKgotCSAqIElmIHRoaXMgcmVzdWx0cyBpbiBhIGxpbmVhciBkb21haW4sIGlycV9jcmVhdGVfbWFwcGluZygpIHdpbGwKLQkgKiB0YWtlIGNhcmUgb2YgYWxsb2NhdGluZyBJUlEgZGVzY3JpcHRvcnMgYXQgcnVudGltZS4gV2hlbiBhIGJhc2UKLQkgKiBpcyBwcm92aWRlZCwgdGhlIElSUSBkZXNjcmlwdG9ycyB3aWxsIGJlIGFsbG9jYXRlZCB3aGVuIHRoZQotCSAqIGRvbWFpbiBpcyBpbnN0YW50aWF0ZWQuCi0JICovCi0JdGMzNTg5eF9ncGlvLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9zaW1wbGUobnAsCi0JCQl0YzM1ODl4X2dwaW8tPmNoaXAubmdwaW8sIGJhc2UsICZ0YzM1ODl4X2lycV9vcHMsCi0JCQl0YzM1ODl4X2dwaW8pOwotCWlmICghdGMzNTg5eF9ncGlvLT5kb21haW4pIHsKLQkJZGV2X2Vycih0YzM1ODl4X2dwaW8tPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgaXJxZG9tYWluXG4iKTsKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdGMzNTg5eF9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHRjMzU4OXggKnRjMzU4OXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CkBAIC0zMjksNyArMjQ5LDggQEAKIAlpZiAoaXJxIDwgMCkKIAkJcmV0dXJuIGlycTsKIAotCXRjMzU4OXhfZ3BpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YzM1ODl4X2dwaW8pLCBHRlBfS0VSTkVMKTsKKwl0YzM1ODl4X2dwaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCB0YzM1ODl4X2dwaW8pLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXRjMzU4OXhfZ3BpbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM0NywzMCArMjY4LDM2IEBACiAJdGMzNTg5eF9ncGlvLT5jaGlwLm9mX25vZGUgPSBucDsKICNlbmRpZgogCi0JdGMzNTg5eF9ncGlvLT5pcnFfYmFzZSA9IHRjMzU4OXgtPmlycV9iYXNlID8KLQkJdGMzNTg5eC0+aXJxX2Jhc2UgKyBUQzM1ODl4X0lOVF9HUElPKDApIDogMDsKLQogCS8qIEJyaW5nIHRoZSBHUElPIG1vZHVsZSBvdXQgb2YgcmVzZXQgKi8KIAlyZXQgPSB0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIFRDMzU4OXhfUlNUQ1RSTCwKIAkJCSAgICAgICBUQzM1ODl4X1JTVENUUkxfR1BJUlNULCAwKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZTsKKwkJcmV0dXJuIHJldDsKIAotCXJldCA9IHRjMzU4OXhfZ3Bpb19pcnFfaW5pdCh0YzM1ODl4X2dwaW8sIG5wKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOwotCi0JcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLCB0YzM1ODl4X2dwaW9faXJxLCBJUlFGX09ORVNIT1QsCi0JCQkJICAgInRjMzU4OXgtZ3BpbyIsIHRjMzU4OXhfZ3Bpbyk7CisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LAorCQkJCQlpcnEsIE5VTEwsIHRjMzU4OXhfZ3Bpb19pcnEsCisJCQkJCUlSUUZfT05FU0hPVCwgInRjMzU4OXgtZ3BpbyIsCisJCQkJCXRjMzU4OXhfZ3Bpbyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGlycTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ0YzM1ODl4X2dwaW8tPmNoaXApOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFkZCBncGlvY2hpcDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0X2ZyZWVpcnE7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gIGdwaW9jaGlwX2lycWNoaXBfYWRkKCZ0YzM1ODl4X2dwaW8tPmNoaXAsCisJCQkJICAgICZ0YzM1ODl4X2dwaW9faXJxX2NoaXAsCisJCQkJICAgIDAsCisJCQkJICAgIGhhbmRsZV9zaW1wbGVfaXJxLAorCQkJCSAgICBJUlFfVFlQRV9OT05FKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJjb3VsZCBub3QgY29ubmVjdCBpcnFjaGlwIHRvIGdwaW9jaGlwXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnNldHVwKQpAQCAtMzc5LDEyICszMDYsNiBAQAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRjMzU4OXhfZ3Bpbyk7CiAKIAlyZXR1cm4gMDsKLQotb3V0X2ZyZWVpcnE6Ci0JZnJlZV9pcnEoaXJxLCB0YzM1ODl4X2dwaW8pOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUodGMzNTg5eF9ncGlvKTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHRjMzU4OXhfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTM5Miw3ICszMTMsNiBAQAogCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gdGMzNTg5eF9ncGlvLT50YzM1ODl4OwogCXN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSB0YzM1ODl4LT5wZGF0YS0+Z3BpbzsKLQlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpbnQgcmV0OwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZW1vdmUpCkBAIC00MDUsMTAgKzMyNSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZnJlZV9pcnEoaXJxLCB0YzM1ODl4X2dwaW8pOwotCi0Ja2ZyZWUodGMzNTg5eF9ncGlvKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10ZWdyYS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tdGVncmEuYwppbmRleCAyYjQ5Zjg3Li40ZThmYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby10ZWdyYS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRlZ3JhLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogCS51cHBlcl9vZmZzZXQgPSAweDgwLAogfTsKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfZ3Bpb19vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfZ3Bpb19vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtZ3BpbyIsIC5kYXRhID0gJnRlZ3JhMzBfZ3Bpb19jb25maWcgfSwKIAl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIwLWdwaW8iLCAuZGF0YSA9ICZ0ZWdyYTIwX2dwaW9fY29uZmlnIH0sCiAJeyB9LApAQCAtNDU4LDEwICs0NTgsOCBAQAogCXRlZ3JhX2dwaW9fYmFua3MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKIAkJCXRlZ3JhX2dwaW9fYmFua19jb3VudCAqIHNpemVvZigqdGVncmFfZ3Bpb19iYW5rcyksCiAJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXRlZ3JhX2dwaW9fYmFua3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYmFuayBzdHJ1Y3R1cmVcbiIpOworCWlmICghdGVncmFfZ3Bpb19iYW5rcykKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJaXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihwZGV2LT5kZXYub2Zfbm9kZSwKIAkJCQkJICAgdGVncmFfZ3Bpb19jaGlwLm5ncGlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tdGltYmVyZGFsZS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tdGltYmVyZGFsZS5jCmluZGV4IGY5YThmYmQuLmVmYzdjMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXRpbWJlcmRhbGUuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby10aW1iZXJkYWxlLmMKQEAgLTIyNCw2ICsyMjQsNyBAQAogc3RhdGljIGludCB0aW1iZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBlcnIsIGk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvOwogCXN0cnVjdCByZXNvdXJjZSAqaW9tZW07CkBAIC0yMzEsMzUgKzIzMiwzNSBAQAogCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCiAJaWYgKCFwZGF0YSB8fCBwZGF0YS0+bnJfcGlucyA+IDMyKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX21lbTsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFpb21lbSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9tZW07CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXRncGlvID0ga3phbGxvYyhzaXplb2YoKnRncGlvKSwgR0ZQX0tFUk5FTCk7CisJdGdwaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHRpbWJncGlvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0Z3BpbykgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9tZW07CisJCWRldl9lcnIoZGV2LCAiTWVtb3J5IGFsbG9jIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAl0Z3Bpby0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAKIAlzcGluX2xvY2tfaW5pdCgmdGdwaW8tPmxvY2spOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW9tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlvbWVtKSwKLQkJRFJJVkVSX05BTUUpKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBlcnJfcmVxdWVzdDsKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgaW9tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlvbWVtKSwKKwkJCQkgICAgIERSSVZFUl9OQU1FKSkgeworCQlkZXZfZXJyKGRldiwgIlJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXRncGlvLT5tZW1iYXNlID0gaW9yZW1hcChpb21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9tZW0pKTsKKwl0Z3Bpby0+bWVtYmFzZSA9IGRldm1faW9yZW1hcChkZXYsIGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwogCWlmICghdGdwaW8tPm1lbWJhc2UpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfaW9yZW1hcDsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgaW9yZW1hcFxuIik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWdjID0gJnRncGlvLT5ncGlvOwpAQCAtMjc5LDcgKzI4MCw3IEBACiAKIAllcnIgPSBncGlvY2hpcF9hZGQoZ2MpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2NoaXBhZGQ7CisJCXJldHVybiBlcnI7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0Z3Bpbyk7CiAKQEAgLTMwMiwxNyArMzAzLDYgQEAKIAlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihpcnEsIHRpbWJncGlvX2lycSk7CiAKIAlyZXR1cm4gMDsKLQotZXJyX2NoaXBhZGQ6Ci0JaW91bm1hcCh0Z3Bpby0+bWVtYmFzZSk7Ci1lcnJfaW9yZW1hcDoKLQlyZWxlYXNlX21lbV9yZWdpb24oaW9tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlvbWVtKSk7Ci1lcnJfcmVxdWVzdDoKLQlrZnJlZSh0Z3Bpbyk7Ci1lcnJfbWVtOgotCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSI6IEZhaWxlZCB0byByZWdpc3RlciBHUElPczogJWRcbiIsIGVycik7Ci0KLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHRpbWJncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMzIwLDcgKzMxMCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgdGltYmdwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwogCXN0cnVjdCB0aW1iZ3BpbyAqdGdwaW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAogCWlmIChpcnEgPj0gMCAmJiB0Z3Bpby0+aXJxX2Jhc2UgPiAwKSB7CkBAIC0zMzgsMTAgKzMyNyw2IEBACiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FIjogZmFpbGVkIHRvIHJlbW92ZSBncGlvX2NoaXBcbiIpOwogCi0JaW91bm1hcCh0Z3Bpby0+bWVtYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwotCWtmcmVlKHRncGlvKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10cHM2NTg2eC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tdHBzNjU4NnguYwppbmRleCA4OTk0ZGZhLi5hNjlmYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby10cHM2NTg2eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRwczY1ODZ4LmMKQEAgLTk3LDEwICs5Nyw4IEBACiAJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXRwczY1ODZ4X2dwaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKIAkJCQlzaXplb2YoKnRwczY1ODZ4X2dwaW8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRwczY1ODZ4X2dwaW8pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIHRwczY1ODZ4X2dwaW9cbiIpOworCWlmICghdHBzNjU4NnhfZ3BpbykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdHBzNjU4NnhfZ3Bpby0+cGFyZW50ID0gcGRldi0+ZGV2LnBhcmVudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tdHBzNjU5MTAuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRwczY1OTEwLmMKaW5kZXggYjZlODE4ZS4uZTJmOGNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tdHBzNjU5MTAuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby10cHM2NTkxMC5jCkBAIC0xMjMsMTAgKzEyMyw4IEBACiAKIAl0cHM2NTkxMF9ncGlvID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCiAJCQkJc2l6ZW9mKCp0cHM2NTkxMF9ncGlvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cHM2NTkxMF9ncGlvKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0cHM2NTkxMF9ncGlvXG4iKTsKKwlpZiAoIXRwczY1OTEwX2dwaW8pCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXRwczY1OTEwX2dwaW8tPnRwczY1OTEwID0gdHBzNjU5MTA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jIGIvZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmMKaW5kZXggNzkyYTA1YS4uMTI0ODE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmMKQEAgLTI4OSw3ICsyODksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4Z3Bpb19vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGdwaW9fb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWdwaW8tMS4wMC5hIiwgfSwKIAl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8temV2aW8uYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXpldmlvLmMKaW5kZXggOWJmNTAzNC4uNTRlNTRlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8temV2aW8uYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby16ZXZpby5jCkBAIC04MSw5ICs4MSwxNSBAQAogc3RhdGljIGludCB6ZXZpb19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCiB7CiAJc3RydWN0IHpldmlvX2dwaW8gKmNvbnRyb2xsZXIgPSB0b196ZXZpb19ncGlvKGNoaXApOworCXUzMiB2YWwsIGRpcjsKIAotCS8qIE9ubHkgcmVhZGluZyBhbGxvd2VkLCBzbyBubyBzcGlubG9jayBuZWVkZWQgKi8KLQl1MzIgdmFsID0gemV2aW9fZ3Bpb19wb3J0X2dldChjb250cm9sbGVyLCBwaW4sIFpFVklPX0dQSU9fSU5QVVQpOworCXNwaW5fbG9jaygmY29udHJvbGxlci0+bG9jayk7CisJZGlyID0gemV2aW9fZ3Bpb19wb3J0X2dldChjb250cm9sbGVyLCBwaW4sIFpFVklPX0dQSU9fRElSRUNUSU9OKTsKKwlpZiAoZGlyICYgQklUKFpFVklPX0dQSU9fQklUKHBpbikpKQorCQl2YWwgPSB6ZXZpb19ncGlvX3BvcnRfZ2V0KGNvbnRyb2xsZXIsIHBpbiwgWkVWSU9fR1BJT19JTlBVVCk7CisJZWxzZQorCQl2YWwgPSB6ZXZpb19ncGlvX3BvcnRfZ2V0KGNvbnRyb2xsZXIsIHBpbiwgWkVWSU9fR1BJT19PVVRQVVQpOworCXNwaW5fdW5sb2NrKCZjb250cm9sbGVyLT5sb2NrKTsKIAogCXJldHVybiAodmFsID4+IFpFVklPX0dQSU9fQklUKHBpbikpICYgMHgxOwogfQpAQCAtMTcyLDEwICsxNzgsOCBAQAogCWludCBzdGF0dXMsIGk7CiAKIAljb250cm9sbGVyID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOwotCWlmICghY29udHJvbGxlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIGZyZWUgbWVtb3J5XG4iKTsKKwlpZiAoIWNvbnRyb2xsZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCS8qIENvcHkgb3VyIHJlZmVyZW5jZSAqLwogCWNvbnRyb2xsZXItPmNoaXAuZ2MgPSB6ZXZpb19ncGlvX2NoaXA7CkBAIC0xOTgsNyArMjAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgemV2aW9fZ3Bpb19vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgemV2aW9fZ3Bpb19vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAibHNpLHpldmlvLWdwaW8iLCB9LAogCXsgfSwKIH07CkBAIC0yMDksNyArMjEzLDcgQEAKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiZ3Bpby16ZXZpbyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoemV2aW9fZ3Bpb19vZl9tYXRjaCksCisJCS5vZl9tYXRjaF90YWJsZSA9IHpldmlvX2dwaW9fb2ZfbWF0Y2gsCiAJfSwKIAkucHJvYmUJCT0gemV2aW9fZ3Bpb19wcm9iZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1hY3BpLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1hY3BpLmMKaW5kZXggNDAxYWRkMi4uNGE5ODc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWItYWNwaS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLWFjcGkuYwpAQCAtNDQ5LDkgKzQ0OSwxMCBAQAogCQltdXRleF91bmxvY2soJmFjaGlwLT5jb25uX2xvY2spOwogCiAJCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1dSSVRFKQotCQkJZ3Bpb2Rfc2V0X3Jhd192YWx1ZShkZXNjLCAhISgoMSA8PCBpKSAmICp2YWx1ZSkpOworCQkJZ3Bpb2Rfc2V0X3Jhd192YWx1ZV9jYW5zbGVlcChkZXNjLAorCQkJCQkJICAgICAhISgoMSA8PCBpKSAmICp2YWx1ZSkpOwogCQllbHNlCi0JCQkqdmFsdWUgfD0gKHU2NClncGlvZF9nZXRfcmF3X3ZhbHVlKGRlc2MpIDw8IGk7CisJCQkqdmFsdWUgfD0gKHU2NClncGlvZF9nZXRfcmF3X3ZhbHVlX2NhbnNsZWVwKGRlc2MpIDw8IGk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYwppbmRleCAyMDI0ZDQ1Li5hZjdlMjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JZ2dfZGF0YS0+b3V0X2dwaW8gPSBncGlvX3RvX2Rlc2MocmV0ICsgZ2MtPmJhc2UpOworCWdnX2RhdGEtPm91dF9ncGlvID0gZ3Bpb2NoaXBfZ2V0X2Rlc2MoZ2MsIHJldCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk2LDYgKzk2LDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKG9mX2dldF9uYW1lZF9ncGlvZF9mbGFncyk7CiAKK2ludCBvZl9nZXRfbmFtZWRfZ3Bpb19mbGFncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpsaXN0X25hbWUsCisJCQkgICAgaW50IGluZGV4LCBlbnVtIG9mX2dwaW9fZmxhZ3MgKmZsYWdzKQoreworCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gb2ZfZ2V0X25hbWVkX2dwaW9kX2ZsYWdzKG5wLCBsaXN0X25hbWUsIGluZGV4LCBmbGFncyk7CisKKwlpZiAoSVNfRVJSKGRlc2MpKQorCQlyZXR1cm4gUFRSX0VSUihkZXNjKTsKKwllbHNlCisJCXJldHVybiBkZXNjX3RvX2dwaW8oZGVzYyk7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2dldF9uYW1lZF9ncGlvX2ZsYWdzKTsKKwogLyoqCiAgKiBvZl9ncGlvX3NpbXBsZV94bGF0ZSAtIHRyYW5zbGF0ZSBncGlvX3NwZWMgdG8gdGhlIEdQSU8gbnVtYmVyIGFuZCBmbGFncwogICogQGdjOgkJcG9pbnRlciB0byB0aGUgZ3Bpb19jaGlwIHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggZjQ4ODE3ZC4uZDljOWNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC0xMzYzLDYgKzEzNjMsMTEgQEAKIAkJCQkgIGludCBwYXJlbnRfaXJxLAogCQkJCSAgaXJxX2Zsb3dfaGFuZGxlcl90IHBhcmVudF9oYW5kbGVyKQogeworCWlmIChncGlvY2hpcC0+Y2FuX3NsZWVwKSB7CisJCWNoaXBfZXJyKGdwaW9jaGlwLCAieW91IGNhbm5vdCBoYXZlIGNoYWluZWQgaW50ZXJydXB0cyBvbiBhIGNoaXAgdGhhdCBtYXkgc2xlZXBcbiIpOworCQlyZXR1cm47CisJfQorCiAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIocGFyZW50X2lycSwgcGFyZW50X2hhbmRsZXIpOwogCS8qCiAJICogVGhlIHBhcmVudCBpcnFjaGlwIGlzIGFscmVhZHkgdXNpbmcgdGhlIGNoaXBfZGF0YSBmb3IgdGhpcwpAQCAtMTM3Miw2ICsxMzc3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKTsKIAorLyoKKyAqIFRoaXMgbG9jayBjbGFzcyB0ZWxscyBsb2NrZGVwIHRoYXQgR1BJTyBpcnFzIGFyZSBpbiBhIGRpZmZlcmVudAorICogY2F0ZWdvcnkgdGhhbiB0aGVpciBwYXJlbnRzLCBzbyBpdCB3b24ndCByZXBvcnQgZmFsc2UgcmVjdXJzaW9uLgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9jaGlwX2lycV9sb2NrX2NsYXNzOworCiAvKioKICAqIGdwaW9jaGlwX2lycV9tYXAoKSAtIG1hcHMgYW4gSVJRIGludG8gYSBHUElPIGlycWNoaXAKICAqIEBkOiB0aGUgaXJxZG9tYWluIHVzZWQgYnkgdGhpcyBpcnFjaGlwCkBAIC0xMzg4LDIyICsxMzk5LDM1IEBACiAJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9IGQtPmhvc3RfZGF0YTsKIAogCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgY2hpcCk7CisJaXJxX3NldF9sb2NrZGVwX2NsYXNzKGlycSwgJmdwaW9jaGlwX2lycV9sb2NrX2NsYXNzKTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwLT5pcnFjaGlwLCBjaGlwLT5pcnFfaGFuZGxlcik7CisJLyogQ2hpcHMgdGhhdCBjYW4gc2xlZXAgbmVlZCBuZXN0ZWQgdGhyZWFkIGhhbmRsZXJzICovCisJaWYgKGNoaXAtPmNhbl9zbGVlcCkKKwkJaXJxX3NldF9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7CiAjaWZkZWYgQ09ORklHX0FSTQogCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKICNlbHNlCiAJaXJxX3NldF9ub3Byb2JlKGlycSk7CiAjZW5kaWYKLQlpcnFfc2V0X2lycV90eXBlKGlycSwgY2hpcC0+aXJxX2RlZmF1bHRfdHlwZSk7CisJLyoKKwkgKiBObyBzZXQtdXAgb2YgdGhlIGhhcmR3YXJlIHdpbGwgaGFwcGVuIGlmIElSUV9UWVBFX05PTkUKKwkgKiBpcyBwYXNzZWQgYXMgZGVmYXVsdCB0eXBlLgorCSAqLworCWlmIChjaGlwLT5pcnFfZGVmYXVsdF90eXBlICE9IElSUV9UWVBFX05PTkUpCisJCWlycV9zZXRfaXJxX3R5cGUoaXJxLCBjaGlwLT5pcnFfZGVmYXVsdF90eXBlKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBncGlvY2hpcF9pcnFfdW5tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEpCiB7CisJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9IGQtPmhvc3RfZGF0YTsKKwogI2lmZGVmIENPTkZJR19BUk0KIAlzZXRfaXJxX2ZsYWdzKGlycSwgMCk7CiAjZW5kaWYKKwlpZiAoY2hpcC0+Y2FuX3NsZWVwKQorCQlpcnFfc2V0X25lc3RlZF90aHJlYWQoaXJxLCAwKTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBOVUxMLCBOVUxMKTsKIAlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIE5VTEwpOwogfQpAQCAtMTQ3MSw3ICsxNDk1LDggQEAKICAqIEBmaXJzdF9pcnE6IGlmIG5vdCBkeW5hbWljYWxseSBhc3NpZ25lZCwgdGhlIGJhc2UgKGZpcnN0KSBJUlEgdG8KICAqIGFsbG9jYXRlIGdwaW9jaGlwIGlycXMgZnJvbQogICogQGhhbmRsZXI6IHRoZSBpcnEgaGFuZGxlciB0byB1c2UgKG9mdGVuIGEgcHJlZGVmaW5lZCBpcnEgY29yZSBmdW5jdGlvbikKLSAqIEB0eXBlOiB0aGUgZGVmYXVsdCB0eXBlIGZvciBJUlFzIG9uIHRoaXMgaXJxY2hpcAorICogQHR5cGU6IHRoZSBkZWZhdWx0IHR5cGUgZm9yIElSUXMgb24gdGhpcyBpcnFjaGlwLCBwYXNzIElSUV9UWVBFX05PTkUKKyAqIHRvIGhhdmUgdGhlIGNvcmUgYXZvaWQgc2V0dGluZyB1cCBhbnkgZGVmYXVsdCB0eXBlIGluIHRoZSBoYXJkd2FyZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNsb3NlbHkgYXNzb2NpYXRlcyBhIGNlcnRhaW4gaXJxY2hpcCB3aXRoIGEgY2VydGFpbgogICogZ3Bpb2NoaXAsIHByb3ZpZGluZyBhbiBpcnEgZG9tYWluIHRvIHRyYW5zbGF0ZSB0aGUgbG9jYWwgSVJRcyB0bwpAQCAtMjU3MSwyMiArMjU5NiwyNyBAQAogCW11dGV4X3VubG9jaygmZ3Bpb19sb29rdXBfbG9jayk7CiB9CiAKLSNpZmRlZiBDT05GSUdfT0YKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjICpvZl9maW5kX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IGlkeCwKIAkJCQkgICAgICBlbnVtIGdwaW9fbG9va3VwX2ZsYWdzICpmbGFncykKIHsKKwlzdGF0aWMgY29uc3QgY2hhciAqc3VmZml4ZXNbXSA9IHsgImdwaW9zIiwgImdwaW8iIH07CiAJY2hhciBwcm9wX25hbWVbMzJdOyAvKiAzMiBpcyBtYXggc2l6ZSBvZiBwcm9wZXJ0eSBuYW1lICovCiAJZW51bSBvZl9ncGlvX2ZsYWdzIG9mX2ZsYWdzOwogCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoY29uX2lkKQotCQlzbnByaW50Zihwcm9wX25hbWUsIDMyLCAiJXMtZ3Bpb3MiLCBjb25faWQpOwotCWVsc2UKLQkJc25wcmludGYocHJvcF9uYW1lLCAzMiwgImdwaW9zIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VmZml4ZXMpOyBpKyspIHsKKwkJaWYgKGNvbl9pZCkKKwkJCXNucHJpbnRmKHByb3BfbmFtZSwgMzIsICIlcy0lcyIsIGNvbl9pZCwgc3VmZml4ZXNbaV0pOworCQllbHNlCisJCQlzbnByaW50Zihwcm9wX25hbWUsIDMyLCAiJXMiLCBzdWZmaXhlc1tpXSk7CiAKLQlkZXNjID0gb2ZfZ2V0X25hbWVkX2dwaW9kX2ZsYWdzKGRldi0+b2Zfbm9kZSwgcHJvcF9uYW1lLCBpZHgsCi0JCQkJCSZvZl9mbGFncyk7CisJCWRlc2MgPSBvZl9nZXRfbmFtZWRfZ3Bpb2RfZmxhZ3MoZGV2LT5vZl9ub2RlLCBwcm9wX25hbWUsIGlkeCwKKwkJCQkJCSZvZl9mbGFncyk7CisJCWlmICghSVNfRVJSKGRlc2MpKQorCQkJYnJlYWs7CisJfQogCiAJaWYgKElTX0VSUihkZXNjKSkKIAkJcmV0dXJuIGRlc2M7CkBAIC0yNTk2LDE0ICsyNjI2LDYgQEAKIAogCXJldHVybiBkZXNjOwogfQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjICpvZl9maW5kX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGlkeCwKLQkJCQkgICAgICBlbnVtIGdwaW9fbG9va3VwX2ZsYWdzICpmbGFncykKLXsKLQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKLX0KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqYWNwaV9maW5kX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQsCiAJCQkJCXVuc2lnbmVkIGludCBpZHgsCkBAIC0yNzAxLDcgKzI3MjMsNyBAQAogfQogCiAvKioKLSAqIGdwaW9fZ2V0IC0gb2J0YWluIGEgR1BJTyBmb3IgYSBnaXZlbiBHUElPIGZ1bmN0aW9uCisgKiBncGlvZF9nZXQgLSBvYnRhaW4gYSBHUElPIGZvciBhIGdpdmVuIEdQSU8gZnVuY3Rpb24KICAqIEBkZXY6CUdQSU8gY29uc3VtZXIsIGNhbiBiZSBOVUxMIGZvciBzeXN0ZW0tZ2xvYmFsIEdQSU9zCiAgKiBAY29uX2lkOglmdW5jdGlvbiB3aXRoaW4gdGhlIEdQSU8gY29uc3VtZXIKICAqCkBAIC0yNzE2LDYgKzI3MzgsMjIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGdwaW9kX2dldCk7CiAKIC8qKgorICogZ3Bpb2RfZ2V0X29wdGlvbmFsIC0gb2J0YWluIGFuIG9wdGlvbmFsIEdQSU8gZm9yIGEgZ2l2ZW4gR1BJTyBmdW5jdGlvbgorICogQGRldjogR1BJTyBjb25zdW1lciwgY2FuIGJlIE5VTEwgZm9yIHN5c3RlbS1nbG9iYWwgR1BJT3MKKyAqIEBjb25faWQ6IGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1BJTyBjb25zdW1lcgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBncGlvZF9nZXQoKSwgZXhjZXB0IHRoYXQgd2hlbiBubyBHUElPIHdhcyBhc3NpZ25lZCB0bworICogdGhlIHJlcXVlc3RlZCBmdW5jdGlvbiBpdCB3aWxsIHJldHVybiBOVUxMLiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIGRyaXZlcnMKKyAqIHRoYXQgbmVlZCB0byBoYW5kbGUgb3B0aW9uYWwgR1BJT3MuCisgKi8KK3N0cnVjdCBncGlvX2Rlc2MgKl9fbXVzdF9jaGVjayBncGlvZF9nZXRfb3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICBjb25zdCBjaGFyICpjb25faWQpCit7CisJcmV0dXJuIGdwaW9kX2dldF9pbmRleF9vcHRpb25hbChkZXYsIGNvbl9pZCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChncGlvZF9nZXRfb3B0aW9uYWwpOworCisvKioKICAqIGdwaW9kX2dldF9pbmRleCAtIG9idGFpbiBhIEdQSU8gZnJvbSBhIG11bHRpLWluZGV4IEdQSU8gZnVuY3Rpb24KICAqIEBkZXY6CUdQSU8gY29uc3VtZXIsIGNhbiBiZSBOVUxMIGZvciBzeXN0ZW0tZ2xvYmFsIEdQSU9zCiAgKiBAY29uX2lkOglmdW5jdGlvbiB3aXRoaW4gdGhlIEdQSU8gY29uc3VtZXIKQEAgLTI3NzgsNiArMjgxNiwzMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb2RfZ2V0X2luZGV4KTsKIAogLyoqCisgKiBncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwgLSBvYnRhaW4gYW4gb3B0aW9uYWwgR1BJTyBmcm9tIGEgbXVsdGktaW5kZXggR1BJTworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24KKyAqIEBkZXY6IEdQSU8gY29uc3VtZXIsIGNhbiBiZSBOVUxMIGZvciBzeXN0ZW0tZ2xvYmFsIEdQSU9zCisgKiBAY29uX2lkOiBmdW5jdGlvbiB3aXRoaW4gdGhlIEdQSU8gY29uc3VtZXIKKyAqIEBpbmRleDogaW5kZXggb2YgdGhlIEdQSU8gdG8gb2J0YWluIGluIHRoZSBjb25zdW1lcgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBncGlvZF9nZXRfaW5kZXgoKSwgZXhjZXB0IHRoYXQgd2hlbiBubyBHUElPIHdpdGggdGhlCisgKiBzcGVjaWZpZWQgaW5kZXggd2FzIGFzc2lnbmVkIHRvIHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24gaXQgd2lsbCByZXR1cm4gTlVMTC4KKyAqIFRoaXMgaXMgY29udmVuaWVudCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gaGFuZGxlIG9wdGlvbmFsIEdQSU9zLgorICovCitzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sgZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCQljb25zdCBjaGFyICpjb25faWQsCisJCQkJCQkJdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gZ3Bpb2RfZ2V0X2luZGV4KGRldiwgY29uX2lkLCBpbmRleCk7CisJaWYgKElTX0VSUihkZXNjKSkgeworCQlpZiAoUFRSX0VSUihkZXNjKSA9PSAtRU5PRU5UKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGRlc2M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwpOworCisvKioKICAqIGdwaW9kX3B1dCAtIGRpc3Bvc2Ugb2YgYSBHUElPIGRlc2NyaXB0b3IKICAqIEBkZXNjOglHUElPIGRlc2NyaXB0b3IgdG8gZGlzcG9zZSBvZgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmggYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5oCmluZGV4IGNmMDkyOTQuLjFhNDEwM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmgKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuaApAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCitlbnVtIG9mX2dwaW9fZmxhZ3M7CisKIC8qKgogICogc3RydWN0IGFjcGlfZ3Bpb19pbmZvIC0gQUNQSSBHUElPIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKiBAZ3Bpb2ludDogaWYgJXRydWUgdGhpcyBHUElPIGlzIG9mIHR5cGUgR3Bpb0ludCBvdGhlcndpc2UgdHlwZSBpcyBHcGlvSW8KQEAgLTQ2LDQgKzQ4LDcgQEAKIGludCBncGlvY2hpcF9yZXF1ZXN0X293bl9kZXNjKHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmxhYmVsKTsKIHZvaWQgZ3Bpb2NoaXBfZnJlZV9vd25fZGVzYyhzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjKTsKIAorc3RydWN0IGdwaW9fZGVzYyAqb2ZfZ2V0X25hbWVkX2dwaW9kX2ZsYWdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCSAgIGNvbnN0IGNoYXIgKmxpc3RfbmFtZSwgaW50IGluZGV4LCBlbnVtIG9mX2dwaW9fZmxhZ3MgKmZsYWdzKTsKKwogI2VuZGlmIC8qIEdQSU9MSUJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggYzI2NzZiNS4uZWM1YzNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkgKi8KIAlpZiAoKHZibHJjID4gMCkgJiYgKGFiczY0KGRpZmZfbnMpID4gMTAwMDAwMCkpIHsKIAkJYXRvbWljX2luYygmZGV2LT52YmxhbmtbY3J0Y10uY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAKIAkvKiBJbnZhbGlkYXRlIGFsbCB0aW1lc3RhbXBzIHdoaWxlIHZibGFuayBpcnEncyBhcmUgb2ZmLiAqLwpAQCAtODY0LDkgKzg2NCw5IEBACiAJCXZibGFua3RpbWVzdGFtcChkZXYsIGNydGMsIHRzbG90KSA9IHRfdmJsYW5rOwogCX0KIAotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfYWRkKGRpZmYsICZkZXYtPnZibGFua1tjcnRjXS5jb3VudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogLyoqCkBAIC0xMzMwLDkgKzEzMzAsOSBAQAogCQkvKiBJbmNyZW1lbnQgY29va2VkIHZibGFuayBjb3VudC4gVGhpcyBhbHNvIGF0b21pY2FsbHkgY29tbWl0cwogCQkgKiB0aGUgdGltZXN0YW1wIGNvbXB1dGVkIGFib3ZlLgogCQkgKi8KLQkJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJYXRvbWljX2luYygmZGV2LT52YmxhbmtbY3J0Y10uY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9IGVsc2UgewogCQlEUk1fREVCVUcoImNydGMgJWQ6IFJlZHVuZGFudCB2YmxpcnEgaWdub3JlZC4gZGlmZl9ucyA9ICVkXG4iLAogCQkJICBjcnRjLCAoaW50KSBkaWZmX25zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9pcHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9pcHAuYwppbmRleCAwOTMxMmI4Li4zZDc4MTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1faXBwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2lwcC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkvKgogCSAqIFRoaXMgY2FzZSBpcyBzZWFyY2ggaXBwIGRyaXZlciBieSBwcm9wX2lkIGhhbmRsZS4KIAkgKiBzb21ldGltZXMsIGlwcCBzdWJzeXN0ZW0gZmluZCBkcml2ZXIgYnkgcHJvcF9pZC4KLQkgKiBlLmcgUEFVU0Ugc3RhdGUsIHF1ZXVlIGJ1ZiwgY29tbWFuZCBjb250cm8uCisJICogZS5nIFBBVVNFIHN0YXRlLCBxdWV1ZSBidWYsIGNvbW1hbmQgY29udHJvbC4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwcGRydiwgJmV4eW5vc19kcm1faXBwZHJ2X2xpc3QsIGRydl9saXN0KSB7CiAJCURSTV9ERUJVR19LTVMoImNvdW50WyVkXWlwcGRydlsweCV4XVxuIiwgY291bnQrKywgKGludClpcHBkcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggZjk4YmE0ZS4uMGI5OWRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0yMTU3LDcgKzIxNTcsNyBAQAogCQkJICogdXBkYXRlcyBiZWZvcmUKIAkJCSAqIHRoZSBjb3VudGVyIGluY3JlbWVudC4KIAkJCSAqLwotCQkJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOworCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCQlhdG9taWNfaW5jKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwogCiAJCQlrb2JqZWN0X3VldmVudF9lbnYoJmRldi0+cHJpbWFyeS0+a2Rldi0+a29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21haW4uYyBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21haW4uYwppbmRleCBmNWFlNTc0Li5hZmRmMzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tYWluLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfbWFpbi5jCkBAIC0yODMsNyArMjgzLDcgQEAKIGludCB1ZGxfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgdWRsX2RldmljZSAqdWRsOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FTk9NRU07CiAKIAlEUk1fREVCVUcoIlxuIik7CiAJdWRsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVkbF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKQEAgLTI5OSw3ICsyOTksNiBAQAogCX0KIAogCWlmICghdWRsX2FsbG9jX3VyYl9saXN0KGRldiwgV1JJVEVTX0lOX0ZMSUdIVCwgTUFYX1RSQU5TRkVSKSkgewotCQlyZXQgPSAtRU5PTUVNOwogCQlEUk1fRVJST1IoInVkbF9hbGxvY191cmJfbGlzdCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCA3YWY5ZDBiLi44MDBjOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTYwOCw3ICs2MDgsMTAgQEAKIAlTdXBwb3J0IGZvciBTYWl0ZWsgZGV2aWNlcyB0aGF0IGFyZSBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggdGhlCiAJSElEIHN0YW5kYXJkLgogCi0JQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdGhlIFBTMTAwMCBjb250cm9sbGVyLgorCVN1cHBvcnRlZCBkZXZpY2VzOgorCS0gUFMxMDAwIER1YWwgQW5hbG9nIFBhZAorCS0gUi5BLlQuNyBHYW1pbmcgTW91c2UKKwktIE0uTS5PLjcgR2FtaW5nIE1vdXNlCiAKIGNvbmZpZyBISURfU0FNU1VORwogCXRyaXN0YXRlICJTYW1zdW5nIEluZnJhUmVkIHJlbW90ZSBjb250cm9sIG9yIGtleWJvYXJkcyIKQEAgLTY1Nyw2ICs2NjAsMTQgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgU3VucGx1cyB3aXJlbGVzcyBkZXNrdG9wLgogCitjb25maWcgSElEX1JNSQorCXRyaXN0YXRlICJTeW5hcHRpY3MgUk1JNCBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBTeW5hcHRpY3MgUk1JNCB0b3VjaHBhZHMuCisJU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFN5bmFwdGljcyBSTUk0IHRvdWNocGFkcyBvdmVyIGkyYy1oaWQgb3IgdXNiaGlkCisJYW5kIHdhbnQgc3VwcG9ydCBmb3IgaXRzIHNwZWNpYWwgZnVuY3Rpb25hbGl0aWVzLgorCiBjb25maWcgSElEX0dSRUVOQVNJQQogCXRyaXN0YXRlICJHcmVlbkFzaWEgKFByb2R1Y3QgSUQgMHgxMikgZ2FtZSBjb250cm9sbGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBISUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKaW5kZXggZmM3MTJkZC4uYTZmYTZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKQEAgLTk3LDYgKzk3LDcgQEAKIAloaWQtcm9jY2F0LWFydm8ubyBoaWQtcm9jY2F0LWlza3UubyBoaWQtcm9jY2F0LWtvbmUubyBcCiAJaGlkLXJvY2NhdC1rb25lcGx1cy5vIGhpZC1yb2NjYXQta29uZXB1cmUubyBoaWQtcm9jY2F0LWtvdmFwbHVzLm8gXAogCWhpZC1yb2NjYXQtbHVhLm8gaGlkLXJvY2NhdC1weXJhLm8gaGlkLXJvY2NhdC1yeW9zLm8gaGlkLXJvY2NhdC1zYXZ1Lm8KK29iai0kKENPTkZJR19ISURfUk1JKQkJKz0gaGlkLXJtaS5vCiBvYmotJChDT05GSUdfSElEX1NBSVRFSykJKz0gaGlkLXNhaXRlay5vCiBvYmotJChDT05GSUdfSElEX1NBTVNVTkcpCSs9IGhpZC1zYW1zdW5nLm8KIG9iai0kKENPTkZJR19ISURfU01BUlRKT1lQTFVTKQkrPSBoaWQtc2pveS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBkYTUyMjc5Li44ZWQ2NmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTc3OSw2ICs3NzksMTQgQEAKIAkgICAgKGhpZC0+Z3JvdXAgPT0gSElEX0dST1VQX01VTFRJVE9VQ0gpKQogCQloaWQtPmdyb3VwID0gSElEX0dST1VQX01VTFRJVE9VQ0hfV0lOXzg7CiAKKwkvKgorCSogVmVuZG9yIHNwZWNpZmljIGhhbmRsaW5ncworCSovCisJaWYgKChoaWQtPnZlbmRvciA9PSBVU0JfVkVORE9SX0lEX1NZTkFQVElDUykgJiYKKwkgICAgKGhpZC0+Z3JvdXAgPT0gSElEX0dST1VQX0dFTkVSSUMpKQorCQkvKiBoaWQtcm1pIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhlbSwgbm90IGhpZC1nZW5lcmljICovCisJCWhpZC0+Z3JvdXAgPSBISURfR1JPVVBfUk1JOworCiAJdmZyZWUocGFyc2VyKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg0Miw3ICs4NTAsMTcgQEAKIAkgKiAtPm51bWJlcmVkIGJlaW5nIGNoZWNrZWQsIHdoaWNoIG1heSBub3QgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZW4KIAkgKiBkcml2ZXJzIGdvIHRvIGFjY2VzcyByZXBvcnQgdmFsdWVzLgogCSAqLwotCXJlcG9ydCA9IGhpZC0+cmVwb3J0X2VudW1bdHlwZV0ucmVwb3J0X2lkX2hhc2hbaWRdOworCWlmIChpZCA9PSAwKSB7CisJCS8qCisJCSAqIFZhbGlkYXRpbmcgb24gaWQgMCBtZWFucyB3ZSBzaG91bGQgZXhhbWluZSB0aGUgZmlyc3QKKwkJICogcmVwb3J0IGluIHRoZSBsaXN0LgorCQkgKi8KKwkJcmVwb3J0ID0gbGlzdF9lbnRyeSgKKwkJCQloaWQtPnJlcG9ydF9lbnVtW3R5cGVdLnJlcG9ydF9saXN0Lm5leHQsCisJCQkJc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCX0gZWxzZSB7CisJCXJlcG9ydCA9IGhpZC0+cmVwb3J0X2VudW1bdHlwZV0ucmVwb3J0X2lkX2hhc2hbaWRdOworCX0KIAlpZiAoIXJlcG9ydCkgewogCQloaWRfZXJyKGhpZCwgIm1pc3NpbmcgJXMgJXVcbiIsIGhpZF9yZXBvcnRfbmFtZXNbdHlwZV0sIGlkKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xODY4LDcgKzE4ODYsMTEgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9SWU9TX01LX1BSTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9TQVZVKSB9LAogI2VuZGlmCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSElEX1NBSVRFSykKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0FJVEVLLCBVU0JfREVWSUNFX0lEX1NBSVRFS19QUzEwMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBSVRFSywgVVNCX0RFVklDRV9JRF9TQUlURUtfUkFUNykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0FJVEVLLCBVU0JfREVWSUNFX0lEX1NBSVRFS19NTU83KSB9LAorI2VuZGlmCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19XSVJFTEVTU19LQkRfTU9VU0UpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NLWUNBQkxFLCBVU0JfREVWSUNFX0lEX1NLWUNBQkxFX1dJUkVMRVNTX1BSRVNFTlRFUikgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jIGIvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKaW5kZXggNTNiNzcxZC4uODRjM2NiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKQEAgLTE2NSw2ICsxNjUsOCBAQAogICAgIHswLCAweDUzLCAiRGV2aWNlSW5kZXgifSwKICAgICB7MCwgMHg1NCwgIkNvbnRhY3RDb3VudCJ9LAogICAgIHswLCAweDU1LCAiQ29udGFjdE1heGltdW1OdW1iZXIifSwKKyAgICB7MCwgMHg1QSwgIlNlY29uZGFyeUJhcnJlbFN3aXRjaCJ9LAorICAgIHswLCAweDVCLCAiVHJhbnNkdWNlclNlcmlhbE51bWJlciJ9LAogICB7IDE1LCAwLCAiUGh5c2ljYWxJbnRlcmZhY2VEZXZpY2UiIH0sCiAgICAgezAsIDB4MDAsICJVbmRlZmluZWQifSwKICAgICB7MCwgMHgwMSwgIlBoeXNpY2FsX0ludGVyZmFjZV9EZXZpY2UifSwKQEAgLTI3Miw2ICsyNzQsODUgQEAKICAgICB7MCwgMHhBQSwgIlNoYXJlZF9QYXJhbWV0ZXJfQmxvY2tzIn0sCiAgICAgezAsIDB4QUIsICJDcmVhdGVfTmV3X0VmZmVjdF9SZXBvcnQifSwKICAgICB7MCwgMHhBQywgIlJBTV9Qb29sX0F2YWlsYWJsZSJ9LAorICB7ICAweDIwLCAwLCAiU2Vuc29yIiB9LAorICAgIHsgMHgyMCwgMHgwMSwgIlNlbnNvciIgfSwKKyAgICB7IDB4MjAsIDB4MTAsICJCaW9tZXRyaWMiIH0sCisgICAgICB7IDB4MjAsIDB4MTEsICJCaW9tZXRyaWNIdW1hblByZXNlbmNlIiB9LAorICAgICAgeyAweDIwLCAweDEyLCAiQmlvbWV0cmljSHVtYW5Qcm94aW1pdHkiIH0sCisgICAgICB7IDB4MjAsIDB4MTMsICJCaW9tZXRyaWNIdW1hblRvdWNoIiB9LAorICAgIHsgMHgyMCwgMHgyMCwgIkVsZWN0cmljYWwiIH0sCisgICAgICB7IDB4MjAsIDB4MjEsICJFbGVjdHJpY2FsQ2FwYWNpdGFuY2UiIH0sCisgICAgICB7IDB4MjAsIDB4MjIsICJFbGVjdHJpY2FsQ3VycmVudCIgfSwKKyAgICAgIHsgMHgyMCwgMHgyMywgIkVsZWN0cmljYWxQb3dlciIgfSwKKyAgICAgIHsgMHgyMCwgMHgyNCwgIkVsZWN0cmljYWxJbmR1Y3RhbmNlIiB9LAorICAgICAgeyAweDIwLCAweDI1LCAiRWxlY3RyaWNhbFJlc2lzdGFuY2UiIH0sCisgICAgICB7IDB4MjAsIDB4MjYsICJFbGVjdHJpY2FsVm9sdGFnZSIgfSwKKyAgICAgIHsgMHgyMCwgMHgyNywgIkVsZWN0cmljYWxQb3RlbmlvbWV0ZXIiIH0sCisgICAgICB7IDB4MjAsIDB4MjgsICJFbGVjdHJpY2FsRnJlcXVlbmN5IiB9LAorICAgICAgeyAweDIwLCAweDI5LCAiRWxlY3RyaWNhbFBlcmlvZCIgfSwKKyAgICB7IDB4MjAsIDB4MzAsICJFbnZpcm9ubWVudGFsIiB9LAorICAgICAgeyAweDIwLCAweDMxLCAiRW52aXJvbm1lbnRhbEF0bW9zcGhlcmljUHJlc3N1cmUiIH0sCisgICAgICB7IDB4MjAsIDB4MzIsICJFbnZpcm9ubWVudGFsSHVtaWRpdHkiIH0sCisgICAgICB7IDB4MjAsIDB4MzMsICJFbnZpcm9ubWVudGFsVGVtcGVyYXR1cmUiIH0sCisgICAgICB7IDB4MjAsIDB4MzQsICJFbnZpcm9ubWVudGFsV2luZERpcmVjdGlvbiIgfSwKKyAgICAgIHsgMHgyMCwgMHgzNSwgIkVudmlyb25tZW50YWxXaW5kU3BlZWQiIH0sCisgICAgeyAweDIwLCAweDQwLCAiTGlnaHQiIH0sCisgICAgICB7IDB4MjAsIDB4NDEsICJMaWdodEFtYmllbnRMaWdodCIgfSwKKyAgICAgIHsgMHgyMCwgMHg0MiwgIkxpZ2h0Q29uc3VtZXJJbmZyYXJlZCIgfSwKKyAgICB7IDB4MjAsIDB4NTAsICJMb2NhdGlvbiIgfSwKKyAgICAgIHsgMHgyMCwgMHg1MSwgIkxvY2F0aW9uQnJvYWRjYXN0IiB9LAorICAgICAgeyAweDIwLCAweDUyLCAiTG9jYXRpb25EZWFkUmVja29uaW5nIiB9LAorICAgICAgeyAweDIwLCAweDUzLCAiTG9jYXRpb25HUFMiIH0sCisgICAgICB7IDB4MjAsIDB4NTQsICJMb2NhdGlvbkxvb2t1cCIgfSwKKyAgICAgIHsgMHgyMCwgMHg1NSwgIkxvY2F0aW9uT3RoZXIiIH0sCisgICAgICB7IDB4MjAsIDB4NTYsICJMb2NhdGlvblN0YXRpYyIgfSwKKyAgICAgIHsgMHgyMCwgMHg1NywgIkxvY2F0aW9uVHJpYW5ndWxhdGlvbiIgfSwKKyAgICB7IDB4MjAsIDB4NjAsICJNZWNoYW5pY2FsIiB9LAorICAgICAgeyAweDIwLCAweDYxLCAiTWVjaGFuaWNhbEJvb2xlYW5Td2l0Y2giIH0sCisgICAgICB7IDB4MjAsIDB4NjIsICJNZWNoYW5pY2FsQm9vbGVhblN3aXRjaEFycmF5IiB9LAorICAgICAgeyAweDIwLCAweDYzLCAiTWVjaGFuaWNhbE11bHRpdmFsdWVTd2l0Y2giIH0sCisgICAgICB7IDB4MjAsIDB4NjQsICJNZWNoYW5pY2FsRm9yY2UiIH0sCisgICAgICB7IDB4MjAsIDB4NjUsICJNZWNoYW5pY2FsUHJlc3N1cmUiIH0sCisgICAgICB7IDB4MjAsIDB4NjYsICJNZWNoYW5pY2FsU3RyYWluIiB9LAorICAgICAgeyAweDIwLCAweDY3LCAiTWVjaGFuaWNhbFdlaWdodCIgfSwKKyAgICAgIHsgMHgyMCwgMHg2OCwgIk1lY2hhbmljYWxIYXB0aWNWaWJyYXRvciIgfSwKKyAgICAgIHsgMHgyMCwgMHg2OSwgIk1lY2hhbmljYWxIYWxsRWZmZWN0U3dpdGNoIiB9LAorICAgIHsgMHgyMCwgMHg3MCwgIk1vdGlvbiIgfSwKKyAgICAgIHsgMHgyMCwgMHg3MSwgIk1vdGlvbkFjY2VsZXJvbWV0ZXIxRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg3MiwgIk1vdGlvbkFjY2VsZXJvbWV0ZXIyRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg3MywgIk1vdGlvbkFjY2VsZXJvbWV0ZXIzRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg3NCwgIk1vdGlvbkd5cm9tZXRlcjFEIiB9LAorICAgICAgeyAweDIwLCAweDc1LCAiTW90aW9uR3lyb21ldGVyMkQiIH0sCisgICAgICB7IDB4MjAsIDB4NzYsICJNb3Rpb25HeXJvbWV0ZXIzRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg3NywgIk1vdGlvbk1vdGlvbkRldGVjdG9yIiB9LAorICAgICAgeyAweDIwLCAweDc4LCAiTW90aW9uU3BlZWRvbWV0ZXIiIH0sCisgICAgICB7IDB4MjAsIDB4NzksICJNb3Rpb25BY2NlbGVyb21ldGVyIiB9LAorICAgICAgeyAweDIwLCAweDdBLCAiTW90aW9uR3lyb21ldGVyIiB9LAorICAgIHsgMHgyMCwgMHg4MCwgIk9yaWVudGF0aW9uIiB9LAorICAgICAgeyAweDIwLCAweDgxLCAiT3JpZW50YXRpb25Db21wYXNzMUQiIH0sCisgICAgICB7IDB4MjAsIDB4ODIsICJPcmllbnRhdGlvbkNvbXBhc3MyRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg4MywgIk9yaWVudGF0aW9uQ29tcGFzczNEIiB9LAorICAgICAgeyAweDIwLCAweDg0LCAiT3JpZW50YXRpb25JbmNsaW5vbWV0ZXIxRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg4NSwgIk9yaWVudGF0aW9uSW5jbGlub21ldGVyMkQiIH0sCisgICAgICB7IDB4MjAsIDB4ODYsICJPcmllbnRhdGlvbkluY2xpbm9tZXRlcjNEIiB9LAorICAgICAgeyAweDIwLCAweDg3LCAiT3JpZW50YXRpb25EaXN0YW5jZTFEIiB9LAorICAgICAgeyAweDIwLCAweDg4LCAiT3JpZW50YXRpb25EaXN0YW5jZTJEIiB9LAorICAgICAgeyAweDIwLCAweDg5LCAiT3JpZW50YXRpb25EaXN0YW5jZTNEIiB9LAorICAgICAgeyAweDIwLCAweDhBLCAiT3JpZW50YXRpb25EZXZpY2VPcmllbnRhdGlvbiIgfSwKKyAgICAgIHsgMHgyMCwgMHg4QiwgIk9yaWVudGF0aW9uQ29tcGFzcyIgfSwKKyAgICAgIHsgMHgyMCwgMHg4QywgIk9yaWVudGF0aW9uSW5jbGlub21ldGVyIiB9LAorICAgICAgeyAweDIwLCAweDhELCAiT3JpZW50YXRpb25EaXN0YW5jZSIgfSwKKyAgICB7IDB4MjAsIDB4OTAsICJTY2FubmVyIiB9LAorICAgICAgeyAweDIwLCAweDkxLCAiU2Nhbm5lckJhcmNvZGUiIH0sCisgICAgICB7IDB4MjAsIDB4OTEsICJTY2FubmVyUkZJRCIgfSwKKyAgICAgIHsgMHgyMCwgMHg5MSwgIlNjYW5uZXJORkMiIH0sCisgICAgeyAweDIwLCAweEEwLCAiVGltZSIgfSwKKyAgICAgIHsgMHgyMCwgMHhBMSwgIlRpbWVBbGFybVRpbWVyIiB9LAorICAgICAgeyAweDIwLCAweEEyLCAiVGltZVJlYWxUaW1lQ2xvY2siIH0sCisgICAgeyAweDIwLCAweEUwLCAiT3RoZXIiIH0sCisgICAgICB7IDB4MjAsIDB4RTEsICJPdGhlckN1c3RvbSIgfSwKKyAgICAgIHsgMHgyMCwgMHhFMiwgIk90aGVyR2VuZXJpYyIgfSwKKyAgICAgIHsgMHgyMCwgMHhFMywgIk90aGVyR2VuZXJpY0VudW1lcmF0b3IiIH0sCiAgIHsgMHg4NCwgMCwgIlBvd2VyIERldmljZSIgfSwKICAgICB7IDB4ODQsIDB4MDIsICJQcmVzZW50U3RhdHVzIiB9LAogICAgIHsgMHg4NCwgMHgwMywgIkNoYW5nZVN0YXR1cyIgfSwKQEAgLTg1NSw2ICs5MzYsMTYgQEAKIAlbS0VZX0tCRElMTFVNRE9XTl0gPSAiS2JkSWxsdW1pbmF0aW9uRG93biIsCiAJW0tFWV9LQkRJTExVTVVQXSA9ICJLYmRJbGx1bWluYXRpb25VcCIsCiAJW0tFWV9TV0lUQ0hWSURFT01PREVdID0gIlN3aXRjaFZpZGVvTW9kZSIsCisJW0tFWV9CVVRUT05DT05GSUddID0gIkJ1dHRvbkNvbmZpZyIsCisJW0tFWV9UQVNLTUFOQUdFUl0gPSAiVGFza01hbmFnZXIiLAorCVtLRVlfSk9VUk5BTF0gPSAiSm91cm5hbCIsCisJW0tFWV9DT05UUk9MUEFORUxdID0gIkNvbnRyb2xQYW5lbCIsCisJW0tFWV9BUFBTRUxFQ1RdID0gIkFwcFNlbGVjdCIsCisJW0tFWV9TQ1JFRU5TQVZFUl0gPSAiU2NyZWVuU2F2ZXIiLAorCVtLRVlfVk9JQ0VDT01NQU5EXSA9ICJWb2ljZUNvbW1hbmQiLAorCVtLRVlfQlJJR0hUTkVTU19NSU5dID0gIkJyaWdodG5lc3NNaW4iLAorCVtLRVlfQlJJR0hUTkVTU19NQVhdID0gIkJyaWdodG5lc3NNYXgiLAorCVtLRVlfQlJJR0hUTkVTU19BVVRPXSA9ICJCcmlnaHRuZXNzQXV0byIsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqcmVsYXRpdmVzW1JFTF9NQVggKyAxXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCAzNGJiMjIwLi42ZDAwYmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC00NjMsNiArNDYzLDcgQEAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NUTV8wICAgICAgICAgICAgIDB4MDQ4MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NUTV9ISURfU0VOU09SICAgIDB4OTFkMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1NUTV9ISURfU0VOU09SXzEgIDB4OTEwMAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfSU9OCQkweDE1ZTQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9JQ0FERQkJMHgwMTMyCkBAIC02MzMsNiArNjM0LDkgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCCTB4MDcxMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX01TX0RJR0lUQUxfTUVESUFfM0sJMHgwNzMwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfQ09NRk9SVF9NT1VTRV80NTAwCTB4MDc2YworI2RlZmluZSBVU0JfREVWSUNFX0lEX01TX1NVUkZBQ0VfUFJPXzIgICAweDA3OTkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NU19UT1VDSF9DT1ZFUl8yICAgMHgwN2E3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfVFlQRV9DT1ZFUl8yICAgIDB4MDdhOQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTU9KTwkJMHg4MjgyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkVUUk9fQURBUFRFUgkweDMyMDEKQEAgLTc2NCwxMSArNzY4LDE2IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBSVRFS19QUzEwMDAJMHgwNjIxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JBVDcJMHgwY2Q3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FJVEVLX01NTzcJMHgwY2QwCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDA0MTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URQkweDAwMDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX1dJUkVMRVNTX0tCRF9NT1VTRQkweDA2MDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1NFTUlDTwkJCTB4MWEyYworI2RlZmluZSBVU0JfREVWSUNFX0lEX1NFTUlDT19VU0JfS0VZS09BUkQJMHgwMDIzCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TRU5OSEVJU0VSCTB4MTM5NQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NFTk5IRUlTRVJfQlRENTAwVVNCCTB4MDAyYwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IGU3ZThiMTkuLjI2MTlmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC02ODQsOSArNjg0LDE0IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4NDY6IC8qIFRhYmxldFBpY2sgKi8KKwkJY2FzZSAweDVhOiAvKiBTZWNvbmRhcnlCYXJyZWxTd2l0Y2ggKi8KIAkJCW1hcF9rZXlfY2xlYXIoQlROX1NUWUxVUzIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSAweDViOiAvKiBUcmFuc2R1Y2VyU2VyaWFsTnVtYmVyICovCisJCQlzZXRfYml0KE1TQ19TRVJJQUwsIGlucHV0LT5tc2NiaXQpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDogIGdvdG8gdW5rbm93bjsKIAkJfQogCQlicmVhazsKQEAgLTcyMSw2ICs3MjYsMTMgQEAKIAkJY2FzZSAweDA2YzogbWFwX2tleV9jbGVhcihLRVlfWUVMTE9XKTsJCWJyZWFrOwogCQljYXNlIDB4MDZkOiBtYXBfa2V5X2NsZWFyKEtFWV9aT09NKTsJCWJyZWFrOwogCisJCWNhc2UgMHgwNmY6IG1hcF9rZXlfY2xlYXIoS0VZX0JSSUdIVE5FU1NVUCk7CQlicmVhazsKKwkJY2FzZSAweDA3MDogbWFwX2tleV9jbGVhcihLRVlfQlJJR0hUTkVTU0RPV04pOwkJYnJlYWs7CisJCWNhc2UgMHgwNzI6IG1hcF9rZXlfY2xlYXIoS0VZX0JSSUdIVE5FU1NfVE9HR0xFKTsJYnJlYWs7CisJCWNhc2UgMHgwNzM6IG1hcF9rZXlfY2xlYXIoS0VZX0JSSUdIVE5FU1NfTUlOKTsJCWJyZWFrOworCQljYXNlIDB4MDc0OiBtYXBfa2V5X2NsZWFyKEtFWV9CUklHSFRORVNTX01BWCk7CQlicmVhazsKKwkJY2FzZSAweDA3NTogbWFwX2tleV9jbGVhcihLRVlfQlJJR0hUTkVTU19BVVRPKTsJCWJyZWFrOworCiAJCWNhc2UgMHgwODI6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPX05FWFQpOwlicmVhazsKIAkJY2FzZSAweDA4MzogbWFwX2tleV9jbGVhcihLRVlfTEFTVCk7CQlicmVhazsKIAkJY2FzZSAweDA4NDogbWFwX2tleV9jbGVhcihLRVlfRU5URVIpOwkJYnJlYWs7CkBAIC03NjEsNiArNzczLDcgQEAKIAkJY2FzZSAweDBiZjogbWFwX2tleV9jbGVhcihLRVlfU0xPVyk7CQlicmVhazsKIAogCQljYXNlIDB4MGNkOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZUEFVU0UpOwlicmVhazsKKwkJY2FzZSAweDBjZjogbWFwX2tleV9jbGVhcihLRVlfVk9JQ0VDT01NQU5EKTsJYnJlYWs7CiAJCWNhc2UgMHgwZTA6IG1hcF9hYnNfY2xlYXIoQUJTX1ZPTFVNRSk7CQlicmVhazsKIAkJY2FzZSAweDBlMjogbWFwX2tleV9jbGVhcihLRVlfTVVURSk7CQlicmVhazsKIAkJY2FzZSAweDBlNTogbWFwX2tleV9jbGVhcihLRVlfQkFTU0JPT1NUKTsJYnJlYWs7CkBAIC03NjgsNiArNzgxLDcgQEAKIAkJY2FzZSAweDBlYTogbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FRE9XTik7CWJyZWFrOwogCQljYXNlIDB4MGY1OiBtYXBfa2V5X2NsZWFyKEtFWV9TTE9XKTsJCWJyZWFrOwogCisJCWNhc2UgMHgxODE6IG1hcF9rZXlfY2xlYXIoS0VZX0JVVFRPTkNPTkZJRyk7CWJyZWFrOwogCQljYXNlIDB4MTgyOiBtYXBfa2V5X2NsZWFyKEtFWV9CT09LTUFSS1MpOwlicmVhazsKIAkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOwogCQljYXNlIDB4MTg0OiBtYXBfa2V5X2NsZWFyKEtFWV9XT1JEUFJPQ0VTU09SKTsJYnJlYWs7CkBAIC03ODEsNiArNzk1LDggQEAKIAkJY2FzZSAweDE4YzogbWFwX2tleV9jbGVhcihLRVlfVk9JQ0VNQUlMKTsJYnJlYWs7CiAJCWNhc2UgMHgxOGQ6IG1hcF9rZXlfY2xlYXIoS0VZX0FERFJFU1NCT09LKTsJYnJlYWs7CiAJCWNhc2UgMHgxOGU6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEVOREFSKTsJYnJlYWs7CisJCWNhc2UgMHgxOGY6IG1hcF9rZXlfY2xlYXIoS0VZX1RBU0tNQU5BR0VSKTsJYnJlYWs7CisJCWNhc2UgMHgxOTA6IG1hcF9rZXlfY2xlYXIoS0VZX0pPVVJOQUwpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOTE6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTkFOQ0UpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOTI6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEMpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOTM6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVlFUik7CQlicmVhazsKQEAgLTc4OSwxMiArODA1LDE1IEBACiAJCWNhc2UgMHgxOTk6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQVQpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0xPR09GRik7CQlicmVhazsKIAkJY2FzZSAweDE5ZTogbWFwX2tleV9jbGVhcihLRVlfQ09GRkVFKTsJCWJyZWFrOworCQljYXNlIDB4MTlmOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05UUk9MUEFORUwpOwkJYnJlYWs7CisJCWNhc2UgMHgxYTI6IG1hcF9rZXlfY2xlYXIoS0VZX0FQUFNFTEVDVCk7CQlicmVhazsKIAkJY2FzZSAweDFhMzogbWFwX2tleV9jbGVhcihLRVlfTkVYVCk7CQlicmVhazsKIAkJY2FzZSAweDFhNDogbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVMpOwlicmVhazsKIAkJY2FzZSAweDFhNjogbWFwX2tleV9jbGVhcihLRVlfSEVMUCk7CQlicmVhazsKIAkJY2FzZSAweDFhNzogbWFwX2tleV9jbGVhcihLRVlfRE9DVU1FTlRTKTsJYnJlYWs7CiAJCWNhc2UgMHgxYWI6IG1hcF9rZXlfY2xlYXIoS0VZX1NQRUxMQ0hFQ0spOwlicmVhazsKIAkJY2FzZSAweDFhZTogbWFwX2tleV9jbGVhcihLRVlfS0VZQk9BUkQpOwlicmVhazsKKwkJY2FzZSAweDFiMTogbWFwX2tleV9jbGVhcihLRVlfU0NSRUVOU0FWRVIpOwkJYnJlYWs7CiAJCWNhc2UgMHgxYjQ6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTEUpOwkJYnJlYWs7CiAJCWNhc2UgMHgxYjY6IG1hcF9rZXlfY2xlYXIoS0VZX0lNQUdFUyk7CQlicmVhazsKIAkJY2FzZSAweDFiNzogbWFwX2tleV9jbGVhcihLRVlfQVVESU8pOwkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm1pLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1MWM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1ybWkuYwpAQCAtMCwwICsxLDkyMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMgQW5kcmV3IER1Z2dhbiA8YWR1Z2dhbkBzeW5hcHRpY3MuY29tPgorICogIENvcHlyaWdodCAoYykgMjAxMyBTeW5hcHRpY3MgSW5jb3Jwb3JhdGVkCisgKiAgQ29weXJpZ2h0IChjKSAyMDE0IEJlbmphbWluIFRpc3NvaXJlcyA8YmVuamFtaW4udGlzc29pcmVzQGdtYWlsLmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTQgUmVkIEhhdCwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBSTUlfTU9VU0VfUkVQT1JUX0lECQkweDAxIC8qIE1vdXNlIGVtdWxhdGlvbiBSZXBvcnQgKi8KKyNkZWZpbmUgUk1JX1dSSVRFX1JFUE9SVF9JRAkJMHgwOSAvKiBPdXRwdXQgUmVwb3J0ICovCisjZGVmaW5lIFJNSV9SRUFEX0FERFJfUkVQT1JUX0lECQkweDBhIC8qIE91dHB1dCBSZXBvcnQgKi8KKyNkZWZpbmUgUk1JX1JFQURfREFUQV9SRVBPUlRfSUQJCTB4MGIgLyogSW5wdXQgUmVwb3J0ICovCisjZGVmaW5lIFJNSV9BVFROX1JFUE9SVF9JRAkJMHgwYyAvKiBJbnB1dCBSZXBvcnQgKi8KKyNkZWZpbmUgUk1JX1NFVF9STUlfTU9ERV9SRVBPUlRfSUQJMHgwZiAvKiBGZWF0dXJlIFJlcG9ydCAqLworCisvKiBmbGFncyAqLworI2RlZmluZSBSTUlfUkVBRF9SRVFVRVNUX1BFTkRJTkcJQklUKDApCisjZGVmaW5lIFJNSV9SRUFEX0RBVEFfUEVORElORwkJQklUKDEpCisjZGVmaW5lIFJNSV9TVEFSVEVECQkJQklUKDIpCisKK2VudW0gcm1pX21vZGVfdHlwZSB7CisJUk1JX01PREVfT0ZGCQkJPSAwLAorCVJNSV9NT0RFX0FUVE5fUkVQT1JUUwkJPSAxLAorCVJNSV9NT0RFX05PX1BBQ0tFRF9BVFROX1JFUE9SVFMJPSAyLAorfTsKKworc3RydWN0IHJtaV9mdW5jdGlvbiB7CisJdW5zaWduZWQgcGFnZTsJCQkvKiBwYWdlIG9mIHRoZSBmdW5jdGlvbiAqLworCXUxNiBxdWVyeV9iYXNlX2FkZHI7CQkvKiBiYXNlIGFkZHJlc3MgZm9yIHF1ZXJpZXMgKi8KKwl1MTYgY29tbWFuZF9iYXNlX2FkZHI7CQkvKiBiYXNlIGFkZHJlc3MgZm9yIGNvbW1hbmRzICovCisJdTE2IGNvbnRyb2xfYmFzZV9hZGRyOwkJLyogYmFzZSBhZGRyZXNzIGZvciBjb250cm9scyAqLworCXUxNiBkYXRhX2Jhc2VfYWRkcjsJCS8qIGJhc2UgYWRkcmVzcyBmb3IgZGF0YXMgKi8KKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2Jhc2U7CS8qIGNyb3NzLWZ1bmN0aW9uIGludGVycnVwdCBudW1iZXIKKwkJCQkJICogKHVuaXEgaW4gdGhlIGRldmljZSkqLworCXVuc2lnbmVkIGludCBpbnRlcnJ1cHRfY291bnQ7CS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzICovCisJdW5zaWduZWQgaW50IHJlcG9ydF9zaXplOwkvKiBzaXplIG9mIGEgcmVwb3J0ICovCisJdW5zaWduZWQgbG9uZyBpcnFfbWFzazsJCS8qIG1hc2sgb2YgdGhlIGludGVycnVwdHMKKwkJCQkJICogKHRvIGJlIGFwcGxpZWQgYWdhaW5zdCBBVFROIElSUSkgKi8KK307CisKKy8qKgorICogc3RydWN0IHJtaV9kYXRhIC0gc3RvcmVzIGluZm9ybWF0aW9uIGZvciBoaWQgY29tbXVuaWNhdGlvbgorICoKKyAqIEBwYWdlX211dGV4OiBMb2NrcyBjdXJyZW50IHBhZ2UgdG8gYXZvaWQgY2hhbmdpbmcgcGFnZXMgaW4gdW5leHBlY3RlZCB3YXlzLgorICogQHBhZ2U6IEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHZpcnR1YWwgcGFnZQorICoKKyAqIEB3YWl0OiBVc2VkIGZvciB3YWl0aW5nIGZvciByZWFkIGRhdGEKKyAqCisgKiBAd3JpdGVSZXBvcnQ6IG91dHB1dCBidWZmZXIgd2hlbiB3cml0aW5nIFJNSSByZWdpc3RlcnMKKyAqIEByZWFkUmVwb3J0OiBpbnB1dCBidWZmZXIgd2hlbiByZWFkaW5nIFJNSSByZWdpc3RlcnMKKyAqCisgKiBAaW5wdXRfcmVwb3J0X3NpemU6IHNpemUgb2YgYW4gaW5wdXQgcmVwb3J0IChhZHZlcnRpc2VkIGJ5IEhJRCkKKyAqIEBvdXRwdXRfcmVwb3J0X3NpemU6IHNpemUgb2YgYW4gb3V0cHV0IHJlcG9ydCAoYWR2ZXJ0aXNlZCBieSBISUQpCisgKgorICogQGZsYWdzOiBmbGFncyBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlIChzdGFydGVkLCByZWFkaW5nLCBldGMuLi4pCisgKgorICogQGYxMTogcGxhY2Vob2xkZXIgb2YgaW50ZXJuYWwgUk1JIGZ1bmN0aW9uIEYxMSBkZXNjcmlwdGlvbgorICogQGYzMDogcGxhY2Vob2xkZXIgb2YgaW50ZXJuYWwgUk1JIGZ1bmN0aW9uIEYzMCBkZXNjcmlwdGlvbgorICoKKyAqIEBtYXhfZmluZ2VyczogbWF4aW11bSBmaW5nZXIgY291bnQgcmVwb3J0ZWQgYnkgdGhlIGRldmljZQorICogQG1heF94OiBtYXhpbXVtIHggdmFsdWUgcmVwb3J0ZWQgYnkgdGhlIGRldmljZQorICogQG1heF95OiBtYXhpbXVtIHkgdmFsdWUgcmVwb3J0ZWQgYnkgdGhlIGRldmljZQorICoKKyAqIEBncGlvX2xlZF9jb3VudDogY291bnQgb2YgR1BJT3MgKyBMRURzIHJlcG9ydGVkIGJ5IEYzMAorICogQGJ1dHRvbl9jb3VudDogYWN0dWFsIHBoeXNpY2FsIGJ1dHRvbnMgY291bnQKKyAqIEBidXR0b25fbWFzazogYnV0dG9uIG1hc2sgdXNlZCB0byBkZWNvZGUgR1BJTyBBVFROIHJlcG9ydHMKKyAqIEBidXR0b25fc3RhdGVfbWFzazogcHVsbCBzdGF0ZSBvZiB0aGUgYnV0dG9ucworICoKKyAqIEBpbnB1dDogcG9pbnRlciB0byB0aGUga2VybmVsIGlucHV0IGRldmljZQorICoKKyAqIEByZXNldF93b3JrOiB3b3JrZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgaW4gY2FzZSBvZiBhIG1vdXNlIHJlcG9ydAorICogQGhkZXY6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBoaWRfZGV2aWNlCisgKi8KK3N0cnVjdCBybWlfZGF0YSB7CisJc3RydWN0IG11dGV4IHBhZ2VfbXV0ZXg7CisJaW50IHBhZ2U7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCisJdTggKndyaXRlUmVwb3J0OworCXU4ICpyZWFkUmVwb3J0OworCisJaW50IGlucHV0X3JlcG9ydF9zaXplOworCWludCBvdXRwdXRfcmVwb3J0X3NpemU7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IHJtaV9mdW5jdGlvbiBmMTE7CisJc3RydWN0IHJtaV9mdW5jdGlvbiBmMzA7CisKKwl1bnNpZ25lZCBpbnQgbWF4X2ZpbmdlcnM7CisJdW5zaWduZWQgaW50IG1heF94OworCXVuc2lnbmVkIGludCBtYXhfeTsKKwl1bnNpZ25lZCBpbnQgeF9zaXplX21tOworCXVuc2lnbmVkIGludCB5X3NpemVfbW07CisKKwl1bnNpZ25lZCBpbnQgZ3Bpb19sZWRfY291bnQ7CisJdW5zaWduZWQgaW50IGJ1dHRvbl9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGJ1dHRvbl9tYXNrOworCXVuc2lnbmVkIGxvbmcgYnV0dG9uX3N0YXRlX21hc2s7CisKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF93b3JrOworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2OworfTsKKworI2RlZmluZSBSTUlfUEFHRShhZGRyKSAoKChhZGRyKSA+PiA4KSAmIDB4ZmYpCisKK3N0YXRpYyBpbnQgcm1pX3dyaXRlX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdTggKnJlcG9ydCwgaW50IGxlbik7CisKKy8qKgorICogcm1pX3NldF9wYWdlIC0gU2V0IFJNSSBwYWdlCisgKiBAaGRldjogVGhlIHBvaW50ZXIgdG8gdGhlIGhpZF9kZXZpY2Ugc3RydWN0CisgKiBAcGFnZTogVGhlIG5ldyBwYWdlIGFkZHJlc3MuCisgKgorICogUk1JIGRldmljZXMgaGF2ZSAxNi1iaXQgYWRkcmVzc2luZywgYnV0IHNvbWUgb2YgdGhlIHBoeXNpY2FsCisgKiBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgU01CdXMpIG9ubHkgaGF2ZSA4LWJpdCBhZGRyZXNzaW5nLiBTbyBSTUkgaW1wbGVtZW50cworICogYSBwYWdlIGFkZHJlc3MgYXQgMHhmZiBvZiBldmVyeSBwYWdlIHNvIHdlIGNhbiByZWxpYWJsZSBwYWdlIGFkZHJlc3NlcworICogZXZlcnkgMjU2IHJlZ2lzdGVycy4KKyAqCisgKiBUaGUgcGFnZV9tdXRleCBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgZW50ZXJlZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBybWlfc2V0X3BhZ2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHU4IHBhZ2UpCit7CisJc3RydWN0IHJtaV9kYXRhICpkYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCWludCByZXR2YWw7CisKKwlkYXRhLT53cml0ZVJlcG9ydFswXSA9IFJNSV9XUklURV9SRVBPUlRfSUQ7CisJZGF0YS0+d3JpdGVSZXBvcnRbMV0gPSAxOworCWRhdGEtPndyaXRlUmVwb3J0WzJdID0gMHhGRjsKKwlkYXRhLT53cml0ZVJlcG9ydFs0XSA9IHBhZ2U7CisKKwlyZXR2YWwgPSBybWlfd3JpdGVfcmVwb3J0KGhkZXYsIGRhdGEtPndyaXRlUmVwb3J0LAorCQkJZGF0YS0+b3V0cHV0X3JlcG9ydF9zaXplKTsKKwlpZiAocmV0dmFsICE9IGRhdGEtPm91dHB1dF9yZXBvcnRfc2l6ZSkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsCisJCQkiJXM6IHNldCBwYWdlIGZhaWxlZDogJWQuIiwgX19mdW5jX18sIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGF0YS0+cGFnZSA9IHBhZ2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm1pX3NldF9tb2RlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCB1OCBtb2RlKQoreworCWludCByZXQ7CisJdTggdHhidWZbMl0gPSB7Uk1JX1NFVF9STUlfTU9ERV9SRVBPUlRfSUQsIG1vZGV9OworCisJcmV0ID0gaGlkX2h3X3Jhd19yZXF1ZXN0KGhkZXYsIFJNSV9TRVRfUk1JX01PREVfUkVQT1JUX0lELCB0eGJ1ZiwKKwkJCXNpemVvZih0eGJ1ZiksIEhJRF9GRUFUVVJFX1JFUE9SVCwgSElEX1JFUV9TRVRfUkVQT1JUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bmFibGUgdG8gc2V0IHJtaSBtb2RlIHRvICVkICglZClcbiIsIG1vZGUsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJtaV93cml0ZV9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHU4ICpyZXBvcnQsIGludCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9od19vdXRwdXRfcmVwb3J0KGhkZXYsICh2b2lkICopcmVwb3J0LCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImZhaWxlZCB0byB3cml0ZSBoaWQgcmVwb3J0ICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBybWlfcmVhZF9ibG9jayhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdTE2IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJY29uc3QgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmRhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJaW50IHJldDsKKwlpbnQgYnl0ZXNfcmVhZDsKKwlpbnQgYnl0ZXNfbmVlZGVkOworCWludCByZXRyaWVzOworCWludCByZWFkX2lucHV0X2NvdW50OworCisJbXV0ZXhfbG9jaygmZGF0YS0+cGFnZV9tdXRleCk7CisKKwlpZiAoUk1JX1BBR0UoYWRkcikgIT0gZGF0YS0+cGFnZSkgeworCQlyZXQgPSBybWlfc2V0X3BhZ2UoaGRldiwgUk1JX1BBR0UoYWRkcikpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKHJldHJpZXMgPSA1OyByZXRyaWVzID4gMDsgcmV0cmllcy0tKSB7CisJCWRhdGEtPndyaXRlUmVwb3J0WzBdID0gUk1JX1JFQURfQUREUl9SRVBPUlRfSUQ7CisJCWRhdGEtPndyaXRlUmVwb3J0WzFdID0gMDsgLyogb2xkIDEgYnl0ZSByZWFkIGNvdW50ICovCisJCWRhdGEtPndyaXRlUmVwb3J0WzJdID0gYWRkciAmIDB4RkY7CisJCWRhdGEtPndyaXRlUmVwb3J0WzNdID0gKGFkZHIgPj4gOCkgJiAweEZGOworCQlkYXRhLT53cml0ZVJlcG9ydFs0XSA9IGxlbiAgJiAweEZGOworCQlkYXRhLT53cml0ZVJlcG9ydFs1XSA9IChsZW4gPj4gOCkgJiAweEZGOworCisJCXNldF9iaXQoUk1JX1JFQURfUkVRVUVTVF9QRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOworCisJCXJldCA9IHJtaV93cml0ZV9yZXBvcnQoaGRldiwgZGF0YS0+d3JpdGVSZXBvcnQsCisJCQkJCQlkYXRhLT5vdXRwdXRfcmVwb3J0X3NpemUpOworCQlpZiAocmV0ICE9IGRhdGEtPm91dHB1dF9yZXBvcnRfc2l6ZSkgeworCQkJY2xlYXJfYml0KFJNSV9SRUFEX1JFUVVFU1RfUEVORElORywgJmRhdGEtPmZsYWdzKTsKKwkJCWRldl9lcnIoJmhkZXYtPmRldiwKKwkJCQkiZmFpbGVkIHRvIHdyaXRlIHJlcXVlc3Qgb3V0cHV0IHJlcG9ydCAoJWQpXG4iLAorCQkJCXJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlieXRlc19yZWFkID0gMDsKKwkJYnl0ZXNfbmVlZGVkID0gbGVuOworCQl3aGlsZSAoYnl0ZXNfcmVhZCA8IGxlbikgeworCQkJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZGF0YS0+d2FpdCwKKwkJCQl0ZXN0X2JpdChSTUlfUkVBRF9EQVRBX1BFTkRJTkcsICZkYXRhLT5mbGFncyksCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7CisJCQkJaGlkX3dhcm4oaGRldiwgIiVzOiB0aW1lb3V0IGVsYXBzZWRcbiIsCisJCQkJCSBfX2Z1bmNfXyk7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmVhZF9pbnB1dF9jb3VudCA9IGRhdGEtPnJlYWRSZXBvcnRbMV07CisJCQltZW1jcHkoYnVmICsgYnl0ZXNfcmVhZCwgJmRhdGEtPnJlYWRSZXBvcnRbMl0sCisJCQkJcmVhZF9pbnB1dF9jb3VudCA8IGJ5dGVzX25lZWRlZCA/CisJCQkJCXJlYWRfaW5wdXRfY291bnQgOiBieXRlc19uZWVkZWQpOworCisJCQlieXRlc19yZWFkICs9IHJlYWRfaW5wdXRfY291bnQ7CisJCQlieXRlc19uZWVkZWQgLT0gcmVhZF9pbnB1dF9jb3VudDsKKwkJCWNsZWFyX2JpdChSTUlfUkVBRF9EQVRBX1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CisJCX0KKworCQlpZiAocmV0ID49IDApIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworZXhpdDoKKwljbGVhcl9iaXQoUk1JX1JFQURfUkVRVUVTVF9QRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOworCW11dGV4X3VubG9jaygmZGF0YS0+cGFnZV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcm1pX3JlYWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHUxNiBhZGRyLCB2b2lkICpidWYpCit7CisJcmV0dXJuIHJtaV9yZWFkX2Jsb2NrKGhkZXYsIGFkZHIsIGJ1ZiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHJtaV9mMTFfcHJvY2Vzc190b3VjaChzdHJ1Y3Qgcm1pX2RhdGEgKmhkYXRhLCBpbnQgc2xvdCwKKwkJdTggZmluZ2VyX3N0YXRlLCB1OCAqdG91Y2hfZGF0YSkKK3sKKwlpbnQgeCwgeSwgd3gsIHd5OworCWludCB3aWRlLCBtYWpvciwgbWlub3I7CisJaW50IHo7CisKKwlpbnB1dF9tdF9zbG90KGhkYXRhLT5pbnB1dCwgc2xvdCk7CisJaW5wdXRfbXRfcmVwb3J0X3Nsb3Rfc3RhdGUoaGRhdGEtPmlucHV0LCBNVF9UT09MX0ZJTkdFUiwKKwkJCWZpbmdlcl9zdGF0ZSA9PSAweDAxKTsKKwlpZiAoZmluZ2VyX3N0YXRlID09IDB4MDEpIHsKKwkJeCA9ICh0b3VjaF9kYXRhWzBdIDw8IDQpIHwgKHRvdWNoX2RhdGFbMl0gJiAweDBGKTsKKwkJeSA9ICh0b3VjaF9kYXRhWzFdIDw8IDQpIHwgKHRvdWNoX2RhdGFbMl0gPj4gNCk7CisJCXd4ID0gdG91Y2hfZGF0YVszXSAmIDB4MEY7CisJCXd5ID0gdG91Y2hfZGF0YVszXSA+PiA0OworCQl3aWRlID0gKHd4ID4gd3kpOworCQltYWpvciA9IG1heCh3eCwgd3kpOworCQltaW5vciA9IG1pbih3eCwgd3kpOworCQl6ID0gdG91Y2hfZGF0YVs0XTsKKworCQkvKiB5IGlzIGludmVydGVkICovCisJCXkgPSBoZGF0YS0+bWF4X3kgLSB5OworCisJCWlucHV0X2V2ZW50KGhkYXRhLT5pbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgeCk7CisJCWlucHV0X2V2ZW50KGhkYXRhLT5pbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgeSk7CisJCWlucHV0X2V2ZW50KGhkYXRhLT5pbnB1dCwgRVZfQUJTLCBBQlNfTVRfT1JJRU5UQVRJT04sIHdpZGUpOworCQlpbnB1dF9ldmVudChoZGF0YS0+aW5wdXQsIEVWX0FCUywgQUJTX01UX1BSRVNTVVJFLCB6KTsKKwkJaW5wdXRfZXZlbnQoaGRhdGEtPmlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUiwgbWFqb3IpOworCQlpbnB1dF9ldmVudChoZGF0YS0+aW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCBtaW5vcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBybWlfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJtaV9kYXRhICpoZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcm1pX2RhdGEsCisJCQkJCQlyZXNldF93b3JrKTsKKworCS8qIHN3aXRjaCB0aGUgZGV2aWNlIHRvIFJNSSBpZiB3ZSByZWNlaXZlIGEgZ2VuZXJpYyBtb3VzZSByZXBvcnQgKi8KKwlybWlfc2V0X21vZGUoaGRhdGEtPmhkZXYsIFJNSV9NT0RFX0FUVE5fUkVQT1JUUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJtaV9zY2hlZHVsZV9yZXNldChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmhkYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCXJldHVybiBzY2hlZHVsZV93b3JrKCZoZGF0YS0+cmVzZXRfd29yayk7Cit9CisKK3N0YXRpYyBpbnQgcm1pX2YxMV9pbnB1dF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdTggaXJxLCB1OCAqZGF0YSwKKwkJaW50IHNpemUpCit7CisJc3RydWN0IHJtaV9kYXRhICpoZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwlpbnQgb2Zmc2V0OworCWludCBpOworCisJaWYgKHNpemUgPCBoZGF0YS0+ZjExLnJlcG9ydF9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmICghKGlycSAmIGhkYXRhLT5mMTEuaXJxX21hc2spKQorCQlyZXR1cm4gMDsKKworCW9mZnNldCA9IChoZGF0YS0+bWF4X2ZpbmdlcnMgPj4gMikgKyAxOworCWZvciAoaSA9IDA7IGkgPCBoZGF0YS0+bWF4X2ZpbmdlcnM7IGkrKykgeworCQlpbnQgZnNfYnl0ZV9wb3NpdGlvbiA9IGkgPj4gMjsKKwkJaW50IGZzX2JpdF9wb3NpdGlvbiA9IChpICYgMHgzKSA8PCAxOworCQlpbnQgZmluZ2VyX3N0YXRlID0gKGRhdGFbZnNfYnl0ZV9wb3NpdGlvbl0gPj4gZnNfYml0X3Bvc2l0aW9uKSAmCisJCQkJCTB4MDM7CisKKwkJcm1pX2YxMV9wcm9jZXNzX3RvdWNoKGhkYXRhLCBpLCBmaW5nZXJfc3RhdGUsCisJCQkJJmRhdGFbb2Zmc2V0ICsgNSAqIGldKTsKKwl9CisJaW5wdXRfbXRfc3luY19mcmFtZShoZGF0YS0+aW5wdXQpOworCWlucHV0X3N5bmMoaGRhdGEtPmlucHV0KTsKKwlyZXR1cm4gaGRhdGEtPmYxMS5yZXBvcnRfc2l6ZTsKK30KKworc3RhdGljIGludCBybWlfZjMwX2lucHV0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCB1OCBpcnEsIHU4ICpkYXRhLAorCQlpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmhkYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCWludCBpOworCWludCBidXR0b24gPSAwOworCWJvb2wgdmFsdWU7CisKKwlpZiAoIShpcnEgJiBoZGF0YS0+ZjMwLmlycV9tYXNrKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGRhdGEtPmdwaW9fbGVkX2NvdW50OyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksICZoZGF0YS0+YnV0dG9uX21hc2spKSB7CisJCQl2YWx1ZSA9IChkYXRhW2kgLyA4XSA+PiAoaSAmIDB4MDcpKSAmIEJJVCgwKTsKKwkJCWlmICh0ZXN0X2JpdChpLCAmaGRhdGEtPmJ1dHRvbl9zdGF0ZV9tYXNrKSkKKwkJCQl2YWx1ZSA9ICF2YWx1ZTsKKwkJCWlucHV0X2V2ZW50KGhkYXRhLT5pbnB1dCwgRVZfS0VZLCBCVE5fTEVGVCArIGJ1dHRvbisrLAorCQkJCQl2YWx1ZSk7CisJCX0KKwl9CisJcmV0dXJuIGhkYXRhLT5mMzAucmVwb3J0X3NpemU7Cit9CisKK3N0YXRpYyBpbnQgcm1pX2lucHV0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHJtaV9kYXRhICpoZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gMDsKKwl1bnNpZ25lZCBpbmRleCA9IDI7CisKKwlpZiAoISh0ZXN0X2JpdChSTUlfU1RBUlRFRCwgJmhkYXRhLT5mbGFncykpKQorCQlyZXR1cm4gMDsKKworCWlycV9tYXNrIHw9IGhkYXRhLT5mMTEuaXJxX21hc2s7CisJaXJxX21hc2sgfD0gaGRhdGEtPmYzMC5pcnFfbWFzazsKKworCWlmIChkYXRhWzFdICYgfmlycV9tYXNrKQorCQloaWRfd2FybihoZGV2LCAidW5rbm93biBpbnRyIHNvdXJjZTolMDJseCAlczolZFxuIiwKKwkJCWRhdGFbMV0gJiB+aXJxX21hc2ssIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlpZiAoaGRhdGEtPmYxMS5pbnRlcnJ1cHRfYmFzZSA8IGhkYXRhLT5mMzAuaW50ZXJydXB0X2Jhc2UpIHsKKwkJaW5kZXggKz0gcm1pX2YxMV9pbnB1dF9ldmVudChoZGV2LCBkYXRhWzFdLCAmZGF0YVtpbmRleF0sCisJCQkJc2l6ZSAtIGluZGV4KTsKKwkJaW5kZXggKz0gcm1pX2YzMF9pbnB1dF9ldmVudChoZGV2LCBkYXRhWzFdLCAmZGF0YVtpbmRleF0sCisJCQkJc2l6ZSAtIGluZGV4KTsKKwl9IGVsc2UgeworCQlpbmRleCArPSBybWlfZjMwX2lucHV0X2V2ZW50KGhkZXYsIGRhdGFbMV0sICZkYXRhW2luZGV4XSwKKwkJCQlzaXplIC0gaW5kZXgpOworCQlpbmRleCArPSBybWlfZjExX2lucHV0X2V2ZW50KGhkZXYsIGRhdGFbMV0sICZkYXRhW2luZGV4XSwKKwkJCQlzaXplIC0gaW5kZXgpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJtaV9yZWFkX2RhdGFfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmhkYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCisJaWYgKCF0ZXN0X2JpdChSTUlfUkVBRF9SRVFVRVNUX1BFTkRJTkcsICZoZGF0YS0+ZmxhZ3MpKSB7CisJCWhpZF9lcnIoaGRldiwgIm5vIHJlYWQgcmVxdWVzdCBwZW5kaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWVtY3B5KGhkYXRhLT5yZWFkUmVwb3J0LCBkYXRhLCBzaXplIDwgaGRhdGEtPmlucHV0X3JlcG9ydF9zaXplID8KKwkJCXNpemUgOiBoZGF0YS0+aW5wdXRfcmVwb3J0X3NpemUpOworCXNldF9iaXQoUk1JX1JFQURfREFUQV9QRU5ESU5HLCAmaGRhdGEtPmZsYWdzKTsKKwl3YWtlX3VwKCZoZGF0YS0+d2FpdCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBybWlfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBSTUlfUkVBRF9EQVRBX1JFUE9SVF9JRDoKKwkJcmV0dXJuIHJtaV9yZWFkX2RhdGFfZXZlbnQoaGRldiwgZGF0YSwgc2l6ZSk7CisJY2FzZSBSTUlfQVRUTl9SRVBPUlRfSUQ6CisJCXJldHVybiBybWlfaW5wdXRfZXZlbnQoaGRldiwgZGF0YSwgc2l6ZSk7CisJY2FzZSBSTUlfTU9VU0VfUkVQT1JUX0lEOgorCQlybWlfc2NoZWR1bGVfcmVzZXQoaGRldik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJtaV9wb3N0X3Jlc2V0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXJldHVybiBybWlfc2V0X21vZGUoaGRldiwgUk1JX01PREVfQVRUTl9SRVBPUlRTKTsKK30KKworc3RhdGljIGludCBybWlfcG9zdF9yZXN1bWUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJcmV0dXJuIHJtaV9zZXRfbW9kZShoZGV2LCBSTUlfTU9ERV9BVFROX1JFUE9SVFMpOworfQorCisjZGVmaW5lIFJNSTRfTUFYX1BBR0UgMHhmZgorI2RlZmluZSBSTUk0X1BBR0VfU0laRSAweDAxMDAKKworI2RlZmluZSBQRFRfU1RBUlRfU0NBTl9MT0NBVElPTiAweDAwZTkKKyNkZWZpbmUgUERUX0VORF9TQ0FOX0xPQ0FUSU9OCTB4MDAwNQorI2RlZmluZSBSTUk0X0VORF9PRl9QRFQoaWQpICgoaWQpID09IDB4MDAgfHwgKGlkKSA9PSAweGZmKQorCitzdHJ1Y3QgcGR0X2VudHJ5IHsKKwl1OCBxdWVyeV9iYXNlX2FkZHI6ODsKKwl1OCBjb21tYW5kX2Jhc2VfYWRkcjo4OworCXU4IGNvbnRyb2xfYmFzZV9hZGRyOjg7CisJdTggZGF0YV9iYXNlX2FkZHI6ODsKKwl1OCBpbnRlcnJ1cHRfc291cmNlX2NvdW50OjM7CisJdTggYml0czNhbmQ0OjI7CisJdTggZnVuY3Rpb25fdmVyc2lvbjoyOworCXU4IGJpdDc6MTsKKwl1OCBmdW5jdGlvbl9udW1iZXI6ODsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcm1pX2dlbl9tYXNrKHVuc2lnbmVkIGlycV9iYXNlLCB1bnNpZ25lZCBpcnFfY291bnQpCit7CisJcmV0dXJuIEdFTk1BU0soaXJxX2NvdW50ICsgaXJxX2Jhc2UgLSAxLCBpcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJtaV9yZWdpc3Rlcl9mdW5jdGlvbihzdHJ1Y3Qgcm1pX2RhdGEgKmRhdGEsCisJc3RydWN0IHBkdF9lbnRyeSAqcGR0X2VudHJ5LCBpbnQgcGFnZSwgdW5zaWduZWQgaW50ZXJydXB0X2NvdW50KQoreworCXN0cnVjdCBybWlfZnVuY3Rpb24gKmYgPSBOVUxMOworCXUxNiBwYWdlX2Jhc2UgPSBwYWdlIDw8IDg7CisKKwlzd2l0Y2ggKHBkdF9lbnRyeS0+ZnVuY3Rpb25fbnVtYmVyKSB7CisJY2FzZSAweDExOgorCQlmID0gJmRhdGEtPmYxMTsKKwkJYnJlYWs7CisJY2FzZSAweDMwOgorCQlmID0gJmRhdGEtPmYzMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGYpIHsKKwkJZi0+cGFnZSA9IHBhZ2U7CisJCWYtPnF1ZXJ5X2Jhc2VfYWRkciA9IHBhZ2VfYmFzZSB8IHBkdF9lbnRyeS0+cXVlcnlfYmFzZV9hZGRyOworCQlmLT5jb21tYW5kX2Jhc2VfYWRkciA9IHBhZ2VfYmFzZSB8IHBkdF9lbnRyeS0+Y29tbWFuZF9iYXNlX2FkZHI7CisJCWYtPmNvbnRyb2xfYmFzZV9hZGRyID0gcGFnZV9iYXNlIHwgcGR0X2VudHJ5LT5jb250cm9sX2Jhc2VfYWRkcjsKKwkJZi0+ZGF0YV9iYXNlX2FkZHIgPSBwYWdlX2Jhc2UgfCBwZHRfZW50cnktPmRhdGFfYmFzZV9hZGRyOworCQlmLT5pbnRlcnJ1cHRfYmFzZSA9IGludGVycnVwdF9jb3VudDsKKwkJZi0+aW50ZXJydXB0X2NvdW50ID0gcGR0X2VudHJ5LT5pbnRlcnJ1cHRfc291cmNlX2NvdW50OworCQlmLT5pcnFfbWFzayA9IHJtaV9nZW5fbWFzayhmLT5pbnRlcnJ1cHRfYmFzZSwKKwkJCQkJCWYtPmludGVycnVwdF9jb3VudCk7CisJfQorfQorCitzdGF0aWMgaW50IHJtaV9zY2FuX3BkdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmRhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IHBkdF9lbnRyeSBlbnRyeTsKKwlpbnQgcGFnZTsKKwlib29sIHBhZ2VfaGFzX2Z1bmN0aW9uOworCWludCBpOworCWludCByZXR2YWw7CisJaW50IGludGVycnVwdCA9IDA7CisJdTE2IHBhZ2Vfc3RhcnQsIHBkdF9zdGFydCAsIHBkdF9lbmQ7CisKKwloaWRfaW5mbyhoZGV2LCAiU2Nhbm5pbmcgUERULi4uXG4iKTsKKworCWZvciAocGFnZSA9IDA7IChwYWdlIDw9IFJNSTRfTUFYX1BBR0UpOyBwYWdlKyspIHsKKwkJcGFnZV9zdGFydCA9IFJNSTRfUEFHRV9TSVpFICogcGFnZTsKKwkJcGR0X3N0YXJ0ID0gcGFnZV9zdGFydCArIFBEVF9TVEFSVF9TQ0FOX0xPQ0FUSU9OOworCQlwZHRfZW5kID0gcGFnZV9zdGFydCArIFBEVF9FTkRfU0NBTl9MT0NBVElPTjsKKworCQlwYWdlX2hhc19mdW5jdGlvbiA9IGZhbHNlOworCQlmb3IgKGkgPSBwZHRfc3RhcnQ7IGkgPj0gcGR0X2VuZDsgaSAtPSBzaXplb2YoZW50cnkpKSB7CisJCQlyZXR2YWwgPSBybWlfcmVhZF9ibG9jayhoZGV2LCBpLCAmZW50cnksIHNpemVvZihlbnRyeSkpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWhpZF9lcnIoaGRldiwKKwkJCQkJIlJlYWQgb2YgUERUIGVudHJ5IGF0ICUjMDZ4IGZhaWxlZC5cbiIsCisJCQkJCWkpOworCQkJCWdvdG8gZXJyb3JfZXhpdDsKKwkJCX0KKworCQkJaWYgKFJNSTRfRU5EX09GX1BEVChlbnRyeS5mdW5jdGlvbl9udW1iZXIpKQorCQkJCWJyZWFrOworCisJCQlwYWdlX2hhc19mdW5jdGlvbiA9IHRydWU7CisKKwkJCWhpZF9pbmZvKGhkZXYsICJGb3VuZCBGJTAyWCBvbiBwYWdlICUjMDR4XG4iLAorCQkJCQllbnRyeS5mdW5jdGlvbl9udW1iZXIsIHBhZ2UpOworCisJCQlybWlfcmVnaXN0ZXJfZnVuY3Rpb24oZGF0YSwgJmVudHJ5LCBwYWdlLCBpbnRlcnJ1cHQpOworCQkJaW50ZXJydXB0ICs9IGVudHJ5LmludGVycnVwdF9zb3VyY2VfY291bnQ7CisJCX0KKworCQlpZiAoIXBhZ2VfaGFzX2Z1bmN0aW9uKQorCQkJYnJlYWs7CisJfQorCisJaGlkX2luZm8oaGRldiwgIiVzOiBEb25lIHdpdGggUERUIHNjYW4uXG4iLCBfX2Z1bmNfXyk7CisJcmV0dmFsID0gMDsKKworZXJyb3JfZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHJtaV9wb3B1bGF0ZV9mMTEoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IHJtaV9kYXRhICpkYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCXU4IGJ1ZlsyMF07CisJaW50IHJldDsKKwlib29sIGhhc19xdWVyeTk7CisJYm9vbCBoYXNfcXVlcnkxMDsKKwlib29sIGhhc19xdWVyeTExOworCWJvb2wgaGFzX3F1ZXJ5MTI7CisJYm9vbCBoYXNfcGh5c2ljYWxfcHJvcHM7CisJdW5zaWduZWQgeF9zaXplLCB5X3NpemU7CisJdTE2IHF1ZXJ5MTJfb2Zmc2V0OworCisJaWYgKCFkYXRhLT5mMTEucXVlcnlfYmFzZV9hZGRyKSB7CisJCWhpZF9lcnIoaGRldiwgIk5vIDJEIHNlbnNvciBmb3VuZCwgZ2l2aW5nIHVwLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHF1ZXJ5IDAgY29udGFpbnMgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gKi8KKwlyZXQgPSBybWlfcmVhZChoZGV2LCBkYXRhLT5mMTEucXVlcnlfYmFzZV9hZGRyLCBidWYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiY2FuIG5vdCBnZXQgcXVlcnkgMDogJWQuXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwloYXNfcXVlcnk5ID0gISEoYnVmWzBdICYgQklUKDMpKTsKKwloYXNfcXVlcnkxMSA9ICEhKGJ1ZlswXSAmIEJJVCg0KSk7CisJaGFzX3F1ZXJ5MTIgPSAhIShidWZbMF0gJiBCSVQoNSkpOworCisJLyogcXVlcnkgMSB0byBnZXQgdGhlIG1heCBudW1iZXIgb2YgZmluZ2VycyAqLworCXJldCA9IHJtaV9yZWFkKGhkZXYsIGRhdGEtPmYxMS5xdWVyeV9iYXNlX2FkZHIgKyAxLCBidWYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiY2FuIG5vdCBnZXQgTnVtYmVyT2ZGaW5nZXJzOiAlZC5cbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRhdGEtPm1heF9maW5nZXJzID0gKGJ1ZlswXSAmIDB4MDcpICsgMTsKKwlpZiAoZGF0YS0+bWF4X2ZpbmdlcnMgPiA1KQorCQlkYXRhLT5tYXhfZmluZ2VycyA9IDEwOworCisJZGF0YS0+ZjExLnJlcG9ydF9zaXplID0gZGF0YS0+bWF4X2ZpbmdlcnMgKiA1ICsKKwkJCQlESVZfUk9VTkRfVVAoZGF0YS0+bWF4X2ZpbmdlcnMsIDQpOworCisJaWYgKCEoYnVmWzBdICYgQklUKDQpKSkgeworCQloaWRfZXJyKGhkZXYsICJObyBhYnNvbHV0ZSBldmVudHMsIGdpdmluZyB1cC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBxdWVyeSA4IHRvIGZpbmQgb3V0IGlmIHF1ZXJ5IDEwIGV4aXN0cyAqLworCXJldCA9IHJtaV9yZWFkKGhkZXYsIGRhdGEtPmYxMS5xdWVyeV9iYXNlX2FkZHIgKyA4LCBidWYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiY2FuIG5vdCByZWFkIGdlc3R1cmUgaW5mb3JtYXRpb246ICVkLlxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGFzX3F1ZXJ5MTAgPSAhIShidWZbMF0gJiBCSVQoMikpOworCisJLyoKKwkgKiBBdCBsZWFzdCA4IHF1ZXJpZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJlc2VudCBpbiBGMTEKKwkgKiArMSBmb3IgcXVlcnkxMi4KKwkgKi8KKwlxdWVyeTEyX29mZnNldCA9IDk7CisKKwlpZiAoaGFzX3F1ZXJ5OSkKKwkJKytxdWVyeTEyX29mZnNldDsKKworCWlmIChoYXNfcXVlcnkxMCkKKwkJKytxdWVyeTEyX29mZnNldDsKKworCWlmIChoYXNfcXVlcnkxMSkKKwkJKytxdWVyeTEyX29mZnNldDsKKworCS8qIHF1ZXJ5IDEyIHRvIGtub3cgaWYgdGhlIHBoeXNpY2FsIHByb3BlcnRpZXMgYXJlIHJlcG9ydGVkICovCisJaWYgKGhhc19xdWVyeTEyKSB7CisJCXJldCA9IHJtaV9yZWFkKGhkZXYsIGRhdGEtPmYxMS5xdWVyeV9iYXNlX2FkZHIKKwkJCQkrIHF1ZXJ5MTJfb2Zmc2V0LCBidWYpOworCQlpZiAocmV0KSB7CisJCQloaWRfZXJyKGhkZXYsICJjYW4gbm90IGdldCBxdWVyeSAxMjogJWQuXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQloYXNfcGh5c2ljYWxfcHJvcHMgPSAhIShidWZbMF0gJiBCSVQoNSkpOworCisJCWlmIChoYXNfcGh5c2ljYWxfcHJvcHMpIHsKKwkJCXJldCA9IHJtaV9yZWFkX2Jsb2NrKGhkZXYsCisJCQkJCWRhdGEtPmYxMS5xdWVyeV9iYXNlX2FkZHIKKwkJCQkJCSsgcXVlcnkxMl9vZmZzZXQgKyAxLCBidWYsIDQpOworCQkJaWYgKHJldCkgeworCQkJCWhpZF9lcnIoaGRldiwgImNhbiBub3QgcmVhZCBxdWVyeSAxNS0xODogJWQuXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCXhfc2l6ZSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCQl5X3NpemUgPSBidWZbMl0gfCAoYnVmWzNdIDw8IDgpOworCisJCQlkYXRhLT54X3NpemVfbW0gPSBESVZfUk9VTkRfQ0xPU0VTVCh4X3NpemUsIDEwKTsKKwkJCWRhdGEtPnlfc2l6ZV9tbSA9IERJVl9ST1VORF9DTE9TRVNUKHlfc2l6ZSwgMTApOworCisJCQloaWRfaW5mbyhoZGV2LCAiJXM6IHNpemUgaW4gbW06ICVkIHggJWRcbiIsCisJCQkJIF9fZnVuY19fLCBkYXRhLT54X3NpemVfbW0sIGRhdGEtPnlfc2l6ZV9tbSk7CisJCX0KKwl9CisKKwkvKgorCSAqIHJldHJpZXZlIHRoZSBjdHJsIHJlZ2lzdGVycworCSAqIHRoZSBjdHJsIHJlZ2lzdGVyIGhhcyBhIHNpemUgb2YgMjAgYnV0IGEgZncgYnVnIHNwbGl0IGl0IGludG8gMTYgKyA0LAorCSAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyBpZiB0aGUgZmlyc3QgMjAgYnl0ZXMgYXJlIGhlcmUgb3Igbm90LgorCSAqIFdlIHVzZSBvbmx5IHRoZSBmaXJzdCAxMCBieXRlcywgc28gZ2V0IG9ubHkgdGhlbS4KKwkgKi8KKwlyZXQgPSBybWlfcmVhZF9ibG9jayhoZGV2LCBkYXRhLT5mMTEuY29udHJvbF9iYXNlX2FkZHIsIGJ1ZiwgMTApOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiY2FuIG5vdCByZWFkIGN0cmwgYmxvY2sgb2Ygc2l6ZSAxMDogJWQuXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPm1heF94ID0gYnVmWzZdIHwgKGJ1Zls3XSA8PCA4KTsKKwlkYXRhLT5tYXhfeSA9IGJ1Zls4XSB8IChidWZbOV0gPDwgOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybWlfcG9wdWxhdGVfZjMwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCBybWlfZGF0YSAqZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwl1OCBidWZbMjBdOworCWludCByZXQ7CisJYm9vbCBoYXNfZ3BpbywgaGFzX2xlZDsKKwl1bnNpZ25lZCBieXRlc19wZXJfY3RybDsKKwl1OCBjdHJsMl9hZGRyOworCWludCBjdHJsMl8zX2xlbmd0aDsKKwlpbnQgaTsKKworCS8qIGZ1bmN0aW9uIEYzMCBpcyBmb3IgcGh5c2ljYWwgYnV0dG9ucyAqLworCWlmICghZGF0YS0+ZjMwLnF1ZXJ5X2Jhc2VfYWRkcikgeworCQloaWRfZXJyKGhkZXYsICJObyBHUElPL0xFRHMgZm91bmQsIGdpdmluZyB1cC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBybWlfcmVhZF9ibG9jayhoZGV2LCBkYXRhLT5mMzAucXVlcnlfYmFzZV9hZGRyLCBidWYsIDIpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiY2FuIG5vdCBnZXQgRjMwIHF1ZXJ5IHJlZ2lzdGVyczogJWQuXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhhc19ncGlvID0gISEoYnVmWzBdICYgQklUKDMpKTsKKwloYXNfbGVkID0gISEoYnVmWzBdICYgQklUKDIpKTsKKwlkYXRhLT5ncGlvX2xlZF9jb3VudCA9IGJ1ZlsxXSAmIDB4MWY7CisKKwkvKiByZXRyaWV2ZSBjdHJsIDIgJiAzIHJlZ2lzdGVycyAqLworCWJ5dGVzX3Blcl9jdHJsID0gKGRhdGEtPmdwaW9fbGVkX2NvdW50ICsgNykgLyA4OworCS8qIEN0cmwwIGlzIHByZXNlbnQgb25seSBpZiBib3RoIGhhc19ncGlvIGFuZCBoYXNfbGVkIGFyZSBzZXQqLworCWN0cmwyX2FkZHIgPSAoaGFzX2dwaW8gJiYgaGFzX2xlZCkgPyBieXRlc19wZXJfY3RybCA6IDA7CisJLyogQ3RybDEgaXMgYWx3YXlzIGJlIHByZXNlbnQgKi8KKwljdHJsMl9hZGRyICs9IGJ5dGVzX3Blcl9jdHJsOworCWN0cmwyXzNfbGVuZ3RoID0gMiAqIGJ5dGVzX3Blcl9jdHJsOworCisJZGF0YS0+ZjMwLnJlcG9ydF9zaXplID0gYnl0ZXNfcGVyX2N0cmw7CisKKwlyZXQgPSBybWlfcmVhZF9ibG9jayhoZGV2LCBkYXRhLT5mMzAuY29udHJvbF9iYXNlX2FkZHIgKyBjdHJsMl9hZGRyLAorCQkJCWJ1ZiwgY3RybDJfM19sZW5ndGgpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiY2FuIG5vdCByZWFkIGN0cmwgMiYzIGJsb2NrIG9mIHNpemUgJWQ6ICVkLlxuIiwKKwkJCWN0cmwyXzNfbGVuZ3RoLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ncGlvX2xlZF9jb3VudDsgaSsrKSB7CisJCWludCBieXRlX3Bvc2l0aW9uID0gaSA+PiAzOworCQlpbnQgYml0X3Bvc2l0aW9uID0gaSAmIDB4MDc7CisJCXU4IGRpcl9ieXRlID0gYnVmW2J5dGVfcG9zaXRpb25dOworCQl1OCBkYXRhX2J5dGUgPSBidWZbYnl0ZV9wb3NpdGlvbiArIGJ5dGVzX3Blcl9jdHJsXTsKKwkJYm9vbCBkaXIgPSAoZGlyX2J5dGUgPj4gYml0X3Bvc2l0aW9uKSAmIEJJVCgwKTsKKwkJYm9vbCBkYXQgPSAoZGF0YV9ieXRlID4+IGJpdF9wb3NpdGlvbikgJiBCSVQoMCk7CisKKwkJaWYgKGRpciA9PSAwKSB7CisJCQkvKiBpbnB1dCBtb2RlICovCisJCQlpZiAoZGF0KSB7CisJCQkJLyogYWN0dWFsIGJ1dHRvbnMgaGF2ZSBwdWxsIHVwIHJlc2lzdG9yICovCisJCQkJZGF0YS0+YnV0dG9uX2NvdW50Kys7CisJCQkJc2V0X2JpdChpLCAmZGF0YS0+YnV0dG9uX21hc2spOworCQkJCXNldF9iaXQoaSwgJmRhdGEtPmJ1dHRvbl9zdGF0ZV9tYXNrKTsKKwkJCX0KKwkJfQorCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm1pX3BvcHVsYXRlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBybWlfc2Nhbl9wZHQoaGRldik7CisJaWYgKHJldCkgeworCQloaWRfZXJyKGhkZXYsICJQRFQgc2NhbiBmYWlsZWQgd2l0aCBjb2RlICVkLlxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBybWlfcG9wdWxhdGVfZjExKGhkZXYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiRXJyb3Igd2hpbGUgaW5pdGlhbGl6aW5nIEYxMSAoJWQpLlxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBybWlfcG9wdWxhdGVfZjMwKGhkZXYpOworCWlmIChyZXQpCisJCWhpZF93YXJuKGhkZXYsICJFcnJvciB3aGlsZSBpbml0aWFsaXppbmcgRjMwICglZCkuXG4iLCByZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJtaV9pbnB1dF9jb25maWd1cmVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSkKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmRhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBoaS0+aW5wdXQ7CisJaW50IHJldDsKKwlpbnQgcmVzX3gsIHJlc195LCBpOworCisJZGF0YS0+aW5wdXQgPSBpbnB1dDsKKworCWhpZF9kYmcoaGRldiwgIk9wZW5pbmcgbG93IGxldmVsIGRyaXZlclxuIik7CisJcmV0ID0gaGlkX2h3X29wZW4oaGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJLyogQWxsb3cgaW5jb21pbmcgaGlkIHJlcG9ydHMgKi8KKwloaWRfZGV2aWNlX2lvX3N0YXJ0KGhkZXYpOworCisJcmV0ID0gcm1pX3NldF9tb2RlKGhkZXYsIFJNSV9NT0RFX0FUVE5fUkVQT1JUUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHNldCBybWkgbW9kZVxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSBybWlfc2V0X3BhZ2UoaGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYWdlIHNlbGVjdCB0byAwLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSBybWlfcG9wdWxhdGUoaGRldik7CisJaWYgKHJldCkKKwkJZ290byBleGl0OworCisJX19zZXRfYml0KEVWX0FCUywgaW5wdXQtPmV2Yml0KTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsIDEsIGRhdGEtPm1heF94LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIDEsIGRhdGEtPm1heF95LCAwLCAwKTsKKworCWlmIChkYXRhLT54X3NpemVfbW0gJiYgZGF0YS0+eV9zaXplX21tKSB7CisJCXJlc194ID0gKGRhdGEtPm1heF94IC0gMSkgLyBkYXRhLT54X3NpemVfbW07CisJCXJlc195ID0gKGRhdGEtPm1heF95IC0gMSkgLyBkYXRhLT55X3NpemVfbW07CisKKwkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCByZXNfeCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgcmVzX3kpOworCX0KKworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIDAsIDEsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUFJFU1NVUkUsIDAsIDB4ZmYsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIDAsIDB4MGYsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUlOT1IsIDAsIDB4MGYsIDAsIDApOworCisJaW5wdXRfbXRfaW5pdF9zbG90cyhpbnB1dCwgZGF0YS0+bWF4X2ZpbmdlcnMsIElOUFVUX01UX1BPSU5URVIpOworCisJaWYgKGRhdGEtPmJ1dHRvbl9jb3VudCkgeworCQlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+YnV0dG9uX2NvdW50OyBpKyspCisJCQlfX3NldF9iaXQoQlROX0xFRlQgKyBpLCBpbnB1dC0+a2V5Yml0KTsKKworCQlpZiAoZGF0YS0+YnV0dG9uX2NvdW50ID09IDEpCisJCQlfX3NldF9iaXQoSU5QVVRfUFJPUF9CVVRUT05QQUQsIGlucHV0LT5wcm9wYml0KTsKKwl9CisKKwlzZXRfYml0KFJNSV9TVEFSVEVELCAmZGF0YS0+ZmxhZ3MpOworCitleGl0OgorCWhpZF9kZXZpY2VfaW9fc3RvcChoZGV2KTsKKwloaWRfaHdfY2xvc2UoaGRldik7Cit9CisKK3N0YXRpYyBpbnQgcm1pX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCXN0cnVjdCBoaWRfaW5wdXQgKmhpLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCS8qIHdlIHdhbnQgdG8gbWFrZSBISUQgaWdub3JlIHRoZSBhZHZlcnRpc2VkIEhJRCBjb2xsZWN0aW9uICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJtaV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBybWlfZGF0YSAqZGF0YSA9IE5VTEw7CisJaW50IHJldDsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKKworCWRhdGEgPSBkZXZtX2t6YWxsb2MoJmhkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBybWlfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX1dPUksoJmRhdGEtPnJlc2V0X3dvcmssIHJtaV9yZXNldF93b3JrKTsKKwlkYXRhLT5oZGV2ID0gaGRldjsKKworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBkYXRhKTsKKworCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYXRhLT5pbnB1dF9yZXBvcnRfc2l6ZSA9IChoZGV2LT5yZXBvcnRfZW51bVtISURfSU5QVVRfUkVQT1JUXQorCQkucmVwb3J0X2lkX2hhc2hbUk1JX0FUVE5fUkVQT1JUX0lEXS0+c2l6ZSA+PiAzKQorCQkrIDEgLyogcmVwb3J0IGlkICovOworCWRhdGEtPm91dHB1dF9yZXBvcnRfc2l6ZSA9IChoZGV2LT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0KKwkJLnJlcG9ydF9pZF9oYXNoW1JNSV9XUklURV9SRVBPUlRfSURdLT5zaXplID4+IDMpCisJCSsgMSAvKiByZXBvcnQgaWQgKi87CisKKwlhbGxvY19zaXplID0gZGF0YS0+b3V0cHV0X3JlcG9ydF9zaXplICsgZGF0YS0+aW5wdXRfcmVwb3J0X3NpemU7CisKKwlkYXRhLT53cml0ZVJlcG9ydCA9IGRldm1fa3phbGxvYygmaGRldi0+ZGV2LCBhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEtPndyaXRlUmVwb3J0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJldHVybiByZXQ7CisJfQorCisJZGF0YS0+cmVhZFJlcG9ydCA9IGRhdGEtPndyaXRlUmVwb3J0ICsgZGF0YS0+b3V0cHV0X3JlcG9ydF9zaXplOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGF0YS0+d2FpdCk7CisKKwltdXRleF9pbml0KCZkYXRhLT5wYWdlX211dGV4KTsKKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCF0ZXN0X2JpdChSTUlfU1RBUlRFRCwgJmRhdGEtPmZsYWdzKSkgeworCQloaWRfaHdfc3RvcChoZGV2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJtaV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IHJtaV9kYXRhICpoZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWNsZWFyX2JpdChSTUlfU1RBUlRFRCwgJmhkYXRhLT5mbGFncyk7CisKKwloaWRfaHdfc3RvcChoZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHJtaV9pZFtdID0geworCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1JNSSwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcm1pX2lkKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHJtaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiaGlkLXJtaSIsCisJLmlkX3RhYmxlCQk9IHJtaV9pZCwKKwkucHJvYmUJCQk9IHJtaV9wcm9iZSwKKwkucmVtb3ZlCQkJPSBybWlfcmVtb3ZlLAorCS5yYXdfZXZlbnQJCT0gcm1pX3Jhd19ldmVudCwKKwkuaW5wdXRfbWFwcGluZwkJPSBybWlfaW5wdXRfbWFwcGluZywKKwkuaW5wdXRfY29uZmlndXJlZAk9IHJtaV9pbnB1dF9jb25maWd1cmVkLAorI2lmZGVmIENPTkZJR19QTQorCS5yZXN1bWUJCQk9IHJtaV9wb3N0X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCQk9IHJtaV9wb3N0X3Jlc2V0LAorI2VuZGlmCit9OworCittb2R1bGVfaGlkX2RyaXZlcihybWlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmV3IER1Z2dhbiA8YWR1Z2dhbkBzeW5hcHRpY3MuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSTUkgSElEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNhaXRlay5jIGIvZHJpdmVycy9oaWQvaGlkLXNhaXRlay5jCmluZGV4IDM3OTYxYzcuLjY5Y2NhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zYWl0ZWsuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2FpdGVrLmMKQEAgLTEsMTAgKzEsMTcgQEAKIC8qCi0gKiAgSElEIGRyaXZlciBmb3IgU2FpdGVrIGRldmljZXMsIGN1cnJlbnRseSBvbmx5IHRoZSBQUzEwMDAgKFVTQiBnYW1lcGFkKS4KKyAqICBISUQgZHJpdmVyIGZvciBTYWl0ZWsgZGV2aWNlcy4KKyAqCisgKiAgUFMxMDAwIChVU0IgZ2FtZXBhZCk6CiAgKiAgRml4ZXMgdGhlIEhJRCByZXBvcnQgZGVzY3JpcHRvciBieSByZW1vdmluZyBhIG5vbi1leGlzdGVudCBheGlzIGFuZAogICogIGNsZWFyaW5nIHRoZSBjb25zdGFudCBiaXQgb24gdGhlIGlucHV0IHJlcG9ydHMgZm9yIGJ1dHRvbnMgYW5kIGQtcGFkLgogICogIChUaGlzIG1vZHVsZSBpcyBiYXNlZCBvbiAiaGlkLW9ydGVrIi4pCi0gKgogICogIENvcHlyaWdodCAoYykgMjAxMiBBbmRyZWFzIEjDvGJuZXIKKyAqCisgKiAgUi5BLlQuNywgTS5NLk8uNyAoVVNCIGdhbWluZyBtaWNlKToKKyAqICBGaXhlcyB0aGUgbW9kZSBidXR0b24gd2hpY2ggY3ljbGVzIHRocm91Z2ggdGhyZWUgY29uc3RhbnRseSBwcmVzc2VkCisgKiAgYnV0dG9ucy4gQWxsIHRocmVlIHByZXNzIGV2ZW50cyBhcmUgbWFwcGVkIHRvIG9uZSBidXR0b24gYW5kIHRoZQorICogIG1pc3NpbmcgcmVsZWFzZSBldmVudCBpcyBnZW5lcmF0ZWQgaW1tZWRpYXRlbHkuCisgKgogICovCiAKIC8qCkBAIC0yMSwxMiArMjgsNTcgQEAKIAogI2luY2x1ZGUgImhpZC1pZHMuaCIKIAorI2RlZmluZSBTQUlURUtfRklYX1BTMTAwMAkweDAwMDEKKyNkZWZpbmUgU0FJVEVLX1JFTEVBU0VfTU9ERV9SQVQ3CTB4MDAwMgorI2RlZmluZSBTQUlURUtfUkVMRUFTRV9NT0RFX01NTzcJMHgwMDA0CisKK3N0cnVjdCBzYWl0ZWtfc2MgeworCXVuc2lnbmVkIGxvbmcgcXVpcmtzOworCWludCBtb2RlOworfTsKKworc3RhdGljIGludCBzYWl0ZWtfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc2FpdGVrX3NjICpzc2M7CisJaW50IHJldDsKKworCXNzYyA9IGRldm1fa3phbGxvYygmaGRldi0+ZGV2LCBzaXplb2YoKnNzYyksIEdGUF9LRVJORUwpOworCWlmIChzc2MgPT0gTlVMTCkgeworCQloaWRfZXJyKGhkZXYsICJjYW4ndCBhbGxvYyBzYWl0ZWsgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNzYy0+cXVpcmtzID0gcXVpcmtzOworCXNzYy0+bW9kZSA9IC0xOworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHNzYyk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBfX3U4ICpzYWl0ZWtfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKIAkJdW5zaWduZWQgaW50ICpyc2l6ZSkKIHsKLQlpZiAoKnJzaXplID09IDEzNyAmJiByZGVzY1syMF0gPT0gMHgwOSAmJiByZGVzY1syMV0gPT0gMHgzMwotCQkJJiYgcmRlc2NbOTRdID09IDB4ODEgJiYgcmRlc2NbOTVdID09IDB4MDMKLQkJCSYmIHJkZXNjWzExMF0gPT0gMHg4MSAmJiByZGVzY1sxMTFdID09IDB4MDMpIHsKKwlzdHJ1Y3Qgc2FpdGVrX3NjICpzc2MgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoKHNzYy0+cXVpcmtzICYgU0FJVEVLX0ZJWF9QUzEwMDApICYmICpyc2l6ZSA9PSAxMzcgJiYKKwkJCXJkZXNjWzIwXSA9PSAweDA5ICYmIHJkZXNjWzIxXSA9PSAweDMzICYmCisJCQlyZGVzY1s5NF0gPT0gMHg4MSAmJiByZGVzY1s5NV0gPT0gMHgwMyAmJgorCQkJcmRlc2NbMTEwXSA9PSAweDgxICYmIHJkZXNjWzExMV0gPT0gMHgwMykgewogCiAJCWhpZF9pbmZvKGhkZXYsICJGaXhpbmcgdXAgU2FpdGVrIFBTMTAwMCByZXBvcnQgZGVzY3JpcHRvclxuIik7CiAKQEAgLTQyLDggKzk0LDkzIEBACiAJcmV0dXJuIHJkZXNjOwogfQogCitzdGF0aWMgaW50IHNhaXRla19yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHU4ICpyYXdfZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHNhaXRla19zYyAqc3NjID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCisJaWYgKHNzYy0+cXVpcmtzICYgU0FJVEVLX1JFTEVBU0VfTU9ERV9SQVQ3ICYmIHNpemUgPT0gNykgeworCQkvKiBSLkEuVC43IHVzZXMgYml0cyAxMywgMTQsIDE1IGZvciB0aGUgbW9kZSAqLworCQlpbnQgbW9kZSA9IC0xOworCQlpZiAocmF3X2RhdGFbMV0gJiAweDAxKQorCQkJbW9kZSA9IDA7CisJCWVsc2UgaWYgKHJhd19kYXRhWzFdICYgMHgwMikKKwkJCW1vZGUgPSAxOworCQllbHNlIGlmIChyYXdfZGF0YVsxXSAmIDB4MDQpCisJCQltb2RlID0gMjsKKworCQkvKiBjbGVhciBtb2RlIGJpdHMgKi8KKwkJcmF3X2RhdGFbMV0gJj0gfjB4MDc7CisKKwkJaWYgKG1vZGUgIT0gc3NjLT5tb2RlKSB7CisJCQloaWRfZGJnKGhkZXYsICJlbnRlcmVkIG1vZGUgJWRcbiIsIG1vZGUpOworCQkJaWYgKHNzYy0+bW9kZSAhPSAtMSkgeworCQkJCS8qIHVzZSBiaXQgMTMgYXMgdGhlIG1vZGUgYnV0dG9uICovCisJCQkJcmF3X2RhdGFbMV0gfD0gMHgwNDsKKwkJCX0KKwkJCXNzYy0+bW9kZSA9IG1vZGU7CisJCX0KKwl9IGVsc2UgaWYgKHNzYy0+cXVpcmtzICYgU0FJVEVLX1JFTEVBU0VfTU9ERV9NTU83ICYmIHNpemUgPT0gOCkgeworCisJCS8qIE0uTS5PLjcgdXNlcyBiaXRzIDgsIDIyLCAyMyBmb3IgdGhlIG1vZGUgKi8KKwkJaW50IG1vZGUgPSAtMTsKKwkJaWYgKHJhd19kYXRhWzFdICYgMHg4MCkKKwkJCW1vZGUgPSAwOworCQllbHNlIGlmIChyYXdfZGF0YVsyXSAmIDB4MDEpCisJCQltb2RlID0gMTsKKwkJZWxzZSBpZiAocmF3X2RhdGFbMl0gJiAweDAyKQorCQkJbW9kZSA9IDI7CisKKwkJLyogY2xlYXIgbW9kZSBiaXRzICovCisJCXJhd19kYXRhWzFdICY9IH4weDgwOworCQlyYXdfZGF0YVsyXSAmPSB+MHgwMzsKKworCQlpZiAobW9kZSAhPSBzc2MtPm1vZGUpIHsKKwkJCWhpZF9kYmcoaGRldiwgImVudGVyZWQgbW9kZSAlZFxuIiwgbW9kZSk7CisJCQlpZiAoc3NjLT5tb2RlICE9IC0xKSB7CisJCQkJLyogdXNlIGJpdCA4IGFzIHRoZSBtb2RlIGJ1dHRvbiwgYml0cyAyMgorCQkJCSAqIGFuZCAyMyBkbyBub3QgcmVwcmVzZW50IGJ1dHRvbnMKKwkJCQkgKiBhY2NvcmRpbmcgdG8gdGhlIEhJRCByZXBvcnQgZGVzY3JpcHRvcgorCQkJCSAqLworCQkJCXJhd19kYXRhWzFdIHw9IDB4ODA7CisJCQl9CisJCQlzc2MtPm1vZGUgPSBtb2RlOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FpdGVrX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBzYWl0ZWtfc2MgKnNzYyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZICYmIHZhbHVlICYmCisJCQkoKChzc2MtPnF1aXJrcyAmIFNBSVRFS19SRUxFQVNFX01PREVfUkFUNykgJiYKKwkJCSAgdXNhZ2UtPmNvZGUgLSBCVE5fTU9VU0UgPT0gMTApIHx8CisJCQkoKHNzYy0+cXVpcmtzICYgU0FJVEVLX1JFTEVBU0VfTU9ERV9NTU83KSAmJgorCQkJIHVzYWdlLT5jb2RlIC0gQlROX01PVVNFID09IDE1KSkpIHsKKworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCB1c2FnZS0+Y29kZSwgMSk7CisKKwkJLyogcmVwb3J0IG1pc3NpbmcgcmVsZWFzZSBldmVudCAqLworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCB1c2FnZS0+Y29kZSwgMCk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBzYWl0ZWtfZGV2aWNlc1tdID0gewotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQUlURUssIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1BTMTAwMCl9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQUlURUssIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1BTMTAwMCksCisJCS5kcml2ZXJfZGF0YSA9IFNBSVRFS19GSVhfUFMxMDAwIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBSVRFSywgVVNCX0RFVklDRV9JRF9TQUlURUtfUkFUNyksCisJCS5kcml2ZXJfZGF0YSA9IFNBSVRFS19SRUxFQVNFX01PREVfUkFUNyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQUlURUssIFVTQl9ERVZJQ0VfSURfU0FJVEVLX01NTzcpLAorCQkuZHJpdmVyX2RhdGEgPSBTQUlURUtfUkVMRUFTRV9NT0RFX01NTzcgfSwKIAl7IH0KIH07CiAKQEAgLTUyLDcgKzE4OSwxMCBAQAogc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHNhaXRla19kcml2ZXIgPSB7CiAJLm5hbWUgPSAic2FpdGVrIiwKIAkuaWRfdGFibGUgPSBzYWl0ZWtfZGV2aWNlcywKLQkucmVwb3J0X2ZpeHVwID0gc2FpdGVrX3JlcG9ydF9maXh1cAorCS5wcm9iZSA9IHNhaXRla19wcm9iZSwKKwkucmVwb3J0X2ZpeHVwID0gc2FpdGVrX3JlcG9ydF9maXh1cCwKKwkucmF3X2V2ZW50ID0gc2FpdGVrX3Jhd19ldmVudCwKKwkuZXZlbnQgPSBzYWl0ZWtfZXZlbnQsCiB9OwogbW9kdWxlX2hpZF9kcml2ZXIoc2FpdGVrX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zZW5zb3ItaHViLmMgYi9kcml2ZXJzL2hpZC9oaWQtc2Vuc29yLWh1Yi5jCmluZGV4IGJlMTRiNTYuLmE4ZDVjOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zZW5zb3ItaHViLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNlbnNvci1odWIuYwpAQCAtNzA1LDggKzcwNSwxNyBAQAogCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1NFTlNPUl9IVUIsIFVTQl9WRU5ET1JfSURfSU5URUxfMSwKIAkJCVVTQl9ERVZJQ0VfSURfSU5URUxfSElEX1NFTlNPUl8xKSwKIAkJCS5kcml2ZXJfZGF0YSA9IEhJRF9TRU5TT1JfSFVCX0VOVU1fUVVJUkt9LAorCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1NFTlNPUl9IVUIsIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULAorCQkJVVNCX0RFVklDRV9JRF9NU19TVVJGQUNFX1BST18yKSwKKwkJCS5kcml2ZXJfZGF0YSA9IEhJRF9TRU5TT1JfSFVCX0VOVU1fUVVJUkt9LAorCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1NFTlNPUl9IVUIsIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULAorCQkJVVNCX0RFVklDRV9JRF9NU19UT1VDSF9DT1ZFUl8yKSwKKwkJCS5kcml2ZXJfZGF0YSA9IEhJRF9TRU5TT1JfSFVCX0VOVU1fUVVJUkt9LAorCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1NFTlNPUl9IVUIsIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULAorCQkJVVNCX0RFVklDRV9JRF9NU19UWVBFX0NPVkVSXzIpLAorCQkJLmRyaXZlcl9kYXRhID0gSElEX1NFTlNPUl9IVUJfRU5VTV9RVUlSS30sCiAJeyBISURfREVWSUNFKEhJRF9CVVNfQU5ZLCBISURfR1JPVVBfU0VOU09SX0hVQiwgVVNCX1ZFTkRPUl9JRF9TVE1fMCwKLQkJCVVTQl9ERVZJQ0VfSURfU1RNX0hJRF9TRU5TT1IpLAorCQkJVVNCX0RFVklDRV9JRF9TVE1fSElEX1NFTlNPUl8xKSwKIAkJCS5kcml2ZXJfZGF0YSA9IEhJRF9TRU5TT1JfSFVCX0VOVU1fUVVJUkt9LAogCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1NFTlNPUl9IVUIsIFVTQl9WRU5ET1JfSURfVEVYQVNfSU5TVFJVTUVOVFMsCiAJCQlVU0JfREVWSUNFX0lEX1RFWEFTX0lOU1RSVU1FTlRTX0xFTk9WT19ZT0dBKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCmluZGV4IDkwOGRlMjcuLjIyNTllYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CiAKICNpbmNsdWRlICJoaWQtaWRzLmgiCkBAIC03MTcsOCArNzE4LDM5IEBACiAJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTLAogfTsKIAorc3RydWN0IHNpeGF4aXNfbGVkIHsKKwlfX3U4IHRpbWVfZW5hYmxlZDsgLyogdGhlIHRvdGFsIHRpbWUgdGhlIGxlZCBpcyBhY3RpdmUgKDB4ZmYgbWVhbnMgZm9yZXZlcikgKi8KKwlfX3U4IGR1dHlfbGVuZ3RoOyAgLyogaG93IGxvbmcgYSBjeWNsZSBpcyBpbiBkZWNpc2Vjb25kcyAoMCBtZWFucyAicmVhbGx5IGZhc3QiKSAqLworCV9fdTggZW5hYmxlZDsKKwlfX3U4IGR1dHlfb2ZmOyAvKiAlIG9mIGR1dHlfbGVuZ3RoIHRoZSBsZWQgaXMgb2ZmICgweGZmIG1lYW5zIDEwMCUpICovCisJX191OCBkdXR5X29uOyAgLyogJSBvZiBkdXR5X2xlbmd0aCB0aGUgbGVkIGlzIG9uICgweGZmIG1lYW4gMTAwJSkgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzaXhheGlzX3J1bWJsZSB7CisJX191OCBwYWRkaW5nOworCV9fdTggcmlnaHRfZHVyYXRpb247IC8qIFJpZ2h0IG1vdG9yIGR1cmF0aW9uICgweGZmIG1lYW5zIGZvcmV2ZXIpICovCisJX191OCByaWdodF9tb3Rvcl9vbjsgLyogUmlnaHQgKHNtYWxsKSBtb3RvciBvbi9vZmYsIG9ubHkgc3VwcG9ydHMgdmFsdWVzIG9mIDAgb3IgMSAob2ZmL29uKSAqLworCV9fdTggbGVmdF9kdXJhdGlvbjsgICAgLyogTGVmdCBtb3RvciBkdXJhdGlvbiAoMHhmZiBtZWFucyBmb3JldmVyKSAqLworCV9fdTggbGVmdF9tb3Rvcl9mb3JjZTsgLyogbGVmdCAobGFyZ2UpIG1vdG9yLCBzdXBwb3J0cyBmb3JjZSB2YWx1ZXMgZnJvbSAwIHRvIDI1NSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNpeGF4aXNfb3V0cHV0X3JlcG9ydCB7CisJX191OCByZXBvcnRfaWQ7CisJc3RydWN0IHNpeGF4aXNfcnVtYmxlIHJ1bWJsZTsKKwlfX3U4IHBhZGRpbmdbNF07CisJX191OCBsZWRzX2JpdG1hcDsgLyogYml0bWFwIG9mIGVuYWJsZWQgTEVEczogTEVEXzEgPSAweDAyLCBMRURfMiA9IDB4MDQsIC4uLiAqLworCXN0cnVjdCBzaXhheGlzX2xlZCBsZWRbNF07ICAgIC8qIExFRHggYXQgKDQgLSB4KSAqLworCXN0cnVjdCBzaXhheGlzX2xlZCBfcmVzZXJ2ZWQ7IC8qIExFRDUsIG5vdCBhY3R1YWxseSBzb2xkZXJlZCAqLworfSBfX3BhY2tlZDsKKwordW5pb24gc2l4YXhpc19vdXRwdXRfcmVwb3J0XzAxIHsKKwlzdHJ1Y3Qgc2l4YXhpc19vdXRwdXRfcmVwb3J0IGRhdGE7CisJX191OCBidWZbMzZdOworfTsKKwogc3RhdGljIHNwaW5sb2NrX3Qgc29ueV9kZXZfbGlzdF9sb2NrOwogc3RhdGljIExJU1RfSEVBRChzb255X2RldmljZV9saXN0KTsKK3N0YXRpYyBERUZJTkVfSURBKHNvbnlfZGV2aWNlX2lkX2FsbG9jYXRvcik7CiAKIHN0cnVjdCBzb255X3NjIHsKIAlzcGlubG9ja190IGxvY2s7CkBAIC03MjgsNiArNzYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHF1aXJrczsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhdGVfd29ya2VyOwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeTsKKwlpbnQgZGV2aWNlX2lkOwogCiAjaWZkZWYgQ09ORklHX1NPTllfRkYKIAlfX3U4IGxlZnQ7CkBAIC03NDAsNiArNzczLDggQEAKIAlfX3U4IGJhdHRlcnlfY2hhcmdpbmc7CiAJX191OCBiYXR0ZXJ5X2NhcGFjaXR5OwogCV9fdTggbGVkX3N0YXRlW01BWF9MRURTXTsKKwlfX3U4IGxlZF9kZWxheV9vbltNQVhfTEVEU107CisJX191OCBsZWRfZGVsYXlfb2ZmW01BWF9MRURTXTsKIAlfX3U4IGxlZF9jb3VudDsKIH07CiAKQEAgLTEwNDgsNiArMTA4Myw1MiBAQAogCQkJCUhJRF9GRUFUVVJFX1JFUE9SVCwgSElEX1JFUV9HRVRfUkVQT1JUKTsKIH0KIAorc3RhdGljIHZvaWQgc2l4YXhpc19zZXRfbGVkc19mcm9tX2lkKGludCBpZCwgX191OCB2YWx1ZXNbTUFYX0xFRFNdKQoreworCXN0YXRpYyBjb25zdCBfX3U4IHNpeGF4aXNfbGVkc1sxMF1bNF0gPSB7CisJCQkJeyAweDAxLCAweDAwLCAweDAwLCAweDAwIH0sCisJCQkJeyAweDAwLCAweDAxLCAweDAwLCAweDAwIH0sCisJCQkJeyAweDAwLCAweDAwLCAweDAxLCAweDAwIH0sCisJCQkJeyAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCisJCQkJeyAweDAxLCAweDAwLCAweDAwLCAweDAxIH0sCisJCQkJeyAweDAwLCAweDAxLCAweDAwLCAweDAxIH0sCisJCQkJeyAweDAwLCAweDAwLCAweDAxLCAweDAxIH0sCisJCQkJeyAweDAxLCAweDAwLCAweDAxLCAweDAxIH0sCisJCQkJeyAweDAwLCAweDAxLCAweDAxLCAweDAxIH0sCisJCQkJeyAweDAxLCAweDAxLCAweDAxLCAweDAxIH0KKwl9OworCisJQlVHX09OKE1BWF9MRURTIDwgQVJSQVlfU0laRShzaXhheGlzX2xlZHNbMF0pKTsKKworCWlmIChpZCA8IDApCisJCXJldHVybjsKKworCWlkICU9IDEwOworCW1lbWNweSh2YWx1ZXMsIHNpeGF4aXNfbGVkc1tpZF0sIHNpemVvZihzaXhheGlzX2xlZHNbaWRdKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR1YWxzaG9jazRfc2V0X2xlZHNfZnJvbV9pZChpbnQgaWQsIF9fdTggdmFsdWVzW01BWF9MRURTXSkKK3sKKwkvKiBUaGUgZmlyc3QgNCBjb2xvci9pbmRleCBlbnRyaWVzIG1hdGNoIHdoYXQgdGhlIFBTNCBhc3NpZ25zICovCisJc3RhdGljIGNvbnN0IF9fdTggY29sb3JfY29kZVs3XVszXSA9IHsKKwkJCS8qIEJsdWUgICAqLwl7IDB4MDAsIDB4MDAsIDB4MDEgfSwKKwkJCS8qIFJlZAkgICovCXsgMHgwMSwgMHgwMCwgMHgwMCB9LAorCQkJLyogR3JlZW4gICovCXsgMHgwMCwgMHgwMSwgMHgwMCB9LAorCQkJLyogUGluayAgICovCXsgMHgwMiwgMHgwMCwgMHgwMSB9LAorCQkJLyogT3JhbmdlICovCXsgMHgwMiwgMHgwMSwgMHgwMCB9LAorCQkJLyogVGVhbCAgICovCXsgMHgwMCwgMHgwMSwgMHgwMSB9LAorCQkJLyogV2hpdGUgICovCXsgMHgwMSwgMHgwMSwgMHgwMSB9CisJfTsKKworCUJVR19PTihNQVhfTEVEUyA8IEFSUkFZX1NJWkUoY29sb3JfY29kZVswXSkpOworCisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuOworCisJaWQgJT0gNzsKKwltZW1jcHkodmFsdWVzLCBjb2xvcl9jb2RlW2lkXSwgc2l6ZW9mKGNvbG9yX2NvZGVbaWRdKSk7Cit9CisKIHN0YXRpYyB2b2lkIGJ1enpfc2V0X2xlZHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IF9fdTggKmxlZHMpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQpAQCAtMTA2NiwxOSArMTE0NywxOCBAQAogCWhpZF9od19yZXF1ZXN0KGhkZXYsIHJlcG9ydCwgSElEX1JFUV9TRVRfUkVQT1JUKTsKIH0KIAotc3RhdGljIHZvaWQgc29ueV9zZXRfbGVkcyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3QgX191OCAqbGVkcywgaW50IGNvdW50KQorc3RhdGljIHZvaWQgc29ueV9zZXRfbGVkcyhzdHJ1Y3Qgc29ueV9zYyAqc2MsIGNvbnN0IF9fdTggKmxlZHMsIGludCBjb3VudCkKIHsKLQlzdHJ1Y3Qgc29ueV9zYyAqZHJ2X2RhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CiAJaW50IG47CiAKIAlCVUdfT04oY291bnQgPiBNQVhfTEVEUyk7CiAKLQlpZiAoZHJ2X2RhdGEtPnF1aXJrcyAmIEJVWlpfQ09OVFJPTExFUiAmJiBjb3VudCA9PSA0KSB7Ci0JCWJ1enpfc2V0X2xlZHMoaGRldiwgbGVkcyk7CisJaWYgKHNjLT5xdWlya3MgJiBCVVpaX0NPTlRST0xMRVIgJiYgY291bnQgPT0gNCkgeworCQlidXp6X3NldF9sZWRzKHNjLT5oZGV2LCBsZWRzKTsKIAl9IGVsc2UgewogCQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykKLQkJCWRydl9kYXRhLT5sZWRfc3RhdGVbbl0gPSBsZWRzW25dOwotCQlzY2hlZHVsZV93b3JrKCZkcnZfZGF0YS0+c3RhdGVfd29ya2VyKTsKKwkJCXNjLT5sZWRfc3RhdGVbbl0gPSBsZWRzW25dOworCQlzY2hlZHVsZV93b3JrKCZzYy0+c3RhdGVfd29ya2VyKTsKIAl9CiB9CiAKQEAgLTEwOTAsNiArMTE3MCw3IEBACiAJc3RydWN0IHNvbnlfc2MgKmRydl9kYXRhOwogCiAJaW50IG47CisJaW50IGZvcmNlX3VwZGF0ZTsKIAogCWRydl9kYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOwogCWlmICghZHJ2X2RhdGEpIHsKQEAgLTEwOTcsMTIgKzExNzgsMjkgQEAKIAkJcmV0dXJuOwogCX0KIAorCS8qCisJICogVGhlIFNpeGF4aXMgb24gVVNCIHdpbGwgb3ZlcnJpZGUgYW55IExFRCBzZXR0aW5ncyBzZW50IHRvIGl0CisJICogYW5kIGtlZXAgZmxhc2hpbmcgYWxsIG9mIHRoZSBMRURzIHVudGlsIHRoZSBQUyBidXR0b24gaXMgcHJlc3NlZC4KKwkgKiBVcGRhdGVzLCBldmVuIGlmIHJlZHVuZGFudCwgbXVzdCBiZSBhbHdheXMgYmUgc2VudCB0byB0aGUKKwkgKiBjb250cm9sbGVyIHRvIGF2b2lkIGhhdmluZyB0byB0b2dnbGUgdGhlIHN0YXRlIG9mIGFuIExFRCBqdXN0IHRvCisJICogc3RvcCB0aGUgZmxhc2hpbmcgbGF0ZXIgb24uCisJICovCisJZm9yY2VfdXBkYXRlID0gISEoZHJ2X2RhdGEtPnF1aXJrcyAmIFNJWEFYSVNfQ09OVFJPTExFUl9VU0IpOworCiAJZm9yIChuID0gMDsgbiA8IGRydl9kYXRhLT5sZWRfY291bnQ7IG4rKykgewotCQlpZiAobGVkID09IGRydl9kYXRhLT5sZWRzW25dKSB7Ci0JCQlpZiAodmFsdWUgIT0gZHJ2X2RhdGEtPmxlZF9zdGF0ZVtuXSkgewotCQkJCWRydl9kYXRhLT5sZWRfc3RhdGVbbl0gPSB2YWx1ZTsKLQkJCQlzb255X3NldF9sZWRzKGhkZXYsIGRydl9kYXRhLT5sZWRfc3RhdGUsIGRydl9kYXRhLT5sZWRfY291bnQpOwotCQkJfQorCQlpZiAobGVkID09IGRydl9kYXRhLT5sZWRzW25dICYmIChmb3JjZV91cGRhdGUgfHwKKwkJCSh2YWx1ZSAhPSBkcnZfZGF0YS0+bGVkX3N0YXRlW25dIHx8CisJCQlkcnZfZGF0YS0+bGVkX2RlbGF5X29uW25dIHx8CisJCQlkcnZfZGF0YS0+bGVkX2RlbGF5X29mZltuXSkpKSB7CisKKwkJCWRydl9kYXRhLT5sZWRfc3RhdGVbbl0gPSB2YWx1ZTsKKworCQkJLyogU2V0dGluZyB0aGUgYnJpZ2h0bmVzcyBzdG9wcyB0aGUgYmxpbmtpbmcgKi8KKwkJCWRydl9kYXRhLT5sZWRfZGVsYXlfb25bbl0gPSAwOworCQkJZHJ2X2RhdGEtPmxlZF9kZWxheV9vZmZbbl0gPSAwOworCisJCQlzb255X3NldF9sZWRzKGRydl9kYXRhLCBkcnZfZGF0YS0+bGVkX3N0YXRlLAorCQkJCQlkcnZfZGF0YS0+bGVkX2NvdW50KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTEzMCw2MyArMTIyOCwxMTIgQEAKIAlyZXR1cm4gTEVEX09GRjsKIH0KIAotc3RhdGljIHZvaWQgc29ueV9sZWRzX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3N0YXRpYyBpbnQgc29ueV9sZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCisJCQkJdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQogewotCXN0cnVjdCBzb255X3NjICpkcnZfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBsZWQtPmRldi0+cGFyZW50OworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGhpZF9kZXZpY2UsIGRldik7CisJc3RydWN0IHNvbnlfc2MgKmRydl9kYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCWludCBuOworCV9fdTggbmV3X29uLCBuZXdfb2ZmOworCisJaWYgKCFkcnZfZGF0YSkgeworCQloaWRfZXJyKGhkZXYsICJObyBkZXZpY2UgZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE1heCBkZWxheSBpcyAyNTUgZGVjaXNlY29uZHMgb3IgMjU1MCBtaWxsaXNlY29uZHMgKi8KKwlpZiAoKmRlbGF5X29uID4gMjU1MCkKKwkJKmRlbGF5X29uID0gMjU1MDsKKwlpZiAoKmRlbGF5X29mZiA+IDI1NTApCisJCSpkZWxheV9vZmYgPSAyNTUwOworCisJLyogQmxpbmsgYXQgMSBIeiBpZiBib3RoIHZhbHVlcyBhcmUgemVybyAqLworCWlmICghKmRlbGF5X29uICYmICEqZGVsYXlfb2ZmKQorCQkqZGVsYXlfb24gPSAqZGVsYXlfb2ZmID0gNTAwOworCisJbmV3X29uID0gKmRlbGF5X29uIC8gMTA7CisJbmV3X29mZiA9ICpkZWxheV9vZmYgLyAxMDsKKworCWZvciAobiA9IDA7IG4gPCBkcnZfZGF0YS0+bGVkX2NvdW50OyBuKyspIHsKKwkJaWYgKGxlZCA9PSBkcnZfZGF0YS0+bGVkc1tuXSkKKwkJCWJyZWFrOworCX0KKworCS8qIFRoaXMgTEVEIGlzIG5vdCByZWdpc3RlcmVkIG9uIHRoaXMgZGV2aWNlICovCisJaWYgKG4gPj0gZHJ2X2RhdGEtPmxlZF9jb3VudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBEb24ndCBzY2hlZHVsZSB3b3JrIGlmIHRoZSB2YWx1ZXMgZGlkbid0IGNoYW5nZSAqLworCWlmIChuZXdfb24gIT0gZHJ2X2RhdGEtPmxlZF9kZWxheV9vbltuXSB8fAorCQluZXdfb2ZmICE9IGRydl9kYXRhLT5sZWRfZGVsYXlfb2ZmW25dKSB7CisJCWRydl9kYXRhLT5sZWRfZGVsYXlfb25bbl0gPSBuZXdfb247CisJCWRydl9kYXRhLT5sZWRfZGVsYXlfb2ZmW25dID0gbmV3X29mZjsKKwkJc2NoZWR1bGVfd29yaygmZHJ2X2RhdGEtPnN0YXRlX3dvcmtlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbnlfbGVkc19yZW1vdmUoc3RydWN0IHNvbnlfc2MgKnNjKQorewogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZDsKIAlpbnQgbjsKIAotCWRydl9kYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOwotCUJVR19PTighKGRydl9kYXRhLT5xdWlya3MgJiBTT05ZX0xFRF9TVVBQT1JUKSk7CisJQlVHX09OKCEoc2MtPnF1aXJrcyAmIFNPTllfTEVEX1NVUFBPUlQpKTsKIAotCWZvciAobiA9IDA7IG4gPCBkcnZfZGF0YS0+bGVkX2NvdW50OyBuKyspIHsKLQkJbGVkID0gZHJ2X2RhdGEtPmxlZHNbbl07Ci0JCWRydl9kYXRhLT5sZWRzW25dID0gTlVMTDsKKwlmb3IgKG4gPSAwOyBuIDwgc2MtPmxlZF9jb3VudDsgbisrKSB7CisJCWxlZCA9IHNjLT5sZWRzW25dOworCQlzYy0+bGVkc1tuXSA9IE5VTEw7CiAJCWlmICghbGVkKQogCQkJY29udGludWU7CiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGxlZCk7CiAJCWtmcmVlKGxlZCk7CiAJfQogCi0JZHJ2X2RhdGEtPmxlZF9jb3VudCA9IDA7CisJc2MtPmxlZF9jb3VudCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgc29ueV9sZWRzX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCitzdGF0aWMgaW50IHNvbnlfbGVkc19pbml0KHN0cnVjdCBzb255X3NjICpzYykKIHsKLQlzdHJ1Y3Qgc29ueV9zYyAqZHJ2X2RhdGE7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBzYy0+aGRldjsKIAlpbnQgbiwgcmV0ID0gMDsKLQlpbnQgbWF4X2JyaWdodG5lc3M7Ci0JaW50IHVzZV9jb2xvcnM7CisJaW50IHVzZV9kczRfbmFtZXM7CiAJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkOwogCXNpemVfdCBuYW1lX3N6OwogCWNoYXIgKm5hbWU7CiAJc2l6ZV90IG5hbWVfbGVuOwogCWNvbnN0IGNoYXIgKm5hbWVfZm10OwotCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY29sb3Jfc3RyW10gPSB7ICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSIgfTsKLQlzdGF0aWMgY29uc3QgX191OCBpbml0aWFsX3ZhbHVlc1tNQVhfTEVEU10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRzNF9uYW1lX3N0cltdID0geyAicmVkIiwgImdyZWVuIiwgImJsdWUiLAorCQkJCQkJICAiZ2xvYmFsIiB9OworCV9fdTggaW5pdGlhbF92YWx1ZXNbTUFYX0xFRFNdID0geyAwIH07CisJX191OCBtYXhfYnJpZ2h0bmVzc1tNQVhfTEVEU10gPSB7IDEgfTsKKwlfX3U4IHVzZV9od19ibGlua1tNQVhfTEVEU10gPSB7IDAgfTsKIAotCWRydl9kYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOwotCUJVR19PTighKGRydl9kYXRhLT5xdWlya3MgJiBTT05ZX0xFRF9TVVBQT1JUKSk7CisJQlVHX09OKCEoc2MtPnF1aXJrcyAmIFNPTllfTEVEX1NVUFBPUlQpKTsKIAotCWlmIChkcnZfZGF0YS0+cXVpcmtzICYgQlVaWl9DT05UUk9MTEVSKSB7Ci0JCWRydl9kYXRhLT5sZWRfY291bnQgPSA0OwotCQltYXhfYnJpZ2h0bmVzcyA9IDE7Ci0JCXVzZV9jb2xvcnMgPSAwOworCWlmIChzYy0+cXVpcmtzICYgQlVaWl9DT05UUk9MTEVSKSB7CisJCXNjLT5sZWRfY291bnQgPSA0OworCQl1c2VfZHM0X25hbWVzID0gMDsKIAkJbmFtZV9sZW4gPSBzdHJsZW4oIjo6YnV6eiMiKTsKIAkJbmFtZV9mbXQgPSAiJXM6OmJ1enolZCI7CiAJCS8qIFZhbGlkYXRlIGV4cGVjdGVkIHJlcG9ydCBjaGFyYWN0ZXJpc3RpY3MuICovCiAJCWlmICghaGlkX3ZhbGlkYXRlX3ZhbHVlcyhoZGV2LCBISURfT1VUUFVUX1JFUE9SVCwgMCwgMCwgNykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgaWYgKGRydl9kYXRhLT5xdWlya3MgJiBEVUFMU0hPQ0s0X0NPTlRST0xMRVIpIHsKLQkJZHJ2X2RhdGEtPmxlZF9jb3VudCA9IDM7Ci0JCW1heF9icmlnaHRuZXNzID0gMjU1OwotCQl1c2VfY29sb3JzID0gMTsKKwl9IGVsc2UgaWYgKHNjLT5xdWlya3MgJiBEVUFMU0hPQ0s0X0NPTlRST0xMRVIpIHsKKwkJZHVhbHNob2NrNF9zZXRfbGVkc19mcm9tX2lkKHNjLT5kZXZpY2VfaWQsIGluaXRpYWxfdmFsdWVzKTsKKwkJaW5pdGlhbF92YWx1ZXNbM10gPSAxOworCQlzYy0+bGVkX2NvdW50ID0gNDsKKwkJbWVtc2V0KG1heF9icmlnaHRuZXNzLCAyNTUsIDMpOworCQl1c2VfaHdfYmxpbmtbM10gPSAxOworCQl1c2VfZHM0X25hbWVzID0gMTsKIAkJbmFtZV9sZW4gPSAwOwogCQluYW1lX2ZtdCA9ICIlczolcyI7CiAJfSBlbHNlIHsKLQkJZHJ2X2RhdGEtPmxlZF9jb3VudCA9IDQ7Ci0JCW1heF9icmlnaHRuZXNzID0gMTsKLQkJdXNlX2NvbG9ycyA9IDA7CisJCXNpeGF4aXNfc2V0X2xlZHNfZnJvbV9pZChzYy0+ZGV2aWNlX2lkLCBpbml0aWFsX3ZhbHVlcyk7CisJCXNjLT5sZWRfY291bnQgPSA0OworCQltZW1zZXQodXNlX2h3X2JsaW5rLCAxLCA0KTsKKwkJdXNlX2RzNF9uYW1lcyA9IDA7CiAJCW5hbWVfbGVuID0gc3RybGVuKCI6OnNvbnkjIik7CiAJCW5hbWVfZm10ID0gIiVzOjpzb255JWQiOwogCX0KQEAgLTExOTYsMTQgKzEzNDMsMTQgQEAKIAkgKiBvbmx5IHJlbGV2YW50IGlmIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGFmdGVyIHNvbWVib2R5IGFjdGl2ZWx5IHNldCB0aGUKIAkgKiBMRURzIHRvIG9uCiAJICovCi0Jc29ueV9zZXRfbGVkcyhoZGV2LCBpbml0aWFsX3ZhbHVlcywgZHJ2X2RhdGEtPmxlZF9jb3VudCk7CisJc29ueV9zZXRfbGVkcyhzYywgaW5pdGlhbF92YWx1ZXMsIHNjLT5sZWRfY291bnQpOwogCiAJbmFtZV9zeiA9IHN0cmxlbihkZXZfbmFtZSgmaGRldi0+ZGV2KSkgKyBuYW1lX2xlbiArIDE7CiAKLQlmb3IgKG4gPSAwOyBuIDwgZHJ2X2RhdGEtPmxlZF9jb3VudDsgbisrKSB7CisJZm9yIChuID0gMDsgbiA8IHNjLT5sZWRfY291bnQ7IG4rKykgewogCi0JCWlmICh1c2VfY29sb3JzKQotCQkJbmFtZV9zeiA9IHN0cmxlbihkZXZfbmFtZSgmaGRldi0+ZGV2KSkgKyBzdHJsZW4oY29sb3Jfc3RyW25dKSArIDI7CisJCWlmICh1c2VfZHM0X25hbWVzKQorCQkJbmFtZV9zeiA9IHN0cmxlbihkZXZfbmFtZSgmaGRldi0+ZGV2KSkgKyBzdHJsZW4oZHM0X25hbWVfc3RyW25dKSArIDI7CiAKIAkJbGVkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxlZF9jbGFzc2RldikgKyBuYW1lX3N6LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFsZWQpIHsKQEAgLTEyMTMsMzAgKzEzNjAsMzUgQEAKIAkJfQogCiAJCW5hbWUgPSAodm9pZCAqKSgmbGVkWzFdKTsKLQkJaWYgKHVzZV9jb2xvcnMpCi0JCQlzbnByaW50ZihuYW1lLCBuYW1lX3N6LCBuYW1lX2ZtdCwgZGV2X25hbWUoJmhkZXYtPmRldiksIGNvbG9yX3N0cltuXSk7CisJCWlmICh1c2VfZHM0X25hbWVzKQorCQkJc25wcmludGYobmFtZSwgbmFtZV9zeiwgbmFtZV9mbXQsIGRldl9uYW1lKCZoZGV2LT5kZXYpLAorCQkJZHM0X25hbWVfc3RyW25dKTsKIAkJZWxzZQogCQkJc25wcmludGYobmFtZSwgbmFtZV9zeiwgbmFtZV9mbXQsIGRldl9uYW1lKCZoZGV2LT5kZXYpLCBuICsgMSk7CiAJCWxlZC0+bmFtZSA9IG5hbWU7Ci0JCWxlZC0+YnJpZ2h0bmVzcyA9IDA7Ci0JCWxlZC0+bWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzczsKKwkJbGVkLT5icmlnaHRuZXNzID0gaW5pdGlhbF92YWx1ZXNbbl07CisJCWxlZC0+bWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzc1tuXTsKIAkJbGVkLT5icmlnaHRuZXNzX2dldCA9IHNvbnlfbGVkX2dldF9icmlnaHRuZXNzOwogCQlsZWQtPmJyaWdodG5lc3Nfc2V0ID0gc29ueV9sZWRfc2V0X2JyaWdodG5lc3M7CiAKKwkJaWYgKHVzZV9od19ibGlua1tuXSkKKwkJCWxlZC0+Ymxpbmtfc2V0ID0gc29ueV9sZWRfYmxpbmtfc2V0OworCisJCXNjLT5sZWRzW25dID0gbGVkOworCiAJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmaGRldi0+ZGV2LCBsZWQpOwogCQlpZiAocmV0KSB7CiAJCQloaWRfZXJyKGhkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEICVkXG4iLCBuKTsKKwkJCXNjLT5sZWRzW25dID0gTlVMTDsKIAkJCWtmcmVlKGxlZCk7CiAJCQlnb3RvIGVycm9yX2xlZHM7CiAJCX0KLQotCQlkcnZfZGF0YS0+bGVkc1tuXSA9IGxlZDsKIAl9CiAKIAlyZXR1cm4gcmV0OwogCiBlcnJvcl9sZWRzOgotCXNvbnlfbGVkc19yZW1vdmUoaGRldik7CisJc29ueV9sZWRzX3JlbW92ZShzYyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI0NCwyOSArMTM5Niw1MiBAQAogc3RhdGljIHZvaWQgc2l4YXhpc19zdGF0ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzb255X3NjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc29ueV9zYywgc3RhdGVfd29ya2VyKTsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltdID0gewotCQkweDAxLAotCQkweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLAotCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkweGZmLCAweDI3LCAweDEwLCAweDAwLCAweDMyLAotCQkweGZmLCAweDI3LCAweDEwLCAweDAwLCAweDMyLAotCQkweGZmLCAweDI3LCAweDEwLCAweDAwLCAweDMyLAotCQkweGZmLCAweDI3LCAweDEwLCAweDAwLCAweDMyLAotCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisJaW50IG47CisJdW5pb24gc2l4YXhpc19vdXRwdXRfcmVwb3J0XzAxIHJlcG9ydCA9IHsKKwkJLmJ1ZiA9IHsKKwkJCTB4MDEsCisJCQkweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4ZmYsIDB4MjcsIDB4MTAsIDB4MDAsIDB4MzIsCisJCQkweGZmLCAweDI3LCAweDEwLCAweDAwLCAweDMyLAorCQkJMHhmZiwgMHgyNywgMHgxMCwgMHgwMCwgMHgzMiwKKwkJCTB4ZmYsIDB4MjcsIDB4MTAsIDB4MDAsIDB4MzIsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisJCX0KIAl9OwogCiAjaWZkZWYgQ09ORklHX1NPTllfRkYKLQlidWZbM10gPSBzYy0+cmlnaHQgPyAxIDogMDsKLQlidWZbNV0gPSBzYy0+bGVmdDsKKwlyZXBvcnQuZGF0YS5ydW1ibGUucmlnaHRfbW90b3Jfb24gPSBzYy0+cmlnaHQgPyAxIDogMDsKKwlyZXBvcnQuZGF0YS5ydW1ibGUubGVmdF9tb3Rvcl9mb3JjZSA9IHNjLT5sZWZ0OwogI2VuZGlmCiAKLQlidWZbMTBdIHw9IHNjLT5sZWRfc3RhdGVbMF0gPDwgMTsKLQlidWZbMTBdIHw9IHNjLT5sZWRfc3RhdGVbMV0gPDwgMjsKLQlidWZbMTBdIHw9IHNjLT5sZWRfc3RhdGVbMl0gPDwgMzsKLQlidWZbMTBdIHw9IHNjLT5sZWRfc3RhdGVbM10gPDwgNDsKKwlyZXBvcnQuZGF0YS5sZWRzX2JpdG1hcCB8PSBzYy0+bGVkX3N0YXRlWzBdIDw8IDE7CisJcmVwb3J0LmRhdGEubGVkc19iaXRtYXAgfD0gc2MtPmxlZF9zdGF0ZVsxXSA8PCAyOworCXJlcG9ydC5kYXRhLmxlZHNfYml0bWFwIHw9IHNjLT5sZWRfc3RhdGVbMl0gPDwgMzsKKwlyZXBvcnQuZGF0YS5sZWRzX2JpdG1hcCB8PSBzYy0+bGVkX3N0YXRlWzNdIDw8IDQ7CiAKLQloaWRfaHdfcmF3X3JlcXVlc3Qoc2MtPmhkZXYsIDB4MDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIEhJRF9PVVRQVVRfUkVQT1JULAotCQkJSElEX1JFUV9TRVRfUkVQT1JUKTsKKwkvKiBTZXQgZmxhZyBmb3IgYWxsIGxlZHMgb2ZmLCByZXF1aXJlZCBmb3IgM3JkIHBhcnR5IElOVEVDIGNvbnRyb2xsZXIgKi8KKwlpZiAoKHJlcG9ydC5kYXRhLmxlZHNfYml0bWFwICYgMHgxRSkgPT0gMCkKKwkJcmVwb3J0LmRhdGEubGVkc19iaXRtYXAgfD0gMHgyMDsKKworCS8qCisJICogVGhlIExFRHMgaW4gdGhlIHJlcG9ydCBhcmUgaW5kZXhlZCBpbiByZXZlcnNlIG9yZGVyIHRvIHRoZWlyCisJICogY29ycmVzcG9uZGluZyBsaWdodCBvbiB0aGUgY29udHJvbGxlci4KKwkgKiBJbmRleCAwID0gTEVEIDQsIGluZGV4IDEgPSBMRUQgMywgZXRjLi4uCisJICoKKwkgKiBJbiB0aGUgY2FzZSBvZiBib3RoIGRlbGF5IHZhbHVlcyBiZWluZyB6ZXJvIChibGlua2luZyBkaXNhYmxlZCkgdGhlCisJICogZGVmYXVsdCByZXBvcnQgdmFsdWVzIHNob3VsZCBiZSB1c2VkIG9yIHRoZSBjb250cm9sbGVyIExFRCB3aWxsIGJlCisJICogYWx3YXlzIG9mZi4KKwkgKi8KKwlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCWlmIChzYy0+bGVkX2RlbGF5X29uW25dIHx8IHNjLT5sZWRfZGVsYXlfb2ZmW25dKSB7CisJCQlyZXBvcnQuZGF0YS5sZWRbMyAtIG5dLmR1dHlfb2ZmID0gc2MtPmxlZF9kZWxheV9vZmZbbl07CisJCQlyZXBvcnQuZGF0YS5sZWRbMyAtIG5dLmR1dHlfb24gPSBzYy0+bGVkX2RlbGF5X29uW25dOworCQl9CisJfQorCisJaGlkX2h3X3Jhd19yZXF1ZXN0KHNjLT5oZGV2LCByZXBvcnQuZGF0YS5yZXBvcnRfaWQsIHJlcG9ydC5idWYsCisJCQlzaXplb2YocmVwb3J0KSwgSElEX09VVFBVVF9SRVBPUlQsIEhJRF9SRVFfU0VUX1JFUE9SVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1YWxzaG9jazRfc3RhdGVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTEyNzksNyArMTQ1NCw3IEBACiAKIAlpZiAoc2MtPnF1aXJrcyAmIERVQUxTSE9DSzRfQ09OVFJPTExFUl9VU0IpIHsKIAkJYnVmWzBdID0gMHgwNTsKLQkJYnVmWzFdID0gMHgwMzsKKwkJYnVmWzFdID0gMHhGRjsKIAkJb2Zmc2V0ID0gNDsKIAl9IGVsc2UgewogCQlidWZbMF0gPSAweDExOwpAQCAtMTI5NSw5ICsxNDcwLDE4IEBACiAJb2Zmc2V0ICs9IDI7CiAjZW5kaWYKIAotCWJ1ZltvZmZzZXQrK10gPSBzYy0+bGVkX3N0YXRlWzBdOwotCWJ1ZltvZmZzZXQrK10gPSBzYy0+bGVkX3N0YXRlWzFdOwotCWJ1ZltvZmZzZXQrK10gPSBzYy0+bGVkX3N0YXRlWzJdOworCS8qIExFRCAzIGlzIHRoZSBnbG9iYWwgY29udHJvbCAqLworCWlmIChzYy0+bGVkX3N0YXRlWzNdKSB7CisJCWJ1ZltvZmZzZXQrK10gPSBzYy0+bGVkX3N0YXRlWzBdOworCQlidWZbb2Zmc2V0KytdID0gc2MtPmxlZF9zdGF0ZVsxXTsKKwkJYnVmW29mZnNldCsrXSA9IHNjLT5sZWRfc3RhdGVbMl07CisJfSBlbHNlIHsKKwkJb2Zmc2V0ICs9IDM7CisJfQorCisJLyogSWYgYm90aCBkZWxheSB2YWx1ZXMgYXJlIHplcm8gdGhlIER1YWxTaG9jayA0IGRpc2FibGVzIGJsaW5raW5nLiAqLworCWJ1ZltvZmZzZXQrK10gPSBzYy0+bGVkX2RlbGF5X29uWzNdOworCWJ1ZltvZmZzZXQrK10gPSBzYy0+bGVkX2RlbGF5X29mZlszXTsKIAogCWlmIChzYy0+cXVpcmtzICYgRFVBTFNIT0NLNF9DT05UUk9MTEVSX1VTQikKIAkJaGlkX2h3X291dHB1dF9yZXBvcnQoaGRldiwgYnVmLCAzMik7CkBAIC0xMzIzLDkgKzE1MDcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNvbnlfaW5pdF9mZihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3N0YXRpYyBpbnQgc29ueV9pbml0X2ZmKHN0cnVjdCBzb255X3NjICpzYykKIHsKLQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGRldi0+aW5wdXRzLm5leHQsCisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KHNjLT5oZGV2LT5pbnB1dHMubmV4dCwKIAkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGhpZGlucHV0LT5pbnB1dDsKIApAQCAtMTMzNCw3ICsxNTE4LDcgQEAKIH0KIAogI2Vsc2UKLXN0YXRpYyBpbnQgc29ueV9pbml0X2ZmKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQorc3RhdGljIGludCBzb255X2luaXRfZmYoc3RydWN0IHNvbnlfc2MgKnNjKQogewogCXJldHVybiAwOwogfQpAQCAtMTM4NCw4ICsxNTY4LDYgQEAKIAogc3RhdGljIGludCBzb255X2JhdHRlcnlfcHJvYmUoc3RydWN0IHNvbnlfc2MgKnNjKQogewotCXN0YXRpYyBhdG9taWNfdCBwb3dlcl9pZF9zZXEgPSBBVE9NSUNfSU5JVCgwKTsKLQl1bnNpZ25lZCBsb25nIHBvd2VyX2lkOwogCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2ID0gc2MtPmhkZXY7CiAJaW50IHJldDsKIApAQCAtMTM5NSwxNSArMTU3NywxMyBAQAogCSAqLwogCXNjLT5iYXR0ZXJ5X2NhcGFjaXR5ID0gMTAwOwogCi0JcG93ZXJfaWQgPSAodW5zaWduZWQgbG9uZylhdG9taWNfaW5jX3JldHVybigmcG93ZXJfaWRfc2VxKTsKLQogCXNjLT5iYXR0ZXJ5LnByb3BlcnRpZXMgPSBzb255X2JhdHRlcnlfcHJvcHM7CiAJc2MtPmJhdHRlcnkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKHNvbnlfYmF0dGVyeV9wcm9wcyk7CiAJc2MtPmJhdHRlcnkuZ2V0X3Byb3BlcnR5ID0gc29ueV9iYXR0ZXJ5X2dldF9wcm9wZXJ0eTsKIAlzYy0+YmF0dGVyeS50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKIAlzYy0+YmF0dGVyeS51c2VfZm9yX2FwbSA9IDA7Ci0Jc2MtPmJhdHRlcnkubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAic29ueV9jb250cm9sbGVyX2JhdHRlcnlfJWx1IiwKLQkJCQkgICAgIHBvd2VyX2lkKTsKKwlzYy0+YmF0dGVyeS5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJzb255X2NvbnRyb2xsZXJfYmF0dGVyeV8lcE1SIiwKKwkJCQkgICAgIHNjLT5tYWNfYWRkcmVzcyk7CiAJaWYgKCFzYy0+YmF0dGVyeS5uYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTU3OCw2ICsxNzU4LDUyIEBACiAJcmV0dXJuIHNvbnlfY2hlY2tfYWRkX2Rldl9saXN0KHNjKTsKIH0KIAorc3RhdGljIGludCBzb255X3NldF9kZXZpY2VfaWQoc3RydWN0IHNvbnlfc2MgKnNjKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgRHVhbFNob2NrIDQgb3IgU2l4YXhpcyBjb250cm9sbGVycyBnZXQgYW4gaWQuCisJICogQWxsIG90aGVycyBhcmUgc2V0IHRvIC0xLgorCSAqLworCWlmICgoc2MtPnF1aXJrcyAmIFNJWEFYSVNfQ09OVFJPTExFUikgfHwKKwkgICAgKHNjLT5xdWlya3MgJiBEVUFMU0hPQ0s0X0NPTlRST0xMRVIpKSB7CisJCXJldCA9IGlkYV9zaW1wbGVfZ2V0KCZzb255X2RldmljZV9pZF9hbGxvY2F0b3IsIDAsIDAsCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocmV0IDwgMCkgeworCQkJc2MtPmRldmljZV9pZCA9IC0xOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlzYy0+ZGV2aWNlX2lkID0gcmV0OworCX0gZWxzZSB7CisJCXNjLT5kZXZpY2VfaWQgPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29ueV9yZWxlYXNlX2RldmljZV9pZChzdHJ1Y3Qgc29ueV9zYyAqc2MpCit7CisJaWYgKHNjLT5kZXZpY2VfaWQgPj0gMCkgeworCQlpZGFfc2ltcGxlX3JlbW92ZSgmc29ueV9kZXZpY2VfaWRfYWxsb2NhdG9yLCBzYy0+ZGV2aWNlX2lkKTsKKwkJc2MtPmRldmljZV9pZCA9IC0xOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvbnlfaW5pdF93b3JrKHN0cnVjdCBzb255X3NjICpzYywKKwkJCQkJdm9pZCAoKndvcmtlcikoc3RydWN0IHdvcmtfc3RydWN0ICopKQoreworCWlmICghc2MtPndvcmtlcl9pbml0aWFsaXplZCkKKwkJSU5JVF9XT1JLKCZzYy0+c3RhdGVfd29ya2VyLCB3b3JrZXIpOworCisJc2MtPndvcmtlcl9pbml0aWFsaXplZCA9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb255X2NhbmNlbF93b3JrX3N5bmMoc3RydWN0IHNvbnlfc2MgKnNjKQoreworCWlmIChzYy0+d29ya2VyX2luaXRpYWxpemVkKQorCQljYW5jZWxfd29ya19zeW5jKCZzYy0+c3RhdGVfd29ya2VyKTsKK30KIAogc3RhdGljIGludCBzb255X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCiB7CkBAIC0xNjE1LDYgKzE4NDEsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlyZXQgPSBzb255X3NldF9kZXZpY2VfaWQoc2MpOworCWlmIChyZXQgPCAwKSB7CisJCWhpZF9lcnIoaGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgZGV2aWNlIGlkXG4iKTsKKwkJZ290byBlcnJfc3RvcDsKKwl9CisKIAlpZiAoc2MtPnF1aXJrcyAmIFNJWEFYSVNfQ09OVFJPTExFUl9VU0IpIHsKIAkJLyoKIAkJICogVGhlIFNvbnkgU2l4YXhpcyBkb2VzIG5vdCBoYW5kbGUgSElEIE91dHB1dCBSZXBvcnRzIG9uIHRoZQpAQCAtMTYyOSw4ICsxODYxLDcgQEAKIAkJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT19PVVRQVVRfUkVQT1JUU19PTl9JTlRSX0VQOwogCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVF9JRDsKIAkJcmV0ID0gc2l4YXhpc19zZXRfb3BlcmF0aW9uYWxfdXNiKGhkZXYpOwotCQlzYy0+d29ya2VyX2luaXRpYWxpemVkID0gMTsKLQkJSU5JVF9XT1JLKCZzYy0+c3RhdGVfd29ya2VyLCBzaXhheGlzX3N0YXRlX3dvcmtlcik7CisJCXNvbnlfaW5pdF93b3JrKHNjLCBzaXhheGlzX3N0YXRlX3dvcmtlcik7CiAJfSBlbHNlIGlmIChzYy0+cXVpcmtzICYgU0lYQVhJU19DT05UUk9MTEVSX0JUKSB7CiAJCS8qCiAJCSAqIFRoZSBTaXhheGlzIHdhbnRzIG91dHB1dCByZXBvcnRzIHNlbnQgb24gdGhlIGN0cmwgZW5kcG9pbnQKQEAgLTE2MzgsOCArMTg2OSw3IEBACiAJCSAqLwogCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX05PX09VVFBVVF9SRVBPUlRTX09OX0lOVFJfRVA7CiAJCXJldCA9IHNpeGF4aXNfc2V0X29wZXJhdGlvbmFsX2J0KGhkZXYpOwotCQlzYy0+d29ya2VyX2luaXRpYWxpemVkID0gMTsKLQkJSU5JVF9XT1JLKCZzYy0+c3RhdGVfd29ya2VyLCBzaXhheGlzX3N0YXRlX3dvcmtlcik7CisJCXNvbnlfaW5pdF93b3JrKHNjLCBzaXhheGlzX3N0YXRlX3dvcmtlcik7CiAJfSBlbHNlIGlmIChzYy0+cXVpcmtzICYgRFVBTFNIT0NLNF9DT05UUk9MTEVSKSB7CiAJCWlmIChzYy0+cXVpcmtzICYgRFVBTFNIT0NLNF9DT05UUk9MTEVSX0JUKSB7CiAJCQkvKgpAQCAtMTY2MSw4ICsxODkxLDcgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9zdG9wOwogCi0JCXNjLT53b3JrZXJfaW5pdGlhbGl6ZWQgPSAxOwotCQlJTklUX1dPUksoJnNjLT5zdGF0ZV93b3JrZXIsIGR1YWxzaG9jazRfc3RhdGVfd29ya2VyKTsKKwkJc29ueV9pbml0X3dvcmsoc2MsIGR1YWxzaG9jazRfc3RhdGVfd29ya2VyKTsKIAl9IGVsc2UgewogCQlyZXQgPSAwOwogCX0KQEAgLTE2NzUsNyArMTkwNCw3IEBACiAJCWdvdG8gZXJyX3N0b3A7CiAKIAlpZiAoc2MtPnF1aXJrcyAmIFNPTllfTEVEX1NVUFBPUlQpIHsKLQkJcmV0ID0gc29ueV9sZWRzX2luaXQoaGRldik7CisJCXJldCA9IHNvbnlfbGVkc19pbml0KHNjKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9zdG9wOwogCX0KQEAgLTE2OTQsNyArMTkyMyw3IEBACiAJfQogCiAJaWYgKHNjLT5xdWlya3MgJiBTT05ZX0ZGX1NVUFBPUlQpIHsKLQkJcmV0ID0gc29ueV9pbml0X2ZmKGhkZXYpOworCQlyZXQgPSBzb255X2luaXRfZmYoc2MpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX2Nsb3NlOwogCX0KQEAgLTE3MDQsMTIgKzE5MzMsMTIgQEAKIAloaWRfaHdfY2xvc2UoaGRldik7CiBlcnJfc3RvcDoKIAlpZiAoc2MtPnF1aXJrcyAmIFNPTllfTEVEX1NVUFBPUlQpCi0JCXNvbnlfbGVkc19yZW1vdmUoaGRldik7CisJCXNvbnlfbGVkc19yZW1vdmUoc2MpOwogCWlmIChzYy0+cXVpcmtzICYgU09OWV9CQVRURVJZX1NVUFBPUlQpCiAJCXNvbnlfYmF0dGVyeV9yZW1vdmUoc2MpOwotCWlmIChzYy0+d29ya2VyX2luaXRpYWxpemVkKQotCQljYW5jZWxfd29ya19zeW5jKCZzYy0+c3RhdGVfd29ya2VyKTsKKwlzb255X2NhbmNlbF93b3JrX3N5bmMoc2MpOwogCXNvbnlfcmVtb3ZlX2Rldl9saXN0KHNjKTsKKwlzb255X3JlbGVhc2VfZGV2aWNlX2lkKHNjKTsKIAloaWRfaHdfc3RvcChoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTcxOSwxOCArMTk0OCwxOSBAQAogCXN0cnVjdCBzb255X3NjICpzYyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAogCWlmIChzYy0+cXVpcmtzICYgU09OWV9MRURfU1VQUE9SVCkKLQkJc29ueV9sZWRzX3JlbW92ZShoZGV2KTsKKwkJc29ueV9sZWRzX3JlbW92ZShzYyk7CiAKIAlpZiAoc2MtPnF1aXJrcyAmIFNPTllfQkFUVEVSWV9TVVBQT1JUKSB7CiAJCWhpZF9od19jbG9zZShoZGV2KTsKIAkJc29ueV9iYXR0ZXJ5X3JlbW92ZShzYyk7CiAJfQogCi0JaWYgKHNjLT53b3JrZXJfaW5pdGlhbGl6ZWQpCi0JCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5zdGF0ZV93b3JrZXIpOworCXNvbnlfY2FuY2VsX3dvcmtfc3luYyhzYyk7CiAKIAlzb255X3JlbW92ZV9kZXZfbGlzdChzYyk7CiAKKwlzb255X3JlbGVhc2VfZGV2aWNlX2lkKHNjKTsKKwogCWhpZF9od19zdG9wKGhkZXYpOwogfQogCkBAIC0xNzc1LDYgKzIwMDUsMjIgQEAKIAkucmVwb3J0X2ZpeHVwICA9IHNvbnlfcmVwb3J0X2ZpeHVwLAogCS5yYXdfZXZlbnQgICAgID0gc29ueV9yYXdfZXZlbnQKIH07Ci1tb2R1bGVfaGlkX2RyaXZlcihzb255X2RyaXZlcik7CisKK3N0YXRpYyBpbnQgX19pbml0IHNvbnlfaW5pdCh2b2lkKQoreworCWRiZ19oaWQoIlNvbnk6JXNcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZzb255X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb255X2V4aXQodm9pZCkKK3sKKwlkYmdfaGlkKCJTb255OiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZGFfZGVzdHJveSgmc29ueV9kZXZpY2VfaWRfYWxsb2NhdG9yKTsKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNvbnlfaW5pdCk7Cittb2R1bGVfZXhpdChzb255X2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdGhpbmdtLmMgYi9kcml2ZXJzL2hpZC9oaWQtdGhpbmdtLmMKaW5kZXggYTk3Yzc4OC4uMTM0YmU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRoaW5nbS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10aGluZ20uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGluZ00gYmxpbmsoMSkgVVNCIFJHQiBMRUQgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMTMgU2F2b2lyLWZhaXJlIExpbnV4IEluYy4KKyAqIENvcHlyaWdodCAyMDEzLTIwMTQgU2F2b2lyLWZhaXJlIExpbnV4IEluYy4KICAqCVZpdmllbiBEaWRlbG90IDx2aXZpZW4uZGlkZWxvdEBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMCwyNDQgKzEwLDI4NSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWRyYXcuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgImhpZC1pZHMuaCIKIAotI2RlZmluZSBCTElOSzFfQ01EX1NJWkUJCTkKKyNkZWZpbmUgUkVQT1JUX0lECTEKKyNkZWZpbmUgUkVQT1JUX1NJWkUJOQogCi0jZGVmaW5lIGJsaW5rMV9yZ2JfdG9fcihyZ2IpCSgocmdiICYgMHhGRjAwMDApID4+IDE2KQotI2RlZmluZSBibGluazFfcmdiX3RvX2cocmdiKQkoKHJnYiAmIDB4MDBGRjAwKSA+PiA4KQotI2RlZmluZSBibGluazFfcmdiX3RvX2IocmdiKQkoKHJnYiAmIDB4MDAwMEZGKSA+PiAwKQorLyogRmlybXdhcmUgbWFqb3IgbnVtYmVyIG9mIHN1cHBvcnRlZCBkZXZpY2VzICovCisjZGVmaW5lIFRISU5HTV9NQUpPUl9NSzEJJzEnCisjZGVmaW5lIFRISU5HTV9NQUpPUl9NSzIJJzInCiAKLS8qKgotICogc3RydWN0IGJsaW5rMV9kYXRhIC0gYmxpbmsoMSkgZGV2aWNlIHNwZWNpZmljIGRhdGEKLSAqIEBoZGV2OgkJSElEIGRldmljZS4KLSAqIEBsZWRfY2RldjoJCUxFRCBjbGFzcyBpbnN0YW5jZS4KLSAqIEByZ2I6CQk4LWJpdCBwZXIgY2hhbm5lbCBSR0Igbm90YXRpb24uCi0gKiBAZmFkZToJCWZhZGUgdGltZSBpbiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLgotICogQGJyaWdodG5lc3M6CQlicmlnaHRuZXNzIGNvZWZmaWNpZW50LgotICogQHBsYXk6CQlwbGF5L3BhdXNlIGluLW1lbW9yeSBwYXR0ZXJucy4KLSAqLwotc3RydWN0IGJsaW5rMV9kYXRhIHsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGRldjsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OwotCXUzMiByZ2I7Ci0JdTE2IGZhZGU7Ci0JdTggYnJpZ2h0bmVzczsKLQlib29sIHBsYXk7CitzdHJ1Y3QgdGhpbmdtX2Z3aW5mbyB7CisJY2hhciBtYWpvcjsKKwl1bnNpZ25lZCBudW1yZ2I7CisJdW5zaWduZWQgZmlyc3Q7CiB9OwogCi1zdGF0aWMgaW50IGJsaW5rMV9zZW5kX2NvbW1hbmQoc3RydWN0IGJsaW5rMV9kYXRhICpkYXRhLAotCQl1OCBidWZbQkxJTksxX0NNRF9TSVpFXSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGhpbmdtX2Z3aW5mbyB0aGluZ21fZndpbmZvW10gPSB7CisJeworCQkubWFqb3IgPSBUSElOR01fTUFKT1JfTUsxLAorCQkubnVtcmdiID0gMSwKKwkJLmZpcnN0ID0gMCwKKwl9LCB7CisJCS5tYWpvciA9IFRISU5HTV9NQUpPUl9NSzIsCisJCS5udW1yZ2IgPSAyLAorCQkuZmlyc3QgPSAxLAorCX0KK307CisKKy8qIEEgcmVkLCBncmVlbiBvciBibHVlIGNoYW5uZWwsIHBhcnQgb2YgYW4gUkdCIGNoaXAgKi8KK3N0cnVjdCB0aGluZ21fbGVkIHsKKwlzdHJ1Y3QgdGhpbmdtX3JnYiAqcmdiOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGRldjsKKwljaGFyIG5hbWVbMzJdOworfTsKKworLyogQmFzaWNhbGx5IGEgV1MyODEyIDUwNTAgUkdCIExFRCBjaGlwICovCitzdHJ1Y3QgdGhpbmdtX3JnYiB7CisJc3RydWN0IHRoaW5nbV9kZXZpY2UgKnRkZXY7CisJc3RydWN0IHRoaW5nbV9sZWQgcmVkOworCXN0cnVjdCB0aGluZ21fbGVkIGdyZWVuOworCXN0cnVjdCB0aGluZ21fbGVkIGJsdWU7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdTggbnVtOworfTsKKworc3RydWN0IHRoaW5nbV9kZXZpY2UgeworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2OworCXN0cnVjdCB7CisJCWNoYXIgbWFqb3I7CisJCWNoYXIgbWlub3I7CisJfSB2ZXJzaW9uOworCWNvbnN0IHN0cnVjdCB0aGluZ21fZndpbmZvICpmd2luZm87CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IHRoaW5nbV9yZ2IgKnJnYjsKK307CisKK3N0YXRpYyBpbnQgdGhpbmdtX3NlbmQoc3RydWN0IHRoaW5nbV9kZXZpY2UgKnRkZXYsIHU4IGJ1ZltSRVBPUlRfU0laRV0pCiB7CiAJaW50IHJldDsKIAotCWhpZF9kYmcoZGF0YS0+aGRldiwgImNvbW1hbmQ6ICVkJWMlLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4XG4iLAorCWhpZF9kYmcodGRldi0+aGRldiwgIi0+ICVkICVjICUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeFxuIiwKIAkJCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLAogCQkJYnVmWzVdLCBidWZbNl0sIGJ1Zls3XSwgYnVmWzhdKTsKIAotCXJldCA9IGhpZF9od19yYXdfcmVxdWVzdChkYXRhLT5oZGV2LCBidWZbMF0sIGJ1ZiwgQkxJTksxX0NNRF9TSVpFLAotCQkJCSBISURfRkVBVFVSRV9SRVBPUlQsIEhJRF9SRVFfU0VUX1JFUE9SVCk7CisJcmV0ID0gaGlkX2h3X3Jhd19yZXF1ZXN0KHRkZXYtPmhkZXYsIGJ1ZlswXSwgYnVmLCBSRVBPUlRfU0laRSwKKwkJCUhJRF9GRUFUVVJFX1JFUE9SVCwgSElEX1JFUV9TRVRfUkVQT1JUKTsKIAogCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAotc3RhdGljIGludCBibGluazFfdXBkYXRlX2NvbG9yKHN0cnVjdCBibGluazFfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgdGhpbmdtX3JlY3Yoc3RydWN0IHRoaW5nbV9kZXZpY2UgKnRkZXYsIHU4IGJ1ZltSRVBPUlRfU0laRV0pCiB7Ci0JdTggYnVmW0JMSU5LMV9DTURfU0laRV0gPSB7IDEsICduJywgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCWludCByZXQ7CiAKLQlpZiAoZGF0YS0+YnJpZ2h0bmVzcykgewotCQl1bnNpZ25lZCBpbnQgY29lZiA9IERJVl9ST1VORF9DTE9TRVNUKDI1NSwgZGF0YS0+YnJpZ2h0bmVzcyk7CisJcmV0ID0gaGlkX2h3X3Jhd19yZXF1ZXN0KHRkZXYtPmhkZXYsIGJ1ZlswXSwgYnVmLCBSRVBPUlRfU0laRSwKKwkJCUhJRF9GRUFUVVJFX1JFUE9SVCwgSElEX1JFUV9HRVRfUkVQT1JUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCQlidWZbMl0gPSBESVZfUk9VTkRfQ0xPU0VTVChibGluazFfcmdiX3RvX3IoZGF0YS0+cmdiKSwgY29lZik7Ci0JCWJ1ZlszXSA9IERJVl9ST1VORF9DTE9TRVNUKGJsaW5rMV9yZ2JfdG9fZyhkYXRhLT5yZ2IpLCBjb2VmKTsKLQkJYnVmWzRdID0gRElWX1JPVU5EX0NMT1NFU1QoYmxpbmsxX3JnYl90b19iKGRhdGEtPnJnYiksIGNvZWYpOwotCX0KKwloaWRfZGJnKHRkZXYtPmhkZXYsICI8LSAlZCAlYyAlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHggJTAyaGh4ICUwMmhoeCAlMDJoaHhcbiIsCisJCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwKKwkJCWJ1Zls1XSwgYnVmWzZdLCBidWZbN10sIGJ1Zls4XSk7CiAKLQlpZiAoZGF0YS0+ZmFkZSkgewotCQlidWZbMV0gPSAnYyc7Ci0JCWJ1Zls1XSA9IChkYXRhLT5mYWRlICYgMHhGRjAwKSA+PiA4OwotCQlidWZbNl0gPSAoZGF0YS0+ZmFkZSAmIDB4MDBGRik7Ci0JfQotCi0JcmV0dXJuIGJsaW5rMV9zZW5kX2NvbW1hbmQoZGF0YSwgYnVmKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmxpbmsxX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCitzdGF0aWMgaW50IHRoaW5nbV92ZXJzaW9uKHN0cnVjdCB0aGluZ21fZGV2aWNlICp0ZGV2KQoreworCXU4IGJ1ZltSRVBPUlRfU0laRV0gPSB7IFJFUE9SVF9JRCwgJ3YnLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisJaW50IGVycjsKKworCWVyciA9IHRoaW5nbV9zZW5kKHRkZXYsIGJ1Zik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHRoaW5nbV9yZWN2KHRkZXYsIGJ1Zik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXRkZXYtPnZlcnNpb24ubWFqb3IgPSBidWZbM107CisJdGRldi0+dmVyc2lvbi5taW5vciA9IGJ1Zls0XTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRoaW5nbV93cml0ZV9jb2xvcihzdHJ1Y3QgdGhpbmdtX3JnYiAqcmdiKQoreworCXU4IGJ1ZltSRVBPUlRfU0laRV0gPSB7IFJFUE9SVF9JRCwgJ2MnLCAwLCAwLCAwLCAwLCAwLCByZ2ItPm51bSwgMCB9OworCisJYnVmWzJdID0gcmdiLT5yZWQubGRldi5icmlnaHRuZXNzOworCWJ1ZlszXSA9IHJnYi0+Z3JlZW4ubGRldi5icmlnaHRuZXNzOworCWJ1Zls0XSA9IHJnYi0+Ymx1ZS5sZGV2LmJyaWdodG5lc3M7CisKKwlyZXR1cm4gdGhpbmdtX3NlbmQocmdiLT50ZGV2LCBidWYpOworfQorCitzdGF0aWMgdm9pZCB0aGluZ21fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHRoaW5nbV9yZ2IgKnJnYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGhpbmdtX3JnYiwgd29yayk7CisKKwltdXRleF9sb2NrKCZyZ2ItPnRkZXYtPmxvY2spOworCisJaWYgKHRoaW5nbV93cml0ZV9jb2xvcihyZ2IpKQorCQloaWRfZXJyKHJnYi0+dGRldi0+aGRldiwgImZhaWxlZCB0byB3cml0ZSBjb2xvclxuIik7CisKKwltdXRleF91bmxvY2soJnJnYi0+dGRldi0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRoaW5nbV9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxkZXYsCiAJCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKIHsKLQlzdHJ1Y3QgYmxpbmsxX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEobGVkX2NkZXYtPmRldi0+cGFyZW50KTsKKwlzdHJ1Y3QgdGhpbmdtX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGxkZXYsIHN0cnVjdCB0aGluZ21fbGVkLCBsZGV2KTsKIAotCWRhdGEtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwotCWlmIChibGluazFfdXBkYXRlX2NvbG9yKGRhdGEpKQotCQloaWRfZXJyKGRhdGEtPmhkZXYsICJmYWlsZWQgdG8gdXBkYXRlIGNvbG9yXG4iKTsKKwkvKiB0aGUgbGVkY2xhc3MgaGFzIGFscmVhZHkgc3RvcmVkIHRoZSBicmlnaHRuZXNzIHZhbHVlICovCisJc2NoZWR1bGVfd29yaygmbGVkLT5yZ2ItPndvcmspOwogfQogCi1zdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBibGluazFfbGVkX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3N0YXRpYyBpbnQgdGhpbmdtX2luaXRfcmdiKHN0cnVjdCB0aGluZ21fcmdiICpyZ2IpCiB7Ci0Jc3RydWN0IGJsaW5rMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGxlZF9jZGV2LT5kZXYtPnBhcmVudCk7CisJY29uc3QgaW50IG1pbm9yID0gKChzdHJ1Y3QgaGlkcmF3ICopIHJnYi0+dGRldi0+aGRldi0+aGlkcmF3KS0+bWlub3I7CisJaW50IGVycjsKIAotCXJldHVybiBkYXRhLT5icmlnaHRuZXNzOwotfQorCS8qIFJlZ2lzdGVyIHRoZSByZWQgZGlvZGUgKi8KKwlzbnByaW50ZihyZ2ItPnJlZC5uYW1lLCBzaXplb2YocmdiLT5yZWQubmFtZSksCisJCQkidGhpbmdtJWQ6cmVkOmxlZCVkIiwgbWlub3IsIHJnYi0+bnVtKTsKKwlyZ2ItPnJlZC5sZGV2Lm5hbWUgPSByZ2ItPnJlZC5uYW1lOworCXJnYi0+cmVkLmxkZXYubWF4X2JyaWdodG5lc3MgPSAyNTU7CisJcmdiLT5yZWQubGRldi5icmlnaHRuZXNzX3NldCA9IHRoaW5nbV9sZWRfc2V0OworCXJnYi0+cmVkLnJnYiA9IHJnYjsKIAotc3RhdGljIHNzaXplX3QgYmxpbmsxX3Nob3dfcmdiKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYmxpbmsxX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcmdiLT50ZGV2LT5oZGV2LT5kZXYsICZyZ2ItPnJlZC5sZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJS42WFxuIiwgZGF0YS0+cmdiKTsKLX0KKwkvKiBSZWdpc3RlciB0aGUgZ3JlZW4gZGlvZGUgKi8KKwlzbnByaW50ZihyZ2ItPmdyZWVuLm5hbWUsIHNpemVvZihyZ2ItPmdyZWVuLm5hbWUpLAorCQkJInRoaW5nbSVkOmdyZWVuOmxlZCVkIiwgbWlub3IsIHJnYi0+bnVtKTsKKwlyZ2ItPmdyZWVuLmxkZXYubmFtZSA9IHJnYi0+Z3JlZW4ubmFtZTsKKwlyZ2ItPmdyZWVuLmxkZXYubWF4X2JyaWdodG5lc3MgPSAyNTU7CisJcmdiLT5ncmVlbi5sZGV2LmJyaWdodG5lc3Nfc2V0ID0gdGhpbmdtX2xlZF9zZXQ7CisJcmdiLT5ncmVlbi5yZ2IgPSByZ2I7CiAKLXN0YXRpYyBzc2l6ZV90IGJsaW5rMV9zdG9yZV9yZ2Ioc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGJsaW5rMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKLQlsb25nIHVuc2lnbmVkIGludCByZ2I7Ci0JaW50IHJldDsKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnJnYi0+dGRldi0+aGRldi0+ZGV2LCAmcmdiLT5ncmVlbi5sZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVucmVnaXN0ZXJfcmVkOwogCi0JcmV0ID0ga3N0cnRvdWwoYnVmLCAxNiwgJnJnYik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkvKiBSZWdpc3RlciB0aGUgYmx1ZSBkaW9kZSAqLworCXNucHJpbnRmKHJnYi0+Ymx1ZS5uYW1lLCBzaXplb2YocmdiLT5ibHVlLm5hbWUpLAorCQkJInRoaW5nbSVkOmJsdWU6bGVkJWQiLCBtaW5vciwgcmdiLT5udW0pOworCXJnYi0+Ymx1ZS5sZGV2Lm5hbWUgPSByZ2ItPmJsdWUubmFtZTsKKwlyZ2ItPmJsdWUubGRldi5tYXhfYnJpZ2h0bmVzcyA9IDI1NTsKKwlyZ2ItPmJsdWUubGRldi5icmlnaHRuZXNzX3NldCA9IHRoaW5nbV9sZWRfc2V0OworCXJnYi0+Ymx1ZS5yZ2IgPSByZ2I7CiAKLQkvKiBSR0IgdHJpcGxldCBub3RhdGlvbiBpcyAyNC1iaXQgaGV4YWRlY2ltYWwgKi8KLQlpZiAocmdiID4gMHhGRkZGRkYpCi0JCXJldHVybiAtRUlOVkFMOworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcmdiLT50ZGV2LT5oZGV2LT5kZXYsICZyZ2ItPmJsdWUubGRldik7CisJaWYgKGVycikKKwkJZ290byB1bnJlZ2lzdGVyX2dyZWVuOwogCi0JZGF0YS0+cmdiID0gcmdiOwotCXJldCA9IGJsaW5rMV91cGRhdGVfY29sb3IoZGF0YSk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZ2IsIFNfSVJVR08gfCBTX0lXVVNSLCBibGluazFfc2hvd19yZ2IsIGJsaW5rMV9zdG9yZV9yZ2IpOwotCi1zdGF0aWMgc3NpemVfdCBibGluazFfc2hvd19mYWRlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYmxpbmsxX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmZhZGUgKiAxMCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsaW5rMV9zdG9yZV9mYWRlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBibGluazFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7Ci0JbG9uZyB1bnNpZ25lZCBpbnQgZmFkZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJmZhZGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBibGluaygxKSBhY2NlcHRzIDE2LWJpdCBmYWRlIHRpbWUsIG51bWJlciBvZiAxMG1zIHRpY2tzICovCi0JZmFkZSA9IERJVl9ST1VORF9DTE9TRVNUKGZhZGUsIDEwKTsKLQlpZiAoZmFkZSA+IDY1NTM1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRhdGEtPmZhZGUgPSBmYWRlOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFkZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCWJsaW5rMV9zaG93X2ZhZGUsIGJsaW5rMV9zdG9yZV9mYWRlKTsKLQotc3RhdGljIHNzaXplX3QgYmxpbmsxX3Nob3dfcGxheShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGJsaW5rMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5wbGF5KTsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxpbmsxX3N0b3JlX3BsYXkoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGJsaW5rMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKLQl1OCBjbWRbQkxJTksxX0NNRF9TSVpFXSA9IHsgMSwgJ3AnLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Ci0JbG9uZyB1bnNpZ25lZCBpbnQgcGxheTsKLQlpbnQgcmV0OwotCi0JcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJnBsYXkpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlkYXRhLT5wbGF5ID0gISFwbGF5OwotCWNtZFsyXSA9IGRhdGEtPnBsYXk7Ci0JcmV0ID0gYmxpbmsxX3NlbmRfY29tbWFuZChkYXRhLCBjbWQpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocGxheSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCWJsaW5rMV9zaG93X3BsYXksIGJsaW5rMV9zdG9yZV9wbGF5KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYmxpbmsxX3N5c2ZzX2dyb3VwID0gewotCS5hdHRycyA9IChzdHJ1Y3QgYXR0cmlidXRlICpbXSkgewotCQkmZGV2X2F0dHJfcmdiLmF0dHIsCi0JCSZkZXZfYXR0cl9mYWRlLmF0dHIsCi0JCSZkZXZfYXR0cl9wbGF5LmF0dHIsCi0JCU5VTEwKLQl9LAotfTsKLQotc3RhdGljIGludCB0aGluZ21fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgYmxpbmsxX2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkOwotCWNoYXIgbGVkX25hbWVbMTNdOwotCWludCByZXQ7Ci0KLQlkYXRhID0gZGV2bV9remFsbG9jKCZoZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgYmxpbmsxX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaGlkX3NldF9kcnZkYXRhKGhkZXYsIGRhdGEpOwotCWRhdGEtPmhkZXYgPSBoZGV2OwotCWRhdGEtPnJnYiA9IDB4RkZGRkZGOyAvKiBzZXQgYSBkZWZhdWx0IHdoaXRlIGNvbG9yICovCi0KLQlyZXQgPSBoaWRfcGFyc2UoaGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcjsKLQotCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ISURSQVcpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBibGluaygxKSBzZXJpYWwgbnVtYmVycyByYW5nZSBpcyAweDFBMDAxMDAwIHRvIDB4MUEwMDJGRkYgKi8KLQlsZWQgPSAmZGF0YS0+bGVkX2NkZXY7Ci0Jc25wcmludGYobGVkX25hbWUsIHNpemVvZihsZWRfbmFtZSksICJibGluazE6OiVzIiwgaGRldi0+dW5pcSArIDQpOwotCWxlZC0+bmFtZSA9IGxlZF9uYW1lOwotCWxlZC0+YnJpZ2h0bmVzc19zZXQgPSBibGluazFfbGVkX3NldDsKLQlsZWQtPmJyaWdodG5lc3NfZ2V0ID0gYmxpbmsxX2xlZF9nZXQ7Ci0JcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZoZGV2LT5kZXYsIGxlZCk7Ci0JaWYgKHJldCkKLQkJZ290byBzdG9wOwotCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZsZWQtPmRldi0+a29iaiwgJmJsaW5rMV9zeXNmc19ncm91cCk7Ci0JaWYgKHJldCkKLQkJZ290byByZW1vdmVfbGVkOworCUlOSVRfV09SSygmcmdiLT53b3JrLCB0aGluZ21fd29yayk7CiAKIAlyZXR1cm4gMDsKIAotcmVtb3ZlX2xlZDoKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihsZWQpOwordW5yZWdpc3Rlcl9ncmVlbjoKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcmdiLT5ncmVlbi5sZGV2KTsKKwordW5yZWdpc3Rlcl9yZWQ6CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnJnYi0+cmVkLmxkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdGhpbmdtX3JlbW92ZV9yZ2Ioc3RydWN0IHRoaW5nbV9yZ2IgKnJnYikKK3sKKwlmbHVzaF93b3JrKCZyZ2ItPndvcmspOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZyZ2ItPnJlZC5sZGV2KTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcmdiLT5ncmVlbi5sZGV2KTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcmdiLT5ibHVlLmxkZXYpOworfQorCitzdGF0aWMgaW50IHRoaW5nbV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0aGluZ21fZGV2aWNlICp0ZGV2OworCWludCBpLCBlcnI7CisKKwl0ZGV2ID0gZGV2bV9remFsbG9jKCZoZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgdGhpbmdtX2RldmljZSksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXRkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJdGRldi0+aGRldiA9IGhkZXY7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHRkZXYpOworCisJZXJyID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfSElEUkFXKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJbXV0ZXhfaW5pdCgmdGRldi0+bG9jayk7CisKKwllcnIgPSB0aGluZ21fdmVyc2lvbih0ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHN0b3A7CisKKwloaWRfZGJnKGhkZXYsICJmaXJtd2FyZSB2ZXJzaW9uOiAlYy4lY1xuIiwKKwkJCXRkZXYtPnZlcnNpb24ubWFqb3IsIHRkZXYtPnZlcnNpb24ubWlub3IpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGhpbmdtX2Z3aW5mbykgJiYgIXRkZXYtPmZ3aW5mbzsgKytpKQorCQlpZiAodGhpbmdtX2Z3aW5mb1tpXS5tYWpvciA9PSB0ZGV2LT52ZXJzaW9uLm1ham9yKQorCQkJdGRldi0+ZndpbmZvID0gJnRoaW5nbV9md2luZm9baV07CisKKwlpZiAoIXRkZXYtPmZ3aW5mbykgeworCQloaWRfZXJyKGhkZXYsICJ1bnN1cHBvcnRlZCBmaXJtd2FyZSAlY1xuIiwgdGRldi0+dmVyc2lvbi5tYWpvcik7CisJCWdvdG8gc3RvcDsKKwl9CisKKwl0ZGV2LT5yZ2IgPSBkZXZtX2t6YWxsb2MoJmhkZXYtPmRldiwKKwkJCXNpemVvZihzdHJ1Y3QgdGhpbmdtX3JnYikgKiB0ZGV2LT5md2luZm8tPm51bXJnYiwKKwkJCUdGUF9LRVJORUwpOworCWlmICghdGRldi0+cmdiKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gc3RvcDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdGRldi0+ZndpbmZvLT5udW1yZ2I7ICsraSkgeworCQlzdHJ1Y3QgdGhpbmdtX3JnYiAqcmdiID0gdGRldi0+cmdiICsgaTsKKworCQlyZ2ItPnRkZXYgPSB0ZGV2OworCQlyZ2ItPm51bSA9IHRkZXYtPmZ3aW5mby0+Zmlyc3QgKyBpOworCQllcnIgPSB0aGluZ21faW5pdF9yZ2IocmdiKTsKKwkJaWYgKGVycikgeworCQkJd2hpbGUgKC0taSA+PSAwKQorCQkJCXRoaW5nbV9yZW1vdmVfcmdiKHRkZXYtPnJnYiArIGkpOworCQkJZ290byBzdG9wOworCQl9CisJfQorCisJcmV0dXJuIDA7CiBzdG9wOgogCWhpZF9od19zdG9wKGhkZXYpOwogZXJyb3I6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCB0aGluZ21fcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQogewotCXN0cnVjdCBibGluazFfZGF0YSAqZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSAmZGF0YS0+bGVkX2NkZXY7CisJc3RydWN0IHRoaW5nbV9kZXZpY2UgKnRkZXYgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJaW50IGk7CiAKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmxlZC0+ZGV2LT5rb2JqLCAmYmxpbmsxX3N5c2ZzX2dyb3VwKTsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihsZWQpOworCWZvciAoaSA9IDA7IGkgPCB0ZGV2LT5md2luZm8tPm51bXJnYjsgKytpKQorCQl0aGluZ21fcmVtb3ZlX3JnYih0ZGV2LT5yZ2IgKyBpKTsKKwogCWhpZF9od19zdG9wKGhkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQuYyBiL2RyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC5jCmluZGV4IGI1MDg2MGQuLjIxYWFmYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC5jCisrKyBiL2RyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC5jCkBAIC04MDcsMzQgKzgwNywxOCBAQAogCXVuc2lnbmVkIGludCBkc2l6ZTsKIAlpbnQgcmV0OwogCi0JLyogRmV0Y2ggdGhlIGxlbmd0aCBvZiBISUQgZGVzY3JpcHRpb24sIHJldHJpZXZlIHRoZSA0IGZpcnN0IGJ5dGVzOgorCS8qIGkyYyBoaWQgZmV0Y2ggdXNpbmcgYSBmaXhlZCBkZXNjcmlwdG9yIHNpemUgKDMwIGJ5dGVzKSAqLworCWkyY19oaWRfZGJnKGloaWQsICJGZXRjaGluZyB0aGUgSElEIGRlc2NyaXB0b3JcbiIpOworCXJldCA9IGkyY19oaWRfY29tbWFuZChjbGllbnQsICZoaWRfZGVzY3JfY21kLCBpaGlkLT5oZGVzY19idWZmZXIsCisJCQkJc2l6ZW9mKHN0cnVjdCBpMmNfaGlkX2Rlc2MpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaGlkX2Rlc2NyX2NtZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgbGVuZ3RoIG9mIEhJRCBkZXNjcmlwdG9yLCB0aGUgNCBmaXJzdCBieXRlczoKIAkgKiBieXRlcyAwLTEgLT4gbGVuZ3RoCiAJICogYnl0ZXMgMi0zIC0+IGJjZFZlcnNpb24gKGhhcyB0byBiZSAxLjAwKSAqLwotCXJldCA9IGkyY19oaWRfY29tbWFuZChjbGllbnQsICZoaWRfZGVzY3JfY21kLCBpaGlkLT5oZGVzY19idWZmZXIsIDQpOwotCi0JaTJjX2hpZF9kYmcoaWhpZCwgIiVzLCBpaGlkLT5oZGVzY19idWZmZXI6ICU0cGhcbiIsIF9fZnVuY19fLAotCQkJaWhpZC0+aGRlc2NfYnVmZmVyKTsKLQotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIGZldGNoIHRoZSBzaXplIG9mIEhJRCBkZXNjcmlwdG9yIChyZXQ9JWQpXG4iLAotCQkJcmV0KTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZHNpemUgPSBsZTE2X3RvX2NwdShoZGVzYy0+d0hJRERlc2NMZW5ndGgpOwotCS8qCi0JICogdGhlIHNpemUgb2YgdGhlIEhJRCBkZXNjcmlwdG9yIHNob3VsZCBhdCBsZWFzdCBjb250YWluCi0JICogaXRzIHNpemUgYW5kIHRoZSBiY2RWZXJzaW9uICg0IGJ5dGVzKSwgYW5kIHNob3VsZCBub3QgYmUgZ3JlYXRlcgotCSAqIHRoYW4gc2l6ZW9mKHN0cnVjdCBpMmNfaGlkX2Rlc2MpIGFzIHdlIGRpcmVjdGx5IGZpbGwgdGhpcyBzdHJ1Y3QKLQkgKiB0aHJvdWdoIGkyY19oaWRfY29tbWFuZC4KLQkgKi8KLQlpZiAoZHNpemUgPCA0IHx8IGRzaXplID4gc2l6ZW9mKHN0cnVjdCBpMmNfaGlkX2Rlc2MpKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAid2VpcmQgc2l6ZSBvZiBISUQgZGVzY3JpcHRvciAoJXUpXG4iLAotCQkJZHNpemUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAkvKiBjaGVjayBiY2RWZXJzaW9uID09IDEuMCAqLwogCWlmIChsZTE2X3RvX2NwdShoZGVzYy0+YmNkVmVyc2lvbikgIT0gMHgwMTAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LApAQCAtODQzLDE3ICs4MjcsMTQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaTJjX2hpZF9kYmcoaWhpZCwgIkZldGNoaW5nIHRoZSBISUQgZGVzY3JpcHRvclxuIik7Ci0KLQlyZXQgPSBpMmNfaGlkX2NvbW1hbmQoY2xpZW50LCAmaGlkX2Rlc2NyX2NtZCwgaWhpZC0+aGRlc2NfYnVmZmVyLAotCQkJCWRzaXplKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaGlkX2Rlc2NyX2NtZCBGYWlsXG4iKTsKKwkvKiBEZXNjcmlwdG9yIGxlbmd0aCBzaG91bGQgYmUgMzAgYnl0ZXMgYXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uICovCisJZHNpemUgPSBsZTE2X3RvX2NwdShoZGVzYy0+d0hJRERlc2NMZW5ndGgpOworCWlmIChkc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGkyY19oaWRfZGVzYykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3ZWlyZCBzaXplIG9mIEhJRCBkZXNjcmlwdG9yICgldSlcbiIsCisJCQlkc2l6ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQogCWkyY19oaWRfZGJnKGloaWQsICJISUQgRGVzY3JpcHRvcjogJSpwaFxuIiwgZHNpemUsIGloaWQtPmhkZXNjX2J1ZmZlcik7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdWhpZC5jIGIvZHJpdmVycy9oaWQvdWhpZC5jCmluZGV4IDBkMDc4YzMuLjBjYjkyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VoaWQuYworKysgYi9kcml2ZXJzL2hpZC91aGlkLmMKQEAgLTQ0MSwxMiArNDQxLDExIEBACiAJaWYgKHVoaWQtPnJkX3NpemUgPD0gMCB8fCB1aGlkLT5yZF9zaXplID4gSElEX01BWF9ERVNDUklQVE9SX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdWhpZC0+cmRfZGF0YSA9IGttYWxsb2ModWhpZC0+cmRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJdWhpZC0+cmRfZGF0YSA9IGttZW1kdXAoZXYtPnUuY3JlYXRlMi5yZF9kYXRhLCB1aGlkLT5yZF9zaXplLAorCQkJCUdGUF9LRVJORUwpOwogCWlmICghdWhpZC0+cmRfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkodWhpZC0+cmRfZGF0YSwgZXYtPnUuY3JlYXRlMi5yZF9kYXRhLCB1aGlkLT5yZF9zaXplKTsKLQogCWhpZCA9IGhpZF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoSVNfRVJSKGhpZCkpIHsKIAkJcmV0ID0gUFRSX0VSUihoaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggOGU0ZGRiMy4uNTliYWRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC0xMTUsNiArMTE1LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfRUFTWVBFTl9NNjEwWCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX0RVT1NFTlNFLCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCisJeyBVU0JfVkVORE9SX0lEX1NFTUlDTywgVVNCX0RFVklDRV9JRF9TRU1JQ09fVVNCX0tFWUtPQVJELCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NZTkFQVElDUywgVVNCX0RFVklDRV9JRF9TWU5BUFRJQ1NfTFRTMSwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TWU5BUFRJQ1MsIFVTQl9ERVZJQ0VfSURfU1lOQVBUSUNTX0xUUzIsIEhJRF9RVUlSS19OT19JTklUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfU1lOQVBUSUNTLCBVU0JfREVWSUNFX0lEX1NZTkFQVElDU19IRCwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvS2NvbmZpZyBiL2RyaXZlcnMvaHNpL0tjb25maWcKaW5kZXggZDk0ZTM4ZC4uMmM3NmRlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL2hzaS9LY29uZmlnCkBAIC0xNCw2ICsxNCw3IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitzb3VyY2UgImRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvaHNpL2NsaWVudHMvS2NvbmZpZyIKIAogZW5kaWYgIyBIU0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHNpL01ha2VmaWxlIGIvZHJpdmVycy9oc2kvTWFrZWZpbGUKaW5kZXggOWQ1ZDMzZi4uMzYwMzcxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oc2kvTWFrZWZpbGUKQEAgLTMsNCArMyw1IEBACiAjCiBvYmotJChDT05GSUdfSFNJX0JPQVJESU5GTykJKz0gaHNpX2JvYXJkaW5mby5vCiBvYmotJChDT05GSUdfSFNJKQkJKz0gaHNpLm8KK29iai15CQkJCSs9IGNvbnRyb2xsZXJzLwogb2JqLXkJCQkJKz0gY2xpZW50cy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHNpL2NsaWVudHMvS2NvbmZpZyBiL2RyaXZlcnMvaHNpL2NsaWVudHMvS2NvbmZpZwppbmRleCAzYmFjZDI3Li43MWI5ZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hzaS9jbGllbnRzL0tjb25maWcKKysrIGIvZHJpdmVycy9oc2kvY2xpZW50cy9LY29uZmlnCkBAIC00LDYgKzQsMjMgQEAKIAogY29tbWVudCAiSFNJIGNsaWVudHMiCiAKK2NvbmZpZyBOT0tJQV9NT0RFTQorCXRyaXN0YXRlICJOb2tpYSBNb2RlbSIKKwlkZXBlbmRzIG9uIEhTSSAmJiBTU0lfUFJPVE9DT0wKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIG1vZGVtIG9uIE5va2lhCisJTjkwMCAoTm9raWEgUlgtNTEpIGhhcmR3YXJlLgorCisJSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFNTSV9QUk9UT0NPTAorCXRyaXN0YXRlICJTU0kgcHJvdG9jb2wiCisJZGVwZW5kcyBvbiBIU0kgJiYgUEhPTkVUICYmIChPTUFQX1NTST15IHx8IE9NQVBfU1NJPW0pCisJaGVscAorCUlmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBlbmFibGUgdGhlIFNTSSBwcm90b2NvbCBha2EgTWNTQUFCLgorCisJSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEhTSV9DSEFSCiAJdHJpc3RhdGUgIkhTSS9TU0kgY2hhcmFjdGVyIGRyaXZlciIKIAlkZXBlbmRzIG9uIEhTSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvY2xpZW50cy9NYWtlZmlsZSBiL2RyaXZlcnMvaHNpL2NsaWVudHMvTWFrZWZpbGUKaW5kZXggMzI3YzBlMi4uNGQ1YmMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oc2kvY2xpZW50cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2hzaS9jbGllbnRzL01ha2VmaWxlCkBAIC0yLDQgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgSFNJIGNsaWVudHMKICMKIAotb2JqLSQoQ09ORklHX0hTSV9DSEFSKQkrPSBoc2lfY2hhci5vCitvYmotJChDT05GSUdfTk9LSUFfTU9ERU0pCSs9IG5va2lhLW1vZGVtLm8KK29iai0kKENPTkZJR19TU0lfUFJPVE9DT0wpCSs9IHNzaV9wcm90b2NvbC5vCitvYmotJChDT05GSUdfSFNJX0NIQVIpCQkrPSBoc2lfY2hhci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hzaS9jbGllbnRzL2hzaV9jaGFyLmMgYi9kcml2ZXJzL2hzaS9jbGllbnRzL2hzaV9jaGFyLmMKaW5kZXggZTYxZTVmOS4uNTdmNzBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oc2kvY2xpZW50cy9oc2lfY2hhci5jCisrKyBiL2RyaXZlcnMvaHNpL2NsaWVudHMvaHNpX2NoYXIuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXRtcCA9IGNsLT5yeF9jZmc7CiAJY2wtPnJ4X2NmZy5tb2RlID0gcnhjLT5tb2RlOwotCWNsLT5yeF9jZmcuY2hhbm5lbHMgPSByeGMtPmNoYW5uZWxzOworCWNsLT5yeF9jZmcubnVtX2h3X2NoYW5uZWxzID0gcnhjLT5jaGFubmVsczsKIAljbC0+cnhfY2ZnLmZsb3cgPSByeGMtPmZsb3c7CiAJcmV0ID0gaHNpX3NldHVwKGNsKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMzgzLDcgKzM4Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaHNjX3J4X2dldChzdHJ1Y3QgaHNpX2NsaWVudCAqY2wsIHN0cnVjdCBoc2NfcnhfY29uZmlnICpyeGMpCiB7CiAJcnhjLT5tb2RlID0gY2wtPnJ4X2NmZy5tb2RlOwotCXJ4Yy0+Y2hhbm5lbHMgPSBjbC0+cnhfY2ZnLmNoYW5uZWxzOworCXJ4Yy0+Y2hhbm5lbHMgPSBjbC0+cnhfY2ZnLm51bV9od19jaGFubmVsczsKIAlyeGMtPmZsb3cgPSBjbC0+cnhfY2ZnLmZsb3c7CiB9CiAKQEAgLTQwMiw3ICs0MDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl0bXAgPSBjbC0+dHhfY2ZnOwogCWNsLT50eF9jZmcubW9kZSA9IHR4Yy0+bW9kZTsKLQljbC0+dHhfY2ZnLmNoYW5uZWxzID0gdHhjLT5jaGFubmVsczsKKwljbC0+dHhfY2ZnLm51bV9od19jaGFubmVscyA9IHR4Yy0+Y2hhbm5lbHM7CiAJY2wtPnR4X2NmZy5zcGVlZCA9IHR4Yy0+c3BlZWQ7CiAJY2wtPnR4X2NmZy5hcmJfbW9kZSA9IHR4Yy0+YXJiX21vZGU7CiAJcmV0ID0gaHNpX3NldHVwKGNsKTsKQEAgLTQxNyw3ICs0MTcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGhzY190eF9nZXQoc3RydWN0IGhzaV9jbGllbnQgKmNsLCBzdHJ1Y3QgaHNjX3R4X2NvbmZpZyAqdHhjKQogewogCXR4Yy0+bW9kZSA9IGNsLT50eF9jZmcubW9kZTsKLQl0eGMtPmNoYW5uZWxzID0gY2wtPnR4X2NmZy5jaGFubmVsczsKKwl0eGMtPmNoYW5uZWxzID0gY2wtPnR4X2NmZy5udW1faHdfY2hhbm5lbHM7CiAJdHhjLT5zcGVlZCA9IGNsLT50eF9jZmcuc3BlZWQ7CiAJdHhjLT5hcmJfbW9kZSA9IGNsLT50eF9jZmcuYXJiX21vZGU7CiB9CkBAIC00MzUsNyArNDM1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGxlbiA+IG1heF9kYXRhX3NpemUpCiAJCWxlbiA9IG1heF9kYXRhX3NpemU7Ci0JaWYgKGNoYW5uZWwtPmNoID49IGNoYW5uZWwtPmNsLT5yeF9jZmcuY2hhbm5lbHMpCisJaWYgKGNoYW5uZWwtPmNoID49IGNoYW5uZWwtPmNsLT5yeF9jZmcubnVtX2h3X2NoYW5uZWxzKQogCQlyZXR1cm4gLUVDSFJORzsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChIU0NfQ0hfUkVBRCwgJmNoYW5uZWwtPmZsYWdzKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobGVuID4gbWF4X2RhdGFfc2l6ZSkKIAkJbGVuID0gbWF4X2RhdGFfc2l6ZTsKLQlpZiAoY2hhbm5lbC0+Y2ggPj0gY2hhbm5lbC0+Y2wtPnR4X2NmZy5jaGFubmVscykKKwlpZiAoY2hhbm5lbC0+Y2ggPj0gY2hhbm5lbC0+Y2wtPnR4X2NmZy5udW1faHdfY2hhbm5lbHMpCiAJCXJldHVybiAtRUNIUk5HOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhTQ19DSF9XUklURSwgJmNoYW5uZWwtPmZsYWdzKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCWlmICghaHNjX21ham9yKSB7CiAJCXJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmhzY19kZXYsIGhzY19iYXNlbWlub3IsCiAJCQkJCQlIU0NfREVWUywgZGV2bmFtZSk7Ci0JCWlmIChyZXQgPiAwKQorCQlpZiAocmV0ID09IDApCiAJCQloc2NfbWFqb3IgPSBNQUpPUihoc2NfZGV2KTsKIAl9IGVsc2UgewogCQloc2NfZGV2ID0gTUtERVYoaHNjX21ham9yLCBoc2NfYmFzZW1pbm9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHNpL2NsaWVudHMvbm9raWEtbW9kZW0uYyBiL2RyaXZlcnMvaHNpL2NsaWVudHMvbm9raWEtbW9kZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjNiNzgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oc2kvY2xpZW50cy9ub2tpYS1tb2RlbS5jCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogbm9raWEtbW9kZW0uYworICoKKyAqIEhTSSBjbGllbnQgZHJpdmVyIGZvciBOb2tpYSBOOTAwIG1vZGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGtlcm5lbC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvaHNpL2hzaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9oc2kvc3NpX3Byb3RvY29sLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG07Cittb2R1bGVfcGFyYW0ocG0sIGludCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBtLAorCSJFbmFibGUgcG93ZXIgbWFuYWdlbWVudCAoMD1kaXNhYmxlZCwgMT11c2VybGFuZCBiYXNlZCBbZGVmYXVsdF0pIik7CisKK3N0cnVjdCBub2tpYV9tb2RlbV9ncGlvIHsKKwlzdHJ1Y3QgZ3Bpb19kZXNjCSpncGlvOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IG5va2lhX21vZGVtX2RldmljZSB7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CW5va2lhX21vZGVtX3JzdF9pbmRfdGFza2xldDsKKwlpbnQJCQlub2tpYV9tb2RlbV9yc3RfaW5kX2lycTsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2aWNlOworCXN0cnVjdCBub2tpYV9tb2RlbV9ncGlvCSpncGlvczsKKwlpbnQJCQlncGlvX2Ftb3VudDsKKwlzdHJ1Y3QgaHNpX2NsaWVudAkqc3NpX3Byb3RvY29sOworfTsKKworc3RhdGljIHZvaWQgZG9fbm9raWFfbW9kZW1fcnN0X2luZF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgbm9raWFfbW9kZW1fZGV2aWNlICptb2RlbSA9IChzdHJ1Y3Qgbm9raWFfbW9kZW1fZGV2aWNlICopZGF0YTsKKworCWlmICghbW9kZW0pCisJCXJldHVybjsKKworCWRldl9pbmZvKG1vZGVtLT5kZXZpY2UsICJDTVQgcnN0IGxpbmUgY2hhbmdlIGRldGVjdGVkXG4iKTsKKworCWlmIChtb2RlbS0+c3NpX3Byb3RvY29sKQorCQlzc2lwX3Jlc2V0X2V2ZW50KG1vZGVtLT5zc2lfcHJvdG9jb2wpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgbm9raWFfbW9kZW1fcnN0X2luZF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgbm9raWFfbW9kZW1fZGV2aWNlICptb2RlbSA9IChzdHJ1Y3Qgbm9raWFfbW9kZW1fZGV2aWNlICopZGF0YTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJm1vZGVtLT5ub2tpYV9tb2RlbV9yc3RfaW5kX3Rhc2tsZXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBub2tpYV9tb2RlbV9ncGlvX3VuZXhwb3J0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgbm9raWFfbW9kZW1fZGV2aWNlICptb2RlbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1vZGVtLT5ncGlvX2Ftb3VudDsgaSsrKSB7CisJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmtvYmosIG1vZGVtLT5ncGlvc1tpXS5uYW1lKTsKKwkJZ3Bpb2RfdW5leHBvcnQobW9kZW0tPmdwaW9zW2ldLmdwaW8pOworCX0KK30KKworc3RhdGljIGludCBub2tpYV9tb2RlbV9ncGlvX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBub2tpYV9tb2RlbV9kZXZpY2UgKm1vZGVtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGdwaW9fY291bnQsIGdwaW9fbmFtZV9jb3VudCwgaSwgZXJyOworCisJZ3Bpb19jb3VudCA9IG9mX2dwaW9fY291bnQobnApOworCisJaWYgKGdwaW9fY291bnQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBncGlvczogJWRcbiIsIGdwaW9fY291bnQpOworCQlyZXR1cm4gZ3Bpb19jb3VudDsKKwl9CisKKwlncGlvX25hbWVfY291bnQgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKG5wLCAiZ3Bpby1uYW1lcyIpOworCisJaWYgKGdwaW9fY291bnQgIT0gZ3Bpb19uYW1lX2NvdW50KSB7CisJCWRldl9lcnIoZGV2LCAibnVtYmVyIG9mIGdwaW9zIGRvZXMgbm90IGVxdWFsIG51bWJlciBvZiBncGlvIG5hbWVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbW9kZW0tPmdwaW9zID0gZGV2bV9remFsbG9jKGRldiwgZ3Bpb19jb3VudCAqCisJCQkJc2l6ZW9mKHN0cnVjdCBub2tpYV9tb2RlbV9ncGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb2RlbS0+Z3Bpb3MpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBncGlvc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1vZGVtLT5ncGlvX2Ftb3VudCA9IGdwaW9fY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19jb3VudDsgaSsrKSB7CisJCW1vZGVtLT5ncGlvc1tpXS5ncGlvID0gZGV2bV9ncGlvZF9nZXRfaW5kZXgoZGV2LCBOVUxMLCBpKTsKKwkJaWYgKElTX0VSUihtb2RlbS0+Z3Bpb3NbaV0uZ3BpbykpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGdldCBncGlvICVkXG4iLCBpKTsKKwkJCXJldHVybiBQVFJfRVJSKG1vZGVtLT5ncGlvc1tpXS5ncGlvKTsKKwkJfQorCisJCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAiZ3Bpby1uYW1lcyIsIGksCisJCQkJCQkmKG1vZGVtLT5ncGlvc1tpXS5uYW1lKSk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGdldCBncGlvIG5hbWUgJWRcbiIsIGkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWVyciA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobW9kZW0tPmdwaW9zW2ldLmdwaW8sIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBncGlvZF9leHBvcnQobW9kZW0tPmdwaW9zW2ldLmdwaW8sIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBncGlvZF9leHBvcnRfbGluayhkZXYsIG1vZGVtLT5ncGlvc1tpXS5uYW1lLAorCQkJCQkJCW1vZGVtLT5ncGlvc1tpXS5ncGlvKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm9raWFfbW9kZW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IG5va2lhX21vZGVtX2RldmljZSAqbW9kZW07CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gdG9faHNpX2NsaWVudChkZXYpOworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IGhzaV9nZXRfcG9ydChjbCk7CisJaW50IGlycSwgcGZsYWdzLCBlcnI7CisJc3RydWN0IGhzaV9ib2FyZF9pbmZvIHNzaXA7CisKKwlucCA9IGRldi0+b2Zfbm9kZTsKKwlpZiAoIW5wKSB7CisJCWRldl9lcnIoZGV2LCAiZGV2aWNlIHRyZWUgbm9kZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCW1vZGVtID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptb2RlbSksIEdGUF9LRVJORUwpOworCWlmICghbW9kZW0pIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBub2tpYV9tb2RlbV9kZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKGRldiwgbW9kZW0pOworCisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCByc3RfaW5kIGludGVycnVwdCAoJWQpXG4iLCBpcnEpOworCQlyZXR1cm4gaXJxOworCX0KKwltb2RlbS0+bm9raWFfbW9kZW1fcnN0X2luZF9pcnEgPSBpcnE7CisJcGZsYWdzID0gaXJxX2dldF90cmlnZ2VyX3R5cGUoaXJxKTsKKworCXRhc2tsZXRfaW5pdCgmbW9kZW0tPm5va2lhX21vZGVtX3JzdF9pbmRfdGFza2xldCwKKwkJCWRvX25va2lhX21vZGVtX3JzdF9pbmRfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpbW9kZW0pOworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG5va2lhX21vZGVtX3JzdF9pbmRfaXNyLAorCQkJCUlSUUZfRElTQUJMRUQgfCBwZmxhZ3MsICJtb2RlbV9yc3RfaW5kIiwgbW9kZW0pOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiUmVxdWVzdCByc3RfaW5kIGlycSglZCkgZmFpbGVkIChmbGFncyAlZClcbiIsCisJCQkJCQkJCWlycSwgcGZsYWdzKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZW5hYmxlX2lycV93YWtlKGlycSk7CisKKwlpZihwbSkgeworCQllcnIgPSBub2tpYV9tb2RlbV9ncGlvX3Byb2JlKGRldik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBwcm9iZSBHUElPc1xuIik7CisJCQlnb3RvIGVycm9yMTsKKwkJfQorCX0KKworCXNzaXAubmFtZSA9ICJzc2ktcHJvdG9jb2wiOworCXNzaXAudHhfY2ZnID0gY2wtPnR4X2NmZzsKKwlzc2lwLnJ4X2NmZyA9IGNsLT5yeF9jZmc7CisJc3NpcC5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKKwlzc2lwLmFyY2hkYXRhID0gTlVMTDsKKworCW1vZGVtLT5zc2lfcHJvdG9jb2wgPSBoc2lfbmV3X2NsaWVudChwb3J0LCAmc3NpcCk7CisJaWYgKCFtb2RlbS0+c3NpX3Byb3RvY29sKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHNzaS1wcm90b2NvbCBkZXZpY2VcbiIpOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwllcnIgPSBkZXZpY2VfYXR0YWNoKCZtb2RlbS0+c3NpX3Byb3RvY29sLT5kZXZpY2UpOworCWlmIChlcnIgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgc3NpLXByb3RvY29sIGRyaXZlclxuIik7CisJCWVyciA9IC1FUFJPQkVfREVGRVI7CisJCWdvdG8gZXJyb3IzOworCX0gZWxzZSBpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBsb2FkIHNzaS1wcm90b2NvbCBkcml2ZXIgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjM7CisJfQorCisJLyogVE9ETzogcmVnaXN0ZXIgY210LXNwZWVjaCBoc2kgY2xpZW50ICovCisKKwlkZXZfaW5mbyhkZXYsICJSZWdpc3RlcmVkIE5va2lhIEhTSSBtb2RlbVxuIik7CisKKwlyZXR1cm4gMDsKKworZXJyb3IzOgorCWhzaV9yZW1vdmVfY2xpZW50KCZtb2RlbS0+c3NpX3Byb3RvY29sLT5kZXZpY2UsIE5VTEwpOworZXJyb3IyOgorCW5va2lhX21vZGVtX2dwaW9fdW5leHBvcnQoZGV2KTsKK2Vycm9yMToKKwlkaXNhYmxlX2lycV93YWtlKG1vZGVtLT5ub2tpYV9tb2RlbV9yc3RfaW5kX2lycSk7CisJdGFza2xldF9raWxsKCZtb2RlbS0+bm9raWFfbW9kZW1fcnN0X2luZF90YXNrbGV0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbm9raWFfbW9kZW1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgbm9raWFfbW9kZW1fZGV2aWNlICptb2RlbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFtb2RlbSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobW9kZW0tPnNzaV9wcm90b2NvbCkgeworCQloc2lfcmVtb3ZlX2NsaWVudCgmbW9kZW0tPnNzaV9wcm90b2NvbC0+ZGV2aWNlLCBOVUxMKTsKKwkJbW9kZW0tPnNzaV9wcm90b2NvbCA9IE5VTEw7CisJfQorCisJbm9raWFfbW9kZW1fZ3Bpb191bmV4cG9ydChkZXYpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWRpc2FibGVfaXJxX3dha2UobW9kZW0tPm5va2lhX21vZGVtX3JzdF9pbmRfaXJxKTsKKwl0YXNrbGV0X2tpbGwoJm1vZGVtLT5ub2tpYV9tb2RlbV9yc3RfaW5kX3Rhc2tsZXQpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG5va2lhX21vZGVtX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJub2tpYSxuOTAwLW1vZGVtIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBub2tpYV9tb2RlbV9vZl9tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBoc2lfY2xpZW50X2RyaXZlciBub2tpYV9tb2RlbV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibm9raWEtbW9kZW0iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnByb2JlCT0gbm9raWFfbW9kZW1fcHJvYmUsCisJCS5yZW1vdmUJPSBub2tpYV9tb2RlbV9yZW1vdmUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihub2tpYV9tb2RlbV9vZl9tYXRjaCksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5va2lhX21vZGVtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaHNpX3JlZ2lzdGVyX2NsaWVudF9kcml2ZXIoJm5va2lhX21vZGVtX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChub2tpYV9tb2RlbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG5va2lhX21vZGVtX2V4aXQodm9pZCkKK3sKKwloc2lfdW5yZWdpc3Rlcl9jbGllbnRfZHJpdmVyKCZub2tpYV9tb2RlbV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobm9raWFfbW9kZW1fZXhpdCk7CisKK01PRFVMRV9BTElBUygiaHNpOm5va2lhLW1vZGVtIik7CitNT0RVTEVfQVVUSE9SKCJTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGtlcm5lbC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhTSSBkcml2ZXIgbW9kdWxlIGZvciBOb2tpYSBOOTAwIE1vZGVtIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jIGIvZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTRiZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYwpAQCAtMCwwICsxLDExOTEgQEAKKy8qCisgKiBzc2lfcHJvdG9jb2wuYworICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTU0kgTWNTQUFCIGltcHJvdmVkIHByb3RvY29sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGtlcm5lbC5vcmc+CisgKgorICogQ29udGFjdDogQ2FybG9zIENoaW5lYSA8Y2FybG9zLmNoaW5lYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9waG9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2hzaS9oc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9oc2kvc3NpX3Byb3RvY29sLmg+CisKK3ZvaWQgc3NpX3dha2V0ZXN0KHN0cnVjdCBoc2lfY2xpZW50ICpjbCwgdW5zaWduZWQgaW50IGVuYWJsZSk7CisKKyNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTgkxMDAKKyNkZWZpbmUgU1NJUF9NQVhfTVRVCQk2NTUzNQorI2RlZmluZSBTU0lQX0RFRkFVTFRfTVRVCTQwMDAKKyNkZWZpbmUgUE5fTUVESUFfU09TCQkyMQorI2RlZmluZSBTU0lQX01JTl9QTl9IRFIJCTYJLyogRklYTUU6IFJldmlzaXQgKi8KKyNkZWZpbmUgU1NJUF9XRFRPVVQJCTIwMDAJLyogRklYTUU6IGhhcyB0byBiZSA1MDAgbXNlY3MgKi8KKyNkZWZpbmUgU1NJUF9LQVRPVVQJCTE1CS8qIDE1IG1zZWNzICovCisjZGVmaW5lIFNTSVBfTUFYX0NNRFMJCTUgLyogTnVtYmVyIG9mIHByZS1hbGxvY2F0ZWQgY29tbWFuZHMgYnVmZmVycyAqLworI2RlZmluZSBTU0lQX0JZVEVTX1RPX0ZSQU1FUyh4KSAoKCgoeCkgLSAxKSA+PiAyKSArIDEpCisjZGVmaW5lIFNTSVBfQ01UX0xPQURFUl9TWU5DCTB4MTEyMjMzNDQKKy8qCisgKiBTU0kgcHJvdG9jb2wgY29tbWFuZCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFNTSVBfQ09NTUFORChkYXRhKQkoKGRhdGEpID4+IDI4KQorI2RlZmluZSBTU0lQX1BBWUxPQUQoZGF0YSkJKChkYXRhKSAmIDB4ZmZmZmZmZikKKy8qIENvbW1hbmRzICovCisjZGVmaW5lIFNTSVBfU1dfQlJFQUsJCTAKKyNkZWZpbmUgU1NJUF9CT09USU5GT19SRVEJMQorI2RlZmluZSBTU0lQX0JPT1RJTkZPX1JFU1AJMgorI2RlZmluZSBTU0lQX1dBS0VURVNUX1JFU1VMVAkzCisjZGVmaW5lIFNTSVBfU1RBUlRfVFJBTlMJNAorI2RlZmluZSBTU0lQX1JFQURZCQk1CisvKiBQYXlsb2FkcyAqLworI2RlZmluZSBTU0lQX0RBVEFfVkVSU0lPTihkYXRhKQkoKGRhdGEpICYgMHhmZikKKyNkZWZpbmUgU1NJUF9MT0NBTF9WRVJJRAkxCisjZGVmaW5lIFNTSVBfV0FLRVRFU1RfT0sJMAorI2RlZmluZSBTU0lQX1dBS0VURVNUX0ZBSUxFRAkxCisjZGVmaW5lIFNTSVBfUERVX0xFTkdUSChkYXRhKQkoKChkYXRhKSA+PiA4KSAmIDB4ZmZmZikKKyNkZWZpbmUgU1NJUF9NU0dfSUQoZGF0YSkJKChkYXRhKSAmIDB4ZmYpCisvKiBHZW5lcmljIENvbW1hbmQgKi8KKyNkZWZpbmUgU1NJUF9DTUQoY21kLCBwYXlsb2FkKQkoKChjbWQpIDw8IDI4KSB8ICgocGF5bG9hZCkgJiAweGZmZmZmZmYpKQorLyogQ29tbWFuZHMgZm9yIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKyNkZWZpbmUgU1NJUF9CT09USU5GT19SRVFfQ01EKHZlcikgXAorCQlTU0lQX0NNRChTU0lQX0JPT1RJTkZPX1JFUSwgU1NJUF9EQVRBX1ZFUlNJT04odmVyKSkKKyNkZWZpbmUgU1NJUF9CT09USU5GT19SRVNQX0NNRCh2ZXIpIFwKKwkJU1NJUF9DTUQoU1NJUF9CT09USU5GT19SRVNQLCBTU0lQX0RBVEFfVkVSU0lPTih2ZXIpKQorI2RlZmluZSBTU0lQX1NUQVJUX1RSQU5TX0NNRChwZHVsZW4sIGlkKSBcCisJCVNTSVBfQ01EKFNTSVBfU1RBUlRfVFJBTlMsICgoKHBkdWxlbikgPDwgOCkgfCBTU0lQX01TR19JRChpZCkpKQorI2RlZmluZSBTU0lQX1JFQURZX0NNRAkJU1NJUF9DTUQoU1NJUF9SRUFEWSwgMCkKKyNkZWZpbmUgU1NJUF9TV0JSRUFLX0NNRAlTU0lQX0NNRChTU0lQX1NXX0JSRUFLLCAwKQorCisvKiBNYWluIHN0YXRlIG1hY2hpbmUgc3RhdGVzICovCitlbnVtIHsKKwlJTklULAorCUhBTkRTSEFLRSwKKwlBQ1RJVkUsCit9OworCisvKiBTZW5kIHN0YXRlIG1hY2hpbmUgc3RhdGVzICovCitlbnVtIHsKKwlTRU5EX0lETEUsCisJV0FJVDRSRUFEWSwKKwlTRU5EX1JFQURZLAorCVNFTkRJTkcsCisJU0VORElOR19TV0JSRUFLLAorfTsKKworLyogUmVjZWl2ZSBzdGF0ZSBtYWNoaW5lIHN0YXRlcyAqLworZW51bSB7CisJUkVDVl9JRExFLAorCVJFQ1ZfUkVBRFksCisJUkVDRUlWSU5HLAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3NpX3Byb3RvY29sIC0gU1NJIHByb3RvY29sIChNY1NBQUIpIGRhdGEKKyAqIEBtYWluX3N0YXRlOiBNYWluIHN0YXRlIG1hY2hpbmUKKyAqIEBzZW5kX3N0YXRlOiBUWCBzdGF0ZSBtYWNoaW5lCisgKiBAcmVjdl9zdGF0ZTogUlggc3RhdGUgbWFjaGluZQorICogQHdha2V0ZXN0OiBGbGFnIHRvIGZvbGxvdyB3YWtlIGxpbmUgdGVzdAorICogQHJ4aWQ6IFJYIGRhdGEgaWQKKyAqIEB0eGlkOiBUWCBkYXRhIGlkCisgKiBAdHhxdWV1ZV9sZW46IFRYIHF1ZXVlIGxlbmd0aAorICogQHR4X3dkOiBUWCB3YXRjaGRvZworICogQHJ4X3dkOiBSWCB3YXRjaGRvZworICogQGtlZXBfYWxpdmU6IFdvcmthcm91bmQgZm9yIFNTSSBIVyBidWcKKyAqIEBsb2NrOiBUbyBzZXJpYWxpemUgYWNjZXNzIHRvIHRoaXMgc3RydWN0CisgKiBAbmV0ZGV2OiBQaG9uZXQgbmV0d29yayBkZXZpY2UKKyAqIEB0eHF1ZXVlOiBUWCBkYXRhIHF1ZXVlCisgKiBAY21kcXVldWU6IFF1ZXVlIG9mIGZyZWUgY29tbWFuZHMKKyAqIEBjbDogSFNJIGNsaWVudCBvd24gcmVmZXJlbmNlCisgKiBAbGluazogTGluayBmb3Igc3NpcF9saXN0CisgKiBAdHhfdXNlY291bnQ6IFJlZmNvdW50IHRvIGtlZXAgdHJhY2sgdGhlIHNsYXZlcyB0aGF0IHVzZSB0aGUgd2FrZSBsaW5lCisgKiBAY2hhbm5lbF9pZF9jbWQ6IEhTSSBjaGFubmVsIGlkIGZvciBjb21tYW5kIHN0cmVhbQorICogQGNoYW5uZWxfaWRfZGF0YTogSFNJIGNoYW5uZWwgaWQgZm9yIGRhdGEgc3RyZWFtCisgKi8KK3N0cnVjdCBzc2lfcHJvdG9jb2wgeworCXVuc2lnbmVkIGludAkJbWFpbl9zdGF0ZTsKKwl1bnNpZ25lZCBpbnQJCXNlbmRfc3RhdGU7CisJdW5zaWduZWQgaW50CQlyZWN2X3N0YXRlOworCXVuc2lnbmVkIGludAkJd2FrZXRlc3Q6MTsKKwl1OAkJCXJ4aWQ7CisJdTgJCQl0eGlkOworCXVuc2lnbmVkIGludAkJdHhxdWV1ZV9sZW47CisJc3RydWN0IHRpbWVyX2xpc3QJdHhfd2Q7CisJc3RydWN0IHRpbWVyX2xpc3QJcnhfd2Q7CisJc3RydWN0IHRpbWVyX2xpc3QJa2VlcF9hbGl2ZTsgLyogd2FrZS11cCB3b3JrYXJvdW5kICovCisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJdHhxdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNtZHF1ZXVlOworCXN0cnVjdCBoc2lfY2xpZW50CSpjbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CisJYXRvbWljX3QJCXR4X3VzZWNudDsKKwlpbnQJCQljaGFubmVsX2lkX2NtZDsKKwlpbnQJCQljaGFubmVsX2lkX2RhdGE7Cit9OworCisvKiBMaXN0IG9mIHNzaSBwcm90b2NvbCBpbnN0YW5jZXMgKi8KK3N0YXRpYyBMSVNUX0hFQUQoc3NpcF9saXN0KTsKKworc3RhdGljIHZvaWQgc3NpcF9yeGNtZF9jb21wbGV0ZShzdHJ1Y3QgaHNpX21zZyAqbXNnKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNzaXBfc2V0X2NtZChzdHJ1Y3QgaHNpX21zZyAqbXNnLCB1MzIgY21kKQoreworCXUzMiAqZGF0YTsKKworCWRhdGEgPSBzZ192aXJ0KG1zZy0+c2d0LnNnbCk7CisJKmRhdGEgPSBjbWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNzaXBfZ2V0X2NtZChzdHJ1Y3QgaHNpX21zZyAqbXNnKQoreworCXUzMiAqZGF0YTsKKworCWRhdGEgPSBzZ192aXJ0KG1zZy0+c2d0LnNnbCk7CisKKwlyZXR1cm4gKmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfc2tiX3RvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNpX21zZyAqbXNnKQoreworCXNrYl9mcmFnX3QgKmZyYWc7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKKworCUJVR19PTihtc2ctPnNndC5uZW50cyAhPSAodW5zaWduZWQgaW50KShza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpOworCisJc2cgPSBtc2ctPnNndC5zZ2w7CisJc2dfc2V0X2J1ZihzZywgc2tiLT5kYXRhLCBza2JfaGVhZGxlbihza2IpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCXNnID0gc2dfbmV4dChzZyk7CisJCUJVR19PTighc2cpOworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCXNnX3NldF9wYWdlKHNnLCBmcmFnLT5wYWdlLnAsIGZyYWctPnNpemUsIGZyYWctPnBhZ2Vfb2Zmc2V0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfZnJlZV9kYXRhKHN0cnVjdCBoc2lfbXNnICptc2cpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IG1zZy0+Y29udGV4dDsKKwlwcl9kZWJ1ZygiZnJlZSBkYXRhOiBtc2cgJXAgY29udGV4dCAlcCBza2IgJXBcbiIsIG1zZywgbXNnLT5jb250ZXh0LAorCQkJCQkJCQlza2IpOworCW1zZy0+ZGVzdHJ1Y3RvciA9IE5VTEw7CisJZGV2X2tmcmVlX3NrYihza2IpOworCWhzaV9mcmVlX21zZyhtc2cpOworfQorCitzdGF0aWMgc3RydWN0IGhzaV9tc2cgKnNzaXBfYWxsb2NfZGF0YShzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2ksCisJCQkJCXN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKQoreworCXN0cnVjdCBoc2lfbXNnICptc2c7CisKKwltc2cgPSBoc2lfYWxsb2NfbXNnKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxLCBmbGFncyk7CisJaWYgKCFtc2cpCisJCXJldHVybiBOVUxMOworCXNzaXBfc2tiX3RvX21zZyhza2IsIG1zZyk7CisJbXNnLT5kZXN0cnVjdG9yID0gc3NpcF9mcmVlX2RhdGE7CisJbXNnLT5jaGFubmVsID0gc3NpLT5jaGFubmVsX2lkX2RhdGE7CisJbXNnLT5jb250ZXh0ID0gc2tiOworCisJcmV0dXJuIG1zZzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNzaXBfcmVsZWFzZV9jbWQoc3RydWN0IGhzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEobXNnLT5jbCk7CisKKwlkZXZfZGJnKCZtc2ctPmNsLT5kZXZpY2UsICJSZWxlYXNlIGNtZCAweCUwOHhcbiIsIHNzaXBfZ2V0X2NtZChtc2cpKTsKKwlzcGluX2xvY2tfYmgoJnNzaS0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbXNnLT5saW5rLCAmc3NpLT5jbWRxdWV1ZSk7CisJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHNpX21zZyAqc3NpcF9jbGFpbV9jbWQoc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpKQoreworCXN0cnVjdCBoc2lfbXNnICptc2c7CisKKwlCVUdfT04obGlzdF9lbXB0eSgmc3NpLT5jbWRxdWV1ZSkpOworCisJc3Bpbl9sb2NrX2JoKCZzc2ktPmxvY2spOworCW1zZyA9IGxpc3RfZmlyc3RfZW50cnkoJnNzaS0+Y21kcXVldWUsIHN0cnVjdCBoc2lfbXNnLCBsaW5rKTsKKwlsaXN0X2RlbCgmbXNnLT5saW5rKTsKKwlzcGluX3VubG9ja19iaCgmc3NpLT5sb2NrKTsKKwltc2ctPmRlc3RydWN0b3IgPSBzc2lwX3JlbGVhc2VfY21kOworCisJcmV0dXJuIG1zZzsKK30KKworc3RhdGljIHZvaWQgc3NpcF9mcmVlX2NtZHMoc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpKQoreworCXN0cnVjdCBoc2lfbXNnICptc2csICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXNnLCB0bXAsICZzc2ktPmNtZHF1ZXVlLCBsaW5rKSB7CisJCWxpc3RfZGVsKCZtc2ctPmxpbmspOworCQltc2ctPmRlc3RydWN0b3IgPSBOVUxMOworCQlrZnJlZShzZ192aXJ0KG1zZy0+c2d0LnNnbCkpOworCQloc2lfZnJlZV9tc2cobXNnKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3NpcF9hbGxvY19jbWRzKHN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSkKK3sKKwlzdHJ1Y3QgaHNpX21zZyAqbXNnOworCXUzMiAqYnVmOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNTSVBfTUFYX0NNRFM7IGkrKykgeworCQltc2cgPSBoc2lfYWxsb2NfbXNnKDEsIEdGUF9LRVJORUwpOworCQlpZiAoIW1zZykKKwkJCWdvdG8gb3V0OworCQlidWYgPSBrbWFsbG9jKHNpemVvZigqYnVmKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQloc2lfZnJlZV9tc2cobXNnKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNnX2luaXRfb25lKG1zZy0+c2d0LnNnbCwgYnVmLCBzaXplb2YoKmJ1ZikpOworCQltc2ctPmNoYW5uZWwgPSBzc2ktPmNoYW5uZWxfaWRfY21kOworCQlsaXN0X2FkZF90YWlsKCZtc2ctPmxpbmssICZzc2ktPmNtZHF1ZXVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK291dDoKKwlzc2lwX2ZyZWVfY21kcyhzc2kpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfc2V0X3J4c3RhdGUoc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpLCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJc3NpLT5yZWN2X3N0YXRlID0gc3RhdGU7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUkVDVl9JRExFOgorCQlkZWxfdGltZXIoJnNzaS0+cnhfd2QpOworCQlpZiAoc3NpLT5zZW5kX3N0YXRlID09IFNFTkRfSURMRSkKKwkJCWRlbF90aW1lcigmc3NpLT5rZWVwX2FsaXZlKTsKKwkJYnJlYWs7CisJY2FzZSBSRUNWX1JFQURZOgorCQkvKiBDTVQgc3BlZWNoIHdvcmthcm91bmQgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZzc2ktPnR4X3VzZWNudCkpCisJCQlicmVhazsKKwkJLyogT3RoZXJ3aXNlIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgUkVDRUlWSU5HOgorCQltb2RfdGltZXIoJnNzaS0+a2VlcF9hbGl2ZSwgamlmZmllcyArCisJCQkJCQltc2Vjc190b19qaWZmaWVzKFNTSVBfS0FUT1VUKSk7CisJCW1vZF90aW1lcigmc3NpLT5yeF93ZCwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoU1NJUF9XRFRPVVQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzc2lwX3NldF90eHN0YXRlKHN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSwgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXNzaS0+c2VuZF9zdGF0ZSA9IHN0YXRlOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFNFTkRfSURMRToKKwljYXNlIFNFTkRfUkVBRFk6CisJCWRlbF90aW1lcigmc3NpLT50eF93ZCk7CisJCWlmIChzc2ktPnJlY3Zfc3RhdGUgPT0gUkVDVl9JRExFKQorCQkJZGVsX3RpbWVyKCZzc2ktPmtlZXBfYWxpdmUpOworCQlicmVhazsKKwljYXNlIFdBSVQ0UkVBRFk6CisJY2FzZSBTRU5ESU5HOgorCWNhc2UgU0VORElOR19TV0JSRUFLOgorCQltb2RfdGltZXIoJnNzaS0+a2VlcF9hbGl2ZSwKKwkJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhTU0lQX0tBVE9VVCkpOworCQltb2RfdGltZXIoJnNzaS0+dHhfd2QsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFNTSVBfV0RUT1VUKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RydWN0IGhzaV9jbGllbnQgKnNzaXBfc2xhdmVfZ2V0X21hc3RlcihzdHJ1Y3QgaHNpX2NsaWVudCAqc2xhdmUpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKm1hc3RlciA9IEVSUl9QVFIoLUVOT0RFVik7CisJc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzc2ksICZzc2lwX2xpc3QsIGxpbmspCisJCWlmIChzbGF2ZS0+ZGV2aWNlLnBhcmVudCA9PSBzc2ktPmNsLT5kZXZpY2UucGFyZW50KSB7CisJCQltYXN0ZXIgPSBzc2ktPmNsOworCQkJYnJlYWs7CisJCX0KKworCXJldHVybiBtYXN0ZXI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2lwX3NsYXZlX2dldF9tYXN0ZXIpOworCitpbnQgc3NpcF9zbGF2ZV9zdGFydF90eChzdHJ1Y3QgaHNpX2NsaWVudCAqbWFzdGVyKQoreworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShtYXN0ZXIpOworCisJZGV2X2RiZygmbWFzdGVyLT5kZXZpY2UsICJzdGFydCBUWCAlZFxuIiwgYXRvbWljX3JlYWQoJnNzaS0+dHhfdXNlY250KSk7CisJc3Bpbl9sb2NrX2JoKCZzc2ktPmxvY2spOworCWlmIChzc2ktPnNlbmRfc3RhdGUgPT0gU0VORF9JRExFKSB7CisJCXNzaXBfc2V0X3R4c3RhdGUoc3NpLCBXQUlUNFJFQURZKTsKKwkJaHNpX3N0YXJ0X3R4KG1hc3Rlcik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzc2ktPmxvY2spOworCWF0b21pY19pbmMoJnNzaS0+dHhfdXNlY250KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3NpcF9zbGF2ZV9zdGFydF90eCk7CisKK2ludCBzc2lwX3NsYXZlX3N0b3BfdHgoc3RydWN0IGhzaV9jbGllbnQgKm1hc3RlcikKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEobWFzdGVyKTsKKworCVdBUk5fT05fT05DRShhdG9taWNfcmVhZCgmc3NpLT50eF91c2VjbnQpID09IDApOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNzaS0+dHhfdXNlY250KSkgeworCQlzcGluX2xvY2tfYmgoJnNzaS0+bG9jayk7CisJCWlmICgoc3NpLT5zZW5kX3N0YXRlID09IFNFTkRfUkVBRFkpIHx8CisJCQkoc3NpLT5zZW5kX3N0YXRlID09IFdBSVQ0UkVBRFkpKSB7CisJCQlzc2lwX3NldF90eHN0YXRlKHNzaSwgU0VORF9JRExFKTsKKwkJCWhzaV9zdG9wX3R4KG1hc3Rlcik7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7CisJfQorCWRldl9kYmcoJm1hc3Rlci0+ZGV2aWNlLCAic3RvcCBUWCAlZFxuIiwgYXRvbWljX3JlYWQoJnNzaS0+dHhfdXNlY250KSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNzaXBfc2xhdmVfc3RvcF90eCk7CisKK2ludCBzc2lwX3NsYXZlX3J1bm5pbmcoc3RydWN0IGhzaV9jbGllbnQgKm1hc3RlcikKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEobWFzdGVyKTsKKwlyZXR1cm4gbmV0aWZfcnVubmluZyhzc2ktPm5ldGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2lwX3NsYXZlX3J1bm5pbmcpOworCitzdGF0aWMgdm9pZCBzc2lwX3Jlc2V0KHN0cnVjdCBoc2lfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICp0bXA7CisJc3RydWN0IGhzaV9tc2cgKm1zZzsKKworCWlmIChuZXRpZl9ydW5uaW5nKHNzaS0+bmV0ZGV2KSkKKwkJbmV0aWZfY2Fycmllcl9vZmYoc3NpLT5uZXRkZXYpOworCWhzaV9mbHVzaChjbCk7CisJc3Bpbl9sb2NrX2JoKCZzc2ktPmxvY2spOworCWlmIChzc2ktPnNlbmRfc3RhdGUgIT0gU0VORF9JRExFKQorCQloc2lfc3RvcF90eChjbCk7CisJaWYgKHNzaS0+d2FrZXRlc3QpCisJCXNzaV93YWtldGVzdChjbCwgMCk7CisJZGVsX3RpbWVyKCZzc2ktPnJ4X3dkKTsKKwlkZWxfdGltZXIoJnNzaS0+dHhfd2QpOworCWRlbF90aW1lcigmc3NpLT5rZWVwX2FsaXZlKTsKKwlzc2ktPm1haW5fc3RhdGUgPSAwOworCXNzaS0+c2VuZF9zdGF0ZSA9IDA7CisJc3NpLT5yZWN2X3N0YXRlID0gMDsKKwlzc2ktPndha2V0ZXN0ID0gMDsKKwlzc2ktPnJ4aWQgPSAwOworCXNzaS0+dHhpZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGhlYWQsIHRtcCwgJnNzaS0+dHhxdWV1ZSkgeworCQltc2cgPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBoc2lfbXNnLCBsaW5rKTsKKwkJZGV2X2RiZygmY2wtPmRldmljZSwgIlBlbmRpbmcgVFggZGF0YVxuIik7CisJCWxpc3RfZGVsKGhlYWQpOworCQlzc2lwX2ZyZWVfZGF0YShtc2cpOworCX0KKwlzc2ktPnR4cXVldWVfbGVuID0gMDsKKwlzcGluX3VubG9ja19iaCgmc3NpLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3NpcF9kdW1wX3N0YXRlKHN0cnVjdCBoc2lfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisKKwlzcGluX2xvY2tfYmgoJnNzaS0+bG9jayk7CisJZGV2X2VycigmY2wtPmRldmljZSwgIk1haW4gc3RhdGU6ICVkXG4iLCBzc2ktPm1haW5fc3RhdGUpOworCWRldl9lcnIoJmNsLT5kZXZpY2UsICJSZWN2IHN0YXRlOiAlZFxuIiwgc3NpLT5yZWN2X3N0YXRlKTsKKwlkZXZfZXJyKCZjbC0+ZGV2aWNlLCAiU2VuZCBzdGF0ZTogJWRcbiIsIHNzaS0+c2VuZF9zdGF0ZSk7CisJZGV2X2VycigmY2wtPmRldmljZSwgIkNNVCAlc1xuIiwgKHNzaS0+bWFpbl9zdGF0ZSA9PSBBQ1RJVkUpID8KKwkJCQkJCQkiT25saW5lIiA6ICJPZmZsaW5lIik7CisJZGV2X2VycigmY2wtPmRldmljZSwgIldha2UgdGVzdCAlZFxuIiwgc3NpLT53YWtldGVzdCk7CisJZGV2X2VycigmY2wtPmRldmljZSwgIkRhdGEgUlggaWQ6ICVkXG4iLCBzc2ktPnJ4aWQpOworCWRldl9lcnIoJmNsLT5kZXZpY2UsICJEYXRhIFRYIGlkOiAlZFxuIiwgc3NpLT50eGlkKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobXNnLCAmc3NpLT50eHF1ZXVlLCBsaW5rKQorCQlkZXZfZXJyKCZjbC0+ZGV2aWNlLCAicGVuZGluZyBUWCBkYXRhICglcClcbiIsIG1zZyk7CisJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfZXJyb3Ioc3RydWN0IGhzaV9jbGllbnQgKmNsKQoreworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisJc3RydWN0IGhzaV9tc2cgKm1zZzsKKworCXNzaXBfZHVtcF9zdGF0ZShjbCk7CisJc3NpcF9yZXNldChjbCk7CisJbXNnID0gc3NpcF9jbGFpbV9jbWQoc3NpKTsKKwltc2ctPmNvbXBsZXRlID0gc3NpcF9yeGNtZF9jb21wbGV0ZTsKKwloc2lfYXN5bmNfcmVhZChjbCwgbXNnKTsKK30KKworc3RhdGljIHZvaWQgc3NpcF9rZWVwX2FsaXZlKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaHNpX2NsaWVudCAqY2wgPSAoc3RydWN0IGhzaV9jbGllbnQgKilkYXRhOworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisKKwlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiS2VlcCBhbGl2ZSBraWNrIGluOiBtKCVkKSByKCVkKSBzKCVkKVxuIiwKKwkJc3NpLT5tYWluX3N0YXRlLCBzc2ktPnJlY3Zfc3RhdGUsIHNzaS0+c2VuZF9zdGF0ZSk7CisKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJaWYgKHNzaS0+cmVjdl9zdGF0ZSA9PSBSRUNWX0lETEUpCisJCXN3aXRjaCAoc3NpLT5zZW5kX3N0YXRlKSB7CisJCWNhc2UgU0VORF9SRUFEWToKKwkJCWlmIChhdG9taWNfcmVhZCgmc3NpLT50eF91c2VjbnQpID09IDApCisJCQkJYnJlYWs7CisJCQkvKgorCQkJICogRmFsbCB0aHJvdWdoLiBXb3JrYXJvdW5kIGZvciBjbXQtc3BlZWNoCisJCQkgKiBpbiB0aGF0IGNhc2Ugd2UgcmVsYXkgb24gYXVkaW8gdGltZXJzLgorCQkJICovCisJCWNhc2UgU0VORF9JRExFOgorCQkJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7CisJCQlyZXR1cm47CisJCX0KKwltb2RfdGltZXIoJnNzaS0+a2VlcF9hbGl2ZSwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoU1NJUF9LQVRPVVQpKTsKKwlzcGluX3VubG9jaygmc3NpLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3NpcF93ZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gKHN0cnVjdCBoc2lfY2xpZW50ICopZGF0YTsKKworCWRldl9lcnIoJmNsLT5kZXZpY2UsICJXYXRjaGRvZyB0cmlnZXJyZWRcbiIpOworCXNzaXBfZXJyb3IoY2wpOworfQorCitzdGF0aWMgdm9pZCBzc2lwX3NlbmRfYm9vdGluZm9fcmVxX2NtZChzdHJ1Y3QgaHNpX2NsaWVudCAqY2wpCit7CisJc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpID0gaHNpX2NsaWVudF9kcnZkYXRhKGNsKTsKKwlzdHJ1Y3QgaHNpX21zZyAqbXNnOworCisJZGV2X2RiZygmY2wtPmRldmljZSwgIklzc3VpbmcgQk9PVCBJTkZPIFJFUSBjb21tYW5kXG4iKTsKKwltc2cgPSBzc2lwX2NsYWltX2NtZChzc2kpOworCXNzaXBfc2V0X2NtZChtc2csIFNTSVBfQk9PVElORk9fUkVRX0NNRChTU0lQX0xPQ0FMX1ZFUklEKSk7CisJbXNnLT5jb21wbGV0ZSA9IHNzaXBfcmVsZWFzZV9jbWQ7CisJaHNpX2FzeW5jX3dyaXRlKGNsLCBtc2cpOworCWRldl9kYmcoJmNsLT5kZXZpY2UsICJJc3N1aW5nIFJYIGNvbW1hbmRcbiIpOworCW1zZyA9IHNzaXBfY2xhaW1fY21kKHNzaSk7CisJbXNnLT5jb21wbGV0ZSA9IHNzaXBfcnhjbWRfY29tcGxldGU7CisJaHNpX2FzeW5jX3JlYWQoY2wsIG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfc3RhcnRfcngoc3RydWN0IGhzaV9jbGllbnQgKmNsKQoreworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisJc3RydWN0IGhzaV9tc2cgKm1zZzsKKworCWRldl9kYmcoJmNsLT5kZXZpY2UsICJSWCBzdGFydCBNKCVkKSBSKCVkKVxuIiwgc3NpLT5tYWluX3N0YXRlLAorCQkJCQkJc3NpLT5yZWN2X3N0YXRlKTsKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJLyoKKwkgKiBXZSBjYW4gaGF2ZSB0d28gVVAgZXZlbnRzIGluIGEgcm93IGR1ZSB0byBhIHNob3J0IGxvdworCSAqIGhpZ2ggdHJhbnNpdGlvbi4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZW5jb25kIFVQIGV2ZW50LgorCSAqLworCWlmICgoc3NpLT5tYWluX3N0YXRlICE9IEFDVElWRSkgfHwgKHNzaS0+cmVjdl9zdGF0ZSA9PSBSRUNWX1JFQURZKSkgeworCQlpZiAoc3NpLT5tYWluX3N0YXRlID09IElOSVQpIHsKKwkJCXNzaS0+bWFpbl9zdGF0ZSA9IEhBTkRTSEFLRTsKKwkJCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCQkJc3NpcF9zZW5kX2Jvb3RpbmZvX3JlcV9jbWQoY2wpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7CisJCX0KKwkJcmV0dXJuOworCX0KKwlzc2lwX3NldF9yeHN0YXRlKHNzaSwgUkVDVl9SRUFEWSk7CisJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7CisKKwltc2cgPSBzc2lwX2NsYWltX2NtZChzc2kpOworCXNzaXBfc2V0X2NtZChtc2csIFNTSVBfUkVBRFlfQ01EKTsKKwltc2ctPmNvbXBsZXRlID0gc3NpcF9yZWxlYXNlX2NtZDsKKwlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiU2VuZCBSRUFEWVxuIik7CisJaHNpX2FzeW5jX3dyaXRlKGNsLCBtc2cpOworfQorCitzdGF0aWMgdm9pZCBzc2lwX3N0b3Bfcngoc3RydWN0IGhzaV9jbGllbnQgKmNsKQoreworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisKKwlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiUlggc3RvcCBNKCVkKVxuIiwgc3NpLT5tYWluX3N0YXRlKTsKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJaWYgKGxpa2VseShzc2ktPm1haW5fc3RhdGUgPT0gQUNUSVZFKSkKKwkJc3NpcF9zZXRfcnhzdGF0ZShzc2ksIFJFQ1ZfSURMRSk7CisJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfZnJlZV9zdHJhbnMoc3RydWN0IGhzaV9tc2cgKm1zZykKK3sKKwlzc2lwX2ZyZWVfZGF0YShtc2ctPmNvbnRleHQpOworCXNzaXBfcmVsZWFzZV9jbWQobXNnKTsKK30KKworc3RhdGljIHZvaWQgc3NpcF9zdHJhbnNfY29tcGxldGUoc3RydWN0IGhzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaHNpX2NsaWVudCAqY2wgPSBtc2ctPmNsOworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisJc3RydWN0IGhzaV9tc2cgKmRhdGE7CisKKwlkYXRhID0gbXNnLT5jb250ZXh0OworCXNzaXBfcmVsZWFzZV9jbWQobXNnKTsKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJc3NpcF9zZXRfdHhzdGF0ZShzc2ksIFNFTkRJTkcpOworCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCWhzaV9hc3luY193cml0ZShjbCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgc3NpcF94bWl0KHN0cnVjdCBoc2lfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXN0cnVjdCBoc2lfbXNnICptc2csICpkbXNnOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlzcGluX2xvY2tfYmgoJnNzaS0+bG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJnNzaS0+dHhxdWV1ZSkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwlkbXNnID0gbGlzdF9maXJzdF9lbnRyeSgmc3NpLT50eHF1ZXVlLCBzdHJ1Y3QgaHNpX21zZywgbGluayk7CisJbGlzdF9kZWwoJmRtc2ctPmxpbmspOworCXNzaS0+dHhxdWV1ZV9sZW4tLTsKKwlzcGluX3VubG9ja19iaCgmc3NpLT5sb2NrKTsKKworCW1zZyA9IHNzaXBfY2xhaW1fY21kKHNzaSk7CisJc2tiID0gZG1zZy0+Y29udGV4dDsKKwltc2ctPmNvbnRleHQgPSBkbXNnOworCW1zZy0+Y29tcGxldGUgPSBzc2lwX3N0cmFuc19jb21wbGV0ZTsKKwltc2ctPmRlc3RydWN0b3IgPSBzc2lwX2ZyZWVfc3RyYW5zOworCisJc3Bpbl9sb2NrX2JoKCZzc2ktPmxvY2spOworCXNzaXBfc2V0X2NtZChtc2csIFNTSVBfU1RBUlRfVFJBTlNfQ01EKFNTSVBfQllURVNfVE9fRlJBTUVTKHNrYi0+bGVuKSwKKwkJCQkJCQkJc3NpLT50eGlkKSk7CisJc3NpLT50eGlkKys7CisJc3NpcF9zZXRfdHhzdGF0ZShzc2ksIFNFTkRJTkcpOworCXNwaW5fdW5sb2NrX2JoKCZzc2ktPmxvY2spOworCisJZGV2X2RiZygmY2wtPmRldmljZSwgIlNlbmQgU1RSQU5TICglZCBmcmFtZXMpXG4iLAorCQkJCQkJU1NJUF9CWVRFU19UT19GUkFNRVMoc2tiLT5sZW4pKTsKKworCXJldHVybiBoc2lfYXN5bmNfd3JpdGUoY2wsIG1zZyk7Cit9CisKKy8qIEluIHNvZnQgSVJRIGNvbnRleHQgKi8KK3N0YXRpYyB2b2lkIHNzaXBfcG5fcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJEcm9wIFJYIHBhY2tldFxuIik7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgU1NJUF9NSU5fUE5fSERSKSkpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJFcnJvciBkcm9wIFJYIHBhY2tldFxuIik7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKworCS8qIGxlbmd0aCBmaWVsZCBpcyBleGNoYW5nZWQgaW4gbmV0d29yayBieXRlIG9yZGVyICovCisJKCh1MTYgKilza2ItPmRhdGEpWzJdID0gbnRvaHMoKCh1MTYgKilza2ItPmRhdGEpWzJdKTsKKwlkZXZfZGJnKCZkZXYtPmRldiwgIlJYIGxlbmd0aCBmaXhlZCAoJTA0eCAtPiAldSlcbiIsCisJCQkoKHUxNiAqKXNrYi0+ZGF0YSlbMl0sIG50b2hzKCgodTE2ICopc2tiLT5kYXRhKVsyXSkpOworCisJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1BIT05FVCk7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlfX3NrYl9wdWxsKHNrYiwgMSk7CisJbmV0aWZfcngoc2tiKTsKK30KKworc3RhdGljIHZvaWQgc3NpcF9yeF9kYXRhX2NvbXBsZXRlKHN0cnVjdCBoc2lfbXNnICptc2cpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gbXNnLT5jbDsKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAobXNnLT5zdGF0dXMgPT0gSFNJX1NUQVRVU19FUlJPUikgeworCQlkZXZfZXJyKCZjbC0+ZGV2aWNlLCAiUlggZGF0YSBlcnJvclxuIik7CisJCXNzaXBfZnJlZV9kYXRhKG1zZyk7CisJCXNzaXBfZXJyb3IoY2wpOworCQlyZXR1cm47CisJfQorCWRlbF90aW1lcigmc3NpLT5yeF93ZCk7IC8qIEZJWE1FOiBSZXZpc2l0ICovCisJc2tiID0gbXNnLT5jb250ZXh0OworCXNzaXBfcG5fcngoc2tiKTsKKwloc2lfZnJlZV9tc2cobXNnKTsKK30KKworc3RhdGljIHZvaWQgc3NpcF9yeF9ib290aW5mb3JlcShzdHJ1Y3QgaHNpX2NsaWVudCAqY2wsIHUzMiBjbWQpCit7CisJc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpID0gaHNpX2NsaWVudF9kcnZkYXRhKGNsKTsKKwlzdHJ1Y3QgaHNpX21zZyAqbXNnOworCisJLyogV29ya2Fyb3VkOiBJZ25vcmUgQ01UIExvYWRlciBtZXNzYWdlIGxlZnRvdmVyICovCisJaWYgKGNtZCA9PSBTU0lQX0NNVF9MT0FERVJfU1lOQykKKwkJcmV0dXJuOworCisJc3dpdGNoIChzc2ktPm1haW5fc3RhdGUpIHsKKwljYXNlIEFDVElWRToKKwkJZGV2X2VycigmY2wtPmRldmljZSwgIkJvb3QgaW5mbyByZXEgb24gYWN0aXZlIHN0YXRlXG4iKTsKKwkJc3NpcF9lcnJvcihjbCk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgSU5JVDoKKwkJc3Bpbl9sb2NrKCZzc2ktPmxvY2spOworCQlzc2ktPm1haW5fc3RhdGUgPSBIQU5EU0hBS0U7CisJCWlmICghc3NpLT53YWtldGVzdCkgeworCQkJc3NpLT53YWtldGVzdCA9IDE7CisJCQlzc2lfd2FrZXRlc3QoY2wsIDEpOyAvKiBGSVhNRTogVG8gYmUgcmVtb3ZlZCAqLworCQl9CisJCS8qIFN0YXJ0IGJvb3QgaGFuZHNoYWtlIHdhdGNoZG9nICovCisJCW1vZF90aW1lcigmc3NpLT50eF93ZCwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoU1NJUF9XRFRPVVQpKTsKKwkJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7CisJCWRldl9kYmcoJmNsLT5kZXZpY2UsICJTZW5kIEJPT1RJTkZPX1JFU1BcbiIpOworCQlpZiAoU1NJUF9EQVRBX1ZFUlNJT04oY21kKSAhPSBTU0lQX0xPQ0FMX1ZFUklEKQorCQkJZGV2X3dhcm4oJmNsLT5kZXZpY2UsICJib290IGluZm8gcmVxIHZlcmlkIG1pc21hdGNoXG4iKTsKKwkJbXNnID0gc3NpcF9jbGFpbV9jbWQoc3NpKTsKKwkJc3NpcF9zZXRfY21kKG1zZywgU1NJUF9CT09USU5GT19SRVNQX0NNRChTU0lQX0xPQ0FMX1ZFUklEKSk7CisJCW1zZy0+Y29tcGxldGUgPSBzc2lwX3JlbGVhc2VfY21kOworCQloc2lfYXN5bmNfd3JpdGUoY2wsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgSEFORFNIQUtFOgorCQkvKiBJZ25vcmUgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZygmY2wtPmRldmljZSwgIldyb25nIHN0YXRlIE0oJWQpXG4iLCBzc2ktPm1haW5fc3RhdGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfcnhfYm9vdGluZm9yZXNwKHN0cnVjdCBoc2lfY2xpZW50ICpjbCwgdTMyIGNtZCkKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCisJaWYgKFNTSVBfREFUQV9WRVJTSU9OKGNtZCkgIT0gU1NJUF9MT0NBTF9WRVJJRCkKKwkJZGV2X3dhcm4oJmNsLT5kZXZpY2UsICJib290IGluZm8gcmVzcCB2ZXJpZCBtaXNtYXRjaFxuIik7CisKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJaWYgKHNzaS0+bWFpbl9zdGF0ZSAhPSBBQ1RJVkUpCisJCS8qIFVzZSB0eF93ZCBhcyBhIGJvb3Qgd2F0Y2hkb2cgaW4gbm9uIEFDVElWRSBzdGF0ZSAqLworCQltb2RfdGltZXIoJnNzaS0+dHhfd2QsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFNTSVBfV0RUT1VUKSk7CisJZWxzZQorCQlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiYm9vdCBpbmZvIHJlc3AgaWdub3JlZCBNKCVkKVxuIiwKKwkJCQkJCQlzc2ktPm1haW5fc3RhdGUpOworCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBzc2lwX3J4X3dha2V0ZXN0KHN0cnVjdCBoc2lfY2xpZW50ICpjbCwgdTMyIGNtZCkKK3sKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXVuc2lnbmVkIGludCB3a3JlcyA9IFNTSVBfUEFZTE9BRChjbWQpOworCisJc3Bpbl9sb2NrKCZzc2ktPmxvY2spOworCWlmIChzc2ktPm1haW5fc3RhdGUgIT0gSEFORFNIQUtFKSB7CisJCWRldl9kYmcoJmNsLT5kZXZpY2UsICJ3YWtlIGxpbmVzIHRlc3QgaWdub3JlZCBNKCVkKVxuIiwKKwkJCQkJCQlzc2ktPm1haW5fc3RhdGUpOworCQlzcGluX3VubG9jaygmc3NpLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc3NpLT53YWtldGVzdCkgeworCQlzc2ktPndha2V0ZXN0ID0gMDsKKwkJc3NpX3dha2V0ZXN0KGNsLCAwKTsgLyogRklYTUU6IFRvIGJlIHJlbW92ZWQgKi8KKwl9CisJc3NpLT5tYWluX3N0YXRlID0gQUNUSVZFOworCWRlbF90aW1lcigmc3NpLT50eF93ZCk7IC8qIFN0b3AgYm9vdCBoYW5kc2hha2UgdGltZXIgKi8KKwlzcGluX3VubG9jaygmc3NpLT5sb2NrKTsKKworCWRldl9ub3RpY2UoJmNsLT5kZXZpY2UsICJXQUtFTElORVMgVEVTVCAlc1xuIiwKKwkJCQl3a3JlcyAmIFNTSVBfV0FLRVRFU1RfRkFJTEVEID8gIkZBSUxFRCIgOiAiT0siKTsKKwlpZiAod2tyZXMgJiBTU0lQX1dBS0VURVNUX0ZBSUxFRCkgeworCQlzc2lwX2Vycm9yKGNsKTsKKwkJcmV0dXJuOworCX0KKwlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiQ01UIGlzIE9OTElORVxuIik7CisJbmV0aWZfd2FrZV9xdWV1ZShzc2ktPm5ldGRldik7CisJbmV0aWZfY2Fycmllcl9vbihzc2ktPm5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfcnhfcmVhZHkoc3RydWN0IGhzaV9jbGllbnQgKmNsKQoreworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJaWYgKHVubGlrZWx5KHNzaS0+bWFpbl9zdGF0ZSAhPSBBQ1RJVkUpKSB7CisJCWRldl9kYmcoJmNsLT5kZXZpY2UsICJSRUFEWSBvbiB3cm9uZyBzdGF0ZTogUyglZCkgTSglZClcbiIsCisJCQkJCXNzaS0+c2VuZF9zdGF0ZSwgc3NpLT5tYWluX3N0YXRlKTsKKwkJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7CisJCXJldHVybjsKKwl9CisJaWYgKHNzaS0+c2VuZF9zdGF0ZSAhPSBXQUlUNFJFQURZKSB7CisJCWRldl9kYmcoJmNsLT5kZXZpY2UsICJJZ25vcmUgc3B1cmlvdXMgUkVBRFkgY29tbWFuZFxuIik7CisJCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCQlyZXR1cm47CisJfQorCXNzaXBfc2V0X3R4c3RhdGUoc3NpLCBTRU5EX1JFQURZKTsKKwlzcGluX3VubG9jaygmc3NpLT5sb2NrKTsKKwlzc2lwX3htaXQoY2wpOworfQorCitzdGF0aWMgdm9pZCBzc2lwX3J4X3N0cmFucyhzdHJ1Y3QgaHNpX2NsaWVudCAqY2wsIHUzMiBjbWQpCit7CisJc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpID0gaHNpX2NsaWVudF9kcnZkYXRhKGNsKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisJaW50IGxlbiA9IFNTSVBfUERVX0xFTkdUSChjbWQpOworCisJZGV2X2RiZygmY2wtPmRldmljZSwgIlJYIHN0cmFuczogJWQgZnJhbWVzXG4iLCBsZW4pOworCXNwaW5fbG9jaygmc3NpLT5sb2NrKTsKKwlpZiAodW5saWtlbHkoc3NpLT5tYWluX3N0YXRlICE9IEFDVElWRSkpIHsKKwkJZGV2X2VycigmY2wtPmRldmljZSwgIlNUQVJUIFRSQU5TIHdyb25nIHN0YXRlOiBTKCVkKSBNKCVkKVxuIiwKKwkJCQkJc3NpLT5zZW5kX3N0YXRlLCBzc2ktPm1haW5fc3RhdGUpOworCQlzcGluX3VubG9jaygmc3NpLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzc2lwX3NldF9yeHN0YXRlKHNzaSwgUkVDRUlWSU5HKTsKKwlpZiAodW5saWtlbHkoU1NJUF9NU0dfSUQoY21kKSAhPSBzc2ktPnJ4aWQpKSB7CisJCWRldl9lcnIoJmNsLT5kZXZpY2UsICJTVEFSVCBUUkFOUyBpZCAlZCBleHBlY2V0ZWQgJWRcbiIsCisJCQkJCVNTSVBfTVNHX0lEKGNtZCksIHNzaS0+cnhpZCk7CisJCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCQlnb3RvIG91dDE7CisJfQorCXNzaS0+cnhpZCsrOworCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCXNrYiA9IG5ldGRldl9hbGxvY19za2Ioc3NpLT5uZXRkZXYsIGxlbiAqIDQpOworCWlmICh1bmxpa2VseSghc2tiKSkgeworCQlkZXZfZXJyKCZjbC0+ZGV2aWNlLCAiTm8gbWVtb3J5IGZvciByeCBza2JcbiIpOworCQlnb3RvIG91dDE7CisJfQorCXNrYi0+ZGV2ID0gc3NpLT5uZXRkZXY7CisJc2tiX3B1dChza2IsIGxlbiAqIDQpOworCW1zZyA9IHNzaXBfYWxsb2NfZGF0YShzc2ksIHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFtc2cpKSB7CisJCWRldl9lcnIoJmNsLT5kZXZpY2UsICJObyBtZW1vcnkgZm9yIFJYIGRhdGEgbXNnXG4iKTsKKwkJZ290byBvdXQyOworCX0KKwltc2ctPmNvbXBsZXRlID0gc3NpcF9yeF9kYXRhX2NvbXBsZXRlOworCWhzaV9hc3luY19yZWFkKGNsLCBtc2cpOworCisJcmV0dXJuOworb3V0MjoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CitvdXQxOgorCXNzaXBfZXJyb3IoY2wpOworfQorCitzdGF0aWMgdm9pZCBzc2lwX3J4Y21kX2NvbXBsZXRlKHN0cnVjdCBoc2lfbXNnICptc2cpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gbXNnLT5jbDsKKwl1MzIgY21kID0gc3NpcF9nZXRfY21kKG1zZyk7CisJdW5zaWduZWQgaW50IGNtZGlkID0gU1NJUF9DT01NQU5EKGNtZCk7CisKKwlpZiAobXNnLT5zdGF0dXMgPT0gSFNJX1NUQVRVU19FUlJPUikgeworCQlkZXZfZXJyKCZjbC0+ZGV2aWNlLCAiUlggZXJyb3IgZGV0ZWN0ZWRcbiIpOworCQlzc2lwX3JlbGVhc2VfY21kKG1zZyk7CisJCXNzaXBfZXJyb3IoY2wpOworCQlyZXR1cm47CisJfQorCWhzaV9hc3luY19yZWFkKGNsLCBtc2cpOworCWRldl9kYmcoJmNsLT5kZXZpY2UsICJSWCBjbWQ6IDB4JTA4eFxuIiwgY21kKTsKKwlzd2l0Y2ggKGNtZGlkKSB7CisJY2FzZSBTU0lQX1NXX0JSRUFLOgorCQkvKiBJZ25vcmVkICovCisJCWJyZWFrOworCWNhc2UgU1NJUF9CT09USU5GT19SRVE6CisJCXNzaXBfcnhfYm9vdGluZm9yZXEoY2wsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgU1NJUF9CT09USU5GT19SRVNQOgorCQlzc2lwX3J4X2Jvb3RpbmZvcmVzcChjbCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBTU0lQX1dBS0VURVNUX1JFU1VMVDoKKwkJc3NpcF9yeF93YWtldGVzdChjbCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBTU0lQX1NUQVJUX1RSQU5TOgorCQlzc2lwX3J4X3N0cmFucyhjbCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBTU0lQX1JFQURZOgorCQlzc2lwX3J4X3JlYWR5KGNsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJmNsLT5kZXZpY2UsICJjb21tYW5kIDB4JTA4eCBub3Qgc3VwcG9ydGVkXG4iLCBjbWQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNzaXBfc3dicmVha19jb21wbGV0ZShzdHJ1Y3QgaHNpX21zZyAqbXNnKQoreworCXN0cnVjdCBoc2lfY2xpZW50ICpjbCA9IG1zZy0+Y2w7CisJc3RydWN0IHNzaV9wcm90b2NvbCAqc3NpID0gaHNpX2NsaWVudF9kcnZkYXRhKGNsKTsKKworCXNzaXBfcmVsZWFzZV9jbWQobXNnKTsKKwlzcGluX2xvY2soJnNzaS0+bG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJnNzaS0+dHhxdWV1ZSkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZzc2ktPnR4X3VzZWNudCkpIHsKKwkJCXNzaXBfc2V0X3R4c3RhdGUoc3NpLCBTRU5EX1JFQURZKTsKKwkJfSBlbHNlIHsKKwkJCXNzaXBfc2V0X3R4c3RhdGUoc3NpLCBTRU5EX0lETEUpOworCQkJaHNpX3N0b3BfdHgoY2wpOworCQl9CisJCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZzc2ktPmxvY2spOworCQlzc2lwX3htaXQoY2wpOworCX0KKwluZXRpZl93YWtlX3F1ZXVlKHNzaS0+bmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgc3NpcF90eF9kYXRhX2NvbXBsZXRlKHN0cnVjdCBoc2lfbXNnICptc2cpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gbXNnLT5jbDsKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXN0cnVjdCBoc2lfbXNnICpjbXNnOworCisJaWYgKG1zZy0+c3RhdHVzID09IEhTSV9TVEFUVVNfRVJST1IpIHsKKwkJZGV2X2VycigmY2wtPmRldmljZSwgIlRYIGRhdGEgZXJyb3JcbiIpOworCQlzc2lwX2Vycm9yKGNsKTsKKwkJZ290byBvdXQ7CisJfQorCXNwaW5fbG9jaygmc3NpLT5sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmc3NpLT50eHF1ZXVlKSkgeworCQlzc2lwX3NldF90eHN0YXRlKHNzaSwgU0VORElOR19TV0JSRUFLKTsKKwkJc3Bpbl91bmxvY2soJnNzaS0+bG9jayk7CisJCWNtc2cgPSBzc2lwX2NsYWltX2NtZChzc2kpOworCQlzc2lwX3NldF9jbWQoY21zZywgU1NJUF9TV0JSRUFLX0NNRCk7CisJCWNtc2ctPmNvbXBsZXRlID0gc3NpcF9zd2JyZWFrX2NvbXBsZXRlOworCQlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiU2VuZCBTV0JSRUFLXG4iKTsKKwkJaHNpX2FzeW5jX3dyaXRlKGNsLCBjbXNnKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmc3NpLT5sb2NrKTsKKwkJc3NpcF94bWl0KGNsKTsKKwl9CitvdXQ6CisJc3NpcF9mcmVlX2RhdGEobXNnKTsKK30KKwordm9pZCBzc2lwX3BvcnRfZXZlbnQoc3RydWN0IGhzaV9jbGllbnQgKmNsLCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEhTSV9FVkVOVF9TVEFSVF9SWDoKKwkJc3NpcF9zdGFydF9yeChjbCk7CisJCWJyZWFrOworCWNhc2UgSFNJX0VWRU5UX1NUT1BfUlg6CisJCXNzaXBfc3RvcF9yeChjbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3NpcF9wbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gdG9faHNpX2NsaWVudChkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisJaW50IGVycjsKKworCWVyciA9IGhzaV9jbGFpbV9wb3J0KGNsLCAxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZjbC0+ZGV2aWNlLCAiU1NJIHBvcnQgYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZXJyID0gaHNpX3JlZ2lzdGVyX3BvcnRfZXZlbnQoY2wsIHNzaXBfcG9ydF9ldmVudCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2wtPmRldmljZSwgIlJlZ2lzdGVyIEhTSSBwb3J0IGV2ZW50IGZhaWxlZCAoJWQpXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGV2X2RiZygmY2wtPmRldmljZSwgIkNvbmZpZ3VyaW5nIFNTSSBwb3J0XG4iKTsKKwloc2lfc2V0dXAoY2wpOworCXNwaW5fbG9ja19iaCgmc3NpLT5sb2NrKTsKKwlpZiAoIXNzaS0+d2FrZXRlc3QpIHsKKwkJc3NpLT53YWtldGVzdCA9IDE7CisJCXNzaV93YWtldGVzdChjbCwgMSk7IC8qIEZJWE1FOiBUbyBiZSByZW1vdmVkICovCisJfQorCXNzaS0+bWFpbl9zdGF0ZSA9IElOSVQ7CisJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lwX3BuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaHNpX2NsaWVudCAqY2wgPSB0b19oc2lfY2xpZW50KGRldi0+ZGV2LnBhcmVudCk7CisKKwlzc2lwX3Jlc2V0KGNsKTsKKwloc2lfdW5yZWdpc3Rlcl9wb3J0X2V2ZW50KGNsKTsKKwloc2lfcmVsZWFzZV9wb3J0KGNsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzaXBfcG5fc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpZiAobmV3X210dSA+IFNTSVBfTUFYX01UVSB8fCBuZXdfbXR1IDwgUEhPTkVUX01JTl9NVFUpCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+bXR1ID0gbmV3X210dTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzaXBfcG5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoc2lfY2xpZW50ICpjbCA9IHRvX2hzaV9jbGllbnQoZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc3NpX3Byb3RvY29sICpzc2kgPSBoc2lfY2xpZW50X2RydmRhdGEoY2wpOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisKKwlpZiAoKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfUEhPTkVUKSkgfHwKKwkJCQkJKHNrYi0+bGVuIDwgU1NJUF9NSU5fUE5fSERSKSkKKwkJZ290byBkcm9wOworCS8qIFBhZCB0byAzMi1iaXRzIC0gRklYTUU6IFJldmlzaXQqLworCWlmICgoc2tiLT5sZW4gJiAzKSAmJiBza2JfcGFkKHNrYiwgNCAtIChza2ItPmxlbiAmIDMpKSkKKwkJZ290byBkcm9wOworCisJLyoKKwkgKiBNb2RlbSBzZW5kcyBQaG9uZXQgbWVzc2FnZXMgb3ZlciBTU0kgd2l0aCBpdHMgb3duIGVuZGlhbmVzcy4uLgorCSAqIEFzc3VtZSB0aGF0IG1vZGVtIGhhcyB0aGUgc2FtZSBlbmRpYW5lc3MgYXMgd2UgZG8uCisJICovCisJaWYgKHNrYl9jb3dfaGVhZChza2IsIDApKQorCQlnb3RvIGRyb3A7CisKKwkvKiBsZW5ndGggZmllbGQgaXMgZXhjaGFuZ2VkIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworCSgodTE2ICopc2tiLT5kYXRhKVsyXSA9IGh0b25zKCgodTE2ICopc2tiLT5kYXRhKVsyXSk7CisKKwltc2cgPSBzc2lwX2FsbG9jX2RhdGEoc3NpLCBza2IsIEdGUF9BVE9NSUMpOworCWlmICghbXNnKSB7CisJCWRldl9kYmcoJmNsLT5kZXZpY2UsICJEcm9wcGluZyB0eCBkYXRhOiBObyBtZW1vcnlcbiIpOworCQlnb3RvIGRyb3A7CisJfQorCW1zZy0+Y29tcGxldGUgPSBzc2lwX3R4X2RhdGFfY29tcGxldGU7CisKKwlzcGluX2xvY2tfYmgoJnNzaS0+bG9jayk7CisJaWYgKHVubGlrZWx5KHNzaS0+bWFpbl9zdGF0ZSAhPSBBQ1RJVkUpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzc2ktPmxvY2spOworCQlkZXZfZGJnKCZjbC0+ZGV2aWNlLCAiRHJvcHBpbmcgdHggZGF0YTogQ01UIGlzIE9GRkxJTkVcbiIpOworCQlnb3RvIGRyb3AyOworCX0KKwlsaXN0X2FkZF90YWlsKCZtc2ctPmxpbmssICZzc2ktPnR4cXVldWUpOworCXNzaS0+dHhxdWV1ZV9sZW4rKzsKKwlpZiAoZGV2LT50eF9xdWV1ZV9sZW4gPCBzc2ktPnR4cXVldWVfbGVuKSB7CisJCWRldl9pbmZvKCZjbC0+ZGV2aWNlLCAiVFggcXVldWUgZnVsbCAlZFxuIiwgc3NpLT50eHF1ZXVlX2xlbik7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9CisJaWYgKHNzaS0+c2VuZF9zdGF0ZSA9PSBTRU5EX0lETEUpIHsKKwkJc3NpcF9zZXRfdHhzdGF0ZShzc2ksIFdBSVQ0UkVBRFkpOworCQlzcGluX3VubG9ja19iaCgmc3NpLT5sb2NrKTsKKwkJZGV2X2RiZygmY2wtPmRldmljZSwgIlN0YXJ0IFRYIHFsZW4gJWRcbiIsIHNzaS0+dHhxdWV1ZV9sZW4pOworCQloc2lfc3RhcnRfdHgoY2wpOworCX0gZWxzZSBpZiAoc3NpLT5zZW5kX3N0YXRlID09IFNFTkRfUkVBRFkpIHsKKwkJLyogTmVlZGVkIGZvciBjbXQtc3BlZWNoIHdvcmthcm91bmQgKi8KKwkJZGV2X2RiZygmY2wtPmRldmljZSwgIlN0YXJ0IFRYIG9uIFNFTkQgUkVBRFkgcWxlbiAlZFxuIiwKKwkJCQkJCQlzc2ktPnR4cXVldWVfbGVuKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7CisJCXNzaXBfeG1pdChjbCk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNzaS0+bG9jayk7CisJfQorCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwlyZXR1cm4gMDsKK2Ryb3AyOgorCWhzaV9mcmVlX21zZyhtc2cpOworZHJvcDoKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ01UIHJlc2V0IGV2ZW50IGhhbmRsZXIgKi8KK3ZvaWQgc3NpcF9yZXNldF9ldmVudChzdHJ1Y3QgaHNpX2NsaWVudCAqbWFzdGVyKQoreworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShtYXN0ZXIpOworCWRldl9lcnIoJnNzaS0+Y2wtPmRldmljZSwgIkNNVCByZXNldCBkZXRlY3RlZCFcbiIpOworCXNzaXBfZXJyb3Ioc3NpLT5jbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2lwX3Jlc2V0X2V2ZW50KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzc2lwX3BuX29wcyA9IHsKKwkubmRvX29wZW4JPSBzc2lwX3BuX29wZW4sCisJLm5kb19zdG9wCT0gc3NpcF9wbl9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAk9IHNzaXBfcG5feG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJPSBzc2lwX3BuX3NldF9tdHUsCit9OworCitzdGF0aWMgdm9pZCBzc2lwX3BuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT5mZWF0dXJlcwkJPSAwOworCWRldi0+bmV0ZGV2X29wcwkJPSAmc3NpcF9wbl9vcHM7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9QSE9ORVQ7CisJZGV2LT5mbGFncwkJPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5tdHUJCT0gU1NJUF9ERUZBVUxUX01UVTsKKwlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDE7CisJZGV2LT5kZXZfYWRkclswXQk9IFBOX01FRElBX1NPUzsKKwlkZXYtPmFkZHJfbGVuCQk9IDE7CisJZGV2LT50eF9xdWV1ZV9sZW4JPSBTU0lQX1RYUVVFVUVfTEVOOworCisJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OworCWRldi0+aGVhZGVyX29wcwkJPSAmcGhvbmV0X2hlYWRlcl9vcHM7Cit9CisKK3N0YXRpYyBpbnQgc3NpX3Byb3RvY29sX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBpZm5hbWVbXSA9ICJwaG9uZXQlZCI7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gdG9faHNpX2NsaWVudChkZXYpOworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaTsKKwlpbnQgZXJyOworCisJc3NpID0ga3phbGxvYyhzaXplb2YoKnNzaSksIEdGUF9LRVJORUwpOworCWlmICghc3NpKSB7CisJCWRldl9lcnIoZGV2LCAiTm8gbWVtb3J5IGZvciBzc2kgcHJvdG9jb2xcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmc3NpLT5sb2NrKTsKKwlpbml0X3RpbWVyX2RlZmVycmFibGUoJnNzaS0+cnhfd2QpOworCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmc3NpLT50eF93ZCk7CisJaW5pdF90aW1lcigmc3NpLT5rZWVwX2FsaXZlKTsKKwlzc2ktPnJ4X3dkLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbDsKKwlzc2ktPnJ4X3dkLmZ1bmN0aW9uID0gc3NpcF93ZDsKKwlzc2ktPnR4X3dkLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbDsKKwlzc2ktPnR4X3dkLmZ1bmN0aW9uID0gc3NpcF93ZDsKKwlzc2ktPmtlZXBfYWxpdmUuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNsOworCXNzaS0+a2VlcF9hbGl2ZS5mdW5jdGlvbiA9IHNzaXBfa2VlcF9hbGl2ZTsKKwlJTklUX0xJU1RfSEVBRCgmc3NpLT50eHF1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmc3NpLT5jbWRxdWV1ZSk7CisJYXRvbWljX3NldCgmc3NpLT50eF91c2VjbnQsIDApOworCWhzaV9jbGllbnRfc2V0X2RydmRhdGEoY2wsIHNzaSk7CisJc3NpLT5jbCA9IGNsOworCisJc3NpLT5jaGFubmVsX2lkX2NtZCA9IGhzaV9nZXRfY2hhbm5lbF9pZF9ieV9uYW1lKGNsLCAibWNzYWFiLWNvbnRyb2wiKTsKKwlpZiAoc3NpLT5jaGFubmVsX2lkX2NtZCA8IDApIHsKKwkJZXJyID0gc3NpLT5jaGFubmVsX2lkX2NtZDsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZ2V0IGNtZCBjaGFubmVsICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXNzaS0+Y2hhbm5lbF9pZF9kYXRhID0gaHNpX2dldF9jaGFubmVsX2lkX2J5X25hbWUoY2wsICJtY3NhYWItZGF0YSIpOworCWlmIChzc2ktPmNoYW5uZWxfaWRfZGF0YSA8IDApIHsKKwkJZXJyID0gc3NpLT5jaGFubmVsX2lkX2RhdGE7CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGdldCBkYXRhIGNoYW5uZWwgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gc3NpcF9hbGxvY19jbWRzKHNzaSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihkZXYsICJObyBtZW1vcnkgZm9yIGNvbW1hbmRzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3NpLT5uZXRkZXYgPSBhbGxvY19uZXRkZXYoMCwgaWZuYW1lLCBzc2lwX3BuX3NldHVwKTsKKwlpZiAoIXNzaS0+bmV0ZGV2KSB7CisJCWRldl9lcnIoZGV2LCAiTm8gbWVtb3J5IGZvciBuZXRkZXZcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCisJU0VUX05FVERFVl9ERVYoc3NpLT5uZXRkZXYsIGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYoc3NpLT5uZXRkZXYpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldihzc2ktPm5ldGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihkZXYsICJSZWdpc3RlciBuZXRkZXYgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlsaXN0X2FkZCgmc3NpLT5saW5rLCAmc3NpcF9saXN0KTsKKworCWRldl9kYmcoZGV2LCAiY2hhbm5lbCBjb25maWd1cmF0aW9uOiBjbWQ9JWQsIGRhdGE9JWRcbiIsCisJCXNzaS0+Y2hhbm5lbF9pZF9jbWQsIHNzaS0+Y2hhbm5lbF9pZF9kYXRhKTsKKworCXJldHVybiAwOworb3V0MjoKKwlmcmVlX25ldGRldihzc2ktPm5ldGRldik7CitvdXQxOgorCXNzaXBfZnJlZV9jbWRzKHNzaSk7CitvdXQ6CisJa2ZyZWUoc3NpKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3NpX3Byb3RvY29sX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsID0gdG9faHNpX2NsaWVudChkZXYpOworCXN0cnVjdCBzc2lfcHJvdG9jb2wgKnNzaSA9IGhzaV9jbGllbnRfZHJ2ZGF0YShjbCk7CisKKwlsaXN0X2RlbCgmc3NpLT5saW5rKTsKKwl1bnJlZ2lzdGVyX25ldGRldihzc2ktPm5ldGRldik7CisJc3NpcF9mcmVlX2NtZHMoc3NpKTsKKwloc2lfY2xpZW50X3NldF9kcnZkYXRhKGNsLCBOVUxMKTsKKwlrZnJlZShzc2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHNpX2NsaWVudF9kcml2ZXIgc3NpcF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic3NpLXByb3RvY29sIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wcm9iZQk9IHNzaV9wcm90b2NvbF9wcm9iZSwKKwkJLnJlbW92ZQk9IHNzaV9wcm90b2NvbF9yZW1vdmUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaXBfaW5pdCh2b2lkKQoreworCXByX2luZm8oIlNTSSBwcm90b2NvbCBha2EgTWNTQUFCIGFkZGVkXG4iKTsKKworCXJldHVybiBoc2lfcmVnaXN0ZXJfY2xpZW50X2RyaXZlcigmc3NpcF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3NpcF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNzaXBfZXhpdCh2b2lkKQoreworCWhzaV91bnJlZ2lzdGVyX2NsaWVudF9kcml2ZXIoJnNzaXBfZHJpdmVyKTsKKwlwcl9pbmZvKCJTU0kgcHJvdG9jb2wgZHJpdmVyIHJlbW92ZWRcbiIpOworfQorbW9kdWxlX2V4aXQoc3NpcF9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJoc2k6c3NpLXByb3RvY29sIik7CitNT0RVTEVfQVVUSE9SKCJDYXJsb3MgQ2hpbmVhIDxjYXJsb3MuY2hpbmVhQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlJlbWkgRGVuaXMtQ291cm1vbnQgPHJlbWkuZGVuaXMtY291cm1vbnRAbm9raWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTU0kgcHJvdG9jb2wgaW1wcm92ZWQgYWthIE1jU0FBQiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvS2NvbmZpZyBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiYTI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL0tjb25maWcKQEAgLTAsMCArMSwxOSBAQAorIworIyBIU0kgY29udHJvbGxlcnMgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiSFNJIGNvbnRyb2xsZXJzIgorCitjb25maWcgT01BUF9TU0kKKwl0cmlzdGF0ZSAiT01BUCBTU0kgaGFyZHdhcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gSFNJICYmIE9GICYmIChBUkNIX09NQVAzIHx8IChBUk0gJiYgQ09NUElMRV9URVNUKSkKKwktLS1oZWxwLS0tCisJICBTU0kgaXMgYSBsZWdhY3kgdmVyc2lvbiBvZiBIU0kuIEl0IGlzIHVzdWFsbHkgdXNlZCB0byBjb25uZWN0CisJICBhbiBhcHBsaWNhdGlvbiBlbmdpbmUgd2l0aCBhIGNlbGx1bGFyIG1vZGVtLgorCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGVuYWJsZSB0aGUgT01BUCBTU0kgaGFyZHdhcmUgZHJpdmVyLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgT01BUF9TU0lfUE9SVAorCXRyaXN0YXRlCisJZGVmYXVsdCBtIGlmIE9NQVBfU1NJPW0KKwlkZWZhdWx0IHkgaWYgT01BUF9TU0k9eQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL2hzaS9jb250cm9sbGVycy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY2NWNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciBIU0kgY29udHJvbGxlcnMgZHJpdmVycworIworCitvYmotJChDT05GSUdfT01BUF9TU0kpCQkrPSBvbWFwX3NzaS5vCitvYmotJChDT05GSUdfT01BUF9TU0lfUE9SVCkJKz0gb21hcF9zc2lfcG9ydC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaS5jIGIvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM3YTdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2kuYwpAQCAtMCwwICsxLDYyNSBAQAorLyogT01BUCBTU0kgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGtlcm5lbC5vcmc+CisgKgorICogQ29udGFjdDogQ2FybG9zIENoaW5lYSA8Y2FybG9zLmNoaW5lYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaHNpL2hzaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorCisjaW5jbHVkZSAib21hcF9zc2lfcmVncy5oIgorI2luY2x1ZGUgIm9tYXBfc3NpLmgiCisKKy8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovCitzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9vbWFwX3NzaV9pZGEpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW50IHNzaV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCBfX21heWJlX3VudXNlZCkKK3sKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IG0tPnByaXZhdGU7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXZvaWQgX19pb21lbSAqc3lzID0gb21hcF9zc2ktPnN5czsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoc3NpLT5kZXZpY2UucGFyZW50KTsKKwlzZXFfcHJpbnRmKG0sICJSRVZJU0lPTlx0OiAweCUwOHhcbiIsICByZWFkbChzeXMgKyBTU0lfUkVWSVNJT05fUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiU1lTQ09ORklHXHQ6IDB4JTA4eFxuIiwgcmVhZGwoc3lzICsgU1NJX1NZU0NPTkZJR19SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJTWVNTVEFUVVNcdDogMHglMDh4XG4iLCByZWFkbChzeXMgKyBTU0lfU1lTU1RBVFVTX1JFRykpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoc3NpLT5kZXZpY2UucGFyZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzaV9kZWJ1Z19nZGRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAgX19tYXliZV91bnVzZWQpCit7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSBtLT5wcml2YXRlOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwl2b2lkIF9faW9tZW0gKmdkZCA9IG9tYXBfc3NpLT5nZGQ7CisJdm9pZCBfX2lvbWVtICpzeXMgPSBvbWFwX3NzaS0+c3lzOworCWludCBsY2g7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKHNzaS0+ZGV2aWNlLnBhcmVudCk7CisKKwlzZXFfcHJpbnRmKG0sICJHRERfTVBVX1NUQVRVU1x0OiAweCUwOHhcbiIsCisJCXJlYWRsKHN5cyArIFNTSV9HRERfTVBVX0lSUV9TVEFUVVNfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiR0REX01QVV9FTkFCTEVcdDogMHglMDh4XG5cbiIsCisJCXJlYWRsKHN5cyArIFNTSV9HRERfTVBVX0lSUV9FTkFCTEVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiSFdfSURcdFx0OiAweCUwOHhcbiIsCisJCQkJcmVhZGwoZ2RkICsgU1NJX0dERF9IV19JRF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJQUE9SVF9JRFx0OiAweCUwOHhcbiIsCisJCQkJcmVhZGwoZ2RkICsgU1NJX0dERF9QUE9SVF9JRF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJNUE9SVF9JRFx0OiAweCUwOHhcbiIsCisJCQkJcmVhZGwoZ2RkICsgU1NJX0dERF9NUE9SVF9JRF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJURVNUXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGdkZCArIFNTSV9HRERfVEVTVF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJHQ1JcdFx0OiAweCUwOHhcbiIsCisJCQkJcmVhZGwoZ2RkICsgU1NJX0dERF9HQ1JfUkVHKSk7CisKKwlmb3IgKGxjaCA9IDA7IGxjaCA8IFNTSV9NQVhfR0REX0xDSDsgbGNoKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiXG5HREQgTENIICVkXG49PT09PT09PT1cbiIsIGxjaCk7CisJCXNlcV9wcmludGYobSwgIkNTRFBcdFx0OiAweCUwNHhcbiIsCisJCQkJcmVhZHcoZ2RkICsgU1NJX0dERF9DU0RQX1JFRyhsY2gpKSk7CisJCXNlcV9wcmludGYobSwgIkNDUlx0XHQ6IDB4JTA0eFxuIiwKKwkJCQlyZWFkdyhnZGQgKyBTU0lfR0REX0NDUl9SRUcobGNoKSkpOworCQlzZXFfcHJpbnRmKG0sICJDSUNSXHRcdDogMHglMDR4XG4iLAorCQkJCXJlYWR3KGdkZCArIFNTSV9HRERfQ0lDUl9SRUcobGNoKSkpOworCQlzZXFfcHJpbnRmKG0sICJDU1JcdFx0OiAweCUwNHhcbiIsCisJCQkJcmVhZHcoZ2RkICsgU1NJX0dERF9DU1JfUkVHKGxjaCkpKTsKKwkJc2VxX3ByaW50ZihtLCAiQ1NTQVx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChnZGQgKyBTU0lfR0REX0NTU0FfUkVHKGxjaCkpKTsKKwkJc2VxX3ByaW50ZihtLCAiQ0RTQVx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChnZGQgKyBTU0lfR0REX0NEU0FfUkVHKGxjaCkpKTsKKwkJc2VxX3ByaW50ZihtLCAiQ0VOXHRcdDogMHglMDR4XG4iLAorCQkJCXJlYWR3KGdkZCArIFNTSV9HRERfQ0VOX1JFRyhsY2gpKSk7CisJCXNlcV9wcmludGYobSwgIkNTQUNcdFx0OiAweCUwNHhcbiIsCisJCQkJcmVhZHcoZ2RkICsgU1NJX0dERF9DU0FDX1JFRyhsY2gpKSk7CisJCXNlcV9wcmludGYobSwgIkNEQUNcdFx0OiAweCUwNHhcbiIsCisJCQkJcmVhZHcoZ2RkICsgU1NJX0dERF9DREFDX1JFRyhsY2gpKSk7CisJCXNlcV9wcmludGYobSwgIkNMTktfQ1RSTFx0OiAweCUwNHhcbiIsCisJCQkJcmVhZHcoZ2RkICsgU1NJX0dERF9DTE5LX0NUUkxfUkVHKGxjaCkpKTsKKwl9CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHNzaS0+ZGV2aWNlLnBhcmVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lfcmVnc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzc2lfZGVidWdfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc3NpX2dkZF9yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNzaV9kZWJ1Z19nZGRfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNzaV9yZWdzX2ZvcHMgPSB7CisJLm9wZW4JCT0gc3NpX3JlZ3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3NpX2dkZF9yZWdzX2ZvcHMgPSB7CisJLm9wZW4JCT0gc3NpX2dkZF9yZWdzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV9kZWJ1Z19hZGRfY3RybChzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSkKK3sKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCisJLyogU1NJIGNvbnRyb2xsZXIgKi8KKwlvbWFwX3NzaS0+ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKCZzc2ktPmRldmljZSksIE5VTEwpOworCWlmIChJU19FUlIob21hcF9zc2ktPmRpcikpCisJCXJldHVybiBQVFJfRVJSKG9tYXBfc3NpLT5kaXIpOworCisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVncyIsIFNfSVJVR08sIG9tYXBfc3NpLT5kaXIsIHNzaSwKKwkJCQkJCQkJJnNzaV9yZWdzX2ZvcHMpOworCS8qIFNTSSBHREQgKERNQSkgKi8KKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImdkZCIsIG9tYXBfc3NpLT5kaXIpOworCWlmIChJU19FUlIoZGlyKSkKKwkJZ290byByYmFjazsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdzIiwgU19JUlVHTywgZGlyLCBzc2ksICZzc2lfZ2RkX3JlZ3NfZm9wcyk7CisKKwlyZXR1cm4gMDsKK3JiYWNrOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShvbWFwX3NzaS0+ZGlyKTsKKworCXJldHVybiBQVFJfRVJSKGRpcik7Cit9CisKK3N0YXRpYyB2b2lkIHNzaV9kZWJ1Z19yZW1vdmVfY3RybChzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSkKK3sKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUob21hcF9zc2ktPmRpcik7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCisKKy8qCisgKiBGSVhNRTogSG9ycmlibGUgSEFDSyBuZWVkZWQgdW50aWwgd2UgcmVtb3ZlIHRoZSB1c2VsZXNzIHdha2VsaW5lIHRlc3QKKyAqIGluIHRoZSBDTVQuIFRvIGJlIHJlbW92ZWQgISEhIQorICovCit2b2lkIHNzaV93YWtldGVzdChzdHJ1Y3QgaHNpX2NsaWVudCAqY2wsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gaHNpX2dldF9wb3J0KGNsKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKworCW9tYXBfcG9ydC0+d2t0ZXN0ID0gISFlbmFibGU7CisJaWYgKG9tYXBfcG9ydC0+d2t0ZXN0KSB7CisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoc3NpLT5kZXZpY2UucGFyZW50KTsKKwkJd3JpdGVsX3JlbGF4ZWQoU1NJX1dBS0UoMCksCisJCQkJb21hcF9zc2ktPnN5cyArIFNTSV9TRVRfV0FLRV9SRUcocG9ydC0+bnVtKSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsX3JlbGF4ZWQoU1NJX1dBS0UoMCksCisJCQkJb21hcF9zc2ktPnN5cyArCVNTSV9DTEVBUl9XQUtFX1JFRyhwb3J0LT5udW0pKTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyhzc2ktPmRldmljZS5wYXJlbnQpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNzaV93YWtldGVzdCk7CisKK3N0YXRpYyB2b2lkIHNzaV9nZGRfY29tcGxldGUoc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2ksIHVuc2lnbmVkIGludCBsY2gpCit7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXN0cnVjdCBoc2lfbXNnICptc2cgPSBvbWFwX3NzaS0+Z2RkX3RybltsY2hdLm1zZzsKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSB0b19oc2lfcG9ydChtc2ctPmNsLT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgZGlyOworCXUzMiBjc3I7CisJdTMyIHZhbDsKKworCXNwaW5fbG9jaygmb21hcF9zc2ktPmxvY2spOworCisJdmFsID0gcmVhZGwob21hcF9zc2ktPnN5cyArIFNTSV9HRERfTVBVX0lSUV9FTkFCTEVfUkVHKTsKKwl2YWwgJj0gflNTSV9HRERfTENIKGxjaCk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBvbWFwX3NzaS0+c3lzICsgU1NJX0dERF9NUFVfSVJRX0VOQUJMRV9SRUcpOworCisJaWYgKG1zZy0+dHR5cGUgPT0gSFNJX01TR19SRUFEKSB7CisJCWRpciA9IERNQV9GUk9NX0RFVklDRTsKKwkJdmFsID0gU1NJX0RBVEFBVkFJTEFCTEUobXNnLT5jaGFubmVsKTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyhzc2ktPmRldmljZS5wYXJlbnQpOworCX0gZWxzZSB7CisJCWRpciA9IERNQV9UT19ERVZJQ0U7CisJCXZhbCA9IFNTSV9EQVRBQUNDRVBUKG1zZy0+Y2hhbm5lbCk7CisJCS8qIEtlZXAgY2xvY2tzIHJlZmVyZW5jZSBmb3Igd3JpdGUgcGlvIGV2ZW50ICovCisJfQorCWRtYV91bm1hcF9zZygmc3NpLT5kZXZpY2UsIG1zZy0+c2d0LnNnbCwgbXNnLT5zZ3QubmVudHMsIGRpcik7CisJY3NyID0gcmVhZHcob21hcF9zc2ktPmdkZCArIFNTSV9HRERfQ1NSX1JFRyhsY2gpKTsKKwlvbWFwX3NzaS0+Z2RkX3RybltsY2hdLm1zZyA9IE5VTEw7IC8qIHJlbGVhc2UgR0REIGxjaCAqLworCWRldl9kYmcoJnBvcnQtPmRldmljZSwgIkRNQSBjb21wbGV0ZWQgY2ggJWQgdHR5cGUgJWRcbiIsCisJCQkJbXNnLT5jaGFubmVsLCBtc2ctPnR0eXBlKTsKKwlzcGluX3VubG9jaygmb21hcF9zc2ktPmxvY2spOworCWlmIChjc3IgJiBTU0lfQ1NSX1RPVVIpIHsgLyogVGltZW91dCBlcnJvciAqLworCQltc2ctPnN0YXR1cyA9IEhTSV9TVEFUVVNfRVJST1I7CisJCW1zZy0+YWN0dWFsX2xlbiA9IDA7CisJCXNwaW5fbG9jaygmb21hcF9wb3J0LT5sb2NrKTsKKwkJbGlzdF9kZWwoJm1zZy0+bGluayk7IC8qIERlcXVldWUgbXNnICovCisJCXNwaW5fdW5sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCQltc2ctPmNvbXBsZXRlKG1zZyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl9sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCXZhbCB8PSByZWFkbChvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCXdyaXRlbF9yZWxheGVkKHZhbCwgb21hcF9zc2ktPnN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwlzcGluX3VubG9jaygmb21hcF9wb3J0LT5sb2NrKTsKKworCW1zZy0+c3RhdHVzID0gSFNJX1NUQVRVU19DT01QTEVURUQ7CisJbXNnLT5hY3R1YWxfbGVuID0gc2dfZG1hX2xlbihtc2ctPnNndC5zZ2wpOworfQorCitzdGF0aWMgdm9pZCBzc2lfZ2RkX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXYpCit7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSAoc3RydWN0IGhzaV9jb250cm9sbGVyICopZGV2OworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwl2b2lkIF9faW9tZW0gKnN5cyA9IG9tYXBfc3NpLT5zeXM7CisJdW5zaWduZWQgaW50IGxjaDsKKwl1MzIgc3RhdHVzX3JlZzsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoc3NpLT5kZXZpY2UucGFyZW50KTsKKworCXN0YXR1c19yZWcgPSByZWFkbChzeXMgKyBTU0lfR0REX01QVV9JUlFfU1RBVFVTX1JFRyk7CisJZm9yIChsY2ggPSAwOyBsY2ggPCBTU0lfTUFYX0dERF9MQ0g7IGxjaCsrKSB7CisJCWlmIChzdGF0dXNfcmVnICYgU1NJX0dERF9MQ0gobGNoKSkKKwkJCXNzaV9nZGRfY29tcGxldGUoc3NpLCBsY2gpOworCX0KKwl3cml0ZWxfcmVsYXhlZChzdGF0dXNfcmVnLCBzeXMgKyBTU0lfR0REX01QVV9JUlFfU1RBVFVTX1JFRyk7CisJc3RhdHVzX3JlZyA9IHJlYWRsKHN5cyArIFNTSV9HRERfTVBVX0lSUV9TVEFUVVNfUkVHKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoc3NpLT5kZXZpY2UucGFyZW50KTsKKworCWlmIChzdGF0dXNfcmVnKQorCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZvbWFwX3NzaS0+Z2RkX3Rhc2tsZXQpOworCWVsc2UKKwkJZW5hYmxlX2lycShvbWFwX3NzaS0+Z2RkX2lycSk7CisKK30KKworc3RhdGljIGlycXJldHVybl90IHNzaV9nZGRfaXNyKGludCBpcnEsIHZvaWQgKnNzaSkKK3sKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZvbWFwX3NzaS0+Z2RkX3Rhc2tsZXQpOworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzc2lfZ2V0X2Nsa19yYXRlKHN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpKQoreworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUob21hcF9zc2ktPmZjayk7CisJcmV0dXJuIHJhdGU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV9nZXRfaW9tZW0oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgX19pb21lbSAqKnBiYXNlLCBkbWFfYWRkcl90ICpwaHkpCit7CisJc3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IHJlc291cmNlICppb2FyZWE7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGQpOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZCwgSU9SRVNPVVJDRV9NRU0sIG5hbWUpOworCWlmICghbWVtKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJJTyBtZW1vcnkgcmVnaW9uIG1pc3NpbmcgKCVzKVxuIiwgbmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCWlvYXJlYSA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZzc2ktPmRldmljZSwgbWVtLT5zdGFydCwKKwkJCQkJcmVzb3VyY2Vfc2l6ZShtZW0pLCBkZXZfbmFtZSgmcGQtPmRldikpOworCWlmICghaW9hcmVhKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICIlcyBJTyBtZW1vcnkgcmVnaW9uIHJlcXVlc3QgZmFpbGVkXG4iLAorCQkJCQkJCQltZW0tPm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwliYXNlID0gZGV2bV9pb3JlbWFwKCZzc2ktPmRldmljZSwgbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKwlpZiAoIWJhc2UpIHsKKwkJZGV2X2VycigmcGQtPmRldiwgIiVzIElPIHJlbWFwIGZhaWxlZFxuIiwgbWVtLT5uYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJKnBiYXNlID0gYmFzZTsKKworCWlmIChwaHkpCisJCSpwaHkgPSBtZW0tPnN0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV9hZGRfY29udHJvbGxlcihzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSwKKwkJCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkKQoreworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaTsKKwlpbnQgZXJyOworCisJb21hcF9zc2kgPSBkZXZtX2t6YWxsb2MoJnNzaS0+ZGV2aWNlLCBzaXplb2YoKm9tYXBfc3NpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvbWFwX3NzaSkgeworCQlkZXZfZXJyKCZwZC0+ZGV2LCAibm90IGVub3VnaCBtZW1vcnkgZm9yIG9tYXAgc3NpXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3NpLT5pZCA9IGlkYV9zaW1wbGVfZ2V0KCZwbGF0Zm9ybV9vbWFwX3NzaV9pZGEsIDAsIDAsIEdGUF9LRVJORUwpOworCWlmIChzc2ktPmlkIDwgMCkgeworCQllcnIgPSBzc2ktPmlkOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJc3NpLT5vd25lciA9IFRISVNfTU9EVUxFOworCXNzaS0+ZGV2aWNlLnBhcmVudCA9ICZwZC0+ZGV2OworCWRldl9zZXRfbmFtZSgmc3NpLT5kZXZpY2UsICJzc2klZCIsIHNzaS0+aWQpOworCWhzaV9jb250cm9sbGVyX3NldF9kcnZkYXRhKHNzaSwgb21hcF9zc2kpOworCW9tYXBfc3NpLT5kZXYgPSAmc3NpLT5kZXZpY2U7CisJZXJyID0gc3NpX2dldF9pb21lbShwZCwgInN5cyIsICZvbWFwX3NzaS0+c3lzLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZXJyOworCWVyciA9IHNzaV9nZXRfaW9tZW0ocGQsICJnZGQiLCAmb21hcF9zc2ktPmdkZCwgTlVMTCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2VycjsKKwlvbWFwX3NzaS0+Z2RkX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkLCAiZ2RkX21wdSIpOworCWlmIChvbWFwX3NzaS0+Z2RkX2lycSA8IDApIHsKKwkJZGV2X2VycigmcGQtPmRldiwgIkdERCBJUlEgcmVzb3VyY2UgbWlzc2luZ1xuIik7CisJCWVyciA9IG9tYXBfc3NpLT5nZGRfaXJxOworCQlnb3RvIG91dF9lcnI7CisJfQorCXRhc2tsZXRfaW5pdCgmb21hcF9zc2ktPmdkZF90YXNrbGV0LCBzc2lfZ2RkX3Rhc2tsZXQsCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpc3NpKTsKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZzc2ktPmRldmljZSwgb21hcF9zc2ktPmdkZF9pcnEsIHNzaV9nZGRfaXNyLAorCQkJCQkJMCwgImdkZF9tcHUiLCBzc2kpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnNzaS0+ZGV2aWNlLCAiUmVxdWVzdCBHREQgSVJRICVkIGZhaWxlZCAoJWQpIiwKKwkJCQkJCQlvbWFwX3NzaS0+Z2RkX2lycSwgZXJyKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCW9tYXBfc3NpLT5wb3J0ID0gZGV2bV9remFsbG9jKCZzc2ktPmRldmljZSwKKwkJc2l6ZW9mKHN0cnVjdCBvbWFwX3NzaV9wb3J0ICopICogc3NpLT5udW1fcG9ydHMsIEdGUF9LRVJORUwpOworCWlmICghb21hcF9zc2ktPnBvcnQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCW9tYXBfc3NpLT5mY2sgPSBkZXZtX2Nsa19nZXQoJnNzaS0+ZGV2aWNlLCAic3NpX3Nzcl9mY2siKTsKKwlpZiAoSVNfRVJSKG9tYXBfc3NpLT5mY2spKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJDb3VsZCBub3QgYWNxdWlyZSBjbG9jayBcInNzaV9zc3JfZmNrXCI6ICVsaVxuIiwKKwkJCVBUUl9FUlIob21hcF9zc2ktPmZjaykpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJLyogVE9ETzogZmluZCByZWdpc3Rlciwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGNvbnRleHQgbG9zcyAqLworCW9tYXBfc3NpLT5nZXRfbG9zcyA9IE5VTEw7CisKKwlvbWFwX3NzaS0+bWF4X3NwZWVkID0gVUlOVF9NQVg7CisJc3Bpbl9sb2NrX2luaXQoJm9tYXBfc3NpLT5sb2NrKTsKKwllcnIgPSBoc2lfcmVnaXN0ZXJfY29udHJvbGxlcihzc2kpOworCisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2VycjsKKworCXJldHVybiAwOworCitvdXRfZXJyOgorCWlkYV9zaW1wbGVfcmVtb3ZlKCZwbGF0Zm9ybV9vbWFwX3NzaV9pZGEsIHNzaS0+aWQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV9od19pbml0KHN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpKQoreworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBwbV9ydW50aW1lX2dldF9zeW5jKHNzaS0+ZGV2aWNlLnBhcmVudCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vycigmc3NpLT5kZXZpY2UsICJydW50aW1lIFBNIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogUmVzZXRpbmcgU1NJIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWxfcmVsYXhlZChTU0lfU09GVFJFU0VULCBvbWFwX3NzaS0+c3lzICsgU1NJX1NZU0NPTkZJR19SRUcpOworCXZhbCA9IHJlYWRsKG9tYXBfc3NpLT5zeXMgKyBTU0lfU1lTU1RBVFVTX1JFRyk7CisJZm9yIChpID0gMDsgKChpIDwgMjApICYmICEodmFsICYgU1NJX1JFU0VURE9ORSkpOyBpKyspIHsKKwkJbXNsZWVwKDIwKTsKKwkJdmFsID0gcmVhZGwob21hcF9zc2ktPnN5cyArIFNTSV9TWVNTVEFUVVNfUkVHKTsKKwl9CisJaWYgKCEodmFsICYgU1NJX1JFU0VURE9ORSkpIHsKKwkJZGV2X2Vycigmc3NpLT5kZXZpY2UsICJTU0kgSFcgcmVzZXQgZmFpbGVkXG4iKTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyhzc2ktPmRldmljZS5wYXJlbnQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogUmVzZXRpbmcgR0REICovCisJd3JpdGVsX3JlbGF4ZWQoU1NJX1NXUkVTRVQsIG9tYXBfc3NpLT5nZGQgKyBTU0lfR0REX0dSU1RfUkVHKTsKKwkvKiBHZXQgRkNLIHJhdGUgaW4gS0h6ICovCisJb21hcF9zc2ktPmZja19yYXRlID0gRElWX1JPVU5EX0NMT1NFU1Qoc3NpX2dldF9jbGtfcmF0ZShzc2kpLCAxMDAwKTsKKwlkZXZfZGJnKCZzc2ktPmRldmljZSwgIlNTSSBmY2sgcmF0ZSAlbHUgS0h6XG4iLCBvbWFwX3NzaS0+ZmNrX3JhdGUpOworCS8qIFNldCBkZWZhdWx0IFBNIHNldHRpbmdzICovCisJdmFsID0gU1NJX0FVVE9JRExFIHwgU1NJX1NJRExFTU9ERV9TTUFSVCB8IFNTSV9NSURMRU1PREVfU01BUlQ7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBvbWFwX3NzaS0+c3lzICsgU1NJX1NZU0NPTkZJR19SRUcpOworCW9tYXBfc3NpLT5zeXNjb25maWcgPSB2YWw7CisJd3JpdGVsX3JlbGF4ZWQoU1NJX0NMS19BVVRPR0FUSU5HX09OLCBvbWFwX3NzaS0+c3lzICsgU1NJX0dERF9HQ1JfUkVHKTsKKwlvbWFwX3NzaS0+Z2RkX2djciA9IFNTSV9DTEtfQVVUT0dBVElOR19PTjsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHNzaS0+ZGV2aWNlLnBhcmVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3NpX3JlbW92ZV9jb250cm9sbGVyKHN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpKQoreworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwlpbnQgaWQgPSBzc2ktPmlkOworCXRhc2tsZXRfa2lsbCgmb21hcF9zc2ktPmdkZF90YXNrbGV0KTsKKwloc2lfdW5yZWdpc3Rlcl9jb250cm9sbGVyKHNzaSk7CisJaWRhX3NpbXBsZV9yZW1vdmUoJnBsYXRmb3JtX29tYXBfc3NpX2lkYSwgaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzc2lfb2ZfZ2V0X2F2YWlsYWJsZV9wb3J0c19jb3VudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJaW50IG51bSA9IDA7CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgInRpLG9tYXAzLXNzaS1wb3J0IikpCisJCQludW0rKzsKKworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyBpbnQgc3NpX3JlbW92ZV9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc3NpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNoaWxkcGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGQtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2k7CisJaW50IGVycjsKKwlpbnQgbnVtX3BvcnRzOworCisJaWYgKCFucCkgeworCQlkZXZfZXJyKCZwZC0+ZGV2LCAibWlzc2luZyBkZXZpY2UgdHJlZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbnVtX3BvcnRzID0gc3NpX29mX2dldF9hdmFpbGFibGVfcG9ydHNfY291bnQobnApOworCisJc3NpID0gaHNpX2FsbG9jX2NvbnRyb2xsZXIobnVtX3BvcnRzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNzaSkgeworCQlkZXZfZXJyKCZwZC0+ZGV2LCAiTm8gbWVtb3J5IGZvciBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGQsIHNzaSk7CisKKwllcnIgPSBzc2lfYWRkX2NvbnRyb2xsZXIoc3NpLCBwZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0MTsKKworCXBtX3J1bnRpbWVfaXJxX3NhZmUoJnBkLT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZC0+ZGV2KTsKKworCWVyciA9IHNzaV9od19pbml0KHNzaSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0MjsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwllcnIgPSBzc2lfZGVidWdfYWRkX2N0cmwoc3NpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQyOworI2VuZGlmCisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKKwkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgInRpLG9tYXAzLXNzaS1wb3J0IikpCisJCQljb250aW51ZTsKKworCQljaGlsZHBkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCAmcGQtPmRldik7CisJCWlmICghY2hpbGRwZGV2KSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZGV2X2VycigmcGQtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgc3NpIGNvbnRyb2xsZXIgcG9ydFxuIik7CisJCQlnb3RvIG91dDM7CisJCX0KKwl9CisKKwlkZXZfaW5mbygmcGQtPmRldiwgInNzaSBjb250cm9sbGVyICVkIGluaXRpYWxpemVkICglZCBwb3J0cykhXG4iLAorCQlzc2ktPmlkLCBudW1fcG9ydHMpOworCXJldHVybiBlcnI7CitvdXQzOgorCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmcGQtPmRldiwgTlVMTCwgc3NpX3JlbW92ZV9wb3J0cyk7CitvdXQyOgorCXNzaV9yZW1vdmVfY29udHJvbGxlcihzc2kpOworb3V0MToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgTlVMTCk7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZC0+ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHNzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQpCit7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZCk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzc2lfZGVidWdfcmVtb3ZlX2N0cmwoc3NpKTsKKyNlbmRpZgorCXNzaV9yZW1vdmVfY29udHJvbGxlcihzc2kpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkLCBOVUxMKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGQtPmRldik7CisKKwkvKiBjbGVhbnVwIG9mIG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgY2FsbCAqLworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmcGQtPmRldiwgTlVMTCwgc3NpX3JlbW92ZV9wb3J0cyk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdGF0aWMgaW50IG9tYXBfc3NpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisKKwlkZXZfZGJnKGRldiwgInJ1bnRpbWUgc3VzcGVuZCFcbiIpOworCisJaWYgKG9tYXBfc3NpLT5nZXRfbG9zcykKKwkJb21hcF9zc2ktPmxvc3NfY291bnQgPQorCQkJCW9tYXBfc3NpLT5nZXRfbG9zcyhzc2ktPmRldmljZS5wYXJlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9zc2lfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCisJZGV2X2RiZyhkZXYsICJydW50aW1lIHJlc3VtZSFcbiIpOworCisJaWYgKChvbWFwX3NzaS0+Z2V0X2xvc3MpICYmIChvbWFwX3NzaS0+bG9zc19jb3VudCA9PQorCQkJCW9tYXBfc3NpLT5nZXRfbG9zcyhzc2ktPmRldmljZS5wYXJlbnQpKSkKKwkJcmV0dXJuIDA7CisKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3NzaS0+Z2RkX2djciwgb21hcF9zc2ktPmdkZCArIFNTSV9HRERfR0NSX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG9tYXBfc3NpX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFMob21hcF9zc2lfcnVudGltZV9zdXNwZW5kLCBvbWFwX3NzaV9ydW50aW1lX3Jlc3VtZSwKKwkJTlVMTCkKK307CisKKyNkZWZpbmUgREVWX1BNX09QUyAgICAgKCZvbWFwX3NzaV9wbV9vcHMpCisjZWxzZQorI2RlZmluZSBERVZfUE1fT1BTICAgICBOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcF9zc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRpLG9tYXAzLXNzaSIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb21hcF9zc2lfb2ZfbWF0Y2gpOworI2Vsc2UKKyNkZWZpbmUgb21hcF9zc2lfb2ZfbWF0Y2ggTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNzaV9wZHJpdmVyID0geworCS5yZW1vdmUJPSBfX2V4aXRfcChzc2lfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJvbWFwX3NzaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0gICAgID0gREVWX1BNX09QUywKKwkJLm9mX21hdGNoX3RhYmxlID0gb21hcF9zc2lfb2ZfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXJfcHJvYmUoc3NpX3Bkcml2ZXIsIHNzaV9wcm9iZSk7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06b21hcF9zc2kiKTsKK01PRFVMRV9BVVRIT1IoIkNhcmxvcyBDaGluZWEgPGNhcmxvcy5jaGluZWFAbm9raWEuY29tPiIpOworTU9EVUxFX0FVVEhPUigiU2ViYXN0aWFuIFJlaWNoZWwgPHNyZUBrZXJuZWwub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2kuaCBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNTY0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qIE9NQVAgU1NJIGludGVybmFsIGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2ViYXN0aWFuIFJlaWNoZWwKKyAqCisgKiBDb250YWN0OiBDYXJsb3MgQ2hpbmVhIDxjYXJsb3MuY2hpbmVhQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0hTSV9PTUFQX1NTSV9IX18KKyNkZWZpbmUgX19MSU5VWF9IU0lfT01BUF9TU0lfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oc2kvaHNpLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgU1NJX01BWF9DSEFOTkVMUwk4CisjZGVmaW5lIFNTSV9NQVhfR0REX0xDSAkJOAorI2RlZmluZSBTU0lfQllURVNfVE9fRlJBTUVTKHgpICgoKCh4KSAtIDEpID4+IDIpICsgMSkKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9zc21fY3R4IC0gT01BUCBzeW5jaHJvbm91cyBzZXJpYWwgbW9kdWxlIChUWC9SWCkgY29udGV4dAorICogQG1vZGU6IEJpdCB0cmFuc21pc3Npb24gbW9kZQorICogQGNoYW5uZWxzOiBOdW1iZXIgb2YgY2hhbm5lbHMKKyAqIEBmcmFtZXNpemU6IEZyYW1lIHNpemUgaW4gYml0cworICogQHRpbWVvdXQ6IFJYIGZyYW1lIHRpbWVvdXQKKyAqIEBkaXZpc29yOiBUWCBkaXZpZGVyCisgKiBAYXJiX21vZGU6IEFyYml0cmF0aW9uIG1vZGUgZm9yIFRYIGZyYW1lIChSb3VuZCByb2JpbiwgcHJpb3JpdHkpCisgKi8KK3N0cnVjdCBvbWFwX3NzbV9jdHggeworCXUzMgltb2RlOworCXUzMgljaGFubmVsczsKKwl1MzIJZnJhbWVfc2l6ZTsKKwl1bmlvbgl7CisJCQl1MzIJdGltZW91dDsgLyogUnggT25seSAqLworCQkJc3RydWN0CXsKKwkJCQkJdTMyCWFyYl9tb2RlOworCQkJCQl1MzIJZGl2aXNvcjsKKwkJCX07IC8qIFR4IG9ubHkgKi8KKwl9OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAtIE9NQVAgU1NJIHBvcnQgZGF0YQorICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgdG8gdGhlIHBvcnQgKEhTSSBwb3J0KQorICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBhc3NvY2lhdGVkIHRvIHRoZSBwb3J0CisgKiBAc3N0X2RtYTogU1NJIHRyYW5zbWl0dGVyIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworICogQHNzcl9kbWE6IFNTSSByZWNlaXZlciBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKyAqIEBzc3RfYmFzZTogU1NJIHRyYW5zbWl0dGVyIGJhc2UgYWRkcmVzcworICogQHNzcl9iYXNlOiBTU0kgcmVjZWl2ZXIgYmFzZSBhZGRyZXNzCisgKiBAd2tfbG9jazogc3BpbiBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIHdha2UgbGluZXMKKyAqIEBsb2NrOiBTcGluIGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgU1NJIHBvcnQKKyAqIEBjaGFubmVsczogQ3VycmVudCBudW1iZXIgb2YgY2hhbm5lbHMgY29uZmlndXJlZCAoMSwyLDQgb3IgOCkKKyAqIEB0eHF1ZXVlOiBUWCBtZXNzYWdlIHF1ZXVlcworICogQHJ4cXVldWU6IFJYIG1lc3NhZ2UgcXVldWVzCisgKiBAYnJrcXVldWU6IFF1ZXVlIG9mIGluY29taW5nIEhXQlJFQUsgcmVxdWVzdHMgKEZSQU1FIG1vZGUpCisgKiBAaXJxOiBJUlEgbnVtYmVyCisgKiBAd2FrZV9pcnE6IElSUSBudW1iZXIgZm9yIGluY29taW5nIHdha2UgbGluZSAoLTEgaWYgbm9uZSkKKyAqIEB3YWtlX2dwaW86IEdQSU8gbnVtYmVyIGZvciBpbmNvbWluZyB3YWtlIGxpbmUgKC0xIGlmIG5vbmUpCisgKiBAcGlvX3Rhc2tsZXQ6IEJvdHRvbSBoYWxmIGZvciBQSU8gdHJhbnNmZXJzIGFuZCBldmVudHMKKyAqIEB3YWtlX3Rhc2tsZXQ6IEJvdHRvbSBoYWxmIGZvciBpbmNvbWluZyB3YWtlIGV2ZW50cworICogQHdraW5fY2tlbjogS2VlcCB0cmFjayBvZiBjbG9jayByZWZlcmVuY2VzIGR1ZSB0byB0aGUgaW5jb21pbmcgd2FrZSBsaW5lCisgKiBAd2tfcmVmY291bnQ6IFJlZmVyZW5jZSBjb3VudCBmb3Igb3V0cHV0IHdha2UgbGluZQorICogQHN5c19tcHVfZW5hYmxlOiBDb250ZXh0IGZvciB0aGUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgaXJxIDAKKyAqIEBzc3Q6IENvbnRleHQgZm9yIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgdHJhbnNtaXR0ZXIKKyAqIEBzc3I6IENvbnRleHQgZm9yIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcmVjZWl2ZXIKKyAqLworc3RydWN0IG9tYXBfc3NpX3BvcnQgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IGRldmljZSAgICAgICAgICAgKnBkZXY7CisJZG1hX2FkZHJfdAkJc3N0X2RtYTsKKwlkbWFfYWRkcl90CQlzc3JfZG1hOworCXZvaWQgX19pb21lbQkJKnNzdF9iYXNlOworCXZvaWQgX19pb21lbQkJKnNzcl9iYXNlOworCXNwaW5sb2NrX3QJCXdrX2xvY2s7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBpbnQJCWNoYW5uZWxzOworCXN0cnVjdCBsaXN0X2hlYWQJdHhxdWV1ZVtTU0lfTUFYX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJ4cXVldWVbU1NJX01BWF9DSEFOTkVMU107CisJc3RydWN0IGxpc3RfaGVhZAlicmtxdWV1ZTsKKwl1bnNpZ25lZCBpbnQJCWlycTsKKwlpbnQJCQl3YWtlX2lycTsKKwlpbnQJCQl3YWtlX2dwaW87CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXBpb190YXNrbGV0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl3YWtlX3Rhc2tsZXQ7CisJYm9vbAkJCXdrdGVzdDoxOyAvKiBGSVhNRTogSEFDSyB0byBiZSByZW1vdmVkICovCisJYm9vbAkJCXdraW5fY2tlbjoxOyAvKiBXb3JrYXJvdW5kICovCisJdW5zaWduZWQgaW50CQl3a19yZWZjb3VudDsKKwkvKiBPTUFQIFNTSSBwb3J0IGNvbnRleHQgKi8KKwl1MzIJCQlzeXNfbXB1X2VuYWJsZTsgLyogV2UgdXNlIG9ubHkgb25lIGlycSAqLworCXN0cnVjdCBvbWFwX3NzbV9jdHgJc3N0OworCXN0cnVjdCBvbWFwX3NzbV9jdHgJc3NyOworCXUzMgkJCWxvc3NfY291bnQ7CisJdTMyCQkJcG9ydF9pZDsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisjZW5kaWYKK307CisKKy8qKgorICogc3RydWN0IGdkZF90cm4gLSBHREQgdHJhbnNhY3Rpb24gZGF0YQorICogQG1zZzogUG9pbnRlciB0byB0aGUgSFNJIG1lc3NhZ2UgYmVpbmcgc2VydmVkCisgKiBAc2c6IFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgc2cgZW50cnkgYmVpbmcgc2VydmVkCisgKi8KK3N0cnVjdCBnZGRfdHJuIHsKKwlzdHJ1Y3QgaHNpX21zZwkJKm1zZzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAtIE9NQVAgU1NJIGNvbnRyb2xsZXIgZGF0YQorICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRyb2xsZXIgKEhTSSBjb250cm9sbGVyKQorICogQHN5czogU1NJIEkvTyBiYXNlIGFkZHJlc3MKKyAqIEBnZGQ6IEdERCBJL08gYmFzZSBhZGRyZXNzCisgKiBAZmNrOiBTU0kgZnVuY3Rpb25hbCBjbG9jaworICogQGdkZF9pcnE6IElSUSBsaW5lIGZvciBHREQKKyAqIEBnZGRfdGFza2xldDogYm90dG9tIGhhbGYgZm9yIERNQSB0cmFuc2ZlcnMKKyAqIEBnZGRfdHJuOiBBcnJheSBvZiBHREQgdHJhbnNhY3Rpb24gZGF0YSBmb3Igb25nb2luZyBHREQgdHJhbnNmZXJzCisgKiBAbG9jazogbG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIEdERAorICogQGxvc3NfY291bnQ6IFRvIGZvbGxvdyBpZiB3ZSBuZWVkIHRvIHJlc3RvcmUgY29udGV4dCBvciBub3QKKyAqIEBtYXhfc3BlZWQ6IE1heGltdW0gVFggc3BlZWQgKEtiL3MpIHNldCBieSB0aGUgY2xpZW50cy4KKyAqIEBzeXNjb25maWc6IFNTSSBjb250cm9sbGVyIHNhdmVkIGNvbnRleHQKKyAqIEBnZGRfZ2NyOiBTU0kgR0REIHNhdmVkIGNvbnRleHQKKyAqIEBnZXRfbG9zczogUG9pbnRlciB0byBvbWFwX3BtX2dldF9kZXZfY29udGV4dF9sb3NzX2NvdW50LCBpZiBhbnkKKyAqIEBwb3J0OiBBcnJheSBvZiBwb2ludGVycyBvZiB0aGUgcG9ydHMgb2YgdGhlIGNvbnRyb2xsZXIKKyAqIEBkaXI6IERlYnVnZnMgU1NJIHJvb3QgZGlyZWN0b3J5CisgKi8KK3N0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXZvaWQgX19pb21lbQkJKnN5czsKKwl2b2lkIF9faW9tZW0JCSpnZGQ7CisJc3RydWN0IGNsawkJKmZjazsKKwl1bnNpZ25lZCBpbnQJCWdkZF9pcnE7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWdkZF90YXNrbGV0OworCXN0cnVjdCBnZGRfdHJuCQlnZGRfdHJuW1NTSV9NQVhfR0REX0xDSF07CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQlmY2tfcmF0ZTsKKwl1MzIJCQlsb3NzX2NvdW50OworCXUzMgkJCW1heF9zcGVlZDsKKwkvKiBPTUFQIFNTSSBDb250cm9sbGVyIGNvbnRleHQgKi8KKwl1MzIJCQlzeXNjb25maWc7CisJdTMyCQkJZ2RkX2djcjsKKwlpbnQJCQkoKmdldF9sb3NzKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0CSoqcG9ydDsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX0hTSV9PTUFQX1NTSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYyBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY5M2YwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jCkBAIC0wLDAgKzEsMTM5OSBAQAorLyogT01BUCBTU0kgcG9ydCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlhbiBSZWljaGVsIDxzcmVAa2VybmVsLm9yZz4KKyAqCisgKiBDb250YWN0OiBDYXJsb3MgQ2hpbmVhIDxjYXJsb3MuY2hpbmVhQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgIm9tYXBfc3NpX3JlZ3MuaCIKKyNpbmNsdWRlICJvbWFwX3NzaS5oIgorCitzdGF0aWMgaW5saW5lIGludCBoc2lfZHVtbXlfbXNnKHN0cnVjdCBoc2lfbXNnICptc2cgX19tYXliZV91bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhzaV9kdW1teV9jbChzdHJ1Y3QgaHNpX2NsaWVudCAqY2wgX19tYXliZV91bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNzaV93YWtlaW4oc3RydWN0IGhzaV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCXJldHVybiBncGlvX2dldF92YWx1ZShvbWFwX3BvcnQtPndha2VfZ3Bpbyk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyB2b2lkIHNzaV9kZWJ1Z19yZW1vdmVfcG9ydChzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUob21hcF9wb3J0LT5kaXIpOworfQorCitzdGF0aWMgaW50IHNzaV9kZWJ1Z19wb3J0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwIF9fbWF5YmVfdW51c2VkKQoreworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IG0tPnByaXZhdGU7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisJdm9pZCBfX2lvbWVtCSpiYXNlID0gb21hcF9zc2ktPnN5czsKKwl1bnNpZ25lZCBpbnQgY2g7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJaWYgKG9tYXBfcG9ydC0+d2FrZV9pcnEgPiAwKQorCQlzZXFfcHJpbnRmKG0sICJDQVdBS0VcdFx0OiAlZFxuIiwgc3NpX3dha2Vpbihwb3J0KSk7CisJc2VxX3ByaW50ZihtLCAiV0FLRVx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1dBS0VfUkVHKHBvcnQtPm51bSkpKTsKKwlzZXFfcHJpbnRmKG0sICJNUFVfRU5BQkxFX0lSUSVkXHQ6IDB4JTA4eFxuIiwgMCwKKwkJCXJlYWRsKGJhc2UgKyBTU0lfTVBVX0VOQUJMRV9SRUcocG9ydC0+bnVtLCAwKSkpOworCXNlcV9wcmludGYobSwgIk1QVV9TVEFUVVNfSVJRJWRcdDogMHglMDh4XG4iLCAwLAorCQkJcmVhZGwoYmFzZSArIFNTSV9NUFVfU1RBVFVTX1JFRyhwb3J0LT5udW0sIDApKSk7CisJLyogU1NUICovCisJYmFzZSA9IG9tYXBfcG9ydC0+c3N0X2Jhc2U7CisJc2VxX3B1dHMobSwgIlxuU1NUXG49PT1cbiIpOworCXNlcV9wcmludGYobSwgIklEIFNTVFx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9JRF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJNT0RFXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NUX01PREVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiRlJBTUVTSVpFXHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9GUkFNRVNJWkVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiRElWSVNPUlx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9ESVZJU09SX1JFRykpOworCXNlcV9wcmludGYobSwgIkNIQU5ORUxTXHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9DSEFOTkVMU19SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJBUkJNT0RFXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NUX0FSQk1PREVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiVFhTVEFURVx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9UWFNUQVRFX1JFRykpOworCXNlcV9wcmludGYobSwgIkJVRlNUQVRFXHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9CVUZTVEFURV9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJCUkVBS1x0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTVF9CUkVBS19SRUcpKTsKKwlmb3IgKGNoID0gMDsgY2ggPCBvbWFwX3BvcnQtPmNoYW5uZWxzOyBjaCsrKSB7CisJCXNlcV9wcmludGYobSwgIkJVRkZFUl9DSCVkXHQ6IDB4JTA4eFxuIiwgY2gsCisJCQkJcmVhZGwoYmFzZSArIFNTSV9TU1RfQlVGRkVSX0NIX1JFRyhjaCkpKTsKKwl9CisJLyogU1NSICovCisJYmFzZSA9IG9tYXBfcG9ydC0+c3NyX2Jhc2U7CisJc2VxX3B1dHMobSwgIlxuU1NSXG49PT1cbiIpOworCXNlcV9wcmludGYobSwgIklEIFNTUlx0XHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTUl9JRF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJNT0RFXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NSX01PREVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiRlJBTUVTSVpFXHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTUl9GUkFNRVNJWkVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiQ0hBTk5FTFNcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NSX0NIQU5ORUxTX1JFRykpOworCXNlcV9wcmludGYobSwgIlRJTUVPVVRcdFx0OiAweCUwOHhcbiIsCisJCQkJcmVhZGwoYmFzZSArIFNTSV9TU1JfVElNRU9VVF9SRUcpKTsKKwlzZXFfcHJpbnRmKG0sICJSWFNUQVRFXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NSX1JYU1RBVEVfUkVHKSk7CisJc2VxX3ByaW50ZihtLCAiQlVGU1RBVEVcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NSX0JVRlNUQVRFX1JFRykpOworCXNlcV9wcmludGYobSwgIkJSRUFLXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NSX0JSRUFLX1JFRykpOworCXNlcV9wcmludGYobSwgIkVSUk9SXHRcdDogMHglMDh4XG4iLAorCQkJCXJlYWRsKGJhc2UgKyBTU0lfU1NSX0VSUk9SX1JFRykpOworCXNlcV9wcmludGYobSwgIkVSUk9SQUNLXHQ6IDB4JTA4eFxuIiwKKwkJCQlyZWFkbChiYXNlICsgU1NJX1NTUl9FUlJPUkFDS19SRUcpKTsKKwlmb3IgKGNoID0gMDsgY2ggPCBvbWFwX3BvcnQtPmNoYW5uZWxzOyBjaCsrKSB7CisJCXNlcV9wcmludGYobSwgIkJVRkZFUl9DSCVkXHQ6IDB4JTA4eFxuIiwgY2gsCisJCQkJcmVhZGwoYmFzZSArIFNTSV9TU1JfQlVGRkVSX0NIX1JFRyhjaCkpKTsKKwl9CisJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3NpX3BvcnRfcmVnc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzc2lfZGVidWdfcG9ydF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3NpX3BvcnRfcmVnc19mb3BzID0geworCS5vcGVuCQk9IHNzaV9wb3J0X3JlZ3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBzc2lfZGl2X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBkYXRhOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCSp2YWwgPSByZWFkbChvbWFwX3BvcnQtPnNzdF9iYXNlICsgU1NJX1NTVF9ESVZJU09SX1JFRyk7CisJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3NpX2Rpdl9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBkYXRhOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCisJaWYgKHZhbCA+IDEyNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJd3JpdGVsKHZhbCwgb21hcF9wb3J0LT5zc3RfYmFzZSArIFNTSV9TU1RfRElWSVNPUl9SRUcpOworCW9tYXBfcG9ydC0+c3N0LmRpdmlzb3IgPSB2YWw7CisJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHNzaV9zc3RfZGl2X2ZvcHMsIHNzaV9kaXZfZ2V0LCBzc2lfZGl2X3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IF9faW5pdCBzc2lfZGVidWdfYWRkX3BvcnQoc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCwKKwkJCQkgICAgIHN0cnVjdCBkZW50cnkgKmRpcikKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSB0b19oc2lfcG9ydChvbWFwX3BvcnQtPmRldik7CisKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUob21hcF9wb3J0LT5kZXYpLCBkaXIpOworCWlmIChJU19FUlIoZGlyKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGlyKTsKKwlvbWFwX3BvcnQtPmRpciA9IGRpcjsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdzIiwgU19JUlVHTywgZGlyLCBwb3J0LCAmc3NpX3BvcnRfcmVnc19mb3BzKTsKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNzdCIsIGRpcik7CisJaWYgKElTX0VSUihkaXIpKQorCQlyZXR1cm4gUFRSX0VSUihkaXIpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRpdmlzb3IiLCBTX0lSVUdPIHwgU19JV1VTUiwgZGlyLCBwb3J0LAorCQkJICAgICZzc2lfc3N0X2Rpdl9mb3BzKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc3NpX2NsYWltX2xjaChzdHJ1Y3QgaHNpX21zZyAqbXNnKQoreworCisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gaHNpX2dldF9wb3J0KG1zZy0+Y2wpOworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gdG9faHNpX2NvbnRyb2xsZXIocG9ydC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCWludCBsY2g7CisKKwlmb3IgKGxjaCA9IDA7IGxjaCA8IFNTSV9NQVhfR0REX0xDSDsgbGNoKyspCisJCWlmICghb21hcF9zc2ktPmdkZF90cm5bbGNoXS5tc2cpIHsKKwkJCW9tYXBfc3NpLT5nZGRfdHJuW2xjaF0ubXNnID0gbXNnOworCQkJb21hcF9zc2ktPmdkZF90cm5bbGNoXS5zZyA9IG1zZy0+c2d0LnNnbDsKKwkJCXJldHVybiBsY2g7CisJCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgc3NpX3N0YXJ0X2RtYShzdHJ1Y3QgaHNpX21zZyAqbXNnLCBpbnQgbGNoKQoreworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IGhzaV9nZXRfcG9ydChtc2ctPmNsKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwl2b2lkIF9faW9tZW0gKmdkZCA9IG9tYXBfc3NpLT5nZGQ7CisJaW50IGVycjsKKwl1MTYgY3NkcDsKKwl1MTYgY2NyOworCXUzMiBzX2FkZHI7CisJdTMyIGRfYWRkcjsKKwl1MzIgdG1wOworCisJaWYgKG1zZy0+dHR5cGUgPT0gSFNJX01TR19SRUFEKSB7CisJCWVyciA9IGRtYV9tYXBfc2coJnNzaS0+ZGV2aWNlLCBtc2ctPnNndC5zZ2wsIG1zZy0+c2d0Lm5lbnRzLAorCQkJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZGJnKCZzc2ktPmRldmljZSwgIkRNQSBtYXAgU0cgZmFpbGVkICFcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQljc2RwID0gU1NJX0RTVF9CVVJTVF80eDMyX0JJVCB8IFNTSV9EU1RfTUVNT1JZX1BPUlQgfAorCQkJU1NJX1NSQ19TSU5HTEVfQUNDRVNTMCB8IFNTSV9TUkNfUEVSSVBIRVJBTF9QT1JUIHwKKwkJCVNTSV9EQVRBX1RZUEVfUzMyOworCQljY3IgPSBtc2ctPmNoYW5uZWwgKyAweDEwICsgKHBvcnQtPm51bSAqIDgpOyAvKiBTeW5jICovCisJCWNjciB8PSBTU0lfRFNUX0FNT0RFX1BPU1RJTkMgfCBTU0lfU1JDX0FNT0RFX0NPTlNUIHwKKwkJCVNTSV9DQ1JfRU5BQkxFOworCQlzX2FkZHIgPSBvbWFwX3BvcnQtPnNzcl9kbWEgKworCQkJCQlTU0lfU1NSX0JVRkZFUl9DSF9SRUcobXNnLT5jaGFubmVsKTsKKwkJZF9hZGRyID0gc2dfZG1hX2FkZHJlc3MobXNnLT5zZ3Quc2dsKTsKKwl9IGVsc2UgeworCQllcnIgPSBkbWFfbWFwX3NnKCZzc2ktPmRldmljZSwgbXNnLT5zZ3Quc2dsLCBtc2ctPnNndC5uZW50cywKKwkJCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9kYmcoJnNzaS0+ZGV2aWNlLCAiRE1BIG1hcCBTRyBmYWlsZWQgIVxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWNzZHAgPSBTU0lfU1JDX0JVUlNUXzR4MzJfQklUIHwgU1NJX1NSQ19NRU1PUllfUE9SVCB8CisJCQlTU0lfRFNUX1NJTkdMRV9BQ0NFU1MwIHwgU1NJX0RTVF9QRVJJUEhFUkFMX1BPUlQgfAorCQkJU1NJX0RBVEFfVFlQRV9TMzI7CisJCWNjciA9IChtc2ctPmNoYW5uZWwgKyAxICsgKHBvcnQtPm51bSAqIDgpKSAmIDB4ZjsgLyogU3luYyAqLworCQljY3IgfD0gU1NJX1NSQ19BTU9ERV9QT1NUSU5DIHwgU1NJX0RTVF9BTU9ERV9DT05TVCB8CisJCQlTU0lfQ0NSX0VOQUJMRTsKKwkJc19hZGRyID0gc2dfZG1hX2FkZHJlc3MobXNnLT5zZ3Quc2dsKTsKKwkJZF9hZGRyID0gb21hcF9wb3J0LT5zc3RfZG1hICsKKwkJCQkJU1NJX1NTVF9CVUZGRVJfQ0hfUkVHKG1zZy0+Y2hhbm5lbCk7CisJfQorCWRldl9kYmcoJnNzaS0+ZGV2aWNlLCAibGNoICVkIGNkc3AgJTA4eCBjY3IgJTA0eCBzX2FkZHIgJTA4eCBkX2FkZHIgJTA4eFxuIiwKKwkJbGNoLCBjc2RwLCBjY3IsIHNfYWRkciwgZF9hZGRyKTsKKworCS8qIEhvbGQgY2xvY2tzIGR1cmluZyB0aGUgdHJhbnNmZXIgKi8KKwlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisKKwl3cml0ZXdfcmVsYXhlZChjc2RwLCBnZGQgKyBTU0lfR0REX0NTRFBfUkVHKGxjaCkpOworCXdyaXRld19yZWxheGVkKFNTSV9CTE9DS19JRSB8IFNTSV9UT1VUX0lFLCBnZGQgKyBTU0lfR0REX0NJQ1JfUkVHKGxjaCkpOworCXdyaXRlbF9yZWxheGVkKGRfYWRkciwgZ2RkICsgU1NJX0dERF9DRFNBX1JFRyhsY2gpKTsKKwl3cml0ZWxfcmVsYXhlZChzX2FkZHIsIGdkZCArIFNTSV9HRERfQ1NTQV9SRUcobGNoKSk7CisJd3JpdGV3X3JlbGF4ZWQoU1NJX0JZVEVTX1RPX0ZSQU1FUyhtc2ctPnNndC5zZ2wtPmxlbmd0aCksCisJCQkJCQlnZGQgKyBTU0lfR0REX0NFTl9SRUcobGNoKSk7CisKKwlzcGluX2xvY2tfYmgoJm9tYXBfc3NpLT5sb2NrKTsKKwl0bXAgPSByZWFkbChvbWFwX3NzaS0+c3lzICsgU1NJX0dERF9NUFVfSVJRX0VOQUJMRV9SRUcpOworCXRtcCB8PSBTU0lfR0REX0xDSChsY2gpOworCXdyaXRlbF9yZWxheGVkKHRtcCwgb21hcF9zc2ktPnN5cyArIFNTSV9HRERfTVBVX0lSUV9FTkFCTEVfUkVHKTsKKwlzcGluX3VubG9ja19iaCgmb21hcF9zc2ktPmxvY2spOworCXdyaXRldyhjY3IsIGdkZCArIFNTSV9HRERfQ0NSX1JFRyhsY2gpKTsKKwltc2ctPnN0YXR1cyA9IEhTSV9TVEFUVVNfUFJPQ0VFRElORzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzaV9zdGFydF9waW8oc3RydWN0IGhzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBoc2lfZ2V0X3BvcnQobXNnLT5jbCk7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisJdTMyIHZhbDsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwlpZiAobXNnLT50dHlwZSA9PSBIU0lfTVNHX1dSSVRFKSB7CisJCXZhbCA9IFNTSV9EQVRBQUNDRVBUKG1zZy0+Y2hhbm5lbCk7CisJCS8qIEhvbGQgY2xvY2tzIGZvciBwaW8gd3JpdGVzICovCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwl9IGVsc2UgeworCQl2YWwgPSBTU0lfREFUQUFWQUlMQUJMRShtc2ctPmNoYW5uZWwpIHwgU1NJX0VSUk9ST0NDVVJFRDsKKwl9CisJZGV2X2RiZygmcG9ydC0+ZGV2aWNlLCAiU2luZ2xlICVzIHRyYW5zZmVyXG4iLAorCQkJCQkJbXNnLT50dHlwZSA/ICJ3cml0ZSIgOiAicmVhZCIpOworCXZhbCB8PSByZWFkbChvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCXdyaXRlbCh2YWwsIG9tYXBfc3NpLT5zeXMgKyBTU0lfTVBVX0VOQUJMRV9SRUcocG9ydC0+bnVtLCAwKSk7CisJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCW1zZy0+YWN0dWFsX2xlbiA9IDA7CisJbXNnLT5zdGF0dXMgPSBIU0lfU1RBVFVTX1BST0NFRURJTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lfc3RhcnRfdHJhbnNmZXIoc3RydWN0IGxpc3RfaGVhZCAqcXVldWUpCit7CisJc3RydWN0IGhzaV9tc2cgKm1zZzsKKwlpbnQgbGNoID0gLTE7CisKKwlpZiAobGlzdF9lbXB0eShxdWV1ZSkpCisJCXJldHVybiAwOworCW1zZyA9IGxpc3RfZmlyc3RfZW50cnkocXVldWUsIHN0cnVjdCBoc2lfbXNnLCBsaW5rKTsKKwlpZiAobXNnLT5zdGF0dXMgIT0gSFNJX1NUQVRVU19RVUVVRUQpCisJCXJldHVybiAwOworCWlmICgobXNnLT5zZ3QubmVudHMpICYmIChtc2ctPnNndC5zZ2wtPmxlbmd0aCA+IHNpemVvZih1MzIpKSkKKwkJbGNoID0gc3NpX2NsYWltX2xjaChtc2cpOworCWlmIChsY2ggPj0gMCkKKwkJcmV0dXJuIHNzaV9zdGFydF9kbWEobXNnLCBsY2gpOworCWVsc2UKKwkJcmV0dXJuIHNzaV9zdGFydF9waW8obXNnKTsKK30KKworc3RhdGljIGludCBzc2lfYXN5bmNfYnJlYWsoc3RydWN0IGhzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBoc2lfZ2V0X3BvcnQobXNnLT5jbCk7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisJaW50IGVyciA9IDA7CisJdTMyIHRtcDsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwlpZiAobXNnLT50dHlwZSA9PSBIU0lfTVNHX1dSSVRFKSB7CisJCWlmIChvbWFwX3BvcnQtPnNzdC5tb2RlICE9IFNTSV9NT0RFX0ZSQU1FKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJd3JpdGVsKDEsIG9tYXBfcG9ydC0+c3N0X2Jhc2UgKyBTU0lfU1NUX0JSRUFLX1JFRyk7CisJCW1zZy0+c3RhdHVzID0gSFNJX1NUQVRVU19DT01QTEVURUQ7CisJCW1zZy0+Y29tcGxldGUobXNnKTsKKwl9IGVsc2UgeworCQlpZiAob21hcF9wb3J0LT5zc3IubW9kZSAhPSBTU0lfTU9ERV9GUkFNRSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNwaW5fbG9ja19iaCgmb21hcF9wb3J0LT5sb2NrKTsKKwkJdG1wID0gcmVhZGwob21hcF9zc2ktPnN5cyArCisJCQkJCVNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwkJd3JpdGVsKHRtcCB8IFNTSV9CUkVBS0RFVEVDVEVELAorCQkJb21hcF9zc2ktPnN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwkJbXNnLT5zdGF0dXMgPSBIU0lfU1RBVFVTX1BST0NFRURJTkc7CisJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJm9tYXBfcG9ydC0+YnJrcXVldWUpOworCQlzcGluX3VubG9ja19iaCgmb21hcF9wb3J0LT5sb2NrKTsKKwl9CitvdXQ6CisJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzc2lfYXN5bmMoc3RydWN0IGhzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBoc2lfZ2V0X3BvcnQobXNnLT5jbCk7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcXVldWU7CisJaW50IGVyciA9IDA7CisKKwlCVUdfT04oIW1zZyk7CisKKwlpZiAobXNnLT5zZ3QubmVudHMgPiAxKQorCQlyZXR1cm4gLUVOT1NZUzsgLyogVE9ETzogQWRkIHNnIHN1cHBvcnQgKi8KKworCWlmIChtc2ctPmJyZWFrX2ZyYW1lKQorCQlyZXR1cm4gc3NpX2FzeW5jX2JyZWFrKG1zZyk7CisKKwlpZiAobXNnLT50dHlwZSkgeworCQlCVUdfT04obXNnLT5jaGFubmVsID49IG9tYXBfcG9ydC0+c3N0LmNoYW5uZWxzKTsKKwkJcXVldWUgPSAmb21hcF9wb3J0LT50eHF1ZXVlW21zZy0+Y2hhbm5lbF07CisJfSBlbHNlIHsKKwkJQlVHX09OKG1zZy0+Y2hhbm5lbCA+PSBvbWFwX3BvcnQtPnNzci5jaGFubmVscyk7CisJCXF1ZXVlID0gJm9tYXBfcG9ydC0+cnhxdWV1ZVttc2ctPmNoYW5uZWxdOworCX0KKwltc2ctPnN0YXR1cyA9IEhTSV9TVEFUVVNfUVVFVUVEOworCXNwaW5fbG9ja19iaCgmb21hcF9wb3J0LT5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtc2ctPmxpbmssIHF1ZXVlKTsKKwllcnIgPSBzc2lfc3RhcnRfdHJhbnNmZXIocXVldWUpOworCWlmIChlcnIgPCAwKSB7CisJCWxpc3RfZGVsKCZtc2ctPmxpbmspOworCQltc2ctPnN0YXR1cyA9IEhTSV9TVEFUVVNfRVJST1I7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZvbWFwX3BvcnQtPmxvY2spOworCWRldl9kYmcoJnBvcnQtPmRldmljZSwgIm1zZyBzdGF0dXMgJWQgdHR5cGUgJWQgY2ggJWRcbiIsCisJCQkJbXNnLT5zdGF0dXMsIG1zZy0+dHR5cGUsIG1zZy0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTMyIHNzaV9jYWxjdWxhdGVfZGl2KHN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpKQoreworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwl1MzIgdHhfZmNrcmF0ZSA9ICh1MzIpIG9tYXBfc3NpLT5mY2tfcmF0ZTsKKworCS8qIC8gMiA6IFNTSSBUWCBjbG9jayBpcyBhbHdheXMgaGFsZiBvZiB0aGUgU1NJIGZ1bmN0aW9uYWwgY2xvY2sgKi8KKwl0eF9mY2tyYXRlID4+PSAxOworCS8qIFJvdW5kIGRvd24gd2hlbiB0eF9mY2tyYXRlICUgb21hcF9zc2ktPm1heF9zcGVlZCA9PSAwICovCisJdHhfZmNrcmF0ZS0tOworCWRldl9kYmcoJnNzaS0+ZGV2aWNlLCAiVFggZGl2ICVkIGZvciBmY2tfcmF0ZSAlbHUgS2h6IHNwZWVkICVkIEtiL3NcbiIsCisJCXR4X2Zja3JhdGUgLyBvbWFwX3NzaS0+bWF4X3NwZWVkLCBvbWFwX3NzaS0+ZmNrX3JhdGUsCisJCW9tYXBfc3NpLT5tYXhfc3BlZWQpOworCisJcmV0dXJuIHR4X2Zja3JhdGUgLyBvbWFwX3NzaS0+bWF4X3NwZWVkOworfQorCitzdGF0aWMgdm9pZCBzc2lfZmx1c2hfcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqcXVldWUsIHN0cnVjdCBoc2lfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqdG1wOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgdG1wLCBxdWV1ZSkgeworCQltc2cgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBoc2lfbXNnLCBsaW5rKTsKKwkJaWYgKChjbCkgJiYgKGNsICE9IG1zZy0+Y2wpKQorCQkJY29udGludWU7CisJCWxpc3RfZGVsKG5vZGUpOworCQlwcl9kZWJ1ZygiZmx1c2ggcXVldWU6IGNoICVkLCBtc2cgJXAgbGVuICVkIHR5cGUgJWQgY3R4dCAlcFxuIiwKKwkJCW1zZy0+Y2hhbm5lbCwgbXNnLCBtc2ctPnNndC5zZ2wtPmxlbmd0aCwKKwkJCQkJbXNnLT50dHlwZSwgbXNnLT5jb250ZXh0KTsKKwkJaWYgKG1zZy0+ZGVzdHJ1Y3RvcikKKwkJCW1zZy0+ZGVzdHJ1Y3Rvcihtc2cpOworCQllbHNlCisJCQloc2lfZnJlZV9tc2cobXNnKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3NpX3NldHVwKHN0cnVjdCBoc2lfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSB0b19oc2lfcG9ydChjbC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisJdm9pZCBfX2lvbWVtICpzc3QgPSBvbWFwX3BvcnQtPnNzdF9iYXNlOworCXZvaWQgX19pb21lbSAqc3NyID0gb21hcF9wb3J0LT5zc3JfYmFzZTsKKwl1MzIgZGl2OworCXUzMiB2YWw7CisJaW50IGVyciA9IDA7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJc3Bpbl9sb2NrX2JoKCZvbWFwX3BvcnQtPmxvY2spOworCWlmIChjbC0+dHhfY2ZnLnNwZWVkKQorCQlvbWFwX3NzaS0+bWF4X3NwZWVkID0gY2wtPnR4X2NmZy5zcGVlZDsKKwlkaXYgPSBzc2lfY2FsY3VsYXRlX2Rpdihzc2kpOworCWlmIChkaXYgPiBTU0lfTUFYX0RJVklTT1IpIHsKKwkJZGV2X2VycigmY2wtPmRldmljZSwgIkludmFsaWQgVFggc3BlZWQgJWQgTWIvcyAoZGl2ICVkKVxuIiwKKwkJCQkJCWNsLT50eF9jZmcuc3BlZWQsIGRpdik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwkvKiBTZXQgVFgvUlggbW9kdWxlIHRvIHNsZWVwIHRvIHN0b3AgVFgvUlggZHVyaW5nIGNmZyB1cGRhdGUgKi8KKwl3cml0ZWxfcmVsYXhlZChTU0lfTU9ERV9TTEVFUCwgc3N0ICsgU1NJX1NTVF9NT0RFX1JFRyk7CisJd3JpdGVsX3JlbGF4ZWQoU1NJX01PREVfU0xFRVAsIHNzciArIFNTSV9TU1JfTU9ERV9SRUcpOworCS8qIEZsdXNoIHBvc3RlZCB3cml0ZSAqLworCXZhbCA9IHJlYWRsKHNzciArIFNTSV9TU1JfTU9ERV9SRUcpOworCS8qIFRYICovCisJd3JpdGVsX3JlbGF4ZWQoMzEsIHNzdCArIFNTSV9TU1RfRlJBTUVTSVpFX1JFRyk7CisJd3JpdGVsX3JlbGF4ZWQoZGl2LCBzc3QgKyBTU0lfU1NUX0RJVklTT1JfUkVHKTsKKwl3cml0ZWxfcmVsYXhlZChjbC0+dHhfY2ZnLm51bV9od19jaGFubmVscywgc3N0ICsgU1NJX1NTVF9DSEFOTkVMU19SRUcpOworCXdyaXRlbF9yZWxheGVkKGNsLT50eF9jZmcuYXJiX21vZGUsIHNzdCArIFNTSV9TU1RfQVJCTU9ERV9SRUcpOworCXdyaXRlbF9yZWxheGVkKGNsLT50eF9jZmcubW9kZSwgc3N0ICsgU1NJX1NTVF9NT0RFX1JFRyk7CisJLyogUlggKi8KKwl3cml0ZWxfcmVsYXhlZCgzMSwgc3NyICsgU1NJX1NTUl9GUkFNRVNJWkVfUkVHKTsKKwl3cml0ZWxfcmVsYXhlZChjbC0+cnhfY2ZnLm51bV9od19jaGFubmVscywgc3NyICsgU1NJX1NTUl9DSEFOTkVMU19SRUcpOworCXdyaXRlbF9yZWxheGVkKDAsIHNzciArIFNTSV9TU1JfVElNRU9VVF9SRUcpOworCS8qIENsZWFudXAgdGhlIGJyZWFrIHF1ZXVlIGlmIHdlIGxlYXZlIEZSQU1FIG1vZGUgKi8KKwlpZiAoKG9tYXBfcG9ydC0+c3NyLm1vZGUgPT0gU1NJX01PREVfRlJBTUUpICYmCisJCShjbC0+cnhfY2ZnLm1vZGUgIT0gU1NJX01PREVfRlJBTUUpKQorCQlzc2lfZmx1c2hfcXVldWUoJm9tYXBfcG9ydC0+YnJrcXVldWUsIGNsKTsKKwl3cml0ZWxfcmVsYXhlZChjbC0+cnhfY2ZnLm1vZGUsIHNzciArIFNTSV9TU1JfTU9ERV9SRUcpOworCW9tYXBfcG9ydC0+Y2hhbm5lbHMgPSBtYXgoY2wtPnJ4X2NmZy5udW1faHdfY2hhbm5lbHMsCisJCQkJICBjbC0+dHhfY2ZnLm51bV9od19jaGFubmVscyk7CisJLyogU2hhZG93IHJlZ2lzdGVyaW5nIGZvciBPRkYgbW9kZSAqLworCS8qIFNTVCAqLworCW9tYXBfcG9ydC0+c3N0LmRpdmlzb3IgPSBkaXY7CisJb21hcF9wb3J0LT5zc3QuZnJhbWVfc2l6ZSA9IDMxOworCW9tYXBfcG9ydC0+c3N0LmNoYW5uZWxzID0gY2wtPnR4X2NmZy5udW1faHdfY2hhbm5lbHM7CisJb21hcF9wb3J0LT5zc3QuYXJiX21vZGUgPSBjbC0+dHhfY2ZnLmFyYl9tb2RlOworCW9tYXBfcG9ydC0+c3N0Lm1vZGUgPSBjbC0+dHhfY2ZnLm1vZGU7CisJLyogU1NSICovCisJb21hcF9wb3J0LT5zc3IuZnJhbWVfc2l6ZSA9IDMxOworCW9tYXBfcG9ydC0+c3NyLnRpbWVvdXQgPSAwOworCW9tYXBfcG9ydC0+c3NyLmNoYW5uZWxzID0gY2wtPnJ4X2NmZy5udW1faHdfY2hhbm5lbHM7CisJb21hcF9wb3J0LT5zc3IubW9kZSA9IGNsLT5yeF9jZmcubW9kZTsKK291dDoKKwlzcGluX3VubG9ja19iaCgmb21hcF9wb3J0LT5sb2NrKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNzaV9mbHVzaChzdHJ1Y3QgaHNpX2NsaWVudCAqY2wpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gaHNpX2dldF9wb3J0KGNsKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwlzdHJ1Y3QgaHNpX21zZyAqbXNnOworCXZvaWQgX19pb21lbSAqc3N0ID0gb21hcF9wb3J0LT5zc3RfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnNzciA9IG9tYXBfcG9ydC0+c3NyX2Jhc2U7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGVycjsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwlzcGluX2xvY2tfYmgoJm9tYXBfcG9ydC0+bG9jayk7CisJLyogU3RvcCBhbGwgRE1BIHRyYW5zZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBTU0lfTUFYX0dERF9MQ0g7IGkrKykgeworCQltc2cgPSBvbWFwX3NzaS0+Z2RkX3RybltpXS5tc2c7CisJCWlmICghbXNnIHx8IChwb3J0ICE9IGhzaV9nZXRfcG9ydChtc2ctPmNsKSkpCisJCQljb250aW51ZTsKKwkJd3JpdGV3X3JlbGF4ZWQoMCwgb21hcF9zc2ktPmdkZCArIFNTSV9HRERfQ0NSX1JFRyhpKSk7CisJCWlmIChtc2ctPnR0eXBlID09IEhTSV9NU0dfUkVBRCkKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwkJb21hcF9zc2ktPmdkZF90cm5baV0ubXNnID0gTlVMTDsKKwl9CisJLyogRmx1c2ggYWxsIFNTVCBidWZmZXJzICovCisJd3JpdGVsX3JlbGF4ZWQoMCwgc3N0ICsgU1NJX1NTVF9CVUZTVEFURV9SRUcpOworCXdyaXRlbF9yZWxheGVkKDAsIHNzdCArIFNTSV9TU1RfVFhTVEFURV9SRUcpOworCS8qIEZsdXNoIGFsbCBTU1IgYnVmZmVycyAqLworCXdyaXRlbF9yZWxheGVkKDAsIHNzciArIFNTSV9TU1JfUlhTVEFURV9SRUcpOworCXdyaXRlbF9yZWxheGVkKDAsIHNzciArIFNTSV9TU1JfQlVGU1RBVEVfUkVHKTsKKwkvKiBGbHVzaCBhbGwgZXJyb3JzICovCisJZXJyID0gcmVhZGwoc3NyICsgU1NJX1NTUl9FUlJPUl9SRUcpOworCXdyaXRlbF9yZWxheGVkKGVyciwgc3NyICsgU1NJX1NTUl9FUlJPUkFDS19SRUcpOworCS8qIEZsdXNoIGJyZWFrICovCisJd3JpdGVsX3JlbGF4ZWQoMCwgc3NyICsgU1NJX1NTUl9CUkVBS19SRUcpOworCS8qIENsZWFyIGludGVycnVwdHMgKi8KKwl3cml0ZWxfcmVsYXhlZCgwLCBvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCXdyaXRlbF9yZWxheGVkKDB4ZmZmZmZmMDAsCisJCQlvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9TVEFUVVNfUkVHKHBvcnQtPm51bSwgMCkpOworCXdyaXRlbF9yZWxheGVkKDAsIG9tYXBfc3NpLT5zeXMgKyBTU0lfR0REX01QVV9JUlFfRU5BQkxFX1JFRyk7CisJd3JpdGVsKDB4ZmYsIG9tYXBfc3NpLT5zeXMgKyBTU0lfR0REX01QVV9JUlFfU1RBVFVTX1JFRyk7CisJLyogRGVxdWV1ZSBhbGwgcGVuZGluZyByZXF1ZXN0cyAqLworCWZvciAoaSA9IDA7IGkgPCBvbWFwX3BvcnQtPmNoYW5uZWxzOyBpKyspIHsKKwkJLyogUmVsZWFzZSB3cml0ZSBjbG9ja3MgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZvbWFwX3BvcnQtPnR4cXVldWVbaV0pKQorCQkJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCQlzc2lfZmx1c2hfcXVldWUoJm9tYXBfcG9ydC0+dHhxdWV1ZVtpXSwgTlVMTCk7CisJCXNzaV9mbHVzaF9xdWV1ZSgmb21hcF9wb3J0LT5yeHF1ZXVlW2ldLCBOVUxMKTsKKwl9CisJc3NpX2ZsdXNoX3F1ZXVlKCZvbWFwX3BvcnQtPmJya3F1ZXVlLCBOVUxMKTsKKwlzcGluX3VubG9ja19iaCgmb21hcF9wb3J0LT5sb2NrKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lfc3RhcnRfdHgoc3RydWN0IGhzaV9jbGllbnQgKmNsKQoreworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IGhzaV9nZXRfcG9ydChjbCk7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisKKwlkZXZfZGJnKCZwb3J0LT5kZXZpY2UsICJXYWtlIG91dCBoaWdoICVkXG4iLCBvbWFwX3BvcnQtPndrX3JlZmNvdW50KTsKKworCXNwaW5fbG9ja19iaCgmb21hcF9wb3J0LT53a19sb2NrKTsKKwlpZiAob21hcF9wb3J0LT53a19yZWZjb3VudCsrKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZvbWFwX3BvcnQtPndrX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisJcG1fcnVudGltZV9nZXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOyAvKiBHcmFiIGNsb2NrcyAqLworCXdyaXRlbChTU0lfV0FLRSgwKSwgb21hcF9zc2ktPnN5cyArIFNTSV9TRVRfV0FLRV9SRUcocG9ydC0+bnVtKSk7CisJc3Bpbl91bmxvY2tfYmgoJm9tYXBfcG9ydC0+d2tfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lfc3RvcF90eChzdHJ1Y3QgaHNpX2NsaWVudCAqY2wpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gaHNpX2dldF9wb3J0KGNsKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKworCWRldl9kYmcoJnBvcnQtPmRldmljZSwgIldha2Ugb3V0IGxvdyAlZFxuIiwgb21hcF9wb3J0LT53a19yZWZjb3VudCk7CisKKwlzcGluX2xvY2tfYmgoJm9tYXBfcG9ydC0+d2tfbG9jayk7CisJQlVHX09OKCFvbWFwX3BvcnQtPndrX3JlZmNvdW50KTsKKwlpZiAoLS1vbWFwX3BvcnQtPndrX3JlZmNvdW50KSB7CisJCXNwaW5fdW5sb2NrX2JoKCZvbWFwX3BvcnQtPndrX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisJd3JpdGVsKFNTSV9XQUtFKDApLCBvbWFwX3NzaS0+c3lzICsgU1NJX0NMRUFSX1dBS0VfUkVHKHBvcnQtPm51bSkpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsgLyogUmVsZWFzZSBjbG9ja3MgKi8KKwlzcGluX3VubG9ja19iaCgmb21hcF9wb3J0LT53a19sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzc2lfdHJhbnNmZXIoc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCwKKwkJCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgaHNpX21zZyAqbXNnOworCWludCBlcnIgPSAtMTsKKworCXNwaW5fbG9ja19iaCgmb21hcF9wb3J0LT5sb2NrKTsKKwl3aGlsZSAoZXJyIDwgMCkgeworCQllcnIgPSBzc2lfc3RhcnRfdHJhbnNmZXIocXVldWUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJbXNnID0gbGlzdF9maXJzdF9lbnRyeShxdWV1ZSwgc3RydWN0IGhzaV9tc2csIGxpbmspOworCQkJbXNnLT5zdGF0dXMgPSBIU0lfU1RBVFVTX0VSUk9SOworCQkJbXNnLT5hY3R1YWxfbGVuID0gMDsKKwkJCWxpc3RfZGVsKCZtc2ctPmxpbmspOworCQkJc3Bpbl91bmxvY2tfYmgoJm9tYXBfcG9ydC0+bG9jayk7CisJCQltc2ctPmNvbXBsZXRlKG1zZyk7CisJCQlzcGluX2xvY2tfYmgoJm9tYXBfcG9ydC0+bG9jayk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJm9tYXBfcG9ydC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHNzaV9jbGVhbnVwX3F1ZXVlcyhzdHJ1Y3QgaHNpX2NsaWVudCAqY2wpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gaHNpX2dldF9wb3J0KGNsKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwlzdHJ1Y3QgaHNpX21zZyAqbXNnOworCXVuc2lnbmVkIGludCBpOworCXUzMiByeGJ1ZnN0YXRlID0gMDsKKwl1MzIgdHhidWZzdGF0ZSA9IDA7CisJdTMyIHN0YXR1cyA9IFNTSV9FUlJPUk9DQ1VSRUQ7CisJdTMyIHRtcDsKKworCXNzaV9mbHVzaF9xdWV1ZSgmb21hcF9wb3J0LT5icmtxdWV1ZSwgY2wpOworCWlmIChsaXN0X2VtcHR5KCZvbWFwX3BvcnQtPmJya3F1ZXVlKSkKKwkJc3RhdHVzIHw9IFNTSV9CUkVBS0RFVEVDVEVEOworCisJZm9yIChpID0gMDsgaSA8IG9tYXBfcG9ydC0+Y2hhbm5lbHM7IGkrKykgeworCQlpZiAobGlzdF9lbXB0eSgmb21hcF9wb3J0LT50eHF1ZXVlW2ldKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSBsaXN0X2ZpcnN0X2VudHJ5KCZvbWFwX3BvcnQtPnR4cXVldWVbaV0sIHN0cnVjdCBoc2lfbXNnLAorCQkJCQkJCQkJbGluayk7CisJCWlmICgobXNnLT5jbCA9PSBjbCkgJiYgKG1zZy0+c3RhdHVzID09IEhTSV9TVEFUVVNfUFJPQ0VFRElORykpIHsKKwkJCXR4YnVmc3RhdGUgfD0gKDEgPDwgaSk7CisJCQlzdGF0dXMgfD0gU1NJX0RBVEFBQ0NFUFQoaSk7CisJCQkvKiBSZWxlYXNlIHRoZSBjbG9ja3Mgd3JpdGVzLCBhbHNvIEdERCBvbmVzICovCisJCQlwbV9ydW50aW1lX3B1dF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJCX0KKwkJc3NpX2ZsdXNoX3F1ZXVlKCZvbWFwX3BvcnQtPnR4cXVldWVbaV0sIGNsKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG9tYXBfcG9ydC0+Y2hhbm5lbHM7IGkrKykgeworCQlpZiAobGlzdF9lbXB0eSgmb21hcF9wb3J0LT5yeHF1ZXVlW2ldKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSBsaXN0X2ZpcnN0X2VudHJ5KCZvbWFwX3BvcnQtPnJ4cXVldWVbaV0sIHN0cnVjdCBoc2lfbXNnLAorCQkJCQkJCQkJbGluayk7CisJCWlmICgobXNnLT5jbCA9PSBjbCkgJiYgKG1zZy0+c3RhdHVzID09IEhTSV9TVEFUVVNfUFJPQ0VFRElORykpIHsKKwkJCXJ4YnVmc3RhdGUgfD0gKDEgPDwgaSk7CisJCQlzdGF0dXMgfD0gU1NJX0RBVEFBVkFJTEFCTEUoaSk7CisJCX0KKwkJc3NpX2ZsdXNoX3F1ZXVlKCZvbWFwX3BvcnQtPnJ4cXVldWVbaV0sIGNsKTsKKwkJLyogQ2hlY2sgaWYgd2Uga2VlcCB0aGUgZXJyb3IgZGV0ZWN0aW9uIGludGVycnVwdCBhcm1lZCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJm9tYXBfcG9ydC0+cnhxdWV1ZVtpXSkpCisJCQlzdGF0dXMgJj0gflNTSV9FUlJPUk9DQ1VSRUQ7CisJfQorCS8qIENsZWFudXAgd3JpdGUgYnVmZmVycyAqLworCXRtcCA9IHJlYWRsKG9tYXBfcG9ydC0+c3N0X2Jhc2UgKyBTU0lfU1NUX0JVRlNUQVRFX1JFRyk7CisJdG1wICY9IH50eGJ1ZnN0YXRlOworCXdyaXRlbF9yZWxheGVkKHRtcCwgb21hcF9wb3J0LT5zc3RfYmFzZSArIFNTSV9TU1RfQlVGU1RBVEVfUkVHKTsKKwkvKiBDbGVhbnVwIHJlYWQgYnVmZmVycyAqLworCXRtcCA9IHJlYWRsKG9tYXBfcG9ydC0+c3NyX2Jhc2UgKyBTU0lfU1NSX0JVRlNUQVRFX1JFRyk7CisJdG1wICY9IH5yeGJ1ZnN0YXRlOworCXdyaXRlbF9yZWxheGVkKHRtcCwgb21hcF9wb3J0LT5zc3JfYmFzZSArIFNTSV9TU1JfQlVGU1RBVEVfUkVHKTsKKwkvKiBEaXNhcm0gYW5kIGFjayBwZW5kaW5nIGludGVycnVwdHMgKi8KKwl0bXAgPSByZWFkbChvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCXRtcCAmPSB+c3RhdHVzOworCXdyaXRlbF9yZWxheGVkKHRtcCwgb21hcF9zc2ktPnN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwl3cml0ZWxfcmVsYXhlZChzdGF0dXMsIG9tYXBfc3NpLT5zeXMgKworCQlTU0lfTVBVX1NUQVRVU19SRUcocG9ydC0+bnVtLCAwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNzaV9jbGVhbnVwX2dkZChzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSwgc3RydWN0IGhzaV9jbGllbnQgKmNsKQoreworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBoc2lfZ2V0X3BvcnQoY2wpOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHZhbCA9IDA7CisJdTMyIHRtcDsKKworCWZvciAoaSA9IDA7IGkgPCBTU0lfTUFYX0dERF9MQ0g7IGkrKykgeworCQltc2cgPSBvbWFwX3NzaS0+Z2RkX3RybltpXS5tc2c7CisJCWlmICgoIW1zZykgfHwgKG1zZy0+Y2wgIT0gY2wpKQorCQkJY29udGludWU7CisJCXdyaXRld19yZWxheGVkKDAsIG9tYXBfc3NpLT5nZGQgKyBTU0lfR0REX0NDUl9SRUcoaSkpOworCQl2YWwgfD0gKDEgPDwgaSk7CisJCS8qCisJCSAqIENsb2NrIHJlZmVyZW5jZXMgZm9yIHdyaXRlIHdpbGwgYmUgaGFuZGxlZCBpbgorCQkgKiBzc2lfY2xlYW51cF9xdWV1ZXMKKwkJICovCisJCWlmIChtc2ctPnR0eXBlID09IEhTSV9NU0dfUkVBRCkKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwkJb21hcF9zc2ktPmdkZF90cm5baV0ubXNnID0gTlVMTDsKKwl9CisJdG1wID0gcmVhZGxfcmVsYXhlZChvbWFwX3NzaS0+c3lzICsgU1NJX0dERF9NUFVfSVJRX0VOQUJMRV9SRUcpOworCXRtcCAmPSB+dmFsOworCXdyaXRlbF9yZWxheGVkKHRtcCwgb21hcF9zc2ktPnN5cyArIFNTSV9HRERfTVBVX0lSUV9FTkFCTEVfUkVHKTsKKwl3cml0ZWwodmFsLCBvbWFwX3NzaS0+c3lzICsgU1NJX0dERF9NUFVfSVJRX1NUQVRVU19SRUcpOworfQorCitzdGF0aWMgaW50IHNzaV9zZXRfcG9ydF9tb2RlKHN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQsIHUzMiBtb2RlKQoreworCXdyaXRlbChtb2RlLCBvbWFwX3BvcnQtPnNzdF9iYXNlICsgU1NJX1NTVF9NT0RFX1JFRyk7CisJd3JpdGVsKG1vZGUsIG9tYXBfcG9ydC0+c3NyX2Jhc2UgKyBTU0lfU1NSX01PREVfUkVHKTsKKwkvKiBPQ1AgYmFycmllciAqLworCW1vZGUgPSByZWFkbChvbWFwX3BvcnQtPnNzcl9iYXNlICsgU1NJX1NTUl9NT0RFX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lfcmVsZWFzZShzdHJ1Y3QgaHNpX2NsaWVudCAqY2wpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gaHNpX2dldF9wb3J0KGNsKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCisJc3Bpbl9sb2NrX2JoKCZvbWFwX3BvcnQtPmxvY2spOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwkvKiBTdG9wIGFsbCB0aGUgcGVuZGluZyBETUEgcmVxdWVzdHMgZm9yIHRoYXQgY2xpZW50ICovCisJc3NpX2NsZWFudXBfZ2RkKHNzaSwgY2wpOworCS8qIE5vdyBjbGVhbnVwIGFsbCB0aGUgcXVldWVzICovCisJc3NpX2NsZWFudXBfcXVldWVzKGNsKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJLyogSWYgaXQgaXMgdGhlIGxhc3QgY2xpZW50IG9mIHRoZSBwb3J0LCBkbyBleHRyYSBjaGVja3MgYW5kIGNsZWFudXAgKi8KKwlpZiAocG9ydC0+Y2xhaW1lZCA8PSAxKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIGNsb2NrIHJlZmVyZW5jZSBmb3IgdGhlIGluY29taW5nIHdha2UgbGluZQorCQkgKiBpZiBpdCBpcyBzdGlsbCBrZXB0IGhpZ2ggYnkgdGhlIG90aGVyIHNpZGUuCisJCSAqLworCQlpZiAob21hcF9wb3J0LT53a2luX2NrZW4pIHsKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMob21hcF9wb3J0LT5wZGV2KTsKKwkJCW9tYXBfcG9ydC0+d2tpbl9ja2VuID0gMDsKKwkJfQorCQlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJCS8qIFN0b3AgYW55IFNTSSBUWC9SWCB3aXRob3V0IGEgY2xpZW50ICovCisJCXNzaV9zZXRfcG9ydF9tb2RlKG9tYXBfcG9ydCwgU1NJX01PREVfU0xFRVApOworCQlvbWFwX3BvcnQtPnNzdC5tb2RlID0gU1NJX01PREVfU0xFRVA7CisJCW9tYXBfcG9ydC0+c3NyLm1vZGUgPSBTU0lfTU9ERV9TTEVFUDsKKwkJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCQlXQVJOX09OKG9tYXBfcG9ydC0+d2tfcmVmY291bnQgIT0gMCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZvbWFwX3BvcnQtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCBzc2lfZXJyb3Ioc3RydWN0IGhzaV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gdG9faHNpX2NvbnRyb2xsZXIocG9ydC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGVycjsKKwl1MzIgdmFsOworCXUzMiB0bXA7CisKKwkvKiBBQ0sgZXJyb3IgKi8KKwllcnIgPSByZWFkbChvbWFwX3BvcnQtPnNzcl9iYXNlICsgU1NJX1NTUl9FUlJPUl9SRUcpOworCWRldl9lcnIoJnBvcnQtPmRldmljZSwgIlNTSSBlcnJvcjogMHglMDJ4XG4iLCBlcnIpOworCWlmICghZXJyKSB7CisJCWRldl9kYmcoJnBvcnQtPmRldmljZSwgInNwdXJpb3VzIFNTSSBlcnJvciBpZ25vcmVkIVxuIik7CisJCXJldHVybjsKKwl9CisJc3Bpbl9sb2NrKCZvbWFwX3NzaS0+bG9jayk7CisJLyogQ2FuY2VsIGFsbCBHREQgcmVhZCB0cmFuc2ZlcnMgKi8KKwlmb3IgKGkgPSAwLCB2YWwgPSAwOyBpIDwgU1NJX01BWF9HRERfTENIOyBpKyspIHsKKwkJbXNnID0gb21hcF9zc2ktPmdkZF90cm5baV0ubXNnOworCQlpZiAoKG1zZykgJiYgKG1zZy0+dHR5cGUgPT0gSFNJX01TR19SRUFEKSkgeworCQkJd3JpdGV3X3JlbGF4ZWQoMCwgb21hcF9zc2ktPmdkZCArIFNTSV9HRERfQ0NSX1JFRyhpKSk7CisJCQl2YWwgfD0gKDEgPDwgaSk7CisJCQlvbWFwX3NzaS0+Z2RkX3RybltpXS5tc2cgPSBOVUxMOworCQl9CisJfQorCXRtcCA9IHJlYWRsKG9tYXBfc3NpLT5zeXMgKyBTU0lfR0REX01QVV9JUlFfRU5BQkxFX1JFRyk7CisJdG1wICY9IH52YWw7CisJd3JpdGVsX3JlbGF4ZWQodG1wLCBvbWFwX3NzaS0+c3lzICsgU1NJX0dERF9NUFVfSVJRX0VOQUJMRV9SRUcpOworCXNwaW5fdW5sb2NrKCZvbWFwX3NzaS0+bG9jayk7CisJLyogQ2FuY2VsIGFsbCBQSU8gcmVhZCB0cmFuc2ZlcnMgKi8KKwlzcGluX2xvY2soJm9tYXBfcG9ydC0+bG9jayk7CisJdG1wID0gcmVhZGwob21hcF9zc2ktPnN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwl0bXAgJj0gMHhmZWZmMDBmZjsgLyogRGlzYWJsZSBlcnJvciAmIGFsbCBkYXRhYXZhaWxhYmxlIGludGVycnVwdHMgKi8KKwl3cml0ZWxfcmVsYXhlZCh0bXAsIG9tYXBfc3NpLT5zeXMgKyBTU0lfTVBVX0VOQUJMRV9SRUcocG9ydC0+bnVtLCAwKSk7CisJLyogQUNLIGVycm9yICovCisJd3JpdGVsX3JlbGF4ZWQoZXJyLCBvbWFwX3BvcnQtPnNzcl9iYXNlICsgU1NJX1NTUl9FUlJPUkFDS19SRUcpOworCXdyaXRlbF9yZWxheGVkKFNTSV9FUlJPUk9DQ1VSRUQsCisJCQlvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9TVEFUVVNfUkVHKHBvcnQtPm51bSwgMCkpOworCS8qIFNpZ25hbCB0aGUgZXJyb3IgYWxsIGN1cnJlbnQgcGVuZGluZyByZWFkIHJlcXVlc3RzICovCisJZm9yIChpID0gMDsgaSA8IG9tYXBfcG9ydC0+Y2hhbm5lbHM7IGkrKykgeworCQlpZiAobGlzdF9lbXB0eSgmb21hcF9wb3J0LT5yeHF1ZXVlW2ldKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSBsaXN0X2ZpcnN0X2VudHJ5KCZvbWFwX3BvcnQtPnJ4cXVldWVbaV0sIHN0cnVjdCBoc2lfbXNnLAorCQkJCQkJCQkJbGluayk7CisJCWxpc3RfZGVsKCZtc2ctPmxpbmspOworCQltc2ctPnN0YXR1cyA9IEhTSV9TVEFUVVNfRVJST1I7CisJCXNwaW5fdW5sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCQltc2ctPmNvbXBsZXRlKG1zZyk7CisJCS8qIE5vdyByZXN0YXJ0IHF1ZXVlZCByZWFkcyBpZiBhbnkgKi8KKwkJc3NpX3RyYW5zZmVyKG9tYXBfcG9ydCwgJm9tYXBfcG9ydC0+cnhxdWV1ZVtpXSk7CisJCXNwaW5fbG9jaygmb21hcF9wb3J0LT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJm9tYXBfcG9ydC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHNzaV9icmVha19jb21wbGV0ZShzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisJc3RydWN0IGhzaV9tc2cgKm1zZzsKKwlzdHJ1Y3QgaHNpX21zZyAqdG1wOworCXUzMiB2YWw7CisKKwlkZXZfZGJnKCZwb3J0LT5kZXZpY2UsICJIV0JSRUFLIHJlY2VpdmVkXG4iKTsKKworCXNwaW5fbG9jaygmb21hcF9wb3J0LT5sb2NrKTsKKwl2YWwgPSByZWFkbChvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCXZhbCAmPSB+U1NJX0JSRUFLREVURUNURUQ7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCXdyaXRlbF9yZWxheGVkKDAsIG9tYXBfcG9ydC0+c3NyX2Jhc2UgKyBTU0lfU1NSX0JSRUFLX1JFRyk7CisJd3JpdGVsKFNTSV9CUkVBS0RFVEVDVEVELAorCQkJb21hcF9zc2ktPnN5cyArIFNTSV9NUFVfU1RBVFVTX1JFRyhwb3J0LT5udW0sIDApKTsKKwlzcGluX3VubG9jaygmb21hcF9wb3J0LT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtc2csIHRtcCwgJm9tYXBfcG9ydC0+YnJrcXVldWUsIGxpbmspIHsKKwkJbXNnLT5zdGF0dXMgPSBIU0lfU1RBVFVTX0NPTVBMRVRFRDsKKwkJc3Bpbl9sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCQlsaXN0X2RlbCgmbXNnLT5saW5rKTsKKwkJc3Bpbl91bmxvY2soJm9tYXBfcG9ydC0+bG9jayk7CisJCW1zZy0+Y29tcGxldGUobXNnKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgc3NpX3Bpb19jb21wbGV0ZShzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQsIHN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVlKQoreworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gdG9faHNpX2NvbnRyb2xsZXIocG9ydC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCXN0cnVjdCBoc2lfbXNnICptc2c7CisJdTMyICpidWY7CisJdTMyIHJlZzsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCW1zZyA9IGxpc3RfZmlyc3RfZW50cnkocXVldWUsIHN0cnVjdCBoc2lfbXNnLCBsaW5rKTsKKwlpZiAoKCFtc2ctPnNndC5uZW50cykgfHwgKCFtc2ctPnNndC5zZ2wtPmxlbmd0aCkpIHsKKwkJbXNnLT5hY3R1YWxfbGVuID0gMDsKKwkJbXNnLT5zdGF0dXMgPSBIU0lfU1RBVFVTX1BFTkRJTkc7CisJfQorCWlmIChtc2ctPnR0eXBlID09IEhTSV9NU0dfV1JJVEUpCisJCXZhbCA9IFNTSV9EQVRBQUNDRVBUKG1zZy0+Y2hhbm5lbCk7CisJZWxzZQorCQl2YWwgPSBTU0lfREFUQUFWQUlMQUJMRShtc2ctPmNoYW5uZWwpOworCWlmIChtc2ctPnN0YXR1cyA9PSBIU0lfU1RBVFVTX1BST0NFRURJTkcpIHsKKwkJYnVmID0gc2dfdmlydChtc2ctPnNndC5zZ2wpICsgbXNnLT5hY3R1YWxfbGVuOworCQlpZiAobXNnLT50dHlwZSA9PSBIU0lfTVNHX1dSSVRFKQorCQkJd3JpdGVsKCpidWYsIG9tYXBfcG9ydC0+c3N0X2Jhc2UgKworCQkJCQlTU0lfU1NUX0JVRkZFUl9DSF9SRUcobXNnLT5jaGFubmVsKSk7CisJCSBlbHNlCisJCQkqYnVmID0gcmVhZGwob21hcF9wb3J0LT5zc3JfYmFzZSArCisJCQkJCVNTSV9TU1JfQlVGRkVSX0NIX1JFRyhtc2ctPmNoYW5uZWwpKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2aWNlLCAiY2ggJWQgdHR5cGUgJWQgMHglMDh4XG4iLCBtc2ctPmNoYW5uZWwsCisJCQkJCQkJbXNnLT50dHlwZSwgKmJ1Zik7CisJCW1zZy0+YWN0dWFsX2xlbiArPSBzaXplb2YoKmJ1Zik7CisJCWlmIChtc2ctPmFjdHVhbF9sZW4gPj0gbXNnLT5zZ3Quc2dsLT5sZW5ndGgpCisJCQltc2ctPnN0YXR1cyA9IEhTSV9TVEFUVVNfQ09NUExFVEVEOworCQkvKgorCQkgKiBXYWl0IGZvciB0aGUgbGFzdCB3cml0dGVuIGZyYW1lIHRvIGJlIHJlYWxseSBzZW50IGJlZm9yZQorCQkgKiB3ZSBjYWxsIHRoZSBjb21wbGV0ZSBjYWxsYmFjaworCQkgKi8KKwkJaWYgKChtc2ctPnN0YXR1cyA9PSBIU0lfU1RBVFVTX1BST0NFRURJTkcpIHx8CisJCQkJKChtc2ctPnN0YXR1cyA9PSBIU0lfU1RBVFVTX0NPTVBMRVRFRCkgJiYKKwkJCQkJKG1zZy0+dHR5cGUgPT0gSFNJX01TR19XUklURSkpKSB7CisJCQl3cml0ZWwodmFsLCBvbWFwX3NzaS0+c3lzICsKKwkJCQkJU1NJX01QVV9TVEFUVVNfUkVHKHBvcnQtPm51bSwgMCkpOworCQkJc3Bpbl91bmxvY2soJm9tYXBfcG9ydC0+bG9jayk7CisKKwkJCXJldHVybjsKKwkJfQorCisJfQorCS8qIFRyYW5zZmVyIGNvbXBsZXRlZCBhdCB0aGlzIHBvaW50ICovCisJcmVnID0gcmVhZGwob21hcF9zc2ktPnN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwlpZiAobXNnLT50dHlwZSA9PSBIU0lfTVNHX1dSSVRFKSB7CisJCS8qIFJlbGVhc2UgY2xvY2tzIGZvciB3cml0ZSB0cmFuc2ZlciAqLworCQlwbV9ydW50aW1lX3B1dF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJfQorCXJlZyAmPSB+dmFsOworCXdyaXRlbF9yZWxheGVkKHJlZywgb21hcF9zc2ktPnN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIG9tYXBfc3NpLT5zeXMgKyBTU0lfTVBVX1NUQVRVU19SRUcocG9ydC0+bnVtLCAwKSk7CisJbGlzdF9kZWwoJm1zZy0+bGluayk7CisJc3Bpbl91bmxvY2soJm9tYXBfcG9ydC0+bG9jayk7CisJbXNnLT5jb21wbGV0ZShtc2cpOworCXNzaV90cmFuc2ZlcihvbWFwX3BvcnQsIHF1ZXVlKTsKK30KKworc3RhdGljIHZvaWQgc3NpX3Bpb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgc3NpX3BvcnQpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gKHN0cnVjdCBoc2lfcG9ydCAqKXNzaV9wb3J0OworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gdG9faHNpX2NvbnRyb2xsZXIocG9ydC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXZvaWQgX19pb21lbSAqc3lzID0gb21hcF9zc2ktPnN5czsKKwl1bnNpZ25lZCBpbnQgY2g7CisJdTMyIHN0YXR1c19yZWc7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJc3RhdHVzX3JlZyA9IHJlYWRsKHN5cyArIFNTSV9NUFVfU1RBVFVTX1JFRyhwb3J0LT5udW0sIDApKTsKKwlzdGF0dXNfcmVnICY9IHJlYWRsKHN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKworCWZvciAoY2ggPSAwOyBjaCA8IG9tYXBfcG9ydC0+Y2hhbm5lbHM7IGNoKyspIHsKKwkJaWYgKHN0YXR1c19yZWcgJiBTU0lfREFUQUFDQ0VQVChjaCkpCisJCQlzc2lfcGlvX2NvbXBsZXRlKHBvcnQsICZvbWFwX3BvcnQtPnR4cXVldWVbY2hdKTsKKwkJaWYgKHN0YXR1c19yZWcgJiBTU0lfREFUQUFWQUlMQUJMRShjaCkpCisJCQlzc2lfcGlvX2NvbXBsZXRlKHBvcnQsICZvbWFwX3BvcnQtPnJ4cXVldWVbY2hdKTsKKwl9CisJaWYgKHN0YXR1c19yZWcgJiBTU0lfQlJFQUtERVRFQ1RFRCkKKwkJc3NpX2JyZWFrX2NvbXBsZXRlKHBvcnQpOworCWlmIChzdGF0dXNfcmVnICYgU1NJX0VSUk9ST0NDVVJFRCkKKwkJc3NpX2Vycm9yKHBvcnQpOworCisJc3RhdHVzX3JlZyA9IHJlYWRsKHN5cyArIFNTSV9NUFVfU1RBVFVTX1JFRyhwb3J0LT5udW0sIDApKTsKKwlzdGF0dXNfcmVnICY9IHJlYWRsKHN5cyArIFNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisKKwlpZiAoc3RhdHVzX3JlZykKKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmb21hcF9wb3J0LT5waW9fdGFza2xldCk7CisJZWxzZQorCQllbmFibGVfaXJxKG9tYXBfcG9ydC0+aXJxKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNzaV9waW9faXNyKGludCBpcnEsIHZvaWQgKnBvcnQpCit7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCA9IGhzaV9wb3J0X2RydmRhdGEocG9ydCk7CisKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZvbWFwX3BvcnQtPnBpb190YXNrbGV0KTsKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgc3NpX3dha2VfdGFza2xldCh1bnNpZ25lZCBsb25nIHNzaV9wb3J0KQoreworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgaHNpX3BvcnQgKilzc2lfcG9ydDsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKworCWlmIChzc2lfd2FrZWluKHBvcnQpKSB7CisJCS8qKgorCQkgKiBXZSBjYW4gaGF2ZSBhIHF1aWNrIEhpZ2gtTG93LUhpZ2ggdHJhbnNpdGlvbiBpbiB0aGUgbGluZS4KKwkJICogSW4gc3VjaCBhIGNhc2UgaWYgd2UgaGF2ZSBsb25nIGludGVycnVwdCBsYXRlbmNpZXMsCisJCSAqIHdlIGNhbiBtaXNzIHRoZSBsb3cgZXZlbnQgb3IgZ2V0IHR3aWNlIGEgaGlnaCBldmVudC4KKwkJICogVGhpcyB3b3JrYXJvdW5kIHdpbGwgYXZvaWQgYnJlYWtpbmcgdGhlIGNsb2NrIHJlZmVyZW5jZQorCQkgKiBjb3VudCB3aGVuIHN1Y2ggYSBzaXR1YXRpb24gb2N1cnJzLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCQlpZiAoIW9tYXBfcG9ydC0+d2tpbl9ja2VuKSB7CisJCQlvbWFwX3BvcnQtPndraW5fY2tlbiA9IDE7CisJCQlwbV9ydW50aW1lX2dldF9zeW5jKG9tYXBfcG9ydC0+cGRldik7CisJCX0KKwkJc3Bpbl91bmxvY2soJm9tYXBfcG9ydC0+bG9jayk7CisJCWRldl9kYmcoJnNzaS0+ZGV2aWNlLCAiV2FrZSBpbiBoaWdoXG4iKTsKKwkJaWYgKG9tYXBfcG9ydC0+d2t0ZXN0KSB7IC8qIEZJWE1FOiBIQUNLICEgVG8gYmUgcmVtb3ZlZCAqLworCQkJd3JpdGVsKFNTSV9XQUtFKDApLAorCQkJCW9tYXBfc3NpLT5zeXMgKyBTU0lfU0VUX1dBS0VfUkVHKHBvcnQtPm51bSkpOworCQl9CisJCWhzaV9ldmVudChwb3J0LCBIU0lfRVZFTlRfU1RBUlRfUlgpOworCX0gZWxzZSB7CisJCWRldl9kYmcoJnNzaS0+ZGV2aWNlLCAiV2FrZSBpbiBsb3dcbiIpOworCQlpZiAob21hcF9wb3J0LT53a3Rlc3QpIHsgLyogRklYTUU6IEhBQ0sgISBUbyBiZSByZW1vdmVkICovCisJCQl3cml0ZWwoU1NJX1dBS0UoMCksCisJCQkJb21hcF9zc2ktPnN5cyArIFNTSV9DTEVBUl9XQUtFX1JFRyhwb3J0LT5udW0pKTsKKwkJfQorCQloc2lfZXZlbnQocG9ydCwgSFNJX0VWRU5UX1NUT1BfUlgpOworCQlzcGluX2xvY2soJm9tYXBfcG9ydC0+bG9jayk7CisJCWlmIChvbWFwX3BvcnQtPndraW5fY2tlbikgeworCQkJcG1fcnVudGltZV9wdXRfc3luYyhvbWFwX3BvcnQtPnBkZXYpOworCQkJb21hcF9wb3J0LT53a2luX2NrZW4gPSAwOworCQl9CisJCXNwaW5fdW5sb2NrKCZvbWFwX3BvcnQtPmxvY2spOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHNzaV93YWtlX2lzcihpbnQgaXJxIF9fbWF5YmVfdW51c2VkLCB2b2lkICpzc2lfcG9ydCkKK3sKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShzc2lfcG9ydCk7CisKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZvbWFwX3BvcnQtPndha2VfdGFza2xldCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV9wb3J0X2lycShzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQsCisJCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKK3sKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlpbnQgZXJyOworCisJb21hcF9wb3J0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkLCAwKTsKKwlpZiAob21hcF9wb3J0LT5pcnEgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldmljZSwgIlBvcnQgSVJRIHJlc291cmNlIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gb21hcF9wb3J0LT5pcnE7CisJfQorCXRhc2tsZXRfaW5pdCgmb21hcF9wb3J0LT5waW9fdGFza2xldCwgc3NpX3Bpb190YXNrbGV0LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKXBvcnQpOworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJnBvcnQtPmRldmljZSwgb21hcF9wb3J0LT5pcnEsIHNzaV9waW9faXNyLAorCQkJCQkJMCwgIm1wdV9pcnEwIiwgcG9ydCk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldmljZSwgIlJlcXVlc3QgSVJRICVkIGZhaWxlZCAoJWQpXG4iLAorCQkJCQkJCW9tYXBfcG9ydC0+aXJxLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV93YWtlX2lycShzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQsCisJCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKK3sKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlpbnQgY2F3YWtlX2lycTsKKwlpbnQgZXJyOworCisJaWYgKG9tYXBfcG9ydC0+d2FrZV9ncGlvID09IC0xKSB7CisJCW9tYXBfcG9ydC0+d2FrZV9pcnEgPSAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2F3YWtlX2lycSA9IGdwaW9fdG9faXJxKG9tYXBfcG9ydC0+d2FrZV9ncGlvKTsKKworCW9tYXBfcG9ydC0+d2FrZV9pcnEgPSBjYXdha2VfaXJxOworCXRhc2tsZXRfaW5pdCgmb21hcF9wb3J0LT53YWtlX3Rhc2tsZXQsIHNzaV93YWtlX3Rhc2tsZXQsCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpcG9ydCk7CisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcG9ydC0+ZGV2aWNlLCBjYXdha2VfaXJxLCBzc2lfd2FrZV9pc3IsCisJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkJCQkiY2F3YWtlIiwgcG9ydCk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldmljZSwgIlJlcXVlc3QgV2FrZSBpbiBJUlEgJWQgZmFpbGVkICVkXG4iLAorCQkJCQkJY2F3YWtlX2lycSwgZXJyKTsKKwllcnIgPSBlbmFibGVfaXJxX3dha2UoY2F3YWtlX2lycSk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldmljZSwgIkVuYWJsZSB3YWtlIG9uIHRoZSB3YWtlbGluZSBpbiBpcnEgJWQgZmFpbGVkICVkXG4iLAorCQkJY2F3YWtlX2lycSwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzc2lfcXVldWVzX2luaXQoc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgY2g7CisKKwlmb3IgKGNoID0gMDsgY2ggPCBTU0lfTUFYX0NIQU5ORUxTOyBjaCsrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZvbWFwX3BvcnQtPnR4cXVldWVbY2hdKTsKKwkJSU5JVF9MSVNUX0hFQUQoJm9tYXBfcG9ydC0+cnhxdWV1ZVtjaF0pOworCX0KKwlJTklUX0xJU1RfSEVBRCgmb21hcF9wb3J0LT5icmtxdWV1ZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNzaV9wb3J0X2dldF9pb21lbShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCwKKwkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCBfX2lvbWVtICoqcGJhc2UsIGRtYV9hZGRyX3QgKnBoeSkKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZCk7CisJc3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IHJlc291cmNlICppb2FyZWE7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZCwgSU9SRVNPVVJDRV9NRU0sIG5hbWUpOworCWlmICghbWVtKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJJTyBtZW1vcnkgcmVnaW9uIG1pc3NpbmcgKCVzKVxuIiwgbmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCWlvYXJlYSA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwb3J0LT5kZXZpY2UsIG1lbS0+c3RhcnQsCisJCQkJCXJlc291cmNlX3NpemUobWVtKSwgZGV2X25hbWUoJnBkLT5kZXYpKTsKKwlpZiAoIWlvYXJlYSkgeworCQlkZXZfZXJyKCZwZC0+ZGV2LCAiJXMgSU8gbWVtb3J5IHJlZ2lvbiByZXF1ZXN0IGZhaWxlZFxuIiwKKwkJCQkJCQkJbWVtLT5uYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJYmFzZSA9IGRldm1faW9yZW1hcCgmcG9ydC0+ZGV2aWNlLCBtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghYmFzZSkgeworCQlkZXZfZXJyKCZwZC0+ZGV2LCAiJXMgSU8gcmVtYXAgZmFpbGVkXG4iLCBtZW0tPm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwkqcGJhc2UgPSBiYXNlOworCisJaWYgKHBoeSkKKwkJKnBoeSA9IG1lbS0+c3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc3NpX3BvcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQ7CisJc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydDsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IGRldl9nZXRfZHJ2ZGF0YShwZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXUzMiBjYXdha2VfZ3BpbyA9IDA7CisJdTMyIHBvcnRfaWQ7CisJaW50IGVycjsKKworCWRldl9kYmcoJnBkLT5kZXYsICJpbml0IHNzaSBwb3J0Li4uXG4iKTsKKworCWVyciA9IHJlZl9tb2R1bGUoVEhJU19NT0RVTEUsIHNzaS0+b3duZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGQtPmRldiwgImNvdWxkIG5vdCBpbmNyZW1lbnQgcGFyZW50IG1vZHVsZSByZWZjb3VudCAoZXJyPSVkKVxuIiwKKwkJCWVycik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghc3NpLT5wb3J0IHx8ICFvbWFwX3NzaS0+cG9ydCkgeworCQlkZXZfZXJyKCZwZC0+ZGV2LCAic3NpIGNvbnRyb2xsZXIgbm90IGluaXRpYWxpemVkIVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogZ2V0IGlkIG9mIGZpcnN0IHVuaW5pdGlhbGl6ZWQgcG9ydCBpbiBjb250cm9sbGVyICovCisJZm9yIChwb3J0X2lkID0gMDsgcG9ydF9pZCA8IHNzaS0+bnVtX3BvcnRzICYmIG9tYXBfc3NpLT5wb3J0W3BvcnRfaWRdOworCQlwb3J0X2lkKyspCisJCTsKKworCWlmIChwb3J0X2lkID49IHNzaS0+bnVtX3BvcnRzKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJwb3J0IGlkIG91dCBvZiByYW5nZSFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKworCXBvcnQgPSBzc2ktPnBvcnRbcG9ydF9pZF07CisKKwlpZiAoIW5wKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJtaXNzaW5nIGRldmljZSB0cmVlIGRhdGFcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCWNhd2FrZV9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJ0aSxzc2ktY2F3YWtlLWdwaW8iLCAwKTsKKwlpZiAoY2F3YWtlX2dwaW8gPCAwKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJEVCBkYXRhIGlzIG1pc3NpbmcgY2F3YWtlIGdwaW8gKGVycj0lZClcbiIsCisJCQljYXdha2VfZ3Bpbyk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKCZwb3J0LT5kZXZpY2UsIGNhd2FrZV9ncGlvLCBHUElPRl9ESVJfSU4sCisJCSJjYXdha2UiKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkLT5kZXYsICJjb3VsZCBub3QgcmVxdWVzdCBjYXdha2UgZ3BpbyAoZXJyPSVkKSFcbiIsCisJCQllcnIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJb21hcF9wb3J0ID0gZGV2bV9remFsbG9jKCZwb3J0LT5kZXZpY2UsIHNpemVvZigqb21hcF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvbWFwX3BvcnQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJb21hcF9wb3J0LT53YWtlX2dwaW8gPSBjYXdha2VfZ3BpbzsKKwlvbWFwX3BvcnQtPnBkZXYgPSAmcGQtPmRldjsKKwlvbWFwX3BvcnQtPnBvcnRfaWQgPSBwb3J0X2lkOworCisJLyogaW5pdGlhbGl6ZSBIU0kgcG9ydCAqLworCXBvcnQtPmFzeW5jCT0gc3NpX2FzeW5jOworCXBvcnQtPnNldHVwCT0gc3NpX3NldHVwOworCXBvcnQtPmZsdXNoCT0gc3NpX2ZsdXNoOworCXBvcnQtPnN0YXJ0X3R4CT0gc3NpX3N0YXJ0X3R4OworCXBvcnQtPnN0b3BfdHgJPSBzc2lfc3RvcF90eDsKKwlwb3J0LT5yZWxlYXNlCT0gc3NpX3JlbGVhc2U7CisJaHNpX3BvcnRfc2V0X2RydmRhdGEocG9ydCwgb21hcF9wb3J0KTsKKwlvbWFwX3NzaS0+cG9ydFtwb3J0X2lkXSA9IG9tYXBfcG9ydDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkLCBwb3J0KTsKKworCWVyciA9IHNzaV9wb3J0X2dldF9pb21lbShwZCwgInR4IiwgJm9tYXBfcG9ydC0+c3N0X2Jhc2UsCisJCSZvbWFwX3BvcnQtPnNzdF9kbWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCWVyciA9IHNzaV9wb3J0X2dldF9pb21lbShwZCwgInJ4IiwgJm9tYXBfcG9ydC0+c3NyX2Jhc2UsCisJCSZvbWFwX3BvcnQtPnNzcl9kbWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gc3NpX3BvcnRfaXJxKHBvcnQsIHBkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKwllcnIgPSBzc2lfd2FrZV9pcnEocG9ydCwgcGQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3NpX3F1ZXVlc19pbml0KG9tYXBfcG9ydCk7CisJc3Bpbl9sb2NrX2luaXQoJm9tYXBfcG9ydC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm9tYXBfcG9ydC0+d2tfbG9jayk7CisJb21hcF9wb3J0LT5kZXYgPSAmcG9ydC0+ZGV2aWNlOworCisJcG1fcnVudGltZV9pcnFfc2FmZShvbWFwX3BvcnQtPnBkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKG9tYXBfcG9ydC0+cGRldik7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwllcnIgPSBzc2lfZGVidWdfYWRkX3BvcnQob21hcF9wb3J0LCBvbWFwX3NzaS0+ZGlyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwbV9ydW50aW1lX2Rpc2FibGUob21hcF9wb3J0LT5wZGV2KTsKKwkJZ290byBlcnJvcjsKKwl9CisjZW5kaWYKKworCWhzaV9hZGRfY2xpZW50c19mcm9tX2R0KHBvcnQsIG5wKTsKKworCWRldl9pbmZvKCZwZC0+ZGV2LCAic3NpIHBvcnQgJXUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIChjYXdha2U9JWQpXG4iLAorCQlwb3J0X2lkLCBjYXdha2VfZ3Bpbyk7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2V4aXQgc3NpX3BvcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkKQoreworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkKTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXNzaV9kZWJ1Z19yZW1vdmVfcG9ydChwb3J0KTsKKyNlbmRpZgorCisJaHNpX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRzKHBvcnQpOworCisJdGFza2xldF9raWxsKCZvbWFwX3BvcnQtPndha2VfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZvbWFwX3BvcnQtPnBpb190YXNrbGV0KTsKKworCXBvcnQtPmFzeW5jCT0gaHNpX2R1bW15X21zZzsKKwlwb3J0LT5zZXR1cAk9IGhzaV9kdW1teV9jbDsKKwlwb3J0LT5mbHVzaAk9IGhzaV9kdW1teV9jbDsKKwlwb3J0LT5zdGFydF90eAk9IGhzaV9kdW1teV9jbDsKKwlwb3J0LT5zdG9wX3R4CT0gaHNpX2R1bW15X2NsOworCXBvcnQtPnJlbGVhc2UJPSBoc2lfZHVtbXlfY2w7CisKKwlvbWFwX3NzaS0+cG9ydFtvbWFwX3BvcnQtPnBvcnRfaWRdID0gTlVMTDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgTlVMTCk7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZC0+ZGV2KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBpbnQgc3NpX3NhdmVfcG9ydF9jdHgoc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCkKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSB0b19oc2lfcG9ydChvbWFwX3BvcnQtPmRldik7CisJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSB0b19oc2lfY29udHJvbGxlcihwb3J0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfY29udHJvbGxlciAqb21hcF9zc2kgPSBoc2lfY29udHJvbGxlcl9kcnZkYXRhKHNzaSk7CisKKwlvbWFwX3BvcnQtPnN5c19tcHVfZW5hYmxlID0gcmVhZGwob21hcF9zc2ktPnN5cyArCisJCQkJCVNTSV9NUFVfRU5BQkxFX1JFRyhwb3J0LT5udW0sIDApKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzaV9yZXN0b3JlX3BvcnRfY3R4KHN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQpCit7CisJc3RydWN0IGhzaV9wb3J0ICpwb3J0ID0gdG9faHNpX3BvcnQob21hcF9wb3J0LT5kZXYpOworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gdG9faHNpX2NvbnRyb2xsZXIocG9ydC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCXZvaWQgX19pb21lbQkqYmFzZTsKKworCXdyaXRlbF9yZWxheGVkKG9tYXBfcG9ydC0+c3lzX21wdV9lbmFibGUsCisJCQlvbWFwX3NzaS0+c3lzICsgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQtPm51bSwgMCkpOworCisJLyogU1NUIGNvbnRleHQgKi8KKwliYXNlID0gb21hcF9wb3J0LT5zc3RfYmFzZTsKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzdC5mcmFtZV9zaXplLCBiYXNlICsgU1NJX1NTVF9GUkFNRVNJWkVfUkVHKTsKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzdC5jaGFubmVscywgYmFzZSArIFNTSV9TU1RfQ0hBTk5FTFNfUkVHKTsKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzdC5hcmJfbW9kZSwgYmFzZSArIFNTSV9TU1RfQVJCTU9ERV9SRUcpOworCisJLyogU1NSIGNvbnRleHQgKi8KKwliYXNlID0gb21hcF9wb3J0LT5zc3JfYmFzZTsKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzci5mcmFtZV9zaXplLCBiYXNlICsgU1NJX1NTUl9GUkFNRVNJWkVfUkVHKTsKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzci5jaGFubmVscywgYmFzZSArIFNTSV9TU1JfQ0hBTk5FTFNfUkVHKTsKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzci50aW1lb3V0LCBiYXNlICsgU1NJX1NTUl9USU1FT1VUX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lfcmVzdG9yZV9wb3J0X21vZGUoc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCkKK3sKKwl1MzIgbW9kZTsKKworCXdyaXRlbF9yZWxheGVkKG9tYXBfcG9ydC0+c3N0Lm1vZGUsCisJCQkJb21hcF9wb3J0LT5zc3RfYmFzZSArIFNTSV9TU1RfTU9ERV9SRUcpOworCXdyaXRlbF9yZWxheGVkKG9tYXBfcG9ydC0+c3NyLm1vZGUsCisJCQkJb21hcF9wb3J0LT5zc3JfYmFzZSArIFNTSV9TU1JfTU9ERV9SRUcpOworCS8qIE9DUCBiYXJyaWVyICovCisJbW9kZSA9IHJlYWRsKG9tYXBfcG9ydC0+c3NyX2Jhc2UgKyBTU0lfU1NSX01PREVfUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzaV9yZXN0b3JlX2Rpdmlzb3Ioc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCkKK3sKKwl3cml0ZWxfcmVsYXhlZChvbWFwX3BvcnQtPnNzdC5kaXZpc29yLAorCQkJCW9tYXBfcG9ydC0+c3N0X2Jhc2UgKyBTU0lfU1NUX0RJVklTT1JfUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfc3NpX3BvcnRfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0ID0gaHNpX3BvcnRfZHJ2ZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKnNzaSA9IHRvX2hzaV9jb250cm9sbGVyKHBvcnQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBvbWFwX3NzaV9jb250cm9sbGVyICpvbWFwX3NzaSA9IGhzaV9jb250cm9sbGVyX2RydmRhdGEoc3NpKTsKKworCWRldl9kYmcoZGV2LCAicG9ydCBydW50aW1lIHN1c3BlbmQhXG4iKTsKKworCXNzaV9zZXRfcG9ydF9tb2RlKG9tYXBfcG9ydCwgU1NJX01PREVfU0xFRVApOworCWlmIChvbWFwX3NzaS0+Z2V0X2xvc3MpCisJCW9tYXBfcG9ydC0+bG9zc19jb3VudCA9CisJCQkJb21hcF9zc2ktPmdldF9sb3NzKHNzaS0+ZGV2aWNlLnBhcmVudCk7CisJc3NpX3NhdmVfcG9ydF9jdHgob21hcF9wb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfc3NpX3BvcnRfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBoc2lfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQgPSBoc2lfcG9ydF9kcnZkYXRhKHBvcnQpOworCXN0cnVjdCBoc2lfY29udHJvbGxlciAqc3NpID0gdG9faHNpX2NvbnRyb2xsZXIocG9ydC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IG9tYXBfc3NpX2NvbnRyb2xsZXIgKm9tYXBfc3NpID0gaHNpX2NvbnRyb2xsZXJfZHJ2ZGF0YShzc2kpOworCisJZGV2X2RiZyhkZXYsICJwb3J0IHJ1bnRpbWUgcmVzdW1lIVxuIik7CisKKwlpZiAoKG9tYXBfc3NpLT5nZXRfbG9zcykgJiYgKG9tYXBfcG9ydC0+bG9zc19jb3VudCA9PQorCQkJCW9tYXBfc3NpLT5nZXRfbG9zcyhzc2ktPmRldmljZS5wYXJlbnQpKSkKKwkJZ290byBtb2RlOyAvKiBXZSBhbHdheXMgbmVlZCB0byByZXN0b3JlIHRoZSBtb2RlICYgVFggZGl2aXNvciAqLworCisJc3NpX3Jlc3RvcmVfcG9ydF9jdHgob21hcF9wb3J0KTsKKworbW9kZToKKwlzc2lfcmVzdG9yZV9kaXZpc29yKG9tYXBfcG9ydCk7CisJc3NpX3Jlc3RvcmVfcG9ydF9tb2RlKG9tYXBfcG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG9tYXBfc3NpX3BvcnRfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhvbWFwX3NzaV9wb3J0X3J1bnRpbWVfc3VzcGVuZCwKKwkJb21hcF9zc2lfcG9ydF9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKKyNkZWZpbmUgREVWX1BNX09QUyAgICAgKCZvbWFwX3NzaV9wb3J0X3BtX29wcykKKyNlbHNlCisjZGVmaW5lIERFVl9QTV9PUFMgICAgIE5VTEwKKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9tYXBfc3NpX3BvcnRfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRpLG9tYXAzLXNzaS1wb3J0IiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvbWFwX3NzaV9wb3J0X29mX21hdGNoKTsKKyNlbHNlCisjZGVmaW5lIG9tYXBfc3NpX3BvcnRfb2ZfbWF0Y2ggTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNzaV9wb3J0X3Bkcml2ZXIgPSB7CisJLnJlbW92ZQk9IF9fZXhpdF9wKHNzaV9wb3J0X3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAib21hcF9zc2lfcG9ydCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvbWFwX3NzaV9wb3J0X29mX21hdGNoLAorCQkucG0JPSBERVZfUE1fT1BTLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKHNzaV9wb3J0X3Bkcml2ZXIsIHNzaV9wb3J0X3Byb2JlKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwX3NzaV9wb3J0Iik7CitNT0RVTEVfQVVUSE9SKCJDYXJsb3MgQ2hpbmVhIDxjYXJsb3MuY2hpbmVhQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlNlYmFzdGlhbiBSZWljaGVsIDxzcmVAa2VybmVsLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZSBQb3J0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcmVncy5oIGIvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Zjk4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9yZWdzLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBTU0kuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIENvbnRhY3Q6IENhcmxvcyBDaGluZWEgPGNhcmxvcy5jaGluZWFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIF9fT01BUF9TU0lfUkVHU19IX18KKyNkZWZpbmUgX19PTUFQX1NTSV9SRUdTX0hfXworCisvKgorICogU1NJIFNZUyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBTU0lfUkVWSVNJT05fUkVHICAgIDAKKyMgIGRlZmluZSBTU0lfUkVWX01BSk9SICAgIDB4ZjAKKyMgIGRlZmluZSBTU0lfUkVWX01JTk9SICAgIDB4ZgorI2RlZmluZSBTU0lfU1lTQ09ORklHX1JFRyAgICAweDEwCisjICBkZWZpbmUgU1NJX0FVVE9JRExFICAgICgxIDw8IDApCisjICBkZWZpbmUgU1NJX1NPRlRSRVNFVCAgICAoMSA8PCAxKQorIyAgZGVmaW5lIFNTSV9TSURMRU1PREVfRk9SQ0UgIDAKKyMgIGRlZmluZSBTU0lfU0lETEVNT0RFX05PICAgICgxIDw8IDMpCisjICBkZWZpbmUgU1NJX1NJRExFTU9ERV9TTUFSVCAgKDEgPDwgNCkKKyMgIGRlZmluZSBTU0lfU0lETEVNT0RFX01BU0sgIDB4MTgKKyMgIGRlZmluZSBTU0lfTUlETEVNT0RFX0ZPUkNFICAwCisjICBkZWZpbmUgU1NJX01JRExFTU9ERV9OTyAgICAoMSA8PCAxMikKKyMgIGRlZmluZSBTU0lfTUlETEVNT0RFX1NNQVJUICAoMSA8PCAxMykKKyMgIGRlZmluZSBTU0lfTUlETEVNT0RFX01BU0sgIDB4MzAwMAorI2RlZmluZSBTU0lfU1lTU1RBVFVTX1JFRyAgICAweDE0CisjICBkZWZpbmUgU1NJX1JFU0VURE9ORSAgICAxCisjZGVmaW5lIFNTSV9NUFVfU1RBVFVTX1JFRyhwb3J0LCBpcnEpICAoMHg4MDggKyAoKHBvcnQpICogMHgxMCkgKyAoKGlycSkgKiAyKSkKKyNkZWZpbmUgU1NJX01QVV9FTkFCTEVfUkVHKHBvcnQsIGlycSkgICgweDgwYyArICgocG9ydCkgKiAweDEwKSArICgoaXJxKSAqIDgpKQorIyAgZGVmaW5lIFNTSV9EQVRBQUNDRVBUKGNoYW5uZWwpICAgICgxIDw8IChjaGFubmVsKSkKKyMgIGRlZmluZSBTU0lfREFUQUFWQUlMQUJMRShjaGFubmVsKSAgKDEgPDwgKChjaGFubmVsKSArIDgpKQorIyAgZGVmaW5lIFNTSV9EQVRBT1ZFUlJVTihjaGFubmVsKSAgICAoMSA8PCAoKGNoYW5uZWwpICsgMTYpKQorIyAgZGVmaW5lIFNTSV9FUlJPUk9DQ1VSRUQgICAgICAoMSA8PCAyNCkKKyMgIGRlZmluZSBTU0lfQlJFQUtERVRFQ1RFRCAgICAoMSA8PCAyNSkKKyNkZWZpbmUgU1NJX0dERF9NUFVfSVJRX1NUQVRVU19SRUcgIDB4MDgwMAorI2RlZmluZSBTU0lfR0REX01QVV9JUlFfRU5BQkxFX1JFRyAgMHgwODA0CisjICBkZWZpbmUgU1NJX0dERF9MQ0goY2hhbm5lbCkgICgxIDw8IChjaGFubmVsKSkKKyNkZWZpbmUgU1NJX1dBS0VfUkVHKHBvcnQpICAgICgweGMwMCArICgocG9ydCkgKiAweDEwKSkKKyNkZWZpbmUgU1NJX0NMRUFSX1dBS0VfUkVHKHBvcnQpICAoMHhjMDQgKyAoKHBvcnQpICogMHgxMCkpCisjZGVmaW5lIFNTSV9TRVRfV0FLRV9SRUcocG9ydCkgICAgKDB4YzA4ICsgKChwb3J0KSAqIDB4MTApKQorIyAgZGVmaW5lIFNTSV9XQUtFKGNoYW5uZWwpICAoMSA8PCAoY2hhbm5lbCkpCisjICBkZWZpbmUgU1NJX1dBS0VfTUFTSyAgICAweGZmCisKKy8qCisgKiBTU0kgU1NUIHJlZ2lzdGVycworICovCisjZGVmaW5lIFNTSV9TU1RfSURfUkVHICAgICAgMAorI2RlZmluZSBTU0lfU1NUX01PREVfUkVHICAgIDQKKyMgIGRlZmluZSBTU0lfTU9ERV9WQUxfTUFTSyAgMworIyAgZGVmaW5lIFNTSV9NT0RFX1NMRUVQICAgIDAKKyMgIGRlZmluZSBTU0lfTU9ERV9TVFJFQU0gICAgMQorIyAgZGVmaW5lIFNTSV9NT0RFX0ZSQU1FICAgIDIKKyMgIGRlZmluZSBTU0lfTU9ERV9NVUxUSVBPSU5UUyAgMworI2RlZmluZSBTU0lfU1NUX0ZSQU1FU0laRV9SRUcgICAgOAorIyAgZGVmaW5lIFNTSV9GUkFNRVNJWkVfREVGQVVMVCAgMzEKKyNkZWZpbmUgU1NJX1NTVF9UWFNUQVRFX1JFRyAgICAweGMKKyMgIGRlZmluZSAgU1NJX1RYU1RBVEVfSURMRSAgMAorI2RlZmluZSBTU0lfU1NUX0JVRlNUQVRFX1JFRyAgICAweDEwCisjICBkZWZpbmUgIFNTSV9GVUxMKGNoYW5uZWwpICAoMSA8PCAoY2hhbm5lbCkpCisjZGVmaW5lIFNTSV9TU1RfRElWSVNPUl9SRUcgICAgMHgxOAorIyAgZGVmaW5lIFNTSV9NQVhfRElWSVNPUiAgICAxMjcKKyNkZWZpbmUgU1NJX1NTVF9CUkVBS19SRUcgICAgMHgyMAorI2RlZmluZSBTU0lfU1NUX0NIQU5ORUxTX1JFRyAgICAweDI0CisjICBkZWZpbmUgU1NJX0NIQU5ORUxTX0RFRkFVTFQgIDQKKyNkZWZpbmUgU1NJX1NTVF9BUkJNT0RFX1JFRyAgICAweDI4CisjICBkZWZpbmUgU1NJX0FSQk1PREVfUk9VTkRST0JJTiAgMAorIyAgZGVmaW5lIFNTSV9BUkJNT0RFX1BSSU9SSVRZICAxCisjZGVmaW5lIFNTSV9TU1RfQlVGRkVSX0NIX1JFRyhjaGFubmVsKSAgKDB4ODAgKyAoKGNoYW5uZWwpICogNCkpCisjZGVmaW5lIFNTSV9TU1RfU1dBUEJVRl9DSF9SRUcoY2hhbm5lbCkgICgweGMwICsgKChjaGFubmVsKSAqIDQpKQorCisvKgorICogU1NJIFNTUiByZWdpc3RlcnMKKyAqLworI2RlZmluZSBTU0lfU1NSX0lEX1JFRyAgICAgIDAKKyNkZWZpbmUgU1NJX1NTUl9NT0RFX1JFRyAgICA0CisjZGVmaW5lIFNTSV9TU1JfRlJBTUVTSVpFX1JFRyAgICA4CisjZGVmaW5lIFNTSV9TU1JfUlhTVEFURV9SRUcgICAgMHhjCisjZGVmaW5lIFNTSV9TU1JfQlVGU1RBVEVfUkVHICAgIDB4MTAKKyMgIGRlZmluZSBTU0lfTk9URU1QVFkoY2hhbm5lbCkgICgxIDw8IChjaGFubmVsKSkKKyNkZWZpbmUgU1NJX1NTUl9CUkVBS19SRUcgICAgMHgxYworI2RlZmluZSBTU0lfU1NSX0VSUk9SX1JFRyAgICAweDIwCisjZGVmaW5lIFNTSV9TU1JfRVJST1JBQ0tfUkVHICAgIDB4MjQKKyNkZWZpbmUgU1NJX1NTUl9PVkVSUlVOX1JFRyAgICAweDJjCisjZGVmaW5lIFNTSV9TU1JfT1ZFUlJVTkFDS19SRUcgICAgMHgzMAorI2RlZmluZSBTU0lfU1NSX1RJTUVPVVRfUkVHICAgIDB4MzQKKyMgIGRlZmluZSBTU0lfVElNRU9VVF9ERUZBVUxUICAwCisjZGVmaW5lIFNTSV9TU1JfQ0hBTk5FTFNfUkVHICAgIDB4MjgKKyNkZWZpbmUgU1NJX1NTUl9CVUZGRVJfQ0hfUkVHKGNoYW5uZWwpICAoMHg4MCArICgoY2hhbm5lbCkgKiA0KSkKKyNkZWZpbmUgU1NJX1NTUl9TV0FQQlVGX0NIX1JFRyhjaGFubmVsKSAgKDB4YzAgKyAoKGNoYW5uZWwpICogNCkpCisKKy8qCisgKiBTU0kgR0REIHJlZ2lzdGVycworICovCisjZGVmaW5lIFNTSV9HRERfSFdfSURfUkVHICAgIDAKKyNkZWZpbmUgU1NJX0dERF9QUE9SVF9JRF9SRUcgICAgMHgxMAorI2RlZmluZSBTU0lfR0REX01QT1JUX0lEX1JFRyAgICAweDE0CisjZGVmaW5lIFNTSV9HRERfUFBPUlRfU1JfUkVHICAgIDB4MjAKKyNkZWZpbmUgU1NJX0dERF9NUE9SVF9TUl9SRUcgICAgMHgyNAorIyAgZGVmaW5lIFNTSV9BQ1RJVkVfTENIX05VTV9NQVNLICAweGZmCisjZGVmaW5lIFNTSV9HRERfVEVTVF9SRUcgICAgMHg0MAorIyAgZGVmaW5lIFNTSV9URVNUICAgICAgMQorI2RlZmluZSBTU0lfR0REX0dDUl9SRUcgICAgICAweDEwMAorIyAgZGVmaW5lICBTU0lfQ0xLX0FVVE9HQVRJTkdfT04gICgxIDw8IDMpCisjICBkZWZpbmUgIFNTSV9GUkVFICAgICgxIDw8IDIpCisjICBkZWZpbmUgIFNTSV9TV0lUQ0hfT0ZGICAgICgxIDw8IDApCisjZGVmaW5lIFNTSV9HRERfR1JTVF9SRUcgICAgMHgyMDAKKyMgIGRlZmluZSBTU0lfU1dSRVNFVCAgICAxCisjZGVmaW5lIFNTSV9HRERfQ1NEUF9SRUcoY2hhbm5lbCkgICgweDgwMCArICgoY2hhbm5lbCkgKiAweDQwKSkKKyMgIGRlZmluZSBTU0lfRFNUX0JVUlNUX0VOX01BU0sgIDB4YzAwMAorIyAgZGVmaW5lIFNTSV9EU1RfU0lOR0xFX0FDQ0VTUzAgIDAKKyMgIGRlZmluZSBTU0lfRFNUX1NJTkdMRV9BQ0NFU1MgICgxIDw8IDE0KQorIyAgZGVmaW5lIFNTSV9EU1RfQlVSU1RfNHgzMl9CSVQgICgyIDw8IDE0KQorIyAgZGVmaW5lIFNTSV9EU1RfQlVSU1RfOHgzMl9CSVQgICgzIDw8IDE0KQorIyAgZGVmaW5lIFNTSV9EU1RfTUFTSyAgICAweDFlMDAKKyMgIGRlZmluZSBTU0lfRFNUX01FTU9SWV9QT1JUICAoOCA8PCA5KQorIyAgZGVmaW5lIFNTSV9EU1RfUEVSSVBIRVJBTF9QT1JUICAoOSA8PCA5KQorIyAgZGVmaW5lIFNTSV9TUkNfQlVSU1RfRU5fTUFTSyAgMHgxODAKKyMgIGRlZmluZSBTU0lfU1JDX1NJTkdMRV9BQ0NFU1MwICAwCisjICBkZWZpbmUgU1NJX1NSQ19TSU5HTEVfQUNDRVNTICAoMSA8PCA3KQorIyAgZGVmaW5lIFNTSV9TUkNfQlVSU1RfNHgzMl9CSVQgICgyIDw8IDcpCisjICBkZWZpbmUgU1NJX1NSQ19CVVJTVF84eDMyX0JJVCAgKDMgPDwgNykKKyMgIGRlZmluZSBTU0lfU1JDX01BU0sgICAgMHgzYworIyAgZGVmaW5lIFNTSV9TUkNfTUVNT1JZX1BPUlQgICg4IDw8IDIpCisjICBkZWZpbmUgU1NJX1NSQ19QRVJJUEhFUkFMX1BPUlQgICg5IDw8IDIpCisjICBkZWZpbmUgU1NJX0RBVEFfVFlQRV9NQVNLICAzCisjICBkZWZpbmUgU1NJX0RBVEFfVFlQRV9TMzIgIDIKKyNkZWZpbmUgU1NJX0dERF9DQ1JfUkVHKGNoYW5uZWwpICAoMHg4MDIgKyAoKGNoYW5uZWwpICogMHg0MCkpCisjICBkZWZpbmUgU1NJX0RTVF9BTU9ERV9NQVNLICAoMyA8PCAxNCkKKyMgIGRlZmluZSBTU0lfRFNUX0FNT0RFX0NPTlNUICAwCisjICBkZWZpbmUgU1NJX0RTVF9BTU9ERV9QT1NUSU5DICAoMSA8PCAxMikKKyMgIGRlZmluZSBTU0lfU1JDX0FNT0RFX01BU0sgICgzIDw8IDEyKQorIyAgZGVmaW5lIFNTSV9TUkNfQU1PREVfQ09OU1QgIDAKKyMgIGRlZmluZSBTU0lfU1JDX0FNT0RFX1BPU1RJTkMgICgxIDw8IDEyKQorIyAgZGVmaW5lIFNTSV9DQ1JfRU5BQkxFICAgICgxIDw8IDcpCisjICBkZWZpbmUgU1NJX0NDUl9TWU5DX01BU0sgIDB4MWYKKyNkZWZpbmUgU1NJX0dERF9DSUNSX1JFRyhjaGFubmVsKSAgKDB4ODA0ICsgKChjaGFubmVsKSAqIDB4NDApKQorIyAgZGVmaW5lIFNTSV9CTE9DS19JRSAgICAoMSA8PCA1KQorIyAgZGVmaW5lIFNTSV9IQUxGX0lFICAgICgxIDw8IDIpCisjICBkZWZpbmUgU1NJX1RPVVRfSUUgICAgKDEgPDwgMCkKKyNkZWZpbmUgU1NJX0dERF9DU1JfUkVHKGNoYW5uZWwpICAoMHg4MDYgKyAoKGNoYW5uZWwpICogMHg0MCkpCisjICBkZWZpbmUgU1NJX0NTUl9TWU5DICAgICgxIDw8IDYpCisjICBkZWZpbmUgU1NJX0NTUl9CTE9DSyAgICAoMSA8PCA1KQorIyAgZGVmaW5lIFNTSV9DU1JfSEFMRiAgICAoMSA8PCAyKQorIyAgZGVmaW5lIFNTSV9DU1JfVE9VUiAgICAoMSA8PCAwKQorI2RlZmluZSBTU0lfR0REX0NTU0FfUkVHKGNoYW5uZWwpICAoMHg4MDggKyAoKGNoYW5uZWwpICogMHg0MCkpCisjZGVmaW5lIFNTSV9HRERfQ0RTQV9SRUcoY2hhbm5lbCkgICgweDgwYyArICgoY2hhbm5lbCkgKiAweDQwKSkKKyNkZWZpbmUgU1NJX0dERF9DRU5fUkVHKGNoYW5uZWwpICAoMHg4MTAgKyAoKGNoYW5uZWwpICogMHg0MCkpCisjZGVmaW5lIFNTSV9HRERfQ1NBQ19SRUcoY2hhbm5lbCkgICgweDgxOCArICgoY2hhbm5lbCkgKiAweDQwKSkKKyNkZWZpbmUgU1NJX0dERF9DREFDX1JFRyhjaGFubmVsKSAgKDB4ODFhICsgKChjaGFubmVsKSAqIDB4NDApKQorI2RlZmluZSBTU0lfR0REX0NMTktfQ1RSTF9SRUcoY2hhbm5lbCkgICgweDgyOCArICgoY2hhbm5lbCkgKiAweDQwKSkKKyMgIGRlZmluZSBTU0lfRU5BQkxFX0xOSyAgICAoMSA8PCAxNSkKKyMgIGRlZmluZSBTU0lfU1RPUF9MTksgICAgKDEgPDwgMTQpCisjICBkZWZpbmUgU1NJX05FWFRfQ0hfSURfTUFTSyAgMHhmCisKKyNlbmRpZiAvKiBfX09NQVBfU1NJX1JFR1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hzaS9oc2kuYyBiL2RyaXZlcnMvaHNpL2hzaS5jCmluZGV4IDc0OWY3YjUuLmZlOTM3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHNpL2hzaS5jCisrKyBiL2RyaXZlcnMvaHNpL2hzaS5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlICJoc2lfY29yZS5oIgogCiBzdGF0aWMgc3NpemVfdCBtb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTUwLDcgKzUyLDEzIEBACiAKIHN0YXRpYyBpbnQgaHNpX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIpCiB7Ci0JcmV0dXJuIHN0cmNtcChkZXZfbmFtZShkZXYpLCBkcml2ZXItPm5hbWUpID09IDA7CisJaWYgKG9mX2RyaXZlcl9tYXRjaF9kZXZpY2UoZGV2LCBkcml2ZXIpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChzdHJjbXAoZGV2X25hbWUoZGV2KSwgZHJpdmVyLT5uYW1lKSA9PSAwKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBoc2lfYnVzX3R5cGUgPSB7CkBAIC02MiwxOCArNzAsMzcgQEAKIAogc3RhdGljIHZvaWQgaHNpX2NsaWVudF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlrZnJlZSh0b19oc2lfY2xpZW50KGRldikpOworCXN0cnVjdCBoc2lfY2xpZW50ICpjbCA9IHRvX2hzaV9jbGllbnQoZGV2KTsKKworCWtmcmVlKGNsLT50eF9jZmcuY2hhbm5lbHMpOworCWtmcmVlKGNsLT5yeF9jZmcuY2hhbm5lbHMpOworCWtmcmVlKGNsKTsKIH0KIAotc3RhdGljIHZvaWQgaHNpX25ld19jbGllbnQoc3RydWN0IGhzaV9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNpX2JvYXJkX2luZm8gKmluZm8pCitzdHJ1Y3QgaHNpX2NsaWVudCAqaHNpX25ld19jbGllbnQoc3RydWN0IGhzaV9wb3J0ICpwb3J0LAorCQkJCQkJc3RydWN0IGhzaV9ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBoc2lfY2xpZW50ICpjbDsKKwlzaXplX3Qgc2l6ZTsKIAogCWNsID0ga3phbGxvYyhzaXplb2YoKmNsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbCkKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKKwogCWNsLT50eF9jZmcgPSBpbmZvLT50eF9jZmc7CisJaWYgKGNsLT50eF9jZmcuY2hhbm5lbHMpIHsKKwkJc2l6ZSA9IGNsLT50eF9jZmcubnVtX2NoYW5uZWxzICogc2l6ZW9mKCpjbC0+dHhfY2ZnLmNoYW5uZWxzKTsKKwkJY2wtPnR4X2NmZy5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZSAsIEdGUF9LRVJORUwpOworCQltZW1jcHkoY2wtPnR4X2NmZy5jaGFubmVscywgaW5mby0+dHhfY2ZnLmNoYW5uZWxzLCBzaXplKTsKKwl9CisKIAljbC0+cnhfY2ZnID0gaW5mby0+cnhfY2ZnOworCWlmIChjbC0+cnhfY2ZnLmNoYW5uZWxzKSB7CisJCXNpemUgPSBjbC0+cnhfY2ZnLm51bV9jaGFubmVscyAqIHNpemVvZigqY2wtPnJ4X2NmZy5jaGFubmVscyk7CisJCWNsLT5yeF9jZmcuY2hhbm5lbHMgPSBremFsbG9jKHNpemUgLCBHRlBfS0VSTkVMKTsKKwkJbWVtY3B5KGNsLT5yeF9jZmcuY2hhbm5lbHMsIGluZm8tPnJ4X2NmZy5jaGFubmVscywgc2l6ZSk7CisJfQorCiAJY2wtPmRldmljZS5idXMgPSAmaHNpX2J1c190eXBlOwogCWNsLT5kZXZpY2UucGFyZW50ID0gJnBvcnQtPmRldmljZTsKIAljbC0+ZGV2aWNlLnJlbGVhc2UgPSBoc2lfY2xpZW50X3JlbGVhc2U7CkBAIC04NSw3ICsxMTIsMTAgQEAKIAkJcHJfZXJyKCJoc2k6IGZhaWxlZCB0byByZWdpc3RlciBjbGllbnQ6ICVzXG4iLCBpbmZvLT5uYW1lKTsKIAkJcHV0X2RldmljZSgmY2wtPmRldmljZSk7CiAJfQorCisJcmV0dXJuIGNsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHNpX25ld19jbGllbnQpOwogCiBzdGF0aWMgdm9pZCBoc2lfc2Nhbl9ib2FyZF9pbmZvKHN0cnVjdCBoc2lfY29udHJvbGxlciAqaHNpKQogewpAQCAtMTAxLDEyICsxMzEsMjA5IEBACiAJCX0KIH0KIAotc3RhdGljIGludCBoc2lfcmVtb3ZlX2NsaWVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgc3RydWN0IGhzaV9ib2FyZF9pbmZvIGhzaV9jaGFyX2Rldl9pbmZvID0geworCS5uYW1lID0gImhzaV9jaGFyIiwKK307CisKK3N0YXRpYyBpbnQgaHNpX29mX3Byb3BlcnR5X3BhcnNlX21vZGUoc3RydWN0IGRldmljZV9ub2RlICpjbGllbnQsIGNoYXIgKm5hbWUsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpyZXN1bHQpCit7CisJY29uc3QgY2hhciAqbW9kZTsKKwlpbnQgZXJyOworCisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoY2xpZW50LCBuYW1lLCAmbW9kZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoc3RyY21wKG1vZGUsICJzdHJlYW0iKSA9PSAwKQorCQkqcmVzdWx0ID0gSFNJX01PREVfU1RSRUFNOworCWVsc2UgaWYgKHN0cmNtcChtb2RlLCAiZnJhbWUiKSA9PSAwKQorCQkqcmVzdWx0ID0gSFNJX01PREVfRlJBTUU7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhzaV9vZl9wcm9wZXJ0eV9wYXJzZV9mbG93KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2xpZW50LCBjaGFyICpuYW1lLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqcmVzdWx0KQoreworCWNvbnN0IGNoYXIgKmZsb3c7CisJaW50IGVycjsKKworCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNsaWVudCwgbmFtZSwgJmZsb3cpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHN0cmNtcChmbG93LCAic3luY2hyb25pemVkIikgPT0gMCkKKwkJKnJlc3VsdCA9IEhTSV9GTE9XX1NZTkM7CisJZWxzZSBpZiAoc3RyY21wKGZsb3csICJwaXBlbGluZSIpID09IDApCisJCSpyZXN1bHQgPSBIU0lfRkxPV19QSVBFOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoc2lfb2ZfcHJvcGVydHlfcGFyc2VfYXJiX21vZGUoc3RydWN0IGRldmljZV9ub2RlICpjbGllbnQsCisJCQkJCSAgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50ICpyZXN1bHQpCit7CisJY29uc3QgY2hhciAqYXJiX21vZGU7CisJaW50IGVycjsKKworCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNsaWVudCwgbmFtZSwgJmFyYl9tb2RlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChzdHJjbXAoYXJiX21vZGUsICJyb3VuZC1yb2JpbiIpID09IDApCisJCSpyZXN1bHQgPSBIU0lfQVJCX1JSOworCWVsc2UgaWYgKHN0cmNtcChhcmJfbW9kZSwgInByaW9yaXR5IikgPT0gMCkKKwkJKnJlc3VsdCA9IEhTSV9BUkJfUFJJTzsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhzaV9hZGRfY2xpZW50X2Zyb21fZHQoc3RydWN0IGhzaV9wb3J0ICpwb3J0LAorCQkJCQkJc3RydWN0IGRldmljZV9ub2RlICpjbGllbnQpCit7CisJc3RydWN0IGhzaV9jbGllbnQgKmNsOworCXN0cnVjdCBoc2lfY2hhbm5lbCBjaGFubmVsOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwljaGFyIG5hbWVbMzJdOworCWludCBsZW5ndGgsIGNlbGxzLCBlcnIsIGksIG1heF9jaGFuLCBtb2RlOworCisJY2wgPSBremFsbG9jKHNpemVvZigqY2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsKQorCQlyZXR1cm47CisKKwllcnIgPSBvZl9tb2RhbGlhc19ub2RlKGNsaWVudCwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWRldl9zZXRfbmFtZSgmY2wtPmRldmljZSwgIiVzIiwgbmFtZSk7CisKKwllcnIgPSBoc2lfb2ZfcHJvcGVydHlfcGFyc2VfbW9kZShjbGllbnQsICJoc2ktbW9kZSIsICZtb2RlKTsKKwlpZiAoZXJyKSB7CisJCWVyciA9IGhzaV9vZl9wcm9wZXJ0eV9wYXJzZV9tb2RlKGNsaWVudCwgImhzaS1yeC1tb2RlIiwKKwkJCQkJCSAmY2wtPnJ4X2NmZy5tb2RlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCisJCWVyciA9IGhzaV9vZl9wcm9wZXJ0eV9wYXJzZV9tb2RlKGNsaWVudCwgImhzaS10eC1tb2RlIiwKKwkJCQkJCSAmY2wtPnR4X2NmZy5tb2RlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0gZWxzZSB7CisJCWNsLT5yeF9jZmcubW9kZSA9IG1vZGU7CisJCWNsLT50eF9jZmcubW9kZSA9IG1vZGU7CisJfQorCisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2xpZW50LCAiaHNpLXNwZWVkLWticHMiLAorCQkJCSAgICZjbC0+dHhfY2ZnLnNwZWVkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKwljbC0+cnhfY2ZnLnNwZWVkID0gY2wtPnR4X2NmZy5zcGVlZDsKKworCWVyciA9IGhzaV9vZl9wcm9wZXJ0eV9wYXJzZV9mbG93KGNsaWVudCwgImhzaS1mbG93IiwKKwkJCQkJICZjbC0+cnhfY2ZnLmZsb3cpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJZXJyID0gaHNpX29mX3Byb3BlcnR5X3BhcnNlX2FyYl9tb2RlKGNsaWVudCwgImhzaS1hcmItbW9kZSIsCisJCQkJCSAgICAgJmNsLT5yeF9jZmcuYXJiX21vZGUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoY2xpZW50LCAiaHNpLWNoYW5uZWwtaWRzIiwgJmxlbmd0aCk7CisJaWYgKCFwcm9wKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWNlbGxzID0gbGVuZ3RoIC8gc2l6ZW9mKHUzMik7CisKKwljbC0+cnhfY2ZnLm51bV9jaGFubmVscyA9IGNlbGxzOworCWNsLT50eF9jZmcubnVtX2NoYW5uZWxzID0gY2VsbHM7CisKKwljbC0+cnhfY2ZnLmNoYW5uZWxzID0ga3phbGxvYyhjZWxscyAqIHNpemVvZihjaGFubmVsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbC0+cnhfY2ZnLmNoYW5uZWxzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWNsLT50eF9jZmcuY2hhbm5lbHMgPSBremFsbG9jKGNlbGxzICogc2l6ZW9mKGNoYW5uZWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsLT50eF9jZmcuY2hhbm5lbHMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCW1heF9jaGFuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY2VsbHM7IGkrKykgeworCQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChjbGllbnQsICJoc2ktY2hhbm5lbC1pZHMiLCBpLAorCQkJCQkJICZjaGFubmVsLmlkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyMzsKKworCQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChjbGllbnQsICJoc2ktY2hhbm5lbC1uYW1lcyIsCisJCQkJCQkgICAgaSwgJmNoYW5uZWwubmFtZSk7CisJCWlmIChlcnIpCisJCQljaGFubmVsLm5hbWUgPSBOVUxMOworCisJCWlmIChjaGFubmVsLmlkID4gbWF4X2NoYW4pCisJCQltYXhfY2hhbiA9IGNoYW5uZWwuaWQ7CisKKwkJY2wtPnJ4X2NmZy5jaGFubmVsc1tpXSA9IGNoYW5uZWw7CisJCWNsLT50eF9jZmcuY2hhbm5lbHNbaV0gPSBjaGFubmVsOworCX0KKworCWNsLT5yeF9jZmcubnVtX2h3X2NoYW5uZWxzID0gbWF4X2NoYW4gKyAxOworCWNsLT50eF9jZmcubnVtX2h3X2NoYW5uZWxzID0gbWF4X2NoYW4gKyAxOworCisJY2wtPmRldmljZS5idXMgPSAmaHNpX2J1c190eXBlOworCWNsLT5kZXZpY2UucGFyZW50ID0gJnBvcnQtPmRldmljZTsKKwljbC0+ZGV2aWNlLnJlbGVhc2UgPSBoc2lfY2xpZW50X3JlbGVhc2U7CisJY2wtPmRldmljZS5vZl9ub2RlID0gY2xpZW50OworCisJaWYgKGRldmljZV9yZWdpc3RlcigmY2wtPmRldmljZSkgPCAwKSB7CisJCXByX2VycigiaHNpOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2xpZW50OiAlc1xuIiwgbmFtZSk7CisJCXB1dF9kZXZpY2UoJmNsLT5kZXZpY2UpOworCQlnb3RvIGVycjM7CisJfQorCisJcmV0dXJuOworCitlcnIzOgorCWtmcmVlKGNsLT50eF9jZmcuY2hhbm5lbHMpOworZXJyMjoKKwlrZnJlZShjbC0+cnhfY2ZnLmNoYW5uZWxzKTsKK2VycjoKKwlrZnJlZShjbCk7CisJcHJfZXJyKCJoc2kgY2xpZW50OiBtaXNzaW5nIG9yIGluY29ycmVjdCBvZiBwcm9wZXJ0eTogZXJyPSVkXG4iLCBlcnIpOworfQorCit2b2lkIGhzaV9hZGRfY2xpZW50c19mcm9tX2R0KHN0cnVjdCBoc2lfcG9ydCAqcG9ydCwgc3RydWN0IGRldmljZV9ub2RlICpjbGllbnRzKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisKKwkvKiByZWdpc3RlciBoc2ktY2hhciBkZXZpY2UgKi8KKwloc2lfbmV3X2NsaWVudChwb3J0LCAmaHNpX2NoYXJfZGV2X2luZm8pOworCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUoY2xpZW50cywgY2hpbGQpCisJCWhzaV9hZGRfY2xpZW50X2Zyb21fZHQocG9ydCwgY2hpbGQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaHNpX2FkZF9jbGllbnRzX2Zyb21fZHQpOworI2VuZGlmCisKK2ludCBoc2lfcmVtb3ZlX2NsaWVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiB7CiAJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHNpX3JlbW92ZV9jbGllbnQpOwogCiBzdGF0aWMgaW50IGhzaV9yZW1vdmVfcG9ydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiB7CkBAIC0xMzAsNiArMzU3LDE2IEBACiB9CiAKIC8qKgorICogaHNpX3VucmVnaXN0ZXJfcG9ydCAtIFVucmVnaXN0ZXIgYW4gSFNJIHBvcnQKKyAqIEBwb3J0OiBUaGUgSFNJIHBvcnQgdG8gdW5yZWdpc3RlcgorICovCit2b2lkIGhzaV9wb3J0X3VucmVnaXN0ZXJfY2xpZW50cyhzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQpCit7CisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZwb3J0LT5kZXZpY2UsIE5VTEwsIGhzaV9yZW1vdmVfY2xpZW50KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhzaV9wb3J0X3VucmVnaXN0ZXJfY2xpZW50cyk7CisKKy8qKgogICogaHNpX3VucmVnaXN0ZXJfY29udHJvbGxlciAtIFVucmVnaXN0ZXIgYW4gSFNJIGNvbnRyb2xsZXIKICAqIEBoc2k6IFRoZSBIU0kgY29udHJvbGxlciB0byByZWdpc3RlcgogICovCkBAIC00NzIsNyArNzA5LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGhzaV91bnJlZ2lzdGVyX3BvcnRfZXZlbnQpOwogCiAvKioKLSAqIGhzaV9ldmVudCAtTm90aWZpZXMgY2xpZW50cyBhYm91dCBwb3J0IGV2ZW50cworICogaHNpX2V2ZW50IC0gTm90aWZpZXMgY2xpZW50cyBhYm91dCBwb3J0IGV2ZW50cwogICogQHBvcnQ6IFBvcnQgd2hlcmUgdGhlIGV2ZW50IG9jY3VycmVkCiAgKiBAZXZlbnQ6IFRoZSBldmVudCB0eXBlCiAgKgpAQCAtNDkyLDYgKzcyOSwzMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaHNpX2V2ZW50KTsKIAorLyoqCisgKiBoc2lfZ2V0X2NoYW5uZWxfaWRfYnlfbmFtZSAtIGFjcXVpcmUgY2hhbm5lbCBpZCBieSBjaGFubmVsIG5hbWUKKyAqIEBjbDogSFNJIGNsaWVudCwgd2hpY2ggdXNlcyB0aGUgY2hhbm5lbAorICogQG5hbWU6IG5hbWUgdGhlIGNoYW5uZWwgaXMga25vd24gdW5kZXIKKyAqCisgKiBDbGllbnRzIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBoc2kgY2hhbm5lbCBpZHMgc2ltaWxhciB0bworICogcmVxdWVzdGluZyBJUlFzIG9yIEdQSU9zIGJ5IG5hbWUuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgc2FtZQorICogY2hhbm5lbCBjb25maWd1cmF0aW9uIGlzIHVzZWQgZm9yIFJYIGFuZCBUWC4KKyAqCisgKiBSZXR1cm5zIC1lcnJubyBvbiBlcnJvciBvciBjaGFubmVsIGlkIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBoc2lfZ2V0X2NoYW5uZWxfaWRfYnlfbmFtZShzdHJ1Y3QgaHNpX2NsaWVudCAqY2wsIGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisKKwlpZiAoIWNsLT5yeF9jZmcuY2hhbm5lbHMpCisJCXJldHVybiAtRU5PRU5UOworCisJZm9yIChpID0gMDsgaSA8IGNsLT5yeF9jZmcubnVtX2NoYW5uZWxzOyBpKyspCisJCWlmICghc3RyY21wKGNsLT5yeF9jZmcuY2hhbm5lbHNbaV0ubmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gY2wtPnJ4X2NmZy5jaGFubmVsc1tpXS5pZDsKKworCXJldHVybiAtRU5YSU87Cit9CitFWFBPUlRfU1lNQk9MX0dQTChoc2lfZ2V0X2NoYW5uZWxfaWRfYnlfbmFtZSk7CisKIHN0YXRpYyBpbnQgX19pbml0IGhzaV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGJ1c19yZWdpc3RlcigmaHNpX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmMKaW5kZXggNjAyY2E4Ni4uMjg0Y2Y2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmMKKysrIGIvZHJpdmVycy9odi9jaGFubmVsLmMKQEAgLTQ3MSwxOCArNDcxLDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c190ZWFyZG93bl9ncGFkbCk7CiAKK3N0YXRpYyB2b2lkIHJlc2V0X2NoYW5uZWxfY2Iodm9pZCAqYXJnKQoreworCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsID0gYXJnOworCisJY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrID0gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgdm1idXNfY2xvc2VfaW50ZXJuYWwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpCiB7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWxfY2xvc2VfY2hhbm5lbCAqbXNnOwogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWNoYW5uZWwtPnN0YXRlID0gQ0hBTk5FTF9PUEVOX1NUQVRFOwogCWNoYW5uZWwtPnNjX2NyZWF0aW9uX2NhbGxiYWNrID0gTlVMTDsKIAkvKiBTdG9wIGNhbGxiYWNrIGFuZCBjYW5jZWwgdGhlIHRpbWVyIGFzYXAgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7Ci0JY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pbmJvdW5kX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2hhbm5lbC0+dGFyZ2V0X2NwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjaGFubmVsLT50YXJnZXRfY3B1LCByZXNldF9jaGFubmVsX2NiLAorCQkJCQkgY2hhbm5lbCwgdHJ1ZSk7CisJZWxzZQorCQlyZXNldF9jaGFubmVsX2NiKGNoYW5uZWwpOwogCiAJLyogU2VuZCBhIGNsb3NpbmcgbWVzc2FnZSAqLwogCkBAIC02NzQsOCArNjgyLDcgQEAKIAl1MzIgcGZuY291bnQgPSBOVU1fUEFHRVNfU1BBTk5FRChtdWx0aV9wYWdlYnVmZmVyLT5vZmZzZXQsCiAJCQkJCSBtdWx0aV9wYWdlYnVmZmVyLT5sZW4pOwogCi0KLQlpZiAoKHBmbmNvdW50IDwgMCkgfHwgKHBmbmNvdW50ID4gTUFYX01VTFRJUEFHRV9CVUZGRVJfQ09VTlQpKQorCWlmIChwZm5jb3VudCA+IE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L2NoYW5uZWxfbWdtdC5jIGIvZHJpdmVycy9odi9jaGFubmVsX21nbXQuYwppbmRleCBmYTkyMDQ2Li42YzhiMDMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9odi9jaGFubmVsX21nbXQuYworKysgYi9kcml2ZXJzL2h2L2NoYW5uZWxfbWdtdC5jCkBAIC0xNDksNiArMTQ5LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmY2hhbm5lbC0+c2NfbG9jayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmY2hhbm5lbC0+c2NfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoYW5uZWwtPnBlcmNwdV9saXN0KTsKIAogCWNoYW5uZWwtPmNvbnRyb2x3cSA9IGNyZWF0ZV93b3JrcXVldWUoImh2X3ZtYnVzX2N0bCIpOwogCWlmICghY2hhbm5lbC0+Y29udHJvbHdxKSB7CkBAIC0xODgsNyArMTg5LDIwIEBACiAJcXVldWVfd29yayh2bWJ1c19jb25uZWN0aW9uLndvcmtfcXVldWUsICZjaGFubmVsLT53b3JrKTsKIH0KIAorc3RhdGljIHZvaWQgcGVyY3B1X2NoYW5uZWxfZW5xKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCA9IGFyZzsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJbGlzdF9hZGRfdGFpbCgmY2hhbm5lbC0+cGVyY3B1X2xpc3QsICZodl9jb250ZXh0LnBlcmNwdV9saXN0W2NwdV0pOworfQorCitzdGF0aWMgdm9pZCBwZXJjcHVfY2hhbm5lbF9kZXEodm9pZCAqYXJnKQoreworCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsID0gYXJnOworCisJbGlzdF9kZWwoJmNoYW5uZWwtPnBlcmNwdV9saXN0KTsKK30KIAogLyoKICAqIHZtYnVzX3Byb2Nlc3NfcmVzY2luZF9vZmZlciAtCkBAIC0yMTAsNiArMjI0LDEyIEBACiAJbXNnLmhlYWRlci5tc2d0eXBlID0gQ0hBTk5FTE1TR19SRUxJRF9SRUxFQVNFRDsKIAl2bWJ1c19wb3N0X21zZygmbXNnLCBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfcmVsaWRfcmVsZWFzZWQpKTsKIAorCWlmIChjaGFubmVsLT50YXJnZXRfY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNoYW5uZWwtPnRhcmdldF9jcHUsCisJCQkJCSBwZXJjcHVfY2hhbm5lbF9kZXEsIGNoYW5uZWwsIHRydWUpOworCWVsc2UKKwkJcGVyY3B1X2NoYW5uZWxfZGVxKGNoYW5uZWwpOworCiAJaWYgKGNoYW5uZWwtPnByaW1hcnlfY2hhbm5lbCA9PSBOVUxMKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2RlbCgmY2hhbm5lbC0+bGlzdGVudHJ5KTsKQEAgLTI0NSw2ICsyNjUsNyBAQAogCQkJCQkJCXdvcmspOwogCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsOwogCWJvb2wgZm5ldyA9IHRydWU7CisJYm9vbCBlbnEgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI2NCwxMiArMjg1LDIyIEBACiAJCX0KIAl9CiAKLQlpZiAoZm5ldykKKwlpZiAoZm5ldykgewogCQlsaXN0X2FkZF90YWlsKCZuZXdjaGFubmVsLT5saXN0ZW50cnksCiAJCQkgICAgICAmdm1idXNfY29ubmVjdGlvbi5jaG5fbGlzdCk7CisJCWVucSA9IHRydWU7CisJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdm1idXNfY29ubmVjdGlvbi5jaGFubmVsX2xvY2ssIGZsYWdzKTsKIAorCWlmIChlbnEpIHsKKwkJaWYgKG5ld2NoYW5uZWwtPnRhcmdldF9jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKG5ld2NoYW5uZWwtPnRhcmdldF9jcHUsCisJCQkJCQkgcGVyY3B1X2NoYW5uZWxfZW5xLAorCQkJCQkJIG5ld2NoYW5uZWwsIHRydWUpOworCQllbHNlCisJCQlwZXJjcHVfY2hhbm5lbF9lbnEobmV3Y2hhbm5lbCk7CisJfQogCWlmICghZm5ldykgewogCQkvKgogCQkgKiBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIHN1Yi1jaGFubmVsLgpAQCAtMjgyLDYgKzMxMywxNCBAQAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW5uZWwtPnNjX2xvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkX3RhaWwoJm5ld2NoYW5uZWwtPnNjX2xpc3QsICZjaGFubmVsLT5zY19saXN0KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPnNjX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKG5ld2NoYW5uZWwtPnRhcmdldF9jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShuZXdjaGFubmVsLT50YXJnZXRfY3B1LAorCQkJCQkJCSBwZXJjcHVfY2hhbm5lbF9lbnEsCisJCQkJCQkJIG5ld2NoYW5uZWwsIHRydWUpOworCQkJZWxzZQorCQkJCXBlcmNwdV9jaGFubmVsX2VucShuZXdjaGFubmVsKTsKKwogCQkJbmV3Y2hhbm5lbC0+c3RhdGUgPSBDSEFOTkVMX09QRU5fU1RBVEU7CiAJCQlpZiAoY2hhbm5lbC0+c2NfY3JlYXRpb25fY2FsbGJhY2sgIT0gTlVMTCkKIAkJCQljaGFubmVsLT5zY19jcmVhdGlvbl9jYWxsYmFjayhuZXdjaGFubmVsKTsKQEAgLTM2NSw3ICs0MDQsNyBAQAogICogcGVyZm9ybWFuY2UgY3JpdGljYWwgY2hhbm5lbHMgKElERSwgU0NTSSBhbmQgTmV0d29yaykgd2lsbCBiZSB1bmlmb3JtbHkKICAqIGRpc3RyaWJ1dGVkIGFjcm9zcyBhbGwgYXZhaWxhYmxlIENQVXMuCiAgKi8KLXN0YXRpYyB1MzIgZ2V0X3ZwX2luZGV4KHV1aWRfbGUgKnR5cGVfZ3VpZCkKK3N0YXRpYyB2b2lkIGluaXRfdnBfaW5kZXgoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsIHV1aWRfbGUgKnR5cGVfZ3VpZCkKIHsKIAl1MzIgY3VyX2NwdTsKIAlpbnQgaTsKQEAgLTM4NywxMCArNDI2LDEzIEBACiAJCSAqIEFsc28gaWYgdGhlIGNoYW5uZWwgaXMgbm90IGEgcGVyZm9ybWFuY2UgY3JpdGljYWwKIAkJICogY2hhbm5lbCwgYmluZCBpdCB0byBjcHUgMC4KIAkJICovCi0JCXJldHVybiAwOworCQljaGFubmVsLT50YXJnZXRfY3B1ID0gMDsKKwkJY2hhbm5lbC0+dGFyZ2V0X3ZwID0gMDsKKwkJcmV0dXJuOwogCX0KIAljdXJfY3B1ID0gKCsrbmV4dF92cCAlIG1heF9jcHVzKTsKLQlyZXR1cm4gaHZfY29udGV4dC52cF9pbmRleFtjdXJfY3B1XTsKKwljaGFubmVsLT50YXJnZXRfY3B1ID0gY3VyX2NwdTsKKwljaGFubmVsLT50YXJnZXRfdnAgPSBodl9jb250ZXh0LnZwX2luZGV4W2N1cl9jcHVdOwogfQogCiAvKgpAQCAtNDM4LDcgKzQ4MCw3IEBACiAJCQkJb2ZmZXItPmNvbm5lY3Rpb25faWQ7CiAJfQogCi0JbmV3Y2hhbm5lbC0+dGFyZ2V0X3ZwID0gZ2V0X3ZwX2luZGV4KCZvZmZlci0+b2ZmZXIuaWZfdHlwZSk7CisJaW5pdF92cF9pbmRleChuZXdjaGFubmVsLCAmb2ZmZXItPm9mZmVyLmlmX3R5cGUpOwogCiAJbWVtY3B5KCZuZXdjaGFubmVsLT5vZmZlcm1zZywgb2ZmZXIsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vZmZlcl9jaGFubmVsKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L2Nvbm5lY3Rpb24uYyBiL2RyaXZlcnMvaHYvY29ubmVjdGlvbi5jCmluZGV4IDJlNzgwMWEuLmU4NGY0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHYvY29ubmVjdGlvbi5jCisrKyBiL2RyaXZlcnMvaHYvY29ubmVjdGlvbi5jCkBAIC0yMjQsOCArMjI0LDggQEAKIAkJdm1idXNfY29ubmVjdGlvbi5pbnRfcGFnZSA9IE5VTEw7CiAJfQogCi0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2bWJ1c19jb25uZWN0aW9uLm1vbml0b3JfcGFnZXNbMF0sIDEpOwotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdm1idXNfY29ubmVjdGlvbi5tb25pdG9yX3BhZ2VzWzFdLCAxKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZtYnVzX2Nvbm5lY3Rpb24ubW9uaXRvcl9wYWdlc1swXSwgMCk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2bWJ1c19jb25uZWN0aW9uLm1vbml0b3JfcGFnZXNbMV0sIDApOwogCXZtYnVzX2Nvbm5lY3Rpb24ubW9uaXRvcl9wYWdlc1swXSA9IE5VTEw7CiAJdm1idXNfY29ubmVjdGlvbi5tb25pdG9yX3BhZ2VzWzFdID0gTlVMTDsKIApAQCAtMjM0LDYgKzIzNCwyOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBNYXAgdGhlIGdpdmVuIHJlbGlkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgYmFzZWQgb24gdGhlCisgKiBwZXItY3B1IGxpc3Qgb2YgY2hhbm5lbHMgdGhhdCBoYXZlIGJlZW4gYWZmaW5pdGl6ZWQgdG8gdGhpcyBDUFUuCisgKiBUaGlzIHdpbGwgYmUgdXNlZCBpbiB0aGUgY2hhbm5lbCBjYWxsYmFjayBwYXRoIGFzIHdlIGNhbiBkbyB0aGlzCisgKiBtYXBwaW5nIGluIGEgbG9jay1mcmVlIGZhc2hpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqcGNwdV9yZWxpZDJjaGFubmVsKHUzMiByZWxpZCkKK3sKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqZm91bmRfY2hhbm5lbCAgPSBOVUxMOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcGNwdV9oZWFkID0gJmh2X2NvbnRleHQucGVyY3B1X2xpc3RbY3B1XTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbm5lbCwgcGNwdV9oZWFkLCBwZXJjcHVfbGlzdCkgeworCQlpZiAoY2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgPT0gcmVsaWQpIHsKKwkJCWZvdW5kX2NoYW5uZWwgPSBjaGFubmVsOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmRfY2hhbm5lbDsKK30KIAogLyoKICAqIHJlbGlkMmNoYW5uZWwgLSBHZXQgdGhlIGNoYW5uZWwgb2JqZWN0IGdpdmVuIGl0cwpAQCAtMjc3LDcgKzI5OSw2IEBACiBzdGF0aWMgdm9pZCBwcm9jZXNzX2Nobl9ldmVudCh1MzIgcmVsaWQpCiB7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICphcmc7CiAJYm9vbCByZWFkX3N0YXRlOwogCXUzMiBieXRlc190b19yZWFkOwpAQCAtMjg2LDcgKzMwNyw3IEBACiAJICogRmluZCB0aGUgY2hhbm5lbCBiYXNlZCBvbiB0aGlzIHJlbGlkIGFuZCBpbnZva2VzIHRoZQogCSAqIGNoYW5uZWwgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgZXZlbnQKIAkgKi8KLQljaGFubmVsID0gcmVsaWQyY2hhbm5lbChyZWxpZCk7CisJY2hhbm5lbCA9IHBjcHVfcmVsaWQyY2hhbm5lbChyZWxpZCk7CiAKIAlpZiAoIWNoYW5uZWwpIHsKIAkJcHJfZXJyKCJjaGFubmVsIG5vdCBmb3VuZCBmb3IgcmVsaWQgLSAldVxuIiwgcmVsaWQpOwpAQCAtMjk2LDEzICszMTcsMTIgQEAKIAkvKgogCSAqIEEgY2hhbm5lbCBvbmNlIGNyZWF0ZWQgaXMgcGVyc2lzdGVudCBldmVuIHdoZW4gdGhlcmUKIAkgKiBpcyBubyBkcml2ZXIgaGFuZGxpbmcgdGhlIGRldmljZS4gQW4gdW5sb2FkaW5nIGRyaXZlcgotCSAqIHNldHMgdGhlIG9uY2hhbm5lbF9jYWxsYmFjayB0byBOVUxMIHVuZGVyIHRoZQotCSAqIHByb3RlY3Rpb24gb2YgdGhlIGNoYW5uZWwgaW5ib3VuZF9sb2NrLiBUaHVzLCBjaGVja2luZwotCSAqIGFuZCBpbnZva2luZyB0aGUgZHJpdmVyIHNwZWNpZmljIGNhbGxiYWNrIHRha2VzIGNhcmUgb2YKLQkgKiBvcmRlcmx5IHVubG9hZGluZyBvZiB0aGUgZHJpdmVyLgorCSAqIHNldHMgdGhlIG9uY2hhbm5lbF9jYWxsYmFjayB0byBOVUxMIG9uIHRoZSBzYW1lIENQVQorCSAqIGFzIHdoZXJlIHRoaXMgaW50ZXJydXB0IGlzIGhhbmRsZWQgKGluIGFuIGludGVycnVwdCBjb250ZXh0KS4KKwkgKiBUaHVzLCBjaGVja2luZyBhbmQgaW52b2tpbmcgdGhlIGRyaXZlciBzcGVjaWZpYyBjYWxsYmFjayB0YWtlcworCSAqIGNhcmUgb2Ygb3JkZXJseSB1bmxvYWRpbmcgb2YgdGhlIGRyaXZlci4KIAkgKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFubmVsLT5pbmJvdW5kX2xvY2ssIGZsYWdzKTsKIAlpZiAoY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrICE9IE5VTEwpIHsKIAkJYXJnID0gY2hhbm5lbC0+Y2hhbm5lbF9jYWxsYmFja19jb250ZXh0OwogCQlyZWFkX3N0YXRlID0gY2hhbm5lbC0+YmF0Y2hlZF9yZWFkaW5nOwpAQCAtMzI3LDcgKzM0Nyw2IEBACiAJCXByX2Vycigibm8gY2hhbm5lbCBjYWxsYmFjayBmb3IgcmVsaWQgLSAldVxuIiwgcmVsaWQpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9odi5jIGIvZHJpdmVycy9odi9odi5jCmluZGV4IGJjYjQ5NTAuLmVkZmM4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHYvaHYuYworKysgYi9kcml2ZXJzL2h2L2h2LmMKQEAgLTM4Myw2ICszODMsOCBAQAogCSAqLwogCXJkbXNybChIVl9YNjRfTVNSX1ZQX0lOREVYLCB2cF9pbmRleCk7CiAJaHZfY29udGV4dC52cF9pbmRleFtjcHVdID0gKHUzMil2cF9pbmRleDsKKworCUlOSVRfTElTVF9IRUFEKCZodl9jb250ZXh0LnBlcmNwdV9saXN0W2NwdV0pOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9odl9iYWxsb29uLmMgYi9kcml2ZXJzL2h2L2h2X2JhbGxvb24uYwppbmRleCA3ZTZkNzhkLi41ZTkwYzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L2h2X2JhbGxvb24uYworKysgYi9kcml2ZXJzL2h2L2h2X2JhbGxvb24uYwpAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ1OSw2ICs0NjAsMTEgQEAKICAqLwogc3RhdGljIHVpbnQgcHJlc3N1cmVfcmVwb3J0X2RlbGF5ID0gNDU7CiAKKy8qCisgKiBUaGUgbGFzdCB0aW1lIHdlIHBvc3RlZCBhIHByZXNzdXJlIHJlcG9ydCB0byBob3N0LgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3Bvc3RfdGltZTsKKwogbW9kdWxlX3BhcmFtKGhvdF9hZGQsIGJvb2wsIChTX0lSVUdPIHwgU19JV1VTUikpOwogTU9EVUxFX1BBUk1fREVTQyhob3RfYWRkLCAiSWYgc2V0IGF0dGVtcHQgbWVtb3J5IGhvdF9hZGQiKTsKIApAQCAtNTQyLDYgKzU0OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHZfZHlubWVtX2RldmljZSBkbV9kZXZpY2U7CiAKK3N0YXRpYyB2b2lkIHBvc3Rfc3RhdHVzKHN0cnVjdCBodl9keW5tZW1fZGV2aWNlICpkbSk7CiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAKIHN0YXRpYyB2b2lkIGh2X2JyaW5nX3Bnc19vbmxpbmUodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTYxMiw3ICs2MTksNyBAQAogCQkgKiBoYXZlIG5vdCBiZWVuICJvbmxpbmVkIiB3aXRoaW4gdGhlIGFsbG93ZWQgdGltZS4KIAkJICovCiAJCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG1fZGV2aWNlLm9sX3dhaXRldmVudCwgNSpIWik7Ci0KKwkJcG9zdF9zdGF0dXMoJmRtX2RldmljZSk7CiAJfQogCiAJcmV0dXJuOwpAQCAtOTUxLDExICs5NTgsMTcgQEAKIHsKIAlzdHJ1Y3QgZG1fc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3Qgc3lzaW5mbyB2YWw7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgbGFzdF9wb3N0ID0gbGFzdF9wb3N0X3RpbWU7CiAKIAlpZiAocHJlc3N1cmVfcmVwb3J0X2RlbGF5ID4gMCkgewogCQktLXByZXNzdXJlX3JlcG9ydF9kZWxheTsKIAkJcmV0dXJuOwogCX0KKworCWlmICghdGltZV9hZnRlcihub3csIChsYXN0X3Bvc3RfdGltZSArIEhaKSkpCisJCXJldHVybjsKKwogCXNpX21lbWluZm8oJnZhbCk7CiAJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgZG1fc3RhdHVzKSk7CiAJc3RhdHVzLmhkci50eXBlID0gRE1fU1RBVFVTX1JFUE9SVDsKQEAgLTk4Myw2ICs5OTYsMTQgQEAKIAlpZiAoc3RhdHVzLmhkci50cmFuc19pZCAhPSBhdG9taWNfcmVhZCgmdHJhbnNfaWQpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIHRoZSBsYXN0IHBvc3QgdGltZSB0aGF0IHdlIHNhbXBsZWQgaGFzIGNoYW5nZWQsCisJICogd2UgaGF2ZSByYWNlZCwgZG9uJ3QgcG9zdCB0aGUgc3RhdHVzLgorCSAqLworCWlmIChsYXN0X3Bvc3QgIT0gbGFzdF9wb3N0X3RpbWUpCisJCXJldHVybjsKKworCWxhc3RfcG9zdF90aW1lID0gamlmZmllczsKIAl2bWJ1c19zZW5kcGFja2V0KGRtLT5kZXYtPmNoYW5uZWwsICZzdGF0dXMsCiAJCQkJc2l6ZW9mKHN0cnVjdCBkbV9zdGF0dXMpLAogCQkJCSh1bnNpZ25lZCBsb25nKU5VTEwsCkBAIC0xMTE3LDcgKzExMzgsNyBAQAogCiAJCQlpZiAocmV0ID09IC1FQUdBSU4pCiAJCQkJbXNsZWVwKDIwKTsKLQorCQkJcG9zdF9zdGF0dXMoJmRtX2RldmljZSk7CiAJCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKIAogCQlpZiAocmV0KSB7CkBAIC0xMTQ0LDggKzExNjUsMTAgQEAKIAlzdHJ1Y3QgZG1fdW5iYWxsb29uX3Jlc3BvbnNlIHJlc3A7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmFuZ2VfY291bnQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2VfY291bnQ7IGkrKykgewogCQlmcmVlX2JhbGxvb25fcGFnZXMoZG0sICZyYW5nZV9hcnJheVtpXSk7CisJCXBvc3Rfc3RhdHVzKCZkbV9kZXZpY2UpOworCX0KIAogCWlmIChyZXEtPm1vcmVfcGFnZXMgPT0gMSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaCBiL2RyaXZlcnMvaHYvaHlwZXJ2X3ZtYnVzLmgKaW5kZXggODYwMTM0ZC4uMThkMWE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaAorKysgYi9kcml2ZXJzL2h2L2h5cGVydl92bWJ1cy5oCkBAIC01MTAsNiArNTEwLDExIEBACiAJICogYmFzaXMuCiAJICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0ICpldmVudF9kcGNbTlJfQ1BVU107CisJLyoKKwkgKiBUbyBvcHRpbWl6ZSB0aGUgbWFwcGluZyBvZiByZWxpZCB0byBjaGFubmVsLCBtYWludGFpbgorCSAqIHBlci1jcHUgbGlzdCBvZiB0aGUgY2hhbm5lbHMgYmFzZWQgb24gdGhlaXIgQ1BVIGFmZmluaXR5LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGVyY3B1X2xpc3RbTlJfQ1BVU107CiB9OwogCiBleHRlcm4gc3RydWN0IGh2X2NvbnRleHQgaHZfY29udGV4dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA0YWYwZGE5Li4wMDM0MzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0xMDY1LDYgKzEwNjUsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG50Yy10aGVybWlzdG9yLgogCitjb25maWcgU0VOU09SU19OQ1Q2NjgzCisJdHJpc3RhdGUgIk51dm90b24gTkNUNjY4M0QiCisJZGVwZW5kcyBvbiAhUFBDCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nCisJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBOdXZvdG9uIE5DVDY2ODNEIGVTSU8gY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbmN0NjY4My4KKwogY29uZmlnIFNFTlNPUlNfTkNUNjc3NQogCXRyaXN0YXRlICJOdXZvdG9uIE5DVDY3NzVGIGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uICFQUEMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGM0OGY5ODcuLjExNzk4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMTE0LDYgKzExNCw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19NQVg2Njk3KQkrPSBtYXg2Njk3Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01DMTM3ODNfQURDKSs9IG1jMTM3ODMtYWRjLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01DUDMwMjEpCSs9IG1jcDMwMjEubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTkNUNjY4MykJKz0gbmN0NjY4My5vCiBvYmotJChDT05GSUdfU0VOU09SU19OQ1Q2Nzc1KQkrPSBuY3Q2Nzc1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SKQkrPSBudGNfdGhlcm1pc3Rvci5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3MzYwKQkrPSBwYzg3MzYwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtMTAyOS5jIGIvZHJpdmVycy9od21vbi9hZG0xMDI5LmMKaW5kZXggZDE5Yzc5MC4uNzgzMzllOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDI5LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYWRtMTAyOS5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBDb3JlbnRpbiBMQUJCRSA8Y29yZW50aW4ubGFiYmVAZ2VvbWF0eXMuZnI+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ29yZW50aW4gTEFCQkUgPGNsYWJiZS5tb250am9pZUBnbWFpbC5jb20+CiAgKgogICogQmFzZWQgb24gTE04MyBEcml2ZXIgYnkgSmVhbiBEZWx2YXJlIDxqZGVsdmFyZUBzdXNlLmRlPgogICoKQEAgLTQ0OSw2ICs0NDksNiBAQAogCiBtb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI5X2RyaXZlcik7CiAKLU1PRFVMRV9BVVRIT1IoIkNvcmVudGluIExBQkJFIDxjb3JlbnRpbi5sYWJiZUBnZW9tYXR5cy5mcj4iKTsKK01PRFVMRV9BVVRIT1IoIkNvcmVudGluIExBQkJFIDxjbGFiYmUubW9udGpvaWVAZ21haWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJhZG0xMDI5IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9lbWMxNDAzLmMgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwppbmRleCAwMTcyM2YwLi5hMzdiMjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYworKysgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwpAQCAtMTgsOSArMTgsNiBAQAogICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAqCi0gKiBUT0RPCi0gKgktCWNhY2hlIGFsYXJtIGFuZCBjcml0aWNhbCBsaW1pdCByZWdpc3RlcnMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zMiwyMiArMjksMTggQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgogCiAjZGVmaW5lIFRIRVJNQUxfUElEX1JFRwkJMHhmZAogI2RlZmluZSBUSEVSTUFMX1NNU0NfSURfUkVHCTB4ZmUKICNkZWZpbmUgVEhFUk1BTF9SRVZJU0lPTl9SRUcJMHhmZgogCitlbnVtIGVtYzE0MDNfY2hpcCB7IGVtYzE0MDIsIGVtYzE0MDMsIGVtYzE0MDQgfTsKKwogc3RydWN0IHRoZXJtYWxfZGF0YSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncm91cHNbM107CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCXN0cnVjdCBtdXRleCBtdXRleDsKLQkvKgotCSAqIENhY2hlIHRoZSBoeXN0IHZhbHVlIHNvIHdlIGRvbid0IGtlZXAgcmUtcmVhZGluZyBpdC4gSW4gdGhlb3J5Ci0JICogd2UgY291bGQgY2FjaGUgaXQgZm9yZXZlciBhcyBub2JvZHkgZWxzZSBzaG91bGQgYmUgd3JpdGluZyBpdC4KLQkgKi8KLQl1OCBjYWNoZWRfaHlzdDsKLQl1bnNpZ25lZCBsb25nIGh5c3RfdmFsaWQ7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzWzRdOwogfTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTU1LDEyICs0OCwxMyBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCXN0cnVjdCB0aGVybWFsX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsOwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LCBzZGEtPmluZGV4KTsKKwlyZXR2YWwgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHNkYS0+aW5kZXgsICZ2YWwpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkMDAwXG4iLCByZXR2YWwpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkMDAwXG4iLCB2YWwpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC02OCwxMiArNjIsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CiAJc3RydWN0IHRoZXJtYWxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIHNkYS0+bnIpOworCXJldHZhbCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgc2RhLT5uciwgJnZhbCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHJldHZhbCAmIHNkYS0+aW5kZXgpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgISEodmFsICYgc2RhLT5pbmRleCkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTg2LDggKzgxLDggQEAKIAogCWlmIChrc3RydG91bChidWYsIDEwLCAmdmFsKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dmFsID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIHNkYS0+aW5kZXgsCi0JCQkJCURJVl9ST1VORF9DTE9TRVNUKHZhbCwgMTAwMCkpOworCXJldHZhbCA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsIHNkYS0+aW5kZXgsCisJCQkgICAgICBESVZfUk9VTkRfQ0xPU0VTVCh2YWwsIDEwMDApKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAlyZXR1cm4gY291bnQ7CkBAIC05OCw1MSArOTMsNTEgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CiAJc3RydWN0IHRoZXJtYWxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IHJldHZhbDsKIAogCWlmIChrc3RydG91bChidWYsIDEwLCAmdmFsKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7Ci0JcmV0dmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgc2RhLT5ucik7CisJcmV0dmFsID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPnJlZ21hcCwgc2RhLT5uciwgc2RhLT5pbmRleCwKKwkJCQkgICAgdmFsID8gc2RhLT5pbmRleCA6IDApOwogCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR2YWwgJj0gfnNkYS0+aW5kZXg7Ci0JaWYgKHZhbCkKLQkJcmV0dmFsIHw9IHNkYS0+aW5kZXg7Ci0KLQlyZXR2YWwgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgc2RhLT5pbmRleCwgcmV0dmFsKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHZhbCA9IGNvdW50OwotZmFpbDoKLQltdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsKLQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2h5c3RfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQkJCWJvb2wgaXNfbWluKQogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCXN0cnVjdCB0aGVybWFsX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRhdGEtPnJlZ21hcDsKKwl1bnNpZ25lZCBpbnQgbGltaXQ7CisJdW5zaWduZWQgaW50IGh5c3Q7CiAJaW50IHJldHZhbDsKLQlpbnQgaHlzdDsKIAotCXJldHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHNkYS0+aW5kZXgpOworCXJldHZhbCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgc2RhLT5pbmRleCwgJmxpbWl0KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmh5c3RfdmFsaWQpKSB7Ci0JCWh5c3QgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDIxKTsKLQkJaWYgKGh5c3QgPCAwKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJZGF0YS0+Y2FjaGVkX2h5c3QgPSBoeXN0OwotCQlkYXRhLT5oeXN0X3ZhbGlkID0gamlmZmllcyArIEhaOwotCX0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZDAwMFxuIiwgcmV0dmFsIC0gZGF0YS0+Y2FjaGVkX2h5c3QpOworCXJldHZhbCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgMHgyMSwgJmh5c3QpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQwMDBcbiIsIGlzX21pbiA/IGxpbWl0ICsgaHlzdCA6IGxpbWl0IC0gaHlzdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2hvd19oeXN0X2NvbW1vbihkZXYsIGF0dHIsIGJ1ZiwgZmFsc2UpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X21pbl9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2hvd19oeXN0X2NvbW1vbihkZXYsIGF0dHIsIGJ1ZiwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTUwLDcgKzE0NSw4IEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZGEgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJc3RydWN0IHRoZXJtYWxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGF0YS0+cmVnbWFwOworCXVuc2lnbmVkIGludCBsaW1pdDsKIAlpbnQgcmV0dmFsOwogCWludCBoeXN0OwogCXVuc2lnbmVkIGxvbmcgdmFsOwpAQCAtMTU5LDIzICsxNTUsMTUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7Ci0JcmV0dmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgc2RhLT5pbmRleCk7CisJcmV0dmFsID0gcmVnbWFwX3JlYWQocmVnbWFwLCBzZGEtPmluZGV4LCAmbGltaXQpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQloeXN0ID0gcmV0dmFsICogMTAwMCAtIHZhbDsKLQloeXN0ID0gRElWX1JPVU5EX0NMT1NFU1QoaHlzdCwgMTAwMCk7Ci0JaWYgKGh5c3QgPCAwIHx8IGh5c3QgPiAyNTUpIHsKLQkJcmV0dmFsID0gLUVSQU5HRTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJldHZhbCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDIxLCBoeXN0KTsKLQlpZiAocmV0dmFsID09IDApIHsKKwloeXN0ID0gbGltaXQgKiAxMDAwIC0gdmFsOworCWh5c3QgPSBjbGFtcF92YWwoRElWX1JPVU5EX0NMT1NFU1QoaHlzdCwgMTAwMCksIDAsIDI1NSk7CisJcmV0dmFsID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgMHgyMSwgaHlzdCk7CisJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR2YWwgPSBjb3VudDsKLQkJZGF0YS0+Y2FjaGVkX2h5c3QgPSBoeXN0OwotCQlkYXRhLT5oeXN0X3ZhbGlkID0gamlmZmllcyArIEhaOwotCX0KIGZhaWw6CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTE5OCw2ICsxODYsOCBAQAogCXNob3dfYml0LCBOVUxMLCAweDM1LCAweDAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLAogCXNob3dfYml0LCBOVUxMLCAweDM3LCAweDAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWluX2h5c3QsIFNfSVJVR08sIHNob3dfbWluX2h5c3QsIE5VTEwsIDB4MDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTywgc2hvd19oeXN0LCBOVUxMLCAweDA1KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X2h5c3QsIHN0b3JlX2h5c3QsIDB4MjApOwogCkBAIC0yMDgsMTQgKzE5OCwxNiBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4MTkpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAweDAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19iaXQsIE5VTEwsIDB4MWIsIDB4MDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywKIAlzaG93X2JpdCwgTlVMTCwgMHgzNiwgMHgwMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4X2FsYXJtLCBTX0lSVUdPLAogCXNob3dfYml0LCBOVUxMLCAweDM1LCAweDAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9jcml0X2FsYXJtLCBTX0lSVUdPLAogCXNob3dfYml0LCBOVUxMLCAweDM3LCAweDAyKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwKLQlzaG93X2h5c3QsIHN0b3JlX2h5c3QsIDB4MTkpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW5faHlzdCwgU19JUlVHTywgc2hvd19taW5faHlzdCwgTlVMTCwgMHgwOCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9oeXN0LCBTX0lSVUdPLCBzaG93X2h5c3QsIE5VTEwsIDB4MDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfaHlzdCwgTlVMTCwgMHgxOSk7CiAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4MTYpOwpAQCAtMjI0LDE0ICsyMTYsMTYgQEAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfY3JpdCwgU19JUlVHTyB8IFNfSVdVU1IsCiAJc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDFBKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgyMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfYml0LCBOVUxMLCAweDFiLCAweDA0KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19taW5fYWxhcm0sIFNfSVJVR08sCiAJc2hvd19iaXQsIE5VTEwsIDB4MzYsIDB4MDQpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21heF9hbGFybSwgU19JUlVHTywKIAlzaG93X2JpdCwgTlVMTCwgMHgzNSwgMHgwNCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfY3JpdF9hbGFybSwgU19JUlVHTywKIAlzaG93X2JpdCwgTlVMTCwgMHgzNywgMHgwNCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2NyaXRfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCi0Jc2hvd19oeXN0LCBzdG9yZV9oeXN0LCAweDFBKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfbWluX2h5c3QsIFNfSVJVR08sIHNob3dfbWluX2h5c3QsIE5VTEwsIDB4MTYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXhfaHlzdCwgU19JUlVHTywgc2hvd19oeXN0LCBOVUxMLCAweDE1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfY3JpdF9oeXN0LCBTX0lSVUdPLCBzaG93X2h5c3QsIE5VTEwsIDB4MUEpOwogCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDJEKTsKQEAgLTI0MCw0NCArMjM0LDY2IEBACiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X2NyaXQsIFNfSVJVR08gfCBTX0lXVVNSLAogCXNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHgzMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDB4MkEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X2ZhdWx0LCBTX0lSVUdPLCBzaG93X2JpdCwgTlVMTCwgMHgxYiwgMHgwOCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWluX2FsYXJtLCBTX0lSVUdPLAogCXNob3dfYml0LCBOVUxMLCAweDM2LCAweDA4KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9tYXhfYWxhcm0sIFNfSVJVR08sCiAJc2hvd19iaXQsIE5VTEwsIDB4MzUsIDB4MDgpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X2NyaXRfYWxhcm0sIFNfSVJVR08sCiAJc2hvd19iaXQsIE5VTEwsIDB4MzcsIDB4MDgpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9jcml0X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAotCXNob3dfaHlzdCwgc3RvcmVfaHlzdCwgMHgzMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X21pbl9oeXN0LCBTX0lSVUdPLCBzaG93X21pbl9oeXN0LCBOVUxMLCAweDJEKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfbWF4X2h5c3QsIFNfSVJVR08sIHNob3dfaHlzdCwgTlVMTCwgMHgyQyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X2NyaXRfaHlzdCwgU19JUlVHTywgc2hvd19oeXN0LCBOVUxMLCAweDMwKTsKIAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHBvd2VyX3N0YXRlLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X2JpdCwgc3RvcmVfYml0LCAweDAzLCAweDQwKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmVtYzE0MDNfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplbWMxNDAyX2F0dHJzW10gPSB7CiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW5faHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLAorCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbl9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdF9oeXN0LmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyX3N0YXRlLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZW1jMTQwMl9ncm91cCA9IHsKKwkJLmF0dHJzID0gZW1jMTQwMl9hdHRycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplbWMxNDAzX2F0dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLAorCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfY3JpdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2ZhdWx0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluX2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19jcml0X2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyX3N0YXRlLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMjkwLDkgKzMwNiwxMiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfZmF1bHQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW5faHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CkBAIC0zMDEsNiArMzIwLDM5IEBACiAJLmF0dHJzID0gZW1jMTQwNF9hdHRycywKIH07CiAKKy8qCisgKiBFTUMxNHgyIHVzZXMgYSBkaWZmZXJlbnQgcmVnaXN0ZXIgYW5kIGRpZmZlcmVudCBiaXRzIHRvIHJlcG9ydCBhbGFybSBhbmQKKyAqIGZhdWx0IHN0YXR1cy4gRm9yIHNpbXBsaWNpdHksIHByb3ZpZGUgYSBzZXBhcmF0ZSBhdHRyaWJ1dGUgZ3JvdXAgZm9yIHRoaXMKKyAqIGNoaXAgc2VyaWVzLgorICogU2luY2Ugd2UgY2FuIG5vdCByZS11c2UgdGhlIHNhbWUgYXR0cmlidXRlIG5hbWVzLCBjcmVhdGUgYSBzZXBhcmF0ZSBhdHRyaWJ1dGUKKyAqIGFycmF5LgorICovCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgZW1jMTQwMl9hbGFybXNbXSA9IHsKKwlTRU5TT1JfQVRUUl8yKHRlbXAxX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19iaXQsIE5VTEwsIDB4MDIsIDB4MjApLAorCVNFTlNPUl9BVFRSXzIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2JpdCwgTlVMTCwgMHgwMiwgMHg0MCksCisJU0VOU09SX0FUVFJfMih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2JpdCwgTlVMTCwgMHgwMiwgMHgwMSksCisKKwlTRU5TT1JfQVRUUl8yKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2JpdCwgTlVMTCwgMHgwMiwgMHgwNCksCisJU0VOU09SX0FUVFJfMih0ZW1wMl9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYml0LCBOVUxMLCAweDAyLCAweDA4KSwKKwlTRU5TT1JfQVRUUl8yKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19iaXQsIE5VTEwsIDB4MDIsIDB4MTApLAorCVNFTlNPUl9BVFRSXzIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19iaXQsIE5VTEwsIDB4MDIsIDB4MDIpLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmVtYzE0MDJfYWxhcm1fYXR0cnNbXSA9IHsKKwkmZW1jMTQwMl9hbGFybXNbMF0uZGV2X2F0dHIuYXR0ciwKKwkmZW1jMTQwMl9hbGFybXNbMV0uZGV2X2F0dHIuYXR0ciwKKwkmZW1jMTQwMl9hbGFybXNbMl0uZGV2X2F0dHIuYXR0ciwKKwkmZW1jMTQwMl9hbGFybXNbM10uZGV2X2F0dHIuYXR0ciwKKwkmZW1jMTQwMl9hbGFybXNbNF0uZGV2X2F0dHIuYXR0ciwKKwkmZW1jMTQwMl9hbGFybXNbNV0uZGV2X2F0dHIuYXR0ciwKKwkmZW1jMTQwMl9hbGFybXNbNl0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZW1jMTQwMl9hbGFybV9ncm91cCA9IHsKKwkuYXR0cnMgPSBlbWMxNDAyX2FsYXJtX2F0dHJzLAorfTsKKwogc3RhdGljIGludCBlbWMxNDAzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewpAQCAtMzEzLDkgKzM2NSwxNSBAQAogCiAJaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBUSEVSTUFMX1BJRF9SRUcpOwogCXN3aXRjaCAoaWQpIHsKKwljYXNlIDB4MjA6CisJCXN0cmxjcHkoaW5mby0+dHlwZSwgImVtYzE0MDIiLCBJMkNfTkFNRV9TSVpFKTsKKwkJYnJlYWs7CiAJY2FzZSAweDIxOgogCQlzdHJsY3B5KGluZm8tPnR5cGUsICJlbWMxNDAzIiwgSTJDX05BTUVfU0laRSk7CiAJCWJyZWFrOworCWNhc2UgMHgyMjoKKwkJc3RybGNweShpbmZvLT50eXBlLCAiZW1jMTQyMiIsIEkyQ19OQU1FX1NJWkUpOworCQlicmVhazsKIAljYXNlIDB4MjM6CiAJCXN0cmxjcHkoaW5mby0+dHlwZSwgImVtYzE0MjMiLCBJMkNfTkFNRV9TSVpFKTsKIAkJYnJlYWs7CkBAIC0zMzYsNiArMzk0LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sIGVtYzE0MDNfcmVnbWFwX2lzX3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgMHgwMDoJLyogaW50ZXJuYWwgZGlvZGUgaGlnaCBieXRlICovCisJY2FzZSAweDAxOgkvKiBleHRlcm5hbCBkaW9kZSAxIGhpZ2ggYnl0ZSAqLworCWNhc2UgMHgwMjoJLyogc3RhdHVzICovCisJY2FzZSAweDEwOgkvKiBleHRlcm5hbCBkaW9kZSAxIGxvdyBieXRlICovCisJY2FzZSAweDFiOgkvKiBleHRlcm5hbCBkaW9kZSBmYXVsdCAqLworCWNhc2UgMHgyMzoJLyogZXh0ZXJuYWwgZGlvZGUgMiBoaWdoIGJ5dGUgKi8KKwljYXNlIDB4MjQ6CS8qIGV4dGVybmFsIGRpb2RlIDIgbG93IGJ5dGUgKi8KKwljYXNlIDB4Mjk6CS8qIGludGVybmFsIGRpb2RlIGxvdyBieXRlICovCisJY2FzZSAweDJhOgkvKiBleHRlcm5sIGRpb2RlIDMgaGlnaCBieXRlICovCisJY2FzZSAweDJiOgkvKiBleHRlcm5hbCBkaW9kZSAzIGxvdyBieXRlICovCisJY2FzZSAweDM1OgkvKiBoaWdoIGxpbWl0IHN0YXR1cyAqLworCWNhc2UgMHgzNjoJLyogbG93IGxpbWl0IHN0YXR1cyAqLworCWNhc2UgMHgzNzoJLyogdGhlcm0gbGltaXQgc3RhdHVzICovCisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBlbWMxNDAzX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSA4LAorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJUUkVFLAorCS52b2xhdGlsZV9yZWcgPSBlbWMxNDAzX3JlZ21hcF9pc192b2xhdGlsZSwKK307CisKIHN0YXRpYyBpbnQgZW1jMTQwM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtMzQ3LDEzICs0MzQsMjMgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKLQltdXRleF9pbml0KCZkYXRhLT5tdXRleCk7Ci0JZGF0YS0+aHlzdF92YWxpZCA9IGppZmZpZXMgLSAxOwkJLyogRXhwaXJlZCAqLworCWRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJmVtYzE0MDNfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkYXRhLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5yZWdtYXApOwogCi0JZGF0YS0+Z3JvdXBzWzBdID0gJmVtYzE0MDNfZ3JvdXA7Ci0JaWYgKGlkLT5kcml2ZXJfZGF0YSkKLQkJZGF0YS0+Z3JvdXBzWzFdID0gJmVtYzE0MDRfZ3JvdXA7CisJbXV0ZXhfaW5pdCgmZGF0YS0+bXV0ZXgpOworCisJc3dpdGNoIChpZC0+ZHJpdmVyX2RhdGEpIHsKKwljYXNlIGVtYzE0MDQ6CisJCWRhdGEtPmdyb3Vwc1syXSA9ICZlbWMxNDA0X2dyb3VwOworCWNhc2UgZW1jMTQwMzoKKwkJZGF0YS0+Z3JvdXBzWzFdID0gJmVtYzE0MDNfZ3JvdXA7CisJY2FzZSBlbWMxNDAyOgorCQlkYXRhLT5ncm91cHNbMF0gPSAmZW1jMTQwMl9ncm91cDsKKwl9CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhID09IGVtYzE0MDIpCisJCWRhdGEtPmdyb3Vwc1sxXSA9ICZlbWMxNDAyX2FsYXJtX2dyb3VwOwogCiAJaHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoJmNsaWVudC0+ZGV2LAogCQkJCQkJCSAgIGNsaWVudC0+bmFtZSwgZGF0YSwKQEAgLTM2NiwxNCArNDYzLDIwIEBACiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBlbWMxNDAzX2FkZHJlc3NfbGlzdFtdID0gewotCTB4MTgsIDB4MjksIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5ECisJMHgxOCwgMHgxYywgMHgyOSwgMHg0YywgMHg0ZCwgMHg1YywgSTJDX0NMSUVOVF9FTkQKIH07CiAKKy8qIExhc3QgZGlnaXQgb2YgY2hpcCBuYW1lIGluZGljYXRlcyBudW1iZXIgb2YgY2hhbm5lbHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBlbWMxNDAzX2lkdGFibGVbXSA9IHsKLQl7ICJlbWMxNDAzIiwgMCB9LAotCXsgImVtYzE0MDQiLCAxIH0sCi0JeyAiZW1jMTQyMyIsIDAgfSwKLQl7ICJlbWMxNDI0IiwgMSB9LAorCXsgImVtYzE0MDIiLCBlbWMxNDAyIH0sCisJeyAiZW1jMTQwMyIsIGVtYzE0MDMgfSwKKwl7ICJlbWMxNDA0IiwgZW1jMTQwNCB9LAorCXsgImVtYzE0MTIiLCBlbWMxNDAyIH0sCisJeyAiZW1jMTQxMyIsIGVtYzE0MDMgfSwKKwl7ICJlbWMxNDE0IiwgZW1jMTQwNCB9LAorCXsgImVtYzE0MjIiLCBlbWMxNDAyIH0sCisJeyAiZW1jMTQyMyIsIGVtYzE0MDMgfSwKKwl7ICJlbWMxNDI0IiwgZW1jMTQwNCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBlbWMxNDAzX2lkdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzE4MDVmLmMgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwppbmRleCAzMmY1MTMyLi45ZTU3Yjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwpAQCAtMTM4NywxMCArMTM4Nyw4IEBACiAKIAlkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZjcxODA1Zl9kYXRhKSwKIAkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJcHJfZXJyKCJPdXQgb2YgbWVtb3J5XG4iKTsKKwlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlpZiAoIWRldm1fcmVxdWVzdF9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCArIEFERFJfUkVHX09GRlNFVCwgMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZzc2Mi5jIGIvZHJpdmVycy9od21vbi9nNzYyLmMKaW5kZXggYjRiOGI1Yi4uOThhODYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9nNzYyLmMKKysrIGIvZHJpdmVycy9od21vbi9nNzYyLmMKQEAgLTU4Niw3ICs1ODYsNyBAQAogICovCiAKICNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGc3NjJfZHRfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGc3NjJfZHRfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImdtdCxnNzYyIiB9LAogCXsgLmNvbXBhdGlibGUgPSAiZ210LGc3NjMiIH0sCiAJeyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9ncGlvLWZhbi5jIGIvZHJpdmVycy9od21vbi9ncGlvLWZhbi5jCmluZGV4IDczMTgxYmUuLmJhMzVlNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYworKysgYi9kcml2ZXJzL2h3bW9uL2dwaW8tZmFuLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9ncGlvX2Zhbl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZ3Bpb19mYW5fbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImdwaW8tZmFuIiwgfSwKIAl7fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2libXBleC5jIGIvZHJpdmVycy9od21vbi9pYm1wZXguYwppbmRleCAyMGFiMGZiLi4wMzBlN2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2libXBleC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKQEAgLTQ2MywxMCArNDYzLDggQEAKIAlpbnQgZXJyOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCWRldl9lcnIoZGV2LCAiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgQk1DIGludGVyZmFjZS5cbiIpOworCWlmICghZGF0YSkKIAkJcmV0dXJuOwotCX0KIAogCWRhdGEtPmFkZHJlc3MuYWRkcl90eXBlID0gSVBNSV9TWVNURU1fSU5URVJGQUNFX0FERFJfVFlQRTsKIAlkYXRhLT5hZGRyZXNzLmNoYW5uZWwgPSBJUE1JX0JNQ19DSEFOTkVMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9paW9faHdtb24uYyBiL2RyaXZlcnMvaHdtb24vaWlvX2h3bW9uLmMKaW5kZXggOWZiYjFiMS4uMTRjODJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9paW9faHdtb24uYworKysgYi9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgaWlvX2h3bW9uX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpaW9faHdtb25fb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlpby1od21vbiIsIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9qYzQyLmMgYi9kcml2ZXJzL2h3bW9uL2pjNDIuYwppbmRleCA2MDEzNjExLi4zODhmOGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2pjNDIuYworKysgYi9kcml2ZXJzL2h3bW9uL2pjNDIuYwpAQCAtNjUsNiArNjUsNyBAQAogLyogTWFudWZhY3R1cmVyIElEcyAqLwogI2RlZmluZSBBRFRfTUFOSUQJCTB4MTFkNCAgLyogQW5hbG9nIERldmljZXMgKi8KICNkZWZpbmUgQVRNRUxfTUFOSUQJCTB4MDAxZiAgLyogQXRtZWwgKi8KKyNkZWZpbmUgQVRNRUxfTUFOSUQyCQkweDExMTQJLyogQXRtZWwgKi8KICNkZWZpbmUgTUFYX01BTklECQkweDAwNGQgIC8qIE1heGltICovCiAjZGVmaW5lIElEVF9NQU5JRAkJMHgwMGIzICAvKiBJRFQgKi8KICNkZWZpbmUgTUNQX01BTklECQkweDAwNTQgIC8qIE1pY3JvY2hpcCAqLwpAQCAtODIsNiArODMsOSBAQAogI2RlZmluZSBBVDMwVFMwMF9ERVZJRAkJMHg4MjAxCiAjZGVmaW5lIEFUMzBUUzAwX0RFVklEX01BU0sJMHhmZmZmCiAKKyNkZWZpbmUgQVQzMFRTRTAwNF9ERVZJRAkweDIyMDAKKyNkZWZpbmUgQVQzMFRTRTAwNF9ERVZJRF9NQVNLCTB4ZmZmZgorCiAvKiBJRFQgKi8KICNkZWZpbmUgVFMzMDAwQjNfREVWSUQJCTB4MjkwMyAgLyogQWxzbyBtYXRjaGVzIFRTRTIwMDJCMyAqLwogI2RlZmluZSBUUzMwMDBCM19ERVZJRF9NQVNLCTB4ZmZmZgpAQCAtMTMwLDYgKzEzNCw5IEBACiAjZGVmaW5lIFNUVFMyMDAyX0RFVklECQkweDAzMDAKICNkZWZpbmUgU1RUUzIwMDJfREVWSURfTUFTSwkweGZmZmYKIAorI2RlZmluZSBTVFRTMjAwNF9ERVZJRAkJMHgyMjAxCisjZGVmaW5lIFNUVFMyMDA0X0RFVklEX01BU0sJMHhmZmZmCisKICNkZWZpbmUgU1RUUzMwMDBfREVWSUQJCTB4MDIwMAogI2RlZmluZSBTVFRTMzAwMF9ERVZJRF9NQVNLCTB4ZmZmZgogCkBAIC0xNDQsNiArMTUxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgamM0Ml9jaGlwcyBqYzQyX2NoaXBzW10gPSB7CiAJeyBBRFRfTUFOSUQsIEFEVDc0MDhfREVWSUQsIEFEVDc0MDhfREVWSURfTUFTSyB9LAogCXsgQVRNRUxfTUFOSUQsIEFUMzBUUzAwX0RFVklELCBBVDMwVFMwMF9ERVZJRF9NQVNLIH0sCisJeyBBVE1FTF9NQU5JRDIsIEFUMzBUU0UwMDRfREVWSUQsIEFUMzBUU0UwMDRfREVWSURfTUFTSyB9LAogCXsgSURUX01BTklELCBUUzMwMDBCM19ERVZJRCwgVFMzMDAwQjNfREVWSURfTUFTSyB9LAogCXsgSURUX01BTklELCBUUzMwMDBHQjJfREVWSUQsIFRTMzAwMEdCMl9ERVZJRF9NQVNLIH0sCiAJeyBNQVhfTUFOSUQsIE1BWDY2MDRfREVWSUQsIE1BWDY2MDRfREVWSURfTUFTSyB9LApAQCAtMTU4LDkgKzE2NiwyNSBAQAogCXsgU1RNX01BTklELCBTVFRTNDI0X0RFVklELCBTVFRTNDI0X0RFVklEX01BU0sgfSwKIAl7IFNUTV9NQU5JRCwgU1RUUzQyNEVfREVWSUQsIFNUVFM0MjRFX0RFVklEX01BU0sgfSwKIAl7IFNUTV9NQU5JRCwgU1RUUzIwMDJfREVWSUQsIFNUVFMyMDAyX0RFVklEX01BU0sgfSwKKwl7IFNUTV9NQU5JRCwgU1RUUzIwMDRfREVWSUQsIFNUVFMyMDA0X0RFVklEX01BU0sgfSwKIAl7IFNUTV9NQU5JRCwgU1RUUzMwMDBfREVWSUQsIFNUVFMzMDAwX0RFVklEX01BU0sgfSwKIH07CiAKK2VudW0gdGVtcF9pbmRleCB7CisJdF9pbnB1dCA9IDAsCisJdF9jcml0LAorCXRfbWluLAorCXRfbWF4LAorCXRfbnVtX3RlbXAKK307CisKK3N0YXRpYyBjb25zdCB1OCB0ZW1wX3JlZ3NbdF9udW1fdGVtcF0gPSB7CisJW3RfaW5wdXRdID0gSkM0Ml9SRUdfVEVNUCwKKwlbdF9jcml0XSA9IEpDNDJfUkVHX1RFTVBfQ1JJVElDQUwsCisJW3RfbWluXSA9IEpDNDJfUkVHX1RFTVBfTE9XRVIsCisJW3RfbWF4XSA9IEpDNDJfUkVHX1RFTVBfVVBQRVIsCit9OworCiAvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KIHN0cnVjdCBqYzQyX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CkBAIC0xNzAsNjkgKzE5NCw3IEBACiAJdW5zaWduZWQgbG9uZwlsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIAl1MTYJCW9yaWdfY29uZmlnOwkvKiBvcmlnaW5hbCBjb25maWd1cmF0aW9uICovCiAJdTE2CQljb25maWc7CQkvKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KLQl1MTYJCXRlbXBfaW5wdXQ7CS8qIFRlbXBlcmF0dXJlcyAqLwotCXUxNgkJdGVtcF9jcml0OwotCXUxNgkJdGVtcF9taW47Ci0JdTE2CQl0ZW1wX21heDsKLX07Ci0KLXN0YXRpYyBpbnQgamM0Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBqYzQyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIGludCBqYzQyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLQotc3RhdGljIHN0cnVjdCBqYzQyX2RhdGEgKmpjNDJfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgamM0Ml9pZFtdID0gewotCXsgImpjNDIiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGpjNDJfaWQpOwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgamM0Ml9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlkYXRhLT5jb25maWcgfD0gSkM0Ml9DRkdfU0hVVERPV047Ci0JaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChkYXRhLT5jbGllbnQsIEpDNDJfUkVHX0NPTkZJRywKLQkJCQkgICAgIGRhdGEtPmNvbmZpZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgamM0Ml9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWRhdGEtPmNvbmZpZyAmPSB+SkM0Ml9DRkdfU0hVVERPV047Ci0JaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChkYXRhLT5jbGllbnQsIEpDNDJfUkVHX0NPTkZJRywKLQkJCQkgICAgIGRhdGEtPmNvbmZpZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBqYzQyX2Rldl9wbV9vcHMgPSB7Ci0JLnN1c3BlbmQgPSBqYzQyX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGpjNDJfcmVzdW1lLAotfTsKLQotI2RlZmluZSBKQzQyX0RFVl9QTV9PUFMgKCZqYzQyX2Rldl9wbV9vcHMpCi0jZWxzZQotI2RlZmluZSBKQzQyX0RFVl9QTV9PUFMgTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0vKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgamM0Ml9kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19TUEQsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiamM0MiIsCi0JCS5wbSA9IEpDNDJfREVWX1BNX09QUywKLQl9LAotCS5wcm9iZQkJPSBqYzQyX3Byb2JlLAotCS5yZW1vdmUJCT0gamM0Ml9yZW1vdmUsCi0JLmlkX3RhYmxlCT0gamM0Ml9pZCwKLQkuZGV0ZWN0CQk9IGpjNDJfZGV0ZWN0LAotCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAorCXUxNgkJdGVtcFt0X251bV90ZW1wXTsvKiBUZW1wZXJhdHVyZXMgKi8KIH07CiAKICNkZWZpbmUgSkM0Ml9URU1QX01JTl9FWFRFTkRFRAkoLTQwMDAwKQpAQCAtMjYxLDgwICsyMjMsODIgQEAKIAlyZXR1cm4gcmVnICogMTI1IC8gMjsKIH0KIAotLyogc3lzZnMgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgamM0Ml9kYXRhICpqYzQyX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCXN0cnVjdCBqYzQyX2RhdGEgKnJldCA9IGRhdGE7CisJaW50IGksIHZhbDsKIAotLyogcmVhZCByb3V0aW5lcyBmb3IgdGVtcGVyYXR1cmUgbGltaXRzICovCi0jZGVmaW5lIHNob3codmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKLQkJCSAgICBjaGFyICpidWYpCQkJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBqYzQyX3VwZGF0ZV9kZXZpY2UoZGV2KTsJCVwKLQlpZiAoSVNfRVJSKGRhdGEpKQkJCQkJCVwKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGpjNDJfdGVtcF9mcm9tX3JlZyhkYXRhLT52YWx1ZSkpOwlcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdF9udW1fdGVtcDsgaSsrKSB7CisJCQl2YWwgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCB0ZW1wX3JlZ3NbaV0pOworCQkJaWYgKHZhbCA8IDApIHsKKwkJCQlyZXQgPSBFUlJfUFRSKHZhbCk7CisJCQkJZ290byBhYm9ydDsKKwkJCX0KKwkJCWRhdGEtPnRlbXBbaV0gPSB2YWw7CisJCX0KKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSB0cnVlOworCX0KK2Fib3J0OgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKLXNob3codGVtcF9pbnB1dCk7Ci1zaG93KHRlbXBfY3JpdCk7Ci1zaG93KHRlbXBfbWluKTsKLXNob3codGVtcF9tYXgpOworLyogc3lzZnMgZnVuY3Rpb25zICovCiAKLS8qIHJlYWQgcm91dGluZXMgZm9yIGh5c3RlcmVzaXMgdmFsdWVzICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfY3JpdF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgY2hhciAqYnVmKQogeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gamM0Ml91cGRhdGVfZGV2aWNlKGRldik7CisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICBqYzQyX3RlbXBfZnJvbV9yZWcoZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGpjNDJfdXBkYXRlX2RldmljZShkZXYpOwogCWludCB0ZW1wLCBoeXN0OwogCiAJaWYgKElTX0VSUihkYXRhKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CiAKLQl0ZW1wID0gamM0Ml90ZW1wX2Zyb21fcmVnKGRhdGEtPnRlbXBfY3JpdCk7CisJdGVtcCA9IGpjNDJfdGVtcF9mcm9tX3JlZyhkYXRhLT50ZW1wW2F0dHItPmluZGV4XSk7CiAJaHlzdCA9IGpjNDJfaHlzdGVyZXNpc1soZGF0YS0+Y29uZmlnICYgSkM0Ml9DRkdfSFlTVF9NQVNLKQogCQkJICAgICAgID4+IEpDNDJfQ0ZHX0hZU1RfU0hJRlRdOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wIC0gaHlzdCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9tYXhfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBqYzQyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlpbnQgdGVtcCwgaHlzdDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnIsIHJldCA9IGNvdW50OworCWludCBuciA9IGF0dHItPmluZGV4OworCWxvbmcgdmFsOwogCi0JaWYgKElTX0VSUihkYXRhKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7Ci0KLQl0ZW1wID0gamM0Ml90ZW1wX2Zyb21fcmVnKGRhdGEtPnRlbXBfbWF4KTsKLQloeXN0ID0gamM0Ml9oeXN0ZXJlc2lzWyhkYXRhLT5jb25maWcgJiBKQzQyX0NGR19IWVNUX01BU0spCi0JCQkgICAgICAgPj4gSkM0Ml9DRkdfSFlTVF9TSElGVF07Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXAgLSBoeXN0KTsKKwlpZiAoa3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT50ZW1wW25yXSA9IGpjNDJfdGVtcF90b19yZWcodmFsLCBkYXRhLT5leHRlbmRlZCk7CisJZXJyID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChkYXRhLT5jbGllbnQsIHRlbXBfcmVnc1tucl0sCisJCQkJCSAgIGRhdGEtPnRlbXBbbnJdKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0ID0gZXJyOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKLS8qIHdyaXRlIHJvdXRpbmVzICovCi0jZGVmaW5lIHNldCh2YWx1ZSwgcmVnKQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKLQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAotCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IGVyciwgcmV0ID0gY291bnQ7CQkJCQkJXAotCWxvbmcgdmFsOwkJCQkJCQlcCi0JaWYgKGtzdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQkJXAotCWRhdGEtPnZhbHVlID0gamM0Ml90ZW1wX3RvX3JlZyh2YWwsIGRhdGEtPmV4dGVuZGVkKTsJCVwKLQllcnIgPSBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwgcmVnLCBkYXRhLT52YWx1ZSk7IFwKLQlpZiAoZXJyIDwgMCkJCQkJCQkJXAotCQlyZXQgPSBlcnI7CQkJCQkJXAotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi1zZXQodGVtcF9taW4sIEpDNDJfUkVHX1RFTVBfTE9XRVIpOwotc2V0KHRlbXBfbWF4LCBKQzQyX1JFR19URU1QX1VQUEVSKTsKLXNldCh0ZW1wX2NyaXQsIEpDNDJfUkVHX1RFTVBfQ1JJVElDQUwpOwotCiAvKgogICogSkM0Mi40IGNvbXBsaWFudCBjaGlwcyBvbmx5IHN1cHBvcnQgZm91ciBoeXN0ZXJlc2lzIHZhbHVlcy4KICAqIFBpY2sgYmVzdCBjaG9pY2UgYW5kIGdvIGZyb20gdGhlcmUuCkBAIC0zNTIsNyArMzE2LDcgQEAKIAlpZiAoa3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRpZmYgPSBqYzQyX3RlbXBfZnJvbV9yZWcoZGF0YS0+dGVtcF9jcml0KSAtIHZhbDsKKwlkaWZmID0gamM0Ml90ZW1wX2Zyb21fcmVnKGRhdGEtPnRlbXBbdF9jcml0XSkgLSB2YWw7CiAJaHlzdCA9IDA7CiAJaWYgKGRpZmYgPiAwKSB7CiAJCWlmIChkaWZmIDwgMjI1MCkKQEAgLTM4NCwyNSArMzQ4LDIwIEBACiAJaWYgKElTX0VSUihkYXRhKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CiAKLQl2YWwgPSBkYXRhLT50ZW1wX2lucHV0OworCXZhbCA9IGRhdGEtPnRlbXBbdF9pbnB1dF07CiAJaWYgKGJpdCAhPSBKQzQyX0FMQVJNX0NSSVRfQklUICYmIChkYXRhLT5jb25maWcgJiBKQzQyX0NGR19DUklUX09OTFkpKQogCQl2YWwgPSAwOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAodmFsID4+IGJpdCkgJiAxKTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfaW5wdXQsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVJVR08sCi0JCSAgIHNob3dfdGVtcF9jcml0LCBzZXRfdGVtcF9jcml0KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVJVR08sCi0JCSAgIHNob3dfdGVtcF9taW4sIHNldF90ZW1wX21pbik7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCB0X2lucHV0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wLCBzZXRfdGVtcCwgdF9jcml0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lSVUdPLCBzaG93X3RlbXAsIHNldF90ZW1wLCB0X21pbik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywgc2hvd190ZW1wLCBzZXRfdGVtcCwgdF9tYXgpOwogCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfY3JpdF9oeXN0LCBzZXRfdGVtcF9jcml0X2h5c3QpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfbWF4X2h5c3QsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcF9oeXN0LAorCQkJICBzZXRfdGVtcF9jcml0X2h5c3QsIHRfY3JpdCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPLCBzaG93X3RlbXBfaHlzdCwgTlVMTCwgdF9tYXgpOwogCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCiAJCQkgIEpDNDJfQUxBUk1fQ1JJVF9CSVQpOwpAQCAtNDEyLDEyICszNzEsMTIgQEAKIAkJCSAgSkM0Ml9BTEFSTV9NQVhfQklUKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmpjNDJfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21pbi5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCkBAIC00MzIsMTIgKzM5MSwxMiBAQAogCXVuc2lnbmVkIGludCBjb25maWcgPSBkYXRhLT5jb25maWc7CiAJYm9vbCByZWFkb25seTsKIAotCWlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIpCisJaWYgKGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyLmF0dHIpCiAJCXJlYWRvbmx5ID0gY29uZmlnICYgSkM0Ml9DRkdfVENSSVRfTE9DSzsKLQllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9taW4uYXR0ciB8fAotCQkgYXR0ciA9PSAmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIpCisJZWxzZSBpZiAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyIHx8CisJCSBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIpCiAJCXJlYWRvbmx5ID0gY29uZmlnICYgSkM0Ml9DRkdfRVZFTlRfTE9DSzsKLQllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuYXR0cikKKwllbHNlIGlmIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyLmF0dHIpCiAJCXJlYWRvbmx5ID0gY29uZmlnICYgKEpDNDJfQ0ZHX0VWRU5UX0xPQ0sgfCBKQzQyX0NGR19UQ1JJVF9MT0NLKTsKIAllbHNlCiAJCXJlYWRvbmx5ID0gdHJ1ZTsKQEAgLTUzNyw1MyArNDk2LDU3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgamM0Ml9kYXRhICpqYzQyX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQorI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IGpjNDJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7Ci0Jc3RydWN0IGpjNDJfZGF0YSAqcmV0ID0gZGF0YTsKLQlpbnQgdmFsOwogCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewotCQl2YWwgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCBKQzQyX1JFR19URU1QKTsKLQkJaWYgKHZhbCA8IDApIHsKLQkJCXJldCA9IEVSUl9QVFIodmFsKTsKLQkJCWdvdG8gYWJvcnQ7Ci0JCX0KLQkJZGF0YS0+dGVtcF9pbnB1dCA9IHZhbDsKLQotCQl2YWwgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LAotCQkJCQkJICBKQzQyX1JFR19URU1QX0NSSVRJQ0FMKTsKLQkJaWYgKHZhbCA8IDApIHsKLQkJCXJldCA9IEVSUl9QVFIodmFsKTsKLQkJCWdvdG8gYWJvcnQ7Ci0JCX0KLQkJZGF0YS0+dGVtcF9jcml0ID0gdmFsOwotCi0JCXZhbCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChjbGllbnQsIEpDNDJfUkVHX1RFTVBfTE9XRVIpOwotCQlpZiAodmFsIDwgMCkgewotCQkJcmV0ID0gRVJSX1BUUih2YWwpOwotCQkJZ290byBhYm9ydDsKLQkJfQotCQlkYXRhLT50ZW1wX21pbiA9IHZhbDsKLQotCQl2YWwgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCBKQzQyX1JFR19URU1QX1VQUEVSKTsKLQkJaWYgKHZhbCA8IDApIHsKLQkJCXJldCA9IEVSUl9QVFIodmFsKTsKLQkJCWdvdG8gYWJvcnQ7Ci0JCX0KLQkJZGF0YS0+dGVtcF9tYXggPSB2YWw7Ci0KLQkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKLQkJZGF0YS0+dmFsaWQgPSB0cnVlOwotCX0KLWFib3J0OgotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiByZXQ7CisJZGF0YS0+Y29uZmlnIHw9IEpDNDJfQ0ZHX1NIVVRET1dOOworCWkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoZGF0YS0+Y2xpZW50LCBKQzQyX1JFR19DT05GSUcsCisJCQkJICAgICBkYXRhLT5jb25maWcpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGpjNDJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkYXRhLT5jb25maWcgJj0gfkpDNDJfQ0ZHX1NIVVRET1dOOworCWkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoZGF0YS0+Y2xpZW50LCBKQzQyX1JFR19DT05GSUcsCisJCQkJICAgICBkYXRhLT5jb25maWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgamM0Ml9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gamM0Ml9zdXNwZW5kLAorCS5yZXN1bWUgPSBqYzQyX3Jlc3VtZSwKK307CisKKyNkZWZpbmUgSkM0Ml9ERVZfUE1fT1BTICgmamM0Ml9kZXZfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgSkM0Ml9ERVZfUE1fT1BTIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGpjNDJfaWRbXSA9IHsKKwl7ICJqYzQyIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBqYzQyX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGpjNDJfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfU1BELAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImpjNDIiLAorCQkucG0gPSBKQzQyX0RFVl9QTV9PUFMsCisJfSwKKwkucHJvYmUJCT0gamM0Ml9wcm9iZSwKKwkucmVtb3ZlCQk9IGpjNDJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGpjNDJfaWQsCisJLmRldGVjdAkJPSBqYzQyX2RldGVjdCwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKK307CisKIG1vZHVsZV9pMmNfZHJpdmVyKGpjNDJfZHJpdmVyKTsKIAogTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTcwLmMgYi9kcml2ZXJzL2h3bW9uL2xtNzAuYwppbmRleCA1MDVhNTllLi45NzIwNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzAuYwpAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBMTTcwX0NISVBfTE03NAkJMwkvKiBOUyBMTTc0ICovCiAKIHN0cnVjdCBsbTcwIHsKLQlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAl1bnNpZ25lZCBpbnQgY2hpcDsKIH07CkBAIC01NiwxMSArNTYsMTEgQEAKIHN0YXRpYyBzc2l6ZV90IGxtNzBfc2Vuc2VfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbG03MCAqcF9sbTcwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHBfbG03MC0+c3BpOwogCWludCBzdGF0dXMsIHZhbCA9IDA7CiAJdTggcnhidWZbMl07CiAJczE2IHJhdyA9IDA7Ci0Jc3RydWN0IGxtNzAgKnBfbG03MCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcF9sbTcwLT5sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTEyMSwyMSArMTIxLDIwIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgbG03MF9zZW5zZV90ZW1wLCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3QgbG03MF9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICAgICAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdG9fc3BpX2RldmljZShkZXYpLT5tb2RhbGlhcyk7Ci19CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG03MF9hdHRyc1tdID0geworCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCU5VTEwKK307CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBsbTcwX3Nob3dfbmFtZSwgTlVMTCk7CitBVFRSSUJVVEVfR1JPVVBTKGxtNzApOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGxtNzBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgY2hpcCA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlzdHJ1Y3QgbG03MCAqcF9sbTcwOwotCWludCBzdGF0dXM7CiAKIAkvKiBzaWduYWxpbmcgaXMgU1BJX01PREVfMCAqLwogCWlmIChzcGktPm1vZGUgJiAoU1BJX0NQT0wgfCBTUElfQ1BIQSkpCkBAIC0xNDksNDYgKzE0OCwxNCBAQAogCiAJbXV0ZXhfaW5pdCgmcF9sbTcwLT5sb2NrKTsKIAlwX2xtNzAtPmNoaXAgPSBjaGlwOworCXBfbG03MC0+c3BpID0gc3BpOwogCi0Jc3BpX3NldF9kcnZkYXRhKHNwaSwgcF9sbTcwKTsKLQotCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBvdXRfZGV2X2NyZWF0ZV90ZW1wX2ZpbGVfZmFpbGVkOwotCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIG91dF9kZXZfY3JlYXRlX2ZpbGVfZmFpbGVkOwotCi0JLyogc3lzZnMgaG9vayAqLwotCXBfbG03MC0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZzcGktPmRldik7Ci0JaWYgKElTX0VSUihwX2xtNzAtPmh3bW9uX2RldikpIHsKLQkJZGV2X2RiZygmc3BpLT5kZXYsICJod21vbl9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkLlxuIik7Ci0JCXN0YXR1cyA9IFBUUl9FUlIocF9sbTcwLT5od21vbl9kZXYpOwotCQlnb3RvIG91dF9kZXZfcmVnX2ZhaWxlZDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2Rldl9yZWdfZmFpbGVkOgotCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLW91dF9kZXZfY3JlYXRlX2ZpbGVfZmFpbGVkOgotCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci1vdXRfZGV2X2NyZWF0ZV90ZW1wX2ZpbGVfZmFpbGVkOgotCXJldHVybiBzdGF0dXM7CisJaHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoJnNwaS0+ZGV2LAorCQkJCQkJCSAgIHNwaS0+bW9kYWxpYXMsCisJCQkJCQkJICAgcF9sbTcwLCBsbTcwX2dyb3Vwcyk7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCi1zdGF0aWMgaW50IGxtNzBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IGxtNzAgKnBfbG03MCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwotCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIocF9sbTcwLT5od21vbl9kZXYpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX25hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGxtNzBfaWRzW10gPSB7CiAJeyAibG03MCIsICAgTE03MF9DSElQX0xNNzAgfSwKIAl7ICJ0bXAxMjEiLCBMTTcwX0NISVBfVE1QMTIxIH0sCkBAIC0yMDUsNyArMTcyLDYgQEAKIAl9LAogCS5pZF90YWJsZSA9IGxtNzBfaWRzLAogCS5wcm9iZQk9IGxtNzBfcHJvYmUsCi0JLnJlbW92ZQk9IGxtNzBfcmVtb3ZlLAogfTsKIAogbW9kdWxlX3NwaV9kcml2ZXIobG03MF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCA4NGE1NWVhLi40NzlmZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtNzIsNiArNzIsNyBAQAogCiAvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KIHN0cnVjdCBsbTc1X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CiAJc3RydWN0IGRldmljZQkJKmh3bW9uX2RldjsKIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZQkqdHo7CiAJc3RydWN0IG11dGV4CQl1cGRhdGVfbG9jazsKQEAgLTEzMCw4ICsxMzEsOCBAQAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBsbTc1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbG03NV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIHRlbXA7CiAJaW50IGVycm9yOwpAQCAtMTY1LDE3ICsxNjYsMTQgQEAKIAkJCXNob3dfdGVtcCwgc2V0X3RlbXAsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtNzVfYXR0cmlidXRlc1tdID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtNzVfYXR0cnNbXSA9IHsKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCiAKIAlOVUxMCiB9OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTc1X2dyb3VwID0gewotCS5hdHRycyA9IGxtNzVfYXR0cmlidXRlcywKLX07CitBVFRSSUJVVEVfR1JPVVBTKGxtNzUpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTg0LDYgKzE4Miw3IEBACiBzdGF0aWMgaW50CiBsbTc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAJc3RydWN0IGxtNzVfZGF0YSAqZGF0YTsKIAlpbnQgc3RhdHVzOwogCXU4IHNldF9tYXNrLCBjbHJfbWFzazsKQEAgLTE5NCwxMCArMTkzLDExIEBACiAJCQlJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQogCQlyZXR1cm4gLUVJTzsKIAotCWRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IGxtNzVfZGF0YSksIEdGUF9LRVJORUwpOworCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGxtNzVfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC0yNjksNyArMjY5LDcgQEAKIAkvKiBjb25maWd1cmUgYXMgc3BlY2lmaWVkICovCiAJc3RhdHVzID0gbG03NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE03NV9SRUdfQ09ORik7CiAJaWYgKHN0YXR1cyA8IDApIHsKLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJDYW4ndCByZWFkIGNvbmZpZz8gJWRcbiIsIHN0YXR1cyk7CisJCWRldl9kYmcoZGV2LCAiQ2FuJ3QgcmVhZCBjb25maWc/ICVkXG4iLCBzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAlkYXRhLT5vcmlnX2NvbmYgPSBzdGF0dXM7CkBAIC0yNzcsNDMgKzI3NywzMiBAQAogCW5ldyB8PSBzZXRfbWFzazsKIAlpZiAoc3RhdHVzICE9IG5ldykKIAkJbG03NV93cml0ZV92YWx1ZShjbGllbnQsIExNNzVfUkVHX0NPTkYsIG5ldyk7Ci0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJDb25maWcgJTAyeFxuIiwgbmV3KTsKKwlkZXZfZGJnKGRldiwgIkNvbmZpZyAlMDJ4XG4iLCBuZXcpOwogCi0JLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc1X2dyb3VwKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKKwkJCQkJCQkgICAgZGF0YSwgbG03NV9ncm91cHMpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKIAotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gZXhpdF9yZW1vdmU7Ci0JfQotCi0JZGF0YS0+dHogPSB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwKKwlkYXRhLT50eiA9IHRoZXJtYWxfem9uZV9vZl9zZW5zb3JfcmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2LAogCQkJCQkJICAgMCwKLQkJCQkJCSAgICZjbGllbnQtPmRldiwKKwkJCQkJCSAgIGRhdGEtPmh3bW9uX2RldiwKIAkJCQkJCSAgIGxtNzVfcmVhZF90ZW1wLCBOVUxMKTsKIAlpZiAoSVNfRVJSKGRhdGEtPnR6KSkKIAkJZGF0YS0+dHogPSBOVUxMOwogCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiJXM6IHNlbnNvciAnJXMnXG4iLAorCWRldl9pbmZvKGRldiwgIiVzOiBzZW5zb3IgJyVzJ1xuIiwKIAkJIGRldl9uYW1lKGRhdGEtPmh3bW9uX2RldiksIGNsaWVudC0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKLQotZXhpdF9yZW1vdmU6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03NV9ncm91cCk7Ci0JcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBsbTc1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBsbTc1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3RlcigmY2xpZW50LT5kZXYsIGRhdGEtPnR6KTsKKwl0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2LCBkYXRhLT50eik7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc1X2dyb3VwKTsKIAlsbTc1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE03NV9SRUdfQ09ORiwgZGF0YS0+b3JpZ19jb25mKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNyw4ICs0OTYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGxtNzVfZGF0YSAqbG03NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBsbTc1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbG03NV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlzdHJ1Y3QgbG03NV9kYXRhICpyZXQgPSBkYXRhOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc3LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwppbmRleCA1MDI3NzFjLi41Y2ViNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwpAQCAtMTksMTAgKzE5LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDcsNTAgKzQzLDMzIEBACiAjZGVmaW5lIExNNzdfUkVHX1RFTVBfTUlOCTB4MDQKICNkZWZpbmUgTE03N19SRUdfVEVNUF9NQVgJMHgwNQogCitlbnVtIHRlbXBfaW5kZXggeworCXRfaW5wdXQgPSAwLAorCXRfY3JpdCwKKwl0X21pbiwKKwl0X21heCwKKwl0X2h5c3QsCisJdF9udW1fdGVtcAorfTsKKworc3RhdGljIGNvbnN0IHU4IHRlbXBfcmVnc1t0X251bV90ZW1wXSA9IHsKKwlbdF9pbnB1dF0gPSBMTTc3X1JFR19URU1QLAorCVt0X21pbl0gPSBMTTc3X1JFR19URU1QX01JTiwKKwlbdF9tYXhdID0gTE03N19SRUdfVEVNUF9NQVgsCisJW3RfY3JpdF0gPSBMTTc3X1JFR19URU1QX0NSSVQsCisJW3RfaHlzdF0gPSBMTTc3X1JFR19URU1QX0hZU1QsCit9OworCiAvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KIHN0cnVjdCBsbTc3X2RhdGEgewotCXN0cnVjdCBkZXZpY2UJCSpod21vbl9kZXY7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKIAlzdHJ1Y3QgbXV0ZXgJCXVwZGF0ZV9sb2NrOwogCWNoYXIJCQl2YWxpZDsKIAl1bnNpZ25lZCBsb25nCQlsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KLQlpbnQJCQl0ZW1wX2lucHV0OwkvKiBUZW1wZXJhdHVyZXMgKi8KLQlpbnQJCQl0ZW1wX2NyaXQ7Ci0JaW50CQkJdGVtcF9taW47Ci0JaW50CQkJdGVtcF9tYXg7Ci0JaW50CQkJdGVtcF9oeXN0OworCWludAkJCXRlbXBbdF9udW1fdGVtcF07IC8qIGluZGV4IHVzaW5nIHRlbXBfaW5kZXggKi8KIAl1OAkJCWFsYXJtczsKIH07CiAKLXN0YXRpYyBpbnQgbG03N19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBsbTc3X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgbG03N19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLXN0YXRpYyBpbnQgbG03N19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgdTE2IGxtNzdfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOwotc3RhdGljIGludCBsbTc3X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTE2IHZhbHVlKTsKLQotc3RhdGljIHN0cnVjdCBsbTc3X2RhdGEgKmxtNzdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTc3X2lkW10gPSB7Ci0JeyAibG03NyIsIDAgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG03N19pZCk7Ci0KLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTc3X2RyaXZlciA9IHsKLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gImxtNzciLAotCX0sCi0JLnByb2JlCQk9IGxtNzdfcHJvYmUsCi0JLnJlbW92ZQkJPSBsbTc3X3JlbW92ZSwKLQkuaWRfdGFibGUJPSBsbTc3X2lkLAotCS5kZXRlY3QJCT0gbG03N19kZXRlY3QsCi0JLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCi19OwotCiAvKiBzdHJhaWdodCBmcm9tIHRoZSBkYXRhc2hlZXQgKi8KICNkZWZpbmUgTE03N19URU1QX01JTiAoLTU1MDAwKQogI2RlZmluZSBMTTc3X1RFTVBfTUFYIDEyNTAwMApAQCAtMTEwLDk3ICs4OSwxMDkgQEAKIAlyZXR1cm4gKHJlZyAvIDgpICogNTAwOwogfQogCisvKgorICogQWxsIHJlZ2lzdGVycyBhcmUgd29yZC1zaXplZCwgZXhjZXB0IGZvciB0aGUgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KKyAqIFRoZSBMTTc3IHVzZXMgdGhlIGhpZ2gtYnl0ZSBmaXJzdCBjb252ZW50aW9uLgorICovCitzdGF0aWMgdTE2IGxtNzdfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCit7CisJaWYgKHJlZyA9PSBMTTc3X1JFR19DT05GKQorCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwllbHNlCisJCXJldHVybiBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCByZWcpOworfQorCitzdGF0aWMgaW50IGxtNzdfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJaWYgKHJlZyA9PSBMTTc3X1JFR19DT05GKQorCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworCWVsc2UKKwkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIHN0cnVjdCBsbTc3X2RhdGEgKmxtNzdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxtNzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKKwkgICAgfHwgIWRhdGEtPnZhbGlkKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgbG03NyB1cGRhdGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdF9udW1fdGVtcDsgaSsrKSB7CisJCQlkYXRhLT50ZW1wW2ldID0KKwkJCSAgTE03N19URU1QX0ZST01fUkVHKGxtNzdfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCQkJICAgICB0ZW1wX3JlZ3NbaV0pKTsKKwkJfQorCQlkYXRhLT5hbGFybXMgPQorCQkJbG03N19yZWFkX3ZhbHVlKGNsaWVudCwgTE03N19SRUdfVEVNUCkgJiAweDAwMDc7CisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCiAvKiBzeXNmcyBzdHVmZiAqLwogCi0vKiByZWFkIHJvdXRpbmVzIGZvciB0ZW1wZXJhdHVyZSBsaW1pdHMgKi8KLSNkZWZpbmUgc2hvdyh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCSAgICBjaGFyICpidWYpCQkJCVwKLXsJCQkJCQkJCVwKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gbG03N191cGRhdGVfZGV2aWNlKGRldik7CVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dmFsdWUpOwkJXAotfQotCi1zaG93KHRlbXBfaW5wdXQpOwotc2hvdyh0ZW1wX2NyaXQpOwotc2hvdyh0ZW1wX21pbik7Ci1zaG93KHRlbXBfbWF4KTsKLQotLyogcmVhZCByb3V0aW5lcyBmb3IgaHlzdGVyZXNpcyB2YWx1ZXMgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9jcml0X2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSBjaGFyICpidWYpCiB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTc3X2RhdGEgKmRhdGEgPSBsbTc3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGVtcF9jcml0IC0gZGF0YS0+dGVtcF9oeXN0KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wW2F0dHItPmluZGV4XSk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWluX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtNzdfZGF0YSAqZGF0YSA9IGxtNzdfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wX21pbiArIGRhdGEtPnRlbXBfaHlzdCk7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisJaW50IHRlbXA7CisKKwl0ZW1wID0gbnIgPT0gdF9taW4gPyBkYXRhLT50ZW1wW25yXSArIGRhdGEtPnRlbXBbdF9oeXN0XSA6CisJCQkgICAgIGRhdGEtPnRlbXBbbnJdIC0gZGF0YS0+dGVtcFt0X2h5c3RdOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwogfQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gbG03N191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXBfbWF4IC0gZGF0YS0+dGVtcF9oeXN0KTsKLX0KLQotLyogd3JpdGUgcm91dGluZXMgKi8KLSNkZWZpbmUgc2V0KHZhbHVlLCByZWcpCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwkJCVwKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CQlcCi0JbG9uZyB2YWw7CQkJCQkJCVwKLQlpbnQgZXJyID0ga3N0cnRvbChidWYsIDEwLCAmdmFsKTsJCQkJXAotCWlmIChlcnIpCQkJCQkJCVwKLQkJcmV0dXJuIGVycjsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQkJXAotCWRhdGEtPnZhbHVlID0gdmFsOwkJCQkJCVwKLQlsbTc3X3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBMTTc3X1RFTVBfVE9fUkVHKGRhdGEtPnZhbHVlKSk7CVwKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQotCi1zZXQodGVtcF9taW4sIExNNzdfUkVHX1RFTVBfTUlOKTsKLXNldCh0ZW1wX21heCwgTE03N19SRUdfVEVNUF9NQVgpOwotCi0vKgotICogaHlzdGVyZXNpcyBpcyBzdG9yZWQgYXMgYSByZWxhdGl2ZSB2YWx1ZSBvbiB0aGUgY2hpcCwgc28gaXQgaGFzIHRvIGJlCi0gKiBjb252ZXJ0ZWQgZmlyc3QKLSAqLwotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfY3JpdF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBsbTc3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCWludCBuciA9IGF0dHItPmluZGV4OworCWxvbmcgdmFsOwogCWludCBlcnI7CiAKLQllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwllcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+dGVtcF9oeXN0ID0gZGF0YS0+dGVtcF9jcml0IC0gdmFsOwotCWxtNzdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc3X1JFR19URU1QX0hZU1QsCi0JCQkgTE03N19URU1QX1RPX1JFRyhkYXRhLT50ZW1wX2h5c3QpKTsKKwlkYXRhLT50ZW1wW25yXSA9IHZhbDsKKwlsbTc3X3dyaXRlX3ZhbHVlKGNsaWVudCwgdGVtcF9yZWdzW25yXSwgTE03N19URU1QX1RPX1JFRyh2YWwpKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLS8qIHByZXNlcnZlIGh5c3RlcmVzaXMgd2hlbiBzZXR0aW5nIFRfY3JpdCAqLwotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfY3JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorLyoKKyAqIGh5c3RlcmVzaXMgaXMgc3RvcmVkIGFzIGEgcmVsYXRpdmUgdmFsdWUgb24gdGhlIGNoaXAsIHNvIGl0IGhhcyB0byBiZQorICogY29udmVydGVkIGZpcnN0LgorICovCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGxtNzdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBvbGRjcml0aHlzdDsKKwlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgZXJyOwogCkBAIC0yMDksMTMgKzIwMCw5IEBACiAJCXJldHVybiBlcnI7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0Jb2xkY3JpdGh5c3QgPSBkYXRhLT50ZW1wX2NyaXQgLSBkYXRhLT50ZW1wX2h5c3Q7Ci0JZGF0YS0+dGVtcF9jcml0ID0gdmFsOwotCWRhdGEtPnRlbXBfaHlzdCA9IGRhdGEtPnRlbXBfY3JpdCAtIG9sZGNyaXRoeXN0OwotCWxtNzdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc3X1JFR19URU1QX0NSSVQsCi0JCQkgTE03N19URU1QX1RPX1JFRyhkYXRhLT50ZW1wX2NyaXQpKTsKKwlkYXRhLT50ZW1wW3RfaHlzdF0gPSBkYXRhLT50ZW1wW3RfY3JpdF0gLSB2YWw7CiAJbG03N193cml0ZV92YWx1ZShjbGllbnQsIExNNzdfUkVHX1RFTVBfSFlTVCwKLQkJCSBMTTc3X1RFTVBfVE9fUkVHKGRhdGEtPnRlbXBfaHlzdCkpOworCQkJIExNNzdfVEVNUF9UT19SRUcoZGF0YS0+dGVtcFt0X2h5c3RdKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjI4LDQzICsyMTUsMzcgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfaW5wdXQsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfY3JpdCwgc2V0X3RlbXBfY3JpdCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgc2hvd190ZW1wX21pbiwgc2V0X3RlbXBfbWluKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCB0X2lucHV0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwgc2V0X3RlbXAsCisJCQkgIHRfY3JpdCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwgc2V0X3RlbXAsCisJCQkgIHRfbWluKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wLCBzZXRfdGVtcCwKKwkJCSAgdF9tYXgpOwogCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgc2hvd190ZW1wX2NyaXRfaHlzdCwgc2V0X3RlbXBfY3JpdF9oeXN0KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW5faHlzdCwgU19JUlVHTywKLQkJICAgc2hvd190ZW1wX21pbl9oeXN0LCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTywKLQkJICAgc2hvd190ZW1wX21heF9oeXN0LCBOVUxMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX2h5c3QsCisJCQkgIHNldF90ZW1wX2h5c3QsIHRfY3JpdCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbl9oeXN0LCBTX0lSVUdPLCBzaG93X3RlbXBfaHlzdCwgTlVMTCwgdF9taW4pOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTywgc2hvd190ZW1wX2h5c3QsIE5VTEwsIHRfbWF4KTsKIAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtNzdfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21pbi5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21pbl9oeXN0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG03N19hdHRyc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTc3X2dyb3VwID0gewotCS5hdHRycyA9IGxtNzdfYXR0cmlidXRlcywKLX07CitBVFRSSUJVVEVfR1JPVVBTKGxtNzcpOwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQgbG03N19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQpAQCAtMzM3LDY4ICszMTgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxtNzdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhOwotCWludCBlcnI7Ci0KLQlkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBsbTc3X2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgTE03NyBjaGlwICovCi0JbG03N19pbml0X2NsaWVudChjbGllbnQpOwotCi0JLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmxtNzdfZ3JvdXApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGV4aXRfcmVtb3ZlOwotCX0KLQotCXJldHVybiAwOwotCi1leGl0X3JlbW92ZToKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmxtNzdfZ3JvdXApOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgbG03N19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc3X2dyb3VwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEFsbCByZWdpc3RlcnMgYXJlIHdvcmQtc2l6ZWQsIGV4Y2VwdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCi0gKiBUaGUgTE03NyB1c2VzIHRoZSBoaWdoLWJ5dGUgZmlyc3QgY29udmVudGlvbi4KLSAqLwotc3RhdGljIHUxNiBsbTc3X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQotewotCWlmIChyZWcgPT0gTE03N19SRUdfQ09ORikKLQkJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci0JZWxzZQotCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGNsaWVudCwgcmVnKTsKLX0KLQotc3RhdGljIGludCBsbTc3X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTE2IHZhbHVlKQotewotCWlmIChyZWcgPT0gTE03N19SRUdfQ09ORikKLQkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKLQllbHNlCi0JCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGxtNzdfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAkvKiBJbml0aWFsaXplIHRoZSBMTTc3IGNoaXAgLSB0dXJuIG9mZiBzaHV0ZG93biBtb2RlICovCkBAIC00MDcsNDIgKzMyNiw0NSBAQAogCQlsbTc3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE03N19SRUdfQ09ORiwgY29uZiAmIDB4ZmUpOwogfQogCi1zdGF0aWMgc3RydWN0IGxtNzdfZGF0YSAqbG03N191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbG03N19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgbG03N19kYXRhICpkYXRhOwogCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGxtNzdfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKLQkgICAgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgbG03NyB1cGRhdGVcbiIpOwotCQlkYXRhLT50ZW1wX2lucHV0ID0KLQkJCUxNNzdfVEVNUF9GUk9NX1JFRyhsbTc3X3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCSAgIExNNzdfUkVHX1RFTVApKTsKLQkJZGF0YS0+dGVtcF9oeXN0ID0KLQkJCUxNNzdfVEVNUF9GUk9NX1JFRyhsbTc3X3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCSAgIExNNzdfUkVHX1RFTVBfSFlTVCkpOwotCQlkYXRhLT50ZW1wX2NyaXQgPQotCQkJTE03N19URU1QX0ZST01fUkVHKGxtNzdfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJCQkJICAgTE03N19SRUdfVEVNUF9DUklUKSk7Ci0JCWRhdGEtPnRlbXBfbWluID0KLQkJCUxNNzdfVEVNUF9GUk9NX1JFRyhsbTc3X3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCSAgIExNNzdfUkVHX1RFTVBfTUlOKSk7Ci0JCWRhdGEtPnRlbXBfbWF4ID0KLQkJCUxNNzdfVEVNUF9GUk9NX1JFRyhsbTc3X3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCQkJCSAgIExNNzdfUkVHX1RFTVBfTUFYKSk7Ci0JCWRhdGEtPmFsYXJtcyA9Ci0JCQlsbTc3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc3X1JFR19URU1QKSAmIDB4MDAwNzsKLQkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKLQkJZGF0YS0+dmFsaWQgPSAxOwotCX0KKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCi0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJLyogSW5pdGlhbGl6ZSB0aGUgTE03NyBjaGlwICovCisJbG03N19pbml0X2NsaWVudChjbGllbnQpOwogCi0JcmV0dXJuIGRhdGE7CisJaHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCisJCQkJCQkJICAgZGF0YSwgbG03N19ncm91cHMpOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtNzdfaWRbXSA9IHsKKwl7ICJsbTc3IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTc3X2lkKTsKKworLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtNzdfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibG03NyIsCisJfSwKKwkucHJvYmUJCT0gbG03N19wcm9iZSwKKwkuaWRfdGFibGUJPSBsbTc3X2lkLAorCS5kZXRlY3QJCT0gbG03N19kZXRlY3QsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCit9OworCiBtb2R1bGVfaTJjX2RyaXZlcihsbTc3X2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIkFuZHJhcyBCQUxJIDxkcmV3aWVAZnJlZW1haWwuaHU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODAuYyBiL2RyaXZlcnMvaHdtb24vbG04MC5jCmluZGV4IGJkMGExZWIuLjRiY2Q5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04MC5jCkBAIC04NiwyNyArODYsNDIgQEAKICNkZWZpbmUgRkFOX0ZST01fUkVHKHZhbCwgZGl2KQkoKHZhbCkgPT0gMCA/IC0xIDogXAogCQkJCSh2YWwpID09IDI1NSA/IDAgOiAxMzUwMDAwLygoZGl2KSAqICh2YWwpKSkKIAotc3RhdGljIGlubGluZSBsb25nIFRFTVBfRlJPTV9SRUcodTE2IHRlbXApCi17Ci0JbG9uZyByZXM7Ci0KLQl0ZW1wID4+PSA0OwotCWlmICh0ZW1wIDwgMHgwODAwKQotCQlyZXMgPSA2MjUgKiAobG9uZykgdGVtcDsKLQllbHNlCi0JCXJlcyA9ICgobG9uZykgdGVtcCAtIDB4MDEwMDApICogNjI1OwotCi0JcmV0dXJuIHJlcyAvIDEwOwotfQotCi0jZGVmaW5lIFRFTVBfTElNSVRfRlJPTV9SRUcodmFsKQkoKCh2YWwpID4gMHg4MCA/IFwKLQkodmFsKSAtIDB4MTAwIDogKHZhbCkpICogMTAwMCkKLQotI2RlZmluZSBURU1QX0xJTUlUX1RPX1JFRyh2YWwpCQljbGFtcF92YWwoKHZhbCkgPCAwID8gXAotCSgodmFsKSAtIDUwMCkgLyAxMDAwIDogKCh2YWwpICsgNTAwKSAvIDEwMDAsIDAsIDI1NSkKKyNkZWZpbmUgVEVNUF9GUk9NX1JFRyhyZWcpCSgocmVnKSAqIDEyNSAvIDMyKQorI2RlZmluZSBURU1QX1RPX1JFRyh0ZW1wKQkoRElWX1JPVU5EX0NMT1NFU1QoY2xhbXBfdmFsKCh0ZW1wKSwgXAorCQkJCQktMTI4MDAwLCAxMjcwMDApLCAxMDAwKSA8PCA4KQogCiAjZGVmaW5lIERJVl9GUk9NX1JFRyh2YWwpCQkoMSA8PCAodmFsKSkKIAorZW51bSB0ZW1wX2luZGV4IHsKKwl0X2lucHV0ID0gMCwKKwl0X2hvdF9tYXgsCisJdF9ob3RfaHlzdCwKKwl0X29zX21heCwKKwl0X29zX2h5c3QsCisJdF9udW1fdGVtcAorfTsKKworc3RhdGljIGNvbnN0IHU4IHRlbXBfcmVnc1t0X251bV90ZW1wXSA9IHsKKwlbdF9pbnB1dF0gPSBMTTgwX1JFR19URU1QLAorCVt0X2hvdF9tYXhdID0gTE04MF9SRUdfVEVNUF9IT1RfTUFYLAorCVt0X2hvdF9oeXN0XSA9IExNODBfUkVHX1RFTVBfSE9UX0hZU1QsCisJW3Rfb3NfbWF4XSA9IExNODBfUkVHX1RFTVBfT1NfTUFYLAorCVt0X29zX2h5c3RdID0gTE04MF9SRUdfVEVNUF9PU19IWVNULAorfTsKKworZW51bSBpbl9pbmRleCB7CisJaV9pbnB1dCA9IDAsCisJaV9tYXgsCisJaV9taW4sCisJaV9udW1faW4KK307CisKK2VudW0gZmFuX2luZGV4IHsKKwlmX2lucHV0LAorCWZfbWluLAorCWZfbnVtX2ZhbgorfTsKKwogLyoKICAqIENsaWVudCBkYXRhIChlYWNoIGNsaWVudCBnZXRzIGl0cyBvd24pCiAgKi8KQEAgLTExOCwxMDYgKzEzMywxODcgQEAKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIAotCXU4IGluWzddOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCBpbl9tYXhbN107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IGluX21pbls3XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggZmFuWzJdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCBmYW5fbWluWzJdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBpbltpX251bV9pbl1bN107CS8qIFJlZ2lzdGVyIHZhbHVlLCAxc3QgaW5kZXggaXMgZW51bSBpbl9pbmRleCAqLworCXU4IGZhbltmX251bV9mYW5dWzJdOwkvKiBSZWdpc3RlciB2YWx1ZSwgMXN0IGluZGV4IGVudW0gZmFuX2luZGV4ICovCiAJdTggZmFuX2RpdlsyXTsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBzaGlmdGVkIHJpZ2h0ICovCi0JdTE2IHRlbXA7CQkvKiBSZWdpc3RlciB2YWx1ZXMsIHNoaWZ0ZWQgcmlnaHQgKi8KLQl1OCB0ZW1wX2hvdF9tYXg7CS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggdGVtcF9ob3RfaHlzdDsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCB0ZW1wX29zX21heDsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggdGVtcF9vc19oeXN0OwkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXMxNiB0ZW1wW3RfbnVtX3RlbXBdOwkvKiBSZWdpc3RlciB2YWx1ZXMsIG5vcm1hbGl6ZWQgdG8gMTYgYml0ICovCiAJdTE2IGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwogfTsKIAotLyoKLSAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgotICovCitzdGF0aWMgaW50IGxtODBfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCit7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Cit9CiAKLXN0YXRpYyBpbnQgbG04MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBsbTgwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgbG04MF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLXN0YXRpYyBzdHJ1Y3QgbG04MF9kYXRhICpsbTgwX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbG04MF9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7Ci1zdGF0aWMgaW50IGxtODBfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSk7CitzdGF0aWMgaW50IGxtODBfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworfQogCi0vKgotICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKLSAqLworLyogQ2FsbGVkIHdoZW4gd2UgaGF2ZSBmb3VuZCBhIG5ldyBMTTgwIGFuZCBhZnRlciByZWFkIGVycm9ycyAqLworc3RhdGljIHZvaWQgbG04MF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCS8qCisJICogUmVzZXQgYWxsIGV4Y2VwdCBXYXRjaGRvZyB2YWx1ZXMgYW5kIGxhc3QgY29udmVyc2lvbiB2YWx1ZXMKKwkgKiBUaGlzIHNldHMgZmFuLWRpdnMgdG8gMiwgYW1vbmcgb3RoZXJzLiBUaGlzIG1ha2VzIG1vc3Qgb3RoZXIKKwkgKiBpbml0aWFsaXphdGlvbnMgdW5uZWNlc3NhcnkKKwkgKi8KKwlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfQ09ORklHLCAweDgwKTsKKwkvKiBTZXQgMTEtYml0IHRlbXBlcmF0dXJlIHJlc29sdXRpb24gKi8KKwlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfUkVTLCAweDA4KTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtODBfaWRbXSA9IHsKLQl7ICJsbTgwIiwgMCB9LAotCXsgImxtOTYwODAiLCAxIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtODBfaWQpOworCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KKwlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfQ09ORklHLCAweDAxKTsKK30KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtODBfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAibG04MCIsCi0JfSwKLQkucHJvYmUJCT0gbG04MF9wcm9iZSwKLQkuaWRfdGFibGUJPSBsbTgwX2lkLAotCS5kZXRlY3QJCT0gbG04MF9kZXRlY3QsCi0JLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCi19Oworc3RhdGljIHN0cnVjdCBsbTgwX2RhdGEgKmxtODBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IGk7CisJaW50IHJ2OworCWludCBwcmV2X3J2OworCXN0cnVjdCBsbTgwX2RhdGEgKnJldCA9IGRhdGE7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAoZGF0YS0+ZXJyb3IpCisJCWxtODBfaW5pdF9jbGllbnQoY2xpZW50KTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIDIgKiBIWikgfHwgIWRhdGEtPnZhbGlkKSB7CisJCWRldl9kYmcoZGV2LCAiU3RhcnRpbmcgbG04MCB1cGRhdGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDw9IDY7IGkrKykgeworCQkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19JTihpKSk7CisJCQlpZiAocnYgPCAwKQorCQkJCWdvdG8gYWJvcnQ7CisJCQlkYXRhLT5pbltpX2lucHV0XVtpXSA9IHJ2OworCisJCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0lOX01JTihpKSk7CisJCQlpZiAocnYgPCAwKQorCQkJCWdvdG8gYWJvcnQ7CisJCQlkYXRhLT5pbltpX21pbl1baV0gPSBydjsKKworCQkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19JTl9NQVgoaSkpOworCQkJaWYgKHJ2IDwgMCkKKwkJCQlnb3RvIGFib3J0OworCQkJZGF0YS0+aW5baV9tYXhdW2ldID0gcnY7CisJCX0KKworCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTjEpOworCQlpZiAocnYgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJZGF0YS0+ZmFuW2ZfaW5wdXRdWzBdID0gcnY7CisKKwkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19GQU5fTUlOKDEpKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCWRhdGEtPmZhbltmX21pbl1bMF0gPSBydjsKKworCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTjIpOworCQlpZiAocnYgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJZGF0YS0+ZmFuW2ZfaW5wdXRdWzFdID0gcnY7CisKKwkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19GQU5fTUlOKDIpKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCWRhdGEtPmZhbltmX21pbl1bMV0gPSBydjsKKworCQlwcmV2X3J2ID0gcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19URU1QKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfUkVTKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCWRhdGEtPnRlbXBbdF9pbnB1dF0gPSAocHJldl9ydiA8PCA4KSB8IChydiAmIDB4ZjApOworCisJCWZvciAoaSA9IHRfaW5wdXQgKyAxOyBpIDwgdF9udW1fdGVtcDsgaSsrKSB7CisJCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIHRlbXBfcmVnc1tpXSk7CisJCQlpZiAocnYgPCAwKQorCQkJCWdvdG8gYWJvcnQ7CisJCQlkYXRhLT50ZW1wW2ldID0gcnYgPDwgODsKKwkJfQorCisJCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFORElWKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCWRhdGEtPmZhbl9kaXZbMF0gPSAocnYgPj4gMikgJiAweDAzOworCQlkYXRhLT5mYW5fZGl2WzFdID0gKHJ2ID4+IDQpICYgMHgwMzsKKworCQlwcmV2X3J2ID0gcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19BTEFSTTEpOworCQlpZiAocnYgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19BTEFSTTIpOworCQlpZiAocnYgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJZGF0YS0+YWxhcm1zID0gcHJldl9ydiArIChydiA8PCA4KTsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJCWRhdGEtPmVycm9yID0gMDsKKwl9CisJZ290byBkb25lOworCithYm9ydDoKKwlyZXQgPSBFUlJfUFRSKHJ2KTsKKwlkYXRhLT52YWxpZCA9IDA7CisJZGF0YS0+ZXJyb3IgPSAxOworCitkb25lOgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogLyoKICAqIFN5c2ZzIHN0dWZmCiAgKi8KIAotI2RlZmluZSBzaG93X2luKHN1ZmZpeCwgdmFsdWUpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5fIyNzdWZmaXgoc3RydWN0IGRldmljZSAqZGV2LCBcCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoteyBcCi0JaW50IG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsgXAotCXN0cnVjdCBsbTgwX2RhdGEgKmRhdGEgPSBsbTgwX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAotCWlmIChJU19FUlIoZGF0YSkpIFwKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7IFwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5fRlJPTV9SRUcoZGF0YS0+dmFsdWVbbnJdKSk7IFwKLX0KLXNob3dfaW4obWluLCBpbl9taW4pCi1zaG93X2luKG1heCwgaW5fbWF4KQotc2hvd19pbihpbnB1dCwgaW4pCitzdGF0aWMgc3NpemVfdCBzaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGxtODBfdXBkYXRlX2RldmljZShkZXYpOworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpLT5pbmRleDsKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKS0+bnI7CiAKLSNkZWZpbmUgc2V0X2luKHN1ZmZpeCwgdmFsdWUsIHJlZykgXAotc3RhdGljIHNzaXplX3Qgc2V0X2luXyMjc3VmZml4KHN0cnVjdCBkZXZpY2UgKmRldiwgXAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoteyBcCi0JaW50IG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsgXAotCXN0cnVjdCBsbTgwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsgXAotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7IFwKLQlsb25nIHZhbDsgXAotCWludCBlcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOyBcCi0JaWYgKGVyciA8IDApIFwKLQkJcmV0dXJuIGVycjsgXAotXAotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTtcCi0JZGF0YS0+dmFsdWVbbnJdID0gSU5fVE9fUkVHKHZhbCk7IFwKLQlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnKG5yKSwgZGF0YS0+dmFsdWVbbnJdKTsgXAotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spO1wKLQlyZXR1cm4gY291bnQ7IFwKKwlpZiAoSVNfRVJSKGRhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5fRlJPTV9SRUcoZGF0YS0+aW5bbnJdW2luZGV4XSkpOwogfQotc2V0X2luKG1pbiwgaW5fbWluLCBMTTgwX1JFR19JTl9NSU4pCi1zZXRfaW4obWF4LCBpbl9tYXgsIExNODBfUkVHX0lOX01BWCkKIAotI2RlZmluZSBzaG93X2ZhbihzdWZmaXgsIHZhbHVlKSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X2Zhbl8jI3N1ZmZpeChzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCi17IFwKLQlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OyBcCi0Jc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGxtODBfdXBkYXRlX2RldmljZShkZXYpOyBcCi0JaWYgKElTX0VSUihkYXRhKSkgXAotCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsgXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGQU5fRlJPTV9SRUcoZGF0YS0+dmFsdWVbbnJdLCBcCi0JCSAgICAgICBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKSk7IFwKK3N0YXRpYyBzc2l6ZV90IHNldF9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbG04MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKS0+aW5kZXg7CisJaW50IG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0ciktPm5yOworCWxvbmcgdmFsOworCXU4IHJlZzsKKwlpbnQgZXJyID0ga3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJlZyA9IG5yID09IGlfbWluID8gTE04MF9SRUdfSU5fTUlOKGluZGV4KSA6IExNODBfUkVHX0lOX01BWChpbmRleCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+aW5bbnJdW2luZGV4XSA9IElOX1RPX1JFRyh2YWwpOworCWxtODBfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPmluW25yXVtpbmRleF0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKIH0KLXNob3dfZmFuKG1pbiwgZmFuX21pbikKLXNob3dfZmFuKGlucHV0LCBmYW4pCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0ciktPmluZGV4OworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpLT5ucjsKKwlzdHJ1Y3QgbG04MF9kYXRhICpkYXRhID0gbG04MF91cGRhdGVfZGV2aWNlKGRldik7CisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEZBTl9GUk9NX1JFRyhkYXRhLT5mYW5bbnJdW2luZGV4XSwKKwkJICAgICAgIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W2luZGV4XSkpKTsKK30KIAogc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY2hhciAqYnVmKQpAQCAtMjMyLDcgKzMyOCw4IEBACiBzdGF0aWMgc3NpemVfdCBzZXRfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0ciktPmluZGV4OworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpLT5ucjsKIAlzdHJ1Y3QgbG04MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAl1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTI0MSw4ICszMzgsMTAgQEAKIAkJcmV0dXJuIGVycjsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5mYW5fbWluW25yXSA9IEZBTl9UT19SRUcodmFsLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKLQlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFOX01JTihuciArIDEpLCBkYXRhLT5mYW5fbWluW25yXSk7CisJZGF0YS0+ZmFuW25yXVtpbmRleF0gPSBGQU5fVE9fUkVHKHZhbCwKKwkJCQkJICBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdltpbmRleF0pKTsKKwlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFOX01JTihpbmRleCArIDEpLAorCQkJIGRhdGEtPmZhbltucl1baW5kZXhdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yNjcsNyArMzY2LDcgQEAKIAogCS8qIFNhdmUgZmFuX21pbiAqLwogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQltaW4gPSBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCisJbWluID0gRkFOX0ZST01fUkVHKGRhdGEtPmZhbltmX21pbl1bbnJdLAogCQkJICAgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAKIAlzd2l0Y2ggKHZhbCkgewpAQCAtMjkxLDYyICszOTAsNDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVnID0gKGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTkRJVikgJiB+KDMgPDwgKDIgKiAobnIgKyAxKSkpKQotCSAgICB8IChkYXRhLT5mYW5fZGl2W25yXSA8PCAoMiAqIChuciArIDEpKSk7CisJcmVnID0gKGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTkRJVikgJgorCSAgICAgICB+KDMgPDwgKDIgKiAobnIgKyAxKSkpKSB8IChkYXRhLT5mYW5fZGl2W25yXSA8PCAoMiAqIChuciArIDEpKSk7CiAJbG04MF93cml0ZV92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTkRJViwgcmVnKTsKIAogCS8qIFJlc3RvcmUgZmFuX21pbiAqLwotCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyhtaW4sIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwotCWxtODBfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19GQU5fTUlOKG5yICsgMSksIGRhdGEtPmZhbl9taW5bbnJdKTsKKwlkYXRhLT5mYW5bZl9taW5dW25yXSA9IEZBTl9UT19SRUcobWluLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKKwlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFOX01JTihuciArIDEpLAorCQkJIGRhdGEtPmZhbltmX21pbl1bbnJdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX2lucHV0MShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGxtODBfdXBkYXRlX2RldmljZShkZXYpOwogCWlmIChJU19FUlIoZGF0YSkpCiAJCXJldHVybiBQVFJfRVJSKGRhdGEpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKIH0KIAotI2RlZmluZSBzaG93X3RlbXAoc3VmZml4LCB2YWx1ZSkgXAotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wXyMjc3VmZml4KHN0cnVjdCBkZXZpY2UgKmRldiwgXAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXN0cnVjdCBsbTgwX2RhdGEgKmRhdGEgPSBsbTgwX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAotCWlmIChJU19FUlIoZGF0YSkpIFwKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7IFwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9MSU1JVF9GUk9NX1JFRyhkYXRhLT52YWx1ZSkpOyBcCi19Ci1zaG93X3RlbXAoaG90X21heCwgdGVtcF9ob3RfbWF4KTsKLXNob3dfdGVtcChob3RfaHlzdCwgdGVtcF9ob3RfaHlzdCk7Ci1zaG93X3RlbXAob3NfbWF4LCB0ZW1wX29zX21heCk7Ci1zaG93X3RlbXAob3NfaHlzdCwgdGVtcF9vc19oeXN0KTsKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisJbG9uZyB2YWw7CisJaW50IGVyciA9IGtzdHJ0b2woYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKLSNkZWZpbmUgc2V0X3RlbXAoc3VmZml4LCB2YWx1ZSwgcmVnKSBcCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcF8jI3N1ZmZpeChzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXN0cnVjdCBsbTgwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsgXAotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7IFwKLQlsb25nIHZhbDsgXAotCWludCBlcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOyBcCi0JaWYgKGVyciA8IDApIFwKLQkJcmV0dXJuIGVycjsgXAotXAotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAotCWRhdGEtPnZhbHVlID0gVEVNUF9MSU1JVF9UT19SRUcodmFsKTsgXAotCWxtODBfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPnZhbHVlKTsgXAotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCi0JcmV0dXJuIGNvdW50OyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKKwlsbTgwX3dyaXRlX3ZhbHVlKGNsaWVudCwgdGVtcF9yZWdzW25yXSwgZGF0YS0+dGVtcFtucl0gPj4gOCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OwogfQotc2V0X3RlbXAoaG90X21heCwgdGVtcF9ob3RfbWF4LCBMTTgwX1JFR19URU1QX0hPVF9NQVgpOwotc2V0X3RlbXAoaG90X2h5c3QsIHRlbXBfaG90X2h5c3QsIExNODBfUkVHX1RFTVBfSE9UX0hZU1QpOwotc2V0X3RlbXAob3NfbWF4LCB0ZW1wX29zX21heCwgTE04MF9SRUdfVEVNUF9PU19NQVgpOwotc2V0X3RlbXAob3NfaHlzdCwgdGVtcF9vc19oeXN0LCBMTTgwX1JFR19URU1QX09TX0hZU1QpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQpAQCAtMzY3LDYwICs0NTEsNjAgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKIH0KIAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDMpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDQpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDUpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDYpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDMpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDQpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDUpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDYpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDMpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDQpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDUpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDYpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCi0JCXNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCi0JCXNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2Zhbl9pbnB1dCwgTlVMTCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuX2lucHV0LCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJc2hvd19pbiwgc2V0X2luLCBpX21pbiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCXNob3dfaW4sIHNldF9pbiwgaV9taW4sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQlzaG93X2luLCBzZXRfaW4sIGlfbWluLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJc2hvd19pbiwgc2V0X2luLCBpX21pbiwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCXNob3dfaW4sIHNldF9pbiwgaV9taW4sIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQlzaG93X2luLCBzZXRfaW4sIGlfbWluLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjZfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJc2hvd19pbiwgc2V0X2luLCBpX21pbiwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4wX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCXNob3dfaW4sIHNldF9pbiwgaV9tYXgsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQlzaG93X2luLCBzZXRfaW4sIGlfbWF4LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJc2hvd19pbiwgc2V0X2luLCBpX21heCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCXNob3dfaW4sIHNldF9pbiwgaV9tYXgsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQlzaG93X2luLCBzZXRfaW4sIGlfbWF4LCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjVfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJc2hvd19pbiwgc2V0X2luLCBpX21heCwgNSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW42X21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCXNob3dfaW4sIHNldF9pbiwgaV9tYXgsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgaV9pbnB1dCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCBpX2lucHV0LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIGlfaW5wdXQsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluM19pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgaV9pbnB1dCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCBpX2lucHV0LCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjVfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIGlfaW5wdXQsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgaV9pbnB1dCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQlzaG93X2Zhbiwgc2V0X2Zhbl9taW4sIGZfbWluLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihmYW4yX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCXNob3dfZmFuLCBzZXRfZmFuX21pbiwgZl9taW4sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCBmX2lucHV0LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgZl9pbnB1dCwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfZGl2LCBTX0lXVVNSIHwgU19JUlVHTywKIAkJc2hvd19mYW5fZGl2LCBzZXRfZmFuX2RpdiwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfZGl2LCBTX0lXVVNSIHwgU19JUlVHTywKIAkJc2hvd19mYW5fZGl2LCBzZXRfZmFuX2RpdiwgMSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9pbnB1dDEsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9ob3RfbWF4LAotCXNldF90ZW1wX2hvdF9tYXgpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX2hvdF9oeXN0LAotCXNldF90ZW1wX2hvdF9oeXN0KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX29zX21heCwKLQlzZXRfdGVtcF9vc19tYXgpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9vc19oeXN0LAotCXNldF90ZW1wX29zX2h5c3QpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCB0X2lucHV0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wLAorCQlzZXRfdGVtcCwgdF9ob3RfbWF4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAsCisJCXNldF90ZW1wLCB0X2hvdF9oeXN0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwKKwkJc2V0X3RlbXAsIHRfb3NfbWF4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wLAorCQlzZXRfdGVtcCwgdF9vc19oeXN0KTsKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zLCBOVUxMKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxKTsKQEAgLTQ2NiwxMSArNTUwLDExIEBACiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX2NyaXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKQEAgLTU1MSw4ICs2MzUsOCBAQAogCWxtODBfaW5pdF9jbGllbnQoY2xpZW50KTsKIAogCS8qIEEgZmV3IHZhcnMgbmVlZCB0byBiZSBmaWxsZWQgdXBvbiBzdGFydHVwICovCi0JZGF0YS0+ZmFuX21pblswXSA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTl9NSU4oMSkpOwotCWRhdGEtPmZhbl9taW5bMV0gPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19GQU5fTUlOKDIpKTsKKwlkYXRhLT5mYW5bZl9taW5dWzBdID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFOX01JTigxKSk7CisJZGF0YS0+ZmFuW2ZfbWluXVsxXSA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTl9NSU4oMikpOwogCiAJaHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCiAJCQkJCQkJICAgZGF0YSwgbG04MF9ncm91cHMpOwpAQCAtNTYwLDE0MyArNjQ0LDI3IEBACiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCi1zdGF0aWMgaW50IGxtODBfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci19CisvKgorICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKKyAqLwogCi1zdGF0aWMgaW50IGxtODBfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtODBfaWRbXSA9IHsKKwl7ICJsbTgwIiwgMCB9LAorCXsgImxtOTYwODAiLCAxIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtODBfaWQpOwogCi0vKiBDYWxsZWQgd2hlbiB3ZSBoYXZlIGZvdW5kIGEgbmV3IExNODAuICovCi1zdGF0aWMgdm9pZCBsbTgwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JLyoKLQkgKiBSZXNldCBhbGwgZXhjZXB0IFdhdGNoZG9nIHZhbHVlcyBhbmQgbGFzdCBjb252ZXJzaW9uIHZhbHVlcwotCSAqIFRoaXMgc2V0cyBmYW4tZGl2cyB0byAyLCBhbW9uZyBvdGhlcnMuIFRoaXMgbWFrZXMgbW9zdCBvdGhlcgotCSAqIGluaXRpYWxpemF0aW9ucyB1bm5lY2Vzc2FyeQotCSAqLwotCWxtODBfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19DT05GSUcsIDB4ODApOwotCS8qIFNldCAxMS1iaXQgdGVtcGVyYXR1cmUgcmVzb2x1dGlvbiAqLwotCWxtODBfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19SRVMsIDB4MDgpOwotCi0JLyogU3RhcnQgbW9uaXRvcmluZyAqLwotCWxtODBfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19DT05GSUcsIDB4MDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGxtODBfZGF0YSAqbG04MF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbG04MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKLQlpbnQgaTsKLQlpbnQgcnY7Ci0JaW50IHByZXZfcnY7Ci0Jc3RydWN0IGxtODBfZGF0YSAqcmV0ID0gZGF0YTsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCWlmIChkYXRhLT5lcnJvcikKLQkJbG04MF9pbml0X2NsaWVudChjbGllbnQpOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgMiAqIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJZGV2X2RiZyhkZXYsICJTdGFydGluZyBsbTgwIHVwZGF0ZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKSB7Ci0JCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0lOKGkpKTsKLQkJCWlmIChydiA8IDApCi0JCQkJZ290byBhYm9ydDsKLQkJCWRhdGEtPmluW2ldID0gcnY7Ci0KLQkJCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfSU5fTUlOKGkpKTsKLQkJCWlmIChydiA8IDApCi0JCQkJZ290byBhYm9ydDsKLQkJCWRhdGEtPmluX21pbltpXSA9IHJ2OwotCi0JCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0lOX01BWChpKSk7Ci0JCQlpZiAocnYgPCAwKQotCQkJCWdvdG8gYWJvcnQ7Ci0JCQlkYXRhLT5pbl9tYXhbaV0gPSBydjsKLQkJfQotCi0JCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFOMSk7Ci0JCWlmIChydiA8IDApCi0JCQlnb3RvIGFib3J0OwotCQlkYXRhLT5mYW5bMF0gPSBydjsKLQotCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTl9NSU4oMSkpOwotCQlpZiAocnYgPCAwKQotCQkJZ290byBhYm9ydDsKLQkJZGF0YS0+ZmFuX21pblswXSA9IHJ2OwotCi0JCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfRkFOMik7Ci0JCWlmIChydiA8IDApCi0JCQlnb3RvIGFib3J0OwotCQlkYXRhLT5mYW5bMV0gPSBydjsKLQotCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTl9NSU4oMikpOwotCQlpZiAocnYgPCAwKQotCQkJZ290byBhYm9ydDsKLQkJZGF0YS0+ZmFuX21pblsxXSA9IHJ2OwotCi0JCXByZXZfcnYgPSBydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX1RFTVApOwotCQlpZiAocnYgPCAwKQotCQkJZ290byBhYm9ydDsKLQkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19SRVMpOwotCQlpZiAocnYgPCAwKQotCQkJZ290byBhYm9ydDsKLQkJZGF0YS0+dGVtcCA9IChwcmV2X3J2IDw8IDgpIHwgKHJ2ICYgMHhmMCk7Ci0KLQkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19URU1QX09TX01BWCk7Ci0JCWlmIChydiA8IDApCi0JCQlnb3RvIGFib3J0OwotCQlkYXRhLT50ZW1wX29zX21heCA9IHJ2OwotCi0JCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfVEVNUF9PU19IWVNUKTsKLQkJaWYgKHJ2IDwgMCkKLQkJCWdvdG8gYWJvcnQ7Ci0JCWRhdGEtPnRlbXBfb3NfaHlzdCA9IHJ2OwotCi0JCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfVEVNUF9IT1RfTUFYKTsKLQkJaWYgKHJ2IDwgMCkKLQkJCWdvdG8gYWJvcnQ7Ci0JCWRhdGEtPnRlbXBfaG90X21heCA9IHJ2OwotCi0JCXJ2ID0gbG04MF9yZWFkX3ZhbHVlKGNsaWVudCwgTE04MF9SRUdfVEVNUF9IT1RfSFlTVCk7Ci0JCWlmIChydiA8IDApCi0JCQlnb3RvIGFib3J0OwotCQlkYXRhLT50ZW1wX2hvdF9oeXN0ID0gcnY7Ci0KLQkJcnYgPSBsbTgwX3JlYWRfdmFsdWUoY2xpZW50LCBMTTgwX1JFR19GQU5ESVYpOwotCQlpZiAocnYgPCAwKQotCQkJZ290byBhYm9ydDsKLQkJZGF0YS0+ZmFuX2RpdlswXSA9IChydiA+PiAyKSAmIDB4MDM7Ci0JCWRhdGEtPmZhbl9kaXZbMV0gPSAocnYgPj4gNCkgJiAweDAzOwotCi0JCXByZXZfcnYgPSBydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0FMQVJNMSk7Ci0JCWlmIChydiA8IDApCi0JCQlnb3RvIGFib3J0OwotCQlydiA9IGxtODBfcmVhZF92YWx1ZShjbGllbnQsIExNODBfUkVHX0FMQVJNMik7Ci0JCWlmIChydiA8IDApCi0JCQlnb3RvIGFib3J0OwotCQlkYXRhLT5hbGFybXMgPSBwcmV2X3J2ICsgKHJ2IDw8IDgpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsKLQkJZGF0YS0+ZXJyb3IgPSAwOwotCX0KLQlnb3RvIGRvbmU7Ci0KLWFib3J0OgotCXJldCA9IEVSUl9QVFIocnYpOwotCWRhdGEtPnZhbGlkID0gMDsKLQlkYXRhLT5lcnJvciA9IDE7Ci0KLWRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtODBfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibG04MCIsCisJfSwKKwkucHJvYmUJCT0gbG04MF9wcm9iZSwKKwkuaWRfdGFibGUJPSBsbTgwX2lkLAorCS5kZXRlY3QJCT0gbG04MF9kZXRlY3QsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCit9OwogCiBtb2R1bGVfaTJjX2RyaXZlcihsbTgwX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04My5jIGIvZHJpdmVycy9od21vbi9sbTgzLmMKaW5kZXggYmUwMjE1NS4uOWU0ZDBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTgzLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTgzLmMKQEAgLTI1LDEwICsyNSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTExMSw0NSArMTA3LDEyIEBACiB9OwogCiAvKgotICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCi0gKi8KLQotc3RhdGljIGludCBsbTgzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGxtODNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgbG04M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgc3RydWN0IGxtODNfZGF0YSAqbG04M191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLS8qCi0gKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTgzX2lkW10gPSB7Ci0JeyAibG04MyIsIGxtODMgfSwKLQl7ICJsbTgyIiwgbG04MiB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTgzX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtODNfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAibG04MyIsCi0JfSwKLQkucHJvYmUJCT0gbG04M19wcm9iZSwKLQkucmVtb3ZlCQk9IGxtODNfcmVtb3ZlLAotCS5pZF90YWJsZQk9IGxtODNfaWQsCi0JLmRldGVjdAkJPSBsbTgzX2RldGVjdCwKLQkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKLX07Ci0KLS8qCiAgKiBDbGllbnQgZGF0YSAoZWFjaCBjbGllbnQgZ2V0cyBpdHMgb3duKQogICovCiAKIHN0cnVjdCBsbTgzX2RhdGEgewotCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3Vwc1szXTsKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCkBAIC0xNjEsNiArMTI0LDM2IEBACiAJdTE2IGFsYXJtczsgLyogYml0dmVjdG9yLCBjb21iaW5lZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBsbTgzX2RhdGEgKmxtODNfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxtODNfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgbnI7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyBsbTgzIGRhdGEuXG4iKTsKKwkJZm9yIChuciA9IDA7IG5yIDwgOTsgbnIrKykgeworCQkJZGF0YS0+dGVtcFtucl0gPQorCQkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkgICAgTE04M19SRUdfUl9URU1QW25yXSk7CisJCX0KKwkJZGF0YS0+YWxhcm1zID0KKwkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNODNfUkVHX1JfU1RBVFVTMSkKKwkJICAgICsgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNODNfUkVHX1JfU1RBVFVTMikKKwkJICAgIDw8IDgpOworCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCiAvKgogICogU3lzZnMgc3R1ZmYKICAqLwpAQCAtMTc3LDggKzE3MCw4IEBACiAJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG04M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGxtODNfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJbG9uZyB2YWw7CiAJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJaW50IGVycjsKQEAgLTM0MCwxNSArMzMzLDE1IEBACiBzdGF0aWMgaW50IGxtODNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IGxtODNfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwogCiAJZGF0YSA9IGRldm1fa3phbGxvYygmbmV3X2NsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IGxtODNfZGF0YSksCiAJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKKwlkYXRhLT5jbGllbnQgPSBuZXdfY2xpZW50OwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qCkBAIC0zNTcsNzIgKzM1MCwzNyBAQAogCSAqIGF0IHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHRoZSBMTTgzIHRlbXAzIGVudHJ5IC0gc28gd2UKIAkgKiBkZWNsYXJlIDEgYW5kIDMgY29tbW9uLCBhbmQgdGhlbiAyIGFuZCA0IG9ubHkgZm9yIHRoZSBMTTgzLgogCSAqLworCWRhdGEtPmdyb3Vwc1swXSA9ICZsbTgzX2dyb3VwOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gbG04MykKKwkJZGF0YS0+Z3JvdXBzWzFdID0gJmxtODNfZ3JvdXBfb3B0OwogCi0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoaWQtPmRyaXZlcl9kYXRhID09IGxtODMpIHsKLQkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwKLQkJCQkJICZsbTgzX2dyb3VwX29wdCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwotCX0KLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwotCX0KLQotCXJldHVybiAwOwotCi1leGl0X3JlbW92ZV9maWxlczoKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG04M19ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXBfb3B0KTsKLQlyZXR1cm4gZXJyOworCWh3bW9uX2RldiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCQkJICAgbmV3X2NsaWVudC0+bmFtZSwKKwkJCQkJCQkgICBkYXRhLCBkYXRhLT5ncm91cHMpOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsKIH0KIAotc3RhdGljIGludCBsbTgzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBsbTgzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKy8qCisgKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQorICovCiAKLQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXBfb3B0KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTgzX2lkW10gPSB7CisJeyAibG04MyIsIGxtODMgfSwKKwl7ICJsbTgyIiwgbG04MiB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTgzX2lkKTsKIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGxtODNfZGF0YSAqbG04M191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBsbTgzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICogMikgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWludCBucjsKLQotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVwZGF0aW5nIGxtODMgZGF0YS5cbiIpOwotCQlmb3IgKG5yID0gMDsgbnIgPCA5OyBucisrKSB7Ci0JCQlkYXRhLT50ZW1wW25yXSA9Ci0JCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCSAgICBMTTgzX1JFR19SX1RFTVBbbnJdKTsKLQkJfQotCQlkYXRhLT5hbGFybXMgPQotCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04M19SRUdfUl9TVEFUVVMxKQotCQkgICAgKyAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04M19SRUdfUl9TVEFUVVMyKQotCQkgICAgPDwgOCk7Ci0KLQkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKLQkJZGF0YS0+dmFsaWQgPSAxOwotCX0KLQotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JcmV0dXJuIGRhdGE7Ci19CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG04M19kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJsbTgzIiwKKwl9LAorCS5wcm9iZQkJPSBsbTgzX3Byb2JlLAorCS5pZF90YWJsZQk9IGxtODNfaWQsCisJLmRldGVjdAkJPSBsbTgzX2RldGVjdCwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKK307CiAKIG1vZHVsZV9pMmNfZHJpdmVyKGxtODNfZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkyLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTIuYwppbmRleCBiOTAyMmRiLi5kMjA2MGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtOTIuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtOTIuYwpAQCAtMzQsMTAgKzM0LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtOTMsNDYgKzg5LDUzIEBACiAJcmV0dXJuIHJlZyAmIDB4MDAwNzsKIH0KIAotLyogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTkyX2RyaXZlcjsKK2VudW0gdGVtcF9pbmRleCB7CisJdF9pbnB1dCwKKwl0X2NyaXQsCisJdF9taW4sCisJdF9tYXgsCisJdF9oeXN0LAorCXRfbnVtX3JlZ3MKK307CisKK3N0YXRpYyBjb25zdCB1OCByZWdzW3RfbnVtX3JlZ3NdID0geworCVt0X2lucHV0XSA9IExNOTJfUkVHX1RFTVAsCisJW3RfY3JpdF0gPSBMTTkyX1JFR19URU1QX0NSSVQsCisJW3RfbWluXSA9IExNOTJfUkVHX1RFTVBfTE9XLAorCVt0X21heF0gPSBMTTkyX1JFR19URU1QX0hJR0gsCisJW3RfaHlzdF0gPSBMTTkyX1JFR19URU1QX0hZU1QsCit9OwogCiAvKiBDbGllbnQgZGF0YSAoZWFjaCBjbGllbnQgZ2V0cyBpdHMgb3duKSAqLwogc3RydWN0IGxtOTJfZGF0YSB7Ci0Jc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLwogCiAJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLwotCXMxNiB0ZW1wMV9pbnB1dCwgdGVtcDFfY3JpdCwgdGVtcDFfbWluLCB0ZW1wMV9tYXgsIHRlbXAxX2h5c3Q7CisJczE2IHRlbXBbdF9udW1fcmVnc107CS8qIGluZGV4IHdpdGggZW51bSB0ZW1wX2luZGV4ICovCiB9OwogCi0KIC8qCiAgKiBTeXNmcyBhdHRyaWJ1dGVzIGFuZCBjYWxsYmFjayBmdW5jdGlvbnMKICAqLwogCiBzdGF0aWMgc3RydWN0IGxtOTJfZGF0YSAqbG05Ml91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgaTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKQogCSB8fCAhZGF0YS0+dmFsaWQpIHsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyBsbTkyIGRhdGFcbiIpOwotCQlkYXRhLT50ZW1wMV9pbnB1dCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChjbGllbnQsCi0JCQkJICAgIExNOTJfUkVHX1RFTVApOwotCQlkYXRhLT50ZW1wMV9oeXN0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGNsaWVudCwKLQkJCQkgICAgTE05Ml9SRUdfVEVNUF9IWVNUKTsKLQkJZGF0YS0+dGVtcDFfY3JpdCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChjbGllbnQsCi0JCQkJICAgIExNOTJfUkVHX1RFTVBfQ1JJVCk7Ci0JCWRhdGEtPnRlbXAxX21pbiA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChjbGllbnQsCi0JCQkJICAgIExNOTJfUkVHX1RFTVBfTE9XKTsKLQkJZGF0YS0+dGVtcDFfbWF4ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGNsaWVudCwKLQkJCQkgICAgTE05Ml9SRUdfVEVNUF9ISUdIKTsKLQorCQlmb3IgKGkgPSAwOyBpIDwgdF9udW1fcmVnczsgaSsrKSB7CisJCQlkYXRhLT50ZW1wW2ldID0KKwkJCQlpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCByZWdzW2ldKTsKKwkJfQogCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOwogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQpAQCAtMTQyLDY4ICsxNDUsNjAgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotI2RlZmluZSBzaG93X3RlbXAodmFsdWUpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCi0JCQkgICAgY2hhciAqYnVmKSBcCi17IFwKLQlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gbG05Ml91cGRhdGVfZGV2aWNlKGRldik7IFwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT52YWx1ZSkpOyBcCi19Ci1zaG93X3RlbXAodGVtcDFfaW5wdXQpOwotc2hvd190ZW1wKHRlbXAxX2NyaXQpOwotc2hvd190ZW1wKHRlbXAxX21pbik7Ci1zaG93X3RlbXAodGVtcDFfbWF4KTsKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGxtOTJfZGF0YSAqZGF0YSA9IGxtOTJfdXBkYXRlX2RldmljZShkZXYpOwogCi0jZGVmaW5lIHNldF90ZW1wKHZhbHVlLCByZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZiwgXAotCXNpemVfdCBjb3VudCkgXAoteyBcCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAotCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAotCWxvbmcgdmFsOyBcCi0JaW50IGVyciA9IGtzdHJ0b2woYnVmLCAxMCwgJnZhbCk7IFwKLQlpZiAoZXJyKSBcCi0JCXJldHVybiBlcnI7IFwKLVwKLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKLQlkYXRhLT52YWx1ZSA9IFRFTVBfVE9fUkVHKHZhbCk7IFwKLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgcmVnLCBkYXRhLT52YWx1ZSk7IFwKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAotCXJldHVybiBjb3VudDsgXAotfQotc2V0X3RlbXAodGVtcDFfY3JpdCwgTE05Ml9SRUdfVEVNUF9DUklUKTsKLXNldF90ZW1wKHRlbXAxX21pbiwgTE05Ml9SRUdfVEVNUF9MT1cpOwotc2V0X3RlbXAodGVtcDFfbWF4LCBMTTkyX1JFR19URU1QX0hJR0gpOwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXAxX2NyaXRfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGxtOTJfZGF0YSAqZGF0YSA9IGxtOTJfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXAxX2NyaXQpCi0JCSAgICAgICAtIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcDFfaHlzdCkpOwotfQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wMV9tYXhfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gbG05Ml91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcDFfbWF4KQotCQkgICAgICAgLSBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXAxX2h5c3QpKTsKLX0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcDFfbWluX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGxtOTJfZGF0YSAqZGF0YSA9IGxtOTJfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXAxX21pbikKLQkJICAgICAgICsgVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wMV9oeXN0KSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAxX2NyaXRfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCWludCBuciA9IGF0dHItPmluZGV4OworCWxvbmcgdmFsOworCWludCBlcnI7CisJCisJZXJyID0ga3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKKwlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgcmVnc1tucl0sIGRhdGEtPnRlbXBbbnJdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBsbTkyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wW2F0dHItPmluZGV4XSkKKwkJICAgICAgIC0gVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wW3RfaHlzdF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21pbl9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtOTJfZGF0YSAqZGF0YSA9IGxtOTJfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBbdF9taW5dKQorCQkgICAgICAgKyBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBbdF9oeXN0XSkpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlsb25nIHZhbDsKIAlpbnQgZXJyOwogCkBAIC0yMTIsOSArMjA3LDkgQEAKIAkJcmV0dXJuIGVycjsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT50ZW1wMV9oeXN0ID0gVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wMV9jcml0KSAtIHZhbDsKKwlkYXRhLT50ZW1wW3RfaHlzdF0gPSBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKSAtIHZhbDsKIAlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgTE05Ml9SRUdfVEVNUF9IWVNULAotCQkJCSAgICAgVEVNUF9UT19SRUcoZGF0YS0+dGVtcDFfaHlzdCkpOworCQkJCSAgICAgVEVNUF9UT19SRUcoZGF0YS0+dGVtcFt0X2h5c3RdKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjIzLDcgKzIxOCw3IEBACiAJCQkgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGxtOTJfZGF0YSAqZGF0YSA9IGxtOTJfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBBTEFSTVNfRlJPTV9SRUcoZGF0YS0+dGVtcDFfaW5wdXQpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgQUxBUk1TX0ZST01fUkVHKGRhdGEtPnRlbXBbdF9pbnB1dF0pKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjMxLDI2ICsyMjYsMjUgQEAKIHsKIAlpbnQgYml0bnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OwogCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBsbTkyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGRhdGEtPnRlbXAxX2lucHV0ID4+IGJpdG5yKSAmIDEpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoZGF0YS0+dGVtcFt0X2lucHV0XSA+PiBiaXRucikgJiAxKTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxX2lucHV0LCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMV9jcml0LAotCXNldF90ZW1wMV9jcml0KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxX2NyaXRfaHlzdCwKLQlzZXRfdGVtcDFfY3JpdF9oeXN0KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxX21pbiwKLQlzZXRfdGVtcDFfbWluKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW5faHlzdCwgU19JUlVHTywgc2hvd190ZW1wMV9taW5faHlzdCwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMV9tYXgsCi0Jc2V0X3RlbXAxX21heCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcDFfbWF4X2h5c3QsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCB0X2lucHV0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwgc2V0X3RlbXAsCisJCQkgIHRfY3JpdCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9oeXN0LAorCQkJICBzZXRfdGVtcF9oeXN0LCB0X2NyaXQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAsIHNldF90ZW1wLAorCQkJICB0X21pbik7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWluX2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcF9taW5faHlzdCwgTlVMTCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwgc2V0X3RlbXAsCisJCQkgIHRfbWF4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcF9oeXN0LCBOVUxMLCB0X21heCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBzaG93X2FsYXJtcywgTlVMTCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOwogCi0KIC8qCiAgKiBEZXRlY3Rpb24gYW5kIHJlZ2lzdHJhdGlvbgogICovCkBAIC0zMjIsMjQgKzMxNiwyMSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05Ml9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX2NyaXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21pbi5hdHRyLAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtOTJfYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl90ZW1wMV9taW5faHlzdC5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtOTJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gbG05Ml9hdHRyaWJ1dGVzLAotfTsKK0FUVFJJQlVURV9HUk9VUFMobG05Mik7CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwogc3RhdGljIGludCBsbTkyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKQEAgLTM3MSw0NiArMzYyLDI0IEBACiBzdGF0aWMgaW50IGxtOTJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IGxtOTJfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwogCiAJZGF0YSA9IGRldm1fa3phbGxvYygmbmV3X2NsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IGxtOTJfZGF0YSksCiAJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKKwlkYXRhLT5jbGllbnQgPSBuZXdfY2xpZW50OwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXBzZXQgKi8KIAlsbTkyX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCi0JLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG05Ml9ncm91cCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGV4aXRfcmVtb3ZlOwotCX0KLQotCXJldHVybiAwOwotCi1leGl0X3JlbW92ZToKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG05Ml9ncm91cCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBsbTkyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG05Ml9ncm91cCk7Ci0KLQlyZXR1cm4gMDsKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcygmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkJCSAgIG5ld19jbGllbnQtPm5hbWUsCisJCQkJCQkJICAgZGF0YSwgbG05Ml9ncm91cHMpOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsKIH0KIAogCkBAIC00MzEsNyArNDAwLDYgQEAKIAkJLm5hbWUJPSAibG05MiIsCiAJfSwKIAkucHJvYmUJCT0gbG05Ml9wcm9iZSwKLQkucmVtb3ZlCQk9IGxtOTJfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGxtOTJfaWQsCiAJLmRldGVjdAkJPSBsbTkyX2RldGVjdCwKIAkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG05My5jIGIvZHJpdmVycy9od21vbi9sbTkzLmMKaW5kZXggYWRmMjMxNi4uNmMyZGY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkzLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkzLmMKQEAgLTI3NDcsMTAgKzI3NDcsOCBAQAogCX0KIAogCWRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IGxtOTNfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIm91dCBvZiBtZW1vcnkhXG4iKTsKKwlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKIAogCS8qIGhvdXNla2VlcGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGMyOTQ1LmMgYi9kcml2ZXJzL2h3bW9uL2x0YzI5NDUuYwppbmRleCBjOWNkZGY1Li4zNzAxYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2x0YzI5NDUuYworKysgYi9kcml2ZXJzL2h3bW9uL2x0YzI5NDUuYwpAQCAtMSw0ICsxLDQgQEAKLSAgICAvKgorLyoKICAqIERyaXZlciBmb3IgTGluZWFyIFRlY2hub2xvZ3kgTFRDMjk0NSBJMkMgUG93ZXIgTW9uaXRvcgogICoKICAqIENvcHlyaWdodCAoYykgMjAxNCBHdWVudGVyIFJvZWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDExMTEuYyBiL2RyaXZlcnMvaHdtb24vbWF4MTExMS5jCmluZGV4IGVkYTA3N2QuLmY2N2Q3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbWF4MTExMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4MTExMS5jCkBAIC0xOTIsMTAgKzE5Miw4IEBACiAJCXJldHVybiBlcnI7CiAKIAlkYXRhID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXgxMTExX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJaWYgKGRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJc3dpdGNoIChjaGlwKSB7CiAJY2FzZSBtYXgxMTEwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwppbmRleCA0YzIzYWZlLi5lZGE5Y2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDE2MTkuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwpAQCAtMTksMTMgKzE5LDggQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTc2LDM4ICs3MSwxNCBAQAogCXJldHVybiAodmFsIDwgMCA/IHZhbCsweDEwMCoxMDAwIDogdmFsKSAvIDEwMDA7CiB9CiAKLS8qCi0gKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KLSAqLwotCi1zdGF0aWMgaW50IG1heDE2MTlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBtYXgxNjE5X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgbWF4MTYxOV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLXN0YXRpYyBpbnQgbWF4MTYxOV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgc3RydWN0IG1heDE2MTlfZGF0YSAqbWF4MTYxOV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLS8qCi0gKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXgxNjE5X2lkW10gPSB7Ci0JeyAibWF4MTYxOSIsIDAgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MTYxOV9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXgxNjE5X2RyaXZlciA9IHsKLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIm1heDE2MTkiLAotCX0sCi0JLnByb2JlCQk9IG1heDE2MTlfcHJvYmUsCi0JLnJlbW92ZQkJPSBtYXgxNjE5X3JlbW92ZSwKLQkuaWRfdGFibGUJPSBtYXgxNjE5X2lkLAotCS5kZXRlY3QJCT0gbWF4MTYxOV9kZXRlY3QsCi0JLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCitlbnVtIHRlbXBfaW5kZXggeworCXRfaW5wdXQxID0gMCwKKwl0X2lucHV0MiwKKwl0X2xvdzIsCisJdF9oaWdoMiwKKwl0X2NyaXQyLAorCXRfaHlzdDIsCisJdF9udW1fcmVncwogfTsKIAogLyoKQEAgLTExNSw2MCArODYsOTIgQEAKICAqLwogCiBzdHJ1Y3QgbWF4MTYxOV9kYXRhIHsKLQlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCiAKIAkvKiByZWdpc3RlcnMgdmFsdWVzICovCi0JdTggdGVtcF9pbnB1dDE7IC8qIGxvY2FsICovCi0JdTggdGVtcF9pbnB1dDIsIHRlbXBfbG93MiwgdGVtcF9oaWdoMjsgLyogcmVtb3RlICovCi0JdTggdGVtcF9jcml0MjsKLQl1OCB0ZW1wX2h5c3QyOworCXU4IHRlbXBbdF9udW1fcmVnc107CS8qIGluZGV4IHdpdGggZW51bSB0ZW1wX2luZGV4ICovCiAJdTggYWxhcm1zOwogfTsKIAorc3RhdGljIGNvbnN0IHU4IHJlZ3NfcmVhZFt0X251bV9yZWdzXSA9IHsKKwlbdF9pbnB1dDFdID0gTUFYMTYxOV9SRUdfUl9MT0NBTF9URU1QLAorCVt0X2lucHV0Ml0gPSBNQVgxNjE5X1JFR19SX1JFTU9URV9URU1QLAorCVt0X2xvdzJdID0gTUFYMTYxOV9SRUdfUl9SRU1PVEVfTE9XLAorCVt0X2hpZ2gyXSA9IE1BWDE2MTlfUkVHX1JfUkVNT1RFX0hJR0gsCisJW3RfY3JpdDJdID0gTUFYMTYxOV9SRUdfUl9SRU1PVEVfQ1JJVCwKKwlbdF9oeXN0Ml0gPSBNQVgxNjE5X1JFR19SX1RDUklUX0hZU1QsCit9OworCitzdGF0aWMgY29uc3QgdTggcmVnc193cml0ZVt0X251bV9yZWdzXSA9IHsKKwlbdF9sb3cyXSA9IE1BWDE2MTlfUkVHX1dfUkVNT1RFX0xPVywKKwlbdF9oaWdoMl0gPSBNQVgxNjE5X1JFR19XX1JFTU9URV9ISUdILAorCVt0X2NyaXQyXSA9IE1BWDE2MTlfUkVHX1dfUkVNT1RFX0NSSVQsCisJW3RfaHlzdDJdID0gTUFYMTYxOV9SRUdfV19UQ1JJVF9IWVNULAorfTsKKworc3RhdGljIHN0cnVjdCBtYXgxNjE5X2RhdGEgKm1heDE2MTlfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1heDE2MTlfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IGNvbmZpZywgaTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICogMikgfHwgIWRhdGEtPnZhbGlkKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiVXBkYXRpbmcgbWF4MTYxOSBkYXRhLlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCB0X251bV9yZWdzOyBpKyspCisJCQlkYXRhLT50ZW1wW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJcmVnc19yZWFkW2ldKTsKKwkJZGF0YS0+YWxhcm1zID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJTUFYMTYxOV9SRUdfUl9TVEFUVVMpOworCQkvKiBJZiBPVkVSVCBwb2xhcml0eSBpcyBsb3csIHJldmVyc2UgYWxhcm0gYml0ICovCisJCWNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDE2MTlfUkVHX1JfQ09ORklHKTsKKwkJaWYgKCEoY29uZmlnICYgMHgyMCkpCisJCQlkYXRhLT5hbGFybXMgXj0gMHgwMjsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKwogLyoKICAqIFN5c2ZzIHN0dWZmCiAgKi8KIAotI2RlZmluZSBzaG93X3RlbXAodmFsdWUpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCi0JCQkgICAgY2hhciAqYnVmKSBcCi17IFwKLQlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gbWF4MTYxOV91cGRhdGVfZGV2aWNlKGRldik7IFwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcF9mcm9tX3JlZyhkYXRhLT52YWx1ZSkpOyBcCi19Ci1zaG93X3RlbXAodGVtcF9pbnB1dDEpOwotc2hvd190ZW1wKHRlbXBfaW5wdXQyKTsKLXNob3dfdGVtcCh0ZW1wX2xvdzIpOwotc2hvd190ZW1wKHRlbXBfaGlnaDIpOwotc2hvd190ZW1wKHRlbXBfY3JpdDIpOwotc2hvd190ZW1wKHRlbXBfaHlzdDIpOworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gbWF4MTYxOV91cGRhdGVfZGV2aWNlKGRldik7CiAKLSNkZWZpbmUgc2V0X3RlbXAyKHZhbHVlLCByZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZiwgXAotCXNpemVfdCBjb3VudCkgXAoteyBcCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAotCXN0cnVjdCBtYXgxNjE5X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAotCWxvbmcgdmFsOyBcCi0JaW50IGVyciA9IGtzdHJ0b2woYnVmLCAxMCwgJnZhbCk7IFwKLQlpZiAoZXJyKSBcCi0JCXJldHVybiBlcnI7IFwKLVwKLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKLQlkYXRhLT52YWx1ZSA9IHRlbXBfdG9fcmVnKHZhbCk7IFwKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCBkYXRhLT52YWx1ZSk7IFwKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAotCXJldHVybiBjb3VudDsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wX2Zyb21fcmVnKGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKSk7CiB9CiAKLXNldF90ZW1wMih0ZW1wX2xvdzIsIE1BWDE2MTlfUkVHX1dfUkVNT1RFX0xPVyk7Ci1zZXRfdGVtcDIodGVtcF9oaWdoMiwgTUFYMTYxOV9SRUdfV19SRU1PVEVfSElHSCk7Ci1zZXRfdGVtcDIodGVtcF9jcml0MiwgTUFYMTYxOV9SRUdfV19SRU1PVEVfQ1JJVCk7Ci1zZXRfdGVtcDIodGVtcF9oeXN0MiwgTUFYMTYxOV9SRUdfV19UQ1JJVF9IWVNUKTsKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IG1heDE2MTlfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJbG9uZyB2YWw7CisJaW50IGVyciA9IGtzdHJ0b2woYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT50ZW1wW2F0dHItPmluZGV4XSA9IHRlbXBfdG9fcmVnKHZhbCk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3Nfd3JpdGVbYXR0ci0+aW5kZXhdLAorCQkJCSAgZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KIAogc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNoYXIgKmJ1ZikKQEAgLTE4NSwyOSArMTg4LDMwIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wX2lucHV0MSwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9pbnB1dDIsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9sb3cyLAotCXNldF90ZW1wX2xvdzIpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9oaWdoMiwKLQlzZXRfdGVtcF9oaWdoMik7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9jcml0MiwKLQlzZXRfdGVtcF9jcml0Mik7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX2h5c3QyLAotCXNldF90ZW1wX2h5c3QyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgdF9pbnB1dDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCB0X2lucHV0Mik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwgc2V0X3RlbXAsCisJCQkgIHRfbG93Mik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwgc2V0X3RlbXAsCisJCQkgIHRfaGlnaDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wLCBzZXRfdGVtcCwKKwkJCSAgdF9jcml0Mik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwKKwkJCSAgc2V0X3RlbXAsIHRfaHlzdDIpOworCiBzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBzaG93X2FsYXJtcywgTlVMTCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxNjE5X2F0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDJfbWluLmF0dHIsCi0JJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMl9jcml0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5hdHRyLAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1heDE2MTlfYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLAogCiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLApAQCAtMjE2LDE0ICsyMjAsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTYxOV9ncm91cCA9IHsKLQkuYXR0cnMgPSBtYXgxNjE5X2F0dHJpYnV0ZXMsCi19OwotCi0vKgotICogUmVhbCBjb2RlCi0gKi8KK0FUVFJJQlVURV9HUk9VUFMobWF4MTYxOSk7CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwogc3RhdGljIGludCBtYXgxNjE5X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApAQCAtMjYxLDQxICsyNTgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1heDE2MTlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBtYXgxNjE5X2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQotCWRhdGEgPSBkZXZtX2t6YWxsb2MoJm5ld19jbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXgxNjE5X2RhdGEpLAotCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgTUFYMTYxOSBjaGlwICovCi0JbWF4MTYxOV9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJm1heDE2MTlfZ3JvdXApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXhpdF9yZW1vdmVfZmlsZXM6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJm1heDE2MTlfZ3JvdXApOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIG1heDE2MTlfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAl1OCBjb25maWc7CkBAIC0zMTEsNDggKzI3Myw0NiBAQAogCQkJCQkgIGNvbmZpZyAmIDB4QkYpOyAvKiBydW4gKi8KIH0KIAotc3RhdGljIGludCBtYXgxNjE5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBtYXgxNjE5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1heDE2MTlfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAKLQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJm1heDE2MTlfZ3JvdXApOworCWRhdGEgPSBkZXZtX2t6YWxsb2MoJm5ld19jbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXgxNjE5X2RhdGEpLAorCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXR1cm4gMDsKKwlkYXRhLT5jbGllbnQgPSBuZXdfY2xpZW50OworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIEluaXRpYWxpemUgdGhlIE1BWDE2MTkgY2hpcCAqLworCW1heDE2MTlfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcygmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkJCSAgIG5ld19jbGllbnQtPm5hbWUsCisJCQkJCQkJICAgZGF0YSwKKwkJCQkJCQkgICBtYXgxNjE5X2dyb3Vwcyk7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IG1heDE2MTlfZGF0YSAqbWF4MTYxOV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBtYXgxNjE5X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXgxNjE5X2lkW10gPSB7CisJeyAibWF4MTYxOSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MTYxOV9pZCk7CiAKLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVwZGF0aW5nIG1heDE2MTkgZGF0YS5cbiIpOwotCQlkYXRhLT50ZW1wX2lucHV0MSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCU1BWDE2MTlfUkVHX1JfTE9DQUxfVEVNUCk7Ci0JCWRhdGEtPnRlbXBfaW5wdXQyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJTUFYMTYxOV9SRUdfUl9SRU1PVEVfVEVNUCk7Ci0JCWRhdGEtPnRlbXBfaGlnaDIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQlNQVgxNjE5X1JFR19SX1JFTU9URV9ISUdIKTsKLQkJZGF0YS0+dGVtcF9sb3cyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJTUFYMTYxOV9SRUdfUl9SRU1PVEVfTE9XKTsKLQkJZGF0YS0+dGVtcF9jcml0MiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCU1BWDE2MTlfUkVHX1JfUkVNT1RFX0NSSVQpOwotCQlkYXRhLT50ZW1wX2h5c3QyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJTUFYMTYxOV9SRUdfUl9UQ1JJVF9IWVNUKTsKLQkJZGF0YS0+YWxhcm1zID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJTUFYMTYxOV9SRUdfUl9TVEFUVVMpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBkYXRhOwotfQorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDE2MTlfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibWF4MTYxOSIsCisJfSwKKwkucHJvYmUJCT0gbWF4MTYxOV9wcm9iZSwKKwkuaWRfdGFibGUJPSBtYXgxNjE5X2lkLAorCS5kZXRlY3QJCT0gbWF4MTYxOV9kZXRlY3QsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCit9OwogCiBtb2R1bGVfaTJjX2RyaXZlcihtYXgxNjE5X2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTk3LmMgYi9kcml2ZXJzL2h3bW9uL21heDE5Ny5jCmluZGV4IDk2ZGNjYWYuLjgyMTI4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbWF4MTk3LmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxOTcuYwpAQCAtMjc1LDEwICsyNzUsOCBAQAogCX0KIAogCWRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXgxOTdfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJkZXZtX2t6YWxsb2MgZmFpbGVkXG4iKTsKKwlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWRhdGEtPnBkYXRhID0gcGRhdGE7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL25jdDY2ODMuYyBiL2RyaXZlcnMvaHdtb24vbmN0NjY4My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MTBmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL25jdDY2ODMuYwpAQCAtMCwwICsxLDE0NTcgQEAKKy8qCisgKiBuY3Q2NjgzIC0gRHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5IG9mCisgKgkgICAgIE51dm90b24gTkNUNjY4M0QgZVNJTworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICoKKyAqIERlcml2ZWQgZnJvbSBuY3Q2Nzc1IGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzICBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgY2hpcHM6CisgKgorICogQ2hpcCAgICAgICAgI3ZpbiAgICAjZmFuICAgICNwd20gICAgI3RlbXAgIGNoaXAgSUQKKyAqIG5jdDY2ODNkICAgICAyMSgxKSAgIDE2ICAgICAgOCAgICAgICAzMigxKSAweGM3MzAKKyAqCisgKiBOb3RlczoKKyAqCSgxKSBUb3RhbCBudW1iZXIgb2YgdmluIGFuZCB0ZW1wIGlucHV0cyBpcyAzMi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworZW51bSBraW5kcyB7IG5jdDY2ODMgfTsKKworc3RhdGljIGJvb2wgZm9yY2U7Cittb2R1bGVfcGFyYW0oZm9yY2UsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZSwgIlNldCB0byBvbmUgdG8gZW5hYmxlIGRldGVjdGlvbiBvbiBub24tSW50ZWwgYm9hcmRzIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmN0NjY4M19kZXZpY2VfbmFtZXNbXSA9IHsKKwkibmN0NjY4MyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5jdDY2ODNfY2hpcF9uYW1lc1tdID0geworCSJOQ1Q2NjgzRCIsCit9OworCisjZGVmaW5lIERSVk5BTUUgIm5jdDY2ODMiCisKKy8qCisgKiBTdXBlci1JL08gY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lIE5DVDY2ODNfTERfQUNQSQkJMHgwYQorI2RlZmluZSBOQ1Q2NjgzX0xEX0hXTQkJMHgwYgorI2RlZmluZSBOQ1Q2NjgzX0xEX1ZJRAkJMHgwZAorCisjZGVmaW5lIFNJT19SRUdfTERTRUwJCTB4MDcJLyogTG9naWNhbCBkZXZpY2Ugc2VsZWN0ICovCisjZGVmaW5lIFNJT19SRUdfREVWSUQJCTB4MjAJLyogRGV2aWNlIElEICgyIGJ5dGVzKSAqLworI2RlZmluZSBTSU9fUkVHX0VOQUJMRQkJMHgzMAkvKiBMb2dpY2FsIGRldmljZSBlbmFibGUgKi8KKyNkZWZpbmUgU0lPX1JFR19BRERSCQkweDYwCS8qIExvZ2ljYWwgZGV2aWNlIGFkZHJlc3MgKDIgYnl0ZXMpICovCisKKyNkZWZpbmUgU0lPX05DVDY2ODFfSUQJCTB4YjI3MAkvKiBmb3IgbGF0ZXIgKi8KKyNkZWZpbmUgU0lPX05DVDY2ODNfSUQJCTB4YzczMAorI2RlZmluZSBTSU9fSURfTUFTSwkJMHhGRkYwCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3VwZXJpb19vdXRiKGludCBpb3JlZywgaW50IHJlZywgaW50IHZhbCkKK3sKKwlvdXRiKHJlZywgaW9yZWcpOworCW91dGIodmFsLCBpb3JlZyArIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludAorc3VwZXJpb19pbmIoaW50IGlvcmVnLCBpbnQgcmVnKQoreworCW91dGIocmVnLCBpb3JlZyk7CisJcmV0dXJuIGluYihpb3JlZyArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3N1cGVyaW9fc2VsZWN0KGludCBpb3JlZywgaW50IGxkKQoreworCW91dGIoU0lPX1JFR19MRFNFTCwgaW9yZWcpOworCW91dGIobGQsIGlvcmVnICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdXBlcmlvX2VudGVyKGludCBpb3JlZykKK3sKKwkvKgorCSAqIFRyeSB0byByZXNlcnZlIDxpb3JlZz4gYW5kIDxpb3JlZyArIDE+IGZvciBleGNsdXNpdmUgYWNjZXNzLgorCSAqLworCWlmICghcmVxdWVzdF9tdXhlZF9yZWdpb24oaW9yZWcsIDIsIERSVk5BTUUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJb3V0YigweDg3LCBpb3JlZyk7CisJb3V0YigweDg3LCBpb3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzdXBlcmlvX2V4aXQoaW50IGlvcmVnKQoreworCW91dGIoMHhhYSwgaW9yZWcpOworCW91dGIoMHgwMiwgaW9yZWcpOworCW91dGIoMHgwMiwgaW9yZWcgKyAxKTsKKwlyZWxlYXNlX3JlZ2lvbihpb3JlZywgMik7Cit9CisKKy8qCisgKiBJU0EgY29uc3RhbnRzCisgKi8KKworI2RlZmluZSBJT1JFR0lPTl9BTElHTk1FTlQJKH43KQorI2RlZmluZSBJT1JFR0lPTl9PRkZTRVQJCTQJLyogVXNlIEVDIHBvcnQgMSAqLworI2RlZmluZSBJT1JFR0lPTl9MRU5HVEgJCTQKKworI2RlZmluZSBFQ19QQUdFX1JFRwkJMAorI2RlZmluZSBFQ19JTkRFWF9SRUcJCTEKKyNkZWZpbmUgRUNfREFUQV9SRUcJCTIKKyNkZWZpbmUgRUNfRVZFTlRfUkVHCQkzCisKKy8qIENvbW1vbiBhbmQgTkNUNjY4MyBzcGVjaWZpYyBkYXRhICovCisKKyNkZWZpbmUgTkNUNjY4M19OVU1fUkVHX01PTgkJMzIKKyNkZWZpbmUgTkNUNjY4M19OVU1fUkVHX0ZBTgkJMTYKKyNkZWZpbmUgTkNUNjY4M19OVU1fUkVHX1BXTQkJOAorCisjZGVmaW5lIE5DVDY2ODNfUkVHX01PTih4KQkJKDB4MTAwICsgKHgpICogMikKKyNkZWZpbmUgTkNUNjY4M19SRUdfRkFOX1JQTSh4KQkJKDB4MTQwICsgKHgpICogMikKKyNkZWZpbmUgTkNUNjY4M19SRUdfUFdNKHgpCQkoMHgxNjAgKyAoeCkpCisKKyNkZWZpbmUgTkNUNjY4M19SRUdfTU9OX1NUUyh4KQkJKDB4MTc0ICsgKHgpKQorI2RlZmluZSBOQ1Q2NjgzX1JFR19JRExFKHgpCQkoMHgxNzggKyAoeCkpCisKKyNkZWZpbmUgTkNUNjY4M19SRUdfRkFOX1NUUyh4KQkJKDB4MTdjICsgKHgpKQorI2RlZmluZSBOQ1Q2NjgzX1JFR19GQU5fRVJSU1RTCQkweDE3ZQorI2RlZmluZSBOQ1Q2NjgzX1JFR19GQU5fSU5JVFNUUwkJMHgxN2YKKworI2RlZmluZSBOQ1Q2NjgzX0hXTV9DRkcJCQkweDE4MAorCisjZGVmaW5lIE5DVDY2ODNfUkVHX01PTl9DRkcoeCkJCSgweDFhMCArICh4KSkKKyNkZWZpbmUgTkNUNjY4M19SRUdfRkFOSU5fQ0ZHKHgpCSgweDFjMCArICh4KSkKKyNkZWZpbmUgTkNUNjY4M19SRUdfRkFOT1VUX0NGRyh4KQkoMHgxZDAgKyAoeCkpCisKKyNkZWZpbmUgTkNUNjY4M19SRUdfSU5URUxfVEVNUF9NQVgoeCkJKDB4OTAxICsgKHgpICogMTYpCisjZGVmaW5lIE5DVDY2ODNfUkVHX0lOVEVMX1RFTVBfQ1JJVCh4KQkoMHg5MGQgKyAoeCkgKiAxNikKKworI2RlZmluZSBOQ1Q2NjgzX1JFR19URU1QX0hZU1QoeCkJKDB4MzMwICsgKHgpKQkJLyogOCBiaXQgKi8KKyNkZWZpbmUgTkNUNjY4M19SRUdfVEVNUF9NQVgoeCkJCSgweDM1MCArICh4KSkJCS8qIDggYml0ICovCisjZGVmaW5lIE5DVDY2ODNfUkVHX01PTl9ISUdIKHgpCQkoMHgzNzAgKyAoeCkgKiAyKQkvKiA4IGJpdCAqLworI2RlZmluZSBOQ1Q2NjgzX1JFR19NT05fTE9XKHgpCQkoMHgzNzEgKyAoeCkgKiAyKQkvKiA4IGJpdCAqLworCisjZGVmaW5lIE5DVDY2ODNfUkVHX0ZBTl9NSU4oeCkJCSgweDNiOCArICh4KSAqIDIpCS8qIDE2IGJpdCAqLworCisjZGVmaW5lIE5DVDY2ODNfUkVHX0NVU1RPTUVSX0lECQkweDYwMgorI2RlZmluZSBOQ1Q2NjgzX0NVU1RPTUVSX0lEX0lOVEVMCTB4ODA1CisKKyNkZWZpbmUgTkNUNjY4M19SRUdfQlVJTERfWUVBUgkJMHg2MDQKKyNkZWZpbmUgTkNUNjY4M19SRUdfQlVJTERfTU9OVEgJCTB4NjA1CisjZGVmaW5lIE5DVDY2ODNfUkVHX0JVSUxEX0RBWQkJMHg2MDYKKyNkZWZpbmUgTkNUNjY4M19SRUdfU0VSSUFMCQkweDYwNworI2RlZmluZSBOQ1Q2NjgzX1JFR19WRVJTSU9OX0hJCQkweDYwOAorI2RlZmluZSBOQ1Q2NjgzX1JFR19WRVJTSU9OX0xPCQkweDYwOQorCisjZGVmaW5lIE5DVDY2ODNfUkVHX0NSX0NBU0VPUEVOCQkweGU4CisjZGVmaW5lIE5DVDY2ODNfQ1JfQ0FTRU9QRU5fTUFTSwkoMSA8PCA3KQorCisjZGVmaW5lIE5DVDY2ODNfUkVHX0NSX0JFRVAJCTB4ZTAKKyNkZWZpbmUgTkNUNjY4M19DUl9CRUVQX01BU0sJCSgxIDw8IDYpCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuY3Q2NjgzX21vbl9sYWJlbFtdID0geworCU5VTEwsCS8qIGRpc2FibGVkICovCisJIkxvY2FsIiwKKwkiRGlvZGUgMCAoY3VycikiLAorCSJEaW9kZSAxIChjdXJyKSIsCisJIkRpb2RlIDIgKGN1cnIpIiwKKwkiRGlvZGUgMCAodm9sdCkiLAorCSJEaW9kZSAxICh2b2x0KSIsCisJIkRpb2RlIDIgKHZvbHQpIiwKKwkiVGhlcm1pc3RvciAxNCIsCisJIlRoZXJtaXN0b3IgMTUiLAorCSJUaGVybWlzdG9yIDE2IiwKKwkiVGhlcm1pc3RvciAwIiwKKwkiVGhlcm1pc3RvciAxIiwKKwkiVGhlcm1pc3RvciAyIiwKKwkiVGhlcm1pc3RvciAzIiwKKwkiVGhlcm1pc3RvciA0IiwKKwkiVGhlcm1pc3RvciA1IiwJCS8qIDB4MTAgKi8KKwkiVGhlcm1pc3RvciA2IiwKKwkiVGhlcm1pc3RvciA3IiwKKwkiVGhlcm1pc3RvciA4IiwKKwkiVGhlcm1pc3RvciA5IiwKKwkiVGhlcm1pc3RvciAxMCIsCisJIlRoZXJtaXN0b3IgMTEiLAorCSJUaGVybWlzdG9yIDEyIiwKKwkiVGhlcm1pc3RvciAxMyIsCisJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkiUEVDSSAwLjAiLAkJLyogMHgyMCAqLworCSJQRUNJIDEuMCIsCisJIlBFQ0kgMi4wIiwKKwkiUEVDSSAzLjAiLAorCSJQRUNJIDAuMSIsCisJIlBFQ0kgMS4xIiwKKwkiUEVDSSAyLjEiLAorCSJQRUNJIDMuMSIsCisJIlBFQ0kgRElNTSAwIiwKKwkiUEVDSSBESU1NIDEiLAorCSJQRUNJIERJTU0gMiIsCisJIlBFQ0kgRElNTSAzIiwKKwlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCSJQQ0ggQ1BVIiwJCS8qIDB4MzAgKi8KKwkiUENIIENISVAiLAorCSJQQ0ggQ0hJUCBDUFUgTUFYIiwKKwkiUENIIE1DSCIsCisJIlBDSCBESU1NIDAiLAorCSJQQ0ggRElNTSAxIiwKKwkiUENIIERJTU0gMiIsCisJIlBDSCBESU1NIDMiLAorCSJTTUJ1cyAwIiwKKwkiU01CdXMgMSIsCisJIlNNQnVzIDIiLAorCSJTTUJ1cyAzIiwKKwkiU01CdXMgNCIsCisJIlNNQnVzIDUiLAorCSJESU1NIDAiLAorCSJESU1NIDEiLAorCSJESU1NIDIiLAkJLyogMHg0MCAqLworCSJESU1NIDMiLAorCSJBTUQgVFNJIEFkZHIgOTBoIiwKKwkiQU1EIFRTSSBBZGRyIDkyaCIsCisJIkFNRCBUU0kgQWRkciA5NGgiLAorCSJBTUQgVFNJIEFkZHIgOTZoIiwKKwkiQU1EIFRTSSBBZGRyIDk4aCIsCisJIkFNRCBUU0kgQWRkciA5YWgiLAorCSJBTUQgVFNJIEFkZHIgOWNoIiwKKwkiQU1EIFRTSSBBZGRyIDlkaCIsCisJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkiVmlydHVhbCAwIiwJCS8qIDB4NTAgKi8KKwkiVmlydHVhbCAxIiwKKwkiVmlydHVhbCAyIiwKKwkiVmlydHVhbCAzIiwKKwkiVmlydHVhbCA0IiwKKwkiVmlydHVhbCA1IiwKKwkiVmlydHVhbCA2IiwKKwkiVmlydHVhbCA3IiwKKwlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCSJWQ0MiLAkJCS8qIDB4NjAgdm9sdGFnZSBzZW5zb3JzICovCisJIlZTQiIsCisJIkFWU0IiLAorCSJWVFQiLAorCSJWQkFUIiwKKwkiVlJFRiIsCisJIlZJTjAiLAorCSJWSU4xIiwKKwkiVklOMiIsCisJIlZJTjMiLAorCSJWSU40IiwKKwkiVklONSIsCisJIlZJTjYiLAorCSJWSU43IiwKKwkiVklOOCIsCisJIlZJTjkiLAorCSJWSU4xMCIsCisJIlZJTjExIiwKKwkiVklOMTIiLAorCSJWSU4xMyIsCisJIlZJTjE0IiwKKwkiVklOMTUiLAorCSJWSU4xNiIsCit9OworCisjZGVmaW5lIE5VTV9NT05fTEFCRUxTCQlBUlJBWV9TSVpFKG5jdDY2ODNfbW9uX2xhYmVsKQorI2RlZmluZSBNT05fVk9MVEFHRV9TVEFSVAkweDYwCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IG5jdDY2ODNfZGF0YSB7CisJaW50IGFkZHI7CQkvKiBJTyBiYXNlIG9mIEVDIHNwYWNlICovCisJaW50IHNpb3JlZzsJCS8qIFNJTyByZWdpc3RlciAqLworCWVudW0ga2luZHMga2luZDsKKwl1MTYgY3VzdG9tZXJfaWQ7CisKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzWzZdOworCisJaW50IHRlbXBfbnVtOwkJCS8qIG51bWJlciBvZiB0ZW1wZXJhdHVyZSBhdHRyaWJ1dGVzICovCisJdTggdGVtcF9pbmRleFtOQ1Q2NjgzX05VTV9SRUdfTU9OXTsKKwl1OCB0ZW1wX3NyY1tOQ1Q2NjgzX05VTV9SRUdfTU9OXTsKKworCXU4IGluX251bTsJCQkvKiBudW1iZXIgb2Ygdm9sdGFnZSBhdHRyaWJ1dGVzICovCisJdTggaW5faW5kZXhbTkNUNjY4M19OVU1fUkVHX01PTl07CisJdTggaW5fc3JjW05DVDY2ODNfTlVNX1JFR19NT05dOworCisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwkvKiB1c2VkIHRvIHByb3RlY3Qgc2Vuc29yIHVwZGF0ZXMgKi8KKwlib29sIHZhbGlkOwkJCS8qIHRydWUgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLworCisJLyogVm9sdGFnZSBhdHRyaWJ1dGUgdmFsdWVzICovCisJdTggaW5bM11bTkNUNjY4M19OVU1fUkVHX01PTl07CS8qIFswXT1pbiwgWzFdPWluX21heCwgWzJdPWluX21pbiAqLworCisJLyogVGVtcGVyYXR1cmUgYXR0cmlidXRlIHZhbHVlcyAqLworCXMxNiB0ZW1wX2luW05DVDY2ODNfTlVNX1JFR19NT05dOworCXM4IHRlbXBbNF1bTkNUNjY4M19OVU1fUkVHX01PTl07LyogWzBdPW1pbiwgWzFdPW1heCwgWzJdPWh5c3QsCisJCQkJCSAqIFszXT1jcml0CisJCQkJCSAqLworCisJLyogRmFuIGF0dHJpYnV0ZSB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcnBtW05DVDY2ODNfTlVNX1JFR19GQU5dOworCXUxNiBmYW5fbWluW05DVDY2ODNfTlVNX1JFR19GQU5dOworCXU4IGZhbmluX2NmZ1tOQ1Q2NjgzX05VTV9SRUdfRkFOXTsKKwl1OCBmYW5vdXRfY2ZnW05DVDY2ODNfTlVNX1JFR19GQU5dOworCXUxNiBoYXZlX2ZhbjsJCQkvKiBzb21lIGZhbiBpbnB1dHMgY2FuIGJlIGRpc2FibGVkICovCisKKwl1OCBoYXZlX3B3bTsKKwl1OCBwd21bTkNUNjY4M19OVU1fUkVHX1BXTV07CisKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiBSZW1lbWJlciBleHRyYSByZWdpc3RlciB2YWx1ZXMgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCXU4IGh3bV9jZmc7CisjZW5kaWYKK307CisKK3N0cnVjdCBuY3Q2NjgzX3Npb19kYXRhIHsKKwlpbnQgc2lvcmVnOworCWVudW0ga2luZHMga2luZDsKK307CisKK3N0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBucjsKKwkJCXU4IGluZGV4OworCQl9IHM7CisJCWludCBpbmRleDsKKwl9IHU7CisJYm9vbCBzMjsJLyogdHJ1ZSBpZiBib3RoIGluZGV4IGFuZCBuciBhcmUgdXNlZCAqLworfTsKKworc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cl91IHsKKwl1bmlvbiB7CisJCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBhMTsKKwkJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgYTI7CisJfSB1OworCWNoYXIgbmFtZVszMl07Cit9OworCisjZGVmaW5lIF9fVEVNUExBVEVfQVRUUihfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSB7CVwKKwkuYXR0ciA9IHsubmFtZSA9IF90ZW1wbGF0ZSwgLm1vZGUgPSBfbW9kZSB9LAkJXAorCS5zaG93CT0gX3Nob3csCQkJCQlcCisJLnN0b3JlCT0gX3N0b3JlLAkJCQkJXAorfQorCisjZGVmaW5lIFNFTlNPUl9ERVZJQ0VfVEVNUExBVEUoX3RlbXBsYXRlLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwgX2luZGV4KQlcCisJeyAuZGV2X2F0dHIgPSBfX1RFTVBMQVRFX0FUVFIoX3RlbXBsYXRlLCBfbW9kZSwgX3Nob3csIF9zdG9yZSksCVwKKwkgIC51LmluZGV4ID0gX2luZGV4LAkJCQkJCVwKKwkgIC5zMiA9IGZhbHNlIH0KKworI2RlZmluZSBTRU5TT1JfREVWSUNFX1RFTVBMQVRFXzIoX3RlbXBsYXRlLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwJXAorCQkJCSBfbnIsIF9pbmRleCkJCQkJXAorCXsgLmRldl9hdHRyID0gX19URU1QTEFURV9BVFRSKF90ZW1wbGF0ZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpLAlcCisJICAudS5zLmluZGV4ID0gX2luZGV4LAkJCQkJCVwKKwkgIC51LnMubnIgPSBfbnIsCQkJCQkJXAorCSAgLnMyID0gdHJ1ZSB9CisKKyNkZWZpbmUgU0VOU09SX1RFTVBMQVRFKF9uYW1lLCBfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCBfaW5kZXgpCVwKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV90ZW1wbGF0ZSBzZW5zb3JfZGV2X3RlbXBsYXRlXyMjX25hbWUJXAorCT0gU0VOU09SX0RFVklDRV9URU1QTEFURShfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLAlcCisJCQkJIF9pbmRleCkKKworI2RlZmluZSBTRU5TT1JfVEVNUExBVEVfMihfbmFtZSwgX3RlbXBsYXRlLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwJXAorCQkJICBfbnIsIF9pbmRleCkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV90ZW1wbGF0ZSBzZW5zb3JfZGV2X3RlbXBsYXRlXyMjX25hbWUJXAorCT0gU0VOU09SX0RFVklDRV9URU1QTEFURV8yKF90ZW1wbGF0ZSwgX21vZGUsIF9zaG93LCBfc3RvcmUsCVwKKwkJCQkgX25yLCBfaW5kZXgpCisKK3N0cnVjdCBzZW5zb3JfdGVtcGxhdGVfZ3JvdXAgeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICoqdGVtcGxhdGVzOworCXVtb2RlX3QgKCppc192aXNpYmxlKShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRlICosIGludCk7CisJaW50IGJhc2U7Cit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqCituY3Q2NjgzX2NyZWF0ZV9hdHRyX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91cCAqdGcsCisJCQkgIGludCByZXBlYXQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKmEyOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV90ZW1wbGF0ZSAqKnQ7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cl91ICpzdTsKKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncm91cDsKKwlzdHJ1Y3QgYXR0cmlidXRlICoqYXR0cnM7CisJaW50IGksIGosIGNvdW50OworCisJaWYgKHJlcGVhdCA8PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXQgPSB0Zy0+dGVtcGxhdGVzOworCWZvciAoY291bnQgPSAwOyAqdDsgdCsrLCBjb3VudCsrKQorCQk7CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlncm91cCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZ3JvdXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ3JvdXAgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhdHRycyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYXR0cnMpICogKHJlcGVhdCAqIGNvdW50ICsgMSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmIChhdHRycyA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXN1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzdSkgKiByZXBlYXQgKiBjb3VudCwKKwkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKHN1ID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZ3JvdXAtPmF0dHJzID0gYXR0cnM7CisJZ3JvdXAtPmlzX3Zpc2libGUgPSB0Zy0+aXNfdmlzaWJsZTsKKworCWZvciAoaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykgeworCQl0ID0gdGctPnRlbXBsYXRlczsKKwkJZm9yIChqID0gMDsgKnQgIT0gTlVMTDsgaisrKSB7CisJCQlzbnByaW50ZihzdS0+bmFtZSwgc2l6ZW9mKHN1LT5uYW1lKSwKKwkJCQkgKCp0KS0+ZGV2X2F0dHIuYXR0ci5uYW1lLCB0Zy0+YmFzZSArIGkpOworCQkJaWYgKCgqdCktPnMyKSB7CisJCQkJYTIgPSAmc3UtPnUuYTI7CisJCQkJYTItPmRldl9hdHRyLmF0dHIubmFtZSA9IHN1LT5uYW1lOworCQkJCWEyLT5uciA9ICgqdCktPnUucy5uciArIGk7CisJCQkJYTItPmluZGV4ID0gKCp0KS0+dS5zLmluZGV4OworCQkJCWEyLT5kZXZfYXR0ci5hdHRyLm1vZGUgPQorCQkJCSAgKCp0KS0+ZGV2X2F0dHIuYXR0ci5tb2RlOworCQkJCWEyLT5kZXZfYXR0ci5zaG93ID0gKCp0KS0+ZGV2X2F0dHIuc2hvdzsKKwkJCQlhMi0+ZGV2X2F0dHIuc3RvcmUgPSAoKnQpLT5kZXZfYXR0ci5zdG9yZTsKKwkJCQkqYXR0cnMgPSAmYTItPmRldl9hdHRyLmF0dHI7CisJCQl9IGVsc2UgeworCQkJCWEgPSAmc3UtPnUuYTE7CisJCQkJYS0+ZGV2X2F0dHIuYXR0ci5uYW1lID0gc3UtPm5hbWU7CisJCQkJYS0+aW5kZXggPSAoKnQpLT51LmluZGV4ICsgaTsKKwkJCQlhLT5kZXZfYXR0ci5hdHRyLm1vZGUgPQorCQkJCSAgKCp0KS0+ZGV2X2F0dHIuYXR0ci5tb2RlOworCQkJCWEtPmRldl9hdHRyLnNob3cgPSAoKnQpLT5kZXZfYXR0ci5zaG93OworCQkJCWEtPmRldl9hdHRyLnN0b3JlID0gKCp0KS0+ZGV2X2F0dHIuc3RvcmU7CisJCQkJKmF0dHJzID0gJmEtPmRldl9hdHRyLmF0dHI7CisJCQl9CisJCQlhdHRycysrOworCQkJc3UrKzsKKwkJCXQrKzsKKwkJfQorCX0KKworCXJldHVybiBncm91cDsKK30KKworLyogTFNCIGlzIDE2IG1WLCBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgc291cmNlcywgd2hlcmUgaXQgaXMgMzIgbVYgKi8KKyNkZWZpbmUgTU9OX1NSQ19WQ0MJMHg2MAorI2RlZmluZSBNT05fU1JDX1ZTQgkweDYxCisjZGVmaW5lIE1PTl9TUkNfQVZTQgkweDYyCisjZGVmaW5lIE1PTl9TUkNfVkJBVAkweDY0CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBpbl9mcm9tX3JlZyh1MTYgcmVnLCB1OCBzcmMpCit7CisJaW50IHNjYWxlID0gMTY7CisKKwlpZiAoc3JjID09IE1PTl9TUkNfVkNDIHx8IHNyYyA9PSBNT05fU1JDX1ZTQiB8fCBzcmMgPT0gTU9OX1NSQ19BVlNCIHx8CisJICAgIHNyYyA9PSBNT05fU1JDX1ZCQVQpCisJCXNjYWxlIDw8PSAxOworCXJldHVybiByZWcgKiBzY2FsZTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaW5fdG9fcmVnKHUzMiB2YWwsIHU4IHNyYykKK3sKKwlpbnQgc2NhbGUgPSAxNjsKKworCWlmIChzcmMgPT0gTU9OX1NSQ19WQ0MgfHwgc3JjID09IE1PTl9TUkNfVlNCIHx8IHNyYyA9PSBNT05fU1JDX0FWU0IgfHwKKwkgICAgc3JjID09IE1PTl9TUkNfVkJBVCkKKwkJc2NhbGUgPDw9IDE7CisKKwlyZXR1cm4gY2xhbXBfdmFsKERJVl9ST1VORF9DTE9TRVNUKHZhbCwgc2NhbGUpLCAwLCAxMjcpOworfQorCitzdGF0aWMgdTE2IG5jdDY2ODNfcmVhZChzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCWludCByZXM7CisKKwlvdXRiX3AoMHhmZiwgZGF0YS0+YWRkciArIEVDX1BBR0VfUkVHKTsJCS8qIHVubG9jayAqLworCW91dGJfcChyZWcgPj4gOCwgZGF0YS0+YWRkciArIEVDX1BBR0VfUkVHKTsKKwlvdXRiX3AocmVnICYgMHhmZiwgZGF0YS0+YWRkciArIEVDX0lOREVYX1JFRyk7CisJcmVzID0gaW5iX3AoZGF0YS0+YWRkciArIEVDX0RBVEFfUkVHKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdTE2IG5jdDY2ODNfcmVhZDE2KHN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJcmV0dXJuIChuY3Q2NjgzX3JlYWQoZGF0YSwgcmVnKSA8PCA4KSB8IG5jdDY2ODNfcmVhZChkYXRhLCByZWcgKyAxKTsKK30KKworc3RhdGljIHZvaWQgbmN0NjY4M193cml0ZShzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJb3V0Yl9wKDB4ZmYsIGRhdGEtPmFkZHIgKyBFQ19QQUdFX1JFRyk7CQkvKiB1bmxvY2sgKi8KKwlvdXRiX3AocmVnID4+IDgsIGRhdGEtPmFkZHIgKyBFQ19QQUdFX1JFRyk7CisJb3V0Yl9wKHJlZyAmIDB4ZmYsIGRhdGEtPmFkZHIgKyBFQ19JTkRFWF9SRUcpOworCW91dGJfcCh2YWx1ZSAmIDB4ZmYsIGRhdGEtPmFkZHIgKyBFQ19EQVRBX1JFRyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2luX3JlZyhzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCkKK3sKKwlpbnQgY2ggPSBkYXRhLT5pbl9pbmRleFtpbmRleF07CisJaW50IHJlZyA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAwOgorCQlyZWcgPSBOQ1Q2NjgzX1JFR19NT04oY2gpOworCQlicmVhazsKKwljYXNlIDE6CisJCWlmIChkYXRhLT5jdXN0b21lcl9pZCAhPSBOQ1Q2NjgzX0NVU1RPTUVSX0lEX0lOVEVMKQorCQkJcmVnID0gTkNUNjY4M19SRUdfTU9OX0xPVyhjaCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGRhdGEtPmN1c3RvbWVyX2lkICE9IE5DVDY2ODNfQ1VTVE9NRVJfSURfSU5URUwpCisJCQlyZWcgPSBOQ1Q2NjgzX1JFR19NT05fSElHSChjaCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVnOworfQorCitzdGF0aWMgaW50IGdldF90ZW1wX3JlZyhzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCkKK3sKKwlpbnQgY2ggPSBkYXRhLT50ZW1wX2luZGV4W2luZGV4XTsKKwlpbnQgcmVnID0gLUVJTlZBTDsKKworCXN3aXRjaCAoZGF0YS0+Y3VzdG9tZXJfaWQpIHsKKwljYXNlIE5DVDY2ODNfQ1VTVE9NRVJfSURfSU5URUw6CisJCXN3aXRjaCAobnIpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSAxOgkvKiBtYXggKi8KKwkJCXJlZyA9IE5DVDY2ODNfUkVHX0lOVEVMX1RFTVBfTUFYKGNoKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CS8qIGNyaXQgKi8KKwkJCXJlZyA9IE5DVDY2ODNfUkVHX0lOVEVMX1RFTVBfQ1JJVChjaCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzd2l0Y2ggKG5yKSB7CisJCWRlZmF1bHQ6CisJCWNhc2UgMDoJLyogbWluICovCisJCQlyZWcgPSBOQ1Q2NjgzX1JFR19NT05fTE9XKGNoKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CS8qIG1heCAqLworCQkJcmVnID0gTkNUNjY4M19SRUdfVEVNUF9NQVgoY2gpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJLyogaHlzdCAqLworCQkJcmVnID0gTkNUNjY4M19SRUdfVEVNUF9IWVNUKGNoKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CS8qIGNyaXQgKi8KKwkJCXJlZyA9IE5DVDY2ODNfUkVHX01PTl9ISUdIKGNoKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVnOworfQorCitzdGF0aWMgdm9pZCBuY3Q2NjgzX3VwZGF0ZV9wd20oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOQ1Q2NjgzX05VTV9SRUdfUFdNOyBpKyspIHsKKwkJaWYgKCEoZGF0YS0+aGF2ZV9wd20gJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJZGF0YS0+cHdtW2ldID0gbmN0NjY4M19yZWFkKGRhdGEsIE5DVDY2ODNfUkVHX1BXTShpKSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IG5jdDY2ODNfZGF0YSAqbmN0NjY4M191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGksIGo7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikgfHwgIWRhdGEtPnZhbGlkKSB7CisJCS8qIE1lYXN1cmVkIHZvbHRhZ2VzIGFuZCBsaW1pdHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluX251bTsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CisJCQkJaW50IHJlZyA9IGdldF9pbl9yZWcoZGF0YSwgaiwgaSk7CisKKwkJCQlpZiAocmVnID49IDApCisJCQkJCWRhdGEtPmluW2pdW2ldID0KKwkJCQkJCW5jdDY2ODNfcmVhZChkYXRhLCByZWcpOworCQkJfQorCQl9CisKKwkJLyogTWVhc3VyZWQgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPnRlbXBfbnVtOyBpKyspIHsKKwkJCXU4IGNoID0gZGF0YS0+dGVtcF9pbmRleFtpXTsKKworCQkJZGF0YS0+dGVtcF9pbltpXSA9IG5jdDY2ODNfcmVhZDE2KGRhdGEsCisJCQkJCQkJICBOQ1Q2NjgzX1JFR19NT04oY2gpKTsKKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCQlpbnQgcmVnID0gZ2V0X3RlbXBfcmVnKGRhdGEsIGosIGkpOworCisJCQkJaWYgKHJlZyA+PSAwKQorCQkJCQlkYXRhLT50ZW1wW2pdW2ldID0KKwkJCQkJCW5jdDY2ODNfcmVhZChkYXRhLCByZWcpOworCQkJfQorCQl9CisKKwkJLyogTWVhc3VyZWQgZmFuIHNwZWVkcyBhbmQgbGltaXRzICovCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnJwbSk7IGkrKykgeworCQkJaWYgKCEoZGF0YS0+aGF2ZV9mYW4gJiAoMSA8PCBpKSkpCisJCQkJY29udGludWU7CisKKwkJCWRhdGEtPnJwbVtpXSA9IG5jdDY2ODNfcmVhZDE2KGRhdGEsCisJCQkJCQlOQ1Q2NjgzX1JFR19GQU5fUlBNKGkpKTsKKwkJCWRhdGEtPmZhbl9taW5baV0gPSBuY3Q2NjgzX3JlYWQxNihkYXRhLAorCQkJCQkJTkNUNjY4M19SRUdfRkFOX01JTihpKSk7CisJCX0KKworCQluY3Q2NjgzX3VwZGF0ZV9wd20oZGV2KTsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IHRydWU7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGRhdGE7Cit9CisKKy8qCisgKiBTeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMKKyAqLworc3RhdGljIHNzaXplX3QKK3Nob3dfaW5fbGFiZWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IG5jdDY2ODNfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IHNhdHRyLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuY3Q2NjgzX21vbl9sYWJlbFtkYXRhLT5pbl9zcmNbbnJdXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2luX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IG5jdDY2ODNfdXBkYXRlX2RldmljZShkZXYpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwlpbnQgbnIgPSBzYXR0ci0+bnI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsCisJCSAgICAgICBpbl9mcm9tX3JlZyhkYXRhLT5pbltpbmRleF1bbnJdLCBkYXRhLT5pbl9pbmRleFtpbmRleF0pKTsKK30KKworc3RhdGljIHVtb2RlX3QgbmN0NjY4M19pbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG5yID0gaW5kZXggJSA0OwkvKiBhdHRyaWJ1dGUgKi8KKworCS8qCisJICogVm9sdGFnZSBsaW1pdHMgZXhpc3QgZm9yIEludGVsIGJvYXJkcywKKwkgKiBidXQgcmVnaXN0ZXIgbG9jYXRpb24gYW5kIGVuY29kaW5nIGlzIHVua25vd24KKwkgKi8KKwlpZiAoKG5yID09IDIgfHwgbnIgPT0gMykgJiYKKwkgICAgZGF0YS0+Y3VzdG9tZXJfaWQgPT0gTkNUNjY4M19DVVNUT01FUl9JRF9JTlRFTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworU0VOU09SX1RFTVBMQVRFKGluX2xhYmVsLCAiaW4lZF9sYWJlbCIsIFNfSVJVR08sIHNob3dfaW5fbGFiZWwsIE5VTEwsIDApOworU0VOU09SX1RFTVBMQVRFXzIoaW5faW5wdXQsICJpbiVkX2lucHV0IiwgU19JUlVHTywgc2hvd19pbl9yZWcsIE5VTEwsIDAsIDApOworU0VOU09SX1RFTVBMQVRFXzIoaW5fbWluLCAiaW4lZF9taW4iLCBTX0lSVUdPLCBzaG93X2luX3JlZywgTlVMTCwgMCwgMSk7CitTRU5TT1JfVEVNUExBVEVfMihpbl9tYXgsICJpbiVkX21heCIsIFNfSVJVR08sIHNob3dfaW5fcmVnLCBOVUxMLCAwLCAyKTsKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICpuY3Q2NjgzX2F0dHJpYnV0ZXNfaW5fdGVtcGxhdGVbXSA9IHsKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9pbl9sYWJlbCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9pbl9pbnB1dCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9pbl9taW4sCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfaW5fbWF4LAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX3RlbXBsYXRlX2dyb3VwIG5jdDY2ODNfaW5fdGVtcGxhdGVfZ3JvdXAgPSB7CisJLnRlbXBsYXRlcyA9IG5jdDY2ODNfYXR0cmlidXRlc19pbl90ZW1wbGF0ZSwKKwkuaXNfdmlzaWJsZSA9IG5jdDY2ODNfaW5faXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gbmN0NjY4M191cGRhdGVfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cnBtW3NhdHRyLT5pbmRleF0pOworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gbmN0NjY4M191cGRhdGVfZGV2aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzYXR0ci0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+ZmFuX21pbltucl0pOworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd19mYW5fcHVsc2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEgPSBuY3Q2NjgzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkgICAgICAgKChkYXRhLT5mYW5pbl9jZmdbc2F0dHItPmluZGV4XSA+PiA1KSAmIDB4MDMpICsgMSk7Cit9CisKK3N0YXRpYyB1bW9kZV90IG5jdDY2ODNfZmFuX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGZhbiA9IGluZGV4IC8gMzsJLyogZmFuIGluZGV4ICovCisJaW50IG5yID0gaW5kZXggJSAzOwkvKiBhdHRyaWJ1dGUgaW5kZXggKi8KKworCWlmICghKGRhdGEtPmhhdmVfZmFuICYgKDEgPDwgZmFuKSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJbnRlbCBtYXkgaGF2ZSBtaW5pbXVtIGZhbiBzcGVlZCBsaW1pdHMsCisJICogYnV0IHJlZ2lzdGVyIGxvY2F0aW9uIGFuZCBlbmNvZGluZyBhcmUgdW5rbm93bi4KKwkgKi8KKwlpZiAobnIgPT0gMiAmJiBkYXRhLT5jdXN0b21lcl9pZCA9PSBOQ1Q2NjgzX0NVU1RPTUVSX0lEX0lOVEVMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhdHRyLT5tb2RlOworfQorCitTRU5TT1JfVEVNUExBVEUoZmFuX2lucHV0LCAiZmFuJWRfaW5wdXQiLCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCk7CitTRU5TT1JfVEVNUExBVEUoZmFuX3B1bHNlcywgImZhbiVkX3B1bHNlcyIsIFNfSVJVR08sIHNob3dfZmFuX3B1bHNlcywgTlVMTCwgMCk7CitTRU5TT1JfVEVNUExBVEUoZmFuX21pbiwgImZhbiVkX21pbiIsIFNfSVJVR08sIHNob3dfZmFuX21pbiwgTlVMTCwgMCk7CisKKy8qCisgKiBuY3Q2NjgzX2Zhbl9pc192aXNpYmxlIHVzZXMgdGhlIGluZGV4IGludG8gdGhlIGZvbGxvd2luZyBhcnJheQorICogdG8gZGV0ZXJtaW5lIGlmIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGNyZWF0ZWQgb3Igbm90LgorICogQW55IGNoYW5nZSBpbiBvcmRlciBvciBjb250ZW50IG11c3QgYmUgbWF0Y2hlZC4KKyAqLworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICpuY3Q2NjgzX2F0dHJpYnV0ZXNfZmFuX3RlbXBsYXRlW10gPSB7CisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfZmFuX2lucHV0LAorCSZzZW5zb3JfZGV2X3RlbXBsYXRlX2Zhbl9wdWxzZXMsCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfZmFuX21pbiwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2NjgzX2Zhbl90ZW1wbGF0ZV9ncm91cCA9IHsKKwkudGVtcGxhdGVzID0gbmN0NjY4M19hdHRyaWJ1dGVzX2Zhbl90ZW1wbGF0ZSwKKwkuaXNfdmlzaWJsZSA9IG5jdDY2ODNfZmFuX2lzX3Zpc2libGUsCisJLmJhc2UgPSAxLAorfTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfdGVtcF9sYWJlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gbmN0NjY4M191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gc2F0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG5jdDY2ODNfbW9uX2xhYmVsW2RhdGEtPnRlbXBfc3JjW25yXV0pOworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd190ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IG5jdDY2ODNfdXBkYXRlX2RldmljZShkZXYpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwlpbnQgbnIgPSBzYXR0ci0+bnI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGVtcFtpbmRleF1bbnJdICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3RlbXBfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gbmN0NjY4M191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gc2F0dHItPmluZGV4OworCWludCB0ZW1wID0gZGF0YS0+dGVtcFsxXVtucl0gLSBkYXRhLT50ZW1wWzJdW25yXTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3RlbXAxNihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gbmN0NjY4M191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT50ZW1wX2luW2luZGV4XSAvIDEyOCkgKiA1MDApOworfQorCisvKgorICogVGVtcGVyYXR1cmUgc2Vuc29yIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB0ZW1wZXJhdHVyZSBzb3VyY2UKKyAqIGFuZCBjYW4gbm90IGJlIG1vZGlmaWVkLgorICogMHgwMi4uMHgwNzogVGhlcm1hbCBkaW9kZQorICogMHgwOC4uMHgxODogVGhlcm1pc3RvcgorICogMHgyMC4uMHgyYjogSW50ZWwgUEVDSQorICogMHg0Mi4uMHg0OTogQU1EIFRTSQorICogT3RoZXJzIGFyZSB1bnNwZWNpZmllZCAobm90IHZpc2libGUpCisgKi8KKworc3RhdGljIGludCBnZXRfdGVtcF90eXBlKHU4IHNyYykKK3sKKwlpZiAoc3JjID49IDB4MDIgJiYgc3JjIDw9IDB4MDcpCisJCXJldHVybiAzOwkvKiB0aGVybWFsIGRpb2RlICovCisJZWxzZSBpZiAoc3JjID49IDB4MDggJiYgc3JjIDw9IDB4MTgpCisJCXJldHVybiA0OwkvKiB0aGVybWlzdG9yICovCisJZWxzZSBpZiAoc3JjID49IDB4MjAgJiYgc3JjIDw9IDB4MmIpCisJCXJldHVybiA2OwkvKiBQRUNJICovCisJZWxzZSBpZiAoc3JjID49IDB4NDIgJiYgc3JjIDw9IDB4NDkpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3RlbXBfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IG5jdDY2ODNfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJaW50IG5yID0gc2F0dHItPmluZGV4OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBnZXRfdGVtcF90eXBlKGRhdGEtPnRlbXBfc3JjW25yXSkpOworfQorCitzdGF0aWMgdW1vZGVfdCBuY3Q2NjgzX3RlbXBfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHRlbXAgPSBpbmRleCAvIDc7CS8qIHRlbXAgaW5kZXggKi8KKwlpbnQgbnIgPSBpbmRleCAlIDc7CS8qIGF0dHJpYnV0ZSBpbmRleCAqLworCisJLyoKKwkgKiBJbnRlbCBkb2VzIG5vdCBoYXZlIGxvdyB0ZW1wZXJhdHVyZSBsaW1pdHMgb3IgdGVtcGVyYXR1cmUgaHlzdGVyZXNpcworCSAqIHJlZ2lzdGVycywgb3IgYXQgbGVhc3QgcmVnaXN0ZXIgbG9jYXRpb24gYW5kIGVuY29kaW5nIGlzIHVua25vd24uCisJICovCisJaWYgKChuciA9PSAyIHx8IG5yID09IDQpICYmCisJICAgIGRhdGEtPmN1c3RvbWVyX2lkID09IE5DVDY2ODNfQ1VTVE9NRVJfSURfSU5URUwpCisJCXJldHVybiAwOworCisJaWYgKG5yID09IDYgJiYgZ2V0X3RlbXBfdHlwZShkYXRhLT50ZW1wX3NyY1t0ZW1wXSkgPT0gMCkKKwkJcmV0dXJuIDA7CQkJCS8qIHR5cGUgKi8KKworCXJldHVybiBhdHRyLT5tb2RlOworfQorCitTRU5TT1JfVEVNUExBVEUodGVtcF9pbnB1dCwgInRlbXAlZF9pbnB1dCIsIFNfSVJVR08sIHNob3dfdGVtcDE2LCBOVUxMLCAwKTsKK1NFTlNPUl9URU1QTEFURSh0ZW1wX2xhYmVsLCAidGVtcCVkX2xhYmVsIiwgU19JUlVHTywgc2hvd190ZW1wX2xhYmVsLCBOVUxMLCAwKTsKK1NFTlNPUl9URU1QTEFURV8yKHRlbXBfbWluLCAidGVtcCVkX21pbiIsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDAsIDApOworU0VOU09SX1RFTVBMQVRFXzIodGVtcF9tYXgsICJ0ZW1wJWRfbWF4IiwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMCwgMSk7CitTRU5TT1JfVEVNUExBVEUodGVtcF9tYXhfaHlzdCwgInRlbXAlZF9tYXhfaHlzdCIsIFNfSVJVR08sIHNob3dfdGVtcF9oeXN0LCBOVUxMLAorCQkwKTsKK1NFTlNPUl9URU1QTEFURV8yKHRlbXBfY3JpdCwgInRlbXAlZF9jcml0IiwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMCwgMyk7CitTRU5TT1JfVEVNUExBVEUodGVtcF90eXBlLCAidGVtcCVkX3R5cGUiLCBTX0lSVUdPLCBzaG93X3RlbXBfdHlwZSwgTlVMTCwgMCk7CisKKy8qCisgKiBuY3Q2NjgzX3RlbXBfaXNfdmlzaWJsZSB1c2VzIHRoZSBpbmRleCBpbnRvIHRoZSBmb2xsb3dpbmcgYXJyYXkKKyAqIHRvIGRldGVybWluZSBpZiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBjcmVhdGVkIG9yIG5vdC4KKyAqIEFueSBjaGFuZ2UgaW4gb3JkZXIgb3IgY29udGVudCBtdXN0IGJlIG1hdGNoZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV90ZW1wbGF0ZSAqbmN0NjY4M19hdHRyaWJ1dGVzX3RlbXBfdGVtcGxhdGVbXSA9IHsKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV90ZW1wX2lucHV0LAorCSZzZW5zb3JfZGV2X3RlbXBsYXRlX3RlbXBfbGFiZWwsCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfdGVtcF9taW4sCQkvKiAyICovCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfdGVtcF9tYXgsCQkvKiAzICovCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfdGVtcF9tYXhfaHlzdCwJLyogNCAqLworCSZzZW5zb3JfZGV2X3RlbXBsYXRlX3RlbXBfY3JpdCwJCS8qIDUgKi8KKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV90ZW1wX3R5cGUsCQkvKiA2ICovCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfdGVtcGxhdGVfZ3JvdXAgbmN0NjY4M190ZW1wX3RlbXBsYXRlX2dyb3VwID0geworCS50ZW1wbGF0ZXMgPSBuY3Q2NjgzX2F0dHJpYnV0ZXNfdGVtcF90ZW1wbGF0ZSwKKwkuaXNfdmlzaWJsZSA9IG5jdDY2ODNfdGVtcF9pc192aXNpYmxlLAorCS5iYXNlID0gMSwKK307CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IG5jdDY2ODNfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5wd21baW5kZXhdKTsKK30KKworU0VOU09SX1RFTVBMQVRFKHB3bSwgInB3bSVkIiwgU19JUlVHTywgc2hvd19wd20sIE5VTEwsIDApOworCitzdGF0aWMgdW1vZGVfdCBuY3Q2NjgzX3B3bV9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBwd20gPSBpbmRleDsJLyogcHdtIGluZGV4ICovCisKKwlpZiAoIShkYXRhLT5oYXZlX3B3bSAmICgxIDw8IHB3bSkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhdHRyLT5tb2RlOworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfdGVtcGxhdGUgKm5jdDY2ODNfYXR0cmlidXRlc19wd21fdGVtcGxhdGVbXSA9IHsKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9wd20sCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfdGVtcGxhdGVfZ3JvdXAgbmN0NjY4M19wd21fdGVtcGxhdGVfZ3JvdXAgPSB7CisJLnRlbXBsYXRlcyA9IG5jdDY2ODNfYXR0cmlidXRlc19wd21fdGVtcGxhdGUsCisJLmlzX3Zpc2libGUgPSBuY3Q2NjgzX3B3bV9pc192aXNpYmxlLAorCS5iYXNlID0gMSwKK307CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2dsb2JhbF9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKwl1OCByZWc7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXQgPSBzdXBlcmlvX2VudGVyKGRhdGEtPnNpb3JlZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlzdXBlcmlvX3NlbGVjdChkYXRhLT5zaW9yZWcsIE5DVDY2ODNfTERfSFdNKTsKKwlyZWcgPSBzdXBlcmlvX2luYihkYXRhLT5zaW9yZWcsIE5DVDY2ODNfUkVHX0NSX0JFRVApOworCXN1cGVyaW9fZXhpdChkYXRhLT5zaW9yZWcpOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEocmVnICYgTkNUNjY4M19DUl9CRUVQX01BU0spKTsKKworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX2dsb2JhbF9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5jdDY2ODNfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHJlZzsKKwlpbnQgcmV0OworCisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIHx8ICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0ID0gc3VwZXJpb19lbnRlcihkYXRhLT5zaW9yZWcpOworCWlmIChyZXQpIHsKKwkJY291bnQgPSByZXQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3VwZXJpb19zZWxlY3QoZGF0YS0+c2lvcmVnLCBOQ1Q2NjgzX0xEX0hXTSk7CisJcmVnID0gc3VwZXJpb19pbmIoZGF0YS0+c2lvcmVnLCBOQ1Q2NjgzX1JFR19DUl9CRUVQKTsKKwlpZiAodmFsKQorCQlyZWcgfD0gTkNUNjY4M19DUl9CRUVQX01BU0s7CisJZWxzZQorCQlyZWcgJj0gfk5DVDY2ODNfQ1JfQkVFUF9NQVNLOworCXN1cGVyaW9fb3V0YihkYXRhLT5zaW9yZWcsIE5DVDY2ODNfUkVHX0NSX0JFRVAsIHJlZyk7CisJc3VwZXJpb19leGl0KGRhdGEtPnNpb3JlZyk7CitlcnJvcjoKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIENhc2Ugb3BlbiBkZXRlY3Rpb24gKi8KKworc3RhdGljIHNzaXplX3QKK3Nob3dfY2FzZW9wZW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCXU4IHJlZzsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldCA9IHN1cGVyaW9fZW50ZXIoZGF0YS0+c2lvcmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXN1cGVyaW9fc2VsZWN0KGRhdGEtPnNpb3JlZywgTkNUNjY4M19MRF9BQ1BJKTsKKwlyZWcgPSBzdXBlcmlvX2luYihkYXRhLT5zaW9yZWcsIE5DVDY2ODNfUkVHX0NSX0NBU0VPUEVOKTsKKwlzdXBlcmlvX2V4aXQoZGF0YS0+c2lvcmVnKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEocmVnICYgTkNUNjY4M19DUl9DQVNFT1BFTl9NQVNLKSk7CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitjbGVhcl9jYXNlb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggcmVnOworCWludCByZXQ7CisKKwlpZiAoa3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgfHwgdmFsICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyoKKwkgKiBVc2UgQ1IgcmVnaXN0ZXJzIHRvIGNsZWFyIGNhc2VvcGVuIHN0YXR1cy4KKwkgKiBDYXNlb3BlbiBpcyBhY3RpdiBsb3csIGNsZWFyIGJ5IHdyaXRpbmcgMSBpbnRvIHRoZSByZWdpc3Rlci4KKwkgKi8KKworCXJldCA9IHN1cGVyaW9fZW50ZXIoZGF0YS0+c2lvcmVnKTsKKwlpZiAocmV0KSB7CisJCWNvdW50ID0gcmV0OworCQlnb3RvIGVycm9yOworCX0KKworCXN1cGVyaW9fc2VsZWN0KGRhdGEtPnNpb3JlZywgTkNUNjY4M19MRF9BQ1BJKTsKKwlyZWcgPSBzdXBlcmlvX2luYihkYXRhLT5zaW9yZWcsIE5DVDY2ODNfUkVHX0NSX0NBU0VPUEVOKTsKKwlyZWcgfD0gTkNUNjY4M19DUl9DQVNFT1BFTl9NQVNLOworCXN1cGVyaW9fb3V0YihkYXRhLT5zaW9yZWcsIE5DVDY2ODNfUkVHX0NSX0NBU0VPUEVOLCByZWcpOworCXJlZyAmPSB+TkNUNjY4M19DUl9DQVNFT1BFTl9NQVNLOworCXN1cGVyaW9fb3V0YihkYXRhLT5zaW9yZWcsIE5DVDY2ODNfUkVHX0NSX0NBU0VPUEVOLCByZWcpOworCXN1cGVyaW9fZXhpdChkYXRhLT5zaW9yZWcpOworCisJZGF0YS0+dmFsaWQgPSBmYWxzZTsJLyogRm9yY2UgY2FjaGUgcmVmcmVzaCAqLworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaW50cnVzaW9uMF9hbGFybSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfY2FzZW9wZW4sCisJCSAgIGNsZWFyX2Nhc2VvcGVuKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiZWVwX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZ2xvYmFsX2JlZXAsCisJCSAgIHN0b3JlX2dsb2JhbF9iZWVwKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDY2ODNfYXR0cmlidXRlc19vdGhlcltdID0geworCSZkZXZfYXR0cl9pbnRydXNpb24wX2FsYXJtLmF0dHIsCisJJmRldl9hdHRyX2JlZXBfZW5hYmxlLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NjY4M19ncm91cF9vdGhlciA9IHsKKwkuYXR0cnMgPSBuY3Q2NjgzX2F0dHJpYnV0ZXNfb3RoZXIsCit9OworCisvKiBHZXQgdGhlIG1vbml0b3JpbmcgZnVuY3Rpb25zIHN0YXJ0ZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuY3Q2NjgzX2luaXRfZGV2aWNlKHN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEpCit7CisJdTggdG1wOworCisJLyogU3RhcnQgaGFyZHdhcmUgbW9uaXRvcmluZyBpZiBuZWVkZWQgKi8KKwl0bXAgPSBuY3Q2NjgzX3JlYWQoZGF0YSwgTkNUNjY4M19IV01fQ0ZHKTsKKwlpZiAoISh0bXAgJiAweDgwKSkKKwkJbmN0NjY4M193cml0ZShkYXRhLCBOQ1Q2NjgzX0hXTV9DRkcsIHRtcCB8IDB4ODApOworfQorCisvKgorICogVGhlcmUgYXJlIGEgdG90YWwgb2YgMjQgZmFuIGlucHV0cy4gRWFjaCBjYW4gYmUgY29uZmlndXJlZCBhcyBpbnB1dAorICogb3IgYXMgb3V0cHV0LiBBIG1heGltdW0gb2YgMTYgaW5wdXRzIGFuZCA4IG91dHB1dHMgaXMgY29uZmlndXJhYmxlLgorICovCitzdGF0aWMgdm9pZAorbmN0NjY4M19zZXR1cF9mYW5zKHN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisJdTggcmVnOworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODNfTlVNX1JFR19GQU47IGkrKykgeworCQlyZWcgPSBuY3Q2NjgzX3JlYWQoZGF0YSwgTkNUNjY4M19SRUdfRkFOSU5fQ0ZHKGkpKTsKKwkJaWYgKHJlZyAmIDB4ODApCisJCQlkYXRhLT5oYXZlX2ZhbiB8PSAxIDw8IGk7CisJCWRhdGEtPmZhbmluX2NmZ1tpXSA9IHJlZzsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODNfTlVNX1JFR19QV007IGkrKykgeworCQlyZWcgPSBuY3Q2NjgzX3JlYWQoZGF0YSwgTkNUNjY4M19SRUdfRkFOT1VUX0NGRyhpKSk7CisJCWlmIChyZWcgJiAweDgwKQorCQkJZGF0YS0+aGF2ZV9wd20gfD0gMSA8PCBpOworCQlkYXRhLT5mYW5vdXRfY2ZnW2ldID0gcmVnOworCX0KK30KKworLyoKKyAqIFRyYW5zbGF0aW9uIGZyb20gbW9uaXRvcmluZyByZWdpc3RlciB0byB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBhdHRyaWJ1dGVzCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoZXJlIGFyZSBhIHRvdGFsIG9mIDMyIG1vbml0b3JpbmcgcmVnaXN0ZXJzLiBFYWNoIGNhbiBiZSBhc3NpZ25lZCB0byBlaXRoZXIKKyAqIGEgdGVtcGVyYXR1cmUgb3Igdm9sdGFnZSBtb25pdG9yaW5nIHNvdXJjZS4KKyAqIE5DVDY2ODNfUkVHX01PTl9DRkcoeCkgZGVmaW5lcyBhc3NpZ25tZW50IGZvciBlYWNoIG1vbml0b3Jpbmcgc291cmNlLgorICoKKyAqIFRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIGF0dHJpYnV0ZSBtYXBwaW5nIGlzIGRldGVybWluZWQgYnkgd2Fsa2luZyB0aHJvdWdoCisgKiB0aGUgTkNUNjY4M19SRUdfTU9OX0NGRyByZWdpc3RlcnMuIElmIHRoZSBhc3NpZ25lZCBzb3VyY2UgaXMKKyAqIGEgdGVtcGVyYXR1cmUsIHRlbXBfaW5kZXhbbl0gaXMgc2V0IHRvIHRoZSBtb25pdG9yIHJlZ2lzdGVyIGluZGV4LCBhbmQKKyAqIHRlbXBfc3JjW25dIGlzIHNldCB0byB0aGUgdGVtcGVyYXR1cmUgc291cmNlLiBJZiB0aGUgYXNzaWduZWQgc291cmNlIGlzCisgKiBhIHZvbHRhZ2UsIHRoZSByZXNwZWN0aXZlIHZhbHVlcyBhcmUgc3RvcmVkIGluIGluX2luZGV4W10gYW5kIGluX3NyY1tdLAorICogcmVzcGVjdGl2ZWx5LgorICovCisKK3N0YXRpYyB2b2lkIG5jdDY2ODNfc2V0dXBfc2Vuc29ycyhzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhKQoreworCXU4IHJlZzsKKwlpbnQgaTsKKworCWRhdGEtPnRlbXBfbnVtID0gMDsKKwlkYXRhLT5pbl9udW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBOQ1Q2NjgzX05VTV9SRUdfTU9OOyBpKyspIHsKKwkJcmVnID0gbmN0NjY4M19yZWFkKGRhdGEsIE5DVDY2ODNfUkVHX01PTl9DRkcoaSkpICYgMHg3ZjsKKwkJLyogSWdub3JlIGludmFsaWQgYXNzaWdubWVudHMgKi8KKwkJaWYgKHJlZyA+PSBOVU1fTU9OX0xBQkVMUykKKwkJCWNvbnRpbnVlOworCQkvKiBTa2lwIGlmIGRpc2FibGVkIG9yIHJlc2VydmVkICovCisJCWlmIChuY3Q2NjgzX21vbl9sYWJlbFtyZWddID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZyA8IE1PTl9WT0xUQUdFX1NUQVJUKSB7CisJCQlkYXRhLT50ZW1wX2luZGV4W2RhdGEtPnRlbXBfbnVtXSA9IGk7CisJCQlkYXRhLT50ZW1wX3NyY1tkYXRhLT50ZW1wX251bV0gPSByZWc7CisJCQlkYXRhLT50ZW1wX251bSsrOworCQl9IGVsc2UgeworCQkJZGF0YS0+aW5faW5kZXhbZGF0YS0+aW5fbnVtXSA9IGk7CisJCQlkYXRhLT5pbl9zcmNbZGF0YS0+aW5fbnVtXSA9IHJlZzsKKwkJCWRhdGEtPmluX251bSsrOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG5jdDY2ODNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBuY3Q2NjgzX3Npb19kYXRhICpzaW9fZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncm91cDsKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgZ3JvdXBzID0gMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIWRldm1fcmVxdWVzdF9yZWdpb24oZGV2LCByZXMtPnN0YXJ0LCBJT1JFR0lPTl9MRU5HVEgsIERSVk5BTUUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgbmN0NjY4M19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmtpbmQgPSBzaW9fZGF0YS0+a2luZDsKKwlkYXRhLT5zaW9yZWcgPSBzaW9fZGF0YS0+c2lvcmVnOworCWRhdGEtPmFkZHIgPSByZXMtPnN0YXJ0OworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKKworCWRhdGEtPmN1c3RvbWVyX2lkID0gbmN0NjY4M19yZWFkMTYoZGF0YSwgTkNUNjY4M19SRUdfQ1VTVE9NRVJfSUQpOworCisJbmN0NjY4M19pbml0X2RldmljZShkYXRhKTsKKwluY3Q2NjgzX3NldHVwX2ZhbnMoZGF0YSk7CisJbmN0NjY4M19zZXR1cF9zZW5zb3JzKGRhdGEpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKworCWlmIChkYXRhLT5oYXZlX3B3bSkgeworCQlncm91cCA9IG5jdDY2ODNfY3JlYXRlX2F0dHJfZ3JvdXAoZGV2LAorCQkJCQkJICAmbmN0NjY4M19wd21fdGVtcGxhdGVfZ3JvdXAsCisJCQkJCQkgIGZscyhkYXRhLT5oYXZlX3B3bSkpOworCQlpZiAoSVNfRVJSKGdyb3VwKSkKKwkJCXJldHVybiBQVFJfRVJSKGdyb3VwKTsKKwkJZGF0YS0+Z3JvdXBzW2dyb3VwcysrXSA9IGdyb3VwOworCX0KKworCWlmIChkYXRhLT5pbl9udW0pIHsKKwkJZ3JvdXAgPSBuY3Q2NjgzX2NyZWF0ZV9hdHRyX2dyb3VwKGRldiwKKwkJCQkJCSAgJm5jdDY2ODNfaW5fdGVtcGxhdGVfZ3JvdXAsCisJCQkJCQkgIGRhdGEtPmluX251bSk7CisJCWlmIChJU19FUlIoZ3JvdXApKQorCQkJcmV0dXJuIFBUUl9FUlIoZ3JvdXApOworCQlkYXRhLT5ncm91cHNbZ3JvdXBzKytdID0gZ3JvdXA7CisJfQorCisJaWYgKGRhdGEtPmhhdmVfZmFuKSB7CisJCWdyb3VwID0gbmN0NjY4M19jcmVhdGVfYXR0cl9ncm91cChkZXYsCisJCQkJCQkgICZuY3Q2NjgzX2Zhbl90ZW1wbGF0ZV9ncm91cCwKKwkJCQkJCSAgZmxzKGRhdGEtPmhhdmVfZmFuKSk7CisJCWlmIChJU19FUlIoZ3JvdXApKQorCQkJcmV0dXJuIFBUUl9FUlIoZ3JvdXApOworCQlkYXRhLT5ncm91cHNbZ3JvdXBzKytdID0gZ3JvdXA7CisJfQorCisJaWYgKGRhdGEtPnRlbXBfbnVtKSB7CisJCWdyb3VwID0gbmN0NjY4M19jcmVhdGVfYXR0cl9ncm91cChkZXYsCisJCQkJCQkgICZuY3Q2NjgzX3RlbXBfdGVtcGxhdGVfZ3JvdXAsCisJCQkJCQkgIGRhdGEtPnRlbXBfbnVtKTsKKwkJaWYgKElTX0VSUihncm91cCkpCisJCQlyZXR1cm4gUFRSX0VSUihncm91cCk7CisJCWRhdGEtPmdyb3Vwc1tncm91cHMrK10gPSBncm91cDsKKwl9CisJZGF0YS0+Z3JvdXBzW2dyb3VwcysrXSA9ICZuY3Q2NjgzX2dyb3VwX290aGVyOworCisJZGV2X2luZm8oZGV2LCAiJXMgRUMgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBidWlsZCAlMDJ4LyUwMngvJTAyeFxuIiwKKwkJIG5jdDY2ODNfY2hpcF9uYW1lc1tkYXRhLT5raW5kXSwKKwkJIG5jdDY2ODNfcmVhZChkYXRhLCBOQ1Q2NjgzX1JFR19WRVJTSU9OX0hJKSwKKwkJIG5jdDY2ODNfcmVhZChkYXRhLCBOQ1Q2NjgzX1JFR19WRVJTSU9OX0xPKSwKKwkJIG5jdDY2ODNfcmVhZChkYXRhLCBOQ1Q2NjgzX1JFR19CVUlMRF9NT05USCksCisJCSBuY3Q2NjgzX3JlYWQoZGF0YSwgTkNUNjY4M19SRUdfQlVJTERfREFZKSwKKwkJIG5jdDY2ODNfcmVhZChkYXRhLCBOQ1Q2NjgzX1JFR19CVUlMRF9ZRUFSKSk7CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsCisJCQluY3Q2NjgzX2RldmljZV9uYW1lc1tkYXRhLT5raW5kXSwgZGF0YSwgZGF0YS0+Z3JvdXBzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbmN0NjY4M19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmN0NjY4M19kYXRhICpkYXRhID0gbmN0NjY4M191cGRhdGVfZGV2aWNlKGRldik7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+aHdtX2NmZyA9IG5jdDY2ODNfcmVhZChkYXRhLCBOQ1Q2NjgzX0hXTV9DRkcpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmN0NjY4M19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBuY3Q2NjgzX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCW5jdDY2ODNfd3JpdGUoZGF0YSwgTkNUNjY4M19IV01fQ0ZHLCBkYXRhLT5od21fY2ZnKTsKKworCS8qIEZvcmNlIHJlLXJlYWRpbmcgYWxsIHZhbHVlcyAqLworCWRhdGEtPnZhbGlkID0gZmFsc2U7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5jdDY2ODNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IG5jdDY2ODNfc3VzcGVuZCwKKwkucmVzdW1lID0gbmN0NjY4M19yZXN1bWUsCisJLmZyZWV6ZSA9IG5jdDY2ODNfc3VzcGVuZCwKKwkucmVzdG9yZSA9IG5jdDY2ODNfcmVzdW1lLAorfTsKKworI2RlZmluZSBOQ1Q2NjgzX0RFVl9QTV9PUFMJKCZuY3Q2NjgzX2Rldl9wbV9vcHMpCisjZWxzZQorI2RlZmluZSBOQ1Q2NjgzX0RFVl9QTV9PUFMJTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuY3Q2NjgzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUlZOQU1FLAorCQkucG0JPSBOQ1Q2NjgzX0RFVl9QTV9PUFMsCisJfSwKKwkucHJvYmUJCT0gbmN0NjY4M19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5jdDY2ODNfZmluZChpbnQgc2lvYWRkciwgc3RydWN0IG5jdDY2ODNfc2lvX2RhdGEgKnNpb19kYXRhKQoreworCWNvbnN0IGNoYXIgKmJvYXJkX3ZlbmRvcjsKKwlpbnQgYWRkcjsKKwl1MTYgdmFsOworCWludCBlcnI7CisKKwkvKgorCSAqIE9ubHkgcnVuIG9uIEludGVsIGJvYXJkcyB1bmxlc3MgdGhlICdmb3JjZScgbW9kdWxlIHBhcmFtZXRlciBpcyBzZXQKKwkgKi8KKwlpZiAoIWZvcmNlKSB7CisJCWJvYXJkX3ZlbmRvciA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX1ZFTkRPUik7CisJCWlmICghYm9hcmRfdmVuZG9yIHx8IHN0cmNtcChib2FyZF92ZW5kb3IsICJJbnRlbCBDb3Jwb3JhdGlvbiIpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0gc3VwZXJpb19lbnRlcihzaW9hZGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdmFsID0gKHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfREVWSUQpIDw8IDgpCisJICAgICAgIHwgc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPX1JFR19ERVZJRCArIDEpOworCisJc3dpdGNoICh2YWwgJiBTSU9fSURfTUFTSykgeworCWNhc2UgU0lPX05DVDY2ODNfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gbmN0NjY4MzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHZhbCAhPSAweGZmZmYpCisJCQlwcl9kZWJ1ZygidW5zdXBwb3J0ZWQgY2hpcCBJRDogMHglMDR4XG4iLCB2YWwpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogV2UgaGF2ZSBhIGtub3duIGNoaXAsIGZpbmQgdGhlIEhXTSBJL08gYWRkcmVzcyAqLworCXN1cGVyaW9fc2VsZWN0KHNpb2FkZHIsIE5DVDY2ODNfTERfSFdNKTsKKwl2YWwgPSAoc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPX1JFR19BRERSKSA8PCA4KQorCSAgICB8IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfQUREUiArIDEpOworCWFkZHIgPSB2YWwgJiBJT1JFR0lPTl9BTElHTk1FTlQ7CisJaWYgKGFkZHIgPT0gMCkgeworCQlwcl9lcnIoIkVDIGJhc2UgSS9PIHBvcnQgdW5jb25maWd1cmVkXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEFjdGl2YXRlIGxvZ2ljYWwgZGV2aWNlIGlmIG5lZWRlZCAqLworCXZhbCA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfRU5BQkxFKTsKKwlpZiAoISh2YWwgJiAweDAxKSkgeworCQlwcl9lcnIoIkVDIGlzIGRpc2FibGVkXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXN1cGVyaW9fZXhpdChzaW9hZGRyKTsKKwlwcl9pbmZvKCJGb3VuZCAlcyBvciBjb21wYXRpYmxlIGNoaXAgYXQgJSN4OiUjeFxuIiwKKwkJbmN0NjY4M19jaGlwX25hbWVzW3Npb19kYXRhLT5raW5kXSwgc2lvYWRkciwgYWRkcik7CisJc2lvX2RhdGEtPnNpb3JlZyA9IHNpb2FkZHI7CisKKwlyZXR1cm4gYWRkcjsKKworZmFpbDoKKwlzdXBlcmlvX2V4aXQoc2lvYWRkcik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisgKiB3aGVuIFN1cGVyLUkvTyBmdW5jdGlvbnMgbW92ZSB0byBhIHNlcGFyYXRlIGZpbGUsIHRoZSBTdXBlci1JL08KKyAqIGJ1cyB3aWxsIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGRldmljZSBhbmQgdGhpcyBtb2R1bGUgd2lsbCBvbmx5IGtlZXAKKyAqIHRyYWNrIG9mIHRoZSBuY3Q2NjgzIGRyaXZlci4gQnV0IHNpbmNlIHdlIHVzZSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoKSwgd2UKKyAqIG11c3Qga2VlcCB0cmFjayBvZiB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2WzJdOworCitzdGF0aWMgaW50IF9faW5pdCBzZW5zb3JzX25jdDY2ODNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBuY3Q2NjgzX3Npb19kYXRhIHNpb19kYXRhOworCWludCBzaW9hZGRyWzJdID0geyAweDJlLCAweDRlIH07CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJaW50IGFkZHJlc3M7CisJaW50IGksIGVycjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbmN0NjY4M19kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKgorCSAqIGluaXRpYWxpemUgc2lvX2RhdGEtPmtpbmQgYW5kIHNpb19kYXRhLT5zaW9yZWcuCisJICoKKwkgKiB3aGVuIFN1cGVyLUkvTyBmdW5jdGlvbnMgbW92ZSB0byBhIHNlcGFyYXRlIGZpbGUsIHRoZSBTdXBlci1JL08KKwkgKiBkcml2ZXIgd2lsbCBwcm9iZSAweDJlIGFuZCAweDRlIGFuZCBhdXRvLWRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYQorCSAqIG5jdDY2ODMgaGFyZHdhcmUgbW9uaXRvciwgYW5kIGNhbGwgcHJvYmUoKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkZXYpOyBpKyspIHsKKwkJYWRkcmVzcyA9IG5jdDY2ODNfZmluZChzaW9hZGRyW2ldLCAmc2lvX2RhdGEpOworCQlpZiAoYWRkcmVzcyA8PSAwKQorCQkJY29udGludWU7CisKKwkJZm91bmQgPSB0cnVlOworCisJCXBkZXZbaV0gPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWTkFNRSwgYWRkcmVzcyk7CisJCWlmICghcGRldltpXSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9kZXZpY2VfdW5yZWdpc3RlcjsKKwkJfQorCisJCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2W2ldLCAmc2lvX2RhdGEsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG5jdDY2ODNfc2lvX2RhdGEpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCisJCW1lbXNldCgmcmVzLCAwLCBzaXplb2YocmVzKSk7CisJCXJlcy5uYW1lID0gRFJWTkFNRTsKKwkJcmVzLnN0YXJ0ID0gYWRkcmVzcyArIElPUkVHSU9OX09GRlNFVDsKKwkJcmVzLmVuZCA9IGFkZHJlc3MgKyBJT1JFR0lPTl9PRkZTRVQgKyBJT1JFR0lPTl9MRU5HVEggLSAxOworCQlyZXMuZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCisJCWVyciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJnJlcyk7CisJCWlmIChlcnIpIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldltpXSk7CisJCQlwZGV2W2ldID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldltpXSwgJnJlcywgMSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKworCQkvKiBwbGF0Zm9ybV9kZXZpY2VfYWRkIGNhbGxzIHByb2JlKCkgKi8KKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2W2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKwlpZiAoIWZvdW5kKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2W2ldKTsKK2V4aXRfZGV2aWNlX3VucmVnaXN0ZXI6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCWlmIChwZGV2W2ldKQorCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldltpXSk7CisJfQorZXhpdF91bnJlZ2lzdGVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZuY3Q2NjgzX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNlbnNvcnNfbmN0NjY4M19leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGV2KTsgaSsrKSB7CisJCWlmIChwZGV2W2ldKQorCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldltpXSk7CisJfQorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZuY3Q2NjgzX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkNUNjY4M0QgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHNlbnNvcnNfbmN0NjY4M19pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfbmN0NjY4M19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbmN0Njc3NS5jIGIvZHJpdmVycy9od21vbi9uY3Q2Nzc1LmMKaW5kZXggMzhkNWE2My4uNTlkOWEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9uY3Q2Nzc1LmMKKysrIGIvZHJpdmVycy9od21vbi9uY3Q2Nzc1LmMKQEAgLTQxNjAsNyArNDE2MCw3IEBACiAJCXBkZXZbaV0gPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWTkFNRSwgYWRkcmVzcyk7CiAJCWlmICghcGRldltpXSkgewogCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCQkJZ290byBleGl0X2RldmljZV91bnJlZ2lzdGVyOwogCQl9CiAKIAkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXZbaV0sICZzaW9fZGF0YSwKQEAgLTQxOTgsOSArNDE5OCwxMSBAQAogCXJldHVybiAwOwogCiBleGl0X2RldmljZV9wdXQ6Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRldik7IGkrKykgeworCXBsYXRmb3JtX2RldmljZV9wdXQocGRldltpXSk7CitleGl0X2RldmljZV91bnJlZ2lzdGVyOgorCXdoaWxlICgtLWkgPj0gMCkgewogCQlpZiAocGRldltpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldltpXSk7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2W2ldKTsKIAl9CiBleGl0X3VucmVnaXN0ZXI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5jdDY3NzVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGM4NzQyNy5jIGIvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKaW5kZXggZDg0N2UwYS4uOWU0Njg0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKKysrIGIvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKQEAgLTEwODEsMTAgKzEwODEsOCBAQAogCiAJZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHBjODc0MjdfZGF0YSksCiAJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCXByX2VycigiT3V0IG9mIG1lbW9yeVxuIik7CisJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlkYXRhLT5hZGRyZXNzWzBdID0gc2lvX2RhdGEtPmFkZHJlc3NbMF07CiAJZGF0YS0+YWRkcmVzc1sxXSA9IHNpb19kYXRhLT5hZGRyZXNzWzFdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKaW5kZXggNzNiZDY0ZS4uMDY3NGMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYworKysgYi9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCkBAIC0yODUsMTAgKzI4NSw4IEBACiAJfQogCiAJaHdtb24gPSBkZXZtX2t6YWxsb2MoJmRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHMzY19od21vbiksIEdGUF9LRVJORUwpOwotCWlmIChod21vbiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gbWVtb3J5XG4iKTsKKwlpZiAoaHdtb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBod21vbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMi5jCmluZGV4IDY3NDhiNDUuLjUxNzE5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMKKysrIGIvZHJpdmVycy9od21vbi90bXAxMDIuYwpAQCAtNTEsNiArNTEsNyBAQAogI2RlZmluZQlUTVAxMDJfVEhJR0hfUkVHCQkweDAzCiAKIHN0cnVjdCB0bXAxMDIgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OwogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0ejsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKQEAgLTc3LDkgKzc4LDEwIEBACiAJVE1QMTAyX1RISUdIX1JFRywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdG1wMTAyICp0bXAxMDJfdXBkYXRlX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHN0cnVjdCB0bXAxMDIgKnRtcDEwMl91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdG1wMTAyICp0bXAxMDIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdG1wMTAyICp0bXAxMDIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG1wMTAyLT5jbGllbnQ7CiAKIAltdXRleF9sb2NrKCZ0bXAxMDItPmxvY2spOwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRtcDEwMi0+bGFzdF91cGRhdGUgKyBIWiAvIDMpKSB7CkBAIC05OCw3ICsxMDAsNyBAQAogCiBzdGF0aWMgaW50IHRtcDEwMl9yZWFkX3RlbXAodm9pZCAqZGV2LCBsb25nICp0ZW1wKQogewotCXN0cnVjdCB0bXAxMDIgKnRtcDEwMiA9IHRtcDEwMl91cGRhdGVfZGV2aWNlKHRvX2kyY19jbGllbnQoZGV2KSk7CisJc3RydWN0IHRtcDEwMiAqdG1wMTAyID0gdG1wMTAyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAogCSp0ZW1wID0gdG1wMTAyLT50ZW1wWzBdOwogCkBAIC0xMTAsNyArMTEyLDcgQEAKIAkJCQljaGFyICpidWYpCiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZGEgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7Ci0Jc3RydWN0IHRtcDEwMiAqdG1wMTAyID0gdG1wMTAyX3VwZGF0ZV9kZXZpY2UodG9faTJjX2NsaWVudChkZXYpKTsKKwlzdHJ1Y3QgdG1wMTAyICp0bXAxMDIgPSB0bXAxMDJfdXBkYXRlX2RldmljZShkZXYpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRtcDEwMi0+dGVtcFtzZGEtPmluZGV4XSk7CiB9CkBAIC0xMjAsOCArMTIyLDggQEAKIAkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNkYSA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB0bXAxMDIgKnRtcDEwMiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0bXAxMDIgKnRtcDEwMiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0bXAxMDItPmNsaWVudDsKIAlsb25nIHZhbDsKIAlpbnQgc3RhdHVzOwogCkBAIC0xNDUsMTYgKzE0NywxMyBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCB0bXAxMDJfc2hvd190ZW1wLAogCQkJICB0bXAxMDJfc2V0X3RlbXAsIDIpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdG1wMTAyX2F0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0bXAxMDJfYXR0cnNbXSA9IHsKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdG1wMTAyX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gdG1wMTAyX2F0dHJpYnV0ZXMsCi19OworQVRUUklCVVRFX0dST1VQUyh0bXAxMDIpOwogCiAjZGVmaW5lIFRNUDEwMl9DT05GSUcgIChUTVAxMDJfQ09ORl9UTSB8IFRNUDEwMl9DT05GX0VNIHwgVE1QMTAyX0NPTkZfQ1IxKQogI2RlZmluZSBUTVAxMDJfQ09ORklHX1JEX09OTFkgKFRNUDEwMl9DT05GX1IwIHwgVE1QMTAyX0NPTkZfUjEgfCBUTVAxMDJfQ09ORl9BTCkKQEAgLTE2Miw3MiArMTYxLDY4IEBACiBzdGF0aWMgaW50IHRtcDEwMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IHRtcDEwMiAqdG1wMTAyOwogCWludCBzdGF0dXM7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKIAkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCWRldl9lcnIoZGV2LAogCQkJImFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IFNNQnVzIHdvcmQgdHJhbnNhY3Rpb25zXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JdG1wMTAyID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCp0bXAxMDIpLCBHRlBfS0VSTkVMKTsKKwl0bXAxMDIgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnRtcDEwMiksIEdGUF9LRVJORUwpOwogCWlmICghdG1wMTAyKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRtcDEwMik7CisJdG1wMTAyLT5jbGllbnQgPSBjbGllbnQ7CiAKIAlzdGF0dXMgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCBUTVAxMDJfQ09ORl9SRUcpOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZXJyb3IgcmVhZGluZyBjb25maWcgcmVnaXN0ZXJcbiIpOworCQlkZXZfZXJyKGRldiwgImVycm9yIHJlYWRpbmcgY29uZmlnIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAJdG1wMTAyLT5jb25maWdfb3JpZyA9IHN0YXR1czsKIAlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgVE1QMTAyX0NPTkZfUkVHLAogCQkJCQkgICAgICBUTVAxMDJfQ09ORklHKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImVycm9yIHdyaXRpbmcgY29uZmlnIHJlZ2lzdGVyXG4iKTsKKwkJZGV2X2VycihkZXYsICJlcnJvciB3cml0aW5nIGNvbmZpZyByZWdpc3RlclxuIik7CiAJCWdvdG8gZmFpbF9yZXN0b3JlX2NvbmZpZzsKIAl9CiAJc3RhdHVzID0gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGNsaWVudCwgVE1QMTAyX0NPTkZfUkVHKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImVycm9yIHJlYWRpbmcgY29uZmlnIHJlZ2lzdGVyXG4iKTsKKwkJZGV2X2VycihkZXYsICJlcnJvciByZWFkaW5nIGNvbmZpZyByZWdpc3RlclxuIik7CiAJCWdvdG8gZmFpbF9yZXN0b3JlX2NvbmZpZzsKIAl9CiAJc3RhdHVzICY9IH5UTVAxMDJfQ09ORklHX1JEX09OTFk7CiAJaWYgKHN0YXR1cyAhPSBUTVAxMDJfQ09ORklHKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiY29uZmlnIHNldHRpbmdzIGRpZCBub3Qgc3RpY2tcbiIpOworCQlkZXZfZXJyKGRldiwgImNvbmZpZyBzZXR0aW5ncyBkaWQgbm90IHN0aWNrXG4iKTsKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBmYWlsX3Jlc3RvcmVfY29uZmlnOwogCX0KIAl0bXAxMDItPmxhc3RfdXBkYXRlID0gamlmZmllcyAtIEhaOwogCW11dGV4X2luaXQoJnRtcDEwMi0+bG9jayk7CiAKLQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ0bXAxMDJfYXR0cl9ncm91cCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOworCWh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKKwkJCQkJCSAgICAgIHRtcDEwMiwgdG1wMTAyX2dyb3Vwcyk7CisJaWYgKElTX0VSUihod21vbl9kZXYpKSB7CisJCWRldl9kYmcoZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZVxuIik7CisJCXN0YXR1cyA9IFBUUl9FUlIoaHdtb25fZGV2KTsKIAkJZ290byBmYWlsX3Jlc3RvcmVfY29uZmlnOwogCX0KLQl0bXAxMDItPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIodG1wMTAyLT5od21vbl9kZXYpKSB7Ci0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZVxuIik7Ci0JCXN0YXR1cyA9IFBUUl9FUlIodG1wMTAyLT5od21vbl9kZXYpOwotCQlnb3RvIGZhaWxfcmVtb3ZlX3N5c2ZzOwotCX0KLQotCXRtcDEwMi0+dHogPSB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgMCwKLQkJCQkJCSAgICAgJmNsaWVudC0+ZGV2LAorCXRtcDEwMi0+aHdtb25fZGV2ID0gaHdtb25fZGV2OworCXRtcDEwMi0+dHogPSB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKGh3bW9uX2RldiwgMCwgaHdtb25fZGV2LAogCQkJCQkJICAgICB0bXAxMDJfcmVhZF90ZW1wLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHRtcDEwMi0+dHopKQogCQl0bXAxMDItPnR6ID0gTlVMTDsKIAotCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImluaXRpYWxpemVkXG4iKTsKKwlkZXZfaW5mbyhkZXYsICJpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKIAotZmFpbF9yZW1vdmVfc3lzZnM6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdG1wMTAyX2F0dHJfZ3JvdXApOwogZmFpbF9yZXN0b3JlX2NvbmZpZzoKIAlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgVE1QMTAyX0NPTkZfUkVHLAogCQkJCSAgICAgdG1wMTAyLT5jb25maWdfb3JpZyk7CkBAIC0yMzgsOSArMjMzLDggQEAKIHsKIAlzdHJ1Y3QgdG1wMTAyICp0bXAxMDIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3RlcigmY2xpZW50LT5kZXYsIHRtcDEwMi0+dHopOworCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3Rlcih0bXAxMDItPmh3bW9uX2RldiwgdG1wMTAyLT50eik7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIodG1wMTAyLT5od21vbl9kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnRtcDEwMl9hdHRyX2dyb3VwKTsKIAogCS8qIFN0b3AgbW9uaXRvcmluZyBpZiBkZXZpY2Ugd2FzIHN0b3BwZWQgb3JpZ2luYWxseSAqLwogCWlmICh0bXAxMDItPmNvbmZpZ19vcmlnICYgVE1QMTAyX0NPTkZfU0QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wNDIxLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDQyMS5jCmluZGV4IGFlMjZiMDYuLjdiYWI3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wNDIxLmMKKysrIGIvZHJpdmVycy9od21vbi90bXA0MjEuYwpAQCAtNjksNyArNjksNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRtcDQyMV9pZCk7CiAKIHN0cnVjdCB0bXA0MjFfZGF0YSB7Ci0Jc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CkBAIC05OSw4ICs5OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdG1wNDIxX2RhdGEgKnRtcDQyMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB0bXA0MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0bXA0MjFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC0xOTgsNiArMTk4LDExIEBACiAJLmlzX3Zpc2libGUgPSB0bXA0MjFfaXNfdmlzaWJsZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0bXA0MjFfZ3JvdXBzW10gPSB7CisJJnRtcDQyMV9ncm91cCwKKwlOVUxMCit9OworCiBzdGF0aWMgaW50IHRtcDQyMV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWludCBjb25maWcsIGNvbmZpZ19vcmlnOwpAQCAtMjY0LDQ3ICsyNjksMjYgQEAKIHN0YXRpYyBpbnQgdG1wNDIxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlzdHJ1Y3QgdG1wNDIxX2RhdGEgKmRhdGE7CiAJaW50IGVycjsKIAotCWRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IHRtcDQyMV9kYXRhKSwKLQkJCSAgICBHRlBfS0VSTkVMKTsKKwlkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB0bXA0MjFfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+Y2hhbm5lbHMgPSBpZC0+ZHJpdmVyX2RhdGE7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OwogCiAJZXJyID0gdG1wNDIxX2luaXRfY2xpZW50KGNsaWVudCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnRtcDQyMV9ncm91cCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWRhdGEtPmh3bW9uX2RldiA9IE5VTEw7Ci0JCWdvdG8gZXhpdF9yZW1vdmU7Ci0JfQotCXJldHVybiAwOwotCi1leGl0X3JlbW92ZToKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ0bXA0MjFfZ3JvdXApOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdG1wNDIxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB0bXA0MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ0bXA0MjFfZ3JvdXApOwotCi0JcmV0dXJuIDA7CisJaHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCisJCQkJCQkJICAgZGF0YSwgdG1wNDIxX2dyb3Vwcyk7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdG1wNDIxX2RyaXZlciA9IHsKQEAgLTMxMyw3ICsyOTcsNiBAQAogCQkubmFtZQk9ICJ0bXA0MjEiLAogCX0sCiAJLnByb2JlID0gdG1wNDIxX3Byb2JlLAotCS5yZW1vdmUgPSB0bXA0MjFfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHRtcDQyMV9pZCwKIAkuZGV0ZWN0ID0gdG1wNDIxX2RldGVjdCwKIAkuYWRkcmVzc19saXN0ID0gbm9ybWFsX2kyYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdWx0cmE0NV9lbnYuYyBiL2RyaXZlcnMvaHdtb24vdWx0cmE0NV9lbnYuYwppbmRleCBmYjNlNjkzLi43ZDQ2NTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3VsdHJhNDVfZW52LmMKKysrIGIvZHJpdmVycy9od21vbi91bHRyYTQ1X2Vudi5jCkBAIC0yNTIsNyArMjUyLDcgQEAKIAogc3RhdGljIGludCBlbnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7Ci0Jc3RydWN0IGVudiAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGVudiAqcCA9IGRldm1fa3phbGxvYygmb3AtPmRldiwgc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpZiAoIXApCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogCXAtPnJlZ3MgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsIFJFR19TSVpFLCAicGljMTZmNzQ3Iik7CiAJaWYgKCFwLT5yZWdzKQotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dDsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmb3AtPmRldi5rb2JqLCAmZW52X2dyb3VwKTsKIAlpZiAoZXJyKQpAQCAtMjg2LDggKzI4Niw2IEBACiBvdXRfaW91bm1hcDoKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHAtPnJlZ3MsIFJFR19TSVpFKTsKIAotb3V0X2ZyZWU6Ci0Ja2ZyZWUocCk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTI5OSw3ICsyOTcsNiBAQAogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm9wLT5kZXYua29iaiwgJmVudl9ncm91cCk7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHAtPmh3bW9uX2Rldik7CiAJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgcC0+cmVncywgUkVHX1NJWkUpOwotCQlrZnJlZShwKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdmV4cHJlc3MuYyBiL2RyaXZlcnMvaHdtb24vdmV4cHJlc3MuYwppbmRleCA4MjQyYjc1Li42MTFmMzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3ZleHByZXNzLmMKKysrIGIvZHJpdmVycy9od21vbi92ZXhwcmVzcy5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0cnVjdCB2ZXhwcmVzc19od21vbl9kYXRhIHsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7Ci0Jc3RydWN0IHZleHByZXNzX2NvbmZpZ19mdW5jICpmdW5jOworCXN0cnVjdCByZWdtYXAgKnJlZzsKIAljb25zdCBjaGFyICpuYW1lOwogfTsKIApAQCAtNTMsNyArNTMsNyBAQAogCWludCBlcnI7CiAJdTMyIHZhbHVlOwogCi0JZXJyID0gdmV4cHJlc3NfY29uZmlnX3JlYWQoZGF0YS0+ZnVuYywgMCwgJnZhbHVlKTsKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWcsIDAsICZ2YWx1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjgsMTEgKzY4LDExIEBACiAJaW50IGVycjsKIAl1MzIgdmFsdWVfaGksIHZhbHVlX2xvOwogCi0JZXJyID0gdmV4cHJlc3NfY29uZmlnX3JlYWQoZGF0YS0+ZnVuYywgMCwgJnZhbHVlX2xvKTsKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWcsIDAsICZ2YWx1ZV9sbyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHZleHByZXNzX2NvbmZpZ19yZWFkKGRhdGEtPmZ1bmMsIDEsICZ2YWx1ZV9oaSk7CisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnLCAxLCAmdmFsdWVfaGkpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTIzNCw5ICsyMzQsOSBAQAogCXR5cGUgPSBtYXRjaC0+ZGF0YTsKIAlkYXRhLT5uYW1lID0gdHlwZS0+bmFtZTsKIAotCWRhdGEtPmZ1bmMgPSB2ZXhwcmVzc19jb25maWdfZnVuY19nZXRfYnlfZGV2KCZwZGV2LT5kZXYpOwotCWlmICghZGF0YS0+ZnVuYykKLQkJcmV0dXJuIC1FTk9ERVY7CisJZGF0YS0+cmVnID0gZGV2bV9yZWdtYXBfaW5pdF92ZXhwcmVzc19jb25maWcoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5yZWcpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5yZWcpOwogCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwcygmcGRldi0+ZGV2LmtvYmosIHR5cGUtPmF0dHJfZ3JvdXBzKTsKIAlpZiAoZXJyKQpAQCAtMjUyLDcgKzI1Miw2IEBACiAKIGVycm9yOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosIG1hdGNoLT5kYXRhKTsKLQl2ZXhwcmVzc19jb25maWdfZnVuY19wdXQoZGF0YS0+ZnVuYyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjY2LDggKzI2NSw2IEBACiAJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UodmV4cHJlc3NfaHdtb25fb2ZfbWF0Y2gsICZwZGV2LT5kZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosIG1hdGNoLT5kYXRhKTsKIAotCXZleHByZXNzX2NvbmZpZ19mdW5jX3B1dChkYXRhLT5mdW5jKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jIGIvZHJpdmVycy9od21vbi92dDEyMTEuYwppbmRleCA2YjJmMWE0Li4zNDRiMjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdnQxMjExLmMKQEAgLTExNTIsMTAgKzExNTIsOCBAQAogCWludCBpLCBlcnI7CiAKIAlkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB2dDEyMTFfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQlkZXZfZXJyKGRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwogCWlmICghZGV2bV9yZXF1ZXN0X3JlZ2lvbihkZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCmluZGV4IDE2ZjY5YmUuLmVlODgwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwpAQCAtMTg4LDEwICsxODgsOSBAQAogCiAJbGVkdHJpZ19pZGVfYWN0aXZpdHkoKTsKIAotCXByX2RlYnVnKCIlczogJXNpbmc6IGJsb2NrPSVsbHUsIHNlY3RvcnM9JXUsIGJ1ZmZlcj0weCUwOGx4XG4iLAorCXByX2RlYnVnKCIlczogJXNpbmc6IGJsb2NrPSVsbHUsIHNlY3RvcnM9JXVcbiIsCiAJCSBkcml2ZS0+bmFtZSwgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgPyAicmVhZCIgOiAid3JpdCIsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBibGtfcnFfc2VjdG9ycyhycSksCi0JCSAodW5zaWduZWQgbG9uZylycS0+YnVmZmVyKTsKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIGJsa19ycV9zZWN0b3JzKHJxKSk7CiAKIAlpZiAoaHdpZi0+cndfZGlzaykKIAkJaHdpZi0+cndfZGlzayhkcml2ZSwgcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vS2NvbmZpZyBiL2RyaXZlcnMvaWlvL0tjb25maWcKaW5kZXggNWRkMGUxMi4uMzQ1Mzk1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2lpby9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBtZW51Y29uZmlnIElJTwogCXRyaXN0YXRlICJJbmR1c3RyaWFsIEkvTyBzdXBwb3J0IgorCXNlbGVjdCBBTk9OX0lOT0RFUwogCWhlbHAKIAkgIFRoZSBpbmR1c3RyaWFsIEkvTyBzdWJzeXN0ZW0gcHJvdmlkZXMgYSB1bmlmaWVkIGZyYW1ld29yayBmb3IKIAkgIGRyaXZlcnMgZm9yIG1hbnkgZGlmZmVyZW50IHR5cGVzIG9mIGVtYmVkZGVkIHNlbnNvcnMgdXNpbmcgYQpAQCAtNzQsNiArNzUsNyBAQAogICAgc291cmNlICJkcml2ZXJzL2lpby90cmlnZ2VyL0tjb25maWciCiBlbmRpZiAjSUlPX1RSSUdHRVIKIHNvdXJjZSAiZHJpdmVycy9paW8vcHJlc3N1cmUvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9paW8vcHJveGltaXR5L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL0tjb25maWciCiAKIGVuZGlmICMgSUlPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9NYWtlZmlsZSBiL2RyaXZlcnMvaWlvL01ha2VmaWxlCmluZGV4IDg4N2QzOTA5Li42OThhZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lpby9NYWtlZmlsZQpAQCAtMjQsNSArMjQsNiBAQAogb2JqLXkgKz0gbWFnbmV0b21ldGVyLwogb2JqLXkgKz0gb3JpZW50YXRpb24vCiBvYmoteSArPSBwcmVzc3VyZS8KK29iai15ICs9IHByb3hpbWl0eS8KIG9iai15ICs9IHRlbXBlcmF0dXJlLwogb2JqLXkgKz0gdHJpZ2dlci8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FjY2VsL0tjb25maWcgYi9kcml2ZXJzL2lpby9hY2NlbC9LY29uZmlnCmluZGV4IGUyM2U1MDg1Li4xZTEyMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9hY2NlbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWlvL2FjY2VsL0tjb25maWcKQEAgLTY1LDQgKzY1LDE2IEBACiAJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIEtpb25peCBLWFNEOSBhY2NlbGVyb21ldGVyLgogCSAgQ3VycmVudGx5IHRoaXMgb25seSBzdXBwb3J0cyB0aGUgZGV2aWNlIHZpYSBhbiBTUEkgaW50ZXJmYWNlLgogCitjb25maWcgTU1BODQ1MgorCXRyaXN0YXRlICJGcmVlc2NhbGUgTU1BODQ1MlEgQWNjZWxlcm9tZXRlciBEcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgSUlPX0JVRkZFUgorCXNlbGVjdCBJSU9fVFJJR0dFUkVEX0JVRkZFUgorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1NQTg0NTJRIDMtYXhpcworCSAgYWNjZWxlcm9tZXRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbW1hODQ1Mi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWNjZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZQppbmRleCBjNDhkMTVmLi5kYzBlMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19CTUExODApICs9IGJtYTE4MC5vCiBvYmotJChDT05GSUdfSElEX1NFTlNPUl9BQ0NFTF8zRCkgKz0gaGlkLXNlbnNvci1hY2NlbC0zZC5vCiBvYmotJChDT05GSUdfS1hTRDkpCSs9IGt4c2Q5Lm8KK29iai0kKENPTkZJR19NTUE4NDUyKQkrPSBtbWE4NDUyLm8KIAogb2JqLSQoQ09ORklHX0lJT19TVF9BQ0NFTF8zQVhJUykgKz0gc3RfYWNjZWwubwogc3RfYWNjZWwteSA6PSBzdF9hY2NlbF9jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FjY2VsL2hpZC1zZW5zb3ItYWNjZWwtM2QuYyBiL2RyaXZlcnMvaWlvL2FjY2VsL2hpZC1zZW5zb3ItYWNjZWwtM2QuYwppbmRleCAzZGNkYmFkLi42OWFiZjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9hY2NlbC9oaWQtc2Vuc29yLWFjY2VsLTNkLmMKKysrIGIvZHJpdmVycy9paW8vYWNjZWwvaGlkLXNlbnNvci1hY2NlbC0zZC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLXNlbnNvci1odWIuaD4KICNpbmNsdWRlIDxsaW51eC9paW8vaWlvLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CkBAIC00Miw2ICs0MywxMCBAQAogCXN0cnVjdCBoaWRfc2Vuc29yX2NvbW1vbiBjb21tb25fYXR0cmlidXRlczsKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfYXR0cmlidXRlX2luZm8gYWNjZWxbQUNDRUxfM0RfQ0hBTk5FTF9NQVhdOwogCXUzMiBhY2NlbF92YWxbQUNDRUxfM0RfQ0hBTk5FTF9NQVhdOworCWludCBzY2FsZV9wcmVfZGVjbWw7CisJaW50IHNjYWxlX3Bvc3RfZGVjbWw7CisJaW50IHNjYWxlX3ByZWNpc2lvbjsKKwlpbnQgdmFsdWVfb2Zmc2V0OwogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhY2NlbF8zZF9hZGRyZXNzZXNbQUNDRUxfM0RfQ0hBTk5FTF9NQVhdID0gewpAQCAtNTYsNiArNjEsNyBAQAogCQkudHlwZSA9IElJT19BQ0NFTCwKIAkJLm1vZGlmaWVkID0gMSwKIAkJLmNoYW5uZWwyID0gSUlPX01PRF9YLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKIAkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX09GRlNFVCkgfAogCQlCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSkgfAogCQlCSVQoSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEpIHwKQEAgLTY1LDYgKzcxLDcgQEAKIAkJLnR5cGUgPSBJSU9fQUNDRUwsCiAJCS5tb2RpZmllZCA9IDEsCiAJCS5jaGFubmVsMiA9IElJT19NT0RfWSwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCiAJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSB8CkBAIC03NCw2ICs4MSw3IEBACiAJCS50eXBlID0gSUlPX0FDQ0VMLAogCQkubW9kaWZpZWQgPSAxLAogCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1osCisJCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpLAogCQkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fT0ZGU0VUKSB8CiAJCUJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSB8CiAJCUJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSkgfApAQCAtMTA0LDMxICsxMTIsNDIgQEAKIAl1MzIgYWRkcmVzczsKIAlpbnQgcmV0OwogCWludCByZXRfdHlwZTsKKwlzMzIgcG9sbF92YWx1ZTsKIAogCSp2YWwgPSAwOwogCSp2YWwyID0gMDsKIAlzd2l0Y2ggKG1hc2spIHsKIAljYXNlIDA6CisJCXBvbGxfdmFsdWUgPSBoaWRfc2Vuc29yX3JlYWRfcG9sbF92YWx1ZSgKKwkJCQkJJmFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CisJCWlmIChwb2xsX3ZhbHVlIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhpZF9zZW5zb3JfcG93ZXJfc3RhdGUoJmFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywgdHJ1ZSk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHBvbGxfdmFsdWUgKiAyKTsKIAkJcmVwb3J0X2lkID0gYWNjZWxfc3RhdGUtPmFjY2VsW2NoYW4tPnNjYW5faW5kZXhdLnJlcG9ydF9pZDsKIAkJYWRkcmVzcyA9IGFjY2VsXzNkX2FkZHJlc3Nlc1tjaGFuLT5zY2FuX2luZGV4XTsKIAkJaWYgKHJlcG9ydF9pZCA+PSAwKQogCQkJKnZhbCA9IHNlbnNvcl9odWJfaW5wdXRfYXR0cl9nZXRfcmF3X3ZhbHVlKAotCQkJCWFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5oc2RldiwKLQkJCQlISURfVVNBR0VfU0VOU09SX0FDQ0VMXzNELCBhZGRyZXNzLAotCQkJCXJlcG9ydF9pZCk7CisJCQkJCWFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5oc2RldiwKKwkJCQkJSElEX1VTQUdFX1NFTlNPUl9BQ0NFTF8zRCwgYWRkcmVzcywKKwkJCQkJcmVwb3J0X2lkKTsKIAkJZWxzZSB7CiAJCQkqdmFsID0gMDsKKwkJCWhpZF9zZW5zb3JfcG93ZXJfc3RhdGUoJmFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywKKwkJCQkJCSBmYWxzZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZhY2NlbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsIGZhbHNlKTsKIAkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVDsKIAkJYnJlYWs7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxFOgotCQkqdmFsID0gYWNjZWxfc3RhdGUtPmFjY2VsW0NIQU5ORUxfU0NBTl9JTkRFWF9YXS51bml0czsKLQkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVDsKKwkJKnZhbCA9IGFjY2VsX3N0YXRlLT5zY2FsZV9wcmVfZGVjbWw7CisJCSp2YWwyID0gYWNjZWxfc3RhdGUtPnNjYWxlX3Bvc3RfZGVjbWw7CisJCXJldF90eXBlID0gYWNjZWxfc3RhdGUtPnNjYWxlX3ByZWNpc2lvbjsKIAkJYnJlYWs7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX09GRlNFVDoKLQkJKnZhbCA9IGhpZF9zZW5zb3JfY29udmVydF9leHBvbmVudCgKLQkJCWFjY2VsX3N0YXRlLT5hY2NlbFtDSEFOTkVMX1NDQU5fSU5ERVhfWF0udW5pdF9leHBvKTsKKwkJKnZhbCA9IGFjY2VsX3N0YXRlLT52YWx1ZV9vZmZzZXQ7CiAJCXJldF90eXBlID0gSUlPX1ZBTF9JTlQ7CiAJCWJyZWFrOwogCWNhc2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6CkBAIC0xOTcsOSArMjE2LDggQEAKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocHJpdik7CiAJc3RydWN0IGFjY2VsXzNkX3N0YXRlICphY2NlbF9zdGF0ZSA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgImFjY2VsXzNkX3Byb2NfZXZlbnQgWyVkXVxuIiwKLQkJCQlhY2NlbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSk7Ci0JaWYgKGFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KQorCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiYWNjZWxfM2RfcHJvY19ldmVudFxuIik7CisJaWYgKGF0b21pY19yZWFkKCZhY2NlbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSkpCiAJCWhpZF9zZW5zb3JfcHVzaF9kYXRhKGluZGlvX2RldiwKIAkJCQlhY2NlbF9zdGF0ZS0+YWNjZWxfdmFsLAogCQkJCXNpemVvZihhY2NlbF9zdGF0ZS0+YWNjZWxfdmFsKSk7CkBAIC0yNjIsNiArMjgwLDExIEBACiAJCQlzdC0+YWNjZWxbMV0uaW5kZXgsIHN0LT5hY2NlbFsxXS5yZXBvcnRfaWQsCiAJCQlzdC0+YWNjZWxbMl0uaW5kZXgsIHN0LT5hY2NlbFsyXS5yZXBvcnRfaWQpOwogCisJc3QtPnNjYWxlX3ByZWNpc2lvbiA9IGhpZF9zZW5zb3JfZm9ybWF0X3NjYWxlKAorCQkJCUhJRF9VU0FHRV9TRU5TT1JfQUNDRUxfM0QsCisJCQkJJnN0LT5hY2NlbFtDSEFOTkVMX1NDQU5fSU5ERVhfWF0sCisJCQkJJnN0LT5zY2FsZV9wcmVfZGVjbWwsICZzdC0+c2NhbGVfcG9zdF9kZWNtbCk7CisKIAkvKiBTZXQgU2Vuc2l0aXZpdHkgZmllbGQgaWRzLCB3aGVuIHRoZXJlIGlzIG5vIGluZGl2aWR1YWwgbW9kaWZpZXIgKi8KIAlpZiAoc3QtPmNvbW1vbl9hdHRyaWJ1dGVzLnNlbnNpdGl2aXR5LmluZGV4IDwgMCkgewogCQlzZW5zb3JfaHViX2lucHV0X2dldF9hdHRyaWJ1dGVfaW5mbyhoc2RldiwKQEAgLTMzMyw3ICszNTYsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmlnZ2VyIGJ1ZmZlclxuIik7CiAJCWdvdG8gZXJyb3JfZnJlZV9kZXZfbWVtOwogCX0KLQlhY2NlbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSA9IGZhbHNlOworCWF0b21pY19zZXQoJmFjY2VsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5LCAwKTsKIAlyZXQgPSBoaWRfc2Vuc29yX3NldHVwX3RyaWdnZXIoaW5kaW9fZGV2LCBuYW1lLAogCQkJCQkmYWNjZWxfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzKTsKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWNjZWwvbW1hODQ1Mi5jIGIvZHJpdmVycy9paW8vYWNjZWwvbW1hODQ1Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWVlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lpby9hY2NlbC9tbWE4NDUyLmMKQEAgLTAsMCArMSw0MzkgQEAKKy8qCisgKiBtbWE4NDUyLmMgLSBTdXBwb3J0IGZvciBGcmVlc2NhbGUgTU1BODQ1MlEgMy1heGlzIDEyLWJpdCBhY2NlbGVyb21ldGVyCisgKgorICogQ29weXJpZ2h0IDIwMTQgUGV0ZXIgTWVlcndhbGQgPHBtZWVyd0BwbWVlcncubmV0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluCisgKiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogNy1iaXQgSTJDIHNsYXZlIGFkZHJlc3MgMHgxYy8weDFkIChwaW4gc2VsZWN0YWJsZSkKKyAqCisgKiBUT0RPOiBpbnRlcnJ1cHQsIHRocmVzaG9sZGluZywgb3JpZW50YXRpb24gLyBmcmVlZmFsbCBldmVudHMsIGF1dG9zbGVlcAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vaWlvLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJfY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJlZF9idWZmZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIE1NQTg0NTJfU1RBVFVTIDB4MDAKKyNkZWZpbmUgTU1BODQ1Ml9PVVRfWCAweDAxIC8qIE1TQiBmaXJzdCwgMTItYml0ICAqLworI2RlZmluZSBNTUE4NDUyX09VVF9ZIDB4MDMKKyNkZWZpbmUgTU1BODQ1Ml9PVVRfWiAweDA1CisjZGVmaW5lIE1NQTg0NTJfV0hPX0FNX0kgMHgwZAorI2RlZmluZSBNTUE4NDUyX0RBVEFfQ0ZHIDB4MGUKKyNkZWZpbmUgTU1BODQ1Ml9PRkZfWCAweDJmCisjZGVmaW5lIE1NQTg0NTJfT0ZGX1kgMHgzMAorI2RlZmluZSBNTUE4NDUyX09GRl9aIDB4MzEKKyNkZWZpbmUgTU1BODQ1Ml9DVFJMX1JFRzEgMHgyYQorI2RlZmluZSBNTUE4NDUyX0NUUkxfUkVHMiAweDJiCisKKyNkZWZpbmUgTU1BODQ1Ml9TVEFUVVNfRFJEWSAoQklUKDIpIHwgQklUKDEpIHwgQklUKDApKQorCisjZGVmaW5lIE1NQTg0NTJfQ1RSTF9EUl9NQVNLIChCSVQoNSkgfCBCSVQoNCkgfCBCSVQoMykpCisjZGVmaW5lIE1NQTg0NTJfQ1RSTF9EUl9TSElGVCAzCisjZGVmaW5lIE1NQTg0NTJfQ1RSTF9EUl9ERUZBVUxUIDB4NCAvKiA1MCBIeiBzYW1wbGUgZnJlcXVlbmN5ICovCisjZGVmaW5lIE1NQTg0NTJfQ1RSTF9BQ1RJVkUgQklUKDApCisKKyNkZWZpbmUgTU1BODQ1Ml9EQVRBX0NGR19GU19NQVNLIChCSVQoMSkgfCBCSVQoMCkpCisjZGVmaW5lIE1NQTg0NTJfREFUQV9DRkdfRlNfMkcgMAorI2RlZmluZSBNTUE4NDUyX0RBVEFfQ0ZHX0ZTXzRHIDEKKyNkZWZpbmUgTU1BODQ1Ml9EQVRBX0NGR19GU184RyAyCisKKyNkZWZpbmUgTU1BODQ1Ml9ERVZJQ0VfSUQgMHgyYQorCitzdHJ1Y3QgbW1hODQ1Ml9kYXRhIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBtdXRleCBsb2NrOworCXU4IGN0cmxfcmVnMTsKKwl1OCBkYXRhX2NmZzsKK307CisKK3N0YXRpYyBpbnQgbW1hODQ1Ml9kcmR5KHN0cnVjdCBtbWE4NDUyX2RhdGEgKmRhdGEpCit7CisJaW50IHRyaWVzID0gMTUwOworCisJd2hpbGUgKHRyaWVzLS0gPiAwKSB7CisJCWludCByZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQkJTU1BODQ1Ml9TVEFUVVMpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWlmICgocmV0ICYgTU1BODQ1Ml9TVEFUVVNfRFJEWSkgPT0gTU1BODQ1Ml9TVEFUVVNfRFJEWSkKKwkJCXJldHVybiAwOworCQltc2xlZXAoMjApOworCX0KKworCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LCAiZGF0YSBub3QgcmVhZHlcbiIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IG1tYTg0NTJfcmVhZChzdHJ1Y3QgbW1hODQ1Ml9kYXRhICpkYXRhLCBfX2JlMTYgYnVmWzNdKQoreworCWludCByZXQgPSBtbWE4NDUyX2RyZHkoZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRhdGEtPmNsaWVudCwKKwkJTU1BODQ1Ml9PVVRfWCwgMyAqIHNpemVvZihfX2JlMTYpLCAodTggKikgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgbW1hODQ1Ml9zaG93X2ludF9wbHVzX21pY3JvcyhjaGFyICpidWYsCisJY29uc3QgaW50ICgqdmFscylbMl0sIGludCBuKQoreworCXNpemVfdCBsZW4gPSAwOworCisJd2hpbGUgKG4tLSA+IDApCisJCWxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkiJWQuJTA2ZCAiLCB2YWxzW25dWzBdLCB2YWxzW25dWzFdKTsKKworCS8qIHJlcGxhY2UgdHJhaWxpbmcgc3BhY2UgYnkgbmV3bGluZSAqLworCWJ1ZltsZW4gLSAxXSA9ICdcbic7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IG1tYTg0NTJfZ2V0X2ludF9wbHVzX21pY3Jvc19pbmRleChjb25zdCBpbnQgKCp2YWxzKVsyXSwgaW50IG4sCisJCQkJCWludCB2YWwsIGludCB2YWwyKQoreworCXdoaWxlIChuLS0gPiAwKQorCQlpZiAodmFsID09IHZhbHNbbl1bMF0gJiYgdmFsMiA9PSB2YWxzW25dWzFdKQorCQkJcmV0dXJuIG47CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGNvbnN0IGludCBtbWE4NDUyX3NhbXBfZnJlcVs4XVsyXSA9IHsKKwl7ODAwLCAwfSwgezQwMCwgMH0sIHsyMDAsIDB9LCB7MTAwLCAwfSwgezUwLCAwfSwgezEyLCA1MDAwMDB9LAorCXs2LCAyNTAwMDB9LCB7MSwgNTYwMDAwfQorfTsKKworc3RhdGljIGNvbnN0IGludCBtbWE4NDUyX3NjYWxlc1szXVsyXSA9IHsKKwl7MCwgOTc3fSwgezAsIDE5NTN9LCB7MCwgMzkwNn0KK307CisKK3N0YXRpYyBzc2l6ZV90IG1tYTg0NTJfc2hvd19zYW1wX2ZyZXFfYXZhaWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIG1tYTg0NTJfc2hvd19pbnRfcGx1c19taWNyb3MoYnVmLCBtbWE4NDUyX3NhbXBfZnJlcSwKKwkJQVJSQVlfU0laRShtbWE4NDUyX3NhbXBfZnJlcSkpOworfQorCitzdGF0aWMgc3NpemVfdCBtbWE4NDUyX3Nob3dfc2NhbGVfYXZhaWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIG1tYTg0NTJfc2hvd19pbnRfcGx1c19taWNyb3MoYnVmLCBtbWE4NDUyX3NjYWxlcywKKwkJQVJSQVlfU0laRShtbWE4NDUyX3NjYWxlcykpOworfQorCitzdGF0aWMgSUlPX0RFVl9BVFRSX1NBTVBfRlJFUV9BVkFJTChtbWE4NDUyX3Nob3dfc2FtcF9mcmVxX2F2YWlsKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fYWNjZWxfc2NhbGVfYXZhaWxhYmxlLCBTX0lSVUdPLAorCW1tYTg0NTJfc2hvd19zY2FsZV9hdmFpbCwgTlVMTCwgMCk7CisKK3N0YXRpYyBpbnQgbW1hODQ1Ml9nZXRfc2FtcF9mcmVxX2luZGV4KHN0cnVjdCBtbWE4NDUyX2RhdGEgKmRhdGEsCisJaW50IHZhbCwgaW50IHZhbDIpCit7CisJcmV0dXJuIG1tYTg0NTJfZ2V0X2ludF9wbHVzX21pY3Jvc19pbmRleChtbWE4NDUyX3NhbXBfZnJlcSwKKwkJQVJSQVlfU0laRShtbWE4NDUyX3NhbXBfZnJlcSksIHZhbCwgdmFsMik7Cit9CisKK3N0YXRpYyBpbnQgbW1hODQ1Ml9nZXRfc2NhbGVfaW5kZXgoc3RydWN0IG1tYTg0NTJfZGF0YSAqZGF0YSwKKwlpbnQgdmFsLCBpbnQgdmFsMikKK3sKKwlyZXR1cm4gbW1hODQ1Ml9nZXRfaW50X3BsdXNfbWljcm9zX2luZGV4KG1tYTg0NTJfc2NhbGVzLAorCQlBUlJBWV9TSVpFKG1tYTg0NTJfc2NhbGVzKSwgdmFsLCB2YWwyKTsKK30KKworc3RhdGljIGludCBtbWE4NDUyX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgaW50ICp2YWwsIGludCAqdmFsMiwgbG9uZyBtYXNrKQoreworCXN0cnVjdCBtbWE4NDUyX2RhdGEgKmRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCV9fYmUxNiBidWZmZXJbM107CisJaW50IGksIHJldDsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CisJCWlmIChpaW9fYnVmZmVyX2VuYWJsZWQoaW5kaW9fZGV2KSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJCXJldCA9IG1tYTg0NTJfcmVhZChkYXRhLCBidWZmZXIpOworCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCSp2YWwgPSBzaWduX2V4dGVuZDMyKAorCQkJYmUxNl90b19jcHUoYnVmZmVyW2NoYW4tPnNjYW5faW5kZXhdKSA+PiA0LCAxMSk7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6CisJCWkgPSBkYXRhLT5kYXRhX2NmZyAmIE1NQTg0NTJfREFUQV9DRkdfRlNfTUFTSzsKKwkJKnZhbCA9IG1tYTg0NTJfc2NhbGVzW2ldWzBdOworCQkqdmFsMiA9IG1tYTg0NTJfc2NhbGVzW2ldWzFdOworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROgorCQlpID0gKGRhdGEtPmN0cmxfcmVnMSAmIE1NQTg0NTJfQ1RSTF9EUl9NQVNLKSA+PgorCQkJTU1BODQ1Ml9DVFJMX0RSX1NISUZUOworCQkqdmFsID0gbW1hODQ1Ml9zYW1wX2ZyZXFbaV1bMF07CisJCSp2YWwyID0gbW1hODQ1Ml9zYW1wX2ZyZXFbaV1bMV07CisJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCWNhc2UgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVM6CisJCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIE1NQTg0NTJfT0ZGX1ggKworCQkJY2hhbi0+c2Nhbl9pbmRleCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnZhbCA9IHNpZ25fZXh0ZW5kMzIocmV0LCA3KTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtbWE4NDUyX3N0YW5kYnkoc3RydWN0IG1tYTg0NTJfZGF0YSAqZGF0YSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIE1NQTg0NTJfQ1RSTF9SRUcxLAorCQlkYXRhLT5jdHJsX3JlZzEgJiB+TU1BODQ1Ml9DVFJMX0FDVElWRSk7Cit9CisKK3N0YXRpYyBpbnQgbW1hODQ1Ml9hY3RpdmUoc3RydWN0IG1tYTg0NTJfZGF0YSAqZGF0YSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIE1NQTg0NTJfQ1RSTF9SRUcxLAorCQlkYXRhLT5jdHJsX3JlZzEpOworfQorCitzdGF0aWMgaW50IG1tYTg0NTJfY2hhbmdlX2NvbmZpZyhzdHJ1Y3QgbW1hODQ1Ml9kYXRhICpkYXRhLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisKKwkvKiBjb25maWcgY2FuIG9ubHkgYmUgY2hhbmdlZCB3aGVuIGluIHN0YW5kYnkgKi8KKwlyZXQgPSBtbWE4NDUyX3N0YW5kYnkoZGF0YSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LCByZWcsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKworCXJldCA9IG1tYTg0NTJfYWN0aXZlKGRhdGEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSAwOworZmFpbDoKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbW1hODQ1Ml93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgIGludCB2YWwsIGludCB2YWwyLCBsb25nIG1hc2spCit7CisJc3RydWN0IG1tYTg0NTJfZGF0YSAqZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IGk7CisKKwlpZiAoaWlvX2J1ZmZlcl9lbmFibGVkKGluZGlvX2RldikpCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROgorCQlpID0gbW1hODQ1Ml9nZXRfc2FtcF9mcmVxX2luZGV4KGRhdGEsIHZhbCwgdmFsMik7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRhdGEtPmN0cmxfcmVnMSAmPSB+TU1BODQ1Ml9DVFJMX0RSX01BU0s7CisJCWRhdGEtPmN0cmxfcmVnMSB8PSBpIDw8IE1NQTg0NTJfQ1RSTF9EUl9TSElGVDsKKwkJcmV0dXJuIG1tYTg0NTJfY2hhbmdlX2NvbmZpZyhkYXRhLCBNTUE4NDUyX0NUUkxfUkVHMSwKKwkJCWRhdGEtPmN0cmxfcmVnMSk7CisJY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxFOgorCQlpID0gbW1hODQ1Ml9nZXRfc2NhbGVfaW5kZXgoZGF0YSwgdmFsLCB2YWwyKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRhdGEtPmRhdGFfY2ZnICY9IH5NTUE4NDUyX0RBVEFfQ0ZHX0ZTX01BU0s7CisJCWRhdGEtPmRhdGFfY2ZnIHw9IGk7CisJCXJldHVybiBtbWE4NDUyX2NoYW5nZV9jb25maWcoZGF0YSwgTU1BODQ1Ml9EQVRBX0NGRywKKwkJCWRhdGEtPmRhdGFfY2ZnKTsKKwljYXNlIElJT19DSEFOX0lORk9fQ0FMSUJCSUFTOgorCQlpZiAodmFsIDwgLTEyOCB8fCB2YWwgPiAxMjcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIG1tYTg0NTJfY2hhbmdlX2NvbmZpZyhkYXRhLCBNTUE4NDUyX09GRl9YICsKKwkJCWNoYW4tPnNjYW5faW5kZXgsIHZhbCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbW1hODQ1Ml90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+aW5kaW9fZGV2OworCXN0cnVjdCBtbWE4NDUyX2RhdGEgKmRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCXU4IGJ1ZmZlclsxNl07IC8qIDMgMTYtYml0IGNoYW5uZWxzICsgcGFkZGluZyArIHRzICovCisJaW50IHJldDsKKworCXJldCA9IG1tYTg0NTJfcmVhZChkYXRhLCAoX19iZTE2ICopIGJ1ZmZlcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZG9uZTsKKworCWlpb19wdXNoX3RvX2J1ZmZlcnNfd2l0aF90aW1lc3RhbXAoaW5kaW9fZGV2LCBidWZmZXIsCisJCWlpb19nZXRfdGltZV9ucygpKTsKKworZG9uZToKKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2RlZmluZSBNTUE4NDUyX0NIQU5ORUwoYXhpcywgaWR4KSB7IFwKKwkudHlwZSA9IElJT19BQ0NFTCwgXAorCS5tb2RpZmllZCA9IDEsIFwKKwkuY2hhbm5lbDIgPSBJSU9fTU9EXyMjYXhpcywgXAorCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpIHwgXAorCQlCSVQoSUlPX0NIQU5fSU5GT19DQUxJQkJJQVMpLCBcCisJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSkgfCBcCisJCUJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwgXAorCS5zY2FuX2luZGV4ID0gaWR4LCBcCisJLnNjYW5fdHlwZSA9IHsgXAorCQkuc2lnbiA9ICdzJywgXAorCQkucmVhbGJpdHMgPSAxMiwgXAorCQkuc3RvcmFnZWJpdHMgPSAxNiwgXAorCQkuc2hpZnQgPSA0LCBcCisJCS5lbmRpYW5uZXNzID0gSUlPX0JFLCBcCisJfSwgXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgbW1hODQ1Ml9jaGFubmVsc1tdID0geworCU1NQTg0NTJfQ0hBTk5FTChYLCAwKSwKKwlNTUE4NDUyX0NIQU5ORUwoWSwgMSksCisJTU1BODQ1Ml9DSEFOTkVMKFosIDIpLAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDMpLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1tYTg0NTJfYXR0cmlidXRlc1tdID0geworCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW5fYWNjZWxfc2NhbGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbW1hODQ1Ml9ncm91cCA9IHsKKwkuYXR0cnMgPSBtbWE4NDUyX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIG1tYTg0NTJfaW5mbyA9IHsKKwkuYXR0cnMgPSAmbW1hODQ1Ml9ncm91cCwKKwkucmVhZF9yYXcgPSAmbW1hODQ1Ml9yZWFkX3JhdywKKwkud3JpdGVfcmF3ID0gJm1tYTg0NTJfd3JpdGVfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtbWE4NDUyX3NjYW5fbWFza3NbXSA9IHsweDcsIDB9OworCitzdGF0aWMgaW50IG1tYTg0NTJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1tYTg0NTJfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNTUE4NDUyX1dIT19BTV9JKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICE9IE1NQTg0NTJfREVWSUNFX0lEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqZGF0YSkpOworCWlmICghaW5kaW9fZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGluZGlvX2Rldik7CisJaW5kaW9fZGV2LT5pbmZvID0gJm1tYTg0NTJfaW5mbzsKKwlpbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBtbWE4NDUyX2NoYW5uZWxzOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtbWE4NDUyX2NoYW5uZWxzKTsKKwlpbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzID0gbW1hODQ1Ml9zY2FuX21hc2tzOworCisJZGF0YS0+Y3RybF9yZWcxID0gTU1BODQ1Ml9DVFJMX0FDVElWRSB8CisJCShNTUE4NDUyX0NUUkxfRFJfREVGQVVMVCA8PCBNTUE4NDUyX0NUUkxfRFJfU0hJRlQpOworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNTUE4NDUyX0NUUkxfUkVHMSwKKwkJZGF0YS0+Y3RybF9yZWcxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRhdGEtPmRhdGFfY2ZnID0gTU1BODQ1Ml9EQVRBX0NGR19GU18yRzsKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTU1BODQ1Ml9EQVRBX0NGRywKKwkJZGF0YS0+ZGF0YV9jZmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaWlvX3RyaWdnZXJlZF9idWZmZXJfc2V0dXAoaW5kaW9fZGV2LCBOVUxMLAorCQltbWE4NDUyX3RyaWdnZXJfaGFuZGxlciwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYnVmZmVyX2NsZWFudXA7CisJcmV0dXJuIDA7CisKK2J1ZmZlcl9jbGVhbnVwOgorCWlpb190cmlnZ2VyZWRfYnVmZmVyX2NsZWFudXAoaW5kaW9fZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1tYTg0NTJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJaWlvX3RyaWdnZXJlZF9idWZmZXJfY2xlYW51cChpbmRpb19kZXYpOworCW1tYTg0NTJfc3RhbmRieShpaW9fcHJpdihpbmRpb19kZXYpKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG1tYTg0NTJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG1tYTg0NTJfc3RhbmRieShpaW9fcHJpdihpMmNfZ2V0X2NsaWVudGRhdGEoCisJCXRvX2kyY19jbGllbnQoZGV2KSkpKTsKK30KKworc3RhdGljIGludCBtbWE4NDUyX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG1tYTg0NTJfYWN0aXZlKGlpb19wcml2KGkyY19nZXRfY2xpZW50ZGF0YSgKKwkJdG9faTJjX2NsaWVudChkZXYpKSkpOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobW1hODQ1Ml9wbV9vcHMsIG1tYTg0NTJfc3VzcGVuZCwgbW1hODQ1Ml9yZXN1bWUpOworI2RlZmluZSBNTUE4NDUyX1BNX09QUyAoJm1tYTg0NTJfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgTU1BODQ1Ml9QTV9PUFMgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtbWE4NDUyX2lkW10gPSB7CisJeyAibW1hODQ1MiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbW1hODQ1Ml9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtbWE4NDUyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJtbWE4NDUyIiwKKwkJLnBtCT0gTU1BODQ1Ml9QTV9PUFMsCisJfSwKKwkucHJvYmUgPSBtbWE4NDUyX3Byb2JlLAorCS5yZW1vdmUgPSBtbWE4NDUyX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBtbWE4NDUyX2lkLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKG1tYTg0NTJfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUGV0ZXIgTWVlcndhbGQgPHBtZWVyd0BwbWVlcncubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTU1BODQ1MiBhY2NlbGVyb21ldGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWNjZWwvc3RfYWNjZWxfY29yZS5jIGIvZHJpdmVycy9paW8vYWNjZWwvc3RfYWNjZWxfY29yZS5jCmluZGV4IDM4Y2FlZGMuLmEyYWJmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FjY2VsL3N0X2FjY2VsX2NvcmUuYworKysgYi9kcml2ZXJzL2lpby9hY2NlbC9zdF9hY2NlbF9jb3JlLmMKQEAgLTQ1OSw2ICs0NTksOCBAQAogCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAlpbmRpb19kZXYtPmluZm8gPSAmYWNjZWxfaW5mbzsKIAorCXN0X3NlbnNvcnNfcG93ZXJfZW5hYmxlKGluZGlvX2Rldik7CisKIAllcnIgPSBzdF9zZW5zb3JzX2NoZWNrX2RldmljZV9zdXBwb3J0KGluZGlvX2RldiwKIAkJCQlBUlJBWV9TSVpFKHN0X2FjY2VsX3NlbnNvcnMpLCBzdF9hY2NlbF9zZW5zb3JzKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTQ5Niw2ICs0OTgsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gc3RfYWNjZWxfZGV2aWNlX3JlZ2lzdGVyX2Vycm9yOwogCisJZGV2X2luZm8oJmluZGlvX2Rldi0+ZGV2LCAicmVnaXN0ZXJlZCBhY2NlbGVyb21ldGVyICVzXG4iLAorCQkgaW5kaW9fZGV2LT5uYW1lKTsKKwogCXJldHVybiAwOwogCiBzdF9hY2NlbF9kZXZpY2VfcmVnaXN0ZXJfZXJyb3I6CkBAIC01MTIsNiArNTE3LDggQEAKIHsKIAlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKmFkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAorCXN0X3NlbnNvcnNfcG93ZXJfZGlzYWJsZShpbmRpb19kZXYpOworCiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKGFkYXRhLT5nZXRfaXJxX2RhdGFfcmVhZHkoaW5kaW9fZGV2KSA+IDApCiAJCXN0X3NlbnNvcnNfZGVhbGxvY2F0ZV90cmlnZ2VyKGluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZyBiL2RyaXZlcnMvaWlvL2FkYy9LY29uZmlnCmluZGV4IDI0YzI4ZTMuLmE4MGQyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FkYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9LY29uZmlnCkBAIC05Niw5ICs5NiwyMSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWQ3OTIzLgogCitjb25maWcgQUQ3OTlYCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFENzk5eCBBREMgZHJpdmVyIgorCWRlcGVuZHMgb24gSTJDCisJc2VsZWN0IElJT19CVUZGRVIKKwlzZWxlY3QgSUlPX1RSSUdHRVJFRF9CVUZGRVIKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXM6CisJICBhZDc5OTEsIGFkNzk5NSwgYWQ3OTk5LCBhZDc5OTIsIGFkNzk5MywgYWQ3OTk0LCBhZDc5OTcsIGFkNzk5OAorCSAgaTJjIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMgKEFEQykuIFByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MKKwkgIHZpYSBzeXNmcy4KKwogY29uZmlnIEFUOTFfQURDCiAJdHJpc3RhdGUgIkF0bWVsIEFUOTEgQURDIgogCWRlcGVuZHMgb24gQVJDSF9BVDkxCisJZGVwZW5kcyBvbiBJTlBVVAogCXNlbGVjdCBJSU9fQlVGRkVSCiAJc2VsZWN0IElJT19UUklHR0VSRURfQlVGRkVSCiAJc2VsZWN0IFNZU0ZTCkBAIC0xMDcsNyArMTE5LDcgQEAKIAogY29uZmlnIEVYWU5PU19BREMKIAl0cmlzdGF0ZSAiRXh5bm9zIEFEQyBkcml2ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUyB8fCAoT0YgJiYgQ09NUElMRV9URVNUKQogCWhlbHAKIAkgIENvcmUgc3VwcG9ydCBmb3IgdGhlIEFEQyBibG9jayBmb3VuZCBpbiB0aGUgU2Ftc3VuZyBFWFlOT1Mgc2VyaWVzCiAJICBvZiBTb0NzIGZvciBkcml2ZXJzIHN1Y2ggYXMgdGhlIHRvdWNoc2NyZWVuIGFuZCBod21vbiB0byB1c2UgdG8gc2hhcmUKQEAgLTE0NiwxMSArMTU4LDEyIEBACiAJICBjYWxsZWQgbWNwMzIweC4KIAogY29uZmlnIE1DUDM0MjIKLQl0cmlzdGF0ZSAiTWljcm9jaGlwIFRlY2hub2xvZ3kgTUNQMzQyMi8zLzQgZHJpdmVyIgorCXRyaXN0YXRlICJNaWNyb2NoaXAgVGVjaG5vbG9neSBNQ1AzNDIyLzMvNC82LzcvOCBkcml2ZXIiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTWljcm9jaGlwIFRlY2hub2xvZ3kncyBNQ1AzNDIyLAotCSAgTUNQMzQyMyBvciBNQ1AzNDI0IGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMuCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTWljcm9jaGlwIFRlY2hub2xvZ3kncworCSAgTUNQMzQyMiwgTUNQMzQyMywgTUNQMzQyNCwgTUNQMzQyNiwgTUNQMzQyNyBvciBNQ1AzNDI4CisJICBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIG1jcDM0MjIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUKaW5kZXggYWIzNDZkOC4uOWQ2MGYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogb2JqLSQoQ09ORklHX0FENzc5MSkgKz0gYWQ3NzkxLm8KIG9iai0kKENPTkZJR19BRDc3OTMpICs9IGFkNzc5My5vCiBvYmotJChDT05GSUdfQUQ3ODg3KSArPSBhZDc4ODcubworb2JqLSQoQ09ORklHX0FENzk5WCkgKz0gYWQ3OTl4Lm8KIG9iai0kKENPTkZJR19BVDkxX0FEQykgKz0gYXQ5MV9hZGMubwogb2JqLSQoQ09ORklHX0VYWU5PU19BREMpICs9IGV4eW5vc19hZGMubwogb2JqLSQoQ09ORklHX0xQODc4OF9BREMpICs9IGxwODc4OF9hZGMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYyBiL2RyaXZlcnMvaWlvL2FkYy9hZDc5OXguYwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCnJlbmFtZSB0byBkcml2ZXJzL2lpby9hZGMvYWQ3OTl4LmMKaW5kZXggOTc5ZWM3Ny4uMzliNGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYworKysgYi9kcml2ZXJzL2lpby9hZGMvYWQ3OTl4LmMKQEAgLTM3LDggKzM3LDE0NCBAQAogI2luY2x1ZGUgPGxpbnV4L2lpby9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lpby9ldmVudHMuaD4KICNpbmNsdWRlIDxsaW51eC9paW8vYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJfY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vdHJpZ2dlcmVkX2J1ZmZlci5oPgogCi0jaW5jbHVkZSAiYWQ3OTl4LmgiCisjZGVmaW5lIEFENzk5WF9DSEFOTkVMX1NISUZUCQkJNAorI2RlZmluZSBBRDc5OVhfU1RPUkFHRUJJVFMJCQkxNgorLyoKKyAqIEFENzk5MSwgQUQ3OTk1IGFuZCBBRDc5OTkgZGVmaW5lcworICovCisKKyNkZWZpbmUgQUQ3OTkxX1JFRl9TRUwJCQkJMHgwOAorI2RlZmluZSBBRDc5OTFfRkxUUgkJCQkweDA0CisjZGVmaW5lIEFENzk5MV9CSVRfVFJJQUxfREVMQVkJCQkweDAyCisjZGVmaW5lIEFENzk5MV9TQU1QTEVfREVMQVkJCQkweDAxCisKKy8qCisgKiBBRDc5OTIsIEFENzk5MywgQUQ3OTk0LCBBRDc5OTcgYW5kIEFENzk5OCBkZWZpbmVzCisgKi8KKworI2RlZmluZSBBRDc5OThfRkxUUgkJCQkweDA4CisjZGVmaW5lIEFENzk5OF9BTEVSVF9FTgkJCQkweDA0CisjZGVmaW5lIEFENzk5OF9CVVNZX0FMRVJUCQkJMHgwMgorI2RlZmluZSBBRDc5OThfQlVTWV9BTEVSVF9QT0wJCQkweDAxCisKKyNkZWZpbmUgQUQ3OTk4X0NPTlZfUkVTX1JFRwkJCTB4MAorI2RlZmluZSBBRDc5OThfQUxFUlRfU1RBVF9SRUcJCQkweDEKKyNkZWZpbmUgQUQ3OTk4X0NPTkZfUkVHCQkJCTB4MgorI2RlZmluZSBBRDc5OThfQ1lDTEVfVE1SX1JFRwkJCTB4MworCisjZGVmaW5lIEFENzk5OF9EQVRBTE9XX1JFRyh4KQkJCSgoeCkgKiAzICsgMHg0KQorI2RlZmluZSBBRDc5OThfREFUQUhJR0hfUkVHKHgpCQkJKCh4KSAqIDMgKyAweDUpCisjZGVmaW5lIEFENzk5OF9IWVNUX1JFRyh4KQkJCSgoeCkgKiAzICsgMHg2KQorCisjZGVmaW5lIEFENzk5OF9DWUNfTUFTSwkJCQkweDcKKyNkZWZpbmUgQUQ3OTk4X0NZQ19ESVMJCQkJMHgwCisjZGVmaW5lIEFENzk5OF9DWUNfVENPTkZfMzIJCQkweDEKKyNkZWZpbmUgQUQ3OTk4X0NZQ19UQ09ORl82NAkJCTB4MgorI2RlZmluZSBBRDc5OThfQ1lDX1RDT05GXzEyOAkJCTB4MworI2RlZmluZSBBRDc5OThfQ1lDX1RDT05GXzI1NgkJCTB4NAorI2RlZmluZSBBRDc5OThfQ1lDX1RDT05GXzUxMgkJCTB4NQorI2RlZmluZSBBRDc5OThfQ1lDX1RDT05GXzEwMjQJCQkweDYKKyNkZWZpbmUgQUQ3OTk4X0NZQ19UQ09ORl8yMDQ4CQkJMHg3CisKKyNkZWZpbmUgQUQ3OTk4X0FMRVJUX1NUQVRfQ0xFQVIJCQkweEZGCisKKy8qCisgKiBBRDc5OTcgYW5kIEFENzk5NyBkZWZpbmVzCisgKi8KKworI2RlZmluZSBBRDc5OTdfOF9SRUFEX1NJTkdMRQkJCTB4ODAKKyNkZWZpbmUgQUQ3OTk3XzhfUkVBRF9TRVFVRU5DRQkJCTB4NzAKKy8qIFRPRE86IG1vdmUgdGhpcyBpbnRvIGEgY29tbW9uIGhlYWRlciAqLworI2RlZmluZSBSRVNfTUFTSyhiaXRzKQkoKDEgPDwgKGJpdHMpKSAtIDEpCisKK2VudW0geworCWFkNzk5MSwKKwlhZDc5OTUsCisJYWQ3OTk5LAorCWFkNzk5MiwKKwlhZDc5OTMsCisJYWQ3OTk0LAorCWFkNzk5NywKKwlhZDc5OTgKK307CisKKy8qKgorICogc3RydWN0IGFkNzk5eF9jaGlwX2luZm8gLSBjaGlwIHNwZWNpZmljIGluZm9ybWF0aW9uCisgKiBAY2hhbm5lbDoJCWNoYW5uZWwgc3BlY2lmaWNhdGlvbgorICogQG51bV9jaGFubmVsczoJbnVtYmVyIG9mIGNoYW5uZWxzCisgKiBAbW9uaXRvcl9tb2RlOgl3aGV0aGVyIHRoZSBjaGlwIHN1cHBvcnRzIG1vbml0b3IgaW50ZXJydXB0cworICogQGRlZmF1bHRfY29uZmlnOglkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uCisgKiBAZXZlbnRfYXR0cnM6CXBvaW50ZXIgdG8gdGhlIG1vbml0b3IgZXZlbnQgYXR0cmlidXRlIGdyb3VwCisgKi8KK3N0cnVjdCBhZDc5OXhfY2hpcF9pbmZvIHsKKwlzdHJ1Y3QgaWlvX2NoYW5fc3BlYwkJY2hhbm5lbFs5XTsKKwlpbnQJCQkJbnVtX2NoYW5uZWxzOworCXUxNgkJCQlkZWZhdWx0X2NvbmZpZzsKKwljb25zdCBzdHJ1Y3QgaWlvX2luZm8JCSppbmZvOworfTsKKworc3RydWN0IGFkNzk5eF9zdGF0ZSB7CisJc3RydWN0IGkyY19jbGllbnQJCSpjbGllbnQ7CisJY29uc3Qgc3RydWN0IGFkNzk5eF9jaGlwX2luZm8JKmNoaXBfaW5mbzsKKwlzdHJ1Y3QgcmVndWxhdG9yCQkqcmVnOworCXN0cnVjdCByZWd1bGF0b3IJCSp2cmVmOworCXVuc2lnbmVkCQkJaWQ7CisJdTE2CQkJCWNvbmZpZzsKKworCXU4CQkJCSpyeF9idWY7CisJdW5zaWduZWQgaW50CQkJdHJhbnNmZXJfc2l6ZTsKK307CisKKy8qKgorICogYWQ3OTl4X3RyaWdnZXJfaGFuZGxlcigpIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgorICoKKyAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBvcHRpb24gaW4gdGhpcyBkcml2ZXIgdG8gZGlzYWJsZSB0aGUgc2F2aW5nIG9mCisgKiB0aW1lc3RhbXBzIHdpdGhpbiB0aGUgcmluZy4KKyAqKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhZDc5OXhfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnApCit7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPmluZGlvX2RldjsKKwlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IGJfc2VudDsKKwl1OCBjbWQ7CisKKwlzd2l0Y2ggKHN0LT5pZCkgeworCWNhc2UgYWQ3OTkxOgorCWNhc2UgYWQ3OTk1OgorCWNhc2UgYWQ3OTk5OgorCQljbWQgPSBzdC0+Y29uZmlnIHwKKwkJCSgqaW5kaW9fZGV2LT5hY3RpdmVfc2Nhbl9tYXNrIDw8IEFENzk5WF9DSEFOTkVMX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBhZDc5OTI6CisJY2FzZSBhZDc5OTM6CisJY2FzZSBhZDc5OTQ6CisJCWNtZCA9ICgqaW5kaW9fZGV2LT5hY3RpdmVfc2Nhbl9tYXNrIDw8IEFENzk5WF9DSEFOTkVMX1NISUZUKSB8CisJCQlBRDc5OThfQ09OVl9SRVNfUkVHOworCQlicmVhazsKKwljYXNlIGFkNzk5NzoKKwljYXNlIGFkNzk5ODoKKwkJY21kID0gQUQ3OTk3XzhfUkVBRF9TRVFVRU5DRSB8IEFENzk5OF9DT05WX1JFU19SRUc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNtZCA9IDA7CisJfQorCisJYl9zZW50ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoc3QtPmNsaWVudCwKKwkJCWNtZCwgc3QtPnRyYW5zZmVyX3NpemUsIHN0LT5yeF9idWYpOworCWlmIChiX3NlbnQgPCAwKQorCQlnb3RvIG91dDsKKworCWlpb19wdXNoX3RvX2J1ZmZlcnNfd2l0aF90aW1lc3RhbXAoaW5kaW9fZGV2LCBzdC0+cnhfYnVmLAorCQkJaWlvX2dldF90aW1lX25zKCkpOworb3V0OgorCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKGluZGlvX2Rldi0+dHJpZyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CiAKIC8qCiAgKiBhZDc5OXggcmVnaXN0ZXIgYWNjZXNzIGJ5IEkyQwpAQCAtNTc4LDkgKzcxNCwxMCBAQAogCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBzdC0+Y2hpcF9pbmZvLT5jaGFubmVsOwogCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gc3QtPmNoaXBfaW5mby0+bnVtX2NoYW5uZWxzOwogCi0JcmV0ID0gYWQ3OTl4X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoaW5kaW9fZGV2KTsKKwlyZXQgPSBpaW9fdHJpZ2dlcmVkX2J1ZmZlcl9zZXR1cChpbmRpb19kZXYsIE5VTEwsCisJCSZhZDc5OXhfdHJpZ2dlcl9oYW5kbGVyLCBOVUxMKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOworCQlnb3RvIGVycm9yX2Rpc2FibGVfdnJlZjsKIAogCWlmIChjbGllbnQtPmlycSA+IDApIHsKIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmY2xpZW50LT5kZXYsCkBAIC02MDEsMTIgKzczOCwxMSBAQAogCXJldHVybiAwOwogCiBlcnJvcl9jbGVhbnVwX3Jpbmc6Ci0JYWQ3OTl4X3JpbmdfY2xlYW51cChpbmRpb19kZXYpOworCWlpb190cmlnZ2VyZWRfYnVmZmVyX2NsZWFudXAoaW5kaW9fZGV2KTsKK2Vycm9yX2Rpc2FibGVfdnJlZjoKKwlyZWd1bGF0b3JfZGlzYWJsZShzdC0+dnJlZik7CiBlcnJvcl9kaXNhYmxlX3JlZzoKLQlpZiAoIUlTX0VSUihzdC0+dnJlZikpCi0JCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT52cmVmKTsKLQlpZiAoIUlTX0VSUihzdC0+cmVnKSkKLQkJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CisJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjE4LDExICs3NTQsOSBAQAogCiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAKLQlhZDc5OXhfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7Ci0JaWYgKCFJU19FUlIoc3QtPnZyZWYpKQotCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+dnJlZik7Ci0JaWYgKCFJU19FUlIoc3QtPnJlZykpCi0JCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWcpOworCWlpb190cmlnZ2VyZWRfYnVmZmVyX2NsZWFudXAoaW5kaW9fZGV2KTsKKwlyZWd1bGF0b3JfZGlzYWJsZShzdC0+dnJlZik7CisJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CiAJa2ZyZWUoc3QtPnJ4X2J1Zik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9hdDkxX2FkYy5jIGIvZHJpdmVycy9paW8vYWRjL2F0OTFfYWRjLmMKaW5kZXggODk3NzdlZC4uM2I1YmFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL2F0OTFfYWRjLmMKKysrIGIvZHJpdmVycy9paW8vYWRjL2F0OTFfYWRjLmMKQEAgLTMxLDcgKzMxLDEwOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lpby90cmlnZ2VyX2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJlZF9idWZmZXIuaD4KIAotI2luY2x1ZGUgPG1hY2gvYXQ5MV9hZGMuaD4KKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBBVDkxX0FEQ19DUgkJMHgwMAkJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9BRENfU1dSU1QJCSgxIDw8IDApCS8qIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lCQlBVDkxX0FEQ19TVEFSVAkJKDEgPDwgMSkJLyogU3RhcnQgQ29udmVyc2lvbiAqLworCisjZGVmaW5lIEFUOTFfQURDX01SCQkweDA0CQkvKiBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0FEQ19UU0FNT0QJCSgzIDw8IDApCS8qIEFEQyBtb2RlICovCisjZGVmaW5lCQlBVDkxX0FEQ19UU0FNT0RfQURDX09OTFlfTU9ERQkJKDAgPDwgMCkJLyogQURDIE1vZGUgKi8KKyNkZWZpbmUJCUFUOTFfQURDX1RTQU1PRF9UU19PTkxZX01PREUJCSgxIDw8IDApCS8qIFRvdWNoIFNjcmVlbiBPbmx5IE1vZGUgKi8KKyNkZWZpbmUJCUFUOTFfQURDX1RSR0VOCQkoMSA8PCAwKQkvKiBUcmlnZ2VyIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9BRENfVFJHU0VMCQkoNyA8PCAxKQkvKiBUcmlnZ2VyIFNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFfQURDX1RSR1NFTF9UQzAJCSgwIDw8IDEpCisjZGVmaW5lCQkJQVQ5MV9BRENfVFJHU0VMX1RDMQkJKDEgPDwgMSkKKyNkZWZpbmUJCQlBVDkxX0FEQ19UUkdTRUxfVEMyCQkoMiA8PCAxKQorI2RlZmluZQkJCUFUOTFfQURDX1RSR1NFTF9FWFRFUk5BTAkoNiA8PCAxKQorI2RlZmluZQkJQVQ5MV9BRENfTE9XUkVTCQkoMSA8PCA0KQkvKiBMb3cgUmVzb2x1dGlvbiAqLworI2RlZmluZQkJQVQ5MV9BRENfU0xFRVAJCSgxIDw8IDUpCS8qIFNsZWVwIE1vZGUgKi8KKyNkZWZpbmUJCUFUOTFfQURDX1BFTkRFVAkJKDEgPDwgNikJLyogUGVuIGNvbnRhY3QgZGV0ZWN0aW9uIGVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9BRENfUFJFU0NBTF85MjYwCSgweDNmIDw8IDgpCS8qIFByZXNjYWxhciBSYXRlIFNlbGVjdGlvbiAqLworI2RlZmluZQkJQVQ5MV9BRENfUFJFU0NBTF85RzQ1CSgweGZmIDw8IDgpCisjZGVmaW5lCQkJQVQ5MV9BRENfUFJFU0NBTF8oeCkJKCh4KSA8PCA4KQorI2RlZmluZQkJQVQ5MV9BRENfU1RBUlRVUF85MjYwCSgweDFmIDw8IDE2KQkvKiBTdGFydHVwIFVwIFRpbWUgKi8KKyNkZWZpbmUJCUFUOTFfQURDX1NUQVJUVVBfOUc0NQkoMHg3ZiA8PCAxNikKKyNkZWZpbmUJCUFUOTFfQURDX1NUQVJUVVBfOVg1CSgweGYgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9BRENfU1RBUlRVUF8oeCkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCUFUOTFfQURDX1NIVElNCQkoMHhmICA8PCAyNCkJLyogU2FtcGxlICYgSG9sZCBUaW1lICovCisjZGVmaW5lCQkJQVQ5MV9BRENfU0hUSU1fKHgpCSgoeCkgPDwgMjQpCisjZGVmaW5lCQlBVDkxX0FEQ19QRU5EQkMJCSgweDBmIDw8IDI4KQkvKiBQZW4gRGVib3VuY2UgdGltZSAqLworI2RlZmluZQkJCUFUOTFfQURDX1BFTkRCQ18oeCkJKCh4KSA8PCAyOCkKKworI2RlZmluZSBBVDkxX0FEQ19UU1IJCTB4MEMKKyNkZWZpbmUJCUFUOTFfQURDX1RTUl9TSFRJTQkoMHhmICA8PCAyNCkJLyogU2FtcGxlICYgSG9sZCBUaW1lICovCisjZGVmaW5lCQkJQVQ5MV9BRENfVFNSX1NIVElNXyh4KQkoKHgpIDw8IDI0KQorCisjZGVmaW5lIEFUOTFfQURDX0NIRVIJCTB4MTAJCS8qIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQURDX0NIRFIJCTB4MTQJCS8qIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FEQ19DSFNSCQkweDE4CQkvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9BRENfQ0gobikJCSgxIDw8IChuKSkJLyogQ2hhbm5lbCBOdW1iZXIgKi8KKworI2RlZmluZSBBVDkxX0FEQ19TUgkJMHgxQwkJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0FEQ19FT0MobikJCSgxIDw8IChuKSkJLyogRW5kIG9mIENvbnZlcnNpb24gb24gQ2hhbm5lbCBOICovCisjZGVmaW5lCQlBVDkxX0FEQ19PVlJFKG4pCSgxIDw8ICgobikgKyA4KSkvKiBPdmVycnVuIEVycm9yIG9uIENoYW5uZWwgTiAqLworI2RlZmluZQkJQVQ5MV9BRENfRFJEWQkJKDEgPDwgMTYpCS8qIERhdGEgUmVhZHkgKi8KKyNkZWZpbmUJCUFUOTFfQURDX0dPVlJFCQkoMSA8PCAxNykJLyogR2VuZXJhbCBPdmVycnVuIEVycm9yICovCisjZGVmaW5lCQlBVDkxX0FEQ19FTkRSWAkJKDEgPDwgMTgpCS8qIEVuZCBvZiBSWCBCdWZmZXIgKi8KKyNkZWZpbmUJCUFUOTFfQURDX1JYRlVGRgkJKDEgPDwgMTkpCS8qIFJYIEJ1ZmZlciBGdWxsICovCisKKyNkZWZpbmUgQVQ5MV9BRENfU1JfOVg1CQkweDMwCQkvKiBTdGF0dXMgUmVnaXN0ZXIgZm9yIDl4NSAqLworI2RlZmluZQkJQVQ5MV9BRENfU1JfRFJEWV85WDUJKDEgPDwgMjQpCS8qIERhdGEgUmVhZHkgKi8KKworI2RlZmluZSBBVDkxX0FEQ19MQ0RSCQkweDIwCQkvKiBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0FEQ19MREFUQQkJKDB4M2ZmKQorCisjZGVmaW5lIEFUOTFfQURDX0lFUgkJMHgyNAkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0FEQ19JRFIJCTB4MjgJCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfQURDX0lNUgkJMHgyQwkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFSTF9BRENfSUVSX1BFTgkoMSA8PCAyMCkKKyNkZWZpbmUJCUFUOTFSTF9BRENfSUVSX05PUEVOCSgxIDw8IDIxKQorI2RlZmluZQkJQVQ5MV9BRENfSUVSX1BFTgkoMSA8PCAyOSkKKyNkZWZpbmUJCUFUOTFfQURDX0lFUl9OT1BFTgkoMSA8PCAzMCkKKyNkZWZpbmUJCUFUOTFfQURDX0lFUl9YUkRZCSgxIDw8IDIwKQorI2RlZmluZQkJQVQ5MV9BRENfSUVSX1lSRFkJKDEgPDwgMjEpCisjZGVmaW5lCQlBVDkxX0FEQ19JRVJfUFJEWQkoMSA8PCAyMikKKyNkZWZpbmUJCUFUOTFfQURDX0lTUl9QRU5TCSgxIDw8IDMxKQorCisjZGVmaW5lIEFUOTFfQURDX0NIUihuKQkJKDB4MzAgKyAoKG4pICogNCkpCS8qIENoYW5uZWwgRGF0YSBSZWdpc3RlciBOICovCisjZGVmaW5lCQlBVDkxX0FEQ19EQVRBCQkoMHgzZmYpCisKKyNkZWZpbmUgQVQ5MV9BRENfQ0RSMF85WDUJKDB4NTApCQkJLyogQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgZm9yIDlYNSAqLworCisjZGVmaW5lIEFUOTFfQURDX0FDUgkJMHg5NAkvKiBBbmFsb2cgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9BRENfQUNSX1BFTkRFVFNFTlMJKDB4MyA8PCAwKQkvKiBwdWxsLXVwIHJlc2lzdG9yICovCisKKyNkZWZpbmUgQVQ5MV9BRENfVFNNUgkJMHhCMAorI2RlZmluZQkJQVQ5MV9BRENfVFNNUl9UU01PREUJKDMgPDwgMCkJLyogVG91Y2ggU2NyZWVuIE1vZGUgKi8KKyNkZWZpbmUJCQlBVDkxX0FEQ19UU01SX1RTTU9ERV9OT05FCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfQURDX1RTTVJfVFNNT0RFXzRXSVJFX05PX1BSRVNTCSgxIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9BRENfVFNNUl9UU01PREVfNFdJUkVfUFJFU1MJKDIgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0FEQ19UU01SX1RTTU9ERV81V0lSRQkJKDMgPDwgMCkKKyNkZWZpbmUJCUFUOTFfQURDX1RTTVJfVFNBVgkoMyA8PCA0KQkvKiBBdmVyYWdlcyBzYW1wbGVzICovCisjZGVmaW5lCQkJQVQ5MV9BRENfVFNNUl9UU0FWXyh4KQkJKCh4KSA8PCA0KQorI2RlZmluZQkJQVQ5MV9BRENfVFNNUl9TQ1RJTQkoMHgwZiA8PCAxNikJLyogU3dpdGNoIGNsb3N1cmUgdGltZSAqLworI2RlZmluZQkJQVQ5MV9BRENfVFNNUl9QRU5EQkMJKDB4MGYgPDwgMjgpCS8qIFBlbiBEZWJvdW5jZSB0aW1lICovCisjZGVmaW5lCQkJQVQ5MV9BRENfVFNNUl9QRU5EQkNfKHgpCSgoeCkgPDwgMjgpCisjZGVmaW5lCQlBVDkxX0FEQ19UU01SX05PVFNETUEJKDEgPDwgMjIpCS8qIE5vIFRvdWNoc2NyZWVuIERNQSAqLworI2RlZmluZQkJQVQ5MV9BRENfVFNNUl9QRU5ERVRfRElTCSgwIDw8IDI0KQkvKiBQZW4gY29udGFjdCBkZXRlY3Rpb24gZGlzYWJsZSAqLworI2RlZmluZQkJQVQ5MV9BRENfVFNNUl9QRU5ERVRfRU5BCSgxIDw8IDI0KQkvKiBQZW4gY29udGFjdCBkZXRlY3Rpb24gZW5hYmxlICovCisKKyNkZWZpbmUgQVQ5MV9BRENfVFNYUE9TUgkweEI0CisjZGVmaW5lIEFUOTFfQURDX1RTWVBPU1IJMHhCOAorI2RlZmluZSBBVDkxX0FEQ19UU1BSRVNTUgkweEJDCisKKyNkZWZpbmUgQVQ5MV9BRENfVFJHUl85MjYwCUFUOTFfQURDX01SCisjZGVmaW5lIEFUOTFfQURDX1RSR1JfOUc0NQkweDA4CisjZGVmaW5lIEFUOTFfQURDX1RSR1JfOVg1CTB4QzAKKworLyogVHJpZ2dlciBSZWdpc3RlciBiaXQgZmllbGQgKi8KKyNkZWZpbmUJCUFUOTFfQURDX1RSR1JfVFJHUEVSCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9BRENfVFJHUl9UUkdQRVJfKHgpCSgoeCkgPDwgMTYpCisjZGVmaW5lCQlBVDkxX0FEQ19UUkdSX1RSR01PRAkoMHg3IDw8IDApCisjZGVmaW5lCQkJQVQ5MV9BRENfVFJHUl9OT05FCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfQURDX1RSR1JfTU9EX1BFUklPRF9UUklHCSg1IDw8IDApCiAKICNkZWZpbmUgQVQ5MV9BRENfQ0hBTihzdCwgY2gpIFwKIAkoc3QtPnJlZ2lzdGVycy0+Y2hhbm5lbF9iYXNlICsgKGNoICogNCkpCkBAIC00Niw2ICsxNDcsMjkgQEAKICNkZWZpbmUgVE9VQ0hfU0FNUExFX1BFUklPRF9VUwkJMjAwMAkvKiAybXMgKi8KICNkZWZpbmUgVE9VQ0hfUEVOX0RFVEVDVF9ERUJPVU5DRV9VUwkyMDAKIAorI2RlZmluZSBNQVhfUkxQT1NfQklUUyAgICAgICAgIDEwCisjZGVmaW5lIFRPVUNIX1NBTVBMRV9QRVJJT0RfVVNfUkwgICAgICAxMDAwMCAgIC8qIDEwbXMsIHRoZSBTb0MgY2FuJ3Qga2VlcCB1cCB3aXRoIDJtcyAqLworI2RlZmluZSBUT1VDSF9TSFRJTSAgICAgICAgICAgICAgICAgICAgMHhhCisKKy8qKgorICogc3RydWN0IGF0OTFfYWRjX3JlZ19kZXNjIC0gVmFyaW91cyBpbmZvcm1hdGlvbnMgcmVsYXRpdmUgdG8gcmVnaXN0ZXJzCisgKiBAY2hhbm5lbF9iYXNlOglCYXNlIG9mZnNldCBmb3IgdGhlIGNoYW5uZWwgZGF0YSByZWdpc3RlcnMKKyAqIEBkcmR5X21hc2s6CQlNYXNrIG9mIHRoZSBEUkRZIGZpZWxkIGluIHRoZSByZWxldmFudCByZWdpc3RlcnMKKwkJCShJbnRlcnJ1cHRpb25zIHJlZ2lzdGVycyBtb3N0bHkpCisgKiBAc3RhdHVzX3JlZ2lzdGVyOglPZmZzZXQgb2YgdGhlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAqIEB0cmlnZ2VyX3JlZ2lzdGVyOglPZmZzZXQgb2YgdGhlIFRyaWdnZXIgc2V0dXAgcmVnaXN0ZXIKKyAqIEBtcl9wcmVzY2FsX21hc2s6CU1hc2sgb2YgdGhlIFBSRVNDQUwgZmllbGQgaW4gdGhlIGFkYyBNUiByZWdpc3RlcgorICogQG1yX3N0YXJ0dXBfbWFzazoJTWFzayBvZiB0aGUgU1RBUlRVUCBmaWVsZCBpbiB0aGUgYWRjIE1SIHJlZ2lzdGVyCisgKi8KK3N0cnVjdCBhdDkxX2FkY19yZWdfZGVzYyB7CisJdTgJY2hhbm5lbF9iYXNlOworCXUzMglkcmR5X21hc2s7CisJdTgJc3RhdHVzX3JlZ2lzdGVyOworCXU4CXRyaWdnZXJfcmVnaXN0ZXI7CisJdTMyCW1yX3ByZXNjYWxfbWFzazsKKwl1MzIJbXJfc3RhcnR1cF9tYXNrOworfTsKKwogc3RydWN0IGF0OTFfYWRjX2NhcHMgewogCWJvb2wJaGFzX3RzOwkJLyogU3VwcG9ydCB0b3VjaCBzY3JlZW4gKi8KIAlib29sCWhhc190c21yOwkvKiBvbmx5IGF0OTFzYW05eDUsIHNhbWE1ZDMgaGF2ZSBUU01SIHJlZyAqLwpAQCAtNjQsMTIgKzE4OCw2IEBACiAJc3RydWN0IGF0OTFfYWRjX3JlZ19kZXNjIHJlZ2lzdGVyczsKIH07CiAKLWVudW0gYXRtZWxfYWRjX3RzX3R5cGUgewotCUFUTUVMX0FEQ19UT1VDSFNDUkVFTl9OT05FID0gMCwKLQlBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUgPSA0LAotCUFUTUVMX0FEQ19UT1VDSFNDUkVFTl81V0lSRSA9IDUsCi19OwotCiBzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgewogCXN0cnVjdCBjbGsJCSphZGNfY2xrOwogCXUxNgkJCSpidWZmZXI7CkBAIC0xMTQsNiArMjMyLDExIEBACiAKIAl1MTYJCQl0c19zYW1wbGVfcGVyaW9kX3ZhbDsKIAl1MzIJCQl0c19wcmVzc3VyZV90aHJlc2hvbGQ7CisJdTE2CQkJdHNfcGVuZGJjOworCisJYm9vbAkJCXRzX2J1ZmZlcmVkbWVhc3VyZTsKKwl1MzIJCQl0c19wcmV2X2Fic3g7CisJdTMyCQkJdHNfcHJldl9hYnN5OwogfTsKIAogc3RhdGljIGlycXJldHVybl90IGF0OTFfYWRjX3RyaWdnZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwKQpAQCAtMjIwLDcgKzM0Myw3MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MV9hZGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnByaXZhdGUpCitzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MV9hZGNfcmxfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGlpb19kZXYgKmlkZXYgPSBwcml2YXRlOworCXN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpZGV2KTsKKwl1MzIgc3RhdHVzID0gYXQ5MV9hZGNfcmVhZGwoc3QsIHN0LT5yZWdpc3RlcnMtPnN0YXR1c19yZWdpc3Rlcik7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXN0YXR1cyAmPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5MV9BRENfSU1SKTsKKwlpZiAoc3RhdHVzICYgc3QtPnJlZ2lzdGVycy0+ZHJkeV9tYXNrKQorCQloYW5kbGVfYWRjX2VvY190cmlnZ2VyKGlycSwgaWRldik7CisKKwlpZiAoc3RhdHVzICYgQVQ5MVJMX0FEQ19JRVJfUEVOKSB7CisJCS8qIERpc2FibGluZyBwZW4gZGVib3VuY2UgaXMgcmVxdWlyZWQgdG8gZ2V0IGEgTk9QRU4gaXJxICovCisJCXJlZyA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX0FEQ19NUik7CisJCXJlZyAmPSB+QVQ5MV9BRENfUEVOREJDOworCQlhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfQURDX01SLCByZWcpOworCisJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfSURSLCBBVDkxUkxfQURDX0lFUl9QRU4pOworCQlhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfQURDX0lFUiwgQVQ5MVJMX0FEQ19JRVJfTk9QRU4KKwkJCQl8IEFUOTFfQURDX0VPQygzKSk7CisJCS8qIFNldCB1cCBwZXJpb2QgdHJpZ2dlciBmb3Igc2FtcGxpbmcgKi8KKwkJYXQ5MV9hZGNfd3JpdGVsKHN0LCBzdC0+cmVnaXN0ZXJzLT50cmlnZ2VyX3JlZ2lzdGVyLAorCQkJQVQ5MV9BRENfVFJHUl9NT0RfUEVSSU9EX1RSSUcgfAorCQkJQVQ5MV9BRENfVFJHUl9UUkdQRVJfKHN0LT50c19zYW1wbGVfcGVyaW9kX3ZhbCkpOworCX0gZWxzZSBpZiAoc3RhdHVzICYgQVQ5MVJMX0FEQ19JRVJfTk9QRU4pIHsKKwkJcmVnID0gYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfQURDX01SKTsKKwkJcmVnIHw9IEFUOTFfQURDX1BFTkRCQ18oc3QtPnRzX3BlbmRiYykgJiBBVDkxX0FEQ19QRU5EQkM7CisJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfTVIsIHJlZyk7CisJCWF0OTFfYWRjX3dyaXRlbChzdCwgc3QtPnJlZ2lzdGVycy0+dHJpZ2dlcl9yZWdpc3RlciwKKwkJCUFUOTFfQURDX1RSR1JfTk9ORSk7CisKKwkJYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19JRFIsIEFUOTFSTF9BRENfSUVSX05PUEVOCisJCQkJfCBBVDkxX0FEQ19FT0MoMykpOworCQlhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfQURDX0lFUiwgQVQ5MVJMX0FEQ19JRVJfUEVOKTsKKwkJc3QtPnRzX2J1ZmZlcmVkbWVhc3VyZSA9IGZhbHNlOworCQlpbnB1dF9yZXBvcnRfa2V5KHN0LT50c19pbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJaW5wdXRfc3luYyhzdC0+dHNfaW5wdXQpOworCX0gZWxzZSBpZiAoc3RhdHVzICYgQVQ5MV9BRENfRU9DKDMpKSB7CisJCS8qIENvbnZlcnNpb24gZmluaXNoZWQgKi8KKwkJaWYgKHN0LT50c19idWZmZXJlZG1lYXN1cmUpIHsKKwkJCS8qCisJCQkgKiBMYXN0IG1lYXN1cmVtZW50IGlzIGFsd2F5cyBkaXNjYXJkZWQsIHNpbmNlIGl0IGNhbgorCQkJICogYmUgZXJyb25lb3VzLgorCQkJICogQWx3YXlzIHJlcG9ydCBwcmV2aW91cyBtZWFzdXJlbWVudAorCQkJICovCisJCQlpbnB1dF9yZXBvcnRfYWJzKHN0LT50c19pbnB1dCwgQUJTX1gsIHN0LT50c19wcmV2X2Fic3gpOworCQkJaW5wdXRfcmVwb3J0X2FicyhzdC0+dHNfaW5wdXQsIEFCU19ZLCBzdC0+dHNfcHJldl9hYnN5KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoc3QtPnRzX2lucHV0LCBCVE5fVE9VQ0gsIDEpOworCQkJaW5wdXRfc3luYyhzdC0+dHNfaW5wdXQpOworCQl9IGVsc2UKKwkJCXN0LT50c19idWZmZXJlZG1lYXN1cmUgPSB0cnVlOworCisJCS8qIE5vdyBtYWtlIG5ldyBtZWFzdXJlbWVudCAqLworCQlzdC0+dHNfcHJldl9hYnN4ID0gYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfQURDX0NIQU4oc3QsIDMpKQorCQkJCSAgIDw8IE1BWF9STFBPU19CSVRTOworCQlzdC0+dHNfcHJldl9hYnN4IC89IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX0FEQ19DSEFOKHN0LCAyKSk7CisKKwkJc3QtPnRzX3ByZXZfYWJzeSA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX0FEQ19DSEFOKHN0LCAxKSkKKwkJCQkgICA8PCBNQVhfUkxQT1NfQklUUzsKKwkJc3QtPnRzX3ByZXZfYWJzeSAvPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5MV9BRENfQ0hBTihzdCwgMCkpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGF0OTFfYWRjXzl4NV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqaWRldiA9IHByaXZhdGU7CiAJc3RydWN0IGF0OTFfYWRjX3N0YXRlICpzdCA9IGlpb19wcml2KGlkZXYpOwpAQCAtNjUzLDYgKzg0MSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICghc3QtPmNhcHMtPmhhc190c21yKQorCQlyZXR1cm4gMDsKIAlwcm9wID0gMDsKIAlvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAiYXRtZWwsYWRjLXRzLXByZXNzdXJlLXRocmVzaG9sZCIsICZwcm9wKTsKIAlzdC0+dHNfcHJlc3N1cmVfdGhyZXNob2xkID0gcHJvcDsKQEAgLTc3Niw2ICs5NjYsNyBAQAogCXN0LT50cmlnZ2VyX251bWJlciA9IHBkYXRhLT50cmlnZ2VyX251bWJlcjsKIAlzdC0+dHJpZ2dlcl9saXN0ID0gcGRhdGEtPnRyaWdnZXJfbGlzdDsKIAlzdC0+cmVnaXN0ZXJzID0gJnN0LT5jYXBzLT5yZWdpc3RlcnM7CisJc3QtPnRvdWNoc2NyZWVuX3R5cGUgPSBwZGF0YS0+dG91Y2hzY3JlZW5fdHlwZTsKIAogCXJldHVybiAwOwogfQpAQCAtNzkwLDcgKzk4MSwxMCBAQAogewogCXN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19JRVIsIEFUOTFfQURDX0lFUl9QRU4pOworCWlmIChzdC0+Y2Fwcy0+aGFzX3RzbXIpCisJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfSUVSLCBBVDkxX0FEQ19JRVJfUEVOKTsKKwllbHNlCisJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfSUVSLCBBVDkxUkxfQURDX0lFUl9QRU4pOwogCXJldHVybiAwOwogfQogCkBAIC03OTgsNDQgKzk5Miw2MCBAQAogewogCXN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19JRFIsIEFUOTFfQURDX0lFUl9QRU4pOworCWlmIChzdC0+Y2Fwcy0+aGFzX3RzbXIpCisJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfSURSLCBBVDkxX0FEQ19JRVJfUEVOKTsKKwllbHNlCisJCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfSURSLCBBVDkxUkxfQURDX0lFUl9QRU4pOwogfQogCiBzdGF0aWMgaW50IGF0OTFfdHNfaHdfaW5pdChzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0LCB1MzIgYWRjX2Nsa19raHopCiB7Ci0JdTMyIHJlZyA9IDAsIHBlbmRiYzsKKwl1MzIgcmVnID0gMDsKIAlpbnQgaSA9IDA7CiAKKwkvKiBhIFBlbiBEZXRlY3QgRGVib3VuY2UgVGltZSBpcyBuZWNlc3NhcnkgZm9yIHRoZSBBREMgVG91Y2ggdG8gYXZvaWQKKwkgKiBwZW4gZGV0ZWN0IG5vaXNlLgorCSAqIFRoZSBmb3JtdWxhIGlzIDogUGVuIERldGVjdCBEZWJvdW5jZSBUaW1lID0gKDIgXiBwZW5kYmMpIC8gQURDQ2xvY2sKKwkgKi8KKwlzdC0+dHNfcGVuZGJjID0gcm91bmRfdXAoVE9VQ0hfUEVOX0RFVEVDVF9ERUJPVU5DRV9VUyAqIGFkY19jbGtfa2h6IC8KKwkJCQkgMTAwMCwgMSk7CisKKwl3aGlsZSAoc3QtPnRzX3BlbmRiYyA+PiArK2kpCisJCTsJLyogRW1wdHkhIEZpbmQgdGhlIHNoaWZ0IG9mZnNldCAqLworCWlmIChhYnMoc3QtPnRzX3BlbmRiYyAtICgxIDw8IGkpKSA8IGFicyhzdC0+dHNfcGVuZGJjIC0gKDEgPDwgKGkgLSAxKSkpKQorCQlzdC0+dHNfcGVuZGJjID0gaTsKKwllbHNlCisJCXN0LT50c19wZW5kYmMgPSBpIC0gMTsKKworCWlmICghc3QtPmNhcHMtPmhhc190c21yKSB7CisJCXJlZyA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX0FEQ19NUik7CisJCXJlZyB8PSBBVDkxX0FEQ19UU0FNT0RfVFNfT05MWV9NT0RFIHwgQVQ5MV9BRENfUEVOREVUOworCisJCXJlZyB8PSBBVDkxX0FEQ19QRU5EQkNfKHN0LT50c19wZW5kYmMpICYgQVQ5MV9BRENfUEVOREJDOworCQlhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfQURDX01SLCByZWcpOworCisJCXJlZyA9IEFUOTFfQURDX1RTUl9TSFRJTV8oVE9VQ0hfU0hUSU0pICYgQVQ5MV9BRENfVFNSX1NIVElNOworCQlhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfQURDX1RTUiwgcmVnKTsKKworCQlzdC0+dHNfc2FtcGxlX3BlcmlvZF92YWwgPSByb3VuZF91cCgoVE9VQ0hfU0FNUExFX1BFUklPRF9VU19STCAqCisJCQkJCQkgICAgYWRjX2Nsa19raHogLyAxMDAwKSAtIDEsIDEpOworCisJCXJldHVybiAwOworCX0KKwogCWlmIChzdC0+dG91Y2hzY3JlZW5fdHlwZSA9PSBBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUpCiAJCXJlZyA9IEFUOTFfQURDX1RTTVJfVFNNT0RFXzRXSVJFX1BSRVNTOwogCWVsc2UKIAkJcmVnID0gQVQ5MV9BRENfVFNNUl9UU01PREVfNVdJUkU7CiAKLQkvKiBhIFBlbiBEZXRlY3QgRGVib3VuY2UgVGltZSBpcyBuZWNlc3NhcnkgZm9yIHRoZSBBREMgVG91Y2ggdG8gYXZvaWQKLQkgKiBwZW4gZGV0ZWN0IG5vaXNlLgotCSAqIFRoZSBmb3JtdWxhIGlzIDogUGVuIERldGVjdCBEZWJvdW5jZSBUaW1lID0gKDIgXiBwZW5kYmMpIC8gQURDQ2xvY2sKLQkgKi8KLQlwZW5kYmMgPSByb3VuZF91cChUT1VDSF9QRU5fREVURUNUX0RFQk9VTkNFX1VTICogYWRjX2Nsa19raHogLyAxMDAwLCAxKTsKKwlyZWcgfD0gQVQ5MV9BRENfVFNNUl9UU0FWXyhzdC0+Y2Fwcy0+dHNfZmlsdGVyX2F2ZXJhZ2UpCisJICAgICAgICYgQVQ5MV9BRENfVFNNUl9UU0FWOworCXJlZyB8PSBBVDkxX0FEQ19UU01SX1BFTkRCQ18oc3QtPnRzX3BlbmRiYykgJiBBVDkxX0FEQ19UU01SX1BFTkRCQzsKKwlyZWcgfD0gQVQ5MV9BRENfVFNNUl9OT1RTRE1BOworCXJlZyB8PSBBVDkxX0FEQ19UU01SX1BFTkRFVF9FTkE7CisJcmVnIHw9IDB4MDMgPDwgODsJLyogVFNGUkVRLCBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiBUU0FWICovCiAKLQl3aGlsZSAocGVuZGJjID4+ICsraSkKLQkJOwkvKiBFbXB0eSEgRmluZCB0aGUgc2hpZnQgb2Zmc2V0ICovCi0JaWYgKGFicyhwZW5kYmMgLSAoMSA8PCBpKSkgPCBhYnMocGVuZGJjIC0gKDEgPDwgKGkgLSAxKSkpKQotCQlwZW5kYmMgPSBpOwotCWVsc2UKLQkJcGVuZGJjID0gaSAtIDE7Ci0KLQlpZiAoc3QtPmNhcHMtPmhhc190c21yKSB7Ci0JCXJlZyB8PSBBVDkxX0FEQ19UU01SX1RTQVZfKHN0LT5jYXBzLT50c19maWx0ZXJfYXZlcmFnZSkKLQkJCQkmIEFUOTFfQURDX1RTTVJfVFNBVjsKLQkJcmVnIHw9IEFUOTFfQURDX1RTTVJfUEVOREJDXyhwZW5kYmMpICYgQVQ5MV9BRENfVFNNUl9QRU5EQkM7Ci0JCXJlZyB8PSBBVDkxX0FEQ19UU01SX05PVFNETUE7Ci0JCXJlZyB8PSBBVDkxX0FEQ19UU01SX1BFTkRFVF9FTkE7Ci0JCXJlZyB8PSAweDAzIDw8IDg7CS8qIFRTRlJFUSwgbmVlZCBiaWdnZXIgdGhhbiBUU0FWICovCi0KLQkJYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19UU01SLCByZWcpOwotCX0gZWxzZSB7Ci0JCS8qIFRPRE86IGZvciA5ZzQ1IHdoaWNoIGhhcyBubyBUU01SICovCi0JfQorCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfVFNNUiwgcmVnKTsKIAogCS8qIENoYW5nZSBhZGMgaW50ZXJuYWwgcmVzaXN0b3IgdmFsdWUgZm9yIGJldHRlciBwZW4gZGV0ZWN0aW9uLAogCSAqIGRlZmF1bHQgdmFsdWUgaXMgMTAwIGtPaG0uCkBAIC04NDUsNyArMTA1NSw3IEBACiAJYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19BQ1IsIHN0LT5jYXBzLT50c19wZW5fZGV0ZWN0X3NlbnNpdGl2aXR5CiAJCQkmIEFUOTFfQURDX0FDUl9QRU5ERVRTRU5TKTsKIAotCS8qIFNhbXBsZSBQZXJvaWQgVGltZSA9IChUUkdQRVIgKyAxKSAvIEFEQ0Nsb2NrICovCisJLyogU2FtcGxlIFBlcmlvZCBUaW1lID0gKFRSR1BFUiArIDEpIC8gQURDQ2xvY2sgKi8KIAlzdC0+dHNfc2FtcGxlX3BlcmlvZF92YWwgPSByb3VuZF91cCgoVE9VQ0hfU0FNUExFX1BFUklPRF9VUyAqCiAJCQlhZGNfY2xrX2toeiAvIDEwMDApIC0gMSwgMSk7CiAKQEAgLTg3NCwxOCArMTA4NCwzOCBAQAogCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0LT5ldmJpdCk7CiAJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKIAlfX3NldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1gsIDAsICgxIDw8IE1BWF9QT1NfQklUUykgLSAxLCAwLCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1ksIDAsICgxIDw8IE1BWF9QT1NfQklUUykgLSAxLCAwLCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1BSRVNTVVJFLCAwLCAweGZmZmZmZiwgMCwgMCk7CisJaWYgKHN0LT5jYXBzLT5oYXNfdHNtcikgeworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1gsIDAsICgxIDw8IE1BWF9QT1NfQklUUykgLSAxLAorCQkJCSAgICAgMCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgMCwgKDEgPDwgTUFYX1BPU19CSVRTKSAtIDEsCisJCQkJICAgICAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19QUkVTU1VSRSwgMCwgMHhmZmZmZmYsIDAsIDApOworCX0gZWxzZSB7CisJCWlmIChzdC0+dG91Y2hzY3JlZW5fdHlwZSAhPSBBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiVGhpcyB0b3VjaHNjcmVlbiBjb250cm9sbGVyIG9ubHkgc3VwcG9ydCA0IHdpcmVzXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWCwgMCwgKDEgPDwgTUFYX1JMUE9TX0JJVFMpIC0gMSwKKwkJCQkgICAgIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1ksIDAsICgxIDw8IE1BWF9STFBPU19CSVRTKSAtIDEsCisJCQkJICAgICAwLCAwKTsKKwl9CiAKIAlzdC0+dHNfaW5wdXQgPSBpbnB1dDsKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwgc3QpOwogCiAJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKIAlpZiAocmV0KQotCQlpbnB1dF9mcmVlX2RldmljZShzdC0+dHNfaW5wdXQpOworCQlnb3RvIGVycjsKIAogCXJldHVybiByZXQ7CisKK2VycjoKKwlpbnB1dF9mcmVlX2RldmljZShzdC0+dHNfaW5wdXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF0OTFfdHNfdW5yZWdpc3RlcihzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0KQpAQCAtOTQzLDExICsxMTczLDEzIEBACiAJICovCiAJYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX0FEQ19DUiwgQVQ5MV9BRENfU1dSU1QpOwogCWF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9BRENfSURSLCAweEZGRkZGRkZGKTsKLQlyZXQgPSByZXF1ZXN0X2lycShzdC0+aXJxLAotCQkJICBhdDkxX2FkY19pbnRlcnJ1cHQsCi0JCQkgIDAsCi0JCQkgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsCi0JCQkgIGlkZXYpOworCisJaWYgKHN0LT5jYXBzLT5oYXNfdHNtcikKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc3QtPmlycSwgYXQ5MV9hZGNfOXg1X2ludGVycnVwdCwgMCwKKwkJCQkgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsIGlkZXYpOworCWVsc2UKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc3QtPmlycSwgYXQ5MV9hZGNfcmxfaW50ZXJydXB0LCAwLAorCQkJCSAgcGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgaWRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgSVJRLlxuIik7CiAJCXJldHVybiByZXQ7CkBAIC0xMDUxLDEyICsxMjgzLDYgQEAKIAkJCWdvdG8gZXJyb3JfZGlzYWJsZV9hZGNfY2xrOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKCFzdC0+Y2Fwcy0+aGFzX3RzbXIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIldlIGRvbid0IHN1cHBvcnQgbm9uLVRTTVIgYWRjXG4iKTsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfYWRjX2NsazsKLQkJfQotCiAJCXJldCA9IGF0OTFfdHNfcmVnaXN0ZXIoc3QsIHBkZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9kaXNhYmxlX2FkY19jbGs7CkBAIC0xMTIwLDYgKzEzNDYsMjAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBhdDkxX2FkY19jYXBzIGF0OTFzYW05cmxfY2FwcyA9IHsKKwkuaGFzX3RzID0gdHJ1ZSwKKwkuY2FsY19zdGFydHVwX3RpY2tzID0gY2FsY19zdGFydHVwX3RpY2tzXzkyNjAsCS8qIHNhbWUgYXMgOTI2MCAqLworCS5udW1fY2hhbm5lbHMgPSA2LAorCS5yZWdpc3RlcnMgPSB7CisJCS5jaGFubmVsX2Jhc2UgPSBBVDkxX0FEQ19DSFIoMCksCisJCS5kcmR5X21hc2sgPSBBVDkxX0FEQ19EUkRZLAorCQkuc3RhdHVzX3JlZ2lzdGVyID0gQVQ5MV9BRENfU1IsCisJCS50cmlnZ2VyX3JlZ2lzdGVyID0gQVQ5MV9BRENfVFJHUl85RzQ1LAorCQkubXJfcHJlc2NhbF9tYXNrID0gQVQ5MV9BRENfUFJFU0NBTF85MjYwLAorCQkubXJfc3RhcnR1cF9tYXNrID0gQVQ5MV9BRENfU1RBUlRVUF85RzQ1LAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGF0OTFfYWRjX2NhcHMgYXQ5MXNhbTlnNDVfY2FwcyA9IHsKIAkuaGFzX3RzID0gdHJ1ZSwKIAkuY2FsY19zdGFydHVwX3RpY2tzID0gY2FsY19zdGFydHVwX3RpY2tzXzkyNjAsCS8qIHNhbWUgYXMgOTI2MCAqLwpAQCAtMTE1NCw2ICsxMzk0LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXQ5MV9hZGNfZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1hZGMiLCAuZGF0YSA9ICZhdDkxc2FtOTI2MF9jYXBzIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsLWFkYyIsIC5kYXRhID0gJmF0OTFzYW05cmxfY2FwcyB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUtYWRjIiwgLmRhdGEgPSAmYXQ5MXNhbTlnNDVfY2FwcyB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1hZGMiLCAuZGF0YSA9ICZhdDkxc2FtOXg1X2NhcHMgfSwKIAl7fSwKQEAgLTExNjUsNiArMTQwNiw5IEBACiAJCS5uYW1lID0gImF0OTFzYW05MjYwLWFkYyIsCiAJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhdDkxc2FtOTI2MF9jYXBzLAogCX0sIHsKKwkJLm5hbWUgPSAiYXQ5MXNhbTlybC1hZGMiLAorCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykmYXQ5MXNhbTlybF9jYXBzLAorCX0sIHsKIAkJLm5hbWUgPSAiYXQ5MXNhbTlnNDUtYWRjIiwKIAkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpJmF0OTFzYW05ZzQ1X2NhcHMsCiAJfSwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL2V4eW5vc19hZGMuYyBiL2RyaXZlcnMvaWlvL2FkYy9leHlub3NfYWRjLmMKaW5kZXggYWZmYTkzZi4uMDEwNTc4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL2V4eW5vc19hZGMuYworKysgYi9kcml2ZXJzL2lpby9hZGMvZXh5bm9zX2FkYy5jCkBAIC04Miw3ICs4Miw3IEBACiAjZGVmaW5lIEFEQ19DT05fRU5fU1RBUlQJKDF1IDw8IDApCiAjZGVmaW5lIEFEQ19EQVRYX01BU0sJCTB4RkZGCiAKLSNkZWZpbmUgRVhZTk9TX0FEQ19USU1FT1VUCShtc2Vjc190b19qaWZmaWVzKDEwMDApKQorI2RlZmluZSBFWFlOT1NfQURDX1RJTUVPVVQJKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSkKIAogc3RydWN0IGV4eW5vc19hZGMgewogCXZvaWQgX19pb21lbQkJKnJlZ3M7CkBAIC0xMTIsNiArMTEyLDMwIEBACiAJcmV0dXJuICh1bnNpZ25lZCBpbnQpbWF0Y2gtPmRhdGE7CiB9CiAKK3N0YXRpYyB2b2lkIGV4eW5vc19hZGNfaHdfaW5pdChzdHJ1Y3QgZXh5bm9zX2FkYyAqaW5mbykKK3sKKwl1MzIgY29uMSwgY29uMjsKKworCWlmIChpbmZvLT52ZXJzaW9uID09IEFEQ19WMikgeworCQljb24xID0gQURDX1YyX0NPTjFfU09GVF9SRVNFVDsKKwkJd3JpdGVsKGNvbjEsIEFEQ19WMl9DT04xKGluZm8tPnJlZ3MpKTsKKworCQljb24yID0gQURDX1YyX0NPTjJfT1NFTCB8IEFEQ19WMl9DT04yX0VTRUwgfAorCQkJQURDX1YyX0NPTjJfSElHSEYgfCBBRENfVjJfQ09OMl9DX1RJTUUoMCk7CisJCXdyaXRlbChjb24yLCBBRENfVjJfQ09OMihpbmZvLT5yZWdzKSk7CisKKwkJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwkJd3JpdGVsKDEsIEFEQ19WMl9JTlRfRU4oaW5mby0+cmVncykpOworCX0gZWxzZSB7CisJCS8qIHNldCBkZWZhdWx0IHByZXNjYWxlciB2YWx1ZXMgYW5kIEVuYWJsZSBwcmVzY2FsZXIgKi8KKwkJY29uMSA9ICBBRENfVjFfQ09OX1BSU0NMVig0OSkgfCBBRENfVjFfQ09OX1BSU0NFTjsKKworCQkvKiBFbmFibGUgMTItYml0IEFEQyByZXNvbHV0aW9uICovCisJCWNvbjEgfD0gQURDX1YxX0NPTl9SRVM7CisJCXdyaXRlbChjb24xLCBBRENfVjFfQ09OKGluZm8tPnJlZ3MpKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZXh5bm9zX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCiAJCQkJaW50ICp2YWwsCkBAIC0xMjEsMTEgKzE0NSwxMyBAQAogCXN0cnVjdCBleHlub3NfYWRjICppbmZvID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTMyIGNvbjEsIGNvbjI7CisJaW50IHJldDsKIAogCWlmIChtYXNrICE9IElJT19DSEFOX0lORk9fUkFXKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCXJlaW5pdF9jb21wbGV0aW9uKCZpbmZvLT5jb21wbGV0aW9uKTsKIAogCS8qIFNlbGVjdCB0aGUgY2hhbm5lbCB0byBiZSB1c2VkIGFuZCBUcmlnZ2VyIGNvbnZlcnNpb24gKi8KIAlpZiAoaW5mby0+dmVyc2lvbiA9PSBBRENfVjIpIHsKQEAgLTE0NSwxNiArMTcxLDIxIEBACiAJCQkJQURDX1YxX0NPTihpbmZvLT5yZWdzKSk7CiAJfQogCi0JdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0CisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dAogCQkJKCZpbmZvLT5jb21wbGV0aW9uLCBFWFlOT1NfQURDX1RJTUVPVVQpOwotCSp2YWwgPSBpbmZvLT52YWx1ZTsKKwlpZiAodGltZW91dCA9PSAwKSB7CisJCWRldl93YXJuKCZpbmRpb19kZXYtPmRldiwgIkNvbnZlcnNpb24gdGltZWQgb3V0ISBSZXNldHRpbmdcbiIpOworCQlleHlub3NfYWRjX2h3X2luaXQoaW5mbyk7CisJCXJldCA9IC1FVElNRURPVVQ7CisJfSBlbHNlIHsKKwkJKnZhbCA9IGluZm8tPnZhbHVlOworCQkqdmFsMiA9IDA7CisJCXJldCA9IElJT19WQUxfSU5UOworCX0KIAogCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAKLQlpZiAodGltZW91dCA9PSAwKQotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQotCXJldHVybiBJSU9fVkFMX0lOVDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZXh5bm9zX2FkY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMjI2LDMwICsyNTcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfYWRjX2h3X2luaXQoc3RydWN0IGV4eW5vc19hZGMgKmluZm8pCi17Ci0JdTMyIGNvbjEsIGNvbjI7Ci0KLQlpZiAoaW5mby0+dmVyc2lvbiA9PSBBRENfVjIpIHsKLQkJY29uMSA9IEFEQ19WMl9DT04xX1NPRlRfUkVTRVQ7Ci0JCXdyaXRlbChjb24xLCBBRENfVjJfQ09OMShpbmZvLT5yZWdzKSk7Ci0KLQkJY29uMiA9IEFEQ19WMl9DT04yX09TRUwgfCBBRENfVjJfQ09OMl9FU0VMIHwKLQkJCUFEQ19WMl9DT04yX0hJR0hGIHwgQURDX1YyX0NPTjJfQ19USU1FKDApOwotCQl3cml0ZWwoY29uMiwgQURDX1YyX0NPTjIoaW5mby0+cmVncykpOwotCi0JCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCi0JCXdyaXRlbCgxLCBBRENfVjJfSU5UX0VOKGluZm8tPnJlZ3MpKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgZGVmYXVsdCBwcmVzY2FsZXIgdmFsdWVzIGFuZCBFbmFibGUgcHJlc2NhbGVyICovCi0JCWNvbjEgPSAgQURDX1YxX0NPTl9QUlNDTFYoNDkpIHwgQURDX1YxX0NPTl9QUlNDRU47Ci0KLQkJLyogRW5hYmxlIDEyLWJpdCBBREMgcmVzb2x1dGlvbiAqLwotCQljb24xIHw9IEFEQ19WMV9DT05fUkVTOwotCQl3cml0ZWwoY29uMSwgQURDX1YxX0NPTihpbmZvLT5yZWdzKSk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGV4eW5vc19hZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZXh5bm9zX2FkYyAqaW5mbyA9IE5VTEw7CkBAIC0yOTAsMzIgKzI5NywzMCBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCZpbmZvLT5jb21wbGV0aW9uKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwgZXh5bm9zX2FkY19pc3IsCi0JCQkJCTAsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBpbmZvKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgcmVxdWVzdGluZyBpcnEsIGlycSA9ICVkXG4iLAotCQkJCQkJCWluZm8tPmlycSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jd3JpdGVsKDEsIGluZm8tPmVuYWJsZV9yZWcpOwotCiAJaW5mby0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJhZGMiKTsKIAlpZiAoSVNfRVJSKGluZm8tPmNsaykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIGdldHRpbmcgY2xvY2ssIGVyciA9ICVsZFxuIiwKIAkJCQkJCQlQVFJfRVJSKGluZm8tPmNsaykpOwotCQlyZXQgPSBQVFJfRVJSKGluZm8tPmNsayk7Ci0JCWdvdG8gZXJyX2lycTsKKwkJcmV0dXJuIFBUUl9FUlIoaW5mby0+Y2xrKTsKIAl9CiAKIAlpbmZvLT52ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZkZCIpOwogCWlmIChJU19FUlIoaW5mby0+dmRkKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgZ2V0dGluZyByZWd1bGF0b3IsIGVyciA9ICVsZFxuIiwKIAkJCQkJCQlQVFJfRVJSKGluZm8tPnZkZCkpOwotCQlyZXQgPSBQVFJfRVJSKGluZm8tPnZkZCk7Ci0JCWdvdG8gZXJyX2lycTsKKwkJcmV0dXJuIFBUUl9FUlIoaW5mby0+dmRkKTsKIAl9CiAKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGluZm8tPnZkZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbmZvLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Rpc2FibGVfcmVnOworCisJd3JpdGVsKDEsIGluZm8tPmVuYWJsZV9yZWcpOworCiAJaW5mby0+dmVyc2lvbiA9IGV4eW5vc19hZGNfZ2V0X3ZlcnNpb24ocGRldik7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmRpb19kZXYpOwpAQCAtMzMyLDE2ICszMzcsMTggQEAKIAllbHNlCiAJCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gTUFYX0FEQ19WMl9DSEFOTkVMUzsKIAorCXJldCA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwgZXh5bm9zX2FkY19pc3IsCisJCQkJCTAsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgcmVxdWVzdGluZyBpcnEsIGlycSA9ICVkXG4iLAorCQkJCQkJCWluZm8tPmlycSk7CisJCWdvdG8gZXJyX2Rpc2FibGVfY2xrOworCX0KKwogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9pcnE7CiAKLQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGluZm8tPnZkZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfaWlvX2RldjsKLQotCWNsa19wcmVwYXJlX2VuYWJsZShpbmZvLT5jbGspOwotCiAJZXh5bm9zX2FkY19od19pbml0KGluZm8pOwogCiAJcmV0ID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUobnAsIGV4eW5vc19hZGNfbWF0Y2gsIE5VTEwsICZpbmRpb19kZXYtPmRldik7CkBAIC0zNTUsMTIgKzM2MiwxNCBAQAogZXJyX29mX3BvcHVsYXRlOgogCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmaW5kaW9fZGV2LT5kZXYsIE5VTEwsCiAJCQkJZXh5bm9zX2FkY19yZW1vdmVfZGV2aWNlcyk7Ci0JcmVndWxhdG9yX2Rpc2FibGUoaW5mby0+dmRkKTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW5mby0+Y2xrKTsKLWVycl9paW9fZGV2OgogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogZXJyX2lycToKIAlmcmVlX2lycShpbmZvLT5pcnEsIGluZm8pOworZXJyX2Rpc2FibGVfY2xrOgorCXdyaXRlbCgwLCBpbmZvLT5lbmFibGVfcmVnKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW5mby0+Y2xrKTsKK2Vycl9kaXNhYmxlX3JlZzoKKwlyZWd1bGF0b3JfZGlzYWJsZShpbmZvLT52ZGQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3MSwxMSArMzgwLDExIEBACiAKIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmluZGlvX2Rldi0+ZGV2LCBOVUxMLAogCQkJCWV4eW5vc19hZGNfcmVtb3ZlX2RldmljZXMpOwotCXJlZ3VsYXRvcl9kaXNhYmxlKGluZm8tPnZkZCk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGluZm8tPmNsayk7Ci0Jd3JpdGVsKDAsIGluZm8tPmVuYWJsZV9yZWcpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWZyZWVfaXJxKGluZm8tPmlycSwgaW5mbyk7CisJd3JpdGVsKDAsIGluZm8tPmVuYWJsZV9yZWcpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbmZvLT5jbGspOworCXJlZ3VsYXRvcl9kaXNhYmxlKGluZm8tPnZkZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Nyw4ICs0MDYsOCBAQAogCQl3cml0ZWwoY29uLCBBRENfVjFfQ09OKGluZm8tPnJlZ3MpKTsKIAl9CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW5mby0+Y2xrKTsKIAl3cml0ZWwoMCwgaW5mby0+ZW5hYmxlX3JlZyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGluZm8tPmNsayk7CiAJcmVndWxhdG9yX2Rpc2FibGUoaW5mby0+dmRkKTsKIAogCXJldHVybiAwOwpAQCAtNDE0LDkgKzQyMywxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl3cml0ZWwoMSwgaW5mby0+ZW5hYmxlX3JlZyk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGluZm8tPmNsayk7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGluZm8tPmNsayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAorCXdyaXRlbCgxLCBpbmZvLT5lbmFibGVfcmVnKTsKIAlleHlub3NfYWRjX2h3X2luaXQoaW5mbyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9tYXgxMzYzLmMgYi9kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jCmluZGV4IDljZjMyMjkuLjFiM2I3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FkYy9tYXgxMzYzLmMKKysrIGIvZHJpdmVycy9paW8vYWRjL21heDEzNjMuYwpAQCAtMTI1Miw4ICsxMjUyLDggQEAKIAkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCi0JCS5jaGFubmVscyA9IG1heDEyMzhfY2hhbm5lbHMsCi0JCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEyMzhfY2hhbm5lbHMpLAorCQkuY2hhbm5lbHMgPSBtYXgxMDM4X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMDM4X2NoYW5uZWxzKSwKIAl9LAogCVttYXgxMTYwNV0gPSB7CiAJCS5iaXRzID0gOCwKQEAgLTEyNjIsOCArMTI2Miw4IEBACiAJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAotCQkuY2hhbm5lbHMgPSBtYXgxMjM4X2NoYW5uZWxzLAotCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMjM4X2NoYW5uZWxzKSwKKwkJLmNoYW5uZWxzID0gbWF4MTAzOF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTAzOF9jaGFubmVscyksCiAJfSwKIAlbbWF4MTE2MDZdID0gewogCQkuYml0cyA9IDEwLApAQCAtMTMxMiw4ICsxMzEyLDggQEAKIAkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCi0JCS5jaGFubmVscyA9IG1heDEyMzhfY2hhbm5lbHMsCi0JCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEyMzhfY2hhbm5lbHMpLAorCQkuY2hhbm5lbHMgPSBtYXgxMTM4X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMTM4X2NoYW5uZWxzKSwKIAl9LAogCVttYXgxMTYxMV0gPSB7CiAJCS5iaXRzID0gMTAsCkBAIC0xMzIyLDggKzEzMjIsOCBAQAogCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKLQkJLmNoYW5uZWxzID0gbWF4MTIzOF9jaGFubmVscywKLQkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTIzOF9jaGFubmVscyksCisJCS5jaGFubmVscyA9IG1heDExMzhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExMzhfY2hhbm5lbHMpLAogCX0sCiAJW21heDExNjEyXSA9IHsKIAkJLmJpdHMgPSAxMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9tY3AzNDIyLmMgYi9kcml2ZXJzL2lpby9hZGMvbWNwMzQyMi5jCmluZGV4IDQ3ZGNiMzQuLjUxNjcyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FkYy9tY3AzNDIyLmMKKysrIGIvZHJpdmVycy9paW8vYWRjL21jcDM0MjIuYwpAQCAtMSwxMCArMSwxMSBAQAogLyoKLSAqIG1jcDM0MjIuYyAtIGRyaXZlciBmb3IgdGhlIE1pY3JvY2hpcCBtY3AzNDIyLzMvNCBjaGlwIGZhbWlseQorICogbWNwMzQyMi5jIC0gZHJpdmVyIGZvciB0aGUgTWljcm9jaGlwIG1jcDM0MjIvMy80LzYvNy84IGNoaXAgZmFtaWx5CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEzLCBBbmdlbG8gQ29tcGFnbnVjY2kKICAqIEF1dGhvcjogQW5nZWxvIENvbXBhZ251Y2NpIDxhbmdlbG8uY29tcGFnbnVjY2lAZ21haWwuY29tPgogICoKICAqIERhdGFzaGVldDogaHR0cDovL3d3MS5taWNyb2NoaXAuY29tL2Rvd25sb2Fkcy9lbi9kZXZpY2Vkb2MvMjIwODhiLnBkZgorICogICAgICAgICAgICBodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURvYy8yMjIyNmEucGRmCiAgKgogICogVGhpcyBkcml2ZXIgZXhwb3J0cyB0aGUgdmFsdWUgb2YgYW5hbG9nIGlucHV0IHZvbHRhZ2UgdG8gc3lzZnMsIHRoZQogICogdm9sdGFnZSB1bml0IGlzIG5WLgpAQCAtOTYsNiArOTcsNyBAQAogLyogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikgKi8KIHN0cnVjdCBtY3AzNDIyIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCXU4IGlkOwogCXU4IGNvbmZpZzsKIAl1OCBwZ2FbNF07CiAJc3RydWN0IG11dGV4IGxvY2s7CkBAIC0yMzgsNiArMjQwLDggQEAKIAkJCXRlbXAgPSBNQ1AzNDIyX1NSQVRFXzE1OwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKKwkJCWlmIChhZGMtPmlkID4gNCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXRlbXAgPSBNQ1AzNDIyX1NSQVRFXzM7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTI3MSw2ICsyNzUsMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyBzc2l6ZV90IG1jcDM0MjJfc2hvd19zYW1wX2ZyZXFzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWNwMzQyMiAqYWRjID0gaWlvX3ByaXYoZGV2X3RvX2lpb19kZXYoZGV2KSk7CisKKwlpZiAoYWRjLT5pZCA+IDQpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjI0MCA2MCAxNVxuIik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIyNDAgNjAgMTUgM1xuIik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IG1jcDM0MjJfc2hvd19zY2FsZXMoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjg0LDEyICsyOTksMTMgQEAKIAkJbWNwMzQyMl9zY2FsZXNbc2FtcGxlX3JhdGVdWzNdKTsKIH0KIAotc3RhdGljIElJT19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgiMjQwIDYwIDE1IDMiKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZSwgU19JUlVHTywKKwkJbWNwMzQyMl9zaG93X3NhbXBfZnJlcXMsIE5VTEwsIDApOwogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl92b2x0YWdlX3NjYWxlX2F2YWlsYWJsZSwgU19JUlVHTywKIAkJbWNwMzQyMl9zaG93X3NjYWxlcywgTlVMTCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptY3AzNDIyX2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2NvbnN0X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfaW5fdm9sdGFnZV9zY2FsZV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKQEAgLTMzNSw2ICszNTEsNyBAQAogCiAJYWRjID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlhZGMtPmkyYyA9IGNsaWVudDsKKwlhZGMtPmlkID0gKHU4KShpZC0+ZHJpdmVyX2RhdGEpOwogCiAJbXV0ZXhfaW5pdCgmYWRjLT5sb2NrKTsKIApAQCAtMzQzLDEzICszNjAsMTYgQEAKIAlpbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAJaW5kaW9fZGV2LT5pbmZvID0gJm1jcDM0MjJfaW5mbzsKIAotCXN3aXRjaCAoKHVuc2lnbmVkIGludCkoaWQtPmRyaXZlcl9kYXRhKSkgeworCXN3aXRjaCAoYWRjLT5pZCkgewogCWNhc2UgMjoKIAljYXNlIDM6CisJY2FzZSA2OgorCWNhc2UgNzoKIAkJaW5kaW9fZGV2LT5jaGFubmVscyA9IG1jcDM0MjJfY2hhbm5lbHM7CiAJCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtY3AzNDIyX2NoYW5uZWxzKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgorCWNhc2UgODoKIAkJaW5kaW9fZGV2LT5jaGFubmVscyA9IG1jcDM0MjRfY2hhbm5lbHM7CiAJCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtY3AzNDI0X2NoYW5uZWxzKTsKIAkJYnJlYWs7CkBAIC0zNzUsNiArMzk1LDkgQEAKIAl7ICJtY3AzNDIyIiwgMiB9LAogCXsgIm1jcDM0MjMiLCAzIH0sCiAJeyAibWNwMzQyNCIsIDQgfSwKKwl7ICJtY3AzNDI2IiwgNiB9LAorCXsgIm1jcDM0MjciLCA3IH0sCisJeyAibWNwMzQyOCIsIDggfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWNwMzQyMl9pZCk7CkBAIC0zOTksNSArNDIyLDUgQEAKIG1vZHVsZV9pMmNfZHJpdmVyKG1jcDM0MjJfZHJpdmVyKTsKIAogTU9EVUxFX0FVVEhPUigiQW5nZWxvIENvbXBhZ251Y2NpIDxhbmdlbG8uY29tcGFnbnVjY2lAZ21haWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb2NoaXAgbWNwMzQyMi8zLzQgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvY2hpcCBtY3AzNDIyLzMvNC82LzcvOCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2NvbW1vbi9oaWQtc2Vuc29ycy9oaWQtc2Vuc29yLWF0dHJpYnV0ZXMuYyBiL2RyaXZlcnMvaWlvL2NvbW1vbi9oaWQtc2Vuc29ycy9oaWQtc2Vuc29yLWF0dHJpYnV0ZXMuYwppbmRleCA3NWI1NDczLi40MDNkZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9jb21tb24vaGlkLXNlbnNvcnMvaGlkLXNlbnNvci1hdHRyaWJ1dGVzLmMKKysrIGIvZHJpdmVycy9paW8vY29tbW9uL2hpZC1zZW5zb3JzL2hpZC1zZW5zb3ItYXR0cmlidXRlcy5jCkBAIC0yNiw2ICsyNiw0MCBAQAogI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KICNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KIAorc3RydWN0IHsKKwl1MzIgdXNhZ2VfaWQ7CisJaW50IHVuaXQ7IC8qIDAgZm9yIGRlZmF1bHQgb3RoZXJzIGZyb20gSElEIHNlbnNvciBzcGVjICovCisJaW50IHNjYWxlX3ZhbDA7IC8qIHNjYWxlLCB3aG9sZSBudW1iZXIgKi8KKwlpbnQgc2NhbGVfdmFsMTsgLyogc2NhbGUsIGZyYWN0aW9uIGluIG1pY3JvcyAqLworfSBzdGF0aWMgdW5pdF9jb252ZXJzaW9uW10gPSB7CisJe0hJRF9VU0FHRV9TRU5TT1JfQUNDRUxfM0QsIDAsIDksIDgwNjY1MH0sCisJe0hJRF9VU0FHRV9TRU5TT1JfQUNDRUxfM0QsCisJCUhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUVURVJTX1BFUl9TRUNfU1FSRCwgMSwgMH0sCisJe0hJRF9VU0FHRV9TRU5TT1JfQUNDRUxfM0QsCisJCUhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfRywgOSwgODA2NjUwfSwKKworCXtISURfVVNBR0VfU0VOU09SX0dZUk9fM0QsIDAsIDAsIDE3NDUzfSwKKwl7SElEX1VTQUdFX1NFTlNPUl9HWVJPXzNELAorCQlISURfVVNBR0VfU0VOU09SX1VOSVRTX1JBRElBTlNfUEVSX1NFQ09ORCwgMSwgMH0sCisJe0hJRF9VU0FHRV9TRU5TT1JfR1lST18zRCwKKwkJSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERUdSRUVTX1BFUl9TRUNPTkQsIDAsIDE3NDUzfSwKKworCXtISURfVVNBR0VfU0VOU09SX0NPTVBBU1NfM0QsIDAsIDAsIDEwMDB9LAorCXtISURfVVNBR0VfU0VOU09SX0NPTVBBU1NfM0QsIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfR0FVU1MsIDEsIDB9LAorCisJe0hJRF9VU0FHRV9TRU5TT1JfSU5DTElOT01FVEVSXzNELCAwLCAwLCAxNzQ1M30sCisJe0hJRF9VU0FHRV9TRU5TT1JfSU5DTElOT01FVEVSXzNELAorCQlISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFR1JFRVMsIDAsIDE3NDUzfSwKKwl7SElEX1VTQUdFX1NFTlNPUl9JTkNMSU5PTUVURVJfM0QsCisJCUhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUkFESUFOUywgMSwgMH0sCisKKwl7SElEX1VTQUdFX1NFTlNPUl9BTFMsIDAsIDEsIDB9LAorCXtISURfVVNBR0VfU0VOU09SX0FMUywgSElEX1VTQUdFX1NFTlNPUl9VTklUU19MVVgsIDEsIDB9LAorCisJe0hJRF9VU0FHRV9TRU5TT1JfUFJFU1NVUkUsIDAsIDEwMDAwMCwgMH0sCisJe0hJRF9VU0FHRV9TRU5TT1JfUFJFU1NVUkUsIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUEFTQ0FMLCAxLCAwfSwKK307CisKIHN0YXRpYyBpbnQgcG93XzEwKHVuc2lnbmVkIHBvd2VyKQogewogCWludCBpOwpAQCAtMTEzLDYgKzE0NywyNiBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAorczMyIGhpZF9zZW5zb3JfcmVhZF9wb2xsX3ZhbHVlKHN0cnVjdCBoaWRfc2Vuc29yX2NvbW1vbiAqc3QpCit7CisJczMyIHZhbHVlID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gc2Vuc29yX2h1Yl9nZXRfZmVhdHVyZShzdC0+aHNkZXYsCisJCXN0LT5wb2xsLnJlcG9ydF9pZCwKKwkJc3QtPnBvbGwuaW5kZXgsICZ2YWx1ZSk7CisKKwlpZiAocmV0IDwgMCB8fCB2YWx1ZSA8IDApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKHN0LT5wb2xsLnVuaXRzID09IEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfU0VDT05EKQorCQkJdmFsdWUgPSB2YWx1ZSAqIDEwMDA7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTChoaWRfc2Vuc29yX3JlYWRfcG9sbF92YWx1ZSk7CisKIGludCBoaWRfc2Vuc29yX3JlYWRfc2FtcF9mcmVxX3ZhbHVlKHN0cnVjdCBoaWRfc2Vuc29yX2NvbW1vbiAqc3QsCiAJCQkJaW50ICp2YWwxLCBpbnQgKnZhbDIpCiB7CkBAIC0yMDksMTUgKzI2MywxMDggQEAKIH0KIEVYUE9SVF9TWU1CT0woaGlkX3NlbnNvcl93cml0ZV9yYXdfaHlzdF92YWx1ZSk7CiAKKy8qCisgKiBUaGlzIGZ1Y3Rpb24gYXBwbGllcyB0aGUgdW5pdCBleHBvbmVudCB0byB0aGUgc2NhbGUuCisgKiBGb3IgZXhhbXBsZToKKyAqIDkuODA2NjUwIC0+ZXhwOjItPiB2YWwwWzk4MF12YWwxWzY2NTAwMF0KKyAqIDkuMDAwODA2IC0+ZXhwOjItPiB2YWwwWzkwMF12YWwxWzgwNjAwXQorICogMC4xNzQ1MzUgLT5leHA6Mi0+IHZhbDBbMTdddmFsMVs0NTM1MDBdCisgKiAxLjAwMTc0NSAtPmV4cDowLT4gdmFsMFsxXXZhbDFbMTc0NV0KKyAqIDEuMDAxNzQ1IC0+ZXhwOjItPiB2YWwwWzEwMF12YWwxWzE3NDUwMF0KKyAqIDEuMDAxNzQ1IC0+ZXhwOjQtPiB2YWwwWzEwMDE3XXZhbDFbNDUwMDAwXQorICogOS44MDY2NTAgLT5leHA6LTItPiB2YWwwWzBddmFsMVs5ODA2Nl0KKyAqLworc3RhdGljIHZvaWQgYWRqdXN0X2V4cG9uZW50X21pY3JvKGludCAqdmFsMCwgaW50ICp2YWwxLCBpbnQgc2NhbGUwLAorCQkJCSAgaW50IHNjYWxlMSwgaW50IGV4cCkKK3sKKwlpbnQgaTsKKwlpbnQgeDsKKwlpbnQgcmVzOworCWludCByZW07CisKKwlpZiAoZXhwID4gMCkgeworCQkqdmFsMCA9IHNjYWxlMCAqIHBvd18xMChleHApOworCQlyZXMgPSAwOworCQlpZiAoZXhwID4gNikgeworCQkJKnZhbDEgPSAwOworCQkJcmV0dXJuOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBleHA7ICsraSkgeworCQkJeCA9IHNjYWxlMSAvIHBvd18xMCg1IC0gaSk7CisJCQlyZXMgKz0gKHBvd18xMChleHAgLSAxIC0gaSkgKiB4KTsKKwkJCXNjYWxlMSA9IHNjYWxlMSAlIHBvd18xMCg1IC0gaSk7CisJCX0KKwkJKnZhbDAgKz0gcmVzOworCQkJKnZhbDEgPSBzY2FsZTEgKiBwb3dfMTAoZXhwKTsKKwl9IGVsc2UgaWYgKGV4cCA8IDApIHsKKwkJZXhwID0gYWJzKGV4cCk7CisJCWlmIChleHAgPiA2KSB7CisJCQkqdmFsMCA9ICp2YWwxID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQkqdmFsMCA9IHNjYWxlMCAvIHBvd18xMChleHApOworCQlyZW0gPSBzY2FsZTAgJSBwb3dfMTAoZXhwKTsKKwkJcmVzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8ICg2IC0gZXhwKTsgKytpKSB7CisJCQl4ID0gc2NhbGUxIC8gcG93XzEwKDUgLSBpKTsKKwkJCXJlcyArPSAocG93XzEwKDUgLSBleHAgLSBpKSAqIHgpOworCQkJc2NhbGUxID0gc2NhbGUxICUgcG93XzEwKDUgLSBpKTsKKwkJfQorCQkqdmFsMSA9IHJlbSAqIHBvd18xMCg2IC0gZXhwKSArIHJlczsKKwl9IGVsc2UgeworCQkqdmFsMCA9IHNjYWxlMDsKKwkJKnZhbDEgPSBzY2FsZTE7CisJfQorfQorCitpbnQgaGlkX3NlbnNvcl9mb3JtYXRfc2NhbGUodTMyIHVzYWdlX2lkLAorCQkJc3RydWN0IGhpZF9zZW5zb3JfaHViX2F0dHJpYnV0ZV9pbmZvICphdHRyX2luZm8sCisJCQlpbnQgKnZhbDAsIGludCAqdmFsMSkKK3sKKwlpbnQgaTsKKwlpbnQgZXhwOworCisJKnZhbDAgPSAxOworCSp2YWwxID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHVuaXRfY29udmVyc2lvbik7ICsraSkgeworCQlpZiAodW5pdF9jb252ZXJzaW9uW2ldLnVzYWdlX2lkID09IHVzYWdlX2lkICYmCisJCQl1bml0X2NvbnZlcnNpb25baV0udW5pdCA9PSBhdHRyX2luZm8tPnVuaXRzKSB7CisJCQlleHAgID0gaGlkX3NlbnNvcl9jb252ZXJ0X2V4cG9uZW50KAorCQkJCQkJYXR0cl9pbmZvLT51bml0X2V4cG8pOworCQkJYWRqdXN0X2V4cG9uZW50X21pY3JvKHZhbDAsIHZhbDEsCisJCQkJCXVuaXRfY29udmVyc2lvbltpXS5zY2FsZV92YWwwLAorCQkJCQl1bml0X2NvbnZlcnNpb25baV0uc2NhbGVfdmFsMSwgZXhwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87Cit9CitFWFBPUlRfU1lNQk9MKGhpZF9zZW5zb3JfZm9ybWF0X3NjYWxlKTsKKworaW50IGhpZF9zZW5zb3JfZ2V0X3JlcG9ydGluZ19pbnRlcnZhbChzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldiwKKwkJCQkJdTMyIHVzYWdlX2lkLAorCQkJCQlzdHJ1Y3QgaGlkX3NlbnNvcl9jb21tb24gKnN0KQoreworCXNlbnNvcl9odWJfaW5wdXRfZ2V0X2F0dHJpYnV0ZV9pbmZvKGhzZGV2LAorCQkJCQlISURfRkVBVFVSRV9SRVBPUlQsIHVzYWdlX2lkLAorCQkJCQlISURfVVNBR0VfU0VOU09SX1BST1BfUkVQT1JUX0lOVEVSVkFMLAorCQkJCQkmc3QtPnBvbGwpOworCS8qIERlZmF1bHQgdW5pdCBvZiBtZWFzdXJlIGlzIG1pbGxpc2Vjb25kcyAqLworCWlmIChzdC0+cG9sbC51bml0cyA9PSAwKQorCQlzdC0+cG9sbC51bml0cyA9IEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUlMTElTRUNPTkQ7CisJcmV0dXJuIDA7CisKK30KKwogaW50IGhpZF9zZW5zb3JfcGFyc2VfY29tbW9uX2F0dHJpYnV0ZXMoc3RydWN0IGhpZF9zZW5zb3JfaHViX2RldmljZSAqaHNkZXYsCiAJCQkJCXUzMiB1c2FnZV9pZCwKIAkJCQkJc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uICpzdCkKIHsKIAotCXNlbnNvcl9odWJfaW5wdXRfZ2V0X2F0dHJpYnV0ZV9pbmZvKGhzZGV2LAotCQkJCQlISURfRkVBVFVSRV9SRVBPUlQsIHVzYWdlX2lkLAotCQkJCQlISURfVVNBR0VfU0VOU09SX1BST1BfUkVQT1JUX0lOVEVSVkFMLAotCQkJCQkmc3QtPnBvbGwpOworCisJaGlkX3NlbnNvcl9nZXRfcmVwb3J0aW5nX2ludGVydmFsKGhzZGV2LCB1c2FnZV9pZCwgc3QpOwogCiAJc2Vuc29yX2h1Yl9pbnB1dF9nZXRfYXR0cmlidXRlX2luZm8oaHNkZXYsCiAJCQkJCUhJRF9GRUFUVVJFX1JFUE9SVCwgdXNhZ2VfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9jb21tb24vaGlkLXNlbnNvcnMvaGlkLXNlbnNvci10cmlnZ2VyLmMgYi9kcml2ZXJzL2lpby9jb21tb24vaGlkLXNlbnNvcnMvaGlkLXNlbnNvci10cmlnZ2VyLmMKaW5kZXggZGJlZmJkYS4uNzMyODJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vY29tbW9uL2hpZC1zZW5zb3JzL2hpZC1zZW5zb3ItdHJpZ2dlci5jCisrKyBiL2RyaXZlcnMvaWlvL2NvbW1vbi9oaWQtc2Vuc29ycy9oaWQtc2Vuc29yLXRyaWdnZXIuYwpAQCAtMjgsMTYgKzI4LDE3IEBACiAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CiAjaW5jbHVkZSAiaGlkLXNlbnNvci10cmlnZ2VyLmgiCiAKLXN0YXRpYyBpbnQgaGlkX3NlbnNvcl9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcsCi0JCQkJCQlib29sIHN0YXRlKQoraW50IGhpZF9zZW5zb3JfcG93ZXJfc3RhdGUoc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uICpzdCwgYm9vbCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaGlkX3NlbnNvcl9jb21tb24gKnN0ID0gaWlvX3RyaWdnZXJfZ2V0X2RydmRhdGEodHJpZyk7CiAJaW50IHN0YXRlX3ZhbDsKIAlpbnQgcmVwb3J0X3ZhbDsKIAogCWlmIChzdGF0ZSkgewogCQlpZiAoc2Vuc29yX2h1Yl9kZXZpY2Vfb3BlbihzdC0+aHNkZXYpKQogCQkJcmV0dXJuIC1FSU87CisKKwkJYXRvbWljX2luYygmc3QtPmRhdGFfcmVhZHkpOworCiAJCXN0YXRlX3ZhbCA9IGhpZF9zZW5zb3JfZ2V0X3VzYWdlX2luZGV4KHN0LT5oc2RldiwKIAkJCXN0LT5wb3dlcl9zdGF0ZS5yZXBvcnRfaWQsCiAJCQlzdC0+cG93ZXJfc3RhdGUuaW5kZXgsCkBAIC00Nyw2ICs0OCw4IEBACiAJCQlzdC0+cmVwb3J0X3N0YXRlLmluZGV4LAogCQkJSElEX1VTQUdFX1NFTlNPUl9QUk9QX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX0VOVU0pOwogCX0gZWxzZSB7CisJCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmc3QtPmRhdGFfcmVhZHkpKQorCQkJcmV0dXJuIDA7CiAJCXNlbnNvcl9odWJfZGV2aWNlX2Nsb3NlKHN0LT5oc2Rldik7CiAJCXN0YXRlX3ZhbCA9IGhpZF9zZW5zb3JfZ2V0X3VzYWdlX2luZGV4KHN0LT5oc2RldiwKIAkJCXN0LT5wb3dlcl9zdGF0ZS5yZXBvcnRfaWQsCkBAIC01Nyw3ICs2MCw2IEBACiAJCQlzdC0+cmVwb3J0X3N0YXRlLmluZGV4LAogCQkJSElEX1VTQUdFX1NFTlNPUl9QUk9QX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfRU5VTSk7CiAJfQotCXN0LT5kYXRhX3JlYWR5ID0gc3RhdGU7CiAKIAlpZiAoc3RhdGVfdmFsID49IDApIHsKIAkJc3RhdGVfdmFsICs9IHN0LT5wb3dlcl9zdGF0ZS5sb2dpY2FsX21pbmltdW07CkBAIC03NSw2ICs3NywxMyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGhpZF9zZW5zb3JfcG93ZXJfc3RhdGUpOworCitzdGF0aWMgaW50IGhpZF9zZW5zb3JfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLAorCQkJCQkJYm9vbCBzdGF0ZSkKK3sKKwlyZXR1cm4gaGlkX3NlbnNvcl9wb3dlcl9zdGF0ZShpaW9fdHJpZ2dlcl9nZXRfZHJ2ZGF0YSh0cmlnKSwgc3RhdGUpOworfQogCiB2b2lkIGhpZF9zZW5zb3JfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uICphdHRyYikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2NvbW1vbi9oaWQtc2Vuc29ycy9oaWQtc2Vuc29yLXRyaWdnZXIuaCBiL2RyaXZlcnMvaWlvL2NvbW1vbi9oaWQtc2Vuc29ycy9oaWQtc2Vuc29yLXRyaWdnZXIuaAppbmRleCBjYTAyZjc4Li4wZjhlNzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9jb21tb24vaGlkLXNlbnNvcnMvaGlkLXNlbnNvci10cmlnZ2VyLmgKKysrIGIvZHJpdmVycy9paW8vY29tbW9uL2hpZC1zZW5zb3JzL2hpZC1zZW5zb3ItdHJpZ2dlci5oCkBAIC0yMiw1ICsyMiw2IEBACiBpbnQgaGlkX3NlbnNvcl9zZXR1cF90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uICphdHRyYik7CiB2b2lkIGhpZF9zZW5zb3JfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uICphdHRyYik7CitpbnQgaGlkX3NlbnNvcl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaGlkX3NlbnNvcl9jb21tb24gKnN0LCBib29sIHN0YXRlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9jb21tb24vc3Rfc2Vuc29ycy9zdF9zZW5zb3JzX2NvcmUuYyBiL2RyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL3N0X3NlbnNvcnNfY29yZS5jCmluZGV4IDdiYTFlZjIuLmU4YjkzMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL3N0X3NlbnNvcnNfY29yZS5jCisrKyBiL2RyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL3N0X3NlbnNvcnNfY29yZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lpby9jb21tb24vc3Rfc2Vuc29ycy5oPgpAQCAtMTk4LDYgKzE5OSw0MiBAQAogfQogRVhQT1JUX1NZTUJPTChzdF9zZW5zb3JzX3NldF9heGlzX2VuYWJsZSk7CiAKK3ZvaWQgc3Rfc2Vuc29yc19wb3dlcl9lbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3sKKwlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKnBkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpbnQgZXJyOworCisJLyogUmVndWxhdG9ycyBub3QgbWFuZGF0b3J5LCBidXQgaWYgcmVxdWVzdGVkIHdlIHNob3VsZCBlbmFibGUgdGhlbS4gKi8KKwlwZGF0YS0+dmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGluZGlvX2Rldi0+ZGV2LnBhcmVudCwgInZkZCIpOworCWlmICghSVNfRVJSKHBkYXRhLT52ZGQpKSB7CisJCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnZkZCk7CisJCWlmIChlcnIgIT0gMCkKKwkJCWRldl93YXJuKCZpbmRpb19kZXYtPmRldiwKKwkJCQkgIkZhaWxlZCB0byBlbmFibGUgc3BlY2lmaWVkIFZkZCBzdXBwbHlcbiIpOworCX0KKworCXBkYXRhLT52ZGRfaW8gPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoaW5kaW9fZGV2LT5kZXYucGFyZW50LCAidmRkaW8iKTsKKwlpZiAoIUlTX0VSUihwZGF0YS0+dmRkX2lvKSkgeworCQllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRhLT52ZGRfaW8pOworCQlpZiAoZXJyICE9IDApCisJCQlkZXZfd2FybigmaW5kaW9fZGV2LT5kZXYsCisJCQkJICJGYWlsZWQgdG8gZW5hYmxlIHNwZWNpZmllZCBWZGRfSU8gc3VwcGx5XG4iKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHN0X3NlbnNvcnNfcG93ZXJfZW5hYmxlKTsKKwordm9pZCBzdF9zZW5zb3JzX3Bvd2VyX2Rpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3sKKwlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKnBkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKworCWlmICghSVNfRVJSKHBkYXRhLT52ZGQpKQorCQlyZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+dmRkKTsKKworCWlmICghSVNfRVJSKHBkYXRhLT52ZGRfaW8pKQorCQlyZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+dmRkX2lvKTsKK30KK0VYUE9SVF9TWU1CT0woc3Rfc2Vuc29yc19wb3dlcl9kaXNhYmxlKTsKKwogc3RhdGljIGludCBzdF9zZW5zb3JzX3NldF9kcmR5X2ludF9waW4oc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJCQkgICAgICAgc3RydWN0IHN0X3NlbnNvcnNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9neXJvL2hpZC1zZW5zb3ItZ3lyby0zZC5jIGIvZHJpdmVycy9paW8vZ3lyby9oaWQtc2Vuc29yLWd5cm8tM2QuYwppbmRleCA1OWQ2YmMzLi40MGY0ZTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9neXJvL2hpZC1zZW5zb3ItZ3lyby0zZC5jCisrKyBiL2RyaXZlcnMvaWlvL2d5cm8vaGlkLXNlbnNvci1neXJvLTNkLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtc2Vuc29yLWh1Yi5oPgogI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KICNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KQEAgLTQyLDYgKzQzLDEwIEBACiAJc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uIGNvbW1vbl9hdHRyaWJ1dGVzOwogCXN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9hdHRyaWJ1dGVfaW5mbyBneXJvW0dZUk9fM0RfQ0hBTk5FTF9NQVhdOwogCXUzMiBneXJvX3ZhbFtHWVJPXzNEX0NIQU5ORUxfTUFYXTsKKwlpbnQgc2NhbGVfcHJlX2RlY21sOworCWludCBzY2FsZV9wb3N0X2RlY21sOworCWludCBzY2FsZV9wcmVjaXNpb247CisJaW50IHZhbHVlX29mZnNldDsKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgZ3lyb18zZF9hZGRyZXNzZXNbR1lST18zRF9DSEFOTkVMX01BWF0gPSB7CkBAIC01Niw2ICs2MSw3IEBACiAJCS50eXBlID0gSUlPX0FOR0xfVkVMLAogCQkubW9kaWZpZWQgPSAxLAogCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1gsCisJCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpLAogCQkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fT0ZGU0VUKSB8CiAJCUJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSB8CiAJCUJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSkgfApAQCAtNjUsNiArNzEsNyBAQAogCQkudHlwZSA9IElJT19BTkdMX1ZFTCwKIAkJLm1vZGlmaWVkID0gMSwKIAkJLmNoYW5uZWwyID0gSUlPX01PRF9ZLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKIAkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX09GRlNFVCkgfAogCQlCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSkgfAogCQlCSVQoSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEpIHwKQEAgLTc0LDYgKzgxLDcgQEAKIAkJLnR5cGUgPSBJSU9fQU5HTF9WRUwsCiAJCS5tb2RpZmllZCA9IDEsCiAJCS5jaGFubmVsMiA9IElJT19NT0RfWiwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCiAJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSB8CkBAIC0xMDQsMzEgKzExMiw0MiBAQAogCXUzMiBhZGRyZXNzOwogCWludCByZXQ7CiAJaW50IHJldF90eXBlOworCXMzMiBwb2xsX3ZhbHVlOwogCiAJKnZhbCA9IDA7CiAJKnZhbDIgPSAwOwogCXN3aXRjaCAobWFzaykgewogCWNhc2UgMDoKKwkJcG9sbF92YWx1ZSA9IGhpZF9zZW5zb3JfcmVhZF9wb2xsX3ZhbHVlKAorCQkJCQkmZ3lyb19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOworCQlpZiAocG9sbF92YWx1ZSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZneXJvX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywgdHJ1ZSk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHBvbGxfdmFsdWUgKiAyKTsKIAkJcmVwb3J0X2lkID0gZ3lyb19zdGF0ZS0+Z3lyb1tjaGFuLT5zY2FuX2luZGV4XS5yZXBvcnRfaWQ7CiAJCWFkZHJlc3MgPSBneXJvXzNkX2FkZHJlc3Nlc1tjaGFuLT5zY2FuX2luZGV4XTsKIAkJaWYgKHJlcG9ydF9pZCA+PSAwKQogCQkJKnZhbCA9IHNlbnNvcl9odWJfaW5wdXRfYXR0cl9nZXRfcmF3X3ZhbHVlKAotCQkJCWd5cm9fc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmhzZGV2LAotCQkJCUhJRF9VU0FHRV9TRU5TT1JfR1lST18zRCwgYWRkcmVzcywKLQkJCQlyZXBvcnRfaWQpOworCQkJCQlneXJvX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5oc2RldiwKKwkJCQkJSElEX1VTQUdFX1NFTlNPUl9HWVJPXzNELCBhZGRyZXNzLAorCQkJCQlyZXBvcnRfaWQpOwogCQllbHNlIHsKIAkJCSp2YWwgPSAwOworCQkJaGlkX3NlbnNvcl9wb3dlcl9zdGF0ZSgmZ3lyb19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsCisJCQkJCQlmYWxzZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZneXJvX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywgZmFsc2UpOwogCQlyZXRfdHlwZSA9IElJT19WQUxfSU5UOwogCQlicmVhazsKIAljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6Ci0JCSp2YWwgPSBneXJvX3N0YXRlLT5neXJvW0NIQU5ORUxfU0NBTl9JTkRFWF9YXS51bml0czsKLQkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVDsKKwkJKnZhbCA9IGd5cm9fc3RhdGUtPnNjYWxlX3ByZV9kZWNtbDsKKwkJKnZhbDIgPSBneXJvX3N0YXRlLT5zY2FsZV9wb3N0X2RlY21sOworCQlyZXRfdHlwZSA9IGd5cm9fc3RhdGUtPnNjYWxlX3ByZWNpc2lvbjsKIAkJYnJlYWs7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX09GRlNFVDoKLQkJKnZhbCA9IGhpZF9zZW5zb3JfY29udmVydF9leHBvbmVudCgKLQkJCWd5cm9fc3RhdGUtPmd5cm9bQ0hBTk5FTF9TQ0FOX0lOREVYX1hdLnVuaXRfZXhwbyk7CisJCSp2YWwgPSBneXJvX3N0YXRlLT52YWx1ZV9vZmZzZXQ7CiAJCXJldF90eXBlID0gSUlPX1ZBTF9JTlQ7CiAJCWJyZWFrOwogCWNhc2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6CkBAIC0xOTcsOSArMjE2LDggQEAKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocHJpdik7CiAJc3RydWN0IGd5cm9fM2Rfc3RhdGUgKmd5cm9fc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJneXJvXzNkX3Byb2NfZXZlbnQgWyVkXVxuIiwKLQkJCQlneXJvX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KTsKLQlpZiAoZ3lyb19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSkKKwlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgImd5cm9fM2RfcHJvY19ldmVudFxuIik7CisJaWYgKGF0b21pY19yZWFkKCZneXJvX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KSkKIAkJaGlkX3NlbnNvcl9wdXNoX2RhdGEoaW5kaW9fZGV2LAogCQkJCWd5cm9fc3RhdGUtPmd5cm9fdmFsLAogCQkJCXNpemVvZihneXJvX3N0YXRlLT5neXJvX3ZhbCkpOwpAQCAtMjYyLDYgKzI4MCwxMSBAQAogCQkJc3QtPmd5cm9bMV0uaW5kZXgsIHN0LT5neXJvWzFdLnJlcG9ydF9pZCwKIAkJCXN0LT5neXJvWzJdLmluZGV4LCBzdC0+Z3lyb1syXS5yZXBvcnRfaWQpOwogCisJc3QtPnNjYWxlX3ByZWNpc2lvbiA9IGhpZF9zZW5zb3JfZm9ybWF0X3NjYWxlKAorCQkJCUhJRF9VU0FHRV9TRU5TT1JfR1lST18zRCwKKwkJCQkmc3QtPmd5cm9bQ0hBTk5FTF9TQ0FOX0lOREVYX1hdLAorCQkJCSZzdC0+c2NhbGVfcHJlX2RlY21sLCAmc3QtPnNjYWxlX3Bvc3RfZGVjbWwpOworCiAJLyogU2V0IFNlbnNpdGl2aXR5IGZpZWxkIGlkcywgd2hlbiB0aGVyZSBpcyBubyBpbmRpdmlkdWFsIG1vZGlmaWVyICovCiAJaWYgKHN0LT5jb21tb25fYXR0cmlidXRlcy5zZW5zaXRpdml0eS5pbmRleCA8IDApIHsKIAkJc2Vuc29yX2h1Yl9pbnB1dF9nZXRfYXR0cmlidXRlX2luZm8oaHNkZXYsCkBAIC0zMzAsNyArMzUzLDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdHJpZ2dlciBidWZmZXJcbiIpOwogCQlnb3RvIGVycm9yX2ZyZWVfZGV2X21lbTsKIAl9Ci0JZ3lyb19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSA9IGZhbHNlOworCWF0b21pY19zZXQoJmd5cm9fc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHksIDApOwogCXJldCA9IGhpZF9zZW5zb3Jfc2V0dXBfdHJpZ2dlcihpbmRpb19kZXYsIG5hbWUsCiAJCQkJCSZneXJvX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CiAJaWYgKHJldCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2d5cm8vaXRnMzIwMF9jb3JlLmMgYi9kcml2ZXJzL2lpby9neXJvL2l0ZzMyMDBfY29yZS5jCmluZGV4IDRkM2YzYjkuLjgyOTVlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2d5cm8vaXRnMzIwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9paW8vZ3lyby9pdGczMjAwX2NvcmUuYwpAQCAtMTEwLDggKzExMCw2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QgaXRnMzIwMF9yZWFkX2ZyZXF1ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9neXJvL3N0X2d5cm9fY29yZS5jIGIvZHJpdmVycy9paW8vZ3lyby9zdF9neXJvX2NvcmUuYwppbmRleCBhOGUxNzRhLi5lZDc0YTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9neXJvL3N0X2d5cm9fY29yZS5jCisrKyBiL2RyaXZlcnMvaWlvL2d5cm8vc3RfZ3lyb19jb3JlLmMKQEAgLTMxMSw2ICszMTEsOCBAQAogCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAlpbmRpb19kZXYtPmluZm8gPSAmZ3lyb19pbmZvOwogCisJc3Rfc2Vuc29yc19wb3dlcl9lbmFibGUoaW5kaW9fZGV2KTsKKwogCWVyciA9IHN0X3NlbnNvcnNfY2hlY2tfZGV2aWNlX3N1cHBvcnQoaW5kaW9fZGV2LAogCQkJCUFSUkFZX1NJWkUoc3RfZ3lyb19zZW5zb3JzKSwgc3RfZ3lyb19zZW5zb3JzKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTM0NCw2ICszNDYsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gc3RfZ3lyb19kZXZpY2VfcmVnaXN0ZXJfZXJyb3I7CiAKKwlkZXZfaW5mbygmaW5kaW9fZGV2LT5kZXYsICJyZWdpc3RlcmVkIGd5cm9zY29wZSAlc1xuIiwKKwkJIGluZGlvX2Rldi0+bmFtZSk7CisKIAlyZXR1cm4gMDsKIAogc3RfZ3lyb19kZXZpY2VfcmVnaXN0ZXJfZXJyb3I6CkBAIC0zNjAsNiArMzY1LDggQEAKIHsKIAlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKmdkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAorCXN0X3NlbnNvcnNfcG93ZXJfZGlzYWJsZShpbmRpb19kZXYpOworCiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKGdkYXRhLT5nZXRfaXJxX2RhdGFfcmVhZHkoaW5kaW9fZGV2KSA+IDApCiAJCXN0X3NlbnNvcnNfZGVhbGxvY2F0ZV90cmlnZ2VyKGluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9paW9fY29yZS5oIGIvZHJpdmVycy9paW8vaWlvX2NvcmUuaAppbmRleCBmNmRiNmFmLi41ZjBlYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9paW9fY29yZS5oCisrKyBiL2RyaXZlcnMvaWlvL2lpb19jb3JlLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmF0dHJfbGlzdCk7CiB2b2lkIGlpb19mcmVlX2NoYW5fZGV2YXR0cl9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmF0dHJfbGlzdCk7CiAKLXNzaXplX3QgaWlvX2Zvcm1hdF92YWx1ZShjaGFyICpidWYsIHVuc2lnbmVkIGludCB0eXBlLCBpbnQgdmFsLCBpbnQgdmFsMik7Citzc2l6ZV90IGlpb19mb3JtYXRfdmFsdWUoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemUsIGludCAqdmFscyk7CiAKIC8qIEV2ZW50IGludGVyZmFjZSBmbGFncyAqLwogI2RlZmluZSBJSU9fQlVTWV9CSVRfUE9TIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2ltdS9pbnZfbXB1NjA1MC9LY29uZmlnIGIvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL0tjb25maWcKaW5kZXggMzYxYjIzMi4uMmQwNjA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL0tjb25maWcKKysrIGIvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL0tjb25maWcKQEAgLTksNiArOSw4IEBACiAJc2VsZWN0IElJT19UUklHR0VSRURfQlVGRkVSCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEludmVuc2Vuc2UgTVBVNjA1MCBkZXZpY2VzLgorCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gc3VwcG9ydCBNUFU2NTAwIGluIE1QVTYwNTAgY29tcGF0aWJpbGl0eSBtb2RlCisJICBhbmQgYWxzbyBpbiBNUFU2NTAwIG1vZGUgd2l0aCBzb21lIGxpbWl0YXRpb25zLgogCSAgSXQgaXMgYSBneXJvc2NvcGUvYWNjZWxlcm9tZXRlciBjb21ibyBkZXZpY2UuCiAJICBUaGlzIGRyaXZlciBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKIAkgIGludi1tcHU2MDUwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL2ludl9tcHVfY29yZS5jIGIvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL2ludl9tcHVfY29yZS5jCmluZGV4IGQ4YWQ2MDYuLjBjNjUxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2ltdS9pbnZfbXB1NjA1MC9pbnZfbXB1X2NvcmUuYworKysgYi9kcml2ZXJzL2lpby9pbXUvaW52X21wdTYwNTAvaW52X21wdV9jb3JlLmMKQEAgLTc2Nyw2ICs3NjcsNyBAQAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaW52X21wdV9pZFtdID0gewogCXsibXB1NjA1MCIsIElOVl9NUFU2MDUwfSwKKwl7Im1wdTY1MDAiLCBJTlZfTVBVNjUwMH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2ltdS9pbnZfbXB1NjA1MC9pbnZfbXB1X2lpby5oIGIvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL2ludl9tcHVfaWlvLmgKaW5kZXggMGFiMzgyYi4uZTc3OTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL2ludl9tcHVfaWlvLmgKKysrIGIvZHJpdmVycy9paW8vaW11L2ludl9tcHU2MDUwL2ludl9tcHVfaWlvLmgKQEAgLTU5LDYgKzU5LDcgQEAKIC8qZGV2aWNlIGVudW0gKi8KIGVudW0gaW52X2RldmljZXMgewogCUlOVl9NUFU2MDUwLAorCUlOVl9NUFU2NTAwLAogCUlOVl9OVU1fUEFSVFMKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYyBiL2RyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYwppbmRleCBlNDcyY2ZmLi4zNmIxYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMKKysrIGIvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jCkBAIC0xNTAsNyArMTUwLDE2IEBACiAJCXR5cGUgPSBJSU9fQkU7CiAjZW5kaWYKIAl9Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXM6JWMlZC8lZD4+JXVcbiIsCisJaWYgKHRoaXNfYXR0ci0+Yy0+c2Nhbl90eXBlLnJlcGVhdCA+IDEpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzOiVjJWQvJWRYJWQ+PiV1XG4iLAorCQkgICAgICAgaWlvX2VuZGlhbl9wcmVmaXhbdHlwZV0sCisJCSAgICAgICB0aGlzX2F0dHItPmMtPnNjYW5fdHlwZS5zaWduLAorCQkgICAgICAgdGhpc19hdHRyLT5jLT5zY2FuX3R5cGUucmVhbGJpdHMsCisJCSAgICAgICB0aGlzX2F0dHItPmMtPnNjYW5fdHlwZS5zdG9yYWdlYml0cywKKwkJICAgICAgIHRoaXNfYXR0ci0+Yy0+c2Nhbl90eXBlLnJlcGVhdCwKKwkJICAgICAgIHRoaXNfYXR0ci0+Yy0+c2Nhbl90eXBlLnNoaWZ0KTsKKwkJZWxzZQorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXM6JWMlZC8lZD4+JXVcbiIsCiAJCSAgICAgICBpaW9fZW5kaWFuX3ByZWZpeFt0eXBlXSwKIAkJICAgICAgIHRoaXNfYXR0ci0+Yy0+c2Nhbl90eXBlLnNpZ24sCiAJCSAgICAgICB0aGlzX2F0dHItPmMtPnNjYW5fdHlwZS5yZWFsYml0cywKQEAgLTQ3NSwxNCArNDg0LDIyIEBACiAJZm9yX2VhY2hfc2V0X2JpdChpLCBtYXNrLAogCQkJIGluZGlvX2Rldi0+bWFza2xlbmd0aCkgewogCQljaCA9IGlpb19maW5kX2NoYW5uZWxfZnJvbV9zaShpbmRpb19kZXYsIGkpOwotCQlsZW5ndGggPSBjaC0+c2Nhbl90eXBlLnN0b3JhZ2ViaXRzIC8gODsKKwkJaWYgKGNoLT5zY2FuX3R5cGUucmVwZWF0ID4gMSkKKwkJCWxlbmd0aCA9IGNoLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMgLyA4ICoKKwkJCQljaC0+c2Nhbl90eXBlLnJlcGVhdDsKKwkJZWxzZQorCQkJbGVuZ3RoID0gY2gtPnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CiAJCWJ5dGVzID0gQUxJR04oYnl0ZXMsIGxlbmd0aCk7CiAJCWJ5dGVzICs9IGxlbmd0aDsKIAl9CiAJaWYgKHRpbWVzdGFtcCkgewogCQljaCA9IGlpb19maW5kX2NoYW5uZWxfZnJvbV9zaShpbmRpb19kZXYsCiAJCQkJCSAgICAgIGluZGlvX2Rldi0+c2Nhbl9pbmRleF90aW1lc3RhbXApOwotCQlsZW5ndGggPSBjaC0+c2Nhbl90eXBlLnN0b3JhZ2ViaXRzIC8gODsKKwkJaWYgKGNoLT5zY2FuX3R5cGUucmVwZWF0ID4gMSkKKwkJCWxlbmd0aCA9IGNoLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMgLyA4ICoKKwkJCQljaC0+c2Nhbl90eXBlLnJlcGVhdDsKKwkJZWxzZQorCQkJbGVuZ3RoID0gY2gtPnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CiAJCWJ5dGVzID0gQUxJR04oYnl0ZXMsIGxlbmd0aCk7CiAJCWJ5dGVzICs9IGxlbmd0aDsKIAl9CkBAIC05NTksNyArOTc2LDExIEBACiAJCQkJCSAgICAgICBpbmRpb19kZXYtPm1hc2tsZW5ndGgsCiAJCQkJCSAgICAgICBpbl9pbmQgKyAxKTsKIAkJCWNoID0gaWlvX2ZpbmRfY2hhbm5lbF9mcm9tX3NpKGluZGlvX2RldiwgaW5faW5kKTsKLQkJCWxlbmd0aCA9IGNoLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMvODsKKwkJCWlmIChjaC0+c2Nhbl90eXBlLnJlcGVhdCA+IDEpCisJCQkJbGVuZ3RoID0gY2gtPnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDggKgorCQkJCQljaC0+c2Nhbl90eXBlLnJlcGVhdDsKKwkJCWVsc2UKKwkJCQlsZW5ndGggPSBjaC0+c2Nhbl90eXBlLnN0b3JhZ2ViaXRzIC8gODsKIAkJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxpZ25lZCAqLwogCQkJaW5fbG9jICs9IGxlbmd0aDsKIAkJCWlmIChpbl9sb2MgJSBsZW5ndGgpCkBAIC05NzEsNyArOTkyLDExIEBACiAJCQlnb3RvIGVycm9yX2NsZWFyX211eF90YWJsZTsKIAkJfQogCQljaCA9IGlpb19maW5kX2NoYW5uZWxfZnJvbV9zaShpbmRpb19kZXYsIGluX2luZCk7Ci0JCWxlbmd0aCA9IGNoLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMvODsKKwkJaWYgKGNoLT5zY2FuX3R5cGUucmVwZWF0ID4gMSkKKwkJCWxlbmd0aCA9IGNoLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMgLyA4ICoKKwkJCQljaC0+c2Nhbl90eXBlLnJlcGVhdDsKKwkJZWxzZQorCQkJbGVuZ3RoID0gY2gtPnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CiAJCWlmIChvdXRfbG9jICUgbGVuZ3RoKQogCQkJb3V0X2xvYyArPSBsZW5ndGggLSBvdXRfbG9jICUgbGVuZ3RoOwogCQlpZiAoaW5fbG9jICUgbGVuZ3RoKQpAQCAtOTkyLDcgKzEwMTcsMTEgQEAKIAkJfQogCQljaCA9IGlpb19maW5kX2NoYW5uZWxfZnJvbV9zaShpbmRpb19kZXYsCiAJCQlpbmRpb19kZXYtPnNjYW5faW5kZXhfdGltZXN0YW1wKTsKLQkJbGVuZ3RoID0gY2gtPnNjYW5fdHlwZS5zdG9yYWdlYml0cy84OworCQlpZiAoY2gtPnNjYW5fdHlwZS5yZXBlYXQgPiAxKQorCQkJbGVuZ3RoID0gY2gtPnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDggKgorCQkJCWNoLT5zY2FuX3R5cGUucmVwZWF0OworCQllbHNlCisJCQlsZW5ndGggPSBjaC0+c2Nhbl90eXBlLnN0b3JhZ2ViaXRzIC8gODsKIAkJaWYgKG91dF9sb2MgJSBsZW5ndGgpCiAJCQlvdXRfbG9jICs9IGxlbmd0aCAtIG91dF9sb2MgJSBsZW5ndGg7CiAJCWlmIChpbl9sb2MgJSBsZW5ndGgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jIGIvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCBlZGUxNmFlYy4uNGIxZjM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYworKysgYi9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC04NCw2ICs4NCw5IEBACiAJW0lJT19NT0RfTElHSFRfUkVEXSA9ICJyZWQiLAogCVtJSU9fTU9EX0xJR0hUX0dSRUVOXSA9ICJncmVlbiIsCiAJW0lJT19NT0RfTElHSFRfQkxVRV0gPSAiYmx1ZSIsCisJW0lJT19NT0RfUVVBVEVSTklPTl0gPSAicXVhdGVybmlvbiIsCisJW0lJT19NT0RfVEVNUF9BTUJJRU5UXSA9ICJhbWJpZW50IiwKKwlbSUlPX01PRF9URU1QX09CSkVDVF0gPSAib2JqZWN0IiwKIH07CiAKIC8qIHJlbGllcyBvbiBwYWlycyBvZiB0aGVzZSBzaGFyZWQgdGhlbiBzZXBhcmF0ZSAqLwpAQCAtMzQwLDcgKzM0Myw3IEBACiAJZWxzZSBpZiAoaSA+PSBlLT5udW1faXRlbXMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGUtPml0ZW1zW2ldKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgZS0+aXRlbXNbaV0pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWlvX2VudW1fcmVhZCk7CiAKQEAgLTM3Myw0MSArMzc2LDUzIEBACiAgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIHdoaWNoIHRoZSBmb3JtYXRlZCB2YWx1ZSBnZXRzIHdyaXR0ZW4KICAqIEB0eXBlOiBPbmUgb2YgdGhlIElJT19WQUxfLi4uIGNvbnN0YW50cy4gVGhpcyBkZWNpZGVzIGhvdyB0aGUgdmFsIGFuZCB2YWwyCiAgKiAgICAgICAgcGFyYW1ldGVycyBhcmUgZm9ybWF0dGVkLgotICogQHZhbDogRmlyc3QgcGFydCBvZiB0aGUgdmFsdWUsIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdHlwZSBwYXJhbWV0ZXIuCi0gKiBAdmFsMjogU2Vjb25kIHBhcnQgb2YgdGhlIHZhbHVlLCBleGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHR5cGUgcGFyYW1ldGVyLgorICogQHZhbHM6IHBvaW50ZXIgdG8gdGhlIHZhbHVlcywgZXhhY3QgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSB0eXBlIHBhcmFtZXRlci4KICAqLwotc3NpemVfdCBpaW9fZm9ybWF0X3ZhbHVlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHR5cGUsIGludCB2YWwsIGludCB2YWwyKQorc3NpemVfdCBpaW9fZm9ybWF0X3ZhbHVlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHR5cGUsIGludCBzaXplLCBpbnQgKnZhbHMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAlib29sIHNjYWxlX2RiID0gZmFsc2U7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIElJT19WQUxfSU5UOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbHNbMF0pOwogCWNhc2UgSUlPX1ZBTF9JTlRfUExVU19NSUNST19EQjoKIAkJc2NhbGVfZGIgPSB0cnVlOwogCWNhc2UgSUlPX1ZBTF9JTlRfUExVU19NSUNSTzoKLQkJaWYgKHZhbDIgPCAwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiLSVsZC4lMDZ1JXNcbiIsIGFicyh2YWwpLCAtdmFsMiwKKwkJaWYgKHZhbHNbMV0gPCAwKQorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiLSVsZC4lMDZ1JXNcbiIsIGFicyh2YWxzWzBdKSwKKwkJCQkJLXZhbHNbMV0sCiAJCQkJc2NhbGVfZGIgPyAiIGRCIiA6ICIiKTsKIAkJZWxzZQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTA2dSVzXG4iLCB2YWwsIHZhbDIsCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDZ1JXNcbiIsIHZhbHNbMF0sIHZhbHNbMV0sCiAJCQkJc2NhbGVfZGIgPyAiIGRCIiA6ICIiKTsKIAljYXNlIElJT19WQUxfSU5UX1BMVVNfTkFOTzoKLQkJaWYgKHZhbDIgPCAwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiLSVsZC4lMDl1XG4iLCBhYnModmFsKSwgLXZhbDIpOworCQlpZiAodmFsc1sxXSA8IDApCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICItJWxkLiUwOXVcbiIsIGFicyh2YWxzWzBdKSwKKwkJCQkJLXZhbHNbMV0pOwogCQllbHNlCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDl1XG4iLCB2YWwsIHZhbDIpOworCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTA5dVxuIiwgdmFsc1swXSwgdmFsc1sxXSk7CiAJY2FzZSBJSU9fVkFMX0ZSQUNUSU9OQUw6Ci0JCXRtcCA9IGRpdl9zNjQoKHM2NCl2YWwgKiAxMDAwMDAwMDAwTEwsIHZhbDIpOwotCQl2YWwyID0gZG9fZGl2KHRtcCwgMTAwMDAwMDAwMExMKTsKLQkJdmFsID0gdG1wOwotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDl1XG4iLCB2YWwsIHZhbDIpOworCQl0bXAgPSBkaXZfczY0KChzNjQpdmFsc1swXSAqIDEwMDAwMDAwMDBMTCwgdmFsc1sxXSk7CisJCXZhbHNbMV0gPSBkb19kaXYodG1wLCAxMDAwMDAwMDAwTEwpOworCQl2YWxzWzBdID0gdG1wOworCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDl1XG4iLCB2YWxzWzBdLCB2YWxzWzFdKTsKIAljYXNlIElJT19WQUxfRlJBQ1RJT05BTF9MT0cyOgotCQl0bXAgPSAoczY0KXZhbCAqIDEwMDAwMDAwMDBMTCA+PiB2YWwyOwotCQl2YWwyID0gZG9fZGl2KHRtcCwgMTAwMDAwMDAwMExMKTsKLQkJdmFsID0gdG1wOwotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDl1XG4iLCB2YWwsIHZhbDIpOworCQl0bXAgPSAoczY0KXZhbHNbMF0gKiAxMDAwMDAwMDAwTEwgPj4gdmFsc1sxXTsKKwkJdmFsc1sxXSA9IGRvX2Rpdih0bXAsIDEwMDAwMDAwMDBMTCk7CisJCXZhbHNbMF0gPSB0bXA7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwOXVcbiIsIHZhbHNbMF0sIHZhbHNbMV0pOworCWNhc2UgSUlPX1ZBTF9JTlRfTVVMVElQTEU6CisJeworCQlpbnQgaTsKKwkJaW50IGxlbiA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKKwkJCWxlbiArPSBzbnByaW50ZigmYnVmW2xlbl0sIFBBR0VfU0laRSAtIGxlbiwgIiVkICIsCisJCQkJCQkJCXZhbHNbaV0pOworCQlsZW4gKz0gc25wcmludGYoJmJ1ZltsZW5dLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCQlyZXR1cm4gbGVuOworCX0KIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC00MTksMTQgKzQzNCwyMyBAQAogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfdG9faWlvX2RldihkZXYpOwogCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlpbnQgdmFsLCB2YWwyOwotCWludCByZXQgPSBpbmRpb19kZXYtPmluZm8tPnJlYWRfcmF3KGluZGlvX2RldiwgdGhpc19hdHRyLT5jLAotCQkJCQkgICAgJnZhbCwgJnZhbDIsIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJaW50IHZhbHNbSU5ESU9fTUFYX1JBV19FTEVNRU5UU107CisJaW50IHJldDsKKwlpbnQgdmFsX2xlbiA9IDI7CisKKwlpZiAoaW5kaW9fZGV2LT5pbmZvLT5yZWFkX3Jhd19tdWx0aSkKKwkJcmV0ID0gaW5kaW9fZGV2LT5pbmZvLT5yZWFkX3Jhd19tdWx0aShpbmRpb19kZXYsIHRoaXNfYXR0ci0+YywKKwkJCQkJCQlJTkRJT19NQVhfUkFXX0VMRU1FTlRTLAorCQkJCQkJCXZhbHMsICZ2YWxfbGVuLAorCQkJCQkJCXRoaXNfYXR0ci0+YWRkcmVzcyk7CisJZWxzZQorCQlyZXQgPSBpbmRpb19kZXYtPmluZm8tPnJlYWRfcmF3KGluZGlvX2RldiwgdGhpc19hdHRyLT5jLAorCQkJCSAgICAmdmFsc1swXSwgJnZhbHNbMV0sIHRoaXNfYXR0ci0+YWRkcmVzcyk7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiBpaW9fZm9ybWF0X3ZhbHVlKGJ1ZiwgcmV0LCB2YWwsIHZhbDIpOworCXJldHVybiBpaW9fZm9ybWF0X3ZhbHVlKGJ1ZiwgcmV0LCB2YWxfbGVuLCB2YWxzKTsKIH0KIAogLyoqCkBAIC03MTYsNiArNzQwLDggQEAKIAlpbnQgaSwgcmV0LCBhdHRyY291bnQgPSAwOwogCiAJZm9yX2VhY2hfc2V0X2JpdChpLCBpbmZvbWFzaywgc2l6ZW9mKGluZm9tYXNrKSo4KSB7CisJCWlmIChpID49IEFSUkFZX1NJWkUoaWlvX2NoYW5faW5mb19wb3N0Zml4KSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlyZXQgPSBfX2lpb19hZGRfY2hhbl9kZXZhdHRyKGlpb19jaGFuX2luZm9fcG9zdGZpeFtpXSwKIAkJCQkJICAgICBjaGFuLAogCQkJCQkgICAgICZpaW9fcmVhZF9jaGFubmVsX2luZm8sCkBAIC04MjAsNyArODQ2LDcgQEAKIAkJCQkgY2hhciAqYnVmKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfdG9faWlvX2RldihkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbmRpb19kZXYtPm5hbWUpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpbmRpb19kZXYtPm5hbWUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgaWlvX3Nob3dfZGV2X25hbWUsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWV2ZW50LmMgYi9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYwppbmRleCBlYTZlMDZiLi4yNThhOTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYworKysgYi9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tZXZlbnQuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiB7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl90b19paW9fZGV2KGRldik7CiAJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCB2YWwsIHZhbDI7CisJaW50IHZhbCwgdmFsMiwgdmFsX2FyclsyXTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaW5kaW9fZGV2LT5pbmZvLT5yZWFkX2V2ZW50X3ZhbHVlKGluZGlvX2RldiwKQEAgLTI3OSw3ICsyNzksOSBAQAogCQkmdmFsLCAmdmFsMik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JcmV0dXJuIGlpb19mb3JtYXRfdmFsdWUoYnVmLCByZXQsIHZhbCwgdmFsMik7CisJdmFsX2FyclswXSA9IHZhbDsKKwl2YWxfYXJyWzFdID0gdmFsMjsKKwlyZXR1cm4gaWlvX2Zvcm1hdF92YWx1ZShidWYsIHJldCwgMiwgdmFsX2Fycik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGlpb19ldl92YWx1ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0zMjEsNyArMzIzLDkgQEAKIAljaGFyICpwb3N0Zml4OwogCWludCByZXQ7CiAKLQlmb3JfZWFjaF9zZXRfYml0KGksIG1hc2ssIHNpemVvZigqbWFzaykpIHsKKwlmb3JfZWFjaF9zZXRfYml0KGksIG1hc2ssIHNpemVvZigqbWFzaykqOCkgeworCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGlpb19ldl9pbmZvX3RleHQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXBvc3RmaXggPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzXyVzXyVzIiwKIAkJCQlpaW9fZXZfdHlwZV90ZXh0W3R5cGVdLCBpaW9fZXZfZGlyX3RleHRbZGlyXSwKIAkJCQlpaW9fZXZfaW5mb190ZXh0W2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2lua2Vybi5jIGIvZHJpdmVycy9paW8vaW5rZXJuLmMKaW5kZXggMGNmNWY4ZS4uZDgzM2Q1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vaW5rZXJuLmMKKysrIGIvZHJpdmVycy9paW8vaW5rZXJuLmMKQEAgLTQxNywxMiArNDE3LDI0IEBACiAJZW51bSBpaW9fY2hhbl9pbmZvX2VudW0gaW5mbykKIHsKIAlpbnQgdW51c2VkOworCWludCB2YWxzW0lORElPX01BWF9SQVdfRUxFTUVOVFNdOworCWludCByZXQ7CisJaW50IHZhbF9sZW4gPSAyOwogCiAJaWYgKHZhbDIgPT0gTlVMTCkKIAkJdmFsMiA9ICZ1bnVzZWQ7CiAKLQlyZXR1cm4gY2hhbi0+aW5kaW9fZGV2LT5pbmZvLT5yZWFkX3JhdyhjaGFuLT5pbmRpb19kZXYsIGNoYW4tPmNoYW5uZWwsCi0JCQkJCQl2YWwsIHZhbDIsIGluZm8pOworCWlmIChjaGFuLT5pbmRpb19kZXYtPmluZm8tPnJlYWRfcmF3X211bHRpKSB7CisJCXJldCA9IGNoYW4tPmluZGlvX2Rldi0+aW5mby0+cmVhZF9yYXdfbXVsdGkoY2hhbi0+aW5kaW9fZGV2LAorCQkJCQljaGFuLT5jaGFubmVsLCBJTkRJT19NQVhfUkFXX0VMRU1FTlRTLAorCQkJCQl2YWxzLCAmdmFsX2xlbiwgaW5mbyk7CisJCSp2YWwgPSB2YWxzWzBdOworCQkqdmFsMiA9IHZhbHNbMV07CisJfSBlbHNlCisJCXJldCA9IGNoYW4tPmluZGlvX2Rldi0+aW5mby0+cmVhZF9yYXcoY2hhbi0+aW5kaW9fZGV2LAorCQkJCQljaGFuLT5jaGFubmVsLCB2YWwsIHZhbDIsIGluZm8pOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGlpb19yZWFkX2NoYW5uZWxfcmF3KHN0cnVjdCBpaW9fY2hhbm5lbCAqY2hhbiwgaW50ICp2YWwpCkBAIC00NDMsNiArNDU1LDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpaW9fcmVhZF9jaGFubmVsX3Jhdyk7CiAKK2ludCBpaW9fcmVhZF9jaGFubmVsX2F2ZXJhZ2VfcmF3KHN0cnVjdCBpaW9fY2hhbm5lbCAqY2hhbiwgaW50ICp2YWwpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoYW4tPmluZGlvX2Rldi0+aW5mb19leGlzdF9sb2NrKTsKKwlpZiAoY2hhbi0+aW5kaW9fZGV2LT5pbmZvID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfdW5sb2NrOworCX0KKworCXJldCA9IGlpb19jaGFubmVsX3JlYWQoY2hhbiwgdmFsLCBOVUxMLCBJSU9fQ0hBTl9JTkZPX0FWRVJBR0VfUkFXKTsKK2Vycl91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjaGFuLT5pbmRpb19kZXYtPmluZm9fZXhpc3RfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWlvX3JlYWRfY2hhbm5lbF9hdmVyYWdlX3Jhdyk7CisKIHN0YXRpYyBpbnQgaWlvX2NvbnZlcnRfcmF3X3RvX3Byb2Nlc3NlZF91bmxvY2tlZChzdHJ1Y3QgaWlvX2NoYW5uZWwgKmNoYW4sCiAJaW50IHJhdywgaW50ICpwcm9jZXNzZWQsIHVuc2lnbmVkIGludCBzY2FsZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2xpZ2h0L2dwMmFwMDIwYTAwZi5jIGIvZHJpdmVycy9paW8vbGlnaHQvZ3AyYXAwMjBhMDBmLmMKaW5kZXggNWVhNGEwMy4uMDRiZGI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vbGlnaHQvZ3AyYXAwMjBhMDBmLmMKKysrIGIvZHJpdmVycy9paW8vbGlnaHQvZ3AyYXAwMjBhMDBmLmMKQEAgLTUsMTMgKzUsMTMgQEAKICAqIElJTyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjoKICAqCiAgKiBSZWFkLW9ubHkgcmF3IGNoYW5uZWxzOgotICogICAtIGlsbGltaW5hbmNlX2NsZWFyIFtsdXhdCi0gKiAgIC0gaWxsaW1pbmFuY2VfaXIKKyAqICAgLSBpbGx1bWluYW5jZV9jbGVhciBbbHV4XQorICogICAtIGlsbHVtaW5hbmNlX2lyCiAgKiAgIC0gcHJveGltaXR5CiAgKgogICogVHJpZ2dlcmVkIGJ1ZmZlcjoKLSAqICAgLSBpbGxpbWluYW5jZV9jbGVhcgotICogICAtIGlsbGltaW5hbmNlX2lyCisgKiAgIC0gaWxsdW1pbmFuY2VfY2xlYXIKKyAqICAgLSBpbGx1bWluYW5jZV9pcgogICogICAtIHByb3hpbWl0eQogICoKICAqIEV2ZW50czoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2xpZ2h0L2hpZC1zZW5zb3ItYWxzLmMgYi9kcml2ZXJzL2lpby9saWdodC9oaWQtc2Vuc29yLWFscy5jCmluZGV4IDYyMTU0MWYuLmYzNGM5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2xpZ2h0L2hpZC1zZW5zb3ItYWxzLmMKKysrIGIvZHJpdmVycy9paW8vbGlnaHQvaGlkLXNlbnNvci1hbHMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZC1zZW5zb3ItaHViLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lpby9zeXNmcy5oPgpAQCAtMzcsNiArMzgsMTAgQEAKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9jb21tb24gY29tbW9uX2F0dHJpYnV0ZXM7CiAJc3RydWN0IGhpZF9zZW5zb3JfaHViX2F0dHJpYnV0ZV9pbmZvIGFsc19pbGx1bTsKIAl1MzIgaWxsdW07CisJaW50IHNjYWxlX3ByZV9kZWNtbDsKKwlpbnQgc2NhbGVfcG9zdF9kZWNtbDsKKwlpbnQgc2NhbGVfcHJlY2lzaW9uOworCWludCB2YWx1ZV9vZmZzZXQ7CiB9OwogCiAvKiBDaGFubmVsIGRlZmluaXRpb25zICovCkBAIC00NSw2ICs1MCw3IEBACiAJCS50eXBlID0gSUlPX0lOVEVOU0lUWSwKIAkJLm1vZGlmaWVkID0gMSwKIAkJLmNoYW5uZWwyID0gSUlPX01PRF9MSUdIVF9CT1RILAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKIAkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX09GRlNFVCkgfAogCQlCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSkgfAogCQlCSVQoSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEpIHwKQEAgLTc1LDYgKzgxLDcgQEAKIAl1MzIgYWRkcmVzczsKIAlpbnQgcmV0OwogCWludCByZXRfdHlwZTsKKwlzMzIgcG9sbF92YWx1ZTsKIAogCSp2YWwgPSAwOwogCSp2YWwyID0gMDsKQEAgLTkwLDI0ICs5NywzNSBAQAogCQkJcmVwb3J0X2lkID0gLTE7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocmVwb3J0X2lkID49IDApCisJCWlmIChyZXBvcnRfaWQgPj0gMCkgeworCQkJcG9sbF92YWx1ZSA9IGhpZF9zZW5zb3JfcmVhZF9wb2xsX3ZhbHVlKAorCQkJCQkJJmFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOworCQkJaWYgKHBvbGxfdmFsdWUgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZhbHNfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLAorCQkJCQkJdHJ1ZSk7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZShwb2xsX3ZhbHVlICogMik7CisKIAkJCSp2YWwgPSBzZW5zb3JfaHViX2lucHV0X2F0dHJfZ2V0X3Jhd192YWx1ZSgKLQkJCQlhbHNfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmhzZGV2LAotCQkJCUhJRF9VU0FHRV9TRU5TT1JfQUxTLCBhZGRyZXNzLAotCQkJCXJlcG9ydF9pZCk7Ci0JCWVsc2UgeworCQkJCQlhbHNfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmhzZGV2LAorCQkJCQlISURfVVNBR0VfU0VOU09SX0FMUywgYWRkcmVzcywKKwkJCQkJcmVwb3J0X2lkKTsKKwkJCWhpZF9zZW5zb3JfcG93ZXJfc3RhdGUoJmFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsCisJCQkJCQlmYWxzZSk7CisJCX0gZWxzZSB7CiAJCQkqdmFsID0gMDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXJldF90eXBlID0gSUlPX1ZBTF9JTlQ7CiAJCWJyZWFrOwogCWNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKLQkJKnZhbCA9IGFsc19zdGF0ZS0+YWxzX2lsbHVtLnVuaXRzOwotCQlyZXRfdHlwZSA9IElJT19WQUxfSU5UOworCQkqdmFsID0gYWxzX3N0YXRlLT5zY2FsZV9wcmVfZGVjbWw7CisJCSp2YWwyID0gYWxzX3N0YXRlLT5zY2FsZV9wb3N0X2RlY21sOworCQlyZXRfdHlwZSA9IGFsc19zdGF0ZS0+c2NhbGVfcHJlY2lzaW9uOwogCQlicmVhazsKIAljYXNlIElJT19DSEFOX0lORk9fT0ZGU0VUOgotCQkqdmFsID0gaGlkX3NlbnNvcl9jb252ZXJ0X2V4cG9uZW50KAotCQkJCWFsc19zdGF0ZS0+YWxzX2lsbHVtLnVuaXRfZXhwbyk7CisJCSp2YWwgPSBhbHNfc3RhdGUtPnZhbHVlX29mZnNldDsKIAkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVDsKIAkJYnJlYWs7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToKQEAgLTE3Niw5ICsxOTQsOCBAQAogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwcml2KTsKIAlzdHJ1Y3QgYWxzX3N0YXRlICphbHNfc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJhbHNfcHJvY19ldmVudCBbJWRdXG4iLAotCQkJCWFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSk7Ci0JaWYgKGFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSkKKwlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgImFsc19wcm9jX2V2ZW50XG4iKTsKKwlpZiAoYXRvbWljX3JlYWQoJmFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSkpCiAJCWhpZF9zZW5zb3JfcHVzaF9kYXRhKGluZGlvX2RldiwKIAkJCQkmYWxzX3N0YXRlLT5pbGx1bSwKIAkJCQlzaXplb2YoYWxzX3N0YXRlLT5pbGx1bSkpOwpAQCAtMjI5LDYgKzI0NiwxMSBAQAogCWRldl9kYmcoJnBkZXYtPmRldiwgImFscyAleDoleFxuIiwgc3QtPmFsc19pbGx1bS5pbmRleCwKIAkJCXN0LT5hbHNfaWxsdW0ucmVwb3J0X2lkKTsKIAorCXN0LT5zY2FsZV9wcmVjaXNpb24gPSBoaWRfc2Vuc29yX2Zvcm1hdF9zY2FsZSgKKwkJCQlISURfVVNBR0VfU0VOU09SX0FMUywKKwkJCQkmc3QtPmFsc19pbGx1bSwKKwkJCQkmc3QtPnNjYWxlX3ByZV9kZWNtbCwgJnN0LT5zY2FsZV9wb3N0X2RlY21sKTsKKwogCS8qIFNldCBTZW5zaXRpdml0eSBmaWVsZCBpZHMsIHdoZW4gdGhlcmUgaXMgbm8gaW5kaXZpZHVhbCBtb2RpZmllciAqLwogCWlmIChzdC0+Y29tbW9uX2F0dHJpYnV0ZXMuc2Vuc2l0aXZpdHkuaW5kZXggPCAwKSB7CiAJCXNlbnNvcl9odWJfaW5wdXRfZ2V0X2F0dHJpYnV0ZV9pbmZvKGhzZGV2LApAQCAtMjk2LDcgKzMxOCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRyaWdnZXIgYnVmZmVyXG4iKTsKIAkJZ290byBlcnJvcl9mcmVlX2Rldl9tZW07CiAJfQotCWFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSA9IGZhbHNlOworCWF0b21pY19zZXQoJmFsc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSwgMCk7CiAJcmV0ID0gaGlkX3NlbnNvcl9zZXR1cF90cmlnZ2VyKGluZGlvX2RldiwgbmFtZSwKIAkJCQkmYWxzX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CiAJaWYgKHJldCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2xpZ2h0L2hpZC1zZW5zb3ItcHJveC5jIGIvZHJpdmVycy9paW8vbGlnaHQvaGlkLXNlbnNvci1wcm94LmMKaW5kZXggMTg5NGFiMS4uZDIwM2VmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vbGlnaHQvaGlkLXNlbnNvci1wcm94LmMKKysrIGIvZHJpdmVycy9paW8vbGlnaHQvaGlkLXNlbnNvci1wcm94LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtc2Vuc29yLWh1Yi5oPgogI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KICNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KQEAgLTc1LDYgKzc2LDcgQEAKIAl1MzIgYWRkcmVzczsKIAlpbnQgcmV0OwogCWludCByZXRfdHlwZTsKKwlzMzIgcG9sbF92YWx1ZTsKIAogCSp2YWwgPSAwOwogCSp2YWwyID0gMDsKQEAgLTkwLDEyICs5MiwyNCBAQAogCQkJcmVwb3J0X2lkID0gLTE7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocmVwb3J0X2lkID49IDApCisJCWlmIChyZXBvcnRfaWQgPj0gMCkgeworCQkJcG9sbF92YWx1ZSA9IGhpZF9zZW5zb3JfcmVhZF9wb2xsX3ZhbHVlKAorCQkJCQkmcHJveF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOworCQkJaWYgKHBvbGxfdmFsdWUgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZwcm94X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywKKwkJCQkJCXRydWUpOworCisJCQltc2xlZXBfaW50ZXJydXB0aWJsZShwb2xsX3ZhbHVlICogMik7CisKIAkJCSp2YWwgPSBzZW5zb3JfaHViX2lucHV0X2F0dHJfZ2V0X3Jhd192YWx1ZSgKIAkJCQlwcm94X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5oc2RldiwKIAkJCQlISURfVVNBR0VfU0VOU09SX1BST1gsIGFkZHJlc3MsCiAJCQkJcmVwb3J0X2lkKTsKLQkJZWxzZSB7CisJCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZwcm94X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywKKwkJCQkJCWZhbHNlKTsKKwkJfSBlbHNlIHsKIAkJCSp2YWwgPSAwOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTE3Niw5ICsxOTAsOCBAQAogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwcml2KTsKIAlzdHJ1Y3QgcHJveF9zdGF0ZSAqcHJveF9zdGF0ZSA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgInByb3hfcHJvY19ldmVudCBbJWRdXG4iLAotCQkJCXByb3hfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkpOwotCWlmIChwcm94X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KQorCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAicHJveF9wcm9jX2V2ZW50XG4iKTsKKwlpZiAoYXRvbWljX3JlYWQoJnByb3hfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkpKQogCQloaWRfc2Vuc29yX3B1c2hfZGF0YShpbmRpb19kZXYsCiAJCQkJJnByb3hfc3RhdGUtPmh1bWFuX3ByZXNlbmNlLAogCQkJCXNpemVvZihwcm94X3N0YXRlLT5odW1hbl9wcmVzZW5jZSkpOwpAQCAtMjk3LDcgKzMxMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRyaWdnZXIgYnVmZmVyXG4iKTsKIAkJZ290byBlcnJvcl9mcmVlX2Rldl9tZW07CiAJfQotCXByb3hfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkgPSBmYWxzZTsKKwlhdG9taWNfc2V0KCZwcm94X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5LCAwKTsKIAlyZXQgPSBoaWRfc2Vuc29yX3NldHVwX3RyaWdnZXIoaW5kaW9fZGV2LCBuYW1lLAogCQkJCSZwcm94X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL0tjb25maWcgYi9kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvS2NvbmZpZwppbmRleCBkODZkMjI2Li4wNWEzNjRjNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9LY29uZmlnCkBAIC0xMSw3ICsxMSw4IEBACiAJZGVwZW5kcyBvbiBHUElPTElCCiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFzYWhpIEthc2VpIEFLODk3NSAzLUF4aXMKLQkgIE1hZ25ldG9tZXRlci4KKwkgIE1hZ25ldG9tZXRlci4gVGhpcyBkcml2ZXIgY2FuIGFsc28gc3VwcG9ydCBBSzg5NjMsIGlmIGkyYworCSAgZGV2aWNlIG5hbWUgaXMgaWRlbnRpZmllZCBhcyBhazg5NjMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFrODk3NS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9hazg5NzUuYyBiL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9hazg5NzUuYwppbmRleCA3NDg2NmQxLi4wOWVhNWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvYWs4OTc1LmMKKysrIGIvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL2FrODk3NS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKICNpbmNsdWRlIDxsaW51eC9paW8vaWlvLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CkBAIC04NSw3ICs4NiwxNCBAQAogI2RlZmluZSBBSzg5NzVfTUFYX0NPTlZFUlNJT05fVElNRU9VVAk1MDAKICNkZWZpbmUgQUs4OTc1X0NPTlZFUlNJT05fRE9ORV9QT0xMX1RJTUUgMTAKICNkZWZpbmUgQUs4OTc1X0RBVEFfUkVBRFlfVElNRU9VVAkoKDEwMCpIWikvMTAwMCkKLSNkZWZpbmUgUkFXX1RPX0dBVVNTKGFzYSkgKCgoKGFzYSkgKyAxMjgpICogMzAwMCkgLyAyNTYpCisjZGVmaW5lIFJBV19UT19HQVVTU184OTc1KGFzYSkgKCgoKGFzYSkgKyAxMjgpICogMzAwMCkgLyAyNTYpCisjZGVmaW5lIFJBV19UT19HQVVTU184OTYzKGFzYSkgKCgoKGFzYSkgKyAxMjgpICogNjAwMCkgLyAyNTYpCisKKy8qIENvbXBhdGlibGUgQXNhaGkgS2FzZWkgQ29tcGFzcyBwYXJ0cyAqLworZW51bSBhc2FoaV9jb21wYXNzX2NoaXBzZXQgeworCUFLODk3NSwKKwlBSzg5NjMsCit9OwogCiAvKgogICogUGVyLWluc3RhbmNlIGNvbnRleHQgZGF0YSBmb3IgdGhlIGRldmljZS4KQEAgLTEwMSw2ICsxMDksNyBAQAogCWludAkJCWVvY19pcnE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJZGF0YV9yZWFkeV9xdWV1ZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwllbnVtIGFzYWhpX2NvbXBhc3NfY2hpcHNldCBjaGlwc2V0OwogfTsKIAogc3RhdGljIGNvbnN0IGludCBhazg5NzVfaW5kZXhfdG9fcmVnW10gPSB7CkBAIC0yNzIsOSArMjgxLDIxIEBACiAgKiBTaW5jZSBBU0EgZG9lc24ndCBjaGFuZ2UsIHdlIGNhY2hlIHRoZSByZXN1bHRhbnQgc2NhbGUgZmFjdG9yIGludG8gdGhlCiAgKiBkZXZpY2UgY29udGV4dCBpbiBhazg5NzVfc2V0dXAoKS4KICAqLwotCWRhdGEtPnJhd190b19nYXVzc1swXSA9IFJBV19UT19HQVVTUyhkYXRhLT5hc2FbMF0pOwotCWRhdGEtPnJhd190b19nYXVzc1sxXSA9IFJBV19UT19HQVVTUyhkYXRhLT5hc2FbMV0pOwotCWRhdGEtPnJhd190b19nYXVzc1syXSA9IFJBV19UT19HQVVTUyhkYXRhLT5hc2FbMl0pOworCWlmIChkYXRhLT5jaGlwc2V0ID09IEFLODk2MykgeworCQkvKgorCQkgKiBIIHJhbmdlIGlzICstODE5MCBhbmQgbWFnbmV0b21ldGVyIHJhbmdlIGlzICstNDkxMi4KKwkJICogU28gSHVUIHVzaW5nIHRoZSBhYm92ZSBleHBsYW5hdGlvbiBmb3IgODk3NSwKKwkJICogNDkxMi84MTkwID0gfiA2LzEwLgorCQkgKiBTbyB0aGUgSGFkaiBzaG91bGQgdXNlIDYvMTAgaW5zdGVhZCBvZiAzLzEwLgorCQkgKi8KKwkJZGF0YS0+cmF3X3RvX2dhdXNzWzBdID0gUkFXX1RPX0dBVVNTXzg5NjMoZGF0YS0+YXNhWzBdKTsKKwkJZGF0YS0+cmF3X3RvX2dhdXNzWzFdID0gUkFXX1RPX0dBVVNTXzg5NjMoZGF0YS0+YXNhWzFdKTsKKwkJZGF0YS0+cmF3X3RvX2dhdXNzWzJdID0gUkFXX1RPX0dBVVNTXzg5NjMoZGF0YS0+YXNhWzJdKTsKKwl9IGVsc2UgeworCQlkYXRhLT5yYXdfdG9fZ2F1c3NbMF0gPSBSQVdfVE9fR0FVU1NfODk3NShkYXRhLT5hc2FbMF0pOworCQlkYXRhLT5yYXdfdG9fZ2F1c3NbMV0gPSBSQVdfVE9fR0FVU1NfODk3NShkYXRhLT5hc2FbMV0pOworCQlkYXRhLT5yYXdfdG9fZ2F1c3NbMl0gPSBSQVdfVE9fR0FVU1NfODk3NShkYXRhLT5hc2FbMl0pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDU1LDYgKzQ3NiwyNyBAQAogCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGFrX2FjcGlfbWF0Y2hbXSA9IHsKKwl7IkFLODk3NSIsIEFLODk3NX0sCisJeyJBSzg5NjMiLCBBSzg5NjN9LAorCXsiSU5WTjY1MDAiLCBBSzg5NjN9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGFrX2FjcGlfbWF0Y2gpOworCitzdGF0aWMgY2hhciAqYWs4OTc1X21hdGNoX2FjcGlfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQllbnVtIGFzYWhpX2NvbXBhc3NfY2hpcHNldCAqY2hpcHNldCkKK3sKKwljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkOworCisJaWQgPSBhY3BpX21hdGNoX2RldmljZShkZXYtPmRyaXZlci0+YWNwaV9tYXRjaF90YWJsZSwgZGV2KTsKKwlpZiAoIWlkKQorCQlyZXR1cm4gTlVMTDsKKwkqY2hpcHNldCA9IChpbnQpaWQtPmRyaXZlcl9kYXRhOworCisJcmV0dXJuIChjaGFyICopZGV2X25hbWUoZGV2KTsKK30KKwogc3RhdGljIGludCBhazg5NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ2Miw2ICs1MDQsNyBAQAogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CiAJaW50IGVvY19ncGlvOwogCWludCBlcnI7CisJY2hhciAqbmFtZSA9IE5VTEw7CiAKIAkvKiBHcmFiIGFuZCBzZXQgdXAgdGhlIHN1cHBsaWVkIEdQSU8uICovCiAJaWYgKGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpCkBAIC00OTksNiArNTQyLDE5IEBACiAJZGF0YS0+ZW9jX2dwaW8gPSBlb2NfZ3BpbzsKIAlkYXRhLT5lb2NfaXJxID0gMDsKIAorCS8qIGlkIHdpbGwgYmUgTlVMTCB3aGVuIGVudW1lcmF0ZWQgdmlhIEFDUEkgKi8KKwlpZiAoaWQpIHsKKwkJZGF0YS0+Y2hpcHNldCA9CisJCQkoZW51bSBhc2FoaV9jb21wYXNzX2NoaXBzZXQpKGlkLT5kcml2ZXJfZGF0YSk7CisJCW5hbWUgPSAoY2hhciAqKSBpZC0+bmFtZTsKKwl9IGVsc2UgaWYgKEFDUElfSEFORExFKCZjbGllbnQtPmRldikpCisJCW5hbWUgPSBhazg5NzVfbWF0Y2hfYWNwaV9kZXZpY2UoJmNsaWVudC0+ZGV2LCAmZGF0YS0+Y2hpcHNldCk7CisJZWxzZSB7CisJCWVyciA9IC1FTk9TWVM7CisJCWdvdG8gZXhpdF9mcmVlX2lpbzsKKwl9CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJBc2FoaSBjb21wYXNzIGNoaXAgJXNcbiIsIG5hbWUpOworCiAJLyogUGVyZm9ybSBzb21lIGJhc2ljIHN0YXJ0LW9mLWRheSBzZXR1cCBvZiB0aGUgZGV2aWNlLiAqLwogCWVyciA9IGFrODk3NV9zZXR1cChjbGllbnQpOwogCWlmIChlcnIgPCAwKSB7CkBAIC01MTMsOSArNTY5LDggQEAKIAlpbmRpb19kZXYtPmNoYW5uZWxzID0gYWs4OTc1X2NoYW5uZWxzOwogCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhazg5NzVfY2hhbm5lbHMpOwogCWluZGlvX2Rldi0+aW5mbyA9ICZhazg5NzVfaW5mbzsKLQlpbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKIAlpbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0KKwlpbmRpb19kZXYtPm5hbWUgPSBuYW1lOwogCWVyciA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBleGl0X2ZyZWVfaWlvOwpAQCAtNTUyLDcgKzYwNyw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhazg5NzVfaWRbXSA9IHsKLQl7ImFrODk3NSIsIDB9LAorCXsiYWs4OTc1IiwgQUs4OTc1fSwKKwl7ImFrODk2MyIsIEFLODk2M30sCiAJe30KIH07CiAKQEAgLTU2OSw2ICs2MjUsNyBAQAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImFrODk3NSIsCiAJCS5vZl9tYXRjaF90YWJsZSA9IGFrODk3NV9vZl9tYXRjaCwKKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihha19hY3BpX21hdGNoKSwKIAl9LAogCS5wcm9iZQkJPSBhazg5NzVfcHJvYmUsCiAJLnJlbW92ZQkJPSBhazg5NzVfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL2hpZC1zZW5zb3ItbWFnbi0zZC5jIGIvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL2hpZC1zZW5zb3ItbWFnbi0zZC5jCmluZGV4IDZkMTYyYjcuLjQxY2YyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9oaWQtc2Vuc29yLW1hZ24tM2QuYworKysgYi9kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvaGlkLXNlbnNvci1tYWduLTNkLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtc2Vuc29yLWh1Yi5oPgogI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KICNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KQEAgLTQyLDYgKzQzLDEwIEBACiAJc3RydWN0IGhpZF9zZW5zb3JfY29tbW9uIGNvbW1vbl9hdHRyaWJ1dGVzOwogCXN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9hdHRyaWJ1dGVfaW5mbyBtYWduW01BR05fM0RfQ0hBTk5FTF9NQVhdOwogCXUzMiBtYWduX3ZhbFtNQUdOXzNEX0NIQU5ORUxfTUFYXTsKKwlpbnQgc2NhbGVfcHJlX2RlY21sOworCWludCBzY2FsZV9wb3N0X2RlY21sOworCWludCBzY2FsZV9wcmVjaXNpb247CisJaW50IHZhbHVlX29mZnNldDsKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgbWFnbl8zZF9hZGRyZXNzZXNbTUFHTl8zRF9DSEFOTkVMX01BWF0gPSB7CkBAIC01Niw2ICs2MSw3IEBACiAJCS50eXBlID0gSUlPX01BR04sCiAJCS5tb2RpZmllZCA9IDEsCiAJCS5jaGFubmVsMiA9IElJT19NT0RfWCwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCiAJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSB8CkBAIC02NSw2ICs3MSw3IEBACiAJCS50eXBlID0gSUlPX01BR04sCiAJCS5tb2RpZmllZCA9IDEsCiAJCS5jaGFubmVsMiA9IElJT19NT0RfWSwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCiAJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSB8CkBAIC03NCw2ICs4MSw3IEBACiAJCS50eXBlID0gSUlPX01BR04sCiAJCS5tb2RpZmllZCA9IDEsCiAJCS5jaGFubmVsMiA9IElJT19NT0RfWiwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCiAJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwKIAkJQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSB8CkBAIC0xMDQsMTEgKzExMiwyMCBAQAogCXUzMiBhZGRyZXNzOwogCWludCByZXQ7CiAJaW50IHJldF90eXBlOworCXMzMiBwb2xsX3ZhbHVlOwogCiAJKnZhbCA9IDA7CiAJKnZhbDIgPSAwOwogCXN3aXRjaCAobWFzaykgewogCWNhc2UgMDoKKwkJcG9sbF92YWx1ZSA9IGhpZF9zZW5zb3JfcmVhZF9wb2xsX3ZhbHVlKAorCQkJCQkmbWFnbl9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOworCQlpZiAocG9sbF92YWx1ZSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaGlkX3NlbnNvcl9wb3dlcl9zdGF0ZSgmbWFnbl9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsIHRydWUpOworCQltc2xlZXBfaW50ZXJydXB0aWJsZShwb2xsX3ZhbHVlICogMik7CisKIAkJcmVwb3J0X2lkID0KIAkJCW1hZ25fc3RhdGUtPm1hZ25bY2hhbi0+c2Nhbl9pbmRleF0ucmVwb3J0X2lkOwogCQlhZGRyZXNzID0gbWFnbl8zZF9hZGRyZXNzZXNbY2hhbi0+c2Nhbl9pbmRleF07CkBAIC0xMTksMTcgKzEzNiwyMCBAQAogCQkJCXJlcG9ydF9pZCk7CiAJCWVsc2UgewogCQkJKnZhbCA9IDA7CisJCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZtYWduX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywKKwkJCQkJCWZhbHNlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCWhpZF9zZW5zb3JfcG93ZXJfc3RhdGUoJm1hZ25fc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLCBmYWxzZSk7CiAJCXJldF90eXBlID0gSUlPX1ZBTF9JTlQ7CiAJCWJyZWFrOwogCWNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKLQkJKnZhbCA9IG1hZ25fc3RhdGUtPm1hZ25bQ0hBTk5FTF9TQ0FOX0lOREVYX1hdLnVuaXRzOwotCQlyZXRfdHlwZSA9IElJT19WQUxfSU5UOworCQkqdmFsID0gbWFnbl9zdGF0ZS0+c2NhbGVfcHJlX2RlY21sOworCQkqdmFsMiA9IG1hZ25fc3RhdGUtPnNjYWxlX3Bvc3RfZGVjbWw7CisJCXJldF90eXBlID0gbWFnbl9zdGF0ZS0+c2NhbGVfcHJlY2lzaW9uOwogCQlicmVhazsKIAljYXNlIElJT19DSEFOX0lORk9fT0ZGU0VUOgotCQkqdmFsID0gaGlkX3NlbnNvcl9jb252ZXJ0X2V4cG9uZW50KAotCQkJbWFnbl9zdGF0ZS0+bWFnbltDSEFOTkVMX1NDQU5fSU5ERVhfWF0udW5pdF9leHBvKTsKKwkJKnZhbCA9IG1hZ25fc3RhdGUtPnZhbHVlX29mZnNldDsKIAkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVDsKIAkJYnJlYWs7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToKQEAgLTE5OCw5ICsyMTgsOCBAQAogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwcml2KTsKIAlzdHJ1Y3QgbWFnbl8zZF9zdGF0ZSAqbWFnbl9zdGF0ZSA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgIm1hZ25fM2RfcHJvY19ldmVudCBbJWRdXG4iLAotCQkJCW1hZ25fc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkpOwotCWlmIChtYWduX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KQorCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAibWFnbl8zZF9wcm9jX2V2ZW50XG4iKTsKKwlpZiAoYXRvbWljX3JlYWQoJm1hZ25fc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkpKQogCQloaWRfc2Vuc29yX3B1c2hfZGF0YShpbmRpb19kZXYsCiAJCQkJbWFnbl9zdGF0ZS0+bWFnbl92YWwsCiAJCQkJc2l6ZW9mKG1hZ25fc3RhdGUtPm1hZ25fdmFsKSk7CkBAIC0yNjMsNiArMjgyLDExIEBACiAJCQlzdC0+bWFnblsxXS5pbmRleCwgc3QtPm1hZ25bMV0ucmVwb3J0X2lkLAogCQkJc3QtPm1hZ25bMl0uaW5kZXgsIHN0LT5tYWduWzJdLnJlcG9ydF9pZCk7CiAKKwlzdC0+c2NhbGVfcHJlY2lzaW9uID0gaGlkX3NlbnNvcl9mb3JtYXRfc2NhbGUoCisJCQkJSElEX1VTQUdFX1NFTlNPUl9DT01QQVNTXzNELAorCQkJCSZzdC0+bWFnbltDSEFOTkVMX1NDQU5fSU5ERVhfWF0sCisJCQkJJnN0LT5zY2FsZV9wcmVfZGVjbWwsICZzdC0+c2NhbGVfcG9zdF9kZWNtbCk7CisKIAkvKiBTZXQgU2Vuc2l0aXZpdHkgZmllbGQgaWRzLCB3aGVuIHRoZXJlIGlzIG5vIGluZGl2aWR1YWwgbW9kaWZpZXIgKi8KIAlpZiAoc3QtPmNvbW1vbl9hdHRyaWJ1dGVzLnNlbnNpdGl2aXR5LmluZGV4IDwgMCkgewogCQlzZW5zb3JfaHViX2lucHV0X2dldF9hdHRyaWJ1dGVfaW5mbyhoc2RldiwKQEAgLTMzNCw3ICszNTgsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmlnZ2VyIGJ1ZmZlclxuIik7CiAJCWdvdG8gZXJyb3JfZnJlZV9kZXZfbWVtOwogCX0KLQltYWduX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5ID0gZmFsc2U7CisJYXRvbWljX3NldCgmbWFnbl9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSwgMCk7CiAJcmV0ID0gaGlkX3NlbnNvcl9zZXR1cF90cmlnZ2VyKGluZGlvX2RldiwgbmFtZSwKIAkJCQkJJm1hZ25fc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzKTsKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL21hZzMxMTAuYyBiL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9tYWczMTEwLmMKaW5kZXggOGI3Nzc4Mi4uZTMxMDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL21hZzMxMTAuYworKysgYi9kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvbWFnMzExMC5jCkBAIC0xOTksNiArMTk5LDEzIEBACiAJCSp2YWwgPSBtYWczMTEwX3NhbXBfZnJlcVtpXVswXTsKIAkJKnZhbDIgPSBtYWczMTEwX3NhbXBfZnJlcVtpXVsxXTsKIAkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJY2FzZSBJSU9fQ0hBTl9JTkZPX0NBTElCQklBUzoKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwKKwkJCU1BRzMxMTBfT0ZGX1ggKwkyICogY2hhbi0+c2Nhbl9pbmRleCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnZhbCA9IHNpZ25fZXh0ZW5kMzIocmV0ID4+IDEsIDE0KTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIyMyw2ICsyMzAsMTEgQEAKIAkJZGF0YS0+Y3RybF9yZWcxIHw9IHJhdGUgPDwgTUFHMzExMF9DVFJMX0RSX1NISUZUOwogCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsCiAJCQlNQUczMTEwX0NUUkxfUkVHMSwgZGF0YS0+Y3RybF9yZWcxKTsKKwljYXNlIElJT19DSEFOX0lORk9fQ0FMSUJCSUFTOgorCQlpZiAodmFsIDwgLTEwMDAwIHx8IHZhbCA+IDEwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwKKwkJCU1BRzMxMTBfT0ZGX1ggKyAyICogY2hhbi0+c2Nhbl9pbmRleCwgdmFsIDw8IDEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2MCw3ICsyNzIsOCBAQAogCS50eXBlID0gSUlPX01BR04sIFwKIAkubW9kaWZpZWQgPSAxLCBcCiAJLmNoYW5uZWwyID0gSUlPX01PRF8jI2F4aXMsIFwKLQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwgXAorCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpIHwgXAorCQlCSVQoSUlPX0NIQU5fSU5GT19DQUxJQkJJQVMpLCBcCiAJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSkgfCBcCiAJCUJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwgXAogCS5zY2FuX2luZGV4ID0gaWR4LCBcCkBAIC0zMzgsMTQgKzM1MSwxNCBAQAogCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYWczMTEwX2NoYW5uZWxzKTsKIAlpbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzID0gbWFnMzExMF9zY2FuX21hc2tzOwogCi0JZGF0YS0+Y3RybF9yZWcxID0gTUFHMzExMF9DVFJMX0RSX0RFRkFVTFQ7CisJZGF0YS0+Y3RybF9yZWcxID0gTUFHMzExMF9DVFJMX0RSX0RFRkFVTFQgPDwgTUFHMzExMF9DVFJMX0RSX1NISUZUOwogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQUczMTEwX0NUUkxfUkVHMSwKIAkJZGF0YS0+Y3RybF9yZWcxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQUczMTEwX0NUUkxfUkVHMiwKLQkJTUFHMzExMF9DVFJMX0FVVE9fTVJTVF9FTiB8IE1BRzMxMTBfQ1RSTF9SQVcpOworCQlNQUczMTEwX0NUUkxfQVVUT19NUlNUX0VOKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL3N0X21hZ25fY29yZS5jIGIvZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL3N0X21hZ25fY29yZS5jCmluZGV4IDUyYmJjZmEuLjI0MGEyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9zdF9tYWduX2NvcmUuYworKysgYi9kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvc3RfbWFnbl9jb3JlLmMKQEAgLTM1NSw2ICszNTUsOCBAQAogCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAlpbmRpb19kZXYtPmluZm8gPSAmbWFnbl9pbmZvOwogCisJc3Rfc2Vuc29yc19wb3dlcl9lbmFibGUoaW5kaW9fZGV2KTsKKwogCWVyciA9IHN0X3NlbnNvcnNfY2hlY2tfZGV2aWNlX3N1cHBvcnQoaW5kaW9fZGV2LAogCQkJCUFSUkFZX1NJWkUoc3RfbWFnbl9zZW5zb3JzKSwgc3RfbWFnbl9zZW5zb3JzKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTM4Nyw2ICszODksOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gc3RfbWFnbl9kZXZpY2VfcmVnaXN0ZXJfZXJyb3I7CiAKKwlkZXZfaW5mbygmaW5kaW9fZGV2LT5kZXYsICJyZWdpc3RlcmVkIG1hZ25ldG9tZXRlciAlc1xuIiwKKwkJIGluZGlvX2Rldi0+bmFtZSk7CisKIAlyZXR1cm4gMDsKIAogc3RfbWFnbl9kZXZpY2VfcmVnaXN0ZXJfZXJyb3I6CkBAIC00MDMsNiArNDA4LDggQEAKIHsKIAlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKm1kYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAorCXN0X3NlbnNvcnNfcG93ZXJfZGlzYWJsZShpbmRpb19kZXYpOworCiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKG1kYXRhLT5nZXRfaXJxX2RhdGFfcmVhZHkoaW5kaW9fZGV2KSA+IDApCiAJCXN0X3NlbnNvcnNfZGVhbGxvY2F0ZV90cmlnZ2VyKGluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9vcmllbnRhdGlvbi9LY29uZmlnIGIvZHJpdmVycy9paW8vb3JpZW50YXRpb24vS2NvbmZpZwppbmRleCA1OGM2MmM4Li5lM2FhMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9vcmllbnRhdGlvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWlvL29yaWVudGF0aW9uL0tjb25maWcKQEAgLTE2LDQgKzE2LDE2IEBACiAJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIEhJRCBTRU5TT1IKIAkgIEluY2xpbm9tZXRlciAzRC4KIAorY29uZmlnIEhJRF9TRU5TT1JfREVWSUNFX1JPVEFUSU9OCisJZGVwZW5kcyBvbiBISURfU0VOU09SX0hVQgorCXNlbGVjdCBJSU9fQlVGRkVSCisJc2VsZWN0IElJT19UUklHR0VSRURfQlVGRkVSCisJc2VsZWN0IEhJRF9TRU5TT1JfSUlPX0NPTU1PTgorCXNlbGVjdCBISURfU0VOU09SX0lJT19UUklHR0VSCisJdHJpc3RhdGUgIkhJRCBEZXZpY2UgUm90YXRpb24iCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBISUQgU0VOU09SCisJICBkZXZpY2Ugcm90YXRpb24uIFRoZSBvdXRwdXQgb2YgYSBkZXZpY2Ugcm90YXRpb24gc2Vuc29yCisJICBpcyBwcmVzZW50ZWQgdXNpbmcgcXVhdGVybmlvbiBmb3JtYXQuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL29yaWVudGF0aW9uL01ha2VmaWxlIGIvZHJpdmVycy9paW8vb3JpZW50YXRpb24vTWFrZWZpbGUKaW5kZXggMmM5NzU3Mi4uNDczNGRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vb3JpZW50YXRpb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9paW8vb3JpZW50YXRpb24vTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiAKICMgV2hlbiBhZGRpbmcgbmV3IGVudHJpZXMga2VlcCB0aGUgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIKIG9iai0kKENPTkZJR19ISURfU0VOU09SX0lOQ0xJTk9NRVRFUl8zRCkgKz0gaGlkLXNlbnNvci1pbmNsLTNkLm8KK29iai0kKENPTkZJR19ISURfU0VOU09SX0RFVklDRV9ST1RBVElPTikgKz0gaGlkLXNlbnNvci1yb3RhdGlvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9vcmllbnRhdGlvbi9oaWQtc2Vuc29yLWluY2wtM2QuYyBiL2RyaXZlcnMvaWlvL29yaWVudGF0aW9uL2hpZC1zZW5zb3ItaW5jbC0zZC5jCmluZGV4IDA3MGZlYWIuLjI0NzhmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL29yaWVudGF0aW9uL2hpZC1zZW5zb3ItaW5jbC0zZC5jCisrKyBiL2RyaXZlcnMvaWlvL29yaWVudGF0aW9uL2hpZC1zZW5zb3ItaW5jbC0zZC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLXNlbnNvci1odWIuaD4KICNpbmNsdWRlIDxsaW51eC9paW8vaWlvLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CkBAIC00Miw2ICs0MywxMCBAQAogCXN0cnVjdCBoaWRfc2Vuc29yX2NvbW1vbiBjb21tb25fYXR0cmlidXRlczsKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfYXR0cmlidXRlX2luZm8gaW5jbFtJTkNMSV8zRF9DSEFOTkVMX01BWF07CiAJdTMyIGluY2xfdmFsW0lOQ0xJXzNEX0NIQU5ORUxfTUFYXTsKKwlpbnQgc2NhbGVfcHJlX2RlY21sOworCWludCBzY2FsZV9wb3N0X2RlY21sOworCWludCBzY2FsZV9wcmVjaXNpb247CisJaW50IHZhbHVlX29mZnNldDsKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgaW5jbF8zZF9hZGRyZXNzZXNbSU5DTElfM0RfQ0hBTk5FTF9NQVhdID0gewpAQCAtMTA2LDExICsxMTEsMjAgQEAKIAlpbnQgcmVwb3J0X2lkID0gLTE7CiAJdTMyIGFkZHJlc3M7CiAJaW50IHJldF90eXBlOworCXMzMiBwb2xsX3ZhbHVlOwogCiAJKnZhbCA9IDA7CiAJKnZhbDIgPSAwOwogCXN3aXRjaCAobWFzaykgewogCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CisJCXBvbGxfdmFsdWUgPSBoaWRfc2Vuc29yX3JlYWRfcG9sbF92YWx1ZSgKKwkJCQkJJmluY2xfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzKTsKKwkJaWYgKHBvbGxfdmFsdWUgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaGlkX3NlbnNvcl9wb3dlcl9zdGF0ZSgmaW5jbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsIHRydWUpOworCQltc2xlZXBfaW50ZXJydXB0aWJsZShwb2xsX3ZhbHVlICogMik7CisKIAkJcmVwb3J0X2lkID0KIAkJCWluY2xfc3RhdGUtPmluY2xbY2hhbi0+c2Nhbl9pbmRleF0ucmVwb3J0X2lkOwogCQlhZGRyZXNzID0gaW5jbF8zZF9hZGRyZXNzZXNbY2hhbi0+c2Nhbl9pbmRleF07CkBAIC0xMjAsMTcgKzEzNCwyMCBAQAogCQkJCUhJRF9VU0FHRV9TRU5TT1JfSU5DTElOT01FVEVSXzNELCBhZGRyZXNzLAogCQkJCXJlcG9ydF9pZCk7CiAJCWVsc2UgeworCQkJaGlkX3NlbnNvcl9wb3dlcl9zdGF0ZSgmaW5jbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsCisJCQkJCQlmYWxzZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZpbmNsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywgZmFsc2UpOwogCQlyZXRfdHlwZSA9IElJT19WQUxfSU5UOwogCQlicmVhazsKIAljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6Ci0JCSp2YWwgPSBpbmNsX3N0YXRlLT5pbmNsW0NIQU5ORUxfU0NBTl9JTkRFWF9YXS51bml0czsKLQkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVDsKKwkJKnZhbCA9IGluY2xfc3RhdGUtPnNjYWxlX3ByZV9kZWNtbDsKKwkJKnZhbDIgPSBpbmNsX3N0YXRlLT5zY2FsZV9wb3N0X2RlY21sOworCQlyZXRfdHlwZSA9IGluY2xfc3RhdGUtPnNjYWxlX3ByZWNpc2lvbjsKIAkJYnJlYWs7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX09GRlNFVDoKLQkJKnZhbCA9IGhpZF9zZW5zb3JfY29udmVydF9leHBvbmVudCgKLQkJCWluY2xfc3RhdGUtPmluY2xbQ0hBTk5FTF9TQ0FOX0lOREVYX1hdLnVuaXRfZXhwbyk7CisJCSp2YWwgPSBpbmNsX3N0YXRlLT52YWx1ZV9vZmZzZXQ7CiAJCXJldF90eXBlID0gSUlPX1ZBTF9JTlQ7CiAJCWJyZWFrOwogCWNhc2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6CkBAIC0xOTYsOSArMjEzLDggQEAKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocHJpdik7CiAJc3RydWN0IGluY2xfM2Rfc3RhdGUgKmluY2xfc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJpbmNsXzNkX3Byb2NfZXZlbnQgWyVkXVxuIiwKLQkJCQlpbmNsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KTsKLQlpZiAoaW5jbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSkKKwlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgImluY2xfM2RfcHJvY19ldmVudFxuIik7CisJaWYgKGF0b21pY19yZWFkKCZpbmNsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KSkKIAkJaGlkX3NlbnNvcl9wdXNoX2RhdGEoaW5kaW9fZGV2LAogCQkJCSh1OCAqKWluY2xfc3RhdGUtPmluY2xfdmFsLAogCQkJCXNpemVvZihpbmNsX3N0YXRlLT5pbmNsX3ZhbCkpOwpAQCAtMjc5LDYgKzI5NSwxMSBAQAogCQkJc3QtPmluY2xbMV0uaW5kZXgsIHN0LT5pbmNsWzFdLnJlcG9ydF9pZCwKIAkJCXN0LT5pbmNsWzJdLmluZGV4LCBzdC0+aW5jbFsyXS5yZXBvcnRfaWQpOwogCisJc3QtPnNjYWxlX3ByZWNpc2lvbiA9IGhpZF9zZW5zb3JfZm9ybWF0X3NjYWxlKAorCQkJCUhJRF9VU0FHRV9TRU5TT1JfSU5DTElOT01FVEVSXzNELAorCQkJCSZzdC0+aW5jbFtDSEFOTkVMX1NDQU5fSU5ERVhfWF0sCisJCQkJJnN0LT5zY2FsZV9wcmVfZGVjbWwsICZzdC0+c2NhbGVfcG9zdF9kZWNtbCk7CisKIAkvKiBTZXQgU2Vuc2l0aXZpdHkgZmllbGQgaWRzLCB3aGVuIHRoZXJlIGlzIG5vIGluZGl2aWR1YWwgbW9kaWZpZXIgKi8KIAlpZiAoc3QtPmNvbW1vbl9hdHRyaWJ1dGVzLnNlbnNpdGl2aXR5LmluZGV4IDwgMCkgewogCQlzZW5zb3JfaHViX2lucHV0X2dldF9hdHRyaWJ1dGVfaW5mbyhoc2RldiwKQEAgLTM0OSw3ICszNzAsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmlnZ2VyIGJ1ZmZlclxuIik7CiAJCWdvdG8gZXJyb3JfZnJlZV9kZXZfbWVtOwogCX0KLQlpbmNsX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5ID0gZmFsc2U7CisJYXRvbWljX3NldCgmaW5jbF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSwgMCk7CiAJcmV0ID0gaGlkX3NlbnNvcl9zZXR1cF90cmlnZ2VyKGluZGlvX2RldiwgbmFtZSwKIAkJCQkJJmluY2xfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9vcmllbnRhdGlvbi9oaWQtc2Vuc29yLXJvdGF0aW9uLmMgYi9kcml2ZXJzL2lpby9vcmllbnRhdGlvbi9oaWQtc2Vuc29yLXJvdGF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjZjg0OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWlvL29yaWVudGF0aW9uL2hpZC1zZW5zb3Itcm90YXRpb24uYwpAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIEhJRCBTZW5zb3JzIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQtc2Vuc29yLWh1Yi5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJfY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vdHJpZ2dlcmVkX2J1ZmZlci5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi9oaWQtc2Vuc29ycy9oaWQtc2Vuc29yLXRyaWdnZXIuaCIKKworc3RydWN0IGRldl9yb3Rfc3RhdGUgeworCXN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9jYWxsYmFja3MgY2FsbGJhY2tzOworCXN0cnVjdCBoaWRfc2Vuc29yX2NvbW1vbiBjb21tb25fYXR0cmlidXRlczsKKwlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfYXR0cmlidXRlX2luZm8gcXVhdGVybmlvbjsKKwl1MzIgc2FtcGxlZF92YWxzWzRdOworfTsKKworLyogQ2hhbm5lbCBkZWZpbml0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIGRldl9yb3RfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS50eXBlID0gSUlPX1JPVCwKKwkJLm1vZGlmaWVkID0gMSwKKwkJLmNoYW5uZWwyID0gSUlPX01PRF9RVUFURVJOSU9OLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKKwkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSkgfAorCQkJCQlCSVQoSUlPX0NIQU5fSU5GT19IWVNURVJFU0lTKQorCX0KK307CisKKy8qIEFkanVzdCBjaGFubmVsIHJlYWwgYml0cyBiYXNlZCBvbiByZXBvcnQgZGVzY3JpcHRvciAqLworc3RhdGljIHZvaWQgZGV2X3JvdF9hZGp1c3RfY2hhbm5lbF9iaXRfbWFzayhzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbiwKKwkJCQkJCWludCBzaXplKQoreworCWNoYW4tPnNjYW5fdHlwZS5zaWduID0gJ3MnOworCS8qIFJlYWwgc3RvcmFnZSBiaXRzIHdpbGwgY2hhbmdlIGJhc2VkIG9uIHRoZSByZXBvcnQgZGVzYy4gKi8KKwljaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMgPSBzaXplICogODsKKwkvKiBNYXhpbXVtIHNpemUgb2YgYSBzYW1wbGUgdG8gY2FwdHVyZSBpcyB1MzIgKi8KKwljaGFuLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMgPSBzaXplb2YodTMyKSAqIDg7CisJY2hhbi0+c2Nhbl90eXBlLnJlcGVhdCA9IDQ7Cit9CisKKy8qIENoYW5uZWwgcmVhZF9yYXcgaGFuZGxlciAqLworc3RhdGljIGludCBkZXZfcm90X3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkJaW50IHNpemUsIGludCAqdmFscywgaW50ICp2YWxfbGVuLAorCQkJCWxvbmcgbWFzaykKK3sKKwlzdHJ1Y3QgZGV2X3JvdF9zdGF0ZSAqcm90X3N0YXRlID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpbnQgcmV0X3R5cGU7CisJaW50IGk7CisKKwl2YWxzWzBdID0gMDsKKwl2YWxzWzFdID0gMDsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CisJCWlmIChzaXplID49IDQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCQkJdmFsc1tpXSA9IHJvdF9zdGF0ZS0+c2FtcGxlZF92YWxzW2ldOworCQkJcmV0X3R5cGUgPSBJSU9fVkFMX0lOVF9NVUxUSVBMRTsKKwkJCSp2YWxfbGVuID0gIDQ7CisJCX0gZWxzZQorCQkJcmV0X3R5cGUgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROgorCQlyZXRfdHlwZSA9IGhpZF9zZW5zb3JfcmVhZF9zYW1wX2ZyZXFfdmFsdWUoCisJCQkmcm90X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywgJnZhbHNbMF0sICZ2YWxzWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJSU9fQ0hBTl9JTkZPX0hZU1RFUkVTSVM6CisJCXJldF90eXBlID0gaGlkX3NlbnNvcl9yZWFkX3Jhd19oeXN0X3ZhbHVlKAorCQkJJnJvdF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsICZ2YWxzWzBdLCAmdmFsc1sxXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldF90eXBlID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldF90eXBlOworfQorCisvKiBDaGFubmVsIHdyaXRlX3JhdyBoYW5kbGVyICovCitzdGF0aWMgaW50IGRldl9yb3Rfd3JpdGVfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgICAgaW50IHZhbCwKKwkJCSAgICAgICBpbnQgdmFsMiwKKwkJCSAgICAgICBsb25nIG1hc2spCit7CisJc3RydWN0IGRldl9yb3Rfc3RhdGUgKnJvdF9zdGF0ZSA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IHJldDsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6CisJCXJldCA9IGhpZF9zZW5zb3Jfd3JpdGVfc2FtcF9mcmVxX3ZhbHVlKAorCQkJCSZyb3Rfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLCB2YWwsIHZhbDIpOworCQlicmVhazsKKwljYXNlIElJT19DSEFOX0lORk9fSFlTVEVSRVNJUzoKKwkJcmV0ID0gaGlkX3NlbnNvcl93cml0ZV9yYXdfaHlzdF92YWx1ZSgKKwkJCQkmcm90X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcywgdmFsLCB2YWwyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGRldl9yb3RfaW5mbyA9IHsKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5yZWFkX3Jhd19tdWx0aSA9ICZkZXZfcm90X3JlYWRfcmF3LAorCS53cml0ZV9yYXcgPSAmZGV2X3JvdF93cml0ZV9yYXcsCit9OworCisvKiBGdW5jdGlvbiB0byBwdXNoIGRhdGEgdG8gYnVmZmVyICovCitzdGF0aWMgdm9pZCBoaWRfc2Vuc29yX3B1c2hfZGF0YShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgImhpZF9zZW5zb3JfcHVzaF9kYXRhID4+XG4iKTsKKwlpaW9fcHVzaF90b19idWZmZXJzKGluZGlvX2RldiwgKHU4ICopZGF0YSk7CisJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJoaWRfc2Vuc29yX3B1c2hfZGF0YSA8PFxuIik7CisKK30KKworLyogQ2FsbGJhY2sgaGFuZGxlciB0byBzZW5kIGV2ZW50IGFmdGVyIGFsbCBzYW1wbGVzIGFyZSByZWNlaXZlZCBhbmQgY2FwdHVyZWQgKi8KK3N0YXRpYyBpbnQgZGV2X3JvdF9wcm9jX2V2ZW50KHN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9kZXZpY2UgKmhzZGV2LAorCQkJCXVuc2lnbmVkIHVzYWdlX2lkLAorCQkJCXZvaWQgKnByaXYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHByaXYpOworCXN0cnVjdCBkZXZfcm90X3N0YXRlICpyb3Rfc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCisJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJkZXZfcm90X3Byb2NfZXZlbnRcbiIpOworCWlmIChhdG9taWNfcmVhZCgmcm90X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5KSkKKwkJaGlkX3NlbnNvcl9wdXNoX2RhdGEoaW5kaW9fZGV2LAorCQkJCSh1OCAqKXJvdF9zdGF0ZS0+c2FtcGxlZF92YWxzLAorCQkJCXNpemVvZihyb3Rfc3RhdGUtPnNhbXBsZWRfdmFscykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIENhcHR1cmUgc2FtcGxlcyBpbiBsb2NhbCBzdG9yYWdlICovCitzdGF0aWMgaW50IGRldl9yb3RfY2FwdHVyZV9zYW1wbGUoc3RydWN0IGhpZF9zZW5zb3JfaHViX2RldmljZSAqaHNkZXYsCisJCQkJdW5zaWduZWQgdXNhZ2VfaWQsCisJCQkJc2l6ZV90IHJhd19sZW4sIGNoYXIgKnJhd19kYXRhLAorCQkJCXZvaWQgKnByaXYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHByaXYpOworCXN0cnVjdCBkZXZfcm90X3N0YXRlICpyb3Rfc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCisJaWYgKHVzYWdlX2lkID09IEhJRF9VU0FHRV9TRU5TT1JfT1JJRU5UX1FVQVRFUk5JT04pIHsKKwkJbWVtY3B5KHJvdF9zdGF0ZS0+c2FtcGxlZF92YWxzLCByYXdfZGF0YSwKKwkJCQkJc2l6ZW9mKHJvdF9zdGF0ZS0+c2FtcGxlZF92YWxzKSk7CisJCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiUmVjZCBRdWF0IGxlbjolenU6OiV6dVxuIiwgcmF3X2xlbiwKKwkJCQkJc2l6ZW9mKHJvdF9zdGF0ZS0+c2FtcGxlZF92YWxzKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFBhcnNlIHJlcG9ydCB3aGljaCBpcyBzcGVjaWZpYyB0byBhbiB1c2FnZSBpZCovCitzdGF0aWMgaW50IGRldl9yb3RfcGFyc2VfcmVwb3J0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJc3RydWN0IGhpZF9zZW5zb3JfaHViX2RldmljZSAqaHNkZXYsCisJCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW5uZWxzLAorCQkJCXVuc2lnbmVkIHVzYWdlX2lkLAorCQkJCXN0cnVjdCBkZXZfcm90X3N0YXRlICpzdCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2Vuc29yX2h1Yl9pbnB1dF9nZXRfYXR0cmlidXRlX2luZm8oaHNkZXYsCisJCQkJSElEX0lOUFVUX1JFUE9SVCwKKwkJCQl1c2FnZV9pZCwKKwkJCQlISURfVVNBR0VfU0VOU09SX09SSUVOVF9RVUFURVJOSU9OLAorCQkJCSZzdC0+cXVhdGVybmlvbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9yb3RfYWRqdXN0X2NoYW5uZWxfYml0X21hc2soJmNoYW5uZWxzWzBdLAorCQlzdC0+cXVhdGVybmlvbi5zaXplIC8gNCk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJkZXZfcm90ICV4OiV4XG4iLCBzdC0+cXVhdGVybmlvbi5pbmRleCwKKwkJc3QtPnF1YXRlcm5pb24ucmVwb3J0X2lkKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImRldl9yb3Q6IGF0dHJpYiBzaXplICVkXG4iLAorCQkJCXN0LT5xdWF0ZXJuaW9uLnNpemUpOworCisJLyogU2V0IFNlbnNpdGl2aXR5IGZpZWxkIGlkcywgd2hlbiB0aGVyZSBpcyBubyBpbmRpdmlkdWFsIG1vZGlmaWVyICovCisJaWYgKHN0LT5jb21tb25fYXR0cmlidXRlcy5zZW5zaXRpdml0eS5pbmRleCA8IDApIHsKKwkJc2Vuc29yX2h1Yl9pbnB1dF9nZXRfYXR0cmlidXRlX2luZm8oaHNkZXYsCisJCQlISURfRkVBVFVSRV9SRVBPUlQsIHVzYWdlX2lkLAorCQkJSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTIHwKKwkJCUhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTiwKKwkJCSZzdC0+Y29tbW9uX2F0dHJpYnV0ZXMuc2Vuc2l0aXZpdHkpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJTZW5zaXRpdml0eSBpbmRleDpyZXBvcnQgJWQ6JWRcbiIsCisJCQlzdC0+Y29tbW9uX2F0dHJpYnV0ZXMuc2Vuc2l0aXZpdHkuaW5kZXgsCisJCQlzdC0+Y29tbW9uX2F0dHJpYnV0ZXMuc2Vuc2l0aXZpdHkucmVwb3J0X2lkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgcHJvY2Vzc2luZyBmb3IgdXNhZ2UgaWQgKi8KK3N0YXRpYyBpbnQgaGlkX2Rldl9yb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0YXRpYyBjaGFyICpuYW1lID0gImRldl9yb3RhdGlvbiI7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKKwlzdHJ1Y3QgZGV2X3JvdF9zdGF0ZSAqcm90X3N0YXRlOworCXN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9kZXZpY2UgKmhzZGV2ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW5uZWxzOworCisJaW5kaW9fZGV2ID0gZGV2bV9paW9fZGV2aWNlX2FsbG9jKCZwZGV2LT5kZXYsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBkZXZfcm90X3N0YXRlKSk7CisJaWYgKGluZGlvX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZGlvX2Rldik7CisKKwlyb3Rfc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCXJvdF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuaHNkZXYgPSBoc2RldjsKKwlyb3Rfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLnBkZXYgPSBwZGV2OworCisJcmV0ID0gaGlkX3NlbnNvcl9wYXJzZV9jb21tb25fYXR0cmlidXRlcyhoc2RldiwKKwkJCQlISURfVVNBR0VfU0VOU09SX0RFVklDRV9PUklFTlRBVElPTiwKKwkJCQkmcm90X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgY29tbW9uIGF0dHJpYnV0ZXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNoYW5uZWxzID0gZGV2bV9rbWVtZHVwKCZwZGV2LT5kZXYsIGRldl9yb3RfY2hhbm5lbHMsCisJCQkJCXNpemVvZihkZXZfcm90X2NoYW5uZWxzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGFubmVscykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZHVwbGljYXRlIGNoYW5uZWxzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gZGV2X3JvdF9wYXJzZV9yZXBvcnQocGRldiwgaHNkZXYsIGNoYW5uZWxzLAorCQkJSElEX1VTQUdFX1NFTlNPUl9ERVZJQ0VfT1JJRU5UQVRJT04sIHJvdF9zdGF0ZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgYXR0cmlidXRlc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaW5kaW9fZGV2LT5jaGFubmVscyA9IGNoYW5uZWxzOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShkZXZfcm90X2NoYW5uZWxzKTsKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWluZGlvX2Rldi0+aW5mbyA9ICZkZXZfcm90X2luZm87CisJaW5kaW9fZGV2LT5uYW1lID0gbmFtZTsKKwlpbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisKKwlyZXQgPSBpaW9fdHJpZ2dlcmVkX2J1ZmZlcl9zZXR1cChpbmRpb19kZXYsICZpaW9fcG9sbGZ1bmNfc3RvcmVfdGltZSwKKwkJTlVMTCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmlnZ2VyIGJ1ZmZlclxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWF0b21pY19zZXQoJnJvdF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSwgMCk7CisJcmV0ID0gaGlkX3NlbnNvcl9zZXR1cF90cmlnZ2VyKGluZGlvX2RldiwgbmFtZSwKKwkJCQkJJnJvdF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidHJpZ2dlciBzZXR1cCBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yX3VucmVnX2J1ZmZlcl9mdW5jczsKKwl9CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcl9yZW1vdmVfdHJpZ2dlcjsKKwl9CisKKwlyb3Rfc3RhdGUtPmNhbGxiYWNrcy5zZW5kX2V2ZW50ID0gZGV2X3JvdF9wcm9jX2V2ZW50OworCXJvdF9zdGF0ZS0+Y2FsbGJhY2tzLmNhcHR1cmVfc2FtcGxlID0gZGV2X3JvdF9jYXB0dXJlX3NhbXBsZTsKKwlyb3Rfc3RhdGUtPmNhbGxiYWNrcy5wZGV2ID0gcGRldjsKKwlyZXQgPSBzZW5zb3JfaHViX3JlZ2lzdGVyX2NhbGxiYWNrKGhzZGV2LAorCQkJCQlISURfVVNBR0VfU0VOU09SX0RFVklDRV9PUklFTlRBVElPTiwKKwkJCQkJJnJvdF9zdGF0ZS0+Y2FsbGJhY2tzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbGxiYWNrIHJlZyBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yX2lpb191bnJlZzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3JfaWlvX3VucmVnOgorCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworZXJyb3JfcmVtb3ZlX3RyaWdnZXI6CisJaGlkX3NlbnNvcl9yZW1vdmVfdHJpZ2dlcigmcm90X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CitlcnJvcl91bnJlZ19idWZmZXJfZnVuY3M6CisJaWlvX3RyaWdnZXJlZF9idWZmZXJfY2xlYW51cChpbmRpb19kZXYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEZ1bmN0aW9uIHRvIGRlaW5pdGlhbGl6ZSB0aGUgcHJvY2Vzc2luZyBmb3IgdXNhZ2UgaWQgKi8KK3N0YXRpYyBpbnQgaGlkX2Rldl9yb3RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGhpZF9zZW5zb3JfaHViX2RldmljZSAqaHNkZXYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRldl9yb3Rfc3RhdGUgKnJvdF9zdGF0ZSA9IGlpb19wcml2KGluZGlvX2Rldik7CisKKwlzZW5zb3JfaHViX3JlbW92ZV9jYWxsYmFjayhoc2RldiwgSElEX1VTQUdFX1NFTlNPUl9ERVZJQ0VfT1JJRU5UQVRJT04pOworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCWhpZF9zZW5zb3JfcmVtb3ZlX3RyaWdnZXIoJnJvdF9zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOworCWlpb190cmlnZ2VyZWRfYnVmZmVyX2NsZWFudXAoaW5kaW9fZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBoaWRfZGV2X3JvdF9pZHNbXSA9IHsKKwl7CisJCS8qIEZvcm1hdDogSElELVNFTlNPUi11c2FnZV9pZF9pbl9oZXhfbG93ZXJjYXNlICovCisJCS5uYW1lID0gIkhJRC1TRU5TT1ItMjAwMDhhIiwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIGhpZF9kZXZfcm90X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhpZF9kZXZfcm90X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBoaWRfZGV2X3JvdF9pZHMsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBLQlVJTERfTU9ETkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gaGlkX2Rldl9yb3RfcHJvYmUsCisJLnJlbW92ZQkJPSBoaWRfZGV2X3JvdF9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihoaWRfZGV2X3JvdF9wbGF0Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkhJRCBTZW5zb3IgRGV2aWNlIFJvdGF0aW9uIik7CitNT0RVTEVfQVVUSE9SKCJTcmluaXZhcyBQYW5kcnV2YWRhIDxzcmluaXZhcy5wYW5kcnV2YWRhQGxpbnV4LmludGVsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3ByZXNzdXJlL0tjb25maWcgYi9kcml2ZXJzL2lpby9wcmVzc3VyZS9LY29uZmlnCmluZGV4IGQ4OGZmMTcuLmZmYWM4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL3ByZXNzdXJlL0tjb25maWcKKysrIGIvZHJpdmVycy9paW8vcHJlc3N1cmUvS2NvbmZpZwpAQCAtMTksNiArMTksMTYgQEAKICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgaGlkLXNlbnNvci1wcmVzcy4KIAorY29uZmlnIE1QTDExNQorCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBMMTE1QTIgcHJlc3N1cmUgc2Vuc29yIGRyaXZlciIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QTDExNUEyCisJICBwcmVzc3VyZSBzZW5zb3IgY29ubmVjdGVkIHZpYSBJMkMuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgbXBsMTE1LgorCiBjb25maWcgTVBMMzExNQogCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBMMzExNUEyIHByZXNzdXJlIHNlbnNvciBkcml2ZXIiCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3ByZXNzdXJlL01ha2VmaWxlIGIvZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUKaW5kZXggNGE1N2JmNi4uYzUzZDI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKICMgV2hlbiBhZGRpbmcgbmV3IGVudHJpZXMga2VlcCB0aGUgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIKIG9iai0kKENPTkZJR19ISURfU0VOU09SX1BSRVNTKSAgICs9IGhpZC1zZW5zb3ItcHJlc3Mubworb2JqLSQoQ09ORklHX01QTDExNSkgKz0gbXBsMTE1Lm8KIG9iai0kKENPTkZJR19NUEwzMTE1KSArPSBtcGwzMTE1Lm8KIG9iai0kKENPTkZJR19JSU9fU1RfUFJFU1MpICs9IHN0X3ByZXNzdXJlLm8KIHN0X3ByZXNzdXJlLXkgOj0gc3RfcHJlc3N1cmVfY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9wcmVzc3VyZS9oaWQtc2Vuc29yLXByZXNzLmMgYi9kcml2ZXJzL2lpby9wcmVzc3VyZS9oaWQtc2Vuc29yLXByZXNzLmMKaW5kZXggZTBlNjQwOS4uMWNkMTkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vcHJlc3N1cmUvaGlkLXNlbnNvci1wcmVzcy5jCisrKyBiL2RyaXZlcnMvaWlvL3ByZXNzdXJlL2hpZC1zZW5zb3ItcHJlc3MuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZC1zZW5zb3ItaHViLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lpby9zeXNmcy5oPgpAQCAtMzYsNiArMzcsMTAgQEAKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9jb21tb24gY29tbW9uX2F0dHJpYnV0ZXM7CiAJc3RydWN0IGhpZF9zZW5zb3JfaHViX2F0dHJpYnV0ZV9pbmZvIHByZXNzX2F0dHI7CiAJdTMyIHByZXNzX2RhdGE7CisJaW50IHNjYWxlX3ByZV9kZWNtbDsKKwlpbnQgc2NhbGVfcG9zdF9kZWNtbDsKKwlpbnQgc2NhbGVfcHJlY2lzaW9uOworCWludCB2YWx1ZV9vZmZzZXQ7CiB9OwogCiAvKiBDaGFubmVsIGRlZmluaXRpb25zICovCkBAIC03NSw2ICs4MCw3IEBACiAJdTMyIGFkZHJlc3M7CiAJaW50IHJldDsKIAlpbnQgcmV0X3R5cGU7CisJczMyIHBvbGxfdmFsdWU7CiAKIAkqdmFsID0gMDsKIAkqdmFsMiA9IDA7CkBAIC05MCwyNCArOTYsMzUgQEAKIAkJCXJlcG9ydF9pZCA9IC0xOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKHJlcG9ydF9pZCA+PSAwKQorCQlpZiAocmVwb3J0X2lkID49IDApIHsKKwkJCXBvbGxfdmFsdWUgPSBoaWRfc2Vuc29yX3JlYWRfcG9sbF92YWx1ZSgKKwkJCQkJJnByZXNzX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcyk7CisJCQlpZiAocG9sbF92YWx1ZSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZwcmVzc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsCisJCQkJCQl0cnVlKTsKKworCQkJbXNsZWVwX2ludGVycnVwdGlibGUocG9sbF92YWx1ZSAqIDIpOworCiAJCQkqdmFsID0gc2Vuc29yX2h1Yl9pbnB1dF9hdHRyX2dldF9yYXdfdmFsdWUoCiAJCQkJcHJlc3Nfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmhzZGV2LAogCQkJCUhJRF9VU0FHRV9TRU5TT1JfUFJFU1NVUkUsIGFkZHJlc3MsCiAJCQkJcmVwb3J0X2lkKTsKLQkJZWxzZSB7CisJCQloaWRfc2Vuc29yX3Bvd2VyX3N0YXRlKCZwcmVzc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMsCisJCQkJCQlmYWxzZSk7CisJCX0gZWxzZSB7CiAJCQkqdmFsID0gMDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXJldF90eXBlID0gSUlPX1ZBTF9JTlQ7CiAJCWJyZWFrOwogCWNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKLQkJKnZhbCA9IHByZXNzX3N0YXRlLT5wcmVzc19hdHRyLnVuaXRzOwotCQlyZXRfdHlwZSA9IElJT19WQUxfSU5UOworCQkqdmFsID0gcHJlc3Nfc3RhdGUtPnNjYWxlX3ByZV9kZWNtbDsKKwkJKnZhbDIgPSBwcmVzc19zdGF0ZS0+c2NhbGVfcG9zdF9kZWNtbDsKKwkJcmV0X3R5cGUgPSBwcmVzc19zdGF0ZS0+c2NhbGVfcHJlY2lzaW9uOwogCQlicmVhazsKIAljYXNlIElJT19DSEFOX0lORk9fT0ZGU0VUOgotCQkqdmFsID0gaGlkX3NlbnNvcl9jb252ZXJ0X2V4cG9uZW50KAotCQkJCXByZXNzX3N0YXRlLT5wcmVzc19hdHRyLnVuaXRfZXhwbyk7CisJCSp2YWwgPSBwcmVzc19zdGF0ZS0+dmFsdWVfb2Zmc2V0OwogCQlyZXRfdHlwZSA9IElJT19WQUxfSU5UOwogCQlicmVhazsKIAljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROgpAQCAtMTc2LDkgKzE5Myw4IEBACiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHByaXYpOwogCXN0cnVjdCBwcmVzc19zdGF0ZSAqcHJlc3Nfc3RhdGUgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICJwcmVzc19wcm9jX2V2ZW50IFslZF1cbiIsCi0JCQkJcHJlc3Nfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkpOwotCWlmIChwcmVzc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSkKKwlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgInByZXNzX3Byb2NfZXZlbnRcbiIpOworCWlmIChhdG9taWNfcmVhZCgmcHJlc3Nfc3RhdGUtPmNvbW1vbl9hdHRyaWJ1dGVzLmRhdGFfcmVhZHkpKQogCQloaWRfc2Vuc29yX3B1c2hfZGF0YShpbmRpb19kZXYsCiAJCQkJJnByZXNzX3N0YXRlLT5wcmVzc19kYXRhLAogCQkJCXNpemVvZihwcmVzc19zdGF0ZS0+cHJlc3NfZGF0YSkpOwpAQCAtMjI5LDYgKzI0NSwxMSBAQAogCWRldl9kYmcoJnBkZXYtPmRldiwgInByZXNzICV4OiV4XG4iLCBzdC0+cHJlc3NfYXR0ci5pbmRleCwKIAkJCXN0LT5wcmVzc19hdHRyLnJlcG9ydF9pZCk7CiAKKwlzdC0+c2NhbGVfcHJlY2lzaW9uID0gaGlkX3NlbnNvcl9mb3JtYXRfc2NhbGUoCisJCQkJSElEX1VTQUdFX1NFTlNPUl9QUkVTU1VSRSwKKwkJCQkmc3QtPnByZXNzX2F0dHIsCisJCQkJJnN0LT5zY2FsZV9wcmVfZGVjbWwsICZzdC0+c2NhbGVfcG9zdF9kZWNtbCk7CisKIAkvKiBTZXQgU2Vuc2l0aXZpdHkgZmllbGQgaWRzLCB3aGVuIHRoZXJlIGlzIG5vIGluZGl2aWR1YWwgbW9kaWZpZXIgKi8KIAlpZiAoc3QtPmNvbW1vbl9hdHRyaWJ1dGVzLnNlbnNpdGl2aXR5LmluZGV4IDwgMCkgewogCQlzZW5zb3JfaHViX2lucHV0X2dldF9hdHRyaWJ1dGVfaW5mbyhoc2RldiwKQEAgLTI5OCw3ICszMTksNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmlnZ2VyIGJ1ZmZlclxuIik7CiAJCWdvdG8gZXJyb3JfZnJlZV9kZXZfbWVtOwogCX0KLQlwcmVzc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMuZGF0YV9yZWFkeSA9IGZhbHNlOworCWF0b21pY19zZXQoJnByZXNzX3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5kYXRhX3JlYWR5LCAwKTsKIAlyZXQgPSBoaWRfc2Vuc29yX3NldHVwX3RyaWdnZXIoaW5kaW9fZGV2LCBuYW1lLAogCQkJCSZwcmVzc19zdGF0ZS0+Y29tbW9uX2F0dHJpYnV0ZXMpOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3ByZXNzdXJlL21wbDExNS5jIGIvZHJpdmVycy9paW8vcHJlc3N1cmUvbXBsMTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlY2Q2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWlvL3ByZXNzdXJlL21wbDExNS5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogbXBsMTE1LmMgLSBTdXBwb3J0IGZvciBGcmVlc2NhbGUgTVBMMTE1QTIgcHJlc3N1cmUvdGVtcGVyYXR1cmUgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFBldGVyIE1lZXJ3YWxkIDxwbWVlcndAcG1lZXJ3Lm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdmVyc2lvbiAyIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbgorICogZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICg3LWJpdCBJMkMgc2xhdmUgYWRkcmVzcyAweDYwKQorICoKKyAqIFRPRE86IHNodXRkb3duIHBpbgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgTVBMMTE1X1BBREMgMHgwMCAvKiBwcmVzc3VyZSBBREMgb3V0cHV0IHZhbHVlLCBNU0IgZmlyc3QsIDEwIGJpdCAqLworI2RlZmluZSBNUEwxMTVfVEFEQyAweDAyIC8qIHRlbXBlcmF0dXJlIEFEQyBvdXRwdXQgdmFsdWUsIE1TQiBmaXJzdCwgMTAgYml0ICovCisjZGVmaW5lIE1QTDExNV9BMCAweDA0IC8qIDEyIGJpdCBpbnRlZ2VyLCAzIGJpdCBmcmFjdGlvbiAqLworI2RlZmluZSBNUEwxMTVfQjEgMHgwNiAvKiAyIGJpdCBpbnRlZ2VyLCAxMyBiaXQgZnJhY3Rpb24gKi8KKyNkZWZpbmUgTVBMMTE1X0IyIDB4MDggLyogMSBiaXQgaW50ZWdlciwgMTQgYml0IGZyYWN0aW9uICovCisjZGVmaW5lIE1QTDExNV9DMTIgMHgwYSAvKiAwIGJpdCBpbnRlZ2VyLCAxMyBiaXQgZnJhY3Rpb24gKi8KKyNkZWZpbmUgTVBMMTE1X0NPTlZFUlQgMHgxMiAvKiBjb252ZXJ0IHRlbXBlcmF0dXJlIGFuZCBwcmVzc3VyZSAqLworCitzdHJ1Y3QgbXBsMTE1X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG11dGV4IGxvY2s7CisJczE2IGEwOworCXMxNiBiMSwgYjI7CisJczE2IGMxMjsKK307CisKK3N0YXRpYyBpbnQgbXBsMTE1X3JlcXVlc3Qoc3RydWN0IG1wbDExNV9kYXRhICpkYXRhKQoreworCWludCByZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgTVBMMTE1X0NPTlZFUlQsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBsMTE1X2NvbXBfcHJlc3N1cmUoc3RydWN0IG1wbDExNV9kYXRhICpkYXRhLCBpbnQgKnZhbCwgaW50ICp2YWwyKQoreworCWludCByZXQ7CisJdTE2IHBhZGMsIHRhZGM7CisJaW50IGExLCB5MSwgcGNvbXA7CisJdW5zaWduZWQga3BhOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJcmV0ID0gbXBsMTE1X3JlcXVlc3QoZGF0YSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZG9uZTsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChkYXRhLT5jbGllbnQsIE1QTDExNV9QQURDKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBkb25lOworCXBhZGMgPSByZXQgPj4gNjsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChkYXRhLT5jbGllbnQsIE1QTDExNV9UQURDKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBkb25lOworCXRhZGMgPSByZXQgPj4gNjsKKworCS8qIHNlZSBGcmVlc2NhbGUgQU4zNzg1ICovCisJYTEgPSBkYXRhLT5iMSArICgoZGF0YS0+YzEyICogdGFkYykgPj4gMTEpOworCXkxID0gKGRhdGEtPmEwIDw8IDEwKSArIGExICogcGFkYzsKKworCS8qIGNvbXBlbnNhdGVkIHByZXNzdXJlIHdpdGggNCBmcmFjdGlvbmFsIGJpdHMgKi8KKwlwY29tcCA9ICh5MSArICgoZGF0YS0+YjIgKiAoaW50KSB0YWRjKSA+PiAxKSkgPj4gOTsKKworCWtwYSA9IHBjb21wICogKDExNSAtIDUwKSAvIDEwMjMgKyAoNTAgPDwgNCk7CisJKnZhbCA9IGtwYSA+PiA0OworCSp2YWwyID0gKGtwYSAmIDE1KSAqICgxMDAwMDAwID4+IDQpOworZG9uZToKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXBsMTE1X3JlYWRfdGVtcChzdHJ1Y3QgbXBsMTE1X2RhdGEgKmRhdGEpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCXJldCA9IG1wbDExNV9yZXF1ZXN0KGRhdGEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGRvbmU7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwgTVBMMTE1X1RBREMpOworZG9uZToKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXBsMTE1X3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgaW50ICp2YWwsIGludCAqdmFsMiwgbG9uZyBtYXNrKQoreworCXN0cnVjdCBtcGwxMTVfZGF0YSAqZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IHJldDsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgSUlPX0NIQU5fSU5GT19QUk9DRVNTRUQ6CisJCXJldCA9IG1wbDExNV9jb21wX3ByZXNzdXJlKGRhdGEsIHZhbCwgdmFsMik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoKKwkJLyogdGVtcGVyYXR1cmUgLTUuMzUgQyAvIExTQiwgNDcyIExTQiBpcyAyNSBDICovCisJCXJldCA9IG1wbDExNV9yZWFkX3RlbXAoZGF0YSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnZhbCA9IHJldCA+PiA2OworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJY2FzZSBJSU9fQ0hBTl9JTkZPX09GRlNFVDoKKwkJKnZhbCA9IDYwNTsKKwkJKnZhbDIgPSA3NTAwMDA7CisJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCWNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKKwkJKnZhbCA9IC0xODY7CisJCSp2YWwyID0gOTE1ODg4OworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtcGwxMTVfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS50eXBlID0gSUlPX1BSRVNTVVJFLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUFJPQ0VTU0VEKSwKKwl9LAorCXsKKwkJLnR5cGUgPSBJSU9fVEVNUCwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCisJCQlCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpIHwgQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIG1wbDExNV9pbmZvID0geworCS5yZWFkX3JhdyA9ICZtcGwxMTVfcmVhZF9yYXcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXBsMTE1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBtcGwxMTVfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OworCWludCByZXQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbmRpb19kZXYgPSBkZXZtX2lpb19kZXZpY2VfYWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKmRhdGEpKTsKKwlpZiAoIWluZGlvX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmRpb19kZXYpOworCWluZGlvX2Rldi0+aW5mbyA9ICZtcGwxMTVfaW5mbzsKKwlpbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBtcGwxMTVfY2hhbm5lbHM7CisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1wbDExNV9jaGFubmVscyk7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoZGF0YS0+Y2xpZW50LCBNUEwxMTVfQTApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRhdGEtPmEwID0gcmV0OworCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChkYXRhLT5jbGllbnQsIE1QTDExNV9CMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZGF0YS0+YjEgPSByZXQ7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwgTVBMMTE1X0IyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkYXRhLT5iMiA9IHJldDsKKwlyZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoZGF0YS0+Y2xpZW50LCBNUEwxMTVfQzEyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkYXRhLT5jMTIgPSByZXQ7CisKKwlyZXR1cm4gZGV2bV9paW9fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgaW5kaW9fZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1wbDExNV9pZFtdID0geworCXsgIm1wbDExNSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbXBsMTE1X2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1wbDExNV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibXBsMTE1IiwKKwl9LAorCS5wcm9iZSA9IG1wbDExNV9wcm9iZSwKKwkuaWRfdGFibGUgPSBtcGwxMTVfaWQsCit9OworbW9kdWxlX2kyY19kcml2ZXIobXBsMTE1X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlBldGVyIE1lZXJ3YWxkIDxwbWVlcndAcG1lZXJ3Lm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1QTDExNSBwcmVzc3VyZS90ZW1wZXJhdHVyZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3ByZXNzdXJlL3N0X3ByZXNzdXJlX2NvcmUuYyBiL2RyaXZlcnMvaWlvL3ByZXNzdXJlL3N0X3ByZXNzdXJlX2NvcmUuYwppbmRleCA3NDE4NzY4Li5jZDdlMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9wcmVzc3VyZS9zdF9wcmVzc3VyZV9jb3JlLmMKKysrIGIvZHJpdmVycy9paW8vcHJlc3N1cmUvc3RfcHJlc3N1cmVfY29yZS5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXIuaD4KICNpbmNsdWRlIDxsaW51eC9paW8vYnVmZmVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bGludXgvaWlvL2NvbW1vbi9zdF9zZW5zb3JzLmg+CkBAIC0zODcsNDAgKzM4Niw2IEBACiAjZGVmaW5lIFNUX1BSRVNTX1RSSUdHRVJfT1BTIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBzdF9wcmVzc19wb3dlcl9lbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKnBkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKLQlpbnQgZXJyOwotCi0JLyogUmVndWxhdG9ycyBub3QgbWFuZGF0b3J5LCBidXQgaWYgcmVxdWVzdGVkIHdlIHNob3VsZCBlbmFibGUgdGhlbS4gKi8KLQlwZGF0YS0+dmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKCZpbmRpb19kZXYtPmRldiwgInZkZCIpOwotCWlmICghSVNfRVJSKHBkYXRhLT52ZGQpKSB7Ci0JCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnZkZCk7Ci0JCWlmIChlcnIgIT0gMCkKLQkJCWRldl93YXJuKCZpbmRpb19kZXYtPmRldiwKLQkJCQkgIkZhaWxlZCB0byBlbmFibGUgc3BlY2lmaWVkIFZkZCBzdXBwbHlcbiIpOwotCX0KLQotCXBkYXRhLT52ZGRfaW8gPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoJmluZGlvX2Rldi0+ZGV2LCAidmRkaW8iKTsKLQlpZiAoIUlTX0VSUihwZGF0YS0+dmRkX2lvKSkgewotCQllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRhLT52ZGRfaW8pOwotCQlpZiAoZXJyICE9IDApCi0JCQlkZXZfd2FybigmaW5kaW9fZGV2LT5kZXYsCi0JCQkJICJGYWlsZWQgdG8gZW5hYmxlIHNwZWNpZmllZCBWZGRfSU8gc3VwcGx5XG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHN0X3ByZXNzX3Bvd2VyX2Rpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlzdHJ1Y3Qgc3Rfc2Vuc29yX2RhdGEgKnBkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKLQotCWlmICghSVNfRVJSKHBkYXRhLT52ZGQpKQotCQlyZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+dmRkKTsKLQotCWlmICghSVNfRVJSKHBkYXRhLT52ZGRfaW8pKQotCQlyZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+dmRkX2lvKTsKLX0KLQogaW50IHN0X3ByZXNzX2NvbW1vbl9wcm9iZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAogCQkJCXN0cnVjdCBzdF9zZW5zb3JzX3BsYXRmb3JtX2RhdGEgKnBsYXRfZGF0YSkKIHsKQEAgLTQzMSw3ICszOTYsNyBAQAogCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAlpbmRpb19kZXYtPmluZm8gPSAmcHJlc3NfaW5mbzsKIAotCXN0X3ByZXNzX3Bvd2VyX2VuYWJsZShpbmRpb19kZXYpOworCXN0X3NlbnNvcnNfcG93ZXJfZW5hYmxlKGluZGlvX2Rldik7CiAKIAllcnIgPSBzdF9zZW5zb3JzX2NoZWNrX2RldmljZV9zdXBwb3J0KGluZGlvX2RldiwKIAkJCQkJICAgICAgQVJSQVlfU0laRShzdF9wcmVzc19zZW5zb3JzKSwKQEAgLTQ3NCw2ICs0MzksOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gc3RfcHJlc3NfZGV2aWNlX3JlZ2lzdGVyX2Vycm9yOwogCisJZGV2X2luZm8oJmluZGlvX2Rldi0+ZGV2LCAicmVnaXN0ZXJlZCBwcmVzc3VyZSBzZW5zb3IgJXNcbiIsCisJCSBpbmRpb19kZXYtPm5hbWUpOworCiAJcmV0dXJuIGVycjsKIAogc3RfcHJlc3NfZGV2aWNlX3JlZ2lzdGVyX2Vycm9yOgpAQCAtNDkwLDcgKzQ1OCw3IEBACiB7CiAJc3RydWN0IHN0X3NlbnNvcl9kYXRhICpwZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlzdF9wcmVzc19wb3dlcl9kaXNhYmxlKGluZGlvX2Rldik7CisJc3Rfc2Vuc29yc19wb3dlcl9kaXNhYmxlKGluZGlvX2Rldik7CiAKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAocGRhdGEtPmdldF9pcnFfZGF0YV9yZWFkeShpbmRpb19kZXYpID4gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3Byb3hpbWl0eS9LY29uZmlnIGIvZHJpdmVycy9paW8vcHJveGltaXR5L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4Y2RmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWlvL3Byb3hpbWl0eS9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgUHJveGltaXR5IHNlbnNvcnMKKyMKKworbWVudSAiTGlnaHRuaW5nIHNlbnNvcnMiCisKK2NvbmZpZyBBUzM5MzUKKwl0cmlzdGF0ZSAiQVMzOTM1IEZyYW5rbGluIGxpZ2h0bmluZyBzZW5zb3IiCisJc2VsZWN0IElJT19CVUZGRVIKKwlzZWxlY3QgSUlPX1RSSUdHRVJFRF9CVUZGRVIKKwlkZXBlbmRzIG9uIFNQSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gYnVpbGQgU1BJIGludGVyZmFjZSBzdXBwb3J0IGZvciB0aGUgQXVzdHJpYW4KKwkgIE1pY3Jvc3lzdGVtcyBBUzM5MzUgbGlnaHRuaW5nIGRldGVjdGlvbiBzZW5zb3IuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFzMzkzNQorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9wcm94aW1pdHkvTWFrZWZpbGUgYi9kcml2ZXJzL2lpby9wcm94aW1pdHkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzYWRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWlvL3Byb3hpbWl0eS9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIElJTyBwcm94aW1pdHkgc2Vuc29ycworIworCisjIFdoZW4gYWRkaW5nIG5ldyBlbnRyaWVzIGtlZXAgdGhlIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCitvYmotJChDT05GSUdfQVMzOTM1KQkJKz0gYXMzOTM1Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3Byb3hpbWl0eS9hczM5MzUuYyBiL2RyaXZlcnMvaWlvL3Byb3hpbWl0eS9hczM5MzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY3N2JmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9paW8vcHJveGltaXR5L2FzMzkzNS5jCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogYXMzOTM1LmMgLSBTdXBwb3J0IGZvciBBUzM5MzUgRnJhbmtsaW4gbGlnaHRuaW5nIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXR0IFJhbm9zdGF5IDxtcmFub3N0YXlAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9paW8vdHJpZ2dlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby90cmlnZ2VyX2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL2J1ZmZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby90cmlnZ2VyZWRfYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorCisKKyNkZWZpbmUgQVMzOTM1X0FGRV9HQUlOCQkweDAwCisjZGVmaW5lIEFTMzkzNV9BRkVfTUFTSwkJMHgzRgorI2RlZmluZSBBUzM5MzVfQUZFX0dBSU5fTUFYCTB4MUYKKyNkZWZpbmUgQVMzOTM1X0FGRV9QV1JfQklUCUJJVCgwKQorCisjZGVmaW5lIEFTMzkzNV9JTlQJCTB4MDMKKyNkZWZpbmUgQVMzOTM1X0lOVF9NQVNLCQkweDA3CisjZGVmaW5lIEFTMzkzNV9FVkVOVF9JTlQJQklUKDMpCisjZGVmaW5lIEFTMzkzNV9OT0lTRV9JTlQJQklUKDEpCisKKyNkZWZpbmUgQVMzOTM1X0RBVEEJCTB4MDcKKyNkZWZpbmUgQVMzOTM1X0RBVEFfTUFTSwkweDNGCisKKyNkZWZpbmUgQVMzOTM1X1RVTkVfQ0FQCQkweDA4CisjZGVmaW5lIEFTMzkzNV9DQUxJQlJBVEUJMHgzRAorCisjZGVmaW5lIEFTMzkzNV9XUklURV9EQVRBCUJJVCgxNSkKKyNkZWZpbmUgQVMzOTM1X1JFQURfREFUQQlCSVQoMTQpCisjZGVmaW5lIEFTMzkzNV9BRERSRVNTKHgpCSgoeCkgPDwgOCkKKworI2RlZmluZSBNQVhfUEZfQ0FQCQkxMjAKKyNkZWZpbmUgVFVORV9DQVBfRElWCQk4CisKK3N0cnVjdCBhczM5MzVfc3RhdGUgeworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnOworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKworCXUzMiB0dW5lX2NhcDsKKwl1OCBidWZbMl0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIGFzMzkzNV9jaGFubmVsc1tdID0geworCXsKKwkJLnR5cGUgICAgICAgICAgID0gSUlPX1BST1hJTUlUWSwKKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9CisJCQlCSVQoSUlPX0NIQU5fSU5GT19SQVcpIHwKKwkJCUJJVChJSU9fQ0hBTl9JTkZPX1BST0NFU1NFRCksCisJCS5zY2FuX2luZGV4ICAgICA9IDAsCisJCS5zY2FuX3R5cGUgPSB7CisJCQkuc2lnbiAgICAgICAgICAgPSAndScsCisJCQkucmVhbGJpdHMgICAgICAgPSA2LAorCQkJLnN0b3JhZ2ViaXRzICAgID0gOCwKKwkJfSwKKwl9LAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDEpLAorfTsKKworc3RhdGljIGludCBhczM5MzVfcmVhZChzdHJ1Y3QgYXMzOTM1X3N0YXRlICpzdCwgdW5zaWduZWQgaW50IHJlZywgaW50ICp2YWwpCit7CisJdTggY21kOworCWludCByZXQ7CisKKwljbWQgPSAoQVMzOTM1X1JFQURfREFUQSB8IEFTMzkzNV9BRERSRVNTKHJlZykpID4+IDg7CisJcmV0ID0gc3BpX3c4cjgoc3QtPnNwaSwgY21kKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqdmFsID0gcmV0OworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGFzMzkzNV93cml0ZShzdHJ1Y3QgYXMzOTM1X3N0YXRlICpzdCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnLAorCQkJCXVuc2lnbmVkIGludCB2YWwpCit7CisJdTggKmJ1ZiA9IHN0LT5idWY7CisKKwlidWZbMF0gPSAoQVMzOTM1X1dSSVRFX0RBVEEgfCBBUzM5MzVfQUREUkVTUyhyZWcpKSA+PiA4OworCWJ1ZlsxXSA9IHZhbDsKKworCXJldHVybiBzcGlfd3JpdGUoc3QtPnNwaSwgYnVmLCAyKTsKK307CisKK3N0YXRpYyBzc2l6ZV90IGFzMzkzNV9zZW5zb3Jfc2Vuc2l0aXZpdHlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGFzMzkzNV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihkZXZfdG9faWlvX2RldihkZXYpKTsKKwlpbnQgdmFsLCByZXQ7CisKKwlyZXQgPSBhczM5MzVfcmVhZChzdCwgQVMzOTM1X0FGRV9HQUlOLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXZhbCA9ICh2YWwgJiBBUzM5MzVfQUZFX01BU0spID4+IDE7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKK307CisKK3N0YXRpYyBzc2l6ZV90IGFzMzkzNV9zZW5zb3Jfc2Vuc2l0aXZpdHlfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhczM5MzVfc3RhdGUgKnN0ID0gaWlvX3ByaXYoZGV2X3RvX2lpb19kZXYoZGV2KSk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IGtzdHJ0b3VsKChjb25zdCBjaGFyICopIGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA+IEFTMzkzNV9BRkVfR0FJTl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJYXMzOTM1X3dyaXRlKHN0LCBBUzM5MzVfQUZFX0dBSU4sIHZhbCA8PCAxKTsKKworCXJldHVybiBsZW47Cit9OworCitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHNlbnNvcl9zZW5zaXRpdml0eSwgU19JUlVHTyB8IFNfSVdVU1IsCisJYXMzOTM1X3NlbnNvcl9zZW5zaXRpdml0eV9zaG93LCBhczM5MzVfc2Vuc29yX3NlbnNpdGl2aXR5X3N0b3JlLCAwKTsKKworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXMzOTM1X2F0dHJpYnV0ZXNbXSA9IHsKKwkmaWlvX2Rldl9hdHRyX3NlbnNvcl9zZW5zaXRpdml0eS5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhczM5MzVfYXR0cmlidXRlX2dyb3VwID0geworCS5hdHRycyA9IGFzMzkzNV9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBhczM5MzVfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgaW50ICp2YWwsCisJCQkgICBpbnQgKnZhbDIsCisJCQkgICBsb25nIG0pCit7CisJc3RydWN0IGFzMzkzNV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWludCByZXQ7CisKKworCXN3aXRjaCAobSkgeworCWNhc2UgSUlPX0NIQU5fSU5GT19QUk9DRVNTRUQ6CisJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoKKwkJKnZhbDIgPSAwOworCQlyZXQgPSBhczM5MzVfcmVhZChzdCwgQVMzOTM1X0RBVEEsIHZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChtID09IElJT19DSEFOX0lORk9fUkFXKQorCQkJcmV0dXJuIElJT19WQUxfSU5UOworCisJCS8qIHN0b3JtIG91dCBvZiByYW5nZSAqLworCQlpZiAoKnZhbCA9PSBBUzM5MzVfREFUQV9NQVNLKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCSp2YWwgKj0gMTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIElJT19WQUxfSU5UOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFzMzkzNV9pbmZvID0geworCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dHJzID0gJmFzMzkzNV9hdHRyaWJ1dGVfZ3JvdXAsCisJLnJlYWRfcmF3ID0gJmFzMzkzNV9yZWFkX3JhdywKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhczM5MzVfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPmluZGlvX2RldjsKKwlzdHJ1Y3QgYXMzOTM1X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IHZhbCwgcmV0OworCisJcmV0ID0gYXMzOTM1X3JlYWQoc3QsIEFTMzkzNV9EQVRBLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWFkOworCXZhbCAmPSBBUzM5MzVfREFUQV9NQVNLOworCXZhbCAqPSAxMDAwOworCisJaWlvX3B1c2hfdG9fYnVmZmVyc193aXRoX3RpbWVzdGFtcChpbmRpb19kZXYsICZ2YWwsIHBmLT50aW1lc3RhbXApOworZXJyX3JlYWQ6CisJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3RyaWdnZXJfb3BzIGlpb19pbnRlcnJ1cHRfdHJpZ2dlcl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgdm9pZCBhczM5MzVfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFzMzkzNV9zdGF0ZSAqc3Q7CisJaW50IHZhbDsKKworCXN0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhczM5MzVfc3RhdGUsIHdvcmsud29yayk7CisKKwlhczM5MzVfcmVhZChzdCwgQVMzOTM1X0lOVCwgJnZhbCk7CisJdmFsICY9IEFTMzkzNV9JTlRfTUFTSzsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBBUzM5MzVfRVZFTlRfSU5UOgorCQlpaW9fdHJpZ2dlcl9wb2xsKHN0LT50cmlnLCBpaW9fZ2V0X3RpbWVfbnMoKSk7CisJCWJyZWFrOworCWNhc2UgQVMzOTM1X05PSVNFX0lOVDoKKwkJZGV2X3dhcm4oJnN0LT5zcGktPmRldiwgIm5vaXNlIGxldmVsIGlzIHRvbyBoaWdoIik7CisJCWJyZWFrOworCX0KK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhczM5MzVfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgYXMzOTM1X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKKwkvKgorCSAqIERlbGF5IHdvcmsgZm9yID4yIG1pbGxpc2Vjb25kcyBhZnRlciBhbiBpbnRlcnJ1cHQgdG8gYWxsb3cKKwkgKiBlc3RpbWF0ZWQgZGlzdGFuY2UgdG8gcmVjYWxjdWxhdGVkLgorCSAqLworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzdC0+d29yaywgbXNlY3NfdG9famlmZmllcygzKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGlicmF0ZV9hczM5MzUoc3RydWN0IGFzMzkzNV9zdGF0ZSAqc3QpCit7CisJbXV0ZXhfbG9jaygmc3QtPmxvY2spOworCisJLyogbWFzayBkaXN0dXJiZXIgaW50ZXJydXB0IGJpdCAqLworCWFzMzkzNV93cml0ZShzdCwgQVMzOTM1X0lOVCwgQklUKDUpKTsKKworCWFzMzkzNV93cml0ZShzdCwgQVMzOTM1X0NBTElCUkFURSwgMHg5Nik7CisJYXMzOTM1X3dyaXRlKHN0LCBBUzM5MzVfVFVORV9DQVAsCisJCUJJVCg1KSB8IChzdC0+dHVuZV9jYXAgLyBUVU5FX0NBUF9ESVYpKTsKKworCW1kZWxheSgyKTsKKwlhczM5MzVfd3JpdGUoc3QsIEFTMzkzNV9UVU5FX0NBUCwgKHN0LT50dW5lX2NhcCAvIFRVTkVfQ0FQX0RJVikpOworCisJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgYXMzOTM1X3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IGFzMzkzNV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWludCB2YWwsIHJldDsKKworCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKKwlyZXQgPSBhczM5MzVfcmVhZChzdCwgQVMzOTM1X0FGRV9HQUlOLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zdXNwZW5kOworCXZhbCB8PSBBUzM5MzVfQUZFX1BXUl9CSVQ7CisKKwlyZXQgPSBhczM5MzVfd3JpdGUoc3QsIEFTMzkzNV9BRkVfR0FJTiwgdmFsKTsKKworZXJyX3N1c3BlbmQ6CisJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFzMzkzNV9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IGFzMzkzNV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWludCB2YWwsIHJldDsKKworCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKKwlyZXQgPSBhczM5MzVfcmVhZChzdCwgQVMzOTM1X0FGRV9HQUlOLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXN1bWU7CisJdmFsICY9IH5BUzM5MzVfQUZFX1BXUl9CSVQ7CisJcmV0ID0gYXMzOTM1X3dyaXRlKHN0LCBBUzM5MzVfQUZFX0dBSU4sIHZhbCk7CisKK2Vycl9yZXN1bWU6CisJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorI2Vsc2UKKyNkZWZpbmUgYXMzOTM1X3N1c3BlbmQJTlVMTAorI2RlZmluZSBhczM5MzVfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IGFzMzkzNV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CisJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnOworCXN0cnVjdCBhczM5MzVfc3RhdGUgKnN0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBzcGktPmRldi5vZl9ub2RlOworCWludCByZXQ7CisKKwkvKiBCZSBzdXJlIGxpZ2h0bmluZyBldmVudCBpbnRlcnJ1cHQgaXMgc3BlY2lmaWVkICovCisJaWYgKCFzcGktPmlycSkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgInVuYWJsZSB0byBnZXQgZXZlbnQgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5kaW9fZGV2ID0gZGV2bV9paW9fZGV2aWNlX2FsbG9jKCZzcGktPmRldiwgc2l6ZW9mKHN0KSk7CisJaWYgKCFpbmRpb19kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCXN0LT5zcGkgPSBzcGk7CisJc3QtPnR1bmVfY2FwID0gMDsKKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGluZGlvX2Rldik7CisJbXV0ZXhfaW5pdCgmc3QtPmxvY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZzdC0+d29yaywgYXMzOTM1X2V2ZW50X3dvcmspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsCisJCQkiYW1zLHR1bmluZy1jYXBhY2l0b3ItcGYiLCAmc3QtPnR1bmVfY2FwKTsKKwlpZiAocmV0KSB7CisJCXN0LT50dW5lX2NhcCA9IDA7CisJCWRldl93YXJuKCZzcGktPmRldiwKKwkJCSJubyB0dW5pbmctY2FwYWNpdG9yLXBmIHNldCwgZGVmYXVsdGluZyB0byAlZCIsCisJCQlzdC0+dHVuZV9jYXApOworCX0KKworCWlmIChzdC0+dHVuZV9jYXAgPiBNQVhfUEZfQ0FQKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJIndyb25nIHR1bmluZy1jYXBhY2l0b3ItcGYgc2V0dGluZyBvZiAlZFxuIiwKKwkJCXN0LT50dW5lX2NhcCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlpbmRpb19kZXYtPm5hbWUgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5uYW1lOworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhczM5MzVfY2hhbm5lbHM7CisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGFzMzkzNV9jaGFubmVscyk7CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWluZGlvX2Rldi0+aW5mbyA9ICZhczM5MzVfaW5mbzsKKworCXRyaWcgPSBkZXZtX2lpb190cmlnZ2VyX2FsbG9jKCZzcGktPmRldiwgIiVzLWRldiVkIiwKKwkJCQkgICAgICBpbmRpb19kZXYtPm5hbWUsIGluZGlvX2Rldi0+aWQpOworCisJaWYgKCF0cmlnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0LT50cmlnID0gdHJpZzsKKwl0cmlnLT5kZXYucGFyZW50ID0gaW5kaW9fZGV2LT5kZXYucGFyZW50OworCWlpb190cmlnZ2VyX3NldF9kcnZkYXRhKHRyaWcsIGluZGlvX2Rldik7CisJdHJpZy0+b3BzID0gJmlpb19pbnRlcnJ1cHRfdHJpZ2dlcl9vcHM7CisKKwlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3Rlcih0cmlnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHRyaWdnZXJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGlpb190cmlnZ2VyZWRfYnVmZmVyX3NldHVwKGluZGlvX2RldiwgTlVMTCwKKwkJJmFzMzkzNV90cmlnZ2VyX2hhbmRsZXIsIE5VTEwpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImNhbm5vdCBzZXR1cCBpaW8gdHJpZ2dlclxuIik7CisJCWdvdG8gdW5yZWdpc3Rlcl90cmlnZ2VyOworCX0KKworCWNhbGlicmF0ZV9hczM5MzUoc3QpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmc3BpLT5kZXYsIHNwaS0+aXJxLAorCQkJCSZhczM5MzVfaW50ZXJydXB0X2hhbmRsZXIsCisJCQkJSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLAorCQkJCWluZGlvX2Rldik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgaXJxXG4iKTsKKwkJZ290byB1bnJlZ2lzdGVyX2J1ZmZlcjsKKwl9CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iKTsKKwkJZ290byB1bnJlZ2lzdGVyX2J1ZmZlcjsKKwl9CisJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXJfYnVmZmVyOgorCWlpb190cmlnZ2VyZWRfYnVmZmVyX2NsZWFudXAoaW5kaW9fZGV2KTsKKwordW5yZWdpc3Rlcl90cmlnZ2VyOgorCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3QtPnRyaWcpOworCisJcmV0dXJuIHJldDsKK307CisKK3N0YXRpYyBpbnQgYXMzOTM1X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgYXMzOTM1X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKKwlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKKwlpaW9fdHJpZ2dlcmVkX2J1ZmZlcl9jbGVhbnVwKGluZGlvX2Rldik7CisJaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdC0+dHJpZyk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhczM5MzVfaWRbXSA9IHsKKwl7ImFzMzkzNSIsIDB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBhczM5MzVfaWQpOworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYXMzOTM1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJhczM5MzUiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBhczM5MzVfcHJvYmUsCisJLnJlbW92ZQkJPSBhczM5MzVfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGFzMzkzNV9pZCwKKwkuc3VzcGVuZAk9IGFzMzkzNV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXMzOTM1X3Jlc3VtZSwKK307Cittb2R1bGVfc3BpX2RyaXZlcihhczM5MzVfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTWF0dCBSYW5vc3RheSA8bXJhbm9zdGF5QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQVMzOTM1IGxpZ2h0bmluZyBzZW5zb3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOmFzMzkzNSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvS2NvbmZpZyBiL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL0tjb25maWcKaW5kZXggMzcyZjhmYi4uMjFmZWFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9LY29uZmlnCkBAIC0zLDYgKzMsMTYgQEAKICMKIG1lbnUgIlRlbXBlcmF0dXJlIHNlbnNvcnMiCiAKK2NvbmZpZyBNTFg5MDYxNAorCXRyaXN0YXRlICJNTFg5MDYxNCBjb250YWN0LWxlc3MgaW5mcmFyZWQgc2Vuc29yIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBNZWxleGlzCisJICBNTFg5MDYxNCBjb250YWN0LWxlc3MgaW5mcmFyZWQgc2Vuc29yIGNvbm5lY3RlZCB3aXRoIEkyQy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBtbHg5MDYxNC4KKwogY29uZmlnIFRNUDAwNgogCXRyaXN0YXRlICJUTVAwMDYgaW5mcmFyZWQgdGhlcm1vcGlsZSBzZW5zb3IiCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL01ha2VmaWxlIGIvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvTWFrZWZpbGUKaW5kZXggMjRkN2I2MC4uNDA3MTBhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvTWFrZWZpbGUKQEAgLTIsNCArMiw1IEBACiAjIE1ha2VmaWxlIGZvciBpbmR1c3RyaWFsIEkvTyB0ZW1wZXJhdHVyZSBkcml2ZXJzCiAjCiAKK29iai0kKENPTkZJR19NTFg5MDYxNCkgKz0gbWx4OTA2MTQubwogb2JqLSQoQ09ORklHX1RNUDAwNikgKz0gdG1wMDA2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL21seDkwNjE0LmMgYi9kcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9tbHg5MDYxNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjZhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9tbHg5MDYxNC5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogbWx4OTA2MTQuYyAtIFN1cHBvcnQgZm9yIE1lbGV4aXMgTUxYOTA2MTQgY29udGFjdGxlc3MgSVIgdGVtcGVyYXR1cmUgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFBldGVyIE1lZXJ3YWxkIDxwbWVlcndAcG1lZXJ3Lm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdmVyc2lvbiAyIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbgorICogZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERyaXZlciBmb3IgdGhlIE1lbGV4aXMgTUxYOTA2MTQgSTJDIDE2LWJpdCBJUiB0aGVybW9waWxlIHNlbnNvcgorICoKKyAqICg3LWJpdCBJMkMgc2xhdmUgYWRkcmVzcyAweDVhLCAxMDBLSHogYnVzIHNwZWVkIG9ubHkhKQorICoKKyAqIFRPRE86IHNsZWVwIG1vZGUsIGNvbmZpZ3VyYXRpb24gRUVQUk9NCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgorCisjZGVmaW5lIE1MWDkwNjE0X09QX1JBTSAweDAwCisKKy8qIFJBTSBvZmZzZXRzIHdpdGggMTYtYml0IGRhdGEsIE1TQiBmaXJzdCAqLworI2RlZmluZSBNTFg5MDYxNF9UQSAweDA2IC8qIGFtYmllbnQgdGVtcGVyYXR1cmUgKi8KKyNkZWZpbmUgTUxYOTA2MTRfVE9CSjEgMHgwNyAvKiBvYmplY3QgdGVtcGVyYXR1cmUgKi8KKworc3RydWN0IG1seDkwNjE0X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Cit9OworCitzdGF0aWMgaW50IG1seDkwNjE0X3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW5uZWwsIGludCAqdmFsLAorCQkJICAgIGludCAqdmFsMiwgbG9uZyBtYXNrKQoreworCXN0cnVjdCBtbHg5MDYxNF9kYXRhICpkYXRhID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlzMzIgcmV0OworCisJc3dpdGNoIChtYXNrKSB7CisJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzogLyogMC4wMksgLyBMU0IgKi8KKwkJc3dpdGNoIChjaGFubmVsLT5jaGFubmVsMikgeworCQljYXNlIElJT19NT0RfVEVNUF9BTUJJRU5UOgorCQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGRhdGEtPmNsaWVudCwKKwkJCSAgICBNTFg5MDYxNF9PUF9SQU0gfCBNTFg5MDYxNF9UQSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CisJCWNhc2UgSUlPX01PRF9URU1QX09CSkVDVDoKKwkJCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShkYXRhLT5jbGllbnQsCisJCQkgICAgTUxYOTA2MTRfT1BfUkFNIHwgTUxYOTA2MTRfVE9CSjEpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJKnZhbCA9IHJldDsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgSUlPX0NIQU5fSU5GT19PRkZTRVQ6CisJCSp2YWwgPSAxMzY1NzsKKwkJKnZhbDIgPSA1MDAwMDA7CisJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCWNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKKwkJKnZhbCA9IDIwOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgbWx4OTA2MTRfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS50eXBlID0gSUlPX1RFTVAsCisJCS5tb2RpZmllZCA9IDEsCisJCS5jaGFubmVsMiA9IElJT19NT0RfVEVNUF9BTUJJRU5ULAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKKwkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX09GRlNFVCkgfAorCQkgICAgQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAorCX0sCisJeworCQkudHlwZSA9IElJT19URU1QLAorCQkubW9kaWZpZWQgPSAxLAorCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1RFTVBfT0JKRUNULAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwKKwkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX09GRlNFVCkgfAorCQkgICAgQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIG1seDkwNjE0X2luZm8gPSB7CisJLnJlYWRfcmF3ID0gbWx4OTA2MTRfcmVhZF9yYXcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbWx4OTA2MTRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKKwlzdHJ1Y3QgbWx4OTA2MTRfZGF0YSAqZGF0YTsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqZGF0YSkpOworCWlmICghaW5kaW9fZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGluZGlvX2Rldik7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCisJaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OworCWluZGlvX2Rldi0+bmFtZSA9IGlkLT5uYW1lOworCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlpbmRpb19kZXYtPmluZm8gPSAmbWx4OTA2MTRfaW5mbzsKKworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBtbHg5MDYxNF9jaGFubmVsczsKKwlpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWx4OTA2MTRfY2hhbm5lbHMpOworCisJcmV0dXJuIGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KTsKK30KKworc3RhdGljIGludCBtbHg5MDYxNF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtbHg5MDYxNF9pZFtdID0geworCXsgIm1seDkwNjE0IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtbHg5MDYxNF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtbHg5MDYxNF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibWx4OTA2MTQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IG1seDkwNjE0X3Byb2JlLAorCS5yZW1vdmUgPSBtbHg5MDYxNF9yZW1vdmUsCisJLmlkX3RhYmxlID0gbWx4OTA2MTRfaWQsCit9OworbW9kdWxlX2kyY19kcml2ZXIobWx4OTA2MTRfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUGV0ZXIgTWVlcndhbGQgPHBtZWVyd0BwbWVlcncubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWxleGlzIE1MWDkwNjE0IGNvbnRhY3RsZXNzIElSIHRlbXBlcmF0dXJlIHNlbnNvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCBiODQ1ZTkzLi5kNGU1YWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC01NTAsMTggKzU1MCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aV9hbTMzNXhfdHNjLgogCi1jb25maWcgVE9VQ0hTQ1JFRU5fQVRNRUxfVFNBRENDCi0JdHJpc3RhdGUgIkF0bWVsIFRvdWNoc2NyZWVuIEludGVyZmFjZSIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSA0LXdpcmUgdG91Y2hzY3JlZW4gY29ubmVjdGVkIHRvIHRoZQotICAgICAgICAgIEFEQyBDb250cm9sbGVyIG9uIHlvdXIgQXRtZWwgU29DLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhdG1lbF90c2FkY2MuCi0KIGNvbmZpZyBUT1VDSFNDUkVFTl9VQ0IxNDAwCiAJdHJpc3RhdGUgIlBoaWxpcHMgVUNCMTQwMCB0b3VjaHNjcmVlbiIKIAlkZXBlbmRzIG9uIEFDOTdfQlVTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQppbmRleCA0YmM5NTRiLi4wM2YxMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDYgQEAKIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJKQkrPSBhZDc4Nzktc3BpLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KQkrPSBhZHM3ODQ2Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9BVE1FTF9NWFQpCSs9IGF0bWVsX214dF90cy5vCi1vYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfVFNBRENDKQkrPSBhdG1lbF90c2FkY2Mubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0FVT19QSVhDSVIpCSs9IGF1by1waXhjaXItdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0JVMjEwMTMpCSs9IGJ1MjEwMTNfdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0NZOENUTUcxMTApCSs9IGN5OGN0bWcxMTBfdHMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YzlkNjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYworKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0vKgotICogIEF0bWVsIFRvdWNoIFNjcmVlbiBEcml2ZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IEFUTUVMCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IERhbiBMaWFuZwotICogIENvcHlyaWdodCAoYykgMjAwOCBUaW1lU3lzIENvcnBvcmF0aW9uCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IEp1c3RpbiBXYXRlcnMKLSAqCi0gKiAgQmFzZWQgb24gdG91Y2hzY3JlZW4gY29kZSBmcm9tIEF0bWVsIENvcnBvcmF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXRtZWwuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0vKiBSZWdpc3RlciBkZWZpbml0aW9ucyBiYXNlZCBvbiBBVDkxU0FNOVJMNjQgcHJlbGltaW5hcnkgZHJhZnQgZGF0YXNoZWV0ICovCi0KLSNkZWZpbmUgQVRNRUxfVFNBRENDX0NSCQkweDAwCS8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgICBBVE1FTF9UU0FEQ0NfU1dSU1QJKDEgPDwgMCkJLyogU29mdHdhcmUgUmVzZXQqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19TVEFSVAkoMSA8PCAxKQkvKiBTdGFydCBjb252ZXJzaW9uICovCi0KLSNkZWZpbmUgQVRNRUxfVFNBRENDX01SCQkweDA0CS8qIE1vZGUgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfVFNBTU9ECSgzICAgIDw8ICAwKQkvKiBBREMgbW9kZSAqLwotI2RlZmluZQkgICAgQVRNRUxfVFNBRENDX1RTQU1PRF9BRENfT05MWV9NT0RFCSgweDApCS8qIEFEQyBNb2RlICovCi0jZGVmaW5lCSAgICBBVE1FTF9UU0FEQ0NfVFNBTU9EX1RTX09OTFlfTU9ERQkoMHgxKQkvKiBUb3VjaCBTY3JlZW4gT25seSBNb2RlICovCi0jZGVmaW5lCSAgQVRNRUxfVFNBRENDX0xPV1JFUwkoMSAgICA8PCAgNCkJLyogUmVzb2x1dGlvbiBzZWxlY3Rpb24gKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfU0xFRVAJKDEgICAgPDwgIDUpCS8qIFNsZWVwIG1vZGUgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfUEVOREVUCSgxICAgIDw8ICA2KQkvKiBQZW4gRGV0ZWN0IHNlbGVjdGlvbiAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19QUkVTCSgxICAgIDw8ICA3KQkvKiBQcmVzc3VyZSBNZWFzdXJlbWVudCBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfUFJFU0NBTAkoMHgzZiA8PCAgOCkJLyogUHJlc2NhbGFyIFJhdGUgU2VsZWN0aW9uICovCi0jZGVmaW5lCSAgQVRNRUxfVFNBRENDX0VQUkVTQ0FMCSgweGZmIDw8ICA4KQkvKiBQcmVzY2FsYXIgUmF0ZSBTZWxlY3Rpb24gKEV4dGVuZGVkKSAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19TVEFSVFVQCSgweDdmIDw8IDE2KQkvKiBTdGFydCBVcCB0aW1lICovCi0jZGVmaW5lCSAgQVRNRUxfVFNBRENDX1NIVElNCSgweGYgIDw8IDI0KQkvKiBTYW1wbGUgJiBIb2xkIHRpbWUgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfUEVOREJDCSgweGYgIDw8IDI4KQkvKiBQZW4gRGV0ZWN0IGRlYm91bmNpbmcgdGltZSAqLwotCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19UUkdSCTB4MDgJLyogVHJpZ2dlciByZWdpc3RlciAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19UUkdNT0QJKDcgICAgICA8PCAgMCkJLyogVHJpZ2dlciBtb2RlICovCi0jZGVmaW5lCSAgICBBVE1FTF9UU0FEQ0NfVFJHTU9EX05PTkUJCSgwIDw8IDApCi0jZGVmaW5lICAgICBBVE1FTF9UU0FEQ0NfVFJHTU9EX0VYVF9SSVNJTkcJKDEgPDwgMCkKLSNkZWZpbmUgICAgIEFUTUVMX1RTQURDQ19UUkdNT0RfRVhUX0ZBTExJTkcJKDIgPDwgMCkKLSNkZWZpbmUgICAgIEFUTUVMX1RTQURDQ19UUkdNT0RfRVhUX0FOWQkJKDMgPDwgMCkKLSNkZWZpbmUgICAgIEFUTUVMX1RTQURDQ19UUkdNT0RfUEVOREVUCQkoNCA8PCAwKQotI2RlZmluZSAgICAgQVRNRUxfVFNBRENDX1RSR01PRF9QRVJJT0QJCSg1IDw8IDApCi0jZGVmaW5lICAgICBBVE1FTF9UU0FEQ0NfVFJHTU9EX0NPTlRJTlVPVVMJKDYgPDwgMCkKLSNkZWZpbmUgICBBVE1FTF9UU0FEQ0NfVFJHUEVSCSgweGZmZmYgPDwgMTYpCS8qIFRyaWdnZXIgcGVyaW9kICovCi0KLSNkZWZpbmUgQVRNRUxfVFNBRENDX1RTUgkweDBDCS8qIFRvdWNoIFNjcmVlbiByZWdpc3RlciAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19UU0ZSRVEJKDB4ZiA8PCAgMCkJLyogVFMgRnJlcXVlbmN5IGluIEludGVybGVhdmVkIG1vZGUgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfVFNTSFRJTQkoMHhmIDw8IDI0KQkvKiBTYW1wbGUgJiBIb2xkIHRpbWUgKi8KLQotI2RlZmluZSBBVE1FTF9UU0FEQ0NfQ0hFUgkweDEwCS8qIENoYW5uZWwgRW5hYmxlIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19DSERSCTB4MTQJLyogQ2hhbm5lbCBEaXNhYmxlIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19DSFNSCTB4MTgJLyogQ2hhbm5lbCBTdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfQ0gobikJKDEgPDwgKG4pKQkvKiBDaGFubmVsIG51bWJlciAqLwotCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19TUgkJMHgxQwkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfRU9DKG4pCSgxIDw8ICgobikrMCkpCS8qIEVuZCBvZiBjb252ZXJzaW9uIGZvciBjaGFubmVsIE4gKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfT1ZSRShuKQkoMSA8PCAoKG4pKzgpKQkvKiBPdmVycnVuIGVycm9yIGZvciBjaGFubmVsIE4gKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfRFJEWQkoMSA8PCAxNikJLyogRGF0YSBSZWFkeSAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19HT1ZSRQkoMSA8PCAxNykJLyogR2VuZXJhbCBPdmVycnVuIEVycm9yICovCi0jZGVmaW5lCSAgQVRNRUxfVFNBRENDX0VORFJYCSgxIDw8IDE4KQkvKiBFbmQgb2YgUlggQnVmZmVyICovCi0jZGVmaW5lCSAgQVRNRUxfVFNBRENDX1JYQlVGRgkoMSA8PCAxOSkJLyogVFggQnVmZmVyIGZ1bGwgKi8KLSNkZWZpbmUJICBBVE1FTF9UU0FEQ0NfUEVOQ05UCSgxIDw8IDIwKQkvKiBQZW4gY29udGFjdCAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19OT0NOVAkoMSA8PCAyMSkJLyogTm8gY29udGFjdCAqLwotCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19MQ0RSCTB4MjAJLyogTGFzdCBDb252ZXJ0ZWQgRGF0YSByZWdpc3RlciAqLwotI2RlZmluZQkgIEFUTUVMX1RTQURDQ19EQVRBCSgweDNmZiA8PCAwKQkvKiBDaGFubmVsIGRhdGEgKi8KLQotI2RlZmluZSBBVE1FTF9UU0FEQ0NfSUVSCTB4MjQJLyogSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLwotI2RlZmluZSBBVE1FTF9UU0FEQ0NfSURSCTB4MjgJLyogSW50ZXJydXB0IERpc2FibGUgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVRNRUxfVFNBRENDX0lNUgkweDJDCS8qIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19DRFIwCTB4MzAJLyogQ2hhbm5lbCBEYXRhIDAgKi8KLSNkZWZpbmUgQVRNRUxfVFNBRENDX0NEUjEJMHgzNAkvKiBDaGFubmVsIERhdGEgMSAqLwotI2RlZmluZSBBVE1FTF9UU0FEQ0NfQ0RSMgkweDM4CS8qIENoYW5uZWwgRGF0YSAyICovCi0jZGVmaW5lIEFUTUVMX1RTQURDQ19DRFIzCTB4M0MJLyogQ2hhbm5lbCBEYXRhIDMgKi8KLSNkZWZpbmUgQVRNRUxfVFNBRENDX0NEUjQJMHg0MAkvKiBDaGFubmVsIERhdGEgNCAqLwotI2RlZmluZSBBVE1FTF9UU0FEQ0NfQ0RSNQkweDQ0CS8qIENoYW5uZWwgRGF0YSA1ICovCi0KLSNkZWZpbmUgQVRNRUxfVFNBRENDX1hQT1MJMHg1MAotI2RlZmluZSBBVE1FTF9UU0FEQ0NfWjFEQVQJMHg1NAotI2RlZmluZSBBVE1FTF9UU0FEQ0NfWjJEQVQJMHg1OAotCi0jZGVmaW5lIFBSRVNDQUxFUl9WQUwoeCkJKCh4KSA+PiA4KQotCi0jZGVmaW5lIEFEQ19ERUZBVUxUX0NMT0NLCTEwMDAwMAotCi1zdHJ1Y3QgYXRtZWxfdHNhZGNjIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dDsKLQljaGFyCQkJcGh5c1szMl07Ci0Jc3RydWN0IGNsawkJKmNsazsKLQlpbnQJCQlpcnE7Ci0JdW5zaWduZWQgaW50CQlwcmV2X2Fic3g7Ci0JdW5zaWduZWQgaW50CQlwcmV2X2Fic3k7Ci0JdW5zaWduZWQgY2hhcgkJYnVmZmVyZWRtZWFzdXJlOwotfTsKLQotc3RhdGljIHZvaWQgX19pb21lbQkJKnRzY19iYXNlOwotCi0jZGVmaW5lIGF0bWVsX3RzYWRjY19yZWFkKHJlZykJCV9fcmF3X3JlYWRsKHRzY19iYXNlICsgKHJlZykpCi0jZGVmaW5lIGF0bWVsX3RzYWRjY193cml0ZShyZWcsIHZhbCkJX19yYXdfd3JpdGVsKCh2YWwpLCB0c2NfYmFzZSArIChyZWcpKQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXRtZWxfdHNhZGNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpCi17Ci0Jc3RydWN0IGF0bWVsX3RzYWRjYwkqdHNfZGV2ID0gKHN0cnVjdCBhdG1lbF90c2FkY2MgKilkZXY7Ci0Jc3RydWN0IGlucHV0X2RldgkqaW5wdXRfZGV2ID0gdHNfZGV2LT5pbnB1dDsKLQotCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXN0YXR1cyA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19TUik7Ci0Jc3RhdHVzICY9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19JTVIpOwotCi0JaWYgKHN0YXR1cyAmIEFUTUVMX1RTQURDQ19OT0NOVCkgewotCQkvKiBDb250YWN0IGxvc3QgKi8KLQkJcmVnID0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX01SKSB8IEFUTUVMX1RTQURDQ19QRU5EQkM7Ci0KLQkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19NUiwgcmVnKTsKLQkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19UUkdSLCBBVE1FTF9UU0FEQ0NfVFJHTU9EX05PTkUpOwotCQlhdG1lbF90c2FkY2Nfd3JpdGUoQVRNRUxfVFNBRENDX0lEUiwKLQkJCQkgICBBVE1FTF9UU0FEQ0NfRU9DKDMpIHwgQVRNRUxfVFNBRENDX05PQ05UKTsKLQkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19JRVIsIEFUTUVMX1RTQURDQ19QRU5DTlQpOwotCi0JCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDApOwotCQl0c19kZXYtPmJ1ZmZlcmVkbWVhc3VyZSA9IDA7Ci0JCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKLQotCX0gZWxzZSBpZiAoc3RhdHVzICYgQVRNRUxfVFNBRENDX1BFTkNOVCkgewotCQkvKiBQZW4gZGV0ZWN0ZWQgKi8KLQkJcmVnID0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX01SKTsKLQkJcmVnICY9IH5BVE1FTF9UU0FEQ0NfUEVOREJDOwotCi0JCWF0bWVsX3RzYWRjY193cml0ZShBVE1FTF9UU0FEQ0NfSURSLCBBVE1FTF9UU0FEQ0NfUEVOQ05UKTsKLQkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19NUiwgcmVnKTsKLQkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19JRVIsCi0JCQkJICAgQVRNRUxfVFNBRENDX0VPQygzKSB8IEFUTUVMX1RTQURDQ19OT0NOVCk7Ci0JCWF0bWVsX3RzYWRjY193cml0ZShBVE1FTF9UU0FEQ0NfVFJHUiwKLQkJCQkgICBBVE1FTF9UU0FEQ0NfVFJHTU9EX1BFUklPRCB8ICgweDBGRkYgPDwgMTYpKTsKLQotCX0gZWxzZSBpZiAoc3RhdHVzICYgQVRNRUxfVFNBRENDX0VPQygzKSkgewotCQkvKiBDb252ZXJzaW9uIGZpbmlzaGVkICovCi0KLQkJaWYgKHRzX2Rldi0+YnVmZmVyZWRtZWFzdXJlKSB7Ci0JCQkvKiBMYXN0IG1lYXN1cmVtZW50IGlzIGFsd2F5cyBkaXNjYXJkZWQsIHNpbmNlIGl0IGNhbgotCQkJICogYmUgZXJyb25lb3VzLgotCQkJICogQWx3YXlzIHJlcG9ydCBwcmV2aW91cyBtZWFzdXJlbWVudCAqLwotCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19YLCB0c19kZXYtPnByZXZfYWJzeCk7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1ksIHRzX2Rldi0+cHJldl9hYnN5KTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDEpOwotCQkJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwotCQl9IGVsc2UKLQkJCXRzX2Rldi0+YnVmZmVyZWRtZWFzdXJlID0gMTsKLQotCQkvKiBOb3cgbWFrZSBuZXcgbWVhc3VyZW1lbnQgKi8KLQkJdHNfZGV2LT5wcmV2X2Fic3ggPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMykgPDwgMTA7Ci0JCXRzX2Rldi0+cHJldl9hYnN4IC89IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIyKTsKLQotCQl0c19kZXYtPnByZXZfYWJzeSA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIxKSA8PCAxMDsKLQkJdHNfZGV2LT5wcmV2X2Fic3kgLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjApOwotCX0KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoKLSAqIFRoZSBmdW5jdGlvbnMgZm9yIGluc2VydGluZy9yZW1vdmluZyB1cyBhcyBhIG1vZHVsZS4KLSAqLwotCi1zdGF0aWMgaW50IGF0bWVsX3RzYWRjY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBhdG1lbF90c2FkY2MJKnRzX2RldjsKLQlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dF9kZXY7Ci0Jc3RydWN0IHJlc291cmNlCQkqcmVzOwotCXN0cnVjdCBhdDkxX3RzYWRjY19kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7Ci0JaW50CQllcnI7Ci0JdW5zaWduZWQgaW50CXByc2M7Ci0JdW5zaWduZWQgaW50CXJlZzsKLQotCWlmICghcGRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtbWlvIHJlc291cmNlIGRlZmluZWQuXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAqLwotCXRzX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdG1lbF90c2FkY2MpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRzX2RldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0c19kZXYpOwotCi0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZS5cbiIpOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX2ZyZWVfbWVtOwotCX0KLQotCXRzX2Rldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAodHNfZGV2LT5pcnEgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBJRCBpcyBkZXNpZ25hdGVkLlxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX2ZyZWVfZGV2OwotCX0KLQotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKLQkJCQkiYXRtZWwgdHNhZGNjIHJlZ3MiKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXNvdXJjZXMgaXMgdW5hdmFpbGFibGUuXG4iKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGVycl9mcmVlX2RldjsKLQl9Ci0KLQl0c2NfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQlpZiAoIXRzY19iYXNlKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLlxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JlbGVhc2VfbWVtOwotCX0KLQotCWVyciA9IHJlcXVlc3RfaXJxKHRzX2Rldi0+aXJxLCBhdG1lbF90c2FkY2NfaW50ZXJydXB0LCAwLAotCQkJcGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgdHNfZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBpcnEuXG4iKTsKLQkJZ290byBlcnJfdW5tYXBfcmVnczsKLQl9Ci0KLQl0c19kZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInRzY19jbGsiKTsKLQlpZiAoSVNfRVJSKHRzX2Rldi0+Y2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHRzX2Nsa1xuIik7Ci0JCWVyciA9IFBUUl9FUlIodHNfZGV2LT5jbGspOwotCQlnb3RvIGVycl9mcmVlX2lycTsKLQl9Ci0KLQl0c19kZXYtPmlucHV0ID0gaW5wdXRfZGV2OwotCXRzX2Rldi0+YnVmZmVyZWRtZWFzdXJlID0gMDsKLQotCXNucHJpbnRmKHRzX2Rldi0+cGh5cywgc2l6ZW9mKHRzX2Rldi0+cGh5cyksCi0JCSAiJXMvaW5wdXQwIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOwotCi0JaW5wdXRfZGV2LT5uYW1lID0gImF0bWVsIHRvdWNoIHNjcmVlbiBjb250cm9sbGVyIjsKLQlpbnB1dF9kZXYtPnBoeXMgPSB0c19kZXYtPnBoeXM7Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQotCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0X2Rldi0+ZXZiaXQpOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDAsIDB4M0ZGLCAwLCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCAweDNGRiwgMCwgMCk7Ci0KLQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX0tFWSwgQlROX1RPVUNIKTsKLQotCS8qIGNsa19lbmFibGUoKSBhbHdheXMgcmV0dXJucyAwLCBubyBuZWVkIHRvIGNoZWNrIGl0ICovCi0JY2xrX2VuYWJsZSh0c19kZXYtPmNsayk7Ci0KLQlwcnNjID0gY2xrX2dldF9yYXRlKHRzX2Rldi0+Y2xrKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTWFzdGVyIGNsb2NrIGlzIHNldCBhdDogJWQgSHpcbiIsIHByc2MpOwotCi0JaWYgKCFwZGF0YS0+YWRjX2Nsb2NrKQotCQlwZGF0YS0+YWRjX2Nsb2NrID0gQURDX0RFRkFVTFRfQ0xPQ0s7Ci0KLQlwcnNjID0gKHByc2MgLyAoMiAqIHBkYXRhLT5hZGNfY2xvY2spKSAtIDE7Ci0KLQkvKiBzYXR1cmF0ZSBpZiB0aGlzIHZhbHVlIGlzIHRvbyBoaWdoICovCi0JaWYgKGNwdV9pc19hdDkxc2FtOXJsKCkpIHsKLQkJaWYgKHByc2MgPiBQUkVTQ0FMRVJfVkFMKEFUTUVMX1RTQURDQ19QUkVTQ0FMKSkKLQkJCXByc2MgPSBQUkVTQ0FMRVJfVkFMKEFUTUVMX1RTQURDQ19QUkVTQ0FMKTsKLQl9IGVsc2UgewotCQlpZiAocHJzYyA+IFBSRVNDQUxFUl9WQUwoQVRNRUxfVFNBRENDX0VQUkVTQ0FMKSkKLQkJCXByc2MgPSBQUkVTQ0FMRVJfVkFMKEFUTUVMX1RTQURDQ19FUFJFU0NBTCk7Ci0JfQotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIlByZXNjYWxlciBpcyBzZXQgYXQ6ICVkXG4iLCBwcnNjKTsKLQotCXJlZyA9IEFUTUVMX1RTQURDQ19UU0FNT0RfVFNfT05MWV9NT0RFCQl8Ci0JCSgoMHgwMCA8PCA1KSAmIEFUTUVMX1RTQURDQ19TTEVFUCkJfAkvKiBOb3JtYWwgTW9kZSAqLwotCQkoKDB4MDEgPDwgNikgJiBBVE1FTF9UU0FEQ0NfUEVOREVUKQl8CS8qIEVuYWJsZSBQZW4gRGV0ZWN0ICovCi0JCShwcnNjIDw8IDgpCQkJCXwKLQkJKCgweDI2IDw8IDE2KSAmIEFUTUVMX1RTQURDQ19TVEFSVFVQKQl8Ci0JCSgocGRhdGEtPnBlbmRldF9kZWJvdW5jZSA8PCAyOCkgJiBBVE1FTF9UU0FEQ0NfUEVOREJDKTsKLQotCWF0bWVsX3RzYWRjY193cml0ZShBVE1FTF9UU0FEQ0NfQ1IsIEFUTUVMX1RTQURDQ19TV1JTVCk7Ci0JYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19NUiwgcmVnKTsKLQlhdG1lbF90c2FkY2Nfd3JpdGUoQVRNRUxfVFNBRENDX1RSR1IsIEFUTUVMX1RTQURDQ19UUkdNT0RfTk9ORSk7Ci0JYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19UU1IsCi0JCShwZGF0YS0+dHNfc2FtcGxlX2hvbGRfdGltZSA8PCAyNCkgJiBBVE1FTF9UU0FEQ0NfVFNTSFRJTSk7Ci0KLQlhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfU1IpOwotCWF0bWVsX3RzYWRjY193cml0ZShBVE1FTF9UU0FEQ0NfSUVSLCBBVE1FTF9UU0FEQ0NfUEVOQ05UKTsKLQotCS8qIEFsbCB3ZW50IG9rLCBzbyByZWdpc3RlciB0byB0aGUgaW5wdXQgc3lzdGVtICovCi0JZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZmFpbDsKLQotCXJldHVybiAwOwotCi1lcnJfZmFpbDoKLQljbGtfZGlzYWJsZSh0c19kZXYtPmNsayk7Ci0JY2xrX3B1dCh0c19kZXYtPmNsayk7Ci1lcnJfZnJlZV9pcnE6Ci0JZnJlZV9pcnEodHNfZGV2LT5pcnEsIHRzX2Rldik7Ci1lcnJfdW5tYXBfcmVnczoKLQlpb3VubWFwKHRzY19iYXNlKTsKLWVycl9yZWxlYXNlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLWVycl9mcmVlX2RldjoKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwotZXJyX2ZyZWVfbWVtOgotCWtmcmVlKHRzX2Rldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhdG1lbF90c2FkY2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGF0bWVsX3RzYWRjYyAqdHNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlmcmVlX2lycSh0c19kZXYtPmlycSwgdHNfZGV2KTsKLQotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRzX2Rldi0+aW5wdXQpOwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpb3VubWFwKHRzY19iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQotCWNsa19kaXNhYmxlKHRzX2Rldi0+Y2xrKTsKLQljbGtfcHV0KHRzX2Rldi0+Y2xrKTsKLQotCWtmcmVlKHRzX2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfdHNhZGNjX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gYXRtZWxfdHNhZGNjX3Byb2JlLAotCS5yZW1vdmUJCT0gYXRtZWxfdHNhZGNjX3JlbW92ZSwKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiYXRtZWxfdHNhZGNjIiwKLQl9LAotfTsKLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXRtZWxfdHNhZGNjX2RyaXZlcik7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQXRtZWwgVG91Y2hTY3JlZW4gRHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJEYW4gTGlhbmcgPGRhbi5saWFuZ0BhdG1lbC5jb20+Iik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvZXh5bm9zLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L2V4eW5vcy1pb21tdS5jCmluZGV4IDA3NDAxODkuLjY4NWY5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvZXh5bm9zLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9leHlub3MtaW9tbXUuYwpAQCAtNTQyLDEyICs1NDIsNyBAQAogCQlnb3RvIGVycl9hbGxvYzsKIAl9CiAKLQlyZXQgPSBkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9kYmcoZGV2LCAiVW5hYmxlZCB0byBpbml0aWFsaXplIGRyaXZlciBkYXRhXG4iKTsKLQkJZ290byBlcnJfaW5pdDsKLQl9Ci0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTsKIAlkYXRhLT5uc2ZycyA9IHBkZXYtPm51bV9yZXNvdXJjZXMgLyAyOwogCWRhdGEtPnNmcmJhc2VzID0ga21hbGxvYyhzaXplb2YoKmRhdGEtPnNmcmJhc2VzKSAqIGRhdGEtPm5zZnJzLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKQEAgLTEwMTEsMTMgKzEwMDYsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpb21tdV9vcHMgZXh5bm9zX2lvbW11X29wcyA9IHsKLQkuZG9tYWluX2luaXQgPSAmZXh5bm9zX2lvbW11X2RvbWFpbl9pbml0LAotCS5kb21haW5fZGVzdHJveSA9ICZleHlub3NfaW9tbXVfZG9tYWluX2Rlc3Ryb3ksCi0JLmF0dGFjaF9kZXYgPSAmZXh5bm9zX2lvbW11X2F0dGFjaF9kZXZpY2UsCi0JLmRldGFjaF9kZXYgPSAmZXh5bm9zX2lvbW11X2RldGFjaF9kZXZpY2UsCi0JLm1hcCA9ICZleHlub3NfaW9tbXVfbWFwLAotCS51bm1hcCA9ICZleHlub3NfaW9tbXVfdW5tYXAsCi0JLmlvdmFfdG9fcGh5cyA9ICZleHlub3NfaW9tbXVfaW92YV90b19waHlzLAorCS5kb21haW5faW5pdCA9IGV4eW5vc19pb21tdV9kb21haW5faW5pdCwKKwkuZG9tYWluX2Rlc3Ryb3kgPSBleHlub3NfaW9tbXVfZG9tYWluX2Rlc3Ryb3ksCisJLmF0dGFjaF9kZXYgPSBleHlub3NfaW9tbXVfYXR0YWNoX2RldmljZSwKKwkuZGV0YWNoX2RldiA9IGV4eW5vc19pb21tdV9kZXRhY2hfZGV2aWNlLAorCS5tYXAgPSBleHlub3NfaW9tbXVfbWFwLAorCS51bm1hcCA9IGV4eW5vc19pb21tdV91bm1hcCwKKwkuaW92YV90b19waHlzID0gZXh5bm9zX2lvbW11X2lvdmFfdG9fcGh5cywKIAkucGdzaXplX2JpdG1hcCA9IFNFQ1RfU0laRSB8IExQQUdFX1NJWkUgfCBTUEFHRV9TSVpFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hcm1hZGEtMzcwLXhwLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYwppbmRleCAzODk5YmE3Li5jODg3ZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KQEAgLTMxMCw3ICszMTEsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotdm9pZCBhcm1hZGFfbXBpY19zZW5kX2Rvb3JiZWxsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYXJtYWRhX21waWNfc2VuZF9kb29yYmVsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBjcHU7CiAJdW5zaWduZWQgbG9uZyBtYXAgPSAwOwpAQCAtMzMwLDcgKzMzMiw3IEBACiAJCUFSTUFEQV8zNzBfWFBfU1dfVFJJR19JTlRfT0ZGUyk7CiB9CiAKLXZvaWQgYXJtYWRhX3hwX21waWNfc21wX2NwdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBhcm1hZGFfeHBfbXBpY19zbXBfY3B1X2luaXQodm9pZCkKIHsKIAkvKiBDbGVhciBwZW5kaW5nIElQSXMgKi8KIAl3cml0ZWwoMCwgcGVyX2NwdV9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5fRFJCRUxfQ0FVU0VfT0ZGUyk7CkBAIC0zNDIsNiArMzQ0LDIwIEBACiAJLyogVW5tYXNrIElQSSBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgcGVyX2NwdV9pbnRfYmFzZSArIEFSTUFEQV8zNzBfWFBfSU5UX0NMRUFSX01BU0tfT0ZGUyk7CiB9CisKK3N0YXRpYyBpbnQgYXJtYWRhX3hwX21waWNfc2Vjb25kYXJ5X2luaXQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlpZiAoYWN0aW9uID09IENQVV9TVEFSVElORyB8fCBhY3Rpb24gPT0gQ1BVX1NUQVJUSU5HX0ZST1pFTikKKwkJYXJtYWRhX3hwX21waWNfc21wX2NwdV9pbml0KCk7CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhcm1hZGFfMzcwX3hwX21waWNfY3B1X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gYXJtYWRhX3hwX21waWNfc2Vjb25kYXJ5X2luaXQsCisJLnByaW9yaXR5ID0gMTAwLAorfTsKKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyBhcm1hZGFfMzcwX3hwX21waWNfaXJxX29wcyA9IHsKQEAgLTQ5Nyw2ICs1MTMsMTAgQEAKIAlpZiAocGFyZW50X2lycSA8PSAwKSB7CiAJCWlycV9zZXRfZGVmYXVsdF9ob3N0KGFybWFkYV8zNzBfeHBfbXBpY19kb21haW4pOwogCQlzZXRfaGFuZGxlX2lycShhcm1hZGFfMzcwX3hwX2hhbmRsZV9pcnEpOworI2lmZGVmIENPTkZJR19TTVAKKwkJc2V0X3NtcF9jcm9zc19jYWxsKGFybWFkYV9tcGljX3NlbmRfZG9vcmJlbGwpOworCQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmFybWFkYV8zNzBfeHBfbXBpY19jcHVfbm90aWZpZXIpOworI2VuZGlmCiAJfSBlbHNlIHsKIAkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIocGFyZW50X2lycSwKIAkJCQkJYXJtYWRhXzM3MF94cF9tcGljX2hhbmRsZV9jYXNjYWRlX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLW9yaW9uLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLW9yaW9uLmMKaW5kZXggZTI1ZjI0Ni4uMzRkMThiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1vcmlvbi5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtb3Jpb24uYwpAQCAtNDIsNyArNDIsNyBAQAogCQl1MzIgc3RhdCA9IHJlYWRsX3JlbGF4ZWQoZ2MtPnJlZ19iYXNlICsgT1JJT05fSVJRX0NBVVNFKSAmCiAJCQlnYy0+bWFza19jYWNoZTsKIAkJd2hpbGUgKHN0YXQpIHsKLQkJCXUzMiBod2lycSA9IGZmcyhzdGF0KSAtIDE7CisJCQl1MzIgaHdpcnEgPSBfX2ZscyhzdGF0KTsKIAkJCXUzMiBpcnEgPSBpcnFfZmluZF9tYXBwaW5nKG9yaW9uX2lycV9kb21haW4sCiAJCQkJCQkgICBnYy0+aXJxX2Jhc2UgKyBod2lycSk7CiAJCQloYW5kbGVfSVJRKGlycSwgcmVncyk7CkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJICAgZ2MtPm1hc2tfY2FjaGU7CiAKIAl3aGlsZSAoc3RhdCkgewotCQl1MzIgaHdpcnEgPSBmZnMoc3RhdCkgLSAxOworCQl1MzIgaHdpcnEgPSBfX2ZscyhzdGF0KTsKIAogCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhkLCBnYy0+aXJxX2Jhc2UgKyBod2lycSkpOwogCQlzdGF0ICY9IH4oMSA8PCBod2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLXNpcmZzb2MuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtc2lyZnNvYy5jCmluZGV4IDU4MWVlZmUuLjVlNTRmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtc2lyZnNvYy5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtc2lyZnNvYy5jCkBAIC01OCw3ICs1OCw4IEBACiAJaGFuZGxlX0lSUShpcnFuciwgcmVncyk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNpcmZzb2NfaXJxX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCitzdGF0aWMgaW50IF9faW5pdCBzaXJmc29jX2lycV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggNmRlOWRmYi4uMDg5ODQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTQ3OSw2ICs0NzksOCBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTEVEcyBvbiB0aGUgQmFjaG1hbm4gT1QyMDAuCiAJICBTYXkgWSB0byBlbmFibGUgTEVEcyBvbiB0aGUgQmFjaG1hbm4gT1QyMDAuCiAKK2NvbW1lbnQgIkxFRCBkcml2ZXIgZm9yIGJsaW5rKDEpIFVTQiBSR0IgTEVEIGlzIHVuZGVyIFNwZWNpYWwgSElEIGRyaXZlcnMgKEhJRF9USElOR00pIgorCiBjb25maWcgTEVEU19CTElOS00KIAl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIHRoZSBCbGlua00gSTJDIFJHQiBMRUQiCiAJZGVwZW5kcyBvbiBMRURTX0NMQVNTCkBAIC00ODcsNiArNDg5LDE0IEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBCbGlua00gUkdCIExFRCBjb25uZWN0ZWQKIAkgIHRocm91Z2ggSTJDLiBTYXkgWSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIEJsaW5rTSBMRUQuCiAKK2NvbmZpZyBMRURTX1ZFUlNBVElMRQorCXRyaXN0YXRlICJMRUQgc3VwcG9ydCBmb3IgdGhlIEFSTSBWZXJzYXRpbGUgYW5kIFJlYWxWaWV3IgorCWRlcGVuZHMgb24gQVJDSF9SRUFMVklFVyB8fCBBUkNIX1ZFUlNBVElMRQorCWRlcGVuZHMgb24gTEVEU19DTEFTUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZWQgc3VwcG9ydCBmb3IgdGhlIExFRHMgb24gdGhlIEFSTSBWZXJzYXRpbGUKKwkgIGFuZCBSZWFsVmlldyBib2FyZHMuIFNheSBZIHRvIGVuYWJsZWQgdGhlc2UuCisKIGNvbW1lbnQgIkxFRCBUcmlnZ2VycyIKIHNvdXJjZSAiZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCmluZGV4IDNjZDc2ZGIuLjhiNGM5NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKQEAgLTU0LDYgKzU0LDcgQEAKIG9iai0kKENPTkZJR19MRURTX01BWDg5OTcpCQkrPSBsZWRzLW1heDg5OTcubwogb2JqLSQoQ09ORklHX0xFRFNfTE0zNTV4KQkJKz0gbGVkcy1sbTM1NXgubwogb2JqLSQoQ09ORklHX0xFRFNfQkxJTktNKQkJKz0gbGVkcy1ibGlua20ubworb2JqLSQoQ09ORklHX0xFRFNfVkVSU0FUSUxFKQkJKz0gbGVkcy12ZXJzYXRpbGUubwogCiAjIExFRCBTUEkgRHJpdmVycwogb2JqLSQoQ09ORklHX0xFRFNfREFDMTI0UzA4NSkJCSs9IGxlZHMtZGFjMTI0czA4NS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9sZWRzLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy12ZXJzYXRpbGUuYwpzaW1pbGFyaXR5IGluZGV4IDY4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9sZWRzLmMKcmVuYW1lIHRvIGRyaXZlcnMvbGVkcy9sZWRzLXZlcnNhdGlsZS5jCmluZGV4IGQyNDkwZDAuLjgwNTUzMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL2xlZHMuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy12ZXJzYXRpbGUuYwpAQCAtNywyMiArNywxNCBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+Ci0KLSNpZmRlZiBWRVJTQVRJTEVfU1lTX0JBU0UKLSNkZWZpbmUgTEVEUkVHCShfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTEVEX09GRlNFVCkKLSNlbmRpZgotCi0jaWZkZWYgUkVBTFZJRVdfU1lTX0JBU0UKLSNkZWZpbmUgTEVEUkVHCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX0xFRF9PRkZTRVQpCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogc3RydWN0IHZlcnNhdGlsZV9sZWQgeworCXZvaWQgX19pb21lbQkJKmJhc2U7CiAJc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OwogCXU4CQkJbWFzazsKIH07CkBAIC01MCwzMCArNDIsMzcgQEAKIHsKIAlzdHJ1Y3QgdmVyc2F0aWxlX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsCiAJCQkJCQkgc3RydWN0IHZlcnNhdGlsZV9sZWQsIGNkZXYpOwotCXUzMiByZWcgPSByZWFkbChMRURSRUcpOworCXUzMiByZWcgPSByZWFkbChsZWQtPmJhc2UpOwogCiAJaWYgKGIgIT0gTEVEX09GRikKIAkJcmVnIHw9IGxlZC0+bWFzazsKIAllbHNlCiAJCXJlZyAmPSB+bGVkLT5tYXNrOwotCXdyaXRlbChyZWcsIExFRFJFRyk7CisJd3JpdGVsKHJlZywgbGVkLT5iYXNlKTsKIH0KIAogc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgdmVyc2F0aWxlX2xlZF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKIHsKIAlzdHJ1Y3QgdmVyc2F0aWxlX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsCiAJCQkJCQkgc3RydWN0IHZlcnNhdGlsZV9sZWQsIGNkZXYpOwotCXUzMiByZWcgPSByZWFkbChMRURSRUcpOworCXUzMiByZWcgPSByZWFkbChsZWQtPmJhc2UpOwogCiAJcmV0dXJuIChyZWcgJiBsZWQtPm1hc2spID8gTEVEX0ZVTEwgOiBMRURfT0ZGOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB2ZXJzYXRpbGVfbGVkc19pbml0KHZvaWQpCitzdGF0aWMgaW50IHZlcnNhdGlsZV9sZWRzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiAKLQkvKiBBbGwgT04gKi8KLQl3cml0ZWwoMHhmZiwgTEVEUkVHKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZSk7CisKKwkvKiBBbGwgb2ZmICovCisJd3JpdGVsKDAsIGJhc2UpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZlcnNhdGlsZV9sZWRzKTsgaSsrKSB7CiAJCXN0cnVjdCB2ZXJzYXRpbGVfbGVkICpsZWQ7CiAKQEAgLTgxLDYgKzgwLDcgQEAKIAkJaWYgKCFsZWQpCiAJCQlicmVhazsKIAorCQlsZWQtPmJhc2UgPSBiYXNlOwogCQlsZWQtPmNkZXYubmFtZSA9IHZlcnNhdGlsZV9sZWRzW2ldLm5hbWU7CiAJCWxlZC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IHZlcnNhdGlsZV9sZWRfc2V0OwogCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19nZXQgPSB2ZXJzYXRpbGVfbGVkX2dldDsKQEAgLTk2LDggKzk2LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBTaW5jZSB3ZSBtYXkgaGF2ZSB0cmlnZ2VycyBvbiBhbnkgc3Vic3lzdGVtLCBkZWZlciByZWdpc3RyYXRpb24KLSAqIHVudGlsIGFmdGVyIHN1YnN5c3RlbV9pbml0LgotICovCi1mc19pbml0Y2FsbCh2ZXJzYXRpbGVfbGVkc19pbml0KTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZlcnNhdGlsZV9sZWRzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgID0gInZlcnNhdGlsZS1sZWRzIiwKKwl9LAorCS5wcm9iZSA9IHZlcnNhdGlsZV9sZWRzX3Byb2JlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih2ZXJzYXRpbGVfbGVkc19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBWZXJzYXRpbGUgTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2IvbWNiLWNvcmUuYyBiL2RyaXZlcnMvbWNiL21jYi1jb3JlLmMKaW5kZXggYmJlMTI5My4uOTAxOGFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tY2IvbWNiLWNvcmUuYworKysgYi9kcml2ZXJzL21jYi9tY2ItY29yZS5jCkBAIC0xODMsMTQgKzE4MywxNCBAQAogICoKICAqIEFsbG9jYXRlIGEgbmV3IEBtY2JfYnVzLgogICovCi1zdHJ1Y3QgbWNiX2J1cyAqbWNiX2FsbG9jX2J1cyh2b2lkKQorc3RydWN0IG1jYl9idXMgKm1jYl9hbGxvY19idXMoc3RydWN0IGRldmljZSAqY2FycmllcikKIHsKIAlzdHJ1Y3QgbWNiX2J1cyAqYnVzOwogCWludCBidXNfbnI7CiAKIAlidXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNiX2J1cyksIEdGUF9LRVJORUwpOwogCWlmICghYnVzKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlidXNfbnIgPSBpZGFfc2ltcGxlX2dldCgmbWNiX2lkYSwgMCwgMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1c19uciA8IDApIHsKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmJ1cy0+Y2hpbGRyZW4pOwogCWJ1cy0+YnVzX25yID0gYnVzX25yOwotCisJYnVzLT5jYXJyaWVyID0gY2FycmllcjsKIAlyZXR1cm4gYnVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWNiX2FsbG9jX2J1cyk7CkBAIC0zNzgsNiArMzc4LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtY2JfcmVsZWFzZV9tZW0pOwogCitzdGF0aWMgaW50IF9fbWNiX2dldF9pcnEoc3RydWN0IG1jYl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycSA9ICZkZXYtPmlycTsKKworCXJldHVybiBpcnEtPnN0YXJ0OworfQorCiAvKioKICAqIG1jYl9nZXRfaXJxKCkgLSBHZXQgZGV2aWNlJ3MgSVJRIG51bWJlcgogICogQGRldjogVGhlIEBtY2JfZGV2aWNlIHRoZSBJUlEgaXMgZm9yCkBAIC0zODYsOSArMzkzLDEyIEBACiAgKi8KIGludCBtY2JfZ2V0X2lycShzdHJ1Y3QgbWNiX2RldmljZSAqZGV2KQogewotCXN0cnVjdCByZXNvdXJjZSAqaXJxID0gJmRldi0+aXJxOworCXN0cnVjdCBtY2JfYnVzICpidXMgPSBkZXYtPmJ1czsKIAotCXJldHVybiBpcnEtPnN0YXJ0OworCWlmIChidXMtPmdldF9pcnEpCisJCXJldHVybiBidXMtPmdldF9pcnEoZGV2KTsKKworCXJldHVybiBfX21jYl9nZXRfaXJxKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtY2JfZ2V0X2lycSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWNiL21jYi1wY2kuYyBiL2RyaXZlcnMvbWNiL21jYi1wY2kuYwppbmRleCA5OWM3NDJjLi5iNTkxODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21jYi9tY2ItcGNpLmMKKysrIGIvZHJpdmVycy9tY2IvbWNiLXBjaS5jCkBAIC0yMCw2ICsyMCwxNSBAQAogCXZvaWQgX19pb21lbSAqYmFzZTsKIH07CiAKK3N0YXRpYyBpbnQgbWNiX3BjaV9nZXRfaXJxKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2KQoreworCXN0cnVjdCBtY2JfYnVzICptYnVzID0gbWRldi0+YnVzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1idXMtPmNhcnJpZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlyZXR1cm4gcGRldi0+aXJxOworfQorCiBzdGF0aWMgaW50IG1jYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgcHJpdiAqcHJpdjsKQEAgLTY3LDcgKzc2LDEzIEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKLQlwcml2LT5idXMgPSBtY2JfYWxsb2NfYnVzKCk7CisJcHJpdi0+YnVzID0gbWNiX2FsbG9jX2J1cygmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKHByaXYtPmJ1cykpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5idXMpOworCQlnb3RvIGVycl9kcnZkYXRhOworCX0KKworCXByaXYtPmJ1cy0+Z2V0X2lycSA9IG1jYl9wY2lfZ2V0X2lycTsKIAogCXJldCA9IGNoYW1lbGVvbl9wYXJzZV9jZWxscyhwcml2LT5idXMsIG1hcGJhc2UsIHByaXYtPmJhc2UpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmggYi9kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaAppbmRleCA4MmM5YzVkLi5kMmViY2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaAorKysgYi9kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaApAQCAtODI4LDcgKzgyOCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAogCS8qIFBhaXJlZCB3aXRoIHRoZSBtYiBpbiBjYWNoZWRfZGV2X2F0dGFjaCAqLwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYmNhY2hlL2Nsb3N1cmUuaCBiL2RyaXZlcnMvbWQvYmNhY2hlL2Nsb3N1cmUuaAppbmRleCA3ZWY3NDYxLi5hMDhlM2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JjYWNoZS9jbG9zdXJlLmgKKysrIGIvZHJpdmVycy9tZC9iY2FjaGUvY2xvc3VyZS5oCkBAIC0yNDMsNyArMjQzLDcgQEAKIAljbC0+Zm4gPSBmbjsKIAljbC0+d3EgPSB3cTsKIAkvKiBiZXR3ZWVuIGF0b21pY19kZWMoKSBpbiBjbG9zdXJlX3B1dCgpICovCi0Jc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xvc3VyZV9xdWV1ZShzdHJ1Y3QgY2xvc3VyZSAqY2wpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWJ1ZmlvLmMgYi9kcml2ZXJzL21kL2RtLWJ1ZmlvLmMKaW5kZXggNjZjNWQxMy4uNGU4NDA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1idWZpby5jCisrKyBiL2RyaXZlcnMvbWQvZG0tYnVmaW8uYwpAQCAtNjA3LDkgKzYwNyw5IEBACiAKIAlCVUdfT04oIXRlc3RfYml0KEJfV1JJVElORywgJmItPnN0YXRlKSk7CiAKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoQl9XUklUSU5HLCAmYi0+c3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCXdha2VfdXBfYml0KCZiLT5zdGF0ZSwgQl9XUklUSU5HKTsKIH0KQEAgLTk5Nyw5ICs5OTcsOSBAQAogCiAJQlVHX09OKCF0ZXN0X2JpdChCX1JFQURJTkcsICZiLT5zdGF0ZSkpOwogCi0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KEJfUkVBRElORywgJmItPnN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAl3YWtlX3VwX2JpdCgmYi0+c3RhdGUsIEJfUkVBRElORyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCmluZGV4IGViZGRlZjUuLjhlMGNhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSBwZS0+c25hcDsKIAogCW1lbXBvb2xfZnJlZShwZSwgcy0+cGVuZGluZ19wb29sKTsKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJYXRvbWljX2RlYygmcy0+cGVuZGluZ19leGNlcHRpb25zX2NvdW50KTsKIH0KIApAQCAtNzgzLDcgKzc4Myw3IEBACiBzdGF0aWMgdm9pZCBtZXJnZV9zaHV0ZG93bihzdHJ1Y3QgZG1fc25hcHNob3QgKnMpCiB7CiAJY2xlYXJfYml0X3VubG9jayhSVU5OSU5HX01FUkdFLCAmcy0+c3RhdGVfYml0cyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXdha2VfdXBfYml0KCZzLT5zdGF0ZV9iaXRzLCBSVU5OSU5HX01FUkdFKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDQ1NWU2NDkuLmFhOWUwOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTE1NDQsNyArMTU0NCw2IEBACiAJY2xvbmUtPmNtZCA9IHJxLT5jbWQ7CiAJY2xvbmUtPmNtZF9sZW4gPSBycS0+Y21kX2xlbjsKIAljbG9uZS0+c2Vuc2UgPSBycS0+c2Vuc2U7Ci0JY2xvbmUtPmJ1ZmZlciA9IHJxLT5idWZmZXI7CiAJY2xvbmUtPmVuZF9pbyA9IGVuZF9jbG9uZV9yZXF1ZXN0OwogCWNsb25lLT5lbmRfaW9fZGF0YSA9IHRpbzsKIApAQCAtMjQ0Nyw3ICsyNDQ2LDcgQEAKIHN0YXRpYyB2b2lkIGRtX3F1ZXVlX2ZsdXNoKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAljbGVhcl9iaXQoRE1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5ELCAmbWQtPmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJcXVldWVfd29yayhtZC0+d3EsICZtZC0+d29yayk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBhZDFiOWJlLi4yYWZlZjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC00NDAwLDcgKzQ0MDAsNyBAQAogCQkJICogU1RSSVBFX09OX1VOUExVR19MSVNUIGNsZWFyIGJ1dCB0aGUgc3RyaXBlCiAJCQkgKiBpcyBzdGlsbCBpbiBvdXIgbGlzdAogCQkJICovCi0JCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQkJY2xlYXJfYml0KFNUUklQRV9PTl9VTlBMVUdfTElTVCwgJnNoLT5zdGF0ZSk7CiAJCQkvKgogCQkJICogU1RSSVBFX09OX1JFTEVBU0VfTElTVCBjb3VsZCBiZSBzZXQgaGVyZS4gSW4gdGhhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yZWRyYXQzLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JlZHJhdDMuYwppbmRleCA0N2NkMzczLi43OWFiYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JlZHJhdDMuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JlZHJhdDMuYwpAQCAtNjAsMjggKzYwLDYgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlJlZFJhdDMgVVNCIElSIFRyYW5zY2VpdmVyIERyaXZlciIKICNkZWZpbmUgRFJJVkVSX05BTUUgInJlZHJhdDMiCiAKLS8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCi0jaWZkZWYgQ09ORklHX1VTQl9ERUJVRwotc3RhdGljIGludCBkZWJ1ZyA9IDE7Ci0jZWxzZQotc3RhdGljIGludCBkZWJ1ZzsKLSNlbmRpZgotCi0jZGVmaW5lIFJSM19ERUJVR19TVEFOREFSRAkJMHgxCi0jZGVmaW5lIFJSM19ERUJVR19GVU5DVElPTl9UUkFDRQkweDIKLQotI2RlZmluZSBycjNfZGJnKGRldiwgZm10LCAuLi4pCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmIChkZWJ1ZyAmIFJSM19ERUJVR19TVEFOREFSRCkJCQlcCi0JCQlkZXZfaW5mbyhkZXYsIGZtdCwgIyMgX19WQV9BUkdTX18pOwlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBycjNfZnRyKGRldiwgZm10LCAuLi4pCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmIChkZWJ1ZyAmIFJSM19ERUJVR19GVU5DVElPTl9UUkFDRSkJCVwKLQkJCWRldl9pbmZvKGRldiwgZm10LCAjIyBfX1ZBX0FSR1NfXyk7CVwKLQl9IHdoaWxlICgwKQotCiAvKiBidWxrIGRhdGEgdHJhbnNmZXIgdHlwZXMgKi8KICNkZWZpbmUgUlIzX0VSUk9SCQkweDAxCiAjZGVmaW5lIFJSM19NT0RfU0lHTkFMX0lOCTB4MjAKQEAgLTIzNywxMyArMjE1LDExIEBACiB7CiAJaW50IHJlczsKIAotCXJyM19mdHIocnIzLT5kZXYsICJFbnRlcmluZyAlc1xuIiwgX19mdW5jX18pOwotCiAJcmVzID0gdXNiX3N1Ym1pdF91cmIocnIzLT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlcykKLQkJcnIzX2RiZyhycjMtPmRldiwgIiVzOiByZWNlaXZlIHJlcXVlc3QgRkFJTEVEISAiCi0JCQkiKHJlcyAlZCwgbGVuICVkKVxuIiwgX19mdW5jX18sIHJlcywKLQkJCXJyMy0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQlkZXZfZGJnKHJyMy0+ZGV2LAorCQkJIiVzOiByZWNlaXZlIHJlcXVlc3QgRkFJTEVEISAocmVzICVkLCBsZW4gJWQpXG4iLAorCQkJX19mdW5jX18sIHJlcywgcnIzLT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZHJhdDNfZHVtcF9md19lcnJvcihzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMywgaW50IGNvZGUpCkBAIC0zNTksNyArMzM1LDcgQEAKIHsKIAlzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMyA9IChzdHJ1Y3QgcmVkcmF0M19kZXYgKilkYXRhOwogCi0JcnIzX2RiZyhycjMtPmRldiwgImNhbGxpbmcgaXJfcmF3X2V2ZW50X3Jlc2V0XG4iKTsKKwlkZXZfZGJnKHJyMy0+ZGV2LCAiY2FsbGluZyBpcl9yYXdfZXZlbnRfcmVzZXRcbiIpOwogCWlyX3Jhd19ldmVudF9yZXNldChycjMtPnJjKTsKIH0KIApAQCAtMzc3LDggKzM1Myw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlycjNfZnRyKHJyMy0+ZGV2LCAiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCiAJZGV2ID0gcnIzLT5kZXY7CiAKIAkvKiBNYWtlIHN1cmUgd2UgcmVzZXQgdGhlIElSIGtmaWZvIGFmdGVyIGEgYml0IG9mIGluYWN0aXZpdHkgKi8KQEAgLTM4Niw3ICszNjAsNyBAQAogCW1vZF90aW1lcigmcnIzLT5yeF90aW1lb3V0LCBqaWZmaWVzICsgZGVsYXkpOwogCiAJbW9kX2ZyZXEgPSByZWRyYXQzX3ZhbF90b19tb2RfZnJlcSgmcnIzLT5pcmRhdGEpOwotCXJyM19kYmcoZGV2LCAiR290IG1vZF9mcmVxIG9mICV1XG4iLCBtb2RfZnJlcSk7CisJZGV2X2RiZyhkZXYsICJHb3QgbW9kX2ZyZXEgb2YgJXVcbiIsIG1vZF9mcmVxKTsKIAogCS8qIHByb2Nlc3MgZWFjaCBycjMgZW5jb2RlZCBieXRlIGludG8gYW4gaW50ICovCiAJc2lnX3NpemUgPSBiZTE2X3RvX2NwdShycjMtPmlyZGF0YS5zaWdfc2l6ZSk7CkBAIC00MDgsNyArMzgyLDcgQEAKIAkJLyogY2FwIHRoZSB2YWx1ZSB0byBJUl9NQVhfRFVSQVRJT04gKi8KIAkJcmF3aXIuZHVyYXRpb24gJj0gSVJfTUFYX0RVUkFUSU9OOwogCi0JCXJyM19kYmcoZGV2LCAic3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkIChpOiAlZClcbiIsCisJCWRldl9kYmcoZGV2LCAic3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkIChpOiAlZClcbiIsCiAJCQlyYXdpci5wdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiLCByYXdpci5kdXJhdGlvbiwgaSk7CiAJCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihycjMtPnJjLCAmcmF3aXIpOwogCX0KQEAgLTQyMSwxMiArMzk1LDEyIEBACiAJCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKDI4MDApOwogCQllbHNlCiAJCQlyYXdpci5kdXJhdGlvbiA9IHRyYWlsZXI7Ci0JCXJyM19kYmcoZGV2LCAic3RvcmluZyB0cmFpbGluZyBzcGFjZSB3aXRoIGR1cmF0aW9uICVkXG4iLAorCQlkZXZfZGJnKGRldiwgInN0b3JpbmcgdHJhaWxpbmcgc3BhY2Ugd2l0aCBkdXJhdGlvbiAlZFxuIiwKIAkJCXJhd2lyLmR1cmF0aW9uKTsKIAkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKHJyMy0+cmMsICZyYXdpcik7CiAJfQogCi0JcnIzX2RiZyhkZXYsICJjYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGVcbiIpOworCWRldl9kYmcoZGV2LCAiY2FsbGluZyBpcl9yYXdfZXZlbnRfaGFuZGxlXG4iKTsKIAlpcl9yYXdfZXZlbnRfaGFuZGxlKHJyMy0+cmMpOwogfQogCkBAIC00NjQsOCArNDM4LDYgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycjMtPmRldjsKIAl1OCByZXQ7CiAKLQlycjNfZnRyKGRldiwgIkVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlyZXQgPSByZWRyYXQzX3NlbmRfY21kKFJSM19SQ19ERVRfRU5BQkxFLCBycjMpOwogCWlmIChyZXQgIT0gMCkKIAkJZGV2X2RiZyhkZXYsICIlczogdW5leHBlY3RlZCByZXQgb2YgJWRcbiIsCkBAIC00ODYsNyArNDU4LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWRyYXQzX2RlbGV0ZShzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMywKIAkJCQkgIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewotCXJyM19mdHIocnIzLT5kZXYsICIlcyBjbGVhbmluZyB1cFxuIiwgX19mdW5jX18pOwogCXVzYl9raWxsX3VyYihycjMtPnJlYWRfdXJiKTsKIAl1c2Jfa2lsbF91cmIocnIzLT5mbGFzaF91cmIpOwogCXVzYl9mcmVlX3VyYihycjMtPnJlYWRfdXJiKTsKQEAgLTUxOSw3ICs0OTAsNyBAQAogCWVsc2UgewogCQl0aW1lb3V0ID0gcmVkcmF0M19sZW5fdG9fdXMoYmUzMl90b19jcHVwKHRtcCkpOwogCi0JCXJyM19kYmcocnIzLT5kZXYsICJHb3QgdGltZW91dCBvZiAlZCBtc1xuIiwgdGltZW91dCAvIDEwMDApOworCQlkZXZfZGJnKHJyMy0+ZGV2LCAiR290IHRpbWVvdXQgb2YgJWQgbXNcbiIsIHRpbWVvdXQgLyAxMDAwKTsKIAl9CiAKIAlrZnJlZSh0bXApOwpAQCAtNTM1LDggKzUwNiw2IEBACiAJdTggKnZhbDsKIAlpbnQgbGVuID0gc2l6ZW9mKHU4KTsKIAotCXJyM19mdHIoZGV2LCAiRW50ZXJpbmcgJXNcbiIsIF9fZnVuY19fKTsKLQogCXJ4cGlwZSA9IHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKTsKIAl0eHBpcGUgPSB1c2Jfc25kY3RybHBpcGUodWRldiwgMCk7CiAKQEAgLTU1MCwxOSArNTE5LDE5IEBACiAJcmMgPSB1c2JfY29udHJvbF9tc2codWRldiwgcnhwaXBlLCBSUjNfUkVTRVQsCiAJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAogCQkJICAgICBSUjNfQ1BVQ1NfUkVHX0FERFIsIDAsIHZhbCwgbGVuLCBIWiAqIDI1KTsKLQlycjNfZGJnKGRldiwgInJlc2V0IHJldHVybmVkIDB4JTAyeFxuIiwgcmMpOworCWRldl9kYmcoZGV2LCAicmVzZXQgcmV0dXJuZWQgMHglMDJ4XG4iLCByYyk7CiAKIAkqdmFsID0gNTsKIAlyYyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB0eHBpcGUsIFJSM19TRVRfSVJfUEFSQU0sCiAJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKIAkJCSAgICAgUlIzX0lSX0lPX0xFTkdUSF9GVVpaLCAwLCB2YWwsIGxlbiwgSFogKiAyNSk7Ci0JcnIzX2RiZyhkZXYsICJzZXQgaXIgcGFybSBsZW4gZnV6eiAlZCByYyAweCUwMnhcbiIsICp2YWwsIHJjKTsKKwlkZXZfZGJnKGRldiwgInNldCBpciBwYXJtIGxlbiBmdXp6ICVkIHJjIDB4JTAyeFxuIiwgKnZhbCwgcmMpOwogCiAJKnZhbCA9IFJSM19EUklWRVJfTUFYTEVOUzsKIAlyYyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB0eHBpcGUsIFJSM19TRVRfSVJfUEFSQU0sCiAJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKIAkJCSAgICAgUlIzX0lSX0lPX01BWF9MRU5HVEhTLCAwLCB2YWwsIGxlbiwgSFogKiAyNSk7Ci0JcnIzX2RiZyhkZXYsICJzZXQgaXIgcGFybSBtYXggbGVucyAlZCByYyAweCUwMnhcbiIsICp2YWwsIHJjKTsKKwlkZXZfZGJnKGRldiwgInNldCBpciBwYXJtIG1heCBsZW5zICVkIHJjIDB4JTAyeFxuIiwgKnZhbCwgcmMpOwogCiAJa2ZyZWUodmFsKTsKIH0KQEAgLTU3Miw4ICs1NDEsNiBAQAogCWludCByYyA9IDA7CiAJY2hhciAqYnVmZmVyOwogCi0JcnIzX2Z0cihycjMtPmRldiwgIkVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlidWZmZXIgPSBremFsbG9jKHNpemVvZihjaGFyKSAqIChSUjNfRldfVkVSU0lPTl9MRU4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpIHsKIAkJZGV2X2VycihycjMtPmRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwpAQCAtNTkxLDcgKzU1OCw2IEBACiAJCWRldl9lcnIocnIzLT5kZXYsICJQcm9ibGVtIGZldGNoaW5nIGZpcm13YXJlIElEXG4iKTsKIAogCWtmcmVlKGJ1ZmZlcik7Ci0JcnIzX2Z0cihycjMtPmRldiwgIkV4aXRpbmcgJXNcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgcmVkcmF0M19yZWFkX3BhY2tldF9zdGFydChzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMywgdW5zaWduZWQgbGVuKQpAQCAtNTk5LDggKzU2NSw2IEBACiAJc3RydWN0IHJlZHJhdDNfaGVhZGVyICpoZWFkZXIgPSBycjMtPmJ1bGtfaW5fYnVmOwogCXVuc2lnbmVkIHBrdGxlbiwgcGt0dHlwZTsKIAotCXJyM19mdHIocnIzLT5kZXYsICJFbnRlcmluZyAlc1xuIiwgX19mdW5jX18pOwotCiAJLyogZ3JhYiB0aGUgTGVuZ3RoIGFuZCB0eXBlIG9mIHRyYW5zZmVyICovCiAJcGt0bGVuID0gYmUxNl90b19jcHUoaGVhZGVyLT5sZW5ndGgpOwogCXBrdHR5cGUgPSBiZTE2X3RvX2NwdShoZWFkZXItPnRyYW5zZmVyX3R5cGUpOwpAQCAtNjIyLDEyICs1ODYsMTIgQEAKIAljYXNlIFJSM19NT0RfU0lHTkFMX0lOOgogCQltZW1jcHkoJnJyMy0+aXJkYXRhLCBycjMtPmJ1bGtfaW5fYnVmLCBsZW4pOwogCQlycjMtPmJ5dGVzX3JlYWQgPSBsZW47Ci0JCXJyM19kYmcocnIzLT5kZXYsICJieXRlc19yZWFkICVkLCBwa3RsZW4gJWRcbiIsCisJCWRldl9kYmcocnIzLT5kZXYsICJieXRlc19yZWFkICVkLCBwa3RsZW4gJWRcbiIsCiAJCQlycjMtPmJ5dGVzX3JlYWQsIHBrdGxlbik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcnIzX2RiZyhycjMtPmRldiwgImlnbm9yaW5nIHBhY2tldCB3aXRoIHR5cGUgMHglMDJ4LCBsZW4gb2YgJWQsIDB4JTAyeFxuIiwKKwkJZGV2X2RiZyhycjMtPmRldiwgImlnbm9yaW5nIHBhY2tldCB3aXRoIHR5cGUgMHglMDJ4LCBsZW4gb2YgJWQsIDB4JTAyeFxuIiwKIAkJCQkJCXBrdHR5cGUsIGxlbiwgcGt0bGVuKTsKIAkJYnJlYWs7CiAJfQpAQCAtNjM3LDggKzYwMSw2IEBACiB7CiAJdm9pZCAqaXJkYXRhID0gJnJyMy0+aXJkYXRhOwogCi0JcnIzX2Z0cihycjMtPmRldiwgIkVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlpZiAobGVuICsgcnIzLT5ieXRlc19yZWFkID4gc2l6ZW9mKHJyMy0+aXJkYXRhKSkgewogCQlkZXZfd2FybihycjMtPmRldiwgInRvbyBtdWNoIGRhdGEgZm9yIHBhY2tldFxuIik7CiAJCXJyMy0+Ynl0ZXNfcmVhZCA9IDA7CkBAIC02NDgsNyArNjEwLDcgQEAKIAltZW1jcHkoaXJkYXRhICsgcnIzLT5ieXRlc19yZWFkLCBycjMtPmJ1bGtfaW5fYnVmLCBsZW4pOwogCiAJcnIzLT5ieXRlc19yZWFkICs9IGxlbjsKLQlycjNfZGJnKHJyMy0+ZGV2LCAiYnl0ZXNfcmVhZCAlZCwgcGt0bGVuICVkXG4iLCBycjMtPmJ5dGVzX3JlYWQsCisJZGV2X2RiZyhycjMtPmRldiwgImJ5dGVzX3JlYWQgJWQsIHBrdGxlbiAlZFxuIiwgcnIzLT5ieXRlc19yZWFkLAogCQkJCSBiZTE2X3RvX2NwdShycjMtPmlyZGF0YS5oZWFkZXIubGVuZ3RoKSk7CiB9CiAKQEAgLTY1OSw4ICs2MjEsNiBAQAogCXVuc2lnbmVkIHBrdHR5cGU7CiAJaW50IHJldCA9IDA7CiAKLQlycjNfZnRyKGRldiwgIkVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlpZiAocnIzLT5ieXRlc19yZWFkID09IDAgJiYgbGVuID49IHNpemVvZihzdHJ1Y3QgcmVkcmF0M19oZWFkZXIpKSB7CiAJCXJlZHJhdDNfcmVhZF9wYWNrZXRfc3RhcnQocnIzLCBsZW4pOwogCX0gZWxzZSBpZiAocnIzLT5ieXRlc19yZWFkICE9IDApIHsKQEAgLTY4MSw3ICs2NDEsNyBAQAogCWlmIChwa3R0eXBlID09IFJSM19NT0RfU0lHTkFMX0lOKQogCQlyZWRyYXQzX3Byb2Nlc3NfaXJfZGF0YShycjMpOwogCWVsc2UKLQkJcnIzX2RiZyhkZXYsICJkaXNjYXJkaW5nIG5vbi1zaWduYWwgZGF0YSBwYWNrZXQgKHR5cGUgMHglMDJ4KVxuIiwKKwkJZGV2X2RiZyhkZXYsICJkaXNjYXJkaW5nIG5vbi1zaWduYWwgZGF0YSBwYWNrZXQgKHR5cGUgMHglMDJ4KVxuIiwKIAkJCQkJCQkJcGt0dHlwZSk7CiAKIG91dDoKQEAgLTcwNSw4ICs2NjUsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JcnIzX2Z0cihycjMtPmRldiwgIkVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgogCQlyZXQgPSByZWRyYXQzX2dldF9pcl9kYXRhKHJyMywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKQEAgLTc0Myw3ICs3MDEsNyBAQAogCXN0cnVjdCByZWRyYXQzX2RldiAqcnIzID0gcmNkZXYtPnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnIzLT5kZXY7CiAKLQlycjNfZGJnKGRldiwgIlNldHRpbmcgbW9kdWxhdGlvbiBmcmVxdWVuY3kgdG8gJXUiLCBjYXJyaWVyKTsKKwlkZXZfZGJnKGRldiwgIlNldHRpbmcgbW9kdWxhdGlvbiBmcmVxdWVuY3kgdG8gJXUiLCBjYXJyaWVyKTsKIAlpZiAoY2FycmllciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzY0LDggKzcyMiw2IEBACiAJdTggY3VybGVuY2hlY2sgPSAwOwogCXVuc2lnbmVkIGksIHNlbmRidWZfbGVuOwogCi0JcnIzX2Z0cihkZXYsICJFbnRlcmluZyAlc1xuIiwgX19mdW5jX18pOwotCiAJaWYgKHJyMy0+dHJhbnNtaXR0aW5nKSB7CiAJCWRldl93YXJuKGRldiwgIiVzOiB0cmFuc21pdHRlciBhbHJlYWR5IGluIHVzZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTgwMSw3ICs3NTcsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChsZW5jaGVjayA9PSBjdXJsZW5jaGVjaykgewotCQkJcnIzX2RiZyhkZXYsICJ0eGJ1ZlslZF09JXUsIHBvcyAlZCwgZW5jICV1XG4iLAorCQkJZGV2X2RiZyhkZXYsICJ0eGJ1ZlslZF09JXUsIHBvcyAlZCwgZW5jICV1XG4iLAogCQkJCWksIHR4YnVmW2ldLCBjdXJsZW5jaGVjaywgY3VyX3NhbXBsZV9sZW4pOwogCQkJaWYgKGN1cmxlbmNoZWNrIDwgUlIzX0RSSVZFUl9NQVhMRU5TKSB7CiAJCQkJLyogbm93IGNvbnZlcnQgdGhlIHZhbHVlIHRvIGEgcHJvcGVyCkBAIC04MzUsNyArNzkxLDcgQEAKIAlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHJyMy0+dWRldiwgcnIzLT5lcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MpOwogCXJldCA9IHVzYl9idWxrX21zZyhycjMtPnVkZXYsIHBpcGUsIGlyZGF0YSwKIAkJCSAgICBzZW5kYnVmX2xlbiwgJnJldF9sZW4sIDEwICogSFopOwotCXJyM19kYmcoZGV2LCAic2VudCAlZCBieXRlcywgKHJldCAlZClcbiIsIHJldF9sZW4sIHJldCk7CisJZGV2X2RiZyhkZXYsICJzZW50ICVkIGJ5dGVzLCAocmV0ICVkKVxuIiwgcmV0X2xlbiwgcmV0KTsKIAogCS8qIG5vdyB0ZWxsIHRoZSBoYXJkd2FyZSB0byB0cmFuc21pdCB3aGF0IHdlIHNlbnQgaXQgKi8KIAlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKHJyMy0+dWRldiwgMCk7CkBAIC05NTcsOCArOTEzLDYgQEAKIAlpbnQgcGlwZSwgaTsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCXJyM19mdHIoZGV2LCAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0KIAl1aGkgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKIAogCS8qIGZpbmQgb3VyIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50cyAqLwpAQCAtOTcxLDcgKzkyNSw3IEBACiAJCSAgICAoKGFkZHIgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pICYmCiAJCSAgICAoKGF0dHJzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CiAJCSAgICAgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKLQkJCXJyM19kYmcoZGV2LCAiZm91bmQgYnVsay1pbiBlbmRwb2ludCBhdCAweCUwMnhcbiIsCisJCQlkZXZfZGJnKGRldiwgImZvdW5kIGJ1bGstaW4gZW5kcG9pbnQgYXQgMHglMDJ4XG4iLAogCQkJCWVwLT5iRW5kcG9pbnRBZGRyZXNzKTsKIAkJCS8qIGRhdGEgY29tZXMgaW4gb24gMHg4MiwgMHg4MSBpcyBmb3Igb3RoZXIgZGF0YS4uLiAqLwogCQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzID09IFJSM19CVUxLX0lOX0VQX0FERFIpCkBAIC05ODIsNyArOTM2LDcgQEAKIAkJICAgICgoYWRkciAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpICYmCiAJCSAgICAoKGF0dHJzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CiAJCSAgICAgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKLQkJCXJyM19kYmcoZGV2LCAiZm91bmQgYnVsay1vdXQgZW5kcG9pbnQgYXQgMHglMDJ4XG4iLAorCQkJZGV2X2RiZyhkZXYsICJmb3VuZCBidWxrLW91dCBlbmRwb2ludCBhdCAweCUwMnhcbiIsCiAJCQkJZXAtPmJFbmRwb2ludEFkZHJlc3MpOwogCQkJZXBfb3V0ID0gZXA7CiAJCX0KQEAgLTEwNzQsNyArMTAyOCw2IEBACiAJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcnIzKTsKIAotCXJyM19mdHIoZGV2LCAiRXhpdGluZyAlc1xuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogCiBsZWRfZnJlZV9lcnJvcjoKQEAgLTEwOTMsOCArMTA0Niw2IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCByZWRyYXQzX2RldiAqcnIzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAotCXJyM19mdHIoJmludGYtPmRldiwgIkVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlpZiAoIXJyMykKIAkJcmV0dXJuOwogCkBAIC0xMTAzLDE0ICsxMDU0LDEyIEBACiAJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnJyMy0+bGVkKTsKIAlkZWxfdGltZXJfc3luYygmcnIzLT5yeF90aW1lb3V0KTsKIAlyZWRyYXQzX2RlbGV0ZShycjMsIHVkZXYpOwotCi0JcnIzX2Z0cigmaW50Zi0+ZGV2LCAiUmVkUmF0MyBJUiBUcmFuc2NlaXZlciBub3cgZGlzY29ubmVjdGVkXG4iKTsKIH0KIAogc3RhdGljIGludCByZWRyYXQzX2Rldl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JcnIzX2Z0cihycjMtPmRldiwgInN1c3BlbmRcbiIpOworCiAJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJnJyMy0+bGVkKTsKIAl1c2Jfa2lsbF91cmIocnIzLT5yZWFkX3VyYik7CiAJdXNiX2tpbGxfdXJiKHJyMy0+Zmxhc2hfdXJiKTsKQEAgLTExMjAsNyArMTA2OSw3IEBACiBzdGF0aWMgaW50IHJlZHJhdDNfZGV2X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JcnIzX2Z0cihycjMtPmRldiwgInJlc3VtZVxuIik7CisKIAlpZiAodXNiX3N1Ym1pdF91cmIocnIzLT5yZWFkX3VyYiwgR0ZQX0FUT01JQykpCiAJCXJldHVybiAtRUlPOwogCWxlZF9jbGFzc2Rldl9yZXN1bWUoJnJyMy0+bGVkKTsKQEAgLTExNDQsOCArMTA5MywzIEBACiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IyKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCByZWRyYXQzX2Rldl90YWJsZSk7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIG1vZHVsZSBkZWJ1ZyBzcGV3LiAwID0gbm8gZGVidWdnaW5nIChkZWZhdWx0KSAiCi0JCSAiMHgxID0gc3RhbmRhcmQgZGVidWcgbWVzc2FnZXMsIDB4MiA9IGZ1bmN0aW9uIHRyYWNpbmcgZGVidWcuICIKLQkJICJGbGFnIGJpdHMgYXJlIGFkZGF0aXZlIChpLmUuLCAweDMgZm9yIGJvdGggZGVidWcgdHlwZXMpLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYyBiL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKaW5kZXggZjRlMGJjMy4uYmQ1ZTRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCkBAIC00MiwxMiArNDIsNiBAQAogI2RlZmluZSBEUklWRVJfTkFNRQkic3RyZWFtemFwIgogI2RlZmluZSBEUklWRVJfREVTQwkiU3RyZWFtemFwIFJlbW90ZSBDb250cm9sIGRyaXZlciIKIAotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLXN0YXRpYyBib29sIGRlYnVnID0gMTsKLSNlbHNlCi1zdGF0aWMgYm9vbCBkZWJ1ZzsKLSNlbmRpZgotCiAjZGVmaW5lIFVTQl9TVFJFQU1aQVBfVkVORE9SX0lECQkweDBlOWMKICNkZWZpbmUgVVNCX1NUUkVBTVpBUF9QUk9EVUNUX0lECTB4MDAwMAogCkBAIC01MjgsNiArNTIyLDMgQEAKIE1PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9kdmJfdXNiX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvZHZiX3VzYl9jb3JlLmMKaW5kZXggZGUwMmRiOC4uZTM1NTgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9kdmJfdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL2R2Yl91c2JfY29yZS5jCkBAIC0zOTksNyArMzk5LDcgQEAKIAogCS8qIGNsZWFyICdzdHJlYW1pbmcnIHN0YXR1cyBiaXQgKi8KIAljbGVhcl9iaXQoQURBUF9TVFJFQU1JTkcsICZhZGFwLT5zdGF0ZV9iaXRzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoJmFkYXAtPnN0YXRlX2JpdHMsIEFEQVBfU1RSRUFNSU5HKTsKIHNraXBfZmVlZF9zdG9wOgogCkBAIC01NTAsNyArNTUwLDcgQEAKIGVycjoKIAlpZiAoIWFkYXAtPnN1c3BlbmRfcmVzdW1lX2FjdGl2ZSkgewogCQljbGVhcl9iaXQoQURBUF9JTklULCAmYWRhcC0+c3RhdGVfYml0cyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXdha2VfdXBfYml0KCZhZGFwLT5zdGF0ZV9iaXRzLCBBREFQX0lOSVQpOwogCX0KIApAQCAtNTkxLDcgKzU5MSw3IEBACiAJaWYgKCFhZGFwLT5zdXNwZW5kX3Jlc3VtZV9hY3RpdmUpIHsKIAkJYWRhcC0+YWN0aXZlX2ZlID0gLTE7CiAJCWNsZWFyX2JpdChBREFQX1NMRUVQLCAmYWRhcC0+c3RhdGVfYml0cyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXdha2VfdXBfYml0KCZhZGFwLT5zdGF0ZV9iaXRzLCBBREFQX1NMRUVQKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L212ZWJ1LWRldmJ1cy5jIGIvZHJpdmVycy9tZW1vcnkvbXZlYnUtZGV2YnVzLmMKaW5kZXggYjU5YTE3Zi4uZmY3MTM4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1vcnkvbXZlYnUtZGV2YnVzLmMKKysrIGIvZHJpdmVycy9tZW1vcnkvbXZlYnUtZGV2YnVzLmMKQEAgLTIsNyArMiw3IEBACiAgKiBNYXJ2ZWxsIEVCVSBTb0MgRGV2aWNlIEJ1cyBDb250cm9sbGVyCiAgKiAobWVtb3J5IGNvbnRyb2xsZXIgZm9yIE5PUi9OQU5EL1NSQU0vRlBHQSBkZXZpY2VzKQogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBNYXJ2ZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBNYXJ2ZWxsCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMCwxOSArMzAsNDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgREVWX1dJRFRIX0JJVAkJMzAKLSNkZWZpbmUgQkFEUl9TS0VXX0JJVAkJMjgKLSNkZWZpbmUgUkRfSE9MRF9CSVQJCTIzCi0jZGVmaW5lIEFDQ19ORVhUX0JJVAkJMTcKLSNkZWZpbmUgUkRfU0VUVVBfQklUCQkxMgotI2RlZmluZSBBQ0NfRklSU1RfQklUCQk2CisjZGVmaW5lIEFSTUFEQV9ERVZfV0lEVEhfU0hJRlQJCTMwCisjZGVmaW5lIEFSTUFEQV9CQURSX1NLRVdfU0hJRlQJCTI4CisjZGVmaW5lIEFSTUFEQV9SRF9IT0xEX1NISUZUCQkyMworI2RlZmluZSBBUk1BREFfQUNDX05FWFRfU0hJRlQJCTE3CisjZGVmaW5lIEFSTUFEQV9SRF9TRVRVUF9TSElGVAkJMTIKKyNkZWZpbmUgQVJNQURBX0FDQ19GSVJTVF9TSElGVAkJNgogCi0jZGVmaW5lIFNZTkNfRU5BQkxFX0JJVAkJMjQKLSNkZWZpbmUgV1JfSElHSF9CSVQJCTE2Ci0jZGVmaW5lIFdSX0xPV19CSVQJCTgKKyNkZWZpbmUgQVJNQURBX1NZTkNfRU5BQkxFX1NISUZUCTI0CisjZGVmaW5lIEFSTUFEQV9XUl9ISUdIX1NISUZUCQkxNgorI2RlZmluZSBBUk1BREFfV1JfTE9XX1NISUZUCQk4CiAKLSNkZWZpbmUgUkVBRF9QQVJBTV9PRkZTRVQJMHgwCi0jZGVmaW5lIFdSSVRFX1BBUkFNX09GRlNFVAkweDQKKyNkZWZpbmUgQVJNQURBX1JFQURfUEFSQU1fT0ZGU0VUCTB4MAorI2RlZmluZSBBUk1BREFfV1JJVEVfUEFSQU1fT0ZGU0VUCTB4NAorCisjZGVmaW5lIE9SSU9OX1JFU0VSVkVECQkJKDB4MiA8PCAzMCkKKyNkZWZpbmUgT1JJT05fQkFEUl9TS0VXX1NISUZUCQkyOAorI2RlZmluZSBPUklPTl9XUl9ISUdIX0VYVF9CSVQJCUJJVCgyNykKKyNkZWZpbmUgT1JJT05fV1JfSElHSF9FWFRfTUFTSwkJMHg4CisjZGVmaW5lIE9SSU9OX1dSX0xPV19FWFRfQklUCQlCSVQoMjYpCisjZGVmaW5lIE9SSU9OX1dSX0xPV19FWFRfTUFTSwkJMHg4CisjZGVmaW5lIE9SSU9OX0FMRV9XUl9FWFRfQklUCQlCSVQoMjUpCisjZGVmaW5lIE9SSU9OX0FMRV9XUl9FWFRfTUFTSwkJMHg4CisjZGVmaW5lIE9SSU9OX0FDQ19ORVhUX0VYVF9CSVQJCUJJVCgyNCkKKyNkZWZpbmUgT1JJT05fQUNDX05FWFRfRVhUX01BU0sJCTB4MTAKKyNkZWZpbmUgT1JJT05fQUNDX0ZJUlNUX0VYVF9CSVQJCUJJVCgyMykKKyNkZWZpbmUgT1JJT05fQUNDX0ZJUlNUX0VYVF9NQVNLCTB4MTAKKyNkZWZpbmUgT1JJT05fVFVSTl9PRkZfRVhUX0JJVAkJQklUKDIyKQorI2RlZmluZSBPUklPTl9UVVJOX09GRl9FWFRfTUFTSwkJMHg4CisjZGVmaW5lIE9SSU9OX0RFVl9XSURUSF9TSElGVAkJMjAKKyNkZWZpbmUgT1JJT05fV1JfSElHSF9TSElGVAkJMTcKKyNkZWZpbmUgT1JJT05fV1JfSElHSF9NQVNLCQkweDcKKyNkZWZpbmUgT1JJT05fV1JfTE9XX1NISUZUCQkxNAorI2RlZmluZSBPUklPTl9XUl9MT1dfTUFTSwkJMHg3CisjZGVmaW5lIE9SSU9OX0FMRV9XUl9TSElGVAkJMTEKKyNkZWZpbmUgT1JJT05fQUxFX1dSX01BU0sJCTB4NworI2RlZmluZSBPUklPTl9BQ0NfTkVYVF9TSElGVAkJNworI2RlZmluZSBPUklPTl9BQ0NfTkVYVF9NQVNLCQkweEYKKyNkZWZpbmUgT1JJT05fQUNDX0ZJUlNUX1NISUZUCQkzCisjZGVmaW5lIE9SSU9OX0FDQ19GSVJTVF9NQVNLCQkweEYKKyNkZWZpbmUgT1JJT05fVFVSTl9PRkZfU0hJRlQJCTAKKyNkZWZpbmUgT1JJT05fVFVSTl9PRkZfTUFTSwkJMHg3CiAKIHN0cnVjdCBkZXZidXNfcmVhZF9wYXJhbXMgewogCXUzMiBidXNfd2lkdGg7CkBAIC04OSwxOSArMTE3LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGV2YnVzX3NldF90aW1pbmdfcGFyYW1zKHN0cnVjdCBkZXZidXMgKmRldmJ1cywKLQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQorc3RhdGljIGludCBkZXZidXNfZ2V0X3RpbWluZ19wYXJhbXMoc3RydWN0IGRldmJ1cyAqZGV2YnVzLAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJICAgIHN0cnVjdCBkZXZidXNfcmVhZF9wYXJhbXMgKnIsCisJCQkJICAgIHN0cnVjdCBkZXZidXNfd3JpdGVfcGFyYW1zICp3KQogewotCXN0cnVjdCBkZXZidXNfcmVhZF9wYXJhbXMgcjsKLQlzdHJ1Y3QgZGV2YnVzX3dyaXRlX3BhcmFtcyB3OwotCXUzMiB2YWx1ZTsKIAlpbnQgZXJyOwogCi0JZGV2X2RiZyhkZXZidXMtPmRldiwgIlNldHRpbmcgdGltaW5nIHBhcmFtZXRlciwgdGljayBpcyAlbHUgcHNcbiIsCi0JCWRldmJ1cy0+dGlja19wcyk7Ci0KLQkvKiBHZXQgcmVhZCB0aW1pbmdzICovCi0JZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImRldmJ1cyxidXMtd2lkdGgiLCAmci5idXNfd2lkdGgpOworCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJkZXZidXMsYnVzLXdpZHRoIiwgJnItPmJ1c193aWR0aCk7CiAJaWYgKGVyciA8IDApIHsKIAkJZGV2X2VycihkZXZidXMtPmRldiwKIAkJCSIlcyBoYXMgbm8gJ2RldmJ1cyxidXMtd2lkdGgnIHByb3BlcnR5XG4iLApAQCAtMTEzLDEwNCArMTM2LDE0OCBAQAogCSAqIFRoZSBidXMgd2lkdGggaXMgZW5jb2RlZCBpbnRvIHRoZSByZWdpc3RlciBhcyAwIGZvciA4IGJpdHMsCiAJICogYW5kIDEgZm9yIDE2IGJpdHMsIHNvIHdlIGRvIHRoZSBuZWNlc3NhcnkgY29udmVyc2lvbiBoZXJlLgogCSAqLwotCWlmIChyLmJ1c193aWR0aCA9PSA4KQotCQlyLmJ1c193aWR0aCA9IDA7Ci0JZWxzZSBpZiAoci5idXNfd2lkdGggPT0gMTYpCi0JCXIuYnVzX3dpZHRoID0gMTsKKwlpZiAoci0+YnVzX3dpZHRoID09IDgpCisJCXItPmJ1c193aWR0aCA9IDA7CisJZWxzZSBpZiAoci0+YnVzX3dpZHRoID09IDE2KQorCQlyLT5idXNfd2lkdGggPSAxOwogCWVsc2UgewotCQlkZXZfZXJyKGRldmJ1cy0+ZGV2LCAiaW52YWxpZCBidXMgd2lkdGggJWRcbiIsIHIuYnVzX3dpZHRoKTsKKwkJZGV2X2VycihkZXZidXMtPmRldiwgImludmFsaWQgYnVzIHdpZHRoICVkXG4iLCByLT5idXNfd2lkdGgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAllcnIgPSBnZXRfdGltaW5nX3BhcmFtX3BzKGRldmJ1cywgbm9kZSwgImRldmJ1cyxiYWRyLXNrZXctcHMiLAotCQkJCSAmci5iYWRyX3NrZXcpOworCQkJCSAmci0+YmFkcl9za2V3KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGdldF90aW1pbmdfcGFyYW1fcHMoZGV2YnVzLCBub2RlLCAiZGV2YnVzLHR1cm4tb2ZmLXBzIiwKLQkJCQkgJnIudHVybl9vZmYpOworCQkJCSAmci0+dHVybl9vZmYpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gZ2V0X3RpbWluZ19wYXJhbV9wcyhkZXZidXMsIG5vZGUsICJkZXZidXMsYWNjLWZpcnN0LXBzIiwKLQkJCQkgJnIuYWNjX2ZpcnN0KTsKKwkJCQkgJnItPmFjY19maXJzdCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBnZXRfdGltaW5nX3BhcmFtX3BzKGRldmJ1cywgbm9kZSwgImRldmJ1cyxhY2MtbmV4dC1wcyIsCi0JCQkJICZyLmFjY19uZXh0KTsKKwkJCQkgJnItPmFjY19uZXh0KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGdldF90aW1pbmdfcGFyYW1fcHMoZGV2YnVzLCBub2RlLCAiZGV2YnVzLHJkLXNldHVwLXBzIiwKLQkJCQkgJnIucmRfc2V0dXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXZidXMtPmRldi0+b2Zfbm9kZSwgIm1hcnZlbGwsbXZlYnUtZGV2YnVzIikpIHsKKwkJZXJyID0gZ2V0X3RpbWluZ19wYXJhbV9wcyhkZXZidXMsIG5vZGUsICJkZXZidXMscmQtc2V0dXAtcHMiLAorCQkJCQkgICZyLT5yZF9zZXR1cCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAotCWVyciA9IGdldF90aW1pbmdfcGFyYW1fcHMoZGV2YnVzLCBub2RlLCAiZGV2YnVzLHJkLWhvbGQtcHMiLAotCQkJCSAmci5yZF9ob2xkKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gZ2V0X3RpbWluZ19wYXJhbV9wcyhkZXZidXMsIG5vZGUsICJkZXZidXMscmQtaG9sZC1wcyIsCisJCQkJCSAgJnItPnJkX2hvbGQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKLQkvKiBHZXQgd3JpdGUgdGltaW5ncyAqLwotCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJkZXZidXMsc3luYy1lbmFibGUiLAotCQkJCSAgJncuc3luY19lbmFibGUpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIoZGV2YnVzLT5kZXYsCi0JCQkiJXMgaGFzIG5vICdkZXZidXMsc3luYy1lbmFibGUnIHByb3BlcnR5XG4iLAotCQkJbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImRldmJ1cyxzeW5jLWVuYWJsZSIsCisJCQkJCSAgICZ3LT5zeW5jX2VuYWJsZSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGRldmJ1cy0+ZGV2LAorCQkJCSIlcyBoYXMgbm8gJ2RldmJ1cyxzeW5jLWVuYWJsZScgcHJvcGVydHlcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAllcnIgPSBnZXRfdGltaW5nX3BhcmFtX3BzKGRldmJ1cywgbm9kZSwgImRldmJ1cyxhbGUtd3ItcHMiLAotCQkJCSAmdy5hbGVfd3IpOworCQkJCSAmdy0+YWxlX3dyKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGdldF90aW1pbmdfcGFyYW1fcHMoZGV2YnVzLCBub2RlLCAiZGV2YnVzLHdyLWxvdy1wcyIsCi0JCQkJICZ3LndyX2xvdyk7CisJCQkJICZ3LT53cl9sb3cpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gZ2V0X3RpbWluZ19wYXJhbV9wcyhkZXZidXMsIG5vZGUsICJkZXZidXMsd3ItaGlnaC1wcyIsCi0JCQkJICZ3LndyX2hpZ2gpOworCQkJCSAmdy0+d3JfaGlnaCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGV2YnVzX29yaW9uX3NldF90aW1pbmdfcGFyYW1zKHN0cnVjdCBkZXZidXMgKmRldmJ1cywKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgc3RydWN0IGRldmJ1c19yZWFkX3BhcmFtcyAqciwKKwkJCQkJICBzdHJ1Y3QgZGV2YnVzX3dyaXRlX3BhcmFtcyAqdykKK3sKKwl1MzIgdmFsdWU7CisKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSBkZXNpZ25lcnMgZm91bmQgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8KKwkgKiBzcGxpdCBtb3N0IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIHJlZ2lzdGVyIGludG8gdHdvIGZpZWxkczoKKwkgKiBvbmUgY29udGFpbmluZyBhbGwgdGhlIGxvdy1vcmRlciBiaXRzLCBhbmQgYW5vdGhlciBvbmUKKwkgKiBjb250YWluaW5nIGp1c3QgdGhlIGhpZ2gtb3JkZXIgYml0LiBGb3IgYWxsIG9mIHRob3NlCisJICogZmllbGRzLCB3ZSBoYXZlIHRvIHNwbGl0IHRoZSB2YWx1ZSBpbnRvIHRoZXNlIHR3byBwYXJ0cy4KKwkgKi8KKwl2YWx1ZSA9CShyLT50dXJuX29mZiAgICYgT1JJT05fVFVSTl9PRkZfTUFTSykgIDw8IE9SSU9OX1RVUk5fT0ZGX1NISUZUICB8CisJCShyLT5hY2NfZmlyc3QgICYgT1JJT05fQUNDX0ZJUlNUX01BU0spIDw8IE9SSU9OX0FDQ19GSVJTVF9TSElGVCB8CisJCShyLT5hY2NfbmV4dCAgICYgT1JJT05fQUNDX05FWFRfTUFTSykgIDw8IE9SSU9OX0FDQ19ORVhUX1NISUZUICB8CisJCSh3LT5hbGVfd3IgICAgICYgT1JJT05fQUxFX1dSX01BU0spICAgIDw8IE9SSU9OX0FMRV9XUl9TSElGVCAgICB8CisJCSh3LT53cl9sb3cgICAgICYgT1JJT05fV1JfTE9XX01BU0spICAgIDw8IE9SSU9OX1dSX0xPV19TSElGVCAgICB8CisJCSh3LT53cl9oaWdoICAgICYgT1JJT05fV1JfSElHSF9NQVNLKSAgIDw8IE9SSU9OX1dSX0hJR0hfU0hJRlQgICB8CisJCXItPmJ1c193aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IE9SSU9OX0RFVl9XSURUSF9TSElGVCB8CisJCSgoci0+dHVybl9vZmYgICYgT1JJT05fVFVSTl9PRkZfRVhUX01BU0spICA/IE9SSU9OX1RVUk5fT0ZGX0VYVF9CSVQgIDogMCkgfAorCQkoKHItPmFjY19maXJzdCAmIE9SSU9OX0FDQ19GSVJTVF9FWFRfTUFTSykgPyBPUklPTl9BQ0NfRklSU1RfRVhUX0JJVCA6IDApIHwKKwkJKChyLT5hY2NfbmV4dCAgJiBPUklPTl9BQ0NfTkVYVF9FWFRfTUFTSykgID8gT1JJT05fQUNDX05FWFRfRVhUX0JJVCAgOiAwKSB8CisJCSgody0+YWxlX3dyICAgICYgT1JJT05fQUxFX1dSX0VYVF9NQVNLKSAgICA/IE9SSU9OX0FMRV9XUl9FWFRfQklUICAgIDogMCkgfAorCQkoKHctPndyX2xvdyAgICAmIE9SSU9OX1dSX0xPV19FWFRfTUFTSykgICAgPyBPUklPTl9XUl9MT1dfRVhUX0JJVCAgICA6IDApIHwKKwkJKCh3LT53cl9oaWdoICAgJiBPUklPTl9XUl9ISUdIX0VYVF9NQVNLKSAgID8gT1JJT05fV1JfSElHSF9FWFRfQklUICAgOiAwKSB8CisJCShyLT5iYWRyX3NrZXcgPDwgT1JJT05fQkFEUl9TS0VXX1NISUZUKSB8CisJCU9SSU9OX1JFU0VSVkVEOworCisJd3JpdGVsKHZhbHVlLCBkZXZidXMtPmJhc2UpOworfQorCitzdGF0aWMgdm9pZCBkZXZidXNfYXJtYWRhX3NldF90aW1pbmdfcGFyYW1zKHN0cnVjdCBkZXZidXMgKmRldmJ1cywKKwkJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgICBzdHJ1Y3QgZGV2YnVzX3JlYWRfcGFyYW1zICpyLAorCQkJCQkgICBzdHJ1Y3QgZGV2YnVzX3dyaXRlX3BhcmFtcyAqdykKK3sKKwl1MzIgdmFsdWU7CisKIAkvKiBTZXQgcmVhZCB0aW1pbmdzICovCi0JdmFsdWUgPSByLmJ1c193aWR0aCA8PCBERVZfV0lEVEhfQklUIHwKLQkJci5iYWRyX3NrZXcgPDwgQkFEUl9TS0VXX0JJVCB8Ci0JCXIucmRfaG9sZCAgIDw8IFJEX0hPTERfQklUICAgfAotCQlyLmFjY19uZXh0ICA8PCBBQ0NfTkVYVF9CSVQgIHwKLQkJci5yZF9zZXR1cCAgPDwgUkRfU0VUVVBfQklUICB8Ci0JCXIuYWNjX2ZpcnN0IDw8IEFDQ19GSVJTVF9CSVQgfAotCQlyLnR1cm5fb2ZmOworCXZhbHVlID0gci0+YnVzX3dpZHRoIDw8IEFSTUFEQV9ERVZfV0lEVEhfU0hJRlQgfAorCQlyLT5iYWRyX3NrZXcgPDwgQVJNQURBX0JBRFJfU0tFV19TSElGVCB8CisJCXItPnJkX2hvbGQgICA8PCBBUk1BREFfUkRfSE9MRF9TSElGVCAgIHwKKwkJci0+YWNjX25leHQgIDw8IEFSTUFEQV9BQ0NfTkVYVF9TSElGVCAgfAorCQlyLT5yZF9zZXR1cCAgPDwgQVJNQURBX1JEX1NFVFVQX1NISUZUICB8CisJCXItPmFjY19maXJzdCA8PCBBUk1BREFfQUNDX0ZJUlNUX1NISUZUIHwKKwkJci0+dHVybl9vZmY7CiAKIAlkZXZfZGJnKGRldmJ1cy0+ZGV2LCAicmVhZCBwYXJhbWV0ZXJzIHJlZ2lzdGVyIDB4JXAgPSAweCV4XG4iLAotCQlkZXZidXMtPmJhc2UgKyBSRUFEX1BBUkFNX09GRlNFVCwKKwkJZGV2YnVzLT5iYXNlICsgQVJNQURBX1JFQURfUEFSQU1fT0ZGU0VULAogCQl2YWx1ZSk7CiAKLQl3cml0ZWwodmFsdWUsIGRldmJ1cy0+YmFzZSArIFJFQURfUEFSQU1fT0ZGU0VUKTsKKwl3cml0ZWwodmFsdWUsIGRldmJ1cy0+YmFzZSArIEFSTUFEQV9SRUFEX1BBUkFNX09GRlNFVCk7CiAKIAkvKiBTZXQgd3JpdGUgdGltaW5ncyAqLwotCXZhbHVlID0gdy5zeW5jX2VuYWJsZSAgPDwgU1lOQ19FTkFCTEVfQklUIHwKLQkJdy53cl9sb3cgICAgICAgPDwgV1JfTE9XX0JJVCAgICAgIHwKLQkJdy53cl9oaWdoICAgICAgPDwgV1JfSElHSF9CSVQgICAgIHwKLQkJdy5hbGVfd3I7CisJdmFsdWUgPSB3LT5zeW5jX2VuYWJsZSAgPDwgQVJNQURBX1NZTkNfRU5BQkxFX1NISUZUIHwKKwkJdy0+d3JfbG93ICAgICAgIDw8IEFSTUFEQV9XUl9MT1dfU0hJRlQgICAgICB8CisJCXctPndyX2hpZ2ggICAgICA8PCBBUk1BREFfV1JfSElHSF9TSElGVCAgICAgfAorCQl3LT5hbGVfd3I7CiAKIAlkZXZfZGJnKGRldmJ1cy0+ZGV2LCAid3JpdGUgcGFyYW1ldGVycyByZWdpc3RlcjogMHglcCA9IDB4JXhcbiIsCi0JCWRldmJ1cy0+YmFzZSArIFdSSVRFX1BBUkFNX09GRlNFVCwKKwkJZGV2YnVzLT5iYXNlICsgQVJNQURBX1dSSVRFX1BBUkFNX09GRlNFVCwKIAkJdmFsdWUpOwogCi0Jd3JpdGVsKHZhbHVlLCBkZXZidXMtPmJhc2UgKyBXUklURV9QQVJBTV9PRkZTRVQpOwotCi0JcmV0dXJuIDA7CisJd3JpdGVsKHZhbHVlLCBkZXZidXMtPmJhc2UgKyBBUk1BREFfV1JJVEVfUEFSQU1fT0ZGU0VUKTsKIH0KIAogc3RhdGljIGludCBtdmVidV9kZXZidXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkZXZidXNfcmVhZF9wYXJhbXMgcjsKKwlzdHJ1Y3QgZGV2YnVzX3dyaXRlX3BhcmFtcyB3OwogCXN0cnVjdCBkZXZidXMgKmRldmJ1czsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0yNDAsMTAgKzMwNywyMSBAQAogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIDEwMDA7CiAJZGV2YnVzLT50aWNrX3BzID0gMTAwMDAwMDAwMCAvIHJhdGU7CiAKLQkvKiBSZWFkIHRoZSBkZXZpY2UgdHJlZSBub2RlIGFuZCBzZXQgdGhlIG5ldyB0aW1pbmcgcGFyYW1ldGVycyAqLwotCWVyciA9IGRldmJ1c19zZXRfdGltaW5nX3BhcmFtcyhkZXZidXMsIG5vZGUpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWRldl9kYmcoZGV2YnVzLT5kZXYsICJTZXR0aW5nIHRpbWluZyBwYXJhbWV0ZXIsIHRpY2sgaXMgJWx1IHBzXG4iLAorCQlkZXZidXMtPnRpY2tfcHMpOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgImRldmJ1cyxrZWVwLWNvbmZpZyIpKSB7CisJCS8qIFJlYWQgdGhlIERldmljZSBUcmVlIG5vZGUgKi8KKwkJZXJyID0gZGV2YnVzX2dldF90aW1pbmdfcGFyYW1zKGRldmJ1cywgbm9kZSwgJnIsICZ3KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCS8qIFNldCB0aGUgbmV3IHRpbWluZyBwYXJhbWV0ZXJzICovCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAibWFydmVsbCxvcmlvbi1kZXZidXMiKSkKKwkJCWRldmJ1c19vcmlvbl9zZXRfdGltaW5nX3BhcmFtcyhkZXZidXMsIG5vZGUsICZyLCAmdyk7CisJCWVsc2UKKwkJCWRldmJ1c19hcm1hZGFfc2V0X3RpbWluZ19wYXJhbXMoZGV2YnVzLCBub2RlLCAmciwgJncpOworCX0KIAogCS8qCiAJICogV2UgbmVlZCB0byBjcmVhdGUgYSBjaGlsZCBkZXZpY2UgZXhwbGljaXRseSBmcm9tIGhlcmUgdG8KQEAgLTI1OSw2ICszMzcsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdmVidV9kZXZidXNfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsbXZlYnUtZGV2YnVzIiB9LAorCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1kZXZidXMiIH0sCiAJe30sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXZlYnVfZGV2YnVzX29mX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IDMzODM0MTIuLjZkZWI4YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtMzMxLDE1ICszMzEsMTUgQEAKIAkgIGJhdHRlcnktY2hhcmdlciB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy4KIAogY29uZmlnIE1GRF9NQVgxNDU3NwotCWJvb2wgIk1heGltIFNlbWljb25kdWN0b3IgTUFYMTQ1NzcgTVVJQyArIENoYXJnZXIgU3VwcG9ydCIKKwlib29sICJNYXhpbSBTZW1pY29uZHVjdG9yIE1BWDE0NTc3Lzc3ODM2IE1VSUMgKyBDaGFyZ2VyIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJMkM9eQogCXNlbGVjdCBNRkRfQ09SRQogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFJFR01BUF9JUlEKIAlzZWxlY3QgSVJRX0RPTUFJTgogCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBhZGQgc3VwcG9ydCBmb3IgTWF4aW0gU2VtaWNvbmR1Y3RvciBNQVgxNDU3Ny4KLQkgIFRoaXMgaXMgYSBNaWNyby1VU0IgSUMgd2l0aCBDaGFyZ2VyIGNvbnRyb2xzIG9uIGNoaXAuCisJICBTYXkgeWVzIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIE1heGltIFNlbWljb25kdWN0b3IgTUFYMTQ1NzcgYW5kCisJICBNQVg3NzgzNiBNaWNyby1VU0IgSUNzIHdpdGggYmF0dGVyeSBjaGFyZ2VyLgogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlOwogCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlIGZ1bmN0aW9uYWxpdHkKIAkgIG9mIHRoZSBkZXZpY2UuCkBAIC0xMjI3LDEyICsxMjI3LDE3IEBACiAKIGVuZG1lbnUKIAotY29uZmlnIFZFWFBSRVNTX0NPTkZJRwotCWJvb2wgIkFSTSBWZXJzYXRpbGUgRXhwcmVzcyBwbGF0Zm9ybSBpbmZyYXN0cnVjdHVyZSIKLQlkZXBlbmRzIG9uIEFSTSB8fCBBUk02NAorY29uZmlnIE1GRF9WRVhQUkVTU19TWVNSRUcKKwlib29sICJWZXJzYXRpbGUgRXhwcmVzcyBTeXN0ZW0gUmVnaXN0ZXJzIgorCWRlcGVuZHMgb24gVkVYUFJFU1NfQ09ORklHICYmIEdQSU9MSUIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgQ0xLU1JDX01NSU8KKwlzZWxlY3QgR1BJT19HRU5FUklDX1BMQVRGT1JNCisJc2VsZWN0IE1GRF9DT1JFCisJc2VsZWN0IE1GRF9TWVNDT04KIAloZWxwCi0JICBQbGF0Zm9ybSBjb25maWd1cmF0aW9uIGluZnJhc3RydWN0dXJlIGZvciB0aGUgQVJNIEx0ZC4KLQkgIFZlcnNhdGlsZSBFeHByZXNzLgorCSAgU3lzdGVtIFJlZ2lzdGVycyBhcmUgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gYmxvY2sKKwkgIG9uIHRoZSBBUk0gTHRkLiBWZXJzYXRpbGUgRXhwcmVzcyBib2FyZC4KIAogZW5kbWVudQogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggMjg1MTI3NS4uY2VjMzQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTE2MSw3ICsxNjEsNyBAQAogb2JqLSQoQ09ORklHX01GRF9TRUNfQ09SRSkJKz0gc2VjLWNvcmUubyBzZWMtaXJxLm8KIG9iai0kKENPTkZJR19NRkRfU1lTQ09OKQkrPSBzeXNjb24ubwogb2JqLSQoQ09ORklHX01GRF9MTTM1MzMpCSs9IGxtMzUzMy1jb3JlLm8gbG0zNTMzLWN0cmxiYW5rLm8KLW9iai0kKENPTkZJR19WRVhQUkVTU19DT05GSUcpCSs9IHZleHByZXNzLWNvbmZpZy5vIHZleHByZXNzLXN5c3JlZy5vCitvYmotJChDT05GSUdfTUZEX1ZFWFBSRVNTX1NZU1JFRykJKz0gdmV4cHJlc3Mtc3lzcmVnLm8KIG9iai0kKENPTkZJR19NRkRfUkVUVSkJCSs9IHJldHUtbWZkLm8KIG9iai0kKENPTkZJR19NRkRfQVMzNzExKQkrPSBhczM3MTEubwogb2JqLSQoQ09ORklHX01GRF9BUzM3MjIpCSs9IGFzMzcyMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hcml6b25hLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2FyaXpvbmEtY29yZS5jCmluZGV4IDFjM2FlNTcuLjA3ZTZlMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FyaXpvbmEtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2FyaXpvbmEtY29yZS5jCkBAIC01MDgsMTkgKzUwOCwzMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJpem9uYV9vZl9nZXRfdHlwZSk7CiAKK2ludCBhcml6b25hX29mX2dldF9uYW1lZF9ncGlvKHN0cnVjdCBhcml6b25hICphcml6b25hLCBjb25zdCBjaGFyICpwcm9wLAorCQkJICAgICAgYm9vbCBtYW5kYXRvcnkpCit7CisJaW50IGdwaW87CisKKwlncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8oYXJpem9uYS0+ZGV2LT5vZl9ub2RlLCBwcm9wLCAwKTsKKwlpZiAoZ3BpbyA8IDApIHsKKwkJaWYgKG1hbmRhdG9yeSkKKwkJCWRldl9lcnIoYXJpem9uYS0+ZGV2LAorCQkJCSJNYW5kYXRvcnkgRFQgZ3BpbyAlcyBtaXNzaW5nL21hbGZvcm1lZDogJWRcbiIsCisJCQkJcHJvcCwgZ3Bpbyk7CisKKwkJZ3BpbyA9IDA7CisJfQorCisJcmV0dXJuIGdwaW87Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhcml6b25hX29mX2dldF9uYW1lZF9ncGlvKTsKKwogc3RhdGljIGludCBhcml6b25hX29mX2dldF9jb3JlX3BkYXRhKHN0cnVjdCBhcml6b25hICphcml6b25hKQogeworCXN0cnVjdCBhcml6b25hX3BkYXRhICpwZGF0YSA9ICZhcml6b25hLT5wZGF0YTsKIAlpbnQgcmV0LCBpOwogCi0JYXJpem9uYS0+cGRhdGEucmVzZXQgPSBvZl9nZXRfbmFtZWRfZ3Bpbyhhcml6b25hLT5kZXYtPm9mX25vZGUsCi0JCQkJCQkgIndsZixyZXNldCIsIDApOwotCWlmIChhcml6b25hLT5wZGF0YS5yZXNldCA8IDApCi0JCWFyaXpvbmEtPnBkYXRhLnJlc2V0ID0gMDsKLQotCWFyaXpvbmEtPnBkYXRhLmxkb2VuYSA9IG9mX2dldF9uYW1lZF9ncGlvKGFyaXpvbmEtPmRldi0+b2Zfbm9kZSwKLQkJCQkJCSAgIndsZixsZG9lbmEiLCAwKTsKLQlpZiAoYXJpem9uYS0+cGRhdGEubGRvZW5hIDwgMCkKLQkJYXJpem9uYS0+cGRhdGEubGRvZW5hID0gMDsKKwlwZGF0YS0+cmVzZXQgPSBhcml6b25hX29mX2dldF9uYW1lZF9ncGlvKGFyaXpvbmEsICJ3bGYscmVzZXQiLCB0cnVlKTsKIAogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGFyaXpvbmEtPmRldi0+b2Zfbm9kZSwKIAkJCQkJICJ3bGYsZ3Bpby1kZWZhdWx0cyIsCkBAIC02NTIsNiArNjY0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogTWFyayBEQ1ZERCBhcyBleHRlcm5hbCwgTERPMSBkcml2ZXIgd2lsbCBjbGVhciBpZiBpbnRlcm5hbCAqLworCWFyaXpvbmEtPmV4dGVybmFsX2RjdmRkID0gdHJ1ZTsKKwogCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhhcml6b25hLT5kZXYsIC0xLCBlYXJseV9kZXZzLAogCQkJICAgICAgQVJSQVlfU0laRShlYXJseV9kZXZzKSwgTlVMTCwgMCwgTlVMTCk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC04NTEsMTQgKzg2Niw2IEBACiAJCQkgICAgIGFyaXpvbmEtPnBkYXRhLmdwaW9fZGVmYXVsdHNbaV0pOwogCX0KIAotCS8qCi0JICogTERPMSBjYW4gb25seSBiZSB1c2VkIHRvIHN1cHBseSBEQ1ZERCBzbyBpZiBpdCBoYXMgbm8KLQkgKiBjb25zdW1lcnMgdGhlbiBEQ1ZERCBpcyBzdXBwbGllZCBleHRlcm5hbGx5LgotCSAqLwotCWlmIChhcml6b25hLT5wZGF0YS5sZG8xICYmCi0JICAgIGFyaXpvbmEtPnBkYXRhLmxkbzEtPm51bV9jb25zdW1lcl9zdXBwbGllcyA9PSAwKQotCQlhcml6b25hLT5leHRlcm5hbF9kY3ZkZCA9IHRydWU7Ci0KIAlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShhcml6b25hLT5kZXYsIDEwMCk7CiAJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoYXJpem9uYS0+ZGV2KTsKIAlwbV9ydW50aW1lX2VuYWJsZShhcml6b25hLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYmNtNTkweHguYyBiL2RyaXZlcnMvbWZkL2JjbTU5MHh4LmMKaW5kZXggZTlhMzNjNy4uNDNjYmExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYmNtNTkweHguYworKysgYi9kcml2ZXJzL21mZC9iY201OTB4eC5jCkBAIC0yOCwzOSArMjgsNzEgQEAKIAl9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGJjbTU5MHh4X3JlZ21hcF9jb25maWcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYmNtNTkweHhfcmVnbWFwX2NvbmZpZ19wcmkgPSB7CiAJLnJlZ19iaXRzCT0gOCwKIAkudmFsX2JpdHMJPSA4LAotCS5tYXhfcmVnaXN0ZXIJPSBCQ001OTBYWF9NQVhfUkVHSVNURVIsCisJLm1heF9yZWdpc3Rlcgk9IEJDTTU5MFhYX01BWF9SRUdJU1RFUl9QUkksCiAJLmNhY2hlX3R5cGUJPSBSRUdDQUNIRV9SQlRSRUUsCiB9OwogCi1zdGF0aWMgaW50IGJjbTU5MHh4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGJjbTU5MHh4X3JlZ21hcF9jb25maWdfc2VjID0geworCS5yZWdfYml0cwk9IDgsCisJLnZhbF9iaXRzCT0gOCwKKwkubWF4X3JlZ2lzdGVyCT0gQkNNNTkwWFhfTUFYX1JFR0lTVEVSX1NFQywKKwkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX1JCVFJFRSwKK307CisKK3N0YXRpYyBpbnQgYmNtNTkweHhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmNfcHJpLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBiY201OTB4eCAqYmNtNTkweHg7CiAJaW50IHJldDsKIAotCWJjbTU5MHh4ID0gZGV2bV9remFsbG9jKCZpMmMtPmRldiwgc2l6ZW9mKCpiY201OTB4eCksIEdGUF9LRVJORUwpOworCWJjbTU5MHh4ID0gZGV2bV9remFsbG9jKCZpMmNfcHJpLT5kZXYsIHNpemVvZigqYmNtNTkweHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJjbTU5MHh4KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGJjbTU5MHh4KTsKLQliY201OTB4eC0+ZGV2ID0gJmkyYy0+ZGV2OwotCWJjbTU5MHh4LT5pMmNfY2xpZW50ID0gaTJjOworCWkyY19zZXRfY2xpZW50ZGF0YShpMmNfcHJpLCBiY201OTB4eCk7CisJYmNtNTkweHgtPmRldiA9ICZpMmNfcHJpLT5kZXY7CisJYmNtNTkweHgtPmkyY19wcmkgPSBpMmNfcHJpOwogCi0JYmNtNTkweHgtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJmJjbTU5MHh4X3JlZ21hcF9jb25maWcpOwotCWlmIChJU19FUlIoYmNtNTkweHgtPnJlZ21hcCkpIHsKLQkJcmV0ID0gUFRSX0VSUihiY201OTB4eC0+cmVnbWFwKTsKLQkJZGV2X2VycigmaTJjLT5kZXYsICJyZWdtYXAgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwliY201OTB4eC0+cmVnbWFwX3ByaSA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyY19wcmksCisJCQkJCQkgJmJjbTU5MHh4X3JlZ21hcF9jb25maWdfcHJpKTsKKwlpZiAoSVNfRVJSKGJjbTU5MHh4LT5yZWdtYXBfcHJpKSkgeworCQlyZXQgPSBQVFJfRVJSKGJjbTU5MHh4LT5yZWdtYXBfcHJpKTsKKwkJZGV2X2VycigmaTJjX3ByaS0+ZGV2LCAicHJpbWFyeSByZWdtYXAgaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmaTJjLT5kZXYsIC0xLCBiY201OTB4eF9kZXZzLAotCQkJICAgICAgQVJSQVlfU0laRShiY201OTB4eF9kZXZzKSwgTlVMTCwgMCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJmkyYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBzdWItZGV2aWNlczogJWRcbiIsIHJldCk7CisJLyogU2Vjb25kYXJ5IEkyQyBzbGF2ZSBhZGRyZXNzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgd2l0aCBBKDIpIGFzc2VydGVkICovCisJYmNtNTkweHgtPmkyY19zZWMgPSBpMmNfbmV3X2R1bW15KGkyY19wcmktPmFkYXB0ZXIsCisJCQkJCSAgaTJjX3ByaS0+YWRkciB8IEJJVCgyKSk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGJjbTU5MHh4LT5pMmNfc2VjKSkgeworCQlkZXZfZXJyKCZpMmNfcHJpLT5kZXYsICJmYWlsZWQgdG8gYWRkIHNlY29uZGFyeSBJMkMgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWkyY19zZXRfY2xpZW50ZGF0YShiY201OTB4eC0+aTJjX3NlYywgYmNtNTkweHgpOwogCisJYmNtNTkweHgtPnJlZ21hcF9zZWMgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhiY201OTB4eC0+aTJjX3NlYywKKwkJCQkJCSZiY201OTB4eF9yZWdtYXBfY29uZmlnX3NlYyk7CisJaWYgKElTX0VSUihiY201OTB4eC0+cmVnbWFwX3NlYykpIHsKKwkJcmV0ID0gUFRSX0VSUihiY201OTB4eC0+cmVnbWFwX3NlYyk7CisJCWRldl9lcnIoJmJjbTU5MHh4LT5pMmNfc2VjLT5kZXYsCisJCQkic2Vjb25kYXJ5IHJlZ21hcCBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmaTJjX3ByaS0+ZGV2LCAtMSwgYmNtNTkweHhfZGV2cywKKwkJCSAgICAgIEFSUkFZX1NJWkUoYmNtNTkweHhfZGV2cyksIE5VTEwsIDAsIE5VTEwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19wcmktPmRldiwgImZhaWxlZCB0byBhZGQgc3ViLWRldmljZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWkyY191bnJlZ2lzdGVyX2RldmljZShiY201OTB4eC0+aTJjX3NlYyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWF4MTQ1NzcuYyBiL2RyaXZlcnMvbWZkL21heDE0NTc3LmMKaW5kZXggNWYxM2NlZi4uNDg0ZDM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWF4MTQ1NzcuYworKysgYi9kcml2ZXJzL21mZC9tYXgxNDU3Ny5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIG1heDE0NTc3LmMgLSBtZmQgY29yZSBkcml2ZXIgZm9yIHRoZSBNYXhpbSAxNDU3NworICogbWF4MTQ1NzcuYyAtIG1mZCBjb3JlIGRyaXZlciBmb3IgdGhlIE1heGltIDE0NTc3Lzc3ODM2CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Rybm9pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm5vaWNzCiAgKiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KICAqIEtyenlzenRvZiBLb3psb3dza2kgPGsua296bG93c2tpQHNhbXN1bmcuY29tPgogICoKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9tYXgxNDU3Ny5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9tYXgxNDU3Ny1wcml2YXRlLmg+CkBAIC0zNyw3ICszOCwzOCBAQAogCXsgLm5hbWUgPSAibWF4MTQ1NzctY2hhcmdlciIsIH0sCiB9OwogCi1zdGF0aWMgYm9vbCBtYXgxNDU3N192b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBtYXg3NzgzNl9kZXZzW10gPSB7CisJeworCQkubmFtZSA9ICJtYXg3NzgzNi1tdWljIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtbXVpYyIsCisJfSwKKwl7CisJCS5uYW1lID0gIm1heDc3ODM2LXJlZ3VsYXRvciIsCisJCS5vZl9jb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LXJlZ3VsYXRvciIsCisJfSwKKwl7CisJCS5uYW1lID0gIm1heDc3ODM2LWNoYXJnZXIiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1jaGFyZ2VyIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAibWF4Nzc4MzYtYmF0dGVyeSIsCisJCS5vZl9jb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LWJhdHRlcnkiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtYXgxNDU3N19kdF9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAibWF4aW0sbWF4MTQ1NzciLAorCQkuZGF0YSA9ICh2b2lkICopTUFYSU1fREVWSUNFX1RZUEVfTUFYMTQ1NzcsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2IiwKKwkJLmRhdGEgPSAodm9pZCAqKU1BWElNX0RFVklDRV9UWVBFX01BWDc3ODM2LAorCX0sCisJe30sCit9OworCitzdGF0aWMgYm9vbCBtYXgxNDU3N19tdWljX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIE1BWDE0NTc3X1JFR19JTlQxIC4uLiBNQVgxNDU3N19SRUdfU1RBVFVTMzoKQEAgLTQ4LDQ5ICs4MCwyMjEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtYXgxNDU3N19yZWdtYXBfY29uZmlnID0geworc3RhdGljIGJvb2wgbWF4Nzc4MzZfbXVpY192b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCS8qIEFueSBtYXgxNDU3NyB2b2xhdGlsZSByZWdpc3RlcnMgYXJlIGFsc28gbWF4Nzc4MzYgdm9sYXRpbGUuICovCisJaWYgKG1heDE0NTc3X211aWNfdm9sYXRpbGVfcmVnKGRldiwgcmVnKSkKKwkJcmV0dXJuIHRydWU7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTUFYNzc4MzZfRkdfUkVHX1ZDRUxMX01TQiAuLi4gTUFYNzc4MzZfRkdfUkVHX1NPQ19MU0I6CisJY2FzZSBNQVg3NzgzNl9GR19SRUdfQ1JBVEVfTVNCIC4uLiBNQVg3NzgzNl9GR19SRUdfQ1JBVEVfTFNCOgorCWNhc2UgTUFYNzc4MzZfRkdfUkVHX1NUQVRVU19IIC4uLiBNQVg3NzgzNl9GR19SRUdfU1RBVFVTX0w6CisJY2FzZSBNQVg3NzgzNl9QTUlDX1JFR19JTlRTUkM6CisJY2FzZSBNQVg3NzgzNl9QTUlDX1JFR19UT1BTWVNfSU5UOgorCWNhc2UgTUFYNzc4MzZfUE1JQ19SRUdfVE9QU1lTX1NUQVQ6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtYXgxNDU3N19tdWljX3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzCT0gOCwKIAkudmFsX2JpdHMJPSA4LAotCS52b2xhdGlsZV9yZWcJPSBtYXgxNDU3N192b2xhdGlsZV9yZWcsCisJLnZvbGF0aWxlX3JlZwk9IG1heDE0NTc3X211aWNfdm9sYXRpbGVfcmVnLAogCS5tYXhfcmVnaXN0ZXIJPSBNQVgxNDU3N19SRUdfRU5ELAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1heDc3ODM2X3BtaWNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMJPSA4LAorCS52YWxfYml0cwk9IDgsCisJLnZvbGF0aWxlX3JlZwk9IG1heDc3ODM2X211aWNfdm9sYXRpbGVfcmVnLAorCS5tYXhfcmVnaXN0ZXIJPSBNQVg3NzgzNl9QTUlDX1JFR19FTkQsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnEgbWF4MTQ1NzdfaXJxc1tdID0gewogCS8qIElOVDEgaW50ZXJydXB0cyAqLwotCXsgLnJlZ19vZmZzZXQgPSAwLCAubWFzayA9IElOVDFfQURDX01BU0ssIH0sCi0JeyAucmVnX29mZnNldCA9IDAsIC5tYXNrID0gSU5UMV9BRENMT1dfTUFTSywgfSwKLQl7IC5yZWdfb2Zmc2V0ID0gMCwgLm1hc2sgPSBJTlQxX0FEQ0VSUl9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAwLCAubWFzayA9IE1BWDE0NTc3X0lOVDFfQURDX01BU0ssIH0sCisJeyAucmVnX29mZnNldCA9IDAsIC5tYXNrID0gTUFYMTQ1NzdfSU5UMV9BRENMT1dfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMCwgLm1hc2sgPSBNQVgxNDU3N19JTlQxX0FEQ0VSUl9NQVNLLCB9LAogCS8qIElOVDIgaW50ZXJydXB0cyAqLwotCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IElOVDJfQ0hHVFlQX01BU0ssIH0sCi0JeyAucmVnX29mZnNldCA9IDEsIC5tYXNrID0gSU5UMl9DSEdERVRSVU5fTUFTSywgfSwKLQl7IC5yZWdfb2Zmc2V0ID0gMSwgLm1hc2sgPSBJTlQyX0RDRFRNUl9NQVNLLCB9LAotCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IElOVDJfREJDSEdfTUFTSywgfSwKLQl7IC5yZWdfb2Zmc2V0ID0gMSwgLm1hc2sgPSBJTlQyX1ZCVk9MVF9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IE1BWDE0NTc3X0lOVDJfQ0hHVFlQX01BU0ssIH0sCisJeyAucmVnX29mZnNldCA9IDEsIC5tYXNrID0gTUFYMTQ1NzdfSU5UMl9DSEdERVRSVU5fTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMSwgLm1hc2sgPSBNQVgxNDU3N19JTlQyX0RDRFRNUl9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IE1BWDE0NTc3X0lOVDJfREJDSEdfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMSwgLm1hc2sgPSBNQVgxNDU3N19JTlQyX1ZCVk9MVF9NQVNLLCB9LAogCS8qIElOVDMgaW50ZXJydXB0cyAqLwotCXsgLnJlZ19vZmZzZXQgPSAyLCAubWFzayA9IElOVDNfRU9DX01BU0ssIH0sCi0JeyAucmVnX29mZnNldCA9IDIsIC5tYXNrID0gSU5UM19DR01CQ19NQVNLLCB9LAotCXsgLnJlZ19vZmZzZXQgPSAyLCAubWFzayA9IElOVDNfT1ZQX01BU0ssIH0sCi0JeyAucmVnX29mZnNldCA9IDIsIC5tYXNrID0gSU5UM19NQkNDSEdFUlJfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMiwgLm1hc2sgPSBNQVgxNDU3N19JTlQzX0VPQ19NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAyLCAubWFzayA9IE1BWDE0NTc3X0lOVDNfQ0dNQkNfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMiwgLm1hc2sgPSBNQVgxNDU3N19JTlQzX09WUF9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAyLCAubWFzayA9IE1BWDE0NTc3X0lOVDNfTUJDQ0hHRVJSX01BU0ssIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnFfY2hpcCBtYXgxNDU3N19pcnFfY2hpcCA9IHsKIAkubmFtZQkJCT0gIm1heDE0NTc3IiwKIAkuc3RhdHVzX2Jhc2UJCT0gTUFYMTQ1NzdfUkVHX0lOVDEsCiAJLm1hc2tfYmFzZQkJPSBNQVgxNDU3N19SRUdfSU5UTUFTSzEsCi0JLm1hc2tfaW52ZXJ0CQk9IDEsCisJLm1hc2tfaW52ZXJ0CQk9IHRydWUsCiAJLm51bV9yZWdzCQk9IDMsCiAJLmlycXMJCQk9IG1heDE0NTc3X2lycXMsCiAJLm51bV9pcnFzCQk9IEFSUkFZX1NJWkUobWF4MTQ1NzdfaXJxcyksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnEgbWF4Nzc4MzZfbXVpY19pcnFzW10gPSB7CisJLyogSU5UMSBpbnRlcnJ1cHRzICovCisJeyAucmVnX29mZnNldCA9IDAsIC5tYXNrID0gTUFYMTQ1NzdfSU5UMV9BRENfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMCwgLm1hc2sgPSBNQVgxNDU3N19JTlQxX0FEQ0xPV19NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAwLCAubWFzayA9IE1BWDE0NTc3X0lOVDFfQURDRVJSX01BU0ssIH0sCisJeyAucmVnX29mZnNldCA9IDAsIC5tYXNrID0gTUFYNzc4MzZfSU5UMV9BREMxS19NQVNLLCB9LAorCS8qIElOVDIgaW50ZXJydXB0cyAqLworCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IE1BWDE0NTc3X0lOVDJfQ0hHVFlQX01BU0ssIH0sCisJeyAucmVnX29mZnNldCA9IDEsIC5tYXNrID0gTUFYMTQ1NzdfSU5UMl9DSEdERVRSVU5fTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMSwgLm1hc2sgPSBNQVgxNDU3N19JTlQyX0RDRFRNUl9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IE1BWDE0NTc3X0lOVDJfREJDSEdfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMSwgLm1hc2sgPSBNQVgxNDU3N19JTlQyX1ZCVk9MVF9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAxLCAubWFzayA9IE1BWDc3ODM2X0lOVDJfVklEUk1fTUFTSywgfSwKKwkvKiBJTlQzIGludGVycnVwdHMgKi8KKwl7IC5yZWdfb2Zmc2V0ID0gMiwgLm1hc2sgPSBNQVgxNDU3N19JTlQzX0VPQ19NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAyLCAubWFzayA9IE1BWDE0NTc3X0lOVDNfQ0dNQkNfTUFTSywgfSwKKwl7IC5yZWdfb2Zmc2V0ID0gMiwgLm1hc2sgPSBNQVgxNDU3N19JTlQzX09WUF9NQVNLLCB9LAorCXsgLnJlZ19vZmZzZXQgPSAyLCAubWFzayA9IE1BWDE0NTc3X0lOVDNfTUJDQ0hHRVJSX01BU0ssIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnFfY2hpcCBtYXg3NzgzNl9tdWljX2lycV9jaGlwID0geworCS5uYW1lCQkJPSAibWF4Nzc4MzYtbXVpYyIsCisJLnN0YXR1c19iYXNlCQk9IE1BWDE0NTc3X1JFR19JTlQxLAorCS5tYXNrX2Jhc2UJCT0gTUFYMTQ1NzdfUkVHX0lOVE1BU0sxLAorCS5tYXNrX2ludmVydAkJPSB0cnVlLAorCS5udW1fcmVncwkJPSAzLAorCS5pcnFzCQkJPSBtYXg3NzgzNl9tdWljX2lycXMsCisJLm51bV9pcnFzCQk9IEFSUkFZX1NJWkUobWF4Nzc4MzZfbXVpY19pcnFzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycSBtYXg3NzgzNl9wbWljX2lycXNbXSA9IHsKKwl7IC5yZWdfb2Zmc2V0ID0gMCwgLm1hc2sgPSBNQVg3NzgzNl9UT1BTWVNfSU5UX1QxMjBDX01BU0ssIH0sCisJeyAucmVnX29mZnNldCA9IDAsIC5tYXNrID0gTUFYNzc4MzZfVE9QU1lTX0lOVF9UMTQwQ19NQVNLLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgbWF4Nzc4MzZfcG1pY19pcnFfY2hpcCA9IHsKKwkubmFtZQkJCT0gIm1heDc3ODM2LXBtaWMiLAorCS5zdGF0dXNfYmFzZQkJPSBNQVg3NzgzNl9QTUlDX1JFR19UT1BTWVNfSU5ULAorCS5tYXNrX2Jhc2UJCT0gTUFYNzc4MzZfUE1JQ19SRUdfVE9QU1lTX0lOVF9NQVNLLAorCS5tYXNrX2ludmVydAkJPSBmYWxzZSwKKwkubnVtX3JlZ3MJCT0gMSwKKwkuaXJxcwkJCT0gbWF4Nzc4MzZfcG1pY19pcnFzLAorCS5udW1faXJxcwkJPSBBUlJBWV9TSVpFKG1heDc3ODM2X3BtaWNfaXJxcyksCit9OworCitzdGF0aWMgdm9pZCBtYXgxNDU3N19wcmludF9kZXZfdHlwZShzdHJ1Y3QgbWF4MTQ1NzcgKm1heDE0NTc3KQoreworCXU4IHJlZ19kYXRhLCB2ZW5kb3JfaWQsIGRldmljZV9pZDsKKwlpbnQgcmV0OworCisJcmV0ID0gbWF4MTQ1NzdfcmVhZF9yZWcobWF4MTQ1NzctPnJlZ21hcCwgTUFYMTQ1NzdfUkVHX0RFVklDRUlELAorCQkJJnJlZ19kYXRhKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIobWF4MTQ1NzctPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVhZCBERVZJQ0VJRCByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwl2ZW5kb3JfaWQgPSAoKHJlZ19kYXRhICYgREVWSURfVkVORE9SSURfTUFTSykgPj4KKwkJCQlERVZJRF9WRU5ET1JJRF9TSElGVCk7CisJZGV2aWNlX2lkID0gKChyZWdfZGF0YSAmIERFVklEX0RFVklDRUlEX01BU0spID4+CisJCQkJREVWSURfREVWSUNFSURfU0hJRlQpOworCisJZGV2X2luZm8obWF4MTQ1NzctPmRldiwgIkRldmljZSB0eXBlOiAldSAoSUQ6IDB4JXgsIHZlbmRvcjogMHgleClcbiIsCisJCQltYXgxNDU3Ny0+ZGV2X3R5cGUsIGRldmljZV9pZCwgdmVuZG9yX2lkKTsKK30KKworLyoKKyAqIE1heDc3ODM2IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGRyaXZlciBwcm9iZS4KKyAqIEFkZHMgbmV3IEkyQyBkdW1teSBkZXZpY2UsIHJlZ21hcCBhbmQgcmVnbWFwIElSUSBjaGlwLgorICogVW5tYXNrcyBJbnRlcnJ1cHQgU291cmNlIHJlZ2lzdGVyLgorICoKKyAqIE9uIHN1Y2Nlc3MgcmV0dXJucyAwLgorICogT24gZmFpbHVyZSByZXR1cm5zIGVycm5vIGFuZCByZXZlcnRzIGFueSBjaGFuZ2VzIGRvbmUgc28gZmFyIChlLmcuIHJlbW92ZQorICogSTJDIGR1bW15IGRldmljZSksIGV4Y2VwdCBtYXNraW5nIHRoZSBJTlQgU1JDIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50IG1heDc3ODM2X2luaXQoc3RydWN0IG1heDE0NTc3ICptYXgxNDU3NykKK3sKKwlpbnQgcmV0OworCXU4IGludHNyY19tYXNrOworCisJbWF4MTQ1NzctPmkyY19wbWljID0gaTJjX25ld19kdW1teShtYXgxNDU3Ny0+aTJjLT5hZGFwdGVyLAorCQkJSTJDX0FERFJfUE1JQyk7CisJaWYgKCFtYXgxNDU3Ny0+aTJjX3BtaWMpIHsKKwkJZGV2X2VycihtYXgxNDU3Ny0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIFBNSUMgSTJDIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpMmNfc2V0X2NsaWVudGRhdGEobWF4MTQ1NzctPmkyY19wbWljLCBtYXgxNDU3Nyk7CisKKwltYXgxNDU3Ny0+cmVnbWFwX3BtaWMgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhtYXgxNDU3Ny0+aTJjX3BtaWMsCisJCQkmbWF4Nzc4MzZfcG1pY19yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKG1heDE0NTc3LT5yZWdtYXBfcG1pYykpIHsKKwkJcmV0ID0gUFRSX0VSUihtYXgxNDU3Ny0+cmVnbWFwX3BtaWMpOworCQlkZXZfZXJyKG1heDE0NTc3LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgUE1JQyByZWdpc3RlciBtYXA6ICVkXG4iLAorCQkJCXJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIFVuLW1hc2sgTUFYNzc4MzYgSW50ZXJydXB0IFNvdXJjZSByZWdpc3RlciAqLworCXJldCA9IG1heDE0NTc3X3JlYWRfcmVnKG1heDE0NTc3LT5yZWdtYXBfcG1pYywKKwkJCU1BWDc3ODM2X1BNSUNfUkVHX0lOVFNSQ19NQVNLLCAmaW50c3JjX21hc2spOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIobWF4MTQ1NzctPmRldiwgIkZhaWxlZCB0byByZWFkIFBNSUMgcmVnaXN0ZXJcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpbnRzcmNfbWFzayAmPSB+KE1BWDc3ODM2X0lOVFNSQ19NQVNLX1RPUF9JTlRfTUFTSyk7CisJaW50c3JjX21hc2sgJj0gfihNQVg3NzgzNl9JTlRTUkNfTUFTS19NVUlDX0NIR19JTlRfTUFTSyk7CisJcmV0ID0gbWF4MTQ1Nzdfd3JpdGVfcmVnKG1heDE0NTc3LT5yZWdtYXBfcG1pYywKKwkJCU1BWDc3ODM2X1BNSUNfUkVHX0lOVFNSQ19NQVNLLCBpbnRzcmNfbWFzayk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihtYXgxNDU3Ny0+ZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFBNSUMgcmVnaXN0ZXJcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSByZWdtYXBfYWRkX2lycV9jaGlwKG1heDE0NTc3LT5yZWdtYXBfcG1pYywgbWF4MTQ1NzctPmlycSwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9UIHwgSVJRRl9TSEFSRUQsCisJCQkwLCAmbWF4Nzc4MzZfcG1pY19pcnFfY2hpcCwKKwkJCSZtYXgxNDU3Ny0+aXJxX2RhdGFfcG1pYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIobWF4MTQ1NzctPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IFBNSUMgSVJRICVkOiAlZFxuIiwKKwkJCQltYXgxNDU3Ny0+aXJxLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWkyY191bnJlZ2lzdGVyX2RldmljZShtYXgxNDU3Ny0+aTJjX3BtaWMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1heDc3ODM2IHNwZWNpZmljIGRlLWluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGRyaXZlciByZW1vdmUuCisgKi8KK3N0YXRpYyB2b2lkIG1heDc3ODM2X3JlbW92ZShzdHJ1Y3QgbWF4MTQ1NzcgKm1heDE0NTc3KQoreworCXJlZ21hcF9kZWxfaXJxX2NoaXAobWF4MTQ1NzctPmlycSwgbWF4MTQ1NzctPmlycV9kYXRhX3BtaWMpOworCWkyY191bnJlZ2lzdGVyX2RldmljZShtYXgxNDU3Ny0+aTJjX3BtaWMpOworfQorCiBzdGF0aWMgaW50IG1heDE0NTc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBtYXgxNDU3NyAqbWF4MTQ1Nzc7CiAJc3RydWN0IG1heDE0NTc3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBpMmMtPmRldi5vZl9ub2RlOwotCXU4IHJlZ19kYXRhOwogCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgKmlycV9jaGlwOworCXN0cnVjdCBtZmRfY2VsbCAqbWZkX2RldnM7CisJdW5zaWduZWQgaW50IG1mZF9kZXZzX3NpemU7CisJaW50IGlycV9mbGFnczsKIAogCWlmIChucCkgewogCQlwZGF0YSA9IGRldm1fa3phbGxvYygmaTJjLT5kZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTExMyw3ICszMTcsOCBAQAogCW1heDE0NTc3LT5pMmMgPSBpMmM7CiAJbWF4MTQ1NzctPmlycSA9IGkyYy0+aXJxOwogCi0JbWF4MTQ1NzctPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJm1heDE0NTc3X3JlZ21hcF9jb25maWcpOworCW1heDE0NTc3LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsCisJCQkmbWF4MTQ1NzdfbXVpY19yZWdtYXBfY29uZmlnKTsKIAlpZiAoSVNfRVJSKG1heDE0NTc3LT5yZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIobWF4MTQ1NzctPnJlZ21hcCk7CiAJCWRldl9lcnIobWF4MTQ1NzctPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBtYXA6ICVkXG4iLApAQCAtMTIxLDIzICszMjYsMzYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBtYXgxNDU3N19yZWFkX3JlZyhtYXgxNDU3Ny0+cmVnbWFwLCBNQVgxNDU3N19SRUdfREVWSUNFSUQsCi0JCQkmcmVnX2RhdGEpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihtYXgxNDU3Ny0+ZGV2LCAiRGV2aWNlIG5vdCBmb3VuZCBvbiB0aGlzIGNoYW5uZWw6ICVkXG4iLAotCQkJCXJldCk7Ci0JCXJldHVybiByZXQ7CisJaWYgKG5wKSB7CisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOworCisJCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKG1heDE0NTc3X2R0X21hdGNoLCAmaTJjLT5kZXYpOworCQlpZiAob2ZfaWQpCisJCQltYXgxNDU3Ny0+ZGV2X3R5cGUgPSAodW5zaWduZWQgaW50KW9mX2lkLT5kYXRhOworCX0gZWxzZSB7CisJCW1heDE0NTc3LT5kZXZfdHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAl9Ci0JbWF4MTQ1NzctPnZlbmRvcl9pZCA9ICgocmVnX2RhdGEgJiBERVZJRF9WRU5ET1JJRF9NQVNLKSA+PgotCQkJCURFVklEX1ZFTkRPUklEX1NISUZUKTsKLQltYXgxNDU3Ny0+ZGV2aWNlX2lkID0gKChyZWdfZGF0YSAmIERFVklEX0RFVklDRUlEX01BU0spID4+Ci0JCQkJREVWSURfREVWSUNFSURfU0hJRlQpOwotCWRldl9pbmZvKG1heDE0NTc3LT5kZXYsICJEZXZpY2UgSUQ6IDB4JXgsIHZlbmRvcjogMHgleFxuIiwKLQkJCW1heDE0NTc3LT5kZXZpY2VfaWQsIG1heDE0NTc3LT52ZW5kb3JfaWQpOworCisJbWF4MTQ1NzdfcHJpbnRfZGV2X3R5cGUobWF4MTQ1NzcpOworCisJc3dpdGNoIChtYXgxNDU3Ny0+ZGV2X3R5cGUpIHsKKwljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDc3ODM2OgorCQlpcnFfY2hpcCA9ICZtYXg3NzgzNl9tdWljX2lycV9jaGlwOworCQltZmRfZGV2cyA9IG1heDc3ODM2X2RldnM7CisJCW1mZF9kZXZzX3NpemUgPSBBUlJBWV9TSVpFKG1heDc3ODM2X2RldnMpOworCQlpcnFfZmxhZ3MgPSBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfT05FU0hPVCB8IElSUUZfU0hBUkVEOworCQlicmVhazsKKwljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDE0NTc3OgorCWRlZmF1bHQ6CisJCWlycV9jaGlwID0gJm1heDE0NTc3X2lycV9jaGlwOworCQltZmRfZGV2cyA9IG1heDE0NTc3X2RldnM7CisJCW1mZF9kZXZzX3NpemUgPSBBUlJBWV9TSVpFKG1heDE0NTc3X2RldnMpOworCQlpcnFfZmxhZ3MgPSBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfT05FU0hPVDsKKwkJYnJlYWs7CisJfQogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChtYXgxNDU3Ny0+cmVnbWFwLCBtYXgxNDU3Ny0+aXJxLAotCQkJCSAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsIDAsCi0JCQkJICAmbWF4MTQ1NzdfaXJxX2NoaXAsCisJCQkJICBpcnFfZmxhZ3MsIDAsIGlycV9jaGlwLAogCQkJCSAgJm1heDE0NTc3LT5pcnFfZGF0YSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJRICVkOiAlZFxuIiwKQEAgLTE0NSw4ICszNjMsMTUgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMobWF4MTQ1NzctPmRldiwgLTEsIG1heDE0NTc3X2RldnMsCi0JCQlBUlJBWV9TSVpFKG1heDE0NTc3X2RldnMpLCBOVUxMLCAwLAorCS8qIE1heDc3ODM2IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUgKGFkZGl0aW9uYWwgcmVnbWFwKSAqLworCWlmIChtYXgxNDU3Ny0+ZGV2X3R5cGUgPT0gTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzYpIHsKKwkJcmV0ID0gbWF4Nzc4MzZfaW5pdChtYXgxNDU3Nyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfbWF4Nzc4MzY7CisJfQorCisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKG1heDE0NTc3LT5kZXYsIC0xLCBtZmRfZGV2cywKKwkJCW1mZF9kZXZzX3NpemUsIE5VTEwsIDAsCiAJCQlyZWdtYXBfaXJxX2dldF9kb21haW4obWF4MTQ1NzctPmlycV9kYXRhKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX21mZDsKQEAgLTE1Niw2ICszODEsOSBAQAogCXJldHVybiAwOwogCiBlcnJfbWZkOgorCWlmIChtYXgxNDU3Ny0+ZGV2X3R5cGUgPT0gTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzYpCisJCW1heDc3ODM2X3JlbW92ZShtYXgxNDU3Nyk7CitlcnJfbWF4Nzc4MzY6CiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXgxNDU3Ny0+aXJxLCBtYXgxNDU3Ny0+aXJxX2RhdGEpOwogCiAJcmV0dXJuIHJldDsKQEAgLTE2NywxMiArMzk1LDE1IEBACiAKIAltZmRfcmVtb3ZlX2RldmljZXMobWF4MTQ1NzctPmRldik7CiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXgxNDU3Ny0+aXJxLCBtYXgxNDU3Ny0+aXJxX2RhdGEpOworCWlmIChtYXgxNDU3Ny0+ZGV2X3R5cGUgPT0gTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzYpCisJCW1heDc3ODM2X3JlbW92ZShtYXgxNDU3Nyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDE0NTc3X2kyY19pZFtdID0gewotCXsgIm1heDE0NTc3IiwgMCB9LAorCXsgIm1heDE0NTc3IiwgTUFYSU1fREVWSUNFX1RZUEVfTUFYMTQ1NzcsIH0sCisJeyAibWF4Nzc4MzYiLCBNQVhJTV9ERVZJQ0VfVFlQRV9NQVg3NzgzNiwgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MTQ1NzdfaTJjX2lkKTsKQEAgLTIxNSwxMSArNDQ2LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbWF4MTQ1NzdfZHRfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gIm1heGltLG1heDE0NTc3IiwgfSwKLQl7fSwKLX07Ci0KIHN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtYXgxNDU3N19wbSwgbWF4MTQ1Nzdfc3VzcGVuZCwgbWF4MTQ1NzdfcmVzdW1lKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDE0NTc3X2kyY19kcml2ZXIgPSB7CkBAIC0yMzYsNiArNDYyLDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWF4MTQ1NzdfaTJjX2luaXQodm9pZCkKIHsKKwlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShtYXgxNDU3N19pMmNfaWQpICE9IE1BWElNX0RFVklDRV9UWVBFX05VTSk7CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobWF4MTQ1NzdfZHRfbWF0Y2gpICE9IE1BWElNX0RFVklDRV9UWVBFX05VTSk7CisKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDE0NTc3X2kyY19kcml2ZXIpOwogfQogc3Vic3lzX2luaXRjYWxsKG1heDE0NTc3X2kyY19pbml0KTsKQEAgLTI0Nyw1ICs0NzYsNSBAQAogbW9kdWxlX2V4aXQobWF4MTQ1NzdfaTJjX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4sIEtyenlzenRvZiBLb3psb3dza2kgPGsua296bG93c2tpQHNhbXN1bmcuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVhJTSAxNDU3NyBtdWx0aS1mdW5jdGlvbiBjb3JlIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXhpbSAxNDU3Ny83NzgzNiBtdWx0aS1mdW5jdGlvbiBjb3JlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uYwppbmRleCBkYmVhNTVkLi5lMmEwNGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uYworKysgYi9kcml2ZXJzL21mZC9zeXNjb24uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zeXNjb24uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CkBAIC0xMTksNiArMTIwLDcgQEAKIHN0YXRpYyBpbnQgc3lzY29uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3Qgc3lzY29uX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOwogCXN0cnVjdCBzeXNjb24gKnN5c2NvbjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC0xMzYsNiArMTM4LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzeXNjb25fcmVnbWFwX2NvbmZpZy5tYXhfcmVnaXN0ZXIgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgLSAzOworCWlmIChwZGF0YSkKKwkJc3lzY29uX3JlZ21hcF9jb25maWcubmFtZSA9IHBkYXRhLT5sYWJlbDsKIAlzeXNjb24tPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsCiAJCQkJCSZzeXNjb25fcmVnbWFwX2NvbmZpZyk7CiAJaWYgKElTX0VSUihzeXNjb24tPnJlZ21hcCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MDkwLmMgYi9kcml2ZXJzL21mZC90cHM2NTA5MC5jCmluZGV4IGJhMWEyNWQuLjFjM2U2ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1MDkwLmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjUwOTAuYwpAQCAtMzIsMTQgKzMyLDYgQEAKICNkZWZpbmUgTlVNX0lOVF9SRUcgMgogI2RlZmluZSBUT1RBTF9OVU1fUkVHIDB4MTgKIAotLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFBTNjUwOTBfSU5UX1NUUwkweDAKLSNkZWZpbmUgVFBTNjUwOTBfSU5UX1NUUzIJMHgxCi0KLS8qIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUUFM2NTA5MF9JTlRfTVNLCTB4MgotI2RlZmluZSBUUFM2NTA5MF9JTlRfTVNLMgkweDMKLQogI2RlZmluZSBUUFM2NTA5MF9JTlQxX01BU0tfVkFDX1NUQVRVU19DSEFOR0UJCTEKICNkZWZpbmUgVFBTNjUwOTBfSU5UMV9NQVNLX1ZTWVNfU1RBVFVTX0NIQU5HRQkJMgogI2RlZmluZSBUUFM2NTA5MF9JTlQxX01BU0tfQkFUX1NUQVRVU19DSEFOR0UJCTMKQEAgLTY0LDExICs1NiwxNiBAQAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgdHBzNjUwOTBzW10gPSB7Ci0JeworZW51bSB0cHM2NTA5MF9jZWxscyB7CisJUE1JQyA9IDAsCisJQ0hBUkdFUiA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHRwczY1MDkwc1tdID0geworCVtQTUlDXSA9IHsKIAkJLm5hbWUgPSAidHBzNjUwOTAtcG1pYyIsCiAJfSwKLQl7CisJW0NIQVJHRVJdID0gewogCQkubmFtZSA9ICJ0cHM2NTA5MC1jaGFyZ2VyIiwKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGNoYXJnZXJfcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9ICZjaGFyZ2VyX3Jlc291cmNlc1swXSwKQEAgLTEzOSwxNyArMTM2LDI2IEBACiAJLmlycXMgPSB0cHM2NTA5MF9pcnFzLAogCS5udW1faXJxcyA9IEFSUkFZX1NJWkUodHBzNjUwOTBfaXJxcyksCiAJLm51bV9yZWdzID0gTlVNX0lOVF9SRUcsCi0JLnN0YXR1c19iYXNlID0gVFBTNjUwOTBfSU5UX1NUUywKLQkubWFza19iYXNlID0gVFBTNjUwOTBfSU5UX01TSywKKwkuc3RhdHVzX2Jhc2UgPSBUUFM2NTA5MF9SRUdfSU5UUl9TVFMsCisJLm1hc2tfYmFzZSA9IFRQUzY1MDkwX1JFR19JTlRSX01BU0ssCiAJLm1hc2tfaW52ZXJ0ID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBib29sIGlzX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiB7Ci0JaWYgKChyZWcgPT0gVFBTNjUwOTBfSU5UX1NUUykgfHwgKHJlZyA9PSBUUFM2NTA5MF9JTlRfU1RTMikpCi0JCXJldHVybiB0cnVlOwotCWVsc2UKKwkvKiBOZWFybHkgYWxsIHJlZ2lzdGVycyBoYXZlIHN0YXR1cyBiaXRzIG1peGVkIGluLCBleGNlcHQgYSBmZXcgKi8KKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgVFBTNjUwOTBfUkVHX0lOVFJfTUFTSzoKKwljYXNlIFRQUzY1MDkwX1JFR19JTlRSX01BU0syOgorCWNhc2UgVFBTNjUwOTBfUkVHX0NHX0NUUkwwOgorCWNhc2UgVFBTNjUwOTBfUkVHX0NHX0NUUkwxOgorCWNhc2UgVFBTNjUwOTBfUkVHX0NHX0NUUkwyOgorCWNhc2UgVFBTNjUwOTBfUkVHX0NHX0NUUkwzOgorCWNhc2UgVFBTNjUwOTBfUkVHX0NHX0NUUkw0OgorCWNhc2UgVFBTNjUwOTBfUkVHX0NHX0NUUkw1OgogCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdHBzNjUwOTBfcmVnbWFwX2NvbmZpZyA9IHsKQEAgLTIxMSw2ICsyMTcsOSBAQAogCQkJCQkiSVJRIGluaXQgZmFpbGVkIHdpdGggZXJyOiAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKwl9IGVsc2UgeworCQkvKiBEb24ndCB0ZWxsIGNoaWxkcmVuIHRoZXkgaGF2ZSBhbiBJUlEgdGhhdCdsbCBuZXZlciBmaXJlICovCisJCXRwczY1MDkwc1tDSEFSR0VSXS5udW1fcmVzb3VyY2VzID0gMDsKIAl9CiAKIAlyZXQgPSBtZmRfYWRkX2RldmljZXModHBzNjUwOTAtPmRldiwgLTEsIHRwczY1MDkwcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMgYi9kcml2ZXJzL21mZC90cHM2NTg2eC5jCmluZGV4IGJiZDU0NDEuLjgzNWU1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjU4NnguYwpAQCAtNDk1LDYgKzQ5NSwxMCBAQAogCWNhc2UgVFBTNjU4NjIzOgogCQluYW1lID0gIlRQUzY1ODYyMyI7CiAJCWJyZWFrOworCWNhc2UgVFBTNjU4NjQwOgorCWNhc2UgVFBTNjU4NjQwdjI6CisJCW5hbWUgPSAiVFBTNjU4NjQwIjsKKwkJYnJlYWs7CiAJY2FzZSBUUFM2NTg2NDM6CiAJCW5hbWUgPSAiVFBTNjU4NjQzIjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2wtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwppbmRleCBlODcxNDBiLi5kYjExYjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKQEAgLTk4LDcgKzk4LDExIEBACiAjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAJCTB4MDAxNAogI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5UCQkweDAwMkUKICNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX01BU1RFUgkweDAwMzYKKwogI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUE1fUkVDRUlWRVIJMHgwMDVCCisjZGVmaW5lIFRXTDQwMzBfRENEQ19HTE9CQUxfQ0ZHCQkweDA2CisjZGVmaW5lIFNNQVJUUkVGTEVYX0VOQUJMRQkJQklUKDMpCisKICNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1JUQwkJMHgwMDFDCiAjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRwkweDAwMDAKIApAQCAtMTIwNCw2ICsxMjA4LDExIEBACiAJICogRGlzYWJsZSBUV0w0MDMwL1RXTDUwMzAgSTJDIFB1bGwtdXAgb24gSTJDMSBhbmQgSTJDNChTUikgaW50ZXJmYWNlLgogCSAqIFByb2dyYW0gSTJDX1NDTF9DVFJMX1BVKGJpdCAwKT0wLCBJMkNfU0RBX0NUUkxfUFUgKGJpdCAyKT0wLAogCSAqIFNSX0kyQ19TQ0xfQ1RSTF9QVShiaXQgNCk9MCBhbmQgU1JfSTJDX1NEQV9DVFJMX1BVKGJpdCA2KT0wLgorCSAqCisJICogQWxzbywgYWx3YXlzIGVuYWJsZSBTbWFydFJlZmxleCBiaXQgYXMgdGhhdCdzIG5lZWRlZCBmb3Igb21hcHMgdG8KKwkgKiB0byBkbyBhbnl0aGluZyBvdmVyIEkyQzQgZm9yIHZvbHRhZ2Ugc2NhbGluZyBldmVuIGlmIFNtYXJ0UmVmbGV4CisJICogaXMgZGlzYWJsZWQuIFdpdGhvdXQgdGhlIFNtYXJ0UmVmbGV4IGJpdCBvbWFwIHN5c19jbGtyZXEgaWRsZQorCSAqIHNpZ25hbCB3aWxsIG5ldmVyIHRyaWdnZXIgZm9yIHJldGVudGlvbiBpZGxlLgogCSAqLwogCWlmICh0d2xfY2xhc3NfaXNfNDAzMCgpKSB7CiAJCXU4IHRlbXA7CkBAIC0xMjEyLDYgKzEyMjEsMTIgQEAKIAkJdGVtcCAmPSB+KFNSX0kyQ19TREFfQ1RSTF9QVSB8IFNSX0kyQ19TQ0xfQ1RSTF9QVSB8IFwKIAkJCUkyQ19TREFfQ1RSTF9QVSB8IEkyQ19TQ0xfQ1RSTF9QVSk7CiAJCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfSU5UQlIsIHRlbXAsIFJFR19HUFBVUERDVFIxKTsKKworCQl0d2xfaTJjX3JlYWRfdTgoVFdMX01PRFVMRV9QTV9SRUNFSVZFUiwgJnRlbXAsCisJCQkJVFdMNDAzMF9EQ0RDX0dMT0JBTF9DRkcpOworCQl0ZW1wIHw9IFNNQVJUUkVGTEVYX0VOQUJMRTsKKwkJdHdsX2kyY193cml0ZV91OChUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCB0ZW1wLAorCQkJCSBUV0w0MDMwX0RDRENfR0xPQkFMX0NGRyk7CiAJfQogCiAJaWYgKG5vZGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3ZleHByZXNzLWNvbmZpZy5jIGIvZHJpdmVycy9tZmQvdmV4cHJlc3MtY29uZmlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZGI4OWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZmQvdmV4cHJlc3MtY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQVJNIExpbWl0ZWQKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJ2ZXhwcmVzcy1jb25maWc6ICIgZm10Ci0KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZleHByZXNzLmg+Ci0KLQotI2RlZmluZSBWRVhQUkVTU19DT05GSUdfTUFYX0JSSURHRVMgMgotCi1zdGF0aWMgc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2UgewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZV9pbmZvICppbmZvOwotCXN0cnVjdCBsaXN0X2hlYWQgdHJhbnNhY3Rpb25zOwotCXNwaW5sb2NrX3QgdHJhbnNhY3Rpb25zX2xvY2s7Ci19IHZleHByZXNzX2NvbmZpZ19icmlkZ2VzW1ZFWFBSRVNTX0NPTkZJR19NQVhfQlJJREdFU107Ci0KLXN0YXRpYyBERUNMQVJFX0JJVE1BUCh2ZXhwcmVzc19jb25maWdfYnJpZGdlc19tYXAsCi0JCUFSUkFZX1NJWkUodmV4cHJlc3NfY29uZmlnX2JyaWRnZXMpKTsKLXN0YXRpYyBERUZJTkVfTVVURVgodmV4cHJlc3NfY29uZmlnX2JyaWRnZXNfbXV0ZXgpOwotCi1zdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZSAqdmV4cHJlc3NfY29uZmlnX2JyaWRnZV9yZWdpc3RlcigKLQkJc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZV9pbmZvICppbmZvKQotewotCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlICpicmlkZ2U7Ci0JaW50IGk7Ci0KLQlwcl9kZWJ1ZygiUmVnaXN0ZXJpbmcgYnJpZGdlICclcydcbiIsIGluZm8tPm5hbWUpOwotCi0JbXV0ZXhfbG9jaygmdmV4cHJlc3NfY29uZmlnX2JyaWRnZXNfbXV0ZXgpOwotCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHZleHByZXNzX2NvbmZpZ19icmlkZ2VzX21hcCwKLQkJCUFSUkFZX1NJWkUodmV4cHJlc3NfY29uZmlnX2JyaWRnZXMpKTsKLQlpZiAoaSA+PSBBUlJBWV9TSVpFKHZleHByZXNzX2NvbmZpZ19icmlkZ2VzKSkgewotCQlwcl9lcnIoIkNhbid0IHJlZ2lzdGVyIG1vcmUgYnJpZGdlcyFcbiIpOwotCQltdXRleF91bmxvY2soJnZleHByZXNzX2NvbmZpZ19icmlkZ2VzX211dGV4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCV9fc2V0X2JpdChpLCB2ZXhwcmVzc19jb25maWdfYnJpZGdlc19tYXApOwotCWJyaWRnZSA9ICZ2ZXhwcmVzc19jb25maWdfYnJpZGdlc1tpXTsKLQotCWJyaWRnZS0+bm9kZSA9IG5vZGU7Ci0JYnJpZGdlLT5pbmZvID0gaW5mbzsKLQlJTklUX0xJU1RfSEVBRCgmYnJpZGdlLT50cmFuc2FjdGlvbnMpOwotCXNwaW5fbG9ja19pbml0KCZicmlkZ2UtPnRyYW5zYWN0aW9uc19sb2NrKTsKLQotCW11dGV4X3VubG9jaygmdmV4cHJlc3NfY29uZmlnX2JyaWRnZXNfbXV0ZXgpOwotCi0JcmV0dXJuIGJyaWRnZTsKLX0KLUVYUE9SVF9TWU1CT0wodmV4cHJlc3NfY29uZmlnX2JyaWRnZV9yZWdpc3Rlcik7Ci0KLXZvaWQgdmV4cHJlc3NfY29uZmlnX2JyaWRnZV91bnJlZ2lzdGVyKHN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlICpicmlkZ2UpCi17Ci0Jc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2UgX19icmlkZ2UgPSAqYnJpZGdlOwotCWludCBpOwotCi0JbXV0ZXhfbG9jaygmdmV4cHJlc3NfY29uZmlnX2JyaWRnZXNfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZleHByZXNzX2NvbmZpZ19icmlkZ2VzKTsgaSsrKQotCQlpZiAoJnZleHByZXNzX2NvbmZpZ19icmlkZ2VzW2ldID09IGJyaWRnZSkKLQkJCV9fY2xlYXJfYml0KGksIHZleHByZXNzX2NvbmZpZ19icmlkZ2VzX21hcCk7Ci0JbXV0ZXhfdW5sb2NrKCZ2ZXhwcmVzc19jb25maWdfYnJpZGdlc19tdXRleCk7Ci0KLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZfX2JyaWRnZS50cmFuc2FjdGlvbnMpKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJl9fYnJpZGdlLnRyYW5zYWN0aW9ucykpCi0JCWNwdV9yZWxheCgpOwotfQotRVhQT1JUX1NZTUJPTCh2ZXhwcmVzc19jb25maWdfYnJpZGdlX3VucmVnaXN0ZXIpOwotCi0KLXN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyB7Ci0Jc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2UgKmJyaWRnZTsKLQl2b2lkICpmdW5jOwotfTsKLQotc3RydWN0IHZleHByZXNzX2NvbmZpZ19mdW5jICpfX3ZleHByZXNzX2NvbmZpZ19mdW5jX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJyaWRnZV9ub2RlOwotCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyAqZnVuYzsKLQlpbnQgaTsKLQotCWlmIChXQVJOX09OKGRldiAmJiBub2RlICYmIGRldi0+b2Zfbm9kZSAhPSBub2RlKSkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKGRldiAmJiAhbm9kZSkKLQkJbm9kZSA9IGRldi0+b2Zfbm9kZTsKLQotCWZ1bmMgPSBremFsbG9jKHNpemVvZigqZnVuYyksIEdGUF9LRVJORUwpOwotCWlmICghZnVuYykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlicmlkZ2Vfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOwotCXdoaWxlIChicmlkZ2Vfbm9kZSkgewotCQljb25zdCBfX2JlMzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkoYnJpZGdlX25vZGUsCi0JCQkJImFybSx2ZXhwcmVzcyxjb25maWctYnJpZGdlIiwgTlVMTCk7Ci0KLQkJaWYgKHByb3ApIHsKLQkJCWJyaWRnZV9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoCi0JCQkJCWJlMzJfdG9fY3B1cChwcm9wKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWJyaWRnZV9ub2RlID0gb2ZfZ2V0X25leHRfcGFyZW50KGJyaWRnZV9ub2RlKTsKLQl9Ci0KLQltdXRleF9sb2NrKCZ2ZXhwcmVzc19jb25maWdfYnJpZGdlc19tdXRleCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmV4cHJlc3NfY29uZmlnX2JyaWRnZXMpOyBpKyspIHsKLQkJc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2UgKmJyaWRnZSA9Ci0JCQkJJnZleHByZXNzX2NvbmZpZ19icmlkZ2VzW2ldOwotCi0JCWlmICh0ZXN0X2JpdChpLCB2ZXhwcmVzc19jb25maWdfYnJpZGdlc19tYXApICYmCi0JCQkJYnJpZGdlLT5ub2RlID09IGJyaWRnZV9ub2RlKSB7Ci0JCQlmdW5jLT5icmlkZ2UgPSBicmlkZ2U7Ci0JCQlmdW5jLT5mdW5jID0gYnJpZGdlLT5pbmZvLT5mdW5jX2dldChkZXYsIG5vZGUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ2ZXhwcmVzc19jb25maWdfYnJpZGdlc19tdXRleCk7Ci0KLQlpZiAoIWZ1bmMtPmZ1bmMpIHsKLQkJb2Zfbm9kZV9wdXQobm9kZSk7Ci0JCWtmcmVlKGZ1bmMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gZnVuYzsKLX0KLUVYUE9SVF9TWU1CT0woX192ZXhwcmVzc19jb25maWdfZnVuY19nZXQpOwotCi12b2lkIHZleHByZXNzX2NvbmZpZ19mdW5jX3B1dChzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2Z1bmMgKmZ1bmMpCi17Ci0JZnVuYy0+YnJpZGdlLT5pbmZvLT5mdW5jX3B1dChmdW5jLT5mdW5jKTsKLQlvZl9ub2RlX3B1dChmdW5jLT5icmlkZ2UtPm5vZGUpOwotCWtmcmVlKGZ1bmMpOwotfQotRVhQT1JUX1NZTUJPTCh2ZXhwcmVzc19jb25maWdfZnVuY19wdXQpOwotCi1zdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX3RyYW5zIHsKLQlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2Z1bmMgKmZ1bmM7Ci0JaW50IG9mZnNldDsKLQlib29sIHdyaXRlOwotCXUzMiAqZGF0YTsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotc3RhdGljIHZvaWQgdmV4cHJlc3NfY29uZmlnX2R1bXBfdHJhbnMoY29uc3QgY2hhciAqd2hhdCwKLQkJc3RydWN0IHZleHByZXNzX2NvbmZpZ190cmFucyAqdHJhbnMpCi17Ci0JcHJfZGVidWcoIiVzICVzIHRyYW5zICVwIGZ1bmMgMHglcCBvZmZzZXQgJWQgZGF0YSAweCV4IHN0YXR1cyAlZFxuIiwKLQkJCXdoYXQsIHRyYW5zLT53cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHRyYW5zLAotCQkJdHJhbnMtPmZ1bmMtPmZ1bmMsIHRyYW5zLT5vZmZzZXQsCi0JCQl0cmFucy0+ZGF0YSA/ICp0cmFucy0+ZGF0YSA6IDAsIHRyYW5zLT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW50IHZleHByZXNzX2NvbmZpZ19zY2hlZHVsZShzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX3RyYW5zICp0cmFucykKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlICpicmlkZ2UgPSB0cmFucy0+ZnVuYy0+YnJpZGdlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpbml0X2NvbXBsZXRpb24oJnRyYW5zLT5jb21wbGV0aW9uKTsKLQl0cmFucy0+c3RhdHVzID0gLUVGQVVMVDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZicmlkZ2UtPnRyYW5zYWN0aW9uc19sb2NrLCBmbGFncyk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmYnJpZGdlLT50cmFuc2FjdGlvbnMpKSB7Ci0JCXZleHByZXNzX2NvbmZpZ19kdW1wX3RyYW5zKCJFeGVjdXRpbmciLCB0cmFucyk7Ci0JCXN0YXR1cyA9IGJyaWRnZS0+aW5mby0+ZnVuY19leGVjKHRyYW5zLT5mdW5jLT5mdW5jLAotCQkJCXRyYW5zLT5vZmZzZXQsIHRyYW5zLT53cml0ZSwgdHJhbnMtPmRhdGEpOwotCX0gZWxzZSB7Ci0JCXZleHByZXNzX2NvbmZpZ19kdW1wX3RyYW5zKCJRdWV1aW5nIiwgdHJhbnMpOwotCQlzdGF0dXMgPSBWRVhQUkVTU19DT05GSUdfU1RBVFVTX1dBSVQ7Ci0JfQotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIFZFWFBSRVNTX0NPTkZJR19TVEFUVVNfRE9ORToKLQkJdmV4cHJlc3NfY29uZmlnX2R1bXBfdHJhbnMoIkZpbmlzaGVkIiwgdHJhbnMpOwotCQl0cmFucy0+c3RhdHVzID0gc3RhdHVzOwotCQlicmVhazsKLQljYXNlIFZFWFBSRVNTX0NPTkZJR19TVEFUVVNfV0FJVDoKLQkJbGlzdF9hZGRfdGFpbCgmdHJhbnMtPmxpc3QsICZicmlkZ2UtPnRyYW5zYWN0aW9ucyk7Ci0JCWJyZWFrOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyaWRnZS0+dHJhbnNhY3Rpb25zX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgdmV4cHJlc3NfY29uZmlnX2NvbXBsZXRlKHN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlICpicmlkZ2UsCi0JCWludCBzdGF0dXMpCi17Ci0Jc3RydWN0IHZleHByZXNzX2NvbmZpZ190cmFucyAqdHJhbnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljb25zdCBjaGFyICptZXNzYWdlID0gIkNvbXBsZXRlZCI7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnJpZGdlLT50cmFuc2FjdGlvbnNfbG9jaywgZmxhZ3MpOwotCi0JdHJhbnMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZicmlkZ2UtPnRyYW5zYWN0aW9ucywKLQkJCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfdHJhbnMsIGxpc3QpOwotCXRyYW5zLT5zdGF0dXMgPSBzdGF0dXM7Ci0KLQlkbyB7Ci0JCXZleHByZXNzX2NvbmZpZ19kdW1wX3RyYW5zKG1lc3NhZ2UsIHRyYW5zKTsKLQkJbGlzdF9kZWwoJnRyYW5zLT5saXN0KTsKLQkJY29tcGxldGUoJnRyYW5zLT5jb21wbGV0aW9uKTsKLQotCQlpZiAobGlzdF9lbXB0eSgmYnJpZGdlLT50cmFuc2FjdGlvbnMpKQotCQkJYnJlYWs7Ci0KLQkJdHJhbnMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZicmlkZ2UtPnRyYW5zYWN0aW9ucywKLQkJCQlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX3RyYW5zLCBsaXN0KTsKLQkJdmV4cHJlc3NfY29uZmlnX2R1bXBfdHJhbnMoIkV4ZWN1dGluZyBwZW5kaW5nIiwgdHJhbnMpOwotCQl0cmFucy0+c3RhdHVzID0gYnJpZGdlLT5pbmZvLT5mdW5jX2V4ZWModHJhbnMtPmZ1bmMtPmZ1bmMsCi0JCQkJdHJhbnMtPm9mZnNldCwgdHJhbnMtPndyaXRlLCB0cmFucy0+ZGF0YSk7Ci0JCW1lc3NhZ2UgPSAiRmluaXNoZWQgcGVuZGluZyI7Ci0JfSB3aGlsZSAodHJhbnMtPnN0YXR1cyA9PSBWRVhQUkVTU19DT05GSUdfU1RBVFVTX0RPTkUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJpZGdlLT50cmFuc2FjdGlvbnNfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTCh2ZXhwcmVzc19jb25maWdfY29tcGxldGUpOwotCi1pbnQgdmV4cHJlc3NfY29uZmlnX3dhaXQoc3RydWN0IHZleHByZXNzX2NvbmZpZ190cmFucyAqdHJhbnMpCi17Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmdHJhbnMtPmNvbXBsZXRpb24pOwotCi0JcmV0dXJuIHRyYW5zLT5zdGF0dXM7Ci19Ci1FWFBPUlRfU1lNQk9MKHZleHByZXNzX2NvbmZpZ193YWl0KTsKLQotaW50IHZleHByZXNzX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyAqZnVuYywgaW50IG9mZnNldCwKLQkJdTMyICpkYXRhKQotewotCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfdHJhbnMgdHJhbnMgPSB7Ci0JCS5mdW5jID0gZnVuYywKLQkJLm9mZnNldCA9IG9mZnNldCwKLQkJLndyaXRlID0gZmFsc2UsCi0JCS5kYXRhID0gZGF0YSwKLQkJLnN0YXR1cyA9IDAsCi0JfTsKLQlpbnQgc3RhdHVzID0gdmV4cHJlc3NfY29uZmlnX3NjaGVkdWxlKCZ0cmFucyk7Ci0KLQlpZiAoc3RhdHVzID09IFZFWFBSRVNTX0NPTkZJR19TVEFUVVNfV0FJVCkKLQkJc3RhdHVzID0gdmV4cHJlc3NfY29uZmlnX3dhaXQoJnRyYW5zKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci1FWFBPUlRfU1lNQk9MKHZleHByZXNzX2NvbmZpZ19yZWFkKTsKLQotaW50IHZleHByZXNzX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2Z1bmMgKmZ1bmMsIGludCBvZmZzZXQsCi0JCXUzMiBkYXRhKQotewotCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfdHJhbnMgdHJhbnMgPSB7Ci0JCS5mdW5jID0gZnVuYywKLQkJLm9mZnNldCA9IG9mZnNldCwKLQkJLndyaXRlID0gdHJ1ZSwKLQkJLmRhdGEgPSAmZGF0YSwKLQkJLnN0YXR1cyA9IDAsCi0JfTsKLQlpbnQgc3RhdHVzID0gdmV4cHJlc3NfY29uZmlnX3NjaGVkdWxlKCZ0cmFucyk7Ci0KLQlpZiAoc3RhdHVzID09IFZFWFBSRVNTX0NPTkZJR19TVEFUVVNfV0FJVCkKLQkJc3RhdHVzID0gdmV4cHJlc3NfY29uZmlnX3dhaXQoJnRyYW5zKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci1FWFBPUlRfU1lNQk9MKHZleHByZXNzX2NvbmZpZ193cml0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC92ZXhwcmVzcy1zeXNyZWcuYyBiL2RyaXZlcnMvbWZkL3ZleHByZXNzLXN5c3JlZy5jCmluZGV4IDM1MjgxZTguLjllMjFlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3ZleHByZXNzLXN5c3JlZy5jCisrKyBiL2RyaXZlcnMvbWZkL3ZleHByZXNzLXN5c3JlZy5jCkBAIC0xMSwyMyArMTEsMjIgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTGltaXRlZAogICovCiAKKyNpbmNsdWRlIDxsaW51eC9iYXNpY19tbWlvX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3N5c2Nvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdmV4cHJlc3MuaD4KIAogI2RlZmluZSBTWVNfSUQJCQkweDAwMAogI2RlZmluZSBTWVNfU1cJCQkweDAwNAogI2RlZmluZSBTWVNfTEVECQkJMHgwMDgKICNkZWZpbmUgU1lTXzEwMEhaCQkweDAyNAotI2RlZmluZSBTWVNfRkxBR1MJCTB4MDMwCiAjZGVmaW5lIFNZU19GTEFHU1NFVAkJMHgwMzAKICNkZWZpbmUgU1lTX0ZMQUdTQ0xSCQkweDAzNAogI2RlZmluZSBTWVNfTlZGTEFHUwkJMHgwMzgKQEAgLTQ2LDQ2NSArNDUsMjA5IEBACiAjZGVmaW5lIFNZU19DRkdTVEFUCQkweDBhOAogCiAjZGVmaW5lIFNZU19IQklfTUFTSwkJMHhmZmYKLSNkZWZpbmUgU1lTX0lEX0hCSV9TSElGVAkxNgogI2RlZmluZSBTWVNfUFJPQ0lEeF9IQklfU0hJRlQJMAogCi0jZGVmaW5lIFNZU19MRURfTEVEKG4pCQkoMSA8PCAobikpCi0KICNkZWZpbmUgU1lTX01DSV9DQVJESU4JCSgxIDw8IDApCiAjZGVmaW5lIFNZU19NQ0lfV1BST1QJCSgxIDw8IDEpCiAKLSNkZWZpbmUgU1lTX0ZMQVNIX1dQbgkJKDEgPDwgMCkKLQogI2RlZmluZSBTWVNfTUlTQ19NQVNURVJTSVRFCSgxIDw8IDE0KQogCi0jZGVmaW5lIFNZU19DRkdDVFJMX1NUQVJUCSgxIDw8IDMxKQotI2RlZmluZSBTWVNfQ0ZHQ1RSTF9XUklURQkoMSA8PCAzMCkKLSNkZWZpbmUgU1lTX0NGR0NUUkxfRENDKG4pCSgoKG4pICYgMHhmKSA8PCAyNikKLSNkZWZpbmUgU1lTX0NGR0NUUkxfRlVOQyhuKQkoKChuKSAmIDB4M2YpIDw8IDIwKQotI2RlZmluZSBTWVNfQ0ZHQ1RSTF9TSVRFKG4pCSgoKG4pICYgMHgzKSA8PCAxNikKLSNkZWZpbmUgU1lTX0NGR0NUUkxfUE9TSVRJT04obikJKCgobikgJiAweGYpIDw8IDEyKQotI2RlZmluZSBTWVNfQ0ZHQ1RSTF9ERVZJQ0UobikJKCgobikgJiAweGZmZikgPDwgMCkKIAotI2RlZmluZSBTWVNfQ0ZHU1RBVF9FUlIJCSgxIDw8IDEpCi0jZGVmaW5lIFNZU19DRkdTVEFUX0NPTVBMRVRFCSgxIDw8IDApCitzdGF0aWMgdm9pZCBfX2lvbWVtICpfX3ZleHByZXNzX3N5c3JlZ19iYXNlOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICp2ZXhwcmVzc19zeXNyZWdfYmFzZSh2b2lkKQoreworCWlmICghX192ZXhwcmVzc19zeXNyZWdfYmFzZSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJCSJhcm0sdmV4cHJlc3Mtc3lzcmVnIik7CisKKwkJX192ZXhwcmVzc19zeXNyZWdfYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOworCX0KKworCVdBUk5fT04oIV9fdmV4cHJlc3Nfc3lzcmVnX2Jhc2UpOworCisJcmV0dXJuIF9fdmV4cHJlc3Nfc3lzcmVnX2Jhc2U7Cit9CiAKIAotc3RhdGljIHZvaWQgX19pb21lbSAqdmV4cHJlc3Nfc3lzcmVnX2Jhc2U7Ci1zdGF0aWMgc3RydWN0IGRldmljZSAqdmV4cHJlc3Nfc3lzcmVnX2RldjsKLXN0YXRpYyBpbnQgdmV4cHJlc3NfbWFzdGVyX3NpdGU7CitzdGF0aWMgaW50IHZleHByZXNzX3N5c3JlZ19nZXRfbWFzdGVyKHZvaWQpCit7CisJaWYgKHJlYWRsKHZleHByZXNzX3N5c3JlZ19iYXNlKCkgKyBTWVNfTUlTQykgJiBTWVNfTUlTQ19NQVNURVJTSVRFKQorCQlyZXR1cm4gVkVYUFJFU1NfU0lURV9EQjI7CiAKKwlyZXR1cm4gVkVYUFJFU1NfU0lURV9EQjE7Cit9CiAKIHZvaWQgdmV4cHJlc3NfZmxhZ3Nfc2V0KHUzMiBkYXRhKQogewotCXdyaXRlbCh+MCwgdmV4cHJlc3Nfc3lzcmVnX2Jhc2UgKyBTWVNfRkxBR1NDTFIpOwotCXdyaXRlbChkYXRhLCB2ZXhwcmVzc19zeXNyZWdfYmFzZSArIFNZU19GTEFHU1NFVCk7CisJd3JpdGVsKH4wLCB2ZXhwcmVzc19zeXNyZWdfYmFzZSgpICsgU1lTX0ZMQUdTQ0xSKTsKKwl3cml0ZWwoZGF0YSwgdmV4cHJlc3Nfc3lzcmVnX2Jhc2UoKSArIFNZU19GTEFHU1NFVCk7Cit9CisKK3Vuc2lnbmVkIGludCB2ZXhwcmVzc19nZXRfbWNpX2NhcmRpbihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHJlYWRsKHZleHByZXNzX3N5c3JlZ19iYXNlKCkgKyBTWVNfTUNJKSAmIFNZU19NQ0lfQ0FSRElOOwogfQogCiB1MzIgdmV4cHJlc3NfZ2V0X3Byb2NpZChpbnQgc2l0ZSkKIHsKIAlpZiAoc2l0ZSA9PSBWRVhQUkVTU19TSVRFX01BU1RFUikKLQkJc2l0ZSA9IHZleHByZXNzX21hc3Rlcl9zaXRlOworCQlzaXRlID0gdmV4cHJlc3Nfc3lzcmVnX2dldF9tYXN0ZXIoKTsKIAotCXJldHVybiByZWFkbCh2ZXhwcmVzc19zeXNyZWdfYmFzZSArIChzaXRlID09IFZFWFBSRVNTX1NJVEVfREIxID8KKwlyZXR1cm4gcmVhZGwodmV4cHJlc3Nfc3lzcmVnX2Jhc2UoKSArIChzaXRlID09IFZFWFBSRVNTX1NJVEVfREIxID8KIAkJCVNZU19QUk9DSUQwIDogU1lTX1BST0NJRDEpKTsKIH0KIAotdTMyIHZleHByZXNzX2dldF9oYmkoaW50IHNpdGUpCi17Ci0JdTMyIGlkOwotCi0Jc3dpdGNoIChzaXRlKSB7Ci0JY2FzZSBWRVhQUkVTU19TSVRFX01COgotCQlpZCA9IHJlYWRsKHZleHByZXNzX3N5c3JlZ19iYXNlICsgU1lTX0lEKTsKLQkJcmV0dXJuIChpZCA+PiBTWVNfSURfSEJJX1NISUZUKSAmIFNZU19IQklfTUFTSzsKLQljYXNlIFZFWFBSRVNTX1NJVEVfTUFTVEVSOgotCWNhc2UgVkVYUFJFU1NfU0lURV9EQjE6Ci0JY2FzZSBWRVhQUkVTU19TSVRFX0RCMjoKLQkJaWQgPSB2ZXhwcmVzc19nZXRfcHJvY2lkKHNpdGUpOwotCQlyZXR1cm4gKGlkID4+IFNZU19QUk9DSUR4X0hCSV9TSElGVCkgJiBTWVNfSEJJX01BU0s7Ci0JfQotCi0JcmV0dXJuIH4wOwotfQotCiB2b2lkIF9faW9tZW0gKnZleHByZXNzX2dldF8yNG1oel9jbG9ja19iYXNlKHZvaWQpCiB7Ci0JcmV0dXJuIHZleHByZXNzX3N5c3JlZ19iYXNlICsgU1lTXzI0TUhaOworCXJldHVybiB2ZXhwcmVzc19zeXNyZWdfYmFzZSgpICsgU1lTXzI0TUhaOwogfQogCiAKLXN0YXRpYyB2b2lkIHZleHByZXNzX3N5c3JlZ19maW5kX3Byb3Aoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQljb25zdCBjaGFyICpuYW1lLCB1MzIgKnZhbCkKLXsKLQlvZl9ub2RlX2dldChub2RlKTsKLQl3aGlsZSAobm9kZSkgewotCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgbmFtZSwgdmFsKSA9PSAwKSB7Ci0JCQlvZl9ub2RlX3B1dChub2RlKTsKLQkJCXJldHVybjsKLQkJfQotCQlub2RlID0gb2ZfZ2V0X25leHRfcGFyZW50KG5vZGUpOwotCX0KLX0KLQotdW5zaWduZWQgX192ZXhwcmVzc19nZXRfc2l0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQl1MzIgc2l0ZSA9IDA7Ci0KLQlXQVJOX09OKGRldiAmJiBub2RlICYmIGRldi0+b2Zfbm9kZSAhPSBub2RlKTsKLQlpZiAoZGV2ICYmICFub2RlKQotCQlub2RlID0gZGV2LT5vZl9ub2RlOwotCi0JaWYgKG5vZGUpIHsKLQkJdmV4cHJlc3Nfc3lzcmVnX2ZpbmRfcHJvcChub2RlLCAiYXJtLHZleHByZXNzLHNpdGUiLCAmc2l0ZSk7Ci0JfSBlbHNlIGlmIChkZXYgJiYgZGV2LT5idXMgPT0gJnBsYXRmb3JtX2J1c190eXBlKSB7Ci0JCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQotCQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyA9PSAxICYmCi0JCQkJcGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgPT0gSU9SRVNPVVJDRV9CVVMpCi0JCQlzaXRlID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JfSBlbHNlIGlmIChkZXYgJiYgc3RybmNtcChkZXZfbmFtZShkZXYpLCAiY3Q6IiwgMykgPT0gMCkgewotCQlzaXRlID0gVkVYUFJFU1NfU0lURV9NQVNURVI7Ci0JfQotCi0JaWYgKHNpdGUgPT0gVkVYUFJFU1NfU0lURV9NQVNURVIpCi0JCXNpdGUgPSB2ZXhwcmVzc19tYXN0ZXJfc2l0ZTsKLQotCXJldHVybiBzaXRlOwotfQotCi0KLXN0cnVjdCB2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2Z1bmMgewotCXUzMiB0ZW1wbGF0ZTsKLQl1MzIgZGV2aWNlOwotfTsKLQotc3RhdGljIHN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlICp2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2JyaWRnZTsKLXN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB2ZXhwcmVzc19zeXNyZWdfY29uZmlnX3RpbWVyOwotc3RhdGljIHUzMiAqdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19kYXRhOwotc3RhdGljIGludCB2ZXhwcmVzc19zeXNyZWdfY29uZmlnX3RyaWVzOwotCi1zdGF0aWMgdm9pZCAqdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19mdW5jX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19mdW5jICpjb25maWdfZnVuYzsKLQl1MzIgc2l0ZSA9IDA7Ci0JdTMyIHBvc2l0aW9uID0gMDsKLQl1MzIgZGNjID0gMDsKLQl1MzIgZnVuY19kZXZpY2VbMl07Ci0JaW50IGVyciA9IC1FRkFVTFQ7Ci0KLQlpZiAobm9kZSkgewotCQlvZl9ub2RlX2dldChub2RlKTsKLQkJdmV4cHJlc3Nfc3lzcmVnX2ZpbmRfcHJvcChub2RlLCAiYXJtLHZleHByZXNzLHNpdGUiLCAmc2l0ZSk7Ci0JCXZleHByZXNzX3N5c3JlZ19maW5kX3Byb3Aobm9kZSwgImFybSx2ZXhwcmVzcyxwb3NpdGlvbiIsCi0JCQkJJnBvc2l0aW9uKTsKLQkJdmV4cHJlc3Nfc3lzcmVnX2ZpbmRfcHJvcChub2RlLCAiYXJtLHZleHByZXNzLGRjYyIsICZkY2MpOwotCQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShub2RlLAotCQkJCSJhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMiLCBmdW5jX2RldmljZSwKLQkJCQlBUlJBWV9TSVpFKGZ1bmNfZGV2aWNlKSk7Ci0JCW9mX25vZGVfcHV0KG5vZGUpOwotCX0gZWxzZSBpZiAoZGV2ICYmIGRldi0+YnVzID09ICZwbGF0Zm9ybV9idXNfdHlwZSkgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0KLQkJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPT0gMSAmJgotCQkJCXBkZXYtPnJlc291cmNlWzBdLmZsYWdzID09IElPUkVTT1VSQ0VfQlVTKSB7Ci0JCQlzaXRlID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JCQlmdW5jX2RldmljZVswXSA9IHBkZXYtPnJlc291cmNlWzBdLmVuZDsKLQkJCWZ1bmNfZGV2aWNlWzFdID0gcGRldi0+aWQ7Ci0JCQllcnIgPSAwOwotCQl9Ci0JfQotCWlmIChlcnIpCi0JCXJldHVybiBOVUxMOwotCi0JY29uZmlnX2Z1bmMgPSBremFsbG9jKHNpemVvZigqY29uZmlnX2Z1bmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmZpZ19mdW5jKQotCQlyZXR1cm4gTlVMTDsKLQotCWNvbmZpZ19mdW5jLT50ZW1wbGF0ZSA9IFNZU19DRkdDVFJMX0RDQyhkY2MpOwotCWNvbmZpZ19mdW5jLT50ZW1wbGF0ZSB8PSBTWVNfQ0ZHQ1RSTF9GVU5DKGZ1bmNfZGV2aWNlWzBdKTsKLQljb25maWdfZnVuYy0+dGVtcGxhdGUgfD0gU1lTX0NGR0NUUkxfU0lURShzaXRlID09IFZFWFBSRVNTX1NJVEVfTUFTVEVSID8KLQkJCXZleHByZXNzX21hc3Rlcl9zaXRlIDogc2l0ZSk7Ci0JY29uZmlnX2Z1bmMtPnRlbXBsYXRlIHw9IFNZU19DRkdDVFJMX1BPU0lUSU9OKHBvc2l0aW9uKTsKLQljb25maWdfZnVuYy0+ZGV2aWNlIHw9IGZ1bmNfZGV2aWNlWzFdOwotCi0JZGV2X2RiZyh2ZXhwcmVzc19zeXNyZWdfZGV2LCAiZnVuYyAweCVwID0gMHgleCwgJWRcbiIsIGNvbmZpZ19mdW5jLAotCQkJY29uZmlnX2Z1bmMtPnRlbXBsYXRlLCBjb25maWdfZnVuYy0+ZGV2aWNlKTsKLQotCXJldHVybiBjb25maWdfZnVuYzsKLX0KLQotc3RhdGljIHZvaWQgdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19mdW5jX3B1dCh2b2lkICpmdW5jKQotewotCWtmcmVlKGZ1bmMpOwotfQotCi1zdGF0aWMgaW50IHZleHByZXNzX3N5c3JlZ19jb25maWdfZnVuY19leGVjKHZvaWQgKmZ1bmMsIGludCBvZmZzZXQsCi0JCWJvb2wgd3JpdGUsIHUzMiAqZGF0YSkKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCB2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2Z1bmMgKmNvbmZpZ19mdW5jID0gZnVuYzsKLQl1MzIgY29tbWFuZDsKLQotCWlmIChXQVJOX09OKCF2ZXhwcmVzc19zeXNyZWdfYmFzZSkpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JY29tbWFuZCA9IHJlYWRsKHZleHByZXNzX3N5c3JlZ19iYXNlICsgU1lTX0NGR0NUUkwpOwotCWlmIChXQVJOX09OKGNvbW1hbmQgJiBTWVNfQ0ZHQ1RSTF9TVEFSVCkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQljb21tYW5kID0gU1lTX0NGR0NUUkxfU1RBUlQ7Ci0JY29tbWFuZCB8PSB3cml0ZSA/IFNZU19DRkdDVFJMX1dSSVRFIDogMDsKLQljb21tYW5kIHw9IGNvbmZpZ19mdW5jLT50ZW1wbGF0ZTsKLQljb21tYW5kIHw9IFNZU19DRkdDVFJMX0RFVklDRShjb25maWdfZnVuYy0+ZGV2aWNlICsgb2Zmc2V0KTsKLQotCS8qIFVzZSBhIGNhbmFyeSBmb3IgcmVhZHMgKi8KLQlpZiAoIXdyaXRlKQotCQkqZGF0YSA9IDB4ZGVhZGJlZWY7Ci0KLQlkZXZfZGJnKHZleHByZXNzX3N5c3JlZ19kZXYsICJjb21tYW5kICV4LCBkYXRhICV4XG4iLAotCQkJY29tbWFuZCwgKmRhdGEpOwotCXdyaXRlbCgqZGF0YSwgdmV4cHJlc3Nfc3lzcmVnX2Jhc2UgKyBTWVNfQ0ZHREFUQSk7Ci0Jd3JpdGVsKDAsIHZleHByZXNzX3N5c3JlZ19iYXNlICsgU1lTX0NGR1NUQVQpOwotCXdyaXRlbChjb21tYW5kLCB2ZXhwcmVzc19zeXNyZWdfYmFzZSArIFNZU19DRkdDVFJMKTsKLQltYigpOwotCi0JaWYgKHZleHByZXNzX3N5c3JlZ19kZXYpIHsKLQkJLyogU2NoZWR1bGUgY29tcGxldGlvbiBjaGVjayAqLwotCQlpZiAoIXdyaXRlKQotCQkJdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19kYXRhID0gZGF0YTsKLQkJdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ190cmllcyA9IDEwMDsKLQkJbW9kX3RpbWVyKCZ2ZXhwcmVzc19zeXNyZWdfY29uZmlnX3RpbWVyLAotCQkJCWppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMCkpOwotCQlzdGF0dXMgPSBWRVhQUkVTU19DT05GSUdfU1RBVFVTX1dBSVQ7Ci0JfSBlbHNlIHsKLQkJLyogRWFybHkgZXhlY3V0aW9uLCBubyB0aW1lciBhdmFpbGFibGUsIGhhdmUgdG8gc3BpbiAqLwotCQl1MzIgY2Znc3RhdDsKLQotCQlkbyB7Ci0JCQljcHVfcmVsYXgoKTsKLQkJCWNmZ3N0YXQgPSByZWFkbCh2ZXhwcmVzc19zeXNyZWdfYmFzZSArIFNZU19DRkdTVEFUKTsKLQkJfSB3aGlsZSAoIWNmZ3N0YXQpOwotCi0JCWlmICghd3JpdGUgJiYgKGNmZ3N0YXQgJiBTWVNfQ0ZHU1RBVF9DT01QTEVURSkpCi0JCQkqZGF0YSA9IHJlYWRsKHZleHByZXNzX3N5c3JlZ19iYXNlICsgU1lTX0NGR0RBVEEpOwotCQlzdGF0dXMgPSBWRVhQUkVTU19DT05GSUdfU1RBVFVTX0RPTkU7Ci0KLQkJaWYgKGNmZ3N0YXQgJiBTWVNfQ0ZHU1RBVF9FUlIpCi0JCQlzdGF0dXMgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlX2luZm8gdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19icmlkZ2VfaW5mbyA9IHsKLQkubmFtZSA9ICJ2ZXhwcmVzcy1zeXNyZWciLAotCS5mdW5jX2dldCA9IHZleHByZXNzX3N5c3JlZ19jb25maWdfZnVuY19nZXQsCi0JLmZ1bmNfcHV0ID0gdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19mdW5jX3B1dCwKLQkuZnVuY19leGVjID0gdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19mdW5jX2V4ZWMsCi19OwotCi1zdGF0aWMgdm9pZCB2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2NvbXBsZXRlKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlpbnQgc3RhdHVzID0gVkVYUFJFU1NfQ09ORklHX1NUQVRVU19ET05FOwotCXUzMiBjZmdzdGF0ID0gcmVhZGwodmV4cHJlc3Nfc3lzcmVnX2Jhc2UgKyBTWVNfQ0ZHU1RBVCk7Ci0KLQlpZiAoY2Znc3RhdCAmIFNZU19DRkdTVEFUX0VSUikKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQlpZiAoIXZleHByZXNzX3N5c3JlZ19jb25maWdfdHJpZXMtLSkKLQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldl9lcnIodmV4cHJlc3Nfc3lzcmVnX2RldiwgImVycm9yICVkXG4iLCBzdGF0dXMpOwotCX0gZWxzZSBpZiAoIShjZmdzdGF0ICYgU1lTX0NGR1NUQVRfQ09NUExFVEUpKSB7Ci0JCW1vZF90aW1lcigmdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ190aW1lciwKLQkJCQlqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyg1MCkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHZleHByZXNzX3N5c3JlZ19jb25maWdfZGF0YSkgewotCQkqdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19kYXRhID0gcmVhZGwodmV4cHJlc3Nfc3lzcmVnX2Jhc2UgKwotCQkJCVNZU19DRkdEQVRBKTsKLQkJZGV2X2RiZyh2ZXhwcmVzc19zeXNyZWdfZGV2LCAicmVhZCBkYXRhICV4XG4iLAotCQkJCSp2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2RhdGEpOwotCQl2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2RhdGEgPSBOVUxMOwotCX0KLQotCXZleHByZXNzX2NvbmZpZ19jb21wbGV0ZSh2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2JyaWRnZSwgc3RhdHVzKTsKLX0KLQotCi12b2lkIHZleHByZXNzX3N5c3JlZ19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKFdBUk5fT04oIXZleHByZXNzX3N5c3JlZ19iYXNlKSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlYWRsKHZleHByZXNzX3N5c3JlZ19iYXNlICsgU1lTX01JU0MpICYgU1lTX01JU0NfTUFTVEVSU0lURSkKLQkJdmV4cHJlc3NfbWFzdGVyX3NpdGUgPSBWRVhQUkVTU19TSVRFX0RCMjsKLQllbHNlCi0JCXZleHByZXNzX21hc3Rlcl9zaXRlID0gVkVYUFJFU1NfU0lURV9EQjE7Ci0KLQl2ZXhwcmVzc19zeXNyZWdfY29uZmlnX2JyaWRnZSA9IHZleHByZXNzX2NvbmZpZ19icmlkZ2VfcmVnaXN0ZXIoCi0JCQlub2RlLCAmdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19icmlkZ2VfaW5mbyk7Ci0JV0FSTl9PTighdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19icmlkZ2UpOwotfQotCiB2b2lkIF9faW5pdCB2ZXhwcmVzc19zeXNyZWdfZWFybHlfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UpCiB7Ci0JdmV4cHJlc3Nfc3lzcmVnX2Jhc2UgPSBiYXNlOwotCXZleHByZXNzX3N5c3JlZ19zZXR1cChOVUxMKTsKKwlfX3ZleHByZXNzX3N5c3JlZ19iYXNlID0gYmFzZTsKKworCXZleHByZXNzX2NvbmZpZ19zZXRfbWFzdGVyKHZleHByZXNzX3N5c3JlZ19nZXRfbWFzdGVyKCkpOwogfQogCi12b2lkIF9faW5pdCB2ZXhwcmVzc19zeXNyZWdfb2ZfZWFybHlfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIAotCWlmICh2ZXhwcmVzc19zeXNyZWdfYmFzZSkKLQkJcmV0dXJuOworLyogVGhlIHN5c3JlZyBibG9jayBpcyBqdXN0IGEgcmFuZG9tIGNvbGxlY3Rpb24gb2YgdmFyaW91cyBmdW5jdGlvbnMuLi4gKi8KIAotCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYXJtLHZleHByZXNzLXN5c3JlZyIpOwotCWlmIChub2RlKSB7Ci0JCXZleHByZXNzX3N5c3JlZ19iYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JCXZleHByZXNzX3N5c3JlZ19zZXR1cChub2RlKTsKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29uX3BsYXRmb3JtX2RhdGEgdmV4cHJlc3Nfc3lzcmVnX3N5c19pZF9wZGF0YSA9IHsKKwkubGFiZWwgPSAic3lzX2lkIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmdwaW9fcGRhdGEgdmV4cHJlc3Nfc3lzcmVnX3N5c19sZWRfcGRhdGEgPSB7CisJLmxhYmVsID0gInN5c19sZWQiLAorCS5iYXNlID0gLTEsCisJLm5ncGlvID0gOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmdwaW9fcGRhdGEgdmV4cHJlc3Nfc3lzcmVnX3N5c19tY2lfcGRhdGEgPSB7CisJLmxhYmVsID0gInN5c19tY2kiLAorCS5iYXNlID0gLTEsCisJLm5ncGlvID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmdwaW9fcGRhdGEgdmV4cHJlc3Nfc3lzcmVnX3N5c19mbGFzaF9wZGF0YSA9IHsKKwkubGFiZWwgPSAic3lzX2ZsYXNoIiwKKwkuYmFzZSA9IC0xLAorCS5uZ3BpbyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHN5c2Nvbl9wbGF0Zm9ybV9kYXRhIHZleHByZXNzX3N5c3JlZ19zeXNfbWlzY19wZGF0YSA9IHsKKwkubGFiZWwgPSAic3lzX21pc2MiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNjb25fcGxhdGZvcm1fZGF0YSB2ZXhwcmVzc19zeXNyZWdfc3lzX3Byb2NpZF9wZGF0YSA9IHsKKwkubGFiZWwgPSAic3lzX3Byb2NpZCIsCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHZleHByZXNzX3N5c3JlZ19jZWxsc1tdID0geworCXsKKwkJLm5hbWUgPSAic3lzY29uIiwKKwkJLm51bV9yZXNvdXJjZXMgPSAxLAorCQkucmVzb3VyY2VzID0gKHN0cnVjdCByZXNvdXJjZSBbXSkgeworCQkJREVGSU5FX1JFU19NRU0oU1lTX0lELCAweDQpLAorCQl9LAorCQkucGxhdGZvcm1fZGF0YSA9ICZ2ZXhwcmVzc19zeXNyZWdfc3lzX2lkX3BkYXRhLAorCQkucGRhdGFfc2l6ZSA9IHNpemVvZih2ZXhwcmVzc19zeXNyZWdfc3lzX2lkX3BkYXRhKSwKKwl9LCB7CisJCS5uYW1lID0gImJhc2ljLW1taW8tZ3BpbyIsCisJCS5vZl9jb21wYXRpYmxlID0gImFybSx2ZXhwcmVzcy1zeXNyZWcsc3lzX2xlZCIsCisJCS5udW1fcmVzb3VyY2VzID0gMSwKKwkJLnJlc291cmNlcyA9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKKwkJCURFRklORV9SRVNfTUVNX05BTUVEKFNZU19MRUQsIDB4NCwgImRhdCIpLAorCQl9LAorCQkucGxhdGZvcm1fZGF0YSA9ICZ2ZXhwcmVzc19zeXNyZWdfc3lzX2xlZF9wZGF0YSwKKwkJLnBkYXRhX3NpemUgPSBzaXplb2YodmV4cHJlc3Nfc3lzcmVnX3N5c19sZWRfcGRhdGEpLAorCX0sIHsKKwkJLm5hbWUgPSAiYmFzaWMtbW1pby1ncGlvIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXN5c3JlZyxzeXNfbWNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSAxLAorCQkucmVzb3VyY2VzID0gKHN0cnVjdCByZXNvdXJjZSBbXSkgeworCQkJREVGSU5FX1JFU19NRU1fTkFNRUQoU1lTX01DSSwgMHg0LCAiZGF0IiksCisJCX0sCisJCS5wbGF0Zm9ybV9kYXRhID0gJnZleHByZXNzX3N5c3JlZ19zeXNfbWNpX3BkYXRhLAorCQkucGRhdGFfc2l6ZSA9IHNpemVvZih2ZXhwcmVzc19zeXNyZWdfc3lzX21jaV9wZGF0YSksCisJfSwgeworCQkubmFtZSA9ICJiYXNpYy1tbWlvLWdwaW8iLAorCQkub2ZfY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3Mtc3lzcmVnLHN5c19mbGFzaCIsCisJCS5udW1fcmVzb3VyY2VzID0gMSwKKwkJLnJlc291cmNlcyA9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKKwkJCURFRklORV9SRVNfTUVNX05BTUVEKFNZU19GTEFTSCwgMHg0LCAiZGF0IiksCisJCX0sCisJCS5wbGF0Zm9ybV9kYXRhID0gJnZleHByZXNzX3N5c3JlZ19zeXNfZmxhc2hfcGRhdGEsCisJCS5wZGF0YV9zaXplID0gc2l6ZW9mKHZleHByZXNzX3N5c3JlZ19zeXNfZmxhc2hfcGRhdGEpLAorCX0sIHsKKwkJLm5hbWUgPSAic3lzY29uIiwKKwkJLm51bV9yZXNvdXJjZXMgPSAxLAorCQkucmVzb3VyY2VzID0gKHN0cnVjdCByZXNvdXJjZSBbXSkgeworCQkJREVGSU5FX1JFU19NRU0oU1lTX01JU0MsIDB4NCksCisJCX0sCisJCS5wbGF0Zm9ybV9kYXRhID0gJnZleHByZXNzX3N5c3JlZ19zeXNfbWlzY19wZGF0YSwKKwkJLnBkYXRhX3NpemUgPSBzaXplb2YodmV4cHJlc3Nfc3lzcmVnX3N5c19taXNjX3BkYXRhKSwKKwl9LCB7CisJCS5uYW1lID0gInN5c2NvbiIsCisJCS5udW1fcmVzb3VyY2VzID0gMSwKKwkJLnJlc291cmNlcyA9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKKwkJCURFRklORV9SRVNfTUVNKFNZU19QUk9DSUQwLCAweDgpLAorCQl9LAorCQkucGxhdGZvcm1fZGF0YSA9ICZ2ZXhwcmVzc19zeXNyZWdfc3lzX3Byb2NpZF9wZGF0YSwKKwkJLnBkYXRhX3NpemUgPSBzaXplb2YodmV4cHJlc3Nfc3lzcmVnX3N5c19wcm9jaWRfcGRhdGEpLAorCX0sIHsKKwkJLm5hbWUgPSAidmV4cHJlc3Mtc3lzY2ZnIiwKKwkJLm51bV9yZXNvdXJjZXMgPSAxLAorCQkucmVzb3VyY2VzID0gKHN0cnVjdCByZXNvdXJjZSBbXSkgeworCQkJREVGSU5FX1JFU19NRU0oU1lTX0NGR0RBVEEsIDB4YyksCisJCX0sCiAJfQotfQotCi0KLSNpZmRlZiBDT05GSUdfR1BJT0xJQgotCi0jZGVmaW5lIFZFWFBSRVNTX1NZU1JFR19HUElPKF9uYW1lLCBfcmVnLCBfdmFsdWUpIFwKLQlbVkVYUFJFU1NfR1BJT18jI19uYW1lXSA9IHsgXAotCQkucmVnID0gX3JlZywgXAotCQkudmFsdWUgPSBfcmVnIyNfIyNfdmFsdWUsIFwKLQl9Ci0KLXN0YXRpYyBzdHJ1Y3QgdmV4cHJlc3Nfc3lzcmVnX2dwaW8gewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCXUzMiB2YWx1ZTsKLX0gdmV4cHJlc3Nfc3lzcmVnX2dwaW9zW10gPSB7Ci0JVkVYUFJFU1NfU1lTUkVHX0dQSU8oTU1DX0NBUkRJTiwJU1lTX01DSSwJQ0FSRElOKSwKLQlWRVhQUkVTU19TWVNSRUdfR1BJTyhNTUNfV1BST1QsCQlTWVNfTUNJLAlXUFJPVCksCi0JVkVYUFJFU1NfU1lTUkVHX0dQSU8oRkxBU0hfV1BuLAkJU1lTX0ZMQVNILAlXUG4pLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDAsCQlTWVNfTEVELAlMRUQoMCkpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDEsCQlTWVNfTEVELAlMRUQoMSkpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDIsCQlTWVNfTEVELAlMRUQoMikpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDMsCQlTWVNfTEVELAlMRUQoMykpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDQsCQlTWVNfTEVELAlMRUQoNCkpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDUsCQlTWVNfTEVELAlMRUQoNSkpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDYsCQlTWVNfTEVELAlMRUQoNikpLAotCVZFWFBSRVNTX1NZU1JFR19HUElPKExFRDcsCQlTWVNfTEVELAlMRUQoNykpLAogfTsKIAotc3RhdGljIGludCB2ZXhwcmVzc19zeXNyZWdfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZleHByZXNzX3N5c3JlZ19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHZleHByZXNzX3N5c3JlZ19ncGlvICpncGlvID0gJnZleHByZXNzX3N5c3JlZ19ncGlvc1tvZmZzZXRdOwotCXUzMiByZWdfdmFsdWUgPSByZWFkbCh2ZXhwcmVzc19zeXNyZWdfYmFzZSArIGdwaW8tPnJlZyk7Ci0KLQlyZXR1cm4gISEocmVnX3ZhbHVlICYgZ3Bpby0+dmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCB2ZXhwcmVzc19zeXNyZWdfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IHZleHByZXNzX3N5c3JlZ19ncGlvICpncGlvID0gJnZleHByZXNzX3N5c3JlZ19ncGlvc1tvZmZzZXRdOwotCXUzMiByZWdfdmFsdWUgPSByZWFkbCh2ZXhwcmVzc19zeXNyZWdfYmFzZSArIGdwaW8tPnJlZyk7Ci0KLQlpZiAodmFsdWUpCi0JCXJlZ192YWx1ZSB8PSBncGlvLT52YWx1ZTsKLQllbHNlCi0JCXJlZ192YWx1ZSAmPSB+Z3Bpby0+dmFsdWU7Ci0KLQl3cml0ZWwocmVnX3ZhbHVlLCB2ZXhwcmVzc19zeXNyZWdfYmFzZSArIGdwaW8tPnJlZyk7Ci19Ci0KLXN0YXRpYyBpbnQgdmV4cHJlc3Nfc3lzcmVnX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0JdmV4cHJlc3Nfc3lzcmVnX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHZleHByZXNzX3N5c3JlZ19ncGlvX2NoaXAgPSB7Ci0JLmxhYmVsID0gInZleHByZXNzLXN5c3JlZyIsCi0JLmRpcmVjdGlvbl9pbnB1dCA9IHZleHByZXNzX3N5c3JlZ19ncGlvX2RpcmVjdGlvbl9pbnB1dCwKLQkuZGlyZWN0aW9uX291dHB1dCA9IHZleHByZXNzX3N5c3JlZ19ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCi0JLmdldCA9IHZleHByZXNzX3N5c3JlZ19ncGlvX2dldCwKLQkuc2V0ID0gdmV4cHJlc3Nfc3lzcmVnX2dwaW9fc2V0LAotCS5uZ3BpbyA9IEFSUkFZX1NJWkUodmV4cHJlc3Nfc3lzcmVnX2dwaW9zKSwKLQkuYmFzZSA9IDAsCi19OwotCi0KLSNkZWZpbmUgVkVYUFJFU1NfU1lTUkVHX0dSRUVOX0xFRChfbmFtZSwgX2RlZmF1bHRfdHJpZ2dlciwgX2dwaW8pIFwKLQl7IFwKLQkJLm5hbWUgPSAidjJtOmdyZWVuOiJfbmFtZSwgXAotCQkuZGVmYXVsdF90cmlnZ2VyID0gX2RlZmF1bHRfdHJpZ2dlciwgXAotCQkuZ3BpbyA9IFZFWFBSRVNTX0dQSU9fIyNfZ3BpbywgXAotCX0KLQotc3RydWN0IGdwaW9fbGVkIHZleHByZXNzX3N5c3JlZ19sZWRzW10gPSB7Ci0JVkVYUFJFU1NfU1lTUkVHX0dSRUVOX0xFRCgidXNlcjEiLAkiaGVhcnRiZWF0IiwJTEVEMCksCi0JVkVYUFJFU1NfU1lTUkVHX0dSRUVOX0xFRCgidXNlcjIiLAkibW1jMCIsCQlMRUQxKSwKLQlWRVhQUkVTU19TWVNSRUdfR1JFRU5fTEVEKCJ1c2VyMyIsCSJjcHUwIiwJCUxFRDIpLAotCVZFWFBSRVNTX1NZU1JFR19HUkVFTl9MRUQoInVzZXI0IiwJImNwdTEiLAkJTEVEMyksCi0JVkVYUFJFU1NfU1lTUkVHX0dSRUVOX0xFRCgidXNlcjUiLAkiY3B1MiIsCQlMRUQ0KSwKLQlWRVhQUkVTU19TWVNSRUdfR1JFRU5fTEVEKCJ1c2VyNiIsCSJjcHUzIiwJCUxFRDUpLAotCVZFWFBSRVNTX1NZU1JFR19HUkVFTl9MRUQoInVzZXI3IiwJImNwdTQiLAkJTEVENiksCi0JVkVYUFJFU1NfU1lTUkVHX0dSRUVOX0xFRCgidXNlcjgiLAkiY3B1NSIsCQlMRUQ3KSwKLX07Ci0KLXN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHZleHByZXNzX3N5c3JlZ19sZWRzX3BkYXRhID0gewotCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUodmV4cHJlc3Nfc3lzcmVnX2xlZHMpLAotCS5sZWRzID0gdmV4cHJlc3Nfc3lzcmVnX2xlZHMsCi19OwotCi0jZW5kaWYKLQotCi1zdGF0aWMgc3NpemVfdCB2ZXhwcmVzc19zeXNyZWdfc3lzX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgcmVhZGwodmV4cHJlc3Nfc3lzcmVnX2Jhc2UgKyBTWVNfSUQpKTsKLX0KLQotREVWSUNFX0FUVFIoc3lzX2lkLCBTX0lSVUdPLCB2ZXhwcmVzc19zeXNyZWdfc3lzX2lkX3Nob3csIE5VTEwpOwotCiBzdGF0aWMgaW50IHZleHByZXNzX3N5c3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBlcnI7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwKLQkJCUlPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGJncGlvX2NoaXAgKm1tY19ncGlvX2NoaXA7CisJdTMyIGR0X2hiaTsKIAotCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKLQkJCXJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvbiFcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pCisJCXJldHVybiAtRUlOVkFMOworCisJYmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCBtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2ZXhwcmVzc19jb25maWdfc2V0X21hc3Rlcih2ZXhwcmVzc19zeXNyZWdfZ2V0X21hc3RlcigpKTsKKworCS8qIENvbmZpcm0gYm9hcmQgdHlwZSBhZ2FpbnN0IERUIHByb3BlcnR5LCBpZiBhdmFpbGFibGUgKi8KKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIob2ZfYWxsbm9kZXMsICJhcm0saGJpIiwgJmR0X2hiaSkgPT0gMCkgeworCQl1MzIgaWQgPSB2ZXhwcmVzc19nZXRfcHJvY2lkKFZFWFBSRVNTX1NJVEVfTUFTVEVSKTsKKwkJdTMyIGhiaSA9IChpZCA+PiBTWVNfUFJPQ0lEeF9IQklfU0hJRlQpICYgU1lTX0hCSV9NQVNLOworCisJCWlmIChXQVJOX09OKGR0X2hiaSAhPSBoYmkpKQorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkRUIEhCSSAoJXgpIGlzIG5vdCBtYXRjaGluZyBoYXJkd2FyZSAoJXgpIVxuIiwKKwkJCQkJZHRfaGJpLCBoYmkpOwogCX0KIAotCWlmICghdmV4cHJlc3Nfc3lzcmVnX2Jhc2UpIHsKLQkJdmV4cHJlc3Nfc3lzcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHJlcykpOwotCQl2ZXhwcmVzc19zeXNyZWdfc2V0dXAocGRldi0+ZGV2Lm9mX25vZGUpOwotCX0KKwkvKgorCSAqIER1cGxpY2F0ZWQgU1lTX01DSSBwc2V1ZG8tR1BJTyBjb250cm9sbGVyIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKwkgKiBvbGRlciB0cmVlcyB1c2luZyBzeXNyZWcgbm9kZSBmb3IgTU1DIGNvbnRyb2wgbGluZXMuCisJICovCisJbW1jX2dwaW9fY2hpcCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm1tY19ncGlvX2NoaXApLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtbWNfZ3Bpb19jaGlwKQorCQlyZXR1cm4gLUVOT01FTTsKKwliZ3Bpb19pbml0KG1tY19ncGlvX2NoaXAsICZwZGV2LT5kZXYsIDB4NCwgYmFzZSArIFNZU19NQ0ksCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKKwltbWNfZ3Bpb19jaGlwLT5nYy5uZ3BpbyA9IDI7CisJZ3Bpb2NoaXBfYWRkKCZtbWNfZ3Bpb19jaGlwLT5nYyk7CiAKLQlpZiAoIXZleHByZXNzX3N5c3JlZ19iYXNlKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBvYnRhaW4gYmFzZSBhZGRyZXNzIVxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXNldHVwX3RpbWVyKCZ2ZXhwcmVzc19zeXNyZWdfY29uZmlnX3RpbWVyLAotCQkJdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19jb21wbGV0ZSwgMCk7Ci0KLQl2ZXhwcmVzc19zeXNyZWdfZGV2ID0gJnBkZXYtPmRldjsKLQotI2lmZGVmIENPTkZJR19HUElPTElCCi0JdmV4cHJlc3Nfc3lzcmVnX2dwaW9fY2hpcC5kZXYgPSAmcGRldi0+ZGV2OwotCWVyciA9IGdwaW9jaGlwX2FkZCgmdmV4cHJlc3Nfc3lzcmVnX2dwaW9fY2hpcCk7Ci0JaWYgKGVycikgewotCQl2ZXhwcmVzc19jb25maWdfYnJpZGdlX3VucmVnaXN0ZXIoCi0JCQkJdmV4cHJlc3Nfc3lzcmVnX2NvbmZpZ19icmlkZ2UpOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgR1BJTyBjaGlwISAoJWQpXG4iLAotCQkJCWVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEodmV4cHJlc3Nfc3lzcmVnX2RldiwgImxlZHMtZ3BpbyIsCi0JCQlQTEFURk9STV9ERVZJRF9BVVRPLCAmdmV4cHJlc3Nfc3lzcmVnX2xlZHNfcGRhdGEsCi0JCQlzaXplb2YodmV4cHJlc3Nfc3lzcmVnX2xlZHNfcGRhdGEpKTsKLSNlbmRpZgotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKHZleHByZXNzX3N5c3JlZ19kZXYsICZkZXZfYXR0cl9zeXNfaWQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG1mZF9hZGRfZGV2aWNlcygmcGRldi0+ZGV2LCBQTEFURk9STV9ERVZJRF9BVVRPLAorCQkJdmV4cHJlc3Nfc3lzcmVnX2NlbGxzLAorCQkJQVJSQVlfU0laRSh2ZXhwcmVzc19zeXNyZWdfY2VsbHMpLCBtZW0sIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2ZXhwcmVzc19zeXNyZWdfbWF0Y2hbXSA9IHsKQEAgLTUyMiw3ICsyNjUsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgdmV4cHJlc3Nfc3lzcmVnX2luaXQodm9pZCkKIHsKLQl2ZXhwcmVzc19zeXNyZWdfb2ZfZWFybHlfaW5pdCgpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCS8qIE5lZWQgdGhlIHN5c3JlZyBlYXJseSwgYmVmb3JlIGFueSBvdGhlciBkZXZpY2UuLi4gKi8KKwlmb3JfZWFjaF9tYXRjaGluZ19ub2RlKG5vZGUsIHZleHByZXNzX3N5c3JlZ19tYXRjaCkKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShub2RlLCBOVUxMLCBOVUxMKTsKKwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZleHByZXNzX3N5c3JlZ19kcml2ZXIpOwogfQogY29yZV9pbml0Y2FsbCh2ZXhwcmVzc19zeXNyZWdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IDhiYWZmMGUuLmE0M2QwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC01NCw2ICs1NCw3IEBACiBjb25maWcgQVRNRUxfUFdNCiAJdHJpc3RhdGUgIkF0bWVsIEFUMzIvQVQ5MSBQV00gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEhBVkVfQ0xLCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBVDkxU0FNOTI2MyB8fCBBVDkxU0FNOVJMIHx8IEFUOTFTQU05RzQ1CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBQV00gY2hhbm5lbHMKIAkgIG9uIGNlcnRhaW4gQXRtZWwgcHJvY2Vzc29ycy4gIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gaXMgdXNlZCBmb3IKQEAgLTIwMCw3ICsyMDEsNyBAQAogCiBjb25maWcgQVRNRUxfU1NDCiAJdHJpc3RhdGUgIkRldmljZSBkcml2ZXIgZm9yIEF0bWVsIFNTQyBwZXJpcGhlcmFsIgotCWRlcGVuZHMgb24gSEFTX0lPTUVNCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0gJiYgKEFWUjMyIHx8IEFSQ0hfQVQ5MSB8fCBDT01QSUxFX1RFU1QpCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnQgZm9yIEF0bWVsIFN5bmNocm9uaXplZAogCSAgU2VyaWFsIENvbW11bmljYXRpb24gcGVyaXBoZXJhbCAoU1NDKS4KQEAgLTQ2OCw3ICs0NjksNyBAQAogY29uZmlnIFBDSF9QSFVCCiAJdHJpc3RhdGUgIkludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgUEhVQiIKIAlzZWxlY3QgR0VORVJJQ19ORVRfVVRJTFMKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIChYODZfMzIgfHwgQ09NUElMRV9URVNUKQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0goUGxhdGZvcm0gY29udHJvbGxlciBIdWIpIFBIVUIoUGFja2V0IEh1Yikgb2YKIAkgIEludGVsIFRvcGNsaWZmIHdoaWNoIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkCkBAIC01MTUsNiArNTE2LDE1IEBACiAJICB0aGUgZ2VuYWxsb2MgQVBJLiBJdCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGZvciBzbWFsbCBvbi1jaGlwIFNSQU0KIAkgIGFyZWFzIGZvdW5kIG9uIG1hbnkgU29Dcy4KIAorY29uZmlnIFZFWFBSRVNTX1NZU0NGRworCWJvb2wgIlZlcnNhdGlsZSBFeHByZXNzIFN5c3RlbSBDb25maWd1cmF0aW9uIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZFWFBSRVNTX0NPTkZJRworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEFSTSBMdGQuIFZlcnNhdGlsZSBFeHByZXNzIHVzZXMgc3BlY2lhbGlzZWQgcGxhdGZvcm0gY29uZmlndXJhdGlvbgorCSAgYnVzLiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgaXMgb25lIG9mIHRoZSBwb3NzaWJsZSBtZWFucworCSAgb2YgZ2VuZXJhdGluZyB0cmFuc2FjdGlvbnMgb24gdGhpcyBidXMuCisKIHNvdXJjZSAiZHJpdmVycy9taXNjL2MycG9ydC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21pc2MvZWVwcm9tL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9jYjcxMC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmluZGV4IDdlYjRiNjkuLmQ1OWNlMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTU1LDMgKzU1LDQgQEAKIG9iai15CQkJCSs9IG1pYy8KIG9iai0kKENPTkZJR19HRU5XUUUpCQkrPSBnZW53cWUvCiBvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCitvYmotJChDT05GSUdfVkVYUFJFU1NfU1lTQ0ZHKQkrPSB2ZXhwcmVzcy1zeXNjZmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2FybS1jaGFybGNkLmMgYi9kcml2ZXJzL21pc2MvYXJtLWNoYXJsY2QuYwppbmRleCBiN2ViZjgwLi5jNzJlOTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvYXJtLWNoYXJsY2QuYworKysgYi9kcml2ZXJzL21pc2MvYXJtLWNoYXJsY2QuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTM2NiwxMSArMzY3LDE3IEBACiAJLnJlc3VtZSA9IGNoYXJsY2RfcmVzdW1lLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2hhcmxjZF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJtLHZlcnNhdGlsZS1sY2QiLCB9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjaGFybGNkX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9IERSSVZFUk5BTUUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCQkucG0gPSAmY2hhcmxjZF9wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihjaGFybGNkX21hdGNoKSwKIAl9LAogCS5yZW1vdmUgPSBfX2V4aXRfcChjaGFybGNkX3JlbW92ZSksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2RzMTY4Mi5jIGIvZHJpdmVycy9taXNjL2RzMTY4Mi5jCmluZGV4IDZhNjcyZjkuLmI5MDlmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9kczE2ODIuYworKysgYi9kcml2ZXJzL21pc2MvZHMxNjgyLmMKQEAgLTg1LDcgKzg1LDYgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCWNoYXIgKmVuZHA7CiAJdTY0IHZhbDsKIAlfX2xlMzIgdmFsX2xlOwogCWludCByYzsKQEAgLTkzLDggKzkyLDggQEAKIAlkZXZfZGJnKGRldiwgImRzMTY4Ml9zdG9yZSgpIGNhbGxlZCBvbiAlc1xuIiwgYXR0ci0+YXR0ci5uYW1lKTsKIAogCS8qIERlY29kZSBpbnB1dCAqLwotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsbChidWYsICZlbmRwLCAwKTsKLQlpZiAoYnVmID09IGVuZHApIHsKKwlyYyA9IGtzdHJ0b3VsbChidWYsIDAsICZ2YWwpOworCWlmIChyYyA8IDApIHsKIAkJZGV2X2RiZyhkZXYsICJpbnB1dCBzdHJpbmcgbm90IGEgbnVtYmVyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2RlYnVnZnMuYyBiL2RyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9kZWJ1Z2ZzLmMKaW5kZXggNTBkMjA5Ni4uMGEzM2FkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfZGVidWdmcy5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAljaGFyIG5hbWVbNjRdOwogCXVuc2lnbmVkIGludCBpOwogCi0Jc3ByaW50ZihjYXJkX25hbWUsICIlcyV1X2NhcmQiLCBHRU5XUUVfREVWTkFNRSwgY2QtPmNhcmRfaWR4KTsKKwlzcHJpbnRmKGNhcmRfbmFtZSwgIiVzJWRfY2FyZCIsIEdFTldRRV9ERVZOQU1FLCBjZC0+Y2FyZF9pZHgpOwogCiAJcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihjYXJkX25hbWUsIGNkLT5kZWJ1Z2ZzX2dlbndxZSk7CiAJaWYgKCFyb290KSB7CkBAIC00NTQsNyArNDU0LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgIEdFTldRRV9NQVhfVkZTOyBpKyspIHsKLQkJc3ByaW50ZihuYW1lLCAidmYlZF9qb2J0aW1lb3V0X21zZWMiLCBpKTsKKwkJc3ByaW50ZihuYW1lLCAidmYldV9qb2J0aW1lb3V0X21zZWMiLCBpKTsKIAogCQlmaWxlID0gZGVidWdmc19jcmVhdGVfdTMyKG5hbWUsIDA2NjYsIHJvb3QsCiAJCQkJCSAgJmNkLT52Zl9qb2J0aW1lb3V0X21zZWNbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX3V0aWxzLmMgYi9kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfdXRpbHMuYwppbmRleCBkMDQ5ZDI3Li42MmNjNmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfdXRpbHMuYworKysgYi9kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfdXRpbHMuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAgKi8KIGludCBnZW53cWVfZnJlZV9zeW5jX3NnbChzdHJ1Y3QgZ2Vud3FlX2RldiAqY2QsIHN0cnVjdCBnZW53cWVfc2dsICpzZ2wpCiB7Ci0JaW50IHJjOworCWludCByYyA9IDA7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBjZC0+cGNpX2RldjsKIAogCWlmIChzZ2wtPmZwYWdlKSB7CkBAIC03MTgsNyArNzE4LDcgQEAKIAlpbnQgcmM7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBjZC0+cGNpX2RldjsKIAotCXJjID0gcGNpX2VuYWJsZV9tc2lfYmxvY2socGNpX2RldiwgY291bnQpOworCXJjID0gcGNpX2VuYWJsZV9tc2lfZXhhY3QocGNpX2RldiwgY291bnQpOwogCWlmIChyYyA9PSAwKQogCQljZC0+ZmxhZ3MgfD0gR0VOV1FFX0ZMQUdfTVNJX0VOQUJMRUQ7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL21laS9hbXRoaWYuYyBiL2RyaXZlcnMvbWlzYy9tZWkvYW10aGlmLmMKaW5kZXggYjhkZWIzNC4uMGQ2MjM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL21laS9hbXRoaWYuYworKysgYi9kcml2ZXJzL21pc2MvbWVpL2FtdGhpZi5jCkBAIC0xMTEsOCArMTExLDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQljbC0+c3RhdGUgPSBNRUlfRklMRV9DT05ORUNUSU5HOwotCiAJcmV0ID0gbWVpX2NsX2Nvbm5lY3QoY2wsIE5VTEwpOwogCiAJZGV2LT5pYW10aGlmX3N0YXRlID0gTUVJX0lBTVRISUZfSURMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvYnVzLmMgYi9kcml2ZXJzL21pc2MvbWVpL2J1cy5jCmluZGV4IGRkYzVhYzkuLjBlOTkzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvYnVzLmMKKysrIGIvZHJpdmVycy9taXNjL21laS9idXMuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCXJldHVybiBpZDsKIAogCWlmIChsZW5ndGggPiBkZXYtPm1lX2NsaWVudHNbaWRdLnByb3BzLm1heF9tc2dfbGVuZ3RoKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FRkJJRzsKIAogCWNiID0gbWVpX2lvX2NiX2luaXQoY2wsIE5VTEwpOwogCWlmICghY2IpCkBAIC00MjcsOCArNDI3LDYgQEAKIAogCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOwogCi0JY2wtPnN0YXRlID0gTUVJX0ZJTEVfQ09OTkVDVElORzsKLQogCWVyciA9IG1laV9jbF9jb25uZWN0KGNsLCBOVUxMKTsKIAlpZiAoZXJyIDwgMCkgewogCQltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL21laS9jbGllbnQuYyBiL2RyaXZlcnMvbWlzYy9tZWkvY2xpZW50LmMKaW5kZXggOGMwNzhiOC4uNTlkMjBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL21laS9jbGllbnQuYworKysgYi9kcml2ZXJzL21pc2MvbWVpL2NsaWVudC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tZWkuaD4KIApAQCAtNDE1LDYgKzQxNiwxMCBAQAogCWRldi0+cmVzZXRfY291bnQgPSAwOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmRldi0+cGRldi0+ZGV2KTsKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJwbTogYXV0b3N1c3BlbmRcbiIpOworCXBtX3J1bnRpbWVfYXV0b3N1c3BlbmQoJmRldi0+cGRldi0+ZGV2KTsKIH0KIAogLyoqCkBAIC00MjUsNiArNDMwLDEyIEBACiAgKi8KIGJvb2wgbWVpX2hidWZfYWNxdWlyZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQogeworCWlmIChtZWlfcGdfc3RhdGUoZGV2KSA9PSBNRUlfUEdfT04gfHwKKwkgICAgZGV2LT5wZ19ldmVudCA9PSBNRUlfUEdfRVZFTlRfV0FJVCkgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImRldmljZSBpcyBpbiBwZ1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAlpZiAoIWRldi0+aGJ1Zl9pc19yZWFkeSkgewogCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImhidWYgaXMgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNDYwLDkgKzQ3MSwxOCBAQAogCWlmIChjbC0+c3RhdGUgIT0gTUVJX0ZJTEVfRElTQ09OTkVDVElORykKIAkJcmV0dXJuIDA7CiAKKwlyZXRzID0gcG1fcnVudGltZV9nZXQoJmRldi0+cGRldi0+ZGV2KTsKKwlpZiAocmV0cyA8IDAgJiYgcmV0cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZkZXYtPnBkZXYtPmRldik7CisJCWNsX2VycihkZXYsIGNsLCAicnBtOiBnZXQgZmFpbGVkICVkXG4iLCByZXRzKTsKKwkJcmV0dXJuIHJldHM7CisJfQorCiAJY2IgPSBtZWlfaW9fY2JfaW5pdChjbCwgTlVMTCk7Ci0JaWYgKCFjYikKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFjYikgeworCQlyZXRzID0gLUVOT01FTTsKKwkJZ290byBmcmVlOworCX0KIAogCWNiLT5mb3BfdHlwZSA9IE1FSV9GT1BfQ0xPU0U7CiAJaWYgKG1laV9oYnVmX2FjcXVpcmUoZGV2KSkgewpAQCAtNDk0LDggKzUxNCw3IEBACiAJCQljbF9lcnIoZGV2LCBjbCwgIndyb25nIHN0YXR1cyBjbGllbnQgZGlzY29ubmVjdC5cbiIpOwogCiAJCWlmIChlcnIpCi0JCQljbF9kYmcoZGV2LCBjbCwgIndhaXQgZmFpbGVkIGRpc2Nvbm5lY3QgZXJyPSUwOHhcbiIsCi0JCQkJCWVycik7CisJCQljbF9kYmcoZGV2LCBjbCwgIndhaXQgZmFpbGVkIGRpc2Nvbm5lY3QgZXJyPSVkXG4iLCBlcnIpOwogCiAJCWNsX2VycihkZXYsIGNsLCAiZmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSBGVyBjbGllbnQuXG4iKTsKIAl9CkBAIC01MDMsNiArNTIyLDEwIEBACiAJbWVpX2lvX2xpc3RfZmx1c2goJmRldi0+Y3RybF9yZF9saXN0LCBjbCk7CiAJbWVpX2lvX2xpc3RfZmx1c2goJmRldi0+Y3RybF93cl9saXN0LCBjbCk7CiBmcmVlOgorCWNsX2RiZyhkZXYsIGNsLCAicnBtOiBhdXRvc3VzcGVuZFxuIik7CisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSgmZGV2LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZkZXYtPnBkZXYtPmRldik7CisKIAltZWlfaW9fY2JfZnJlZShjYik7CiAJcmV0dXJuIHJldHM7CiB9CkBAIC01NTcsNiArNTgwLDEzIEBACiAKIAlkZXYgPSBjbC0+ZGV2OwogCisJcmV0cyA9IHBtX3J1bnRpbWVfZ2V0KCZkZXYtPnBkZXYtPmRldik7CisJaWYgKHJldHMgPCAwICYmIHJldHMgIT0gLUVJTlBST0dSRVNTKSB7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmZGV2LT5wZGV2LT5kZXYpOworCQljbF9lcnIoZGV2LCBjbCwgInJwbTogZ2V0IGZhaWxlZCAlZFxuIiwgcmV0cyk7CisJCXJldHVybiByZXRzOworCX0KKwogCWNiID0gbWVpX2lvX2NiX2luaXQoY2wsIGZpbGUpOwogCWlmICghY2IpIHsKIAkJcmV0cyA9IC1FTk9NRU07CkBAIC01NjcsNiArNTk3LDcgQEAKIAogCS8qIHJ1biBoYnVmIGFjcXVpcmUgbGFzdCBzbyB3ZSBkb24ndCBoYXZlIHRvIHVuZG8gKi8KIAlpZiAoIW1laV9jbF9pc19vdGhlcl9jb25uZWN0aW5nKGNsKSAmJiBtZWlfaGJ1Zl9hY3F1aXJlKGRldikpIHsKKwkJY2wtPnN0YXRlID0gTUVJX0ZJTEVfQ09OTkVDVElORzsKIAkJaWYgKG1laV9oYm1fY2xfY29ubmVjdF9yZXEoZGV2LCBjbCkpIHsKIAkJCXJldHMgPSAtRU5PREVWOwogCQkJZ290byBvdXQ7CkBAIC01OTYsNiArNjI3LDEwIEBACiAJcmV0cyA9IGNsLT5zdGF0dXM7CiAKIG91dDoKKwljbF9kYmcoZGV2LCBjbCwgInJwbTogYXV0b3N1c3BlbmRcbiIpOworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmRldi0+cGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCgmZGV2LT5wZGV2LT5kZXYpOworCiAJbWVpX2lvX2NiX2ZyZWUoY2IpOwogCXJldHVybiByZXRzOwogfQpAQCAtNzEzLDIzICs3NDgsMzEgQEAKIAkJcmV0dXJuICAtRU5PVFRZOwogCX0KIAorCXJldHMgPSBwbV9ydW50aW1lX2dldCgmZGV2LT5wZGV2LT5kZXYpOworCWlmIChyZXRzIDwgMCAmJiByZXRzICE9IC1FSU5QUk9HUkVTUykgeworCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmRldi0+cGRldi0+ZGV2KTsKKwkJY2xfZXJyKGRldiwgY2wsICJycG06IGdldCBmYWlsZWQgJWRcbiIsIHJldHMpOworCQlyZXR1cm4gcmV0czsKKwl9CisKIAljYiA9IG1laV9pb19jYl9pbml0KGNsLCBOVUxMKTsKLQlpZiAoIWNiKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWNiKSB7CisJCXJldHMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBhbHdheXMgYWxsb2NhdGUgYXQgbGVhc3QgY2xpZW50IG1heCBtZXNzYWdlICovCiAJbGVuZ3RoID0gbWF4X3Qoc2l6ZV90LCBsZW5ndGgsIGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aCk7CiAJcmV0cyA9IG1laV9pb19jYl9hbGxvY19yZXNwX2J1ZihjYiwgbGVuZ3RoKTsKIAlpZiAocmV0cykKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCiAJY2ItPmZvcF90eXBlID0gTUVJX0ZPUF9SRUFEOwogCWlmIChtZWlfaGJ1Zl9hY3F1aXJlKGRldikpIHsKLQkJaWYgKG1laV9oYm1fY2xfZmxvd19jb250cm9sX3JlcShkZXYsIGNsKSkgewotCQkJY2xfZXJyKGRldiwgY2wsICJmbG93IGNvbnRyb2wgc2VuZCBmYWlsZWRcbiIpOwotCQkJcmV0cyA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlyZXRzID0gbWVpX2hibV9jbF9mbG93X2NvbnRyb2xfcmVxKGRldiwgY2wpOworCQlpZiAocmV0cyA8IDApCisJCQlnb3RvIG91dDsKKwogCQlsaXN0X2FkZF90YWlsKCZjYi0+bGlzdCwgJmRldi0+cmVhZF9saXN0Lmxpc3QpOwogCX0gZWxzZSB7CiAJCWxpc3RfYWRkX3RhaWwoJmNiLT5saXN0LCAmZGV2LT5jdHJsX3dyX2xpc3QubGlzdCk7CkBAIC03MzcsOSArNzgwLDE0IEBACiAKIAljbC0+cmVhZF9jYiA9IGNiOwogCi0JcmV0dXJuIHJldHM7Ci1lcnI6Ci0JbWVpX2lvX2NiX2ZyZWUoY2IpOworb3V0OgorCWNsX2RiZyhkZXYsIGNsLCAicnBtOiBhdXRvc3VzcGVuZFxuIik7CisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSgmZGV2LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZkZXYtPnBkZXYtPmRldik7CisKKwlpZiAocmV0cykKKwkJbWVpX2lvX2NiX2ZyZWUoY2IpOworCiAJcmV0dXJuIHJldHM7CiB9CiAKQEAgLTc3Niw3ICs4MjQsNyBAQAogCQlyZXR1cm4gcmV0czsKIAogCWlmIChyZXRzID09IDApIHsKLQkJY2xfZGJnKGRldiwgY2wsCSJObyBmbG93IGNvbnRyb2wgY3JlZGVudGlhbHM6IG5vdCBzZW5kaW5nLlxuIik7CisJCWNsX2RiZyhkZXYsIGNsLCAiTm8gZmxvdyBjb250cm9sIGNyZWRlbnRpYWxzOiBub3Qgc2VuZGluZy5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg1Niw2ICs5MDQsMTIgQEAKIAogCWNsX2RiZyhkZXYsIGNsLCAibWVpX2NsX3dyaXRlICVkXG4iLCBidWYtPnNpemUpOwogCisJcmV0cyA9IHBtX3J1bnRpbWVfZ2V0KCZkZXYtPnBkZXYtPmRldik7CisJaWYgKHJldHMgPCAwICYmIHJldHMgIT0gLUVJTlBST0dSRVNTKSB7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmZGV2LT5wZGV2LT5kZXYpOworCQljbF9lcnIoZGV2LCBjbCwgInJwbTogZ2V0IGZhaWxlZCAlZFxuIiwgcmV0cyk7CisJCXJldHVybiByZXRzOworCX0KIAogCWNiLT5mb3BfdHlwZSA9IE1FSV9GT1BfV1JJVEU7CiAJY2ItPmJ1Zl9pZHggPSAwOwpAQCAtOTI2LDYgKzk4MCwxMCBAQAogCiAJcmV0cyA9IGJ1Zi0+c2l6ZTsKIGVycjoKKwljbF9kYmcoZGV2LCBjbCwgInJwbTogYXV0b3N1c3BlbmRcbiIpOworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmRldi0+cGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCgmZGV2LT5wZGV2LT5kZXYpOworCiAJcmV0dXJuIHJldHM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaGJtLmMgYi9kcml2ZXJzL21pc2MvbWVpL2hibS5jCmluZGV4IDQ5NjAyODguLjgwNDEwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvaGJtLmMKKysrIGIvZHJpdmVycy9taXNjL21laS9oYm0uYwpAQCAtMTQsMTAgKzE0LDEyIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlICJtZWlfZGV2LmgiCiAjaW5jbHVkZSAiaGJtLmgiCkBAIC01OCw2ICs2MCwzNCBAQAogfQogCiAvKioKKyAqIG1laV9oYm1faWRsZSAtIHNldCBoYm0gdG8gaWRsZSBzdGF0ZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3ZvaWQgbWVpX2hibV9pZGxlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJZGV2LT5pbml0X2NsaWVudHNfdGltZXIgPSAwOworCWRldi0+aGJtX3N0YXRlID0gTUVJX0hCTV9JRExFOworfQorCisvKioKKyAqIG1laV9oYm1fcmVzZXQgLSByZXNldCBoYm0gY291bnRlcnMgYW5kIGJvb2sga2VlcGluZyBkYXRhIHN0cnVjdHVycworICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3ZvaWQgbWVpX2hibV9yZXNldChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCWRldi0+bWVfY2xpZW50c19udW0gPSAwOworCWRldi0+bWVfY2xpZW50X3ByZXNlbnRhdGlvbl9udW0gPSAwOworCWRldi0+bWVfY2xpZW50X2luZGV4ID0gMDsKKworCWtmcmVlKGRldi0+bWVfY2xpZW50cyk7CisJZGV2LT5tZV9jbGllbnRzID0gTlVMTDsKKworCW1laV9oYm1faWRsZShkZXYpOworfQorCisvKioKICAqIG1laV9oYm1fbWVfY2xfYWxsb2NhdGUgLSBhbGxvY2F0ZXMgc3RvcmFnZSBmb3IgbWUgY2xpZW50cwogICoKICAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC02OSw5ICs5OSw3IEBACiAJc3RydWN0IG1laV9tZV9jbGllbnQgKmNsaWVudHM7CiAJaW50IGI7CiAKLQlkZXYtPm1lX2NsaWVudHNfbnVtID0gMDsKLQlkZXYtPm1lX2NsaWVudF9wcmVzZW50YXRpb25fbnVtID0gMDsKLQlkZXYtPm1lX2NsaWVudF9pbmRleCA9IDA7CisJbWVpX2hibV9yZXNldChkZXYpOwogCiAJLyogY291bnQgaG93IG1hbnkgTUUgY2xpZW50cyB3ZSBoYXZlICovCiAJZm9yX2VhY2hfc2V0X2JpdChiLCBkZXYtPm1lX2NsaWVudHNfbWFwLCBNRUlfQ0xJRU5UU19NQVgpCkBAIC04MCw5ICsxMDgsNiBAQAogCWlmIChkZXYtPm1lX2NsaWVudHNfbnVtID09IDApCiAJCXJldHVybiAwOwogCi0Ja2ZyZWUoZGV2LT5tZV9jbGllbnRzKTsKLQlkZXYtPm1lX2NsaWVudHMgPSBOVUxMOwotCiAJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJtZW1vcnkgYWxsb2NhdGlvbiBmb3IgTUUgY2xpZW50cyBzaXplPSVsZC5cbiIsCiAJCWRldi0+bWVfY2xpZW50c19udW0gKiBzaXplb2Yoc3RydWN0IG1laV9tZV9jbGllbnQpKTsKIAkvKiBhbGxvY2F0ZSBzdG9yYWdlIGZvciBNRSBjbGllbnRzIHJlcHJlc2VudGF0aW9uICovCkBAIC0xMzMsMTcgKzE1OCw2IEBACiB9CiAKIAotLyoqCi0gKiBtZWlfaGJtX2lkbGUgLSBzZXQgaGJtIHRvIGlkbGUgc3RhdGUKLSAqCi0gKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQotICovCi12b2lkIG1laV9oYm1faWRsZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQotewotCWRldi0+aW5pdF9jbGllbnRzX3RpbWVyID0gMDsKLQlkZXYtPmhibV9zdGF0ZSA9IE1FSV9IQk1fSURMRTsKLX0KLQogaW50IG1laV9oYm1fc3RhcnRfd2FpdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CkBAIC0yODksNiArMzAzLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBtZWlfaGJtX3BnIC0gc2VuZHMgcGcgY29tbWFuZAorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGdfY21kOiB0aGUgcGcgY29tbWFuZCBjb2RlCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU8gb24gd3JpdGUgZmFpbHVyZQorICovCitpbnQgbWVpX2hibV9wZyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCB1OCBwZ19jbWQpCit7CisJc3RydWN0IG1laV9tc2dfaGRyICptZWlfaGRyID0gJmRldi0+d3JfbXNnLmhkcjsKKwlzdHJ1Y3QgaGJtX3Bvd2VyX2dhdGUgKnJlcTsKKwljb25zdCBzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBoYm1fcG93ZXJfZ2F0ZSk7CisJaW50IHJldDsKKworCW1laV9oYm1faGRyKG1laV9oZHIsIGxlbik7CisKKwlyZXEgPSAoc3RydWN0IGhibV9wb3dlcl9nYXRlICopZGV2LT53cl9tc2cuZGF0YTsKKwltZW1zZXQocmVxLCAwLCBsZW4pOworCXJlcS0+aGJtX2NtZCA9IHBnX2NtZDsKKworCXJldCA9IG1laV93cml0ZV9tZXNzYWdlKGRldiwgbWVpX2hkciwgZGV2LT53cl9tc2cuZGF0YSk7CisJaWYgKHJldCkKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJwb3dlciBnYXRlIGNvbW1hbmQgd3JpdGUgZmFpbGVkLlxuIik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1laV9oYm1fcGcpOworCiAvKioKICAqIG1laV9oYm1fc3RvcF9yZXEgLSBzZW5kIHN0b3AgcmVxdWVzdCBtZXNzYWdlCiAgKgpAQCAtNzAxLDYgKzc0MywyNyBAQAogCQltZWlfaGJtX2NsX2Zsb3dfY29udHJvbF9yZXMoZGV2LCBmbG93X2NvbnRyb2wpOwogCQlicmVhazsKIAorCWNhc2UgTUVJX1BHX0lTT0xBVElPTl9FTlRSWV9SRVNfQ01EOgorCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInBvd2VyIGdhdGUgaXNvbGF0aW9uIGVudHJ5IHJlc3BvbnNlIHJlY2VpdmVkXG4iKTsKKwkJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9SRUNFSVZFRDsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmRldi0+d2FpdF9wZykpCisJCQl3YWtlX3VwKCZkZXYtPndhaXRfcGcpOworCQlicmVhazsKKworCWNhc2UgTUVJX1BHX0lTT0xBVElPTl9FWElUX1JFUV9DTUQ6CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicG93ZXIgZ2F0ZSBpc29sYXRpb24gZXhpdCByZXF1ZXN0IHJlY2VpdmVkXG4iKTsKKwkJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9SRUNFSVZFRDsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmRldi0+d2FpdF9wZykpCisJCQl3YWtlX3VwKCZkZXYtPndhaXRfcGcpOworCQllbHNlCisJCQkvKgorCQkJKiBJZiB0aGUgZHJpdmVyIGlzIG5vdCB3YWl0aW5nIG9uIHRoaXMgdGhlbgorCQkJKiB0aGlzIGlzIEhXIGluaXRpYXRlZCBleGl0IGZyb20gUEcuCisJCQkqIFN0YXJ0IHJ1bnRpbWUgcG0gcmVzdW1lIHNlcXVlbmNlIHRvIGV4aXQgZnJvbSBQRy4KKwkJCSovCisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5wZGV2LT5kZXYpOworCQlicmVhazsKKwogCWNhc2UgSE9TVF9DTElFTlRfUFJPUEVSVElFU19SRVNfQ01EOgogCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImhibTogcHJvcGVydGllcyByZXNwb25zZTogbWVzc2FnZSByZWNlaXZlZC5cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL2hibS5oIGIvZHJpdmVycy9taXNjL21laS9oYm0uaAppbmRleCAyMGU4NzgyLi42ODNlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL2hibS5oCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvaGJtLmgKQEAgLTUwLDYgKzUwLDcgQEAKIH0KIAogdm9pZCBtZWlfaGJtX2lkbGUoc3RydWN0IG1laV9kZXZpY2UgKmRldik7Cit2b2lkIG1laV9oYm1fcmVzZXQoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiBpbnQgbWVpX2hibV9zdGFydF9yZXEoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiBpbnQgbWVpX2hibV9zdGFydF93YWl0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOwogaW50IG1laV9oYm1fY2xfZmxvd19jb250cm9sX3JlcShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CkBAIC01Nyw2ICs1OCw3IEBACiBpbnQgbWVpX2hibV9jbF9kaXNjb25uZWN0X3JzcChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CiBpbnQgbWVpX2hibV9jbF9jb25uZWN0X3JlcShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CiBib29sIG1laV9oYm1fdmVyc2lvbl9pc19zdXBwb3J0ZWQoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CitpbnQgbWVpX2hibV9wZyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCB1OCBwZ19jbWQpOwogCiAjZW5kaWYgLyogX01FSV9IQk1fSF8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL21laS9ody1tZS1yZWdzLmggYi9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLXJlZ3MuaAppbmRleCBjYWJjMDQzLi5hNzg1NmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLXJlZ3MuaAorKysgYi9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLXJlZ3MuaApAQCAtMTMzLDYgKzEzMyw4IEBACiAjZGVmaW5lIE1FX0NCX1JXICAgOAogLyogTUVfQ1NSX0hBIC0gTUUgQ29udHJvbCBTdGF0dXMgSG9zdCBBY2Nlc3MgcmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KICNkZWZpbmUgTUVfQ1NSX0hBICAweEMKKy8qIEhfSEdDX0NTUiAtIFBHSSByZWdpc3RlciAqLworI2RlZmluZSBIX0hQR19DU1IgIDB4MTAKIAogCiAvKiByZWdpc3RlciBiaXRzIG9mIEhfQ1NSIChIb3N0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyKSAqLwpAQCAtMTYyLDYgKzE2NCw4IEBACiAjZGVmaW5lIE1FX0NCV1BfSFJBICAgICAgIDB4MDBGRjAwMDAKIC8qIE1FIENCIFJlYWQgUG9pbnRlciBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfQ0JSUCAqLwogI2RlZmluZSBNRV9DQlJQX0hSQSAgICAgICAweDAwMDBGRjAwCisvKiBNRSBQb3dlciBHYXRlIElzb2xhdGlvbiBDYXBhYmlsaXR5IEhSQSAgLSBob3N0IHJlYWR5IG9ubHkgYWNjZXNzICovCisjZGVmaW5lIE1FX1BHSUNfSFJBICAgICAgIDB4MDAwMDAwNDAKIC8qIE1FIFJlc2V0IEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9SU1QgKi8KICNkZWZpbmUgTUVfUlNUX0hSQSAgICAgICAgMHgwMDAwMDAxMAogLyogTUUgUmVhZHkgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX1JEWSAqLwpAQCAtMTczLDQgKzE3Nyw5IEBACiAvKiBNRSBJbnRlcnJ1cHQgRW5hYmxlIEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9JRSAqLwogI2RlZmluZSBNRV9JRV9IUkEgICAgICAgICAweDAwMDAwMDAxCiAKKworLyogcmVnaXN0ZXIgYml0cyAtIEhfSFBHX0NTUiAqLworI2RlZmluZSBIX0hQR19DU1JfUEdJSEVYUiAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhfSFBHX0NTUl9QR0kgICAgICAgICAgIDB4MDAwMDAwMDIKKwogI2VuZGlmIC8qIF9NRUlfSFdfTUVJX1JFR1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuYyBiL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuYwppbmRleCA4ZGJkYWFlLi42YTJkMjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLmMKKysrIGIvZHJpdmVycy9taXNjL21laS9ody1tZS5jCkBAIC0xMDksMTAgKzEwOSwyNyBAQAogICovCiBzdGF0aWMgdm9pZCBtZWlfbWVfaHdfY29uZmlnKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG1laV9tZV9odyAqaHcgPSB0b19tZV9odyhkZXYpOwogCXUzMiBoY3NyID0gbWVpX2hjc3JfcmVhZCh0b19tZV9odyhkZXYpKTsKIAkvKiBEb2Vzbid0IGNoYW5nZSBpbiBydW50aW1lICovCiAJZGV2LT5oYnVmX2RlcHRoID0gKGhjc3IgJiBIX0NCRCkgPj4gMjQ7CisKKwlody0+cGdfc3RhdGUgPSBNRUlfUEdfT0ZGOwogfQorCisvKioKKyAqIG1laV9tZV9wZ19zdGF0ZSAgLSB0cmFuc2xhdGUgaW50ZXJuYWwgcGcgc3RhdGUKKyAqICAgdG8gdGhlIG1laSBwb3dlciBnYXRpbmcgc3RhdGUKKyAqCisgKiBAaHcgLSAgbWUgaGFyZHdhcmUKKyAqIHJldHVybnM6IE1FSV9QR19PRkYgaWYgYWxpdmVuZXNzIGlzIG9uIGFuZCBNRUlfUEdfT04gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBtZWlfcGdfc3RhdGUgbWVpX21lX3BnX3N0YXRlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1laV9tZV9odyAqaHcgPSB0b19tZV9odyhkZXYpOworCXJldHVybiBody0+cGdfc3RhdGU7Cit9CisKIC8qKgogICogbWVpX2NsZWFyX2ludGVycnVwdHMgLSBjbGVhciBhbmQgc3RvcCBpbnRlcnJ1cHRzCiAgKgpAQCAtMTY0LDYgKzE4MSw5IEBACiAJaGNzciB8PSBIX0lHOwogCWhjc3IgJj0gfkhfUlNUOwogCW1laV9oY3NyX3NldChodywgaGNzcik7CisKKwkvKiBjb21wbGV0ZSB0aGlzIHdyaXRlIGJlZm9yZSB3ZSBzZXQgaG9zdCByZWFkeSBvbiBhbm90aGVyIENQVSAqLworCW1taW93YigpOwogfQogLyoqCiAgKiBtZWlfbWVfaHdfcmVzZXQgLSByZXNldHMgZncgdmlhIG1laSBjc3IgcmVnaXN0ZXIuCkBAIC0xODMsOCArMjAzLDIxIEBACiAJZWxzZQogCQloY3NyICY9IH5IX0lFOwogCisJZGV2LT5yZWN2ZF9od19yZWFkeSA9IGZhbHNlOwogCW1laV9tZV9yZWdfd3JpdGUoaHcsIEhfQ1NSLCBoY3NyKTsKIAorCS8qCisJICogSG9zdCByZWFkcyB0aGUgSF9DU1Igb25jZSB0byBlbnN1cmUgdGhhdCB0aGUKKwkgKiBwb3N0ZWQgd3JpdGUgdG8gSF9DU1IgY29tcGxldGVzLgorCSAqLworCWhjc3IgPSBtZWlfaGNzcl9yZWFkKGh3KTsKKworCWlmICgoaGNzciAmIEhfUlNUKSA9PSAwKQorCQlkZXZfd2FybigmZGV2LT5wZGV2LT5kZXYsICJIX1JTVCBpcyBub3Qgc2V0ID0gMHglMDhYIiwgaGNzcik7CisKKwlpZiAoKGhjc3IgJiBIX1JEWSkgPT0gSF9SRFkpCisJCWRldl93YXJuKCZkZXYtPnBkZXYtPmRldiwgIkhfUkRZIGlzIG5vdCBjbGVhcmVkIDB4JTA4WCIsIGhjc3IpOworCiAJaWYgKGludHJfZW5hYmxlID09IGZhbHNlKQogCQltZWlfbWVfaHdfcmVzZXRfcmVsZWFzZShkZXYpOwogCkBAIC0yMDEsNiArMjM0LDcgQEAKIHN0YXRpYyB2b2lkIG1laV9tZV9ob3N0X3NldF9yZWFkeShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtZWlfbWVfaHcgKmh3ID0gdG9fbWVfaHcoZGV2KTsKKwlody0+aG9zdF9od19zdGF0ZSA9IG1laV9oY3NyX3JlYWQoaHcpOwogCWh3LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUUgfCBIX0lHIHwgSF9SRFk7CiAJbWVpX2hjc3Jfc2V0KGh3LCBody0+aG9zdF9od19zdGF0ZSk7CiB9CkBAIC0yMzMsMTAgKzI2Nyw3IEBACiBzdGF0aWMgaW50IG1laV9tZV9od19yZWFkeV93YWl0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGVycjsKLQlpZiAobWVpX21lX2h3X2lzX3JlYWR5KGRldikpCi0JCXJldHVybiAwOwogCi0JZGV2LT5yZWN2ZF9od19yZWFkeSA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CiAJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53YWl0X2h3X3JlYWR5LAogCQkJZGV2LT5yZWN2ZF9od19yZWFkeSwKQEAgLTQzMSw2ICs0NjIsMTQ0IEBACiB9CiAKIC8qKgorICogbWVpX21lX3BnX2VudGVyIC0gd3JpdGUgcGcgZW50ZXIgcmVnaXN0ZXIgdG8gbWVpIGRldmljZS4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBtZWlfbWVfcGdfZW50ZXIoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWVpX21lX2h3ICpodyA9IHRvX21lX2h3KGRldik7CisJdTMyIHJlZyA9IG1laV9tZV9yZWdfcmVhZChodywgSF9IUEdfQ1NSKTsKKwlyZWcgfD0gSF9IUEdfQ1NSX1BHSTsKKwltZWlfbWVfcmVnX3dyaXRlKGh3LCBIX0hQR19DU1IsIHJlZyk7Cit9CisKKy8qKgorICogbWVpX21lX3BnX2VudGVyIC0gd3JpdGUgcGcgZW50ZXIgcmVnaXN0ZXIgdG8gbWVpIGRldmljZS4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBtZWlfbWVfcGdfZXhpdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZWlfbWVfaHcgKmh3ID0gdG9fbWVfaHcoZGV2KTsKKwl1MzIgcmVnID0gbWVpX21lX3JlZ19yZWFkKGh3LCBIX0hQR19DU1IpOworCisJV0FSTighKHJlZyAmIEhfSFBHX0NTUl9QR0kpLCAiUEdJIGlzIG5vdCBzZXRcbiIpOworCisJcmVnIHw9IEhfSFBHX0NTUl9QR0lIRVhSOworCW1laV9tZV9yZWdfd3JpdGUoaHcsIEhfSFBHX0NTUiwgcmVnKTsKK30KKworLyoqCisgKiBtZWlfbWVfcGdfc2V0X3N5bmMgLSBwZXJmb3JtIHBnIGVudHJ5IHByb2NlZHVyZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IG1laV9tZV9wZ19zZXRfc3luYyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZWlfbWVfaHcgKmh3ID0gdG9fbWVfaHcoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtZWlfc2Vjc190b19qaWZmaWVzKE1FSV9QR0lfVElNRU9VVCk7CisJaW50IHJldDsKKworCWRldi0+cGdfZXZlbnQgPSBNRUlfUEdfRVZFTlRfV0FJVDsKKworCXJldCA9IG1laV9oYm1fcGcoZGV2LCBNRUlfUEdfSVNPTEFUSU9OX0VOVFJZX1JFUV9DTUQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPndhaXRfcGcsCisJCWRldi0+cGdfZXZlbnQgPT0gTUVJX1BHX0VWRU5UX1JFQ0VJVkVELCB0aW1lb3V0KTsKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWlmIChkZXYtPnBnX2V2ZW50ID09IE1FSV9QR19FVkVOVF9SRUNFSVZFRCkgeworCQltZWlfbWVfcGdfZW50ZXIoZGV2KTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAtRVRJTUU7CisJfQorCisJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9JRExFOworCWh3LT5wZ19zdGF0ZSA9IE1FSV9QR19PTjsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVpX21lX3BnX3Vuc2V0X3N5bmMgLSBwZXJmb3JtIHBnIGV4aXQgcHJvY2VkdXJlCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgbWVpX21lX3BnX3Vuc2V0X3N5bmMoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWVpX21lX2h3ICpodyA9IHRvX21lX2h3KGRldik7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbWVpX3NlY3NfdG9famlmZmllcyhNRUlfUEdJX1RJTUVPVVQpOworCWludCByZXQ7CisKKwlpZiAoZGV2LT5wZ19ldmVudCA9PSBNRUlfUEdfRVZFTlRfUkVDRUlWRUQpCisJCWdvdG8gcmVwbHk7CisKKwlkZXYtPnBnX2V2ZW50ID0gTUVJX1BHX0VWRU5UX1dBSVQ7CisKKwltZWlfbWVfcGdfZXhpdChkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3BnLAorCQlkZXYtPnBnX2V2ZW50ID09IE1FSV9QR19FVkVOVF9SRUNFSVZFRCwgdGltZW91dCk7CisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKK3JlcGx5OgorCWlmIChkZXYtPnBnX2V2ZW50ID09IE1FSV9QR19FVkVOVF9SRUNFSVZFRCkKKwkJcmV0ID0gbWVpX2hibV9wZyhkZXYsIE1FSV9QR19JU09MQVRJT05fRVhJVF9SRVNfQ01EKTsKKwllbHNlCisJCXJldCA9IC1FVElNRTsKKworCWRldi0+cGdfZXZlbnQgPSBNRUlfUEdfRVZFTlRfSURMRTsKKwlody0+cGdfc3RhdGUgPSBNRUlfUEdfT0ZGOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBtZWlfbWVfcGdfaXNfZW5hYmxlZCAtIGRldGVjdCBpZiBQRyBpcyBzdXBwb3J0ZWQgYnkgSFcKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnM6IHRydWUgaXMgcGcgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGJvb2wgbWVpX21lX3BnX2lzX2VuYWJsZWQoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWVpX21lX2h3ICpodyA9IHRvX21lX2h3KGRldik7CisJdTMyIHJlZyA9IG1laV9tZV9yZWdfcmVhZChodywgTUVfQ1NSX0hBKTsKKworCWlmICgocmVnICYgTUVfUEdJQ19IUkEpID09IDApCisJCWdvdG8gbm90c3VwcG9ydGVkOworCisJaWYgKGRldi0+dmVyc2lvbi5tYWpvcl92ZXJzaW9uIDwgSEJNX01BSk9SX1ZFUlNJT05fUEdJKQorCQlnb3RvIG5vdHN1cHBvcnRlZDsKKworCWlmIChkZXYtPnZlcnNpb24ubWFqb3JfdmVyc2lvbiA9PSBIQk1fTUFKT1JfVkVSU0lPTl9QR0kgJiYKKwkgICAgZGV2LT52ZXJzaW9uLm1pbm9yX3ZlcnNpb24gPCBIQk1fTUlOT1JfVkVSU0lPTl9QR0kpCisJCWdvdG8gbm90c3VwcG9ydGVkOworCisJcmV0dXJuIHRydWU7CisKK25vdHN1cHBvcnRlZDoKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInBnOiBub3Qgc3VwcG9ydGVkOiBIR1AgPSAlZCBoYm0gdmVyc2lvbiAlZC4lZCA/PSAlZC4lZFxuIiwKKwkJISEocmVnICYgTUVfUEdJQ19IUkEpLAorCQlkZXYtPnZlcnNpb24ubWFqb3JfdmVyc2lvbiwKKwkJZGV2LT52ZXJzaW9uLm1pbm9yX3ZlcnNpb24sCisJCUhCTV9NQUpPUl9WRVJTSU9OX1BHSSwKKwkJSEJNX01JTk9SX1ZFUlNJT05fUEdJKTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoqCiAgKiBtZWlfbWVfaXJxX3F1aWNrX2hhbmRsZXIgLSBUaGUgSVNSIG9mIHRoZSBNRUkgZGV2aWNlCiAgKgogICogQGlycTogVGhlIGlycSBudW1iZXIKQEAgLTQ5MSwxNCArNjYwLDEzIEBACiAJLyogIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3RhcnQgdGhlIGRldiAqLwogCWlmICghbWVpX2hvc3RfaXNfcmVhZHkoZGV2KSkgewogCQlpZiAobWVpX2h3X2lzX3JlYWR5KGRldikpIHsKKwkJCW1laV9tZV9od19yZXNldF9yZWxlYXNlKGRldik7CiAJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIndlIG5lZWQgdG8gc3RhcnQgdGhlIGRldi5cbiIpOwogCiAJCQlkZXYtPnJlY3ZkX2h3X3JlYWR5ID0gdHJ1ZTsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2h3X3JlYWR5KTsKIAkJfSBlbHNlIHsKLQotCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJSZXNldCBDb21wbGV0ZWQuXG4iKTsKLQkJCW1laV9tZV9od19yZXNldF9yZWxlYXNlKGRldik7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIlNwdXJpb3VzIEludGVycnVwdFxuIik7CiAJCX0KIAkJZ290byBlbmQ7CiAJfQpAQCAtNTI0LDkgKzY5MiwxNSBAQAogCiAJZGV2LT5oYnVmX2lzX3JlYWR5ID0gbWVpX2hidWZfaXNfcmVhZHkoZGV2KTsKIAotCXJldHMgPSBtZWlfaXJxX3dyaXRlX2hhbmRsZXIoZGV2LCAmY29tcGxldGVfbGlzdCk7Ci0KLQlkZXYtPmhidWZfaXNfcmVhZHkgPSBtZWlfaGJ1Zl9pc19yZWFkeShkZXYpOworCS8qCisJICogRHVyaW5nIFBHIGhhbmRzaGFrZSBvbmx5IGFsbG93ZWQgd3JpdGUgaXMgdGhlIHJlcGxheSB0byB0aGUKKwkgKiBQRyBleGl0IG1lc3NhZ2UsIHNvIGJsb2NrIGNhbGxpbmcgd3JpdGUgZnVuY3Rpb24KKwkgKiBpZiB0aGUgcGcgc3RhdGUgaXMgbm90IGlkbGUKKwkgKi8KKwlpZiAoZGV2LT5wZ19ldmVudCA9PSBNRUlfUEdfRVZFTlRfSURMRSkgeworCQlyZXRzID0gbWVpX2lycV93cml0ZV9oYW5kbGVyKGRldiwgJmNvbXBsZXRlX2xpc3QpOworCQlkZXYtPmhidWZfaXNfcmVhZHkgPSBtZWlfaGJ1Zl9pc19yZWFkeShkZXYpOworCX0KIAogCW1laV9pcnFfY29tcGxfaGFuZGxlcihkZXYsICZjb21wbGV0ZV9saXN0KTsKIApAQCAtNTM1LDggKzcwOSw2NSBAQAogCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQorCisvKioKKyAqIG1laV9tZV9md19zdGF0dXMgLSByZXRyaWV2ZSBmdyBzdGF0dXMgZnJvbSB0aGUgcGNpIGNvbmZpZyBzcGFjZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZndfc3RhdHVzOiBmdyBzdGF0dXMgcmVnaXN0ZXJzIHN0b3JhZ2UKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IG1laV9tZV9md19zdGF0dXMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgbWVpX2Z3X3N0YXR1cyAqZndfc3RhdHVzKQoreworCWNvbnN0IHUzMiBwY2lfY2ZnX3JlZ1tdID0ge1BDSV9DRkdfSEZTXzEsIFBDSV9DRkdfSEZTXzJ9OworCWludCBpOworCisJaWYgKCFmd19zdGF0dXMpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkZXYtPnBkZXYtPmRldmljZSkgeworCWNhc2UgTUVJX0RFVl9JRF9JQlhQS18xOgorCWNhc2UgTUVJX0RFVl9JRF9JQlhQS18yOgorCWNhc2UgTUVJX0RFVl9JRF9DUFRfMToKKwljYXNlIE1FSV9ERVZfSURfUEJHXzE6CisJY2FzZSBNRUlfREVWX0lEX1BQVF8xOgorCWNhc2UgTUVJX0RFVl9JRF9QUFRfMjoKKwljYXNlIE1FSV9ERVZfSURfUFBUXzM6CisJY2FzZSBNRUlfREVWX0lEX0xQVF9IOgorCWNhc2UgTUVJX0RFVl9JRF9MUFRfVzoKKwljYXNlIE1FSV9ERVZfSURfTFBUX0xQOgorCWNhc2UgTUVJX0RFVl9JRF9MUFRfSFI6CisJY2FzZSBNRUlfREVWX0lEX1dQVF9MUDoKKwkJZndfc3RhdHVzLT5jb3VudCA9IDI7CisJCWJyZWFrOworCWNhc2UgTUVJX0RFVl9JRF9JQ0gxMF8xOgorCWNhc2UgTUVJX0RFVl9JRF9JQ0gxMF8yOgorCWNhc2UgTUVJX0RFVl9JRF9JQ0gxMF8zOgorCWNhc2UgTUVJX0RFVl9JRF9JQ0gxMF80OgorCQlmd19zdGF0dXMtPmNvdW50ID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZndfc3RhdHVzLT5jb3VudCA9IDA7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmd19zdGF0dXMtPmNvdW50ICYmIGkgPCBNRUlfRldfU1RBVFVTX01BWDsgaSsrKSB7CisJCWludCByZXQ7CisJCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsCisJCQkJcGNpX2NmZ19yZWdbaV0sICZmd19zdGF0dXMtPnN0YXR1c1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtZWlfaHdfb3BzIG1laV9tZV9od19vcHMgPSB7CiAKKwkucGdfc3RhdGUgID0gbWVpX21lX3BnX3N0YXRlLAorCisJLmZ3X3N0YXR1cyA9IG1laV9tZV9md19zdGF0dXMsCiAJLmhvc3RfaXNfcmVhZHkgPSBtZWlfbWVfaG9zdF9pc19yZWFkeSwKIAogCS5od19pc19yZWFkeSA9IG1laV9tZV9od19pc19yZWFkeSwKQEAgLTU0NCw2ICs3NzUsOCBAQAogCS5od19jb25maWcgPSBtZWlfbWVfaHdfY29uZmlnLAogCS5od19zdGFydCA9IG1laV9tZV9od19zdGFydCwKIAorCS5wZ19pc19lbmFibGVkID0gbWVpX21lX3BnX2lzX2VuYWJsZWQsCisKIAkuaW50cl9jbGVhciA9IG1laV9tZV9pbnRyX2NsZWFyLAogCS5pbnRyX2VuYWJsZSA9IG1laV9tZV9pbnRyX2VuYWJsZSwKIAkuaW50cl9kaXNhYmxlID0gbWVpX21lX2ludHJfZGlzYWJsZSwKQEAgLTU1OSwxNCArNzkyLDgxIEBACiAJLnJlYWQgPSBtZWlfbWVfcmVhZF9zbG90cwogfTsKIAorc3RhdGljIGJvb2wgbWVpX21lX2Z3X3R5cGVfbm0oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTMyIHJlZzsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0NGR19IRlNfMiwgJnJlZyk7CisJLyogbWFrZSBzdXJlIHRoYXQgYml0IDkgKE5NKSBpcyB1cCBhbmQgYml0IDEwIChETSkgaXMgZG93biAqLworCXJldHVybiAocmVnICYgMHg2MDApID09IDB4MjAwOworfQorCisjZGVmaW5lIE1FSV9DRkdfRldfTk0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLnF1aXJrX3Byb2JlID0gbWVpX21lX2Z3X3R5cGVfbm0KKworc3RhdGljIGJvb2wgbWVpX21lX2Z3X3R5cGVfc3BzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXUzMiByZWc7CisJLyogUmVhZCBNRSBGVyBTdGF0dXMgY2hlY2sgZm9yIFNQUyBGaXJtd2FyZSAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQ0ZHX0hGU18xLCAmcmVnKTsKKwkvKiBpZiBiaXRzIFsxOToxNl0gPSAxNSwgcnVubmluZyBTUFMgRmlybXdhcmUgKi8KKwlyZXR1cm4gKHJlZyAmIDB4ZjAwMDApID09IDB4ZjAwMDA7Cit9CisKKyNkZWZpbmUgTUVJX0NGR19GV19TUFMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLnF1aXJrX3Byb2JlID0gbWVpX21lX2Z3X3R5cGVfc3BzCisKKworI2RlZmluZSBNRUlfQ0ZHX0xFR0FDWV9IRlMgICAgICAgICAgICAgICAgICAgICAgXAorCS5md19zdGF0dXMuY291bnQgPSAwCisKKyNkZWZpbmUgTUVJX0NGR19JQ0hfSEZTICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5md19zdGF0dXMuY291bnQgPSAxLCAgICAgICAgICAgICAgICAgICBcCisJLmZ3X3N0YXR1cy5zdGF0dXNbMF0gPSBQQ0lfQ0ZHX0hGU18xCisKKyNkZWZpbmUgTUVJX0NGR19QQ0hfSEZTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZndfc3RhdHVzLmNvdW50ID0gMiwgICAgICAgICAgICAgICAgICAgXAorCS5md19zdGF0dXMuc3RhdHVzWzBdID0gUENJX0NGR19IRlNfMSwgICBcCisJLmZ3X3N0YXR1cy5zdGF0dXNbMV0gPSBQQ0lfQ0ZHX0hGU18yCisKKworLyogSUNIIExlZ2FjeSBkZXZpY2VzICovCitjb25zdCBzdHJ1Y3QgbWVpX2NmZyBtZWlfbWVfbGVnYWN5X2NmZyA9IHsKKwlNRUlfQ0ZHX0xFR0FDWV9IRlMsCit9OworCisvKiBJQ0ggZGV2aWNlcyAqLworY29uc3Qgc3RydWN0IG1laV9jZmcgbWVpX21lX2ljaF9jZmcgPSB7CisJTUVJX0NGR19JQ0hfSEZTLAorfTsKKworLyogUENIIGRldmljZXMgKi8KK2NvbnN0IHN0cnVjdCBtZWlfY2ZnIG1laV9tZV9wY2hfY2ZnID0geworCU1FSV9DRkdfUENIX0hGUywKK307CisKKworLyogUENIIENvdWdhciBQb2ludCBhbmQgUGF0c2J1cmcgd2l0aCBxdWlyayBmb3IgTm9kZSBNYW5hZ2VyIGV4Y2x1c2lvbiAqLworY29uc3Qgc3RydWN0IG1laV9jZmcgbWVpX21lX3BjaF9jcHRfcGJnX2NmZyA9IHsKKwlNRUlfQ0ZHX1BDSF9IRlMsCisJTUVJX0NGR19GV19OTSwKK307CisKKy8qIFBDSCBMeW54IFBvaW50IHdpdGggcXVpcmsgZm9yIFNQUyBGaXJtd2FyZSBleGNsdXNpb24gKi8KK2NvbnN0IHN0cnVjdCBtZWlfY2ZnIG1laV9tZV9scHRfY2ZnID0geworCU1FSV9DRkdfUENIX0hGUywKKwlNRUlfQ0ZHX0ZXX1NQUywKK307CisKIC8qKgogICogbWVpX21lX2Rldl9pbml0IC0gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgbWVpIGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiBAcGRldjogVGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2ZnOiBwZXIgZGV2aWNlIGdlbmVyYXRpb24gY29uZmlnCiAgKgogICogcmV0dXJucyBUaGUgbWVpX2RldmljZV9kZXZpY2UgcG9pbnRlciBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKi8KLXN0cnVjdCBtZWlfZGV2aWNlICptZWlfbWVfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdHJ1Y3QgbWVpX2RldmljZSAqbWVpX21lX2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBtZWlfY2ZnICpjZmcpCiB7CiAJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKIApAQCAtNTc1LDcgKzg3NSw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCi0JbWVpX2RldmljZV9pbml0KGRldik7CisJbWVpX2RldmljZV9pbml0KGRldiwgY2ZnKTsKIAogCWRldi0+b3BzID0gJm1laV9tZV9od19vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuaCBiL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuaAppbmRleCA4OTNkNTExLi4xMmIwZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLmgKKysrIGIvZHJpdmVycy9taXNjL21laS9ody1tZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSAibWVpX2Rldi5oIgogI2luY2x1ZGUgImNsaWVudC5oIgogCisjZGVmaW5lIE1FSV9NRV9SUE1fVElNRU9VVCAgICA1MDAgLyogbXMgKi8KKwogc3RydWN0IG1laV9tZV9odyB7CiAJdm9pZCBfX2lvbWVtICptZW1fYWRkcjsKIAkvKgpAQCAtMzEsMTEgKzMzLDIyIEBACiAJICovCiAJdTMyIGhvc3RfaHdfc3RhdGU7CiAJdTMyIG1lX2h3X3N0YXRlOworCWVudW0gbWVpX3BnX3N0YXRlIHBnX3N0YXRlOwogfTsKIAogI2RlZmluZSB0b19tZV9odyhkZXYpIChzdHJ1Y3QgbWVpX21lX2h3ICopKChkZXYpLT5odykKIAotc3RydWN0IG1laV9kZXZpY2UgKm1laV9tZV9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitleHRlcm4gY29uc3Qgc3RydWN0IG1laV9jZmcgbWVpX21lX2xlZ2FjeV9jZmc7CitleHRlcm4gY29uc3Qgc3RydWN0IG1laV9jZmcgbWVpX21lX2ljaF9jZmc7CitleHRlcm4gY29uc3Qgc3RydWN0IG1laV9jZmcgbWVpX21lX3BjaF9jZmc7CitleHRlcm4gY29uc3Qgc3RydWN0IG1laV9jZmcgbWVpX21lX3BjaF9jcHRfcGJnX2NmZzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWVpX2NmZyBtZWlfbWVfbHB0X2NmZzsKKworc3RydWN0IG1laV9kZXZpY2UgKm1laV9tZV9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbWVpX2NmZyAqY2ZnKTsKKworaW50IG1laV9tZV9wZ19zZXRfc3luYyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKK2ludCBtZWlfbWVfcGdfdW5zZXRfc3luYyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKIAogaXJxcmV0dXJuX3QgbWVpX21lX2lycV9xdWlja19oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBpcnFyZXR1cm5fdCBtZWlfbWVfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL2h3LXR4ZS1yZWdzLmggYi9kcml2ZXJzL21pc2MvbWVpL2h3LXR4ZS1yZWdzLmgKaW5kZXggNzI4M2MyNC4uZjE5MjI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL21laS9ody10eGUtcmVncy5oCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvaHctdHhlLXJlZ3MuaApAQCAtODksNyArODksNyBAQAogIyAgZGVmaW5lIFBDSV9DRkdfVFhFX0ZXX1NUUzBfRVJSX0NPREVfTVNLICAweDAwMDBGMDAwCiAjICBkZWZpbmUgUENJX0NGR19UWEVfRldfU1RTMF9PUF9NT0RFX01TSyAgIDB4MDAwRjAwMDAKICMgIGRlZmluZSBQQ0lfQ0ZHX1RYRV9GV19TVFMwX1JTVF9DTlRfTVNLICAgMHgwMEYwMDAwMAotCisjZGVmaW5lIFBDSV9DRkdfVFhFX0ZXX1NUUzEgICAweDQ4CiAKICNkZWZpbmUgSVBDX0JBU0VfQUREUgkweDgwNDAwIC8qIFNlQyBJUEMgQmFzZSBBZGRyZXNzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaHctdHhlLmMgYi9kcml2ZXJzL21pc2MvbWVpL2h3LXR4ZS5jCmluZGV4IGY2MDE4MmEuLjkzMjczNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvaHctdHhlLmMKKysrIGIvZHJpdmVycy9taXNjL21laS9ody10eGUuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJBbGl2ZW5lc3MgY3VycmVudD0lZCByZXF1ZXN0PSVkXG4iLAogCQkJCWh3LT5hbGl2ZW5lc3MsIHJlcSk7CiAJaWYgKGRvX3JlcSkgewotCQlody0+cmVjdmRfYWxpdmVuZXNzID0gZmFsc2U7CisJCWRldi0+cGdfZXZlbnQgPSBNRUlfUEdfRVZFTlRfV0FJVDsKIAkJbWVpX3R4ZV9icl9yZWdfd3JpdGUoaHcsIFNJQ1JfSE9TVF9BTElWRU5FU1NfUkVRX1JFRywgcmVxKTsKIAl9CiAJcmV0dXJuIGRvX3JlcTsKQEAgLTIxMyw2ICsyMTMsNyBAQAogCWRvIHsKIAkJaHctPmFsaXZlbmVzcyA9IG1laV90eGVfYWxpdmVuZXNzX2dldChkZXYpOwogCQlpZiAoaHctPmFsaXZlbmVzcyA9PSBleHBlY3RlZCkgeworCQkJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9JRExFOwogCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCiAJCQkJImFsaXZlbmVzcyBzZXR0bGVkIGFmdGVyICVkIG1zZWNzXG4iLCB0KTsKIAkJCXJldHVybiB0OwpAQCAtMjIzLDYgKzIyNCw3IEBACiAJCXQgKz0gTVNFQ19QRVJfU0VDIC8gNTsKIAl9IHdoaWxlICh0IDwgU0VDX0FMSVZFTkVTU19XQUlUX1RJTUVPVVQpOwogCisJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9JRExFOwogCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiYWxpdmVuZXNzIHRpbWVkIG91dFxuIik7CiAJcmV0dXJuIC1FVElNRTsKIH0KQEAgLTI0OSwxOSArMjUxLDIyIEBACiAJCXJldHVybiAwOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKLQllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoaHctPndhaXRfYWxpdmVuZXNzLAotCQkJaHctPnJlY3ZkX2FsaXZlbmVzcywgdGltZW91dCk7CisJZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGh3LT53YWl0X2FsaXZlbmVzc19yZXNwLAorCQkJZGV2LT5wZ19ldmVudCA9PSBNRUlfUEdfRVZFTlRfUkVDRUlWRUQsIHRpbWVvdXQpOwogCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOwogCiAJaHctPmFsaXZlbmVzcyA9IG1laV90eGVfYWxpdmVuZXNzX2dldChkZXYpOwogCXJldCA9IGh3LT5hbGl2ZW5lc3MgPT0gZXhwZWN0ZWQgPyAwIDogLUVUSU1FOwogCiAJaWYgKHJldCkKLQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJhbGl2ZW5lc3MgdGltZWQgb3V0Iik7CisJCWRldl93YXJuKCZkZXYtPnBkZXYtPmRldiwgImFsaXZlbmVzcyB0aW1lZCBvdXQgPSAlbGQgYWxpdmVuZXNzID0gJWQgZXZlbnQgPSAlZFxuIiwKKwkJCWVyciwgaHctPmFsaXZlbmVzcywgZGV2LT5wZ19ldmVudCk7CiAJZWxzZQotCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFsaXZlbmVzcyBzZXR0bGVkIGFmdGVyICVkIG1zZWNzXG4iLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModGltZW91dCAtIGVycikpOwotCWh3LT5yZWN2ZF9hbGl2ZW5lc3MgPSBmYWxzZTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhbGl2ZW5lc3Mgc2V0dGxlZCBhZnRlciA9ICVkIG1zZWMgYWxpdmVuZXNzID0gJWQgZXZlbnQgPSAlZFxuIiwKKwkJCWppZmZpZXNfdG9fbXNlY3ModGltZW91dCAtIGVyciksCisJCQlody0+YWxpdmVuZXNzLCBkZXYtPnBnX2V2ZW50KTsKKworCWRldi0+cGdfZXZlbnQgPSBNRUlfUEdfRVZFTlRfSURMRTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODAsNiArMjg1LDMyIEBACiB9CiAKIC8qKgorICogbWVpX3R4ZV9wZ19pc19lbmFibGVkIC0gZGV0ZWN0IGlmIFBHIGlzIHN1cHBvcnRlZCBieSBIVworICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJuczogdHJ1ZSBpcyBwZyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgYm9vbCBtZWlfdHhlX3BnX2lzX2VuYWJsZWQoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBtZWlfdHhlX3BnX3N0YXRlICAtIHRyYW5zbGF0ZSBhbGl2ZW5lc3MgcmVnaXN0ZXIgdmFsdWUKKyAqICAgdG8gdGhlIG1laSBwb3dlciBnYXRpbmcgc3RhdGUKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnM6IE1FSV9QR19PRkYgaWYgYWxpdmVuZXNzIGlzIG9uIGFuZCBNRUlfUEdfT04gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBtZWlfcGdfc3RhdGUgbWVpX3R4ZV9wZ19zdGF0ZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZWlfdHhlX2h3ICpodyA9IHRvX3R4ZV9odyhkZXYpOworCXJldHVybiBody0+YWxpdmVuZXNzID8gTUVJX1BHX09GRiA6IE1FSV9QR19PTjsKK30KKworLyoqCiAgKiBtZWlfdHhlX2lucHV0X3JlYWR5X2ludGVycnVwdF9lbmFibGUgLSBzZXRzIHRoZSBJbnB1dCBSZWFkeSBJbnRlcnJ1cHQKICAqCiAgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNTg5LDcgKzYyMCwxMCBAQAogCW1laV90eGVfaW5wdXRfcmVhZHlfaW50ZXJydXB0X2VuYWJsZShkZXYpOwogCiAJaWYgKCFtZWlfdHhlX2lzX2lucHV0X3JlYWR5KGRldikpIHsKLQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJJbnB1dCBpcyBub3QgcmVhZHkiKTsKKwkJc3RydWN0IG1laV9md19zdGF0dXMgZndfc3RhdHVzOworCQltZWlfZndfc3RhdHVzKGRldiwgJmZ3X3N0YXR1cyk7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiSW5wdXQgaXMgbm90IHJlYWR5ICIgRldfU1RTX0ZNVCAiXG4iLAorCQkJRldfU1RTX1BSTShmd19zdGF0dXMpKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC05NjAsOSArOTk0LDkgQEAKIAkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBjYXVzZSAqLwogCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKIAkJCSJBbGl2ZW5lc3MgSW50ZXJydXB0OiBTdGF0dXM6ICVkXG4iLCBody0+YWxpdmVuZXNzKTsKLQkJaHctPnJlY3ZkX2FsaXZlbmVzcyA9IHRydWU7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZody0+d2FpdF9hbGl2ZW5lc3MpKQotCQkJd2FrZV91cCgmaHctPndhaXRfYWxpdmVuZXNzKTsKKwkJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9SRUNFSVZFRDsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmh3LT53YWl0X2FsaXZlbmVzc19yZXNwKSkKKwkJCXdha2VfdXAoJmh3LT53YWl0X2FsaXZlbmVzc19yZXNwKTsKIAl9CiAKIApAQCAtMTAwOCwxNSArMTA0Miw1MSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorCisvKioKKyAqIG1laV90eGVfZndfc3RhdHVzIC0gcmV0cmlldmUgZncgc3RhdHVzIGZyb20gdGhlIHBjaSBjb25maWcgc3BhY2UKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGZ3X3N0YXR1czogZncgc3RhdHVzIHJlZ2lzdGVycyBzdG9yYWdlCisgKgorICogcmV0dXJuczogMCBvbiBzdWNjZXNzIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgbWVpX3R4ZV9md19zdGF0dXMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IG1laV9md19zdGF0dXMgKmZ3X3N0YXR1cykKK3sKKwljb25zdCB1MzIgcGNpX2NmZ19yZWdbXSA9IHtQQ0lfQ0ZHX1RYRV9GV19TVFMwLCBQQ0lfQ0ZHX1RYRV9GV19TVFMxfTsKKwlpbnQgaTsKKworCWlmICghZndfc3RhdHVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZ3X3N0YXR1cy0+Y291bnQgPSAyOworCisJZm9yIChpID0gMDsgaSA8IGZ3X3N0YXR1cy0+Y291bnQgJiYgaSA8IE1FSV9GV19TVEFUVVNfTUFYOyBpKyspIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldi0+cGRldiwKKwkJCQlwY2lfY2ZnX3JlZ1tpXSwgJmZ3X3N0YXR1cy0+c3RhdHVzW2ldKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVpX2h3X29wcyBtZWlfdHhlX2h3X29wcyA9IHsKIAorCS5md19zdGF0dXMgPSBtZWlfdHhlX2Z3X3N0YXR1cywKIAkuaG9zdF9pc19yZWFkeSA9IG1laV90eGVfaG9zdF9pc19yZWFkeSwKIAorCS5wZ19zdGF0ZSA9IG1laV90eGVfcGdfc3RhdGUsCisKIAkuaHdfaXNfcmVhZHkgPSBtZWlfdHhlX2h3X2lzX3JlYWR5LAogCS5od19yZXNldCA9IG1laV90eGVfaHdfcmVzZXQsCiAJLmh3X2NvbmZpZyA9IG1laV90eGVfaHdfY29uZmlnLAogCS5od19zdGFydCA9IG1laV90eGVfaHdfc3RhcnQsCiAKKwkucGdfaXNfZW5hYmxlZCA9IG1laV90eGVfcGdfaXNfZW5hYmxlZCwKKwogCS5pbnRyX2NsZWFyID0gbWVpX3R4ZV9pbnRyX2NsZWFyLAogCS5pbnRyX2VuYWJsZSA9IG1laV90eGVfaW50cl9lbmFibGUsCiAJLmludHJfZGlzYWJsZSA9IG1laV90eGVfaW50cl9kaXNhYmxlLApAQCAtMTAzNCwxNCArMTEwNCwyNyBAQAogCiB9OwogCisjZGVmaW5lIE1FSV9DRkdfVFhFX0ZXX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmZ3X3N0YXR1cy5jb3VudCA9IDIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZndfc3RhdHVzLnN0YXR1c1swXSA9IFBDSV9DRkdfVFhFX0ZXX1NUUzAsICAgXAorCS5md19zdGF0dXMuc3RhdHVzWzFdID0gUENJX0NGR19UWEVfRldfU1RTMQorCitjb25zdCBzdHJ1Y3QgbWVpX2NmZyBtZWlfdHhlX2NmZyA9IHsKKwlNRUlfQ0ZHX1RYRV9GV19TVFMsCit9OworCisKIC8qKgogICogbWVpX3R4ZV9kZXZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdHhlIGhhcmR3YXJlIHNwZWNpZmljIHN0cnVjdHVyZQogICoKICAqIEBwZGV2IC0gcGNpIGRldmljZQorICogQGNmZyAtIHBlciBkZXZpY2UgZ2VuZXJhdGlvbiBjb25maWcKKyAqCiAgKiByZXR1cm5zIHN0cnVjdCBtZWlfZGV2aWNlICogb24gc3VjY2VzcyBvciBOVUxMOwogICoKICAqLwotc3RydWN0IG1laV9kZXZpY2UgKm1laV90eGVfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdHJ1Y3QgbWVpX2RldmljZSAqbWVpX3R4ZV9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG1laV9jZmcgKmNmZykKIHsKIAlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OwogCXN0cnVjdCBtZWlfdHhlX2h3ICpodzsKQEAgLTEwNTEsMTEgKzExMzQsMTEgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAKLQltZWlfZGV2aWNlX2luaXQoZGV2KTsKKwltZWlfZGV2aWNlX2luaXQoZGV2LCBjZmcpOwogCiAJaHcgPSB0b190eGVfaHcoZGV2KTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh3LT53YWl0X2FsaXZlbmVzcyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaHctPndhaXRfYWxpdmVuZXNzX3Jlc3ApOwogCiAJZGV2LT5vcHMgPSAmbWVpX3R4ZV9od19vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaHctdHhlLmggYi9kcml2ZXJzL21pc2MvbWVpL2h3LXR4ZS5oCmluZGV4IDA4MTJkOTguLmUyNDRhZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvaHctdHhlLmgKKysrIGIvZHJpdmVycy9taXNjL21laS9ody10eGUuaApAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVkZSAiaHctdHhlLXJlZ3MuaCIKIAorI2RlZmluZSBNRUlfVFhJX1JQTV9USU1FT1VUICAgIDUwMCAvKiBtcyAqLworCiAvKiBGbGF0dGVuIEhpZXJhcmNoeSBpbnRlcnJ1cHQgY2F1c2UgKi8KICNkZWZpbmUgVFhFX0lOVFJfUkVBRElORVNTX0JJVCAgMCAvKiBISVNSX0lOVF8wX1NUUyAqLwogI2RlZmluZSBUWEVfSU5UUl9SRUFESU5FU1MgICAgICBISVNSX0lOVF8wX1NUUwpAQCAtMzUsMTIgKzM3LDExIEBACiAvKioKICAqIHN0cnVjdCBtZWlfdHhlX2h3IC0gdHhlIGhhcmR3YXJlIHNwZWNpZmljcwogICoKLSAqIEBtZW1fYWRkcjogICAgICAgIFNlQyBhbmQgQlJJREdFIGJhcnMKLSAqIEBhbGl2ZW5lc3M6ICAgICAgIGFsaXZlbmVzcyAocG93ZXIgZ2F0aW5nKSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUKLSAqIEByZWFkaW5lc3M6ICAgICAgIHJlYWRpbmVzcyBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUKLSAqIEB3YWl0X2FsaXZlbmVzczogIGFsaXZlbmVzcyB3YWl0IHF1ZXVlCi0gKiBAcmVjdmRfYWxpdmVuZXNzOiBhbGl2ZW5lc3MgaW50ZXJydXB0IHdhcyByZWNpdmVkCi0gKiBAaW50cl9jYXVzZTogICAgICB0cmFuc2xhdGVkIGludGVycnVwdCBjYXVzZQorICogQG1lbV9hZGRyOiAgICAgICAgICAgIFNlQyBhbmQgQlJJREdFIGJhcnMKKyAqIEBhbGl2ZW5lc3M6ICAgICAgICAgICBhbGl2ZW5lc3MgKHBvd2VyIGdhdGluZykgc3RhdGUgb2YgdGhlIGhhcmR3YXJlCisgKiBAcmVhZGluZXNzOiAgICAgICAgICAgcmVhZGluZXNzIHN0YXRlIG9mIHRoZSBoYXJkd2FyZQorICogQHdhaXRfYWxpdmVuZXNzX3Jlc3A6IGFsaXZlbmVzcyB3YWl0IHF1ZXVlCisgKiBAaW50cl9jYXVzZTogICAgICAgICAgdHJhbnNsYXRlZCBpbnRlcnJ1cHQgY2F1c2UKICAqLwogc3RydWN0IG1laV90eGVfaHcgewogCXZvaWQgX19pb21lbSAqbWVtX2FkZHJbTlVNX09GX01FTV9CQVJTXTsKQEAgLTQ4LDggKzQ5LDcgQEAKIAl1MzIgcmVhZGluZXNzOwogCXUzMiBzbG90czsKIAotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfYWxpdmVuZXNzOwotCWJvb2wgcmVjdmRfYWxpdmVuZXNzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfYWxpdmVuZXNzX3Jlc3A7CiAKIAl1bnNpZ25lZCBsb25nIGludHJfY2F1c2U7CiB9OwpAQCAtNjEsNyArNjEsMTAgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopaHcsIHN0cnVjdCBtZWlfZGV2aWNlLCBodyk7CiB9CiAKLXN0cnVjdCBtZWlfZGV2aWNlICptZWlfdHhlX2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWVpX2NmZyBtZWlfdHhlX2NmZzsKKworc3RydWN0IG1laV9kZXZpY2UgKm1laV90eGVfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IG1laV9jZmcgKmNmZyk7CiAKIGlycXJldHVybl90IG1laV90eGVfaXJxX3F1aWNrX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGlycXJldHVybl90IG1laV90eGVfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL2h3LmggYi9kcml2ZXJzL21pc2MvbWVpL2h3LmgKaW5kZXggNmI0NzZhYi4uZGQ0NDhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL21laS9ody5oCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvaHcuaApAQCAtMzEsMTQgKzMxLDIxIEBACiAjZGVmaW5lIE1FSV9JQU1USElGX1NUQUxMX1RJTUVSICAgIDEyICAvKiBIUFMgKi8KICNkZWZpbmUgTUVJX0lBTVRISUZfUkVBRF9USU1FUiAgICAgMTAgIC8qIEhQUyAqLwogCisjZGVmaW5lIE1FSV9QR0lfVElNRU9VVCAgICAgICAgICAgIDEgIC8qIFBHIElzb2xhdGlvbiB0aW1lIHJlc3BvbnNlIDEgc2VjICovCiAjZGVmaW5lIE1FSV9IQk1fVElNRU9VVCAgICAgICAgICAgIDEgICAvKiAxIHNlY29uZCAqLwogCiAvKgogICogTUVJIFZlcnNpb24KICAqLwotI2RlZmluZSBIQk1fTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEhCTV9NSU5PUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgSEJNX01BSk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgMQogCisvKgorICogTUVJIHZlcnNpb24gd2l0aCBQR0kgc3VwcG9ydAorICovCisjZGVmaW5lIEhCTV9NSU5PUl9WRVJTSU9OX1BHSSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEJNX01BSk9SX1ZFUlNJT05fUEdJICAgICAgICAgICAgICAgMQorCiAvKiBIb3N0IGJ1cyBtZXNzYWdlIGNvbW1hbmQgb3Bjb2RlICovCiAjZGVmaW5lIE1FSV9IQk1fQ01EX09QX01TSyAgICAgICAgICAgICAgICAgIDB4N2YKIC8qIEhvc3QgYnVzIG1lc3NhZ2UgY29tbWFuZCBSRVNQT05TRSAqLwpAQCAtNjksNiArNzYsMTEgQEAKIAogI2RlZmluZSBNRUlfRkxPV19DT05UUk9MX0NNRCAgICAgICAgICAgICAgICAweDA4CiAKKyNkZWZpbmUgTUVJX1BHX0lTT0xBVElPTl9FTlRSWV9SRVFfQ01EICAgICAgMHgwYQorI2RlZmluZSBNRUlfUEdfSVNPTEFUSU9OX0VOVFJZX1JFU19DTUQgICAgICAweDhhCisjZGVmaW5lIE1FSV9QR19JU09MQVRJT05fRVhJVF9SRVFfQ01EICAgICAgIDB4MGIKKyNkZWZpbmUgTUVJX1BHX0lTT0xBVElPTl9FWElUX1JFU19DTUQgICAgICAgMHg4YgorCiAvKgogICogTUVJIFN0b3AgUmVhc29uCiAgKiB1c2VkIGJ5IGhibV9ob3N0X3N0b3BfcmVxdWVzdC5yZWFzb24KQEAgLTIwOCw2ICsyMjAsMTcgQEAKIH0gX19wYWNrZWQ7CiAKIC8qKgorICogc3RydWN0IGhibV9wb3dlcl9nYXRlIC0gcG93ZXIgZ2F0ZSByZXF1ZXN0L3Jlc3BvbnNlCisgKgorICogQGhibV9jbWQgLSBidXMgbWVzc2FnZSBjb21tYW5kIGhlYWRlcgorICogQHJlc2VydmVkWzNdCisgKi8KK3N0cnVjdCBoYm1fcG93ZXJfZ2F0ZSB7CisJdTggaGJtX2NtZDsKKwl1OCByZXNlcnZlZFszXTsKK30gX19wYWNrZWQ7CisKKy8qKgogICogc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0IC0gY29ubmVjdC9kaXNjb25uZWN0IHJlcXVlc3QKICAqCiAgKiBAaGJtX2NtZCAtIGJ1cyBtZXNzYWdlIGNvbW1hbmQgaGVhZGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL2luaXQuYyBiL2RyaXZlcnMvbWlzYy9tZWkvaW5pdC5jCmluZGV4IDQ0NjA5NzUuLjAwNjkyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvaW5pdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvaW5pdC5jCkBAIC03NCw5ICs3NCwxMyBAQAogCWlmIChzdGF0ZSAhPSBNRUlfREVWX0lOSVRJQUxJWklORyAmJgogCSAgICBzdGF0ZSAhPSBNRUlfREVWX0RJU0FCTEVEICYmCiAJICAgIHN0YXRlICE9IE1FSV9ERVZfUE9XRVJfRE9XTiAmJgotCSAgICBzdGF0ZSAhPSBNRUlfREVWX1BPV0VSX1VQKQotCQlkZXZfd2FybigmZGV2LT5wZGV2LT5kZXYsICJ1bmV4cGVjdGVkIHJlc2V0OiBkZXZfc3RhdGUgPSAlc1xuIiwKLQkJCSBtZWlfZGV2X3N0YXRlX3N0cihzdGF0ZSkpOworCSAgICBzdGF0ZSAhPSBNRUlfREVWX1BPV0VSX1VQKSB7CisJCXN0cnVjdCBtZWlfZndfc3RhdHVzIGZ3X3N0YXR1czsKKwkJbWVpX2Z3X3N0YXR1cyhkZXYsICZmd19zdGF0dXMpOworCQlkZXZfd2FybigmZGV2LT5wZGV2LT5kZXYsCisJCQkidW5leHBlY3RlZCByZXNldDogZGV2X3N0YXRlID0gJXMgIiBGV19TVFNfRk1UICJcbiIsCisJCQltZWlfZGV2X3N0YXRlX3N0cihzdGF0ZSksIEZXX1NUU19QUk0oZndfc3RhdHVzKSk7CisJfQogCiAJLyogd2UncmUgYWxyZWFkeSBpbiByZXNldCwgY2FuY2VsIHRoZSBpbml0IHRpbWVyCiAJICogaWYgdGhlIHJlc2V0IHdhcyBjYWxsZWQgZHVlIHRoZSBoYm0gcHJvdG9jb2wgZXJyb3IKQEAgLTExOCw4ICsxMjIsOCBAQAogCQltZWlfYW10aGlmX3Jlc2V0X3BhcmFtcyhkZXYpOwogCX0KIAorCW1laV9oYm1fcmVzZXQoZGV2KTsKIAotCWRldi0+bWVfY2xpZW50c19udW0gPSAwOwogCWRldi0+cmRfbXNnX2hkciA9IDA7CiAJZGV2LT53ZF9wZW5kaW5nID0gZmFsc2U7CiAKQEAgLTMwMywxNSArMzA3LDU4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZWlfc3RvcCk7CiAKKy8qKgorICogbWVpX3dyaXRlX2lzX2lkbGUgLSBjaGVjayBpZiB0aGUgd3JpdGUgcXVldWVzIGFyZSBpZGxlCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIHRydWUgb2YgdGhlcmUgaXMgbm8gcGVuZGluZyB3cml0ZQorICovCitib29sIG1laV93cml0ZV9pc19pZGxlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJYm9vbCBpZGxlID0gKGRldi0+ZGV2X3N0YXRlID09IE1FSV9ERVZfRU5BQkxFRCAmJgorCQlsaXN0X2VtcHR5KCZkZXYtPmN0cmxfd3JfbGlzdC5saXN0KSAmJgorCQlsaXN0X2VtcHR5KCZkZXYtPndyaXRlX2xpc3QubGlzdCkpOwogCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJ3cml0ZSBwZzogaXMgaWRsZVslZF0gc3RhdGU9JXMgY3RybD0lZCB3cml0ZT0lZFxuIiwKKwkJaWRsZSwKKwkJbWVpX2Rldl9zdGF0ZV9zdHIoZGV2LT5kZXZfc3RhdGUpLAorCQlsaXN0X2VtcHR5KCZkZXYtPmN0cmxfd3JfbGlzdC5saXN0KSwKKwkJbGlzdF9lbXB0eSgmZGV2LT53cml0ZV9saXN0Lmxpc3QpKTsKIAotdm9pZCBtZWlfZGV2aWNlX2luaXQoc3RydWN0IG1laV9kZXZpY2UgKmRldikKKwlyZXR1cm4gaWRsZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1laV93cml0ZV9pc19pZGxlKTsKKworaW50IG1laV9md19zdGF0dXMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9md19zdGF0dXMgKmZ3X3N0YXR1cykKK3sKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3QgbWVpX2Z3X3N0YXR1cyAqZndfc3JjID0gJmRldi0+Y2ZnLT5md19zdGF0dXM7CisKKwlpZiAoIWZ3X3N0YXR1cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmd19zdGF0dXMtPmNvdW50ID0gZndfc3JjLT5jb3VudDsKKwlmb3IgKGkgPSAwOyBpIDwgZndfc3JjLT5jb3VudCAmJiBpIDwgTUVJX0ZXX1NUQVRVU19NQVg7IGkrKykgeworCQlpbnQgcmV0OworCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LAorCQkJZndfc3JjLT5zdGF0dXNbaV0sICZmd19zdGF0dXMtPnN0YXR1c1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWVpX2Z3X3N0YXR1cyk7CisKK3ZvaWQgbWVpX2RldmljZV9pbml0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBtZWlfY2ZnICpjZmcpCiB7CiAJLyogc2V0dXAgb3VyIGxpc3QgYXJyYXkgKi8KIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5maWxlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmRldmljZV9saXN0KTsKIAltdXRleF9pbml0KCZkZXYtPmRldmljZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfaHdfcmVhZHkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9wZyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X3JlY3ZkX21zZyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X3N0b3Bfd2QpOwogCWRldi0+ZGV2X3N0YXRlID0gTUVJX0RFVl9JTklUSUFMSVpJTkc7CkBAIC0zNDAsNiArMzg3LDkgQEAKIAkgKiAwOiBSZXNlcnZlZCBmb3IgTUVJIEJ1cyBNZXNzYWdlIGNvbW11bmljYXRpb25zCiAJICovCiAJYml0bWFwX3NldChkZXYtPmhvc3RfY2xpZW50c19tYXAsIDAsIDEpOworCisJZGV2LT5wZ19ldmVudCA9IE1FSV9QR19FVkVOVF9JRExFOworCWRldi0+Y2ZnICAgICAgPSBjZmc7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZWlfZGV2aWNlX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL21haW4uYyBiL2RyaXZlcnMvbWlzYy9tZWkvbWFpbi5jCmluZGV4IDE0NzQxMzEuLjY2ZjBhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvbWFpbi5jCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvbWFpbi5jCkBAIC00NjcsNyArNDY3LDYgQEAKIAl9CiAKIAljbC0+bWVfY2xpZW50X2lkID0gZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZDsKLQljbC0+c3RhdGUgPSBNRUlfRklMRV9DT05ORUNUSU5HOwogCiAJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJDb25uZWN0IHRvIEZXIENsaWVudCBJRCA9ICVkXG4iLAogCQkJY2wtPm1lX2NsaWVudF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL21laV9kZXYuaCBiL2RyaXZlcnMvbWlzYy9tZWkvbWVpX2Rldi5oCmluZGV4IDk0YTUxNjcuLjVjN2U5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvbWVpX2Rldi5oCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvbWVpX2Rldi5oCkBAIC0xNTMsNiArMTUzLDIwIEBACiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIH07CiAKKy8qIE1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NlZCBGVyBzdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1FSV9GV19TVEFUVVNfTUFYIDIKKworLyoKKyAqIHN0cnVjdCBtZWlfZndfc3RhdHVzIC0gc3RvcmFnZSBvZiBGVyBzdGF0dXMgZGF0YQorICoKKyAqIEBjb3VudCAtIG51bWJlciBvZiBhY3R1YWxseSBhdmFpbGFibGUgZWxlbWVudHMgaW4gYXJyYXkKKyAqIEBzdGF0dXMgLSBGVyBzdGF0dXMgcmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBtZWlfZndfc3RhdHVzIHsKKwlpbnQgY291bnQ7CisJdTMyIHN0YXR1c1tNRUlfRldfU1RBVFVTX01BWF07Cit9OworCiAvKioKICAqIHN0cnVjdCBtZWlfbWVfY2xpZW50IC0gcmVwcmVzZW50YXRpb24gb2YgbWUgKGZ3KSBjbGllbnQKICAqCkBAIC0yMTMsNiArMjI3LDcgQEAKIAogLyoqIHN0cnVjdCBtZWlfaHdfb3BzCiAgKgorICogQGZ3X3N0YXR1cyAgICAgICAgLSByZWFkIEZXIHN0YXR1cyBmcm9tIFBDSSBjb25maWcgc3BhY2UKICAqIEBob3N0X2lzX3JlYWR5ICAgIC0gcXVlcnkgZm9yIGhvc3QgcmVhZGluZXNzCiAKICAqIEBod19pc19yZWFkeSAgICAgIC0gcXVlcnkgaWYgaHcgaXMgcmVhZHkKQEAgLTIyMCw2ICsyMzUsOSBAQAogICogQGh3X3N0YXJ0ICAgICAgICAgLSBzdGFydCBodyBhZnRlciByZXNldAogICogQGh3X2NvbmZpZyAgICAgICAgLSBjb25maWd1cmUgaHcKIAorICogQHBnX3N0YXRlICAgICAgICAgLSBwb3dlciBnYXRpbmcgc3RhdGUgb2YgdGhlIGRldmljZQorICogQHBnX2lzX2VuYWJsZWQgICAgLSBpcyBwb3dlciBnYXRpbmcgZW5hYmxlZAorCiAgKiBAaW50cl9jbGVhciAgICAgICAtIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cwogICogQGludHJfZW5hYmxlICAgICAgLSBlbmFibGUgaW50ZXJydXB0cwogICogQGludHJfZGlzYWJsZSAgICAgLSBkaXNhYmxlIGludGVycnVwdHMKQEAgLTIzNyw2ICsyNTUsOCBAQAogICovCiBzdHJ1Y3QgbWVpX2h3X29wcyB7CiAKKwlpbnQgKCpmd19zdGF0dXMpKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBtZWlfZndfc3RhdHVzICpmd19zdGF0dXMpOwogCWJvb2wgKCpob3N0X2lzX3JlYWR5KShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKIAogCWJvb2wgKCpod19pc19yZWFkeSkoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CkBAIC0yNDQsNiArMjY0LDkgQEAKIAlpbnQgKCpod19zdGFydCkoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmh3X2NvbmZpZykoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiAKKwllbnVtIG1laV9wZ19zdGF0ZSAoKnBnX3N0YXRlKShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKKwlib29sICgqcGdfaXNfZW5hYmxlZCkoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CisKIAl2b2lkICgqaW50cl9jbGVhcikoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmludHJfZW5hYmxlKShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKIAl2b2lkICgqaW50cl9kaXNhYmxlKShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKQEAgLTMzMSwxNiArMzU0LDYxIEBACiAJdm9pZCAqcHJpdl9kYXRhOwogfTsKIAorCisgLyoqCisgKiBlbnVtIG1laV9wZ19ldmVudCAtIHBvd2VyIGdhdGluZyB0cmFuc2l0aW9uIGV2ZW50cworICoKKyAqIEBNRUlfUEdfRVZFTlRfSURMRTogdGhlIGRyaXZlciBpcyBub3QgaW4gcG93ZXIgZ2F0aW5nIHRyYW5zaXRpb24KKyAqIEBNRUlfUEdfRVZFTlRfV0FJVDogdGhlIGRyaXZlciBpcyB3YWl0aW5nIGZvciBhIHBnIGV2ZW50IHRvIGNvbXBsZXRlCisgKiBATUVJX1BHX0VWRU5UX1JFQ0VJVkVEOiB0aGUgZHJpdmVyIHJlY2VpdmVkIHBnIGV2ZW50CisgKi8KK2VudW0gbWVpX3BnX2V2ZW50IHsKKwlNRUlfUEdfRVZFTlRfSURMRSwKKwlNRUlfUEdfRVZFTlRfV0FJVCwKKwlNRUlfUEdfRVZFTlRfUkVDRUlWRUQsCit9OworCisvKioKKyAqIGVudW0gbWVpX3BnX3N0YXRlIC0gZGV2aWNlIGludGVybmFsIHBvd2VyIGdhdGluZyBzdGF0ZQorICoKKyAqIEBNRUlfUEdfT0ZGOiBkZXZpY2UgaXMgbm90IHBvd2VyIGdhdGVkIC0gaXQgaXMgYWN0aXZlCisgKiBATUVJX1BHX09OOiAgZGV2aWNlIGlzIHBvd2VyIGdhdGVkIC0gaXQgaXMgaW4gbG93ZXIgcG93ZXIgc3RhdGUKKyAqLworZW51bSBtZWlfcGdfc3RhdGUgeworCU1FSV9QR19PRkYgPSAwLAorCU1FSV9QR19PTiA9ICAxLAorfTsKKworLyoKKyAqIG1laV9jZmcKKyAqCisgKiBAZndfc3RhdHVzIC0gRlcgc3RhdHVzCisgKiBAcXVpcmtfcHJvYmUgLSBkZXZpY2UgZXhjbHVzaW9uIHF1aXJrCisgKi8KK3N0cnVjdCBtZWlfY2ZnIHsKKwljb25zdCBzdHJ1Y3QgbWVpX2Z3X3N0YXR1cyBmd19zdGF0dXM7CisJYm9vbCAoKnF1aXJrX3Byb2JlKShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit9OworCisKKyNkZWZpbmUgTUVJX1BDSV9ERVZJQ0UoZGV2LCBjZmcpIFwKKwkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwgLmRldmljZSA9IChkZXYpLCBcCisJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELCBcCisJLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQorCisKIC8qKgogICogc3RydWN0IG1laV9kZXZpY2UgLSAgTUVJIHByaXZhdGUgZGV2aWNlIHN0cnVjdAogCiAgKiBAcmVzZXRfY291bnQgLSBsaW1pdHMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZXNldHMKICAqIEBoYm1fc3RhdGUgLSBzdGF0ZSBvZiBob3N0IGJ1cyBtZXNzYWdlIHByb3RvY29sCisgKiBAcGdfZXZlbnQgLSBwb3dlciBnYXRpbmcgZXZlbnQKICAqIEBtZW1fYWRkciAtIG1lbSBtYXBwZWQgYmFzZSByZWdpc3RlciBhZGRyZXNzCiAKICAqIEBoYnVmX2RlcHRoIC0gZGVwdGggb2YgaGFyZHdhcmUgaG9zdC93cml0ZSBidWZmZXIgaXMgc2xvdHMKICAqIEBoYnVmX2lzX3JlYWR5IC0gcXVlcnkgaWYgdGhlIGhvc3QgaG9zdC93cml0ZSBidWZmZXIgaXMgcmVhZHkKICAqIEB3cl9tc2cgLSB0aGUgYnVmZmVyIGZvciBoYm0gY29udHJvbCBtZXNzYWdlcworICogQGNmZyAtIHBlciBkZXZpY2UgZ2VuZXJhdGlvbiBjb25maWcgYW5kIG9wcwogICovCiBzdHJ1Y3QgbWVpX2RldmljZSB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CS8qIHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QgKi8KQEAgLTM3MSw2ICs0MzksNyBAQAogCSAqIHdhaXRpbmcgcXVldWUgZm9yIHJlY2VpdmUgbWVzc2FnZSBmcm9tIEZXCiAJICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9od19yZWFkeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3BnOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcmVjdmRfbXNnOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfc3RvcF93ZDsKIApAQCAtMzgyLDYgKzQ1MSwxNCBAQAogCWVudW0gbWVpX2hibV9zdGF0ZSBoYm1fc3RhdGU7CiAJdTE2IGluaXRfY2xpZW50c190aW1lcjsKIAorCS8qCisJICogUG93ZXIgR2F0aW5nIHN1cHBvcnQKKwkgKi8KKwllbnVtIG1laV9wZ19ldmVudCBwZ19ldmVudDsKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCXN0cnVjdCBkZXZfcG1fZG9tYWluIHBnX2RvbWFpbjsKKyNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworCiAJdW5zaWduZWQgY2hhciByZF9tc2dfYnVmW01FSV9SRF9NU0dfQlVGX1NJWkVdOwkvKiBjb250cm9sIG1lc3NhZ2VzICovCiAJdTMyIHJkX21zZ19oZHI7CiAKQEAgLTQ0Miw2ICs1MTksNyBAQAogCiAKIAljb25zdCBzdHJ1Y3QgbWVpX2h3X29wcyAqb3BzOworCWNvbnN0IHN0cnVjdCBtZWlfY2ZnICpjZmc7CiAJY2hhciBod1swXSBfX2FsaWduZWQoc2l6ZW9mKHZvaWQgKikpOwogfTsKIApAQCAtNDc0LDcgKzU1Miw3IEBACiAvKgogICogbWVpIGluaXQgZnVuY3Rpb24gcHJvdG90eXBlcwogICovCi12b2lkIG1laV9kZXZpY2VfaW5pdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKK3ZvaWQgbWVpX2RldmljZV9pbml0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBtZWlfY2ZnICpjZmcpOwogaW50IG1laV9yZXNldChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKIGludCBtZWlfc3RhcnQoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiBpbnQgbWVpX3Jlc3RhcnQoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CkBAIC01NTMsMTAgKzYzMSwyMiBAQAogICogUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9uCiAgKi8KIAorCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVpX2h3X2NvbmZpZyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQogewogCWRldi0+b3BzLT5od19jb25maWcoZGV2KTsKIH0KKworc3RhdGljIGlubGluZSBlbnVtIG1laV9wZ19zdGF0ZSBtZWlfcGdfc3RhdGUoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5vcHMtPnBnX3N0YXRlKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBtZWlfcGdfaXNfZW5hYmxlZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPm9wcy0+cGdfaXNfZW5hYmxlZChkZXYpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBtZWlfaHdfcmVzZXQoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJcmV0dXJuIGRldi0+b3BzLT5od19yZXNldChkZXYsIGVuYWJsZSk7CkBAIC02MjksOCArNzE5LDE3IEBACiAJcmV0dXJuIGRldi0+b3BzLT5yZGJ1Zl9mdWxsX3Nsb3RzKGRldik7CiB9CiAKK2ludCBtZWlfZndfc3RhdHVzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfZndfc3RhdHVzICpmd19zdGF0dXMpOworCisjZGVmaW5lIEZXX1NUU19GTVQgIiUwOFggJTA4WCIKKyNkZWZpbmUgRldfU1RTX1BSTShmd19zdGF0dXMpIFwKKwkoZndfc3RhdHVzKS5jb3VudCA+IDAgPyAoZndfc3RhdHVzKS5zdGF0dXNbMF0gOiAweERFQURCRUVGLCBcCisJKGZ3X3N0YXR1cykuY291bnQgPiAxID8gKGZ3X3N0YXR1cykuc3RhdHVzWzFdIDogMHhERUFEQkVFRgorCiBib29sIG1laV9oYnVmX2FjcXVpcmUoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CiAKK2Jvb2wgbWVpX3dyaXRlX2lzX2lkbGUoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CisKICNpZiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19GUykKIGludCBtZWlfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIG1laV9kYmdmc19kZXJlZ2lzdGVyKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL21laS9wY2ktbWUuYyBiL2RyaXZlcnMvbWlzYy9tZWkvcGNpLW1lLmMKaW5kZXggOTU4ODllMi4uMWI0NmM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL21laS9wY2ktbWUuYworKysgYi9kcml2ZXJzL21pc2MvbWVpL3BjaS1tZS5jCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCiAjaW5jbHVkZSA8bGludXgvbWVpLmg+CiAKICNpbmNsdWRlICJtZWlfZGV2LmgiCkBAIC00Miw0MiArNDQsNDQgQEAKIAogLyogbWVpX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWVpX21lX3BjaV90YmxbXSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEXzgyOTQ2R1opfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEXzgyRzM1KX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF84MlE5NjUpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEXzgyRzk2NSl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfODJHTTk2NSl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfODJHTUU5NjUpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJRMzUpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJHMzMpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJRMzMpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJYMzgpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfMzIwMCl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfSUNIOV82KX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5XzcpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfOCl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfSUNIOV85KX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5XzEwKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV8xKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV8yKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV8zKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV80KX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF8xKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF8yKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF8zKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF80KX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQlhQS18xKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQlhQS18yKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9DUFRfMSl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfUEJHXzEpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX1BQVF8xKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9QUFRfMil9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfUFBUXzMpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0xQVF9IKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9MUFRfVyl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfTFBUX0xQKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9MUFRfSFIpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX1dQVF9MUCl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEXzgyOTQ2R1osIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfODJHMzUsIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfODJROTY1LCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEXzgyRzk2NSwgbWVpX21lX2xlZ2FjeV9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF84MkdNOTY1LCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEXzgyR01FOTY1LCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0lDSDlfODJRMzUsIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIOV84MkczMywgbWVpX21lX2xlZ2FjeV9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9JQ0g5XzgyUTMzLCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0lDSDlfODJYMzgsIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIOV8zMjAwLCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIOV82LCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0lDSDlfNywgbWVpX21lX2xlZ2FjeV9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9JQ0g5XzgsIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIOV85LCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0lDSDlfMTAsIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIOU1fMSwgbWVpX21lX2xlZ2FjeV9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9JQ0g5TV8yLCBtZWlfbWVfbGVnYWN5X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0lDSDlNXzMsIG1laV9tZV9sZWdhY3lfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIOU1fNCwgbWVpX21lX2xlZ2FjeV9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9JQ0gxMF8xLCBtZWlfbWVfaWNoX2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0lDSDEwXzIsIG1laV9tZV9pY2hfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUNIMTBfMywgbWVpX21lX2ljaF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9JQ0gxMF80LCBtZWlfbWVfaWNoX2NmZyl9LAorCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfSUJYUEtfMSwgbWVpX21lX3BjaF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9JQlhQS18yLCBtZWlfbWVfcGNoX2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX0NQVF8xLCBtZWlfbWVfcGNoX2NwdF9wYmdfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfUEJHXzEsIG1laV9tZV9wY2hfY3B0X3BiZ19jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9QUFRfMSwgbWVpX21lX3BjaF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9QUFRfMiwgbWVpX21lX3BjaF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9QUFRfMywgbWVpX21lX3BjaF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9MUFRfSCwgbWVpX21lX2xwdF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9MUFRfVywgbWVpX21lX2xwdF9jZmcpfSwKKwl7TUVJX1BDSV9ERVZJQ0UoTUVJX0RFVl9JRF9MUFRfTFAsIG1laV9tZV9wY2hfY2ZnKX0sCisJe01FSV9QQ0lfREVWSUNFKE1FSV9ERVZfSURfTFBUX0hSLCBtZWlfbWVfbHB0X2NmZyl9LAorCXtNRUlfUENJX0RFVklDRShNRUlfREVWX0lEX1dQVF9MUCwgbWVpX21lX3BjaF9jZmcpfSwKIAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCwgfQpAQCAtODUsNDQgKzg5LDMzIEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtZWlfbWVfcGNpX3RibCk7CiAKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorc3RhdGljIGlubGluZSB2b2lkIG1laV9tZV9zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworc3RhdGljIGlubGluZSB2b2lkIG1laV9tZV91bnNldF9wbV9kb21haW4oc3RydWN0IG1laV9kZXZpY2UgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1laV9tZV9zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbWVpX21lX3Vuc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KSB7fQorI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisKIC8qKgogICogbWVpX3F1aXJrX3Byb2JlIC0gcHJvYmUgZm9yIGRldmljZXMgdGhhdCBkb2Vzbid0IHZhbGlkIE1FIGludGVyZmFjZQogICoKICAqIEBwZGV2OiBQQ0kgZGV2aWNlIHN0cnVjdHVyZQotICogQGVudDogZW50cnkgaW50byBwY2lfZGV2aWNlX3RhYmxlCisgKiBAY2ZnOiBwZXIgZ2VuZXJhdGlvbiBjb25maWcKICAqCiAgKiByZXR1cm5zIHRydWUgaWYgTUUgSW50ZXJmYWNlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UKICAqLwogc3RhdGljIGJvb2wgbWVpX21lX3F1aXJrX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCisJCQkJY29uc3Qgc3RydWN0IG1laV9jZmcgKmNmZykKIHsKLQl1MzIgcmVnOwotCS8qIENvdWdhciBQb2ludCB8fCBQYXRzYnVyZyAqLwotCWlmIChlbnQtPmRldmljZSA9PSBNRUlfREVWX0lEX0NQVF8xIHx8Ci0JICAgIGVudC0+ZGV2aWNlID09IE1FSV9ERVZfSURfUEJHXzEpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9DRkdfSEZTXzIsICZyZWcpOwotCQkvKiBtYWtlIHN1cmUgdGhhdCBiaXQgOSAoTk0pIGlzIHVwIGFuZCBiaXQgMTAgKERNKSBpcyBkb3duICovCi0JCWlmICgocmVnICYgMHg2MDApID09IDB4MjAwKQotCQkJZ290byBub19tZWk7Ci0JfQotCi0JLyogTHlueCBQb2ludCAqLwotCWlmIChlbnQtPmRldmljZSA9PSBNRUlfREVWX0lEX0xQVF9IICB8fAotCSAgICBlbnQtPmRldmljZSA9PSBNRUlfREVWX0lEX0xQVF9XICB8fAotCSAgICBlbnQtPmRldmljZSA9PSBNRUlfREVWX0lEX0xQVF9IUikgewotCQkvKiBSZWFkIE1FIEZXIFN0YXR1cyBjaGVjayBmb3IgU1BTIEZpcm13YXJlICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQ0ZHX0hGU18xLCAmcmVnKTsKLQkJLyogaWYgYml0cyBbMTk6MTZdID0gMTUsIHJ1bm5pbmcgU1BTIEZpcm13YXJlICovCi0JCWlmICgocmVnICYgMHhmMDAwMCkgPT0gMHhmMDAwMCkKLQkJCWdvdG8gbm9fbWVpOworCWlmIChjZmctPnF1aXJrX3Byb2JlICYmIGNmZy0+cXVpcmtfcHJvYmUocGRldikpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRldmljZSBkb2Vzbid0IGhhdmUgdmFsaWQgTUUgSW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXJldHVybiB0cnVlOwotCi1ub19tZWk6Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIkRldmljZSBkb2Vzbid0IGhhdmUgdmFsaWQgTUUgSW50ZXJmYWNlXG4iKTsKLQlyZXR1cm4gZmFsc2U7CiB9CisKIC8qKgogICogbWVpX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKICAqCkBAIC0xMzMsMTUgKzEyNiwxNCBAQAogICovCiBzdGF0aWMgaW50IG1laV9tZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKKwljb25zdCBzdHJ1Y3QgbWVpX2NmZyAqY2ZnID0gKHN0cnVjdCBtZWlfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOwogCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CiAJc3RydWN0IG1laV9tZV9odyAqaHc7CiAJaW50IGVycjsKIAogCi0JaWYgKCFtZWlfbWVfcXVpcmtfcHJvYmUocGRldiwgZW50KSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVuZDsKLQl9CisJaWYgKCFtZWlfbWVfcXVpcmtfcHJvYmUocGRldiwgY2ZnKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBlbmFibGUgcGNpIGRldiAqLwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTczLDcgKzE2NSw3IEBACiAKIAogCS8qIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIG1laSBkZXYgc3RydWN0dXJlICovCi0JZGV2ID0gbWVpX21lX2Rldl9pbml0KHBkZXYpOworCWRldiA9IG1laV9tZV9kZXZfaW5pdChwZGV2LCBjZmcpOwogCWlmICghZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gcmVsZWFzZV9yZWdpb25zOwpAQCAtMjEyLDYgKzIwNCw5IEBACiAJCWdvdG8gcmVsZWFzZV9pcnE7CiAJfQogCisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgTUVJX01FX1JQTV9USU1FT1VUKTsKKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwogCWVyciA9IG1laV9yZWdpc3RlcihkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVsZWFzZV9pcnE7CkBAIC0yMjAsNiArMjE1LDE3IEBACiAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+dGltZXJfd29yaywgSFopOwogCisJLyoKKwkqIEZvciBub3Qgd2FrZS1hYmxlIEhXIHJ1bnRpbWUgcG0gZnJhbWV3b3JrCisJKiBjYW4ndCBiZSB1c2VkIG9uIHBjaSBkZXZpY2UgbGV2ZWwuCisJKiBVc2UgZG9tYWluIHJ1bnRpbWUgcG0gY2FsbGJhY2tzIGluc3RlYWQuCisJKi8KKwlpZiAoIXBjaV9kZXZfcnVuX3dha2UocGRldikpCisJCW1laV9tZV9zZXRfcG1fZG9tYWluKGRldik7CisKKwlpZiAobWVpX3BnX2lzX2VuYWJsZWQoZGV2KSkKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOworCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC5cbiIpOwogCiAJcmV0dXJuIDA7CkBAIC0yNTksMTIgKzI2NSwxOCBAQAogCWlmICghZGV2KQogCQlyZXR1cm47CiAKKwlpZiAobWVpX3BnX2lzX2VuYWJsZWQoZGV2KSkKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CisKIAlodyA9IHRvX21lX2h3KGRldik7CiAKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgInN0b3BcbiIpOwogCW1laV9zdG9wKGRldik7CiAKKwlpZiAoIXBjaV9kZXZfcnVuX3dha2UocGRldikpCisJCW1laV9tZV91bnNldF9wbV9kb21haW4oZGV2KTsKKwogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCW1laV9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKIApAQCAtMzQzLDEyICszNTUsMTIwIEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAotc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1laV9tZV9wbV9vcHMsIG1laV9tZV9wY2lfc3VzcGVuZCwgbWVpX21lX3BjaV9yZXN1bWUpOworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdGF0aWMgaW50IG1laV9tZV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJycG06IG1lOiBydW50aW1lX2lkbGVcbiIpOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAobWVpX3dyaXRlX2lzX2lkbGUoZGV2KSkKKwkJcG1fc2NoZWR1bGVfc3VzcGVuZChkZXZpY2UsIE1FSV9NRV9SUE1fVElNRU9VVCAqIDIpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCBtZWlfbWVfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCWludCByZXQ7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJycG06IG1lOiBydW50aW1lIHN1c3BlbmRcbiIpOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCisJaWYgKG1laV93cml0ZV9pc19pZGxlKGRldikpCisJCXJldCA9IG1laV9tZV9wZ19zZXRfc3luYyhkZXYpOworCWVsc2UKKwkJcmV0ID0gLUVBR0FJTjsKKworCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJycG06IG1lOiBydW50aW1lIHN1c3BlbmQgcmV0PSVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZWlfbWVfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInJwbTogbWU6IHJ1bnRpbWUgcmVzdW1lXG4iKTsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXJldCA9IG1laV9tZV9wZ191bnNldF9zeW5jKGRldik7CisKKwltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicnBtOiBtZTogcnVudGltZSByZXN1bWUgcmV0ID0gJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG1laV9tZV9zZXRfcG1fZG9tYWluIC0gZmlsbCBhbmQgc2V0IHBtIGRvbWlhbiBzdHVjdHVyZSBmb3IgZGV2aWNlCisgKgorICogQGRldjogbWVpX2RldmljZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWVpX21lX3NldF9wbV9kb21haW4oc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiAgPSBkZXYtPnBkZXY7CisKKwlpZiAocGRldi0+ZGV2LmJ1cyAmJiBwZGV2LT5kZXYuYnVzLT5wbSkgeworCQlkZXYtPnBnX2RvbWFpbi5vcHMgPSAqcGRldi0+ZGV2LmJ1cy0+cG07CisKKwkJZGV2LT5wZ19kb21haW4ub3BzLnJ1bnRpbWVfc3VzcGVuZCA9IG1laV9tZV9wbV9ydW50aW1lX3N1c3BlbmQ7CisJCWRldi0+cGdfZG9tYWluLm9wcy5ydW50aW1lX3Jlc3VtZSA9IG1laV9tZV9wbV9ydW50aW1lX3Jlc3VtZTsKKwkJZGV2LT5wZ19kb21haW4ub3BzLnJ1bnRpbWVfaWRsZSA9IG1laV9tZV9wbV9ydW50aW1lX2lkbGU7CisKKwkJcGRldi0+ZGV2LnBtX2RvbWFpbiA9ICZkZXYtPnBnX2RvbWFpbjsKKwl9Cit9CisKKy8qKgorICogbWVpX21lX3Vuc2V0X3BtX2RvbWFpbiAtIGNsZWFuIHBtIGRvbWlhbiBzdHVjdHVyZSBmb3IgZGV2aWNlCisgKgorICogQGRldjogbWVpX2RldmljZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWVpX21lX3Vuc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCS8qIHN0b3AgdXNpbmcgcG0gY2FsbGJhY2tzIGlmIGFueSAqLworCWRldi0+cGRldi0+ZGV2LnBtX2RvbWFpbiA9IE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1laV9tZV9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMobWVpX21lX3BjaV9zdXNwZW5kLAorCQkJCW1laV9tZV9wY2lfcmVzdW1lKQorCVNFVF9SVU5USU1FX1BNX09QUygKKwkJbWVpX21lX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkJbWVpX21lX3BtX3J1bnRpbWVfcmVzdW1lLAorCQltZWlfbWVfcG1fcnVudGltZV9pZGxlKQorfTsKKwogI2RlZmluZSBNRUlfTUVfUE1fT1BTCSgmbWVpX21lX3BtX29wcykKICNlbHNlCiAjZGVmaW5lIE1FSV9NRV9QTV9PUFMJTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogLyoKICAqICBQQ0kgZHJpdmVyIHN0cnVjdHVyZQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL3BjaS10eGUuYyBiL2RyaXZlcnMvbWlzYy9tZWkvcGNpLXR4ZS5jCmluZGV4IGFkM2FkYjAuLjIzNDNjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvcGNpLXR4ZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvcGNpLXR4ZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21laS5oPgogCkBAIC0zNSwxMSArMzYsMTggQEAKICNpbmNsdWRlICJody10eGUuaCIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1laV90eGVfcGNpX3RibFtdID0gewotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MEYxOCl9LCAvKiBCYXl0cmFpbCAqLworCXtNRUlfUENJX0RFVklDRSgweDBGMTgsIG1laV90eGVfY2ZnKX0sIC8qIEJheXRyYWlsICovCiAJezAsIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWVpX3R4ZV9wY2lfdGJsKTsKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdGF0aWMgaW5saW5lIHZvaWQgbWVpX3R4ZV9zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworc3RhdGljIGlubGluZSB2b2lkIG1laV90eGVfdW5zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZWlfdHhlX3NldF9wbV9kb21haW4oc3RydWN0IG1laV9kZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZWlfdHhlX3Vuc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KSB7fQorI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCiAKIHN0YXRpYyB2b2lkIG1laV90eGVfcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBtZWlfdHhlX2h3ICpodykKIHsKQEAgLTYxLDYgKzY5LDcgQEAKICAqLwogc3RhdGljIGludCBtZWlfdHhlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogeworCWNvbnN0IHN0cnVjdCBtZWlfY2ZnICpjZmcgPSAoc3RydWN0IG1laV9jZmcgKikoZW50LT5kcml2ZXJfZGF0YSk7CiAJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbWVpX3R4ZV9odyAqaHc7CiAJaW50IGVycjsKQEAgLTkxLDcgKzEwMCw3IEBACiAJfQogCiAJLyogYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgbWVpIGRldiBzdHJ1Y3R1cmUgKi8KLQlkZXYgPSBtZWlfdHhlX2Rldl9pbml0KHBkZXYpOworCWRldiA9IG1laV90eGVfZGV2X2luaXQocGRldiwgY2ZnKTsKIAlpZiAoIWRldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIHJlbGVhc2VfcmVnaW9uczsKQEAgLTEzNywxMiArMTQ2LDI1IEBACiAJCWdvdG8gcmVsZWFzZV9pcnE7CiAJfQogCisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgTUVJX1RYSV9SUE1fVElNRU9VVCk7CisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CisKIAllcnIgPSBtZWlfcmVnaXN0ZXIoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlbGVhc2VfaXJxOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKKwkvKgorCSogRm9yIG5vdCB3YWtlLWFibGUgSFcgcnVudGltZSBwbSBmcmFtZXdvcmsKKwkqIGNhbid0IGJlIHVzZWQgb24gcGNpIGRldmljZSBsZXZlbC4KKwkqIFVzZSBkb21haW4gcnVudGltZSBwbSBjYWxsYmFja3MgaW5zdGVhZC4KKwkqLworCWlmICghcGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJbWVpX3R4ZV9zZXRfcG1fZG9tYWluKGRldik7CisKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CisKIAlyZXR1cm4gMDsKIAogcmVsZWFzZV9pcnE6CkBAIC0xODcsMTAgKzIwOSwxNSBAQAogCQlyZXR1cm47CiAJfQogCisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CisKIAlodyA9IHRvX3R4ZV9odyhkZXYpOwogCiAJbWVpX3N0b3AoZGV2KTsKIAorCWlmICghcGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJbWVpX3R4ZV91bnNldF9wbV9kb21haW4oZGV2KTsKKwogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCW1laV9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKIAlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CkBAIC0yNjUsMTUgKzI5MiwxMzEgQEAKIAogCXJldHVybiBlcnI7CiB9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLXN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtZWlfdHhlX3BtX29wcywKLQkJCSBtZWlfdHhlX3BjaV9zdXNwZW5kLAotCQkJIG1laV90eGVfcGNpX3Jlc3VtZSk7CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBpbnQgbWVpX3R4ZV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJycG06IHR4ZTogcnVudGltZV9pZGxlXG4iKTsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG1laV93cml0ZV9pc19pZGxlKGRldikpCisJCXBtX3NjaGVkdWxlX3N1c3BlbmQoZGV2aWNlLCBNRUlfVFhJX1JQTV9USU1FT1VUICogMik7CisKKwlyZXR1cm4gLUVCVVNZOworfQorc3RhdGljIGludCBtZWlfdHhlX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CisJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicnBtOiB0eGU6IHJ1bnRpbWUgc3VzcGVuZFxuIik7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlpZiAobWVpX3dyaXRlX2lzX2lkbGUoZGV2KSkKKwkJcmV0ID0gbWVpX3R4ZV9hbGl2ZW5lc3Nfc2V0X3N5bmMoZGV2LCAwKTsKKwllbHNlCisJCXJldCA9IC1FQUdBSU47CisKKwkvKgorCSAqIElmIGV2ZXJ5dGhpbmcgaXMgb2theSB3ZSdyZSBhYm91dCB0byBlbnRlciBQQ0kgbG93CisJICogcG93ZXIgc3RhdGUgKEQzKSB0aGVyZWZvciB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlCisJICogaW50ZXJydXB0cyB0b3dhcmRzIGhvc3QuCisJICogSG93ZXZlciBpZiBkZXZpY2UgaXMgbm90IHdha2VhYmxlIHdlIGRvIG5vdCBlbnRlcgorCSAqIEQtbG93IHN0YXRlIGFuZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIGludGVycnVwdCBraWNraW5nCisJICovCisJIGlmICghcmV0ICYmIHBjaV9kZXZfcnVuX3dha2UocGRldikpCisJCW1laV9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInJwbTogdHhlOiBydW50aW1lIHN1c3BlbmQgcmV0PSVkXG4iLCByZXQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1laV90eGVfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInJwbTogdHhlOiBydW50aW1lIHJlc3VtZVxuIik7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwltZWlfZW5hYmxlX2ludGVycnVwdHMoZGV2KTsKKworCXJldCA9IG1laV90eGVfYWxpdmVuZXNzX3NldF9zeW5jKGRldiwgMSk7CisKKwltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicnBtOiB0eGU6IHJ1bnRpbWUgcmVzdW1lIHJldCA9ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBtZWlfdHhlX3NldF9wbV9kb21haW4gLSBmaWxsIGFuZCBzZXQgcG0gZG9taWFuIHN0dWN0dXJlIGZvciBkZXZpY2UKKyAqCisgKiBAZGV2OiBtZWlfZGV2aWNlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZWlfdHhlX3NldF9wbV9kb21haW4oc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiAgPSBkZXYtPnBkZXY7CisKKwlpZiAocGRldi0+ZGV2LmJ1cyAmJiBwZGV2LT5kZXYuYnVzLT5wbSkgeworCQlkZXYtPnBnX2RvbWFpbi5vcHMgPSAqcGRldi0+ZGV2LmJ1cy0+cG07CisKKwkJZGV2LT5wZ19kb21haW4ub3BzLnJ1bnRpbWVfc3VzcGVuZCA9IG1laV90eGVfcG1fcnVudGltZV9zdXNwZW5kOworCQlkZXYtPnBnX2RvbWFpbi5vcHMucnVudGltZV9yZXN1bWUgPSBtZWlfdHhlX3BtX3J1bnRpbWVfcmVzdW1lOworCQlkZXYtPnBnX2RvbWFpbi5vcHMucnVudGltZV9pZGxlID0gbWVpX3R4ZV9wbV9ydW50aW1lX2lkbGU7CisKKwkJcGRldi0+ZGV2LnBtX2RvbWFpbiA9ICZkZXYtPnBnX2RvbWFpbjsKKwl9Cit9CisKKy8qKgorICogbWVpX3R4ZV91bnNldF9wbV9kb21haW4gLSBjbGVhbiBwbSBkb21pYW4gc3R1Y3R1cmUgZm9yIGRldmljZQorICoKKyAqIEBkZXY6IG1laV9kZXZpY2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1laV90eGVfdW5zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJLyogc3RvcCB1c2luZyBwbSBjYWxsYmFja3MgaWYgYW55ICovCisJZGV2LT5wZGV2LT5kZXYucG1fZG9tYWluID0gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbWVpX3R4ZV9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMobWVpX3R4ZV9wY2lfc3VzcGVuZCwKKwkJCQltZWlfdHhlX3BjaV9yZXN1bWUpCisJU0VUX1JVTlRJTUVfUE1fT1BTKAorCQltZWlfdHhlX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkJbWVpX3R4ZV9wbV9ydW50aW1lX3Jlc3VtZSwKKwkJbWVpX3R4ZV9wbV9ydW50aW1lX2lkbGUpCit9OwogCiAjZGVmaW5lIE1FSV9UWEVfUE1fT1BTCSgmbWVpX3R4ZV9wbV9vcHMpCiAjZWxzZQogI2RlZmluZSBNRUlfVFhFX1BNX09QUwlOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIC8qCiAgKiAgUENJIGRyaXZlciBzdHJ1Y3R1cmUKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL21laS93ZC5jIGIvZHJpdmVycy9taXNjL21laS93ZC5jCmluZGV4IGViZjFjYmMuLmE4NGE2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvd2QuYworKysgYi9kcml2ZXJzL21pc2MvbWVpL3dkLmMKQEAgLTg0LDggKzg0LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQljbC0+c3RhdGUgPSBNRUlfRklMRV9DT05ORUNUSU5HOwotCiAJcmV0ID0gbWVpX2NsX2Nvbm5lY3QoY2wsIE5VTEwpOwogCiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IDA1MzVkMWUuLjEwNGEwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGlzIGZpbGUgc3VwcG9ydHMgdGhlIHVzZXIgc3lzdGVtIGNhbGwgZm9yIGZpbGUgb3BlbiwgY2xvc2UsIG1tYXAsIGV0Yy4KICAqIFRoaXMgYWxzbyBpbmN1ZGVzIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gY29kZS4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4LTIwMTQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTgsNiArNTgsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGdydV9taXNjZGV2OwogCitzdGF0aWMgaW50IGdydV9zdXBwb3J0ZWQodm9pZCkKK3sKKwlyZXR1cm4gaXNfdXZfc3lzdGVtKCkgJiYKKwkJKHV2X2h1Yl9pbmZvLT5odWJfcmV2aXNpb24gPCBVVjNfSFVCX1JFVklTSU9OX0JBU0UpOworfQogCiAvKgogICogZ3J1X3ZtYV9jbG9zZQpAQCAtNTE4LDcgKzUyMyw3IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghaXNfdXZfc3lzdGVtKCkgfHwgKGlzX3V2eF9odWIoKSAmJiAhaXNfdXYyX2h1YigpKSkKKwlpZiAoIWdydV9zdXBwb3J0ZWQoKSkKIAkJcmV0dXJuIDA7CiAKICNpZiBkZWZpbmVkIENPTkZJR19JQTY0CkBAIC01NzMsNyArNTc4LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGdydV9leGl0KHZvaWQpCiB7Ci0JaWYgKCFpc191dl9zeXN0ZW0oKSkKKwlpZiAoIWdydV9zdXBwb3J0ZWQoKSkKIAkJcmV0dXJuOwogCiAJZ3J1X3RlYXJkb3duX3RsYl9pcnFzKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdmV4cHJlc3Mtc3lzY2ZnLmMgYi9kcml2ZXJzL21pc2MvdmV4cHJlc3Mtc3lzY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwNjhlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy92ZXhwcmVzcy1zeXNjZmcuYwpAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIExpbWl0ZWQKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXhwcmVzcy5oPgorCisKKyNkZWZpbmUgU1lTX0NGR0RBVEEJCTB4MAorCisjZGVmaW5lIFNZU19DRkdDVFJMCQkweDQKKyNkZWZpbmUgU1lTX0NGR0NUUkxfU1RBUlQJKDEgPDwgMzEpCisjZGVmaW5lIFNZU19DRkdDVFJMX1dSSVRFCSgxIDw8IDMwKQorI2RlZmluZSBTWVNfQ0ZHQ1RSTF9EQ0MobikJKCgobikgJiAweGYpIDw8IDI2KQorI2RlZmluZSBTWVNfQ0ZHQ1RSTF9GVU5DKG4pCSgoKG4pICYgMHgzZikgPDwgMjApCisjZGVmaW5lIFNZU19DRkdDVFJMX1NJVEUobikJKCgobikgJiAweDMpIDw8IDE2KQorI2RlZmluZSBTWVNfQ0ZHQ1RSTF9QT1NJVElPTihuKQkoKChuKSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIFNZU19DRkdDVFJMX0RFVklDRShuKQkoKChuKSAmIDB4ZmZmKSA8PCAwKQorCisjZGVmaW5lIFNZU19DRkdTVEFUCQkweDgKKyNkZWZpbmUgU1lTX0NGR1NUQVRfRVJSCQkoMSA8PCAxKQorI2RlZmluZSBTWVNfQ0ZHU1RBVF9DT01QTEVURQkoMSA8PCAwKQorCisKK3N0cnVjdCB2ZXhwcmVzc19zeXNjZmcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGxpc3RfaGVhZCBmdW5jczsKK307CisKK3N0cnVjdCB2ZXhwcmVzc19zeXNjZmdfZnVuYyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmcgKnN5c2NmZzsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJaW50IG51bV90ZW1wbGF0ZXM7CisJdTMyIHRlbXBsYXRlWzBdOyAvKiBLZWVwIGl0IGxhc3QhICovCit9OworCisKK3N0YXRpYyBpbnQgdmV4cHJlc3Nfc3lzY2ZnX2V4ZWMoc3RydWN0IHZleHByZXNzX3N5c2NmZ19mdW5jICpmdW5jLAorCQlpbnQgaW5kZXgsIGJvb2wgd3JpdGUsIHUzMiAqZGF0YSkKK3sKKwlzdHJ1Y3QgdmV4cHJlc3Nfc3lzY2ZnICpzeXNjZmcgPSBmdW5jLT5zeXNjZmc7CisJdTMyIGNvbW1hbmQsIHN0YXR1czsKKwlpbnQgdHJpZXM7CisJbG9uZyB0aW1lb3V0OworCisJaWYgKFdBUk5fT04oaW5kZXggPiBmdW5jLT5udW1fdGVtcGxhdGVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21tYW5kID0gcmVhZGwoc3lzY2ZnLT5iYXNlICsgU1lTX0NGR0NUUkwpOworCWlmIChXQVJOX09OKGNvbW1hbmQgJiBTWVNfQ0ZHQ1RSTF9TVEFSVCkpCisJCXJldHVybiAtRUJVU1k7CisKKwljb21tYW5kID0gZnVuYy0+dGVtcGxhdGVbaW5kZXhdOworCWNvbW1hbmQgfD0gU1lTX0NGR0NUUkxfU1RBUlQ7CisJY29tbWFuZCB8PSB3cml0ZSA/IFNZU19DRkdDVFJMX1dSSVRFIDogMDsKKworCS8qIFVzZSBhIGNhbmFyeSBmb3IgcmVhZHMgKi8KKwlpZiAoIXdyaXRlKQorCQkqZGF0YSA9IDB4ZGVhZGJlZWY7CisKKwlkZXZfZGJnKHN5c2NmZy0+ZGV2LCAiZnVuYyAlcCwgY29tbWFuZCAleCwgZGF0YSAleFxuIiwKKwkJCWZ1bmMsIGNvbW1hbmQsICpkYXRhKTsKKwl3cml0ZWwoKmRhdGEsIHN5c2NmZy0+YmFzZSArIFNZU19DRkdEQVRBKTsKKwl3cml0ZWwoMCwgc3lzY2ZnLT5iYXNlICsgU1lTX0NGR1NUQVQpOworCXdyaXRlbChjb21tYW5kLCBzeXNjZmctPmJhc2UgKyBTWVNfQ0ZHQ1RSTCk7CisJbWIoKTsKKworCS8qIFRoZSBvcGVyYXRpb24gY2FuIHRha2UgYWdlcy4uLiBHbyB0byBzbGVlcCwgMTAwdXMgaW5pdGlhbGx5ICovCisJdHJpZXMgPSAxMDA7CisJdGltZW91dCA9IDEwMDsKKwlkbyB7CisJCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGVfdGltZW91dCh1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVJTlRSOworCQl9IGVsc2UgeworCQkJdWRlbGF5KHRpbWVvdXQpOworCQl9CisKKwkJc3RhdHVzID0gcmVhZGwoc3lzY2ZnLT5iYXNlICsgU1lTX0NGR1NUQVQpOworCQlpZiAoc3RhdHVzICYgU1lTX0NGR1NUQVRfRVJSKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHRpbWVvdXQgPiAyMCkKKwkJCXRpbWVvdXQgLT0gMjA7CisJfSB3aGlsZSAoLS10cmllcyAmJiAhKHN0YXR1cyAmIFNZU19DRkdTVEFUX0NPTVBMRVRFKSk7CisJaWYgKFdBUk5fT05fT05DRSghdHJpZXMpKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCWlmICghd3JpdGUpIHsKKwkJKmRhdGEgPSByZWFkbChzeXNjZmctPmJhc2UgKyBTWVNfQ0ZHREFUQSk7CisJCWRldl9kYmcoc3lzY2ZnLT5kZXYsICJmdW5jICVwLCByZWFkIGRhdGEgJXhcbiIsIGZ1bmMsICpkYXRhKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXhwcmVzc19zeXNjZmdfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCXVuc2lnbmVkIGludCAqdmFsKQoreworCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmdfZnVuYyAqZnVuYyA9IGNvbnRleHQ7CisKKwlyZXR1cm4gdmV4cHJlc3Nfc3lzY2ZnX2V4ZWMoZnVuYywgaW5kZXgsIGZhbHNlLCB2YWwpOworfQorCitzdGF0aWMgaW50IHZleHByZXNzX3N5c2NmZ193cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCXVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IHZleHByZXNzX3N5c2NmZ19mdW5jICpmdW5jID0gY29udGV4dDsKKworCXJldHVybiB2ZXhwcmVzc19zeXNjZmdfZXhlYyhmdW5jLCBpbmRleCwgdHJ1ZSwgJnZhbCk7Cit9CisKK3N0cnVjdCByZWdtYXBfY29uZmlnIHZleHByZXNzX3N5c2NmZ19yZWdtYXBfY29uZmlnID0geworCS5sb2NrID0gdmV4cHJlc3NfY29uZmlnX2xvY2ssCisJLnVubG9jayA9IHZleHByZXNzX2NvbmZpZ191bmxvY2ssCisJLnJlZ19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19yZWFkID0gdmV4cHJlc3Nfc3lzY2ZnX3JlYWQsCisJLnJlZ193cml0ZSA9IHZleHByZXNzX3N5c2NmZ193cml0ZSwKKwkucmVnX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0xJVFRMRSwKKwkudmFsX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0xJVFRMRSwKK307CisKKworc3RhdGljIHN0cnVjdCByZWdtYXAgKnZleHByZXNzX3N5c2NmZ19yZWdtYXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmcgKnN5c2NmZyA9IGNvbnRleHQ7CisJc3RydWN0IHZleHByZXNzX3N5c2NmZ19mdW5jICpmdW5jOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwljb25zdCBfX2JlMzIgKnZhbCA9IE5VTEw7CisJX19iZTMyIGVuZXJneV9xdWlya1s0XTsKKwlpbnQgbnVtOworCXUzMiBzaXRlLCBwb3NpdGlvbiwgZGNjOworCWludCBpOworCisJaWYgKGRldi0+b2Zfbm9kZSkgeworCQlpbnQgZXJyID0gdmV4cHJlc3NfY29uZmlnX2dldF90b3BvKGRldi0+b2Zfbm9kZSwgJnNpdGUsCisJCQkJJnBvc2l0aW9uLCAmZGNjKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkZXYtPm9mX25vZGUsCisJCQkJImFybSx2ZXhwcmVzcy1zeXNyZWcsZnVuYyIsIE5VTEwpOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCQludW0gPSBwcm9wLT5sZW5ndGggLyBzaXplb2YodTMyKSAvIDI7CisJCXZhbCA9IHByb3AtPnZhbHVlOworCX0gZWxzZSB7CisJCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDEgfHwKKwkJCQlwZGV2LT5yZXNvdXJjZVswXS5mbGFncyAhPSBJT1JFU09VUkNFX0JVUykKKwkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJCXNpdGUgPSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwkJaWYgKHNpdGUgPT0gVkVYUFJFU1NfU0lURV9NQVNURVIpCisJCQlzaXRlID0gdmV4cHJlc3NfY29uZmlnX2dldF9tYXN0ZXIoKTsKKwkJcG9zaXRpb24gPSAwOworCQlkY2MgPSAwOworCQludW0gPSAxOworCX0KKworCS8qCisJICogImFybSx2ZXhwcmVzcy1lbmVyZ3kiIGZ1bmN0aW9uIHVzZWQgdG8gYmUgZGVzY3JpYmVkCisJICogYnkgaXRzIGZpcnN0IGRldmljZSBvbmx5LCBub3cgaXQgcmVxdWlyZXMgYm90aAorCSAqLworCWlmIChudW0gPT0gMSAmJiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPm9mX25vZGUsCisJCQkiYXJtLHZleHByZXNzLWVuZXJneSIpKSB7CisJCW51bSA9IDI7CisJCWVuZXJneV9xdWlya1swXSA9ICp2YWw7CisJCWVuZXJneV9xdWlya1syXSA9ICp2YWwrKzsKKwkJZW5lcmd5X3F1aXJrWzFdID0gKnZhbDsKKwkJZW5lcmd5X3F1aXJrWzNdID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHVwKHZhbCkgKyAxKTsKKwkJdmFsID0gZW5lcmd5X3F1aXJrOworCX0KKworCWZ1bmMgPSBremFsbG9jKHNpemVvZigqZnVuYykgKyBzaXplb2YoKmZ1bmMtPnRlbXBsYXRlKSAqIG51bSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghZnVuYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmdW5jLT5zeXNjZmcgPSBzeXNjZmc7CisJZnVuYy0+bnVtX3RlbXBsYXRlcyA9IG51bTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQl1MzIgZnVuY3Rpb24sIGRldmljZTsKKworCQlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCQlmdW5jdGlvbiA9IGJlMzJfdG9fY3B1cCh2YWwrKyk7CisJCQlkZXZpY2UgPSBiZTMyX3RvX2NwdXAodmFsKyspOworCQl9IGVsc2UgeworCQkJZnVuY3Rpb24gPSBwZGV2LT5yZXNvdXJjZVswXS5lbmQ7CisJCQlkZXZpY2UgPSBwZGV2LT5pZDsKKwkJfQorCisJCWRldl9kYmcoZGV2LCAiZnVuYyAlcDogJXUvJXUvJXUvJXUvJXVcbiIsCisJCQkJZnVuYywgc2l0ZSwgcG9zaXRpb24sIGRjYywKKwkJCQlmdW5jdGlvbiwgZGV2aWNlKTsKKworCQlmdW5jLT50ZW1wbGF0ZVtpXSA9IFNZU19DRkdDVFJMX0RDQyhkY2MpOworCQlmdW5jLT50ZW1wbGF0ZVtpXSB8PSBTWVNfQ0ZHQ1RSTF9TSVRFKHNpdGUpOworCQlmdW5jLT50ZW1wbGF0ZVtpXSB8PSBTWVNfQ0ZHQ1RSTF9QT1NJVElPTihwb3NpdGlvbik7CisJCWZ1bmMtPnRlbXBsYXRlW2ldIHw9IFNZU19DRkdDVFJMX0ZVTkMoZnVuY3Rpb24pOworCQlmdW5jLT50ZW1wbGF0ZVtpXSB8PSBTWVNfQ0ZHQ1RSTF9ERVZJQ0UoZGV2aWNlKTsKKwl9CisKKwl2ZXhwcmVzc19zeXNjZmdfcmVnbWFwX2NvbmZpZy5tYXhfcmVnaXN0ZXIgPSBudW0gLSAxOworCisJZnVuYy0+cmVnbWFwID0gcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBmdW5jLAorCQkJJnZleHByZXNzX3N5c2NmZ19yZWdtYXBfY29uZmlnKTsKKworCWlmIChJU19FUlIoZnVuYy0+cmVnbWFwKSkKKwkJa2ZyZWUoZnVuYyk7CisJZWxzZQorCQlsaXN0X2FkZCgmZnVuYy0+bGlzdCwgJnN5c2NmZy0+ZnVuY3MpOworCisJcmV0dXJuIGZ1bmMtPnJlZ21hcDsKK30KKworc3RhdGljIHZvaWQgdmV4cHJlc3Nfc3lzY2ZnX3JlZ21hcF9leGl0KHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdmV4cHJlc3Nfc3lzY2ZnICpzeXNjZmcgPSBjb250ZXh0OworCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmdfZnVuYyAqZnVuYywgKnRtcDsKKworCXJlZ21hcF9leGl0KHJlZ21hcCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnVuYywgdG1wLCAmc3lzY2ZnLT5mdW5jcywgbGlzdCkgeworCQlpZiAoZnVuYy0+cmVnbWFwID09IHJlZ21hcCkgeworCQkJbGlzdF9kZWwoJnN5c2NmZy0+ZnVuY3MpOworCQkJa2ZyZWUoZnVuYyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlX29wcyB2ZXhwcmVzc19zeXNjZmdfYnJpZGdlX29wcyA9IHsKKwkucmVnbWFwX2luaXQgPSB2ZXhwcmVzc19zeXNjZmdfcmVnbWFwX2luaXQsCisJLnJlZ21hcF9leGl0ID0gdmV4cHJlc3Nfc3lzY2ZnX3JlZ21hcF9leGl0LAorfTsKKworCisvKiBOb24tRFQgaGFjaywgdG8gYmUgZ29uZS4uLiAqLworc3RhdGljIHN0cnVjdCBkZXZpY2UgKnZleHByZXNzX3N5c2NmZ19icmlkZ2U7CisKK2ludCB2ZXhwcmVzc19zeXNjZmdfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcGRldi0+ZGV2LnBhcmVudCA9IHZleHByZXNzX3N5c2NmZ19icmlkZ2U7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCisKK2ludCB2ZXhwcmVzc19zeXNjZmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdmV4cHJlc3Nfc3lzY2ZnICpzeXNjZmc7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRldmljZSAqYnJpZGdlOworCisJc3lzY2ZnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqc3lzY2ZnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzeXNjZmcpCisJCXJldHVybiAtRU5PTUVNOworCXN5c2NmZy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlJTklUX0xJU1RfSEVBRCgmc3lzY2ZnLT5mdW5jcyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlzeXNjZmctPmJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXN5c2NmZy0+YmFzZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBNdXN0IHVzZSBkZXYucGFyZW50IChNRkQpLCBhcyB0aGF0J3Mgd2hlcmUgRFQgcGhhbmRsZSBwb2ludHMgYXQuLi4gKi8KKwlicmlkZ2UgPSB2ZXhwcmVzc19jb25maWdfYnJpZGdlX3JlZ2lzdGVyKHBkZXYtPmRldi5wYXJlbnQsCisJCQkmdmV4cHJlc3Nfc3lzY2ZnX2JyaWRnZV9vcHMsIHN5c2NmZyk7CisJaWYgKElTX0VSUihicmlkZ2UpKQorCQlyZXR1cm4gUFRSX0VSUihicmlkZ2UpOworCisJLyogTm9uLURUIGNhc2UgKi8KKwlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQorCQl2ZXhwcmVzc19zeXNjZmdfYnJpZGdlID0gYnJpZGdlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHZleHByZXNzX3N5c2NmZ19pZF90YWJsZVtdID0geworCXsgInZleHByZXNzLXN5c2NmZyIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZXhwcmVzc19zeXNjZmdfZHJpdmVyID0geworCS5kcml2ZXIubmFtZSA9ICJ2ZXhwcmVzcy1zeXNjZmciLAorCS5pZF90YWJsZSA9IHZleHByZXNzX3N5c2NmZ19pZF90YWJsZSwKKwkucHJvYmUgPSB2ZXhwcmVzc19zeXNjZmdfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2ZXhwcmVzc19zeXNjZmdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZleHByZXNzX3N5c2NmZ19kcml2ZXIpOworfQorY29yZV9pbml0Y2FsbCh2ZXhwcmVzc19zeXNjZmdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDc3MWM2MGEuLmEwODRlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjMsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2xvdC1ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgpAQCAtMzY0LDcgKzM2Niw2IEBACiAjaWZkZWYgQ09ORklHX0RNQV9FTkdJTkUKIHN0YXRpYyB2b2lkIG1tY2lfZG1hX3NldHVwKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QpCiB7Ci0Jc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGhvc3QtPnBsYXQ7CiAJY29uc3QgY2hhciAqcnhuYW1lLCAqdHhuYW1lOwogCWRtYV9jYXBfbWFza190IG1hc2s7CiAKQEAgLTM3OCwyNSArMzc5LDYgQEAKIAlkbWFfY2FwX3plcm8obWFzayk7CiAJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKIAotCWlmIChwbGF0ICYmIHBsYXQtPmRtYV9maWx0ZXIpIHsKLQkJaWYgKCFob3N0LT5kbWFfcnhfY2hhbm5lbCAmJiBwbGF0LT5kbWFfcnhfcGFyYW0pIHsKLQkJCWhvc3QtPmRtYV9yeF9jaGFubmVsID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLAotCQkJCQkJCSAgIHBsYXQtPmRtYV9maWx0ZXIsCi0JCQkJCQkJICAgcGxhdC0+ZG1hX3J4X3BhcmFtKTsKLQkJCS8qIEUuZyBpZiBubyBETUEgaGFyZHdhcmUgaXMgcHJlc2VudCAqLwotCQkJaWYgKCFob3N0LT5kbWFfcnhfY2hhbm5lbCkKLQkJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIm5vIFJYIERNQSBjaGFubmVsXG4iKTsKLQkJfQotCi0JCWlmICghaG9zdC0+ZG1hX3R4X2NoYW5uZWwgJiYgcGxhdC0+ZG1hX3R4X3BhcmFtKSB7Ci0JCQlob3N0LT5kbWFfdHhfY2hhbm5lbCA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywKLQkJCQkJCQkgICBwbGF0LT5kbWFfZmlsdGVyLAotCQkJCQkJCSAgIHBsYXQtPmRtYV90eF9wYXJhbSk7Ci0JCQlpZiAoIWhvc3QtPmRtYV90eF9jaGFubmVsKQotCQkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgIm5vIFRYIERNQSBjaGFubmVsXG4iKTsKLQkJfQotCX0KLQogCS8qCiAJICogSWYgb25seSBhbiBSWCBjaGFubmVsIGlzIHNwZWNpZmllZCwgdGhlIGRyaXZlciB3aWxsCiAJICogYXR0ZW1wdCB0byB1c2UgaXQgYmlkaXJlY3Rpb25hbGx5LCBob3dldmVyIGlmIGl0IGlzCkBAIC00NDQsMTEgKzQyNiw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWNpX2RtYV9yZWxlYXNlKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QpCiB7Ci0Jc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGhvc3QtPnBsYXQ7Ci0KIAlpZiAoaG9zdC0+ZG1hX3J4X2NoYW5uZWwpCiAJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+ZG1hX3J4X2NoYW5uZWwpOwotCWlmIChob3N0LT5kbWFfdHhfY2hhbm5lbCAmJiBwbGF0LT5kbWFfdHhfcGFyYW0pCisJaWYgKGhvc3QtPmRtYV90eF9jaGFubmVsKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYV90eF9jaGFubmVsKTsKIAlob3N0LT5kbWFfcnhfY2hhbm5lbCA9IGhvc3QtPmRtYV90eF9jaGFubmVsID0gTlVMTDsKIH0KQEAgLTEyODUsNyArMTI2NSw3IEBACiAJCSAqIGluZGljYXRpbmcgc2lnbmFsIGRpcmVjdGlvbiBmb3IgdGhlIHNpZ25hbHMgaW4KIAkJICogdGhlIFNEL01NQyBidXMgYW5kIGZlZWRiYWNrLWNsb2NrIHVzYWdlLgogCQkgKi8KLQkJcHdyIHw9IGhvc3QtPnBsYXQtPnNpZ2RpcjsKKwkJcHdyIHw9IGhvc3QtPnB3cl9yZWdfYWRkOwogCiAJCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCiAJCQlwd3IgJj0gfk1DSV9TVF9EQVRBNzRESVJFTjsKQEAgLTEzMjYsMzUgKzEzMDYsMTggQEAKIAlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChtbWNfZGV2KG1tYykpOwogfQogCi1zdGF0aWMgaW50IG1tY2lfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQotewotCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCi0JaWYgKGhvc3QtPmdwaW9fd3AgPT0gLUVOT1NZUykKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoaG9zdC0+Z3Bpb193cCk7Ci19Ci0KIHN0YXRpYyBpbnQgbW1jaV9nZXRfY2Qoc3RydWN0IG1tY19ob3N0ICptbWMpCiB7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGhvc3QtPnBsYXQ7Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gbW1jX2dwaW9fZ2V0X2NkKG1tYyk7CiAKLQlpZiAoaG9zdC0+Z3Bpb19jZCA9PSAtRU5PU1lTKSB7CisJaWYgKHN0YXR1cyA9PSAtRU5PU1lTKSB7CiAJCWlmICghcGxhdC0+c3RhdHVzKQogCQkJcmV0dXJuIDE7IC8qIEFzc3VtZSBhbHdheXMgcHJlc2VudCAqLwogCiAJCXN0YXR1cyA9IHBsYXQtPnN0YXR1cyhtbWNfZGV2KGhvc3QtPm1tYykpOwotCX0gZWxzZQotCQlzdGF0dXMgPSAhIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGhvc3QtPmdwaW9fY2QpCi0JCQleIHBsYXQtPmNkX2ludmVydDsKLQotCS8qCi0JICogVXNlIHBvc2l0aXZlIGxvZ2ljIHRocm91Z2hvdXQgLSBzdGF0dXMgaXMgemVybyBmb3Igbm8gY2FyZCwKLQkgKiBub24temVybyBmb3IgY2FyZCBpbnNlcnRlZC4KLQkgKi8KKwl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTM5MSw3MCArMTM1NCw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX2NkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IGRldl9pZDsKLQotCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQogc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbW1jaV9vcHMgPSB7CiAJLnJlcXVlc3QJPSBtbWNpX3JlcXVlc3QsCiAJLnByZV9yZXEJPSBtbWNpX3ByZV9yZXF1ZXN0LAogCS5wb3N0X3JlcQk9IG1tY2lfcG9zdF9yZXF1ZXN0LAogCS5zZXRfaW9zCT0gbW1jaV9zZXRfaW9zLAotCS5nZXRfcm8JCT0gbW1jaV9nZXRfcm8sCisJLmdldF9ybwkJPSBtbWNfZ3Bpb19nZXRfcm8sCiAJLmdldF9jZAkJPSBtbWNpX2dldF9jZCwKIAkuc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoID0gbW1jaV9zaWdfdm9sdF9zd2l0Y2gsCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgdm9pZCBtbWNpX2R0X3BvcHVsYXRlX2dlbmVyaWNfcGRhdGEoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCitzdGF0aWMgaW50IG1tY2lfb2ZfcGFyc2Uoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG1tY19ob3N0ICptbWMpCiB7Ci0JaW50IGJ1c193aWR0aCA9IDA7CisJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IHJldCA9IG1tY19vZl9wYXJzZShtbWMpOwogCi0JcGRhdGEtPmdwaW9fd3AgPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgIndwLWdwaW9zIiwgMCk7Ci0JcGRhdGEtPmdwaW9fY2QgPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgImNkLWdwaW9zIiwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJjZC1pbnZlcnRlZCIsIE5VTEwpKQotCQlwZGF0YS0+Y2RfaW52ZXJ0ID0gdHJ1ZTsKLQllbHNlCi0JCXBkYXRhLT5jZF9pbnZlcnQgPSBmYWxzZTsKLQotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWF4LWZyZXF1ZW5jeSIsICZwZGF0YS0+Zl9tYXgpOwotCWlmICghcGRhdGEtPmZfbWF4KQotCQlwcl93YXJuKCIlcyBoYXMgbm8gJ21heC1mcmVxdWVuY3knIHByb3BlcnR5XG4iLCBucC0+ZnVsbF9uYW1lKTsKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic3Qsc2lnLWRpci1kYXQwIiwgTlVMTCkpCisJCWhvc3QtPnB3cl9yZWdfYWRkIHw9IE1DSV9TVF9EQVRBMERJUkVOOworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzdCxzaWctZGlyLWRhdDIiLCBOVUxMKSkKKwkJaG9zdC0+cHdyX3JlZ19hZGQgfD0gTUNJX1NUX0RBVEEyRElSRU47CisJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgInN0LHNpZy1kaXItZGF0MzEiLCBOVUxMKSkKKwkJaG9zdC0+cHdyX3JlZ19hZGQgfD0gTUNJX1NUX0RBVEEzMURJUkVOOworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzdCxzaWctZGlyLWRhdDc0IiwgTlVMTCkpCisJCWhvc3QtPnB3cl9yZWdfYWRkIHw9IE1DSV9TVF9EQVRBNzRESVJFTjsKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic3Qsc2lnLWRpci1jbWQiLCBOVUxMKSkKKwkJaG9zdC0+cHdyX3JlZ19hZGQgfD0gTUNJX1NUX0NNRERJUkVOOworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzdCxzaWctcGluLWZiY2xrIiwgTlVMTCkpCisJCWhvc3QtPnB3cl9yZWdfYWRkIHw9IE1DSV9TVF9GQkNMS0VOOwogCiAJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgIm1tYy1jYXAtbW1jLWhpZ2hzcGVlZCIsIE5VTEwpKQotCQlwZGF0YS0+Y2FwYWJpbGl0aWVzIHw9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKIAlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW1jLWNhcC1zZC1oaWdoc3BlZWQiLCBOVUxMKSkKLQkJcGRhdGEtPmNhcGFiaWxpdGllcyB8PSBNTUNfQ0FQX1NEX0hJR0hTUEVFRDsKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfU0RfSElHSFNQRUVEOwogCi0Jb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJidXMtd2lkdGgiLCAmYnVzX3dpZHRoKTsKLQlzd2l0Y2ggKGJ1c193aWR0aCkgewotCWNhc2UgMCA6Ci0JCS8qIE5vIGJ1cy13aWR0aCBzdXBwbGllZC4gKi8KLQkJYnJlYWs7Ci0JY2FzZSA0IDoKLQkJcGRhdGEtPmNhcGFiaWxpdGllcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7Ci0JCWJyZWFrOwotCWNhc2UgOCA6Ci0JCXBkYXRhLT5jYXBhYmlsaXRpZXMgfD0gTU1DX0NBUF84X0JJVF9EQVRBOwotCQlicmVhazsKLQlkZWZhdWx0IDoKLQkJcHJfd2FybigiJXM6IFVuc3VwcG9ydGVkIGJ1cyB3aWR0aFxuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0JfQorCXJldHVybiAwOwogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIG1tY2lfZHRfcG9wdWxhdGVfZ2VuZXJpY19wZGF0YShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCQlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlyZXR1cm47Ci19Ci0jZW5kaWYKIAogc3RhdGljIGludCBtbWNpX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LAogCWNvbnN0IHN0cnVjdCBhbWJhX2lkICppZCkKQEAgLTE0NzgsMjYgKzE0MTUsMTcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChucCkKLQkJbW1jaV9kdF9wb3B1bGF0ZV9nZW5lcmljX3BkYXRhKG5wLCBwbGF0KTsKLQotCXJldCA9IGFtYmFfcmVxdWVzdF9yZWdpb25zKGRldiwgRFJJVkVSX05BTUUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNpX2hvc3QpLCAmZGV2LT5kZXYpOwotCWlmICghbW1jKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gcmVsX3JlZ2lvbnM7Ci0JfQorCWlmICghbW1jKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG1tY2lfb2ZfcGFyc2UobnAsIG1tYyk7CisJaWYgKHJldCkKKwkJZ290byBob3N0X2ZyZWU7CiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgPSBtbWM7CiAKLQlob3N0LT5ncGlvX3dwID0gLUVOT1NZUzsKLQlob3N0LT5ncGlvX2NkID0gLUVOT1NZUzsKLQlob3N0LT5ncGlvX2NkX2lycSA9IC0xOwotCiAJaG9zdC0+aHdfZGVzaWduZXIgPSBhbWJhX21hbmYoZGV2KTsKIAlob3N0LT5od19yZXZpc2lvbiA9IGFtYmFfcmV2KGRldik7CiAJZGV2X2RiZyhtbWNfZGV2KG1tYyksICJkZXNpZ25lciBJRCA9IDB4JTAyeFxuIiwgaG9zdC0+aHdfZGVzaWduZXIpOwpAQCAtMTUyOSwxMCArMTQ1NywxMSBAQAogCQlkZXZfZGJnKG1tY19kZXYobW1jKSwgImV2ZW50dWFsIG1jbGsgcmF0ZTogJXUgSHpcbiIsCiAJCQlob3N0LT5tY2xrKTsKIAl9CisKIAlob3N0LT5waHliYXNlID0gZGV2LT5yZXMuc3RhcnQ7Ci0JaG9zdC0+YmFzZSA9IGlvcmVtYXAoZGV2LT5yZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJmRldi0+cmVzKSk7Ci0JaWYgKCFob3N0LT5iYXNlKSB7Ci0JCXJldCA9IC1FTk9NRU07CisJaG9zdC0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmZGV2LT5kZXYsICZkZXYtPnJlcyk7CisJaWYgKElTX0VSUihob3N0LT5iYXNlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmJhc2UpOwogCQlnb3RvIGNsa19kaXNhYmxlOwogCX0KIApAQCAtMTU0NiwxNSArMTQ3NSwxMyBAQAogCWVsc2UKIAkJbW1jLT5mX21pbiA9IERJVl9ST1VORF9VUChob3N0LT5tY2xrLCA1MTIpOwogCS8qCi0JICogSWYgdGhlIHBsYXRmb3JtIGRhdGEgc3VwcGxpZXMgYSBtYXhpbXVtIG9wZXJhdGluZwotCSAqIGZyZXF1ZW5jeSwgdGhpcyB0YWtlcyBwcmVjZWRlbmNlLiBFbHNlLCB3ZSBmYWxsIGJhY2sKLQkgKiB0byB1c2luZyB0aGUgbW9kdWxlIHBhcmFtZXRlciwgd2hpY2ggaGFzIGEgKGxvdykKLQkgKiBkZWZhdWx0IHZhbHVlIGluIGNhc2UgaXQgaXMgbm90IHNwZWNpZmllZC4gRWl0aGVyCi0JICogdmFsdWUgbXVzdCBub3QgZXhjZWVkIHRoZSBjbG9jayByYXRlIGludG8gdGhlIGJsb2NrLAotCSAqIG9mIGNvdXJzZS4KKwkgKiBJZiBubyBtYXhpbXVtIG9wZXJhdGluZyBmcmVxdWVuY3kgaXMgc3VwcGxpZWQsIGZhbGwgYmFjayB0byB1c2UKKwkgKiB0aGUgbW9kdWxlIHBhcmFtZXRlciwgd2hpY2ggaGFzIGEgKGxvdykgZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIGl0CisJICogaXMgbm90IHNwZWNpZmllZC4gRWl0aGVyIHZhbHVlIG11c3Qgbm90IGV4Y2VlZCB0aGUgY2xvY2sgcmF0ZSBpbnRvCisJICogdGhlIGJsb2NrLCBvZiBjb3Vyc2UuCiAJICovCi0JaWYgKHBsYXQtPmZfbWF4KQotCQltbWMtPmZfbWF4ID0gbWluKGhvc3QtPm1jbGssIHBsYXQtPmZfbWF4KTsKKwlpZiAobW1jLT5mX21heCkKKwkJbW1jLT5mX21heCA9IG1pbihob3N0LT5tY2xrLCBtbWMtPmZfbWF4KTsKIAllbHNlCiAJCW1tYy0+Zl9tYXggPSBtaW4oaG9zdC0+bWNsaywgZm1heCk7CiAJZGV2X2RiZyhtbWNfZGV2KG1tYyksICJjbG9ja2luZyBibG9jayBhdCAldSBIelxuIiwgbW1jLT5mX21heCk7CkBAIC0xNTY2LDggKzE0OTMsMTUgQEAKIAllbHNlIGlmIChwbGF0LT5vY3JfbWFzaykKIAkJZGV2X3dhcm4obW1jX2RldihtbWMpLCAiUGxhdGZvcm0gT0NSIG1hc2sgaXMgaWdub3JlZFxuIik7CiAKLQltbWMtPmNhcHMgPSBwbGF0LT5jYXBhYmlsaXRpZXM7Ci0JbW1jLT5jYXBzMiA9IHBsYXQtPmNhcGFiaWxpdGllczI7CisJLyogRFQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHBsYXRmb3JtIGRhdGEuICovCisJaWYgKCFucCkgeworCQlpZiAoIXBsYXQtPmNkX2ludmVydCkKKwkJCW1tYy0+Y2FwczIgfD0gTU1DX0NBUDJfQ0RfQUNUSVZFX0hJR0g7CisJCW1tYy0+Y2FwczIgfD0gTU1DX0NBUDJfUk9fQUNUSVZFX0hJR0g7CisJfQorCisJLyogV2Ugc3VwcG9ydCB0aGVzZSBjYXBhYmlsaXRpZXMuICovCisJbW1jLT5jYXBzIHw9IE1NQ19DQVBfQ01EMjM7CiAKIAlpZiAodmFyaWFudC0+YnVzeV9kZXRlY3QpIHsKIAkJbW1jaV9vcHMuY2FyZF9idXN5ID0gbW1jaV9jYXJkX2J1c3k7CkBAIC0xNTc5LDcgKzE1MTMsNyBAQAogCW1tYy0+b3BzID0gJm1tY2lfb3BzOwogCiAJLyogV2Ugc3VwcG9ydCB0aGVzZSBQTSBjYXBhYmlsaXRpZXMuICovCi0JbW1jLT5wbV9jYXBzID0gTU1DX1BNX0tFRVBfUE9XRVI7CisJbW1jLT5wbV9jYXBzIHw9IE1NQ19QTV9LRUVQX1BPV0VSOwogCiAJLyoKIAkgKiBXZSBjYW4gZG8gU0dJTwpAQCAtMTYxNiw2MiArMTU1MCwzMCBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0sxKTsKIAl3cml0ZWwoMHhmZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCi0JaWYgKHBsYXQtPmdwaW9fY2QgPT0gLUVQUk9CRV9ERUZFUikgewotCQlyZXQgPSAtRVBST0JFX0RFRkVSOwotCQlnb3RvIGVycl9ncGlvX2NkOworCS8qIElmIERULCBjZC93cCBncGlvcyBtdXN0IGJlIHN1cHBsaWVkIHRocm91Z2ggaXQuICovCisJaWYgKCFucCAmJiBncGlvX2lzX3ZhbGlkKHBsYXQtPmdwaW9fY2QpKSB7CisJCXJldCA9IG1tY19ncGlvX3JlcXVlc3RfY2QobW1jLCBwbGF0LT5ncGlvX2NkLCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQotCWlmIChncGlvX2lzX3ZhbGlkKHBsYXQtPmdwaW9fY2QpKSB7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdChwbGF0LT5ncGlvX2NkLCBEUklWRVJfTkFNRSAiIChjZCkiKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGxhdC0+Z3Bpb19jZCk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCWhvc3QtPmdwaW9fY2QgPSBwbGF0LT5ncGlvX2NkOwotCQllbHNlIGlmIChyZXQgIT0gLUVOT1NZUykKLQkJCWdvdG8gZXJyX2dwaW9fY2Q7Ci0KLQkJLyoKLQkJICogQSBncGlvIHBpbiB0aGF0IHdpbGwgZGV0ZWN0IGNhcmRzIHdoZW4gaW5zZXJ0ZWQgYW5kIHJlbW92ZWQKLQkJICogd2lsbCBtb3N0IGxpa2VseSB3YW50IHRvIHRyaWdnZXIgb24gdGhlIGVkZ2VzIGlmIGl0IGlzCi0JCSAqIDAgd2hlbiBlamVjdGVkIGFuZCAxIHdoZW4gaW5zZXJ0ZWQgKG9yIG11dGF0aXMgbXV0YW5kaXMKLQkJICogZm9yIHRoZSBpbnZlcnRlZCBjYXNlKSBzbyB3ZSByZXF1ZXN0IHRyaWdnZXJzIG9uIGJvdGgKLQkJICogZWRnZXMuCi0JCSAqLwotCQlyZXQgPSByZXF1ZXN0X2FueV9jb250ZXh0X2lycShncGlvX3RvX2lycShwbGF0LT5ncGlvX2NkKSwKLQkJCQltbWNpX2NkX2lycSwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkJRFJJVkVSX05BTUUgIiAoY2QpIiwgaG9zdCk7Ci0JCWlmIChyZXQgPj0gMCkKLQkJCWhvc3QtPmdwaW9fY2RfaXJxID0gZ3Bpb190b19pcnEocGxhdC0+Z3Bpb19jZCk7Ci0JfQotCWlmIChwbGF0LT5ncGlvX3dwID09IC1FUFJPQkVfREVGRVIpIHsKLQkJcmV0ID0gLUVQUk9CRV9ERUZFUjsKLQkJZ290byBlcnJfZ3Bpb193cDsKLQl9Ci0JaWYgKGdwaW9faXNfdmFsaWQocGxhdC0+Z3Bpb193cCkpIHsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBsYXQtPmdwaW9fd3AsIERSSVZFUl9OQU1FICIgKHdwKSIpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwbGF0LT5ncGlvX3dwKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJaG9zdC0+Z3Bpb193cCA9IHBsYXQtPmdwaW9fd3A7Ci0JCWVsc2UgaWYgKHJldCAhPSAtRU5PU1lTKQotCQkJZ290byBlcnJfZ3Bpb193cDsKKwlpZiAoIW5wICYmIGdwaW9faXNfdmFsaWQocGxhdC0+Z3Bpb193cCkpIHsKKwkJcmV0ID0gbW1jX2dwaW9fcmVxdWVzdF9ybyhtbWMsIHBsYXQtPmdwaW9fd3ApOworCQlpZiAocmV0KQorCQkJZ290byBjbGtfZGlzYWJsZTsKIAl9CiAKLQlpZiAoKGhvc3QtPnBsYXQtPnN0YXR1cyB8fCBob3N0LT5ncGlvX2NkICE9IC1FTk9TWVMpCi0JICAgICYmIGhvc3QtPmdwaW9fY2RfaXJxIDwgMCkKLQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBtbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FICIgKGNtZCkiLCBob3N0KTsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZkZXYtPmRldiwgZGV2LT5pcnFbMF0sIG1tY2lfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCURSSVZFUl9OQU1FICIgKGNtZCkiLCBob3N0KTsKIAlpZiAocmV0KQotCQlnb3RvIHVubWFwOworCQlnb3RvIGNsa19kaXNhYmxlOwogCiAJaWYgKCFkZXYtPmlycVsxXSkKIAkJaG9zdC0+c2luZ2xlaXJxID0gdHJ1ZTsKIAllbHNlIHsKLQkJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMV0sIG1tY2lfcGlvX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJICBEUklWRVJfTkFNRSAiIChwaW8pIiwgaG9zdCk7CisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJmRldi0+ZGV2LCBkZXYtPmlycVsxXSwgbW1jaV9waW9faXJxLAorCQkJCUlSUUZfU0hBUkVELCBEUklWRVJfTkFNRSAiIChwaW8pIiwgaG9zdCk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIGlycTBfZnJlZTsKKwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCiAJd3JpdGVsKE1DSV9JUlFFTkFCTEUsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOwpAQCAtMTY5MywyNSArMTU5NSwxMCBAQAogCiAJcmV0dXJuIDA7CiAKLSBpcnEwX2ZyZWU6Ci0JZnJlZV9pcnEoZGV2LT5pcnFbMF0sIGhvc3QpOwotIHVubWFwOgotCWlmIChob3N0LT5ncGlvX3dwICE9IC1FTk9TWVMpCi0JCWdwaW9fZnJlZShob3N0LT5ncGlvX3dwKTsKLSBlcnJfZ3Bpb193cDoKLQlpZiAoaG9zdC0+Z3Bpb19jZF9pcnEgPj0gMCkKLQkJZnJlZV9pcnEoaG9zdC0+Z3Bpb19jZF9pcnEsIGhvc3QpOwotCWlmIChob3N0LT5ncGlvX2NkICE9IC1FTk9TWVMpCi0JCWdwaW9fZnJlZShob3N0LT5ncGlvX2NkKTsKLSBlcnJfZ3Bpb19jZDoKLQlpb3VubWFwKGhvc3QtPmJhc2UpOwogIGNsa19kaXNhYmxlOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5jbGspOwogIGhvc3RfZnJlZToKIAltbWNfZnJlZV9ob3N0KG1tYyk7Ci0gcmVsX3JlZ2lvbnM6Ci0JYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKLSBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTczNyw5MiArMTYyNCw0NiBAQAogCQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lEQVRBQ1RSTCk7CiAKIAkJbW1jaV9kbWFfcmVsZWFzZShob3N0KTsKLQkJZnJlZV9pcnEoZGV2LT5pcnFbMF0sIGhvc3QpOwotCQlpZiAoIWhvc3QtPnNpbmdsZWlycSkKLQkJCWZyZWVfaXJxKGRldi0+aXJxWzFdLCBob3N0KTsKLQotCQlpZiAoaG9zdC0+Z3Bpb193cCAhPSAtRU5PU1lTKQotCQkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fd3ApOwotCQlpZiAoaG9zdC0+Z3Bpb19jZF9pcnEgPj0gMCkKLQkJCWZyZWVfaXJxKGhvc3QtPmdwaW9fY2RfaXJxLCBob3N0KTsKLQkJaWYgKGhvc3QtPmdwaW9fY2QgIT0gLUVOT1NZUykKLQkJCWdwaW9fZnJlZShob3N0LT5ncGlvX2NkKTsKLQotCQlpb3VubWFwKGhvc3QtPmJhc2UpOwogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Y2xrKTsKLQogCQltbWNfZnJlZV9ob3N0KG1tYyk7Ci0KLQkJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19TVVNQRU5ECi1zdGF0aWMgaW50IG1tY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFtYmFfZGV2aWNlICphZGV2ID0gdG9fYW1iYV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGFtYmFfZ2V0X2RydmRhdGEoYWRldik7Ci0KLQlpZiAobW1jKSB7Ci0JCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCQlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7Ci0JCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFtYmFfZGV2aWNlICphZGV2ID0gdG9fYW1iYV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGFtYmFfZ2V0X2RydmRhdGEoYWRldik7Ci0KLQlpZiAobW1jKSB7Ci0JCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCQl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7Ci0JCXBtX3J1bnRpbWVfcHV0KGRldik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBtbWNpX3NhdmUoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGhvc3QtPnZhcmlhbnQtPnB3cnJlZ19ub3Bvd2VyKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAotCQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCWlmIChob3N0LT52YXJpYW50LT5wd3JyZWdfbm9wb3dlcikgewogCQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lEQVRBQ1RSTCk7CiAJCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSVBPV0VSKTsKIAkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOwotCQltbWNpX3JlZ19kZWxheShob3N0KTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAJfQorCW1tY2lfcmVnX2RlbGF5KGhvc3QpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtbWNpX3Jlc3RvcmUoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGhvc3QtPnZhcmlhbnQtPnB3cnJlZ19ub3Bvd2VyKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAorCWlmIChob3N0LT52YXJpYW50LT5wd3JyZWdfbm9wb3dlcikgewogCQl3cml0ZWwoaG9zdC0+Y2xrX3JlZywgaG9zdC0+YmFzZSArIE1NQ0lDTE9DSyk7CiAJCXdyaXRlbChob3N0LT5kYXRhY3RybF9yZWcsIGhvc3QtPmJhc2UgKyBNTUNJREFUQUNUUkwpOwogCQl3cml0ZWwoaG9zdC0+cHdyX3JlZywgaG9zdC0+YmFzZSArIE1NQ0lQT1dFUik7Ci0JCXdyaXRlbChNQ0lfSVJRRU5BQkxFLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKLQkJbW1jaV9yZWdfZGVsYXkoaG9zdCk7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCX0KKwl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CisJbW1jaV9yZWdfZGVsYXkoaG9zdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgbW1jaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTg1Nyw4ICsxNjk4LDkgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbW1jaV9kZXZfcG1fb3BzID0gewotCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKG1tY2lfc3VzcGVuZCwgbW1jaV9yZXN1bWUpCi0JU0VUX1JVTlRJTUVfUE1fT1BTKG1tY2lfcnVudGltZV9zdXNwZW5kLCBtbWNpX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCwKKwkJCQlwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkKKwlTRVRfUE1fUlVOVElNRV9QTV9PUFMobW1jaV9ydW50aW1lX3N1c3BlbmQsIG1tY2lfcnVudGltZV9yZXN1bWUsIE5VTEwpCiB9OwogCiBzdGF0aWMgc3RydWN0IGFtYmFfaWQgbW1jaV9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKaW5kZXggNThiMWI4OC4uMzQ3ZDk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKQEAgLTEzLDYgKzEzLDE2IEBACiAjZGVmaW5lIE1DSV9QV1JfT04JCTB4MDMKICNkZWZpbmUgTUNJX09ECQkJKDEgPDwgNikKICNkZWZpbmUgTUNJX1JPRAkJCSgxIDw8IDcpCisvKgorICogVGhlIFNUIE1pY3JvIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBST0QgYW5kIHJldXNlIHRoZSB2b2x0YWdlIHJlZ2lzdGVycyBmb3IKKyAqIGRpcmVjdGlvbiBzZXR0aW5ncy4KKyAqLworI2RlZmluZSBNQ0lfU1RfREFUQTJESVJFTgkoMSA8PCAyKQorI2RlZmluZSBNQ0lfU1RfQ01ERElSRU4JCSgxIDw8IDMpCisjZGVmaW5lIE1DSV9TVF9EQVRBMERJUkVOCSgxIDw8IDQpCisjZGVmaW5lIE1DSV9TVF9EQVRBMzFESVJFTgkoMSA8PCA1KQorI2RlZmluZSBNQ0lfU1RfRkJDTEtFTgkJKDEgPDwgNykKKyNkZWZpbmUgTUNJX1NUX0RBVEE3NERJUkVOCSgxIDw8IDgpCiAKICNkZWZpbmUgTU1DSUNMT0NLCQkweDAwNAogI2RlZmluZSBNQ0lfQ0xLX0VOQUJMRQkJKDEgPDwgOCkKQEAgLTE3Niw5ICsxODYsNiBAQAogCXN0cnVjdCBtbWNfZGF0YQkJKmRhdGE7CiAJc3RydWN0IG1tY19ob3N0CQkqbW1jOwogCXN0cnVjdCBjbGsJCSpjbGs7Ci0JaW50CQkJZ3Bpb19jZDsKLQlpbnQJCQlncGlvX3dwOwotCWludAkJCWdwaW9fY2RfaXJxOwogCWJvb2wJCQlzaW5nbGVpcnE7CiAKIAlzcGlubG9ja190CQlsb2NrOwpAQCAtMTg2LDYgKzE5Myw3IEBACiAJdW5zaWduZWQgaW50CQltY2xrOwogCXVuc2lnbmVkIGludAkJY2NsazsKIAl1MzIJCQlwd3JfcmVnOworCXUzMgkJCXB3cl9yZWdfYWRkOwogCXUzMgkJCWNsa19yZWc7CiAJdTMyCQkJZGF0YWN0cmxfcmVnOwogCXUzMgkJCWJ1c3lfc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKaW5kZXggMGIyY2NiNi4uNGRiZmFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYworKysgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCkBAIC04Miw4ICs4Miw3IEBACiAKIAlibG9jayA9IGJsa19ycV9wb3MocmVxKSA8PCA5ID4+IHRyLT5ibGtzaGlmdDsKIAluc2VjdCA9IGJsa19ycV9jdXJfYnl0ZXMocmVxKSA+PiB0ci0+Ymxrc2hpZnQ7Ci0KLQlidWYgPSByZXEtPmJ1ZmZlcjsKKwlidWYgPSBiaW9fZGF0YShyZXEtPmJpbyk7CiAKIAlpZiAocmVxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYmxvY2suYyBiL2RyaXZlcnMvbXRkL3ViaS9ibG9jay5jCmluZGV4IDhkNjU5ZTYuLjIwYTY2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9ibG9jay5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9ibG9jay5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIAkgKiBmbGFzaCBhY2Nlc3MgYW55d2F5LgogCSAqLwogCW11dGV4X2xvY2soJmRldi0+ZGV2X211dGV4KTsKLQlyZXQgPSB1YmlibG9ja19yZWFkKGRldiwgcmVxLT5idWZmZXIsIHNlYywgbGVuKTsKKwlyZXQgPSB1YmlibG9ja19yZWFkKGRldiwgYmlvX2RhdGEocmVxLT5iaW8pLCBzZWMsIGxlbik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldl9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYwppbmRleCA5MjYxZDUzLi5kZDU3YzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYwpAQCAtMjc4MSw3ICsyNzgxLDcgQEAKIAogCWNhc2UgTE9BRF9PUEVOOgogCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGJwLT5kZXYpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQlicmVhazsKIAogCWNhc2UgTE9BRF9ESUFHOgpAQCAtNDkzOSw5ICs0OTM5LDkgQEAKIHZvaWQgYm54Mnhfc2NoZWR1bGVfc3BfcnRubChzdHJ1Y3QgYm54MnggKmJwLCBlbnVtIHNwX3J0bmxfZmxhZyBmbGFnLAogCQkJICAgIHUzMiB2ZXJib3NlKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCXNldF9iaXQoZmxhZywgJmJwLT5zcF9ydG5sX3N0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJRFAoKEJOWDJYX01TR19TUCB8IHZlcmJvc2UpLCAiU2NoZWR1bGluZyBzcF9ydG5sIHRhc2sgW0ZsYWc6ICVkXVxuIiwKIAkgICBmbGFnKTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJwLT5zcF9ydG5sX3Rhc2ssIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDNiMGQ0MzEuLjNhOGU1MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMKQEAgLTE4NTgsMTAgKzE4NTgsMTAgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJYXRvbWljX2luYygmYnAtPmNxX3NwcV9sZWZ0KTsKIAkvKiBwdXNoIHRoZSBjaGFuZ2UgaW4gYnAtPnNwcV9sZWZ0IGFuZCB0b3dhcmRzIHRoZSBtZW1vcnkgKi8KLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJRFAoQk5YMlhfTVNHX1NQLCAiYnAtPmNxX3NwcV9sZWZ0ICV4XG4iLCBhdG9taWNfcmVhZCgmYnAtPmNxX3NwcV9sZWZ0KSk7CiAKQEAgLTE4NzYsMTEgKzE4NzYsMTEgQEAKIAkJICogc3Bfc3RhdGUgaXMgY2xlYXJlZCwgYW5kIHRoaXMgb3JkZXIgcHJldmVudHMKIAkJICogcmFjZXMKIAkJICovCi0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJc2V0X2JpdChCTlgyWF9BRkVYX1BFTkRJTkdfVklGU0VUX01DUF9BQ0ssICZicC0+c3Bfc3RhdGUpOwogCQl3bWIoKTsKIAkJY2xlYXJfYml0KEJOWDJYX0FGRVhfRkNPRV9RX1VQREFURV9QRU5ESU5HLCAmYnAtPnNwX3N0YXRlKTsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCQkvKiBzY2hlZHVsZSB0aGUgc3AgdGFzayBhcyBtY3AgYWNrIGlzIHJlcXVpcmVkICovCiAJCWJueDJ4X3NjaGVkdWxlX3NwX3Rhc2soYnApOwpAQCAtNTI3Miw5ICs1MjcyLDkgQEAKIAkJX19jbGVhcl9iaXQoUkFNUk9EX0NPTVBfV0FJVCwgJnF1ZXVlX3BhcmFtcy5yYW1yb2RfZmxhZ3MpOwogCiAJCS8qIG1hcmsgbGF0ZXN0IFEgYml0ICovCi0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJc2V0X2JpdChCTlgyWF9BRkVYX0ZDT0VfUV9VUERBVEVfUEVORElORywgJmJwLT5zcF9zdGF0ZSk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAkJLyogc2VuZCBRIHVwZGF0ZSByYW1yb2QgZm9yIEZDb0UgUSAqLwogCQlyYyA9IGJueDJ4X3F1ZXVlX3N0YXRlX2NoYW5nZShicCwgJnF1ZXVlX3BhcmFtcyk7CkBAIC01NTAwLDcgKzU1MDAsNyBAQAogCQlzcHFlX2NudCsrOwogCX0gLyogZm9yICovCiAKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJYXRvbWljX2FkZChzcHFlX2NudCwgJmJwLT5lcV9zcHFfbGVmdCk7CiAKIAlicC0+ZXFfY29ucyA9IHN3X2NvbnM7CkBAIC0xMzg3NSw5ICsxMzg3NSw5IEBACiAJY2FzZSBEUlZfQ1RMX1JFVF9MMl9TUFFfQ1JFRElUX0NNRDogewogCQlpbnQgY291bnQgPSBjdGwtPmRhdGEuY3JlZGl0LmNyZWRpdF9jb3VudDsKIAotCQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQlhdG9taWNfYWRkKGNvdW50LCAmYnAtPmNxX3NwcV9sZWZ0KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIERSVl9DVExfVUxQX1JFR0lTVEVSX0NNRDogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54Mnhfc3AuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X3NwLmMKaW5kZXggMzEyOTcyNjYuLmQ3MjUzMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9zcC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X3NwLmMKQEAgLTI1OCwxNiArMjU4LDE2IEBACiAKIHN0YXRpYyB2b2lkIGJueDJ4X3Jhd19jbGVhcl9wZW5kaW5nKHN0cnVjdCBibngyeF9yYXdfb2JqICpvKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChvLT5zdGF0ZSwgby0+cHN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3Jhd19zZXRfcGVuZGluZyhzdHJ1Y3QgYm54MnhfcmF3X29iaiAqbykKIHsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlzZXRfYml0KG8tPnN0YXRlLCBvLT5wc3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogLyoqCkBAIC0yMTMxLDcgKzIxMzEsNyBAQAogCiAJLyogVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQgKi8KIAljbGVhcl9iaXQocC0+c3RhdGUsIHAtPnBzdGF0ZSk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTc2LDE2ICszNTc2LDE2IEBACiAKIHN0YXRpYyB2b2lkIGJueDJ4X21jYXN0X2NsZWFyX3NjaGVkKHN0cnVjdCBibngyeF9tY2FzdF9vYmogKm8pCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KG8tPnNjaGVkX3N0YXRlLCBvLT5yYXcucHN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X21jYXN0X3NldF9zY2hlZChzdHJ1Y3QgYm54MnhfbWNhc3Rfb2JqICpvKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCXNldF9iaXQoby0+c2NoZWRfc3RhdGUsIG8tPnJhdy5wc3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogc3RhdGljIGJvb2wgYm54MnhfbWNhc3RfY2hlY2tfc2NoZWQoc3RydWN0IGJueDJ4X21jYXN0X29iaiAqbykKQEAgLTQyMDAsNyArNDIwMCw3IEBACiAJCWlmIChyYykgewogCQkJby0+bmV4dF9zdGF0ZSA9IEJOWDJYX1FfU1RBVEVfTUFYOwogCQkJY2xlYXJfYml0KHBlbmRpbmdfYml0LCBwZW5kaW5nKTsKLQkJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAKQEAgLTQyODgsNyArNDI4OCw3IEBACiAJd21iKCk7CiAKIAljbGVhcl9iaXQoY21kLCAmby0+cGVuZGluZyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01Mjc5LDcgKzUyNzksNyBAQAogCXdtYigpOwogCiAJY2xlYXJfYml0KGNtZCwgJm8tPnBlbmRpbmcpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTkyNiw3ICs1OTI2LDcgQEAKIAkJaWYgKHJjKSB7CiAJCQlvLT5uZXh0X3N0YXRlID0gQk5YMlhfRl9TVEFURV9NQVg7CiAJCQljbGVhcl9iaXQoY21kLCBwZW5kaW5nKTsKLQkJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9zcmlvdi5jCmluZGV4IGI4MDc4ZDUuLmZhZjAxNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X3NyaW92LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54Mnhfc3Jpb3YuYwpAQCAtMTY1MCw5ICsxNjUwLDkgQEAKIHZvaWQgYm54MnhfdmZfaGFuZGxlX2ZpbHRlcnNfZXFlKHN0cnVjdCBibngyeCAqYnAsCiAJCQkJIHN0cnVjdCBibngyeF92aXJ0ZiAqdmYpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KEJOWDJYX0ZJTFRFUl9SWF9NT0RFX1BFTkRJTkcsICZ2Zi0+ZmlsdGVyX3N0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3ZmX2hhbmRsZV9yc3NfdXBkYXRlX2VxZShzdHJ1Y3QgYm54MnggKmJwLApAQCAtMjk5MCw5ICsyOTkwLDkgQEAKIAogdm9pZCBibngyeF9zY2hlZHVsZV9pb3ZfdGFzayhzdHJ1Y3QgYm54MnggKmJwLCBlbnVtIGJueDJ4X2lvdl9mbGFnIGZsYWcpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJc2V0X2JpdChmbGFnLCAmYnAtPmlvdl90YXNrX3N0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJRFAoQk5YMlhfTVNHX0lPViwgIlNjaGVkdWxpbmcgaW92IHRhc2sgW0ZsYWc6ICVkXVxuIiwgZmxhZyk7CiAJcXVldWVfZGVsYXllZF93b3JrKGJueDJ4X2lvdl93cSwgJmJwLT5pb3ZfdGFzaywgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9jbmljLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9jbmljLmMKaW5kZXggMDlmM2ZlZi4uNGRkNDhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2NuaWMuYwpAQCAtNDM2LDcgKzQzNiw3IEBACiBzdGF0aWMgaW50IGNuaWNfY2xvc2VfcHJlcChzdHJ1Y3QgY25pY19zb2NrICpjc2spCiB7CiAJY2xlYXJfYml0KFNLX0ZfQ09OTkVDVF9TVEFSVCwgJmNzay0+ZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU0tfRl9PRkZMRF9DT01QTEVURSwgJmNzay0+ZmxhZ3MpKSB7CiAJCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KFNLX0ZfT0ZGTERfU0NIRUQsICZjc2stPmZsYWdzKSkKQEAgLTQ1MCw3ICs0NTAsNyBAQAogc3RhdGljIGludCBjbmljX2Fib3J0X3ByZXAoc3RydWN0IGNuaWNfc29jayAqY3NrKQogewogCWNsZWFyX2JpdChTS19GX0NPTk5FQ1RfU1RBUlQsICZjc2stPmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChTS19GX09GRkxEX1NDSEVELCAmY3NrLT5mbGFncykpCiAJCW1zbGVlcCgxKTsKQEAgLTM2NDYsNyArMzY0Niw3IEBACiAKIAljc2tfaG9sZChjc2spOwogCWNsZWFyX2JpdChTS19GX0lOVVNFLCAmY3NrLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXdoaWxlIChhdG9taWNfcmVhZCgmY3NrLT5yZWZfY291bnQpICE9IDEpCiAJCW1zbGVlcCgxKTsKIAljbmljX2NtX2NsZWFudXAoY3NrKTsKQEAgLTQwMjYsNyArNDAyNiw3IEBACiAJCQkgTDRfS0NRRV9DT01QTEVUSU9OX1NUQVRVU19QQVJJVFlfRVJST1IpCiAJCQlzZXRfYml0KFNLX0ZfSFdfRVJSLCAmY3NrLT5mbGFncyk7CiAKLQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQljbGVhcl9iaXQoU0tfRl9PRkZMRF9TQ0hFRCwgJmNzay0+ZmxhZ3MpOwogCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLCBvcGNvZGUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYwppbmRleCA2NzU1NTBmLi4zYTc3ZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAlpZiAobGlrZWx5KHRlc3RfYml0KEJOQURfVFhRX1RYX1NUQVJURUQsICZ0Y2ItPmZsYWdzKSkpCiAJCWJuYV9pYl9hY2sodGNiLT5pX2RiZWxsLCBzZW50KTsKIAotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChCTkFEX1RYUV9GUkVFX1NFTlQsICZ0Y2ItPmZsYWdzKTsKIAogCXJldHVybiBzZW50OwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAogCQlibmFkX3R4cV9jbGVhbnVwKGJuYWQsIHRjYik7CiAKLQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQljbGVhcl9iaXQoQk5BRF9UWFFfRlJFRV9TRU5ULCAmdGNiLT5mbGFncyk7CiAJfQogCkBAIC0yOTkyLDcgKzI5OTIsNyBAQAogCQkJc2VudCA9IGJuYWRfdHhjbXBsX3Byb2Nlc3MoYm5hZCwgdGNiKTsKIAkJCWlmIChsaWtlbHkodGVzdF9iaXQoQk5BRF9UWFFfVFhfU1RBUlRFRCwgJnRjYi0+ZmxhZ3MpKSkKIAkJCQlibmFfaWJfYWNrKHRjYi0+aV9kYmVsbCwgc2VudCk7Ci0JCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQkJY2xlYXJfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL2N4Z2IyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IvY3hnYjIuYwppbmRleCAwZmU3ZmY3Li4wNTYxM2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IvY3hnYjIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IvY3hnYjIuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJaWYgKGFkYXB0ZXItPnBhcmFtcy5zdGF0c191cGRhdGVfcGVyaW9kICYmCiAJICAgICEoYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwICYgUE9SVF9NQVNLKSkgewogCQkvKiBTdG9wIHN0YXRpc3RpY3MgYWNjdW11bGF0aW9uLiAqLwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQlzcGluX2xvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7ICAgLyogc3luYyB3aXRoIHVwZGF0ZSB0YXNrICovCiAJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT53b3JrX2xvY2spOwogCQljYW5jZWxfbWFjX3N0YXRzX3VwZGF0ZShhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL3NnZS5jCmluZGV4IDhiMDY5ZjkuLjNkZmNmNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9zZ2UuYwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAKIAkJc3RydWN0IHNnZV9xc2V0ICpxcyA9IHR4cV90b19xc2V0KHEsIHFpZCk7CiAKIAkJc2V0X2JpdChxaWQsICZxcy0+dHhxX3N0b3BwZWQpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJCWlmIChzaG91bGRfcmVzdGFydF90eChxKSAmJgogCQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KHFpZCwgJnFzLT50eHFfc3RvcHBlZCkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQAogCiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnEtPnNlbmRxKSkgewogCQlzZXRfYml0KFRYUV9DVFJMLCAmcXMtPnR4cV9zdG9wcGVkKTsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCQlpZiAoc2hvdWxkX3Jlc3RhcnRfdHgocSkgJiYKIAkJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChUWFFfQ1RSTCwgJnFzLT50eHFfc3RvcHBlZCkpCkBAIC0xNjk3LDcgKzE2OTcsNyBAQAogCiAJCWlmICh1bmxpa2VseShxLT5zaXplIC0gcS0+aW5fdXNlIDwgbmRlc2MpKSB7CiAJCQlzZXRfYml0KFRYUV9PRkxELCAmcXMtPnR4cV9zdG9wcGVkKTsKLQkJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJCQlpZiAoc2hvdWxkX3Jlc3RhcnRfdHgocSkgJiYKIAkJCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoVFhRX09GTEQsICZxcy0+dHhxX3N0b3BwZWQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9zZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvc2dlLmMKaW5kZXggY2E5NWNmMi4uZTI0OTUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3NnZS5jCkBAIC0yMDMxLDcgKzIwMzEsNyBAQAogCQkJc3RydWN0IHNnZV9mbCAqZmwgPSBzLT5lZ3JfbWFwW2lkXTsKIAogCQkJY2xlYXJfYml0KGlkLCBzLT5zdGFydmluZ19mbCk7Ci0JCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCQkJaWYgKGZsX3N0YXJ2aW5nKGZsKSkgewogCQkJCXJ4cSA9IGNvbnRhaW5lcl9vZihmbCwgc3RydWN0IHNnZV9ldGhfcnhxLCBmbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvc2dlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvc2dlLmMKaW5kZXggOWNmYTRiNC4uOWQ4OGMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9zZ2UuYwpAQCAtMTk1MSw3ICsxOTUxLDcgQEAKIAkJCXN0cnVjdCBzZ2VfZmwgKmZsID0gcy0+ZWdyX21hcFtpZF07CiAKIAkJCWNsZWFyX2JpdChpZCwgcy0+c3RhcnZpbmdfZmwpOwotCQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAkJCS8qCiAJCQkgKiBTaW5jZSB3ZSBhcmUgYWNjZXNzaW5nIGZsIHdpdGhvdXQgYSBsb2NrIHRoZXJlJ3MgYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMKaW5kZXggZTJkNDI0Ny4uZWU2ZGRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jCkBAIC0xNzk4LDkgKzE3OTgsOSBAQAogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlzZXRfYml0KEdGQVJfRE9XTiwgJnByaXYtPnN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAlkaXNhYmxlX25hcGkocHJpdik7CiAKQEAgLTIwNDMsOSArMjA0Myw5IEBACiAKIAlnZmFyX2luaXRfdHhfcnhfYmFzZShwcml2KTsKIAotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChHRkFSX0RPV04sICZwcml2LT5zdGF0ZSk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJLyogU3RhcnQgUngvVHggRE1BIGFuZCBlbmFibGUgdGhlIGludGVycnVwdHMgKi8KIAlnZmFyX3N0YXJ0KHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggY2YwNzYxZi4uMmU3MjQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC00Njc2LDcgKzQ2NzYsNyBAQAogCUJVR19PTighdGVzdF9iaXQoX19JNDBFX1NFUlZJQ0VfU0NIRUQsICZwZi0+c3RhdGUpKTsKIAogCS8qIGZsdXNoIG1lbW9yeSB0byBtYWtlIHN1cmUgc3RhdGUgaXMgY29ycmVjdCBiZWZvcmUgbmV4dCB3YXRjaG9nICovCi0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KF9fSTQwRV9TRVJWSUNFX1NDSEVELCAmcGYtPnN0YXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGQ2MmU3YTIuLmMwNDdjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCUJVR19PTighdGVzdF9iaXQoX19JWEdCRV9TRVJWSUNFX1NDSEVELCAmYWRhcHRlci0+c3RhdGUpKTsKIAogCS8qIGZsdXNoIG1lbW9yeSB0byBtYWtlIHN1cmUgc3RhdGUgaXMgY29ycmVjdCBiZWZvcmUgbmV4dCB3YXRjaGRvZyAqLwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CiB9CiAKQEAgLTQ2NzIsNyArNDY3Miw3IEBACiAJaWYgKGh3LT5tYWMub3BzLmVuYWJsZV90eF9sYXNlcikKIAkJaHctPm1hYy5vcHMuZW5hYmxlX3R4X2xhc2VyKGh3KTsKIAotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAJaXhnYmVfbmFwaV9lbmFibGVfYWxsKGFkYXB0ZXIpOwogCkBAIC01NTY4LDcgKzU1NjgsNyBAQAogCQllX2Rldl9lcnIoIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoX19JWEdCRV9ESVNBQkxFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtODU0Miw3ICs4NTQyLDcgQEAKIAkJZV9lcnIocHJvYmUsICJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAl9IGVsc2UgewotCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCWNsZWFyX2JpdChfX0lYR0JFX0RJU0FCTEVELCAmYWRhcHRlci0+c3RhdGUpOwogCQlhZGFwdGVyLT5ody5od19hZGRyID0gYWRhcHRlci0+aW9fYWRkcjsKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCBkMDc5OWU4Li5kZTI3OTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTE2NjgsNyArMTY2OCw3IEBACiAKIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWJ4X2xvY2spOwogCi0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCWl4Z2JldmZfbmFwaV9lbmFibGVfYWxsKGFkYXB0ZXIpOwogCkBAIC0zMzU0LDcgKzMzNTQsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KF9fSVhHQkVWRl9ESVNBQkxFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtMzcxMiw3ICszNzEyLDcgQEAKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCi0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KF9fSVhHQkVWRl9ESVNBQkxFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmgKaW5kZXggNGZjYzk2YS4uZjUxZDVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5oCkBAIC0xMjY1LDcgKzEyNjUsNyBAQAogCSAqLwogCV9fbGUzMiByeF9kZWNhcF9tb2RlOwogCi0JLyogd2hhdCBpcyB0aGUgbWF4aW11bSBzY2FuIHJlcXVlc3RzIHRoYW4gY2FuIGJlIHF1ZXVlZCAqLworCS8qIHdoYXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYW4gcmVxdWVzdHMgdGhhdCBjYW4gYmUgcXVldWVkICovCiAJX19sZTMyIHNjYW5fbWF4X3BlbmRpbmdfcmVxczsKIAogCS8qIG1heGltdW0gVkRFViB0aGF0IGNvdWxkIHVzZSBCTUlTUyBvZmZsb2FkICovCkBAIC0xNDUwLDcgKzE0NTAsNyBAQAogCSAqLwogCV9fbGUzMiByeF9kZWNhcF9tb2RlOwogCi0JLyogd2hhdCBpcyB0aGUgbWF4aW11bSBzY2FuIHJlcXVlc3RzIHRoYW4gY2FuIGJlIHF1ZXVlZCAqLworCS8qIHdoYXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYW4gcmVxdWVzdHMgdGhhdCBjYW4gYmUgcXVldWVkICovCiAJX19sZTMyIHNjYW5fbWF4X3BlbmRpbmdfcmVxczsKIAogCS8qIG1heGltdW0gVkRFViB0aGF0IGNvdWxkIHVzZSBCTUlTUyBvZmZsb2FkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3dtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC93bWkuaAppbmRleCBiNWYyMjY1Li41YzcwMmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3dtaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvd21pLmgKQEAgLTEwNjgsNyArMTA2OCw3IEBACiB9IF9fcGFja2VkOwogCiAvKgotICogUG9saWN5IHRvIGRldGVybW5pbmUgd2hldGhlciBwb3dlciBzYXZlIGZhaWx1cmUgZXZlbnQgc2hvdWxkIGJlIHNlbnQgdG8KKyAqIFBvbGljeSB0byBkZXRlcm1pbmUgd2hldGhlciBwb3dlciBzYXZlIGZhaWx1cmUgZXZlbnQgc2hvdWxkIGJlIHNlbnQgdG8KICAqIGhvc3QgZHVyaW5nIHNjYW5uaW5nCiAgKi8KIGVudW0gcG93ZXJfc2F2ZV9mYWlsX2V2ZW50X3BvbGljeSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMKaW5kZXggZjk4MDVjOS4uM2FjNzEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb191c2IuYwpAQCAtMTAwLDI1ICsxMDAsMTEgQEAKIAkuY29kZSA9IE5VTEwsCiB9OwogCi0jaWZkZWYgQ09ORklHX1VTQl9ERUJVRwotc3RhdGljIGludCBkZWJ1ZyA9IDE7Ci0jZWxzZQotc3RhdGljIGludCBkZWJ1ZzsKLSNlbmRpZgotCiAvKiBEZWJ1Z2dpbmcgbWFjcm9zICovCi0jdW5kZWYgZGJnCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgXAotCWRvIHsgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiAiIGZvcm1hdCAiXG4iLCBcCi0JCQkgICAgICAgX19mdW5jX18gLCAjIyBhcmcpOyB9IHdoaWxlICgwKQogI3VuZGVmIGVycgogI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIFwKIAlkbyB7IHByaW50ayhLRVJOX0VSUiBQRlggZm9ybWF0ICJcbiIsICMjIGFyZyk7IH0gd2hpbGUgKDApCiAKLS8qIE1vZHVsZSBwYXJhbWF0ZXJzICovCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKLQogTU9EVUxFX0ZJUk1XQVJFKCJvcmlub2NvX2V6dXNiX2Z3Iik7CiAKIC8qCkBAIC0zNDEsNyArMzI3LDcgQEAKIAkJY3R4LT5zdGF0ZSA9IEVaVVNCX0NUWF9SRVFfVElNRU9VVDsKIAl9IGVsc2UgewogCQljdHgtPnN0YXRlID0gRVpVU0JfQ1RYX1JFU1BfVElNRU9VVDsKLQkJZGJnKCJjb3VsZG4ndCB1bmxpbmsiKTsKKwkJZGV2X2RiZygmY3R4LT5vdXR1cmItPmRldi0+ZGV2LCAiY291bGRuJ3QgdW5saW5rXG4iKTsKIAkJYXRvbWljX2luYygmY3R4LT5yZWZjb3VudCk7CiAJCWN0eC0+a2lsbGVkID0gMTsKIAkJZXp1c2JfY3R4X2NvbXBsZXRlKGN0eCk7CkBAIC02MzQsOSArNjIwLDkgQEAKIAkJCQljdHggPSBjOwogCQkJCWJyZWFrOwogCQkJfQotCQkJZGJnKCJTa2lwcGVkICgweCV4LzB4JXgpICglZC8lZCkiLAotCQkJICAgIGxlMTZfdG9fY3B1KGFucy0+aGVybWVzX3JpZCksCi0JCQkgICAgYy0+aW5fcmlkLCBhbnMtPmFuc19yZXBseV9jb3VudCwgcmVwbHlfY291bnQpOworCQkJbmV0ZGV2X2RiZyh1cHJpdi0+ZGV2LCAiU2tpcHBlZCAoMHgleC8weCV4KSAoJWQvJWQpXG4iLAorCQkJCSAgIGxlMTZfdG9fY3B1KGFucy0+aGVybWVzX3JpZCksIGMtPmluX3JpZCwKKwkJCQkgICBhbnMtPmFuc19yZXBseV9jb3VudCwgcmVwbHlfY291bnQpOwogCQl9CiAJfQogCkBAIC03NjgsNyArNzU0LDcgQEAKIAl2b2lkICpjdXJfYnVmID0gdXByaXYtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKIAlpZiAodXByaXYtPnJlYWRfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCWRiZygidXJiIGJ1c3ksIG5vdCByZXN1Ym1pdGluZyIpOworCQluZXRkZXZfZGJnKHVwcml2LT5kZXYsICJ1cmIgYnVzeSwgbm90IHJlc3VibWl0aW5nXG4iKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtODM4LDggKzgyNCw5IEBACiAJCW1lbWNweShmd19idWZmZXIsICZmdy0+Y29kZVthZGRyXSwgRldfQlVGX1NJWkUpOwogCQlpZiAodmFyaWFudF9vZmZzZXQgPj0gYWRkciAmJgogCQkgICAgdmFyaWFudF9vZmZzZXQgPCBhZGRyICsgRldfQlVGX1NJWkUpIHsKLQkJCWRiZygiUGF0Y2hpbmcgY2FyZF92YXJpYW50IGJ5dGUgYXQgMHglMDRYIiwKLQkJCSAgICB2YXJpYW50X29mZnNldCk7CisJCQluZXRkZXZfZGJnKHVwcml2LT5kZXYsCisJCQkJICAgIlBhdGNoaW5nIGNhcmRfdmFyaWFudCBieXRlIGF0IDB4JTA0WFxuIiwKKwkJCQkgICB2YXJpYW50X29mZnNldCk7CiAJCQlmd19idWZmZXJbdmFyaWFudF9vZmZzZXQgLSBhZGRyXSA9IEZXX1ZBUl9WQUxVRTsKIAkJfQogCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codXByaXYtPnVkZXYsCkBAIC04NzksNyArODY2LDYgQEAKIAlCVUdfT04oaW5faXJxKCkpOwogCiAJaWYgKCF1cHJpdi0+dWRldikgewotCQlkYmcoIkRldmljZSBkaXNjb25uZWN0ZWQiKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwogCX0KQEAgLTEwMjMsOCArMTAwOSw5IEBACiAJCWNwdV90b19sZTE2KHBhcm0xKSwKIAkJY3B1X3RvX2xlMTYocGFybTIpLAogCX07Ci0JZGJnKCIweCUwNFgsIHBhcm0wIDB4JTA0WCwgcGFybTEgMHglMDRYLCBwYXJtMiAweCUwNFgiLAotCSAgICBjbWQsIHBhcm0wLCBwYXJtMSwgcGFybTIpOworCW5ldGRldl9kYmcodXByaXYtPmRldiwKKwkJICAgIjB4JTA0WCwgcGFybTAgMHglMDRYLCBwYXJtMSAweCUwNFgsIHBhcm0yIDB4JTA0WFxuIiwgY21kLAorCQkgICBwYXJtMCwgcGFybTEsIHBhcm0yKTsKIAljdHggPSBlenVzYl9hbGxvY19jdHgodXByaXYsIEVaVVNCX1JJRF9ET0NNRCwgRVpVU0JfUklEX0FDSyk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA0NSw3ICsxMDMyLDcgQEAKIAkJMCwKIAkJMCwKIAl9OwotCWRiZygiMHglMDRYLCBwYXJtMCAweCUwNFgiLCBjbWQsIHBhcm0wKTsKKwluZXRkZXZfZGJnKHVwcml2LT5kZXYsICIweCUwNFgsIHBhcm0wIDB4JTA0WFxuIiwgY21kLCBwYXJtMCk7CiAJY3R4ID0gZXp1c2JfYWxsb2NfY3R4KHVwcml2LCBFWlVTQl9SSURfRE9DTUQsIEVaVVNCX1JJRF9BQ0spOwogCWlmICghY3R4KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzMzIsNyArMTMxOSw3IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JZGJnKCJzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZSIpOworCW5ldGRldl9kYmcodXByaXYtPmRldiwgInNlbmRpbmcgY29udHJvbCBtZXNzYWdlXG4iKTsKIAlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codXByaXYtPnVkZXYsCiAJCQkJIHVzYl9zbmRjdHJscGlwZSh1cHJpdi0+dWRldiwgMCksCiAJCQkJIEVaVVNCX1JFUVVFU1RfVFJJR0VSLApAQCAtMTQwMSwxMCArMTM4OCw4IEBACiAJdTE2IGNyYzsKIAl1MTYgaGVybWVzX3JpZDsKIAotCWlmICh1cHJpdi0+dWRldiA9PSBOVUxMKSB7Ci0JCWRiZygiZGlzY29ubmVjdGVkIik7CisJaWYgKHVwcml2LT51ZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQl9CiAKIAlpZiAodXJiLT5zdGF0dXMgPT0gLUVUSU1FRE9VVCkgewogCQkvKiBXaGVuIGEgZGV2aWNlIGdldHMgdW5wbHVnZ2VkIHdlIGdldCB0aGlzIGV2ZXJ5IHRpbWUKQEAgLTE0MjEsMTIgKzE0MDYsMTMgQEAKIAlpZiAoKHVyYi0+c3RhdHVzID09IC1FSUxTRVEpCiAJICAgIHx8ICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQogCSAgICB8fCAodXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpKSB7Ci0JCWRiZygic3RhdHVzICVkLCBub3QgcmVzdWJtaXRpbmciLCB1cmItPnN0YXR1cyk7CisJCW5ldGRldl9kYmcodXByaXYtPmRldiwgInN0YXR1cyAlZCwgbm90IHJlc3VibWl0aW5nXG4iLAorCQkJICAgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCWlmICh1cmItPnN0YXR1cykKLQkJZGJnKCJzdGF0dXM6ICVkIGxlbmd0aDogJWQiLAotCQkgICAgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCW5ldGRldl9kYmcodXByaXYtPmRldiwgInN0YXR1czogJWQgbGVuZ3RoOiAlZFxuIiwKKwkJCSAgIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBzaXplb2YoKmFucykpIHsKIAkJZXJyKCIlczogc2hvcnQgcmVhZCwgaWdub3JpbmciLCBfX2Z1bmNfXyk7CiAJCWdvdG8gcmVzdWJtaXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL21haW4uYwppbmRleCBlZDg4ZDM5Li5lNzFlYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMKQEAgLTU0Myw3ICs1NDMsNyBAQAogCQkgKiB3bDEyNzFfcHNfZWxwX3dha2V1cCBjYW5ub3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4KIAkJICovCiAJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19JUlFfUlVOTklORywgJndsLT5mbGFncyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAkJcmV0ID0gd2xjb3JlX2Z3X3N0YXR1cyh3bCwgd2wtPmZ3X3N0YXR1cyk7CiAJCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCAzMmU5NjlkLi5hYWI5NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtMjA0MCw4ICsyMDQwLDggQEAKICAqIEBucDoJCVBvaW50ZXIgdG8gdGhlIGdpdmVuIGRldmljZV9ub2RlCiAgKiBAc3RlbToJQWxpYXMgc3RlbSBvZiB0aGUgZ2l2ZW4gZGV2aWNlX25vZGUKICAqCi0gKiBUaGUgZnVuY3Rpb24gdHJhdmVscyB0aGUgbG9va3VwIHRhYmxlIHRvIGdldCBhbGlhcyBpZCBmb3IgdGhlIGdpdmVuCi0gKiBkZXZpY2Vfbm9kZSBhbmQgYWxpYXMgc3RlbS4gIEl0IHJldHVybnMgdGhlIGFsaWFzIGlkIGlmIGZpbmQgaXQuCisgKiBUaGUgZnVuY3Rpb24gdHJhdmVscyB0aGUgbG9va3VwIHRhYmxlIHRvIGdldCB0aGUgYWxpYXMgaWQgZm9yIHRoZSBnaXZlbgorICogZGV2aWNlX25vZGUgYW5kIGFsaWFzIHN0ZW0uICBJdCByZXR1cm5zIHRoZSBhbGlhcyBpZCBpZiBmb3VuZC4KICAqLwogaW50IG9mX2FsaWFzX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpzdGVtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wbGF0Zm9ybS5jIGIvZHJpdmVycy9vZi9wbGF0Zm9ybS5jCmluZGV4IGJkNDdmYmMuLmU4Mzc2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL29mL3BsYXRmb3JtLmMKQEAgLTIwNiwxMiArMjA2LDEzIEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OwogCi0JaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApIHx8CisJICAgIG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcobnAsIE9GX1BPUFVMQVRFRCkpCiAJCXJldHVybiBOVUxMOwogCiAJZGV2ID0gb2ZfZGV2aWNlX2FsbG9jKG5wLCBidXNfaWQsIHBhcmVudCk7CiAJaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycl9jbGVhcl9mbGFnOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTUlDUk9CTEFaRSkKIAlkZXYtPmFyY2hkYXRhLmRtYV9tYXNrID0gMHhmZmZmZmZmZlVMOwpAQCAtMjI5LDEwICsyMzAsMTQgQEAKIAogCWlmIChvZl9kZXZpY2VfYWRkKGRldikgIT0gMCkgewogCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGRldik7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycl9jbGVhcl9mbGFnOwogCX0KIAogCXJldHVybiBkZXY7CisKK2Vycl9jbGVhcl9mbGFnOgorCW9mX25vZGVfY2xlYXJfZmxhZyhucCwgT0ZfUE9QVUxBVEVEKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCkBAIC0yNjQsMTQgKzI2OSwxNSBAQAogCiAJcHJfZGVidWcoIkNyZWF0aW5nIGFtYmEgZGV2aWNlICVzXG4iLCBub2RlLT5mdWxsX25hbWUpOwogCi0JaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKQorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSB8fAorCSAgICBvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpCiAJCXJldHVybiBOVUxMOwogCiAJZGV2ID0gYW1iYV9kZXZpY2VfYWxsb2MoTlVMTCwgMCwgMCk7CiAJaWYgKCFkZXYpIHsKIAkJcHJfZXJyKCIlcygpOiBhbWJhX2RldmljZV9hbGxvYygpIGZhaWxlZCBmb3IgJXNcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyX2NsZWFyX2ZsYWc7CiAJfQogCiAJLyogc2V0dXAgZ2VuZXJpYyBkZXZpY2UgaW5mbyAqLwpAQCAtMzExLDYgKzMxNyw4IEBACiAKIGVycl9mcmVlOgogCWFtYmFfZGV2aWNlX3B1dChkZXYpOworZXJyX2NsZWFyX2ZsYWc6CisJb2Zfbm9kZV9jbGVhcl9mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAjZWxzZSAvKiBDT05GSUdfQVJNX0FNQkEgKi8KQEAgLTQ4Nyw0ICs0OTUsNjAgQEAKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9wbGF0Zm9ybV9wb3B1bGF0ZSk7CisKK3N0YXRpYyBpbnQgb2ZfcGxhdGZvcm1fZGV2aWNlX2Rlc3Ryb3koc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWJvb2wgKmNoaWxkcmVuX2xlZnQgPSBkYXRhOworCisJLyogRG8gbm90IHRvdWNoIGRldmljZXMgbm90IHBvcHVsYXRlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZSAqLworCWlmICghZGV2LT5vZl9ub2RlIHx8ICFvZl9ub2RlX2NoZWNrX2ZsYWcoZGV2LT5vZl9ub2RlLCBPRl9QT1BVTEFURUQpKSB7CisJCSpjaGlsZHJlbl9sZWZ0ID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogUmVjdXJzZSwgYnV0IGRvbid0IHRvdWNoIHRoaXMgZGV2aWNlIGlmIGl0IGhhcyBhbnkgY2hpbGRyZW4gbGVmdCAqLworCWlmIChvZl9wbGF0Zm9ybV9kZXBvcHVsYXRlKGRldikgIT0gMCkgeworCQkqY2hpbGRyZW5fbGVmdCA9IHRydWU7CisJCXJldHVybiAwOworCX0KKworCWlmIChkZXYtPmJ1cyA9PSAmcGxhdGZvcm1fYnVzX3R5cGUpCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKyNpZmRlZiBDT05GSUdfQVJNX0FNQkEKKwllbHNlIGlmIChkZXYtPmJ1cyA9PSAmYW1iYV9idXN0eXBlKQorCQlhbWJhX2RldmljZV91bnJlZ2lzdGVyKHRvX2FtYmFfZGV2aWNlKGRldikpOworI2VuZGlmCisJZWxzZSB7CisJCSpjaGlsZHJlbl9sZWZ0ID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJb2Zfbm9kZV9jbGVhcl9mbGFnKGRldi0+b2Zfbm9kZSwgT0ZfUE9QVUxBVEVEKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9mX3BsYXRmb3JtX2RlcG9wdWxhdGUoKSAtIFJlbW92ZSBkZXZpY2VzIHBvcHVsYXRlZCBmcm9tIGRldmljZSB0cmVlCisgKiBAcGFyZW50OiBkZXZpY2Ugd2hpY2ggY2hpbGRyZWQgd2lsbCBiZSByZW1vdmVkCisgKgorICogQ29tcGxlbWVudGFyeSB0byBvZl9wbGF0Zm9ybV9wb3B1bGF0ZSgpLCB0aGlzIGZ1bmN0aW9uIHJlbW92ZXMgY2hpbGRyZW4KKyAqIG9mIHRoZSBnaXZlbiBkZXZpY2UgKGFuZCwgcmVjdXJyZW50bHksIHRoZWlyIGNoaWxkcmVuKSB0aGF0IGhhdmUgYmVlbgorICogY3JlYXRlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgZGV2aWNlIHRyZWUgbm9kZXMgKGFuZCBvbmx5IHRob3NlLAorICogbGVhdmluZyBvdGhlcnMgLSBlZy4gbWFudWFsbHkgY3JlYXRlZCAtIHVuaGFybWVkKS4KKyAqCisgKiBSZXR1cm5zIDAgd2hlbiBhbGwgY2hpbGRyZW4gZGV2aWNlcyBoYXZlIGJlZW4gcmVtb3ZlZCBvcgorICogLUVCVVNZIHdoZW4gc29tZSBjaGlsZHJlbiByZW1haW5lZC4KKyAqLworaW50IG9mX3BsYXRmb3JtX2RlcG9wdWxhdGUoc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCWJvb2wgY2hpbGRyZW5fbGVmdCA9IGZhbHNlOworCisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKHBhcmVudCwgJmNoaWxkcmVuX2xlZnQsCisJCQkgICAgICBvZl9wbGF0Zm9ybV9kZXZpY2VfZGVzdHJveSk7CisKKwlyZXR1cm4gY2hpbGRyZW5fbGVmdCA/IC1FQlVTWSA6IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9wbGF0Zm9ybV9kZXBvcHVsYXRlKTsKKwogI2VuZGlmIC8qIENPTkZJR19PRl9BRERSRVNTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IGZmNTMzMTQuLmVlOTMyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC02Miw2ICs2Miw3IEBACiAJdGltZWRpYV85MDc5YSwKIAl0aW1lZGlhXzkwNzliLAogCXRpbWVkaWFfOTA3OWMsCisJd2NoX2NoMzUzXzFzMXAsCiAJd2NoX2NoMzUzXzJzMXAsCiAJc3VuaXhfMnMxcCwKIH07CkBAIC0xNDgsNiArMTQ5LDcgQEAKIAkvKiB0aW1lZGlhXzkwNzlhICovICAgICAgICAgICAgIHsgMSwgeyB7IDIsIDMgfSwgfSB9LAogCS8qIHRpbWVkaWFfOTA3OWIgKi8gICAgICAgICAgICAgeyAxLCB7IHsgMiwgMyB9LCB9IH0sCiAJLyogdGltZWRpYV85MDc5YyAqLyAgICAgICAgICAgICB7IDEsIHsgeyAyLCAzIH0sIH0gfSwKKwkvKiB3Y2hfY2gzNTNfMXMxcCovICAgICAgICAgICAgIHsgMSwgeyB7IDEsIC0xfSwgfSB9LAogCS8qIHdjaF9jaDM1M18yczFwKi8gICAgICAgICAgICAgeyAxLCB7IHsgMiwgLTF9LCB9IH0sCiAJLyogc3VuaXhfMnMxcCAqLyAgICAgICAgICAgICAgICB7IDEsIHsgeyAzLCAtMSB9LCB9IH0sCiB9OwpAQCAtMjUzLDYgKzI1NSw3IEBACiAJeyAweDE0MDksIDB4NzE2OCwgMHgxNDA5LCAweGQwNzksIDAsIDAsIHRpbWVkaWFfOTA3OWMgfSwKIAogCS8qIFdDSCBDQVJEUyAqLworCXsgMHg0MzQ4LCAweDUwNTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHdjaF9jaDM1M18xczFwfSwKIAl7IDB4NDM0OCwgMHg3MDUzLCAweDQzNDgsIDB4MzI1MywgMCwgMCwgd2NoX2NoMzUzXzJzMXB9LAogCiAJLyoKQEAgLTQ3OSw2ICs0ODIsMTIgQEAKIAkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwKIAkJLnVhcnRfb2Zmc2V0CT0gOCwKIAl9LAorCVt3Y2hfY2gzNTNfMXMxcF0gPSB7CisJCS5mbGFncyAgICAgICAgICA9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywKKwkJLm51bV9wb3J0cyAgICAgID0gMSwKKwkJLmJhc2VfYmF1ZCAgICAgID0gMTE1MjAwLAorCQkudWFydF9vZmZzZXQgICAgPSA4LAorCX0sCiAJW3djaF9jaDM1M18yczFwXSA9IHsKIAkJLmZsYWdzICAgICAgICAgID0gRkxfQkFTRTB8RkxfQkFTRV9CQVJTLAogCQkubnVtX3BvcnRzICAgICAgPSAyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYWNjZXNzLmMgYi9kcml2ZXJzL3BjaS9hY2Nlc3MuYwppbmRleCA3ZjhiNzhjLi44YzE0OGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9hY2Nlc3MuYworKysgYi9kcml2ZXJzL3BjaS9hY2Nlc3MuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiBpbnQgcGNpX3VzZXJfcmVhZF9jb25maWdfIyNzaXplCQkJCQkJXAogCShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCB0eXBlICp2YWwpCQkJXAogewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAorCWludCByZXQgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7CQkJCQlcCiAJdTMyIGRhdGEgPSAtMTsJCQkJCQkJXAogCWlmIChQQ0lfIyNzaXplIyNfQkFEKQkJCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXApAQCAtMTU5LDkgKzE1OSw3IEBACiAJCQkJCXBvcywgc2l6ZW9mKHR5cGUpLCAmZGF0YSk7CVwKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZwY2lfbG9jayk7CQkJCVwKIAkqdmFsID0gKHR5cGUpZGF0YTsJCQkJCQlcCi0JaWYgKHJldCA+IDApCQkJCQkJCVwKLQkJcmV0ID0gLUVJTlZBTDsJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAorCXJldHVybiBwY2liaW9zX2Vycl90b19lcnJubyhyZXQpOwkJCQlcCiB9CQkJCQkJCQkJXAogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3VzZXJfcmVhZF9jb25maWdfIyNzaXplKTsKIApAQCAtMTcwLDcgKzE2OCw3IEBACiBpbnQgcGNpX3VzZXJfd3JpdGVfY29uZmlnXyMjc2l6ZQkJCQkJXAogCShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCB0eXBlIHZhbCkJCQlcCiB7CQkJCQkJCQkJXAotCWludCByZXQgPSAtRUlPOwkJCQkJCQlcCisJaW50IHJldCA9IFBDSUJJT1NfU1VDQ0VTU0ZVTDsJCQkJCVwKIAlpZiAoUENJXyMjc2l6ZSMjX0JBRCkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAlyYXdfc3Bpbl9sb2NrX2lycSgmcGNpX2xvY2spOwkJCQlcCkBAIC0xNzksOSArMTc3LDcgQEAKIAlyZXQgPSBkZXYtPmJ1cy0+b3BzLT53cml0ZShkZXYtPmJ1cywgZGV2LT5kZXZmbiwJCVwKIAkJCQkJcG9zLCBzaXplb2YodHlwZSksIHZhbCk7CVwKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZwY2lfbG9jayk7CQkJCVwKLQlpZiAocmV0ID4gMCkJCQkJCQkJXAotCQlyZXQgPSAtRUlOVkFMOwkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCisJcmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7CQkJCVwKIH0JCQkJCQkJCQlcCiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfdXNlcl93cml0ZV9jb25maWdfIyNzaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYnVzLmMgYi9kcml2ZXJzL3BjaS9idXMuYwppbmRleCBmYjhhZWQzLi40NDdkMzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9idXMuYworKysgYi9kcml2ZXJzL3BjaS9idXMuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJwY2kuaCIKQEAgLTIzNiw3ICsyMzUsNyBAQAogICoKICAqIFRoaXMgYWRkcyBhZGQgc3lzZnMgZW50cmllcyBhbmQgc3RhcnQgZGV2aWNlIGRyaXZlcnMKICAqLwotaW50IHBjaV9idXNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQordm9pZCBwY2lfYnVzX2FkZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0yNTMsOCArMjUyLDYgQEAKIAlXQVJOX09OKHJldHZhbCA8IDApOwogCiAJZGV2LT5pc19hZGRlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNjcsMTYgKzI2NCwxMiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCWludCByZXR2YWw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKIAkJLyogU2tpcCBhbHJlYWR5LWFkZGVkIGRldmljZXMgKi8KIAkJaWYgKGRldi0+aXNfYWRkZWQpCiAJCQljb250aW51ZTsKLQkJcmV0dmFsID0gcGNpX2J1c19hZGRfZGV2aWNlKGRldik7Ci0JCWlmIChyZXR2YWwpCi0JCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIGFkZGluZyBkZXZpY2UgKCVkKVxuIiwKLQkJCQlyZXR2YWwpOworCQlwY2lfYnVzX2FkZF9kZXZpY2UoZGV2KTsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QtYnJpZGdlLmMgYi9kcml2ZXJzL3BjaS9ob3N0LWJyaWRnZS5jCmluZGV4IDQ3YWFmMjIuLjBlNWYzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QtYnJpZGdlLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC1icmlkZ2UuYwpAQCAtMyw3ICszLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3BjaS9ob3N0L0tjb25maWcKaW5kZXggYTZmNjdlYy4uMjFkZjQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZwpAQCAtMzMsNCArMzMsMTcgQEAKIAkgIFRoZXJlIGFyZSAzIGludGVybmFsIFBDSSBjb250cm9sbGVycyBhdmFpbGFibGUgd2l0aCBhIHNpbmdsZQogCSAgYnVpbHQtaW4gRUhDSS9PSENJIGhvc3QgY29udHJvbGxlciBwcmVzZW50IG9uIGVhY2ggb25lLgogCitjb25maWcgUENJX1JDQVJfR0VOMl9QQ0lFCisJYm9vbCAiUmVuZXNhcyBSLUNhciBQQ0llIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX1NITU9CSUxFIHx8IChBUk0gJiYgQ09NUElMRV9URVNUKQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24gUi1DYXIgR2VuMiBTb0NzLgorCitjb25maWcgUENJX0hPU1RfR0VORVJJQworCWJvb2wgIkdlbmVyaWMgUENJIGhvc3QgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEFSTSAmJiBPRgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBhIHNpbXBsZSBnZW5lcmljIFBDSSBob3N0CisJICBjb250cm9sbGVyLCBzdWNoIGFzIHRoZSBvbmUgZW11bGF0ZWQgYnkga3ZtdG9vbC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2hvc3QvTWFrZWZpbGUKaW5kZXggMTNmYjMzMy4uNjExYmE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlCkBAIC00LDMgKzQsNSBAQAogb2JqLSQoQ09ORklHX1BDSV9NVkVCVSkgKz0gcGNpLW12ZWJ1Lm8KIG9iai0kKENPTkZJR19QQ0lfVEVHUkEpICs9IHBjaS10ZWdyYS5vCiBvYmotJChDT05GSUdfUENJX1JDQVJfR0VOMikgKz0gcGNpLXJjYXItZ2VuMi5vCitvYmotJChDT05GSUdfUENJX1JDQVJfR0VOMl9QQ0lFKSArPSBwY2llLXJjYXIubworb2JqLSQoQ09ORklHX1BDSV9IT1NUX0dFTkVSSUMpICs9IHBjaS1ob3N0LWdlbmVyaWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktZXh5bm9zLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1leHlub3MuYwppbmRleCAzZGU2YmZiLi4xNjMyNjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1leHlub3MuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1leHlub3MuYwpAQCAtNDE1LDkgKzQxNSw3IEBACiB7CiAJc3RydWN0IHBjaWVfcG9ydCAqcHAgPSBhcmc7CiAKLQlkd19oYW5kbGVfbXNpX2lycShwcCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIGR3X2hhbmRsZV9tc2lfaXJxKHBwKTsKIH0KIAogc3RhdGljIHZvaWQgZXh5bm9zX3BjaWVfbXNpX2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHApCkBAIC01MTEsNyArNTA5LDggQEAKIAkuaG9zdF9pbml0ID0gZXh5bm9zX3BjaWVfaG9zdF9pbml0LAogfTsKIAotc3RhdGljIGludCBhZGRfcGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQgKnBwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2luaXQgYWRkX3BjaWVfcG9ydChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwKKwkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAKQEAgLTU2OCwxMCArNTY3LDggQEAKIAogCWV4eW5vc19wY2llID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZXh5bm9zX3BjaWUpLAogCQkJCUdGUF9LRVJORUwpOwotCWlmICghZXh5bm9zX3BjaWUpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBleHlub3MgcGNpZVxuIik7CisJaWYgKCFleHlub3NfcGNpZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJcHAgPSAmZXh5bm9zX3BjaWUtPnBwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1ob3N0LWdlbmVyaWMuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWhvc3QtZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmU2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1ob3N0LWdlbmVyaWMuYwpAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIFNpbXBsZSwgZ2VuZXJpYyBQQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciB0YXJnZXR0aW5nIGZpcm13YXJlLWluaXRpYWxpc2VkCisgKiBzeXN0ZW1zIGFuZCB2aXJ0dWFsIG1hY2hpbmVzIChlLmcuIHRoZSBQQ0kgZW11bGF0aW9uIHByb3ZpZGVkIGJ5IGt2bXRvb2wpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFSTSBMaW1pdGVkCisgKgorICogQXV0aG9yOiBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdHJ1Y3QgZ2VuX3BjaV9jZmdfYnVzX29wcyB7CisJdTMyIGJ1c19zaGlmdDsKKwl2b2lkIF9faW9tZW0gKigqbWFwX2J1cykoc3RydWN0IHBjaV9idXMgKiwgdW5zaWduZWQgaW50LCBpbnQpOworfTsKKworc3RydWN0IGdlbl9wY2lfY2ZnX3dpbmRvd3MgeworCXN0cnVjdCByZXNvdXJjZQkJCQlyZXM7CisJc3RydWN0IHJlc291cmNlCQkJCWJ1c19yYW5nZTsKKwl2b2lkIF9faW9tZW0JCQkJKip3aW47CisKKwljb25zdCBzdHJ1Y3QgZ2VuX3BjaV9jZmdfYnVzX29wcwkqb3BzOworfTsKKworc3RydWN0IGdlbl9wY2kgeworCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UJCQlob3N0OworCXN0cnVjdCBnZW5fcGNpX2NmZ193aW5kb3dzCQljZmc7CisJc3RydWN0IGxpc3RfaGVhZAkJCXJlc291cmNlczsKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmdlbl9wY2lfbWFwX2NmZ19idXNfY2FtKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCQkgICAgIGludCB3aGVyZSkKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7CisJc3RydWN0IGdlbl9wY2kgKnBjaSA9IHN5cy0+cHJpdmF0ZV9kYXRhOworCXJlc291cmNlX3NpemVfdCBpZHggPSBidXMtPm51bWJlciAtIHBjaS0+Y2ZnLmJ1c19yYW5nZS5zdGFydDsKKworCXJldHVybiBwY2ktPmNmZy53aW5baWR4XSArICgoZGV2Zm4gPDwgOCkgfCB3aGVyZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2VuX3BjaV9jZmdfYnVzX29wcyBnZW5fcGNpX2NmZ19jYW1fYnVzX29wcyA9IHsKKwkuYnVzX3NoaWZ0CT0gMTYsCisJLm1hcF9idXMJPSBnZW5fcGNpX21hcF9jZmdfYnVzX2NhbSwKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmdlbl9wY2lfbWFwX2NmZ19idXNfZWNhbShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJCSAgICAgIGludCB3aGVyZSkKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7CisJc3RydWN0IGdlbl9wY2kgKnBjaSA9IHN5cy0+cHJpdmF0ZV9kYXRhOworCXJlc291cmNlX3NpemVfdCBpZHggPSBidXMtPm51bWJlciAtIHBjaS0+Y2ZnLmJ1c19yYW5nZS5zdGFydDsKKworCXJldHVybiBwY2ktPmNmZy53aW5baWR4XSArICgoZGV2Zm4gPDwgMTIpIHwgd2hlcmUpOworfQorCitzdGF0aWMgc3RydWN0IGdlbl9wY2lfY2ZnX2J1c19vcHMgZ2VuX3BjaV9jZmdfZWNhbV9idXNfb3BzID0geworCS5idXNfc2hpZnQJPSAyMCwKKwkubWFwX2J1cwk9IGdlbl9wY2lfbWFwX2NmZ19idXNfZWNhbSwKK307CisKK3N0YXRpYyBpbnQgZ2VuX3BjaV9jb25maWdfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgZ2VuX3BjaSAqcGNpID0gc3lzLT5wcml2YXRlX2RhdGE7CisKKwlhZGRyID0gcGNpLT5jZmcub3BzLT5tYXBfYnVzKGJ1cywgZGV2Zm4sIHdoZXJlKTsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJKnZhbCA9IHJlYWRiKGFkZHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSByZWFkdyhhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnZhbCA9IHJlYWRsKGFkZHIpOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX3BjaV9jb25maWdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXZvaWQgX19pb21lbSAqYWRkcjsKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7CisJc3RydWN0IGdlbl9wY2kgKnBjaSA9IHN5cy0+cHJpdmF0ZV9kYXRhOworCisJYWRkciA9IHBjaS0+Y2ZnLm9wcy0+bWFwX2J1cyhidXMsIGRldmZuLCB3aGVyZSk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXdyaXRlYih2YWwsIGFkZHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXdyaXRldyh2YWwsIGFkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3cml0ZWwodmFsLCBhZGRyKTsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgZ2VuX3BjaV9vcHMgPSB7CisJLnJlYWQJPSBnZW5fcGNpX2NvbmZpZ19yZWFkLAorCS53cml0ZQk9IGdlbl9wY2lfY29uZmlnX3dyaXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2VuX3BjaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicGNpLWhvc3QtY2FtLWdlbmVyaWMiLAorCSAgLmRhdGEgPSAmZ2VuX3BjaV9jZmdfY2FtX2J1c19vcHMgfSwKKworCXsgLmNvbXBhdGlibGUgPSAicGNpLWhvc3QtZWNhbS1nZW5lcmljIiwKKwkgIC5kYXRhID0gJmdlbl9wY2lfY2ZnX2VjYW1fYnVzX29wcyB9LAorCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGdlbl9wY2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IGdlbl9wY2lfY2FsY19pb19vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IG9mX3BjaV9yYW5nZSAqcmFuZ2UsCisJCQkJICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkgIHJlc291cmNlX3NpemVfdCAqb2Zmc2V0KQoreworCXN0YXRpYyBhdG9taWNfdCB3aW5zID0gQVRPTUlDX0lOSVQoMCk7CisJaW50IGVyciwgaWR4LCBtYXhfd2luOworCXVuc2lnbmVkIGludCB3aW5kb3c7CisKKwlpZiAoIVBBR0VfQUxJR05FRChyYW5nZS0+Y3B1X2FkZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1heF93aW4gPSAoSU9fU1BBQ0VfTElNSVQgKyAxKSAvIFNaXzY0SzsKKwlpZHggPSBhdG9taWNfaW5jX3JldHVybigmd2lucyk7CisJaWYgKGlkeCA+IG1heF93aW4pCisJCXJldHVybiAtRU5PU1BDOworCisJd2luZG93ID0gKGlkeCAtIDEpICogU1pfNjRLOworCWVyciA9IHBjaV9pb3JlbWFwX2lvKHdpbmRvdywgcmFuZ2UtPmNwdV9hZGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJb2ZfcGNpX3JhbmdlX3RvX3Jlc291cmNlKHJhbmdlLCBkZXYtPm9mX25vZGUsIHJlcyk7CisJcmVzLT5zdGFydCA9IHdpbmRvdzsKKwlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyByYW5nZS0+c2l6ZSAtIDE7CisJKm9mZnNldCA9IHdpbmRvdyAtIHJhbmdlLT5wY2lfYWRkcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW5fcGNpX2NhbGNfbWVtX29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IG9mX3BjaV9yYW5nZSAqcmFuZ2UsCisJCQkJICAgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJICAgcmVzb3VyY2Vfc2l6ZV90ICpvZmZzZXQpCit7CisJb2ZfcGNpX3JhbmdlX3RvX3Jlc291cmNlKHJhbmdlLCBkZXYtPm9mX25vZGUsIHJlcyk7CisJKm9mZnNldCA9IHJhbmdlLT5jcHVfYWRkciAtIHJhbmdlLT5wY2lfYWRkcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2VuX3BjaV9yZWxlYXNlX29mX3BjaV9yYW5nZXMoc3RydWN0IGdlbl9wY2kgKnBjaSkKK3sKKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlX3dpbmRvdyAqd2luOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW4sICZwY2ktPnJlc291cmNlcywgbGlzdCkKKwkJcmVsZWFzZV9yZXNvdXJjZSh3aW4tPnJlcyk7CisKKwlwY2lfZnJlZV9yZXNvdXJjZV9saXN0KCZwY2ktPnJlc291cmNlcyk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX3BjaV9wYXJzZV9yZXF1ZXN0X29mX3BjaV9yYW5nZXMoc3RydWN0IGdlbl9wY2kgKnBjaSkKK3sKKwlzdHJ1Y3Qgb2ZfcGNpX3JhbmdlIHJhbmdlOworCXN0cnVjdCBvZl9wY2lfcmFuZ2VfcGFyc2VyIHBhcnNlcjsKKwlpbnQgZXJyLCByZXNfdmFsaWQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjaS0+aG9zdC5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisKKwlpZiAob2ZfcGNpX3JhbmdlX3BhcnNlcl9pbml0KCZwYXJzZXIsIG5wKSkgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgXCJyYW5nZXNcIiBwcm9wZXJ0eVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvcl9lYWNoX29mX3BjaV9yYW5nZSgmcGFyc2VyLCAmcmFuZ2UpIHsKKwkJc3RydWN0IHJlc291cmNlICpwYXJlbnQsICpyZXM7CisJCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7CisJCXUzMiByZXN0eXBlID0gcmFuZ2UuZmxhZ3MgJiBJT1JFU09VUkNFX1RZUEVfQklUUzsKKworCQlyZXMgPSBkZXZtX2ttYWxsb2MoZGV2LCBzaXplb2YoKnJlcyksIEdGUF9LRVJORUwpOworCQlpZiAoIXJlcykgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X3JlbGVhc2VfcmVzOworCQl9CisKKwkJc3dpdGNoIChyZXN0eXBlKSB7CisJCWNhc2UgSU9SRVNPVVJDRV9JTzoKKwkJCXBhcmVudCA9ICZpb3BvcnRfcmVzb3VyY2U7CisJCQllcnIgPSBnZW5fcGNpX2NhbGNfaW9fb2Zmc2V0KGRldiwgJnJhbmdlLCByZXMsICZvZmZzZXQpOworCQkJYnJlYWs7CisJCWNhc2UgSU9SRVNPVVJDRV9NRU06CisJCQlwYXJlbnQgPSAmaW9tZW1fcmVzb3VyY2U7CisJCQllcnIgPSBnZW5fcGNpX2NhbGNfbWVtX29mZnNldChkZXYsICZyYW5nZSwgcmVzLCAmb2Zmc2V0KTsKKwkJCXJlc192YWxpZCB8PSAhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIIHx8IGVycik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChlcnIpIHsKKwkJCWRldl93YXJuKGRldiwKKwkJCQkgImVycm9yICVkOiBmYWlsZWQgdG8gYWRkIHJlc291cmNlIFt0eXBlIDB4JXgsICVsbGQgYnl0ZXNdXG4iLAorCQkJCSBlcnIsIHJlc3R5cGUsIHJhbmdlLnNpemUpOworCQkJY29udGludWU7CisJCX0KKworCQllcnIgPSByZXF1ZXN0X3Jlc291cmNlKHBhcmVudCwgcmVzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3JlbGVhc2VfcmVzOworCisJCXBjaV9hZGRfcmVzb3VyY2Vfb2Zmc2V0KCZwY2ktPnJlc291cmNlcywgcmVzLCBvZmZzZXQpOworCX0KKworCWlmICghcmVzX3ZhbGlkKSB7CisJCWRldl9lcnIoZGV2LCAibm9uLXByZWZldGNoYWJsZSBtZW1vcnkgcmVzb3VyY2UgcmVxdWlyZWRcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWxlYXNlX3JlczsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3JlbGVhc2VfcmVzOgorCWdlbl9wY2lfcmVsZWFzZV9vZl9wY2lfcmFuZ2VzKHBjaSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBnZW5fcGNpX3BhcnNlX21hcF9jZmdfd2luZG93cyhzdHJ1Y3QgZ2VuX3BjaSAqcGNpKQoreworCWludCBlcnI7CisJdTggYnVzX21heDsKKwlyZXNvdXJjZV9zaXplX3QgYnVzbjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJ1c19yYW5nZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2ktPmhvc3QuZGV2LnBhcmVudDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCisJaWYgKG9mX3BjaV9wYXJzZV9idXNfcmFuZ2UobnAsICZwY2ktPmNmZy5idXNfcmFuZ2UpKQorCQlwY2ktPmNmZy5idXNfcmFuZ2UgPSAoc3RydWN0IHJlc291cmNlKSB7CisJCQkubmFtZQk9IG5wLT5uYW1lLAorCQkJLnN0YXJ0CT0gMCwKKwkJCS5lbmQJPSAweGZmLAorCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVMsCisJCX07CisKKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcGNpLT5jZmcucmVzKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBcInJlZ1wiIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwY2ktPmNmZy53aW4gPSBkZXZtX2tjYWxsb2MoZGV2LCByZXNvdXJjZV9zaXplKCZwY2ktPmNmZy5idXNfcmFuZ2UpLAorCQkJCSAgICBzaXplb2YoKnBjaS0+Y2ZnLndpbiksIEdGUF9LRVJORUwpOworCWlmICghcGNpLT5jZmcud2luKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIExpbWl0IHRoZSBidXMtcmFuZ2UgdG8gZml0IHdpdGhpbiByZWcgKi8KKwlidXNfbWF4ID0gcGNpLT5jZmcuYnVzX3JhbmdlLnN0YXJ0ICsKKwkJICAocmVzb3VyY2Vfc2l6ZSgmcGNpLT5jZmcucmVzKSA+PiBwY2ktPmNmZy5vcHMtPmJ1c19zaGlmdCkgLSAxOworCXBjaS0+Y2ZnLmJ1c19yYW5nZS5lbmQgPSBtaW5fdChyZXNvdXJjZV9zaXplX3QsIHBjaS0+Y2ZnLmJ1c19yYW5nZS5lbmQsCisJCQkJICAgICAgIGJ1c19tYXgpOworCisJLyogTWFwIG91ciBDb25maWd1cmF0aW9uIFNwYWNlIHdpbmRvd3MgKi8KKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgcGNpLT5jZmcucmVzLnN0YXJ0LAorCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmcGNpLT5jZmcucmVzKSwKKwkJCQkgICAgICJDb25maWd1cmF0aW9uIFNwYWNlIikpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVzX3JhbmdlID0gJnBjaS0+Y2ZnLmJ1c19yYW5nZTsKKwlmb3IgKGJ1c24gPSBidXNfcmFuZ2UtPnN0YXJ0OyBidXNuIDw9IGJ1c19yYW5nZS0+ZW5kOyArK2J1c24pIHsKKwkJdTMyIGlkeCA9IGJ1c24gLSBidXNfcmFuZ2UtPnN0YXJ0OworCQl1MzIgc3ogPSAxIDw8IHBjaS0+Y2ZnLm9wcy0+YnVzX3NoaWZ0OworCisJCXBjaS0+Y2ZnLndpbltpZHhdID0gZGV2bV9pb3JlbWFwKGRldiwKKwkJCQkJCSBwY2ktPmNmZy5yZXMuc3RhcnQgKyBidXNuICogc3osCisJCQkJCQkgc3opOworCQlpZiAoIXBjaS0+Y2ZnLndpbltpZHhdKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogUmVnaXN0ZXIgYnVzIHJlc291cmNlICovCisJcGNpX2FkZF9yZXNvdXJjZSgmcGNpLT5yZXNvdXJjZXMsIGJ1c19yYW5nZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX3BjaV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgZ2VuX3BjaSAqcGNpID0gc3lzLT5wcml2YXRlX2RhdGE7CisJbGlzdF9zcGxpY2VfaW5pdCgmcGNpLT5yZXNvdXJjZXMsICZzeXMtPnJlc291cmNlcyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisJY29uc3QgY2hhciAqdHlwZTsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwljb25zdCBpbnQgKnByb3A7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBnZW5fcGNpICpwY2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBjaSksIEdGUF9LRVJORUwpOworCXN0cnVjdCBod19wY2kgaHcgPSB7CisJCS5ucl9jb250cm9sbGVycwk9IDEsCisJCS5wcml2YXRlX2RhdGEJPSAodm9pZCAqKikmcGNpLAorCQkuc2V0dXAJCT0gZ2VuX3BjaV9zZXR1cCwKKwkJLm1hcF9pcnEJPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCisJCS5vcHMJCT0gJmdlbl9wY2lfb3BzLAorCX07CisKKwlpZiAoIXBjaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKwlpZiAoIXR5cGUgfHwgc3RyY21wKHR5cGUsICJwY2kiKSkgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgXCJkZXZpY2VfdHlwZVwiICVzXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxwY2ktcHJvYmUtb25seSIsIE5VTEwpOworCWlmIChwcm9wKSB7CisJCWlmICgqcHJvcCkKKwkJCXBjaV9hZGRfZmxhZ3MoUENJX1BST0JFX09OTFkpOworCQllbHNlCisJCQlwY2lfY2xlYXJfZmxhZ3MoUENJX1BST0JFX09OTFkpOworCX0KKworCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShnZW5fcGNpX29mX21hdGNoLCBucCk7CisJcGNpLT5jZmcub3BzID0gb2ZfaWQtPmRhdGE7CisJcGNpLT5ob3N0LmRldi5wYXJlbnQgPSBkZXY7CisJSU5JVF9MSVNUX0hFQUQoJnBjaS0+aG9zdC53aW5kb3dzKTsKKwlJTklUX0xJU1RfSEVBRCgmcGNpLT5yZXNvdXJjZXMpOworCisJLyogUGFyc2Ugb3VyIFBDSSByYW5nZXMgYW5kIHJlcXVlc3QgdGhlaXIgcmVzb3VyY2VzICovCisJZXJyID0gZ2VuX3BjaV9wYXJzZV9yZXF1ZXN0X29mX3BjaV9yYW5nZXMocGNpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogUGFyc2UgYW5kIG1hcCBvdXIgQ29uZmlndXJhdGlvbiBTcGFjZSB3aW5kb3dzICovCisJZXJyID0gZ2VuX3BjaV9wYXJzZV9tYXBfY2ZnX3dpbmRvd3MocGNpKTsKKwlpZiAoZXJyKSB7CisJCWdlbl9wY2lfcmVsZWFzZV9vZl9wY2lfcmFuZ2VzKHBjaSk7CisJCXJldHVybiBlcnI7CisJfQorCisJcGNpX2NvbW1vbl9pbml0X2RldihkZXYsICZodyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdlbl9wY2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBjaS1ob3N0LWdlbmVyaWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZ2VuX3BjaV9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IGdlbl9wY2lfcHJvYmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihnZW5fcGNpX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBQQ0kgaG9zdCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIldpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMKaW5kZXggZWUwODI1MC4uYTU2NDVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgInBjaWUtZGVzaWdud2FyZS5oIgogCkBAIC0zMiwxMyArMzMsOSBAQAogCiBzdHJ1Y3QgaW14Nl9wY2llIHsKIAlpbnQJCQlyZXNldF9ncGlvOwotCWludAkJCXBvd2VyX29uX2dwaW87Ci0JaW50CQkJd2FrZV91cF9ncGlvOwotCWludAkJCWRpc2FibGVfZ3BpbzsKLQlzdHJ1Y3QgY2xrCQkqbHZkc19nYXRlOwotCXN0cnVjdCBjbGsJCSpzYXRhX3JlZl8xMDBtOwotCXN0cnVjdCBjbGsJCSpwY2llX3JlZl8xMjVtOwotCXN0cnVjdCBjbGsJCSpwY2llX2F4aTsKKwlzdHJ1Y3QgY2xrCQkqcGNpZV9idXM7CisJc3RydWN0IGNsawkJKnBjaWVfcGh5OworCXN0cnVjdCBjbGsJCSpwY2llOwogCXN0cnVjdCBwY2llX3BvcnQJcHA7CiAJc3RydWN0IHJlZ21hcAkJKmlvbXV4Y19ncHI7CiAJdm9pZCBfX2lvbWVtCQkqbWVtX2Jhc2U7CkBAIC0yMzEsMzYgKzIyOCwyNyBAQAogCXN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSA9IHRvX2lteDZfcGNpZShwcCk7CiAJaW50IHJldDsKIAotCWlmIChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+cG93ZXJfb25fZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKGlteDZfcGNpZS0+cG93ZXJfb25fZ3BpbywgMSk7Ci0KIAlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMSwKIAkJCUlNWDZRX0dQUjFfUENJRV9URVNUX1BELCAwIDw8IDE4KTsKIAlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMSwKIAkJCUlNWDZRX0dQUjFfUENJRV9SRUZfQ0xLX0VOLCAxIDw8IDE2KTsKIAotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnNhdGFfcmVmXzEwMG0pOworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWVfcGh5KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIocHAtPmRldiwgInVuYWJsZSB0byBlbmFibGUgc2F0YV9yZWZfMTAwbVxuIik7Ci0JCWdvdG8gZXJyX3NhdGFfcmVmOworCQlkZXZfZXJyKHBwLT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIHBjaWVfcGh5IGNsb2NrXG4iKTsKKwkJZ290byBlcnJfcGNpZV9waHk7CiAJfQogCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9yZWZfMTI1bSk7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9idXMpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihwcC0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBwY2llX3JlZl8xMjVtXG4iKTsKLQkJZ290byBlcnJfcGNpZV9yZWY7CisJCWRldl9lcnIocHAtPmRldiwgInVuYWJsZSB0byBlbmFibGUgcGNpZV9idXMgY2xvY2tcbiIpOworCQlnb3RvIGVycl9wY2llX2J1czsKIAl9CiAKLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaW14Nl9wY2llLT5sdmRzX2dhdGUpOworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWUpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihwcC0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBsdmRzX2dhdGVcbiIpOwotCQlnb3RvIGVycl9sdmRzX2dhdGU7Ci0JfQotCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9heGkpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihwcC0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBwY2llX2F4aVxuIik7Ci0JCWdvdG8gZXJyX3BjaWVfYXhpOworCQlkZXZfZXJyKHBwLT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIHBjaWUgY2xvY2tcbiIpOworCQlnb3RvIGVycl9wY2llOwogCX0KIAogCS8qIGFsbG93IHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplICovCkBAIC0yNzQsMTMgKzI2MiwxMSBAQAogCX0KIAlyZXR1cm4gMDsKIAotZXJyX3BjaWVfYXhpOgotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPmx2ZHNfZ2F0ZSk7Ci1lcnJfbHZkc19nYXRlOgotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPnBjaWVfcmVmXzEyNW0pOwotZXJyX3BjaWVfcmVmOgotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPnNhdGFfcmVmXzEwMG0pOwotZXJyX3NhdGFfcmVmOgorZXJyX3BjaWU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlteDZfcGNpZS0+cGNpZV9idXMpOworZXJyX3BjaWVfYnVzOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2X3BjaWUtPnBjaWVfcGh5KTsKK2Vycl9wY2llX3BoeToKIAlyZXR1cm4gcmV0OwogCiB9CkBAIC0zMjksNiArMzE1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXg2X3BjaWVfbXNpX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBwY2llX3BvcnQgKnBwID0gYXJnOworCisJcmV0dXJuIGR3X2hhbmRsZV9tc2lfaXJxKHBwKTsKK30KKwogc3RhdGljIGludCBpbXg2X3BjaWVfc3RhcnRfbGluayhzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKIHsKIAlzdHJ1Y3QgaW14Nl9wY2llICppbXg2X3BjaWUgPSB0b19pbXg2X3BjaWUocHApOwpAQCAtNDAzLDYgKzM5Niw5IEBACiAJZHdfcGNpZV9zZXR1cF9yYyhwcCk7CiAKIAlpbXg2X3BjaWVfc3RhcnRfbGluayhwcCk7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpCisJCWR3X3BjaWVfbXNpX2luaXQocHApOwogfQogCiBzdGF0aWMgdm9pZCBpbXg2X3BjaWVfcmVzZXRfcGh5KHN0cnVjdCBwY2llX3BvcnQgKnBwKQpAQCAtNDg3LDE1ICs0ODMsMjUgQEAKIAkuaG9zdF9pbml0ID0gaW14Nl9wY2llX2hvc3RfaW5pdCwKIH07CiAKLXN0YXRpYyBpbnQgaW14Nl9hZGRfcGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQgKnBwLAorc3RhdGljIGludCBfX2luaXQgaW14Nl9hZGRfcGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQgKnBwLAogCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwogCi0JcHAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFwcC0+aXJxKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaXJxXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7CisJCXBwLT5tc2lfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIm1zaSIpOworCQlpZiAocHAtPm1zaV9pcnEgPD0gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBNU0kgaXJxXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBwcC0+bXNpX2lycSwKKwkJICAgICAgICAgICAgICAgICAgICAgICBpbXg2X3BjaWVfbXNpX2hhbmRsZXIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgSVJRRl9TSEFSRUQsICJteDYtcGNpZS1tc2kiLCBwcCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IE1TSSBpcnFcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKIAlwcC0+cm9vdF9idXNfbnIgPSAtMTsKQEAgLTU0Niw2OSArNTUyLDI2IEBACiAJCX0KIAl9CiAKLQlpbXg2X3BjaWUtPnBvd2VyX29uX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgInBvd2VyLW9uLWdwaW8iLCAwKTsKLQlpZiAoZ3Bpb19pc192YWxpZChpbXg2X3BjaWUtPnBvd2VyX29uX2dwaW8pKSB7Ci0JCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZSgmcGRldi0+ZGV2LAotCQkJCQlpbXg2X3BjaWUtPnBvd2VyX29uX2dwaW8sCi0JCQkJCUdQSU9GX09VVF9JTklUX0xPVywKLQkJCQkJIlBDSWUgcG93ZXIgZW5hYmxlIik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgcG93ZXItb24gZ3Bpb1xuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JaW14Nl9wY2llLT53YWtlX3VwX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgIndha2UtdXAtZ3BpbyIsIDApOwotCWlmIChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+d2FrZV91cF9ncGlvKSkgewotCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoJnBkZXYtPmRldiwKLQkJCQkJaW14Nl9wY2llLT53YWtlX3VwX2dwaW8sCi0JCQkJCUdQSU9GX0lOLAotCQkJCQkiUENJZSB3YWtlIHVwIik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgd2FrZS11cCBncGlvXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlpbXg2X3BjaWUtPmRpc2FibGVfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAiZGlzYWJsZS1ncGlvIiwgMCk7Ci0JaWYgKGdwaW9faXNfdmFsaWQoaW14Nl9wY2llLT5kaXNhYmxlX2dwaW8pKSB7Ci0JCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZSgmcGRldi0+ZGV2LAotCQkJCQlpbXg2X3BjaWUtPmRpc2FibGVfZ3BpbywKLQkJCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwKLQkJCQkJIlBDSWUgZGlzYWJsZSBlbmRwb2ludCIpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGRpc2FibGUtZXAgZ3Bpb1xuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCiAJLyogRmV0Y2ggY2xvY2tzICovCi0JaW14Nl9wY2llLT5sdmRzX2dhdGUgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImx2ZHNfZ2F0ZSIpOwotCWlmIChJU19FUlIoaW14Nl9wY2llLT5sdmRzX2dhdGUpKSB7CisJaW14Nl9wY2llLT5wY2llX3BoeSA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNpZV9waHkiKTsKKwlpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZV9waHkpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJsdmRzX2dhdGUgY2xvY2sgc2VsZWN0IG1pc3Npbmcgb3IgaW52YWxpZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGlteDZfcGNpZS0+bHZkc19nYXRlKTsKKwkJCSJwY2llX3BoeSBjbG9jayBzb3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaW14Nl9wY2llLT5wY2llX3BoeSk7CiAJfQogCi0JaW14Nl9wY2llLT5zYXRhX3JlZl8xMDBtID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJzYXRhX3JlZl8xMDBtIik7Ci0JaWYgKElTX0VSUihpbXg2X3BjaWUtPnNhdGFfcmVmXzEwMG0pKSB7CisJaW14Nl9wY2llLT5wY2llX2J1cyA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNpZV9idXMiKTsKKwlpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZV9idXMpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJzYXRhX3JlZl8xMDBtIGNsb2NrIHNvdXJjZSBtaXNzaW5nIG9yIGludmFsaWRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihpbXg2X3BjaWUtPnNhdGFfcmVmXzEwMG0pOworCQkJInBjaWVfYnVzIGNsb2NrIHNvdXJjZSBtaXNzaW5nIG9yIGludmFsaWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihpbXg2X3BjaWUtPnBjaWVfYnVzKTsKIAl9CiAKLQlpbXg2X3BjaWUtPnBjaWVfcmVmXzEyNW0gPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInBjaWVfcmVmXzEyNW0iKTsKLQlpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZV9yZWZfMTI1bSkpIHsKKwlpbXg2X3BjaWUtPnBjaWUgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInBjaWUiKTsKKwlpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInBjaWVfcmVmXzEyNW0gY2xvY2sgc291cmNlIG1pc3Npbmcgb3IgaW52YWxpZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZV9yZWZfMTI1bSk7Ci0JfQotCi0JaW14Nl9wY2llLT5wY2llX2F4aSA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNpZV9heGkiKTsKLQlpZiAoSVNfRVJSKGlteDZfcGNpZS0+cGNpZV9heGkpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJwY2llX2F4aSBjbG9jayBzb3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoaW14Nl9wY2llLT5wY2llX2F4aSk7CisJCQkicGNpZSBjbG9jayBzb3VyY2UgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaW14Nl9wY2llLT5wY2llKTsKIAl9CiAKIAkvKiBHcmFiIEdQUiBjb25maWcgcmVnaXN0ZXIgcmFuZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXJjYXItZ2VuMi5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktcmNhci1nZW4yLmMKaW5kZXggNGZlMzQ5ZC4uM2VmODU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktcmNhci1nZW4yLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktcmNhci1nZW4yLmMKQEAgLTk5LDYgKzk5LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgaW9fcmVzOwogCXN0cnVjdCByZXNvdXJjZSBtZW1fcmVzOwogCXN0cnVjdCByZXNvdXJjZSAqY2ZnX3JlczsKKwl1bnNpZ25lZCBidXNucjsKIAlpbnQgaXJxOwogCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7CiB9OwpAQCAtMzE4LDggKzMxOSw4IEBACiAJcGNpX2FkZF9yZXNvdXJjZSgmc3lzLT5yZXNvdXJjZXMsICZwcml2LT5pb19yZXMpOwogCXBjaV9hZGRfcmVzb3VyY2UoJnN5cy0+cmVzb3VyY2VzLCAmcHJpdi0+bWVtX3Jlcyk7CiAKLQkvKiBTZXR1cCBidXMgbnVtYmVyIGJhc2VkIG9uIHBsYXRmb3JtIGRldmljZSBpZCAqLwotCXN5cy0+YnVzbnIgPSB0b19wbGF0Zm9ybV9kZXZpY2UocHJpdi0+ZGV2KS0+aWQ7CisJLyogU2V0dXAgYnVzIG51bWJlciBiYXNlZCBvbiBwbGF0Zm9ybSBkZXZpY2UgaWQgLyBvZiBidXMtcmFuZ2UgKi8KKwlzeXMtPmJ1c25yID0gcHJpdi0+YnVzbnI7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM3Miw2ICszNzMsMjMgQEAKIAogCXByaXYtPndpbmRvd19zaXplID0gU1pfMUc7CiAKKwlpZiAocGRldi0+ZGV2Lm9mX25vZGUpIHsKKwkJc3RydWN0IHJlc291cmNlIGJ1c25yOworCQlpbnQgcmV0OworCisJCXJldCA9IG9mX3BjaV9wYXJzZV9idXNfcmFuZ2UocGRldi0+ZGV2Lm9mX25vZGUsICZidXNucik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgYnVzLXJhbmdlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwcml2LT5idXNuciA9IGJ1c25yLnN0YXJ0OworCQlpZiAoYnVzbnIuZW5kICE9IGJ1c25yLnN0YXJ0KQorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm9ubHkgb25lIGJ1cyBudW1iZXIgc3VwcG9ydGVkXG4iKTsKKwl9IGVsc2UgeworCQlwcml2LT5idXNuciA9IHBkZXYtPmlkOworCX0KKwogCWh3X3ByaXZhdGVbMF0gPSBwcml2OwogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCWh3Lm5yX2NvbnRyb2xsZXJzID0gQVJSQVlfU0laRShod19wcml2YXRlKTsKQEAgLTM4MywxMSArNDAxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJjYXJfcGNpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBjaS1yOGE3NzkwIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMscGNpLXI4YTc3OTEiLCB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJjYXJfcGNpX29mX21hdGNoKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmNhcl9wY2lfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInBjaS1yY2FyLWdlbjIiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAorCQkub2ZfbWF0Y2hfdGFibGUgPSByY2FyX3BjaV9vZl9tYXRjaCwKIAl9LAogCS5wcm9iZSA9IHJjYXJfcGNpX3Byb2JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jCmluZGV4IGM0ZTM3MzIuLmUzYmY5ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuYwpAQCAtMTU2LDE1ICsxNTYsMTcgQEAKIH07CiAKIC8qIE1TSSBpbnQgaGFuZGxlciAqLwotdm9pZCBkd19oYW5kbGVfbXNpX2lycShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKK2lycXJldHVybl90IGR3X2hhbmRsZV9tc2lfaXJxKHN0cnVjdCBwY2llX3BvcnQgKnBwKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBpLCBwb3MsIGlycTsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTVNJX0NUUkxTOyBpKyspIHsKIAkJZHdfcGNpZV9yZF9vd25fY29uZihwcCwgUENJRV9NU0lfSU5UUjBfU1RBVFVTICsgaSAqIDEyLCA0LAogCQkJCSh1MzIgKikmdmFsKTsKIAkJaWYgKHZhbCkgeworCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJCQlwb3MgPSAwOwogCQkJd2hpbGUgKChwb3MgPSBmaW5kX25leHRfYml0KCZ2YWwsIDMyLCBwb3MpKSAhPSAzMikgewogCQkJCWlycSA9IGlycV9maW5kX21hcHBpbmcocHAtPmlycV9kb21haW4sCkBAIC0xNzcsNiArMTc5LDggQEAKIAkJCX0KIAkJfQogCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgZHdfcGNpZV9tc2lfaW5pdChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmggYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oCmluZGV4IDMwNjNiMzUuLmExNjlkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmgKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuaApAQCAtNjgsNyArNjgsNyBAQAogCiBpbnQgZHdfcGNpZV9jZmdfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIsIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKTsKIGludCBkd19wY2llX2NmZ193cml0ZSh2b2lkIF9faW9tZW0gKmFkZHIsIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpOwotdm9pZCBkd19oYW5kbGVfbXNpX2lycShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCk7CitpcnFyZXR1cm5fdCBkd19oYW5kbGVfbXNpX2lycShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCk7CiB2b2lkIGR3X3BjaWVfbXNpX2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHApOwogaW50IGR3X3BjaWVfbGlua191cChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCk7CiB2b2lkIGR3X3BjaWVfc2V0dXBfcmMoc3RydWN0IHBjaWVfcG9ydCAqcHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1yY2FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwNjEyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1yY2FyLmMKQEAgLTAsMCArMSwxMDA4IEBACisvKgorICogUENJZSBkcml2ZXIgZm9yIFJlbmVzYXMgUi1DYXIgU29DcworICogIENvcHlyaWdodCAoQykgMjAxNCBSZW5lc2FzIEVsZWN0cm9uaWNzIEV1cm9wZSBMdGQKKyAqCisgKiBCYXNlZCBvbjoKKyAqICBhcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKKyAqICBhcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDc3ODYuYworICogIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTEgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgInJjYXItcGNpZSIKKworI2RlZmluZSBQQ0lFQ0FSCQkJMHgwMDAwMTAKKyNkZWZpbmUgUENJRUNDVExSCQkweDAwMDAxOAorI2RlZmluZSAgQ09ORklHX1NFTkRfRU5BQkxFCSgxIDw8IDMxKQorI2RlZmluZSAgVFlQRTAJCQkoMCA8PCA4KQorI2RlZmluZSAgVFlQRTEJCQkoMSA8PCA4KQorI2RlZmluZSBQQ0lFQ0RSCQkJMHgwMDAwMjAKKyNkZWZpbmUgUENJRU1TUgkJCTB4MDAwMDI4CisjZGVmaW5lIFBDSUVJTlRYUgkJMHgwMDA0MDAKKyNkZWZpbmUgUENJRU1TSVRYUgkJMHgwMDA4NDAKKworLyogVHJhbnNmZXIgY29udHJvbCAqLworI2RlZmluZSBQQ0lFVENUTFIJCTB4MDIwMDAKKyNkZWZpbmUgIENGSU5JVAkJCTEKKyNkZWZpbmUgUENJRVRTVFIJCTB4MDIwMDQKKyNkZWZpbmUgIERBVEFfTElOS19BQ1RJVkUJMQorI2RlZmluZSBQQ0lFRVJSRlIJCTB4MDIwMjAKKyNkZWZpbmUgIFVOU1VQUE9SVEVEX1JFUVVFU1QJKDEgPDwgNCkKKyNkZWZpbmUgUENJRU1TSUZSCQkweDAyMDQ0CisjZGVmaW5lIFBDSUVNU0lBTFIJCTB4MDIwNDgKKyNkZWZpbmUgIE1TSUZFCQkJMQorI2RlZmluZSBQQ0lFTVNJQVVSCQkweDAyMDRjCisjZGVmaW5lIFBDSUVNU0lJRVIJCTB4MDIwNTAKKworLyogcm9vdCBwb3J0IGFkZHJlc3MgKi8KKyNkZWZpbmUgUENJRVBSQVIoeCkJCSgweDAyMDgwICsgKCh4KSAqIDB4NCkpCisKKy8qIGxvY2FsIGFkZHJlc3MgcmVnICYgbWFzayAqLworI2RlZmluZSBQQ0lFTEFSKHgpCQkoMHgwMjIwMCArICgoeCkgKiAweDIwKSkKKyNkZWZpbmUgUENJRUxBTVIoeCkJCSgweDAyMjA4ICsgKCh4KSAqIDB4MjApKQorI2RlZmluZSAgTEFNX1BSRUZFVENICQkoMSA8PCAzKQorI2RlZmluZSAgTEFNXzY0QklUCQkoMSA8PCAyKQorI2RlZmluZSAgTEFSX0VOQUJMRQkJKDEgPDwgMSkKKworLyogUENJZSBhZGRyZXNzIHJlZyAmIG1hc2sgKi8KKyNkZWZpbmUgUENJRVBBUkwoeCkJCSgweDAzNDAwICsgKCh4KSAqIDB4MjApKQorI2RlZmluZSBQQ0lFUEFSSCh4KQkJKDB4MDM0MDQgKyAoKHgpICogMHgyMCkpCisjZGVmaW5lIFBDSUVQQU1SKHgpCQkoMHgwMzQwOCArICgoeCkgKiAweDIwKSkKKyNkZWZpbmUgUENJRVBUQ1RMUih4KQkJKDB4MDM0MGMgKyAoKHgpICogMHgyMCkpCisjZGVmaW5lICBQQVJfRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgIElPX1NQQUNFCQkoMSA8PCA4KQorCisvKiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFBDSUNPTkYoeCkJCSgweDAxMDAwMCArICgoeCkgKiAweDQpKQorI2RlZmluZSBQTUNBUCh4KQkJKDB4MDEwMDQwICsgKCh4KSAqIDB4NCkpCisjZGVmaW5lIEVYUENBUCh4KQkJKDB4MDEwMDcwICsgKCh4KSAqIDB4NCkpCisjZGVmaW5lIFZDQ0FQKHgpCQkoMHgwMTAxMDAgKyAoKHgpICogMHg0KSkKKworLyogbGluayBsYXllciAqLworI2RlZmluZSBJRFNFVFIxCQkJMHgwMTEwMDQKKyNkZWZpbmUgVExDVExSCQkJMHgwMTEwNDgKKyNkZWZpbmUgTUFDU1IJCQkweDAxMTA1NAorI2RlZmluZSBNQUNDVExSCQkJMHgwMTEwNTgKKyNkZWZpbmUgIFNDUkFNQkxFX0RJU0FCTEUJKDEgPDwgMjcpCisKKy8qIFItQ2FyIEgxIFBIWSAqLworI2RlZmluZSBIMV9QQ0lFUEhZQURSUgkJMHgwNDAwMGMKKyNkZWZpbmUgIFdSSVRFX0NNRAkJKDEgPDwgMTYpCisjZGVmaW5lICBQSFlfQUNLCQkoMSA8PCAyNCkKKyNkZWZpbmUgIFJBVEVfUE9TCQkxMgorI2RlZmluZSAgTEFORV9QT1MJCTgKKyNkZWZpbmUgIEFEUl9QT1MJCTAKKyNkZWZpbmUgSDFfUENJRVBIWURPVVRSCQkweDA0MDAxNAorI2RlZmluZSBIMV9QQ0lFUEhZU1IJCTB4MDQwMDE4CisKKyNkZWZpbmUgSU5UX1BDSV9NU0lfTlIJMzIKKworI2RlZmluZSBSQ09ORih4KQkoUENJQ09ORigwKSsoeCkpCisjZGVmaW5lIFJQTUNBUCh4KQkoUE1DQVAoMCkrKHgpKQorI2RlZmluZSBSRVhQQ0FQKHgpCShFWFBDQVAoMCkrKHgpKQorI2RlZmluZSBSVkNDQVAoeCkJKFZDQ0FQKDApKyh4KSkKKworI2RlZmluZSAgUENJRV9DT05GX0JVUyhiKQkoKChiKSAmIDB4ZmYpIDw8IDI0KQorI2RlZmluZSAgUENJRV9DT05GX0RFVihkKQkoKChkKSAmIDB4MWYpIDw8IDE5KQorI2RlZmluZSAgUENJRV9DT05GX0ZVTkMoZikJKCgoZikgJiAweDcpIDw8IDE2KQorCisjZGVmaW5lIFBDSV9NQVhfUkVTT1VSQ0VTIDQKKyNkZWZpbmUgTUFYX05SX0lOQk9VTkRfTUFQUyA2CisKK3N0cnVjdCByY2FyX21zaSB7CisJREVDTEFSRV9CSVRNQVAodXNlZCwgSU5UX1BDSV9NU0lfTlIpOworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CisJc3RydWN0IG1zaV9jaGlwIGNoaXA7CisJdW5zaWduZWQgbG9uZyBwYWdlczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgaXJxMTsKKwlpbnQgaXJxMjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJjYXJfbXNpICp0b19yY2FyX21zaShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcmNhcl9tc2ksIGNoaXApOworfQorCisvKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBQQ0llIGludGVyZmFjZSAqLworc3RydWN0IHJjYXJfcGNpZSB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCXN0cnVjdCByZXNvdXJjZQkJcmVzW1BDSV9NQVhfUkVTT1VSQ0VTXTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCWJ1c247CisJaW50CQkJcm9vdF9idXNfbnI7CisJc3RydWN0IGNsawkJKmNsazsKKwlzdHJ1Y3QgY2xrCQkqYnVzX2NsazsKKwlzdHJ1Y3QJCQlyY2FyX21zaSBtc2k7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByY2FyX3BjaWUgKnN5c190b19wY2llKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlyZXR1cm4gc3lzLT5wcml2YXRlX2RhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV93cml0ZV9yZWcoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXdyaXRlbCh2YWwsIHBjaWUtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfcmVhZF9yZWcoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJcmV0dXJuIHJlYWRsKHBjaWUtPmJhc2UgKyByZWcpOworfQorCitlbnVtIHsKKwlQQ0lfQUNDRVNTX1JFQUQsCisJUENJX0FDQ0VTU19XUklURSwKK307CisKK3N0YXRpYyB2b2lkIHJjYXJfcm13MzIoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSwgaW50IHdoZXJlLCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJaW50IHNoaWZ0ID0gOCAqICh3aGVyZSAmIDMpOworCXUzMiB2YWwgPSBwY2lfcmVhZF9yZWcocGNpZSwgd2hlcmUgJiB+Myk7CisKKwl2YWwgJj0gfihtYXNrIDw8IHNoaWZ0KTsKKwl2YWwgfD0gZGF0YSA8PCBzaGlmdDsKKwlwY2lfd3JpdGVfcmVnKHBjaWUsIHZhbCwgd2hlcmUgJiB+Myk7Cit9CisKK3N0YXRpYyB1MzIgcmNhcl9yZWFkX2NvbmYoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSwgaW50IHdoZXJlKQoreworCWludCBzaGlmdCA9IDggKiAod2hlcmUgJiAzKTsKKwl1MzIgdmFsID0gcGNpX3JlYWRfcmVnKHBjaWUsIHdoZXJlICYgfjMpOworCisJcmV0dXJuIHZhbCA+PiBzaGlmdDsKK30KKworLyogU2VyaWFsaXphdGlvbiBpcyBwcm92aWRlZCBieSAncGNpX2xvY2snIGluIGRyaXZlcnMvcGNpL2FjY2Vzcy5jICovCitzdGF0aWMgaW50IHJjYXJfcGNpZV9jb25maWdfYWNjZXNzKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUsCisJCXVuc2lnbmVkIGNoYXIgYWNjZXNzX3R5cGUsIHN0cnVjdCBwY2lfYnVzICpidXMsCisJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgKmRhdGEpCit7CisJaW50IGRldiwgZnVuYywgcmVnLCBpbmRleDsKKworCWRldiA9IFBDSV9TTE9UKGRldmZuKTsKKwlmdW5jID0gUENJX0ZVTkMoZGV2Zm4pOworCXJlZyA9IHdoZXJlICYgfjM7CisJaW5kZXggPSByZWcgLyA0OworCisJLyoKKwkgKiBXaGlsZSBlYWNoIGNoYW5uZWwgaGFzIGl0cyBvd24gbWVtb3J5LW1hcHBlZCBleHRlbmRlZCBjb25maWcKKwkgKiBzcGFjZSwgaXQncyBnZW5lcmFsbHkgb25seSBhY2Nlc3NpYmxlIHdoZW4gaW4gZW5kcG9pbnQgbW9kZS4KKwkgKiBXaGVuIGluIHJvb3QgY29tcGxleCBtb2RlLCB0aGUgY29udHJvbGxlciBpcyB1bmFibGUgdG8gdGFyZ2V0CisJICogaXRzZWxmIHdpdGggZWl0aGVyIHR5cGUgMCBvciB0eXBlIDEgYWNjZXNzZXMsIGFuZCBpbmRlZWQsIGFueQorCSAqIGNvbnRyb2xsZXIgaW5pdGlhdGVkIHRhcmdldCB0cmFuc2ZlciB0byBpdHMgb3duIGNvbmZpZyBzcGFjZQorCSAqIHJlc3VsdCBpbiBhIGNvbXBsZXRlciBhYm9ydC4KKwkgKgorCSAqIEVhY2ggY2hhbm5lbCBlZmZlY3RpdmVseSBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGRldmljZSwgYnV0IGFzCisJICogdGhlIHNhbWUgY2hhbm5lbCA8LT4gZGV2aWNlIGFjY2VzcyB3b3JrcyBmb3IgYW55IFBDSV9TTE9UKCkKKwkgKiB2YWx1ZSwgd2UgY2hlYXQgYSBiaXQgaGVyZSBhbmQgYmluZCB0aGUgY29udHJvbGxlcidzIGNvbmZpZworCSAqIHNwYWNlIHRvIGRldmZuIDAgaW4gb3JkZXIgdG8gZW5hYmxlIHNlbGYtZW51bWVyYXRpb24uIEluIHRoaXMKKwkgKiBjYXNlIHRoZSByZWd1bGFyIEVDQVIvRUNEUiBwYXRoIGlzIHNpZGVsaW5lZCBhbmQgdGhlIG1hbmdsZWQKKwkgKiBjb25maWcgYWNjZXNzIGl0c2VsZiBpcyBpbml0aWF0ZWQgYXMgYW4gaW50ZXJuYWwgYnVzIHRyYW5zYWN0aW9uLgorCSAqLworCWlmIChwY2lfaXNfcm9vdF9idXMoYnVzKSkgeworCQlpZiAoZGV2ICE9IDApCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJCWlmIChhY2Nlc3NfdHlwZSA9PSBQQ0lfQUNDRVNTX1JFQUQpIHsKKwkJCSpkYXRhID0gcGNpX3JlYWRfcmVnKHBjaWUsIFBDSUNPTkYoaW5kZXgpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEtlZXAgYW4gZXllIG91dCBmb3IgY2hhbmdlcyB0byB0aGUgcm9vdCBidXMgbnVtYmVyICovCisJCQlpZiAocGNpX2lzX3Jvb3RfYnVzKGJ1cykgJiYgKHJlZyA9PSBQQ0lfUFJJTUFSWV9CVVMpKQorCQkJCXBjaWUtPnJvb3RfYnVzX25yID0gKmRhdGEgJiAweGZmOworCisJCQlwY2lfd3JpdGVfcmVnKHBjaWUsICpkYXRhLCBQQ0lDT05GKGluZGV4KSk7CisJCX0KKworCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCX0KKworCWlmIChwY2llLT5yb290X2J1c19uciA8IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkvKiBDbGVhciBlcnJvcnMgKi8KKwlwY2lfd3JpdGVfcmVnKHBjaWUsIHBjaV9yZWFkX3JlZyhwY2llLCBQQ0lFRVJSRlIpLCBQQ0lFRVJSRlIpOworCisJLyogU2V0IHRoZSBQSU8gYWRkcmVzcyAqLworCXBjaV93cml0ZV9yZWcocGNpZSwgUENJRV9DT05GX0JVUyhidXMtPm51bWJlcikgfCBQQ0lFX0NPTkZfREVWKGRldikgfAorCQkJCVBDSUVfQ09ORl9GVU5DKGZ1bmMpIHwgcmVnLCBQQ0lFQ0FSKTsKKworCS8qIEVuYWJsZSB0aGUgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi8KKwlpZiAoYnVzLT5wYXJlbnQtPm51bWJlciA9PSBwY2llLT5yb290X2J1c19ucikKKwkJcGNpX3dyaXRlX3JlZyhwY2llLCBDT05GSUdfU0VORF9FTkFCTEUgfCBUWVBFMCwgUENJRUNDVExSKTsKKwllbHNlCisJCXBjaV93cml0ZV9yZWcocGNpZSwgQ09ORklHX1NFTkRfRU5BQkxFIHwgVFlQRTEsIFBDSUVDQ1RMUik7CisKKwkvKiBDaGVjayBmb3IgZXJyb3JzICovCisJaWYgKHBjaV9yZWFkX3JlZyhwY2llLCBQQ0lFRVJSRlIpICYgVU5TVVBQT1JURURfUkVRVUVTVCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCS8qIENoZWNrIGZvciBtYXN0ZXIgYW5kIHRhcmdldCBhYm9ydHMgKi8KKwlpZiAocmNhcl9yZWFkX2NvbmYocGNpZSwgUkNPTkYoUENJX1NUQVRVUykpICYKKwkJKFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCB8IFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCkpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlpZiAoYWNjZXNzX3R5cGUgPT0gUENJX0FDQ0VTU19SRUFEKQorCQkqZGF0YSA9IHBjaV9yZWFkX3JlZyhwY2llLCBQQ0lFQ0RSKTsKKwllbHNlCisJCXBjaV93cml0ZV9yZWcocGNpZSwgKmRhdGEsIFBDSUVDRFIpOworCisJLyogRGlzYWJsZSB0aGUgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi8KKwlwY2lfd3JpdGVfcmVnKHBjaWUsIDAsIFBDSUVDQ1RMUik7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHJjYXJfcGNpZV9yZWFkX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCXN0cnVjdCByY2FyX3BjaWUgKnBjaWUgPSBzeXNfdG9fcGNpZShidXMtPnN5c2RhdGEpOworCWludCByZXQ7CisKKwlpZiAoKHNpemUgPT0gMikgJiYgKHdoZXJlICYgMSkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJZWxzZSBpZiAoKHNpemUgPT0gNCkgJiYgKHdoZXJlICYgMykpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlyZXQgPSByY2FyX3BjaWVfY29uZmlnX2FjY2VzcyhwY2llLCBQQ0lfQUNDRVNTX1JFQUQsCisJCQkJICAgICAgYnVzLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJaWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJKnZhbCA9IDB4ZmZmZmZmZmY7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9ICgqdmFsID4+ICg4ICogKHdoZXJlICYgMykpKSAmIDB4ZmY7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkqdmFsID0gKCp2YWwgPj4gKDggKiAod2hlcmUgJiAyKSkpICYgMHhmZmZmOworCisJZGV2X2RiZygmYnVzLT5kZXYsICJwY2llLWNvbmZpZy1yZWFkOiBidXM9JTNkIGRldmZuPTB4JTA0eCAiCisJCSJ3aGVyZT0weCUwNHggc2l6ZT0lZCB2YWw9MHglMDhseFxuIiwgYnVzLT5udW1iZXIsCisJCWRldmZuLCB3aGVyZSwgc2l6ZSwgKHVuc2lnbmVkIGxvbmcpKnZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXJpYWxpemF0aW9uIGlzIHByb3ZpZGVkIGJ5ICdwY2lfbG9jaycgaW4gZHJpdmVycy9wY2kvYWNjZXNzLmMgKi8KK3N0YXRpYyBpbnQgcmNhcl9wY2llX3dyaXRlX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7CisJaW50IHNoaWZ0LCByZXQ7CisJdTMyIGRhdGE7CisKKwlpZiAoKHNpemUgPT0gMikgJiYgKHdoZXJlICYgMSkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJZWxzZSBpZiAoKHNpemUgPT0gNCkgJiYgKHdoZXJlICYgMykpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlyZXQgPSByY2FyX3BjaWVfY29uZmlnX2FjY2VzcyhwY2llLCBQQ0lfQUNDRVNTX1JFQUQsCisJCQkJICAgICAgYnVzLCBkZXZmbiwgd2hlcmUsICZkYXRhKTsKKwlpZiAocmV0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9kYmcoJmJ1cy0+ZGV2LCAicGNpZS1jb25maWctd3JpdGU6IGJ1cz0lM2QgZGV2Zm49MHglMDR4ICIKKwkJIndoZXJlPTB4JTA0eCBzaXplPSVkIHZhbD0weCUwOGx4XG4iLCBidXMtPm51bWJlciwKKwkJZGV2Zm4sIHdoZXJlLCBzaXplLCAodW5zaWduZWQgbG9uZyl2YWwpOworCisJaWYgKHNpemUgPT0gMSkgeworCQlzaGlmdCA9IDggKiAod2hlcmUgJiAzKTsKKwkJZGF0YSAmPSB+KDB4ZmYgPDwgc2hpZnQpOworCQlkYXRhIHw9ICgodmFsICYgMHhmZikgPDwgc2hpZnQpOworCX0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7CisJCXNoaWZ0ID0gOCAqICh3aGVyZSAmIDIpOworCQlkYXRhICY9IH4oMHhmZmZmIDw8IHNoaWZ0KTsKKwkJZGF0YSB8PSAoKHZhbCAmIDB4ZmZmZikgPDwgc2hpZnQpOworCX0gZWxzZQorCQlkYXRhID0gdmFsOworCisJcmV0ID0gcmNhcl9wY2llX2NvbmZpZ19hY2Nlc3MocGNpZSwgUENJX0FDQ0VTU19XUklURSwKKwkJCQkgICAgICBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIHJjYXJfcGNpZV9vcHMgPSB7CisJLnJlYWQJPSByY2FyX3BjaWVfcmVhZF9jb25mLAorCS53cml0ZQk9IHJjYXJfcGNpZV93cml0ZV9jb25mLAorfTsKKworc3RhdGljIHZvaWQgcmNhcl9wY2llX3NldHVwX3dpbmRvdyhpbnQgd2luLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkgICBzdHJ1Y3QgcmNhcl9wY2llICpwY2llKQoreworCS8qIFNldHVwIFBDSWUgYWRkcmVzcyBzcGFjZSBtYXBwaW5ncyBmb3IgZWFjaCByZXNvdXJjZSAqLworCXJlc291cmNlX3NpemVfdCBzaXplOworCXUzMiBtYXNrOworCisJcGNpX3dyaXRlX3JlZyhwY2llLCAweDAwMDAwMDAwLCBQQ0lFUFRDVExSKHdpbikpOworCisJLyoKKwkgKiBUaGUgUEFNUiBtYXNrIGlzIGNhbGN1bGF0ZWQgaW4gdW5pdHMgb2YgMTI4Qnl0ZXMsIHdoaWNoCisJICoga2VlcHMgdGhpbmdzIHByZXR0eSBzaW1wbGUuCisJICovCisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwltYXNrID0gKHJvdW5kdXBfcG93X29mX3R3byhzaXplKSAvIFNaXzEyOCkgLSAxOworCXBjaV93cml0ZV9yZWcocGNpZSwgbWFzayA8PCA3LCBQQ0lFUEFNUih3aW4pKTsKKworCXBjaV93cml0ZV9yZWcocGNpZSwgdXBwZXJfMzJfYml0cyhyZXMtPnN0YXJ0KSwgUENJRVBBUkgod2luKSk7CisJcGNpX3dyaXRlX3JlZyhwY2llLCBsb3dlcl8zMl9iaXRzKHJlcy0+c3RhcnQpLCBQQ0lFUEFSTCh3aW4pKTsKKworCS8qIEZpcnN0IHJlc291cmNlIGlzIGZvciBJTyAqLworCW1hc2sgPSBQQVJfRU5BQkxFOworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJbWFzayB8PSBJT19TUEFDRTsKKworCXBjaV93cml0ZV9yZWcocGNpZSwgbWFzaywgUENJRVBUQ1RMUih3aW4pKTsKK30KKworc3RhdGljIGludCByY2FyX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKHN5cyk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CisKKwlwY2llLT5yb290X2J1c19uciA9IC0xOworCisJLyogU2V0dXAgUENJIHJlc291cmNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBQQ0lfTUFYX1JFU09VUkNFUzsgaSsrKSB7CisKKwkJcmVzID0gJnBjaWUtPnJlc1tpXTsKKwkJaWYgKCFyZXMtPmZsYWdzKQorCQkJY29udGludWU7CisKKwkJcmNhcl9wY2llX3NldHVwX3dpbmRvdyhpLCByZXMsIHBjaWUpOworCisJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCXBjaV9pb3JlbWFwX2lvKG5yICogU1pfNjRLLCByZXMtPnN0YXJ0KTsKKwkJZWxzZQorCQkJcGNpX2FkZF9yZXNvdXJjZSgmc3lzLT5yZXNvdXJjZXMsIHJlcyk7CisJfQorCXBjaV9hZGRfcmVzb3VyY2UoJnN5cy0+cmVzb3VyY2VzLCAmcGNpZS0+YnVzbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmNhcl9wY2llX2FkZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKKwkJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7CisKKwkJYnVzLT5tc2kgPSAmcGNpZS0+bXNpLmNoaXA7CisJfQorfQorCitzdHJ1Y3QgaHdfcGNpIHJjYXJfcGNpID0geworCS5zZXR1cCAgICAgICAgICA9IHJjYXJfcGNpZV9zZXR1cCwKKwkubWFwX2lycSAgICAgICAgPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCisJLm9wcyAgICAgICAgICAgID0gJnJjYXJfcGNpZV9vcHMsCisJLmFkZF9idXMgICAgICAgID0gcmNhcl9wY2llX2FkZF9idXMsCit9OworCitzdGF0aWMgdm9pZCByY2FyX3BjaWVfZW5hYmxlKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShwY2llLT5kZXYpOworCisJcmNhcl9wY2kubnJfY29udHJvbGxlcnMgPSAxOworCXJjYXJfcGNpLnByaXZhdGVfZGF0YSA9ICh2b2lkICoqKSZwY2llOworCisJcGNpX2NvbW1vbl9pbml0X2RldigmcGRldi0+ZGV2LCAmcmNhcl9wY2kpOworI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUworCXJjYXJfcGNpLmRvbWFpbisrOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgcGh5X3dhaXRfZm9yX2FjayhzdHJ1Y3QgcmNhcl9wY2llICpwY2llKQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gMTAwOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQlpZiAocGNpX3JlYWRfcmVnKHBjaWUsIEgxX1BDSUVQSFlBRFJSKSAmIFBIWV9BQ0spCisJCQlyZXR1cm4gMDsKKworCQl1ZGVsYXkoMTAwKTsKKwl9CisKKwlkZXZfZXJyKHBjaWUtPmRldiwgIkFjY2VzcyB0byBQQ0llIHBoeSB0aW1lZCBvdXRcbiIpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIHBoeV93cml0ZV9yZWcoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSwKKwkJCQkgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBhZGRyLAorCQkJCSB1bnNpZ25lZCBpbnQgbGFuZSwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBwaHlhZGRyOworCisJcGh5YWRkciA9IFdSSVRFX0NNRCB8CisJCSgocmF0ZSAmIDEpIDw8IFJBVEVfUE9TKSB8CisJCSgobGFuZSAmIDB4ZikgPDwgTEFORV9QT1MpIHwKKwkJKChhZGRyICYgMHhmZikgPDwgQURSX1BPUyk7CisKKwkvKiBTZXQgd3JpdGUgZGF0YSAqLworCXBjaV93cml0ZV9yZWcocGNpZSwgZGF0YSwgSDFfUENJRVBIWURPVVRSKTsKKwlwY2lfd3JpdGVfcmVnKHBjaWUsIHBoeWFkZHIsIEgxX1BDSUVQSFlBRFJSKTsKKworCS8qIElnbm9yZSBlcnJvcnMgYXMgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggaWYgdGhlIGRhdGEgbGluayBpcyBkb3duICovCisJcGh5X3dhaXRfZm9yX2FjayhwY2llKTsKKworCS8qIENsZWFyIGNvbW1hbmQgKi8KKwlwY2lfd3JpdGVfcmVnKHBjaWUsIDAsIEgxX1BDSUVQSFlET1VUUik7CisJcGNpX3dyaXRlX3JlZyhwY2llLCAwLCBIMV9QQ0lFUEhZQURSUik7CisKKwkvKiBJZ25vcmUgZXJyb3JzIGFzIHRoZXkgd2lsbCBiZSBkZWFsdCB3aXRoIGlmIHRoZSBkYXRhIGxpbmsgaXMgZG93biAqLworCXBoeV93YWl0X2Zvcl9hY2socGNpZSk7Cit9CisKK3N0YXRpYyBpbnQgcmNhcl9wY2llX3dhaXRfZm9yX2RsKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJaWYgKChwY2lfcmVhZF9yZWcocGNpZSwgUENJRVRTVFIpICYgREFUQV9MSU5LX0FDVElWRSkpCisJCQlyZXR1cm4gMDsKKworCQltc2xlZXAoNSk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgcmNhcl9wY2llX2h3X2luaXQoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSkKK3sKKwlpbnQgZXJyOworCisJLyogQmVnaW4gaW5pdGlhbGl6YXRpb24gKi8KKwlwY2lfd3JpdGVfcmVnKHBjaWUsIDAsIFBDSUVUQ1RMUik7CisKKwkvKiBTZXQgbW9kZSAqLworCXBjaV93cml0ZV9yZWcocGNpZSwgMSwgUENJRU1TUik7CisKKwkvKgorCSAqIEluaXRpYWwgaGVhZGVyIGZvciBwb3J0IGNvbmZpZyBzcGFjZSBpcyB0eXBlIDEsIHNldCB0aGUgZGV2aWNlCisJICogY2xhc3MgdG8gbWF0Y2guIEhhcmR3YXJlIHRha2VzIGNhcmUgb2YgcHJvcGFnYXRpbmcgdGhlIElEU0VUUgorCSAqIHNldHRpbmdzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGJvdGhlciB3aXRoIGEgcXVpcmsuCisJICovCisJcGNpX3dyaXRlX3JlZyhwY2llLCBQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCAxNiwgSURTRVRSMSk7CisKKwkvKgorCSAqIFNldHVwIFNlY29uZGFyeSBCdXMgTnVtYmVyICYgU3Vib3JkaW5hdGUgQnVzIE51bWJlciwgZXZlbiB0aG91Z2gKKwkgKiB0aGV5IGFyZW4ndCB1c2VkLCB0byBhdm9pZCBicmlkZ2UgYmVpbmcgZGV0ZWN0ZWQgYXMgYnJva2VuLgorCSAqLworCXJjYXJfcm13MzIocGNpZSwgUkNPTkYoUENJX1NFQ09OREFSWV9CVVMpLCAweGZmLCAxKTsKKwlyY2FyX3JtdzMyKHBjaWUsIFJDT05GKFBDSV9TVUJPUkRJTkFURV9CVVMpLCAweGZmLCAxKTsKKworCS8qIEluaXRpYWxpemUgZGVmYXVsdCBjYXBhYmlsaXRpZXMuICovCisJcmNhcl9ybXczMihwY2llLCBSRVhQQ0FQKDApLCAwLCBQQ0lfQ0FQX0lEX0VYUCk7CisJcmNhcl9ybXczMihwY2llLCBSRVhQQ0FQKFBDSV9FWFBfRkxBR1MpLAorCQlQQ0lfRVhQX0ZMQUdTX1RZUEUsIFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgPDwgNCk7CisJcmNhcl9ybXczMihwY2llLCBSQ09ORihQQ0lfSEVBREVSX1RZUEUpLCAweDdmLAorCQlQQ0lfSEVBREVSX1RZUEVfQlJJREdFKTsKKworCS8qIEVuYWJsZSBkYXRhIGxpbmsgbGF5ZXIgYWN0aXZlIHN0YXRlIHJlcG9ydGluZyAqLworCXJjYXJfcm13MzIocGNpZSwgUkVYUENBUChQQ0lfRVhQX0xOS0NBUCksIDAsIFBDSV9FWFBfTE5LQ0FQX0RMTExBUkMpOworCisJLyogV3JpdGUgb3V0IHRoZSBwaHlzaWNhbCBzbG90IG51bWJlciA9IDAgKi8KKwlyY2FyX3JtdzMyKHBjaWUsIFJFWFBDQVAoUENJX0VYUF9TTFRDQVApLCBQQ0lfRVhQX1NMVENBUF9QU04sIDApOworCisJLyogU2V0IHRoZSBjb21wbGV0aW9uIHRpbWVyIHRpbWVvdXQgdG8gdGhlIG1heGltdW0gNTBtcy4gKi8KKwlyY2FyX3JtdzMyKHBjaWUsIFRMQ1RMUisxLCAweDNmLCA1MCk7CisKKwkvKiBUZXJtaW5hdGUgbGlzdCBvZiBjYXBhYmlsaXRpZXMgKE5leHQgQ2FwYWJpbGl0eSBPZmZzZXQ9MCkgKi8KKwlyY2FyX3JtdzMyKHBjaWUsIFJWQ0NBUCgwKSwgMHhmZmYwLCAwKTsKKworCS8qIEVuYWJsZSBNQUMgZGF0YSBzY3JhbWJsaW5nLiAqLworCXJjYXJfcm13MzIocGNpZSwgTUFDQ1RMUiwgU0NSQU1CTEVfRElTQUJMRSwgMCk7CisKKwkvKiBFbmFibGUgTVNJICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKQorCQlwY2lfd3JpdGVfcmVnKHBjaWUsIDB4MTAxZjAwMDAsIFBDSUVNU0lUWFIpOworCisJLyogRmluaXNoIGluaXRpYWxpemF0aW9uIC0gZXN0YWJsaXNoIGEgUENJIEV4cHJlc3MgbGluayAqLworCXBjaV93cml0ZV9yZWcocGNpZSwgQ0ZJTklULCBQQ0lFVENUTFIpOworCisJLyogVGhpcyB3aWxsIHRpbWVvdXQgaWYgd2UgZG9uJ3QgaGF2ZSBhIGxpbmsuICovCisJZXJyID0gcmNhcl9wY2llX3dhaXRfZm9yX2RsKHBjaWUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBFbmFibGUgSU5UeCBpbnRlcnJ1cHRzICovCisJcmNhcl9ybXczMihwY2llLCBQQ0lFSU5UWFIsIDAsIDB4RiA8PCA4KTsKKworCS8qIEVuYWJsZSBzbGF2ZSBCdXMgTWFzdGVyaW5nICovCisJcmNhcl9ybXczMihwY2llLCBSQ09ORihQQ0lfU1RBVFVTKSwgUENJX1NUQVRVU19ERVZTRUxfTUFTSywKKwkJUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIgfAorCQlQQ0lfU1RBVFVTX0NBUF9MSVNUIHwgUENJX1NUQVRVU19ERVZTRUxfRkFTVCk7CisKKwl3bWIoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJjYXJfcGNpZV9od19pbml0X2gxKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDsKKworCS8qIEluaXRpYWxpemUgdGhlIHBoeSAqLworCXBoeV93cml0ZV9yZWcocGNpZSwgMCwgMHg0MiwgMHgxLCAweDBFQzM0MTkxKTsKKwlwaHlfd3JpdGVfcmVnKHBjaWUsIDEsIDB4NDIsIDB4MSwgMHgwRUMzNDE4MCk7CisJcGh5X3dyaXRlX3JlZyhwY2llLCAwLCAweDQzLCAweDEsIDB4MDAyMTAxODgpOworCXBoeV93cml0ZV9yZWcocGNpZSwgMSwgMHg0MywgMHgxLCAweDAwMjEwMTg4KTsKKwlwaHlfd3JpdGVfcmVnKHBjaWUsIDAsIDB4NDQsIDB4MSwgMHgwMTVDMDAxNCk7CisJcGh5X3dyaXRlX3JlZyhwY2llLCAxLCAweDQ0LCAweDEsIDB4MDE1QzAwMTQpOworCXBoeV93cml0ZV9yZWcocGNpZSwgMSwgMHg0QywgMHgxLCAweDc4NjE3NEEwKTsKKwlwaHlfd3JpdGVfcmVnKHBjaWUsIDEsIDB4NEQsIDB4MSwgMHgwNDgwMDBCQik7CisJcGh5X3dyaXRlX3JlZyhwY2llLCAwLCAweDUxLCAweDEsIDB4MDc5RUMwNjIpOworCXBoeV93cml0ZV9yZWcocGNpZSwgMCwgMHg1MiwgMHgxLCAweDIwMDAwMDAwKTsKKwlwaHlfd3JpdGVfcmVnKHBjaWUsIDEsIDB4NTIsIDB4MSwgMHgyMDAwMDAwMCk7CisJcGh5X3dyaXRlX3JlZyhwY2llLCAxLCAweDU2LCAweDEsIDB4MDAwMDM4MDYpOworCisJcGh5X3dyaXRlX3JlZyhwY2llLCAwLCAweDYwLCAweDEsIDB4MDA0QjAzQTUpOworCXBoeV93cml0ZV9yZWcocGNpZSwgMCwgMHg2NCwgMHgxLCAweDNGMEYxRjBGKTsKKwlwaHlfd3JpdGVfcmVnKHBjaWUsIDAsIDB4NjYsIDB4MSwgMHgwMDAwODAwMCk7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCWlmIChwY2lfcmVhZF9yZWcocGNpZSwgSDFfUENJRVBIWVNSKSkKKwkJCXJldHVybiByY2FyX3BjaWVfaHdfaW5pdChwY2llKTsKKworCQltc2xlZXAoNSk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgcmNhcl9tc2lfYWxsb2Moc3RydWN0IHJjYXJfbXNpICpjaGlwKQoreworCWludCBtc2k7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKworCW1zaSA9IGZpbmRfZmlyc3RfemVyb19iaXQoY2hpcC0+dXNlZCwgSU5UX1BDSV9NU0lfTlIpOworCWlmIChtc2kgPCBJTlRfUENJX01TSV9OUikKKwkJc2V0X2JpdChtc2ksIGNoaXAtPnVzZWQpOworCWVsc2UKKwkJbXNpID0gLUVOT1NQQzsKKworCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXR1cm4gbXNpOworfQorCitzdGF0aWMgdm9pZCByY2FyX21zaV9mcmVlKHN0cnVjdCByY2FyX21zaSAqY2hpcCwgdW5zaWduZWQgbG9uZyBpcnEpCit7CisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJY2xlYXJfYml0KGlycSwgY2hpcC0+dXNlZCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHJjYXJfcGNpZV9tc2lfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IGRhdGE7CisJc3RydWN0IHJjYXJfbXNpICptc2kgPSAmcGNpZS0+bXNpOworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gcGNpX3JlYWRfcmVnKHBjaWUsIFBDSUVNU0lGUik7CisKKwkvKiBNU0kgJiBJTlR4IHNoYXJlIGFuIGludGVycnVwdCAtIHdlIG9ubHkgaGFuZGxlIE1TSSBoZXJlICovCisJaWYgKCFyZWcpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXdoaWxlIChyZWcpIHsKKwkJdW5zaWduZWQgaW50IGluZGV4ID0gZmluZF9maXJzdF9iaXQoJnJlZywgMzIpOworCQl1bnNpZ25lZCBpbnQgaXJxOworCisJCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJcGNpX3dyaXRlX3JlZyhwY2llLCAxIDw8IGluZGV4LCBQQ0lFTVNJRlIpOworCisJCWlycSA9IGlycV9maW5kX21hcHBpbmcobXNpLT5kb21haW4sIGluZGV4KTsKKwkJaWYgKGlycSkgeworCQkJaWYgKHRlc3RfYml0KGluZGV4LCBtc2ktPnVzZWQpKQorCQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCQkJZWxzZQorCQkJCWRldl9pbmZvKHBjaWUtPmRldiwgInVuaGFuZGxlZCBNU0lcbiIpOworCQl9IGVsc2UgeworCQkJLyogVW5rbm93biBNU0ksIGp1c3QgY2xlYXIgaXQgKi8KKwkJCWRldl9kYmcocGNpZS0+ZGV2LCAidW5leHBlY3RlZCBNU0lcbiIpOworCQl9CisKKwkJLyogc2VlIGlmIHRoZXJlJ3MgYW55IG1vcmUgcGVuZGluZyBpbiB0aGlzIHZlY3RvciAqLworCQlyZWcgPSBwY2lfcmVhZF9yZWcocGNpZSwgUENJRU1TSUZSKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcmNhcl9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHJjYXJfbXNpICptc2kgPSB0b19yY2FyX21zaShjaGlwKTsKKwlzdHJ1Y3QgcmNhcl9wY2llICpwY2llID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCByY2FyX3BjaWUsIG1zaS5jaGlwKTsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgaHdpcnE7CisKKwlod2lycSA9IHJjYXJfbXNpX2FsbG9jKG1zaSk7CisJaWYgKGh3aXJxIDwgMCkKKwkJcmV0dXJuIGh3aXJxOworCisJaXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKG1zaS0+ZG9tYWluLCBod2lycSk7CisJaWYgKCFpcnEpIHsKKwkJcmNhcl9tc2lfZnJlZShtc2ksIGh3aXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXJxX3NldF9tc2lfZGVzYyhpcnEsIGRlc2MpOworCisJbXNnLmFkZHJlc3NfbG8gPSBwY2lfcmVhZF9yZWcocGNpZSwgUENJRU1TSUFMUikgJiB+TVNJRkU7CisJbXNnLmFkZHJlc3NfaGkgPSBwY2lfcmVhZF9yZWcocGNpZSwgUENJRU1TSUFVUik7CisJbXNnLmRhdGEgPSBod2lycTsKKworCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByY2FyX21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCByY2FyX21zaSAqbXNpID0gdG9fcmNhcl9tc2koY2hpcCk7CisJc3RydWN0IGlycV9kYXRhICpkID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOworCisJcmNhcl9tc2lfZnJlZShtc2ksIGQtPmh3aXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByY2FyX21zaV9pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJSLUNhciBQQ0llIE1TSSIsCisJLmlycV9lbmFibGUgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBtYXNrX21zaV9pcnEsCisJLmlycV9tYXNrID0gbWFza19tc2lfaXJxLAorCS5pcnFfdW5tYXNrID0gdW5tYXNrX21zaV9pcnEsCit9OworCitzdGF0aWMgaW50IHJjYXJfbXNpX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLAorCQkJaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZyY2FyX21zaV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpOworCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgZG9tYWluLT5ob3N0X2RhdGEpOworCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIG1zaV9kb21haW5fb3BzID0geworCS5tYXAgPSByY2FyX21zaV9tYXAsCit9OworCitzdGF0aWMgaW50IHJjYXJfcGNpZV9lbmFibGVfbXNpKHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShwY2llLT5kZXYpOworCXN0cnVjdCByY2FyX21zaSAqbXNpID0gJnBjaWUtPm1zaTsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IGVycjsKKworCW11dGV4X2luaXQoJm1zaS0+bG9jayk7CisKKwltc2ktPmNoaXAuZGV2ID0gcGNpZS0+ZGV2OworCW1zaS0+Y2hpcC5zZXR1cF9pcnEgPSByY2FyX21zaV9zZXR1cF9pcnE7CisJbXNpLT5jaGlwLnRlYXJkb3duX2lycSA9IHJjYXJfbXNpX3RlYXJkb3duX2lycTsKKworCW1zaS0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKHBjaWUtPmRldi0+b2Zfbm9kZSwgSU5UX1BDSV9NU0lfTlIsCisJCQkJCSAgICAmbXNpX2RvbWFpbl9vcHMsICZtc2ktPmNoaXApOworCWlmICghbXNpLT5kb21haW4pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBJUlEgZG9tYWluXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVHdvIGlycXMgYXJlIGZvciBNU0ksIGJ1dCB0aGV5IGFyZSBhbHNvIHVzZWQgZm9yIG5vbi1NU0kgaXJxcyAqLworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgbXNpLT5pcnExLCByY2FyX3BjaWVfbXNpX2lycSwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgcmNhcl9tc2lfaXJxX2NoaXAubmFtZSwgcGNpZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnI7CisJfQorCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBtc2ktPmlycTIsIHJjYXJfcGNpZV9tc2lfaXJxLAorCQkJICAgICAgIElSUUZfU0hBUkVELCByY2FyX21zaV9pcnFfY2hpcC5uYW1lLCBwY2llKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBzZXR1cCBNU0kgZGF0YSB0YXJnZXQgKi8KKwltc2ktPnBhZ2VzID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAwKTsKKwliYXNlID0gdmlydF90b19waHlzKCh2b2lkICopbXNpLT5wYWdlcyk7CisKKwlwY2lfd3JpdGVfcmVnKHBjaWUsIGJhc2UgfCBNU0lGRSwgUENJRU1TSUFMUik7CisJcGNpX3dyaXRlX3JlZyhwY2llLCAwLCBQQ0lFTVNJQVVSKTsKKworCS8qIGVuYWJsZSBhbGwgTVNJIGludGVycnVwdHMgKi8KKwlwY2lfd3JpdGVfcmVnKHBjaWUsIDB4ZmZmZmZmZmYsIFBDSUVNU0lJRVIpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlpcnFfZG9tYWluX3JlbW92ZShtc2ktPmRvbWFpbik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByY2FyX3BjaWVfZ2V0X3Jlc291cmNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgIHN0cnVjdCByY2FyX3BjaWUgKnBjaWUpCit7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlpbnQgZXJyLCBpOworCisJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShwZGV2LT5kZXYub2Zfbm9kZSwgMCwgJnJlcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBjaWUtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNpZSIpOworCWlmIChJU19FUlIocGNpZS0+Y2xrKSkgeworCQlkZXZfZXJyKHBjaWUtPmRldiwgImNhbm5vdCBnZXQgcGxhdGZvcm0gY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwY2llLT5jbGspOworCX0KKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUocGNpZS0+Y2xrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfY2xrOworCisJcGNpZS0+YnVzX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNpZV9idXMiKTsKKwlpZiAoSVNfRVJSKHBjaWUtPmJ1c19jbGspKSB7CisJCWRldl9lcnIocGNpZS0+ZGV2LCAiY2Fubm90IGdldCBwY2llIGJ1cyBjbG9ja1xuIik7CisJCWVyciA9IFBUUl9FUlIocGNpZS0+YnVzX2Nsayk7CisJCWdvdG8gZmFpbF9jbGs7CisJfQorCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShwY2llLT5idXNfY2xrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tYXBfcmVnOworCisJaSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAwKTsKKwlpZiAoaSA8IDApIHsKKwkJZGV2X2VycihwY2llLT5kZXYsICJjYW5ub3QgZ2V0IHBsYXRmb3JtIHJlc291cmNlcyBmb3IgbXNpIGludGVycnVwdFxuIik7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX21hcF9yZWc7CisJfQorCXBjaWUtPm1zaS5pcnExID0gaTsKKworCWkgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMSk7CisJaWYgKGkgPCAwKSB7CisJCWRldl9lcnIocGNpZS0+ZGV2LCAiY2Fubm90IGdldCBwbGF0Zm9ybSByZXNvdXJjZXMgZm9yIG1zaSBpbnRlcnJ1cHRcbiIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9tYXBfcmVnOworCX0KKwlwY2llLT5tc2kuaXJxMiA9IGk7CisKKwlwY2llLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsICZyZXMpOworCWlmIChJU19FUlIocGNpZS0+YmFzZSkpIHsKKwkJZXJyID0gUFRSX0VSUihwY2llLT5iYXNlKTsKKwkJZ290byBlcnJfbWFwX3JlZzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX21hcF9yZWc6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBjaWUtPmJ1c19jbGspOworZmFpbF9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBjaWUtPmNsayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJjYXJfcGNpZV9pbmJvdW5kX3JhbmdlcyhzdHJ1Y3QgcmNhcl9wY2llICpwY2llLAorCQkJCSAgICBzdHJ1Y3Qgb2ZfcGNpX3JhbmdlICpyYW5nZSwKKwkJCQkgICAgaW50ICppbmRleCkKK3sKKwl1NjQgcmVzdHlwZSA9IHJhbmdlLT5mbGFnczsKKwl1NjQgY3B1X2FkZHIgPSByYW5nZS0+Y3B1X2FkZHI7CisJdTY0IGNwdV9lbmQgPSByYW5nZS0+Y3B1X2FkZHIgKyByYW5nZS0+c2l6ZTsKKwl1NjQgcGNpX2FkZHIgPSByYW5nZS0+cGNpX2FkZHI7CisJdTMyIGZsYWdzID0gTEFNXzY0QklUIHwgTEFSX0VOQUJMRTsKKwl1NjQgbWFzazsKKwl1NjQgc2l6ZTsKKwlpbnQgaWR4ID0gKmluZGV4OworCisJaWYgKHJlc3R5cGUgJiBJT1JFU09VUkNFX1BSRUZFVENIKQorCQlmbGFncyB8PSBMQU1fUFJFRkVUQ0g7CisKKwkvKgorCSAqIElmIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpcyBsYXJnZXIgdGhhbiB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdGFydAorCSAqIGFkZHJlc3MsIHdlIGhhdmUgdG8gdXNlIG11bHRpcGxlIGVudHJpZXMgdG8gcGVyZm9ybSB0aGUgbWFwcGluZy4KKwkgKi8KKwlpZiAoY3B1X2FkZHIgPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgbnJfemVyb3MgPSBfX2ZmczY0KGNwdV9hZGRyKTsKKwkJdTY0IGFsaWdubWVudCA9IDFVTEwgPDwgbnJfemVyb3M7CisJCXNpemUgPSBtaW4ocmFuZ2UtPnNpemUsIGFsaWdubWVudCk7CisJfSBlbHNlIHsKKwkJc2l6ZSA9IHJhbmdlLT5zaXplOworCX0KKwkvKiBIYXJkd2FyZSBzdXBwb3J0cyBtYXggNEdpQiBpbmJvdW5kIHJlZ2lvbiAqLworCXNpemUgPSBtaW4oc2l6ZSwgMVVMTCA8PCAzMik7CisKKwltYXNrID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpIC0gMTsKKwltYXNrICY9IH4weGY7CisKKwl3aGlsZSAoY3B1X2FkZHIgPCBjcHVfZW5kKSB7CisJCS8qCisJCSAqIFNldCB1cCA2NC1iaXQgaW5ib3VuZCByZWdpb25zIGFzIHRoZSByYW5nZSBwYXJzZXIgZG9lc24ndAorCQkgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIDMyIGFuZCA2NC1iaXQgdHlwZXMuCisJCSAqLworCQlwY2lfd3JpdGVfcmVnKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLCBQQ0lFUFJBUihpZHgpKTsKKwkJcGNpX3dyaXRlX3JlZyhwY2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSwgUENJRUxBUihpZHgpKTsKKwkJcGNpX3dyaXRlX3JlZyhwY2llLCBsb3dlcl8zMl9iaXRzKG1hc2spIHwgZmxhZ3MsIFBDSUVMQU1SKGlkeCkpOworCisJCXBjaV93cml0ZV9yZWcocGNpZSwgdXBwZXJfMzJfYml0cyhwY2lfYWRkciksIFBDSUVQUkFSKGlkeCsxKSk7CisJCXBjaV93cml0ZV9yZWcocGNpZSwgdXBwZXJfMzJfYml0cyhjcHVfYWRkciksIFBDSUVMQVIoaWR4KzEpKTsKKwkJcGNpX3dyaXRlX3JlZyhwY2llLCAwLCBQQ0lFTEFNUihpZHgrMSkpOworCisJCXBjaV9hZGRyICs9IHNpemU7CisJCWNwdV9hZGRyICs9IHNpemU7CisJCWlkeCArPSAyOworCisJCWlmIChpZHggPiBNQVhfTlJfSU5CT1VORF9NQVBTKSB7CisJCQlkZXZfZXJyKHBjaWUtPmRldiwgIkZhaWxlZCB0byBtYXAgaW5ib3VuZCByZWdpb25zIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwkqaW5kZXggPSBpZHg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfZG1hX3JhbmdlX3BhcnNlcl9pbml0KHN0cnVjdCBvZl9wY2lfcmFuZ2VfcGFyc2VyICpwYXJzZXIsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJY29uc3QgaW50IG5hID0gMywgbnMgPSAyOworCWludCBybGVuOworCisJcGFyc2VyLT5ub2RlID0gbm9kZTsKKwlwYXJzZXItPnBuYSA9IG9mX25fYWRkcl9jZWxscyhub2RlKTsKKwlwYXJzZXItPm5wID0gcGFyc2VyLT5wbmEgKyBuYSArIG5zOworCisJcGFyc2VyLT5yYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiZG1hLXJhbmdlcyIsICZybGVuKTsKKwlpZiAoIXBhcnNlci0+cmFuZ2UpCisJCXJldHVybiAtRU5PRU5UOworCisJcGFyc2VyLT5lbmQgPSBwYXJzZXItPnJhbmdlICsgcmxlbiAvIHNpemVvZihfX2JlMzIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJjYXJfcGNpZV9wYXJzZV9tYXBfZG1hX3JhbmdlcyhzdHJ1Y3QgcmNhcl9wY2llICpwY2llLAorCQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IG9mX3BjaV9yYW5nZSByYW5nZTsKKwlzdHJ1Y3Qgb2ZfcGNpX3JhbmdlX3BhcnNlciBwYXJzZXI7CisJaW50IGluZGV4ID0gMDsKKwlpbnQgZXJyOworCisJaWYgKHBjaV9kbWFfcmFuZ2VfcGFyc2VyX2luaXQoJnBhcnNlciwgbnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgZG1hLXJhbmdlcyBmcm9tIERUICovCisJZm9yX2VhY2hfb2ZfcGNpX3JhbmdlKCZwYXJzZXIsICZyYW5nZSkgeworCQl1NjQgZW5kID0gcmFuZ2UuY3B1X2FkZHIgKyByYW5nZS5zaXplIC0gMTsKKwkJZGV2X2RiZyhwY2llLT5kZXYsICIweCUwOHggMHglMDE2bGx4Li4weCUwMTZsbHggLT4gMHglMDE2bGx4XG4iLAorCQkJcmFuZ2UuZmxhZ3MsIHJhbmdlLmNwdV9hZGRyLCBlbmQsIHJhbmdlLnBjaV9hZGRyKTsKKworCQllcnIgPSByY2FyX3BjaWVfaW5ib3VuZF9yYW5nZXMocGNpZSwgJnJhbmdlLCAmaW5kZXgpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcmNhcl9wY2llX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBjaWUtcjhhNzc3OSIsIC5kYXRhID0gcmNhcl9wY2llX2h3X2luaXRfaDEgfSwKKwl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMscGNpZS1yOGE3NzkwIiwgLmRhdGEgPSByY2FyX3BjaWVfaHdfaW5pdCB9LAorCXsgLmNvbXBhdGlibGUgPSAicmVuZXNhcyxwY2llLXI4YTc3OTEiLCAuZGF0YSA9IHJjYXJfcGNpZV9od19pbml0IH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcmNhcl9wY2llX29mX21hdGNoKTsKKworc3RhdGljIGludCByY2FyX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmNhcl9wY2llICpwY2llOworCXVuc2lnbmVkIGludCBkYXRhOworCXN0cnVjdCBvZl9wY2lfcmFuZ2UgcmFuZ2U7CisJc3RydWN0IG9mX3BjaV9yYW5nZV9wYXJzZXIgcGFyc2VyOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOworCWludCBlcnIsIHdpbiA9IDA7CisJaW50ICgqaHdfaW5pdF9mbikoc3RydWN0IHJjYXJfcGNpZSAqKTsKKworCXBjaWUgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwY2llKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2llKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBjaWUtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNpZSk7CisKKwkvKiBHZXQgdGhlIGJ1cyByYW5nZSAqLworCWlmIChvZl9wY2lfcGFyc2VfYnVzX3JhbmdlKHBkZXYtPmRldi5vZl9ub2RlLCAmcGNpZS0+YnVzbikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIGJ1cy1yYW5nZSBwcm9wZXJ0eVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvZl9wY2lfcmFuZ2VfcGFyc2VyX2luaXQoJnBhcnNlciwgcGRldi0+ZGV2Lm9mX25vZGUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgcmFuZ2VzIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gcmNhcl9wY2llX2dldF9yZXNvdXJjZXMocGRldiwgcGNpZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgcmVzb3VyY2VzOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlmb3JfZWFjaF9vZl9wY2lfcmFuZ2UoJnBhcnNlciwgJnJhbmdlKSB7CisJCW9mX3BjaV9yYW5nZV90b19yZXNvdXJjZSgmcmFuZ2UsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJJnBjaWUtPnJlc1t3aW4rK10pOworCisJCWlmICh3aW4gPiBQQ0lfTUFYX1JFU09VUkNFUykKKwkJCWJyZWFrOworCX0KKworCSBlcnIgPSByY2FyX3BjaWVfcGFyc2VfbWFwX2RtYV9yYW5nZXMocGNpZSwgcGRldi0+ZGV2Lm9mX25vZGUpOworCSBpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7CisJCWVyciA9IHJjYXJfcGNpZV9lbmFibGVfbXNpKHBjaWUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gZW5hYmxlIE1TSSBzdXBwb3J0OiAlZFxuIiwKKwkJCQllcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKHJjYXJfcGNpZV9vZl9tYXRjaCwgcGNpZS0+ZGV2KTsKKwlpZiAoIW9mX2lkIHx8ICFvZl9pZC0+ZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaHdfaW5pdF9mbiA9IG9mX2lkLT5kYXRhOworCisJLyogRmFpbHVyZSB0byBnZXQgYSBsaW5rIG1pZ2h0IGp1c3QgYmUgdGhhdCBubyBjYXJkcyBhcmUgaW5zZXJ0ZWQgKi8KKwllcnIgPSBod19pbml0X2ZuKHBjaWUpOworCWlmIChlcnIpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlBDSWUgbGluayBkb3duXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGF0YSA9IHBjaV9yZWFkX3JlZyhwY2llLCBNQUNTUik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlBDSWUgeCVkOiBsaW5rIHVwXG4iLCAoZGF0YSA+PiAyMCkgJiAweDNmKTsKKworCXJjYXJfcGNpZV9lbmFibGUocGNpZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmNhcl9wY2llX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gcmNhcl9wY2llX29mX21hdGNoLAorCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsCisJfSwKKwkucHJvYmUgPSByY2FyX3BjaWVfcHJvYmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyY2FyX3BjaWVfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUGhpbCBFZHdvcnRoeSA8cGhpbC5lZHdvcnRoeUByZW5lc2FzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVuZXNhcyBSLUNhciBQQ0llIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnLXBjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy1wY2kuYwppbmRleCA2MjU4ZGMyLi5jNjgzNjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnLXBjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWctcGNpLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKLWludCBfX3JlZiBwY2lfaHBfYWRkX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoraW50IHBjaV9ocF9hZGRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IGRldi0+YnVzOwogCWludCBwYXNzLCBidXNuciwgc3RhcnQgPSBwYXJlbnQtPmJ1c25fcmVzLnN0YXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKaW5kZXggYmNjYzI3ZS4uNzVlMTc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCkBAIC00MSw3ICs0MSw2IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgImFjcGlwaHBfZ2x1ZTogIiBmbXQKIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTAxLDcgKzUwMCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgcGVyICpwaHlzaWNhbCBzbG90KiwKICAqIG5vdCBwZXIgZWFjaCBzbG90IG9iamVjdCBpbiBBQ1BJIG5hbWVzcGFjZS4KICAqLwotc3RhdGljIHZvaWQgX19yZWYgZW5hYmxlX3Nsb3Qoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCkKK3N0YXRpYyB2b2lkIGVuYWJsZV9zbG90KHN0cnVjdCBhY3BpcGhwX3Nsb3QgKnNsb3QpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc2xvdC0+YnVzOwpAQCAtNTE2LDggKzUxNSw3IEBACiAJCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgIT0gc2xvdC0+ZGV2aWNlKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8Ci0JCQkgICAgZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykgeworCQkJaWYgKHBjaV9pc19icmlkZ2UoZGV2KSkgewogCQkJCW1heCA9IHBjaV9zY2FuX2JyaWRnZShidXMsIGRldiwgbWF4LCBwYXNzKTsKIAkJCQlpZiAocGFzcyAmJiBkZXYtPnN1Ym9yZGluYXRlKSB7CiAJCQkJCWNoZWNrX2hvdHBsdWdfYnJpZGdlKHNsb3QsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX3BjaS5jCmluZGV4IDhjMTQ2NDguLmY2ZWY2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX3BjaS5jCkBAIC0yNTAsNyArMjUwLDcgQEAKICAqIERldmljZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucwogICovCiAKLWludCBfX3JlZiBjcGNpX2NvbmZpZ3VyZV9zbG90KHN0cnVjdCBzbG90ICpzbG90KQoraW50IGNwY2lfY29uZmlndXJlX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50OwpAQCAtMjg5LDggKzI4OSw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwYXJlbnQtPmRldmljZXMsIGJ1c19saXN0KQogCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgIT0gUENJX1NMT1Qoc2xvdC0+ZGV2Zm4pKQogCQkJY29udGludWU7Ci0JCWlmICgoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB8fAotCQkgICAgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKQorCQlpZiAocGNpX2lzX2JyaWRnZShkZXYpKQogCQkJcGNpX2hwX2FkZF9icmlkZ2UoZGV2KTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKaW5kZXggMTE4NDViNy4uZjU5MzU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwpAQCAtNzA5LDcgKzcwOSw4IEBACiAJCQkJdGVtcCA9IHRlbXAtPm5leHQ7CiAJCQl9CiAKLQkJCXRlbXAtPm5leHQgPSBtYXgtPm5leHQ7CisJCQlpZiAodGVtcCkKKwkJCQl0ZW1wLT5uZXh0ID0gbWF4LT5uZXh0OwogCQl9CiAKIAkJbWF4LT5uZXh0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX252cmFtLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9udnJhbS5jCmluZGV4IDc2YmE4YTEuLjk2MDBhMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX252cmFtLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfbnZyYW0uYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9ob3RwbHVnLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiY3BxcGhwLmgiCiAjaW5jbHVkZSAiY3BxcGhwX252cmFtLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAppbmRleCA4YTY2ODY2Li44ZTkwMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKQEAgLTEyNyw3ICsxMjcsNyBAQAogI2RlZmluZSBIUF9TVVBSX1JNKGN0cmwpCSgoY3RybCktPnNsb3RfY2FwICYgUENJX0VYUF9TTFRDQVBfSFBTKQogI2RlZmluZSBFTUkoY3RybCkJCSgoY3RybCktPnNsb3RfY2FwICYgUENJX0VYUF9TTFRDQVBfRUlQKQogI2RlZmluZSBOT19DTURfQ01QTChjdHJsKQkoKGN0cmwpLT5zbG90X2NhcCAmIFBDSV9FWFBfU0xUQ0FQX05DQ1MpCi0jZGVmaW5lIFBTTihjdHJsKQkJKChjdHJsKS0+c2xvdF9jYXAgPj4gMTkpCisjZGVmaW5lIFBTTihjdHJsKQkJKCgoY3RybCktPnNsb3RfY2FwICYgUENJX0VYUF9TTFRDQVBfUFNOKSA+PiAxOSkKIAogaW50IHBjaWVocF9zeXNmc19lbmFibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CiBpbnQgcGNpZWhwX3N5c2ZzX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IGQ3ZDA1OGYuLjE0NjM0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC0xNTksNiArMTU5LDggQEAKIAogCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocGRldiwgUENJX0VYUF9TTFRTVEEsICZzbG90X3N0YXR1cyk7CiAJaWYgKHNsb3Rfc3RhdHVzICYgUENJX0VYUF9TTFRTVEFfQ0MpIHsKKwkJcGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocGRldiwgUENJX0VYUF9TTFRTVEEsCisJCQkJCSAgIFBDSV9FWFBfU0xUU1RBX0NDKTsKIAkJaWYgKCFjdHJsLT5ub19jbWRfY29tcGxldGUpIHsKIAkJCS8qCiAJCQkgKiBBZnRlciAxIHNlYyBhbmQgQ01EX0NPTVBMRVRFRCBzdGlsbCBub3Qgc2V0LCBqdXN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IDFiNTMzMDYuLmI2Y2IxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC02Miw4ICs2Miw3IEBACiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwYXJlbnQtPmRldmljZXMsIGJ1c19saXN0KQotCQlpZiAoKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgfHwKLQkJCQkoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykpCisJCWlmIChwY2lfaXNfYnJpZGdlKGRldikpCiAJCQlwY2lfaHBfYWRkX2JyaWRnZShkZXYpOwogCiAJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMoYnJpZGdlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2xvdC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9zbG90LmMKaW5kZXggMTZmOTIwMy4uZTI0NmExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9zbG90LmMKQEAgLTE2MCw4ICsxNjAsNyBAQAogCQkJKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpKSkKIAkJcmV0dXJuOwogCi0JaWYgKGRldi0+YnVzKQotCQlwY2llX2J1c19jb25maWd1cmVfc2V0dGluZ3MoZGV2LT5idXMpOworCXBjaWVfYnVzX2NvbmZpZ3VyZV9zZXR0aW5ncyhkZXYtPmJ1cyk7CiAKIAltZW1zZXQoJmhwcCwgMCwgc2l6ZW9mKGhwcCkpOwogCXJldCA9IHBjaV9nZXRfaHBfcGFyYW1zKGRldiwgJmhwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCmluZGV4IDRmY2RlZWQuLjc2NjAyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCkBAIC0xNTcsOCArMTU3LDcgQEAKIAl9CiAKIAkvKiBTY2FuIGJlbG93IHRoZSBuZXcgYnJpZGdlICovCi0JaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAotCSAgICBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKQorCWlmIChwY2lfaXNfYnJpZGdlKGRldikpCiAJCW9mX3NjYW5fcGNpX2JyaWRnZShkZXYpOwogCiAJLyogTWFwIElPIHNwYWNlIGZvciBjaGlsZCBidXMsIHdoaWNoIG1heSBvciBtYXkgbm90IHN1Y2NlZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwppbmRleCA0Nzk2YzE1Li45ODRkNzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCkBAIC0yMjMsMTYgKzIyMywxNiBAQAogCXR5cGVfdG1wID0gKGNoYXIgKikgJnR5cGVzWzFdOwogCiAJLyogSXRlcmF0ZSB0aHJvdWdoIHBhcmVudCBwcm9wZXJ0aWVzLCBsb29raW5nIGZvciBteS1kcmMtaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhlc1swXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGJlMzJfdG9fY3B1KGluZGV4ZXNbMF0pOyBpKyspIHsKIAkJaWYgKCh1bnNpZ25lZCBpbnQpIGluZGV4ZXNbaSArIDFdID09ICpteV9pbmRleCkgewogCQkJaWYgKGRyY19uYW1lKQogCQkJCSpkcmNfbmFtZSA9IG5hbWVfdG1wOwogCQkJaWYgKGRyY190eXBlKQogCQkJCSpkcmNfdHlwZSA9IHR5cGVfdG1wOwogCQkJaWYgKGRyY19pbmRleCkKLQkJCQkqZHJjX2luZGV4ID0gKm15X2luZGV4OworCQkJCSpkcmNfaW5kZXggPSBiZTMyX3RvX2NwdSgqbXlfaW5kZXgpOwogCQkJaWYgKGRyY19wb3dlcl9kb21haW4pCi0JCQkJKmRyY19wb3dlcl9kb21haW4gPSBkb21haW5zW2krMV07CisJCQkJKmRyY19wb3dlcl9kb21haW4gPSBiZTMyX3RvX2NwdShkb21haW5zW2krMV0pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJbmFtZV90bXAgKz0gKHN0cmxlbihuYW1lX3RtcCkgKyAxKTsKQEAgLTMyMSwxNiArMzIxLDE5IEBACiAJLyogcmVnaXN0ZXIgUENJIGRldmljZXMgKi8KIAluYW1lID0gKGNoYXIgKikgJm5hbWVzWzFdOwogCXR5cGUgPSAoY2hhciAqKSAmdHlwZXNbMV07Ci0JZm9yIChpID0gMDsgaSA8IGluZGV4ZXNbMF07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBiZTMyX3RvX2NwdShpbmRleGVzWzBdKTsgaSsrKSB7CisJCWludCBpbmRleDsKIAotCQlzbG90ID0gYWxsb2Nfc2xvdF9zdHJ1Y3QoZG4sIGluZGV4ZXNbaSArIDFdLCBuYW1lLCBwb3dlcl9kb21haW5zW2kgKyAxXSk7CisJCWluZGV4ID0gYmUzMl90b19jcHUoaW5kZXhlc1tpICsgMV0pOworCQlzbG90ID0gYWxsb2Nfc2xvdF9zdHJ1Y3QoZG4sIGluZGV4LCBuYW1lLAorCQkJCQkgYmUzMl90b19jcHUocG93ZXJfZG9tYWluc1tpICsgMV0pKTsKIAkJaWYgKCFzbG90KQogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJc2xvdC0+dHlwZSA9IHNpbXBsZV9zdHJ0b3VsKHR5cGUsIE5VTEwsIDEwKTsKIAogCQlkYmcoIkZvdW5kIGRyYy1pbmRleDoweCV4IGRyYy1uYW1lOiVzIGRyYy10eXBlOiVzXG4iLAotCQkJCWluZGV4ZXNbaSArIDFdLCBuYW1lLCB0eXBlKTsKKwkJCQlpbmRleCwgbmFtZSwgdHlwZSk7CiAKIAkJcmV0dmFsID0gcnBhcGhwX2VuYWJsZV9zbG90KHNsb3QpOwogCQlpZiAoIXJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jCmluZGV4IDhkMmNlMjIuLmQxMzMyZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGNpX2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCAyYmY2OWZlLi45MjAyZDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInNocGNocC5oIgogCi1pbnQgX19yZWYgc2hwY2hwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCkKK2ludCBzaHBjaHBfY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CkBAIC02NCw4ICs2NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwYXJlbnQtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSAhPSBwX3Nsb3QtPmRldmljZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgfHwKLQkJICAgIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKSkKKwkJaWYgKHBjaV9pc19icmlkZ2UoZGV2KSkKIAkJCXBjaV9ocF9hZGRfYnJpZGdlKGRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3YuYyBiL2RyaXZlcnMvcGNpL2lvdi5jCmluZGV4IGRlN2E3NDcuLmNiNmYyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdi5jCisrKyBiL2RyaXZlcnMvcGNpL2lvdi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlwY2lfZGV2aWNlX2FkZCh2aXJ0Zm4sIHZpcnRmbi0+YnVzKTsKIAltdXRleF91bmxvY2soJmlvdi0+ZGV2LT5zcmlvdi0+bG9jayk7CiAKLQlyYyA9IHBjaV9idXNfYWRkX2RldmljZSh2aXJ0Zm4pOworCXBjaV9idXNfYWRkX2RldmljZSh2aXJ0Zm4pOwogCXNwcmludGYoYnVmLCAidmlydGZuJXUiLCBpZCk7CiAJcmMgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5kZXYua29iaiwgJnZpcnRmbi0+ZGV2LmtvYmosIGJ1Zik7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCA5NTVhYjc5Li4yN2E3ZTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtNTQ0LDIyICs1NDMsMTggQEAKIAlpZiAoIW1zaV9hdHRycykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWNoYXIgKm5hbWUgPSBrbWFsbG9jKDIwLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuYW1lKQotCQkJZ290byBlcnJvcl9hdHRyczsKLQogCQltc2lfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqbXNpX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbXNpX2Rldl9hdHRyKSB7Ci0JCQlrZnJlZShuYW1lKTsKKwkJaWYgKCFtc2lfZGV2X2F0dHIpCiAJCQlnb3RvIGVycm9yX2F0dHJzOwotCQl9CisJCW1zaV9hdHRyc1tjb3VudF0gPSAmbXNpX2Rldl9hdHRyLT5hdHRyOwogCi0JCXNwcmludGYobmFtZSwgIiVkIiwgZW50cnktPmlycSk7CiAJCXN5c2ZzX2F0dHJfaW5pdCgmbXNpX2Rldl9hdHRyLT5hdHRyKTsKLQkJbXNpX2Rldl9hdHRyLT5hdHRyLm5hbWUgPSBuYW1lOworCQltc2lfZGV2X2F0dHItPmF0dHIubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJWQiLAorCQkJCQkJICAgIGVudHJ5LT5pcnEpOworCQlpZiAoIW1zaV9kZXZfYXR0ci0+YXR0ci5uYW1lKQorCQkJZ290byBlcnJvcl9hdHRyczsKIAkJbXNpX2Rldl9hdHRyLT5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCQltc2lfZGV2X2F0dHItPnNob3cgPSBtc2lfbW9kZV9zaG93OwotCQltc2lfYXR0cnNbY291bnRdID0gJm1zaV9kZXZfYXR0ci0+YXR0cjsKIAkJKytjb3VudDsKIAl9CiAKQEAgLTg4Myw1MCArODc4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX21zaV92ZWNfY291bnQpOwogCi0vKioKLSAqIHBjaV9lbmFibGVfbXNpX2Jsb2NrIC0gY29uZmlndXJlIGRldmljZSdzIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZQotICogQGRldjogZGV2aWNlIHRvIGNvbmZpZ3VyZQotICogQG52ZWM6IG51bWJlciBvZiBpbnRlcnJ1cHRzIHRvIGNvbmZpZ3VyZQotICoKLSAqIEFsbG9jYXRlIElSUXMgZm9yIGEgZGV2aWNlIHdpdGggdGhlIE1TSSBjYXBhYmlsaXR5LgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gaWYgYW4gZXJyb3Igb2NjdXJzLiAgSWYgaXQKLSAqIGlzIHVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgcmVxdWVzdGVkLCBpdCByZXR1cm5zCi0gKiB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgaXQgbWlnaHQgYmUgYWJsZSB0byBhbGxvY2F0ZS4gIElmIGl0IHN1Y2Nlc3NmdWxseQotICogYWxsb2NhdGVzIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyByZXF1ZXN0ZWQsIGl0IHJldHVybnMgMCBhbmQKLSAqIHVwZGF0ZXMgdGhlIEBkZXYncyBpcnEgbWVtYmVyIHRvIHRoZSBsb3dlc3QgbmV3IGludGVycnVwdCBudW1iZXI7IHRoZQotICogb3RoZXIgaW50ZXJydXB0IG51bWJlcnMgYWxsb2NhdGVkIHRvIHRoaXMgZGV2aWNlIGFyZSBjb25zZWN1dGl2ZS4KLSAqLwotaW50IHBjaV9lbmFibGVfbXNpX2Jsb2NrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjKQotewotCWludCBzdGF0dXMsIG1heHZlYzsKLQotCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1heHZlYyA9IHBjaV9tc2lfdmVjX2NvdW50KGRldik7Ci0JaWYgKG1heHZlYyA8IDApCi0JCXJldHVybiBtYXh2ZWM7Ci0JaWYgKG52ZWMgPiBtYXh2ZWMpCi0JCXJldHVybiBtYXh2ZWM7Ci0KLQlzdGF0dXMgPSBwY2lfbXNpX2NoZWNrX2RldmljZShkZXYsIG52ZWMsIFBDSV9DQVBfSURfTVNJKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JV0FSTl9PTighIWRldi0+bXNpX2VuYWJsZWQpOwotCi0JLyogQ2hlY2sgd2hldGhlciBkcml2ZXIgYWxyZWFkeSByZXF1ZXN0ZWQgTVNJLVggaXJxcyAqLwotCWlmIChkZXYtPm1zaXhfZW5hYmxlZCkgewotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgTVNJICIKLQkJCSAiKE1TSS1YIGFscmVhZHkgZW5hYmxlZClcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzdGF0dXMgPSBtc2lfY2FwYWJpbGl0eV9pbml0KGRldiwgbnZlYyk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9tc2lfYmxvY2spOwotCiB2b2lkIHBjaV9tc2lfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CkBAIC0xMTMyLDE0ICsxMDgzLDQ1IEBACiAgKiovCiBpbnQgcGNpX2VuYWJsZV9tc2lfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1pbnZlYywgaW50IG1heHZlYykKIHsKLQlpbnQgbnZlYyA9IG1heHZlYzsKKwlpbnQgbnZlYzsKIAlpbnQgcmM7CiAKKwlpZiAoZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlXQVJOX09OKCEhZGV2LT5tc2lfZW5hYmxlZCk7CisKKwkvKiBDaGVjayB3aGV0aGVyIGRyaXZlciBhbHJlYWR5IHJlcXVlc3RlZCBNU0ktWCBpcnFzICovCisJaWYgKGRldi0+bXNpeF9lbmFibGVkKSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAiY2FuJ3QgZW5hYmxlIE1TSSAoTVNJLVggYWxyZWFkeSBlbmFibGVkKVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChtYXh2ZWMgPCBtaW52ZWMpCiAJCXJldHVybiAtRVJBTkdFOwogCisJbnZlYyA9IHBjaV9tc2lfdmVjX2NvdW50KGRldik7CisJaWYgKG52ZWMgPCAwKQorCQlyZXR1cm4gbnZlYzsKKwllbHNlIGlmIChudmVjIDwgbWludmVjKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChudmVjID4gbWF4dmVjKQorCQludmVjID0gbWF4dmVjOworCiAJZG8gewotCQlyYyA9IHBjaV9lbmFibGVfbXNpX2Jsb2NrKGRldiwgbnZlYyk7CisJCXJjID0gcGNpX21zaV9jaGVja19kZXZpY2UoZGV2LCBudmVjLCBQQ0lfQ0FQX0lEX01TSSk7CisJCWlmIChyYyA8IDApIHsKKwkJCXJldHVybiByYzsKKwkJfSBlbHNlIGlmIChyYyA+IDApIHsKKwkJCWlmIChyYyA8IG1pbnZlYykKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCW52ZWMgPSByYzsKKwkJfQorCX0gd2hpbGUgKHJjKTsKKworCWRvIHsKKwkJcmMgPSBtc2lfY2FwYWJpbGl0eV9pbml0KGRldiwgbnZlYyk7CiAJCWlmIChyYyA8IDApIHsKIAkJCXJldHVybiByYzsKIAkJfSBlbHNlIGlmIChyYyA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IGY0OWFiZWYuLmNhNDkyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMzA5LDEzICszMDksNyBAQAogCWJvb2wgY2hlY2tfY2hpbGRyZW47CiAJdTY0IGFkZHI7CiAKLQkvKgotCSAqIHBjaV9pc19icmlkZ2UoKSBpcyBub3Qgc3VpdGFibGUgaGVyZSwgYmVjYXVzZSBwY2lfZGV2LT5zdWJvcmRpbmF0ZQotCSAqIGlzIHNldCBvbmx5IGFmdGVyIGFjcGlfcGNpX2ZpbmRfZGV2aWNlKCkgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGUKLQkgKiBnaXZlbiBkZXZpY2UuCi0JICovCi0JY2hlY2tfY2hpbGRyZW4gPSBwY2lfZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFCi0JCQl8fCBwY2lfZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzsKKwljaGVja19jaGlsZHJlbiA9IHBjaV9pc19icmlkZ2UocGNpX2Rldik7CiAJLyogUGxlYXNlIHJlZiB0byBBQ1BJIHNwZWMgZm9yIHRoZSBzeW50YXggb2YgX0FEUiAqLwogCWFkZHIgPSAoUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pIDw8IDE2KSB8IFBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKTsKIAlyZXR1cm4gYWNwaV9maW5kX2NoaWxkX2RldmljZShBQ1BJX0NPTVBBTklPTihkZXYtPnBhcmVudCksIGFkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZDkxMWUwYy4uODM3ZDcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCXN1YmRldmljZT1QQ0lfQU5ZX0lELCBjbGFzcz0wLCBjbGFzc19tYXNrPTA7CiAJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YT0wOwogCWludCBmaWVsZHM9MDsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwgPSAwOwogCiAJZmllbGRzID0gc3NjYW5mKGJ1ZiwgIiV4ICV4ICV4ICV4ICV4ICV4ICVseCIsCiAJCQkmdmVuZG9yLCAmZGV2aWNlLCAmc3VidmVuZG9yLCAmc3ViZGV2aWNlLApAQCAtMTE1LDYgKzExNSwyNiBAQAogCWlmIChmaWVsZHMgPCAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChmaWVsZHMgIT0gNykgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpwZGV2KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGRldikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXBkZXYtPnZlbmRvciA9IHZlbmRvcjsKKwkJcGRldi0+ZGV2aWNlID0gZGV2aWNlOworCQlwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID0gc3VidmVuZG9yOworCQlwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID0gc3ViZGV2aWNlOworCQlwZGV2LT5jbGFzcyA9IGNsYXNzOworCisJCWlmIChwY2lfbWF0Y2hfaWQocGRydi0+aWRfdGFibGUsIHBkZXYpKQorCQkJcmV0dmFsID0gLUVFWElTVDsKKworCQlrZnJlZShwZGV2KTsKKworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKIAkvKiBPbmx5IGFjY2VwdCBkcml2ZXJfZGF0YSB2YWx1ZXMgdGhhdCBtYXRjaCBhbiBleGlzdGluZyBpZF90YWJsZQogCSAgIGVudHJ5ICovCiAJaWYgKGlkcykgewpAQCAtMjE2LDYgKzIzNiwxMyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7CisJLnZlbmRvciA9IFBDSV9BTllfSUQsCisJLmRldmljZSA9IFBDSV9BTllfSUQsCisJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCit9OworCiAvKioKICAqIHBjaV9tYXRjaF9kZXZpY2UgLSBUZWxsIGlmIGEgUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUKICAqIEBkcnY6IHRoZSBQQ0kgZHJpdmVyIHRvIG1hdGNoIGFnYWluc3QKQEAgLTIyOSwxOCArMjU2LDMwIEBACiAJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQgPSBOVUxMOworCisJLyogV2hlbiBkcml2ZXJfb3ZlcnJpZGUgaXMgc2V0LCBvbmx5IGJpbmQgdG8gdGhlIG1hdGNoaW5nIGRyaXZlciAqLworCWlmIChkZXYtPmRyaXZlcl9vdmVycmlkZSAmJiBzdHJjbXAoZGV2LT5kcml2ZXJfb3ZlcnJpZGUsIGRydi0+bmFtZSkpCisJCXJldHVybiBOVUxMOwogCiAJLyogTG9vayBhdCB0aGUgZHluYW1pYyBpZHMgZmlyc3QsIGJlZm9yZSB0aGUgc3RhdGljIG9uZXMgKi8KIAlzcGluX2xvY2soJmRydi0+ZHluaWRzLmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsICZkcnYtPmR5bmlkcy5saXN0LCBub2RlKSB7CiAJCWlmIChwY2lfbWF0Y2hfb25lX2RldmljZSgmZHluaWQtPmlkLCBkZXYpKSB7Ci0JCQlzcGluX3VubG9jaygmZHJ2LT5keW5pZHMubG9jayk7Ci0JCQlyZXR1cm4gJmR5bmlkLT5pZDsKKwkJCWZvdW5kX2lkID0gJmR5bmlkLT5pZDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKIAotCXJldHVybiBwY2lfbWF0Y2hfaWQoZHJ2LT5pZF90YWJsZSwgZGV2KTsKKwlpZiAoIWZvdW5kX2lkKQorCQlmb3VuZF9pZCA9IHBjaV9tYXRjaF9pZChkcnYtPmlkX3RhYmxlLCBkZXYpOworCisJLyogZHJpdmVyX292ZXJyaWRlIHdpbGwgYWx3YXlzIG1hdGNoLCBzZW5kIGEgZHVtbXkgaWQgKi8KKwlpZiAoIWZvdW5kX2lkICYmIGRldi0+ZHJpdmVyX292ZXJyaWRlKQorCQlmb3VuZF9pZCA9ICZwY2lfZGV2aWNlX2lkX2FueTsKKworCXJldHVybiBmb3VuZF9pZDsKIH0KIAogc3RydWN0IGRydl9kZXZfYW5kX2lkIHsKQEAgLTU4MCwxNCArNjE5LDE0IEBACiB7CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lLCBwY2lfZGV2KTsKIAotCWlmICghcGNpX2lzX2JyaWRnZShwY2lfZGV2KSkKKwlpZiAoIXBjaV9oYXNfc3Vib3JkaW5hdGUocGNpX2RldikpCiAJCXBjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBQQ0lfRDAsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX3BtX2RlZmF1bHRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKIAkvKiBEaXNhYmxlIG5vbi1icmlkZ2UgZGV2aWNlcyB3aXRob3V0IFBNIHN1cHBvcnQgKi8KLQlpZiAoIXBjaV9pc19icmlkZ2UocGNpX2RldikpCisJaWYgKCFwY2lfaGFzX3N1Ym9yZGluYXRlKHBjaV9kZXYpKQogCQlwY2lfZGlzYWJsZV9lbmFibGVkX2RldmljZShwY2lfZGV2KTsKIH0KIApAQCAtNzE3LDcgKzc1Niw3IEBACiAKIAlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKSB7CiAJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwotCQlpZiAoIXBjaV9pc19icmlkZ2UocGNpX2RldikpCisJCWlmICghcGNpX2hhc19zdWJvcmRpbmF0ZShwY2lfZGV2KSkKIAkJCXBjaV9wcmVwYXJlX3RvX3NsZWVwKHBjaV9kZXYpOwogCX0KIApAQCAtOTcxLDcgKzEwMTAsNyBAQAogCQkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgIXBjaV9pc19icmlkZ2UocGNpX2RldikpCisJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiAhcGNpX2hhc19zdWJvcmRpbmF0ZShwY2lfZGV2KSkKIAkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGNpX2Rldik7CiAKIAkvKgpAQCAtMTMyNSw4ICsxMzY0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCWlmICghcGRldikKLQkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiUENJX0NMQVNTPSUwNFgiLCBwZGV2LT5jbGFzcykpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM0Nyw2ICsxMzg0LDcgQEAKIAkJCSAgICh1OCkocGRldi0+Y2xhc3MgPj4gMTYpLCAodTgpKHBkZXYtPmNsYXNzID4+IDgpLAogCQkJICAgKHU4KShwZGV2LT5jbGFzcykpKQogCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCmluZGV4IDRlMGFjZWYuLjg0YzM1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgInBjaS5oIgogCiBzdGF0aWMgaW50IHN5c2ZzX2luaXRpYWxpemVkOwkvKiA9IDAgKi8KQEAgLTQxNiw2ICs0MTcsMjAgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkM2NvbGRfYWxsb3dlZCk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19PRgorc3RhdGljIHNzaXplX3QgZGV2c3BlY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CisKKwlpZiAobnAgPT0gTlVMTCB8fCBucC0+ZnVsbF9uYW1lID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzIiwgbnAtPmZ1bGxfbmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUk8oZGV2c3BlYyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QQ0lfSU9WCiBzdGF0aWMgc3NpemVfdCBzcmlvdl90b3RhbHZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTQ5OSw2ICs1MTQsNDUgQEAKIAkJICAgICAgIHNyaW92X251bXZmc19zaG93LCBzcmlvdl9udW12ZnNfc3RvcmUpOwogI2VuZGlmIC8qIENPTkZJR19QQ0lfSU9WICovCiAKK3N0YXRpYyBzc2l6ZV90IGRyaXZlcl9vdmVycmlkZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWNoYXIgKmRyaXZlcl9vdmVycmlkZSwgKm9sZCA9IHBkZXYtPmRyaXZlcl9vdmVycmlkZSwgKmNwOworCisJaWYgKGNvdW50ID4gUEFUSF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJpdmVyX292ZXJyaWRlID0ga3N0cm5kdXAoYnVmLCBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcml2ZXJfb3ZlcnJpZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJY3AgPSBzdHJjaHIoZHJpdmVyX292ZXJyaWRlLCAnXG4nKTsKKwlpZiAoY3ApCisJCSpjcCA9ICdcMCc7CisKKwlpZiAoc3RybGVuKGRyaXZlcl9vdmVycmlkZSkpIHsKKwkJcGRldi0+ZHJpdmVyX292ZXJyaWRlID0gZHJpdmVyX292ZXJyaWRlOworCX0gZWxzZSB7CisJCWtmcmVlKGRyaXZlcl9vdmVycmlkZSk7CisJCXBkZXYtPmRyaXZlcl9vdmVycmlkZSA9IE5VTEw7CisJfQorCisJa2ZyZWUob2xkKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZHJpdmVyX292ZXJyaWRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHBkZXYtPmRyaXZlcl9vdmVycmlkZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUlcoZHJpdmVyX292ZXJyaWRlKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjaV9kZXZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfcmVzb3VyY2UuYXR0ciwKIAkmZGV2X2F0dHJfdmVuZG9yLmF0dHIsCkBAIC01MjEsNiArNTc1LDEwIEBACiAjaWYgZGVmaW5lZChDT05GSUdfUE1fUlVOVElNRSkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKIAkmZGV2X2F0dHJfZDNjb2xkX2FsbG93ZWQuYXR0ciwKICNlbmRpZgorI2lmZGVmIENPTkZJR19PRgorCSZkZXZfYXR0cl9kZXZzcGVjLmF0dHIsCisjZW5kaWYKKwkmZGV2X2F0dHJfZHJpdmVyX292ZXJyaWRlLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTEyNTUsMTEgKzEzMTMsNiBAQAogCS53cml0ZSA9IHBjaV93cml0ZV9jb25maWcsCiB9OwogCi1pbnQgX193ZWFrIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3QgcmVzZXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgIHNpemVfdCBjb3VudCkKQEAgLTEzNzUsMTEgKzE0MjgsNiBAQAogCQlwZGV2LT5yb21fYXR0ciA9IGF0dHI7CiAJfQogCi0JLyogYWRkIHBsYXRmb3JtLXNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KLQlyZXR2YWwgPSBwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHBkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX3JvbV9maWxlOwotCiAJLyogYWRkIHN5c2ZzIGVudHJpZXMgZm9yIHZhcmlvdXMgY2FwYWJpbGl0aWVzICovCiAJcmV0dmFsID0gcGNpX2NyZWF0ZV9jYXBhYmlsaXRpZXNfc3lzZnMocGRldik7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNzU5NDc1ZS4uNDM2YTc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICogR2l2ZW4gYSBQQ0kgYnVzLCByZXR1cm5zIHRoZSBoaWdoZXN0IFBDSSBidXMgbnVtYmVyIHByZXNlbnQgaW4gdGhlIHNldAogICogaW5jbHVkaW5nIHRoZSBnaXZlbiBQQ0kgYnVzIGFuZCBpdHMgbGlzdCBvZiBjaGlsZCBQQ0kgYnVzZXMuCiAgKi8KLXVuc2lnbmVkIGNoYXIgcGNpX2J1c19tYXhfYnVzbnIoc3RydWN0IHBjaV9idXMqIGJ1cykKK3Vuc2lnbmVkIGNoYXIgcGNpX2J1c19tYXhfYnVzbnIoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqdG1wOwogCXVuc2lnbmVkIGNoYXIgbWF4LCBuOwpAQCAtMTM3MSw3ICsxMzcxLDcgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldnJlcyAqIGdldF9wY2lfZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgc3RydWN0IHBjaV9kZXZyZXMgKmdldF9wY2lfZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXZyZXMgKmRyLCAqbmV3X2RyOwogCkBAIC0xMzg1LDcgKzEzODUsNyBAQAogCXJldHVybiBkZXZyZXNfZ2V0KCZwZGV2LT5kZXYsIG5ld19kciwgTlVMTCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldnJlcyAqIGZpbmRfcGNpX2RyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHN0cnVjdCBwY2lfZGV2cmVzICpmaW5kX3BjaV9kcihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpZiAocGNpX2lzX21hbmFnZWQocGRldikpCiAJCXJldHVybiBkZXZyZXNfZmluZCgmcGRldi0+ZGV2LCBwY2ltX3JlbGVhc2UsIE5VTEwsIE5VTEwpOwpAQCAtMTQ2OCw2ICsxNDY4LDE3IEBACiAgKi8KIHZvaWQgX193ZWFrIHBjaWJpb3NfZGlzYWJsZV9kZXZpY2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9CiAKKy8qKgorICogcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxIC0gcGVuYWxpemUgYW4gSVNBIElSUQorICogQGlycTogSVNBIElSUSB0byBwZW5hbGl6ZQorICogQGFjdGl2ZTogSVJRIGFjdGl2ZSBvciBub3QKKyAqCisgKiBQZXJtaXRzIHRoZSBwbGF0Zm9ybSB0byBwcm92aWRlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IHdoZW4KKyAqIHBlbmFsaXppbmcgSVNBIElSUXMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uIEFyY2hpdGVjdHVyZQorICogaW1wbGVtZW50YXRpb25zIGNhbiBvdmVycmlkZSB0aGlzLgorICovCit2b2lkIF9fd2VhayBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkge30KKwogc3RhdGljIHZvaWQgZG9fcGNpX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTE2IHBjaV9jb21tYW5kOwpAQCAtMzMwNiw4ICszMzE3LDI3IEBACiAJcGNpX2NmZ19hY2Nlc3NfdW5sb2NrKGRldik7CiB9CiAKKy8qKgorICogcGNpX3Jlc2V0X25vdGlmeSAtIG5vdGlmeSBkZXZpY2UgZHJpdmVyIG9mIHJlc2V0CisgKiBAZGV2OiBkZXZpY2UgdG8gYmUgbm90aWZpZWQgb2YgcmVzZXQKKyAqIEBwcmVwYXJlOiAndHJ1ZScgaWYgZGV2aWNlIGlzIGFib3V0IHRvIGJlIHJlc2V0OyAnZmFsc2UnIGlmIHJlc2V0IGF0dGVtcHQKKyAqICAgICAgICAgICBjb21wbGV0ZWQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBwcmlvciB0byBkZXZpY2UgYWNjZXNzIGJlaW5nIGRpc2FibGVkIGFuZCBhZnRlciBkZXZpY2UKKyAqIGFjY2VzcyBpcyByZXN0b3JlZC4KKyAqLworc3RhdGljIHZvaWQgcGNpX3Jlc2V0X25vdGlmeShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByZXBhcmUpCit7CisJY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyAqZXJyX2hhbmRsZXIgPQorCQkJZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+ZXJyX2hhbmRsZXIgOiBOVUxMOworCWlmIChlcnJfaGFuZGxlciAmJiBlcnJfaGFuZGxlci0+cmVzZXRfbm90aWZ5KQorCQllcnJfaGFuZGxlci0+cmVzZXRfbm90aWZ5KGRldiwgcHJlcGFyZSk7Cit9CisKIHN0YXRpYyB2b2lkIHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCXBjaV9yZXNldF9ub3RpZnkoZGV2LCB0cnVlKTsKKwogCS8qCiAJICogV2FrZS11cCBkZXZpY2UgcHJpb3IgdG8gc2F2ZS4gIFBNIHJlZ2lzdGVycyBkZWZhdWx0IHRvIEQwIGFmdGVyCiAJICogcmVzZXQgYW5kIGEgc2ltcGxlIHJlZ2lzdGVyIHJlc3RvcmUgZG9lc24ndCByZWxpYWJseSByZXR1cm4KQEAgLTMzMjksNiArMzM1OSw3IEBACiBzdGF0aWMgdm9pZCBwY2lfZGV2X3Jlc3RvcmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCXBjaV9yZXNldF9ub3RpZnkoZGV2LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX2Rldl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpCkBAIC0zMzQ1LDYgKzMzNzYsNyBAQAogCiAJcmV0dXJuIHJjOwogfQorCiAvKioKICAqIF9fcGNpX3Jlc2V0X2Z1bmN0aW9uIC0gcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIHJlc2V0CkBAIC00MTI2LDcgKzQxNTgsNyBAQAogCXUxNiBjbWQ7CiAJaW50IHJjOwogCi0JV0FSTl9PTigoZmxhZ3MgJiBQQ0lfVkdBX1NUQVRFX0NIQU5HRV9ERUNPREVTKSAmIChjb21tYW5kX2JpdHMgJiB+KFBDSV9DT01NQU5EX0lPfFBDSV9DT01NQU5EX01FTU9SWSkpKTsKKwlXQVJOX09OKChmbGFncyAmIFBDSV9WR0FfU1RBVEVfQ0hBTkdFX0RFQ09ERVMpICYmIChjb21tYW5kX2JpdHMgJiB+KFBDSV9DT01NQU5EX0lPfFBDSV9DT01NQU5EX01FTU9SWSkpKTsKIAogCS8qIEFSQ0ggc3BlY2lmaWMgVkdBIGVuYWJsZXMgKi8KIAlyYyA9IHBjaV9zZXRfdmdhX3N0YXRlX2FyY2goZGV2LCBkZWNvZGUsIGNvbW1hbmRfYml0cywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCA2YmQwODIyLi4wNjAxODkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtNzcsNyArNzcsNyBAQAogCXBtX3dha2V1cF9ldmVudCgmZGV2LT5kZXYsIDEwMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwY2lfaXNfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIGlubGluZSBib29sIHBjaV9oYXNfc3Vib3JkaW5hdGUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJcmV0dXJuICEhKHBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKIH0KQEAgLTIwMSwxMSArMjAxLDExIEBACiAJCSAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IHJlZyk7CiBpbnQgcGNpX3Jlc291cmNlX2JhcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8sIGVudW0gcGNpX2Jhcl90eXBlICp0eXBlKTsKIHZvaWQgcGNpX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldik7Ci12b2lkIF9fcmVmIF9fcGNpX2J1c19zaXplX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKK3ZvaWQgX19wY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAogCQkJc3RydWN0IGxpc3RfaGVhZCAqcmVhbGxvY19oZWFkKTsKLXZvaWQgX19yZWYgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZWFsbG9jX2hlYWQsCi0JCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZmFpbF9oZWFkKTsKK3ZvaWQgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFsbG9jX2hlYWQsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqZmFpbF9oZWFkKTsKIAogLyoqCiAgKiBwY2lfYXJpX2VuYWJsZWQgLSBxdWVyeSBBUkkgZm9yd2FyZGluZyBzdGF0dXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IDk4NmY4ZWEuLjJmMGNlNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtOTksNyArOTksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBucl9lbnRyaWVzOyBpKyspCiAJCW1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CiAKLQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoZGV2LCBtc2l4X2VudHJpZXMsIG5yX2VudHJpZXMpOworCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeF9leGFjdChkZXYsIG1zaXhfZW50cmllcywgbnJfZW50cmllcyk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBFeGl0OwogCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpeChkZXYpOwogCiAJCS8qIE5vdyBhbGxvY2F0ZSB0aGUgTVNJLVggdmVjdG9ycyBmb3IgcmVhbCAqLwotCQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoZGV2LCBtc2l4X2VudHJpZXMsIG52ZWMpOworCQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXhfZXhhY3QoZGV2LCBtc2l4X2VudHJpZXMsIG52ZWMpOwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBFeGl0OwogCX0KQEAgLTM3OSwxMCArMzc5LDEzIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIHNlcnZpY2UgaXJxcy4gRG9uJ3QgdXNlIHNlcnZpY2UgZGV2aWNlcyB0aGF0CiAJICogcmVxdWlyZSBpbnRlcnJ1cHRzIGlmIHRoZXJlIGlzIG5vIHdheSB0byBnZW5lcmF0ZSB0aGVtLgorCSAqIEhvd2V2ZXIsIHNvbWUgZHJpdmVycyBtYXkgaGF2ZSBhIHBvbGxpbmcgbW9kZSAoZS5nLiBwY2llaHBfcG9sbF9tb2RlKQorCSAqIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIGFic2VuY2Ugb2YgaXJxcy4gIEFsbG93IHRoZW0gdG8gZGV0ZXJtaW5lCisJICogaWYgdGhhdCBpcyB0byBiZSB1c2VkLgogCSAqLwogCXN0YXR1cyA9IGluaXRfc2VydmljZV9pcnFzKGRldiwgaXJxcywgY2FwYWJpbGl0aWVzKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWNhcGFiaWxpdGllcyAmPSBQQ0lFX1BPUlRfU0VSVklDRV9WQzsKKwkJY2FwYWJpbGl0aWVzICY9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDIHwgUENJRV9QT1JUX1NFUlZJQ0VfSFA7CiAJCWlmICghY2FwYWJpbGl0aWVzKQogCQkJZ290byBlcnJvcl9kaXNhYmxlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IGVmMDlmNWYuLjJiYmY1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMTcxLDkgKzE3MSwxMCBAQAogCQkJc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBwb3MpCiB7CiAJdTMyIGwsIHN6LCBtYXNrOworCXU2NCBsNjQsIHN6NjQsIG1hc2s2NDsKIAl1MTYgb3JpZ19jbWQ7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbiwgaW52ZXJ0ZWRfcmVnaW9uOwotCWJvb2wgYmFyX3Rvb19iaWcgPSBmYWxzZSwgYmFyX2Rpc2FibGVkID0gZmFsc2U7CisJYm9vbCBiYXJfdG9vX2JpZyA9IGZhbHNlLCBiYXJfdG9vX2hpZ2ggPSBmYWxzZSwgYmFyX2ludmFsaWQgPSBmYWxzZTsKIAogCW1hc2sgPSB0eXBlID8gUENJX1JPTV9BRERSRVNTX01BU0sgOiB+MDsKIApAQCAtMjI2LDkgKzIyNyw5IEBACiAJfQogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkgewotCQl1NjQgbDY0ID0gbDsKLQkJdTY0IHN6NjQgPSBzejsKLQkJdTY0IG1hc2s2NCA9IG1hc2sgfCAodTY0KX4wIDw8IDMyOworCQlsNjQgPSBsOworCQlzejY0ID0gc3o7CisJCW1hc2s2NCA9IG1hc2sgfCAodTY0KX4wIDw8IDMyOwogCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsICZsKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsIH4wKTsKQEAgLTI0MywxOSArMjQ0LDIyIEBACiAJCWlmICghc3o2NCkKIAkJCWdvdG8gZmFpbDsKIAotCQlpZiAoKHNpemVvZihyZXNvdXJjZV9zaXplX3QpIDwgOCkgJiYgKHN6NjQgPiAweDEwMDAwMDAwMFVMTCkpIHsKKwkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPCA4IHx8IHNpemVvZihyZXNvdXJjZV9zaXplX3QpIDwgOCkgJiYKKwkJICAgIHN6NjQgPiAweDEwMDAwMDAwMFVMTCkgeworCQkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1VOU0VUIHwgSU9SRVNPVVJDRV9ESVNBQkxFRDsKKwkJCXJlcy0+c3RhcnQgPSAwOworCQkJcmVzLT5lbmQgPSAwOwogCQkJYmFyX3Rvb19iaWcgPSB0cnVlOwotCQkJZ290byBmYWlsOworCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAoKHNpemVvZihyZXNvdXJjZV9zaXplX3QpIDwgOCkgJiYgbCkgewotCQkJLyogQWRkcmVzcyBhYm92ZSAzMi1iaXQgYm91bmRhcnk7IGRpc2FibGUgdGhlIEJBUiAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcywgMCk7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgNCwgMCk7CisJCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpIDwgOCkgJiYgbCkgeworCQkJLyogQWJvdmUgMzItYml0IGJvdW5kYXJ5OyB0cnkgdG8gcmVhbGxvY2F0ZSAqLwogCQkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1VOU0VUOwotCQkJcmVnaW9uLnN0YXJ0ID0gMDsKLQkJCXJlZ2lvbi5lbmQgPSBzejY0OwotCQkJYmFyX2Rpc2FibGVkID0gdHJ1ZTsKKwkJCXJlcy0+c3RhcnQgPSAwOworCQkJcmVzLT5lbmQgPSBzejY0OworCQkJYmFyX3Rvb19oaWdoID0gdHJ1ZTsKKwkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewogCQkJcmVnaW9uLnN0YXJ0ID0gbDY0OwogCQkJcmVnaW9uLmVuZCA9IGw2NCArIHN6NjQ7CkBAIC0yODUsMTEgKzI4OSwxMCBAQAogCSAqIGJlIGNsYWltZWQgYnkgdGhlIGRldmljZS4KIAkgKi8KIAlpZiAoaW52ZXJ0ZWRfcmVnaW9uLnN0YXJ0ICE9IHJlZ2lvbi5zdGFydCkgewotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWcgMHgleDogaW5pdGlhbCBCQVIgdmFsdWUgJXBhIGludmFsaWQ7IGZvcmNpbmcgcmVhc3NpZ25tZW50XG4iLAotCQkJIHBvcywgJnJlZ2lvbi5zdGFydCk7CiAJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9VTlNFVDsKLQkJcmVzLT5lbmQgLT0gcmVzLT5zdGFydDsKIAkJcmVzLT5zdGFydCA9IDA7CisJCXJlcy0+ZW5kID0gcmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydDsKKwkJYmFyX2ludmFsaWQgPSB0cnVlOwogCX0KIAogCWdvdG8gb3V0OwpAQCAtMzAzLDggKzMwNiwxNSBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgb3JpZ19jbWQpOwogCiAJaWYgKGJhcl90b29fYmlnKQotCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlZyAweCV4OiBjYW4ndCBoYW5kbGUgNjQtYml0IEJBUlxuIiwgcG9zKTsKLQlpZiAocmVzLT5mbGFncyAmJiAhYmFyX2Rpc2FibGVkKQorCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlZyAweCV4OiBjYW4ndCBoYW5kbGUgQkFSIGxhcmdlciB0aGFuIDRHQiAoc2l6ZSAlIzAxMGxseClcbiIsCisJCQlwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHN6NjQpOworCWlmIChiYXJfdG9vX2hpZ2gpCisJCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZyAweCV4OiBjYW4ndCBoYW5kbGUgQkFSIGFib3ZlIDRHIChidXMgYWRkcmVzcyAlIzAxMGxseClcbiIsCisJCQkgcG9zLCAodW5zaWduZWQgbG9uZyBsb25nKSBsNjQpOworCWlmIChiYXJfaW52YWxpZCkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnIDB4JXg6IGluaXRpYWwgQkFSIHZhbHVlICUjMDEwbGx4IGludmFsaWRcbiIsCisJCQkgcG9zLCAodW5zaWduZWQgbG9uZyBsb25nKSByZWdpb24uc3RhcnQpOworCWlmIChyZXMtPmZsYWdzKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInJlZyAweCV4OiAlcFJcbiIsIHBvcywgcmVzKTsKIAogCXJldHVybiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0KSA/IDEgOiAwOwpAQCAtNDY1LDcgKzQ3NSw3IEBACiAKIAlpZiAoZGV2LT50cmFuc3BhcmVudCkgewogCQlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGNoaWxkLT5wYXJlbnQsIHJlcywgaSkgewotCQkJaWYgKHJlcykgeworCQkJaWYgKHJlcyAmJiByZXMtPmZsYWdzKSB7CiAJCQkJcGNpX2J1c19hZGRfcmVzb3VyY2UoY2hpbGQsIHJlcywKIAkJCQkJCSAgICAgUENJX1NVQlRSQUNUSVZFX0RFQ09ERSk7CiAJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCkBAIC03MTksNyArNzI5LDcgQEAKIAlyZXR1cm4gY2hpbGQ7CiB9CiAKLXN0cnVjdCBwY2lfYnVzICpfX3JlZiBwY2lfYWRkX25ld19idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJ1c25yKQorc3RydWN0IHBjaV9idXMgKnBjaV9hZGRfbmV3X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYnVzbnIpCiB7CiAJc3RydWN0IHBjaV9idXMgKmNoaWxkOwogCkBAIC05ODQsNiArOTk0LDQzIEBACiAKIAogLyoqCisgKiBwY2lfZXh0X2NmZ19pc19hbGlhc2VkIC0gaXMgZXh0IGNvbmZpZyBzcGFjZSBqdXN0IGFuIGFsaWFzIG9mIHN0ZCBjb25maWc/CisgKiBAZGV2OiBQQ0kgZGV2aWNlCisgKgorICogUENJIEV4cHJlc3MgdG8gUENJL1BDSS1YIEJyaWRnZSBTcGVjaWZpY2F0aW9uLCByZXYgMS4wLCA0LjEuNCBzYXlzIHRoYXQKKyAqIHdoZW4gZm9yd2FyZGluZyBhIHR5cGUxIGNvbmZpZ3VyYXRpb24gcmVxdWVzdCB0aGUgYnJpZGdlIG11c3QgY2hlY2sgdGhhdAorICogdGhlIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZHJlc3MgZmllbGQgaXMgemVyby4gIFRoZSBicmlkZ2UgaXMgbm90IHBlcm1pdHRlZAorICogdG8gZm9yd2FyZCB0aGUgdHJhbnNhY3Rpb25zIGFuZCBtdXN0IGhhbmRsZSBpdCBhcyBhbiBVbnN1cHBvcnRlZCBSZXF1ZXN0LgorICogU29tZSBicmlkZ2VzIGRvIG5vdCBmb2xsb3cgdGhpcyBydWxlIGFuZCBzaW1wbHkgZHJvcCB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXIKKyAqIGJpdHMsIHJlc3VsdGluZyBpbiB0aGUgc3RhbmRhcmQgY29uZmlnIHNwYWNlIGJlaW5nIGFsaWFzZWQsIGV2ZXJ5IDI1NgorICogYnl0ZXMgYWNyb3NzIHRoZSBlbnRpcmUgY29uZmlndXJhdGlvbiBzcGFjZS4gIFRlc3QgZm9yIHRoaXMgY29uZGl0aW9uIGJ5CisgKiBjb21wYXJpbmcgdGhlIGZpcnN0IGR3b3JkIG9mIGVhY2ggcG90ZW50aWFsIGFsaWFzIHRvIHRoZSB2ZW5kb3IvZGV2aWNlIElELgorICogS25vd24gb2ZmZW5kZXJzOgorICogICBBU00xMDgzLzEwODUgUENJZS10by1QQ0kgUmV2ZXJzaWJsZSBCcmlkZ2UgKDFiMjE6MTA4MCwgcmV2IDAxICYgMDMpCisgKiAgIEFNRC9BVEkgU0J4MDAgUENJIHRvIFBDSSBCcmlkZ2UgKDEwMDI6NDM4NCwgcmV2IDQwKQorICovCitzdGF0aWMgYm9vbCBwY2lfZXh0X2NmZ19pc19hbGlhc2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKKwlpbnQgcG9zOworCXUzMiBoZWFkZXIsIHRtcDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9WRU5ET1JfSUQsICZoZWFkZXIpOworCisJZm9yIChwb3MgPSBQQ0lfQ0ZHX1NQQUNFX1NJWkU7CisJICAgICBwb3MgPCBQQ0lfQ0ZHX1NQQUNFX0VYUF9TSVpFOyBwb3MgKz0gUENJX0NGR19TUEFDRV9TSVpFKSB7CisJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZ0bXApICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTAorCQkgICAgfHwgaGVhZGVyICE9IHRtcCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyNlbHNlCisJcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKy8qKgogICogcGNpX2NmZ19zcGFjZV9zaXplIC0gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHNpemUgb2YgdGhlIFBDSSBkZXZpY2UuCiAgKiBAZGV2OiBQQ0kgZGV2aWNlCiAgKgpAQCAtMTAwMSw3ICsxMDQ4LDcgQEAKIAogCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZzdGF0dXMpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKIAkJZ290byBmYWlsOwotCWlmIChzdGF0dXMgPT0gMHhmZmZmZmZmZikKKwlpZiAoc3RhdHVzID09IDB4ZmZmZmZmZmYgfHwgcGNpX2V4dF9jZmdfaXNfYWxpYXNlZChkZXYpKQogCQlnb3RvIGZhaWw7CiAKIAlyZXR1cm4gUENJX0NGR19TUEFDRV9FWFBfU0laRTsKQEAgLTEyMTUsNiArMTI2Miw3IEBACiAJcGNpX3JlbGVhc2Vfb2Zfbm9kZShwY2lfZGV2KTsKIAlwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpOwogCXBjaV9idXNfcHV0KHBjaV9kZXYtPmJ1cyk7CisJa2ZyZWUocGNpX2Rldi0+ZHJpdmVyX292ZXJyaWRlKTsKIAlrZnJlZShwY2lfZGV2KTsKIH0KIApAQCAtMTM2OSw3ICsxNDE3LDcgQEAKIAlXQVJOX09OKHJldCA8IDApOwogfQogCi1zdHJ1Y3QgcGNpX2RldiAqX19yZWYgcGNpX3NjYW5fc2luZ2xlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCitzdHJ1Y3QgcGNpX2RldiAqcGNpX3NjYW5fc2luZ2xlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIApAQCAtMTYxNyw3ICsxNjY1LDcgQEAKICAqLwogdm9pZCBwY2llX2J1c19jb25maWd1cmVfc2V0dGluZ3Moc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKLQl1OCBzbXBzczsKKwl1OCBzbXBzcyA9IDA7CiAKIAlpZiAoIWJ1cy0+c2VsZikKIAkJcmV0dXJuOwpAQCAtMTY3MCw4ICsxNzE4LDcgQEAKIAogCWZvciAocGFzcz0wOyBwYXNzIDwgMjsgcGFzcysrKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgfHwKLQkJCSAgICBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKQorCQkJaWYgKHBjaV9pc19icmlkZ2UoZGV2KSkKIAkJCQltYXggPSBwY2lfc2Nhbl9icmlkZ2UoYnVzLCBkZXYsIG1heCwgcGFzcyk7CiAJCX0KIApAQCAtMTk1OCw3ICsyMDA1LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBtYXggbnVtYmVyIG9mIHN1Ym9yZGluYXRlIGJ1cyBkaXNjb3ZlcmVkLgogICovCi11bnNpZ25lZCBpbnQgX19yZWYgcGNpX3Jlc2Nhbl9idXNfYnJpZGdlX3Jlc2l6ZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKQordW5zaWduZWQgaW50IHBjaV9yZXNjYW5fYnVzX2JyaWRnZV9yZXNpemUoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKIHsKIAl1bnNpZ25lZCBpbnQgbWF4OwogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBicmlkZ2UtPnN1Ym9yZGluYXRlOwpAQCAtMTk4MSw3ICsyMDI4LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBtYXggbnVtYmVyIG9mIHN1Ym9yZGluYXRlIGJ1cyBkaXNjb3ZlcmVkLgogICovCi11bnNpZ25lZCBpbnQgX19yZWYgcGNpX3Jlc2Nhbl9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3Vuc2lnbmVkIGludCBwY2lfcmVzY2FuX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXVuc2lnbmVkIGludCBtYXg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggZTcyOTIwNi4uOTJlNjhjNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yOTU0LDYgKzI5NTQsNyBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwMTAyLCBkaXNhYmxlX2lnZnhfaXJxKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDEwYSwgZGlzYWJsZV9pZ2Z4X2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAxNTIsIGRpc2FibGVfaWdmeF9pcnEpOwogCiAvKgogICogUENJIGRldmljZXMgd2hpY2ggYXJlIG9uIEludGVsIGNoaXBzIGNhbiBza2lwIHRoZSAxMG1zIGRlbGF5CkBAIC0yOTkxLDYgKzI5OTIsMTQgQEAKIAkJCSBxdWlya19icm9rZW5faW50eF9tYXNraW5nKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE4MTQsIDB4MDYwMSwgLyogUmFsaW5rIFJUMjgwMCA4MDIuMTFuIFBDSSAqLwogCQkJIHF1aXJrX2Jyb2tlbl9pbnR4X21hc2tpbmcpOworLyoKKyAqIFJlYWx0ZWsgUlRMODE2OSBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChyZXYgMTApCisgKiBTdWJzeXN0ZW06IFJlYWx0ZWsgUlRMODE2OS84MTEwIEZhbWlseSBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBOSUMKKyAqCisgKiBSVEw4MTEwU0MgLSBGYWlscyB1bmRlciBQQ0kgZGV2aWNlIGFzc2lnbm1lbnQgdXNpbmcgRGlzSU5UeCBtYXNraW5nLgorICovCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxNjksCisJCQkgcXVpcmtfYnJva2VuX2ludHhfbWFza2luZyk7CiAKIHN0YXRpYyB2b2lkIHBjaV9kb19maXh1cHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9maXh1cCAqZiwKIAkJCSAgc3RydWN0IHBjaV9maXh1cCAqZW5kKQpAQCAtMzQ1Myw2ICszNDYyLDggQEAKIAkvKiBXaWxkY2F0IFBDSCAqLwogCTB4OWM5MCwgMHg5YzkxLCAweDljOTIsIDB4OWM5MywgMHg5Yzk0LCAweDljOTUsIDB4OWM5NiwgMHg5Yzk3LAogCTB4OWM5OCwgMHg5Yzk5LCAweDljOWEsIDB4OWM5YiwKKwkvKiBQYXRzYnVyZyAoWDc5KSBQQ0ggKi8KKwkweDFkMTAsIDB4MWQxMiwgMHgxZDE0LCAweDFkMTYsIDB4MWQxOCwgMHgxZDFhLCAweDFkMWMsIDB4MWQxZSwKIH07CiAKIHN0YXRpYyBib29sIHBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZWFyY2guYyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jCmluZGV4IDRhMWI5NzIuLjhlNDk1YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jCkBAIC03LDcgKzcsNiBAQAogICoJQ29weXJpZ2h0IChDKSAyMDAzIC0tIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggMTM4YmRkNi4uZmQ5YjU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTcxMywxMiArNzEzLDExIEBACiAgICBidXMgcmVzb3VyY2Ugb2YgYSBnaXZlbiB0eXBlLiBOb3RlOiB3ZSBpbnRlbnRpb25hbGx5IHNraXAKICAgIHRoZSBidXMgcmVzb3VyY2VzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGFzc2lnbmVkICh0aGF0IGlzLAogICAgaGF2ZSBub24tTlVMTCBwYXJlbnQgcmVzb3VyY2UpLiAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqZmluZF9mcmVlX2J1c19yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25nIHR5cGUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpmaW5kX2ZyZWVfYnVzX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkgdW5zaWduZWQgbG9uZyB0eXBlX21hc2ssIHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0JdW5zaWduZWQgbG9uZyB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAotCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAogCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmIChyID09ICZpb3BvcnRfcmVzb3VyY2UgfHwgciA9PSAmaW9tZW1fcmVzb3VyY2UpCkBAIC04MTUsNyArODE0LDggQEAKIAkJcmVzb3VyY2Vfc2l6ZV90IGFkZF9zaXplLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZWFsbG9jX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIElPUkVTT1VSQ0VfSU8pOworCXN0cnVjdCByZXNvdXJjZSAqYl9yZXMgPSBmaW5kX2ZyZWVfYnVzX3Jlc291cmNlKGJ1cywgSU9SRVNPVVJDRV9JTywKKwkJCQkJCQlJT1JFU09VUkNFX0lPKTsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZSA9IDAsIHNpemUwID0gMCwgc2l6ZTEgPSAwOwogCXJlc291cmNlX3NpemVfdCBjaGlsZHJlbl9hZGRfc2l6ZSA9IDA7CiAJcmVzb3VyY2Vfc2l6ZV90IG1pbl9hbGlnbiwgYWxpZ247CkBAIC05MDcsMzYgKzkwNyw0MCBAQAogICogQGJ1cyA6IHRoZSBidXMKICAqIEBtYXNrOiBtYXNrIHRoZSByZXNvdXJjZSBmbGFnLCB0aGVuIGNvbXBhcmUgaXQgd2l0aCB0eXBlCiAgKiBAdHlwZTogdGhlIHR5cGUgb2YgZnJlZSByZXNvdXJjZSBmcm9tIGJyaWRnZQorICogQHR5cGUyOiBzZWNvbmQgbWF0Y2ggdHlwZQorICogQHR5cGUzOiB0aGlyZCBtYXRjaCB0eXBlCiAgKiBAbWluX3NpemUgOiB0aGUgbWluaW11bSBtZW1vcnkgd2luZG93IHRoYXQgbXVzdCB0byBiZSBhbGxvY2F0ZWQKICAqIEBhZGRfc2l6ZSA6IGFkZGl0aW9uYWwgb3B0aW9uYWwgbWVtb3J5IHdpbmRvdwogICogQHJlYWxsb2NfaGVhZCA6IHRyYWNrIHRoZSBhZGRpdGlvbmFsIG1lbW9yeSB3aW5kb3cgb24gdGhpcyBsaXN0CiAgKgogICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBidXMgYW5kIG1pbmltYWwgYWxpZ25tZW50IHdoaWNoCiAgKiBndWFyYW50ZWVzIHRoYXQgYWxsIGNoaWxkIHJlc291cmNlcyBmaXQgaW4gdGhpcyBzaXplLgorICoKKyAqIFJldHVybnMgLUVOT1NQQyBpZiB0aGVyZSdzIG5vIGF2YWlsYWJsZSBidXMgcmVzb3VyY2Ugb2YgdGhlIGRlc2lyZWQgdHlwZS4KKyAqIE90aGVyd2lzZSwgc2V0cyB0aGUgYnVzIHJlc291cmNlIHN0YXJ0L2VuZCB0byBpbmRpY2F0ZSB0aGUgcmVxdWlyZWQKKyAqIHNpemUsIGFkZHMgdGhpbmdzIHRvIHJlYWxsb2NfaGVhZCAoaWYgc3VwcGxpZWQpLCBhbmQgcmV0dXJucyAwLgogICovCiBzdGF0aWMgaW50IHBidXNfc2l6ZV9tZW0oc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgbG9uZyBtYXNrLAotCQkJIHVuc2lnbmVkIGxvbmcgdHlwZSwgcmVzb3VyY2Vfc2l6ZV90IG1pbl9zaXplLAotCQkJcmVzb3VyY2Vfc2l6ZV90IGFkZF9zaXplLAotCQkJc3RydWN0IGxpc3RfaGVhZCAqcmVhbGxvY19oZWFkKQorCQkJIHVuc2lnbmVkIGxvbmcgdHlwZSwgdW5zaWduZWQgbG9uZyB0eXBlMiwKKwkJCSB1bnNpZ25lZCBsb25nIHR5cGUzLAorCQkJIHJlc291cmNlX3NpemVfdCBtaW5fc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFkZF9zaXplLAorCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnJlYWxsb2NfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplLCBzaXplMCwgc2l6ZTE7Ci0JcmVzb3VyY2Vfc2l6ZV90IGFsaWduc1sxMl07CS8qIEFsaWdubWVudHMgZnJvbSAxTWIgdG8gMkdiICovCisJcmVzb3VyY2Vfc2l6ZV90IGFsaWduc1sxNF07CS8qIEFsaWdubWVudHMgZnJvbSAxTWIgdG8gOEdiICovCiAJaW50IG9yZGVyLCBtYXhfb3JkZXI7Ci0Jc3RydWN0IHJlc291cmNlICpiX3JlcyA9IGZpbmRfZnJlZV9idXNfcmVzb3VyY2UoYnVzLCB0eXBlKTsKLQl1bnNpZ25lZCBpbnQgbWVtNjRfbWFzayA9IDA7CisJc3RydWN0IHJlc291cmNlICpiX3JlcyA9IGZpbmRfZnJlZV9idXNfcmVzb3VyY2UoYnVzLAorCQkJCQltYXNrIHwgSU9SRVNPVVJDRV9QUkVGRVRDSCwgdHlwZSk7CiAJcmVzb3VyY2Vfc2l6ZV90IGNoaWxkcmVuX2FkZF9zaXplID0gMDsKIAogCWlmICghYl9yZXMpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT1NQQzsKIAogCW1lbXNldChhbGlnbnMsIDAsIHNpemVvZihhbGlnbnMpKTsKIAltYXhfb3JkZXIgPSAwOwogCXNpemUgPSAwOwogCi0JbWVtNjRfbWFzayA9IGJfcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0OwotCWJfcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9NRU1fNjQ7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKIAkJaW50IGk7CiAKQEAgLTk0NCw3ICs5NDgsOSBAQAogCQkJc3RydWN0IHJlc291cmNlICpyID0gJmRldi0+cmVzb3VyY2VbaV07CiAJCQlyZXNvdXJjZV9zaXplX3Qgcl9zaXplOwogCi0JCQlpZiAoci0+cGFyZW50IHx8IChyLT5mbGFncyAmIG1hc2spICE9IHR5cGUpCisJCQlpZiAoci0+cGFyZW50IHx8ICgoci0+ZmxhZ3MgJiBtYXNrKSAhPSB0eXBlICYmCisJCQkJCSAgKHItPmZsYWdzICYgbWFzaykgIT0gdHlwZTIgJiYKKwkJCQkJICAoci0+ZmxhZ3MgJiBtYXNrKSAhPSB0eXBlMykpCiAJCQkJY29udGludWU7CiAJCQlyX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOwogI2lmZGVmIENPTkZJR19QQ0lfSU9WCkBAIC05NTcsMTAgKzk2MywxNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogI2VuZGlmCi0JCQkvKiBGb3IgYnJpZGdlcyBzaXplICE9IGFsaWdubWVudCAqLworCQkJLyoKKwkJCSAqIGFsaWduc1swXSBpcyBmb3IgMU1CIChzaW5jZSBicmlkZ2UgbWVtb3J5CisJCQkgKiB3aW5kb3dzIGFyZSBhbHdheXMgYXQgbGVhc3QgMU1CIGFsaWduZWQpLCBzbworCQkJICoga2VlcCAib3JkZXIiIGZyb20gYmVpbmcgbmVnYXRpdmUgZm9yIHNtYWxsZXIKKwkJCSAqIHJlc291cmNlcy4KKwkJCSAqLwogCQkJYWxpZ24gPSBwY2lfcmVzb3VyY2VfYWxpZ25tZW50KGRldiwgcik7CiAJCQlvcmRlciA9IF9fZmZzKGFsaWduKSAtIDIwOwotCQkJaWYgKG9yZGVyID4gMTEpIHsKKwkJCWlmIChvcmRlciA8IDApCisJCQkJb3JkZXIgPSAwOworCQkJaWYgKG9yZGVyID49IEFSUkFZX1NJWkUoYWxpZ25zKSkgewogCQkJCWRldl93YXJuKCZkZXYtPmRldiwgImRpc2FibGluZyBCQVIgJWQ6ICVwUiAiCiAJCQkJCSAiKGJhZCBhbGlnbm1lbnQgJSNsbHgpXG4iLCBpLCByLAogCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWxpZ24pOwpAQCAtOTY4LDE1ICs5ODEsMTIgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXNpemUgKz0gcl9zaXplOwotCQkJaWYgKG9yZGVyIDwgMCkKLQkJCQlvcmRlciA9IDA7CiAJCQkvKiBFeGNsdWRlIHJhbmdlcyB3aXRoIHNpemUgPiBhbGlnbiBmcm9tCiAJCQkgICBjYWxjdWxhdGlvbiBvZiB0aGUgYWxpZ25tZW50LiAqLwogCQkJaWYgKHJfc2l6ZSA9PSBhbGlnbikKIAkJCQlhbGlnbnNbb3JkZXJdICs9IGFsaWduOwogCQkJaWYgKG9yZGVyID4gbWF4X29yZGVyKQogCQkJCW1heF9vcmRlciA9IG9yZGVyOwotCQkJbWVtNjRfbWFzayAmPSByLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0OwogCiAJCQlpZiAocmVhbGxvY19oZWFkKQogCQkJCWNoaWxkcmVuX2FkZF9zaXplICs9IGdldF9yZXNfYWRkX3NpemUocmVhbGxvY19oZWFkLCByKTsKQEAgLTk5NywxOCArMTAwNywxOCBAQAogCQkJCSAiJXBSIHRvICVwUiAodW51c2VkKVxuIiwgYl9yZXMsCiAJCQkJICZidXMtPmJ1c25fcmVzKTsKIAkJYl9yZXMtPmZsYWdzID0gMDsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAwOwogCX0KIAliX3Jlcy0+c3RhcnQgPSBtaW5fYWxpZ247CiAJYl9yZXMtPmVuZCA9IHNpemUwICsgbWluX2FsaWduIC0gMTsKLQliX3Jlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9TVEFSVEFMSUdOIHwgbWVtNjRfbWFzazsKKwliX3Jlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9TVEFSVEFMSUdOOwogCWlmIChzaXplMSA+IHNpemUwICYmIHJlYWxsb2NfaGVhZCkgewogCQlhZGRfdG9fbGlzdChyZWFsbG9jX2hlYWQsIGJ1cy0+c2VsZiwgYl9yZXMsIHNpemUxLXNpemUwLCBtaW5fYWxpZ24pOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZidXMtPnNlbGYtPmRldiwgImJyaWRnZSB3aW5kb3cgIgogCQkJCSAiJXBSIHRvICVwUiBhZGRfc2l6ZSAlbGx4XG4iLCBiX3JlcywKIAkJCQkgJmJ1cy0+YnVzbl9yZXMsICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZTEtc2l6ZTApOwogCX0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogdW5zaWduZWQgbG9uZyBwY2lfY2FyZGJ1c19yZXNvdXJjZV9hbGlnbm1lbnQoc3RydWN0IHJlc291cmNlICpyZXMpCkBAIC0xMTEzLDEyICsxMTIzLDEzIEBACiAJOwogfQogCi12b2lkIF9fcmVmIF9fcGNpX2J1c19zaXplX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWxsb2NfaGVhZCkKK3ZvaWQgX19wY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZWFsbG9jX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQl1bnNpZ25lZCBsb25nIG1hc2ssIHByZWZtYXNrOworCXVuc2lnbmVkIGxvbmcgbWFzaywgcHJlZm1hc2ssIHR5cGUyID0gMCwgdHlwZTMgPSAwOwogCXJlc291cmNlX3NpemVfdCBhZGRpdGlvbmFsX21lbV9zaXplID0gMCwgYWRkaXRpb25hbF9pb19zaXplID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzOworCWludCByZXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKIAkJc3RydWN0IHBjaV9idXMgKmIgPSBkZXYtPnN1Ym9yZGluYXRlOwpAQCAtMTE1Miw0MSArMTE2Myw5MyBAQAogCQkJYWRkaXRpb25hbF9pb19zaXplICA9IHBjaV9ob3RwbHVnX2lvX3NpemU7CiAJCQlhZGRpdGlvbmFsX21lbV9zaXplID0gcGNpX2hvdHBsdWdfbWVtX3NpemU7CiAJCX0KLQkJLyoKLQkJICogRm9sbG93IHRocnUKLQkJICovCisJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CiAJCXBidXNfc2l6ZV9pbyhidXMsIHJlYWxsb2NfaGVhZCA/IDAgOiBhZGRpdGlvbmFsX2lvX3NpemUsCiAJCQkgICAgIGFkZGl0aW9uYWxfaW9fc2l6ZSwgcmVhbGxvY19oZWFkKTsKLQkJLyogSWYgdGhlIGJyaWRnZSBzdXBwb3J0cyBwcmVmZXRjaGFibGUgcmFuZ2UsIHNpemUgaXQKLQkJICAgc2VwYXJhdGVseS4gSWYgaXQgZG9lc24ndCwgb3IgaXRzIHByZWZldGNoYWJsZSB3aW5kb3cKLQkJICAgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgYnkgYXJjaCBjb2RlLCB0cnkKLQkJICAgbm9uLXByZWZldGNoYWJsZSByYW5nZSBmb3IgYm90aCB0eXBlcyBvZiBQQ0kgbWVtb3J5Ci0JCSAgIHJlc291cmNlcy4gKi8KKworCQkvKgorCQkgKiBJZiB0aGVyZSdzIGEgNjQtYml0IHByZWZldGNoYWJsZSBNTUlPIHdpbmRvdywgY29tcHV0ZQorCQkgKiB0aGUgc2l6ZSByZXF1aXJlZCB0byBwdXQgYWxsIDY0LWJpdCBwcmVmZXRjaGFibGUKKwkJICogcmVzb3VyY2VzIGluIGl0LgorCQkgKi8KKwkJYl9yZXMgPSAmYnVzLT5zZWxmLT5yZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFU107CiAJCW1hc2sgPSBJT1JFU09VUkNFX01FTTsKIAkJcHJlZm1hc2sgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0JCWlmIChwYnVzX3NpemVfbWVtKGJ1cywgcHJlZm1hc2ssIHByZWZtYXNrLAorCQlpZiAoYl9yZXNbMl0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkgeworCQkJcHJlZm1hc2sgfD0gSU9SRVNPVVJDRV9NRU1fNjQ7CisJCQlyZXQgPSBwYnVzX3NpemVfbWVtKGJ1cywgcHJlZm1hc2ssIHByZWZtYXNrLAorCQkJCSAgcHJlZm1hc2ssIHByZWZtYXNrLAogCQkJCSAgcmVhbGxvY19oZWFkID8gMCA6IGFkZGl0aW9uYWxfbWVtX3NpemUsCi0JCQkJICBhZGRpdGlvbmFsX21lbV9zaXplLCByZWFsbG9jX2hlYWQpKQotCQkJbWFzayA9IHByZWZtYXNrOyAvKiBTdWNjZXNzLCBzaXplIG5vbi1wcmVmZXRjaCBvbmx5LiAqLwotCQllbHNlCi0JCQlhZGRpdGlvbmFsX21lbV9zaXplICs9IGFkZGl0aW9uYWxfbWVtX3NpemU7Ci0JCXBidXNfc2l6ZV9tZW0oYnVzLCBtYXNrLCBJT1JFU09VUkNFX01FTSwKKwkJCQkgIGFkZGl0aW9uYWxfbWVtX3NpemUsIHJlYWxsb2NfaGVhZCk7CisKKwkJCS8qCisJCQkgKiBJZiBzdWNjZXNzZnVsLCBhbGwgbm9uLXByZWZldGNoYWJsZSByZXNvdXJjZXMKKwkJCSAqIGFuZCBhbnkgMzItYml0IHByZWZldGNoYWJsZSByZXNvdXJjZXMgd2lsbCBnbyBpbgorCQkJICogdGhlIG5vbi1wcmVmZXRjaGFibGUgd2luZG93LgorCQkJICovCisJCQlpZiAocmV0ID09IDApIHsKKwkJCQltYXNrID0gcHJlZm1hc2s7CisJCQkJdHlwZTIgPSBwcmVmbWFzayAmIH5JT1JFU09VUkNFX01FTV82NDsKKwkJCQl0eXBlMyA9IHByZWZtYXNrICYgfklPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBubyA2NC1iaXQgcHJlZmV0Y2hhYmxlIHdpbmRvdywgY29tcHV0ZSB0aGUKKwkJICogc2l6ZSByZXF1aXJlZCB0byBwdXQgYWxsIHByZWZldGNoYWJsZSByZXNvdXJjZXMgaW4gdGhlCisJCSAqIDMyLWJpdCBwcmVmZXRjaGFibGUgd2luZG93IChpZiB0aGVyZSBpcyBvbmUpLgorCQkgKi8KKwkJaWYgKCF0eXBlMikgeworCQkJcHJlZm1hc2sgJj0gfklPUkVTT1VSQ0VfTUVNXzY0OworCQkJcmV0ID0gcGJ1c19zaXplX21lbShidXMsIHByZWZtYXNrLCBwcmVmbWFzaywKKwkJCQkJIHByZWZtYXNrLCBwcmVmbWFzaywKKwkJCQkJIHJlYWxsb2NfaGVhZCA/IDAgOiBhZGRpdGlvbmFsX21lbV9zaXplLAorCQkJCQkgYWRkaXRpb25hbF9tZW1fc2l6ZSwgcmVhbGxvY19oZWFkKTsKKworCQkJLyoKKwkJCSAqIElmIHN1Y2Nlc3NmdWwsIG9ubHkgbm9uLXByZWZldGNoYWJsZSByZXNvdXJjZXMKKwkJCSAqIHdpbGwgZ28gaW4gdGhlIG5vbi1wcmVmZXRjaGFibGUgd2luZG93LgorCQkJICovCisJCQlpZiAocmV0ID09IDApCisJCQkJbWFzayA9IHByZWZtYXNrOworCQkJZWxzZQorCQkJCWFkZGl0aW9uYWxfbWVtX3NpemUgKz0gYWRkaXRpb25hbF9tZW1fc2l6ZTsKKworCQkJdHlwZTIgPSB0eXBlMyA9IElPUkVTT1VSQ0VfTUVNOworCQl9CisKKwkJLyoKKwkJICogQ29tcHV0ZSB0aGUgc2l6ZSByZXF1aXJlZCB0byBwdXQgZXZlcnl0aGluZyBlbHNlIGluIHRoZQorCQkgKiBub24tcHJlZmV0Y2hhYmxlIHdpbmRvdy4gIFRoaXMgaW5jbHVkZXM6CisJCSAqCisJCSAqICAgLSBhbGwgbm9uLXByZWZldGNoYWJsZSByZXNvdXJjZXMKKwkJICogICAtIDMyLWJpdCBwcmVmZXRjaGFibGUgcmVzb3VyY2VzIGlmIHRoZXJlJ3MgYSA2NC1iaXQKKwkJICogICAgIHByZWZldGNoYWJsZSB3aW5kb3cgb3Igbm8gcHJlZmV0Y2hhYmxlIHdpbmRvdyBhdCBhbGwKKwkJICogICAtIDY0LWJpdCBwcmVmZXRjaGFibGUgcmVzb3VyY2VzIGlmIHRoZXJlJ3Mgbm8KKwkJICogICAgIHByZWZldGNoYWJsZSB3aW5kb3cgYXQgYWxsCisJCSAqCisJCSAqIE5vdGUgdGhhdCB0aGUgc3RyYXRlZ3kgaW4gX19wY2lfYXNzaWduX3Jlc291cmNlKCkgbXVzdAorCQkgKiBtYXRjaCB0aGF0IHVzZWQgaGVyZS4gIFNwZWNpZmljYWxseSwgd2UgY2Fubm90IHB1dCBhCisJCSAqIDMyLWJpdCBwcmVmZXRjaGFibGUgcmVzb3VyY2UgaW4gYSA2NC1iaXQgcHJlZmV0Y2hhYmxlCisJCSAqIHdpbmRvdy4KKwkJICovCisJCXBidXNfc2l6ZV9tZW0oYnVzLCBtYXNrLCBJT1JFU09VUkNFX01FTSwgdHlwZTIsIHR5cGUzLAogCQkJCXJlYWxsb2NfaGVhZCA/IDAgOiBhZGRpdGlvbmFsX21lbV9zaXplLAogCQkJCWFkZGl0aW9uYWxfbWVtX3NpemUsIHJlYWxsb2NfaGVhZCk7CiAJCWJyZWFrOwogCX0KIH0KIAotdm9pZCBfX3JlZiBwY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQordm9pZCBwY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCV9fcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCi12b2lkIF9fcmVmIF9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCi0JCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmVhbGxvY19oZWFkLAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmZhaWxfaGVhZCkKK3ZvaWQgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFsbG9jX2hlYWQsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqZmFpbF9oZWFkKQogewogCXN0cnVjdCBwY2lfYnVzICpiOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CkBAIC0xMjE4LDE1ICsxMjgxLDE1IEBACiAJfQogfQogCi12b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQordm9pZCBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMsIE5VTEwsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMpOwogCi1zdGF0aWMgdm9pZCBfX3JlZiBfX3BjaV9icmlkZ2VfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLAotCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqYWRkX2hlYWQsCi0JCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpmYWlsX2hlYWQpCitzdGF0aWMgdm9pZCBfX3BjaV9icmlkZ2VfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmFkZF9oZWFkLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmZhaWxfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKIApAQCAtMTI1Nyw0MiArMTMyMCw2NiBAQAogc3RhdGljIHZvaWQgcGNpX2JyaWRnZV9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKLQlpbnQgaWR4OwotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJdW5zaWduZWQgbG9uZyB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAotCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0ggfCBJT1JFU09VUkNFX01FTV82NDsKKwl1bnNpZ25lZCBvbGRfZmxhZ3MgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqYl9yZXM7CisJaW50IGlkeCA9IDE7CiAKLQlkZXYgPSBidXMtPnNlbGY7Ci0JZm9yIChpZHggPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaWR4IDw9IFBDSV9CUklER0VfUkVTT1VSQ0VfRU5EOwotCSAgICAgaWR4KyspIHsKLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0JCWlmICgoci0+ZmxhZ3MgJiB0eXBlX21hc2spICE9IHR5cGUpCi0JCQljb250aW51ZTsKLQkJaWYgKCFyLT5wYXJlbnQpCi0JCQljb250aW51ZTsKLQkJLyoKLQkJICogaWYgdGhlcmUgYXJlIGNoaWxkcmVuIHVuZGVyIHRoYXQsIHdlIHNob3VsZCByZWxlYXNlIHRoZW0KLQkJICogIGFsbAotCQkgKi8KLQkJcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7Ci0JCWlmICghcmVsZWFzZV9yZXNvdXJjZShyKSkgewotCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCi0JCQkJICJyZXNvdXJjZSAlZCAlcFIgcmVsZWFzZWRcbiIsIGlkeCwgcik7Ci0JCQkvKiBrZWVwIHRoZSBvbGQgc2l6ZSAqLwotCQkJci0+ZW5kID0gcmVzb3VyY2Vfc2l6ZShyKSAtIDE7Ci0JCQlyLT5zdGFydCA9IDA7Ci0JCQlyLT5mbGFncyA9IDA7Ci0JCQljaGFuZ2VkID0gdHJ1ZTsKLQkJfQotCX0KKwliX3JlcyA9ICZkZXYtPnJlc291cmNlW1BDSV9CUklER0VfUkVTT1VSQ0VTXTsKIAotCWlmIChjaGFuZ2VkKSB7CisJLyoKKwkgKiAgICAgMS4gaWYgdGhlcmUgaXMgaW8gcG9ydCBhc3NpZ24gZmFpbCwgd2lsbCByZWxlYXNlIGJyaWRnZQorCSAqCSAgaW8gcG9ydC4KKwkgKiAgICAgMi4gaWYgdGhlcmUgaXMgbm9uIHByZWYgbW1pbyBhc3NpZ24gZmFpbCwgcmVsZWFzZSBicmlkZ2UKKwkgKgkgIG5vbnByZWYgbW1pby4KKwkgKiAgICAgMy4gaWYgdGhlcmUgaXMgNjRiaXQgcHJlZiBtbWlvIGFzc2lnbiBmYWlsLCBhbmQgYnJpZGdlIHByZWYKKwkgKgkgIGlzIDY0Yml0LCByZWxlYXNlIGJyaWRnZSBwcmVmIG1taW8uCisJICogICAgIDQuIGlmIHRoZXJlIGlzIHByZWYgbW1pbyBhc3NpZ24gZmFpbCwgYW5kIGJyaWRnZSBwcmVmIGlzCisJICoJICAzMmJpdCBtbWlvLCByZWxlYXNlIGJyaWRnZSBwcmVmIG1taW8KKwkgKiAgICAgNS4gaWYgdGhlcmUgaXMgcHJlZiBtbWlvIGFzc2lnbiBmYWlsLCBhbmQgYnJpZGdlIHByZWYgaXMgbm90CisJICoJICBhc3NpZ25lZCwgcmVsZWFzZSBicmlkZ2Ugbm9ucHJlZiBtbWlvLgorCSAqLworCWlmICh0eXBlICYgSU9SRVNPVVJDRV9JTykKKwkJaWR4ID0gMDsKKwllbHNlIGlmICghKHR5cGUgJiBJT1JFU09VUkNFX1BSRUZFVENIKSkKKwkJaWR4ID0gMTsKKwllbHNlIGlmICgodHlwZSAmIElPUkVTT1VSQ0VfTUVNXzY0KSAmJgorCQkgKGJfcmVzWzJdLmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpKQorCQlpZHggPSAyOworCWVsc2UgaWYgKCEoYl9yZXNbMl0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkgJiYKKwkJIChiX3Jlc1syXS5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpKQorCQlpZHggPSAyOworCWVsc2UKKwkJaWR4ID0gMTsKKworCXIgPSAmYl9yZXNbaWR4XTsKKworCWlmICghci0+cGFyZW50KQorCQlyZXR1cm47CisKKwkvKgorCSAqIGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB1bmRlciB0aGF0LCB3ZSBzaG91bGQgcmVsZWFzZSB0aGVtCisJICogIGFsbAorCSAqLworCXJlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHIpOworCWlmICghcmVsZWFzZV9yZXNvdXJjZShyKSkgeworCQl0eXBlID0gb2xkX2ZsYWdzID0gci0+ZmxhZ3MgJiB0eXBlX21hc2s7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAicmVzb3VyY2UgJWQgJXBSIHJlbGVhc2VkXG4iLAorCQkJCQlQQ0lfQlJJREdFX1JFU09VUkNFUyArIGlkeCwgcik7CisJCS8qIGtlZXAgdGhlIG9sZCBzaXplICovCisJCXItPmVuZCA9IHJlc291cmNlX3NpemUocikgLSAxOworCQlyLT5zdGFydCA9IDA7CisJCXItPmZsYWdzID0gMDsKKwogCQkvKiBhdm9pZGluZyB0b3VjaCB0aGUgb25lIHdpdGhvdXQgUFJFRiAqLwogCQlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCiAJCQl0eXBlID0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAkJX19wY2lfc2V0dXBfYnJpZGdlKGJ1cywgdHlwZSk7CisJCS8qIGZvciBuZXh0IGNoaWxkIHJlcyB1bmRlciBzYW1lIGJyaWRnZSAqLworCQlyLT5mbGFncyA9IG9sZF9mbGFnczsKIAl9CiB9CiAKQEAgLTEzMDQsOSArMTM5MSw5IEBACiAgKiB0cnkgdG8gcmVsZWFzZSBwY2kgYnJpZGdlIHJlc291cmNlcyB0aGF0IGlzIGZyb20gbGVhZiBicmlkZ2UsCiAgKiBzbyB3ZSBjYW4gYWxsb2NhdGUgYmlnIG5ldyBvbmUgbGF0ZXIKICAqLwotc3RhdGljIHZvaWQgX19yZWYgcGNpX2J1c19yZWxlYXNlX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdHlwZSwKLQkJCQkJCSAgIGVudW0gcmVsZWFzZV90eXBlIHJlbF90eXBlKQorc3RhdGljIHZvaWQgcGNpX2J1c19yZWxlYXNlX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJCSAgICAgZW51bSByZWxlYXNlX3R5cGUgcmVsX3R5cGUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlib29sIGlzX2xlYWZfYnJpZGdlID0gdHJ1ZTsKQEAgLTE0NzEsNyArMTU1OCw3IEBACiAJTElTVF9IRUFEKGZhaWxfaGVhZCk7CiAJc3RydWN0IHBjaV9kZXZfcmVzb3VyY2UgKmZhaWxfcmVzOwogCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKLQkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIIHwgSU9SRVNPVVJDRV9NRU1fNjQ7CiAJaW50IHBjaV90cnlfbnVtID0gMTsKIAllbnVtIGVuYWJsZV90eXBlIGVuYWJsZV9sb2NhbDsKIApAQCAtMTYyOSw5ICsxNzE2LDcgQEAKIAogCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKLQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAotCQkgICAgZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykKLQkJCWlmIChkZXYtPnN1Ym9yZGluYXRlKQorCQlpZiAocGNpX2lzX2JyaWRnZShkZXYpICYmIHBjaV9oYXNfc3Vib3JkaW5hdGUoZGV2KSkKIAkJCQlfX3BjaV9idXNfc2l6ZV9icmlkZ2VzKGRldi0+c3Vib3JkaW5hdGUsCiAJCQkJCQkJICZhZGRfbGlzdCk7CiAJdXBfcmVhZCgmcGNpX2J1c19zZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1pcnEuYwppbmRleCA5YmQ2ODY0Li5kYmM0ZmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1pcnEuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1pcnEuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCA3ZWVkNjcxLi4zM2Y5ZTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtMTYsNyArMTYsNiBAQAogICoJICAgICBSZXNvdXJjZSBzb3J0aW5nCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTIwOSwyMSArMjA4LDQyIEBACiAKIAltaW4gPSAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gUENJQklPU19NSU5fSU8gOiBQQ0lCSU9TX01JTl9NRU07CiAKLQkvKiBGaXJzdCwgdHJ5IGV4YWN0IHByZWZldGNoaW5nIG1hdGNoLi4gKi8KKwkvKgorCSAqIEZpcnN0LCB0cnkgZXhhY3QgcHJlZmV0Y2hpbmcgbWF0Y2guICBFdmVuIGlmIGEgNjQtYml0CisJICogcHJlZmV0Y2hhYmxlIGJyaWRnZSB3aW5kb3cgaXMgYmVsb3cgNEdCLCB3ZSBjYW4ndCBwdXQgYSAzMi1iaXQKKwkgKiBwcmVmZXRjaGFibGUgcmVzb3VyY2UgaW4gaXQgYmVjYXVzZSBwYnVzX3NpemVfbWVtKCkgYXNzdW1lcyBhCisJICogNjQtYml0IHdpbmRvdyB3aWxsIGNvbnRhaW4gbm8gMzItYml0IHJlc291cmNlcy4gIElmIHdlIGFzc2lnbgorCSAqIHRoaW5ncyBkaWZmZXJlbnRseSB0aGFuIHRoZXkgd2VyZSBzaXplZCwgbm90IGV2ZXJ5dGhpbmcgd2lsbCBmaXQuCisJICovCiAJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShidXMsIHJlcywgc2l6ZSwgYWxpZ24sIG1pbiwKLQkJCQkgICAgIElPUkVTT1VSQ0VfUFJFRkVUQ0gsCisJCQkJICAgICBJT1JFU09VUkNFX1BSRUZFVENIIHwgSU9SRVNPVVJDRV9NRU1fNjQsCiAJCQkJICAgICBwY2liaW9zX2FsaWduX3Jlc291cmNlLCBkZXYpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIDA7CiAKLQlpZiAocmV0IDwgMCAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpKSB7Ci0JCS8qCi0JCSAqIFRoYXQgZmFpbGVkLgotCQkgKgotCQkgKiBCdXQgYSBwcmVmZXRjaGluZyBhcmVhIGNhbiBoYW5kbGUgYSBub24tcHJlZmV0Y2hpbmcKLQkJICogd2luZG93IChpdCB3aWxsIGp1c3Qgbm90IHBlcmZvcm0gYXMgd2VsbCkuCi0JCSAqLworCS8qCisJICogSWYgdGhlIHByZWZldGNoYWJsZSB3aW5kb3cgaXMgb25seSAzMiBiaXRzIHdpZGUsIHdlIGNhbiBwdXQKKwkgKiA2NC1iaXQgcHJlZmV0Y2hhYmxlIHJlc291cmNlcyBpbiBpdC4KKwkgKi8KKwlpZiAoKHJlcy0+ZmxhZ3MgJiAoSU9SRVNPVVJDRV9QUkVGRVRDSCB8IElPUkVTT1VSQ0VfTUVNXzY0KSkgPT0KKwkgICAgIChJT1JFU09VUkNFX1BSRUZFVENIIHwgSU9SRVNPVVJDRV9NRU1fNjQpKSB7CisJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UoYnVzLCByZXMsIHNpemUsIGFsaWduLCBtaW4sCisJCQkJCSAgICAgSU9SRVNPVVJDRV9QUkVGRVRDSCwKKwkJCQkJICAgICBwY2liaW9zX2FsaWduX3Jlc291cmNlLCBkZXYpOworCQlpZiAocmV0ID09IDApCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIG1hdGNoLCB3ZSBjYW4gcHV0IGFueSBtZW1vcnkgcmVzb3VyY2UKKwkgKiBpbiBhIG5vbi1wcmVmZXRjaGFibGUgd2luZG93LiAgSWYgdGhpcyByZXNvdXJjZSBpcyAzMiBiaXRzIGFuZAorCSAqIG5vbi1wcmVmZXRjaGFibGUsIHRoZSBmaXJzdCBjYWxsIGFscmVhZHkgdHJpZWQgdGhlIG9ubHkgcG9zc2liaWxpdHkKKwkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIHRyeSBhZ2Fpbi4KKwkgKi8KKwlpZiAocmVzLT5mbGFncyAmIChJT1JFU09VUkNFX1BSRUZFVENIIHwgSU9SRVNPVVJDRV9NRU1fNjQpKQogCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKGJ1cywgcmVzLCBzaXplLCBhbGlnbiwgbWluLCAwLAogCQkJCQkgICAgIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UsIGRldik7Ci0JfQorCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kveGVuLXBjaWZyb250LmMgYi9kcml2ZXJzL3BjaS94ZW4tcGNpZnJvbnQuYwppbmRleCAxNzliOGVkLi41M2RmMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS94ZW4tcGNpZnJvbnQuYworKysgYi9kcml2ZXJzL3BjaS94ZW4tcGNpZnJvbnQuYwpAQCAtNjYyLDkgKzY2Miw5IEBACiAJbm90aWZ5X3JlbW90ZV92aWFfZXZ0Y2huKHBkZXYtPmV2dGNobik7CiAKIAkvKmluIGNhc2Ugb2Ygd2UgbG9zdCBhbiBhZXIgcmVxdWVzdCBpbiBmb3VyIGxpbmVzIHRpbWVfd2luZG93Ki8KLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoX1BERVZCX29wX2FjdGl2ZSwgJnBkZXYtPmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAlzY2hlZHVsZV9wY2lmcm9udF9hZXJfb3AocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwppbmRleCA4YmRlNjE5Li40ZmU0Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCkBAIC03OCw4ICs3OCw3IEBACiAJbWF4ID0gYnVzLT5idXNuX3Jlcy5zdGFydDsKIAlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCi0JCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8Ci0JCQkgICAgZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykKKwkJCWlmIChwY2lfaXNfYnJpZGdlKGRldikpCiAJCQkJbWF4ID0gcGNpX3NjYW5fYnJpZGdlKGJ1cywgZGV2LCBtYXgsIHBhc3MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L0tjb25maWcgYi9kcml2ZXJzL3BoeS9LY29uZmlnCmluZGV4IDQ5MDZjMjcuLjE2YTJmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy9waHkvS2NvbmZpZwpAQCAtODksOCArODksOCBAQAogCiBjb25maWcgQkNNX0tPTkFfVVNCMl9QSFkKIAl0cmlzdGF0ZSAiQnJvYWRjb20gS29uYSBVU0IyIFBIWSBEcml2ZXIiCi0JZGVwZW5kcyBvbiBHRU5FUklDX1BIWQogCWRlcGVuZHMgb24gSEFTX0lPTUVNCisJc2VsZWN0IEdFTkVSSUNfUEhZCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgQnJvYWRjb20gS29uYSBVU0IgMi4wIFBIWS4KIApAQCAtMTYwLDYgKzE2MCwxNyBAQAogCSAgcGFydGljdWxhciBTb0MgaXMgY29tcGlsZWQgaW4gdGhlIGRyaXZlci4gSW4gY2FzZSBvZiBFeHlub3MgNTI1MCBmb3VyCiAJICBwaHlzIGFyZSBhdmFpbGFibGUgLSBkZXZpY2UsIGhvc3QsIEhTSUMwIGFuZCBIU0lDLgogCitjb25maWcgUEhZX0VYWU5PUzVfVVNCRFJECisJdHJpc3RhdGUgIkV4eW5vczUgU29DIHNlcmllcyBVU0IgRFJEIFBIWSBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzUgJiYgT0YKKwlkZXBlbmRzIG9uIEhBU19JT01FTQorCXNlbGVjdCBHRU5FUklDX1BIWQorCXNlbGVjdCBNRkRfU1lTQ09OCisJaGVscAorCSAgRW5hYmxlIFVTQiBEUkQgUEhZIHN1cHBvcnQgZm9yIEV4eW5vcyA1IFNvQyBzZXJpZXMuCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBQSFkgaW50ZXJmYWNlIGZvciBVU0IgMy4wIERSRCBjb250cm9sbGVyCisJICBwcmVzZW50IG9uIEV4eW5vczUgU29DIHNlcmllcy4KKwogY29uZmlnIFBIWV9YR0VORQogCXRyaXN0YXRlICJBUE0gWC1HZW5lIDE1R2JwcyBQSFkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEhBU19JT01FTSAmJiBPRiAmJiAoQVJNNjQgfHwgQ09NUElMRV9URVNUKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL3BoeS9NYWtlZmlsZQppbmRleCA3NzI4NTE4Li5iNGYxZDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BoeS9NYWtlZmlsZQpAQCAtMTgsNCArMTgsNSBAQAogcGh5LWV4eW5vcy11c2IyLSQoQ09ORklHX1BIWV9FWFlOT1M0MjEwX1VTQjIpCSs9IHBoeS1leHlub3M0MjEwLXVzYjIubwogcGh5LWV4eW5vcy11c2IyLSQoQ09ORklHX1BIWV9FWFlOT1M0WDEyX1VTQjIpCSs9IHBoeS1leHlub3M0eDEyLXVzYjIubwogcGh5LWV4eW5vcy11c2IyLSQoQ09ORklHX1BIWV9FWFlOT1M1MjUwX1VTQjIpCSs9IHBoeS1leHlub3M1MjUwLXVzYjIubworb2JqLSQoQ09ORklHX1BIWV9FWFlOT1M1X1VTQkRSRCkJKz0gcGh5LWV4eW5vczUtdXNiZHJkLm8KIG9iai0kKENPTkZJR19QSFlfWEdFTkUpCQkJKz0gcGh5LXhnZW5lLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1leHlub3MtbWlwaS12aWRlby5jIGIvZHJpdmVycy9waHkvcGh5LWV4eW5vcy1taXBpLXZpZGVvLmMKaW5kZXggN2YxMzkzMi4uZmYwMjY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LWV4eW5vcy1taXBpLXZpZGVvLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LWV4eW5vcy1taXBpLXZpZGVvLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogewogCXN0cnVjdCBleHlub3NfbWlwaV92aWRlb19waHkgKnN0YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoV0FSTl9PTihhcmdzLT5hcmdzWzBdID4gRVhZTk9TX01JUElfUEhZU19OVU0pKQorCWlmIChXQVJOX09OKGFyZ3MtPmFyZ3NbMF0gPj0gRVhZTk9TX01JUElfUEhZU19OVU0pKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAogCXJldHVybiBzdGF0ZS0+cGh5c1thcmdzLT5hcmdzWzBdXS5waHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktZXh5bm9zNS11c2JkcmQuYyBiL2RyaXZlcnMvcGh5L3BoeS1leHlub3M1LXVzYmRyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZDg2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BoeS9waHktZXh5bm9zNS11c2JkcmQuYwpAQCAtMCwwICsxLDY3NiBAQAorLyoKKyAqIFNhbXN1bmcgRVhZTk9TNSBTb0Mgc2VyaWVzIFVTQiBEUkQgUEhZIGRyaXZlcgorICoKKyAqIFBoeSBwcm92aWRlciBmb3IgVVNCIDMuMCBEUkQgY29udHJvbGxlciBvbiBFeHlub3M1IFNvQyBzZXJpZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEF1dGhvcjogVml2ZWsgR2F1dGFtIDxnYXV0YW0udml2ZWtAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uL2V4eW5vczUtcG11Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKy8qIEV4eW5vcyBVU0IgUEhZIHJlZ2lzdGVycyAqLworI2RlZmluZSBFWFlOT1M1X0ZTRUxfOU1IWjYJCTB4MAorI2RlZmluZSBFWFlOT1M1X0ZTRUxfMTBNSFoJCTB4MQorI2RlZmluZSBFWFlOT1M1X0ZTRUxfMTJNSFoJCTB4MgorI2RlZmluZSBFWFlOT1M1X0ZTRUxfMTlNSFoyCQkweDMKKyNkZWZpbmUgRVhZTk9TNV9GU0VMXzIwTUhaCQkweDQKKyNkZWZpbmUgRVhZTk9TNV9GU0VMXzI0TUhaCQkweDUKKyNkZWZpbmUgRVhZTk9TNV9GU0VMXzUwTUhaCQkweDcKKworLyogRVhZTk9TNTogVVNCIDMuMCBEUkQgUEhZIHJlZ2lzdGVycyAqLworI2RlZmluZSBFWFlOT1M1X0RSRF9MSU5LU1lTVEVNCQkJMHgwNAorCisjZGVmaW5lIExJTktTWVNURU1fRkxBREpfTUFTSwkJCSgweDNmIDw8IDEpCisjZGVmaW5lIExJTktTWVNURU1fRkxBREooX3gpCQkJKChfeCkgPDwgMSkKKyNkZWZpbmUgTElOS1NZU1RFTV9YSENJX1ZFUlNJT05fQ09OVFJPTAkJQklUKDI3KQorCisjZGVmaW5lIEVYWU5PUzVfRFJEX1BIWVVUTUkJCQkweDA4CisKKyNkZWZpbmUgUEhZVVRNSV9PVEdESVNBQkxFCQkJQklUKDYpCisjZGVmaW5lIFBIWVVUTUlfRk9SQ0VTVVNQRU5ECQkJQklUKDEpCisjZGVmaW5lIFBIWVVUTUlfRk9SQ0VTTEVFUAkJCUJJVCgwKQorCisjZGVmaW5lIEVYWU5PUzVfRFJEX1BIWVBJUEUJCQkweDBjCisKKyNkZWZpbmUgRVhZTk9TNV9EUkRfUEhZQ0xLUlNUCQkJMHgxMAorCisjZGVmaW5lIFBIWUNMS1JTVF9FTl9VVE1JU1VTUEVORAkJQklUKDMxKQorCisjZGVmaW5lIFBIWUNMS1JTVF9TU0NfUkVGQ0xLU0VMX01BU0sJCSgweGZmIDw8IDIzKQorI2RlZmluZSBQSFlDTEtSU1RfU1NDX1JFRkNMS1NFTChfeCkJCSgoX3gpIDw8IDIzKQorCisjZGVmaW5lIFBIWUNMS1JTVF9TU0NfUkFOR0VfTUFTSwkJKDB4MDMgPDwgMjEpCisjZGVmaW5lIFBIWUNMS1JTVF9TU0NfUkFOR0UoX3gpCQkJKChfeCkgPDwgMjEpCisKKyNkZWZpbmUgUEhZQ0xLUlNUX1NTQ19FTgkJCUJJVCgyMCkKKyNkZWZpbmUgUEhZQ0xLUlNUX1JFRl9TU1BfRU4JCQlCSVQoMTkpCisjZGVmaW5lIFBIWUNMS1JTVF9SRUZfQ0xLRElWMgkJCUJJVCgxOCkKKworI2RlZmluZSBQSFlDTEtSU1RfTVBMTF9NVUxUSVBMSUVSX01BU0sJCSgweDdmIDw8IDExKQorI2RlZmluZSBQSFlDTEtSU1RfTVBMTF9NVUxUSVBMSUVSXzEwME1IWl9SRUYJKDB4MTkgPDwgMTEpCisjZGVmaW5lIFBIWUNMS1JTVF9NUExMX01VTFRJUExJRVJfNTBNX1JFRgkoMHgzMiA8PCAxMSkKKyNkZWZpbmUgUEhZQ0xLUlNUX01QTExfTVVMVElQTElFUl8yNE1IWl9SRUYJKDB4NjggPDwgMTEpCisjZGVmaW5lIFBIWUNMS1JTVF9NUExMX01VTFRJUExJRVJfMjBNSFpfUkVGCSgweDdkIDw8IDExKQorI2RlZmluZSBQSFlDTEtSU1RfTVBMTF9NVUxUSVBMSUVSXzE5MjAwS0haX1JFRgkoMHgwMiA8PCAxMSkKKworI2RlZmluZSBQSFlDTEtSU1RfRlNFTF9VVE1JX01BU0sJCSgweDcgPDwgNSkKKyNkZWZpbmUgUEhZQ0xLUlNUX0ZTRUxfUElQRV9NQVNLCQkoMHg3IDw8IDgpCisjZGVmaW5lIFBIWUNMS1JTVF9GU0VMKF94KQkJCSgoX3gpIDw8IDUpCisjZGVmaW5lIFBIWUNMS1JTVF9GU0VMX1BBRF8xMDBNSFoJCSgweDI3IDw8IDUpCisjZGVmaW5lIFBIWUNMS1JTVF9GU0VMX1BBRF8yNE1IWgkJKDB4MmEgPDwgNSkKKyNkZWZpbmUgUEhZQ0xLUlNUX0ZTRUxfUEFEXzIwTUhaCQkoMHgzMSA8PCA1KQorI2RlZmluZSBQSFlDTEtSU1RfRlNFTF9QQURfMTlfMk1IWgkJKDB4MzggPDwgNSkKKworI2RlZmluZSBQSFlDTEtSU1RfUkVURU5BQkxFTgkJCUJJVCg0KQorCisjZGVmaW5lIFBIWUNMS1JTVF9SRUZDTEtTRUxfTUFTSwkJKDB4MDMgPDwgMikKKyNkZWZpbmUgUEhZQ0xLUlNUX1JFRkNMS1NFTF9QQURfUkVGQ0xLCQkoMHgyIDw8IDIpCisjZGVmaW5lIFBIWUNMS1JTVF9SRUZDTEtTRUxfRVhUX1JFRkNMSwkJKDB4MyA8PCAyKQorCisjZGVmaW5lIFBIWUNMS1JTVF9QT1JUUkVTRVQJCQlCSVQoMSkKKyNkZWZpbmUgUEhZQ0xLUlNUX0NPTU1PTk9OTgkJCUJJVCgwKQorCisjZGVmaW5lIEVYWU5PUzVfRFJEX1BIWVJFRzAJCQkweDE0CisjZGVmaW5lIEVYWU5PUzVfRFJEX1BIWVJFRzEJCQkweDE4CisKKyNkZWZpbmUgRVhZTk9TNV9EUkRfUEhZUEFSQU0wCQkJMHgxYworCisjZGVmaW5lIFBIWVBBUkFNMF9SRUZfVVNFX1BBRAkJCUJJVCgzMSkKKyNkZWZpbmUgUEhZUEFSQU0wX1JFRl9MT1NMRVZFTF9NQVNLCQkoMHgxZiA8PCAyNikKKyNkZWZpbmUgUEhZUEFSQU0wX1JFRl9MT1NMRVZFTAkJCSgweDkgPDwgMjYpCisKKyNkZWZpbmUgRVhZTk9TNV9EUkRfUEhZUEFSQU0xCQkJMHgyMAorCisjZGVmaW5lIFBIWVBBUkFNMV9QQ1NfVFhERUVNUEhfTUFTSwkJKDB4MWYgPDwgMCkKKyNkZWZpbmUgUEhZUEFSQU0xX1BDU19UWERFRU1QSAkJCSgweDFjKQorCisjZGVmaW5lIEVYWU5PUzVfRFJEX1BIWVRFUk0JCQkweDI0CisKKyNkZWZpbmUgRVhZTk9TNV9EUkRfUEhZVEVTVAkJCTB4MjgKKworI2RlZmluZSBQSFlURVNUX1BPV0VSRE9XTl9TU1AJCQlCSVQoMykKKyNkZWZpbmUgUEhZVEVTVF9QT1dFUkRPV05fSFNQCQkJQklUKDIpCisKKyNkZWZpbmUgRVhZTk9TNV9EUkRfUEhZQURQCQkJMHgyYworCisjZGVmaW5lIEVYWU5PUzVfRFJEX1BIWVVUTUlDTEtTRUwJCTB4MzAKKworI2RlZmluZSBQSFlVVE1JQ0xLU0VMX1VUTUlfQ0xLU0VMCQlCSVQoMikKKworI2RlZmluZSBFWFlOT1M1X0RSRF9QSFlSRVNVTUUJCQkweDM0CisjZGVmaW5lIEVYWU5PUzVfRFJEX0xJTktQT1JUCQkJMHg0NAorCisjZGVmaW5lIEtIWgkxMDAwCisjZGVmaW5lIE1IWgkoS0haICogS0haKQorCitlbnVtIGV4eW5vczVfdXNiZHJkX3BoeV9pZCB7CisJRVhZTk9TNV9EUkRQSFlfVVRNSSwKKwlFWFlOT1M1X0RSRFBIWV9QSVBFMywKKwlFWFlOT1M1X0RSRFBIWVNfTlVNLAorfTsKKworc3RydWN0IHBoeV91c2JfaW5zdGFuY2U7CitzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5OworCitzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5X2NvbmZpZyB7CisJdTMyIGlkOworCXZvaWQgKCpwaHlfaXNvbCkoc3RydWN0IHBoeV91c2JfaW5zdGFuY2UgKmluc3QsIHUzMiBvbik7CisJdm9pZCAoKnBoeV9pbml0KShzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5ICpwaHlfZHJkKTsKKwl1bnNpZ25lZCBpbnQgKCpzZXRfcmVmY2xrKShzdHJ1Y3QgcGh5X3VzYl9pbnN0YW5jZSAqaW5zdCk7Cit9OworCitzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5X2RydmRhdGEgeworCWNvbnN0IHN0cnVjdCBleHlub3M1X3VzYmRyZF9waHlfY29uZmlnICpwaHlfY2ZnOworCXUzMiBwbXVfb2Zmc2V0X3VzYmRyZDBfcGh5OworCXUzMiBwbXVfb2Zmc2V0X3VzYmRyZDFfcGh5OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5IC0gZHJpdmVyIGRhdGEgZm9yIFVTQiAzLjAgUEhZCisgKiBAZGV2OiBwb2ludGVyIHRvIGRldmljZSBpbnN0YW5jZSBvZiB0aGlzIHBsYXRmb3JtIGRldmljZQorICogQHJlZ19waHk6IHVzYiBwaHkgY29udHJvbGxlciByZWdpc3RlciBtZW1vcnkgYmFzZQorICogQGNsazogcGh5IGNsb2NrIGZvciByZWdpc3RlciBhY2Nlc3MKKyAqIEBkcnZfZGF0YTogcG9pbnRlciB0byBTb0MgbGV2ZWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlCisgKiBAcGh5c1tdOiBhcnJheSBmb3IgJ0VYWU5PUzVfRFJEUEhZU19OVU0nIG51bWJlciBvZiBQSFkKKyAqCSAgICBpbnN0YW5jZXMgZWFjaCB3aXRoIGl0cyAncGh5JyBhbmQgJ3BoeV9jZmcnLgorICogQGV4dHJlZmNsazogZnJlcXVlbmN5IHNlbGVjdCBzZXR0aW5ncyB3aGVuIHVzaW5nICdzZXBhcmF0ZQorICoJICAgICAgIHJlZmVyZW5jZSBjbG9ja3MnIGZvciBTUyBhbmQgSFMgb3BlcmF0aW9ucworICogQHJlZl9jbGs6IHJlZmVyZW5jZSBjbG9jayB0byBQSFkgYmxvY2sgZnJvbSB3aGljaCBQSFkncworICoJICAgICBvcGVyYXRpb25hbCBjbG9ja3MgYXJlIGRlcml2ZWQKKyAqIEByZWZfcmF0ZTogcmF0ZSBvZiBhYm92ZSByZWZlcmVuY2UgY2xvY2sKKyAqLworc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqcmVnX3BoeTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJY29uc3Qgc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeV9kcnZkYXRhICpkcnZfZGF0YTsKKwlzdHJ1Y3QgcGh5X3VzYl9pbnN0YW5jZSB7CisJCXN0cnVjdCBwaHkgKnBoeTsKKwkJdTMyIGluZGV4OworCQlzdHJ1Y3QgcmVnbWFwICpyZWdfcG11OworCQl1MzIgcG11X29mZnNldDsKKwkJY29uc3Qgc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeV9jb25maWcgKnBoeV9jZmc7CisJfSBwaHlzW0VYWU5PUzVfRFJEUEhZU19OVU1dOworCXUzMiBleHRyZWZjbGs7CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2YnVzOworfTsKKworc3RhdGljIGlubGluZQorc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeSAqdG9fdXNiZHJkX3BoeShzdHJ1Y3QgcGh5X3VzYl9pbnN0YW5jZSAqaW5zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKChpbnN0KSwgc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeSwKKwkJCSAgICBwaHlzWyhpbnN0KS0+aW5kZXhdKTsKK30KKworLyoKKyAqIGV4eW5vczVfcmF0ZV90b19jbGsoKSBjb252ZXJ0cyB0aGUgc3VwcGxpZWQgY2xvY2sgcmF0ZSB0byB0aGUgdmFsdWUgdGhhdAorICogY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIHBoeSByZWdpc3Rlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBleHlub3M1X3JhdGVfdG9fY2xrKHVuc2lnbmVkIGxvbmcgcmF0ZSwgdTMyICpyZWcpCit7CisJLyogRVhZTk9TNV9GU0VMX01BU0sgKi8KKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgOTYwMCAqIEtIWjoKKwkJKnJlZyA9IEVYWU5PUzVfRlNFTF85TUhaNjsKKwkJYnJlYWs7CisJY2FzZSAxMCAqIE1IWjoKKwkJKnJlZyA9IEVYWU5PUzVfRlNFTF8xME1IWjsKKwkJYnJlYWs7CisJY2FzZSAxMiAqIE1IWjoKKwkJKnJlZyA9IEVYWU5PUzVfRlNFTF8xMk1IWjsKKwkJYnJlYWs7CisJY2FzZSAxOTIwMCAqIEtIWjoKKwkJKnJlZyA9IEVYWU5PUzVfRlNFTF8xOU1IWjI7CisJCWJyZWFrOworCWNhc2UgMjAgKiBNSFo6CisJCSpyZWcgPSBFWFlOT1M1X0ZTRUxfMjBNSFo7CisJCWJyZWFrOworCWNhc2UgMjQgKiBNSFo6CisJCSpyZWcgPSBFWFlOT1M1X0ZTRUxfMjRNSFo7CisJCWJyZWFrOworCWNhc2UgNTAgKiBNSFo6CisJCSpyZWcgPSBFWFlOT1M1X0ZTRUxfNTBNSFo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleHlub3M1X3VzYmRyZF9waHlfaXNvbChzdHJ1Y3QgcGh5X3VzYl9pbnN0YW5jZSAqaW5zdCwKKwkJCQkJCXVuc2lnbmVkIGludCBvbikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYgKCFpbnN0LT5yZWdfcG11KQorCQlyZXR1cm47CisKKwl2YWwgPSBvbiA/IDAgOiBFWFlOT1M1X1BIWV9FTkFCTEU7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaW5zdC0+cmVnX3BtdSwgaW5zdC0+cG11X29mZnNldCwKKwkJCSAgIEVYWU5PUzVfUEhZX0VOQUJMRSwgdmFsKTsKK30KKworLyoKKyAqIFNldHMgdGhlIHBpcGUzIHBoeSdzIGNsayBhcyBFWFRSRUZDTEsgKFhYVEkpIHdoaWNoIGlzIGludGVybmFsIGNsb2NrCisgKiBmcm9tIGNsb2NrIGNvcmUuIEZ1cnRoZXIgc2V0cyBtdWx0aXBsaWVyIHZhbHVlcyBhbmQgc3ByZWFkIHNwZWN0cnVtCisgKiBjbG9jayBzZXR0aW5ncyBmb3IgU3VwZXJTcGVlZCBvcGVyYXRpb25zLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50CitleHlub3M1X3VzYmRyZF9waXBlM19zZXRfcmVmY2xrKHN0cnVjdCBwaHlfdXNiX2luc3RhbmNlICppbnN0KQoreworCXN0YXRpYyB1MzIgcmVnOworCXN0cnVjdCBleHlub3M1X3VzYmRyZF9waHkgKnBoeV9kcmQgPSB0b191c2JkcmRfcGh5KGluc3QpOworCisJLyogcmVzdG9yZSBhbnkgcHJldmlvdXMgcmVmZXJlbmNlIGNsb2NrIHNldHRpbmdzICovCisJcmVnID0gcmVhZGwocGh5X2RyZC0+cmVnX3BoeSArIEVYWU5PUzVfRFJEX1BIWUNMS1JTVCk7CisKKwkvKiBVc2UgRVhUUkVGQ0xLIGFzIHJlZiBjbG9jayAqLworCXJlZyAmPSB+UEhZQ0xLUlNUX1JFRkNMS1NFTF9NQVNLOworCXJlZyB8PQlQSFlDTEtSU1RfUkVGQ0xLU0VMX0VYVF9SRUZDTEs7CisKKwkvKiBGU0VMIHNldHRpbmdzIGNvcnJlc3BvbmRpbmcgdG8gcmVmZXJlbmNlIGNsb2NrICovCisJcmVnICY9IH5QSFlDTEtSU1RfRlNFTF9QSVBFX01BU0sgfAorCQlQSFlDTEtSU1RfTVBMTF9NVUxUSVBMSUVSX01BU0sgfAorCQlQSFlDTEtSU1RfU1NDX1JFRkNMS1NFTF9NQVNLOworCXN3aXRjaCAocGh5X2RyZC0+ZXh0cmVmY2xrKSB7CisJY2FzZSBFWFlOT1M1X0ZTRUxfNTBNSFo6CisJCXJlZyB8PSAoUEhZQ0xLUlNUX01QTExfTVVMVElQTElFUl81ME1fUkVGIHwKKwkJCVBIWUNMS1JTVF9TU0NfUkVGQ0xLU0VMKDB4MDApKTsKKwkJYnJlYWs7CisJY2FzZSBFWFlOT1M1X0ZTRUxfMjRNSFo6CisJCXJlZyB8PSAoUEhZQ0xLUlNUX01QTExfTVVMVElQTElFUl8yNE1IWl9SRUYgfAorCQkJUEhZQ0xLUlNUX1NTQ19SRUZDTEtTRUwoMHg4OCkpOworCQlicmVhazsKKwljYXNlIEVYWU5PUzVfRlNFTF8yME1IWjoKKwkJcmVnIHw9IChQSFlDTEtSU1RfTVBMTF9NVUxUSVBMSUVSXzIwTUhaX1JFRiB8CisJCQlQSFlDTEtSU1RfU1NDX1JFRkNMS1NFTCgweDAwKSk7CisJCWJyZWFrOworCWNhc2UgRVhZTk9TNV9GU0VMXzE5TUhaMjoKKwkJcmVnIHw9IChQSFlDTEtSU1RfTVBMTF9NVUxUSVBMSUVSXzE5MjAwS0haX1JFRiB8CisJCQlQSFlDTEtSU1RfU1NDX1JFRkNMS1NFTCgweDg4KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcocGh5X2RyZC0+ZGV2LCAidW5zdXBwb3J0ZWQgcmVmIGNsa1xuIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZWc7Cit9CisKKy8qCisgKiBTZXRzIHRoZSB1dG1pIHBoeSdzIGNsayBhcyBFWFRSRUZDTEsgKFhYVEkpIHdoaWNoIGlzIGludGVybmFsIGNsb2NrCisgKiBmcm9tIGNsb2NrIGNvcmUuIEZ1cnRoZXIgc2V0cyB0aGUgRlNFTCB2YWx1ZXMgZm9yIEhpZ2hTcGVlZCBvcGVyYXRpb25zLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50CitleHlub3M1X3VzYmRyZF91dG1pX3NldF9yZWZjbGsoc3RydWN0IHBoeV91c2JfaW5zdGFuY2UgKmluc3QpCit7CisJc3RhdGljIHUzMiByZWc7CisJc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeSAqcGh5X2RyZCA9IHRvX3VzYmRyZF9waHkoaW5zdCk7CisKKwkvKiByZXN0b3JlIGFueSBwcmV2aW91cyByZWZlcmVuY2UgY2xvY2sgc2V0dGluZ3MgKi8KKwlyZWcgPSByZWFkbChwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZQ0xLUlNUKTsKKworCXJlZyAmPSB+UEhZQ0xLUlNUX1JFRkNMS1NFTF9NQVNLOworCXJlZyB8PQlQSFlDTEtSU1RfUkVGQ0xLU0VMX0VYVF9SRUZDTEs7CisKKwlyZWcgJj0gflBIWUNMS1JTVF9GU0VMX1VUTUlfTUFTSyB8CisJCVBIWUNMS1JTVF9NUExMX01VTFRJUExJRVJfTUFTSyB8CisJCVBIWUNMS1JTVF9TU0NfUkVGQ0xLU0VMX01BU0s7CisJcmVnIHw9IFBIWUNMS1JTVF9GU0VMKHBoeV9kcmQtPmV4dHJlZmNsayk7CisKKwlyZXR1cm4gcmVnOworfQorCitzdGF0aWMgdm9pZCBleHlub3M1X3VzYmRyZF9waXBlM19pbml0KHN0cnVjdCBleHlub3M1X3VzYmRyZF9waHkgKnBoeV9kcmQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlQQVJBTTEpOworCS8qIFNldCBUeCBEZS1FbXBoYXNpcyBsZXZlbCAqLworCXJlZyAmPSB+UEhZUEFSQU0xX1BDU19UWERFRU1QSF9NQVNLOworCXJlZyB8PQlQSFlQQVJBTTFfUENTX1RYREVFTVBIOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlQQVJBTTEpOworCisJcmVnID0gcmVhZGwocGh5X2RyZC0+cmVnX3BoeSArIEVYWU5PUzVfRFJEX1BIWVRFU1QpOworCXJlZyAmPSB+UEhZVEVTVF9QT1dFUkRPV05fU1NQOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlURVNUKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNV91c2JkcmRfdXRtaV9pbml0KHN0cnVjdCBleHlub3M1X3VzYmRyZF9waHkgKnBoeV9kcmQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlQQVJBTTApOworCS8qIFNldCBMb3NzLW9mLVNpZ25hbCBEZXRlY3RvciBzZW5zaXRpdml0eSAqLworCXJlZyAmPSB+UEhZUEFSQU0wX1JFRl9MT1NMRVZFTF9NQVNLOworCXJlZyB8PQlQSFlQQVJBTTBfUkVGX0xPU0xFVkVMOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlQQVJBTTApOworCisJcmVnID0gcmVhZGwocGh5X2RyZC0+cmVnX3BoeSArIEVYWU5PUzVfRFJEX1BIWVBBUkFNMSk7CisJLyogU2V0IFR4IERlLUVtcGhhc2lzIGxldmVsICovCisJcmVnICY9IH5QSFlQQVJBTTFfUENTX1RYREVFTVBIX01BU0s7CisJcmVnIHw9CVBIWVBBUkFNMV9QQ1NfVFhERUVNUEg7CisJd3JpdGVsKHJlZywgcGh5X2RyZC0+cmVnX3BoeSArIEVYWU5PUzVfRFJEX1BIWVBBUkFNMSk7CisKKwkvKiBVVE1JIFBvd2VyIENvbnRyb2wgKi8KKwl3cml0ZWwoUEhZVVRNSV9PVEdESVNBQkxFLCBwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZVVRNSSk7CisKKwlyZWcgPSByZWFkbChwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZVEVTVCk7CisJcmVnICY9IH5QSFlURVNUX1BPV0VSRE9XTl9IU1A7CisJd3JpdGVsKHJlZywgcGh5X2RyZC0+cmVnX3BoeSArIEVYWU5PUzVfRFJEX1BIWVRFU1QpOworfQorCitzdGF0aWMgaW50IGV4eW5vczVfdXNiZHJkX3BoeV9pbml0KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlpbnQgcmV0OworCXUzMiByZWc7CisJc3RydWN0IHBoeV91c2JfaW5zdGFuY2UgKmluc3QgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5ICpwaHlfZHJkID0gdG9fdXNiZHJkX3BoeShpbnN0KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHlfZHJkLT5jbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBSZXNldCBVU0IgMy4wIFBIWSAqLworCXdyaXRlbCgweDAsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlSRUcwKTsKKwl3cml0ZWwoMHgwLCBwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZUkVTVU1FKTsKKworCS8qCisJICogU2V0dGluZyB0aGUgRnJhbWUgbGVuZ3RoIEFkaiB2YWx1ZVs2OjFdIHRvIGRlZmF1bHQgMHgyMAorCSAqIFNlZSB4SENJIDEuMCBzcGVjLCA1LjIuNAorCSAqLworCXJlZyA9CUxJTktTWVNURU1fWEhDSV9WRVJTSU9OX0NPTlRST0wgfAorCQlMSU5LU1lTVEVNX0ZMQURKKDB4MjApOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9MSU5LU1lTVEVNKTsKKworCXJlZyA9IHJlYWRsKHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlQQVJBTTApOworCS8qIFNlbGVjdCBQSFkgQ0xLIHNvdXJjZSAqLworCXJlZyAmPSB+UEhZUEFSQU0wX1JFRl9VU0VfUEFEOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlQQVJBTTApOworCisJLyogVGhpcyBiaXQgbXVzdCBiZSBzZXQgZm9yIGJvdGggSFMgYW5kIFNTIG9wZXJhdGlvbnMgKi8KKwlyZWcgPSByZWFkbChwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZVVRNSUNMS1NFTCk7CisJcmVnIHw9IFBIWVVUTUlDTEtTRUxfVVRNSV9DTEtTRUw7CisJd3JpdGVsKHJlZywgcGh5X2RyZC0+cmVnX3BoeSArIEVYWU5PUzVfRFJEX1BIWVVUTUlDTEtTRUwpOworCisJLyogVVRNSSBvciBQSVBFMyBzcGVjaWZpYyBpbml0ICovCisJaW5zdC0+cGh5X2NmZy0+cGh5X2luaXQocGh5X2RyZCk7CisKKwkvKiByZWZlcmVuY2UgY2xvY2sgc2V0dGluZ3MgKi8KKwlyZWcgPSBpbnN0LT5waHlfY2ZnLT5zZXRfcmVmY2xrKGluc3QpOworCisJCS8qIERpZ2l0YWwgcG93ZXIgc3VwcGx5IGluIG5vcm1hbCBvcGVyYXRpbmcgbW9kZSAqLworCXJlZyB8PQlQSFlDTEtSU1RfUkVURU5BQkxFTiB8CisJCS8qIEVuYWJsZSByZWYgY2xvY2sgZm9yIFNTIGZ1bmN0aW9uICovCisJCVBIWUNMS1JTVF9SRUZfU1NQX0VOIHwKKwkJLyogRW5hYmxlIHNwcmVhZCBzcGVjdHJ1bSAqLworCQlQSFlDTEtSU1RfU1NDX0VOIHwKKwkJLyogUG93ZXIgZG93biBIUyBCaWFzIGFuZCBQTEwgYmxvY2tzIGluIHN1c3BlbmQgbW9kZSAqLworCQlQSFlDTEtSU1RfQ09NTU9OT05OIHwKKwkJLyogUmVzZXQgdGhlIHBvcnQgKi8KKwkJUEhZQ0xLUlNUX1BPUlRSRVNFVDsKKworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlDTEtSU1QpOworCisJdWRlbGF5KDEwKTsKKworCXJlZyAmPSB+UEhZQ0xLUlNUX1BPUlRSRVNFVDsKKwl3cml0ZWwocmVnLCBwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZQ0xLUlNUKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwaHlfZHJkLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNV91c2JkcmRfcGh5X2V4aXQoc3RydWN0IHBoeSAqcGh5KQoreworCWludCByZXQ7CisJdTMyIHJlZzsKKwlzdHJ1Y3QgcGh5X3VzYl9pbnN0YW5jZSAqaW5zdCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCXN0cnVjdCBleHlub3M1X3VzYmRyZF9waHkgKnBoeV9kcmQgPSB0b191c2JkcmRfcGh5KGluc3QpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeV9kcmQtPmNsayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlZyA9CVBIWVVUTUlfT1RHRElTQUJMRSB8CisJCVBIWVVUTUlfRk9SQ0VTVVNQRU5EIHwKKwkJUEhZVVRNSV9GT1JDRVNMRUVQOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlVVE1JKTsKKworCS8qIFJlc2V0dGluZyB0aGUgUEhZQ0xLUlNUIGVuYWJsZSBiaXRzIHRvIHJlZHVjZSBsZWFrYWdlIGN1cnJlbnQgKi8KKwlyZWcgPSByZWFkbChwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZQ0xLUlNUKTsKKwlyZWcgJj0gfihQSFlDTEtSU1RfUkVGX1NTUF9FTiB8CisJCSBQSFlDTEtSU1RfU1NDX0VOIHwKKwkJIFBIWUNMS1JTVF9DT01NT05PTk4pOworCXdyaXRlbChyZWcsIHBoeV9kcmQtPnJlZ19waHkgKyBFWFlOT1M1X0RSRF9QSFlDTEtSU1QpOworCisJLyogQ29udHJvbCBQSFlURVNUIHRvIHJlbW92ZSBsZWFrYWdlIGN1cnJlbnQgKi8KKwlyZWcgPSByZWFkbChwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZVEVTVCk7CisJcmVnIHw9CVBIWVRFU1RfUE9XRVJET1dOX1NTUCB8CisJCVBIWVRFU1RfUE9XRVJET1dOX0hTUDsKKwl3cml0ZWwocmVnLCBwaHlfZHJkLT5yZWdfcGh5ICsgRVhZTk9TNV9EUkRfUEhZVEVTVCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5X2RyZC0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4eW5vczVfdXNiZHJkX3BoeV9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGh5X3VzYl9pbnN0YW5jZSAqaW5zdCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCXN0cnVjdCBleHlub3M1X3VzYmRyZF9waHkgKnBoeV9kcmQgPSB0b191c2JkcmRfcGh5KGluc3QpOworCisJZGV2X2RiZyhwaHlfZHJkLT5kZXYsICJSZXF1ZXN0IHRvIHBvd2VyX29uIHVzYmRyZF9waHkgcGh5XG4iKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShwaHlfZHJkLT5yZWZfY2xrKTsKKworCS8qIEVuYWJsZSBWQlVTIHN1cHBseSAqLworCWlmIChwaHlfZHJkLT52YnVzKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocGh5X2RyZC0+dmJ1cyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIocGh5X2RyZC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBWQlVTIHN1cHBseVxuIik7CisJCQlnb3RvIGZhaWxfdmJ1czsKKwkJfQorCX0KKworCS8qIFBvd2VyLW9uIFBIWSovCisJaW5zdC0+cGh5X2NmZy0+cGh5X2lzb2woaW5zdCwgMCk7CisKKwlyZXR1cm4gMDsKKworZmFpbF92YnVzOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShwaHlfZHJkLT5yZWZfY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNV91c2JkcmRfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IHBoeV91c2JfaW5zdGFuY2UgKmluc3QgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5ICpwaHlfZHJkID0gdG9fdXNiZHJkX3BoeShpbnN0KTsKKworCWRldl9kYmcocGh5X2RyZC0+ZGV2LCAiUmVxdWVzdCB0byBwb3dlcl9vZmYgdXNiZHJkX3BoeSBwaHlcbiIpOworCisJLyogUG93ZXItb2ZmIHRoZSBQSFkgKi8KKwlpbnN0LT5waHlfY2ZnLT5waHlfaXNvbChpbnN0LCAxKTsKKworCS8qIERpc2FibGUgVkJVUyBzdXBwbHkgKi8KKwlpZiAocGh5X2RyZC0+dmJ1cykKKwkJcmVndWxhdG9yX2Rpc2FibGUocGh5X2RyZC0+dmJ1cyk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5X2RyZC0+cmVmX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwaHkgKmV4eW5vczVfdXNiZHJkX3BoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmFyZ3MpCit7CisJc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeSAqcGh5X2RyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKFdBUk5fT04oYXJncy0+YXJnc1swXSA+IEVYWU5PUzVfRFJEUEhZU19OVU0pKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCXJldHVybiBwaHlfZHJkLT5waHlzW2FyZ3MtPmFyZ3NbMF1dLnBoeTsKK30KKworc3RhdGljIHN0cnVjdCBwaHlfb3BzIGV4eW5vczVfdXNiZHJkX3BoeV9vcHMgPSB7CisJLmluaXQJCT0gZXh5bm9zNV91c2JkcmRfcGh5X2luaXQsCisJLmV4aXQJCT0gZXh5bm9zNV91c2JkcmRfcGh5X2V4aXQsCisJLnBvd2VyX29uCT0gZXh5bm9zNV91c2JkcmRfcGh5X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYJPSBleHlub3M1X3VzYmRyZF9waHlfcG93ZXJfb2ZmLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK2NvbnN0IHN0cnVjdCBleHlub3M1X3VzYmRyZF9waHlfY29uZmlnIHBoeV9jZmdfZXh5bm9zNVtdID0geworCXsKKwkJLmlkCQk9IEVYWU5PUzVfRFJEUEhZX1VUTUksCisJCS5waHlfaXNvbAk9IGV4eW5vczVfdXNiZHJkX3BoeV9pc29sLAorCQkucGh5X2luaXQJPSBleHlub3M1X3VzYmRyZF91dG1pX2luaXQsCisJCS5zZXRfcmVmY2xrCT0gZXh5bm9zNV91c2JkcmRfdXRtaV9zZXRfcmVmY2xrLAorCX0sCisJeworCQkuaWQJCT0gRVhZTk9TNV9EUkRQSFlfUElQRTMsCisJCS5waHlfaXNvbAk9IGV4eW5vczVfdXNiZHJkX3BoeV9pc29sLAorCQkucGh5X2luaXQJPSBleHlub3M1X3VzYmRyZF9waXBlM19pbml0LAorCQkuc2V0X3JlZmNsawk9IGV4eW5vczVfdXNiZHJkX3BpcGUzX3NldF9yZWZjbGssCisJfSwKK307CisKK2NvbnN0IHN0cnVjdCBleHlub3M1X3VzYmRyZF9waHlfZHJ2ZGF0YSBleHlub3M1NDIwX3VzYmRyZF9waHkgPSB7CisJLnBoeV9jZmcJCT0gcGh5X2NmZ19leHlub3M1LAorCS5wbXVfb2Zmc2V0X3VzYmRyZDBfcGh5CT0gRVhZTk9TNV9VU0JEUkRfUEhZX0NPTlRST0wsCisJLnBtdV9vZmZzZXRfdXNiZHJkMV9waHkJPSBFWFlOT1M1NDIwX1VTQkRSRDFfUEhZX0NPTlRST0wsCit9OworCitjb25zdCBzdHJ1Y3QgZXh5bm9zNV91c2JkcmRfcGh5X2RydmRhdGEgZXh5bm9zNTI1MF91c2JkcmRfcGh5ID0geworCS5waHlfY2ZnCQk9IHBoeV9jZmdfZXh5bm9zNSwKKwkucG11X29mZnNldF91c2JkcmQwX3BoeQk9IEVYWU5PUzVfVVNCRFJEX1BIWV9DT05UUk9MLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZXh5bm9zNV91c2JkcmRfcGh5X29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtdXNiZHJkLXBoeSIsCisJCS5kYXRhID0gJmV4eW5vczUyNTBfdXNiZHJkX3BoeQorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLXVzYmRyZC1waHkiLAorCQkuZGF0YSA9ICZleHlub3M1NDIwX3VzYmRyZF9waHkKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBpbnQgZXh5bm9zNV91c2JkcmRfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeSAqcGh5X2RyZDsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IGV4eW5vczVfdXNiZHJkX3BoeV9kcnZkYXRhICpkcnZfZGF0YTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdfcG11OworCXUzMiBwbXVfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcmVmX3JhdGU7CisJaW50IGksIHJldDsKKwlpbnQgY2hhbm5lbDsKKworCXBoeV9kcmQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBoeV9kcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoeV9kcmQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgcGh5X2RyZCk7CisJcGh5X2RyZC0+ZGV2ID0gZGV2OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlwaHlfZHJkLT5yZWdfcGh5ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBoeV9kcmQtPnJlZ19waHkpKQorCQlyZXR1cm4gUFRSX0VSUihwaHlfZHJkLT5yZWdfcGh5KTsKKworCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShleHlub3M1X3VzYmRyZF9waHlfb2ZfbWF0Y2gsIHBkZXYtPmRldi5vZl9ub2RlKTsKKworCWRydl9kYXRhID0gbWF0Y2gtPmRhdGE7CisJcGh5X2RyZC0+ZHJ2X2RhdGEgPSBkcnZfZGF0YTsKKworCXBoeV9kcmQtPmNsayA9IGRldm1fY2xrX2dldChkZXYsICJwaHkiKTsKKwlpZiAoSVNfRVJSKHBoeV9kcmQtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrIG9mIHBoeSBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5X2RyZC0+Y2xrKTsKKwl9CisKKwlwaHlfZHJkLT5yZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInJlZiIpOworCWlmIChJU19FUlIocGh5X2RyZC0+cmVmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IHJlZmVyZW5jZSBjbG9jayBvZiB1c2JkcmQgcGh5XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5X2RyZC0+cmVmX2Nsayk7CisJfQorCXJlZl9yYXRlID0gY2xrX2dldF9yYXRlKHBoeV9kcmQtPnJlZl9jbGspOworCisJcmV0ID0gZXh5bm9zNV9yYXRlX3RvX2NsayhyZWZfcmF0ZSwgJnBoeV9kcmQtPmV4dHJlZmNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBoeV9kcmQtPmRldiwgIkNsb2NrIHJhdGUgKCVsZCkgbm90IHN1cHBvcnRlZFxuIiwKKwkJCXJlZl9yYXRlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdfcG11ID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsCisJCQkJCQkgICAic2Ftc3VuZyxwbXUtc3lzY29uIik7CisJaWYgKElTX0VSUihyZWdfcG11KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBsb29rdXAgUE1VIHJlZ21hcFxuIik7CisJCXJldHVybiBQVFJfRVJSKHJlZ19wbXUpOworCX0KKworCS8qCisJICogRXh5bm9zNTQyMCBTb0MgaGFzIG11bHRpcGxlIGNoYW5uZWxzIGZvciBVU0IgMy4wIFBIWSwgd2l0aAorCSAqIGVhY2ggaGF2aW5nIHNlcGFyYXRlIHBvd2VyIGNvbnRyb2wgcmVnaXN0ZXJzLgorCSAqICdjaGFubmVsJyBmYWNpbGl0YXRlcyB0byBzZXQgc3VjaCByZWdpc3RlcnMuCisJICovCisJY2hhbm5lbCA9IG9mX2FsaWFzX2dldF9pZChub2RlLCAidXNiZHJkcGh5Iik7CisJaWYgKGNoYW5uZWwgPCAwKQorCQlkZXZfZGJnKGRldiwgIk5vdCBhIG11bHRpLWNvbnRyb2xsZXIgdXNiZHJkIHBoeVxuIik7CisKKwlzd2l0Y2ggKGNoYW5uZWwpIHsKKwljYXNlIDE6CisJCXBtdV9vZmZzZXQgPSBwaHlfZHJkLT5kcnZfZGF0YS0+cG11X29mZnNldF91c2JkcmQxX3BoeTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCXBtdV9vZmZzZXQgPSBwaHlfZHJkLT5kcnZfZGF0YS0+cG11X29mZnNldF91c2JkcmQwX3BoeTsKKwkJYnJlYWs7CisJfQorCisJLyogR2V0IFZidXMgcmVndWxhdG9yICovCisJcGh5X2RyZC0+dmJ1cyA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJ2YnVzIik7CisJaWYgKElTX0VSUihwaHlfZHJkLT52YnVzKSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeV9kcmQtPnZidXMpOworCQlpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4gcmV0OworCisJCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byBnZXQgVkJVUyBzdXBwbHkgcmVndWxhdG9yXG4iKTsKKwkJcGh5X2RyZC0+dmJ1cyA9IE5VTEw7CisJfQorCisJZGV2X3ZkYmcoZGV2LCAiQ3JlYXRpbmcgdXNiZHJkX3BoeSBwaHlcbiIpOworCisJZm9yIChpID0gMDsgaSA8IEVYWU5PUzVfRFJEUEhZU19OVU07IGkrKykgeworCQlzdHJ1Y3QgcGh5ICpwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCAmZXh5bm9zNV91c2JkcmRfcGh5X29wcywKKwkJCQkJCSAgTlVMTCk7CisJCWlmIChJU19FUlIocGh5KSkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIHVzYmRyZF9waHkgcGh5XG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKHBoeSk7CisJCX0KKworCQlwaHlfZHJkLT5waHlzW2ldLnBoeSA9IHBoeTsKKwkJcGh5X2RyZC0+cGh5c1tpXS5pbmRleCA9IGk7CisJCXBoeV9kcmQtPnBoeXNbaV0ucmVnX3BtdSA9IHJlZ19wbXU7CisJCXBoeV9kcmQtPnBoeXNbaV0ucG11X29mZnNldCA9IHBtdV9vZmZzZXQ7CisJCXBoeV9kcmQtPnBoeXNbaV0ucGh5X2NmZyA9ICZkcnZfZGF0YS0+cGh5X2NmZ1tpXTsKKwkJcGh5X3NldF9kcnZkYXRhKHBoeSwgJnBoeV9kcmQtPnBoeXNbaV0pOworCX0KKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwKKwkJCQkJCSAgICAgZXh5bm9zNV91c2JkcmRfcGh5X3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeV9wcm92aWRlcikpIHsKKwkJZGV2X2VycihwaHlfZHJkLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcGh5IHByb3ZpZGVyXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXh5bm9zNV91c2IzZHJkX3BoeSA9IHsKKwkucHJvYmUJPSBleHlub3M1X3VzYmRyZF9waHlfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm9mX21hdGNoX3RhYmxlCT0gZXh5bm9zNV91c2JkcmRfcGh5X29mX21hdGNoLAorCQkubmFtZQkJPSAiZXh5bm9zNV91c2IzZHJkX3BoeSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9Cit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGV4eW5vczVfdXNiM2RyZF9waHkpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIEVYWU5PUzUgU29DcyBVU0IgMy4wIERSRCBjb250cm9sbGVyIFBIWSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlZpdmVrIEdhdXRhbSA8Z2F1dGFtLnZpdmVrQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpleHlub3M1X3VzYjNkcmRfcGh5Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktZXh5bm9zNTI1MC1zYXRhLmMgYi9kcml2ZXJzL3BoeS9waHktZXh5bm9zNTI1MC1zYXRhLmMKaW5kZXggYzkzNjFiNy4uMDU2ODk0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LWV4eW5vczUyNTAtc2F0YS5jCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1leHlub3M1MjUwLXNhdGEuYwpAQCAtMjQ2LDYgKzI0Niw2IEBACiBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGV4eW5vc19zYXRhX3BoeV9kcml2ZXIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgU2VyRGVzIFBIWSBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgVjIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1IoIkdpcmlzaCBLIFMgPGtzLmdpcmlAc2Ftc3VuZy5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJZdXZhcmFqIEMgRCA8eXV2YXJhai5jZEBzYW1zdW5nLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1vbWFwLXVzYjIuYyBiL2RyaXZlcnMvcGh5L3BoeS1vbWFwLXVzYjIuYwppbmRleCBhMjIwNWE4Li43MDA3YzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktb21hcC11c2IyLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LW9tYXAtdXNiMi5jCkBAIC0yNzUsMTggKzI3NSwzNCBAQAogCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKIAkJcmV0dXJuIFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKIAotCXBoeS0+d2t1cGNsayA9IGRldm1fY2xrX2dldChwaHktPmRldiwgInVzYl9waHlfY21fY2xrMzJrIik7CisJcGh5LT53a3VwY2xrID0gZGV2bV9jbGtfZ2V0KHBoeS0+ZGV2LCAid2t1cGNsayIpOwogCWlmIChJU19FUlIocGh5LT53a3VwY2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IHVzYl9waHlfY21fY2xrMzJrXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIocGh5LT53a3VwY2xrKTsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgd2t1cGNsaywgdHJ5aW5nIG9sZCBuYW1lXG4iKTsKKwkJcGh5LT53a3VwY2xrID0gZGV2bV9jbGtfZ2V0KHBoeS0+ZGV2LCAidXNiX3BoeV9jbV9jbGszMmsiKTsKKwkJaWYgKElTX0VSUihwaHktPndrdXBjbGspKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IHVzYl9waHlfY21fY2xrMzJrXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKHBoeS0+d2t1cGNsayk7CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSAiZm91bmQgdXNiX3BoeV9jbV9jbGszMmssIHBsZWFzZSBmaXggRFRTXG4iKTsKKwkJfQogCX0KIAljbGtfcHJlcGFyZShwaHktPndrdXBjbGspOwogCi0JcGh5LT5vcHRjbGsgPSBkZXZtX2Nsa19nZXQocGh5LT5kZXYsICJ1c2Jfb3RnX3NzX3JlZmNsazk2MG0iKTsKLQlpZiAoSVNfRVJSKHBoeS0+b3B0Y2xrKSkKLQkJZGV2X3ZkYmcoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgcmVmY2xrOTYwbVxuIik7Ci0JZWxzZQorCXBoeS0+b3B0Y2xrID0gZGV2bV9jbGtfZ2V0KHBoeS0+ZGV2LCAicmVmY2xrIik7CisJaWYgKElTX0VSUihwaHktPm9wdGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCByZWZjbGssIHRyeWluZyBvbGQgbmFtZVxuIik7CisJCXBoeS0+b3B0Y2xrID0gZGV2bV9jbGtfZ2V0KHBoeS0+ZGV2LCAidXNiX290Z19zc19yZWZjbGs5NjBtIik7CisJCWlmIChJU19FUlIocGh5LT5vcHRjbGspKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkJInVuYWJsZSB0byBnZXQgdXNiX290Z19zc19yZWZjbGs5NjBtXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJICJmb3VuZCB1c2Jfb3RnX3NzX3JlZmNsazk2MG0sIHBsZWFzZSBmaXggRFRTXG4iKTsKKwkJfQorCX0gZWxzZSB7CiAJCWNsa19wcmVwYXJlKHBoeS0+b3B0Y2xrKTsKKwl9CiAKIAl1c2JfYWRkX3BoeV9kZXYoJnBoeS0+cGh5KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LXN1bjRpLXVzYi5jIGIvZHJpdmVycy9waHkvcGh5LXN1bjRpLXVzYi5jCmluZGV4IGU2ZTZjNGIuLjExNWQ4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS1zdW40aS11c2IuYworKysgYi9kcml2ZXJzL3BoeS9waHktc3VuNGktdXNiLmMKQEAgLTYxLDcgKzYxLDYgQEAKICNkZWZpbmUgTUFYX1BIWVMJCQkzCiAKIHN0cnVjdCBzdW40aV91c2JfcGh5X2RhdGEgewotCXN0cnVjdCBjbGsgKmNsazsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCWludCBudW1fcGh5czsKQEAgLTcxLDYgKzcwLDcgQEAKIAkJdm9pZCBfX2lvbWVtICpwbXU7CiAJCXN0cnVjdCByZWd1bGF0b3IgKnZidXM7CiAJCXN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDsKKwkJc3RydWN0IGNsayAqY2xrOwogCQlpbnQgaW5kZXg7CiAJfSBwaHlzW01BWF9QSFlTXTsKIH07CkBAIC0xNDYsMTMgKzE0NiwxMyBAQAogCXN0cnVjdCBzdW40aV91c2JfcGh5X2RhdGEgKmRhdGEgPSB0b19zdW40aV91c2JfcGh5X2RhdGEocGh5KTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhdGEtPmNsayk7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeS0+Y2xrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChwaHktPnJlc2V0KTsKIAlpZiAocmV0KSB7Ci0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGspOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT5jbGspOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTcwLDExICsxNzAsMTAgQEAKIHN0YXRpYyBpbnQgc3VuNGlfdXNiX3BoeV9leGl0KHN0cnVjdCBwaHkgKl9waHkpCiB7CiAJc3RydWN0IHN1bjRpX3VzYl9waHkgKnBoeSA9IHBoeV9nZXRfZHJ2ZGF0YShfcGh5KTsKLQlzdHJ1Y3Qgc3VuNGlfdXNiX3BoeV9kYXRhICpkYXRhID0gdG9fc3VuNGlfdXNiX3BoeV9kYXRhKHBoeSk7CiAKIAlzdW40aV91c2JfcGh5X3Bhc3NieShwaHksIDApOwogCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBoeS0+cmVzZXQpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwaHktPmNsayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyNCwxMyArMjIzLDkgQEAKIAlzdHJ1Y3Qgc3VuNGlfdXNiX3BoeV9kYXRhICpkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKLQl2b2lkIF9faW9tZW0gKnBtdSA9IE5VTEw7CiAJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOwotCXN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDsKLQlzdHJ1Y3QgcmVndWxhdG9yICp2YnVzOworCWJvb2wgZGVkaWNhdGVkX2Nsb2NrczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgcGh5ICpwaHk7Ci0JY2hhciBuYW1lWzE2XTsKIAlpbnQgaTsKIAogCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTI0OSw1NSArMjQ0LDY0IEBACiAJZWxzZQogCQlkYXRhLT5kaXNjX3RocmVzaCA9IDI7CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhbGx3aW5uZXIsc3VuNmktYTMxLXVzYi1waHkiKSkKKwkJZGVkaWNhdGVkX2Nsb2NrcyA9IHRydWU7CisJZWxzZQorCQlkZWRpY2F0ZWRfY2xvY2tzID0gZmFsc2U7CisKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGh5X2N0cmwiKTsKIAlkYXRhLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKIAlpZiAoSVNfRVJSKGRhdGEtPmJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5iYXNlKTsKIAotCWRhdGEtPmNsayA9IGRldm1fY2xrX2dldChkZXYsICJ1c2JfcGh5Iik7Ci0JaWYgKElTX0VSUihkYXRhLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGdldCB1c2JfcGh5IGNsb2NrXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YS0+Y2xrKTsKLQl9Ci0KIAkvKiBTa2lwIDAsIDAgaXMgdGhlIHBoeSBmb3Igb3RnIHdoaWNoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAqLwogCWZvciAoaSA9IDE7IGkgPCBkYXRhLT5udW1fcGh5czsgaSsrKSB7CisJCXN0cnVjdCBzdW40aV91c2JfcGh5ICpwaHkgPSBkYXRhLT5waHlzICsgaTsKKwkJY2hhciBuYW1lWzE2XTsKKwogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ1c2IlZF92YnVzIiwgaSk7Ci0JCXZidXMgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2LCBuYW1lKTsKLQkJaWYgKElTX0VSUih2YnVzKSkgewotCQkJaWYgKFBUUl9FUlIodmJ1cykgPT0gLUVQUk9CRV9ERUZFUikKKwkJcGh5LT52YnVzID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGRldiwgbmFtZSk7CisJCWlmIChJU19FUlIocGh5LT52YnVzKSkgeworCQkJaWYgKFBUUl9FUlIocGh5LT52YnVzKSA9PSAtRVBST0JFX0RFRkVSKQogCQkJCXJldHVybiAtRVBST0JFX0RFRkVSOwotCQkJdmJ1cyA9IE5VTEw7CisJCQlwaHktPnZidXMgPSBOVUxMOworCQl9CisKKwkJaWYgKGRlZGljYXRlZF9jbG9ja3MpCisJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ1c2IlZF9waHkiLCBpKTsKKwkJZWxzZQorCQkJc3RybGNweShuYW1lLCAidXNiX3BoeSIsIHNpemVvZihuYW1lKSk7CisKKwkJcGh5LT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBuYW1lKTsKKwkJaWYgKElTX0VSUihwaHktPmNsaykpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAlc1xuIiwgbmFtZSk7CisJCQlyZXR1cm4gUFRSX0VSUihwaHktPmNsayk7CiAJCX0KIAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ1c2IlZF9yZXNldCIsIGkpOwotCQlyZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBuYW1lKTsKLQkJaWYgKElTX0VSUihyZXNldCkpIHsKKwkJcGh5LT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBuYW1lKTsKKwkJaWYgKElTX0VSUihwaHktPnJlc2V0KSkgewogCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0ICVzXG4iLCBuYW1lKTsKLQkJCXJldHVybiBQVFJfRVJSKHJlc2V0KTsKKwkJCXJldHVybiBQVFJfRVJSKHBoeS0+cmVzZXQpOwogCQl9CiAKIAkJaWYgKGkpIHsgLyogTm8gcG11IGZvciB1c2JjMCAqLwogCQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicG11JWQiLCBpKTsKIAkJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwKIAkJCQkJCQlJT1JFU09VUkNFX01FTSwgbmFtZSk7Ci0JCQlwbXUgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwotCQkJaWYgKElTX0VSUihwbXUpKQotCQkJCXJldHVybiBQVFJfRVJSKHBtdSk7CisJCQlwaHktPnBtdSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJCQlpZiAoSVNfRVJSKHBoeS0+cG11KSkKKwkJCQlyZXR1cm4gUFRSX0VSUihwaHktPnBtdSk7CiAJCX0KIAotCQlwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCAmc3VuNGlfdXNiX3BoeV9vcHMsIE5VTEwpOwotCQlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJcGh5LT5waHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCAmc3VuNGlfdXNiX3BoeV9vcHMsIE5VTEwpOworCQlpZiAoSVNfRVJSKHBoeS0+cGh5KSkgewogCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIFBIWSAlZFxuIiwgaSk7Ci0JCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCQkJcmV0dXJuIFBUUl9FUlIocGh5LT5waHkpOwogCQl9CiAKLQkJZGF0YS0+cGh5c1tpXS5waHkgPSBwaHk7Ci0JCWRhdGEtPnBoeXNbaV0ucG11ID0gcG11OwotCQlkYXRhLT5waHlzW2ldLnZidXMgPSB2YnVzOwotCQlkYXRhLT5waHlzW2ldLnJlc2V0ID0gcmVzZXQ7Ci0JCWRhdGEtPnBoeXNbaV0uaW5kZXggPSBpOwotCQlwaHlfc2V0X2RydmRhdGEocGh5LCAmZGF0YS0+cGh5c1tpXSk7CisJCXBoeS0+aW5kZXggPSBpOworCQlwaHlfc2V0X2RydmRhdGEocGh5LT5waHksICZkYXRhLT5waHlzW2ldKTsKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBkYXRhKTsKQEAgLTMxMSw2ICszMTUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNGlfdXNiX3BoeV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC11c2ItcGh5IiB9LAogCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy11c2ItcGh5IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS11c2ItcGh5IiB9LAogCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjdpLWEyMC11c2ItcGh5IiB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZyBiL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCmluZGV4IGUwMGMwMmQuLjAwNDJjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCkBAIC04NCw2ICs4NCw5IEBACiAJZGVwZW5kcyBvbiBBUkNIX0FUOTEKIAlzZWxlY3QgUElOTVVYCiAJc2VsZWN0IFBJTkNPTkYKKwlzZWxlY3QgR1BJT0xJQgorCXNlbGVjdCBPRl9HUElPCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDkxIHBpbmN0cmwgZHJpdmVyCiAKQEAgLTE4NSw2ICsxODgsMTMgQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgaW14NnNsIHBpbmN0cmwgZHJpdmVyCiAKK2NvbmZpZyBQSU5DVFJMX0lNWDZTWAorCWJvb2wgIklNWDZTWCBwaW5jdHJsIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNPQ19JTVg2U1gKKwlzZWxlY3QgUElOQ1RSTF9JTVgKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgaW14NnN4IHBpbmN0cmwgZHJpdmVyCisKIGNvbmZpZyBQSU5DVFJMX1ZGNjEwCiAJYm9vbCAiRnJlZXNjYWxlIFZ5YnJpZCBWRjYxMCBwaW5jdHJsIGRyaXZlciIKIAlkZXBlbmRzIG9uIFNPQ19WRjYxMApAQCAtMjIxLDEwICsyMzEsMjcgQEAKIAlzZWxlY3QgUElOTVVYCiAJc2VsZWN0IFBJTkNPTkYKIAlzZWxlY3QgR0VORVJJQ19QSU5DT05GCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAorCitjb25maWcgUElOQ1RSTF9BUFE4MDY0CisJdHJpc3RhdGUgIlF1YWxjb21tIEFQUTgwNjQgcGluIGNvbnRyb2xsZXIgZHJpdmVyIgorCWRlcGVuZHMgb24gR1BJT0xJQiAmJiBPRgorCXNlbGVjdCBQSU5DVFJMX01TTQorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIHBpbmN0cmwsIHBpbm11eCwgcGluY29uZiBhbmQgZ3Bpb2xpYiBkcml2ZXIgZm9yIHRoZQorCSAgUXVhbGNvbW0gVExNTSBibG9jayBmb3VuZCBpbiB0aGUgUXVhbGNvbW0gQVBRODA2NCBwbGF0Zm9ybS4KKworY29uZmlnIFBJTkNUUkxfSVBRODA2NAorCXRyaXN0YXRlICJRdWFsY29tbSBJUFE4MDY0IHBpbiBjb250cm9sbGVyIGRyaXZlciIKKwlkZXBlbmRzIG9uIEdQSU9MSUIgJiYgT0YKKwlzZWxlY3QgUElOQ1RSTF9NU00KKwloZWxwCisJICBUaGlzIGlzIHRoZSBwaW5jdHJsLCBwaW5tdXgsIHBpbmNvbmYgYW5kIGdwaW9saWIgZHJpdmVyIGZvciB0aGUKKwkgIFF1YWxjb21tIFRMTU0gYmxvY2sgZm91bmQgaW4gdGhlIFF1YWxjb21tIElQUTgwNjQgcGxhdGZvcm0uCiAKIGNvbmZpZyBQSU5DVFJMX01TTThYNzQKIAl0cmlzdGF0ZSAiUXVhbGNvbW0gOHg3NCBwaW4gY29udHJvbGxlciBkcml2ZXIiCi0JZGVwZW5kcyBvbiBHUElPTElCICYmIE9GCisJZGVwZW5kcyBvbiBHUElPTElCICYmIE9GICYmIChBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUKQogCXNlbGVjdCBQSU5DVFJMX01TTQogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHBpbmN0cmwsIHBpbm11eCwgcGluY29uZiBhbmQgZ3Bpb2xpYiBkcml2ZXIgZm9yIHRoZQpAQCAtMjU2LDYgKzI4Myw3IEBACiAJc2VsZWN0IFBJTk1VWAogCXNlbGVjdCBHRU5FUklDX1BJTkNPTkYKIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAorCXNlbGVjdCBNRkRfU1lTQ09OCiAKIGNvbmZpZyBQSU5DVFJMX1NJTkdMRQogCXRyaXN0YXRlICJPbmUtcmVnaXN0ZXItcGVyLXBpbiB0eXBlIGRldmljZSB0cmVlIGJhc2VkIHBpbmN0cmwgZHJpdmVyIgpAQCAtMjcwLDE3ICsyOTgsMTQgQEAKIAlib29sICJDU1IgU2lSRnByaW1hSUkvU2lSRm1hcmNvIHBpbiBjb250cm9sbGVyIGRyaXZlciIKIAlkZXBlbmRzIG9uIEFSQ0hfU0lSRgogCXNlbGVjdCBQSU5NVVgKLQotY29uZmlnIFBJTkNUUkxfU1VOWEkKLQlib29sCi0Jc2VsZWN0IFBJTk1VWAotCXNlbGVjdCBHRU5FUklDX1BJTkNPTkYKKwlzZWxlY3QgR1BJT0xJQl9JUlFDSElQCiAKIGNvbmZpZyBQSU5DVFJMX1NUCiAJYm9vbAogCWRlcGVuZHMgb24gT0YKIAlzZWxlY3QgUElOTVVYCiAJc2VsZWN0IFBJTkNPTkYKKwlzZWxlY3QgR1BJT0xJQl9JUlFDSElQCiAKIGNvbmZpZyBQSU5DVFJMX1RFR1JBCiAJYm9vbApAQCAtMzY4LDkgKzM5MywxMSBAQAogCWRlcGVuZHMgb24gQVJDSF9TM0M2NFhYCiAJc2VsZWN0IFBJTkNUUkxfU0FNU1VORwogCitzb3VyY2UgImRyaXZlcnMvcGluY3RybC9iZXJsaW4vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9waW5jdHJsL212ZWJ1L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvcGluY3RybC9zaC1wZmMvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9waW5jdHJsL3NwZWFyL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvcGluY3RybC9zdW54aS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3BpbmN0cmwvdnQ4NTAwL0tjb25maWciCiAKIGNvbmZpZyBQSU5DVFJMX1hXQVkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9NYWtlZmlsZQppbmRleCA2ZDNmZDYyLi5jNGI1ZDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9waW5jdHJsL01ha2VmaWxlCkBAIC0zMiwxMiArMzIsMTUgQEAKIG9iai0kKENPTkZJR19QSU5DVFJMX0lNWDZRKQkrPSBwaW5jdHJsLWlteDZxLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX0lNWDZRKQkrPSBwaW5jdHJsLWlteDZkbC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9JTVg2U0wpCSs9IHBpbmN0cmwtaW14NnNsLm8KK29iai0kKENPTkZJR19QSU5DVFJMX0lNWDZTWCkJKz0gcGluY3RybC1pbXg2c3gubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfRkFMQ09OKQkrPSBwaW5jdHJsLWZhbGNvbi5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9NWFMpCSs9IHBpbmN0cmwtbXhzLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX0lNWDIzKQkrPSBwaW5jdHJsLWlteDIzLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX0lNWDI1KQkrPSBwaW5jdHJsLWlteDI1Lm8KIG9iai0kKENPTkZJR19QSU5DVFJMX0lNWDI4KQkrPSBwaW5jdHJsLWlteDI4Lm8KIG9iai0kKENPTkZJR19QSU5DVFJMX01TTSkJKz0gcGluY3RybC1tc20ubworb2JqLSQoQ09ORklHX1BJTkNUUkxfQVBRODA2NCkJKz0gcGluY3RybC1hcHE4MDY0Lm8KK29iai0kKENPTkZJR19QSU5DVFJMX0lQUTgwNjQpCSs9IHBpbmN0cmwtaXBxODA2NC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9NU004WDc0KQkrPSBwaW5jdHJsLW1zbTh4NzQubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfTk9NQURJSykJKz0gcGluY3RybC1ub21hZGlrLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1NUTjg4MTUpCSs9IHBpbmN0cmwtbm9tYWRpay1zdG44ODE1Lm8KQEAgLTQ3LDcgKzUwLDYgQEAKIG9iai0kKENPTkZJR19QSU5DVFJMX1JPQ0tDSElQKQkrPSBwaW5jdHJsLXJvY2tjaGlwLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1NJTkdMRSkJKz0gcGluY3RybC1zaW5nbGUubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfU0lSRikJKz0gc2lyZi8KLW9iai0kKENPTkZJR19QSU5DVFJMX1NVTlhJKQkrPSBwaW5jdHJsLXN1bnhpLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1RFR1JBKQkrPSBwaW5jdHJsLXRlZ3JhLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1RFR1JBMjApCSs9IHBpbmN0cmwtdGVncmEyMC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9URUdSQTMwKQkrPSBwaW5jdHJsLXRlZ3JhMzAubwpAQCAtNjgsOCArNzAsMTAgQEAKIG9iai0kKENPTkZJR19QSU5DVFJMX1NUKSAJKz0gcGluY3RybC1zdC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9WRjYxMCkJKz0gcGluY3RybC12ZjYxMC5vCiAKK29iai0kKENPTkZJR19BUkNIX0JFUkxJTikJKz0gYmVybGluLwogb2JqLSQoQ09ORklHX1BMQVRfT1JJT04pICAgICAgICArPSBtdmVidS8KIG9iai0kKENPTkZJR19BUkNIX1NITU9CSUxFKQkrPSBzaC1wZmMvCiBvYmotJChDT05GSUdfU1VQRVJIKQkJKz0gc2gtcGZjLwogb2JqLSQoQ09ORklHX1BMQVRfU1BFQVIpCSs9IHNwZWFyLwogb2JqLSQoQ09ORklHX0FSQ0hfVlQ4NTAwKQkrPSB2dDg1MDAvCitvYmotJChDT05GSUdfQVJDSF9TVU5YSSkJKz0gc3VueGkvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvYmVybGluL0tjb25maWcgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MzIyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vS2NvbmZpZwpAQCAtMCwwICsxLDIwIEBACitpZiBBUkNIX0JFUkxJTgorCitjb25maWcgUElOQ1RSTF9CRVJMSU4KKwlib29sCisJc2VsZWN0IFBJTk1VWAorCXNlbGVjdCBSRUdNQVBfTU1JTworCitjb25maWcgUElOQ1RSTF9CRVJMSU5fQkcyCisJYm9vbAorCXNlbGVjdCBQSU5DVFJMX0JFUkxJTgorCitjb25maWcgUElOQ1RSTF9CRVJMSU5fQkcyQ0QKKwlib29sCisJc2VsZWN0IFBJTkNUUkxfQkVSTElOCisKK2NvbmZpZyBQSU5DVFJMX0JFUkxJTl9CRzJRCisJYm9vbAorCXNlbGVjdCBQSU5DVFJMX0JFUkxJTgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2Jlcmxpbi9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMGM2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitvYmotJChDT05GSUdfUElOQ1RSTF9CRVJMSU4pCQkrPSBiZXJsaW4ubworb2JqLSQoQ09ORklHX1BJTkNUUkxfQkVSTElOX0JHMikJKz0gYmVybGluLWJnMi5vCitvYmotJChDT05GSUdfUElOQ1RSTF9CRVJMSU5fQkcyQ0QpCSs9IGJlcmxpbi1iZzJjZC5vCitvYmotJChDT05GSUdfUElOQ1RSTF9CRVJMSU5fQkcyUSkJKz0gYmVybGluLWJnMnEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2Jlcmxpbi9iZXJsaW4tYmcyLmMgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL2Jlcmxpbi1iZzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Q0ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL2Jlcmxpbi9iZXJsaW4tYmcyLmMKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBNYXJ2ZWxsIEJlcmxpbiBCRzIgcGluY3RybCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogQW50b2luZSBUw4PCqW5hcnQgPGFudG9pbmUudGVuYXJ0QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgImJlcmxpbi5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJlcmxpbl9kZXNjX2dyb3VwIGJlcmxpbjJfc29jX3BpbmN0cmxfZ3JvdXBzW10gPSB7CisJLyogRyAqLworCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMCIsIDB4MDAsIDB4MSwgMHgwMCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAic3BpMSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMSIsIDB4MDAsIDB4MiwgMHgwMSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAic3BpMSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgInVzYjEiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcyIiwgMHgwMCwgMHgyLCAweDAyLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTEiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAicHdtIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczAiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkczIiwgMHgwMCwgMHgyLCAweDA0LAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJzb2MiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3BpMSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczEiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkc0IiwgMHgwMCwgMHgyLCAweDA2LAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJzcGkxIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAicHdtIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHNSIsIDB4MDAsIDB4MywgMHgwOCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzdHMxIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImV0IiksCisJCS8qCisJCSAqIE1vZGUgMHgzIG11eCBpMnMyIG1jbGsgKmFuZCogaTJzMyBtY2xrOgorCQkgKiBhZGQgdHdvIGZ1bmN0aW9ucyBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIG90aGVyIGdyb3VwcworCQkgKiB3aXRoaW4gdGhlIHNhbWUgc3Vibm9kZSBpbiB0aGUgZGV2aWNlIHRyZWUKKwkJICovCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczIiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiaTJzMyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzYiLCAweDAwLCAweDIsIDB4MGIsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3RzMCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJldCIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzciLCAweDAwLCAweDMsIDB4MGQsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3RzMCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJldCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJ2ZGFjIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHOCIsIDB4MDAsIDB4MywgMHgxMCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzZDAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZXQiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAidXNiMF9kYmciKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAic2F0YV9kYmciKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAidXNiMV9kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkc5IiwgMHgwMCwgMHgzLCAweDEzLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNkMCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJldCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJ1c2IwX2RiZyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJzYXRhX2RiZyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDcsICJ1c2IxX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzEwIiwgMHgwMCwgMHgyLCAweDE2LAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJzb2MiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAidHdzaTAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJwdHAiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxMSIsIDB4MDAsIDB4MiwgMHgxOCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAic29jIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInR3c2kxIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiZWRkYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzEyIiwgMHgwMCwgMHgzLCAweDFhLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJzdHMyIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNhdGEiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAic2QxIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgInVzYjBfZGJnIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInN0czEiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAidXNiMV9kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxMyIsIDB4MDQsIDB4MywgMHgwMCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzYXRhIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgInNkMSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJ1c2IwX2RiZyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJzdHMxIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NywgInVzYjFfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTQiLCAweDA0LCAweDEsIDB4MDMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTUiLCAweDA0LCAweDIsIDB4MDQsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZXQiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAib3NjbyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzE2IiwgMHgwNCwgMHgzLCAweDA2LAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2aW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZnAiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxNyIsIDB4MDQsIDB4MywgMHgwOSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdmlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImZwIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTgiLCAweDA0LCAweDEsIDB4MGMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgInBsbCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJpMnMwIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTkiLCAweDA0LCAweDEsIDB4MGQsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImkyczAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAicHdtIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjAiLCAweDA0LCAweDEsIDB4MGUsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgInNwZGlmIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImFyYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzIxIiwgMHgwNCwgMHgzLCAweDBmLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2aW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZnAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiYWRhY19kYmciKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAicGRtX2EiKSwJLyogZ3BpbzE3Li4xOSxwZG0gKi8KKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAicGRtX2IiKSksCS8qIGdwaW8xMi4uMTQscGRtICovCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcyMiIsIDB4MDQsIDB4MywgMHgxMiwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdjAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZnAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAidHdzaTAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAicHdtIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjMiLCAweDA0LCAweDMsIDB4MTUsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgInZjbGtpIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2MCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJmcCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJpMnMwIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInB3bSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDcsICJwZG0iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcyNCIsIDB4MDQsIDB4MiwgMHgxOCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiaTJzMiIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJpMnMxIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjUiLCAweDA0LCAweDIsIDB4MWEsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAibmFuZCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJpMnMyIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjYiLCAweDA0LCAweDEsIDB4MWMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgIm5hbmQiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiZW1tYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzI3IiwgMHgwNCwgMHgxLCAweDFkLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgIm5hbmQiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcyOCIsIDB4MDQsIDB4MiwgMHgxZSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZHZvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgInNwIikpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZXJsaW5fZGVzY19ncm91cCBiZXJsaW4yX3N5c21ncl9waW5jdHJsX2dyb3Vwc1tdID0geworCS8qIEdTTSAqLworCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00wIiwgMHg0MCwgMHgyLCAweDAwLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTIiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZXRoMSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMSIsIDB4NDAsIDB4MiwgMHgwMiwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzcGkyIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImV0aDEiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTIiLCAweDQwLCAweDIsIDB4MDQsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgInR3c2kyIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTIiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTMiLCAweDQwLCAweDIsIDB4MDYsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAidWFydDAiKSwJLyogQ1RTL1JUUyAqLworCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJ1YXJ0MiIpLAkvKiBSWC9UWCAqLworCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJ0d3NpMiIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNNCIsIDB4NDAsIDB4MiwgMHgwOCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAidWFydDAiKSwJLyogUlgvVFggKi8KKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaXJkYTAiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTUiLCAweDQwLCAweDIsIDB4MGEsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAidWFydDEiKSwJLyogUlgvVFggKi8KKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiaXJkYTEiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAidHdzaTMiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTYiLCAweDQwLCAweDIsIDB4MGMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3BpMiIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJjbGtpIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU003IiwgMHg0MCwgMHgxLCAweDBlLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImhkbWkiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTgiLCAweDQwLCAweDEsIDB4MGYsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaGRtaSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNOSIsIDB4NDAsIDB4MSwgMHgxMCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJsZWQiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTEwIiwgMHg0MCwgMHgxLCAweDExLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImxlZCIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMTEiLCAweDQwLCAweDEsIDB4MTIsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAibGVkIikpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZXJsaW5fcGluY3RybF9kZXNjIGJlcmxpbjJfc29jX3BpbmN0cmxfZGF0YSA9IHsKKwkuZ3JvdXBzID0gYmVybGluMl9zb2NfcGluY3RybF9ncm91cHMsCisJLm5ncm91cHMgPSBBUlJBWV9TSVpFKGJlcmxpbjJfc29jX3BpbmN0cmxfZ3JvdXBzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmVybGluX3BpbmN0cmxfZGVzYyBiZXJsaW4yX3N5c21ncl9waW5jdHJsX2RhdGEgPSB7CisJLmdyb3VwcyA9IGJlcmxpbjJfc3lzbWdyX3BpbmN0cmxfZ3JvdXBzLAorCS5uZ3JvdXBzID0gQVJSQVlfU0laRShiZXJsaW4yX3N5c21ncl9waW5jdHJsX2dyb3VwcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiZXJsaW4yX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMi1jaGlwLWN0cmwiLAorCQkuZGF0YSA9ICZiZXJsaW4yX3NvY19waW5jdHJsX2RhdGEKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLXN5c3RlbS1jdHJsIiwKKwkJLmRhdGEgPSAmYmVybGluMl9zeXNtZ3JfcGluY3RybF9kYXRhCisJfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJlcmxpbjJfcGluY3RybF9tYXRjaCk7CisKK3N0YXRpYyBpbnQgYmVybGluMl9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2ggPQorCQlvZl9tYXRjaF9kZXZpY2UoYmVybGluMl9waW5jdHJsX21hdGNoLCAmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqcm1jb25maWc7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXJtY29uZmlnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcm1jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJtY29uZmlnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJcm1jb25maWctPnJlZ19iaXRzID0gMzIsCisJcm1jb25maWctPnZhbF9iaXRzID0gMzIsCisJcm1jb25maWctPnJlZ19zdHJpZGUgPSA0LAorCXJtY29uZmlnLT5tYXhfcmVnaXN0ZXIgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oJnBkZXYtPmRldiwgYmFzZSwgcm1jb25maWcpOworCWlmIChJU19FUlIocmVnbWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVnbWFwKTsKKworCXJldHVybiBiZXJsaW5fcGluY3RybF9wcm9iZShwZGV2LCBtYXRjaC0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJlcmxpbjJfcGluY3RybF9kcml2ZXIgPSB7CisJLnByb2JlCT0gYmVybGluMl9waW5jdHJsX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImJlcmxpbi1iZzItcGluY3RybCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBiZXJsaW4yX3BpbmN0cmxfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJlcmxpbjJfcGluY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBbnRvaW5lIFTDg8KpbmFydCA8YW50b2luZS50ZW5hcnRAZnJlZS1lbGVjdHJvbnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIEJlcmxpbiBCRzIgcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vYmVybGluLWJnMmNkLmMgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL2Jlcmxpbi1iZzJjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDU4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL2Jlcmxpbi1iZzJjZC5jCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogTWFydmVsbCBCZXJsaW4gQkcyQ0QgcGluY3RybCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogQW50b2luZSBUw4PCqW5hcnQgPGFudG9pbmUudGVuYXJ0QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgImJlcmxpbi5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJlcmxpbl9kZXNjX2dyb3VwIGJlcmxpbjJjZF9zb2NfcGluY3RybF9ncm91cHNbXSA9IHsKKwkvKiBHICovCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcwIiwgMHgwMCwgMHgxLCAweDAwLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJqdGFnIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAibGVkIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgInB3bSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzEiLCAweDAwLCAweDIsIDB4MDEsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic2QwIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgInVzYjBfZGJnIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NywgInVzYjFfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMiIsIDB4MDAsIDB4MiwgMHgwMiwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzZDAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZmUiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAicGxsIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgInVzYjBfZGJnIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NywgInVzYjFfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMyIsIDB4MDAsIDB4MiwgMHgwNCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzZDAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAidHdzaTIiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAicGxsIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgImZlIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgInVzYjBfZGJnIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NywgInVzYjFfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHNCIsIDB4MDAsIDB4MiwgMHgwNiwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzZDAiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAidHdzaTMiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAicGxsIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInB3bSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDYsICJ1c2IwX2RiZyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDcsICJ1c2IxX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzUiLCAweDAwLCAweDMsIDB4MDgsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic2QwIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgInR3c2kzIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImFyYyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJwd20iKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg2LCAidXNiMF9kYmciKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAidXNiMV9kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkc2IiwgMHgwMCwgMHgyLCAweDBiLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJ1YXJ0MCIpLAkvKiBSWC9UWCAqLworCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHNyIsIDB4MDAsIDB4MywgMHgwZCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZWRkYyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJ0d3NpMSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHOCIsIDB4MDAsIDB4MywgMHgxMCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAic3MwIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkc5IiwgMHgwMCwgMHgzLCAweDEzLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTEiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAidHdzaTAiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxMCIsIDB4MDAsIDB4MiwgMHgxNiwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAic3BpMSIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTEiLCAweDAwLCAweDIsIDB4MTgsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgInNwaTEiKSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiZ3BpbyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzEyIiwgMHgwMCwgMHgzLCAweDFhLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJ1c2IxIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxMyIsIDB4MDQsIDB4MywgMHgwMCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAibmFuZCIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJ1c2IwX2RiZyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJ1c2IxX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzE0IiwgMHgwNCwgMHgxLCAweDAzLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJuYW5kIiksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxNSIsIDB4MDQsIDB4MiwgMHgwNCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAianRhZyIpLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTYiLCAweDA0LCAweDMsIDB4MDYsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTciLCAweDA0LCAweDMsIDB4MDksCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTgiLCAweDA0LCAweDEsIDB4MGMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTkiLCAweDA0LCAweDEsIDB4MGQsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjAiLCAweDA0LCAweDEsIDB4MGUsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjEiLCAweDA0LCAweDMsIDB4MGYsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjIiLCAweDA0LCAweDMsIDB4MTIsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjMiLCAweDA0LCAweDMsIDB4MTUsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjQiLCAweDA0LCAweDIsIDB4MTgsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjUiLCAweDA0LCAweDIsIDB4MWEsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjYiLCAweDA0LCAweDEsIDB4MWMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjciLCAweDA0LCAweDEsIDB4MWQsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjgiLCAweDA0LCAweDIsIDB4MWUsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZXJsaW5fZGVzY19ncm91cCBiZXJsaW4yY2Rfc3lzbWdyX3BpbmN0cmxfZ3JvdXBzW10gPSB7CisJLyogR1NNICovCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTAiLCAweDQwLCAweDIsIDB4MDAsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00xIiwgMHg0MCwgMHgyLCAweDAyLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTl9VTktOT1dOKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMiIsIDB4NDAsIDB4MiwgMHgwNCwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT05fVU5LTk9XTiksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTMiLCAweDQwLCAweDIsIDB4MDYsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU000IiwgMHg0MCwgMHgyLCAweDA4LAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTl9VTktOT1dOKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNNSIsIDB4NDAsIDB4MiwgMHgwYSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT05fVU5LTk9XTiksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTYiLCAweDQwLCAweDIsIDB4MGMsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU003IiwgMHg0MCwgMHgxLCAweDBlLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTl9VTktOT1dOKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNOCIsIDB4NDAsIDB4MSwgMHgwZiwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT05fVU5LTk9XTiksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTkiLCAweDQwLCAweDEsIDB4MTAsCisJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OX1VOS05PV04pLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00xMCIsIDB4NDAsIDB4MSwgMHgxMSwKKwkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT05fVU5LTk9XTiksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTExIiwgMHg0MCwgMHgxLCAweDEyLAorCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTl9VTktOT1dOKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmVybGluX3BpbmN0cmxfZGVzYyBiZXJsaW4yY2Rfc29jX3BpbmN0cmxfZGF0YSA9IHsKKwkuZ3JvdXBzID0gYmVybGluMmNkX3NvY19waW5jdHJsX2dyb3VwcywKKwkubmdyb3VwcyA9IEFSUkFZX1NJWkUoYmVybGluMmNkX3NvY19waW5jdHJsX2dyb3VwcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJlcmxpbl9waW5jdHJsX2Rlc2MgYmVybGluMmNkX3N5c21ncl9waW5jdHJsX2RhdGEgPSB7CisJLmdyb3VwcyA9IGJlcmxpbjJjZF9zeXNtZ3JfcGluY3RybF9ncm91cHMsCisJLm5ncm91cHMgPSBBUlJBWV9TSVpFKGJlcmxpbjJjZF9zeXNtZ3JfcGluY3RybF9ncm91cHMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmVybGluMmNkX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLWNoaXAtY3RybCIsCisJCS5kYXRhID0gJmJlcmxpbjJjZF9zb2NfcGluY3RybF9kYXRhCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLXN5c3RlbS1jdHJsIiwKKwkJLmRhdGEgPSAmYmVybGluMmNkX3N5c21ncl9waW5jdHJsX2RhdGEKKwl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYmVybGluMmNkX3BpbmN0cmxfbWF0Y2gpOworCitzdGF0aWMgaW50IGJlcmxpbjJjZF9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2ggPQorCQlvZl9tYXRjaF9kZXZpY2UoYmVybGluMmNkX3BpbmN0cmxfbWF0Y2gsICZwZGV2LT5kZXYpOworCXN0cnVjdCByZWdtYXBfY29uZmlnICpybWNvbmZpZzsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJcm1jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpybWNvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghcm1jb25maWcpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwliYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZSk7CisKKwlybWNvbmZpZy0+cmVnX2JpdHMgPSAzMiwKKwlybWNvbmZpZy0+dmFsX2JpdHMgPSAzMiwKKwlybWNvbmZpZy0+cmVnX3N0cmlkZSA9IDQsCisJcm1jb25maWctPm1heF9yZWdpc3RlciA9IHJlc291cmNlX3NpemUocmVzKTsKKworCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbygmcGRldi0+ZGV2LCBiYXNlLCBybWNvbmZpZyk7CisJaWYgKElTX0VSUihyZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihyZWdtYXApOworCisJcmV0dXJuIGJlcmxpbl9waW5jdHJsX3Byb2JlKHBkZXYsIG1hdGNoLT5kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmVybGluMmNkX3BpbmN0cmxfZHJpdmVyID0geworCS5wcm9iZQk9IGJlcmxpbjJjZF9waW5jdHJsX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImJlcmxpbi1iZzJjZC1waW5jdHJsIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGJlcmxpbjJjZF9waW5jdHJsX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiZXJsaW4yY2RfcGluY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBbnRvaW5lIFTDg8KpbmFydCA8YW50b2luZS50ZW5hcnRAZnJlZS1lbGVjdHJvbnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIEJlcmxpbiBCRzJDRCBwaW5jdHJsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2Jlcmxpbi9iZXJsaW4tYmcycS5jIGIvZHJpdmVycy9waW5jdHJsL2Jlcmxpbi9iZXJsaW4tYmcycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmY2Y5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL2Jlcmxpbi1iZzJxLmMKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBNYXJ2ZWxsIEJlcmxpbiBCRzJRIHBpbmN0cmwgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogQW50b2luZSBUw4PCqW5hcnQgPGFudG9pbmUudGVuYXJ0QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgImJlcmxpbi5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJlcmxpbl9kZXNjX2dyb3VwIGJlcmxpbjJxX3NvY19waW5jdHJsX2dyb3Vwc1tdID0geworCS8qIEcgKi8KKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzAiLCAweDE4LCAweDMsIDB4MDAsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJuYW5kIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJtbWMiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxIiwgMHgxOCwgMHgzLCAweDAzLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAibmFuZCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzIiLCAweDE4LCAweDMsIDB4MDYsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJhcmMiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImx2ZHMiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkczIiwgMHgxOCwgMHgzLCAweDA5LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiaTJzMiIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAibHZkcyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzQiLCAweDE4LCAweDMsIDB4MGMsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJwbGwiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNkMCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAicmdtaWkiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NSwgInNhdGFfZGJnIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDYsICJ1c2IwX2RiZyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAidXNiMV9kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkc1IiwgMHgxOCwgMHgzLCAweDBmLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic2QwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJyZ21paSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg1LCAic2F0YV9kYmciKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgInVzYjBfZGJnIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDcsICJ1c2IxX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzYiLCAweDE4LCAweDMsIDB4MTIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJqdGFnIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJ0d3NpMCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzciLCAweDE4LCAweDMsIDB4MTUsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJqdGFnIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJ0d3NpMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiZWRkYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzgiLCAweDE4LCAweDMsIDB4MTgsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJzcGkxIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHOSIsIDB4MTgsIDB4MywgMHgxYiwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgInNwaTEiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NSwgInNhdGEiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxMCIsIDB4MWMsIDB4MywgMHgwMCwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTEiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInB3bSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg1LCAic2F0YSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzExIiwgMHgxYywgMHgzLCAweDAzLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAianRhZyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3BpMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiaTJzMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAicHdtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDUsICJzYXRhIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTIiLCAweDFjLCAweDMsIDB4MDYsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhZ2MiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxMyIsIDB4MWMsIDB4MywgMHgwOSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInN0czEiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgInJnbWlpIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDYsICJ1c2IwX2RiZyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAidXNiMV9kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxNCIsIDB4MWMsIDB4MywgMHgwYywKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInN0czAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInN0czEiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgInVzYjBfZGJnIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDcsICJ1c2IxX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzE1IiwgMHgxYywgMHgzLCAweDBmLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3RzMCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAic3RzMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg1LCAidmRhYyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg2LCAidXNiMF9kYmciKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NywgInVzYjFfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTYiLCAweDFjLCAweDMsIDB4MTIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzdHMwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJzdHMxIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDUsICJvc2NvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDYsICJ1c2IwX2RiZyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg3LCAidXNiMV9kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcxNyIsIDB4MWMsIDB4MywgMHgxNSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgInJnbWlpIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJzcGRpZiIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAic3RzMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg2LCAidXNiMF9kYmciKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NywgInVzYjFfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMTgiLCAweDFjLCAweDMsIDB4MTgsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJyZ21paSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiaTJzMiIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAic3RzMSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzE5IiwgMHgxYywgMHgzLCAweDFiLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAicmdtaWkiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczMiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInN0czEiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NSwgIm9zY28iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcyMCIsIDB4MjAsIDB4MywgMHgwMCwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImNhbSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiZGVtb2QiKSwKKwkJCS8qCisJCQkgKiBNb2RlIDB4NCBtdXggdXNiMl9kYmcgKmFuZCogdXNiM19kYmc6CisJCQkgKiBhZGQgdHdvIGZ1bmN0aW9ucyBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIG90aGVyIGdyb3VwcworCQkJICogd2l0aGluIHRoZSBzYW1lIHN1Ym5vZGUgaW4gdGhlIGRldmljZSB0cmVlCisJCQkgKi8KKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInVzYjJfZGJnIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJ1c2IzX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzIxIiwgMHgyMCwgMHgzLCAweDAzLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiY2FtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzdHMyIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDMsICJkZW1vZCIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzIyIiwgMHgyMCwgMHgzLCAweDA2LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiY2FtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjMiLCAweDIwLCAweDMsIDB4MDksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImF2aWYiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInVzYjJfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjQiLCAweDIwLCAweDMsIDB4MGMsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImRlbW9kIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJ1c2IyX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzI1IiwgMHgyMCwgMHgzLCAweDBmLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiY2FtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJ2Z2EiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImF2aWYiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInVzYjJfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjYiLCAweDIwLCAweDMsIDB4MTIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImx2ZHMiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkcyNyIsIDB4MjAsIDB4MywgMHgxNSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImNhbSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiYWdjIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjgiLCAweDIwLCAweDMsIDB4MTgsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImF2aWYiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInVzYjJfZGJnIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMjkiLCAweDIwLCAweDMsIDB4MWIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNjcmQwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMzAiLCAweDI0LCAweDMsIDB4MDAsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNjcmQxIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJncGlvIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHMzEiLCAweDI0LCAweDMsIDB4MDMsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJjYW0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNkMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZ3BpbyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiRzMyIiwgMHgyNCwgMHgzLCAweDA2LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiY2FtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzZDEiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSksCisJLyogR0FWICovCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjAiLCAweDI0LCAweDMsIDB4MDksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJmcCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAibHZkcyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR0FWMSIsIDB4MjQsIDB4MywgMHgwYywKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImF2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImZwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJ2Z2EiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjIiLCAweDI0LCAweDMsIDB4MGYsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJmcCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAiaTJzMyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAicGRtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDYsICJhZGFjIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHQVYzIiwgMHgyNCwgMHgzLCAweDEyLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiZHZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZnAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczMiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgImFkYWMiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjQiLCAweDI0LCAweDMsIDB4MTUsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJmcCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAiaTJzMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg2LCAiYWRhYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR0FWNSIsIDB4MjQsIDB4MywgMHgxOCwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImF2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImZwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJzcGRpZiIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR0FWNiIsIDB4MjQsIDB4MywgMHgxYiwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImF2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImZwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJpMnMyIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHQVY3IiwgMHgyOCwgMHgzLCAweDAwLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiZHZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZnAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgImkyczMiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjgiLCAweDI4LCAweDMsIDB4MDMsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdjAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImZwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJwd20iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjkiLCAweDI4LCAweDMsIDB4MDYsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJkdjAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImZwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJwd20iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjEwIiwgMHgyOCwgMHgzLCAweDA5LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiZHYwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJmcCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAiYWdjIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHQVYxMSIsIDB4MjgsIDB4MywgMHgwYywKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImF2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImR2MCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZnAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgImkyczAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NCwgInB3bSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg1LCAidmNsa2kiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjEyIiwgMHgyOCwgMHgzLCAweDBmLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaTJzMiIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiaTJzMSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR0FWMTMiLCAweDI4LCAweDMsIDB4MTIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJpMnMyIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHQVYxNCIsIDB4MjgsIDB4MywgMHgxNSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImF2aW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImkyczIiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImkyczEiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjE1IiwgMHgyOCwgMHgzLCAweDE4LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaTJzMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg2LCAiZGFjX2RiZyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR0FWMTYiLCAweDI4LCAweDMsIDB4MWIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJpMnMwIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJpMnMxIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJpMnMzIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDUsICJwZG0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgImRhY19kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjE3IiwgMHgyYywgMHgzLCAweDAwLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaTJzMCIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiaTJzMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAicHdtIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDQsICJpMnMzIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDUsICJwZG0iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4NiwgImRhY19kYmciKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdBVjE4IiwgMHgyYywgMHgzLCAweDAzLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiYXZpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3BkaWYiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImFyYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR0FWMTkiLCAweDJjLCAweDMsIDB4MDYsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJhdmlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzcGRpZiIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg0LCAiaTJzMyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHg1LCAicGRtIikpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZXJsaW5fZGVzY19ncm91cCBiZXJsaW4ycV9zeXNtZ3JfcGluY3RybF9ncm91cHNbXSA9IHsKKwkvKiBHU00gKi8KKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMCIsIDB4NDAsIDB4MiwgMHgwMCwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTIiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImV0aDEiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTEiLCAweDQwLCAweDIsIDB4MDIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJzcGkyIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJldGgxIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00yIiwgMHg0MCwgMHgyLCAweDA0LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAic3BpMiIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAiZWRkYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMyIsIDB4NDAsIDB4MiwgMHgwNiwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInNwaTIiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImVkZGMiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTQiLCAweDQwLCAweDEsIDB4MDgsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJoZG1pIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU001IiwgMHg0MCwgMHgxLCAweDA5LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaGRtaSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNNiIsIDB4NDAsIDB4MSwgMHgwYSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImhkbWkiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTciLCAweDQwLCAweDEsIDB4MGIsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJoZG1pIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU004IiwgMHg0MCwgMHgxLCAweDBjLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaGRtaSIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNOSIsIDB4NDAsIDB4MSwgMHgwZCwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImhkbWkiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTEwIiwgMHg0MCwgMHgxLCAweDBlLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAibGVkIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00xMSIsIDB4NDAsIDB4MSwgMHgwZiwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImxlZCIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMTIiLCAweDQwLCAweDIsIDB4MTAsCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJ1YXJ0MCIpLCAvKiBSWC9UWCAqLworCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiaXJkYTAiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTEzIiwgMHg0MCwgMHgyLCAweDEyLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAidWFydDAiKSwgLyogQ1RTL1JUUyAqLworCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgyLCAidWFydDEiKSwgLyogUlgvVFggKi8KKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MywgInR3c2kyIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00xNCIsIDB4NDAsIDB4MiwgMHgxNCwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgInVhcnQxIiksIC8qIFJYL1RYICovCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDIsICJpcmRhMSIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgzLCAidHdzaTMiKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTE1IiwgMHg0MCwgMHgyLCAweDE2LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAicHdyIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJsZWQiKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MiwgImdwaW8iKSksCisJQkVSTElOX1BJTkNUUkxfR1JPVVAoIkdTTTE2IiwgMHg0MCwgMHgxLCAweDE4LAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgwLCAiZ3BpbyIpLAorCQkJQkVSTElOX1BJTkNUUkxfRlVOQ1RJT04oMHgxLCAiZWRkYyIpKSwKKwlCRVJMSU5fUElOQ1RSTF9HUk9VUCgiR1NNMTciLCAweDQwLCAweDEsIDB4MTksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDAsICJncGlvIiksCisJCQlCRVJMSU5fUElOQ1RSTF9GVU5DVElPTigweDEsICJlZGRjIikpLAorCUJFUkxJTl9QSU5DVFJMX0dST1VQKCJHU00xOCIsIDB4NDAsIDB4MSwgMHgxYSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MCwgImdwaW8iKSwKKwkJCUJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKDB4MSwgImVkZGMiKSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJlcmxpbl9waW5jdHJsX2Rlc2MgYmVybGluMnFfc29jX3BpbmN0cmxfZGF0YSA9IHsKKwkuZ3JvdXBzID0gYmVybGluMnFfc29jX3BpbmN0cmxfZ3JvdXBzLAorCS5uZ3JvdXBzID0gQVJSQVlfU0laRShiZXJsaW4ycV9zb2NfcGluY3RybF9ncm91cHMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiZXJsaW5fcGluY3RybF9kZXNjIGJlcmxpbjJxX3N5c21ncl9waW5jdHJsX2RhdGEgPSB7CisJLmdyb3VwcyA9IGJlcmxpbjJxX3N5c21ncl9waW5jdHJsX2dyb3VwcywKKwkubmdyb3VwcyA9IEFSUkFZX1NJWkUoYmVybGluMnFfc3lzbWdyX3BpbmN0cmxfZ3JvdXBzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJlcmxpbjJxX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMnEtY2hpcC1jdHJsIiwKKwkJLmRhdGEgPSAmYmVybGluMnFfc29jX3BpbmN0cmxfZGF0YSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1zeXN0ZW0tY3RybCIsCisJCS5kYXRhID0gJmJlcmxpbjJxX3N5c21ncl9waW5jdHJsX2RhdGEsCisJfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJlcmxpbjJxX3BpbmN0cmxfbWF0Y2gpOworCitzdGF0aWMgaW50IGJlcmxpbjJxX3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCA9CisJCW9mX21hdGNoX2RldmljZShiZXJsaW4ycV9waW5jdHJsX21hdGNoLCAmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqcm1jb25maWc7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCXJtY29uZmlnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcm1jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJtY29uZmlnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJcm1jb25maWctPnJlZ19iaXRzID0gMzIsCisJcm1jb25maWctPnZhbF9iaXRzID0gMzIsCisJcm1jb25maWctPnJlZ19zdHJpZGUgPSA0LAorCXJtY29uZmlnLT5tYXhfcmVnaXN0ZXIgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oJnBkZXYtPmRldiwgYmFzZSwgcm1jb25maWcpOworCWlmIChJU19FUlIocmVnbWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVnbWFwKTsKKworCXJldHVybiBiZXJsaW5fcGluY3RybF9wcm9iZShwZGV2LCBtYXRjaC0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJlcmxpbjJxX3BpbmN0cmxfZHJpdmVyID0geworCS5wcm9iZQk9IGJlcmxpbjJxX3BpbmN0cmxfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiYmVybGluLWJnMnEtcGluY3RybCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBiZXJsaW4ycV9waW5jdHJsX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiZXJsaW4ycV9waW5jdHJsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkFudG9pbmUgVMODwqluYXJ0IDxhbnRvaW5lLnRlbmFydEBmcmVlLWVsZWN0cm9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgQmVybGluIEJHMlEgcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vYmVybGluLmMgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL2Jlcmxpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZjVkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvYmVybGluL2Jlcmxpbi5jCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICogTWFydmVsbCBCZXJsaW4gU29DIHBpbmN0cmwgY29yZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWFydmVsbCBUZWNobm9sb2d5IEdyb3VwIEx0ZC4KKyAqCisgKiBBbnRvaW5lIFTDg8KpbmFydCA8YW50b2luZS50ZW5hcnRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5tdXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICIuLi9jb3JlLmgiCisjaW5jbHVkZSAiLi4vcGluY3RybC11dGlscy5oIgorI2luY2x1ZGUgImJlcmxpbi5oIgorCitzdHJ1Y3QgYmVybGluX3BpbmN0cmwgeworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJY29uc3Qgc3RydWN0IGJlcmxpbl9waW5jdHJsX2Rlc2MgKmRlc2M7CisJc3RydWN0IGJlcmxpbl9waW5jdHJsX2Z1bmN0aW9uICpmdW5jdGlvbnM7CisJdW5zaWduZWQgbmZ1bmN0aW9uczsKKwlzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdHJsX2RldjsKK307CisKK3N0YXRpYyBpbnQgYmVybGluX3BpbmN0cmxfZ2V0X2dyb3VwX2NvdW50KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0cmxfZGV2KQoreworCXN0cnVjdCBiZXJsaW5fcGluY3RybCAqcGN0cmwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RybF9kZXYpOworCisJcmV0dXJuIHBjdHJsLT5kZXNjLT5uZ3JvdXBzOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYmVybGluX3BpbmN0cmxfZ2V0X2dyb3VwX25hbWUoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RybF9kZXYsCisJCQkJCQkgdW5zaWduZWQgZ3JvdXApCit7CisJc3RydWN0IGJlcmxpbl9waW5jdHJsICpwY3RybCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdHJsX2Rldik7CisKKwlyZXR1cm4gcGN0cmwtPmRlc2MtPmdyb3Vwc1tncm91cF0ubmFtZTsKK30KKworc3RhdGljIGludCBiZXJsaW5fcGluY3RybF9kdF9ub2RlX3RvX21hcChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdHJsX2RldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJIHN0cnVjdCBwaW5jdHJsX21hcCAqKm1hcCwKKwkJCQkJIHVuc2lnbmVkICpudW1fbWFwcykKK3sKKwlzdHJ1Y3QgYmVybGluX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0cmxfZGV2KTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwgKmdyb3VwX25hbWU7CisJdW5zaWduZWQgcmVzZXJ2ZWRfbWFwcyA9IDA7CisJaW50IHJldCwgbmdyb3VwczsKKworCSptYXAgPSBOVUxMOworCSpudW1fbWFwcyA9IDA7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAiZnVuY3Rpb24iLCAmZnVuY3Rpb25fbmFtZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBjdHJsLT5kZXYsCisJCQkibWlzc2luZyBmdW5jdGlvbiBwcm9wZXJ0eSBpbiBub2RlICVzXG4iLAorCQkJbm9kZS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5ncm91cHMgPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKG5vZGUsICJncm91cHMiKTsKKwlpZiAobmdyb3VwcyA8IDApIHsKKwkJZGV2X2VycihwY3RybC0+ZGV2LAorCQkJIm1pc3NpbmcgZ3JvdXBzIHByb3BlcnR5IGluIG5vZGUgJXNcbiIsCisJCQlub2RlLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gcGluY3RybF91dGlsc19yZXNlcnZlX21hcChwY3RybF9kZXYsIG1hcCwgJnJlc2VydmVkX21hcHMsCisJCQkJCW51bV9tYXBzLCBuZ3JvdXBzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocGN0cmwtPmRldiwgImNhbid0IHJlc2VydmUgbWFwOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF9zdHJpbmcobm9kZSwgImdyb3VwcyIsIHByb3AsIGdyb3VwX25hbWUpIHsKKwkJcmV0ID0gcGluY3RybF91dGlsc19hZGRfbWFwX211eChwY3RybF9kZXYsIG1hcCwgJnJlc2VydmVkX21hcHMsCisJCQkJCQludW1fbWFwcywgZ3JvdXBfbmFtZSwKKwkJCQkJCWZ1bmN0aW9uX25hbWUpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHBjdHJsLT5kZXYsICJjYW4ndCBhZGQgbWFwOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmVybGluX3BpbmN0cmxfZHRfZnJlZV9tYXAoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RybF9kZXYsCisJCQkJICAgICAgIHN0cnVjdCBwaW5jdHJsX21hcCAqbWFwLAorCQkJCSAgICAgICB1bnNpZ25lZCBubWFwcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBubWFwczsgaSsrKSB7CisJCWlmIChtYXBbaV0udHlwZSA9PSBQSU5fTUFQX1RZUEVfTVVYX0dST1VQKSB7CisJCQlrZnJlZShtYXBbaV0uZGF0YS5tdXguZ3JvdXApOworCisJCQkvKiBhIGZ1bmN0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIG11bHRpcGxlIGdyb3VwcyAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQlrZnJlZShtYXBbaV0uZGF0YS5tdXguZnVuY3Rpb24pOworCQl9CisJfQorCisJa2ZyZWUobWFwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX29wcyBiZXJsaW5fcGluY3RybF9vcHMgPSB7CisJLmdldF9ncm91cHNfY291bnQJPSAmYmVybGluX3BpbmN0cmxfZ2V0X2dyb3VwX2NvdW50LAorCS5nZXRfZ3JvdXBfbmFtZQkJPSAmYmVybGluX3BpbmN0cmxfZ2V0X2dyb3VwX25hbWUsCisJLmR0X25vZGVfdG9fbWFwCQk9ICZiZXJsaW5fcGluY3RybF9kdF9ub2RlX3RvX21hcCwKKwkuZHRfZnJlZV9tYXAJCT0gJmJlcmxpbl9waW5jdHJsX2R0X2ZyZWVfbWFwLAorfTsKKworc3RhdGljIGludCBiZXJsaW5fcGlubXV4X2dldF9mdW5jdGlvbnNfY291bnQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RybF9kZXYpCit7CisJc3RydWN0IGJlcmxpbl9waW5jdHJsICpwY3RybCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdHJsX2Rldik7CisKKwlyZXR1cm4gcGN0cmwtPm5mdW5jdGlvbnM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpiZXJsaW5fcGlubXV4X2dldF9mdW5jdGlvbl9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0cmxfZGV2LAorCQkJCQkJICAgdW5zaWduZWQgZnVuY3Rpb24pCit7CisJc3RydWN0IGJlcmxpbl9waW5jdHJsICpwY3RybCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdHJsX2Rldik7CisKKwlyZXR1cm4gcGN0cmwtPmZ1bmN0aW9uc1tmdW5jdGlvbl0ubmFtZTsKK30KKworc3RhdGljIGludCBiZXJsaW5fcGlubXV4X2dldF9mdW5jdGlvbl9ncm91cHMoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RybF9kZXYsCisJCQkJCSAgICAgdW5zaWduZWQgZnVuY3Rpb24sCisJCQkJCSAgICAgY29uc3QgY2hhciAqIGNvbnN0ICoqZ3JvdXBzLAorCQkJCQkgICAgIHVuc2lnbmVkICogY29uc3QgbnVtX2dyb3VwcykKK3sKKwlzdHJ1Y3QgYmVybGluX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0cmxfZGV2KTsKKworCSpncm91cHMgPSBwY3RybC0+ZnVuY3Rpb25zW2Z1bmN0aW9uXS5ncm91cHM7CisJKm51bV9ncm91cHMgPSBwY3RybC0+ZnVuY3Rpb25zW2Z1bmN0aW9uXS5uZ3JvdXBzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmVybGluX2Rlc2NfZnVuY3Rpb24gKgorYmVybGluX3BpbmN0cmxfZmluZF9mdW5jdGlvbl9ieV9uYW1lKHN0cnVjdCBiZXJsaW5fcGluY3RybCAqcGN0cmwsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYmVybGluX2Rlc2NfZ3JvdXAgKmdyb3VwLAorCQkJCSAgICAgY29uc3QgY2hhciAqZm5hbWUpCit7CisJc3RydWN0IGJlcmxpbl9kZXNjX2Z1bmN0aW9uICpmdW5jdGlvbiA9IGdyb3VwLT5mdW5jdGlvbnM7CisKKwl3aGlsZSAoZnVuY3Rpb24tPm5hbWUpIHsKKwkJaWYgKCFzdHJjbXAoZnVuY3Rpb24tPm5hbWUsIGZuYW1lKSkKKwkJCXJldHVybiBmdW5jdGlvbjsKKworCQlmdW5jdGlvbisrOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGJlcmxpbl9waW5tdXhfZW5hYmxlKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0cmxfZGV2LAorCQkJCXVuc2lnbmVkIGZ1bmN0aW9uLAorCQkJCXVuc2lnbmVkIGdyb3VwKQoreworCXN0cnVjdCBiZXJsaW5fcGluY3RybCAqcGN0cmwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RybF9kZXYpOworCWNvbnN0IHN0cnVjdCBiZXJsaW5fZGVzY19ncm91cCAqZ3JvdXBfZGVzYyA9IHBjdHJsLT5kZXNjLT5ncm91cHMgKyBncm91cDsKKwlzdHJ1Y3QgYmVybGluX3BpbmN0cmxfZnVuY3Rpb24gKmZ1bmMgPSBwY3RybC0+ZnVuY3Rpb25zICsgZnVuY3Rpb247CisJc3RydWN0IGJlcmxpbl9kZXNjX2Z1bmN0aW9uICpmdW5jdGlvbl9kZXNjID0KKwkJYmVybGluX3BpbmN0cmxfZmluZF9mdW5jdGlvbl9ieV9uYW1lKHBjdHJsLCBncm91cF9kZXNjLAorCQkJCQkJICAgICBmdW5jLT5uYW1lKTsKKwl1MzIgbWFzaywgdmFsOworCisJaWYgKCFmdW5jdGlvbl9kZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1hc2sgPSBHRU5NQVNLKGdyb3VwX2Rlc2MtPmxzYiArIGdyb3VwX2Rlc2MtPmJpdF93aWR0aCAtIDEsCisJCSAgICAgICBncm91cF9kZXNjLT5sc2IpOworCXZhbCA9IGZ1bmN0aW9uX2Rlc2MtPm11eHZhbCA8PCBncm91cF9kZXNjLT5sc2I7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBjdHJsLT5yZWdtYXAsIGdyb3VwX2Rlc2MtPm9mZnNldCwgbWFzaywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBpbm11eF9vcHMgYmVybGluX3Bpbm11eF9vcHMgPSB7CisJLmdldF9mdW5jdGlvbnNfY291bnQJPSAmYmVybGluX3Bpbm11eF9nZXRfZnVuY3Rpb25zX2NvdW50LAorCS5nZXRfZnVuY3Rpb25fbmFtZQk9ICZiZXJsaW5fcGlubXV4X2dldF9mdW5jdGlvbl9uYW1lLAorCS5nZXRfZnVuY3Rpb25fZ3JvdXBzCT0gJmJlcmxpbl9waW5tdXhfZ2V0X2Z1bmN0aW9uX2dyb3VwcywKKwkuZW5hYmxlCQkJPSAmYmVybGluX3Bpbm11eF9lbmFibGUsCit9OworCitzdGF0aWMgaW50IGJlcmxpbl9waW5jdHJsX2FkZF9mdW5jdGlvbihzdHJ1Y3QgYmVybGluX3BpbmN0cmwgKnBjdHJsLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBiZXJsaW5fcGluY3RybF9mdW5jdGlvbiAqZnVuY3Rpb24gPSBwY3RybC0+ZnVuY3Rpb25zOworCisJd2hpbGUgKGZ1bmN0aW9uLT5uYW1lKSB7CisJCWlmICghc3RyY21wKGZ1bmN0aW9uLT5uYW1lLCBuYW1lKSkgeworCQkJZnVuY3Rpb24tPm5ncm91cHMrKzsKKwkJCXJldHVybiAtRUVYSVNUOworCQl9CisJCWZ1bmN0aW9uKys7CisJfQorCisJZnVuY3Rpb24tPm5hbWUgPSBuYW1lOworCWZ1bmN0aW9uLT5uZ3JvdXBzID0gMTsKKworCXBjdHJsLT5uZnVuY3Rpb25zKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZXJsaW5fcGluY3RybF9idWlsZF9zdGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiZXJsaW5fcGluY3RybCAqcGN0cmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYmVybGluX2Rlc2NfZ3JvdXAgY29uc3QgKmRlc2NfZ3JvdXA7CisJc3RydWN0IGJlcmxpbl9kZXNjX2Z1bmN0aW9uIGNvbnN0ICpkZXNjX2Z1bmN0aW9uOworCWludCBpLCBtYXhfZnVuY3Rpb25zID0gMDsKKworCXBjdHJsLT5uZnVuY3Rpb25zID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwY3RybC0+ZGVzYy0+bmdyb3VwczsgaSsrKSB7CisJCWRlc2NfZ3JvdXAgPSBwY3RybC0+ZGVzYy0+Z3JvdXBzICsgaTsKKwkJLyogY29tcHV0ZSB0aGUgbWF4aXVtdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucyBhIGdyb3VwIGNhbiBoYXZlICovCisJCW1heF9mdW5jdGlvbnMgKz0gMSA8PCAoZGVzY19ncm91cC0+Yml0X3dpZHRoICsgMSk7CisJfQorCisJLyogd2Ugd2lsbCByZWFsbG9jYXRlIGxhdGVyICovCisJcGN0cmwtPmZ1bmN0aW9ucyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAorCQkJCQltYXhfZnVuY3Rpb25zICogc2l6ZW9mKCpwY3RybC0+ZnVuY3Rpb25zKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFwY3RybC0+ZnVuY3Rpb25zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHJlZ2lzdGVyIGFsbCBmdW5jdGlvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGN0cmwtPmRlc2MtPm5ncm91cHM7IGkrKykgeworCQlkZXNjX2dyb3VwID0gcGN0cmwtPmRlc2MtPmdyb3VwcyArIGk7CisJCWRlc2NfZnVuY3Rpb24gPSBkZXNjX2dyb3VwLT5mdW5jdGlvbnM7CisKKwkJd2hpbGUgKGRlc2NfZnVuY3Rpb24tPm5hbWUpIHsKKwkJCWJlcmxpbl9waW5jdHJsX2FkZF9mdW5jdGlvbihwY3RybCwgZGVzY19mdW5jdGlvbi0+bmFtZSk7CisJCQlkZXNjX2Z1bmN0aW9uKys7CisJCX0KKwl9CisKKwlwY3RybC0+ZnVuY3Rpb25zID0ga3JlYWxsb2MocGN0cmwtPmZ1bmN0aW9ucywKKwkJCQkgICAgcGN0cmwtPm5mdW5jdGlvbnMgKiBzaXplb2YoKnBjdHJsLT5mdW5jdGlvbnMpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKworCS8qIG1hcCBmdW5jdGlvbnMgdG8gdGhlaXJzIGdyb3VwcyAqLworCWZvciAoaSA9IDA7IGkgPCBwY3RybC0+ZGVzYy0+bmdyb3VwczsgaSsrKSB7CisJCWRlc2NfZ3JvdXAgPSBwY3RybC0+ZGVzYy0+Z3JvdXBzICsgaTsKKwkJZGVzY19mdW5jdGlvbiA9IGRlc2NfZ3JvdXAtPmZ1bmN0aW9uczsKKworCQl3aGlsZSAoZGVzY19mdW5jdGlvbi0+bmFtZSkgeworCQkJc3RydWN0IGJlcmxpbl9waW5jdHJsX2Z1bmN0aW9uCisJCQkJKmZ1bmN0aW9uID0gcGN0cmwtPmZ1bmN0aW9uczsKKwkJCWNvbnN0IGNoYXIgKipncm91cHM7CisJCQlib29sIGZvdW5kID0gZmFsc2U7CisKKwkJCXdoaWxlIChmdW5jdGlvbi0+bmFtZSkgeworCQkJCWlmICghc3RyY21wKGRlc2NfZnVuY3Rpb24tPm5hbWUsIGZ1bmN0aW9uLT5uYW1lKSkgeworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlmdW5jdGlvbisrOworCQkJfQorCisJCQlpZiAoIWZvdW5kKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoIWZ1bmN0aW9uLT5ncm91cHMpIHsKKwkJCQlmdW5jdGlvbi0+Z3JvdXBzID0KKwkJCQkJZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJCQkJCQkgICAgIGZ1bmN0aW9uLT5uZ3JvdXBzICogc2l6ZW9mKGNoYXIgKiksCisJCQkJCQkgICAgIEdGUF9LRVJORUwpOworCisJCQkJaWYgKCFmdW5jdGlvbi0+Z3JvdXBzKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKworCQkJZ3JvdXBzID0gZnVuY3Rpb24tPmdyb3VwczsKKwkJCXdoaWxlICgqZ3JvdXBzKQorCQkJCWdyb3VwcysrOworCisJCQkqZ3JvdXBzID0gZGVzY19ncm91cC0+bmFtZTsKKworCQkJZGVzY19mdW5jdGlvbisrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGluY3RybF9kZXNjIGJlcmxpbl9wY3RybF9kZXNjID0geworCS5uYW1lCQk9ICJiZXJsaW4tcGluY3RybCIsCisJLnBjdGxvcHMJPSAmYmVybGluX3BpbmN0cmxfb3BzLAorCS5wbXhvcHMJCT0gJmJlcmxpbl9waW5tdXhfb3BzLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK2ludCBiZXJsaW5fcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBiZXJsaW5fcGluY3RybF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGJlcmxpbl9waW5jdHJsICpwY3RybDsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJaW50IHJldDsKKworCXJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKCZwZGV2LT5kZXYsIE5VTEwpOworCWlmICghcmVnbWFwKQorCQlyZXR1cm4gUFRSX0VSUihyZWdtYXApOworCisJcGN0cmwgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBjdHJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY3RybCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY3RybCk7CisKKwlwY3RybC0+cmVnbWFwID0gcmVnbWFwOworCXBjdHJsLT5kZXYgPSAmcGRldi0+ZGV2OworCXBjdHJsLT5kZXNjID0gZGVzYzsKKworCXJldCA9IGJlcmxpbl9waW5jdHJsX2J1aWxkX3N0YXRlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgYnVpbGQgZHJpdmVyIHN0YXRlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwY3RybC0+cGN0cmxfZGV2ID0gcGluY3RybF9yZWdpc3RlcigmYmVybGluX3BjdHJsX2Rlc2MsIGRldiwgcGN0cmwpOworCWlmICghcGN0cmwtPnBjdHJsX2RldikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBwaW5jdHJsIGRyaXZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2Jlcmxpbi9iZXJsaW4uaCBiL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vYmVybGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhYTg0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9iZXJsaW4vYmVybGluLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIE1hcnZlbGwgQmVybGluIFNvQyBwaW5jdHJsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWFydmVsbCBUZWNobm9sb2d5IEdyb3VwIEx0ZC4KKyAqCisgKiBBbnRvaW5lIFTDg8KpbmFydCA8YW50b2luZS50ZW5hcnRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BJTkNUUkxfQkVSTElOX0gKKyNkZWZpbmUgX19QSU5DVFJMX0JFUkxJTl9ICisKK3N0cnVjdCBiZXJsaW5fZGVzY19mdW5jdGlvbiB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1OAkJbXV4dmFsOworfTsKKworc3RydWN0IGJlcmxpbl9kZXNjX2dyb3VwIHsKKwljb25zdCBjaGFyCQkJKm5hbWU7CisJdTgJCQkJb2Zmc2V0OworCXU4CQkJCWJpdF93aWR0aDsKKwl1OAkJCQlsc2I7CisJc3RydWN0IGJlcmxpbl9kZXNjX2Z1bmN0aW9uCSpmdW5jdGlvbnM7Cit9OworCitzdHJ1Y3QgYmVybGluX3BpbmN0cmxfZGVzYyB7CisJY29uc3Qgc3RydWN0IGJlcmxpbl9kZXNjX2dyb3VwCSpncm91cHM7CisJdW5zaWduZWQJCQluZ3JvdXBzOworfTsKKworc3RydWN0IGJlcmxpbl9waW5jdHJsX2Z1bmN0aW9uIHsKKwljb25zdCBjaGFyCSpuYW1lOworCWNvbnN0IGNoYXIJKipncm91cHM7CisJdW5zaWduZWQJbmdyb3VwczsKK307CisKKyNkZWZpbmUgQkVSTElOX1BJTkNUUkxfR1JPVVAoX25hbWUsIF9vZmZzZXQsIF93aWR0aCwgX2xzYiwgLi4uKQkJXAorCXsJCQkJCQkJCVwKKwkJLm5hbWUgPSBfbmFtZSwJCQkJCQlcCisJCS5vZmZzZXQgPSBfb2Zmc2V0LAkJCQkJXAorCQkuYml0X3dpZHRoID0gX3dpZHRoLAkJCQkJXAorCQkubHNiID0gX2xzYiwJCQkJCQlcCisJCS5mdW5jdGlvbnMgPSAoc3RydWN0IGJlcmxpbl9kZXNjX2Z1bmN0aW9uW10pewkJXAorCQkJX19WQV9BUkdTX18sIHsgfSB9LAkJCQlcCisJfQorCisjZGVmaW5lIEJFUkxJTl9QSU5DVFJMX0ZVTkNUSU9OKF9tdXh2YWwsIF9uYW1lKQkJXAorCXsJCQkJCQlcCisJCS5uYW1lID0gX25hbWUsCQkJCVwKKwkJLm11eHZhbCA9IF9tdXh2YWwsCQkJXAorCX0KKworI2RlZmluZSBCRVJMSU5fUElOQ1RSTF9GVU5DVElPTl9VTktOT1dOCQl7fQorCitpbnQgYmVybGluX3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSBjb25zdCBzdHJ1Y3QgYmVybGluX3BpbmN0cmxfZGVzYyAqZGVzYyk7CisKKyNlbmRpZiAvKiBfX1BJTkNUUkxfQkVSTElOX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9jb3JlLmMgYi9kcml2ZXJzL3BpbmN0cmwvY29yZS5jCmluZGV4IGMwZmU2MDkuLmUwOTQ3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9jb3JlLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2NvcmUuYwpAQCAtNDY4LDYgKzQ2OCw5IEBACiAJY29uc3Qgc3RydWN0IHBpbmN0cmxfb3BzICpwY3Rsb3BzID0gcGN0bGRldi0+ZGVzYy0+cGN0bG9wczsKIAlpbnQgZ3M7CiAKKwlpZiAoIXBjdGxvcHMtPmdldF9ncm91cF9waW5zKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWdzID0gcGluY3RybF9nZXRfZ3JvdXBfc2VsZWN0b3IocGN0bGRldiwgcGluX2dyb3VwKTsKIAlpZiAoZ3MgPCAwKQogCQlyZXR1cm4gZ3M7CkBAIC0xMzYyLDE1ICsxMzY1LDE2IEBACiAKIAlzZXFfcHV0cyhzLCAicmVnaXN0ZXJlZCBwaW4gZ3JvdXBzOlxuIik7CiAJd2hpbGUgKHNlbGVjdG9yIDwgbmdyb3VwcykgewotCQljb25zdCB1bnNpZ25lZCAqcGluczsKLQkJdW5zaWduZWQgbnVtX3BpbnM7CisJCWNvbnN0IHVuc2lnbmVkICpwaW5zID0gTlVMTDsKKwkJdW5zaWduZWQgbnVtX3BpbnMgPSAwOwogCQljb25zdCBjaGFyICpnbmFtZSA9IG9wcy0+Z2V0X2dyb3VwX25hbWUocGN0bGRldiwgc2VsZWN0b3IpOwogCQljb25zdCBjaGFyICpwbmFtZTsKLQkJaW50IHJldDsKKwkJaW50IHJldCA9IDA7CiAJCWludCBpOwogCi0JCXJldCA9IG9wcy0+Z2V0X2dyb3VwX3BpbnMocGN0bGRldiwgc2VsZWN0b3IsCi0JCQkJCSAgJnBpbnMsICZudW1fcGlucyk7CisJCWlmIChvcHMtPmdldF9ncm91cF9waW5zKQorCQkJcmV0ID0gb3BzLT5nZXRfZ3JvdXBfcGlucyhwY3RsZGV2LCBzZWxlY3RvciwKKwkJCQkJCSAgJnBpbnMsICZudW1fcGlucyk7CiAJCWlmIChyZXQpCiAJCQlzZXFfcHJpbnRmKHMsICIlcyBbRVJST1IgR0VUVElORyBQSU5TXVxuIiwKIAkJCQkgICBnbmFtZSk7CkBAIC0xNjk0LDggKzE2OTgsNyBAQAogCiAJaWYgKCFvcHMgfHwKIAkgICAgIW9wcy0+Z2V0X2dyb3Vwc19jb3VudCB8fAotCSAgICAhb3BzLT5nZXRfZ3JvdXBfbmFtZSB8fAotCSAgICAhb3BzLT5nZXRfZ3JvdXBfcGlucykKKwkgICAgIW9wcy0+Z2V0X2dyb3VwX25hbWUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG9wcy0+ZHRfbm9kZV90b19tYXAgJiYgIW9wcy0+ZHRfZnJlZV9tYXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvbXZlYnUvS2NvbmZpZyBiL2RyaXZlcnMvcGluY3RybC9tdmVidS9LY29uZmlnCmluZGV4IGNjMjk4ZmFkLi5kNmRkODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvbXZlYnUvS2NvbmZpZworKysgYi9kcml2ZXJzL3BpbmN0cmwvbXZlYnUvS2NvbmZpZwpAQCAtMzAsNCArMzAsOCBAQAogCWJvb2wKIAlzZWxlY3QgUElOQ1RSTF9NVkVCVQogCitjb25maWcgUElOQ1RSTF9PUklPTgorCWJvb2wKKwlzZWxlY3QgUElOQ1RSTF9NVkVCVQorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL212ZWJ1L01ha2VmaWxlIGIvZHJpdmVycy9waW5jdHJsL212ZWJ1L01ha2VmaWxlCmluZGV4IGJjMWI5ZjEuLmEwODE4ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9tdmVidS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BpbmN0cmwvbXZlYnUvTWFrZWZpbGUKQEAgLTUsMyArNSw0IEBACiBvYmotJChDT05GSUdfUElOQ1RSTF9BUk1BREFfMzc1KSArPSBwaW5jdHJsLWFybWFkYS0zNzUubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfQVJNQURBXzM4WCkgKz0gcGluY3RybC1hcm1hZGEtMzh4Lm8KIG9iai0kKENPTkZJR19QSU5DVFJMX0FSTUFEQV9YUCkgICs9IHBpbmN0cmwtYXJtYWRhLXhwLm8KK29iai0kKENPTkZJR19QSU5DVFJMX09SSU9OKSAgKz0gcGluY3RybC1vcmlvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvbXZlYnUvcGluY3RybC1vcmlvbi5jIGIvZHJpdmVycy9waW5jdHJsL212ZWJ1L3BpbmN0cmwtb3Jpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGExZTcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL212ZWJ1L3BpbmN0cmwtb3Jpb24uYwpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIE1hcnZlbGwgT3Jpb24gcGluY3RybCBkcml2ZXIgYmFzZWQgb24gbXZlYnUgcGluY3RybCBjb3JlCisgKgorICogQXV0aG9yOiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoZSBmaXJzdCAxNiBNUFAgcGlucyBvbiBPcmlvbiBhcmUgZWFzeSB0byBoYW5kbGU6IHRoZXkgYXJlCisgKiBjb25maWd1cmVkIHRocm91Z2ggMiBjb25zZWN1dGl2ZSByZWdpc3RlcnMsIGxvY2F0ZWQgYXQgdGhlIGJhc2UKKyAqIGFkZHJlc3Mgb2YgdGhlIE1QUCBkZXZpY2UuCisgKgorICogSG93ZXZlciB0aGUgbGFzdCA0IE1QUCBwaW5zIGFyZSBoYW5kbGVkIGJ5IGEgcmVnaXN0ZXIgYXQgb2Zmc2V0CisgKiAweDUwIGZyb20gdGhlIGJhc2UgYWRkcmVzcywgc28gaXQgaXMgbm90IGNvbnNlY3V0aXZlIHdpdGggdGhlIGZpcnN0CisgKiB0d28gcmVnaXN0ZXJzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3RybC5oPgorCisjaW5jbHVkZSAicGluY3RybC1tdmVidS5oIgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICptcHBfYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmhpZ2hfbXBwX2Jhc2U7CisKK3N0YXRpYyBpbnQgb3Jpb25fbXBwX2N0cmxfZ2V0KHVuc2lnbmVkIHBpZCwgdW5zaWduZWQgbG9uZyAqY29uZmlnKQoreworCXVuc2lnbmVkIHNoaWZ0ID0gKHBpZCAlIE1WRUJVX01QUFNfUEVSX1JFRykgKiBNVkVCVV9NUFBfQklUUzsKKworCWlmIChwaWQgPCAxNikgeworCQl1bnNpZ25lZCBvZmYgPSAocGlkIC8gTVZFQlVfTVBQU19QRVJfUkVHKSAqIE1WRUJVX01QUF9CSVRTOworCQkqY29uZmlnID0gKHJlYWRsKG1wcF9iYXNlICsgb2ZmKSA+PiBzaGlmdCkgJiBNVkVCVV9NUFBfTUFTSzsKKwl9CisJZWxzZSB7CisJCSpjb25maWcgPSAocmVhZGwoaGlnaF9tcHBfYmFzZSkgPj4gc2hpZnQpICYgTVZFQlVfTVBQX01BU0s7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpb25fbXBwX2N0cmxfc2V0KHVuc2lnbmVkIHBpZCwgdW5zaWduZWQgbG9uZyBjb25maWcpCit7CisJdW5zaWduZWQgc2hpZnQgPSAocGlkICUgTVZFQlVfTVBQU19QRVJfUkVHKSAqIE1WRUJVX01QUF9CSVRTOworCisJaWYgKHBpZCA8IDE2KSB7CisJCXVuc2lnbmVkIG9mZiA9IChwaWQgLyBNVkVCVV9NUFBTX1BFUl9SRUcpICogTVZFQlVfTVBQX0JJVFM7CisJCXUzMiByZWcgPSByZWFkbChtcHBfYmFzZSArIG9mZikgJiB+KE1WRUJVX01QUF9NQVNLIDw8IHNoaWZ0KTsKKwkJd3JpdGVsKHJlZyB8IChjb25maWcgPDwgc2hpZnQpLCBtcHBfYmFzZSArIG9mZik7CisJfQorCWVsc2UgeworCQl1MzIgcmVnID0gcmVhZGwoaGlnaF9tcHBfYmFzZSkgJiB+KE1WRUJVX01QUF9NQVNLIDw8IHNoaWZ0KTsKKwkJd3JpdGVsKHJlZyB8IChjb25maWcgPDwgc2hpZnQpLCBoaWdoX21wcF9iYXNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBWKGY1MTgxbCwgZjUxODIsIGY1MjgxKSBcCisJKChmNTE4MWwgPDwgMCkgfCAoZjUxODIgPDwgMSkgfCAoZjUyODEgPDwgMikpCisKK2VudW0gb3Jpb25fdmFyaWFudCB7CisJVl81MTgxTCA9IFYoMSwgMCwgMCksCisJVl81MTgyICA9IFYoMCwgMSwgMCksCisJVl81MjgxICA9IFYoMCwgMCwgMSksCisJVl9BTEwgICA9IFYoMSwgMSwgMSksCit9OworCitzdGF0aWMgc3RydWN0IG12ZWJ1X21wcF9tb2RlIG9yaW9uX21wcF9tb2Rlc1tdID0geworCU1QUF9NT0RFKDAsCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgInBjaWUiLCAicnN0b3V0IiwgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDIsICJwY2kiLCAicmVxMiIsICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgzLCAiZ3BpbyIsIE5VTEwsICAgICAgICBWX0FMTCkpLAorCU1QUF9NT0RFKDEsCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgImdwaW8iLCBOVUxMLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDIsICJwY2kiLCAiZ250MiIsICAgICAgIFZfQUxMKSksCisJTVBQX01PREUoMiwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgwLCAiZ3BpbyIsIE5VTEwsICAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MiwgInBjaSIsICJyZXEzIiwgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDMsICJwY2ktMSIsICJwbWUiLCAgICAgIFZfQUxMKSksCisJTVBQX01PREUoMywKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgwLCAiZ3BpbyIsIE5VTEwsICAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MiwgInBjaSIsICJnbnQzIiwgICAgICAgVl9BTEwpKSwKKwlNUFBfTU9ERSg0LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJncGlvIiwgTlVMTCwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgyLCAicGNpIiwgInJlcTQiLCAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4NCwgImJvb3RuYW5kIiwgInJlIiwgICAgVl81MTgyIHwgVl81MjgxKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAic2F0YTAiLCAicHJzbnQiLCAgICBWXzUxODIpKSwKKwlNUFBfTU9ERSg1LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJncGlvIiwgTlVMTCwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgyLCAicGNpIiwgImdudDQiLCAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4NCwgImJvb3RuYW5kIiwgIndlIiwgICAgVl81MTgyIHwgVl81MjgxKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAic2F0YTEiLCAicHJzbnQiLCAgICBWXzUxODIpKSwKKwlNUFBfTU9ERSg2LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJncGlvIiwgTlVMTCwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgyLCAicGNpIiwgInJlcTUiLCAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4NCwgIm5hbmQiLCAicmUwIiwgICAgICAgVl81MTgyIHwgVl81MjgxKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAicGNpLTEiLCAiY2xrIiwgICAgICBWXzUxODFMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAic2F0YTAiLCAiYWN0IiwgICAgICBWXzUxODIpKSwKKwlNUFBfTU9ERSg3LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJncGlvIiwgTlVMTCwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgyLCAicGNpIiwgImdudDUiLCAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4NCwgIm5hbmQiLCAid2UwIiwgICAgICAgVl81MTgyIHwgVl81MjgxKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAicGNpLTEiLCAiY2xrIiwgICAgICBWXzUxODFMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAic2F0YTEiLCAiYWN0IiwgICAgICBWXzUxODIpKSwKKwlNUFBfTU9ERSg4LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJncGlvIiwgTlVMTCwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgxLCAiZ2UiLCAiY29sIiwgICAgICAgICBWX0FMTCkpLAorCU1QUF9NT0RFKDksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgImdwaW8iLCBOVUxMLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDEsICJnZSIsICJyeGVyciIsICAgICAgIFZfQUxMKSksCisJTVBQX01PREUoMTAsCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgImdwaW8iLCBOVUxMLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDEsICJnZSIsICJjcnMiLCAgICAgICAgIFZfQUxMKSksCisJTVBQX01PREUoMTEsCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgImdwaW8iLCBOVUxMLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDEsICJnZSIsICJ0eGVyciIsICAgICAgIFZfQUxMKSksCisJTVBQX01PREUoMTIsCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgImdwaW8iLCBOVUxMLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDEsICJnZSIsICJ0eGQ0IiwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg0LCAibmFuZCIsICJyZTEiLCAgICAgICBWXzUxODIgfCBWXzUyODEpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDUsICJzYXRhMCIsICJsZWRwcnNudCIsIFZfNTE4MikpLAorCU1QUF9NT0RFKDEzLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJncGlvIiwgTlVMTCwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgxLCAiZ2UiLCAidHhkNSIsICAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4NCwgIm5hbmQiLCAid2UxIiwgICAgICAgVl81MTgyIHwgVl81MjgxKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg1LCAic2F0YTEiLCAibGVkcHJzbnQiLCBWXzUxODIpKSwKKwlNUFBfTU9ERSgxNCwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHgwLCAiZ3BpbyIsIE5VTEwsICAgICAgICBWX0FMTCksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MSwgImdlIiwgInR4ZDYiLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDQsICJuYW5kIiwgInJlMiIsICAgICAgIFZfNTE4MiB8IFZfNTI4MSksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4NSwgInNhdGEwIiwgImxlZGFjdCIsICAgVl81MTgyKSksCisJTVBQX01PREUoMTUsCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MCwgImdwaW8iLCBOVUxMLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDEsICJnZSIsICJ0eGQ3IiwgICAgICAgIFZfQUxMKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oMHg0LCAibmFuZCIsICJ3ZTIiLCAgICAgICBWXzUxODIgfCBWXzUyODEpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDUsICJzYXRhMSIsICJsZWRhY3QiLCAgIFZfNTE4MikpLAorCU1QUF9NT0RFKDE2LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJ1YXJ0MSIsICJyeGQiLCAgICAgIFZfNTE4MiB8IFZfNTI4MSksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MSwgImdlIiwgInJ4ZDQiLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDUsICJncGlvIiwgTlVMTCwgICAgICAgIFZfNTE4MikpLAorCU1QUF9NT0RFKDE3LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJ1YXJ0MSIsICJ0eGQiLCAgICAgIFZfNTE4MiB8IFZfNTI4MSksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MSwgImdlIiwgInJ4ZDUiLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDUsICJncGlvIiwgTlVMTCwgICAgICAgIFZfNTE4MikpLAorCU1QUF9NT0RFKDE4LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJ1YXJ0MSIsICJjdHMiLCAgICAgIFZfNTE4MiB8IFZfNTI4MSksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MSwgImdlIiwgInJ4ZDYiLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDUsICJncGlvIiwgTlVMTCwgICAgICAgIFZfNTE4MikpLAorCU1QUF9NT0RFKDE5LAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDAsICJ1YXJ0MSIsICJydHMiLCAgICAgIFZfNTE4MiB8IFZfNTI4MSksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDB4MSwgImdlIiwgInJ4ZDciLCAgICAgICAgVl9BTEwpLAorCQkgTVBQX1ZBUl9GVU5DVElPTigweDUsICJncGlvIiwgTlVMTCwgICAgICAgIFZfNTE4MikpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdmVidV9tcHBfY3RybCBvcmlvbl9tcHBfY29udHJvbHNbXSA9IHsKKwlNUFBfRlVOQ19DVFJMKDAsIDE5LCBOVUxMLCBvcmlvbl9tcHBfY3RybCksCit9OworCitzdGF0aWMgc3RydWN0IHBpbmN0cmxfZ3Bpb19yYW5nZSBtdjg4ZjUxODFsX2dwaW9fcmFuZ2VzW10gPSB7CisJTVBQX0dQSU9fUkFOR0UoMCwgMCwgMCwgMTYpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5jdHJsX2dwaW9fcmFuZ2UgbXY4OGY1MTgyX2dwaW9fcmFuZ2VzW10gPSB7CisJTVBQX0dQSU9fUkFOR0UoMCwgMCwgMCwgMTkpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5jdHJsX2dwaW9fcmFuZ2UgbXY4OGY1MjgxX2dwaW9fcmFuZ2VzW10gPSB7CisJTVBQX0dQSU9fUkFOR0UoMCwgMCwgMCwgMTYpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdmVidV9waW5jdHJsX3NvY19pbmZvIG12ODhmNTE4MWxfaW5mbyA9IHsKKwkudmFyaWFudCA9IFZfNTE4MUwsCisJLmNvbnRyb2xzID0gb3Jpb25fbXBwX2NvbnRyb2xzLAorCS5uY29udHJvbHMgPSBBUlJBWV9TSVpFKG9yaW9uX21wcF9jb250cm9scyksCisJLm1vZGVzID0gb3Jpb25fbXBwX21vZGVzLAorCS5ubW9kZXMgPSBBUlJBWV9TSVpFKG9yaW9uX21wcF9tb2RlcyksCisJLmdwaW9yYW5nZXMgPSBtdjg4ZjUxODFsX2dwaW9fcmFuZ2VzLAorCS5uZ3Bpb3JhbmdlcyA9IEFSUkFZX1NJWkUobXY4OGY1MTgxbF9ncGlvX3JhbmdlcyksCit9OworCitzdGF0aWMgc3RydWN0IG12ZWJ1X3BpbmN0cmxfc29jX2luZm8gbXY4OGY1MTgyX2luZm8gPSB7CisJLnZhcmlhbnQgPSBWXzUxODIsCisJLmNvbnRyb2xzID0gb3Jpb25fbXBwX2NvbnRyb2xzLAorCS5uY29udHJvbHMgPSBBUlJBWV9TSVpFKG9yaW9uX21wcF9jb250cm9scyksCisJLm1vZGVzID0gb3Jpb25fbXBwX21vZGVzLAorCS5ubW9kZXMgPSBBUlJBWV9TSVpFKG9yaW9uX21wcF9tb2RlcyksCisJLmdwaW9yYW5nZXMgPSBtdjg4ZjUxODJfZ3Bpb19yYW5nZXMsCisJLm5ncGlvcmFuZ2VzID0gQVJSQVlfU0laRShtdjg4ZjUxODJfZ3Bpb19yYW5nZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdmVidV9waW5jdHJsX3NvY19pbmZvIG12ODhmNTI4MV9pbmZvID0geworCS52YXJpYW50ID0gVl81MjgxLAorCS5jb250cm9scyA9IG9yaW9uX21wcF9jb250cm9scywKKwkubmNvbnRyb2xzID0gQVJSQVlfU0laRShvcmlvbl9tcHBfY29udHJvbHMpLAorCS5tb2RlcyA9IG9yaW9uX21wcF9tb2RlcywKKwkubm1vZGVzID0gQVJSQVlfU0laRShvcmlvbl9tcHBfbW9kZXMpLAorCS5ncGlvcmFuZ2VzID0gbXY4OGY1MjgxX2dwaW9fcmFuZ2VzLAorCS5uZ3Bpb3JhbmdlcyA9IEFSUkFZX1NJWkUobXY4OGY1MjgxX2dwaW9fcmFuZ2VzKSwKK307CisKKy8qCisgKiBUaGVyZSBhcmUgbXVsdGlwbGUgdmFyaWFudHMgb2YgdGhlIE9yaW9uIFNvQ3MsIGJ1dCBpbiB0ZXJtcyBvZiBwaW4KKyAqIG11eGluZywgdGhleSBhcmUgaWRlbnRpY2FsLgorICovCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvcmlvbl9waW5jdHJsX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLDg4ZjUxODFsLXBpbmN0cmwiLCAuZGF0YSA9ICZtdjg4ZjUxODFsX2luZm8gfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsODhmNTE4Mi1waW5jdHJsIiwgLmRhdGEgPSAmbXY4OGY1MTgyX2luZm8gfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsODhmNTI4MS1waW5jdHJsIiwgLmRhdGEgPSAmbXY4OGY1MjgxX2luZm8gfSwKKwl7IH0KK307CisKK3N0YXRpYyBpbnQgb3Jpb25fcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoID0KKwkJb2ZfbWF0Y2hfZGV2aWNlKG9yaW9uX3BpbmN0cmxfb2ZfbWF0Y2gsICZwZGV2LT5kZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAodm9pZCopbWF0Y2gtPmRhdGE7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1wcF9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihtcHBfYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKG1wcF9iYXNlKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaGlnaF9tcHBfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaGlnaF9tcHBfYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGhpZ2hfbXBwX2Jhc2UpOworCisJcmV0dXJuIG12ZWJ1X3BpbmN0cmxfcHJvYmUocGRldik7Cit9CisKK3N0YXRpYyBpbnQgb3Jpb25fcGluY3RybF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXZlYnVfcGluY3RybF9yZW1vdmUocGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9yaW9uX3BpbmN0cmxfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm9yaW9uLXBpbmN0cmwiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9yaW9uX3BpbmN0cmxfb2ZfbWF0Y2gpLAorCX0sCisJLnByb2JlID0gb3Jpb25fcGluY3RybF9wcm9iZSwKKwkucmVtb3ZlID0gb3Jpb25fcGluY3RybF9yZW1vdmUsCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG9yaW9uX3BpbmN0cmxfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgT3Jpb24gcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jb25mLWdlbmVyaWMuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jb25mLWdlbmVyaWMuYwppbmRleCAzZDlhOTk5Li4yOWZmNzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmNvbmYtZ2VuZXJpYy5jCkBAIC0xNjYsNiArMTY2LDcgQEAKIAl7ICJpbnB1dC1zY2htaXR0LWVuYWJsZSIsIFBJTl9DT05GSUdfSU5QVVRfU0NITUlUVF9FTkFCTEUsIDEgfSwKIAl7ICJpbnB1dC1zY2htaXR0LWRpc2FibGUiLCBQSU5fQ09ORklHX0lOUFVUX1NDSE1JVFRfRU5BQkxFLCAwIH0sCiAJeyAiaW5wdXQtZGVib3VuY2UiLCBQSU5fQ09ORklHX0lOUFVUX0RFQk9VTkNFLCAwIH0sCisJeyAicG93ZXItc291cmNlIiwgUElOX0NPTkZJR19QT1dFUl9TT1VSQ0UsIDAgfSwKIAl7ICJsb3ctcG93ZXItZW5hYmxlIiwgUElOX0NPTkZJR19MT1dfUE9XRVJfTU9ERSwgMSB9LAogCXsgImxvdy1wb3dlci1kaXNhYmxlIiwgUElOX0NPTkZJR19MT1dfUE9XRVJfTU9ERSwgMCB9LAogCXsgIm91dHB1dC1sb3ciLCBQSU5fQ09ORklHX09VVFBVVCwgMCwgfSwKQEAgLTIyOCwxMyArMjI5LDEyIEBACiAJICogTm93IGxpbWl0IHRoZSBudW1iZXIgb2YgY29uZmlncyB0byB0aGUgcmVhbCBudW1iZXIgb2YKIAkgKiBmb3VuZCBwcm9wZXJ0aWVzLgogCSAqLwotCSpjb25maWdzID0ga3phbGxvYyhuY2ZnICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwkqY29uZmlncyA9IGttZW1kdXAoY2ZnLCBuY2ZnICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISpjb25maWdzKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbWNweSgqY29uZmlncywgY2ZnLCBuY2ZnICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAkqbmNvbmZpZ3MgPSBuY2ZnOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hZGkyLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hZGkyLmMKaW5kZXggMGNjMGVlYy4uNWM0NGZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYWRpMi5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWFkaTIuYwpAQCAtOTI3LDcgKzkyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhZGlfZ3Bpb19pcnFfZG9tYWluX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYWRpX2dwaW9faXJxX2RvbWFpbl9vcHMgPSB7CiAJLm1hcCA9IGFkaV9ncGlvX2lycV9tYXAsCiAJLnhsYXRlID0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWFwcTgwNjQuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWFwcTgwNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTlmNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYXBxODA2NC5jCkBAIC0wLDAgKzEsNjEzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBTb255IE1vYmlsZSBDb21tdW5pY2F0aW9ucyBBQi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3RybC5oPgorCisjaW5jbHVkZSAicGluY3RybC1tc20uaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjIGFwcTgwNjRfcGluc1tdID0geworCVBJTkNUUkxfUElOKDAsICJHUElPXzAiKSwKKwlQSU5DVFJMX1BJTigxLCAiR1BJT18xIiksCisJUElOQ1RSTF9QSU4oMiwgIkdQSU9fMiIpLAorCVBJTkNUUkxfUElOKDMsICJHUElPXzMiKSwKKwlQSU5DVFJMX1BJTig0LCAiR1BJT180IiksCisJUElOQ1RSTF9QSU4oNSwgIkdQSU9fNSIpLAorCVBJTkNUUkxfUElOKDYsICJHUElPXzYiKSwKKwlQSU5DVFJMX1BJTig3LCAiR1BJT183IiksCisJUElOQ1RSTF9QSU4oOCwgIkdQSU9fOCIpLAorCVBJTkNUUkxfUElOKDksICJHUElPXzkiKSwKKwlQSU5DVFJMX1BJTigxMCwgIkdQSU9fMTAiKSwKKwlQSU5DVFJMX1BJTigxMSwgIkdQSU9fMTEiKSwKKwlQSU5DVFJMX1BJTigxMiwgIkdQSU9fMTIiKSwKKwlQSU5DVFJMX1BJTigxMywgIkdQSU9fMTMiKSwKKwlQSU5DVFJMX1BJTigxNCwgIkdQSU9fMTQiKSwKKwlQSU5DVFJMX1BJTigxNSwgIkdQSU9fMTUiKSwKKwlQSU5DVFJMX1BJTigxNiwgIkdQSU9fMTYiKSwKKwlQSU5DVFJMX1BJTigxNywgIkdQSU9fMTciKSwKKwlQSU5DVFJMX1BJTigxOCwgIkdQSU9fMTgiKSwKKwlQSU5DVFJMX1BJTigxOSwgIkdQSU9fMTkiKSwKKwlQSU5DVFJMX1BJTigyMCwgIkdQSU9fMjAiKSwKKwlQSU5DVFJMX1BJTigyMSwgIkdQSU9fMjEiKSwKKwlQSU5DVFJMX1BJTigyMiwgIkdQSU9fMjIiKSwKKwlQSU5DVFJMX1BJTigyMywgIkdQSU9fMjMiKSwKKwlQSU5DVFJMX1BJTigyNCwgIkdQSU9fMjQiKSwKKwlQSU5DVFJMX1BJTigyNSwgIkdQSU9fMjUiKSwKKwlQSU5DVFJMX1BJTigyNiwgIkdQSU9fMjYiKSwKKwlQSU5DVFJMX1BJTigyNywgIkdQSU9fMjciKSwKKwlQSU5DVFJMX1BJTigyOCwgIkdQSU9fMjgiKSwKKwlQSU5DVFJMX1BJTigyOSwgIkdQSU9fMjkiKSwKKwlQSU5DVFJMX1BJTigzMCwgIkdQSU9fMzAiKSwKKwlQSU5DVFJMX1BJTigzMSwgIkdQSU9fMzEiKSwKKwlQSU5DVFJMX1BJTigzMiwgIkdQSU9fMzIiKSwKKwlQSU5DVFJMX1BJTigzMywgIkdQSU9fMzMiKSwKKwlQSU5DVFJMX1BJTigzNCwgIkdQSU9fMzQiKSwKKwlQSU5DVFJMX1BJTigzNSwgIkdQSU9fMzUiKSwKKwlQSU5DVFJMX1BJTigzNiwgIkdQSU9fMzYiKSwKKwlQSU5DVFJMX1BJTigzNywgIkdQSU9fMzciKSwKKwlQSU5DVFJMX1BJTigzOCwgIkdQSU9fMzgiKSwKKwlQSU5DVFJMX1BJTigzOSwgIkdQSU9fMzkiKSwKKwlQSU5DVFJMX1BJTig0MCwgIkdQSU9fNDAiKSwKKwlQSU5DVFJMX1BJTig0MSwgIkdQSU9fNDEiKSwKKwlQSU5DVFJMX1BJTig0MiwgIkdQSU9fNDIiKSwKKwlQSU5DVFJMX1BJTig0MywgIkdQSU9fNDMiKSwKKwlQSU5DVFJMX1BJTig0NCwgIkdQSU9fNDQiKSwKKwlQSU5DVFJMX1BJTig0NSwgIkdQSU9fNDUiKSwKKwlQSU5DVFJMX1BJTig0NiwgIkdQSU9fNDYiKSwKKwlQSU5DVFJMX1BJTig0NywgIkdQSU9fNDciKSwKKwlQSU5DVFJMX1BJTig0OCwgIkdQSU9fNDgiKSwKKwlQSU5DVFJMX1BJTig0OSwgIkdQSU9fNDkiKSwKKwlQSU5DVFJMX1BJTig1MCwgIkdQSU9fNTAiKSwKKwlQSU5DVFJMX1BJTig1MSwgIkdQSU9fNTEiKSwKKwlQSU5DVFJMX1BJTig1MiwgIkdQSU9fNTIiKSwKKwlQSU5DVFJMX1BJTig1MywgIkdQSU9fNTMiKSwKKwlQSU5DVFJMX1BJTig1NCwgIkdQSU9fNTQiKSwKKwlQSU5DVFJMX1BJTig1NSwgIkdQSU9fNTUiKSwKKwlQSU5DVFJMX1BJTig1NiwgIkdQSU9fNTYiKSwKKwlQSU5DVFJMX1BJTig1NywgIkdQSU9fNTciKSwKKwlQSU5DVFJMX1BJTig1OCwgIkdQSU9fNTgiKSwKKwlQSU5DVFJMX1BJTig1OSwgIkdQSU9fNTkiKSwKKwlQSU5DVFJMX1BJTig2MCwgIkdQSU9fNjAiKSwKKwlQSU5DVFJMX1BJTig2MSwgIkdQSU9fNjEiKSwKKwlQSU5DVFJMX1BJTig2MiwgIkdQSU9fNjIiKSwKKwlQSU5DVFJMX1BJTig2MywgIkdQSU9fNjMiKSwKKwlQSU5DVFJMX1BJTig2NCwgIkdQSU9fNjQiKSwKKwlQSU5DVFJMX1BJTig2NSwgIkdQSU9fNjUiKSwKKwlQSU5DVFJMX1BJTig2NiwgIkdQSU9fNjYiKSwKKwlQSU5DVFJMX1BJTig2NywgIkdQSU9fNjciKSwKKwlQSU5DVFJMX1BJTig2OCwgIkdQSU9fNjgiKSwKKwlQSU5DVFJMX1BJTig2OSwgIkdQSU9fNjkiKSwKKwlQSU5DVFJMX1BJTig3MCwgIkdQSU9fNzAiKSwKKwlQSU5DVFJMX1BJTig3MSwgIkdQSU9fNzEiKSwKKwlQSU5DVFJMX1BJTig3MiwgIkdQSU9fNzIiKSwKKwlQSU5DVFJMX1BJTig3MywgIkdQSU9fNzMiKSwKKwlQSU5DVFJMX1BJTig3NCwgIkdQSU9fNzQiKSwKKwlQSU5DVFJMX1BJTig3NSwgIkdQSU9fNzUiKSwKKwlQSU5DVFJMX1BJTig3NiwgIkdQSU9fNzYiKSwKKwlQSU5DVFJMX1BJTig3NywgIkdQSU9fNzciKSwKKwlQSU5DVFJMX1BJTig3OCwgIkdQSU9fNzgiKSwKKwlQSU5DVFJMX1BJTig3OSwgIkdQSU9fNzkiKSwKKwlQSU5DVFJMX1BJTig4MCwgIkdQSU9fODAiKSwKKwlQSU5DVFJMX1BJTig4MSwgIkdQSU9fODEiKSwKKwlQSU5DVFJMX1BJTig4MiwgIkdQSU9fODIiKSwKKwlQSU5DVFJMX1BJTig4MywgIkdQSU9fODMiKSwKKwlQSU5DVFJMX1BJTig4NCwgIkdQSU9fODQiKSwKKwlQSU5DVFJMX1BJTig4NSwgIkdQSU9fODUiKSwKKwlQSU5DVFJMX1BJTig4NiwgIkdQSU9fODYiKSwKKwlQSU5DVFJMX1BJTig4NywgIkdQSU9fODciKSwKKwlQSU5DVFJMX1BJTig4OCwgIkdQSU9fODgiKSwKKwlQSU5DVFJMX1BJTig4OSwgIkdQSU9fODkiKSwKKworCVBJTkNUUkxfUElOKDkwLCAiU0RDMV9DTEsiKSwKKwlQSU5DVFJMX1BJTig5MSwgIlNEQzFfQ01EIiksCisJUElOQ1RSTF9QSU4oOTIsICJTREMxX0RBVEEiKSwKKwlQSU5DVFJMX1BJTig5MywgIlNEQzNfQ0xLIiksCisJUElOQ1RSTF9QSU4oOTQsICJTREMzX0NNRCIpLAorCVBJTkNUUkxfUElOKDk1LCAiU0RDM19EQVRBIiksCit9OworCisjZGVmaW5lIERFQ0xBUkVfQVBRX0dQSU9fUElOUyhwaW4pIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbyMjcGluIyNfcGluc1tdID0geyBwaW4gfQorREVDTEFSRV9BUFFfR1BJT19QSU5TKDApOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDEpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDIpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDMpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDQpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDUpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDYpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDcpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDgpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDkpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDEwKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygxMSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMTIpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDEzKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygxNCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMTUpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDE2KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygxNyk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMTgpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDE5KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygyMCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMjEpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDIyKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygyMyk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMjQpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDI1KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygyNik7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMjcpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDI4KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygyOSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMzApOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDMxKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygzMik7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMzMpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDM0KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygzNSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMzYpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDM3KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUygzOCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoMzkpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDQwKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg0MSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNDIpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDQzKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg0NCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNDUpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDQ2KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg0Nyk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNDgpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDQ5KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg1MCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNTEpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDUyKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg1Myk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNTQpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDU1KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg1Nik7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNTcpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDU4KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg1OSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNjApOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDYxKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg2Mik7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNjMpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDY0KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg2NSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNjYpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDY3KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg2OCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNjkpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDcwKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg3MSk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNzIpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDczKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg3NCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNzUpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDc2KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg3Nyk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoNzgpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDc5KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg4MCk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoODEpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDgyKTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg4Myk7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoODQpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDg1KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg4Nik7CitERUNMQVJFX0FQUV9HUElPX1BJTlMoODcpOworREVDTEFSRV9BUFFfR1BJT19QSU5TKDg4KTsKK0RFQ0xBUkVfQVBRX0dQSU9fUElOUyg4OSk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RjMV9jbGtfcGluc1tdID0geyA5MCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGMxX2NtZF9waW5zW10gPSB7IDkxIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkYzFfZGF0YV9waW5zW10gPSB7IDkyIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkYzNfY2xrX3BpbnNbXSA9IHsgOTMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RjM19jbWRfcGluc1tdID0geyA5NCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGMzX2RhdGFfcGluc1tdID0geyA5NSB9OworCisjZGVmaW5lIEZVTkNUSU9OKGZuYW1lKQkJCQkJXAorCVtBUFFfTVVYXyMjZm5hbWVdID0gewkJCQlcCisJCS5uYW1lID0gI2ZuYW1lLAkJCQlcCisJCS5ncm91cHMgPSBmbmFtZSMjX2dyb3VwcywJCVwKKwkJLm5ncm91cHMgPSBBUlJBWV9TSVpFKGZuYW1lIyNfZ3JvdXBzKSwJXAorCX0KKworI2RlZmluZSBQSU5HUk9VUChpZCwgZjEsIGYyLCBmMywgZjQsIGY1LCBmNiwgZjcsIGY4LCBmOSwgZjEwKSBcCisJewkJCQkJCVwKKwkJLm5hbWUgPSAiZ3BpbyIgI2lkLAkJCVwKKwkJLnBpbnMgPSBncGlvIyNpZCMjX3BpbnMsCQlcCisJCS5ucGlucyA9IEFSUkFZX1NJWkUoZ3BpbyMjaWQjI19waW5zKSwJXAorCQkuZnVuY3MgPSAoaW50W10pewkJCVwKKwkJCUFQUV9NVVhfTkEsIC8qIGdwaW8gbW9kZSAqLwlcCisJCQlBUFFfTVVYXyMjZjEsCQkJXAorCQkJQVBRX01VWF8jI2YyLAkJCVwKKwkJCUFQUV9NVVhfIyNmMywJCQlcCisJCQlBUFFfTVVYXyMjZjQsCQkJXAorCQkJQVBRX01VWF8jI2Y1LAkJCVwKKwkJCUFQUV9NVVhfIyNmNiwJCQlcCisJCQlBUFFfTVVYXyMjZjcsCQkJXAorCQkJQVBRX01VWF8jI2Y4LAkJCVwKKwkJCUFQUV9NVVhfIyNmOSwJCQlcCisJCQlBUFFfTVVYXyMjZjEwLAkJCVwKKwkJfSwJCQkJCVwKKwkJLm5mdW5jcyA9IDExLAkJCQlcCisJCS5jdGxfcmVnID0gMHgxMDAwICsgMHgxMCAqIGlkLAkJXAorCQkuaW9fcmVnID0gMHgxMDA0ICsgMHgxMCAqIGlkLAkJXAorCQkuaW50cl9jZmdfcmVnID0gMHgxMDA4ICsgMHgxMCAqIGlkLAlcCisJCS5pbnRyX3N0YXR1c19yZWcgPSAweDEwMGMgKyAweDEwICogaWQsCVwKKwkJLmludHJfdGFyZ2V0X3JlZyA9IDB4NDAwICsgMHg0ICogaWQsCVwKKwkJLm11eF9iaXQgPSAyLAkJCQlcCisJCS5wdWxsX2JpdCA9IDAsCQkJCVwKKwkJLmRydl9iaXQgPSA2LAkJCQlcCisJCS5vZV9iaXQgPSA5LAkJCQlcCisJCS5pbl9iaXQgPSAwLAkJCQlcCisJCS5vdXRfYml0ID0gMSwJCQkJXAorCQkuaW50cl9lbmFibGVfYml0ID0gMCwJCQlcCisJCS5pbnRyX3N0YXR1c19iaXQgPSAwLAkJCVwKKwkJLmludHJfYWNrX2hpZ2ggPSAxLAkJCVwKKwkJLmludHJfdGFyZ2V0X2JpdCA9IDAsCQkJXAorCQkuaW50cl9yYXdfc3RhdHVzX2JpdCA9IDMsCQlcCisJCS5pbnRyX3BvbGFyaXR5X2JpdCA9IDEsCQkJXAorCQkuaW50cl9kZXRlY3Rpb25fYml0ID0gMiwJCVwKKwkJLmludHJfZGV0ZWN0aW9uX3dpZHRoID0gMSwJCVwKKwl9CisKKyNkZWZpbmUgU0RDX1BJTkdST1VQKHBnX25hbWUsIGN0bCwgcHVsbCwgZHJ2KQkJXAorCXsJCQkJCQlcCisJCS5uYW1lID0gI3BnX25hbWUsCQkJXAorCQkucGlucyA9IHBnX25hbWUjI19waW5zLAkJCVwKKwkJLm5waW5zID0gQVJSQVlfU0laRShwZ19uYW1lIyNfcGlucyksCVwKKwkJLmN0bF9yZWcgPSBjdGwsCQkJCVwKKwkJLmlvX3JlZyA9IDAsCQkJCVwKKwkJLmludHJfY2ZnX3JlZyA9IDAsCQkJXAorCQkuaW50cl9zdGF0dXNfcmVnID0gMCwJCQlcCisJCS5pbnRyX3RhcmdldF9yZWcgPSAwLAkJCVwKKwkJLm11eF9iaXQgPSAtMSwJCQkJXAorCQkucHVsbF9iaXQgPSBwdWxsLAkJCVwKKwkJLmRydl9iaXQgPSBkcnYsCQkJCVwKKwkJLm9lX2JpdCA9IC0xLAkJCQlcCisJCS5pbl9iaXQgPSAtMSwJCQkJXAorCQkub3V0X2JpdCA9IC0xLAkJCQlcCisJCS5pbnRyX2VuYWJsZV9iaXQgPSAtMSwJCQlcCisJCS5pbnRyX3N0YXR1c19iaXQgPSAtMSwJCQlcCisJCS5pbnRyX3RhcmdldF9iaXQgPSAtMSwJCQlcCisJCS5pbnRyX3Jhd19zdGF0dXNfYml0ID0gLTEsCQlcCisJCS5pbnRyX3BvbGFyaXR5X2JpdCA9IC0xLAkJXAorCQkuaW50cl9kZXRlY3Rpb25fYml0ID0gLTEsCQlcCisJCS5pbnRyX2RldGVjdGlvbl93aWR0aCA9IC0xLAkJXAorCX0KKworZW51bSBhcHE4MDY0X2Z1bmN0aW9ucyB7CisJQVBRX01VWF9jYW1fbWNsaywKKwlBUFFfTVVYX2NvZGVjX21pY19pMnMsCisJQVBRX01VWF9jb2RlY19zcGtyX2kycywKKwlBUFFfTVVYX2dzYmkxLAorCUFQUV9NVVhfZ3NiaTIsCisJQVBRX01VWF9nc2JpMywKKwlBUFFfTVVYX2dzYmk0LAorCUFQUV9NVVhfZ3NiaTRfY2FtX2kyYywKKwlBUFFfTVVYX2dzYmk1LAorCUFQUV9NVVhfZ3NiaTVfc3BpX2NzMSwKKwlBUFFfTVVYX2dzYmk1X3NwaV9jczIsCisJQVBRX01VWF9nc2JpNV9zcGlfY3MzLAorCUFQUV9NVVhfZ3NiaTYsCisJQVBRX01VWF9nc2JpNl9zcGlfY3MxLAorCUFQUV9NVVhfZ3NiaTZfc3BpX2NzMiwKKwlBUFFfTVVYX2dzYmk2X3NwaV9jczMsCisJQVBRX01VWF9nc2JpNywKKwlBUFFfTVVYX2dzYmk3X3NwaV9jczEsCisJQVBRX01VWF9nc2JpN19zcGlfY3MyLAorCUFQUV9NVVhfZ3NiaTdfc3BpX2NzMywKKwlBUFFfTVVYX2dzYmlfY2FtX2kyYywKKwlBUFFfTVVYX2hkbWksCisJQVBRX01VWF9taTJzLAorCUFQUV9NVVhfcml2YV9idCwKKwlBUFFfTVVYX3JpdmFfZm0sCisJQVBRX01VWF9yaXZhX3dsYW4sCisJQVBRX01VWF9zZGMyLAorCUFQUV9NVVhfc2RjNCwKKwlBUFFfTVVYX3NsaW1idXMsCisJQVBRX01VWF9zcGtyX2kycywKKwlBUFFfTVVYX3RzaWYxLAorCUFQUV9NVVhfdHNpZjIsCisJQVBRX01VWF91c2IyX2hzaWMsCisJQVBRX01VWF9OQSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FtX21jbGtfZ3JvdXBzW10gPSB7CisJImdwaW80IiAiZ3BpbzUiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb2RlY19taWNfaTJzX2dyb3Vwc1tdID0geworCSJncGlvMzQiLCAiZ3BpbzM1IiwgImdwaW8zNiIsICJncGlvMzciLCAiZ3BpbzM4IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY29kZWNfc3Brcl9pMnNfZ3JvdXBzW10gPSB7CisJImdwaW8zOSIsICJncGlvNDAiLCAiZ3BpbzQxIiwgImdwaW80MiIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmkxX2dyb3Vwc1tdID0geworCSJncGlvMTgiLCAiZ3BpbzE5IiwgImdwaW8yMCIsICJncGlvMjEiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpMl9ncm91cHNbXSA9IHsKKwkiZ3BpbzIyIiwgImdwaW8yMyIsICJncGlvMjQiLCAiZ3BpbzI1IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTNfZ3JvdXBzW10gPSB7CisJImdwaW82IiwgImdwaW83IiwgImdwaW84IiwgImdwaW85IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTRfZ3JvdXBzW10gPSB7CisJImdwaW8xMCIsICJncGlvMTEiLCAiZ3BpbzEyIiwgImdwaW8xMyIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmk0X2NhbV9pMmNfZ3JvdXBzW10gPSB7CisJImdwaW8xMCIsICJncGlvMTEiLCAiZ3BpbzEyIiwgImdwaW8xMyIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmk1X2dyb3Vwc1tdID0geworCSJncGlvNTEiLCAiZ3BpbzUyIiwgImdwaW81MyIsICJncGlvNTQiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpNV9zcGlfY3MxX2dyb3Vwc1tdID0geworCSJncGlvNDciCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpNV9zcGlfY3MyX2dyb3Vwc1tdID0geworCSJncGlvMzEiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpNV9zcGlfY3MzX2dyb3Vwc1tdID0geworCSJncGlvMzIiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpNl9ncm91cHNbXSA9IHsKKwkiZ3BpbzE0IiwgImdwaW8xNSIsICJncGlvMTYiLCAiZ3BpbzE3IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTZfc3BpX2NzMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzQ3IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTZfc3BpX2NzMl9ncm91cHNbXSA9IHsKKwkiZ3BpbzMxIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTZfc3BpX2NzM19ncm91cHNbXSA9IHsKKwkiZ3BpbzMyIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTdfZ3JvdXBzW10gPSB7CisJImdwaW84MiIsICJncGlvODMiLCAiZ3Bpbzg0IiwgImdwaW84NSIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmk3X3NwaV9jczFfZ3JvdXBzW10gPSB7CisJImdwaW80NyIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmk3X3NwaV9jczJfZ3JvdXBzW10gPSB7CisJImdwaW8zMSIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmk3X3NwaV9jczNfZ3JvdXBzW10gPSB7CisJImdwaW8zMiIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmlfY2FtX2kyY19ncm91cHNbXSA9IHsKKwkiZ3BpbzEwIiwgImdwaW8xMSIsICJncGlvMTIiLCAiZ3BpbzEzIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGRtaV9ncm91cHNbXSA9IHsKKwkiZ3BpbzY5IiwgImdwaW83MCIsICJncGlvNzEiLCAiZ3BpbzcyIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWkyc19ncm91cHNbXSA9IHsKKwkiZ3BpbzI3IiwgImdwaW8yOCIsICJncGlvMjkiLCAiZ3BpbzMwIiwgImdwaW8zMSIsICJncGlvMzIiLCAiZ3BpbzMzIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgcml2YV9idF9ncm91cHNbXSA9IHsKKwkiZ3BpbzE2IiwgImdwaW8xNyIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJpdmFfZm1fZ3JvdXBzW10gPSB7CisJImdwaW8xNCIsICJncGlvMTUiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByaXZhX3dsYW5fZ3JvdXBzW10gPSB7CisJImdwaW82NCIsICJncGlvNjUiLCAiZ3BpbzY2IiwgImdwaW82NyIsICJncGlvNjgiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZGMyX2dyb3Vwc1tdID0geworCSJncGlvNTciLCAiZ3BpbzU4IiwgImdwaW81OSIsICJncGlvNjAiLCAiZ3BpbzYxIiwgImdwaW82MiIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkYzRfZ3JvdXBzW10gPSB7CisJImdwaW82MyIsICJncGlvNjQiLCAiZ3BpbzY1IiwgImdwaW82NiIsICJncGlvNjciLCAiZ3BpbzY4IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2xpbWJ1c19ncm91cHNbXSA9IHsKKwkiZ3BpbzQwIiwgImdwaW80MSIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNwa3JfaTJzX2dyb3Vwc1tdID0geworCSJncGlvNDciLCAiZ3BpbzQ4IiwgImdwaW80OSIsICJncGlvNTAiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0c2lmMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzU1IiwgImdwaW81NiIsICJncGlvNTciCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0c2lmMl9ncm91cHNbXSA9IHsKKwkiZ3BpbzU4IiwgImdwaW81OSIsICJncGlvNjAiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2IyX2hzaWNfZ3JvdXBzW10gPSB7CisJImdwaW84OCIsICJncGlvODkiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1zbV9mdW5jdGlvbiBhcHE4MDY0X2Z1bmN0aW9uc1tdID0geworCUZVTkNUSU9OKGNhbV9tY2xrKSwKKwlGVU5DVElPTihjb2RlY19taWNfaTJzKSwKKwlGVU5DVElPTihjb2RlY19zcGtyX2kycyksCisJRlVOQ1RJT04oZ3NiaTEpLAorCUZVTkNUSU9OKGdzYmkyKSwKKwlGVU5DVElPTihnc2JpMyksCisJRlVOQ1RJT04oZ3NiaTQpLAorCUZVTkNUSU9OKGdzYmk0X2NhbV9pMmMpLAorCUZVTkNUSU9OKGdzYmk1KSwKKwlGVU5DVElPTihnc2JpNV9zcGlfY3MxKSwKKwlGVU5DVElPTihnc2JpNV9zcGlfY3MyKSwKKwlGVU5DVElPTihnc2JpNV9zcGlfY3MzKSwKKwlGVU5DVElPTihnc2JpNiksCisJRlVOQ1RJT04oZ3NiaTZfc3BpX2NzMSksCisJRlVOQ1RJT04oZ3NiaTZfc3BpX2NzMiksCisJRlVOQ1RJT04oZ3NiaTZfc3BpX2NzMyksCisJRlVOQ1RJT04oZ3NiaTcpLAorCUZVTkNUSU9OKGdzYmk3X3NwaV9jczEpLAorCUZVTkNUSU9OKGdzYmk3X3NwaV9jczIpLAorCUZVTkNUSU9OKGdzYmk3X3NwaV9jczMpLAorCUZVTkNUSU9OKGdzYmlfY2FtX2kyYyksCisJRlVOQ1RJT04oaGRtaSksCisJRlVOQ1RJT04obWkycyksCisJRlVOQ1RJT04ocml2YV9idCksCisJRlVOQ1RJT04ocml2YV9mbSksCisJRlVOQ1RJT04ocml2YV93bGFuKSwKKwlGVU5DVElPTihzZGMyKSwKKwlGVU5DVElPTihzZGM0KSwKKwlGVU5DVElPTihzbGltYnVzKSwKKwlGVU5DVElPTihzcGtyX2kycyksCisJRlVOQ1RJT04odHNpZjEpLAorCUZVTkNUSU9OKHRzaWYyKSwKKwlGVU5DVElPTih1c2IyX2hzaWMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgYXBxODA2NF9ncm91cHNbXSA9IHsKKwlQSU5HUk9VUCgwLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNCwgTkEsIE5BLCBjYW1fbWNsaywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUsIE5BLCBjYW1fbWNsaywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2LCBnc2JpMywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNywgZ3NiaTMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDgsIGdzYmkzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5LCBnc2JpMywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTAsIGdzYmk0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgZ3NiaTRfY2FtX2kyYywgTkEpLAorCVBJTkdST1VQKDExLCBnc2JpNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBnc2JpNF9jYW1faTJjKSwKKwlQSU5HUk9VUCgxMiwgZ3NiaTQsIE5BLCBOQSwgTkEsIE5BLCBnc2JpNF9jYW1faTJjLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTMsIGdzYmk0LCBOQSwgTkEsIE5BLCBOQSwgZ3NiaTRfY2FtX2kyYywgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE0LCByaXZhX2ZtLCBnc2JpNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNSwgcml2YV9mbSwgZ3NiaTYsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTYsIHJpdmFfYnQsIGdzYmk2LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE3LCByaXZhX2J0LCBnc2JpNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxOCwgZ3NiaTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE5LCBnc2JpMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjAsIGdzYmkxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyMSwgZ3NiaTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDIyLCBnc2JpMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjMsIGdzYmkyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyNCwgZ3NiaTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDI1LCBnc2JpMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjYsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyNywgbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjgsIG1pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDI5LCBtaTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzMCwgbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzEsIG1pMnMsIE5BLCBnc2JpNV9zcGlfY3MyLCBnc2JpNl9zcGlfY3MyLCBnc2JpN19zcGlfY3MyLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMyLCBtaTJzLCBOQSwgTkEsIE5BLCBOQSwgZ3NiaTVfc3BpX2NzMywgZ3NiaTZfc3BpX2NzMywgZ3NiaTdfc3BpX2NzMywgTkEsIE5BKSwKKwlQSU5HUk9VUCgzMywgbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzQsIGNvZGVjX21pY19pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM1LCBjb2RlY19taWNfaTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzNiwgY29kZWNfbWljX2kycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzcsIGNvZGVjX21pY19pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM4LCBjb2RlY19taWNfaTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzOSwgY29kZWNfc3Brcl9pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQwLCBzbGltYnVzLCBjb2RlY19zcGtyX2kycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0MSwgc2xpbWJ1cywgY29kZWNfc3Brcl9pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDIsIGNvZGVjX3Nwa3JfaTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0MywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDUsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0NiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ3LCBzcGtyX2kycywgZ3NiaTVfc3BpX2NzMSwgZ3NiaTZfc3BpX2NzMSwgZ3NiaTdfc3BpX2NzMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDgsIHNwa3JfaTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0OSwgc3Brcl9pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUwLCBzcGtyX2kycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTEsIE5BLCBnc2JpNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1MiwgTkEsIGdzYmk1LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUzLCBOQSwgZ3NiaTUsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTQsIE5BLCBnc2JpNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1NSwgdHNpZjEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDU2LCB0c2lmMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTcsIHRzaWYxLCBzZGMyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDU4LCB0c2lmMiwgc2RjMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1OSwgdHNpZjIsIHNkYzIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjAsIHRzaWYyLCBzZGMyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDYxLCBOQSwgc2RjMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2MiwgTkEsIHNkYzIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjMsIE5BLCBzZGM0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY0LCByaXZhX3dsYW4sIHNkYzQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjUsIHJpdmFfd2xhbiwgc2RjNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2Niwgcml2YV93bGFuLCBzZGM0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY3LCByaXZhX3dsYW4sIHNkYzQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjgsIHJpdmFfd2xhbiwgc2RjNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2OSwgaGRtaSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzAsIGhkbWksIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDcxLCBoZG1pLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3MiwgaGRtaSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3NCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDc1LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzYsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3NywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDc4LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzksIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4MCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDgxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODIsIE5BLCBnc2JpNywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4MywgZ3NiaTcsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDg0LCBOQSwgZ3NiaTcsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODUsIE5BLCBOQSwgZ3NiaTcsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4NiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDg3LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODgsIHVzYjJfaHNpYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODksIHVzYjJfaHNpYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisKKwlTRENfUElOR1JPVVAoc2RjMV9jbGssIDB4MjBhMCwgMTMsIDYpLAorCVNEQ19QSU5HUk9VUChzZGMxX2NtZCwgMHgyMGEwLCAxMSwgMyksCisJU0RDX1BJTkdST1VQKHNkYzFfZGF0YSwgMHgyMGEwLCA5LCAwKSwKKworCVNEQ19QSU5HUk9VUChzZGMzX2NsaywgMHgyMGE0LCAxNCwgNiksCisJU0RDX1BJTkdST1VQKHNkYzNfY21kLCAweDIwYTQsIDExLCAzKSwKKwlTRENfUElOR1JPVVAoc2RjM19kYXRhLCAweDIwYTQsIDksIDApLAorfTsKKworI2RlZmluZSBOVU1fR1BJT19QSU5HUk9VUFMgOTAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluY3RybF9zb2NfZGF0YSBhcHE4MDY0X3BpbmN0cmwgPSB7CisJLnBpbnMgPSBhcHE4MDY0X3BpbnMsCisJLm5waW5zID0gQVJSQVlfU0laRShhcHE4MDY0X3BpbnMpLAorCS5mdW5jdGlvbnMgPSBhcHE4MDY0X2Z1bmN0aW9ucywKKwkubmZ1bmN0aW9ucyA9IEFSUkFZX1NJWkUoYXBxODA2NF9mdW5jdGlvbnMpLAorCS5ncm91cHMgPSBhcHE4MDY0X2dyb3VwcywKKwkubmdyb3VwcyA9IEFSUkFZX1NJWkUoYXBxODA2NF9ncm91cHMpLAorCS5uZ3Bpb3MgPSBOVU1fR1BJT19QSU5HUk9VUFMsCit9OworCitzdGF0aWMgaW50IGFwcTgwNjRfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBtc21fcGluY3RybF9wcm9iZShwZGV2LCAmYXBxODA2NF9waW5jdHJsKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXBxODA2NF9waW5jdHJsX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJxY29tLGFwcTgwNjQtcGluY3RybCIsIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXBxODA2NF9waW5jdHJsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhcHE4MDY0LXBpbmN0cmwiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXBxODA2NF9waW5jdHJsX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gYXBxODA2NF9waW5jdHJsX3Byb2JlLAorCS5yZW1vdmUgPSBtc21fcGluY3RybF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhcHE4MDY0X3BpbmN0cmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFwcTgwNjRfcGluY3RybF9kcml2ZXIpOworfQorYXJjaF9pbml0Y2FsbChhcHE4MDY0X3BpbmN0cmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcHE4MDY0X3BpbmN0cmxfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhcHE4MDY0X3BpbmN0cmxfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFwcTgwNjRfcGluY3RybF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmpvcm4gQW5kZXJzc29uIDxiam9ybi5hbmRlcnNzb25Ac29ueW1vYmlsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlF1YWxjb21tIEFQUTgwNjQgcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFwcTgwNjRfcGluY3RybF9vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMKaW5kZXggNWQyNGFhZS4uNDIxNDkzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYXQ5MS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWF0OTEuYwpAQCAtMTYsOSArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9tYWNoaW5lLmg+CkBAIC00Nyw3ICs0NCw2IEBACiAJaW50CQkJcGlvY19pZHg7CS8qIFBJTyBiYW5rIGluZGV4ICovCiAJdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogUElPIGJhbmsgdmlydHVhbCBhZGRyZXNzICovCiAJc3RydWN0IGNsawkJKmNsb2NrOwkJLyogYXNzb2NpYXRlZCBjbG9jayAqLwotCXN0cnVjdCBpcnFfZG9tYWluCSpkb21haW47CS8qIGFzc29jaWF0ZWQgaXJxIGRvbWFpbiAqLwogCXN0cnVjdCBhdDkxX3BpbmN0cmxfbXV4X29wcyAqb3BzOwkvKiBvcHMgKi8KIH07CiAKQEAgLTExOTIsMjEgKzExODgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0JaW50IHZpcnE7Ci0KLQlpZiAob2Zmc2V0IDwgY2hpcC0+bmdwaW8pCi0JCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoYXQ5MV9ncGlvLT5kb21haW4sIG9mZnNldCk7Ci0JZWxzZQotCQl2aXJxID0gLUVOWElPOwotCi0JZGV2X2RiZyhjaGlwLT5kZXYsICIlczogcmVxdWVzdCBJUlEgZm9yIEdQSU8gJWQsIHJldHVybiAlZFxuIiwKLQkJCQljaGlwLT5sYWJlbCwgb2Zmc2V0ICsgY2hpcC0+YmFzZSwgdmlycSk7Ci0JcmV0dXJuIHZpcnE7Ci19Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyB2b2lkIGF0OTFfZ3Bpb19kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCiB7CkBAIC0xMjE2LDggKzExOTcsNyBAQAogCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwogCiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyspIHsKLQkJdW5zaWduZWQgcGluID0gY2hpcC0+YmFzZSArIGk7Ci0JCXVuc2lnbmVkIG1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2soaSk7CiAJCWNvbnN0IGNoYXIgKmdwaW9fbGFiZWw7CiAJCXUzMiBwZHNyOwogCkBAIC0xMzM2LDYgKzEzMTYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ3Bpb19pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwkvKiB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkgY2xlYXJlZCBiZWZvcmUgYnkgcmVhZGluZyBJU1IgKi8KK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBncGlvX2lycV9zdGFydHVwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwpAQCAtMTQzNSw2ICsxNDIwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIkdQSU8iLAorCS5pcnFfYWNrCT0gZ3Bpb19pcnFfYWNrLAogCS5pcnFfc3RhcnR1cAk9IGdwaW9faXJxX3N0YXJ0dXAsCiAJLmlycV9zaHV0ZG93bgk9IGdwaW9faXJxX3NodXRkb3duLAogCS5pcnFfZGlzYWJsZQk9IGdwaW9faXJxX21hc2ssCkBAIC0xNDQ2LDkgKzE0MzIsMTEgQEAKIAogc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKLQlzdHJ1Y3QgaXJxX2RhdGEgKmlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRlc2MpOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaWRhdGEpOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9nZXRfY2hpcChpcnEpOworCXN0cnVjdCBncGlvX2NoaXAgKmdwaW9fY2hpcCA9IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSBjb250YWluZXJfb2YoZ3Bpb19jaGlwLAorCQkJCQkgICBzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAsIGNoaXApOworCiAJdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7CiAJdW5zaWduZWQgbG9uZwlpc3I7CiAJaW50CQluOwpAQCAtMTQ2NSw4NSArMTQ1MywyNSBAQAogCQkJCWJyZWFrOwogCQkJYXQ5MV9ncGlvID0gYXQ5MV9ncGlvLT5uZXh0OwogCQkJcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOworCQkJZ3Bpb19jaGlwID0gJmF0OTFfZ3Bpby0+Y2hpcDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZm9yX2VhY2hfc2V0X2JpdChuLCAmaXNyLCBCSVRTX1BFUl9MT05HKSB7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhhdDkxX2dwaW8tPmRvbWFpbiwgbikpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoCisJCQkJCSAgIGdwaW9fY2hpcC0+aXJxZG9tYWluLCBuKSk7CiAJCX0KIAl9CiAJY2hhaW5lZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsKIAkvKiBub3cgaXQgbWF5IHJlLXRyaWdnZXIgKi8KIH0KIAotLyoKLSAqIFRoaXMgbG9jayBjbGFzcyB0ZWxscyBsb2NrZGVwIHRoYXQgR1BJTyBpcnFzIGFyZSBpbiBhIGRpZmZlcmVudAotICogY2F0ZWdvcnkgdGhhbiB0aGVpciBwYXJlbnRzLCBzbyBpdCB3b24ndCByZXBvcnQgZmFsc2UgcmVjdXJzaW9uLgotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9fbG9ja19jbGFzczsKLQotc3RhdGljIGludCBhdDkxX2dwaW9faXJxX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqaCwgdW5zaWduZWQgaW50IHZpcnEsCi0JCQkJCQkJaXJxX2h3X251bWJlcl90IGh3KQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqYXQ5MV9ncGlvID0gaC0+aG9zdF9kYXRhOwotCXZvaWQgX19pb21lbQkJKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1MzIJCQltYXNrID0gMSA8PCBodzsKLQotCWlycV9zZXRfbG9ja2RlcF9jbGFzcyh2aXJxLCAmZ3Bpb19sb2NrX2NsYXNzKTsKLQotCS8qCi0JICogQ2FuIHVzZSB0aGUgInNpbXBsZSIgYW5kIG5vdCAiZWRnZSIgaGFuZGxlciBzaW5jZSBpdCdzCi0JICogc2hvcnRlciwgYW5kIHRoZSBBSUMgaGFuZGxlcyBpbnRlcnJ1cHRzIHNhbmVseS4KLQkgKi8KLQlpcnFfc2V0X2NoaXAodmlycSwgJmdwaW9faXJxY2hpcCk7Ci0JaWYgKChhdDkxX2dwaW8tPm9wcyA9PSAmYXQ5MXNhbTl4NV9vcHMpICYmCi0JICAgIChyZWFkbF9yZWxheGVkKHBpbyArIFBJT19BSU1NUikgJiBtYXNrKSAmJgotCSAgICAocmVhZGxfcmVsYXhlZChwaW8gKyBQSU9fRUxTUikgJiBtYXNrKSkKLQkJaXJxX3NldF9oYW5kbGVyKHZpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCWVsc2UKLQkJaXJxX3NldF9oYW5kbGVyKHZpcnEsIGhhbmRsZV9zaW1wbGVfaXJxKTsKLQlzZXRfaXJxX2ZsYWdzKHZpcnEsIElSUUZfVkFMSUQpOwotCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsIGF0OTFfZ3Bpbyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9faXJxX2RvbWFpbl94bGF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxyLAotCQkJCSAgICAgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCi0JCQkJICAgICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICpvdXRfdHlwZSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IGQtPmhvc3RfZGF0YTsKLQlpbnQgcmV0OwotCWludCBwaW4gPSBhdDkxX2dwaW8tPmNoaXAuYmFzZSArIGludHNwZWNbMF07Ci0KLQlpZiAoV0FSTl9PTihpbnRzaXplIDwgMikpCi0JCXJldHVybiAtRUlOVkFMOwotCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOwotCSpvdXRfdHlwZSA9IGludHNwZWNbMV0gJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHBpbiwgY3RybHItPmZ1bGxfbmFtZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9kb21haW5fb3BzIGF0OTFfZ3Bpb19vcHMgPSB7Ci0JLm1hcAk9IGF0OTFfZ3Bpb19pcnFfbWFwLAotCS54bGF0ZQk9IGF0OTFfZ3Bpb19pcnFfZG9tYWluX3hsYXRlLAotfTsKLQogc3RhdGljIGludCBhdDkxX2dwaW9fb2ZfaXJxX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCQkgIHN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvKQogewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqcHJldiA9IE5VTEw7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICAgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBpcnFfZGF0YQkJKmQgPSBpcnFfZ2V0X2lycV9kYXRhKGF0OTFfZ3Bpby0+cGlvY192aXJxKTsKKwlpbnQgcmV0OwogCiAJYXQ5MV9ncGlvLT5waW9jX2h3aXJxID0gaXJxZF90b19od2lycShkKTsKIApAQCAtMTU1MywxMCArMTQ4MSwxNyBAQAogCS8qIERpc2FibGUgaXJxcyBvZiB0aGlzIFBJTyBjb250cm9sbGVyICovCiAJd3JpdGVsX3JlbGF4ZWQofjAsIGF0OTFfZ3Bpby0+cmVnYmFzZSArIFBJT19JRFIpOwogCi0JLyogU2V0dXAgaXJxIGRvbWFpbiAqLwotCWF0OTFfZ3Bpby0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5vZGUsIGF0OTFfZ3Bpby0+Y2hpcC5uZ3BpbywKLQkJCQkJCSZhdDkxX2dwaW9fb3BzLCBhdDkxX2dwaW8pOwotCWlmICghYXQ5MV9ncGlvLT5kb21haW4pCisJLyoKKwkgKiBMZXQgdGhlIGdlbmVyaWMgY29kZSBoYW5kbGUgdGhpcyBlZGdlIElSUSwgdGhlIHRoZSBjaGFpbmVkCisJICogaGFuZGxlciB3aWxsIHBlcmZvcm0gdGhlIGFjdHVhbCB3b3JrIG9mIGhhbmRsaW5nIHRoZSBwYXJlbnQKKwkgKiBpbnRlcnJ1cHQuCisJICovCisJcmV0ID0gZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoJmF0OTFfZ3Bpby0+Y2hpcCwKKwkJCQkgICAmZ3Bpb19pcnFjaGlwLAorCQkJCSAgIDAsCisJCQkJICAgaGFuZGxlX2VkZ2VfaXJxLAorCQkJCSAgIElSUV9UWVBFX0VER0VfQk9USCk7CisJaWYgKHJldCkKIAkJcGFuaWMoImF0OTFfZ3Bpby4lZDogY291bGRuJ3QgYWxsb2NhdGUgaXJxIGRvbWFpbiAoRFQpLlxuIiwKIAkJCWF0OTFfZ3Bpby0+cGlvY19pZHgpOwogCkBAIC0xNTcxLDggKzE1MDYsMTEgQEAKIAlpZiAocHJldiAmJiBwcmV2LT5uZXh0ID09IGF0OTFfZ3BpbykKIAkJcmV0dXJuIDA7CiAKLQlpcnFfc2V0X2NoaXBfZGF0YShhdDkxX2dwaW8tPnBpb2NfdmlycSwgYXQ5MV9ncGlvKTsKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihhdDkxX2dwaW8tPnBpb2NfdmlycSwgZ3Bpb19pcnFfaGFuZGxlcik7CisJLyogVGhlbiByZWdpc3RlciB0aGUgY2hhaW4gb24gdGhlIHBhcmVudCBJUlEgKi8KKwlncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCZhdDkxX2dwaW8tPmNoaXAsCisJCQkJICAgICAmZ3Bpb19pcnFjaGlwLAorCQkJCSAgICAgYXQ5MV9ncGlvLT5waW9jX3ZpcnEsCisJCQkJICAgICBncGlvX2lycV9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4Niw3ICsxNTI0LDYgQEAKIAkuZ2V0CQkJPSBhdDkxX2dwaW9fZ2V0LAogCS5kaXJlY3Rpb25fb3V0cHV0CT0gYXQ5MV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCiAJLnNldAkJCT0gYXQ5MV9ncGlvX3NldCwKLQkudG9faXJxCQkJPSBhdDkxX2dwaW9fdG9faXJxLAogCS5kYmdfc2hvdwkJPSBhdDkxX2dwaW9fZGJnX3Nob3csCiAJLmNhbl9zbGVlcAkJPSBmYWxzZSwKIAkubmdwaW8JCQk9IE1BWF9OQl9HUElPX1BFUl9CQU5LLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYmF5dHJhaWwuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWJheXRyYWlsLmMKaW5kZXggNmU4MzAxZi4uOTc1NTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYmF5dHJhaWwuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1iYXl0cmFpbC5jCkBAIC00Myw5ICs0MywyMCBAQAogI2RlZmluZSBCWVRfSU5UX1NUQVRfUkVHCTB4ODAwCiAKIC8qIEJZVF9DT05GMF9SRUcgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBCWVRfSU9ERU4JCUJJVCgzMSkKICNkZWZpbmUgQllUX1RSSUdfTkVHCQlCSVQoMjYpCiAjZGVmaW5lIEJZVF9UUklHX1BPUwkJQklUKDI1KQogI2RlZmluZSBCWVRfVFJJR19MVkwJCUJJVCgyNCkKKyNkZWZpbmUgQllUX1BVTExfU1RSX1NISUZUCTkKKyNkZWZpbmUgQllUX1BVTExfU1RSX01BU0sJKDMgPDwgQllUX1BVTExfU1RSX1NISUZUKQorI2RlZmluZSBCWVRfUFVMTF9TVFJfMksJCSgwIDw8IEJZVF9QVUxMX1NUUl9TSElGVCkKKyNkZWZpbmUgQllUX1BVTExfU1RSXzEwSwkoMSA8PCBCWVRfUFVMTF9TVFJfU0hJRlQpCisjZGVmaW5lIEJZVF9QVUxMX1NUUl8yMEsJKDIgPDwgQllUX1BVTExfU1RSX1NISUZUKQorI2RlZmluZSBCWVRfUFVMTF9TVFJfNDBLCSgzIDw8IEJZVF9QVUxMX1NUUl9TSElGVCkKKyNkZWZpbmUgQllUX1BVTExfQVNTSUdOX1NISUZUCTcKKyNkZWZpbmUgQllUX1BVTExfQVNTSUdOX01BU0sJKDMgPDwgQllUX1BVTExfQVNTSUdOX1NISUZUKQorI2RlZmluZSBCWVRfUFVMTF9BU1NJR05fVVAJKDEgPDwgQllUX1BVTExfQVNTSUdOX1NISUZUKQorI2RlZmluZSBCWVRfUFVMTF9BU1NJR05fRE9XTgkoMiA8PCBCWVRfUFVMTF9BU1NJR05fU0hJRlQpCiAjZGVmaW5lIEJZVF9QSU5fTVVYCQkweDA3CiAKIC8qIEJZVF9WQUxfUkVHIHJlZ2lzdGVyIGJpdHMgKi8KQEAgLTMyMSw2ICszMzIsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2Zy0+bG9jaywgZmxhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IHZnLT5jaGlwLm5ncGlvOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcHVsbF9zdHIgPSBOVUxMOworCQljb25zdCBjaGFyICpwdWxsID0gTlVMTDsKIAkJY29uc3QgY2hhciAqbGFiZWw7CiAJCW9mZnMgPSB2Zy0+cmFuZ2UtPnBpbnNbaV0gKiAxNjsKIAkJY29uZjAgPSByZWFkbCh2Zy0+cmVnX2Jhc2UgKyBvZmZzICsgQllUX0NPTkYwX1JFRyk7CkBAIC0zMzAsOCArMzQzLDMyIEBACiAJCWlmICghbGFiZWwpCiAJCQlsYWJlbCA9ICJVbnJlcXVlc3RlZCI7CiAKKwkJc3dpdGNoIChjb25mMCAmIEJZVF9QVUxMX0FTU0lHTl9NQVNLKSB7CisJCWNhc2UgQllUX1BVTExfQVNTSUdOX1VQOgorCQkJcHVsbCA9ICJ1cCI7CisJCQlicmVhazsKKwkJY2FzZSBCWVRfUFVMTF9BU1NJR05fRE9XTjoKKwkJCXB1bGwgPSAiZG93biI7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoY29uZjAgJiBCWVRfUFVMTF9TVFJfTUFTSykgeworCQljYXNlIEJZVF9QVUxMX1NUUl8ySzoKKwkJCXB1bGxfc3RyID0gIjJrIjsKKwkJCWJyZWFrOworCQljYXNlIEJZVF9QVUxMX1NUUl8xMEs6CisJCQlwdWxsX3N0ciA9ICIxMGsiOworCQkJYnJlYWs7CisJCWNhc2UgQllUX1BVTExfU1RSXzIwSzoKKwkJCXB1bGxfc3RyID0gIjIwayI7CisJCQlicmVhazsKKwkJY2FzZSBCWVRfUFVMTF9TVFJfNDBLOgorCQkJcHVsbF9zdHIgPSAiNDBrIjsKKwkJCWJyZWFrOworCQl9CisKIAkJc2VxX3ByaW50ZihzLAotCQkJICAgIiBncGlvLSUtM2QgKCUtMjAuMjBzKSAlcyAlcyAlcyBwYWQtJS0zZCBvZmZzZXQ6MHglMDN4IG11eDolZCAlcyVzJXNcbiIsCisJCQkgICAiIGdwaW8tJS0zZCAoJS0yMC4yMHMpICVzICVzICVzIHBhZC0lLTNkIG9mZnNldDoweCUwM3ggbXV4OiVkICVzJXMlcyIsCiAJCQkgICBpLAogCQkJICAgbGFiZWwsCiAJCQkgICB2YWwgJiBCWVRfSU5QVVRfRU4gPyAiICAiIDogImluIiwKQEAgLTMzOSw5ICszNzYsMTkgQEAKIAkJCSAgIHZhbCAmIEJZVF9MRVZFTCA/ICJoaSIgOiAibG8iLAogCQkJICAgdmctPnJhbmdlLT5waW5zW2ldLCBvZmZzLAogCQkJICAgY29uZjAgJiAweDcsCi0JCQkgICBjb25mMCAmIEJZVF9UUklHX05FRyA/ICIgZmFsbCIgOiAiIiwKLQkJCSAgIGNvbmYwICYgQllUX1RSSUdfUE9TID8gIiByaXNlIiA6ICIiLAotCQkJICAgY29uZjAgJiBCWVRfVFJJR19MVkwgPyAiIGxldmVsIiA6ICIiKTsKKwkJCSAgIGNvbmYwICYgQllUX1RSSUdfTkVHID8gIiBmYWxsIiA6ICIgICAgICIsCisJCQkgICBjb25mMCAmIEJZVF9UUklHX1BPUyA/ICIgcmlzZSIgOiAiICAgICAiLAorCQkJICAgY29uZjAgJiBCWVRfVFJJR19MVkwgPyAiIGxldmVsIiA6ICIgICAgICAiKTsKKworCQlpZiAocHVsbCAmJiBwdWxsX3N0cikKKwkJCXNlcV9wcmludGYocywgIiAlLTRzICUtM3MiLCBwdWxsLCBwdWxsX3N0cik7CisJCWVsc2UKKwkJCXNlcV9wdXRzKHMsICIgICAgICAgICAgIik7CisKKwkJaWYgKGNvbmYwICYgQllUX0lPREVOKQorCQkJc2VxX3B1dHMocywgIiBvcGVuLWRyYWluIik7CisKKwkJc2VxX3B1dHMocywgIlxuIik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZnLT5sb2NrLCBmbGFncyk7CiB9CkBAIC01MjcsMTIgKzU3NCw2IEBACiAJZ2MtPmNhbl9zbGVlcCA9IGZhbHNlOwogCWdjLT5kZXYgPSBkZXY7CiAKLQlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIGFkZGluZyBieXQtZ3BpbyBjaGlwXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAkvKiBzZXQgdXAgaW50ZXJydXB0cyAgKi8KIAlpcnFfcmMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmIChpcnFfcmMgJiYgaXJxX3JjLT5zdGFydCkgewpAQCAtNTUwLDYgKzU5MSwxMiBAQAogCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihod2lycSwgYnl0X2dwaW9faXJxX2hhbmRsZXIpOwogCX0KIAorCXJldCA9IGdwaW9jaGlwX2FkZChnYyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgYWRkaW5nIGJ5dC1ncGlvIGNoaXBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTU3Miw2ICs2MTksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGJ5dF9ncGlvX2FjcGlfbWF0Y2hbXSA9IHsKIAl7ICJJTlQzM0IyIiwgMCB9LAorCXsgIklOVDMzRkMiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBieXRfZ3Bpb19hY3BpX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWV4eW5vcy5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtZXh5bm9zLmMKaW5kZXggMDdjODEzMC4uOTYwOWMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtZXh5bm9zLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtZXh5bm9zLmMKQEAgLTcxOCw2ICs3MTgsNzMgQEAKIAl9LAogfTsKIAorLyogcGluIGJhbmtzIG9mIGV4eW5vczMyNTAgcGluLWNvbnRyb2xsZXIgMCAqLworc3RhdGljIHN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5rIGV4eW5vczMyNTBfcGluX2JhbmtzMFtdID0geworCUVYWU5PU19QSU5fQkFOS19FSU5URyg4LCAweDAwMCwgImdwYTAiLCAweDAwKSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNiwgMHgwMjAsICJncGExIiwgMHgwNCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDgsIDB4MDQwLCAiZ3BiIiwgIDB4MDgpLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg1LCAweDA2MCwgImdwYzAiLCAweDBjKSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNSwgMHgwODAsICJncGMxIiwgMHgxMCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDQsIDB4MGEwLCAiZ3BkMCIsIDB4MTQpLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg0LCAweDBjMCwgImdwZDEiLCAweDE4KSwKK307CisKKy8qIHBpbiBiYW5rcyBvZiBleHlub3MzMjUwIHBpbi1jb250cm9sbGVyIDEgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19waW5fYmFuayBleHlub3MzMjUwX3Bpbl9iYW5rczFbXSA9IHsKKwlFWFlOT1NfUElOX0JBTktfRUlOVE4oOCwgMHgxMjAsICJncGUwIiksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlROKDgsIDB4MTQwLCAiZ3BlMSIpLAorCUVYWU5PU19QSU5fQkFOS19FSU5UTigzLCAweDE4MCwgImdwZTIiKSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoOCwgMHgwNDAsICJncGswIiwgMHgwOCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDcsIDB4MDYwLCAiZ3BrMSIsIDB4MGMpLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg3LCAweDA4MCwgImdwazIiLCAweDEwKSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNCwgMHgwYzAsICJncGwwIiwgMHgxOCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDgsIDB4MjYwLCAiZ3BtMCIsIDB4MjQpLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg3LCAweDI4MCwgImdwbTEiLCAweDI4KSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNSwgMHgyYTAsICJncG0yIiwgMHgyYyksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDgsIDB4MmMwLCAiZ3BtMyIsIDB4MzApLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg4LCAweDJlMCwgImdwbTQiLCAweDM0KSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVFcoOCwgMHhjMDAsICJncHgwIiwgMHgwMCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRXKDgsIDB4YzIwLCAiZ3B4MSIsIDB4MDQpLAorCUVYWU5PU19QSU5fQkFOS19FSU5UVyg4LCAweGM0MCwgImdweDIiLCAweDA4KSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVFcoOCwgMHhjNjAsICJncHgzIiwgMHgwYyksCit9OworCisvKgorICogU2Ftc3VuZyBwaW5jdHJsIGRyaXZlciBkYXRhIGZvciBFeHlub3MzMjUwIFNvQy4gRXh5bm9zMzI1MCBTb0MgaW5jbHVkZXMKKyAqIHR3byBncGlvL3Bpbi1tdXgvcGluY29uZmlnIGNvbnRyb2xsZXJzLgorICovCitzdHJ1Y3Qgc2Ftc3VuZ19waW5fY3RybCBleHlub3MzMjUwX3Bpbl9jdHJsW10gPSB7CisJeworCQkvKiBwaW4tY29udHJvbGxlciBpbnN0YW5jZSAwIGRhdGEgKi8KKwkJLnBpbl9iYW5rcwk9IGV4eW5vczMyNTBfcGluX2JhbmtzMCwKKwkJLm5yX2JhbmtzCT0gQVJSQVlfU0laRShleHlub3MzMjUwX3Bpbl9iYW5rczApLAorCQkuZ2VpbnRfY29uCT0gRVhZTk9TX0dQSU9fRUNPTl9PRkZTRVQsCisJCS5nZWludF9tYXNrCT0gRVhZTk9TX0dQSU9fRU1BU0tfT0ZGU0VULAorCQkuZ2VpbnRfcGVuZAk9IEVYWU5PU19HUElPX0VQRU5EX09GRlNFVCwKKwkJLnN2YwkJPSBFWFlOT1NfU1ZDX09GRlNFVCwKKwkJLmVpbnRfZ3Bpb19pbml0ID0gZXh5bm9zX2VpbnRfZ3Bpb19pbml0LAorCQkuc3VzcGVuZAk9IGV4eW5vc19waW5jdHJsX3N1c3BlbmQsCisJCS5yZXN1bWUJCT0gZXh5bm9zX3BpbmN0cmxfcmVzdW1lLAorCQkubGFiZWwJCT0gImV4eW5vczMyNTAtZ3Bpby1jdHJsMCIsCisJfSwgeworCQkvKiBwaW4tY29udHJvbGxlciBpbnN0YW5jZSAxIGRhdGEgKi8KKwkJLnBpbl9iYW5rcwk9IGV4eW5vczMyNTBfcGluX2JhbmtzMSwKKwkJLm5yX2JhbmtzCT0gQVJSQVlfU0laRShleHlub3MzMjUwX3Bpbl9iYW5rczEpLAorCQkuZ2VpbnRfY29uCT0gRVhZTk9TX0dQSU9fRUNPTl9PRkZTRVQsCisJCS5nZWludF9tYXNrCT0gRVhZTk9TX0dQSU9fRU1BU0tfT0ZGU0VULAorCQkuZ2VpbnRfcGVuZAk9IEVYWU5PU19HUElPX0VQRU5EX09GRlNFVCwKKwkJLndlaW50X2Nvbgk9IEVYWU5PU19XS1VQX0VDT05fT0ZGU0VULAorCQkud2VpbnRfbWFzawk9IEVYWU5PU19XS1VQX0VNQVNLX09GRlNFVCwKKwkJLndlaW50X3BlbmQJPSBFWFlOT1NfV0tVUF9FUEVORF9PRkZTRVQsCisJCS5zdmMJCT0gRVhZTk9TX1NWQ19PRkZTRVQsCisJCS5laW50X2dwaW9faW5pdCA9IGV4eW5vc19laW50X2dwaW9faW5pdCwKKwkJLmVpbnRfd2t1cF9pbml0ID0gZXh5bm9zX2VpbnRfd2t1cF9pbml0LAorCQkuc3VzcGVuZAk9IGV4eW5vc19waW5jdHJsX3N1c3BlbmQsCisJCS5yZXN1bWUJCT0gZXh5bm9zX3BpbmN0cmxfcmVzdW1lLAorCQkubGFiZWwJCT0gImV4eW5vczMyNTAtZ3Bpby1jdHJsMSIsCisJfSwKK307CisKIC8qIHBpbiBiYW5rcyBvZiBleHlub3M0MjEwIHBpbi1jb250cm9sbGVyIDAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19waW5fYmFuayBleHlub3M0MjEwX3Bpbl9iYW5rczBbXSA9IHsKIAlFWFlOT1NfUElOX0JBTktfRUlOVEcoOCwgMHgwMDAsICJncGEwIiwgMHgwMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1pbXguYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWlteC5jCmluZGV4IGUxMThmYjEuLmEyNDQ0OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWlteC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWlteC5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAkJCXBpbi0+bXV4X21vZGUgfD0gSU9NVVhDX0NPTkZJR19TSU9OOwogCQlwaW4tPmNvbmZpZyA9IGNvbmZpZyAmIH5JTVhfUEFEX1NJT047CiAKLQkJZGV2X2RiZyhpbmZvLT5kZXYsICIlczogJWQgMHglMDhseCIsIGluZm8tPnBpbnNbcGluX2lkXS5uYW1lLAorCQlkZXZfZGJnKGluZm8tPmRldiwgIiVzOiAweCV4IDB4JTA4bHgiLCBpbmZvLT5waW5zW3Bpbl9pZF0ubmFtZSwKIAkJCQlwaW4tPm11eF9tb2RlLCBwaW4tPmNvbmZpZyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1pbXg2c3guYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWlteDZzeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzU4YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1pbXg2c3guYwpAQCAtMCwwICsxLDQwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLWlteC5oIgorCitlbnVtIGlteDZzeF9wYWRzIHsKKwlNWDZTeF9QQURfUkVTRVJWRTAgPSAwLAorCU1YNlN4X1BBRF9SRVNFUlZFMSA9IDEsCisJTVg2U3hfUEFEX1JFU0VSVkUyID0gMiwKKwlNWDZTeF9QQURfUkVTRVJWRTMgPSAzLAorCU1YNlN4X1BBRF9SRVNFUlZFNCA9IDQsCisJTVg2U1hfUEFEX0dQSU8xX0lPMDAgPSA1LAorCU1YNlNYX1BBRF9HUElPMV9JTzAxID0gNiwKKwlNWDZTWF9QQURfR1BJTzFfSU8wMiA9IDcsCisJTVg2U1hfUEFEX0dQSU8xX0lPMDMgPSA4LAorCU1YNlNYX1BBRF9HUElPMV9JTzA0ID0gOSwKKwlNWDZTWF9QQURfR1BJTzFfSU8wNSA9IDEwLAorCU1YNlNYX1BBRF9HUElPMV9JTzA2ID0gMTEsCisJTVg2U1hfUEFEX0dQSU8xX0lPMDcgPSAxMiwKKwlNWDZTWF9QQURfR1BJTzFfSU8wOCA9IDEzLAorCU1YNlNYX1BBRF9HUElPMV9JTzA5ID0gMTQsCisJTVg2U1hfUEFEX0dQSU8xX0lPMTAgPSAxNSwKKwlNWDZTWF9QQURfR1BJTzFfSU8xMSA9IDE2LAorCU1YNlNYX1BBRF9HUElPMV9JTzEyID0gMTcsCisJTVg2U1hfUEFEX0dQSU8xX0lPMTMgPSAxOCwKKwlNWDZTWF9QQURfQ1NJX0RBVEEwMCA9IDE5LAorCU1YNlNYX1BBRF9DU0lfREFUQTAxID0gMjAsCisJTVg2U1hfUEFEX0NTSV9EQVRBMDIgPSAyMSwKKwlNWDZTWF9QQURfQ1NJX0RBVEEwMyA9IDIyLAorCU1YNlNYX1BBRF9DU0lfREFUQTA0ID0gMjMsCisJTVg2U1hfUEFEX0NTSV9EQVRBMDUgPSAyNCwKKwlNWDZTWF9QQURfQ1NJX0RBVEEwNiA9IDI1LAorCU1YNlNYX1BBRF9DU0lfREFUQTA3ID0gMjYsCisJTVg2U1hfUEFEX0NTSV9IU1lOQyA9IDI3LAorCU1YNlNYX1BBRF9DU0lfTUNMSyA9IDI4LAorCU1YNlNYX1BBRF9DU0lfUElYQ0xLID0gMjksCisJTVg2U1hfUEFEX0NTSV9WU1lOQyA9IDMwLAorCU1YNlNYX1BBRF9FTkVUMV9DT0wgPSAzMSwKKwlNWDZTWF9QQURfRU5FVDFfQ1JTID0gMzIsCisJTVg2U1hfUEFEX0VORVQxX01EQyA9IDMzLAorCU1YNlNYX1BBRF9FTkVUMV9NRElPID0gMzQsCisJTVg2U1hfUEFEX0VORVQxX1JYX0NMSyA9IDM1LAorCU1YNlNYX1BBRF9FTkVUMV9UWF9DTEsgPSAzNiwKKwlNWDZTWF9QQURfRU5FVDJfQ09MID0gMzcsCisJTVg2U1hfUEFEX0VORVQyX0NSUyA9IDM4LAorCU1YNlNYX1BBRF9FTkVUMl9SWF9DTEsgPSAzOSwKKwlNWDZTWF9QQURfRU5FVDJfVFhfQ0xLID0gNDAsCisJTVg2U1hfUEFEX0tFWV9DT0wwID0gNDEsCisJTVg2U1hfUEFEX0tFWV9DT0wxID0gNDIsCisJTVg2U1hfUEFEX0tFWV9DT0wyID0gNDMsCisJTVg2U1hfUEFEX0tFWV9DT0wzID0gNDQsCisJTVg2U1hfUEFEX0tFWV9DT0w0ID0gNDUsCisJTVg2U1hfUEFEX0tFWV9ST1cwID0gNDYsCisJTVg2U1hfUEFEX0tFWV9ST1cxID0gNDcsCisJTVg2U1hfUEFEX0tFWV9ST1cyID0gNDgsCisJTVg2U1hfUEFEX0tFWV9ST1czID0gNDksCisJTVg2U1hfUEFEX0tFWV9ST1c0ID0gNTAsCisJTVg2U1hfUEFEX0xDRDFfQ0xLID0gNTEsCisJTVg2U1hfUEFEX0xDRDFfREFUQTAwID0gNTIsCisJTVg2U1hfUEFEX0xDRDFfREFUQTAxID0gNTMsCisJTVg2U1hfUEFEX0xDRDFfREFUQTAyID0gNTQsCisJTVg2U1hfUEFEX0xDRDFfREFUQTAzID0gNTUsCisJTVg2U1hfUEFEX0xDRDFfREFUQTA0ID0gNTYsCisJTVg2U1hfUEFEX0xDRDFfREFUQTA1ID0gNTcsCisJTVg2U1hfUEFEX0xDRDFfREFUQTA2ID0gNTgsCisJTVg2U1hfUEFEX0xDRDFfREFUQTA3ID0gNTksCisJTVg2U1hfUEFEX0xDRDFfREFUQTA4ID0gNjAsCisJTVg2U1hfUEFEX0xDRDFfREFUQTA5ID0gNjEsCisJTVg2U1hfUEFEX0xDRDFfREFUQTEwID0gNjIsCisJTVg2U1hfUEFEX0xDRDFfREFUQTExID0gNjMsCisJTVg2U1hfUEFEX0xDRDFfREFUQTEyID0gNjQsCisJTVg2U1hfUEFEX0xDRDFfREFUQTEzID0gNjUsCisJTVg2U1hfUEFEX0xDRDFfREFUQTE0ID0gNjYsCisJTVg2U1hfUEFEX0xDRDFfREFUQTE1ID0gNjcsCisJTVg2U1hfUEFEX0xDRDFfREFUQTE2ID0gNjgsCisJTVg2U1hfUEFEX0xDRDFfREFUQTE3ID0gNjksCisJTVg2U1hfUEFEX0xDRDFfREFUQTE4ID0gNzAsCisJTVg2U1hfUEFEX0xDRDFfREFUQTE5ID0gNzEsCisJTVg2U1hfUEFEX0xDRDFfREFUQTIwID0gNzIsCisJTVg2U1hfUEFEX0xDRDFfREFUQTIxID0gNzMsCisJTVg2U1hfUEFEX0xDRDFfREFUQTIyID0gNzQsCisJTVg2U1hfUEFEX0xDRDFfREFUQTIzID0gNzUsCisJTVg2U1hfUEFEX0xDRDFfRU5BQkxFID0gNzYsCisJTVg2U1hfUEFEX0xDRDFfSFNZTkMgPSA3NywKKwlNWDZTWF9QQURfTENEMV9SRVNFVCA9IDc4LAorCU1YNlNYX1BBRF9MQ0QxX1ZTWU5DID0gNzksCisJTVg2U1hfUEFEX05BTkRfQUxFID0gODAsCisJTVg2U1hfUEFEX05BTkRfQ0UwX0IgPSA4MSwKKwlNWDZTWF9QQURfTkFORF9DRTFfQiA9IDgyLAorCU1YNlNYX1BBRF9OQU5EX0NMRSA9IDgzLAorCU1YNlNYX1BBRF9OQU5EX0RBVEEwMCA9IDg0ICwKKwlNWDZTWF9QQURfTkFORF9EQVRBMDEgPSA4NSwKKwlNWDZTWF9QQURfTkFORF9EQVRBMDIgPSA4NiwKKwlNWDZTWF9QQURfTkFORF9EQVRBMDMgPSA4NywKKwlNWDZTWF9QQURfTkFORF9EQVRBMDQgPSA4OCwKKwlNWDZTWF9QQURfTkFORF9EQVRBMDUgPSA4OSwKKwlNWDZTWF9QQURfTkFORF9EQVRBMDYgPSA5MCwKKwlNWDZTWF9QQURfTkFORF9EQVRBMDcgPSA5MSwKKwlNWDZTWF9QQURfTkFORF9SRV9CID0gOTIsCisJTVg2U1hfUEFEX05BTkRfUkVBRFlfQiA9IDkzLAorCU1YNlNYX1BBRF9OQU5EX1dFX0IgPSA5NCwKKwlNWDZTWF9QQURfTkFORF9XUF9CID0gOTUsCisJTVg2U1hfUEFEX1FTUEkxQV9EQVRBMCA9IDk2LAorCU1YNlNYX1BBRF9RU1BJMUFfREFUQTEgPSA5NywKKwlNWDZTWF9QQURfUVNQSTFBX0RBVEEyID0gOTgsCisJTVg2U1hfUEFEX1FTUEkxQV9EQVRBMyA9IDk5LAorCU1YNlNYX1BBRF9RU1BJMUFfRFFTID0gMTAwLAorCU1YNlNYX1BBRF9RU1BJMUFfU0NMSyA9IDEwMSwKKwlNWDZTWF9QQURfUVNQSTFBX1NTMF9CID0gMTAyLAorCU1YNlNYX1BBRF9RU1BJMUFfU1MxX0IgPSAxMDMsCisJTVg2U1hfUEFEX1FTUEkxQl9EQVRBMCA9IDEwNCwKKwlNWDZTWF9QQURfUVNQSTFCX0RBVEExID0gMTA1LAorCU1YNlNYX1BBRF9RU1BJMUJfREFUQTIgPSAxMDYsCisJTVg2U1hfUEFEX1FTUEkxQl9EQVRBMyA9IDEwNywKKwlNWDZTWF9QQURfUVNQSTFCX0RRUyA9IDEwOCwKKwlNWDZTWF9QQURfUVNQSTFCX1NDTEsgPSAxMDksCisJTVg2U1hfUEFEX1FTUEkxQl9TUzBfQiA9IDExMCwKKwlNWDZTWF9QQURfUVNQSTFCX1NTMV9CID0gMTExLAorCU1YNlNYX1BBRF9SR01JSTFfUkQwID0gMTEyLAorCU1YNlNYX1BBRF9SR01JSTFfUkQxID0gMTEzLAorCU1YNlNYX1BBRF9SR01JSTFfUkQyID0gMTE0LAorCU1YNlNYX1BBRF9SR01JSTFfUkQzID0gMTE1LAorCU1YNlNYX1BBRF9SR01JSTFfUlhfQ1RMID0gMTE2LAorCU1YNlNYX1BBRF9SR01JSTFfUlhDID0gMTE3LAorCU1YNlNYX1BBRF9SR01JSTFfVEQwID0gMTE4LAorCU1YNlNYX1BBRF9SR01JSTFfVEQxID0gMTE5LAorCU1YNlNYX1BBRF9SR01JSTFfVEQyID0gMTIwLAorCU1YNlNYX1BBRF9SR01JSTFfVEQzID0gMTIxLAorCU1YNlNYX1BBRF9SR01JSTFfVFhfQ1RMID0gMTIyLAorCU1YNlNYX1BBRF9SR01JSTFfVFhDID0gMTIzLAorCU1YNlNYX1BBRF9SR01JSTJfUkQwID0gMTI0LAorCU1YNlNYX1BBRF9SR01JSTJfUkQxID0gMTI1LAorCU1YNlNYX1BBRF9SR01JSTJfUkQyID0gMTI2LAorCU1YNlNYX1BBRF9SR01JSTJfUkQzID0gMTI3LAorCU1YNlNYX1BBRF9SR01JSTJfUlhfQ1RMID0gMTI4LAorCU1YNlNYX1BBRF9SR01JSTJfUlhDID0gMTI5LAorCU1YNlNYX1BBRF9SR01JSTJfVEQwID0gMTMwLAorCU1YNlNYX1BBRF9SR01JSTJfVEQxID0gMTMxLAorCU1YNlNYX1BBRF9SR01JSTJfVEQyID0gMTMyLAorCU1YNlNYX1BBRF9SR01JSTJfVEQzID0gMTMzLAorCU1YNlNYX1BBRF9SR01JSTJfVFhfQ1RMID0gMTM0LAorCU1YNlNYX1BBRF9SR01JSTJfVFhDID0gMTM1LAorCU1YNlNYX1BBRF9TRDFfQ0xLID0gMTM2LAorCU1YNlNYX1BBRF9TRDFfQ01EID0gMTM3LAorCU1YNlNYX1BBRF9TRDFfREFUQTAgPSAxMzgsCisJTVg2U1hfUEFEX1NEMV9EQVRBMSA9IDEzOSwKKwlNWDZTWF9QQURfU0QxX0RBVEEyID0gMTQwLAorCU1YNlNYX1BBRF9TRDFfREFUQTMgPSAxNDEsCisJTVg2U1hfUEFEX1NEMl9DTEsgPSAxNDIsCisJTVg2U1hfUEFEX1NEMl9DTUQgPSAxNDMsCisJTVg2U1hfUEFEX1NEMl9EQVRBMCA9IDE0NCwKKwlNWDZTWF9QQURfU0QyX0RBVEExID0gMTQ1LAorCU1YNlNYX1BBRF9TRDJfREFUQTIgPSAxNDYsCisJTVg2U1hfUEFEX1NEMl9EQVRBMyA9IDE0NywKKwlNWDZTWF9QQURfU0QzX0NMSyA9IDE0OCwKKwlNWDZTWF9QQURfU0QzX0NNRCA9IDE0OSwKKwlNWDZTWF9QQURfU0QzX0RBVEEwID0gMTUwLAorCU1YNlNYX1BBRF9TRDNfREFUQTEgPSAxNTEsCisJTVg2U1hfUEFEX1NEM19EQVRBMiA9IDE1MiwKKwlNWDZTWF9QQURfU0QzX0RBVEEzID0gMTUzLAorCU1YNlNYX1BBRF9TRDNfREFUQTQgPSAxNTQsCisJTVg2U1hfUEFEX1NEM19EQVRBNSA9IDE1NSwKKwlNWDZTWF9QQURfU0QzX0RBVEE2ID0gMTU2LAorCU1YNlNYX1BBRF9TRDNfREFUQTcgPSAxNTcsCisJTVg2U1hfUEFEX1NENF9DTEsgPSAxNTgsCisJTVg2U1hfUEFEX1NENF9DTUQgPSAxNTksCisJTVg2U1hfUEFEX1NENF9EQVRBMCA9IDE2MCwKKwlNWDZTWF9QQURfU0Q0X0RBVEExID0gMTYxLAorCU1YNlNYX1BBRF9TRDRfREFUQTIgPSAxNjIsCisJTVg2U1hfUEFEX1NENF9EQVRBMyA9IDE2MywKKwlNWDZTWF9QQURfU0Q0X0RBVEE0ID0gMTY0LAorCU1YNlNYX1BBRF9TRDRfREFUQTUgPSAxNjUsCisJTVg2U1hfUEFEX1NENF9EQVRBNiA9IDE2NiwKKwlNWDZTWF9QQURfU0Q0X0RBVEE3ID0gMTY3LAorCU1YNlNYX1BBRF9TRDRfUkVTRVRfQiA9IDE2OCwKKwlNWDZTWF9QQURfVVNCX0hfREFUQSA9IDE2OSwKKwlNWDZTWF9QQURfVVNCX0hfU1RST0JFID0gMTcwLAorfTsKKworLyogUGFkIG5hbWVzIGZvciB0aGUgcGlubXV4IHN1YnN5c3RlbSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjIGlteDZzeF9waW5jdHJsX3BhZHNbXSA9IHsKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U3hfUEFEX1JFU0VSVkUwKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U3hfUEFEX1JFU0VSVkUxKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U3hfUEFEX1JFU0VSVkUyKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U3hfUEFEX1JFU0VSVkUzKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U3hfUEFEX1JFU0VSVkU0KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0dQSU8xX0lPMDApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfR1BJTzFfSU8wMSksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9HUElPMV9JTzAyKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0dQSU8xX0lPMDMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfR1BJTzFfSU8wNCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9HUElPMV9JTzA1KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0dQSU8xX0lPMDYpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfR1BJTzFfSU8wNyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9HUElPMV9JTzA4KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0dQSU8xX0lPMDkpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfR1BJTzFfSU8xMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9HUElPMV9JTzExKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0dQSU8xX0lPMTIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfR1BJTzFfSU8xMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9DU0lfREFUQTAwKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0NTSV9EQVRBMDEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfQ1NJX0RBVEEwMiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9DU0lfREFUQTAzKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0NTSV9EQVRBMDQpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfQ1NJX0RBVEEwNSksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9DU0lfREFUQTA2KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0NTSV9EQVRBMDcpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfQ1NJX0hTWU5DKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0NTSV9NQ0xLKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0NTSV9QSVhDTEspLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfQ1NJX1ZTWU5DKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0VORVQxX0NPTCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9FTkVUMV9DUlMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfRU5FVDFfTURDKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0VORVQxX01ESU8pLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfRU5FVDFfUlhfQ0xLKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0VORVQxX1RYX0NMSyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9FTkVUMl9DT0wpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfRU5FVDJfQ1JTKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0VORVQyX1JYX0NMSyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9FTkVUMl9UWF9DTEspLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX0NPTDApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX0NPTDEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX0NPTDIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX0NPTDMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX0NPTDQpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX1JPVzApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX1JPVzEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX1JPVzIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX1JPVzMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfS0VZX1JPVzQpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9DTEspLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDQpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDUpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDYpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDcpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDgpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMDkpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTQpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTUpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTYpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTcpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTgpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMTkpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMjApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMjEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMjIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9EQVRBMjMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9FTkFCTEUpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTENEMV9IU1lOQyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9MQ0QxX1JFU0VUKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX0xDRDFfVlNZTkMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTkFORF9BTEUpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTkFORF9DRTBfQiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9OQU5EX0NFMV9CKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfQ0xFKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTAwKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTAxKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTAyKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTAzKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTA0KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTA1KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTA2KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfREFUQTA3KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfUkVfQiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9OQU5EX1JFQURZX0IpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfTkFORF9XRV9CKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX05BTkRfV1BfQiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUFfREFUQTApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUVNQSTFBX0RBVEExKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1FTUEkxQV9EQVRBMiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUFfREFUQTMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUVNQSTFBX0RRUyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUFfU0NMSyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUFfU1MwX0IpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUVNQSTFBX1NTMV9CKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1FTUEkxQl9EQVRBMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUJfREFUQTEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUVNQSTFCX0RBVEEyKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1FTUEkxQl9EQVRBMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUJfRFFTKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1FTUEkxQl9TQ0xLKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1FTUEkxQl9TUzBfQiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9RU1BJMUJfU1MxX0IpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkxX1JEMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTFfUkQxKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMV9SRDIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkxX1JEMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTFfUlhfQ1RMKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMV9SWEMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkxX1REMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTFfVEQxKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMV9URDIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkxX1REMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTFfVFhfQ1RMKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMV9UWEMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkyX1JEMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTJfUkQxKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMl9SRDIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkyX1JEMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTJfUlhfQ1RMKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMl9SWEMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkyX1REMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTJfVEQxKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMl9URDIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfUkdNSUkyX1REMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9SR01JSTJfVFhfQ1RMKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1JHTUlJMl9UWEMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QxX0NMSyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDFfQ01EKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEMV9EQVRBMCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDFfREFUQTEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QxX0RBVEEyKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEMV9EQVRBMyksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDJfQ0xLKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEMl9DTUQpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QyX0RBVEEwKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEMl9EQVRBMSksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDJfREFUQTIpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QyX0RBVEEzKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEM19DTEspLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QzX0NNRCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDNfREFUQTApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QzX0RBVEExKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEM19EQVRBMiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDNfREFUQTMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QzX0RBVEE0KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NEM19EQVRBNSksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDNfREFUQTYpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0QzX0RBVEE3KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NENF9DTEspLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0Q0X0NNRCksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDRfREFUQTApLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0Q0X0RBVEExKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NENF9EQVRBMiksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDRfREFUQTMpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0Q0X0RBVEE0KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NENF9EQVRBNSksCisJSU1YX1BJTkNUUkxfUElOKE1YNlNYX1BBRF9TRDRfREFUQTYpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfU0Q0X0RBVEE3KSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1NENF9SRVNFVF9CKSwKKwlJTVhfUElOQ1RSTF9QSU4oTVg2U1hfUEFEX1VTQl9IX0RBVEEpLAorCUlNWF9QSU5DVFJMX1BJTihNWDZTWF9QQURfVVNCX0hfU1RST0JFKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X3BpbmN0cmxfc29jX2luZm8gaW14NnN4X3BpbmN0cmxfaW5mbyA9IHsKKwkucGlucyA9IGlteDZzeF9waW5jdHJsX3BhZHMsCisJLm5waW5zID0gQVJSQVlfU0laRShpbXg2c3hfcGluY3RybF9wYWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteDZzeF9waW5jdHJsX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LWlvbXV4YyIsIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworCitzdGF0aWMgaW50IGlteDZzeF9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGlteF9waW5jdHJsX3Byb2JlKHBkZXYsICZpbXg2c3hfcGluY3RybF9pbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14NnN4X3BpbmN0cmxfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImlteDZzeC1waW5jdHJsIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihpbXg2c3hfcGluY3RybF9vZl9tYXRjaCksCisJfSwKKwkucHJvYmUgPSBpbXg2c3hfcGluY3RybF9wcm9iZSwKKwkucmVtb3ZlID0gaW14X3BpbmN0cmxfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW14NnN4X3BpbmN0cmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteDZzeF9waW5jdHJsX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKGlteDZzeF9waW5jdHJsX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaW14NnN4X3BpbmN0cmxfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXg2c3hfcGluY3RybF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoaW14NnN4X3BpbmN0cmxfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFuc29uIEh1YW5nIDxBbnNvbi5IdWFuZ0BmcmVlc2NhbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgaW14NnN4IHBpbmN0cmwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1pcHE4MDY0LmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1pcHE4MDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhZmVhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWlwcTgwNjQuYwpAQCAtMCwwICsxLDY1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLW1zbS5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBpbmN0cmxfcGluX2Rlc2MgaXBxODA2NF9waW5zW10gPSB7CisJUElOQ1RSTF9QSU4oMCwgIkdQSU9fMCIpLAorCVBJTkNUUkxfUElOKDEsICJHUElPXzEiKSwKKwlQSU5DVFJMX1BJTigyLCAiR1BJT18yIiksCisJUElOQ1RSTF9QSU4oMywgIkdQSU9fMyIpLAorCVBJTkNUUkxfUElOKDQsICJHUElPXzQiKSwKKwlQSU5DVFJMX1BJTig1LCAiR1BJT181IiksCisJUElOQ1RSTF9QSU4oNiwgIkdQSU9fNiIpLAorCVBJTkNUUkxfUElOKDcsICJHUElPXzciKSwKKwlQSU5DVFJMX1BJTig4LCAiR1BJT184IiksCisJUElOQ1RSTF9QSU4oOSwgIkdQSU9fOSIpLAorCVBJTkNUUkxfUElOKDEwLCAiR1BJT18xMCIpLAorCVBJTkNUUkxfUElOKDExLCAiR1BJT18xMSIpLAorCVBJTkNUUkxfUElOKDEyLCAiR1BJT18xMiIpLAorCVBJTkNUUkxfUElOKDEzLCAiR1BJT18xMyIpLAorCVBJTkNUUkxfUElOKDE0LCAiR1BJT18xNCIpLAorCVBJTkNUUkxfUElOKDE1LCAiR1BJT18xNSIpLAorCVBJTkNUUkxfUElOKDE2LCAiR1BJT18xNiIpLAorCVBJTkNUUkxfUElOKDE3LCAiR1BJT18xNyIpLAorCVBJTkNUUkxfUElOKDE4LCAiR1BJT18xOCIpLAorCVBJTkNUUkxfUElOKDE5LCAiR1BJT18xOSIpLAorCVBJTkNUUkxfUElOKDIwLCAiR1BJT18yMCIpLAorCVBJTkNUUkxfUElOKDIxLCAiR1BJT18yMSIpLAorCVBJTkNUUkxfUElOKDIyLCAiR1BJT18yMiIpLAorCVBJTkNUUkxfUElOKDIzLCAiR1BJT18yMyIpLAorCVBJTkNUUkxfUElOKDI0LCAiR1BJT18yNCIpLAorCVBJTkNUUkxfUElOKDI1LCAiR1BJT18yNSIpLAorCVBJTkNUUkxfUElOKDI2LCAiR1BJT18yNiIpLAorCVBJTkNUUkxfUElOKDI3LCAiR1BJT18yNyIpLAorCVBJTkNUUkxfUElOKDI4LCAiR1BJT18yOCIpLAorCVBJTkNUUkxfUElOKDI5LCAiR1BJT18yOSIpLAorCVBJTkNUUkxfUElOKDMwLCAiR1BJT18zMCIpLAorCVBJTkNUUkxfUElOKDMxLCAiR1BJT18zMSIpLAorCVBJTkNUUkxfUElOKDMyLCAiR1BJT18zMiIpLAorCVBJTkNUUkxfUElOKDMzLCAiR1BJT18zMyIpLAorCVBJTkNUUkxfUElOKDM0LCAiR1BJT18zNCIpLAorCVBJTkNUUkxfUElOKDM1LCAiR1BJT18zNSIpLAorCVBJTkNUUkxfUElOKDM2LCAiR1BJT18zNiIpLAorCVBJTkNUUkxfUElOKDM3LCAiR1BJT18zNyIpLAorCVBJTkNUUkxfUElOKDM4LCAiR1BJT18zOCIpLAorCVBJTkNUUkxfUElOKDM5LCAiR1BJT18zOSIpLAorCVBJTkNUUkxfUElOKDQwLCAiR1BJT180MCIpLAorCVBJTkNUUkxfUElOKDQxLCAiR1BJT180MSIpLAorCVBJTkNUUkxfUElOKDQyLCAiR1BJT180MiIpLAorCVBJTkNUUkxfUElOKDQzLCAiR1BJT180MyIpLAorCVBJTkNUUkxfUElOKDQ0LCAiR1BJT180NCIpLAorCVBJTkNUUkxfUElOKDQ1LCAiR1BJT180NSIpLAorCVBJTkNUUkxfUElOKDQ2LCAiR1BJT180NiIpLAorCVBJTkNUUkxfUElOKDQ3LCAiR1BJT180NyIpLAorCVBJTkNUUkxfUElOKDQ4LCAiR1BJT180OCIpLAorCVBJTkNUUkxfUElOKDQ5LCAiR1BJT180OSIpLAorCVBJTkNUUkxfUElOKDUwLCAiR1BJT181MCIpLAorCVBJTkNUUkxfUElOKDUxLCAiR1BJT181MSIpLAorCVBJTkNUUkxfUElOKDUyLCAiR1BJT181MiIpLAorCVBJTkNUUkxfUElOKDUzLCAiR1BJT181MyIpLAorCVBJTkNUUkxfUElOKDU0LCAiR1BJT181NCIpLAorCVBJTkNUUkxfUElOKDU1LCAiR1BJT181NSIpLAorCVBJTkNUUkxfUElOKDU2LCAiR1BJT181NiIpLAorCVBJTkNUUkxfUElOKDU3LCAiR1BJT181NyIpLAorCVBJTkNUUkxfUElOKDU4LCAiR1BJT181OCIpLAorCVBJTkNUUkxfUElOKDU5LCAiR1BJT181OSIpLAorCVBJTkNUUkxfUElOKDYwLCAiR1BJT182MCIpLAorCVBJTkNUUkxfUElOKDYxLCAiR1BJT182MSIpLAorCVBJTkNUUkxfUElOKDYyLCAiR1BJT182MiIpLAorCVBJTkNUUkxfUElOKDYzLCAiR1BJT182MyIpLAorCVBJTkNUUkxfUElOKDY0LCAiR1BJT182NCIpLAorCVBJTkNUUkxfUElOKDY1LCAiR1BJT182NSIpLAorCVBJTkNUUkxfUElOKDY2LCAiR1BJT182NiIpLAorCVBJTkNUUkxfUElOKDY3LCAiR1BJT182NyIpLAorCVBJTkNUUkxfUElOKDY4LCAiR1BJT182OCIpLAorCisJUElOQ1RSTF9QSU4oNjksICJTREMzX0NMSyIpLAorCVBJTkNUUkxfUElOKDcwLCAiU0RDM19DTUQiKSwKKwlQSU5DVFJMX1BJTig3MSwgIlNEQzNfREFUQSIpLAorfTsKKworI2RlZmluZSBERUNMQVJFX0lQUV9HUElPX1BJTlMocGluKSBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGdwaW8jI3BpbiMjX3BpbnNbXSA9IHsgcGluIH0KK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygwKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygxKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygyKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygzKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg0KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg1KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg2KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg3KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg4KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg5KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygxMCk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMTEpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDEyKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygxMyk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMTQpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDE1KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygxNik7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMTcpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDE4KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygxOSk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMjApOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDIxKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygyMik7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMjMpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDI0KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygyNSk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMjYpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDI3KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygyOCk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMjkpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDMwKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygzMSk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMzIpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDMzKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygzNCk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMzUpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDM2KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUygzNyk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoMzgpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDM5KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg0MCk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNDEpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDQyKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg0Myk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNDQpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDQ1KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg0Nik7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNDcpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDQ4KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg0OSk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNTApOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDUxKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg1Mik7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNTMpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDU0KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg1NSk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNTYpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDU3KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg1OCk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNTkpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDYwKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg2MSk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNjIpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDYzKTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg2NCk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNjUpOworREVDTEFSRV9JUFFfR1BJT19QSU5TKDY2KTsKK0RFQ0xBUkVfSVBRX0dQSU9fUElOUyg2Nyk7CitERUNMQVJFX0lQUV9HUElPX1BJTlMoNjgpOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkYzNfY2xrX3BpbnNbXSA9IHsgNjkgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RjM19jbWRfcGluc1tdID0geyA3MCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGMzX2RhdGFfcGluc1tdID0geyA3MSB9OworCisjZGVmaW5lIEZVTkNUSU9OKGZuYW1lKQkJCQkJXAorCVtJUFFfTVVYXyMjZm5hbWVdID0gewkJCQlcCisJCS5uYW1lID0gI2ZuYW1lLAkJCQlcCisJCS5ncm91cHMgPSBmbmFtZSMjX2dyb3VwcywJCVwKKwkJLm5ncm91cHMgPSBBUlJBWV9TSVpFKGZuYW1lIyNfZ3JvdXBzKSwJXAorCX0KKworI2RlZmluZSBQSU5HUk9VUChpZCwgZjEsIGYyLCBmMywgZjQsIGY1LCBmNiwgZjcsIGY4LCBmOSwgZjEwKSBcCisJewkJCQkJCVwKKwkJLm5hbWUgPSAiZ3BpbyIgI2lkLAkJCVwKKwkJLnBpbnMgPSBncGlvIyNpZCMjX3BpbnMsCQlcCisJCS5ucGlucyA9IEFSUkFZX1NJWkUoZ3BpbyMjaWQjI19waW5zKSwJXAorCQkuZnVuY3MgPSAoaW50W10pewkJCVwKKwkJCUlQUV9NVVhfTkEsIC8qIGdwaW8gbW9kZSAqLwlcCisJCQlJUFFfTVVYXyMjZjEsCQkJXAorCQkJSVBRX01VWF8jI2YyLAkJCVwKKwkJCUlQUV9NVVhfIyNmMywJCQlcCisJCQlJUFFfTVVYXyMjZjQsCQkJXAorCQkJSVBRX01VWF8jI2Y1LAkJCVwKKwkJCUlQUV9NVVhfIyNmNiwJCQlcCisJCQlJUFFfTVVYXyMjZjcsCQkJXAorCQkJSVBRX01VWF8jI2Y4LAkJCVwKKwkJCUlQUV9NVVhfIyNmOSwJCQlcCisJCQlJUFFfTVVYXyMjZjEwLAkJCVwKKwkJfSwJCQkJCVwKKwkJLm5mdW5jcyA9IDExLAkJCQlcCisJCS5jdGxfcmVnID0gMHgxMDAwICsgMHgxMCAqIGlkLAkJXAorCQkuaW9fcmVnID0gMHgxMDA0ICsgMHgxMCAqIGlkLAkJXAorCQkuaW50cl9jZmdfcmVnID0gMHgxMDA4ICsgMHgxMCAqIGlkLAlcCisJCS5pbnRyX3N0YXR1c19yZWcgPSAweDEwMGMgKyAweDEwICogaWQsCVwKKwkJLmludHJfdGFyZ2V0X3JlZyA9IDB4NDAwICsgMHg0ICogaWQsCVwKKwkJLm11eF9iaXQgPSAyLAkJCQlcCisJCS5wdWxsX2JpdCA9IDAsCQkJCVwKKwkJLmRydl9iaXQgPSA2LAkJCQlcCisJCS5vZV9iaXQgPSA5LAkJCQlcCisJCS5pbl9iaXQgPSAwLAkJCQlcCisJCS5vdXRfYml0ID0gMSwJCQkJXAorCQkuaW50cl9lbmFibGVfYml0ID0gMCwJCQlcCisJCS5pbnRyX3N0YXR1c19iaXQgPSAwLAkJCVwKKwkJLmludHJfYWNrX2hpZ2ggPSAxLAkJCVwKKwkJLmludHJfdGFyZ2V0X2JpdCA9IDAsCQkJXAorCQkuaW50cl9yYXdfc3RhdHVzX2JpdCA9IDMsCQlcCisJCS5pbnRyX3BvbGFyaXR5X2JpdCA9IDEsCQkJXAorCQkuaW50cl9kZXRlY3Rpb25fYml0ID0gMiwJCVwKKwkJLmludHJfZGV0ZWN0aW9uX3dpZHRoID0gMSwJCVwKKwl9CisKKyNkZWZpbmUgU0RDX1BJTkdST1VQKHBnX25hbWUsIGN0bCwgcHVsbCwgZHJ2KQkJXAorCXsJCQkJCQlcCisJCS5uYW1lID0gI3BnX25hbWUsCSAgICAgICAgICAgICAgICBcCisJCS5waW5zID0gcGdfbmFtZSMjX3BpbnMsICAgICAgICAgICAgICAgICBcCisJCS5ucGlucyA9IEFSUkFZX1NJWkUocGdfbmFtZSMjX3BpbnMpLCAgICBcCisJCS5jdGxfcmVnID0gY3RsLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5pb19yZWcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX2NmZ19yZWcgPSAwLCAgICAgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX3N0YXR1c19yZWcgPSAwLCAgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX3RhcmdldF9yZWcgPSAwLCAgICAgICAgICAgICAgICAgICBcCisJCS5tdXhfYml0ID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5wdWxsX2JpdCA9IHB1bGwsICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5kcnZfYml0ID0gZHJ2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5vZV9iaXQgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5pbl9iaXQgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5vdXRfYml0ID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX2VuYWJsZV9iaXQgPSAtMSwgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX3N0YXR1c19iaXQgPSAtMSwgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX3RhcmdldF9iaXQgPSAtMSwgICAgICAgICAgICAgICAgICBcCisJCS5pbnRyX3Jhd19zdGF0dXNfYml0ID0gLTEsICAgICAgICAgICAgICBcCisJCS5pbnRyX3BvbGFyaXR5X2JpdCA9IC0xLCAgICAgICAgICAgICAgICBcCisJCS5pbnRyX2RldGVjdGlvbl9iaXQgPSAtMSwgICAgICAgICAgICAgICBcCisJCS5pbnRyX2RldGVjdGlvbl93aWR0aCA9IC0xLCAgICAgICAgICAgICBcCisJfQorCitlbnVtIGlwcTgwNjRfZnVuY3Rpb25zIHsKKwlJUFFfTVVYX21kaW8sCisJSVBRX01VWF9taTJzLAorCUlQUV9NVVhfcGRtLAorCUlQUV9NVVhfc3NiaSwKKwlJUFFfTVVYX3NwbWksCisJSVBRX01VWF9hdWRpb19wY20sCisJSVBRX01VWF9nc2JpMSwKKwlJUFFfTVVYX2dzYmkyLAorCUlQUV9NVVhfZ3NiaTQsCisJSVBRX01VWF9nc2JpNSwKKwlJUFFfTVVYX2dzYmk1X3NwaV9jczEsCisJSVBRX01VWF9nc2JpNV9zcGlfY3MyLAorCUlQUV9NVVhfZ3NiaTVfc3BpX2NzMywKKwlJUFFfTVVYX2dzYmk2LAorCUlQUV9NVVhfZ3NiaTcsCisJSVBRX01VWF9uc3Nfc3BpLAorCUlQUV9NVVhfc2RjMSwKKwlJUFFfTVVYX3NwZGlmLAorCUlQUV9NVVhfbmFuZCwKKwlJUFFfTVVYX3RzaWYxLAorCUlQUV9NVVhfdHNpZjIsCisJSVBRX01VWF91c2JfZnNfbiwKKwlJUFFfTVVYX3VzYl9mcywKKwlJUFFfTVVYX3VzYjJfaHNpYywKKwlJUFFfTVVYX3JnbWlpMiwKKwlJUFFfTVVYX3NhdGEsCisJSVBRX01VWF9wY2llMV9yc3QsCisJSVBRX01VWF9wY2llMV9wcnNudCwKKwlJUFFfTVVYX3BjaWUxX3B3cmZsdCwKKwlJUFFfTVVYX3BjaWUxX3B3cmVuX24sCisJSVBRX01VWF9wY2llMV9wd3JlbiwKKwlJUFFfTVVYX3BjaWUxX2Nsa19yZXEsCisJSVBRX01VWF9wY2llMl9yc3QsCisJSVBRX01VWF9wY2llMl9wcnNudCwKKwlJUFFfTVVYX3BjaWUyX3B3cmZsdCwKKwlJUFFfTVVYX3BjaWUyX3B3cmVuX24sCisJSVBRX01VWF9wY2llMl9wd3JlbiwKKwlJUFFfTVVYX3BjaWUyX2Nsa19yZXEsCisJSVBRX01VWF9wY2llM19yc3QsCisJSVBRX01VWF9wY2llM19wcnNudCwKKwlJUFFfTVVYX3BjaWUzX3B3cmZsdCwKKwlJUFFfTVVYX3BjaWUzX3B3cmVuX24sCisJSVBRX01VWF9wY2llM19wd3JlbiwKKwlJUFFfTVVYX3BjaWUzX2Nsa19yZXEsCisJSVBRX01VWF9wc19ob2xkLAorCUlQUV9NVVhfTkEsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1kaW9fZ3JvdXBzW10gPSB7CisJImdwaW8wIiwgImdwaW8xIiwgImdwaW8xMCIsICJncGlvMTEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtaTJzX2dyb3Vwc1tdID0geworCSJncGlvMjciLCAiZ3BpbzI4IiwgImdwaW8yOSIsICJncGlvMzAiLCAiZ3BpbzMxIiwgImdwaW8zMiIsCisJImdwaW8zMyIsICJncGlvNTUiLCAiZ3BpbzU2IiwgImdwaW81NyIsICJncGlvNTgiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZG1fZ3JvdXBzW10gPSB7CisJImdwaW8zIiwgImdwaW8xNiIsICJncGlvMTciLCAiZ3BpbzIyIiwgImdwaW8zMCIsICJncGlvMzEiLAorCSJncGlvMzQiLCAiZ3BpbzM1IiwgImdwaW81MiIsICJncGlvNTUiLCAiZ3BpbzU2IiwgImdwaW81OCIsCisJImdwaW81OSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNzYmlfZ3JvdXBzW10gPSB7CisJImdwaW8xMCIsICJncGlvMTEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcG1pX2dyb3Vwc1tdID0geworCSJncGlvMTAiLCAiZ3BpbzExIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXVkaW9fcGNtX2dyb3Vwc1tdID0geworCSJncGlvMTQiLCAiZ3BpbzE1IiwgImdwaW8xNiIsICJncGlvMTciLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzUxIiwgImdwaW81MiIsICJncGlvNTMiLCAiZ3BpbzU0IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTJfZ3JvdXBzW10gPSB7CisJImdwaW8yMiIsICJncGlvMjMiLCAiZ3BpbzI0IiwgImdwaW8yNSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzYmk0X2dyb3Vwc1tdID0geworCSJncGlvMTAiLCAiZ3BpbzExIiwgImdwaW8xMiIsICJncGlvMTMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpNV9ncm91cHNbXSA9IHsKKwkiZ3BpbzE4IiwgImdwaW8xOSIsICJncGlvMjAiLCAiZ3BpbzIxIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTVfc3BpX2NzMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzYiLCAiZ3BpbzYxIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTVfc3BpX2NzMl9ncm91cHNbXSA9IHsKKwkiZ3BpbzciLCAiZ3BpbzYyIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTVfc3BpX2NzM19ncm91cHNbXSA9IHsKKwkiZ3BpbzIiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc2JpNl9ncm91cHNbXSA9IHsKKwkiZ3BpbzI3IiwgImdwaW8yOCIsICJncGlvMjkiLCAiZ3BpbzMwIiwgImdwaW81NSIsICJncGlvNTYiLAorCSJncGlvNTciLCAiZ3BpbzU4IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NiaTdfZ3JvdXBzW10gPSB7CisJImdwaW82IiwgImdwaW83IiwgImdwaW84IiwgImdwaW85IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbnNzX3NwaV9ncm91cHNbXSA9IHsKKwkiZ3BpbzE0IiwgImdwaW8xNSIsICJncGlvMTYiLCAiZ3BpbzE3IiwgImdwaW81NSIsICJncGlvNTYiLAorCSJncGlvNTciLCAiZ3BpbzU4IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RjMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzM4IiwgImdwaW8zOSIsICJncGlvNDAiLCAiZ3BpbzQxIiwgImdwaW80MiIsICJncGlvNDMiLAorCSJncGlvNDQiLCAiZ3BpbzQ1IiwgImdwaW80NiIsICJncGlvNDciLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcGRpZl9ncm91cHNbXSA9IHsKKwkiZ3BpbzEwIiwgImdwaW80OCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbmRfZ3JvdXBzW10gPSB7CisJImdwaW8zNCIsICJncGlvMzUiLCAiZ3BpbzM2IiwgImdwaW8zNyIsICJncGlvMzgiLCAiZ3BpbzM5IiwKKwkiZ3BpbzQwIiwgImdwaW80MSIsICJncGlvNDIiLCAiZ3BpbzQzIiwgImdwaW80NCIsICJncGlvNDUiLAorCSJncGlvNDYiLCAiZ3BpbzQ3IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHNpZjFfZ3JvdXBzW10gPSB7CisJImdwaW81NSIsICJncGlvNTYiLCAiZ3BpbzU3IiwgImdwaW81OCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRzaWYyX2dyb3Vwc1tdID0geworCSJncGlvNTkiLCAiZ3BpbzYwIiwgImdwaW82MSIsICJncGlvNjIiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2JfZnNfbl9ncm91cHNbXSA9IHsKKwkiZ3BpbzYiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2JfZnNfZ3JvdXBzW10gPSB7CisJImdwaW82IiwgImdwaW83IiwgImdwaW84IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNiMl9oc2ljX2dyb3Vwc1tdID0geworCSJncGlvNjciLCAiZ3BpbzY4IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmdtaWkyX2dyb3Vwc1tdID0geworCSJncGlvMjciLCAiZ3BpbzI4IiwgImdwaW8yOSIsICJncGlvMzAiLCAiZ3BpbzMxIiwgImdwaW8zMiIsCisJImdwaW81MSIsICJncGlvNTIiLCAiZ3BpbzU5IiwgImdwaW82MCIsICJncGlvNjEiLCAiZ3BpbzYyIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2F0YV9ncm91cHNbXSA9IHsKKwkiZ3BpbzEwIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNpZTFfcnN0X2dyb3Vwc1tdID0geworCSJncGlvMyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBjaWUxX3Byc250X2dyb3Vwc1tdID0geworCSJncGlvMyIsICJncGlvMTEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llMV9wd3Jlbl9uX2dyb3Vwc1tdID0geworCSJncGlvNCIsICJncGlvMTIiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llMV9wd3Jlbl9ncm91cHNbXSA9IHsKKwkiZ3BpbzQiLCAiZ3BpbzEyIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNpZTFfcHdyZmx0X2dyb3Vwc1tdID0geworCSJncGlvNSIsICJncGlvMTMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llMV9jbGtfcmVxX2dyb3Vwc1tdID0geworCSJncGlvNSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBjaWUyX3JzdF9ncm91cHNbXSA9IHsKKwkiZ3BpbzQ4IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNpZTJfcHJzbnRfZ3JvdXBzW10gPSB7CisJImdwaW8xMSIsICJncGlvNDgiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llMl9wd3Jlbl9uX2dyb3Vwc1tdID0geworCSJncGlvMTIiLCAiZ3BpbzQ5IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNpZTJfcHdyZW5fZ3JvdXBzW10gPSB7CisJImdwaW8xMiIsICJncGlvNDkiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llMl9wd3JmbHRfZ3JvdXBzW10gPSB7CisJImdwaW8xMyIsICJncGlvNTAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llMl9jbGtfcmVxX2dyb3Vwc1tdID0geworCSJncGlvNTAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llM19yc3RfZ3JvdXBzW10gPSB7CisJImdwaW82MyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBjaWUzX3Byc250X2dyb3Vwc1tdID0geworCSJncGlvMTEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llM19wd3Jlbl9uX2dyb3Vwc1tdID0geworCSJncGlvMTIiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llM19wd3Jlbl9ncm91cHNbXSA9IHsKKwkiZ3BpbzEyIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNpZTNfcHdyZmx0X2dyb3Vwc1tdID0geworCSJncGlvMTMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY2llM19jbGtfcmVxX2dyb3Vwc1tdID0geworCSJncGlvNjUiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwc19ob2xkX2dyb3Vwc1tdID0geworCSJncGlvMjYiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fZnVuY3Rpb24gaXBxODA2NF9mdW5jdGlvbnNbXSA9IHsKKwlGVU5DVElPTihtZGlvKSwKKwlGVU5DVElPTihzc2JpKSwKKwlGVU5DVElPTihzcG1pKSwKKwlGVU5DVElPTihtaTJzKSwKKwlGVU5DVElPTihwZG0pLAorCUZVTkNUSU9OKGF1ZGlvX3BjbSksCisJRlVOQ1RJT04oZ3NiaTEpLAorCUZVTkNUSU9OKGdzYmkyKSwKKwlGVU5DVElPTihnc2JpNCksCisJRlVOQ1RJT04oZ3NiaTUpLAorCUZVTkNUSU9OKGdzYmk1X3NwaV9jczEpLAorCUZVTkNUSU9OKGdzYmk1X3NwaV9jczIpLAorCUZVTkNUSU9OKGdzYmk1X3NwaV9jczMpLAorCUZVTkNUSU9OKGdzYmk2KSwKKwlGVU5DVElPTihnc2JpNyksCisJRlVOQ1RJT04obnNzX3NwaSksCisJRlVOQ1RJT04oc2RjMSksCisJRlVOQ1RJT04oc3BkaWYpLAorCUZVTkNUSU9OKG5hbmQpLAorCUZVTkNUSU9OKHRzaWYxKSwKKwlGVU5DVElPTih0c2lmMiksCisJRlVOQ1RJT04odXNiX2ZzX24pLAorCUZVTkNUSU9OKHVzYl9mcyksCisJRlVOQ1RJT04odXNiMl9oc2ljKSwKKwlGVU5DVElPTihyZ21paTIpLAorCUZVTkNUSU9OKHNhdGEpLAorCUZVTkNUSU9OKHBjaWUxX3JzdCksCisJRlVOQ1RJT04ocGNpZTFfcHJzbnQpLAorCUZVTkNUSU9OKHBjaWUxX3B3cmVuX24pLAorCUZVTkNUSU9OKHBjaWUxX3B3cmVuKSwKKwlGVU5DVElPTihwY2llMV9wd3JmbHQpLAorCUZVTkNUSU9OKHBjaWUxX2Nsa19yZXEpLAorCUZVTkNUSU9OKHBjaWUyX3JzdCksCisJRlVOQ1RJT04ocGNpZTJfcHJzbnQpLAorCUZVTkNUSU9OKHBjaWUyX3B3cmVuX24pLAorCUZVTkNUSU9OKHBjaWUyX3B3cmVuKSwKKwlGVU5DVElPTihwY2llMl9wd3JmbHQpLAorCUZVTkNUSU9OKHBjaWUyX2Nsa19yZXEpLAorCUZVTkNUSU9OKHBjaWUzX3JzdCksCisJRlVOQ1RJT04ocGNpZTNfcHJzbnQpLAorCUZVTkNUSU9OKHBjaWUzX3B3cmVuX24pLAorCUZVTkNUSU9OKHBjaWUzX3B3cmVuKSwKKwlGVU5DVElPTihwY2llM19wd3JmbHQpLAorCUZVTkNUSU9OKHBjaWUzX2Nsa19yZXEpLAorCUZVTkNUSU9OKHBzX2hvbGQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgaXBxODA2NF9ncm91cHNbXSA9IHsKKwlQSU5HUk9VUCgwLCBtZGlvLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxLCBtZGlvLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyLCBnc2JpNV9zcGlfY3MzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzLCBwY2llMV9yc3QsIHBjaWUxX3Byc250LCBwZG0sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0LCBwY2llMV9wd3Jlbl9uLCBwY2llMV9wd3JlbiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1LCBwY2llMV9jbGtfcmVxLCBwY2llMV9wd3JmbHQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNiwgZ3NiaTcsIHVzYl9mcywgZ3NiaTVfc3BpX2NzMSwgdXNiX2ZzX24sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDcsIGdzYmk3LCB1c2JfZnMsIGdzYmk1X3NwaV9jczIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4LCBnc2JpNywgdXNiX2ZzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDksIGdzYmk3LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMCwgZ3NiaTQsIHNwZGlmLCBzYXRhLCBzc2JpLCBtZGlvLCBzcG1pLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTEsIGdzYmk0LCBwY2llMl9wcnNudCwgcGNpZTFfcHJzbnQsIHBjaWUzX3Byc250LCBzc2JpLCBtZGlvLCBzcG1pLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMiwgZ3NiaTQsIHBjaWUyX3B3cmVuX24sIHBjaWUxX3B3cmVuX24sIHBjaWUzX3B3cmVuX24sIHBjaWUyX3B3cmVuLCBwY2llMV9wd3JlbiwgcGNpZTNfcHdyZW4sIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEzLCBnc2JpNCwgcGNpZTJfcHdyZmx0LCBwY2llMV9wd3JmbHQsIHBjaWUzX3B3cmZsdCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTQsIGF1ZGlvX3BjbSwgbnNzX3NwaSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNSwgYXVkaW9fcGNtLCBuc3Nfc3BpLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE2LCBhdWRpb19wY20sIG5zc19zcGksIHBkbSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE3LCBhdWRpb19wY20sIG5zc19zcGksIHBkbSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE4LCBnc2JpNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTksIGdzYmk1LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyMCwgZ3NiaTUsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDIxLCBnc2JpNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjIsIGdzYmkyLCBwZG0sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjMsIGdzYmkyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyNCwgZ3NiaTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDI1LCBnc2JpMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjYsIHBzX2hvbGQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDI3LCBtaTJzLCByZ21paTIsIGdzYmk2LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjgsIG1pMnMsIHJnbWlpMiwgZ3NiaTYsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyOSwgbWkycywgcmdtaWkyLCBnc2JpNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMwLCBtaTJzLCByZ21paTIsIGdzYmk2LCBwZG0sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMxLCBtaTJzLCByZ21paTIsIHBkbSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMyLCBtaTJzLCByZ21paTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzMsIG1pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM0LCBuYW5kLCBwZG0sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzUsIG5hbmQsIHBkbSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzNiwgbmFuZCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzcsIG5hbmQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM4LCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM5LCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQwLCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQxLCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQyLCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQzLCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ0LCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ1LCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ2LCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ3LCBuYW5kLCBzZGMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ4LCBwY2llMl9yc3QsIHNwZGlmLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ5LCBwY2llMl9wd3Jlbl9uLCBwY2llMl9wd3JlbiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1MCwgcGNpZTJfY2xrX3JlcSwgcGNpZTJfcHdyZmx0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUxLCBnc2JpMSwgcmdtaWkyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUyLCBnc2JpMSwgcmdtaWkyLCBwZG0sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1MywgZ3NiaTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDU0LCBnc2JpMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTUsIHRzaWYxLCBtaTJzLCBnc2JpNiwgcGRtLCBuc3Nfc3BpLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDU2LCB0c2lmMSwgbWkycywgZ3NiaTYsIHBkbSwgbnNzX3NwaSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1NywgdHNpZjEsIG1pMnMsIGdzYmk2LCBuc3Nfc3BpLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1OCwgdHNpZjEsIG1pMnMsIGdzYmk2LCBwZG0sIG5zc19zcGksIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTksIHRzaWYyLCByZ21paTIsIHBkbSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDYwLCB0c2lmMiwgcmdtaWkyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDYxLCB0c2lmMiwgcmdtaWkyLCBnc2JpNV9zcGlfY3MxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjIsIHRzaWYyLCByZ21paTIsIGdzYmk1X3NwaV9jczIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2MywgcGNpZTNfcnN0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY1LCBwY2llM19jbGtfcmVxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY3LCB1c2IyX2hzaWMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY4LCB1c2IyX2hzaWMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVNEQ19QSU5HUk9VUChzZGMzX2NsaywgMHgyMDRhLCAxNCwgNiksCisJU0RDX1BJTkdST1VQKHNkYzNfY21kLCAweDIwNGEsIDExLCAzKSwKKwlTRENfUElOR1JPVVAoc2RjM19kYXRhLCAweDIwNGEsIDksIDApLAorfTsKKworI2RlZmluZSBOVU1fR1BJT19QSU5HUk9VUFMgNjkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluY3RybF9zb2NfZGF0YSBpcHE4MDY0X3BpbmN0cmwgPSB7CisJLnBpbnMgPSBpcHE4MDY0X3BpbnMsCisJLm5waW5zID0gQVJSQVlfU0laRShpcHE4MDY0X3BpbnMpLAorCS5mdW5jdGlvbnMgPSBpcHE4MDY0X2Z1bmN0aW9ucywKKwkubmZ1bmN0aW9ucyA9IEFSUkFZX1NJWkUoaXBxODA2NF9mdW5jdGlvbnMpLAorCS5ncm91cHMgPSBpcHE4MDY0X2dyb3VwcywKKwkubmdyb3VwcyA9IEFSUkFZX1NJWkUoaXBxODA2NF9ncm91cHMpLAorCS5uZ3Bpb3MgPSBOVU1fR1BJT19QSU5HUk9VUFMsCit9OworCitzdGF0aWMgaW50IGlwcTgwNjRfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBtc21fcGluY3RybF9wcm9iZShwZGV2LCAmaXBxODA2NF9waW5jdHJsKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXBxODA2NF9waW5jdHJsX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJxY29tLGlwcTgwNjQtcGluY3RybCIsIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXBxODA2NF9waW5jdHJsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpcHE4MDY0LXBpbmN0cmwiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gaXBxODA2NF9waW5jdHJsX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gaXBxODA2NF9waW5jdHJsX3Byb2JlLAorCS5yZW1vdmUgPSBtc21fcGluY3RybF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpcHE4MDY0X3BpbmN0cmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlwcTgwNjRfcGluY3RybF9kcml2ZXIpOworfQorYXJjaF9pbml0Y2FsbChpcHE4MDY0X3BpbmN0cmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHE4MDY0X3BpbmN0cmxfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpcHE4MDY0X3BpbmN0cmxfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGlwcTgwNjRfcGluY3RybF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW5keSBHcm9zcyA8YWdyb3NzQGNvZGVhdXJvcmEub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRdWFsY29tbSBJUFE4MDY0IHBpbmN0cmwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpcHE4MDY0X3BpbmN0cmxfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtbGFudGlxLmggYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1sYW50aXEuaAppbmRleCA2ZDA3ZjAyLi5jN2NmYWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1sYW50aXEuaAorKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1sYW50aXEuaApAQCAtMTAsNiArMTAsNyBAQAogICovCiAKICNpZm5kZWYgX19QSU5DVFJMX0xBTlRJUV9ICisjZGVmaW5lIF9fUElOQ1RSTF9MQU5USVFfSAogCiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1tc20uYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLW1zbS5jCmluZGV4IGU0M2ZiY2UuLmRmNmRkYTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1tc20uYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1tc20uYwpAQCAtMTMsNyArMTMsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CkBAIC0yNiw4ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKQEAgLTQxLDcgKzM4LDYgQEAKICAqIHN0cnVjdCBtc21fcGluY3RybCAtIHN0YXRlIGZvciBhIHBpbmN0cmwtbXNtIGRldmljZQogICogQGRldjogICAgICAgICAgICBkZXZpY2UgaGFuZGxlLgogICogQHBjdHJsOiAgICAgICAgICBwaW5jdHJsIGhhbmRsZS4KLSAqIEBkb21haW46ICAgICAgICAgaXJxZG9tYWluIGhhbmRsZS4KICAqIEBjaGlwOiAgICAgICAgICAgZ3Bpb2NoaXAgaGFuZGxlLgogICogQGlycTogICAgICAgICAgICBwYXJlbnQgaXJxIGZvciB0aGUgVExNTSBpcnFfY2hpcC4KICAqIEBsb2NrOiAgICAgICAgICAgU3BpbmxvY2sgdG8gcHJvdGVjdCByZWdpc3RlciByZXNvdXJjZXMgYXMgd2VsbApAQCAtNTUsNyArNTEsNiBAQAogc3RydWN0IG1zbV9waW5jdHJsIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RybDsKLQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKIAlpbnQgaXJxOwogCkBAIC02OCw2ICs2MywxMSBAQAogCXZvaWQgX19pb21lbSAqcmVnczsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1zbV9waW5jdHJsICp0b19tc21fcGluY3RybChzdHJ1Y3QgZ3Bpb19jaGlwICpnYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgbXNtX3BpbmN0cmwsIGNoaXApOworfQorCiBzdGF0aWMgaW50IG1zbV9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldikKIHsKIAlzdHJ1Y3QgbXNtX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CkBAIC0xNDUsMTIgKzE0NSwxMiBAQAogCWlmIChXQVJOX09OKGctPm11eF9iaXQgPCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnLT5mdW5jcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBnLT5uZnVuY3M7IGkrKykgewogCQlpZiAoZy0+ZnVuY3NbaV0gPT0gZnVuY3Rpb24pCiAJCQlicmVhazsKIAl9CiAKLQlpZiAoV0FSTl9PTihpID09IEFSUkFZX1NJWkUoZy0+ZnVuY3MpKSkKKwlpZiAoV0FSTl9PTihpID09IGctPm5mdW5jcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjdHJsLT5sb2NrLCBmbGFncyk7CkBAIC00ODAsMTMgKzQ4MCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGN0cmwtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBtc21fZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1zbV9waW5jdHJsLCBjaGlwKTsKLQotCXJldHVybiBpcnFfZmluZF9tYXBwaW5nKHBjdHJsLT5kb21haW4sIG9mZnNldCk7Ci19Ci0KIHN0YXRpYyBpbnQgbXNtX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJaW50IGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OwpAQCAtNTU2LDcgKzU0OSw2IEBACiAJLmRpcmVjdGlvbl9vdXRwdXQgPSBtc21fZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAogCS5nZXQgICAgICAgICAgICAgID0gbXNtX2dwaW9fZ2V0LAogCS5zZXQgICAgICAgICAgICAgID0gbXNtX2dwaW9fc2V0LAotCS50b19pcnEgICAgICAgICAgID0gbXNtX2dwaW9fdG9faXJxLAogCS5yZXF1ZXN0ICAgICAgICAgID0gbXNtX2dwaW9fcmVxdWVzdCwKIAkuZnJlZSAgICAgICAgICAgICA9IG1zbV9ncGlvX2ZyZWUsCiAJLmRiZ19zaG93ICAgICAgICAgPSBtc21fZ3Bpb19kYmdfc2hvdywKQEAgLTYwOCwxMiArNjAwLDEyIEBACiAKIHN0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwgPSB0b19tc21fcGluY3RybChnYyk7CiAJY29uc3Qgc3RydWN0IG1zbV9waW5ncm91cCAqZzsKLQlzdHJ1Y3QgbXNtX3BpbmN0cmwgKnBjdHJsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHZhbDsKIAotCXBjdHJsID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJZyA9ICZwY3RybC0+c29jLT5ncm91cHNbZC0+aHdpcnFdOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjdHJsLT5sb2NrLCBmbGFncyk7CkBAIC02MjksMTIgKzYyMSwxMiBAQAogCiBzdGF0aWMgdm9pZCBtc21fZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwgPSB0b19tc21fcGluY3RybChnYyk7CiAJY29uc3Qgc3RydWN0IG1zbV9waW5ncm91cCAqZzsKLQlzdHJ1Y3QgbXNtX3BpbmN0cmwgKnBjdHJsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHZhbDsKIAotCXBjdHJsID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJZyA9ICZwY3RybC0+c29jLT5ncm91cHNbZC0+aHdpcnFdOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjdHJsLT5sb2NrLCBmbGFncyk7CkBAIC02NTQsMTIgKzY0NiwxMiBAQAogCiBzdGF0aWMgdm9pZCBtc21fZ3Bpb19pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwgPSB0b19tc21fcGluY3RybChnYyk7CiAJY29uc3Qgc3RydWN0IG1zbV9waW5ncm91cCAqZzsKLQlzdHJ1Y3QgbXNtX3BpbmN0cmwgKnBjdHJsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHZhbDsKIAotCXBjdHJsID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJZyA9ICZwY3RybC0+c29jLT5ncm91cHNbZC0+aHdpcnFdOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjdHJsLT5sb2NrLCBmbGFncyk7CkBAIC02ODEsMTIgKzY3MywxMiBAQAogCiBzdGF0aWMgaW50IG1zbV9ncGlvX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogeworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IG1zbV9waW5jdHJsICpwY3RybCA9IHRvX21zbV9waW5jdHJsKGdjKTsKIAljb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwICpnOwotCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdmFsOwogCi0JcGN0cmwgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlnID0gJnBjdHJsLT5zb2MtPmdyb3Vwc1tkLT5od2lycV07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGN0cmwtPmxvY2ssIGZsYWdzKTsKQEAgLTc3NSwxMSArNzY3LDEwIEBACiAKIHN0YXRpYyBpbnQgbXNtX2dwaW9faXJxX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQogewotCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmw7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgbXNtX3BpbmN0cmwgKnBjdHJsID0gdG9fbXNtX3BpbmN0cmwoZ2MpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwY3RybCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjdHJsLT5sb2NrLCBmbGFncyk7CiAKIAlpcnFfc2V0X2lycV93YWtlKHBjdHJsLT5pcnEsIG9uKTsKQEAgLTc4OSwyNSArNzgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtc21fZ3Bpb19pcnFfcmVxcmVzKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQlzdHJ1Y3QgbXNtX3BpbmN0cmwgKnBjdHJsID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0KLQlpZiAoZ3Bpb19sb2NrX2FzX2lycSgmcGN0cmwtPmNoaXAsIGQtPmh3aXJxKSkgewotCQlkZXZfZXJyKHBjdHJsLT5kZXYsICJ1bmFibGUgdG8gbG9jayBIVyBJUlEgJWx1IGZvciBJUlFcbiIsCi0JCQlkLT5od2lycSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbXNtX2dwaW9faXJxX3JlbHJlcyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IG1zbV9waW5jdHJsICpwY3RybCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCi0JZ3Bpb191bmxvY2tfYXNfaXJxKCZwY3RybC0+Y2hpcCwgZC0+aHdpcnEpOwotfQotCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zbV9ncGlvX2lycV9jaGlwID0gewogCS5uYW1lICAgICAgICAgICA9ICJtc21ncGlvIiwKIAkuaXJxX21hc2sgICAgICAgPSBtc21fZ3Bpb19pcnFfbWFzaywKQEAgLTgxNSwxNCArNzg3LDEzIEBACiAJLmlycV9hY2sgICAgICAgID0gbXNtX2dwaW9faXJxX2FjaywKIAkuaXJxX3NldF90eXBlICAgPSBtc21fZ3Bpb19pcnFfc2V0X3R5cGUsCiAJLmlycV9zZXRfd2FrZSAgID0gbXNtX2dwaW9faXJxX3NldF93YWtlLAotCS5pcnFfcmVxdWVzdF9yZXNvdXJjZXMgPSBtc21fZ3Bpb19pcnFfcmVxcmVzLAotCS5pcnFfcmVsZWFzZV9yZXNvdXJjZXMgPSBtc21fZ3Bpb19pcnFfcmVscmVzLAogfTsKIAogc3RhdGljIHZvaWQgbXNtX2dwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKIAljb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwICpnOwotCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOworCXN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwgPSB0b19tc21fcGluY3RybChnYyk7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2dldF9jaGlwKGlycSk7CiAJaW50IGlycV9waW47CiAJaW50IGhhbmRsZWQgPSAwOwpAQCAtODM5LDcgKzgxMCw3IEBACiAJCWcgPSAmcGN0cmwtPnNvYy0+Z3JvdXBzW2ldOwogCQl2YWwgPSByZWFkbChwY3RybC0+cmVncyArIGctPmludHJfc3RhdHVzX3JlZyk7CiAJCWlmICh2YWwgJiBCSVQoZy0+aW50cl9zdGF0dXNfYml0KSkgewotCQkJaXJxX3BpbiA9IGlycV9maW5kX21hcHBpbmcocGN0cmwtPmRvbWFpbiwgaSk7CisJCQlpcnFfcGluID0gaXJxX2ZpbmRfbWFwcGluZyhnYy0+aXJxZG9tYWluLCBpKTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnFfcGluKTsKIAkJCWhhbmRsZWQrKzsKIAkJfQpAQCAtODUyLDE5ICs4MjMsMTAgQEAKIAljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCi0vKgotICogVGhpcyBsb2NrIGNsYXNzIHRlbGxzIGxvY2tkZXAgdGhhdCBHUElPIGlycXMgYXJlIGluIGEgZGlmZmVyZW50Ci0gKiBjYXRlZ29yeSB0aGFuIHRoZWlyIHBhcmVudHMsIHNvIGl0IHdvbid0IHJlcG9ydCBmYWxzZSByZWN1cnNpb24uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZ3Bpb19sb2NrX2NsYXNzOwotCiBzdGF0aWMgaW50IG1zbV9ncGlvX2luaXQoc3RydWN0IG1zbV9waW5jdHJsICpwY3RybCkKIHsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwOwotCWludCBpcnE7CiAJaW50IHJldDsKLQlpbnQgaTsKLQlpbnQgcjsKIAl1bnNpZ25lZCBuZ3BpbyA9IHBjdHJsLT5zb2MtPm5ncGlvczsKIAogCWlmIChXQVJOX09OKG5ncGlvID4gTUFYX05SX0dQSU8pKQpAQCAtODkwLDIzICs4NTIsMTggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwY3RybC0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKHBjdHJsLT5kZXYtPm9mX25vZGUsIGNoaXAtPm5ncGlvLAotCQkJCQkgICAgICAmaXJxX2RvbWFpbl9zaW1wbGVfb3BzLCBOVUxMKTsKLQlpZiAoIXBjdHJsLT5kb21haW4pIHsKLQkJZGV2X2VycihwY3RybC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGlycSBkb21haW5cbiIpOwotCQlyID0gZ3Bpb2NoaXBfcmVtb3ZlKCZwY3RybC0+Y2hpcCk7CisJcmV0ID0gZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoY2hpcCwKKwkJCQkgICAmbXNtX2dwaW9faXJxX2NoaXAsCisJCQkJICAgMCwKKwkJCQkgICBoYW5kbGVfZWRnZV9pcnEsCisJCQkJICAgSVJRX1RZUEVfTk9ORSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBjdHJsLT5kZXYsICJGYWlsZWQgdG8gYWRkIGlycWNoaXAgdG8gZ3Bpb2NoaXBcbiIpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bmdwaW87IGkrKykgewotCQlpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcocGN0cmwtPmRvbWFpbiwgaSk7Ci0JCWlycV9zZXRfbG9ja2RlcF9jbGFzcyhpcnEsICZncGlvX2xvY2tfY2xhc3MpOwotCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmbXNtX2dwaW9faXJxX2NoaXAsIGhhbmRsZV9lZGdlX2lycSk7Ci0JCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgcGN0cmwpOwotCX0KLQotCWlycV9zZXRfaGFuZGxlcl9kYXRhKHBjdHJsLT5pcnEsIHBjdHJsKTsKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihwY3RybC0+aXJxLCBtc21fZ3Bpb19pcnFfaGFuZGxlcik7CisJZ3Bpb2NoaXBfc2V0X2NoYWluZWRfaXJxY2hpcChjaGlwLCAmbXNtX2dwaW9faXJxX2NoaXAsIHBjdHJsLT5pcnEsCisJCQkJICAgICBtc21fZ3Bpb19pcnFfaGFuZGxlcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk3NCw4ICs5MzEsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKHBjdHJsLT5pcnEsIE5VTEwpOwotCWlycV9kb21haW5fcmVtb3ZlKHBjdHJsLT5kb21haW4pOwogCXBpbmN0cmxfdW5yZWdpc3RlcihwY3RybC0+cGN0cmwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1tc20uaCBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLW1zbS5oCmluZGV4IDZlMjZmMWIuLjdiMmEyMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLW1zbS5oCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLW1zbS5oCkBAIC02NSw3ICs2NSw4IEBACiAJY29uc3QgdW5zaWduZWQgKnBpbnM7CiAJdW5zaWduZWQgbnBpbnM7CiAKLQl1bnNpZ25lZCBmdW5jc1s4XTsKKwl1bnNpZ25lZCAqZnVuY3M7CisJdW5zaWduZWQgbmZ1bmNzOwogCiAJczE2IGN0bF9yZWc7CiAJczE2IGlvX3JlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLW1zbTh4NzQuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLW1zbTh4NzQuYwppbmRleCBkZGU1NTI5Li40MTgzMDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1tc204eDc0LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtbXNtOHg3NC5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJLm5hbWUgPSAiZ3BpbyIgI2lkLAkJCVwKIAkJLnBpbnMgPSBncGlvIyNpZCMjX3BpbnMsCQlcCiAJCS5ucGlucyA9IEFSUkFZX1NJWkUoZ3BpbyMjaWQjI19waW5zKSwJXAotCQkuZnVuY3MgPSB7CQkJCVwKKwkJLmZ1bmNzID0gKGludFtdKXsJCQlcCiAJCQlNU01fTVVYX05BLCAvKiBncGlvIG1vZGUgKi8JXAogCQkJTVNNX01VWF8jI2YxLAkJCVwKIAkJCU1TTV9NVVhfIyNmMiwJCQlcCkBAIC0zNTEsNiArMzUxLDcgQEAKIAkJCU1TTV9NVVhfIyNmNiwJCQlcCiAJCQlNU01fTVVYXyMjZjcJCQlcCiAJCX0sCQkJCQlcCisJCS5uZnVuY3MgPSA4LAkJCQlcCiAJCS5jdGxfcmVnID0gMHgxMDAwICsgMHgxMCAqIGlkLAkJXAogCQkuaW9fcmVnID0gMHgxMDA0ICsgMHgxMCAqIGlkLAkJXAogCQkuaW50cl9jZmdfcmVnID0gMHgxMDA4ICsgMHgxMCAqIGlkLAlcCkBAIC00MDEsMTY5ICs0MDIsNTY4IEBACiAgKiB0aGUgcGluZ3JvdXAgdGFibGUgYmVsb3cuCiAgKi8KIGVudW0gbXNtOHg3NF9mdW5jdGlvbnMgeworCU1TTV9NVVhfY2NpX2kyYzAsCisJTVNNX01VWF9jY2lfaTJjMSwKKwlNU01fTVVYX2Jsc3BfaTJjMSwKIAlNU01fTVVYX2Jsc3BfaTJjMiwKKwlNU01fTVVYX2Jsc3BfaTJjMywKKwlNU01fTVVYX2Jsc3BfaTJjNCwKKwlNU01fTVVYX2Jsc3BfaTJjNSwKIAlNU01fTVVYX2Jsc3BfaTJjNiwKKwlNU01fTVVYX2Jsc3BfaTJjNywKKwlNU01fTVVYX2Jsc3BfaTJjOCwKKwlNU01fTVVYX2Jsc3BfaTJjOSwKKwlNU01fTVVYX2Jsc3BfaTJjMTAsCiAJTVNNX01VWF9ibHNwX2kyYzExLAorCU1TTV9NVVhfYmxzcF9pMmMxMiwKIAlNU01fTVVYX2Jsc3Bfc3BpMSwKKwlNU01fTVVYX2Jsc3Bfc3BpMV9jczEsCisJTVNNX01VWF9ibHNwX3NwaTFfY3MyLAorCU1TTV9NVVhfYmxzcF9zcGkxX2NzMywKKwlNU01fTVVYX2Jsc3Bfc3BpMiwKKwlNU01fTVVYX2Jsc3Bfc3BpMl9jczEsCisJTVNNX01VWF9ibHNwX3NwaTJfY3MyLAorCU1TTV9NVVhfYmxzcF9zcGkyX2NzMywKKwlNU01fTVVYX2Jsc3Bfc3BpMywKKwlNU01fTVVYX2Jsc3Bfc3BpNCwKKwlNU01fTVVYX2Jsc3Bfc3BpNSwKKwlNU01fTVVYX2Jsc3Bfc3BpNiwKKwlNU01fTVVYX2Jsc3Bfc3BpNywKIAlNU01fTVVYX2Jsc3Bfc3BpOCwKKwlNU01fTVVYX2Jsc3Bfc3BpOSwKKwlNU01fTVVYX2Jsc3Bfc3BpMTAsCisJTVNNX01VWF9ibHNwX3NwaTEwX2NzMSwKKwlNU01fTVVYX2Jsc3Bfc3BpMTBfY3MyLAorCU1TTV9NVVhfYmxzcF9zcGkxMF9jczMsCisJTVNNX01VWF9ibHNwX3NwaTExLAorCU1TTV9NVVhfYmxzcF9zcGkxMiwKKwlNU01fTVVYX2Jsc3BfdWFydDEsCiAJTVNNX01VWF9ibHNwX3VhcnQyLAorCU1TTV9NVVhfYmxzcF91YXJ0MywKKwlNU01fTVVYX2Jsc3BfdWFydDQsCisJTVNNX01VWF9ibHNwX3VhcnQ1LAorCU1TTV9NVVhfYmxzcF91YXJ0NiwKKwlNU01fTVVYX2Jsc3BfdWFydDcsCiAJTVNNX01VWF9ibHNwX3VhcnQ4LAorCU1TTV9NVVhfYmxzcF91YXJ0OSwKKwlNU01fTVVYX2Jsc3BfdWFydDEwLAorCU1TTV9NVVhfYmxzcF91YXJ0MTEsCisJTVNNX01VWF9ibHNwX3VhcnQxMiwKKwlNU01fTVVYX2Jsc3BfdWltMSwKKwlNU01fTVVYX2Jsc3BfdWltMiwKKwlNU01fTVVYX2Jsc3BfdWltMywKKwlNU01fTVVYX2Jsc3BfdWltNCwKKwlNU01fTVVYX2Jsc3BfdWltNSwKKwlNU01fTVVYX2Jsc3BfdWltNiwKKwlNU01fTVVYX2Jsc3BfdWltNywKKwlNU01fTVVYX2Jsc3BfdWltOCwKKwlNU01fTVVYX2Jsc3BfdWltOSwKKwlNU01fTVVYX2Jsc3BfdWltMTAsCisJTVNNX01VWF9ibHNwX3VpbTExLAorCU1TTV9NVVhfYmxzcF91aW0xMiwKKwlNU01fTVVYX3VpbTEsCisJTVNNX01VWF91aW0yLAorCU1TTV9NVVhfdWltX2JhdHRfYWxhcm0sCisJTVNNX01VWF9zZGMzLAorCU1TTV9NVVhfc2RjNCwKKwlNU01fTVVYX2djY19ncF9jbGsxLAorCU1TTV9NVVhfZ2NjX2dwX2NsazIsCisJTVNNX01VWF9nY2NfZ3BfY2xrMywKKwlNU01fTVVYX3F1YV9taTJzLAorCU1TTV9NVVhfcHJpX21pMnMsCisJTVNNX01VWF9zcGtyX21pMnMsCisJTVNNX01VWF90ZXJfbWkycywKKwlNU01fTVVYX3NlY19taTJzLAorCU1TTV9NVVhfaGRtaV9jZWMsCisJTVNNX01VWF9oZG1pX2RkYywKKwlNU01fTVVYX2hkbWlfaHBkLAorCU1TTV9NVVhfZWRwX2hwZCwKKwlNU01fTVVYX21kcF92c3luYywKKwlNU01fTVVYX2NhbV9tY2xrMCwKKwlNU01fTVVYX2NhbV9tY2xrMSwKKwlNU01fTVVYX2NhbV9tY2xrMiwKKwlNU01fTVVYX2NhbV9tY2xrMywKKwlNU01fTVVYX2NjaV90aW1lcjAsCisJTVNNX01VWF9jY2lfdGltZXIxLAorCU1TTV9NVVhfY2NpX3RpbWVyMiwKKwlNU01fTVVYX2NjaV90aW1lcjMsCisJTVNNX01VWF9jY2lfdGltZXI0LAorCU1TTV9NVVhfY2NpX2FzeW5jX2luMCwKKwlNU01fTVVYX2NjaV9hc3luY19pbjEsCisJTVNNX01VWF9jY2lfYXN5bmNfaW4yLAorCU1TTV9NVVhfZ3BfcGRtMCwKKwlNU01fTVVYX2dwX3BkbTEsCisJTVNNX01VWF9ncF9wZG0yLAorCU1TTV9NVVhfZ3AwX2NsaywKKwlNU01fTVVYX2dwMV9jbGssCisJTVNNX01VWF9ncF9tbiwKKwlNU01fTVVYX3RzaWYxLAorCU1TTV9NVVhfdHNpZjIsCisJTVNNX01VWF9oc2ljLAorCU1TTV9NVVhfZ3JmYywKKwlNU01fTVVYX2F1ZGlvX3JlZl9jbGssCisJTVNNX01VWF9idCwKKwlNU01fTVVYX2ZtLAorCU1TTV9NVVhfd2xhbiwKIAlNU01fTVVYX3NsaW1idXMsCiAJTVNNX01VWF9OQSwKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0MV9ncm91cHNbXSA9IHsKKwkiZ3BpbzAiLCAiZ3BpbzEiLCAiZ3BpbzIiLCAiZ3BpbzMiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VpbTFfZ3JvdXBzW10gPSB7ICJncGlvMCIsICJncGlvMSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmMxX2dyb3Vwc1tdID0geyAiZ3BpbzIiLCAiZ3BpbzMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzAiLCAiZ3BpbzEiLCAiZ3BpbzIiLCAiZ3BpbzMiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTFfY3MxX2dyb3Vwc1tdID0geyAiZ3BpbzgiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMV9jczJfZ3JvdXBzW10gPSB7ICJncGlvOSIsICJncGlvMTEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMV9jczNfZ3JvdXBzW10gPSB7ICJncGlvMTAiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0Ml9ncm91cHNbXSA9IHsKKwkiZ3BpbzQiLCAiZ3BpbzUiLCAiZ3BpbzYiLCAiZ3BpbzciCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VpbTJfZ3JvdXBzW10gPSB7ICJncGlvNCIsICJncGlvNSIgfTsKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmMyX2dyb3Vwc1tdID0geyAiZ3BpbzYiLCAiZ3BpbzciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMl9ncm91cHNbXSA9IHsKKwkiZ3BpbzQiLCAiZ3BpbzUiLCAiZ3BpbzYiLCAiZ3BpbzciCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTJfY3MxX2dyb3Vwc1tdID0geyAiZ3BpbzUzIiwgImdwaW82MiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkyX2NzMl9ncm91cHNbXSA9IHsgImdwaW81NCIsICJncGlvNjMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMl9jczNfZ3JvdXBzW10gPSB7ICJncGlvNjYiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0M19ncm91cHNbXSA9IHsKKwkiZ3BpbzgiLCAiZ3BpbzkiLCAiZ3BpbzEwIiwgImdwaW8xMSIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWltM19ncm91cHNbXSA9IHsgImdwaW84IiwgImdwaW85IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX2kyYzNfZ3JvdXBzW10gPSB7ICJncGlvMTAiLCAiZ3BpbzExIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTNfZ3JvdXBzW10gPSB7CisJImdwaW84IiwgImdwaW85IiwgImdwaW8xMCIsICJncGlvMTEiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjaV9pMmMwX2dyb3Vwc1tdID0geyAiZ3BpbzE5IiwgImdwaW8yMCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2NpX2kyYzFfZ3JvdXBzW10gPSB7ICJncGlvMjEiLCAiZ3BpbzIyIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWFydDRfZ3JvdXBzW10gPSB7CisJImdwaW8xOSIsICJncGlvMjAiLCAiZ3BpbzIxIiwgImdwaW8yMiIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWltNF9ncm91cHNbXSA9IHsgImdwaW8xOSIsICJncGlvMjAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfaTJjNF9ncm91cHNbXSA9IHsgImdwaW8yMSIsICJncGlvMjIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpNF9ncm91cHNbXSA9IHsKKwkiZ3BpbzE5IiwgImdwaW8yMCIsICJncGlvMjEiLCAiZ3BpbzIyIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VhcnQ1X2dyb3Vwc1tdID0geworCSJncGlvMjMiLCAiZ3BpbzI0IiwgImdwaW8yNSIsICJncGlvMjYiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VpbTVfZ3JvdXBzW10gPSB7ICJncGlvMjMiLCAiZ3BpbzI0IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX2kyYzVfZ3JvdXBzW10gPSB7ICJncGlvMjUiLCAiZ3BpbzI2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTVfZ3JvdXBzW10gPSB7CisJImdwaW8yMyIsICJncGlvMjQiLCAiZ3BpbzI1IiwgImdwaW8yNiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0Nl9ncm91cHNbXSA9IHsKKwkiZ3BpbzI3IiwgImdwaW8yOCIsICJncGlvMjkiLCAiZ3BpbzMwIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91aW02X2dyb3Vwc1tdID0geyAiZ3BpbzI3IiwgImdwaW8yOCIgfTsKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmM2X2dyb3Vwc1tdID0geyAiZ3BpbzI5IiwgImdwaW8zMCIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmMxMV9ncm91cHNbXSA9IHsgImdwaW84MyIsICJncGlvODQiIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMV9ncm91cHNbXSA9IHsgImdwaW8wIiwgImdwaW8xIiwgImdwaW8yIiwgImdwaW8zIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTZfZ3JvdXBzW10gPSB7CisJImdwaW8yNyIsICJncGlvMjgiLCAiZ3BpbzI5IiwgImdwaW8zMCIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0N19ncm91cHNbXSA9IHsKKwkiZ3BpbzQxIiwgImdwaW80MiIsICJncGlvNDMiLCAiZ3BpbzQ0IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91aW03X2dyb3Vwc1tdID0geyAiZ3BpbzQxIiwgImdwaW80MiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmM3X2dyb3Vwc1tdID0geyAiZ3BpbzQzIiwgImdwaW80NCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGk3X2dyb3Vwc1tdID0geworCSJncGlvNDEiLCAiZ3BpbzQyIiwgImdwaW80MyIsICJncGlvNDQiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWFydDhfZ3JvdXBzW10gPSB7CisJImdwaW80NSIsICJncGlvNDYiLCAiZ3BpbzQ3IiwgImdwaW80OCIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWltOF9ncm91cHNbXSA9IHsgImdwaW80NSIsICJncGlvNDYiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfaTJjOF9ncm91cHNbXSA9IHsgImdwaW80NyIsICJncGlvNDgiIH07CiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpOF9ncm91cHNbXSA9IHsKIAkiZ3BpbzQ1IiwgImdwaW80NiIsICJncGlvNDciLCAiZ3BpbzQ4IgogfTsKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0Ml9ncm91cHNbXSA9IHsgImdwaW80IiwgImdwaW81IiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VhcnQ4X2dyb3Vwc1tdID0geyAiZ3BpbzQ1IiwgImdwaW80NiIgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VhcnQ5X2dyb3Vwc1tdID0geworCSJncGlvNDkiLCAiZ3BpbzUwIiwgImdwaW81MSIsICJncGlvNTIiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VpbTlfZ3JvdXBzW10gPSB7ICJncGlvNDkiLCAiZ3BpbzUwIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX2kyYzlfZ3JvdXBzW10gPSB7ICJncGlvNTEiLCAiZ3BpbzUyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTlfZ3JvdXBzW10gPSB7CisJImdwaW80OSIsICJncGlvNTAiLCAiZ3BpbzUxIiwgImdwaW81MiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0MTBfZ3JvdXBzW10gPSB7CisJImdwaW81MyIsICJncGlvNTQiLCAiZ3BpbzU1IiwgImdwaW81NiIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWltMTBfZ3JvdXBzW10gPSB7ICJncGlvNTMiLCAiZ3BpbzU0IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX2kyYzEwX2dyb3Vwc1tdID0geyAiZ3BpbzU1IiwgImdwaW81NiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkxMF9ncm91cHNbXSA9IHsKKwkiZ3BpbzUzIiwgImdwaW81NCIsICJncGlvNTUiLCAiZ3BpbzU2IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkxMF9jczFfZ3JvdXBzW10gPSB7ICJncGlvNDciLCAiZ3BpbzY3IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTEwX2NzMl9ncm91cHNbXSA9IHsgImdwaW80OCIsICJncGlvNjgiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMTBfY3MzX2dyb3Vwc1tdID0geyAiZ3BpbzkwIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWFydDExX2dyb3Vwc1tdID0geworCSJncGlvODEiLCAiZ3BpbzgyIiwgImdwaW84MyIsICJncGlvODQiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VpbTExX2dyb3Vwc1tdID0geyAiZ3BpbzgxIiwgImdwaW84MiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmMxMV9ncm91cHNbXSA9IHsgImdwaW84MyIsICJncGlvODQiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMTFfZ3JvdXBzW10gPSB7CisJImdwaW84MSIsICJncGlvODIiLCAiZ3BpbzgzIiwgImdwaW84NCIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0MTJfZ3JvdXBzW10gPSB7CisJImdwaW84NSIsICJncGlvODYiLCAiZ3Bpbzg3IiwgImdwaW84OCIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWltMTJfZ3JvdXBzW10gPSB7ICJncGlvODUiLCAiZ3Bpbzg2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX2kyYzEyX2dyb3Vwc1tdID0geyAiZ3Bpbzg3IiwgImdwaW84OCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkxMl9ncm91cHNbXSA9IHsKKwkiZ3Bpbzg1IiwgImdwaW84NiIsICJncGlvODciLCAiZ3Bpbzg4IgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1aW0xX2dyb3Vwc1tdID0geworCSJncGlvOTciLCAiZ3Bpbzk4IiwgImdwaW85OSIsICJncGlvMTAwIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1aW0yX2dyb3Vwc1tdID0geworCSJncGlvNDkiLCAiZ3BpbzUwIiwgImdwaW81MSIsICJncGlvNTIiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVpbV9iYXR0X2FsYXJtX2dyb3Vwc1tdID0geyAiZ3BpbzEwMSIgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZGMzX2dyb3Vwc1tdID0geworCSJncGlvMzUiLCAiZ3BpbzM2IiwgImdwaW8zNyIsICJncGlvMzgiLCAiZ3BpbzM5IiwgImdwaW80MCIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RjNF9ncm91cHNbXSA9IHsKKwkiZ3BpbzkxIiwgImdwaW85MiIsICJncGlvOTMiLCAiZ3Bpbzk0IiwgImdwaW85NSIsICJncGlvOTYiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwMF9jbGtfZ3JvdXBzW10gPSB7ICJncGlvMjYiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwMV9jbGtfZ3JvdXBzW10gPSB7ICJncGlvMjciLCAiZ3BpbzU3IiwgImdwaW83OCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3BfbW5fZ3JvdXBzW10gPSB7ICJncGlvMjkiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncF9jbGsxX2dyb3Vwc1tdID0geyAiZ3BpbzU3IiwgImdwaW83OCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2NjX2dwX2NsazJfZ3JvdXBzW10gPSB7ICJncGlvNTgiLCAiZ3BpbzgxIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnY2NfZ3BfY2xrM19ncm91cHNbXSA9IHsgImdwaW81OSIsICJncGlvODIiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcXVhX21pMnNfZ3JvdXBzW10gPSB7CisJImdwaW81NyIsICJncGlvNTgiLCAiZ3BpbzU5IiwgImdwaW82MCIsICJncGlvNjEiLCAiZ3BpbzYyIiwgImdwaW82MyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByaV9taTJzX2dyb3Vwc1tdID0geworCSJncGlvNjQiLCAiZ3BpbzY1IiwgImdwaW82NiIsICJncGlvNjciLCAiZ3BpbzY4IgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcGtyX21pMnNfZ3JvdXBzW10gPSB7CisJImdwaW82OSIsICJncGlvNzAiLCAiZ3BpbzcxIiwgImdwaW83MiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVyX21pMnNfZ3JvdXBzW10gPSB7CisJImdwaW83MyIsICJncGlvNzQiLCAiZ3Bpbzc1IiwgImdwaW83NiIsICJncGlvNzciCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNlY19taTJzX2dyb3Vwc1tdID0geworCSJncGlvNzgiLCAiZ3Bpbzc5IiwgImdwaW84MCIsICJncGlvODEiLCAiZ3BpbzgyIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoZG1pX2NlY19ncm91cHNbXSA9IHsgImdwaW8zMSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGRtaV9kZGNfZ3JvdXBzW10gPSB7ICJncGlvMzIiLCAiZ3BpbzMzIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoZG1pX2hwZF9ncm91cHNbXSA9IHsgImdwaW8zNCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZWRwX2hwZF9ncm91cHNbXSA9IHsgImdwaW8xMDIiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWRwX3ZzeW5jX2dyb3Vwc1tdID0geyAiZ3BpbzEyIiwgImdwaW8xMyIsICJncGlvMTQiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhbV9tY2xrMF9ncm91cHNbXSA9IHsgImdwaW8xNSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FtX21jbGsxX2dyb3Vwc1tdID0geyAiZ3BpbzE2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYW1fbWNsazJfZ3JvdXBzW10gPSB7ICJncGlvMTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhbV9tY2xrM19ncm91cHNbXSA9IHsgImdwaW8xOCIgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIwX2dyb3Vwc1tdID0geyAiZ3BpbzIzIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIxX2dyb3Vwc1tdID0geyAiZ3BpbzI0IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIyX2dyb3Vwc1tdID0geyAiZ3BpbzI1IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIzX2dyb3Vwc1tdID0geyAiZ3BpbzI2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXI0X2dyb3Vwc1tdID0geyAiZ3BpbzI3IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfYXN5bmNfaW4wX2dyb3Vwc1tdID0geyAiZ3BpbzI4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfYXN5bmNfaW4xX2dyb3Vwc1tdID0geyAiZ3BpbzI2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfYXN5bmNfaW4yX2dyb3Vwc1tdID0geyAiZ3BpbzI3IiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwX3BkbTBfZ3JvdXBzW10gPSB7ICJncGlvNTQiLCAiZ3BpbzY4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncF9wZG0xX2dyb3Vwc1tdID0geyAiZ3Bpbzc0IiwgImdwaW84NiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3BfcGRtMl9ncm91cHNbXSA9IHsgImdwaW82MyIsICJncGlvNzkiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHNpZjFfZ3JvdXBzW10gPSB7CisJImdwaW84OSIsICJncGlvOTAiLCAiZ3BpbzkxIiwgImdwaW85MiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHNpZjJfZ3JvdXBzW10gPSB7CisJImdwaW85MyIsICJncGlvOTQiLCAiZ3Bpbzk1IiwgImdwaW85NiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaHNpY19ncm91cHNbXSA9IHsgImdwaW8xNDQiLCAiZ3BpbzE0NSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3JmY19ncm91cHNbXSA9IHsKKwkiZ3BpbzEwNCIsICJncGlvMTA1IiwgImdwaW8xMDYiLCAiZ3BpbzEwNyIsICJncGlvMTA4IiwgImdwaW8xMDkiLAorCSJncGlvMTEwIiwgImdwaW8xMTEiLCAiZ3BpbzExMiIsICJncGlvMTEzIiwgImdwaW8xMTQiLCAiZ3BpbzExNSIsCisJImdwaW8xMTYiLCAiZ3BpbzExNyIsICJncGlvMTE4IiwgImdwaW8xMTkiLCAiZ3BpbzEyMCIsICJncGlvMTIxIiwKKwkiZ3BpbzEyMiIsICJncGlvMTIzIiwgImdwaW8xMjQiLCAiZ3BpbzEyNSIsICJncGlvMTI2IiwgImdwaW8xMjciLAorCSJncGlvMTI4IiwgImdwaW8xMzYiLCAiZ3BpbzEzNyIsICJncGlvMTQxIiwgImdwaW8xNDMiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF1ZGlvX3JlZl9jbGtfZ3JvdXBzW10gPSB7ICJncGlvNjkiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnRfZ3JvdXBzW10gPSB7ICJncGlvMzUiLCAiZ3BpbzQzIiwgImdwaW80NCIgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbV9ncm91cHNbXSA9IHsgImdwaW80MSIsICJncGlvNDIiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd2xhbl9ncm91cHNbXSA9IHsKKwkiZ3BpbzM2IiwgImdwaW8zNyIsICJncGlvMzgiLCAiZ3BpbzM5IiwgImdwaW80MCIKK307CisKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2xpbWJ1c19ncm91cHNbXSA9IHsgImdwaW83MCIsICJncGlvNzEiIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX2Z1bmN0aW9uIG1zbTh4NzRfZnVuY3Rpb25zW10gPSB7CisJRlVOQ1RJT04oY2NpX2kyYzApLAorCUZVTkNUSU9OKGNjaV9pMmMxKSwKKwlGVU5DVElPTih1aW0xKSwKKwlGVU5DVElPTih1aW0yKSwKKwlGVU5DVElPTih1aW1fYmF0dF9hbGFybSksCisJRlVOQ1RJT04oYmxzcF91aW0xKSwKKwlGVU5DVElPTihibHNwX3VpbTIpLAorCUZVTkNUSU9OKGJsc3BfdWltMyksCisJRlVOQ1RJT04oYmxzcF91aW00KSwKKwlGVU5DVElPTihibHNwX3VpbTUpLAorCUZVTkNUSU9OKGJsc3BfdWltNiksCisJRlVOQ1RJT04oYmxzcF91aW03KSwKKwlGVU5DVElPTihibHNwX3VpbTgpLAorCUZVTkNUSU9OKGJsc3BfdWltOSksCisJRlVOQ1RJT04oYmxzcF91aW0xMCksCisJRlVOQ1RJT04oYmxzcF91aW0xMSksCisJRlVOQ1RJT04oYmxzcF91aW0xMiksCisJRlVOQ1RJT04oYmxzcF9pMmMxKSwKIAlGVU5DVElPTihibHNwX2kyYzIpLAorCUZVTkNUSU9OKGJsc3BfaTJjMyksCisJRlVOQ1RJT04oYmxzcF9pMmM0KSwKKwlGVU5DVElPTihibHNwX2kyYzUpLAogCUZVTkNUSU9OKGJsc3BfaTJjNiksCisJRlVOQ1RJT04oYmxzcF9pMmM3KSwKKwlGVU5DVElPTihibHNwX2kyYzgpLAorCUZVTkNUSU9OKGJsc3BfaTJjOSksCisJRlVOQ1RJT04oYmxzcF9pMmMxMCksCiAJRlVOQ1RJT04oYmxzcF9pMmMxMSksCisJRlVOQ1RJT04oYmxzcF9pMmMxMiksCiAJRlVOQ1RJT04oYmxzcF9zcGkxKSwKKwlGVU5DVElPTihibHNwX3NwaTFfY3MxKSwKKwlGVU5DVElPTihibHNwX3NwaTFfY3MyKSwKKwlGVU5DVElPTihibHNwX3NwaTFfY3MzKSwKKwlGVU5DVElPTihibHNwX3NwaTIpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMl9jczEpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMl9jczIpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMl9jczMpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMyksCisJRlVOQ1RJT04oYmxzcF9zcGk0KSwKKwlGVU5DVElPTihibHNwX3NwaTUpLAorCUZVTkNUSU9OKGJsc3Bfc3BpNiksCisJRlVOQ1RJT04oYmxzcF9zcGk3KSwKIAlGVU5DVElPTihibHNwX3NwaTgpLAorCUZVTkNUSU9OKGJsc3Bfc3BpOSksCisJRlVOQ1RJT04oYmxzcF9zcGkxMCksCisJRlVOQ1RJT04oYmxzcF9zcGkxMF9jczEpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMTBfY3MyKSwKKwlGVU5DVElPTihibHNwX3NwaTEwX2NzMyksCisJRlVOQ1RJT04oYmxzcF9zcGkxMSksCisJRlVOQ1RJT04oYmxzcF9zcGkxMiksCisJRlVOQ1RJT04oYmxzcF91YXJ0MSksCiAJRlVOQ1RJT04oYmxzcF91YXJ0MiksCisJRlVOQ1RJT04oYmxzcF91YXJ0MyksCisJRlVOQ1RJT04oYmxzcF91YXJ0NCksCisJRlVOQ1RJT04oYmxzcF91YXJ0NSksCisJRlVOQ1RJT04oYmxzcF91YXJ0NiksCisJRlVOQ1RJT04oYmxzcF91YXJ0NyksCiAJRlVOQ1RJT04oYmxzcF91YXJ0OCksCisJRlVOQ1RJT04oYmxzcF91YXJ0OSksCisJRlVOQ1RJT04oYmxzcF91YXJ0MTApLAorCUZVTkNUSU9OKGJsc3BfdWFydDExKSwKKwlGVU5DVElPTihibHNwX3VhcnQxMiksCisJRlVOQ1RJT04oc2RjMyksCisJRlVOQ1RJT04oc2RjNCksCisJRlVOQ1RJT04oZ2NjX2dwX2NsazEpLAorCUZVTkNUSU9OKGdjY19ncF9jbGsyKSwKKwlGVU5DVElPTihnY2NfZ3BfY2xrMyksCisJRlVOQ1RJT04ocXVhX21pMnMpLAorCUZVTkNUSU9OKHByaV9taTJzKSwKKwlGVU5DVElPTihzcGtyX21pMnMpLAorCUZVTkNUSU9OKHRlcl9taTJzKSwKKwlGVU5DVElPTihzZWNfbWkycyksCisJRlVOQ1RJT04obWRwX3ZzeW5jKSwKKwlGVU5DVElPTihjYW1fbWNsazApLAorCUZVTkNUSU9OKGNhbV9tY2xrMSksCisJRlVOQ1RJT04oY2FtX21jbGsyKSwKKwlGVU5DVElPTihjYW1fbWNsazMpLAorCUZVTkNUSU9OKGNjaV90aW1lcjApLAorCUZVTkNUSU9OKGNjaV90aW1lcjEpLAorCUZVTkNUSU9OKGNjaV90aW1lcjIpLAorCUZVTkNUSU9OKGNjaV90aW1lcjMpLAorCUZVTkNUSU9OKGNjaV90aW1lcjQpLAorCUZVTkNUSU9OKGNjaV9hc3luY19pbjApLAorCUZVTkNUSU9OKGNjaV9hc3luY19pbjEpLAorCUZVTkNUSU9OKGNjaV9hc3luY19pbjIpLAorCUZVTkNUSU9OKGhkbWlfY2VjKSwKKwlGVU5DVElPTihoZG1pX2RkYyksCisJRlVOQ1RJT04oaGRtaV9ocGQpLAorCUZVTkNUSU9OKGVkcF9ocGQpLAorCUZVTkNUSU9OKGdwX3BkbTApLAorCUZVTkNUSU9OKGdwX3BkbTEpLAorCUZVTkNUSU9OKGdwX3BkbTIpLAorCUZVTkNUSU9OKGdwMF9jbGspLAorCUZVTkNUSU9OKGdwMV9jbGspLAorCUZVTkNUSU9OKGdwX21uKSwKKwlGVU5DVElPTih0c2lmMSksCisJRlVOQ1RJT04odHNpZjIpLAorCUZVTkNUSU9OKGhzaWMpLAorCUZVTkNUSU9OKGdyZmMpLAorCUZVTkNUSU9OKGF1ZGlvX3JlZl9jbGspLAorCUZVTkNUSU9OKGJ0KSwKKwlGVU5DVElPTihmbSksCisJRlVOQ1RJT04od2xhbiksCiAJRlVOQ1RJT04oc2xpbWJ1cyksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1zbV9waW5ncm91cCBtc204eDc0X2dyb3Vwc1tdID0gewotCVBJTkdST1VQKDAsICAgYmxzcF9zcGkxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxLCAgIGJsc3Bfc3BpMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoMiwgICBibHNwX3NwaTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDMsICAgYmxzcF9zcGkxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg0LCAgIE5BLCBibHNwX3VhcnQyLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDUsICAgTkEsIGJsc3BfdWFydDIsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNiwgICBOQSwgTkEsIGJsc3BfaTJjMiwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDcsICAgTkEsIE5BLCBibHNwX2kyYzIsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg4LCAgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5LCAgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxOCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxOSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyMCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyMSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyMiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyMywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyNCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyNSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyNiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyNywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyOCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgyOSwgIE5BLCBOQSwgYmxzcF9pMmM2LCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoMzAsICBOQSwgTkEsIGJsc3BfaTJjNiwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDMxLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDMyLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDMzLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDM0LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDM1LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDM2LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDM3LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDM4LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDM5LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQwLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQxLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQyLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQzLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQ0LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQ1LCAgYmxzcF9zcGk4LCBibHNwX3VhcnQ4LCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQ2LCAgYmxzcF9zcGk4LCBibHNwX3VhcnQ4LCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDQ3LCAgYmxzcF9zcGk4LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg0OCwgIGJsc3Bfc3BpOCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNDksICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTAsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTEsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTIsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTMsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTQsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTUsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTYsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTcsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTgsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNTksICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjAsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjEsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjIsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjMsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjQsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjUsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjYsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjcsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjgsICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNjksICBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoNzAsICBzbGltYnVzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg3MSwgIHNsaW1idXMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDcyLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDczLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDc0LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDc1LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDc2LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDc3LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDc4LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDc5LCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDgwLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDgxLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDgyLCAgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDgzLCAgTkEsIE5BLCBibHNwX2kyYzExLCBOQSwgTkEsIE5BLCBOQSksCi0JUElOR1JPVVAoODQsICBOQSwgTkEsIGJsc3BfaTJjMTEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg4NSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg4NiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg4NywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg4OCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg4OSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5MCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5MSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5MiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5MywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5NCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5NSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5NiwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5NywgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5OCwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCg5OSwgIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMDAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMDEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxMDIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgwLCAgIGJsc3Bfc3BpMSwgYmxzcF91YXJ0MSwgYmxzcF91aW0xLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMSwgICBibHNwX3NwaTEsIGJsc3BfdWFydDEsIGJsc3BfdWltMSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDIsICAgYmxzcF9zcGkxLCBibHNwX3VhcnQxLCBibHNwX2kyYzEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzLCAgIGJsc3Bfc3BpMSwgYmxzcF91YXJ0MSwgYmxzcF9pMmMxLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNCwgICBibHNwX3NwaTIsIGJsc3BfdWFydDIsIGJsc3BfdWltMiwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUsICAgYmxzcF9zcGkyLCBibHNwX3VhcnQyLCBibHNwX3VpbTIsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2LCAgIGJsc3Bfc3BpMiwgYmxzcF91YXJ0MiwgYmxzcF9pMmMyLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNywgICBibHNwX3NwaTIsIGJsc3BfdWFydDIsIGJsc3BfaTJjMiwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDgsICAgYmxzcF9zcGkzLCBibHNwX3VhcnQzLCBibHNwX3VpbTMsIGJsc3Bfc3BpMV9jczEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDksICAgYmxzcF9zcGkzLCBibHNwX3VhcnQzLCBibHNwX3VpbTMsIGJsc3Bfc3BpMV9jczIsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEwLCAgYmxzcF9zcGkzLCBibHNwX3VhcnQzLCBibHNwX2kyYzMsIGJsc3Bfc3BpMV9jczMsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDExLCAgYmxzcF9zcGkzLCBibHNwX3VhcnQzLCBibHNwX2kyYzMsIGJsc3Bfc3BpMV9jczIsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEyLCAgbWRwX3ZzeW5jLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMywgIG1kcF92c3luYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTQsICBtZHBfdnN5bmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE1LCAgY2FtX21jbGswLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNiwgIGNhbV9tY2xrMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTcsICBjYW1fbWNsazIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE4LCAgY2FtX21jbGszLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxOSwgIGNjaV9pMmMwLCBibHNwX3NwaTQsIGJsc3BfdWFydDQsIGJsc3BfdWltNCwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjAsICBjY2lfaTJjMCwgYmxzcF9zcGk0LCBibHNwX3VhcnQ0LCBibHNwX3VpbTQsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDIxLCAgY2NpX2kyYzEsIGJsc3Bfc3BpNCwgYmxzcF91YXJ0NCwgYmxzcF9pMmM0LCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyMiwgIGNjaV9pMmMxLCBibHNwX3NwaTQsIGJsc3BfdWFydDQsIGJsc3BfaTJjNCwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjMsICBjY2lfdGltZXIwLCBibHNwX3NwaTUsIGJsc3BfdWFydDUsIGJsc3BfdWltNSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjQsICBjY2lfdGltZXIxLCBibHNwX3NwaTUsIGJsc3BfdWFydDUsIGJsc3BfdWltNSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjUsICBjY2lfdGltZXIyLCBibHNwX3NwaTUsIGJsc3BfdWFydDUsIGJsc3BfaTJjNSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjYsICBjY2lfdGltZXIzLCBjY2lfYXN5bmNfaW4xLCBibHNwX3NwaTUsIGJsc3BfdWFydDUsIGJsc3BfaTJjNSwgZ3AwX2NsaywgTkEpLAorCVBJTkdST1VQKDI3LCAgY2NpX3RpbWVyNCwgY2NpX2FzeW5jX2luMiwgYmxzcF9zcGk2LCBibHNwX3VhcnQ2LCBibHNwX2kyYzYsIGdwMV9jbGssIE5BKSwKKwlQSU5HUk9VUCgyOCwgIGNjaV9hc3luY19pbjAsIGJsc3Bfc3BpNiwgYmxzcF91YXJ0NiwgYmxzcF91aW02LCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyOSwgIGJsc3Bfc3BpNiwgYmxzcF91YXJ0NiwgYmxzcF9pMmM2LCBncF9tbiwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzAsICBibHNwX3NwaTYsIGJsc3BfdWFydDYsIGJsc3BfaTJjNiwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMxLCAgaGRtaV9jZWMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMyLCAgaGRtaV9kZGMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDMzLCAgaGRtaV9kZGMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM0LCAgaGRtaV9ocGQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM1LCAgYnQsIHNkYzMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzYsICB3bGFuLCBzZGMzLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDM3LCAgd2xhbiwgc2RjMywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzOCwgIHdsYW4sIHNkYzMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzksICB3bGFuLCBzZGMzLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQwLCAgd2xhbiwgc2RjMywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0MSwgIGZtLCBibHNwX3NwaTcsIGJsc3BfdWFydDcsIGJsc3BfdWltNywgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDIsICBmbSwgYmxzcF9zcGk3LCBibHNwX3VhcnQ3LCBibHNwX3VpbTcsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQzLCAgYnQsIGJsc3Bfc3BpNywgYmxzcF91YXJ0NywgYmxzcF9pMmM3LCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0NCwgIGJ0LCBibHNwX3NwaTcsIGJsc3BfdWFydDcsIGJsc3BfaTJjNywgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDUsICBibHNwX3NwaTgsIGJsc3BfdWFydDgsIGJsc3BfdWltOCwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ2LCAgYmxzcF9zcGk4LCBibHNwX3VhcnQ4LCBibHNwX3VpbTgsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0NywgIGJsc3Bfc3BpOCwgYmxzcF91YXJ0OCwgYmxzcF9pMmM4LCBibHNwX3NwaTEwX2NzMSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDgsICBibHNwX3NwaTgsIGJsc3BfdWFydDgsIGJsc3BfaTJjOCwgYmxzcF9zcGkxMF9jczIsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ5LCAgdWltMiwgYmxzcF9zcGk5LCBibHNwX3VhcnQ5LCBibHNwX3VpbTksIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUwLCAgdWltMiwgYmxzcF9zcGk5LCBibHNwX3VhcnQ5LCBibHNwX3VpbTksIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUxLCAgdWltMiwgYmxzcF9zcGk5LCBibHNwX3VhcnQ5LCBibHNwX2kyYzksIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUyLCAgdWltMiwgYmxzcF9zcGk5LCBibHNwX3VhcnQ5LCBibHNwX2kyYzksIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUzLCAgYmxzcF9zcGkxMCwgYmxzcF91YXJ0MTAsIGJsc3BfdWltMTAsIGJsc3Bfc3BpMl9jczEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDU0LCAgYmxzcF9zcGkxMCwgYmxzcF91YXJ0MTAsIGJsc3BfdWltMTAsIGJsc3Bfc3BpMl9jczIsIGdwX3BkbTAsIE5BLCBOQSksCisJUElOR1JPVVAoNTUsICBibHNwX3NwaTEwLCBibHNwX3VhcnQxMCwgYmxzcF9pMmMxMCwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDU2LCAgYmxzcF9zcGkxMCwgYmxzcF91YXJ0MTAsIGJsc3BfaTJjMTAsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1NywgIHF1YV9taTJzLCBnY2NfZ3BfY2xrMSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1OCwgIHF1YV9taTJzLCBnY2NfZ3BfY2xrMiwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg1OSwgIHF1YV9taTJzLCBnY2NfZ3BfY2xrMywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2MCwgIHF1YV9taTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2MSwgIHF1YV9taTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2MiwgIHF1YV9taTJzLCBibHNwX3NwaTJfY3MxLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDYzLCAgcXVhX21pMnMsIGJsc3Bfc3BpMl9jczIsIGdwX3BkbTIsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NCwgIHByaV9taTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NSwgIHByaV9taTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NiwgIHByaV9taTJzLCBibHNwX3NwaTJfY3MzLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY3LCAgcHJpX21pMnMsIGJsc3Bfc3BpMTBfY3MxLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY4LCAgcHJpX21pMnMsIGJsc3Bfc3BpMTBfY3MyLCBncF9wZG0wLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjksICBzcGtyX21pMnMsIGF1ZGlvX3JlZl9jbGssIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzAsICBzbGltYnVzLCBzcGtyX21pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzEsICBzbGltYnVzLCBzcGtyX21pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzIsICBzcGtyX21pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDczLCAgdGVyX21pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDc0LCAgdGVyX21pMnMsIGdwX3BkbTEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzUsICB0ZXJfbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzYsICB0ZXJfbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzcsICB0ZXJfbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzgsICBzZWNfbWkycywgZ2NjX2dwX2NsazEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzksICBzZWNfbWkycywgZ3BfcGRtMiwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4MCwgIHNlY19taTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4MSwgIHNlY19taTJzLCBibHNwX3NwaTExLCBibHNwX3VhcnQxMSwgYmxzcF91aW0xMSwgZ2NjX2dwX2NsazIsIE5BLCBOQSksCisJUElOR1JPVVAoODIsICBzZWNfbWkycywgYmxzcF9zcGkxMSwgYmxzcF91YXJ0MTEsIGJsc3BfdWltMTEsIGdjY19ncF9jbGszLCBOQSwgTkEpLAorCVBJTkdST1VQKDgzLCAgYmxzcF9zcGkxMSwgYmxzcF91YXJ0MTEsIGJsc3BfaTJjMTEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4NCwgIGJsc3Bfc3BpMTEsIGJsc3BfdWFydDExLCBibHNwX2kyYzExLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODUsICBibHNwX3NwaTEyLCBibHNwX3VhcnQxMiwgYmxzcF91aW0xMiwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDg2LCAgYmxzcF9zcGkxMiwgYmxzcF91YXJ0MTIsIGJsc3BfdWltMTIsIGdwX3BkbTEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDg3LCAgYmxzcF9zcGkxMiwgYmxzcF91YXJ0MTIsIGJsc3BfaTJjMTIsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4OCwgIGJsc3Bfc3BpMTIsIGJsc3BfdWFydDEyLCBibHNwX2kyYzEyLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODksICB0c2lmMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTAsICB0c2lmMSwgYmxzcF9zcGkxMF9jczMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTEsICB0c2lmMSwgc2RjNCwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5MiwgIHRzaWYxLCBzZGM0LCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDkzLCAgdHNpZjIsIHNkYzQsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTQsICB0c2lmMiwgc2RjNCwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5NSwgIHRzaWYyLCBzZGM0LCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDk2LCAgdHNpZjIsIHNkYzQsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTcsICB1aW0xLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5OCwgIHVpbTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDk5LCAgdWltMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTAwLCB1aW0xLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDEsIHVpbV9iYXR0X2FsYXJtLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDIsIGVkcF9ocGQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAogCVBJTkdST1VQKDEwMywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEwNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEwNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEwNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEwNywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEwOCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEwOSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExMCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExMywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExNywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExOCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDExOSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyMCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyMywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyNywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEyOCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEwNCwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTA1LCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDYsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEwNywgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTA4LCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDksIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDExMCwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTExLCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMTIsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDExMywgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTE0LCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMTUsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDExNiwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTE3LCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMTgsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDExOSwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTIwLCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMjEsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEyMiwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTIzLCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMjQsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEyNSwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTI2LCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMjcsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEyOCwgTkEsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCiAJUElOR1JPVVAoMTI5LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCiAJUElOR1JPVVAoMTMwLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCiAJUElOR1JPVVAoMTMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCkBAIC01NzEsMTYgKzk3MSwxNiBAQAogCVBJTkdST1VQKDEzMywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAogCVBJTkdST1VQKDEzNCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAogCVBJTkdST1VQKDEzNSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEzNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAotCVBJTkdST1VQKDEzNywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEzNiwgTkEsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTM3LCBOQSwgZ3JmYywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKIAlQSU5HUk9VUCgxMzgsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKIAlQSU5HUk9VUCgxMzksIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKIAlQSU5HUk9VUCgxNDAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNDEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNDMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNDMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNDQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKLQlQSU5HUk9VUCgxNDUsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNDEsIE5BLCBncmZjLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE0MiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE0MywgTkEsIGdyZmMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTQ0LCBoc2ljLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNDUsIGhzaWMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAogCVNEQ19QSU5HUk9VUChzZGMxX2NsaywgMHgyMDQ0LCAxMywgNiksCiAJU0RDX1BJTkdST1VQKHNkYzFfY21kLCAweDIwNDQsIDExLCAzKSwKIAlTRENfUElOR1JPVVAoc2RjMV9kYXRhLCAweDIwNDQsIDksIDApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2NoaXAuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlwLmMKaW5kZXggOTZjNjBkMi4uYmI4MDVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2NoaXAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jb25mLWdlbmVyaWMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKQEAgLTg2LDcgKzg4LDcgQEAKICAqLwogc3RydWN0IHJvY2tjaGlwX3Bpbl9iYW5rIHsKIAl2b2lkIF9faW9tZW0JCQkqcmVnX2Jhc2U7Ci0Jdm9pZCBfX2lvbWVtCQkJKnJlZ19wdWxsOworCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwX3B1bGw7CiAJc3RydWN0IGNsawkJCSpjbGs7CiAJaW50CQkJCWlycTsKIAl1MzIJCQkJcGluX2Jhc2U7CkBAIC0xMjAsOCArMTIyLDkgQEAKIAljaGFyCQkJCSpsYWJlbDsKIAllbnVtIHJvY2tjaGlwX3BpbmN0cmxfdHlwZQl0eXBlOwogCWludAkJCQltdXhfb2Zmc2V0OwotCXZvaWQJKCpwdWxsX2NhbGNfcmVnKShzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmssIGludCBwaW5fbnVtLAotCQkJCSB2b2lkIF9faW9tZW0gKipyZWcsIHU4ICpiaXQpOworCXZvaWQJKCpwdWxsX2NhbGNfcmVnKShzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmssCisJCQkJICAgIGludCBwaW5fbnVtLCBzdHJ1Y3QgcmVnbWFwICoqcmVnbWFwLAorCQkJCSAgICBpbnQgKnJlZywgdTggKmJpdCk7CiB9OwogCiBzdHJ1Y3Qgcm9ja2NoaXBfcGluX2NvbmZpZyB7CkBAIC0xNTksOCArMTYyLDEwIEBACiB9OwogCiBzdHJ1Y3Qgcm9ja2NoaXBfcGluY3RybCB7Ci0Jdm9pZCBfX2lvbWVtCQkJKnJlZ19iYXNlOwotCXZvaWQgX19pb21lbQkJCSpyZWdfcHVsbDsKKwlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcF9iYXNlOworCWludAkJCQlyZWdfc2l6ZTsKKwlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcF9wdWxsOworCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwX3BtdTsKIAlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluX2N0cmwJKmN0cmw7CiAJc3RydWN0IHBpbmN0cmxfZGVzYwkJcGN0bDsKQEAgLTE3MSw2ICsxNzYsMTIgQEAKIAl1bnNpZ25lZCBpbnQJCQluZnVuY3Rpb25zOwogfTsKIAorc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIHJvY2tjaGlwX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmdjX3RvX3Bpbl9iYW5rKHN0cnVjdCBncGlvX2NoaXAgKmdjKQogewogCXJldHVybiBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCByb2NrY2hpcF9waW5fYmFuaywgZ3Bpb19jaGlwKTsKQEAgLTMyOSw2ICszNDAsMjkgQEAKICAqIEhhcmR3YXJlIGFjY2VzcwogICovCiAKK3N0YXRpYyBpbnQgcm9ja2NoaXBfZ2V0X211eChzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmssIGludCBwaW4pCit7CisJc3RydWN0IHJvY2tjaGlwX3BpbmN0cmwgKmluZm8gPSBiYW5rLT5kcnZkYXRhOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJlZywgcmV0OworCXU4IGJpdDsKKworCWlmIChiYW5rLT5iYW5rX3R5cGUgPT0gUkszMTg4X0JBTkswICYmIHBpbiA8IDE2KQorCQlyZXR1cm4gUktfRlVOQ19HUElPOworCisJLyogZ2V0IGJhc2ljIHF1YWRydXBlbCBvZiBtdXggcmVnaXN0ZXJzIGFuZCB0aGUgY29ycmVjdCByZWcgaW5zaWRlICovCisJcmVnID0gaW5mby0+Y3RybC0+bXV4X29mZnNldDsKKwlyZWcgKz0gYmFuay0+YmFua19udW0gKiAweDEwOworCXJlZyArPSAocGluIC8gOCkgKiA0OworCWJpdCA9IChwaW4gJSA4KSAqIDI7CisKKwlyZXQgPSByZWdtYXBfcmVhZChpbmZvLT5yZWdtYXBfYmFzZSwgcmVnLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuICgodmFsID4+IGJpdCkgJiAzKTsKK30KKwogLyoKICAqIFNldCBhIG5ldyBtdXggZnVuY3Rpb24gZm9yIGEgcGluLgogICoKQEAgLTM0NSw3ICszNzksNyBAQAogc3RhdGljIGludCByb2NrY2hpcF9zZXRfbXV4KHN0cnVjdCByb2NrY2hpcF9waW5fYmFuayAqYmFuaywgaW50IHBpbiwgaW50IG11eCkKIHsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluY3RybCAqaW5mbyA9IGJhbmstPmRydmRhdGE7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBpbmZvLT5yZWdfYmFzZSArIGluZm8tPmN0cmwtPm11eF9vZmZzZXQ7CisJaW50IHJlZywgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggYml0OwogCXUzMiBkYXRhOwpAQCAtMzY4LDYgKzQwMiw3IEBACiAJCQkJCQliYW5rLT5iYW5rX251bSwgcGluLCBtdXgpOwogCiAJLyogZ2V0IGJhc2ljIHF1YWRydXBlbCBvZiBtdXggcmVnaXN0ZXJzIGFuZCB0aGUgY29ycmVjdCByZWcgaW5zaWRlICovCisJcmVnID0gaW5mby0+Y3RybC0+bXV4X29mZnNldDsKIAlyZWcgKz0gYmFuay0+YmFua19udW0gKiAweDEwOwogCXJlZyArPSAocGluIC8gOCkgKiA0OwogCWJpdCA9IChwaW4gJSA4KSAqIDI7CkBAIC0zNzYsMTEgKzQxMSwxMSBAQAogCiAJZGF0YSA9ICgzIDw8IChiaXQgKyAxNikpOwogCWRhdGEgfD0gKG11eCAmIDMpIDw8IGJpdDsKLQl3cml0ZWwoZGF0YSwgcmVnKTsKKwlyZXQgPSByZWdtYXBfd3JpdGUoaW5mby0+cmVnbWFwX2Jhc2UsIHJlZywgZGF0YSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5zbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBSSzI5MjhfUFVMTF9PRkZTRVQJCTB4MTE4CkBAIC0zODgsMzQgKzQyMyw0NiBAQAogI2RlZmluZSBSSzI5MjhfUFVMTF9CQU5LX1NUUklERQkJOAogCiBzdGF0aWMgdm9pZCByazI5MjhfY2FsY19wdWxsX3JlZ19hbmRfYml0KHN0cnVjdCByb2NrY2hpcF9waW5fYmFuayAqYmFuaywKLQkJCQkgICAgaW50IHBpbl9udW0sIHZvaWQgX19pb21lbSAqKnJlZywgdTggKmJpdCkKKwkJCQkgICAgaW50IHBpbl9udW0sIHN0cnVjdCByZWdtYXAgKipyZWdtYXAsCisJCQkJICAgIGludCAqcmVnLCB1OCAqYml0KQogewogCXN0cnVjdCByb2NrY2hpcF9waW5jdHJsICppbmZvID0gYmFuay0+ZHJ2ZGF0YTsKIAotCSpyZWcgPSBpbmZvLT5yZWdfYmFzZSArIFJLMjkyOF9QVUxMX09GRlNFVDsKKwkqcmVnbWFwID0gaW5mby0+cmVnbWFwX2Jhc2U7CisJKnJlZyA9IFJLMjkyOF9QVUxMX09GRlNFVDsKIAkqcmVnICs9IGJhbmstPmJhbmtfbnVtICogUksyOTI4X1BVTExfQkFOS19TVFJJREU7CiAJKnJlZyArPSAocGluX251bSAvIFJLMjkyOF9QVUxMX1BJTlNfUEVSX1JFRykgKiA0OwogCiAJKmJpdCA9IHBpbl9udW0gJSBSSzI5MjhfUFVMTF9QSU5TX1BFUl9SRUc7CiB9OwogCisjZGVmaW5lIFJLMzE4OF9QVUxMX09GRlNFVAkJMHgxNjQKICNkZWZpbmUgUkszMTg4X1BVTExfQklUU19QRVJfUElOCTIKICNkZWZpbmUgUkszMTg4X1BVTExfUElOU19QRVJfUkVHCTgKICNkZWZpbmUgUkszMTg4X1BVTExfQkFOS19TVFJJREUJCTE2CisjZGVmaW5lIFJLMzE4OF9QVUxMX1BNVV9PRkZTRVQJCTB4NjQKIAogc3RhdGljIHZvaWQgcmszMTg4X2NhbGNfcHVsbF9yZWdfYW5kX2JpdChzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmssCi0JCQkJICAgIGludCBwaW5fbnVtLCB2b2lkIF9faW9tZW0gKipyZWcsIHU4ICpiaXQpCisJCQkJICAgIGludCBwaW5fbnVtLCBzdHJ1Y3QgcmVnbWFwICoqcmVnbWFwLAorCQkJCSAgICBpbnQgKnJlZywgdTggKmJpdCkKIHsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluY3RybCAqaW5mbyA9IGJhbmstPmRydmRhdGE7CiAKIAkvKiBUaGUgZmlyc3QgMTIgcGlucyBvZiB0aGUgZmlyc3QgYmFuayBhcmUgbG9jYXRlZCBlbHNld2hlcmUgKi8KIAlpZiAoYmFuay0+YmFua190eXBlID09IFJLMzE4OF9CQU5LMCAmJiBwaW5fbnVtIDwgMTIpIHsKLQkJKnJlZyA9IGJhbmstPnJlZ19wdWxsICsKLQkJCQkoKHBpbl9udW0gLyBSSzMxODhfUFVMTF9QSU5TX1BFUl9SRUcpICogNCk7CisJCSpyZWdtYXAgPSBpbmZvLT5yZWdtYXBfcG11ID8gaW5mby0+cmVnbWFwX3BtdQorCQkJCQkgICA6IGJhbmstPnJlZ21hcF9wdWxsOworCQkqcmVnID0gaW5mby0+cmVnbWFwX3BtdSA/IFJLMzE4OF9QVUxMX1BNVV9PRkZTRVQgOiAwOworCQkqcmVnICs9ICgocGluX251bSAvIFJLMzE4OF9QVUxMX1BJTlNfUEVSX1JFRykgKiA0KTsKIAkJKmJpdCA9IHBpbl9udW0gJSBSSzMxODhfUFVMTF9QSU5TX1BFUl9SRUc7CiAJCSpiaXQgKj0gUkszMTg4X1BVTExfQklUU19QRVJfUElOOwogCX0gZWxzZSB7Ci0JCSpyZWcgPSBpbmZvLT5yZWdfcHVsbCAtIDQ7CisJCSpyZWdtYXAgPSBpbmZvLT5yZWdtYXBfcHVsbCA/IGluZm8tPnJlZ21hcF9wdWxsCisJCQkJCSAgICA6IGluZm8tPnJlZ21hcF9iYXNlOworCQkqcmVnID0gaW5mby0+cmVnbWFwX3B1bGwgPyAwIDogUkszMTg4X1BVTExfT0ZGU0VUOworCisJCS8qIGNvcnJlY3QgdGhlIG9mZnNldCwgYXMgaXQgaXMgdGhlIDJuZCBwdWxsIHJlZ2lzdGVyICovCisJCSpyZWcgLT0gNDsKIAkJKnJlZyArPSBiYW5rLT5iYW5rX251bSAqIFJLMzE4OF9QVUxMX0JBTktfU1RSSURFOwogCQkqcmVnICs9ICgocGluX251bSAvIFJLMzE4OF9QVUxMX1BJTlNfUEVSX1JFRykgKiA0KTsKIApAQCAtNDMzLDcgKzQ4MCw4IEBACiB7CiAJc3RydWN0IHJvY2tjaGlwX3BpbmN0cmwgKmluZm8gPSBiYW5rLT5kcnZkYXRhOwogCXN0cnVjdCByb2NrY2hpcF9waW5fY3RybCAqY3RybCA9IGluZm8tPmN0cmw7Ci0Jdm9pZCBfX2lvbWVtICpyZWc7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCWludCByZWcsIHJldDsKIAl1OCBiaXQ7CiAJdTMyIGRhdGE7CiAKQEAgLTQ0MSwxNSArNDg5LDE5IEBACiAJaWYgKGN0cmwtPnR5cGUgPT0gUkszMDY2QikKIAkJcmV0dXJuIFBJTl9DT05GSUdfQklBU19ESVNBQkxFOwogCi0JY3RybC0+cHVsbF9jYWxjX3JlZyhiYW5rLCBwaW5fbnVtLCAmcmVnLCAmYml0KTsKKwljdHJsLT5wdWxsX2NhbGNfcmVnKGJhbmssIHBpbl9udW0sICZyZWdtYXAsICZyZWcsICZiaXQpOworCisJcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCByZWcsICZkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJc3dpdGNoIChjdHJsLT50eXBlKSB7CiAJY2FzZSBSSzI5Mjg6Ci0JCXJldHVybiAhKHJlYWRsX3JlbGF4ZWQocmVnKSAmIEJJVChiaXQpKQorCQlyZXR1cm4gIShkYXRhICYgQklUKGJpdCkpCiAJCQkJPyBQSU5fQ09ORklHX0JJQVNfUFVMTF9QSU5fREVGQVVMVAogCQkJCTogUElOX0NPTkZJR19CSUFTX0RJU0FCTEU7CiAJY2FzZSBSSzMxODg6Ci0JCWRhdGEgPSByZWFkbF9yZWxheGVkKHJlZykgPj4gYml0OworCQlkYXRhID4+PSBiaXQ7CiAJCWRhdGEgJj0gKDEgPDwgUkszMTg4X1BVTExfQklUU19QRVJfUElOKSAtIDE7CiAKIAkJc3dpdGNoIChkYXRhKSB7CkBAIC00NzYsNyArNTI4LDggQEAKIHsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluY3RybCAqaW5mbyA9IGJhbmstPmRydmRhdGE7CiAJc3RydWN0IHJvY2tjaGlwX3Bpbl9jdHJsICpjdHJsID0gaW5mby0+Y3RybDsKLQl2b2lkIF9faW9tZW0gKnJlZzsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJaW50IHJlZywgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggYml0OwogCXUzMiBkYXRhOwpAQCAtNDg4LDcgKzU0MSw3IEBACiAJaWYgKGN0cmwtPnR5cGUgPT0gUkszMDY2QikKIAkJcmV0dXJuIHB1bGwgPyAtRUlOVkFMIDogMDsKIAotCWN0cmwtPnB1bGxfY2FsY19yZWcoYmFuaywgcGluX251bSwgJnJlZywgJmJpdCk7CisJY3RybC0+cHVsbF9jYWxjX3JlZyhiYW5rLCBwaW5fbnVtLCAmcmVnbWFwLCAmcmVnLCAmYml0KTsKIAogCXN3aXRjaCAoY3RybC0+dHlwZSkgewogCWNhc2UgUksyOTI4OgpAQCAtNDk3LDcgKzU1MCw3IEBACiAJCWRhdGEgPSBCSVQoYml0ICsgMTYpOwogCQlpZiAocHVsbCA9PSBQSU5fQ09ORklHX0JJQVNfRElTQUJMRSkKIAkJCWRhdGEgfD0gQklUKGJpdCk7Ci0JCXdyaXRlbChkYXRhLCByZWcpOworCQlyZXQgPSByZWdtYXBfd3JpdGUocmVnbWFwLCByZWcsIGRhdGEpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPnNsb2NrLCBmbGFncyk7CiAJCWJyZWFrOwpAQCAtNTI2LDcgKzU3OSw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXdyaXRlbChkYXRhLCByZWcpOworCQlyZXQgPSByZWdtYXBfd3JpdGUocmVnbWFwLCByZWcsIGRhdGEpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPnNsb2NrLCBmbGFncyk7CiAJCWJyZWFrOwpAQCAtNTM1LDcgKzU4OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC02ODcsNiArNzQwLDEwIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW50IHJvY2tjaGlwX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQkJICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSk7CitzdGF0aWMgaW50IHJvY2tjaGlwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmZzZXQpOworCiAvKiBzZXQgdGhlIHBpbiBjb25maWcgc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWVkIHBpbiAqLwogc3RhdGljIGludCByb2NrY2hpcF9waW5jb25mX3NldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHVuc2lnbmVkIGludCBwaW4sCiAJCQkJdW5zaWduZWQgbG9uZyAqY29uZmlncywgdW5zaWduZWQgbnVtX2NvbmZpZ3MpCkBAIC03MjQsNiArNzgxLDEzIEBACiAJCQlpZiAocmMpCiAJCQkJcmV0dXJuIHJjOwogCQkJYnJlYWs7CisJCWNhc2UgUElOX0NPTkZJR19PVVRQVVQ6CisJCQlyYyA9IHJvY2tjaGlwX2dwaW9fZGlyZWN0aW9uX291dHB1dCgmYmFuay0+Z3Bpb19jaGlwLAorCQkJCQkJCSAgICBwaW4gLSBiYW5rLT5waW5fYmFzZSwKKwkJCQkJCQkgICAgYXJnKTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PVFNVUFA7CiAJCQlicmVhazsKQEAgLTc0MCwxMyArODA0LDE1IEBACiAJc3RydWN0IHJvY2tjaGlwX3BpbmN0cmwgKmluZm8gPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmsgPSBwaW5fdG9fYmFuayhpbmZvLCBwaW4pOwogCWVudW0gcGluX2NvbmZpZ19wYXJhbSBwYXJhbSA9IHBpbmNvbmZfdG9fY29uZmlnX3BhcmFtKCpjb25maWcpOworCXUxNiBhcmc7CisJaW50IHJjOwogCiAJc3dpdGNoIChwYXJhbSkgewogCWNhc2UgUElOX0NPTkZJR19CSUFTX0RJU0FCTEU6CiAJCWlmIChyb2NrY2hpcF9nZXRfcHVsbChiYW5rLCBwaW4gLSBiYW5rLT5waW5fYmFzZSkgIT0gcGFyYW0pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkqY29uZmlnID0gMDsKKwkJYXJnID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDoKIAljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX0RPV046CkBAIC03NTgsMTMgKzgyNCwyNiBAQAogCQlpZiAocm9ja2NoaXBfZ2V0X3B1bGwoYmFuaywgcGluIC0gYmFuay0+cGluX2Jhc2UpICE9IHBhcmFtKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJKmNvbmZpZyA9IDE7CisJCWFyZyA9IDE7CisJCWJyZWFrOworCWNhc2UgUElOX0NPTkZJR19PVVRQVVQ6CisJCXJjID0gcm9ja2NoaXBfZ2V0X211eChiYW5rLCBwaW4gLSBiYW5rLT5waW5fYmFzZSk7CisJCWlmIChyYyAhPSBSS19GVU5DX0dQSU8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyYyA9IHJvY2tjaGlwX2dwaW9fZ2V0KCZiYW5rLT5ncGlvX2NoaXAsIHBpbiAtIGJhbmstPnBpbl9iYXNlKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlhcmcgPSByYyA/IDEgOiAwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RTVVBQOwogCQlicmVhazsKIAl9CiAKKwkqY29uZmlnID0gcGluY29uZl90b19jb25maWdfcGFja2VkKHBhcmFtLCBhcmcpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNjUsMTYgKzE0NDQsMTcgQEAKIH0KIAogc3RhdGljIGludCByb2NrY2hpcF9nZXRfYmFua19kYXRhKHN0cnVjdCByb2NrY2hpcF9waW5fYmFuayAqYmFuaywKLQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldikKKwkJCQkgIHN0cnVjdCByb2NrY2hpcF9waW5jdHJsICppbmZvKQogewogCXN0cnVjdCByZXNvdXJjZSByZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoYmFuay0+b2Zfbm9kZSwgMCwgJnJlcykpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgZmluZCBJTyByZXNvdXJjZSBmb3IgYmFua1xuIik7CisJCWRldl9lcnIoaW5mby0+ZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2UgZm9yIGJhbmtcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQliYW5rLT5yZWdfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsICZyZXMpOworCWJhbmstPnJlZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGluZm8tPmRldiwgJnJlcyk7CiAJaWYgKElTX0VSUihiYW5rLT5yZWdfYmFzZSkpCiAJCXJldHVybiBQVFJfRVJSKGJhbmstPnJlZ19iYXNlKTsKIApAQCAtMTM4NCwxNiArMTQ2NCwzMCBAQAogCSAqLwogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShiYW5rLT5vZl9ub2RlLAogCQkJCSAgICAicm9ja2NoaXAscmszMTg4LWdwaW8tYmFuazAiKSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisKIAkJYmFuay0+YmFua190eXBlID0gUkszMTg4X0JBTkswOwogCi0JCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGJhbmstPm9mX25vZGUsIDEsICZyZXMpKSB7Ci0JCQlkZXZfZXJyKGRldiwgImNhbm5vdCBmaW5kIElPIHJlc291cmNlIGZvciBiYW5rXG4iKTsKLQkJCXJldHVybiAtRU5PRU5UOworCQlub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShiYW5rLT5vZl9ub2RlLT5wYXJlbnQsCisJCQkJCSJyb2NrY2hpcCxwbXUiLCAwKTsKKwkJaWYgKCFub2RlKSB7CisJCQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShiYW5rLT5vZl9ub2RlLCAxLCAmcmVzKSkgeworCQkJCWRldl9lcnIoaW5mby0+ZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2UgZm9yIGJhbmtcbiIpOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCisJCQliYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGluZm8tPmRldiwgJnJlcyk7CisJCQlpZiAoSVNfRVJSKGJhc2UpKQorCQkJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCQkJcm9ja2NoaXBfcmVnbWFwX2NvbmZpZy5tYXhfcmVnaXN0ZXIgPQorCQkJCQkJICAgIHJlc291cmNlX3NpemUoJnJlcykgLSA0OworCQkJcm9ja2NoaXBfcmVnbWFwX2NvbmZpZy5uYW1lID0KKwkJCQkJICAgICJyb2NrY2hpcCxyazMxODgtZ3Bpby1iYW5rMC1wdWxsIjsKKwkJCWJhbmstPnJlZ21hcF9wdWxsID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGluZm8tPmRldiwKKwkJCQkJCSAgICBiYXNlLAorCQkJCQkJICAgICZyb2NrY2hpcF9yZWdtYXBfY29uZmlnKTsKIAkJfQogCi0JCWJhbmstPnJlZ19wdWxsID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgJnJlcyk7Ci0JCWlmIChJU19FUlIoYmFuay0+cmVnX3B1bGwpKQotCQkJcmV0dXJuIFBUUl9FUlIoYmFuay0+cmVnX3B1bGwpOwogCX0gZWxzZSB7CiAJCWJhbmstPmJhbmtfdHlwZSA9IENPTU1PTl9CQU5LOwogCX0KQEAgLTE0MzMsNyArMTUyNyw3IEBACiAJCQlpZiAoIXN0cmNtcChiYW5rLT5uYW1lLCBucC0+bmFtZSkpIHsKIAkJCQliYW5rLT5vZl9ub2RlID0gbnA7CiAKLQkJCQlpZiAoIXJvY2tjaGlwX2dldF9iYW5rX2RhdGEoYmFuaywgJnBkZXYtPmRldikpCisJCQkJaWYgKCFyb2NrY2hpcF9nZXRfYmFua19kYXRhKGJhbmssIGQpKQogCQkJCQliYW5rLT52YWxpZCA9IHRydWU7CiAKIAkJCQlicmVhazsKQEAgLTE0NTcsNyArMTU1MSw5IEBACiAJc3RydWN0IHJvY2tjaGlwX3BpbmN0cmwgKmluZm87CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluX2N0cmwgKmN0cmw7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlLCAqbm9kZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHJldDsKIAogCWlmICghZGV2LT5vZl9ub2RlKSB7CkBAIC0xNDY5LDI1ICsxNTY1LDU2IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWluZm8tPmRldiA9IGRldjsKKwogCWN0cmwgPSByb2NrY2hpcF9waW5jdHJsX2dldF9zb2NfZGF0YShpbmZvLCBwZGV2KTsKIAlpZiAoIWN0cmwpIHsKIAkJZGV2X2VycihkZXYsICJkcml2ZXIgZGF0YSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWluZm8tPmN0cmwgPSBjdHJsOwotCWluZm8tPmRldiA9IGRldjsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaW5mby0+cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKLQlpZiAoSVNfRVJSKGluZm8tPnJlZ19iYXNlKSkKLQkJcmV0dXJuIFBUUl9FUlIoaW5mby0+cmVnX2Jhc2UpOworCW5vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIiwgMCk7CisJaWYgKG5vZGUpIHsKKwkJaW5mby0+cmVnbWFwX2Jhc2UgPSBzeXNjb25fbm9kZV90b19yZWdtYXAobm9kZSk7CisJCWlmIChJU19FUlIoaW5mby0+cmVnbWFwX2Jhc2UpKQorCQkJcmV0dXJuIFBUUl9FUlIoaW5mby0+cmVnbWFwX2Jhc2UpOworCX0gZWxzZSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwkJaWYgKElTX0VSUihiYXNlKSkKKwkJCXJldHVybiBQVFJfRVJSKGJhc2UpOwogCi0JLyogVGhlIFJLMzE4OCBoYXMgaXRzIHB1bGwgcmVnaXN0ZXJzIGluIGEgc2VwYXJhdGUgcGxhY2UgKi8KLQlpZiAoY3RybC0+dHlwZSA9PSBSSzMxODgpIHsKLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKLQkJaW5mby0+cmVnX3B1bGwgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKLQkJaWYgKElTX0VSUihpbmZvLT5yZWdfcHVsbCkpCi0JCQlyZXR1cm4gUFRSX0VSUihpbmZvLT5yZWdfcHVsbCk7CisJCXJvY2tjaGlwX3JlZ21hcF9jb25maWcubWF4X3JlZ2lzdGVyID0gcmVzb3VyY2Vfc2l6ZShyZXMpIC0gNDsKKwkJcm9ja2NoaXBfcmVnbWFwX2NvbmZpZy5uYW1lID0gInJvY2tjaGlwLHBpbmN0cmwiOworCQlpbmZvLT5yZWdtYXBfYmFzZSA9IGRldm1fcmVnbWFwX2luaXRfbW1pbygmcGRldi0+ZGV2LCBiYXNlLAorCQkJCQkJICAgICZyb2NrY2hpcF9yZWdtYXBfY29uZmlnKTsKKworCQkvKiB0byBjaGVjayBmb3IgdGhlIG9sZCBkdC1iaW5kaW5ncyAqLworCQlpbmZvLT5yZWdfc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKworCQkvKiBIb25vciB0aGUgb2xkIGJpbmRpbmcsIHdpdGggcHVsbCByZWdpc3RlcnMgYXMgMm5kIHJlc291cmNlICovCisJCWlmIChjdHJsLT50eXBlID09IFJLMzE4OCAmJiBpbmZvLT5yZWdfc2l6ZSA8IDB4MjAwKSB7CisJCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQkJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCQkJaWYgKElTX0VSUihiYXNlKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKworCQkJcm9ja2NoaXBfcmVnbWFwX2NvbmZpZy5tYXhfcmVnaXN0ZXIgPQorCQkJCQkJCXJlc291cmNlX3NpemUocmVzKSAtIDQ7CisJCQlyb2NrY2hpcF9yZWdtYXBfY29uZmlnLm5hbWUgPSAicm9ja2NoaXAscGluY3RybC1wdWxsIjsKKwkJCWluZm8tPnJlZ21hcF9wdWxsID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKCZwZGV2LT5kZXYsCisJCQkJCQkgICAgYmFzZSwKKwkJCQkJCSAgICAmcm9ja2NoaXBfcmVnbWFwX2NvbmZpZyk7CisJCX0KKwl9CisKKwkvKiB0cnkgdG8gZmluZCB0aGUgb3B0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBwbXUgc3lzY29uICovCisJbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJyb2NrY2hpcCxwbXUiLCAwKTsKKwlpZiAobm9kZSkgeworCQlpbmZvLT5yZWdtYXBfcG11ID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKG5vZGUpOworCQlpZiAoSVNfRVJSKGluZm8tPnJlZ21hcF9wbXUpKQorCQkJcmV0dXJuIFBUUl9FUlIoaW5mby0+cmVnbWFwX3BtdSk7CiAJfQogCiAJcmV0ID0gcm9ja2NoaXBfZ3Bpb2xpYl9yZWdpc3RlcihwZGV2LCBpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXNhbXN1bmcuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXNhbXN1bmcuYwppbmRleCAwMzI0ZDRjLi4zZTYxZDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc2Ftc3VuZy5jCkBAIC0xMTE0LDYgKzExMTQsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzYW1zdW5nX3BpbmN0cmxfZHRfbWF0Y2hbXSA9IHsKICNpZmRlZiBDT05GSUdfUElOQ1RSTF9FWFlOT1MKKwl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1waW5jdHJsIiwKKwkJLmRhdGEgPSAodm9pZCAqKWV4eW5vczMyNTBfcGluX2N0cmwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1waW5jdHJsIiwKIAkJLmRhdGEgPSAodm9pZCAqKWV4eW5vczQyMTBfcGluX2N0cmwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNHgxMi1waW5jdHJsIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXNhbXN1bmcuaCBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXNhbXN1bmcuaAppbmRleCBiYWI5YzIxLi5iM2U0MWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zYW1zdW5nLmgKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc2Ftc3VuZy5oCkBAIC0yNTEsNiArMjUxLDcgQEAKIH07CiAKIC8qIGxpc3Qgb2YgYWxsIGV4cG9ydGVkIFNvQyBzcGVjaWZpYyBkYXRhICovCitleHRlcm4gc3RydWN0IHNhbXN1bmdfcGluX2N0cmwgZXh5bm9zMzI1MF9waW5fY3RybFtdOwogZXh0ZXJuIHN0cnVjdCBzYW1zdW5nX3Bpbl9jdHJsIGV4eW5vczQyMTBfcGluX2N0cmxbXTsKIGV4dGVybiBzdHJ1Y3Qgc2Ftc3VuZ19waW5fY3RybCBleHlub3M0eDEyX3Bpbl9jdHJsW107CiBleHRlcm4gc3RydWN0IHNhbXN1bmdfcGluX2N0cmwgZXh5bm9zNTI1MF9waW5fY3RybFtdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3QuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN0LmMKaW5kZXggYmQ3MjViMC4uMWJkNjM2M2JjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3QuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zdC5jCkBAIC0xMywxMCArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRlc2MuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CkBAIC0yNDIsMTMgKzIzOCwxMyBAQAogfTsKIAogc3RydWN0IHN0X3BjdGxfZGF0YSB7Ci0JZW51bSBzdF9yZXRpbWVfc3R5bGUgcnRfc3R5bGU7Ci0JdW5zaWduZWQgaW50CSppbnB1dF9kZWxheXM7Ci0JaW50CQluaW5wdXRfZGVsYXlzOwotCXVuc2lnbmVkIGludAkqb3V0cHV0X2RlbGF5czsKLQlpbnQJCW5vdXRwdXRfZGVsYXlzOworCWNvbnN0IGVudW0gc3RfcmV0aW1lX3N0eWxlCXJ0X3N0eWxlOworCWNvbnN0IHVuc2lnbmVkIGludAkJKmlucHV0X2RlbGF5czsKKwljb25zdCBpbnQJCQluaW5wdXRfZGVsYXlzOworCWNvbnN0IHVuc2lnbmVkIGludAkJKm91dHB1dF9kZWxheXM7CisJY29uc3QgaW50CQkJbm91dHB1dF9kZWxheXM7CiAJLyogcmVnaXN0ZXIgb2Zmc2V0IGluZm9ybWF0aW9uICovCi0JaW50IGFsdCwgb2UsIHB1LCBvZCwgcnQ7CisJY29uc3QgaW50IGFsdCwgb2UsIHB1LCBvZCwgcnQ7CiB9OwogCiBzdHJ1Y3Qgc3RfcGluY29uZiB7CkBAIC0zMjEsNyArMzE3LDYgQEAKIAlzdHJ1Y3QgcGluY3RybF9ncGlvX3JhbmdlCXJhbmdlOwogCXZvaWQgX19pb21lbQkJCSpiYXNlOwogCXN0cnVjdCBzdF9waW9fY29udHJvbAkJcGM7Ci0Jc3RydWN0CWlycV9kb21haW4JCSpkb21haW47CiAJdW5zaWduZWQgbG9uZwkJCWlycV9lZGdlX2NvbmY7CiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgICAgICBsb2NrOwogfTsKQEAgLTM0MiwxNSArMzM3LDE1IEBACiAKIC8qIFNPQyBzcGVjaWZpYyBkYXRhICovCiAvKiBTVGlINDE1IGRhdGEgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RpaDQxNV9pbnB1dF9kZWxheXNbXSA9IHswLCA1MDAsIDEwMDAsIDE1MDB9Owotc3RhdGljIHVuc2lnbmVkIGludCBzdGloNDE1X291dHB1dF9kZWxheXNbXSA9IHswLCAxMDAwLCAyMDAwLCAzMDAwfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RpaDQxNV9pbnB1dF9kZWxheXNbXSA9IHswLCA1MDAsIDEwMDAsIDE1MDB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGloNDE1X291dHB1dF9kZWxheXNbXSA9IHswLCAxMDAwLCAyMDAwLCAzMDAwfTsKIAogI2RlZmluZSBTVElINDE1X1BDVFJMX0NPTU1PTl9EQVRBCQkJCVwKIAkucnRfc3R5bGUJPSBzdF9yZXRpbWVfc3R5bGVfcGFja2VkLAkJXAogCS5pbnB1dF9kZWxheXMJPSBzdGloNDE1X2lucHV0X2RlbGF5cywJCQlcCi0JLm5pbnB1dF9kZWxheXMJPSA0LAkJCQkJXAorCS5uaW5wdXRfZGVsYXlzCT0gQVJSQVlfU0laRShzdGloNDE1X2lucHV0X2RlbGF5cyksCVwKIAkub3V0cHV0X2RlbGF5cyA9IHN0aWg0MTVfb3V0cHV0X2RlbGF5cywJCQlcCi0JLm5vdXRwdXRfZGVsYXlzID0gNAorCS5ub3V0cHV0X2RlbGF5cyA9IEFSUkFZX1NJWkUoc3RpaDQxNV9vdXRwdXRfZGVsYXlzKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0X3BjdGxfZGF0YSAgc3RpaDQxNV9zYmNfZGF0YSA9IHsKIAlTVElINDE1X1BDVFJMX0NPTU1PTl9EQVRBLApAQCAtMzc4LDggKzM3Myw4IEBACiB9OwogCiAvKiBTVGlINDE2IGRhdGEgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RpaDQxNl9kZWxheXNbXSA9IHswLCAzMDAsIDUwMCwgNzUwLCAxMDAwLCAxMjUwLCAxNTAwLAotCQkJMTc1MCwgMjAwMCwgMjI1MCwgMjUwMCwgMjc1MCwgMzAwMCwgMzI1MCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGloNDE2X2RlbGF5c1tdID0gezAsIDMwMCwgNTAwLCA3NTAsIDEwMDAsIDEyNTAsCisJCQkxNTAwLCAxNzUwLCAyMDAwLCAyMjUwLCAyNTAwLCAyNzUwLCAzMDAwLCAzMjUwIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RfcGN0bF9kYXRhICBzdGloNDE2X2RhdGEgPSB7CiAJLnJ0X3N0eWxlCT0gc3RfcmV0aW1lX3N0eWxlX2RlZGljYXRlZCwKQEAgLTQ2OCw3ICs0NjMsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RfcGluY29uZl9kZWxheV90b19iaXQodW5zaWduZWQgaW50IGRlbGF5LAogCWNvbnN0IHN0cnVjdCBzdF9wY3RsX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgY29uZmlnKQogewotCXVuc2lnbmVkIGludCAqZGVsYXlfdGltZXM7CisJY29uc3QgdW5zaWduZWQgaW50ICpkZWxheV90aW1lczsKIAlpbnQgbnVtX2RlbGF5X3RpbWVzLCBpLCBjbG9zZXN0X2luZGV4ID0gLTE7CiAJdW5zaWduZWQgaW50IGNsb3Nlc3RfZGl2ZXJnZW5jZSA9IFVJTlRfTUFYOwogCkBAIC01MDEsNyArNDk2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN0X3BpbmNvbmZfYml0X3RvX2RlbGF5KHVuc2lnbmVkIGludCBpbmRleCwKIAljb25zdCBzdHJ1Y3Qgc3RfcGN0bF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIG91dHB1dCkKIHsKLQl1bnNpZ25lZCBpbnQgKmRlbGF5X3RpbWVzOworCWNvbnN0IHVuc2lnbmVkIGludCAqZGVsYXlfdGltZXM7CiAJaW50IG51bV9kZWxheV90aW1lczsKIAogCWlmIChvdXRwdXQpIHsKQEAgLTEyODUsNTggKzEyODAsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGdwaW9fY2hpcF90b19iYW5rKGNoaXApOwotCWludCBpcnEgPSAtRU5YSU87Ci0KLQlpZiAob2Zmc2V0IDwgY2hpcC0+bmdwaW8pCi0JCWlycSA9IGlycV9maW5kX21hcHBpbmcoYmFuay0+ZG9tYWluLCBvZmZzZXQpOwotCi0JZGV2X2luZm8oY2hpcC0+ZGV2LCAiJXM6IHJlcXVlc3QgSVJRIGZvciBHUElPICVkLCByZXR1cm4gJWRcbiIsCi0JCQkJY2hpcC0+bGFiZWwsIG9mZnNldCArIGNoaXAtPmJhc2UsIGlycSk7Ci0JcmV0dXJuIGlycTsKLX0KLQogc3RhdGljIHZvaWQgc3RfZ3Bpb19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGdwaW9fY2hpcF90b19iYW5rKGdjKTsKIAogCXdyaXRlbChCSVQoZC0+aHdpcnEpLCBiYW5rLT5iYXNlICsgUkVHX1BJT19DTFJfUE1BU0spOwogfQogCiBzdGF0aWMgdm9pZCBzdF9ncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBzdF9ncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBzdF9ncGlvX2JhbmsgKmJhbmsgPSBncGlvX2NoaXBfdG9fYmFuayhnYyk7CiAKIAl3cml0ZWwoQklUKGQtPmh3aXJxKSwgYmFuay0+YmFzZSArIFJFR19QSU9fU0VUX1BNQVNLKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzdF9ncGlvX2lycV9zdGFydHVwKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQlzdHJ1Y3Qgc3RfZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0KLQlpZiAoZ3Bpb19sb2NrX2FzX2lycSgmYmFuay0+Z3Bpb19jaGlwLCBkLT5od2lycSkpCi0JCWRldl9lcnIoYmFuay0+Z3Bpb19jaGlwLmRldiwKLQkJCSJ1bmFibGUgdG8gbG9jayBIVyBJUlEgJWx1IGZvciBJUlFcbiIsCi0JCQlkLT5od2lycSk7Ci0KLQlzdF9ncGlvX2lycV91bm1hc2soZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RfZ3Bpb19pcnFfc2h1dGRvd24oc3RydWN0IGlycV9kYXRhICpkKQotewotCXN0cnVjdCBzdF9ncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQotCXN0X2dwaW9faXJxX21hc2soZCk7Ci0JZ3Bpb191bmxvY2tfYXNfaXJxKCZiYW5rLT5ncGlvX2NoaXAsIGQtPmh3aXJxKTsKLX0KLQogc3RhdGljIGludCBzdF9ncGlvX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCiB7Ci0Jc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGdwaW9fY2hpcF90b19iYW5rKGdjKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjb21wLCBwaW4gPSBkLT5od2lycTsKIAl1MzIgdmFsOwpAQCAtMTQ0MCw3ICsxNDAzLDcgQEAKIAkJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnFfZmluZF9tYXBwaW5nKGJhbmstPmRvbWFpbiwgbikpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYmFuay0+Z3Bpb19jaGlwLmlycWRvbWFpbiwgbikpOwogCQl9CiAJfQogfQpAQCAtMTQ0OSw3ICsxNDEyLDggQEAKIHsKIAkvKiBpbnRlcnJ1cHQgZGVkaWNhdGVkIHBlciBiYW5rICovCiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2dldF9jaGlwKGlycSk7Ci0Jc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGlycV9nZXRfaGFuZGxlcl9kYXRhKGlycSk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOworCXN0cnVjdCBzdF9ncGlvX2JhbmsgKmJhbmsgPSBncGlvX2NoaXBfdG9fYmFuayhnYyk7CiAKIAljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAlfX2dwaW9faXJxX2hhbmRsZXIoYmFuayk7CkBAIC0xNDgzLDcgKzE0NDcsNiBAQAogCS5uZ3BpbwkJCT0gU1RfR1BJT19QSU5TX1BFUl9CQU5LLAogCS5vZl9ncGlvX25fY2VsbHMJPSAxLAogCS5vZl94bGF0ZQkJPSBzdF9ncGlvX3hsYXRlLAotCS50b19pcnEJCQk9IHN0X2dwaW9fdG9faXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzdF9ncGlvX2lycWNoaXAgPSB7CkBAIC0xNDkxLDI2ICsxNDU0LDYgQEAKIAkuaXJxX21hc2sJPSBzdF9ncGlvX2lycV9tYXNrLAogCS5pcnFfdW5tYXNrCT0gc3RfZ3Bpb19pcnFfdW5tYXNrLAogCS5pcnFfc2V0X3R5cGUJPSBzdF9ncGlvX2lycV9zZXRfdHlwZSwKLQkuaXJxX3N0YXJ0dXAJPSBzdF9ncGlvX2lycV9zdGFydHVwLAotCS5pcnFfc2h1dGRvd24JPSBzdF9ncGlvX2lycV9zaHV0ZG93biwKLX07Ci0KLXN0YXRpYyBpbnQgc3RfZ3Bpb19pcnFfZG9tYWluX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqaCwKLQkJCXVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdfbnVtYmVyX3QgaHcpCi17Ci0Jc3RydWN0IHN0X2dwaW9fYmFuayAqYmFuayA9IGgtPmhvc3RfZGF0YTsKLQotCWlycV9zZXRfY2hpcCh2aXJxLCAmc3RfZ3Bpb19pcnFjaGlwKTsKLQlpcnFfc2V0X2hhbmRsZXIodmlycSwgaGFuZGxlX3NpbXBsZV9pcnEpOwotCXNldF9pcnFfZmxhZ3ModmlycSwgSVJRRl9WQUxJRCk7Ci0JaXJxX3NldF9jaGlwX2RhdGEodmlycSwgYmFuayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyBzdF9ncGlvX2lycV9vcHMgPSB7Ci0JLm1hcAk9IHN0X2dwaW9faXJxX2RvbWFpbl9tYXAsCi0JLnhsYXRlCT0gaXJxX2RvbWFpbl94bGF0ZV90d29jZWxsLAogfTsKIAogc3RhdGljIGludCBzdF9ncGlvbGliX3JlZ2lzdGVyX2Jhbmsoc3RydWN0IHN0X3BpbmN0cmwgKmluZm8sCkBAIC0xNTIxLDcgKzE0NjQsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGluZm8tPmRldjsKIAlpbnQgYmFua19udW0gPSBvZl9hbGlhc19nZXRfaWQobnAsICJncGlvIik7CiAJc3RydWN0IHJlc291cmNlIHJlcywgaXJxX3JlczsKLQlpbnQgZ3Bpb19pcnEgPSAwLCBlcnIsIGk7CisJaW50IGdwaW9faXJxID0gMCwgZXJyOwogCiAJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE1MzQsNiArMTQ3Nyw3IEBACiAJYmFuay0+Z3Bpb19jaGlwLmJhc2UgPSBiYW5rX251bSAqIFNUX0dQSU9fUElOU19QRVJfQkFOSzsKIAliYW5rLT5ncGlvX2NoaXAubmdwaW8gPSBTVF9HUElPX1BJTlNfUEVSX0JBTks7CiAJYmFuay0+Z3Bpb19jaGlwLm9mX25vZGUgPSBucDsKKwliYW5rLT5ncGlvX2NoaXAuZGV2ID0gZGV2OwogCXNwaW5fbG9ja19pbml0KCZiYW5rLT5sb2NrKTsKIAogCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAic3QsYmFuay1uYW1lIiwgJnJhbmdlLT5uYW1lKTsKQEAgLTE1NzEsMjYgKzE1MTUsMTggQEAKIAogCWlmIChvZl9pcnFfdG9fcmVzb3VyY2UobnAsIDAsICZpcnFfcmVzKSkgewogCQlncGlvX2lycSA9IGlycV9yZXMuc3RhcnQ7Ci0JCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGdwaW9faXJxLCBzdF9ncGlvX2lycV9oYW5kbGVyKTsKLQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoZ3Bpb19pcnEsIGJhbmspOworCQlncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCZiYW5rLT5ncGlvX2NoaXAsICZzdF9ncGlvX2lycWNoaXAsCisJCQkJCSAgICAgZ3Bpb19pcnEsIHN0X2dwaW9faXJxX2hhbmRsZXIpOwogCX0KIAogCWlmIChpbmZvLT5pcnFtdXhfYmFzZSA+IDAgfHwgZ3Bpb19pcnEgPiAwKSB7Ci0JCS8qIFNldHVwIElSUSBkb21haW4gKi8KLQkJYmFuay0+ZG9tYWluICA9IGlycV9kb21haW5fYWRkX2xpbmVhcihucCwKLQkJCQkJCVNUX0dQSU9fUElOU19QRVJfQkFOSywKLQkJCQkJCSZzdF9ncGlvX2lycV9vcHMsIGJhbmspOwotCQlpZiAoIWJhbmstPmRvbWFpbikgewotCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGlycSBkb21haW4gZm9yICVzXG4iLAotCQkJCW5wLT5mdWxsX25hbWUpOwotCQl9IGVsc2UgIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBTVF9HUElPX1BJTlNfUEVSX0JBTks7IGkrKykgewotCQkJCWlmIChpcnFfY3JlYXRlX21hcHBpbmcoYmFuay0+ZG9tYWluLCBpKSA8IDApCi0JCQkJCWRldl9lcnIoZGV2LAotCQkJCQkJIkZhaWxlZCB0byBtYXAgSVJRICVpXG4iLCBpKTsKLQkJCX0KKwkJZXJyID0gZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoJmJhbmstPmdwaW9fY2hpcCwgJnN0X2dwaW9faXJxY2hpcCwKKwkJCQkJICAgMCwgaGFuZGxlX3NpbXBsZV9pcnEsCisJCQkJCSAgIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9pbmZvKGRldiwgImNvdWxkIG5vdCBhZGQgaXJxY2hpcFxuIik7CisJCQlyZXR1cm4gZXJyOwogCQl9Ci0KIAl9IGVsc2UgewogCQlkZXZfaW5mbyhkZXYsICJObyBJUlEgc3VwcG9ydCBmb3IgJXMgYmFua1xuIiwgbnAtPmZ1bGxfbmFtZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3VueGktcGlucy5oIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3VueGktcGlucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDYwNjY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN1bnhpLXBpbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4NjMgKzAsMCBAQAotLyoKLSAqIEFsbHdpbm5lciBBMVggU29DcyBwaW5jdHJsIGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWF4aW1lIFJpcGFyZAotICoKLSAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpZm5kZWYgX19QSU5DVFJMX1NVTlhJX1BJTlNfSAotI2RlZmluZSBfX1BJTkNUUkxfU1VOWElfUElOU19ICi0KLSNpbmNsdWRlICJwaW5jdHJsLXN1bnhpLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNGlfYTEwX3BpbnNbXSA9IHsKLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpLAkJLyogQ1MwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDIiKSksCS8qIFJUUyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpKSwJLyogQ1RTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTEiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpKSwJLyogVFggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpLAkJLyogTUlTTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQyIikpLAkvKiBSWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIikpLAkJLyogQ1MxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTMiKSksCQkvKiBDUzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMyIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIikpLAkJLyogTU9TSSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYQ0sgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMyIpKSwJCS8qIENTMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWERWICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFRYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRU1EQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVNRElPICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDYiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFJUUyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEVOICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDYiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIENUUyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDciKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERUUiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVDUlMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NyIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogRFNSICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRUNPTCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNhbiIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogRENEICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY2FuIiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSSU5HICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNDSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNEQSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAicHdtIikpLAkJLyogUFdNMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaXIwIikpLAkJLyogVFggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpKSwJCS8qIFJYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIE1DTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogTUNMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBCQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpKSwJCS8qIEJDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkycyIpLAkJLyogTFJDSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImFjOTciKSksCQkvKiBTWU5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIERPMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImFjOTciKSksCQkvKiBETyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIikpLAkJLyogRE8xICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIikpLAkJLyogRE8yICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIikpLAkJLyogRE8zICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBESSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImFjOTciKSksCQkvKiBESSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSksCQkvKiBDUzEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogTVMwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpKSwJCS8qIENLMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogRE8wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTUlTTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSksCQkvKiBESTAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMSIpKSwJCS8qIFNEQSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjIwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIyMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaXIxIikpLAkJLyogVFggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIyMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpcjEiKSksCQkvKiBSWCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOV0UgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5BTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkNFMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOUkUjICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTUQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOUkIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5EUTUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRNiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5XUCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOQ0UyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSksCQkvKiBDUzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSksCQkvKiBNT1NJICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkyIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzIzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRUyAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BENSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZNMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUEMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE4ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIikpLAkJLyogTUNMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDIxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFZQUEVOICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogVlBQUFAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBERVQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBWQ0NFTiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIERFICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogUlNUICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogSFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBWU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFNEQSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIFBDSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBFUlIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBIU1lOQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEVkxEICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIFZTWU5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzaW0iKSksCQkvKiBWUFBFTiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQ3ICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVNJICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBESTEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEYyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogUlggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEY1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIENLMSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogUENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpKSwJCS8qIENNRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBFUlIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBDSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEhTWU5DICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIERWTEQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBWU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBEMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQ5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDEwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDExICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQ0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlRTICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQxMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQ1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBENyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDQiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQxNSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAwKSwJCS8qIEVJTlQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMSksCQkvKiBFSU5UMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFBMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyKSwJCS8qIEVJTlQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUlSUSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBDVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAzKSwJCS8qIEVJTlQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BINCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDQiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNCksCQkvKiBFSU5UNCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBENCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ0IiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDUpLAkJLyogRUlOVDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEg2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NSIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogQlMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA2KSwJCS8qIEVJTlQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BINywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBENyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDUiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibXMiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDcpLAkJLyogRUlOVDcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEg4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ4ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU4wICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibXMiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgOCksCQkvKiBFSU5UOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDkgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA5KSwJCS8qIEVJTlQ5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDEwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU4yICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibXMiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTApLAkJLyogRUlOVDEwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDExKSwJCS8qIEVJTlQxMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInBzMiIpLAkJLyogU0NLMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEyKSwJCS8qIEVJTlQxMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInBzMiIpLAkJLyogU0RBMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogUlNUICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTMpLAkJLyogRUlOVDEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFZQUEVOICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTQpLAkJLyogRUlOVDE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQxMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFZQUFBQICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTUpLAkJLyogRUlOVDE1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxNSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQxMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjYgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNiksCQkvKiBFSU5UMTYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElONyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogVkNDRU4gKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNyksCQkvKiBFSU5UMTcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE4ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFNDSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE4KSwJCS8qIEVJTlQxOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTkgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEMTUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogU0RBICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTkpLAkJLyogRUlOVDE5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxOSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDIwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQU9FICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiY2FuIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIwKSwJCS8qIEVJTlQyMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMjEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEUkVRICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiY2FuIiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIxKSwJCS8qIEVJTlQyMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMjIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEQUNLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBDTUQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDIzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQ1MwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQ1MxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBQQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogREUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFJT1JEWSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRklFTEQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBIU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUlPUiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogSFNZTkMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBWU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUlPVyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogVlNZTkMgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSksCQkvKiBQV00xICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogQ01EICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEk3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzMiKSksCQkvKiBEMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMyIpKSwJCS8qIEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkwIiksCQkvKiBDUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMikpLAkJLyogRUlOVDIyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjMpKSwJCS8qIEVJTlQyMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NiIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyNCkpLAkJLyogRUlOVDI0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogTUlTTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI1KSksCQkvKiBFSU5UMjUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkwIiksCQkvKiBDUzEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwczIiKSwJCS8qIFNDSzEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ0aW1lcjQiKSwJLyogVENMS0lOMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI2KSksCQkvKiBFSU5UMjYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBDUzEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJwczIiKSwJCS8qIFNEQTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ0aW1lcjUiKSwJLyogVENMS0lOMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI3KSksCQkvKiBFSU5UMjcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBDUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpLAkJLyogUlRTICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjgpKSwJCS8qIEVJTlQyOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBDVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyOSkpLAkJLyogRUlOVDI5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogTU9TSSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDMwKSksCQkvKiBFSU5UMzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNSVNPICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMzEpKSwJCS8qIEVJTlQzMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTIwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInBzMiIpLAkJLyogU0NLMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ3IiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImhkbWkiKSksCQkvKiBIU0NMICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAicHMyIiksCQkvKiBTREEwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDciKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiaGRtaSIpKSwJCS8qIEhTREEgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNWlfYTEwc19waW5zW10gPSB7Ci0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBJTjAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMwIiksCQkvKiBFUlIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElOMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElOMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIERMVkQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElOMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBJTjQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMwIiksCQkvKiBEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImtleXBhZCIpKSwJLyogSU41ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElONiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBJTjcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMwIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBEVFIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIE9VVDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEVSUiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRFNSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRFYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIERDRCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImtleXBhZCIpKSwJLyogT1VUMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVNREMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIFJJTkcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIE9VVDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFTURJTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQxIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImtleXBhZCIpKSwJLyogT1VUNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEVOICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDEiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQ1ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYQ0sgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MSIpLAkJLyogQ1RTICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQ2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRUNSUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQxIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIE9VVDcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFQ09MICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSksCS8qIFRYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMzEpKSwJCS8qIEVJTlQzMSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTREEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInB3bSIpLAkJLyogUFdNMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE2KSksCQkvKiBFSU5UMTYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNykpLAkJLyogRUlOVDE3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpcjAiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTgpKSwJCS8qIEVJTlQxOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBNQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTkpKSwJCS8qIEVJTlQxOSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBCQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjApKSwJCS8qIEVJTlQyMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBMUkNLICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjEpKSwJCS8qIEVJTlQyMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBETyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIyKSksCQkvKiBFSU5UMjIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkycyIpLAkJLyogREkgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMykpLAkJLyogRUlOVDIzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ1MxICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjQpKSwJCS8qIEVJTlQyNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSwJCS8qIE1TMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI1KSksCQkvKiBFSU5UMjUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBDSzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyNikpLAkJLyogRUlOVDI2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTU9TSSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSwJCS8qIERPMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI3KSksCQkvKiBFSU5UMjcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBNSVNPICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogREkwICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjgpKSwJCS8qIEVJTlQyOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMiIpKSwJCS8qIFNDSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjE4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTREEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyOSkpLAkJLyogRUlOVDI5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMzApKSwJCS8qIEVJTlQzMCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOV0UgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5BTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOQ0UwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTlJFICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTUQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOUkIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRNiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBENiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5XUCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0UyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSksCS8qIFJYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpKSwJLyogQ1RTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpKSwJLyogUlRTICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSksCS8qIFRYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIikpLAkvKiBSWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpKSwJLyogQ1RTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BENSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIikpLAkvKiBSVFMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVDUlMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVDT0wgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQ5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWENLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEVSUiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDE3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE4ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWERWICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEVOICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWENLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogREUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRVRYRVJSICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogSFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRU1EQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIFZTWU5DICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVNRElPICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogUENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMiIpLAkJLyogQ1MwICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTQpKSwJCS8qIEVJTlQxNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogQ0sgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNSkpLAkJLyogRUlOVDE1ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBTWU5DICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogSFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIikpLAkJLyogTU9TSSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEVkxEICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogVlNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzIiKSksCQkvKiBEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogQ01EICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFRYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFJYICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVMxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBESTEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEYyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogUlggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEY1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIENLMSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJncHMiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDApKSwJCS8qIEVJTlQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ3BzIiksCQkvKiBTSUdOICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMSkpLAkJLyogRUlOVDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJncHMiKSwJCS8qIE1BRyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIpKSwJCS8qIEVJTlQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTUQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAzKSksCQkvKiBFSU5UMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNCkpLAkJLyogRUlOVDQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSwJCS8qIERPICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDUpKSwJCS8qIEVJTlQ1ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJ1YXJ0MiIpLAkJLyogUlRTICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNikpLAkJLyogRUlOVDYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAidWFydDIiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNykpLAkJLyogRUlOVDcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAidWFydDIiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgOCkpLAkJLyogRUlOVDggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDkpKSwJCS8qIEVJTlQ5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTApKSwJCS8qIEVJTlQxMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogQ1RTICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTEpKSwJCS8qIEVJTlQxMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1JU08gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogUlRTICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTIpKSwJCS8qIEVJTlQxMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBQV00xICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAidWFydDIiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEzKSksCQkvKiBFSU5UMTMgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNWlfYTEzX3BpbnNbXSA9IHsKLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSwKLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNikpLAkJLyogRUlOVDE2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpcjAiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTcpKSwJCS8qIEVJTlQxNyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaXIwIiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE4KSksCQkvKiBFSU5UMTggKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ1MxICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjQpKSwJCS8qIEVJTlQyNCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMSIpKSwJCS8qIFNEQSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0RBICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5XRSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNT1NJICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkFMRSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNSVNPICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNMRSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0UxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIENTMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOUkUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOUkIwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIENNRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5SQjEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBENSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDcgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUVMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpKSwJLyogUlRTICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBENCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQ1ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BENiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBENyAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDEwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQxMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDEzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQxNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTUgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQxOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTkgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDIyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMjIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBERSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBIU1lOQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBWU1lOQyAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBQQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMiIpLAkJLyogQ1MwICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTQpKSwJCS8qIEVJTlQxNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIE1DTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNSkpLAkJLyogRUlOVDE1ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogSFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIikpLAkJLyogTU9TSSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogVlNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzIiKSksCQkvKiBEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQ0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIENNRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogVFggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBENyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSWCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEYwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSksCQkvKiBEMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIikpLAkJLyogQ01EICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEY1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSksCQkvKiBEMiAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDApKSwJCS8qIEVJTlQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxKSksCQkvKiBFSU5UMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMikpLAkJLyogRUlOVDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEczLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSwJCS8qIENNRCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDMpKSwJCS8qIEVJTlQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA0KSksCQkvKiBFSU5UNCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDkpKSwJCS8qIEVJTlQ5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTApKSwJCS8qIEVJTlQxMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogQ1RTICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTEpKSwJCS8qIEVJTlQxMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1JU08gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogUlRTICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTIpKSwJCS8qIEVJTlQxMiAqLwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9kZXNjX3BpbiBzdW42aV9hMzFfcGluc1tdID0gewotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERUUiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERTUiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERDRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFJJTkcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQ1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFJYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBUWEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogUlRTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBUWEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogQ1RTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBUWENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSksCQkvKiBEOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhFTiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQ5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogQ01EICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMiIpKSwJCS8qIENNRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIEdUWENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogRDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMyIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMyIikpLAkJLyogRDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMyIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMyIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQ0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpKSwJCS8qIEQxNSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIikpLAkJLyogRDE2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhENiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSksCQkvKiBEMTcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpKSwJCS8qIEQxOCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTE5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRFYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMTkgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20zIikpLAkJLyogUG9zaXRpdmUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEEyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQyMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInB3bTMiKSksCQkvKiBOZWdhdGl2ZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTIxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpKSwJCS8qIENTMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTIyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDIyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTIzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIENPTCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQyMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInNwaTMiKSksCQkvKiBNT1NJICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogQ1JTICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpKSwJCS8qIE1JU08gKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEEyNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBDTEtJTiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIERFICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpKSwJCS8qIENTMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTI2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIE1EQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSksCQkvKiBIU1lOQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTI3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIE1ESU8gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIikpLAkJLyogVlNZTkMgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBNQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNzaSIpKSwJCS8qIE1DTEsxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIikpLAkJLyogQkNMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpKSwJCS8qIExSQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSksCQkvKiBETzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIERPMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIikpLAkvKiBSVFMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIERPMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImkyYzMiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIERPMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImkyYzMiKSksCQkvKiBTREEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyczAiKSksCQkvKiBESSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBXRSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNT1NJICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogQUxFICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIE1JU08gKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBDTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogUkUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBSQjAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBDTUQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogQ01EICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogUkIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE4ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibmFuZDEiKSksCS8qIERRMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTkgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFExICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFEyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFEzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFE1ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFE2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFE3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIFJTVCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBSU1QgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIENFMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzI3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4yICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BENiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUEMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4xICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlBDICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTkgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4zICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDIxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMjEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogREUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogSFNZTkMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogVlNZTkMgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIFBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBNQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBFUlIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogSFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIFNZTkMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogVlNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIERWTEQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpKSwJLyogVFggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpKSwJLyogUlggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpKSwJLyogUlRTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSksCS8qIENUUyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEU5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBENiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIEQ0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQxMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSksCQkvKiBNSVBJIENTSSBNQ0xLICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVMxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBESTEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEYyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogUlggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEY1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIENLMSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSksCQkvKiBDTUQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSksCQkvKiBEMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDIiKSksCS8qIFRYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MiIpKSwJLyogUlggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQyIikpLAkvKiBSVFMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQyIikpLAkvKiBDVFMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMzIiksCQkvKiBTQ0sgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1c2IiKSksCQkvKiBEUDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMzIiksCQkvKiBTREEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1c2IiKSksCQkvKiBETTMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBDUzEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMnMxIikpLAkJLyogTUNMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyczEiKSksCQkvKiBCQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJzMSIpKSwJCS8qIExSQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNT1NJICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJzMSIpKSwJCS8qIERJTiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1JU08gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMnMxIikpLAkJLyogRE9VVCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQ0IikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzE4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQ0IikpLAkvKiBSWCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQxIikpLAkvKiBXRSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIEFMRSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIENMRSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIENFMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIENFMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIFJFICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BINiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogUkIwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BINywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogUkIxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogRFFTICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBNUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20xIikpLAkJLyogUG9zaXRpdmUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBDSzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20xIikpLAkJLyogTmVnYXRpdmUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBNT1NJICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogRE8wICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHdtMiIpKSwJCS8qIFBvc2l0aXZlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTUlTTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSwJCS8qIERJMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInB3bTIiKSksCQkvKiBOZWdhdGl2ZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInB3bTAiKSksCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNDSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTREEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMSIpKSwJCS8qIFNEQSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDE4LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSksCS8qIFRYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSksCS8qIFJYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDIzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDI2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDI5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQxIikpLAkvKiBDRTIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgzMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogQ0UzICovCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN1bnhpX2Rlc2NfcGluIHN1bjdpX2EyMF9waW5zW10gPSB7Ci0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTEiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQyIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1JYRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDIiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHUlhEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIiksCQkvKiBNT1NJICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDIiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpKSwJCS8qIEdSWEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTEiKSwJCS8qIE1JU08gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1JYRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpLAkJLyogQ1MxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpKSwJCS8qIEdUWEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTMiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHVFhEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1RYRDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMyIpLAkJLyogTU9TSSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHVFhEMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYQ0sgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBNSVNPICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpKSwJCS8qIEdSWENLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhFUlIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBDUzEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIiksCQkvKiBHTlVMTCAvIEVSWEVSUiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBNQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRFYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1JYQ1RMIC8gRVJYRFYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFTURDICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpKSwJCS8qIEVNREMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFTURJTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogRU1ESU8gKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhFTiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBDVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1RYQ1RMIC8gRVRYRU4gKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhDSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ3IiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBEVFIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIiksCQkvKiBHTlVMTCAvIEVUWENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg2LCAiaTJzMSIpKSwJCS8qIEJDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEExNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFQ1JTICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDciKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIERTUiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSwJCS8qIEdUWENLIC8gRUNSUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBMUkNLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BBMTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRUNPTCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNhbiIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRENEICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpLAkJLyogR0NMS0lOIC8gRUNPTCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBETyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQTE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEVSUiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNhbiIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogUklORyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSwJCS8qIEdOVUxMIC8gRVRYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg2LCAiaTJzMSIpKSwJCS8qIExSQ0sgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSksCQkvKiBQV00wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpcjAiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BkaWYiKSksCS8qIE1DTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpKSwJCS8qIFJYICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBNQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpKSwJCS8qIE1DTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIEJDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogQkNMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogTFJDSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImFjOTciKSksCQkvKiBTWU5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBETzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogRE8gKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEI5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSksCQkvKiBETzEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIikpLAkJLyogRE8yICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpKSwJCS8qIERPMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIERJICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpLAkJLyogREkgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGRpZiIpKSwJLyogREkgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGRpZiIpKSwJLyogRE8gKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogTVMwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpKSwJCS8qIENLMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogRE8wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTUlTTyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSksCQkvKiBESTAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIxOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMSIpKSwJCS8qIFNEQSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQjIwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIyMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BCMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaXIxIikpLAkJLyogVFggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEIyMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpcjEiKSksCQkvKiBSWCAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOV0UgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5BTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTUlTTyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DTEUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkNFMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOUkUjICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTUQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOUkIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIENMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEM5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFExICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5EUTUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRNiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5XUCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzE3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOQ0UyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMxOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEyKSksCQkvKiBFSU5UMTIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEzKSksCQkvKiBFSU5UMTMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNCkpLAkJLyogRUlOVDE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BDMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkyIiksCQkvKiBNSVNPICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTUpKSwJCS8qIEVJTlQxNSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QQzIzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEMyNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRUyAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BENSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQ5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZNMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4wICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUEMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQxNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTcgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE4ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDE5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIikpLAkJLyogTUNMSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDIxLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFZQUEVOICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogVlBQUFAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBERVQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBWQ0NFTiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRDI1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIERFICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogUlNUICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BEMjYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogSFNZTkMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBTQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEQyNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBWU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFNEQSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIFBDSyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBFUlIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogQ0sgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBIU1lOQyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEVkxEICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIFZTWU5DICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BFNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJzaW0iKSksCQkvKiBWUFBFTiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBEMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBEMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRTEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDYgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEUxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQ3ICovCi0JLyogSG9sZSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVNJICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BGMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBESTEgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEYyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBUWCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjMsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRjQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogUlggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEY1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIENLMSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogUENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpKSwJCS8qIENNRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBFUlIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBDSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBDTEsgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEhTWU5DICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpKSwJCS8qIEQwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIERWTEQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBWU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBEMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzQsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEc1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQ5ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDEwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDExICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQ0ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlRTICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQxMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QRzksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBENSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQ1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEcxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BHMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBENyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDQiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQxNSAqLwotCS8qIEhvbGUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMCksCQkvKiBFSU5UMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxKSwJCS8qIEVJTlQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyKSwJCS8qIEVJTlQyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBDVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAzKSwJCS8qIEVJTlQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQzICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BINCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBENCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ0IiksCQkvKiBUWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDQpLAkJLyogRUlOVDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDQgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEg1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDQiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNSksCQkvKiBFSU5UNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBENSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDYsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NSIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogQlMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA2KSwJCS8qIEVJTlQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BINywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBENyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ1IiksCQkvKiBSWCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBDTEsgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA3KSwJCS8qIEVJTlQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ3ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEOCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVSWEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDgpLAkJLyogRUlOVDggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDggKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEg5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVJYRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU4xICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibXMiKSwJCS8qIEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgOSksCQkvKiBFSU5UOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEOSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDEwLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVSWEQxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEwKSwJCS8qIEVJTlQxMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFUlhEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMSksCQkvKiBFSU5UMTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDExICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHMyIiksCQkvKiBTQ0sxICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTIpLAkJLyogRUlOVDEyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxMiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInBzMiIpLAkJLyogU0RBMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogUlNUICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTMpLAkJLyogRUlOVDEzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVUWEQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElONCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogVlBQRU4gKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNCksCQkvKiBFSU5UMTQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE0ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE1ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVRYRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU41ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBWUFBQUCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE1KSwJCS8qIEVJTlQxNSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTUgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhEMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjYgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNiksCQkvKiBFSU5UMTYgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE2ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVRYRDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU43ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBWQ0NFTiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE3KSwJCS8qIEVJTlQxNyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTcgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgxOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQwICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBTQ0sgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxOCksCQkvKiBFSU5UMTggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE4ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMTksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE5ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVJYRVJSICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFNEQSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE5KSwJCS8qIEVJTlQxOSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTkgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMjAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFUlhEViAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNhbiIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMCksCQkvKiBFSU5UMjAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIwICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDIxICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRU1EQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNhbiIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMSksCQkvKiBFSU5UMjEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjIsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDIyICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRU1ESU8gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUMiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzEiKSwJCS8qIENNRCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjIgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMjMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhFTiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQzICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQyMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDI0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIENMSyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVUWENLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDQgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBQQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BIMjUsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogREUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFQ1JTICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDUgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBGSUVMRCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSDI2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEhTWU5DICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRUNPTCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ2ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDIgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogSFNZTkMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEgyNywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBWU1lOQyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVUWEVSUiAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ3ICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDMgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogVlNZTkMgKi8KLQkvKiBIb2xlICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMmMzIikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMmMzIikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMmM0IikpLAkJLyogU0NLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMywKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSwJCS8qIFBXTTEgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMmM0IikpLAkJLyogU0RBICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJNCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogQ01EICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJNSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogQ0xLICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJNiwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDAgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEk3LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzMiKSksCQkvKiBEMSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTgsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMyIpKSwJCS8qIEQyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJOSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDMgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxMCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkwIiksCQkvKiBDUzAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg1LCAyMikpLAkJLyogRUlOVDIyICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMTEsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSwJCS8qIFJYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjMpKSwJCS8qIEVJTlQyMyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTEyLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIE1PU0kgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NiIpLAkJLyogVFggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2EiKSwJLyogQ0xLX09VVF9BICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjQpKSwJCS8qIEVJTlQyNCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTEzLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIE1JU08gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NiIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2IiKSwJLyogQ0xLX09VVF9CICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjUpKSwJCS8qIEVJTlQyNSAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTE0LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIENTMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBzMiIpLAkJLyogU0NLMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInRpbWVyNCIpLAkvKiBUQ0xLSU4wICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjYpKSwJCS8qIEVJTlQyNiAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTE1LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBzMiIpLAkJLyogU0RBMSAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInRpbWVyNSIpLAkvKiBUQ0xLSU4xICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjcpKSwJCS8qIEVJTlQyNyAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTE2LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMCAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBSVFMgKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg1LCAyOCkpLAkJLyogRUlOVDI4ICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMTcsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ0xLICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIENUUyAqLwotCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDUsIDI5KSksCQkvKiBFSU5UMjkgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkxOCwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNT1NJICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMzApKSwJCS8qIEVJTlQzMCAqLwotCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTl9QSTE5LAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1JU08gKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg1LCAzMSkpLAkJLyogRUlOVDMxICovCi0JU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOX1BJMjAsCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAotCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAicHMyIiksCQkvKiBTQ0swICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDciKSwJCS8qIFRYICovCi0JCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiaGRtaSIpKSwJCS8qIEhTQ0wgKi8KLQlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU5fUEkyMSwKLQkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCi0JCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKLQkJICBTVU5YSV9GVU5DVElPTigweDIsICJwczIiKSwJCS8qIFNEQTAgKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NyIpLAkJLyogUlggKi8KLQkJICBTVU5YSV9GVU5DVElPTigweDQsICJoZG1pIikpLAkJLyogSFNEQSAqLwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNGlfYTEwX3BpbmN0cmxfZGF0YSA9IHsKLQkucGlucyA9IHN1bjRpX2ExMF9waW5zLAotCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuNGlfYTEwX3BpbnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNWlfYTEwc19waW5jdHJsX2RhdGEgPSB7Ci0JLnBpbnMgPSBzdW41aV9hMTBzX3BpbnMsCi0JLm5waW5zID0gQVJSQVlfU0laRShzdW41aV9hMTBzX3BpbnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNWlfYTEzX3BpbmN0cmxfZGF0YSA9IHsKLQkucGlucyA9IHN1bjVpX2ExM19waW5zLAotCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuNWlfYTEzX3BpbnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNmlfYTMxX3BpbmN0cmxfZGF0YSA9IHsKLQkucGlucyA9IHN1bjZpX2EzMV9waW5zLAotCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuNmlfYTMxX3BpbnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuN2lfYTIwX3BpbmN0cmxfZGF0YSA9IHsKLQkucGlucyA9IHN1bjdpX2EyMF9waW5zLAotCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuN2lfYTIwX3BpbnMpLAotfTsKLQotI2VuZGlmIC8qIF9fUElOQ1RSTF9TVU5YSV9QSU5TX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN1bnhpLmggYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zdW54aS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTJiMGU5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN1bnhpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NDggKzAsMCBAQAotLyoKLSAqIEFsbHdpbm5lciBBMVggU29DcyBwaW5jdHJsIGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWF4aW1lIFJpcGFyZAotICoKLSAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpZm5kZWYgX19QSU5DVFJMX1NVTlhJX0gKLSNkZWZpbmUgX19QSU5DVFJMX1NVTlhJX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLSNkZWZpbmUgUEFfQkFTRQkwCi0jZGVmaW5lIFBCX0JBU0UJMzIKLSNkZWZpbmUgUENfQkFTRQk2NAotI2RlZmluZSBQRF9CQVNFCTk2Ci0jZGVmaW5lIFBFX0JBU0UJMTI4Ci0jZGVmaW5lIFBGX0JBU0UJMTYwCi0jZGVmaW5lIFBHX0JBU0UJMTkyCi0jZGVmaW5lIFBIX0JBU0UJMjI0Ci0jZGVmaW5lIFBJX0JBU0UJMjU2Ci0KLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEwCVBJTkNUUkxfUElOKFBBX0JBU0UgKyAwLCAiUEEwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExCVBJTkNUUkxfUElOKFBBX0JBU0UgKyAxLCAiUEExIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyCVBJTkNUUkxfUElOKFBBX0JBU0UgKyAyLCAiUEEyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEzCVBJTkNUUkxfUElOKFBBX0JBU0UgKyAzLCAiUEEzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEE0CVBJTkNUUkxfUElOKFBBX0JBU0UgKyA0LCAiUEE0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEE1CVBJTkNUUkxfUElOKFBBX0JBU0UgKyA1LCAiUEE1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEE2CVBJTkNUUkxfUElOKFBBX0JBU0UgKyA2LCAiUEE2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEE3CVBJTkNUUkxfUElOKFBBX0JBU0UgKyA3LCAiUEE3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEE4CVBJTkNUUkxfUElOKFBBX0JBU0UgKyA4LCAiUEE4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEE5CVBJTkNUUkxfUElOKFBBX0JBU0UgKyA5LCAiUEE5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExMAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTAsICJQQTEwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExMQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTEsICJQQTExIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExMglQSU5DVFJMX1BJTihQQV9CQVNFICsgMTIsICJQQTEyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExMwlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTMsICJQQTEzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExNAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTQsICJQQTE0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExNQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTUsICJQQTE1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExNglQSU5DVFJMX1BJTihQQV9CQVNFICsgMTYsICJQQTE2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExNwlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTcsICJQQTE3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExOAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTgsICJQQTE4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEExOQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMTksICJQQTE5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyMAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjAsICJQQTIwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyMQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjEsICJQQTIxIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyMglQSU5DVFJMX1BJTihQQV9CQVNFICsgMjIsICJQQTIyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyMwlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjMsICJQQTIzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyNAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjQsICJQQTI0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyNQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjUsICJQQTI1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyNglQSU5DVFJMX1BJTihQQV9CQVNFICsgMjYsICJQQTI2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyNwlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjcsICJQQTI3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyOAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjgsICJQQTI4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEyOQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMjksICJQQTI5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEzMAlQSU5DVFJMX1BJTihQQV9CQVNFICsgMzAsICJQQTMwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEEzMQlQSU5DVFJMX1BJTihQQV9CQVNFICsgMzEsICJQQTMxIikKLQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjAJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDAsICJQQjAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjEJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDEsICJQQjEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjIJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDIsICJQQjIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjMJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDMsICJQQjMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjQJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDQsICJQQjQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjUJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDUsICJQQjUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjYJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDYsICJQQjYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjcJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDcsICJQQjciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjgJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDgsICJQQjgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjkJUElOQ1RSTF9QSU4oUEJfQkFTRSArIDksICJQQjkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjEwCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxMCwgIlBCMTAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjExCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxMSwgIlBCMTEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjEyCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxMiwgIlBCMTIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjEzCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxMywgIlBCMTMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjE0CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxNCwgIlBCMTQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjE1CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxNSwgIlBCMTUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjE2CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxNiwgIlBCMTYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjE3CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxNywgIlBCMTciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjE4CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxOCwgIlBCMTgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjE5CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAxOSwgIlBCMTkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjIwCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyMCwgIlBCMjAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjIxCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyMSwgIlBCMjEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjIyCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyMiwgIlBCMjIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjIzCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyMywgIlBCMjMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjI0CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyNCwgIlBCMjQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjI1CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyNSwgIlBCMjUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjI2CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyNiwgIlBCMjYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjI3CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyNywgIlBCMjciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjI4CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyOCwgIlBCMjgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjI5CVBJTkNUUkxfUElOKFBCX0JBU0UgKyAyOSwgIlBCMjkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjMwCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAzMCwgIlBCMzAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QQjMxCVBJTkNUUkxfUElOKFBCX0JBU0UgKyAzMSwgIlBCMzEiKQotCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMAlQSU5DVFJMX1BJTihQQ19CQVNFICsgMCwgIlBDMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMQlQSU5DVFJMX1BJTihQQ19CQVNFICsgMSwgIlBDMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMglQSU5DVFJMX1BJTihQQ19CQVNFICsgMiwgIlBDMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMwlQSU5DVFJMX1BJTihQQ19CQVNFICsgMywgIlBDMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDNAlQSU5DVFJMX1BJTihQQ19CQVNFICsgNCwgIlBDNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDNQlQSU5DVFJMX1BJTihQQ19CQVNFICsgNSwgIlBDNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDNglQSU5DVFJMX1BJTihQQ19CQVNFICsgNiwgIlBDNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDNwlQSU5DVFJMX1BJTihQQ19CQVNFICsgNywgIlBDNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDOAlQSU5DVFJMX1BJTihQQ19CQVNFICsgOCwgIlBDOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDOQlQSU5DVFJMX1BJTihQQ19CQVNFICsgOSwgIlBDOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTAJUElOQ1RSTF9QSU4oUENfQkFTRSArIDEwLCAiUEMxMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTEJUElOQ1RSTF9QSU4oUENfQkFTRSArIDExLCAiUEMxMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTIJUElOQ1RSTF9QSU4oUENfQkFTRSArIDEyLCAiUEMxMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTMJUElOQ1RSTF9QSU4oUENfQkFTRSArIDEzLCAiUEMxMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTQJUElOQ1RSTF9QSU4oUENfQkFTRSArIDE0LCAiUEMxNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTUJUElOQ1RSTF9QSU4oUENfQkFTRSArIDE1LCAiUEMxNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTYJUElOQ1RSTF9QSU4oUENfQkFTRSArIDE2LCAiUEMxNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTcJUElOQ1RSTF9QSU4oUENfQkFTRSArIDE3LCAiUEMxNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTgJUElOQ1RSTF9QSU4oUENfQkFTRSArIDE4LCAiUEMxOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMTkJUElOQ1RSTF9QSU4oUENfQkFTRSArIDE5LCAiUEMxOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjAJUElOQ1RSTF9QSU4oUENfQkFTRSArIDIwLCAiUEMyMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjEJUElOQ1RSTF9QSU4oUENfQkFTRSArIDIxLCAiUEMyMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjIJUElOQ1RSTF9QSU4oUENfQkFTRSArIDIyLCAiUEMyMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjMJUElOQ1RSTF9QSU4oUENfQkFTRSArIDIzLCAiUEMyMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjQJUElOQ1RSTF9QSU4oUENfQkFTRSArIDI0LCAiUEMyNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjUJUElOQ1RSTF9QSU4oUENfQkFTRSArIDI1LCAiUEMyNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjYJUElOQ1RSTF9QSU4oUENfQkFTRSArIDI2LCAiUEMyNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjcJUElOQ1RSTF9QSU4oUENfQkFTRSArIDI3LCAiUEMyNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjgJUElOQ1RSTF9QSU4oUENfQkFTRSArIDI4LCAiUEMyOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMjkJUElOQ1RSTF9QSU4oUENfQkFTRSArIDI5LCAiUEMyOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMzAJUElOQ1RSTF9QSU4oUENfQkFTRSArIDMwLCAiUEMzMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BDMzEJUElOQ1RSTF9QSU4oUENfQkFTRSArIDMxLCAiUEMzMSIpCi0KLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQwCVBJTkNUUkxfUElOKFBEX0JBU0UgKyAwLCAiUEQwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxCVBJTkNUUkxfUElOKFBEX0JBU0UgKyAxLCAiUEQxIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyCVBJTkNUUkxfUElOKFBEX0JBU0UgKyAyLCAiUEQyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQzCVBJTkNUUkxfUElOKFBEX0JBU0UgKyAzLCAiUEQzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQ0CVBJTkNUUkxfUElOKFBEX0JBU0UgKyA0LCAiUEQ0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQ1CVBJTkNUUkxfUElOKFBEX0JBU0UgKyA1LCAiUEQ1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQ2CVBJTkNUUkxfUElOKFBEX0JBU0UgKyA2LCAiUEQ2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQ3CVBJTkNUUkxfUElOKFBEX0JBU0UgKyA3LCAiUEQ3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQ4CVBJTkNUUkxfUElOKFBEX0JBU0UgKyA4LCAiUEQ4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQ5CVBJTkNUUkxfUElOKFBEX0JBU0UgKyA5LCAiUEQ5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxMAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTAsICJQRDEwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxMQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTEsICJQRDExIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxMglQSU5DVFJMX1BJTihQRF9CQVNFICsgMTIsICJQRDEyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxMwlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTMsICJQRDEzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxNAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTQsICJQRDE0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxNQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTUsICJQRDE1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxNglQSU5DVFJMX1BJTihQRF9CQVNFICsgMTYsICJQRDE2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxNwlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTcsICJQRDE3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxOAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTgsICJQRDE4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQxOQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMTksICJQRDE5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyMAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjAsICJQRDIwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyMQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjEsICJQRDIxIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyMglQSU5DVFJMX1BJTihQRF9CQVNFICsgMjIsICJQRDIyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyMwlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjMsICJQRDIzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyNAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjQsICJQRDI0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyNQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjUsICJQRDI1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyNglQSU5DVFJMX1BJTihQRF9CQVNFICsgMjYsICJQRDI2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyNwlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjcsICJQRDI3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyOAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjgsICJQRDI4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQyOQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMjksICJQRDI5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQzMAlQSU5DVFJMX1BJTihQRF9CQVNFICsgMzAsICJQRDMwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEQzMQlQSU5DVFJMX1BJTihQRF9CQVNFICsgMzEsICJQRDMxIikKLQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTAJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDAsICJQRTAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTEJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDEsICJQRTEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTIJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDIsICJQRTIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTMJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDMsICJQRTMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTQJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDQsICJQRTQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTUJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDUsICJQRTUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTYJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDYsICJQRTYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTcJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDcsICJQRTciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTgJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDgsICJQRTgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTkJUElOQ1RSTF9QSU4oUEVfQkFTRSArIDksICJQRTkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTEwCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxMCwgIlBFMTAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTExCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxMSwgIlBFMTEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTEyCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxMiwgIlBFMTIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTEzCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxMywgIlBFMTMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTE0CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxNCwgIlBFMTQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTE1CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxNSwgIlBFMTUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTE2CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxNiwgIlBFMTYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTE3CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxNywgIlBFMTciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTE4CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxOCwgIlBFMTgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTE5CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAxOSwgIlBFMTkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTIwCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyMCwgIlBFMjAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTIxCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyMSwgIlBFMjEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTIyCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyMiwgIlBFMjIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTIzCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyMywgIlBFMjMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTI0CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyNCwgIlBFMjQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTI1CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyNSwgIlBFMjUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTI2CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyNiwgIlBFMjYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTI3CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyNywgIlBFMjciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTI4CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyOCwgIlBFMjgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTI5CVBJTkNUUkxfUElOKFBFX0JBU0UgKyAyOSwgIlBFMjkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTMwCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAzMCwgIlBFMzAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QRTMxCVBJTkNUUkxfUElOKFBFX0JBU0UgKyAzMSwgIlBFMzEiKQotCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMAlQSU5DVFJMX1BJTihQRl9CQVNFICsgMCwgIlBGMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMQlQSU5DVFJMX1BJTihQRl9CQVNFICsgMSwgIlBGMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMglQSU5DVFJMX1BJTihQRl9CQVNFICsgMiwgIlBGMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMwlQSU5DVFJMX1BJTihQRl9CQVNFICsgMywgIlBGMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGNAlQSU5DVFJMX1BJTihQRl9CQVNFICsgNCwgIlBGNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGNQlQSU5DVFJMX1BJTihQRl9CQVNFICsgNSwgIlBGNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGNglQSU5DVFJMX1BJTihQRl9CQVNFICsgNiwgIlBGNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGNwlQSU5DVFJMX1BJTihQRl9CQVNFICsgNywgIlBGNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGOAlQSU5DVFJMX1BJTihQRl9CQVNFICsgOCwgIlBGOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGOQlQSU5DVFJMX1BJTihQRl9CQVNFICsgOSwgIlBGOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTAJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDEwLCAiUEYxMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTEJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDExLCAiUEYxMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTIJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDEyLCAiUEYxMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTMJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDEzLCAiUEYxMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTQJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDE0LCAiUEYxNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTUJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDE1LCAiUEYxNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTYJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDE2LCAiUEYxNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTcJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDE3LCAiUEYxNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTgJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDE4LCAiUEYxOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMTkJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDE5LCAiUEYxOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjAJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDIwLCAiUEYyMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjEJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDIxLCAiUEYyMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjIJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDIyLCAiUEYyMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjMJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDIzLCAiUEYyMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjQJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDI0LCAiUEYyNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjUJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDI1LCAiUEYyNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjYJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDI2LCAiUEYyNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjcJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDI3LCAiUEYyNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjgJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDI4LCAiUEYyOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMjkJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDI5LCAiUEYyOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMzAJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDMwLCAiUEYzMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BGMzEJUElOQ1RSTF9QSU4oUEZfQkFTRSArIDMxLCAiUEYzMSIpCi0KLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcwCVBJTkNUUkxfUElOKFBHX0JBU0UgKyAwLCAiUEcwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxCVBJTkNUUkxfUElOKFBHX0JBU0UgKyAxLCAiUEcxIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyCVBJTkNUUkxfUElOKFBHX0JBU0UgKyAyLCAiUEcyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEczCVBJTkNUUkxfUElOKFBHX0JBU0UgKyAzLCAiUEczIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEc0CVBJTkNUUkxfUElOKFBHX0JBU0UgKyA0LCAiUEc0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEc1CVBJTkNUUkxfUElOKFBHX0JBU0UgKyA1LCAiUEc1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEc2CVBJTkNUUkxfUElOKFBHX0JBU0UgKyA2LCAiUEc2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEc3CVBJTkNUUkxfUElOKFBHX0JBU0UgKyA3LCAiUEc3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEc4CVBJTkNUUkxfUElOKFBHX0JBU0UgKyA4LCAiUEc4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEc5CVBJTkNUUkxfUElOKFBHX0JBU0UgKyA5LCAiUEc5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxMAlQSU5DVFJMX1BJTihQR19CQVNFICsgMTAsICJQRzEwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxMQlQSU5DVFJMX1BJTihQR19CQVNFICsgMTEsICJQRzExIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxMglQSU5DVFJMX1BJTihQR19CQVNFICsgMTIsICJQRzEyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxMwlQSU5DVFJMX1BJTihQR19CQVNFICsgMTMsICJQRzEzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxNAlQSU5DVFJMX1BJTihQR19CQVNFICsgMTQsICJQRzE0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxNQlQSU5DVFJMX1BJTihQR19CQVNFICsgMTUsICJQRzE1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxNglQSU5DVFJMX1BJTihQR19CQVNFICsgMTYsICJQRzE2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxNwlQSU5DVFJMX1BJTihQR19CQVNFICsgMTcsICJQRzE3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxOAlQSU5DVFJMX1BJTihQR19CQVNFICsgMTgsICJQRzE4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcxOQlQSU5DVFJMX1BJTihQR19CQVNFICsgMTksICJQRzE5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyMAlQSU5DVFJMX1BJTihQR19CQVNFICsgMjAsICJQRzIwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyMQlQSU5DVFJMX1BJTihQR19CQVNFICsgMjEsICJQRzIxIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyMglQSU5DVFJMX1BJTihQR19CQVNFICsgMjIsICJQRzIyIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyMwlQSU5DVFJMX1BJTihQR19CQVNFICsgMjMsICJQRzIzIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyNAlQSU5DVFJMX1BJTihQR19CQVNFICsgMjQsICJQRzI0IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyNQlQSU5DVFJMX1BJTihQR19CQVNFICsgMjUsICJQRzI1IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyNglQSU5DVFJMX1BJTihQR19CQVNFICsgMjYsICJQRzI2IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyNwlQSU5DVFJMX1BJTihQR19CQVNFICsgMjcsICJQRzI3IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyOAlQSU5DVFJMX1BJTihQR19CQVNFICsgMjgsICJQRzI4IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEcyOQlQSU5DVFJMX1BJTihQR19CQVNFICsgMjksICJQRzI5IikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEczMAlQSU5DVFJMX1BJTihQR19CQVNFICsgMzAsICJQRzMwIikKLSNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU5fUEczMQlQSU5DVFJMX1BJTihQR19CQVNFICsgMzEsICJQRzMxIikKLQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDAJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDAsICJQSDAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDEJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDEsICJQSDEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDIJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDIsICJQSDIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDMJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDMsICJQSDMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDQJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDQsICJQSDQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDUJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDUsICJQSDUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDYJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDYsICJQSDYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDcJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDcsICJQSDciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDgJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDgsICJQSDgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDkJUElOQ1RSTF9QSU4oUEhfQkFTRSArIDksICJQSDkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDEwCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxMCwgIlBIMTAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDExCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxMSwgIlBIMTEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDEyCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxMiwgIlBIMTIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDEzCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxMywgIlBIMTMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDE0CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxNCwgIlBIMTQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDE1CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxNSwgIlBIMTUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDE2CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxNiwgIlBIMTYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDE3CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxNywgIlBIMTciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDE4CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxOCwgIlBIMTgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDE5CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAxOSwgIlBIMTkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDIwCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyMCwgIlBIMjAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDIxCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyMSwgIlBIMjEiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDIyCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyMiwgIlBIMjIiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDIzCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyMywgIlBIMjMiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDI0CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyNCwgIlBIMjQiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDI1CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyNSwgIlBIMjUiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDI2CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyNiwgIlBIMjYiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDI3CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyNywgIlBIMjciKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDI4CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyOCwgIlBIMjgiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDI5CVBJTkNUUkxfUElOKFBIX0JBU0UgKyAyOSwgIlBIMjkiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDMwCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAzMCwgIlBIMzAiKQotI2RlZmluZSBTVU5YSV9QSU5DVFJMX1BJTl9QSDMxCVBJTkNUUkxfUElOKFBIX0JBU0UgKyAzMSwgIlBIMzEiKQotCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMAlQSU5DVFJMX1BJTihQSV9CQVNFICsgMCwgIlBJMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMQlQSU5DVFJMX1BJTihQSV9CQVNFICsgMSwgIlBJMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMglQSU5DVFJMX1BJTihQSV9CQVNFICsgMiwgIlBJMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMwlQSU5DVFJMX1BJTihQSV9CQVNFICsgMywgIlBJMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJNAlQSU5DVFJMX1BJTihQSV9CQVNFICsgNCwgIlBJNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJNQlQSU5DVFJMX1BJTihQSV9CQVNFICsgNSwgIlBJNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJNglQSU5DVFJMX1BJTihQSV9CQVNFICsgNiwgIlBJNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJNwlQSU5DVFJMX1BJTihQSV9CQVNFICsgNywgIlBJNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJOAlQSU5DVFJMX1BJTihQSV9CQVNFICsgOCwgIlBJOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJOQlQSU5DVFJMX1BJTihQSV9CQVNFICsgOSwgIlBJOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTAJUElOQ1RSTF9QSU4oUElfQkFTRSArIDEwLCAiUEkxMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTEJUElOQ1RSTF9QSU4oUElfQkFTRSArIDExLCAiUEkxMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTIJUElOQ1RSTF9QSU4oUElfQkFTRSArIDEyLCAiUEkxMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTMJUElOQ1RSTF9QSU4oUElfQkFTRSArIDEzLCAiUEkxMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTQJUElOQ1RSTF9QSU4oUElfQkFTRSArIDE0LCAiUEkxNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTUJUElOQ1RSTF9QSU4oUElfQkFTRSArIDE1LCAiUEkxNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTYJUElOQ1RSTF9QSU4oUElfQkFTRSArIDE2LCAiUEkxNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTcJUElOQ1RSTF9QSU4oUElfQkFTRSArIDE3LCAiUEkxNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTgJUElOQ1RSTF9QSU4oUElfQkFTRSArIDE4LCAiUEkxOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMTkJUElOQ1RSTF9QSU4oUElfQkFTRSArIDE5LCAiUEkxOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjAJUElOQ1RSTF9QSU4oUElfQkFTRSArIDIwLCAiUEkyMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjEJUElOQ1RSTF9QSU4oUElfQkFTRSArIDIxLCAiUEkyMSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjIJUElOQ1RSTF9QSU4oUElfQkFTRSArIDIyLCAiUEkyMiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjMJUElOQ1RSTF9QSU4oUElfQkFTRSArIDIzLCAiUEkyMyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjQJUElOQ1RSTF9QSU4oUElfQkFTRSArIDI0LCAiUEkyNCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjUJUElOQ1RSTF9QSU4oUElfQkFTRSArIDI1LCAiUEkyNSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjYJUElOQ1RSTF9QSU4oUElfQkFTRSArIDI2LCAiUEkyNiIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjcJUElOQ1RSTF9QSU4oUElfQkFTRSArIDI3LCAiUEkyNyIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjgJUElOQ1RSTF9QSU4oUElfQkFTRSArIDI4LCAiUEkyOCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMjkJUElOQ1RSTF9QSU4oUElfQkFTRSArIDI5LCAiUEkyOSIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMzAJUElOQ1RSTF9QSU4oUElfQkFTRSArIDMwLCAiUEkzMCIpCi0jZGVmaW5lIFNVTlhJX1BJTkNUUkxfUElOX1BJMzEJUElOQ1RSTF9QSU4oUElfQkFTRSArIDMxLCAiUEkzMSIpCi0KLSNkZWZpbmUgU1VOWElfUElOX05BTUVfTUFYX0xFTgk1Ci0KLSNkZWZpbmUgQkFOS19NRU1fU0laRQkJMHgyNAotI2RlZmluZSBNVVhfUkVHU19PRkZTRVQJCTB4MAotI2RlZmluZSBEQVRBX1JFR1NfT0ZGU0VUCTB4MTAKLSNkZWZpbmUgRExFVkVMX1JFR1NfT0ZGU0VUCTB4MTQKLSNkZWZpbmUgUFVMTF9SRUdTX09GRlNFVAkweDFjCi0KLSNkZWZpbmUgUElOU19QRVJfQkFOSwkJMzIKLSNkZWZpbmUgTVVYX1BJTlNfUEVSX1JFRwk4Ci0jZGVmaW5lIE1VWF9QSU5TX0JJVFMJCTQKLSNkZWZpbmUgTVVYX1BJTlNfTUFTSwkJMHgwZgotI2RlZmluZSBEQVRBX1BJTlNfUEVSX1JFRwkzMgotI2RlZmluZSBEQVRBX1BJTlNfQklUUwkJMQotI2RlZmluZSBEQVRBX1BJTlNfTUFTSwkJMHgwMQotI2RlZmluZSBETEVWRUxfUElOU19QRVJfUkVHCTE2Ci0jZGVmaW5lIERMRVZFTF9QSU5TX0JJVFMJMgotI2RlZmluZSBETEVWRUxfUElOU19NQVNLCTB4MDMKLSNkZWZpbmUgUFVMTF9QSU5TX1BFUl9SRUcJMTYKLSNkZWZpbmUgUFVMTF9QSU5TX0JJVFMJCTIKLSNkZWZpbmUgUFVMTF9QSU5TX01BU0sJCTB4MDMKLQotI2RlZmluZSBTVU5YSV9JUlFfTlVNQkVSCTMyCi0KLSNkZWZpbmUgSVJRX0NGR19SRUcJCTB4MjAwCi0jZGVmaW5lIElSUV9DRkdfSVJRX1BFUl9SRUcJCTgKLSNkZWZpbmUgSVJRX0NGR19JUlFfQklUUwkJNAotI2RlZmluZSBJUlFfQ0ZHX0lSUV9NQVNLCQkoKDEgPDwgSVJRX0NGR19JUlFfQklUUykgLSAxKQotI2RlZmluZSBJUlFfQ1RSTF9SRUcJCTB4MjEwCi0jZGVmaW5lIElSUV9DVFJMX0lSUV9QRVJfUkVHCQkzMgotI2RlZmluZSBJUlFfQ1RSTF9JUlFfQklUUwkJMQotI2RlZmluZSBJUlFfQ1RSTF9JUlFfTUFTSwkJKCgxIDw8IElSUV9DVFJMX0lSUV9CSVRTKSAtIDEpCi0jZGVmaW5lIElSUV9TVEFUVVNfUkVHCQkweDIxNAotI2RlZmluZSBJUlFfU1RBVFVTX0lSUV9QRVJfUkVHCQkzMgotI2RlZmluZSBJUlFfU1RBVFVTX0lSUV9CSVRTCQkxCi0jZGVmaW5lIElSUV9TVEFUVVNfSVJRX01BU0sJCSgoMSA8PCBJUlFfU1RBVFVTX0lSUV9CSVRTKSAtIDEpCi0KLSNkZWZpbmUgSVJRX0VER0VfUklTSU5HCQkweDAwCi0jZGVmaW5lIElSUV9FREdFX0ZBTExJTkcJMHgwMQotI2RlZmluZSBJUlFfTEVWRUxfSElHSAkJMHgwMgotI2RlZmluZSBJUlFfTEVWRUxfTE9XCQkweDAzCi0jZGVmaW5lIElSUV9FREdFX0JPVEgJCTB4MDQKLQotc3RydWN0IHN1bnhpX2Rlc2NfZnVuY3Rpb24gewotCWNvbnN0IGNoYXIJKm5hbWU7Ci0JdTgJCW11eHZhbDsKLQl1OAkJaXJxbnVtOwotfTsKLQotc3RydWN0IHN1bnhpX2Rlc2NfcGluIHsKLQlzdHJ1Y3QgcGluY3RybF9waW5fZGVzYwkJcGluOwotCXN0cnVjdCBzdW54aV9kZXNjX2Z1bmN0aW9uCSpmdW5jdGlvbnM7Ci19OwotCi1zdHJ1Y3Qgc3VueGlfcGluY3RybF9kZXNjIHsKLQljb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4JKnBpbnM7Ci0JaW50CQkJCW5waW5zOwotCXN0cnVjdCBwaW5jdHJsX2dwaW9fcmFuZ2UJKnJhbmdlczsKLQlpbnQJCQkJbnJhbmdlczsKLX07Ci0KLXN0cnVjdCBzdW54aV9waW5jdHJsX2Z1bmN0aW9uIHsKLQljb25zdCBjaGFyCSpuYW1lOwotCWNvbnN0IGNoYXIJKipncm91cHM7Ci0JdW5zaWduZWQJbmdyb3VwczsKLX07Ci0KLXN0cnVjdCBzdW54aV9waW5jdHJsX2dyb3VwIHsKLQljb25zdCBjaGFyCSpuYW1lOwotCXVuc2lnbmVkIGxvbmcJY29uZmlnOwotCXVuc2lnbmVkCXBpbjsKLX07Ci0KLXN0cnVjdCBzdW54aV9waW5jdHJsIHsKLQl2b2lkIF9faW9tZW0JCQkqbWVtYmFzZTsKLQlzdHJ1Y3QgZ3Bpb19jaGlwCQkqY2hpcDsKLQlzdHJ1Y3Qgc3VueGlfcGluY3RybF9kZXNjCSpkZXNjOwotCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwotCXN0cnVjdCBpcnFfZG9tYWluCQkqZG9tYWluOwotCXN0cnVjdCBzdW54aV9waW5jdHJsX2Z1bmN0aW9uCSpmdW5jdGlvbnM7Ci0JdW5zaWduZWQJCQluZnVuY3Rpb25zOwotCXN0cnVjdCBzdW54aV9waW5jdHJsX2dyb3VwCSpncm91cHM7Ci0JdW5zaWduZWQJCQluZ3JvdXBzOwotCWludAkJCQlpcnE7Ci0JaW50CQkJCWlycV9hcnJheVtTVU5YSV9JUlFfTlVNQkVSXTsKLQlzcGlubG9ja190CQkJbG9jazsKLQlzdHJ1Y3QgcGluY3RybF9kZXYJCSpwY3RsX2RldjsKLX07Ci0KLSNkZWZpbmUgU1VOWElfUElOKF9waW4sIC4uLikJCQkJCVwKLQl7CQkJCQkJCVwKLQkJLnBpbiA9IF9waW4sCQkJCQlcCi0JCS5mdW5jdGlvbnMgPSAoc3RydWN0IHN1bnhpX2Rlc2NfZnVuY3Rpb25bXSl7CVwKLQkJCV9fVkFfQVJHU19fLCB7IH0gfSwJCQlcCi0JfQotCi0jZGVmaW5lIFNVTlhJX0ZVTkNUSU9OKF92YWwsIF9uYW1lKQkJCQlcCi0JewkJCQkJCQlcCi0JCS5uYW1lID0gX25hbWUsCQkJCQlcCi0JCS5tdXh2YWwgPSBfdmFsLAkJCQkJXAotCX0KLQotI2RlZmluZSBTVU5YSV9GVU5DVElPTl9JUlEoX3ZhbCwgX2lycSkJCQkJXAotCXsJCQkJCQkJXAotCQkubmFtZSA9ICJpcnEiLAkJCQkJXAotCQkubXV4dmFsID0gX3ZhbCwJCQkJCVwKLQkJLmlycW51bSA9IF9pcnEsCQkJCQlcCi0JfQotCi0vKgotICogVGhlIHN1blhpIFBJTyByZWdpc3RlcnMgYXJlIG9yZ2FuaXplZCBhcyBpczoKLSAqIDB4MDAgLSAweDBjCU11eGluZyB2YWx1ZXMuCi0gKgkJOCBwaW5zIHBlciByZWdpc3RlciwgZWFjaCBwaW4gaGF2aW5nIGEgNGJpdHMgdmFsdWUKLSAqIDB4MTAJCVBpbiB2YWx1ZXMKLSAqCQkzMiBiaXRzIHBlciByZWdpc3RlciwgZWFjaCBwaW4gY29ycmVzcG9uZGluZyB0byBvbmUgYml0Ci0gKiAweDE0IC0gMHgxOAlEcml2ZSBsZXZlbAotICoJCTE2IHBpbnMgcGVyIHJlZ2lzdGVyLCBlYWNoIHBpbiBoYXZpbmcgYSAyYml0cyB2YWx1ZQotICogMHgxYyAtIDB4MjAJUHVsbC1VcCB2YWx1ZXMKLSAqCQkxNiBwaW5zIHBlciByZWdpc3RlciwgZWFjaCBwaW4gaGF2aW5nIGEgMmJpdHMgdmFsdWUKLSAqCi0gKiBUaGlzIGlzIGZvciB0aGUgZmlyc3QgYmFuay4gRWFjaCBiYW5rIHdpbGwgaGF2ZSB0aGUgc2FtZSBsYXlvdXQsCi0gKiB3aXRoIGFuIG9mZnNldCBiZWluZyBhIG11bHRpcGxlIG9mIDB4MjQuCi0gKgotICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2FsY3VsYXRlIGZyb20gdGhlIHBpbiBudW1iZXIgdGhlIHJlZ2lzdGVyCi0gKiBhbmQgdGhlIGJpdCBvZmZzZXQgdGhhdCB3ZSBzaG91bGQgYWNjZXNzLgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBzdW54aV9tdXhfcmVnKHUxNiBwaW4pCi17Ci0JdTggYmFuayA9IHBpbiAvIFBJTlNfUEVSX0JBTks7Ci0JdTMyIG9mZnNldCA9IGJhbmsgKiBCQU5LX01FTV9TSVpFOwotCW9mZnNldCArPSBNVVhfUkVHU19PRkZTRVQ7Ci0Jb2Zmc2V0ICs9IHBpbiAlIFBJTlNfUEVSX0JBTksgLyBNVVhfUElOU19QRVJfUkVHICogMHgwNDsKLQlyZXR1cm4gcm91bmRfZG93bihvZmZzZXQsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBzdW54aV9tdXhfb2Zmc2V0KHUxNiBwaW4pCi17Ci0JdTMyIHBpbl9udW0gPSBwaW4gJSBNVVhfUElOU19QRVJfUkVHOwotCXJldHVybiBwaW5fbnVtICogTVVYX1BJTlNfQklUUzsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgc3VueGlfZGF0YV9yZWcodTE2IHBpbikKLXsKLQl1OCBiYW5rID0gcGluIC8gUElOU19QRVJfQkFOSzsKLQl1MzIgb2Zmc2V0ID0gYmFuayAqIEJBTktfTUVNX1NJWkU7Ci0Jb2Zmc2V0ICs9IERBVEFfUkVHU19PRkZTRVQ7Ci0Jb2Zmc2V0ICs9IHBpbiAlIFBJTlNfUEVSX0JBTksgLyBEQVRBX1BJTlNfUEVSX1JFRyAqIDB4MDQ7Ci0JcmV0dXJuIHJvdW5kX2Rvd24ob2Zmc2V0LCA0KTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgc3VueGlfZGF0YV9vZmZzZXQodTE2IHBpbikKLXsKLQl1MzIgcGluX251bSA9IHBpbiAlIERBVEFfUElOU19QRVJfUkVHOwotCXJldHVybiBwaW5fbnVtICogREFUQV9QSU5TX0JJVFM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2RsZXZlbF9yZWcodTE2IHBpbikKLXsKLQl1OCBiYW5rID0gcGluIC8gUElOU19QRVJfQkFOSzsKLQl1MzIgb2Zmc2V0ID0gYmFuayAqIEJBTktfTUVNX1NJWkU7Ci0Jb2Zmc2V0ICs9IERMRVZFTF9SRUdTX09GRlNFVDsKLQlvZmZzZXQgKz0gcGluICUgUElOU19QRVJfQkFOSyAvIERMRVZFTF9QSU5TX1BFUl9SRUcgKiAweDA0OwotCXJldHVybiByb3VuZF9kb3duKG9mZnNldCwgNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2RsZXZlbF9vZmZzZXQodTE2IHBpbikKLXsKLQl1MzIgcGluX251bSA9IHBpbiAlIERMRVZFTF9QSU5TX1BFUl9SRUc7Ci0JcmV0dXJuIHBpbl9udW0gKiBETEVWRUxfUElOU19CSVRTOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBzdW54aV9wdWxsX3JlZyh1MTYgcGluKQotewotCXU4IGJhbmsgPSBwaW4gLyBQSU5TX1BFUl9CQU5LOwotCXUzMiBvZmZzZXQgPSBiYW5rICogQkFOS19NRU1fU0laRTsKLQlvZmZzZXQgKz0gUFVMTF9SRUdTX09GRlNFVDsKLQlvZmZzZXQgKz0gcGluICUgUElOU19QRVJfQkFOSyAvIFBVTExfUElOU19QRVJfUkVHICogMHgwNDsKLQlyZXR1cm4gcm91bmRfZG93bihvZmZzZXQsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBzdW54aV9wdWxsX29mZnNldCh1MTYgcGluKQotewotCXUzMiBwaW5fbnVtID0gcGluICUgUFVMTF9QSU5TX1BFUl9SRUc7Ci0JcmV0dXJuIHBpbl9udW0gKiBQVUxMX1BJTlNfQklUUzsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgc3VueGlfaXJxX2NmZ19yZWcodTE2IGlycSkKLXsKLQl1OCByZWcgPSBpcnEgLyBJUlFfQ0ZHX0lSUV9QRVJfUkVHICogMHgwNDsKLQlyZXR1cm4gcmVnICsgSVJRX0NGR19SRUc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2lycV9jZmdfb2Zmc2V0KHUxNiBpcnEpCi17Ci0JdTMyIGlycV9udW0gPSBpcnEgJSBJUlFfQ0ZHX0lSUV9QRVJfUkVHOwotCXJldHVybiBpcnFfbnVtICogSVJRX0NGR19JUlFfQklUUzsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgc3VueGlfaXJxX2N0cmxfcmVnKHUxNiBpcnEpCi17Ci0JdTggcmVnID0gaXJxIC8gSVJRX0NUUkxfSVJRX1BFUl9SRUcgKiAweDA0OwotCXJldHVybiByZWcgKyBJUlFfQ1RSTF9SRUc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2lycV9jdHJsX29mZnNldCh1MTYgaXJxKQotewotCXUzMiBpcnFfbnVtID0gaXJxICUgSVJRX0NUUkxfSVJRX1BFUl9SRUc7Ci0JcmV0dXJuIGlycV9udW0gKiBJUlFfQ1RSTF9JUlFfQklUUzsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgc3VueGlfaXJxX3N0YXR1c19yZWcodTE2IGlycSkKLXsKLQl1OCByZWcgPSBpcnEgLyBJUlFfU1RBVFVTX0lSUV9QRVJfUkVHICogMHgwNDsKLQlyZXR1cm4gcmVnICsgSVJRX1NUQVRVU19SRUc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2lycV9zdGF0dXNfb2Zmc2V0KHUxNiBpcnEpCi17Ci0JdTMyIGlycV9udW0gPSBpcnEgJSBJUlFfU1RBVFVTX0lSUV9QRVJfUkVHOwotCXJldHVybiBpcnFfbnVtICogSVJRX1NUQVRVU19JUlFfQklUUzsKLX0KLQotI2VuZGlmIC8qIF9fUElOQ1RSTF9TVU5YSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYS5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmEuYwppbmRleCA2NTQ1ODA5Li4yZDQzYmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhLmMKQEAgLTI5NSwxNyArMjk1LDExIEBACiB7CiAJc3RydWN0IHRlZ3JhX3BteCAqcG14ID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CiAJY29uc3Qgc3RydWN0IHRlZ3JhX3Bpbmdyb3VwICpnOwotCXUzMiB2YWw7CiAKIAlnID0gJnBteC0+c29jLT5ncm91cHNbZ3JvdXBdOwogCiAJaWYgKFdBUk5fT04oZy0+bXV4X3JlZyA8IDApKQogCQlyZXR1cm47Ci0KLQl2YWwgPSBwbXhfcmVhZGwocG14LCBnLT5tdXhfYmFuaywgZy0+bXV4X3JlZyk7Ci0JdmFsICY9IH4oMHgzIDw8IGctPm11eF9iaXQpOwotCXZhbCB8PSBnLT5mdW5jX3NhZmUgPDwgZy0+bXV4X2JpdDsKLQlwbXhfd3JpdGVsKHBteCwgdmFsLCBnLT5tdXhfYmFuaywgZy0+bXV4X3JlZyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlubXV4X29wcyB0ZWdyYV9waW5tdXhfb3BzID0gewpAQCAtMzM2LDMyICszMzAsMzIgQEAKIAkJKndpZHRoID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBURUdSQV9QSU5DT05GX1BBUkFNX0VOQUJMRV9JTlBVVDoKLQkJKmJhbmsgPSBnLT5laW5wdXRfYmFuazsKLQkJKnJlZyA9IGctPmVpbnB1dF9yZWc7CisJCSpiYW5rID0gZy0+bXV4X2Jhbms7CisJCSpyZWcgPSBnLT5tdXhfcmVnOwogCQkqYml0ID0gZy0+ZWlucHV0X2JpdDsKIAkJKndpZHRoID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBURUdSQV9QSU5DT05GX1BBUkFNX09QRU5fRFJBSU46Ci0JCSpiYW5rID0gZy0+b2RyYWluX2Jhbms7Ci0JCSpyZWcgPSBnLT5vZHJhaW5fcmVnOworCQkqYmFuayA9IGctPm11eF9iYW5rOworCQkqcmVnID0gZy0+bXV4X3JlZzsKIAkJKmJpdCA9IGctPm9kcmFpbl9iaXQ7CiAJCSp3aWR0aCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgVEVHUkFfUElOQ09ORl9QQVJBTV9MT0NLOgotCQkqYmFuayA9IGctPmxvY2tfYmFuazsKLQkJKnJlZyA9IGctPmxvY2tfcmVnOworCQkqYmFuayA9IGctPm11eF9iYW5rOworCQkqcmVnID0gZy0+bXV4X3JlZzsKIAkJKmJpdCA9IGctPmxvY2tfYml0OwogCQkqd2lkdGggPSAxOwogCQlicmVhazsKIAljYXNlIFRFR1JBX1BJTkNPTkZfUEFSQU1fSU9SRVNFVDoKLQkJKmJhbmsgPSBnLT5pb3Jlc2V0X2Jhbms7Ci0JCSpyZWcgPSBnLT5pb3Jlc2V0X3JlZzsKKwkJKmJhbmsgPSBnLT5tdXhfYmFuazsKKwkJKnJlZyA9IGctPm11eF9yZWc7CiAJCSpiaXQgPSBnLT5pb3Jlc2V0X2JpdDsKIAkJKndpZHRoID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBURUdSQV9QSU5DT05GX1BBUkFNX1JDVl9TRUw6Ci0JCSpiYW5rID0gZy0+cmN2X3NlbF9iYW5rOwotCQkqcmVnID0gZy0+cmN2X3NlbF9yZWc7CisJCSpiYW5rID0gZy0+bXV4X2Jhbms7CisJCSpyZWcgPSBnLT5tdXhfcmVnOwogCQkqYml0ID0gZy0+cmN2X3NlbF9iaXQ7CiAJCSp3aWR0aCA9IDE7CiAJCWJyZWFrOwpAQCAtNDA4LDggKzQwMiw4IEBACiAJCSp3aWR0aCA9IGctPnNsd3Jfd2lkdGg7CiAJCWJyZWFrOwogCWNhc2UgVEVHUkFfUElOQ09ORl9QQVJBTV9EUklWRV9UWVBFOgotCQkqYmFuayA9IGctPmRydnR5cGVfYmFuazsKLQkJKnJlZyA9IGctPmRydnR5cGVfcmVnOworCQkqYmFuayA9IGctPmRydl9iYW5rOworCQkqcmVnID0gZy0+ZHJ2X3JlZzsKIAkJKmJpdCA9IGctPmRydnR5cGVfYml0OwogCQkqd2lkdGggPSAyOwogCQlicmVhazsKQEAgLTQxOCwxMSArNDEyLDIyIEBACiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JaWYgKCpyZWcgPCAwKSB7Ci0JCWlmIChyZXBvcnRfZXJyKQorCWlmICgqcmVnIDwgMCB8fCAqYml0ID4gMzEpIHsKKwkJaWYgKHJlcG9ydF9lcnIpIHsKKwkJCWNvbnN0IGNoYXIgKnByb3AgPSAidW5rbm93biI7CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnX3BhcmFtcyk7IGkrKykgeworCQkJCWlmIChjZmdfcGFyYW1zW2ldLnBhcmFtID09IHBhcmFtKSB7CisJCQkJCXByb3AgPSBjZmdfcGFyYW1zW2ldLnByb3BlcnR5OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKIAkJCWRldl9lcnIocG14LT5kZXYsCi0JCQkJIkNvbmZpZyBwYXJhbSAlMDR4IG5vdCBzdXBwb3J0ZWQgb24gZ3JvdXAgJXNcbiIsCi0JCQkJcGFyYW0sIGctPm5hbWUpOworCQkJCSJDb25maWcgcGFyYW0gJTA0eCAoJXMpIG5vdCBzdXBwb3J0ZWQgb24gZ3JvdXAgJXNcbiIsCisJCQkJcGFyYW0sIHByb3AsIGctPm5hbWUpOworCQl9CiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYS5oIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmEuaAppbmRleCA2MDUzODMyLi44ZDk0ZDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYS5oCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhLmgKQEAgLTc4LDk4ICs3OCw4MyBAQAogCiAvKioKICAqIHN0cnVjdCB0ZWdyYV9waW5ncm91cCAtIFRlZ3JhIHBpbiBncm91cAotICogQG11eF9yZWc6CQlNdXggcmVnaXN0ZXIgb2Zmc2V0LiAtMSBpZiB1bnN1cHBvcnRlZC4KLSAqIEBtdXhfYmFuazoJCU11eCByZWdpc3RlciBiYW5rLiAwIGlmIHVuc3VwcG9ydGVkLgotICogQG11eF9iaXQ6CQlNdXggcmVnaXN0ZXIgYml0LiAwIGlmIHVuc3VwcG9ydGVkLgotICogQHB1cGRfcmVnOgkJUHVsbC11cC9kb3duIHJlZ2lzdGVyIG9mZnNldC4gLTEgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAcHVwZF9iYW5rOgkJUHVsbC11cC9kb3duIHJlZ2lzdGVyIGJhbmsuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAcHVwZF9iaXQ6CQlQdWxsLXVwL2Rvd24gcmVnaXN0ZXIgYml0LiAwIGlmIHVuc3VwcG9ydGVkLgotICogQHRyaV9yZWc6CQlUcmktc3RhdGUgcmVnaXN0ZXIgb2Zmc2V0LiAtMSBpZiB1bnN1cHBvcnRlZC4KLSAqIEB0cmlfYmFuazoJCVRyaS1zdGF0ZSByZWdpc3RlciBiYW5rLiAwIGlmIHVuc3VwcG9ydGVkLgotICogQHRyaV9iaXQ6CQlUcmktc3RhdGUgcmVnaXN0ZXIgYml0LiAwIGlmIHVuc3VwcG9ydGVkLgotICogQGVpbnB1dF9yZWc6CQlFbmFibGUtaW5wdXQgcmVnaXN0ZXIgb2Zmc2V0LiAtMSBpZiB1bnN1cHBvcnRlZC4KLSAqIEBlaW5wdXRfYmFuazoJRW5hYmxlLWlucHV0IHJlZ2lzdGVyIGJhbmsuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAZWlucHV0X2JpdDoJCUVuYWJsZS1pbnB1dCByZWdpc3RlciBiaXQuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAb2RyYWluX3JlZzoJCU9wZW4tZHJhaW4gcmVnaXN0ZXIgb2Zmc2V0LiAtMSBpZiB1bnN1cHBvcnRlZC4KLSAqIEBvZHJhaW5fYmFuazoJT3Blbi1kcmFpbiByZWdpc3RlciBiYW5rLiAwIGlmIHVuc3VwcG9ydGVkLgotICogQG9kcmFpbl9iaXQ6CQlPcGVuLWRyYWluIHJlZ2lzdGVyIGJpdC4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEBsb2NrX3JlZzoJCUxvY2sgcmVnaXN0ZXIgb2Zmc2V0LiAtMSBpZiB1bnN1cHBvcnRlZC4KLSAqIEBsb2NrX2Jhbms6CQlMb2NrIHJlZ2lzdGVyIGJhbmsuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAbG9ja19iaXQ6CQlMb2NrIHJlZ2lzdGVyIGJpdC4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEBpb3Jlc2V0X3JlZzoJSU8gcmVzZXQgcmVnaXN0ZXIgb2Zmc2V0LiAtMSBpZiB1bnN1cHBvcnRlZC4KLSAqIEBpb3Jlc2V0X2Jhbms6CUlPIHJlc2V0IHJlZ2lzdGVyIGJhbmsuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAaW9yZXNldF9iaXQ6CUlPIHJlc2V0IHJlZ2lzdGVyIGJpdC4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEByY3Zfc2VsX3JlZzoJUmVjZWl2ZXIgc2VsZWN0IG9mZnNldC4gLTEgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAcmN2X3NlbF9iYW5rOglSZWNlaXZlciBzZWxlY3QgYmFuay4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEByY3Zfc2VsX2JpdDoJUmVjZWl2ZXIgc2VsZWN0IGJpdC4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEBkcnZfcmVnOgkJRHJpdmUgZmllbGRzIHJlZ2lzdGVyIG9mZnNldC4gLTEgaWYgdW5zdXBwb3J0ZWQuCi0gKgkJCVRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGhzbSwgc2NobWl0dCwgbHBtZCwgZHJ2ZG4sCi0gKgkJCWRydnVwLCBzbHdyLCBhbmQgc2x3ZiBwYXJhbWV0ZXJzLgotICogQGRydl9iYW5rOgkJRHJpdmUgZmllbGRzIHJlZ2lzdGVyIGJhbmsuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAaHNtX2JpdDoJCUhpZ2ggU3BlZWQgTW9kZSByZWdpc3RlciBiaXQuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAc2NobWl0dF9iaXQ6CVNjbWl0dCByZWdpc3RlciBiaXQuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAbHBtZF9iaXQ6CQlMb3cgUG93ZXIgTW9kZSByZWdpc3RlciBiaXQuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAZHJ2ZG5fYml0OgkJRHJpdmUgRG93biByZWdpc3RlciBiaXQuIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAZHJ2ZG5fd2lkdGg6CURyaXZlIERvd24gZmllbGQgd2lkdGguIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAZHJ2dXBfYml0OgkJRHJpdmUgVXAgcmVnaXN0ZXIgYml0LiAwIGlmIHVuc3VwcG9ydGVkLgotICogQGRydnVwX3dpZHRoOglEcml2ZSBVcCBmaWVsZCB3aWR0aC4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEBzbHdyX2JpdDoJCVNsZXcgUmlzaW5nIHJlZ2lzdGVyIGJpdC4gMCBpZiB1bnN1cHBvcnRlZC4KLSAqIEBzbHdyX3dpZHRoOgkJU2xldyBSaXNpbmcgZmllbGQgd2lkdGguIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAc2x3Zl9iaXQ6CQlTbGV3IEZhbGxpbmcgcmVnaXN0ZXIgYml0LiAwIGlmIHVuc3VwcG9ydGVkLgotICogQHNsd2Zfd2lkdGg6CQlTbGV3IEZhbGxpbmcgZmllbGQgd2lkdGguIDAgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAZHJ2dHlwZV9yZWc6CURyaXZlIHR5cGUgZmllbGRzIHJlZ2lzdGVyIG9mZnNldC4gLTEgaWYgdW5zdXBwb3J0ZWQuCi0gKiBAZHJ2dHlwZV9iYW5rOglEcml2ZSB0eXBlIGZpZWxkcyByZWdpc3RlciBiYW5rLiAwIGlmIHVuc3VwcG9ydGVkLgotICogQGRydnR5cGVfYml0OglEcml2ZSB0eXBlIHJlZ2lzdGVyIGJpdC4gMCBpZiB1bnN1cHBvcnRlZC4KKyAqIEBuYW1lCQlUaGUgbmFtZSBvZiB0aGUgcGluIGdyb3VwLgorICogQHBpbnMJCUFuIGFycmF5IG9mIHBpbiBJRHMgaW5jbHVkZWQgaW4gdGhpcyBwaW4gZ3JvdXAuCisgKiBAbnBpbnMJCVRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBAcGlucy4KKyAqIEBmdW5jcwkJVGhlIG11eCBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIG11eGVkIG9udG8gdGhpcyBncm91cC4KKyAqIEBtdXhfcmVnOgkJTXV4IHJlZ2lzdGVyIG9mZnNldC4KKyAqCQkJVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgbXV4LCBlaW5wdXQsIG9kcmFpbiwgbG9jaywKKyAqCQkJaW9yZXNldCwgcmN2X3NlbCBwYXJhbWV0ZXJzLgorICogQG11eF9iYW5rOgkJTXV4IHJlZ2lzdGVyIGJhbmsuCisgKiBAbXV4X2JpdDoJCU11eCByZWdpc3RlciBiaXQuCisgKiBAcHVwZF9yZWc6CQlQdWxsLXVwL2Rvd24gcmVnaXN0ZXIgb2Zmc2V0LgorICogQHB1cGRfYmFuazoJCVB1bGwtdXAvZG93biByZWdpc3RlciBiYW5rLgorICogQHB1cGRfYml0OgkJUHVsbC11cC9kb3duIHJlZ2lzdGVyIGJpdC4KKyAqIEB0cmlfcmVnOgkJVHJpLXN0YXRlIHJlZ2lzdGVyIG9mZnNldC4KKyAqIEB0cmlfYmFuazoJCVRyaS1zdGF0ZSByZWdpc3RlciBiYW5rLgorICogQHRyaV9iaXQ6CQlUcmktc3RhdGUgcmVnaXN0ZXIgYml0LgorICogQGVpbnB1dF9iaXQ6CQlFbmFibGUtaW5wdXQgcmVnaXN0ZXIgYml0LgorICogQG9kcmFpbl9iaXQ6CQlPcGVuLWRyYWluIHJlZ2lzdGVyIGJpdC4KKyAqIEBsb2NrX2JpdDoJCUxvY2sgcmVnaXN0ZXIgYml0LgorICogQGlvcmVzZXRfYml0OglJTyByZXNldCByZWdpc3RlciBiaXQuCisgKiBAcmN2X3NlbF9iaXQ6CVJlY2VpdmVyIHNlbGVjdCBiaXQuCisgKiBAZHJ2X3JlZzoJCURyaXZlIGZpZWxkcyByZWdpc3RlciBvZmZzZXQuCisgKgkJCVRoaXMgcmVnaXN0ZXIgY29udGFpbnMgaHNtLCBzY2htaXR0LCBscG1kLCBkcnZkbiwKKyAqCQkJZHJ2dXAsIHNsd3IsIHNsd2YsIGFuZCBkcnZ0eXBlIHBhcmFtZXRlcnMuCisgKiBAZHJ2X2Jhbms6CQlEcml2ZSBmaWVsZHMgcmVnaXN0ZXIgYmFuay4KKyAqIEBoc21fYml0OgkJSGlnaCBTcGVlZCBNb2RlIHJlZ2lzdGVyIGJpdC4KKyAqIEBzY2htaXR0X2JpdDoJU2NtaXR0IHJlZ2lzdGVyIGJpdC4KKyAqIEBscG1kX2JpdDoJCUxvdyBQb3dlciBNb2RlIHJlZ2lzdGVyIGJpdC4KKyAqIEBkcnZkbl9iaXQ6CQlEcml2ZSBEb3duIHJlZ2lzdGVyIGJpdC4KKyAqIEBkcnZkbl93aWR0aDoJRHJpdmUgRG93biBmaWVsZCB3aWR0aC4KKyAqIEBkcnZ1cF9iaXQ6CQlEcml2ZSBVcCByZWdpc3RlciBiaXQuCisgKiBAZHJ2dXBfd2lkdGg6CURyaXZlIFVwIGZpZWxkIHdpZHRoLgorICogQHNsd3JfYml0OgkJU2xldyBSaXNpbmcgcmVnaXN0ZXIgYml0LgorICogQHNsd3Jfd2lkdGg6CQlTbGV3IFJpc2luZyBmaWVsZCB3aWR0aC4KKyAqIEBzbHdmX2JpdDoJCVNsZXcgRmFsbGluZyByZWdpc3RlciBiaXQuCisgKiBAc2x3Zl93aWR0aDoJCVNsZXcgRmFsbGluZyBmaWVsZCB3aWR0aC4KKyAqIEBkcnZ0eXBlX2JpdDoJRHJpdmUgdHlwZSByZWdpc3RlciBiaXQuCisgKgorICogLTEgaW4gYSAqX3JlZyBmaWVsZCBtZWFucyB0aGF0IGZlYXR1cmUgaXMgdW5zdXBwb3J0ZWQgZm9yIHRoaXMgZ3JvdXAuCisgKiAqX2JhbmsgYW5kICpfcmVnIHZhbHVlcyBhcmUgaXJyZWxldmFudCB3aGVuICpfcmVnIGlzIC0xLgorICogV2hlbiAqX3JlZyBpcyB2YWxpZCwgKl9iaXQgbWF5IGJlIC0xIHRvIGluZGljYXRlIGFuIHVuc3VwcG9ydGVkIGZlYXR1cmUuCiAgKgogICogQSByZXByZXNlbnRhdGlvbiBvZiBhIGdyb3VwIG9mIHBpbnMgKHBvc3NpYmx5IGp1c3Qgb25lIHBpbikgaW4gdGhlIFRlZ3JhCiAgKiBwaW4gY29udHJvbGxlci4gRWFjaCBncm91cCBhbGxvd3Mgc29tZSBwYXJhbWV0ZXIgb3IgcGFyYW1ldGVycyB0byBiZQogICogY29uZmlndXJlZC4gVGhlIG1vc3QgY29tbW9uIGlzIG11eCBmdW5jdGlvbiBzZWxlY3Rpb24uIE1hbnkgb3RoZXJzIGV4aXN0CiAgKiBzdWNoIGFzIHB1bGwtdXAvZG93biwgdHJpLXN0YXRlLCBldGMuIFRlZ3JhJ3MgcGluIGNvbnRyb2xsZXIgaXMgY29tcGxleDsKICAqIGNlcnRhaW4gZ3JvdXBzIG1heSBvbmx5IHN1cHBvcnQgY29uZmlndXJpbmcgY2VydGFpbiBwYXJhbWV0ZXJzLCBoZW5jZQotICogZWFjaCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwsIHJlcHJlc2VudGVkIGJ5IGEgLTEgInJlZyIgdmFsdWUuCisgKiBlYWNoIHBhcmFtZXRlciBpcyBvcHRpb25hbC4KICAqLwogc3RydWN0IHRlZ3JhX3Bpbmdyb3VwIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IHVuc2lnbmVkICpwaW5zOwotCXVuc2lnbmVkIG5waW5zOwotCXVuc2lnbmVkIGZ1bmNzWzRdOwotCXVuc2lnbmVkIGZ1bmNfc2FmZTsKKwl1OCBucGluczsKKwl1OCBmdW5jc1s0XTsKIAlzMTYgbXV4X3JlZzsKIAlzMTYgcHVwZF9yZWc7CiAJczE2IHRyaV9yZWc7Ci0JczE2IGVpbnB1dF9yZWc7Ci0JczE2IG9kcmFpbl9yZWc7Ci0JczE2IGxvY2tfcmVnOwotCXMxNiBpb3Jlc2V0X3JlZzsKLQlzMTYgcmN2X3NlbF9yZWc7CiAJczE2IGRydl9yZWc7Ci0JczE2IGRydnR5cGVfcmVnOwogCXUzMiBtdXhfYmFuazoyOwogCXUzMiBwdXBkX2Jhbms6MjsKIAl1MzIgdHJpX2Jhbms6MjsKLQl1MzIgZWlucHV0X2Jhbms6MjsKLQl1MzIgb2RyYWluX2Jhbms6MjsKLQl1MzIgaW9yZXNldF9iYW5rOjI7Ci0JdTMyIHJjdl9zZWxfYmFuazoyOwotCXUzMiBsb2NrX2Jhbms6MjsKIAl1MzIgZHJ2X2Jhbms6MjsKLQl1MzIgZHJ2dHlwZV9iYW5rOjI7Ci0JdTMyIG11eF9iaXQ6NTsKLQl1MzIgcHVwZF9iaXQ6NTsKLQl1MzIgdHJpX2JpdDo1OwotCXUzMiBlaW5wdXRfYml0OjU7Ci0JdTMyIG9kcmFpbl9iaXQ6NTsKLQl1MzIgbG9ja19iaXQ6NTsKLQl1MzIgaW9yZXNldF9iaXQ6NTsKLQl1MzIgcmN2X3NlbF9iaXQ6NTsKLQl1MzIgaHNtX2JpdDo1OwotCXUzMiBzY2htaXR0X2JpdDo1OwotCXUzMiBscG1kX2JpdDo1OwotCXUzMiBkcnZkbl9iaXQ6NTsKLQl1MzIgZHJ2dXBfYml0OjU7Ci0JdTMyIHNsd3JfYml0OjU7Ci0JdTMyIHNsd2ZfYml0OjU7Ci0JdTMyIGRydnR5cGVfYml0OjU7CisJdTMyIG11eF9iaXQ6NjsKKwl1MzIgcHVwZF9iaXQ6NjsKKwl1MzIgdHJpX2JpdDo2OworCXUzMiBlaW5wdXRfYml0OjY7CisJdTMyIG9kcmFpbl9iaXQ6NjsKKwl1MzIgbG9ja19iaXQ6NjsKKwl1MzIgaW9yZXNldF9iaXQ6NjsKKwl1MzIgcmN2X3NlbF9iaXQ6NjsKKwl1MzIgaHNtX2JpdDo2OworCXUzMiBzY2htaXR0X2JpdDo2OworCXUzMiBscG1kX2JpdDo2OworCXUzMiBkcnZkbl9iaXQ6NjsKKwl1MzIgZHJ2dXBfYml0OjY7CisJdTMyIHNsd3JfYml0OjY7CisJdTMyIHNsd2ZfYml0OjY7CisJdTMyIGRydnR5cGVfYml0OjY7CiAJdTMyIGRydmRuX3dpZHRoOjY7CiAJdTMyIGRydnVwX3dpZHRoOjY7CiAJdTMyIHNsd3Jfd2lkdGg6NjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhMTE0LmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYTExNC5jCmluZGV4IDYzZmU3NjEuLjMzNjE0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhMTE0LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmExMTQuYwpAQCAtMTU0NywxMCArMTU0NywxMiBAQAogI2RlZmluZSBEUlZfUElOR1JPVVBfUkVHX0EJCTB4ODY4CS8qIGJhbmsgMCAqLwogI2RlZmluZSBQSU5HUk9VUF9SRUdfQQkJCTB4MzAwMAkvKiBiYW5rIDEgKi8KIAotI2RlZmluZSBQSU5HUk9VUF9SRUdfWShyKQkJKChyKSAtIFBJTkdST1VQX1JFR19BKQotI2RlZmluZSBQSU5HUk9VUF9SRUdfTihyKQkJLTEKKyNkZWZpbmUgUElOR1JPVVBfUkVHKHIpCQkJKChyKSAtIFBJTkdST1VQX1JFR19BKQogCi0jZGVmaW5lIFBJTkdST1VQKHBnX25hbWUsIGYwLCBmMSwgZjIsIGYzLCBmX3NhZmUsIHIsIG9kLCBpb3IsIHJjdl9zZWwpCVwKKyNkZWZpbmUgUElOR1JPVVBfQklUX1koYikJCShiKQorI2RlZmluZSBQSU5HUk9VUF9CSVRfTihiKQkJKC0xKQorCisjZGVmaW5lIFBJTkdST1VQKHBnX25hbWUsIGYwLCBmMSwgZjIsIGYzLCByLCBvZCwgaW9yLCByY3Zfc2VsKQkJXAogCXsJCQkJCQkJCVwKIAkJLm5hbWUgPSAjcGdfbmFtZSwJCQkJCVwKIAkJLnBpbnMgPSBwZ19uYW1lIyNfcGlucywJCQkJCVwKQEAgLTE1NjEsMzggKzE1NjMsMjQgQEAKIAkJCVRFR1JBX01VWF8jI2YyLAkJCQkJXAogCQkJVEVHUkFfTVVYXyMjZjMsCQkJCQlcCiAJCX0sCQkJCQkJCVwKLQkJLmZ1bmNfc2FmZSA9IFRFR1JBX01VWF8jI2Zfc2FmZSwJCQlcCi0JCS5tdXhfcmVnID0gUElOR1JPVVBfUkVHX1kociksCQkJCVwKKwkJLm11eF9yZWcgPSBQSU5HUk9VUF9SRUcociksCQkJCVwKIAkJLm11eF9iYW5rID0gMSwJCQkJCQlcCiAJCS5tdXhfYml0ID0gMCwJCQkJCQlcCi0JCS5wdXBkX3JlZyA9IFBJTkdST1VQX1JFR19ZKHIpLAkJCQlcCisJCS5wdXBkX3JlZyA9IFBJTkdST1VQX1JFRyhyKSwJCQkJXAogCQkucHVwZF9iYW5rID0gMSwJCQkJCQlcCiAJCS5wdXBkX2JpdCA9IDIsCQkJCQkJXAotCQkudHJpX3JlZyA9IFBJTkdST1VQX1JFR19ZKHIpLAkJCQlcCisJCS50cmlfcmVnID0gUElOR1JPVVBfUkVHKHIpLAkJCQlcCiAJCS50cmlfYmFuayA9IDEsCQkJCQkJXAogCQkudHJpX2JpdCA9IDQsCQkJCQkJXAotCQkuZWlucHV0X3JlZyA9IFBJTkdST1VQX1JFR19ZKHIpLAkJCVwKLQkJLmVpbnB1dF9iYW5rID0gMSwJCQkJCVwKLQkJLmVpbnB1dF9iaXQgPSA1LAkJCQkJXAotCQkub2RyYWluX3JlZyA9IFBJTkdST1VQX1JFR18jI29kKHIpLAkJCVwKLQkJLm9kcmFpbl9iYW5rID0gMSwJCQkJCVwKLQkJLm9kcmFpbl9iaXQgPSA2LAkJCQkJXAotCQkubG9ja19yZWcgPSBQSU5HUk9VUF9SRUdfWShyKSwJCQkJXAotCQkubG9ja19iYW5rID0gMSwJCQkJCQlcCi0JCS5sb2NrX2JpdCA9IDcsCQkJCQkJXAotCQkuaW9yZXNldF9yZWcgPSBQSU5HUk9VUF9SRUdfIyNpb3IociksCQkJXAotCQkuaW9yZXNldF9iYW5rID0gMSwJCQkJCVwKLQkJLmlvcmVzZXRfYml0ID0gOCwJCQkJCVwKLQkJLnJjdl9zZWxfcmVnID0gUElOR1JPVVBfUkVHXyMjcmN2X3NlbChyKSwJCVwKLQkJLnJjdl9zZWxfYmFuayA9IDEsCQkJCQlcCi0JCS5yY3Zfc2VsX2JpdCA9IDksCQkJCQlcCisJCS5laW5wdXRfYml0ID0gUElOR1JPVVBfQklUX1koNSksCQkJXAorCQkub2RyYWluX2JpdCA9IFBJTkdST1VQX0JJVF8jI29kKDYpLAkJCVwKKwkJLmxvY2tfYml0ID0gUElOR1JPVVBfQklUX1koNyksCQkJCVwKKwkJLmlvcmVzZXRfYml0ID0gUElOR1JPVVBfQklUXyMjaW9yKDgpLAkJCVwKKwkJLnJjdl9zZWxfYml0ID0gUElOR1JPVVBfQklUXyMjcmN2X3NlbCg5KSwJCVwKIAkJLmRydl9yZWcgPSAtMSwJCQkJCQlcCi0JCS5kcnZ0eXBlX3JlZyA9IC0xLAkJCQkJXAogCX0KIAotI2RlZmluZSBEUlZfUElOR1JPVVBfUkVHX1kocikJCSgocikgLSBEUlZfUElOR1JPVVBfUkVHX0EpCi0jZGVmaW5lIERSVl9QSU5HUk9VUF9SRUdfTihyKQkJLTEKLQorI2RlZmluZSBEUlZfUElOR1JPVVBfUkVHKHIpCQkoKHIpIC0gRFJWX1BJTkdST1VQX1JFR19BKQogCiAjZGVmaW5lIERSVl9QSU5HUk9VUChwZ19uYW1lLCByLCBoc21fYiwgc2NobWl0dF9iLCBscG1kX2IsCQlcCiAJCSAgICAgZHJ2ZG5fYiwgZHJ2ZG5fdywgZHJ2dXBfYiwgZHJ2dXBfdywJCVwKQEAgLTE2MDUsMTIgKzE1OTMsMTIgQEAKIAkJLm11eF9yZWcgPSAtMSwJCQkJCQlcCiAJCS5wdXBkX3JlZyA9IC0xLAkJCQkJCVwKIAkJLnRyaV9yZWcgPSAtMSwJCQkJCQlcCi0JCS5laW5wdXRfcmVnID0gLTEsCQkJCQlcCi0JCS5vZHJhaW5fcmVnID0gLTEsCQkJCQlcCi0JCS5sb2NrX3JlZyA9IC0xLAkJCQkJCVwKLQkJLmlvcmVzZXRfcmVnID0gLTEsCQkJCQlcCi0JCS5yY3Zfc2VsX3JlZyA9IC0xLAkJCQkJXAotCQkuZHJ2X3JlZyA9IERSVl9QSU5HUk9VUF9SRUdfWShyKSwJCQlcCisJCS5laW5wdXRfYml0ID0gLTEsCQkJCQlcCisJCS5vZHJhaW5fYml0ID0gLTEsCQkJCQlcCisJCS5sb2NrX2JpdCA9IC0xLAkJCQkJCVwKKwkJLmlvcmVzZXRfYml0ID0gLTEsCQkJCQlcCisJCS5yY3Zfc2VsX2JpdCA9IC0xLAkJCQkJXAorCQkuZHJ2X3JlZyA9IERSVl9QSU5HUk9VUF9SRUcociksCQkJCVwKIAkJLmRydl9iYW5rID0gMCwJCQkJCQlcCiAJCS5oc21fYml0ID0gaHNtX2IsCQkJCQlcCiAJCS5zY2htaXR0X2JpdCA9IHNjaG1pdHRfYiwJCQkJXApAQCAtMTYyMywxOTAgKzE2MTEsMTg4IEBACiAJCS5zbHdyX3dpZHRoID0gc2x3cl93LAkJCQkJXAogCQkuc2x3Zl9iaXQgPSBzbHdmX2IsCQkJCQlcCiAJCS5zbHdmX3dpZHRoID0gc2x3Zl93LAkJCQkJXAotCQkuZHJ2dHlwZV9yZWcgPSBEUlZfUElOR1JPVVBfUkVHXyMjZHJ2dHlwZShyKSwJCVwKLQkJLmRydnR5cGVfYmFuayA9IDAsCQkJCQlcCi0JCS5kcnZ0eXBlX2JpdCA9IDYsCQkJCQlcCisJCS5kcnZ0eXBlX2JpdCA9IFBJTkdST1VQX0JJVF8jI2RydnR5cGUoNiksCQlcCiAJfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3Bpbmdyb3VwIHRlZ3JhMTE0X2dyb3Vwc1tdID0gewotCS8qICAgICAgIHBnX25hbWUsICAgICAgICAgICAgICAgIGYwLCAgICAgICAgIGYxLCAgICAgICAgIGYyLCAgICAgICAgICAgZjMsICAgICAgICAgIHNhZmUsICAgICByLCAgICAgIG9kLCBpb3IsIHJjdl9zZWwgKi8KLQlQSU5HUk9VUCh1bHBpX2RhdGEwX3BvMSwgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDAwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGExX3BvMiwgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDA0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGEyX3BvMywgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDA4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGEzX3BvNCwgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDBjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGE0X3BvNSwgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDEwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGE1X3BvNiwgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDE0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGE2X3BvNywgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDE4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGE3X3BvMCwgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDFjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2Nsa19weTAsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDIwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX2Rpcl9weTEsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDI0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX254dF9weTIsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDI4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1bHBpX3N0cF9weTMsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICBVTFBJLCAgICAgMHgzMDJjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAzX2ZzX3BwMCwgICAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBJMlMyLCAgICAgMHgzMDMwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAzX2Rpbl9wcDEsICAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBJMlMyLCAgICAgMHgzMDM0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAzX2RvdXRfcHAyLCAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBJMlMyLCAgICAgMHgzMDM4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAzX3NjbGtfcHAzLCAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBJMlMyLCAgICAgMHgzMDNjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdjAsICAgICAgICAgICAgICAgICAgICBVU0IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMDQwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdjEsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMDQ0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfY2xrX3B6MCwgICAgICAgICBTRE1NQzEsICAgICBDTEsxMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMDQ4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfY21kX3B6MSwgICAgICAgICBTRE1NQzEsICAgICBTUERJRiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgMHgzMDRjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfZGF0M19weTQsICAgICAgICBTRE1NQzEsICAgICBTUERJRiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgMHgzMDUwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfZGF0Ml9weTUsICAgICAgICBTRE1NQzEsICAgICBQV00wLCAgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgMHgzMDU0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfZGF0MV9weTYsICAgICAgICBTRE1NQzEsICAgICBQV00xLCAgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgMHgzMDU4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfZGF0MF9weTcsICAgICAgICBTRE1NQzEsICAgICBSU1ZEMiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBSU1ZEMiwgICAgMHgzMDVjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGsyX291dF9wdzUsICAgICAgICAgICBFWFRQRVJJUEgyLCBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMDY4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGsyX3JlcV9wY2M1LCAgICAgICAgICBEQVAsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMDZjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChoZG1pX2ludF9wbjcsICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMTEwLCAgTiwgIE4sICBZKSwKLQlQSU5HUk9VUChkZGNfc2NsX3B2NCwgICAgICAgICAgICBJMkM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMTE0LCAgTiwgIE4sICBZKSwKLQlQSU5HUk9VUChkZGNfc2RhX3B2NSwgICAgICAgICAgICBJMkM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMTE4LCAgTiwgIE4sICBZKSwKLQlQSU5HUk9VUCh1YXJ0Ml9yeGRfcGMzLCAgICAgICAgICBJUkRBLCAgICAgICBTUERJRiwgICAgICBVQVJUQSwgICAgICAgIFNQSTQsICAgICAgICBJUkRBLCAgICAgMHgzMTY0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0Ml90eGRfcGMyLCAgICAgICAgICBJUkRBLCAgICAgICBTUERJRiwgICAgICBVQVJUQSwgICAgICAgIFNQSTQsICAgICAgICBJUkRBLCAgICAgMHgzMTY4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0Ml9ydHNfbl9wajYsICAgICAgICBVQVJUQSwgICAgICBVQVJUQiwgICAgICBSU1ZEMywgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMywgICAgMHgzMTZjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0Ml9jdHNfbl9wajUsICAgICAgICBVQVJUQSwgICAgICBVQVJUQiwgICAgICBSU1ZEMywgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMywgICAgMHgzMTcwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0M190eGRfcHc2LCAgICAgICAgICBVQVJUQywgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMywgICAgMHgzMTc0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0M19yeGRfcHc3LCAgICAgICAgICBVQVJUQywgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMywgICAgMHgzMTc4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0M19jdHNfbl9wYTEsICAgICAgICBVQVJUQywgICAgICBTRE1NQzEsICAgICBEVFYsICAgICAgICAgIFNQSTQsICAgICAgICBVQVJUQywgICAgMHgzMTdjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1YXJ0M19ydHNfbl9wYzAsICAgICAgICBVQVJUQywgICAgICBQV00wLCAgICAgICBEVFYsICAgICAgICAgIERJU1BMQVlBLCAgICBVQVJUQywgICAgMHgzMTgwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTAsICAgICAgICAgICAgICAgICAgICBPV1IsICAgICAgICBVQVJUQSwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMTg0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTEsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBVQVJUQSwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMTg4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTIsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBVQVJUQSwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMThjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTMsICAgICAgICAgICAgICAgICAgICBQV00wLCAgICAgICBVQVJUQSwgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBQV00wLCAgICAgMHgzMTkwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTQsICAgICAgICAgICAgICAgICAgICBQV00xLCAgICAgICBVQVJUQSwgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBQV00xLCAgICAgMHgzMTk0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTUsICAgICAgICAgICAgICAgICAgICBQV00yLCAgICAgICBVQVJUQSwgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBQV00yLCAgICAgMHgzMTk4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwdTYsICAgICAgICAgICAgICAgICAgICBQV00zLCAgICAgICBVQVJUQSwgICAgICBVU0IsICAgICAgICAgIERJU1BMQVlCLCAgICBQV00zLCAgICAgMHgzMTljLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnZW4xX2kyY19zZGFfcGM1LCAgICAgICBJMkMxLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWEwLCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChnZW4xX2kyY19zY2xfcGM0LCAgICAgICBJMkMxLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWE0LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXA0X2ZzX3BwNCwgICAgICAgICAgICBJMlMzLCAgICAgICBSU1ZEMiwgICAgICBEVFYsICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWE4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXA0X2Rpbl9wcDUsICAgICAgICAgICBJMlMzLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWFjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXA0X2RvdXRfcHA2LCAgICAgICAgICBJMlMzLCAgICAgICBSU1ZEMiwgICAgICBEVFYsICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWIwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXA0X3NjbGtfcHA3LCAgICAgICAgICBJMlMzLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWI0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGszX291dF9wZWUwLCAgICAgICAgICBFWFRQRVJJUEgzLCBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWI4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGszX3JlcV9wZWUxLCAgICAgICAgICBERVYzLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWJjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfd3Bfbl9wYzcsICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICBSU1ZEMSwgICAgMHgzMWMwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfaW9yZHlfcGk1LCAgICAgICAgICBTRE1NQzIsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBSU1ZEMiwgICAgMHgzMWM0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfd2FpdF9waTcsICAgICAgICAgICBTUEk0LCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICBOQU5ELCAgICAgMHgzMWM4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWR2X25fcGswLCAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBSU1ZEMSwgICAgMHgzMWNjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY2xrX3BrMSwgICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBHTUksICAgICAgMHgzMWQwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3MwX25fcGowLCAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFVTQiwgICAgICAgICBSU1ZEMSwgICAgMHgzMWQ0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3MxX25fcGoyLCAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNPQywgICAgICAgICBSU1ZEMSwgICAgMHgzMWQ4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3MyX25fcGszLCAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBHTUksICAgICAgMHgzMWRjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3MzX25fcGs0LCAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICBHTUksICAgICAgMHgzMWUwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3M0X25fcGsyLCAgICAgICAgICBVU0IsICAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBHTUksICAgICAgMHgzMWU0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3M2X25fcGkzLCAgICAgICAgICBOQU5ELCAgICAgICBOQU5EX0FMVCwgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBOQU5ELCAgICAgMHgzMWU4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY3M3X25fcGk2LCAgICAgICAgICBOQU5ELCAgICAgICBOQU5EX0FMVCwgICBHTUksICAgICAgICAgIFNETU1DMiwgICAgICBOQU5ELCAgICAgMHgzMWVjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQwX3BnMCwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWYwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxX3BnMSwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWY0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQyX3BnMiwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWY4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQzX3BnMywgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMWZjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQ0X3BnNCwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjAwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQ1X3BnNSwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMSwgICAgMHgzMjA0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQ2X3BnNiwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMSwgICAgMHgzMjA4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQ3X3BnNywgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMSwgICAgMHgzMjBjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQ4X3BoMCwgICAgICAgICAgICBQV00wLCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICBHTUksICAgICAgMHgzMjEwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQ5X3BoMSwgICAgICAgICAgICBQV00xLCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIENMRFZGUywgICAgICBHTUksICAgICAgMHgzMjE0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxMF9waDIsICAgICAgICAgICBQV00yLCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIENMRFZGUywgICAgICBHTUksICAgICAgMHgzMjE4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxMV9waDMsICAgICAgICAgICBQV00zLCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFVTQiwgICAgICAgICBHTUksICAgICAgMHgzMjFjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxMl9waDQsICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjIwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxM19waDUsICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjI0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxNF9waDYsICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICBHTUksICAgICAgMHgzMjI4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYWQxNV9waDcsICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICBHTUksICAgICAgMHgzMjJjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYTE2X3BqNywgICAgICAgICAgICBVQVJURCwgICAgICBUUkFDRSwgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICBHTUksICAgICAgMHgzMjMwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYTE3X3BiMCwgICAgICAgICAgICBVQVJURCwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBSU1ZEMiwgICAgMHgzMjM0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYTE4X3BiMSwgICAgICAgICAgICBVQVJURCwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBSU1ZEMiwgICAgMHgzMjM4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfYTE5X3BrNywgICAgICAgICAgICBVQVJURCwgICAgICBTUEk0LCAgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBHTUksICAgICAgMHgzMjNjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfd3Jfbl9waTAsICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMSwgICAgMHgzMjQwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfb2Vfbl9waTEsICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNPQywgICAgICAgICBSU1ZEMSwgICAgMHgzMjQ0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfZHFzX3BfcGozLCAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICBOQU5ELCAgICAgMHgzMjQ4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfcnN0X25fcGk0LCAgICAgICAgICBOQU5ELCAgICAgICBOQU5EX0FMVCwgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjRjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnZW4yX2kyY19zY2xfcHQ1LCAgICAgICBJMkMyLCAgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjUwLCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChnZW4yX2kyY19zZGFfcHQ2LCAgICAgICBJMkMyLCAgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjU0LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfY2xrX3BjYzQsICAgICAgICBTRE1NQzQsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjU4LCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfY21kX3B0NywgICAgICAgICBTRE1NQzQsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjVjLCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0MF9wYWEwLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjYwLCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0MV9wYWExLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjY0LCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0Ml9wYWEyLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjY4LCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0M19wYWEzLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjZjLCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0NF9wYWE0LCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjcwLCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0NV9wYWE1LCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjc0LCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0Nl9wYWE2LCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjc4LCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0N19wYWE3LCAgICAgICBTRE1NQzQsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjdjLCAgTiwgIFksICBOKSwKLQlQSU5HUk9VUChjYW1fbWNsa19wY2MwLCAgICAgICAgICBWSSwgICAgICAgICBWSV9BTFQxLCAgICBWSV9BTFQzLCAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjg0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwY2MxLCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjg4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwYmIwLCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBWSSwgICAgICAgICBWSV9BTFQxLCAgICAgIFZJX0FMVDMsICAgICBJMlM0LCAgICAgMHgzMjhjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjYW1faTJjX3NjbF9wYmIxLCAgICAgICBWR1AxLCAgICAgICBJMkMzLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjkwLCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChjYW1faTJjX3NkYV9wYmIyLCAgICAgICBWR1AyLCAgICAgICBJMkMzLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjk0LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChwYmIzLCAgICAgICAgICAgICAgICAgICBWR1AzLCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjk4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwYmI0LCAgICAgICAgICAgICAgICAgICBWR1A0LCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMjljLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwYmI1LCAgICAgICAgICAgICAgICAgICBWR1A1LCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmEwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwYmI2LCAgICAgICAgICAgICAgICAgICBWR1A2LCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmE0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwYmI3LCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmE4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwY2MyLCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmFjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChqdGFnX3J0Y2ssICAgICAgICAgICAgICBSVENLLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSVENLLCAgICAgMHgzMmIwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwd3JfaTJjX3NjbF9wejYsICAgICAgICBJMkNQV1IsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmI0LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChwd3JfaTJjX3NkYV9wejcsICAgICAgICBJMkNQV1IsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmI4LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3cwX3ByMCwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmJjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3cxX3ByMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmMwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3cyX3ByMiwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMmM0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3czX3ByMywgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBSU1ZEMywgICAgICAgIERJU1BMQVlCLCAgICBSU1ZEMywgICAgMHgzMmM4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3c0X3ByNCwgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBTUEkyLCAgICAgICAgIERJU1BMQVlCLCAgICBLQkMsICAgICAgMHgzMmNjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3c1X3ByNSwgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBTUEkyLCAgICAgICAgIERJU1BMQVlCLCAgICBLQkMsICAgICAgMHgzMmQwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3c2X3ByNiwgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQV9BTFQsIERJU1BMQVlCLCAgICBLQkMsICAgICAgMHgzMmQ0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3c3X3ByNywgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBDTERWRlMsICAgICAgIFVBUlRBLCAgICAgICBSU1ZEMiwgICAgMHgzMmQ4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3c4X3BzMCwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBDTERWRlMsICAgICAgIFVBUlRBLCAgICAgICBSU1ZEMiwgICAgMHgzMmRjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3c5X3BzMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFVBUlRBLCAgICAgICBSU1ZEMywgICAgMHgzMmUwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9yb3cxMF9wczIsICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFVBUlRBLCAgICAgICBSU1ZEMywgICAgMHgzMmU0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2wwX3BxMCwgICAgICAgICAgICBLQkMsICAgICAgICBVU0IsICAgICAgICBTUEkyLCAgICAgICAgIEVNQ19ETEwsICAgICBLQkMsICAgICAgMHgzMmZjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2wxX3BxMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIEVNQ19ETEwsICAgICBSU1ZEMiwgICAgMHgzMzAwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2wyX3BxMiwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgMHgzMzA0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2wzX3BxMywgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBQV00yLCAgICAgICAgIFVBUlRBLCAgICAgICBLQkMsICAgICAgMHgzMzA4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2w0X3BxNCwgICAgICAgICAgICBLQkMsICAgICAgICBPV1IsICAgICAgICBTRE1NQzMsICAgICAgIFVBUlRBLCAgICAgICBLQkMsICAgICAgMHgzMzBjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2w1X3BxNSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTRE1NQzEsICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzEwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2w2X3BxNiwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzE0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChrYl9jb2w3X3BxNywgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzE4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGtfMzJrX291dF9wYTAsICAgICAgICBCTElOSywgICAgICBTT0MsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzFjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzeXNfY2xrX3JlcV9wejUsICAgICAgICBTWVNDTEssICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzIwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjb3JlX3B3cl9yZXEsICAgICAgICAgICBQV1JPTiwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzI0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjcHVfcHdyX3JlcSwgICAgICAgICAgICBDUFUsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzI4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChwd3JfaW50X24sICAgICAgICAgICAgICBQTUksICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzJjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGtfMzJrX2luLCAgICAgICAgICAgICBDTEssICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBDTEssICAgICAgMHgzMzMwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChvd3IsICAgICAgICAgICAgICAgICAgICBPV1IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzM0LCAgTiwgIE4sICBZKSwKLQlQSU5HUk9VUChkYXAxX2ZzX3BuMCwgICAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzM4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAxX2Rpbl9wbjEsICAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzNjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAxX2RvdXRfcG4yLCAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzQwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAxX3NjbGtfcG4zLCAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzQ0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGsxX3JlcV9wZWUyLCAgICAgICAgICBEQVAsICAgICAgICBEQVAxLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzQ4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChjbGsxX291dF9wdzQsICAgICAgICAgICBFWFRQRVJJUEgxLCBEQVAyLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzRjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzcGRpZl9pbl9wazYsICAgICAgICAgICBTUERJRiwgICAgICBVU0IsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzUwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzcGRpZl9vdXRfcGs1LCAgICAgICAgICBTUERJRiwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzU0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAyX2ZzX3BhMiwgICAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzU4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAyX2Rpbl9wYTQsICAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzVjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAyX2RvdXRfcGE1LCAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzYwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkYXAyX3NjbGtfcGEzLCAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzY0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkdmZzX3B3bV9weDAsICAgICAgICAgICBTUEk2LCAgICAgICBDTERWRlMsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzY4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3gxX2F1ZF9weDEsICAgICAgICBTUEk2LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzZjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3gzX2F1ZF9weDMsICAgICAgICBTUEk2LCAgICAgICBTUEkxLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzcwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChkdmZzX2Nsa19weDIsICAgICAgICAgICBTUEk2LCAgICAgICBDTERWRlMsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzc0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3g0X2F1ZF9weDQsICAgICAgICBSU1ZEMSwgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIERBUDIsICAgICAgICBSU1ZEMSwgICAgMHgzMzc4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3g1X2F1ZF9weDUsICAgICAgICBSU1ZEMSwgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMSwgICAgMHgzMzdjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3g2X2F1ZF9weDYsICAgICAgICBTUEk2LCAgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzgwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3g3X2F1ZF9weDcsICAgICAgICBSU1ZEMSwgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzMzg0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfY2xrX3BhNiwgICAgICAgICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTMsICAgICAgICBSU1ZEMywgICAgMHgzMzkwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfY21kX3BhNywgICAgICAgICBTRE1NQzMsICAgICBQV00zLCAgICAgICBVQVJUQSwgICAgICAgIFNQSTMsICAgICAgICBTRE1NQzMsICAgMHgzMzk0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0MF9wYjcsICAgICAgICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTMsICAgICAgICBSU1ZEMywgICAgMHgzMzk4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0MV9wYjYsICAgICAgICBTRE1NQzMsICAgICBQV00yLCAgICAgICBVQVJUQSwgICAgICAgIFNQSTMsICAgICAgICBTRE1NQzMsICAgMHgzMzljLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0Ml9wYjUsICAgICAgICBTRE1NQzMsICAgICBQV00xLCAgICAgICBESVNQTEFZQSwgICAgIFNQSTMsICAgICAgICBTRE1NQzMsICAgMHgzM2EwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0M19wYjQsICAgICAgICBTRE1NQzMsICAgICBQV00wLCAgICAgICBESVNQTEFZQiwgICAgIFNQSTMsICAgICAgICBTRE1NQzMsICAgMHgzM2E0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChoZG1pX2NlY19wZWUzLCAgICAgICAgICBDRUMsICAgICAgICBTRE1NQzMsICAgICBSU1ZEMywgICAgICAgIFNPQywgICAgICAgICBSU1ZEMywgICAgMHgzM2UwLCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzFfd3Bfbl9wdjMsICAgICAgICBTRE1NQzEsICAgICBDTEsxMiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgMHgzM2U0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfY2Rfbl9wdjIsICAgICAgICBTRE1NQzMsICAgICBPV1IsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzM2U4LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3cyX2F1ZF9wdzIsICAgICAgICBTUEk2LCAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIEkyQzEsICAgICAgICBSU1ZEMiwgICAgMHgzM2VjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChncGlvX3czX2F1ZF9wdzMsICAgICAgICBTUEk2LCAgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIEkyQzEsICAgICAgICBTUEk2LCAgICAgMHgzM2YwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUCh1c2JfdmJ1c19lbjBfcG40LCAgICAgICBVU0IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzM2Y0LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUCh1c2JfdmJ1c19lbjFfcG41LCAgICAgICBVU0IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzM2Y4LCAgWSwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfY2xrX2xiX2luX3BlZTUsICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzM2ZjLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChzZG1tYzNfY2xrX2xiX291dF9wZWU0LCBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgMHgzNDAwLCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChnbWlfY2xrX2xiLCAgICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBHTUksICAgICAgMHgzNDA0LCAgTiwgIE4sICBOKSwKLQlQSU5HUk9VUChyZXNldF9vdXRfbiwgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJFU0VUX09VVF9OLCBSU1ZEMywgICAgMHgzNDA4LCAgTiwgIE4sICBOKSwKKwkvKiAgICAgICBwZ19uYW1lLCAgICAgICAgICAgICAgICBmMCwgICAgICAgICBmMSwgICAgICAgICBmMiwgICAgICAgICAgIGYzLCAgICAgICAgICByLCAgICAgIG9kLCBpb3IsIHJjdl9zZWwgKi8KKwlQSU5HUk9VUCh1bHBpX2RhdGEwX3BvMSwgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAweDMwMDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTFfcG8yLCAgICAgICAgIFNQSTMsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAwNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9kYXRhMl9wbzMsICAgICAgICAgU1BJMywgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDA4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGEzX3BvNCwgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAweDMwMGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTRfcG81LCAgICAgICAgIFNQSTIsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAxMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9kYXRhNV9wbzYsICAgICAgICAgU1BJMiwgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDE0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGE2X3BvNywgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAweDMwMTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTdfcG8wLCAgICAgICAgIFNQSTIsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAxYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9jbGtfcHkwLCAgICAgICAgICAgU1BJMSwgICAgICAgU1BJNSwgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDIwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX2Rpcl9weTEsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICAweDMwMjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfbnh0X3B5MiwgICAgICAgICAgIFNQSTEsICAgICAgIFNQSTUsICAgICAgIFVBUlRELCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAyOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9zdHBfcHkzLCAgICAgICAgICAgU1BJMSwgICAgICAgU1BJNSwgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDJjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAzX2ZzX3BwMCwgICAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAweDMwMzAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDNfZGluX3BwMSwgICAgICAgICAgIEkyUzIsICAgICAgIFNQSTUsICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgIDB4MzAzNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwM19kb3V0X3BwMiwgICAgICAgICAgSTJTMiwgICAgICAgU1BJNSwgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgMHgzMDM4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAzX3NjbGtfcHAzLCAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAweDMwM2MsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB2MCwgICAgICAgICAgICAgICAgICAgIFVTQiwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzA0MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHYxLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMDQ0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzFfY2xrX3B6MCwgICAgICAgICBTRE1NQzEsICAgICBDTEsxMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMwNDgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jMV9jbWRfcHoxLCAgICAgICAgIFNETU1DMSwgICAgIFNQRElGLCAgICAgIFNQSTQsICAgICAgICAgVUFSVEEsICAgICAgIDB4MzA0YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMxX2RhdDNfcHk0LCAgICAgICAgU0RNTUMxLCAgICAgU1BESUYsICAgICAgU1BJNCwgICAgICAgICBVQVJUQSwgICAgICAgMHgzMDUwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzFfZGF0Ml9weTUsICAgICAgICBTRE1NQzEsICAgICBQV00wLCAgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICAweDMwNTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jMV9kYXQxX3B5NiwgICAgICAgIFNETU1DMSwgICAgIFBXTTEsICAgICAgIFNQSTQsICAgICAgICAgVUFSVEEsICAgICAgIDB4MzA1OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMxX2RhdDBfcHk3LCAgICAgICAgU0RNTUMxLCAgICAgUlNWRDIsICAgICAgU1BJNCwgICAgICAgICBVQVJUQSwgICAgICAgMHgzMDVjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjbGsyX291dF9wdzUsICAgICAgICAgICBFWFRQRVJJUEgyLCBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMwNjgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNsazJfcmVxX3BjYzUsICAgICAgICAgIERBUCwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzA2YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoaGRtaV9pbnRfcG43LCAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMTEwLCBOLCAgIE4sICBZKSwKKwlQSU5HUk9VUChkZGNfc2NsX3B2NCwgICAgICAgICAgICBJMkM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxMTQsIE4sICAgTiwgIFkpLAorCVBJTkdST1VQKGRkY19zZGFfcHY1LCAgICAgICAgICAgIEkyQzQsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzExOCwgTiwgICBOLCAgWSksCisJUElOR1JPVVAodWFydDJfcnhkX3BjMywgICAgICAgICAgSVJEQSwgICAgICAgU1BESUYsICAgICAgVUFSVEEsICAgICAgICBTUEk0LCAgICAgICAgMHgzMTY0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1YXJ0Ml90eGRfcGMyLCAgICAgICAgICBJUkRBLCAgICAgICBTUERJRiwgICAgICBVQVJUQSwgICAgICAgIFNQSTQsICAgICAgICAweDMxNjgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVhcnQyX3J0c19uX3BqNiwgICAgICAgIFVBUlRBLCAgICAgIFVBUlRCLCAgICAgIFJTVkQzLCAgICAgICAgU1BJNCwgICAgICAgIDB4MzE2YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWFydDJfY3RzX25fcGo1LCAgICAgICAgVUFSVEEsICAgICAgVUFSVEIsICAgICAgUlNWRDMsICAgICAgICBTUEk0LCAgICAgICAgMHgzMTcwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1YXJ0M190eGRfcHc2LCAgICAgICAgICBVQVJUQywgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTQsICAgICAgICAweDMxNzQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVhcnQzX3J4ZF9wdzcsICAgICAgICAgIFVBUlRDLCAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgU1BJNCwgICAgICAgIDB4MzE3OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWFydDNfY3RzX25fcGExLCAgICAgICAgVUFSVEMsICAgICAgU0RNTUMxLCAgICAgRFRWLCAgICAgICAgICBTUEk0LCAgICAgICAgMHgzMTdjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1YXJ0M19ydHNfbl9wYzAsICAgICAgICBVQVJUQywgICAgICBQV00wLCAgICAgICBEVFYsICAgICAgICAgIERJU1BMQVlBLCAgICAweDMxODAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB1MCwgICAgICAgICAgICAgICAgICAgIE9XUiwgICAgICAgIFVBUlRBLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzE4NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHUxLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgVUFSVEEsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMTg4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwdTIsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBVQVJUQSwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxOGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB1MywgICAgICAgICAgICAgICAgICAgIFBXTTAsICAgICAgIFVBUlRBLCAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgIDB4MzE5MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHU0LCAgICAgICAgICAgICAgICAgICAgUFdNMSwgICAgICAgVUFSVEEsICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgMHgzMTk0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwdTUsICAgICAgICAgICAgICAgICAgICBQV00yLCAgICAgICBVQVJUQSwgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAweDMxOTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB1NiwgICAgICAgICAgICAgICAgICAgIFBXTTMsICAgICAgIFVBUlRBLCAgICAgIFVTQiwgICAgICAgICAgRElTUExBWUIsICAgIDB4MzE5YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ2VuMV9pMmNfc2RhX3BjNSwgICAgICAgSTJDMSwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMWEwLCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnZW4xX2kyY19zY2xfcGM0LCAgICAgICBJMkMxLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYTQsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDRfZnNfcHA0LCAgICAgICAgICAgIEkyUzMsICAgICAgIFJTVkQyLCAgICAgIERUViwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzFhOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwNF9kaW5fcHA1LCAgICAgICAgICAgSTJTMywgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMWFjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXA0X2RvdXRfcHA2LCAgICAgICAgICBJMlMzLCAgICAgICBSU1ZEMiwgICAgICBEVFYsICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYjAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDRfc2Nsa19wcDcsICAgICAgICAgIEkyUzMsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzFiNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoY2xrM19vdXRfcGVlMCwgICAgICAgICAgRVhUUEVSSVBIMywgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMWI4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjbGszX3JlcV9wZWUxLCAgICAgICAgICBERVYzLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYmMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV93cF9uX3BjNywgICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgR01JX0FMVCwgICAgIDB4MzFjMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2lvcmR5X3BpNSwgICAgICAgICAgU0RNTUMyLCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBUUkFDRSwgICAgICAgMHgzMWM0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfd2FpdF9waTcsICAgICAgICAgICBTUEk0LCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICAweDMxYzgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZHZfbl9wazAsICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgVFJBQ0UsICAgICAgIDB4MzFjYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2Nsa19wazEsICAgICAgICAgICAgU0RNTUMyLCAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBUUkFDRSwgICAgICAgMHgzMWQwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfY3MwX25fcGowLCAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFVTQiwgICAgICAgICAweDMxZDQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9jczFfbl9wajIsICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgU09DLCAgICAgICAgIDB4MzFkOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2NzMl9uX3BrMywgICAgICAgICAgU0RNTUMyLCAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBUUkFDRSwgICAgICAgMHgzMWRjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfY3MzX25fcGs0LCAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICAweDMxZTAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9jczRfbl9wazIsICAgICAgICAgIFVTQiwgICAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgVFJBQ0UsICAgICAgIDB4MzFlNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2NzNl9uX3BpMywgICAgICAgICAgTkFORCwgICAgICAgTkFORF9BTFQsICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgMHgzMWU4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfY3M3X25fcGk2LCAgICAgICAgICBOQU5ELCAgICAgICBOQU5EX0FMVCwgICBHTUksICAgICAgICAgIFNETU1DMiwgICAgICAweDMxZWMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZDBfcGcwLCAgICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzFmMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2FkMV9wZzEsICAgICAgICAgICAgUlNWRDEsICAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMWY0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfYWQyX3BnMiwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMxZjgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZDNfcGczLCAgICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzFmYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2FkNF9wZzQsICAgICAgICAgICAgUlNWRDEsICAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjAwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfYWQ1X3BnNSwgICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAweDMyMDQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZDZfcGc2LCAgICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIDB4MzIwOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2FkN19wZzcsICAgICAgICAgICAgUlNWRDEsICAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgMHgzMjBjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfYWQ4X3BoMCwgICAgICAgICAgICBQV00wLCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICAweDMyMTAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZDlfcGgxLCAgICAgICAgICAgIFBXTTEsICAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgQ0xEVkZTLCAgICAgIDB4MzIxNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2FkMTBfcGgyLCAgICAgICAgICAgUFdNMiwgICAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBDTERWRlMsICAgICAgMHgzMjE4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfYWQxMV9waDMsICAgICAgICAgICBQV00zLCAgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFVTQiwgICAgICAgICAweDMyMWMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZDEyX3BoNCwgICAgICAgICAgIFNETU1DMiwgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzIyMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2FkMTNfcGg1LCAgICAgICAgICAgU0RNTUMyLCAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjI0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfYWQxNF9waDYsICAgICAgICAgICBTRE1NQzIsICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICAweDMyMjgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hZDE1X3BoNywgICAgICAgICAgIFNETU1DMiwgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgRFRWLCAgICAgICAgIDB4MzIyYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2ExNl9wajcsICAgICAgICAgICAgVUFSVEQsICAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBHTUlfQUxULCAgICAgMHgzMjMwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfYTE3X3BiMCwgICAgICAgICAgICBVQVJURCwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFRSQUNFLCAgICAgICAweDMyMzQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9hMThfcGIxLCAgICAgICAgICAgIFVBUlRELCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgVFJBQ0UsICAgICAgIDB4MzIzOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2ExOV9wazcsICAgICAgICAgICAgVUFSVEQsICAgICAgU1BJNCwgICAgICAgR01JLCAgICAgICAgICBUUkFDRSwgICAgICAgMHgzMjNjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfd3Jfbl9waTAsICAgICAgICAgICBSU1ZEMSwgICAgICBOQU5ELCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAweDMyNDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9vZV9uX3BpMSwgICAgICAgICAgIFJTVkQxLCAgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgU09DLCAgICAgICAgIDB4MzI0NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2Rxc19wX3BqMywgICAgICAgICAgU0RNTUMyLCAgICAgTkFORCwgICAgICAgR01JLCAgICAgICAgICBUUkFDRSwgICAgICAgMHgzMjQ4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnbWlfcnN0X25fcGk0LCAgICAgICAgICBOQU5ELCAgICAgICBOQU5EX0FMVCwgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdlbjJfaTJjX3NjbF9wdDUsICAgICAgIEkyQzIsICAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI1MCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAoZ2VuMl9pMmNfc2RhX3B0NiwgICAgICAgSTJDMiwgICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjU0LCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfY2xrX3BjYzQsICAgICAgICBTRE1NQzQsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNTgsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9jbWRfcHQ3LCAgICAgICAgIFNETU1DNCwgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI1YywgTiwgICBZLCAgTiksCisJUElOR1JPVVAoc2RtbWM0X2RhdDBfcGFhMCwgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjYwLCBOLCAgIFksICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0MV9wYWExLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNjQsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9kYXQyX3BhYTIsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI2OCwgTiwgICBZLCAgTiksCisJUElOR1JPVVAoc2RtbWM0X2RhdDNfcGFhMywgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjZjLCBOLCAgIFksICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0NF9wYWE0LCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNzAsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9kYXQ1X3BhYTUsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI3NCwgTiwgICBZLCAgTiksCisJUElOR1JPVVAoc2RtbWM0X2RhdDZfcGFhNiwgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjc4LCBOLCAgIFksICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0N19wYWE3LCAgICAgICBTRE1NQzQsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyN2MsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKGNhbV9tY2xrX3BjYzAsICAgICAgICAgIFZJLCAgICAgICAgIFZJX0FMVDEsICAgIFZJX0FMVDMsICAgICAgUlNWRDQsICAgICAgIDB4MzI4NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGNjMSwgICAgICAgICAgICAgICAgICAgSTJTNCwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMjg4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwYmIwLCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBWSSwgICAgICAgICBWSV9BTFQxLCAgICAgIFZJX0FMVDMsICAgICAweDMyOGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNhbV9pMmNfc2NsX3BiYjEsICAgICAgIFZHUDEsICAgICAgIEkyQzMsICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzI5MCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAoY2FtX2kyY19zZGFfcGJiMiwgICAgICAgVkdQMiwgICAgICAgSTJDMywgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMjk0LCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwYmIzLCAgICAgICAgICAgICAgICAgICBWR1AzLCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFJTVkQ0LCAgICAgICAweDMyOTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBiYjQsICAgICAgICAgICAgICAgICAgIFZHUDQsICAgICAgIERJU1BMQVlBLCAgIERJU1BMQVlCLCAgICAgUlNWRDQsICAgICAgIDB4MzI5YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGJiNSwgICAgICAgICAgICAgICAgICAgVkdQNSwgICAgICAgRElTUExBWUEsICAgRElTUExBWUIsICAgICBSU1ZENCwgICAgICAgMHgzMmEwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwYmI2LCAgICAgICAgICAgICAgICAgICBWR1A2LCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFJTVkQ0LCAgICAgICAweDMyYTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBiYjcsICAgICAgICAgICAgICAgICAgIEkyUzQsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzJhOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGNjMiwgICAgICAgICAgICAgICAgICAgSTJTNCwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMmFjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChqdGFnX3J0Y2ssICAgICAgICAgICAgICBSVENLLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMyYjAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB3cl9pMmNfc2NsX3B6NiwgICAgICAgIEkyQ1BXUiwgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzJiNCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAocHdyX2kyY19zZGFfcHo3LCAgICAgICAgSTJDUFdSLCAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMmI4LCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3cwX3ByMCwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMyYmMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzFfcHIxLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzJjMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93Ml9wcjIsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMmM0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3czX3ByMywgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBSU1ZEMywgICAgICAgIERJU1BMQVlCLCAgICAweDMyYzgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzRfcHI0LCAgICAgICAgICAgIEtCQywgICAgICAgIERJU1BMQVlBLCAgIFNQSTIsICAgICAgICAgRElTUExBWUIsICAgIDB4MzJjYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93NV9wcjUsICAgICAgICAgICAgS0JDLCAgICAgICAgRElTUExBWUEsICAgU1BJMiwgICAgICAgICBESVNQTEFZQiwgICAgMHgzMmQwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3c2X3ByNiwgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQV9BTFQsIERJU1BMQVlCLCAgICAweDMyZDQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzdfcHI3LCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIENMRFZGUywgICAgICAgVUFSVEEsICAgICAgIDB4MzJkOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93OF9wczAsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgQ0xEVkZTLCAgICAgICBVQVJUQSwgICAgICAgMHgzMmRjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3c5X3BzMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFVBUlRBLCAgICAgICAweDMyZTAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzEwX3BzMiwgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgVUFSVEEsICAgICAgIDB4MzJlNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2JfY29sMF9wcTAsICAgICAgICAgICAgS0JDLCAgICAgICAgVVNCLCAgICAgICAgU1BJMiwgICAgICAgICBFTUNfRExMLCAgICAgMHgzMmZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9jb2wxX3BxMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIEVNQ19ETEwsICAgICAweDMzMDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX2NvbDJfcHEyLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNQSTIsICAgICAgICAgUlNWRDQsICAgICAgIDB4MzMwNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2JfY29sM19wcTMsICAgICAgICAgICAgS0JDLCAgICAgICAgRElTUExBWUEsICAgUFdNMiwgICAgICAgICBVQVJUQSwgICAgICAgMHgzMzA4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9jb2w0X3BxNCwgICAgICAgICAgICBLQkMsICAgICAgICBPV1IsICAgICAgICBTRE1NQzMsICAgICAgIFVBUlRBLCAgICAgICAweDMzMGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX2NvbDVfcHE1LCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNETU1DMSwgICAgICAgUlNWRDQsICAgICAgIDB4MzMxMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2JfY29sNl9wcTYsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgU1BJMiwgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzE0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9jb2w3X3BxNywgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzMTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNsa18zMmtfb3V0X3BhMCwgICAgICAgIEJMSU5LLCAgICAgIFNPQywgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzMxYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc3lzX2Nsa19yZXFfcHo1LCAgICAgICAgU1lTQ0xLLCAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzIwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjb3JlX3B3cl9yZXEsICAgICAgICAgICBQV1JPTiwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzMjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNwdV9wd3JfcmVxLCAgICAgICAgICAgIENQVSwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzMyOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHdyX2ludF9uLCAgICAgICAgICAgICAgUE1JLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzJjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjbGtfMzJrX2luLCAgICAgICAgICAgICBDTEssICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzMzAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKG93ciwgICAgICAgICAgICAgICAgICAgIE9XUiwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzMzNCwgTiwgICBOLCAgWSksCisJUElOR1JPVVAoZGFwMV9mc19wbjAsICAgICAgICAgICAgSTJTMCwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzM4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAxX2Rpbl9wbjEsICAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzM2MsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDFfZG91dF9wbjIsICAgICAgICAgIEkyUzAsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzM0MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwMV9zY2xrX3BuMywgICAgICAgICAgSTJTMCwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzQ0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjbGsxX3JlcV9wZWUyLCAgICAgICAgICBEQVAsICAgICAgICBEQVAxLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNDgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNsazFfb3V0X3B3NCwgICAgICAgICAgIEVYVFBFUklQSDEsIERBUDIsICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzM0YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc3BkaWZfaW5fcGs2LCAgICAgICAgICAgU1BESUYsICAgICAgVVNCLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzUwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzcGRpZl9vdXRfcGs1LCAgICAgICAgICBTUERJRiwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDJfZnNfcGEyLCAgICAgICAgICAgIEkyUzEsICAgICAgIEhEQSwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzM1OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwMl9kaW5fcGE0LCAgICAgICAgICAgSTJTMSwgICAgICAgSERBLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzVjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAyX2RvdXRfcGE1LCAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNjAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDJfc2Nsa19wYTMsICAgICAgICAgIEkyUzEsICAgICAgIEhEQSwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzM2NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZHZmc19wd21fcHgwLCAgICAgICAgICAgU1BJNiwgICAgICAgQ0xEVkZTLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzY4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChncGlvX3gxX2F1ZF9weDEsICAgICAgICBTUEk2LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNmMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdwaW9feDNfYXVkX3B4MywgICAgICAgIFNQSTYsICAgICAgIFNQSTEsICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzM3MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZHZmc19jbGtfcHgyLCAgICAgICAgICAgU1BJNiwgICAgICAgQ0xEVkZTLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzc0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChncGlvX3g0X2F1ZF9weDQsICAgICAgICBSU1ZEMSwgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIERBUDIsICAgICAgICAweDMzNzgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdwaW9feDVfYXVkX3B4NSwgICAgICAgIFJTVkQxLCAgICAgIFNQSTEsICAgICAgIFNQSTIsICAgICAgICAgUlNWRDQsICAgICAgIDB4MzM3YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ3Bpb194Nl9hdWRfcHg2LCAgICAgICAgU1BJNiwgICAgICAgU1BJMSwgICAgICAgU1BJMiwgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzgwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChncGlvX3g3X2F1ZF9weDcsICAgICAgICBSU1ZEMSwgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzODQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jM19jbGtfcGE2LCAgICAgICAgIFNETU1DMywgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgU1BJMywgICAgICAgIDB4MzM5MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMzX2NtZF9wYTcsICAgICAgICAgU0RNTUMzLCAgICAgUFdNMywgICAgICAgVUFSVEEsICAgICAgICBTUEkzLCAgICAgICAgMHgzMzk0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfZGF0MF9wYjcsICAgICAgICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTMsICAgICAgICAweDMzOTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jM19kYXQxX3BiNiwgICAgICAgIFNETU1DMywgICAgIFBXTTIsICAgICAgIFVBUlRBLCAgICAgICAgU1BJMywgICAgICAgIDB4MzM5YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMzX2RhdDJfcGI1LCAgICAgICAgU0RNTUMzLCAgICAgUFdNMSwgICAgICAgRElTUExBWUEsICAgICBTUEkzLCAgICAgICAgMHgzM2EwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfZGF0M19wYjQsICAgICAgICBTRE1NQzMsICAgICBQV00wLCAgICAgICBESVNQTEFZQiwgICAgIFNQSTMsICAgICAgICAweDMzYTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGhkbWlfY2VjX3BlZTMsICAgICAgICAgIENFQywgICAgICAgIFNETU1DMywgICAgIFJTVkQzLCAgICAgICAgU09DLCAgICAgICAgIDB4MzNlMCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMxX3dwX25fcHYzLCAgICAgICAgU0RNTUMxLCAgICAgQ0xLMTIsICAgICAgU1BJNCwgICAgICAgICBVQVJUQSwgICAgICAgMHgzM2U0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfY2Rfbl9wdjIsICAgICAgICBTRE1NQzMsICAgICBPV1IsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzZTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdwaW9fdzJfYXVkX3B3MiwgICAgICAgIFNQSTYsICAgICAgIFJTVkQyLCAgICAgIFNQSTIsICAgICAgICAgSTJDMSwgICAgICAgIDB4MzNlYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ3Bpb193M19hdWRfcHczLCAgICAgICAgU1BJNiwgICAgICAgU1BJMSwgICAgICAgU1BJMiwgICAgICAgICBJMkMxLCAgICAgICAgMHgzM2YwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1c2JfdmJ1c19lbjBfcG40LCAgICAgICBVU0IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzZjQsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKHVzYl92YnVzX2VuMV9wbjUsICAgICAgIFVTQiwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzNmOCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMzX2Nsa19sYl9pbl9wZWU1LCAgU0RNTUMzLCAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzM2ZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfY2xrX2xiX291dF9wZWU0LCBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDM0MDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdtaV9jbGtfbGIsICAgICAgICAgICAgIFNETU1DMiwgICAgIE5BTkQsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzQwNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocmVzZXRfb3V0X24sICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSRVNFVF9PVVRfTiwgMHgzNDA4LCBOLCAgIE4sICBOKSwKIAogCS8qIHBnX25hbWUsIHIsIGhzbV9iLCBzY2htaXR0X2IsIGxwbWRfYiwgZHJ2ZG5fYiwgZHJ2ZG5fdywgZHJ2dXBfYiwgZHJ2dXBfdywgc2x3cl9iLCBzbHdyX3csIHNsd2ZfYiwgc2x3Zl93LCBkcnZ0eXBlICovCiAJRFJWX1BJTkdST1VQKGFvMSwgICAgICAgICAweDg2OCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmExMjQuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhMTI0LmMKaW5kZXggNzM3NzM3MC4uZTgwNzk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmExMjQuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYTEyNC5jCkBAIC0xNjc3LDEwICsxNjc3LDEyIEBACiAjZGVmaW5lIERSVl9QSU5HUk9VUF9SRUdfQQkJMHg4NjgJLyogYmFuayAwICovCiAjZGVmaW5lIFBJTkdST1VQX1JFR19BCQkJMHgzMDAwCS8qIGJhbmsgMSAqLwogCi0jZGVmaW5lIFBJTkdST1VQX1JFR19ZKHIpCQkoKHIpIC0gUElOR1JPVVBfUkVHX0EpCi0jZGVmaW5lIFBJTkdST1VQX1JFR19OKHIpCQktMQorI2RlZmluZSBQSU5HUk9VUF9SRUcocikJCQkoKHIpIC0gUElOR1JPVVBfUkVHX0EpCiAKLSNkZWZpbmUgUElOR1JPVVAocGdfbmFtZSwgZjAsIGYxLCBmMiwgZjMsIGZfc2FmZSwgciwgb2QsIGlvciwgcmN2X3NlbCkJXAorI2RlZmluZSBQSU5HUk9VUF9CSVRfWShiKQkJKGIpCisjZGVmaW5lIFBJTkdST1VQX0JJVF9OKGIpCQkoLTEpCisKKyNkZWZpbmUgUElOR1JPVVAocGdfbmFtZSwgZjAsIGYxLCBmMiwgZjMsIHIsIG9kLCBpb3IsIHJjdl9zZWwpCQlcCiAJewkJCQkJCQkJXAogCQkubmFtZSA9ICNwZ19uYW1lLAkJCQkJXAogCQkucGlucyA9IHBnX25hbWUjI19waW5zLAkJCQkJXApAQCAtMTY5MSwzOCArMTY5MywyNCBAQAogCQkJVEVHUkFfTVVYXyMjZjIsCQkJCQlcCiAJCQlURUdSQV9NVVhfIyNmMywJCQkJCVwKIAkJfSwJCQkJCQkJXAotCQkuZnVuY19zYWZlID0gVEVHUkFfTVVYXyMjZl9zYWZlLAkJCVwKLQkJLm11eF9yZWcgPSBQSU5HUk9VUF9SRUdfWShyKSwJCQkJXAorCQkubXV4X3JlZyA9IFBJTkdST1VQX1JFRyhyKSwJCQkJXAogCQkubXV4X2JhbmsgPSAxLAkJCQkJCVwKIAkJLm11eF9iaXQgPSAwLAkJCQkJCVwKLQkJLnB1cGRfcmVnID0gUElOR1JPVVBfUkVHX1kociksCQkJCVwKKwkJLnB1cGRfcmVnID0gUElOR1JPVVBfUkVHKHIpLAkJCQlcCiAJCS5wdXBkX2JhbmsgPSAxLAkJCQkJCVwKIAkJLnB1cGRfYml0ID0gMiwJCQkJCQlcCi0JCS50cmlfcmVnID0gUElOR1JPVVBfUkVHX1kociksCQkJCVwKKwkJLnRyaV9yZWcgPSBQSU5HUk9VUF9SRUcociksCQkJCVwKIAkJLnRyaV9iYW5rID0gMSwJCQkJCQlcCiAJCS50cmlfYml0ID0gNCwJCQkJCQlcCi0JCS5laW5wdXRfcmVnID0gUElOR1JPVVBfUkVHX1kociksCQkJXAotCQkuZWlucHV0X2JhbmsgPSAxLAkJCQkJXAotCQkuZWlucHV0X2JpdCA9IDUsCQkJCQlcCi0JCS5vZHJhaW5fcmVnID0gUElOR1JPVVBfUkVHXyMjb2QociksCQkJXAotCQkub2RyYWluX2JhbmsgPSAxLAkJCQkJXAotCQkub2RyYWluX2JpdCA9IDYsCQkJCQlcCi0JCS5sb2NrX3JlZyA9IFBJTkdST1VQX1JFR19ZKHIpLAkJCQlcCi0JCS5sb2NrX2JhbmsgPSAxLAkJCQkJCVwKLQkJLmxvY2tfYml0ID0gNywJCQkJCQlcCi0JCS5pb3Jlc2V0X3JlZyA9IFBJTkdST1VQX1JFR18jI2lvcihyKSwJCQlcCi0JCS5pb3Jlc2V0X2JhbmsgPSAxLAkJCQkJXAotCQkuaW9yZXNldF9iaXQgPSA4LAkJCQkJXAotCQkucmN2X3NlbF9yZWcgPSBQSU5HUk9VUF9SRUdfIyNyY3Zfc2VsKHIpLAkJXAotCQkucmN2X3NlbF9iYW5rID0gMSwJCQkJCVwKLQkJLnJjdl9zZWxfYml0ID0gOSwJCQkJCVwKKwkJLmVpbnB1dF9iaXQgPSBQSU5HUk9VUF9CSVRfWSg1KSwJCQlcCisJCS5vZHJhaW5fYml0ID0gUElOR1JPVVBfQklUXyMjb2QoNiksCQkJXAorCQkubG9ja19iaXQgPSBQSU5HUk9VUF9CSVRfWSg3KSwJCQkJXAorCQkuaW9yZXNldF9iaXQgPSBQSU5HUk9VUF9CSVRfIyNpb3IoOCksCQkJXAorCQkucmN2X3NlbF9iaXQgPSBQSU5HUk9VUF9CSVRfIyNyY3Zfc2VsKDkpLAkJXAogCQkuZHJ2X3JlZyA9IC0xLAkJCQkJCVwKLQkJLmRydnR5cGVfcmVnID0gLTEsCQkJCQlcCiAJfQogCi0jZGVmaW5lIERSVl9QSU5HUk9VUF9SRUdfWShyKQkJKChyKSAtIERSVl9QSU5HUk9VUF9SRUdfQSkKLSNkZWZpbmUgRFJWX1BJTkdST1VQX1JFR19OKHIpCQktMQotCisjZGVmaW5lIERSVl9QSU5HUk9VUF9SRUcocikJCSgocikgLSBEUlZfUElOR1JPVVBfUkVHX0EpCiAKICNkZWZpbmUgRFJWX1BJTkdST1VQKHBnX25hbWUsIHIsIGhzbV9iLCBzY2htaXR0X2IsIGxwbWRfYiwJCVwKIAkJICAgICBkcnZkbl9iLCBkcnZkbl93LCBkcnZ1cF9iLCBkcnZ1cF93LAkJXApAQCAtMTczNSwxMiArMTcyMywxMiBAQAogCQkubXV4X3JlZyA9IC0xLAkJCQkJCVwKIAkJLnB1cGRfcmVnID0gLTEsCQkJCQkJXAogCQkudHJpX3JlZyA9IC0xLAkJCQkJCVwKLQkJLmVpbnB1dF9yZWcgPSAtMSwJCQkJCVwKLQkJLm9kcmFpbl9yZWcgPSAtMSwJCQkJCVwKLQkJLmxvY2tfcmVnID0gLTEsCQkJCQkJXAotCQkuaW9yZXNldF9yZWcgPSAtMSwJCQkJCVwKLQkJLnJjdl9zZWxfcmVnID0gLTEsCQkJCQlcCi0JCS5kcnZfcmVnID0gRFJWX1BJTkdST1VQX1JFR19ZKHIpLAkJCVwKKwkJLmVpbnB1dF9iaXQgPSAtMSwJCQkJCVwKKwkJLm9kcmFpbl9iaXQgPSAtMSwJCQkJCVwKKwkJLmxvY2tfYml0ID0gLTEsCQkJCQkJXAorCQkuaW9yZXNldF9iaXQgPSAtMSwJCQkJCVwKKwkJLnJjdl9zZWxfYml0ID0gLTEsCQkJCQlcCisJCS5kcnZfcmVnID0gRFJWX1BJTkdST1VQX1JFRyhyKSwJCQkJXAogCQkuZHJ2X2JhbmsgPSAwLAkJCQkJCVwKIAkJLmhzbV9iaXQgPSBoc21fYiwJCQkJCVwKIAkJLnNjaG1pdHRfYml0ID0gc2NobWl0dF9iLAkJCQlcCkBAIC0xNzUzLDI0NiArMTc0MSwyNDQgQEAKIAkJLnNsd3Jfd2lkdGggPSBzbHdyX3csCQkJCQlcCiAJCS5zbHdmX2JpdCA9IHNsd2ZfYiwJCQkJCVwKIAkJLnNsd2Zfd2lkdGggPSBzbHdmX3csCQkJCQlcCi0JCS5kcnZ0eXBlX3JlZyA9IERSVl9QSU5HUk9VUF9SRUdfIyNkcnZ0eXBlKHIpLAkJXAotCQkuZHJ2dHlwZV9iYW5rID0gMCwJCQkJCVwKLQkJLmRydnR5cGVfYml0ID0gNiwJCQkJCVwKKwkJLmRydnR5cGVfYml0ID0gUElOR1JPVVBfQklUXyMjZHJ2dHlwZSg2KSwJCVwKIAl9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfcGluZ3JvdXAgdGVncmExMjRfZ3JvdXBzW10gPSB7Ci0gICAgICAgLyogICAgICAgcGdfbmFtZSwgICAgICAgICAgICAgICAgZjAsICAgICAgICAgZjEsICAgICAgICAgZjIsICAgICAgICAgICBmMywgICAgICAgICAgc2FmZSwgICAgICAgciwgICAgICBvZCwgaW9yLCByY3Zfc2VsICovCi0gICAgICAgUElOR1JPVVAodWxwaV9kYXRhMF9wbzEsICAgICAgICAgU1BJMywgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgU1BJMywgICAgICAgMHgzMDAwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1bHBpX2RhdGExX3BvMiwgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBTUEkzLCAgICAgICAweDMwMDQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVscGlfZGF0YTJfcG8zLCAgICAgICAgIFNQSTMsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIFNQSTMsICAgICAgIDB4MzAwOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodWxwaV9kYXRhM19wbzQsICAgICAgICAgU1BJMywgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgU1BJMywgICAgICAgMHgzMDBjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1bHBpX2RhdGE0X3BvNSwgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBTUEkyLCAgICAgICAweDMwMTAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVscGlfZGF0YTVfcG82LCAgICAgICAgIFNQSTIsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIFNQSTIsICAgICAgIDB4MzAxNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodWxwaV9kYXRhNl9wbzcsICAgICAgICAgU1BJMiwgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgU1BJMiwgICAgICAgMHgzMDE4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1bHBpX2RhdGE3X3BvMCwgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICBTUEkyLCAgICAgICAweDMwMWMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVscGlfY2xrX3B5MCwgICAgICAgICAgIFNQSTEsICAgICAgIFNQSTUsICAgICAgIFVBUlRELCAgICAgICAgVUxQSSwgICAgICAgIFNQSTEsICAgICAgIDB4MzAyMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodWxwaV9kaXJfcHkxLCAgICAgICAgICAgU1BJMSwgICAgICAgU1BJNSwgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgU1BJMSwgICAgICAgMHgzMDI0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1bHBpX254dF9weTIsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICBTUEkxLCAgICAgICAweDMwMjgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVscGlfc3RwX3B5MywgICAgICAgICAgIFNQSTEsICAgICAgIFNQSTUsICAgICAgIFVBUlRELCAgICAgICAgVUxQSSwgICAgICAgIFNQSTEsICAgICAgIDB4MzAyYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZGFwM19mc19wcDAsICAgICAgICAgICAgSTJTMiwgICAgICAgU1BJNSwgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgSTJTMiwgICAgICAgMHgzMDMwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkYXAzX2Rpbl9wcDEsICAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICBJMlMyLCAgICAgICAweDMwMzQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGRhcDNfZG91dF9wcDIsICAgICAgICAgIEkyUzIsICAgICAgIFNQSTUsICAgICAgIERJU1BMQVlBLCAgICAgUlNWRDQsICAgICAgIEkyUzIsICAgICAgIDB4MzAzOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZGFwM19zY2xrX3BwMywgICAgICAgICAgSTJTMiwgICAgICAgU1BJNSwgICAgICAgUlNWRDMsICAgICAgICBESVNQTEFZQiwgICAgSTJTMiwgICAgICAgMHgzMDNjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwdjAsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMSwgICAgICAweDMwNDAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHB2MSwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQxLCAgICAgIDB4MzA0NCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWMxX2Nsa19wejAsICAgICAgICAgU0RNTUMxLCAgICAgQ0xLMTIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlNWRDMsICAgICAgMHgzMDQ4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzFfY21kX3B6MSwgICAgICAgICBTRE1NQzEsICAgICBTUERJRiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgICAweDMwNGMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jMV9kYXQzX3B5NCwgICAgICAgIFNETU1DMSwgICAgIFNQRElGLCAgICAgIFNQSTQsICAgICAgICAgVUFSVEEsICAgICAgIFNETU1DMSwgICAgIDB4MzA1MCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWMxX2RhdDJfcHk1LCAgICAgICAgU0RNTUMxLCAgICAgUFdNMCwgICAgICAgU1BJNCwgICAgICAgICBVQVJUQSwgICAgICAgU0RNTUMxLCAgICAgMHgzMDU0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzFfZGF0MV9weTYsICAgICAgICBTRE1NQzEsICAgICBQV00xLCAgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICBTRE1NQzEsICAgICAweDMwNTgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jMV9kYXQwX3B5NywgICAgICAgIFNETU1DMSwgICAgIFJTVkQyLCAgICAgIFNQSTQsICAgICAgICAgVUFSVEEsICAgICAgIFNETU1DMSwgICAgIDB4MzA1YywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoY2xrMl9vdXRfcHc1LCAgICAgICAgICAgRVhUUEVSSVBIMiwgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgRVhUUEVSSVBIMiwgMHgzMDY4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChjbGsyX3JlcV9wY2M1LCAgICAgICAgICBEQVAsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBEQVAsICAgICAgICAweDMwNmMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGhkbWlfaW50X3BuNywgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQxLCAgICAgIDB4MzExMCwgIE4sICBOLCAgWSksCi0gICAgICAgUElOR1JPVVAoZGRjX3NjbF9wdjQsICAgICAgICAgICAgSTJDNCwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgSTJDNCwgICAgICAgMHgzMTE0LCAgTiwgIE4sICBZKSwKLSAgICAgICBQSU5HUk9VUChkZGNfc2RhX3B2NSwgICAgICAgICAgICBJMkM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBJMkM0LCAgICAgICAweDMxMTgsICBOLCAgTiwgIFkpLAotICAgICAgIFBJTkdST1VQKHVhcnQyX3J4ZF9wYzMsICAgICAgICAgIElSREEsICAgICAgIFNQRElGLCAgICAgIFVBUlRBLCAgICAgICAgU1BJNCwgICAgICAgIElSREEsICAgICAgIDB4MzE2NCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodWFydDJfdHhkX3BjMiwgICAgICAgICAgSVJEQSwgICAgICAgU1BESUYsICAgICAgVUFSVEEsICAgICAgICBTUEk0LCAgICAgICAgSVJEQSwgICAgICAgMHgzMTY4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1YXJ0Ml9ydHNfbl9wajYsICAgICAgICBVQVJUQSwgICAgICBVQVJUQiwgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBVQVJUQSwgICAgICAweDMxNmMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVhcnQyX2N0c19uX3BqNSwgICAgICAgIFVBUlRBLCAgICAgIFVBUlRCLCAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIFVBUlRBLCAgICAgIDB4MzE3MCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodWFydDNfdHhkX3B3NiwgICAgICAgICAgVUFSVEMsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgVUFSVEMsICAgICAgMHgzMTc0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1YXJ0M19yeGRfcHc3LCAgICAgICAgICBVQVJUQywgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBVQVJUQywgICAgICAweDMxNzgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVhcnQzX2N0c19uX3BhMSwgICAgICAgIFVBUlRDLCAgICAgIFNETU1DMSwgICAgIERUViwgICAgICAgICAgR01JLCAgICAgICAgIFVBUlRDLCAgICAgIDB4MzE3YywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodWFydDNfcnRzX25fcGMwLCAgICAgICAgVUFSVEMsICAgICAgUFdNMCwgICAgICAgRFRWLCAgICAgICAgICBHTUksICAgICAgICAgVUFSVEMsICAgICAgMHgzMTgwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwdTAsICAgICAgICAgICAgICAgICAgICBPV1IsICAgICAgICBVQVJUQSwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMxODQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHB1MSwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFVBUlRBLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFJTVkQ0LCAgICAgIDB4MzE4OCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocHUyLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgVUFSVEEsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMThjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwdTMsICAgICAgICAgICAgICAgICAgICBQV00wLCAgICAgICBVQVJUQSwgICAgICBHTUksICAgICAgICAgIERJU1BMQVlCLCAgICBQV00wLCAgICAgICAweDMxOTAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHB1NCwgICAgICAgICAgICAgICAgICAgIFBXTTEsICAgICAgIFVBUlRBLCAgICAgIEdNSSwgICAgICAgICAgRElTUExBWUIsICAgIFBXTTEsICAgICAgIDB4MzE5NCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocHU1LCAgICAgICAgICAgICAgICAgICAgUFdNMiwgICAgICAgVUFSVEEsICAgICAgR01JLCAgICAgICAgICBESVNQTEFZQiwgICAgUFdNMiwgICAgICAgMHgzMTk4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwdTYsICAgICAgICAgICAgICAgICAgICBQV00zLCAgICAgICBVQVJUQSwgICAgICBSU1ZEMywgICAgICAgIEdNSSwgICAgICAgICBSU1ZEMywgICAgICAweDMxOWMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGdlbjFfaTJjX3NkYV9wYzUsICAgICAgIEkyQzEsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIEkyQzEsICAgICAgIDB4MzFhMCwgIFksICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZ2VuMV9pMmNfc2NsX3BjNCwgICAgICAgSTJDMSwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgSTJDMSwgICAgICAgMHgzMWE0LCAgWSwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkYXA0X2ZzX3BwNCwgICAgICAgICAgICBJMlMzLCAgICAgICBHTUksICAgICAgICBEVFYsICAgICAgICAgIFJTVkQ0LCAgICAgICBJMlMzLCAgICAgICAweDMxYTgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGRhcDRfZGluX3BwNSwgICAgICAgICAgIEkyUzMsICAgICAgIEdNSSwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIEkyUzMsICAgICAgIDB4MzFhYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZGFwNF9kb3V0X3BwNiwgICAgICAgICAgSTJTMywgICAgICAgR01JLCAgICAgICAgRFRWLCAgICAgICAgICBSU1ZENCwgICAgICAgSTJTMywgICAgICAgMHgzMWIwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkYXA0X3NjbGtfcHA3LCAgICAgICAgICBJMlMzLCAgICAgICBHTUksICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBJMlMzLCAgICAgICAweDMxYjQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGNsazNfb3V0X3BlZTAsICAgICAgICAgIEVYVFBFUklQSDMsIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQzLCAgICAgIDB4MzFiOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoY2xrM19yZXFfcGVlMSwgICAgICAgICAgREVWMywgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMWJjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwYzcsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICBSU1ZEMSwgICAgICAweDMxYzAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBpNSwgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIEdNSSwgICAgICAgIDB4MzFjNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGk3LCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgUlNWRDEsICAgICAgMHgzMWM4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwazAsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBTRE1NQzMsICAgICBHTUksICAgICAgICAgIFNPQywgICAgICAgICBSU1ZEMSwgICAgICAweDMxY2MsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBrMSwgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIEdNSSwgICAgICAgIDB4MzFkMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGowLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBVU0IsICAgICAgICAgUlNWRDEsICAgICAgMHgzMWQ0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwajIsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFNPQywgICAgICAgICBSU1ZEMSwgICAgICAweDMxZDgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBrMywgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgQ0NMQSwgICAgICAgIEdNSSwgICAgICAgIDB4MzFkYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGs0LCAgICAgICAgICAgICAgICAgICAgU0RNTUMyLCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBHTUlfQUxULCAgICAgR01JLCAgICAgICAgMHgzMWUwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwazIsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMxZTQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBpMywgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIFJTVkQxLCAgICAgIDB4MzFlOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGk2LCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBTRE1NQzIsICAgICAgUlNWRDEsICAgICAgMHgzMWVjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwZzAsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMxZjAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBnMSwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFJTVkQ0LCAgICAgIDB4MzFmNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGcyLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMWY4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwZzMsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBUUkFDRSwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMxZmMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBnNCwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFRNRFMsICAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIFJTVkQxLCAgICAgIDB4MzIwMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGc1LCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgUlNWRDEsICAgICAgMHgzMjA0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwZzYsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICBSU1ZEMSwgICAgICAweDMyMDgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBnNywgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIFJTVkQxLCAgICAgIDB4MzIwYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGgwLCAgICAgICAgICAgICAgICAgICAgUFdNMCwgICAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgR01JLCAgICAgICAgMHgzMjEwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwaDEsICAgICAgICAgICAgICAgICAgICBQV00xLCAgICAgICBUTURTLCAgICAgICBHTUksICAgICAgICAgIERJU1BMQVlBLCAgICBHTUksICAgICAgICAweDMyMTQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBoMiwgICAgICAgICAgICAgICAgICAgIFBXTTIsICAgICAgIFRNRFMsICAgICAgIEdNSSwgICAgICAgICAgQ0xEVkZTLCAgICAgIEdNSSwgICAgICAgIDB4MzIxOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGgzLCAgICAgICAgICAgICAgICAgICAgUFdNMywgICAgICAgU1BJNCwgICAgICAgR01JLCAgICAgICAgICBDTERWRlMsICAgICAgR01JLCAgICAgICAgMHgzMjFjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwaDQsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBHTUksICAgICAgICAweDMyMjAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBoNSwgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIEdNSSwgICAgICAgIDB4MzIyNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGg2LCAgICAgICAgICAgICAgICAgICAgU0RNTUMyLCAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgR01JLCAgICAgICAgMHgzMjI4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwaDcsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBUUkFDRSwgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICBHTUksICAgICAgICAweDMyMmMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBqNywgICAgICAgICAgICAgICAgICAgIFVBUlRELCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgR01JX0FMVCwgICAgIFJTVkQyLCAgICAgIDB4MzIzMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGIwLCAgICAgICAgICAgICAgICAgICAgVUFSVEQsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDIsICAgICAgMHgzMjM0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwYjEsICAgICAgICAgICAgICAgICAgICBVQVJURCwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgICAweDMyMzgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBrNywgICAgICAgICAgICAgICAgICAgIFVBUlRELCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFJTVkQyLCAgICAgIDB4MzIzYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGkwLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMjQwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwaTEsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMSwgICAgICAweDMyNDQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBpMiwgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIEdNSSwgICAgICAgIDB4MzI0OCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGk0LCAgICAgICAgICAgICAgICAgICAgU1BJNCwgICAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBESVNQTEFZQSwgICAgR01JLCAgICAgICAgMHgzMjRjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChnZW4yX2kyY19zY2xfcHQ1LCAgICAgICBJMkMyLCAgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgICAweDMyNTAsICBZLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGdlbjJfaTJjX3NkYV9wdDYsICAgICAgIEkyQzIsICAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFJTVkQyLCAgICAgIDB4MzI1NCwgIFksICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWM0X2Nsa19wY2M0LCAgICAgICAgU0RNTUM0LCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDIsICAgICAgMHgzMjU4LCAgTiwgIFksICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzRfY21kX3B0NywgICAgICAgICBTRE1NQzQsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgICAweDMyNWMsICBOLCAgWSwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jNF9kYXQwX3BhYTAsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFNETU1DNCwgICAgIDB4MzI2MCwgIE4sICBZLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWM0X2RhdDFfcGFhMSwgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgU0RNTUM0LCAgICAgMHgzMjY0LCAgTiwgIFksICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzRfZGF0Ml9wYWEyLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBTRE1NQzQsICAgICAweDMyNjgsICBOLCAgWSwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jNF9kYXQzX3BhYTMsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFNETU1DNCwgICAgIDB4MzI2YywgIE4sICBZLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWM0X2RhdDRfcGFhNCwgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgU0RNTUM0LCAgICAgMHgzMjcwLCAgTiwgIFksICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzRfZGF0NV9wYWE1LCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBTRE1NQzQsICAgICAweDMyNzQsICBOLCAgWSwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jNF9kYXQ2X3BhYTYsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFNETU1DNCwgICAgIDB4MzI3OCwgIE4sICBZLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWM0X2RhdDdfcGFhNywgICAgICAgU0RNTUM0LCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgU0RNTUM0LCAgICAgMHgzMjdjLCAgTiwgIFksICBOKSwKLSAgICAgICBQSU5HUk9VUChjYW1fbWNsa19wY2MwLCAgICAgICAgICBWSSwgICAgICAgICBWSV9BTFQxLCAgICBWSV9BTFQzLCAgICAgIFNETU1DMiwgICAgICBWSSwgICAgICAgICAweDMyODQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBjYzEsICAgICAgICAgICAgICAgICAgIEkyUzQsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgU0RNTUMyLCAgICAgIEkyUzQsICAgICAgIDB4MzI4OCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGJiMCwgICAgICAgICAgICAgICAgICAgVkdQNiwgICAgICAgVklNQ0xLMiwgICAgU0RNTUMyLCAgICAgICBWSU1DTEsyX0FMVCwgVkdQNiwgICAgICAgMHgzMjhjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChjYW1faTJjX3NjbF9wYmIxLCAgICAgICBWR1AxLCAgICAgICBJMkMzLCAgICAgICBSU1ZEMywgICAgICAgIFNETU1DMiwgICAgICBWR1AxLCAgICAgICAweDMyOTAsICBZLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGNhbV9pMmNfc2RhX3BiYjIsICAgICAgIFZHUDIsICAgICAgIEkyQzMsICAgICAgIFJTVkQzLCAgICAgICAgU0RNTUMyLCAgICAgIFZHUDIsICAgICAgIDB4MzI5NCwgIFksICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGJiMywgICAgICAgICAgICAgICAgICAgVkdQMywgICAgICAgRElTUExBWUEsICAgRElTUExBWUIsICAgICBTRE1NQzIsICAgICAgVkdQMywgICAgICAgMHgzMjk4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwYmI0LCAgICAgICAgICAgICAgICAgICBWR1A0LCAgICAgICBESVNQTEFZQSwgICBESVNQTEFZQiwgICAgIFNETU1DMiwgICAgICBWR1A0LCAgICAgICAweDMyOWMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBiYjUsICAgICAgICAgICAgICAgICAgIFZHUDUsICAgICAgIERJU1BMQVlBLCAgIFJTVkQzLCAgICAgICAgU0RNTUMyLCAgICAgIFZHUDUsICAgICAgIDB4MzJhMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGJiNiwgICAgICAgICAgICAgICAgICAgSTJTNCwgICAgICAgUlNWRDIsICAgICAgRElTUExBWUIsICAgICBTRE1NQzIsICAgICAgSTJTNCwgICAgICAgMHgzMmE0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwYmI3LCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNETU1DMiwgICAgICBJMlM0LCAgICAgICAweDMyYTgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBjYzIsICAgICAgICAgICAgICAgICAgIEkyUzQsICAgICAgIFJTVkQyLCAgICAgIFNETU1DMywgICAgICAgU0RNTUMyLCAgICAgIEkyUzQsICAgICAgIDB4MzJhYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoanRhZ19ydGNrLCAgICAgICAgICAgICAgUlRDSywgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlRDSywgICAgICAgMHgzMmIwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwd3JfaTJjX3NjbF9wejYsICAgICAgICBJMkNQV1IsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgICAweDMyYjQsICBZLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHB3cl9pMmNfc2RhX3B6NywgICAgICAgIEkyQ1BXUiwgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQyLCAgICAgIDB4MzJiOCwgIFksICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93MF9wcjAsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMmJjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9yb3cxX3ByMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMyYzAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX3JvdzJfcHIyLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQ0LCAgICAgIDB4MzJjNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93M19wcjMsICAgICAgICAgICAgS0JDLCAgICAgICAgRElTUExBWUEsICAgU1lTLCAgICAgICAgICBESVNQTEFZQiwgICAgS0JDLCAgICAgICAgMHgzMmM4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9yb3c0X3ByNCwgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBSU1ZEMywgICAgICAgIERJU1BMQVlCLCAgICBSU1ZEMywgICAgICAweDMyY2MsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX3JvdzVfcHI1LCAgICAgICAgICAgIEtCQywgICAgICAgIERJU1BMQVlBLCAgIFJTVkQzLCAgICAgICAgRElTUExBWUIsICAgIFJTVkQzLCAgICAgIDB4MzJkMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93Nl9wcjYsICAgICAgICAgICAgS0JDLCAgICAgICAgRElTUExBWUEsICAgRElTUExBWUFfQUxULCBESVNQTEFZQiwgICAgS0JDLCAgICAgICAgMHgzMmQ0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9yb3c3X3ByNywgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBDTERWRlMsICAgICAgIFVBUlRBLCAgICAgICBSU1ZEMiwgICAgICAweDMyZDgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX3JvdzhfcHMwLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIENMRFZGUywgICAgICAgVUFSVEEsICAgICAgIFJTVkQyLCAgICAgIDB4MzJkYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93OV9wczEsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBVQVJUQSwgICAgICAgS0JDLCAgICAgICAgMHgzMmUwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9yb3cxMF9wczIsICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFVBUlRBLCAgICAgICBLQkMsICAgICAgICAweDMyZTQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX3JvdzExX3BzMywgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgSVJEQSwgICAgICAgIFJTVkQzLCAgICAgIDB4MzJlOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93MTJfcHM0LCAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBJUkRBLCAgICAgICAgUlNWRDMsICAgICAgMHgzMmVjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9yb3cxM19wczUsICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMyZjAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX3JvdzE0X3BzNiwgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNQSTIsICAgICAgICAgUlNWRDQsICAgICAgIFJTVkQ0LCAgICAgIDB4MzJmNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93MTVfcHM3LCAgICAgICAgICAgS0JDLCAgICAgICAgU09DLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgS0JDLCAgICAgICAgMHgzMmY4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9jb2wwX3BxMCwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMyZmMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX2NvbDFfcHExLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNQSTIsICAgICAgICAgUlNWRDQsICAgICAgIFJTVkQ0LCAgICAgIDB4MzMwMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2JfY29sMl9wcTIsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgU1BJMiwgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMzA0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9jb2wzX3BxMywgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBQV00yLCAgICAgICAgIFVBUlRBLCAgICAgICBLQkMsICAgICAgICAweDMzMDgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX2NvbDRfcHE0LCAgICAgICAgICAgIEtCQywgICAgICAgIE9XUiwgICAgICAgIFNETU1DMywgICAgICAgVUFSVEEsICAgICAgIEtCQywgICAgICAgIDB4MzMwYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2JfY29sNV9wcTUsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgU0RNTUMzLCAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMzEwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9jb2w2X3BxNiwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFVBUlRELCAgICAgICBSU1ZEMiwgICAgICAweDMzMTQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGtiX2NvbDdfcHE3LCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNQSTIsICAgICAgICAgVUFSVEQsICAgICAgIFJTVkQyLCAgICAgIDB4MzMxOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoY2xrXzMya19vdXRfcGEwLCAgICAgICAgQkxJTkssICAgICAgU09DLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlNWRDMsICAgICAgMHgzMzFjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChjb3JlX3B3cl9yZXEsICAgICAgICAgICBQV1JPTiwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgICAweDMzMjQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGNwdV9wd3JfcmVxLCAgICAgICAgICAgIENQVSwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQyLCAgICAgIDB4MzMyOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocHdyX2ludF9uLCAgICAgICAgICAgICAgUE1JLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlNWRDIsICAgICAgMHgzMzJjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChjbGtfMzJrX2luLCAgICAgICAgICAgICBDTEssICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZEMiwgICAgICAweDMzMzAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKG93ciwgICAgICAgICAgICAgICAgICAgIE9XUiwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQyLCAgICAgIDB4MzMzNCwgIE4sICBOLCAgWSksCi0gICAgICAgUElOR1JPVVAoZGFwMV9mc19wbjAsICAgICAgICAgICAgSTJTMCwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgUlNWRDQsICAgICAgMHgzMzM4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkYXAxX2Rpbl9wbjEsICAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBSU1ZENCwgICAgICAweDMzM2MsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGRhcDFfZG91dF9wbjIsICAgICAgICAgIEkyUzAsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgU0FUQSwgICAgICAgIEkyUzAsICAgICAgIDB4MzM0MCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZGFwMV9zY2xrX3BuMywgICAgICAgICAgSTJTMCwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgSTJTMCwgICAgICAgMHgzMzQ0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkYXBfbWNsazFfcmVxX3BlZTIsICAgICBEQVAsICAgICAgICBEQVAxLCAgICAgICBTQVRBLCAgICAgICAgIFJTVkQ0LCAgICAgICBEQVAsICAgICAgICAweDMzNDgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGRhcF9tY2xrMV9wdzQsICAgICAgICAgIEVYVFBFUklQSDEsIERBUDIsICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFJTVkQzLCAgICAgIDB4MzM0YywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc3BkaWZfaW5fcGs2LCAgICAgICAgICAgU1BESUYsICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBJMkMzLCAgICAgICAgUlNWRDMsICAgICAgMHgzMzUwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChzcGRpZl9vdXRfcGs1LCAgICAgICAgICBTUERJRiwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIEkyQzMsICAgICAgICBSU1ZEMywgICAgICAweDMzNTQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGRhcDJfZnNfcGEyLCAgICAgICAgICAgIEkyUzEsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIEkyUzEsICAgICAgIDB4MzM1OCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZGFwMl9kaW5fcGE0LCAgICAgICAgICAgSTJTMSwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgSTJTMSwgICAgICAgMHgzMzVjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkYXAyX2RvdXRfcGE1LCAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBJMlMxLCAgICAgICAweDMzNjAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGRhcDJfc2Nsa19wYTMsICAgICAgICAgIEkyUzEsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIEkyUzEsICAgICAgIDB4MzM2NCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZHZmc19wd21fcHgwLCAgICAgICAgICAgU1BJNiwgICAgICAgQ0xEVkZTLCAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgU1BJNiwgICAgICAgMHgzMzY4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChncGlvX3gxX2F1ZF9weDEsICAgICAgICBTUEk2LCAgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBTUEk2LCAgICAgICAweDMzNmMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGdwaW9feDNfYXVkX3B4MywgICAgICAgIFNQSTYsICAgICAgIFNQSTEsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIFNQSTYsICAgICAgIDB4MzM3MCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZHZmc19jbGtfcHgyLCAgICAgICAgICAgU1BJNiwgICAgICAgQ0xEVkZTLCAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgU1BJNiwgICAgICAgMHgzMzc0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChncGlvX3g0X2F1ZF9weDQsICAgICAgICBHTUksICAgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIERBUDIsICAgICAgICBTUEkxLCAgICAgICAweDMzNzgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGdwaW9feDVfYXVkX3B4NSwgICAgICAgIEdNSSwgICAgICAgIFNQSTEsICAgICAgIFNQSTIsICAgICAgICAgUlNWRDQsICAgICAgIFNQSTEsICAgICAgIDB4MzM3YywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoZ3Bpb194Nl9hdWRfcHg2LCAgICAgICAgU1BJNiwgICAgICAgU1BJMSwgICAgICAgU1BJMiwgICAgICAgICBHTUksICAgICAgICAgU1BJMSwgICAgICAgMHgzMzgwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChncGlvX3g3X2F1ZF9weDcsICAgICAgICBSU1ZEMSwgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICBTUEkxLCAgICAgICAweDMzODQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jM19jbGtfcGE2LCAgICAgICAgIFNETU1DMywgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgU1BJMywgICAgICAgIFNETU1DMywgICAgIDB4MzM5MCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWMzX2NtZF9wYTcsICAgICAgICAgU0RNTUMzLCAgICAgUFdNMywgICAgICAgVUFSVEEsICAgICAgICBTUEkzLCAgICAgICAgU0RNTUMzLCAgICAgMHgzMzk0LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzNfZGF0MF9wYjcsICAgICAgICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTMsICAgICAgICBTRE1NQzMsICAgICAweDMzOTgsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jM19kYXQxX3BiNiwgICAgICAgIFNETU1DMywgICAgIFBXTTIsICAgICAgIFVBUlRBLCAgICAgICAgU1BJMywgICAgICAgIFNETU1DMywgICAgIDB4MzM5YywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWMzX2RhdDJfcGI1LCAgICAgICAgU0RNTUMzLCAgICAgUFdNMSwgICAgICAgRElTUExBWUEsICAgICBTUEkzLCAgICAgICAgU0RNTUMzLCAgICAgMHgzM2EwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChzZG1tYzNfZGF0M19wYjQsICAgICAgICBTRE1NQzMsICAgICBQV00wLCAgICAgICBESVNQTEFZQiwgICAgIFNQSTMsICAgICAgICBTRE1NQzMsICAgICAweDMzYTQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBleF9sMF9yc3Rfbl9wZGQxLCAgICAgIFBFMCwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFBFMCwgICAgICAgIDB4MzNiYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGV4X2wwX2Nsa3JlcV9uX3BkZDIsICAgUEUwLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUEUwLCAgICAgICAgMHgzM2MwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChwZXhfd2FrZV9uX3BkZDMsICAgICAgICBQRSwgICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBQRSwgICAgICAgICAweDMzYzQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHBleF9sMV9yc3Rfbl9wZGQ1LCAgICAgIFBFMSwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFBFMSwgICAgICAgIDB4MzNjYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGV4X2wxX2Nsa3JlcV9uX3BkZDYsICAgUEUxLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUEUxLCAgICAgICAgMHgzM2QwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChoZG1pX2NlY19wZWUzLCAgICAgICAgICBDRUMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBDRUMsICAgICAgICAweDMzZTAsICBZLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jMV93cF9uX3B2MywgICAgICAgIFNETU1DMSwgICAgIENMSzEyLCAgICAgIFNQSTQsICAgICAgICAgVUFSVEEsICAgICAgIFNETU1DMSwgICAgIDB4MzNlNCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWMzX2NkX25fcHYyLCAgICAgICAgU0RNTUMzLCAgICAgT1dSLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgU0RNTUMzLCAgICAgMHgzM2U4LCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChncGlvX3cyX2F1ZF9wdzIsICAgICAgICBTUEk2LCAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIEkyQzEsICAgICAgICBSU1ZEMiwgICAgICAweDMzZWMsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKGdwaW9fdzNfYXVkX3B3MywgICAgICAgIFNQSTYsICAgICAgIFNQSTEsICAgICAgIFNQSTIsICAgICAgICAgSTJDMSwgICAgICAgIFNQSTEsICAgICAgIDB4MzNmMCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAodXNiX3ZidXNfZW4wX3BuNCwgICAgICAgVVNCLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgVVNCLCAgICAgICAgMHgzM2Y0LCAgWSwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUCh1c2JfdmJ1c19lbjFfcG41LCAgICAgICBVU0IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBVU0IsICAgICAgICAweDMzZjgsICBZLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHNkbW1jM19jbGtfbGJfaW5fcGVlNSwgIFNETU1DMywgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFNETU1DMywgICAgIDB4MzNmYywgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoc2RtbWMzX2Nsa19sYl9vdXRfcGVlNCwgU0RNTUMzLCAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgU0RNTUMzLCAgICAgMHgzNDAwLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChnbWlfY2xrX2xiLCAgICAgICAgICAgICBTRE1NQzIsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICBTRE1NQzIsICAgICAweDM0MDQsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHJlc2V0X291dF9uLCAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUkVTRVRfT1VUX04sIFJTVkQxLCAgICAgIDB4MzQwOCwgIE4sICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAoa2Jfcm93MTZfcHQwLCAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBVQVJUQywgICAgICAgS0JDLCAgICAgICAgMHgzNDBjLCAgTiwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChrYl9yb3cxN19wdDEsICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFVBUlRDLCAgICAgICBLQkMsICAgICAgICAweDM0MTAsICBOLCAgTiwgIE4pLAotICAgICAgIFBJTkdST1VQKHVzYl92YnVzX2VuMl9wZmYxLCAgICAgIFVTQiwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIFVTQiwgICAgICAgIDB4MzQxNCwgIFksICBOLCAgTiksCi0gICAgICAgUElOR1JPVVAocGZmMiwgICAgICAgICAgICAgICAgICAgU0FUQSwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgUlNWRDIsICAgICAgMHgzNDE4LCAgWSwgIE4sICBOKSwKLSAgICAgICBQSU5HUk9VUChkcF9ocGRfcGZmMCwgICAgICAgICAgICBEUCwgICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICBEUCwgICAgICAgICAweDM0MzAsICBOLCAgTiwgIE4pLAorCS8qICAgICAgIHBnX25hbWUsICAgICAgICAgICAgICAgIGYwLCAgICAgICAgIGYxLCAgICAgICAgIGYyLCAgICAgICAgICAgZjMsICAgICAgICAgIHIsICAgICAgb2QsIGlvciwgcmN2X3NlbCAqLworCVBJTkdST1VQKHVscGlfZGF0YTBfcG8xLCAgICAgICAgIFNQSTMsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAwMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9kYXRhMV9wbzIsICAgICAgICAgU1BJMywgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDA0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGEyX3BvMywgICAgICAgICBTUEkzLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAweDMwMDgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTNfcG80LCAgICAgICAgIFNQSTMsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAwYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9kYXRhNF9wbzUsICAgICAgICAgU1BJMiwgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDEwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGE1X3BvNiwgICAgICAgICBTUEkyLCAgICAgICBIU0ksICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAweDMwMTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTZfcG83LCAgICAgICAgIFNQSTIsICAgICAgIEhTSSwgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAxOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9kYXRhN19wbzAsICAgICAgICAgU1BJMiwgICAgICAgSFNJLCAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDFjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX2Nsa19weTAsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICAweDMwMjAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVscGlfZGlyX3B5MSwgICAgICAgICAgIFNQSTEsICAgICAgIFNQSTUsICAgICAgIFVBUlRELCAgICAgICAgVUxQSSwgICAgICAgIDB4MzAyNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWxwaV9ueHRfcHkyLCAgICAgICAgICAgU1BJMSwgICAgICAgU1BJNSwgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgMHgzMDI4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1bHBpX3N0cF9weTMsICAgICAgICAgICBTUEkxLCAgICAgICBTUEk1LCAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICAweDMwMmMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDNfZnNfcHAwLCAgICAgICAgICAgIEkyUzIsICAgICAgIFNQSTUsICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgIDB4MzAzMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwM19kaW5fcHAxLCAgICAgICAgICAgSTJTMiwgICAgICAgU1BJNSwgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgMHgzMDM0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAzX2RvdXRfcHAyLCAgICAgICAgICBJMlMyLCAgICAgICBTUEk1LCAgICAgICBESVNQTEFZQSwgICAgIFJTVkQ0LCAgICAgICAweDMwMzgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDNfc2Nsa19wcDMsICAgICAgICAgIEkyUzIsICAgICAgIFNQSTUsICAgICAgIFJTVkQzLCAgICAgICAgRElTUExBWUIsICAgIDB4MzAzYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHYwLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMDQwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwdjEsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMwNDQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jMV9jbGtfcHowLCAgICAgICAgIFNETU1DMSwgICAgIENMSzEyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzA0OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMxX2NtZF9wejEsICAgICAgICAgU0RNTUMxLCAgICAgU1BESUYsICAgICAgU1BJNCwgICAgICAgICBVQVJUQSwgICAgICAgMHgzMDRjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzFfZGF0M19weTQsICAgICAgICBTRE1NQzEsICAgICBTUERJRiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICAweDMwNTAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jMV9kYXQyX3B5NSwgICAgICAgIFNETU1DMSwgICAgIFBXTTAsICAgICAgIFNQSTQsICAgICAgICAgVUFSVEEsICAgICAgIDB4MzA1NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMxX2RhdDFfcHk2LCAgICAgICAgU0RNTUMxLCAgICAgUFdNMSwgICAgICAgU1BJNCwgICAgICAgICBVQVJUQSwgICAgICAgMHgzMDU4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzFfZGF0MF9weTcsICAgICAgICBTRE1NQzEsICAgICBSU1ZEMiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICAweDMwNWMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNsazJfb3V0X3B3NSwgICAgICAgICAgIEVYVFBFUklQSDIsIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzA2OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoY2xrMl9yZXFfcGNjNSwgICAgICAgICAgREFQLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMDZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChoZG1pX2ludF9wbjcsICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxMTAsIE4sICAgTiwgIFkpLAorCVBJTkdST1VQKGRkY19zY2xfcHY0LCAgICAgICAgICAgIEkyQzQsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzExNCwgTiwgICBOLCAgWSksCisJUElOR1JPVVAoZGRjX3NkYV9wdjUsICAgICAgICAgICAgSTJDNCwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMTE4LCBOLCAgIE4sICBZKSwKKwlQSU5HUk9VUCh1YXJ0Ml9yeGRfcGMzLCAgICAgICAgICBJUkRBLCAgICAgICBTUERJRiwgICAgICBVQVJUQSwgICAgICAgIFNQSTQsICAgICAgICAweDMxNjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVhcnQyX3R4ZF9wYzIsICAgICAgICAgIElSREEsICAgICAgIFNQRElGLCAgICAgIFVBUlRBLCAgICAgICAgU1BJNCwgICAgICAgIDB4MzE2OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWFydDJfcnRzX25fcGo2LCAgICAgICAgVUFSVEEsICAgICAgVUFSVEIsICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgMHgzMTZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1YXJ0Ml9jdHNfbl9wajUsICAgICAgICBVQVJUQSwgICAgICBVQVJUQiwgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAweDMxNzAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVhcnQzX3R4ZF9wdzYsICAgICAgICAgIFVBUlRDLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIDB4MzE3NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAodWFydDNfcnhkX3B3NywgICAgICAgICAgVUFSVEMsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgMHgzMTc4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1YXJ0M19jdHNfbl9wYTEsICAgICAgICBVQVJUQywgICAgICBTRE1NQzEsICAgICBEVFYsICAgICAgICAgIEdNSSwgICAgICAgICAweDMxN2MsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVhcnQzX3J0c19uX3BjMCwgICAgICAgIFVBUlRDLCAgICAgIFBXTTAsICAgICAgIERUViwgICAgICAgICAgR01JLCAgICAgICAgIDB4MzE4MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHUwLCAgICAgICAgICAgICAgICAgICAgT1dSLCAgICAgICAgVUFSVEEsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMTg0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwdTEsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBVQVJUQSwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMxODgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB1MiwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFVBUlRBLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzE4YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHUzLCAgICAgICAgICAgICAgICAgICAgUFdNMCwgICAgICAgVUFSVEEsICAgICAgR01JLCAgICAgICAgICBESVNQTEFZQiwgICAgMHgzMTkwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwdTQsICAgICAgICAgICAgICAgICAgICBQV00xLCAgICAgICBVQVJUQSwgICAgICBHTUksICAgICAgICAgIERJU1BMQVlCLCAgICAweDMxOTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB1NSwgICAgICAgICAgICAgICAgICAgIFBXTTIsICAgICAgIFVBUlRBLCAgICAgIEdNSSwgICAgICAgICAgRElTUExBWUIsICAgIDB4MzE5OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHU2LCAgICAgICAgICAgICAgICAgICAgUFdNMywgICAgICAgVUFSVEEsICAgICAgUlNWRDMsICAgICAgICBHTUksICAgICAgICAgMHgzMTljLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnZW4xX2kyY19zZGFfcGM1LCAgICAgICBJMkMxLCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYTAsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKGdlbjFfaTJjX3NjbF9wYzQsICAgICAgIEkyQzEsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzFhNCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwNF9mc19wcDQsICAgICAgICAgICAgSTJTMywgICAgICAgR01JLCAgICAgICAgRFRWLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMWE4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXA0X2Rpbl9wcDUsICAgICAgICAgICBJMlMzLCAgICAgICBHTUksICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYWMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDRfZG91dF9wcDYsICAgICAgICAgIEkyUzMsICAgICAgIEdNSSwgICAgICAgIERUViwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzFiMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwNF9zY2xrX3BwNywgICAgICAgICAgSTJTMywgICAgICAgR01JLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMWI0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjbGszX291dF9wZWUwLCAgICAgICAgICBFWFRQRVJJUEgzLCBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYjgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNsazNfcmVxX3BlZTEsICAgICAgICAgIERFVjMsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzFiYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGM3LCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBHTUlfQUxULCAgICAgMHgzMWMwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwaTUsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMxYzQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBpNywgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgRFRWLCAgICAgICAgIDB4MzFjOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGswLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgU0RNTUMzLCAgICAgR01JLCAgICAgICAgICBTT0MsICAgICAgICAgMHgzMWNjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwazEsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBUUkFDRSwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMxZDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBqMCwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgVVNCLCAgICAgICAgIDB4MzFkNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGoyLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBTT0MsICAgICAgICAgMHgzMWQ4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwazMsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBUUkFDRSwgICAgICBHTUksICAgICAgICAgIENDTEEsICAgICAgICAweDMxZGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBrNCwgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgR01JX0FMVCwgICAgIDB4MzFlMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGsyLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMWU0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwaTMsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAweDMxZTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBpNiwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgU0RNTUMyLCAgICAgIDB4MzFlYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGcwLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMWYwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwZzEsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMxZjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBnMiwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzFmOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGczLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMWZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwZzQsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBUTURTLCAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAweDMyMDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBnNSwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgIDB4MzIwNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGc2LCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgMHgzMjA4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwZzcsICAgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAweDMyMGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBoMCwgICAgICAgICAgICAgICAgICAgIFBXTTAsICAgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgRFRWLCAgICAgICAgIDB4MzIxMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGgxLCAgICAgICAgICAgICAgICAgICAgUFdNMSwgICAgICAgVE1EUywgICAgICAgR01JLCAgICAgICAgICBESVNQTEFZQSwgICAgMHgzMjE0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwaDIsICAgICAgICAgICAgICAgICAgICBQV00yLCAgICAgICBUTURTLCAgICAgICBHTUksICAgICAgICAgIENMRFZGUywgICAgICAweDMyMTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBoMywgICAgICAgICAgICAgICAgICAgIFBXTTMsICAgICAgIFNQSTQsICAgICAgIEdNSSwgICAgICAgICAgQ0xEVkZTLCAgICAgIDB4MzIxYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGg0LCAgICAgICAgICAgICAgICAgICAgU0RNTUMyLCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjIwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwaDUsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyMjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBoNiwgICAgICAgICAgICAgICAgICAgIFNETU1DMiwgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgRFRWLCAgICAgICAgIDB4MzIyOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGg3LCAgICAgICAgICAgICAgICAgICAgU0RNTUMyLCAgICAgVFJBQ0UsICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgMHgzMjJjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwajcsICAgICAgICAgICAgICAgICAgICBVQVJURCwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICAweDMyMzAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBiMCwgICAgICAgICAgICAgICAgICAgIFVBUlRELCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzIzNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGIxLCAgICAgICAgICAgICAgICAgICAgVUFSVEQsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjM4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwazcsICAgICAgICAgICAgICAgICAgICBVQVJURCwgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyM2MsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBpMCwgICAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI0MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGkxLCAgICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjQ0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwaTIsICAgICAgICAgICAgICAgICAgICBTRE1NQzIsICAgICBUUkFDRSwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNDgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBpNCwgICAgICAgICAgICAgICAgICAgIFNQSTQsICAgICAgIFRSQUNFLCAgICAgIEdNSSwgICAgICAgICAgRElTUExBWUEsICAgIDB4MzI0YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ2VuMl9pMmNfc2NsX3B0NSwgICAgICAgSTJDMiwgICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjUwLCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChnZW4yX2kyY19zZGFfcHQ2LCAgICAgICBJMkMyLCAgICAgICBSU1ZEMiwgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNTQsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9jbGtfcGNjNCwgICAgICAgIFNETU1DNCwgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI1OCwgTiwgICBZLCAgTiksCisJUElOR1JPVVAoc2RtbWM0X2NtZF9wdDcsICAgICAgICAgU0RNTUM0LCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjVjLCBOLCAgIFksICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0MF9wYWEwLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNjAsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9kYXQxX3BhYTEsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI2NCwgTiwgICBZLCAgTiksCisJUElOR1JPVVAoc2RtbWM0X2RhdDJfcGFhMiwgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMjY4LCBOLCAgIFksICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0M19wYWEzLCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNmMsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9kYXQ0X3BhYTQsICAgICAgIFNETU1DNCwgICAgIFNQSTMsICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI3MCwgTiwgICBZLCAgTiksCisJUElOR1JPVVAoc2RtbWM0X2RhdDVfcGFhNSwgICAgICAgU0RNTUM0LCAgICAgU1BJMywgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMjc0LCBOLCAgIFksICBOKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0Nl9wYWE2LCAgICAgICBTRE1NQzQsICAgICBTUEkzLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyNzgsIE4sICAgWSwgIE4pLAorCVBJTkdST1VQKHNkbW1jNF9kYXQ3X3BhYTcsICAgICAgIFNETU1DNCwgICAgIFJTVkQyLCAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzI3YywgTiwgICBZLCAgTiksCisJUElOR1JPVVAoY2FtX21jbGtfcGNjMCwgICAgICAgICAgVkksICAgICAgICAgVklfQUxUMSwgICAgVklfQUxUMywgICAgICBTRE1NQzIsICAgICAgMHgzMjg0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwY2MxLCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNETU1DMiwgICAgICAweDMyODgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBiYjAsICAgICAgICAgICAgICAgICAgIFZHUDYsICAgICAgIFZJTUNMSzIsICAgIFNETU1DMiwgICAgICAgVklNQ0xLMl9BTFQsIDB4MzI4YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoY2FtX2kyY19zY2xfcGJiMSwgICAgICAgVkdQMSwgICAgICAgSTJDMywgICAgICAgUlNWRDMsICAgICAgICBTRE1NQzIsICAgICAgMHgzMjkwLCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjYW1faTJjX3NkYV9wYmIyLCAgICAgICBWR1AyLCAgICAgICBJMkMzLCAgICAgICBSU1ZEMywgICAgICAgIFNETU1DMiwgICAgICAweDMyOTQsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKHBiYjMsICAgICAgICAgICAgICAgICAgIFZHUDMsICAgICAgIERJU1BMQVlBLCAgIERJU1BMQVlCLCAgICAgU0RNTUMyLCAgICAgIDB4MzI5OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGJiNCwgICAgICAgICAgICAgICAgICAgVkdQNCwgICAgICAgRElTUExBWUEsICAgRElTUExBWUIsICAgICBTRE1NQzIsICAgICAgMHgzMjljLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwYmI1LCAgICAgICAgICAgICAgICAgICBWR1A1LCAgICAgICBESVNQTEFZQSwgICBSU1ZEMywgICAgICAgIFNETU1DMiwgICAgICAweDMyYTAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBiYjYsICAgICAgICAgICAgICAgICAgIEkyUzQsICAgICAgIFJTVkQyLCAgICAgIERJU1BMQVlCLCAgICAgU0RNTUMyLCAgICAgIDB4MzJhNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGJiNywgICAgICAgICAgICAgICAgICAgSTJTNCwgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBTRE1NQzIsICAgICAgMHgzMmE4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwY2MyLCAgICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICBSU1ZEMiwgICAgICBTRE1NQzMsICAgICAgIFNETU1DMiwgICAgICAweDMyYWMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGp0YWdfcnRjaywgICAgICAgICAgICAgIFJUQ0ssICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzJiMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocHdyX2kyY19zY2xfcHo2LCAgICAgICAgSTJDUFdSLCAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMmI0LCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwd3JfaTJjX3NkYV9wejcsICAgICAgICBJMkNQV1IsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMyYjgsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzBfcHIwLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzJiYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93MV9wcjEsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMmMwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3cyX3ByMiwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMyYzQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzNfcHIzLCAgICAgICAgICAgIEtCQywgICAgICAgIERJU1BMQVlBLCAgIFNZUywgICAgICAgICAgRElTUExBWUIsICAgIDB4MzJjOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93NF9wcjQsICAgICAgICAgICAgS0JDLCAgICAgICAgRElTUExBWUEsICAgUlNWRDMsICAgICAgICBESVNQTEFZQiwgICAgMHgzMmNjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3c1X3ByNSwgICAgICAgICAgICBLQkMsICAgICAgICBESVNQTEFZQSwgICBSU1ZEMywgICAgICAgIERJU1BMQVlCLCAgICAweDMyZDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzZfcHI2LCAgICAgICAgICAgIEtCQywgICAgICAgIERJU1BMQVlBLCAgIERJU1BMQVlBX0FMVCwgRElTUExBWUIsICAgIDB4MzJkNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93N19wcjcsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgQ0xEVkZTLCAgICAgICBVQVJUQSwgICAgICAgMHgzMmQ4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3c4X3BzMCwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBDTERWRlMsICAgICAgIFVBUlRBLCAgICAgICAweDMyZGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzlfcHMxLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgVUFSVEEsICAgICAgIDB4MzJlMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93MTBfcHMyLCAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBVQVJUQSwgICAgICAgMHgzMmU0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3cxMV9wczMsICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIElSREEsICAgICAgICAweDMyZTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzEyX3BzNCwgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgSVJEQSwgICAgICAgIDB4MzJlYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93MTNfcHM1LCAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgU1BJMiwgICAgICAgICBSU1ZENCwgICAgICAgMHgzMmYwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9yb3cxNF9wczYsICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICAweDMyZjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzE1X3BzNywgICAgICAgICAgIEtCQywgICAgICAgIFNPQywgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzJmOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2JfY29sMF9wcTAsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgU1BJMiwgICAgICAgICBSU1ZENCwgICAgICAgMHgzMmZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9jb2wxX3BxMSwgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzMDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX2NvbDJfcHEyLCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNQSTIsICAgICAgICAgUlNWRDQsICAgICAgIDB4MzMwNCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2JfY29sM19wcTMsICAgICAgICAgICAgS0JDLCAgICAgICAgRElTUExBWUEsICAgUFdNMiwgICAgICAgICBVQVJUQSwgICAgICAgMHgzMzA4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9jb2w0X3BxNCwgICAgICAgICAgICBLQkMsICAgICAgICBPV1IsICAgICAgICBTRE1NQzMsICAgICAgIFVBUlRBLCAgICAgICAweDMzMGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX2NvbDVfcHE1LCAgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFNETU1DMywgICAgICAgUlNWRDQsICAgICAgIDB4MzMxMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2JfY29sNl9wcTYsICAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgU1BJMiwgICAgICAgICBVQVJURCwgICAgICAgMHgzMzE0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChrYl9jb2w3X3BxNywgICAgICAgICAgICBLQkMsICAgICAgICBSU1ZEMiwgICAgICBTUEkyLCAgICAgICAgIFVBUlRELCAgICAgICAweDMzMTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGNsa18zMmtfb3V0X3BhMCwgICAgICAgIEJMSU5LLCAgICAgIFNPQywgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzMxYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoY29yZV9wd3JfcmVxLCAgICAgICAgICAgUFdST04sICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzI0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChjcHVfcHdyX3JlcSwgICAgICAgICAgICBDUFUsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzMjgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHB3cl9pbnRfbiwgICAgICAgICAgICAgIFBNSSwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzMyYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoY2xrXzMya19pbiwgICAgICAgICAgICAgQ0xLLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzMzMwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChvd3IsICAgICAgICAgICAgICAgICAgICBPV1IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzMzQsIE4sICAgTiwgIFkpLAorCVBJTkdST1VQKGRhcDFfZnNfcG4wLCAgICAgICAgICAgIEkyUzAsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzMzOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwMV9kaW5fcG4xLCAgICAgICAgICAgSTJTMCwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzNjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAxX2RvdXRfcG4yLCAgICAgICAgICBJMlMwLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFNBVEEsICAgICAgICAweDMzNDAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDFfc2Nsa19wbjMsICAgICAgICAgIEkyUzAsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzM0NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwX21jbGsxX3JlcV9wZWUyLCAgICAgREFQLCAgICAgICAgREFQMSwgICAgICAgU0FUQSwgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzQ4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXBfbWNsazFfcHc0LCAgICAgICAgICBFWFRQRVJJUEgxLCBEQVAyLCAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNGMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNwZGlmX2luX3BrNiwgICAgICAgICAgIFNQRElGLCAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgSTJDMywgICAgICAgIDB4MzM1MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc3BkaWZfb3V0X3BrNSwgICAgICAgICAgU1BESUYsICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBJMkMzLCAgICAgICAgMHgzMzU0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAyX2ZzX3BhMiwgICAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNTgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGRhcDJfZGluX3BhNCwgICAgICAgICAgIEkyUzEsICAgICAgIEhEQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzM1YywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZGFwMl9kb3V0X3BhNSwgICAgICAgICAgSTJTMSwgICAgICAgSERBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzYwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChkYXAyX3NjbGtfcGEzLCAgICAgICAgICBJMlMxLCAgICAgICBIREEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNjQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGR2ZnNfcHdtX3B4MCwgICAgICAgICAgIFNQSTYsICAgICAgIENMRFZGUywgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzM2OCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ3Bpb194MV9hdWRfcHgxLCAgICAgICAgU1BJNiwgICAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzZjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChncGlvX3gzX2F1ZF9weDMsICAgICAgICBTUEk2LCAgICAgICBTUEkxLCAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzNzAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGR2ZnNfY2xrX3B4MiwgICAgICAgICAgIFNQSTYsICAgICAgIENMRFZGUywgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgIDB4MzM3NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ3Bpb194NF9hdWRfcHg0LCAgICAgICAgR01JLCAgICAgICAgU1BJMSwgICAgICAgU1BJMiwgICAgICAgICBEQVAyLCAgICAgICAgMHgzMzc4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChncGlvX3g1X2F1ZF9weDUsICAgICAgICBHTUksICAgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIFJTVkQ0LCAgICAgICAweDMzN2MsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGdwaW9feDZfYXVkX3B4NiwgICAgICAgIFNQSTYsICAgICAgIFNQSTEsICAgICAgIFNQSTIsICAgICAgICAgR01JLCAgICAgICAgIDB4MzM4MCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ3Bpb194N19hdWRfcHg3LCAgICAgICAgUlNWRDEsICAgICAgU1BJMSwgICAgICAgU1BJMiwgICAgICAgICBSU1ZENCwgICAgICAgMHgzMzg0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfY2xrX3BhNiwgICAgICAgICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFNQSTMsICAgICAgICAweDMzOTAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jM19jbWRfcGE3LCAgICAgICAgIFNETU1DMywgICAgIFBXTTMsICAgICAgIFVBUlRBLCAgICAgICAgU1BJMywgICAgICAgIDB4MzM5NCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMzX2RhdDBfcGI3LCAgICAgICAgU0RNTUMzLCAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBTUEkzLCAgICAgICAgMHgzMzk4LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfZGF0MV9wYjYsICAgICAgICBTRE1NQzMsICAgICBQV00yLCAgICAgICBVQVJUQSwgICAgICAgIFNQSTMsICAgICAgICAweDMzOWMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jM19kYXQyX3BiNSwgICAgICAgIFNETU1DMywgICAgIFBXTTEsICAgICAgIERJU1BMQVlBLCAgICAgU1BJMywgICAgICAgIDB4MzNhMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoc2RtbWMzX2RhdDNfcGI0LCAgICAgICAgU0RNTUMzLCAgICAgUFdNMCwgICAgICAgRElTUExBWUIsICAgICBTUEkzLCAgICAgICAgMHgzM2E0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwZXhfbDBfcnN0X25fcGRkMSwgICAgICBQRTAsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzYmMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBleF9sMF9jbGtyZXFfbl9wZGQyLCAgIFBFMCwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzNjMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAocGV4X3dha2Vfbl9wZGQzLCAgICAgICAgUEUsICAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzM2M0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChwZXhfbDFfcnN0X25fcGRkNSwgICAgICBQRTEsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzY2MsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHBleF9sMV9jbGtyZXFfbl9wZGQ2LCAgIFBFMSwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzNkMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoaGRtaV9jZWNfcGVlMywgICAgICAgICAgQ0VDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzM2UwLCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzFfd3Bfbl9wdjMsICAgICAgICBTRE1NQzEsICAgICBDTEsxMiwgICAgICBTUEk0LCAgICAgICAgIFVBUlRBLCAgICAgICAweDMzZTQsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jM19jZF9uX3B2MiwgICAgICAgIFNETU1DMywgICAgIE9XUiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzNlOCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ3Bpb193Ml9hdWRfcHcyLCAgICAgICAgU1BJNiwgICAgICAgUlNWRDIsICAgICAgU1BJMiwgICAgICAgICBJMkMxLCAgICAgICAgMHgzM2VjLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChncGlvX3czX2F1ZF9wdzMsICAgICAgICBTUEk2LCAgICAgICBTUEkxLCAgICAgICBTUEkyLCAgICAgICAgIEkyQzEsICAgICAgICAweDMzZjAsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHVzYl92YnVzX2VuMF9wbjQsICAgICAgIFVTQiwgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzNmNCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAodXNiX3ZidXNfZW4xX3BuNSwgICAgICAgVVNCLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzM2Y4LCBZLCAgIE4sICBOKSwKKwlQSU5HUk9VUChzZG1tYzNfY2xrX2xiX2luX3BlZTUsICBTRE1NQzMsICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDMzZmMsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKHNkbW1jM19jbGtfbGJfb3V0X3BlZTQsIFNETU1DMywgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzQwMCwgTiwgICBOLCAgTiksCisJUElOR1JPVVAoZ21pX2Nsa19sYiwgICAgICAgICAgICAgU0RNTUMyLCAgICAgUlNWRDIsICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgMHgzNDA0LCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUChyZXNldF9vdXRfbiwgICAgICAgICAgICBSU1ZEMSwgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJFU0VUX09VVF9OLCAweDM0MDgsIE4sICAgTiwgIE4pLAorCVBJTkdST1VQKGtiX3JvdzE2X3B0MCwgICAgICAgICAgIEtCQywgICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgVUFSVEMsICAgICAgIDB4MzQwYywgTiwgICBOLCAgTiksCisJUElOR1JPVVAoa2Jfcm93MTdfcHQxLCAgICAgICAgICAgS0JDLCAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBVQVJUQywgICAgICAgMHgzNDEwLCBOLCAgIE4sICBOKSwKKwlQSU5HUk9VUCh1c2JfdmJ1c19lbjJfcGZmMSwgICAgICBVU0IsICAgICAgICBSU1ZEMiwgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAweDM0MTQsIFksICAgTiwgIE4pLAorCVBJTkdST1VQKHBmZjIsICAgICAgICAgICAgICAgICAgIFNBVEEsICAgICAgIFJTVkQyLCAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgIDB4MzQxOCwgWSwgICBOLCAgTiksCisJUElOR1JPVVAoZHBfaHBkX3BmZjAsICAgICAgICAgICAgRFAsICAgICAgICAgUlNWRDIsICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgMHgzNDMwLCBOLCAgIE4sICBOKSwKIAogCS8qIHBnX25hbWUsIHIsIGhzbV9iLCBzY2htaXR0X2IsIGxwbWRfYiwgZHJ2ZG5fYiwgZHJ2ZG5fdywgZHJ2dXBfYiwgZHJ2dXBfdywgc2x3cl9iLCBzbHdyX3csIHNsd2ZfYiwgc2x3Zl93LCBkcnZ0eXBlICovCi0gICAgICAgRFJWX1BJTkdST1VQKGFvMSwgICAgICAgICAweDg2OCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChhbzIsICAgICAgICAgMHg4NmMsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoYXQxLCAgICAgICAgIDB4ODcwLCAgMiwgIDMsICA0LCAgMTIsICA3LCAgMjAsICA3LCAgMjgsICAyLCAgMzAsICAyLCAgWSksCi0gICAgICAgRFJWX1BJTkdST1VQKGF0MiwgICAgICAgICAweDg3NCwgIDIsICAzLCAgNCwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIFkpLAotICAgICAgIERSVl9QSU5HUk9VUChhdDMsICAgICAgICAgMHg4NzgsICAyLCAgMywgIDQsICAxMiwgIDcsICAyMCwgIDcsICAyOCwgIDIsICAzMCwgIDIsICBZKSwKLSAgICAgICBEUlZfUElOR1JPVVAoYXQ0LCAgICAgICAgIDB4ODdjLCAgMiwgIDMsICA0LCAgMTIsICA3LCAgMjAsICA3LCAgMjgsICAyLCAgMzAsICAyLCAgWSksCi0gICAgICAgRFJWX1BJTkdST1VQKGF0NSwgICAgICAgICAweDg4MCwgIDIsICAzLCAgNCwgIDE0LCAgNSwgIDE5LCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChjZGV2MSwgICAgICAgMHg4ODQsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoY2RldjIsICAgICAgIDB4ODg4LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGRhcDEsICAgICAgICAweDg5MCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChkYXAyLCAgICAgICAgMHg4OTQsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoZGFwMywgICAgICAgIDB4ODk4LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGRhcDQsICAgICAgICAweDg5YywgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChkYmcsICAgICAgICAgMHg4YTAsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoc2RpbzMsICAgICAgIDB4OGIwLCAgMiwgIDMsIC0xLCAgMTIsICA3LCAgMjAsICA3LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKHNwaSwgICAgICAgICAweDhiNCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUCh1YWEsICAgICAgICAgMHg4YjgsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAodWFiLCAgICAgICAgIDB4OGJjLCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKHVhcnQyLCAgICAgICAweDhjMCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUCh1YXJ0MywgICAgICAgMHg4YzQsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoc2RpbzEsICAgICAgIDB4OGVjLCAgMiwgIDMsIC0xLCAgMTIsICA3LCAgMjAsICA3LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGRkYywgICAgICAgICAweDhmYywgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChnbWEsICAgICAgICAgMHg5MDAsICAyLCAgMywgIDQsICAxNCwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBZKSwKLSAgICAgICBEUlZfUElOR1JPVVAoZ21lLCAgICAgICAgIDB4OTEwLCAgMiwgIDMsICA0LCAgMTQsICA1LCAgMTksICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGdtZiwgICAgICAgICAweDkxNCwgIDIsICAzLCAgNCwgIDE0LCAgNSwgIDE5LCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChnbWcsICAgICAgICAgMHg5MTgsICAyLCAgMywgIDQsICAxNCwgIDUsICAxOSwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoZ21oLCAgICAgICAgIDB4OTFjLCAgMiwgIDMsICA0LCAgMTQsICA1LCAgMTksICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKG93ciwgICAgICAgICAweDkyMCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUCh1ZGEsICAgICAgICAgMHg5MjQsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoZ3B2LCAgICAgICAgIDB4OTI4LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGRldjMsICAgICAgICAweDkyYywgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChjZWMsICAgICAgICAgMHg5MzgsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoYXQ2LCAgICAgICAgIDB4OTk0LCAgMiwgIDMsICA0LCAgMTIsICA3LCAgMjAsICA3LCAgMjgsICAyLCAgMzAsICAyLCAgWSksCi0gICAgICAgRFJWX1BJTkdST1VQKGRhcDUsICAgICAgICAweDk5OCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUCh1c2JfdmJ1c19lbiwgMHg5OWMsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoYW8zLCAgICAgICAgIDB4OWE4LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgLTEsIC0xLCAgMjgsICAyLCAgLTEsIC0xLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGFvMCwgICAgICAgICAweDliMCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAotICAgICAgIERSVl9QSU5HUk9VUChodjAsICAgICAgICAgMHg5YjQsICAyLCAgMywgIDQsICAxMiwgIDUsICAtMSwgLTEsICAyOCwgIDIsICAtMSwgLTEsICBOKSwKLSAgICAgICBEUlZfUElOR1JPVVAoc2RpbzQsICAgICAgIDB4OWM0LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCi0gICAgICAgRFJWX1BJTkdST1VQKGFvNCwgICAgICAgICAweDljOCwgIDIsICAzLCAgNCwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIFkpLAorCURSVl9QSU5HUk9VUChhbzEsICAgICAgICAgMHg4NjgsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoYW8yLCAgICAgICAgIDB4ODZjLCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGF0MSwgICAgICAgICAweDg3MCwgIDIsICAzLCAgNCwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIFkpLAorCURSVl9QSU5HUk9VUChhdDIsICAgICAgICAgMHg4NzQsICAyLCAgMywgIDQsICAxMiwgIDcsICAyMCwgIDcsICAyOCwgIDIsICAzMCwgIDIsICBZKSwKKwlEUlZfUElOR1JPVVAoYXQzLCAgICAgICAgIDB4ODc4LCAgMiwgIDMsICA0LCAgMTIsICA3LCAgMjAsICA3LCAgMjgsICAyLCAgMzAsICAyLCAgWSksCisJRFJWX1BJTkdST1VQKGF0NCwgICAgICAgICAweDg3YywgIDIsICAzLCAgNCwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIFkpLAorCURSVl9QSU5HUk9VUChhdDUsICAgICAgICAgMHg4ODAsICAyLCAgMywgIDQsICAxNCwgIDUsICAxOSwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoY2RldjEsICAgICAgIDB4ODg0LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGNkZXYyLCAgICAgICAweDg4OCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChkYXAxLCAgICAgICAgMHg4OTAsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoZGFwMiwgICAgICAgIDB4ODk0LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGRhcDMsICAgICAgICAweDg5OCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChkYXA0LCAgICAgICAgMHg4OWMsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoZGJnLCAgICAgICAgIDB4OGEwLCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKHNkaW8zLCAgICAgICAweDhiMCwgIDIsICAzLCAtMSwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChzcGksICAgICAgICAgMHg4YjQsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAodWFhLCAgICAgICAgIDB4OGI4LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKHVhYiwgICAgICAgICAweDhiYywgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUCh1YXJ0MiwgICAgICAgMHg4YzAsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAodWFydDMsICAgICAgIDB4OGM0LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKHNkaW8xLCAgICAgICAweDhlYywgIDIsICAzLCAtMSwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChkZGMsICAgICAgICAgMHg4ZmMsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoZ21hLCAgICAgICAgIDB4OTAwLCAgMiwgIDMsICA0LCAgMTQsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgWSksCisJRFJWX1BJTkdST1VQKGdtZSwgICAgICAgICAweDkxMCwgIDIsICAzLCAgNCwgIDE0LCAgNSwgIDE5LCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChnbWYsICAgICAgICAgMHg5MTQsICAyLCAgMywgIDQsICAxNCwgIDUsICAxOSwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoZ21nLCAgICAgICAgIDB4OTE4LCAgMiwgIDMsICA0LCAgMTQsICA1LCAgMTksICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGdtaCwgICAgICAgICAweDkxYywgIDIsICAzLCAgNCwgIDE0LCAgNSwgIDE5LCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChvd3IsICAgICAgICAgMHg5MjAsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAodWRhLCAgICAgICAgIDB4OTI0LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGdwdiwgICAgICAgICAweDkyOCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChkZXYzLCAgICAgICAgMHg5MmMsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoY2VjLCAgICAgICAgIDB4OTM4LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGF0NiwgICAgICAgICAweDk5NCwgIDIsICAzLCAgNCwgIDEyLCAgNywgIDIwLCAgNywgIDI4LCAgMiwgIDMwLCAgMiwgIFkpLAorCURSVl9QSU5HUk9VUChkYXA1LCAgICAgICAgMHg5OTgsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAodXNiX3ZidXNfZW4sIDB4OTljLCAgMiwgIDMsICA0LCAgMTIsICA1LCAgMjAsICA1LCAgMjgsICAyLCAgMzAsICAyLCAgTiksCisJRFJWX1BJTkdST1VQKGFvMywgICAgICAgICAweDlhOCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIC0xLCAtMSwgIDI4LCAgMiwgIC0xLCAtMSwgIE4pLAorCURSVl9QSU5HUk9VUChhbzAsICAgICAgICAgMHg5YjAsICAyLCAgMywgIDQsICAxMiwgIDUsICAyMCwgIDUsICAyOCwgIDIsICAzMCwgIDIsICBOKSwKKwlEUlZfUElOR1JPVVAoaHYwLCAgICAgICAgIDB4OWI0LCAgMiwgIDMsICA0LCAgMTIsICA1LCAgLTEsIC0xLCAgMjgsICAyLCAgLTEsIC0xLCAgTiksCisJRFJWX1BJTkdST1VQKHNkaW80LCAgICAgICAweDljNCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiwgIE4pLAorCURSVl9QSU5HUk9VUChhbzQsICAgICAgICAgMHg5YzgsICAyLCAgMywgIDQsICAxMiwgIDcsICAyMCwgIDcsICAyOCwgIDIsICAzMCwgIDIsICBZKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfcGluY3RybF9zb2NfZGF0YSB0ZWdyYTEyNF9waW5jdHJsID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmEyMC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmEyMC5jCmluZGV4IGUwYjUwNDAuLjc1NjNlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhMjAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYTIwLmMKQEAgLTE5NzMsNyArMTk3Myw3IEBACiAjZGVmaW5lIFBJTkdST1VQX1JFR19BCQkweDg2OAogCiAvKiBQaW4gZ3JvdXAgd2l0aCBtdXggY29udHJvbCwgYW5kIHR5cGljYWxseSB0cmktc3RhdGUgYW5kIHB1bGwtdXAvZG93biB0b28gKi8KLSNkZWZpbmUgTVVYX1BHKHBnX25hbWUsIGYwLCBmMSwgZjIsIGYzLCBmX3NhZmUsCQkJXAorI2RlZmluZSBNVVhfUEcocGdfbmFtZSwgZjAsIGYxLCBmMiwgZjMsCQkJCVwKIAkgICAgICAgdHJpX3IsIHRyaV9iLCBtdXhfciwgbXV4X2IsIHB1cGRfciwgcHVwZF9iKQlcCiAJewkJCQkJCQlcCiAJCS5uYW1lID0gI3BnX25hbWUsCQkJCVwKQEAgLTE5ODUsNyArMTk4NSw2IEBACiAJCQlURUdSQV9NVVhfICMjIGYyLAkJCVwKIAkJCVRFR1JBX01VWF8gIyMgZjMsCQkJXAogCQl9LAkJCQkJCVwKLQkJLmZ1bmNfc2FmZSA9IFRFR1JBX01VWF8gIyMgZl9zYWZlLAkJXAogCQkubXV4X3JlZyA9ICgobXV4X3IpIC0gUElOX01VWF9DVExfUkVHX0EpLAlcCiAJCS5tdXhfYmFuayA9IDEsCQkJCQlcCiAJCS5tdXhfYml0ID0gbXV4X2IsCQkJCVwKQEAgLTE5OTUsMTMgKzE5OTQsMTIgQEAKIAkJLnRyaV9yZWcgPSAoKHRyaV9yKSAtIFRSSVNUQVRFX1JFR19BKSwJCVwKIAkJLnRyaV9iYW5rID0gMCwJCQkJCVwKIAkJLnRyaV9iaXQgPSB0cmlfYiwJCQkJXAotCQkuZWlucHV0X3JlZyA9IC0xLAkJCQlcCi0JCS5vZHJhaW5fcmVnID0gLTEsCQkJCVwKLQkJLmxvY2tfcmVnID0gLTEsCQkJCQlcCi0JCS5pb3Jlc2V0X3JlZyA9IC0xLAkJCQlcCi0JCS5yY3Zfc2VsX3JlZyA9IC0xLAkJCQlcCisJCS5laW5wdXRfYml0ID0gLTEsCQkJCVwKKwkJLm9kcmFpbl9iaXQgPSAtMSwJCQkJXAorCQkubG9ja19iaXQgPSAtMSwJCQkJCVwKKwkJLmlvcmVzZXRfYml0ID0gLTEsCQkJCVwKKwkJLnJjdl9zZWxfYml0ID0gLTEsCQkJCVwKIAkJLmRydl9yZWcgPSAtMSwJCQkJCVwKLQkJLmRydnR5cGVfcmVnID0gLTEsCQkJCVwKIAl9CiAKIC8qIFBpbiBncm91cHMgd2l0aCBvbmx5IHB1bGwgdXAgYW5kIHB1bGwgZG93biBjb250cm9sICovCkBAIC0yMDE0LDE0ICsyMDEyLDcgQEAKIAkJLnB1cGRfcmVnID0gKChwdXBkX3IpIC0gUFVMTFVQRE9XTl9SRUdfQSksCVwKIAkJLnB1cGRfYmFuayA9IDIsCQkJCQlcCiAJCS5wdXBkX2JpdCA9IHB1cGRfYiwJCQkJXAotCQkudHJpX3JlZyA9IC0xLAkJCQkJXAotCQkuZWlucHV0X3JlZyA9IC0xLAkJCQlcCi0JCS5vZHJhaW5fcmVnID0gLTEsCQkJCVwKLQkJLmxvY2tfcmVnID0gLTEsCQkJCQlcCi0JCS5pb3Jlc2V0X3JlZyA9IC0xLAkJCQlcCi0JCS5yY3Zfc2VsX3JlZyA9IC0xLAkJCQlcCiAJCS5kcnZfcmVnID0gLTEsCQkJCQlcCi0JCS5kcnZ0eXBlX3JlZyA9IC0xLAkJCQlcCiAJfQogCiAvKiBQaW4gZ3JvdXBzIGZvciBkcml2ZSBzdHJlbmd0aCByZWdpc3RlcnMgKGNvbmZpZ3VyYWJsZSB2ZXJzaW9uKSAqLwpAQCAtMjAzNSwxMSArMjAyNiw2IEBACiAJCS5tdXhfcmVnID0gLTEsCQkJCQlcCiAJCS5wdXBkX3JlZyA9IC0xLAkJCQkJXAogCQkudHJpX3JlZyA9IC0xLAkJCQkJXAotCQkuZWlucHV0X3JlZyA9IC0xLAkJCQlcCi0JCS5vZHJhaW5fcmVnID0gLTEsCQkJCVwKLQkJLmxvY2tfcmVnID0gLTEsCQkJCQlcCi0JCS5pb3Jlc2V0X3JlZyA9IC0xLAkJCQlcCi0JCS5yY3Zfc2VsX3JlZyA9IC0xLAkJCQlcCiAJCS5kcnZfcmVnID0gKChyKSAtIFBJTkdST1VQX1JFR19BKSwJCVwKIAkJLmRydl9iYW5rID0gMywJCQkJCVwKIAkJLmhzbV9iaXQgPSBoc21fYiwJCQkJXApAQCAtMjA1Myw3ICsyMDM5LDcgQEAKIAkJLnNsd3Jfd2lkdGggPSBzbHdyX3csCQkJCVwKIAkJLnNsd2ZfYml0ID0gc2x3Zl9iLAkJCQlcCiAJCS5zbHdmX3dpZHRoID0gc2x3Zl93LAkJCQlcCi0JCS5kcnZ0eXBlX3JlZyA9IC0xLAkJCQlcCisJCS5kcnZ0eXBlX2JpdCA9IC0xLAkJCQlcCiAJfQogCiAvKiBQaW4gZ3JvdXBzIGZvciBkcml2ZSBzdHJlbmd0aCByZWdpc3RlcnMgKHNpbXBsZSB2ZXJzaW9uKSAqLwpAQCAtMjA2MSwxMTQgKzIwNDcsMTE0IEBACiAJRFJWX1BHX0VYVChwZ19uYW1lLCByLCAyLCAgMywgIDQsIDEyLCAyMCwgMjgsIDIsIDMwLCAyKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3Bpbmdyb3VwIHRlZ3JhMjBfZ3JvdXBzW10gPSB7Ci0JLyogICAgIG5hbWUsICAgZjAsICAgICAgICBmMSwgICAgICAgIGYyLCAgICAgICAgZjMsICAgICAgICAgICAgZl9zYWZlLCAgICB0cmkgci9iLCAgbXV4IHIvYiwgIHB1cGQgci9iICovCi0JTVVYX1BHKGF0YSwgICAgSURFLCAgICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgUlNWRDQsICAgICAgICAgSURFLCAgICAgICAweDE0LCAwLCAgMHg4MCwgMjQsIDB4YTAsIDApLAotCU1VWF9QRyhhdGIsICAgIElERSwgICAgICAgTkFORCwgICAgICBHTUksICAgICAgIFNESU80LCAgICAgICAgIElERSwgICAgICAgMHgxNCwgMSwgIDB4ODAsIDE2LCAweGEwLCAyKSwKLQlNVVhfUEcoYXRjLCAgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBTRElPNCwgICAgICAgICBJREUsICAgICAgIDB4MTQsIDIsICAweDgwLCAyMiwgMHhhMCwgNCksCi0JTVVYX1BHKGF0ZCwgICAgSURFLCAgICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgU0RJTzQsICAgICAgICAgSURFLCAgICAgICAweDE0LCAzLCAgMHg4MCwgMjAsIDB4YTAsIDYpLAotCU1VWF9QRyhhdGUsICAgIElERSwgICAgICAgTkFORCwgICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIElERSwgICAgICAgMHgxOCwgMjUsIDB4ODAsIDEyLCAweGEwLCA4KSwKLQlNVVhfUEcoY2RldjEsICBPU0MsICAgICAgIFBMTEFfT1VULCAgUExMTV9PVVQxLCBBVURJT19TWU5DLCAgICBPU0MsICAgICAgIDB4MTQsIDQsICAweDg4LCAyLCAgMHhhOCwgMCksCi0JTVVYX1BHKGNkZXYyLCAgT1NDLCAgICAgICBBSEJfQ0xLLCAgIEFQQl9DTEssICAgUExMUF9PVVQ0LCAgICAgT1NDLCAgICAgICAweDE0LCA1LCAgMHg4OCwgNCwgIDB4YTgsIDIpLAotCU1VWF9QRyhjcnRwLCAgIENSVCwgICAgICAgUlNWRDIsICAgICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQyLCAgICAgMHgyMCwgMTQsIDB4OTgsIDIwLCAweGE0LCAyNCksCi0JTVVYX1BHKGNzdXMsICAgUExMQ19PVVQxLCBQTExQX09VVDIsIFBMTFBfT1VUMywgVklfU0VOU09SX0NMSywgUExMQ19PVVQxLCAweDE0LCA2LCAgMHg4OCwgNiwgIDB4YWMsIDI0KSwKLQlNVVhfUEcoZGFwMSwgICBEQVAxLCAgICAgIFJTVkQyLCAgICAgR01JLCAgICAgICBTRElPMiwgICAgICAgICBEQVAxLCAgICAgIDB4MTQsIDcsICAweDg4LCAyMCwgMHhhMCwgMTApLAotCU1VWF9QRyhkYXAyLCAgIERBUDIsICAgICAgVFdDLCAgICAgICBSU1ZEMywgICAgIEdNSSwgICAgICAgICAgIERBUDIsICAgICAgMHgxNCwgOCwgIDB4ODgsIDIyLCAweGEwLCAxMiksCi0JTVVYX1BHKGRhcDMsICAgREFQMywgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgREFQMywgICAgICAweDE0LCA5LCAgMHg4OCwgMjQsIDB4YTAsIDE0KSwKLQlNVVhfUEcoZGFwNCwgICBEQVA0LCAgICAgIFJTVkQyLCAgICAgR01JLCAgICAgICBSU1ZENCwgICAgICAgICBEQVA0LCAgICAgIDB4MTQsIDEwLCAweDg4LCAyNiwgMHhhMCwgMTYpLAotCU1VWF9QRyhkZGMsICAgIEkyQzIsICAgICAgUlNWRDIsICAgICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxOCwgMzEsIDB4ODgsIDAsICAweGIwLCAyOCksCi0JTVVYX1BHKGR0YSwgICAgUlNWRDEsICAgICBTRElPMiwgICAgIFZJLCAgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDE0LCAxMSwgMHg4NCwgMjAsIDB4YTAsIDE4KSwKLQlNVVhfUEcoZHRiLCAgICBSU1ZEMSwgICAgIFJTVkQyLCAgICAgVkksICAgICAgICBTUEkxLCAgICAgICAgICBSU1ZEMSwgICAgIDB4MTQsIDEyLCAweDg0LCAyMiwgMHhhMCwgMjApLAotCU1VWF9QRyhkdGMsICAgIFJTVkQxLCAgICAgUlNWRDIsICAgICBWSSwgICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQxLCAgICAgMHgxNCwgMTMsIDB4ODQsIDI2LCAweGEwLCAyMiksCi0JTVVYX1BHKGR0ZCwgICAgUlNWRDEsICAgICBTRElPMiwgICAgIFZJLCAgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDEsICAgICAweDE0LCAxNCwgMHg4NCwgMjgsIDB4YTAsIDI0KSwKLQlNVVhfUEcoZHRlLCAgICBSU1ZEMSwgICAgIFJTVkQyLCAgICAgVkksICAgICAgICBTUEkxLCAgICAgICAgICBSU1ZEMSwgICAgIDB4MTQsIDE1LCAweDg0LCAzMCwgMHhhMCwgMjYpLAotCU1VWF9QRyhkdGYsICAgIEkyQzMsICAgICAgUlNWRDIsICAgICBWSSwgICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgyMCwgMTIsIDB4OTgsIDMwLCAweGEwLCAyOCksCi0JTVVYX1BHKGdtYSwgICAgVUFSVEUsICAgICBTUEkzLCAgICAgIEdNSSwgICAgICAgU0RJTzQsICAgICAgICAgU1BJMywgICAgICAweDE0LCAyOCwgMHg4NCwgMCwgIDB4YjAsIDIwKSwKLQlNVVhfUEcoZ21iLCAgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBHTUlfSU5ULCAgICAgICBHTUksICAgICAgIDB4MTgsIDI5LCAweDg4LCAyOCwgMHhiMCwgMjIpLAotCU1VWF9QRyhnbWMsICAgIFVBUlRELCAgICAgU1BJNCwgICAgICBHTUksICAgICAgIFNGTEFTSCwgICAgICAgIFNQSTQsICAgICAgMHgxNCwgMjksIDB4ODQsIDIsICAweGIwLCAyNCksCi0JTVVYX1BHKGdtZCwgICAgUlNWRDEsICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgU0ZMQVNILCAgICAgICAgR01JLCAgICAgICAweDE4LCAzMCwgMHg4OCwgMzAsIDB4YjAsIDI2KSwKLQlNVVhfUEcoZ21lLCAgICBSU1ZEMSwgICAgIERBUDUsICAgICAgR01JLCAgICAgICBTRElPNCwgICAgICAgICBHTUksICAgICAgIDB4MTgsIDAsICAweDhjLCAwLCAgMHhhOCwgMjQpLAotCU1VWF9QRyhncHUsICAgIFBXTSwgICAgICAgVUFSVEEsICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxNCwgMTYsIDB4OGMsIDQsICAweGE0LCAyMCksCi0JTVVYX1BHKGdwdTcsICAgUlRDSywgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgUlRDSywgICAgICAweDIwLCAxMSwgMHg5OCwgMjgsIDB4YTQsIDYpLAotCU1VWF9QRyhncHYsICAgIFBDSUUsICAgICAgUlNWRDIsICAgICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIFBDSUUsICAgICAgMHgxNCwgMTcsIDB4OGMsIDIsICAweGEwLCAzMCksCi0JTVVYX1BHKGhkaW50LCAgSERNSSwgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgSERNSSwgICAgICAweDFjLCAyMywgMHg4NCwgNCwgIC0xLCAgIC0xKSwKLQlNVVhfUEcoaTJjcCwgICBJMkNQLCAgICAgIFJTVkQyLCAgICAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MTQsIDE4LCAweDg4LCA4LCAgMHhhNCwgMiksCi0JTVVYX1BHKGlycngsICAgVUFSVEEsICAgICBVQVJUQiwgICAgIEdNSSwgICAgICAgU1BJNCwgICAgICAgICAgVUFSVEIsICAgICAweDE0LCAyMCwgMHg4OCwgMTgsIDB4YTgsIDIyKSwKLQlNVVhfUEcoaXJ0eCwgICBVQVJUQSwgICAgIFVBUlRCLCAgICAgR01JLCAgICAgICBTUEk0LCAgICAgICAgICBVQVJUQiwgICAgIDB4MTQsIDE5LCAweDg4LCAxNiwgMHhhOCwgMjApLAotCU1VWF9QRyhrYmNhLCAgIEtCQywgICAgICAgTkFORCwgICAgICBTRElPMiwgICAgIEVNQ19URVNUMF9ETEwsIEtCQywgICAgICAgMHgxNCwgMjIsIDB4ODgsIDEwLCAweGE0LCA4KSwKLQlNVVhfUEcoa2JjYiwgICBLQkMsICAgICAgIE5BTkQsICAgICAgU0RJTzIsICAgICBNSU8sICAgICAgICAgICBLQkMsICAgICAgIDB4MTQsIDIxLCAweDg4LCAxMiwgMHhhNCwgMTApLAotCU1VWF9QRyhrYmNjLCAgIEtCQywgICAgICAgTkFORCwgICAgICBUUkFDRSwgICAgIEVNQ19URVNUMV9ETEwsIEtCQywgICAgICAgMHgxOCwgMjYsIDB4ODgsIDE0LCAweGE0LCAxMiksCi0JTVVYX1BHKGtiY2QsICAgS0JDLCAgICAgICBOQU5ELCAgICAgIFNESU8yLCAgICAgTUlPLCAgICAgICAgICAgS0JDLCAgICAgICAweDIwLCAxMCwgMHg5OCwgMjYsIDB4YTQsIDE0KSwKLQlNVVhfUEcoa2JjZSwgICBLQkMsICAgICAgIE5BTkQsICAgICAgT1dSLCAgICAgICBSU1ZENCwgICAgICAgICBLQkMsICAgICAgIDB4MTQsIDI2LCAweDgwLCAyOCwgMHhiMCwgMiksCi0JTVVYX1BHKGtiY2YsICAgS0JDLCAgICAgICBOQU5ELCAgICAgIFRSQUNFLCAgICAgTUlPLCAgICAgICAgICAgS0JDLCAgICAgICAweDE0LCAyNywgMHg4MCwgMjYsIDB4YjAsIDApLAotCU1VWF9QRyhsY3NuLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMzEsIDB4OTAsIDEyLCAtMSwgICAtMSksCi0JTVVYX1BHKGxkMCwgICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAwLCAgMHg5NCwgMCwgIC0xLCAgIC0xKSwKLQlNVVhfUEcobGQxLCAgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDEsICAweDk0LCAyLCAgLTEsICAgLTEpLAotCU1VWF9QRyhsZDIsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMiwgIDB4OTQsIDQsICAtMSwgICAtMSksCi0JTVVYX1BHKGxkMywgICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAzLCAgMHg5NCwgNiwgIC0xLCAgIC0xKSwKLQlNVVhfUEcobGQ0LCAgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDQsICAweDk0LCA4LCAgLTEsICAgLTEpLAotCU1VWF9QRyhsZDUsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgNSwgIDB4OTQsIDEwLCAtMSwgICAtMSksCi0JTVVYX1BHKGxkNiwgICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCA2LCAgMHg5NCwgMTIsIC0xLCAgIC0xKSwKLQlNVVhfUEcobGQ3LCAgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDcsICAweDk0LCAxNCwgLTEsICAgLTEpLAotCU1VWF9QRyhsZDgsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgOCwgIDB4OTQsIDE2LCAtMSwgICAtMSksCi0JTVVYX1BHKGxkOSwgICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCA5LCAgMHg5NCwgMTgsIC0xLCAgIC0xKSwKLQlNVVhfUEcobGQxMCwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDEwLCAweDk0LCAyMCwgLTEsICAgLTEpLAotCU1VWF9QRyhsZDExLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMTEsIDB4OTQsIDIyLCAtMSwgICAtMSksCi0JTVVYX1BHKGxkMTIsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAxMiwgMHg5NCwgMjQsIC0xLCAgIC0xKSwKLQlNVVhfUEcobGQxMywgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDEzLCAweDk0LCAyNiwgLTEsICAgLTEpLAotCU1VWF9QRyhsZDE0LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMTQsIDB4OTQsIDI4LCAtMSwgICAtMSksCi0JTVVYX1BHKGxkMTUsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAxNSwgMHg5NCwgMzAsIC0xLCAgIC0xKSwKLQlNVVhfUEcobGQxNiwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDE2LCAweDk4LCAwLCAgLTEsICAgLTEpLAotCU1VWF9QRyhsZDE3LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMTcsIDB4OTgsIDIsICAtMSwgICAtMSksCi0JTVVYX1BHKGxkYywgICAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAzMCwgMHg5MCwgMTQsIC0xLCAgIC0xKSwKLQlNVVhfUEcobGRpLCAgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MjAsIDYsICAweDk4LCAxNiwgLTEsICAgLTEpLAotCU1VWF9QRyhsaHAwLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMTgsIDB4OTgsIDEwLCAtMSwgICAtMSksCi0JTVVYX1BHKGxocDEsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAxOSwgMHg5OCwgNCwgIC0xLCAgIC0xKSwKLQlNVVhfUEcobGhwMiwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDIwLCAweDk4LCA2LCAgLTEsICAgLTEpLAotCU1VWF9QRyhsaHMsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgyMCwgNywgIDB4OTAsIDIyLCAtMSwgICAtMSksCi0JTVVYX1BHKGxtMCwgICAgRElTUExBWUEsICBESVNQTEFZQiwgIFNQSTMsICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAyNCwgMHg5MCwgMjYsIC0xLCAgIC0xKSwKLQlNVVhfUEcobG0xLCAgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRDMsICAgICBDUlQsICAgICAgICAgICBSU1ZEMywgICAgIDB4MWMsIDI1LCAweDkwLCAyOCwgLTEsICAgLTEpLAotCU1VWF9QRyhscHAsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgyMCwgOCwgIDB4OTgsIDE0LCAtMSwgICAtMSksCi0JTVVYX1BHKGxwdzAsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFNQSTMsICAgICAgSERNSSwgICAgICAgICAgRElTUExBWUEsICAweDIwLCAzLCAgMHg5MCwgMCwgIC0xLCAgIC0xKSwKLQlNVVhfUEcobHB3MSwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MjAsIDQsICAweDkwLCAyLCAgLTEsICAgLTEpLAotCU1VWF9QRyhscHcyLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIERJU1BMQVlBLCAgMHgyMCwgNSwgIDB4OTAsIDQsICAtMSwgICAtMSksCi0JTVVYX1BHKGxzYzAsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAyNywgMHg5MCwgMTgsIC0xLCAgIC0xKSwKLQlNVVhfUEcobHNjMSwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgU1BJMywgICAgICBIRE1JLCAgICAgICAgICBESVNQTEFZQSwgIDB4MWMsIDI4LCAweDkwLCAyMCwgLTEsICAgLTEpLAotCU1VWF9QRyhsc2NrLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIERJU1BMQVlBLCAgMHgxYywgMjksIDB4OTAsIDE2LCAtMSwgICAtMSksCi0JTVVYX1BHKGxzZGEsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFNQSTMsICAgICAgSERNSSwgICAgICAgICAgRElTUExBWUEsICAweDIwLCAxLCAgMHg5MCwgOCwgIC0xLCAgIC0xKSwKLQlNVVhfUEcobHNkaSwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgU1BJMywgICAgICBSU1ZENCwgICAgICAgICBESVNQTEFZQSwgIDB4MjAsIDIsICAweDkwLCA2LCAgLTEsICAgLTEpLAotCU1VWF9QRyhsc3BpLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIEhETUksICAgICAgICAgIERJU1BMQVlBLCAgMHgyMCwgMCwgIDB4OTAsIDEwLCAtMSwgICAtMSksCi0JTVVYX1BHKGx2cDAsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDFjLCAyMSwgMHg5MCwgMzAsIC0xLCAgIC0xKSwKLQlNVVhfUEcobHZwMSwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MWMsIDIyLCAweDk4LCA4LCAgLTEsICAgLTEpLAotCU1VWF9QRyhsdnMsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxYywgMjYsIDB4OTAsIDI0LCAtMSwgICAtMSksCi0JTVVYX1BHKG93YywgICAgT1dSLCAgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgT1dSLCAgICAgICAweDE0LCAzMSwgMHg4NCwgOCwgIDB4YjAsIDMwKSwKLQlNVVhfUEcocG1jLCAgICBQV1JfT04sICAgIFBXUl9JTlRSLCAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBQV1JfT04sICAgIDB4MTQsIDIzLCAweDk4LCAxOCwgLTEsICAgLTEpLAotCU1VWF9QRyhwdGEsICAgIEkyQzIsICAgICAgSERNSSwgICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxNCwgMjQsIDB4OTgsIDIyLCAweGE0LCA0KSwKLQlNVVhfUEcocm0sICAgICBJMkMxLCAgICAgIFJTVkQyLCAgICAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MTQsIDI1LCAweDgwLCAxNCwgMHhhNCwgMCksCi0JTVVYX1BHKHNkYiwgICAgVUFSVEEsICAgICBQV00sICAgICAgIFNESU8zLCAgICAgU1BJMiwgICAgICAgICAgUFdNLCAgICAgICAweDIwLCAxNSwgMHg4YywgMTAsIC0xLCAgIC0xKSwKLQlNVVhfUEcoc2RjLCAgICBQV00sICAgICAgIFRXQywgICAgICAgU0RJTzMsICAgICBTUEkzLCAgICAgICAgICBUV0MsICAgICAgIDB4MTgsIDEsICAweDhjLCAxMiwgMHhhYywgMjgpLAotCU1VWF9QRyhzZGQsICAgIFVBUlRBLCAgICAgUFdNLCAgICAgICBTRElPMywgICAgIFNQSTMsICAgICAgICAgIFBXTSwgICAgICAgMHgxOCwgMiwgIDB4OGMsIDE0LCAweGFjLCAzMCksCi0JTVVYX1BHKHNkaW8xLCAgU0RJTzEsICAgICBSU1ZEMiwgICAgIFVBUlRFLCAgICAgVUFSVEEsICAgICAgICAgUlNWRDIsICAgICAweDE0LCAzMCwgMHg4MCwgMzAsIDB4YjAsIDE4KSwKLQlNVVhfUEcoc2x4YSwgICBQQ0lFLCAgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICBQQ0lFLCAgICAgIDB4MTgsIDMsICAweDg0LCA2LCAgMHhhNCwgMjIpLAotCU1VWF9QRyhzbHhjLCAgIFNQRElGLCAgICAgU1BJNCwgICAgICBTRElPMywgICAgIFNQSTIsICAgICAgICAgIFNQSTQsICAgICAgMHgxOCwgNSwgIDB4ODQsIDEwLCAweGE0LCAyNiksCi0JTVVYX1BHKHNseGQsICAgU1BESUYsICAgICBTUEk0LCAgICAgIFNESU8zLCAgICAgU1BJMiwgICAgICAgICAgU1BJNCwgICAgICAweDE4LCA2LCAgMHg4NCwgMTIsIDB4YTQsIDI4KSwKLQlNVVhfUEcoc2x4aywgICBQQ0lFLCAgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICBQQ0lFLCAgICAgIDB4MTgsIDcsICAweDg0LCAxNCwgMHhhNCwgMzApLAotCU1VWF9QRyhzcGRpLCAgIFNQRElGLCAgICAgUlNWRDIsICAgICBJMkMxLCAgICAgIFNESU8yLCAgICAgICAgIFJTVkQyLCAgICAgMHgxOCwgOCwgIDB4OGMsIDgsICAweGE0LCAxNiksCi0JTVVYX1BHKHNwZG8sICAgU1BESUYsICAgICBSU1ZEMiwgICAgIEkyQzEsICAgICAgU0RJTzIsICAgICAgICAgUlNWRDIsICAgICAweDE4LCA5LCAgMHg4YywgNiwgIDB4YTQsIDE4KSwKLQlNVVhfUEcoc3BpYSwgICBTUEkxLCAgICAgIFNQSTIsICAgICAgU1BJMywgICAgICBHTUksICAgICAgICAgICBHTUksICAgICAgIDB4MTgsIDEwLCAweDhjLCAzMCwgMHhhOCwgNCksCi0JTVVYX1BHKHNwaWIsICAgU1BJMSwgICAgICBTUEkyLCAgICAgIFNQSTMsICAgICAgR01JLCAgICAgICAgICAgR01JLCAgICAgICAweDE4LCAxMSwgMHg4YywgMjgsIDB4YTgsIDYpLAotCU1VWF9QRyhzcGljLCAgIFNQSTEsICAgICAgU1BJMiwgICAgICBTUEkzLCAgICAgIEdNSSwgICAgICAgICAgIEdNSSwgICAgICAgMHgxOCwgMTIsIDB4OGMsIDI2LCAweGE4LCA4KSwKLQlNVVhfUEcoc3BpZCwgICBTUEkyLCAgICAgIFNQSTEsICAgICAgU1BJMl9BTFQsICBHTUksICAgICAgICAgICBHTUksICAgICAgIDB4MTgsIDEzLCAweDhjLCAyNCwgMHhhOCwgMTApLAotCU1VWF9QRyhzcGllLCAgIFNQSTIsICAgICAgU1BJMSwgICAgICBTUEkyX0FMVCwgIEdNSSwgICAgICAgICAgIEdNSSwgICAgICAgMHgxOCwgMTQsIDB4OGMsIDIyLCAweGE4LCAxMiksCi0JTVVYX1BHKHNwaWYsICAgU1BJMywgICAgICBTUEkxLCAgICAgIFNQSTIsICAgICAgUlNWRDQsICAgICAgICAgUlNWRDQsICAgICAweDE4LCAxNSwgMHg4YywgMjAsIDB4YTgsIDE0KSwKLQlNVVhfUEcoc3BpZywgICBTUEkzLCAgICAgIFNQSTIsICAgICAgU1BJMl9BTFQsICBJMkMxLCAgICAgICAgICBTUEkyX0FMVCwgIDB4MTgsIDE2LCAweDhjLCAxOCwgMHhhOCwgMTYpLAotCU1VWF9QRyhzcGloLCAgIFNQSTMsICAgICAgU1BJMiwgICAgICBTUEkyX0FMVCwgIEkyQzEsICAgICAgICAgIFNQSTJfQUxULCAgMHgxOCwgMTcsIDB4OGMsIDE2LCAweGE4LCAxOCksCi0JTVVYX1BHKHVhYSwgICAgU1BJMywgICAgICBNSVBJX0hTLCAgIFVBUlRBLCAgICAgVUxQSSwgICAgICAgICAgTUlQSV9IUywgICAweDE4LCAxOCwgMHg4MCwgMCwgIDB4YWMsIDApLAotCU1VWF9QRyh1YWIsICAgIFNQSTIsICAgICAgTUlQSV9IUywgICBVQVJUQSwgICAgIFVMUEksICAgICAgICAgIE1JUElfSFMsICAgMHgxOCwgMTksIDB4ODAsIDIsICAweGFjLCAyKSwKLQlNVVhfUEcodWFjLCAgICBPV1IsICAgICAgIFJTVkQyLCAgICAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MTgsIDIwLCAweDgwLCA0LCAgMHhhYywgNCksCi0JTVVYX1BHKHVhZCwgICAgSVJEQSwgICAgICBTUERJRiwgICAgIFVBUlRBLCAgICAgU1BJNCwgICAgICAgICAgU1BESUYsICAgICAweDE4LCAyMSwgMHg4MCwgNiwgIDB4YWMsIDYpLAotCU1VWF9QRyh1Y2EsICAgIFVBUlRDLCAgICAgUlNWRDIsICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIFJTVkQ0LCAgICAgMHgxOCwgMjIsIDB4ODQsIDE2LCAweGFjLCA4KSwKLQlNVVhfUEcodWNiLCAgICBVQVJUQywgICAgIFBXTSwgICAgICAgR01JLCAgICAgICBSU1ZENCwgICAgICAgICBSU1ZENCwgICAgIDB4MTgsIDIzLCAweDg0LCAxOCwgMHhhYywgMTApLAotCU1VWF9QRyh1ZGEsICAgIFNQSTEsICAgICAgUlNWRDIsICAgICBVQVJURCwgICAgIFVMUEksICAgICAgICAgIFJTVkQyLCAgICAgMHgyMCwgMTMsIDB4ODAsIDgsICAweGIwLCAxNiksCisJLyogICAgIG5hbWUsICAgZjAsICAgICAgICBmMSwgICAgICAgIGYyLCAgICAgICAgZjMsICAgICAgICAgICAgdHJpIHIvYiwgIG11eCByL2IsICBwdXBkIHIvYiAqLworCU1VWF9QRyhhdGEsICAgIElERSwgICAgICAgTkFORCwgICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MTQsIDAsICAweDgwLCAyNCwgMHhhMCwgMCksCisJTVVYX1BHKGF0YiwgICAgSURFLCAgICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgU0RJTzQsICAgICAgICAgMHgxNCwgMSwgIDB4ODAsIDE2LCAweGEwLCAyKSwKKwlNVVhfUEcoYXRjLCAgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBTRElPNCwgICAgICAgICAweDE0LCAyLCAgMHg4MCwgMjIsIDB4YTAsIDQpLAorCU1VWF9QRyhhdGQsICAgIElERSwgICAgICAgTkFORCwgICAgICBHTUksICAgICAgIFNESU80LCAgICAgICAgIDB4MTQsIDMsICAweDgwLCAyMCwgMHhhMCwgNiksCisJTVVYX1BHKGF0ZSwgICAgSURFLCAgICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgUlNWRDQsICAgICAgICAgMHgxOCwgMjUsIDB4ODAsIDEyLCAweGEwLCA4KSwKKwlNVVhfUEcoY2RldjEsICBPU0MsICAgICAgIFBMTEFfT1VULCAgUExMTV9PVVQxLCBBVURJT19TWU5DLCAgICAweDE0LCA0LCAgMHg4OCwgMiwgIDB4YTgsIDApLAorCU1VWF9QRyhjZGV2MiwgIE9TQywgICAgICAgQUhCX0NMSywgICBBUEJfQ0xLLCAgIFBMTFBfT1VUNCwgICAgIDB4MTQsIDUsICAweDg4LCA0LCAgMHhhOCwgMiksCisJTVVYX1BHKGNydHAsICAgQ1JULCAgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgMHgyMCwgMTQsIDB4OTgsIDIwLCAweGE0LCAyNCksCisJTVVYX1BHKGNzdXMsICAgUExMQ19PVVQxLCBQTExQX09VVDIsIFBMTFBfT1VUMywgVklfU0VOU09SX0NMSywgMHgxNCwgNiwgIDB4ODgsIDYsICAweGFjLCAyNCksCisJTVVYX1BHKGRhcDEsICAgREFQMSwgICAgICBSU1ZEMiwgICAgIEdNSSwgICAgICAgU0RJTzIsICAgICAgICAgMHgxNCwgNywgIDB4ODgsIDIwLCAweGEwLCAxMCksCisJTVVYX1BHKGRhcDIsICAgREFQMiwgICAgICBUV0MsICAgICAgIFJTVkQzLCAgICAgR01JLCAgICAgICAgICAgMHgxNCwgOCwgIDB4ODgsIDIyLCAweGEwLCAxMiksCisJTVVYX1BHKGRhcDMsICAgREFQMywgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgOSwgIDB4ODgsIDI0LCAweGEwLCAxNCksCisJTVVYX1BHKGRhcDQsICAgREFQNCwgICAgICBSU1ZEMiwgICAgIEdNSSwgICAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMTAsIDB4ODgsIDI2LCAweGEwLCAxNiksCisJTVVYX1BHKGRkYywgICAgSTJDMiwgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgMHgxOCwgMzEsIDB4ODgsIDAsICAweGIwLCAyOCksCisJTVVYX1BHKGR0YSwgICAgUlNWRDEsICAgICBTRElPMiwgICAgIFZJLCAgICAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMTEsIDB4ODQsIDIwLCAweGEwLCAxOCksCisJTVVYX1BHKGR0YiwgICAgUlNWRDEsICAgICBSU1ZEMiwgICAgIFZJLCAgICAgICAgU1BJMSwgICAgICAgICAgMHgxNCwgMTIsIDB4ODQsIDIyLCAweGEwLCAyMCksCisJTVVYX1BHKGR0YywgICAgUlNWRDEsICAgICBSU1ZEMiwgICAgIFZJLCAgICAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMTMsIDB4ODQsIDI2LCAweGEwLCAyMiksCisJTVVYX1BHKGR0ZCwgICAgUlNWRDEsICAgICBTRElPMiwgICAgIFZJLCAgICAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMTQsIDB4ODQsIDI4LCAweGEwLCAyNCksCisJTVVYX1BHKGR0ZSwgICAgUlNWRDEsICAgICBSU1ZEMiwgICAgIFZJLCAgICAgICAgU1BJMSwgICAgICAgICAgMHgxNCwgMTUsIDB4ODQsIDMwLCAweGEwLCAyNiksCisJTVVYX1BHKGR0ZiwgICAgSTJDMywgICAgICBSU1ZEMiwgICAgIFZJLCAgICAgICAgUlNWRDQsICAgICAgICAgMHgyMCwgMTIsIDB4OTgsIDMwLCAweGEwLCAyOCksCisJTVVYX1BHKGdtYSwgICAgVUFSVEUsICAgICBTUEkzLCAgICAgIEdNSSwgICAgICAgU0RJTzQsICAgICAgICAgMHgxNCwgMjgsIDB4ODQsIDAsICAweGIwLCAyMCksCisJTVVYX1BHKGdtYiwgICAgSURFLCAgICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgR01JX0lOVCwgICAgICAgMHgxOCwgMjksIDB4ODgsIDI4LCAweGIwLCAyMiksCisJTVVYX1BHKGdtYywgICAgVUFSVEQsICAgICBTUEk0LCAgICAgIEdNSSwgICAgICAgU0ZMQVNILCAgICAgICAgMHgxNCwgMjksIDB4ODQsIDIsICAweGIwLCAyNCksCisJTVVYX1BHKGdtZCwgICAgUlNWRDEsICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgU0ZMQVNILCAgICAgICAgMHgxOCwgMzAsIDB4ODgsIDMwLCAweGIwLCAyNiksCisJTVVYX1BHKGdtZSwgICAgUlNWRDEsICAgICBEQVA1LCAgICAgIEdNSSwgICAgICAgU0RJTzQsICAgICAgICAgMHgxOCwgMCwgIDB4OGMsIDAsICAweGE4LCAyNCksCisJTVVYX1BHKGdwdSwgICAgUFdNLCAgICAgICBVQVJUQSwgICAgIEdNSSwgICAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMTYsIDB4OGMsIDQsICAweGE0LCAyMCksCisJTVVYX1BHKGdwdTcsICAgUlRDSywgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgMHgyMCwgMTEsIDB4OTgsIDI4LCAweGE0LCA2KSwKKwlNVVhfUEcoZ3B2LCAgICBQQ0lFLCAgICAgIFJTVkQyLCAgICAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICAweDE0LCAxNywgMHg4YywgMiwgIDB4YTAsIDMwKSwKKwlNVVhfUEcoaGRpbnQsICBIRE1JLCAgICAgIFJTVkQyLCAgICAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICAweDFjLCAyMywgMHg4NCwgNCwgIC0xLCAgIC0xKSwKKwlNVVhfUEcoaTJjcCwgICBJMkNQLCAgICAgIFJTVkQyLCAgICAgUlNWRDMsICAgICBSU1ZENCwgICAgICAgICAweDE0LCAxOCwgMHg4OCwgOCwgIDB4YTQsIDIpLAorCU1VWF9QRyhpcnJ4LCAgIFVBUlRBLCAgICAgVUFSVEIsICAgICBHTUksICAgICAgIFNQSTQsICAgICAgICAgIDB4MTQsIDIwLCAweDg4LCAxOCwgMHhhOCwgMjIpLAorCU1VWF9QRyhpcnR4LCAgIFVBUlRBLCAgICAgVUFSVEIsICAgICBHTUksICAgICAgIFNQSTQsICAgICAgICAgIDB4MTQsIDE5LCAweDg4LCAxNiwgMHhhOCwgMjApLAorCU1VWF9QRyhrYmNhLCAgIEtCQywgICAgICAgTkFORCwgICAgICBTRElPMiwgICAgIEVNQ19URVNUMF9ETEwsIDB4MTQsIDIyLCAweDg4LCAxMCwgMHhhNCwgOCksCisJTVVYX1BHKGtiY2IsICAgS0JDLCAgICAgICBOQU5ELCAgICAgIFNESU8yLCAgICAgTUlPLCAgICAgICAgICAgMHgxNCwgMjEsIDB4ODgsIDEyLCAweGE0LCAxMCksCisJTVVYX1BHKGtiY2MsICAgS0JDLCAgICAgICBOQU5ELCAgICAgIFRSQUNFLCAgICAgRU1DX1RFU1QxX0RMTCwgMHgxOCwgMjYsIDB4ODgsIDE0LCAweGE0LCAxMiksCisJTVVYX1BHKGtiY2QsICAgS0JDLCAgICAgICBOQU5ELCAgICAgIFNESU8yLCAgICAgTUlPLCAgICAgICAgICAgMHgyMCwgMTAsIDB4OTgsIDI2LCAweGE0LCAxNCksCisJTVVYX1BHKGtiY2UsICAgS0JDLCAgICAgICBOQU5ELCAgICAgIE9XUiwgICAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMjYsIDB4ODAsIDI4LCAweGIwLCAyKSwKKwlNVVhfUEcoa2JjZiwgICBLQkMsICAgICAgIE5BTkQsICAgICAgVFJBQ0UsICAgICBNSU8sICAgICAgICAgICAweDE0LCAyNywgMHg4MCwgMjYsIDB4YjAsIDApLAorCU1VWF9QRyhsY3NuLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDMxLCAweDkwLCAxMiwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDAsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDAsICAweDk0LCAwLCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZDEsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDEsICAweDk0LCAyLCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZDIsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDIsICAweDk0LCA0LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZDMsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDMsICAweDk0LCA2LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZDQsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDQsICAweDk0LCA4LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZDUsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDUsICAweDk0LCAxMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDYsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDYsICAweDk0LCAxMiwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDcsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDcsICAweDk0LCAxNCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDgsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDgsICAweDk0LCAxNiwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDksICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDksICAweDk0LCAxOCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDEwLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDEwLCAweDk0LCAyMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDExLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDExLCAweDk0LCAyMiwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDEyLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDEyLCAweDk0LCAyNCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDEzLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDEzLCAweDk0LCAyNiwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDE0LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDE0LCAweDk0LCAyOCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDE1LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDE1LCAweDk0LCAzMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZDE2LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDE2LCAweDk4LCAwLCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZDE3LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDE3LCAweDk4LCAyLCAgLTEsICAgLTEpLAorCU1VWF9QRyhsZGMsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDMwLCAweDkwLCAxNCwgLTEsICAgLTEpLAorCU1VWF9QRyhsZGksICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MjAsIDYsICAweDk4LCAxNiwgLTEsICAgLTEpLAorCU1VWF9QRyhsaHAwLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDE4LCAweDk4LCAxMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsaHAxLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDE5LCAweDk4LCA0LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsaHAyLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDIwLCAweDk4LCA2LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsaHMsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MjAsIDcsICAweDkwLCAyMiwgLTEsICAgLTEpLAorCU1VWF9QRyhsbTAsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDI0LCAweDkwLCAyNiwgLTEsICAgLTEpLAorCU1VWF9QRyhsbTEsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIENSVCwgICAgICAgICAgIDB4MWMsIDI1LCAweDkwLCAyOCwgLTEsICAgLTEpLAorCU1VWF9QRyhscHAsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MjAsIDgsICAweDk4LCAxNCwgLTEsICAgLTEpLAorCU1VWF9QRyhscHcwLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIDB4MjAsIDMsICAweDkwLCAwLCAgLTEsICAgLTEpLAorCU1VWF9QRyhscHcxLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MjAsIDQsICAweDkwLCAyLCAgLTEsICAgLTEpLAorCU1VWF9QRyhscHcyLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIDB4MjAsIDUsICAweDkwLCA0LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsc2MwLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDI3LCAweDkwLCAxOCwgLTEsICAgLTEpLAorCU1VWF9QRyhsc2MxLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIDB4MWMsIDI4LCAweDkwLCAyMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsc2NrLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIDB4MWMsIDI5LCAweDkwLCAxNiwgLTEsICAgLTEpLAorCU1VWF9QRyhsc2RhLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIDB4MjAsIDEsICAweDkwLCA4LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsc2RpLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIFJTVkQ0LCAgICAgICAgIDB4MjAsIDIsICAweDkwLCA2LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsc3BpLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIEhETUksICAgICAgICAgIDB4MjAsIDAsICAweDkwLCAxMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsdnAwLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDIxLCAweDkwLCAzMCwgLTEsICAgLTEpLAorCU1VWF9QRyhsdnAxLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDIyLCAweDk4LCA4LCAgLTEsICAgLTEpLAorCU1VWF9QRyhsdnMsICAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MWMsIDI2LCAweDkwLCAyNCwgLTEsICAgLTEpLAorCU1VWF9QRyhvd2MsICAgIE9XUiwgICAgICAgUlNWRDIsICAgICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MTQsIDMxLCAweDg0LCA4LCAgMHhiMCwgMzApLAorCU1VWF9QRyhwbWMsICAgIFBXUl9PTiwgICAgUFdSX0lOVFIsICBSU1ZEMywgICAgIFJTVkQ0LCAgICAgICAgIDB4MTQsIDIzLCAweDk4LCAxOCwgLTEsICAgLTEpLAorCU1VWF9QRyhwdGEsICAgIEkyQzIsICAgICAgSERNSSwgICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MTQsIDI0LCAweDk4LCAyMiwgMHhhNCwgNCksCisJTVVYX1BHKHJtLCAgICAgSTJDMSwgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgMHgxNCwgMjUsIDB4ODAsIDE0LCAweGE0LCAwKSwKKwlNVVhfUEcoc2RiLCAgICBVQVJUQSwgICAgIFBXTSwgICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICAweDIwLCAxNSwgMHg4YywgMTAsIC0xLCAgIC0xKSwKKwlNVVhfUEcoc2RjLCAgICBQV00sICAgICAgIFRXQywgICAgICAgU0RJTzMsICAgICBTUEkzLCAgICAgICAgICAweDE4LCAxLCAgMHg4YywgMTIsIDB4YWMsIDI4KSwKKwlNVVhfUEcoc2RkLCAgICBVQVJUQSwgICAgIFBXTSwgICAgICAgU0RJTzMsICAgICBTUEkzLCAgICAgICAgICAweDE4LCAyLCAgMHg4YywgMTQsIDB4YWMsIDMwKSwKKwlNVVhfUEcoc2RpbzEsICBTRElPMSwgICAgIFJTVkQyLCAgICAgVUFSVEUsICAgICBVQVJUQSwgICAgICAgICAweDE0LCAzMCwgMHg4MCwgMzAsIDB4YjAsIDE4KSwKKwlNVVhfUEcoc2x4YSwgICBQQ0lFLCAgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICAweDE4LCAzLCAgMHg4NCwgNiwgIDB4YTQsIDIyKSwKKwlNVVhfUEcoc2x4YywgICBTUERJRiwgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICAweDE4LCA1LCAgMHg4NCwgMTAsIDB4YTQsIDI2KSwKKwlNVVhfUEcoc2x4ZCwgICBTUERJRiwgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICAweDE4LCA2LCAgMHg4NCwgMTIsIDB4YTQsIDI4KSwKKwlNVVhfUEcoc2x4aywgICBQQ0lFLCAgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICAweDE4LCA3LCAgMHg4NCwgMTQsIDB4YTQsIDMwKSwKKwlNVVhfUEcoc3BkaSwgICBTUERJRiwgICAgIFJTVkQyLCAgICAgSTJDMSwgICAgICBTRElPMiwgICAgICAgICAweDE4LCA4LCAgMHg4YywgOCwgIDB4YTQsIDE2KSwKKwlNVVhfUEcoc3BkbywgICBTUERJRiwgICAgIFJTVkQyLCAgICAgSTJDMSwgICAgICBTRElPMiwgICAgICAgICAweDE4LCA5LCAgMHg4YywgNiwgIDB4YTQsIDE4KSwKKwlNVVhfUEcoc3BpYSwgICBTUEkxLCAgICAgIFNQSTIsICAgICAgU1BJMywgICAgICBHTUksICAgICAgICAgICAweDE4LCAxMCwgMHg4YywgMzAsIDB4YTgsIDQpLAorCU1VWF9QRyhzcGliLCAgIFNQSTEsICAgICAgU1BJMiwgICAgICBTUEkzLCAgICAgIEdNSSwgICAgICAgICAgIDB4MTgsIDExLCAweDhjLCAyOCwgMHhhOCwgNiksCisJTVVYX1BHKHNwaWMsICAgU1BJMSwgICAgICBTUEkyLCAgICAgIFNQSTMsICAgICAgR01JLCAgICAgICAgICAgMHgxOCwgMTIsIDB4OGMsIDI2LCAweGE4LCA4KSwKKwlNVVhfUEcoc3BpZCwgICBTUEkyLCAgICAgIFNQSTEsICAgICAgU1BJMl9BTFQsICBHTUksICAgICAgICAgICAweDE4LCAxMywgMHg4YywgMjQsIDB4YTgsIDEwKSwKKwlNVVhfUEcoc3BpZSwgICBTUEkyLCAgICAgIFNQSTEsICAgICAgU1BJMl9BTFQsICBHTUksICAgICAgICAgICAweDE4LCAxNCwgMHg4YywgMjIsIDB4YTgsIDEyKSwKKwlNVVhfUEcoc3BpZiwgICBTUEkzLCAgICAgIFNQSTEsICAgICAgU1BJMiwgICAgICBSU1ZENCwgICAgICAgICAweDE4LCAxNSwgMHg4YywgMjAsIDB4YTgsIDE0KSwKKwlNVVhfUEcoc3BpZywgICBTUEkzLCAgICAgIFNQSTIsICAgICAgU1BJMl9BTFQsICBJMkMxLCAgICAgICAgICAweDE4LCAxNiwgMHg4YywgMTgsIDB4YTgsIDE2KSwKKwlNVVhfUEcoc3BpaCwgICBTUEkzLCAgICAgIFNQSTIsICAgICAgU1BJMl9BTFQsICBJMkMxLCAgICAgICAgICAweDE4LCAxNywgMHg4YywgMTYsIDB4YTgsIDE4KSwKKwlNVVhfUEcodWFhLCAgICBTUEkzLCAgICAgIE1JUElfSFMsICAgVUFSVEEsICAgICBVTFBJLCAgICAgICAgICAweDE4LCAxOCwgMHg4MCwgMCwgIDB4YWMsIDApLAorCU1VWF9QRyh1YWIsICAgIFNQSTIsICAgICAgTUlQSV9IUywgICBVQVJUQSwgICAgIFVMUEksICAgICAgICAgIDB4MTgsIDE5LCAweDgwLCAyLCAgMHhhYywgMiksCisJTVVYX1BHKHVhYywgICAgT1dSLCAgICAgICBSU1ZEMiwgICAgIFJTVkQzLCAgICAgUlNWRDQsICAgICAgICAgMHgxOCwgMjAsIDB4ODAsIDQsICAweGFjLCA0KSwKKwlNVVhfUEcodWFkLCAgICBJUkRBLCAgICAgIFNQRElGLCAgICAgVUFSVEEsICAgICBTUEk0LCAgICAgICAgICAweDE4LCAyMSwgMHg4MCwgNiwgIDB4YWMsIDYpLAorCU1VWF9QRyh1Y2EsICAgIFVBUlRDLCAgICAgUlNWRDIsICAgICBHTUksICAgICAgIFJTVkQ0LCAgICAgICAgIDB4MTgsIDIyLCAweDg0LCAxNiwgMHhhYywgOCksCisJTVVYX1BHKHVjYiwgICAgVUFSVEMsICAgICBQV00sICAgICAgIEdNSSwgICAgICAgUlNWRDQsICAgICAgICAgMHgxOCwgMjMsIDB4ODQsIDE4LCAweGFjLCAxMCksCisJTVVYX1BHKHVkYSwgICAgU1BJMSwgICAgICBSU1ZEMiwgICAgIFVBUlRELCAgICAgVUxQSSwgICAgICAgICAgMHgyMCwgMTMsIDB4ODAsIDgsICAweGIwLCAxNiksCiAJLyogICAgICBwZ19uYW1lLCBwdXBkX3IvYiAqLwogCVBVTExfUEcoY2szMiwgICAgMHhiMCwgMTQpLAogCVBVTExfUEcoZGRyYywgICAgMHhhYywgMjYpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmEzMC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdGVncmEzMC5jCmluZGV4IDQxZDI0ZjUuLmZlMmQyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXRlZ3JhMzAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ZWdyYTMwLmMKQEAgLTIxMDgsMTAgKzIxMDgsMTIgQEAKICNkZWZpbmUgRFJWX1BJTkdST1VQX1JFR19BCQkweDg2OAkvKiBiYW5rIDAgKi8KICNkZWZpbmUgUElOR1JPVVBfUkVHX0EJCQkweDMwMDAJLyogYmFuayAxICovCiAKLSNkZWZpbmUgUElOR1JPVVBfUkVHX1kocikJCSgocikgLSBQSU5HUk9VUF9SRUdfQSkKLSNkZWZpbmUgUElOR1JPVVBfUkVHX04ocikJCS0xCisjZGVmaW5lIFBJTkdST1VQX1JFRyhyKQkJCSgocikgLSBQSU5HUk9VUF9SRUdfQSkKIAotI2RlZmluZSBQSU5HUk9VUChwZ19uYW1lLCBmMCwgZjEsIGYyLCBmMywgZl9zYWZlLCByLCBvZCwgaW9yKQlcCisjZGVmaW5lIFBJTkdST1VQX0JJVF9ZKGIpCQkoYikKKyNkZWZpbmUgUElOR1JPVVBfQklUX04oYikJCSgtMSkKKworI2RlZmluZSBQSU5HUk9VUChwZ19uYW1lLCBmMCwgZjEsIGYyLCBmMywgciwgb2QsIGlvcikJCVwKIAl7CQkJCQkJCVwKIAkJLm5hbWUgPSAjcGdfbmFtZSwJCQkJXAogCQkucGlucyA9IHBnX25hbWUjI19waW5zLAkJCQlcCkBAIC0yMTIyLDM1ICsyMTI0LDI0IEBACiAJCQlURUdSQV9NVVhfIyNmMiwJCQkJXAogCQkJVEVHUkFfTVVYXyMjZjMsCQkJCVwKIAkJfSwJCQkJCQlcCi0JCS5mdW5jX3NhZmUgPSBURUdSQV9NVVhfIyNmX3NhZmUsCQlcCi0JCS5tdXhfcmVnID0gUElOR1JPVVBfUkVHX1kociksCQkJXAorCQkubXV4X3JlZyA9IFBJTkdST1VQX1JFRyhyKSwJCQlcCiAJCS5tdXhfYmFuayA9IDEsCQkJCQlcCiAJCS5tdXhfYml0ID0gMCwJCQkJCVwKLQkJLnB1cGRfcmVnID0gUElOR1JPVVBfUkVHX1kociksCQkJXAorCQkucHVwZF9yZWcgPSBQSU5HUk9VUF9SRUcociksCQkJXAogCQkucHVwZF9iYW5rID0gMSwJCQkJCVwKIAkJLnB1cGRfYml0ID0gMiwJCQkJCVwKLQkJLnRyaV9yZWcgPSBQSU5HUk9VUF9SRUdfWShyKSwJCQlcCisJCS50cmlfcmVnID0gUElOR1JPVVBfUkVHKHIpLAkJCVwKIAkJLnRyaV9iYW5rID0gMSwJCQkJCVwKIAkJLnRyaV9iaXQgPSA0LAkJCQkJXAotCQkuZWlucHV0X3JlZyA9IFBJTkdST1VQX1JFR19ZKHIpLAkJXAotCQkuZWlucHV0X2JhbmsgPSAxLAkJCQlcCi0JCS5laW5wdXRfYml0ID0gNSwJCQkJXAotCQkub2RyYWluX3JlZyA9IFBJTkdST1VQX1JFR18jI29kKHIpLAkJXAotCQkub2RyYWluX2JhbmsgPSAxLAkJCQlcCi0JCS5vZHJhaW5fYml0ID0gNiwJCQkJXAotCQkubG9ja19yZWcgPSBQSU5HUk9VUF9SRUdfWShyKSwJCQlcCi0JCS5sb2NrX2JhbmsgPSAxLAkJCQkJXAotCQkubG9ja19iaXQgPSA3LAkJCQkJXAotCQkuaW9yZXNldF9yZWcgPSBQSU5HUk9VUF9SRUdfIyNpb3IociksCQlcCi0JCS5pb3Jlc2V0X2JhbmsgPSAxLAkJCQlcCi0JCS5pb3Jlc2V0X2JpdCA9IDgsCQkJCVwKLQkJLnJjdl9zZWxfcmVnID0gLTEsCQkJCVwKKwkJLmVpbnB1dF9iaXQgPSBQSU5HUk9VUF9CSVRfWSg1KSwJCVwKKwkJLm9kcmFpbl9iaXQgPSBQSU5HUk9VUF9CSVRfIyNvZCg2KSwJCVwKKwkJLmxvY2tfYml0ID0gUElOR1JPVVBfQklUX1koNyksCQkJXAorCQkuaW9yZXNldF9iaXQgPSBQSU5HUk9VUF9CSVRfIyNpb3IoOCksCQlcCisJCS5yY3Zfc2VsX2JpdCA9IC0xLAkJCQlcCiAJCS5kcnZfcmVnID0gLTEsCQkJCQlcCi0JCS5kcnZ0eXBlX3JlZyA9IC0xLAkJCQlcCiAJfQogCi0jZGVmaW5lIERSVl9QSU5HUk9VUF9SRUdfWShyKQkJKChyKSAtIERSVl9QSU5HUk9VUF9SRUdfQSkKLSNkZWZpbmUgRFJWX1BJTkdST1VQX1JFR19OKHIpCQktMQorI2RlZmluZSBEUlZfUElOR1JPVVBfUkVHKHIpCQkoKHIpIC0gRFJWX1BJTkdST1VQX1JFR19BKQogCiAjZGVmaW5lIERSVl9QSU5HUk9VUChwZ19uYW1lLCByLCBoc21fYiwgc2NobWl0dF9iLCBscG1kX2IsCVwKIAkJICAgICBkcnZkbl9iLCBkcnZkbl93LCBkcnZ1cF9iLCBkcnZ1cF93LAlcCkBAIC0yMTYyLDEyICsyMTUzLDEyIEBACiAJCS5tdXhfcmVnID0gLTEsCQkJCQlcCiAJCS5wdXBkX3JlZyA9IC0xLAkJCQkJXAogCQkudHJpX3JlZyA9IC0xLAkJCQkJXAotCQkuZWlucHV0X3JlZyA9IC0xLAkJCQlcCi0JCS5vZHJhaW5fcmVnID0gLTEsCQkJCVwKLQkJLmxvY2tfcmVnID0gLTEsCQkJCQlcCi0JCS5pb3Jlc2V0X3JlZyA9IC0xLAkJCQlcCi0JCS5yY3Zfc2VsX3JlZyA9IC0xLAkJCQlcCi0JCS5kcnZfcmVnID0gRFJWX1BJTkdST1VQX1JFR19ZKHIpLAkJXAorCQkuZWlucHV0X2JpdCA9IC0xLAkJCQlcCisJCS5vZHJhaW5fYml0ID0gLTEsCQkJCVwKKwkJLmxvY2tfYml0ID0gLTEsCQkJCQlcCisJCS5pb3Jlc2V0X2JpdCA9IC0xLAkJCQlcCisJCS5yY3Zfc2VsX2JpdCA9IC0xLAkJCQlcCisJCS5kcnZfcmVnID0gRFJWX1BJTkdST1VQX1JFRyhyKSwJCQlcCiAJCS5kcnZfYmFuayA9IDAsCQkJCQlcCiAJCS5oc21fYml0ID0gaHNtX2IsCQkJCVwKIAkJLnNjaG1pdHRfYml0ID0gc2NobWl0dF9iLAkJCVwKQEAgLTIxODAsMjYwICsyMTcxLDI2MCBAQAogCQkuc2x3cl93aWR0aCA9IHNsd3JfdywJCQkJXAogCQkuc2x3Zl9iaXQgPSBzbHdmX2IsCQkJCVwKIAkJLnNsd2Zfd2lkdGggPSBzbHdmX3csCQkJCVwKLQkJLmRydnR5cGVfcmVnID0gLTEsCQkJCVwKKwkJLmRydnR5cGVfYml0ID0gLTEsCQkJCVwKIAl9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfcGluZ3JvdXAgdGVncmEzMF9ncm91cHNbXSA9IHsKLQkvKiAgICAgICBwZ19uYW1lLCAgICAgICAgICAgICAgZjAsICAgICAgICAgICBmMSwgICAgICAgICAgIGYyLCAgICAgICAgICAgZjMsICAgICAgICAgICBzYWZlLCAgICAgICAgIHIsICAgICAgb2QsIGlvciAqLwotCVBJTkdST1VQKGNsa18zMmtfb3V0X3BhMCwgICAgICBCTElOSywgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzFjLCBOLCBOKSwKLQlQSU5HUk9VUCh1YXJ0M19jdHNfbl9wYTEsICAgICAgVUFSVEMsICAgICAgICBSU1ZEMiwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE3YywgTiwgTiksCi0JUElOR1JPVVAoZGFwMl9mc19wYTIsICAgICAgICAgIEkyUzEsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDMsICAgICAgICAweDMzNTgsIE4sIE4pLAotCVBJTkdST1VQKGRhcDJfc2Nsa19wYTMsICAgICAgICBJMlMxLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBHTUksICAgICAgICAgIFJTVkQzLCAgICAgICAgMHgzMzY0LCBOLCBOKSwKLQlQSU5HUk9VUChkYXAyX2Rpbl9wYTQsICAgICAgICAgSTJTMSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZEMywgICAgICAgIDB4MzM1YywgTiwgTiksCi0JUElOR1JPVVAoZGFwMl9kb3V0X3BhNSwgICAgICAgIEkyUzEsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDMsICAgICAgICAweDMzNjAsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jM19jbGtfcGE2LCAgICAgICBVQVJUQSwgICAgICAgIFBXTTIsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkzLCAgICAgICAgIFNQSTMsICAgICAgICAgMHgzMzkwLCBOLCBOKSwKLQlQSU5HUk9VUChzZG1tYzNfY21kX3BhNywgICAgICAgVUFSVEEsICAgICAgICBQV00zLCAgICAgICAgIFNETU1DMywgICAgICAgU1BJMiwgICAgICAgICBTUEkyLCAgICAgICAgIDB4MzM5NCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2ExN19wYjAsICAgICAgICAgIFVBUlRELCAgICAgICAgU1BJNCwgICAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICAgRFRWLCAgICAgICAgICAweDMyMzQsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hMThfcGIxLCAgICAgICAgICBVQVJURCwgICAgICAgIFNQSTQsICAgICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgIERUViwgICAgICAgICAgMHgzMjM4LCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfcHdyMF9wYjIsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNQSTUsICAgICAgICAgSERDUCwgICAgICAgICBIRENQLCAgICAgICAgIDB4MzA5MCwgTiwgTiksCi0JUElOR1JPVVAobGNkX3BjbGtfcGIzLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwOTQsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jM19kYXQzX3BiNCwgICAgICBSU1ZEMSwgICAgICAgIFBXTTAsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkzLCAgICAgICAgIFJTVkQxLCAgICAgICAgMHgzM2E0LCBOLCBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0Ml9wYjUsICAgICAgUlNWRDEsICAgICAgICBQV00xLCAgICAgICAgIFNETU1DMywgICAgICAgU1BJMywgICAgICAgICBSU1ZEMSwgICAgICAgIDB4MzNhMCwgTiwgTiksCi0JUElOR1JPVVAoc2RtbWMzX2RhdDFfcGI2LCAgICAgIFJTVkQxLCAgICAgICAgUlNWRDIsICAgICAgICBTRE1NQzMsICAgICAgIFNQSTMsICAgICAgICAgUlNWRDIsICAgICAgICAweDMzOWMsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jM19kYXQwX3BiNywgICAgICBSU1ZEMSwgICAgICAgIFJTVkQyLCAgICAgICAgU0RNTUMzLCAgICAgICBTUEkzLCAgICAgICAgIFJTVkQyLCAgICAgICAgMHgzMzk4LCBOLCBOKSwKLQlQSU5HUk9VUCh1YXJ0M19ydHNfbl9wYzAsICAgICAgVUFSVEMsICAgICAgICBQV00wLCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE4MCwgTiwgTiksCi0JUElOR1JPVVAobGNkX3B3cjFfcGMxLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwNzAsIE4sIE4pLAotCVBJTkdST1VQKHVhcnQyX3R4ZF9wYzIsICAgICAgICBVQVJUQiwgICAgICAgIFNQRElGLCAgICAgICAgVUFSVEEsICAgICAgICBTUEk0LCAgICAgICAgIFNQSTQsICAgICAgICAgMHgzMTY4LCBOLCBOKSwKLQlQSU5HUk9VUCh1YXJ0Ml9yeGRfcGMzLCAgICAgICAgVUFSVEIsICAgICAgICBTUERJRiwgICAgICAgIFVBUlRBLCAgICAgICAgU1BJNCwgICAgICAgICBTUEk0LCAgICAgICAgIDB4MzE2NCwgTiwgTiksCi0JUElOR1JPVVAoZ2VuMV9pMmNfc2NsX3BjNCwgICAgIEkyQzEsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxYTQsIFksIE4pLAotCVBJTkdST1VQKGdlbjFfaTJjX3NkYV9wYzUsICAgICBJMkMxLCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWEwLCBZLCBOKSwKLQlQSU5HUk9VUChsY2RfcHdyMl9wYzYsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNQSTUsICAgICAgICAgSERDUCwgICAgICAgICBIRENQLCAgICAgICAgIDB4MzA3NCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX3dwX25fcGM3LCAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICAgUlNWRDEsICAgICAgICAweDMxYzAsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jM19kYXQ1X3BkMCwgICAgICBQV00wLCAgICAgICAgIFNQSTQsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkyLCAgICAgICAgIFNQSTIsICAgICAgICAgMHgzM2FjLCBOLCBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0NF9wZDEsICAgICAgUFdNMSwgICAgICAgICBTUEk0LCAgICAgICAgIFNETU1DMywgICAgICAgU1BJMiwgICAgICAgICBTUEkyLCAgICAgICAgIDB4MzNhOCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2RjMV9wZDIsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMGMsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jM19kYXQ2X3BkMywgICAgICBTUERJRiwgICAgICAgIFNQSTQsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkyLCAgICAgICAgIFNQSTIsICAgICAgICAgMHgzM2IwLCBOLCBOKSwKLQlQSU5HUk9VUChzZG1tYzNfZGF0N19wZDQsICAgICAgU1BESUYsICAgICAgICBTUEk0LCAgICAgICAgIFNETU1DMywgICAgICAgU1BJMiwgICAgICAgICBTUEkyLCAgICAgICAgIDB4MzNiNCwgTiwgTiksCi0JUElOR1JPVVAodmlfZDFfcGQ1LCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMjgsIE4sIFkpLAotCVBJTkdST1VQKHZpX3ZzeW5jX3BkNiwgICAgICAgICBERFIsICAgICAgICAgIFJTVkQyLCAgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTVjLCBOLCBZKSwKLQlQSU5HUk9VUCh2aV9oc3luY19wZDcsICAgICAgICAgRERSLCAgICAgICAgICBSU1ZEMiwgICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE2MCwgTiwgWSksCi0JUElOR1JPVVAobGNkX2QwX3BlMCwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYTQsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kMV9wZTEsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGE4LCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDJfcGUyLCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBhYywgTiwgTiksCi0JUElOR1JPVVAobGNkX2QzX3BlMywgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYjAsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kNF9wZTQsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGI0LCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDVfcGU1LCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBiOCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2Q2X3BlNiwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYmMsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kN19wZTcsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGMwLCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDhfcGYwLCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBjNCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2Q5X3BmMSwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYzgsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kMTBfcGYyLCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGNjLCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDExX3BmMywgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBkMCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2QxMl9wZjQsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZDQsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kMTNfcGY1LCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGQ4LCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDE0X3BmNiwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBkYywgTiwgTiksCi0JUElOR1JPVVAobGNkX2QxNV9wZjcsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZTAsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hZDBfcGcwLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWYwLCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfYWQxX3BnMSwgICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFmNCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2FkMl9wZzIsICAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxZjgsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hZDNfcGczLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWZjLCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfYWQ0X3BnNCwgICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIwMCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2FkNV9wZzUsICAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyMDQsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hZDZfcGc2LCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjA4LCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfYWQ3X3BnNywgICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIwYywgTiwgTiksCi0JUElOR1JPVVAoZ21pX2FkOF9waDAsICAgICAgICAgIFBXTTAsICAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyMTAsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hZDlfcGgxLCAgICAgICAgICBQV00xLCAgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjE0LCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfYWQxMF9waDIsICAgICAgICAgUFdNMiwgICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIxOCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2FkMTFfcGgzLCAgICAgICAgIFBXTTMsICAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyMWMsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hZDEyX3BoNCwgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjIwLCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfYWQxM19waDUsICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIyNCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2FkMTRfcGg2LCAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyMjgsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hZDE1X3BoNywgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjJjLCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfd3Jfbl9waTAsICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzI0MCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX29lX25fcGkxLCAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyNDQsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9kcXNfcGkyLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjQ4LCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfY3M2X25fcGkzLCAgICAgICAgTkFORCwgICAgICAgICBOQU5EX0FMVCwgICAgIEdNSSwgICAgICAgICAgU0FUQSwgICAgICAgICBTQVRBLCAgICAgICAgIDB4MzFlOCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX3JzdF9uX3BpNCwgICAgICAgIE5BTkQsICAgICAgICAgTkFORF9BTFQsICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyNGMsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9pb3JkeV9waTUsICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWM0LCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfY3M3X25fcGk2LCAgICAgICAgTkFORCwgICAgICAgICBOQU5EX0FMVCwgICAgIEdNSSwgICAgICAgICAgR01JX0FMVCwgICAgICBHTUlfQUxULCAgICAgIDB4MzFlYywgTiwgTiksCi0JUElOR1JPVVAoZ21pX3dhaXRfcGk3LCAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxYzgsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9jczBfbl9wajAsICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgIFJTVkQxLCAgICAgICAgMHgzMWQ0LCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZGVfcGoxLCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA5OCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2NzMV9uX3BqMiwgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIERUViwgICAgICAgICAgUlNWRDEsICAgICAgICAweDMxZDgsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9oc3luY19wajMsICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDljLCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfdnN5bmNfcGo0LCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBhMCwgTiwgTiksCi0JUElOR1JPVVAodWFydDJfY3RzX25fcGo1LCAgICAgIFVBUlRBLCAgICAgICAgVUFSVEIsICAgICAgICBHTUksICAgICAgICAgIFNQSTQsICAgICAgICAgU1BJNCwgICAgICAgICAweDMxNzAsIE4sIE4pLAotCVBJTkdST1VQKHVhcnQyX3J0c19uX3BqNiwgICAgICBVQVJUQSwgICAgICAgIFVBUlRCLCAgICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgIFNQSTQsICAgICAgICAgMHgzMTZjLCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfYTE2X3BqNywgICAgICAgICAgVUFSVEQsICAgICAgICBTUEk0LCAgICAgICAgIEdNSSwgICAgICAgICAgR01JX0FMVCwgICAgICBHTUlfQUxULCAgICAgIDB4MzIzMCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2Fkdl9uX3BrMCwgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxY2MsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9jbGtfcGsxLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWQwLCBOLCBOKSwKLQlQSU5HUk9VUChnbWlfY3M0X25fcGsyLCAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFlNCwgTiwgTiksCi0JUElOR1JPVVAoZ21pX2NzMl9uX3BrMywgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxZGMsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9jczNfbl9wazQsICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBHTUlfQUxULCAgICAgIFJTVkQxLCAgICAgICAgMHgzMWUwLCBOLCBOKSwKLQlQSU5HUk9VUChzcGRpZl9vdXRfcGs1LCAgICAgICAgU1BESUYsICAgICAgICBSU1ZEMiwgICAgICAgIEkyQzEsICAgICAgICAgU0RNTUMyLCAgICAgICBSU1ZEMiwgICAgICAgIDB4MzM1NCwgTiwgTiksCi0JUElOR1JPVVAoc3BkaWZfaW5fcGs2LCAgICAgICAgIFNQRElGLCAgICAgICAgSERBLCAgICAgICAgICBJMkMxLCAgICAgICAgIFNETU1DMiwgICAgICAgU0RNTUMyLCAgICAgICAweDMzNTAsIE4sIE4pLAotCVBJTkdST1VQKGdtaV9hMTlfcGs3LCAgICAgICAgICBVQVJURCwgICAgICAgIFNQSTQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjNjLCBOLCBOKSwKLQlQSU5HUk9VUCh2aV9kMl9wbDAsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEyYywgTiwgWSksCi0JUElOR1JPVVAodmlfZDNfcGwxLCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMzAsIE4sIFkpLAotCVBJTkdST1VQKHZpX2Q0X3BsMiwgICAgICAgICAgICBERFIsICAgICAgICAgIFNETU1DMiwgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTM0LCBOLCBZKSwKLQlQSU5HUk9VUCh2aV9kNV9wbDMsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEzOCwgTiwgWSksCi0JUElOR1JPVVAodmlfZDZfcGw0LCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxM2MsIE4sIFkpLAotCVBJTkdST1VQKHZpX2Q3X3BsNSwgICAgICAgICAgICBERFIsICAgICAgICAgIFNETU1DMiwgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTQwLCBOLCBZKSwKLQlQSU5HUk9VUCh2aV9kOF9wbDYsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE0NCwgTiwgWSksCi0JUElOR1JPVVAodmlfZDlfcGw3LCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxNDgsIE4sIFkpLAotCVBJTkdST1VQKGxjZF9kMTZfcG0wLCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGU0LCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDE3X3BtMSwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBlOCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2QxOF9wbTIsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZWMsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kMTlfcG0zLCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGYwLCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDIwX3BtNCwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBmNCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2QyMV9wbTUsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZjgsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9kMjJfcG02LCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGZjLCBOLCBOKSwKLQlQSU5HUk9VUChsY2RfZDIzX3BtNywgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEwMCwgTiwgTiksCi0JUElOR1JPVVAoZGFwMV9mc19wbjAsICAgICAgICAgIEkyUzAsICAgICAgICAgSERBLCAgICAgICAgICBHTUksICAgICAgICAgIFNETU1DMiwgICAgICAgU0RNTUMyLCAgICAgICAweDMzMzgsIE4sIE4pLAotCVBJTkdST1VQKGRhcDFfZGluX3BuMSwgICAgICAgICBJMlMwLCAgICAgICAgIEhEQSwgICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzIsICAgICAgIFNETU1DMiwgICAgICAgMHgzMzNjLCBOLCBOKSwKLQlQSU5HUk9VUChkYXAxX2RvdXRfcG4yLCAgICAgICAgSTJTMCwgICAgICAgICBIREEsICAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUMyLCAgICAgICBTRE1NQzIsICAgICAgIDB4MzM0MCwgTiwgTiksCi0JUElOR1JPVVAoZGFwMV9zY2xrX3BuMywgICAgICAgIEkyUzAsICAgICAgICAgSERBLCAgICAgICAgICBHTUksICAgICAgICAgIFNETU1DMiwgICAgICAgU0RNTUMyLCAgICAgICAweDMzNDQsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9jczBfbl9wbjQsICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgU1BJNSwgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDg0LCBOLCBOKSwKLQlQSU5HUk9VUChsY2Rfc2RvdXRfcG41LCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNQSTUsICAgICAgICAgSERDUCwgICAgICAgICBIRENQLCAgICAgICAgIDB4MzA3YywgTiwgTiksCi0JUElOR1JPVVAobGNkX2RjMF9wbjYsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwODgsIE4sIE4pLAotCVBJTkdST1VQKGhkbWlfaW50X3BuNywgICAgICAgICBIRE1JLCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTEwLCBOLCBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGE3X3BvMCwgICAgICAgU1BJMiwgICAgICAgICBIU0ksICAgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAxYywgTiwgTiksCi0JUElOR1JPVVAodWxwaV9kYXRhMF9wbzEsICAgICAgIFNQSTMsICAgICAgICAgSFNJLCAgICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAgVUxQSSwgICAgICAgICAweDMwMDAsIE4sIE4pLAotCVBJTkdST1VQKHVscGlfZGF0YTFfcG8yLCAgICAgICBTUEkzLCAgICAgICAgIEhTSSwgICAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgIFVMUEksICAgICAgICAgMHgzMDA0LCBOLCBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGEyX3BvMywgICAgICAgU1BJMywgICAgICAgICBIU0ksICAgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAwOCwgTiwgTiksCi0JUElOR1JPVVAodWxwaV9kYXRhM19wbzQsICAgICAgIFNQSTMsICAgICAgICAgSFNJLCAgICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAgVUxQSSwgICAgICAgICAweDMwMGMsIE4sIE4pLAotCVBJTkdST1VQKHVscGlfZGF0YTRfcG81LCAgICAgICBTUEkyLCAgICAgICAgIEhTSSwgICAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgIFVMUEksICAgICAgICAgMHgzMDEwLCBOLCBOKSwKLQlQSU5HUk9VUCh1bHBpX2RhdGE1X3BvNiwgICAgICAgU1BJMiwgICAgICAgICBIU0ksICAgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAxNCwgTiwgTiksCi0JUElOR1JPVVAodWxwaV9kYXRhNl9wbzcsICAgICAgIFNQSTIsICAgICAgICAgSFNJLCAgICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAgVUxQSSwgICAgICAgICAweDMwMTgsIE4sIE4pLAotCVBJTkdST1VQKGRhcDNfZnNfcHAwLCAgICAgICAgICBJMlMyLCAgICAgICAgIFJTVkQyLCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQyLCAgICAgICAgMHgzMDMwLCBOLCBOKSwKLQlQSU5HUk9VUChkYXAzX2Rpbl9wcDEsICAgICAgICAgSTJTMiwgICAgICAgICBSU1ZEMiwgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMiwgICAgICAgIDB4MzAzNCwgTiwgTiksCi0JUElOR1JPVVAoZGFwM19kb3V0X3BwMiwgICAgICAgIEkyUzIsICAgICAgICAgUlNWRDIsICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDIsICAgICAgICAweDMwMzgsIE4sIE4pLAotCVBJTkdST1VQKGRhcDNfc2Nsa19wcDMsICAgICAgICBJMlMyLCAgICAgICAgIFJTVkQyLCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQyLCAgICAgICAgMHgzMDNjLCBOLCBOKSwKLQlQSU5HUk9VUChkYXA0X2ZzX3BwNCwgICAgICAgICAgSTJTMywgICAgICAgICBSU1ZEMiwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFhOCwgTiwgTiksCi0JUElOR1JPVVAoZGFwNF9kaW5fcHA1LCAgICAgICAgIEkyUzMsICAgICAgICAgUlNWRDIsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxYWMsIE4sIE4pLAotCVBJTkdST1VQKGRhcDRfZG91dF9wcDYsICAgICAgICBJMlMzLCAgICAgICAgIFJTVkQyLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWIwLCBOLCBOKSwKLQlQSU5HUk9VUChkYXA0X3NjbGtfcHA3LCAgICAgICAgSTJTMywgICAgICAgICBSU1ZEMiwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFiNCwgTiwgTiksCi0JUElOR1JPVVAoa2JfY29sMF9wcTAsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBUUkFDRSwgICAgICAgIFRFU1QsICAgICAgICAgVEVTVCwgICAgICAgICAweDMyZmMsIE4sIE4pLAotCVBJTkdST1VQKGtiX2NvbDFfcHExLCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBURVNULCAgICAgICAgIFRFU1QsICAgICAgICAgMHgzMzAwLCBOLCBOKSwKLQlQSU5HUk9VUChrYl9jb2wyX3BxMiwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFRSQUNFLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMwNCwgTiwgTiksCi0JUElOR1JPVVAoa2JfY29sM19wcTMsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBUUkFDRSwgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzMDgsIE4sIE4pLAotCVBJTkdST1VQKGtiX2NvbDRfcHE0LCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzBjLCBOLCBOKSwKLQlQSU5HUk9VUChrYl9jb2w1X3BxNSwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFRSQUNFLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMxMCwgTiwgTiksCi0JUElOR1JPVVAoa2JfY29sNl9wcTYsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBUUkFDRSwgICAgICAgIE1JTywgICAgICAgICAgTUlPLCAgICAgICAgICAweDMzMTQsIE4sIE4pLAotCVBJTkdST1VQKGtiX2NvbDdfcHE3LCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBNSU8sICAgICAgICAgIE1JTywgICAgICAgICAgMHgzMzE4LCBOLCBOKSwKLQlQSU5HUk9VUChrYl9yb3cwX3ByMCwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzJiYywgTiwgTiksCi0JUElOR1JPVVAoa2Jfcm93MV9wcjEsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyYzAsIE4sIE4pLAotCVBJTkdST1VQKGtiX3JvdzJfcHIyLCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMmM0LCBOLCBOKSwKLQlQSU5HUk9VUChrYl9yb3czX3ByMywgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFJTVkQzLCAgICAgICAgSU5WQUxJRCwgICAgICBSU1ZEMywgICAgICAgIDB4MzJjOCwgTiwgTiksCi0JUElOR1JPVVAoa2Jfcm93NF9wcjQsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBUUkFDRSwgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyY2MsIE4sIE4pLAotCVBJTkdST1VQKGtiX3JvdzVfcHI1LCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBPV1IsICAgICAgICAgIE9XUiwgICAgICAgICAgMHgzMmQwLCBOLCBOKSwKLQlQSU5HUk9VUChrYl9yb3c2X3ByNiwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICBNSU8sICAgICAgICAgIDB4MzJkNCwgTiwgTiksCi0JUElOR1JPVVAoa2Jfcm93N19wcjcsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgTUlPLCAgICAgICAgICAweDMyZDgsIE4sIE4pLAotCVBJTkdST1VQKGtiX3JvdzhfcHMwLCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgU0RNTUMyLCAgICAgICBNSU8sICAgICAgICAgIE1JTywgICAgICAgICAgMHgzMmRjLCBOLCBOKSwKLQlQSU5HUk9VUChrYl9yb3c5X3BzMSwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICBNSU8sICAgICAgICAgIDB4MzJlMCwgTiwgTiksCi0JUElOR1JPVVAoa2Jfcm93MTBfcHMyLCAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgTUlPLCAgICAgICAgICAweDMyZTQsIE4sIE4pLAotCVBJTkdST1VQKGtiX3JvdzExX3BzMywgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgU0RNTUMyLCAgICAgICBNSU8sICAgICAgICAgIE1JTywgICAgICAgICAgMHgzMmU4LCBOLCBOKSwKLQlQSU5HUk9VUChrYl9yb3cxMl9wczQsICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICBNSU8sICAgICAgICAgIDB4MzJlYywgTiwgTiksCi0JUElOR1JPVVAoa2Jfcm93MTNfcHM1LCAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgTUlPLCAgICAgICAgICAweDMyZjAsIE4sIE4pLAotCVBJTkdST1VQKGtiX3JvdzE0X3BzNiwgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgU0RNTUMyLCAgICAgICBNSU8sICAgICAgICAgIE1JTywgICAgICAgICAgMHgzMmY0LCBOLCBOKSwKLQlQSU5HUk9VUChrYl9yb3cxNV9wczcsICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICBNSU8sICAgICAgICAgIDB4MzJmOCwgTiwgTiksCi0JUElOR1JPVVAodmlfcGNsa19wdDAsICAgICAgICAgIFJTVkQxLCAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxNTQsIE4sIFkpLAotCVBJTkdST1VQKHZpX21jbGtfcHQxLCAgICAgICAgICBWSSwgICAgICAgICAgIFZJX0FMVDEsICAgICAgVklfQUxUMiwgICAgICBWSV9BTFQzLCAgICAgIFZJX0FMVDMsICAgICAgMHgzMTU4LCBOLCBZKSwKLQlQSU5HUk9VUCh2aV9kMTBfcHQyLCAgICAgICAgICAgRERSLCAgICAgICAgICBSU1ZEMiwgICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE0YywgTiwgWSksCi0JUElOR1JPVVAodmlfZDExX3B0MywgICAgICAgICAgIEREUiwgICAgICAgICAgUlNWRDIsICAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxNTAsIE4sIFkpLAotCVBJTkdST1VQKHZpX2QwX3B0NCwgICAgICAgICAgICBERFIsICAgICAgICAgIFJTVkQyLCAgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTI0LCBOLCBZKSwKLQlQSU5HUk9VUChnZW4yX2kyY19zY2xfcHQ1LCAgICAgSTJDMiwgICAgICAgICBIRENQLCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzI1MCwgWSwgTiksCi0JUElOR1JPVVAoZ2VuMl9pMmNfc2RhX3B0NiwgICAgIEkyQzIsICAgICAgICAgSERDUCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyNTQsIFksIE4pLAotCVBJTkdST1VQKHNkbW1jNF9jbWRfcHQ3LCAgICAgICBJMkMzLCAgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIFNETU1DNCwgICAgICAgMHgzMjVjLCBOLCBZKSwKLQlQSU5HUk9VUChwdTAsICAgICAgICAgICAgICAgICAgT1dSLCAgICAgICAgICBVQVJUQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE4NCwgTiwgTiksCi0JUElOR1JPVVAocHUxLCAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgICAgVUFSVEEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxODgsIE4sIE4pLAotCVBJTkdST1VQKHB1MiwgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICAgIFVBUlRBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMThjLCBOLCBOKSwKLQlQSU5HUk9VUChwdTMsICAgICAgICAgICAgICAgICAgUFdNMCwgICAgICAgICBVQVJUQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE5MCwgTiwgTiksCi0JUElOR1JPVVAocHU0LCAgICAgICAgICAgICAgICAgIFBXTTEsICAgICAgICAgVUFSVEEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxOTQsIE4sIE4pLAotCVBJTkdST1VQKHB1NSwgICAgICAgICAgICAgICAgICBQV00yLCAgICAgICAgIFVBUlRBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTk4LCBOLCBOKSwKLQlQSU5HUk9VUChwdTYsICAgICAgICAgICAgICAgICAgUFdNMywgICAgICAgICBVQVJUQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE5YywgTiwgTiksCi0JUElOR1JPVVAoanRhZ19ydGNrX3B1NywgICAgICAgIFJUQ0ssICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyYjAsIE4sIE4pLAotCVBJTkdST1VQKHB2MCwgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDQwLCBOLCBOKSwKLQlQSU5HUk9VUChwdjEsICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA0NCwgTiwgTiksCi0JUElOR1JPVVAocHYyLCAgICAgICAgICAgICAgICAgIE9XUiwgICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMwNjAsIE4sIE4pLAotCVBJTkdST1VQKHB2MywgICAgICAgICAgICAgICAgICBDTEtfMTJNX09VVCwgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDY0LCBOLCBOKSwKLQlQSU5HUk9VUChkZGNfc2NsX3B2NCwgICAgICAgICAgSTJDNCwgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzExNCwgTiwgTiksCi0JUElOR1JPVVAoZGRjX3NkYV9wdjUsICAgICAgICAgIEkyQzQsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMTgsIE4sIE4pLAotCVBJTkdST1VQKGNydF9oc3luY19wdjYsICAgICAgICBDUlQsICAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTFjLCBOLCBOKSwKLQlQSU5HUk9VUChjcnRfdnN5bmNfcHY3LCAgICAgICAgQ1JULCAgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEyMCwgTiwgTiksCi0JUElOR1JPVVAobGNkX2NzMV9uX3B3MCwgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTUEk1LCAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMDQsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9tMV9wdzEsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTA4LCBOLCBOKSwKLQlQSU5HUk9VUChzcGkyX2NzMV9uX3B3MiwgICAgICAgU1BJMywgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTJfQUxULCAgICAgSTJDMSwgICAgICAgICBJMkMxLCAgICAgICAgIDB4MzM4OCwgTiwgTiksCi0JUElOR1JPVVAoc3BpMl9jczJfbl9wdzMsICAgICAgIFNQSTMsICAgICAgICAgU1BJMiwgICAgICAgICBTUEkyX0FMVCwgICAgIEkyQzEsICAgICAgICAgSTJDMSwgICAgICAgICAweDMzOGMsIE4sIE4pLAotCVBJTkdST1VQKGNsazFfb3V0X3B3NCwgICAgICAgICBFWFRQRVJJUEgxLCAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzRjLCBOLCBOKSwKLQlQSU5HUk9VUChjbGsyX291dF9wdzUsICAgICAgICAgRVhUUEVSSVBIMiwgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA2OCwgTiwgTiksCi0JUElOR1JPVVAodWFydDNfdHhkX3B3NiwgICAgICAgIFVBUlRDLCAgICAgICAgUlNWRDIsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMxNzQsIE4sIE4pLAotCVBJTkdST1VQKHVhcnQzX3J4ZF9wdzcsICAgICAgICBVQVJUQywgICAgICAgIFJTVkQyLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTc4LCBOLCBOKSwKLQlQSU5HUk9VUChzcGkyX21vc2lfcHgwLCAgICAgICAgU1BJNiwgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTMsICAgICAgICAgR01JLCAgICAgICAgICBHTUksICAgICAgICAgIDB4MzM2OCwgTiwgTiksCi0JUElOR1JPVVAoc3BpMl9taXNvX3B4MSwgICAgICAgIFNQSTYsICAgICAgICAgU1BJMiwgICAgICAgICBTUEkzLCAgICAgICAgIEdNSSwgICAgICAgICAgR01JLCAgICAgICAgICAweDMzNmMsIE4sIE4pLAotCVBJTkdST1VQKHNwaTJfc2NrX3B4MiwgICAgICAgICBTUEk2LCAgICAgICAgIFNQSTIsICAgICAgICAgU1BJMywgICAgICAgICBHTUksICAgICAgICAgIEdNSSwgICAgICAgICAgMHgzMzc0LCBOLCBOKSwKLQlQSU5HUk9VUChzcGkyX2NzMF9uX3B4MywgICAgICAgU1BJNiwgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTMsICAgICAgICAgR01JLCAgICAgICAgICBHTUksICAgICAgICAgIDB4MzM3MCwgTiwgTiksCi0JUElOR1JPVVAoc3BpMV9tb3NpX3B4NCwgICAgICAgIFNQSTIsICAgICAgICAgU1BJMSwgICAgICAgICBTUEkyX0FMVCwgICAgIEdNSSwgICAgICAgICAgR01JLCAgICAgICAgICAweDMzNzgsIE4sIE4pLAotCVBJTkdST1VQKHNwaTFfc2NrX3B4NSwgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTEsICAgICAgICAgU1BJMl9BTFQsICAgICBHTUksICAgICAgICAgIEdNSSwgICAgICAgICAgMHgzMzdjLCBOLCBOKSwKLQlQSU5HUk9VUChzcGkxX2NzMF9uX3B4NiwgICAgICAgU1BJMiwgICAgICAgICBTUEkxLCAgICAgICAgIFNQSTJfQUxULCAgICAgR01JLCAgICAgICAgICBHTUksICAgICAgICAgIDB4MzM4MCwgTiwgTiksCi0JUElOR1JPVVAoc3BpMV9taXNvX3B4NywgICAgICAgIFNQSTMsICAgICAgICAgU1BJMSwgICAgICAgICBTUEkyX0FMVCwgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzODQsIE4sIE4pLAotCVBJTkdST1VQKHVscGlfY2xrX3B5MCwgICAgICAgICBTUEkxLCAgICAgICAgIFJTVkQyLCAgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgIFJTVkQyLCAgICAgICAgMHgzMDIwLCBOLCBOKSwKLQlQSU5HUk9VUCh1bHBpX2Rpcl9weTEsICAgICAgICAgU1BJMSwgICAgICAgICBSU1ZEMiwgICAgICAgIFVBUlRELCAgICAgICAgVUxQSSwgICAgICAgICBSU1ZEMiwgICAgICAgIDB4MzAyNCwgTiwgTiksCi0JUElOR1JPVVAodWxwaV9ueHRfcHkyLCAgICAgICAgIFNQSTEsICAgICAgICAgUlNWRDIsICAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICAgUlNWRDIsICAgICAgICAweDMwMjgsIE4sIE4pLAotCVBJTkdST1VQKHVscGlfc3RwX3B5MywgICAgICAgICBTUEkxLCAgICAgICAgIFJTVkQyLCAgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgIFJTVkQyLCAgICAgICAgMHgzMDJjLCBOLCBOKSwKLQlQSU5HUk9VUChzZG1tYzFfZGF0M19weTQsICAgICAgU0RNTUMxLCAgICAgICBSU1ZEMiwgICAgICAgIFVBUlRFLCAgICAgICAgVUFSVEEsICAgICAgICBSU1ZEMiwgICAgICAgIDB4MzA1MCwgTiwgTiksCi0JUElOR1JPVVAoc2RtbWMxX2RhdDJfcHk1LCAgICAgIFNETU1DMSwgICAgICAgUlNWRDIsICAgICAgICBVQVJURSwgICAgICAgIFVBUlRBLCAgICAgICAgUlNWRDIsICAgICAgICAweDMwNTQsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jMV9kYXQxX3B5NiwgICAgICBTRE1NQzEsICAgICAgIFJTVkQyLCAgICAgICAgVUFSVEUsICAgICAgICBVQVJUQSwgICAgICAgIFJTVkQyLCAgICAgICAgMHgzMDU4LCBOLCBOKSwKLQlQSU5HUk9VUChzZG1tYzFfZGF0MF9weTcsICAgICAgU0RNTUMxLCAgICAgICBSU1ZEMiwgICAgICAgIFVBUlRFLCAgICAgICAgVUFSVEEsICAgICAgICBSU1ZEMiwgICAgICAgIDB4MzA1YywgTiwgTiksCi0JUElOR1JPVVAoc2RtbWMxX2Nsa19wejAsICAgICAgIFNETU1DMSwgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFVBUlRBLCAgICAgICAgUlNWRDMsICAgICAgICAweDMwNDgsIE4sIE4pLAotCVBJTkdST1VQKHNkbW1jMV9jbWRfcHoxLCAgICAgICBTRE1NQzEsICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBVQVJUQSwgICAgICAgIFJTVkQzLCAgICAgICAgMHgzMDRjLCBOLCBOKSwKLQlQSU5HUk9VUChsY2Rfc2Rpbl9wejIsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNQSTUsICAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA3OCwgTiwgTiksCi0JUElOR1JPVVAobGNkX3dyX25fcHozLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTUEk1LCAgICAgICAgIEhEQ1AsICAgICAgICAgSERDUCwgICAgICAgICAweDMwODAsIE4sIE4pLAotCVBJTkdST1VQKGxjZF9zY2tfcHo0LCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgU1BJNSwgICAgICAgICBIRENQLCAgICAgICAgIEhEQ1AsICAgICAgICAgMHgzMDhjLCBOLCBOKSwKLQlQSU5HUk9VUChzeXNfY2xrX3JlcV9wejUsICAgICAgU1lTQ0xLLCAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMyMCwgTiwgTiksCi0JUElOR1JPVVAocHdyX2kyY19zY2xfcHo2LCAgICAgIEkyQ1BXUiwgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMyYjQsIFksIE4pLAotCVBJTkdST1VQKHB3cl9pMmNfc2RhX3B6NywgICAgICBJMkNQV1IsICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMmI4LCBZLCBOKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0MF9wYWEwLCAgICAgVUFSVEUsICAgICAgICBTUEkzLCAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUM0LCAgICAgICBTRE1NQzQsICAgICAgIDB4MzI2MCwgTiwgWSksCi0JUElOR1JPVVAoc2RtbWM0X2RhdDFfcGFhMSwgICAgIFVBUlRFLCAgICAgICAgU1BJMywgICAgICAgICBHTUksICAgICAgICAgIFNETU1DNCwgICAgICAgU0RNTUM0LCAgICAgICAweDMyNjQsIE4sIFkpLAotCVBJTkdST1VQKHNkbW1jNF9kYXQyX3BhYTIsICAgICBVQVJURSwgICAgICAgIFNQSTMsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIFNETU1DNCwgICAgICAgMHgzMjY4LCBOLCBZKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0M19wYWEzLCAgICAgVUFSVEUsICAgICAgICBTUEkzLCAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUM0LCAgICAgICBTRE1NQzQsICAgICAgIDB4MzI2YywgTiwgWSksCi0JUElOR1JPVVAoc2RtbWM0X2RhdDRfcGFhNCwgICAgIEkyQzMsICAgICAgICAgSTJTNCwgICAgICAgICBHTUksICAgICAgICAgIFNETU1DNCwgICAgICAgU0RNTUM0LCAgICAgICAweDMyNzAsIE4sIFkpLAotCVBJTkdST1VQKHNkbW1jNF9kYXQ1X3BhYTUsICAgICBWR1AzLCAgICAgICAgIEkyUzQsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIFNETU1DNCwgICAgICAgMHgzMjc0LCBOLCBZKSwKLQlQSU5HUk9VUChzZG1tYzRfZGF0Nl9wYWE2LCAgICAgVkdQNCwgICAgICAgICBJMlM0LCAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUM0LCAgICAgICBTRE1NQzQsICAgICAgIDB4MzI3OCwgTiwgWSksCi0JUElOR1JPVVAoc2RtbWM0X2RhdDdfcGFhNywgICAgIFZHUDUsICAgICAgICAgSTJTNCwgICAgICAgICBHTUksICAgICAgICAgIFNETU1DNCwgICAgICAgU0RNTUM0LCAgICAgICAweDMyN2MsIE4sIFkpLAotCVBJTkdST1VQKHBiYjAsICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBTRE1NQzQsICAgICAgIFJTVkQzLCAgICAgICAgMHgzMjhjLCBOLCBOKSwKLQlQSU5HUk9VUChjYW1faTJjX3NjbF9wYmIxLCAgICAgVkdQMSwgICAgICAgICBJMkMzLCAgICAgICAgIFJTVkQzLCAgICAgICAgU0RNTUM0LCAgICAgICBSU1ZEMywgICAgICAgIDB4MzI5MCwgWSwgTiksCi0JUElOR1JPVVAoY2FtX2kyY19zZGFfcGJiMiwgICAgIFZHUDIsICAgICAgICAgSTJDMywgICAgICAgICBSU1ZEMywgICAgICAgIFNETU1DNCwgICAgICAgUlNWRDMsICAgICAgICAweDMyOTQsIFksIE4pLAotCVBJTkdST1VQKHBiYjMsICAgICAgICAgICAgICAgICBWR1AzLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTRE1NQzQsICAgICAgIFNETU1DNCwgICAgICAgMHgzMjk4LCBOLCBOKSwKLQlQSU5HUk9VUChwYmI0LCAgICAgICAgICAgICAgICAgVkdQNCwgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgU0RNTUM0LCAgICAgICBTRE1NQzQsICAgICAgIDB4MzI5YywgTiwgTiksCi0JUElOR1JPVVAocGJiNSwgICAgICAgICAgICAgICAgIFZHUDUsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNETU1DNCwgICAgICAgU0RNTUM0LCAgICAgICAweDMyYTAsIE4sIE4pLAotCVBJTkdST1VQKHBiYjYsICAgICAgICAgICAgICAgICBWR1A2LCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTRE1NQzQsICAgICAgIFNETU1DNCwgICAgICAgMHgzMmE0LCBOLCBOKSwKLQlQSU5HUk9VUChwYmI3LCAgICAgICAgICAgICAgICAgSTJTNCwgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgU0RNTUM0LCAgICAgICBSU1ZEMywgICAgICAgIDB4MzJhOCwgTiwgTiksCi0JUElOR1JPVVAoY2FtX21jbGtfcGNjMCwgICAgICAgIFZJLCAgICAgICAgICAgVklfQUxUMSwgICAgICBWSV9BTFQzLCAgICAgIFNETU1DNCwgICAgICAgU0RNTUM0LCAgICAgICAweDMyODQsIE4sIE4pLAotCVBJTkdST1VQKHBjYzEsICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBTRE1NQzQsICAgICAgIFJTVkQzLCAgICAgICAgMHgzMjg4LCBOLCBOKSwKLQlQSU5HUk9VUChwY2MyLCAgICAgICAgICAgICAgICAgSTJTNCwgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzJhYywgTiwgTiksCi0JUElOR1JPVVAoc2RtbWM0X3JzdF9uX3BjYzMsICAgIFZHUDYsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFNETU1DNCwgICAgICAgUlNWRDMsICAgICAgICAweDMyODAsIE4sIFkpLAotCVBJTkdST1VQKHNkbW1jNF9jbGtfcGNjNCwgICAgICBJTlZBTElELCAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIFNETU1DNCwgICAgICAgMHgzMjU4LCBOLCBZKSwKLQlQSU5HUk9VUChjbGsyX3JlcV9wY2M1LCAgICAgICAgREFQLCAgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA2YywgTiwgTiksCi0JUElOR1JPVVAocGV4X2wyX3JzdF9uX3BjYzYsICAgIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzZDgsIE4sIE4pLAotCVBJTkdST1VQKHBleF9sMl9jbGtyZXFfbl9wY2M3LCBQQ0lFLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2RjLCBOLCBOKSwKLQlQSU5HUk9VUChwZXhfbDBfcHJzbnRfbl9wZGQwLCAgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNiOCwgTiwgTiksCi0JUElOR1JPVVAocGV4X2wwX3JzdF9uX3BkZDEsICAgIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzYmMsIE4sIE4pLAotCVBJTkdST1VQKHBleF9sMF9jbGtyZXFfbl9wZGQyLCBQQ0lFLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2MwLCBOLCBOKSwKLQlQSU5HUk9VUChwZXhfd2FrZV9uX3BkZDMsICAgICAgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNjNCwgTiwgTiksCi0JUElOR1JPVVAocGV4X2wxX3Byc250X25fcGRkNCwgIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzYzgsIE4sIE4pLAotCVBJTkdST1VQKHBleF9sMV9yc3Rfbl9wZGQ1LCAgICBQQ0lFLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2NjLCBOLCBOKSwKLQlQSU5HUk9VUChwZXhfbDFfY2xrcmVxX25fcGRkNiwgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNkMCwgTiwgTiksCi0JUElOR1JPVVAocGV4X2wyX3Byc250X25fcGRkNywgIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzZDQsIE4sIE4pLAotCVBJTkdST1VQKGNsazNfb3V0X3BlZTAsICAgICAgICBFWFRQRVJJUEgzLCAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWI4LCBOLCBOKSwKLQlQSU5HUk9VUChjbGszX3JlcV9wZWUxLCAgICAgICAgREVWMywgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFiYywgTiwgTiksCi0JUElOR1JPVVAoY2xrMV9yZXFfcGVlMiwgICAgICAgIERBUCwgICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzNDgsIE4sIE4pLAotCVBJTkdST1VQKGhkbWlfY2VjX3BlZTMsICAgICAgICBDRUMsICAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2UwLCBZLCBOKSwKLQlQSU5HUk9VUChjbGtfMzJrX2luLCAgICAgICAgICAgQ0xLXzMyS19JTiwgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMzMCwgTiwgTiksCi0JUElOR1JPVVAoY29yZV9wd3JfcmVxLCAgICAgICAgIENPUkVfUFdSX1JFUSwgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzMjQsIE4sIE4pLAotCVBJTkdST1VQKGNwdV9wd3JfcmVxLCAgICAgICAgICBDUFVfUFdSX1JFUSwgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzI4LCBOLCBOKSwKLQlQSU5HUk9VUChvd3IsICAgICAgICAgICAgICAgICAgT1dSLCAgICAgICAgICBDRUMsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMzNCwgTiwgTiksCi0JUElOR1JPVVAocHdyX2ludF9uLCAgICAgICAgICAgIFBXUl9JTlRfTiwgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgUlNWRDQsICAgICAgICAweDMzMmMsIE4sIE4pLAorCS8qICAgICAgIHBnX25hbWUsICAgICAgICAgICAgICBmMCwgICAgICAgICAgIGYxLCAgICAgICAgICAgZjIsICAgICAgICAgICBmMywgICAgICAgICAgIHIsICAgICAgb2QsIGlvciAqLworCVBJTkdST1VQKGNsa18zMmtfb3V0X3BhMCwgICAgICBCTElOSywgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMxYywgTiwgTiksCisJUElOR1JPVVAodWFydDNfY3RzX25fcGExLCAgICAgIFVBUlRDLCAgICAgICAgUlNWRDIsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTdjLCBOLCBOKSwKKwlQSU5HUk9VUChkYXAyX2ZzX3BhMiwgICAgICAgICAgSTJTMSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgR01JLCAgICAgICAgICAweDMzNTgsIE4sIE4pLAorCVBJTkdST1VQKGRhcDJfc2Nsa19wYTMsICAgICAgICBJMlMxLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBHTUksICAgICAgICAgIDB4MzM2NCwgTiwgTiksCisJUElOR1JPVVAoZGFwMl9kaW5fcGE0LCAgICAgICAgIEkyUzEsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIEdNSSwgICAgICAgICAgMHgzMzVjLCBOLCBOKSwKKwlQSU5HUk9VUChkYXAyX2RvdXRfcGE1LCAgICAgICAgSTJTMSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgR01JLCAgICAgICAgICAweDMzNjAsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jM19jbGtfcGE2LCAgICAgICBVQVJUQSwgICAgICAgIFBXTTIsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkzLCAgICAgICAgIDB4MzM5MCwgTiwgTiksCisJUElOR1JPVVAoc2RtbWMzX2NtZF9wYTcsICAgICAgIFVBUlRBLCAgICAgICAgUFdNMywgICAgICAgICBTRE1NQzMsICAgICAgIFNQSTIsICAgICAgICAgMHgzMzk0LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYTE3X3BiMCwgICAgICAgICAgVUFSVEQsICAgICAgICBTUEk0LCAgICAgICAgIEdNSSwgICAgICAgICAgRFRWLCAgICAgICAgICAweDMyMzQsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hMThfcGIxLCAgICAgICAgICBVQVJURCwgICAgICAgIFNQSTQsICAgICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgIDB4MzIzOCwgTiwgTiksCisJUElOR1JPVVAobGNkX3B3cjBfcGIyLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTUEk1LCAgICAgICAgIEhEQ1AsICAgICAgICAgMHgzMDkwLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfcGNsa19wYjMsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwOTQsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jM19kYXQzX3BiNCwgICAgICBSU1ZEMSwgICAgICAgIFBXTTAsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkzLCAgICAgICAgIDB4MzNhNCwgTiwgTiksCisJUElOR1JPVVAoc2RtbWMzX2RhdDJfcGI1LCAgICAgIFJTVkQxLCAgICAgICAgUFdNMSwgICAgICAgICBTRE1NQzMsICAgICAgIFNQSTMsICAgICAgICAgMHgzM2EwLCBOLCBOKSwKKwlQSU5HUk9VUChzZG1tYzNfZGF0MV9wYjYsICAgICAgUlNWRDEsICAgICAgICBSU1ZEMiwgICAgICAgIFNETU1DMywgICAgICAgU1BJMywgICAgICAgICAweDMzOWMsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jM19kYXQwX3BiNywgICAgICBSU1ZEMSwgICAgICAgIFJTVkQyLCAgICAgICAgU0RNTUMzLCAgICAgICBTUEkzLCAgICAgICAgIDB4MzM5OCwgTiwgTiksCisJUElOR1JPVVAodWFydDNfcnRzX25fcGMwLCAgICAgIFVBUlRDLCAgICAgICAgUFdNMCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTgwLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfcHdyMV9wYzEsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwNzAsIE4sIE4pLAorCVBJTkdST1VQKHVhcnQyX3R4ZF9wYzIsICAgICAgICBVQVJUQiwgICAgICAgIFNQRElGLCAgICAgICAgVUFSVEEsICAgICAgICBTUEk0LCAgICAgICAgIDB4MzE2OCwgTiwgTiksCisJUElOR1JPVVAodWFydDJfcnhkX3BjMywgICAgICAgIFVBUlRCLCAgICAgICAgU1BESUYsICAgICAgICBVQVJUQSwgICAgICAgIFNQSTQsICAgICAgICAgMHgzMTY0LCBOLCBOKSwKKwlQSU5HUk9VUChnZW4xX2kyY19zY2xfcGM0LCAgICAgSTJDMSwgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMxYTQsIFksIE4pLAorCVBJTkdST1VQKGdlbjFfaTJjX3NkYV9wYzUsICAgICBJMkMxLCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFhMCwgWSwgTiksCisJUElOR1JPVVAobGNkX3B3cjJfcGM2LCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTUEk1LCAgICAgICAgIEhEQ1AsICAgICAgICAgMHgzMDc0LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfd3Bfbl9wYzcsICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgR01JX0FMVCwgICAgICAweDMxYzAsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jM19kYXQ1X3BkMCwgICAgICBQV00wLCAgICAgICAgIFNQSTQsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkyLCAgICAgICAgIDB4MzNhYywgTiwgTiksCisJUElOR1JPVVAoc2RtbWMzX2RhdDRfcGQxLCAgICAgIFBXTTEsICAgICAgICAgU1BJNCwgICAgICAgICBTRE1NQzMsICAgICAgIFNQSTIsICAgICAgICAgMHgzM2E4LCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZGMxX3BkMiwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMGMsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jM19kYXQ2X3BkMywgICAgICBTUERJRiwgICAgICAgIFNQSTQsICAgICAgICAgU0RNTUMzLCAgICAgICBTUEkyLCAgICAgICAgIDB4MzNiMCwgTiwgTiksCisJUElOR1JPVVAoc2RtbWMzX2RhdDdfcGQ0LCAgICAgIFNQRElGLCAgICAgICAgU1BJNCwgICAgICAgICBTRE1NQzMsICAgICAgIFNQSTIsICAgICAgICAgMHgzM2I0LCBOLCBOKSwKKwlQSU5HUk9VUCh2aV9kMV9wZDUsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxMjgsIE4sIFkpLAorCVBJTkdST1VQKHZpX3ZzeW5jX3BkNiwgICAgICAgICBERFIsICAgICAgICAgIFJTVkQyLCAgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE1YywgTiwgWSksCisJUElOR1JPVVAodmlfaHN5bmNfcGQ3LCAgICAgICAgIEREUiwgICAgICAgICAgUlNWRDIsICAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTYwLCBOLCBZKSwKKwlQSU5HUk9VUChsY2RfZDBfcGUwLCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYTQsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kMV9wZTEsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBhOCwgTiwgTiksCisJUElOR1JPVVAobGNkX2QyX3BlMiwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGFjLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDNfcGUzLCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYjAsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kNF9wZTQsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBiNCwgTiwgTiksCisJUElOR1JPVVAobGNkX2Q1X3BlNSwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGI4LCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDZfcGU2LCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYmMsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kN19wZTcsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBjMCwgTiwgTiksCisJUElOR1JPVVAobGNkX2Q4X3BmMCwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGM0LCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDlfcGYxLCAgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwYzgsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kMTBfcGYyLCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBjYywgTiwgTiksCisJUElOR1JPVVAobGNkX2QxMV9wZjMsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGQwLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDEyX3BmNCwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZDQsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kMTNfcGY1LCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBkOCwgTiwgTiksCisJUElOR1JPVVAobGNkX2QxNF9wZjYsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGRjLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDE1X3BmNywgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZTAsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hZDBfcGcwLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFmMCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2FkMV9wZzEsICAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWY0LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYWQyX3BnMiwgICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxZjgsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hZDNfcGczLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFmYywgTiwgTiksCisJUElOR1JPVVAoZ21pX2FkNF9wZzQsICAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjAwLCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYWQ1X3BnNSwgICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyMDQsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hZDZfcGc2LCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIwOCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2FkN19wZzcsICAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjBjLCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYWQ4X3BoMCwgICAgICAgICAgUFdNMCwgICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyMTAsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hZDlfcGgxLCAgICAgICAgICBQV00xLCAgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIxNCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2FkMTBfcGgyLCAgICAgICAgIFBXTTIsICAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjE4LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYWQxMV9waDMsICAgICAgICAgUFdNMywgICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyMWMsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hZDEyX3BoNCwgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIyMCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2FkMTNfcGg1LCAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjI0LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYWQxNF9waDYsICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyMjgsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hZDE1X3BoNywgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIyYywgTiwgTiksCisJUElOR1JPVVAoZ21pX3dyX25fcGkwLCAgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjQwLCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfb2Vfbl9waTEsICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyNDQsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9kcXNfcGkyLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzI0OCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2NzNl9uX3BpMywgICAgICAgIE5BTkQsICAgICAgICAgTkFORF9BTFQsICAgICBHTUksICAgICAgICAgIFNBVEEsICAgICAgICAgMHgzMWU4LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfcnN0X25fcGk0LCAgICAgICAgTkFORCwgICAgICAgICBOQU5EX0FMVCwgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyNGMsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9pb3JkeV9waTUsICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFjNCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2NzN19uX3BpNiwgICAgICAgIE5BTkQsICAgICAgICAgTkFORF9BTFQsICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICAgMHgzMWVjLCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfd2FpdF9waTcsICAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxYzgsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9jczBfbl9wajAsICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBEVFYsICAgICAgICAgIDB4MzFkNCwgTiwgTiksCisJUElOR1JPVVAobGNkX2RlX3BqMSwgICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDk4LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfY3MxX25fcGoyLCAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgRFRWLCAgICAgICAgICAweDMxZDgsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9oc3luY19wajMsICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA5YywgTiwgTiksCisJUElOR1JPVVAobGNkX3ZzeW5jX3BqNCwgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGEwLCBOLCBOKSwKKwlQSU5HUk9VUCh1YXJ0Ml9jdHNfbl9wajUsICAgICAgVUFSVEEsICAgICAgICBVQVJUQiwgICAgICAgIEdNSSwgICAgICAgICAgU1BJNCwgICAgICAgICAweDMxNzAsIE4sIE4pLAorCVBJTkdST1VQKHVhcnQyX3J0c19uX3BqNiwgICAgICBVQVJUQSwgICAgICAgIFVBUlRCLCAgICAgICAgR01JLCAgICAgICAgICBTUEk0LCAgICAgICAgIDB4MzE2YywgTiwgTiksCisJUElOR1JPVVAoZ21pX2ExNl9wajcsICAgICAgICAgIFVBUlRELCAgICAgICAgU1BJNCwgICAgICAgICBHTUksICAgICAgICAgIEdNSV9BTFQsICAgICAgMHgzMjMwLCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfYWR2X25fcGswLCAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxY2MsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9jbGtfcGsxLCAgICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFkMCwgTiwgTiksCisJUElOR1JPVVAoZ21pX2NzNF9uX3BrMiwgICAgICAgIFJTVkQxLCAgICAgICAgTkFORCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWU0LCBOLCBOKSwKKwlQSU5HUk9VUChnbWlfY3MyX25fcGszLCAgICAgICAgUlNWRDEsICAgICAgICBOQU5ELCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxZGMsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9jczNfbl9wazQsICAgICAgICBSU1ZEMSwgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBHTUlfQUxULCAgICAgIDB4MzFlMCwgTiwgTiksCisJUElOR1JPVVAoc3BkaWZfb3V0X3BrNSwgICAgICAgIFNQRElGLCAgICAgICAgUlNWRDIsICAgICAgICBJMkMxLCAgICAgICAgIFNETU1DMiwgICAgICAgMHgzMzU0LCBOLCBOKSwKKwlQSU5HUk9VUChzcGRpZl9pbl9wazYsICAgICAgICAgU1BESUYsICAgICAgICBIREEsICAgICAgICAgIEkyQzEsICAgICAgICAgU0RNTUMyLCAgICAgICAweDMzNTAsIE4sIE4pLAorCVBJTkdST1VQKGdtaV9hMTlfcGs3LCAgICAgICAgICBVQVJURCwgICAgICAgIFNQSTQsICAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzIzYywgTiwgTiksCisJUElOR1JPVVAodmlfZDJfcGwwLCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTJjLCBOLCBZKSwKKwlQSU5HUk9VUCh2aV9kM19wbDEsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxMzAsIE4sIFkpLAorCVBJTkdST1VQKHZpX2Q0X3BsMiwgICAgICAgICAgICBERFIsICAgICAgICAgIFNETU1DMiwgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEzNCwgTiwgWSksCisJUElOR1JPVVAodmlfZDVfcGwzLCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTM4LCBOLCBZKSwKKwlQSU5HUk9VUCh2aV9kNl9wbDQsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxM2MsIE4sIFkpLAorCVBJTkdST1VQKHZpX2Q3X3BsNSwgICAgICAgICAgICBERFIsICAgICAgICAgIFNETU1DMiwgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE0MCwgTiwgWSksCisJUElOR1JPVVAodmlfZDhfcGw2LCAgICAgICAgICAgIEREUiwgICAgICAgICAgU0RNTUMyLCAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTQ0LCBOLCBZKSwKKwlQSU5HUk9VUCh2aV9kOV9wbDcsICAgICAgICAgICAgRERSLCAgICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxNDgsIE4sIFkpLAorCVBJTkdST1VQKGxjZF9kMTZfcG0wLCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBlNCwgTiwgTiksCisJUElOR1JPVVAobGNkX2QxN19wbTEsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGU4LCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDE4X3BtMiwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZWMsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kMTlfcG0zLCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBmMCwgTiwgTiksCisJUElOR1JPVVAobGNkX2QyMF9wbTQsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMGY0LCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZDIxX3BtNSwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwZjgsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9kMjJfcG02LCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzBmYywgTiwgTiksCisJUElOR1JPVVAobGNkX2QyM19wbTcsICAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTAwLCBOLCBOKSwKKwlQSU5HUk9VUChkYXAxX2ZzX3BuMCwgICAgICAgICAgSTJTMCwgICAgICAgICBIREEsICAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUMyLCAgICAgICAweDMzMzgsIE4sIE4pLAorCVBJTkdST1VQKGRhcDFfZGluX3BuMSwgICAgICAgICBJMlMwLCAgICAgICAgIEhEQSwgICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzIsICAgICAgIDB4MzMzYywgTiwgTiksCisJUElOR1JPVVAoZGFwMV9kb3V0X3BuMiwgICAgICAgIEkyUzAsICAgICAgICAgSERBLCAgICAgICAgICBHTUksICAgICAgICAgIFNETU1DMiwgICAgICAgMHgzMzQwLCBOLCBOKSwKKwlQSU5HUk9VUChkYXAxX3NjbGtfcG4zLCAgICAgICAgSTJTMCwgICAgICAgICBIREEsICAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUMyLCAgICAgICAweDMzNDQsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9jczBfbl9wbjQsICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgU1BJNSwgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA4NCwgTiwgTiksCisJUElOR1JPVVAobGNkX3Nkb3V0X3BuNSwgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTUEk1LCAgICAgICAgIEhEQ1AsICAgICAgICAgMHgzMDdjLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfZGMwX3BuNiwgICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwODgsIE4sIE4pLAorCVBJTkdST1VQKGhkbWlfaW50X3BuNywgICAgICAgICBIRE1JLCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzExMCwgTiwgTiksCisJUElOR1JPVVAodWxwaV9kYXRhN19wbzAsICAgICAgIFNQSTIsICAgICAgICAgSFNJLCAgICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAgMHgzMDFjLCBOLCBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGEwX3BvMSwgICAgICAgU1BJMywgICAgICAgICBIU0ksICAgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgICAweDMwMDAsIE4sIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTFfcG8yLCAgICAgICBTUEkzLCAgICAgICAgIEhTSSwgICAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAwNCwgTiwgTiksCisJUElOR1JPVVAodWxwaV9kYXRhMl9wbzMsICAgICAgIFNQSTMsICAgICAgICAgSFNJLCAgICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAgMHgzMDA4LCBOLCBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGEzX3BvNCwgICAgICAgU1BJMywgICAgICAgICBIU0ksICAgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgICAweDMwMGMsIE4sIE4pLAorCVBJTkdST1VQKHVscGlfZGF0YTRfcG81LCAgICAgICBTUEkyLCAgICAgICAgIEhTSSwgICAgICAgICAgVUFSVEEsICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAxMCwgTiwgTiksCisJUElOR1JPVVAodWxwaV9kYXRhNV9wbzYsICAgICAgIFNQSTIsICAgICAgICAgSFNJLCAgICAgICAgICBVQVJUQSwgICAgICAgIFVMUEksICAgICAgICAgMHgzMDE0LCBOLCBOKSwKKwlQSU5HUk9VUCh1bHBpX2RhdGE2X3BvNywgICAgICAgU1BJMiwgICAgICAgICBIU0ksICAgICAgICAgIFVBUlRBLCAgICAgICAgVUxQSSwgICAgICAgICAweDMwMTgsIE4sIE4pLAorCVBJTkdST1VQKGRhcDNfZnNfcHAwLCAgICAgICAgICBJMlMyLCAgICAgICAgIFJTVkQyLCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIDB4MzAzMCwgTiwgTiksCisJUElOR1JPVVAoZGFwM19kaW5fcHAxLCAgICAgICAgIEkyUzIsICAgICAgICAgUlNWRDIsICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgMHgzMDM0LCBOLCBOKSwKKwlQSU5HUk9VUChkYXAzX2RvdXRfcHAyLCAgICAgICAgSTJTMiwgICAgICAgICBSU1ZEMiwgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICAweDMwMzgsIE4sIE4pLAorCVBJTkdST1VQKGRhcDNfc2Nsa19wcDMsICAgICAgICBJMlMyLCAgICAgICAgIFJTVkQyLCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIDB4MzAzYywgTiwgTiksCisJUElOR1JPVVAoZGFwNF9mc19wcDQsICAgICAgICAgIEkyUzMsICAgICAgICAgUlNWRDIsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWE4LCBOLCBOKSwKKwlQSU5HUk9VUChkYXA0X2Rpbl9wcDUsICAgICAgICAgSTJTMywgICAgICAgICBSU1ZEMiwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxYWMsIE4sIE4pLAorCVBJTkdST1VQKGRhcDRfZG91dF9wcDYsICAgICAgICBJMlMzLCAgICAgICAgIFJTVkQyLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFiMCwgTiwgTiksCisJUElOR1JPVVAoZGFwNF9zY2xrX3BwNywgICAgICAgIEkyUzMsICAgICAgICAgUlNWRDIsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWI0LCBOLCBOKSwKKwlQSU5HUk9VUChrYl9jb2wwX3BxMCwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFRSQUNFLCAgICAgICAgVEVTVCwgICAgICAgICAweDMyZmMsIE4sIE4pLAorCVBJTkdST1VQKGtiX2NvbDFfcHExLCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBURVNULCAgICAgICAgIDB4MzMwMCwgTiwgTiksCisJUElOR1JPVVAoa2JfY29sMl9wcTIsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBUUkFDRSwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzA0LCBOLCBOKSwKKwlQSU5HUk9VUChrYl9jb2wzX3BxMywgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFRSQUNFLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzMDgsIE4sIE4pLAorCVBJTkdST1VQKGtiX2NvbDRfcHE0LCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMwYywgTiwgTiksCisJUElOR1JPVVAoa2JfY29sNV9wcTUsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBUUkFDRSwgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzEwLCBOLCBOKSwKKwlQSU5HUk9VUChrYl9jb2w2X3BxNiwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFRSQUNFLCAgICAgICAgTUlPLCAgICAgICAgICAweDMzMTQsIE4sIE4pLAorCVBJTkdST1VQKGtiX2NvbDdfcHE3LCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBNSU8sICAgICAgICAgIDB4MzMxOCwgTiwgTiksCisJUElOR1JPVVAoa2Jfcm93MF9wcjAsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMmJjLCBOLCBOKSwKKwlQSU5HUk9VUChrYl9yb3cxX3ByMSwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMyYzAsIE4sIE4pLAorCVBJTkdST1VQKGtiX3JvdzJfcHIyLCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzJjNCwgTiwgTiksCisJUElOR1JPVVAoa2Jfcm93M19wcjMsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBSU1ZEMywgICAgICAgIElOVkFMSUQsICAgICAgMHgzMmM4LCBOLCBOKSwKKwlQSU5HUk9VUChrYl9yb3c0X3ByNCwgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFRSQUNFLCAgICAgICAgUlNWRDQsICAgICAgICAweDMyY2MsIE4sIE4pLAorCVBJTkdST1VQKGtiX3JvdzVfcHI1LCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgVFJBQ0UsICAgICAgICBPV1IsICAgICAgICAgIDB4MzJkMCwgTiwgTiksCisJUElOR1JPVVAoa2Jfcm93Nl9wcjYsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgMHgzMmQ0LCBOLCBOKSwKKwlQSU5HUk9VUChrYl9yb3c3X3ByNywgICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICAweDMyZDgsIE4sIE4pLAorCVBJTkdST1VQKGtiX3JvdzhfcHMwLCAgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgU0RNTUMyLCAgICAgICBNSU8sICAgICAgICAgIDB4MzJkYywgTiwgTiksCisJUElOR1JPVVAoa2Jfcm93OV9wczEsICAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgMHgzMmUwLCBOLCBOKSwKKwlQSU5HUk9VUChrYl9yb3cxMF9wczIsICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICAweDMyZTQsIE4sIE4pLAorCVBJTkdST1VQKGtiX3JvdzExX3BzMywgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgU0RNTUMyLCAgICAgICBNSU8sICAgICAgICAgIDB4MzJlOCwgTiwgTiksCisJUElOR1JPVVAoa2Jfcm93MTJfcHM0LCAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgMHgzMmVjLCBOLCBOKSwKKwlQSU5HUk9VUChrYl9yb3cxM19wczUsICAgICAgICAgS0JDLCAgICAgICAgICBOQU5ELCAgICAgICAgIFNETU1DMiwgICAgICAgTUlPLCAgICAgICAgICAweDMyZjAsIE4sIE4pLAorCVBJTkdST1VQKGtiX3JvdzE0X3BzNiwgICAgICAgICBLQkMsICAgICAgICAgIE5BTkQsICAgICAgICAgU0RNTUMyLCAgICAgICBNSU8sICAgICAgICAgIDB4MzJmNCwgTiwgTiksCisJUElOR1JPVVAoa2Jfcm93MTVfcHM3LCAgICAgICAgIEtCQywgICAgICAgICAgTkFORCwgICAgICAgICBTRE1NQzIsICAgICAgIE1JTywgICAgICAgICAgMHgzMmY4LCBOLCBOKSwKKwlQSU5HUk9VUCh2aV9wY2xrX3B0MCwgICAgICAgICAgUlNWRDEsICAgICAgICBTRE1NQzIsICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxNTQsIE4sIFkpLAorCVBJTkdST1VQKHZpX21jbGtfcHQxLCAgICAgICAgICBWSSwgICAgICAgICAgIFZJX0FMVDEsICAgICAgVklfQUxUMiwgICAgICBWSV9BTFQzLCAgICAgIDB4MzE1OCwgTiwgWSksCisJUElOR1JPVVAodmlfZDEwX3B0MiwgICAgICAgICAgIEREUiwgICAgICAgICAgUlNWRDIsICAgICAgICBWSSwgICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTRjLCBOLCBZKSwKKwlQSU5HUk9VUCh2aV9kMTFfcHQzLCAgICAgICAgICAgRERSLCAgICAgICAgICBSU1ZEMiwgICAgICAgIFZJLCAgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxNTAsIE4sIFkpLAorCVBJTkdST1VQKHZpX2QwX3B0NCwgICAgICAgICAgICBERFIsICAgICAgICAgIFJTVkQyLCAgICAgICAgVkksICAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEyNCwgTiwgWSksCisJUElOR1JPVVAoZ2VuMl9pMmNfc2NsX3B0NSwgICAgIEkyQzIsICAgICAgICAgSERDUCwgICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMjUwLCBZLCBOKSwKKwlQSU5HUk9VUChnZW4yX2kyY19zZGFfcHQ2LCAgICAgSTJDMiwgICAgICAgICBIRENQLCAgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMyNTQsIFksIE4pLAorCVBJTkdST1VQKHNkbW1jNF9jbWRfcHQ3LCAgICAgICBJMkMzLCAgICAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIDB4MzI1YywgTiwgWSksCisJUElOR1JPVVAocHUwLCAgICAgICAgICAgICAgICAgIE9XUiwgICAgICAgICAgVUFSVEEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTg0LCBOLCBOKSwKKwlQSU5HUk9VUChwdTEsICAgICAgICAgICAgICAgICAgUlNWRDEsICAgICAgICBVQVJUQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxODgsIE4sIE4pLAorCVBJTkdST1VQKHB1MiwgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICAgIFVBUlRBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE4YywgTiwgTiksCisJUElOR1JPVVAocHUzLCAgICAgICAgICAgICAgICAgIFBXTTAsICAgICAgICAgVUFSVEEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTkwLCBOLCBOKSwKKwlQSU5HUk9VUChwdTQsICAgICAgICAgICAgICAgICAgUFdNMSwgICAgICAgICBVQVJUQSwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxOTQsIE4sIE4pLAorCVBJTkdST1VQKHB1NSwgICAgICAgICAgICAgICAgICBQV00yLCAgICAgICAgIFVBUlRBLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE5OCwgTiwgTiksCisJUElOR1JPVVAocHU2LCAgICAgICAgICAgICAgICAgIFBXTTMsICAgICAgICAgVUFSVEEsICAgICAgICBHTUksICAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTljLCBOLCBOKSwKKwlQSU5HUk9VUChqdGFnX3J0Y2tfcHU3LCAgICAgICAgUlRDSywgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMyYjAsIE4sIE4pLAorCVBJTkdST1VQKHB2MCwgICAgICAgICAgICAgICAgICBSU1ZEMSwgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA0MCwgTiwgTiksCisJUElOR1JPVVAocHYxLCAgICAgICAgICAgICAgICAgIFJTVkQxLCAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDQ0LCBOLCBOKSwKKwlQSU5HUk9VUChwdjIsICAgICAgICAgICAgICAgICAgT1dSLCAgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMwNjAsIE4sIE4pLAorCVBJTkdST1VQKHB2MywgICAgICAgICAgICAgICAgICBDTEtfMTJNX09VVCwgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzA2NCwgTiwgTiksCisJUElOR1JPVVAoZGRjX3NjbF9wdjQsICAgICAgICAgIEkyQzQsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTE0LCBOLCBOKSwKKwlQSU5HUk9VUChkZGNfc2RhX3B2NSwgICAgICAgICAgSTJDNCwgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMxMTgsIE4sIE4pLAorCVBJTkdST1VQKGNydF9oc3luY19wdjYsICAgICAgICBDUlQsICAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzExYywgTiwgTiksCisJUElOR1JPVVAoY3J0X3ZzeW5jX3B2NywgICAgICAgIENSVCwgICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMTIwLCBOLCBOKSwKKwlQSU5HUk9VUChsY2RfY3MxX25fcHcwLCAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNQSTUsICAgICAgICAgUlNWRDQsICAgICAgICAweDMxMDQsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9tMV9wdzEsICAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzEwOCwgTiwgTiksCisJUElOR1JPVVAoc3BpMl9jczFfbl9wdzIsICAgICAgIFNQSTMsICAgICAgICAgU1BJMiwgICAgICAgICBTUEkyX0FMVCwgICAgIEkyQzEsICAgICAgICAgMHgzMzg4LCBOLCBOKSwKKwlQSU5HUk9VUChzcGkyX2NzMl9uX3B3MywgICAgICAgU1BJMywgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTJfQUxULCAgICAgSTJDMSwgICAgICAgICAweDMzOGMsIE4sIE4pLAorCVBJTkdST1VQKGNsazFfb3V0X3B3NCwgICAgICAgICBFWFRQRVJJUEgxLCAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzM0YywgTiwgTiksCisJUElOR1JPVVAoY2xrMl9vdXRfcHc1LCAgICAgICAgIEVYVFBFUklQSDIsICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDY4LCBOLCBOKSwKKwlQSU5HUk9VUCh1YXJ0M190eGRfcHc2LCAgICAgICAgVUFSVEMsICAgICAgICBSU1ZEMiwgICAgICAgIEdNSSwgICAgICAgICAgUlNWRDQsICAgICAgICAweDMxNzQsIE4sIE4pLAorCVBJTkdST1VQKHVhcnQzX3J4ZF9wdzcsICAgICAgICBVQVJUQywgICAgICAgIFJTVkQyLCAgICAgICAgR01JLCAgICAgICAgICBSU1ZENCwgICAgICAgIDB4MzE3OCwgTiwgTiksCisJUElOR1JPVVAoc3BpMl9tb3NpX3B4MCwgICAgICAgIFNQSTYsICAgICAgICAgU1BJMiwgICAgICAgICBTUEkzLCAgICAgICAgIEdNSSwgICAgICAgICAgMHgzMzY4LCBOLCBOKSwKKwlQSU5HUk9VUChzcGkyX21pc29fcHgxLCAgICAgICAgU1BJNiwgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTMsICAgICAgICAgR01JLCAgICAgICAgICAweDMzNmMsIE4sIE4pLAorCVBJTkdST1VQKHNwaTJfc2NrX3B4MiwgICAgICAgICBTUEk2LCAgICAgICAgIFNQSTIsICAgICAgICAgU1BJMywgICAgICAgICBHTUksICAgICAgICAgIDB4MzM3NCwgTiwgTiksCisJUElOR1JPVVAoc3BpMl9jczBfbl9weDMsICAgICAgIFNQSTYsICAgICAgICAgU1BJMiwgICAgICAgICBTUEkzLCAgICAgICAgIEdNSSwgICAgICAgICAgMHgzMzcwLCBOLCBOKSwKKwlQSU5HUk9VUChzcGkxX21vc2lfcHg0LCAgICAgICAgU1BJMiwgICAgICAgICBTUEkxLCAgICAgICAgIFNQSTJfQUxULCAgICAgR01JLCAgICAgICAgICAweDMzNzgsIE4sIE4pLAorCVBJTkdST1VQKHNwaTFfc2NrX3B4NSwgICAgICAgICBTUEkyLCAgICAgICAgIFNQSTEsICAgICAgICAgU1BJMl9BTFQsICAgICBHTUksICAgICAgICAgIDB4MzM3YywgTiwgTiksCisJUElOR1JPVVAoc3BpMV9jczBfbl9weDYsICAgICAgIFNQSTIsICAgICAgICAgU1BJMSwgICAgICAgICBTUEkyX0FMVCwgICAgIEdNSSwgICAgICAgICAgMHgzMzgwLCBOLCBOKSwKKwlQSU5HUk9VUChzcGkxX21pc29fcHg3LCAgICAgICAgU1BJMywgICAgICAgICBTUEkxLCAgICAgICAgIFNQSTJfQUxULCAgICAgUlNWRDQsICAgICAgICAweDMzODQsIE4sIE4pLAorCVBJTkdST1VQKHVscGlfY2xrX3B5MCwgICAgICAgICBTUEkxLCAgICAgICAgIFJTVkQyLCAgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAyMCwgTiwgTiksCisJUElOR1JPVVAodWxwaV9kaXJfcHkxLCAgICAgICAgIFNQSTEsICAgICAgICAgUlNWRDIsICAgICAgICBVQVJURCwgICAgICAgIFVMUEksICAgICAgICAgMHgzMDI0LCBOLCBOKSwKKwlQSU5HUk9VUCh1bHBpX254dF9weTIsICAgICAgICAgU1BJMSwgICAgICAgICBSU1ZEMiwgICAgICAgIFVBUlRELCAgICAgICAgVUxQSSwgICAgICAgICAweDMwMjgsIE4sIE4pLAorCVBJTkdST1VQKHVscGlfc3RwX3B5MywgICAgICAgICBTUEkxLCAgICAgICAgIFJTVkQyLCAgICAgICAgVUFSVEQsICAgICAgICBVTFBJLCAgICAgICAgIDB4MzAyYywgTiwgTiksCisJUElOR1JPVVAoc2RtbWMxX2RhdDNfcHk0LCAgICAgIFNETU1DMSwgICAgICAgUlNWRDIsICAgICAgICBVQVJURSwgICAgICAgIFVBUlRBLCAgICAgICAgMHgzMDUwLCBOLCBOKSwKKwlQSU5HUk9VUChzZG1tYzFfZGF0Ml9weTUsICAgICAgU0RNTUMxLCAgICAgICBSU1ZEMiwgICAgICAgIFVBUlRFLCAgICAgICAgVUFSVEEsICAgICAgICAweDMwNTQsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jMV9kYXQxX3B5NiwgICAgICBTRE1NQzEsICAgICAgIFJTVkQyLCAgICAgICAgVUFSVEUsICAgICAgICBVQVJUQSwgICAgICAgIDB4MzA1OCwgTiwgTiksCisJUElOR1JPVVAoc2RtbWMxX2RhdDBfcHk3LCAgICAgIFNETU1DMSwgICAgICAgUlNWRDIsICAgICAgICBVQVJURSwgICAgICAgIFVBUlRBLCAgICAgICAgMHgzMDVjLCBOLCBOKSwKKwlQSU5HUk9VUChzZG1tYzFfY2xrX3B6MCwgICAgICAgU0RNTUMxLCAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgVUFSVEEsICAgICAgICAweDMwNDgsIE4sIE4pLAorCVBJTkdST1VQKHNkbW1jMV9jbWRfcHoxLCAgICAgICBTRE1NQzEsICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBVQVJUQSwgICAgICAgIDB4MzA0YywgTiwgTiksCisJUElOR1JPVVAobGNkX3NkaW5fcHoyLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTUEk1LCAgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDc4LCBOLCBOKSwKKwlQSU5HUk9VUChsY2Rfd3Jfbl9wejMsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNQSTUsICAgICAgICAgSERDUCwgICAgICAgICAweDMwODAsIE4sIE4pLAorCVBJTkdST1VQKGxjZF9zY2tfcHo0LCAgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgU1BJNSwgICAgICAgICBIRENQLCAgICAgICAgIDB4MzA4YywgTiwgTiksCisJUElOR1JPVVAoc3lzX2Nsa19yZXFfcHo1LCAgICAgIFNZU0NMSywgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzIwLCBOLCBOKSwKKwlQSU5HUk9VUChwd3JfaTJjX3NjbF9wejYsICAgICAgSTJDUFdSLCAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMyYjQsIFksIE4pLAorCVBJTkdST1VQKHB3cl9pMmNfc2RhX3B6NywgICAgICBJMkNQV1IsICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzJiOCwgWSwgTiksCisJUElOR1JPVVAoc2RtbWM0X2RhdDBfcGFhMCwgICAgIFVBUlRFLCAgICAgICAgU1BJMywgICAgICAgICBHTUksICAgICAgICAgIFNETU1DNCwgICAgICAgMHgzMjYwLCBOLCBZKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0MV9wYWExLCAgICAgVUFSVEUsICAgICAgICBTUEkzLCAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUM0LCAgICAgICAweDMyNjQsIE4sIFkpLAorCVBJTkdST1VQKHNkbW1jNF9kYXQyX3BhYTIsICAgICBVQVJURSwgICAgICAgIFNQSTMsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIDB4MzI2OCwgTiwgWSksCisJUElOR1JPVVAoc2RtbWM0X2RhdDNfcGFhMywgICAgIFVBUlRFLCAgICAgICAgU1BJMywgICAgICAgICBHTUksICAgICAgICAgIFNETU1DNCwgICAgICAgMHgzMjZjLCBOLCBZKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0NF9wYWE0LCAgICAgSTJDMywgICAgICAgICBJMlM0LCAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUM0LCAgICAgICAweDMyNzAsIE4sIFkpLAorCVBJTkdST1VQKHNkbW1jNF9kYXQ1X3BhYTUsICAgICBWR1AzLCAgICAgICAgIEkyUzQsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIDB4MzI3NCwgTiwgWSksCisJUElOR1JPVVAoc2RtbWM0X2RhdDZfcGFhNiwgICAgIFZHUDQsICAgICAgICAgSTJTNCwgICAgICAgICBHTUksICAgICAgICAgIFNETU1DNCwgICAgICAgMHgzMjc4LCBOLCBZKSwKKwlQSU5HUk9VUChzZG1tYzRfZGF0N19wYWE3LCAgICAgVkdQNSwgICAgICAgICBJMlM0LCAgICAgICAgIEdNSSwgICAgICAgICAgU0RNTUM0LCAgICAgICAweDMyN2MsIE4sIFkpLAorCVBJTkdST1VQKHBiYjAsICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBTRE1NQzQsICAgICAgIDB4MzI4YywgTiwgTiksCisJUElOR1JPVVAoY2FtX2kyY19zY2xfcGJiMSwgICAgIFZHUDEsICAgICAgICAgSTJDMywgICAgICAgICBSU1ZEMywgICAgICAgIFNETU1DNCwgICAgICAgMHgzMjkwLCBZLCBOKSwKKwlQSU5HUk9VUChjYW1faTJjX3NkYV9wYmIyLCAgICAgVkdQMiwgICAgICAgICBJMkMzLCAgICAgICAgIFJTVkQzLCAgICAgICAgU0RNTUM0LCAgICAgICAweDMyOTQsIFksIE4pLAorCVBJTkdST1VQKHBiYjMsICAgICAgICAgICAgICAgICBWR1AzLCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTRE1NQzQsICAgICAgIDB4MzI5OCwgTiwgTiksCisJUElOR1JPVVAocGJiNCwgICAgICAgICAgICAgICAgIFZHUDQsICAgICAgICAgRElTUExBWUEsICAgICBESVNQTEFZQiwgICAgIFNETU1DNCwgICAgICAgMHgzMjljLCBOLCBOKSwKKwlQSU5HUk9VUChwYmI1LCAgICAgICAgICAgICAgICAgVkdQNSwgICAgICAgICBESVNQTEFZQSwgICAgIERJU1BMQVlCLCAgICAgU0RNTUM0LCAgICAgICAweDMyYTAsIE4sIE4pLAorCVBJTkdST1VQKHBiYjYsICAgICAgICAgICAgICAgICBWR1A2LCAgICAgICAgIERJU1BMQVlBLCAgICAgRElTUExBWUIsICAgICBTRE1NQzQsICAgICAgIDB4MzJhNCwgTiwgTiksCisJUElOR1JPVVAocGJiNywgICAgICAgICAgICAgICAgIEkyUzQsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFNETU1DNCwgICAgICAgMHgzMmE4LCBOLCBOKSwKKwlQSU5HUk9VUChjYW1fbWNsa19wY2MwLCAgICAgICAgVkksICAgICAgICAgICBWSV9BTFQxLCAgICAgIFZJX0FMVDMsICAgICAgU0RNTUM0LCAgICAgICAweDMyODQsIE4sIE4pLAorCVBJTkdST1VQKHBjYzEsICAgICAgICAgICAgICAgICBJMlM0LCAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBTRE1NQzQsICAgICAgIDB4MzI4OCwgTiwgTiksCisJUElOR1JPVVAocGNjMiwgICAgICAgICAgICAgICAgIEkyUzQsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMmFjLCBOLCBOKSwKKwlQSU5HUk9VUChzZG1tYzRfcnN0X25fcGNjMywgICAgVkdQNiwgICAgICAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgU0RNTUM0LCAgICAgICAweDMyODAsIE4sIFkpLAorCVBJTkdST1VQKHNkbW1jNF9jbGtfcGNjNCwgICAgICBJTlZBTElELCAgICAgIE5BTkQsICAgICAgICAgR01JLCAgICAgICAgICBTRE1NQzQsICAgICAgIDB4MzI1OCwgTiwgWSksCisJUElOR1JPVVAoY2xrMl9yZXFfcGNjNSwgICAgICAgIERBUCwgICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMDZjLCBOLCBOKSwKKwlQSU5HUk9VUChwZXhfbDJfcnN0X25fcGNjNiwgICAgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzZDgsIE4sIE4pLAorCVBJTkdST1VQKHBleF9sMl9jbGtyZXFfbl9wY2M3LCBQQ0lFLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNkYywgTiwgTiksCisJUElOR1JPVVAocGV4X2wwX3Byc250X25fcGRkMCwgIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2I4LCBOLCBOKSwKKwlQSU5HUk9VUChwZXhfbDBfcnN0X25fcGRkMSwgICAgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzYmMsIE4sIE4pLAorCVBJTkdST1VQKHBleF9sMF9jbGtyZXFfbl9wZGQyLCBQQ0lFLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNjMCwgTiwgTiksCisJUElOR1JPVVAocGV4X3dha2Vfbl9wZGQzLCAgICAgIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2M0LCBOLCBOKSwKKwlQSU5HUk9VUChwZXhfbDFfcHJzbnRfbl9wZGQ0LCAgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzYzgsIE4sIE4pLAorCVBJTkdST1VQKHBleF9sMV9yc3Rfbl9wZGQ1LCAgICBQQ0lFLCAgICAgICAgIEhEQSwgICAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNjYywgTiwgTiksCisJUElOR1JPVVAocGV4X2wxX2Nsa3JlcV9uX3BkZDYsIFBDSUUsICAgICAgICAgSERBLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzM2QwLCBOLCBOKSwKKwlQSU5HUk9VUChwZXhfbDJfcHJzbnRfbl9wZGQ3LCAgUENJRSwgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzZDQsIE4sIE4pLAorCVBJTkdST1VQKGNsazNfb3V0X3BlZTAsICAgICAgICBFWFRQRVJJUEgzLCAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzFiOCwgTiwgTiksCisJUElOR1JPVVAoY2xrM19yZXFfcGVlMSwgICAgICAgIERFVjMsICAgICAgICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMWJjLCBOLCBOKSwKKwlQSU5HUk9VUChjbGsxX3JlcV9wZWUyLCAgICAgICAgREFQLCAgICAgICAgICBIREEsICAgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzNDgsIE4sIE4pLAorCVBJTkdST1VQKGhkbWlfY2VjX3BlZTMsICAgICAgICBDRUMsICAgICAgICAgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzNlMCwgWSwgTiksCisJUElOR1JPVVAoY2xrXzMya19pbiwgICAgICAgICAgIENMS18zMktfSU4sICAgUlNWRDIsICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzMwLCBOLCBOKSwKKwlQSU5HUk9VUChjb3JlX3B3cl9yZXEsICAgICAgICAgQ09SRV9QV1JfUkVRLCBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzMjQsIE4sIE4pLAorCVBJTkdST1VQKGNwdV9wd3JfcmVxLCAgICAgICAgICBDUFVfUFdSX1JFUSwgIFJTVkQyLCAgICAgICAgUlNWRDMsICAgICAgICBSU1ZENCwgICAgICAgIDB4MzMyOCwgTiwgTiksCisJUElOR1JPVVAob3dyLCAgICAgICAgICAgICAgICAgIE9XUiwgICAgICAgICAgQ0VDLCAgICAgICAgICBSU1ZEMywgICAgICAgIFJTVkQ0LCAgICAgICAgMHgzMzM0LCBOLCBOKSwKKwlQSU5HUk9VUChwd3JfaW50X24sICAgICAgICAgICAgUFdSX0lOVF9OLCAgICBSU1ZEMiwgICAgICAgIFJTVkQzLCAgICAgICAgUlNWRDQsICAgICAgICAweDMzMmMsIE4sIE4pLAogCS8qIHBnX25hbWUsIHIsIGhzbV9iLCBzY2htaXR0X2IsIGxwbWRfYiwgZHJ2ZG5fYiwgZHJ2ZG5fdywgZHJ2dXBfYiwgZHJ2dXBfdywgc2x3cl9iLCBzbHdyX3csIHNsd2ZfYiwgc2x3Zl93ICovCiAJRFJWX1BJTkdST1VQKGFvMSwgICAweDg2OCwgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiksCiAJRFJWX1BJTkdST1VQKGFvMiwgICAweDg2YywgIDIsICAzLCAgNCwgIDEyLCAgNSwgIDIwLCAgNSwgIDI4LCAgMiwgIDMwLCAgMiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGlubXV4LmMgYi9kcml2ZXJzL3BpbmN0cmwvcGlubXV4LmMKaW5kZXggOTI0OGNlNC4uMDUxZTg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3Bpbm11eC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5tdXguYwpAQCAtMzkxLDE0ICszOTEsMTYgQEAKIAlzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYgPSBzZXR0aW5nLT5wY3RsZGV2OwogCWNvbnN0IHN0cnVjdCBwaW5jdHJsX29wcyAqcGN0bG9wcyA9IHBjdGxkZXYtPmRlc2MtPnBjdGxvcHM7CiAJY29uc3Qgc3RydWN0IHBpbm11eF9vcHMgKm9wcyA9IHBjdGxkZXYtPmRlc2MtPnBteG9wczsKLQlpbnQgcmV0OwotCWNvbnN0IHVuc2lnbmVkICpwaW5zOwotCXVuc2lnbmVkIG51bV9waW5zOworCWludCByZXQgPSAwOworCWNvbnN0IHVuc2lnbmVkICpwaW5zID0gTlVMTDsKKwl1bnNpZ25lZCBudW1fcGlucyA9IDA7CiAJaW50IGk7CiAJc3RydWN0IHBpbl9kZXNjICpkZXNjOwogCi0JcmV0ID0gcGN0bG9wcy0+Z2V0X2dyb3VwX3BpbnMocGN0bGRldiwgc2V0dGluZy0+ZGF0YS5tdXguZ3JvdXAsCi0JCQkJICAgICAgJnBpbnMsICZudW1fcGlucyk7CisJaWYgKHBjdGxvcHMtPmdldF9ncm91cF9waW5zKQorCQlyZXQgPSBwY3Rsb3BzLT5nZXRfZ3JvdXBfcGlucyhwY3RsZGV2LCBzZXR0aW5nLT5kYXRhLm11eC5ncm91cCwKKwkJCQkJICAgICAgJnBpbnMsICZudW1fcGlucyk7CisKIAlpZiAocmV0KSB7CiAJCWNvbnN0IGNoYXIgKmduYW1lOwogCkBAIC00NzAsMTQgKzQ3MiwxNSBAQAogCXN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiA9IHNldHRpbmctPnBjdGxkZXY7CiAJY29uc3Qgc3RydWN0IHBpbmN0cmxfb3BzICpwY3Rsb3BzID0gcGN0bGRldi0+ZGVzYy0+cGN0bG9wczsKIAljb25zdCBzdHJ1Y3QgcGlubXV4X29wcyAqb3BzID0gcGN0bGRldi0+ZGVzYy0+cG14b3BzOwotCWludCByZXQ7Ci0JY29uc3QgdW5zaWduZWQgKnBpbnM7Ci0JdW5zaWduZWQgbnVtX3BpbnM7CisJaW50IHJldCA9IDA7CisJY29uc3QgdW5zaWduZWQgKnBpbnMgPSBOVUxMOworCXVuc2lnbmVkIG51bV9waW5zID0gMDsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGluX2Rlc2MgKmRlc2M7CiAKLQlyZXQgPSBwY3Rsb3BzLT5nZXRfZ3JvdXBfcGlucyhwY3RsZGV2LCBzZXR0aW5nLT5kYXRhLm11eC5ncm91cCwKLQkJCQkgICAgICAmcGlucywgJm51bV9waW5zKTsKKwlpZiAocGN0bG9wcy0+Z2V0X2dyb3VwX3BpbnMpCisJCXJldCA9IHBjdGxvcHMtPmdldF9ncm91cF9waW5zKHBjdGxkZXYsIHNldHRpbmctPmRhdGEubXV4Lmdyb3VwLAorCQkJCQkgICAgICAmcGlucywgJm51bV9waW5zKTsKIAlpZiAocmV0KSB7CiAJCWNvbnN0IGNoYXIgKmduYW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3M2E0LmMgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3M2E0LmMKaW5kZXggZDM5Y2E4Ny4uY2U5ZmI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzNhNC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTczYTQuYwpAQCAtMjAsNyArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmg+CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STQogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAic2hfcGZjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzQwLmMgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzQwLmMKaW5kZXggNmM4M2NlNC4uZTRjMWVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzc0MC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTc3NDAuYwpAQCAtMjIsNyArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmg+CiAKKyNpZm5kZWYgQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STQogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAic2hfcGZjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzkwLmMgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzkwLmMKaW5kZXggZjVjZDNmOS4uOWExNzljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzc5MC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTc3OTAuYwpAQCAtNzgyLDcgKzc4Miw4IEBACiAJVVNCMV9QV0VOX01BUkssIEFVRElPX0NMS09VVF9EX01BUkssIFVTQjFfT1ZDX01BUkssCiAJVENMSzFfQl9NQVJLLAogCi0JSTJDM19TQ0xfTUFSSywgSTJDM19TREFfTUFSSywKKwlJSUMwX1NDTF9NQVJLLCBJSUMwX1NEQV9NQVJLLCBJMkMwX1NDTF9NQVJLLCBJMkMwX1NEQV9NQVJLLAorCUlJQzNfU0NMX01BUkssIElJQzNfU0RBX01BUkssIEkyQzNfU0NMX01BUkssIEkyQzNfU0RBX01BUkssCiAJUElOTVVYX01BUktfRU5ELAogfTsKIApAQCAtMTcyMiw2ICsxNzIzLDEzIEBACiAJUElOTVVYX0lQU1JfREFUQShJUDE2XzcsIFVTQjFfT1ZDKSwKIAlQSU5NVVhfSVBTUl9NT0RTRUxfREFUQShJUDE2XzcsIFRDTEsxX0IsIFNFTF9UTVUxXzEpLAogCisJUElOTVVYX0RBVEEoSUlDMF9TQ0xfTUFSSywgRk5fU0VMX0lJQzBfMCksCisJUElOTVVYX0RBVEEoSUlDMF9TREFfTUFSSywgRk5fU0VMX0lJQzBfMCksCisJUElOTVVYX0RBVEEoSTJDMF9TQ0xfTUFSSywgRk5fU0VMX0lJQzBfMSksCisJUElOTVVYX0RBVEEoSTJDMF9TREFfTUFSSywgRk5fU0VMX0lJQzBfMSksCisKKwlQSU5NVVhfREFUQShJSUMzX1NDTF9NQVJLLCBGTl9TRUxfSUlDRFZGU18wKSwKKwlQSU5NVVhfREFUQShJSUMzX1NEQV9NQVJLLCBGTl9TRUxfSUlDRFZGU18wKSwKIAlQSU5NVVhfREFUQShJMkMzX1NDTF9NQVJLLCBGTl9TRUxfSUlDRFZGU18xKSwKIAlQSU5NVVhfREFUQShJMkMzX1NEQV9NQVJLLCBGTl9TRUxfSUlDRFZGU18xKSwKIH07CkBAIC0xNzM1LDggKzE3NDMsMTAgQEAKIAlQSU5NVVhfR1BJT19HUF9BTEwoKSwKIAogCS8qIFBpbnMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIEdQSU8gcG9ydCAqLwotCVNIX1BGQ19QSU5fTkFNRUQoUk9XX0dST1VQX0EoJ0onKSwgMTUsIEFKMTUpLAorCVNIX1BGQ19QSU5fTkFNRUQoUk9XX0dST1VQX0EoJ0YnKSwgMTUsIEFGMTUpLAorCVNIX1BGQ19QSU5fTkFNRUQoUk9XX0dST1VQX0EoJ0cnKSwgMTUsIEFHMTUpLAogCVNIX1BGQ19QSU5fTkFNRUQoUk9XX0dST1VQX0EoJ0gnKSwgMTUsIEFIMTUpLAorCVNIX1BGQ19QSU5fTkFNRUQoUk9XX0dST1VQX0EoJ0onKSwgMTUsIEFKMTUpLAogfTsKIAogLyogLSBBVURJTyBDTE9DSyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIwNTQsNiArMjA2NCwxNCBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBoc2NpZjFfY3RybF9iX211eFtdID0gewogCUhSVFMxX05fQl9NQVJLLCBIQ1RTMV9OX0JfTUFSSywKIH07CisvKiAtIEkyQzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMwX3BpbnNbXSA9IHsKKwkvKiBTQ0wsIFNEQSAqLworCVBJTl9BX05VTUJFUignRycsIDE1KSwgUElOX0FfTlVNQkVSKCdGJywgMTUpLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMF9tdXhbXSA9IHsKKwlJMkMwX1NDTF9NQVJLLCBJMkMwX1NEQV9NQVJLLAorfTsKIC8qIC0gSTJDMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzFfcGluc1tdID0gewogCS8qIFNDTCwgU0RBICovCkBAIC0yMTIwLDYgKzIxMzgsODAgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjM19tdXhbXSA9IHsKIAlJMkMzX1NDTF9NQVJLLCBJMkMzX1NEQV9NQVJLLAogfTsKKy8qIC0gSUlDMCAoSTJDNCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzBfcGluc1tdID0geworCS8qIFNDTCwgU0RBICovCisJUElOX0FfTlVNQkVSKCdHJywgMTUpLCBQSU5fQV9OVU1CRVIoJ0YnLCAxNSksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMwX211eFtdID0geworCUlJQzBfU0NMX01BUkssIElJQzBfU0RBX01BUkssCit9OworLyogLSBJSUMxIChJMkM1KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaWljMV9waW5zW10gPSB7CisJLyogU0NMLCBTREEgKi8KKwlSQ0FSX0dQX1BJTigxLCAxNiksIFJDQVJfR1BfUElOKDEsIDE3KSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzFfbXV4W10gPSB7CisJSUlDMV9TQ0xfTUFSSywgSUlDMV9TREFfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzFfYl9waW5zW10gPSB7CisJLyogU0NMLCBTREEgKi8KKwlSQ0FSX0dQX1BJTigzLCA2KSwgUkNBUl9HUF9QSU4oMywgNyksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMxX2JfbXV4W10gPSB7CisJSUlDMV9TQ0xfQl9NQVJLLCBJSUMxX1NEQV9CX01BUkssCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMxX2NfcGluc1tdID0geworCS8qIFNDTCwgU0RBICovCisJUkNBUl9HUF9QSU4oNCwgMzApLCBSQ0FSX0dQX1BJTig0LCAyNyksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMxX2NfbXV4W10gPSB7CisJSUlDMV9TQ0xfQ19NQVJLLCBJSUMxX1NEQV9DX01BUkssCit9OworLyogLSBJSUMyIChJMkM2KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaWljMl9waW5zW10gPSB7CisJLyogU0NMLCBTREEgKi8KKwlSQ0FSX0dQX1BJTig1LCA1KSwgUkNBUl9HUF9QSU4oNSwgNiksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMyX211eFtdID0geworCUlJQzJfU0NMX01BUkssIElJQzJfU0RBX01BUkssCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMyX2JfcGluc1tdID0geworCS8qIFNDTCwgU0RBICovCisJUkNBUl9HUF9QSU4oNCwgMCksIFJDQVJfR1BfUElOKDQsIDEpLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaWljMl9iX211eFtdID0geworCUlJQzJfU0NMX0JfTUFSSywgSUlDMl9TREFfQl9NQVJLLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaWljMl9jX3BpbnNbXSA9IHsKKwkvKiBTQ0wsIFNEQSAqLworCVJDQVJfR1BfUElOKDAsIDYpLCBSQ0FSX0dQX1BJTigwLCA3KSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzJfY19tdXhbXSA9IHsKKwlJSUMyX1NDTF9DX01BUkssIElJQzJfU0RBX0NfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzJfZF9waW5zW10gPSB7CisJLyogU0NMLCBTREEgKi8KKwlSQ0FSX0dQX1BJTigzLCAxNCksIFJDQVJfR1BfUElOKDMsIDE1KSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzJfZF9tdXhbXSA9IHsKKwlJSUMyX1NDTF9EX01BUkssIElJQzJfU0RBX0RfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzJfZV9waW5zW10gPSB7CisJLyogU0NMLCBTREEgKi8KKwlSQ0FSX0dQX1BJTigyLCAxOCksIFJDQVJfR1BfUElOKDIsIDE5KSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzJfZV9tdXhbXSA9IHsKKwlJSUMyX1NDTF9FX01BUkssIElJQzJfU0RBX0VfTUFSSywKK307CisvKiAtIElJQzMgKEkyQzcpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMzX3BpbnNbXSA9IHsKKy8qIFNDTCwgU0RBICovCisJUElOX0FfTlVNQkVSKCdKJywgMTUpLCBQSU5fQV9OVU1CRVIoJ0gnLCAxNSksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMzX211eFtdID0geworCUlJQzNfU0NMX01BUkssIElJQzNfU0RBX01BUkssCit9OwogLyogLSBJTlRDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50Y19pcnEwX3BpbnNbXSA9IHsKIAkvKiBJUlEgKi8KQEAgLTM3NTcsNiArMzg0OSw3IEBACiAJU0hfUEZDX1BJTl9HUk9VUChoc2NpZjFfZGF0YV9iKSwKIAlTSF9QRkNfUElOX0dST1VQKGhzY2lmMV9jbGtfYiksCiAJU0hfUEZDX1BJTl9HUk9VUChoc2NpZjFfY3RybF9iKSwKKwlTSF9QRkNfUElOX0dST1VQKGkyYzApLAogCVNIX1BGQ19QSU5fR1JPVVAoaTJjMSksCiAJU0hfUEZDX1BJTl9HUk9VUChpMmMxX2IpLAogCVNIX1BGQ19QSU5fR1JPVVAoaTJjMV9jKSwKQEAgLTM3NjYsNiArMzg1OSwxNiBAQAogCVNIX1BGQ19QSU5fR1JPVVAoaTJjMl9kKSwKIAlTSF9QRkNfUElOX0dST1VQKGkyYzJfZSksCiAJU0hfUEZDX1BJTl9HUk9VUChpMmMzKSwKKwlTSF9QRkNfUElOX0dST1VQKGlpYzApLAorCVNIX1BGQ19QSU5fR1JPVVAoaWljMSksCisJU0hfUEZDX1BJTl9HUk9VUChpaWMxX2IpLAorCVNIX1BGQ19QSU5fR1JPVVAoaWljMV9jKSwKKwlTSF9QRkNfUElOX0dST1VQKGlpYzIpLAorCVNIX1BGQ19QSU5fR1JPVVAoaWljMl9iKSwKKwlTSF9QRkNfUElOX0dST1VQKGlpYzJfYyksCisJU0hfUEZDX1BJTl9HUk9VUChpaWMyX2QpLAorCVNIX1BGQ19QSU5fR1JPVVAoaWljMl9lKSwKKwlTSF9QRkNfUElOX0dST1VQKGlpYzMpLAogCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEwKSwKIAlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMSksCiAJU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTIpLApAQCAtNDA0NCw2ICs0MTQ3LDEwIEBACiAJImhzY2lmMV9jdHJsX2IiLAogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpMmMwX2dyb3Vwc1tdID0geworCSJpMmMwIiwKK307CisKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaTJjMV9ncm91cHNbXSA9IHsKIAkiaTJjMSIsCiAJImkyYzFfYiIsCkBAIC00MDYyLDYgKzQxNjksMjggQEAKIAkiaTJjMyIsCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlpYzBfZ3JvdXBzW10gPSB7CisJImlpYzAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpaWMxX2dyb3Vwc1tdID0geworCSJpaWMxIiwKKwkiaWljMV9iIiwKKwkiaWljMV9jIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWljMl9ncm91cHNbXSA9IHsKKwkiaWljMiIsCisJImlpYzJfYiIsCisJImlpYzJfYyIsCisJImlpYzJfZCIsCisJImlpYzJfZSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlpYzNfZ3JvdXBzW10gPSB7CisJImlpYzMiLAorfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbnRjX2dyb3Vwc1tdID0gewogCSJpbnRjX2lycTAiLAogCSJpbnRjX2lycTEiLApAQCAtNDM3Myw5ICs0NTAyLDE0IEBACiAJU0hfUEZDX0ZVTkNUSU9OKGV0aCksCiAJU0hfUEZDX0ZVTkNUSU9OKGhzY2lmMCksCiAJU0hfUEZDX0ZVTkNUSU9OKGhzY2lmMSksCisJU0hfUEZDX0ZVTkNUSU9OKGkyYzApLAogCVNIX1BGQ19GVU5DVElPTihpMmMxKSwKIAlTSF9QRkNfRlVOQ1RJT04oaTJjMiksCiAJU0hfUEZDX0ZVTkNUSU9OKGkyYzMpLAorCVNIX1BGQ19GVU5DVElPTihpaWMwKSwKKwlTSF9QRkNfRlVOQ1RJT04oaWljMSksCisJU0hfUEZDX0ZVTkNUSU9OKGlpYzIpLAorCVNIX1BGQ19GVU5DVElPTihpaWMzKSwKIAlTSF9QRkNfRlVOQ1RJT04oaW50YyksCiAJU0hfUEZDX0ZVTkNUSU9OKG1tYzApLAogCVNIX1BGQ19GVU5DVElPTihtbWMxKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTc3OTEuYyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTc3OTEuYwppbmRleCA3ODY4YmYzLi4yZTY4OGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzkxLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzc5MS5jCkBAIC0xNjgwLDYgKzE2ODAsNTMgQEAKIAlQSU5NVVhfR1BJT19HUF9BTEwoKSwKIH07CiAKKy8qIC0gQXVkaW8gQ2xvY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGF1ZGlvX2Nsa19hX3BpbnNbXSA9IHsKKwkvKiBDTEsgKi8KKwlSQ0FSX0dQX1BJTigyLCAyOCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGF1ZGlvX2Nsa19hX211eFtdID0geworCUFVRElPX0NMS0FfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYXVkaW9fY2xrX2JfcGluc1tdID0geworCS8qIENMSyAqLworCVJDQVJfR1BfUElOKDIsIDI5KSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYXVkaW9fY2xrX2JfbXV4W10gPSB7CisJQVVESU9fQ0xLQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhdWRpb19jbGtfYl9iX3BpbnNbXSA9IHsKKwkvKiBDTEsgKi8KKwlSQ0FSX0dQX1BJTig3LCAyMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGF1ZGlvX2Nsa19iX2JfbXV4W10gPSB7CisJQVVESU9fQ0xLQl9CX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGF1ZGlvX2Nsa19jX3BpbnNbXSA9IHsKKwkvKiBDTEsgKi8KKwlSQ0FSX0dQX1BJTigyLCAzMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGF1ZGlvX2Nsa19jX211eFtdID0geworCUFVRElPX0NMS0NfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYXVkaW9fY2xrb3V0X3BpbnNbXSA9IHsKKwkvKiBDTEsgKi8KKwlSQ0FSX0dQX1BJTigyLCAzMSksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGF1ZGlvX2Nsa291dF9tdXhbXSA9IHsKKwlBVURJT19DTEtPVVRfTUFSSywKK307CisKKwogLyogLSBEVSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHVfcmdiNjY2X3BpbnNbXSA9IHsKIAkvKiBSWzc6Ml0sIEdbNzoyXSwgQls3OjJdICovCkBAIC0xNzMzLDE5ICsxNzgwLDMyIEBACiAJRFUxX0RPVENMS09VVDFfTUFSSwogfTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHVfc3luY19waW5zW10gPSB7Ci0JLyogRVhWU1lOQy9WU1lOQywgRVhIU1lOQy9IU1lOQywgRVhESVNQL0VYT0RERi9FWENERSAqLwotCVJDQVJfR1BfUElOKDMsIDI5KSwgUkNBUl9HUF9QSU4oMywgMjgpLCBSQ0FSX0dQX1BJTigzLCAyNyksCisJLyogRVhWU1lOQy9WU1lOQywgRVhIU1lOQy9IU1lOQyAqLworCVJDQVJfR1BfUElOKDMsIDI4KSwgUkNBUl9HUF9QSU4oMywgMjcpLAogfTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHVfc3luY19tdXhbXSA9IHsKLQlEVTFfRVhPRERGX0RVMV9PRERGX0RJU1BfQ0RFX01BUkssCiAJRFUxX0VYVlNZTkNfRFUxX1ZTWU5DX01BUkssIERVMV9FWEhTWU5DX0RVMV9IU1lOQ19NQVJLCiB9Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkdV9jZGVfZGlzcF9waW5zW10gPSB7Ci0JLyogQ0RFIERJU1AgKi8KLQlSQ0FSX0dQX1BJTigzLCAzMSksIFJDQVJfR1BfUElOKDMsIDMwKSwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHVfb2RkZl9waW5zW10gPSB7CisJLyogRVhESVNQL0VYT0RERi9FWENERSAqLworCVJDQVJfR1BfUElOKDMsIDI5KSwKIH07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR1X2NkZV9kaXNwX211eFtdID0gewotCURVMV9DREVfTUFSSywgRFUxX0RJU1BfTUFSSworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkdV9vZGRmX211eFtdID0geworCURVMV9FWE9EREZfRFUxX09EREZfRElTUF9DREVfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR1X2NkZV9waW5zW10gPSB7CisJLyogQ0RFICovCisJUkNBUl9HUF9QSU4oMywgMzEpLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHVfY2RlX211eFtdID0geworCURVMV9DREVfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR1X2Rpc3BfcGluc1tdID0geworCS8qIERJU1AgKi8KKwlSQ0FSX0dQX1BJTigzLCAzMCksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkdV9kaXNwX211eFtdID0geworCURVMV9ESVNQX01BUkssCiB9Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkdTBfY2xrX2luX3BpbnNbXSA9IHsKIAkvKiBDTEtJTiAqLwpAQCAtMzI0Niw2ICszMzA2LDI2MCBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMl93cF9tdXhbXSA9IHsKIAlTRDJfV1BfTUFSSywKIH07CisKKy8qIC0gU1NJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTBfZGF0YV9waW5zW10gPSB7CisJLyogU0RBVEEgKi8KKwlSQ0FSX0dQX1BJTigyLCAyKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpMF9kYXRhX211eFtdID0geworCVNTSV9TREFUQTBfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpMF9kYXRhX2JfcGluc1tdID0geworCS8qIFNEQVRBICovCisJUkNBUl9HUF9QSU4oMywgNCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTBfZGF0YV9iX211eFtdID0geworCVNTSV9TREFUQTBfQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kwMTI5X2N0cmxfcGluc1tdID0geworCS8qIFNDSywgV1MgKi8KKwlSQ0FSX0dQX1BJTigyLCAwKSwgUkNBUl9HUF9QSU4oMiwgMSksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTAxMjlfY3RybF9tdXhbXSA9IHsKKwlTU0lfU0NLMDEyOV9NQVJLLCBTU0lfV1MwMTI5X01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTAxMjlfY3RybF9iX3BpbnNbXSA9IHsKKwkvKiBTQ0ssIFdTICovCisJUkNBUl9HUF9QSU4oMywgMiksIFJDQVJfR1BfUElOKDMsIDMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kwMTI5X2N0cmxfYl9tdXhbXSA9IHsKKwlTU0lfU0NLMDEyOV9CX01BUkssIFNTSV9XUzAxMjlfQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kxX2RhdGFfcGluc1tdID0geworCS8qIFNEQVRBICovCisJUkNBUl9HUF9QSU4oMiwgNSksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTFfZGF0YV9tdXhbXSA9IHsKKwlTU0lfU0RBVEExX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTFfZGF0YV9iX3BpbnNbXSA9IHsKKwkvKiBTREFUQSAqLworCVJDQVJfR1BfUElOKDMsIDcpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kxX2RhdGFfYl9tdXhbXSA9IHsKKwlTU0lfU0RBVEExX0JfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpMV9jdHJsX3BpbnNbXSA9IHsKKwkvKiBTQ0ssIFdTICovCisJUkNBUl9HUF9QSU4oMiwgMyksIFJDQVJfR1BfUElOKDIsIDQpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kxX2N0cmxfbXV4W10gPSB7CisJU1NJX1NDSzFfTUFSSywgU1NJX1dTMV9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kxX2N0cmxfYl9waW5zW10gPSB7CisJLyogU0NLLCBXUyAqLworCVJDQVJfR1BfUElOKDMsIDUpLCBSQ0FSX0dQX1BJTigzLCA2KSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpMV9jdHJsX2JfbXV4W10gPSB7CisJU1NJX1NDSzFfQl9NQVJLLCBTU0lfV1MxX0JfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpMl9kYXRhX3BpbnNbXSA9IHsKKwkvKiBTREFUQSAqLworCVJDQVJfR1BfUElOKDIsIDgpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kyX2RhdGFfbXV4W10gPSB7CisJU1NJX1NEQVRBMl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kyX2N0cmxfcGluc1tdID0geworCS8qIFNDSywgV1MgKi8KKwlSQ0FSX0dQX1BJTigyLCA2KSwgUkNBUl9HUF9QSU4oMiwgNyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTJfY3RybF9tdXhbXSA9IHsKKwlTU0lfU0NLMl9NQVJLLCBTU0lfV1MyX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTNfZGF0YV9waW5zW10gPSB7CisJLyogU0RBVEEgKi8KKwlSQ0FSX0dQX1BJTigyLCAxMSksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTNfZGF0YV9tdXhbXSA9IHsKKwlTU0lfU0RBVEEzX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTM0X2N0cmxfcGluc1tdID0geworCS8qIFNDSywgV1MgKi8KKwlSQ0FSX0dQX1BJTigyLCA5KSwgUkNBUl9HUF9QSU4oMiwgMTApLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2kzNF9jdHJsX211eFtdID0geworCVNTSV9TQ0szNF9NQVJLLCBTU0lfV1MzNF9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k0X2RhdGFfcGluc1tdID0geworCS8qIFNEQVRBICovCisJUkNBUl9HUF9QSU4oMiwgMTQpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k0X2RhdGFfbXV4W10gPSB7CisJU1NJX1NEQVRBNF9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k0X2N0cmxfcGluc1tdID0geworCS8qIFNDSywgV1MgKi8KKwlSQ0FSX0dQX1BJTigyLCAxMiksIFJDQVJfR1BfUElOKDIsIDEzKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpNF9jdHJsX211eFtdID0geworCVNTSV9TQ0s0X01BUkssIFNTSV9XUzRfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpNV9kYXRhX3BpbnNbXSA9IHsKKwkvKiBTREFUQSAqLworCVJDQVJfR1BfUElOKDIsIDE3KSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpNV9kYXRhX211eFtdID0geworCVNTSV9TREFUQTVfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpNV9jdHJsX3BpbnNbXSA9IHsKKwkvKiBTQ0ssIFdTICovCisJUkNBUl9HUF9QSU4oMiwgMTUpLCBSQ0FSX0dQX1BJTigyLCAxNiksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTVfY3RybF9tdXhbXSA9IHsKKwlTU0lfU0NLNV9NQVJLLCBTU0lfV1M1X01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTZfZGF0YV9waW5zW10gPSB7CisJLyogU0RBVEEgKi8KKwlSQ0FSX0dQX1BJTigyLCAyMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTZfZGF0YV9tdXhbXSA9IHsKKwlTU0lfU0RBVEE2X01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTZfY3RybF9waW5zW10gPSB7CisJLyogU0NLLCBXUyAqLworCVJDQVJfR1BfUElOKDIsIDE4KSwgUkNBUl9HUF9QSU4oMiwgMTkpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k2X2N0cmxfbXV4W10gPSB7CisJU1NJX1NDSzZfTUFSSywgU1NJX1dTNl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k3X2RhdGFfcGluc1tdID0geworCS8qIFNEQVRBICovCisJUkNBUl9HUF9QSU4oMiwgMjMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k3X2RhdGFfbXV4W10gPSB7CisJU1NJX1NEQVRBN19NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k3X2RhdGFfYl9waW5zW10gPSB7CisJLyogU0RBVEEgKi8KKwlSQ0FSX0dQX1BJTigzLCAxMiksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTdfZGF0YV9iX211eFtdID0geworCVNTSV9TREFUQTdfQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k3OF9jdHJsX3BpbnNbXSA9IHsKKwkvKiBTQ0ssIFdTICovCisJUkNBUl9HUF9QSU4oMiwgMjEpLCBSQ0FSX0dQX1BJTigyLCAyMiksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTc4X2N0cmxfbXV4W10gPSB7CisJU1NJX1NDSzc4X01BUkssIFNTSV9XUzc4X01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTc4X2N0cmxfYl9waW5zW10gPSB7CisJLyogU0NLLCBXUyAqLworCVJDQVJfR1BfUElOKDMsIDEwKSwgUkNBUl9HUF9QSU4oMywgMTEpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k3OF9jdHJsX2JfbXV4W10gPSB7CisJU1NJX1NDSzc4X0JfTUFSSywgU1NJX1dTNzhfQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k4X2RhdGFfcGluc1tdID0geworCS8qIFNEQVRBICovCisJUkNBUl9HUF9QSU4oMiwgMjQpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k4X2RhdGFfbXV4W10gPSB7CisJU1NJX1NEQVRBOF9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k4X2RhdGFfYl9waW5zW10gPSB7CisJLyogU0RBVEEgKi8KKwlSQ0FSX0dQX1BJTigzLCAxMyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaThfZGF0YV9iX211eFtdID0geworCVNTSV9TREFUQThfQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k5X2RhdGFfcGluc1tdID0geworCS8qIFNEQVRBICovCisJUkNBUl9HUF9QSU4oMiwgMjcpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k5X2RhdGFfbXV4W10gPSB7CisJU1NJX1NEQVRBOV9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k5X2RhdGFfYl9waW5zW10gPSB7CisJLyogU0RBVEEgKi8KKwlSQ0FSX0dQX1BJTigzLCAxOCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzaTlfZGF0YV9iX211eFtdID0geworCVNTSV9TREFUQTlfQl9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzc2k5X2N0cmxfcGluc1tdID0geworCS8qIFNDSywgV1MgKi8KKwlSQ0FSX0dQX1BJTigyLCAyNSksIFJDQVJfR1BfUElOKDIsIDI2KSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpOV9jdHJsX211eFtdID0geworCVNTSV9TQ0s5X01BUkssIFNTSV9XUzlfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpOV9jdHJsX2JfcGluc1tdID0geworCS8qIFNDSywgV1MgKi8KKwlSQ0FSX0dQX1BJTigzLCAxNCksIFJDQVJfR1BfUElOKDMsIDE1KSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3NpOV9jdHJsX2JfbXV4W10gPSB7CisJU1NJX1NDSzlfQl9NQVJLLCBTU0lfV1M5X0JfTUFSSywKK307CisKIC8qIC0gVVNCMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjBfcGluc1tdID0gewogCVJDQVJfR1BfUElOKDcsIDIzKSwgLyogUFdFTiAqLwpAQCAtMzU1MCwxMiArMzg2NCwxOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9wZmNfcGluX2dyb3VwIHBpbm11eF9ncm91cHNbXSA9IHsKKwlTSF9QRkNfUElOX0dST1VQKGF1ZGlvX2Nsa19hKSwKKwlTSF9QRkNfUElOX0dST1VQKGF1ZGlvX2Nsa19iKSwKKwlTSF9QRkNfUElOX0dST1VQKGF1ZGlvX2Nsa19iX2IpLAorCVNIX1BGQ19QSU5fR1JPVVAoYXVkaW9fY2xrX2MpLAorCVNIX1BGQ19QSU5fR1JPVVAoYXVkaW9fY2xrb3V0KSwKIAlTSF9QRkNfUElOX0dST1VQKGR1X3JnYjY2NiksCiAJU0hfUEZDX1BJTl9HUk9VUChkdV9yZ2I4ODgpLAogCVNIX1BGQ19QSU5fR1JPVVAoZHVfY2xrX291dF8wKSwKIAlTSF9QRkNfUElOX0dST1VQKGR1X2Nsa19vdXRfMSksCiAJU0hfUEZDX1BJTl9HUk9VUChkdV9zeW5jKSwKLQlTSF9QRkNfUElOX0dST1VQKGR1X2NkZV9kaXNwKSwKKwlTSF9QRkNfUElOX0dST1VQKGR1X29kZGYpLAorCVNIX1BGQ19QSU5fR1JPVVAoZHVfY2RlKSwKKwlTSF9QRkNfUElOX0dST1VQKGR1X2Rpc3ApLAogCVNIX1BGQ19QSU5fR1JPVVAoZHUwX2Nsa19pbiksCiAJU0hfUEZDX1BJTl9HUk9VUChkdTFfY2xrX2luKSwKIAlTSF9QRkNfUElOX0dST1VQKGR1MV9jbGtfaW5fYiksCkBAIC0zNzYyLDYgKzQwODMsMzQgQEAKIAlTSF9QRkNfUElOX0dST1VQKHNkaGkyX2N0cmwpLAogCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTJfY2QpLAogCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTJfd3ApLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpMF9kYXRhKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTBfZGF0YV9iKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTAxMjlfY3RybCksCisJU0hfUEZDX1BJTl9HUk9VUChzc2kwMTI5X2N0cmxfYiksCisJU0hfUEZDX1BJTl9HUk9VUChzc2kxX2RhdGEpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpMV9kYXRhX2IpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpMV9jdHJsKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTFfY3RybF9iKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTJfZGF0YSksCisJU0hfUEZDX1BJTl9HUk9VUChzc2kyX2N0cmwpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpM19kYXRhKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTM0X2N0cmwpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpNF9kYXRhKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTRfY3RybCksCisJU0hfUEZDX1BJTl9HUk9VUChzc2k1X2RhdGEpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpNV9jdHJsKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTZfZGF0YSksCisJU0hfUEZDX1BJTl9HUk9VUChzc2k2X2N0cmwpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpN19kYXRhKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTdfZGF0YV9iKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTc4X2N0cmwpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpNzhfY3RybF9iKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaThfZGF0YSksCisJU0hfUEZDX1BJTl9HUk9VUChzc2k4X2RhdGFfYiksCisJU0hfUEZDX1BJTl9HUk9VUChzc2k5X2RhdGEpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpOV9kYXRhX2IpLAorCVNIX1BGQ19QSU5fR1JPVVAoc3NpOV9jdHJsKSwKKwlTSF9QRkNfUElOX0dST1VQKHNzaTlfY3RybF9iKSwKIAlTSF9QRkNfUElOX0dST1VQKHVzYjApLAogCVNIX1BGQ19QSU5fR1JPVVAodXNiMSksCiAJVklOX0RBVEFfUElOX0dST1VQKHZpbjBfZGF0YSwgMjQpLApAQCAtMzc5OCwxMyArNDE0NywyMyBAQAogCVNIX1BGQ19QSU5fR1JPVVAodmluMl9jbGspLAogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdWRpb19jbGtfZ3JvdXBzW10gPSB7CisJImF1ZGlvX2Nsa19hIiwKKwkiYXVkaW9fY2xrX2IiLAorCSJhdWRpb19jbGtfYl9iIiwKKwkiYXVkaW9fY2xrX2MiLAorCSJhdWRpb19jbGtvdXQiLAorfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkdV9ncm91cHNbXSA9IHsKIAkiZHVfcmdiNjY2IiwKIAkiZHVfcmdiODg4IiwKIAkiZHVfY2xrX291dF8wIiwKIAkiZHVfY2xrX291dF8xIiwKIAkiZHVfc3luYyIsCi0JImR1X2NkZV9kaXNwIiwKKwkiZHVfb2RkZiIsCisJImR1X2NkZSIsCisJImR1X2Rpc3AiLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkdTBfZ3JvdXBzW10gPSB7CkBAIC00MTAzLDYgKzQ0NjIsMzcgQEAKIAkic2RoaTJfd3AiLAogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzc2lfZ3JvdXBzW10gPSB7CisJInNzaTBfZGF0YSIsCisJInNzaTBfZGF0YV9iIiwKKwkic3NpMDEyOV9jdHJsIiwKKwkic3NpMDEyOV9jdHJsX2IiLAorCSJzc2kxX2RhdGEiLAorCSJzc2kxX2RhdGFfYiIsCisJInNzaTFfY3RybCIsCisJInNzaTFfY3RybF9iIiwKKwkic3NpMl9kYXRhIiwKKwkic3NpMl9jdHJsIiwKKwkic3NpM19kYXRhIiwKKwkic3NpMzRfY3RybCIsCisJInNzaTRfZGF0YSIsCisJInNzaTRfY3RybCIsCisJInNzaTVfZGF0YSIsCisJInNzaTVfY3RybCIsCisJInNzaTZfZGF0YSIsCisJInNzaTZfY3RybCIsCisJInNzaTdfZGF0YSIsCisJInNzaTdfZGF0YV9iIiwKKwkic3NpNzhfY3RybCIsCisJInNzaTc4X2N0cmxfYiIsCisJInNzaThfZGF0YSIsCisJInNzaThfZGF0YV9iIiwKKwkic3NpOV9kYXRhIiwKKwkic3NpOV9kYXRhX2IiLAorCSJzc2k5X2N0cmwiLAorCSJzc2k5X2N0cmxfYiIsCit9OworCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzYjBfZ3JvdXBzW10gPSB7CiAJInVzYjAiLAogfTsKQEAgLTQxNTIsNiArNDU0Miw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNoX3BmY19mdW5jdGlvbiBwaW5tdXhfZnVuY3Rpb25zW10gPSB7CisJU0hfUEZDX0ZVTkNUSU9OKGF1ZGlvX2NsayksCiAJU0hfUEZDX0ZVTkNUSU9OKGR1KSwKIAlTSF9QRkNfRlVOQ1RJT04oZHUwKSwKIAlTSF9QRkNfRlVOQ1RJT04oZHUxKSwKQEAgLTQxODcsNiArNDU3OCw3IEBACiAJU0hfUEZDX0ZVTkNUSU9OKHNkaGkwKSwKIAlTSF9QRkNfRlVOQ1RJT04oc2RoaTEpLAogCVNIX1BGQ19GVU5DVElPTihzZGhpMiksCisJU0hfUEZDX0ZVTkNUSU9OKHNzaSksCiAJU0hfUEZDX0ZVTkNUSU9OKHVzYjApLAogCVNIX1BGQ19GVU5DVElPTih1c2IxKSwKIAlTSF9QRkNfRlVOQ1RJT04odmluMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1zaDczYTAuYyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXNoNzNhMC5jCmluZGV4IDZmNmJhMTAuLmVlMzcwZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXNoNzNhMC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXNoNzNhMC5jCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKyNpZm5kZWYgQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STQogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAic2hfcGZjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3NoX3BmYy5oIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9zaF9wZmMuaAppbmRleCBhYjhmZDI1Li5kNDgyYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3NoX3BmYy5oCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvc2hfcGZjLmgKQEAgLTk4LDggKzk4LDEzIEBACiAJY29uc3Qgc2hvcnQgKmdwaW9zOwogfTsKIAorI2lmZGVmIENPTkZJR19BUkNIX01VTFRJUExBVEZPUk0KKyNkZWZpbmUgUElOTVVYX0lSUShpcnFfbnIsIGlkcy4uLikJCQkgICBcCisJeyAuZ3Bpb3MgPSAoY29uc3Qgc2hvcnQgW10pIHsgaWRzLCAtMSB9IH0KKyNlbHNlCiAjZGVmaW5lIFBJTk1VWF9JUlEoaXJxX25yLCBpZHMuLi4pCQkJICAgXAogCXsgLmlycSA9IGlycV9uciwgLmdwaW9zID0gKGNvbnN0IHNob3J0IFtdKSB7IGlkcywgLTEgfSB9CisjZW5kaWYKIAogc3RydWN0IHBpbm11eF9yYW5nZSB7CiAJdTE2IGJlZ2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3NpcmYvcGluY3RybC1zaXJmLmMgYi9kcml2ZXJzL3BpbmN0cmwvc2lyZi9waW5jdHJsLXNpcmYuYwppbmRleCA3NjUwMmFhLi4wMTRmNWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2lyZi9waW5jdHJsLXNpcmYuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvc2lyZi9waW5jdHJsLXNpcmYuYwpAQCAtMTQsOCArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmN0cmwuaD4KICNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3Bpbm11eC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4KQEAgLTI3LDIyICsyNSwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlICJwaW5jdHJsLXNpcmYuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAicGlubXV4LXNpcmYiCiAKIHN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayB7Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCBjaGlwOwotCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CiAJaW50IGlkOwogCWludCBwYXJlbnRfaXJxOwogCXNwaW5sb2NrX3QgbG9jazsKLQlib29sIGlzX21hcmNvOyAvKiBmb3IgbWFyY28sIHNvbWUgcmVnaXN0ZXJzIGFyZSBkaWZmZXJlbnQgd2l0aCBwcmltYTIgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2lyZnNvY19ncGlvX2Jhbmsgc2dwaW9fYmFua1tTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1NdOworc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwIGNoaXA7CisJYm9vbCBpc19tYXJjbzsgLyogZm9yIG1hcmNvLCBzb21lIHJlZ2lzdGVycyBhcmUgZGlmZmVyZW50IHdpdGggcHJpbWEyICovCisJc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rIHNncGlvX2JhbmtbU0lSRlNPQ19HUElPX05PX09GX0JBTktTXTsKK307CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2dwaW9fbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2lyZnNvY19waW5fZ3JvdXAgKnNpcmZzb2NfcGluX2dyb3VwczsKQEAgLTI1NSwzNyArMjU0LDYgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKLS8qCi0gKiBUb2RvOiBiaW5kIGlycV9jaGlwIHRvIGV2ZXJ5IHBpbmN0cmxfZ3Bpb19yYW5nZQotICovCi1zdGF0aWMgc3RydWN0IHBpbmN0cmxfZ3Bpb19yYW5nZSBzaXJmc29jX2dwaW9fcmFuZ2VzW10gPSB7Ci0JewotCQkubmFtZSA9ICJzaXJmc29jLWdwaW8qIiwKLQkJLmlkID0gMCwKLQkJLmJhc2UgPSAwLAotCQkucGluX2Jhc2UgPSAwLAotCQkubnBpbnMgPSAzMiwKLQl9LCB7Ci0JCS5uYW1lID0gInNpcmZzb2MtZ3BpbyoiLAotCQkuaWQgPSAxLAotCQkuYmFzZSA9IDMyLAotCQkucGluX2Jhc2UgPSAzMiwKLQkJLm5waW5zID0gMzIsCi0JfSwgewotCQkubmFtZSA9ICJzaXJmc29jLWdwaW8qIiwKLQkJLmlkID0gMiwKLQkJLmJhc2UgPSA2NCwKLQkJLnBpbl9iYXNlID0gNjQsCi0JCS5ucGlucyA9IDMyLAotCX0sIHsKLQkJLm5hbWUgPSAic2lyZnNvYy1ncGlvKiIsCi0JCS5pZCA9IDMsCi0JCS5iYXNlID0gOTYsCi0JCS5waW5fYmFzZSA9IDk2LAotCQkubnBpbnMgPSAxOSwKLQl9LAotfTsKLQogc3RhdGljIHZvaWQgX19pb21lbSAqc2lyZnNvY19yc2Nfb2ZfaW9tYXAodm9pZCkKIHsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJzY19pZHNbXSAgPSB7CkBAIC0zMDMsMTkgKzI3MSwxNiBAQAogfQogCiBzdGF0aWMgaW50IHNpcmZzb2NfZ3Bpb19vZl94bGF0ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKLSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpncGlvc3BlYywKLSAgICAgICB1MzIgKmZsYWdzKQorCWNvbnN0IHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmdwaW9zcGVjLAorCXUzMiAqZmxhZ3MpCiB7Ci0gICAgICAgaWYgKGdwaW9zcGVjLT5hcmdzWzBdID4gU0lSRlNPQ19HUElPX05PX09GX0JBTktTICogU0lSRlNPQ19HUElPX0JBTktfU0laRSkKKwlpZiAoZ3Bpb3NwZWMtPmFyZ3NbMF0gPiBTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1MgKiBTSVJGU09DX0dQSU9fQkFOS19TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIGlmIChnYyAhPSAmc2dwaW9fYmFua1tncGlvc3BlYy0+YXJnc1swXSAvIFNJUkZTT0NfR1BJT19CQU5LX1NJWkVdLmNoaXAuZ2MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0gICAgICAgaWYgKGZsYWdzKQorCWlmIChmbGFncykKIAkJKmZsYWdzID0gZ3Bpb3NwZWMtPmFyZ3NbMV07CiAKLSAgICAgICByZXR1cm4gZ3Bpb3NwZWMtPmFyZ3NbMF0gJSBTSVJGU09DX0dQSU9fQkFOS19TSVpFOworCXJldHVybiBncGlvc3BlYy0+YXJnc1swXTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGlubXV4X2lkc1tdID0gewpAQCAtMzMxLDcgKzI5Niw2IEBACiAJc3RydWN0IHNpcmZzb2NfcG14ICpzcG14OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAljb25zdCBzdHJ1Y3Qgc2lyZnNvY19waW5jdHJsX2RhdGEgKnBkYXRhOwotCWludCBpOwogCiAJLyogQ3JlYXRlIHN0YXRlIGhvbGRlcnMgZXRjIGZvciB0aGlzIGRyaXZlciAqLwogCXNwbXggPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpzcG14KSwgR0ZQX0tFUk5FTCk7CkBAIC0zNzUsMTEgKzMzOSw2IEBACiAJCWdvdG8gb3V0X25vX3BteDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaXJmc29jX2dwaW9fcmFuZ2VzKTsgaSsrKSB7Ci0JCXNpcmZzb2NfZ3Bpb19yYW5nZXNbaV0uZ2MgPSAmc2dwaW9fYmFua1tpXS5jaGlwLmdjOwotCQlwaW5jdHJsX2FkZF9ncGlvX3JhbmdlKHNwbXgtPnBteCwgJnNpcmZzb2NfZ3Bpb19yYW5nZXNbaV0pOwotCX0KLQogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0aWFsaXplZCBTSVJGU09DIHBpbm11eCBkcml2ZXJcbiIpOwogCiAJcmV0dXJuIDA7CkBAIC00NjQsMzQgKzQyMywyOCBAQAogfQogYXJjaF9pbml0Y2FsbChzaXJmc29jX3Bpbm11eF9pbml0KTsKIAotc3RhdGljIGlubGluZSBpbnQgc2lyZnNvY19ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaXJmc29jX2dwaW9fY2hpcCAqdG9fc2lyZnNvY19ncGlvKHN0cnVjdCBncGlvX2NoaXAgKmdjKQogewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IGNvbnRhaW5lcl9vZih0b19vZl9tbV9ncGlvX2NoaXAoY2hpcCksCi0JCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuaywgY2hpcCk7Ci0KLQlyZXR1cm4gaXJxX2NyZWF0ZV9tYXBwaW5nKGJhbmstPmRvbWFpbiwgb2Zmc2V0ICsgYmFuay0+aWQgKgotCQlTSVJGU09DX0dQSU9fQkFOS19TSVpFKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAsIGNoaXAuZ2MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaXJmc29jX2dwaW9fdG9fb2Zmc2V0KHVuc2lnbmVkIGludCBncGlvKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKgorc2lyZnNvY19ncGlvX3RvX2Jhbmsoc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbywgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLQlyZXR1cm4gZ3BpbyAlIFNJUkZTT0NfR1BJT19CQU5LX1NJWkU7CisJcmV0dXJuICZzZ3Bpby0+c2dwaW9fYmFua1tvZmZzZXQgLyBTSVJGU09DX0dQSU9fQkFOS19TSVpFXTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKnNpcmZzb2NfZ3Bpb190b19iYW5rKHVuc2lnbmVkIGludCBncGlvKQorc3RhdGljIGlubGluZSBpbnQgc2lyZnNvY19ncGlvX3RvX2JhbmtvZmYodW5zaWduZWQgaW50IG9mZnNldCkKIHsKLQlyZXR1cm4gJnNncGlvX2JhbmtbZ3BpbyAvIFNJUkZTT0NfR1BJT19CQU5LX1NJWkVdOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqc2lyZnNvY19pcnFjaGlwX3RvX2Jhbmsoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHRvX29mX21tX2dwaW9fY2hpcChjaGlwKSwgc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rLCBjaGlwKTsKKwlyZXR1cm4gb2Zmc2V0ICUgU0lSRlNPQ19HUElPX0JBTktfU0laRTsKIH0KIAogc3RhdGljIHZvaWQgc2lyZnNvY19ncGlvX2lycV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCWludCBpZHggPSBkLT5od2lycSAlIFNJUkZTT0NfR1BJT19CQU5LX1NJWkU7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvID0gdG9fc2lyZnNvY19ncGlvKGdjKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3BpbywgZC0+aHdpcnEpOworCWludCBpZHggPSBzaXJmc29jX2dwaW9fdG9fYmFua29mZihkLT5od2lycSk7CiAJdTMyIHZhbCwgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ5OSwxNCArNDUyLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2dwaW9fbG9jaywgZmxhZ3MpOwogCi0JdmFsID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKKwl2YWwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAotCXdyaXRlbCh2YWwsIGJhbmstPmNoaXAucmVncyArIG9mZnNldCk7CisJd3JpdGVsKHZhbCwgc2dwaW8tPmNoaXAucmVncyArIG9mZnNldCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZ3Bpb19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fc2lyZnNvY19ncGlvX2lycV9tYXNrKHN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuaywgaW50IGlkeCkKK3N0YXRpYyB2b2lkIF9fc2lyZnNvY19ncGlvX2lycV9tYXNrKHN0cnVjdCBzaXJmc29jX2dwaW9fY2hpcCAqc2dwaW8sCisJCQkJICAgIHN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuaywKKwkJCQkgICAgaW50IGlkeCkKIHsKIAl1MzIgdmFsLCBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUxNSwyNSArNDcwLDI5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2dwaW9fbG9jaywgZmxhZ3MpOwogCi0JdmFsID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKKwl2YWwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAl2YWwgJj0gflNJUkZTT0NfR1BJT19DVExfSU5UUl9FTl9NQVNLOwogCXZhbCAmPSB+U0lSRlNPQ19HUElPX0NUTF9JTlRSX1NUU19NQVNLOwotCXdyaXRlbCh2YWwsIGJhbmstPmNoaXAucmVncyArIG9mZnNldCk7CisJd3JpdGVsKHZhbCwgc2dwaW8tPmNoaXAucmVncyArIG9mZnNldCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZ3Bpb19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpcmZzb2NfZ3Bpb19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvID0gdG9fc2lyZnNvY19ncGlvKGdjKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3BpbywgZC0+aHdpcnEpOwogCi0JX19zaXJmc29jX2dwaW9faXJxX21hc2soYmFuaywgZC0+aHdpcnEgJSBTSVJGU09DX0dQSU9fQkFOS19TSVpFKTsKKwlfX3NpcmZzb2NfZ3Bpb19pcnFfbWFzayhzZ3BpbywgYmFuaywgZC0+aHdpcnEgJSBTSVJGU09DX0dQSU9fQkFOS19TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgc2lyZnNvY19ncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCWludCBpZHggPSBkLT5od2lycSAlIFNJUkZTT0NfR1BJT19CQU5LX1NJWkU7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvID0gdG9fc2lyZnNvY19ncGlvKGdjKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3BpbywgZC0+aHdpcnEpOworCWludCBpZHggPSBzaXJmc29jX2dwaW9fdG9fYmFua29mZihkLT5od2lycSk7CiAJdTMyIHZhbCwgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU0MSwxOCArNTAwLDIwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2dwaW9fbG9jaywgZmxhZ3MpOwogCi0JdmFsID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKKwl2YWwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAl2YWwgJj0gflNJUkZTT0NfR1BJT19DVExfSU5UUl9TVFNfTUFTSzsKIAl2YWwgfD0gU0lSRlNPQ19HUElPX0NUTF9JTlRSX0VOX01BU0s7Ci0Jd3JpdGVsKHZhbCwgYmFuay0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCBzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNncGlvX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBzaXJmc29jX2dwaW9faXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCB0eXBlKQogewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCWludCBpZHggPSBkLT5od2lycSAlIFNJUkZTT0NfR1BJT19CQU5LX1NJWkU7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvID0gdG9fc2lyZnNvY19ncGlvKGdjKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3BpbywgZC0+aHdpcnEpOworCWludCBpZHggPSBzaXJmc29jX2dwaW9fdG9fYmFua29mZihkLT5od2lycSk7CiAJdTMyIHZhbCwgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU2MCw3ICs1MjEsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNncGlvX2xvY2ssIGZsYWdzKTsKIAotCXZhbCA9IHJlYWRsKGJhbmstPmNoaXAucmVncyArIG9mZnNldCk7CisJdmFsID0gcmVhZGwoc2dwaW8tPmNoaXAucmVncyArIG9mZnNldCk7CiAJdmFsICY9IH4oU0lSRlNPQ19HUElPX0NUTF9JTlRSX1NUU19NQVNLIHwgU0lSRlNPQ19HUElPX0NUTF9PVVRfRU5fTUFTSyk7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTU4OCw1MyArNTQ5LDQxIEBACiAJCWJyZWFrOwogCX0KIAotCXdyaXRlbCh2YWwsIGJhbmstPmNoaXAucmVncyArIG9mZnNldCk7CisJd3JpdGVsKHZhbCwgc2dwaW8tPmNoaXAucmVncyArIG9mZnNldCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZ3Bpb19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaXJmc29jX2dwaW9faXJxX3JlcXJlcyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0KLQlpZiAoZ3Bpb19sb2NrX2FzX2lycSgmYmFuay0+Y2hpcC5nYywgZC0+aHdpcnEgJSBTSVJGU09DX0dQSU9fQkFOS19TSVpFKSkgewotCQlkZXZfZXJyKGJhbmstPmNoaXAuZ2MuZGV2LAotCQkJInVuYWJsZSB0byBsb2NrIEhXIElSUSAlbHUgZm9yIElSUVxuIiwKLQkJCWQtPmh3aXJxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzaXJmc29jX2dwaW9faXJxX3JlbHJlcyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0KLQlncGlvX3VubG9ja19hc19pcnEoJmJhbmstPmNoaXAuZ2MsIGQtPmh3aXJxICUgU0lSRlNPQ19HUElPX0JBTktfU0laRSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2lyZnNvY19pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJzaXJmLWdwaW8taXJxIiwKIAkuaXJxX2FjayA9IHNpcmZzb2NfZ3Bpb19pcnFfYWNrLAogCS5pcnFfbWFzayA9IHNpcmZzb2NfZ3Bpb19pcnFfbWFzaywKIAkuaXJxX3VubWFzayA9IHNpcmZzb2NfZ3Bpb19pcnFfdW5tYXNrLAogCS5pcnFfc2V0X3R5cGUgPSBzaXJmc29jX2dwaW9faXJxX3R5cGUsCi0JLmlycV9yZXF1ZXN0X3Jlc291cmNlcyA9IHNpcmZzb2NfZ3Bpb19pcnFfcmVxcmVzLAotCS5pcnFfcmVsZWFzZV9yZXNvdXJjZXMgPSBzaXJmc29jX2dwaW9faXJxX3JlbHJlcywKIH07CiAKIHN0YXRpYyB2b2lkIHNpcmZzb2NfZ3Bpb19oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvID0gdG9fc2lyZnNvY19ncGlvKGdjKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbms7CiAJdTMyIHN0YXR1cywgY3RybDsKIAlpbnQgaWR4ID0gMDsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZ2V0X2NoaXAoaXJxKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1M7IGkrKykgeworCQliYW5rID0gJnNncGlvLT5zZ3Bpb19iYW5rW2ldOworCQlpZiAoYmFuay0+cGFyZW50X2lycSA9PSBpcnEpCisJCQlicmVhazsKKwl9CisJQlVHX09OKGkgPT0gU0lSRlNPQ19HUElPX05PX09GX0JBTktTKTsKIAogCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwogCi0Jc3RhdHVzID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgU0lSRlNPQ19HUElPX0lOVF9TVEFUVVMoYmFuay0+aWQpKTsKKwlzdGF0dXMgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgU0lSRlNPQ19HUElPX0lOVF9TVEFUVVMoYmFuay0+aWQpKTsKIAlpZiAoIXN0YXR1cykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiJXM6IGdwaW8gaWQgJWQgc3RhdHVzICUjeCBubyBpbnRlcnJ1cHQgaXMgZmxhZ2VkXG4iLApAQCAtNjQ0LDcgKzU5Myw3IEBACiAJfQogCiAJd2hpbGUgKHN0YXR1cykgewotCQljdHJsID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIGlkeCkpOworCQljdHJsID0gcmVhZGwoc2dwaW8tPmNoaXAucmVncyArIFNJUkZTT0NfR1BJT19DVFJMKGJhbmstPmlkLCBpZHgpKTsKIAogCQkvKgogCQkgKiBIZXJlIHdlIG11c3QgY2hlY2sgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBHUElPJ3MgaW50ZXJydXB0CkBAIC02NTMsNyArNjAyLDcgQEAKIAkJaWYgKChzdGF0dXMgJiAweDEpICYmIChjdHJsICYgU0lSRlNPQ19HUElPX0NUTF9JTlRSX0VOX01BU0spKSB7CiAJCQlwcl9kZWJ1ZygiJXM6IGdwaW8gaWQgJWQgaWR4ICVkIGhhcHBlbnNcbiIsCiAJCQkJX19mdW5jX18sIGJhbmstPmlkLCBpZHgpOwotCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYmFuay0+ZG9tYWluLCBpZHggKworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoZ2MtPmlycWRvbWFpbiwgaWR4ICsKIAkJCQkJYmFuay0+aWQgKiBTSVJGU09DX0dQSU9fQkFOS19TSVpFKSk7CiAJCX0KIApAQCAtNjY0LDE4ICs2MTMsMjAgQEAKIAljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lyZnNvY19ncGlvX3NldF9pbnB1dChzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmssIHVuc2lnbmVkIGN0cmxfb2Zmc2V0KQorc3RhdGljIGlubGluZSB2b2lkIHNpcmZzb2NfZ3Bpb19zZXRfaW5wdXQoc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbywKKwkJCQkJICB1bnNpZ25lZCBjdHJsX29mZnNldCkKIHsKIAl1MzIgdmFsOwogCi0JdmFsID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgY3RybF9vZmZzZXQpOworCXZhbCA9IHJlYWRsKHNncGlvLT5jaGlwLnJlZ3MgKyBjdHJsX29mZnNldCk7CiAJdmFsICY9IH5TSVJGU09DX0dQSU9fQ1RMX09VVF9FTl9NQVNLOwotCXdyaXRlbCh2YWwsIGJhbmstPmNoaXAucmVncyArIGN0cmxfb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCBzZ3Bpby0+Y2hpcC5yZWdzICsgY3RybF9vZmZzZXQpOwogfQogCiBzdGF0aWMgaW50IHNpcmZzb2NfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2lycWNoaXBfdG9fYmFuayhjaGlwKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvID0gdG9fc2lyZnNvY19ncGlvKGNoaXApOworCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IHNpcmZzb2NfZ3Bpb190b19iYW5rKHNncGlvLCBvZmZzZXQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocGluY3RybF9yZXF1ZXN0X2dwaW8oY2hpcC0+YmFzZSArIG9mZnNldCkpCkBAIC02ODcsOCArNjM4LDggQEAKIAkgKiBkZWZhdWx0IHN0YXR1czoKIAkgKiBzZXQgZGlyZWN0aW9uIGFzIGlucHV0IGFuZCBtYXNrIGlycQogCSAqLwotCXNpcmZzb2NfZ3Bpb19zZXRfaW5wdXQoYmFuaywgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIG9mZnNldCkpOwotCV9fc2lyZnNvY19ncGlvX2lycV9tYXNrKGJhbmssIG9mZnNldCk7CisJc2lyZnNvY19ncGlvX3NldF9pbnB1dChzZ3BpbywgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIG9mZnNldCkpOworCV9fc2lyZnNvY19ncGlvX2lycV9tYXNrKHNncGlvLCBiYW5rLCBvZmZzZXQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCkBAIC02OTcsMTMgKzY0OCwxNCBAQAogCiBzdGF0aWMgdm9pZCBzaXJmc29jX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gc2lyZnNvY19pcnFjaGlwX3RvX2JhbmsoY2hpcCk7CisJc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbyA9IHRvX3NpcmZzb2NfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3Bpbywgb2Zmc2V0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAotCV9fc2lyZnNvY19ncGlvX2lycV9tYXNrKGJhbmssIG9mZnNldCk7Ci0Jc2lyZnNvY19ncGlvX3NldF9pbnB1dChiYW5rLCBTSVJGU09DX0dQSU9fQ1RSTChiYW5rLT5pZCwgb2Zmc2V0KSk7CisJX19zaXJmc29jX2dwaW9faXJxX21hc2soc2dwaW8sIGJhbmssIG9mZnNldCk7CisJc2lyZnNvY19ncGlvX3NldF9pbnB1dChzZ3BpbywgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIG9mZnNldCkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCkBAIC03MTIsOCArNjY0LDkgQEAKIAogc3RhdGljIGludCBzaXJmc29jX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8pCiB7Ci0Jc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gc2lyZnNvY19pcnFjaGlwX3RvX2JhbmsoY2hpcCk7Ci0JaW50IGlkeCA9IHNpcmZzb2NfZ3Bpb190b19vZmZzZXQoZ3Bpbyk7CisJc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbyA9IHRvX3NpcmZzb2NfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3BpbywgZ3Bpbyk7CisJaW50IGlkeCA9IHNpcmZzb2NfZ3Bpb190b19iYW5rb2ZmKGdwaW8pOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgb2Zmc2V0OwogCkBAIC03MjEsMjIgKzY3NCwyNCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAotCXNpcmZzb2NfZ3Bpb19zZXRfaW5wdXQoYmFuaywgb2Zmc2V0KTsKKwlzaXJmc29jX2dwaW9fc2V0X2lucHV0KHNncGlvLCBvZmZzZXQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzaXJmc29jX2dwaW9fc2V0X291dHB1dChzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmssIHVuc2lnbmVkIG9mZnNldCwKLQlpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2lyZnNvY19ncGlvX3NldF9vdXRwdXQoc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbywKKwkJCQkJICAgc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rLAorCQkJCQkgICB1bnNpZ25lZCBvZmZzZXQsCisJCQkJCSAgIGludCB2YWx1ZSkKIHsKIAl1MzIgb3V0X2N0cmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAKLQlvdXRfY3RybCA9IHJlYWRsKGJhbmstPmNoaXAucmVncyArIG9mZnNldCk7CisJb3V0X2N0cmwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAlpZiAodmFsdWUpCiAJCW91dF9jdHJsIHw9IFNJUkZTT0NfR1BJT19DVExfREFUQU9VVF9NQVNLOwogCWVsc2UKQEAgLTc0NCwxNSArNjk5LDE2IEBACiAKIAlvdXRfY3RybCAmPSB+U0lSRlNPQ19HUElPX0NUTF9JTlRSX0VOX01BU0s7CiAJb3V0X2N0cmwgfD0gU0lSRlNPQ19HUElPX0NUTF9PVVRfRU5fTUFTSzsKLQl3cml0ZWwob3V0X2N0cmwsIGJhbmstPmNoaXAucmVncyArIG9mZnNldCk7CisJd3JpdGVsKG91dF9jdHJsLCBzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBzaXJmc29jX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gc2lyZnNvY19pcnFjaGlwX3RvX2JhbmsoY2hpcCk7Ci0JaW50IGlkeCA9IHNpcmZzb2NfZ3Bpb190b19vZmZzZXQoZ3Bpbyk7CisJc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbyA9IHRvX3NpcmZzb2NfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbmsgPSBzaXJmc29jX2dwaW9fdG9fYmFuayhzZ3BpbywgZ3Bpbyk7CisJaW50IGlkeCA9IHNpcmZzb2NfZ3Bpb190b19iYW5rb2ZmKGdwaW8pOwogCXUzMiBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzYwLDcgKzcxNiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2dwaW9fbG9jaywgZmxhZ3MpOwogCi0Jc2lyZnNvY19ncGlvX3NldF9vdXRwdXQoYmFuaywgb2Zmc2V0LCB2YWx1ZSk7CisJc2lyZnNvY19ncGlvX3NldF9vdXRwdXQoc2dwaW8sIGJhbmssIG9mZnNldCwgdmFsdWUpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2dwaW9fbG9jaywgZmxhZ3MpOwogCkBAIC03NjksMTMgKzcyNSwxNCBAQAogCiBzdGF0aWMgaW50IHNpcmZzb2NfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IHNpcmZzb2NfaXJxY2hpcF90b19iYW5rKGNoaXApOworCXN0cnVjdCBzaXJmc29jX2dwaW9fY2hpcCAqc2dwaW8gPSB0b19zaXJmc29jX2dwaW8oY2hpcCk7CisJc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gc2lyZnNvY19ncGlvX3RvX2Jhbmsoc2dwaW8sIG9mZnNldCk7CiAJdTMyIHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAotCXZhbCA9IHJlYWRsKGJhbmstPmNoaXAucmVncyArIFNJUkZTT0NfR1BJT19DVFJMKGJhbmstPmlkLCBvZmZzZXQpKTsKKwl2YWwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIG9mZnNldCkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCkBAIC03ODUsNDQgKzc0MiwyNSBAQAogc3RhdGljIHZvaWQgc2lyZnNvY19ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCiAJaW50IHZhbHVlKQogewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IHNpcmZzb2NfaXJxY2hpcF90b19iYW5rKGNoaXApOworCXN0cnVjdCBzaXJmc29jX2dwaW9fY2hpcCAqc2dwaW8gPSB0b19zaXJmc29jX2dwaW8oY2hpcCk7CisJc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rID0gc2lyZnNvY19ncGlvX3RvX2Jhbmsoc2dwaW8sIG9mZnNldCk7CiAJdTMyIGN0cmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAKLQljdHJsID0gcmVhZGwoYmFuay0+Y2hpcC5yZWdzICsgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIG9mZnNldCkpOworCWN0cmwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgU0lSRlNPQ19HUElPX0NUUkwoYmFuay0+aWQsIG9mZnNldCkpOwogCWlmICh2YWx1ZSkKIAkJY3RybCB8PSBTSVJGU09DX0dQSU9fQ1RMX0RBVEFPVVRfTUFTSzsKIAllbHNlCiAJCWN0cmwgJj0gflNJUkZTT0NfR1BJT19DVExfREFUQU9VVF9NQVNLOwotCXdyaXRlbChjdHJsLCBiYW5rLT5jaGlwLnJlZ3MgKyBTSVJGU09DX0dQSU9fQ1RSTChiYW5rLT5pZCwgb2Zmc2V0KSk7CisJd3JpdGVsKGN0cmwsIHNncGlvLT5jaGlwLnJlZ3MgKyBTSVJGU09DX0dQSU9fQ1RSTChiYW5rLT5pZCwgb2Zmc2V0KSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgc2lyZnNvY19ncGlvX2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsCi0JCQkJaXJxX2h3X251bWJlcl90IGh3aXJxKQotewotCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayAqYmFuayA9IGQtPmhvc3RfZGF0YTsKLQotCWlmICghYmFuaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpcnFfc2V0X2NoaXAoaXJxLCAmc2lyZnNvY19pcnFfY2hpcCk7Ci0JaXJxX3NldF9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBiYW5rICsgaHdpcnEgLyBTSVJGU09DX0dQSU9fQkFOS19TSVpFKTsKLQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBzaXJmc29jX2dwaW9faXJxX3NpbXBsZV9vcHMgPSB7Ci0JLm1hcCA9IHNpcmZzb2NfZ3Bpb19pcnFfbWFwLAotCS54bGF0ZSA9IGlycV9kb21haW5feGxhdGVfdHdvY2VsbCwKLX07Ci0KLXN0YXRpYyB2b2lkIHNpcmZzb2NfZ3Bpb19zZXRfcHVsbHVwKGNvbnN0IHUzMiAqcHVsbHVwcykKK3N0YXRpYyB2b2lkIHNpcmZzb2NfZ3Bpb19zZXRfcHVsbHVwKHN0cnVjdCBzaXJmc29jX2dwaW9fY2hpcCAqc2dwaW8sCisJCQkJICAgIGNvbnN0IHUzMiAqcHVsbHVwcykKIHsKIAlpbnQgaSwgbjsKIAljb25zdCB1bnNpZ25lZCBsb25nICpwID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilwdWxsdXBzOwpAQCAtODMwLDE1ICs3NjgsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgU0lSRlNPQ19HUElPX05PX09GX0JBTktTOyBpKyspIHsKIAkJZm9yX2VhY2hfc2V0X2JpdChuLCBwICsgaSwgQklUU19QRVJfTE9ORykgewogCQkJdTMyIG9mZnNldCA9IFNJUkZTT0NfR1BJT19DVFJMKGksIG4pOwotCQkJdTMyIHZhbCA9IHJlYWRsKHNncGlvX2JhbmtbaV0uY2hpcC5yZWdzICsgb2Zmc2V0KTsKKwkJCXUzMiB2YWwgPSByZWFkbChzZ3Bpby0+Y2hpcC5yZWdzICsgb2Zmc2V0KTsKIAkJCXZhbCB8PSBTSVJGU09DX0dQSU9fQ1RMX1BVTExfTUFTSzsKIAkJCXZhbCB8PSBTSVJGU09DX0dQSU9fQ1RMX1BVTExfSElHSDsKLQkJCXdyaXRlbCh2YWwsIHNncGlvX2JhbmtbaV0uY2hpcC5yZWdzICsgb2Zmc2V0KTsKKwkJCXdyaXRlbCh2YWwsIHNncGlvLT5jaGlwLnJlZ3MgKyBvZmZzZXQpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzaXJmc29jX2dwaW9fc2V0X3B1bGxkb3duKGNvbnN0IHUzMiAqcHVsbGRvd25zKQorc3RhdGljIHZvaWQgc2lyZnNvY19ncGlvX3NldF9wdWxsZG93bihzdHJ1Y3Qgc2lyZnNvY19ncGlvX2NoaXAgKnNncGlvLAorCQkJCSAgICAgIGNvbnN0IHUzMiAqcHVsbGRvd25zKQogewogCWludCBpLCBuOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKXB1bGxkb3duczsKQEAgLTg0NiwxMCArNzg1LDEwIEBACiAJZm9yIChpID0gMDsgaSA8IFNJUkZTT0NfR1BJT19OT19PRl9CQU5LUzsgaSsrKSB7CiAJCWZvcl9lYWNoX3NldF9iaXQobiwgcCArIGksIEJJVFNfUEVSX0xPTkcpIHsKIAkJCXUzMiBvZmZzZXQgPSBTSVJGU09DX0dQSU9fQ1RSTChpLCBuKTsKLQkJCXUzMiB2YWwgPSByZWFkbChzZ3Bpb19iYW5rW2ldLmNoaXAucmVncyArIG9mZnNldCk7CisJCQl1MzIgdmFsID0gcmVhZGwoc2dwaW8tPmNoaXAucmVncyArIG9mZnNldCk7CiAJCQl2YWwgfD0gU0lSRlNPQ19HUElPX0NUTF9QVUxMX01BU0s7CiAJCQl2YWwgJj0gflNJUkZTT0NfR1BJT19DVExfUFVMTF9ISUdIOwotCQkJd3JpdGVsKHZhbCwgc2dwaW9fYmFua1tpXS5jaGlwLnJlZ3MgKyBvZmZzZXQpOworCQkJd3JpdGVsKHZhbCwgc2dwaW8tPmNoaXAucmVncyArIG9mZnNldCk7CiAJCX0KIAl9CiB9CkBAIC04NTcsMTAgKzc5NiwxMCBAQAogc3RhdGljIGludCBzaXJmc29jX2dwaW9fcHJvYmUoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlpbnQgaSwgZXJyID0gMDsKKwlzdGF0aWMgc3RydWN0IHNpcmZzb2NfZ3Bpb19jaGlwICpzZ3BpbzsKIAlzdHJ1Y3Qgc2lyZnNvY19ncGlvX2JhbmsgKmJhbms7CiAJdm9pZCBfX2lvbWVtICpyZWdzOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKIAlib29sIGlzX21hcmNvID0gZmFsc2U7CiAKIAl1MzIgcHVsbHVwc1tTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1NdLCBwdWxsZG93bnNbU0lSRlNPQ19HUElPX05PX09GX0JBTktTXTsKQEAgLTg2OSw2ICs4MDgsMTAgQEAKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCisJc2dwaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpzZ3BpbyksIEdGUF9LRVJORUwpOworCWlmICghc2dwaW8pCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVncyA9IG9mX2lvbWFwKG5wLCAwKTsKIAlpZiAoIXJlZ3MpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODc2LDYzICs4MTksNzYgQEAKIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzaXJmLG1hcmNvLXBpbmN0cmwiKSkKIAkJaXNfbWFyY28gPSAxOwogCi0JZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5wLCBTSVJGU09DX0dQSU9fQkFOS19TSVpFICogU0lSRlNPQ19HUElPX05PX09GX0JBTktTLAotCQkmc2lyZnNvY19ncGlvX2lycV9zaW1wbGVfb3BzLCBzZ3Bpb19iYW5rKTsKLQlpZiAoIWRvbWFpbikgewotCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gY3JlYXRlIGlycWRvbWFpblxuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0JCQllcnIgPSAtRU5PU1lTOworCXNncGlvLT5jaGlwLmdjLnJlcXVlc3QgPSBzaXJmc29jX2dwaW9fcmVxdWVzdDsKKwlzZ3Bpby0+Y2hpcC5nYy5mcmVlID0gc2lyZnNvY19ncGlvX2ZyZWU7CisJc2dwaW8tPmNoaXAuZ2MuZGlyZWN0aW9uX2lucHV0ID0gc2lyZnNvY19ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlzZ3Bpby0+Y2hpcC5nYy5nZXQgPSBzaXJmc29jX2dwaW9fZ2V0X3ZhbHVlOworCXNncGlvLT5jaGlwLmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBzaXJmc29jX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwlzZ3Bpby0+Y2hpcC5nYy5zZXQgPSBzaXJmc29jX2dwaW9fc2V0X3ZhbHVlOworCXNncGlvLT5jaGlwLmdjLmJhc2UgPSAwOworCXNncGlvLT5jaGlwLmdjLm5ncGlvID0gU0lSRlNPQ19HUElPX0JBTktfU0laRSAqIFNJUkZTT0NfR1BJT19OT19PRl9CQU5LUzsKKwlzZ3Bpby0+Y2hpcC5nYy5sYWJlbCA9IGtzdHJkdXAobnAtPmZ1bGxfbmFtZSwgR0ZQX0tFUk5FTCk7CisJc2dwaW8tPmNoaXAuZ2Mub2Zfbm9kZSA9IG5wOworCXNncGlvLT5jaGlwLmdjLm9mX3hsYXRlID0gc2lyZnNvY19ncGlvX29mX3hsYXRlOworCXNncGlvLT5jaGlwLmdjLm9mX2dwaW9fbl9jZWxscyA9IDI7CisJc2dwaW8tPmNoaXAuZ2MuZGV2ID0gJnBkZXYtPmRldjsKKwlzZ3Bpby0+Y2hpcC5yZWdzID0gcmVnczsKKwlzZ3Bpby0+aXNfbWFyY28gPSBpc19tYXJjbzsKKworCWVyciA9IGdwaW9jaGlwX2FkZCgmc2dwaW8tPmNoaXAuZ2MpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGVycm9yIGluIHByb2JlIGZ1bmN0aW9uIHdpdGggc3RhdHVzICVkXG4iLAorCQkJbnAtPmZ1bGxfbmFtZSwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gIGdwaW9jaGlwX2lycWNoaXBfYWRkKCZzZ3Bpby0+Y2hpcC5nYywKKwkJJnNpcmZzb2NfaXJxX2NoaXAsCisJCTAsIGhhbmRsZV9sZXZlbF9pcnEsCisJCUlSUV9UWVBFX05PTkUpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImNvdWxkIG5vdCBjb25uZWN0IGlycWNoaXAgdG8gZ3Bpb2NoaXBcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0lSRlNPQ19HUElPX05PX09GX0JBTktTOyBpKyspIHsKLQkJYmFuayA9ICZzZ3Bpb19iYW5rW2ldOworCQliYW5rID0gJnNncGlvLT5zZ3Bpb19iYW5rW2ldOwogCQlzcGluX2xvY2tfaW5pdCgmYmFuay0+bG9jayk7Ci0JCWJhbmstPmNoaXAuZ2MucmVxdWVzdCA9IHNpcmZzb2NfZ3Bpb19yZXF1ZXN0OwotCQliYW5rLT5jaGlwLmdjLmZyZWUgPSBzaXJmc29jX2dwaW9fZnJlZTsKLQkJYmFuay0+Y2hpcC5nYy5kaXJlY3Rpb25faW5wdXQgPSBzaXJmc29jX2dwaW9fZGlyZWN0aW9uX2lucHV0OwotCQliYW5rLT5jaGlwLmdjLmdldCA9IHNpcmZzb2NfZ3Bpb19nZXRfdmFsdWU7Ci0JCWJhbmstPmNoaXAuZ2MuZGlyZWN0aW9uX291dHB1dCA9IHNpcmZzb2NfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OwotCQliYW5rLT5jaGlwLmdjLnNldCA9IHNpcmZzb2NfZ3Bpb19zZXRfdmFsdWU7Ci0JCWJhbmstPmNoaXAuZ2MudG9faXJxID0gc2lyZnNvY19ncGlvX3RvX2lycTsKLQkJYmFuay0+Y2hpcC5nYy5iYXNlID0gaSAqIFNJUkZTT0NfR1BJT19CQU5LX1NJWkU7Ci0JCWJhbmstPmNoaXAuZ2MubmdwaW8gPSBTSVJGU09DX0dQSU9fQkFOS19TSVpFOwotCQliYW5rLT5jaGlwLmdjLmxhYmVsID0ga3N0cmR1cChucC0+ZnVsbF9uYW1lLCBHRlBfS0VSTkVMKTsKLQkJYmFuay0+Y2hpcC5nYy5vZl9ub2RlID0gbnA7Ci0JCWJhbmstPmNoaXAuZ2Mub2ZfeGxhdGUgPSBzaXJmc29jX2dwaW9fb2ZfeGxhdGU7Ci0JCWJhbmstPmNoaXAuZ2Mub2ZfZ3Bpb19uX2NlbGxzID0gMjsKLQkJYmFuay0+Y2hpcC5nYy5kZXYgPSAmcGRldi0+ZGV2OwotCQliYW5rLT5jaGlwLnJlZ3MgPSByZWdzOwotCQliYW5rLT5pZCA9IGk7Ci0JCWJhbmstPmlzX21hcmNvID0gaXNfbWFyY287CiAJCWJhbmstPnBhcmVudF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOwogCQlpZiAoYmFuay0+cGFyZW50X2lycSA8IDApIHsKIAkJCWVyciA9IGJhbmstPnBhcmVudF9pcnE7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2JhbmtzOwogCQl9CiAKLQkJZXJyID0gZ3Bpb2NoaXBfYWRkKCZiYW5rLT5jaGlwLmdjKTsKLQkJaWYgKGVycikgewotCQkJcHJfZXJyKCIlczogZXJyb3IgaW4gcHJvYmUgZnVuY3Rpb24gd2l0aCBzdGF0dXMgJWRcbiIsCi0JCQkJbnAtPmZ1bGxfbmFtZSwgZXJyKTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCWdwaW9jaGlwX3NldF9jaGFpbmVkX2lycWNoaXAoJnNncGlvLT5jaGlwLmdjLAorCQkJJnNpcmZzb2NfaXJxX2NoaXAsCisJCQliYW5rLT5wYXJlbnRfaXJxLAorCQkJc2lyZnNvY19ncGlvX2hhbmRsZV9pcnEpOworCX0KIAotCQliYW5rLT5kb21haW4gPSBkb21haW47Ci0KLQkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoYmFuay0+cGFyZW50X2lycSwgc2lyZnNvY19ncGlvX2hhbmRsZV9pcnEpOwotCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShiYW5rLT5wYXJlbnRfaXJxLCBiYW5rKTsKKwllcnIgPSBncGlvY2hpcF9hZGRfcGluX3JhbmdlKCZzZ3Bpby0+Y2hpcC5nYywgZGV2X25hbWUoJnBkZXYtPmRldiksCisJCTAsIDAsIFNJUkZTT0NfR1BJT19CQU5LX1NJWkUgKiBTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1MpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImNvdWxkIG5vdCBhZGQgZ3Bpb2NoaXAgcGluIHJhbmdlXG4iKTsKKwkJZ290byBvdXRfbm9fcmFuZ2U7CiAJfQogCiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShucCwgInNpcmYscHVsbHVwcyIsIHB1bGx1cHMsCiAJCVNJUkZTT0NfR1BJT19OT19PRl9CQU5LUykpCi0JCXNpcmZzb2NfZ3Bpb19zZXRfcHVsbHVwKHB1bGx1cHMpOworCQlzaXJmc29jX2dwaW9fc2V0X3B1bGx1cChzZ3BpbywgcHVsbHVwcyk7CiAKIAlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5wLCAic2lyZixwdWxsZG93bnMiLCBwdWxsZG93bnMsCiAJCVNJUkZTT0NfR1BJT19OT19PRl9CQU5LUykpCi0JCXNpcmZzb2NfZ3Bpb19zZXRfcHVsbGRvd24ocHVsbGRvd25zKTsKKwkJc2lyZnNvY19ncGlvX3NldF9wdWxsZG93bihzZ3BpbywgcHVsbGRvd25zKTsKIAogCXJldHVybiAwOwogCitvdXRfbm9fcmFuZ2U6CitvdXRfYmFua3M6CisJaWYgKGdwaW9jaGlwX3JlbW92ZSgmc2dwaW8tPmNoaXAuZ2MpKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVtb3ZlIGdwaW8gY2hpcFxuIik7CiBvdXQ6CiAJaW91bm1hcChyZWdzKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3N1bnhpL0tjb25maWcgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2UwYTMwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9LY29uZmlnCkBAIC0wLDAgKzEsMzYgQEAKK2lmIEFSQ0hfU1VOWEkKKworY29uZmlnIFBJTkNUUkxfU1VOWEkKKwlib29sCisKK2NvbmZpZyBQSU5DVFJMX1NVTlhJX0NPTU1PTgorCWJvb2wKKwlzZWxlY3QgUElOTVVYCisJc2VsZWN0IEdFTkVSSUNfUElOQ09ORgorCitjb25maWcgUElOQ1RSTF9TVU40SV9BMTAKKwlkZWZfYm9vbCBQSU5DVFJMX1NVTlhJIHx8IE1BQ0hfU1VONEkKKwlzZWxlY3QgUElOQ1RSTF9TVU5YSV9DT01NT04KKworY29uZmlnIFBJTkNUUkxfU1VONUlfQTEwUworCWRlZl9ib29sIFBJTkNUUkxfU1VOWEkgfHwgTUFDSF9TVU41SQorCXNlbGVjdCBQSU5DVFJMX1NVTlhJX0NPTU1PTgorCitjb25maWcgUElOQ1RSTF9TVU41SV9BMTMKKwlkZWZfYm9vbCBQSU5DVFJMX1NVTlhJIHx8IE1BQ0hfU1VONUkKKwlzZWxlY3QgUElOQ1RSTF9TVU5YSV9DT01NT04KKworY29uZmlnIFBJTkNUUkxfU1VONklfQTMxCisJZGVmX2Jvb2wgUElOQ1RSTF9TVU5YSSB8fCBNQUNIX1NVTjZJCisJc2VsZWN0IFBJTkNUUkxfU1VOWElfQ09NTU9OCisKK2NvbmZpZyBQSU5DVFJMX1NVTjZJX0EzMV9SCisJZGVmX2Jvb2wgUElOQ1RSTF9TVU5YSSB8fCBNQUNIX1NVTjZJCisJZGVwZW5kcyBvbiBSRVNFVF9DT05UUk9MTEVSCisJc2VsZWN0IFBJTkNUUkxfU1VOWElfQ09NTU9OCisKK2NvbmZpZyBQSU5DVFJMX1NVTjdJX0EyMAorCWRlZl9ib29sIFBJTkNUUkxfU1VOWEkgfHwgTUFDSF9TVU43SQorCXNlbGVjdCBQSU5DVFJMX1NVTlhJX0NPTU1PTgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3N1bnhpL01ha2VmaWxlIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNDQ2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIyBDb3JlCitvYmotJChDT05GSUdfUElOQ1RSTF9TVU5YSV9DT01NT04pCSs9IHBpbmN0cmwtc3VueGkubworCisjIFNvQyBEcml2ZXJzCitvYmotJChDT05GSUdfUElOQ1RSTF9TVU40SV9BMTApCQkrPSBwaW5jdHJsLXN1bjRpLWExMC5vCitvYmotJChDT05GSUdfUElOQ1RSTF9TVU41SV9BMTBTKQkrPSBwaW5jdHJsLXN1bjVpLWExMHMubworb2JqLSQoQ09ORklHX1BJTkNUUkxfU1VONUlfQTEzKQkJKz0gcGluY3RybC1zdW41aS1hMTMubworb2JqLSQoQ09ORklHX1BJTkNUUkxfU1VONklfQTMxKQkJKz0gcGluY3RybC1zdW42aS1hMzEubworb2JqLSQoQ09ORklHX1BJTkNUUkxfU1VONklfQTMxX1IpCSs9IHBpbmN0cmwtc3VuNmktYTMxLXIubworb2JqLSQoQ09ORklHX1BJTkNUUkxfU1VON0lfQTIwKQkJKz0gcGluY3RybC1zdW43aS1hMjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VuNGktYTEwLmMgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW40aS1hMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTFmZjdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VuNGktYTEwLmMKQEAgLTAsMCArMSwxMDM5IEBACisvKgorICogQWxsd2lubmVyIEExMCBTb0NzIHBpbmN0cmwgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXhpbWUgUmlwYXJkCisgKgorICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLXN1bnhpLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNGlfYTEwX3BpbnNbXSA9IHsKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpKSwJLyogUlRTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDIiKSksCS8qIENUUyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTEiKSwJCS8qIE1PU0kgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIiksCQkvKiBNSVNPICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDIiKSksCS8qIFJYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpKSwJCS8qIENTMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTMiKSksCQkvKiBDUzAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMyIpKSwJCS8qIE1PU0kgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIikpLAkJLyogTUlTTyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIikpLAkJLyogQ1MxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEViAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBUWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRU1EQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRU1ESU8gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NiIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogUlRTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhFTiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBDVFMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWENLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDciKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERUUiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRUNSUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ3IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBEU1IgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVDT0wgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjYW4iKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERDRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRVJSICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY2FuIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSSU5HICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAicHdtIikpLAkJLyogUFdNMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpcjAiKSksCQkvKiBUWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpcjAiKSksCQkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIE1DTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogTUNMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIEJDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogQkNMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIExSQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogU1lOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIERPMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImFjOTciKSksCQkvKiBETyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSksCQkvKiBETzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkycyIpKSwJCS8qIERPMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIikpLAkJLyogRE8zICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIERJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpKSwJCS8qIERJICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIikpLAkJLyogQ1MxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogTVMwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDE1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogQ0swICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpKSwJCS8qIERPMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSksCQkvKiBESTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMjIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQwIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImlyMSIpKSwJCS8qIFRYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDIzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpcjEiKSksCQkvKiBSWCAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5XRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNT1NJICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQUxFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIE1JU08gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DTEUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOQ0UxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOQ0UwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOUkUjICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOUkIwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFEyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5EUTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRNiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5EUTcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOV1AgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBOQ0UyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkNFMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkyIikpLAkJLyogQ1MwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0U2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMiIpKSwJCS8qIE1PU0kgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0U3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMiIpKSwJCS8qIE1JU08gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFFTICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4wICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUEMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUEMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTkMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWUDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMxIikpLAkvKiBWTjMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSksCQkvKiBNQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBWUFBFTiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogVlBQUFAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIERFVCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogVkNDRU4gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIERFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogUlNUICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBIU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogVlNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBTREEgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIFBDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogSFNZTkMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEVkxEICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIFZTWU5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic2ltIikpLAkJLyogVlBQRU4gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBENyAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVNJICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERJMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBDSzEgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogUENLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIENLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBIU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBEMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIERWTEQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBWU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBEMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMxIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEOCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMxIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEOSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDEwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBENCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIFJUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIENUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ0IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ0IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImNzaTAiKSksCQkvKiBEMTUgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAwKSwJCS8qIEVJTlQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxKSwJCS8qIEVJTlQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQTIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlRTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMiksCQkvKiBFSU5UMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUlSUSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAzKSwJCS8qIEVJTlQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA0KSwJCS8qIEVJTlQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA1KSwJCS8qIEVJTlQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NSIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogQlMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA2KSwJCS8qIEVJTlQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NSIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNyksCQkvKiBFSU5UNyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBENyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDgpLAkJLyogRUlOVDggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA5KSwJCS8qIEVJTlQ5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMCksCQkvKiBFSU5UMTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDEwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtcyIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMSksCQkvKiBFSU5UMTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDExICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInBzMiIpLAkJLyogU0NLMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEyKSwJCS8qIEVJTlQxMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQ5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHMyIiksCQkvKiBTREExICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBSU1QgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMyksCQkvKiBFSU5UMTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDEzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEMTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU40ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBWUFBFTiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE0KSwJCS8qIEVJTlQxNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQxMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFZQUFBQICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTUpLAkJLyogRUlOVDE1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxNSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDEyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElONiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE2KSwJCS8qIEVJTlQxNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQxMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFZDQ0VOICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTcpLAkJLyogRUlOVDE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBRDE0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFNDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE4KSwJCS8qIEVJTlQxOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUQxNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBTREEgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxOSksCQkvKiBFSU5UMTkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMjAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFPRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNhbiIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMCksCQkvKiBFSU5UMjAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFEUkVRICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiY2FuIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIxKSwJCS8qIEVJTlQyMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQURBQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzEiKSwJCS8qIENNRCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUNTMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQyMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAicGF0YSIpLAkJLyogQVRBQ1MxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBQQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDI1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBERSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUlPUkRZICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBGSUVMRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogSFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwYXRhIiksCQkvKiBBVEFJT1IgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzEiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEhTWU5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDI3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBWU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBhdGEiKSwJCS8qIEFUQUlPVyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogVlNZTkMgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInB3bSIpKSwJCS8qIFBXTTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMyIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzMiKSksCQkvKiBEMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMyIpKSwJCS8qIEQyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzMiKSksCQkvKiBEMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjIpKSwJCS8qIEVJTlQyMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjMpKSwJCS8qIEVJTlQyMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogTU9TSSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI0KSksCQkvKiBFSU5UMjQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIE1JU08gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NiIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyNSkpLAkJLyogRUlOVDI1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkwIiksCQkvKiBDUzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwczIiKSwJCS8qIFNDSzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ0aW1lcjQiKSwJLyogVENMS0lOMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI2KSksCQkvKiBFSU5UMjYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBzMiIpLAkJLyogU0RBMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInRpbWVyNSIpLAkvKiBUQ0xLSU4xICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjcpKSwJCS8qIEVJTlQyNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFJUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI4KSksCQkvKiBFSU5UMjggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyOSkpLAkJLyogRUlOVDI5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMzApKSwJCS8qIEVJTlQzMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDMxKSksCQkvKiBFSU5UMzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInBzMiIpLAkJLyogU0NLMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ3IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImhkbWkiKSksCQkvKiBIU0NMICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJwczIiKSwJCS8qIFNEQTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJoZG1pIikpLAkJLyogSFNEQSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNGlfYTEwX3BpbmN0cmxfZGF0YSA9IHsKKwkucGlucyA9IHN1bjRpX2ExMF9waW5zLAorCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuNGlfYTEwX3BpbnMpLAorfTsKKworc3RhdGljIGludCBzdW40aV9hMTBfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzdW54aV9waW5jdHJsX2luaXQocGRldiwKKwkJCQkgICZzdW40aV9hMTBfcGluY3RybF9kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNGlfYTEwX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtcGluY3RybCIsIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW40aV9hMTBfcGluY3RybF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjRpX2ExMF9waW5jdHJsX2RyaXZlciA9IHsKKwkucHJvYmUJPSBzdW40aV9hMTBfcGluY3RybF9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQkJPSAic3VuNGktcGluY3RybCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gc3VuNGlfYTEwX3BpbmN0cmxfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHN1bjRpX2ExMF9waW5jdHJsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBMTAgcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjVpLWExMHMuYyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjVpLWExMHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjRkNzQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VuNWktYTEwcy5jCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogQWxsd2lubmVyIEExMHMgU29DcyBwaW5jdHJsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWF4aW1lIFJpcGFyZAorICoKKyAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3RybC5oPgorCisjaW5jbHVkZSAicGluY3RybC1zdW54aS5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1bnhpX2Rlc2NfcGluIHN1bjVpX2ExMHNfcGluc1tdID0geworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBJTjAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImtleXBhZCIpKSwJLyogSU4xICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMwIiksCQkvKiBTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBJTjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0czAiKSwJCS8qIERMVkQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElOMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElONCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElONSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElONiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIElONyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRFRSICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRFNSICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEViAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzMCIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRENEICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFTURDICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMwIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSSU5HICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAia2V5cGFkIikpLAkvKiBPVVQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFTURJTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQxIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImtleXBhZCIpKSwJLyogT1VUNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRU4gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MSIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIE9VVDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWENLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDEiKSwJCS8qIENUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImtleXBhZCIpKSwJLyogT1VUNiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRUNSUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQxIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJrZXlwYWQiKSksCS8qIE9VVDcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVDT0wgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDMxKSksCQkvKiBFSU5UMzEgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNEQSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSwJCS8qIFBXTTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNikpLAkJLyogRUlOVDE2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNykpLAkJLyogRUlOVDE3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxOCkpLAkJLyogRUlOVDE4ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkycyIpLAkJLyogTUNMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE5KSksCQkvKiBFSU5UMTkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzIiksCQkvKiBCQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjApKSwJCS8qIEVJTlQyMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMiKSwJCS8qIExSQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMSkpLAkJLyogRUlOVDIxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkycyIpLAkJLyogRE8gKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMikpLAkJLyogRUlOVDIyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkycyIpLAkJLyogREkgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyMykpLAkJLyogRUlOVDIzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyNCkpLAkJLyogRUlOVDI0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBNUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyNSkpLAkJLyogRUlOVDI1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBDSzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyNikpLAkJLyogRUlOVDI2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogRE8wICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjcpKSwJCS8qIEVJTlQyNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSwJCS8qIERJMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI4KSksCQkvKiBFSU5UMjggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQwIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDI5KSksCQkvKiBFSU5UMjkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQwIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDMwKSksCQkvKiBFSU5UMzAgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOV0UgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkFMRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNSVNPICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0xFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5SRSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTUQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5SQjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFExICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBENSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTldQICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSksCS8qIFRYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpKSwJLyogQ1RTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIikpLAkvKiBSVFMgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpKSwJLyogUlggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MiIpKSwJLyogQ1RTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSksCS8qIFJUUyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFQ1JTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVDT0wgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQ4ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEOSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRVJYRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFUlhEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVSWEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRVJYQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFUlhFUlIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFUlhEViAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRVRYRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFVFhEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpKSwJCS8qIEVUWEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRVRYRU4gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFVFhDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogREUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIikpLAkJLyogRVRYRVJSICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBIU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFTURDICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBWU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSksCQkvKiBFTURJTyAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogUENLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMiIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTQpKSwJCS8qIEVJTlQxNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInNwaTIiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE1KSksCQkvKiBFSU5UMTUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEhTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMiIpKSwJCS8qIE1PU0kgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEVkxEICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogVlNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIikpLAkJLyogTUlTTyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzIiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBENCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSWCAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVMxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERJMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBDSzEgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJncHMiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDApKSwJCS8qIEVJTlQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJncHMiKSwJCS8qIFNJR04gKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxKSksCQkvKiBFSU5UMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ3BzIiksCQkvKiBNQUcgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyKSksCQkvKiBFSU5UMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTUQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAzKSksCQkvKiBFSU5UMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA0KSksCQkvKiBFSU5UNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBETyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA1KSksCQkvKiBFSU5UNSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJ1YXJ0MiIpLAkJLyogUlRTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNikpLAkJLyogRUlOVDYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJ1YXJ0MiIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA3KSksCQkvKiBFSU5UNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInVhcnQyIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDgpKSwJCS8qIEVJTlQ4ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDkpKSwJCS8qIEVJTlQ5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMCkpLAkJLyogRUlOVDEwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIENUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDExKSksCQkvKiBFSU5UMTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1JU08gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogUlRTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTIpKSwJCS8qIEVJTlQxMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ1MxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFBXTTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJ1YXJ0MiIpLAkJLyogQ1RTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTMpKSwJCS8qIEVJTlQxMyAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNWlfYTEwc19waW5jdHJsX2RhdGEgPSB7CisJLnBpbnMgPSBzdW41aV9hMTBzX3BpbnMsCisJLm5waW5zID0gQVJSQVlfU0laRShzdW41aV9hMTBzX3BpbnMpLAorfTsKKworc3RhdGljIGludCBzdW41aV9hMTBzX3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gc3VueGlfcGluY3RybF9pbml0KHBkZXYsCisJCQkJICAmc3VuNWlfYTEwc19waW5jdHJsX2RhdGEpOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzdW41aV9hMTBzX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41aS1hMTBzLXBpbmN0cmwiLCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3VuNWlfYTEwc19waW5jdHJsX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3VuNWlfYTEwc19waW5jdHJsX2RyaXZlciA9IHsKKwkucHJvYmUJPSBzdW41aV9hMTBzX3BpbmN0cmxfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJCT0gInN1bjVpLWExMHMtcGluY3RybCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gc3VuNWlfYTEwc19waW5jdHJsX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW41aV9hMTBzX3BpbmN0cmxfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQWxsd2lubmVyIEExMHMgcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjVpLWExMy5jIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VuNWktYTEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4OGEyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjVpLWExMy5jCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQWxsd2lubmVyIEExMyBTb0NzIHBpbmN0cmwgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXhpbWUgUmlwYXJkCisgKgorICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLXN1bnhpLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNWlfYTEzX3BpbnNbXSA9IHsKKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNEQSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSwKKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNikpLAkJLyogRUlOVDE2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNykpLAkJLyogRUlOVDE3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImlyMCIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxOCkpLAkJLyogRUlOVDE4ICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ1MxICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjQpKSwJCS8qIEVJTlQyNCAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzEiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzIiKSksCQkvKiBTREEgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOV0UgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkFMRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNSVNPICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0xFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5SRSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTUQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5SQjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFExICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBENSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQ3ICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUVMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpKSwJLyogUlRTICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBENCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQ2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBENyAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTUgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDE4ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDE5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogRDIzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogREUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBIU1lOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIFZTWU5DICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogUENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInNwaTIiKSwJCS8qIENTMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE0KSksCQkvKiBFSU5UMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIE1DTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkyIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNSkpLAkJLyogRUlOVDE1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBIU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInNwaTIiKSksCQkvKiBNT1NJICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIFZTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMiIpKSwJCS8qIE1JU08gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMyIikpLAkJLyogQ01EICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMiIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSwJCS8qIEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFJYICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpKSwJCS8qIEQyICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAwKSksCQkvKiBFSU5UMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxKSksCQkvKiBFSU5UMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAyKSksCQkvKiBFSU5UMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTUQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAzKSksCQkvKiBFSU5UMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA0KSksCQkvKiBFSU5UNCAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgOSkpLAkJLyogRUlOVDkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEwKSksCQkvKiBFSU5UMTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1PU0kgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogQ1RTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTEpKSwJCS8qIEVJTlQxMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMikpLAkJLyogRUlOVDEyICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1bnhpX3BpbmN0cmxfZGVzYyBzdW41aV9hMTNfcGluY3RybF9kYXRhID0geworCS5waW5zID0gc3VuNWlfYTEzX3BpbnMsCisJLm5waW5zID0gQVJSQVlfU0laRShzdW41aV9hMTNfcGlucyksCit9OworCitzdGF0aWMgaW50IHN1bjVpX2ExM19waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIHN1bnhpX3BpbmN0cmxfaW5pdChwZGV2LAorCQkJCSAgJnN1bjVpX2ExM19waW5jdHJsX2RhdGEpOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzdW41aV9hMTNfcGluY3RybF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1waW5jdHJsIiwgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1bjVpX2ExM19waW5jdHJsX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3VuNWlfYTEzX3BpbmN0cmxfZHJpdmVyID0geworCS5wcm9iZQk9IHN1bjVpX2ExM19waW5jdHJsX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCQk9ICJzdW41aS1hMTMtcGluY3RybCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gc3VuNWlfYTEzX3BpbmN0cmxfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHN1bjVpX2ExM19waW5jdHJsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBMTMgcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjZpLWEzMS1yLmMgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzEtci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2JhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzEtci5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQWxsd2lubmVyIEEzMSBTb0NzIHNwZWNpYWwgcGlucyBwaW5jdHJsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQm9yaXMgQnJlemlsbG9uCisgKiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1heGltZSBSaXBhcmQKKyAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3RybC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLXN1bnhpLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNmlfYTMxX3JfcGluc1tdID0geworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihMLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzX3R3aSIpLAkJLyogU0NLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic19wMndpIikpLAkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oTCwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic190d2kiKSwJCS8qIFNEQSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNfcDJ3aSIpKSwJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEwsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNfdWFydCIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oTCwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic191YXJ0IikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihMLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzX2lyIikpLAkJLyogUlggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oTCwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic19qdGFnIikpLAkvKiBNUyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihMLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzX2p0YWciKSksCS8qIENLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEwsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNfanRhZyIpKSwJLyogRE8gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oTCwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic19qdGFnIikpLAkvKiBESSAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oTSwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihNLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKE0sIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIjF3aXJlIikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihNLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKE0sIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oTSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihNLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSksCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKE0sIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInJ0YyIpKSwJCS8qIENMS08gKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfcGluY3RybF9kZXNjIHN1bjZpX2EzMV9yX3BpbmN0cmxfZGF0YSA9IHsKKwkucGlucyA9IHN1bjZpX2EzMV9yX3BpbnMsCisJLm5waW5zID0gQVJSQVlfU0laRShzdW42aV9hMzFfcl9waW5zKSwKKwkucGluX2Jhc2UgPSBQTF9CQVNFLAorfTsKKworc3RhdGljIGludCBzdW42aV9hMzFfcl9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7CisJaW50IHJldDsKKworCXJzdGMgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIocnN0YykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUmVzZXQgY29udHJvbGxlciBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocnN0Yyk7CisJfQorCisJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChyc3RjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3VueGlfcGluY3RybF9pbml0KHBkZXYsCisJCQkJICZzdW42aV9hMzFfcl9waW5jdHJsX2RhdGEpOworCisJaWYgKHJldCkKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQocnN0Yyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzdW42aV9hMzFfcl9waW5jdHJsX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXItcGluY3RybCIsIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW42aV9hMzFfcl9waW5jdHJsX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3VuNmlfYTMxX3JfcGluY3RybF9kcml2ZXIgPSB7CisJLnByb2JlCT0gc3VuNmlfYTMxX3JfcGluY3RybF9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQkJPSAic3VuNmktYTMxLXItcGluY3RybCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gc3VuNmlfYTMxX3JfcGluY3RybF9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNmlfYTMxX3JfcGluY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20iKTsKK01PRFVMRV9BVVRIT1IoIk1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBMzEgUl9QSU8gcGluY3RybCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjZpLWEzMS5jIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VuNmktYTMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlYTU4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjZpLWEzMS5jCkBAIC0wLDAgKzEsODY1IEBACisvKgorICogQWxsd2lubmVyIEEzMSBTb0NzIHBpbmN0cmwgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXhpbWUgUmlwYXJkCisgKgorICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLXN1bnhpLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNmlfYTMxX3BpbnNbXSA9IHsKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIERUUiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBUWEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogRFNSICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBEQ0QgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFJJTkcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhENCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSksCS8qIFRYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBUWEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpKSwJLyogUlRTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIikpLAkvKiBDVFMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIikpLAkJLyogRDggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhFTiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQ5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogQ01EICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMiIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogR1RYQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMiIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQxMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMiIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDEyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMyIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQxNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMiIpKSwJCS8qIEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpKSwJCS8qIEQxNSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSksCQkvKiBEMTYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIikpLAkJLyogRDE3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpKSwJCS8qIEQxOCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhEViAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQxOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInB3bTMiKSksCQkvKiBQb3NpdGl2ZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMjAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20zIikpLAkJLyogTmVnYXRpdmUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRVJSICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDIxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpKSwJCS8qIENTMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMjIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkzIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDIzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBDT0wgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMjMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkzIikpLAkJLyogTU9TSSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogQ1JTICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpKSwJCS8qIE1JU08gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMjUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIENMS0lOICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogREUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkzIikpLAkJLyogQ1MxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDI2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBNREMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIikpLAkJLyogSFNZTkMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMjcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIE1ESU8gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIikpLAkJLyogVlNZTkMgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIE1DTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogQ1RTICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiY3NpIikpLAkJLyogTUNMSzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpKSwJCS8qIEJDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpKSwJCS8qIExSQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpKSwJCS8qIERPMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBETzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpKSwJLyogUlRTICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIERPMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQzIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImkyYzMiKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogRE8zICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiaTJjMyIpKSwJCS8qIFNEQSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMnMwIikpLAkJLyogREkgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBXRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNT1NJICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBBTEUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTUlTTyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogQ0xFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBDRTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIFJFICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBSQjAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBDTUQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogQ01EICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBSQjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBEMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFExICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBENSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIEQ2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFEwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibmFuZDEiKSksCS8qIERRMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFEyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFExMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm5hbmQxIikpLAkvKiBEUTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTEyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibmFuZDEiKSksCS8qIERRNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAyMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJuYW5kMSIpKSwJLyogRFE1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFExNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm5hbmQxIikpLAkvKiBEUTYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTE1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibmFuZDEiKSksCS8qIERRNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAyNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIFJTVCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBSU1QgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBDRTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBDRTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDUzAgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4yICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTkMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDExICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZQMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDE5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczEiKSksCS8qIFZOMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEQyMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIERFICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogSFNZTkMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBWU1lOQyAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBQQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBNQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBFUlIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBIU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogU1lOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIFZTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBEVkxEICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ1IikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSksCS8qIFJUUyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSksCS8qIENUUyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBEMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBEMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIEQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQ4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBENCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIikpLAkJLyogRDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSksCQkvKiBENiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEMTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpKSwJCS8qIEQ3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSksCQkvKiBNSVBJIENTSSBNQ0xLICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBNUzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogREkxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBUWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBDTUQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogRE8xICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDAiKSksCS8qIFJYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIENLMSAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIikpLAkJLyogQ01EICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSksCQkvKiBEMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpKSwJCS8qIEQyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSksCQkvKiBEMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MiIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDIiKSksCS8qIFJYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQyIikpLAkvKiBSVFMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDIiKSksCS8qIENUUyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMyIpLAkJLyogU0NLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidXNiIikpLAkJLyogRFAzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMzIiksCQkvKiBTREEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1c2IiKSksCQkvKiBETTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyczEiKSksCQkvKiBNQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMnMxIikpLAkJLyogQkNMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJzMSIpKSwJCS8qIExSQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIE1PU0kgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMnMxIikpLAkJLyogRElOICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNSVNPICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJzMSIpKSwJCS8qIERPVVQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQ0IikpLAkvKiBUWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDQiKSksCS8qIFJYICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogV0UgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIEFMRSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogQ0xFICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQxIikpLAkvKiBDRTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIENFMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogUkUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIFJCMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMSIpKSwJLyogUkIxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQxIikpLAkvKiBEUVMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogTVMwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHdtMSIpKSwJCS8qIFBvc2l0aXZlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBDSzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20xIikpLAkJLyogTmVnYXRpdmUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIE1PU0kgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBETzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20yIikpLAkJLyogUG9zaXRpdmUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIE1JU08gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIiksCQkvKiBESTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJwd20yIikpLAkJLyogTmVnYXRpdmUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInB3bTAiKSksCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQwIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIENFMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAzMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDEiKSksCS8qIENFMyAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuNmlfYTMxX3BpbmN0cmxfZGF0YSA9IHsKKwkucGlucyA9IHN1bjZpX2EzMV9waW5zLAorCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuNmlfYTMxX3BpbnMpLAorfTsKKworc3RhdGljIGludCBzdW42aV9hMzFfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzdW54aV9waW5jdHJsX2luaXQocGRldiwKKwkJCQkgICZzdW42aV9hMzFfcGluY3RybF9kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNmlfYTMxX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtcGluY3RybCIsIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW42aV9hMzFfcGluY3RybF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjZpX2EzMV9waW5jdHJsX2RyaXZlciA9IHsKKwkucHJvYmUJPSBzdW42aV9hMzFfcGluY3RybF9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQkJPSAic3VuNmktYTMxLXBpbmN0cmwiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZQk9IHN1bjZpX2EzMV9waW5jdHJsX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW42aV9hMzFfcGluY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgQTMxIHBpbmN0cmwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW43aS1hMjAuYyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjdpLWEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTc3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW43aS1hMjAuYwpAQCAtMCwwICsxLDEwNjUgQEAKKy8qCisgKiBBbGx3aW5uZXIgQTIwIFNvQ3MgcGluY3RybCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1heGltZSBSaXBhcmQKKyAqCisgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmN0cmwuaD4KKworI2luY2x1ZGUgInBpbmN0cmwtc3VueGkuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9kZXNjX3BpbiBzdW43aV9hMjBfcGluc1tdID0geworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTEiKSwJCS8qIENTMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQyIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1JYRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVJYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpLAkJLyogQ1RTICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpKSwJCS8qIEdSWEQyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMSIpLAkJLyogTU9TSSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQyIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHUlhEMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTEiKSwJCS8qIE1JU08gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MiIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1JYRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkxIiksCQkvKiBDUzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1RYRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1RYRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogR1RYRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpKSwJCS8qIEdUWEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVSWENLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMyIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHUlhDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkzIiksCQkvKiBDUzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIiksCQkvKiBHTlVMTCAvIEVSWEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBNQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFUlhEViAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHUlhDVEwgLyBFUlhEViAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRU1EQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBFTURDICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFTURJTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIikpLAkJLyogRU1ESU8gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImVtYWMiKSwJCS8qIEVUWEVOICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDYiKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIENUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSksCQkvKiBHVFhDVEwgLyBFVFhFTiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZW1hYyIpLAkJLyogRVRYQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NyIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRFRSICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiZ21hYyIpLAkJLyogR05VTEwgLyBFVFhDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBCQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFQ1JTICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDciKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIERTUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgImdtYWMiKSwJCS8qIEdUWENLIC8gRUNSUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBMUkNLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFQ09MICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY2FuIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBEQ0QgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIiksCQkvKiBHQ0xLSU4gLyBFQ09MICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg2LCAiaTJzMSIpKSwJCS8qIERPICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJlbWFjIiksCQkvKiBFVFhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjYW4iKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIFJJTkcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJnbWFjIiksCQkvKiBHTlVMTCAvIEVUWEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NiwgImkyczEiKSksCQkvKiBMUkNLICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMwIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzAiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAicHdtIikpLAkJLyogUFdNMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpcjAiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BkaWYiKSksCS8qIE1DTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaXIwIikpLAkJLyogUlggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogTUNMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImFjOTciKSksCQkvKiBNQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIEJDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJhYzk3IikpLAkJLyogQkNMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBMUkNLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpKSwJCS8qIFNZTkMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogRE8wICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpKSwJCS8qIERPICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSksCQkvKiBETzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSksCQkvKiBETzIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSksCQkvKiBETzMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIERJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiYWM5NyIpLAkJLyogREkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGRpZiIpKSwJLyogREkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIENTMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInNwZGlmIikpLAkvKiBETyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpKSwJCS8qIE1TMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpKSwJCS8qIENLMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogTU9TSSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSksCQkvKiBETzAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIE1JU08gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJqdGFnIikpLAkJLyogREkwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDE5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMxIikpLAkJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMyIikpLAkJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDIyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpcjEiKSksCQkvKiBUWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAyMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaXIxIikpLAkJLyogUlggKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOV0UgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkFMRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBNSVNPICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0xFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkNFMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkNFMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTlJFIyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTlJCMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBDTUQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5SQjEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogQ0xLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBORFExICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkRRMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5EUTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRNSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5EUTYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBORFE3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTldQICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkNFMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIE5DRTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBOQ0U0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMiIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTIpKSwJCS8qIEVJTlQxMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAyMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIE5DRTUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkyIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxMykpLAkJLyogRUlOVDEzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSwJCS8qIE1PU0kgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNCkpLAkJLyogRUlOVDE0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogTkNFNyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTIiKSwJCS8qIE1JU08gKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNSkpLAkJLyogRUlOVDE1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDIzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogQ1MwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDI0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogTkRRUyAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4xICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlBDICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk0zICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4wICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4xICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4yICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlBDICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVlAzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDE5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMTkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMSIpKSwJLyogVk4zICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIikpLAkJLyogTUNMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDIxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogVlBQRU4gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFZQUFBQICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMjMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBERVQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFZDQ0VOICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBERSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNpbSIpKSwJCS8qIFJTVCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogSFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzaW0iKSksCQkvKiBTQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIFZTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic2ltIikpLAkJLyogU0RBICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBQQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogQ0sgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEhTWU5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRFZMRCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBWU1lOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInNpbSIpKSwJCS8qIFZQUEVOICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMwIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTAiKSksCQkvKiBEMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czAiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMCIpKSwJCS8qIEQ0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMCIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kwIikpLAkJLyogRDcgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIE1TSSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBESTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDAiKSksCS8qIFRYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIENNRCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBETzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogUlggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogQ0sxICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIFBDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBDTUQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzEiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogSFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMxIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBEVkxEICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogVlNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMxIikpLAkJLyogRDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMSIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidHMxIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImNzaTEiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAiY3NpMCIpKSwJCS8qIEQxMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDExICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBENCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDEyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInRzMSIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJjc2kxIiksCQkvKiBENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDEzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDE0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ0czEiKSwJCS8qIEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiY3NpMSIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJjc2kwIikpLAkJLyogRDE1ICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQzIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDApLAkJLyogRUlOVDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxKSwJCS8qIEVJTlQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDMiKSwJCS8qIFJUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIpLAkJLyogRUlOVDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MyIpLAkJLyogQ1RTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMyksCQkvKiBFSU5UMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBENCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ0IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDQpLAkJLyogRUlOVDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0NCIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA1KSwJCS8qIEVJTlQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDUiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibXMiKSwJCS8qIEJTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgNiksCQkvKiBFSU5UNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBENiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQ1IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCA3KSwJCS8qIEVJTlQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQ3ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQ4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVJYRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU4wICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibXMiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgOCksCQkvKiBFSU5UOCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEOCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVSWEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDkpLAkJLyogRUlOVDkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVSWEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEwKSwJCS8qIEVJTlQxMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVSWEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElOMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1zIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDExKSwJCS8qIEVJTlQxMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInBzMiIpLAkJLyogU0NLMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDEyKSwJCS8qIEVJTlQxMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInBzMiIpLAkJLyogU0RBMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogUlNUICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTMpLAkJLyogRUlOVDEzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVRYRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogSU40ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAic2ltIiksCQkvKiBWUFBFTiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE0KSwJCS8qIEVJTlQxNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQxNSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVUWEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIElONSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogVlBQUFAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNSksCQkvKiBFSU5UMTUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjYgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg2LCAxNiksCQkvKiBFSU5UMTYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDE2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBEMTcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBJTjcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFZDQ0VOICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTcpLAkJLyogRUlOVDE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVRYRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgInNpbSIpLAkJLyogU0NLICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMTgpLAkJLyogRUlOVDE4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQxOCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDE5ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRVJYRVJSICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJzaW0iKSwJCS8qIFNEQSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDE5KSwJCS8qIEVJTlQxOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMTkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVSWERWICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiY2FuIiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDYsIDIwKSwJCS8qIEVJTlQyMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVNREMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJjYW4iKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NiwgMjEpLAkJLyogRUlOVDIxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIEQyMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogRDIyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiZW1hYyIpLAkJLyogRU1ESU8gKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzEiKSwJCS8qIENNRCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBEMjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDEiKSwJCS8qIEQyMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImVtYWMiKSwJCS8qIEVUWEVOICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogRDIzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDI0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QxIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImtleXBhZCIpLAkvKiBPVVQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMSIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDcsICJjc2kxIikpLAkJLyogUENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogREUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFQ1JTICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBGSUVMRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogSFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFQ09MICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAia2V5cGFkIiksCS8qIE9VVDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDUsICJtbWMxIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NywgImNzaTEiKSksCQkvKiBIU1lOQyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMSIpLAkJLyogVlNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJlbWFjIiksCQkvKiBFVFhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJrZXlwYWQiKSwJLyogT1VUNyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzEiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg3LCAiY3NpMSIpKSwJCS8qIFZTWU5DICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMmMzIikpLAkJLyogU0NLICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyYzMiKSksCQkvKiBTREEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJjNCIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20iKSwJCS8qIFBXTTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMmM0IikpLAkJLyogU0RBICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzMiKSksCQkvKiBDTUQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMyIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMyIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzMiKSksCQkvKiBEMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMzIikpLAkJLyogRDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIENTMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ1IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDUsIDIyKSksCQkvKiBFSU5UMjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ1IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDUsIDIzKSksCQkvKiBFSU5UMjMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTAiKSwJCS8qIE1PU0kgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NiIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2EiKSwJLyogQ0xLX09VVF9BICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjQpKSwJCS8qIEVJTlQyNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMCIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ2IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNsa19vdXRfYiIpLAkvKiBDTEtfT1VUX0IgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg1LCAyNSkpLAkJLyogRUlOVDI1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDE0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkwIiksCQkvKiBDUzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJwczIiKSwJCS8qIFNDSzEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ0aW1lcjQiKSwJLyogVENMS0lOMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDUsIDI2KSksCQkvKiBFSU5UMjYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENTMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInBzMiIpLAkJLyogU0RBMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInRpbWVyNSIpLAkvKiBUQ0xLSU4xICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMjcpKSwJCS8qIEVJTlQyNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ1MwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFJUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDUsIDI4KSksCQkvKiBFSU5UMjggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlEoMHg1LCAyOSkpLAkJLyogRUlOVDI5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDE4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDIiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRKDB4NSwgMzApKSwJCS8qIEVJTlQzMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihJLCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogTUlTTyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQyIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUSgweDUsIDMxKSksCQkvKiBFSU5UMzEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSSwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInBzMiIpLAkJLyogU0NLMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ3IiksCQkvKiBUWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImhkbWkiKSksCQkvKiBIU0NMICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEksIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJwczIiKSwJCS8qIFNEQTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NyIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJoZG1pIikpLAkJLyogSFNEQSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2Mgc3VuN2lfYTIwX3BpbmN0cmxfZGF0YSA9IHsKKwkucGlucyA9IHN1bjdpX2EyMF9waW5zLAorCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuN2lfYTIwX3BpbnMpLAorfTsKKworc3RhdGljIGludCBzdW43aV9hMjBfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzdW54aV9waW5jdHJsX2luaXQocGRldiwKKwkJCQkgICZzdW43aV9hMjBfcGluY3RybF9kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuN2lfYTIwX3BpbmN0cmxfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW43aS1hMjAtcGluY3RybCIsIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW43aV9hMjBfcGluY3RybF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjdpX2EyMF9waW5jdHJsX2RyaXZlciA9IHsKKwkucHJvYmUJPSBzdW43aV9hMjBfcGluY3RybF9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQkJPSAic3VuN2ktYTIwLXBpbmN0cmwiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZQk9IHN1bjdpX2EyMF9waW5jdHJsX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW43aV9hMjBfcGluY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgQTIwIHBpbmN0cmwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zdW54aS5jIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VueGkuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zdW54aS5jCnJlbmFtZSB0byBkcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW54aS5jCmluZGV4IGY5ZmFiZTkuLmYxY2E3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN1bnhpLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VueGkuYwpAQCAtMjgsOSArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICIuLi9jb3JlLmgiCiAjaW5jbHVkZSAicGluY3RybC1zdW54aS5oIgotI2luY2x1ZGUgInBpbmN0cmwtc3VueGktcGlucy5oIgogCiBzdGF0aWMgc3RydWN0IHN1bnhpX3BpbmN0cmxfZ3JvdXAgKgogc3VueGlfcGluY3RybF9maW5kX2dyb3VwX2J5X25hbWUoc3RydWN0IHN1bnhpX3BpbmN0cmwgKnBjdGwsIGNvbnN0IGNoYXIgKmdyb3VwKQpAQCAtMjgxLDYgKzI4MCw3IEBACiAJc3RydWN0IHN1bnhpX3BpbmN0cmwgKnBjdGwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKIAlzdHJ1Y3Qgc3VueGlfcGluY3RybF9ncm91cCAqZyA9ICZwY3RsLT5ncm91cHNbZ3JvdXBdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgcGluID0gZy0+cGluIC0gcGN0bC0+ZGVzYy0+cGluX2Jhc2U7CiAJdTMyIHZhbCwgbWFzazsKIAl1MTYgc3RyZW5ndGg7CiAJdTggZGxldmVsOwpAQCAtMzA0LDIzICszMDQsMjMgQEAKIAkJCSAqICAgMzogNDBtQQogCQkJICovCiAJCQlkbGV2ZWwgPSBzdHJlbmd0aCAvIDEwIC0gMTsKLQkJCXZhbCA9IHJlYWRsKHBjdGwtPm1lbWJhc2UgKyBzdW54aV9kbGV2ZWxfcmVnKGctPnBpbikpOwotCQkJbWFzayA9IERMRVZFTF9QSU5TX01BU0sgPDwgc3VueGlfZGxldmVsX29mZnNldChnLT5waW4pOworCQkJdmFsID0gcmVhZGwocGN0bC0+bWVtYmFzZSArIHN1bnhpX2RsZXZlbF9yZWcocGluKSk7CisJCQltYXNrID0gRExFVkVMX1BJTlNfTUFTSyA8PCBzdW54aV9kbGV2ZWxfb2Zmc2V0KHBpbik7CiAJCQl3cml0ZWwoKHZhbCAmIH5tYXNrKQotCQkJCXwgZGxldmVsIDw8IHN1bnhpX2RsZXZlbF9vZmZzZXQoZy0+cGluKSwKLQkJCQlwY3RsLT5tZW1iYXNlICsgc3VueGlfZGxldmVsX3JlZyhnLT5waW4pKTsKKwkJCQl8IGRsZXZlbCA8PCBzdW54aV9kbGV2ZWxfb2Zmc2V0KHBpbiksCisJCQkJcGN0bC0+bWVtYmFzZSArIHN1bnhpX2RsZXZlbF9yZWcocGluKSk7CiAJCQlicmVhazsKIAkJY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDoKLQkJCXZhbCA9IHJlYWRsKHBjdGwtPm1lbWJhc2UgKyBzdW54aV9wdWxsX3JlZyhnLT5waW4pKTsKLQkJCW1hc2sgPSBQVUxMX1BJTlNfTUFTSyA8PCBzdW54aV9wdWxsX29mZnNldChnLT5waW4pOwotCQkJd3JpdGVsKCh2YWwgJiB+bWFzaykgfCAxIDw8IHN1bnhpX3B1bGxfb2Zmc2V0KGctPnBpbiksCi0JCQkJcGN0bC0+bWVtYmFzZSArIHN1bnhpX3B1bGxfcmVnKGctPnBpbikpOworCQkJdmFsID0gcmVhZGwocGN0bC0+bWVtYmFzZSArIHN1bnhpX3B1bGxfcmVnKHBpbikpOworCQkJbWFzayA9IFBVTExfUElOU19NQVNLIDw8IHN1bnhpX3B1bGxfb2Zmc2V0KHBpbik7CisJCQl3cml0ZWwoKHZhbCAmIH5tYXNrKSB8IDEgPDwgc3VueGlfcHVsbF9vZmZzZXQocGluKSwKKwkJCQlwY3RsLT5tZW1iYXNlICsgc3VueGlfcHVsbF9yZWcocGluKSk7CiAJCQlicmVhazsKIAkJY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9ET1dOOgotCQkJdmFsID0gcmVhZGwocGN0bC0+bWVtYmFzZSArIHN1bnhpX3B1bGxfcmVnKGctPnBpbikpOwotCQkJbWFzayA9IFBVTExfUElOU19NQVNLIDw8IHN1bnhpX3B1bGxfb2Zmc2V0KGctPnBpbik7Ci0JCQl3cml0ZWwoKHZhbCAmIH5tYXNrKSB8IDIgPDwgc3VueGlfcHVsbF9vZmZzZXQoZy0+cGluKSwKLQkJCQlwY3RsLT5tZW1iYXNlICsgc3VueGlfcHVsbF9yZWcoZy0+cGluKSk7CisJCQl2YWwgPSByZWFkbChwY3RsLT5tZW1iYXNlICsgc3VueGlfcHVsbF9yZWcocGluKSk7CisJCQltYXNrID0gUFVMTF9QSU5TX01BU0sgPDwgc3VueGlfcHVsbF9vZmZzZXQocGluKTsKKwkJCXdyaXRlbCgodmFsICYgfm1hc2spIHwgMiA8PCBzdW54aV9wdWxsX29mZnNldChwaW4pLAorCQkJCXBjdGwtPm1lbWJhc2UgKyBzdW54aV9wdWxsX3JlZyhwaW4pKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC0zNzcsNiArMzc3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY3RsLT5sb2NrLCBmbGFncyk7CiAKKwlwaW4gLT0gcGN0bC0+ZGVzYy0+cGluX2Jhc2U7CiAJdmFsID0gcmVhZGwocGN0bC0+bWVtYmFzZSArIHN1bnhpX211eF9yZWcocGluKSk7CiAJbWFzayA9IE1VWF9QSU5TX01BU0sgPDwgc3VueGlfbXV4X29mZnNldChwaW4pOwogCXdyaXRlbCgodmFsICYgfm1hc2spIHwgY29uZmlnIDw8IHN1bnhpX211eF9vZmZzZXQocGluKSwKQEAgLTQzNywxMiArNDM4LDYgQEAKIAkuZ3Bpb19zZXRfZGlyZWN0aW9uCT0gc3VueGlfcG14X2dwaW9fc2V0X2RpcmVjdGlvbiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGluY3RybF9kZXNjIHN1bnhpX3BjdHJsX2Rlc2MgPSB7Ci0JLmNvbmZvcHMJPSAmc3VueGlfcGNvbmZfb3BzLAotCS5wY3Rsb3BzCT0gJnN1bnhpX3BjdHJsX29wcywKLQkucG14b3BzCQk9ICZzdW54aV9wbXhfb3BzLAotfTsKLQogc3RhdGljIGludCBzdW54aV9waW5jdHJsX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJcmV0dXJuIHBpbmN0cmxfcmVxdWVzdF9ncGlvKGNoaXAtPmJhc2UgKyBvZmZzZXQpOwpAQCAtNTMwLDI3ICs1MjUsMTIgQEAKIAlpZiAoIWRlc2MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGN0bC0+aXJxX2FycmF5W2Rlc2MtPmlycW51bV0gPSBvZmZzZXQ7Ci0KIAlkZXZfZGJnKGNoaXAtPmRldiwgIiVzOiByZXF1ZXN0IElSUSBmb3IgR1BJTyAlZCwgcmV0dXJuICVkXG4iLAogCQljaGlwLT5sYWJlbCwgb2Zmc2V0ICsgY2hpcC0+YmFzZSwgZGVzYy0+aXJxbnVtKTsKIAogCXJldHVybiBpcnFfZmluZF9tYXBwaW5nKHBjdGwtPmRvbWFpbiwgZGVzYy0+aXJxbnVtKTsKIH0KIAotc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgc3VueGlfcGluY3RybF9ncGlvX2NoaXAgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkucmVxdWVzdAkJPSBzdW54aV9waW5jdHJsX2dwaW9fcmVxdWVzdCwKLQkuZnJlZQkJCT0gc3VueGlfcGluY3RybF9ncGlvX2ZyZWUsCi0JLmRpcmVjdGlvbl9pbnB1dAk9IHN1bnhpX3BpbmN0cmxfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCi0JLmRpcmVjdGlvbl9vdXRwdXQJPSBzdW54aV9waW5jdHJsX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKLQkuZ2V0CQkJPSBzdW54aV9waW5jdHJsX2dwaW9fZ2V0LAotCS5zZXQJCQk9IHN1bnhpX3BpbmN0cmxfZ3Bpb19zZXQsCi0JLm9mX3hsYXRlCQk9IHN1bnhpX3BpbmN0cmxfZ3Bpb19vZl94bGF0ZSwKLQkudG9faXJxCQkJPSBzdW54aV9waW5jdHJsX2dwaW9fdG9faXJxLAotCS5vZl9ncGlvX25fY2VsbHMJPSAzLAotCS5jYW5fc2xlZXAJCT0gZmFsc2UsCi19OwogCiBzdGF0aWMgaW50IHN1bnhpX3BpbmN0cmxfaXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgdHlwZSkKQEAgLTY4NSwxNiArNjY1LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bnhpX3BpbmN0cmxfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtcGluY3RybCIsIC5kYXRhID0gKHZvaWQgKikmc3VuNGlfYTEwX3BpbmN0cmxfZGF0YSB9LAotCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMHMtcGluY3RybCIsIC5kYXRhID0gKHZvaWQgKikmc3VuNWlfYTEwc19waW5jdHJsX2RhdGEgfSwKLQl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41aS1hMTMtcGluY3RybCIsIC5kYXRhID0gKHZvaWQgKikmc3VuNWlfYTEzX3BpbmN0cmxfZGF0YSB9LAotCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1waW5jdHJsIiwgLmRhdGEgPSAodm9pZCAqKSZzdW42aV9hMzFfcGluY3RybF9kYXRhIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuN2ktYTIwLXBpbmN0cmwiLCAuZGF0YSA9ICh2b2lkICopJnN1bjdpX2EyMF9waW5jdHJsX2RhdGEgfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1bnhpX3BpbmN0cmxfbWF0Y2gpOwotCiBzdGF0aWMgaW50IHN1bnhpX3BpbmN0cmxfYWRkX2Z1bmN0aW9uKHN0cnVjdCBzdW54aV9waW5jdHJsICpwY3RsLAogCQkJCQljb25zdCBjaGFyICpuYW1lKQogewpAQCAtNzU1LDYgKzcyNSw5IEBACiAJCXN0cnVjdCBzdW54aV9kZXNjX2Z1bmN0aW9uICpmdW5jID0gcGluLT5mdW5jdGlvbnM7CiAKIAkJd2hpbGUgKGZ1bmMtPm5hbWUpIHsKKwkJCS8qIENyZWF0ZSBpbnRlcnJ1cHQgbWFwcGluZyB3aGlsZSB3ZSdyZSBhdCBpdCAqLworCQkJaWYgKCFzdHJjbXAoZnVuYy0+bmFtZSwgImlycSIpKQorCQkJCXBjdGwtPmlycV9hcnJheVtmdW5jLT5pcnFudW1dID0gcGluLT5waW4ubnVtYmVyOwogCQkJc3VueGlfcGluY3RybF9hZGRfZnVuY3Rpb24ocGN0bCwgZnVuYy0+bmFtZSk7CiAJCQlmdW5jKys7CiAJCX0KQEAgLTc5OCwxMiArNzcxLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3VueGlfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoraW50IHN1bnhpX3BpbmN0cmxfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHN1bnhpX3BpbmN0cmxfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpkZXZpY2U7CisJc3RydWN0IHBpbmN0cmxfZGVzYyAqcGN0cmxfZGVzYzsKIAlzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyAqcGluczsKIAlzdHJ1Y3Qgc3VueGlfcGluY3RybCAqcGN0bDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaSwgcmV0LCBsYXN0X3BpbjsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKQEAgLTgxNCwxNSArNzg5LDEzIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcGN0bC0+bG9jayk7CiAKLQlwY3RsLT5tZW1iYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JaWYgKCFwY3RsLT5tZW1iYXNlKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXBjdGwtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBjdGwtPm1lbWJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihwY3RsLT5tZW1iYXNlKTsKIAotCWRldmljZSA9IG9mX21hdGNoX2RldmljZShzdW54aV9waW5jdHJsX21hdGNoLCAmcGRldi0+ZGV2KTsKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwY3RsLT5kZXNjID0gKHN0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2MgKilkZXZpY2UtPmRhdGE7CisJcGN0bC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwY3RsLT5kZXNjID0gZGVzYzsKIAogCXJldCA9IHN1bnhpX3BpbmN0cmxfYnVpbGRfc3RhdGUocGRldik7CiAJaWYgKHJldCkgewpAQCAtODM5LDEyICs4MTIsMjEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGN0bC0+ZGVzYy0+bnBpbnM7IGkrKykKIAkJcGluc1tpXSA9IHBjdGwtPmRlc2MtPnBpbnNbaV0ucGluOwogCi0Jc3VueGlfcGN0cmxfZGVzYy5uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7Ci0Jc3VueGlfcGN0cmxfZGVzYy5vd25lciA9IFRISVNfTU9EVUxFOwotCXN1bnhpX3BjdHJsX2Rlc2MucGlucyA9IHBpbnM7Ci0Jc3VueGlfcGN0cmxfZGVzYy5ucGlucyA9IHBjdGwtPmRlc2MtPm5waW5zOwotCXBjdGwtPmRldiA9ICZwZGV2LT5kZXY7Ci0JcGN0bC0+cGN0bF9kZXYgPSBwaW5jdHJsX3JlZ2lzdGVyKCZzdW54aV9wY3RybF9kZXNjLAorCXBjdHJsX2Rlc2MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCQkgIHNpemVvZigqcGN0cmxfZGVzYyksCisJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjdHJsX2Rlc2MpCisJCXJldHVybiAtRU5PTUVNOworCisJcGN0cmxfZGVzYy0+bmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOworCXBjdHJsX2Rlc2MtPm93bmVyID0gVEhJU19NT0RVTEU7CisJcGN0cmxfZGVzYy0+cGlucyA9IHBpbnM7CisJcGN0cmxfZGVzYy0+bnBpbnMgPSBwY3RsLT5kZXNjLT5ucGluczsKKwlwY3RybF9kZXNjLT5jb25mb3BzID0gJnN1bnhpX3Bjb25mX29wczsKKwlwY3RybF9kZXNjLT5wY3Rsb3BzID0gJnN1bnhpX3BjdHJsX29wczsKKwlwY3RybF9kZXNjLT5wbXhvcHMgPSAgJnN1bnhpX3BteF9vcHM7CisKKwlwY3RsLT5wY3RsX2RldiA9IHBpbmN0cmxfcmVnaXN0ZXIocGN0cmxfZGVzYywKIAkJCQkJICAmcGRldi0+ZGV2LCBwY3RsKTsKIAlpZiAoIXBjdGwtPnBjdGxfZGV2KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlZ2lzdGVyIHBpbmN0cmwgZHJpdmVyXG4iKTsKQEAgLTg1OCwxMSArODQwLDIyIEBACiAJfQogCiAJbGFzdF9waW4gPSBwY3RsLT5kZXNjLT5waW5zW3BjdGwtPmRlc2MtPm5waW5zIC0gMV0ucGluLm51bWJlcjsKLQlwY3RsLT5jaGlwID0gJnN1bnhpX3BpbmN0cmxfZ3Bpb19jaGlwOwotCXBjdGwtPmNoaXAtPm5ncGlvID0gcm91bmRfdXAobGFzdF9waW4sIFBJTlNfUEVSX0JBTkspOworCXBjdGwtPmNoaXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJcGN0bC0+Y2hpcC0+cmVxdWVzdCA9IHN1bnhpX3BpbmN0cmxfZ3Bpb19yZXF1ZXN0LAorCXBjdGwtPmNoaXAtPmZyZWUgPSBzdW54aV9waW5jdHJsX2dwaW9fZnJlZSwKKwlwY3RsLT5jaGlwLT5kaXJlY3Rpb25faW5wdXQgPSBzdW54aV9waW5jdHJsX2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCXBjdGwtPmNoaXAtPmRpcmVjdGlvbl9vdXRwdXQgPSBzdW54aV9waW5jdHJsX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwlwY3RsLT5jaGlwLT5nZXQgPSBzdW54aV9waW5jdHJsX2dwaW9fZ2V0LAorCXBjdGwtPmNoaXAtPnNldCA9IHN1bnhpX3BpbmN0cmxfZ3Bpb19zZXQsCisJcGN0bC0+Y2hpcC0+b2ZfeGxhdGUgPSBzdW54aV9waW5jdHJsX2dwaW9fb2ZfeGxhdGUsCisJcGN0bC0+Y2hpcC0+dG9faXJxID0gc3VueGlfcGluY3RybF9ncGlvX3RvX2lycSwKKwlwY3RsLT5jaGlwLT5vZl9ncGlvX25fY2VsbHMgPSAzLAorCXBjdGwtPmNoaXAtPmNhbl9zbGVlcCA9IGZhbHNlLAorCXBjdGwtPmNoaXAtPm5ncGlvID0gcm91bmRfdXAobGFzdF9waW4sIFBJTlNfUEVSX0JBTkspIC0KKwkJCSAgICBwY3RsLT5kZXNjLT5waW5fYmFzZTsKIAlwY3RsLT5jaGlwLT5sYWJlbCA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXBjdGwtPmNoaXAtPmRldiA9ICZwZGV2LT5kZXY7Ci0JcGN0bC0+Y2hpcC0+YmFzZSA9IDA7CisJcGN0bC0+Y2hpcC0+YmFzZSA9IHBjdGwtPmRlc2MtPnBpbl9iYXNlOwogCiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKHBjdGwtPmNoaXApOwogCWlmIChyZXQpCkBAIC04ODQsMTIgKzg3NywxNCBAQAogCQlnb3RvIGdwaW9jaGlwX2Vycm9yOwogCX0KIAotCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCWlmIChyZXQpCisJCWdvdG8gZ3Bpb2NoaXBfZXJyb3I7CiAKIAlwY3RsLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKIAlpZiAoIXBjdGwtPmlycSkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGdwaW9jaGlwX2Vycm9yOworCQlnb3RvIGNsa19lcnJvcjsKIAl9CiAKIAlwY3RsLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgU1VOWElfSVJRX05VTUJFUiwKQEAgLTg5Nyw3ICs4OTIsNyBAQAogCWlmICghcGN0bC0+ZG9tYWluKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIElSUSBkb21haW5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGdwaW9jaGlwX2Vycm9yOworCQlnb3RvIGNsa19lcnJvcjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1VOWElfSVJRX05VTUJFUjsgaSsrKSB7CkBAIC05MTUsNiArOTEwLDggQEAKIAogCXJldHVybiAwOwogCitjbGtfZXJyb3I6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CiBncGlvY2hpcF9lcnJvcjoKIAlpZiAoZ3Bpb2NoaXBfcmVtb3ZlKHBjdGwtPmNoaXApKQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtb3ZlIGdwaW8gY2hpcFxuIik7CkBAIC05MjIsMTcgKzkxOSwzIEBACiAJcGluY3RybF91bnJlZ2lzdGVyKHBjdGwtPnBjdGxfZGV2KTsKIAlyZXR1cm4gcmV0OwogfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW54aV9waW5jdHJsX2RyaXZlciA9IHsKLQkucHJvYmUgPSBzdW54aV9waW5jdHJsX3Byb2JlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInN1bnhpLXBpbmN0cmwiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gc3VueGlfcGluY3RybF9tYXRjaCwKLQl9LAotfTsKLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VueGlfcGluY3RybF9kcml2ZXIpOwotCi1NT0RVTEVfQVVUSE9SKCJNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgQTFYIHBpbmN0cmwgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW54aS5oIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VueGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTY5YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL3BpbmN0cmwtc3VueGkuaApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIEFsbHdpbm5lciBBMVggU29DcyBwaW5jdHJsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWF4aW1lIFJpcGFyZAorICoKKyAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QSU5DVFJMX1NVTlhJX0gKKyNkZWZpbmUgX19QSU5DVFJMX1NVTlhJX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNkZWZpbmUgUEFfQkFTRQkwCisjZGVmaW5lIFBCX0JBU0UJMzIKKyNkZWZpbmUgUENfQkFTRQk2NAorI2RlZmluZSBQRF9CQVNFCTk2CisjZGVmaW5lIFBFX0JBU0UJMTI4CisjZGVmaW5lIFBGX0JBU0UJMTYwCisjZGVmaW5lIFBHX0JBU0UJMTkyCisjZGVmaW5lIFBIX0JBU0UJMjI0CisjZGVmaW5lIFBJX0JBU0UJMjU2CisjZGVmaW5lIFBMX0JBU0UJMzUyCisjZGVmaW5lIFBNX0JBU0UJMzg0CisKKyNkZWZpbmUgU1VOWElfUElOQ1RSTF9QSU4oYmFuaywgcGluKQkJXAorCVBJTkNUUkxfUElOKFAgIyMgYmFuayAjIyBfQkFTRSArIChwaW4pLCAiUCIgI2JhbmsgI3BpbikKKworI2RlZmluZSBTVU5YSV9QSU5fTkFNRV9NQVhfTEVOCTUKKworI2RlZmluZSBCQU5LX01FTV9TSVpFCQkweDI0CisjZGVmaW5lIE1VWF9SRUdTX09GRlNFVAkJMHgwCisjZGVmaW5lIERBVEFfUkVHU19PRkZTRVQJMHgxMAorI2RlZmluZSBETEVWRUxfUkVHU19PRkZTRVQJMHgxNAorI2RlZmluZSBQVUxMX1JFR1NfT0ZGU0VUCTB4MWMKKworI2RlZmluZSBQSU5TX1BFUl9CQU5LCQkzMgorI2RlZmluZSBNVVhfUElOU19QRVJfUkVHCTgKKyNkZWZpbmUgTVVYX1BJTlNfQklUUwkJNAorI2RlZmluZSBNVVhfUElOU19NQVNLCQkweDBmCisjZGVmaW5lIERBVEFfUElOU19QRVJfUkVHCTMyCisjZGVmaW5lIERBVEFfUElOU19CSVRTCQkxCisjZGVmaW5lIERBVEFfUElOU19NQVNLCQkweDAxCisjZGVmaW5lIERMRVZFTF9QSU5TX1BFUl9SRUcJMTYKKyNkZWZpbmUgRExFVkVMX1BJTlNfQklUUwkyCisjZGVmaW5lIERMRVZFTF9QSU5TX01BU0sJMHgwMworI2RlZmluZSBQVUxMX1BJTlNfUEVSX1JFRwkxNgorI2RlZmluZSBQVUxMX1BJTlNfQklUUwkJMgorI2RlZmluZSBQVUxMX1BJTlNfTUFTSwkJMHgwMworCisjZGVmaW5lIFNVTlhJX0lSUV9OVU1CRVIJMzIKKworI2RlZmluZSBJUlFfQ0ZHX1JFRwkJMHgyMDAKKyNkZWZpbmUgSVJRX0NGR19JUlFfUEVSX1JFRwkJOAorI2RlZmluZSBJUlFfQ0ZHX0lSUV9CSVRTCQk0CisjZGVmaW5lIElSUV9DRkdfSVJRX01BU0sJCSgoMSA8PCBJUlFfQ0ZHX0lSUV9CSVRTKSAtIDEpCisjZGVmaW5lIElSUV9DVFJMX1JFRwkJMHgyMTAKKyNkZWZpbmUgSVJRX0NUUkxfSVJRX1BFUl9SRUcJCTMyCisjZGVmaW5lIElSUV9DVFJMX0lSUV9CSVRTCQkxCisjZGVmaW5lIElSUV9DVFJMX0lSUV9NQVNLCQkoKDEgPDwgSVJRX0NUUkxfSVJRX0JJVFMpIC0gMSkKKyNkZWZpbmUgSVJRX1NUQVRVU19SRUcJCTB4MjE0CisjZGVmaW5lIElSUV9TVEFUVVNfSVJRX1BFUl9SRUcJCTMyCisjZGVmaW5lIElSUV9TVEFUVVNfSVJRX0JJVFMJCTEKKyNkZWZpbmUgSVJRX1NUQVRVU19JUlFfTUFTSwkJKCgxIDw8IElSUV9TVEFUVVNfSVJRX0JJVFMpIC0gMSkKKworI2RlZmluZSBJUlFfRURHRV9SSVNJTkcJCTB4MDAKKyNkZWZpbmUgSVJRX0VER0VfRkFMTElORwkweDAxCisjZGVmaW5lIElSUV9MRVZFTF9ISUdICQkweDAyCisjZGVmaW5lIElSUV9MRVZFTF9MT1cJCTB4MDMKKyNkZWZpbmUgSVJRX0VER0VfQk9USAkJMHgwNAorCitzdHJ1Y3Qgc3VueGlfZGVzY19mdW5jdGlvbiB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1OAkJbXV4dmFsOworCXU4CQlpcnFudW07Cit9OworCitzdHJ1Y3Qgc3VueGlfZGVzY19waW4geworCXN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjCQlwaW47CisJc3RydWN0IHN1bnhpX2Rlc2NfZnVuY3Rpb24JKmZ1bmN0aW9uczsKK307CisKK3N0cnVjdCBzdW54aV9waW5jdHJsX2Rlc2MgeworCWNvbnN0IHN0cnVjdCBzdW54aV9kZXNjX3BpbgkqcGluczsKKwlpbnQJCQkJbnBpbnM7CisJdW5zaWduZWQJCQlwaW5fYmFzZTsKK307CisKK3N0cnVjdCBzdW54aV9waW5jdHJsX2Z1bmN0aW9uIHsKKwljb25zdCBjaGFyCSpuYW1lOworCWNvbnN0IGNoYXIJKipncm91cHM7CisJdW5zaWduZWQJbmdyb3VwczsKK307CisKK3N0cnVjdCBzdW54aV9waW5jdHJsX2dyb3VwIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGxvbmcJY29uZmlnOworCXVuc2lnbmVkCXBpbjsKK307CisKK3N0cnVjdCBzdW54aV9waW5jdHJsIHsKKwl2b2lkIF9faW9tZW0JCQkqbWVtYmFzZTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCQkqY2hpcDsKKwljb25zdCBzdHJ1Y3Qgc3VueGlfcGluY3RybF9kZXNjCSpkZXNjOworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCBpcnFfZG9tYWluCQkqZG9tYWluOworCXN0cnVjdCBzdW54aV9waW5jdHJsX2Z1bmN0aW9uCSpmdW5jdGlvbnM7CisJdW5zaWduZWQJCQluZnVuY3Rpb25zOworCXN0cnVjdCBzdW54aV9waW5jdHJsX2dyb3VwCSpncm91cHM7CisJdW5zaWduZWQJCQluZ3JvdXBzOworCWludAkJCQlpcnE7CisJaW50CQkJCWlycV9hcnJheVtTVU5YSV9JUlFfTlVNQkVSXTsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgcGluY3RybF9kZXYJCSpwY3RsX2RldjsKK307CisKKyNkZWZpbmUgU1VOWElfUElOKF9waW4sIC4uLikJCQkJCVwKKwl7CQkJCQkJCVwKKwkJLnBpbiA9IF9waW4sCQkJCQlcCisJCS5mdW5jdGlvbnMgPSAoc3RydWN0IHN1bnhpX2Rlc2NfZnVuY3Rpb25bXSl7CVwKKwkJCV9fVkFfQVJHU19fLCB7IH0gfSwJCQlcCisJfQorCisjZGVmaW5lIFNVTlhJX0ZVTkNUSU9OKF92YWwsIF9uYW1lKQkJCQlcCisJewkJCQkJCQlcCisJCS5uYW1lID0gX25hbWUsCQkJCQlcCisJCS5tdXh2YWwgPSBfdmFsLAkJCQkJXAorCX0KKworI2RlZmluZSBTVU5YSV9GVU5DVElPTl9JUlEoX3ZhbCwgX2lycSkJCQkJXAorCXsJCQkJCQkJXAorCQkubmFtZSA9ICJpcnEiLAkJCQkJXAorCQkubXV4dmFsID0gX3ZhbCwJCQkJCVwKKwkJLmlycW51bSA9IF9pcnEsCQkJCQlcCisJfQorCisvKgorICogVGhlIHN1blhpIFBJTyByZWdpc3RlcnMgYXJlIG9yZ2FuaXplZCBhcyBpczoKKyAqIDB4MDAgLSAweDBjCU11eGluZyB2YWx1ZXMuCisgKgkJOCBwaW5zIHBlciByZWdpc3RlciwgZWFjaCBwaW4gaGF2aW5nIGEgNGJpdHMgdmFsdWUKKyAqIDB4MTAJCVBpbiB2YWx1ZXMKKyAqCQkzMiBiaXRzIHBlciByZWdpc3RlciwgZWFjaCBwaW4gY29ycmVzcG9uZGluZyB0byBvbmUgYml0CisgKiAweDE0IC0gMHgxOAlEcml2ZSBsZXZlbAorICoJCTE2IHBpbnMgcGVyIHJlZ2lzdGVyLCBlYWNoIHBpbiBoYXZpbmcgYSAyYml0cyB2YWx1ZQorICogMHgxYyAtIDB4MjAJUHVsbC1VcCB2YWx1ZXMKKyAqCQkxNiBwaW5zIHBlciByZWdpc3RlciwgZWFjaCBwaW4gaGF2aW5nIGEgMmJpdHMgdmFsdWUKKyAqCisgKiBUaGlzIGlzIGZvciB0aGUgZmlyc3QgYmFuay4gRWFjaCBiYW5rIHdpbGwgaGF2ZSB0aGUgc2FtZSBsYXlvdXQsCisgKiB3aXRoIGFuIG9mZnNldCBiZWluZyBhIG11bHRpcGxlIG9mIDB4MjQuCisgKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2FsY3VsYXRlIGZyb20gdGhlIHBpbiBudW1iZXIgdGhlIHJlZ2lzdGVyCisgKiBhbmQgdGhlIGJpdCBvZmZzZXQgdGhhdCB3ZSBzaG91bGQgYWNjZXNzLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBzdW54aV9tdXhfcmVnKHUxNiBwaW4pCit7CisJdTggYmFuayA9IHBpbiAvIFBJTlNfUEVSX0JBTks7CisJdTMyIG9mZnNldCA9IGJhbmsgKiBCQU5LX01FTV9TSVpFOworCW9mZnNldCArPSBNVVhfUkVHU19PRkZTRVQ7CisJb2Zmc2V0ICs9IHBpbiAlIFBJTlNfUEVSX0JBTksgLyBNVVhfUElOU19QRVJfUkVHICogMHgwNDsKKwlyZXR1cm4gcm91bmRfZG93bihvZmZzZXQsIDQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzdW54aV9tdXhfb2Zmc2V0KHUxNiBwaW4pCit7CisJdTMyIHBpbl9udW0gPSBwaW4gJSBNVVhfUElOU19QRVJfUkVHOworCXJldHVybiBwaW5fbnVtICogTVVYX1BJTlNfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3VueGlfZGF0YV9yZWcodTE2IHBpbikKK3sKKwl1OCBiYW5rID0gcGluIC8gUElOU19QRVJfQkFOSzsKKwl1MzIgb2Zmc2V0ID0gYmFuayAqIEJBTktfTUVNX1NJWkU7CisJb2Zmc2V0ICs9IERBVEFfUkVHU19PRkZTRVQ7CisJb2Zmc2V0ICs9IHBpbiAlIFBJTlNfUEVSX0JBTksgLyBEQVRBX1BJTlNfUEVSX1JFRyAqIDB4MDQ7CisJcmV0dXJuIHJvdW5kX2Rvd24ob2Zmc2V0LCA0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3VueGlfZGF0YV9vZmZzZXQodTE2IHBpbikKK3sKKwl1MzIgcGluX251bSA9IHBpbiAlIERBVEFfUElOU19QRVJfUkVHOworCXJldHVybiBwaW5fbnVtICogREFUQV9QSU5TX0JJVFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2RsZXZlbF9yZWcodTE2IHBpbikKK3sKKwl1OCBiYW5rID0gcGluIC8gUElOU19QRVJfQkFOSzsKKwl1MzIgb2Zmc2V0ID0gYmFuayAqIEJBTktfTUVNX1NJWkU7CisJb2Zmc2V0ICs9IERMRVZFTF9SRUdTX09GRlNFVDsKKwlvZmZzZXQgKz0gcGluICUgUElOU19QRVJfQkFOSyAvIERMRVZFTF9QSU5TX1BFUl9SRUcgKiAweDA0OworCXJldHVybiByb3VuZF9kb3duKG9mZnNldCwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2RsZXZlbF9vZmZzZXQodTE2IHBpbikKK3sKKwl1MzIgcGluX251bSA9IHBpbiAlIERMRVZFTF9QSU5TX1BFUl9SRUc7CisJcmV0dXJuIHBpbl9udW0gKiBETEVWRUxfUElOU19CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzdW54aV9wdWxsX3JlZyh1MTYgcGluKQoreworCXU4IGJhbmsgPSBwaW4gLyBQSU5TX1BFUl9CQU5LOworCXUzMiBvZmZzZXQgPSBiYW5rICogQkFOS19NRU1fU0laRTsKKwlvZmZzZXQgKz0gUFVMTF9SRUdTX09GRlNFVDsKKwlvZmZzZXQgKz0gcGluICUgUElOU19QRVJfQkFOSyAvIFBVTExfUElOU19QRVJfUkVHICogMHgwNDsKKwlyZXR1cm4gcm91bmRfZG93bihvZmZzZXQsIDQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzdW54aV9wdWxsX29mZnNldCh1MTYgcGluKQoreworCXUzMiBwaW5fbnVtID0gcGluICUgUFVMTF9QSU5TX1BFUl9SRUc7CisJcmV0dXJuIHBpbl9udW0gKiBQVUxMX1BJTlNfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3VueGlfaXJxX2NmZ19yZWcodTE2IGlycSkKK3sKKwl1OCByZWcgPSBpcnEgLyBJUlFfQ0ZHX0lSUV9QRVJfUkVHICogMHgwNDsKKwlyZXR1cm4gcmVnICsgSVJRX0NGR19SRUc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2lycV9jZmdfb2Zmc2V0KHUxNiBpcnEpCit7CisJdTMyIGlycV9udW0gPSBpcnEgJSBJUlFfQ0ZHX0lSUV9QRVJfUkVHOworCXJldHVybiBpcnFfbnVtICogSVJRX0NGR19JUlFfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3VueGlfaXJxX2N0cmxfcmVnKHUxNiBpcnEpCit7CisJdTggcmVnID0gaXJxIC8gSVJRX0NUUkxfSVJRX1BFUl9SRUcgKiAweDA0OworCXJldHVybiByZWcgKyBJUlFfQ1RSTF9SRUc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2lycV9jdHJsX29mZnNldCh1MTYgaXJxKQoreworCXUzMiBpcnFfbnVtID0gaXJxICUgSVJRX0NUUkxfSVJRX1BFUl9SRUc7CisJcmV0dXJuIGlycV9udW0gKiBJUlFfQ1RSTF9JUlFfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3VueGlfaXJxX3N0YXR1c19yZWcodTE2IGlycSkKK3sKKwl1OCByZWcgPSBpcnEgLyBJUlFfU1RBVFVTX0lSUV9QRVJfUkVHICogMHgwNDsKKwlyZXR1cm4gcmVnICsgSVJRX1NUQVRVU19SRUc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX2lycV9zdGF0dXNfb2Zmc2V0KHUxNiBpcnEpCit7CisJdTMyIGlycV9udW0gPSBpcnEgJSBJUlFfU1RBVFVTX0lSUV9QRVJfUkVHOworCXJldHVybiBpcnFfbnVtICogSVJRX1NUQVRVU19JUlFfQklUUzsKK30KKworaW50IHN1bnhpX3BpbmN0cmxfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHN1bnhpX3BpbmN0cmxfZGVzYyAqZGVzYyk7CisKKyNlbmRpZiAvKiBfX1BJTkNUUkxfU1VOWElfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS9nb2xkZmlzaC9nb2xkZmlzaF9waXBlLmMgYi9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNoX3BpcGUuYwppbmRleCA0ZjVhYTgzMS4uZDlhMDlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9nb2xkZmlzaC9nb2xkZmlzaF9waXBlLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9nb2xkZmlzaC9nb2xkZmlzaF9waXBlLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9nb2xkZmlzaC5oPgogCiAvKgogICogSU1QT1JUQU5UOiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBtdXN0IG1hdGNoIHRoZSBvbmVzIHVzZWQgYW5kIGRlZmluZWQKQEAgLTY2LDggKzY3LDEwIEBACiAjZGVmaW5lIFBJUEVfUkVHX0NPTU1BTkQJCTB4MDAgIC8qIHdyaXRlOiB2YWx1ZSA9IGNvbW1hbmQgKi8KICNkZWZpbmUgUElQRV9SRUdfU1RBVFVTCQkJMHgwNCAgLyogcmVhZCAqLwogI2RlZmluZSBQSVBFX1JFR19DSEFOTkVMCQkweDA4ICAvKiByZWFkL3dyaXRlOiBjaGFubmVsIGlkICovCisjZGVmaW5lIFBJUEVfUkVHX0NIQU5ORUxfSElHSAkgICAgICAgIDB4MzAgIC8qIHJlYWQvd3JpdGU6IGNoYW5uZWwgaWQgKi8KICNkZWZpbmUgUElQRV9SRUdfU0laRQkJCTB4MGMgIC8qIHJlYWQvd3JpdGU6IGJ1ZmZlciBzaXplICovCiAjZGVmaW5lIFBJUEVfUkVHX0FERFJFU1MJCTB4MTAgIC8qIHdyaXRlOiBwaHlzaWNhbCBhZGRyZXNzICovCisjZGVmaW5lIFBJUEVfUkVHX0FERFJFU1NfSElHSAkgICAgICAgIDB4MzQgIC8qIHdyaXRlOiBwaHlzaWNhbCBhZGRyZXNzICovCiAjZGVmaW5lIFBJUEVfUkVHX1dBS0VTCQkJMHgxNCAgLyogcmVhZDogd2FrZSBmbGFncyAqLwogI2RlZmluZSBQSVBFX1JFR19QQVJBTVNfQUREUl9MT1cJMHgxOCAgLyogcmVhZC93cml0ZTogYmF0Y2ggZGF0YSBhZGRyZXNzICovCiAjZGVmaW5lIFBJUEVfUkVHX1BBUkFNU19BRERSX0hJR0gJMHgxYyAgLyogcmVhZC93cml0ZTogYmF0Y2ggZGF0YSBhZGRyZXNzICovCkBAIC0xMDksOSArMTEyLDkgQEAKICNkZWZpbmUgUElQRV9XQUtFX1dSSVRFICAgICAgICAoMSA8PCAyKSAgLyogcGlwZSBjYW4gbm93IGJlIHdyaXR0ZW4gdG8gKi8KIAogc3RydWN0IGFjY2Vzc19wYXJhbXMgewotCXUzMiBjaGFubmVsOworCXVuc2lnbmVkIGxvbmcgY2hhbm5lbDsKIAl1MzIgc2l6ZTsKLQl1MzIgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJdTMyIGNtZDsKIAl1MzIgcmVzdWx0OwogCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9uICovCkBAIC0xNDksMTMgKzE1MiwxNCBAQAogCiAKIHN0YXRpYyB1MzIgZ29sZGZpc2hfY21kX3N0YXR1cyhzdHJ1Y3QgZ29sZGZpc2hfcGlwZSAqcGlwZSwgdTMyIGNtZCkKLXsgCit7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgc3RhdHVzOwogCXN0cnVjdCBnb2xkZmlzaF9waXBlX2RldiAqZGV2ID0gcGlwZS0+ZGV2OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCXdyaXRlbCgodTMyKXBpcGUsIGRldi0+YmFzZSArIFBJUEVfUkVHX0NIQU5ORUwpOworCWdmX3dyaXRlNjQoKHU2NCkodW5zaWduZWQgbG9uZylwaXBlLCBkZXYtPmJhc2UgKyBQSVBFX1JFR19DSEFOTkVMLAorCQkJCWRldi0+YmFzZSArIFBJUEVfUkVHX0NIQU5ORUxfSElHSCk7CiAJd3JpdGVsKGNtZCwgZGV2LT5iYXNlICsgUElQRV9SRUdfQ09NTUFORCk7CiAJc3RhdHVzID0gcmVhZGwoZGV2LT5iYXNlICsgUElQRV9SRUdfU1RBVFVTKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKQEAgLTE2MywxMiArMTY3LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkIGdvbGRmaXNoX2NtZChzdHJ1Y3QgZ29sZGZpc2hfcGlwZSAqcGlwZSwgdTMyIGNtZCkKLXsgCit7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZ29sZGZpc2hfcGlwZV9kZXYgKmRldiA9IHBpcGUtPmRldjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQl3cml0ZWwoKHUzMilwaXBlLCBkZXYtPmJhc2UgKyBQSVBFX1JFR19DSEFOTkVMKTsKKwlnZl93cml0ZTY0KCh1NjQpKHVuc2lnbmVkIGxvbmcpcGlwZSwgZGV2LT5iYXNlICsgUElQRV9SRUdfQ0hBTk5FTCwKKwkJCQlkZXYtPmJhc2UgKyBQSVBFX1JFR19DSEFOTkVMX0hJR0gpOwogCXdyaXRlbChjbWQsIGRldi0+YmFzZSArIFBJUEVfUkVHX0NPTU1BTkQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMzIyLDkgKzMyNywxMiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBpcnFfZmxhZ3MpOwogCQlpZiAoYWNjZXNzX3dpdGhfcGFyYW0oZGV2LCBDTURfV1JJVEVfQlVGRkVSICsgY21kX29mZnNldCwKIAkJCQlhZGRyZXNzLCBhdmFpbCwgcGlwZSwgJnN0YXR1cykpIHsKLQkJCXdyaXRlbCgodTMyKXBpcGUsIGRldi0+YmFzZSArIFBJUEVfUkVHX0NIQU5ORUwpOworCQkJZ2Zfd3JpdGU2NCgodTY0KSh1bnNpZ25lZCBsb25nKXBpcGUsCisJCQkJICAgZGV2LT5iYXNlICsgUElQRV9SRUdfQ0hBTk5FTCwKKwkJCQkgICBkZXYtPmJhc2UgKyBQSVBFX1JFR19DSEFOTkVMX0hJR0gpOwogCQkJd3JpdGVsKGF2YWlsLCBkZXYtPmJhc2UgKyBQSVBFX1JFR19TSVpFKTsKLQkJCXdyaXRlbChhZGRyZXNzLCBkZXYtPmJhc2UgKyBQSVBFX1JFR19BRERSRVNTKTsKKwkJCWdmX3dyaXRlNjQoYWRkcmVzcywgZGV2LT5iYXNlICsgUElQRV9SRUdfQUREUkVTUywKKwkJCQlkZXYtPmJhc2UgKyBQSVBFX1JFR19BRERSRVNTX0hJR0gpOwogCQkJd3JpdGVsKENNRF9XUklURV9CVUZGRVIgKyBjbWRfb2Zmc2V0LAogCQkJCQlkZXYtPmJhc2UgKyBQSVBFX1JFR19DT01NQU5EKTsKIAkJCXN0YXR1cyA9IHJlYWRsKGRldi0+YmFzZSArIFBJUEVfUkVHX1NUQVRVUyk7CkBAIC00NDcsNyArNDU1LDE1IEBACiAJCS8qIEZpcnN0IHJlYWQgdGhlIGNoYW5uZWwsIDAgbWVhbnMgdGhlIGVuZCBvZiB0aGUgbGlzdCAqLwogCQlzdHJ1Y3QgZ29sZGZpc2hfcGlwZSAqcGlwZTsKIAkJdW5zaWduZWQgbG9uZyB3YWtlczsKLQkJdW5zaWduZWQgbG9uZyBjaGFubmVsID0gcmVhZGwoZGV2LT5iYXNlICsgUElQRV9SRUdfQ0hBTk5FTCk7CisJCXVuc2lnbmVkIGxvbmcgY2hhbm5lbCA9IDA7CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJY2hhbm5lbCA9ICh1NjQpcmVhZGwoZGV2LT5iYXNlICsgUElQRV9SRUdfQ0hBTk5FTF9ISUdIKSA8PCAzMjsKKworCQlpZiAoY2hhbm5lbCA9PSAwKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJY2hhbm5lbCB8PSByZWFkbChkZXYtPmJhc2UgKyBQSVBFX1JFR19DSEFOTkVMKTsKIAogCQlpZiAoY2hhbm5lbCA9PSAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL3BkZXZfYnVzLmMgYi9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL3BkZXZfYnVzLmMKaW5kZXggOTJjYzRjZi4uOGM0MzU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9nb2xkZmlzaC9wZGV2X2J1cy5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0vZ29sZGZpc2gvcGRldl9idXMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBQREVWX0JVU19JT19TSVpFICAgICAgICAoMHgxNCkKICNkZWZpbmUgUERFVl9CVVNfSVJRICAgICAgICAgICAgKDB4MTgpCiAjZGVmaW5lIFBERVZfQlVTX0lSUV9DT1VOVCAgICAgICgweDFjKQorI2RlZmluZSBQREVWX0JVU19HRVRfTkFNRV9ISUdIICAoMHgyMCkKIAogc3RydWN0IHBkZXZfYnVzX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMTI5LDcgKzEzMCwxMCBAQAogCWRldi0+cGRldi5kZXYuZG1hX21hc2sgPSAodm9pZCAqKShkZXYtPnBkZXYubmFtZSArIG5hbWVfbGVuICsgMSk7CiAJKmRldi0+cGRldi5kZXYuZG1hX21hc2sgPSB+MDsKIAotCXdyaXRlbCgodW5zaWduZWQgbG9uZyluYW1lLCBwZGV2X2J1c19iYXNlICsgUERFVl9CVVNfR0VUX05BTUUpOworI2lmZGVmIENPTkZJR182NEJJVAorCXdyaXRlbCgodTMyKSgodTY0KW5hbWU+PjMyKSwgcGRldl9idXNfYmFzZSArIFBERVZfQlVTX0dFVF9OQU1FX0hJR0gpOworI2VuZGlmCisJd3JpdGVsKCh1MzIpKHVuc2lnbmVkIGxvbmcpbmFtZSwgcGRldl9idXNfYmFzZSArIFBERVZfQlVTX0dFVF9OQU1FKTsKIAluYW1lW25hbWVfbGVuXSA9ICdcMCc7CiAJZGV2LT5wZGV2LmlkID0gcmVhZGwocGRldl9idXNfYmFzZSArIFBERVZfQlVTX0lEKTsKIAlkZXYtPnBkZXYucmVzb3VyY2VbMF0uc3RhcnQgPSBiYXNlOwpAQCAtMTg0LDExICsxODgsNiBAQAogCXBkZXZfYnVzX2FkZHIgPSByLT5zdGFydDsKIAlwZGV2X2J1c19sZW4gPSByZXNvdXJjZV9zaXplKHIpOwogCi0JaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2X2J1c19hZGRyLCBwZGV2X2J1c19sZW4sICJnb2xkZmlzaCIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXNlcnZlIEdvbGRmaXNoIE1NSU8uXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KIAlwZGV2X2J1c19iYXNlID0gaW9yZW1hcChwZGV2X2J1c19hZGRyLCBwZGV2X2J1c19sZW4pOwogCWlmIChwZGV2X2J1c19iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jCmluZGV4IGM1ZTA4MmYuLjkxZWY2OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYwpAQCAtNjQyLDggKzY0Miw3IEBACiAJCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgMCk7CiAJCQlpZiAoZGV2KSB7CiAJCQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7Ci0JCQkJaWYgKHBjaV9idXNfYWRkX2RldmljZShkZXYpKQotCQkJCQlwcl9lcnIoIlVuYWJsZSB0byBob3RwbHVnIHdpZmlcbiIpOworCQkJCXBjaV9idXNfYWRkX2RldmljZShkZXYpOwogCQkJfQogCQl9IGVsc2UgewogCQkJZGV2ID0gcGNpX2dldF9zbG90KGJ1cywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IDM5OWU4YzUuLjliMGM1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC02MzMsOCArNjMzLDcgQEAKIAkJCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCAwKTsKIAkJCWlmIChkZXYpIHsKIAkJCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKLQkJCQlpZiAocGNpX2J1c19hZGRfZGV2aWNlKGRldikpCi0JCQkJCXByX2VycigiVW5hYmxlIHRvIGhvdHBsdWcgd2lmaVxuIik7CisJCQkJcGNpX2J1c19hZGRfZGV2aWNlKGRldik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZwppbmRleCBmYTBlNGUwLi5iZGNmNTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnCkBAIC0xMiw2ICsxMiwxNCBAQAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHR1cm5pbmcgb2ZmIGJvYXJkIHZpYSBhIGFtcyBBUzM3MjIgcG93ZXItb2ZmLgogCitjb25maWcgUE9XRVJfUkVTRVRfQVhYSUEKKwlib29sICJMU0kgQXh4aWEgcmVzZXQgZHJpdmVyIgorCWRlcGVuZHMgb24gUE9XRVJfUkVTRVQgJiYgQVJDSF9BWFhJQQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHJlc3RhcnQgZm9yIEF4eGlhIFNvQy4KKworCSAgU2F5IFkgaWYgeW91IGhhdmUgYW4gQXh4aWEgZmFtaWx5IFNvQy4KKwogY29uZmlnIFBPV0VSX1JFU0VUX0dQSU8KIAlib29sICJHUElPIHBvd2VyLW9mZiBkcml2ZXIiCiAJZGVwZW5kcyBvbiBPRl9HUElPICYmIFBPV0VSX1JFU0VUCkBAIC00Myw2ICs1MSwxMyBAQAogCSAgSW5zdGVhZCB0aGV5IHJlc3RhcnQsIGFuZCB1LWJvb3QgaG9sZHMgdGhlIFNvQyB1bnRpbCB0aGUKIAkgIHVzZXIgcHJlc3NlcyBhIGtleS4gdS1ib290IHRoZW4gYm9vdHMgaW50byBMaW51eC4KIAorY29uZmlnIFBPV0VSX1JFU0VUX1NVTjZJCisJYm9vbCAiQWxsd2lubmVyIEEzMSBTb0MgcmVzZXQgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9TVU5YSQorCWRlcGVuZHMgb24gUE9XRVJfUkVTRVQKKwloZWxwCisJICBSZWJvb3Qgc3VwcG9ydCBmb3IgdGhlIEFsbHdpbm5lciBBMzEgU29Dcy4KKwogY29uZmlnIFBPV0VSX1JFU0VUX1ZFWFBSRVNTCiAJYm9vbCAiQVJNIFZlcnNhdGlsZSBFeHByZXNzIHBvd2VyLW9mZiBhbmQgcmVzZXQgZHJpdmVyIgogCWRlcGVuZHMgb24gQVJNIHx8IEFSTTY0CkBAIC01NywzICs3MiwxMSBAQAogCWRlcGVuZHMgb24gUE9XRVJfUkVTRVQKIAloZWxwCiAJICBSZWJvb3Qgc3VwcG9ydCBmb3IgdGhlIEFQTSBTb0MgWC1HZW5lIEV2YWwgYm9hcmRzLgorCitjb25maWcgUE9XRVJfUkVTRVRfS0VZU1RPTkUKKwlib29sICJLZXlzdG9uZSByZXNldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX0tFWVNUT05FCisJc2VsZWN0IE1GRF9TWVNDT04KKwloZWxwCisJICBSZWJvb3Qgc3VwcG9ydCBmb3IgdGhlIEtFWVNUT05FIFNvQ3MuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlCmluZGV4IGE1YjRhNzcuLmRkZTJlOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZQpAQCAtMSw3ICsxLDEwIEBACiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfQVMzNzIyKSArPSBhczM3MjItcG93ZXJvZmYubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0FYWElBKSArPSBheHhpYS1yZXNldC5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfR1BJTykgKz0gZ3Bpby1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfTVNNKSArPSBtc20tcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1FOQVApICs9IHFuYXAtcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1JFU1RBUlQpICs9IHJlc3RhcnQtcG93ZXJvZmYubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1NVTjZJKSArPSBzdW42aS1yZWJvb3Qubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1ZFWFBSRVNTKSArPSB2ZXhwcmVzcy1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfWEdFTkUpICs9IHhnZW5lLXJlYm9vdC5vCitvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfS0VZU1RPTkUpICs9IGtleXN0b25lLXJlc2V0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXh4aWEtcmVzZXQuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXh4aWEtcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjFmOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9heHhpYS1yZXNldC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBSZXNldCBkcml2ZXIgZm9yIEF4eGlhIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTFNJCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorCisKKyNkZWZpbmUgU0NfQ1JJVF9XUklURV9LRVkJMHgxMDAwCisjZGVmaW5lIFNDX0xBVENIX09OX1JFU0VUCTB4MTAwNAorI2RlZmluZSBTQ19SRVNFVF9DT05UUk9MCTB4MTAwOAorI2RlZmluZSAgIFJTVENUTF9SU1RfWkVSTwkoMTw8MykKKyNkZWZpbmUgICBSU1RDVExfUlNUX0ZBQgkoMTw8MikKKyNkZWZpbmUgICBSU1RDVExfUlNUX0NISVAJKDE8PDEpCisjZGVmaW5lICAgUlNUQ1RMX1JTVF9TWVMJKDE8PDApCisjZGVmaW5lIFNDX0VGVVNFX0lOVF9TVEFUVVMJMHgxODBjCisjZGVmaW5lICAgRUZVU0VfUkVBRF9ET05FCSgxPDwzMSkKKworc3RhdGljIHN0cnVjdCByZWdtYXAgKnN5c2NvbjsKKworc3RhdGljIHZvaWQgZG9fYXh4aWFfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyogQWNjZXNzIEtleSAoMHhhYikgKi8KKwlyZWdtYXBfd3JpdGUoc3lzY29uLCBTQ19DUklUX1dSSVRFX0tFWSwgMHhhYik7CisJLyogU2VsZWN0IGludGVybmFsIGJvb3QgZnJvbSAweGZmZmYwMDAwICovCisJcmVnbWFwX3dyaXRlKHN5c2NvbiwgU0NfTEFUQ0hfT05fUkVTRVQsIDB4MDAwMDAwNDApOworCS8qIEFzc2VydCBSZXNldFJlYWREb25lICh0byBhdm9pZCBoYW5naW5nIGluIGJvb3QgUk9NKSAqLworCXJlZ21hcF93cml0ZShzeXNjb24sIFNDX0VGVVNFX0lOVF9TVEFUVVMsIEVGVVNFX1JFQURfRE9ORSk7CisJLyogQXNzZXJ0IGNoaXAgcmVzZXQgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoc3lzY29uLCBTQ19SRVNFVF9DT05UUk9MLAorCQkJICAgUlNUQ1RMX1JTVF9DSElQLCBSU1RDVExfUlNUX0NISVApOworfQorCitzdGF0aWMgaW50IGF4eGlhX3Jlc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKworCXN5c2NvbiA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAic3lzY29uIik7CisJaWYgKElTX0VSUihzeXNjb24pKSB7CisJCXByX2VycigiJXM6IHN5c2NvbiBsb29rdXAgZmFpbGVkXG4iLCBkZXYtPm9mX25vZGUtPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihzeXNjb24pOworCX0KKworCWFybV9wbV9yZXN0YXJ0ID0gZG9fYXh4aWFfcmVzdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9heHhpYV9yZXNldF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibHNpLGF4bTU1eHgtcmVzZXQiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2F4eGlhX3Jlc2V0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXh4aWFfcmVzZXRfZHJpdmVyID0geworCS5wcm9iZSA9IGF4eGlhX3Jlc2V0X3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImF4eGlhLXJlc2V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX2F4eGlhX3Jlc2V0X21hdGNoKSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXh4aWFfcmVzZXRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF4eGlhX3Jlc2V0X2RyaXZlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwoYXh4aWFfcmVzZXRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2tleXN0b25lLXJlc2V0LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2tleXN0b25lLXJlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4YTE4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2tleXN0b25lLXJlc2V0LmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBUSSBrZXlzdG9uZSByZWJvb3QgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZC4gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogQXV0aG9yOiBJdmFuIEtob3JvbnpodWsgPGl2YW4ua2hvcm9uemh1a0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBSU1RZUEVfUkcJCQkweDAKKyNkZWZpbmUgUlNDVFJMX1JHCQkJMHg0CisjZGVmaW5lIFJTQ0ZHX1JHCQkJMHg4CisjZGVmaW5lIFJTSVNPX1JHCQkJMHhjCisKKyNkZWZpbmUgUlNDVFJMX0tFWV9NQVNLCQkJMHgwMDAwZmZmZgorI2RlZmluZSBSU0NUUkxfUkVTRVRfTUFTSwkJQklUKDE2KQorI2RlZmluZSBSU0NUUkxfS0VZCQkJMHg1YTY5CisKKyNkZWZpbmUgUlNNVVhfT01PREVfTUFTSwkJMHhlCisjZGVmaW5lIFJTTVVYX09NT0RFX1JFU0VUX09OCQkweGEKKyNkZWZpbmUgUlNNVVhfT01PREVfUkVTRVRfT0ZGCQkweDAKKyNkZWZpbmUgUlNNVVhfTE9DS19NQVNLCQkJMHgxCisjZGVmaW5lIFJTTVVYX0xPQ0tfU0VUCQkJMHgxCisKKyNkZWZpbmUgUlNDRkdfUlNUWVBFX1NPRlQJCTB4MzAwZgorI2RlZmluZSBSU0NGR19SU1RZUEVfSEFSRAkJMHgwCisKKyNkZWZpbmUgV0RUX01VWF9OVU1CRVIJCQkweDQKKworc3RhdGljIGludCByc3BsbF9vZmZzZXQ7CitzdGF0aWMgc3RydWN0IHJlZ21hcCAqcGxsY3RybF9yZWdzOworCisvKioKKyAqIHJzY3RybF9lbmFibGVfcnNwbGxfd3JpdGUgLSBlbmFibGUgYWNjZXNzIHRvIFJTQ1RSTCwgUlNDRkcKKyAqIFRvIGJlIGFibGUgdG8gYWNjZXNzIHRvIFJTQ1RSTCwgUlNDRkcgcmVnaXN0ZXJzCisgKiB3ZSBoYXZlIHRvIHdyaXRlIGEga2V5IGJlZm9yZQorICovCitzdGF0aWMgaW5saW5lIGludCByc2N0cmxfZW5hYmxlX3JzcGxsX3dyaXRlKHZvaWQpCit7CisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwbGxjdHJsX3JlZ3MsIHJzcGxsX29mZnNldCArIFJTQ1RSTF9SRywKKwkJCQkgIFJTQ1RSTF9LRVlfTUFTSywgUlNDVFJMX0tFWSk7Cit9CisKK3N0YXRpYyB2b2lkIHJzY3RybF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIGVuYWJsZSB3cml0ZSBhY2Nlc3MgdG8gUlNUQ1RSTCAqLworCXJzY3RybF9lbmFibGVfcnNwbGxfd3JpdGUoKTsKKworCS8qIHJlc2V0IHRoZSBTT0MgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMocGxsY3RybF9yZWdzLCByc3BsbF9vZmZzZXQgKyBSU0NUUkxfUkcsCisJCQkgICBSU0NUUkxfUkVTRVRfTUFTSywgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJzY3RybF9vZl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJ0aSxrZXlzdG9uZS1yZXNldCIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IHJzY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpOworCWludCByZXQ7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBpbnQgcmc7CisJdTMyIHJzbXV4X29mZnNldDsKKwlzdHJ1Y3QgcmVnbWFwICpkZXZjdHJsX3JlZ3M7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBnZXQgcmVnbWFwcyAqLworCXBsbGN0cmxfcmVncyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJ0aSxzeXNjb24tcGxsIik7CisJaWYgKElTX0VSUihwbGxjdHJsX3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihwbGxjdHJsX3JlZ3MpOworCisJZGV2Y3RybF9yZWdzID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgInRpLHN5c2Nvbi1kZXYiKTsKKwlpZiAoSVNfRVJSKGRldmN0cmxfcmVncykpCisJCXJldHVybiBQVFJfRVJSKGRldmN0cmxfcmVncyk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInRpLHN5c2Nvbi1wbGwiLCAxLCAmcnNwbGxfb2Zmc2V0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgcmVhZCB0aGUgcmVzZXQgcGxsIG9mZnNldCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInRpLHN5c2Nvbi1kZXYiLCAxLCAmcnNtdXhfb2Zmc2V0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgcmVhZCB0aGUgcnNtdXggb2Zmc2V0IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldCBzb2Z0L2hhcmQgcmVzZXQgKi8KKwl2YWwgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJ0aSxzb2Z0LXJlc2V0Iik7CisJdmFsID0gdmFsID8gUlNDRkdfUlNUWVBFX1NPRlQgOiBSU0NGR19SU1RZUEVfSEFSRDsKKworCXJldCA9IHJzY3RybF9lbmFibGVfcnNwbGxfd3JpdGUoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmVnbWFwX3dyaXRlKHBsbGN0cmxfcmVncywgcnNwbGxfb2Zmc2V0ICsgUlNDRkdfUkcsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWFybV9wbV9yZXN0YXJ0ID0gcnNjdHJsX3Jlc3RhcnQ7CisKKwkvKiBkaXNhYmxlIGEgcmVzZXQgaXNvbGF0aW9uIGZvciBhbGwgbW9kdWxlIGNsb2NrcyAqLworCXJldCA9IHJlZ21hcF93cml0ZShwbGxjdHJsX3JlZ3MsIHJzcGxsX29mZnNldCArIFJTSVNPX1JHLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogZW5hYmxlIGEgcmVzZXQgZm9yIHdhdGNoZG9ncyBmcm9tIHdkdC1saXN0ICovCisJZm9yIChpID0gMDsgaSA8IFdEVF9NVVhfTlVNQkVSOyBpKyspIHsKKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJ0aSx3ZHQtbGlzdCIsIGksICZ2YWwpOworCQlpZiAocmV0ID09IC1FT1ZFUkZMT1cgJiYgIWkpIHsKKwkJCWRldl9lcnIoZGV2LCAidGksd2R0LWxpc3QgcHJvcGVydHkgaGFzIHRvIGNvbnRhaW4gYXQiCisJCQkJImxlYXN0IG9uZSBlbnRyeVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIGlmIChyZXQpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhbCA+PSBXRFRfTVVYX05VTUJFUikgeworCQkJZGV2X2VycihkZXYsICJ0aSx3ZHQtbGlzdCBwcm9wZXJ0eSBjYW4gY29udGFpbiIKKwkJCQkib25seSBudW1iZXJzIDwgNFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJnID0gcnNtdXhfb2Zmc2V0ICsgdmFsICogNDsKKworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2Y3RybF9yZWdzLCByZywgUlNNVVhfT01PREVfTUFTSywKKwkJCQkJIFJTTVVYX09NT0RFX1JFU0VUX09OIHwKKwkJCQkJIFJTTVVYX0xPQ0tfU0VUKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJzY3RybF9kcml2ZXIgPSB7CisJLnByb2JlID0gcnNjdHJsX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCQkub2ZfbWF0Y2hfdGFibGUgPSByc2N0cmxfb2ZfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJzY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJJdmFuIEtob3JvbnpodWsgPGl2YW4ua2hvcm9uemh1a0B0aS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRleGFzIEluc3RydW1lbnRzIGtleXN0b25lIHJlc2V0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIEtCVUlMRF9NT0ROQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3VuNmktcmVib290LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3N1bjZpLXJlYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmNkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3N1bjZpLXJlYm9vdC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBBbGx3aW5uZXIgQTMxIFNvQ3MgcmVzZXQgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IE1heGltZSBSaXBhcmQKKyAqCisgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorCisjZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9JUlFfUkVHCQkweDAwCisjZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFRwkweDEwCisjZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFU1RBUlQJCUJJVCgwKQorI2RlZmluZSBTVU42SV9XQVRDSERPRzFfQ09ORklHX1JFRwkweDE0CisjZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfUkVTVEFSVAkJQklUKDApCisjZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfSVJRCQlCSVQoMSkKKyNkZWZpbmUgU1VONklfV0FUQ0hET0cxX01PREVfUkVHCTB4MTgKKyNkZWZpbmUgU1VONklfV0FUQ0hET0cxX01PREVfRU5BQkxFCQlCSVQoMCkKKworc3RhdGljIHZvaWQgX19pb21lbSAqd2R0X2Jhc2U7CisKK3N0YXRpYyB2b2lkIHN1bjZpX3dkdF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCWlmICghd2R0X2Jhc2UpCisJCXJldHVybjsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXdyaXRlbCgwLCB3ZHRfYmFzZSArIFNVTjZJX1dBVENIRE9HMV9JUlFfUkVHKTsKKworCS8qIFdlIHdhbnQgdG8gZGlzYWJsZSB0aGUgSVJRIGFuZCBqdXN0IHJlc2V0IHRoZSB3aG9sZSBzeXN0ZW0gKi8KKwl3cml0ZWwoU1VONklfV0FUQ0hET0cxX0NPTkZJR19SRVNUQVJULAorCQl3ZHRfYmFzZSArIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfUkVHKTsKKworCS8qIEVuYWJsZSB0aW1lci4gVGhlIGRlZmF1bHQgYW5kIGxvd2VzdCBpbnRlcnZhbCB2YWx1ZSBpcyAwLjVzICovCisJd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9NT0RFX0VOQUJMRSwKKwkJd2R0X2Jhc2UgKyBTVU42SV9XQVRDSERPRzFfTU9ERV9SRUcpOworCisJLyogUmVzdGFydCB0aGUgd2F0Y2hkb2cuICovCisJd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFU1RBUlQsCisJCXdkdF9iYXNlICsgU1VONklfV0FUQ0hET0cxX0NUUkxfUkVHKTsKKworCXdoaWxlICgxKSB7CisJCW1kZWxheSg1KTsKKwkJd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9NT0RFX0VOQUJMRSwKKwkJCXdkdF9iYXNlICsgU1VONklfV0FUQ0hET0cxX01PREVfUkVHKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3VuNmlfcmVib290X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJd2R0X2Jhc2UgPSBvZl9pb21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMCk7CisJaWYgKCF3ZHRfYmFzZSkgeworCQlXQVJOKDEsICJmYWlsZWQgdG8gbWFwIHdhdGNoZG9nIGJhc2UgYWRkcmVzcyIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlhcm1fcG1fcmVzdGFydCA9IHN1bjZpX3dkdF9yZXN0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjZpX3JlYm9vdF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS13ZHQiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjZpX3JlYm9vdF9kcml2ZXIgPSB7CisJLnByb2JlID0gc3VuNmlfcmVib290X3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInN1bjZpLXJlYm9vdCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN1bjZpX3JlYm9vdF9vZl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNmlfcmVib290X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3ZleHByZXNzLXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3ZleHByZXNzLXBvd2Vyb2ZmLmMKaW5kZXggYjk1Y2Y3MS4uNGRjMTAyZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvdmV4cHJlc3MtcG93ZXJvZmYuYworKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3ZleHByZXNzLXBvd2Vyb2ZmLmMKQEAgLTIzLDEwICsyMywxMCBAQAogc3RhdGljIHZvaWQgdmV4cHJlc3NfcmVzZXRfZG8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGF0KQogewogCWludCBlcnIgPSAtRU5PRU5UOwotCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyAqZnVuYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByZWdtYXAgKnJlZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGZ1bmMpIHsKLQkJZXJyID0gdmV4cHJlc3NfY29uZmlnX3dyaXRlKGZ1bmMsIDAsIDApOworCWlmIChyZWcpIHsKKwkJZXJyID0gcmVnbWFwX3dyaXRlKHJlZywgMCwgMCk7CiAJCWlmICghZXJyKQogCQkJbWRlbGF5KDEwMDApOwogCX0KQEAgLTkxLDE3ICs5MSwxNyBAQAogCWVudW0gdmV4cHJlc3NfcmVzZXRfZnVuYyBmdW5jOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoID0KIAkJCW9mX21hdGNoX2RldmljZSh2ZXhwcmVzc19yZXNldF9vZl9tYXRjaCwgJnBkZXYtPmRldik7Ci0Jc3RydWN0IHZleHByZXNzX2NvbmZpZ19mdW5jICpjb25maWdfZnVuYzsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAKIAlpZiAobWF0Y2gpCiAJCWZ1bmMgPSAoZW51bSB2ZXhwcmVzc19yZXNldF9mdW5jKW1hdGNoLT5kYXRhOwogCWVsc2UKIAkJZnVuYyA9IHBkZXYtPmlkX2VudHJ5LT5kcml2ZXJfZGF0YTsKIAotCWNvbmZpZ19mdW5jID0gdmV4cHJlc3NfY29uZmlnX2Z1bmNfZ2V0X2J5X2RldigmcGRldi0+ZGV2KTsKLQlpZiAoIWNvbmZpZ19mdW5jKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgY29uZmlnX2Z1bmMpOworCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfdmV4cHJlc3NfY29uZmlnKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIocmVnbWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVnbWFwKTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcmVnbWFwKTsKIAogCXN3aXRjaCAoZnVuYykgewogCWNhc2UgRlVOQ19TSFVURE9XTjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvdHBzNjUwOTAtY2hhcmdlci5jIGIvZHJpdmVycy9wb3dlci90cHM2NTA5MC1jaGFyZ2VyLmMKaW5kZXggOGZjOWQ2ZC4uMTY4NWY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci90cHM2NTA5MC1jaGFyZ2VyLmMKKysrIGIvZHJpdmVycy9wb3dlci90cHM2NTA5MC1jaGFyZ2VyLmMKQEAgLTI4LDE3ICsyOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tZmQvdHBzNjUwOTAuaD4KIAotI2RlZmluZSBUUFM2NTA5MF9SRUdfSU5UUl9TVFMJMHgwMAotI2RlZmluZSBUUFM2NTA5MF9SRUdfSU5UUl9NQVNLCTB4MDIKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX0NUUkwwCTB4MDQKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX0NUUkwxCTB4MDUKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX0NUUkwyCTB4MDYKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX0NUUkwzCTB4MDcKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX0NUUkw0CTB4MDgKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX0NUUkw1CTB4MDkKLSNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX1NUQVRVUzEJMHgwYQotI2RlZmluZSBUUFM2NTA5MF9SRUdfQ0dfU1RBVFVTMgkweDBiCi0KICNkZWZpbmUgVFBTNjUwOTBfQ0hBUkdFUl9FTkFCTEUJQklUKDApCiAjZGVmaW5lIFRQUzY1MDkwX1ZBQ0cJCUJJVCgxKQogI2RlZmluZSBUUFM2NTA5MF9OT0lURVJNCUJJVCg1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKaW5kZXggOTAzZWIzNy4uNzg5ZWI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCkBAIC0xMzksNiArMTM5LDEzIEBACiAJICBBUzM3MjIgUE1JQy4gVGhpcyB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBhbGwgdGhlIHNvZnR3YXJlCiAJICBjb250cm9sbGFibGUgRENEQy9MRE8gcmVndWxhdG9ycy4KIAorY29uZmlnIFJFR1VMQVRPUl9BWFAyMFgKKwl0cmlzdGF0ZSAiWC1QT1dFUlMgQVhQMjBYIFBNSUMgUmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIE1GRF9BWFAyMFgKKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgdm9sdGFnZSByZWd1bGF0b3JzIG9uIHRoZQorCSAgQVhQMjBYIFBNSUMuCisKIGNvbmZpZyBSRUdVTEFUT1JfQkNNNTkwWFgKIAl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNNTkweHggUE1VIFJlZ3VsYXRvcnMiCiAJZGVwZW5kcyBvbiBNRkRfQkNNNTkwWFgKQEAgLTI2NSwxMiArMjcyLDIxIEBACiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTFA4Nzg4IHZvbHRhZ2UgcmVndWxhdG9yIGNoaXAuCiAKK2NvbmZpZyBSRUdVTEFUT1JfTFRDMzU4OQorCXRyaXN0YXRlICJMVEMzNTg5IDgtb3V0cHV0IHZvbHRhZ2UgcmVndWxhdG9yIgorCWRlcGVuZHMgb24gSTJDCisJc2VsZWN0IFJFR01BUF9JMkMKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExUQzM1ODksIExUQzM1ODktMSwgYW5kIExUQzM1ODktMgorCSAgOC1vdXRwdXQgcmVndWxhdG9ycyBjb250cm9sbGVkIHZpYSBJMkMuCisKIGNvbmZpZyBSRUdVTEFUT1JfTUFYMTQ1NzcKLQl0cmlzdGF0ZSAiTWF4aW0gMTQ1NzcgcmVndWxhdG9yIgorCXRyaXN0YXRlICJNYXhpbSAxNDU3Ny83NzgzNiByZWd1bGF0b3IiCiAJZGVwZW5kcyBvbiBNRkRfTUFYMTQ1NzcKIAloZWxwCi0JICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDE0NTc3IHJlZ3VsYXRvciB2aWEgSTJDIGJ1cy4KLQkgIFRoZSByZWd1bGF0b3JzIGluY2x1ZGUgc2FmZW91dCBMRE8gYW5kIGN1cnJlbnQgcmVndWxhdG9yICdDSEFSR0VSJy4KKwkgIFRoaXMgZHJpdmVyIGNvbnRyb2xzIGEgTWF4aW0gTUFYMTQ1NzcvNzc4MzYgcmVndWxhdG9yIHZpYSBJMkMgYnVzLgorCSAgVGhlIE1BWDE0NTc3IHJlZ3VsYXRvcnMgaW5jbHVkZSBzYWZlb3V0IExETyBhbmQgY2hhcmdlciBjdXJyZW50CisJICByZWd1bGF0b3IuIFRoZSBNQVg3NzgzNiBoYXMgdHdvIGFkZGl0aW9uYWwgTERPcy4KIAogY29uZmlnIFJFR1VMQVRPUl9NQVgxNTg2CiAJdHJpc3RhdGUgIk1heGltIDE1ODYvMTU4NyB2b2x0YWdlIHJlZ3VsYXRvciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggMTJlZjI3Ny4uZDQ2MTExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTIwLDYgKzIwLDcgQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQVJJWk9OQSkgKz0gYXJpem9uYS1taWNzdXBwLm8gYXJpem9uYS1sZG8xLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQVMzNzExKSArPSBhczM3MTEtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQVMzNzIyKSArPSBhczM3MjItcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfQVhQMjBYKSArPSBheHAyMHgtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQkNNNTkwWFgpICs9IGJjbTU5MHh4LXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0RBOTAzWCkJKz0gZGE5MDN4Lm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfREE5MDUyKQkrPSBkYTkwNTItcmVndWxhdG9yLm8KQEAgLTM3LDYgKzM4LDcgQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfTFA4Nzg4KSArPSBscDg3ODgtYnVjay5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0xQODc4OCkgKz0gbHA4Nzg4LWxkby5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0xQODc1NSkgKz0gbHA4NzU1Lm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfTFRDMzU4OSkgKz0gbHRjMzU4OS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDE0NTc3KSArPSBtYXgxNDU3Ny5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYpICs9IG1heDE1ODYubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg4NjQ5KQkrPSBtYXg4NjQ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FuYXRvcC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FuYXRvcC1yZWd1bGF0b3IuYwppbmRleCA3YzM5N2JiLi40ZjczMGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9hbmF0b3AtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYW5hdG9wLXJlZ3VsYXRvci5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYW5hdG9wX3JlZ3VsYXRvcl9tYXRjaF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2FuYXRvcF9yZWd1bGF0b3JfbWF0Y2hfdGJsW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsYW5hdG9wLXJlZ3VsYXRvciIsIH0sCiAJeyAvKiBlbmQgKi8gfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbGRvMS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKaW5kZXggYjEwMzNkMy4uMDRmMjYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKQEAgLTE2LDkgKzE2LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKQEAgLTE3OCw2ICsxODAsNDIgQEAKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gMSwKIH07CiAKK3N0YXRpYyBpbnQgYXJpem9uYV9sZG8xX29mX2dldF9wZGF0YShzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSwKKwkJCQkgICAgIHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcpCit7CisJc3RydWN0IGFyaXpvbmFfcGRhdGEgKnBkYXRhID0gJmFyaXpvbmEtPnBkYXRhOworCXN0cnVjdCBhcml6b25hX2xkbzEgKmxkbzEgPSBjb25maWctPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW5pdF9ub2RlLCAqZGN2ZGRfbm9kZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOworCisJcGRhdGEtPmxkb2VuYSA9IGFyaXpvbmFfb2ZfZ2V0X25hbWVkX2dwaW8oYXJpem9uYSwgIndsZixsZG9lbmEiLCB0cnVlKTsKKworCWluaXRfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGFyaXpvbmEtPmRldi0+b2Zfbm9kZSwgImxkbzEiKTsKKwlkY3ZkZF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShhcml6b25hLT5kZXYtPm9mX25vZGUsICJEQ1ZERC1zdXBwbHkiLCAwKTsKKworCWlmIChpbml0X25vZGUpIHsKKwkJY29uZmlnLT5vZl9ub2RlID0gaW5pdF9ub2RlOworCisJCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGFyaXpvbmEtPmRldiwgaW5pdF9ub2RlKTsKKworCQlpZiAoaW5pdF9kYXRhKSB7CisJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzID0gJmxkbzEtPnN1cHBseTsKKwkJCWluaXRfZGF0YS0+bnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gMTsKKworCQkJaWYgKGRjdmRkX25vZGUgJiYgZGN2ZGRfbm9kZSAhPSBpbml0X25vZGUpCisJCQkJYXJpem9uYS0+ZXh0ZXJuYWxfZGN2ZGQgPSB0cnVlOworCisJCQlwZGF0YS0+bGRvMSA9IGluaXRfZGF0YTsKKwkJfQorCX0gZWxzZSBpZiAoZGN2ZGRfbm9kZSkgeworCQlhcml6b25hLT5leHRlcm5hbF9kY3ZkZCA9IHRydWU7CisJfQorCisJb2Zfbm9kZV9wdXQoZGN2ZGRfbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhcml6b25hX2xkbzFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKQEAgLTE4Niw2ICsyMjQsOCBAQAogCXN0cnVjdCBhcml6b25hX2xkbzEgKmxkbzE7CiAJaW50IHJldDsKIAorCWFyaXpvbmEtPmV4dGVybmFsX2RjdmRkID0gZmFsc2U7CisKIAlsZG8xID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbGRvMSksIEdGUF9LRVJORUwpOwogCWlmICghbGRvMSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTYsNiArMjU2LDE1IEBACiAJY29uZmlnLmRldiA9IGFyaXpvbmEtPmRldjsKIAljb25maWcuZHJpdmVyX2RhdGEgPSBsZG8xOwogCWNvbmZpZy5yZWdtYXAgPSBhcml6b25hLT5yZWdtYXA7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpKSB7CisJCWlmICghZGV2X2dldF9wbGF0ZGF0YShhcml6b25hLT5kZXYpKSB7CisJCQlyZXQgPSBhcml6b25hX2xkbzFfb2ZfZ2V0X3BkYXRhKGFyaXpvbmEsICZjb25maWcpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwogCWNvbmZpZy5lbmFfZ3BpbyA9IGFyaXpvbmEtPnBkYXRhLmxkb2VuYTsKIAogCWlmIChhcml6b25hLT5wZGF0YS5sZG8xKQpAQCAtMjIzLDYgKzI3MiwxMyBAQAogCWVsc2UKIAkJY29uZmlnLmluaXRfZGF0YSA9ICZsZG8xLT5pbml0X2RhdGE7CiAKKwkvKgorCSAqIExETzEgY2FuIG9ubHkgYmUgdXNlZCB0byBzdXBwbHkgRENWREQgc28gaWYgaXQgaGFzIG5vCisJICogY29uc3VtZXJzIHRoZW4gRENWREQgaXMgc3VwcGxpZWQgZXh0ZXJuYWxseS4KKwkgKi8KKwlpZiAoY29uZmlnLmluaXRfZGF0YS0+bnVtX2NvbnN1bWVyX3N1cHBsaWVzID09IDApCisJCWFyaXpvbmEtPmV4dGVybmFsX2RjdmRkID0gdHJ1ZTsKKwogCWxkbzEtPnJlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGRlc2MsICZjb25maWcpOwogCWlmIChJU19FUlIobGRvMS0+cmVndWxhdG9yKSkgewogCQlyZXQgPSBQVFJfRVJSKGxkbzEtPnJlZ3VsYXRvcik7CkBAIC0yMzEsNiArMjg3LDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlvZl9ub2RlX3B1dChjb25maWcub2Zfbm9kZSk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZG8xKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1taWNzdXBwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYwppbmRleCA2ZmRkOWJmLi5jZTlhY2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYwpAQCAtMTYsOSArMTYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTE5NSw2ICsxOTcsMzIgQEAKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gMSwKIH07CiAKK3N0YXRpYyBpbnQgYXJpem9uYV9taWNzdXBwX29mX2dldF9wZGF0YShzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSwKKwkJCQkJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgYXJpem9uYV9wZGF0YSAqcGRhdGEgPSAmYXJpem9uYS0+cGRhdGE7CisJc3RydWN0IGFyaXpvbmFfbWljc3VwcCAqbWljc3VwcCA9IGNvbmZpZy0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOworCisJbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShhcml6b25hLT5kZXYtPm9mX25vZGUsICJtaWN2ZGQiKTsKKworCWlmIChucCkgeworCQljb25maWctPm9mX25vZGUgPSBucDsKKworCQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShhcml6b25hLT5kZXYsIG5wKTsKKworCQlpZiAoaW5pdF9kYXRhKSB7CisJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzID0gJm1pY3N1cHAtPnN1cHBseTsKKwkJCWluaXRfZGF0YS0+bnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gMTsKKworCQkJcGRhdGEtPm1pY3ZkZCA9IGluaXRfZGF0YTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGFyaXpvbmFfbWljc3VwcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhcml6b25hICphcml6b25hID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwpAQCAtMjM0LDYgKzI2MiwxNCBAQAogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1pY3N1cHA7CiAJY29uZmlnLnJlZ21hcCA9IGFyaXpvbmEtPnJlZ21hcDsKIAorCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikpIHsKKwkJaWYgKCFkZXZfZ2V0X3BsYXRkYXRhKGFyaXpvbmEtPmRldikpIHsKKwkJCXJldCA9IGFyaXpvbmFfbWljc3VwcF9vZl9nZXRfcGRhdGEoYXJpem9uYSwgJmNvbmZpZyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCiAJaWYgKGFyaXpvbmEtPnBkYXRhLm1pY3ZkZCkKIAkJY29uZmlnLmluaXRfZGF0YSA9IGFyaXpvbmEtPnBkYXRhLm1pY3ZkZDsKIAllbHNlCkBAIC0yNTMsNiArMjg5LDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlvZl9ub2RlX3B1dChjb25maWcub2Zfbm9kZSk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtaWNzdXBwKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYXhwMjB4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYXhwMjB4LXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNGFhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9heHAyMHgtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBBWFAyMHggcmVndWxhdG9ycyBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENhcmxvIENhaW9uZSA8Y2FybG9AY2Fpb25lLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2F4cDIweC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmg+CisKKyNkZWZpbmUgQVhQMjBYX0lPX0VOQUJMRUQJCTB4MDMKKyNkZWZpbmUgQVhQMjBYX0lPX0RJU0FCTEVECQkweDA3CisKKyNkZWZpbmUgQVhQMjBYX1dPUktNT0RFX0RDREMyX01BU0sJQklUKDIpCisjZGVmaW5lIEFYUDIwWF9XT1JLTU9ERV9EQ0RDM19NQVNLCUJJVCgxKQorCisjZGVmaW5lIEFYUDIwWF9GUkVRX0RDRENfTUFTSwkJMHgwZgorCisjZGVmaW5lIEFYUDIwWF9ERVNDX0lPKF9pZCwgX3N1cHBseSwgX21pbiwgX21heCwgX3N0ZXAsIF92cmVnLCBfdm1hc2ssIF9lcmVnLCAgIFwKKwkJICAgICAgIF9lbWFzaywgX2VuYWJsZV92YWwsIF9kaXNhYmxlX3ZhbCkJCQlcCisJW0FYUDIwWF8jI19pZF0gPSB7CQkJCQkJCVwKKwkJLm5hbWUJCT0gI19pZCwJCQkJCQlcCisJCS5zdXBwbHlfbmFtZQk9IChfc3VwcGx5KSwJCQkJCVwKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKKwkJLmlkCQk9IEFYUDIwWF8jI19pZCwJCQkJCVwKKwkJLm5fdm9sdGFnZXMJPSAoKChfbWF4KSAtIChfbWluKSkgLyAoX3N0ZXApICsgMSksCQlcCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQkJCVwKKwkJLm1pbl91VgkJPSAoX21pbikgKiAxMDAwLAkJCQlcCisJCS51Vl9zdGVwCT0gKF9zdGVwKSAqIDEwMDAsCQkJCVwKKwkJLnZzZWxfcmVnCT0gKF92cmVnKSwJCQkJCVwKKwkJLnZzZWxfbWFzawk9IChfdm1hc2spLAkJCQkJXAorCQkuZW5hYmxlX3JlZwk9IChfZXJlZyksCQkJCQlcCisJCS5lbmFibGVfbWFzawk9IChfZW1hc2spLAkJCQkJXAorCQkuZW5hYmxlX3ZhbAk9IChfZW5hYmxlX3ZhbCksCQkJCVwKKwkJLmRpc2FibGVfdmFsCT0gKF9kaXNhYmxlX3ZhbCksCQkJCVwKKwkJLm9wcwkJPSAmYXhwMjB4X29wcywJCQkJCVwKKwl9CisKKyNkZWZpbmUgQVhQMjBYX0RFU0MoX2lkLCBfc3VwcGx5LCBfbWluLCBfbWF4LCBfc3RlcCwgX3ZyZWcsIF92bWFzaywgX2VyZWcsCVwKKwkJICAgIF9lbWFzaykgCQkJCQkJCVwKKwlbQVhQMjBYXyMjX2lkXSA9IHsJCQkJCQkJXAorCQkubmFtZQkJPSAjX2lkLAkJCQkJCVwKKwkJLnN1cHBseV9uYW1lCT0gKF9zdXBwbHkpLAkJCQkJXAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXAorCQkuaWQJCT0gQVhQMjBYXyMjX2lkLAkJCQkJXAorCQkubl92b2x0YWdlcwk9ICgoKF9tYXgpIC0gKF9taW4pKSAvIChfc3RlcCkgKyAxKSwJCVwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQkJXAorCQkubWluX3VWCQk9IChfbWluKSAqIDEwMDAsCQkJCVwKKwkJLnVWX3N0ZXAJPSAoX3N0ZXApICogMTAwMCwJCQkJXAorCQkudnNlbF9yZWcJPSAoX3ZyZWcpLAkJCQkJXAorCQkudnNlbF9tYXNrCT0gKF92bWFzayksCQkJCQlcCisJCS5lbmFibGVfcmVnCT0gKF9lcmVnKSwJCQkJCVwKKwkJLmVuYWJsZV9tYXNrCT0gKF9lbWFzayksCQkJCQlcCisJCS5vcHMJCT0gJmF4cDIweF9vcHMsCQkJCQlcCisJfQorCisjZGVmaW5lIEFYUDIwWF9ERVNDX0ZJWEVEKF9pZCwgX3N1cHBseSwgX3ZvbHQpCQkJCQlcCisJW0FYUDIwWF8jI19pZF0gPSB7CQkJCQkJCVwKKwkJLm5hbWUJCT0gI19pZCwJCQkJCQlcCisJCS5zdXBwbHlfbmFtZQk9IChfc3VwcGx5KSwJCQkJCVwKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKKwkJLmlkCQk9IEFYUDIwWF8jI19pZCwJCQkJCVwKKwkJLm5fdm9sdGFnZXMJPSAxLAkJCQkJCVwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQkJXAorCQkubWluX3VWCQk9IChfdm9sdCkgKiAxMDAwLAkJCQlcCisJCS5vcHMJCT0gJmF4cDIweF9vcHNfZml4ZWQJCQkJXAorCX0KKworI2RlZmluZSBBWFAyMFhfREVTQ19UQUJMRShfaWQsIF9zdXBwbHksIF90YWJsZSwgX3ZyZWcsIF92bWFzaywgX2VyZWcsIF9lbWFzaykJXAorCVtBWFAyMFhfIyNfaWRdID0gewkJCQkJCQlcCisJCS5uYW1lCQk9ICNfaWQsCQkJCQkJXAorCQkuc3VwcGx5X25hbWUJPSAoX3N1cHBseSksCQkJCQlcCisJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCisJCS5pZAkJPSBBWFAyMFhfIyNfaWQsCQkJCQlcCisJCS5uX3ZvbHRhZ2VzCT0gQVJSQVlfU0laRShfdGFibGUpLAkJCQlcCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQkJCVwKKwkJLnZzZWxfcmVnCT0gKF92cmVnKSwJCQkJCVwKKwkJLnZzZWxfbWFzawk9IChfdm1hc2spLAkJCQkJXAorCQkuZW5hYmxlX3JlZwk9IChfZXJlZyksCQkJCQlcCisJCS5lbmFibGVfbWFzawk9IChfZW1hc2spLAkJCQkJXAorCQkudm9sdF90YWJsZQk9IChfdGFibGUpLAkJCQkJXAorCQkub3BzCQk9ICZheHAyMHhfb3BzX3RhYmxlLAkJCQlcCisJfQorCitzdGF0aWMgY29uc3QgaW50IGF4cDIweF9sZG80X2RhdGFbXSA9IHsgMTI1MDAwMCwgMTMwMDAwMCwgMTQwMDAwMCwgMTUwMDAwMCwgMTYwMDAwMCwKKwkJCQkJMTcwMDAwMCwgMTgwMDAwMCwgMTkwMDAwMCwgMjAwMDAwMCwgMjUwMDAwMCwKKwkJCQkJMjcwMDAwMCwgMjgwMDAwMCwgMzAwMDAwMCwgMzEwMDAwMCwgMzIwMDAwMCwKKwkJCQkJMzMwMDAwMCB9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgYXhwMjB4X29wc19maXhlZCA9IHsKKwkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGF4cDIweF9vcHNfdGFibGUgPSB7CisJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5nZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfdGFibGUsCisJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9hc2NlbmQsCisJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBheHAyMHhfb3BzID0geworCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKKwkuZW5hYmxlCQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBheHAyMHhfcmVndWxhdG9yc1tdID0geworCUFYUDIwWF9ERVNDKERDREMyLCAidmluMiIsIDcwMCwgMjI3NSwgMjUsIEFYUDIwWF9EQ0RDMl9WX09VVCwgMHgzZiwKKwkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MTApLAorCUFYUDIwWF9ERVNDKERDREMzLCAidmluMyIsIDcwMCwgMzUwMCwgMjUsIEFYUDIwWF9EQ0RDM19WX09VVCwgMHg3ZiwKKwkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MDIpLAorCUFYUDIwWF9ERVNDX0ZJWEVEKExETzEsICJhY2luIiwgMTMwMCksCisJQVhQMjBYX0RFU0MoTERPMiwgImxkbzI0aW4iLCAxODAwLCAzMzAwLCAxMDAsIEFYUDIwWF9MRE8yNF9WX09VVCwgMHhmMCwKKwkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MDQpLAorCUFYUDIwWF9ERVNDKExETzMsICJsZG8zaW4iLCA3MDAsIDM1MDAsIDI1LCBBWFAyMFhfTERPM19WX09VVCwgMHg3ZiwKKwkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4NDApLAorCUFYUDIwWF9ERVNDX1RBQkxFKExETzQsICJsZG8yNGluIiwgYXhwMjB4X2xkbzRfZGF0YSwgQVhQMjBYX0xETzI0X1ZfT1VULCAweDBmLAorCQkJICBBWFAyMFhfUFdSX09VVF9DVFJMLCAweDA4KSwKKwlBWFAyMFhfREVTQ19JTyhMRE81LCAibGRvNWluIiwgMTgwMCwgMzMwMCwgMTAwLCBBWFAyMFhfTERPNV9WX09VVCwgMHhmMCwKKwkJICAgICAgIEFYUDIwWF9HUElPMF9DVFJMLCAweDA3LCBBWFAyMFhfSU9fRU5BQkxFRCwKKwkJICAgICAgIEFYUDIwWF9JT19ESVNBQkxFRCksCit9OworCisjZGVmaW5lIEFYUF9NQVRDSChfbmFtZSwgX2lkKSBcCisJW0FYUDIwWF8jI19pZF0gPSB7IFwKKwkJLm5hbWUJCT0gI19uYW1lLCBcCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopICZheHAyMHhfcmVndWxhdG9yc1tBWFAyMFhfIyNfaWRdLCBcCisJfQorCitzdGF0aWMgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBheHAyMHhfbWF0Y2hlc1tdID0geworCUFYUF9NQVRDSChkY2RjMiwgRENEQzIpLAorCUFYUF9NQVRDSChkY2RjMywgRENEQzMpLAorCUFYUF9NQVRDSChsZG8xLCBMRE8xKSwKKwlBWFBfTUFUQ0gobGRvMiwgTERPMiksCisJQVhQX01BVENIKGxkbzMsIExETzMpLAorCUFYUF9NQVRDSChsZG80LCBMRE80KSwKKwlBWFBfTUFUQ0gobGRvNSwgTERPNSksCit9OworCitzdGF0aWMgaW50IGF4cDIweF9zZXRfZGNkY19mcmVxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUzMiBkY2RjZnJlcSkKK3sKKwlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCisJaWYgKGRjZGNmcmVxIDwgNzUwKSB7CisJCWRjZGNmcmVxID0gNzUwOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRENEQyBmcmVxdWVuY3kgdG9vIGxvdy4gU2V0IHRvIDc1MGtIelxuIik7CisJfQorCisJaWYgKGRjZGNmcmVxID4gMTg3NSkgeworCQlkY2RjZnJlcSA9IDE4NzU7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJEQ0RDIGZyZXF1ZW5jeSB0b28gaGlnaC4gU2V0IHRvIDE4NzVrSHpcbiIpOworCX0KKworCWRjZGNmcmVxID0gKGRjZGNmcmVxIC0gNzUwKSAvIDc1OworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhheHAyMHgtPnJlZ21hcCwgQVhQMjBYX0RDRENfRlJFUSwKKwkJCQkgIEFYUDIwWF9GUkVRX0RDRENfTUFTSywgZGNkY2ZyZXEpOworfQorCitzdGF0aWMgaW50IGF4cDIweF9yZWd1bGF0b3JfcGFyc2VfZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqcmVndWxhdG9yczsKKwlpbnQgcmV0OworCXUzMiBkY2RjZnJlcTsKKworCW5wID0gb2Zfbm9kZV9nZXQocGRldi0+ZGV2LnBhcmVudC0+b2Zfbm9kZSk7CisJaWYgKCFucCkKKwkJcmV0dXJuIDA7CisKKwlyZWd1bGF0b3JzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICJyZWd1bGF0b3JzIik7CisJaWYgKCFyZWd1bGF0b3JzKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJyZWd1bGF0b3JzIG5vZGUgbm90IGZvdW5kXG4iKTsKKwl9IGVsc2UgeworCQlyZXQgPSBvZl9yZWd1bGF0b3JfbWF0Y2goJnBkZXYtPmRldiwgcmVndWxhdG9ycywgYXhwMjB4X21hdGNoZXMsCisJCQkJCSBBUlJBWV9TSVpFKGF4cDIweF9tYXRjaGVzKSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBwYXJzaW5nIHJlZ3VsYXRvciBpbml0IGRhdGE6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRjZGNmcmVxID0gMTUwMDsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIocmVndWxhdG9ycywgIngtcG93ZXJzLGRjZGMtZnJlcSIsICZkY2RjZnJlcSk7CisJCXJldCA9IGF4cDIweF9zZXRfZGNkY19mcmVxKHBkZXYsIGRjZGNmcmVxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHNldHRpbmcgZGNkYyBmcmVxdWVuY3k6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnMpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF4cDIweF9zZXRfZGNkY193b3JrbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IGlkLCB1MzIgd29ya21vZGUpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSBBWFAyMFhfV09SS01PREVfRENEQzJfTUFTSzsKKworCWlmICgoaWQgIT0gQVhQMjBYX0RDREMyKSAmJiAoaWQgIT0gQVhQMjBYX0RDREMzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaWQgPT0gQVhQMjBYX0RDREMzKQorCQltYXNrID0gQVhQMjBYX1dPUktNT0RFX0RDREMzX01BU0s7CisKKwl3b3JrbW9kZSA8PD0gZmZzKG1hc2spIC0gMTsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCBBWFAyMFhfRENEQ19NT0RFLCBtYXNrLCB3b3JrbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjB4X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCXN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0geyB9OworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CisJaW50IHJldCwgaTsKKwl1MzIgd29ya21vZGU7CisKKwlyZXQgPSBheHAyMHhfcmVndWxhdG9yX3BhcnNlX2R0KHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVhQMjBYX1JFR19JRF9NQVg7IGkrKykgeworCQlpbml0X2RhdGEgPSBheHAyMHhfbWF0Y2hlc1tpXS5pbml0X2RhdGE7CisKKwkJY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7CisJCWNvbmZpZy5pbml0X2RhdGEgPSBpbml0X2RhdGE7CisJCWNvbmZpZy5yZWdtYXAgPSBheHAyMHgtPnJlZ21hcDsKKwkJY29uZmlnLm9mX25vZGUgPSBheHAyMHhfbWF0Y2hlc1tpXS5vZl9ub2RlOworCisJCXJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmYXhwMjB4X3JlZ3VsYXRvcnNbaV0sCisJCQkJCSAgICAgICAmY29uZmlnKTsKKwkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLAorCQkJCWF4cDIweF9yZWd1bGF0b3JzW2ldLm5hbWUpOworCisJCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJfQorCisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGF4cDIweF9tYXRjaGVzW2ldLm9mX25vZGUsICJ4LXBvd2VycyxkY2RjLXdvcmttb2RlIiwKKwkJCQkJICAgJndvcmttb2RlKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChheHAyMHhfc2V0X2RjZGNfd29ya21vZGUocmRldiwgaSwgd29ya21vZGUpKQorCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgd29ya21vZGUgb24gJXNcbiIsCisJCQkJCWF4cDIweF9yZWd1bGF0b3JzW2ldLm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF4cDIweF9yZWd1bGF0b3JfZHJpdmVyID0geworCS5wcm9iZQk9IGF4cDIweF9yZWd1bGF0b3JfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJCT0gImF4cDIweC1yZWd1bGF0b3IiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXhwMjB4X3JlZ3VsYXRvcl9kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJDYXJsbyBDYWlvbmUgPGNhcmxvQGNhaW9uZS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBEcml2ZXIgZm9yIEFYUDIwWCBQTUlDIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9iY201OTB4eC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2JjbTU5MHh4LXJlZ3VsYXRvci5jCmluZGV4IGMzNzUwYzUuLjU3NTQ0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2JjbTU5MHh4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2JjbTU5MHh4LXJlZ3VsYXRvci5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotLyogUmVnaXN0ZXIgZGVmcyAqLworLyogSTJDIHNsYXZlIDAgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEJDTTU5MFhYX1JGTERPUE1DVFJMMQkweDYwCiAjZGVmaW5lIEJDTTU5MFhYX0lPU1IxUE1DVFJMMQkweDdhCiAjZGVmaW5lIEJDTTU5MFhYX0lPU1IyUE1DVFJMMQkweDdjCkBAIC0zMSwxMyArMzEsMzQgQEAKICNkZWZpbmUgQkNNNTkwWFhfU0RTUjJQTUNUUkwxCTB4ODYKICNkZWZpbmUgQkNNNTkwWFhfTVNSUE1DVFJMMQkweDhhCiAjZGVmaW5lIEJDTTU5MFhYX1ZTUlBNQ1RSTDEJMHg4ZQotI2RlZmluZSBCQ001OTBYWF9SRUdfRU5BQkxFCUJJVCg3KQotCiAjZGVmaW5lIEJDTTU5MFhYX1JGTERPQ1RSTAkweDk2CiAjZGVmaW5lIEJDTTU5MFhYX0NTUlZPVVQxCTB4YzAKKworLyogSTJDIHNsYXZlIDEgcmVnaXN0ZXJzICovCisjZGVmaW5lIEJDTTU5MFhYX0dQTERPNVBNQ1RSTDEJMHgxNgorI2RlZmluZSBCQ001OTBYWF9HUExETzZQTUNUUkwxCTB4MTgKKyNkZWZpbmUgQkNNNTkwWFhfR1BMRE8xQ1RSTAkweDFhCisjZGVmaW5lIEJDTTU5MFhYX0dQTERPMkNUUkwJMHgxYgorI2RlZmluZSBCQ001OTBYWF9HUExETzNDVFJMCTB4MWMKKyNkZWZpbmUgQkNNNTkwWFhfR1BMRE80Q1RSTAkweDFkCisjZGVmaW5lIEJDTTU5MFhYX0dQTERPNUNUUkwJMHgxZQorI2RlZmluZSBCQ001OTBYWF9HUExETzZDVFJMCTB4MWYKKyNkZWZpbmUgQkNNNTkwWFhfT1RHX0NUUkwJMHg0MAorI2RlZmluZSBCQ001OTBYWF9HUExETzFQTUNUUkwxCTB4NTcKKyNkZWZpbmUgQkNNNTkwWFhfR1BMRE8yUE1DVFJMMQkweDU5CisjZGVmaW5lIEJDTTU5MFhYX0dQTERPM1BNQ1RSTDEJMHg1YgorI2RlZmluZSBCQ001OTBYWF9HUExETzRQTUNUUkwxCTB4NWQKKworI2RlZmluZSBCQ001OTBYWF9SRUdfRU5BQkxFCUJJVCg3KQorI2RlZmluZSBCQ001OTBYWF9WQlVTX0VOQUJMRQlCSVQoMikKICNkZWZpbmUgQkNNNTkwWFhfTERPX1ZTRUxfTUFTSwlHRU5NQVNLKDUsIDMpCiAjZGVmaW5lIEJDTTU5MFhYX1NSX1ZTRUxfTUFTSwlHRU5NQVNLKDUsIDApCiAKKy8qCisgKiBSRkxETyB0byBWU1IgcmVndWxhdG9ycyBhcmUKKyAqIGFjY2Vzc2VkIHZpYSBJMkMgc2xhdmUgMAorICovCisKIC8qIExETyByZWd1bGF0b3IgSURzICovCiAjZGVmaW5lIEJDTTU5MFhYX1JFR19SRkxETwkwCiAjZGVmaW5lIEJDTTU5MFhYX1JFR19DQU1MRE8xCTEKQEAgLTYyLDkgKzgzLDI1IEBACiAjZGVmaW5lIEJDTTU5MFhYX1JFR19TRFNSMgkxOAogI2RlZmluZSBCQ001OTBYWF9SRUdfVlNSCTE5CiAKLSNkZWZpbmUgQkNNNTkwWFhfTlVNX1JFR1MJMjAKKy8qCisgKiBHUExETzEgdG8gVkJVUyByZWd1bGF0b3JzIGFyZQorICogYWNjZXNzZWQgdmlhIEkyQyBzbGF2ZSAxCisgKi8KKworI2RlZmluZSBCQ001OTBYWF9SRUdfR1BMRE8xCTIwCisjZGVmaW5lIEJDTTU5MFhYX1JFR19HUExETzIJMjEKKyNkZWZpbmUgQkNNNTkwWFhfUkVHX0dQTERPMwkyMgorI2RlZmluZSBCQ001OTBYWF9SRUdfR1BMRE80CTIzCisjZGVmaW5lIEJDTTU5MFhYX1JFR19HUExETzUJMjQKKyNkZWZpbmUgQkNNNTkwWFhfUkVHX0dQTERPNgkyNQorI2RlZmluZSBCQ001OTBYWF9SRUdfVkJVUwkyNgorCisjZGVmaW5lIEJDTTU5MFhYX05VTV9SRUdTCTI3CiAKICNkZWZpbmUgQkNNNTkwWFhfUkVHX0lTX0xETyhuKQkobiA8IEJDTTU5MFhYX1JFR19DU1IpCisjZGVmaW5lIEJDTTU5MFhYX1JFR19JU19HUExETyhuKSBcCisJKChuID4gQkNNNTkwWFhfUkVHX1ZTUikgJiYgKG4gPCBCQ001OTBYWF9SRUdfVkJVUykpCisjZGVmaW5lIEJDTTU5MFhYX1JFR19JU19WQlVTKG4pCShuID09IEJDTTU5MFhYX1JFR19WQlVTKQogCiBzdHJ1Y3QgYmNtNTkweHhfYm9hcmQgewogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpiY201OTB4eF9wbXVfaW5pdF9kYXRhW0JDTTU5MFhYX05VTV9SRUdTXTsKQEAgLTE0OSw2ICsxODYsMTIgQEAKIAlCQ001OTBYWF9SRUdfUkFOR0VTKHNkc3IxLCBkY2RjX3Nkc3IxX3JhbmdlcyksCiAJQkNNNTkwWFhfUkVHX1JBTkdFUyhzZHNyMiwgZGNkY19pb3NyMV9yYW5nZXMpLAogCUJDTTU5MFhYX1JFR19SQU5HRVModnNyLCBkY2RjX2lvc3IxX3JhbmdlcyksCisJQkNNNTkwWFhfUkVHX1RBQkxFKGdwbGRvMSwgbGRvX2FfdGFibGUpLAorCUJDTTU5MFhYX1JFR19UQUJMRShncGxkbzIsIGxkb19hX3RhYmxlKSwKKwlCQ001OTBYWF9SRUdfVEFCTEUoZ3BsZG8zLCBsZG9fYV90YWJsZSksCisJQkNNNTkwWFhfUkVHX1RBQkxFKGdwbGRvNCwgbGRvX2FfdGFibGUpLAorCUJDTTU5MFhYX1JFR19UQUJMRShncGxkbzUsIGxkb19hX3RhYmxlKSwKKwlCQ001OTBYWF9SRUdfVEFCTEUoZ3BsZG82LCBsZG9fYV90YWJsZSksCiB9OwogCiBzdHJ1Y3QgYmNtNTkweHhfcmVnIHsKQEAgLTE2MSw2ICsyMDQsOCBAQAogewogCWlmIChCQ001OTBYWF9SRUdfSVNfTERPKGlkKSkKIAkJcmV0dXJuIEJDTTU5MFhYX1JGTERPQ1RSTCArIGlkOworCWVsc2UgaWYgKEJDTTU5MFhYX1JFR19JU19HUExETyhpZCkpCisJCXJldHVybiBCQ001OTBYWF9HUExETzFDVFJMICsgaWQ7CiAJZWxzZQogCQlyZXR1cm4gQkNNNTkwWFhfQ1NSVk9VVDEgKyAoaWQgLSBCQ001OTBYWF9SRUdfQ1NSKSAqIDM7CiB9CkBAIC0xNzEsNiArMjE2LDggQEAKIAogCWlmIChCQ001OTBYWF9SRUdfSVNfTERPKGlkKSkKIAkJcmVnID0gQkNNNTkwWFhfUkZMRE9QTUNUUkwxICsgaWQgKiAyOworCWVsc2UgaWYgKEJDTTU5MFhYX1JFR19JU19HUExETyhpZCkpCisJCXJlZyA9IEJDTTU5MFhYX0dQTERPMVBNQ1RSTDEgKyBpZCAqIDI7CiAJZWxzZQogCQlzd2l0Y2ggKGlkKSB7CiAJCWNhc2UgQkNNNTkwWFhfUkVHX0NTUjoKQEAgLTE5MSw4ICsyMzgsMTEgQEAKIAkJY2FzZSBCQ001OTBYWF9SRUdfU0RTUjI6CiAJCQlyZWcgPSBCQ001OTBYWF9TRFNSMlBNQ1RSTDE7CiAJCQlicmVhazsKKwkJY2FzZSBCQ001OTBYWF9SRUdfVkJVUzoKKwkJCXJlZyA9IEJDTTU5MFhYX09UR19DVFJMOwogCQl9OwogCisKIAlyZXR1cm4gcmVnOwogfQogCkBAIC0yMTYsNiArMjY2LDEyIEBACiAJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXJfcmFuZ2UsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgYmNtNTkweHhfb3BzX3ZidXMgPSB7CisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUJCQk9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlCQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKK307CisKICNkZWZpbmUgQkNNNTkwWFhfTUFUQ0goX25hbWUsIF9pZCkgXAogCXsgXAogCQkubmFtZSA9ICNfbmFtZSwgXApAQCAtMjQzLDYgKzI5OSwxMyBAQAogCUJDTTU5MFhYX01BVENIKHNkc3IxLCBTRFNSMSksCiAJQkNNNTkwWFhfTUFUQ0goc2RzcjIsIFNEU1IyKSwKIAlCQ001OTBYWF9NQVRDSCh2c3IsIFZTUiksCisJQkNNNTkwWFhfTUFUQ0goZ3BsZG8xLCBHUExETzEpLAorCUJDTTU5MFhYX01BVENIKGdwbGRvMiwgR1BMRE8yKSwKKwlCQ001OTBYWF9NQVRDSChncGxkbzMsIEdQTERPMyksCisJQkNNNTkwWFhfTUFUQ0goZ3BsZG80LCBHUExETzQpLAorCUJDTTU5MFhYX01BVENIKGdwbGRvNSwgR1BMRE81KSwKKwlCQ001OTBYWF9NQVRDSChncGxkbzYsIEdQTERPNiksCisJQkNNNTkwWFhfTUFUQ0godmJ1cywgVkJVUyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGJjbTU5MHh4X2JvYXJkICpiY201OTB4eF9wYXJzZV9kdF9yZWdfZGF0YSgKQEAgLTM1MywxNyArNDE2LDIzIEBACiAJCXBtdS0+ZGVzY1tpXS5saW5lYXJfcmFuZ2VzID0gaW5mby0+bGluZWFyX3JhbmdlczsKIAkJcG11LT5kZXNjW2ldLm5fbGluZWFyX3JhbmdlcyA9IGluZm8tPm5fbGluZWFyX3JhbmdlczsKIAotCQlpZiAoQkNNNTkwWFhfUkVHX0lTX0xETyhpKSkgeworCQlpZiAoKEJDTTU5MFhYX1JFR19JU19MRE8oaSkpIHx8IChCQ001OTBYWF9SRUdfSVNfR1BMRE8oaSkpKSB7CiAJCQlwbXUtPmRlc2NbaV0ub3BzID0gJmJjbTU5MHh4X29wc19sZG87CiAJCQlwbXUtPmRlc2NbaV0udnNlbF9tYXNrID0gQkNNNTkwWFhfTERPX1ZTRUxfTUFTSzsKLQkJfSBlbHNlIHsKKwkJfSBlbHNlIGlmIChCQ001OTBYWF9SRUdfSVNfVkJVUyhpKSkKKwkJCXBtdS0+ZGVzY1tpXS5vcHMgPSAmYmNtNTkweHhfb3BzX3ZidXM7CisJCWVsc2UgewogCQkJcG11LT5kZXNjW2ldLm9wcyA9ICZiY201OTB4eF9vcHNfZGNkYzsKIAkJCXBtdS0+ZGVzY1tpXS52c2VsX21hc2sgPSBCQ001OTBYWF9TUl9WU0VMX01BU0s7CiAJCX0KIAotCQlwbXUtPmRlc2NbaV0udnNlbF9yZWcgPSBiY201OTB4eF9nZXRfdnNlbF9yZWdpc3RlcihpKTsKLQkJcG11LT5kZXNjW2ldLmVuYWJsZV9pc19pbnZlcnRlZCA9IHRydWU7Ci0JCXBtdS0+ZGVzY1tpXS5lbmFibGVfbWFzayA9IEJDTTU5MFhYX1JFR19FTkFCTEU7CisJCWlmIChCQ001OTBYWF9SRUdfSVNfVkJVUyhpKSkKKwkJCXBtdS0+ZGVzY1tpXS5lbmFibGVfbWFzayA9IEJDTTU5MFhYX1ZCVVNfRU5BQkxFOworCQllbHNlIHsKKwkJCXBtdS0+ZGVzY1tpXS52c2VsX3JlZyA9IGJjbTU5MHh4X2dldF92c2VsX3JlZ2lzdGVyKGkpOworCQkJcG11LT5kZXNjW2ldLmVuYWJsZV9pc19pbnZlcnRlZCA9IHRydWU7CisJCQlwbXUtPmRlc2NbaV0uZW5hYmxlX21hc2sgPSBCQ001OTBYWF9SRUdfRU5BQkxFOworCQl9CiAJCXBtdS0+ZGVzY1tpXS5lbmFibGVfcmVnID0gYmNtNTkweHhfZ2V0X2VuYWJsZV9yZWdpc3RlcihpKTsKIAkJcG11LT5kZXNjW2ldLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKIAkJcG11LT5kZXNjW2ldLm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC0zNzEsNyArNDQwLDEwIEBACiAJCWNvbmZpZy5kZXYgPSBiY201OTB4eC0+ZGV2OwogCQljb25maWcuaW5pdF9kYXRhID0gcmVnX2RhdGE7CiAJCWNvbmZpZy5kcml2ZXJfZGF0YSA9IHBtdTsKLQkJY29uZmlnLnJlZ21hcCA9IGJjbTU5MHh4LT5yZWdtYXA7CisJCWlmIChCQ001OTBYWF9SRUdfSVNfR1BMRE8oaSkgfHwgQkNNNTkwWFhfUkVHX0lTX1ZCVVMoaSkpCisJCQljb25maWcucmVnbWFwID0gYmNtNTkweHgtPnJlZ21hcF9zZWM7CisJCWVsc2UKKwkJCWNvbmZpZy5yZWdtYXAgPSBiY201OTB4eC0+cmVnbWFwX3ByaTsKIAogCQlpZiAoYmNtNTkweHhfcmVnX21hdGNoZXMpCiAJCQljb25maWcub2Zfbm9kZSA9IGJjbTU5MHh4X3JlZ19tYXRjaGVzW2ldLm9mX25vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggOWEwOWYzYy4uNGMxZjk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtODQ0LDEzICs4NDQsMjIgQEAKIAkvKiBkbyB3ZSBuZWVkIHRvIGFwcGx5IHRoZSBjb25zdHJhaW50IHZvbHRhZ2UgKi8KIAlpZiAocmRldi0+Y29uc3RyYWludHMtPmFwcGx5X3VWICYmCiAJICAgIHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYgPT0gcmRldi0+Y29uc3RyYWludHMtPm1heF91VikgewotCQlyZXQgPSBfcmVndWxhdG9yX2RvX3NldF92b2x0YWdlKHJkZXYsCi0JCQkJCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLAotCQkJCQkJcmRldi0+Y29uc3RyYWludHMtPm1heF91Vik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIGFwcGx5ICVkdVYgY29uc3RyYWludFxuIiwKLQkJCQkgcmRldi0+Y29uc3RyYWludHMtPm1pbl91Vik7Ci0JCQlyZXR1cm4gcmV0OworCQlpbnQgY3VycmVudF91ViA9IF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocmRldik7CisJCWlmIChjdXJyZW50X3VWIDwgMCkgeworCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgdm9sdGFnZVxuIik7CisJCQlyZXR1cm4gY3VycmVudF91VjsKKwkJfQorCQlpZiAoY3VycmVudF91ViA8IHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYgfHwKKwkJICAgIGN1cnJlbnRfdVYgPiByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKSB7CisJCQlyZXQgPSBfcmVndWxhdG9yX2RvX3NldF92b2x0YWdlKAorCQkJCXJkZXYsIHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYsCisJCQkJcmRldi0+Y29uc3RyYWludHMtPm1heF91Vik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXJkZXZfZXJyKHJkZXYsCisJCQkJCSJmYWlsZWQgdG8gYXBwbHkgJWR1ViBjb25zdHJhaW50XG4iLAorCQkJCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAJfQogCkBAIC0xNDMwLDkgKzE0MzksOSBAQAogICoKICAqIFJldHVybnMgYSBzdHJ1Y3QgcmVndWxhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ3VsYXRvciBwcm9kdWNlciwKICAqIG9yIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgT3RoZXIgY29uc3VtZXJzIHdpbGwgYmUKLSAqIHVuYWJsZSB0byBvYnRhaW4gdGhpcyByZWZlcmVuY2UgaXMgaGVsZCBhbmQgdGhlIHVzZSBjb3VudCBmb3IgdGhlCi0gKiByZWd1bGF0b3Igd2lsbCBiZSBpbml0aWFsaXNlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQotICogcmVndWxhdG9yLgorICogdW5hYmxlIHRvIG9idGFpbiB0aGlzIHJlZ3VsYXRvciB3aGlsZSB0aGlzIHJlZmVyZW5jZSBpcyBoZWxkIGFuZCB0aGUKKyAqIHVzZSBjb3VudCBmb3IgdGhlIHJlZ3VsYXRvciB3aWxsIGJlIGluaXRpYWxpc2VkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKKyAqIHN0YXRlIG9mIHRoZSByZWd1bGF0b3IuCiAgKgogICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IGNvbnN1bWVycyB3aGljaCBjYW5ub3QgdG9sZXJhdGUgc2hhcmVkCiAgKiB1c2Ugb2YgdGhlIHJlZ3VsYXRvciBzdWNoIGFzIHRob3NlIHdoaWNoIG5lZWQgdG8gZm9yY2UgdGhlCkBAIC0xNDU2LDEwICsxNDY1LDcgQEAKICAqIEBpZDogU3VwcGx5IG5hbWUgb3IgcmVndWxhdG9yIElELgogICoKICAqIFJldHVybnMgYSBzdHJ1Y3QgcmVndWxhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ3VsYXRvciBwcm9kdWNlciwKLSAqIG9yIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgT3RoZXIgY29uc3VtZXJzIHdpbGwgYmUKLSAqIHVuYWJsZSB0byBvYnRhaW4gdGhpcyByZWZlcmVuY2UgaXMgaGVsZCBhbmQgdGhlIHVzZSBjb3VudCBmb3IgdGhlCi0gKiByZWd1bGF0b3Igd2lsbCBiZSBpbml0aWFsaXNlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQotICogcmVndWxhdG9yLgorICogb3IgSVNfRVJSKCkgY29uZGl0aW9uIGNvbnRhaW5pbmcgZXJybm8uCiAgKgogICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IGNvbnN1bWVycyBmb3IgZGV2aWNlcyB3aGljaCBjYW4gaGF2ZQogICogc29tZSBzdXBwbGllcyB1bmNvbm5lY3RlZCBpbiBub3JtYWwgdXNlLCBzdWNoIGFzIHNvbWUgTU1DIGRldmljZXMuCkBAIC0xNTk3LDkgKzE2MDMsMTAgQEAKICAqIHJlZ2lzdGVyZWQgYW55IGFsaWFzZXMgdGhhdCB3ZXJlIHJlZ2lzdGVyZWQgd2lsbCBiZSByZW1vdmVkCiAgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIuCiAgKi8KLWludCByZWd1bGF0b3JfYnVsa19yZWdpc3Rlcl9zdXBwbHlfYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICoqaWQsCitpbnQgcmVndWxhdG9yX2J1bGtfcmVnaXN0ZXJfc3VwcGx5X2FsaWFzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIGNvbnN0IGNoYXIgKmNvbnN0ICppZCwKIAkJCQkJIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwKLQkJCQkJIGNvbnN0IGNoYXIgKiphbGlhc19pZCwKKwkJCQkJIGNvbnN0IGNoYXIgKmNvbnN0ICphbGlhc19pZCwKIAkJCQkJIGludCBudW1faWQpCiB7CiAJaW50IGk7CkBAIC0xNjM3LDcgKzE2NDQsNyBAQAogICogYWxpYXNlcyBpbiBvbmUgb3BlcmF0aW9uLgogICovCiB2b2lkIHJlZ3VsYXRvcl9idWxrX3VucmVnaXN0ZXJfc3VwcGx5X2FsaWFzKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKippZCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmNvbnN0ICppZCwKIAkJCQkJICAgIGludCBudW1faWQpCiB7CiAJaW50IGk7CkBAIC0yMzIxLDYgKzIzMjgsMTAgQEAKIAkJCSAgICByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhcikKIAkJCQlyZXQgPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyKHJkZXYsCiAJCQkJCQkJCW1pbl91ViwgbWF4X3VWKTsKKwkJCWVsc2UgaWYgKHJkZXYtPmRlc2MtPm9wcy0+bGlzdF92b2x0YWdlID09CisJCQkJIHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyX3JhbmdlKQorCQkJCXJldCA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXJfcmFuZ2UocmRldiwKKwkJCQkJCQkJbWluX3VWLCBtYXhfdVYpOwogCQkJZWxzZQogCQkJCXJldCA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9pdGVyYXRlKHJkZXYsCiAJCQkJCQkJCW1pbl91ViwgbWF4X3VWKTsKQEAgLTM0NDcsNyArMzQ1OCw3IEBACiAKIAkvKiByZWdpc3RlciB3aXRoIHN5c2ZzICovCiAJcmRldi0+ZGV2LmNsYXNzID0gJnJlZ3VsYXRvcl9jbGFzczsKLQlyZGV2LT5kZXYub2Zfbm9kZSA9IGNvbmZpZy0+b2Zfbm9kZTsKKwlyZGV2LT5kZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KGNvbmZpZy0+b2Zfbm9kZSk7CiAJcmRldi0+ZGV2LnBhcmVudCA9IGRldjsKIAlkZXZfc2V0X25hbWUoJnJkZXYtPmRldiwgInJlZ3VsYXRvci4lZCIsCiAJCSAgICAgYXRvbWljX2luY19yZXR1cm4oJnJlZ3VsYXRvcl9ubykgLSAxKTsKQEAgLTM1ODksNiArMzYwMCw3IEBACiAJbGlzdF9kZWwoJnJkZXYtPmxpc3QpOwogCWtmcmVlKHJkZXYtPmNvbnN0cmFpbnRzKTsKIAlyZWd1bGF0b3JfZW5hX2dwaW9fZnJlZShyZGV2KTsKKwlvZl9ub2RlX3B1dChyZGV2LT5kZXYub2Zfbm9kZSk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnJkZXYtPmRldik7CiAJbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CiB9CkBAIC0zODE5LDggKzM4MzEsOSBAQAogCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAogCS8qIElmIHdlIGhhdmUgYSBmdWxsIGNvbmZpZ3VyYXRpb24gdGhlbiBkaXNhYmxlIGFueSByZWd1bGF0b3JzCi0JICogd2hpY2ggYXJlIG5vdCBpbiB1c2Ugb3IgYWx3YXlzX29uLiAgVGhpcyB3aWxsIGJlY29tZSB0aGUKLQkgKiBkZWZhdWx0IGJlaGF2aW91ciBpbiB0aGUgZnV0dXJlLgorCSAqIHdlIGhhdmUgcGVybWlzc2lvbiB0byBjaGFuZ2UgdGhlIHN0YXR1cyBmb3IgYW5kIHdoaWNoIGFyZQorCSAqIG5vdCBpbiB1c2Ugb3IgYWx3YXlzX29uLiAgVGhpcyBpcyBlZmZlY3RpdmVseSB0aGUgZGVmYXVsdAorCSAqIGZvciBEVCBhbmQgQUNQSSBhcyB0aGV5IGhhdmUgZnVsbCBjb25zdHJhaW50cy4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgewogCQlvcHMgPSByZGV2LT5kZXNjLT5vcHM7CkBAIC0zODI5LDYgKzM4NDIsOSBAQAogCQlpZiAoYyAmJiBjLT5hbHdheXNfb24pCiAJCQljb250aW51ZTsKIAorCQlpZiAoYyAmJiAhKGMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpKQorCQkJY29udGludWU7CisKIAkJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwogCiAJCWlmIChyZGV2LT51c2VfY291bnQpCkBAIC0zODY3LDQgKzM4ODMsNCBAQAogCiAJcmV0dXJuIDA7CiB9Ci1sYXRlX2luaXRjYWxsKHJlZ3VsYXRvcl9pbml0X2NvbXBsZXRlKTsKK2xhdGVfaW5pdGNhbGxfc3luYyhyZWd1bGF0b3JfaW5pdF9jb21wbGV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kZXZyZXMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RldnJlcy5jCmluZGV4IGY0NDgxOGIuLjhmNzg1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RldnJlcy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RldnJlcy5jCkBAIC0zNjAsOSArMzYwLDkgQEAKICAqIHdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIuCiAgKi8KIGludCBkZXZtX3JlZ3VsYXRvcl9idWxrX3JlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKippZCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmlkLAogCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICphbGlhc19kZXYsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKiphbGlhc19pZCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFsaWFzX2lkLAogCQkJCQkgICAgICBpbnQgbnVtX2lkKQogewogCWludCBpOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAgKiB3aWxsIGVuc3VyZSB0aGF0IHRoZSByZXNvdXJjZSBpcyBmcmVlZC4KICAqLwogdm9pZCBkZXZtX3JlZ3VsYXRvcl9idWxrX3VucmVnaXN0ZXJfc3VwcGx5X2FsaWFzKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCSBjb25zdCBjaGFyICoqaWQsCisJCQkJCQkgY29uc3QgY2hhciAqY29uc3QgKmlkLAogCQkJCQkJIGludCBudW1faWQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwppbmRleCBjNjFmN2U5Li4zNTQxMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKQEAgLTUwLDcgKzUwLDYgQEAKIHsKIAlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgKmNvbmZpZzsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwotCWNvbnN0IF9fYmUzMiAqZGVsYXk7CiAJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKIAogCWNvbmZpZyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcpLApAQCAtOTEsMTUgKzkwLDExIEBACiAJaWYgKChjb25maWctPmdwaW8gPT0gLUVOT0RFVikgfHwgKGNvbmZpZy0+Z3BpbyA9PSAtRVBST0JFX0RFRkVSKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiAKLQlkZWxheSA9IG9mX2dldF9wcm9wZXJ0eShucCwgInN0YXJ0dXAtZGVsYXktdXMiLCBOVUxMKTsKLQlpZiAoZGVsYXkpCi0JCWNvbmZpZy0+c3RhcnR1cF9kZWxheSA9IGJlMzJfdG9fY3B1KCpkZWxheSk7CisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzdGFydHVwLWRlbGF5LXVzIiwgJmNvbmZpZy0+c3RhcnR1cF9kZWxheSk7CiAKLQlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgImVuYWJsZS1hY3RpdmUtaGlnaCIsIE5VTEwpKQotCQljb25maWctPmVuYWJsZV9oaWdoID0gdHJ1ZTsKLQotCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAiZ3Bpby1vcGVuLWRyYWluIiwgTlVMTCkpCi0JCWNvbmZpZy0+Z3Bpb19pc19vcGVuX2RyYWluID0gdHJ1ZTsKKwljb25maWctPmVuYWJsZV9oaWdoID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiZW5hYmxlLWFjdGl2ZS1oaWdoIik7CisJY29uZmlnLT5ncGlvX2lzX29wZW5fZHJhaW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsCisJCQkJCQkJICAgImdwaW8tb3Blbi1kcmFpbiIpOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJ2aW4tc3VwcGx5IiwgTlVMTCkpCiAJCWNvbmZpZy0+aW5wdXRfc3VwcGx5ID0gInZpbiI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9sdGMzNTg5LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9sdGMzNTg5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwYTk5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2x0YzM1ODkuYwpAQCAtMCwwICsxLDU1NCBAQAorLyoKKyAqIExpbmVhciBUZWNobm9sb2d5IExUQzM1ODksTFRDMzU4OS0xIHJlZ3VsYXRvciBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FCQkibHRjMzU4OSIKKworI2RlZmluZSBMVEMzNTg5X0lSUVNUQVQJCTB4MDIKKyNkZWZpbmUgTFRDMzU4OV9TQ1IxCQkweDA3CisjZGVmaW5lIExUQzM1ODlfT1ZFTgkJMHgxMAorI2RlZmluZSBMVEMzNTg5X1NDUjIJCTB4MTIKKyNkZWZpbmUgTFRDMzU4OV9QR1NUQVQJCTB4MTMKKyNkZWZpbmUgTFRDMzU4OV9WQ0NSCQkweDIwCisjZGVmaW5lIExUQzM1ODlfQ0xJUlEJCTB4MjEKKyNkZWZpbmUgTFRDMzU4OV9CMURUVjEJCTB4MjMKKyNkZWZpbmUgTFRDMzU4OV9CMURUVjIJCTB4MjQKKyNkZWZpbmUgTFRDMzU4OV9WUlJDUgkJMHgyNQorI2RlZmluZSBMVEMzNTg5X0IyRFRWMQkJMHgyNgorI2RlZmluZSBMVEMzNTg5X0IyRFRWMgkJMHgyNworI2RlZmluZSBMVEMzNTg5X0IzRFRWMQkJMHgyOQorI2RlZmluZSBMVEMzNTg5X0IzRFRWMgkJMHgyYQorI2RlZmluZSBMVEMzNTg5X0wyRFRWMQkJMHgzMgorI2RlZmluZSBMVEMzNTg5X0wyRFRWMgkJMHgzMworCisjZGVmaW5lIExUQzM1ODlfSVJRU1RBVF9QR09PRF9USU1FT1VUCUJJVCgzKQorI2RlZmluZSBMVEMzNTg5X0lSUVNUQVRfVU5ERVJWT0xUX1dBUk4JQklUKDQpCisjZGVmaW5lIExUQzM1ODlfSVJRU1RBVF9VTkRFUlZPTFRfRkFVTFQJQklUKDUpCisjZGVmaW5lIExUQzM1ODlfSVJRU1RBVF9USEVSTUFMX1dBUk4JQklUKDYpCisjZGVmaW5lIExUQzM1ODlfSVJRU1RBVF9USEVSTUFMX0ZBVUxUCUJJVCg3KQorCisjZGVmaW5lIExUQzM1ODlfT1ZFTl9TVzEJCUJJVCgwKQorI2RlZmluZSBMVEMzNTg5X09WRU5fU1cyCQlCSVQoMSkKKyNkZWZpbmUgTFRDMzU4OV9PVkVOX1NXMwkJQklUKDIpCisjZGVmaW5lIExUQzM1ODlfT1ZFTl9CQl9PVVQJCUJJVCgzKQorI2RlZmluZSBMVEMzNTg5X09WRU5fTERPMgkJQklUKDQpCisjZGVmaW5lIExUQzM1ODlfT1ZFTl9MRE8zCQlCSVQoNSkKKyNkZWZpbmUgTFRDMzU4OV9PVkVOX0xETzQJCUJJVCg2KQorI2RlZmluZSBMVEMzNTg5X09WRU5fU1dfQ1RSTAkJQklUKDcpCisKKyNkZWZpbmUgTFRDMzU4OV9WQ0NSX1NXMV9HTwkJQklUKDApCisjZGVmaW5lIExUQzM1ODlfVkNDUl9TVzJfR08JCUJJVCgyKQorI2RlZmluZSBMVEMzNTg5X1ZDQ1JfU1czX0dPCQlCSVQoNCkKKyNkZWZpbmUgTFRDMzU4OV9WQ0NSX0xETzJfR08JCUJJVCg2KQorCitlbnVtIGx0YzM1ODlfdmFyaWFudCB7CisJTFRDMzU4OSwKKwlMVEMzNTg5XzEsCisJTFRDMzU4OV8yLAorfTsKKworZW51bSBsdGMzNTg5X3JlZyB7CisJTFRDMzU4OV9TVzEsCisJTFRDMzU4OV9TVzIsCisJTFRDMzU4OV9TVzMsCisJTFRDMzU4OV9CQl9PVVQsCisJTFRDMzU4OV9MRE8xLAorCUxUQzM1ODlfTERPMiwKKwlMVEMzNTg5X0xETzMsCisJTFRDMzU4OV9MRE80LAorCUxUQzM1ODlfTlVNX1JFR1VMQVRPUlMsCit9OworCitzdHJ1Y3QgbHRjMzU4OV9yZWd1bGF0b3IgeworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOworCisJLyogRXh0ZXJuYWwgZmVlZGJhY2sgdm9sdGFnZSBkaXZpZGVyICovCisJdW5zaWduZWQgaW50IHIxOworCXVuc2lnbmVkIGludCByMjsKK307CisKK3N0cnVjdCBsdGMzNTg5IHsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGRldmljZSAqZGV2OworCWVudW0gbHRjMzU4OV92YXJpYW50IHZhcmlhbnQ7CisJc3RydWN0IGx0YzM1ODlfcmVndWxhdG9yIHJlZ3VsYXRvcl9kZXNjc1tMVEMzNTg5X05VTV9SRUdVTEFUT1JTXTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yc1tMVEMzNTg5X05VTV9SRUdVTEFUT1JTXTsKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbHRjMzU4OV9sZG80W10gPSB7CisJMjgwMDAwMCwgMjUwMDAwMCwgMTgwMDAwMCwgMzMwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbHRjMzU4OV8xMl9sZG80W10gPSB7CisJMTIwMDAwMCwgMTgwMDAwMCwgMjUwMDAwMCwgMzIwMDAwMCwKK307CisKK3N0YXRpYyBpbnQgbHRjMzU4OV9zZXRfcmFtcF9kZWxheShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHJhbXBfZGVsYXkpCit7CisJc3RydWN0IGx0YzM1ODkgKmx0YzM1ODkgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBzZWwsIHNoaWZ0OworCisJaWYgKHVubGlrZWx5KHJhbXBfZGVsYXkgPD0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVlJSQ1Igc2xldyByYXRlIG9mZnNldHMgYXJlIHRoZSBzYW1lIGFzIFZDQ1IgZ28gYml0IG9mZnNldHMgKi8KKwlzaGlmdCA9IGZmcyhyZGV2LT5kZXNjLT5hcHBseV9iaXQpIC0gMTsKKworCS8qIFRoZSBzbGV3IHJhdGUgY2FuIGJlIHNldCB0byAwLjg4LCAxLjc1LCAzLjUsIG9yIDcgbVYvdVMgKi8KKwlmb3IgKHNlbCA9IDA7IHNlbCA8IDQ7IHNlbCsrKSB7CisJCWlmICgoODgwIDw8IHNlbCkgPj0gcmFtcF9kZWxheSkgeworCQkJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhsdGMzNTg5LT5yZWdtYXAsCisJCQkJCQkgIExUQzM1ODlfVlJSQ1IsCisJCQkJCQkgIDB4MyA8PCBzaGlmdCwgc2VsIDw8IHNoaWZ0KTsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBsdGMzNTg5X3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCB1VikKK3sKKwlzdHJ1Y3QgbHRjMzU4OSAqbHRjMzU4OSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHNlbDsKKworCXNlbCA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXIocmRldiwgdVYsIHVWKTsKKwlpZiAoc2VsIDwgMCkKKwkJcmV0dXJuIHNlbDsKKworCS8qIERUVjIgcmVnaXN0ZXIgZm9sbG93cyByaWdodCBhZnRlciB0aGUgY29ycmVzcG9uZGluZyBEVFYxIHJlZ2lzdGVyICovCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhsdGMzNTg5LT5yZWdtYXAsIHJkZXYtPmRlc2MtPnZzZWxfcmVnICsgMSwKKwkJCQkgIHJkZXYtPmRlc2MtPnZzZWxfbWFzaywgc2VsKTsKK30KKworc3RhdGljIGludCBsdGMzNTg5X3NldF9zdXNwZW5kX21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCBsdGMzNTg5ICpsdGMzNTg5ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgbWFzaywgYml0ID0gMDsKKworCS8qIFZDQ1IgcmVmZXJlbmNlIHNlbGVjdHMgYXJlIHJpZ2h0IG5leHQgdG8gdGhlIFZDQ1IgZ28gYml0cyAqLworCW1hc2sgPSByZGV2LT5kZXNjLT5hcHBseV9iaXQgPDwgMTsKKworCWlmIChtb2RlID09IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkpCisJCWJpdCA9IG1hc2s7CS8qIFNlbGVjdCBEVFYyICovCisKKwltYXNrIHw9IHJkZXYtPmRlc2MtPmFwcGx5X2JpdDsKKwliaXQgfD0gcmRldi0+ZGVzYy0+YXBwbHlfYml0OworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMobHRjMzU4OS0+cmVnbWFwLCBMVEMzNTg5X1ZDQ1IsIG1hc2ssIGJpdCk7Cit9CisKKy8qIFNXMSwgU1cyLCBTVzMsIExETzIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBsdGMzNTg5X2xpbmVhcl9yZWd1bGF0b3Jfb3BzID0geworCS5lbmFibGUgPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZSA9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkuaXNfZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkubGlzdF92b2x0YWdlID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCisJLnNldF92b2x0YWdlX3NlbCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5nZXRfdm9sdGFnZV9zZWwgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuc2V0X3JhbXBfZGVsYXkgPSBsdGMzNTg5X3NldF9yYW1wX2RlbGF5LAorCS5zZXRfdm9sdGFnZV90aW1lX3NlbCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IGx0YzM1ODlfc2V0X3N1c3BlbmRfdm9sdGFnZSwKKwkuc2V0X3N1c3BlbmRfbW9kZSA9IGx0YzM1ODlfc2V0X3N1c3BlbmRfbW9kZSwKK307CisKKy8qIEJCX09VVCwgTERPMyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGx0YzM1ODlfZml4ZWRfcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUgPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmlzX2VuYWJsZWQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCit9OworCisvKiBMRE8xICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbHRjMzU4OV9maXhlZF9zdGFuZGJ5X3JlZ3VsYXRvcl9vcHMgPSB7Cit9OworCisvKiBMRE80ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbHRjMzU4OV90YWJsZV9yZWd1bGF0b3Jfb3BzID0geworCS5lbmFibGUgPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZSA9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkuaXNfZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkubGlzdF92b2x0YWdlID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV90YWJsZSwKKwkuc2V0X3ZvbHRhZ2Vfc2VsID0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLmdldF92b2x0YWdlX3NlbCA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorfTsKKworCisjZGVmaW5lIExUQzM1ODlfUkVHKF9uYW1lLCBfb3BzLCBlbl9iaXQsIGR0djFfcmVnLCBkdHZfbWFzaywgZ29fYml0KQlcCisJW0xUQzM1ODlfICMjIF9uYW1lXSA9IHsJCQkJCQlcCisJCS5kZXNjID0gewkJCQkJCVwKKwkJCS5uYW1lID0gI19uYW1lLAkJCQkJXAorCQkJLm5fdm9sdGFnZXMgPSAoZHR2X21hc2spICsgMSwJCQlcCisJCQkubWluX3VWID0gKGdvX2JpdCkgPyAzNjI1MDAgOiAwLAkJXAorCQkJLnVWX3N0ZXAgPSAoZ29fYml0KSA/IDEyNTAwIDogMCwJCVwKKwkJCS5yYW1wX2RlbGF5ID0gKGdvX2JpdCkgPyAxNzUwIDogMCwJCVwKKwkJCS5maXhlZF91ViA9IChkdHZfbWFzaykgPyAwIDogODAwMDAwLAkJXAorCQkJLm9wcyA9ICZsdGMzNTg5XyAjIyBfb3BzICMjIF9yZWd1bGF0b3Jfb3BzLAlcCisJCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkJCS5pZCA9IExUQzM1ODlfICMjIF9uYW1lLAkJCVwKKwkJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJCQlcCisJCQkudnNlbF9yZWcgPSAoZHR2MV9yZWcpLAkJCVwKKwkJCS52c2VsX21hc2sgPSAoZHR2X21hc2spLAkJCVwKKwkJCS5hcHBseV9yZWcgPSAoZ29fYml0KSA/IExUQzM1ODlfVkNDUiA6IDAsCVwKKwkJCS5hcHBseV9iaXQgPSAoZ29fYml0KSwJCQkJXAorCQkJLmVuYWJsZV9yZWcgPSAoZW5fYml0KSA/IExUQzM1ODlfT1ZFTiA6IDAsCVwKKwkJCS5lbmFibGVfbWFzayA9IChlbl9iaXQpLAkJCVwKKwkJfSwJCQkJCQkJXAorCX0KKworI2RlZmluZSBMVEMzNTg5X0xJTkVBUl9SRUcoX25hbWUsIF9kdHYxKQkJCQlcCisJTFRDMzU4OV9SRUcoX25hbWUsIGxpbmVhciwgTFRDMzU4OV9PVkVOXyAjIyBfbmFtZSwJCVwKKwkJICAgIExUQzM1ODlfICMjIF9kdHYxLCAweDFmLAkJCQlcCisJCSAgICBMVEMzNTg5X1ZDQ1JfICMjIF9uYW1lICMjIF9HTykKKworI2RlZmluZSBMVEMzNTg5X0ZJWEVEX1JFRyhfbmFtZSkgXAorCUxUQzM1ODlfUkVHKF9uYW1lLCBmaXhlZCwgTFRDMzU4OV9PVkVOXyAjIyBfbmFtZSwgMCwgMCwgMCkKKworc3RhdGljIHN0cnVjdCBsdGMzNTg5X3JlZ3VsYXRvciBsdGMzNTg5X3JlZ3VsYXRvcnNbTFRDMzU4OV9OVU1fUkVHVUxBVE9SU10gPSB7CisJTFRDMzU4OV9MSU5FQVJfUkVHKFNXMSwgQjFEVFYxKSwKKwlMVEMzNTg5X0xJTkVBUl9SRUcoU1cyLCBCMkRUVjEpLAorCUxUQzM1ODlfTElORUFSX1JFRyhTVzMsIEIzRFRWMSksCisJTFRDMzU4OV9GSVhFRF9SRUcoQkJfT1VUKSwKKwlMVEMzNTg5X1JFRyhMRE8xLCBmaXhlZF9zdGFuZGJ5LCAwLCAwLCAwLCAwKSwKKwlMVEMzNTg5X0xJTkVBUl9SRUcoTERPMiwgTDJEVFYxKSwKKwlMVEMzNTg5X0ZJWEVEX1JFRyhMRE8zKSwKKwlMVEMzNTg5X1JFRyhMRE80LCB0YWJsZSwgTFRDMzU4OV9PVkVOX0xETzQsIExUQzM1ODlfTDJEVFYyLCAweDYwLCAwKSwKK307CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIGx0YzM1ODlfbWF0Y2hlc1tMVEMzNTg5X05VTV9SRUdVTEFUT1JTXSA9IHsKKwl7IC5uYW1lID0gInN3MSIsICAgIH0sCisJeyAubmFtZSA9ICJzdzIiLCAgICB9LAorCXsgLm5hbWUgPSAic3czIiwgICAgfSwKKwl7IC5uYW1lID0gImJiLW91dCIsIH0sCisJeyAubmFtZSA9ICJsZG8xIiwgICB9LCAvKiBzdGFuZGJ5ICovCisJeyAubmFtZSA9ICJsZG8yIiwgICB9LAorCXsgLm5hbWUgPSAibGRvMyIsICAgfSwKKwl7IC5uYW1lID0gImxkbzQiLCAgIH0sCit9OworCitzdGF0aWMgaW50IGx0YzM1ODlfcGFyc2VfcmVndWxhdG9yc19kdChzdHJ1Y3QgbHRjMzU4OSAqbHRjMzU4OSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBsdGMzNTg5LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCWludCBpLCByZXQ7CisKKwlub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoZGV2LT5vZl9ub2RlLCAicmVndWxhdG9ycyIpOworCWlmICghbm9kZSkgeworCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcnMgbm9kZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBvZl9yZWd1bGF0b3JfbWF0Y2goZGV2LCBub2RlLCBsdGMzNTg5X21hdGNoZXMsCisJCQkJIEFSUkFZX1NJWkUobHRjMzU4OV9tYXRjaGVzKSk7CisJb2Zfbm9kZV9wdXQobm9kZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJFcnJvciBwYXJzaW5nIHJlZ3VsYXRvciBpbml0IGRhdGE6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocmV0ICE9IExUQzM1ODlfTlVNX1JFR1VMQVRPUlMpIHsKKwkJZGV2X2VycihkZXYsICJPbmx5ICVkIHJlZ3VsYXRvcnMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUGFyc2UgZmVlZGJhY2sgdm9sdGFnZSBkaXZpZGVycy4gTERPMyBhbmQgTERPNCBkb24ndCBoYXZlIHRoZW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTFRDMzU4OV9MRE8zOyBpKyspIHsKKwkJc3RydWN0IGx0YzM1ODlfcmVndWxhdG9yICpkZXNjID0gJmx0YzM1ODktPnJlZ3VsYXRvcl9kZXNjc1tpXTsKKwkJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGx0YzM1ODlfbWF0Y2hlc1tpXS5vZl9ub2RlOworCQl1MzIgdmRpdlsyXTsKKworCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShucCwgImxsdGMsZmItdm9sdGFnZS1kaXZpZGVyIiwKKwkJCQkJCSB2ZGl2LCAyKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcGFyc2Ugdm9sdGFnZSBkaXZpZGVyOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRlc2MtPnIxID0gdmRpdlswXTsKKwkJZGVzYy0+cjIgPSB2ZGl2WzFdOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICptYXRjaF9pbml0X2RhdGEoaW50IGluZGV4KQoreworCXJldHVybiBsdGMzNTg5X21hdGNoZXNbaW5kZXhdLmluaXRfZGF0YTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1hdGNoX29mX25vZGUoaW50IGluZGV4KQoreworCXJldHVybiBsdGMzNTg5X21hdGNoZXNbaW5kZXhdLm9mX25vZGU7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbHRjMzU4OV9wYXJzZV9yZWd1bGF0b3JzX2R0KHN0cnVjdCBsdGMzNTg5ICpsdGMzNTg5KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICptYXRjaF9pbml0X2RhdGEoaW50IGluZGV4KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWF0Y2hfb2Zfbm9kZShpbnQgaW5kZXgpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgbHRjMzU4OV93cml0ZWFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTFRDMzU4OV9JUlFTVEFUOgorCWNhc2UgTFRDMzU4OV9TQ1IxOgorCWNhc2UgTFRDMzU4OV9PVkVOOgorCWNhc2UgTFRDMzU4OV9TQ1IyOgorCWNhc2UgTFRDMzU4OV9WQ0NSOgorCWNhc2UgTFRDMzU4OV9DTElSUToKKwljYXNlIExUQzM1ODlfQjFEVFYxOgorCWNhc2UgTFRDMzU4OV9CMURUVjI6CisJY2FzZSBMVEMzNTg5X1ZSUkNSOgorCWNhc2UgTFRDMzU4OV9CMkRUVjE6CisJY2FzZSBMVEMzNTg5X0IyRFRWMjoKKwljYXNlIExUQzM1ODlfQjNEVFYxOgorCWNhc2UgTFRDMzU4OV9CM0RUVjI6CisJY2FzZSBMVEMzNTg5X0wyRFRWMToKKwljYXNlIExUQzM1ODlfTDJEVFYyOgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBsdGMzNTg5X3JlYWRhYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIExUQzM1ODlfSVJRU1RBVDoKKwljYXNlIExUQzM1ODlfU0NSMToKKwljYXNlIExUQzM1ODlfT1ZFTjoKKwljYXNlIExUQzM1ODlfU0NSMjoKKwljYXNlIExUQzM1ODlfUEdTVEFUOgorCWNhc2UgTFRDMzU4OV9WQ0NSOgorCWNhc2UgTFRDMzU4OV9CMURUVjE6CisJY2FzZSBMVEMzNTg5X0IxRFRWMjoKKwljYXNlIExUQzM1ODlfVlJSQ1I6CisJY2FzZSBMVEMzNTg5X0IyRFRWMToKKwljYXNlIExUQzM1ODlfQjJEVFYyOgorCWNhc2UgTFRDMzU4OV9CM0RUVjE6CisJY2FzZSBMVEMzNTg5X0IzRFRWMjoKKwljYXNlIExUQzM1ODlfTDJEVFYxOgorCWNhc2UgTFRDMzU4OV9MMkRUVjI6CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGx0YzM1ODlfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTFRDMzU4OV9JUlFTVEFUOgorCWNhc2UgTFRDMzU4OV9QR1NUQVQ6CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0cnVjdCByZWdfZGVmYXVsdCBsdGMzNTg5X3JlZ19kZWZhdWx0c1tdID0geworCXsgTFRDMzU4OV9TQ1IxLCAgIDB4MDAgfSwKKwl7IExUQzM1ODlfT1ZFTiwgICAweDAwIH0sCisJeyBMVEMzNTg5X1NDUjIsICAgMHgwMCB9LAorCXsgTFRDMzU4OV9WQ0NSLCAgIDB4MDAgfSwKKwl7IExUQzM1ODlfQjFEVFYxLCAweDE5IH0sCisJeyBMVEMzNTg5X0IxRFRWMiwgMHgxOSB9LAorCXsgTFRDMzU4OV9WUlJDUiwgIDB4ZmYgfSwKKwl7IExUQzM1ODlfQjJEVFYxLCAweDE5IH0sCisJeyBMVEMzNTg5X0IyRFRWMiwgMHgxOSB9LAorCXsgTFRDMzU4OV9CM0RUVjEsIDB4MTkgfSwKKwl7IExUQzM1ODlfQjNEVFYyLCAweDE5IH0sCisJeyBMVEMzNTg5X0wyRFRWMSwgMHgxOSB9LAorCXsgTFRDMzU4OV9MMkRUVjIsIDB4MTkgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBsdGMzNTg5X3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSA4LAorCS53cml0ZWFibGVfcmVnID0gbHRjMzU4OV93cml0ZWFibGVfcmVnLAorCS5yZWFkYWJsZV9yZWcgPSBsdGMzNTg5X3JlYWRhYmxlX3JlZywKKwkudm9sYXRpbGVfcmVnID0gbHRjMzU4OV92b2xhdGlsZV9yZWcsCisJLm1heF9yZWdpc3RlciA9IExUQzM1ODlfTDJEVFYyLAorCS5yZWdfZGVmYXVsdHMgPSBsdGMzNTg5X3JlZ19kZWZhdWx0cywKKwkubnVtX3JlZ19kZWZhdWx0cyA9IEFSUkFZX1NJWkUobHRjMzU4OV9yZWdfZGVmYXVsdHMpLAorCS51c2Vfc2luZ2xlX3J3ID0gdHJ1ZSwKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX1JCVFJFRSwKK307CisKKworc3RhdGljIGlycXJldHVybl90IGx0YzM1ODlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbHRjMzU4OSAqbHRjMzU4OSA9IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgaSwgaXJxc3RhdCwgZXZlbnQ7CisKKwlyZWdtYXBfcmVhZChsdGMzNTg5LT5yZWdtYXAsIExUQzM1ODlfSVJRU1RBVCwgJmlycXN0YXQpOworCisJaWYgKGlycXN0YXQgJiBMVEMzNTg5X0lSUVNUQVRfVEhFUk1BTF9XQVJOKSB7CisJCWV2ZW50ID0gUkVHVUxBVE9SX0VWRU5UX09WRVJfVEVNUDsKKwkJZm9yIChpID0gMDsgaSA8IExUQzM1ODlfTlVNX1JFR1VMQVRPUlM7IGkrKykKKwkJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKGx0YzM1ODktPnJlZ3VsYXRvcnNbaV0sCisJCQkJCQkgICAgICBldmVudCwgTlVMTCk7CisJfQorCisJaWYgKGlycXN0YXQgJiBMVEMzNTg5X0lSUVNUQVRfVU5ERVJWT0xUX1dBUk4pIHsKKwkJZXZlbnQgPSBSRUdVTEFUT1JfRVZFTlRfVU5ERVJfVk9MVEFHRTsKKwkJZm9yIChpID0gMDsgaSA8IExUQzM1ODlfTlVNX1JFR1VMQVRPUlM7IGkrKykKKwkJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKGx0YzM1ODktPnJlZ3VsYXRvcnNbaV0sCisJCQkJCQkgICAgICBldmVudCwgTlVMTCk7CisJfQorCisJLyogQ2xlYXIgd2FybmluZyBjb25kaXRpb24gKi8KKwlyZWdtYXBfd3JpdGUobHRjMzU4OS0+cmVnbWFwLCBMVEMzNTg5X0NMSVJRLCAwKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHRjMzU4OV9zY2FsZSh1bnNpZ25lZCBpbnQgdVYsIHUzMiByMSwgdTMyIHIyKQoreworCXVpbnQ2NF90IHRtcDsKKwlpZiAodVYgPT0gMCkKKwkJcmV0dXJuIDA7CisJdG1wID0gKHVpbnQ2NF90KXVWICogcjE7CisJZG9fZGl2KHRtcCwgcjIpOworCXJldHVybiB1ViArICh1bnNpZ25lZCBpbnQpdG1wOworfQorCitzdGF0aWMgdm9pZCBsdGMzNTg5X2FwcGx5X2ZiX3ZvbHRhZ2VfZGl2aWRlcihzdHJ1Y3QgbHRjMzU4OV9yZWd1bGF0b3IgKnJkZXNjKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYyA9ICZyZGVzYy0+ZGVzYzsKKworCWlmICghcmRlc2MtPnIxIHx8ICFyZGVzYy0+cjIpCisJCXJldHVybjsKKworCWRlc2MtPm1pbl91ViA9IGx0YzM1ODlfc2NhbGUoZGVzYy0+bWluX3VWLCByZGVzYy0+cjEsIHJkZXNjLT5yMik7CisJZGVzYy0+dVZfc3RlcCA9IGx0YzM1ODlfc2NhbGUoZGVzYy0+dVZfc3RlcCwgcmRlc2MtPnIxLCByZGVzYy0+cjIpOworCWRlc2MtPmZpeGVkX3VWID0gbHRjMzU4OV9zY2FsZShkZXNjLT5maXhlZF91ViwgcmRlc2MtPnIxLCByZGVzYy0+cjIpOworfQorCitzdGF0aWMgaW50IGx0YzM1ODlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCBsdGMzNTg5X3JlZ3VsYXRvciAqZGVzY3M7CisJc3RydWN0IGx0YzM1ODkgKmx0YzM1ODk7CisJaW50IGksIHJldDsKKworCWx0YzM1ODkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmx0YzM1ODkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWx0YzM1ODkpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgbHRjMzU4OSk7CisJbHRjMzU4OS0+dmFyaWFudCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlsdGMzNTg5LT5kZXYgPSBkZXY7CisKKwlkZXNjcyA9IGx0YzM1ODktPnJlZ3VsYXRvcl9kZXNjczsKKwltZW1jcHkoZGVzY3MsIGx0YzM1ODlfcmVndWxhdG9ycywgc2l6ZW9mKGx0YzM1ODlfcmVndWxhdG9ycykpOworCWlmIChsdGMzNTg5LT52YXJpYW50ID09IExUQzM1ODkpIHsKKwkJZGVzY3NbTFRDMzU4OV9MRE8zXS5kZXNjLmZpeGVkX3VWID0gMTgwMDAwMDsKKwkJZGVzY3NbTFRDMzU4OV9MRE80XS5kZXNjLnZvbHRfdGFibGUgPSBsdGMzNTg5X2xkbzQ7CisJfSBlbHNlIHsKKwkJZGVzY3NbTFRDMzU4OV9MRE8zXS5kZXNjLmZpeGVkX3VWID0gMjgwMDAwMDsKKwkJZGVzY3NbTFRDMzU4OV9MRE80XS5kZXNjLnZvbHRfdGFibGUgPSBsdGMzNTg5XzEyX2xkbzQ7CisJfQorCisJbHRjMzU4OS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmbHRjMzU4OV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGx0YzM1ODktPnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihsdGMzNTg5LT5yZWdtYXApOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbHRjMzU4OV9wYXJzZV9yZWd1bGF0b3JzX2R0KGx0YzM1ODkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTFRDMzU4OV9OVU1fUkVHVUxBVE9SUzsgaSsrKSB7CisJCXN0cnVjdCBsdGMzNTg5X3JlZ3VsYXRvciAqcmRlc2MgPSAmbHRjMzU4OS0+cmVndWxhdG9yX2Rlc2NzW2ldOworCQlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MgPSAmcmRlc2MtPmRlc2M7CisJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CisJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKKworCQlpbml0X2RhdGEgPSBtYXRjaF9pbml0X2RhdGEoaSk7CisKKwkJaWYgKGkgPCBMVEMzNTg5X0xETzMpCisJCQlsdGMzNTg5X2FwcGx5X2ZiX3ZvbHRhZ2VfZGl2aWRlcihyZGVzYyk7CisKKwkJY29uZmlnLmRldiA9IGRldjsKKwkJY29uZmlnLmluaXRfZGF0YSA9IGluaXRfZGF0YTsKKwkJY29uZmlnLmRyaXZlcl9kYXRhID0gbHRjMzU4OTsKKwkJY29uZmlnLm9mX25vZGUgPSBtYXRjaF9vZl9ub2RlKGkpOworCisJCWx0YzM1ODktPnJlZ3VsYXRvcnNbaV0gPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcihkZXYsIGRlc2MsCisJCQkJCQkJCSAmY29uZmlnKTsKKwkJaWYgKElTX0VSUihsdGMzNTg5LT5yZWd1bGF0b3JzW2ldKSkgeworCQkJcmV0ID0gUFRSX0VSUihsdGMzNTg5LT5yZWd1bGF0b3JzW2ldKTsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlczogJWRcbiIsCisJCQkJZGVzYy0+bmFtZSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgY2xpZW50LT5pcnEsIE5VTEwsIGx0YzM1ODlfaXNyLAorCQkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAorCQkJCQljbGllbnQtPm5hbWUsIGx0YzM1ODkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgbHRjMzU4OV9pMmNfaWRbXSA9IHsKKwl7ICJsdGMzNTg5IiwgICBMVEMzNTg5ICAgfSwKKwl7ICJsdGMzNTg5LTEiLCBMVEMzNTg5XzEgfSwKKwl7ICJsdGMzNTg5LTIiLCBMVEMzNTg5XzIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjMzU4OV9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjMzU4OV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBsdGMzNTg5X3Byb2JlLAorCS5pZF90YWJsZSA9IGx0YzM1ODlfaTJjX2lkLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKGx0YzM1ODlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVndWxhdG9yIGRyaXZlciBmb3IgTGluZWFyIFRlY2hub2xvZ3kgTFRDMzU4OSgtMSwyKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJpMmM6bHRjMzU4OSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTQ1NzcuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDE0NTc3LmMKaW5kZXggZWQ2MGJhYS4uNWQ5YzYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTQ1NzcuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNDU3Ny5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG1heDE0NTc3LmMgLSBSZWd1bGF0b3IgZHJpdmVyIGZvciB0aGUgTWF4aW0gMTQ1NzcKKyAqIG1heDE0NTc3LmMgLSBSZWd1bGF0b3IgZHJpdmVyIGZvciB0aGUgTWF4aW0gMTQ1NzcvNzc4MzYKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMsMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBLcnp5c3p0b2YgS296bG93c2tpIDxrLmtvemxvd3NraUBzYW1zdW5nLmNvbT4KQEAgLTIyLDYgKzIyLDQyIEBACiAjaW5jbHVkZSA8bGludXgvbWZkL21heDE0NTc3LXByaXZhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmg+CiAKKy8qCisgKiBWYWxpZCBsaW1pdHMgb2YgY3VycmVudCBmb3IgbWF4MTQ1NzcgYW5kIG1heDc3ODM2IGNoYXJnZXJzLgorICogVGhleSBtdXN0IGNvcnJlc3BvbmQgdG8gTUJDSUNIV1JDTCBhbmQgTUJDSUNIV1JDSCBmaWVsZHMgaW4gQ0hHQ1RSTDQKKyAqIHJlZ2lzdGVyIGZvciBnaXZlbiBjaGlwc2V0LgorICovCitzdHJ1Y3QgbWF4aW1fY2hhcmdlcl9jdXJyZW50IHsKKwkvKiBNaW5pbWFsIGN1cnJlbnQsIHNldCBpbiBDSEdDVFJMNC9NQkNJQ0hXUkNMLCB1QSAqLworCXVuc2lnbmVkIGludCBtaW47CisJLyoKKwkgKiBNaW5pbWFsIGN1cnJlbnQgd2hlbiBoaWdoIHNldHRpbmcgaXMgYWN0aXZlLAorCSAqIHNldCBpbiBDSEdDVFJMNC9NQkNJQ0hXUkNILCB1QQorCSAqLworCXVuc2lnbmVkIGludCBoaWdoX3N0YXJ0OworCS8qIFZhbHVlIG9mIG9uZSBzdGVwIGluIGhpZ2ggc2V0dGluZywgdUEgKi8KKwl1bnNpZ25lZCBpbnQgaGlnaF9zdGVwOworCS8qIE1heGltdW0gY3VycmVudCBvZiBoaWdoIHNldHRpbmcsIHVBICovCisJdW5zaWduZWQgaW50IG1heDsKK307CisKKy8qIFRhYmxlIG9mIHZhbGlkIGNoYXJnZXIgY3VycmVudHMgZm9yIGRpZmZlcmVudCBNYXhpbSBjaGlwc2V0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXhpbV9jaGFyZ2VyX2N1cnJlbnQgbWF4aW1fY2hhcmdlcl9jdXJyZW50c1tdID0geworCVtNQVhJTV9ERVZJQ0VfVFlQRV9VTktOT1dOXSA9IHsgMCwgMCwgMCwgMCB9LAorCVtNQVhJTV9ERVZJQ0VfVFlQRV9NQVgxNDU3N10gPSB7CisJCS5taW4JCT0gTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUlOLAorCQkuaGlnaF9zdGFydAk9IE1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RBUlQsCisJCS5oaWdoX3N0ZXAJPSBNQVgxNDU3N19SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9ISUdIX1NURVAsCisJCS5tYXgJCT0gTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUFYLAorCX0sCisJW01BWElNX0RFVklDRV9UWVBFX01BWDc3ODM2XSA9IHsKKwkJLm1pbgkJPSBNQVg3NzgzNl9SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9NSU4sCisJCS5oaWdoX3N0YXJ0CT0gTUFYNzc4MzZfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfSElHSF9TVEFSVCwKKwkJLmhpZ2hfc3RlcAk9IE1BWDc3ODM2X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RFUCwKKwkJLm1heAkJPSBNQVg3NzgzNl9SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9NQVgsCisJfSwKK307CisKIHN0YXRpYyBpbnQgbWF4MTQ1NzdfcmVnX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7CiAJaW50IHJpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwpAQCAtNDcsNiArODMsOSBAQAogewogCXU4IHJlZ19kYXRhOwogCXN0cnVjdCByZWdtYXAgKnJtYXAgPSByZGV2LT5yZWdtYXA7CisJc3RydWN0IG1heDE0NTc3ICptYXgxNDU3NyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJY29uc3Qgc3RydWN0IG1heGltX2NoYXJnZXJfY3VycmVudCAqbGltaXRzID0KKwkJJm1heGltX2NoYXJnZXJfY3VycmVudHNbbWF4MTQ1NzctPmRldl90eXBlXTsKIAogCWlmIChyZGV2X2dldF9pZChyZGV2KSAhPSBNQVgxNDU3N19DSEFSR0VSKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU0LDEyICs5MywxMSBAQAogCW1heDE0NTc3X3JlYWRfcmVnKHJtYXAsIE1BWDE0NTc3X0NIR19SRUdfQ0hHX0NUUkw0LCAmcmVnX2RhdGEpOwogCiAJaWYgKChyZWdfZGF0YSAmIENIR0NUUkw0X01CQ0lDSFdSQ0xfTUFTSykgPT0gMCkKLQkJcmV0dXJuIE1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX01JTjsKKwkJcmV0dXJuIGxpbWl0cy0+bWluOwogCiAJcmVnX2RhdGEgPSAoKHJlZ19kYXRhICYgQ0hHQ1RSTDRfTUJDSUNIV1JDSF9NQVNLKSA+PgogCQkJQ0hHQ1RSTDRfTUJDSUNIV1JDSF9TSElGVCk7Ci0JcmV0dXJuIE1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RBUlQgKwotCQlyZWdfZGF0YSAqIE1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RFUDsKKwlyZXR1cm4gbGltaXRzLT5oaWdoX3N0YXJ0ICsgcmVnX2RhdGEgKiBsaW1pdHMtPmhpZ2hfc3RlcDsKIH0KIAogc3RhdGljIGludCBtYXgxNDU3N19yZWdfc2V0X2N1cnJlbnRfbGltaXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCkBAIC02NywzMyArMTA1LDM5IEBACiB7CiAJaW50IGksIGN1cnJlbnRfYml0cyA9IDB4ZjsKIAl1OCByZWdfZGF0YTsKKwlzdHJ1Y3QgbWF4MTQ1NzcgKm1heDE0NTc3ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwljb25zdCBzdHJ1Y3QgbWF4aW1fY2hhcmdlcl9jdXJyZW50ICpsaW1pdHMgPQorCQkmbWF4aW1fY2hhcmdlcl9jdXJyZW50c1ttYXgxNDU3Ny0+ZGV2X3R5cGVdOwogCiAJaWYgKHJkZXZfZ2V0X2lkKHJkZXYpICE9IE1BWDE0NTc3X0NIQVJHRVIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1pbl91QSA+IE1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX01BWCB8fAotCQkJbWF4X3VBIDwgTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUlOKQorCWlmIChtaW5fdUEgPiBsaW1pdHMtPm1heCB8fCBtYXhfdUEgPCBsaW1pdHMtPm1pbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobWF4X3VBIDwgTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfSElHSF9TVEFSVCkgewotCQkvKiBMZXNzIHRoYW4gMjAwIG1BLCBzbyBzZXQgOTBtQSAodHVybiBvbmx5IExvdyBCaXQgb2ZmKSAqLworCWlmIChtYXhfdUEgPCBsaW1pdHMtPmhpZ2hfc3RhcnQpIHsKKwkJLyoKKwkJICogTGVzcyB0aGFuIGhpZ2hfc3RhcnQsCisJCSAqIHNvIHNldCB0aGUgbWluaW1hbCBjdXJyZW50ICh0dXJuIG9ubHkgTG93IEJpdCBvZmYpCisJCSAqLwogCQl1OCByZWdfZGF0YSA9IDB4MCA8PCBDSEdDVFJMNF9NQkNJQ0hXUkNMX1NISUZUOwogCQlyZXR1cm4gbWF4MTQ1NzdfdXBkYXRlX3JlZyhyZGV2LT5yZWdtYXAsCiAJCQkJTUFYMTQ1NzdfQ0hHX1JFR19DSEdfQ1RSTDQsCiAJCQkJQ0hHQ1RSTDRfTUJDSUNIV1JDTF9NQVNLLCByZWdfZGF0YSk7CiAJfQogCi0JLyogbWF4X3VBIGlzIGluIHJhbmdlOiA8TElNSVRfSElHSF9TVEFSVCwgaW5pZmluaXRlPiwgc28gc2VhcmNoIGZvcgotCSAqIHZhbGlkIGN1cnJlbnQgc3RhcnRpbmcgZnJvbSBMSU1JVF9NQVguICovCi0JZm9yIChpID0gTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUFYOwotCQkJaSA+PSBNQVgxNDU3N19SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9ISUdIX1NUQVJUOwotCQkJaSAtPSBNQVgxNDU3N19SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9ISUdIX1NURVApIHsKKwkvKgorCSAqIG1heF91QSBpcyBpbiByYW5nZTogPGhpZ2hfc3RhcnQsIGluaWZpbml0ZT4sIHNvIHNlYXJjaCBmb3IKKwkgKiB2YWxpZCBjdXJyZW50IHN0YXJ0aW5nIGZyb20gbWF4aW11bSBjdXJyZW50LgorCSAqLworCWZvciAoaSA9IGxpbWl0cy0+bWF4OyBpID49IGxpbWl0cy0+aGlnaF9zdGFydDsgaSAtPSBsaW1pdHMtPmhpZ2hfc3RlcCkgewogCQlpZiAoaSA8PSBtYXhfdUEpCiAJCQlicmVhazsKIAkJY3VycmVudF9iaXRzLS07CiAJfQogCUJVR19PTihjdXJyZW50X2JpdHMgPCAwKTsgLyogQ2Fubm90IGhhcHBlbiAqLwotCS8qIFR1cm4gTG93IEJpdCBvbiAodXNlIHJhbmdlIDIwMG1BLTk1MCBtQSkgKi8KKworCS8qIFR1cm4gTG93IEJpdCBvbiAodXNlIHJhbmdlIGhpZ2hfc3RhcnQtbWF4KS4uLiAqLwogCXJlZ19kYXRhID0gMHgxIDw8IENIR0NUUkw0X01CQ0lDSFdSQ0xfU0hJRlQ7CiAJLyogYW5kIHNldCBwcm9wZXIgSGlnaCBCaXRzICovCiAJcmVnX2RhdGEgfD0gY3VycmVudF9iaXRzIDw8IENIR0NUUkw0X01CQ0lDSFdSQ0hfU0hJRlQ7CkBAIC0xMTgsNyArMTYyLDcgQEAKIAkuc2V0X2N1cnJlbnRfbGltaXQJPSBtYXgxNDU3N19yZWdfc2V0X2N1cnJlbnRfbGltaXQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHN1cHBvcnRlZF9yZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIG1heDE0NTc3X3N1cHBvcnRlZF9yZWd1bGF0b3JzW10gPSB7CiAJW01BWDE0NTc3X1NBRkVPVVRdID0gewogCQkubmFtZQkJPSAiU0FGRU9VVCIsCiAJCS5pZAkJPSBNQVgxNDU3N19TQUZFT1VULApAQCAtMTQxLDE2ICsxODUsODggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDc3ODM2X2xkb19vcHMgPSB7CisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUJCQk9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlCQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyLAorCS5tYXBfdm9sdGFnZQkJPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyLAorCS5nZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLyogVE9ETzogYWRkIC5zZXRfc3VzcGVuZF9tb2RlICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIG1heDc3ODM2X3N1cHBvcnRlZF9yZWd1bGF0b3JzW10gPSB7CisJW01BWDE0NTc3X1NBRkVPVVRdID0geworCQkubmFtZQkJPSAiU0FGRU9VVCIsCisJCS5pZAkJPSBNQVgxNDU3N19TQUZFT1VULAorCQkub3BzCQk9ICZtYXgxNDU3N19zYWZlb3V0X29wcywKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5fdm9sdGFnZXMJPSAxLAorCQkubWluX3VWCQk9IE1BWDE0NTc3X1JFR1VMQVRPUl9TQUZFT1VUX1ZPTFRBR0UsCisJCS5lbmFibGVfcmVnCT0gTUFYMTQ1NzdfUkVHX0NPTlRST0wyLAorCQkuZW5hYmxlX21hc2sJPSBDVFJMMl9TRk9VVE9SRF9NQVNLLAorCX0sCisJW01BWDE0NTc3X0NIQVJHRVJdID0geworCQkubmFtZQkJPSAiQ0hBUkdFUiIsCisJCS5pZAkJPSBNQVgxNDU3N19DSEFSR0VSLAorCQkub3BzCQk9ICZtYXgxNDU3N19jaGFyZ2VyX29wcywKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX0NVUlJFTlQsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLmVuYWJsZV9yZWcJPSBNQVgxNDU3N19DSEdfUkVHX0NIR19DVFJMMiwKKwkJLmVuYWJsZV9tYXNrCT0gQ0hHQ1RSTDJfTUJDSE9TVEVOX01BU0ssCisJfSwKKwlbTUFYNzc4MzZfTERPMV0gPSB7CisJCS5uYW1lCQk9ICJMRE8xIiwKKwkJLmlkCQk9IE1BWDc3ODM2X0xETzEsCisJCS5vcHMJCT0gJm1heDc3ODM2X2xkb19vcHMsCisJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uX3ZvbHRhZ2VzCT0gTUFYNzc4MzZfUkVHVUxBVE9SX0xET19WT0xUQUdFX1NURVBTX05VTSwKKwkJLm1pbl91VgkJPSBNQVg3NzgzNl9SRUdVTEFUT1JfTERPX1ZPTFRBR0VfTUlOLAorCQkudVZfc3RlcAk9IE1BWDc3ODM2X1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQLAorCQkuZW5hYmxlX3JlZwk9IE1BWDc3ODM2X0xET19SRUdfQ05GRzFfTERPMSwKKwkJLmVuYWJsZV9tYXNrCT0gTUFYNzc4MzZfQ05GRzFfTERPX1BXUk1EX01BU0ssCisJCS52c2VsX3JlZwk9IE1BWDc3ODM2X0xET19SRUdfQ05GRzFfTERPMSwKKwkJLnZzZWxfbWFzawk9IE1BWDc3ODM2X0NORkcxX0xET19UVl9NQVNLLAorCX0sCisJW01BWDc3ODM2X0xETzJdID0geworCQkubmFtZQkJPSAiTERPMiIsCisJCS5pZAkJPSBNQVg3NzgzNl9MRE8yLAorCQkub3BzCQk9ICZtYXg3NzgzNl9sZG9fb3BzLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IE1BWDc3ODM2X1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQU19OVU0sCisJCS5taW5fdVYJCT0gTUFYNzc4MzZfUkVHVUxBVE9SX0xET19WT0xUQUdFX01JTiwKKwkJLnVWX3N0ZXAJPSBNQVg3NzgzNl9SRUdVTEFUT1JfTERPX1ZPTFRBR0VfU1RFUCwKKwkJLmVuYWJsZV9yZWcJPSBNQVg3NzgzNl9MRE9fUkVHX0NORkcxX0xETzIsCisJCS5lbmFibGVfbWFzawk9IE1BWDc3ODM2X0NORkcxX0xET19QV1JNRF9NQVNLLAorCQkudnNlbF9yZWcJPSBNQVg3NzgzNl9MRE9fUkVHX0NORkcxX0xETzIsCisJCS52c2VsX21hc2sJPSBNQVg3NzgzNl9DTkZHMV9MRE9fVFZfTUFTSywKKwl9LAorfTsKKwogI2lmZGVmIENPTkZJR19PRgogc3RhdGljIHN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggbWF4MTQ1NzdfcmVndWxhdG9yX21hdGNoZXNbXSA9IHsKIAl7IC5uYW1lCT0gIlNBRkVPVVQiLCB9LAogCXsgLm5hbWUgPSAiQ0hBUkdFUiIsIH0sCiB9OwogCi1zdGF0aWMgaW50IG1heDE0NTc3X3JlZ3VsYXRvcl9kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIHN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggbWF4Nzc4MzZfcmVndWxhdG9yX21hdGNoZXNbXSA9IHsKKwl7IC5uYW1lCT0gIlNBRkVPVVQiLCB9LAorCXsgLm5hbWUgPSAiQ0hBUkdFUiIsIH0sCisJeyAubmFtZSA9ICJMRE8xIiwgfSwKKwl7IC5uYW1lID0gIkxETzIiLCB9LAorfTsKKworc3RhdGljIGludCBtYXgxNDU3N19yZWd1bGF0b3JfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJZW51bSBtYXhpbV9kZXZpY2VfdHlwZSBkZXZfdHlwZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqcmVndWxhdG9yX21hdGNoZXM7CisJdW5zaWduZWQgaW50IHJlZ3VsYXRvcl9tYXRjaGVzX3NpemU7CiAKIAlucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBkZXYtPmRldi5wYXJlbnQtPm9mX25vZGUsICJyZWd1bGF0b3JzIik7CiAJaWYgKCFucCkgewpAQCAtMTU4LDggKzI3NCwxOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXQgPSBvZl9yZWd1bGF0b3JfbWF0Y2goJnBkZXYtPmRldiwgbnAsIG1heDE0NTc3X3JlZ3VsYXRvcl9tYXRjaGVzLAotCQkJTUFYMTQ1NzdfUkVHX01BWCk7CisJc3dpdGNoIChkZXZfdHlwZSkgeworCWNhc2UgTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzY6CisJCXJlZ3VsYXRvcl9tYXRjaGVzID0gbWF4Nzc4MzZfcmVndWxhdG9yX21hdGNoZXM7CisJCXJlZ3VsYXRvcl9tYXRjaGVzX3NpemUgPSBBUlJBWV9TSVpFKG1heDc3ODM2X3JlZ3VsYXRvcl9tYXRjaGVzKTsKKwkJYnJlYWs7CisJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVgxNDU3NzoKKwlkZWZhdWx0OgorCQlyZWd1bGF0b3JfbWF0Y2hlcyA9IG1heDE0NTc3X3JlZ3VsYXRvcl9tYXRjaGVzOworCQlyZWd1bGF0b3JfbWF0Y2hlc19zaXplID0gQVJSQVlfU0laRShtYXgxNDU3N19yZWd1bGF0b3JfbWF0Y2hlcyk7CisJfQorCisJcmV0ID0gb2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIG5wLCByZWd1bGF0b3JfbWF0Y2hlcywKKwkJCXJlZ3VsYXRvcl9tYXRjaGVzX3NpemUpOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBwYXJzaW5nIHJlZ3VsYXRvciBpbml0IGRhdGE6ICVkXG4iLCByZXQpOwogCWVsc2UKQEAgLTE3MCwzMSArMjk3LDc0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqbWF0Y2hfaW5pdF9kYXRhKGludCBpbmRleCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKm1hdGNoX2luaXRfZGF0YShpbnQgaW5kZXgsCisJCWVudW0gbWF4aW1fZGV2aWNlX3R5cGUgZGV2X3R5cGUpCiB7Ci0JcmV0dXJuIG1heDE0NTc3X3JlZ3VsYXRvcl9tYXRjaGVzW2luZGV4XS5pbml0X2RhdGE7CisJc3dpdGNoIChkZXZfdHlwZSkgeworCWNhc2UgTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzY6CisJCXJldHVybiBtYXg3NzgzNl9yZWd1bGF0b3JfbWF0Y2hlc1tpbmRleF0uaW5pdF9kYXRhOworCisJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVgxNDU3NzoKKwlkZWZhdWx0OgorCQlyZXR1cm4gbWF4MTQ1NzdfcmVndWxhdG9yX21hdGNoZXNbaW5kZXhdLmluaXRfZGF0YTsKKwl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICptYXRjaF9vZl9ub2RlKGludCBpbmRleCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICptYXRjaF9vZl9ub2RlKGludCBpbmRleCwKKwkJZW51bSBtYXhpbV9kZXZpY2VfdHlwZSBkZXZfdHlwZSkKIHsKLQlyZXR1cm4gbWF4MTQ1NzdfcmVndWxhdG9yX21hdGNoZXNbaW5kZXhdLm9mX25vZGU7CisJc3dpdGNoIChkZXZfdHlwZSkgeworCWNhc2UgTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzY6CisJCXJldHVybiBtYXg3NzgzNl9yZWd1bGF0b3JfbWF0Y2hlc1tpbmRleF0ub2Zfbm9kZTsKKworCWNhc2UgTUFYSU1fREVWSUNFX1RZUEVfTUFYMTQ1Nzc6CisJZGVmYXVsdDoKKwkJcmV0dXJuIG1heDE0NTc3X3JlZ3VsYXRvcl9tYXRjaGVzW2luZGV4XS5vZl9ub2RlOworCX0KIH0KICNlbHNlIC8qIENPTkZJR19PRiAqLwotc3RhdGljIGludCBtYXgxNDU3N19yZWd1bGF0b3JfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgbWF4MTQ1NzdfcmVndWxhdG9yX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCWVudW0gbWF4aW1fZGV2aWNlX3R5cGUgZGV2X3R5cGUpCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICptYXRjaF9pbml0X2RhdGEoaW50IGluZGV4KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqbWF0Y2hfaW5pdF9kYXRhKGludCBpbmRleCwKKwkJZW51bSBtYXhpbV9kZXZpY2VfdHlwZSBkZXZfdHlwZSkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1hdGNoX29mX25vZGUoaW50IGluZGV4KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1hdGNoX29mX25vZGUoaW50IGluZGV4LAorCQllbnVtIG1heGltX2RldmljZV90eXBlIGRldl90eXBlKQogewogCXJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIENPTkZJR19PRiAqLwogCisvKioKKyAqIFJlZ2lzdGVycyBmb3IgcmVndWxhdG9ycyBvZiBtYXg3NzgzNiB1c2UgZGlmZmVyZW50IEkyQyBzbGF2ZSBhZGRyZXNzZXMgc28KKyAqIGRpZmZlcmVudCByZWdtYXBzIG11c3QgYmUgdXNlZCBmb3IgdGhlbS4KKyAqCisgKiBSZXR1cm5zIHByb3BlciByZWdtYXAgZm9yIGFjY2Vzc2luZyByZWd1bGF0b3IgcGFzc2VkIGJ5IGlkLgorICovCitzdGF0aWMgc3RydWN0IHJlZ21hcCAqbWF4MTQ1NzdfZ2V0X3JlZ21hcChzdHJ1Y3QgbWF4MTQ1NzcgKm1heDE0NTc3LAorCQlpbnQgcmVnX2lkKQoreworCXN3aXRjaCAobWF4MTQ1NzctPmRldl90eXBlKSB7CisJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVg3NzgzNjoKKwkJc3dpdGNoIChyZWdfaWQpIHsKKwkJY2FzZSBNQVg3NzgzNl9TQUZFT1VUIC4uLiBNQVg3NzgzNl9DSEFSR0VSOgorCQkJcmV0dXJuIG1heDE0NTc3LT5yZWdtYXA7CisJCWRlZmF1bHQ6CisJCQkvKiBNQVg3NzgzNl9MRE8xIC4uLiBNQVg3NzgzNl9MRE8yICovCisJCQlyZXR1cm4gbWF4MTQ1NzctPnJlZ21hcF9wbWljOworCQl9CisKKwljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDE0NTc3OgorCWRlZmF1bHQ6CisJCXJldHVybiBtYXgxNDU3Ny0+cmVnbWFwOworCX0KK30KIAogc3RhdGljIGludCBtYXgxNDU3N19yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTIwMiwxNSArMzcyLDI5IEBACiAJc3RydWN0IG1heDE0NTc3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShtYXgxNDU3Ny0+ZGV2KTsKIAlpbnQgaSwgcmV0OwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHt9OworCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqc3VwcG9ydGVkX3JlZ3VsYXRvcnM7CisJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yZWd1bGF0b3JzX3NpemU7CisJZW51bSBtYXhpbV9kZXZpY2VfdHlwZSBkZXZfdHlwZSA9IG1heDE0NTc3LT5kZXZfdHlwZTsKIAotCXJldCA9IG1heDE0NTc3X3JlZ3VsYXRvcl9kdF9wYXJzZV9wZGF0YShwZGV2KTsKKwlyZXQgPSBtYXgxNDU3N19yZWd1bGF0b3JfZHRfcGFyc2VfcGRhdGEocGRldiwgZGV2X3R5cGUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQljb25maWcuZGV2ID0gJnBkZXYtPmRldjsKLQljb25maWcucmVnbWFwID0gbWF4MTQ1NzctPnJlZ21hcDsKKwlzd2l0Y2ggKGRldl90eXBlKSB7CisJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVg3NzgzNjoKKwkJc3VwcG9ydGVkX3JlZ3VsYXRvcnMgPSBtYXg3NzgzNl9zdXBwb3J0ZWRfcmVndWxhdG9yczsKKwkJc3VwcG9ydGVkX3JlZ3VsYXRvcnNfc2l6ZSA9IEFSUkFZX1NJWkUobWF4Nzc4MzZfc3VwcG9ydGVkX3JlZ3VsYXRvcnMpOworCQlicmVhazsKKwljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDE0NTc3OgorCWRlZmF1bHQ6CisJCXN1cHBvcnRlZF9yZWd1bGF0b3JzID0gbWF4MTQ1Nzdfc3VwcG9ydGVkX3JlZ3VsYXRvcnM7CisJCXN1cHBvcnRlZF9yZWd1bGF0b3JzX3NpemUgPSBBUlJBWV9TSVpFKG1heDE0NTc3X3N1cHBvcnRlZF9yZWd1bGF0b3JzKTsKKwl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRfcmVndWxhdG9ycyk7IGkrKykgeworCWNvbmZpZy5kZXYgPSAmcGRldi0+ZGV2OworCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDE0NTc3OworCisJZm9yIChpID0gMDsgaSA8IHN1cHBvcnRlZF9yZWd1bGF0b3JzX3NpemU7IGkrKykgewogCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogCQkvKgogCQkgKiBJbmRleCBvZiBzdXBwb3J0ZWRfcmVndWxhdG9yc1tdIGlzIGFsc28gdGhlIGlkIGFuZCBtdXN0CkBAIC0yMjAsMTcgKzQwNCwxOSBAQAogCQkJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLmluaXRkYXRhOwogCQkJY29uZmlnLm9mX25vZGUgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5vZl9ub2RlOwogCQl9IGVsc2UgewotCQkJY29uZmlnLmluaXRfZGF0YSA9IG1hdGNoX2luaXRfZGF0YShpKTsKLQkJCWNvbmZpZy5vZl9ub2RlID0gbWF0Y2hfb2Zfbm9kZShpKTsKKwkJCWNvbmZpZy5pbml0X2RhdGEgPSBtYXRjaF9pbml0X2RhdGEoaSwgZGV2X3R5cGUpOworCQkJY29uZmlnLm9mX25vZGUgPSBtYXRjaF9vZl9ub2RlKGksIGRldl90eXBlKTsKIAkJfQorCQljb25maWcucmVnbWFwID0gbWF4MTQ1NzdfZ2V0X3JlZ21hcChtYXgxNDU3NywKKwkJCQlzdXBwb3J0ZWRfcmVndWxhdG9yc1tpXS5pZCk7CiAKIAkJcmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkmc3VwcG9ydGVkX3JlZ3VsYXRvcnNbaV0sICZjb25maWcpOwogCQlpZiAoSVNfRVJSKHJlZ3VsYXRvcikpIHsKIAkJCXJldCA9IFBUUl9FUlIocmVndWxhdG9yKTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJIlJlZ3VsYXRvciBpbml0IGZhaWxlZCBmb3IgSUQgJWQgd2l0aCBlcnJvcjogJWRcbiIsCi0JCQkJCWksIHJldCk7CisJCQkJCSJSZWd1bGF0b3IgaW5pdCBmYWlsZWQgZm9yICVkLyVzIHdpdGggZXJyb3I6ICVkXG4iLAorCQkJCQlpLCBzdXBwb3J0ZWRfcmVndWxhdG9yc1tpXS5uYW1lLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTIzOCwyMCArNDI0LDQxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbWF4MTQ1NzdfcmVndWxhdG9yX2lkW10gPSB7CisJeyAibWF4MTQ1NzctcmVndWxhdG9yIiwgTUFYSU1fREVWSUNFX1RZUEVfTUFYMTQ1NzcsIH0sCisJeyAibWF4Nzc4MzYtcmVndWxhdG9yIiwgTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzYsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgbWF4MTQ1NzdfcmVndWxhdG9yX2lkKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWF4MTQ1NzdfcmVndWxhdG9yX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJICAgLm5hbWUgPSAibWF4MTQ1NzctcmVndWxhdG9yIiwKIAkJICAgfSwKLQkucHJvYmUJPSBtYXgxNDU3N19yZWd1bGF0b3JfcHJvYmUsCisJLnByb2JlCQk9IG1heDE0NTc3X3JlZ3VsYXRvcl9wcm9iZSwKKwkuaWRfdGFibGUJPSBtYXgxNDU3N19yZWd1bGF0b3JfaWQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYXgxNDU3N19yZWd1bGF0b3JfaW5pdCh2b2lkKQogeworCS8qIENoZWNrIGZvciB2YWxpZCB2YWx1ZXMgZm9yIGNoYXJnZXIgKi8KIAlCVUlMRF9CVUdfT04oTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfSElHSF9TVEFSVCArCiAJCQlNQVgxNDU3N19SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9ISUdIX1NURVAgKiAweGYgIT0KIAkJCU1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX01BWCk7Ci0JQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoc3VwcG9ydGVkX3JlZ3VsYXRvcnMpICE9IE1BWDE0NTc3X1JFR19NQVgpOworCUJVSUxEX0JVR19PTihNQVg3NzgzNl9SRUdVTEFUT1JfQ1VSUkVOVF9MSU1JVF9ISUdIX1NUQVJUICsKKwkJCU1BWDc3ODM2X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RFUCAqIDB4ZiAhPQorCQkJTUFYNzc4MzZfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUFYKTsKKwkvKiBWYWxpZCBjaGFyZ2VyIGN1cnJlbnQgdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGVhY2ggY2hpcHNldCAqLworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKG1heGltX2NoYXJnZXJfY3VycmVudHMpICE9IE1BWElNX0RFVklDRV9UWVBFX05VTSk7CisKKwlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShtYXgxNDU3N19zdXBwb3J0ZWRfcmVndWxhdG9ycykgIT0gTUFYMTQ1NzdfUkVHVUxBVE9SX05VTSk7CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobWF4Nzc4MzZfc3VwcG9ydGVkX3JlZ3VsYXRvcnMpICE9IE1BWDc3ODM2X1JFR1VMQVRPUl9OVU0pOworCisJQlVJTERfQlVHX09OKE1BWDc3ODM2X1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9NSU4gKworCQkJKE1BWDc3ODM2X1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQICoKKwkJCSAgKE1BWDc3ODM2X1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQU19OVU0gLSAxKSkgIT0KKwkJCU1BWDc3ODM2X1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9NQVgpOwogCiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWF4MTQ1NzdfcmVndWxhdG9yX2RyaXZlcik7CiB9CkBAIC0yNjQsNiArNDcxLDYgQEAKIG1vZHVsZV9leGl0KG1heDE0NTc3X3JlZ3VsYXRvcl9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1BWElNIDE0NTc3IHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWF4aW0gMTQ1NzcvNzc4MzYgcmVndWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptYXgxNDU3Ny1yZWd1bGF0b3IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYwppbmRleCAzMTcyZGE4Li5jOGJkZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY0OS5jCkBAIC0xNjEsMTAgKzE2MSw4IEBACiAKIAlpbmZvID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXg4NjQ5X3JlZ3VsYXRvcl9pbmZvKSwKIAkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBlbm91Z2ggbWVtb3J5XG4iKTsKKwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWluZm8tPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJm1heDg2NDlfcmVnbWFwX2NvbmZpZyk7CiAJaWYgKElTX0VSUihpbmZvLT5yZWdtYXApKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKaW5kZXggZDkyMGY1YS4uYzI3OTJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtYXg4OTUyX2R0X21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtYXg4OTUyX2R0X21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg4OTUyIiB9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmMKaW5kZXggZWE0ZjM2Zi4uZWU1ZTY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmMKQEAgLTE5LDkgKzE5LDcgQEAKIHN0YXRpYyB2b2lkIG9mX2dldF9yZWd1bGF0aW9uX2NvbnN0cmFpbnRzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICoqaW5pdF9kYXRhKQogewotCWNvbnN0IF9fYmUzMiAqbWluX3VWLCAqbWF4X3VWLCAqdVZfb2Zmc2V0OwotCWNvbnN0IF9fYmUzMiAqbWluX3VBLCAqbWF4X3VBLCAqcmFtcF9kZWxheTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJY29uc3QgX19iZTMyICptaW5fdVYsICptYXhfdVY7CiAJc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzID0gJigqaW5pdF9kYXRhKS0+Y29uc3RyYWludHM7CiAJaW50IHJldDsKIAl1MzIgcHZhbDsKQEAgLTQyLDM2ICs0MCwyOSBAQAogCWlmIChtaW5fdVYgJiYgbWF4X3VWICYmIGNvbnN0cmFpbnRzLT5taW5fdVYgPT0gY29uc3RyYWludHMtPm1heF91VikKIAkJY29uc3RyYWludHMtPmFwcGx5X3VWID0gdHJ1ZTsKIAotCXVWX29mZnNldCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZ3VsYXRvci1taWNyb3ZvbHQtb2Zmc2V0IiwgTlVMTCk7Ci0JaWYgKHVWX29mZnNldCkKLQkJY29uc3RyYWludHMtPnVWX29mZnNldCA9IGJlMzJfdG9fY3B1KCp1Vl9vZmZzZXQpOwotCW1pbl91QSA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZ3VsYXRvci1taW4tbWljcm9hbXAiLCBOVUxMKTsKLQlpZiAobWluX3VBKQotCQljb25zdHJhaW50cy0+bWluX3VBID0gYmUzMl90b19jcHUoKm1pbl91QSk7Ci0JbWF4X3VBID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVndWxhdG9yLW1heC1taWNyb2FtcCIsIE5VTEwpOwotCWlmIChtYXhfdUEpCi0JCWNvbnN0cmFpbnRzLT5tYXhfdUEgPSBiZTMyX3RvX2NwdSgqbWF4X3VBKTsKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVndWxhdG9yLW1pY3Jvdm9sdC1vZmZzZXQiLCAmcHZhbCkpCisJCWNvbnN0cmFpbnRzLT51Vl9vZmZzZXQgPSBwdmFsOworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZWd1bGF0b3ItbWluLW1pY3JvYW1wIiwgJnB2YWwpKQorCQljb25zdHJhaW50cy0+bWluX3VBID0gcHZhbDsKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVndWxhdG9yLW1heC1taWNyb2FtcCIsICZwdmFsKSkKKwkJY29uc3RyYWludHMtPm1heF91QSA9IHB2YWw7CiAKIAkvKiBDdXJyZW50IGNoYW5nZSBwb3NzaWJsZT8gKi8KIAlpZiAoY29uc3RyYWludHMtPm1pbl91QSAhPSBjb25zdHJhaW50cy0+bWF4X3VBKQogCQljb25zdHJhaW50cy0+dmFsaWRfb3BzX21hc2sgfD0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5UOwogCi0JaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJyZWd1bGF0b3ItYm9vdC1vbiIsIE5VTEwpKQotCQljb25zdHJhaW50cy0+Ym9vdF9vbiA9IHRydWU7Ci0KLQlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInJlZ3VsYXRvci1hbHdheXMtb24iLCBOVUxMKSkKLQkJY29uc3RyYWludHMtPmFsd2F5c19vbiA9IHRydWU7Ci0JZWxzZSAvKiBzdGF0dXMgY2hhbmdlIHNob3VsZCBiZSBwb3NzaWJsZSBpZiBub3QgYWx3YXlzIG9uLiAqLworCWNvbnN0cmFpbnRzLT5ib290X29uID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicmVndWxhdG9yLWJvb3Qtb24iKTsKKwljb25zdHJhaW50cy0+YWx3YXlzX29uID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicmVndWxhdG9yLWFsd2F5cy1vbiIpOworCWlmICghY29uc3RyYWludHMtPmFsd2F5c19vbikgLyogc3RhdHVzIGNoYW5nZSBzaG91bGQgYmUgcG9zc2libGUuICovCiAJCWNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayB8PSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUzsKIAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJyZWd1bGF0b3ItYWxsb3ctYnlwYXNzIikpCiAJCWNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayB8PSBSRUdVTEFUT1JfQ0hBTkdFX0JZUEFTUzsKIAotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCAicmVndWxhdG9yLXJhbXAtZGVsYXkiLCBOVUxMKTsKLQlpZiAocHJvcCAmJiBwcm9wLT52YWx1ZSkgewotCQlyYW1wX2RlbGF5ID0gcHJvcC0+dmFsdWU7Ci0JCWlmICgqcmFtcF9kZWxheSkKLQkJCWNvbnN0cmFpbnRzLT5yYW1wX2RlbGF5ID0gYmUzMl90b19jcHUoKnJhbXBfZGVsYXkpOworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVndWxhdG9yLXJhbXAtZGVsYXkiLCAmcHZhbCk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKHB2YWwpCisJCQljb25zdHJhaW50cy0+cmFtcF9kZWxheSA9IHB2YWw7CiAJCWVsc2UKIAkJCWNvbnN0cmFpbnRzLT5yYW1wX2Rpc2FibGUgPSB0cnVlOwogCX0KQEAgLTEwNiw2ICs5NywyMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEpOwogCitzdHJ1Y3QgZGV2bV9vZl9yZWd1bGF0b3JfbWF0Y2hlcyB7CisJc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqbWF0Y2hlczsKKwl1bnNpZ25lZCBpbnQgbnVtX21hdGNoZXM7Cit9OworCitzdGF0aWMgdm9pZCBkZXZtX29mX3JlZ3VsYXRvcl9wdXRfbWF0Y2hlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKK3sKKwlzdHJ1Y3QgZGV2bV9vZl9yZWd1bGF0b3JfbWF0Y2hlcyAqZGV2bV9tYXRjaGVzID0gcmVzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldm1fbWF0Y2hlcy0+bnVtX21hdGNoZXM7IGkrKykKKwkJb2Zfbm9kZV9wdXQoZGV2bV9tYXRjaGVzLT5tYXRjaGVzW2ldLm9mX25vZGUpOworfQorCiAvKioKICAqIG9mX3JlZ3VsYXRvcl9tYXRjaCAtIGV4dHJhY3QgbXVsdGlwbGUgcmVndWxhdG9yIGluaXQgZGF0YSBmcm9tIGRldmljZSB0cmVlLgogICogQGRldjogZGV2aWNlIHJlcXVlc3RpbmcgdGhlIGRhdGEKQEAgLTExOSw3ICsxMjQsOCBAQAogICogcmVndWxhdG9yLiBUaGUgZGF0YSBwYXJzZWQgZnJvbSBhIGNoaWxkIG5vZGUgd2lsbCBiZSBtYXRjaGVkIHRvIGEgcmVndWxhdG9yCiAgKiBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlcHJlY2F0ZWQgcHJvcGVydHkgcmVndWxhdG9yLWNvbXBhdGlibGUgaWYgcHJlc2VudCwKICAqIG9yIG90aGVyd2lzZSB0aGUgY2hpbGQgbm9kZSdzIG5hbWUuIE5vdGUgdGhhdCB0aGUgbWF0Y2ggdGFibGUgaXMgbW9kaWZpZWQKLSAqIGluIHBsYWNlLgorICogaW4gcGxhY2UgYW5kIGFuIGFkZGl0aW9uYWwgb2Zfbm9kZSByZWZlcmVuY2UgaXMgdGFrZW4gZm9yIGVhY2ggbWF0Y2hlZAorICogcmVndWxhdG9yLgogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBtYXRjaGVzIGZvdW5kIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCkBAIC0xMzEsMTAgKzEzNywyMiBAQAogCXVuc2lnbmVkIGludCBpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKKwlzdHJ1Y3QgZGV2bV9vZl9yZWd1bGF0b3JfbWF0Y2hlcyAqZGV2bV9tYXRjaGVzOwogCiAJaWYgKCFkZXYgfHwgIW5vZGUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2bV9tYXRjaGVzID0gZGV2cmVzX2FsbG9jKGRldm1fb2ZfcmVndWxhdG9yX3B1dF9tYXRjaGVzLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGRldm1fb2ZfcmVndWxhdG9yX21hdGNoZXMpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldm1fbWF0Y2hlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZtX21hdGNoZXMtPm1hdGNoZXMgPSBtYXRjaGVzOworCWRldm1fbWF0Y2hlcy0+bnVtX21hdGNoZXMgPSBudW1fbWF0Y2hlczsKKworCWRldnJlc19hZGQoZGV2LCBkZXZtX21hdGNoZXMpOworCiAJZm9yIChpID0gMDsgaSA8IG51bV9tYXRjaGVzOyBpKyspIHsKIAkJc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqbWF0Y2ggPSAmbWF0Y2hlc1tpXTsKIAkJbWF0Y2gtPmluaXRfZGF0YSA9IE5VTEw7CkBAIC0xNjIsNyArMTgwLDcgQEAKIAkJCQkJY2hpbGQtPm5hbWUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJbWF0Y2gtPm9mX25vZGUgPSBjaGlsZDsKKwkJCW1hdGNoLT5vZl9ub2RlID0gb2Zfbm9kZV9nZXQoY2hpbGQpOwogCQkJY291bnQrKzsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9wYWxtYXMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wYWxtYXMtcmVndWxhdG9yLmMKaW5kZXggOWM2MmIxZC4uODY0ZWQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGFsbWFzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3BhbG1hcy1yZWd1bGF0b3IuYwpAQCAtMzYsNiArMzYsMTggQEAKIAlpbnQJc2xlZXBfaWQ7CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9saW5lYXJfcmFuZ2Ugc21wc19sb3dfcmFuZ2VzW10gPSB7CisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSg1MDAwMDAsIDB4MSwgMHg2LCAwKSwKKwlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDUxMDAwMCwgMHg3LCAweDc5LCAxMDAwMCksCisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxNjUwMDAwLCAweDdBLCAweDdmLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2xpbmVhcl9yYW5nZSBzbXBzX2hpZ2hfcmFuZ2VzW10gPSB7CisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxMDAwMDAwLCAweDEsIDB4NiwgMCksCisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxMDIwMDAwLCAweDcsIDB4NzksIDIwMDAwKSwKKwlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDMzMDAwMDAsIDB4N0EsIDB4N2YsIDApLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdzX2luZm8gcGFsbWFzX3JlZ3NfaW5mb1tdID0gewogCXsKIAkJLm5hbWUJCT0gIlNNUFMxMiIsCkBAIC0yODAsNTQgKzI5Miw2IEBACiAJcmV0dXJuIHJlZ21hcF93cml0ZShwYWxtYXMtPnJlZ21hcFtSRUdVTEFUT1JfU0xBVkVdLCBhZGRyLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgcGFsbWFzX2lzX2VuYWJsZWRfc21wcyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQotewotCXN0cnVjdCBwYWxtYXNfcG1pYyAqcG1pYyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaWQgPSByZGV2X2dldF9pZChkZXYpOwotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlwYWxtYXNfc21wc19yZWFkKHBtaWMtPnBhbG1hcywgcGFsbWFzX3JlZ3NfaW5mb1tpZF0uY3RybF9hZGRyLCAmcmVnKTsKLQotCXJlZyAmPSBQQUxNQVNfU01QUzEyX0NUUkxfU1RBVFVTX01BU0s7Ci0JcmVnID4+PSBQQUxNQVNfU01QUzEyX0NUUkxfU1RBVFVTX1NISUZUOwotCi0JcmV0dXJuICEhKHJlZyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbWFzX2VuYWJsZV9zbXBzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IHBhbG1hc19wbWljICpwbWljID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpZCA9IHJkZXZfZ2V0X2lkKGRldik7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXBhbG1hc19zbXBzX3JlYWQocG1pYy0+cGFsbWFzLCBwYWxtYXNfcmVnc19pbmZvW2lkXS5jdHJsX2FkZHIsICZyZWcpOwotCi0JcmVnICY9IH5QQUxNQVNfU01QUzEyX0NUUkxfTU9ERV9BQ1RJVkVfTUFTSzsKLQlpZiAocG1pYy0+Y3VycmVudF9yZWdfbW9kZVtpZF0pCi0JCXJlZyB8PSBwbWljLT5jdXJyZW50X3JlZ19tb2RlW2lkXTsKLQllbHNlCi0JCXJlZyB8PSBTTVBTX0NUUkxfTU9ERV9PTjsKLQotCXBhbG1hc19zbXBzX3dyaXRlKHBtaWMtPnBhbG1hcywgcGFsbWFzX3JlZ3NfaW5mb1tpZF0uY3RybF9hZGRyLCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbWFzX2Rpc2FibGVfc21wcyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQotewotCXN0cnVjdCBwYWxtYXNfcG1pYyAqcG1pYyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaWQgPSByZGV2X2dldF9pZChkZXYpOwotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlwYWxtYXNfc21wc19yZWFkKHBtaWMtPnBhbG1hcywgcGFsbWFzX3JlZ3NfaW5mb1tpZF0uY3RybF9hZGRyLCAmcmVnKTsKLQotCXJlZyAmPSB+UEFMTUFTX1NNUFMxMl9DVFJMX01PREVfQUNUSVZFX01BU0s7Ci0KLQlwYWxtYXNfc21wc193cml0ZShwbWljLT5wYWxtYXMsIHBhbG1hc19yZWdzX2luZm9baWRdLmN0cmxfYWRkciwgcmVnKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHBhbG1hc19zZXRfbW9kZV9zbXBzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBtb2RlKQogewogCXN0cnVjdCBwYWxtYXNfcG1pYyAqcG1pYyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTM4Miw4MSArMzQ2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWxtYXNfbGlzdF92b2x0YWdlX3NtcHMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKLQkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCi17Ci0Jc3RydWN0IHBhbG1hc19wbWljICpwbWljID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpZCA9IHJkZXZfZ2V0X2lkKGRldik7Ci0JaW50IG11bHQgPSAxOwotCi0JLyogUmVhZCB0aGUgbXVsdGlwbGllciBzZXQgaW4gVlNFTCByZWdpc3RlciB0byByZXR1cm4KLQkgKiB0aGUgY29ycmVjdCB2b2x0YWdlLgotCSAqLwotCWlmIChwbWljLT5yYW5nZVtpZF0pCi0JCW11bHQgPSAyOwotCi0JaWYgKHNlbGVjdG9yID09IDApCi0JCXJldHVybiAwOwotCWVsc2UgaWYgKHNlbGVjdG9yIDwgNikKLQkJcmV0dXJuIDUwMDAwMCAqIG11bHQ7Ci0JZWxzZQotCQkvKiBWb2x0YWdlIGlzIGxpbmVhciBtYXBwaW5nIHN0YXJ0aW5nIGZyb20gc2VsZWN0b3IgNiwKLQkJICogdm9sdCA9ICgwLjQ5ViArICgoc2VsZWN0b3IgLSA1KSAqIDAuMDFWKSkgKiBSQU5HRQotCQkgKiBSQU5HRSBpcyBlaXRoZXIgeDEgb3IgeDIKLQkJICovCi0JCXJldHVybiAoNDkwMDAwICsgKChzZWxlY3RvciAtIDUpICogMTAwMDApKSAqIG11bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbWFzX21hcF92b2x0YWdlX3NtcHMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCWludCBtaW5fdVYsIGludCBtYXhfdVYpCi17Ci0Jc3RydWN0IHBhbG1hc19wbWljICpwbWljID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQlpbnQgcmV0LCB2b2x0YWdlOwotCi0JaWYgKG1pbl91ViA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChwbWljLT5yYW5nZVtpZF0pIHsgLyogUkFOR0UgaXMgeDIgKi8KLQkJaWYgKG1pbl91ViA8IDEwMDAwMDApCi0JCQltaW5fdVYgPSAxMDAwMDAwOwotCQlyZXQgPSBESVZfUk9VTkRfVVAobWluX3VWIC0gMTAwMDAwMCwgMjAwMDApICsgNjsKLQl9IGVsc2UgewkJLyogUkFOR0UgaXMgeDEgKi8KLQkJaWYgKG1pbl91ViA8IDUwMDAwMCkKLQkJCW1pbl91ViA9IDUwMDAwMDsKLQkJcmV0ID0gRElWX1JPVU5EX1VQKG1pbl91ViAtIDUwMDAwMCwgMTAwMDApICsgNjsKLQl9Ci0KLQkvKiBNYXAgYmFjayBpbnRvIGEgdm9sdGFnZSB0byB2ZXJpZnkgd2UncmUgc3RpbGwgaW4gYm91bmRzICovCi0Jdm9sdGFnZSA9IHBhbG1hc19saXN0X3ZvbHRhZ2Vfc21wcyhyZGV2LCByZXQpOwotCWlmICh2b2x0YWdlIDwgbWluX3VWIHx8IHZvbHRhZ2UgPiBtYXhfdVYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwYWxtYV9zbXBzX3NldF92b2x0YWdlX3NtcHNfdGltZV9zZWwoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JdW5zaWduZWQgaW50IG9sZF9zZWxlY3RvciwgdW5zaWduZWQgaW50IG5ld19zZWxlY3RvcikKLXsKLQlzdHJ1Y3QgcGFsbWFzX3BtaWMgKnBtaWMgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwotCWludCBvbGRfdXYsIG5ld191djsKLQl1bnNpZ25lZCBpbnQgcmFtcF9kZWxheSA9IHBtaWMtPnJhbXBfZGVsYXlbaWRdOwotCi0JaWYgKCFyYW1wX2RlbGF5KQotCQlyZXR1cm4gMDsKLQotCW9sZF91diA9IHBhbG1hc19saXN0X3ZvbHRhZ2Vfc21wcyhyZGV2LCBvbGRfc2VsZWN0b3IpOwotCWlmIChvbGRfdXYgPCAwKQotCQlyZXR1cm4gb2xkX3V2OwotCi0JbmV3X3V2ID0gcGFsbWFzX2xpc3Rfdm9sdGFnZV9zbXBzKHJkZXYsIG5ld19zZWxlY3Rvcik7Ci0JaWYgKG5ld191diA8IDApCi0JCXJldHVybiBuZXdfdXY7Ci0KLQlyZXR1cm4gRElWX1JPVU5EX1VQKGFicyhvbGRfdXYgLSBuZXdfdXYpLCByYW1wX2RlbGF5KTsKLX0KLQogc3RhdGljIGludCBwYWxtYXNfc21wc19zZXRfcmFtcF9kZWxheShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJIGludCByYW1wX2RlbGF5KQogewpAQCAtNDkzLDE2ICszODIsMTYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHBhbG1hc19vcHNfc21wcyA9IHsKLQkuaXNfZW5hYmxlZAkJPSBwYWxtYXNfaXNfZW5hYmxlZF9zbXBzLAotCS5lbmFibGUJCQk9IHBhbG1hc19lbmFibGVfc21wcywKLQkuZGlzYWJsZQkJPSBwYWxtYXNfZGlzYWJsZV9zbXBzLAorCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuZW5hYmxlCQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCiAJLnNldF9tb2RlCQk9IHBhbG1hc19zZXRfbW9kZV9zbXBzLAogCS5nZXRfbW9kZQkJPSBwYWxtYXNfZ2V0X21vZGVfc21wcywKIAkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAotCS5saXN0X3ZvbHRhZ2UJCT0gcGFsbWFzX2xpc3Rfdm9sdGFnZV9zbXBzLAotCS5tYXBfdm9sdGFnZQkJPSBwYWxtYXNfbWFwX3ZvbHRhZ2Vfc21wcywKLQkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSBwYWxtYV9zbXBzX3NldF92b2x0YWdlX3NtcHNfdGltZV9zZWwsCisJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhcl9yYW5nZSwKKwkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhcl9yYW5nZSwKKwkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCiAJLnNldF9yYW1wX2RlbGF5CQk9IHBhbG1hc19zbXBzX3NldF9yYW1wX2RlbGF5LAogfTsKIApAQCAtNTExLDkgKzQwMCw5IEBACiAJLmdldF9tb2RlCQk9IHBhbG1hc19nZXRfbW9kZV9zbXBzLAogCS5nZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCi0JLmxpc3Rfdm9sdGFnZQkJPSBwYWxtYXNfbGlzdF92b2x0YWdlX3NtcHMsCi0JLm1hcF92b2x0YWdlCQk9IHBhbG1hc19tYXBfdm9sdGFnZV9zbXBzLAotCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHBhbG1hX3NtcHNfc2V0X3ZvbHRhZ2Vfc21wc190aW1lX3NlbCwKKwkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyX3JhbmdlLAorCS5tYXBfdm9sdGFnZQkJPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyX3JhbmdlLAorCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKIAkuc2V0X3JhbXBfZGVsYXkJCT0gcGFsbWFzX3NtcHNfc2V0X3JhbXBfZGVsYXksCiB9OwogCkBAIC0xMDQyLDEyICs5MzEsMTcgQEAKIAkJCSAqIHJhbmdlcy4gUmVhZCB0aGUgY3VycmVudCBzbXBzIG1vZGUgZm9yIGxhdGVyIHVzZS4KIAkJCSAqLwogCQkJYWRkciA9IHBhbG1hc19yZWdzX2luZm9baWRdLnZzZWxfYWRkcjsKKwkJCXBtaWMtPmRlc2NbaWRdLm5fbGluZWFyX3JhbmdlcyA9IDM7CiAKIAkJCXJldCA9IHBhbG1hc19zbXBzX3JlYWQocG1pYy0+cGFsbWFzLCBhZGRyLCAmcmVnKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWlmIChyZWcgJiBQQUxNQVNfU01QUzEyX1ZPTFRBR0VfUkFOR0UpCiAJCQkJcG1pYy0+cmFuZ2VbaWRdID0gMTsKKwkJCWlmIChwbWljLT5yYW5nZVtpZF0pCisJCQkJcG1pYy0+ZGVzY1tpZF0ubGluZWFyX3JhbmdlcyA9IHNtcHNfaGlnaF9yYW5nZXM7CisJCQllbHNlCisJCQkJcG1pYy0+ZGVzY1tpZF0ubGluZWFyX3JhbmdlcyA9IHNtcHNfbG93X3JhbmdlczsKIAogCQkJaWYgKHJlZ19pbml0ICYmIHJlZ19pbml0LT5yb29mX2Zsb29yKQogCQkJCXBtaWMtPmRlc2NbaWRdLm9wcyA9CkBAIC0xMTk5LDcgKzEwOTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9wYWxtYXNfbWF0Y2hfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9wYWxtYXNfbWF0Y2hfdGJsW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxwYWxtYXMtcG1pYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ0aSx0d2w2MDM1LXBtaWMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAidGksdHdsNjAzNi1wbWljIiwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BiaWFzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGJpYXMtcmVndWxhdG9yLmMKaW5kZXggNmQzOGJlMy4uNmQwMmQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGJpYXMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcGJpYXMtcmVndWxhdG9yLmMKQEAgLTQ5LDMzICs0OSwxMyBAQAogCTMwMDAwMDAKIH07CiAKLXN0YXRpYyBpbnQgcGJpYXNfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlzdHJ1Y3QgcGJpYXNfcmVndWxhdG9yX2RhdGEgKmRhdGEgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWNvbnN0IHN0cnVjdCBwYmlhc19yZWdfaW5mbyAqaW5mbyA9IGRhdGEtPmluZm87Ci0KLQlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPnN5c2NvbiwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKLQkJCQkgIGluZm8tPmVuYWJsZV9tYXNrLCBpbmZvLT5lbmFibGUpOwotfQotCi1zdGF0aWMgaW50IHBiaWFzX3JlZ3VsYXRvcl9pc19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0Jc3RydWN0IHBiaWFzX3JlZ3VsYXRvcl9kYXRhICpkYXRhID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQljb25zdCBzdHJ1Y3QgcGJpYXNfcmVnX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOwotCWludCB2YWx1ZTsKLQotCXJlZ21hcF9yZWFkKGRhdGEtPnN5c2NvbiwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywgJnZhbHVlKTsKLQotCXJldHVybiAodmFsdWUgJiBpbmZvLT5lbmFibGVfbWFzaykgPT0gaW5mby0+ZW5hYmxlOwotfQotCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcGJpYXNfcmVndWxhdG9yX3ZvbHRhZ2Vfb3BzID0gewogCS5saXN0X3ZvbHRhZ2UgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX3RhYmxlLAogCS5nZXRfdm9sdGFnZV9zZWwgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2Vfc2VsID0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCi0JLmVuYWJsZSA9IHBiaWFzX3JlZ3VsYXRvcl9lbmFibGUsCisJLmVuYWJsZSA9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAogCS5kaXNhYmxlID0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAotCS5pc19lbmFibGVkID0gcGJpYXNfcmVndWxhdG9yX2lzX2VuYWJsZSwKKwkuaXNfZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGJpYXNfcmVnX2luZm8gcGJpYXNfbW1jX29tYXAyNDMwID0gewpAQCAtMTQyLDEwICsxMjIsOCBAQAogCiAJZHJ2ZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHBiaWFzX3JlZ3VsYXRvcl9kYXRhKQogCQkJICAgICAgICogY291bnQsIEdGUF9LRVJORUwpOwotCWlmIChkcnZkYXRhID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBkYXRhXG4iKTsKKwlpZiAoIWRydmRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXN5c2NvbiA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJzeXNjb24iKTsKIAlpZiAoSVNfRVJSKHN5c2NvbikpCkBAIC0xODAsNiArMTU4LDcgQEAKIAkJZHJ2ZGF0YVtkYXRhX2lkeF0uZGVzYy52c2VsX21hc2sgPSBpbmZvLT52bW9kZTsKIAkJZHJ2ZGF0YVtkYXRhX2lkeF0uZGVzYy5lbmFibGVfcmVnID0gcmVzLT5zdGFydDsKIAkJZHJ2ZGF0YVtkYXRhX2lkeF0uZGVzYy5lbmFibGVfbWFzayA9IGluZm8tPmVuYWJsZV9tYXNrOworCQlkcnZkYXRhW2RhdGFfaWR4XS5kZXNjLmVuYWJsZV92YWwgPSBpbmZvLT5lbmFibGU7CiAKIAkJY2ZnLmluaXRfZGF0YSA9IHBiaWFzX21hdGNoZXNbaWR4XS5pbml0X2RhdGE7CiAJCWNmZy5kcml2ZXJfZGF0YSA9ICZkcnZkYXRhW2RhdGFfaWR4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BmdXplMTAwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMKaW5kZXggNjdlNjc4Yy4uYzg3OWRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMKQEAgLTEyNSw2ICsxMjUsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHBmdXplMTAwX2ZpeGVkX3JlZ3VsYXRvcl9vcHMgPSB7CisJLmVuYWJsZSA9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlID0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkID0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAogCS5saXN0X3ZvbHRhZ2UgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKIH07CiAKQEAgLTEzNyw2ICsxNDAsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHBmdXplMTAwX3N3Yl9yZWd1bGF0b3Jfb3BzID0geworCS5lbmFibGUgPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZSA9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKIAkubGlzdF92b2x0YWdlID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV90YWJsZSwKIAkubWFwX3ZvbHRhZ2UgPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfYXNjZW5kLAogCS5zZXRfdm9sdGFnZV9zZWwgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKQEAgLTE4OSw2ICsxOTQsOCBAQAogCQkJLnZvbHRfdGFibGUgPSB2b2x0YWdlcywJXAogCQkJLnZzZWxfcmVnID0gKGJhc2UpLAlcCiAJCQkudnNlbF9tYXNrID0gKG1hc2spLAlcCisJCQkuZW5hYmxlX3JlZyA9IChiYXNlKSwJXAorCQkJLmVuYWJsZV9tYXNrID0gMHg0OCwJXAogCQl9LAlcCiAJfQogCkBAIC01MDIsNiArNTA5LDcgQEAKIAkJY29uZmlnLmluaXRfZGF0YSA9IGluaXRfZGF0YTsKIAkJY29uZmlnLmRyaXZlcl9kYXRhID0gcGZ1emVfY2hpcDsKIAkJY29uZmlnLm9mX25vZGUgPSBtYXRjaF9vZl9ub2RlKGkpOworCQljb25maWcuZW5hX2dwaW8gPSAtRUlOVkFMOwogCiAJCXBmdXplX2NoaXAtPnJlZ3VsYXRvcnNbaV0gPQogCQkJZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCBkZXNjLCAmY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3MybXBhMDEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBhMDEuYwppbmRleCBmMTlhMzBmLi5lZTgzYjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wYTAxLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczJtcGEwMS5jCkBAIC02MSw3ICs2MSw3IEBACiAJdW5zaWduZWQgaW50IHJhbXBfZGVsYXkgPSAwOwogCWludCBvbGRfdm9sdCwgbmV3X3ZvbHQ7CiAKLQlzd2l0Y2ggKHJkZXYtPmRlc2MtPmlkKSB7CisJc3dpdGNoIChyZGV2X2dldF9pZChyZGV2KSkgewogCWNhc2UgUzJNUEEwMV9CVUNLMjoKIAljYXNlIFMyTVBBMDFfQlVDSzQ6CiAJCXJhbXBfZGVsYXkgPSBzMm1wYTAxLT5yYW1wX2RlbGF5MjQ7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1bnNpZ25lZCBpbnQgcmFtcF9lbmFibGUgPSAxLCBlbmFibGVfc2hpZnQgPSAwOwogCWludCByZXQ7CiAKLQlzd2l0Y2ggKHJkZXYtPmRlc2MtPmlkKSB7CisJc3dpdGNoIChyZGV2X2dldF9pZChyZGV2KSkgewogCWNhc2UgUzJNUEEwMV9CVUNLMToKIAkJZW5hYmxlX3NoaWZ0ID0gUzJNUEEwMV9CVUNLMV9SQU1QX0VOX1NISUZUOwogCQlpZiAoIXJhbXBfZGVsYXkpIHsKQEAgLTExNiw3ICsxMTYsNiBAQAogCQkJcmFtcF9kZWxheSA9IHMybXBhMDEtPnJhbXBfZGVsYXkxNjsKIAogCQlyYW1wX3NoaWZ0ID0gUzJNUEEwMV9CVUNLMTZfUkFNUF9TSElGVDsKLQkJcmFtcF9yZWcgPSBTMk1QQTAxX1JFR19SQU1QMTsKIAkJYnJlYWs7CiAJY2FzZSBTMk1QQTAxX0JVQ0syOgogCQllbmFibGVfc2hpZnQgPSBTMk1QQTAxX0JVQ0syX1JBTVBfRU5fU0hJRlQ7CkBAIC0xOTIsMTEgKzE5MSwxNSBAQAogCWlmICghcmFtcF9lbmFibGUpCiAJCWdvdG8gcmFtcF9kaXNhYmxlOwogCi0JcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgUzJNUEEwMV9SRUdfUkFNUDEsCi0JCQkJIDEgPDwgZW5hYmxlX3NoaWZ0LCAxIDw8IGVuYWJsZV9zaGlmdCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZyZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHJhbXAgcmF0ZVxuIik7Ci0JCXJldHVybiByZXQ7CisJLyogUmFtcCBkZWxheSBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBvbmx5IGZvciBidWNrWzEyMzRdICovCisJaWYgKHJkZXZfZ2V0X2lkKHJkZXYpID49IFMyTVBBMDFfQlVDSzEgJiYKKwkJCXJkZXZfZ2V0X2lkKHJkZXYpIDw9IFMyTVBBMDFfQlVDSzQpIHsKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgUzJNUEEwMV9SRUdfUkFNUDEsCisJCQkJCSAxIDw8IGVuYWJsZV9zaGlmdCwgMSA8PCBlbmFibGVfc2hpZnQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZyZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHJhbXAgcmF0ZVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJcmFtcF92YWwgPSBnZXRfcmFtcF9kZWxheShyYW1wX2RlbGF5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwppbmRleCBlNzEzYzE2Li4wMmUyZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaD4KQEAgLTQ0LDYgKzQ1LDggQEAKIAkgKiB3YXMgZW5hYmxlZC4KIAkgKi8KIAl1bnNpZ25lZCBpbnQgczJtcHMxNF9zdXNwZW5kX3N0YXRlOjMwOworCS8qIEFycmF5IG9mIHNpemUgcmRldl9udW0gd2l0aCBHUElPLXMgZm9yIGV4dGVybmFsIHNsZWVwIGNvbnRyb2wgKi8KKwlpbnQgKmV4dF9jb250cm9sX2dwaW87CiB9OwogCiBzdGF0aWMgaW50IGdldF9yYW1wX2RlbGF5KGludCByYW1wX2RlbGF5KQpAQCAtMjAyLDExICsyMDUsMTYgQEAKIAlpZiAoIXJhbXBfZW5hYmxlKQogCQlnb3RvIHJhbXBfZGlzYWJsZTsKIAotCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIFMyTVBTMTFfUkVHX1JBTVAsCi0JCQkJIDEgPDwgZW5hYmxlX3NoaWZ0LCAxIDw8IGVuYWJsZV9zaGlmdCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZyZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHJhbXAgcmF0ZVxuIik7Ci0JCXJldHVybiByZXQ7CisJLyogUmFtcCBkZWxheSBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBvbmx5IGZvciBidWNrWzIzNDZdICovCisJaWYgKChyZGV2X2dldF9pZChyZGV2KSA+PSBTMk1QUzExX0JVQ0syICYmCisJCQlyZGV2X2dldF9pZChyZGV2KSA8PSBTMk1QUzExX0JVQ0s0KSB8fAorCQkJcmRldl9nZXRfaWQocmRldikgPT0gUzJNUFMxMV9CVUNLNikgIHsKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgUzJNUFMxMV9SRUdfUkFNUCwKKwkJCQkJIDEgPDwgZW5hYmxlX3NoaWZ0LCAxIDw8IGVuYWJsZV9zaGlmdCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnJkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgcmFtcCByYXRlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAlyYW1wX3ZhbCA9IGdldF9yYW1wX2RlbGF5KHJhbXBfZGVsYXkpOwpAQCAtNDA5LDYgKzQxNyw4IEBACiAKIAlpZiAoczJtcHMxMS0+czJtcHMxNF9zdXNwZW5kX3N0YXRlICYgKDEgPDwgcmRldl9nZXRfaWQocmRldikpKQogCQl2YWwgPSBTMk1QUzE0X0VOQUJMRV9TVVNQRU5EOworCWVsc2UgaWYgKGdwaW9faXNfdmFsaWQoczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3Bpb1tyZGV2X2dldF9pZChyZGV2KV0pKQorCQl2YWwgPSBTMk1QUzE0X0VOQUJMRV9FWFRfQ09OVFJPTDsKIAllbHNlCiAJCXZhbCA9IHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrOwogCkBAIC01NjUsMTIgKzU3NSw2MSBAQAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTRfYnVjazEyMzUoNSksCiB9OwogCitzdGF0aWMgaW50IHMybXBzMTRfcG1pY19lbmFibGVfZXh0X2NvbnRyb2woc3RydWN0IHMybXBzMTFfaW5mbyAqczJtcHMxMSwKKwkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCisJCQlyZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgUzJNUFMxNF9FTkFCTEVfRVhUX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBzMm1wczE0X3BtaWNfZHRfcGFyc2VfZXh0X2NvbnRyb2xfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoICpyZGF0YSwgc3RydWN0IHMybXBzMTFfaW5mbyAqczJtcHMxMSkKK3sKKwlpbnQgKmdwaW8gPSBzMm1wczExLT5leHRfY29udHJvbF9ncGlvOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB2YWxpZF9yZWd1bGF0b3JzWzNdID0geyBTMk1QUzE0X0xETzEwLCBTMk1QUzE0X0xETzExLAorCQlTMk1QUzE0X0xETzEyIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YWxpZF9yZWd1bGF0b3JzKTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCByZWcgPSB2YWxpZF9yZWd1bGF0b3JzW2ldOworCisJCWlmICghcmRhdGFbcmVnXS5pbml0X2RhdGEgfHwgIXJkYXRhW3JlZ10ub2Zfbm9kZSkKKwkJCWNvbnRpbnVlOworCisJCWdwaW9bcmVnXSA9IG9mX2dldF9uYW1lZF9ncGlvKHJkYXRhW3JlZ10ub2Zfbm9kZSwKKwkJCQkic2Ftc3VuZyxleHQtY29udHJvbC1ncGlvcyIsIDApOworCQlpZiAoZ3Bpb19pc192YWxpZChncGlvW3JlZ10pKQorCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiVXNpbmcgR1BJTyAlZCBmb3IgZXh0LWNvbnRyb2wgb3ZlciAlZC8lc1xuIiwKKwkJCQkJZ3Bpb1tyZWddLCByZWcsIHJkYXRhW3JlZ10ubmFtZSk7CisJfQorfQorCitzdGF0aWMgaW50IHMybXBzMTFfcG1pY19kdF9wYXJzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoICpyZGF0YSwgc3RydWN0IHMybXBzMTFfaW5mbyAqczJtcHMxMSwKKwkJZW51bSBzZWNfZGV2aWNlX3R5cGUgZGV2X3R5cGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyZWdfbnA7CisKKwlyZWdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwZGV2LT5kZXYucGFyZW50LT5vZl9ub2RlLCAicmVndWxhdG9ycyIpOworCWlmICghcmVnX25wKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBmaW5kIHJlZ3VsYXRvcnMgc3ViLW5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvZl9yZWd1bGF0b3JfbWF0Y2goJnBkZXYtPmRldiwgcmVnX25wLCByZGF0YSwgczJtcHMxMS0+cmRldl9udW0pOworCWlmIChkZXZfdHlwZSA9PSBTMk1QUzE0WCkKKwkJczJtcHMxNF9wbWljX2R0X3BhcnNlX2V4dF9jb250cm9sX2dwaW8ocGRldiwgcmRhdGEsIHMybXBzMTEpOworCisJb2Zfbm9kZV9wdXQocmVnX25wKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHMybXBzMTFfcG1pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzZWNfcG1pY19kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBzZWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBpb2Rldi0+cGRhdGE7CisJc3RydWN0IHNlY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IE5VTEw7CiAJc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqcmRhdGEgPSBOVUxMOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVnX25wID0gTlVMTDsKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjb25maWcgPSB7IH07CiAJc3RydWN0IHMybXBzMTFfaW5mbyAqczJtcHMxMTsKIAlpbnQgaSwgcmV0ID0gMDsKQEAgLTU5Nyw4ICs2NTYsMjEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfTsKIAorCXMybXBzMTEtPmV4dF9jb250cm9sX2dwaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCXNpemVvZigqczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbykgKiBzMm1wczExLT5yZGV2X251bSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbykKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoKKwkgKiAwIGlzIGEgdmFsaWQgR1BJTyBzbyBpbml0aWFsaXplIGFsbCBHUElPLXMgdG8gbmVnYXRpdmUgdmFsdWUKKwkgKiB0byBpbmRpY2F0ZSB0aGF0IGV4dGVybmFsIGNvbnRyb2wgd29uJ3QgYmUgdXNlZCBmb3IgdGhpcyByZWd1bGF0b3IuCisJICovCisJZm9yIChpID0gMDsgaSA8IHMybXBzMTEtPnJkZXZfbnVtOyBpKyspCisJCXMybXBzMTEtPmV4dF9jb250cm9sX2dwaW9baV0gPSAtRUlOVkFMOworCiAJaWYgKCFpb2Rldi0+ZGV2LT5vZl9ub2RlKSB7Ci0JCWlmIChwZGF0YSkgeworCQlpZiAoaW9kZXYtPnBkYXRhKSB7CisJCQlwZGF0YSA9IGlvZGV2LT5wZGF0YTsKIAkJCWdvdG8gY29tbW9uX3JlZzsKIAkJfSBlbHNlIHsKIAkJCWRldl9lcnIocGRldi0+ZGV2LnBhcmVudCwKQEAgLTYxNCwxNSArNjg2LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgczJtcHMxMS0+cmRldl9udW07IGkrKykKIAkJcmRhdGFbaV0ubmFtZSA9IHJlZ3VsYXRvcnNbaV0ubmFtZTsKIAotCXJlZ19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGlvZGV2LT5kZXYtPm9mX25vZGUsICJyZWd1bGF0b3JzIik7Ci0JaWYgKCFyZWdfbnApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGZpbmQgcmVndWxhdG9ycyBzdWItbm9kZVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gczJtcHMxMV9wbWljX2R0X3BhcnNlKHBkZXYsIHJkYXRhLCBzMm1wczExLCBkZXZfdHlwZSk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JfQotCi0Jb2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIHJlZ19ucCwgcmRhdGEsIHMybXBzMTEtPnJkZXZfbnVtKTsKLQlvZl9ub2RlX3B1dChyZWdfbnApOwogCiBjb21tb25fcmVnOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHMybXBzMTEpOwpAQCAtNjMwLDE2ICs2OTYsMTggQEAKIAljb25maWcuZGV2ID0gJnBkZXYtPmRldjsKIAljb25maWcucmVnbWFwID0gaW9kZXYtPnJlZ21hcF9wbWljOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IHMybXBzMTE7CisJY29uZmlnLmVuYV9ncGlvX2ZsYWdzID0gR1BJT0ZfT1VUX0lOSVRfSElHSDsKIAlmb3IgKGkgPSAwOyBpIDwgczJtcHMxMS0+cmRldl9udW07IGkrKykgewogCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogCi0JCWlmICghcmVnX25wKSB7CisJCWlmIChwZGF0YSkgewogCQkJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLmluaXRkYXRhOwogCQkJY29uZmlnLm9mX25vZGUgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5yZWdfbm9kZTsKIAkJfSBlbHNlIHsKIAkJCWNvbmZpZy5pbml0X2RhdGEgPSByZGF0YVtpXS5pbml0X2RhdGE7CiAJCQljb25maWcub2Zfbm9kZSA9IHJkYXRhW2ldLm9mX25vZGU7CiAJCX0KKwkJY29uZmlnLmVuYV9ncGlvID0gczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3Bpb1tpXTsKIAogCQlyZWd1bGF0b3IgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LAogCQkJCQkJJnJlZ3VsYXRvcnNbaV0sICZjb25maWcpOwpAQCAtNjQ5LDYgKzcxNywxNyBAQAogCQkJCWkpOwogCQkJZ290byBvdXQ7CiAJCX0KKworCQlpZiAoZ3Bpb19pc192YWxpZChzMm1wczExLT5leHRfY29udHJvbF9ncGlvW2ldKSkgeworCQkJcmV0ID0gczJtcHMxNF9wbWljX2VuYWJsZV9leHRfY29udHJvbChzMm1wczExLAorCQkJCQlyZWd1bGF0b3IpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCQkiZmFpbGVkIHRvIGVuYWJsZSBHUElPIGNvbnRyb2wgb3ZlciAlczogJWRcbiIsCisJCQkJCQlyZWd1bGF0b3ItPmRlc2MtPm5hbWUsIHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYwppbmRleCA5MmYxOWEwLi5jNzlhZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zNW04NzY3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczVtODc2Ny5jCkBAIC0yOCw3ICsyOCw2IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBzZWNfcG1pY19kZXYgKmlvZGV2OwogCWludCBudW1fcmVndWxhdG9yczsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXY7CiAJc3RydWN0IHNlY19vcG1vZGVfZGF0YSAqb3Btb2RlOwogCiAJaW50IHJhbXBfZGVsYXk7CkBAIC01MjksMTYgKzUyOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHM1bTg3NjdfcG1pY19kdF9wYXJzZV9leHRfY29udHJvbF9ncGlvKHN0cnVjdCBzZWNfcG1pY19kZXYgKmlvZGV2LAotCQlzdHJ1Y3Qgc2VjX3JlZ3VsYXRvcl9kYXRhICpyZGF0YSwKLQkJc3RydWN0IGRldmljZV9ub2RlICpyZWdfbnApCi17Ci0JcmRhdGEtPmV4dF9jb250cm9sX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhyZWdfbnAsCi0JCQkiczVtODc2NyxwbWljLWV4dC1jb250cm9sLWdwaW9zIiwgMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHJkYXRhLT5leHRfY29udHJvbF9ncGlvKSkKLQkJcmRhdGEtPmV4dF9jb250cm9sX2dwaW8gPSAwOwotfQotCiBzdGF0aWMgaW50IHM1bTg3NjdfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCQlzdHJ1Y3Qgc2VjX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogewpAQCAtNTg3LDcgKzU3Niw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXM1bTg3NjdfcG1pY19kdF9wYXJzZV9leHRfY29udHJvbF9ncGlvKGlvZGV2LCByZGF0YSwgcmVnX25wKTsKKwkJcmRhdGEtPmV4dF9jb250cm9sX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhyZWdfbnAsCisJCQkiczVtODc2NyxwbWljLWV4dC1jb250cm9sLWdwaW9zIiwgMCk7CiAKIAkJcmRhdGEtPmlkID0gaTsKIAkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoCkBAIC02OTUsNyArNjg1LDYgQEAKIAlzdHJ1Y3Qgc2VjX3BtaWNfZGV2ICppb2RldiA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2VjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gaW9kZXYtPnBkYXRhOwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXY7CiAJc3RydWN0IHM1bTg3NjdfaW5mbyAqczVtODc2NzsKIAlpbnQgaSwgcmV0LCBzaXplLCBidWNrX2luaXQ7CiAKQEAgLTczNywxMSArNzI2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfZGV2ICopICogKFM1TTg3NjdfUkVHX01BWCAtIDIpOwotCXM1bTg3NjctPnJkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzNW04NzY3LT5yZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXJkZXYgPSBzNW04NzY3LT5yZGV2OwogCXM1bTg3NjctPmRldiA9ICZwZGV2LT5kZXY7CiAJczVtODc2Ny0+aW9kZXYgPSBpb2RldjsKIAlzNW04NzY3LT5udW1fcmVndWxhdG9ycyA9IHBkYXRhLT5udW1fcmVndWxhdG9yczsKQEAgLTkzOCw2ICs5MjMsNyBAQAogCQljb25zdCBzdHJ1Y3Qgc2VjX3ZvbHRhZ2VfZGVzYyAqZGVzYzsKIAkJaW50IGlkID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0uaWQ7CiAJCWludCBlbmFibGVfcmVnLCBlbmFibGVfdmFsOworCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAogCQlkZXNjID0gcmVnX3ZvbHRhZ2VfbWFwW2lkXTsKIAkJaWYgKGRlc2MpIHsKQEAgLTk2NCwyNiArOTUwLDI3IEBACiAJCWNvbmZpZy5kcml2ZXJfZGF0YSA9IHM1bTg3Njc7CiAJCWNvbmZpZy5yZWdtYXAgPSBpb2Rldi0+cmVnbWFwX3BtaWM7CiAJCWNvbmZpZy5vZl9ub2RlID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0ucmVnX25vZGU7Ci0JCWNvbmZpZy5lbmFfZ3BpbyA9IGNvbmZpZy5lbmFfZ3Bpb19mbGFncyA9IDA7Ci0JCWlmIChwZGF0YS0+cmVndWxhdG9yc1tpXS5leHRfY29udHJvbF9ncGlvKQorCQljb25maWcuZW5hX2dwaW8gPSAtRUlOVkFMOworCQljb25maWcuZW5hX2dwaW9fZmxhZ3MgPSAwOworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+cmVndWxhdG9yc1tpXS5leHRfY29udHJvbF9ncGlvKSkKIAkJCXM1bTg3NjdfcmVndWxhdG9yX2NvbmZpZ19leHRfY29udHJvbChzNW04NzY3LAogCQkJCQkmcGRhdGEtPnJlZ3VsYXRvcnNbaV0sICZjb25maWcpOwogCi0JCXJkZXZbaV0gPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmcmVndWxhdG9yc1tpZF0sCisJCXJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmcmVndWxhdG9yc1tpZF0sCiAJCQkJCQkgICZjb25maWcpOwotCQlpZiAoSVNfRVJSKHJkZXZbaV0pKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHJkZXZbaV0pOworCQlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHJkZXYpOwogCQkJZGV2X2VycihzNW04NzY3LT5kZXYsICJyZWd1bGF0b3IgaW5pdCBmYWlsZWQgZm9yICVkXG4iLAogCQkJCQlpZCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKLQkJaWYgKHBkYXRhLT5yZWd1bGF0b3JzW2ldLmV4dF9jb250cm9sX2dwaW8pIHsKLQkJCXJldCA9IHM1bTg3NjdfZW5hYmxlX2V4dF9jb250cm9sKHM1bTg3NjcsIHJkZXZbaV0pOworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+cmVndWxhdG9yc1tpXS5leHRfY29udHJvbF9ncGlvKSkgeworCQkJcmV0ID0gczVtODc2N19lbmFibGVfZXh0X2NvbnRyb2woczVtODc2NywgcmRldik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWRldl9lcnIoczVtODc2Ny0+ZGV2LAogCQkJCQkJImZhaWxlZCB0byBlbmFibGUgZ3BpbyBjb250cm9sIG92ZXIgJXM6ICVkXG4iLAotCQkJCQkJcmRldltpXS0+ZGVzYy0+bmFtZSwgcmV0KTsKKwkJCQkJCXJkZXYtPmRlc2MtPm5hbWUsIHJldCk7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivc3QtcHdtLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zdC1wd20uYwppbmRleCBlMzY3YWYxLi41ZWE3OGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zdC1wd20uYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9zdC1wd20uYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJLmR1dHlfY3ljbGVfdGFibGUgPSBiMjEwNV9kdXR5X2N5Y2xlX3RhYmxlLAogfTsKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3RfcHdtX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdF9wd21fb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInN0LGIyMTA1LXB3bS1yZWd1bGF0b3IiLCAuZGF0YSA9ICZiMjEwNV9pbmZvLCB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA5MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCmluZGV4IDJlOTJlZjYuLjIwNjRiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CkBAIC0yOCw0OSArMjksMjE2IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90cHM2NTA5MC5oPgogCisjZGVmaW5lIE1BWF9DVFJMX1JFQURfVFJJRVMJNQorI2RlZmluZSBNQVhfRkVUX0VOQUJMRV9UUklFUwkxMDAwCisKKyNkZWZpbmUgQ1RSTF9FTl9CSVQJCTAgLyogUmVndWxhdG9yIGVuYWJsZSBiaXQsIGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIENUUkxfV1RfQklUCQkyIC8qIFJlZ3VsYXRvciB3YWl0IHRpbWUgMCBiaXQgKi8KKyNkZWZpbmUgQ1RSTF9QR19CSVQJCTQgLyogUmVndWxhdG9yIHBvd2VyIGdvb2QgYml0LCAxPWdvb2QgKi8KKyNkZWZpbmUgQ1RSTF9UT19CSVQJCTcgLyogUmVndWxhdG9yIHRpbWVvdXQgYml0LCAxPXdhaXQgKi8KKworI2RlZmluZSBNQVhfT1ZFUkNVUlJFTlRfV0FJVAkzIC8qIE92ZXJjdXJyZW50IHdhaXQgbXVzdCBiZSA8PSB0aGlzICovCisKKy8qKgorICogc3RydWN0IHRwczY1MDkwX3JlZ3VsYXRvciAtIFBlci1yZWd1bGF0b3IgZGF0YSBmb3IgYSB0cHM2NTA5MCByZWd1bGF0b3IKKyAqCisgKiBAZGV2OiBQb2ludGVyIHRvIG91ciBkZXZpY2UuCisgKiBAZGVzYzogVGhlIHN0cnVjdCByZWd1bGF0b3JfZGVzYyBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEByZGV2OiBUaGUgc3RydWN0IHJlZ3VsYXRvcl9kZXYgZm9yIHRoZSByZWd1bGF0b3IuCisgKiBAb3ZlcmN1cnJlbnRfd2FpdF92YWxpZDogVHJ1ZSBpZiBvdmVyY3VycmVudF93YWl0IGlzIHZhbGlkLgorICogQG92ZXJjdXJyZW50X3dhaXQ6IEZvciBGRVRzLCB0aGUgdmFsdWUgdG8gcHV0IGluIHRoZSBXVEZFVCBiaXRmaWVsZC4KKyAqLworCiBzdHJ1Y3QgdHBzNjUwOTBfcmVndWxhdG9yIHsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCByZWd1bGF0b3JfZGVzYwkqZGVzYzsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldgkqcmRldjsKKwlib29sCQkJb3ZlcmN1cnJlbnRfd2FpdF92YWxpZDsKKwlpbnQJCQlvdmVyY3VycmVudF93YWl0OwogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHRwczY1MDkwX2V4dF9jb250cm9sX29wcyA9IHsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA5MF9yZWdfY29udG9sX29wcyA9IHsKKy8qKgorICogdHBzNjUwOTBfcmVnX3NldF9vdmVyY3VycmVudF93YWl0IC0gU2V0dXAgb3ZlcmN1cnJlbnQgd2FpdAorICoKKyAqIFRoaXMgd2lsbCBzZXQgdGhlIG92ZXJjdXJyZW50IHdhaXQgdGltZSBiYXNlZCBvbiB3aGF0J3MgaW4gdGhlIHJlZ3VsYXRvcgorICogaW5mby4KKyAqCisgKiBAcmk6CQlPdmVyYWxsIHJlZ3VsYXRvciBkYXRhCisgKiBAcmRldjoJUmVndWxhdG9yIGRldmljZQorICoKKyAqIFJldHVybjogMCBpZiBubyBlcnJvciwgbm9uLXplcm8gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdyaXRpbmcgdGhlIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50IHRwczY1MDkwX3JlZ19zZXRfb3ZlcmN1cnJlbnRfd2FpdChzdHJ1Y3QgdHBzNjUwOTBfcmVndWxhdG9yICpyaSwKKwkJCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKKwkJCQkgTUFYX09WRVJDVVJSRU5UX1dBSVQgPDwgQ1RSTF9XVF9CSVQsCisJCQkJIHJpLT5vdmVyY3VycmVudF93YWl0IDw8IENUUkxfV1RfQklUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnJkZXYtPmRldiwgIkVycm9yIHVwZGF0aW5nIG92ZXJjdXJyZW50IHdhaXQgJSN4XG4iLAorCQkJcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB0cHM2NTA5MF90cnlfZW5hYmxlX2ZldCAtIFRyeSB0byBlbmFibGUgYSBGRVQKKyAqCisgKiBAcmRldjoJUmVndWxhdG9yIGRldmljZQorICoKKyAqIFJldHVybjogMCBpZiBvaywgLUVOT1RSRUNPVkVSQUJMRSBpZiB0aGUgRkVUIHBvd2VyIGdvb2QgYml0IGRpZCBub3QgZ2V0CisgKiBzZXQsIG9yIHNvbWUgb3RoZXIgLXZlIHZhbHVlIGlmIGFub3RoZXIgZXJyb3Igb2NjdXJyZWQgKGUuZy4gaTJjIGVycm9yKQorICovCitzdGF0aWMgaW50IHRwczY1MDkwX3RyeV9lbmFibGVfZmV0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXVuc2lnbmVkIGludCBjb250cm9sOworCWludCByZXQsIGk7CisKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZGV2LT5kZXNjLT5lbmFibGVfcmVnLAorCQkJCSByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywKKwkJCQkgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2spOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnJkZXYtPmRldiwgIkVycm9yIGluIHVwZGF0aW5nIHJlZyAlI3hcbiIsCisJCQlyZGV2LT5kZXNjLT5lbmFibGVfcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NUUkxfUkVBRF9UUklFUzsgaSsrKSB7CisJCXJldCA9IHJlZ21hcF9yZWFkKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKKwkJCQkgICZjb250cm9sKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmICghKGNvbnRyb2wgJiBCSVQoQ1RSTF9UT19CSVQpKSkKKwkJCWJyZWFrOworCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsKKwl9CisJaWYgKCEoY29udHJvbCAmIEJJVChDVFJMX1BHX0JJVCkpKQorCQlyZXR1cm4gLUVOT1RSRUNPVkVSQUJMRTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHRwczY1MDkwX2ZldF9lbmFibGUgLSBFbmFibGUgYSBGRVQsIHRyeWluZyBhIGZldyB0aW1lcyBpZiBpdCBmYWlscworICoKKyAqIFNvbWUgdmVyc2lvbnMgb2YgdGhlIHRwczY1MDkwIGhhdmUgaXNzdWVzIHdoZW4gdHVybmluZyBvbiB0aGUgRkVUcy4KKyAqIFRoaXMgZnVuY3Rpb24gZ29lcyB0aHJvdWdoIHNldmVyYWwgc3RlcHMgdG8gZW5zdXJlIHRoZSBiZXN0IGNoYW5jZSBvZiB0aGUKKyAqIEZFVCBnb2luZyBvbi4gIFNwZWNpZmljYWxseToKKyAqIC0gV2UnbGwgbWFrZSBzdXJlIHRoYXQgd2UgYnVtcCB0aGUgIm92ZXJjdXJyZW50IHdhaXQiIHRvIHRoZSBtYXhpbXVtLCB3aGljaAorICogICBpbmNyZWFzZXMgdGhlIGNoYW5jZXMgdGhhdCB3ZSdsbCB0dXJuIG9uIHByb3Blcmx5LgorICogLSBXZSdsbCByZXRyeSB0dXJuaW5nIHRoZSBGRVQgb24gbXVsdGlwbGUgdGltZXMgKHR1cm5pbmcgb2ZmIGluIGJldHdlZW4pLgorICoKKyAqIEByZGV2OglSZWd1bGF0b3IgZGV2aWNlCisgKgorICogUmV0dXJuOiAwIGlmIG9rLCBub24temVybyBpZiBpdCBmYWlscy4KKyAqLworc3RhdGljIGludCB0cHM2NTA5MF9mZXRfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWludCByZXQsIHRyaWVzOworCisJLyoKKwkgKiBUcnkgZW5hYmxpbmcgbXVsdGlwbGUgdGltZXMgdW50aWwgd2Ugc3VjY2VlZCBzaW5jZSBzb21ldGltZXMgdGhlCisJICogZmlyc3QgdHJ5IHRpbWVzIG91dC4KKwkgKi8KKwl0cmllcyA9IDA7CisJd2hpbGUgKHRydWUpIHsKKwkJcmV0ID0gdHBzNjUwOTBfdHJ5X2VuYWJsZV9mZXQocmRldik7CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisJCWlmIChyZXQgIT0gLUVOT1RSRUNPVkVSQUJMRSB8fCB0cmllcyA9PSBNQVhfRkVUX0VOQUJMRV9UUklFUykKKwkJCWdvdG8gZXJyOworCisJCS8qIFRyeSB0dXJuaW5nIHRoZSBGRVQgb2ZmIChhbmQgdGhlbiBvbiBhZ2FpbikgKi8KKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKKwkJCQkJIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXRyaWVzKys7CisJfQorCisJaWYgKHRyaWVzKQorCQlkZXZfd2FybigmcmRldi0+ZGV2LCAicmVnICUjeCBlbmFibGUgb2sgYWZ0ZXIgJWQgdHJpZXNcbiIsCisJCQkgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywgdHJpZXMpOworCisJcmV0dXJuIDA7CitlcnI6CisJZGV2X3dhcm4oJnJkZXYtPmRldiwgInJlZyAlI3ggZW5hYmxlIGZhaWxlZFxuIiwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZyk7CisJV0FSTl9PTigxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA5MF9yZWdfY29udHJvbF9vcHMgPSB7CiAJLmVuYWJsZQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKIAkuZGlzYWJsZQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKIAkuaXNfZW5hYmxlZAk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA5MF9mZXRfY29udHJvbF9vcHMgPSB7CisJLmVuYWJsZQkJPSB0cHM2NTA5MF9mZXRfZW5hYmxlLAorCS5kaXNhYmxlCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorfTsKKwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHRwczY1MDkwX2xkb19vcHMgPSB7CiB9OwogCi0jZGVmaW5lIHRwczY1MDkwX1JFR19ERVNDKF9pZCwgX3NuYW1lLCBfZW5fcmVnLCBfb3BzKQlcCisjZGVmaW5lIHRwczY1MDkwX1JFR19ERVNDKF9pZCwgX3NuYW1lLCBfZW5fcmVnLCBfZW5fYml0cywgX29wcykJXAogewkJCQkJCQlcCiAJLm5hbWUgPSAiVFBTNjUwOTBfUkFJTFMiI19pZCwJCQlcCiAJLnN1cHBseV9uYW1lID0gX3NuYW1lLAkJCQlcCiAJLmlkID0gVFBTNjUwOTBfUkVHVUxBVE9SXyMjX2lkLAkJCVwKIAkub3BzID0gJl9vcHMsCQkJCQlcCiAJLmVuYWJsZV9yZWcgPSBfZW5fcmVnLAkJCQlcCi0JLmVuYWJsZV9tYXNrID0gQklUKDApLAkJCQlcCisJLmVuYWJsZV92YWwgPSBfZW5fYml0cywJCQkJXAorCS5lbmFibGVfbWFzayA9IF9lbl9iaXRzLAkJCVwKIAkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKIAkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJXAogfQogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHRwczY1MDkwX3JlZ3VsYXRvcl9kZXNjW10gPSB7Ci0JdHBzNjUwOTBfUkVHX0RFU0MoRENEQzEsICJ2c3lzMSIsICAgMHgwQywgdHBzNjUwOTBfcmVnX2NvbnRvbF9vcHMpLAotCXRwczY1MDkwX1JFR19ERVNDKERDREMyLCAidnN5czIiLCAgIDB4MEQsIHRwczY1MDkwX3JlZ19jb250b2xfb3BzKSwKLQl0cHM2NTA5MF9SRUdfREVTQyhEQ0RDMywgInZzeXMzIiwgICAweDBFLCB0cHM2NTA5MF9yZWdfY29udG9sX29wcyksCi0JdHBzNjUwOTBfUkVHX0RFU0MoRkVUMSwgICJpbmZldDEiLCAgMHgwRiwgdHBzNjUwOTBfcmVnX2NvbnRvbF9vcHMpLAotCXRwczY1MDkwX1JFR19ERVNDKEZFVDIsICAiaW5mZXQyIiwgIDB4MTAsIHRwczY1MDkwX3JlZ19jb250b2xfb3BzKSwKLQl0cHM2NTA5MF9SRUdfREVTQyhGRVQzLCAgImluZmV0MyIsICAweDExLCB0cHM2NTA5MF9yZWdfY29udG9sX29wcyksCi0JdHBzNjUwOTBfUkVHX0RFU0MoRkVUNCwgICJpbmZldDQiLCAgMHgxMiwgdHBzNjUwOTBfcmVnX2NvbnRvbF9vcHMpLAotCXRwczY1MDkwX1JFR19ERVNDKEZFVDUsICAiaW5mZXQ1IiwgIDB4MTMsIHRwczY1MDkwX3JlZ19jb250b2xfb3BzKSwKLQl0cHM2NTA5MF9SRUdfREVTQyhGRVQ2LCAgImluZmV0NiIsICAweDE0LCB0cHM2NTA5MF9yZWdfY29udG9sX29wcyksCi0JdHBzNjUwOTBfUkVHX0RFU0MoRkVUNywgICJpbmZldDciLCAgMHgxNSwgdHBzNjUwOTBfcmVnX2NvbnRvbF9vcHMpLAotCXRwczY1MDkwX1JFR19ERVNDKExETzEsICAidnN5cy1sMSIsIDAsICAgIHRwczY1MDkwX2xkb19vcHMpLAotCXRwczY1MDkwX1JFR19ERVNDKExETzIsICAidnN5cy1sMiIsIDAsICAgIHRwczY1MDkwX2xkb19vcHMpLAorCXRwczY1MDkwX1JFR19ERVNDKERDREMxLCAidnN5czEiLCAgIDB4MEMsIEJJVChDVFJMX0VOX0JJVCksCisJCQkgIHRwczY1MDkwX3JlZ19jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRENEQzIsICJ2c3lzMiIsICAgMHgwRCwgQklUKENUUkxfRU5fQklUKSwKKwkJCSAgdHBzNjUwOTBfcmVnX2NvbnRyb2xfb3BzKSwKKwl0cHM2NTA5MF9SRUdfREVTQyhEQ0RDMywgInZzeXMzIiwgICAweDBFLCBCSVQoQ1RSTF9FTl9CSVQpLAorCQkJICB0cHM2NTA5MF9yZWdfY29udHJvbF9vcHMpLAorCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUMSwgICJpbmZldDEiLCAgMHgwRiwKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUMiwgICJpbmZldDIiLCAgMHgxMCwKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUMywgICJpbmZldDMiLCAgMHgxMSwKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUNCwgICJpbmZldDQiLCAgMHgxMiwKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUNSwgICJpbmZldDUiLCAgMHgxMywKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUNiwgICJpbmZldDYiLCAgMHgxNCwKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisJdHBzNjUwOTBfUkVHX0RFU0MoRkVUNywgICJpbmZldDciLCAgMHgxNSwKKwkJCSAgQklUKENUUkxfRU5fQklUKSB8IEJJVChDVFJMX1BHX0JJVCksCisJCQkgIHRwczY1MDkwX2ZldF9jb250cm9sX29wcyksCisKKwl0cHM2NTA5MF9SRUdfREVTQyhMRE8xLCAgInZzeXMtbDEiLCAwLCAwLAorCQkJICB0cHM2NTA5MF9sZG9fb3BzKSwKKwl0cHM2NTA5MF9SRUdfREVTQyhMRE8yLCAgInZzeXMtbDIiLCAwLCAwLAorCQkJICB0cHM2NTA5MF9sZG9fb3BzKSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kY2RjKGludCBpZCkKQEAgLTIwOSw2ICszNzcsMTEgQEAKIAkJCXJwZGF0YS0+Z3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLAogCQkJCQkiZGNkYy1leHQtY29udHJvbC1ncGlvcyIsIDApOwogCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMih0cHM2NTA5MF9tYXRjaGVzW2lkeF0ub2Zfbm9kZSwKKwkJCQkJICJ0aSxvdmVyY3VycmVudC13YWl0IiwKKwkJCQkJICZycGRhdGEtPm92ZXJjdXJyZW50X3dhaXQpID09IDApCisJCQlycGRhdGEtPm92ZXJjdXJyZW50X3dhaXRfdmFsaWQgPSB0cnVlOworCiAJCXRwczY1MDkwX3BkYXRhLT5yZWdfcGRhdGFbaWR4XSA9IHJwZGF0YTsKIAl9CiAJcmV0dXJuIHRwczY1MDkwX3BkYXRhOwpAQCAtMjU4LDYgKzQzMSwxMSBAQAogCQlyaSA9ICZwbWljW251bV07CiAJCXJpLT5kZXYgPSAmcGRldi0+ZGV2OwogCQlyaS0+ZGVzYyA9ICZ0cHM2NTA5MF9yZWd1bGF0b3JfZGVzY1tudW1dOworCQlpZiAodHBzX3BkYXRhKSB7CisJCQlyaS0+b3ZlcmN1cnJlbnRfd2FpdF92YWxpZCA9CisJCQkJdHBzX3BkYXRhLT5vdmVyY3VycmVudF93YWl0X3ZhbGlkOworCQkJcmktPm92ZXJjdXJyZW50X3dhaXQgPSB0cHNfcGRhdGEtPm92ZXJjdXJyZW50X3dhaXQ7CisJCX0KIAogCQkvKgogCQkgKiBUUFM1MDkwIERDREMgc3VwcG9ydCB0aGUgY29udHJvbCBmcm9tIGV4dGVybmFsIGRpZ2l0YWwgaW5wdXQuCkBAIC0yOTksNiArNDc3LDEyIEBACiAJCX0KIAkJcmktPnJkZXYgPSByZGV2OwogCisJCWlmIChyaS0+b3ZlcmN1cnJlbnRfd2FpdF92YWxpZCkgeworCQkJcmV0ID0gdHBzNjUwOTBfcmVnX3NldF9vdmVyY3VycmVudF93YWl0KHJpLCByZGV2KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwogCQkvKiBFbmFibGUgZXh0ZXJuYWwgY29udHJvbCBpZiBpdCBpcyByZXF1aXJlICovCiAJCWlmICh0cHNfcGRhdGEgJiYgaXNfZGNkYyhudW0pICYmIHRwc19wZGF0YS0+cmVnX2luaXRfZGF0YSAmJgogCQkJCXRwc19wZGF0YS0+ZW5hYmxlX2V4dF9jb250cm9sKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxNy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE3LXJlZ3VsYXRvci5jCmluZGV4IDEwYjc4ZDIuLmY3ZWQyMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE3LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE3LXJlZ3VsYXRvci5jCkBAIC0xMzQsNiArMTM0LDcgQEAKIAkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3NlbAk9IHRwczY1MjE3X3BtaWNfc2V0X3ZvbHRhZ2Vfc2VsLAogCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV90YWJsZSwKKwkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2FzY2VuZCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0gewpAQCAtMjU3LDkgKzI1OCw2IEBACiAJCQkJcGRldi0+bmFtZSk7CiAJCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKIAkJfQotCi0JCS8qIFNhdmUgcmVndWxhdG9yIGZvciBjbGVhbnVwICovCi0JCXRwcy0+cmRldltpXSA9IHJkZXY7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUyMTgtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYwppbmRleCBjZWM3MmZhLi42OWI0Yjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYwpAQCAtMjcsMTIgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdHBzNjUyMTguaD4KIAotc3RhdGljIHVuc2lnbmVkIGludCB0cHM2NTIxOF9yYW1wX2RlbGF5ID0gNDAwMDsKLQogZW51bSB0cHM2NTIxOF9yZWd1bGF0b3JzIHsgRENEQzEsIERDREMyLCBEQ0RDMywgRENEQzQsIERDREM1LCBEQ0RDNiwgTERPMSB9OwogCiAjZGVmaW5lIFRQUzY1MjE4X1JFR1VMQVRPUihfbmFtZSwgX2lkLCBfb3BzLCBfbiwgX3ZyLCBfdm0sIF9lciwgX2VtLCBfdCwgXAotCQkJICAgIF9sciwgX25scikJCQkJXAorCQkJICAgIF9sciwgX25sciwgX2RlbGF5KQkJCVwKIAl7CQkJCQkJCVwKIAkJLm5hbWUJCQk9IF9uYW1lLAkJXAogCQkuaWQJCQk9IF9pZCwJCQlcCkBAIC00Nyw2ICs0NSw3IEBACiAJCS52b2x0X3RhYmxlCQk9IF90LAkJCVwKIAkJLmxpbmVhcl9yYW5nZXMJCT0gX2xyLAkJCVwKIAkJLm5fbGluZWFyX3Jhbmdlcwk9IF9ubHIsCQkJXAorCQkucmFtcF9kZWxheQkJPSBfZGVsYXksCQlcCiAJfQkJCQkJCQlcCiAKICNkZWZpbmUgVFBTNjUyMThfSU5GTyhfaWQsIF9ubSwgX21pbiwgX21heCkJXApAQCAtMTUyLDIyICsxNTEsNiBAQAogCQkJCSAgIGRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssIFRQUzY1MjE4X1BST1RFQ1RfTDEpOwogfQogCi1zdGF0aWMgaW50IHRwczY1MjE4X3NldF92b2x0YWdlX3RpbWVfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCXVuc2lnbmVkIGludCBvbGRfc2VsZWN0b3IsIHVuc2lnbmVkIGludCBuZXdfc2VsZWN0b3IpCi17Ci0JaW50IG9sZF91diwgbmV3X3V2OwotCi0Jb2xkX3V2ID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXJfcmFuZ2UocmRldiwgb2xkX3NlbGVjdG9yKTsKLQlpZiAob2xkX3V2IDwgMCkKLQkJcmV0dXJuIG9sZF91djsKLQotCW5ld191diA9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyX3JhbmdlKHJkZXYsIG5ld19zZWxlY3Rvcik7Ci0JaWYgKG5ld191diA8IDApCi0JCXJldHVybiBuZXdfdXY7Ci0KLQlyZXR1cm4gRElWX1JPVU5EX1VQKGFicyhvbGRfdXYgLSBuZXdfdXYpLCB0cHM2NTIxOF9yYW1wX2RlbGF5KTsKLX0KLQogLyogT3BlcmF0aW9ucyBwZXJtaXR0ZWQgb24gRENEQzEsIERDREMyICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjUyMThfZGNkYzEyX29wcyA9IHsKIAkuaXNfZW5hYmxlZAkJPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCkBAIC0xNzcsNyArMTYwLDcgQEAKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gdHBzNjUyMThfcG1pY19zZXRfdm9sdGFnZV9zZWwsCiAJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhcl9yYW5nZSwKIAkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhcl9yYW5nZSwKLQkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSB0cHM2NTIxOF9zZXRfdm9sdGFnZV90aW1lX3NlbCwKKwkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCiB9OwogCiAvKiBPcGVyYXRpb25zIHBlcm1pdHRlZCBvbiBEQ0RDMywgRENEQzQgYW5kIExETzEgKi8KQEAgLTIwMywzMyArMTg2LDMzIEBACiAJCQkgICBUUFM2NTIxOF9SRUdfQ09OVFJPTF9EQ0RDMSwKIAkJCSAgIFRQUzY1MjE4X0NPTlRST0xfRENEQzFfTUFTSywKIAkJCSAgIFRQUzY1MjE4X1JFR19FTkFCTEUxLCBUUFM2NTIxOF9FTkFCTEUxX0RDMV9FTiwgTlVMTCwKLQkJCSAgIGRjZGMxX2RjZGMyX3JhbmdlcywgMiksCisJCQkgICBkY2RjMV9kY2RjMl9yYW5nZXMsIDIsIDQwMDApLAogCVRQUzY1MjE4X1JFR1VMQVRPUigiRENEQzIiLCBUUFM2NTIxOF9EQ0RDXzIsIHRwczY1MjE4X2RjZGMxMl9vcHMsIDY0LAogCQkJICAgVFBTNjUyMThfUkVHX0NPTlRST0xfRENEQzIsCiAJCQkgICBUUFM2NTIxOF9DT05UUk9MX0RDREMyX01BU0ssCiAJCQkgICBUUFM2NTIxOF9SRUdfRU5BQkxFMSwgVFBTNjUyMThfRU5BQkxFMV9EQzJfRU4sIE5VTEwsCi0JCQkgICBkY2RjMV9kY2RjMl9yYW5nZXMsIDIpLAorCQkJICAgZGNkYzFfZGNkYzJfcmFuZ2VzLCAyLCA0MDAwKSwKIAlUUFM2NTIxOF9SRUdVTEFUT1IoIkRDREMzIiwgVFBTNjUyMThfRENEQ18zLCB0cHM2NTIxOF9sZG8xX2RjZGMzNF9vcHMsCiAJCQkgICA2NCwgVFBTNjUyMThfUkVHX0NPTlRST0xfRENEQzMsCiAJCQkgICBUUFM2NTIxOF9DT05UUk9MX0RDREMzX01BU0ssIFRQUzY1MjE4X1JFR19FTkFCTEUxLAogCQkJICAgVFBTNjUyMThfRU5BQkxFMV9EQzNfRU4sIE5VTEwsCi0JCQkgICBsZG8xX2RjZGMzX3JhbmdlcywgMiksCisJCQkgICBsZG8xX2RjZGMzX3JhbmdlcywgMiwgMCksCiAJVFBTNjUyMThfUkVHVUxBVE9SKCJEQ0RDNCIsIFRQUzY1MjE4X0RDRENfNCwgdHBzNjUyMThfbGRvMV9kY2RjMzRfb3BzLAogCQkJICAgNTMsIFRQUzY1MjE4X1JFR19DT05UUk9MX0RDREM0LAogCQkJICAgVFBTNjUyMThfQ09OVFJPTF9EQ0RDNF9NQVNLLAogCQkJICAgVFBTNjUyMThfUkVHX0VOQUJMRTEsIFRQUzY1MjE4X0VOQUJMRTFfREM0X0VOLCBOVUxMLAotCQkJICAgZGNkYzRfcmFuZ2VzLCAyKSwKKwkJCSAgIGRjZGM0X3JhbmdlcywgMiwgMCksCiAJVFBTNjUyMThfUkVHVUxBVE9SKCJEQ0RDNSIsIFRQUzY1MjE4X0RDRENfNSwgdHBzNjUyMThfZGNkYzU2X3BtaWNfb3BzLAogCQkJICAgMSwgLTEsIC0xLCBUUFM2NTIxOF9SRUdfRU5BQkxFMSwKLQkJCSAgIFRQUzY1MjE4X0VOQUJMRTFfREM1X0VOLCBOVUxMLCBOVUxMLCAwKSwKKwkJCSAgIFRQUzY1MjE4X0VOQUJMRTFfREM1X0VOLCBOVUxMLCBOVUxMLCAwLCAwKSwKIAlUUFM2NTIxOF9SRUdVTEFUT1IoIkRDREM2IiwgVFBTNjUyMThfRENEQ182LCB0cHM2NTIxOF9kY2RjNTZfcG1pY19vcHMsCiAJCQkgICAxLCAtMSwgLTEsIFRQUzY1MjE4X1JFR19FTkFCTEUxLAotCQkJICAgVFBTNjUyMThfRU5BQkxFMV9EQzZfRU4sIE5VTEwsIE5VTEwsIDApLAorCQkJICAgVFBTNjUyMThfRU5BQkxFMV9EQzZfRU4sIE5VTEwsIE5VTEwsIDAsIDApLAogCVRQUzY1MjE4X1JFR1VMQVRPUigiTERPMSIsIFRQUzY1MjE4X0xET18xLCB0cHM2NTIxOF9sZG8xX2RjZGMzNF9vcHMsIDY0LAogCQkJICAgVFBTNjUyMThfUkVHX0NPTlRST0xfRENEQzQsCiAJCQkgICBUUFM2NTIxOF9DT05UUk9MX0xETzFfTUFTSywgVFBTNjUyMThfUkVHX0VOQUJMRTIsCiAJCQkgICBUUFM2NTIxOF9FTkFCTEUyX0xETzFfRU4sIE5VTEwsIGxkbzFfZGNkYzNfcmFuZ2VzLAotCQkJICAgMiksCisJCQkgICAyLCAwKSwKIH07CiAKIHN0YXRpYyBpbnQgdHBzNjUyMThfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTg2eC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1ODZ4LXJlZ3VsYXRvci5jCmluZGV4IDMyZjM4YTYuLjBhM2JiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1ODZ4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1ODZ4LXJlZ3VsYXRvci5jCkBAIC02MywxMiArNjMsNyBAQAogCWludCBlbmFibGVfcmVnWzJdOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICp0b190cHM2NTg2eF9kZXYoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0JcmV0dXJuIHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OwotfQotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjU4NnhfcmVndWxhdG9yX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTg2eF9yd19yZWd1bGF0b3Jfb3BzID0gewogCS5saXN0X3ZvbHRhZ2UgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX3RhYmxlLAogCS5tYXBfdm9sdGFnZSA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9hc2NlbmQsCiAJLmdldF92b2x0YWdlX3NlbCA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLApAQCAtNzksNiArNzQsMTYgQEAKIAkuZGlzYWJsZSA9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTg2eF9yb19yZWd1bGF0b3Jfb3BzID0geworCS5saXN0X3ZvbHRhZ2UgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX3RhYmxlLAorCS5tYXBfdm9sdGFnZSA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9hc2NlbmQsCisJLmdldF92b2x0YWdlX3NlbCA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCisJLmlzX2VuYWJsZWQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZSA9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlID0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorfTsKKwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHRwczY1ODZ4X3N5c19yZWd1bGF0b3Jfb3BzID0gewogfTsKIApAQCAtMTA2LDYgKzExMSwxMyBAQAogCTQyMDAwMDAsIDQyNTAwMDAsIDQzMDAwMDAsIDQzNTAwMDAsIDQ0MDAwMDAsIDQ0NTAwMDAsIDQ1MDAwMDAsIDQ1NTAwMDAsCiB9OwogCitzdGF0aWMgaW50IHRwczY1ODY0MF9zbTJfdm9sdGFnZXNbXSA9IHsKKwkyMTUwMDAwLCAyMjAwMDAwLCAyMjUwMDAwLCAyMzAwMDAwLCAyMzUwMDAwLCAyNDAwMDAwLCAyNDUwMDAwLCAyNTAwMDAwLAorCTI1NTAwMDAsIDI2MDAwMDAsIDI2NTAwMDAsIDI3MDAwMDAsIDI3NTAwMDAsIDI4MDAwMDAsIDI4NTAwMDAsIDI5MDAwMDAsCisJMjk1MDAwMCwgMzAwMDAwMCwgMzA1MDAwMCwgMzEwMDAwMCwgMzE1MDAwMCwgMzIwMDAwMCwgMzI1MDAwMCwgMzMwMDAwMCwKKwkzMzUwMDAwLCAzNDAwMDAwLCAzNDUwMDAwLCAzNTAwMDAwLCAzNTUwMDAwLCAzNjAwMDAwLCAzNjUwMDAwLCAzNzAwMDAwLAorfTsKKwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0cHM2NTg2NDNfc20yX3ZvbHRhZ2VzW10gPSB7CiAJMTAyNTAwMCwgMTA1MDAwMCwgMTA3NTAwMCwgMTEwMDAwMCwgMTEyNTAwMCwgMTE1MDAwMCwgMTE3NTAwMCwgMTIwMDAwMCwKIAkxMjI1MDAwLCAxMjUwMDAwLCAxMjc1MDAwLCAxMzAwMDAwLCAxMzI1MDAwLCAxMzUwMDAwLCAxMzc1MDAwLCAxNDAwMDAwLApAQCAtMTIwLDEyICsxMzIsMTYgQEAKIAkxMzI1MDAwLCAxMzUwMDAwLCAxMzc1MDAwLCAxNDAwMDAwLCAxNDI1MDAwLCAxNDUwMDAwLCAxNDc1MDAwLCAxNTAwMDAwLAogfTsKIAotI2RlZmluZSBUUFM2NTg2WF9SRUdVTEFUT1IoX2lkLCBfcGluX25hbWUsIHZkYXRhLCB2cmVnLCBzaGlmdCwgbmJpdHMsCVwKK3N0YXRpYyBpbnQgdHBzNjU4NjQwX3J0Y192b2x0YWdlc1tdID0geworCTI1MDAwMDAsIDI4NTAwMDAsIDMxMDAwMDAsIDMzMDAwMDAsCit9OworCisjZGVmaW5lIFRQUzY1ODZYX1JFR1VMQVRPUihfaWQsIF9vcHMsIF9waW5fbmFtZSwgdmRhdGEsIHZyZWcsIHNoaWZ0LCBuYml0cywgXAogCQkJICAgZXJlZzAsIGViaXQwLCBlcmVnMSwgZWJpdDEsIGdvcmVnLCBnb2JpdCkJXAogCS5kZXNjCT0gewkJCQkJCQlcCiAJCS5zdXBwbHlfbmFtZSA9IF9waW5fbmFtZSwJCQkJXAogCQkubmFtZQk9ICJSRUctIiAjX2lkLAkJCQkJXAotCQkub3BzCT0gJnRwczY1ODZ4X3JlZ3VsYXRvcl9vcHMsCQkJXAorCQkub3BzCT0gJnRwczY1ODZ4XyMjIF9vcHMgIyMgX3JlZ3VsYXRvcl9vcHMsCQlcCiAJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKIAkJLmlkCT0gVFBTNjU4NlhfSURfIyNfaWQsCQkJCVwKIAkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKHZkYXRhIyNfdm9sdGFnZXMpLAkJXApAQCAtMTQ2LDE0ICsxNjIsMjEgQEAKICNkZWZpbmUgVFBTNjU4NlhfTERPKF9pZCwgX3BuYW1lLCB2ZGF0YSwgdnJlZywgc2hpZnQsIG5iaXRzLAkJXAogCQkgICAgIGVyZWcwLCBlYml0MCwgZXJlZzEsIGViaXQxKQkJCVwKIHsJCQkJCQkJCQlcCi0JVFBTNjU4NlhfUkVHVUxBVE9SKF9pZCwgX3BuYW1lLCB2ZGF0YSwgdnJlZywgc2hpZnQsIG5iaXRzLAlcCisJVFBTNjU4NlhfUkVHVUxBVE9SKF9pZCwgcncsIF9wbmFtZSwgdmRhdGEsIHZyZWcsIHNoaWZ0LCBuYml0cywJXAorCQkJICAgZXJlZzAsIGViaXQwLCBlcmVnMSwgZWJpdDEsIDAsIDApCQlcCit9CisKKyNkZWZpbmUgVFBTNjU4NlhfRklYRURfTERPKF9pZCwgX3BuYW1lLCB2ZGF0YSwgdnJlZywgc2hpZnQsIG5iaXRzLAlcCisJCQkgIGVyZWcwLCBlYml0MCwgZXJlZzEsIGViaXQxKQkJCVwKK3sJCQkJCQkJCQlcCisJVFBTNjU4NlhfUkVHVUxBVE9SKF9pZCwgcm8sIF9wbmFtZSwgdmRhdGEsIHZyZWcsIHNoaWZ0LCBuYml0cywJXAogCQkJICAgZXJlZzAsIGViaXQwLCBlcmVnMSwgZWJpdDEsIDAsIDApCQlcCiB9CiAKICNkZWZpbmUgVFBTNjU4NlhfRFZNKF9pZCwgX3BuYW1lLCB2ZGF0YSwgdnJlZywgc2hpZnQsIG5iaXRzLAkJXAogCQkgICAgIGVyZWcwLCBlYml0MCwgZXJlZzEsIGViaXQxLCBnb3JlZywgZ29iaXQpCQlcCiB7CQkJCQkJCQkJXAotCVRQUzY1ODZYX1JFR1VMQVRPUihfaWQsIF9wbmFtZSwgdmRhdGEsIHZyZWcsIHNoaWZ0LCBuYml0cywJXAorCVRQUzY1ODZYX1JFR1VMQVRPUihfaWQsIHJ3LCBfcG5hbWUsIHZkYXRhLCB2cmVnLCBzaGlmdCwgbmJpdHMsCVwKIAkJCSAgIGVyZWcwLCBlYml0MCwgZXJlZzEsIGViaXQxLCBnb3JlZywgZ29iaXQpCVwKIH0KIApAQCAtMjA3LDYgKzIzMCwyNiBAQAogCQkJCQlFTkQsIDcpLAogfTsKIAorc3RhdGljIHN0cnVjdCB0cHM2NTg2eF9yZWd1bGF0b3IgdHBzNjU4NjQwX3JlZ3VsYXRvcltdID0geworCVRQUzY1ODZYX0xETyhMRE9fMywgInZpbmxkbzIzIiwgdHBzNjU4NnhfbGRvMCwgU1VQUExZVjQsIDAsIDMsCisJCQkJCUVOQywgMiwgRU5ELCAyKSwKKwlUUFM2NTg2WF9MRE8oTERPXzUsICJSRUctU1lTIiwgdHBzNjU4NnhfbGRvMCwgU1VQUExZVjYsIDAsIDMsCisJCQkJCUVORSwgNiwgRU5FLCA2KSwKKwlUUFM2NTg2WF9MRE8oTERPXzYsICJ2aW5sZG82NzgiLCB0cHM2NTg2eF9sZG8wLCBTVVBQTFlWMywgMCwgMywKKwkJCQkJRU5DLCA0LCBFTkQsIDQpLAorCVRQUzY1ODZYX0xETyhMRE9fNywgInZpbmxkbzY3OCIsIHRwczY1ODZ4X2xkbzAsIFNVUFBMWVYzLCAzLCAzLAorCQkJCQlFTkMsIDUsIEVORCwgNSksCisJVFBTNjU4NlhfTERPKExET184LCAidmlubGRvNjc4IiwgdHBzNjU4NnhfbGRvMCwgU1VQUExZVjIsIDUsIDMsCisJCQkJCUVOQywgNiwgRU5ELCA2KSwKKwlUUFM2NTg2WF9MRE8oTERPXzksICJ2aW5sZG85IiwgdHBzNjU4NnhfbGRvMCwgU1VQUExZVjYsIDMsIDMsCisJCQkJCUVORSwgNywgRU5FLCA3KSwKKwlUUFM2NTg2WF9MRE8oU01fMiwgInZpbi1zbTIiLCB0cHM2NTg2NDBfc20yLCBTVVBQTFlWMiwgMCwgNSwKKwkJCQkJRU5DLCA3LCBFTkQsIDcpLAorCisJVFBTNjU4NlhfRklYRURfTERPKExET19SVEMsICJSRUctU1lTIiwgdHBzNjU4NjQwX3J0YywgU1VQUExZVjQsIDMsIDIsCisJCQkJCVY0LCA3LCBWNCwgNyksCit9OworCiBzdGF0aWMgc3RydWN0IHRwczY1ODZ4X3JlZ3VsYXRvciB0cHM2NTg2NDNfcmVndWxhdG9yW10gPSB7CiAJVFBTNjU4NlhfTERPKFNNXzIsICJ2aW4tc20yIiwgdHBzNjU4NjQzX3NtMiwgU1VQUExZVjIsIDAsIDUsIEVOQywgNywKIAkJCQkJRU5ELCA3KSwKQEAgLTI5NSw2ICszMzgsMTEgQEAKIAkJdGFibGUgPSB0cHM2NTg2MjNfcmVndWxhdG9yOwogCQludW0gPSBBUlJBWV9TSVpFKHRwczY1ODYyM19yZWd1bGF0b3IpOwogCQlicmVhazsKKwljYXNlIFRQUzY1ODY0MDoKKwljYXNlIFRQUzY1ODY0MHYyOgorCQl0YWJsZSA9IHRwczY1ODY0MF9yZWd1bGF0b3I7CisJCW51bSA9IEFSUkFZX1NJWkUodHBzNjU4NjQwX3JlZ3VsYXRvcik7CisJCWJyZWFrOwogCWNhc2UgVFBTNjU4NjQzOgogCQl0YWJsZSA9IHRwczY1ODY0M19yZWd1bGF0b3I7CiAJCW51bSA9IEFSUkFZX1NJWkUodHBzNjU4NjQzX3JlZ3VsYXRvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmV4cHJlc3MuYwppbmRleCBmM2FlMjhhLi4wMmU3MjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZleHByZXNzLmMKQEAgLTI2LDE0ICsyNiwxNCBAQAogc3RydWN0IHZleHByZXNzX3JlZ3VsYXRvciB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ2RldjsKLQlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2Z1bmMgKmZ1bmM7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogfTsKIAogc3RhdGljIGludCB2ZXhwcmVzc19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ2RldikKIHsKIAlzdHJ1Y3QgdmV4cHJlc3NfcmVndWxhdG9yICpyZWcgPSByZGV2X2dldF9kcnZkYXRhKHJlZ2Rldik7CiAJdTMyIHVWOwotCWludCBlcnIgPSB2ZXhwcmVzc19jb25maWdfcmVhZChyZWctPmZ1bmMsIDAsICZ1Vik7CisJaW50IGVyciA9IHJlZ21hcF9yZWFkKHJlZy0+cmVnbWFwLCAwLCAmdVYpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IHVWOwogfQpAQCAtNDMsNyArNDMsNyBAQAogewogCXN0cnVjdCB2ZXhwcmVzc19yZWd1bGF0b3IgKnJlZyA9IHJkZXZfZ2V0X2RydmRhdGEocmVnZGV2KTsKIAotCXJldHVybiB2ZXhwcmVzc19jb25maWdfd3JpdGUocmVnLT5mdW5jLCAwLCBtaW5fdVYpOworCXJldHVybiByZWdtYXBfd3JpdGUocmVnLT5yZWdtYXAsIDAsIG1pbl91Vik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB2ZXhwcmVzc19yZWd1bGF0b3Jfb3BzX3JvID0gewpAQCAtNTcsMjIgKzU3LDE3IEBACiAKIHN0YXRpYyBpbnQgdmV4cHJlc3NfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IGVycjsKIAlzdHJ1Y3QgdmV4cHJlc3NfcmVndWxhdG9yICpyZWc7CiAJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjb25maWcgPSB7IH07CiAKIAlyZWcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpyZWcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlZykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2t6YWxsb2M7Ci0JfQorCWlmICghcmVnKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXJlZy0+ZnVuYyA9IHZleHByZXNzX2NvbmZpZ19mdW5jX2dldF9ieV9kZXYoJnBkZXYtPmRldik7Ci0JaWYgKCFyZWctPmZ1bmMpIHsKLQkJZXJyID0gLUVOWElPOwotCQlnb3RvIGVycm9yX2dldF9mdW5jOwotCX0KKwlyZWctPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfdmV4cHJlc3NfY29uZmlnKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIocmVnLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihyZWctPnJlZ21hcCk7CiAKIAlyZWctPmRlc2MubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXJlZy0+ZGVzYy50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0U7CkBAIC04MCwxMCArNzUsOCBAQAogCXJlZy0+ZGVzYy5jb250aW51b3VzX3ZvbHRhZ2VfcmFuZ2UgPSB0cnVlOwogCiAJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghaW5pdF9kYXRhKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3JfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGE7Ci0JfQorCWlmICghaW5pdF9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWluaXRfZGF0YS0+Y29uc3RyYWludHMuYXBwbHlfdVYgPSAwOwogCWlmIChpbml0X2RhdGEtPmNvbnN0cmFpbnRzLm1pbl91ViAmJiBpbml0X2RhdGEtPmNvbnN0cmFpbnRzLm1heF91VikKQEAgLTk3LDQwICs5MCwyMSBAQAogCWNvbmZpZy5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAKIAlyZWctPnJlZ2RldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZyZWctPmRlc2MsICZjb25maWcpOwotCWlmIChJU19FUlIocmVnLT5yZWdkZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmVnLT5yZWdkZXYpOwotCQlnb3RvIGVycm9yX3JlZ3VsYXRvcl9yZWdpc3RlcjsKLQl9CisJaWYgKElTX0VSUihyZWctPnJlZ2RldikpCisJCXJldHVybiBQVFJfRVJSKHJlZy0+cmVnZGV2KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJlZyk7CiAKIAlyZXR1cm4gMDsKLQotZXJyb3JfcmVndWxhdG9yX3JlZ2lzdGVyOgotZXJyb3JfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGE6Ci0JdmV4cHJlc3NfY29uZmlnX2Z1bmNfcHV0KHJlZy0+ZnVuYyk7Ci1lcnJvcl9nZXRfZnVuYzoKLWVycm9yX2t6YWxsb2M6Ci0JcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB2ZXhwcmVzc19yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHZleHByZXNzX3JlZ3VsYXRvciAqcmVnID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQl2ZXhwcmVzc19jb25maWdfZnVuY19wdXQocmVnLT5mdW5jKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB2ZXhwcmVzc19yZWd1bGF0b3Jfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHZleHByZXNzX3JlZ3VsYXRvcl9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXZvbHQiLCB9LAogCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmV4cHJlc3NfcmVndWxhdG9yX2RyaXZlciA9IHsKIAkucHJvYmUgPSB2ZXhwcmVzc19yZWd1bGF0b3JfcHJvYmUsCi0JLnJlbW92ZSA9IHZleHByZXNzX3JlZ3VsYXRvcl9yZW1vdmUsCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUgPSBEUlZOQU1FLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3Jlc2V0L01ha2VmaWxlCmluZGV4IDRmNjBjYWYuLjYwZmVkM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZXNldC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19SRVNFVF9DT05UUk9MTEVSKSArPSBjb3JlLm8KK29iai0kKENPTkZJR19BUkNIX1NPQ0ZQR0EpICs9IHJlc2V0LXNvY2ZwZ2Eubwogb2JqLSQoQ09ORklHX0FSQ0hfU1VOWEkpICs9IHJlc2V0LXN1bnhpLm8KIG9iai0kKENPTkZJR19BUkNIX1NUSSkgKz0gc3RpLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWMzMmNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBTdGVmZmVuIFRydW10cmFyIDxzLnRydW10cmFyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIGJhc2VkIG9uCisgKiBBbGx3aW5uZXIgU29DcyBSZXNldCBDb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDEzIE1heGltZSBSaXBhcmQKKyAqCisgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQtY29udHJvbGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBOUl9CQU5LUwkJNAorI2RlZmluZSBPRkZTRVRfTU9EUlNUCQkweDEwCisKK3N0cnVjdCBzb2NmcGdhX3Jlc2V0X2RhdGEgeworCXNwaW5sb2NrX3QJCQlsb2NrOworCXZvaWQgX19pb21lbQkJCSptZW1iYXNlOworCXN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldglyY2RldjsKK307CisKK3N0YXRpYyBpbnQgc29jZnBnYV9yZXNldF9hc3NlcnQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKwkJCQl1bnNpZ25lZCBsb25nIGlkKQoreworCXN0cnVjdCBzb2NmcGdhX3Jlc2V0X2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2YocmNkZXYsCisJCQkJCQkgICAgIHN0cnVjdCBzb2NmcGdhX3Jlc2V0X2RhdGEsCisJCQkJCQkgICAgIHJjZGV2KTsKKwlpbnQgYmFuayA9IGlkIC8gQklUU19QRVJfTE9ORzsKKwlpbnQgb2Zmc2V0ID0gaWQgJSBCSVRTX1BFUl9MT05HOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisKKwlyZWcgPSByZWFkbChkYXRhLT5tZW1iYXNlICsgT0ZGU0VUX01PRFJTVCArIChiYW5rICogTlJfQkFOS1MpKTsKKwl3cml0ZWwocmVnIHwgQklUKG9mZnNldCksIGRhdGEtPm1lbWJhc2UgKyBPRkZTRVRfTU9EUlNUICsKKwkJCQkgKGJhbmsgKiBOUl9CQU5LUykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvY2ZwZ2FfcmVzZXRfZGVhc3NlcnQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgaWQpCit7CisJc3RydWN0IHNvY2ZwZ2FfcmVzZXRfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihyY2RldiwKKwkJCQkJCSAgICAgc3RydWN0IHNvY2ZwZ2FfcmVzZXRfZGF0YSwKKwkJCQkJCSAgICAgcmNkZXYpOworCisJaW50IGJhbmsgPSBpZCAvIEJJVFNfUEVSX0xPTkc7CisJaW50IG9mZnNldCA9IGlkICUgQklUU19QRVJfTE9ORzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCisJcmVnID0gcmVhZGwoZGF0YS0+bWVtYmFzZSArIE9GRlNFVF9NT0RSU1QgKyAoYmFuayAqIE5SX0JBTktTKSk7CisJd3JpdGVsKHJlZyAmIH5CSVQob2Zmc2V0KSwgZGF0YS0+bWVtYmFzZSArIE9GRlNFVF9NT0RSU1QgKworCQkJCSAgKGJhbmsgKiBOUl9CQU5LUykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzZXRfY29udHJvbF9vcHMgc29jZnBnYV9yZXNldF9vcHMgPSB7CisJLmFzc2VydAkJPSBzb2NmcGdhX3Jlc2V0X2Fzc2VydCwKKwkuZGVhc3NlcnQJPSBzb2NmcGdhX3Jlc2V0X2RlYXNzZXJ0LAorfTsKKworc3RhdGljIGludCBzb2NmcGdhX3Jlc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNvY2ZwZ2FfcmVzZXRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCS8qCisJICogVGhlIGJpbmRpbmcgd2FzIG1haW5saW5lZCB3aXRob3V0IHRoZSByZXF1aXJlZCBwcm9wZXJ0eS4KKwkgKiBEbyBub3QgY29udGludWUsIHdoZW4gd2UgZW5jb3VudGVyIGFuIG9sZCBEVC4KKwkgKi8KKwlpZiAoIW9mX2ZpbmRfcHJvcGVydHkocGRldi0+ZGV2Lm9mX25vZGUsICIjcmVzZXQtY2VsbHMiLCBOVUxMKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBtaXNzaW5nICNyZXNldC1jZWxscyBwcm9wZXJ0eVxuIiwKKwkJCXBkZXYtPmRldi5vZl9ub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRhdGEtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRhdGEtPm1lbWJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5tZW1iYXNlKTsKKworCXNwaW5fbG9ja19pbml0KCZkYXRhLT5sb2NrKTsKKworCWRhdGEtPnJjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJZGF0YS0+cmNkZXYubnJfcmVzZXRzID0gTlJfQkFOS1MgKiBCSVRTX1BFUl9MT05HOworCWRhdGEtPnJjZGV2Lm9wcyA9ICZzb2NmcGdhX3Jlc2V0X29wczsKKwlkYXRhLT5yY2Rldi5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJcmVzZXRfY29udHJvbGxlcl9yZWdpc3RlcigmZGF0YS0+cmNkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29jZnBnYV9yZXNldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc29jZnBnYV9yZXNldF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXNldF9jb250cm9sbGVyX3VucmVnaXN0ZXIoJmRhdGEtPnJjZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzb2NmcGdhX3Jlc2V0X2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiYWx0cixyc3QtbWdyIiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2NmcGdhX3Jlc2V0X2RyaXZlciA9IHsKKwkucHJvYmUJPSBzb2NmcGdhX3Jlc2V0X3Byb2JlLAorCS5yZW1vdmUJPSBzb2NmcGdhX3Jlc2V0X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAic29jZnBnYS1yZXNldCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gc29jZnBnYV9yZXNldF9kdF9pZHMsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNvY2ZwZ2FfcmVzZXRfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiU3RlZmZlbiBUcnVtdHJhciA8cy50cnVtdHJhckBwZW5ndXRyb25peC5kZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2NmcGdhIFJlc2V0IENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXN1bnhpLmMgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXN1bnhpLmMKaW5kZXggNjk1YmQzNC4uYTk0ZTdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9yZXNldC1zdW54aS5jCisrKyBiL2RyaXZlcnMvcmVzZXQvcmVzZXQtc3VueGkuYwpAQCAtMTQ1LDcgKzE0NSwyNCBAQAogCiBzdGF0aWMgaW50IHN1bnhpX3Jlc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcmV0dXJuIHN1bnhpX3Jlc2V0X2luaXQocGRldi0+ZGV2Lm9mX25vZGUpOworCXN0cnVjdCBzdW54aV9yZXNldF9kYXRhICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkYXRhLT5tZW1iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihkYXRhLT5tZW1iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YS0+bWVtYmFzZSk7CisKKwlkYXRhLT5yY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCWRhdGEtPnJjZGV2Lm5yX3Jlc2V0cyA9IHJlc291cmNlX3NpemUocmVzKSAqIDMyOworCWRhdGEtPnJjZGV2Lm9wcyA9ICZzdW54aV9yZXNldF9vcHM7CisJZGF0YS0+cmNkZXYub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCisJcmV0dXJuIHJlc2V0X2NvbnRyb2xsZXJfcmVnaXN0ZXIoJmRhdGEtPnJjZGV2KTsKIH0KIAogc3RhdGljIGludCBzdW54aV9yZXNldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTE1Myw4ICsxNzAsNiBAQAogCXN0cnVjdCBzdW54aV9yZXNldF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlyZXNldF9jb250cm9sbGVyX3VucmVnaXN0ZXIoJmRhdGEtPnJjZGV2KTsKLQlpb3VubWFwKGRhdGEtPm1lbWJhc2UpOwotCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDE1LmMgYi9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDE1LmMKaW5kZXggZTZmNmM0MS4uYzkzZmQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQxNS5jCisrKyBiL2RyaXZlcnMvcmVzZXQvc3RpL3Jlc2V0LXN0aWg0MTUuYwpAQCAtNzMsNiArNzMsNyBAQAogCVtTVElINDE1X1VTQjBfU09GVFJFU0VUXSA9IFNUSUg0MTVfU1JTVF9SRUFSKFNZU0NGR18zNzYsIDkpLAogCVtTVElINDE1X1VTQjFfU09GVFJFU0VUXSA9IFNUSUg0MTVfU1JTVF9SRUFSKFNZU0NGR18zNzYsIDEwKSwKIAlbU1RJSDQxNV9VU0IyX1NPRlRSRVNFVF0gPSBTVElINDE1X1NSU1RfUkVBUihTWVNDRkdfMzc2LCAxMSksCisJW1NUSUg0MTVfS0VZU0NBTl9TT0ZUUkVTRVRdID0gU1RJSDQxNV9TUlNUX0xQTShMUE1fU1lTQ0ZHXzEsIDgpLAogfTsKIAogc3RhdGljIHN0cnVjdCBzeXNjZmdfcmVzZXRfY29udHJvbGxlcl9kYXRhIHN0aWg0MTVfcG93ZXJkb3duX2NvbnRyb2xsZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDE2LmMgYi9kcml2ZXJzL3Jlc2V0L3N0aS9yZXNldC1zdGloNDE2LmMKaW5kZXggZmUzYmYwMi4uNWZjOTg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQxNi5jCisrKyBiL2RyaXZlcnMvcmVzZXQvc3RpL3Jlc2V0LXN0aWg0MTYuYwpAQCAtMTA0LDYgKzEwNCw3IEBACiAJW1NUSUg0MTZfQ09NUE9fQV9TT0ZUUkVTRVRdID0gU1RJSDQxNl9TUlNUX0NQVShTWVNDRkdfNzU2NCwgNCksCiAJW1NUSUg0MTZfVlA4X0RFQ19TT0ZUUkVTRVRdID0gU1RJSDQxNl9TUlNUX0NQVShTWVNDRkdfNzU2NCwgMTApLAogCVtTVElINDE2X1ZUR19NQUlOX1NPRlRSRVNFVF0gPSBTVElINDE2X1NSU1RfQ1BVKFNZU0NGR183NTY0LCAxNiksCisJW1NUSUg0MTZfS0VZU0NBTl9TT0ZUUkVTRVRdID0gU1RJSDQxNl9TUlNUX0xQTShMUE1fU1lTQ0ZHXzEsIDgpLAogfTsKIAogc3RhdGljIHN0cnVjdCBzeXNjZmdfcmVzZXRfY29udHJvbGxlcl9kYXRhIHN0aWg0MTZfcG93ZXJkb3duX2NvbnRyb2xsZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCmluZGV4IGI2OWFiMTcuLjYyOWZjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCkBAIC0zMyw0ICszMyw0IEBACiBvYmotJChDT05GSUdfUzM5MF9WTVVSKSArPSB2bXVyLm8KIAogemNvcmVfbW9kLW9ianMgOj0gc2NscF9zZGlhcy5vIHpjb3JlLm8KLW9iai0kKENPTkZJR19aRkNQRFVNUCkgKz0gemNvcmVfbW9kLm8KK29iai0kKENPTkZJR19DUkFTSF9EVU1QKSArPSB6Y29yZV9tb2QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jCmluZGV4IDE0MTk2ZWEuLjE5MThkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMKQEAgLTIyLDExICsyMiwxNCBAQAogCXU4CXJuc2l6ZTsJCQkvKiAxMCAqLwogCXU4CV9yZXNlcnZlZDBbMTYgLSAxMV07CS8qIDExLTE1ICovCiAJdTE2CW5jcHVybDsJCQkvKiAxNi0xNyAqLwotCXU4CV9yZXNlcnZlZDdbMjQgLSAxOF07CS8qIDE4LTIzICovCisJdTE2CWNwdW9mZjsJCQkvKiAxOC0xOSAqLworCXU4CV9yZXNlcnZlZDdbMjQgLSAyMF07CS8qIDIwLTIzICovCiAJdTgJbG9hZHBhcm1bOF07CQkvKiAyNC0zMSAqLwogCXU4CV9yZXNlcnZlZDFbNDggLSAzMl07CS8qIDMyLTQ3ICovCiAJdTY0CWZhY2lsaXRpZXM7CQkvKiA0OC01NSAqLwotCXU4CV9yZXNlcnZlZDJbODQgLSA1Nl07CS8qIDU2LTgzICovCisJdTgJX3Jlc2VydmVkMmFbNzYgLSA1Nl07CS8qIDU2LTc1ICovCisJdTMyCWliYzsJCQkvKiA3Ni03OSAqLworCXU4CV9yZXNlcnZlZDJiWzg0IC0gODBdOwkvKiA4MC04MyAqLwogCXU4CWZhYzg0OwkJCS8qIDg0ICovCiAJdTgJZmFjODU7CQkJLyogODUgKi8KIAl1OAlfcmVzZXJ2ZWQzWzkxIC0gODZdOwkvKiA4Ni05MCAqLwpAQCAtNDUsNiArNDgsOCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NscF9oc2Ffc2l6ZTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2NscF9tYXhfY3B1Owogc3RhdGljIHN0cnVjdCBzY2xwX2lwbF9pbmZvIHNjbHBfaXBsX2luZm87CitzdGF0aWMgdW5zaWduZWQgY2hhciBzY2xwX3NpaWY7CitzdGF0aWMgdTMyIHNjbHBfaWJjOwogCiB1NjQgc2NscF9mYWNpbGl0aWVzOwogdTggc2NscF9mYWM4NDsKQEAgLTk2LDYgKzEwMSw5IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzY2xwX2ZhY2lsaXRpZXNfZGV0ZWN0KHN0cnVjdCByZWFkX2luZm9fc2NjYiAqc2NjYikKIHsKKwlzdHJ1Y3Qgc2NscF9jcHVfZW50cnkgKmNwdWU7CisJdTE2IGJvb3RfY3B1X2FkZHJlc3MsIGNwdTsKKwogCWlmIChzY2xwX3JlYWRfaW5mb19lYXJseShzY2NiKSkKIAkJcmV0dXJuOwogCkBAIC0xMDYsNiArMTE0LDcgQEAKIAlzY2xwX3JubWF4ID0gc2NjYi0+cm5tYXggPyBzY2NiLT5ybm1heCA6IHNjY2ItPnJubWF4MjsKIAlzY2xwX3J6bSA9IHNjY2ItPnJuc2l6ZSA/IHNjY2ItPnJuc2l6ZSA6IHNjY2ItPnJuc2l6ZTI7CiAJc2NscF9yem0gPDw9IDIwOworCXNjbHBfaWJjID0gc2NjYi0+aWJjOwogCiAJaWYgKCFzY2NiLT5oY3B1YSkgewogCQlpZiAoTUFDSElORV9JU19WTSkKQEAgLTExNiw2ICsxMjUsMTUgQEAKIAkJc2NscF9tYXhfY3B1ID0gc2NjYi0+aGNwdWEgKyAxOwogCX0KIAorCWJvb3RfY3B1X2FkZHJlc3MgPSBzdGFwKCk7CisJY3B1ZSA9ICh2b2lkICopc2NjYiArIHNjY2ItPmNwdW9mZjsKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IHNjY2ItPm5jcHVybDsgY3B1ZSsrLCBjcHUrKykgeworCQlpZiAoYm9vdF9jcHVfYWRkcmVzcyAhPSBjcHVlLT5hZGRyZXNzKQorCQkJY29udGludWU7CisJCXNjbHBfc2lpZiA9IGNwdWUtPnNpaWY7CisJCWJyZWFrOworCX0KKwogCS8qIFNhdmUgSVBMIGluZm9ybWF0aW9uICovCiAJc2NscF9pcGxfaW5mby5pc192YWxpZCA9IDE7CiAJaWYgKHNjY2ItPmZsYWdzICYgMHgyKQpAQCAtMTQ4LDYgKzE2NiwxOCBAQAogCXJldHVybiBzY2xwX21heF9jcHU7CiB9CiAKK2ludCBzY2xwX2hhc19zaWlmKHZvaWQpCit7CisJcmV0dXJuIHNjbHBfc2lpZjsKK30KK0VYUE9SVF9TWU1CT0woc2NscF9oYXNfc2lpZik7CisKK3Vuc2lnbmVkIGludCBzY2xwX2dldF9pYmModm9pZCkKK3sKKwlyZXR1cm4gc2NscF9pYmM7Cit9CitFWFBPUlRfU1lNQk9MKHNjbHBfZ2V0X2liYyk7CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHNjbHBfZmFjaWxpdGllc19kZXRlY3QoKSwgd2hpY2ggZ2V0cwogICogY2FsbGVkIGZyb20gZWFybHkuYyBjb2RlLiBUaGUgc2NscF9mYWNpbGl0aWVzX2RldGVjdCgpIGZ1bmN0aW9uIHJldHJpZXZlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggM2Q4ZTRkNi4uMTg4NDY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgorCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2lwbC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CkBAIC00MTEsMzMgKzQxMywyNCBAQAogCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgZmlscC0+cHJpdmF0ZV9kYXRhLAotCQkJCSAgICAgICBNRU1PUllfQ0hVTktTICogQ0hVTktfSU5GT19TSVpFKTsKKwkJCQkgICAgICAgbWVtYmxvY2subWVtb3J5LmNudCAqIENIVU5LX0lORk9fU0laRSk7CiB9CiAKIHN0YXRpYyBpbnQgemNvcmVfbWVtbWFwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IGk7CisJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnOwogCWNoYXIgKmJ1ZjsKLQlzdHJ1Y3QgbWVtX2NodW5rICpjaHVua19hcnJheTsKKwlpbnQgaSA9IDA7CiAKLQljaHVua19hcnJheSA9IGt6YWxsb2MoTUVNT1JZX0NIVU5LUyAqIHNpemVvZihzdHJ1Y3QgbWVtX2NodW5rKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghY2h1bmtfYXJyYXkpCi0JCXJldHVybiAtRU5PTUVNOwotCWRldGVjdF9tZW1vcnlfbGF5b3V0KGNodW5rX2FycmF5LCAwKTsKLQlidWYgPSBremFsbG9jKE1FTU9SWV9DSFVOS1MgKiBDSFVOS19JTkZPX1NJWkUsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGt6YWxsb2MobWVtYmxvY2subWVtb3J5LmNudCAqIENIVU5LX0lORk9fU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJa2ZyZWUoY2h1bmtfYXJyYXkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQlzcHJpbnRmKGJ1ZiArIChpICogQ0hVTktfSU5GT19TSVpFKSwgIiUwMTZsbHggJTAxNmxseCAiLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY2h1bmtfYXJyYXlbaV0uYWRkciwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGNodW5rX2FycmF5W2ldLnNpemUpOwotCQlpZiAoY2h1bmtfYXJyYXlbaV0uc2l6ZSA9PSAwKQotCQkJYnJlYWs7CisJZm9yX2VhY2hfbWVtYmxvY2sobWVtb3J5LCByZWcpIHsKKwkJc3ByaW50ZihidWYgKyAoaSsrICogQ0hVTktfSU5GT19TSVpFKSwgIiUwMTZsbHggJTAxNmxseCAiLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVnLT5iYXNlLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVnLT5zaXplKTsKIAl9Ci0Ja2ZyZWUoY2h1bmtfYXJyYXkpOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGJ1ZjsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CiB9CkBAIC01OTMsMjEgKzU4NiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZXRfbWVtX2luZm8odW5zaWduZWQgbG9uZyAqbWVtLCB1bnNpZ25lZCBsb25nICplbmQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IG1lbV9jaHVuayAqY2h1bmtfYXJyYXk7CisJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnOwogCi0JY2h1bmtfYXJyYXkgPSBremFsbG9jKE1FTU9SWV9DSFVOS1MgKiBzaXplb2Yoc3RydWN0IG1lbV9jaHVuayksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWNodW5rX2FycmF5KQotCQlyZXR1cm4gLUVOT01FTTsKLQlkZXRlY3RfbWVtb3J5X2xheW91dChjaHVua19hcnJheSwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1M7IGkrKykgewotCQlpZiAoY2h1bmtfYXJyYXlbaV0uc2l6ZSA9PSAwKQotCQkJYnJlYWs7Ci0JCSptZW0gKz0gY2h1bmtfYXJyYXlbaV0uc2l6ZTsKLQkJKmVuZCA9IG1heCgqZW5kLCBjaHVua19hcnJheVtpXS5hZGRyICsgY2h1bmtfYXJyYXlbaV0uc2l6ZSk7CisJZm9yX2VhY2hfbWVtYmxvY2sobWVtb3J5LCByZWcpIHsKKwkJKm1lbSArPSByZWctPnNpemU7CisJCSplbmQgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCAqZW5kLCByZWctPmJhc2UgKyByZWctPnNpemUpOwogCX0KLQlrZnJlZShjaHVua19hcnJheSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCmluZGV4IDUxNTYyNjQuLjA3Njc2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYwpAQCAtNDYsNyArNDYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJcmVxLT5yZXRyaWVzCT0gcmVxLT5tYXhyZXRyaWVzOwotCXJlcS0+bWFzawk9IGxwbV9hZGp1c3QocmVxLT5tYXNrID4+PSAxLCByZXEtPmxwbSk7CisJcmVxLT5tYXNrCT0gbHBtX2FkanVzdChyZXEtPm1hc2sgPj4gMSwgcmVxLT5scG0pOwogb3V0OgogCXJldHVybiByZXEtPm1hc2s7CiB9CkBAIC0yNTIsNyArMjUyLDcgQEAKICAqLwogdm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CisJc3RydWN0IGlyYiAqaXJiID0gJl9fZ2V0X2NwdV92YXIoY2lvX2lyYik7CiAJc3RydWN0IGNjd19yZXF1ZXN0ICpyZXEgPSAmY2Rldi0+cHJpdmF0ZS0+cmVxOwogCWVudW0gaW9fc3RhdHVzIHN0YXR1czsKIAlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCmluZGV4IDZjNDQwZDQuLmQ0OTdhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwpAQCAtNTA5LDcgKzUwOSw3IEBACiAgKiBPbiBzdWNjZXNzIHJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIHRoZSBjaGFubmVsLXBhdGggZGVzY3JpcHRpb24KICAqIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjaGFubmVsLXBhdGggSUQuIFJldHVybiAlTlVMTCBvbiBlcnJvci4KICAqLwotdm9pZCAqY2hwX2dldF9jaHBfZGVzYyhzdHJ1Y3QgY2hwX2lkIGNocGlkKQorc3RydWN0IGNoYW5uZWxfcGF0aF9kZXNjICpjaHBfZ2V0X2NocF9kZXNjKHN0cnVjdCBjaHBfaWQgY2hwaWQpCiB7CiAJc3RydWN0IGNoYW5uZWxfcGF0aCAqY2hwOwogCXN0cnVjdCBjaGFubmVsX3BhdGhfZGVzYyAqZGVzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmggYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5oCmluZGV4IDkyODRiNzguLjRlZmQ1YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuaApAQCAtNjAsNyArNjAsNyBAQAogaW50IGNocF9nZXRfc3RhdHVzKHN0cnVjdCBjaHBfaWQgY2hwaWQpOwogdTggY2hwX2dldF9zY2hfb3BtKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpOwogaW50IGNocF9pc19yZWdpc3RlcmVkKHN0cnVjdCBjaHBfaWQgY2hwaWQpOwotdm9pZCAqY2hwX2dldF9jaHBfZGVzYyhzdHJ1Y3QgY2hwX2lkIGNocGlkKTsKK3N0cnVjdCBjaGFubmVsX3BhdGhfZGVzYyAqY2hwX2dldF9jaHBfZGVzYyhzdHJ1Y3QgY2hwX2lkIGNocGlkKTsKIHZvaWQgY2hwX3JlbW92ZV9jbWdfYXR0cihzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHApOwogaW50IGNocF9hZGRfY21nX2F0dHIoc3RydWN0IGNoYW5uZWxfcGF0aCAqY2hwKTsKIGludCBjaHBfdXBkYXRlX2Rlc2Moc3RydWN0IGNoYW5uZWxfcGF0aCAqY2hwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKaW5kZXggN2U1M2E5Yy4uNzZjOWI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKQEAgLTIxLDE3ICsyMSw2IEBACiAJdTMyIHZhbHVlc1tOUl9NRUFTVVJFTUVOVF9FTlRSSUVTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgY2hhbm5lbF9wYXRoX2Rlc2MgewotCXU4IGZsYWdzOwotCXU4IGxzbjsKLQl1OCBkZXNjOwotCXU4IGNocGlkOwotCXU4IHN3bGE7Ci0JdTggemVyb2VzOwotCXU4IGNobGE7Ci0JdTggY2hwcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3QgY2hhbm5lbF9wYXRoX2Rlc2NfZm10MSB7CiAJdTggZmxhZ3M7CiAJdTggbHNuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IDFkMzY2MWEuLjNkMjJkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTU4LDcgKzU4LDcgQEAKIHsKIAlzdHJ1Y3QgY2hzY19wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKCZzY2gtPmRldik7CiAJc3RydWN0IGNoc2NfcmVxdWVzdCAqcmVxdWVzdCA9IHByaXZhdGUtPnJlcXVlc3Q7Ci0Jc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKKwlzdHJ1Y3QgaXJiICppcmIgPSAmX19nZXRfY3B1X3ZhcihjaW9faXJiKTsKIAogCUNIU0NfTE9HKDQsICJpcmIiKTsKIAlDSFNDX0xPR19IRVgoNCwgaXJiLCBzaXplb2YoKmlyYikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggOWUwNThjNC4uNzdmOWM5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtNDYsNiArNDYsOSBAQAogZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7CiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19jcndfaWQ7CiAKK0RFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IGlyYiwgY2lvX2lyYik7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woY2lvX2lyYik7CisKIC8qCiAgKiBGdW5jdGlvbjogY2lvX2RlYnVnX2luaXQKICAqIEluaXRpYWxpemVzIHRocmVlIGRlYnVnIGxvZ3MgZm9yIGNvbW1vbiBJL086CkBAIC01NjAsNyArNTYzLDcgQEAKIAogCV9fdGhpc19jcHVfd3JpdGUoczM5MF9pZGxlLm5vaHpfZGVsYXksIDEpOwogCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSAmZ2V0X2lycV9yZWdzKCktPmludF9jb2RlOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopICZTMzkwX2xvd2NvcmUuaXJiOworCWlyYiA9ICZfX2dldF9jcHVfdmFyKGNpb19pcmIpOwogCXNjaCA9IChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKSh1bnNpZ25lZCBsb25nKSB0cGlfaW5mby0+aW50cGFybTsKIAlpZiAoIXNjaCkgewogCQkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdCBjb25kaXRpb24uICovCkBAIC02MDksNyArNjEyLDcgQEAKIAlzdHJ1Y3QgaXJiICppcmI7CiAJaW50IGlycV9jb250ZXh0OwogCi0JaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKKwlpcmIgPSAmX19nZXRfY3B1X3ZhcihjaW9faXJiKTsKIAkvKiBTdG9yZSBpbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgdG8gbG93Y29yZS4gKi8KIAlpZiAodHNjaChzY2gtPnNjaGlkLCBpcmIpICE9IDApCiAJCS8qIE5vdCBzdGF0dXMgcGVuZGluZyBvciBub3Qgb3BlcmF0aW9uYWwuICovCkBAIC03NDYsNyArNzQ5LDcgQEAKIAkJc3RydWN0IHRwaV9pbmZvIHRpOwogCiAJCWlmICh0cGkoJnRpKSkgewotCQkJdHNjaCh0aS5zY2hpZCwgKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYik7CisJCQl0c2NoKHRpLnNjaGlkLCAmX19nZXRfY3B1X3ZhcihjaW9faXJiKSk7CiAJCQlpZiAoc2NoaWRfZXF1YWwoJnRpLnNjaGlkLCAmc2NoaWQpKQogCQkJCXJldHVybiAwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5oIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uaAppbmRleCBkNDJmNjc0Li5hMDEzNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmgKQEAgLTEwMiw2ICsxMDIsOCBAQAogCXN0cnVjdCBzY2hpYl9jb25maWcgY29uZmlnOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg4KSkpOwogCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGlyYiwgY2lvX2lyYik7CisKICNkZWZpbmUgdG9fc3ViY2hhbm5lbChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHN1YmNoYW5uZWwsIGRldikKIAogZXh0ZXJuIGludCBjaW9fdmFsaWRhdGVfc3ViY2hhbm5lbCAoc3RydWN0IHN1YmNoYW5uZWwgKiwgc3RydWN0IHN1YmNoYW5uZWxfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCBjNzYzOGM1Li4wYmM5MDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtNzM5LDcgKzczOSw3IEBACiAJc3RydWN0IGlyYiAqaXJiOwogCWludCBpc19jbWQ7CiAKLQlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOworCWlyYiA9ICZfX2dldF9jcHVfdmFyKGNpb19pcmIpOwogCWlzX2NtZCA9ICFzY3N3X2lzX3RtKCZpcmItPnNjc3cpOwogCS8qIENoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHQuICovCiAJaWYgKCFzY3N3X2lzX3NvbGljaXRlZCgmaXJiLT5zY3N3KSkgewpAQCAtODA1LDcgKzgwNSw3IEBACiB7CiAJc3RydWN0IGlyYiAqaXJiOwogCi0JaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKKwlpcmIgPSAmX19nZXRfY3B1X3ZhcihjaW9faXJiKTsKIAkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0LiAqLwogCWlmIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpID09CiAJICAgIChTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EIHwgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCmluZGV4IDQ4NDVkNjQuLmYzYzQxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCkBAIC01NjMsMTQgKzU2MywyMyBAQAogCXJldHVybiByYzsKIH0KIAotdm9pZCAqY2N3X2RldmljZV9nZXRfY2hwX2Rlc2Moc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBjaHBfbm8pCisvKioKKyAqIGNocF9nZXRfY2hwX2Rlc2MgLSByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGNoYW5uZWwtcGF0aCBkZXNjcmlwdG9yCisgKiBAY2RldjogZGV2aWNlIHRvIG9idGFpbiB0aGUgZGVzY3JpcHRvciBmb3IKKyAqIEBjaHBfaWR4OiBpbmRleCBvZiB0aGUgY2hhbm5lbCBwYXRoCisgKgorICogT24gc3VjY2VzcyByZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgY29weSBvZiB0aGUgY2hhbm5lbC1wYXRoIGRlc2NyaXB0aW9uCisgKiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY2hhbm5lbCBwYXRoLiBSZXR1cm4gJU5VTEwgb24gZXJyb3IuCisgKi8KK3N0cnVjdCBjaGFubmVsX3BhdGhfZGVzYyAqY2N3X2RldmljZV9nZXRfY2hwX2Rlc2Moc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCisJCQkJCQkgIGludCBjaHBfaWR4KQogewogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAJc3RydWN0IGNocF9pZCBjaHBpZDsKIAogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJY2hwX2lkX2luaXQoJmNocGlkKTsKLQljaHBpZC5pZCA9IHNjaC0+c2NoaWIucG1jdy5jaHBpZFtjaHBfbm9dOworCWNocGlkLmlkID0gc2NoLT5zY2hpYi5wbWN3LmNocGlkW2NocF9pZHhdOwogCXJldHVybiBjaHBfZ2V0X2NocF9kZXNjKGNocGlkKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9lYWRtX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9lYWRtX3NjaC5jCmluZGV4IDNhMmVlNGEuLmM0ZjdiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZWFkbV9zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2VhZG1fc2NoLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogewogCXN0cnVjdCBlYWRtX3ByaXZhdGUgKnByaXZhdGUgPSBnZXRfZWFkbV9wcml2YXRlKHNjaCk7CiAJc3RydWN0IGVhZG1fc2NzdyAqc2NzdyA9ICZzY2gtPnNjaGliLnNjc3cuZWFkbTsKLQlzdHJ1Y3QgaXJiICppcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOworCXN0cnVjdCBpcmIgKmlyYiA9ICZfX2dldF9jcHVfdmFyKGNpb19pcmIpOwogCWludCBlcnJvciA9IDA7CiAKIAlFQURNX0xPRyg2LCAiaXJxIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwppbmRleCBhYjNiYWE3Li44ZWVjMTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKQEAgLTE4MDMsNyArMTgwMyw3IEBACiAJaW50IHJlcXVlc3RzOwogCXN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldjsKIAotCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUFYX05JQ0UpOwogCXdoaWxlICgxKSB7CiAJCWlmIChhcF9zdXNwZW5kX2ZsYWcpCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCAyMjQ3MGEzLi5lODlmMzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bmV0L2l1Y3YvYWZfaXVjdi5oPgogCiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgorI2luY2x1ZGUgPGFzbS9jaHBpZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBhdC5oPgpAQCAtMTM0NCwxNiArMTM0NSw3IEBACiBzdGF0aWMgdm9pZCBxZXRoX3VwZGF0ZV9mcm9tX2NocF9kZXNjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKLQlzdHJ1Y3QgY2hhbm5lbFBhdGhfZHNjIHsKLQkJdTggZmxhZ3M7Ci0JCXU4IGxzbjsKLQkJdTggZGVzYzsKLQkJdTggY2hwaWQ7Ci0JCXU4IHN3bGE7Ci0JCXU4IHplcm9lczsKLQkJdTggY2hsYTsKLQkJdTggY2hwcDsKLQl9ICpjaHBfZHNjOworCXN0cnVjdCBjaGFubmVsX3BhdGhfZGVzYyAqY2hwX2RzYzsKIAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJjaHBfZGVzYyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMgYi9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKaW5kZXggNGNjYjVkOC4uYTQwZWUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCQlnb3RvIGVuZDsKIAkJfQogCi0JCWpzZmRfcmVhZChyZXEtPmJ1ZmZlciwgamRwLT5kYmFzZSArIG9mZnNldCwgbGVuKTsKKwkJanNmZF9yZWFkKGJpb19kYXRhKHJlcS0+YmlvKSwgamRwLT5kYmFzZSArIG9mZnNldCwgbGVuKTsKIAkJZXJyID0gMDsKIAllbmQ6CiAJCWlmICghX19ibGtfZW5kX3JlcXVlc3RfY3VyKHJlcSwgZXJyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaAppbmRleCA5YjA1OTQyLi4xMTM4NzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCkBAIC05MTEsNyArOTExLDcgQEAKIAl1aW50OF90ICBsZW5ndGg7CiAJdWludDhfdCAgcmV2aXNpb247CiAJdWludDhfdCAgZGV2aWNlX2ZsYWdzOwotCXVpbnQ4X3QgIHRlcm1uYXRpb25fbWVudXNbMl07CisJdWludDhfdCAgdGVybWluYXRpb25fbWVudXNbMl07CiAJdWludDhfdCAgZmlmb190aHJlc2hvbGQ7CiAJdWludDhfdCAgZW5kX3RhZzsKIAl1aW50OF90ICB2cGRfY2hlY2tzdW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCBjMGM2MjU4Li4xMTRmZjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTE0NSwxNiArMTQ1LDYgQEAKICNlbmRpZgogCiAvKgotICogQ29udHJvbCBjb2xsZWN0aW9uIG9mIFNDU0kgdHJhbnNmZXIgc3RhdGlzdGljcyBmb3IgdGhlIC9wcm9jIGZpbGVzeXN0ZW0uCi0gKgotICogTk9URTogRG8gTk9UIGVuYWJsZSB0aGlzIHdoZW4gcnVubmluZyBvbiBrZXJuZWxzIHZlcnNpb24gMS4yLnggYW5kIGJlbG93LgotICogTk9URTogVGhpcyBkb2VzIGFmZmVjdCBwZXJmb3JtYW5jZSBzaW5jZSBpdCBoYXMgdG8gbWFpbnRhaW4gc3RhdGlzdGljcy4KLSAqLwotI2lmZGVmIENPTkZJR19BSUM3WFhYX1BST0NfU1RBVFMKLSNkZWZpbmUgQUlDN1hYWF9QUk9DX1NUQVRTCi0jZW5kaWYKLQotLyoKICAqIFRvIGNoYW5nZSB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIHRyYW5zYWN0aW9ucyBhbGxvd2VkIHBlci1kZXZpY2UsCiAgKiBhZGQgYSBsaW5lIHRvIHRoZSBsaWxvLmNvbmYgZmlsZSBsaWtlOgogICogYXBwZW5kPSJhaWM3eHh4PXZlcmJvc2UsdGFnX2luZm86e3szMiwzMiwzMiwzMn0sezMyLDMyLDMyLDMyfX0iCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCAyOTZjOTM2Li5hOGQ3MjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTYzOSw3ICs2MzksNyBAQAogCQkJCQkiZG91YmxlIGJ1ZmZlclxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlhdGFyaV9kbWFfcGh5c19idWZmZXIgPSB2aXJ0X3RvX3BoeXMoYXRhcmlfZG1hX2J1ZmZlcik7CisJCWF0YXJpX2RtYV9waHlzX2J1ZmZlciA9IGF0YXJpX3N0cmFtX3RvX3BoeXMoYXRhcmlfZG1hX2J1ZmZlcik7CiAJCWF0YXJpX2RtYV9vcmlnX2FkZHIgPSAwOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCmluZGV4IDFkNDFmNGIuLmY1NDg0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXN0cnVjdCBmY29lX3BlcmNwdV9zICpiZyA9IGFyZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJc2NoZWR1bGUoKTsKQEAgLTYwMiw3ICs2MDIsNyBAQAogCXN0cnVjdCBibngyZmNfd29yayAqd29yaywgKnRtcDsKIAlMSVNUX0hFQUQod29ya19saXN0KTsKIAotCXNldF91c2VyX25pY2UoY3VycmVudCwgLTIwKTsKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIE1JTl9OSUNFKTsKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNjaGVkdWxlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKaW5kZXggYjVmZmQyOC4uZDZkNDkxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwpAQCAtMTg3MCw3ICsxODcwLDcgQEAKIAlzdHJ1Y3QgYm54Mmlfd29yayAqd29yaywgKnRtcDsKIAlMSVNUX0hFQUQod29ya19saXN0KTsKIAotCXNldF91c2VyX25pY2UoY3VycmVudCwgLTIwKTsKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIE1JTl9OSUNFKTsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNwaW5fbG9ja19iaCgmcC0+cF93b3JrX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCmluZGV4IGQ1ZTEwNWIuLjAwZWUwZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKQEAgLTE4NzIsNyArMTg3Miw3IEBACiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ0bXApOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCiByZXRyeToKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDIzZjViYTUuLjhkZDQ3NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTQ1MTUsNyArNDUxNSw3IEBACiAJc3RydWN0IGlibXZmY19ob3N0ICp2aG9zdCA9IGRhdGE7CiAJaW50IHJjOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCiAJd2hpbGUgKDEpIHsKIAkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmhvc3QtPndvcmtfd2FpdF9xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCBmYTc2NDQwLi4yZWJmYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtMjIxMyw3ICsyMjEzLDcgQEAKIAlzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSA9IGRhdGE7CiAJaW50IHJjOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCiAJd2hpbGUgKDEpIHsKIAkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaG9zdGRhdGEtPndvcmtfd2FpdF9xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY2kvcmVtb3RlX2RldmljZS5jIGIvZHJpdmVycy9zY3NpL2lzY2kvcmVtb3RlX2RldmljZS5jCmluZGV4IDk2YTI2ZjQuLmNjNTFmMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NpL3JlbW90ZV9kZXZpY2UuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjaS9yZW1vdGVfZGV2aWNlLmMKQEAgLTE1NDEsNyArMTU0MSw3IEBACiAJY2xlYXJfYml0KElERVZfU1RPUF9QRU5ESU5HLCAmaWRldi0+ZmxhZ3MpOwogCWNsZWFyX2JpdChJREVWX0lPX1JFQURZLCAmaWRldi0+ZmxhZ3MpOwogCWNsZWFyX2JpdChJREVWX0dPTkUsICZpZGV2LT5mbGFncyk7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KElERVZfQUxMT0NBVEVELCAmaWRldi0+ZmxhZ3MpOwogCXdha2VfdXAoJmlob3N0LT5ldmVudHEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCA1OWI1MWM1Li4yOTRjMDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNzMxLDcgKzczMSw3IEBACiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gcDsKIAlpbnQgcmM7CiAKLQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CisJc2V0X3VzZXJfbmljZShjdXJyZW50LCBNSU5fTklDRSk7CiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAJcGhiYS0+ZGF0YV9mbGFncyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggMTllOTljYy4uYWZjODQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTQ4MjgsNyArNDgyOCw3IEBACiAJaGEgPSAoc3RydWN0IHFsYV9od19kYXRhICopZGF0YTsKIAliYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKLQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CisJc2V0X3VzZXJfbmljZShjdXJyZW50LCBNSU5fTklDRSk7CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDlkYjA5N2EuLmEwYzk1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAljbWQtPnJlc3VsdCA9IDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgY21kLT5yZXF1ZXN0KTsKLQlrYmxvY2tkX3NjaGVkdWxlX3dvcmsocSwgJmRldmljZS0+cmVxdWV1ZV93b3JrKTsKKwlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJmRldmljZS0+cmVxdWV1ZV93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTAxOSw4ICsxMDE5LDYgQEAKIAkJcmV0dXJuIEJMS1BSRVBfREVGRVI7CiAJfQogCi0JcmVxLT5idWZmZXIgPSBOVUxMOwotCiAJLyogCiAJICogTmV4dCwgd2FsayB0aGUgbGlzdCwgYW5kIGZpbGwgaW4gdGhlIGFkZHJlc3NlcyBhbmQgc2l6ZXMgb2YKIAkgKiBlYWNoIHNlZ21lbnQuCkBAIC0xMTU4LDcgKzExNTYsNiBAQAogCQlCVUdfT04oYmxrX3JxX2J5dGVzKHJlcSkpOwogCiAJCW1lbXNldCgmY21kLT5zZGIsIDAsIHNpemVvZihjbWQtPnNkYikpOwotCQlyZXEtPmJ1ZmZlciA9IE5VTEw7CiAJfQogCiAJY21kLT5jbWRfbGVuID0gcmVxLT5jbWRfbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBlZmNiY2QxLi45NmFmMTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtNzM3LDE2ICs3MzcsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJcnEtPmNvbXBsZXRpb25fZGF0YSA9IHBhZ2U7CiAJYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQocnEsIHBhZ2UsIGxlbik7CiAJcmV0ID0gc2NzaV9zZXR1cF9ibGtfcGNfY21uZChzZHAsIHJxKTsKLQlycS0+YnVmZmVyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCXJxLT5fX2RhdGFfbGVuID0gbnJfYnl0ZXM7CiAKIG91dDoKLQlpZiAocmV0ICE9IEJMS1BSRVBfT0spIHsKKwlpZiAocmV0ICE9IEJMS1BSRVBfT0spCiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwotCQlycS0+YnVmZmVyID0gTlVMTDsKLQl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODQyLDEwICs4NDAsOSBAQAogewogCXN0cnVjdCBzY3NpX2NtbmQgKlNDcG50ID0gcnEtPnNwZWNpYWw7CiAKLQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylycS0+YnVmZmVyKTsKLQkJcnEtPmJ1ZmZlciA9IE5VTEw7Ci0JfQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpCisJCV9fZnJlZV9wYWdlKHJxLT5jb21wbGV0aW9uX2RhdGEpOworCiAJaWYgKFNDcG50LT5jbW5kICE9IHJxLT5jbWQpIHsKIAkJbWVtcG9vbF9mcmVlKFNDcG50LT5jbW5kLCBzZF9jZGJfcG9vbCk7CiAJCVNDcG50LT5jbW5kID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL0tjb25maWcgYi9kcml2ZXJzL3NvYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTQzODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9LY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorbWVudSAiU09DIChTeXN0ZW0gT24gQ2hpcCkgc3BlY2lmaWMgRHJpdmVycyIKKworc291cmNlICJkcml2ZXJzL3NvYy9xY29tL0tjb25maWciCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL01ha2VmaWxlIGIvZHJpdmVycy9zb2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3YzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IEtlcm5lbCBTT0Mgc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMuCisjCisKK29iai0kKENPTkZJR19BUkNIX1FDT00pCQkrPSBxY29tLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnIGIvZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZDJjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9xY29tL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorIworIyBRQ09NIFNvYyBkcml2ZXJzCisjCitjb25maWcgUUNPTV9HU0JJCisgICAgICAgIHRyaXN0YXRlICJRQ09NIEdlbmVyYWwgU2VyaWFsIEJ1cyBJbnRlcmZhY2UiCisgICAgICAgIGRlcGVuZHMgb24gQVJDSF9RQ09NCisgICAgICAgIGhlbHAKKyAgICAgICAgICBTYXkgeSBoZXJlIHRvIGVuYWJsZSBHU0JJIHN1cHBvcnQuICBUaGUgR1NCSSBwcm92aWRlcyBjb250cm9sCisgICAgICAgICAgZnVuY3Rpb25zIGZvciBjb25uZWN0aW5nIHRoZSB1bmRlcmx5aW5nIHNlcmlhbCBVQVJULCBTUEksIGFuZCBJMkMKKyAgICAgICAgICBkZXZpY2VzIHRvIHRoZSBvdXRwdXQgcGlucy4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4OTAxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1FDT01fR1NCSSkJKz0JcWNvbV9nc2JpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3Fjb20vcWNvbV9nc2JpLmMgYi9kcml2ZXJzL3NvYy9xY29tL3Fjb21fZ3NiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzQ1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9xY29tL3Fjb21fZ3NiaS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFRoZSBMaW51eCBmb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJldiAyIGFuZAorICogb25seSByZXYgMiBhcyBwdWJsaXNoZWQgYnkgdGhlIGZyZWUgU29mdHdhcmUgZm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgZklUTkVTUyBmT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2RlZmluZSBHU0JJX0NUUkxfUkVHCQkweDAwMDAKKyNkZWZpbmUgR1NCSV9QUk9UT0NPTF9TSElGVAk0CisKK3N0YXRpYyBpbnQgZ3NiaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgY2xrICpoY2xrOworCXUzMiBtb2RlLCBjcmNpID0gMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLG1vZGUiLCAmbW9kZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBtb2RlIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBub3QgcmVxdWlyZWQsIHNvIGRlZmF1bHQgdG8gMCBpZiBub3QgcHJlc2VudCAqLworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLGNyY2kiLCAmY3JjaSk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiR1NCSSBwb3J0IHByb3RvY29sOiAlZCBjcmNpOiAlZFxuIiwgbW9kZSwgY3JjaSk7CisKKwloY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJpZmFjZSIpOworCWlmIChJU19FUlIoaGNsaykpCisJCXJldHVybiBQVFJfRVJSKGhjbGspOworCisJY2xrX3ByZXBhcmVfZW5hYmxlKGhjbGspOworCisJd3JpdGVsX3JlbGF4ZWQoKG1vZGUgPDwgR1NCSV9QUk9UT0NPTF9TSElGVCkgfCBjcmNpLAorCQkJCWJhc2UgKyBHU0JJX0NUUkxfUkVHKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgZ3NiaSBjb250cm9sIHdyaXRlIGlzIG5vdCByZW9yZGVyZWQgKi8KKwl3bWIoKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoY2xrKTsKKworCXJldHVybiBvZl9wbGF0Zm9ybV9wb3B1bGF0ZShwZGV2LT5kZXYub2Zfbm9kZSwgTlVMTCwgTlVMTCwgJnBkZXYtPmRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdzYmlfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInFjb20sZ3NiaS12MS4wLjAiLCB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGdzYmlfZHRfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnc2JpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiZ3NiaSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlCT0gZ3NiaV9kdF9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IGdzYmlfcHJvYmUsCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGdzYmlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQW5keSBHcm9zcyA8YWdyb3NzQGNvZGVhdXJvcmEub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRQ09NIEdTQkkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCA2MGYyYjQxLi4yMTNiNWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTkxLDggKzkxLDggQEAKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBTUEkgY29udHJvbGxlciBtYXN0ZXIgZHJpdmVyIGZvciBCbGFja2ZpbiA1eHggcHJvY2Vzc29yLgogCi1jb25maWcgU1BJX0JGSU5fVjMKLQl0cmlzdGF0ZSAiU1BJIGNvbnRyb2xsZXIgdjMgZm9yIEJsYWNrZmluIgorY29uZmlnIFNQSV9BRElfVjMKKwl0cmlzdGF0ZSAiU1BJIGNvbnRyb2xsZXIgdjMgZm9yIEFESSIKIAlkZXBlbmRzIG9uIEJGNjB4CiAJaGVscAogCSAgVGhpcyBpcyB0aGUgU1BJIGNvbnRyb2xsZXIgdjMgbWFzdGVyIGRyaXZlcgpAQCAtMTQ4LDYgKzE0OCwxMyBAQAogCSAgaW5leHBlbnNpdmUgYmF0dGVyeSBwb3dlcmVkIG1pY3JvY29udHJvbGxlciBldmFsdWF0aW9uIGJvYXJkLgogCSAgVGhpcyBzYW1lIGNhYmxlIGNhbiBiZSB1c2VkIHRvIGZsYXNoIG5ldyBmaXJtd2FyZS4KIAorY29uZmlnIFNQSV9DQURFTkNFCisJdHJpc3RhdGUgIkNhZGVuY2UgU1BJIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUk0KKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIENhZGVuY2UgU1BJIGNvbnRyb2xsZXIgbWFzdGVyIGRyaXZlcgorCSAgdXNlZCBieSBYaWxpbnggWnlucS4KKwogY29uZmlnIFNQSV9DTFBTNzExWAogCXRyaXN0YXRlICJDTFBTNzExWCBob3N0IFNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gQVJDSF9DTFBTNzExWCB8fCBDT01QSUxFX1RFU1QKQEAgLTUwNSw3ICs1MTIsNyBAQAogCiBjb25maWcgU1BJX1RPUENMSUZGX1BDSAogCXRyaXN0YXRlICJJbnRlbCBFRzIwVCBQQ0gvTEFQSVMgU2VtaWNvbiBJT0goTUw3MjEzL01MNzIyMy9NTDc4MzEpIFNQSSIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIChYODZfMzIgfHwgQ09NUElMRV9URVNUKQogCWhlbHAKIAkgIFNQSSBkcml2ZXIgZm9yIHRoZSBUb3BjbGlmZiBQQ0ggKFBsYXRmb3JtIENvbnRyb2xsZXIgSHViKSBTUEkgYnVzCiAJICB1c2VkIGluIHNvbWUgeDg2IGVtYmVkZGVkIHByb2Nlc3NvcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IGJkNzkyNjYuLjkyOWM5ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xOCwxMCArMTgsMTEgQEAKIG9iai0kKENPTkZJR19TUElfQkNNNjNYWCkJCSs9IHNwaS1iY202M3h4Lm8KIG9iai0kKENPTkZJR19TUElfQkNNNjNYWF9IU1NQSSkJCSs9IHNwaS1iY202M3h4LWhzc3BpLm8KIG9iai0kKENPTkZJR19TUElfQkZJTjVYWCkJCSs9IHNwaS1iZmluNXh4Lm8KLW9iai0kKENPTkZJR19TUElfQkZJTl9WMykgICAgICAgICAgICAgICArPSBzcGktYmZpbi12My5vCitvYmotJChDT05GSUdfU1BJX0FESV9WMykgICAgICAgICAgICAgICAgKz0gc3BpLWFkaS12My5vCiBvYmotJChDT05GSUdfU1BJX0JGSU5fU1BPUlQpCQkrPSBzcGktYmZpbi1zcG9ydC5vCiBvYmotJChDT05GSUdfU1BJX0JJVEJBTkcpCQkrPSBzcGktYml0YmFuZy5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaS1idXR0ZXJmbHkubworb2JqLSQoQ09ORklHX1NQSV9DQURFTkNFKQkJKz0gc3BpLWNhZGVuY2Uubwogb2JqLSQoQ09ORklHX1NQSV9DTFBTNzExWCkJCSs9IHNwaS1jbHBzNzExeC5vCiBvYmotJChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCQkrPSBzcGktY29sZGZpcmUtcXNwaS5vCiBvYmotJChDT05GSUdfU1BJX0RBVklOQ0kpCQkrPSBzcGktZGF2aW5jaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktYmZpbi12My5jIGIvZHJpdmVycy9zcGkvc3BpLWFkaS12My5jCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3BpL3NwaS1iZmluLXYzLmMKcmVuYW1lIHRvIGRyaXZlcnMvc3BpL3NwaS1hZGktdjMuYwppbmRleCA0MDg5ZDBlLi5kY2IyMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktYmZpbi12My5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1hZGktdjMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBBbmFsb2cgRGV2aWNlcyBTUEkzIGNvbnRyb2xsZXIgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEzIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxNCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMyw2ICsxMyw3IEBACiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC0yNiwzNSArMjcsMzQgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZGlfc3BpMy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vYmZpbl9zcGkzLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KIAotZW51bSBiZmluX3NwaV9zdGF0ZSB7CitlbnVtIGFkaV9zcGlfc3RhdGUgewogCVNUQVJUX1NUQVRFLAogCVJVTk5JTkdfU1RBVEUsCiAJRE9ORV9TVEFURSwKIAlFUlJPUl9TVEFURQogfTsKIAotc3RydWN0IGJmaW5fc3BpX21hc3RlcjsKK3N0cnVjdCBhZGlfc3BpX21hc3RlcjsKIAotc3RydWN0IGJmaW5fc3BpX3RyYW5zZmVyX29wcyB7Ci0Jdm9pZCAoKndyaXRlKSAoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqKTsKLQl2b2lkICgqcmVhZCkgKHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKik7Ci0Jdm9pZCAoKmR1cGxleCkgKHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKik7CitzdHJ1Y3QgYWRpX3NwaV90cmFuc2Zlcl9vcHMgeworCXZvaWQgKCp3cml0ZSkgKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqKTsKKwl2b2lkICgqcmVhZCkgKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqKTsKKwl2b2lkICgqZHVwbGV4KSAoc3RydWN0IGFkaV9zcGlfbWFzdGVyICopOwogfTsKIAogLyogcnVudGltZSBpbmZvIGZvciBzcGkgbWFzdGVyICovCi1zdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyIHsKK3N0cnVjdCBhZGlfc3BpX21hc3RlciB7CiAJLyogU1BJIGZyYW1ld29yayBob29rdXAgKi8KIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwogCiAJLyogUmVncyBiYXNlIG9mIFNQSSBjb250cm9sbGVyICovCi0Jc3RydWN0IGJmaW5fc3BpX3JlZ3MgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgYWRpX3NwaV9yZWdzIF9faW9tZW0gKnJlZ3M7CiAKIAkvKiBQaW4gcmVxdWVzdCBsaXN0ICovCiAJdTE2ICpwaW5fcmVxOwpAQCAtNjUsNyArNjUsNyBAQAogCS8qIEN1cnJlbnQgbWVzc2FnZSB0cmFuc2ZlciBzdGF0ZSBpbmZvICovCiAJc3RydWN0IHNwaV9tZXNzYWdlICpjdXJfbXNnOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKmN1cl90cmFuc2ZlcjsKLQlzdHJ1Y3QgYmZpbl9zcGlfZGV2aWNlICpjdXJfY2hpcDsKKwlzdHJ1Y3QgYWRpX3NwaV9kZXZpY2UgKmN1cl9jaGlwOwogCXVuc2lnbmVkIHRyYW5zZmVyX2xlbjsKIAogCS8qIHRyYW5zZmVyIGJ1ZmZlciAqLwpAQCAtOTAsMTIgKzkwLDEyIEBACiAJdTMyIHNzZWw7CiAKIAl1bnNpZ25lZCBsb25nIHNjbGs7Ci0JZW51bSBiZmluX3NwaV9zdGF0ZSBzdGF0ZTsKKwllbnVtIGFkaV9zcGlfc3RhdGUgc3RhdGU7CiAKLQljb25zdCBzdHJ1Y3QgYmZpbl9zcGlfdHJhbnNmZXJfb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGFkaV9zcGlfdHJhbnNmZXJfb3BzICpvcHM7CiB9OwogCi1zdHJ1Y3QgYmZpbl9zcGlfZGV2aWNlIHsKK3N0cnVjdCBhZGlfc3BpX2RldmljZSB7CiAJdTMyIGNvbnRyb2w7CiAJdTMyIGNsb2NrOwogCXUzMiBzc2VsOwpAQCAtMTA1LDE3ICsxMDUsMjUgQEAKIAl1MzIgY3NfZ3BpbzsKIAl1MzIgdHhfZHVtbXlfdmFsOyAvKiB0eCB2YWx1ZSBmb3Igcnggb25seSB0cmFuc2ZlciAqLwogCWJvb2wgZW5hYmxlX2RtYTsKLQljb25zdCBzdHJ1Y3QgYmZpbl9zcGlfdHJhbnNmZXJfb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGFkaV9zcGlfdHJhbnNmZXJfb3BzICpvcHM7CiB9OwogCi1zdGF0aWMgdm9pZCBiZmluX3NwaV9lbmFibGUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEpCitzdGF0aWMgdm9pZCBhZGlfc3BpX2VuYWJsZShzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewotCWJmaW5fd3JpdGVfb3IoJmRydl9kYXRhLT5yZWdzLT5jb250cm9sLCBTUElfQ1RMX0VOKTsKKwl1MzIgY3RsOworCisJY3RsID0gaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5jb250cm9sKTsKKwljdGwgfD0gU1BJX0NUTF9FTjsKKwlpb3dyaXRlMzIoY3RsLCAmZHJ2X2RhdGEtPnJlZ3MtPmNvbnRyb2wpOwogfQogCi1zdGF0aWMgdm9pZCBiZmluX3NwaV9kaXNhYmxlKHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQorc3RhdGljIHZvaWQgYWRpX3NwaV9kaXNhYmxlKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7Ci0JYmZpbl93cml0ZV9hbmQoJmRydl9kYXRhLT5yZWdzLT5jb250cm9sLCB+U1BJX0NUTF9FTik7CisJdTMyIGN0bDsKKworCWN0bCA9IGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+Y29udHJvbCk7CisJY3RsICY9IH5TUElfQ1RMX0VOOworCWlvd3JpdGUzMihjdGwsICZkcnZfZGF0YS0+cmVncy0+Y29udHJvbCk7CiB9CiAKIC8qIENhY3VsYXRlIHRoZSBTUElfQ0xPQ0sgcmVnaXN0ZXIgdmFsdWUgYmFzZWQgb24gaW5wdXQgSFogKi8KQEAgLTEyOCwzNSArMTM2LDQzIEBACiAJcmV0dXJuIHNwaV9jbG9jazsKIH0KIAotc3RhdGljIGludCBiZmluX3NwaV9mbHVzaChzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyBpbnQgYWRpX3NwaV9mbHVzaChzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewogCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKIAogCS8qIHdhaXQgZm9yIHN0b3AgYW5kIGNsZWFyIHN0YXQgKi8KLQl3aGlsZSAoIShiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfU1BJRikgJiYgLS1saW1pdCkKKwl3aGlsZSAoIShpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9TUElGKSAmJiAtLWxpbWl0KQogCQljcHVfcmVsYXgoKTsKIAotCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMsIDB4RkZGRkZGRkYpOworCWlvd3JpdGUzMigweEZGRkZGRkZGLCAmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cyk7CiAKIAlyZXR1cm4gbGltaXQ7CiB9CiAKIC8qIENoaXAgc2VsZWN0IG9wZXJhdGlvbiBmdW5jdGlvbnMgZm9yIGNzX2NoYW5nZSBmbGFnICovCi1zdGF0aWMgdm9pZCBiZmluX3NwaV9jc19hY3RpdmUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEsIHN0cnVjdCBiZmluX3NwaV9kZXZpY2UgKmNoaXApCitzdGF0aWMgdm9pZCBhZGlfc3BpX2NzX2FjdGl2ZShzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhLCBzdHJ1Y3QgYWRpX3NwaV9kZXZpY2UgKmNoaXApCiB7Ci0JaWYgKGxpa2VseShjaGlwLT5jcyA8IE1BWF9DVFJMX0NTKSkKLQkJYmZpbl93cml0ZV9hbmQoJmRydl9kYXRhLT5yZWdzLT5zc2VsLCB+Y2hpcC0+c3NlbCk7Ci0JZWxzZQorCWlmIChsaWtlbHkoY2hpcC0+Y3MgPCBNQVhfQ1RSTF9DUykpIHsKKwkJdTMyIHJlZzsKKwkJcmVnID0gaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5zc2VsKTsKKwkJcmVnICY9IH5jaGlwLT5zc2VsOworCQlpb3dyaXRlMzIocmVnLCAmZHJ2X2RhdGEtPnJlZ3MtPnNzZWwpOworCX0gZWxzZSB7CiAJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmNzX2dwaW8sIDApOworCX0KIH0KIAotc3RhdGljIHZvaWQgYmZpbl9zcGlfY3NfZGVhY3RpdmUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEsCi0JCQkJc3RydWN0IGJmaW5fc3BpX2RldmljZSAqY2hpcCkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfY3NfZGVhY3RpdmUoc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnZfZGF0YSwKKwkJCQlzdHJ1Y3QgYWRpX3NwaV9kZXZpY2UgKmNoaXApCiB7Ci0JaWYgKGxpa2VseShjaGlwLT5jcyA8IE1BWF9DVFJMX0NTKSkKLQkJYmZpbl93cml0ZV9vcigmZHJ2X2RhdGEtPnJlZ3MtPnNzZWwsIGNoaXAtPnNzZWwpOwotCWVsc2UKKwlpZiAobGlrZWx5KGNoaXAtPmNzIDwgTUFYX0NUUkxfQ1MpKSB7CisJCXUzMiByZWc7CisJCXJlZyA9IGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+c3NlbCk7CisJCXJlZyB8PSBjaGlwLT5zc2VsOworCQlpb3dyaXRlMzIocmVnLCAmZHJ2X2RhdGEtPnJlZ3MtPnNzZWwpOworCX0gZWxzZSB7CiAJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmNzX2dwaW8sIDEpOworCX0KIAogCS8qIE1vdmUgZGVsYXkgaGVyZSBmb3IgY29uc2lzdGVuY3kgKi8KIAlpZiAoY2hpcC0+Y3NfY2hnX3VkZWxheSkKQEAgLTE2NCwxODcgKzE4MCwxOTIgQEAKIH0KIAogLyogZW5hYmxlIG9yIGRpc2FibGUgdGhlIHBpbiBtdXhlZCBieSBHUElPIGFuZCBTUEkgQ1MgdG8gd29yayBhcyBTUEkgQ1MgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZmluX3NwaV9jc19lbmFibGUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEsCi0JCQkJCXN0cnVjdCBiZmluX3NwaV9kZXZpY2UgKmNoaXApCitzdGF0aWMgaW5saW5lIHZvaWQgYWRpX3NwaV9jc19lbmFibGUoc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnZfZGF0YSwKKwkJCQkJc3RydWN0IGFkaV9zcGlfZGV2aWNlICpjaGlwKQogewotCWlmIChjaGlwLT5jcyA8IE1BWF9DVFJMX0NTKQotCQliZmluX3dyaXRlX29yKCZkcnZfZGF0YS0+cmVncy0+c3NlbCwgY2hpcC0+c3NlbCA+PiA4KTsKKwlpZiAoY2hpcC0+Y3MgPCBNQVhfQ1RSTF9DUykgeworCQl1MzIgcmVnOworCQlyZWcgPSBpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnNzZWwpOworCQlyZWcgfD0gY2hpcC0+c3NlbCA+PiA4OworCQlpb3dyaXRlMzIocmVnLCAmZHJ2X2RhdGEtPnJlZ3MtPnNzZWwpOworCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJmaW5fc3BpX2NzX2Rpc2FibGUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEsCi0JCQkJCXN0cnVjdCBiZmluX3NwaV9kZXZpY2UgKmNoaXApCitzdGF0aWMgaW5saW5lIHZvaWQgYWRpX3NwaV9jc19kaXNhYmxlKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEsCisJCQkJCXN0cnVjdCBhZGlfc3BpX2RldmljZSAqY2hpcCkKIHsKLQlpZiAoY2hpcC0+Y3MgPCBNQVhfQ1RSTF9DUykKLQkJYmZpbl93cml0ZV9hbmQoJmRydl9kYXRhLT5yZWdzLT5zc2VsLCB+KGNoaXAtPnNzZWwgPj4gOCkpOworCWlmIChjaGlwLT5jcyA8IE1BWF9DVFJMX0NTKSB7CisJCXUzMiByZWc7CisJCXJlZyA9IGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+c3NlbCk7CisJCXJlZyAmPSB+KGNoaXAtPnNzZWwgPj4gOCk7CisJCWlvd3JpdGUzMihyZWcsICZkcnZfZGF0YS0+cmVncy0+c3NlbCk7CisJfQogfQogCiAvKiBzdG9wIGNvbnRyb2xsZXIgYW5kIHJlLWNvbmZpZyBjdXJyZW50IGNoaXAqLwotc3RhdGljIHZvaWQgYmZpbl9zcGlfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewotCXN0cnVjdCBiZmluX3NwaV9kZXZpY2UgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CisJc3RydWN0IGFkaV9zcGlfZGV2aWNlICpjaGlwID0gZHJ2X2RhdGEtPmN1cl9jaGlwOwogCiAJLyogQ2xlYXIgc3RhdHVzIGFuZCBkaXNhYmxlIGNsb2NrICovCi0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cywgMHhGRkZGRkZGRik7Ci0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnJ4X2NvbnRyb2wsIDB4MCk7Ci0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wsIDB4MCk7Ci0JYmZpbl9zcGlfZGlzYWJsZShkcnZfZGF0YSk7Ci0KLQlTU1lOQygpOworCWlvd3JpdGUzMigweEZGRkZGRkZGLCAmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cyk7CisJaW93cml0ZTMyKDB4MCwgJmRydl9kYXRhLT5yZWdzLT5yeF9jb250cm9sKTsKKwlpb3dyaXRlMzIoMHgwLCAmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wpOworCWFkaV9zcGlfZGlzYWJsZShkcnZfZGF0YSk7CiAKIAkvKiBMb2FkIHRoZSByZWdpc3RlcnMgKi8KLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+Y29udHJvbCwgY2hpcC0+Y29udHJvbCk7Ci0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPmNsb2NrLCBjaGlwLT5jbG9jayk7CisJaW93cml0ZTMyKGNoaXAtPmNvbnRyb2wsICZkcnZfZGF0YS0+cmVncy0+Y29udHJvbCk7CisJaW93cml0ZTMyKGNoaXAtPmNsb2NrLCAmZHJ2X2RhdGEtPnJlZ3MtPmNsb2NrKTsKIAotCWJmaW5fc3BpX2VuYWJsZShkcnZfZGF0YSk7CisJYWRpX3NwaV9lbmFibGUoZHJ2X2RhdGEpOwogCWRydl9kYXRhLT50eF9udW0gPSBkcnZfZGF0YS0+cnhfbnVtID0gMDsKIAkvKiB3ZSBhbHdheXMgY2hvb3NlIHR4IHRyYW5zZmVyIGluaXRpYXRlICovCi0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnJ4X2NvbnRyb2wsIFNQSV9SWENUTF9SRU4pOwotCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT50eF9jb250cm9sLAotCQkJU1BJX1RYQ1RMX1RFTiB8IFNQSV9UWENUTF9UVEkpOwotCWJmaW5fc3BpX2NzX2FjdGl2ZShkcnZfZGF0YSwgY2hpcCk7CisJaW93cml0ZTMyKFNQSV9SWENUTF9SRU4sICZkcnZfZGF0YS0+cmVncy0+cnhfY29udHJvbCk7CisJaW93cml0ZTMyKFNQSV9UWENUTF9URU4gfCBTUElfVFhDVExfVFRJLCAmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wpOworCWFkaV9zcGlfY3NfYWN0aXZlKGRydl9kYXRhLCBjaGlwKTsKIH0KIAogLyogZGlzY2FyZCBpbnZhbGlkIHJ4IGRhdGEgYW5kIGVtcHR5IHJmaWZvICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfcmVhZChzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1teV9yZWFkKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7Ci0Jd2hpbGUgKCEoYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkpCi0JCWJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKKwl3aGlsZSAoIShpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9SRkUpKQorCQlpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKIH0KIAotc3RhdGljIHZvaWQgYmZpbl9zcGlfdThfd3JpdGUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEpCitzdGF0aWMgdm9pZCBhZGlfc3BpX3U4X3dyaXRlKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7CiAJZHVtbXlfcmVhZChkcnZfZGF0YSk7CiAJd2hpbGUgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpIHsKLQkJYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvLCAoKih1OCAqKShkcnZfZGF0YS0+dHgrKykpKTsKLQkJd2hpbGUgKGJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9SRkUpCisJCWlvd3JpdGUzMigqKHU4ICopKGRydl9kYXRhLT50eCsrKSwgJmRydl9kYXRhLT5yZWdzLT50Zmlmbyk7CisJCXdoaWxlIChpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9SRkUpCiAJCQljcHVfcmVsYXgoKTsKLQkJYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+cmZpZm8pOworCQlpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fc3BpX3U4X3JlYWQoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEpCitzdGF0aWMgdm9pZCBhZGlfc3BpX3U4X3JlYWQoc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnZfZGF0YSkKIHsKIAl1MzIgdHhfdmFsID0gZHJ2X2RhdGEtPmN1cl9jaGlwLT50eF9kdW1teV92YWw7CiAKIAlkdW1teV9yZWFkKGRydl9kYXRhKTsKIAl3aGlsZSAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkgewotCQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+dGZpZm8sIHR4X3ZhbCk7Ci0JCXdoaWxlIChiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfUkZFKQorCQlpb3dyaXRlMzIodHhfdmFsLCAmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvKTsKKwkJd2hpbGUgKGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKIAkJCWNwdV9yZWxheCgpOwotCQkqKHU4ICopKGRydl9kYXRhLT5yeCsrKSA9IGJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKKwkJKih1OCAqKShkcnZfZGF0YS0+cngrKykgPSBpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fc3BpX3U4X2R1cGxleChzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfdThfZHVwbGV4KHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7CiAJZHVtbXlfcmVhZChkcnZfZGF0YSk7CiAJd2hpbGUgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpIHsKLQkJYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvLCAoKih1OCAqKShkcnZfZGF0YS0+dHgrKykpKTsKLQkJd2hpbGUgKGJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9SRkUpCisJCWlvd3JpdGUzMigqKHU4ICopKGRydl9kYXRhLT50eCsrKSwgJmRydl9kYXRhLT5yZWdzLT50Zmlmbyk7CisJCXdoaWxlIChpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9SRkUpCiAJCQljcHVfcmVsYXgoKTsKLQkJKih1OCAqKShkcnZfZGF0YS0+cngrKykgPSBiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5yZmlmbyk7CisJCSoodTggKikoZHJ2X2RhdGEtPnJ4KyspID0gaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5yZmlmbyk7CiAJfQogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJmaW5fc3BpX3RyYW5zZmVyX29wcyBiZmluX2JmaW5fc3BpX3RyYW5zZmVyX29wc191OCA9IHsKLQkud3JpdGUgID0gYmZpbl9zcGlfdThfd3JpdGUsCi0JLnJlYWQgICA9IGJmaW5fc3BpX3U4X3JlYWQsCi0JLmR1cGxleCA9IGJmaW5fc3BpX3U4X2R1cGxleCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRpX3NwaV90cmFuc2Zlcl9vcHMgYWRpX3NwaV90cmFuc2Zlcl9vcHNfdTggPSB7CisJLndyaXRlICA9IGFkaV9zcGlfdThfd3JpdGUsCisJLnJlYWQgICA9IGFkaV9zcGlfdThfcmVhZCwKKwkuZHVwbGV4ID0gYWRpX3NwaV91OF9kdXBsZXgsCiB9OwogCi1zdGF0aWMgdm9pZCBiZmluX3NwaV91MTZfd3JpdGUoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEpCitzdGF0aWMgdm9pZCBhZGlfc3BpX3UxNl93cml0ZShzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewogCWR1bW15X3JlYWQoZHJ2X2RhdGEpOwogCXdoaWxlIChkcnZfZGF0YS0+dHggPCBkcnZfZGF0YS0+dHhfZW5kKSB7Ci0JCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT50ZmlmbywgKCoodTE2ICopZHJ2X2RhdGEtPnR4KSk7CisJCWlvd3JpdGUzMigqKHUxNiAqKWRydl9kYXRhLT50eCwgJmRydl9kYXRhLT5yZWdzLT50Zmlmbyk7CiAJCWRydl9kYXRhLT50eCArPSAyOwotCQl3aGlsZSAoYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKKwkJd2hpbGUgKGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKIAkJCWNwdV9yZWxheCgpOwotCQliZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5yZmlmbyk7CisJCWlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+cmZpZm8pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYmZpbl9zcGlfdTE2X3JlYWQoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEpCitzdGF0aWMgdm9pZCBhZGlfc3BpX3UxNl9yZWFkKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7CiAJdTMyIHR4X3ZhbCA9IGRydl9kYXRhLT5jdXJfY2hpcC0+dHhfZHVtbXlfdmFsOwogCiAJZHVtbXlfcmVhZChkcnZfZGF0YSk7CiAJd2hpbGUgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpIHsKLQkJYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvLCB0eF92YWwpOwotCQl3aGlsZSAoYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKKwkJaW93cml0ZTMyKHR4X3ZhbCwgJmRydl9kYXRhLT5yZWdzLT50Zmlmbyk7CisJCXdoaWxlIChpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cykgJiBTUElfU1RBVF9SRkUpCiAJCQljcHVfcmVsYXgoKTsKLQkJKih1MTYgKilkcnZfZGF0YS0+cnggPSBiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5yZmlmbyk7CisJCSoodTE2ICopZHJ2X2RhdGEtPnJ4ID0gaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5yZmlmbyk7CiAJCWRydl9kYXRhLT5yeCArPSAyOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYmZpbl9zcGlfdTE2X2R1cGxleChzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfdTE2X2R1cGxleChzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewogCWR1bW15X3JlYWQoZHJ2X2RhdGEpOwogCXdoaWxlIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSB7Ci0JCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT50ZmlmbywgKCoodTE2ICopZHJ2X2RhdGEtPnR4KSk7CisJCWlvd3JpdGUzMigqKHUxNiAqKWRydl9kYXRhLT50eCwgJmRydl9kYXRhLT5yZWdzLT50Zmlmbyk7CiAJCWRydl9kYXRhLT50eCArPSAyOwotCQl3aGlsZSAoYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKKwkJd2hpbGUgKGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKIAkJCWNwdV9yZWxheCgpOwotCQkqKHUxNiAqKWRydl9kYXRhLT5yeCA9IGJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKKwkJKih1MTYgKilkcnZfZGF0YS0+cnggPSBpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKIAkJZHJ2X2RhdGEtPnJ4ICs9IDI7CiAJfQogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJmaW5fc3BpX3RyYW5zZmVyX29wcyBiZmluX2JmaW5fc3BpX3RyYW5zZmVyX29wc191MTYgPSB7Ci0JLndyaXRlICA9IGJmaW5fc3BpX3UxNl93cml0ZSwKLQkucmVhZCAgID0gYmZpbl9zcGlfdTE2X3JlYWQsCi0JLmR1cGxleCA9IGJmaW5fc3BpX3UxNl9kdXBsZXgsCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkaV9zcGlfdHJhbnNmZXJfb3BzIGFkaV9zcGlfdHJhbnNmZXJfb3BzX3UxNiA9IHsKKwkud3JpdGUgID0gYWRpX3NwaV91MTZfd3JpdGUsCisJLnJlYWQgICA9IGFkaV9zcGlfdTE2X3JlYWQsCisJLmR1cGxleCA9IGFkaV9zcGlfdTE2X2R1cGxleCwKIH07CiAKLXN0YXRpYyB2b2lkIGJmaW5fc3BpX3UzMl93cml0ZShzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfdTMyX3dyaXRlKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7CiAJZHVtbXlfcmVhZChkcnZfZGF0YSk7CiAJd2hpbGUgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpIHsKLQkJYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvLCAoKih1MzIgKilkcnZfZGF0YS0+dHgpKTsKKwkJaW93cml0ZTMyKCoodTMyICopZHJ2X2RhdGEtPnR4LCAmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvKTsKIAkJZHJ2X2RhdGEtPnR4ICs9IDQ7Ci0JCXdoaWxlIChiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfUkZFKQorCQl3aGlsZSAoaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfUkZFKQogCQkJY3B1X3JlbGF4KCk7Ci0JCWJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKKwkJaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5yZmlmbyk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBiZmluX3NwaV91MzJfcmVhZChzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfdTMyX3JlYWQoc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnZfZGF0YSkKIHsKIAl1MzIgdHhfdmFsID0gZHJ2X2RhdGEtPmN1cl9jaGlwLT50eF9kdW1teV92YWw7CiAKIAlkdW1teV9yZWFkKGRydl9kYXRhKTsKIAl3aGlsZSAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkgewotCQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+dGZpZm8sIHR4X3ZhbCk7Ci0JCXdoaWxlIChiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfUkZFKQorCQlpb3dyaXRlMzIodHhfdmFsLCAmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvKTsKKwkJd2hpbGUgKGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzKSAmIFNQSV9TVEFUX1JGRSkKIAkJCWNwdV9yZWxheCgpOwotCQkqKHUzMiAqKWRydl9kYXRhLT5yeCA9IGJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKKwkJKih1MzIgKilkcnZfZGF0YS0+cnggPSBpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnJmaWZvKTsKIAkJZHJ2X2RhdGEtPnJ4ICs9IDQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBiZmluX3NwaV91MzJfZHVwbGV4KHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQorc3RhdGljIHZvaWQgYWRpX3NwaV91MzJfZHVwbGV4KHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7CiAJZHVtbXlfcmVhZChkcnZfZGF0YSk7CiAJd2hpbGUgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpIHsKLQkJYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvLCAoKih1MzIgKilkcnZfZGF0YS0+dHgpKTsKKwkJaW93cml0ZTMyKCoodTMyICopZHJ2X2RhdGEtPnR4LCAmZHJ2X2RhdGEtPnJlZ3MtPnRmaWZvKTsKIAkJZHJ2X2RhdGEtPnR4ICs9IDQ7Ci0JCXdoaWxlIChiZmluX3JlYWQoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfUkZFKQorCQl3aGlsZSAoaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5zdGF0dXMpICYgU1BJX1NUQVRfUkZFKQogCQkJY3B1X3JlbGF4KCk7Ci0JCSoodTMyICopZHJ2X2RhdGEtPnJ4ID0gYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+cmZpZm8pOworCQkqKHUzMiAqKWRydl9kYXRhLT5yeCA9IGlvcmVhZDMyKCZkcnZfZGF0YS0+cmVncy0+cmZpZm8pOwogCQlkcnZfZGF0YS0+cnggKz0gNDsKIAl9CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmZpbl9zcGlfdHJhbnNmZXJfb3BzIGJmaW5fYmZpbl9zcGlfdHJhbnNmZXJfb3BzX3UzMiA9IHsKLQkud3JpdGUgID0gYmZpbl9zcGlfdTMyX3dyaXRlLAotCS5yZWFkICAgPSBiZmluX3NwaV91MzJfcmVhZCwKLQkuZHVwbGV4ID0gYmZpbl9zcGlfdTMyX2R1cGxleCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRpX3NwaV90cmFuc2Zlcl9vcHMgYWRpX3NwaV90cmFuc2Zlcl9vcHNfdTMyID0geworCS53cml0ZSAgPSBhZGlfc3BpX3UzMl93cml0ZSwKKwkucmVhZCAgID0gYWRpX3NwaV91MzJfcmVhZCwKKwkuZHVwbGV4ID0gYWRpX3NwaV91MzJfZHVwbGV4LAogfTsKIAogCiAvKiB0ZXN0IGlmIHRoZXJlIGlzIG1vcmUgdHJhbnNmZXIgdG8gYmUgZG9uZSAqLwotc3RhdGljIHZvaWQgYmZpbl9zcGlfbmV4dF90cmFuc2ZlcihzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnYpCitzdGF0aWMgdm9pZCBhZGlfc3BpX25leHRfdHJhbnNmZXIoc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnYpCiB7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnYtPmN1cl9tc2c7CiAJc3RydWN0IHNwaV90cmFuc2ZlciAqdCA9IGRydi0+Y3VyX3RyYW5zZmVyOwpAQCAtMzYwLDE1ICszODEsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fc3BpX2dpdmViYWNrKHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQorc3RhdGljIHZvaWQgYWRpX3NwaV9naXZlYmFjayhzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewotCXN0cnVjdCBiZmluX3NwaV9kZXZpY2UgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CisJc3RydWN0IGFkaV9zcGlfZGV2aWNlICpjaGlwID0gZHJ2X2RhdGEtPmN1cl9jaGlwOwogCi0JYmZpbl9zcGlfY3NfZGVhY3RpdmUoZHJ2X2RhdGEsIGNoaXApOworCWFkaV9zcGlfY3NfZGVhY3RpdmUoZHJ2X2RhdGEsIGNoaXApOwogCXNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UoZHJ2X2RhdGEtPm1hc3Rlcik7CiB9CiAKLXN0YXRpYyBpbnQgYmZpbl9zcGlfc2V0dXBfdHJhbnNmZXIoc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2KQorc3RhdGljIGludCBhZGlfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2KQogewogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQgPSBkcnYtPmN1cl90cmFuc2ZlcjsKIAl1MzIgY3IsIGNyX3dpZHRoOwpAQCAtMzkzLDM0ICs0MTQsMzMgQEAKIAlzd2l0Y2ggKHQtPmJpdHNfcGVyX3dvcmQpIHsKIAljYXNlIDg6CiAJCWNyX3dpZHRoID0gU1BJX0NUTF9TSVpFMDg7Ci0JCWRydi0+b3BzID0gJmJmaW5fYmZpbl9zcGlfdHJhbnNmZXJfb3BzX3U4OworCQlkcnYtPm9wcyA9ICZhZGlfc3BpX3RyYW5zZmVyX29wc191ODsKIAkJYnJlYWs7CiAJY2FzZSAxNjoKIAkJY3Jfd2lkdGggPSBTUElfQ1RMX1NJWkUxNjsKLQkJZHJ2LT5vcHMgPSAmYmZpbl9iZmluX3NwaV90cmFuc2Zlcl9vcHNfdTE2OworCQlkcnYtPm9wcyA9ICZhZGlfc3BpX3RyYW5zZmVyX29wc191MTY7CiAJCWJyZWFrOwogCWNhc2UgMzI6CiAJCWNyX3dpZHRoID0gU1BJX0NUTF9TSVpFMzI7Ci0JCWRydi0+b3BzID0gJmJmaW5fYmZpbl9zcGlfdHJhbnNmZXJfb3BzX3UzMjsKKwkJZHJ2LT5vcHMgPSAmYWRpX3NwaV90cmFuc2Zlcl9vcHNfdTMyOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY3IgPSBiZmluX3JlYWQoJmRydi0+cmVncy0+Y29udHJvbCkgJiB+U1BJX0NUTF9TSVpFOworCWNyID0gaW9yZWFkMzIoJmRydi0+cmVncy0+Y29udHJvbCkgJiB+U1BJX0NUTF9TSVpFOwogCWNyIHw9IGNyX3dpZHRoOwotCWJmaW5fd3JpdGUoJmRydi0+cmVncy0+Y29udHJvbCwgY3IpOworCWlvd3JpdGUzMihjciwgJmRydi0+cmVncy0+Y29udHJvbCk7CiAKIAkvKiBzcGVlZCBzZXR1cCAqLwotCWJmaW5fd3JpdGUoJmRydi0+cmVncy0+Y2xvY2ssCi0JCQloel90b19zcGlfY2xvY2soZHJ2LT5zY2xrLCB0LT5zcGVlZF9oeikpOworCWlvd3JpdGUzMihoel90b19zcGlfY2xvY2soZHJ2LT5zY2xrLCB0LT5zcGVlZF9oeiksICZkcnYtPnJlZ3MtPmNsb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZmluX3NwaV9kbWFfeGZlcihzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSkKK3N0YXRpYyBpbnQgYWRpX3NwaV9kbWFfeGZlcihzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQogewogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQgPSBkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyOwogCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0Jc3RydWN0IGJmaW5fc3BpX2RldmljZSAqY2hpcCA9IGRydl9kYXRhLT5jdXJfY2hpcDsKKwlzdHJ1Y3QgYWRpX3NwaV9kZXZpY2UgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CiAJdTMyIGRtYV9jb25maWc7CiAJdW5zaWduZWQgbG9uZyB3b3JkX2NvdW50LCB3b3JkX3NpemU7CiAJdm9pZCAqdHhfYnVmLCAqcnhfYnVmOwpAQCAtNDk4LDE3ICs1MTgsMTYgQEAKIAlzZXRfZG1hX2NvbmZpZyhkcnZfZGF0YS0+cnhfZG1hLCBkbWFfY29uZmlnIHwgV05SKTsKIAllbmFibGVfZG1hKGRydl9kYXRhLT50eF9kbWEpOwogCWVuYWJsZV9kbWEoZHJ2X2RhdGEtPnJ4X2RtYSk7Ci0JU1NZTkMoKTsKIAotCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT5yeF9jb250cm9sLCBTUElfUlhDVExfUkVOIHwgU1BJX1JYQ1RMX1JEUl9ORSk7Ci0JU1NZTkMoKTsKLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+dHhfY29udHJvbCwKLQkJCVNQSV9UWENUTF9URU4gfCBTUElfVFhDVExfVFRJIHwgU1BJX1RYQ1RMX1REUl9ORik7CisJaW93cml0ZTMyKFNQSV9SWENUTF9SRU4gfCBTUElfUlhDVExfUkRSX05FLAorCQkJJmRydl9kYXRhLT5yZWdzLT5yeF9jb250cm9sKTsKKwlpb3dyaXRlMzIoU1BJX1RYQ1RMX1RFTiB8IFNQSV9UWENUTF9UVEkgfCBTUElfVFhDVExfVERSX05GLAorCQkJJmRydl9kYXRhLT5yZWdzLT50eF9jb250cm9sKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJmaW5fc3BpX3Bpb194ZmVyKHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKmRydl9kYXRhKQorc3RhdGljIGludCBhZGlfc3BpX3Bpb194ZmVyKHN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEpCiB7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKIApAQCAtNTI5LDE5ICs1NDgsMTkgQEAKIAkJCXJldHVybiAtRUlPOwogCX0KIAotCWlmICghYmZpbl9zcGlfZmx1c2goZHJ2X2RhdGEpKQorCWlmICghYWRpX3NwaV9mbHVzaChkcnZfZGF0YSkpCiAJCXJldHVybiAtRUlPOwogCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+dHJhbnNmZXJfbGVuOwogCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fc3BpX3B1bXBfdHJhbnNmZXJzKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfcHVtcF90cmFuc2ZlcnModW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKmRydl9kYXRhID0gKHN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKilkYXRhOworCXN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEgPSAoc3RydWN0IGFkaV9zcGlfbWFzdGVyICopZGF0YTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IE5VTEw7CiAJc3RydWN0IHNwaV90cmFuc2ZlciAqdCA9IE5VTEw7Ci0Jc3RydWN0IGJmaW5fc3BpX2RldmljZSAqY2hpcCA9IE5VTEw7CisJc3RydWN0IGFkaV9zcGlfZGV2aWNlICpjaGlwID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJLyogR2V0IGN1cnJlbnQgc3RhdGUgaW5mb3JtYXRpb24gKi8KQEAgLTU1Miw3ICs1NzEsNyBAQAogCS8qIEhhbmRsZSBmb3IgYWJvcnQgKi8KIAlpZiAoZHJ2X2RhdGEtPnN0YXRlID09IEVSUk9SX1NUQVRFKSB7CiAJCW1zZy0+c3RhdHVzID0gLUVJTzsKLQkJYmZpbl9zcGlfZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlhZGlfc3BpX2dpdmViYWNrKGRydl9kYXRhKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTYwLDE0ICs1NzksMTQgQEAKIAkJaWYgKHQtPmRlbGF5X3VzZWNzKQogCQkJdWRlbGF5KHQtPmRlbGF5X3VzZWNzKTsKIAkJaWYgKHQtPmNzX2NoYW5nZSkKLQkJCWJmaW5fc3BpX2NzX2RlYWN0aXZlKGRydl9kYXRhLCBjaGlwKTsKLQkJYmZpbl9zcGlfbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7CisJCQlhZGlfc3BpX2NzX2RlYWN0aXZlKGRydl9kYXRhLCBjaGlwKTsKKwkJYWRpX3NwaV9uZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKIAkJdCA9IGRydl9kYXRhLT5jdXJfdHJhbnNmZXI7CiAJfQogCS8qIEhhbmRsZSBlbmQgb2YgbWVzc2FnZSAqLwogCWlmIChkcnZfZGF0YS0+c3RhdGUgPT0gRE9ORV9TVEFURSkgewogCQltc2ctPnN0YXR1cyA9IDA7Ci0JCWJmaW5fc3BpX2dpdmViYWNrKGRydl9kYXRhKTsKKwkJYWRpX3NwaV9naXZlYmFjayhkcnZfZGF0YSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU3NywzNCArNTk2LDM0IEBACiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBiZmluX3NwaV9zZXR1cF90cmFuc2ZlcihkcnZfZGF0YSk7CisJcmV0ID0gYWRpX3NwaV9zZXR1cF90cmFuc2ZlcihkcnZfZGF0YSk7CiAJaWYgKHJldCkgewogCQltc2ctPnN0YXR1cyA9IHJldDsKLQkJYmZpbl9zcGlfZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlhZGlfc3BpX2dpdmViYWNrKGRydl9kYXRhKTsKIAl9CiAKLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+c3RhdHVzLCAweEZGRkZGRkZGKTsKLQliZmluX3NwaV9jc19hY3RpdmUoZHJ2X2RhdGEsIGNoaXApOworCWlvd3JpdGUzMigweEZGRkZGRkZGLCAmZHJ2X2RhdGEtPnJlZ3MtPnN0YXR1cyk7CisJYWRpX3NwaV9jc19hY3RpdmUoZHJ2X2RhdGEsIGNoaXApOwogCWRydl9kYXRhLT5zdGF0ZSA9IFJVTk5JTkdfU1RBVEU7CiAKIAlpZiAoY2hpcC0+ZW5hYmxlX2RtYSkKLQkJcmV0ID0gYmZpbl9zcGlfZG1hX3hmZXIoZHJ2X2RhdGEpOworCQlyZXQgPSBhZGlfc3BpX2RtYV94ZmVyKGRydl9kYXRhKTsKIAllbHNlCi0JCXJldCA9IGJmaW5fc3BpX3Bpb194ZmVyKGRydl9kYXRhKTsKKwkJcmV0ID0gYWRpX3NwaV9waW9feGZlcihkcnZfZGF0YSk7CiAJaWYgKHJldCkgewogCQltc2ctPnN0YXR1cyA9IHJldDsKLQkJYmZpbl9zcGlfZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlhZGlfc3BpX2dpdmViYWNrKGRydl9kYXRhKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYmZpbl9zcGlfdHJhbnNmZXJfb25lX21lc3NhZ2Uoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKK3N0YXRpYyBpbnQgYWRpX3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAogCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCiB7Ci0Jc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKIAogCWRydl9kYXRhLT5jdXJfbXNnID0gbTsKIAlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoZHJ2X2RhdGEtPmN1cl9tc2ctPnNwaSk7Ci0JYmZpbl9zcGlfcmVzdG9yZV9zdGF0ZShkcnZfZGF0YSk7CisJYWRpX3NwaV9yZXN0b3JlX3N0YXRlKGRydl9kYXRhKTsKIAogCWRydl9kYXRhLT5zdGF0ZSA9IFNUQVJUX1NUQVRFOwogCWRydl9kYXRhLT5jdXJfdHJhbnNmZXIgPSBsaXN0X2VudHJ5KGRydl9kYXRhLT5jdXJfbXNnLT50cmFuc2ZlcnMubmV4dCwKQEAgLTYzMCwxNSArNjQ5LDE1IEBACiAJUF9TUEkyX1NTRUw2LCBQX1NQSTJfU1NFTDd9LAogfTsKIAotc3RhdGljIGludCBiZmluX3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBhZGlfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlzdHJ1Y3QgYmZpbl9zcGlfZGV2aWNlICpjaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7Ci0JdTMyIGJmaW5fY3RsX3JlZyA9IFNQSV9DVExfT0RNIHwgU1BJX0NUTF9QU1NFOworCXN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgYWRpX3NwaV9kZXZpY2UgKmNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoc3BpKTsKKwl1MzIgY3RsX3JlZyA9IFNQSV9DVExfT0RNIHwgU1BJX0NUTF9QU1NFOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFjaGlwKSB7Ci0JCXN0cnVjdCBiZmluX3NwaTNfY2hpcCAqY2hpcF9pbmZvID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJCXN0cnVjdCBhZGlfc3BpM19jaGlwICpjaGlwX2luZm8gPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKIAogCQljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjaGlwKSB7CkBAIC02NDYsNyArNjY1LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWlmIChjaGlwX2luZm8pIHsKLQkJCWlmIChjaGlwX2luZm8tPmNvbnRyb2wgJiB+YmZpbl9jdGxfcmVnKSB7CisJCQlpZiAoY2hpcF9pbmZvLT5jb250cm9sICYgfmN0bF9yZWcpIHsKIAkJCQlkZXZfZXJyKCZzcGktPmRldiwKIAkJCQkJImRvIG5vdCBzZXQgYml0cyB0aGF0IHRoZSBTUEkgZnJhbWV3b3JrIG1hbmFnZXNcbiIpOwogCQkJCWdvdG8gZXJyb3I7CkBAIC02NTcsNiArNjc2LDcgQEAKIAkJCWNoaXAtPmVuYWJsZV9kbWEgPSBjaGlwX2luZm8tPmVuYWJsZV9kbWE7CiAJCX0KIAkJY2hpcC0+Y3MgPSBzcGktPmNoaXBfc2VsZWN0OworCiAJCWlmIChjaGlwLT5jcyA8IE1BWF9DVFJMX0NTKSB7CiAJCQljaGlwLT5zc2VsID0gKDEgPDwgY2hpcC0+Y3MpIDw8IDg7CiAJCQlyZXQgPSBwZXJpcGhlcmFsX3JlcXVlc3Qoc3NlbFtzcGktPm1hc3Rlci0+YnVzX251bV0KQEAgLTY3OCw3ICs2OTgsNyBAQAogCX0KIAogCS8qIGZvcmNlIGEgZGVmYXVsdCBiYXNlIHN0YXRlICovCi0JY2hpcC0+Y29udHJvbCAmPSBiZmluX2N0bF9yZWc7CisJY2hpcC0+Y29udHJvbCAmPSBjdGxfcmVnOwogCiAJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQogCQljaGlwLT5jb250cm9sIHw9IFNQSV9DVExfQ1BPTDsKQEAgLTY5Miw4ICs3MTIsOCBAQAogCiAJY2hpcC0+Y2xvY2sgPSBoel90b19zcGlfY2xvY2soZHJ2X2RhdGEtPnNjbGssIHNwaS0+bWF4X3NwZWVkX2h6KTsKIAotCWJmaW5fc3BpX2NzX2VuYWJsZShkcnZfZGF0YSwgY2hpcCk7Ci0JYmZpbl9zcGlfY3NfZGVhY3RpdmUoZHJ2X2RhdGEsIGNoaXApOworCWFkaV9zcGlfY3NfZW5hYmxlKGRydl9kYXRhLCBjaGlwKTsKKwlhZGlfc3BpX2NzX2RlYWN0aXZlKGRydl9kYXRhLCBjaGlwKTsKIAogCXJldHVybiAwOwogZXJyb3I6CkBAIC03MDUsMTAgKzcyNSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fc3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyB2b2lkIGFkaV9zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBiZmluX3NwaV9kZXZpY2UgKmNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoc3BpKTsKLQlzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBhZGlfc3BpX2RldmljZSAqY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOworCXN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAogCWlmICghY2hpcCkKIAkJcmV0dXJuOwpAQCAtNzE2LDcgKzczNiw3IEBACiAJaWYgKGNoaXAtPmNzIDwgTUFYX0NUUkxfQ1MpIHsKIAkJcGVyaXBoZXJhbF9mcmVlKHNzZWxbc3BpLT5tYXN0ZXItPmJ1c19udW1dCiAJCQkJCVtjaGlwLT5jcy0xXSk7Ci0JCWJmaW5fc3BpX2NzX2Rpc2FibGUoZHJ2X2RhdGEsIGNoaXApOworCQlhZGlfc3BpX2NzX2Rpc2FibGUoZHJ2X2RhdGEsIGNoaXApOwogCX0gZWxzZSB7CiAJCWdwaW9fZnJlZShjaGlwLT5jc19ncGlvKTsKIAl9CkBAIC03MjUsMTAgKzc0NSwxMSBAQAogCXNwaV9zZXRfY3RsZGF0YShzcGksIE5VTEwpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgYmZpbl9zcGlfdHhfZG1hX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWRpX3NwaV90eF9kbWFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSA9IGRldl9pZDsKKwlzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhID0gZGV2X2lkOwogCXUzMiBkbWFfc3RhdCA9IGdldF9kbWFfY3Vycl9pcnFzdGF0KGRydl9kYXRhLT50eF9kbWEpOworCXUzMiB0eF9jdGw7CiAKIAljbGVhcl9kbWFfaXJxc3RhdChkcnZfZGF0YS0+dHhfZG1hKTsKIAlpZiAoZG1hX3N0YXQgJiBETUFfRE9ORSkgewpAQCAtNzM5LDEzICs3NjAsMTUgQEAKIAkJaWYgKGRydl9kYXRhLT50eCkKIAkJCWRydl9kYXRhLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOwogCX0KLQliZmluX3dyaXRlX2FuZCgmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wsIH5TUElfVFhDVExfVERSX05GKTsKKwl0eF9jdGwgPSBpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wpOworCXR4X2N0bCAmPSB+U1BJX1RYQ1RMX1REUl9ORjsKKwlpb3dyaXRlMzIodHhfY3RsLCAmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGJmaW5fc3BpX3J4X2RtYV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IGFkaV9zcGlfcnhfZG1hX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGJmaW5fc3BpX21hc3RlciAqZHJ2X2RhdGEgPSBkZXZfaWQ7CisJc3RydWN0IGFkaV9zcGlfbWFzdGVyICpkcnZfZGF0YSA9IGRldl9pZDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOwogCXUzMiBkbWFfc3RhdCA9IGdldF9kbWFfY3Vycl9pcnFzdGF0KGRydl9kYXRhLT5yeF9kbWEpOwogCkBAIC03NjAsOCArNzgzLDggQEAKIAkJZGV2X2VycigmZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LAogCQkJCSJzcGkgcnggZG1hIGVycm9yOiAlZFxuIiwgZG1hX3N0YXQpOwogCX0KLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+dHhfY29udHJvbCwgMCk7Ci0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPnJ4X2NvbnRyb2wsIDApOworCWlvd3JpdGUzMigwLCAmZHJ2X2RhdGEtPnJlZ3MtPnR4X2NvbnRyb2wpOworCWlvd3JpdGUzMigwLCAmZHJ2X2RhdGEtPnJlZ3MtPnJ4X2NvbnRyb2wpOwogCWlmIChkcnZfZGF0YS0+cnhfbnVtICE9IGRydl9kYXRhLT50eF9udW0pCiAJCWRldl9kYmcoJmRydl9kYXRhLT5tYXN0ZXItPmRldiwKIAkJCQkiZG1hIGludGVycnVwdCBtaXNzaW5nOiB0eD0lZCxyeD0lZFxuIiwKQEAgLTc3MCwxNSArNzkzLDE1IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGJmaW5fc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGFkaV9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0cnVjdCBiZmluX3NwaTNfbWFzdGVyICppbmZvID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOworCXN0cnVjdCBhZGlfc3BpM19tYXN0ZXIgKmluZm8gPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKLQlzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YTsKKwlzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqcmVzOwogCXVuc2lnbmVkIGludCB0eF9kbWEsIHJ4X2RtYTsKLQl1bnNpZ25lZCBsb25nIHNjbGs7CisJc3RydWN0IGNsayAqc2NsazsKIAlpbnQgcmV0OwogCiAJaWYgKCFpbmZvKSB7CkBAIC03ODYsMTAgKzgwOSwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlzY2xrID0gZ2V0X3NjbGsxKCk7Ci0JaWYgKCFzY2xrKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2FuIG5vdCBnZXQgc2NsazFcbiIpOwotCQlyZXR1cm4gLUVOWElPOworCXNjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3BpIik7CisJaWYgKElTX0VSUihzY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbiBub3QgZ2V0IHNwaSBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHNjbGspOwogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CkBAIC04MTksOSArODQyLDkgQEAKIAogCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOwogCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBpbmZvLT5udW1fY2hpcHNlbGVjdDsKLQltYXN0ZXItPmNsZWFudXAgPSBiZmluX3NwaV9jbGVhbnVwOwotCW1hc3Rlci0+c2V0dXAgPSBiZmluX3NwaV9zZXR1cDsKLQltYXN0ZXItPnRyYW5zZmVyX29uZV9tZXNzYWdlID0gYmZpbl9zcGlfdHJhbnNmZXJfb25lX21lc3NhZ2U7CisJbWFzdGVyLT5jbGVhbnVwID0gYWRpX3NwaV9jbGVhbnVwOworCW1hc3Rlci0+c2V0dXAgPSBhZGlfc3BpX3NldHVwOworCW1hc3Rlci0+dHJhbnNmZXJfb25lX21lc3NhZ2UgPSBhZGlfc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlOwogCW1hc3Rlci0+Yml0c19wZXJfd29yZF9tYXNrID0gU1BJX0JQV19NQVNLKDMyKSB8IFNQSV9CUFdfTUFTSygxNikgfAogCQkJCSAgICAgU1BJX0JQV19NQVNLKDgpOwogCkBAIC04MzAsNyArODUzLDcgQEAKIAlkcnZfZGF0YS0+dHhfZG1hID0gdHhfZG1hOwogCWRydl9kYXRhLT5yeF9kbWEgPSByeF9kbWE7CiAJZHJ2X2RhdGEtPnBpbl9yZXEgPSBpbmZvLT5waW5fcmVxOwotCWRydl9kYXRhLT5zY2xrID0gc2NsazsKKwlkcnZfZGF0YS0+c2NsayA9IGNsa19nZXRfcmF0ZShzY2xrKTsKIAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJZHJ2X2RhdGEtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOwpAQCAtODQ1LDI4ICs4NjgsMjggQEAKIAkJZGV2X2VycihkZXYsICJjYW4gbm90IHJlcXVlc3QgU1BJIFRYIERNQSBjaGFubmVsXG4iKTsKIAkJZ290byBlcnJfcHV0X21hc3RlcjsKIAl9Ci0Jc2V0X2RtYV9jYWxsYmFjayh0eF9kbWEsIGJmaW5fc3BpX3R4X2RtYV9pc3IsIGRydl9kYXRhKTsKKwlzZXRfZG1hX2NhbGxiYWNrKHR4X2RtYSwgYWRpX3NwaV90eF9kbWFfaXNyLCBkcnZfZGF0YSk7CiAKIAlyZXQgPSByZXF1ZXN0X2RtYShyeF9kbWEsICJTUElfUlhfRE1BIik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImNhbiBub3QgcmVxdWVzdCBTUEkgUlggRE1BIGNoYW5uZWxcbiIpOwogCQlnb3RvIGVycl9mcmVlX3R4X2RtYTsKIAl9Ci0Jc2V0X2RtYV9jYWxsYmFjayhkcnZfZGF0YS0+cnhfZG1hLCBiZmluX3NwaV9yeF9kbWFfaXNyLCBkcnZfZGF0YSk7CisJc2V0X2RtYV9jYWxsYmFjayhkcnZfZGF0YS0+cnhfZG1hLCBhZGlfc3BpX3J4X2RtYV9pc3IsIGRydl9kYXRhKTsKIAogCS8qIHJlcXVlc3QgQ0xLLCBNT1NJIGFuZCBNSVNPICovCi0JcmV0ID0gcGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoZHJ2X2RhdGEtPnBpbl9yZXEsICJiZmluLXNwaTMiKTsKKwlyZXQgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChkcnZfZGF0YS0+cGluX3JlcSwgImFkaS1zcGkzIik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJjYW4gbm90IHJlcXVlc3Qgc3BpIHBpbnNcbiIpOwogCQlnb3RvIGVycl9mcmVlX3J4X2RtYTsKIAl9CiAKLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+Y29udHJvbCwgU1BJX0NUTF9NU1RSIHwgU1BJX0NUTF9DUEhBKTsKLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+c3NlbCwgMHgwMDAwRkUwMCk7Ci0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPmRlbGF5LCAweDApOworCWlvd3JpdGUzMihTUElfQ1RMX01TVFIgfCBTUElfQ1RMX0NQSEEsICZkcnZfZGF0YS0+cmVncy0+Y29udHJvbCk7CisJaW93cml0ZTMyKDB4MDAwMEZFMDAsICZkcnZfZGF0YS0+cmVncy0+c3NlbCk7CisJaW93cml0ZTMyKDB4MCwgJmRydl9kYXRhLT5yZWdzLT5kZWxheSk7CiAKIAl0YXNrbGV0X2luaXQoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycywKLQkJCWJmaW5fc3BpX3B1bXBfdHJhbnNmZXJzLCAodW5zaWduZWQgbG9uZylkcnZfZGF0YSk7CisJCQlhZGlfc3BpX3B1bXBfdHJhbnNmZXJzLCAodW5zaWduZWQgbG9uZylkcnZfZGF0YSk7CiAJLyogcmVnaXN0ZXIgd2l0aCB0aGUgU1BJIGZyYW1ld29yayAqLwogCXJldCA9IGRldm1fc3BpX3JlZ2lzdGVyX21hc3RlcihkZXYsIG1hc3Rlcik7CiAJaWYgKHJldCkgewpAQCAtODg4LDQzICs5MTEsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGJmaW5fc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBhZGlfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwogCi0JYmZpbl9zcGlfZGlzYWJsZShkcnZfZGF0YSk7Ci0KKwlhZGlfc3BpX2Rpc2FibGUoZHJ2X2RhdGEpOwogCXBlcmlwaGVyYWxfZnJlZV9saXN0KGRydl9kYXRhLT5waW5fcmVxKTsKIAlmcmVlX2RtYShkcnZfZGF0YS0+cnhfZG1hKTsKIAlmcmVlX2RtYShkcnZfZGF0YS0+dHhfZG1hKTsKLQogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGJmaW5fc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYmZpbl9zcGlfbWFzdGVyICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgYWRpX3NwaV9tYXN0ZXIgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwogCiAJc3BpX21hc3Rlcl9zdXNwZW5kKG1hc3Rlcik7CiAKLQlkcnZfZGF0YS0+Y29udHJvbCA9IGJmaW5fcmVhZCgmZHJ2X2RhdGEtPnJlZ3MtPmNvbnRyb2wpOwotCWRydl9kYXRhLT5zc2VsID0gYmZpbl9yZWFkKCZkcnZfZGF0YS0+cmVncy0+c3NlbCk7CisJZHJ2X2RhdGEtPmNvbnRyb2wgPSBpb3JlYWQzMigmZHJ2X2RhdGEtPnJlZ3MtPmNvbnRyb2wpOworCWRydl9kYXRhLT5zc2VsID0gaW9yZWFkMzIoJmRydl9kYXRhLT5yZWdzLT5zc2VsKTsKIAotCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT5jb250cm9sLCBTUElfQ1RMX01TVFIgfCBTUElfQ1RMX0NQSEEpOwotCWJmaW5fd3JpdGUoJmRydl9kYXRhLT5yZWdzLT5zc2VsLCAweDAwMDBGRTAwKTsKKwlpb3dyaXRlMzIoU1BJX0NUTF9NU1RSIHwgU1BJX0NUTF9DUEhBLCAmZHJ2X2RhdGEtPnJlZ3MtPmNvbnRyb2wpOworCWlvd3JpdGUzMigweDAwMDBGRTAwLCAmZHJ2X2RhdGEtPnJlZ3MtPnNzZWwpOwogCWRtYV9kaXNhYmxlX2lycShkcnZfZGF0YS0+cnhfZG1hKTsKIAlkbWFfZGlzYWJsZV9pcnEoZHJ2X2RhdGEtPnR4X2RtYSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZmluX3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBiZmluX3NwaV9tYXN0ZXIgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCBhZGlfc3BpX21hc3RlciAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBib290cm9tIG1heSBtb2RpZnkgc3BpIGFuZCBkbWEgc3RhdHVzIHdoZW4gcmVzdW1lIGluIHNwaSBib290IG1vZGUgKi8KQEAgLTkzMiw4ICs5NTMsOCBAQAogCiAJZG1hX2VuYWJsZV9pcnEoZHJ2X2RhdGEtPnJ4X2RtYSk7CiAJZG1hX2VuYWJsZV9pcnEoZHJ2X2RhdGEtPnR4X2RtYSk7Ci0JYmZpbl93cml0ZSgmZHJ2X2RhdGEtPnJlZ3MtPmNvbnRyb2wsIGRydl9kYXRhLT5jb250cm9sKTsKLQliZmluX3dyaXRlKCZkcnZfZGF0YS0+cmVncy0+c3NlbCwgZHJ2X2RhdGEtPnNzZWwpOworCWlvd3JpdGUzMihkcnZfZGF0YS0+Y29udHJvbCwgJmRydl9kYXRhLT5yZWdzLT5jb250cm9sKTsKKwlpb3dyaXRlMzIoZHJ2X2RhdGEtPnNzZWwsICZkcnZfZGF0YS0+cmVncy0+c3NlbCk7CiAKIAlyZXQgPSBzcGlfbWFzdGVyX3Jlc3VtZShtYXN0ZXIpOwogCWlmIChyZXQpIHsKQEAgLTk0NCwyMSArOTY1LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJmaW5fc3BpX3BtX29wcyA9IHsKLQlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhiZmluX3NwaV9zdXNwZW5kLCBiZmluX3NwaV9yZXN1bWUpCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWRpX3NwaV9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoYWRpX3NwaV9zdXNwZW5kLCBhZGlfc3BpX3Jlc3VtZSkKIH07CiAKLU1PRFVMRV9BTElBUygicGxhdGZvcm06YmZpbi1zcGkzIik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiZmluX3NwaV9kcml2ZXIgPSB7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkaS1zcGkzIik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZGlfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyCT0gewotCQkubmFtZQk9ICJiZmluLXNwaTMiLAorCQkubmFtZQk9ICJhZGktc3BpMyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkucG0gICAgID0gJmJmaW5fc3BpX3BtX29wcywKKwkJLnBtICAgICA9ICZhZGlfc3BpX3BtX29wcywKIAl9LAotCS5yZW1vdmUJCT0gYmZpbl9zcGlfcmVtb3ZlLAorCS5yZW1vdmUJCT0gYWRpX3NwaV9yZW1vdmUsCiB9OwogCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGJmaW5fc3BpX2RyaXZlciwgYmZpbl9zcGlfcHJvYmUpOworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcl9wcm9iZShhZGlfc3BpX2RyaXZlciwgYWRpX3NwaV9wcm9iZSk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgU1BJMyBjb250cm9sbGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU2NvdHQgSmlhbmcgPFNjb3R0LkppYW5nLkxpbnV4QGdtYWlsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1hdGg3OS5jIGIvZHJpdmVycy9zcGkvc3BpLWF0aDc5LmMKaW5kZXggMzg5OGIwYi4uMDU4ZGIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWF0aDc5LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWF0aDc5LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktYXRtZWwuYyBiL2RyaXZlcnMvc3BpL3NwaS1hdG1lbC5jCmluZGV4IDA3OWU2YjEuLjkyYTZmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1hdG1lbC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1hdG1lbC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogCiAJc3RydWN0IHNwaV90cmFuc2ZlcgkqY3VycmVudF90cmFuc2ZlcjsKLQl1bnNpZ25lZCBsb25nCQljdXJyZW50X3JlbWFpbmluZ19ieXRlczsKKwlpbnQJCQljdXJyZW50X3JlbWFpbmluZ19ieXRlczsKIAlpbnQJCQlkb25lX3N0YXR1czsKIAogCXN0cnVjdCBjb21wbGV0aW9uCXhmZXJfY29tcGxldGlvbjsKQEAgLTg3NCw4ICs4NzQsOSBAQAogCQlzcGlfcmVhZGwoYXMsIFJEUik7CiAJfQogCWlmICh4ZmVyLT5iaXRzX3Blcl93b3JkID4gOCkgewotCQlhcy0+Y3VycmVudF9yZW1haW5pbmdfYnl0ZXMgLT0gMjsKLQkJaWYgKGFzLT5jdXJyZW50X3JlbWFpbmluZ19ieXRlcyA8IDApCisJCWlmIChhcy0+Y3VycmVudF9yZW1haW5pbmdfYnl0ZXMgPiAyKQorCQkJYXMtPmN1cnJlbnRfcmVtYWluaW5nX2J5dGVzIC09IDI7CisJCWVsc2UKIAkJCWFzLT5jdXJyZW50X3JlbWFpbmluZ19ieXRlcyA9IDA7CiAJfSBlbHNlIHsKIAkJYXMtPmN1cnJlbnRfcmVtYWluaW5nX2J5dGVzLS07CkBAIC0xMTEwLDYgKzExMTEsOCBAQAogCQkJCWF0bWVsX3NwaV9uZXh0X3hmZXJfcGlvKG1hc3RlciwgeGZlcik7CiAJCQl9IGVsc2UgewogCQkJCWFzLT5jdXJyZW50X3JlbWFpbmluZ19ieXRlcyAtPSBsZW47CisJCQkJaWYgKGFzLT5jdXJyZW50X3JlbWFpbmluZ19ieXRlcyA8IDApCisJCQkJCWFzLT5jdXJyZW50X3JlbWFpbmluZ19ieXRlcyA9IDA7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlhdG1lbF9zcGlfbmV4dF94ZmVyX3BpbyhtYXN0ZXIsIHhmZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHgtaHNzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1iY202M3h4LWhzc3BpLmMKaW5kZXggNWEyMTFlOS4uODZmNWE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHgtaHNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC1oc3NwaS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgSFNTUElfR0xPQkFMX0NUUkxfUkVHCQkJMHgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jIGIvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYwppbmRleCAwMjUwZmE3Li44NTEwNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1iY202M3h4LmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3NwaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWNhZGVuY2UuYyBiL2RyaXZlcnMvc3BpL3NwaS1jYWRlbmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3NTg5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1jYWRlbmNlLmMKQEAgLTAsMCArMSw2NzMgQEAKKy8qCisgKiBDYWRlbmNlIFNQSSBjb250cm9sbGVyIGRyaXZlciAobWFzdGVyIG1vZGUgb25seSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDE0IFhpbGlueCwgSW5jLgorICoKKyAqIGJhc2VkIG9uIEJsYWNrZmluIE9uLUNoaXAgU1BJIERyaXZlciAoc3BpX2JmaW41eHguYykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKy8qIE5hbWUgb2YgdGhpcyBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ROU19TUElfTkFNRQkJImNkbnMtc3BpIgorCisvKiBSZWdpc3RlciBvZmZzZXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0ROU19TUElfQ1JfT0ZGU0VUCTB4MDAgLyogQ29uZmlndXJhdGlvbiAgUmVnaXN0ZXIsIFJXICovCisjZGVmaW5lIENETlNfU1BJX0lTUl9PRkZTRVQJMHgwNCAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyLCBSTyAqLworI2RlZmluZSBDRE5TX1NQSV9JRVJfT0ZGU0VUCTB4MDggLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciwgV08gKi8KKyNkZWZpbmUgQ0ROU19TUElfSURSX09GRlNFVAkweDBjIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyLCBXTyAqLworI2RlZmluZSBDRE5TX1NQSV9JTVJfT0ZGU0VUCTB4MTAgLyogSW50ZXJydXB0IEVuYWJsZWQgTWFzayBSZWdpc3RlciwgUk8gKi8KKyNkZWZpbmUgQ0ROU19TUElfRVJfT0ZGU0VUCTB4MTQgLyogRW5hYmxlL0Rpc2FibGUgUmVnaXN0ZXIsIFJXICovCisjZGVmaW5lIENETlNfU1BJX0RSX09GRlNFVAkweDE4IC8qIERlbGF5IFJlZ2lzdGVyLCBSVyAqLworI2RlZmluZSBDRE5TX1NQSV9UWERfT0ZGU0VUCTB4MUMgLyogRGF0YSBUcmFuc21pdCBSZWdpc3RlciwgV08gKi8KKyNkZWZpbmUgQ0ROU19TUElfUlhEX09GRlNFVAkweDIwIC8qIERhdGEgUmVjZWl2ZSBSZWdpc3RlciwgUk8gKi8KKyNkZWZpbmUgQ0ROU19TUElfU0lDUl9PRkZTRVQJMHgyNCAvKiBTbGF2ZSBJZGxlIENvdW50IFJlZ2lzdGVyLCBSVyAqLworI2RlZmluZSBDRE5TX1NQSV9USExEX09GRlNFVAkweDI4IC8qIFRyYW5zbWl0IEZJRk8gV2F0ZXJtYXJrIFJlZ2lzdGVyLFJXICovCisKKy8qCisgKiBTUEkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBiaXQgTWFza3MKKyAqCisgKiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHZhcmlvdXMgY29udHJvbCBiaXRzIHRoYXQgYWZmZWN0IHRoZSBvcGVyYXRpb24KKyAqIG9mIHRoZSBTUEkgY29udHJvbGxlcgorICovCisjZGVmaW5lIENETlNfU1BJX0NSX01BTlNUUlRfTUFTSwkweDAwMDEwMDAwIC8qIE1hbnVhbCBUWCBTdGFydCAqLworI2RlZmluZSBDRE5TX1NQSV9DUl9DUEhBX01BU0sJCTB4MDAwMDAwMDQgLyogQ2xvY2sgUGhhc2UgQ29udHJvbCAqLworI2RlZmluZSBDRE5TX1NQSV9DUl9DUE9MX01BU0sJCTB4MDAwMDAwMDIgLyogQ2xvY2sgUG9sYXJpdHkgQ29udHJvbCAqLworI2RlZmluZSBDRE5TX1NQSV9DUl9TU0NUUkxfTUFTSwkJMHgwMDAwM0MwMCAvKiBTbGF2ZSBTZWxlY3QgTWFzayAqLworI2RlZmluZSBDRE5TX1NQSV9DUl9CQVVEX0RJVl9NQVNLCTB4MDAwMDAwMzggLyogQmF1ZCBSYXRlIERpdmlzb3IgTWFzayAqLworI2RlZmluZSBDRE5TX1NQSV9DUl9NU1RSRU5fTUFTSwkJMHgwMDAwMDAwMSAvKiBNYXN0ZXIgRW5hYmxlIE1hc2sgKi8KKyNkZWZpbmUgQ0ROU19TUElfQ1JfTUFOU1RSVEVOX01BU0sJMHgwMDAwODAwMCAvKiBNYW51YWwgVFggRW5hYmxlIE1hc2sgKi8KKyNkZWZpbmUgQ0ROU19TUElfQ1JfU1NGT1JDRV9NQVNLCTB4MDAwMDQwMDAgLyogTWFudWFsIFNTIEVuYWJsZSBNYXNrICovCisjZGVmaW5lIENETlNfU1BJX0NSX0JBVURfRElWXzRfTUFTSwkweDAwMDAwMDA4IC8qIERlZmF1bHQgQmF1ZCBEaXYgTWFzayAqLworI2RlZmluZSBDRE5TX1NQSV9DUl9ERUZBVUxUX01BU0sJKENETlNfU1BJX0NSX01TVFJFTl9NQVNLIHwgXAorCQkJCQlDRE5TX1NQSV9DUl9TU0NUUkxfTUFTSyB8IFwKKwkJCQkJQ0ROU19TUElfQ1JfU1NGT1JDRV9NQVNLIHwgXAorCQkJCQlDRE5TX1NQSV9DUl9CQVVEX0RJVl80X01BU0spCisKKy8qCisgKiBTUEkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtIEJhdWQgcmF0ZSBhbmQgc2xhdmUgc2VsZWN0CisgKgorICogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYmF1ZCByYXRlIGRpdmlzb3IgYW5kCisgKiBzZXR0aW5nIHRoZSBzbGF2ZSBzZWxlY3QuCisgKi8KKworI2RlZmluZSBDRE5TX1NQSV9CQVVEX0RJVl9NQVgJCTcgLyogQmF1ZCByYXRlIGRpdmlzb3IgbWF4aW11bSAqLworI2RlZmluZSBDRE5TX1NQSV9CQVVEX0RJVl9NSU4JCTEgLyogQmF1ZCByYXRlIGRpdmlzb3IgbWluaW11bSAqLworI2RlZmluZSBDRE5TX1NQSV9CQVVEX0RJVl9TSElGVAkJMyAvKiBCYXVkIHJhdGUgZGl2aXNvciBzaGlmdCBpbiBDUiAqLworI2RlZmluZSBDRE5TX1NQSV9TU19TSElGVAkJMTAgLyogU2xhdmUgU2VsZWN0IGZpZWxkIHNoaWZ0IGluIENSICovCisjZGVmaW5lIENETlNfU1BJX1NTMAkJCTB4MSAvKiBTbGF2ZSBTZWxlY3QgemVybyAqLworCisvKgorICogU1BJIEludGVycnVwdCBSZWdpc3RlcnMgYml0IE1hc2tzCisgKgorICogQWxsIHRoZSBmb3VyIGludGVycnVwdCByZWdpc3RlcnMgKFN0YXR1cy9NYXNrL0VuYWJsZS9EaXNhYmxlKSBoYXZlIHRoZSBzYW1lCisgKiBiaXQgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0ROU19TUElfSVhSX1RYT1dfTUFTSwkweDAwMDAwMDA0IC8qIFNQSSBUWCBGSUZPIE92ZXJ3YXRlciAqLworI2RlZmluZSBDRE5TX1NQSV9JWFJfTU9ERl9NQVNLCTB4MDAwMDAwMDIgLyogU1BJIE1vZGUgRmF1bHQgKi8KKyNkZWZpbmUgQ0ROU19TUElfSVhSX1JYTkVNVFlfTUFTSyAweDAwMDAwMDEwIC8qIFNQSSBSWCBGSUZPIE5vdCBFbXB0eSAqLworI2RlZmluZSBDRE5TX1NQSV9JWFJfREVGQVVMVF9NQVNLCShDRE5TX1NQSV9JWFJfVFhPV19NQVNLIHwgXAorCQkJCQlDRE5TX1NQSV9JWFJfTU9ERl9NQVNLKQorI2RlZmluZSBDRE5TX1NQSV9JWFJfVFhGVUxMX01BU0sJMHgwMDAwMDAwOCAvKiBTUEkgVFggRnVsbCAqLworI2RlZmluZSBDRE5TX1NQSV9JWFJfQUxMX01BU0sJMHgwMDAwMDA3RiAvKiBTUEkgYWxsIGludGVycnVwdHMgKi8KKworLyoKKyAqIFNQSSBFbmFibGUgUmVnaXN0ZXIgYml0IE1hc2tzCisgKgorICogVGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlcgorICovCisjZGVmaW5lIENETlNfU1BJX0VSX0VOQUJMRV9NQVNLCTB4MDAwMDAwMDEgLyogU1BJIEVuYWJsZSBCaXQgTWFzayAqLworI2RlZmluZSBDRE5TX1NQSV9FUl9ESVNBQkxFX01BU0sJMHgwIC8qIFNQSSBEaXNhYmxlIEJpdCBNYXNrICovCisKKy8qIFNQSSBGSUZPIGRlcHRoIGluIGJ5dGVzICovCisjZGVmaW5lIENETlNfU1BJX0ZJRk9fREVQVEgJMTI4CisKKy8qIERlZmF1bHQgbnVtYmVyIG9mIGNoaXAgc2VsZWN0IGxpbmVzICovCisjZGVmaW5lIENETlNfU1BJX0RFRkFVTFRfTlVNX0NTCQk0CisKKy8qKgorICogc3RydWN0IGNkbnNfc3BpIC0gVGhpcyBkZWZpbml0aW9uIGRlZmluZXMgc3BpIGRyaXZlciBpbnN0YW5jZQorICogQHJlZ3M6CQlWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIFNQSSBjb250cm9sbGVyIHJlZ2lzdGVycworICogQHJlZl9jbGs6CQlQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIGNsb2NrCisgKiBAcGNsazoJCVBvaW50ZXIgdG8gdGhlIEFQQiBjbG9jaworICogQHNwZWVkX2h6OgkJQ3VycmVudCBTUEkgYnVzIGNsb2NrIHNwZWVkIGluIEh6CisgKiBAdHhidWY6CQlQb2ludGVyCXRvIHRoZSBUWCBidWZmZXIKKyAqIEByeGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIFJYIGJ1ZmZlcgorICogQHR4X2J5dGVzOgkJTnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gdHJhbnNmZXIKKyAqIEByeF9ieXRlczoJCU51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQKKyAqIEBkZXZfYnVzeToJCURldmljZSBidXN5IGZsYWcKKyAqIEBpc19kZWNvZGVkX2NzOglGbGFnIGZvciBkZWNvZGVyIHByb3BlcnR5IHNldCBvciBub3QKKyAqLworc3RydWN0IGNkbnNfc3BpIHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXUzMiBzcGVlZF9oejsKKwljb25zdCB1OCAqdHhidWY7CisJdTggKnJ4YnVmOworCWludCB0eF9ieXRlczsKKwlpbnQgcnhfYnl0ZXM7CisJdTggZGV2X2J1c3k7CisJdTMyIGlzX2RlY29kZWRfY3M7Cit9OworCisvKiBNYWNyb3MgZm9yIHRoZSBTUEkgY29udHJvbGxlciByZWFkL3dyaXRlICovCitzdGF0aWMgaW5saW5lIHUzMiBjZG5zX3NwaV9yZWFkKHN0cnVjdCBjZG5zX3NwaSAqeHNwaSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZCh4c3BpLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNkbnNfc3BpX3dyaXRlKHN0cnVjdCBjZG5zX3NwaSAqeHNwaSwgdTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHhzcGktPnJlZ3MgKyBvZmZzZXQpOworfQorCisvKioKKyAqIGNkbnNfc3BpX2luaXRfaHcgLSBJbml0aWFsaXplIHRoZSBoYXJkd2FyZSBhbmQgY29uZmlndXJlIHRoZSBTUEkgY29udHJvbGxlcgorICogQHhzcGk6CVBvaW50ZXIgdG8gdGhlIGNkbnNfc3BpIHN0cnVjdHVyZQorICoKKyAqIE9uIHJlc2V0IHRoZSBTUEkgY29udHJvbGxlciBpcyBjb25maWd1cmVkIHRvIGJlIGluIG1hc3RlciBtb2RlLCBiYXVkIHJhdGUKKyAqIGRpdmlzb3IgaXMgc2V0IHRvIDQsIHRocmVzaG9sZCB2YWx1ZSBmb3IgVFggRklGTyBub3QgZnVsbCBpbnRlcnJ1cHQgaXMgc2V0CisgKiB0byAxIGFuZCBzaXplIG9mIHRoZSB3b3JkIHRvIGJlIHRyYW5zZmVycmVkIGFzIDggYml0LgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgU1BJIGNvbnRyb2xsZXIgdG8gZGlzYWJsZSBhbmQgY2xlYXIgYWxsIHRoZQorICogaW50ZXJydXB0cywgZW5hYmxlIG1hbnVhbCBzbGF2ZSBzZWxlY3QgYW5kIG1hbnVhbCBzdGFydCwgZGVzZWxlY3QgYWxsIHRoZQorICogY2hpcCBzZWxlY3QgbGluZXMsIGFuZCBlbmFibGUgdGhlIFNQSSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCBjZG5zX3NwaV9pbml0X2h3KHN0cnVjdCBjZG5zX3NwaSAqeHNwaSkKK3sKKwljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9FUl9PRkZTRVQsCisJCSAgICAgICBDRE5TX1NQSV9FUl9ESVNBQkxFX01BU0spOworCWNkbnNfc3BpX3dyaXRlKHhzcGksIENETlNfU1BJX0lEUl9PRkZTRVQsCisJCSAgICAgICBDRE5TX1NQSV9JWFJfQUxMX01BU0spOworCisJLyogQ2xlYXIgdGhlIFJYIEZJRk8gKi8KKwl3aGlsZSAoY2Ruc19zcGlfcmVhZCh4c3BpLCBDRE5TX1NQSV9JU1JfT0ZGU0VUKSAmCisJICAgICAgIENETlNfU1BJX0lYUl9SWE5FTVRZX01BU0spCisJCWNkbnNfc3BpX3JlYWQoeHNwaSwgQ0ROU19TUElfUlhEX09GRlNFVCk7CisKKwljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9JU1JfT0ZGU0VULAorCQkgICAgICAgQ0ROU19TUElfSVhSX0FMTF9NQVNLKTsKKwljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9DUl9PRkZTRVQsCisJCSAgICAgICBDRE5TX1NQSV9DUl9ERUZBVUxUX01BU0spOworCWNkbnNfc3BpX3dyaXRlKHhzcGksIENETlNfU1BJX0VSX09GRlNFVCwKKwkJICAgICAgIENETlNfU1BJX0VSX0VOQUJMRV9NQVNLKTsKK30KKworLyoqCisgKiBjZG5zX3NwaV9jaGlwc2VsZWN0IC0gU2VsZWN0IG9yIGRlc2VsZWN0IHRoZSBjaGlwIHNlbGVjdCBsaW5lCisgKiBAc3BpOglQb2ludGVyIHRvIHRoZSBzcGlfZGV2aWNlIHN0cnVjdHVyZQorICogQGlzX29uOglTZWxlY3QoMCkgb3IgZGVzZWxlY3QgKDEpIHRoZSBjaGlwIHNlbGVjdCBsaW5lCisgKi8KK3N0YXRpYyB2b2lkIGNkbnNfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBpc19oaWdoKQoreworCXN0cnVjdCBjZG5zX3NwaSAqeHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXUzMiBjdHJsX3JlZzsKKworCWN0cmxfcmVnID0gY2Ruc19zcGlfcmVhZCh4c3BpLCBDRE5TX1NQSV9DUl9PRkZTRVQpOworCisJaWYgKGlzX2hpZ2gpIHsKKwkJLyogRGVzZWxlY3QgdGhlIHNsYXZlICovCisJCWN0cmxfcmVnIHw9IENETlNfU1BJX0NSX1NTQ1RSTF9NQVNLOworCX0gZWxzZSB7CisJCS8qIFNlbGVjdCB0aGUgc2xhdmUgKi8KKwkJY3RybF9yZWcgJj0gfkNETlNfU1BJX0NSX1NTQ1RSTF9NQVNLOworCQlpZiAoISh4c3BpLT5pc19kZWNvZGVkX2NzKSkKKwkJCWN0cmxfcmVnIHw9ICgofihDRE5TX1NQSV9TUzAgPDwgc3BpLT5jaGlwX3NlbGVjdCkpIDw8CisJCQkJICAgICBDRE5TX1NQSV9TU19TSElGVCkgJgorCQkJCSAgICAgQ0ROU19TUElfQ1JfU1NDVFJMX01BU0s7CisJCWVsc2UKKwkJCWN0cmxfcmVnIHw9IChzcGktPmNoaXBfc2VsZWN0IDw8IENETlNfU1BJX1NTX1NISUZUKSAmCisJCQkJICAgICBDRE5TX1NQSV9DUl9TU0NUUkxfTUFTSzsKKwl9CisKKwljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9DUl9PRkZTRVQsIGN0cmxfcmVnKTsKK30KKworLyoqCisgKiBjZG5zX3NwaV9jb25maWdfY2xvY2tfbW9kZSAtIFNldHMgY2xvY2sgcG9sYXJpdHkgYW5kIHBoYXNlCisgKiBAc3BpOglQb2ludGVyIHRvIHRoZSBzcGlfZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFNldHMgdGhlIHJlcXVlc3RlZCBjbG9jayBwb2xhcml0eSBhbmQgcGhhc2UuCisgKi8KK3N0YXRpYyB2b2lkIGNkbnNfc3BpX2NvbmZpZ19jbG9ja19tb2RlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGNkbnNfc3BpICp4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdTMyIGN0cmxfcmVnOworCisJY3RybF9yZWcgPSBjZG5zX3NwaV9yZWFkKHhzcGksIENETlNfU1BJX0NSX09GRlNFVCk7CisKKwkvKiBTZXQgdGhlIFNQSSBjbG9jayBwaGFzZSBhbmQgY2xvY2sgcG9sYXJpdHkgKi8KKwljdHJsX3JlZyAmPSB+KENETlNfU1BJX0NSX0NQSEFfTUFTSyB8IENETlNfU1BJX0NSX0NQT0xfTUFTSyk7CisJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQorCQljdHJsX3JlZyB8PSBDRE5TX1NQSV9DUl9DUEhBX01BU0s7CisJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQljdHJsX3JlZyB8PSBDRE5TX1NQSV9DUl9DUE9MX01BU0s7CisKKwljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9DUl9PRkZTRVQsIGN0cmxfcmVnKTsKK30KKworLyoqCisgKiBjZG5zX3NwaV9jb25maWdfY2xvY2tfZnJlcSAtIFNldHMgY2xvY2sgZnJlcXVlbmN5CisgKiBAc3BpOglQb2ludGVyIHRvIHRoZSBzcGlfZGV2aWNlIHN0cnVjdHVyZQorICogQHRyYW5zZmVyOglQb2ludGVyIHRvIHRoZSBzcGlfdHJhbnNmZXIgc3RydWN0dXJlIHdoaWNoIHByb3ZpZGVzCisgKgkJaW5mb3JtYXRpb24gYWJvdXQgbmV4dCB0cmFuc2ZlciBzZXR1cCBwYXJhbWV0ZXJzCisgKgorICogU2V0cyB0aGUgcmVxdWVzdGVkIGNsb2NrIGZyZXF1ZW5jeS4KKyAqIE5vdGU6IElmIHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5IGlzIG5vdCBhbiBleGFjdCBtYXRjaCB3aXRoIHdoYXQgY2FuIGJlCisgKiBvYnRhaW5lZCB1c2luZyB0aGUgcHJlc2NhbGFyIHZhbHVlIHRoZSBkcml2ZXIgc2V0cyB0aGUgY2xvY2sgZnJlcXVlbmN5IHdoaWNoCisgKiBpcyBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5IChtYXhpbXVtIGxvd2VyKSBmb3IgdGhlIHRyYW5zZmVyLiBJZgorICogdGhlIHJlcXVlc3RlZCBmcmVxdWVuY3kgaXMgaGlnaGVyIG9yIGxvd2VyIHRoYW4gdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIFNQSQorICogY29udHJvbGxlciB0aGUgZHJpdmVyIHdpbGwgc2V0IHRoZSBoaWdoZXN0IG9yIGxvd2VzdCBmcmVxdWVuY3kgc3VwcG9ydGVkIGJ5CisgKiBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCBjZG5zX3NwaV9jb25maWdfY2xvY2tfZnJlcShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSAgc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCit7CisJc3RydWN0IGNkbnNfc3BpICp4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdTMyIGN0cmxfcmVnLCBiYXVkX3JhdGVfdmFsOworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCisJZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKHhzcGktPnJlZl9jbGspOworCisJY3RybF9yZWcgPSBjZG5zX3NwaV9yZWFkKHhzcGksIENETlNfU1BJX0NSX09GRlNFVCk7CisKKwkvKiBTZXQgdGhlIGNsb2NrIGZyZXF1ZW5jeSAqLworCWlmICh4c3BpLT5zcGVlZF9oeiAhPSB0cmFuc2Zlci0+c3BlZWRfaHopIHsKKwkJLyogZmlyc3QgdmFsaWQgdmFsdWUgaXMgMSAqLworCQliYXVkX3JhdGVfdmFsID0gQ0ROU19TUElfQkFVRF9ESVZfTUlOOworCQl3aGlsZSAoKGJhdWRfcmF0ZV92YWwgPCBDRE5TX1NQSV9CQVVEX0RJVl9NQVgpICYmCisJCSAgICAgICAoZnJlcXVlbmN5IC8gKDIgPDwgYmF1ZF9yYXRlX3ZhbCkpID4gdHJhbnNmZXItPnNwZWVkX2h6KQorCQkJYmF1ZF9yYXRlX3ZhbCsrOworCisJCWN0cmxfcmVnICY9IH5DRE5TX1NQSV9DUl9CQVVEX0RJVl9NQVNLOworCQljdHJsX3JlZyB8PSBiYXVkX3JhdGVfdmFsIDw8IENETlNfU1BJX0JBVURfRElWX1NISUZUOworCisJCXhzcGktPnNwZWVkX2h6ID0gZnJlcXVlbmN5IC8gKDIgPDwgYmF1ZF9yYXRlX3ZhbCk7CisJfQorCWNkbnNfc3BpX3dyaXRlKHhzcGksIENETlNfU1BJX0NSX09GRlNFVCwgY3RybF9yZWcpOworfQorCisvKioKKyAqIGNkbnNfc3BpX3NldHVwX3RyYW5zZmVyIC0gQ29uZmlndXJlIFNQSSBjb250cm9sbGVyIGZvciBzcGVjaWZpZWQgdHJhbnNmZXIKKyAqIEBzcGk6CVBvaW50ZXIgdG8gdGhlIHNwaV9kZXZpY2Ugc3RydWN0dXJlCisgKiBAdHJhbnNmZXI6CVBvaW50ZXIgdG8gdGhlIHNwaV90cmFuc2ZlciBzdHJ1Y3R1cmUgd2hpY2ggcHJvdmlkZXMKKyAqCQlpbmZvcm1hdGlvbiBhYm91dCBuZXh0IHRyYW5zZmVyIHNldHVwIHBhcmFtZXRlcnMKKyAqCisgKiBTZXRzIHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIFNQSSBjb250cm9sbGVyIGZvciB0aGUgbmV4dCBTUEkgdHJhbnNmZXIgYW5kCisgKiBzZXRzIHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIFJldHVybjoJQWx3YXlzIDAKKyAqLworc3RhdGljIGludCBjZG5zX3NwaV9zZXR1cF90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworCXN0cnVjdCBjZG5zX3NwaSAqeHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJY2Ruc19zcGlfY29uZmlnX2Nsb2NrX2ZyZXEoc3BpLCB0cmFuc2Zlcik7CisKKwlkZXZfZGJnKCZzcGktPmRldiwgIiVzLCBtb2RlICVkLCAldSBiaXRzL3csICV1IGNsb2NrIHNwZWVkXG4iLAorCQlfX2Z1bmNfXywgc3BpLT5tb2RlLCBzcGktPmJpdHNfcGVyX3dvcmQsCisJCXhzcGktPnNwZWVkX2h6KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNkbnNfc3BpX2ZpbGxfdHhfZmlmbyAtIEZpbGxzIHRoZSBUWCBGSUZPIHdpdGggYXMgbWFueSBieXRlcyBhcyBwb3NzaWJsZQorICogQHhzcGk6CVBvaW50ZXIgdG8gdGhlIGNkbnNfc3BpIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBjZG5zX3NwaV9maWxsX3R4X2ZpZm8oc3RydWN0IGNkbnNfc3BpICp4c3BpKQoreworCXVuc2lnbmVkIGxvbmcgdHJhbnNfY250ID0gMDsKKworCXdoaWxlICgodHJhbnNfY250IDwgQ0ROU19TUElfRklGT19ERVBUSCkgJiYKKwkgICAgICAgKHhzcGktPnR4X2J5dGVzID4gMCkpIHsKKwkJaWYgKHhzcGktPnR4YnVmKQorCQkJY2Ruc19zcGlfd3JpdGUoeHNwaSwgQ0ROU19TUElfVFhEX09GRlNFVCwKKwkJCQkgICAgICAgKnhzcGktPnR4YnVmKyspOworCQllbHNlCisJCQljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9UWERfT0ZGU0VULCAwKTsKKworCQl4c3BpLT50eF9ieXRlcy0tOworCQl0cmFuc19jbnQrKzsKKwl9Cit9CisKKy8qKgorICogY2Ruc19zcGlfaXJxIC0gSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBvZiB0aGUgU1BJIGNvbnRyb2xsZXIKKyAqIEBpcnE6CUlSUSBudW1iZXIKKyAqIEBkZXZfaWQ6CVBvaW50ZXIgdG8gdGhlIHhzcGkgc3RydWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIFRYIGVtcHR5IGFuZCBNb2RlIEZhdWx0IGludGVycnVwdHMgb25seS4KKyAqIE9uIFRYIGVtcHR5IGludGVycnVwdCB0aGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSByZWNlaXZlZCBkYXRhIGZyb20gUlggRklGTyBhbmQKKyAqIGZpbGxzIHRoZSBUWCBGSUZPIGlmIHRoZXJlIGlzIGFueSBkYXRhIHJlbWFpbmluZyB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIE9uIE1vZGUgRmF1bHQgaW50ZXJydXB0IHRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHRoYXQgdHJhbnNmZXIgaXMgY29tcGxldGVkLAorICogdGhlIFNQSSBzdWJzeXN0ZW0gd2lsbCBpZGVudGlmeSB0aGUgZXJyb3IgYXMgdGhlIHJlbWFpbmluZyBieXRlcyB0byBiZQorICogdHJhbnNmZXJyZWQgaXMgbm9uLXplcm8uCisgKgorICogUmV0dXJuOglJUlFfSEFORExFRCB3aGVuIGhhbmRsZWQ7IElSUV9OT05FIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IGNkbnNfc3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9pZDsKKwlzdHJ1Y3QgY2Ruc19zcGkgKnhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJdTMyIGludHJfc3RhdHVzLCBzdGF0dXM7CisKKwlzdGF0dXMgPSBJUlFfTk9ORTsKKwlpbnRyX3N0YXR1cyA9IGNkbnNfc3BpX3JlYWQoeHNwaSwgQ0ROU19TUElfSVNSX09GRlNFVCk7CisJY2Ruc19zcGlfd3JpdGUoeHNwaSwgQ0ROU19TUElfSVNSX09GRlNFVCwgaW50cl9zdGF0dXMpOworCisJaWYgKGludHJfc3RhdHVzICYgQ0ROU19TUElfSVhSX01PREZfTUFTSykgeworCQkvKiBJbmRpY2F0ZSB0aGF0IHRyYW5zZmVyIGlzIGNvbXBsZXRlZCwgdGhlIFNQSSBzdWJzeXN0ZW0gd2lsbAorCQkgKiBpZGVudGlmeSB0aGUgZXJyb3IgYXMgdGhlIHJlbWFpbmluZyBieXRlcyB0byBiZQorCQkgKiB0cmFuc2ZlcnJlZCBpcyBub24temVybworCQkgKi8KKwkJY2Ruc19zcGlfd3JpdGUoeHNwaSwgQ0ROU19TUElfSURSX09GRlNFVCwKKwkJCSAgICAgICBDRE5TX1NQSV9JWFJfREVGQVVMVF9NQVNLKTsKKwkJc3BpX2ZpbmFsaXplX2N1cnJlbnRfdHJhbnNmZXIobWFzdGVyKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfSBlbHNlIGlmIChpbnRyX3N0YXR1cyAmIENETlNfU1BJX0lYUl9UWE9XX01BU0spIHsKKwkJdW5zaWduZWQgbG9uZyB0cmFuc19jbnQ7CisKKwkJdHJhbnNfY250ID0geHNwaS0+cnhfYnl0ZXMgLSB4c3BpLT50eF9ieXRlczsKKworCQkvKiBSZWFkIG91dCB0aGUgZGF0YSBmcm9tIHRoZSBSWCBGSUZPICovCisJCXdoaWxlICh0cmFuc19jbnQpIHsKKwkJCXU4IGRhdGE7CisKKwkJCWRhdGEgPSBjZG5zX3NwaV9yZWFkKHhzcGksIENETlNfU1BJX1JYRF9PRkZTRVQpOworCQkJaWYgKHhzcGktPnJ4YnVmKQorCQkJCSp4c3BpLT5yeGJ1ZisrID0gZGF0YTsKKworCQkJeHNwaS0+cnhfYnl0ZXMtLTsKKwkJCXRyYW5zX2NudC0tOworCQl9CisKKwkJaWYgKHhzcGktPnR4X2J5dGVzKSB7CisJCQkvKiBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gc2VuZCAqLworCQkJY2Ruc19zcGlfZmlsbF90eF9maWZvKHhzcGkpOworCQl9IGVsc2UgeworCQkJLyogVHJhbnNmZXIgaXMgY29tcGxldGVkICovCisJCQljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9JRFJfT0ZGU0VULAorCQkJCSAgICAgICBDRE5TX1NQSV9JWFJfREVGQVVMVF9NQVNLKTsKKwkJCXNwaV9maW5hbGl6ZV9jdXJyZW50X3RyYW5zZmVyKG1hc3Rlcik7CisJCX0KKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBjZG5zX3RyYW5zZmVyX29uZSAtIEluaXRpYXRlcyB0aGUgU1BJIHRyYW5zZmVyCisgKiBAbWFzdGVyOglQb2ludGVyIHRvIHNwaV9tYXN0ZXIgc3RydWN0dXJlCisgKiBAc3BpOglQb2ludGVyIHRvIHRoZSBzcGlfZGV2aWNlIHN0cnVjdHVyZQorICogQHRyYW5zZmVyOglQb2ludGVyIHRvIHRoZSBzcGlfdHJhbnNmZXIgc3RydWN0dXJlIHdoaWNoIHByb3ZpZGVzCisgKgkJaW5mb3JtYXRpb24gYWJvdXQgbmV4dCB0cmFuc2ZlciBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgVFggRklGTywgc3RhcnRzIHRoZSBTUEkgdHJhbnNmZXIgYW5kCisgKiByZXR1cm5zIGEgcG9zaXRpdmUgdHJhbnNmZXIgY291bnQgc28gdGhhdCBjb3JlIHdpbGwgd2FpdCBmb3IgY29tcGxldGlvbi4KKyAqCisgKiBSZXR1cm46CU51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2ZlcgorICovCitzdGF0aWMgaW50IGNkbnNfdHJhbnNmZXJfb25lKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisJCQkgICAgIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkgICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworCXN0cnVjdCBjZG5zX3NwaSAqeHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXhzcGktPnR4YnVmID0gdHJhbnNmZXItPnR4X2J1ZjsKKwl4c3BpLT5yeGJ1ZiA9IHRyYW5zZmVyLT5yeF9idWY7CisJeHNwaS0+dHhfYnl0ZXMgPSB0cmFuc2Zlci0+bGVuOworCXhzcGktPnJ4X2J5dGVzID0gdHJhbnNmZXItPmxlbjsKKworCWNkbnNfc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgdHJhbnNmZXIpOworCisJY2Ruc19zcGlfZmlsbF90eF9maWZvKHhzcGkpOworCisJY2Ruc19zcGlfd3JpdGUoeHNwaSwgQ0ROU19TUElfSUVSX09GRlNFVCwKKwkJICAgICAgIENETlNfU1BJX0lYUl9ERUZBVUxUX01BU0spOworCXJldHVybiB0cmFuc2Zlci0+bGVuOworfQorCisvKioKKyAqIGNkbnNfcHJlcGFyZV90cmFuc2Zlcl9oYXJkd2FyZSAtIFByZXBhcmVzIGhhcmR3YXJlIGZvciB0cmFuc2Zlci4KKyAqIEBtYXN0ZXI6CVBvaW50ZXIgdG8gdGhlIHNwaV9tYXN0ZXIgc3RydWN0dXJlIHdoaWNoIHByb3ZpZGVzCisgKgkJaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRyb2xsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIFNQSSBtYXN0ZXIgY29udHJvbGxlci4KKyAqCisgKiBSZXR1cm46CTAgYWx3YXlzCisgKi8KK3N0YXRpYyBpbnQgY2Ruc19wcmVwYXJlX3RyYW5zZmVyX2hhcmR3YXJlKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCit7CisJc3RydWN0IGNkbnNfc3BpICp4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJY2Ruc19zcGlfY29uZmlnX2Nsb2NrX21vZGUobWFzdGVyLT5jdXJfbXNnLT5zcGkpOworCisJY2Ruc19zcGlfd3JpdGUoeHNwaSwgQ0ROU19TUElfRVJfT0ZGU0VULAorCQkgICAgICAgQ0ROU19TUElfRVJfRU5BQkxFX01BU0spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY2Ruc191bnByZXBhcmVfdHJhbnNmZXJfaGFyZHdhcmUgLSBSZWxheGVzIGhhcmR3YXJlIGFmdGVyIHRyYW5zZmVyCisgKiBAbWFzdGVyOglQb2ludGVyIHRvIHRoZSBzcGlfbWFzdGVyIHN0cnVjdHVyZSB3aGljaCBwcm92aWRlcworICoJCWluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250cm9sbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIFNQSSBtYXN0ZXIgY29udHJvbGxlci4KKyAqCisgKiBSZXR1cm46CTAgYWx3YXlzCisgKi8KK3N0YXRpYyBpbnQgY2Ruc191bnByZXBhcmVfdHJhbnNmZXJfaGFyZHdhcmUoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlzdHJ1Y3QgY2Ruc19zcGkgKnhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwljZG5zX3NwaV93cml0ZSh4c3BpLCBDRE5TX1NQSV9FUl9PRkZTRVQsCisJCSAgICAgICBDRE5TX1NQSV9FUl9ESVNBQkxFX01BU0spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY2Ruc19zcGlfcHJvYmUgLSBQcm9iZSBtZXRob2QgZm9yIHRoZSBTUEkgZHJpdmVyCisgKiBAcGRldjoJUG9pbnRlciB0byB0aGUgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBSZXR1cm46CTAgb24gc3VjY2VzcyBhbmQgZXJyb3IgdmFsdWUgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBjZG5zX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwLCBpcnE7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3QgY2Ruc19zcGkgKnhzcGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdTMyIG51bV9jczsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCp4c3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1hc3Rlcik7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXhzcGktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHhzcGktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoeHNwaS0+cmVncyk7CisJCWdvdG8gcmVtb3ZlX21hc3RlcjsKKwl9CisKKwl4c3BpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUih4c3BpLT5wY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2xrIGNsb2NrIG5vdCBmb3VuZC5cbiIpOworCQlyZXQgPSBQVFJfRVJSKHhzcGktPnBjbGspOworCQlnb3RvIHJlbW92ZV9tYXN0ZXI7CisJfQorCisJeHNwaS0+cmVmX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicmVmX2NsayIpOworCWlmIChJU19FUlIoeHNwaS0+cmVmX2NsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVmX2NsayBjbG9jayBub3QgZm91bmQuXG4iKTsKKwkJcmV0ID0gUFRSX0VSUih4c3BpLT5yZWZfY2xrKTsKKwkJZ290byByZW1vdmVfbWFzdGVyOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZSh4c3BpLT5wY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBlbmFibGUgQVBCIGNsb2NrLlxuIik7CisJCWdvdG8gcmVtb3ZlX21hc3RlcjsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoeHNwaS0+cmVmX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIGRldmljZSBjbG9jay5cbiIpOworCQlnb3RvIGNsa19kaXNfYXBiOworCX0KKworCS8qIFNQSSBjb250cm9sbGVyIGluaXRpYWxpemF0aW9ucyAqLworCWNkbnNfc3BpX2luaXRfaHcoeHNwaSk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPD0gMCkgeworCQlyZXQgPSAtRU5YSU87CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlycSBudW1iZXIgaXMgaW52YWxpZFxuIik7CisJCWdvdG8gcmVtb3ZlX21hc3RlcjsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgY2Ruc19zcGlfaXJxLAorCQkJICAgICAgIDAsIHBkZXYtPm5hbWUsIG1hc3Rlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJZ290byByZW1vdmVfbWFzdGVyOworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAibnVtLWNzIiwgJm51bV9jcyk7CisKKwlpZiAocmV0IDwgMCkKKwkJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IENETlNfU1BJX0RFRkFVTFRfTlVNX0NTOworCWVsc2UKKwkJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IG51bV9jczsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAiaXMtZGVjb2RlZC1jcyIsCisJCQkJICAgJnhzcGktPmlzX2RlY29kZWRfY3MpOworCisJaWYgKHJldCA8IDApCisJCXhzcGktPmlzX2RlY29kZWRfY3MgPSAwOworCisJbWFzdGVyLT5wcmVwYXJlX3RyYW5zZmVyX2hhcmR3YXJlID0gY2Ruc19wcmVwYXJlX3RyYW5zZmVyX2hhcmR3YXJlOworCW1hc3Rlci0+dHJhbnNmZXJfb25lID0gY2Ruc190cmFuc2Zlcl9vbmU7CisJbWFzdGVyLT51bnByZXBhcmVfdHJhbnNmZXJfaGFyZHdhcmUgPSBjZG5zX3VucHJlcGFyZV90cmFuc2Zlcl9oYXJkd2FyZTsKKwltYXN0ZXItPnNldF9jcyA9IGNkbnNfc3BpX2NoaXBzZWxlY3Q7CisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOworCisJLyogU2V0IHRvIGRlZmF1bHQgdmFsaWQgdmFsdWUgKi8KKwltYXN0ZXItPm1heF9zcGVlZF9oeiA9IGNsa19nZXRfcmF0ZSh4c3BpLT5yZWZfY2xrKSAvIDQ7CisJeHNwaS0+c3BlZWRfaHogPSBtYXN0ZXItPm1heF9zcGVlZF9oejsKKworCW1hc3Rlci0+Yml0c19wZXJfd29yZF9tYXNrID0gU1BJX0JQV19NQVNLKDgpOworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAic3BpX3JlZ2lzdGVyX21hc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGNsa19kaXNfYWxsOworCX0KKworCXJldHVybiByZXQ7CisKK2Nsa19kaXNfYWxsOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c3BpLT5yZWZfY2xrKTsKK2Nsa19kaXNfYXBiOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c3BpLT5wY2xrKTsKK3JlbW92ZV9tYXN0ZXI6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNkbnNfc3BpX3JlbW92ZSAtIFJlbW92ZSBtZXRob2QgZm9yIHRoZSBTUEkgZHJpdmVyCisgKiBAcGRldjoJUG9pbnRlciB0byB0aGUgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIGEgZGV2aWNlIGlzIHBoeXNpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0gb3IKKyAqIGlmIHRoZSBkcml2ZXIgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLiBJdCBmcmVlcyBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCB0bworICogdGhlIGRldmljZS4KKyAqCisgKiBSZXR1cm46CTAgb24gc3VjY2VzcyBhbmQgZXJyb3IgdmFsdWUgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBjZG5zX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGNkbnNfc3BpICp4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJY2Ruc19zcGlfd3JpdGUoeHNwaSwgQ0ROU19TUElfRVJfT0ZGU0VULAorCQkgICAgICAgQ0ROU19TUElfRVJfRElTQUJMRV9NQVNLKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c3BpLT5yZWZfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoeHNwaS0+cGNsayk7CisKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNkbnNfc3BpX3N1c3BlbmQgLSBTdXNwZW5kIG1ldGhvZCBmb3IgdGhlIFNQSSBkcml2ZXIKKyAqIEBkZXY6CUFkZHJlc3Mgb2YgdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBTUEkgY29udHJvbGxlciBhbmQKKyAqIGNoYW5nZXMgdGhlIGRyaXZlciBzdGF0ZSB0byAic3VzcGVuZCIKKyAqCisgKiBSZXR1cm46CUFsd2F5cyAwCisgKi8KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgY2Ruc19zcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgY2Ruc19zcGkgKnhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcGlfbWFzdGVyX3N1c3BlbmQobWFzdGVyKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c3BpLT5yZWZfY2xrKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c3BpLT5wY2xrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNkbnNfc3BpX3Jlc3VtZSAtIFJlc3VtZSBtZXRob2QgZm9yIHRoZSBTUEkgZHJpdmVyCisgKiBAZGV2OglBZGRyZXNzIG9mIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBkcml2ZXIgc3RhdGUgdG8gInJlYWR5IgorICoKKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIGFuZCBlcnJvciB2YWx1ZSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGNkbnNfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgY2Ruc19zcGkgKnhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoeHNwaS0+cGNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBlbmFibGUgQVBCIGNsb2NrLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHhzcGktPnJlZl9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgZW5hYmxlIGRldmljZSBjbG9jay5cbiIpOworCQljbGtfZGlzYWJsZSh4c3BpLT5wY2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3BpX21hc3Rlcl9yZXN1bWUobWFzdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoY2Ruc19zcGlfZGV2X3BtX29wcywgY2Ruc19zcGlfc3VzcGVuZCwKKwkJCSBjZG5zX3NwaV9yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjZG5zX3NwaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAieGxueCx6eW5xLXNwaS1yMXA2IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiY2RucyxzcGktcjFwNiIgfSwKKwl7IC8qIGVuZCBvZiB0YWJsZSAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgY2Ruc19zcGlfb2ZfbWF0Y2gpOworCisvKiBjZG5zX3NwaV9kcml2ZXIgLSBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBTUEkgc3Vic3lzdGVtIHBsYXRmb3JtIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2Ruc19zcGlfZHJpdmVyID0geworCS5wcm9iZQk9IGNkbnNfc3BpX3Byb2JlLAorCS5yZW1vdmUJPSBjZG5zX3NwaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBDRE5TX1NQSV9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gY2Ruc19zcGlfb2ZfbWF0Y2gsCisJCS5wbSA9ICZjZG5zX3NwaV9kZXZfcG1fb3BzLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGNkbnNfc3BpX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDYWRlbmNlIFNQSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1kdy1tbWlvLmMgYi9kcml2ZXJzL3NwaS9zcGktZHctbW1pby5jCmluZGV4IDE0OTJmNWUuLmE1Y2JhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1kdy1tbWlvLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWR3LW1taW8uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KIAogI2luY2x1ZGUgInNwaS1kdy5oIgogCkBAIC03MCw2ICs3MSwyNyBAQAogCWR3cy0+bnVtX2NzID0gNDsKIAlkd3MtPm1heF9mcmVxID0gY2xrX2dldF9yYXRlKGR3c21taW8tPmNsayk7CiAKKwlpZiAocGRldi0+ZGV2Lm9mX25vZGUpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGR3cy0+bnVtX2NzOyBpKyspIHsKKwkJCWludCBjc19ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8ocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSJjcy1ncGlvcyIsIGkpOworCisJCQlpZiAoY3NfZ3BpbyA9PSAtRVBST0JFX0RFRkVSKSB7CisJCQkJcmV0ID0gY3NfZ3BpbzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKGdwaW9faXNfdmFsaWQoY3NfZ3BpbykpIHsKKwkJCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdCgmcGRldi0+ZGV2LCBjc19ncGlvLAorCQkJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQkJCWlmIChyZXQpCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCiAJcmV0ID0gZHdfc3BpX2FkZF9ob3N0KCZwZGV2LT5kZXYsIGR3cyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHcuYyBiL2RyaXZlcnMvc3BpL3NwaS1kdy5jCmluZGV4IDcxMmFjNTYyLi4yOWYzMzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZHcuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlICJzcGktZHcuaCIKIApAQCAtMzYsMTIgKzM3LDYgQEAKICNkZWZpbmUgRE9ORV9TVEFURQkoKHZvaWQgKikyKQogI2RlZmluZSBFUlJPUl9TVEFURQkoKHZvaWQgKiktMSkKIAotI2RlZmluZSBRVUVVRV9SVU5OSU5HCTAKLSNkZWZpbmUgUVVFVUVfU1RPUFBFRAkxCi0KLSNkZWZpbmUgTVJTVF9TUElfREVBU1NFUlQJMAotI2RlZmluZSBNUlNUX1NQSV9BU1NFUlQJCTEKLQogLyogU2xhdmUgc3BpX2RldiByZWxhdGVkICovCiBzdHJ1Y3QgY2hpcF9kYXRhIHsKIAl1MTYgY3IwOwpAQCAtMjYzLDI4ICsyNTgsMjIgQEAKIHN0YXRpYyB2b2lkIGdpdmViYWNrKHN0cnVjdCBkd19zcGkgKmR3cykKIHsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICpsYXN0X3RyYW5zZmVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHdzLT5sb2NrLCBmbGFncyk7CiAJbXNnID0gZHdzLT5jdXJfbXNnOwogCWR3cy0+Y3VyX21zZyA9IE5VTEw7CiAJZHdzLT5jdXJfdHJhbnNmZXIgPSBOVUxMOwogCWR3cy0+cHJldl9jaGlwID0gZHdzLT5jdXJfY2hpcDsKIAlkd3MtPmN1cl9jaGlwID0gTlVMTDsKIAlkd3MtPmRtYV9tYXBwZWQgPSAwOwotCXF1ZXVlX3dvcmsoZHdzLT53b3JrcXVldWUsICZkd3MtPnB1bXBfbWVzc2FnZXMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOwogCiAJbGFzdF90cmFuc2ZlciA9IGxpc3RfbGFzdF9lbnRyeSgmbXNnLT50cmFuc2ZlcnMsIHN0cnVjdCBzcGlfdHJhbnNmZXIsCiAJCQkJCXRyYW5zZmVyX2xpc3QpOwogCi0JaWYgKCFsYXN0X3RyYW5zZmVyLT5jc19jaGFuZ2UgJiYgZHdzLT5jc19jb250cm9sKQotCQlkd3MtPmNzX2NvbnRyb2woTVJTVF9TUElfREVBU1NFUlQpOworCWlmICghbGFzdF90cmFuc2Zlci0+Y3NfY2hhbmdlKQorCQlzcGlfY2hpcF9zZWwoZHdzLCBkd3MtPmN1cl9tc2ctPnNwaSwgMCk7CiAKLQltc2ctPnN0YXRlID0gTlVMTDsKLQlpZiAobXNnLT5jb21wbGV0ZSkKLQkJbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOworCXNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UoZHdzLT5tYXN0ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRfZXJyb3Jfc3RvcChzdHJ1Y3QgZHdfc3BpICpkd3MsIGNvbnN0IGNoYXIgKm1zZykKQEAgLTUwMiw3ICs0OTEsNyBAQAogCQkJZHdfd3JpdGV3KGR3cywgRFdfU1BJX0NUUkwwLCBjcjApOwogCiAJCXNwaV9zZXRfY2xrKGR3cywgY2xrX2RpdiA/IGNsa19kaXYgOiBjaGlwLT5jbGtfZGl2KTsKLQkJc3BpX2NoaXBfc2VsKGR3cywgc3BpLT5jaGlwX3NlbGVjdCk7CisJCXNwaV9jaGlwX3NlbChkd3MsIHNwaSwgMSk7CiAKIAkJLyogU2V0IHRoZSBpbnRlcnJ1cHQgbWFzaywgZm9yIHBvbGwgbW9kZSBqdXN0IGRpc2FibGUgYWxsIGludCAqLwogCQlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7CkBAIC01MjksMzAgKzUxOCwxMiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgcHVtcF9tZXNzYWdlcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgaW50IGR3X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAorCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKIHsKLQlzdHJ1Y3QgZHdfc3BpICpkd3MgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGR3X3NwaSwgcHVtcF9tZXNzYWdlcyk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZHdfc3BpICpkd3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAKLQkvKiBMb2NrIHF1ZXVlIGFuZCBjaGVjayBmb3IgcXVldWUgd29yayAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmZHdzLT5xdWV1ZSkgfHwgZHdzLT5ydW4gPT0gUVVFVUVfU1RPUFBFRCkgewotCQlkd3MtPmJ1c3kgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgcnVubmluZyBhIG1lc3NhZ2UgKi8KLQlpZiAoZHdzLT5jdXJfbXNnKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogRXh0cmFjdCBoZWFkIG9mIHF1ZXVlICovCi0JZHdzLT5jdXJfbXNnID0gbGlzdF9lbnRyeShkd3MtPnF1ZXVlLm5leHQsIHN0cnVjdCBzcGlfbWVzc2FnZSwgcXVldWUpOwotCWxpc3RfZGVsX2luaXQoJmR3cy0+Y3VyX21zZy0+cXVldWUpOwotCisJZHdzLT5jdXJfbXNnID0gbXNnOwogCS8qIEluaXRpYWwgbWVzc2FnZSBzdGF0ZSovCiAJZHdzLT5jdXJfbXNnLT5zdGF0ZSA9IFNUQVJUX1NUQVRFOwogCWR3cy0+Y3VyX3RyYW5zZmVyID0gbGlzdF9lbnRyeShkd3MtPmN1cl9tc2ctPnRyYW5zZmVycy5uZXh0LApAQCAtNTYwLDQ2ICs1MzEsOSBAQAogCQkJCQkJdHJhbnNmZXJfbGlzdCk7CiAJZHdzLT5jdXJfY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShkd3MtPmN1cl9tc2ctPnNwaSk7CiAKLQkvKiBNYXJrIGFzIGJ1c3kgYW5kIGxhdW5jaCB0cmFuc2ZlcnMgKi8KKwkvKiBMYXVuY2ggdHJhbnNmZXJzICovCiAJdGFza2xldF9zY2hlZHVsZSgmZHdzLT5wdW1wX3RyYW5zZmVycyk7CiAKLQlkd3MtPmJ1c3kgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBzcGlfZGV2aWNlIHVzZSB0aGlzIHRvIHF1ZXVlIGluIHRoZWlyIHNwaV9tc2cgKi8KLXN0YXRpYyBpbnQgZHdfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQotewotCXN0cnVjdCBkd19zcGkgKmR3cyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHdzLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZHdzLT5ydW4gPT0gUVVFVUVfU1RPUFBFRCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FU0hVVERPV047Ci0JfQotCi0JbXNnLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQltc2ctPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKLQltc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7Ci0KLQlsaXN0X2FkZF90YWlsKCZtc2ctPnF1ZXVlLCAmZHdzLT5xdWV1ZSk7Ci0KLQlpZiAoZHdzLT5ydW4gPT0gUVVFVUVfUlVOTklORyAmJiAhZHdzLT5idXN5KSB7Ci0KLQkJaWYgKGR3cy0+Y3VyX3RyYW5zZmVyIHx8IGR3cy0+Y3VyX21zZykKLQkJCXF1ZXVlX3dvcmsoZHdzLT53b3JrcXVldWUsCi0JCQkJCSZkd3MtPnB1bXBfbWVzc2FnZXMpOwotCQllbHNlIHsKLQkJCS8qIElmIG5vIG90aGVyIGRhdGEgdHJhbnNhY3Rpb24gaW4gYWlyLCBqdXN0IGdvICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQkJCXB1bXBfbWVzc2FnZXMoJmR3cy0+cHVtcF9tZXNzYWdlcyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC02MDgsNiArNTQyLDcgQEAKIHsKIAlzdHJ1Y3QgZHdfc3BpX2NoaXAgKmNoaXBfaW5mbyA9IE5VTEw7CiAJc3RydWN0IGNoaXBfZGF0YSAqY2hpcDsKKwlpbnQgcmV0OwogCiAJLyogT25seSBhbGxvYyBvbiBmaXJzdCBzZXR1cCAqLwogCWNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoc3BpKTsKQEAgLTY2MSw4MSArNTk2LDEzIEBACiAJCQl8IChzcGktPm1vZGUgIDw8IFNQSV9NT0RFX09GRlNFVCkKIAkJCXwgKGNoaXAtPnRtb2RlIDw8IFNQSV9UTU9EX09GRlNFVCk7CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbml0X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKLXsKLQlJTklUX0xJU1RfSEVBRCgmZHdzLT5xdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmR3cy0+bG9jayk7Ci0KLQlkd3MtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7Ci0JZHdzLT5idXN5ID0gMDsKLQotCXRhc2tsZXRfaW5pdCgmZHdzLT5wdW1wX3RyYW5zZmVycywKLQkJCXB1bXBfdHJhbnNmZXJzLAkodW5zaWduZWQgbG9uZylkd3MpOwotCi0JSU5JVF9XT1JLKCZkd3MtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwotCWR3cy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCQkJCWRldl9uYW1lKGR3cy0+bWFzdGVyLT5kZXYucGFyZW50KSk7Ci0JaWYgKGR3cy0+d29ya3F1ZXVlID09IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGFydF9xdWV1ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChkd3MtPnJ1biA9PSBRVUVVRV9SVU5OSU5HIHx8IGR3cy0+YnVzeSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoZ3Bpb19pc192YWxpZChzcGktPmNzX2dwaW8pKSB7CisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChzcGktPmNzX2dwaW8sCisJCQkJIShzcGktPm1vZGUgJiBTUElfQ1NfSElHSCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlkd3MtPnJ1biA9IFFVRVVFX1JVTk5JTkc7Ci0JZHdzLT5jdXJfbXNnID0gTlVMTDsKLQlkd3MtPmN1cl90cmFuc2ZlciA9IE5VTEw7Ci0JZHdzLT5jdXJfY2hpcCA9IE5VTEw7Ci0JZHdzLT5wcmV2X2NoaXAgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOwotCi0JcXVldWVfd29yayhkd3MtPndvcmtxdWV1ZSwgJmR3cy0+cHVtcF9tZXNzYWdlcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdG9wX3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxpbWl0ID0gNTA7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHdzLT5sb2NrLCBmbGFncyk7Ci0JZHdzLT5ydW4gPSBRVUVVRV9TVE9QUEVEOwotCXdoaWxlICgoIWxpc3RfZW1wdHkoJmR3cy0+cXVldWUpIHx8IGR3cy0+YnVzeSkgJiYgbGltaXQtLSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKLQkJbXNsZWVwKDEwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOwotCX0KLQotCWlmICghbGlzdF9lbXB0eSgmZHdzLT5xdWV1ZSkgfHwgZHdzLT5idXN5KQotCQlzdGF0dXMgPSAtRUJVU1k7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGRlc3Ryb3lfcXVldWUoc3RydWN0IGR3X3NwaSAqZHdzKQotewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBzdG9wX3F1ZXVlKGR3cyk7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlyZXR1cm4gc3RhdHVzOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGR3cy0+d29ya3F1ZXVlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzk0LDcgKzY2MSw3IEBACiAJbWFzdGVyLT5idXNfbnVtID0gZHdzLT5idXNfbnVtOwogCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBkd3MtPm51bV9jczsKIAltYXN0ZXItPnNldHVwID0gZHdfc3BpX3NldHVwOwotCW1hc3Rlci0+dHJhbnNmZXIgPSBkd19zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT50cmFuc2Zlcl9vbmVfbWVzc2FnZSA9IGR3X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZTsKIAltYXN0ZXItPm1heF9zcGVlZF9oeiA9IGR3cy0+bWF4X2ZyZXE7CiAKIAkvKiBCYXNpYyBIVyBpbml0ICovCkBAIC04MDgsMzMgKzY3NSwyMSBAQAogCQl9CiAJfQogCi0JLyogSW5pdGlhbCBhbmQgc3RhcnQgcXVldWUgKi8KLQlyZXQgPSBpbml0X3F1ZXVlKGR3cyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZtYXN0ZXItPmRldiwgInByb2JsZW0gaW5pdGlhbGl6aW5nIHF1ZXVlXG4iKTsKLQkJZ290byBlcnJfZGlhYmxlX2h3OwotCX0KLQlyZXQgPSBzdGFydF9xdWV1ZShkd3MpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmbWFzdGVyLT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHF1ZXVlXG4iKTsKLQkJZ290byBlcnJfZGlhYmxlX2h3OwotCX0KKwl0YXNrbGV0X2luaXQoJmR3cy0+cHVtcF90cmFuc2ZlcnMsIHB1bXBfdHJhbnNmZXJzLCAodW5zaWduZWQgbG9uZylkd3MpOwogCiAJc3BpX21hc3Rlcl9zZXRfZGV2ZGF0YShtYXN0ZXIsIGR3cyk7CiAJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVyKGRldiwgbWFzdGVyKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJm1hc3Rlci0+ZGV2LCAicHJvYmxlbSByZWdpc3RlcmluZyBzcGkgbWFzdGVyXG4iKTsKLQkJZ290byBlcnJfcXVldWVfYWxsb2M7CisJCWdvdG8gZXJyX2RtYV9leGl0OwogCX0KIAogCW1yc3Rfc3BpX2RlYnVnZnNfaW5pdChkd3MpOwogCXJldHVybiAwOwogCi1lcnJfcXVldWVfYWxsb2M6Ci0JZGVzdHJveV9xdWV1ZShkd3MpOworZXJyX2RtYV9leGl0OgogCWlmIChkd3MtPmRtYV9vcHMgJiYgZHdzLT5kbWFfb3BzLT5kbWFfZXhpdCkKIAkJZHdzLT5kbWFfb3BzLT5kbWFfZXhpdChkd3MpOwotZXJyX2RpYWJsZV9odzoKIAlzcGlfZW5hYmxlX2NoaXAoZHdzLCAwKTsKIGVycl9mcmVlX21hc3RlcjoKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwpAQCAtODQ0LDE4ICs2OTksMTAgQEAKIAogdm9pZCBkd19zcGlfcmVtb3ZlX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQogewotCWludCBzdGF0dXMgPSAwOwotCiAJaWYgKCFkd3MpCiAJCXJldHVybjsKIAltcnN0X3NwaV9kZWJ1Z2ZzX3JlbW92ZShkd3MpOwogCi0JLyogUmVtb3ZlIHRoZSBxdWV1ZSAqLwotCXN0YXR1cyA9IGRlc3Ryb3lfcXVldWUoZHdzKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWRldl9lcnIoJmR3cy0+bWFzdGVyLT5kZXYsCi0JCQkiZHdfc3BpX3JlbW92ZTogd29ya3F1ZXVlIHdpbGwgbm90IGNvbXBsZXRlLCBtZXNzYWdlIG1lbW9yeSBub3QgZnJlZWRcbiIpOwotCiAJaWYgKGR3cy0+ZG1hX29wcyAmJiBkd3MtPmRtYV9vcHMtPmRtYV9leGl0KQogCQlkd3MtPmRtYV9vcHMtPmRtYV9leGl0KGR3cyk7CiAJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CkBAIC04NjgsNyArNzE1LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IHN0b3BfcXVldWUoZHdzKTsKKwlyZXQgPSBzcGlfbWFzdGVyX3N1c3BlbmQoZHdzLT5tYXN0ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CkBAIC04ODIsNyArNzI5LDcgQEAKIAlpbnQgcmV0OwogCiAJc3BpX2h3X2luaXQoZHdzKTsKLQlyZXQgPSBzdGFydF9xdWV1ZShkd3MpOworCXJldCA9IHNwaV9tYXN0ZXJfcmVzdW1lKGR3cy0+bWFzdGVyKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LCAiZmFpbCB0byBzdGFydCBxdWV1ZSAoJWQpXG4iLCByZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHcuaCBiL2RyaXZlcnMvc3BpL3NwaS1kdy5oCmluZGV4IDU4NzY0M2QuLjZkMmFjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1kdy5oCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1kdy5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBEV19TUElfQ1RSTDAJCQkweDAwCkBAIC0xMDQsMTQgKzEwNSw2IEBACiAJdTE2CQkJYnVzX251bTsKIAl1MTYJCQludW1fY3M7CQkvKiBzdXBwb3J0ZWQgc2xhdmUgbnVtYmVycyAqLwogCi0JLyogRHJpdmVyIG1lc3NhZ2UgcXVldWUgKi8KLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3F1ZXVlOwotCXN0cnVjdCB3b3JrX3N0cnVjdAlwdW1wX21lc3NhZ2VzOwotCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKLQlpbnQJCQlidXN5OwotCWludAkJCXJ1bjsKLQogCS8qIE1lc3NhZ2UgVHJhbnNmZXIgcHVtcCAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlwdW1wX3RyYW5zZmVyczsKIApAQCAtMTg2LDE1ICsxNzksMjAgQEAKIAlkd193cml0ZWwoZHdzLCBEV19TUElfQkFVRFIsIGRpdik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfY2hpcF9zZWwoc3RydWN0IGR3X3NwaSAqZHdzLCB1MTYgY3MpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpX2NoaXBfc2VsKHN0cnVjdCBkd19zcGkgKmR3cywgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJaW50IGFjdGl2ZSkKIHsKLQlpZiAoY3MgPiBkd3MtPm51bV9jcykKLQkJcmV0dXJuOworCXUxNiBjcyA9IHNwaS0+Y2hpcF9zZWxlY3Q7CisJaW50IGdwaW9fdmFsID0gYWN0aXZlID8gKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKSA6CisJCSEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOwogCiAJaWYgKGR3cy0+Y3NfY29udHJvbCkKLQkJZHdzLT5jc19jb250cm9sKDEpOworCQlkd3MtPmNzX2NvbnRyb2woYWN0aXZlKTsKKwlpZiAoZ3Bpb19pc192YWxpZChzcGktPmNzX2dwaW8pKQorCQlncGlvX3NldF92YWx1ZShzcGktPmNzX2dwaW8sIGdwaW9fdmFsKTsKIAotCWR3X3dyaXRlbChkd3MsIERXX1NQSV9TRVIsIDEgPDwgY3MpOworCWlmIChhY3RpdmUpCisJCWR3X3dyaXRlbChkd3MsIERXX1NQSV9TRVIsIDEgPDwgY3MpOwogfQogCiAvKiBEaXNhYmxlIElSUSBiaXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZmFsY29uLmMgYi9kcml2ZXJzL3NwaS9zcGktZmFsY29uLmMKaW5kZXggMDk5NjVmMC4uYmE0NDFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZhbGNvbi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mYWxjb24uYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1kc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYwppbmRleCBkNTY1ZWVlLi41MDIxZGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfZHNwaV9kdF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9kc3BpX2R0X2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWRzcGkiLCAuZGF0YSA9IE5VTEwsIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1lc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWVzcGkuYwppbmRleCBlNzY3ZjU4Li44ZWJkNzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZnNsLWVzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWVzcGkuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJfQogCiAJZXNwaV90cmFucy0+dHhfYnVmID0gbG9jYWxfYnVmOwotCWVzcGlfdHJhbnMtPnJ4X2J1ZiA9IGxvY2FsX2J1ZiArIGVzcGlfdHJhbnMtPm5fdHg7CisJZXNwaV90cmFucy0+cnhfYnVmID0gbG9jYWxfYnVmOwogCWZzbF9lc3BpX2RvX3RyYW5zKG0sIGVzcGlfdHJhbnMpOwogCiAJZXNwaV90cmFucy0+YWN0dWFsX2xlbmd0aCA9IGVzcGlfdHJhbnMtPmxlbjsKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQllc3BpX3RyYW5zLT5uX3J4ID0gdHJhbnNfbGVuOwogCQllc3BpX3RyYW5zLT5sZW4gPSB0cmFuc19sZW4gKyBuX3R4OwogCQllc3BpX3RyYW5zLT50eF9idWYgPSBsb2NhbF9idWY7Ci0JCWVzcGlfdHJhbnMtPnJ4X2J1ZiA9IGxvY2FsX2J1ZiArIG5fdHg7CisJCWVzcGlfdHJhbnMtPnJ4X2J1ZiA9IGxvY2FsX2J1ZjsKIAkJZnNsX2VzcGlfZG9fdHJhbnMobSwgZXNwaV90cmFucyk7CiAKIAkJbWVtY3B5KHJ4X2J1ZiArIHBvcywgZXNwaV90cmFucy0+cnhfYnVmICsgbl90eCwgdHJhbnNfbGVuKTsKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghY3MpIHsKLQkJY3MgPSBremFsbG9jKHNpemVvZiAqY3MsIEdGUF9LRVJORUwpOworCQljcyA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqY3MpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjcykKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzcGktPmNvbnRyb2xsZXJfc3RhdGUgPSBjczsKQEAgLTU4Niw4ICs1ODYsMTAgQEAKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBtcGM4eHh4X3NwaSAqbXBjOHh4eF9zcGk7CiAJc3RydWN0IGZzbF9lc3BpX3JlZyAqcmVnX2Jhc2U7Ci0JdTMyIHJlZ3ZhbDsKLQlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5jOworCWNvbnN0IF9fYmUzMiAqcHJvcDsKKwl1MzIgcmVndmFsLCBjc21vZGU7CisJaW50IGksIGxlbiwgcmV0ID0gMDsKIAogCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZGV2LCBzaXplb2Yoc3RydWN0IG1wYzh4eHhfc3BpKSk7CiAJaWYgKCFtYXN0ZXIpIHsKQEAgLTYzNCw4ICs2MzYsMzIgQEAKIAltcGM4eHh4X3NwaV93cml0ZV9yZWcoJnJlZ19iYXNlLT5ldmVudCwgMHhmZmZmZmZmZik7CiAKIAkvKiBJbml0IGVTUEkgQ1MgbW9kZSByZWdpc3RlciAqLwotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bWF4X2NoaXBzZWxlY3Q7IGkrKykKLQkJbXBjOHh4eF9zcGlfd3JpdGVfcmVnKCZyZWdfYmFzZS0+Y3Ntb2RlW2ldLCBDU01PREVfSU5JVF9WQUwpOworCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG1hc3Rlci0+ZGV2Lm9mX25vZGUsIG5jKSB7CisJCS8qIGdldCBjaGlwIHNlbGVjdCAqLworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5jLCAicmVnIiwgJmxlbik7CisJCWlmICghcHJvcCB8fCBsZW4gPCBzaXplb2YoKnByb3ApKQorCQkJY29udGludWU7CisJCWkgPSBiZTMyX3RvX2NwdXAocHJvcCk7CisJCWlmIChpIDwgMCB8fCBpID49IHBkYXRhLT5tYXhfY2hpcHNlbGVjdCkKKwkJCWNvbnRpbnVlOworCisJCWNzbW9kZSA9IENTTU9ERV9JTklUX1ZBTDsKKwkJLyogY2hlY2sgaWYgQ1NCRUYgaXMgc2V0IGluIGRldmljZSB0cmVlICovCisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobmMsICJmc2wsY3NiZWYiLCAmbGVuKTsKKwkJaWYgKHByb3AgJiYgbGVuID49IHNpemVvZigqcHJvcCkpIHsKKwkJCWNzbW9kZSAmPSB+KENTTU9ERV9CRUYoMHhmKSk7CisJCQljc21vZGUgfD0gQ1NNT0RFX0JFRihiZTMyX3RvX2NwdXAocHJvcCkpOworCQl9CisJCS8qIGNoZWNrIGlmIENTQUZUIGlzIHNldCBpbiBkZXZpY2UgdHJlZSAqLworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5jLCAiZnNsLGNzYWZ0IiwgJmxlbik7CisJCWlmIChwcm9wICYmIGxlbiA+PSBzaXplb2YoKnByb3ApKSB7CisJCQljc21vZGUgJj0gfihDU01PREVfQUZUKDB4ZikpOworCQkJY3Ntb2RlIHw9IENTTU9ERV9BRlQoYmUzMl90b19jcHVwKHByb3ApKTsKKwkJfQorCQltcGM4eHh4X3NwaV93cml0ZV9yZWcoJnJlZ19iYXNlLT5jc21vZGVbaV0sIGNzbW9kZSk7CisKKwkJZGV2X2luZm8oZGV2LCAiY3M9JWQsIGluaXRfY3Ntb2RlPTB4JXhcbiIsIGksIGNzbW9kZSk7CisJfQogCiAJLyogRW5hYmxlIFNQSSBpbnRlcmZhY2UgKi8KIAlyZWd2YWwgPSBwZGF0YS0+aW5pdGlhbF9zcG1vZGUgfCBTUE1PREVfSU5JVF9WQUwgfCBTUE1PREVfRU5BQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuYyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmMKaW5kZXggZTVkNDVmYy4uOTUyMTJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5jCkBAIC05OSwxMSArOTksNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1wYzh4eHhfc3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlrZnJlZShzcGktPmNvbnRyb2xsZXJfc3RhdGUpOwotfQotCiBjb25zdCBjaGFyICptcGM4eHh4X3NwaV9zdHJtb2RlKHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpZiAoZmxhZ3MgJiBTUElfUUVfQ1BVX01PREUpIHsKQEAgLTEzNCw3ICsxMjksNiBAQAogCQkJfCBTUElfTFNCX0ZJUlNUIHwgU1BJX0xPT1A7CiAKIAltYXN0ZXItPnRyYW5zZmVyID0gbXBjOHh4eF9zcGlfdHJhbnNmZXI7Ci0JbWFzdGVyLT5jbGVhbnVwID0gbXBjOHh4eF9zcGlfY2xlYW51cDsKIAltYXN0ZXItPmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwogCiAJbXBjOHh4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5oIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuaAppbmRleCA1MmRiNjkzLi4yZmNiZmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5oCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmgKQEAgLTEyNCw3ICsxMjQsNiBAQAogZXh0ZXJuIGludCBtcGM4eHh4X3NwaV9idWZzKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSwKIAkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCwgdW5zaWduZWQgaW50IGxlbik7CiBleHRlcm4gaW50IG1wYzh4eHhfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSk7Ci1leHRlcm4gdm9pZCBtcGM4eHh4X3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKm1wYzh4eHhfc3BpX3N0cm1vZGUodW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgbXBjOHh4eF9zcGlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwKIAkJdW5zaWduZWQgaW50IGlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZnNsLXNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1zcGkuYwppbmRleCBiM2U3Nzc1Li45OGNjZDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZnNsLXNwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtc3BpLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghY3MpIHsKLQkJY3MgPSBremFsbG9jKHNpemVvZiAqY3MsIEdGUF9LRVJORUwpOworCQljcyA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqY3MpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjcykKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzcGktPmNvbnRyb2xsZXJfc3RhdGUgPSBjczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1ncGlvLmMgYi9kcml2ZXJzL3NwaS9zcGktZ3Bpby5jCmluZGV4IDA5ODIzMDcuLjlmNTk1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1ncGlvLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWdwaW8uYwpAQCAtMzQwLDcgKzM0MCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9ncGlvX2R0X2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX2dwaW9fZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzcGktZ3BpbyIgfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1udWM5MDAuYyBiL2RyaXZlcnMvc3BpL3NwaS1udWM5MDAuYwppbmRleCAxNmUzMGRlLi43M2U5MWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktbnVjOTAwLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW51YzkwMC5jCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1vbWFwLXV3aXJlLmMgYi9kcml2ZXJzL3NwaS9zcGktb21hcC11d2lyZS5jCmluZGV4IGJlMmEyZTEuLjBmNWEwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1vbWFwLXV3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW9tYXAtdXdpcmUuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMgYi9kcml2ZXJzL3NwaS9zcGktcGwwMjIuYwppbmRleCA1MWQ5OTc3Li42NmQyYWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcGwwMjIuYwpAQCAtMTExMSwxMCArMTExMSw4IEBACiAJfQogCiAJcGwwMjItPmR1bW15cGFnZSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBsMDIyLT5kdW1teXBhZ2UpIHsKLQkJZGV2X2RiZygmcGwwMjItPmFkZXYtPmRldiwgIm5vIERNQSBkdW1teXBhZ2UhXG4iKTsKKwlpZiAoIXBsMDIyLT5kdW1teXBhZ2UpCiAJCWdvdG8gZXJyX25vX2R1bW15cGFnZTsKLQl9CiAKIAlkZXZfaW5mbygmcGwwMjItPmFkZXYtPmRldiwgInNldHVwIGZvciBETUEgb24gUlggJXMsIFRYICVzXG4iLAogCQkgZG1hX2NoYW5fbmFtZShwbDAyMi0+ZG1hX3J4X2NoYW5uZWwpLApAQCAtMTgwOSwxMSArMTgwNyw4IEBACiAKIAlpZiAoY2hpcCA9PSBOVUxMKSB7CiAJCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hpcF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY2hpcCkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkJImNhbm5vdCBhbGxvY2F0ZSBjb250cm9sbGVyIHN0YXRlXG4iKTsKKwkJaWYgKCFjaGlwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KIAkJZGV2X2RiZygmc3BpLT5kZXYsCiAJCQkiYWxsb2NhdGVkIG1lbW9yeSBmb3IgY29udHJvbGxlcidzIHJ1bnRpbWUgc3RhdGVcbiIpOwogCX0KQEAgLTIwNTAsMTAgKzIwNDUsOCBAQAogCX0KIAogCXBkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciksIEdGUF9LRVJORUwpOwotCWlmICghcGQpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgYWxsb2NhdGUgcGxhdGZvcm0gZGF0YSBtZW1vcnlcbiIpOworCWlmICghcGQpCiAJCXJldHVybiBOVUxMOwotCX0KIAogCXBkLT5idXNfaWQgPSAtMTsKIAlwZC0+ZW5hYmxlX2RtYSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LXBjaS5jIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1wY2kuYwppbmRleCAzZjAwNmQzLi5jMTg2NWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LXBjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHgtcGNpLmMKQEAgLTgsNyArOCw0MyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKLXN0YXRpYyBpbnQgY2U0MTAwX3NwaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorZW51bSB7CisJUE9SVF9DRTQxMDAsCisJUE9SVF9CWVQsCit9OworCitzdHJ1Y3QgcHhhX3NwaV9pbmZvIHsKKwllbnVtIHB4YV9zc3BfdHlwZSB0eXBlOworCWludCBwb3J0X2lkOworCWludCBudW1fY2hpcHNlbGVjdDsKKwlpbnQgdHhfc2xhdmVfaWQ7CisJaW50IHR4X2NoYW5faWQ7CisJaW50IHJ4X3NsYXZlX2lkOworCWludCByeF9jaGFuX2lkOworfTsKKworc3RhdGljIHN0cnVjdCBweGFfc3BpX2luZm8gc3BpX2luZm9fY29uZmlnc1tdID0geworCVtQT1JUX0NFNDEwMF0gPSB7CisJCS50eXBlID0gUFhBMjV4X1NTUCwKKwkJLnBvcnRfaWQgPSAgLTEsCisJCS5udW1fY2hpcHNlbGVjdCA9IC0xLAorCQkudHhfc2xhdmVfaWQgPSAtMSwKKwkJLnR4X2NoYW5faWQgPSAtMSwKKwkJLnJ4X3NsYXZlX2lkID0gLTEsCisJCS5yeF9jaGFuX2lkID0gLTEsCisJfSwKKwlbUE9SVF9CWVRdID0geworCQkudHlwZSA9IExQU1NfU1NQLAorCQkucG9ydF9pZCA9IDAsCisJCS5udW1fY2hpcHNlbGVjdCA9IDEsCisJCS50eF9zbGF2ZV9pZCA9IDAsCisJCS50eF9jaGFuX2lkID0gMCwKKwkJLnJ4X3NsYXZlX2lkID0gMSwKKwkJLnJ4X2NoYW5faWQgPSAxLAorCX0sCit9OworCitzdGF0aWMgaW50IHB4YTJ4eF9zcGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBpOwpAQCAtMTYsNiArNTIsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHNwaV9wZGF0YTsKIAlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwOworCXN0cnVjdCBweGFfc3BpX2luZm8gKmM7CiAKIAlyZXQgPSBwY2ltX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAocmV0KQpAQCAtMjUsOCArNjIsMTYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJYyA9ICZzcGlfaW5mb19jb25maWdzW2VudC0+ZHJpdmVyX2RhdGFdOworCiAJbWVtc2V0KCZzcGlfcGRhdGEsIDAsIHNpemVvZihzcGlfcGRhdGEpKTsKLQlzcGlfcGRhdGEubnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOworCXNwaV9wZGF0YS5udW1fY2hpcHNlbGVjdCA9IChjLT5udW1fY2hpcHNlbGVjdCA+IDApID8KKwkJCQkJYy0+bnVtX2NoaXBzZWxlY3QgOiBkZXYtPmRldmZuOworCXNwaV9wZGF0YS50eF9zbGF2ZV9pZCA9IGMtPnR4X3NsYXZlX2lkOworCXNwaV9wZGF0YS50eF9jaGFuX2lkID0gYy0+dHhfY2hhbl9pZDsKKwlzcGlfcGRhdGEucnhfc2xhdmVfaWQgPSBjLT5yeF9zbGF2ZV9pZDsKKwlzcGlfcGRhdGEucnhfY2hhbl9pZCA9IGMtPnJ4X2NoYW5faWQ7CisJc3BpX3BkYXRhLmVuYWJsZV9kbWEgPSBjLT5yeF9zbGF2ZV9pZCA+PSAwICYmIGMtPnR4X3NsYXZlX2lkID49IDA7CiAKIAlzc3AgPSAmc3BpX3BkYXRhLnNzcDsKIAlzc3AtPnBoeXNfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOwpAQCAtMzYsOCArODEsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJc3NwLT5pcnEgPSBkZXYtPmlycTsKLQlzc3AtPnBvcnRfaWQgPSBkZXYtPmRldmZuOwotCXNzcC0+dHlwZSA9IFBYQTI1eF9TU1A7CisJc3NwLT5wb3J0X2lkID0gKGMtPnBvcnRfaWQgPj0gMCkgPyBjLT5wb3J0X2lkIDogZGV2LT5kZXZmbjsKKwlzc3AtPnR5cGUgPSBjLT50eXBlOwogCiAJbWVtc2V0KCZwaSwgMCwgc2l6ZW9mKHBpKSk7CiAJcGkucGFyZW50ID0gJmRldi0+ZGV2OwpAQCAtNTUsMjggKzEwMCwyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjZTQxMDBfc3BpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcHhhMnh4X3NwaV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZTQxMDBfc3BpX2RldmljZXNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyZTZhKSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB4YTJ4eF9zcGlfcGNpX2RldmljZXNbXSA9IHsKKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDJlNmEpLCBQT1JUX0NFNDEwMCB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MGYwZSksIFBPUlRfQllUIH0sCiAJeyB9LAogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjZTQxMDBfc3BpX2RldmljZXMpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHB4YTJ4eF9zcGlfcGNpX2RldmljZXMpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2U0MTAwX3NwaV9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImNlNDEwMF9zcGkiLAotCS5pZF90YWJsZSAgICAgICA9IGNlNDEwMF9zcGlfZGV2aWNlcywKLQkucHJvYmUgICAgICAgICAgPSBjZTQxMDBfc3BpX3Byb2JlLAotCS5yZW1vdmUgICAgICAgICA9IGNlNDEwMF9zcGlfcmVtb3ZlLAorc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHB4YTJ4eF9zcGlfcGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSAicHhhMnh4X3NwaV9wY2kiLAorCS5pZF90YWJsZSAgICAgICA9IHB4YTJ4eF9zcGlfcGNpX2RldmljZXMsCisJLnByb2JlICAgICAgICAgID0gcHhhMnh4X3NwaV9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gcHhhMnh4X3NwaV9wY2lfcmVtb3ZlLAogfTsKIAotbW9kdWxlX3BjaV9kcml2ZXIoY2U0MTAwX3NwaV9kcml2ZXIpOworbW9kdWxlX3BjaV9kcml2ZXIocHhhMnh4X3NwaV9wY2lfZHJpdmVyKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJDRTQxMDAgUENJLVNQSSBnbHVlIGNvZGUgZm9yIFBYQSdzIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDRTQxMDAvTFBTUyBQQ0ktU1BJIGdsdWUgY29kZSBmb3IgUFhBJ3MgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfQVVUSE9SKCJTZWJhc3RpYW4gQW5kcnplaiBTaWV3aW9yIDxiaWdlYXN5QGxpbnV0cm9uaXguZGU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMgYi9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMKaW5kZXggNDExODVkMC4uYTk4ZGY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTg4NiwxMSArODg1LDggQEAKIAljaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7CiAJaWYgKCFjaGlwKSB7CiAJCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hpcF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY2hpcCkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkJImZhaWxlZCBzZXR1cDogY2FuJ3QgYWxsb2NhdGUgY2hpcCBkYXRhXG4iKTsKKwkJaWYgKCFjaGlwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KIAogCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlID09IENFNDEwMF9TU1ApIHsKIAkJCWlmIChzcGktPmNoaXBfc2VsZWN0ID4gNCkgewpAQCAtMTAzNywxMSArMTAzMyw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBsYXRmb3JtIGRhdGFcbiIpOworCWlmICghcGRhdGEpCiAJCXJldHVybiBOVUxMOwotCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCkBAIC0xMjAyLDYgKzExOTUsMTEgQEAKIAl0YXNrbGV0X2luaXQoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycywgcHVtcF90cmFuc2ZlcnMsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpZHJ2X2RhdGEpOwogCisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgNTApOworCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIFNQSSBmcmFtZXdvcmsgKi8KIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcnZfZGF0YSk7CiAJc3RhdHVzID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVyKCZwZGV2LT5kZXYsIG1hc3Rlcik7CkBAIC0xMjEwLDExICsxMjA4LDYgQEAKIAkJZ290byBvdXRfZXJyb3JfY2xvY2tfZW5hYmxlZDsKIAl9CiAKLQlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2LCA1MCk7Ci0JcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOwotCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwotCiAJcmV0dXJuIHN0YXR1czsKIAogb3V0X2Vycm9yX2Nsb2NrX2VuYWJsZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcXVwLmMgYi9kcml2ZXJzL3NwaS9zcGktcXVwLmMKaW5kZXggNzhjNjZlMy4uZmMxZGU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXF1cC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1xdXAuYwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJd3JpdGVsX3JlbGF4ZWQob3BmbGFncywgY29udHJvbGxlci0+YmFzZSArIFFVUF9PUEVSQVRJT05BTCk7CiAKIAlpZiAoIXhmZXIpIHsKLQkJZGV2X2Vycl9yYXRlbGltaXRlZChjb250cm9sbGVyLT5kZXYsICJ1bmV4cGVjdGVkIGlycSAleDA4ICV4MDggJXgwOFxuIiwKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChjb250cm9sbGVyLT5kZXYsICJ1bmV4cGVjdGVkIGlycSAlMDh4ICUwOHggJTA4eFxuIiwKIAkJCQkgICAgcXVwX2Vyciwgc3BpX2Vyciwgb3BmbGFncyk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CkBAIC0zNjYsNyArMzY2LDcgQEAKIAluX3dvcmRzID0geGZlci0+bGVuIC8gd19zaXplOwogCWNvbnRyb2xsZXItPndfc2l6ZSA9IHdfc2l6ZTsKIAotCWlmIChuX3dvcmRzIDw9IGNvbnRyb2xsZXItPmluX2ZpZm9fc3opIHsKKwlpZiAobl93b3JkcyA8PSAoY29udHJvbGxlci0+aW5fZmlmb19zeiAvIHNpemVvZih1MzIpKSkgewogCQltb2RlID0gUVVQX0lPX01fTU9ERV9GSUZPOwogCQl3cml0ZWxfcmVsYXhlZChuX3dvcmRzLCBjb250cm9sbGVyLT5iYXNlICsgUVVQX01YX1JFQURfQ05UKTsKIAkJd3JpdGVsX3JlbGF4ZWQobl93b3JkcywgY29udHJvbGxlci0+YmFzZSArIFFVUF9NWF9XUklURV9DTlQpOwpAQCAtNzQ5LDcgKzc0OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9xdXBfZHRfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9xdXBfZHRfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInFjb20sc3BpLXF1cC12Mi4xLjEiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxzcGktcXVwLXYyLjIuMSIsIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcnNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLXJzcGkuYwppbmRleCAxZmIwYWQyLi4xMDExMjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcnNwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1yc3BpLmMKQEAgLTE4Myw4ICsxODMsNiBAQAogI2RlZmluZSBTUEJGQ1JfVFhUUkdfTUFTSwkweDMwCS8qIFRyYW5zbWl0IEJ1ZmZlciBEYXRhIFRyaWdnZXJpbmcgTnVtYmVyICovCiAjZGVmaW5lIFNQQkZDUl9SWFRSR19NQVNLCTB4MDcJLyogUmVjZWl2ZSBCdWZmZXIgRGF0YSBUcmlnZ2VyaW5nIE51bWJlciAqLwogCi0jZGVmaW5lIERVTU1ZX0RBVEEJCTB4MDAKLQogc3RydWN0IHJzcGlfZGF0YSB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCXUzMiBtYXhfc3BlZWRfaHo7CkBAIC0xOTcsMTEgKzE5NSw2IEBACiAJaW50IHJ4X2lycSwgdHhfaXJxOwogCWNvbnN0IHN0cnVjdCBzcGlfb3BzICpvcHM7CiAKLQkvKiBmb3IgZG1hZW5naW5lICovCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuX3R4OwotCXN0cnVjdCBkbWFfY2hhbiAqY2hhbl9yeDsKLQotCXVuc2lnbmVkIGRtYV93aWR0aF8xNmJpdDoxOwogCXVuc2lnbmVkIGRtYV9jYWxsYmFja2VkOjE7CiAJdW5zaWduZWQgYnl0ZV9hY2Nlc3M6MTsKIH07CkBAIC0yNTMsNiArMjQ2LDggQEAKIAlpbnQgKCp0cmFuc2Zlcl9vbmUpKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCiAJCQkgICAgc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcik7CiAJdTE2IG1vZGVfYml0czsKKwl1MTYgZmxhZ3M7CisJdTE2IGZpZm9fc2l6ZTsKIH07CiAKIC8qCkBAIC0yNjYsNyArMjYxLDggQEAKIAlyc3BpX3dyaXRlOChyc3BpLCByc3BpLT5zcHBjciwgUlNQSV9TUFBDUik7CiAKIAkvKiBTZXRzIHRyYW5zZmVyIGJpdCByYXRlICovCi0Jc3BiciA9IGNsa19nZXRfcmF0ZShyc3BpLT5jbGspIC8gKDIgKiByc3BpLT5tYXhfc3BlZWRfaHopIC0gMTsKKwlzcGJyID0gRElWX1JPVU5EX1VQKGNsa19nZXRfcmF0ZShyc3BpLT5jbGspLAorCQkJICAgIDIgKiByc3BpLT5tYXhfc3BlZWRfaHopIC0gMTsKIAlyc3BpX3dyaXRlOChyc3BpLCBjbGFtcChzcGJyLCAwLCAyNTUpLCBSU1BJX1NQQlIpOwogCiAJLyogRGlzYWJsZSBkdW1teSB0cmFuc21pc3Npb24sIHNldCAxNi1iaXQgd29yZCBhY2Nlc3MsIDEgZnJhbWUgKi8KQEAgLTMwMiw3ICsyOTgsOCBAQAogCXJzcGlfd3JpdGU4KHJzcGksIHJzcGktPnNwcGNyLCBSU1BJX1NQUENSKTsKIAogCS8qIFNldHMgdHJhbnNmZXIgYml0IHJhdGUgKi8KLQlzcGJyID0gY2xrX2dldF9yYXRlKHJzcGktPmNsaykgLyAoMiAqIHJzcGktPm1heF9zcGVlZF9oeikgLSAxOworCXNwYnIgPSBESVZfUk9VTkRfVVAoY2xrX2dldF9yYXRlKHJzcGktPmNsayksCisJCQkgICAgMiAqIHJzcGktPm1heF9zcGVlZF9oeikgLSAxOwogCXJzcGlfd3JpdGU4KHJzcGksIGNsYW1wKHNwYnIsIDAsIDI1NSksIFJTUElfU1BCUik7CiAKIAkvKiBEaXNhYmxlIGR1bW15IHRyYW5zbWlzc2lvbiwgc2V0IGJ5dGUgYWNjZXNzICovCkBAIC0zMzUsNyArMzMyLDcgQEAKIAlyc3BpX3dyaXRlOChyc3BpLCByc3BpLT5zcHBjciwgUlNQSV9TUFBDUik7CiAKIAkvKiBTZXRzIHRyYW5zZmVyIGJpdCByYXRlICovCi0Jc3BiciA9IGNsa19nZXRfcmF0ZShyc3BpLT5jbGspIC8gKDIgKiByc3BpLT5tYXhfc3BlZWRfaHopOworCXNwYnIgPSBESVZfUk9VTkRfVVAoY2xrX2dldF9yYXRlKHJzcGktPmNsayksIDIgKiByc3BpLT5tYXhfc3BlZWRfaHopOwogCXJzcGlfd3JpdGU4KHJzcGksIGNsYW1wKHNwYnIsIDAsIDI1NSksIFJTUElfU1BCUik7CiAKIAkvKiBEaXNhYmxlIGR1bW15IHRyYW5zbWlzc2lvbiwgc2V0IGJ5dGUgYWNjZXNzICovCkBAIC00MDMsMTEgKzQwMCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCByc3BpX3dhaXRfZm9yX3R4X2VtcHR5KHN0cnVjdCByc3BpX2RhdGEgKnJzcGkpCit7CisJcmV0dXJuIHJzcGlfd2FpdF9mb3JfaW50ZXJydXB0KHJzcGksIFNQU1JfU1BURUYsIFNQQ1JfU1BUSUUpOworfQorCitzdGF0aWMgaW5saW5lIGludCByc3BpX3dhaXRfZm9yX3J4X2Z1bGwoc3RydWN0IHJzcGlfZGF0YSAqcnNwaSkKK3sKKwlyZXR1cm4gcnNwaV93YWl0X2Zvcl9pbnRlcnJ1cHQocnNwaSwgU1BTUl9TUFJGLCBTUENSX1NQUklFKTsKK30KKwogc3RhdGljIGludCByc3BpX2RhdGFfb3V0KHN0cnVjdCByc3BpX2RhdGEgKnJzcGksIHU4IGRhdGEpCiB7Ci0JaWYgKHJzcGlfd2FpdF9mb3JfaW50ZXJydXB0KHJzcGksIFNQU1JfU1BURUYsIFNQQ1JfU1BUSUUpIDwgMCkgeworCWludCBlcnJvciA9IHJzcGlfd2FpdF9mb3JfdHhfZW1wdHkocnNwaSk7CisJaWYgKGVycm9yIDwgMCkgewogCQlkZXZfZXJyKCZyc3BpLT5tYXN0ZXItPmRldiwgInRyYW5zbWl0IHRpbWVvdXRcbiIpOwotCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAlyc3BpX3dyaXRlX2RhdGEocnNwaSwgZGF0YSk7CiAJcmV0dXJuIDA7CkBAIC00MTUsMjUgKzQyMywzNiBAQAogCiBzdGF0aWMgaW50IHJzcGlfZGF0YV9pbihzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpKQogeworCWludCBlcnJvcjsKIAl1OCBkYXRhOwogCi0JaWYgKHJzcGlfd2FpdF9mb3JfaW50ZXJydXB0KHJzcGksIFNQU1JfU1BSRiwgU1BDUl9TUFJJRSkgPCAwKSB7CisJZXJyb3IgPSByc3BpX3dhaXRfZm9yX3J4X2Z1bGwocnNwaSk7CisJaWYgKGVycm9yIDwgMCkgewogCQlkZXZfZXJyKCZyc3BpLT5tYXN0ZXItPmRldiwgInJlY2VpdmUgdGltZW91dFxuIik7Ci0JCXJldHVybiAtRVRJTUVET1VUOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCWRhdGEgPSByc3BpX3JlYWRfZGF0YShyc3BpKTsKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGludCByc3BpX2RhdGFfb3V0X2luKHN0cnVjdCByc3BpX2RhdGEgKnJzcGksIHU4IGRhdGEpCitzdGF0aWMgaW50IHJzcGlfcGlvX3RyYW5zZmVyKHN0cnVjdCByc3BpX2RhdGEgKnJzcGksIGNvbnN0IHU4ICp0eCwgdTggKnJ4LAorCQkJICAgICB1bnNpZ25lZCBpbnQgbikKIHsKLQlpbnQgcmV0OworCXdoaWxlIChuLS0gPiAwKSB7CisJCWlmICh0eCkgeworCQkJaW50IHJldCA9IHJzcGlfZGF0YV9vdXQocnNwaSwgKnR4KyspOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAocngpIHsKKwkJCWludCByZXQgPSByc3BpX2RhdGFfaW4ocnNwaSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJKnJ4KysgPSByZXQ7CisJCX0KKwl9CiAKLQlyZXQgPSByc3BpX2RhdGFfb3V0KHJzcGksIGRhdGEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHJzcGlfZGF0YV9pbihyc3BpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnNwaV9kbWFfY29tcGxldGUodm9pZCAqYXJnKQpAQCAtNDQ0LDk3ICs0NjMsNjcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJzcGktPndhaXQpOwogfQogCi1zdGF0aWMgaW50IHJzcGlfZG1hX21hcF9zZyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBjb25zdCB2b2lkICpidWYsCi0JCQkgICB1bnNpZ25lZCBsZW4sIHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJCSAgIGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXIpCitzdGF0aWMgaW50IHJzcGlfZG1hX3RyYW5zZmVyKHN0cnVjdCByc3BpX2RhdGEgKnJzcGksIHN0cnVjdCBzZ190YWJsZSAqdHgsCisJCQkgICAgIHN0cnVjdCBzZ190YWJsZSAqcngpCiB7Ci0Jc2dfaW5pdF90YWJsZShzZywgMSk7Ci0Jc2dfc2V0X2J1ZihzZywgYnVmLCBsZW4pOwotCXNnX2RtYV9sZW4oc2cpID0gbGVuOwotCXJldHVybiBkbWFfbWFwX3NnKGNoYW4tPmRldmljZS0+ZGV2LCBzZywgMSwgZGlyKTsKLX0KKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2NfdHggPSBOVUxMLCAqZGVzY19yeCA9IE5VTEw7CisJdTggaXJxX21hc2sgPSAwOworCXVuc2lnbmVkIGludCBvdGhlcl9pcnEgPSAwOworCWRtYV9jb29raWVfdCBjb29raWU7CisJaW50IHJldDsKIAotc3RhdGljIHZvaWQgcnNwaV9kbWFfdW5tYXBfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc3RydWN0IGRtYV9jaGFuICpjaGFuLAotCQkJICAgICAgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcikKLXsKLQlkbWFfdW5tYXBfc2coY2hhbi0+ZGV2aWNlLT5kZXYsIHNnLCAxLCBkaXIpOwotfQorCWlmICh0eCkgeworCQlkZXNjX3R4ID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2cocnNwaS0+bWFzdGVyLT5kbWFfdHgsCisJCQkJCXR4LT5zZ2wsIHR4LT5uZW50cywgRE1BX1RPX0RFVklDRSwKKwkJCQkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwkJaWYgKCFkZXNjX3R4KQorCQkJcmV0dXJuIC1FSU87CiAKLXN0YXRpYyB2b2lkIHJzcGlfbWVtb3J5X3RvXzhiaXQodm9pZCAqYnVmLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsZW4pCi17Ci0JdTE2ICpkc3QgPSBidWY7Ci0JY29uc3QgdTggKnNyYyA9IGRhdGE7Ci0KLQl3aGlsZSAobGVuKSB7Ci0JCSpkc3QrKyA9ICh1MTYpKCpzcmMrKyk7Ci0JCWxlbi0tOworCQlpcnFfbWFzayB8PSBTUENSX1NQVElFOwogCX0KLX0KKwlpZiAocngpIHsKKwkJZGVzY19yeCA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHJzcGktPm1hc3Rlci0+ZG1hX3J4LAorCQkJCQlyeC0+c2dsLCByeC0+bmVudHMsIERNQV9GUk9NX0RFVklDRSwKKwkJCQkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwkJaWYgKCFkZXNjX3J4KQorCQkJcmV0dXJuIC1FSU87CiAKLXN0YXRpYyB2b2lkIHJzcGlfbWVtb3J5X2Zyb21fOGJpdCh2b2lkICpidWYsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxlbikKLXsKLQl1OCAqZHN0ID0gYnVmOwotCWNvbnN0IHUxNiAqc3JjID0gZGF0YTsKLQotCXdoaWxlIChsZW4pIHsKLQkJKmRzdCsrID0gKHU4KSpzcmMrKzsKLQkJbGVuLS07Ci0JfQotfQotCi1zdGF0aWMgaW50IHJzcGlfc2VuZF9kbWEoc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKLXsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7Ci0JY29uc3Qgdm9pZCAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChyc3BpLT5kbWFfd2lkdGhfMTZiaXQpIHsKLQkJdm9pZCAqdG1wOwotCQkvKgotCQkgKiBJZiBETUFDIGJ1cyB3aWR0aCBpcyAxNi1iaXQsIHRoZSBkcml2ZXIgYWxsb2NhdGVzIGEgZHVtbXkKLQkJICogYnVmZmVyLiBBbmQsIHRoZSBkcml2ZXIgY29udmVydHMgb3JpZ2luYWwgZGF0YSBpbnRvIHRoZQotCQkgKiBETUFDIGRhdGEgYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0JCSAqICBvcmlnaW5hbCBkYXRhOiAxc3QgYnl0ZSwgMm5kIGJ5dGUgLi4uCi0JCSAqICBETUFDIGRhdGE6ICAgICAxc3QgYnl0ZSwgZHVtbXksIDJuZCBieXRlLCBkdW1teSAuLi4KLQkJICovCi0JCWxlbiA9IHQtPmxlbiAqIDI7Ci0JCXRtcCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0bXApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJcnNwaV9tZW1vcnlfdG9fOGJpdCh0bXAsIHQtPnR4X2J1ZiwgdC0+bGVuKTsKLQkJYnVmID0gdG1wOwotCX0gZWxzZSB7Ci0JCWxlbiA9IHQtPmxlbjsKLQkJYnVmID0gdC0+dHhfYnVmOwotCX0KLQotCWlmICghcnNwaV9kbWFfbWFwX3NnKCZzZywgYnVmLCBsZW4sIHJzcGktPmNoYW5fdHgsIERNQV9UT19ERVZJQ0UpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZW5kX25vbWFwOwotCX0KLQlkZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2cocnNwaS0+Y2hhbl90eCwgJnNnLCAxLCBETUFfVE9fREVWSUNFLAotCQkJCSAgICAgICBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOwotCWlmICghZGVzYykgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVuZDsKKwkJaXJxX21hc2sgfD0gU1BDUl9TUFJJRTsKIAl9CiAKIAkvKgotCSAqIERNQUMgbmVlZHMgU1BUSUUsIGJ1dCBpZiBTUFRJRSBpcyBzZXQsIHRoaXMgSVJRIHJvdXRpbmUgd2lsbCBiZQorCSAqIERNQUMgbmVlZHMgU1B4SUUsIGJ1dCBpZiBTUHhJRSBpcyBzZXQsIHRoZSBJUlEgcm91dGluZSB3aWxsIGJlCiAJICogY2FsbGVkLiBTbywgdGhpcyBkcml2ZXIgZGlzYWJsZXMgdGhlIElSUSB3aGlsZSBETUEgdHJhbnNmZXIuCiAJICovCi0JZGlzYWJsZV9pcnEocnNwaS0+dHhfaXJxKTsKKwlpZiAodHgpCisJCWRpc2FibGVfaXJxKG90aGVyX2lycSA9IHJzcGktPnR4X2lycSk7CisJaWYgKHJ4ICYmIHJzcGktPnJ4X2lycSAhPSBvdGhlcl9pcnEpCisJCWRpc2FibGVfaXJxKHJzcGktPnJ4X2lycSk7CiAKLQlyc3BpX3dyaXRlOChyc3BpLCByc3BpX3JlYWQ4KHJzcGksIFJTUElfU1BDUikgfCBTUENSX1RYTUQsIFJTUElfU1BDUik7Ci0JcnNwaV9lbmFibGVfaXJxKHJzcGksIFNQQ1JfU1BUSUUpOworCXJzcGlfZW5hYmxlX2lycShyc3BpLCBpcnFfbWFzayk7CiAJcnNwaS0+ZG1hX2NhbGxiYWNrZWQgPSAwOwogCi0JZGVzYy0+Y2FsbGJhY2sgPSByc3BpX2RtYV9jb21wbGV0ZTsKLQlkZXNjLT5jYWxsYmFja19wYXJhbSA9IHJzcGk7Ci0JZG1hZW5naW5lX3N1Ym1pdChkZXNjKTsKLQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhyc3BpLT5jaGFuX3R4KTsKKwlpZiAocngpIHsKKwkJZGVzY19yeC0+Y2FsbGJhY2sgPSByc3BpX2RtYV9jb21wbGV0ZTsKKwkJZGVzY19yeC0+Y2FsbGJhY2tfcGFyYW0gPSByc3BpOworCQljb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRlc2NfcngpOworCQlpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKQorCQkJcmV0dXJuIGNvb2tpZTsKKwkJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcocnNwaS0+bWFzdGVyLT5kbWFfcngpOworCX0KKwlpZiAodHgpIHsKKwkJaWYgKHJ4KSB7CisJCQkvKiBObyBjYWxsYmFjayAqLworCQkJZGVzY190eC0+Y2FsbGJhY2sgPSBOVUxMOworCQl9IGVsc2UgeworCQkJZGVzY190eC0+Y2FsbGJhY2sgPSByc3BpX2RtYV9jb21wbGV0ZTsKKwkJCWRlc2NfdHgtPmNhbGxiYWNrX3BhcmFtID0gcnNwaTsKKwkJfQorCQljb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRlc2NfdHgpOworCQlpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKQorCQkJcmV0dXJuIGNvb2tpZTsKKwkJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcocnNwaS0+bWFzdGVyLT5kbWFfdHgpOworCX0KIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHJzcGktPndhaXQsCiAJCQkJCSAgICAgICByc3BpLT5kbWFfY2FsbGJhY2tlZCwgSFopOwpAQCAtNTQyLDE1ICs1MzEsMTMgQEAKIAkJcmV0ID0gMDsKIAllbHNlIGlmICghcmV0KQogCQlyZXQgPSAtRVRJTUVET1VUOwotCXJzcGlfZGlzYWJsZV9pcnEocnNwaSwgU1BDUl9TUFRJRSk7CiAKLQllbmFibGVfaXJxKHJzcGktPnR4X2lycSk7CisJcnNwaV9kaXNhYmxlX2lycShyc3BpLCBpcnFfbWFzayk7CiAKLWVuZDoKLQlyc3BpX2RtYV91bm1hcF9zZygmc2csIHJzcGktPmNoYW5fdHgsIERNQV9UT19ERVZJQ0UpOwotZW5kX25vbWFwOgotCWlmIChyc3BpLT5kbWFfd2lkdGhfMTZiaXQpCi0JCWtmcmVlKGJ1Zik7CisJaWYgKHR4KQorCQllbmFibGVfaXJxKHJzcGktPnR4X2lycSk7CisJaWYgKHJ4ICYmIHJzcGktPnJ4X2lycSAhPSBvdGhlcl9pcnEpCisJCWVuYWJsZV9pcnEocnNwaS0+cnhfaXJxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01ODUsMTU3ICs1NzIsMzcgQEAKIAlyc3BpX3dyaXRlOChyc3BpLCAwLCBRU1BJX1NQQkZDUik7CiB9CiAKLXN0YXRpYyBpbnQgcnNwaV9yZWNlaXZlX2RtYShzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQorc3RhdGljIGJvb2wgX19yc3BpX2Nhbl9kbWEoY29uc3Qgc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnLCBzZ19kdW1teTsKLQl2b2lkICpkdW1teSA9IE5VTEwsICpyeF9idWYgPSBOVUxMOwotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYywgKmRlc2NfZHVtbXk7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChyc3BpLT5kbWFfd2lkdGhfMTZiaXQpIHsKLQkJLyoKLQkJICogSWYgRE1BQyBidXMgd2lkdGggaXMgMTYtYml0LCB0aGUgZHJpdmVyIGFsbG9jYXRlcyBhIGR1bW15Ci0JCSAqIGJ1ZmZlci4gQW5kLCBmaW5hbGx5IHRoZSBkcml2ZXIgY29udmVydHMgdGhlIERNQUMgZGF0YSBpbnRvCi0JCSAqIGFjdHVhbCBkYXRhIGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotCQkgKiAgRE1BQyBkYXRhOiAgIDFzdCBieXRlLCBkdW1teSwgMm5kIGJ5dGUsIGR1bW15IC4uLgotCQkgKiAgYWN0dWFsIGRhdGE6IDFzdCBieXRlLCAybmQgYnl0ZSAuLi4KLQkJICovCi0JCWxlbiA9IHQtPmxlbiAqIDI7Ci0JCXJ4X2J1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyeF9idWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkgfSBlbHNlIHsKLQkJbGVuID0gdC0+bGVuOwotCQlyeF9idWYgPSB0LT5yeF9idWY7Ci0JfQotCi0JLyogcHJlcGFyZSBkdW1teSB0cmFuc2ZlciB0byBnZW5lcmF0ZSBTUEkgY2xvY2tzICovCi0JZHVtbXkgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkdW1teSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVuZF9ub21hcDsKLQl9Ci0JaWYgKCFyc3BpX2RtYV9tYXBfc2coJnNnX2R1bW15LCBkdW1teSwgbGVuLCByc3BpLT5jaGFuX3R4LAotCQkJICAgICBETUFfVE9fREVWSUNFKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVuZF9ub21hcDsKLQl9Ci0JZGVzY19kdW1teSA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHJzcGktPmNoYW5fdHgsICZzZ19kdW1teSwgMSwKLQkJCURNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7Ci0JaWYgKCFkZXNjX2R1bW15KSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZW5kX2R1bW15X21hcHBlZDsKLQl9Ci0KLQkvKiBwcmVwYXJlIHJlY2VpdmUgdHJhbnNmZXIgKi8KLQlpZiAoIXJzcGlfZG1hX21hcF9zZygmc2csIHJ4X2J1ZiwgbGVuLCByc3BpLT5jaGFuX3J4LAotCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZW5kX2R1bW15X21hcHBlZDsKLQotCX0KLQlkZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2cocnNwaS0+Y2hhbl9yeCwgJnNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsCi0JCQkJICAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7Ci0JaWYgKCFkZXNjKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJzcGlfcmVjZWl2ZV9pbml0KHJzcGkpOwotCi0JLyoKLQkgKiBETUFDIG5lZWRzIFNQVElFLCBidXQgaWYgU1BUSUUgaXMgc2V0LCB0aGlzIElSUSByb3V0aW5lIHdpbGwgYmUKLQkgKiBjYWxsZWQuIFNvLCB0aGlzIGRyaXZlciBkaXNhYmxlcyB0aGUgSVJRIHdoaWxlIERNQSB0cmFuc2Zlci4KLQkgKi8KLQlkaXNhYmxlX2lycShyc3BpLT50eF9pcnEpOwotCWlmIChyc3BpLT5yeF9pcnEgIT0gcnNwaS0+dHhfaXJxKQotCQlkaXNhYmxlX2lycShyc3BpLT5yeF9pcnEpOwotCi0JcnNwaV93cml0ZTgocnNwaSwgcnNwaV9yZWFkOChyc3BpLCBSU1BJX1NQQ1IpICYgflNQQ1JfVFhNRCwgUlNQSV9TUENSKTsKLQlyc3BpX2VuYWJsZV9pcnEocnNwaSwgU1BDUl9TUFRJRSB8IFNQQ1JfU1BSSUUpOwotCXJzcGktPmRtYV9jYWxsYmFja2VkID0gMDsKLQotCWRlc2MtPmNhbGxiYWNrID0gcnNwaV9kbWFfY29tcGxldGU7Ci0JZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSByc3BpOwotCWRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7Ci0JZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcocnNwaS0+Y2hhbl9yeCk7Ci0KLQlkZXNjX2R1bW15LT5jYWxsYmFjayA9IE5VTEw7CS8qIE5vIGNhbGxiYWNrICovCi0JZG1hZW5naW5lX3N1Ym1pdChkZXNjX2R1bW15KTsKLQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhyc3BpLT5jaGFuX3R4KTsKLQotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHJzcGktPndhaXQsCi0JCQkJCSAgICAgICByc3BpLT5kbWFfY2FsbGJhY2tlZCwgSFopOwotCWlmIChyZXQgPiAwICYmIHJzcGktPmRtYV9jYWxsYmFja2VkKQotCQlyZXQgPSAwOwotCWVsc2UgaWYgKCFyZXQpCi0JCXJldCA9IC1FVElNRURPVVQ7Ci0JcnNwaV9kaXNhYmxlX2lycShyc3BpLCBTUENSX1NQVElFIHwgU1BDUl9TUFJJRSk7Ci0KLQllbmFibGVfaXJxKHJzcGktPnR4X2lycSk7Ci0JaWYgKHJzcGktPnJ4X2lycSAhPSByc3BpLT50eF9pcnEpCi0JCWVuYWJsZV9pcnEocnNwaS0+cnhfaXJxKTsKLQotZW5kOgotCXJzcGlfZG1hX3VubWFwX3NnKCZzZywgcnNwaS0+Y2hhbl9yeCwgRE1BX0ZST01fREVWSUNFKTsKLWVuZF9kdW1teV9tYXBwZWQ6Ci0JcnNwaV9kbWFfdW5tYXBfc2coJnNnX2R1bW15LCByc3BpLT5jaGFuX3R4LCBETUFfVE9fREVWSUNFKTsKLWVuZF9ub21hcDoKLQlpZiAocnNwaS0+ZG1hX3dpZHRoXzE2Yml0KSB7Ci0JCWlmICghcmV0KQotCQkJcnNwaV9tZW1vcnlfZnJvbV84Yml0KHQtPnJ4X2J1ZiwgcnhfYnVmLCB0LT5sZW4pOwotCQlrZnJlZShyeF9idWYpOwotCX0KLQlrZnJlZShkdW1teSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiB4ZmVyLT5sZW4gPiByc3BpLT5vcHMtPmZpZm9fc2l6ZTsKIH0KIAotc3RhdGljIGludCByc3BpX2lzX2RtYShjb25zdCBzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQorc3RhdGljIGJvb2wgcnNwaV9jYW5fZG1hKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkgc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcikKIHsKLQlpZiAodC0+dHhfYnVmICYmIHJzcGktPmNoYW5fdHgpCi0JCXJldHVybiAxOwotCS8qIElmIHRoZSBtb2R1bGUgcmVjZWl2ZXMgZGF0YSBieSBETUFDLCBpdCBhbHNvIG5lZWRzIFRYIERNQUMgKi8KLQlpZiAodC0+cnhfYnVmICYmIHJzcGktPmNoYW5fdHggJiYgcnNwaS0+Y2hhbl9yeCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHJzcGlfZGF0YSAqcnNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKIAotCXJldHVybiAwOworCXJldHVybiBfX3JzcGlfY2FuX2RtYShyc3BpLCB4ZmVyKTsKIH0KIAotc3RhdGljIGludCByc3BpX3RyYW5zZmVyX291dF9pbihzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpLAorc3RhdGljIGludCByc3BpX2NvbW1vbl90cmFuc2ZlcihzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpLAogCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpCiB7Ci0JaW50IHJlbWFpbiA9IHhmZXItPmxlbiwgcmV0OwotCWNvbnN0IHU4ICp0eF9idWYgPSB4ZmVyLT50eF9idWY7Ci0JdTggKnJ4X2J1ZiA9IHhmZXItPnJ4X2J1ZjsKLQl1OCBzcGNyLCBkYXRhOworCWludCByZXQ7CiAKLQlyc3BpX3JlY2VpdmVfaW5pdChyc3BpKTsKLQotCXNwY3IgPSByc3BpX3JlYWQ4KHJzcGksIFJTUElfU1BDUik7Ci0JaWYgKHJ4X2J1ZikKLQkJc3BjciAmPSB+U1BDUl9UWE1EOwotCWVsc2UKLQkJc3BjciB8PSBTUENSX1RYTUQ7Ci0JcnNwaV93cml0ZTgocnNwaSwgc3BjciwgUlNQSV9TUENSKTsKLQotCXdoaWxlIChyZW1haW4gPiAwKSB7Ci0JCWRhdGEgPSB0eF9idWYgPyAqdHhfYnVmKysgOiBEVU1NWV9EQVRBOwotCQlyZXQgPSByc3BpX2RhdGFfb3V0KHJzcGksIGRhdGEpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCWlmIChyeF9idWYpIHsKLQkJCXJldCA9IHJzcGlfZGF0YV9pbihyc3BpKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0JCQkqcnhfYnVmKysgPSByZXQ7Ci0JCX0KLQkJcmVtYWluLS07CisJaWYgKHJzcGktPm1hc3Rlci0+Y2FuX2RtYSAmJiBfX3JzcGlfY2FuX2RtYShyc3BpLCB4ZmVyKSkgeworCQkvKiByeF9idWYgY2FuIGJlIE5VTEwgb24gUlNQSSBvbiBTSCBpbiBUWC1vbmx5IE1vZGUgKi8KKwkJcmV0dXJuIHJzcGlfZG1hX3RyYW5zZmVyKHJzcGksICZ4ZmVyLT50eF9zZywKKwkJCQkJIHhmZXItPnJ4X2J1ZiA/ICZ4ZmVyLT5yeF9zZyA6IE5VTEwpOwogCX0KIAorCXJldCA9IHJzcGlfcGlvX3RyYW5zZmVyKHJzcGksIHhmZXItPnR4X2J1ZiwgeGZlci0+cnhfYnVmLCB4ZmVyLT5sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJLyogV2FpdCBmb3IgdGhlIGxhc3QgdHJhbnNtaXNzaW9uICovCi0JcnNwaV93YWl0X2Zvcl9pbnRlcnJ1cHQocnNwaSwgU1BTUl9TUFRFRiwgU1BDUl9TUFRJRSk7CisJcnNwaV93YWl0X2Zvcl90eF9lbXB0eShyc3BpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzQ0LDQ2ICs2MTEsMTggQEAKIAkJCSAgICAgc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcikKIHsKIAlzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCWludCByZXQ7CisJdTggc3BjcjsKIAotCWlmICghcnNwaV9pc19kbWEocnNwaSwgeGZlcikpCi0JCXJldHVybiByc3BpX3RyYW5zZmVyX291dF9pbihyc3BpLCB4ZmVyKTsKLQotCWlmICh4ZmVyLT50eF9idWYpIHsKLQkJcmV0ID0gcnNwaV9zZW5kX2RtYShyc3BpLCB4ZmVyKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCXNwY3IgPSByc3BpX3JlYWQ4KHJzcGksIFJTUElfU1BDUik7CisJaWYgKHhmZXItPnJ4X2J1ZikgeworCQlyc3BpX3JlY2VpdmVfaW5pdChyc3BpKTsKKwkJc3BjciAmPSB+U1BDUl9UWE1EOworCX0gZWxzZSB7CisJCXNwY3IgfD0gU1BDUl9UWE1EOwogCX0KLQlpZiAoeGZlci0+cnhfYnVmKQotCQlyZXR1cm4gcnNwaV9yZWNlaXZlX2RtYShyc3BpLCB4ZmVyKTsKKwlyc3BpX3dyaXRlOChyc3BpLCBzcGNyLCBSU1BJX1NQQ1IpOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNwaV9yel90cmFuc2Zlcl9vdXRfaW4oc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwKLQkJCQkgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyKQotewotCWludCByZW1haW4gPSB4ZmVyLT5sZW4sIHJldDsKLQljb25zdCB1OCAqdHhfYnVmID0geGZlci0+dHhfYnVmOwotCXU4ICpyeF9idWYgPSB4ZmVyLT5yeF9idWY7Ci0JdTggZGF0YTsKLQotCXJzcGlfcnpfcmVjZWl2ZV9pbml0KHJzcGkpOwotCi0Jd2hpbGUgKHJlbWFpbiA+IDApIHsKLQkJZGF0YSA9IHR4X2J1ZiA/ICp0eF9idWYrKyA6IERVTU1ZX0RBVEE7Ci0JCXJldCA9IHJzcGlfZGF0YV9vdXRfaW4ocnNwaSwgZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJaWYgKHJ4X2J1ZikKLQkJCSpyeF9idWYrKyA9IHJldDsKLQkJcmVtYWluLS07Ci0JfQotCi0JLyogV2FpdCBmb3IgdGhlIGxhc3QgdHJhbnNtaXNzaW9uICovCi0JcnNwaV93YWl0X2Zvcl9pbnRlcnJ1cHQocnNwaSwgU1BTUl9TUFRFRiwgU1BDUl9TUFRJRSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnNwaV9jb21tb25fdHJhbnNmZXIocnNwaSwgeGZlcik7CiB9CiAKIHN0YXRpYyBpbnQgcnNwaV9yel90cmFuc2Zlcl9vbmUoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKQEAgLTc5MSw2OCArNjMwLDQ0IEBACiAJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcikKIHsKIAlzdHJ1Y3QgcnNwaV9kYXRhICpyc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWludCByZXQ7CiAKLQlyZXR1cm4gcnNwaV9yel90cmFuc2Zlcl9vdXRfaW4ocnNwaSwgeGZlcik7CisJcnNwaV9yel9yZWNlaXZlX2luaXQocnNwaSk7CisKKwlyZXR1cm4gcnNwaV9jb21tb25fdHJhbnNmZXIocnNwaSwgeGZlcik7CiB9CiAKIHN0YXRpYyBpbnQgcXNwaV90cmFuc2Zlcl9vdXRfaW4oc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwKIAkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyKQogewotCWludCByZW1haW4gPSB4ZmVyLT5sZW4sIHJldDsKLQljb25zdCB1OCAqdHhfYnVmID0geGZlci0+dHhfYnVmOwotCXU4ICpyeF9idWYgPSB4ZmVyLT5yeF9idWY7Ci0JdTggZGF0YTsKLQogCXFzcGlfcmVjZWl2ZV9pbml0KHJzcGkpOwogCi0Jd2hpbGUgKHJlbWFpbiA+IDApIHsKLQkJZGF0YSA9IHR4X2J1ZiA/ICp0eF9idWYrKyA6IERVTU1ZX0RBVEE7Ci0JCXJldCA9IHJzcGlfZGF0YV9vdXRfaW4ocnNwaSwgZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJaWYgKHJ4X2J1ZikKLQkJCSpyeF9idWYrKyA9IHJldDsKLQkJcmVtYWluLS07Ci0JfQotCi0JLyogV2FpdCBmb3IgdGhlIGxhc3QgdHJhbnNtaXNzaW9uICovCi0JcnNwaV93YWl0X2Zvcl9pbnRlcnJ1cHQocnNwaSwgU1BTUl9TUFRFRiwgU1BDUl9TUFRJRSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnNwaV9jb21tb25fdHJhbnNmZXIocnNwaSwgeGZlcik7CiB9CiAKIHN0YXRpYyBpbnQgcXNwaV90cmFuc2Zlcl9vdXQoc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcikKIHsKLQljb25zdCB1OCAqYnVmID0geGZlci0+dHhfYnVmOwotCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgeGZlci0+bGVuOyBpKyspIHsKLQkJcmV0ID0gcnNwaV9kYXRhX291dChyc3BpLCAqYnVmKyspOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQorCWlmIChyc3BpLT5tYXN0ZXItPmNhbl9kbWEgJiYgX19yc3BpX2Nhbl9kbWEocnNwaSwgeGZlcikpCisJCXJldHVybiByc3BpX2RtYV90cmFuc2Zlcihyc3BpLCAmeGZlci0+dHhfc2csIE5VTEwpOworCisJcmV0ID0gcnNwaV9waW9fdHJhbnNmZXIocnNwaSwgeGZlci0+dHhfYnVmLCBOVUxMLCB4ZmVyLT5sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJLyogV2FpdCBmb3IgdGhlIGxhc3QgdHJhbnNtaXNzaW9uICovCi0JcnNwaV93YWl0X2Zvcl9pbnRlcnJ1cHQocnNwaSwgU1BTUl9TUFRFRiwgU1BDUl9TUFRJRSk7CisJcnNwaV93YWl0X2Zvcl90eF9lbXB0eShyc3BpKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHFzcGlfdHJhbnNmZXJfaW4oc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcikKIHsKLQl1OCAqYnVmID0geGZlci0+cnhfYnVmOwotCXVuc2lnbmVkIGludCBpOwotCWludCByZXQ7CisJaWYgKHJzcGktPm1hc3Rlci0+Y2FuX2RtYSAmJiBfX3JzcGlfY2FuX2RtYShyc3BpLCB4ZmVyKSkKKwkJcmV0dXJuIHJzcGlfZG1hX3RyYW5zZmVyKHJzcGksIE5VTEwsICZ4ZmVyLT5yeF9zZyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgeGZlci0+bGVuOyBpKyspIHsKLQkJcmV0ID0gcnNwaV9kYXRhX2luKHJzcGkpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCSpidWYrKyA9IHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnNwaV9waW9fdHJhbnNmZXIocnNwaSwgTlVMTCwgeGZlci0+cnhfYnVmLCB4ZmVyLT5sZW4pOwogfQogCiBzdGF0aWMgaW50IHFzcGlfdHJhbnNmZXJfb25lKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCkBAIC04NjIsMTAgKzY3NywxMCBAQAogCiAJaWYgKHNwaS0+bW9kZSAmIFNQSV9MT09QKSB7CiAJCXJldHVybiBxc3BpX3RyYW5zZmVyX291dF9pbihyc3BpLCB4ZmVyKTsKLQl9IGVsc2UgaWYgKHhmZXItPnR4X2J1ZiAmJiB4ZmVyLT50eF9uYml0cyA+IFNQSV9OQklUU19TSU5HTEUpIHsKKwl9IGVsc2UgaWYgKHhmZXItPnR4X25iaXRzID4gU1BJX05CSVRTX1NJTkdMRSkgewogCQkvKiBRdWFkIG9yIER1YWwgU1BJIFdyaXRlICovCiAJCXJldHVybiBxc3BpX3RyYW5zZmVyX291dChyc3BpLCB4ZmVyKTsKLQl9IGVsc2UgaWYgKHhmZXItPnJ4X2J1ZiAmJiB4ZmVyLT5yeF9uYml0cyA+IFNQSV9OQklUU19TSU5HTEUpIHsKKwl9IGVsc2UgaWYgKHhmZXItPnJ4X25iaXRzID4gU1BJX05CSVRTX1NJTkdMRSkgewogCQkvKiBRdWFkIG9yIER1YWwgU1BJIFJlYWQgKi8KIAkJcmV0dXJuIHFzcGlfdHJhbnNmZXJfaW4ocnNwaSwgeGZlcik7CiAJfSBlbHNlIHsKQEAgLTEwNDYsNjUgKzg2MSw3OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJzcGlfcmVxdWVzdF9kbWEoc3RydWN0IHJzcGlfZGF0YSAqcnNwaSwKLQkJCQkgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqcnNwaV9yZXF1ZXN0X2RtYV9jaGFuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpciwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IGlkLAorCQkJCQkgICAgICBkbWFfYWRkcl90IHBvcnRfYWRkcikKIHsKLQljb25zdCBzdHJ1Y3QgcnNwaV9wbGF0X2RhdGEgKnJzcGlfcGQgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlkbWFfY2FwX21hc2tfdCBtYXNrOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjZmc7CiAJaW50IHJldDsKIAotCWlmICghcmVzIHx8ICFyc3BpX3BkKQorCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgc2hkbWFfY2hhbl9maWx0ZXIsCisJCQkJICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpZCk7CisJaWYgKCFjaGFuKSB7CisJCWRldl93YXJuKGRldiwgImRtYV9yZXF1ZXN0X2NoYW5uZWwgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KCZjZmcsIDAsIHNpemVvZihjZmcpKTsKKwljZmcuc2xhdmVfaWQgPSBpZDsKKwljZmcuZGlyZWN0aW9uID0gZGlyOworCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpCisJCWNmZy5kc3RfYWRkciA9IHBvcnRfYWRkcjsKKwllbHNlCisJCWNmZy5zcmNfYWRkciA9IHBvcnRfYWRkcjsKKworCXJldCA9IGRtYWVuZ2luZV9zbGF2ZV9jb25maWcoY2hhbiwgJmNmZyk7CisJaWYgKHJldCkgeworCQlkZXZfd2FybihkZXYsICJkbWFlbmdpbmVfc2xhdmVfY29uZmlnIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNoYW47Cit9CisKK3N0YXRpYyBpbnQgcnNwaV9yZXF1ZXN0X2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisJCQkgICAgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJY29uc3Qgc3RydWN0IHJzcGlfcGxhdF9kYXRhICpyc3BpX3BkID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOworCisJaWYgKCFyc3BpX3BkIHx8ICFyc3BpX3BkLT5kbWFfcnhfaWQgfHwgIXJzcGlfcGQtPmRtYV90eF9pZCkKIAkJcmV0dXJuIDA7CS8qIFRoZSBkcml2ZXIgYXNzdW1lcyBubyBlcnJvci4gKi8KIAotCXJzcGktPmRtYV93aWR0aF8xNmJpdCA9IHJzcGlfcGQtPmRtYV93aWR0aF8xNmJpdDsKKwltYXN0ZXItPmRtYV9yeCA9IHJzcGlfcmVxdWVzdF9kbWFfY2hhbihkZXYsIERNQV9ERVZfVE9fTUVNLAorCQkJCQkgICAgICAgcnNwaV9wZC0+ZG1hX3J4X2lkLAorCQkJCQkgICAgICAgcmVzLT5zdGFydCArIFJTUElfU1BEUik7CisJaWYgKCFtYXN0ZXItPmRtYV9yeCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBJZiB0aGUgbW9kdWxlIHJlY2VpdmVzIGRhdGEgYnkgRE1BQywgaXQgYWxzbyBuZWVkcyBUWCBETUFDICovCi0JaWYgKHJzcGlfcGQtPmRtYV9yeF9pZCAmJiByc3BpX3BkLT5kbWFfdHhfaWQpIHsKLQkJZG1hX2NhcF96ZXJvKG1hc2spOwotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwotCQlyc3BpLT5jaGFuX3J4ID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBzaGRtYV9jaGFuX2ZpbHRlciwKLQkJCQkJCSAgICAodm9pZCAqKXJzcGlfcGQtPmRtYV9yeF9pZCk7Ci0JCWlmIChyc3BpLT5jaGFuX3J4KSB7Ci0JCQljZmcuc2xhdmVfaWQgPSByc3BpX3BkLT5kbWFfcnhfaWQ7Ci0JCQljZmcuZGlyZWN0aW9uID0gRE1BX0RFVl9UT19NRU07Ci0JCQljZmcuZHN0X2FkZHIgPSAwOwotCQkJY2ZnLnNyY19hZGRyID0gcmVzLT5zdGFydCArIFJTUElfU1BEUjsKLQkJCXJldCA9IGRtYWVuZ2luZV9zbGF2ZV9jb25maWcocnNwaS0+Y2hhbl9yeCwgJmNmZyk7Ci0JCQlpZiAoIXJldCkKLQkJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVXNlIERNQSB3aGVuIHJ4LlxuIik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQlpZiAocnNwaV9wZC0+ZG1hX3R4X2lkKSB7Ci0JCWRtYV9jYXBfemVybyhtYXNrKTsKLQkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKLQkJcnNwaS0+Y2hhbl90eCA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgc2hkbWFfY2hhbl9maWx0ZXIsCi0JCQkJCQkgICAgKHZvaWQgKilyc3BpX3BkLT5kbWFfdHhfaWQpOwotCQlpZiAocnNwaS0+Y2hhbl90eCkgewotCQkJY2ZnLnNsYXZlX2lkID0gcnNwaV9wZC0+ZG1hX3R4X2lkOwotCQkJY2ZnLmRpcmVjdGlvbiA9IERNQV9NRU1fVE9fREVWOwotCQkJY2ZnLmRzdF9hZGRyID0gcmVzLT5zdGFydCArIFJTUElfU1BEUjsKLQkJCWNmZy5zcmNfYWRkciA9IDA7Ci0JCQlyZXQgPSBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKHJzcGktPmNoYW5fdHgsICZjZmcpOwotCQkJaWYgKCFyZXQpCi0JCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlVzZSBETUEgd2hlbiB0eFxuIik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIHJldDsKLQkJfQorCW1hc3Rlci0+ZG1hX3R4ID0gcnNwaV9yZXF1ZXN0X2RtYV9jaGFuKGRldiwgRE1BX01FTV9UT19ERVYsCisJCQkJCSAgICAgICByc3BpX3BkLT5kbWFfdHhfaWQsCisJCQkJCSAgICAgICByZXMtPnN0YXJ0ICsgUlNQSV9TUERSKTsKKwlpZiAoIW1hc3Rlci0+ZG1hX3R4KSB7CisJCWRtYV9yZWxlYXNlX2NoYW5uZWwobWFzdGVyLT5kbWFfcngpOworCQltYXN0ZXItPmRtYV9yeCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAorCW1hc3Rlci0+Y2FuX2RtYSA9IHJzcGlfY2FuX2RtYTsKKwlkZXZfaW5mbyhkZXYsICJETUEgYXZhaWxhYmxlIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJzcGlfcmVsZWFzZV9kbWEoc3RydWN0IHJzcGlfZGF0YSAqcnNwaSkKIHsKLQlpZiAocnNwaS0+Y2hhbl90eCkKLQkJZG1hX3JlbGVhc2VfY2hhbm5lbChyc3BpLT5jaGFuX3R4KTsKLQlpZiAocnNwaS0+Y2hhbl9yeCkKLQkJZG1hX3JlbGVhc2VfY2hhbm5lbChyc3BpLT5jaGFuX3J4KTsKKwlpZiAocnNwaS0+bWFzdGVyLT5kbWFfdHgpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwocnNwaS0+bWFzdGVyLT5kbWFfdHgpOworCWlmIChyc3BpLT5tYXN0ZXItPmRtYV9yeCkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChyc3BpLT5tYXN0ZXItPmRtYV9yeCk7CiB9CiAKIHN0YXRpYyBpbnQgcnNwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTExMTgsMjMgKzk0NiwyOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9vcHMgcnNwaV9vcHMgPSB7Ci0JLnNldF9jb25maWdfcmVnaXN0ZXIgPQkJcnNwaV9zZXRfY29uZmlnX3JlZ2lzdGVyLAotCS50cmFuc2Zlcl9vbmUgPQkJCXJzcGlfdHJhbnNmZXJfb25lLAotCS5tb2RlX2JpdHMgPQkJCVNQSV9DUEhBIHwgU1BJX0NQT0wgfCBTUElfTE9PUCwKKwkuc2V0X2NvbmZpZ19yZWdpc3RlciA9CXJzcGlfc2V0X2NvbmZpZ19yZWdpc3RlciwKKwkudHJhbnNmZXJfb25lID0JCXJzcGlfdHJhbnNmZXJfb25lLAorCS5tb2RlX2JpdHMgPQkJU1BJX0NQSEEgfCBTUElfQ1BPTCB8IFNQSV9MT09QLAorCS5mbGFncyA9CQlTUElfTUFTVEVSX01VU1RfVFgsCisJLmZpZm9fc2l6ZSA9CQk4LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfb3BzIHJzcGlfcnpfb3BzID0gewotCS5zZXRfY29uZmlnX3JlZ2lzdGVyID0JCXJzcGlfcnpfc2V0X2NvbmZpZ19yZWdpc3RlciwKLQkudHJhbnNmZXJfb25lID0JCQlyc3BpX3J6X3RyYW5zZmVyX29uZSwKLQkubW9kZV9iaXRzID0JCQlTUElfQ1BIQSB8IFNQSV9DUE9MIHwgU1BJX0xPT1AsCisJLnNldF9jb25maWdfcmVnaXN0ZXIgPQlyc3BpX3J6X3NldF9jb25maWdfcmVnaXN0ZXIsCisJLnRyYW5zZmVyX29uZSA9CQlyc3BpX3J6X3RyYW5zZmVyX29uZSwKKwkubW9kZV9iaXRzID0JCVNQSV9DUEhBIHwgU1BJX0NQT0wgfCBTUElfTE9PUCwKKwkuZmxhZ3MgPQkJU1BJX01BU1RFUl9NVVNUX1JYIHwgU1BJX01BU1RFUl9NVVNUX1RYLAorCS5maWZvX3NpemUgPQkJOCwJLyogOCBmb3IgVFgsIDMyIGZvciBSWCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfb3BzIHFzcGlfb3BzID0gewotCS5zZXRfY29uZmlnX3JlZ2lzdGVyID0JCXFzcGlfc2V0X2NvbmZpZ19yZWdpc3RlciwKLQkudHJhbnNmZXJfb25lID0JCQlxc3BpX3RyYW5zZmVyX29uZSwKLQkubW9kZV9iaXRzID0JCQlTUElfQ1BIQSB8IFNQSV9DUE9MIHwgU1BJX0xPT1AgfAotCQkJCQlTUElfVFhfRFVBTCB8IFNQSV9UWF9RVUFEIHwKLQkJCQkJU1BJX1JYX0RVQUwgfCBTUElfUlhfUVVBRCwKKwkuc2V0X2NvbmZpZ19yZWdpc3RlciA9CXFzcGlfc2V0X2NvbmZpZ19yZWdpc3RlciwKKwkudHJhbnNmZXJfb25lID0JCXFzcGlfdHJhbnNmZXJfb25lLAorCS5tb2RlX2JpdHMgPQkJU1BJX0NQSEEgfCBTUElfQ1BPTCB8IFNQSV9MT09QIHwKKwkJCQlTUElfVFhfRFVBTCB8IFNQSV9UWF9RVUFEIHwKKwkJCQlTUElfUlhfRFVBTCB8IFNQSV9SWF9RVUFELAorCS5mbGFncyA9CQlTUElfTUFTVEVSX01VU1RfUlggfCBTUElfTUFTVEVSX01VU1RfVFgsCisJLmZpZm9fc2l6ZSA9CQkzMiwKIH07CiAKICNpZmRlZiBDT05GSUdfT0YKQEAgLTEyNTQsNiArMTA4OCw3IEBACiAJbWFzdGVyLT5wcmVwYXJlX21lc3NhZ2UgPSByc3BpX3ByZXBhcmVfbWVzc2FnZTsKIAltYXN0ZXItPnVucHJlcGFyZV9tZXNzYWdlID0gcnNwaV91bnByZXBhcmVfbWVzc2FnZTsKIAltYXN0ZXItPm1vZGVfYml0cyA9IG9wcy0+bW9kZV9iaXRzOworCW1hc3Rlci0+ZmxhZ3MgPSBvcHMtPmZsYWdzOwogCW1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAogCXJldCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJyeCIpOwpAQCAtMTI5MSwxMSArMTEyNiw5IEBACiAJCWdvdG8gZXJyb3IyOwogCX0KIAotCXJldCA9IHJzcGlfcmVxdWVzdF9kbWEocnNwaSwgcGRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicnNwaV9yZXF1ZXN0X2RtYSBmYWlsZWQuXG4iKTsKLQkJZ290byBlcnJvcjM7Ci0JfQorCXJldCA9IHJzcGlfcmVxdWVzdF9kbWEoJnBkZXYtPmRldiwgbWFzdGVyLCByZXMpOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRE1BIG5vdCBhdmFpbGFibGUsIHVzaW5nIFBJT1xuIik7CiAKIAlyZXQgPSBkZXZtX3NwaV9yZWdpc3Rlcl9tYXN0ZXIoJnBkZXYtPmRldiwgbWFzdGVyKTsKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXMzYzI0eHguYyBiL2RyaXZlcnMvc3BpL3NwaS1zM2MyNHh4LmMKaW5kZXggYmVkMjMzOC4uZTcxMzczNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXMzYzI0eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktczNjMjR4eC5jCkBAIC0xMCw3ICsxMCw2IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xODMsMTEgKzE4MiwxMSBAQAogCiAJLyogYWxsb2NhdGUgc2V0dGluZ3Mgb24gdGhlIGZpcnN0IGNhbGwgKi8KIAlpZiAoIWNzKSB7Ci0JCWNzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY3MpIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gbWVtb3J5IGZvciBjb250cm9sbGVyIHN0YXRlXG4iKTsKKwkJY3MgPSBkZXZtX2t6YWxsb2MoJnNwaS0+ZGV2LAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X3NwaV9kZXZzdGF0ZSksCisJCQkJICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjcykKIAkJCXJldHVybiAtRU5PTUVNOwotCQl9CiAKIAkJY3MtPnNwY29uID0gU1BDT05fREVGQVVMVDsKIAkJY3MtPmh6ID0gLTE7CkBAIC0yMDksMTEgKzIwOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0eHhfc3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlrZnJlZShzcGktPmNvbnRyb2xsZXJfc3RhdGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod190eGJ5dGUoc3RydWN0IHMzYzI0eHhfc3BpICpodywgaW50IGNvdW50KQogewogCXJldHVybiBody0+dHggPyBody0+dHhbY291bnRdIDogMDsKQEAgLTU0Myw3ICs1MzcsNiBAQAogCWh3LT5iaXRiYW5nLnR4cnhfYnVmcyAgICAgID0gczNjMjR4eF9zcGlfdHhyeDsKIAogCWh3LT5tYXN0ZXItPnNldHVwICA9IHMzYzI0eHhfc3BpX3NldHVwOwotCWh3LT5tYXN0ZXItPmNsZWFudXAgPSBzM2MyNHh4X3NwaV9jbGVhbnVwOwogCiAJZGV2X2RiZyhody0+ZGV2LCAiYml0YmFuZyBhdCAlcFxuIiwgJmh3LT5iaXRiYW5nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYyBiL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMKaW5kZXggZjE5Y2Q5Ny4uNzVhNTY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktczNjNjR4eC5jCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTc3Myw3ICs3NzIsNiBAQAogCiAJY3MgPSBremFsbG9jKHNpemVvZigqY3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbGxlciBkYXRhXG4iKTsKIAkJb2Zfbm9kZV9wdXQoZGF0YV9ucCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KQEAgLTk4NywxMCArOTg1LDggQEAKIAl1MzIgdGVtcDsKIAogCXNjaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc2NpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzY2kpIHsKLQkJZGV2X2VycihkZXYsICJtZW1vcnkgYWxsb2NhdGlvbiBmb3Igc3BpX2luZm8gZmFpbGVkXG4iKTsKKwlpZiAoIXNjaSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQogCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgInNhbXN1bmcsc3BpLXNyYy1jbGsiLCAmdGVtcCkpIHsKIAkJZGV2X3dhcm4oZGV2LCAic3BpIGJ1cyBjbG9jayBwYXJlbnQgbm90IHNwZWNpZmllZCwgdXNpbmcgY2xvY2sgYXQgaW5kZXggMCBhcyBwYXJlbnRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXNoLW1zaW9mLmMgYi9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYwppbmRleCBlODUwZDAzLi40NWIwOTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYwpAQCAtNjQyLDEwICs2NDIsOCBAQAogCXUzMiBudW1fY3MgPSAxOwogCiAJaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgc2V0dXAgZGF0YVxuIik7CisJaWYgKCFpbmZvKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAkvKiBQYXJzZSB0aGUgTVNJT0YgcHJvcGVydGllcyAqLwogCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibnVtLWNzIiwgJm51bV9jcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc2gtc2NpLmMgYi9kcml2ZXJzL3NwaS9zcGktc2gtc2NpLmMKaW5kZXggOGI0NGI3MS4uMWY1NmVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXNoLXNjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zaC1zY2kuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zaXJmLmMgYi9kcml2ZXJzL3NwaS9zcGktc2lyZi5jCmluZGV4IDY3ZDg5MDkuLjk1YWMyNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zaXJmLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXNpcmYuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtODUsNiArODYsNyBAQAogI2RlZmluZSBTSVJGU09DX1NQSV9UWF9ET05FCQlCSVQoMSkKICNkZWZpbmUgU0lSRlNPQ19TUElfUlhfT0ZMT1cJCUJJVCgyKQogI2RlZmluZSBTSVJGU09DX1NQSV9UWF9VRkxPVwkJQklUKDMpCisjZGVmaW5lIFNJUkZTT0NfU1BJX1JYX0lPX0RNQQkJQklUKDQpCiAjZGVmaW5lIFNJUkZTT0NfU1BJX1JYX0ZJRk9fRlVMTAlCSVQoNikKICNkZWZpbmUgU0lSRlNPQ19TUElfVFhGSUZPX0VNUFRZCUJJVCg3KQogI2RlZmluZSBTSVJGU09DX1NQSV9SWEZJRk9fVEhEX1JFQUNICUJJVCg4KQpAQCAtMjY0LDQxICsyNjYsMzQgQEAKIHsKIAlzdHJ1Y3Qgc2lyZnNvY19zcGkgKnNzcGkgPSBkZXZfaWQ7CiAJdTMyIHNwaV9zdGF0ID0gcmVhZGwoc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9TVEFUVVMpOwotCi0Jd3JpdGVsKHNwaV9zdGF0LCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX1NUQVRVUyk7Ci0KIAlpZiAoc3NwaS0+dHhfYnlfY21kICYmIChzcGlfc3RhdCAmIFNJUkZTT0NfU1BJX0ZSTV9FTkQpKSB7CiAJCWNvbXBsZXRlKCZzc3BpLT50eF9kb25lKTsKIAkJd3JpdGVsKDB4MCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9FTik7CisJCXdyaXRlbChTSVJGU09DX1NQSV9JTlRfTUFTS19BTEwsCisJCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9TVEFUVVMpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCiAJLyogRXJyb3IgQ29uZGl0aW9ucyAqLwogCWlmIChzcGlfc3RhdCAmIFNJUkZTT0NfU1BJX1JYX09GTE9XIHx8CiAJCQlzcGlfc3RhdCAmIFNJUkZTT0NfU1BJX1RYX1VGTE9XKSB7CisJCWNvbXBsZXRlKCZzc3BpLT50eF9kb25lKTsKIAkJY29tcGxldGUoJnNzcGktPnJ4X2RvbmUpOwogCQl3cml0ZWwoMHgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX0VOKTsKKwkJd3JpdGVsKFNJUkZTT0NfU1BJX0lOVF9NQVNLX0FMTCwKKwkJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX1NUQVRVUyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CisJaWYgKHNwaV9zdGF0ICYgU0lSRlNPQ19TUElfVFhGSUZPX0VNUFRZKQorCQljb21wbGV0ZSgmc3NwaS0+dHhfZG9uZSk7CisJd2hpbGUgKCEocmVhZGwoc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9TVEFUVVMpICYKKwkJU0lSRlNPQ19TUElfUlhfSU9fRE1BKSkKKwkJY3B1X3JlbGF4KCk7CisJY29tcGxldGUoJnNzcGktPnJ4X2RvbmUpOworCXdyaXRlbCgweDAsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9JTlRfRU4pOworCXdyaXRlbChTSVJGU09DX1NQSV9JTlRfTUFTS19BTEwsCisJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX1NUQVRVUyk7CiAKLQlpZiAoc3BpX3N0YXQgJiAoU0lSRlNPQ19TUElfRlJNX0VORAotCQkJfCBTSVJGU09DX1NQSV9SWEZJRk9fVEhEX1JFQUNIKSkKLQkJd2hpbGUgKCEoKHJlYWRsKHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9SWEZJRk9fU1RBVFVTKQotCQkJCSYgU0lSRlNPQ19TUElfRklGT19FTVBUWSkpICYmCi0JCQkJc3NwaS0+bGVmdF9yeF93b3JkKQotCQkJc3NwaS0+cnhfd29yZChzc3BpKTsKLQotCWlmIChzcGlfc3RhdCAmIChTSVJGU09DX1NQSV9UWEZJRk9fRU1QVFkgfAotCQkJU0lSRlNPQ19TUElfVFhGSUZPX1RIRF9SRUFDSCkpCi0JCXdoaWxlICghKChyZWFkbChzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhGSUZPX1NUQVRVUykKLQkJCQkmIFNJUkZTT0NfU1BJX0ZJRk9fRlVMTCkpICYmCi0JCQkJc3NwaS0+bGVmdF90eF93b3JkKQotCQkJc3NwaS0+dHhfd29yZChzc3BpKTsKLQotCS8qIFJlY2VpdmVkIGFsbCB3b3JkcyAqLwotCWlmICgoc3NwaS0+bGVmdF9yeF93b3JkID09IDApICYmIChzc3BpLT5sZWZ0X3R4X3dvcmQgPT0gMCkpIHsKLQkJY29tcGxldGUoJnNzcGktPnJ4X2RvbmUpOwotCQl3cml0ZWwoMHgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX0VOKTsKLQl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0zMDksNTkgKzMwNCw1MSBAQAogCWNvbXBsZXRlKGRtYV9jb21wbGV0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc3BpX3NpcmZzb2NfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3N0YXRpYyBpbnQgc3BpX3NpcmZzb2NfY21kX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKIHsKIAlzdHJ1Y3Qgc2lyZnNvY19zcGkgKnNzcGk7CiAJaW50IHRpbWVvdXQgPSB0LT5sZW4gKiAxMDsKKwl1MzIgY21kOworCiAJc3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCi0Jc3NwaS0+dHggPSB0LT50eF9idWYgPyB0LT50eF9idWYgOiBzc3BpLT5kdW1teXBhZ2U7Ci0Jc3NwaS0+cnggPSB0LT5yeF9idWYgPyB0LT5yeF9idWYgOiBzc3BpLT5kdW1teXBhZ2U7Ci0Jc3NwaS0+bGVmdF90eF93b3JkID0gc3NwaS0+bGVmdF9yeF93b3JkID0gdC0+bGVuIC8gc3NwaS0+d29yZF93aWR0aDsKLQlyZWluaXRfY29tcGxldGlvbigmc3NwaS0+cnhfZG9uZSk7Ci0JcmVpbml0X2NvbXBsZXRpb24oJnNzcGktPnR4X2RvbmUpOwotCi0Jd3JpdGVsKFNJUkZTT0NfU1BJX0lOVF9NQVNLX0FMTCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9TVEFUVVMpOwotCi0JLyoKLQkgKiBmaWxsIHR4X2J1ZiBpbnRvIGNvbW1hbmQgcmVnaXN0ZXIgYW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uCi0JICovCi0JaWYgKHNzcGktPnR4X2J5X2NtZCkgewotCQl1MzIgY21kOwotCQltZW1jcHkoJmNtZCwgc3NwaS0+dHgsIHQtPmxlbik7Ci0KLQkJaWYgKHNzcGktPndvcmRfd2lkdGggPT0gMSAmJiAhKHNwaS0+bW9kZSAmIFNQSV9MU0JfRklSU1QpKQotCQkJY21kID0gY3B1X3RvX2JlMzIoY21kKSA+PgotCQkJCSgoU0lSRlNPQ19NQVhfQ01EX0JZVEVTIC0gdC0+bGVuKSAqIDgpOwotCQlpZiAoc3NwaS0+d29yZF93aWR0aCA9PSAyICYmIHQtPmxlbiA9PSA0ICYmCi0JCQkJKCEoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkpKQotCQkJY21kID0gKChjbWQgJiAweGZmZmYpIDw8IDE2KSB8IChjbWQgPj4gMTYpOwotCi0JCXdyaXRlbChjbWQsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9DTUQpOwotCQl3cml0ZWwoU0lSRlNPQ19TUElfRlJNX0VORF9JTlRfRU4sCi0JCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX0VOKTsKLQkJd3JpdGVsKFNJUkZTT0NfU1BJX0NNRF9UWF9FTiwKLQkJCXNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9UWF9SWF9FTik7Ci0KLQkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+dHhfZG9uZSwgdGltZW91dCkgPT0gMCkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsICJ0cmFuc2ZlciB0aW1lb3V0XG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcmV0dXJuIHQtPmxlbjsKKwltZW1jcHkoJmNtZCwgc3NwaS0+dHgsIHQtPmxlbik7CisJaWYgKHNzcGktPndvcmRfd2lkdGggPT0gMSAmJiAhKHNwaS0+bW9kZSAmIFNQSV9MU0JfRklSU1QpKQorCQljbWQgPSBjcHVfdG9fYmUzMihjbWQpID4+CisJCQkoKFNJUkZTT0NfTUFYX0NNRF9CWVRFUyAtIHQtPmxlbikgKiA4KTsKKwlpZiAoc3NwaS0+d29yZF93aWR0aCA9PSAyICYmIHQtPmxlbiA9PSA0ICYmCisJCQkoIShzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKSkpCisJCWNtZCA9ICgoY21kICYgMHhmZmZmKSA8PCAxNikgfCAoY21kID4+IDE2KTsKKwl3cml0ZWwoY21kLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfQ01EKTsKKwl3cml0ZWwoU0lSRlNPQ19TUElfRlJNX0VORF9JTlRfRU4sCisJCXNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9JTlRfRU4pOworCXdyaXRlbChTSVJGU09DX1NQSV9DTURfVFhfRU4sCisJCXNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9UWF9SWF9FTik7CisJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+dHhfZG9uZSwgdGltZW91dCkgPT0gMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImNtZCB0cmFuc2ZlciB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHNzcGktPmxlZnRfdHhfd29yZCA9PSAxKSB7CisJcmV0dXJuIHQtPmxlbjsKK30KKworc3RhdGljIHZvaWQgc3BpX3NpcmZzb2NfZG1hX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3Qgc2lyZnNvY19zcGkgKnNzcGk7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpyeF9kZXNjLCAqdHhfZGVzYzsKKwlpbnQgdGltZW91dCA9IHQtPmxlbiAqIDEwOworCisJc3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1JFU0VULCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhGSUZPX09QKTsKKwl3cml0ZWwoU0lSRlNPQ19TUElfRklGT19SRVNFVCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYRklGT19PUCk7CisJd3JpdGVsKFNJUkZTT0NfU1BJX0ZJRk9fU1RBUlQsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9SWEZJRk9fT1ApOworCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1NUQVJULCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhGSUZPX09QKTsKKwl3cml0ZWwoMCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9FTik7CisJd3JpdGVsKFNJUkZTT0NfU1BJX0lOVF9NQVNLX0FMTCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9TVEFUVVMpOworCWlmIChzc3BpLT5sZWZ0X3R4X3dvcmQgPCBTSVJGU09DX1NQSV9EQVRfRlJNX0xFTl9NQVgpIHsKIAkJd3JpdGVsKHJlYWRsKHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9DVFJMKSB8Ci0JCQlTSVJGU09DX1NQSV9FTkFfQVVUT19DTFIsCi0JCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfQ1RSTCk7Ci0JCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfRE1BX0lPX0xFTik7Ci0JCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhfRE1BX0lPX0xFTik7Ci0JfSBlbHNlIGlmICgoc3NwaS0+bGVmdF90eF93b3JkID4gMSkgJiYgKHNzcGktPmxlZnRfdHhfd29yZCA8Ci0JCQkJU0lSRlNPQ19TUElfREFUX0ZSTV9MRU5fTUFYKSkgewotCQl3cml0ZWwocmVhZGwoc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0NUUkwpIHwKLQkJCQlTSVJGU09DX1NQSV9NVUxfREFUX01PREUgfAotCQkJCVNJUkZTT0NfU1BJX0VOQV9BVVRPX0NMUiwKKwkJCVNJUkZTT0NfU1BJX0VOQV9BVVRPX0NMUiB8IFNJUkZTT0NfU1BJX01VTF9EQVRfTU9ERSwKIAkJCXNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9DVFJMKTsKIAkJd3JpdGVsKHNzcGktPmxlZnRfdHhfd29yZCAtIDEsCiAJCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYX0RNQV9JT19MRU4pOwpAQCAtMzczLDc2ICszNjAsMTIyIEBACiAJCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfRE1BX0lPX0xFTik7CiAJCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhfRE1BX0lPX0xFTik7CiAJfQorCXNzcGktPmRzdF9zdGFydCA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgc3NwaS0+cngsIHQtPmxlbiwKKwkJCQkJKHQtPnR4X2J1ZiAhPSB0LT5yeF9idWYpID8KKwkJCQkJRE1BX0ZST01fREVWSUNFIDogRE1BX0JJRElSRUNUSU9OQUwpOworCXJ4X2Rlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zaW5nbGUoc3NwaS0+cnhfY2hhbiwKKwkJc3NwaS0+ZHN0X3N0YXJ0LCB0LT5sZW4sIERNQV9ERVZfVE9fTUVNLAorCQlETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOworCXJ4X2Rlc2MtPmNhbGxiYWNrID0gc3BpX3NpcmZzb2NfZG1hX2ZpbmlfY2FsbGJhY2s7CisJcnhfZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSAmc3NwaS0+cnhfZG9uZTsKIAotCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1JFU0VULCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhGSUZPX09QKTsKLQl3cml0ZWwoU0lSRlNPQ19TUElfRklGT19SRVNFVCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYRklGT19PUCk7Ci0Jd3JpdGVsKFNJUkZTT0NfU1BJX0ZJRk9fU1RBUlQsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9SWEZJRk9fT1ApOwotCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1NUQVJULCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhGSUZPX09QKTsKKwlzc3BpLT5zcmNfc3RhcnQgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsICh2b2lkICopc3NwaS0+dHgsIHQtPmxlbiwKKwkJCQkJKHQtPnR4X2J1ZiAhPSB0LT5yeF9idWYpID8KKwkJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9CSURJUkVDVElPTkFMKTsKKwl0eF9kZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2luZ2xlKHNzcGktPnR4X2NoYW4sCisJCXNzcGktPnNyY19zdGFydCwgdC0+bGVuLCBETUFfTUVNX1RPX0RFViwKKwkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwl0eF9kZXNjLT5jYWxsYmFjayA9IHNwaV9zaXJmc29jX2RtYV9maW5pX2NhbGxiYWNrOworCXR4X2Rlc2MtPmNhbGxiYWNrX3BhcmFtID0gJnNzcGktPnR4X2RvbmU7CiAKLQlpZiAoSVNfRE1BX1ZBTElEKHQpKSB7Ci0JCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqcnhfZGVzYywgKnR4X2Rlc2M7Ci0KLQkJc3NwaS0+ZHN0X3N0YXJ0ID0gZG1hX21hcF9zaW5nbGUoJnNwaS0+ZGV2LCBzc3BpLT5yeCwgdC0+bGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlyeF9kZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2luZ2xlKHNzcGktPnJ4X2NoYW4sCi0JCQlzc3BpLT5kc3Rfc3RhcnQsIHQtPmxlbiwgRE1BX0RFVl9UT19NRU0sCi0JCQlETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOwotCQlyeF9kZXNjLT5jYWxsYmFjayA9IHNwaV9zaXJmc29jX2RtYV9maW5pX2NhbGxiYWNrOwotCQlyeF9kZXNjLT5jYWxsYmFja19wYXJhbSA9ICZzc3BpLT5yeF9kb25lOwotCi0JCXNzcGktPnNyY19zdGFydCA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKilzc3BpLT50eCwgdC0+bGVuLCBETUFfVE9fREVWSUNFKTsKLQkJdHhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NpbmdsZShzc3BpLT50eF9jaGFuLAotCQkJc3NwaS0+c3JjX3N0YXJ0LCB0LT5sZW4sIERNQV9NRU1fVE9fREVWLAotCQkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKLQkJdHhfZGVzYy0+Y2FsbGJhY2sgPSBzcGlfc2lyZnNvY19kbWFfZmluaV9jYWxsYmFjazsKLQkJdHhfZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSAmc3NwaS0+dHhfZG9uZTsKLQotCQlkbWFlbmdpbmVfc3VibWl0KHR4X2Rlc2MpOwotCQlkbWFlbmdpbmVfc3VibWl0KHJ4X2Rlc2MpOwotCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzc3BpLT50eF9jaGFuKTsKLQkJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoc3NwaS0+cnhfY2hhbik7Ci0JfSBlbHNlIHsKLQkJLyogU2VuZCB0aGUgZmlyc3Qgd29yZCB0byB0cmlnZ2VyIHRoZSB3aG9sZSB0eC9yeCBwcm9jZXNzICovCi0JCXNzcGktPnR4X3dvcmQoc3NwaSk7Ci0KLQkJd3JpdGVsKFNJUkZTT0NfU1BJX1JYX09GTE9XX0lOVF9FTiB8IFNJUkZTT0NfU1BJX1RYX1VGTE9XX0lOVF9FTiB8Ci0JCQlTSVJGU09DX1NQSV9SWEZJRk9fVEhEX0lOVF9FTiB8IFNJUkZTT0NfU1BJX1RYRklGT19USERfSU5UX0VOIHwKLQkJCVNJUkZTT0NfU1BJX0ZSTV9FTkRfSU5UX0VOIHwgU0lSRlNPQ19TUElfUlhGSUZPX0ZVTExfSU5UX0VOIHwKLQkJCVNJUkZTT0NfU1BJX1RYRklGT19FTVBUWV9JTlRfRU4sIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9JTlRfRU4pOwotCX0KLQotCXdyaXRlbChTSVJGU09DX1NQSV9SWF9FTiB8IFNJUkZTT0NfU1BJX1RYX0VOLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfUlhfRU4pOwotCi0JaWYgKCFJU19ETUFfVkFMSUQodCkpIHsgLyogZm9yIFBJTyAqLwotCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzc3BpLT5yeF9kb25lLCB0aW1lb3V0KSA9PSAwKQotCQkJZGV2X2Vycigmc3BpLT5kZXYsICJ0cmFuc2ZlciB0aW1lb3V0XG4iKTsKLQl9IGVsc2UgaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+cnhfZG9uZSwgdGltZW91dCkgPT0gMCkgeworCWRtYWVuZ2luZV9zdWJtaXQodHhfZGVzYyk7CisJZG1hZW5naW5lX3N1Ym1pdChyeF9kZXNjKTsKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzc3BpLT50eF9jaGFuKTsKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzc3BpLT5yeF9jaGFuKTsKKwl3cml0ZWwoU0lSRlNPQ19TUElfUlhfRU4gfCBTSVJGU09DX1NQSV9UWF9FTiwKKwkJCXNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9UWF9SWF9FTik7CisJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+cnhfZG9uZSwgdGltZW91dCkgPT0gMCkgewogCQlkZXZfZXJyKCZzcGktPmRldiwgInRyYW5zZmVyIHRpbWVvdXRcbiIpOwogCQlkbWFlbmdpbmVfdGVybWluYXRlX2FsbChzc3BpLT5yeF9jaGFuKTsKIAl9IGVsc2UKIAkJc3NwaS0+bGVmdF9yeF93b3JkID0gMDsKLQogCS8qCiAJICogd2Ugb25seSB3YWl0IHR4LWRvbmUgZXZlbnQgaWYgdHJhbnNmZXJyaW5nIGJ5IERNQS4gZm9yIFBJTywKIAkgKiB3ZSBnZXQgcnggZGF0YSBieSB3cml0aW5nIHR4IGRhdGEsIHNvIGlmIHJ4IGlzIGRvbmUsIHR4IGhhcwogCSAqIGRvbmUgZWFybGllcgogCSAqLwotCWlmIChJU19ETUFfVkFMSUQodCkpIHsKLQkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+dHhfZG9uZSwgdGltZW91dCkgPT0gMCkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsICJ0cmFuc2ZlciB0aW1lb3V0XG4iKTsKLQkJCWRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKHNzcGktPnR4X2NoYW4pOwotCQl9CisJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+dHhfZG9uZSwgdGltZW91dCkgPT0gMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgInRyYW5zZmVyIHRpbWVvdXRcbiIpOworCQlkbWFlbmdpbmVfdGVybWluYXRlX2FsbChzc3BpLT50eF9jaGFuKTsKIAl9Ci0KLQlpZiAoSVNfRE1BX1ZBTElEKHQpKSB7Ci0JCWRtYV91bm1hcF9zaW5nbGUoJnNwaS0+ZGV2LCBzc3BpLT5zcmNfc3RhcnQsIHQtPmxlbiwgRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV91bm1hcF9zaW5nbGUoJnNwaS0+ZGV2LCBzc3BpLT5kc3Rfc3RhcnQsIHQtPmxlbiwgRE1BX0ZST01fREVWSUNFKTsKLQl9Ci0KKwlkbWFfdW5tYXBfc2luZ2xlKCZzcGktPmRldiwgc3NwaS0+c3JjX3N0YXJ0LCB0LT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWRtYV91bm1hcF9zaW5nbGUoJnNwaS0+ZGV2LCBzc3BpLT5kc3Rfc3RhcnQsIHQtPmxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAkvKiBUWCwgUlggRklGTyBzdG9wICovCiAJd3JpdGVsKDAsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9SWEZJRk9fT1ApOwogCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhGSUZPX09QKTsKLQl3cml0ZWwoMCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYX1JYX0VOKTsKLQl3cml0ZWwoMCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX0lOVF9FTik7CisJaWYgKHNzcGktPmxlZnRfdHhfd29yZCA+PSBTSVJGU09DX1NQSV9EQVRfRlJNX0xFTl9NQVgpCisJCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfUlhfRU4pOworfQorCitzdGF0aWMgdm9pZCBzcGlfc2lyZnNvY19waW9fdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3Qgc2lyZnNvY19zcGkgKnNzcGk7CisJaW50IHRpbWVvdXQgPSB0LT5sZW4gKiAxMDsKKworCXNzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlkbyB7CisJCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1JFU0VULAorCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1JYRklGT19PUCk7CisJCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1JFU0VULAorCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYRklGT19PUCk7CisJCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1NUQVJULAorCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1JYRklGT19PUCk7CisJCXdyaXRlbChTSVJGU09DX1NQSV9GSUZPX1NUQVJULAorCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYRklGT19PUCk7CisJCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX0VOKTsKKwkJd3JpdGVsKFNJUkZTT0NfU1BJX0lOVF9NQVNLX0FMTCwKKwkJCXNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9JTlRfU1RBVFVTKTsKKwkJd3JpdGVsKHJlYWRsKHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9DVFJMKSB8CisJCQlTSVJGU09DX1NQSV9NVUxfREFUX01PREUgfCBTSVJGU09DX1NQSV9FTkFfQVVUT19DTFIsCisJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfQ1RSTCk7CisJCXdyaXRlbChtaW4oc3NwaS0+bGVmdF90eF93b3JkLCAodTMyKSgyNTYgLyBzc3BpLT53b3JkX3dpZHRoKSkKKwkJCQktIDEsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9UWF9ETUFfSU9fTEVOKTsKKwkJd3JpdGVsKG1pbihzc3BpLT5sZWZ0X3J4X3dvcmQsICh1MzIpKDI1NiAvIHNzcGktPndvcmRfd2lkdGgpKQorCQkJCS0gMSwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1JYX0RNQV9JT19MRU4pOworCQl3aGlsZSAoISgocmVhZGwoc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYRklGT19TVEFUVVMpCisJCQkmIFNJUkZTT0NfU1BJX0ZJRk9fRlVMTCkpICYmIHNzcGktPmxlZnRfdHhfd29yZCkKKwkJCXNzcGktPnR4X3dvcmQoc3NwaSk7CisJCXdyaXRlbChTSVJGU09DX1NQSV9UWEZJRk9fRU1QVFlfSU5UX0VOIHwKKwkJCVNJUkZTT0NfU1BJX1RYX1VGTE9XX0lOVF9FTiB8CisJCQlTSVJGU09DX1NQSV9SWF9PRkxPV19JTlRfRU4sCisJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfSU5UX0VOKTsKKwkJd3JpdGVsKFNJUkZTT0NfU1BJX1JYX0VOIHwgU0lSRlNPQ19TUElfVFhfRU4sCisJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfUlhfRU4pOworCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3NwaS0+dHhfZG9uZSwgdGltZW91dCkgfHwKKwkJCSF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNzcGktPnJ4X2RvbmUsIHRpbWVvdXQpKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgInRyYW5zZmVyIHRpbWVvdXRcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJd2hpbGUgKCEoKHJlYWRsKHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9SWEZJRk9fU1RBVFVTKQorCQkJJiBTSVJGU09DX1NQSV9GSUZPX0VNUFRZKSkgJiYgc3NwaS0+bGVmdF9yeF93b3JkKQorCQkJc3NwaS0+cnhfd29yZChzc3BpKTsKKwkJd3JpdGVsKDAsIHNzcGktPmJhc2UgKyBTSVJGU09DX1NQSV9SWEZJRk9fT1ApOworCQl3cml0ZWwoMCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYRklGT19PUCk7CisJfSB3aGlsZSAoc3NwaS0+bGVmdF90eF93b3JkICE9IDAgfHwgc3NwaS0+bGVmdF9yeF93b3JkICE9IDApOworfQorCitzdGF0aWMgaW50IHNwaV9zaXJmc29jX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHNpcmZzb2Nfc3BpICpzc3BpOworCXNzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCXNzcGktPnR4ID0gdC0+dHhfYnVmID8gdC0+dHhfYnVmIDogc3NwaS0+ZHVtbXlwYWdlOworCXNzcGktPnJ4ID0gdC0+cnhfYnVmID8gdC0+cnhfYnVmIDogc3NwaS0+ZHVtbXlwYWdlOworCXNzcGktPmxlZnRfdHhfd29yZCA9IHNzcGktPmxlZnRfcnhfd29yZCA9IHQtPmxlbiAvIHNzcGktPndvcmRfd2lkdGg7CisJcmVpbml0X2NvbXBsZXRpb24oJnNzcGktPnJ4X2RvbmUpOworCXJlaW5pdF9jb21wbGV0aW9uKCZzc3BpLT50eF9kb25lKTsKKwkvKgorCSAqIGluIHRoZSB0cmFuc2ZlciwgaWYgdHJhbnNmZXIgZGF0YSB1c2luZyBjb21tYW5kIHJlZ2lzdGVyIHdpdGggcnhfYnVmCisJICogbnVsbCwganVzdCBmaWxsIGNvbW1hbmQgZGF0YSBpbnRvIGNvbW1hbmQgcmVnaXN0ZXIgYW5kIHdhaXQgZm9yIGl0cworCSAqIGNvbXBsZXRpb24uCisJICovCisJaWYgKHNzcGktPnR4X2J5X2NtZCkKKwkJc3BpX3NpcmZzb2NfY21kX3RyYW5zZmVyKHNwaSwgdCk7CisJZWxzZSBpZiAoSVNfRE1BX1ZBTElEKHQpKQorCQlzcGlfc2lyZnNvY19kbWFfdHJhbnNmZXIoc3BpLCB0KTsKKwllbHNlCisJCXNwaV9zaXJmc29jX3Bpb190cmFuc2ZlcihzcGksIHQpOwogCiAJcmV0dXJuIHQtPmxlbiAtIHNzcGktPmxlZnRfcnhfd29yZCAqIHNzcGktPndvcmRfd2lkdGg7CiB9CkBAIC01MTIsNyArNTQ1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSAxMjoKIAljYXNlIDE2OgotCQlyZWd2YWwgfD0gKGJpdHNfcGVyX3dvcmQgPT0gIDEyKSA/IFNJUkZTT0NfU1BJX1RSQU5fREFUX0ZPUk1BVF8xMiA6CisJCXJlZ3ZhbCB8PSAoYml0c19wZXJfd29yZCA9PSAgMTIpID8KKwkJCVNJUkZTT0NfU1BJX1RSQU5fREFUX0ZPUk1BVF8xMiA6CiAJCQlTSVJGU09DX1NQSV9UUkFOX0RBVF9GT1JNQVRfMTY7CiAJCXNzcGktPnJ4X3dvcmQgPSBzcGlfc2lyZnNvY19yeF93b3JkX3UxNjsKIAkJc3NwaS0+dHhfd29yZCA9IHNwaV9zaXJmc29jX3R4X3dvcmRfdTE2OwpAQCAtNTQwLDggKzU3NCw4IEBACiAJCXJlZ3ZhbCB8PSBTSVJGU09DX1NQSV9DTEtfSURMRV9TVEFUOwogCiAJLyoKLQkgKiBEYXRhIHNob3VsZCBiZSBkcml2ZW4gYXQgbGVhc3QgMS8yIGN5Y2xlIGJlZm9yZSB0aGUgZmV0Y2ggZWRnZSB0byBtYWtlCi0JICogc3VyZSB0aGF0IGRhdGEgZ2V0cyBzdGFibGUgYXQgdGhlIGZldGNoIGVkZ2UuCisJICogRGF0YSBzaG91bGQgYmUgZHJpdmVuIGF0IGxlYXN0IDEvMiBjeWNsZSBiZWZvcmUgdGhlIGZldGNoIGVkZ2UKKwkgKiB0byBtYWtlIHN1cmUgdGhhdCBkYXRhIGdldHMgc3RhYmxlIGF0IHRoZSBmZXRjaCBlZGdlLgogCSAqLwogCWlmICgoKHNwaS0+bW9kZSAmIFNQSV9DUE9MKSAmJiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpKSB8fAogCSAgICAoIShzcGktPm1vZGUgJiBTUElfQ1BPTCkgJiYgIShzcGktPm1vZGUgJiBTUElfQ1BIQSkpKQpAQCAtNTc4LDExICs2MTIsMTQgQEAKIAlpZiAoSVNfRE1BX1ZBTElEKHQpKSB7CiAJCS8qIEVuYWJsZSBETUEgbW9kZSBmb3IgUlgsIFRYICovCiAJCXdyaXRlbCgwLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfRE1BX0lPX0NUUkwpOwotCQl3cml0ZWwoU0lSRlNPQ19TUElfUlhfRE1BX0ZMVVNILCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhfRE1BX0lPX0NUUkwpOworCQl3cml0ZWwoU0lSRlNPQ19TUElfUlhfRE1BX0ZMVVNILAorCQkJc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1JYX0RNQV9JT19DVFJMKTsKIAl9IGVsc2UgewogCQkvKiBFbmFibGUgSU8gbW9kZSBmb3IgUlgsIFRYICovCi0JCXdyaXRlbChTSVJGU09DX1NQSV9JT19NT0RFX1NFTCwgc3NwaS0+YmFzZSArIFNJUkZTT0NfU1BJX1RYX0RNQV9JT19DVFJMKTsKLQkJd3JpdGVsKFNJUkZTT0NfU1BJX0lPX01PREVfU0VMLCBzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhfRE1BX0lPX0NUUkwpOworCQl3cml0ZWwoU0lSRlNPQ19TUElfSU9fTU9ERV9TRUwsCisJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfVFhfRE1BX0lPX0NUUkwpOworCQl3cml0ZWwoU0lSRlNPQ19TUElfSU9fTU9ERV9TRUwsCisJCQlzc3BpLT5iYXNlICsgU0lSRlNPQ19TUElfUlhfRE1BX0lPX0NUUkwpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNjEyLDcgKzY0OSw4IEBACiAJCWdvdG8gZXJyX2NzOwogCX0KIAotCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCpzc3BpKSArIHNpemVvZihpbnQpICogbnVtX2NzKTsKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsCisJCQlzaXplb2YoKnNzcGkpICsgc2l6ZW9mKGludCkgKiBudW1fY3MpOwogCWlmICghbWFzdGVyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBTUEkgbWFzdGVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC04MDgsOCArODQ2LDcgQEAKIAkucmVtb3ZlID0gc3BpX3NpcmZzb2NfcmVtb3ZlLAogfTsKIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3BpX3NpcmZzb2NfZHJpdmVyKTsKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaVJGIFNvQyBTUEkgbWFzdGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiWmhpd3UgU29uZyA8Wmhpd3UuU29uZ0Bjc3IuY29tPiwgIgotCQkiQmFycnkgU29uZyA8QmFvaHVhLlNvbmdAY3NyLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlpoaXd1IFNvbmcgPFpoaXd1LlNvbmdAY3NyLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmcgPEJhb2h1YS5Tb25nQGNzci5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc3VuNGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1zdW40aS5jCmluZGV4IGQyNjZhODcuLjg1MjA0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zdW40aS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zdW40aS5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc3VuNmkuYyBiL2RyaXZlcnMvc3BpL3NwaS1zdW42aS5jCmluZGV4IGIzZTM0OTguLmJkMjQwOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zdW42aS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zdW42aS5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS10ZWdyYTExNC5jIGIvZHJpdmVycy9zcGkvc3BpLXRlZ3JhMTE0LmMKaW5kZXggNDAwNjQ5NS4uZTRhODVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXRlZ3JhMTE0LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXRlZ3JhMTE0LmMKQEAgLTEwMTIsNyArMTAxMiw3IEBACiAJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfc3BpX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9zcGlfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTExNC1zcGkiLCB9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXRlZ3JhMjAtc2ZsYXNoLmMgYi9kcml2ZXJzL3NwaS9zcGktdGVncmEyMC1zZmxhc2guYwppbmRleCA0Nzg2OWVhLi4zNTQ4Y2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktdGVncmEyMC1zZmxhc2guYworKysgYi9kcml2ZXJzL3NwaS9zcGktdGVncmEyMC1zZmxhc2guYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJcmV0dXJuIGhhbmRsZV9jcHVfYmFzZWRfeGZlcih0c2QpOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9zZmxhc2hfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRlZ3JhX3NmbGFzaF9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMjAtc2ZsYXNoIiwgfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS10ZWdyYTIwLXNsaW5rLmMgYi9kcml2ZXJzL3NwaS9zcGktdGVncmEyMC1zbGluay5jCmluZGV4IGUzYzFiOTMuLjBiOWUzMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS10ZWdyYTIwLXNsaW5rLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXRlZ3JhMjAtc2xpbmsuYwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAkuY3NfaG9sZF90aW1lID0gZmFsc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9zbGlua19vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfc2xpbmtfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTMwLXNsaW5rIiwgLmRhdGEgPSAmdGVncmEzMF9zcGlfY2RhdGEsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEyMC1zbGluayIsIC5kYXRhID0gJnRlZ3JhMjBfc3BpX2NkYXRhLCB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktdGxlNjJ4MC5jIGIvZHJpdmVycy9zcGkvc3BpLXRsZTYyeDAuYwppbmRleCAyZDQwMTBkLi5kYWY1YWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktdGxlNjJ4MC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS10bGU2MngwLmMKQEAgLTI1MywxMCArMjUzLDggQEAKIAl9CiAKIAlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGU2MngwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0ID09IE5VTEwpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJubyBtZW1vcnkgZm9yIGRldmljZSBzdGF0ZVxuIik7CisJaWYgKHN0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXN0LT51cyA9IHNwaTsKIAlzdC0+bnJfZ3BpbyA9IHBkYXRhLT5ncGlvX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXRvcGNsaWZmLXBjaC5jIGIvZHJpdmVycy9zcGkvc3BpLXRvcGNsaWZmLXBjaC5jCmluZGV4IGY0MDZiMzAuLmYwNWFiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS10b3BjbGlmZi1wY2guYworKysgYi9kcml2ZXJzL3NwaS9zcGktdG9wY2xpZmYtcGNoLmMKQEAgLTE1NzgsMTQgKzE1NzgsMTEgQEAKIAlzdHJ1Y3QgcGNoX3BkX2Rldl9zYXZlICpwZF9kZXZfc2F2ZTsKIAogCXBkX2Rldl9zYXZlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaF9wZF9kZXZfc2F2ZSksIEdGUF9LRVJORUwpOwotCWlmICghcGRfZGV2X3NhdmUpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgQ2FuJ3QgYWxsb2NhdGUgcGRfZGV2X3NhdlxuIiwgX19mdW5jX18pOworCWlmICghcGRfZGV2X3NhdmUpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWJvYXJkX2RhdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2hfc3BpX2JvYXJkX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJvYXJkX2RhdCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBDYW4ndCBhbGxvY2F0ZSBib2FyZF9kYXRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJfbm9fbWVtOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggOTM5ZWRmNC4uZDRmOTY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gMDsKIAkJCW1zID0geGZlci0+bGVuICogOCAqIDEwMDAgLyB4ZmVyLT5zcGVlZF9oejsKLQkJCW1zICs9IDEwOyAvKiBzb21lIHRvbGVyYW5jZSAqLworCQkJbXMgKz0gbXMgKyAxMDA7IC8qIHNvbWUgdG9sZXJhbmNlICovCiAKIAkJCW1zID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZtYXN0ZXItPnhmZXJfY29tcGxldGlvbiwKIAkJCQkJCQkgbXNlY3NfdG9famlmZmllcyhtcykpOwpAQCAtMTI1NSw2ICsxMjU1LDggQEAKIAkJCXNwaS0+bW9kZSB8PSBTUElfQ1NfSElHSDsKIAkJaWYgKG9mX2ZpbmRfcHJvcGVydHkobmMsICJzcGktM3dpcmUiLCBOVUxMKSkKIAkJCXNwaS0+bW9kZSB8PSBTUElfM1dJUkU7CisJCWlmIChvZl9maW5kX3Byb3BlcnR5KG5jLCAic3BpLWxzYi1maXJzdCIsIE5VTEwpKQorCQkJc3BpLT5tb2RlIHw9IFNQSV9MU0JfRklSU1Q7CiAKIAkJLyogRGV2aWNlIERVQUwvUVVBRCBtb2RlICovCiAJCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobmMsICJzcGktdHgtYnVzLXdpZHRoIiwgJnZhbHVlKSkgewpAQCAtMTI2OCwxMSArMTI3MCwxMCBAQAogCQkJCXNwaS0+bW9kZSB8PSBTUElfVFhfUVVBRDsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJZGV2X2VycigmbWFzdGVyLT5kZXYsCi0JCQkJCSJzcGktdHgtYnVzLXdpZHRoICVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkJCXZhbHVlKTsKLQkJCQlzcGlfZGV2X3B1dChzcGkpOwotCQkJCWNvbnRpbnVlOworCQkJCWRldl93YXJuKCZtYXN0ZXItPmRldiwKKwkJCQkJICJzcGktdHgtYnVzLXdpZHRoICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJCSB2YWx1ZSk7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIApAQCAtMTI4NywxMSArMTI4OCwxMCBAQAogCQkJCXNwaS0+bW9kZSB8PSBTUElfUlhfUVVBRDsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJZGV2X2VycigmbWFzdGVyLT5kZXYsCi0JCQkJCSJzcGktcngtYnVzLXdpZHRoICVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkJCXZhbHVlKTsKLQkJCQlzcGlfZGV2X3B1dChzcGkpOwotCQkJCWNvbnRpbnVlOworCQkJCWRldl93YXJuKCZtYXN0ZXItPmRldiwKKwkJCQkJICJzcGktcngtYnVzLXdpZHRoICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJCSB2YWx1ZSk7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCAyMjM2NWYxLi40ZjM4ZmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0czUyMDgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvS2NvbmZpZyIKQEAgLTkwLDggKzkwLDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcva2V1Y3IvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYmNtL0tjb25maWciCkBAIC0xNDQsNiArMTQyLDggQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbm9raWFfaDRwL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NrZWluL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9LY29uZmlnIgogCiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBmYmU4NGVkLi4xZTk3YWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0xNiw5ICsxNiw5IEBACiBvYmotJChDT05GSUdfUlRMODE5MkUpCQkrPSBydGw4MTkyZS8KIG9iai0kKENPTkZJR19SODcxMlUpCQkrPSBydGw4NzEyLwogb2JqLSQoQ09ORklHX1I4MTg4RVUpCQkrPSBydGw4MTg4ZXUvCitvYmotJChDT05GSUdfUjgxOTJFRSkJCSs9IHJ0bDgxOTJlZS8KIG9iai0kKENPTkZJR19SODcyM0FVKQkJKz0gcnRsODcyM2F1Lwogb2JqLSQoQ09ORklHX1I4ODIxQUUpCQkrPSBydGw4ODIxYWUvCi1vYmotJChDT05GSUdfUlRTNTEzOSkJCSs9IHJ0czUxMzkvCiBvYmotJChDT05GSUdfUlRTNTIwOCkJCSs9IHJ0czUyMDgvCiBvYmotJChDT05GSUdfVFJBTlpQT1JUKQkJKz0gZnJvbnRpZXIvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwpAQCAtMzksNyArMzksNiBAQAogb2JqLSQoQ09ORklHX0ZCX1hHSSkJCSs9IHhnaWZiLwogb2JqLSQoQ09ORklHX1RJRFNQQlJJREdFKQkrPSB0aWRzcGJyaWRnZS8KIG9iai0kKENPTkZJR19BQ1BJX1FVSUNLU1RBUlQpCSs9IHF1aWNrc3RhcnQvCi1vYmotJChDT05GSUdfU0JFXzJUM0UzKQkJKz0gc2JlLTJ0M2UzLwogb2JqLSQoQ09ORklHX1VTQl9FTkVTVE9SQUdFKQkrPSBrZXVjci8KIG9iai0kKENPTkZJR19CQ01fV0lNQVgpCQkrPSBiY20vCiBvYmotJChDT05GSUdfRlQxMDAwKQkJKz0gZnQxMDAwLwpAQCAtNjQsNCArNjMsNSBAQAogb2JqLSQoQ09ORklHX01URF9TUElOQU5EX01UMjlGKQkrPSBtdDI5Zl9zcGluYW5kLwogb2JqLSQoQ09ORklHX0dTX0ZQR0FCT09UKQkrPSBnc19mcGdhYm9vdC8KIG9iai0kKENPTkZJR19CVF9OT0tJQV9INFApCSs9IG5va2lhX2g0cC8KK29iai0kKENPTkZJR19DUllQVE9fU0tFSU4pCSs9IHNrZWluLwogb2JqLSQoQ09ORklHX1VOSVNZU1NQQVIpCSs9IHVuaXN5cy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2FsYXJtLWRldi5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYWxhcm0tZGV2LmMKaW5kZXggMmZjN2NkZC4uZjIwMGU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYWxhcm0tZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYWxhcm0tZGV2LmMKQEAgLTMyOSw2ICszMjksNyBAQAogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKIAkJZm9yIChpID0gMDsgaSA8IEFORFJPSURfQUxBUk1fVFlQRV9DT1VOVDsgaSsrKSB7CiAJCQl1aW50MzJfdCBhbGFybV90eXBlX21hc2sgPSAxVSA8PCBpOworCiAJCQlpZiAoYWxhcm1fZW5hYmxlZCAmIGFsYXJtX3R5cGVfbWFzaykgewogCQkJCWFsYXJtX2RiZyhJTkZPLAogCQkJCQkgICIlczogY2xlYXIgYWxhcm0sIHBlbmRpbmcgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jCmluZGV4IGNmZTRiYzguLmE3NDFkYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jCkBAIC0xMTgsNiArMTE4LDcgQEAKIAkJCQkJIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWludCByZXQ7CisKIAlyZXQgPSBwYXJhbV9zZXRfaW50KHZhbCwga3ApOwogCWlmIChiaW5kZXJfc3RvcF9vbl91c2VyX2Vycm9yIDwgMikKIAkJd2FrZV91cCgmYmluZGVyX3VzZXJfZXJyb3Jfd2FpdCk7CkBAIC0xOTQsNiArMTk1LDcgQEAKIAlzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2xvZyAqbG9nKQogewogCXN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fbG9nX2VudHJ5ICplOworCiAJZSA9ICZsb2ctPmVudHJ5W2xvZy0+bmV4dF07CiAJbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOwogCWxvZy0+bmV4dCsrOwpAQCAtNDMyLDE2ICs0MzQsMTcgQEAKIHN0YXRpYyB2b2lkIGJpbmRlcl9zZXRfbmljZShsb25nIG5pY2UpCiB7CiAJbG9uZyBtaW5fbmljZTsKKwogCWlmIChjYW5fbmljZShjdXJyZW50LCBuaWNlKSkgewogCQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIG5pY2UpOwogCQlyZXR1cm47CiAJfQotCW1pbl9uaWNlID0gMjAgLSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05JQ0VdLnJsaW1fY3VyOworCW1pbl9uaWNlID0gcmxpbWl0X3RvX25pY2UoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OSUNFXS5ybGltX2N1cik7CiAJYmluZGVyX2RlYnVnKEJJTkRFUl9ERUJVR19QUklPUklUWV9DQVAsCiAJCSAgICAgIiVkOiBuaWNlIHZhbHVlICVsZCBub3QgYWxsb3dlZCB1c2UgJWxkIGluc3RlYWRcbiIsCiAJCSAgICAgIGN1cnJlbnQtPnBpZCwgbmljZSwgbWluX25pY2UpOwogCXNldF91c2VyX25pY2UoY3VycmVudCwgbWluX25pY2UpOwotCWlmIChtaW5fbmljZSA8IDIwKQorCWlmIChtaW5fbmljZSA8PSBNQVhfTklDRSkKIAkJcmV0dXJuOwogCWJpbmRlcl91c2VyX2Vycm9yKCIlZCBSTElNSVRfTklDRSBub3Qgc2V0XG4iLCBjdXJyZW50LT5waWQpOwogfQpAQCAtNTg0LDYgKzU4Nyw3IEBACiAJZm9yIChwYWdlX2FkZHIgPSBzdGFydDsgcGFnZV9hZGRyIDwgZW5kOyBwYWdlX2FkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCWludCByZXQ7CiAJCXN0cnVjdCBwYWdlICoqcGFnZV9hcnJheV9wdHI7CisKIAkJcGFnZSA9ICZwcm9jLT5wYWdlc1socGFnZV9hZGRyIC0gcHJvYy0+YnVmZmVyKSAvIFBBR0VfU0laRV07CiAKIAkJQlVHX09OKCpwYWdlKTsKQEAgLTcyNiw2ICs3MzAsNyBAQAogCWJpbmRlcl9pbnNlcnRfYWxsb2NhdGVkX2J1ZmZlcihwcm9jLCBidWZmZXIpOwogCWlmIChidWZmZXJfc2l6ZSAhPSBzaXplKSB7CiAJCXN0cnVjdCBiaW5kZXJfYnVmZmVyICpuZXdfYnVmZmVyID0gKHZvaWQgKilidWZmZXItPmRhdGEgKyBzaXplOworCiAJCWxpc3RfYWRkKCZuZXdfYnVmZmVyLT5lbnRyeSwgJmJ1ZmZlci0+ZW50cnkpOwogCQluZXdfYnVmZmVyLT5mcmVlID0gMTsKIAkJYmluZGVyX2luc2VydF9mcmVlX2J1ZmZlcihwcm9jLCBuZXdfYnVmZmVyKTsKQEAgLTgzOCw2ICs4NDMsNyBAQAogCWlmICghbGlzdF9pc19sYXN0KCZidWZmZXItPmVudHJ5LCAmcHJvYy0+YnVmZmVycykpIHsKIAkJc3RydWN0IGJpbmRlcl9idWZmZXIgKm5leHQgPSBsaXN0X2VudHJ5KGJ1ZmZlci0+ZW50cnkubmV4dCwKIAkJCQkJCXN0cnVjdCBiaW5kZXJfYnVmZmVyLCBlbnRyeSk7CisKIAkJaWYgKG5leHQtPmZyZWUpIHsKIAkJCXJiX2VyYXNlKCZuZXh0LT5yYl9ub2RlLCAmcHJvYy0+ZnJlZV9idWZmZXJzKTsKIAkJCWJpbmRlcl9kZWxldGVfZnJlZV9idWZmZXIocHJvYywgbmV4dCk7CkBAIC04NDYsNiArODUyLDcgQEAKIAlpZiAocHJvYy0+YnVmZmVycy5uZXh0ICE9ICZidWZmZXItPmVudHJ5KSB7CiAJCXN0cnVjdCBiaW5kZXJfYnVmZmVyICpwcmV2ID0gbGlzdF9lbnRyeShidWZmZXItPmVudHJ5LnByZXYsCiAJCQkJCQlzdHJ1Y3QgYmluZGVyX2J1ZmZlciwgZW50cnkpOworCiAJCWlmIChwcmV2LT5mcmVlKSB7CiAJCQliaW5kZXJfZGVsZXRlX2ZyZWVfYnVmZmVyKHByb2MsIGJ1ZmZlcik7CiAJCQlyYl9lcmFzZSgmcHJldi0+cmJfbm9kZSwgJnByb2MtPmZyZWVfYnVmZmVycyk7CkBAIC0xMTA3LDYgKzExMTQsNyBAQAogCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp0YXJnZXRfbGlzdCkKIHsKIAlpbnQgcmV0OworCiAJaWYgKHN0cm9uZykgewogCQlpZiAocmVmLT5zdHJvbmcgPT0gMCkgewogCQkJcmV0ID0gYmluZGVyX2luY19ub2RlKHJlZi0+bm9kZSwgMSwgMSwgdGFyZ2V0X2xpc3QpOwpAQCAtMTEzOCw2ICsxMTQ2LDcgQEAKIAkJcmVmLT5zdHJvbmctLTsKIAkJaWYgKHJlZi0+c3Ryb25nID09IDApIHsKIAkJCWludCByZXQ7CisKIAkJCXJldCA9IGJpbmRlcl9kZWNfbm9kZShyZWYtPm5vZGUsIHN0cm9uZywgMSk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC0xMTc3LDYgKzExODYsNyBAQAogCQkJCSAgICAgdWludDMyX3QgZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3QgYmluZGVyX3RocmVhZCAqdGFyZ2V0X3RocmVhZDsKKwogCUJVR19PTih0LT5mbGFncyAmIFRGX09ORV9XQVkpOwogCXdoaWxlICgxKSB7CiAJCXRhcmdldF90aHJlYWQgPSB0LT5mcm9tOwpAQCAtMTI0Nyw2ICsxMjU3LDcgQEAKIAkJb2ZmX2VuZCA9ICh2b2lkICopb2ZmcCArIGJ1ZmZlci0+b2Zmc2V0c19zaXplOwogCWZvciAoOyBvZmZwIDwgb2ZmX2VuZDsgb2ZmcCsrKSB7CiAJCXN0cnVjdCBmbGF0X2JpbmRlcl9vYmplY3QgKmZwOworCiAJCWlmICgqb2ZmcCA+IGJ1ZmZlci0+ZGF0YV9zaXplIC0gc2l6ZW9mKCpmcCkgfHwKIAkJICAgIGJ1ZmZlci0+ZGF0YV9zaXplIDwgc2l6ZW9mKCpmcCkgfHwKIAkJICAgICFJU19BTElHTkVEKCpvZmZwLCBzaXplb2YodTMyKSkpIHsKQEAgLTEyNTksNiArMTI3MCw3IEBACiAJCWNhc2UgQklOREVSX1RZUEVfQklOREVSOgogCQljYXNlIEJJTkRFUl9UWVBFX1dFQUtfQklOREVSOiB7CiAJCQlzdHJ1Y3QgYmluZGVyX25vZGUgKm5vZGUgPSBiaW5kZXJfZ2V0X25vZGUocHJvYywgZnAtPmJpbmRlcik7CisKIAkJCWlmIChub2RlID09IE5VTEwpIHsKIAkJCQlwcl9lcnIoInRyYW5zYWN0aW9uIHJlbGVhc2UgJWQgYmFkIG5vZGUgJTAxNmxseFxuIiwKIAkJCQkgICAgICAgZGVidWdfaWQsICh1NjQpZnAtPmJpbmRlcik7CkBAIC0xMjcyLDYgKzEyODQsNyBAQAogCQljYXNlIEJJTkRFUl9UWVBFX0hBTkRMRToKIAkJY2FzZSBCSU5ERVJfVFlQRV9XRUFLX0hBTkRMRTogewogCQkJc3RydWN0IGJpbmRlcl9yZWYgKnJlZiA9IGJpbmRlcl9nZXRfcmVmKHByb2MsIGZwLT5oYW5kbGUpOworCiAJCQlpZiAocmVmID09IE5VTEwpIHsKIAkJCQlwcl9lcnIoInRyYW5zYWN0aW9uIHJlbGVhc2UgJWQgYmFkIGhhbmRsZSAlZFxuIiwKIAkJCQkgZGVidWdfaWQsIGZwLT5oYW5kbGUpOwpAQCAtMTM2Myw2ICsxMzc2LDcgQEAKIAl9IGVsc2UgewogCQlpZiAodHItPnRhcmdldC5oYW5kbGUpIHsKIAkJCXN0cnVjdCBiaW5kZXJfcmVmICpyZWY7CisKIAkJCXJlZiA9IGJpbmRlcl9nZXRfcmVmKHByb2MsIHRyLT50YXJnZXQuaGFuZGxlKTsKIAkJCWlmIChyZWYgPT0gTlVMTCkgewogCQkJCWJpbmRlcl91c2VyX2Vycm9yKCIlZDolZCBnb3QgdHJhbnNhY3Rpb24gdG8gaW52YWxpZCBoYW5kbGVcbiIsCkBAIC0xMzg2LDYgKzE0MDAsNyBAQAogCQl9CiAJCWlmICghKHRyLT5mbGFncyAmIFRGX09ORV9XQVkpICYmIHRocmVhZC0+dHJhbnNhY3Rpb25fc3RhY2spIHsKIAkJCXN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb24gKnRtcDsKKwogCQkJdG1wID0gdGhyZWFkLT50cmFuc2FjdGlvbl9zdGFjazsKIAkJCWlmICh0bXAtPnRvX3RocmVhZCAhPSB0aHJlYWQpIHsKIAkJCQliaW5kZXJfdXNlcl9lcnJvcigiJWQ6JWQgZ290IG5ldyB0cmFuc2FjdGlvbiB3aXRoIGJhZCB0cmFuc2FjdGlvbiBzdGFjaywgdHJhbnNhY3Rpb24gJWQgaGFzIHRhcmdldCAlZDolZFxuIiwKQEAgLTE0NTIsNyArMTQ2Nyw3IEBACiAJCXQtPmZyb20gPSB0aHJlYWQ7CiAJZWxzZQogCQl0LT5mcm9tID0gTlVMTDsKLQl0LT5zZW5kZXJfZXVpZCA9IHByb2MtPnRzay0+Y3JlZC0+ZXVpZDsKKwl0LT5zZW5kZXJfZXVpZCA9IHRhc2tfZXVpZChwcm9jLT50c2spOwogCXQtPnRvX3Byb2MgPSB0YXJnZXRfcHJvYzsKIAl0LT50b190aHJlYWQgPSB0YXJnZXRfdGhyZWFkOwogCXQtPmNvZGUgPSB0ci0+Y29kZTsKQEAgLTE1MDEsNiArMTUxNiw3IEBACiAJb2ZmX2VuZCA9ICh2b2lkICopb2ZmcCArIHRyLT5vZmZzZXRzX3NpemU7CiAJZm9yICg7IG9mZnAgPCBvZmZfZW5kOyBvZmZwKyspIHsKIAkJc3RydWN0IGZsYXRfYmluZGVyX29iamVjdCAqZnA7CisKIAkJaWYgKCpvZmZwID4gdC0+YnVmZmVyLT5kYXRhX3NpemUgLSBzaXplb2YoKmZwKSB8fAogCQkgICAgdC0+YnVmZmVyLT5kYXRhX3NpemUgPCBzaXplb2YoKmZwKSB8fAogCQkgICAgIUlTX0FMSUdORUQoKm9mZnAsIHNpemVvZih1MzIpKSkgewpAQCAtMTUxNSw2ICsxNTMxLDcgQEAKIAkJY2FzZSBCSU5ERVJfVFlQRV9XRUFLX0JJTkRFUjogewogCQkJc3RydWN0IGJpbmRlcl9yZWYgKnJlZjsKIAkJCXN0cnVjdCBiaW5kZXJfbm9kZSAqbm9kZSA9IGJpbmRlcl9nZXRfbm9kZShwcm9jLCBmcC0+YmluZGVyKTsKKwogCQkJaWYgKG5vZGUgPT0gTlVMTCkgewogCQkJCW5vZGUgPSBiaW5kZXJfbmV3X25vZGUocHJvYywgZnAtPmJpbmRlciwgZnAtPmNvb2tpZSk7CiAJCQkJaWYgKG5vZGUgPT0gTlVMTCkgewpAQCAtMTUyOSw2ICsxNTQ2LDcgQEAKIAkJCQkJcHJvYy0+cGlkLCB0aHJlYWQtPnBpZCwKIAkJCQkJKHU2NClmcC0+YmluZGVyLCBub2RlLT5kZWJ1Z19pZCwKIAkJCQkJKHU2NClmcC0+Y29va2llLCAodTY0KW5vZGUtPmNvb2tpZSk7CisJCQkJcmV0dXJuX2Vycm9yID0gQlJfRkFJTEVEX1JFUExZOwogCQkJCWdvdG8gZXJyX2JpbmRlcl9nZXRfcmVmX2Zvcl9ub2RlX2ZhaWxlZDsKIAkJCX0KIAkJCXJlZiA9IGJpbmRlcl9nZXRfcmVmX2Zvcl9ub2RlKHRhcmdldF9wcm9jLCBub2RlKTsKQEAgLTE1NTMsNiArMTU3MSw3IEBACiAJCWNhc2UgQklOREVSX1RZUEVfSEFORExFOgogCQljYXNlIEJJTkRFUl9UWVBFX1dFQUtfSEFORExFOiB7CiAJCQlzdHJ1Y3QgYmluZGVyX3JlZiAqcmVmID0gYmluZGVyX2dldF9yZWYocHJvYywgZnAtPmhhbmRsZSk7CisKIAkJCWlmIChyZWYgPT0gTlVMTCkgewogCQkJCWJpbmRlcl91c2VyX2Vycm9yKCIlZDolZCBnb3QgdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIGhhbmRsZSwgJWRcbiIsCiAJCQkJCQlwcm9jLT5waWQsCkBAIC0xNTc1LDYgKzE1OTQsNyBAQAogCQkJCQkgICAgICh1NjQpcmVmLT5ub2RlLT5wdHIpOwogCQkJfSBlbHNlIHsKIAkJCQlzdHJ1Y3QgYmluZGVyX3JlZiAqbmV3X3JlZjsKKwogCQkJCW5ld19yZWYgPSBiaW5kZXJfZ2V0X3JlZl9mb3Jfbm9kZSh0YXJnZXRfcHJvYywgcmVmLT5ub2RlKTsKIAkJCQlpZiAobmV3X3JlZiA9PSBOVUxMKSB7CiAJCQkJCXJldHVybl9lcnJvciA9IEJSX0ZBSUxFRF9SRVBMWTsKQEAgLTE2OTQsNiArMTcxNCw3IEBACiAKIAl7CiAJCXN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fbG9nX2VudHJ5ICpmZTsKKwogCQlmZSA9IGJpbmRlcl90cmFuc2FjdGlvbl9sb2dfYWRkKCZiaW5kZXJfdHJhbnNhY3Rpb25fbG9nX2ZhaWxlZCk7CiAJCSpmZSA9ICplOwogCX0KQEAgLTIwMjQsMTIgKzIwNDUsMTQgQEAKIAkJCXN0cnVjdCBiaW5kZXJfd29yayAqdzsKIAkJCWJpbmRlcl91aW50cHRyX3QgY29va2llOwogCQkJc3RydWN0IGJpbmRlcl9yZWZfZGVhdGggKmRlYXRoID0gTlVMTDsKKwogCQkJaWYgKGdldF91c2VyKGNvb2tpZSwgKGJpbmRlcl91aW50cHRyX3QgX191c2VyICopcHRyKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQkJcHRyICs9IHNpemVvZih2b2lkICopOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmcHJvYy0+ZGVsaXZlcmVkX2RlYXRoLCBlbnRyeSkgewogCQkJCXN0cnVjdCBiaW5kZXJfcmVmX2RlYXRoICp0bXBfZGVhdGggPSBjb250YWluZXJfb2Yodywgc3RydWN0IGJpbmRlcl9yZWZfZGVhdGgsIHdvcmspOworCiAJCQkJaWYgKHRtcF9kZWF0aC0+Y29va2llID09IGNvb2tpZSkgewogCQkJCQlkZWF0aCA9IHRtcF9kZWF0aDsKIAkJCQkJYnJlYWs7CkBAIC0yMjE2LDYgKzIyMzksNyBAQAogCQkJY29uc3QgY2hhciAqY21kX25hbWU7CiAJCQlpbnQgc3Ryb25nID0gbm9kZS0+aW50ZXJuYWxfc3Ryb25nX3JlZnMgfHwgbm9kZS0+bG9jYWxfc3Ryb25nX3JlZnM7CiAJCQlpbnQgd2VhayA9ICFobGlzdF9lbXB0eSgmbm9kZS0+cmVmcykgfHwgbm9kZS0+bG9jYWxfd2Vha19yZWZzIHx8IHN0cm9uZzsKKwogCQkJaWYgKHdlYWsgJiYgIW5vZGUtPmhhc193ZWFrX3JlZikgewogCQkJCWNtZCA9IEJSX0lOQ1JFRlM7CiAJCQkJY21kX25hbWUgPSAiQlJfSU5DUkVGUyI7CkBAIC0yMzIyLDYgKzIzNDYsNyBAQAogCQlCVUdfT04odC0+YnVmZmVyID09IE5VTEwpOwogCQlpZiAodC0+YnVmZmVyLT50YXJnZXRfbm9kZSkgewogCQkJc3RydWN0IGJpbmRlcl9ub2RlICp0YXJnZXRfbm9kZSA9IHQtPmJ1ZmZlci0+dGFyZ2V0X25vZGU7CisKIAkJCXRyLnRhcmdldC5wdHIgPSB0YXJnZXRfbm9kZS0+cHRyOwogCQkJdHIuY29va2llID0gIHRhcmdldF9ub2RlLT5jb29raWU7CiAJCQl0LT5zYXZlZF9wcmlvcml0eSA9IHRhc2tfbmljZShjdXJyZW50KTsKQEAgLTIzNDMsNiArMjM2OCw3IEBACiAKIAkJaWYgKHQtPmZyb20pIHsKIAkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqc2VuZGVyID0gdC0+ZnJvbS0+cHJvYy0+dHNrOworCiAJCQl0ci5zZW5kZXJfcGlkID0gdGFza190Z2lkX25yX25zKHNlbmRlciwKIAkJCQkJCQl0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpOwogCQl9IGVsc2UgewpAQCAtMjQxMyw2ICsyNDM5LDcgQEAKIHN0YXRpYyB2b2lkIGJpbmRlcl9yZWxlYXNlX3dvcmsoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3QgYmluZGVyX3dvcmsgKnc7CisKIAl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKIAkJdyA9IGxpc3RfZmlyc3RfZW50cnkobGlzdCwgc3RydWN0IGJpbmRlcl93b3JrLCBlbnRyeSk7CiAJCWxpc3RfZGVsX2luaXQoJnctPmVudHJ5KTsKQEAgLTI1NzQsNiArMjYwMSw3IEBACiAJc3RydWN0IGJpbmRlcl90aHJlYWQgKnRocmVhZDsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IF9JT0NfU0laRShjbWQpOwogCXZvaWQgX191c2VyICp1YnVmID0gKHZvaWQgX191c2VyICopYXJnOworCWt1aWRfdCBjdXJyX2V1aWQgPSBjdXJyZW50X2V1aWQoKTsKIAogCS8qcHJfaW5mbygiYmluZGVyX2lvY3RsOiAlZDolZCAleCAlbHhcbiIsIHByb2MtPnBpZCwgY3VycmVudC0+cGlkLCBjbWQsIGFyZyk7Ki8KIApAQCAtMjU5Myw2ICsyNjIxLDcgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQklOREVSX1dSSVRFX1JFQUQ6IHsKIAkJc3RydWN0IGJpbmRlcl93cml0ZV9yZWFkIGJ3cjsKKwogCQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGJpbmRlcl93cml0ZV9yZWFkKSkgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyOwpAQCAtMjY1OCwxNSArMjY4NywxNiBAQAogCQkJZ290byBlcnI7CiAJCX0KIAkJaWYgKHVpZF92YWxpZChiaW5kZXJfY29udGV4dF9tZ3JfdWlkKSkgewotCQkJaWYgKCF1aWRfZXEoYmluZGVyX2NvbnRleHRfbWdyX3VpZCwgY3VycmVudC0+Y3JlZC0+ZXVpZCkpIHsKKwkJCWlmICghdWlkX2VxKGJpbmRlcl9jb250ZXh0X21ncl91aWQsIGN1cnJfZXVpZCkpIHsKIAkJCQlwcl9lcnIoIkJJTkRFUl9TRVRfQ09OVEVYVF9NR1IgYmFkIHVpZCAlZCAhPSAlZFxuIiwKLQkJCQkgICAgICAgZnJvbV9rdWlkKCZpbml0X3VzZXJfbnMsIGN1cnJlbnQtPmNyZWQtPmV1aWQpLAorCQkJCSAgICAgICBmcm9tX2t1aWQoJmluaXRfdXNlcl9ucywgY3Vycl9ldWlkKSwKIAkJCQkgICAgICAgZnJvbV9rdWlkKCZpbml0X3VzZXJfbnMsIGJpbmRlcl9jb250ZXh0X21ncl91aWQpKTsKIAkJCQlyZXQgPSAtRVBFUk07CiAJCQkJZ290byBlcnI7CiAJCQl9Ci0JCX0gZWxzZQotCQkJYmluZGVyX2NvbnRleHRfbWdyX3VpZCA9IGN1cnJlbnQtPmNyZWQtPmV1aWQ7CisJCX0gZWxzZSB7CisJCQliaW5kZXJfY29udGV4dF9tZ3JfdWlkID0gY3Vycl9ldWlkOworCQl9CiAJCWJpbmRlcl9jb250ZXh0X21ncl9ub2RlID0gYmluZGVyX25ld19ub2RlKHByb2MsIDAsIDApOwogCQlpZiAoYmluZGVyX2NvbnRleHRfbWdyX25vZGUgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKQEAgLTI2ODMsMTYgKzI3MTMsMjAgQEAKIAkJYmluZGVyX2ZyZWVfdGhyZWFkKHByb2MsIHRocmVhZCk7CiAJCXRocmVhZCA9IE5VTEw7CiAJCWJyZWFrOwotCWNhc2UgQklOREVSX1ZFUlNJT046CisJY2FzZSBCSU5ERVJfVkVSU0lPTjogeworCQlzdHJ1Y3QgYmluZGVyX3ZlcnNpb24gX191c2VyICp2ZXIgPSB1YnVmOworCiAJCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgYmluZGVyX3ZlcnNpb24pKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnI7CiAJCX0KLQkJaWYgKHB1dF91c2VyKEJJTkRFUl9DVVJSRU5UX1BST1RPQ09MX1ZFUlNJT04sICYoKHN0cnVjdCBiaW5kZXJfdmVyc2lvbiAqKXVidWYpLT5wcm90b2NvbF92ZXJzaW9uKSkgeworCQlpZiAocHV0X3VzZXIoQklOREVSX0NVUlJFTlRfUFJPVE9DT0xfVkVSU0lPTiwKKwkJCSAgICAgJnZlci0+cHJvdG9jb2xfdmVyc2lvbikpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycjsKIAkJfQogCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnI7CkBAIC0yNzEzLDYgKzI3NDcsNyBAQAogc3RhdGljIHZvaWQgYmluZGVyX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCiAJYmluZGVyX2RlYnVnKEJJTkRFUl9ERUJVR19PUEVOX0NMT1NFLAogCQkgICAgICIlZCBvcGVuIHZtIGFyZWEgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLAogCQkgICAgIHByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCkBAIC0yNzIzLDYgKzI3NTgsNyBAQAogc3RhdGljIHZvaWQgYmluZGVyX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwogCWJpbmRlcl9kZWJ1ZyhCSU5ERVJfREVCVUdfT1BFTl9DTE9TRSwKIAkJICAgICAiJWQgY2xvc2Ugdm0gYXJlYSAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsCiAJCSAgICAgcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKQEAgLTI4NjUsNiArMjkwMSw3IEBACiAKIAlpZiAoYmluZGVyX2RlYnVnZnNfZGlyX2VudHJ5X3Byb2MpIHsKIAkJY2hhciBzdHJidWZbMTFdOworCiAJCXNucHJpbnRmKHN0cmJ1Ziwgc2l6ZW9mKHN0cmJ1ZiksICIldSIsIHByb2MtPnBpZCk7CiAJCXByb2MtPmRlYnVnZnNfZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHN0cmJ1ZiwgU19JUlVHTywKIAkJCWJpbmRlcl9kZWJ1Z2ZzX2Rpcl9lbnRyeV9wcm9jLCBwcm9jLCAmYmluZGVyX3Byb2NfZm9wcyk7CkBAIC0yODg2LDggKzI5MjMsMTAgQEAKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAlpbnQgd2FrZV9jb3VudCA9IDA7CisKIAlmb3IgKG4gPSByYl9maXJzdCgmcHJvYy0+dGhyZWFkcyk7IG4gIT0gTlVMTDsgbiA9IHJiX25leHQobikpIHsKIAkJc3RydWN0IGJpbmRlcl90aHJlYWQgKnRocmVhZCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBiaW5kZXJfdGhyZWFkLCByYl9ub2RlKTsKKwogCQl0aHJlYWQtPmxvb3BlciB8PSBCSU5ERVJfTE9PUEVSX1NUQVRFX05FRURfUkVUVVJOOwogCQlpZiAodGhyZWFkLT5sb29wZXIgJiBCSU5ERVJfTE9PUEVSX1NUQVRFX1dBSVRJTkcpIHsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdGhyZWFkLT53YWl0KTsKQEAgLTI5MDQsNiArMjk0Myw3IEBACiBzdGF0aWMgaW50IGJpbmRlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqbm9kcCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCiAJZGVidWdmc19yZW1vdmUocHJvYy0+ZGVidWdmc19lbnRyeSk7CiAJYmluZGVyX2RlZmVyX3dvcmsocHJvYywgQklOREVSX0RFRkVSUkVEX1JFTEVBU0UpOwogCkBAIC0zMDY1LDYgKzMxMDUsNyBAQAogCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzOwogCiAJaW50IGRlZmVyOworCiAJZG8gewogCQliaW5kZXJfbG9jayhfX2Z1bmNfXyk7CiAJCW11dGV4X2xvY2soJmJpbmRlcl9kZWZlcnJlZF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYwppbmRleCAzZDViZjE0Li4zODliOGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbi5jCkBAIC00MDgsNiArNDA4LDcgQEAKIAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBpb25faGFuZGxlICplbnRyeSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpb25faGFuZGxlLCBub2RlKTsKKwogCQlpZiAoYnVmZmVyIDwgZW50cnktPmJ1ZmZlcikKIAkJCW4gPSBuLT5yYl9sZWZ0OwogCQllbHNlIGlmIChidWZmZXIgPiBlbnRyeS0+YnVmZmVyKQpAQCAtNjI2LDYgKzYyNywxMCBAQAogewogCXN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIgPSBoYW5kbGUtPmJ1ZmZlcjsKIAorCWlmICghaGFuZGxlLT5rbWFwX2NudCkgeworCQlXQVJOKDEsICIlczogRG91YmxlIHVubWFwIGRldGVjdGVkISBiYWlsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CiAJaGFuZGxlLT5rbWFwX2NudC0tOwogCWlmICghaGFuZGxlLT5rbWFwX2NudCkKIAkJaW9uX2J1ZmZlcl9rbWFwX3B1dChidWZmZXIpOwpAQCAtNzIwLDkgKzcyNSwxMSBAQAogewogCWludCBzZXJpYWwgPSAtMTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwogCWZvciAobm9kZSA9IHJiX2ZpcnN0KHJvb3QpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkgewogCQlzdHJ1Y3QgaW9uX2NsaWVudCAqY2xpZW50ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGlvbl9jbGllbnQsCiAJCQkJCQlub2RlKTsKKwogCQlpZiAoc3RyY21wKGNsaWVudC0+bmFtZSwgbmFtZSkpCiAJCQljb250aW51ZTsKIAkJc2VyaWFsID0gbWF4KHNlcmlhbCwgY2xpZW50LT5kaXNwbGF5X3NlcmlhbCk7CkBAIC0xMDM1LDEyICsxMDQyLDE0IEBACiBzdGF0aWMgdm9pZCBpb25fZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCiB7CiAJc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwogCWlvbl9idWZmZXJfcHV0KGJ1ZmZlcik7CiB9CiAKIHN0YXRpYyB2b2lkICppb25fZG1hX2J1Zl9rbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIgPSBkbWFidWYtPnByaXY7CisKIAlyZXR1cm4gYnVmZmVyLT52YWRkciArIG9mZnNldCAqIFBBR0VfU0laRTsKIH0KIApAQCAtMTI5Miw2ICsxMzAxLDcgQEAKIAljYXNlIElPTl9JT0NfSU1QT1JUOgogCXsKIAkJc3RydWN0IGlvbl9oYW5kbGUgKmhhbmRsZTsKKwogCQloYW5kbGUgPSBpb25faW1wb3J0X2RtYV9idWYoY2xpZW50LCBkYXRhLmZkLmZkKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKQogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwpAQCAtMTM5Myw2ICsxNDAzLDcgQEAKIAkJc3RydWN0IGlvbl9jbGllbnQgKmNsaWVudCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpb25fY2xpZW50LAogCQkJCQkJICAgICBub2RlKTsKIAkJc2l6ZV90IHNpemUgPSBpb25fZGVidWdfaGVhcF90b3RhbChjbGllbnQsIGhlYXAtPmlkKTsKKwogCQlpZiAoIXNpemUpCiAJCQljb250aW51ZTsKIAkJaWYgKGNsaWVudC0+dGFzaykgewpAQCAtMTUxNiw2ICsxNTI3LDcgQEAKIAogCWlmICghZGVidWdfZmlsZSkgewogCQljaGFyIGJ1ZlsyNTZdLCAqcGF0aDsKKwogCQlwYXRoID0gZGVudHJ5X3BhdGgoZGV2LT5oZWFwc19kZWJ1Z19yb290LCBidWYsIDI1Nik7CiAJCXByX2VycigiRmFpbGVkIHRvIGNyZWF0ZSBoZWFwIGRlYnVnZnMgYXQgJXMvJXNcbiIsCiAJCQlwYXRoLCBoZWFwLT5uYW1lKTsKQEAgLTE1MzEsNiArMTU0Myw3IEBACiAJCQkmZGVidWdfc2hyaW5rX2ZvcHMpOwogCQlpZiAoIWRlYnVnX2ZpbGUpIHsKIAkJCWNoYXIgYnVmWzI1Nl0sICpwYXRoOworCiAJCQlwYXRoID0gZGVudHJ5X3BhdGgoZGV2LT5oZWFwc19kZWJ1Z19yb290LCBidWYsIDI1Nik7CiAJCQlwcl9lcnIoIkZhaWxlZCB0byBjcmVhdGUgaGVhcCBzaHJpbmtlciBkZWJ1Z2ZzIGF0ICVzLyVzXG4iLAogCQkJCXBhdGgsIGRlYnVnX25hbWUpOwpAQCAtMTYwNiw2ICsxNjE5LDcgQEAKIAogCQlpZiAoZGF0YS0+aGVhcHNbaV0uYmFzZSA9PSAwKSB7CiAJCQlwaHlzX2FkZHJfdCBwYWRkcjsKKwogCQkJcGFkZHIgPSBtZW1ibG9ja19hbGxvY19iYXNlKGRhdGEtPmhlYXBzW2ldLnNpemUsCiAJCQkJCQkgICAgZGF0YS0+aGVhcHNbaV0uYWxpZ24sCiAJCQkJCQkgICAgTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9jYXJ2ZW91dF9oZWFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NhcnZlb3V0X2hlYXAuYwppbmRleCAzY2IwNWI5Li5kY2I2ZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NhcnZlb3V0X2hlYXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NhcnZlb3V0X2hlYXAuYwpAQCAtODEsNyArODEsNyBAQAogCWlmIChhbGlnbiA+IFBBR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ190YWJsZSksIEdGUF9LRVJORUwpOworCXRhYmxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNnX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0ID0gc2dfYWxsb2NfdGFibGUodGFibGUsIDEsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9jaHVua19oZWFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NodW5rX2hlYXAuYwppbmRleCBkNDBmNWY4Li4zZjJjMTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NodW5rX2hlYXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX2NodW5rX2hlYXAuYwpAQCAtNTUsNyArNTUsNyBAQAogCWlmIChhbGxvY2F0ZWRfc2l6ZSA+IGNodW5rX2hlYXAtPnNpemUgLSBjaHVua19oZWFwLT5hbGxvY2F0ZWQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdGFibGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwl0YWJsZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ190YWJsZSksIEdGUF9LRVJORUwpOwogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldCA9IHNnX2FsbG9jX3RhYmxlKHRhYmxlLCBudW1fY2h1bmtzLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25faGVhcC5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9oZWFwLmMKaW5kZXggYmRjNmEyOC4uNDYwNWUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9oZWFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9oZWFwLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlmb3JfZWFjaF9zZyh0YWJsZS0+c2dsLCBzZywgdGFibGUtPm5lbnRzLCBpKSB7CiAJCWludCBucGFnZXNfdGhpc19lbnRyeSA9IFBBR0VfQUxJR04oc2ctPmxlbmd0aCkgLyBQQUdFX1NJWkU7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShzZyk7CisKIAkJQlVHX09OKGkgPj0gbnBhZ2VzKTsKIAkJZm9yIChqID0gMDsgaiA8IG5wYWdlc190aGlzX2VudHJ5OyBqKyspCiAJCQkqKHRtcCsrKSA9IHBhZ2UrKzsKQEAgLTEwNSw2ICsxMDYsNyBAQAogc3RhdGljIGludCBpb25faGVhcF9jbGVhcl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtLCBwZ3Byb3RfdCBwZ3Byb3QpCiB7CiAJdm9pZCAqYWRkciA9IHZtX21hcF9yYW0ocGFnZXMsIG51bSwgLTEsIHBncHJvdCk7CisKIAlpZiAoIWFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChhZGRyLCAwLCBQQUdFX1NJWkUgKiBudW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9wYWdlX3Bvb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25fcGFnZV9wb29sLmMKaW5kZXggZWNiNWZjMy4uNTg2NGYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9wYWdlX3Bvb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX3BhZ2VfcG9vbC5jCkBAIC0yMSwxMyArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgImlvbl9wcml2LmgiCiAKLXN0cnVjdCBpb25fcGFnZV9wb29sX2l0ZW0gewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KIHN0YXRpYyB2b2lkICppb25fcGFnZV9wb29sX2FsbG9jX3BhZ2VzKHN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMocG9vbC0+Z2ZwX21hc2ssIHBvb2wtPm9yZGVyKTsKQEAgLTQ3LDE5ICs0MywxMiBAQAogCiBzdGF0aWMgaW50IGlvbl9wYWdlX3Bvb2xfYWRkKHN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgaW9uX3BhZ2VfcG9vbF9pdGVtICppdGVtOwotCi0JaXRlbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb25fcGFnZV9wb29sX2l0ZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZW0pCi0JCXJldHVybiAtRU5PTUVNOwotCiAJbXV0ZXhfbG9jaygmcG9vbC0+bXV0ZXgpOwotCWl0ZW0tPnBhZ2UgPSBwYWdlOwogCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgewotCQlsaXN0X2FkZF90YWlsKCZpdGVtLT5saXN0LCAmcG9vbC0+aGlnaF9pdGVtcyk7CisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnBvb2wtPmhpZ2hfaXRlbXMpOwogCQlwb29sLT5oaWdoX2NvdW50Kys7CiAJfSBlbHNlIHsKLQkJbGlzdF9hZGRfdGFpbCgmaXRlbS0+bGlzdCwgJnBvb2wtPmxvd19pdGVtcyk7CisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnBvb2wtPmxvd19pdGVtcyk7CiAJCXBvb2wtPmxvd19jb3VudCsrOwogCX0KIAltdXRleF91bmxvY2soJnBvb2wtPm11dGV4KTsKQEAgLTY4LDI4ICs1NywyMyBAQAogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKmlvbl9wYWdlX3Bvb2xfcmVtb3ZlKHN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sLCBib29sIGhpZ2gpCiB7Ci0Jc3RydWN0IGlvbl9wYWdlX3Bvb2xfaXRlbSAqaXRlbTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWlmIChoaWdoKSB7CiAJCUJVR19PTighcG9vbC0+aGlnaF9jb3VudCk7Ci0JCWl0ZW0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZwb29sLT5oaWdoX2l0ZW1zLAotCQkJCQlzdHJ1Y3QgaW9uX3BhZ2VfcG9vbF9pdGVtLCBsaXN0KTsKKwkJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnkoJnBvb2wtPmhpZ2hfaXRlbXMsIHN0cnVjdCBwYWdlLCBscnUpOwogCQlwb29sLT5oaWdoX2NvdW50LS07CiAJfSBlbHNlIHsKIAkJQlVHX09OKCFwb29sLT5sb3dfY291bnQpOwotCQlpdGVtID0gbGlzdF9maXJzdF9lbnRyeSgmcG9vbC0+bG93X2l0ZW1zLAotCQkJCQlzdHJ1Y3QgaW9uX3BhZ2VfcG9vbF9pdGVtLCBsaXN0KTsKKwkJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnkoJnBvb2wtPmxvd19pdGVtcywgc3RydWN0IHBhZ2UsIGxydSk7CiAJCXBvb2wtPmxvd19jb3VudC0tOwogCX0KIAotCWxpc3RfZGVsKCZpdGVtLT5saXN0KTsKLQlwYWdlID0gaXRlbS0+cGFnZTsKLQlrZnJlZShpdGVtKTsKKwlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAlyZXR1cm4gcGFnZTsKIH0KIAotdm9pZCAqaW9uX3BhZ2VfcG9vbF9hbGxvYyhzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCkKK3N0cnVjdCBwYWdlICppb25fcGFnZV9wb29sX2FsbG9jKHN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIApAQCAtMTEyLDYgKzk2LDggQEAKIHsKIAlpbnQgcmV0OwogCisJQlVHX09OKHBvb2wtPm9yZGVyICE9IGNvbXBvdW5kX29yZGVyKHBhZ2UpKTsKKwogCXJldCA9IGlvbl9wYWdlX3Bvb2xfYWRkKHBvb2wsIHBhZ2UpOwogCWlmIChyZXQpCiAJCWlvbl9wYWdlX3Bvb2xfZnJlZV9wYWdlcyhwb29sLCBwYWdlKTsKQEAgLTExOSwxMiArMTA1LDEyIEBACiAKIHN0YXRpYyBpbnQgaW9uX3BhZ2VfcG9vbF90b3RhbChzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCwgYm9vbCBoaWdoKQogewotCWludCB0b3RhbCA9IDA7CisJaW50IGNvdW50ID0gcG9vbC0+bG93X2NvdW50OwogCi0JdG90YWwgKz0gaGlnaCA/IChwb29sLT5oaWdoX2NvdW50ICsgcG9vbC0+bG93X2NvdW50KSAqCi0JCSgxIDw8IHBvb2wtPm9yZGVyKSA6Ci0JCQlwb29sLT5sb3dfY291bnQgKiAoMSA8PCBwb29sLT5vcmRlcik7Ci0JcmV0dXJuIHRvdGFsOworCWlmIChoaWdoKQorCQljb3VudCArPSBwb29sLT5oaWdoX2NvdW50OworCisJcmV0dXJuIGNvdW50IDw8IHBvb2wtPm9yZGVyOwogfQogCiBpbnQgaW9uX3BhZ2VfcG9vbF9zaHJpbmsoc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrLApAQCAtMTMzLDcgKzExOSwxMCBAQAogCWludCBmcmVlZDsKIAlib29sIGhpZ2g7CiAKLQloaWdoID0gISEoZ2ZwX21hc2sgJiBfX0dGUF9ISUdITUVNKTsKKwlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkKKwkJaGlnaCA9IDE7CisJZWxzZQorCQloaWdoID0gISEoZ2ZwX21hc2sgJiBfX0dGUF9ISUdITUVNKTsKIAogCWlmIChucl90b19zY2FuID09IDApCiAJCXJldHVybiBpb25fcGFnZV9wb29sX3RvdGFsKHBvb2wsIGhpZ2gpOwpAQCAtMTY3LDcgKzE1Niw3IEBACiAJcG9vbC0+bG93X2NvdW50ID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmcG9vbC0+bG93X2l0ZW1zKTsKIAlJTklUX0xJU1RfSEVBRCgmcG9vbC0+aGlnaF9pdGVtcyk7Ci0JcG9vbC0+Z2ZwX21hc2sgPSBnZnBfbWFzazsKKwlwb29sLT5nZnBfbWFzayA9IGdmcF9tYXNrIHwgX19HRlBfQ09NUDsKIAlwb29sLT5vcmRlciA9IG9yZGVyOwogCW11dGV4X2luaXQoJnBvb2wtPm11dGV4KTsKIAlwbGlzdF9ub2RlX2luaXQoJnBvb2wtPmxpc3QsIG9yZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25fcHJpdi5oIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9wcml2LmgKaW5kZXggMWViYTNmMi4uYzhmMDE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9wcml2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9wcml2LmgKQEAgLTE3OCw2ICsxNzgsNyBAQAogCXNwaW5sb2NrX3QgZnJlZV9sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxdWV1ZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKIAlpbnQgKCpkZWJ1Z19zaG93KShzdHJ1Y3QgaW9uX2hlYXAgKmhlYXAsIHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOwogfTsKIApAQCAtMzc3LDcgKzM3OCw3IEBACiAKIHN0cnVjdCBpb25fcGFnZV9wb29sICppb25fcGFnZV9wb29sX2NyZWF0ZShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTsKIHZvaWQgaW9uX3BhZ2VfcG9vbF9kZXN0cm95KHN0cnVjdCBpb25fcGFnZV9wb29sICopOwotdm9pZCAqaW9uX3BhZ2VfcG9vbF9hbGxvYyhzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqKTsKK3N0cnVjdCBwYWdlICppb25fcGFnZV9wb29sX2FsbG9jKHN0cnVjdCBpb25fcGFnZV9wb29sICopOwogdm9pZCBpb25fcGFnZV9wb29sX2ZyZWUoc3RydWN0IGlvbl9wYWdlX3Bvb2wgKiwgc3RydWN0IHBhZ2UgKik7CiAKIC8qKiBpb25fcGFnZV9wb29sX3NocmluayAtIHNocmlua3MgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBjYWNoZWQgaW4gdGhlIHBvb2wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25fc3lzdGVtX2hlYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25fc3lzdGVtX2hlYXAuYwppbmRleCBjOTIzNjMzLi5jYjdhZTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9pb24vaW9uX3N5c3RlbV9oZWFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9zeXN0ZW1faGVhcC5jCkBAIC0zNCw2ICszNCw3IEBACiBzdGF0aWMgaW50IG9yZGVyX3RvX2luZGV4KHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBudW1fb3JkZXJzOyBpKyspCiAJCWlmIChvcmRlciA9PSBvcmRlcnNbaV0pCiAJCQlyZXR1cm4gaTsKQEAgLTQxLDcgKzQyLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgb3JkZXJfdG9fc2l6ZShpbnQgb3JkZXIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcmRlcl90b19zaXplKGludCBvcmRlcikKIHsKIAlyZXR1cm4gUEFHRV9TSVpFIDw8IG9yZGVyOwogfQpAQCAtNzIsMTQgKzczLDEyIEBACiAKIAkJaWYgKG9yZGVyID4gNCkKIAkJCWdmcF9mbGFncyA9IGhpZ2hfb3JkZXJfZ2ZwX2ZsYWdzOwotCQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX2ZsYWdzLCBvcmRlcik7CisJCXBhZ2UgPSBhbGxvY19wYWdlcyhnZnBfZmxhZ3MgfCBfX0dGUF9DT01QLCBvcmRlcik7CiAJCWlmICghcGFnZSkKIAkJCXJldHVybiBOVUxMOwogCQlpb25fcGFnZXNfc3luY19mb3JfZGV2aWNlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSA8PCBvcmRlciwKIAkJCQkJCURNQV9CSURJUkVDVElPTkFMKTsKIAl9Ci0JaWYgKCFwYWdlKQotCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiBwYWdlOwogfQpAQCAtOTIsNiArOTEsNyBAQAogCiAJaWYgKCFjYWNoZWQgJiYgIShidWZmZXItPnByaXZhdGVfZmxhZ3MgJiBJT05fUFJJVl9GTEFHX1NIUklOS0VSX0ZSRUUpKSB7CiAJCXN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sID0gaGVhcC0+cG9vbHNbb3JkZXJfdG9faW5kZXgob3JkZXIpXTsKKwogCQlpb25fcGFnZV9wb29sX2ZyZWUocG9vbCwgcGFnZSk7CiAJfSBlbHNlIHsKIAkJX19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKQEAgLTEyNCw3ICsxMjQsNiBAQAogCiAJCWluZm8tPnBhZ2UgPSBwYWdlOwogCQlpbmZvLT5vcmRlciA9IG9yZGVyc1tpXTsKLQkJSU5JVF9MSVNUX0hFQUQoJmluZm8tPmxpc3QpOwogCQlyZXR1cm4gaW5mbzsKIAl9CiAJa2ZyZWUoaW5mbyk7CkBAIC0xNDIsNyArMTQxLDYgQEAKIAkJCQkJCQloZWFwKTsKIAlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOwogCXN0cnVjdCBwYWdlX2luZm8gKmluZm8sICp0bXBfaW5mbzsKIAlpbnQgaSA9IDA7CkBAIC0xNjAsMjQgKzE1OCwyMyBAQAogCQlpbmZvID0gYWxsb2NfbGFyZ2VzdF9hdmFpbGFibGUoc3lzX2hlYXAsIGJ1ZmZlciwgc2l6ZV9yZW1haW5pbmcsCiAJCQkJCQltYXhfb3JkZXIpOwogCQlpZiAoIWluZm8pCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZnJlZV9wYWdlczsKIAkJbGlzdF9hZGRfdGFpbCgmaW5mby0+bGlzdCwgJnBhZ2VzKTsKLQkJc2l6ZV9yZW1haW5pbmcgLT0gKDEgPDwgaW5mby0+b3JkZXIpICogUEFHRV9TSVpFOworCQlzaXplX3JlbWFpbmluZyAtPSBQQUdFX1NJWkUgPDwgaW5mby0+b3JkZXI7CiAJCW1heF9vcmRlciA9IGluZm8tPm9yZGVyOwogCQlpKys7CiAJfQotCXRhYmxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJdGFibGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dfdGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRhYmxlKQotCQlnb3RvIGVycjsKKwkJZ290byBmcmVlX3BhZ2VzOwogCi0JcmV0ID0gc2dfYWxsb2NfdGFibGUodGFibGUsIGksIEdGUF9LRVJORUwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMTsKKwlpZiAoc2dfYWxsb2NfdGFibGUodGFibGUsIGksIEdGUF9LRVJORUwpKQorCQlnb3RvIGZyZWVfdGFibGU7CiAKIAlzZyA9IHRhYmxlLT5zZ2w7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGluZm8sIHRtcF9pbmZvLCAmcGFnZXMsIGxpc3QpIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBpbmZvLT5wYWdlOwotCQlzZ19zZXRfcGFnZShzZywgcGFnZSwgKDEgPDwgaW5mby0+b3JkZXIpICogUEFHRV9TSVpFLCAwKTsKKwkJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIFBBR0VfU0laRSA8PCBpbmZvLT5vcmRlciwgMCk7CiAJCXNnID0gc2dfbmV4dChzZyk7CiAJCWxpc3RfZGVsKCZpbmZvLT5saXN0KTsKIAkJa2ZyZWUoaW5mbyk7CkBAIC0xODUsOSArMTgyLDEwIEBACiAKIAlidWZmZXItPnByaXZfdmlydCA9IHRhYmxlOwogCXJldHVybiAwOwotZXJyMToKKworZnJlZV90YWJsZToKIAlrZnJlZSh0YWJsZSk7Ci1lcnI6CitmcmVlX3BhZ2VzOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmZvLCB0bXBfaW5mbywgJnBhZ2VzLCBsaXN0KSB7CiAJCWZyZWVfYnVmZmVyX3BhZ2Uoc3lzX2hlYXAsIGJ1ZmZlciwgaW5mby0+cGFnZSwgaW5mby0+b3JkZXIpOwogCQlrZnJlZShpbmZvKTsKQEAgLTE5NywxNCArMTk1LDEyIEBACiAKIHN0YXRpYyB2b2lkIGlvbl9zeXN0ZW1faGVhcF9mcmVlKHN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIpCiB7Ci0Jc3RydWN0IGlvbl9oZWFwICpoZWFwID0gYnVmZmVyLT5oZWFwOwotCXN0cnVjdCBpb25fc3lzdGVtX2hlYXAgKnN5c19oZWFwID0gY29udGFpbmVyX29mKGhlYXAsCisJc3RydWN0IGlvbl9zeXN0ZW1faGVhcCAqc3lzX2hlYXAgPSBjb250YWluZXJfb2YoYnVmZmVyLT5oZWFwLAogCQkJCQkJCXN0cnVjdCBpb25fc3lzdGVtX2hlYXAsCiAJCQkJCQkJaGVhcCk7CiAJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9IGJ1ZmZlci0+c2dfdGFibGU7CiAJYm9vbCBjYWNoZWQgPSBpb25fYnVmZmVyX2NhY2hlZChidWZmZXIpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JTElTVF9IRUFEKHBhZ2VzKTsKIAlpbnQgaTsKIAogCS8qIHVuY2FjaGVkIHBhZ2VzIGNvbWUgZnJvbSB0aGUgcGFnZSBwb29scywgemVybyB0aGVtIGJlZm9yZSByZXR1cm5pbmcKQEAgLTI0Miw2ICsyMzgsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG51bV9vcmRlcnM7IGkrKykgewogCQlzdHJ1Y3QgaW9uX3BhZ2VfcG9vbCAqcG9vbCA9IHN5c19oZWFwLT5wb29sc1tpXTsKKwogCQlucl90b3RhbCArPSBpb25fcGFnZV9wb29sX3Nocmluayhwb29sLCBnZnBfbWFzaywgbnJfdG9fc2Nhbik7CiAJfQogCkBAIC0yNjcsMTQgKzI2NCwxNiBAQAogCQkJCQkJCXN0cnVjdCBpb25fc3lzdGVtX2hlYXAsCiAJCQkJCQkJaGVhcCk7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29yZGVyczsgaSsrKSB7CiAJCXN0cnVjdCBpb25fcGFnZV9wb29sICpwb29sID0gc3lzX2hlYXAtPnBvb2xzW2ldOworCiAJCXNlcV9wcmludGYocywgIiVkIG9yZGVyICV1IGhpZ2htZW0gcGFnZXMgaW4gcG9vbCA9ICVsdSB0b3RhbFxuIiwKIAkJCSAgIHBvb2wtPmhpZ2hfY291bnQsIHBvb2wtPm9yZGVyLAotCQkJICAgKDEgPDwgcG9vbC0+b3JkZXIpICogUEFHRV9TSVpFICogcG9vbC0+aGlnaF9jb3VudCk7CisJCQkgICAoUEFHRV9TSVpFIDw8IHBvb2wtPm9yZGVyKSAqIHBvb2wtPmhpZ2hfY291bnQpOwogCQlzZXFfcHJpbnRmKHMsICIlZCBvcmRlciAldSBsb3dtZW0gcGFnZXMgaW4gcG9vbCA9ICVsdSB0b3RhbFxuIiwKIAkJCSAgIHBvb2wtPmxvd19jb3VudCwgcG9vbC0+b3JkZXIsCi0JCQkgICAoMSA8PCBwb29sLT5vcmRlcikgKiBQQUdFX1NJWkUgKiBwb29sLT5sb3dfY291bnQpOworCQkJICAgKFBBR0VfU0laRSA8PCBwb29sLT5vcmRlcikgKiBwb29sLT5sb3dfY291bnQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI5Myw3ICsyOTIsNyBAQAogCWhlYXAtPnBvb2xzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlvbl9wYWdlX3Bvb2wgKikgKiBudW1fb3JkZXJzLAogCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZWFwLT5wb29scykKLQkJZ290byBlcnJfYWxsb2NfcG9vbHM7CisJCWdvdG8gZnJlZV9oZWFwOwogCWZvciAoaSA9IDA7IGkgPCBudW1fb3JkZXJzOyBpKyspIHsKIAkJc3RydWN0IGlvbl9wYWdlX3Bvb2wgKnBvb2w7CiAJCWdmcF90IGdmcF9mbGFncyA9IGxvd19vcmRlcl9nZnBfZmxhZ3M7CkBAIC0zMDIsMTggKzMwMSwxOCBAQAogCQkJZ2ZwX2ZsYWdzID0gaGlnaF9vcmRlcl9nZnBfZmxhZ3M7CiAJCXBvb2wgPSBpb25fcGFnZV9wb29sX2NyZWF0ZShnZnBfZmxhZ3MsIG9yZGVyc1tpXSk7CiAJCWlmICghcG9vbCkKLQkJCWdvdG8gZXJyX2NyZWF0ZV9wb29sOworCQkJZ290byBkZXN0cm95X3Bvb2xzOwogCQloZWFwLT5wb29sc1tpXSA9IHBvb2w7CiAJfQogCiAJaGVhcC0+aGVhcC5kZWJ1Z19zaG93ID0gaW9uX3N5c3RlbV9oZWFwX2RlYnVnX3Nob3c7CiAJcmV0dXJuICZoZWFwLT5oZWFwOwotZXJyX2NyZWF0ZV9wb29sOgotCWZvciAoaSA9IDA7IGkgPCBudW1fb3JkZXJzOyBpKyspCi0JCWlmIChoZWFwLT5wb29sc1tpXSkKLQkJCWlvbl9wYWdlX3Bvb2xfZGVzdHJveShoZWFwLT5wb29sc1tpXSk7CisKK2Rlc3Ryb3lfcG9vbHM6CisJd2hpbGUgKGktLSkKKwkJaW9uX3BhZ2VfcG9vbF9kZXN0cm95KGhlYXAtPnBvb2xzW2ldKTsKIAlrZnJlZShoZWFwLT5wb29scyk7Ci1lcnJfYWxsb2NfcG9vbHM6CitmcmVlX2hlYXA6CiAJa2ZyZWUoaGVhcCk7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CkBAIC0zNTYsMTUgKzM1NSwxNSBAQAogCWZvciAoaSA9IGxlbiA+PiBQQUdFX1NISUZUOyBpIDwgKDEgPDwgb3JkZXIpOyBpKyspCiAJCV9fZnJlZV9wYWdlKHBhZ2UgKyBpKTsKIAotCXRhYmxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJdGFibGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dfdGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRhYmxlKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfcGFnZXM7CiAJfQogCiAJcmV0ID0gc2dfYWxsb2NfdGFibGUodGFibGUsIDEsIEdGUF9LRVJORUwpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfdGFibGU7CiAKIAlzZ19zZXRfcGFnZSh0YWJsZS0+c2dsLCBwYWdlLCBsZW4sIDApOwogCkBAIC0zNzQsMTAgKzM3MywxMiBAQAogCiAJcmV0dXJuIDA7CiAKLW91dDoKK2ZyZWVfdGFibGU6CisJa2ZyZWUodGFibGUpOworZnJlZV9wYWdlczoKIAlmb3IgKGkgPSAwOyBpIDwgbGVuID4+IFBBR0VfU0hJRlQ7IGkrKykKIAkJX19mcmVlX3BhZ2UocGFnZSArIGkpOwotCWtmcmVlKHRhYmxlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQ0Myw0ICs0NDQsMyBAQAogewogCWtmcmVlKGhlYXApOwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9sb2dnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2xvZ2dlci5jCmluZGV4IGQ0MmY1Nzg1Li4yNzcyZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9sb2dnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9sb2dnZXIuYwpAQCAtMTA4LDYgKzEwOCw3IEBACiB7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJc3RydWN0IGxvZ2dlcl9yZWFkZXIgKnJlYWRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwogCQlyZXR1cm4gcmVhZGVyLT5sb2c7CiAJfSBlbHNlCiAJCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xMjQsNiArMTI1LDcgQEAKIAkJc2l6ZV90IG9mZiwgc3RydWN0IGxvZ2dlcl9lbnRyeSAqc2NyYXRjaCkKIHsKIAlzaXplX3QgbGVuID0gbWluKHNpemVvZihzdHJ1Y3QgbG9nZ2VyX2VudHJ5KSwgbG9nLT5zaXplIC0gb2ZmKTsKKwogCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBsb2dnZXJfZW50cnkpKSB7CiAJCW1lbWNweSgoKHZvaWQgKikgc2NyYXRjaCksIGxvZy0+YnVmZmVyICsgb2ZmLCBsZW4pOwogCQltZW1jcHkoKCh2b2lkICopIHNjcmF0Y2gpICsgbGVuLCBsb2ctPmJ1ZmZlciwKQEAgLTY0Miw2ICs2NDQsNyBAQAogc3RhdGljIGxvbmcgbG9nZ2VyX3NldF92ZXJzaW9uKHN0cnVjdCBsb2dnZXJfcmVhZGVyICpyZWFkZXIsIHZvaWQgX191c2VyICphcmcpCiB7CiAJaW50IHZlcnNpb247CisKIAlpZiAoY29weV9mcm9tX3VzZXIoJnZlcnNpb24sIGFyZywgc2l6ZW9mKGludCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvcmFtX2NvbnNvbGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3JhbV9jb25zb2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMTEyNWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvcmFtX2NvbnNvbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfSU5DTFVERV9MSU5VWF9QTEFURk9STV9EQVRBX1JBTV9DT05TT0xFX0hfCi0jZGVmaW5lIF9JTkNMVURFX0xJTlVYX1BMQVRGT1JNX0RBVEFfUkFNX0NPTlNPTEVfSF8KLQotc3RydWN0IHJhbV9jb25zb2xlX3BsYXRmb3JtX2RhdGEgewotCWNvbnN0IGNoYXIgKmJvb3RpbmZvOwotfTsKLQotI2VuZGlmIC8qIF9JTkNMVURFX0xJTlVYX1BMQVRGT1JNX0RBVEFfUkFNX0NPTlNPTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMuYwppbmRleCBmMjQ0OTNhLi4xMmExMzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3dfc3luYy5jCkBAIC05Nyw2ICs5Nyw3IEBACiAJCQkJICAgICAgIGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJc3RydWN0IHN3X3N5bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKKwogCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVkIiwgcHQtPnZhbHVlKTsKIH0KIApAQCAtMTU2LDYgKzE1Nyw3IEBACiBzdGF0aWMgaW50IHN3X3N5bmNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCiAJc3luY190aW1lbGluZV9kZXN0cm95KCZvYmotPm9iaik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKaW5kZXggM2QwNWY2NjIuLjE4MTc0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKQEAgLTkyLDYgKzkyLDEwIEBACiB2b2lkIHN5bmNfdGltZWxpbmVfZGVzdHJveShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQogewogCW9iai0+ZGVzdHJveWVkID0gdHJ1ZTsKKwkvKgorCSAqIEVuc3VyZSB0aW1lbGluZSBpcyBtYXJrZWQgYXMgZGVzdHJveWVkIGJlZm9yZQorCSAqIGNoYW5naW5nIHRpbWVsaW5lJ3MgZmVuY2VzIHN0YXR1cy4KKwkgKi8KIAlzbXBfd21iKCk7CiAKIAkvKgpAQCAtMzg0LDYgKzM4OCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCAmZmVuY2UtPnB0X2xpc3RfaGVhZCkgewogCQlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qgc3luY19wdCwgcHRfbGlzdCk7CisKIAkJc3luY190aW1lbGluZV9yZW1vdmVfcHQocHQpOwogCX0KIH0KQEAgLTM5NCw2ICszOTksNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgJmZlbmNlLT5wdF9saXN0X2hlYWQpIHsKIAkJc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfcHQsIHB0X2xpc3QpOworCiAJCXN5bmNfcHRfZnJlZShwdCk7CiAJfQogfQpAQCAtODI3LDYgKzgzMyw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTWU5DX0lPQ19XQUlUOgogCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF93YWl0KGZlbmNlLCBhcmcpOwpAQCAtODU2LDE4ICs4NjMsMjEgQEAKIHN0YXRpYyB2b2lkIHN5bmNfcHJpbnRfcHQoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3Qgc3luY19wdCAqcHQsIGJvb2wgZmVuY2UpCiB7CiAJaW50IHN0YXR1cyA9IHB0LT5zdGF0dXM7CisKIAlzZXFfcHJpbnRmKHMsICIgICVzJXNwdCAlcyIsCiAJCSAgIGZlbmNlID8gcHQtPnBhcmVudC0+bmFtZSA6ICIiLAogCQkgICBmZW5jZSA/ICJfIiA6ICIiLAogCQkgICBzeW5jX3N0YXR1c19zdHIoc3RhdHVzKSk7CiAJaWYgKHB0LT5zdGF0dXMpIHsKIAkJc3RydWN0IHRpbWV2YWwgdHYgPSBrdGltZV90b190aW1ldmFsKHB0LT50aW1lc3RhbXApOworCiAJCXNlcV9wcmludGYocywgIkAlbGQuJTA2bGQiLCB0di50dl9zZWMsIHR2LnR2X3VzZWMpOwogCX0KIAogCWlmIChwdC0+cGFyZW50LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0ciAmJgogCSAgICBwdC0+cGFyZW50LT5vcHMtPnB0X3ZhbHVlX3N0cikgewogCQljaGFyIHZhbHVlWzY0XTsKKwogCQlwdC0+cGFyZW50LT5vcHMtPnB0X3ZhbHVlX3N0cihwdCwgdmFsdWUsIHNpemVvZih2YWx1ZSkpOwogCQlzZXFfcHJpbnRmKHMsICI6ICVzIiwgdmFsdWUpOwogCQlpZiAoZmVuY2UpIHsKQEAgLTg5Miw2ICs5MDIsNyBAQAogCiAJaWYgKG9iai0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIpIHsKIAkJY2hhciB2YWx1ZVs2NF07CisKIAkJb2JqLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cihvYmosIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKIAkJc2VxX3ByaW50ZihzLCAiOiAlcyIsIHZhbHVlKTsKIAl9IGVsc2UgaWYgKG9iai0+b3BzLT5wcmludF9vYmopIHsKQEAgLTEwMDEsNiArMTAxMiw3IEBACiAJZm9yIChpID0gMDsgaSA8IHMuY291bnQ7IGkgKz0gRFVNUF9DSFVOSykgewogCQlpZiAoKHMuY291bnQgLSBpKSA+IERVTVBfQ0hVTkspIHsKIAkJCWNoYXIgYyA9IHMuYnVmW2kgKyBEVU1QX0NIVU5LXTsKKwogCQkJcy5idWZbaSArIERVTVBfQ0hVTktdID0gMDsKIAkJCXByX2NvbnQoIiVzIiwgcy5idWYgKyBpKTsKIAkJCXMuYnVmW2kgKyBEVU1QX0NIVU5LXSA9IGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90aW1lZF9ncGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90aW1lZF9ncGlvLmMKaW5kZXggMGM3ZmRjOC4uMTgwYzIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdGltZWRfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RpbWVkX2dwaW8uYwpAQCAtNTEsNiArNTEsNyBAQAogCWlmIChocnRpbWVyX2FjdGl2ZSgmZGF0YS0+dGltZXIpKSB7CiAJCWt0aW1lX3QgciA9IGhydGltZXJfZ2V0X3JlbWFpbmluZygmZGF0YS0+dGltZXIpOwogCQlzdHJ1Y3QgdGltZXZhbCB0ID0ga3RpbWVfdG9fdGltZXZhbChyKTsKKwogCQlyZXR1cm4gdC50dl9zZWMgKiAxMDAwICsgdC50dl91c2VjIC8gMTAwMDsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CkBAIC05MSw4ICs5Miw4IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlncGlvX2RhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKLQkJCQlzaXplb2Yoc3RydWN0IHRpbWVkX2dwaW9fZGF0YSkgKiBwZGF0YS0+bnVtX2dwaW9zLAotCQkJCUdGUF9LRVJORUwpOworCQkJc2l6ZW9mKHN0cnVjdCB0aW1lZF9ncGlvX2RhdGEpICogcGRhdGEtPm51bV9ncGlvcywKKwkJCUdGUF9LRVJORUwpOwogCWlmICghZ3Bpb19kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9pb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvaW9uLmgKaW5kZXggZjA5ZTdjMS4uNmFhNDk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9pb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL2lvbi5oCkBAIC0yNywxMiArMjcsMTIgQEAKICAqIEBJT05fSEVBUF9UWVBFX1NZU1RFTToJIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIHZtYWxsb2MKICAqIEBJT05fSEVBUF9UWVBFX1NZU1RFTV9DT05USUc6IG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGttYWxsb2MKICAqIEBJT05fSEVBUF9UWVBFX0NBUlZFT1VUOgkgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIGEgcHJlcmVzZXJ2ZWQKLSAqIAkJCQkgY2FydmVvdXQgaGVhcCwgYWxsb2NhdGlvbnMgYXJlIHBoeXNpY2FsbHkKLSAqIAkJCQkgY29udGlndW91cworICoJCQkJIGNhcnZlb3V0IGhlYXAsIGFsbG9jYXRpb25zIGFyZSBwaHlzaWNhbGx5CisgKgkJCQkgY29udGlndW91cwogICogQElPTl9IRUFQX1RZUEVfRE1BOgkJIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIERNQSBBUEkKICAqIEBJT05fTlVNX0hFQVBTOgkJIGhlbHBlciBmb3IgaXRlcmF0aW5nIG92ZXIgaGVhcHMsIGEgYml0IG1hc2sKLSAqIAkJCQkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgaGVhcHMsIHNvIG9ubHkgMzIKLSAqIAkJCQkgdG90YWwgaGVhcCB0eXBlcyBhcmUgc3VwcG9ydGVkCisgKgkJCQkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgaGVhcHMsIHNvIG9ubHkgMzIKKyAqCQkJCSB0b3RhbCBoZWFwIHR5cGVzIGFyZSBzdXBwb3J0ZWQKICAqLwogZW51bSBpb25faGVhcF90eXBlIHsKIAlJT05fSEVBUF9UWVBFX1NZU1RFTSwKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgSU9OX0hFQVBfQ0FSVkVPVVRfTUFTSwkJKDEgPDwgSU9OX0hFQVBfVFlQRV9DQVJWRU9VVCkKICNkZWZpbmUgSU9OX0hFQVBfVFlQRV9ETUFfTUFTSwkJKDEgPDwgSU9OX0hFQVBfVFlQRV9ETUEpCiAKLSNkZWZpbmUgSU9OX05VTV9IRUFQX0lEUwkJc2l6ZW9mKHVuc2lnbmVkIGludCkgKiA4CisjZGVmaW5lIElPTl9OVU1fSEVBUF9JRFMJCShzaXplb2YodW5zaWduZWQgaW50KSAqIDgpCiAKIC8qKgogICogYWxsb2NhdGlvbiBmbGFncyAtIHRoZSBsb3dlciAxNiBiaXRzIGFyZSB1c2VkIGJ5IGNvcmUgaW9uLCB0aGUgdXBwZXIgMTYKQEAgLTc4LDcgKzc4LDcgQEAKICAqIEBhbGlnbjoJCXJlcXVpcmVkIGFsaWdubWVudCBvZiB0aGUgYWxsb2NhdGlvbgogICogQGhlYXBfaWRfbWFzazoJbWFzayBvZiBoZWFwIGlkcyB0byBhbGxvY2F0ZSBmcm9tCiAgKiBAZmxhZ3M6CQlmbGFncyBwYXNzZWQgdG8gaGVhcAotICogQGhhbmRsZToJCXBvaW50ZXIgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgY29va2llIHRvIHVzZSB0byAKKyAqIEBoYW5kbGU6CQlwb2ludGVyIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIGNvb2tpZSB0byB1c2UgdG8KICAqCQkJcmVmZXIgdG8gdGhpcyBhbGxvY2F0aW9uCiAgKgogICogUHJvdmlkZWQgYnkgdXNlcnNwYWNlIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBpb2N0bApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9CY21jaGFyLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0JjbWNoYXIuYwppbmRleCBhZTc0OTBiLi42MDZkNWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0JjbWNoYXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0JjbWNoYXIuYwpAQCAtMSw2ICsxLDk0IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgImhlYWRlcnMuaCIKKworc3RhdGljIGludCBiY21faGFuZGxlX252bV9yZWFkX2NtZChzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwKKwlQVUNIQVIgcFJlYWREYXRhLCBzdHJ1Y3QgYmNtX252bV9yZWFkd3JpdGUgKnN0TlZNUmVhZFdyaXRlKQoreworCUlOVCBTdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKworCWRvd24oJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOworCisJaWYgKChBZGFwdGVyLT5JZGxlTW9kZSA9PSBUUlVFKSB8fCAoQWRhcHRlci0+YlNodXRTdGF0dXMgPT0gVFJVRSkgfHwKKwkJCShBZGFwdGVyLT5iUHJlcGFyaW5nRm9yTG93UG93ZXJNb2RlID09IFRSVUUpKSB7CisKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsCisJCQlEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKKwkJCSJEZXZpY2UgaXMgaW4gSWRsZS9TaHV0ZG93biBNb2RlXG4iKTsKKwkJdXAoJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOworCQlrZnJlZShwUmVhZERhdGEpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlTdGF0dXMgPSBCZWNlZW1OVk1SZWFkKEFkYXB0ZXIsIChQVUlOVClwUmVhZERhdGEsCisJCQkgICAgICAgc3ROVk1SZWFkV3JpdGUtPnVpT2Zmc2V0LAorCQkJICAgICAgIHN0TlZNUmVhZFdyaXRlLT51aU51bUJ5dGVzKTsKKwl1cCgmQWRhcHRlci0+TlZNUmRtV3JtTG9jayk7CisKKwlpZiAoU3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWtmcmVlKHBSZWFkRGF0YSk7CisJCXJldHVybiBTdGF0dXM7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcihzdE5WTVJlYWRXcml0ZS0+cEJ1ZmZlciwgcFJlYWREYXRhLAorCQkJc3ROVk1SZWFkV3JpdGUtPnVpTnVtQnl0ZXMpKSB7CisJCWtmcmVlKHBSZWFkRGF0YSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBoYW5kbGVfZmxhc2gyeF9hZGFwdGVyKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCVBVQ0hBUiBwUmVhZERhdGEsIHN0cnVjdCBiY21fbnZtX3JlYWR3cml0ZSAqc3ROVk1SZWFkV3JpdGUpCit7CisJLyoKKwkgKiBOZXcgUmVxdWlyZW1lbnQ6LQorCSAqIERTRCBzZWN0aW9uIHVwZGF0aW9uIHdpbGwgYmUgYWxsb3dlZCBpbiB0d28gY2FzZTotCisJICogMS4gIGlmIERTRCBzaWcgaXMgcHJlc2VudCBpbiBEU0QgaGVhZGVyIG1lYW5zIGRvbmdsZQorCSAqIGlzIG9rIGFuZCB1cGRhdGlvbiBpcyBmcnVpdGZ1bGwKKwkgKiAyLiAgaWYgcG9pbnQgMSBmYWlsZXMgdGhlbiB1c2VyIGJ1ZmYgc2hvdWxkIGhhdmUKKwkgKiBEU0Qgc2lnLiB0aGlzIHBvaW50IGVuc3VyZXMgdGhhdCBpZiBkb25nbGUgaXMKKwkgKiBjb3JydXB0ZWQgdGhlbiB1c2VyIHNwYWNlIHByb2dyYW0gZmlyc3QgbW9kaWZ5CisJICogdGhlIERTRCBoZWFkZXIgd2l0aCB2YWxpZCBEU0Qgc2lnIHNvIHRoYXQgdGhpcworCSAqIGFzIHdlbGwgYXMgZnVydGhlciB3cml0ZSBtYXkgYmUgd29ydGh3aGlsZS4KKwkgKgorCSAqIFRoaXMgcmVzdHJpY3Rpb24gaGFzIGJlZW4gcHV0IGFzc3VtaW5nIHRoYXQKKwkgKiBpZiBEU0Qgc2lnIGlzIGNvcnJ1cHRlZCwgRFNEIGRhdGEgd29uJ3QgYmUKKwkgKiBjb25zaWRlcmVkIHZhbGlkLgorCSAqLworCUlOVCBTdGF0dXM7CisJVUxPTkcgdWxEU0RNYWdpY051bUluVXNyQnVmZiA9IDA7CisKKwlTdGF0dXMgPSBCY21GbGFzaDJ4Q29ycnVwdFNpZyhBZGFwdGVyLCBBZGFwdGVyLT5lQWN0aXZlRFNEKTsKKwlpZiAoU3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisKKwlpZiAoKChzdE5WTVJlYWRXcml0ZS0+dWlPZmZzZXQgKyBzdE5WTVJlYWRXcml0ZS0+dWlOdW1CeXRlcykgIT0KKwkJCUFkYXB0ZXItPnVpTlZNRFNEU2l6ZSkgfHwKKwkJCShzdE5WTVJlYWRXcml0ZS0+dWlOdW1CeXRlcyA8IFNJR05BVFVSRV9TSVpFKSkgeworCisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKKwkJCQkiRFNEIFNpZyBpcyBwcmVzZW50IG5laXRoZXIgaW4gRmxhc2ggbm9yIFVzZXIgcHJvdmlkZWQgSW5wdXQuLiIpOworCQl1cCgmQWRhcHRlci0+TlZNUmRtV3JtTG9jayk7CisJCWtmcmVlKHBSZWFkRGF0YSk7CisJCXJldHVybiBTdGF0dXM7CisJfQorCisJdWxEU0RNYWdpY051bUluVXNyQnVmZiA9CisJCW50b2hsKCooUFVJTlQpKHBSZWFkRGF0YSArIHN0TlZNUmVhZFdyaXRlLT51aU51bUJ5dGVzIC0KKwkJICAgICAgU0lHTkFUVVJFX1NJWkUpKTsKKwlpZiAodWxEU0RNYWdpY051bUluVXNyQnVmZiAhPSBEU0RfSU1BR0VfTUFHSUNfTlVNQkVSKSB7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKKwkJCQkiRFNEIFNpZyBpcyBwcmVzZW50IG5laXRoZXIgaW4gRmxhc2ggbm9yIFVzZXIgcHJvdmlkZWQgSW5wdXQuLiIpOworCQl1cCgmQWRhcHRlci0+TlZNUmRtV3JtTG9jayk7CisJCWtmcmVlKHBSZWFkRGF0YSk7CisJCXJldHVybiBTdGF0dXM7CisJfQorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEZ1bmN0aW9uCSAgLSBiY21fY2hhcl9vcGVuKCkKICoKQEAgLTEwMSw5ICsxODksMTEgQEAKIAlpbnQgd2FpdF9yZXRfdmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIHJldCA9IDA7CiAKLQl3YWl0X3JldF92YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoQWRhcHRlci0+cHJvY2Vzc19yZWFkX3dhaXRfcXVldWUsCi0JCQkJCQkocFRhcmFuZy0+UnhBcHBDb250cm9sSGVhZCB8fAotCQkJCQkJIEFkYXB0ZXItPmRldmljZV9yZW1vdmVkKSk7CisJd2FpdF9yZXRfdmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAorCQkJCUFkYXB0ZXItPnByb2Nlc3NfcmVhZF93YWl0X3F1ZXVlLAorCQkJCShwVGFyYW5nLT5SeEFwcENvbnRyb2xIZWFkIHx8CisJCQkJQWRhcHRlci0+ZGV2aWNlX3JlbW92ZWQpKTsKKwogCWlmICgod2FpdF9yZXRfdmFsID09IC1FUkVTVEFSVFNZUykpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAogCQkJCSJFeGl0aW5nIGFzIGkndmUgYmVlbiBhc2tlZCB0byBleGl0ISEhXG4iKTsKQEAgLTE1MSw3ICsyNDEsNyBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX3JlZ19yZWFkX3ByaXZhdGUodm9pZCBfX3VzZXIgKmFyZ3AsCi0Jc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIpCisJCQkJCSAgIHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQogewogCXN0cnVjdCBiY21fcmRtX2J1ZmZlciBzUmRtQnVmZmVyID0gezB9OwogCXN0cnVjdCBiY21faW9jdGxfYnVmZmVyIElvQnVmZmVyOwpAQCAtMjAyLDcgKzI5Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYmNtX2NoYXJfaW9jdGxfcmVnX3dyaXRlX3ByaXZhdGUodm9pZCBfX3VzZXIgKmFyZ3AsCi0Jc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIpCisJCQkJCSAgICBzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX3dybV9idWZmZXIgc1dybUJ1ZmZlciA9IHswfTsKIAlzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlciBJb0J1ZmZlcjsKQEAgLTI0OSw3ICszMzksNyBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX2VlcHJvbV9yZWdfcmVhZCh2b2lkIF9fdXNlciAqYXJncCwKLQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKKwkJCQkJICBzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX3JkbV9idWZmZXIgc1JkbUJ1ZmZlciA9IHswfTsKIAlzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlciBJb0J1ZmZlcjsKQEAgLTMxNyw3ICs0MDcsOCBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX2VlcHJvbV9yZWdfd3JpdGUodm9pZCBfX3VzZXIgKmFyZ3AsCi0Jc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIFVJTlQgY21kKQorCQkJCQkgICBzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwKKwkJCQkJICAgVUlOVCBjbWQpCiB7CiAJc3RydWN0IGJjbV93cm1fYnVmZmVyIHNXcm1CdWZmZXIgPSB7MH07CiAJc3RydWN0IGJjbV9pb2N0bF9idWZmZXIgSW9CdWZmZXI7CkBAIC0zODMsNyArNDc0LDcgQEAKIH0KIAogc3RhdGljIGludCBiY21fY2hhcl9pb2N0bF9ncGlvX3NldF9yZXF1ZXN0KHZvaWQgX191c2VyICphcmdwLAotCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQorCQkJCQkgICBzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX2dwaW9faW5mbyBncGlvX2luZm8gPSB7MH07CiAJc3RydWN0IGJjbV9pb2N0bF9idWZmZXIgSW9CdWZmZXI7CkBAIC00MTAsNyArNTAxLDggQEAKIAlpZiAoSW9CdWZmZXIuSW5wdXRMZW5ndGggPiBzaXplb2YoZ3Bpb19pbmZvKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmdwaW9faW5mbywgSW9CdWZmZXIuSW5wdXRCdWZmZXIsIElvQnVmZmVyLklucHV0TGVuZ3RoKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmdwaW9faW5mbywgSW9CdWZmZXIuSW5wdXRCdWZmZXIsCisJCQkgICBJb0J1ZmZlci5JbnB1dExlbmd0aCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJdWlCaXQgID0gZ3Bpb19pbmZvLnVpR3Bpb051bWJlcjsKQEAgLTQ5Miw3ICs1ODQsNyBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX2xlZF90aHJlYWRfc3RhdGVfY2hhbmdlX3JlcSh2b2lkIF9fdXNlciAqYXJncCwKLQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKKwkJc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJc3RydWN0IGJjbV91c2VyX3RocmVhZF9yZXEgdGhyZWFkUmVxID0gezB9OwogCXN0cnVjdCBiY21faW9jdGxfYnVmZmVyIElvQnVmZmVyOwpAQCAtNTE2LDcgKzYwOCw4IEBACiAJaWYgKElvQnVmZmVyLklucHV0TGVuZ3RoID4gc2l6ZW9mKHRocmVhZFJlcSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ0aHJlYWRSZXEsIElvQnVmZmVyLklucHV0QnVmZmVyLCBJb0J1ZmZlci5JbnB1dExlbmd0aCkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aHJlYWRSZXEsIElvQnVmZmVyLklucHV0QnVmZmVyLAorCQkJICAgSW9CdWZmZXIuSW5wdXRMZW5ndGgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCS8qIGlmIExFRCB0aHJlYWQgaXMgcnVubmluZyhBY3RpdmVseSBvciBJbmFjdGl2ZWx5KQpAQCAtNTQyLDcgKzYzNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYmNtX2NoYXJfaW9jdGxfZ3Bpb19zdGF0dXNfcmVxdWVzdCh2b2lkIF9fdXNlciAqYXJncCwKLQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKKwkJc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJc3RydWN0IGJjbV9ncGlvX2luZm8gZ3Bpb19pbmZvID0gezB9OwogCXN0cnVjdCBiY21faW9jdGxfYnVmZmVyIElvQnVmZmVyOwpAQCAtNTg0LDcgKzY3Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYmNtX2NoYXJfaW9jdGxfZ3Bpb19tdWx0aV9yZXF1ZXN0KHZvaWQgX191c2VyICphcmdwLAotCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQorCQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX2dwaW9fbXVsdGlfaW5mbyBncGlvX211bHRpX2luZm9bTUFYX0lEWF07CiAJc3RydWN0IGJjbV9ncGlvX211bHRpX2luZm8gKnBncGlvX211bHRpX2luZm8gPQpAQCAtNTk0LDcgKzY4Nyw4IEBACiAJSU5UIFN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOwogCWludCBieXRlczsKIAotCW1lbXNldChwZ3Bpb19tdWx0aV9pbmZvLCAwLCBNQVhfSURYICogc2l6ZW9mKHN0cnVjdCBiY21fZ3Bpb19tdWx0aV9pbmZvKSk7CisJbWVtc2V0KHBncGlvX211bHRpX2luZm8sIDAsCisJICAgICAgIE1BWF9JRFggKiBzaXplb2Yoc3RydWN0IGJjbV9ncGlvX211bHRpX2luZm8pKTsKIAogCWlmICgoQWRhcHRlci0+SWRsZU1vZGUgPT0gVFJVRSkgfHwKIAkJKEFkYXB0ZXItPmJTaHV0U3RhdHVzID09IFRSVUUpIHx8CkBAIC02MTAsMTEgKzcwNCwxMSBAQAogCQlJb0J1ZmZlci5PdXRwdXRMZW5ndGggPSBzaXplb2YoZ3Bpb19tdWx0aV9pbmZvKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmZ3Bpb19tdWx0aV9pbmZvLCBJb0J1ZmZlci5JbnB1dEJ1ZmZlciwKLQkJSW9CdWZmZXIuSW5wdXRMZW5ndGgpKQorCQkJICAgSW9CdWZmZXIuSW5wdXRMZW5ndGgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChJc1JlcUdwaW9Jc0xlZEluTlZNKEFkYXB0ZXIsCi0JCXBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9NYXNrKSA9PSBmYWxzZSkgeworCWlmIChJc1JlcUdwaW9Jc0xlZEluTlZNKEFkYXB0ZXIsIHBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9NYXNrKQorCQkJPT0gZmFsc2UpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsCiAJCQkJREJHX0xWTF9BTEwsCiAJCQkJIlNvcnJ5LCBSZXF1ZXN0ZWQgR1BJTzwweCVYPiBpcyBub3QgY29ycmVzcG9uZCB0byBOVk0gTEVEIGJpdCBtYXA8MHglWD4hISEiLApAQCAtNjI3LDcgKzcyMSw3IEBACiAJaWYgKChwZ3Bpb19tdWx0aV9pbmZvW1dJTUFYX0lEWF0udWlHUElPTWFzaykgJgogCQkocGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT0NvbW1hbmQpKSB7CiAJCS8qIFNldCAxJ3MgaW4gR1BJTyBPVVRQVVQgUkVHSVNURVIgKi8KLQkJKihVSU5UICopdWNSZXNldFZhbHVlID0gIHBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9NYXNrICYKKwkJKihVSU5UICopdWNSZXNldFZhbHVlID0gcGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT01hc2sgJgogCQkJcGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT0NvbW1hbmQgJgogCQkJcGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT1ZhbHVlOwogCkBAIC02NDMsNyArNzM3LDggQEAKIAkJfQogCiAJCS8qIENsZWFyIHRvIDAncyBpbiBHUElPIE9VVFBVVCBSRUdJU1RFUiAqLwotCQkqKFVJTlQgKil1Y1Jlc2V0VmFsdWUgPSAocGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT01hc2sgJgorCQkqKFVJTlQgKil1Y1Jlc2V0VmFsdWUgPQorCQkJKHBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9NYXNrICYKIAkJCXBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9Db21tYW5kICYKIAkJCSh+KHBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9WYWx1ZSkpKTsKIApAQCAtNjYxLDcgKzc1Niw3IEBACiAKIAlpZiAocGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT01hc2spIHsKIAkJYnl0ZXMgPSByZG1hbHRXaXRoTG9jayhBZGFwdGVyLCAoVUlOVClHUElPX1BJTl9TVEFURV9SRUdJU1RFUiwKLQkJCShQVUlOVCl1Y1Jlc2V0VmFsdWUsIHNpemVvZihVSU5UKSk7CisJCQkJICAgICAgIChQVUlOVCl1Y1Jlc2V0VmFsdWUsIHNpemVvZihVSU5UKSk7CiAKIAkJaWYgKGJ5dGVzIDwgMCkgewogCQkJU3RhdHVzID0gYnl0ZXM7CkBAIC02NzIsNyArNzY3LDggQEAKIAkJCVN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogCQl9CiAKLQkJcGdwaW9fbXVsdGlfaW5mb1tXSU1BWF9JRFhdLnVpR1BJT1ZhbHVlID0gKCooVUlOVCAqKXVjUmVzZXRWYWx1ZSAmCisJCXBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9WYWx1ZSA9CisJCQkoKihVSU5UICopdWNSZXNldFZhbHVlICYKIAkJCXBncGlvX211bHRpX2luZm9bV0lNQVhfSURYXS51aUdQSU9NYXNrKTsKIAl9CiAKQEAgLTY4OCw3ICs3ODQsNyBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX2dwaW9fbW9kZV9yZXF1ZXN0KHZvaWQgX191c2VyICphcmdwLAotCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQorCQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX2dwaW9fbXVsdGlfbW9kZSBncGlvX211bHRpX21vZGVbTUFYX0lEWF07CiAJc3RydWN0IGJjbV9ncGlvX211bHRpX21vZGUgKnBncGlvX211bHRpX21vZGUgPQpAQCAtNzI4LDggKzgyNCw4IEBACiAJfQogCiAJLyogVmFsaWRhdGluZyB0aGUgcmVxdWVzdCAqLwotCWlmIChJc1JlcUdwaW9Jc0xlZEluTlZNKEFkYXB0ZXIsCi0JCXBncGlvX211bHRpX21vZGVbV0lNQVhfSURYXS51aUdQSU9NYXNrKSA9PSBmYWxzZSkgeworCWlmIChJc1JlcUdwaW9Jc0xlZEluTlZNKEFkYXB0ZXIsIHBncGlvX211bHRpX21vZGVbV0lNQVhfSURYXS51aUdQSU9NYXNrKQorCQkJPT0gZmFsc2UpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAogCQkJCSJTb3JyeSwgUmVxdWVzdGVkIEdQSU88MHglWD4gaXMgbm90IGNvcnJlc3BvbmQgdG8gTlZNIExFRCBiaXQgbWFwPDB4JVg+ISEhIiwKIAkJCQlwZ3Bpb19tdWx0aV9tb2RlW1dJTUFYX0lEWF0udWlHUElPTWFzaywKQEAgLTczOSwxMSArODM1LDEzIEBACiAKIAlpZiAocGdwaW9fbXVsdGlfbW9kZVtXSU1BWF9JRFhdLnVpR1BJT01hc2spIHsKIAkJLyogd3JpdGUgYWxsIE9VVCdzICgxJ3MpICovCi0JCSooVUlOVCAqKSB1Y1Jlc2V0VmFsdWUgfD0gKHBncGlvX211bHRpX21vZGVbV0lNQVhfSURYXS51aUdQSU9Nb2RlICYKKwkJKihVSU5UICopIHVjUmVzZXRWYWx1ZSB8PQorCQkJKHBncGlvX211bHRpX21vZGVbV0lNQVhfSURYXS51aUdQSU9Nb2RlICYKIAkJCQkJcGdwaW9fbXVsdGlfbW9kZVtXSU1BWF9JRFhdLnVpR1BJT01hc2spOwogCiAJCS8qIHdyaXRlIGFsbCBJTidzICgwJ3MpICovCi0JCSooVUlOVCAqKSB1Y1Jlc2V0VmFsdWUgJj0gfigofnBncGlvX211bHRpX21vZGVbV0lNQVhfSURYXS51aUdQSU9Nb2RlKSAmCisJCSooVUlOVCAqKSB1Y1Jlc2V0VmFsdWUgJj0KKwkJCX4oKH5wZ3Bpb19tdWx0aV9tb2RlW1dJTUFYX0lEWF0udWlHUElPTW9kZSkgJgogCQkJCQlwZ3Bpb19tdWx0aV9tb2RlW1dJTUFYX0lEWF0udWlHUElPTWFzayk7CiAKIAkJLyogQ3VycmVudGx5IGltcGxlbWVudGVkIHJldHVybiB0aGUgbW9kZXMgb2YgYWxsIEdQSU8ncwpAQCAtNzc5LDcgKzg3Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYmNtX2NoYXJfaW9jdGxfbWlzY19yZXF1ZXN0KHZvaWQgX191c2VyICphcmdwLAotCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQorCQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlciBJb0J1ZmZlcjsKIAlQVk9JRCBwdkJ1ZmZlciA9IE5VTEw7CkBAIC04MDEsOSArODk5LDExIEBACiAJCXJldHVybiBQVFJfRVJSKHB2QnVmZmVyKTsKIAogCWRvd24oJkFkYXB0ZXItPkxvd1Bvd2VyTW9kZVN5bmMpOwotCVN0YXR1cyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KEFkYXB0ZXItPmxvd3Bvd2VyX21vZGVfd2FpdF9xdWV1ZSwKLQkJIUFkYXB0ZXItPmJQcmVwYXJpbmdGb3JMb3dQb3dlck1vZGUsCi0JCSgxICogSFopKTsKKwlTdGF0dXMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCUFkYXB0ZXItPmxvd3Bvd2VyX21vZGVfd2FpdF9xdWV1ZSwKKwkJCSFBZGFwdGVyLT5iUHJlcGFyaW5nRm9yTG93UG93ZXJNb2RlLAorCQkJKDEgKiBIWikpOworCiAJaWYgKFN0YXR1cyA9PSAtRVJFU1RBUlRTWVMpCiAJCWdvdG8gY250cmxFbmQ7CiAKQEAgLTgyMiw3ICs5MjIsNyBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX2J1ZmZlcl9kb3dubG9hZF9zdGFydCgKLQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKKwkJc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJSU5UIFN0YXR1czsKIApAQCAtODMzLDcgKzkzMyw4IEBACiAJfQogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJIlN0YXJ0aW5nIHRoZSBmaXJtd2FyZSBkb3dubG9hZCBQSUQgPTB4JXghISEhXG4iLCBjdXJyZW50LT5waWQpOworCQkJIlN0YXJ0aW5nIHRoZSBmaXJtd2FyZSBkb3dubG9hZCBQSUQgPTB4JXghISEhXG4iLAorCQkJY3VycmVudC0+cGlkKTsKIAogCWlmIChkb3duX3RyeWxvY2soJkFkYXB0ZXItPmZ3X2Rvd25sb2FkX3NlbWEpKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtODU4LDcgKzk1OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYmNtX2NoYXJfaW9jdGxfYnVmZmVyX2Rvd25sb2FkKHZvaWQgX191c2VyICphcmdwLAotCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQorCQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmNtX2Zpcm13YXJlX2luZm8gKnBzRndJbmZvID0gTlVMTDsKIAlzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlciBJb0J1ZmZlcjsKQEAgLTk0Myw3ICsxMDQ0LDcgQEAKIH0KIAogc3RhdGljIGludCBiY21fY2hhcl9pb2N0bF9idWZmZXJfZG93bmxvYWRfc3RvcCh2b2lkIF9fdXNlciAqYXJncCwKLQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKKwkJc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJSU5UIFN0YXR1czsKIAlpbnQgdGltZW91dCA9IDA7CkBAIC0xMDM2LDcgKzExMzcsNyBAQAogfQogCiBzdGF0aWMgaW50IGJjbV9jaGFyX2lvY3RsX3Fvc190aHJlc2hvbGQoVUxPTkcgYXJnLAotCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQorCQkJCQlzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlVU0hPUlQgdWlMb29wSW5kZXg7CiAKQEAgLTEzODgsNyArMTQ4OSw2IEBACiAJc3RydWN0IHRpbWV2YWwgdHYwLCB0djE7CiAJc3RydWN0IGJjbV9pb2N0bF9idWZmZXIgSW9CdWZmZXI7CiAJUFVDSEFSIHBSZWFkRGF0YSA9IE5VTEw7Ci0JVUxPTkcgdWxEU0RNYWdpY051bUluVXNyQnVmZiA9IDA7CiAJSU5UIFN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOwogCiAJbWVtc2V0KCZ0djAsIDAsIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOwpAQCAtMTQzOCwzNCArMTUzOCwxMCBAQAogCiAJZG9fZ2V0dGltZW9mZGF5KCZ0djApOwogCWlmIChJT0NUTF9CQ01fTlZNX1JFQUQgPT0gY21kKSB7Ci0JCWRvd24oJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOwotCi0JCWlmICgoQWRhcHRlci0+SWRsZU1vZGUgPT0gVFJVRSkgfHwKLQkJCShBZGFwdGVyLT5iU2h1dFN0YXR1cyA9PSBUUlVFKSB8fAotCQkJKEFkYXB0ZXItPmJQcmVwYXJpbmdGb3JMb3dQb3dlck1vZGUgPT0gVFJVRSkpIHsKLQotCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsCi0JCQkJREJHX1RZUEVfT1RIRVJTLCBPU0FMX0RCRywgREJHX0xWTF9BTEwsCi0JCQkJIkRldmljZSBpcyBpbiBJZGxlL1NodXRkb3duIE1vZGVcbiIpOwotCQkJdXAoJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOwotCQkJa2ZyZWUocFJlYWREYXRhKTsKLQkJCXJldHVybiAtRUFDQ0VTOwotCQl9Ci0KLQkJU3RhdHVzID0gQmVjZWVtTlZNUmVhZChBZGFwdGVyLCAoUFVJTlQpcFJlYWREYXRhLAotCQkJc3ROVk1SZWFkV3JpdGUudWlPZmZzZXQsIHN0TlZNUmVhZFdyaXRlLnVpTnVtQnl0ZXMpOwotCQl1cCgmQWRhcHRlci0+TlZNUmRtV3JtTG9jayk7Ci0KLQkJaWYgKFN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJa2ZyZWUocFJlYWREYXRhKTsKLQkJCXJldHVybiBTdGF0dXM7Ci0JCX0KLQotCQlpZiAoY29weV90b191c2VyKHN0TlZNUmVhZFdyaXRlLnBCdWZmZXIsIHBSZWFkRGF0YSwKLQkJCXN0TlZNUmVhZFdyaXRlLnVpTnVtQnl0ZXMpKSB7Ci0JCQlrZnJlZShwUmVhZERhdGEpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KKwkJaW50IHJldCA9IGJjbV9oYW5kbGVfbnZtX3JlYWRfY21kKEFkYXB0ZXIsIHBSZWFkRGF0YSwKKwkJCQkmc3ROVk1SZWFkV3JpdGUpOworCQlpZiAocmV0ICE9IFNUQVRVU19TVUNDRVNTKQorCQkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQlkb3duKCZBZGFwdGVyLT5OVk1SZG1Xcm1Mb2NrKTsKIApAQCAtMTQ4Myw0OCArMTU1OSwxMSBAQAogCiAJCUFkYXB0ZXItPmJIZWFkZXJDaGFuZ2VBbGxvd2VkID0gVFJVRTsKIAkJaWYgKElzRmxhc2gyeChBZGFwdGVyKSkgewotCQkJLyoKLQkJCSAqIE5ldyBSZXF1aXJlbWVudDotCi0JCQkgKiBEU0Qgc2VjdGlvbiB1cGRhdGlvbiB3aWxsIGJlIGFsbG93ZWQgaW4gdHdvIGNhc2U6LQotCQkJICogMS4gIGlmIERTRCBzaWcgaXMgcHJlc2VudCBpbiBEU0QgaGVhZGVyIG1lYW5zIGRvbmdsZQotCQkJICogaXMgb2sgYW5kIHVwZGF0aW9uIGlzIGZydWl0ZnVsbAotCQkJICogMi4gIGlmIHBvaW50IDEgZmFpbGVzIHRoZW4gdXNlciBidWZmIHNob3VsZCBoYXZlCi0JCQkgKiBEU0Qgc2lnLiB0aGlzIHBvaW50IGVuc3VyZXMgdGhhdCBpZiBkb25nbGUgaXMKLQkJCSAqIGNvcnJ1cHRlZCB0aGVuIHVzZXIgc3BhY2UgcHJvZ3JhbSBmaXJzdCBtb2RpZnkKLQkJCSAqIHRoZSBEU0QgaGVhZGVyIHdpdGggdmFsaWQgRFNEIHNpZyBzbyB0aGF0IHRoaXMKLQkJCSAqIGFzIHdlbGwgYXMgZnVydGhlciB3cml0ZSBtYXkgYmUgd29ydGh3aGlsZS4KLQkJCSAqCi0JCQkgKiBUaGlzIHJlc3RyaWN0aW9uIGhhcyBiZWVuIHB1dCBhc3N1bWluZyB0aGF0Ci0JCQkgKiBpZiBEU0Qgc2lnIGlzIGNvcnJ1cHRlZCwgRFNEIGRhdGEgd29uJ3QgYmUKLQkJCSAqIGNvbnNpZGVyZWQgdmFsaWQuCi0JCQkgKi8KLQotCQkJU3RhdHVzID0gQmNtRmxhc2gyeENvcnJ1cHRTaWcoQWRhcHRlciwKLQkJCQlBZGFwdGVyLT5lQWN0aXZlRFNEKTsKLQkJCWlmIChTdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlpZiAoKChzdE5WTVJlYWRXcml0ZS51aU9mZnNldCArIHN0TlZNUmVhZFdyaXRlLnVpTnVtQnl0ZXMpICE9Ci0JCQkJCUFkYXB0ZXItPnVpTlZNRFNEU2l6ZSkgfHwKLQkJCQkJKHN0TlZNUmVhZFdyaXRlLnVpTnVtQnl0ZXMgPCBTSUdOQVRVUkVfU0laRSkpIHsKLQotCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLAotCQkJCQkJT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkJCQkJIkRTRCBTaWcgaXMgcHJlc2VudCBuZWl0aGVyIGluIEZsYXNoIG5vciBVc2VyIHByb3ZpZGVkIElucHV0Li4iKTsKLQkJCQkJdXAoJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOwotCQkJCQlrZnJlZShwUmVhZERhdGEpOwotCQkJCQlyZXR1cm4gU3RhdHVzOwotCQkJCX0KLQotCQkJCXVsRFNETWFnaWNOdW1JblVzckJ1ZmYgPSBudG9obCgqKFBVSU5UKShwUmVhZERhdGEgKyBzdE5WTVJlYWRXcml0ZS51aU51bUJ5dGVzIC0gU0lHTkFUVVJFX1NJWkUpKTsKLQkJCQlpZiAodWxEU0RNYWdpY051bUluVXNyQnVmZiAhPQotCQkJCQlEU0RfSU1BR0VfTUFHSUNfTlVNQkVSKSB7Ci0JCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLAotCQkJCQlEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJCQkJCSJEU0QgU2lnIGlzIHByZXNlbnQgbmVpdGhlciBpbiBGbGFzaCBub3IgVXNlciBwcm92aWRlZCBJbnB1dC4uIik7Ci0JCQkJCXVwKCZBZGFwdGVyLT5OVk1SZG1Xcm1Mb2NrKTsKLQkJCQkJa2ZyZWUocFJlYWREYXRhKTsKLQkJCQkJcmV0dXJuIFN0YXR1czsKLQkJCQl9Ci0JCQl9CisJCQlpbnQgcmV0ID0gaGFuZGxlX2ZsYXNoMnhfYWRhcHRlcihBZGFwdGVyLAorCQkJCQkJCXBSZWFkRGF0YSwKKwkJCQkJCQkmc3ROVk1SZWFkV3JpdGUpOworCQkJaWYgKHJldCAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJU3RhdHVzID0gQmVjZWVtTlZNV3JpdGUoQWRhcHRlciwgKFBVSU5UKXBSZWFkRGF0YSwKQEAgLTE1NDYsNyArMTU4NSw4IEBACiAJZG9fZ2V0dGltZW9mZGF5KCZ0djEpOwogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKIAkJIiB0aW1ldGFrZW4gYnkgV3JpdGUvcmVhZCA6JWxkIG1zZWNcbiIsCi0JCSh0djEudHZfc2VjIC0gdHYwLnR2X3NlYykqMTAwMCArICh0djEudHZfdXNlYyAtIHR2MC50dl91c2VjKS8xMDAwKTsKKwkJKHR2MS50dl9zZWMgLSB0djAudHZfc2VjKSoxMDAwICsKKwkJKHR2MS50dl91c2VjIC0gdHYwLnR2X3VzZWMpLzEwMDApOwogCiAJa2ZyZWUocFJlYWREYXRhKTsKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNTgyLDEzICsxNjIyLDE3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiXG5zRmxhc2gyeFJlYWQuU2VjdGlvbiA6JXgiLCBzRmxhc2gyeFJlYWQuU2VjdGlvbik7CisJCQkiXG5zRmxhc2gyeFJlYWQuU2VjdGlvbiA6JXgiLAorCQkJc0ZsYXNoMnhSZWFkLlNlY3Rpb24pOwogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJIlxuc0ZsYXNoMnhSZWFkLm9mZnNldCA6JXgiLCBzRmxhc2gyeFJlYWQub2Zmc2V0KTsKKwkJCSJcbnNGbGFzaDJ4UmVhZC5vZmZzZXQgOiV4IiwKKwkJCXNGbGFzaDJ4UmVhZC5vZmZzZXQpOwogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJIlxuc0ZsYXNoMnhSZWFkLm51bU9mQnl0ZXMgOiV4Iiwgc0ZsYXNoMnhSZWFkLm51bU9mQnl0ZXMpOworCQkJIlxuc0ZsYXNoMnhSZWFkLm51bU9mQnl0ZXMgOiV4IiwKKwkJCXNGbGFzaDJ4UmVhZC5udW1PZkJ5dGVzKTsKIAlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBPU0FMX0RCRywgREJHX0xWTF9BTEwsCi0JCSJcbnNGbGFzaDJ4UmVhZC5iVmVyaWZ5IDoleFxuIiwgc0ZsYXNoMnhSZWFkLmJWZXJpZnkpOworCQkJIlxuc0ZsYXNoMnhSZWFkLmJWZXJpZnkgOiV4XG4iLAorCQkJc0ZsYXNoMnhSZWFkLmJWZXJpZnkpOwogCiAJLyogVGhpcyB3YXMgaW50ZXJuYWwgdG8gZHJpdmVyIGZvciByYXcgcmVhZC4KIAkgKiBub3cgaXQgaGFzIGJlbiBleHBvc2VkIHRvIHVzZXIgc3BhY2UgYXBwLgpAQCAtMTYwOCw3ICsxNjUyLDcgQEAKIAogCWlmIChwUmVhZEJ1ZmYgPT0gTlVMTCkgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAotCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgRmxhc2ggMi54IFJlYWQgU3RydWN0dXJlIik7CisJCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgRmxhc2ggMi54IFJlYWQgU3RydWN0dXJlIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlkb3duKCZBZGFwdGVyLT5OVk1SZG1Xcm1Mb2NrKTsKQEAgLTE2MTgsNyArMTY2Miw4IEBACiAJCShBZGFwdGVyLT5iUHJlcGFyaW5nRm9yTG93UG93ZXJNb2RlID09IFRSVUUpKSB7CiAKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsCi0JCQlEQkdfTFZMX0FMTCwgIkRldmljZSBpcyBpbiBJZGxlL1NodXRkb3duIE1vZGVcbiIpOworCQkJCURCR19MVkxfQUxMLAorCQkJCSJEZXZpY2UgaXMgaW4gSWRsZS9TaHV0ZG93biBNb2RlXG4iKTsKIAkJdXAoJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOwogCQlrZnJlZShwUmVhZEJ1ZmYpOwogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTE3MzUsOCArMTc4MCwxMCBAQAogCiAJLyogZXh0cmFjdGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBnaXZlbiBvZmZzZXQuICovCiAJV3JpdGVCeXRlcyA9IEFkYXB0ZXItPnVpU2VjdG9yU2l6ZTsKLQlpZiAoV3JpdGVPZmZzZXQgJSBBZGFwdGVyLT51aVNlY3RvclNpemUpCi0JCVdyaXRlQnl0ZXMgPSBBZGFwdGVyLT51aVNlY3RvclNpemUgLSAoV3JpdGVPZmZzZXQgJSBBZGFwdGVyLT51aVNlY3RvclNpemUpOworCWlmIChXcml0ZU9mZnNldCAlIEFkYXB0ZXItPnVpU2VjdG9yU2l6ZSkgeworCQlXcml0ZUJ5dGVzID0gQWRhcHRlci0+dWlTZWN0b3JTaXplIC0KKwkJCShXcml0ZU9mZnNldCAlIEFkYXB0ZXItPnVpU2VjdG9yU2l6ZSk7CisJfQogCiAJaWYgKE5PQiA8IFdyaXRlQnl0ZXMpCiAJCVdyaXRlQnl0ZXMgPSBOT0I7CkBAIC0xNzY5LDggKzE4MTYsMTAgQEAKIAogCQkvKiBXcml0aW5nIHRoZSBkYXRhIGZyb20gRmxhc2ggMi54ICovCiAJCVN0YXR1cyA9IEJjbUZsYXNoMnhCdWxrV3JpdGUoQWRhcHRlciwgKFBVSU5UKXBXcml0ZUJ1ZmYsCi0JCQlzRmxhc2gyeFdyaXRlLlNlY3Rpb24sIFdyaXRlT2Zmc2V0LCBXcml0ZUJ5dGVzLAotCQkJc0ZsYXNoMnhXcml0ZS5iVmVyaWZ5KTsKKwkJCQkJICAgICBzRmxhc2gyeFdyaXRlLlNlY3Rpb24sCisJCQkJCSAgICAgV3JpdGVPZmZzZXQsCisJCQkJCSAgICAgV3JpdGVCeXRlcywKKwkJCQkJICAgICBzRmxhc2gyeFdyaXRlLmJWZXJpZnkpOwogCiAJCWlmIChTdGF0dXMpIHsKIAkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCkBAIC0xODAwLDcgKzE4NDksNiBAQAogewogCXN0cnVjdCBiY21fZmxhc2gyeF9iaXRtYXAgKnBzRmxhc2gyeEJpdE1hcDsKIAlzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlciBJb0J1ZmZlcjsKLQlJTlQgU3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7CiAKIEJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKIAkiSU9DVExfQkNNX0dFVF9GTEFTSDJYX1NFQ1RJT05fQklUTUFQIENhbGxlZCIpOwpAQCAtMTgxMSw3ICsxODU5LDkgQEAKIAlpZiAoSW9CdWZmZXIuT3V0cHV0TGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgYmNtX2ZsYXNoMnhfYml0bWFwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwc0ZsYXNoMnhCaXRNYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmNtX2ZsYXNoMnhfYml0bWFwKSwgR0ZQX0tFUk5FTCk7CisJcHNGbGFzaDJ4Qml0TWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJjbV9mbGFzaDJ4X2JpdG1hcCksCisJCQlHRlBfS0VSTkVMKTsKKwogCWlmIChwc0ZsYXNoMnhCaXRNYXAgPT0gTlVMTCkgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAogCQkJIk1lbW9yeSBpcyBub3QgYXZhaWxhYmxlIik7CkBAIC0xODQxLDcgKzE4OTEsNyBAQAogCX0KIAogCWtmcmVlKHBzRmxhc2gyeEJpdE1hcCk7Ci0JcmV0dXJuIFN0YXR1czsKKwlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiB9CiAKIHN0YXRpYyBpbnQgYmNtX2NoYXJfaW9jdGxfc2V0X2FjdGl2ZV9zZWN0aW9uKHZvaWQgX191c2VyICphcmdwLApAQCAtMTg1MiwyMyArMTkwMiwyNCBAQAogCXN0cnVjdCBiY21faW9jdGxfYnVmZmVyIElvQnVmZmVyOwogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiSU9DVExfQkNNX1NFVF9BQ1RJVkVfU0VDVElPTiBDYWxsZWQiKTsKKwkJCSJJT0NUTF9CQ01fU0VUX0FDVElWRV9TRUNUSU9OIENhbGxlZCIpOwogCiAJaWYgKElzRmxhc2gyeChBZGFwdGVyKSAhPSBUUlVFKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiRmxhc2ggRG9lcyBub3QgaGF2ZSAyLnggbWFwIik7CisJCQkJIkZsYXNoIERvZXMgbm90IGhhdmUgMi54IG1hcCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmSW9CdWZmZXIsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlcikpOworCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJb0J1ZmZlciwgYXJncCwKKwkJCQlzaXplb2Yoc3RydWN0IGJjbV9pb2N0bF9idWZmZXIpKTsKIAlpZiAoU3RhdHVzKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiQ29weSBvZiBJT0NUTCBCVUZGRVIgZmFpbGVkIik7CisJCQkJIkNvcHkgb2YgSU9DVEwgQlVGRkVSIGZhaWxlZCIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmZUZsYXNoMnhTZWN0aW9uVmFsLAotCQlJb0J1ZmZlci5JbnB1dEJ1ZmZlciwgc2l6ZW9mKElOVCkpOworCQkJCUlvQnVmZmVyLklucHV0QnVmZmVyLCBzaXplb2YoSU5UKSk7CiAJaWYgKFN0YXR1cykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAogCQkJIkNvcHkgb2YgZmxhc2ggc2VjdGlvbiB2YWwgZmFpbGVkIik7CkBAIC0xODgyLDcgKzE5MzMsNyBAQAogCQkoQWRhcHRlci0+YlByZXBhcmluZ0Zvckxvd1Bvd2VyTW9kZSA9PSBUUlVFKSkgewogCiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJCSJEZXZpY2UgaXMgaW4gSWRsZS9TaHV0ZG93biBNb2RlXG4iKTsKKwkJCQkiRGV2aWNlIGlzIGluIElkbGUvU2h1dGRvd24gTW9kZVxuIik7CiAJCXVwKCZBZGFwdGVyLT5OVk1SZG1Xcm1Mb2NrKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQpAQCAtMTg5MCw4ICsxOTQxLDggQEAKIAlTdGF0dXMgPSBCY21TZXRBY3RpdmVTZWN0aW9uKEFkYXB0ZXIsIGVGbGFzaDJ4U2VjdGlvblZhbCk7CiAJaWYgKFN0YXR1cykKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCSJGYWlsZWQgdG8gbWFrZSBpdCdzIHByaW9yaXR5IEhpZ2hlc3QuIFN0YXR1cyAlZCIsCi0JCQlTdGF0dXMpOworCQkJCSJGYWlsZWQgdG8gbWFrZSBpdCdzIHByaW9yaXR5IEhpZ2hlc3QuIFN0YXR1cyAlZCIsCisJCQkJU3RhdHVzKTsKIAogCXVwKCZBZGFwdGVyLT5OVk1SZG1Xcm1Mb2NrKTsKIApAQCAtMTkwNiw1NyArMTk1Nyw1OSBAQAogCUlOVCBTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKIAogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJIklPQ1RMX0JDTV9DT1BZX1NFQ1RJT04gIENhbGxlZCIpOworCQkJIklPQ1RMX0JDTV9DT1BZX1NFQ1RJT04gIENhbGxlZCIpOwogCiAJQWRhcHRlci0+YkFsbERTRFdyaXRlQWxsb3cgPSBmYWxzZTsKIAlpZiAoSXNGbGFzaDJ4KEFkYXB0ZXIpICE9IFRSVUUpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCSJGbGFzaCBEb2VzIG5vdCBoYXZlIDIueCBtYXAiKTsKKwkJCQkiRmxhc2ggRG9lcyBub3QgaGF2ZSAyLnggbWFwIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJb0J1ZmZlciwgYXJncCwgc2l6ZW9mKHN0cnVjdCBiY21faW9jdGxfYnVmZmVyKSk7CisJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJklvQnVmZmVyLCBhcmdwLAorCQkJCXNpemVvZihzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlcikpOwogCWlmIChTdGF0dXMpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCSJDb3B5IG9mIElPQ1RMIEJVRkZFUiBmYWlsZWQgU3RhdHVzIDolZCIsIFN0YXR1cyk7CisJCQkJIkNvcHkgb2YgSU9DVEwgQlVGRkVSIGZhaWxlZCBTdGF0dXMgOiVkIiwKKwkJCQlTdGF0dXMpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmc0NvcHlTZWN0U3RydXQsIElvQnVmZmVyLklucHV0QnVmZmVyLAotCQkJc2l6ZW9mKHN0cnVjdCBiY21fZmxhc2gyeF9jb3B5X3NlY3Rpb24pKTsKKwkJCQlzaXplb2Yoc3RydWN0IGJjbV9mbGFzaDJ4X2NvcHlfc2VjdGlvbikpOwogCWlmIChTdGF0dXMpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCSJDb3B5IG9mIENvcHlfU2VjdGlvbl9TdHJ1Y3QgZmFpbGVkIHdpdGggU3RhdHVzIDolZCIsCi0JCQlTdGF0dXMpOworCQkJCSJDb3B5IG9mIENvcHlfU2VjdGlvbl9TdHJ1Y3QgZmFpbGVkIHdpdGggU3RhdHVzIDolZCIsCisJCQkJU3RhdHVzKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiU291cmNlIFNFY3Rpb24gOiV4Iiwgc0NvcHlTZWN0U3RydXQuU3JjU2VjdGlvbik7CisJCQkiU291cmNlIFNFY3Rpb24gOiV4Iiwgc0NvcHlTZWN0U3RydXQuU3JjU2VjdGlvbik7CiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiRGVzdGluYXRpb24gU0VjdGlvbiA6JXgiLCBzQ29weVNlY3RTdHJ1dC5Ec3RTZWN0aW9uKTsKKwkJCSJEZXN0aW5hdGlvbiBTRWN0aW9uIDoleCIsIHNDb3B5U2VjdFN0cnV0LkRzdFNlY3Rpb24pOwogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJIm9mZnNldCA6JXgiLCBzQ29weVNlY3RTdHJ1dC5vZmZzZXQpOworCQkJIm9mZnNldCA6JXgiLCBzQ29weVNlY3RTdHJ1dC5vZmZzZXQpOwogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJIk5PQiA6JXgiLCBzQ29weVNlY3RTdHJ1dC5udW1PZkJ5dGVzKTsKKwkJCSJOT0IgOiV4Iiwgc0NvcHlTZWN0U3RydXQubnVtT2ZCeXRlcyk7CiAKIAlpZiAoSXNTZWN0aW9uRXhpc3RJbkZsYXNoKEFkYXB0ZXIsIHNDb3B5U2VjdFN0cnV0LlNyY1NlY3Rpb24pID09IGZhbHNlKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiU291cmNlIFNlY3Rpb248JXg+IGRvZXMgbm90IGV4aXN0IGluIEZsYXNoICIsCi0JCQlzQ29weVNlY3RTdHJ1dC5TcmNTZWN0aW9uKTsKKwkJCQkiU291cmNlIFNlY3Rpb248JXg+IGRvZXMgbm90IGV4aXN0IGluIEZsYXNoICIsCisJCQkJc0NvcHlTZWN0U3RydXQuU3JjU2VjdGlvbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChJc1NlY3Rpb25FeGlzdEluRmxhc2goQWRhcHRlciwgc0NvcHlTZWN0U3RydXQuRHN0U2VjdGlvbikgPT0gZmFsc2UpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCSJEZXN0aW5hdGlvIFNlY3Rpb248JXg+IGRvZXMgbm90IGV4aXN0IGluIEZsYXNoICIsCi0JCQlzQ29weVNlY3RTdHJ1dC5Ec3RTZWN0aW9uKTsKKwkJCQkiRGVzdGluYXRpbyBTZWN0aW9uPCV4PiBkb2VzIG5vdCBleGlzdCBpbiBGbGFzaCAiLAorCQkJCXNDb3B5U2VjdFN0cnV0LkRzdFNlY3Rpb24pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoc0NvcHlTZWN0U3RydXQuU3JjU2VjdGlvbiA9PSBzQ29weVNlY3RTdHJ1dC5Ec3RTZWN0aW9uKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJCSJTb3VyY2UgYW5kIERlc3RpbmF0aW9uIHNlY3Rpb24gc2hvdWxkIGJlIGRpZmZlcmVudCIpOworCQkJCSJTb3VyY2UgYW5kIERlc3RpbmF0aW9uIHNlY3Rpb24gc2hvdWxkIGJlIGRpZmZlcmVudCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5NjcsNyArMjAyMCw3IEBACiAJCShBZGFwdGVyLT5iUHJlcGFyaW5nRm9yTG93UG93ZXJNb2RlID09IFRSVUUpKSB7CiAKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkJIkRldmljZSBpcyBpbiBJZGxlL1NodXRkb3duIE1vZGVcbiIpOworCQkJCSJEZXZpY2UgaXMgaW4gSWRsZS9TaHV0ZG93biBNb2RlXG4iKTsKIAkJdXAoJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC0xOTc2LDEzICsyMDI5LDEzIEBACiAJCXNDb3B5U2VjdFN0cnV0LlNyY1NlY3Rpb24gPT0gSVNPX0lNQUdFMikgewogCQlpZiAoSXNOb25DRExlc3NEZXZpY2UoQWRhcHRlcikpIHsKIAkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkJIkRldmljZSBpcyBOb24tQ0RMZXNzIGhlbmNlIHdvbid0IGhhdmUgSVNPICEhIik7CisJCQkJCSJEZXZpY2UgaXMgTm9uLUNETGVzcyBoZW5jZSB3b24ndCBoYXZlIElTTyAhISIpOwogCQkJU3RhdHVzID0gLUVJTlZBTDsKIAkJfSBlbHNlIGlmIChzQ29weVNlY3RTdHJ1dC5udW1PZkJ5dGVzID09IDApIHsKIAkJCVN0YXR1cyA9IEJjbUNvcHlJU08oQWRhcHRlciwgc0NvcHlTZWN0U3RydXQpOwogCQl9IGVsc2UgewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCQkiUGFydGlhbCBDb3B5IG9mIElTTyBzZWN0aW9uIGlzIG5vdCBBbGxvd2VkLi4iKTsKKwkJCQkJIlBhcnRpYWwgQ29weSBvZiBJU08gc2VjdGlvbiBpcyBub3QgQWxsb3dlZC4uIik7CiAJCQlTdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKIAkJfQogCQl1cCgmQWRhcHRlci0+TlZNUmRtV3JtTG9jayk7CkBAIC0yMDA0LDE4ICsyMDU3LDE5IEBACiAJSU5UIFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiIElPQ1RMX0JDTV9HRVRfRkxBU0hfQ1NfSU5GTyBDYWxsZWQiKTsKKwkJCSIgSU9DVExfQkNNX0dFVF9GTEFTSF9DU19JTkZPIENhbGxlZCIpOwogCi0JU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJklvQnVmZmVyLCBhcmdwLCBzaXplb2Yoc3RydWN0IGJjbV9pb2N0bF9idWZmZXIpKTsKKwlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmSW9CdWZmZXIsIGFyZ3AsCisJCQlzaXplb2Yoc3RydWN0IGJjbV9pb2N0bF9idWZmZXIpKTsKIAlpZiAoU3RhdHVzKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiQ29weSBvZiBJT0NUTCBCVUZGRVIgZmFpbGVkIik7CisJCQkJIkNvcHkgb2YgSU9DVEwgQlVGRkVSIGZhaWxlZCIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlpZiAoQWRhcHRlci0+ZU5WTVR5cGUgIT0gTlZNX0ZMQVNIKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiQ29ubmVjdGVkIGRldmljZSBkb2VzIG5vdCBoYXZlIGZsYXNoIik7CisJCQkJIkNvbm5lY3RlZCBkZXZpY2UgZG9lcyBub3QgaGF2ZSBmbGFzaCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwMjQsMTUgKzIwNzgsMTUgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmIChjb3B5X3RvX3VzZXIoSW9CdWZmZXIuT3V0cHV0QnVmZmVyLAotCQkJQWRhcHRlci0+cHNGbGFzaDJ4Q1NJbmZvLAotCQkJc2l6ZW9mKHN0cnVjdCBiY21fZmxhc2gyeF9jc19pbmZvKSkpCisJCQkJIEFkYXB0ZXItPnBzRmxhc2gyeENTSW5mbywKKwkJCQkgc2l6ZW9mKHN0cnVjdCBiY21fZmxhc2gyeF9jc19pbmZvKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgewogCQlpZiAoSW9CdWZmZXIuT3V0cHV0TGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBiY21fZmxhc2hfY3NfaW5mbykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoY29weV90b191c2VyKElvQnVmZmVyLk91dHB1dEJ1ZmZlciwgQWRhcHRlci0+cHNGbGFzaENTSW5mbywKLQkJCXNpemVvZihzdHJ1Y3QgYmNtX2ZsYXNoX2NzX2luZm8pKSkKKwkJCQkgc2l6ZW9mKHN0cnVjdCBiY21fZmxhc2hfY3NfaW5mbykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXJldHVybiBTdGF0dXM7CkBAIC0yMDQ4LDQ1ICsyMTAyLDQ2IEBACiAKIAllRmxhc2gyeFNlY3Rpb25WYWwgPSBOT19TRUNUSU9OX1ZBTDsKIAlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBPU0FMX0RCRywgREJHX0xWTF9BTEwsCi0JCSJJT0NUTF9CQ01fU0VMRUNUX0RTRCBDYWxsZWQiKTsKKwkJCSJJT0NUTF9CQ01fU0VMRUNUX0RTRCBDYWxsZWQiKTsKIAogCWlmIChJc0ZsYXNoMngoQWRhcHRlcikgIT0gVFJVRSkgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAotCQkJIkZsYXNoIERvZXMgbm90IGhhdmUgMi54IG1hcCIpOworCQkJCSJGbGFzaCBEb2VzIG5vdCBoYXZlIDIueCBtYXAiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJklvQnVmZmVyLCBhcmdwLCBzaXplb2Yoc3RydWN0IGJjbV9pb2N0bF9idWZmZXIpKTsKKwlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmSW9CdWZmZXIsIGFyZ3AsCisJCQkJc2l6ZW9mKHN0cnVjdCBiY21faW9jdGxfYnVmZmVyKSk7CiAJaWYgKFN0YXR1cykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAotCQkJIkNvcHkgb2YgSU9DVEwgQlVGRkVSIGZhaWxlZCIpOworCQkJCSJDb3B5IG9mIElPQ1RMIEJVRkZFUiBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZlRmxhc2gyeFNlY3Rpb25WYWwsIElvQnVmZmVyLklucHV0QnVmZmVyLAogCQlzaXplb2YoSU5UKSk7CiAJaWYgKFN0YXR1cykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAotCQkJIkNvcHkgb2YgZmxhc2ggc2VjdGlvbiB2YWwgZmFpbGVkIik7CisJCQkJIkNvcHkgb2YgZmxhc2ggc2VjdGlvbiB2YWwgZmFpbGVkIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJIlJlYWQgU2VjdGlvbiA6JWQiLCBlRmxhc2gyeFNlY3Rpb25WYWwpOworCQkJIlJlYWQgU2VjdGlvbiA6JWQiLCBlRmxhc2gyeFNlY3Rpb25WYWwpOwogCWlmICgoZUZsYXNoMnhTZWN0aW9uVmFsICE9IERTRDApICYmCiAJCShlRmxhc2gyeFNlY3Rpb25WYWwgIT0gRFNEMSkgJiYKIAkJKGVGbGFzaDJ4U2VjdGlvblZhbCAhPSBEU0QyKSkgewogCiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiUGFzc2VkIHNlY3Rpb248JXg+IGlzIG5vdCBEU0Qgc2VjdGlvbiIsCi0JCQllRmxhc2gyeFNlY3Rpb25WYWwpOworCQkJCSJQYXNzZWQgc2VjdGlvbjwleD4gaXMgbm90IERTRCBzZWN0aW9uIiwKKwkJCQllRmxhc2gyeFNlY3Rpb25WYWwpOwogCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAJfQogCiAJU2VjdE9mc2V0ID0gQmNtR2V0U2VjdGlvblZhbFN0YXJ0T2Zmc2V0KEFkYXB0ZXIsIGVGbGFzaDJ4U2VjdGlvblZhbCk7CiAJaWYgKFNlY3RPZnNldCA9PSBJTlZBTElEX09GRlNFVCkgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLAotCQkJIlByb3ZpZGVkIFNlY3Rpb24gdmFsIDwlZD4gZG9lcyBub3QgZXhpc3QgaW4gRmxhc2ggMi54IiwKLQkJCWVGbGFzaDJ4U2VjdGlvblZhbCk7CisJCQkJIlByb3ZpZGVkIFNlY3Rpb24gdmFsIDwlZD4gZG9lcyBub3QgZXhpc3QgaW4gRmxhc2ggMi54IiwKKwkJCQllRmxhc2gyeFNlY3Rpb25WYWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIxMTIsMTQgKzIxNjcsMTQgQEAKIAogCWlmIChBZGFwdGVyLT5lTlZNVHlwZSAhPSBOVk1fRkxBU0gpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCSJOVk0gVFlQRSBpcyBub3QgRmxhc2giKTsKKwkJCQkiTlZNIFRZUEUgaXMgbm90IEZsYXNoIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIENvcHkgSW9jdGwgQnVmZmVyIHN0cnVjdHVyZSAqLwogCWlmIChjb3B5X2Zyb21fdXNlcigmSW9CdWZmZXIsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlcikpKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiY29weV9mcm9tX3VzZXIgMSBmYWlsZWRcbiIpOworCQkJCSJjb3B5X2Zyb21fdXNlciAxIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMjE0MSw3ICsyMTk2LDcgQEAKIAlwUmVhZEJ1ZmYgPSBremFsbG9jKEJ1ZmZTaXplICwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBSZWFkQnVmZiA9PSBOVUxMKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCi0JCQkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBGbGFzaCAyLnggUmVhZCBTdHJ1Y3R1cmUiKTsKKwkJCQkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBGbGFzaCAyLnggUmVhZCBTdHJ1Y3R1cmUiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRvd24oJkFkYXB0ZXItPk5WTVJkbVdybUxvY2spOwpAQCAtMjE1MCw4ICsyMjA1LDggQEAKIAkJKEFkYXB0ZXItPmJTaHV0U3RhdHVzID09IFRSVUUpIHx8CiAJCShBZGFwdGVyLT5iUHJlcGFyaW5nRm9yTG93UG93ZXJNb2RlID09IFRSVUUpKSB7CiAKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsCi0JCQlEQkdfTFZMX0FMTCwgIkRldmljZSBpcyBpbiBJZGxlL1NodXRkb3duIE1vZGVcbiIpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBPU0FMX0RCRywgREJHX0xWTF9BTEwsCisJCQkJIkRldmljZSBpcyBpbiBJZGxlL1NodXRkb3duIE1vZGVcbiIpOwogCQlrZnJlZShwUmVhZEJ1ZmYpOwogCQl1cCgmQWRhcHRlci0+TlZNUmRtV3JtTG9jayk7CiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMjE3MCwxNyArMjIyNSwxOSBAQAogCQkJUmVhZE9mZnNldCwgUmVhZEJ5dGVzKTsKIAkJaWYgKFN0YXR1cykgewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCQkiRmxhc2ggMnggcmVhZCBlcnIgd2l0aCBTdGF0dXMgOiVkIiwgU3RhdHVzKTsKKwkJCQkJIkZsYXNoIDJ4IHJlYWQgZXJyIHdpdGggU3RhdHVzIDolZCIsCisJCQkJCVN0YXR1cyk7CiAJCQlicmVhazsKIAkJfQogCiAJCUJDTV9ERUJVR19QUklOVF9CVUZGRVIoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBPU0FMX0RCRywKLQkJCURCR19MVkxfQUxMLCBwUmVhZEJ1ZmYsIFJlYWRCeXRlcyk7CisJCQkJICAgICAgIERCR19MVkxfQUxMLCBwUmVhZEJ1ZmYsIFJlYWRCeXRlcyk7CiAKIAkJU3RhdHVzID0gY29weV90b191c2VyKE91dFB1dEJ1ZmYsIHBSZWFkQnVmZiwgUmVhZEJ5dGVzKTsKIAkJaWYgKFN0YXR1cykgewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKLQkJCQkiQ29weSB0byB1c2UgZmFpbGVkIHdpdGggc3RhdHVzIDolZCIsIFN0YXR1cyk7CisJCQkJCSJDb3B5IHRvIHVzZSBmYWlsZWQgd2l0aCBzdGF0dXMgOiVkIiwKKwkJCQkJU3RhdHVzKTsKIAkJCXVwKCZBZGFwdGVyLT5OVk1SZG1Xcm1Mb2NrKTsKIAkJCWtmcmVlKHBSZWFkQnVmZik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIyMDUsMjYgKzIyNjIsMjcgQEAKIAlVTE9ORyBSeENudHJsTXNnQml0TWFzayA9IDA7CiAKIAkvKiBDb3B5IElvY3RsIEJ1ZmZlciBzdHJ1Y3R1cmUgKi8KLQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmSW9CdWZmZXIsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlcikpOworCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJb0J1ZmZlciwgYXJncCwKKwkJCXNpemVvZihzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlcikpOwogCWlmIChTdGF0dXMpIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkJImNvcHkgb2YgSW9jdGwgYnVmZmVyIGlzIGZhaWxlZCBmcm9tIHVzZXIgc3BhY2UiKTsKKwkJCQkiY29weSBvZiBJb2N0bCBidWZmZXIgaXMgZmFpbGVkIGZyb20gdXNlciBzcGFjZSIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlpZiAoSW9CdWZmZXIuSW5wdXRMZW5ndGggIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZSeENudHJsTXNnQml0TWFzaywKLQkJSW9CdWZmZXIuSW5wdXRCdWZmZXIsIElvQnVmZmVyLklucHV0TGVuZ3RoKTsKKwlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmUnhDbnRybE1zZ0JpdE1hc2ssIElvQnVmZmVyLklucHV0QnVmZmVyLAorCQkJCUlvQnVmZmVyLklucHV0TGVuZ3RoKTsKIAlpZiAoU3RhdHVzKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJCSJjb3B5IG9mIGNvbnRyb2wgYml0IG1hc2sgZmFpbGVkIGZyb20gdXNlciBzcGFjZSIpOworCQkJCSJjb3B5IG9mIGNvbnRyb2wgYml0IG1hc2sgZmFpbGVkIGZyb20gdXNlciBzcGFjZSIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiXG4gR290IHVzZXIgZGVmaW5lZCBjbnRybCBtc2cgYml0IG1hc2sgOiVseCIsCi0JCVJ4Q250cmxNc2dCaXRNYXNrKTsKKwkJCSJcbiBHb3QgdXNlciBkZWZpbmVkIGNudHJsIG1zZyBiaXQgbWFzayA6JWx4IiwKKwkJCVJ4Q250cmxNc2dCaXRNYXNrKTsKIAlwVGFyYW5nLT5SeENudHJsTXNnQml0TWFzayA9IFJ4Q250cmxNc2dCaXRNYXNrOwogCiAJcmV0dXJuIFN0YXR1czsKQEAgLTIyMzYsOCArMjI5NCw4IEBACiAJc3RydWN0IGJjbV9kcml2ZXJfaW5mbyBEZXZJbmZvOwogCXN0cnVjdCBiY21faW9jdGxfYnVmZmVyIElvQnVmZmVyOwogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsCi0JCURCR19MVkxfQUxMLCAiQ2FsbGVkIElPQ1RMX0JDTV9HRVRfREVWSUNFX0RSSVZFUl9JTkZPXG4iKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBPU0FMX0RCRywgREJHX0xWTF9BTEwsCisJCQkiQ2FsbGVkIElPQ1RMX0JDTV9HRVRfREVWSUNFX0RSSVZFUl9JTkZPXG4iKTsKIAogCW1lbXNldCgmRGV2SW5mbywgMCwgc2l6ZW9mKERldkluZm8pKTsKIAlEZXZJbmZvLk1heFJETUJ1ZmZlclNpemUgPSBCVUZGRVJfNEs7CkBAIC0yMjY1LDcgKzIzMjMsNyBAQAogCXN0cnVjdCBiY21faW9jdGxfYnVmZmVyIElvQnVmZmVyOwogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAotCQkiSU9DVExfQkNNX1RJTUVfU0lOQ0VfTkVUX0VOVFJZIGNhbGxlZCIpOworCQkJIklPQ1RMX0JDTV9USU1FX1NJTkNFX05FVF9FTlRSWSBjYWxsZWQiKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmSW9CdWZmZXIsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgYmNtX2lvY3RsX2J1ZmZlcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIyNzcsNyArMjMzNSw3IEBACiAJCWdldF9zZWNvbmRzKCkgLSBBZGFwdGVyLT5saVRpbWVTaW5jZUxhc3ROZXRFbnRyeTsKIAogCWlmIChjb3B5X3RvX3VzZXIoSW9CdWZmZXIuT3V0cHV0QnVmZmVyLCAmc3RUaW1lRWxhcHNlZFNpbmNlTmV0RW50cnksCi0JCXNpemVvZihzdHJ1Y3QgYmNtX3RpbWVfZWxhcHNlZCkpKQorCQkJIHNpemVvZihzdHJ1Y3QgYmNtX3RpbWVfZWxhcHNlZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKQEAgLTIzNTUsNyArMjQxMyw4IEBACiAJCXJldHVybiBTdGF0dXM7CiAKIAljYXNlIEJDTV9MRURfVEhSRUFEX1NUQVRFX0NIQU5HRV9SRVE6Ci0JCVN0YXR1cyA9IGJjbV9jaGFyX2lvY3RsX2xlZF90aHJlYWRfc3RhdGVfY2hhbmdlX3JlcShhcmdwLCBBZGFwdGVyKTsKKwkJU3RhdHVzID0gYmNtX2NoYXJfaW9jdGxfbGVkX3RocmVhZF9zdGF0ZV9jaGFuZ2VfcmVxKGFyZ3AsCisJCQkJCQkJCSAgICBBZGFwdGVyKTsKIAkJcmV0dXJuIFN0YXR1czsKIAogCWNhc2UgSU9DVExfQkNNX0dQSU9fU1RBVFVTX1JFUVVFU1Q6CkBAIC0yMzk0LDEzICsyNDUzLDE1IEBACiAKIAljYXNlIElPQ1RMX0JFX0JVQ0tFVF9TSVpFOgogCQlTdGF0dXMgPSAwOwotCQlpZiAoZ2V0X3VzZXIoQWRhcHRlci0+QkVCdWNrZXRTaXplLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpKQorCQlpZiAoZ2V0X3VzZXIoQWRhcHRlci0+QkVCdWNrZXRTaXplLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpKQogCQkJU3RhdHVzID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ1RMX1JUUFNfQlVDS0VUX1NJWkU6CiAJCVN0YXR1cyA9IDA7Ci0JCWlmIChnZXRfdXNlcihBZGFwdGVyLT5ydFBTQnVja2V0U2l6ZSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKSkKKwkJaWYgKGdldF91c2VyKEFkYXB0ZXItPnJ0UFNCdWNrZXRTaXplLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpKQogCQkJU3RhdHVzID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKQEAgLTI0MjAsNyArMjQ4MSw3IEBACiAKIAljYXNlIElPQ1RMX0dFVF9QQUNLX0lORk86CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJkFkYXB0ZXItPlBhY2tJbmZvLAotCQkJc2l6ZW9mKHN0cnVjdCBiY21fcGFja2V0X2luZm8pKk5PX09GX1FVRVVFUykpCisJCQkJIHNpemVvZihzdHJ1Y3QgYmNtX3BhY2tldF9pbmZvKSpOT19PRl9RVUVVRVMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCVN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogCQlicmVhazsKQEAgLTI0NTEsNyArMjUxMiw3IEBACiAKIAljYXNlIElPQ1RMX0JDTV9XQUtFX1VQX0RFVklDRV9GUk9NX0lETEU6CiAJCWlmICgoZmFsc2UgPT0gQWRhcHRlci0+YlRyaWVkVG9XYWtlVXBGcm9tbG93UG93ZXJNb2RlKSAmJgotCQkJKFRSVUUgPT0gQWRhcHRlci0+SWRsZU1vZGUpKSB7CisJCQkJKFRSVUUgPT0gQWRhcHRlci0+SWRsZU1vZGUpKSB7CiAJCQlBZGFwdGVyLT51c0lkbGVNb2RlUGF0dGVybiA9IEFCT1JUX0lETEVfTU9ERTsKIAkJCUFkYXB0ZXItPmJXYWtlVXBEZXZpY2UgPSBUUlVFOwogCQkJd2FrZV91cCgmQWRhcHRlci0+cHJvY2Vzc19yeF9jbnRybHBrdCk7CkBAIC0yNTAxLDcgKzI1NjIsNyBAQAogCQkvKiBSaWdodCBOb3cgd2UgYXJlIHRha2luZyBjYXJlIG9mIG9ubHkgRFNEICovCiAJCUFkYXB0ZXItPmJBbGxEU0RXcml0ZUFsbG93ID0gZmFsc2U7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLCBEQkdfTFZMX0FMTCwKLQkJCSJJT0NUTF9CQ01fSURFTlRJRllfQUNUSVZFX1NFQ1RJT04gY2FsbGVkIik7CisJCQkJIklPQ1RMX0JDTV9JREVOVElGWV9BQ1RJVkVfU0VDVElPTiBjYWxsZWQiKTsKIAkJU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAJCWJyZWFrOwogCkBAIC0yNTM0LDggKzI1OTUsOCBAQAogCQlyZXR1cm4gU3RhdHVzOwogCiAJY2FzZSBJT0NUTF9DTE9TRV9OT1RJRklDQVRJT046Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIE9TQUxfREJHLAotCQkJREJHX0xWTF9BTEwsICJJT0NUTF9DTE9TRV9OT1RJRklDQVRJT04iKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgT1NBTF9EQkcsIERCR19MVkxfQUxMLAorCQkJCSJJT0NUTF9DTE9TRV9OT1RJRklDQVRJT04iKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjU2OSw4ICsyNjMwLDggQEAKIAl9CiAKIAlBZGFwdGVyLT5wc3RDcmVhdGVkQ2xhc3NEZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGJjbV9jbGFzcywgTlVMTCwKLQkJCQkJCU1LREVWKEFkYXB0ZXItPm1ham9yLCAwKSwKLQkJCQkJCUFkYXB0ZXIsIERFVl9OQU1FKTsKKwkJCQkJCSAgICAgICBNS0RFVihBZGFwdGVyLT5tYWpvciwgMCksCisJCQkJCQkgICAgICAgQWRhcHRlciwgREVWX05BTUUpOwogCiAJaWYgKElTX0VSUihBZGFwdGVyLT5wc3RDcmVhdGVkQ2xhc3NEZXZpY2UpKSB7CiAJCXByX2VycihEUlZfTkFNRSAiOiBjbGFzcyBkZXZpY2UgY3JlYXRlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0NtSG9zdC5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9DbUhvc3QuYwppbmRleCA2MzJmODFhLi5mYjFkOTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0NtSG9zdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vQ21Ib3N0LmMKQEAgLTEzLDcgKzEzLDE5IEBACiAJZURlbGV0ZUNsYXNzaWZpZXIKIH07CiAKLXN0YXRpYyBVTE9ORyBHZXROZXh0VGFyZ2V0QnVmZmVyTG9jYXRpb24oc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIEJfVUlOVDE2IHRpZCk7CitzdGF0aWMgVUxPTkcgR2V0TmV4dFRhcmdldEJ1ZmZlckxvY2F0aW9uKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCQlCX1VJTlQxNiB0aWQpOworc3RhdGljIHZvaWQgcmVzdG9yZV9lbmRpYW5lc3Nfb2ZfcHN0Q2xhc3NpZmllckVudHJ5KAorCQlzdHJ1Y3QgYmNtX2NsYXNzaWZpZXJfcnVsZSAqcHN0Q2xhc3NpZmllckVudHJ5LAorCQllbnVtIGJjbV9pcGFkZHJfY29udGV4dCBlSXBBZGRyQ29udGV4dCk7CisKK3N0YXRpYyB2b2lkIGFwcGx5X3Boc19ydWxlX3RvX2FsbF9jbGFzc2lmaWVycygKKwkJcmVnaXN0ZXIgc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCXJlZ2lzdGVyIFVJTlQgdWlTZWFyY2hSdWxlSW5kZXgsCisJCVVTSE9SVCB1VkNJRCwKKwkJc3RydWN0IGJjbV9waHNfcnVsZSAqc1Boc1J1bGUsCisJCXN0cnVjdCBiY21fcGhzX3J1bGVzICpjUGhzUnVsZSwKKwkJc3RydWN0IGJjbV9hZGRfaW5kaWNhdGlvbl9hbHQgKnBzdEFkZEluZGljYXRpb24pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBGdW5jdGlvbiAtIFNlYXJjaFNmaWQKQEAgLTY3LDEzICs3OSwxNiBAQAogICogIEJfVUlOVDE2ICB1aUNsYXNzaWZpZXJJRCAtIFRoZSBjbGFzc2lmaWVyIElEIHRvIGJlIHNlYXJjaGVkCiAgKiBSZXR1cm46IGludCA6Q2xhc3NpZmllciB0YWJsZSBpbmRleCBvZiBtYXRjaGluZyBlbnRyeQogICovCi1zdGF0aWMgaW50IFNlYXJjaENsc2lkKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBVTE9ORyB1bFNGSUQsIEJfVUlOVDE2ICB1aUNsYXNzaWZpZXJJRCkKK3N0YXRpYyBpbnQgU2VhcmNoQ2xzaWQoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCVVMT05HIHVsU0ZJRCwKKwkJQl9VSU5UMTYgdWlDbGFzc2lmaWVySUQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NMQVNTSUZJRVJTOyBpKyspIHsKIAkJaWYgKChBZGFwdGVyLT5hc3RDbGFzc2lmaWVyVGFibGVbaV0uYlVzZWQpICYmCi0JCQkoQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW2ldLnVpQ2xhc3NpZmllclJ1bGVJbmRleCA9PSB1aUNsYXNzaWZpZXJJRCkgJiYKKwkJCShBZGFwdGVyLT5hc3RDbGFzc2lmaWVyVGFibGVbaV0udWlDbGFzc2lmaWVyUnVsZUluZGV4CisJCQkJPT0gdWlDbGFzc2lmaWVySUQpICYmCiAJCQkoQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW2ldLnVsU0ZJRCA9PSB1bFNGSUQpKQogCQkJcmV0dXJuIGk7CiAJfQpAQCAtOTgsNyArMTEzLDggQEAKIAlyZXR1cm4gTUFYX0NMQVNTSUZJRVJTKzE7CiB9CiAKLXN0YXRpYyBWT0lEIGRlbGV0ZVNGQnlTZmlkKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBVSU5UIHVpU2VhcmNoUnVsZUluZGV4KQorc3RhdGljIFZPSUQgZGVsZXRlU0ZCeVNmaWQoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCVVJTlQgdWlTZWFyY2hSdWxlSW5kZXgpCiB7CiAJLyogZGVsZXRpbmcgYWxsIHRoZSBwYWNrZXQgaGVsZCBpbiB0aGUgU0YgKi8KIAlmbHVzaF9xdWV1ZShBZGFwdGVyLCB1aVNlYXJjaFJ1bGVJbmRleCk7CkBAIC0xMDcsNyArMTIzLDggQEAKIAlEZWxldGVBbGxDbGFzc2lmaWVyc0ZvclNGKEFkYXB0ZXIsIHVpU2VhcmNoUnVsZUluZGV4KTsKIAogCS8qIFJlc2V0dGluZyBvbmx5IE1JQlMgcmVsYXRlZCBlbnRyaWVzIGluIHRoZSBTRiAqLwotCW1lbXNldCgoUFZPSUQpJkFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XSwgMCwgc2l6ZW9mKHN0cnVjdCBiY21fbWlic190YWJsZSkpOworCW1lbXNldCgoUFZPSUQpJkFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgYmNtX21pYnNfdGFibGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBWT0lECkBAIC0xMjUsNzAgKzE0MiwxMDkgQEAKIAkJblNpemVPZklQQWRkcmVzc0luQnl0ZXMgPSBJUFY2X0FERFJFU1NfU0laRUlOQllURVM7CiAKIAkvKiBEZXN0aW5hdGlvbiBJcCBBZGRyZXNzICovCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiSXAgQWRkcmVzcyBSYW5nZSBMZW5ndGg6MHglWCAiLCB1OElwQWRkcmVzc0xlbik7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIklwIEFkZHJlc3MgUmFuZ2UgTGVuZ3RoOjB4JVggIiwgdThJcEFkZHJlc3NMZW4pOwogCWlmICgoYklwVmVyc2lvbjYgPyAoSVBWNl9BRERSRVNTX1NJWkVJTkJZVEVTICogTUFYX0lQX1JBTkdFX0xFTkdUSCAqIDIpIDoKIAkJCShUT1RBTF9NQVNLRURfQUREUkVTU19JTl9CWVRFUykpID49IHU4SXBBZGRyZXNzTGVuKSB7CisKKwkJdW5pb24gdV9pcF9hZGRyZXNzICpzdF9kZXN0X2lwID0KKwkJCSZwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzczsKKworCQl1bmlvbiB1X2lwX2FkZHJlc3MgKnN0X3NyY19pcCA9CisJCQkmcHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzczsKKwogCQkvKgogCQkgKiBjaGVja2luZyBib3RoIHRoZSBtYXNrIGFuZCBhZGRyZXNzIHRvZ2V0aG9yIGluIENsYXNzaWZpY2F0aW9uLgogCQkgKiBTbyBsZW5ndGggd2lsbCBiZSA6IFRvdGFsTGVuZ3RoSW5CeXRlcy9uU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyAqIDIKIAkJICogKG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzIGZvciBhZGRyZXNzIGFuZCBuU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyBmb3IgbWFzaykKIAkJICovCiAJCWlmIChlSXBBZGRyQ29udGV4dCA9PSBlRGVzdElwQWRkcmVzcykgewotCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y0lQRGVzdGluYXRpb25BZGRyZXNzTGVuZ3RoID0gdThJcEFkZHJlc3NMZW4vKG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzICogMik7CisJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjSVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGggPQorCQkJCXU4SXBBZGRyZXNzTGVuLyhuU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyAqIDIpOwogCQkJaWYgKGJJcFZlcnNpb242KSB7Ci0JCQkJcHRyQ2xhc3NpZmllcklwQWRkcmVzcyA9IHBzdENsYXNzaWZpZXJFbnRyeS0+c3REZXN0SXBBZGRyZXNzLnVjSXB2NkFkZHJlc3M7Ci0JCQkJcHRyQ2xhc3NpZmllcklwTWFzayA9IHBzdENsYXNzaWZpZXJFbnRyeS0+c3REZXN0SXBBZGRyZXNzLnVjSXB2Nk1hc2s7CisJCQkJcHRyQ2xhc3NpZmllcklwQWRkcmVzcyA9CisJCQkJCXN0X2Rlc3RfaXAtPnVjSXB2NkFkZHJlc3M7CisJCQkJcHRyQ2xhc3NpZmllcklwTWFzayA9CisJCQkJCXN0X2Rlc3RfaXAtPnVjSXB2Nk1hc2s7CiAJCQl9IGVsc2UgewotCQkJCXB0ckNsYXNzaWZpZXJJcEFkZHJlc3MgPSBwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51Y0lwdjRBZGRyZXNzOwotCQkJCXB0ckNsYXNzaWZpZXJJcE1hc2sgPSBwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51Y0lwdjRNYXNrOworCQkJCXB0ckNsYXNzaWZpZXJJcEFkZHJlc3MgPQorCQkJCQlzdF9kZXN0X2lwLT51Y0lwdjRBZGRyZXNzOworCQkJCXB0ckNsYXNzaWZpZXJJcE1hc2sgPQorCQkJCQlzdF9kZXN0X2lwLT51Y0lwdjRNYXNrOwogCQkJfQogCQl9IGVsc2UgaWYgKGVJcEFkZHJDb250ZXh0ID09IGVTcmNJcEFkZHJlc3MpIHsKLQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNJUFNvdXJjZUFkZHJlc3NMZW5ndGggPSB1OElwQWRkcmVzc0xlbi8oblNpemVPZklQQWRkcmVzc0luQnl0ZXMgKiAyKTsKKwkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNJUFNvdXJjZUFkZHJlc3NMZW5ndGggPQorCQkJCXU4SXBBZGRyZXNzTGVuLyhuU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyAqIDIpOwogCQkJaWYgKGJJcFZlcnNpb242KSB7Ci0JCQkJcHRyQ2xhc3NpZmllcklwQWRkcmVzcyA9IHBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWNJcHY2QWRkcmVzczsKLQkJCQlwdHJDbGFzc2lmaWVySXBNYXNrID0gcHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51Y0lwdjZNYXNrOworCQkJCXB0ckNsYXNzaWZpZXJJcEFkZHJlc3MgPQorCQkJCQlzdF9zcmNfaXAtPnVjSXB2NkFkZHJlc3M7CisJCQkJcHRyQ2xhc3NpZmllcklwTWFzayA9IHN0X3NyY19pcC0+dWNJcHY2TWFzazsKIAkJCX0gZWxzZSB7Ci0JCQkJcHRyQ2xhc3NpZmllcklwQWRkcmVzcyA9IHBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWNJcHY0QWRkcmVzczsKLQkJCQlwdHJDbGFzc2lmaWVySXBNYXNrID0gcHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51Y0lwdjRNYXNrOworCQkJCXB0ckNsYXNzaWZpZXJJcEFkZHJlc3MgPQorCQkJCQlzdF9zcmNfaXAtPnVjSXB2NEFkZHJlc3M7CisJCQkJcHRyQ2xhc3NpZmllcklwTWFzayA9IHN0X3NyY19pcC0+dWNJcHY0TWFzazsKIAkJCX0KIAkJfQotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJBZGRyZXNzIExlbmd0aDoweCVYXG4iLCBwc3RDbGFzc2lmaWVyRW50cnktPnVjSVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGgpOwotCQl3aGlsZSAoKHU4SXBBZGRyZXNzTGVuID49IG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzKSAmJiAoaSA8IE1BWF9JUF9SQU5HRV9MRU5HVEgpKSB7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkiQWRkcmVzcyBMZW5ndGg6MHglWFxuIiwKKwkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjSVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGgpOworCQl3aGlsZSAoKHU4SXBBZGRyZXNzTGVuID49IG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzKQorCQkJCSYmIChpIDwgTUFYX0lQX1JBTkdFX0xFTkdUSCkpIHsKIAkJCW1lbWNweShwdHJDbGFzc2lmaWVySXBBZGRyZXNzICsKIAkJCQkoaSAqIG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzKSwKLQkJCQkocHU4SXBBZGRyZXNzTWFza1NyYysoaSpuU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyoyKSksCisJCQkJKHB1OElwQWRkcmVzc01hc2tTcmMKKwkJCQkJKyAoaSAqIG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzICogMikpLAogCQkJCW5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzKTsKIAogCQkJaWYgKCFiSXBWZXJzaW9uNikgewogCQkJCWlmIChlSXBBZGRyQ29udGV4dCA9PSBlU3JjSXBBZGRyZXNzKSB7Ci0JCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWxJcHY0QWRkcltpXSA9IG50b2hsKHBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWxJcHY0QWRkcltpXSk7Ci0JCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNyYyBJcCBBZGRyZXNzOjB4JWx1WCAiLAotCQkJCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWxJcHY0QWRkcltpXSk7CisJCQkJCXN0X3NyY19pcC0+dWxJcHY0QWRkcltpXSA9CisJCQkJCQludG9obChzdF9zcmNfaXAtPnVsSXB2NEFkZHJbaV0pOworCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwKKwkJCQkJCQlEQkdfVFlQRV9PVEhFUlMsCisJCQkJCQkJQ09OTl9NU0csCisJCQkJCQkJREJHX0xWTF9BTEwsCisJCQkJCQkJIlNyYyBJcCBBZGRyZXNzOjB4JWx1WCAiLAorCQkJCQkJCXN0X3NyY19pcC0+dWxJcHY0QWRkcltpXSk7CiAJCQkJfSBlbHNlIGlmIChlSXBBZGRyQ29udGV4dCA9PSBlRGVzdElwQWRkcmVzcykgewotCQkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51bElwdjRBZGRyW2ldID0gbnRvaGwocHN0Q2xhc3NpZmllckVudHJ5LT5zdERlc3RJcEFkZHJlc3MudWxJcHY0QWRkcltpXSk7Ci0JCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkRlc3QgSXAgQWRkcmVzczoweCVsdVggIiwKLQkJCQkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51bElwdjRBZGRyW2ldKTsKKwkJCQkJc3RfZGVzdF9pcC0+dWxJcHY0QWRkcltpXSA9CisJCQkJCQludG9obChzdF9kZXN0X2lwLT51bElwdjRBZGRyW2ldKTsKKwkJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsCisJCQkJCQkJREJHX1RZUEVfT1RIRVJTLAorCQkJCQkJCUNPTk5fTVNHLAorCQkJCQkJCURCR19MVkxfQUxMLAorCQkJCQkJCSJEZXN0IElwIEFkZHJlc3M6MHglbHVYICIsCisJCQkJCQkJc3RfZGVzdF9pcC0+dWxJcHY0QWRkcltpXSk7CiAJCQkJfQogCQkJfQogCQkJdThJcEFkZHJlc3NMZW4gLT0gblNpemVPZklQQWRkcmVzc0luQnl0ZXM7CiAJCQlpZiAodThJcEFkZHJlc3NMZW4gPj0gblNpemVPZklQQWRkcmVzc0luQnl0ZXMpIHsKIAkJCQltZW1jcHkocHRyQ2xhc3NpZmllcklwTWFzayArCiAJCQkJCShpICogblNpemVPZklQQWRkcmVzc0luQnl0ZXMpLAotCQkJCQkocHU4SXBBZGRyZXNzTWFza1NyYytuU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyArCi0JCQkJCQkoaSpuU2l6ZU9mSVBBZGRyZXNzSW5CeXRlcyoyKSksCisJCQkJCShwdThJcEFkZHJlc3NNYXNrU3JjCisJCQkJCQkrIG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzCisJCQkJCQkrIChpICogblNpemVPZklQQWRkcmVzc0luQnl0ZXMgKiAyKSksCiAJCQkJCW5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzKTsKIAogCQkJCWlmICghYklwVmVyc2lvbjYpIHsKIAkJCQkJaWYgKGVJcEFkZHJDb250ZXh0ID09IGVTcmNJcEFkZHJlc3MpIHsKLQkJCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWxJcHY0TWFza1tpXSA9Ci0JCQkJCQkJbnRvaGwocHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51bElwdjRNYXNrW2ldKTsKLQkJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNyYyBJcCBNYXNrIEFkZHJlc3M6MHglbHVYICIsCi0JCQkJCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+c3RTcmNJcEFkZHJlc3MudWxJcHY0TWFza1tpXSk7CisJCQkJCQlzdF9zcmNfaXAtPnVsSXB2NE1hc2tbaV0gPQorCQkJCQkJCW50b2hsKHN0X3NyY19pcC0+dWxJcHY0TWFza1tpXSk7CisJCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwKKwkJCQkJCQkJREJHX1RZUEVfT1RIRVJTLAorCQkJCQkJCQlDT05OX01TRywKKwkJCQkJCQkJREJHX0xWTF9BTEwsCisJCQkJCQkJCSJTcmMgSXAgTWFzayBBZGRyZXNzOjB4JWx1WCAiLAorCQkJCQkJCQlzdF9zcmNfaXAtPnVsSXB2NE1hc2tbaV0pOwogCQkJCQl9IGVsc2UgaWYgKGVJcEFkZHJDb250ZXh0ID09IGVEZXN0SXBBZGRyZXNzKSB7Ci0JCQkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51bElwdjRNYXNrW2ldID0KLQkJCQkJCQludG9obChwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51bElwdjRNYXNrW2ldKTsKLQkJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkRlc3QgSXAgTWFzayBBZGRyZXNzOjB4JWx1WCAiLAotCQkJCQkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51bElwdjRNYXNrW2ldKTsKKwkJCQkJCXN0X2Rlc3RfaXAtPnVsSXB2NE1hc2tbaV0gPQorCQkJCQkJCW50b2hsKHN0X2Rlc3RfaXAtPnVsSXB2NE1hc2tbaV0pOworCQkJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsCisJCQkJCQkJCURCR19UWVBFX09USEVSUywKKwkJCQkJCQkJQ09OTl9NU0csCisJCQkJCQkJCURCR19MVkxfQUxMLAorCQkJCQkJCQkiRGVzdCBJcCBNYXNrIEFkZHJlc3M6MHglbHVYICIsCisJCQkJCQkJCXN0X2Rlc3RfaXAtPnVsSXB2NE1hc2tbaV0pOwogCQkJCQl9CiAJCQkJfQogCQkJCXU4SXBBZGRyZXNzTGVuIC09IG5TaXplT2ZJUEFkZHJlc3NJbkJ5dGVzOwpAQCAtMjAwLDE1ICsyNTYsMTAgQEAKIAkJfQogCQlpZiAoYklwVmVyc2lvbjYpIHsKIAkJCS8qIFJlc3RvcmUgRW5kaWFuTmVzcyBvZiBTdHJ1Y3QgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBNQVhfSVBfUkFOR0VfTEVOR1RIICogNDsgaSsrKSB7Ci0JCQkJaWYgKGVJcEFkZHJDb250ZXh0ID09IGVTcmNJcEFkZHJlc3MpIHsKLQkJCQkJcHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51bElwdjZBZGRyW2ldID0gbnRvaGwocHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51bElwdjZBZGRyW2ldKTsKLQkJCQkJcHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51bElwdjZNYXNrW2ldID0gbnRvaGwocHN0Q2xhc3NpZmllckVudHJ5LT5zdFNyY0lwQWRkcmVzcy51bElwdjZNYXNrW2ldKTsKLQkJCQl9IGVsc2UgaWYgKGVJcEFkZHJDb250ZXh0ID09IGVEZXN0SXBBZGRyZXNzKSB7Ci0JCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+c3REZXN0SXBBZGRyZXNzLnVsSXB2NkFkZHJbaV0gPSBudG9obChwc3RDbGFzc2lmaWVyRW50cnktPnN0RGVzdElwQWRkcmVzcy51bElwdjZBZGRyW2ldKTsKLQkJCQkJcHN0Q2xhc3NpZmllckVudHJ5LT5zdERlc3RJcEFkZHJlc3MudWxJcHY2TWFza1tpXSA9IG50b2hsKHBzdENsYXNzaWZpZXJFbnRyeS0+c3REZXN0SXBBZGRyZXNzLnVsSXB2Nk1hc2tbaV0pOwotCQkJCX0KLQkJCX0KKwkJCXJlc3RvcmVfZW5kaWFuZXNzX29mX3BzdENsYXNzaWZpZXJFbnRyeSgKKwkJCQkJcHN0Q2xhc3NpZmllckVudHJ5LAorCQkJCQllSXBBZGRyQ29udGV4dAorCQkJCQkpOwogCQl9CiAJfQogfQpAQCAtMjE2LDE2ICsyNjcsMjAgQEAKIHZvaWQgQ2xlYXJUYXJnZXREU1hCdWZmZXIoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIEJfVUlOVDE2IFRJRCwgYm9vbCBiRnJlZUFsbCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgYmNtX3RhcmdldGRzeF9idWZmZXIgKmN1cnJfYnVmOwogCiAJZm9yIChpID0gMDsgaSA8IEFkYXB0ZXItPnVsVG90YWxUYXJnZXRCdWZmZXJzQXZhaWxhYmxlOyBpKyspIHsKLQkJaWYgKEFkYXB0ZXItPmFzdFRhcmdldERzeEJ1ZmZlcltpXS52YWxpZCkKKwkJY3Vycl9idWYgPSAmQWRhcHRlci0+YXN0VGFyZ2V0RHN4QnVmZmVyW2ldOworCisJCWlmIChjdXJyX2J1Zi0+dmFsaWQpCiAJCQljb250aW51ZTsKIAotCQlpZiAoKGJGcmVlQWxsKSB8fCAoQWRhcHRlci0+YXN0VGFyZ2V0RHN4QnVmZmVyW2ldLnRpZCA9PSBUSUQpKSB7Ci0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLCAiQ2xlYXJUYXJnZXREU1hCdWZmZXI6IGZvdW5kIHRpZCAlZCBidWZmZXIgY2xlYXJlZCAlbHhcbiIsCi0JCQkJCVRJRCwgQWRhcHRlci0+YXN0VGFyZ2V0RHN4QnVmZmVyW2ldLnVsVGFyZ2V0RHN4QnVmZmVyKTsKLQkJCUFkYXB0ZXItPmFzdFRhcmdldERzeEJ1ZmZlcltpXS52YWxpZCA9IDE7Ci0JCQlBZGFwdGVyLT5hc3RUYXJnZXREc3hCdWZmZXJbaV0udGlkID0gMDsKKwkJaWYgKChiRnJlZUFsbCkgfHwgKGN1cnJfYnVmLT50aWQgPT0gVElEKSkgeworCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1BSSU5USywgMCwgMCwKKwkJCQkJIkNsZWFyVGFyZ2V0RFNYQnVmZmVyOiBmb3VuZCB0aWQgJWQgYnVmZmVyIGNsZWFyZWQgJWx4XG4iLAorCQkJCQlUSUQsIGN1cnJfYnVmLT51bFRhcmdldERzeEJ1ZmZlcik7CisJCQljdXJyX2J1Zi0+dmFsaWQgPSAxOworCQkJY3Vycl9idWYtPnRpZCA9IDA7CiAJCQlBZGFwdGVyLT51bEZyZWVUYXJnZXRCdWZmZXJDbnQrKzsKIAkJfQogCX0KQEAgLTIzNSw3ICsyOTAsMTAgQEAKICAqIEBpbmdyb3VwIGN0cmxfcGt0X2Z1bmN0aW9ucwogICogY29weSBjbGFzc2lmaWVyIHJ1bGUgaW50byB0aGUgc3BlY2lmaWVkIFNGIGluZGV4CiAgKi8KLXN0YXRpYyBpbmxpbmUgVk9JRCBDb3B5Q2xhc3NpZmllclJ1bGVUb1NGKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBzdHJ1Y3QgYmNtX2NvbnZlcmdlbmNlX3R5cGVzICpwc2ZDU1R5cGUsIFVJTlQgdWlTZWFyY2hSdWxlSW5kZXgsIFVJTlQgbkNsYXNzaWZpZXJJbmRleCkKK3N0YXRpYyBpbmxpbmUgVk9JRCBDb3B5Q2xhc3NpZmllclJ1bGVUb1NGKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCQlzdHJ1Y3QgYmNtX2NvbnZlcmdlbmNlX3R5cGVzICpwc2ZDU1R5cGUsCisJCVVJTlQgdWlTZWFyY2hSdWxlSW5kZXgsCisJCVVJTlQgbkNsYXNzaWZpZXJJbmRleCkKIHsKIAlzdHJ1Y3QgYmNtX2NsYXNzaWZpZXJfcnVsZSAqcHN0Q2xhc3NpZmllckVudHJ5ID0gTlVMTDsKIAkvKiBWT0lEICpwdlBoc0NvbnRleHQgPSBOVUxMOyAqLwpAQCAtMjQzLDEyICszMDEsMTYgQEAKIAkvKiBVQ0hBUiB1Y1Byb3RvY29sTGVuZ3RoPTA7ICovCiAJLyogVUxPTkcgdWxQaHNTdGF0dXM7ICovCiAKKwlzdHJ1Y3QgYmNtX3BhY2tldF9jbGFzc19ydWxlcyAqcGFja19jbGFzc19ydWxlID0KKwkJJnBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGU7CisKIAlpZiAoQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnVzVkNJRF9WYWx1ZSA9PSAwIHx8CiAJCW5DbGFzc2lmaWVySW5kZXggPiAoTUFYX0NMQVNTSUZJRVJTLTEpKQogCQlyZXR1cm47CiAKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJTdG9yaW5nIENsYXNzaWZpZXIgUnVsZSBJbmRleCA6ICVYIiwKLQkJCW50b2hzKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXgpKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiU3RvcmluZyBDbGFzc2lmaWVyIFJ1bGUgSW5kZXggOiAlWCIsCisJCQludG9ocyhwYWNrX2NsYXNzX3J1bGUtPnUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4KSk7CiAKIAlpZiAobkNsYXNzaWZpZXJJbmRleCA+IE1BWF9DTEFTU0lGSUVSUy0xKQogCQlyZXR1cm47CkBAIC0yNTYsMTA2ICszMTgsMTUyIEBACiAJcHN0Q2xhc3NpZmllckVudHJ5ID0gJkFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVtuQ2xhc3NpZmllckluZGV4XTsKIAlpZiAocHN0Q2xhc3NpZmllckVudHJ5KSB7CiAJCS8qIFN0b3JlIGlmIElwdjYgKi8KLQkJcHN0Q2xhc3NpZmllckVudHJ5LT5iSXB2NlByb3RvY29sID0gKEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51Y0lwVmVyc2lvbiA9PSBJUFY2KSA/IFRSVUUgOiBmYWxzZTsKKwkJcHN0Q2xhc3NpZmllckVudHJ5LT5iSXB2NlByb3RvY29sID0KKwkJCShBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWNJcFZlcnNpb24gPT0gSVBWNikgPyBUUlVFIDogZmFsc2U7CiAKIAkJLyogRGVzdGluYWl0b24gUG9ydCAqLwotCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjRGVzdFBvcnRSYW5nZUxlbmd0aCA9IHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbERlc3RQb3J0UmFuZ2VMZW5ndGggLyA0OwotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJEZXN0aW5hdGlvbiBQb3J0IFJhbmdlIExlbmd0aDoweCVYICIsIHBzdENsYXNzaWZpZXJFbnRyeS0+dWNEZXN0UG9ydFJhbmdlTGVuZ3RoKTsKKwkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y0Rlc3RQb3J0UmFuZ2VMZW5ndGggPQorCQkJcGFja19jbGFzc19ydWxlLT51OFByb3RvY29sRGVzdFBvcnRSYW5nZUxlbmd0aCAvIDQ7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkiRGVzdGluYXRpb24gUG9ydCBSYW5nZSBMZW5ndGg6MHglWCAiLAorCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNEZXN0UG9ydFJhbmdlTGVuZ3RoKTsKIAotCQlpZiAocHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sRGVzdFBvcnRSYW5nZUxlbmd0aCA8PSBNQVhfUE9SVF9SQU5HRSkgeworCQlpZiAocGFja19jbGFzc19ydWxlLT51OFByb3RvY29sRGVzdFBvcnRSYW5nZUxlbmd0aCA8PSBNQVhfUE9SVF9SQU5HRSkgewogCQkJZm9yIChpID0gMDsgaSA8IChwc3RDbGFzc2lmaWVyRW50cnktPnVjRGVzdFBvcnRSYW5nZUxlbmd0aCk7IGkrKykgewotCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNEZXN0UG9ydFJhbmdlTG9baV0gPSAqKChQVVNIT1JUKShwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlK2kpKTsKKwkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVzRGVzdFBvcnRSYW5nZUxvW2ldID0KKwkJCQkJKigoUFVTSE9SVCkocGFja19jbGFzc19ydWxlLT51OFByb3RvY29sRGVzdFBvcnRSYW5nZStpKSk7CiAJCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51c0Rlc3RQb3J0UmFuZ2VIaVtpXSA9Ci0JCQkJCSooKFBVU0hPUlQpKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbERlc3RQb3J0UmFuZ2UrMitpKSk7Ci0JCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51c0Rlc3RQb3J0UmFuZ2VMb1tpXSA9IG50b2hzKHBzdENsYXNzaWZpZXJFbnRyeS0+dXNEZXN0UG9ydFJhbmdlTG9baV0pOwotCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkRlc3RpbmF0aW9uIFBvcnQgUmFuZ2UgTG86MHglWCAiLAorCQkJCQkqKChQVVNIT1JUKShwYWNrX2NsYXNzX3J1bGUtPnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlKzIraSkpOworCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNEZXN0UG9ydFJhbmdlTG9baV0gPQorCQkJCQludG9ocyhwc3RDbGFzc2lmaWVyRW50cnktPnVzRGVzdFBvcnRSYW5nZUxvW2ldKTsKKwkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLAorCQkJCQkJQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCQkJIkRlc3RpbmF0aW9uIFBvcnQgUmFuZ2UgTG86MHglWCAiLAogCQkJCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51c0Rlc3RQb3J0UmFuZ2VMb1tpXSk7Ci0JCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51c0Rlc3RQb3J0UmFuZ2VIaVtpXSA9IG50b2hzKHBzdENsYXNzaWZpZXJFbnRyeS0+dXNEZXN0UG9ydFJhbmdlSGlbaV0pOworCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNEZXN0UG9ydFJhbmdlSGlbaV0gPQorCQkJCQludG9ocyhwc3RDbGFzc2lmaWVyRW50cnktPnVzRGVzdFBvcnRSYW5nZUhpW2ldKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNEZXN0UG9ydFJhbmdlTGVuZ3RoID0gMDsKIAkJfQogCiAJCS8qIFNvdXJjZSBQb3J0ICovCi0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNvdXJjZSBQb3J0IFJhbmdlIExlbmd0aDoweCVYICIsCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sU291cmNlUG9ydFJhbmdlTGVuZ3RoKTsKLQkJaWYgKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZUxlbmd0aCA8PSBNQVhfUE9SVF9SQU5HRSkgewotCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1NyY1BvcnRSYW5nZUxlbmd0aCA9IHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZUxlbmd0aC80OworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkJIlNvdXJjZSBQb3J0IFJhbmdlIExlbmd0aDoweCVYICIsCisJCQkJcGFja19jbGFzc19ydWxlLT51OFByb3RvY29sU291cmNlUG9ydFJhbmdlTGVuZ3RoKTsKKwkJaWYgKHBhY2tfY2xhc3NfcnVsZS0+dThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZUxlbmd0aCA8PSBNQVhfUE9SVF9SQU5HRSkgeworCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1NyY1BvcnRSYW5nZUxlbmd0aCA9CisJCQkJcGFja19jbGFzc19ydWxlLT51OFByb3RvY29sU291cmNlUG9ydFJhbmdlTGVuZ3RoLzQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgKHBzdENsYXNzaWZpZXJFbnRyeS0+dWNTcmNQb3J0UmFuZ2VMZW5ndGgpOyBpKyspIHsKIAkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVzU3JjUG9ydFJhbmdlTG9baV0gPQotCQkJCQkqKChQVVNIT1JUKShwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLgorCQkJCQkqKChQVVNIT1JUKShwYWNrX2NsYXNzX3J1bGUtPgogCQkJCQkJCXU4UHJvdG9jb2xTb3VyY2VQb3J0UmFuZ2UraSkpOwogCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNTcmNQb3J0UmFuZ2VIaVtpXSA9Ci0JCQkJCSooKFBVU0hPUlQpKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUuCisJCQkJCSooKFBVU0hPUlQpKHBhY2tfY2xhc3NfcnVsZS0+CiAJCQkJCQkJdThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZSsyK2kpKTsKIAkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVzU3JjUG9ydFJhbmdlTG9baV0gPQogCQkJCQludG9ocyhwc3RDbGFzc2lmaWVyRW50cnktPnVzU3JjUG9ydFJhbmdlTG9baV0pOwotCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNvdXJjZSBQb3J0IFJhbmdlIExvOjB4JVggIiwKKwkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLAorCQkJCQkJQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCQkJIlNvdXJjZSBQb3J0IFJhbmdlIExvOjB4JVggIiwKIAkJCQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNTcmNQb3J0UmFuZ2VMb1tpXSk7Ci0JCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51c1NyY1BvcnRSYW5nZUhpW2ldID0gbnRvaHMocHN0Q2xhc3NpZmllckVudHJ5LT51c1NyY1BvcnRSYW5nZUhpW2ldKTsKKwkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVzU3JjUG9ydFJhbmdlSGlbaV0gPQorCQkJCQludG9ocyhwc3RDbGFzc2lmaWVyRW50cnktPnVzU3JjUG9ydFJhbmdlSGlbaV0pOwogCQkJfQogCQl9CiAJCS8qIERlc3RpbmF0aW9uIElwIEFkZHJlc3MgYW5kIE1hc2sgKi8KLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiSXAgRGVzdGluYXRpb24gUGFyYW1ldGVycyA6ICIpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkJIklwIERlc3RpbmF0aW9uIFBhcmFtZXRlcnMgOiAiKTsKIAkJQ29weUlwQWRkclRvQ2xhc3NpZmllcihwc3RDbGFzc2lmaWVyRW50cnksCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQRGVzdGluYXRpb25BZGRyZXNzTGVuZ3RoLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUERlc3RpbmF0aW9uQWRkcmVzcywKKwkJCQlwYWNrX2NsYXNzX3J1bGUtPnU4SVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGgsCisJCQkJcGFja19jbGFzc19ydWxlLT51OElQRGVzdGluYXRpb25BZGRyZXNzLAogCQkJCShBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWNJcFZlcnNpb24gPT0gSVBWNikgPwogCQkJVFJVRSA6IGZhbHNlLCBlRGVzdElwQWRkcmVzcyk7CiAKIAkJLyogU291cmNlIElwIEFkZHJlc3MgYW5kIE1hc2sgKi8KLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiSXAgU291cmNlIFBhcmFtZXRlcnMgOiAiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCSJJcCBTb3VyY2UgUGFyYW1ldGVycyA6ICIpOwogCiAJCUNvcHlJcEFkZHJUb0NsYXNzaWZpZXIocHN0Q2xhc3NpZmllckVudHJ5LAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUE1hc2tlZFNvdXJjZUFkZHJlc3NMZW5ndGgsCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQTWFza2VkU291cmNlQWRkcmVzcywKKwkJCQlwYWNrX2NsYXNzX3J1bGUtPnU4SVBNYXNrZWRTb3VyY2VBZGRyZXNzTGVuZ3RoLAorCQkJCXBhY2tfY2xhc3NfcnVsZS0+dThJUE1hc2tlZFNvdXJjZUFkZHJlc3MsCiAJCQkJKEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51Y0lwVmVyc2lvbiA9PSBJUFY2KSA/IFRSVUUgOiBmYWxzZSwKIAkJCQllU3JjSXBBZGRyZXNzKTsKIAogCQkvKiBUT1MgKi8KLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiVE9TIExlbmd0aDoweCVYICIsIHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUFR5cGVPZlNlcnZpY2VMZW5ndGgpOwotCQlpZiAocHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQVHlwZU9mU2VydmljZUxlbmd0aCA9PSAzKSB7Ci0JCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjSVBUeXBlT2ZTZXJ2aWNlTGVuZ3RoID0gcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQVHlwZU9mU2VydmljZUxlbmd0aDsKLQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNUb3NMb3cgPSBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4SVBUeXBlT2ZTZXJ2aWNlWzBdOwotCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Rvc0hpZ2ggPSBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4SVBUeXBlT2ZTZXJ2aWNlWzFdOwotCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Rvc01hc2sgPSBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4SVBUeXBlT2ZTZXJ2aWNlWzJdOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkJIlRPUyBMZW5ndGg6MHglWCAiLAorCQkJCXBhY2tfY2xhc3NfcnVsZS0+dThJUFR5cGVPZlNlcnZpY2VMZW5ndGgpOworCQlpZiAocGFja19jbGFzc19ydWxlLT51OElQVHlwZU9mU2VydmljZUxlbmd0aCA9PSAzKSB7CisJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjSVBUeXBlT2ZTZXJ2aWNlTGVuZ3RoID0KKwkJCQlwYWNrX2NsYXNzX3J1bGUtPnU4SVBUeXBlT2ZTZXJ2aWNlTGVuZ3RoOworCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Rvc0xvdyA9CisJCQkJcGFja19jbGFzc19ydWxlLT51OElQVHlwZU9mU2VydmljZVswXTsKKwkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNUb3NIaWdoID0KKwkJCQlwYWNrX2NsYXNzX3J1bGUtPnU4SVBUeXBlT2ZTZXJ2aWNlWzFdOworCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Rvc01hc2sgPQorCQkJCXBhY2tfY2xhc3NfcnVsZS0+dThJUFR5cGVPZlNlcnZpY2VbMl07CiAJCQlwc3RDbGFzc2lmaWVyRW50cnktPmJUT1NWYWxpZCA9IFRSVUU7CiAJCX0KLQkJaWYgKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbCA9PSAwKSB7CisJCWlmIChwYWNrX2NsYXNzX3J1bGUtPnU4UHJvdG9jb2wgPT0gMCkgewogCQkJLyogd2UgZGlkbid0IGdldCBwcm90b2NvbCBmaWVsZCBmaWxsZWQgaW4gYnkgdGhlIEJTICovCiAJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjUHJvdG9jb2xMZW5ndGggPSAwOwogCQl9IGVsc2UgewogCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Byb3RvY29sTGVuZ3RoID0gMTsgLyogMSB2YWxpZCBwcm90b2NvbCAqLwogCQl9CiAKLQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y1Byb3RvY29sWzBdID0gcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sOwotCQlwc3RDbGFzc2lmaWVyRW50cnktPnU4Q2xhc3NpZmllclJ1bGVQcmlvcml0eSA9IHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThDbGFzc2lmaWVyUnVsZVByaW9yaXR5OworCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjUHJvdG9jb2xbMF0gPSBwYWNrX2NsYXNzX3J1bGUtPnU4UHJvdG9jb2w7CisJCXBzdENsYXNzaWZpZXJFbnRyeS0+dThDbGFzc2lmaWVyUnVsZVByaW9yaXR5ID0KKwkJCXBhY2tfY2xhc3NfcnVsZS0+dThDbGFzc2lmaWVyUnVsZVByaW9yaXR5OwogCiAJCS8qIHN0b3JlIHRoZSBjbGFzc2lmaWVyIHJ1bGUgSUQgYW5kIHNldCB0aGlzIGNsYXNzaWZpZXIgZW50cnkgYXMgdmFsaWQgKi8KLQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y0RpcmVjdGlvbiA9IEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51Y0RpcmVjdGlvbjsKLQkJcHN0Q2xhc3NpZmllckVudHJ5LT51aUNsYXNzaWZpZXJSdWxlSW5kZXggPSBudG9ocyhwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4KTsKLQkJcHN0Q2xhc3NpZmllckVudHJ5LT51c1ZDSURfVmFsdWUgPSBBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udXNWQ0lEX1ZhbHVlOwotCQlwc3RDbGFzc2lmaWVyRW50cnktPnVsU0ZJRCA9IEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51bFNGSUQ7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNlYXJjaCBJbmRleCAlZCBEaXI6ICVkLCBJbmRleDogJWQsIFZjaWQ6ICVkXG4iLAotCQkJCXVpU2VhcmNoUnVsZUluZGV4LCBwc3RDbGFzc2lmaWVyRW50cnktPnVjRGlyZWN0aW9uLAorCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjRGlyZWN0aW9uID0KKwkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51Y0RpcmVjdGlvbjsKKwkJcHN0Q2xhc3NpZmllckVudHJ5LT51aUNsYXNzaWZpZXJSdWxlSW5kZXggPQorCQkJbnRvaHMocGFja19jbGFzc19ydWxlLT51MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCk7CisJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNWQ0lEX1ZhbHVlID0KKwkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51c1ZDSURfVmFsdWU7CisJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWxTRklEID0KKwkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51bFNGSUQ7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkiU2VhcmNoIEluZGV4ICVkIERpcjogJWQsIEluZGV4OiAlZCwgVmNpZDogJWRcbiIsCisJCQkJdWlTZWFyY2hSdWxlSW5kZXgsCisJCQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y0RpcmVjdGlvbiwKIAkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVpQ2xhc3NpZmllclJ1bGVJbmRleCwKIAkJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVzVkNJRF9WYWx1ZSk7CiAKLQkJaWYgKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThBc3NvY2lhdGVkUEhTSSkKLQkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dThBc3NvY2lhdGVkUEhTSSA9IHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThBc3NvY2lhdGVkUEhTSTsKKwkJaWYgKHBhY2tfY2xhc3NfcnVsZS0+dThBc3NvY2lhdGVkUEhTSSkKKwkJCXBzdENsYXNzaWZpZXJFbnRyeS0+dThBc3NvY2lhdGVkUEhTSSA9CisJCQkJcGFja19jbGFzc19ydWxlLT51OEFzc29jaWF0ZWRQSFNJOwogCiAJCS8qIENvcHkgRVRIIENTIFBhcmFtZXRlcnMgKi8KLQkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y0V0aENTU3JjTUFDTGVuID0gKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NMZW5ndGgpOwotCQltZW1jcHkocHN0Q2xhc3NpZmllckVudHJ5LT5hdThFVGhDU1NyY01BQywgcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEV0aGVybmV0U291cmNlTUFDQWRkcmVzcywgTUFDX0FERFJFU1NfU0laRSk7Ci0JCW1lbWNweShwc3RDbGFzc2lmaWVyRW50cnktPmF1OEVUaENTU3JjTUFDTWFzaywgcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEV0aGVybmV0U291cmNlTUFDQWRkcmVzcyArIE1BQ19BRERSRVNTX1NJWkUsIE1BQ19BRERSRVNTX1NJWkUpOwotCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjRXRoQ1NEZXN0TUFDTGVuID0gKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoKTsKLQkJbWVtY3B5KHBzdENsYXNzaWZpZXJFbnRyeS0+YXU4RVRoQ1NEZXN0TUFDLCBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4RXRoZXJuZXREZXN0TWFjQWRkcmVzcywgTUFDX0FERFJFU1NfU0laRSk7Ci0JCW1lbWNweShwc3RDbGFzc2lmaWVyRW50cnktPmF1OEVUaENTRGVzdE1BQ01hc2ssIHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzICsgTUFDX0FERFJFU1NfU0laRSwgTUFDX0FERFJFU1NfU0laRSk7Ci0JCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNFdGhlclR5cGVMZW4gPSAocHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEV0aGVydHlwZUxlbmd0aCk7Ci0JCW1lbWNweShwc3RDbGFzc2lmaWVyRW50cnktPmF1OEV0aENTRXRoZXJUeXBlLCBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4RXRoZXJ0eXBlLCBOVU1fRVRIRVJUWVBFX0JZVEVTKTsKLQkJbWVtY3B5KHBzdENsYXNzaWZpZXJFbnRyeS0+dXNVc2VyUHJpb3JpdHksICZwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnUxNlVzZXJQcmlvcml0eSwgMik7Ci0JCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNWTEFOSUQgPSBudG9ocyhwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnUxNlZMQU5JRCk7Ci0JCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNWYWxpZGl0eUJpdE1hcCA9IG50b2hzKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudTE2VmFsaWRpdHlCaXRNYXApOworCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjRXRoQ1NTcmNNQUNMZW4gPQorCQkJKHBhY2tfY2xhc3NfcnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NMZW5ndGgpOworCQltZW1jcHkocHN0Q2xhc3NpZmllckVudHJ5LT5hdThFVGhDU1NyY01BQywKKwkJCQlwYWNrX2NsYXNzX3J1bGUtPnU4RXRoZXJuZXRTb3VyY2VNQUNBZGRyZXNzLAorCQkJCU1BQ19BRERSRVNTX1NJWkUpOworCQltZW1jcHkocHN0Q2xhc3NpZmllckVudHJ5LT5hdThFVGhDU1NyY01BQ01hc2ssCisJCQkJcGFja19jbGFzc19ydWxlLT51OEV0aGVybmV0U291cmNlTUFDQWRkcmVzcworCQkJCSsgTUFDX0FERFJFU1NfU0laRSwgTUFDX0FERFJFU1NfU0laRSk7CisJCXBzdENsYXNzaWZpZXJFbnRyeS0+dWNFdGhDU0Rlc3RNQUNMZW4gPQorCQkJKHBhY2tfY2xhc3NfcnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoKTsKKwkJbWVtY3B5KHBzdENsYXNzaWZpZXJFbnRyeS0+YXU4RVRoQ1NEZXN0TUFDLAorCQkJCXBhY2tfY2xhc3NfcnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzLAorCQkJCU1BQ19BRERSRVNTX1NJWkUpOworCQltZW1jcHkocHN0Q2xhc3NpZmllckVudHJ5LT5hdThFVGhDU0Rlc3RNQUNNYXNrLAorCQkJCXBhY2tfY2xhc3NfcnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzCisJCQkJKyBNQUNfQUREUkVTU19TSVpFLCBNQUNfQUREUkVTU19TSVpFKTsKKwkJcHN0Q2xhc3NpZmllckVudHJ5LT51Y0V0aGVyVHlwZUxlbiA9CisJCQkocGFja19jbGFzc19ydWxlLT51OEV0aGVydHlwZUxlbmd0aCk7CisJCW1lbWNweShwc3RDbGFzc2lmaWVyRW50cnktPmF1OEV0aENTRXRoZXJUeXBlLAorCQkJCXBhY2tfY2xhc3NfcnVsZS0+dThFdGhlcnR5cGUsCisJCQkJTlVNX0VUSEVSVFlQRV9CWVRFUyk7CisJCW1lbWNweShwc3RDbGFzc2lmaWVyRW50cnktPnVzVXNlclByaW9yaXR5LAorCQkJCSZwYWNrX2NsYXNzX3J1bGUtPnUxNlVzZXJQcmlvcml0eSwgMik7CisJCXBzdENsYXNzaWZpZXJFbnRyeS0+dXNWTEFOSUQgPQorCQkJbnRvaHMocGFja19jbGFzc19ydWxlLT51MTZWTEFOSUQpOworCQlwc3RDbGFzc2lmaWVyRW50cnktPnVzVmFsaWRpdHlCaXRNYXAgPQorCQkJbnRvaHMocGFja19jbGFzc19ydWxlLT51MTZWYWxpZGl0eUJpdE1hcCk7CiAKIAkJcHN0Q2xhc3NpZmllckVudHJ5LT5iVXNlZCA9IFRSVUU7CiAJfQpAQCAtMzY0LDcgKzQ3Miw4IEBACiAvKgogICogQGluZ3JvdXAgY3RybF9wa3RfZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbmxpbmUgVk9JRCBEZWxldGVDbGFzc2lmaWVyUnVsZUZyb21TRihzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwgVUlOVCB1aVNlYXJjaFJ1bGVJbmRleCwgVUlOVCBuQ2xhc3NpZmllckluZGV4KQorc3RhdGljIGlubGluZSBWT0lEIERlbGV0ZUNsYXNzaWZpZXJSdWxlRnJvbVNGKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCQlVSU5UIHVpU2VhcmNoUnVsZUluZGV4LCBVSU5UIG5DbGFzc2lmaWVySW5kZXgpCiB7CiAJc3RydWN0IGJjbV9jbGFzc2lmaWVyX3J1bGUgKnBzdENsYXNzaWZpZXJFbnRyeSA9IE5VTEw7CiAJQl9VSU5UMTYgdTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXg7CkBAIC0zODAsMjIgKzQ4OSwyNiBAQAogCWlmICh1c1ZDSUQgPT0gMCkKIAkJcmV0dXJuOwogCi0JdTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXggPSBBZGFwdGVyLT5hc3RDbGFzc2lmaWVyVGFibGVbbkNsYXNzaWZpZXJJbmRleF0udWlDbGFzc2lmaWVyUnVsZUluZGV4OworCXUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4ID0KKwkJQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW25DbGFzc2lmaWVySW5kZXhdLnVpQ2xhc3NpZmllclJ1bGVJbmRleDsKIAlwc3RDbGFzc2lmaWVyRW50cnkgPSAmQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW25DbGFzc2lmaWVySW5kZXhdOwogCWlmIChwc3RDbGFzc2lmaWVyRW50cnkpIHsKIAkJcHN0Q2xhc3NpZmllckVudHJ5LT5iVXNlZCA9IGZhbHNlOwogCQlwc3RDbGFzc2lmaWVyRW50cnktPnVpQ2xhc3NpZmllclJ1bGVJbmRleCA9IDA7Ci0JCW1lbXNldChwc3RDbGFzc2lmaWVyRW50cnksIDAsIHNpemVvZihzdHJ1Y3QgYmNtX2NsYXNzaWZpZXJfcnVsZSkpOworCQltZW1zZXQocHN0Q2xhc3NpZmllckVudHJ5LCAwLAorCQkJCXNpemVvZihzdHJ1Y3QgYmNtX2NsYXNzaWZpZXJfcnVsZSkpOwogCiAJCS8qIERlbGV0ZSB0aGUgUEhTIFJ1bGUgZm9yIHRoaXMgY2xhc3NpZmllciAqLwotCQlQaHNEZWxldGVDbGFzc2lmaWVyUnVsZSgmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0LCB1c1ZDSUQsIHUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4KTsKKwkJUGhzRGVsZXRlQ2xhc3NpZmllclJ1bGUoJkFkYXB0ZXItPnN0QkNNUGhzQ29udGV4dCwgdXNWQ0lELAorCQkJCXUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4KTsKIAl9CiB9CiAKIC8qCiAgKiBAaW5ncm91cCBjdHJsX3BrdF9mdW5jdGlvbnMKICAqLwotVk9JRCBEZWxldGVBbGxDbGFzc2lmaWVyc0ZvclNGKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBVSU5UIHVpU2VhcmNoUnVsZUluZGV4KQorVk9JRCBEZWxldGVBbGxDbGFzc2lmaWVyc0ZvclNGKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCQlVSU5UIHVpU2VhcmNoUnVsZUluZGV4KQogewogCXN0cnVjdCBiY21fY2xhc3NpZmllcl9ydWxlICpwc3RDbGFzc2lmaWVyRW50cnkgPSBOVUxMOwogCWludCBpOwpAQCAtNDE0LDcgKzUyNyw4IEBACiAJCQlwc3RDbGFzc2lmaWVyRW50cnkgPSAmQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW2ldOwogCiAJCQlpZiAocHN0Q2xhc3NpZmllckVudHJ5LT5iVXNlZCkKLQkJCQlEZWxldGVDbGFzc2lmaWVyUnVsZUZyb21TRihBZGFwdGVyLCB1aVNlYXJjaFJ1bGVJbmRleCwgaSk7CisJCQkJRGVsZXRlQ2xhc3NpZmllclJ1bGVGcm9tU0YoQWRhcHRlciwKKwkJCQkJCXVpU2VhcmNoUnVsZUluZGV4LCBpKTsKIAkJfQogCX0KIApAQCAtNDQxLDMyNCArNTU1LDI2MiBAQAogCWludCBpOwogCXN0cnVjdCBiY21fY29udmVyZ2VuY2VfdHlwZXMgKnBzZkNTVHlwZSA9IE5VTEw7CiAJc3RydWN0IGJjbV9waHNfcnVsZSBzUGhzUnVsZTsKLQlVU0hPUlQgdVZDSUQgPSBBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udXNWQ0lEX1ZhbHVlOworCXN0cnVjdCBiY21fcGFja2V0X2luZm8gKmN1cnJfcGFja2luZm8gPQorCQkmQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdOworCVVTSE9SVCB1VkNJRCA9IGN1cnJfcGFja2luZm8tPnVzVkNJRF9WYWx1ZTsKIAlVSU5UIFVHSVZhbHVlID0gMDsKIAotCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iVmFsaWQgPSBUUlVFOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNlYXJjaCBSdWxlIEluZGV4ID0gJWRcbiIsIHVpU2VhcmNoUnVsZUluZGV4KTsKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICIlczogU0ZJRD0gJXggIiwgX19mdW5jX18sIG50b2hsKHBzZkxvY2FsU2V0LT51MzJTRklEKSk7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiVXBkYXRpbmcgUXVldWUgJWQiLCB1aVNlYXJjaFJ1bGVJbmRleCk7CisJY3Vycl9wYWNraW5mby0+YlZhbGlkID0gVFJVRTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiU2VhcmNoIFJ1bGUgSW5kZXggPSAlZFxuIiwgdWlTZWFyY2hSdWxlSW5kZXgpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSIlczogU0ZJRD0gJXggIiwgX19mdW5jX18sIG50b2hsKHBzZkxvY2FsU2V0LT51MzJTRklEKSk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIlVwZGF0aW5nIFF1ZXVlICVkIiwgdWlTZWFyY2hSdWxlSW5kZXgpOwogCiAJdWxTRklEID0gbnRvaGwocHNmTG9jYWxTZXQtPnUzMlNGSUQpOwogCS8qIFN0b3JlIElQIFZlcnNpb24gdXNlZCAqLwogCS8qIEdldCBUaGUgVmVyc2lvbiBPZiBJUCB1c2VkIChJUHY2IG9yIElQdjQpIGZyb20gQ1NTcGVjaWZpY2F0aW9uIGZpZWxkIG9mIFNGICovCiAKLQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYklQQ1NTdXBwb3J0ID0gMDsKLQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYkV0aENTU3VwcG9ydCA9IDA7CisJY3Vycl9wYWNraW5mby0+YklQQ1NTdXBwb3J0ID0gMDsKKwljdXJyX3BhY2tpbmZvLT5iRXRoQ1NTdXBwb3J0ID0gMDsKIAogCS8qIEVuYWJsZSBJUC9FVGggQ1MgU3VwcG9ydCBBcyBSZXF1aXJlZCAqLwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkNvcHlUb0FkYXB0ZXIgOiB1OENTU3BlY2lmaWNhdGlvbiA6ICVYXG4iLCBwc2ZMb2NhbFNldC0+dThDU1NwZWNpZmljYXRpb24pOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJDb3B5VG9BZGFwdGVyIDogdThDU1NwZWNpZmljYXRpb24gOiAlWFxuIiwKKwkJCXBzZkxvY2FsU2V0LT51OENTU3BlY2lmaWNhdGlvbik7CiAJc3dpdGNoIChwc2ZMb2NhbFNldC0+dThDU1NwZWNpZmljYXRpb24pIHsKIAljYXNlIGVDU1BhY2tldElQVjQ6Ci0JewotCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYklQQ1NTdXBwb3J0ID0gSVBWNF9DUzsKKwkJY3Vycl9wYWNraW5mby0+YklQQ1NTdXBwb3J0ID0gSVBWNF9DUzsKIAkJYnJlYWs7Ci0JfQogCWNhc2UgZUNTUGFja2V0SVBWNjoKLQl7Ci0JCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iSVBDU1N1cHBvcnQgPSBJUFY2X0NTOworCQljdXJyX3BhY2tpbmZvLT5iSVBDU1N1cHBvcnQgPSBJUFY2X0NTOwogCQlicmVhazsKLQl9CiAJY2FzZSBlQ1M4MDJfM1BhY2tldEV0aGVybmV0OgogCWNhc2UgZUNTODAyXzFRUGFja2V0VkxBTjoKLQl7Ci0JCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iRXRoQ1NTdXBwb3J0ID0gRVRIX0NTXzgwMl8zOworCQljdXJyX3BhY2tpbmZvLT5iRXRoQ1NTdXBwb3J0ID0gRVRIX0NTXzgwMl8zOwogCQlicmVhazsKLQl9CiAJY2FzZSBlQ1NQYWNrZXRJUFY0T3ZlcjgwMl8xUVZMQU46CiAJY2FzZSBlQ1NQYWNrZXRJUFY0T3ZlcjgwMl8zRXRoZXJuZXQ6Ci0JewotCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYklQQ1NTdXBwb3J0ID0gSVBWNF9DUzsKLQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLmJFdGhDU1N1cHBvcnQgPSBFVEhfQ1NfODAyXzM7CisJCWN1cnJfcGFja2luZm8tPmJJUENTU3VwcG9ydCA9IElQVjRfQ1M7CisJCWN1cnJfcGFja2luZm8tPmJFdGhDU1N1cHBvcnQgPSBFVEhfQ1NfODAyXzM7CiAJCWJyZWFrOwotCX0KIAljYXNlIGVDU1BhY2tldElQVjZPdmVyODAyXzFRVkxBTjoKIAljYXNlIGVDU1BhY2tldElQVjZPdmVyODAyXzNFdGhlcm5ldDoKLQl7Ci0JCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iSVBDU1N1cHBvcnQgPSBJUFY2X0NTOwotCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYkV0aENTU3VwcG9ydCA9IEVUSF9DU184MDJfMzsKKwkJY3Vycl9wYWNraW5mby0+YklQQ1NTdXBwb3J0ID0gSVBWNl9DUzsKKwkJY3Vycl9wYWNraW5mby0+YkV0aENTU3VwcG9ydCA9IEVUSF9DU184MDJfMzsKIAkJYnJlYWs7Ci0JfQogCWRlZmF1bHQ6Ci0JewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJFcnJvciBpbiB2YWx1ZSBvZiBDUyBDbGFzc2lmaWNhdGlvbi4uIHNldHRpbmcgZGVmYXVsdCB0byBJUCBDU1xuIik7Ci0JCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iSVBDU1N1cHBvcnQgPSBJUFY0X0NTOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkJIkVycm9yIGluIHZhbHVlIG9mIENTIENsYXNzaWZpY2F0aW9uLi4gc2V0dGluZyBkZWZhdWx0IHRvIElQIENTXG4iKTsKKwkJY3Vycl9wYWNraW5mby0+YklQQ1NTdXBwb3J0ID0gSVBWNF9DUzsKIAkJYnJlYWs7CiAJfQotCX0KIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkNvcHlUb0FkYXB0ZXIgOiBRdWV1ZSBObyA6ICVYIEVUSCBDUyBTdXBwb3J0IDogICVYICAsIElQIENTIFN1cHBvcnQgOiAlWFxuIiwKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiQ29weVRvQWRhcHRlciA6IFF1ZXVlIE5vIDogJVggRVRIIENTIFN1cHBvcnQgOiAgJVggICwgSVAgQ1MgU3VwcG9ydCA6ICVYXG4iLAogCQkJdWlTZWFyY2hSdWxlSW5kZXgsCi0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYkV0aENTU3VwcG9ydCwKLQkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iSVBDU1N1cHBvcnQpOworCQkJY3Vycl9wYWNraW5mby0+YkV0aENTU3VwcG9ydCwKKwkJCWN1cnJfcGFja2luZm8tPmJJUENTU3VwcG9ydCk7CiAKIAkvKiBTdG9yZSBJUCBWZXJzaW9uIHVzZWQgKi8KIAkvKiBHZXQgVGhlIFZlcnNpb24gT2YgSVAgdXNlZCAoSVB2NiBvciBJUHY0KSBmcm9tIENTU3BlY2lmaWNhdGlvbiBmaWVsZCBvZiBTRiAqLwotCWlmIChBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYklQQ1NTdXBwb3J0ID09IElQVjZfQ1MpCi0JCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51Y0lwVmVyc2lvbiA9IElQVjY7CisJaWYgKGN1cnJfcGFja2luZm8tPmJJUENTU3VwcG9ydCA9PSBJUFY2X0NTKQorCQljdXJyX3BhY2tpbmZvLT51Y0lwVmVyc2lvbiA9IElQVjY7CiAJZWxzZQotCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWNJcFZlcnNpb24gPSBJUFY0OworCQljdXJyX3BhY2tpbmZvLT51Y0lwVmVyc2lvbiA9IElQVjQ7CiAKIAkvKiBUbyBlbnN1cmUgdGhhdCB0aGUgRVRIIENTIGNvZGUgZG9lc24ndCBnZXRzIGV4ZWN1dGVkIGlmIHRoZSBCUyBkb2Vzbid0IHN1cHBvcnRzIEVUSCBDUyAqLwogCWlmICghQWRhcHRlci0+YkVUSENTRW5hYmxlZCkKLQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLmJFdGhDU1N1cHBvcnQgPSAwOworCQljdXJyX3BhY2tpbmZvLT5iRXRoQ1NTdXBwb3J0ID0gMDsKIAogCWlmIChwc2ZMb2NhbFNldC0+dThTZXJ2aWNlQ2xhc3NOYW1lTGVuZ3RoID4gMCAmJiBwc2ZMb2NhbFNldC0+dThTZXJ2aWNlQ2xhc3NOYW1lTGVuZ3RoIDwgMzIpCi0JCW1lbWNweShBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWNTZXJ2aWNlQ2xhc3NOYW1lLAlwc2ZMb2NhbFNldC0+dThTZXJ2aWNlQ2xhc3NOYW1lLCBwc2ZMb2NhbFNldC0+dThTZXJ2aWNlQ2xhc3NOYW1lTGVuZ3RoKTsKKwkJbWVtY3B5KGN1cnJfcGFja2luZm8tPnVjU2VydmljZUNsYXNzTmFtZSwKKwkJCQlwc2ZMb2NhbFNldC0+dThTZXJ2aWNlQ2xhc3NOYW1lLAorCQkJCXBzZkxvY2FsU2V0LT51OFNlcnZpY2VDbGFzc05hbWVMZW5ndGgpOwogCi0JQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnU4UXVldWVUeXBlID0gcHNmTG9jYWxTZXQtPnU4U2VydmljZUZsb3dTY2hlZHVsaW5nVHlwZTsKKwljdXJyX3BhY2tpbmZvLT51OFF1ZXVlVHlwZSA9IHBzZkxvY2FsU2V0LT51OFNlcnZpY2VGbG93U2NoZWR1bGluZ1R5cGU7CiAKLQlpZiAoQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnU4UXVldWVUeXBlID09IEJFICYmIEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51Y0RpcmVjdGlvbikKKwlpZiAoY3Vycl9wYWNraW5mby0+dThRdWV1ZVR5cGUgPT0gQkUgJiYgY3Vycl9wYWNraW5mby0+dWNEaXJlY3Rpb24pCiAJCUFkYXB0ZXItPnVzQmVzdEVmZm9ydFF1ZXVlSW5kZXggPSB1aVNlYXJjaFJ1bGVJbmRleDsKIAotCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51bFNGSUQgPSBudG9obChwc2ZMb2NhbFNldC0+dTMyU0ZJRCk7CisJY3Vycl9wYWNraW5mby0+dWxTRklEID0gbnRvaGwocHNmTG9jYWxTZXQtPnUzMlNGSUQpOwogCi0JQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnU4VHJhZmZpY1ByaW9yaXR5ID0gcHNmTG9jYWxTZXQtPnU4VHJhZmZpY1ByaW9yaXR5OworCWN1cnJfcGFja2luZm8tPnU4VHJhZmZpY1ByaW9yaXR5ID0gcHNmTG9jYWxTZXQtPnU4VHJhZmZpY1ByaW9yaXR5OwogCiAJLyogY29weSBhbGwgdGhlIGNsYXNzaWZpZXIgaW4gdGhlIFNlcnZpY2UgRmxvdyBwYXJhbSAgc3RydWN0dXJlICovCiAJZm9yIChpID0gMDsgaSA8IHBzZkxvY2FsU2V0LT51OFRvdGFsQ2xhc3NpZmllcnM7IGkrKykgewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJDbGFzc2lmaWVyIGluZGV4ID0lZCIsIGkpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkJIkNsYXNzaWZpZXIgaW5kZXggPSVkIiwgaSk7CiAJCXBzZkNTVHlwZSA9ICZwc2ZMb2NhbFNldC0+Y0NvbnZlcmdlbmNlU0xUeXBlc1tpXTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiQ2xhc3NpZmllciBpbmRleCA9JWQiLCBpKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCSJDbGFzc2lmaWVyIGluZGV4ID0lZCIsIGkpOwogCiAJCWlmIChwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4Q2xhc3NpZmllclJ1bGVQcmlvcml0eSkKLQkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iQ2xhc3NpZmllclByaW9yaXR5ID0gVFJVRTsKKwkJCWN1cnJfcGFja2luZm8tPmJDbGFzc2lmaWVyUHJpb3JpdHkgPSBUUlVFOwogCiAJCWlmIChwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4Q2xhc3NpZmllclJ1bGVQcmlvcml0eSkKLQkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iQ2xhc3NpZmllclByaW9yaXR5ID0gVFJVRTsKKwkJCWN1cnJfcGFja2luZm8tPmJDbGFzc2lmaWVyUHJpb3JpdHkgPSBUUlVFOwogCiAJCWlmICh1Y0RzeFR5cGUgPT0gRFNBX0FDSykgewogCQkJZUNsYXNzaWZpZXJBY3Rpb24gPSBlQWRkQ2xhc3NpZmllcjsKIAkJfSBlbHNlIGlmICh1Y0RzeFR5cGUgPT0gRFNDX0FDSykgewogCQkJc3dpdGNoIChwc2ZDU1R5cGUtPnU4Q2xhc3NmaWVyRFNDQWN0aW9uKSB7CiAJCQljYXNlIDA6IC8qIERTQyBBZGQgQ2xhc3NpZmllciAqLwotCQkJewogCQkJCWVDbGFzc2lmaWVyQWN0aW9uID0gZUFkZENsYXNzaWZpZXI7Ci0JCQl9Ci0JCQlicmVhazsKKwkJCQlicmVhazsKIAkJCWNhc2UgMTogLyogRFNDIFJlcGxhY2UgQ2xhc3NpZmllciAqLwotCQkJewogCQkJCWVDbGFzc2lmaWVyQWN0aW9uID0gZVJlcGxhY2VDbGFzc2lmaWVyOwotCQkJfQotCQkJYnJlYWs7CisJCQkJYnJlYWs7CiAJCQljYXNlIDI6IC8qIERTQyBEZWxldGUgQ2xhc3NpZmllciAqLwotCQkJewogCQkJCWVDbGFzc2lmaWVyQWN0aW9uID0gZURlbGV0ZUNsYXNzaWZpZXI7Ci0JCQl9Ci0JCQlicmVhazsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQl7CiAJCQkJZUNsYXNzaWZpZXJBY3Rpb24gPSBlSW52YWxpZENsYXNzaWZpZXJBY3Rpb247CiAJCQl9Ci0JCQl9CiAJCX0KIAogCQl1MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCA9IG50b2hzKHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXgpOwogCiAJCXN3aXRjaCAoZUNsYXNzaWZpZXJBY3Rpb24pIHsKIAkJY2FzZSBlQWRkQ2xhc3NpZmllcjoKLQkJewogCQkJLyogR2V0IGEgRnJlZSBDbGFzc2lmaWVyIEluZGV4IEZyb20gQ2xhc3NpZmllciB0YWJsZSBmb3IgdGhpcyBTRiB0byBhZGQgdGhlIENsYXNzaWZpZXIgKi8KIAkJCS8qIENvbnRhaW5lZCBpbiB0aGlzIG1lc3NhZ2UgKi8KLQkJCW5DbGFzc2lmaWVySW5kZXggPSBTZWFyY2hDbHNpZChBZGFwdGVyLCB1bFNGSUQsIHUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4KTsKKwkJCW5DbGFzc2lmaWVySW5kZXggPSBTZWFyY2hDbHNpZChBZGFwdGVyLAorCQkJCQl1bFNGSUQsCisJCQkJCXUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4KTsKIAogCQkJaWYgKG5DbGFzc2lmaWVySW5kZXggPiBNQVhfQ0xBU1NJRklFUlMpIHsKIAkJCQluQ2xhc3NpZmllckluZGV4ID0gU2VhcmNoRnJlZUNsc2lkKEFkYXB0ZXIpOwogCQkJCWlmIChuQ2xhc3NpZmllckluZGV4ID4gTUFYX0NMQVNTSUZJRVJTKSB7CiAJCQkJCS8qIEZhaWxlZCBUbyBnZXQgYSBmcmVlIEVudHJ5ICovCi0JCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkVycm9yIEZhaWxlZCBUbyBnZXQgYSBmcmVlIENsYXNzaWZpZXIgRW50cnkiKTsKKwkJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsCisJCQkJCQkJREJHX1RZUEVfT1RIRVJTLAorCQkJCQkJCUNPTk5fTVNHLAorCQkJCQkJCURCR19MVkxfQUxMLAorCQkJCQkJCSJFcnJvciBGYWlsZWQgVG8gZ2V0IGEgZnJlZSBDbGFzc2lmaWVyIEVudHJ5Iik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKiBDb3B5IHRoZSBDbGFzc2lmaWVyIFJ1bGUgZm9yIHRoaXMgc2VydmljZSBmbG93IGludG8gb3VyIENsYXNzaWZpZXIgdGFibGUgbWFpbnRhaW5lZCBwZXIgU0YuICovCi0JCQkJQ29weUNsYXNzaWZpZXJSdWxlVG9TRihBZGFwdGVyLCBwc2ZDU1R5cGUsIHVpU2VhcmNoUnVsZUluZGV4LCBuQ2xhc3NpZmllckluZGV4KTsKKwkJCQlDb3B5Q2xhc3NpZmllclJ1bGVUb1NGKEFkYXB0ZXIsIHBzZkNTVHlwZSwKKwkJCQkJCXVpU2VhcmNoUnVsZUluZGV4LAorCQkJCQkJbkNsYXNzaWZpZXJJbmRleCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFRoaXMgQ2xhc3NpZmllciBBbHJlYWR5IEV4aXN0cyBhbmQgaXQgaXMgaW52YWxpZCB0byBBZGQgQ2xhc3NpZmllciB3aXRoIGV4aXN0aW5nIFBDUkkgKi8KLQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywKKwkJCQkJCUNPTk5fTVNHLAorCQkJCQkJREJHX0xWTF9BTEwsCiAJCQkJCQkiQ29weVRvQWRhcHRlcjogRXJyb3IgVGhlIFNwZWNpZmllZCBDbGFzc2lmaWVyIEFscmVhZHkgRXhpc3RzIGFuZCBhdHRlbXB0ZWQgVG8gQWRkIENsYXNzaWZpZXIgd2l0aCBTYW1lIFBDUkkgOiAweCV4XG4iLAogCQkJCQkJdTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXgpOwogCQkJfQotCQl9Ci0JCWJyZWFrOworCQkJYnJlYWs7CiAJCWNhc2UgZVJlcGxhY2VDbGFzc2lmaWVyOgotCQl7CiAJCQkvKiBHZXQgdGhlIENsYXNzaWZpZXIgSW5kZXggRnJvbSBDbGFzc2lmaWVyIHRhYmxlIGZvciB0aGlzIFNGIGFuZCByZXBsYWNlIGV4aXN0aW5nICBDbGFzc2lmaWVyICovCiAJCQkvKiB3aXRoIHRoZSBuZXcgY2xhc3NpZmllciBDb250YWluZWQgaW4gdGhpcyBtZXNzYWdlICovCi0JCQluQ2xhc3NpZmllckluZGV4ID0gU2VhcmNoQ2xzaWQoQWRhcHRlciwgdWxTRklELCB1MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCk7CisJCQluQ2xhc3NpZmllckluZGV4ID0gU2VhcmNoQ2xzaWQoQWRhcHRlciwgdWxTRklELAorCQkJCQl1MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCk7CiAJCQlpZiAobkNsYXNzaWZpZXJJbmRleCA+IE1BWF9DTEFTU0lGSUVSUykgewogCQkJCS8qIEZhaWxlZCBUbyBzZWFyY2ggdGhlIGNsYXNzaWZpZXIgKi8KLQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJFcnJvciBTZWFyY2ggZm9yIENsYXNzaWZpZXIgVG8gYmUgcmVwbGFjZWQgZmFpbGVkIik7CisJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywKKwkJCQkJCUNPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkJCSJFcnJvciBTZWFyY2ggZm9yIENsYXNzaWZpZXIgVG8gYmUgcmVwbGFjZWQgZmFpbGVkIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBDb3B5IHRoZSBDbGFzc2lmaWVyIFJ1bGUgZm9yIHRoaXMgc2VydmljZSBmbG93IGludG8gb3VyIENsYXNzaWZpZXIgdGFibGUgbWFpbnRhaW5lZCBwZXIgU0YuICovCi0JCQlDb3B5Q2xhc3NpZmllclJ1bGVUb1NGKEFkYXB0ZXIsIHBzZkNTVHlwZSwgdWlTZWFyY2hSdWxlSW5kZXgsIG5DbGFzc2lmaWVySW5kZXgpOwotCQl9Ci0JCWJyZWFrOworCQkJQ29weUNsYXNzaWZpZXJSdWxlVG9TRihBZGFwdGVyLCBwc2ZDU1R5cGUsCisJCQkJCXVpU2VhcmNoUnVsZUluZGV4LCBuQ2xhc3NpZmllckluZGV4KTsKKwkJCWJyZWFrOwogCQljYXNlIGVEZWxldGVDbGFzc2lmaWVyOgotCQl7CiAJCQkvKiBHZXQgdGhlIENsYXNzaWZpZXIgSW5kZXggRnJvbSBDbGFzc2lmaWVyIHRhYmxlIGZvciB0aGlzIFNGIGFuZCByZXBsYWNlIGV4aXN0aW5nICBDbGFzc2lmaWVyICovCiAJCQkvKiB3aXRoIHRoZSBuZXcgY2xhc3NpZmllciBDb250YWluZWQgaW4gdGhpcyBtZXNzYWdlICovCi0JCQluQ2xhc3NpZmllckluZGV4ID0gU2VhcmNoQ2xzaWQoQWRhcHRlciwgdWxTRklELCB1MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCk7CisJCQluQ2xhc3NpZmllckluZGV4ID0gU2VhcmNoQ2xzaWQoQWRhcHRlciwgdWxTRklELAorCQkJCQl1MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCk7CiAJCQlpZiAobkNsYXNzaWZpZXJJbmRleCA+IE1BWF9DTEFTU0lGSUVSUykJewogCQkJCS8qIEZhaWxlZCBUbyBzZWFyY2ggdGhlIGNsYXNzaWZpZXIgKi8KLQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJFcnJvciBTZWFyY2ggZm9yIENsYXNzaWZpZXIgVG8gYmUgZGVsZXRlZCBmYWlsZWQiKTsKKwkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLAorCQkJCQkJQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCQkJIkVycm9yIFNlYXJjaCBmb3IgQ2xhc3NpZmllciBUbyBiZSBkZWxldGVkIGZhaWxlZCIpOwogCQkJCWJyZWFrOwogCQkJfQogCiAJCQkvKiBEZWxldGUgVGhpcyBjbGFzc2lmaWVyICovCi0JCQlEZWxldGVDbGFzc2lmaWVyUnVsZUZyb21TRihBZGFwdGVyLCB1aVNlYXJjaFJ1bGVJbmRleCwgbkNsYXNzaWZpZXJJbmRleCk7Ci0JCX0KLQkJYnJlYWs7CisJCQlEZWxldGVDbGFzc2lmaWVyUnVsZUZyb21TRihBZGFwdGVyLCB1aVNlYXJjaFJ1bGVJbmRleCwKKwkJCQkJbkNsYXNzaWZpZXJJbmRleCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJewogCQkJLyogSW52YWxpZCBBY3Rpb24gZm9yIGNsYXNzaWZpZXIgKi8KIAkJCWJyZWFrOwogCQl9Ci0JCX0KIAl9CiAKIAkvKiBSZXBlYXQgcGFyc2luZyBDbGFzc2lmaWNhdGlvbiBFbnRyaWVzIHRvIHByb2Nlc3MgUEhTIFJ1bGVzICovCiAJZm9yIChpID0gMDsgaSA8IHBzZkxvY2FsU2V0LT51OFRvdGFsQ2xhc3NpZmllcnM7IGkrKykgewogCQlwc2ZDU1R5cGUgPSAmcHNmTG9jYWxTZXQtPmNDb252ZXJnZW5jZVNMVHlwZXNbaV07Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgInBzZkNTVHlwZS0+dThQaHNEU0NBY3Rpb24gOiAweCV4XG4iLCBwc2ZDU1R5cGUtPnU4UGhzRFNDQWN0aW9uKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCSJwc2ZDU1R5cGUtPnU4UGhzRFNDQWN0aW9uIDogMHgleFxuIiwKKwkJCQlwc2ZDU1R5cGUtPnU4UGhzRFNDQWN0aW9uKTsKIAogCQlzd2l0Y2ggKHBzZkNTVHlwZS0+dThQaHNEU0NBY3Rpb24pIHsKIAkJY2FzZSBlRGVsZXRlQWxsUEhTUnVsZXM6Ci0JCXsKLQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkRlbGV0aW5nIEFsbCBQSFMgUnVsZXMgRm9yIFZDSUQ6IDB4JVhcbiIsIHVWQ0lEKTsKKwkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLAorCQkJCQlEQkdfTFZMX0FMTCwKKwkJCQkJIkRlbGV0aW5nIEFsbCBQSFMgUnVsZXMgRm9yIFZDSUQ6IDB4JVhcbiIsCisJCQkJCXVWQ0lEKTsKIAogCQkJLyogRGVsZXRlIEFsbCB0aGUgUEhTIHJ1bGVzIGZvciB0aGlzIFNlcnZpY2UgZmxvdyAqLwogCQkJUGhzRGVsZXRlU0ZSdWxlcygmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0LCB1VkNJRCk7CiAJCQlicmVhazsKLQkJfQogCQljYXNlIGVEZWxldGVQSFNSdWxlOgotCQl7Ci0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJQSFMgRFNDIEFjdGlvbiA9IERlbGV0ZSBQSFMgUnVsZVxuIik7CisJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywKKwkJCQkJREJHX0xWTF9BTEwsCisJCQkJCSJQSFMgRFNDIEFjdGlvbiA9IERlbGV0ZSBQSFMgUnVsZVxuIik7CiAKIAkJCWlmIChwc2ZDU1R5cGUtPmNQaHNSdWxlLnU4UEhTSSkKLQkJCQlQaHNEZWxldGVQSFNSdWxlKCZBZGFwdGVyLT5zdEJDTVBoc0NvbnRleHQsIHVWQ0lELCBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4QXNzb2NpYXRlZFBIU0kpOworCQkJCVBoc0RlbGV0ZVBIU1J1bGUoJkFkYXB0ZXItPnN0QkNNUGhzQ29udGV4dCwKKwkJCQkJCXVWQ0lELAorCQkJCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEFzc29jaWF0ZWRQSFNJKTsKIAogCQkJYnJlYWs7Ci0JCX0KIAkJZGVmYXVsdDoKLQkJewogCQkJaWYgKHVjRHN4VHlwZSA9PSBEU0NfQUNLKSB7CiAJCQkJLyogQkNNX0RFQlVHX1BSSU5UKENPTk5fTVNHLCgiSW52YWxpZCBQSFMgRFNDIEFjdGlvbiBGb3IgRFNDXG4iLHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNJKSk7ICovCiAJCQkJYnJlYWs7IC8qIEZPciBEU0MgQUNLIENhc2UgUEhTIERTQyBBY3Rpb24gbXVzdCBiZSBpbiB2YWxpZCBzZXQgKi8KIAkJCX0KLQkJfQogCQkvKiBQcm9jZWVkIFRvIEFkZCBQSFMgcnVsZSBmb3IgRFNBX0FDSyBjYXNlIGV2ZW4gaWYgUEhTIERTQyBhY3Rpb24gaXMgdW5zcGVjaWZpZWQgKi8KIAkJLyogTm8gQnJlYWsgSGVyZSAuIEludGVudGlvbmFsbHkhICovCiAKIAkJY2FzZSBlQWRkUEhTUnVsZToKIAkJY2FzZSBlU2V0UEhTUnVsZToKLQkJewogCQkJaWYgKHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNJKQl7CiAJCQkJLyogQXBwbHkgVGhpcyBQSFMgUnVsZSB0byBhbGwgY2xhc3NpZmllcnMgd2hvc2UgQXNzb2NpYXRlZCBQSFNJIE1hdGNoICovCi0JCQkJdW5zaWduZWQgaW50IHVpQ2xhc3NpZmllckluZGV4ID0gMDsKLQkJCQlpZiAocHN0QWRkSW5kaWNhdGlvbi0+dThEaXJlY3Rpb24gPT0gVVBMSU5LX0RJUikgewotCQkJCQlmb3IgKHVpQ2xhc3NpZmllckluZGV4ID0gMDsgdWlDbGFzc2lmaWVySW5kZXggPCBNQVhfQ0xBU1NJRklFUlM7IHVpQ2xhc3NpZmllckluZGV4KyspIHsKLQkJCQkJCWlmICgoQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpQ2xhc3NpZmllckluZGV4XS5iVXNlZCkgJiYKLQkJCQkJCQkoQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpQ2xhc3NpZmllckluZGV4XS51bFNGSUQgPT0gQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnVsU0ZJRCkgJiYKLQkJCQkJCQkoQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpQ2xhc3NpZmllckluZGV4XS51OEFzc29jaWF0ZWRQSFNJID09IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNJKSkgewotCQkJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKLQkJCQkJCQkJCSJBZGRpbmcgUEhTIFJ1bGUgRm9yIENsYXNzaWZpZXI6IDB4JXggY1Boc1J1bGUudThQSFNJOiAweCV4XG4iLAotCQkJCQkJCQkJQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpQ2xhc3NpZmllckluZGV4XS51aUNsYXNzaWZpZXJSdWxlSW5kZXgsCi0JCQkJCQkJCQlwc2ZDU1R5cGUtPmNQaHNSdWxlLnU4UEhTSSk7Ci0JCQkJCQkJLyogVXBkYXRlIFRoZSBQSFMgUnVsZSBmb3IgdGhpcyBjbGFzc2lmaWVyIGFzIEFzc29jaWF0ZWQgUEhTSSBpZCBkZWZpbmVkICovCi0KLQkJCQkJCQkvKiBDb3B5IHRoZSBQSFMgUnVsZSAqLwotCQkJCQkJCXNQaHNSdWxlLnU4UEhTSSA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNJOwotCQkJCQkJCXNQaHNSdWxlLnU4UEhTRkxlbmd0aCA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNGTGVuZ3RoOwotCQkJCQkJCXNQaHNSdWxlLnU4UEhTTUxlbmd0aCA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNNTGVuZ3RoOwotCQkJCQkJCXNQaHNSdWxlLnU4UEhTUyA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNTOwotCQkJCQkJCXNQaHNSdWxlLnU4UEhTViA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNWOwotCQkJCQkJCW1lbWNweShzUGhzUnVsZS51OFBIU0YsIHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNGLCBNQVhfUEhTX0xFTkdUSFMpOwotCQkJCQkJCW1lbWNweShzUGhzUnVsZS51OFBIU00sIHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNNLCBNQVhfUEhTX0xFTkdUSFMpOwotCQkJCQkJCXNQaHNSdWxlLnU4UmVmQ250ID0gMDsKLQkJCQkJCQlzUGhzUnVsZS5iVW5jbGFzc2lmaWVkUEhTUnVsZSA9IGZhbHNlOwotCQkJCQkJCXNQaHNSdWxlLlBIU01vZGlmaWVkQnl0ZXMgPSAwOwotCQkJCQkJCXNQaHNSdWxlLlBIU01vZGlmaWVkTnVtUGFja2V0cyA9IDA7Ci0JCQkJCQkJc1Boc1J1bGUuUEhTRXJyb3JOdW1QYWNrZXRzID0gMDsKLQotCQkJCQkJCS8qIGJQSFNSdWxlQXNzb2NpYXRlZCA9IFRSVUU7ICovCi0JCQkJCQkJLyogU3RvcmUgVGhlIFBIUyBSdWxlIGZvciB0aGlzIGNsYXNzaWZpZXIgKi8KLQotCQkJCQkJCVBoc1VwZGF0ZUNsYXNzaWZpZXJSdWxlKAotCQkJCQkJCQkmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0LAotCQkJCQkJCQl1VkNJRCwKLQkJCQkJCQkJQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpQ2xhc3NpZmllckluZGV4XS51aUNsYXNzaWZpZXJSdWxlSW5kZXgsCi0JCQkJCQkJCSZzUGhzUnVsZSwKLQkJCQkJCQkJQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpQ2xhc3NpZmllckluZGV4XS51OEFzc29jaWF0ZWRQSFNJKTsKLQotCQkJCQkJCS8qIFVwZGF0ZSBQSFMgUnVsZSBGb3IgdGhlIENsYXNzaWZpZXIgKi8KLQkJCQkJCQlpZiAoc1Boc1J1bGUudThQSFNJKSB7Ci0JCQkJCQkJCUFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVt1aUNsYXNzaWZpZXJJbmRleF0udTMyUEhTUnVsZUlEID0gc1Boc1J1bGUudThQSFNJOwotCQkJCQkJCQltZW1jcHkoJkFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVt1aUNsYXNzaWZpZXJJbmRleF0uc1Boc1J1bGUsICZzUGhzUnVsZSwgc2l6ZW9mKHN0cnVjdCBiY21fcGhzX3J1bGUpKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQkvKiBFcnJvciBQSFMgUnVsZSBzcGVjaWZpZWQgaW4gc2lnbmFsaW5nIGNvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIGFueSBjbGFzc2lmaWVyICovCi0KLQkJCQkJLyogQ29weSB0aGUgUEhTIFJ1bGUgKi8KLQkJCQkJc1Boc1J1bGUudThQSFNJID0gcHNmQ1NUeXBlLT5jUGhzUnVsZS51OFBIU0k7Ci0JCQkJCXNQaHNSdWxlLnU4UEhTRkxlbmd0aCA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNGTGVuZ3RoOwotCQkJCQlzUGhzUnVsZS51OFBIU01MZW5ndGggPSBwc2ZDU1R5cGUtPmNQaHNSdWxlLnU4UEhTTUxlbmd0aDsKLQkJCQkJc1Boc1J1bGUudThQSFNTID0gcHNmQ1NUeXBlLT5jUGhzUnVsZS51OFBIU1M7Ci0JCQkJCXNQaHNSdWxlLnU4UEhTViA9IHBzZkNTVHlwZS0+Y1Boc1J1bGUudThQSFNWOwotCQkJCQltZW1jcHkoc1Boc1J1bGUudThQSFNGLCBwc2ZDU1R5cGUtPmNQaHNSdWxlLnU4UEhTRiwgTUFYX1BIU19MRU5HVEhTKTsKLQkJCQkJbWVtY3B5KHNQaHNSdWxlLnU4UEhTTSwgcHNmQ1NUeXBlLT5jUGhzUnVsZS51OFBIU00sIE1BWF9QSFNfTEVOR1RIUyk7Ci0JCQkJCXNQaHNSdWxlLnU4UmVmQ250ID0gMDsKLQkJCQkJc1Boc1J1bGUuYlVuY2xhc3NpZmllZFBIU1J1bGUgPSBUUlVFOwotCQkJCQlzUGhzUnVsZS5QSFNNb2RpZmllZEJ5dGVzID0gMDsKLQkJCQkJc1Boc1J1bGUuUEhTTW9kaWZpZWROdW1QYWNrZXRzID0gMDsKLQkJCQkJc1Boc1J1bGUuUEhTRXJyb3JOdW1QYWNrZXRzID0gMDsKLQkJCQkJLyogU3RvcmUgVGhlIFBIUyBSdWxlIGZvciB0aGlzIGNsYXNzaWZpZXIgKi8KLQotCQkJCQkvKgotCQkJCQkgKiBQYXNzaW5nIHRoZSBhcmd1bWVudCB1OFBIU0kgaW5zdGVhZCBvZiBjbHNpZC4gQmVjYXVzZSBmb3IgREwgd2l0aCBubyBjbGFzc2lmaWVyIHJ1bGUsCi0JCQkJCSAqIGNsc2lkIHdpbGwgYmUgemVybyBoZW5jZSB3ZSBjYW4ndCBoYXZlIG11bHRpcGxlIFBIUyBydWxlcyBmb3IgdGhlIHNhbWUgU0YuCi0JCQkJCSAqIFRvIHN1cHBvcnQgbXVsdGlwbGUgUEhTIHJ1bGUsIHBhc3NpbmcgdThQSFNJLgotCQkJCQkgKi8KLQkJCQkJUGhzVXBkYXRlQ2xhc3NpZmllclJ1bGUoCi0JCQkJCQkmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0LAorCQkJCWFwcGx5X3Boc19ydWxlX3RvX2FsbF9jbGFzc2lmaWVycyhBZGFwdGVyLAorCQkJCQkJdWlTZWFyY2hSdWxlSW5kZXgsCiAJCQkJCQl1VkNJRCwKLQkJCQkJCXNQaHNSdWxlLnU4UEhTSSwKIAkJCQkJCSZzUGhzUnVsZSwKLQkJCQkJCXNQaHNSdWxlLnU4UEhTSSk7Ci0JCQkJfQorCQkJCQkJJnBzZkNTVHlwZS0+Y1Boc1J1bGUsCisJCQkJCQlwc3RBZGRJbmRpY2F0aW9uKTsKIAkJCX0KLQkJfQotCQlicmVhazsKKwkJCWJyZWFrOwogCQl9CiAJfQogCiAJaWYgKHBzZkxvY2FsU2V0LT51MzJNYXhTdXN0YWluZWRUcmFmZmljUmF0ZSA9PSAwKSB7CiAJCS8qIE5vIFJhdGUgTGltaXQgLiBTZXQgTWF4IFN1c3RhaW5lZCBUcmFmZmljIFJhdGUgdG8gTWF4aW11bSAqLwotCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhBbGxvd2VkUmF0ZSA9IFdJTUFYX01BWF9BTExPV0VEX1JBVEU7CisJCWN1cnJfcGFja2luZm8tPnVpTWF4QWxsb3dlZFJhdGUgPSBXSU1BWF9NQVhfQUxMT1dFRF9SQVRFOwogCX0gZWxzZSBpZiAobnRvaGwocHNmTG9jYWxTZXQtPnUzMk1heFN1c3RhaW5lZFRyYWZmaWNSYXRlKSA+IFdJTUFYX01BWF9BTExPV0VEX1JBVEUpIHsKIAkJLyogVG9vIGxhcmdlIEFsbG93ZWQgUmF0ZSBzcGVjaWZpZWQuIExpbWl0aW5nIHRvIFdpIE1heCAgQWxsb3dlZCByYXRlICovCi0JCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heEFsbG93ZWRSYXRlID0gV0lNQVhfTUFYX0FMTE9XRURfUkFURTsKKwkJY3Vycl9wYWNraW5mby0+dWlNYXhBbGxvd2VkUmF0ZSA9IFdJTUFYX01BWF9BTExPV0VEX1JBVEU7CiAJfSBlbHNlIHsKLQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnVpTWF4QWxsb3dlZFJhdGUgPSAgbnRvaGwocHNmTG9jYWxTZXQtPnUzMk1heFN1c3RhaW5lZFRyYWZmaWNSYXRlKTsKKwkJY3Vycl9wYWNraW5mby0+dWlNYXhBbGxvd2VkUmF0ZSA9CisJCQludG9obChwc2ZMb2NhbFNldC0+dTMyTWF4U3VzdGFpbmVkVHJhZmZpY1JhdGUpOwogCX0KIAotCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heExhdGVuY3kgPSBudG9obChwc2ZMb2NhbFNldC0+dTMyTWF4aW11bUxhdGVuY3kpOwotCWlmIChBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhMYXRlbmN5ID09IDApIC8qIDAgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaW5maW5pdGUgKi8KLQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnVpTWF4TGF0ZW5jeSA9IE1BWF9MQVRFTkNZX0FMTE9XRUQ7CisJY3Vycl9wYWNraW5mby0+dWlNYXhMYXRlbmN5ID0gbnRvaGwocHNmTG9jYWxTZXQtPnUzMk1heGltdW1MYXRlbmN5KTsKKwlpZiAoY3Vycl9wYWNraW5mby0+dWlNYXhMYXRlbmN5ID09IDApIC8qIDAgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaW5maW5pdGUgKi8KKwkJY3Vycl9wYWNraW5mby0+dWlNYXhMYXRlbmN5ID0gTUFYX0xBVEVOQ1lfQUxMT1dFRDsKIAotCWlmICgoQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnU4UXVldWVUeXBlID09IEVSVFBTIHx8Ci0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udThRdWV1ZVR5cGUgPT0gVUdTKSkKKwlpZiAoKGN1cnJfcGFja2luZm8tPnU4UXVldWVUeXBlID09IEVSVFBTIHx8CisJCQljdXJyX3BhY2tpbmZvLT51OFF1ZXVlVHlwZSA9PSBVR1MpKQogCQlVR0lWYWx1ZSA9IG50b2hzKHBzZkxvY2FsU2V0LT51MTZVbnNvbGljaXRlZEdyYW50SW50ZXJ2YWwpOwogCiAJaWYgKFVHSVZhbHVlID09IDApCkBAIC03NzAsNDIgKzgyMiw0NSBAQAogCSAqIFRoZSBleHRyYSBhbW91bnQgb2YgdG9rZW4gaXMgdG8gZW5zdXJlIHRoYXQgYSBsYXJnZSBhbW91bnQgb2Ygaml0dGVyIHdvbid0IGhhdmUgbG9zcyBpbiB0aHJvdWdocHV0Li4uCiAJICogSW4gY2FzZSBvZiBub24tVUdJIGJhc2VkIGNvbm5lY3Rpb24sIDIwMCBmcmFtZXMgd29ydGggb2YgZGF0YSBpcyB0aGUgbWF4IHRva2VuIGNvdW50IGF0IGhvc3QuLi4KIAkgKi8KLQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhCdWNrZXRTaXplID0KLQkJKERFRkFVTFRfVUdJX0ZBQ1RPUipBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhBbGxvd2VkUmF0ZSpVR0lWYWx1ZSkvMTAwMDsKKwljdXJyX3BhY2tpbmZvLT51aU1heEJ1Y2tldFNpemUgPQorCQkoREVGQVVMVF9VR0lfRkFDVE9SKmN1cnJfcGFja2luZm8tPnVpTWF4QWxsb3dlZFJhdGUqVUdJVmFsdWUpLzEwMDA7CiAKLQlpZiAoQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnVpTWF4QnVja2V0U2l6ZSA8IFdJTUFYX01BWF9NVFUqOCkgeworCWlmIChjdXJyX3BhY2tpbmZvLT51aU1heEJ1Y2tldFNpemUgPCBXSU1BWF9NQVhfTVRVKjgpIHsKIAkJVUlOVCBVR0lGYWN0b3IgPSAwOwogCQkvKiBTcGVjaWFsIEhhbmRsaW5nIHRvIGVuc3VyZSB0aGUgYmlnZ2VzdCBzaXplIG9mIHBhY2tldCBjYW4gZ28gb3V0IGZyb20gaG9zdCB0byBGVyBhcyBmb2xsb3dzOgogCQkgKiAxLiBBbnkgcGFja2V0IGZyb20gSG9zdCB0byBGVyBjYW4gZ28gb3V0IGluIGRpZmZlcmVudCBwYWNrZXQgc2l6ZS4KIAkJICogMi4gU28gaW4gY2FzZSB0aGUgQnVja2V0IGNvdW50IGlzIHNtYWxsZXIgdGhhbiBNVFUsIHRoZSBwYWNrZXRzIG9mIHNpemUgKFNpemUgPiBUb2tlbkNvdW50KSwgd2lsbCBnZXQgZHJvcHBlZC4KIAkJICogMy4gV2UgY2FuIGFsbG93IHBhY2tldHMgb2YgTWF4U2l6ZSBmcm9tIEhvc3QtPkZXIHRoYXQgY2FuIGdvIG91dCBmcm9tIEZXIGluIG11bHRpcGxlIFNEVXMgYnkgZnJhZ21lbnRhdGlvbiBhdCBXaW1heCBMYXllcgogCQkgKi8KLQkJVUdJRmFjdG9yID0gKEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heExhdGVuY3kvVUdJVmFsdWUgKyAxKTsKKwkJVUdJRmFjdG9yID0gKGN1cnJfcGFja2luZm8tPnVpTWF4TGF0ZW5jeS9VR0lWYWx1ZSArIDEpOwogCiAJCWlmIChVR0lGYWN0b3IgPiBERUZBVUxUX1VHSV9GQUNUT1IpCi0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhCdWNrZXRTaXplID0KLQkJCQkoVUdJRmFjdG9yKkFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heEFsbG93ZWRSYXRlKlVHSVZhbHVlKS8xMDAwOworCQkJY3Vycl9wYWNraW5mby0+dWlNYXhCdWNrZXRTaXplID0KKwkJCQkoVUdJRmFjdG9yKmN1cnJfcGFja2luZm8tPnVpTWF4QWxsb3dlZFJhdGUqVUdJVmFsdWUpLzEwMDA7CiAKLQkJaWYgKEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heEJ1Y2tldFNpemUgPiBXSU1BWF9NQVhfTVRVKjgpCi0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhCdWNrZXRTaXplID0gV0lNQVhfTUFYX01UVSo4OworCQlpZiAoY3Vycl9wYWNraW5mby0+dWlNYXhCdWNrZXRTaXplID4gV0lNQVhfTUFYX01UVSo4KQorCQkJY3Vycl9wYWNraW5mby0+dWlNYXhCdWNrZXRTaXplID0gV0lNQVhfTUFYX01UVSo4OwogCX0KIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkxBVDogJWQsIFVHSTogJWRcbiIsIEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heExhdGVuY3ksIFVHSVZhbHVlKTsKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJ1aU1heEFsbG93ZWRSYXRlOiAweCV4LCB1MzJNYXhTdXN0YWluZWRUcmFmZmljUmF0ZTogMHgleCAsdWlNYXhCdWNrZXRTaXplOiAweCV4IiwKLQkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51aU1heEFsbG93ZWRSYXRlLAorCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJMQVQ6ICVkLCBVR0k6ICVkXG4iLCBjdXJyX3BhY2tpbmZvLT51aU1heExhdGVuY3ksCisJCQlVR0lWYWx1ZSk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJInVpTWF4QWxsb3dlZFJhdGU6IDB4JXgsIHUzMk1heFN1c3RhaW5lZFRyYWZmaWNSYXRlOiAweCV4ICx1aU1heEJ1Y2tldFNpemU6IDB4JXgiLAorCQkJY3Vycl9wYWNraW5mby0+dWlNYXhBbGxvd2VkUmF0ZSwKIAkJCW50b2hsKHBzZkxvY2FsU2V0LT51MzJNYXhTdXN0YWluZWRUcmFmZmljUmF0ZSksCi0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udWlNYXhCdWNrZXRTaXplKTsKKwkJCWN1cnJfcGFja2luZm8tPnVpTWF4QnVja2V0U2l6ZSk7CiAKIAkvKiBjb3B5IHRoZSBleHRlbmRlZCBTRiBQYXJhbWV0ZXJzIHRvIFN1cHBvcnQgTUlCUyAqLwogCUNvcHlNSUJTRXh0ZW5kZWRTRlBhcmFtZXRlcnMoQWRhcHRlciwgcHNmTG9jYWxTZXQsIHVpU2VhcmNoUnVsZUluZGV4KTsKIAogCS8qIHN0b3JlIGhlYWRlciBzdXBwcmVzc2lvbiBlbmFibGVkIGZsYWcgcGVyIFNGICovCi0JQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLmJIZWFkZXJTdXBwcmVzc2lvbkVuYWJsZWQgPQorCWN1cnJfcGFja2luZm8tPmJIZWFkZXJTdXBwcmVzc2lvbkVuYWJsZWQgPQogCQkhKHBzZkxvY2FsU2V0LT51OFJlcXVlc3R0cmFuc21pc3Npb25Qb2xpY3kgJgogCQkJTUFTS19ESVNBQkxFX0hFQURFUl9TVVBQUkVTU0lPTik7CiAKLQlrZnJlZShBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0ucHN0U0ZJbmRpY2F0aW9uKTsKLQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0ucHN0U0ZJbmRpY2F0aW9uID0gcHN0QWRkSW5kaWNhdGlvbjsKKwlrZnJlZShjdXJyX3BhY2tpbmZvLT5wc3RTRkluZGljYXRpb24pOworCWN1cnJfcGFja2luZm8tPnBzdFNGSW5kaWNhdGlvbiA9IHBzdEFkZEluZGljYXRpb247CiAKIAkvKiBSZSBTb3J0IHRoZSBTRiBsaXN0IGluIFBhY2tJbmZvIGFjY29yZGluZyB0byBUcmFmZmljIFByaW9yaXR5ICovCiAJU29ydFBhY2tJbmZvKEFkYXB0ZXIpOwpAQCAtODE1LDcgKzg3MCw4IEBACiAJICovCiAJU29ydENsYXNzaWZpZXJzKEFkYXB0ZXIpOwogCUR1bXBQaHNSdWxlcygmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0KTsKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICIlcyA8PT09PT0iLCBfX2Z1bmNfXyk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIiVzIDw9PT09PSIsIF9fZnVuY19fKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTk3LDEyMyArMTI1MywxNzkgQEAKIAogCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgbkN1ckNsYXNzaWZpZXJDbnQ7IG5JbmRleCsrKQl7CiAJCXN0cnVjdCBiY21fY29udmVyZ2VuY2VfdHlwZXMgKnBzZkNTVHlwZSA9IE5VTEw7CisJCXN0cnVjdCBiY21fcGFja2V0X2NsYXNzX3J1bGVzICpjbHNSdWxlID0gTlVMTDsKIAotCQlwc2ZDU1R5cGUgPSAgJnBzdEFkZEluZGljYXRpb24tPnNmQWN0aXZlU2V0LmNDb252ZXJnZW5jZVNMVHlwZXNbbkluZGV4XTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiBDQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZVNJPT09PT4iKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OENsYXNzaWZpZXJSdWxlUHJpb3JpdHk6IDB4JVggIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4Q2xhc3NpZmllclJ1bGVQcmlvcml0eSk7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdThJUFR5cGVPZlNlcnZpY2VMZW5ndGg6IDB4JVggIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4SVBUeXBlT2ZTZXJ2aWNlTGVuZ3RoKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OElQVHlwZU9mU2VydmljZVszXTogMHglWCAsMHglWCAsMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUFR5cGVPZlNlcnZpY2VbMF0sCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQVHlwZU9mU2VydmljZVsxXSwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4SVBUeXBlT2ZTZXJ2aWNlWzJdKTsKKwkJcHNmQ1NUeXBlID0gJnBzdEFkZEluZGljYXRpb24tPnNmQWN0aXZlU2V0LmNDb252ZXJnZW5jZVNMVHlwZXNbbkluZGV4XTsKKwkJY2xzUnVsZQk9ICZwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlOworCisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwgIiBDQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZVNJPT09PT4iKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLCAiIHU4Q2xhc3NpZmllclJ1bGVQcmlvcml0eTogMHglWCAiLAorCQkJCWNsc1J1bGUtPnU4Q2xhc3NpZmllclJ1bGVQcmlvcml0eSk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwgIiB1OElQVHlwZU9mU2VydmljZUxlbmd0aDogMHglWCAiLAorCQkJCWNsc1J1bGUtPnU4SVBUeXBlT2ZTZXJ2aWNlTGVuZ3RoKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLAorCQkJCSIgdThJUFR5cGVPZlNlcnZpY2VbM106IDB4JVggLDB4JVggLDB4JVggIiwKKwkJCQljbHNSdWxlLT51OElQVHlwZU9mU2VydmljZVswXSwKKwkJCQljbHNSdWxlLT51OElQVHlwZU9mU2VydmljZVsxXSwKKwkJCQljbHNSdWxlLT51OElQVHlwZU9mU2VydmljZVsyXSk7CiAKIAkJZm9yICh1aUxvb3BJbmRleCA9IDA7IHVpTG9vcEluZGV4IDwgMTsgdWlMb29wSW5kZXgrKykKLQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdThQcm90b2NvbDogMHglWCAiLCBwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4UHJvdG9jb2wpOworCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCQlEQkdfTFZMX0FMTCwKKwkJCQkJIiB1OFByb3RvY29sOiAweCVYICIsCisJCQkJCWNsc1J1bGUtPnU4UHJvdG9jb2wpOwogCi0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICJ1OElQTWFza2VkU291cmNlQWRkcmVzc0xlbmd0aDogMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUE1hc2tlZFNvdXJjZUFkZHJlc3NMZW5ndGgpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJREJHX0xWTF9BTEwsCisJCQkJInU4SVBNYXNrZWRTb3VyY2VBZGRyZXNzTGVuZ3RoOiAweCVYICIsCisJCQkJY2xzUnVsZS0+dThJUE1hc2tlZFNvdXJjZUFkZHJlc3NMZW5ndGgpOwogCiAJCWZvciAodWlMb29wSW5kZXggPSAwOyB1aUxvb3BJbmRleCA8IDMyOyB1aUxvb3BJbmRleCsrKQotCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgInU4SVBNYXNrZWRTb3VyY2VBZGRyZXNzWzMyXTogMHglWCAiLAotCQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4SVBNYXNrZWRTb3VyY2VBZGRyZXNzW3VpTG9vcEluZGV4XSk7CisJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJCURCR19MVkxfQUxMLAorCQkJCQkidThJUE1hc2tlZFNvdXJjZUFkZHJlc3NbMzJdOiAweCVYICIsCisJCQkJCWNsc1J1bGUtPnU4SVBNYXNrZWRTb3VyY2VBZGRyZXNzW3VpTG9vcEluZGV4XSk7CiAKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgInU4SVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGg6IDB4JTAyWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUERlc3RpbmF0aW9uQWRkcmVzc0xlbmd0aCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkidThJUERlc3RpbmF0aW9uQWRkcmVzc0xlbmd0aDogMHglMDJYICIsCisJCQkJY2xzUnVsZS0+dThJUERlc3RpbmF0aW9uQWRkcmVzc0xlbmd0aCk7CiAKIAkJZm9yICh1aUxvb3BJbmRleCA9IDA7IHVpTG9vcEluZGV4IDwgMzI7IHVpTG9vcEluZGV4KyspCi0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAiIHU4SVBEZXN0aW5hdGlvbkFkZHJlc3NbMzJdOjB4JVggIiwKLQkJCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQRGVzdGluYXRpb25BZGRyZXNzW3VpTG9vcEluZGV4XSk7CisJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJCURCR19MVkxfQUxMLAorCQkJCQkiIHU4SVBEZXN0aW5hdGlvbkFkZHJlc3NbMzJdOjB4JVggIiwKKwkJCQkJY2xzUnVsZS0+dThJUERlc3RpbmF0aW9uQWRkcmVzc1t1aUxvb3BJbmRleF0pOwogCi0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZUxlbmd0aDogMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZUxlbmd0aCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHU4UHJvdG9jb2xTb3VyY2VQb3J0UmFuZ2VMZW5ndGg6IDB4JVggIiwKKwkJCQljbHNSdWxlLT51OFByb3RvY29sU291cmNlUG9ydFJhbmdlTGVuZ3RoKTsKIAotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAiIHU4UHJvdG9jb2xTb3VyY2VQb3J0UmFuZ2VbNF06IDB4JVggLDB4JVggLDB4JVggLDB4JVggIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4UHJvdG9jb2xTb3VyY2VQb3J0UmFuZ2VbMF0sCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sU291cmNlUG9ydFJhbmdlWzFdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZVsyXSwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4UHJvdG9jb2xTb3VyY2VQb3J0UmFuZ2VbM10pOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJREJHX0xWTF9BTEwsCisJCQkJIiB1OFByb3RvY29sU291cmNlUG9ydFJhbmdlWzRdOiAweCVYICwweCVYICwweCVYICwweCVYICIsCisJCQkJY2xzUnVsZS0+dThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZVswXSwKKwkJCQljbHNSdWxlLT51OFByb3RvY29sU291cmNlUG9ydFJhbmdlWzFdLAorCQkJCWNsc1J1bGUtPnU4UHJvdG9jb2xTb3VyY2VQb3J0UmFuZ2VbMl0sCisJCQkJY2xzUnVsZS0+dThQcm90b2NvbFNvdXJjZVBvcnRSYW5nZVszXSk7CiAKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OFByb3RvY29sRGVzdFBvcnRSYW5nZUxlbmd0aDogMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbERlc3RQb3J0UmFuZ2VMZW5ndGgpOwotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAiIHU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlWzRdOiAweCVYICwweCVYICwweCVYICwweCVYICIsCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sRGVzdFBvcnRSYW5nZVswXSwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlWzFdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThQcm90b2NvbERlc3RQb3J0UmFuZ2VbMl0sCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sRGVzdFBvcnRSYW5nZVszXSk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlTGVuZ3RoOiAweCVYICIsCisJCQkJY2xzUnVsZS0+dThQcm90b2NvbERlc3RQb3J0UmFuZ2VMZW5ndGgpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJREJHX0xWTF9BTEwsCisJCQkJIiB1OFByb3RvY29sRGVzdFBvcnRSYW5nZVs0XTogMHglWCAsMHglWCAsMHglWCAsMHglWCAiLAorCQkJCWNsc1J1bGUtPnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlWzBdLAorCQkJCWNsc1J1bGUtPnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlWzFdLAorCQkJCWNsc1J1bGUtPnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlWzJdLAorCQkJCWNsc1J1bGUtPnU4UHJvdG9jb2xEZXN0UG9ydFJhbmdlWzNdKTsKIAotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAiIHU4RXRoZXJuZXREZXN0TWFjQWRkcmVzc0xlbmd0aDogMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OEV0aGVybmV0RGVzdE1hY0FkZHJlc3NbNl06IDB4JVggLDB4JVggLDB4JVggLDB4JVggLDB4JVggLDB4JVgiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzBdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzFdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzJdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzNdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzRdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzVdKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLAorCQkJCSIgdThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoOiAweCVYICIsCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLAorCQkJCSIgdThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzZdOiAweCVYICwweCVYICwweCVYICwweCVYICwweCVYICwweCVYIiwKKwkJCQljbHNSdWxlLT51OEV0aGVybmV0RGVzdE1hY0FkZHJlc3NbMF0sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzFdLAorCQkJCWNsc1J1bGUtPnU4RXRoZXJuZXREZXN0TWFjQWRkcmVzc1syXSwKKwkJCQljbHNSdWxlLT51OEV0aGVybmV0RGVzdE1hY0FkZHJlc3NbM10sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzWzRdLAorCQkJCWNsc1J1bGUtPnU4RXRoZXJuZXREZXN0TWFjQWRkcmVzc1s1XSk7CiAKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OEV0aGVybmV0U291cmNlTUFDQWRkcmVzc0xlbmd0aDogMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgInU4RXRoZXJuZXRTb3VyY2VNQUNBZGRyZXNzWzZdOiAweCVYICwweCVYICwweCVYICwweCVYICwweCVYICwweCVYIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4RXRoZXJuZXRTb3VyY2VNQUNBZGRyZXNzWzBdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbMV0sCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEV0aGVybmV0U291cmNlTUFDQWRkcmVzc1syXSwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4RXRoZXJuZXRTb3VyY2VNQUNBZGRyZXNzWzNdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbNF0sCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEV0aGVybmV0U291cmNlTUFDQWRkcmVzc1s1XSk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHU4RXRoZXJuZXRTb3VyY2VNQUNBZGRyZXNzTGVuZ3RoOiAweCVYICIsCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldERlc3RNYWNBZGRyZXNzTGVuZ3RoKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLAorCQkJCSJ1OEV0aGVybmV0U291cmNlTUFDQWRkcmVzc1s2XTogMHglWCAsMHglWCAsMHglWCAsMHglWCAsMHglWCAsMHglWCIsCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbMF0sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbMV0sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbMl0sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbM10sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbNF0sCisJCQkJY2xzUnVsZS0+dThFdGhlcm5ldFNvdXJjZU1BQ0FkZHJlc3NbNV0pOwogCi0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdThFdGhlcnR5cGVMZW5ndGg6IDB4JVggIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4RXRoZXJ0eXBlTGVuZ3RoKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OEV0aGVydHlwZVszXTogMHglWCAsMHglWCAsMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThFdGhlcnR5cGVbMF0sCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OEV0aGVydHlwZVsxXSwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4RXRoZXJ0eXBlWzJdKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1MTZVc2VyUHJpb3JpdHk6IDB4JVggIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnUxNlVzZXJQcmlvcml0eSk7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdTE2VkxBTklEOiAweCVYICIsIHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudTE2VkxBTklEKTsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OEFzc29jaWF0ZWRQSFNJOiAweCVYICIsIHBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThBc3NvY2lhdGVkUEhTSSk7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXg6MHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudTE2UGFja2V0Q2xhc3NpZmljYXRpb25SdWxlSW5kZXgpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJREJHX0xWTF9BTEwsICIgdThFdGhlcnR5cGVMZW5ndGg6IDB4JVggIiwKKwkJCQljbHNSdWxlLT51OEV0aGVydHlwZUxlbmd0aCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHU4RXRoZXJ0eXBlWzNdOiAweCVYICwweCVYICwweCVYICIsCisJCQkJY2xzUnVsZS0+dThFdGhlcnR5cGVbMF0sCisJCQkJY2xzUnVsZS0+dThFdGhlcnR5cGVbMV0sCisJCQkJY2xzUnVsZS0+dThFdGhlcnR5cGVbMl0pOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJREJHX0xWTF9BTEwsICIgdTE2VXNlclByaW9yaXR5OiAweCVYICIsCisJCQkJY2xzUnVsZS0+dTE2VXNlclByaW9yaXR5KTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLCAiIHUxNlZMQU5JRDogMHglWCAiLAorCQkJCWNsc1J1bGUtPnUxNlZMQU5JRCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwgIiB1OEFzc29jaWF0ZWRQSFNJOiAweCVYICIsCisJCQkJY2xzUnVsZS0+dThBc3NvY2lhdGVkUEhTSSk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHUxNlBhY2tldENsYXNzaWZpY2F0aW9uUnVsZUluZGV4OjB4JVggIiwKKwkJCQljbHNSdWxlLT51MTZQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGVJbmRleCk7CiAKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIiB1OFZlbmRvclNwZWNpZmljQ2xhc3NpZmllclBhcmFtTGVuZ3RoOjB4JVggIiwKLQkJCQlwc2ZDU1R5cGUtPmNDUGFja2V0Q2xhc3NpZmljYXRpb25SdWxlLnU4VmVuZG9yU3BlY2lmaWNDbGFzc2lmaWVyUGFyYW1MZW5ndGgpOwotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAiIHU4VmVuZG9yU3BlY2lmaWNDbGFzc2lmaWVyUGFyYW1bMV06MHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThWZW5kb3JTcGVjaWZpY0NsYXNzaWZpZXJQYXJhbVswXSk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHU4VmVuZG9yU3BlY2lmaWNDbGFzc2lmaWVyUGFyYW1MZW5ndGg6MHglWCAiLAorCQkJCWNsc1J1bGUtPnU4VmVuZG9yU3BlY2lmaWNDbGFzc2lmaWVyUGFyYW1MZW5ndGgpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsCisJCQkJREJHX0xWTF9BTEwsCisJCQkJIiB1OFZlbmRvclNwZWNpZmljQ2xhc3NpZmllclBhcmFtWzFdOjB4JVggIiwKKwkJCQljbHNSdWxlLT51OFZlbmRvclNwZWNpZmljQ2xhc3NpZmllclBhcmFtWzBdKTsKICNpZmRlZiBWRVJTSU9OX0Q1Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgdThJUHY2Rmxvd0xhYmxlTGVuZ3RoOiAweCVYICIsCi0JCQkJcHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OElQdjZGbG93TGFibGVMZW5ndGgpOwotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAiIHU4SVB2NkZsb3dMYWJsZVs2XTogMHglWCAsMHglWCAsMHglWCAsMHglWCAsMHglWCAsMHglWCAiLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUHY2Rmxvd0xhYmxlWzBdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUHY2Rmxvd0xhYmxlWzFdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUHY2Rmxvd0xhYmxlWzJdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUHY2Rmxvd0xhYmxlWzNdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUHY2Rmxvd0xhYmxlWzRdLAotCQkJCXBzZkNTVHlwZS0+Y0NQYWNrZXRDbGFzc2lmaWNhdGlvblJ1bGUudThJUHY2Rmxvd0xhYmxlWzVdKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLAorCQkJCURCR19MVkxfQUxMLCAiIHU4SVB2NkZsb3dMYWJsZUxlbmd0aDogMHglWCAiLAorCQkJCWNsc1J1bGUtPnU4SVB2NkZsb3dMYWJsZUxlbmd0aCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwKKwkJCQlEQkdfTFZMX0FMTCwKKwkJCQkiIHU4SVB2NkZsb3dMYWJsZVs2XTogMHglWCAsMHglWCAsMHglWCAsMHglWCAsMHglWCAsMHglWCAiLAorCQkJCWNsc1J1bGUtPnU4SVB2NkZsb3dMYWJsZVswXSwKKwkJCQljbHNSdWxlLT51OElQdjZGbG93TGFibGVbMV0sCisJCQkJY2xzUnVsZS0+dThJUHY2Rmxvd0xhYmxlWzJdLAorCQkJCWNsc1J1bGUtPnU4SVB2NkZsb3dMYWJsZVszXSwKKwkJCQljbHNSdWxlLT51OElQdjZGbG93TGFibGVbNF0sCisJCQkJY2xzUnVsZS0+dThJUHY2Rmxvd0xhYmxlWzVdKTsKICNlbmRpZgogCX0KIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICIgYlZhbGlkOiAweCVYIiwgcHN0QWRkSW5kaWNhdGlvbi0+c2ZBY3RpdmVTZXQuYlZhbGlkKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLAorCQkJIiBiVmFsaWQ6IDB4JVgiLCBwc3RBZGRJbmRpY2F0aW9uLT5zZkFjdGl2ZVNldC5iVmFsaWQpOwogfQogCi1zdGF0aWMgaW5saW5lIFVMT05HIFJlc3RvcmVTRlBhcmFtKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBVTE9ORyB1bEFkZHJTRlBhcmFtU2V0LCBQVUNIQVIgcHVjRGVzdEJ1ZmZlcikKK3N0YXRpYyBpbmxpbmUgVUxPTkcgUmVzdG9yZVNGUGFyYW0oc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCVVMT05HIHVsQWRkclNGUGFyYW1TZXQsIFBVQ0hBUiBwdWNEZXN0QnVmZmVyKQogewogCVVJTlQgIG5CeXRlc1RvUmVhZCA9IHNpemVvZihzdHJ1Y3QgYmNtX2Nvbm5lY3RfbWdyX3BhcmFtcyk7CiAKIAlpZiAodWxBZGRyU0ZQYXJhbVNldCA9PSAwIHx8IE5VTEwgPT0gcHVjRGVzdEJ1ZmZlcikgewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJHb3QgUGFyYW0gYWRkcmVzcyBhcyAwISEiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCSJHb3QgUGFyYW0gYWRkcmVzcyBhcyAwISEiKTsKIAkJcmV0dXJuIDA7CiAJfQogCXVsQWRkclNGUGFyYW1TZXQgPSBudG9obCh1bEFkZHJTRlBhcmFtU2V0KTsKIAogCS8qIFJlYWQgb3V0IHRoZSBTRiBQYXJhbSBTZXQgQXQgdGhlIGluZGljYXRlZCBMb2NhdGlvbiAqLwotCWlmIChyZG0oQWRhcHRlciwgdWxBZGRyU0ZQYXJhbVNldCwgKFBVQ0hBUilwdWNEZXN0QnVmZmVyLCBuQnl0ZXNUb1JlYWQpIDwgMCkKKwlpZiAocmRtKEFkYXB0ZXIsIHVsQWRkclNGUGFyYW1TZXQsKFBVQ0hBUilwdWNEZXN0QnVmZmVyLCBuQnl0ZXNUb1JlYWQpIDwgMCkKIAkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBVTE9ORyBTdG9yZVNGUGFyYW0oc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIFBVQ0hBUiBwdWNTcmNCdWZmZXIsIFVMT05HIHVsQWRkclNGUGFyYW1TZXQpCitzdGF0aWMgVUxPTkcgU3RvcmVTRlBhcmFtKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBQVUNIQVIgcHVjU3JjQnVmZmVyLAorCQlVTE9ORyB1bEFkZHJTRlBhcmFtU2V0KQogewogCVVJTlQgbkJ5dGVzVG9Xcml0ZSA9IHNpemVvZihzdHJ1Y3QgYmNtX2Nvbm5lY3RfbWdyX3BhcmFtcyk7CiAJaW50IHJldCA9IDA7CkBAIC0xMzIzLDEzICsxNDM1LDE1IEBACiAKIAlyZXQgPSB3cm0oQWRhcHRlciwgdWxBZGRyU0ZQYXJhbVNldCwgKHU4ICopcHVjU3JjQnVmZmVyLCBuQnl0ZXNUb1dyaXRlKTsKIAlpZiAocmV0IDwgMCkgewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICIlczolZCBXUk0gZmFpbGVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCSIlczolZCBXUk0gZmFpbGVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIDE7CiB9CiAKLVVMT05HIFN0b3JlQ21Db250cm9sUmVzcG9uc2VNZXNzYWdlKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBQVk9JRCBwdkJ1ZmZlciwgVUlOVCAqcHVCdWZmZXJMZW5ndGgpCitVTE9ORyBTdG9yZUNtQ29udHJvbFJlc3BvbnNlTWVzc2FnZShzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwKKwkJUFZPSUQgcHZCdWZmZXIsIFVJTlQgKnB1QnVmZmVyTGVuZ3RoKQogewogCXN0cnVjdCBiY21fYWRkX2luZGljYXRpb25fYWx0ICpwc3RBZGRJbmRpY2F0aW9uQWx0ID0gTlVMTDsKIAlzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uICpwc3RBZGRJbmRpY2F0aW9uID0gTlVMTDsKQEAgLTEzNjMsMTMgKzE0NzcsMTUgQEAKIAl9CiAJLyogRm9yIERTQV9SRVEsIG9ubHkgdXAgdG8gInBzZkF1dGhvcml6ZWRTZXQiIHBhcmFtZXRlciBzaG91bGQgYmUgYWNjZXNzZWQgYnkgZHJpdmVyISAqLwogCi0JcHN0QWRkSW5kaWNhdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBiY21fYWRkX2luZGljYXRpb24pLCBHRlBfS0VSTkVMKTsKKwlwc3RBZGRJbmRpY2F0aW9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJjbV9hZGRfaW5kaWNhdGlvbiksCisJCQlHRlBfS0VSTkVMKTsKIAlpZiAocHN0QWRkSW5kaWNhdGlvbiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCS8qIEFVVEhPUklaRUQgU0VUICovCiAJcHN0QWRkSW5kaWNhdGlvbi0+cHNmQXV0aG9yaXplZFNldCA9IChzdHJ1Y3QgYmNtX2Nvbm5lY3RfbWdyX3BhcmFtcyAqKQotCQkJR2V0TmV4dFRhcmdldEJ1ZmZlckxvY2F0aW9uKEFkYXB0ZXIsIHBzdEFkZEluZGljYXRpb25BbHQtPnUxNlRJRCk7CisJCQlHZXROZXh0VGFyZ2V0QnVmZmVyTG9jYXRpb24oQWRhcHRlciwKKwkJCQkJcHN0QWRkSW5kaWNhdGlvbkFsdC0+dTE2VElEKTsKIAlpZiAoIXBzdEFkZEluZGljYXRpb24tPnBzZkF1dGhvcml6ZWRTZXQpIHsKIAkJa2ZyZWUocHN0QWRkSW5kaWNhdGlvbik7CiAJCXJldHVybiAwOwpAQCAtMTM4Miw3ICsxNDk4LDkgQEAKIAl9CiAKIAkvKiB0aGlzIGNhbid0IHBvc3NpYmx5IGJlIHJpZ2h0ICovCi0JcHN0QWRkSW5kaWNhdGlvbi0+cHNmQXV0aG9yaXplZFNldCA9IChzdHJ1Y3QgYmNtX2Nvbm5lY3RfbWdyX3BhcmFtcyAqKW50b2hsKChVTE9ORylwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBdXRob3JpemVkU2V0KTsKKwlwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBdXRob3JpemVkU2V0ID0KKwkJKHN0cnVjdCBiY21fY29ubmVjdF9tZ3JfcGFyYW1zICopIG50b2hsKAorCQkJCShVTE9ORylwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBdXRob3JpemVkU2V0KTsKIAogCWlmIChwc3RBZGRJbmRpY2F0aW9uQWx0LT51OFR5cGUgPT0gRFNBX1JFUSkgewogCQlzdHJ1Y3QgYmNtX2FkZF9yZXF1ZXN0IEFkZFJlcXVlc3Q7CkBAIC0xNDExLDMxICsxNTI5LDM5IEBACiAKIAkvKiBBRE1JVFRFRCBTRVQgKi8KIAlwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCA9IChzdHJ1Y3QgYmNtX2Nvbm5lY3RfbWdyX3BhcmFtcyAqKQotCQlHZXROZXh0VGFyZ2V0QnVmZmVyTG9jYXRpb24oQWRhcHRlciwgcHN0QWRkSW5kaWNhdGlvbkFsdC0+dTE2VElEKTsKKwkJR2V0TmV4dFRhcmdldEJ1ZmZlckxvY2F0aW9uKEFkYXB0ZXIsCisJCQkJcHN0QWRkSW5kaWNhdGlvbkFsdC0+dTE2VElEKTsKIAlpZiAoIXBzdEFkZEluZGljYXRpb24tPnBzZkFkbWl0dGVkU2V0KSB7CiAJCWtmcmVlKHBzdEFkZEluZGljYXRpb24pOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKFN0b3JlU0ZQYXJhbShBZGFwdGVyLCAoUFVDSEFSKSZwc3RBZGRJbmRpY2F0aW9uQWx0LT5zZkFkbWl0dGVkU2V0LCAoVUxPTkcpcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWRtaXR0ZWRTZXQpICE9IDEpIHsKKwlpZiAoU3RvcmVTRlBhcmFtKEFkYXB0ZXIsIChQVUNIQVIpJnBzdEFkZEluZGljYXRpb25BbHQtPnNmQWRtaXR0ZWRTZXQsCisJCQkJKFVMT05HKXBzdEFkZEluZGljYXRpb24tPnBzZkFkbWl0dGVkU2V0KSAhPSAxKSB7CiAJCWtmcmVlKHBzdEFkZEluZGljYXRpb24pOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCA9IChzdHJ1Y3QgYmNtX2Nvbm5lY3RfbWdyX3BhcmFtcyAqKW50b2hsKChVTE9ORylwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCk7CisJcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWRtaXR0ZWRTZXQgPQorCQkoc3RydWN0IGJjbV9jb25uZWN0X21ncl9wYXJhbXMgKikgbnRvaGwoCisJCQkJKFVMT05HKSBwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCk7CiAKIAkvKiBBQ1RJVkUgU0VUICovCiAJcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWN0aXZlU2V0ID0gKHN0cnVjdCBiY21fY29ubmVjdF9tZ3JfcGFyYW1zICopCi0JCUdldE5leHRUYXJnZXRCdWZmZXJMb2NhdGlvbihBZGFwdGVyLCBwc3RBZGRJbmRpY2F0aW9uQWx0LT51MTZUSUQpOworCQlHZXROZXh0VGFyZ2V0QnVmZmVyTG9jYXRpb24oQWRhcHRlciwKKwkJCQlwc3RBZGRJbmRpY2F0aW9uQWx0LT51MTZUSUQpOwogCWlmICghcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWN0aXZlU2V0KSB7CiAJCWtmcmVlKHBzdEFkZEluZGljYXRpb24pOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKFN0b3JlU0ZQYXJhbShBZGFwdGVyLCAoUFVDSEFSKSZwc3RBZGRJbmRpY2F0aW9uQWx0LT5zZkFjdGl2ZVNldCwgKFVMT05HKXBzdEFkZEluZGljYXRpb24tPnBzZkFjdGl2ZVNldCkgIT0gMSkgeworCWlmIChTdG9yZVNGUGFyYW0oQWRhcHRlciwgKFBVQ0hBUikmcHN0QWRkSW5kaWNhdGlvbkFsdC0+c2ZBY3RpdmVTZXQsCisJCQkJKFVMT05HKXBzdEFkZEluZGljYXRpb24tPnBzZkFjdGl2ZVNldCkgIT0gMSkgewogCQlrZnJlZShwc3RBZGRJbmRpY2F0aW9uKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWN0aXZlU2V0ID0gKHN0cnVjdCBiY21fY29ubmVjdF9tZ3JfcGFyYW1zICopbnRvaGwoKFVMT05HKXBzdEFkZEluZGljYXRpb24tPnBzZkFjdGl2ZVNldCk7CisJcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWN0aXZlU2V0ID0KKwkJKHN0cnVjdCBiY21fY29ubmVjdF9tZ3JfcGFyYW1zICopIG50b2hsKAorCQkJCShVTE9ORylwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBY3RpdmVTZXQpOwogCiAJKCpwdUJ1ZmZlckxlbmd0aCkgPSBzaXplb2Yoc3RydWN0IGJjbV9hZGRfaW5kaWNhdGlvbik7CiAJKihzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uICopcHZCdWZmZXIgPSAqcHN0QWRkSW5kaWNhdGlvbjsKQEAgLTE0NDQsNDAgKzE1NzAsNjMgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uX2FsdAotKlJlc3RvcmVDbUNvbnRyb2xSZXNwb25zZU1lc3NhZ2UocmVnaXN0ZXIgc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIHJlZ2lzdGVyIFBWT0lEIHB2QnVmZmVyKQorKlJlc3RvcmVDbUNvbnRyb2xSZXNwb25zZU1lc3NhZ2UocmVnaXN0ZXIgc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCXJlZ2lzdGVyIFBWT0lEIHB2QnVmZmVyKQogewogCVVMT05HIHVsU3RhdHVzID0gMDsKIAlzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uICpwc3RBZGRJbmRpY2F0aW9uID0gTlVMTDsKIAlzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uX2FsdCAqcHN0QWRkSW5kaWNhdGlvbkRlc3QgPSBOVUxMOwogCiAJcHN0QWRkSW5kaWNhdGlvbiA9IHB2QnVmZmVyOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIj09PT09PiIpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSI9PT09PT4iKTsKIAlpZiAoKHBzdEFkZEluZGljYXRpb24tPnU4VHlwZSA9PSBEU0RfUkVRKSB8fAogCQkocHN0QWRkSW5kaWNhdGlvbi0+dThUeXBlID09IERTRF9SU1ApIHx8CiAJCShwc3RBZGRJbmRpY2F0aW9uLT51OFR5cGUgPT0gRFNEX0FDSykpCiAJCXJldHVybiBwdkJ1ZmZlcjsKIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkluc2lkZSBSZXN0b3JlQ21Db250cm9sUmVzcG9uc2VNZXNzYWdlICIpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJJbnNpZGUgUmVzdG9yZUNtQ29udHJvbFJlc3BvbnNlTWVzc2FnZSAiKTsKIAkvKgogCSAqIE5lZWQgdG8gQWxsb2NhdGUgbWVtb3J5IHRvIGNvbnRhaW4gdGhlIFNVUEVSIExhcmdlIHN0cnVjdHVyZXMKIAkgKiBPdXIgZHJpdmVyIGNhbid0IGNyZWF0ZSB0aGVzZSBzdHJ1Y3R1cmVzIG9uIFN0YWNrIDooCiAJICovCi0JcHN0QWRkSW5kaWNhdGlvbkRlc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uX2FsdCksIEdGUF9LRVJORUwpOworCXBzdEFkZEluZGljYXRpb25EZXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJjbV9hZGRfaW5kaWNhdGlvbl9hbHQpLAorCQkJR0ZQX0tFUk5FTCk7CiAKIAlpZiAocHN0QWRkSW5kaWNhdGlvbkRlc3QpIHsKLQkJbWVtc2V0KHBzdEFkZEluZGljYXRpb25EZXN0LCAwLCBzaXplb2Yoc3RydWN0IGJjbV9hZGRfaW5kaWNhdGlvbl9hbHQpKTsKKwkJbWVtc2V0KHBzdEFkZEluZGljYXRpb25EZXN0LCAwLAorCQkJCXNpemVvZihzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uX2FsdCkpOwogCX0gZWxzZSB7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFNGIEFkZCBJbmRpY2F0aW9uIFN0cnVjdHVyZSAiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csCisJCQkJREJHX0xWTF9BTEwsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFNGIEFkZCBJbmRpY2F0aW9uIFN0cnVjdHVyZSAiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkFkZEluZGljYXRpb24tdThUeXBlIDogMHglWCIsIHBzdEFkZEluZGljYXRpb24tPnU4VHlwZSk7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiQWRkSW5kaWNhdGlvbi11OERpcmVjdGlvbiA6IDB4JVgiLCBwc3RBZGRJbmRpY2F0aW9uLT5lQ29ubmVjdGlvbkRpcik7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiQWRkSW5kaWNhdGlvbi11OFRJRCA6IDB4JVgiLCBudG9ocyhwc3RBZGRJbmRpY2F0aW9uLT51MTZUSUQpKTsKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJBZGRJbmRpY2F0aW9uLXU4Q0lEIDogMHglWCIsIG50b2hzKHBzdEFkZEluZGljYXRpb24tPnUxNkNJRCkpOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkFkZEluZGljYXRpb24tdTE2VkNJRCA6IDB4JVgiLCBudG9ocyhwc3RBZGRJbmRpY2F0aW9uLT51MTZWQ0lEKSk7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiQWRkSW5kaWNhdGlvbi1hdXRvcml6ZWQgc2V0IGxvYyA6ICVwIiwgcHN0QWRkSW5kaWNhdGlvbi0+cHNmQXV0aG9yaXplZFNldCk7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiQWRkSW5kaWNhdGlvbi1hZG1pdHRlZCBzZXQgbG9jIDogJXAiLCBwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCk7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiQWRkSW5kaWNhdGlvbi1BY3RpdmUgc2V0IGxvYyA6ICVwIiwgcHN0QWRkSW5kaWNhdGlvbi0+cHNmQWN0aXZlU2V0KTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiQWRkSW5kaWNhdGlvbi11OFR5cGUgOiAweCVYIiwKKwkJCXBzdEFkZEluZGljYXRpb24tPnU4VHlwZSk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIkFkZEluZGljYXRpb24tdThEaXJlY3Rpb24gOiAweCVYIiwKKwkJCXBzdEFkZEluZGljYXRpb24tPmVDb25uZWN0aW9uRGlyKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiQWRkSW5kaWNhdGlvbi11OFRJRCA6IDB4JVgiLAorCQkJbnRvaHMocHN0QWRkSW5kaWNhdGlvbi0+dTE2VElEKSk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIkFkZEluZGljYXRpb24tdThDSUQgOiAweCVYIiwKKwkJCW50b2hzKHBzdEFkZEluZGljYXRpb24tPnUxNkNJRCkpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJBZGRJbmRpY2F0aW9uLXUxNlZDSUQgOiAweCVYIiwKKwkJCW50b2hzKHBzdEFkZEluZGljYXRpb24tPnUxNlZDSUQpKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiQWRkSW5kaWNhdGlvbi1hdXRvcml6ZWQgc2V0IGxvYyA6ICVwIiwKKwkJCXBzdEFkZEluZGljYXRpb24tPnBzZkF1dGhvcml6ZWRTZXQpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJBZGRJbmRpY2F0aW9uLWFkbWl0dGVkIHNldCBsb2MgOiAlcCIsCisJCQlwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIkFkZEluZGljYXRpb24tQWN0aXZlIHNldCBsb2MgOiAlcCIsCisJCQlwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBY3RpdmVTZXQpOwogCiAJcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnU4VHlwZSA9IHBzdEFkZEluZGljYXRpb24tPnU4VHlwZTsKIAlwc3RBZGRJbmRpY2F0aW9uRGVzdC0+dThEaXJlY3Rpb24gPSBwc3RBZGRJbmRpY2F0aW9uLT5lQ29ubmVjdGlvbkRpcjsKQEAgLTE0ODYsMzkgKzE2MzUsNjAgQEAKIAlwc3RBZGRJbmRpY2F0aW9uRGVzdC0+dTE2VkNJRCA9IHBzdEFkZEluZGljYXRpb24tPnUxNlZDSUQ7CiAJcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnU4Q0MgPSBwc3RBZGRJbmRpY2F0aW9uLT51OENDOwogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAgIlJlc3RvcmluZyBBY3RpdmUgU2V0ICIpOwotCXVsU3RhdHVzID0gUmVzdG9yZVNGUGFyYW0oQWRhcHRlciwgKFVMT05HKXBzdEFkZEluZGljYXRpb24tPnBzZkFjdGl2ZVNldCwgKFBVQ0hBUikmcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWN0aXZlU2V0KTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiUmVzdG9yaW5nIEFjdGl2ZSBTZXQgIik7CisJdWxTdGF0dXMgPSBSZXN0b3JlU0ZQYXJhbShBZGFwdGVyLAorCQkJKFVMT05HKXBzdEFkZEluZGljYXRpb24tPnBzZkFjdGl2ZVNldCwKKwkJCShQVUNIQVIpJnBzdEFkZEluZGljYXRpb25EZXN0LT5zZkFjdGl2ZVNldCk7CiAJaWYgKHVsU3RhdHVzICE9IDEpCiAJCWdvdG8gZmFpbGVkX3Jlc3RvcmVfc2ZfcGFyYW07CiAKIAlpZiAocHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWN0aXZlU2V0LnU4VG90YWxDbGFzc2lmaWVycyA+IE1BWF9DTEFTU0lGSUVSU19JTl9TRikKLQkJcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWN0aXZlU2V0LnU4VG90YWxDbGFzc2lmaWVycyA9IE1BWF9DTEFTU0lGSUVSU19JTl9TRjsKKwkJcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWN0aXZlU2V0LnU4VG90YWxDbGFzc2lmaWVycyA9CisJCQlNQVhfQ0xBU1NJRklFUlNfSU5fU0Y7CiAKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICAiUmVzdG9yaW5nIEFkbWl0dGVkIFNldCAiKTsKLQl1bFN0YXR1cyA9IFJlc3RvcmVTRlBhcmFtKEFkYXB0ZXIsIChVTE9ORylwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCwgKFBVQ0hBUikmcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWRtaXR0ZWRTZXQpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJSZXN0b3JpbmcgQWRtaXR0ZWQgU2V0ICIpOworCXVsU3RhdHVzID0gUmVzdG9yZVNGUGFyYW0oQWRhcHRlciwKKwkJCShVTE9ORylwc3RBZGRJbmRpY2F0aW9uLT5wc2ZBZG1pdHRlZFNldCwKKwkJCShQVUNIQVIpJnBzdEFkZEluZGljYXRpb25EZXN0LT5zZkFkbWl0dGVkU2V0KTsKIAlpZiAodWxTdGF0dXMgIT0gMSkKIAkJZ290byBmYWlsZWRfcmVzdG9yZV9zZl9wYXJhbTsKIAogCWlmIChwc3RBZGRJbmRpY2F0aW9uRGVzdC0+c2ZBZG1pdHRlZFNldC51OFRvdGFsQ2xhc3NpZmllcnMgPiBNQVhfQ0xBU1NJRklFUlNfSU5fU0YpCi0JCXBzdEFkZEluZGljYXRpb25EZXN0LT5zZkFkbWl0dGVkU2V0LnU4VG90YWxDbGFzc2lmaWVycyA9IE1BWF9DTEFTU0lGSUVSU19JTl9TRjsKKwkJcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWRtaXR0ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzID0KKwkJCU1BWF9DTEFTU0lGSUVSU19JTl9TRjsKIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgICJSZXN0b3JpbmcgQXV0aG9yaXplZCBTZXQgIik7Ci0JdWxTdGF0dXMgPSBSZXN0b3JlU0ZQYXJhbShBZGFwdGVyLCAoVUxPTkcpcHN0QWRkSW5kaWNhdGlvbi0+cHNmQXV0aG9yaXplZFNldCwgKFBVQ0hBUikmcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQXV0aG9yaXplZFNldCk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIlJlc3RvcmluZyBBdXRob3JpemVkIFNldCAiKTsKKwl1bFN0YXR1cyA9IFJlc3RvcmVTRlBhcmFtKEFkYXB0ZXIsCisJCQkoVUxPTkcpcHN0QWRkSW5kaWNhdGlvbi0+cHNmQXV0aG9yaXplZFNldCwKKwkJCShQVUNIQVIpJnBzdEFkZEluZGljYXRpb25EZXN0LT5zZkF1dGhvcml6ZWRTZXQpOwogCWlmICh1bFN0YXR1cyAhPSAxKQogCQlnb3RvIGZhaWxlZF9yZXN0b3JlX3NmX3BhcmFtOwogCiAJaWYgKHBzdEFkZEluZGljYXRpb25EZXN0LT5zZkF1dGhvcml6ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzID4gTUFYX0NMQVNTSUZJRVJTX0lOX1NGKQotCQlwc3RBZGRJbmRpY2F0aW9uRGVzdC0+c2ZBdXRob3JpemVkU2V0LnU4VG90YWxDbGFzc2lmaWVycyA9IE1BWF9DTEFTU0lGSUVSU19JTl9TRjsKKwkJcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQXV0aG9yaXplZFNldC51OFRvdGFsQ2xhc3NpZmllcnMgPQorCQkJTUFYX0NMQVNTSUZJRVJTX0lOX1NGOwogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiRHVtcGluZyB0aGUgd2hvbGUgcmF3IHBhY2tldCIpOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIiBwc3RBZGRJbmRpY2F0aW9uRGVzdC0+c2ZBY3RpdmVTZXQgc2l6ZSAgJXp4ICVwIiwgc2l6ZW9mKCpwc3RBZGRJbmRpY2F0aW9uRGVzdCksIHBzdEFkZEluZGljYXRpb25EZXN0KTsKLQkvKiBCQ01fREVCVUdfUFJJTlRfQlVGRkVSKEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICh1bnNpZ25lZCBjaGFyICopcHN0QWRkSW5kaWNhdGlvbkRlc3QsIHNpemVvZigqcHN0QWRkSW5kaWNhdGlvbkRlc3QpKTsgKi8KLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiRHVtcGluZyB0aGUgd2hvbGUgcmF3IHBhY2tldCIpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSIgcHN0QWRkSW5kaWNhdGlvbkRlc3QtPnNmQWN0aXZlU2V0IHNpemUgICV6eCAlcCIsCisJCQlzaXplb2YoKnBzdEFkZEluZGljYXRpb25EZXN0KSwgcHN0QWRkSW5kaWNhdGlvbkRlc3QpOworCS8qIEJDTV9ERUJVR19QUklOVF9CVUZGRVIoQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLAorCSAqCQlEQkdfTFZMX0FMTCwgKHVuc2lnbmVkIGNoYXIgKilwc3RBZGRJbmRpY2F0aW9uRGVzdCwKKwkgKgkJc2l6ZW9mKCpwc3RBZGRJbmRpY2F0aW9uRGVzdCkpOworCSAqLworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKIAlyZXR1cm4gcHN0QWRkSW5kaWNhdGlvbkRlc3Q7CiBmYWlsZWRfcmVzdG9yZV9zZl9wYXJhbToKIAlrZnJlZShwc3RBZGRJbmRpY2F0aW9uRGVzdCk7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiPD09PT09Iik7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJIjw9PT09PSIpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNTMwLDMxICsxNzAwLDQ0IEBACiAJaW50IFN0YXR1czsKIAogCWlmICghQWRhcHRlcikgewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJBZGFwdGVyIHdhcyBOVUxMISEhIik7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkiQWRhcHRlciB3YXMgTlVMTCEhISIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoQWRhcHRlci0+YXN0VGFyZ2V0RHN4QnVmZmVyWzBdLnVsVGFyZ2V0RHN4QnVmZmVyKQogCQlyZXR1cm4gMTsKIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlNpemUgb2YgRWFjaCBEU1ggQnVmZmVyKEFsc28gc2l6ZSBvZiBjb25uZWN0aW9uIG1hbmFnZXIgcGFyYW1ldGVycyk6ICV6eCAiLCBzaXplb2Yoc3RydWN0IGJjbV9jb25uZWN0X21ncl9wYXJhbXMpKTsKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJSZWFkaW5nIERTWCBidWZmZXIgRnJvbSBUYXJnZXQgbG9jYXRpb24gJXggIiwgRFNYX01FU1NBR0VfRVhDSEFOR0VfQlVGRkVSKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiU2l6ZSBvZiBFYWNoIERTWCBCdWZmZXIoQWxzbyBzaXplIG9mIGNvbm5lY3Rpb24gbWFuYWdlciBwYXJhbWV0ZXJzKTogJXp4ICIsCisJCQlzaXplb2Yoc3RydWN0IGJjbV9jb25uZWN0X21ncl9wYXJhbXMpKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiUmVhZGluZyBEU1ggYnVmZmVyIEZyb20gVGFyZ2V0IGxvY2F0aW9uICV4ICIsCisJCQlEU1hfTUVTU0FHRV9FWENIQU5HRV9CVUZGRVIpOwogCi0JU3RhdHVzID0gcmRtYWx0KEFkYXB0ZXIsIERTWF9NRVNTQUdFX0VYQ0hBTkdFX0JVRkZFUiwgKFBVSU5UKSZ1bFRhcmdldERzeEJ1ZmZlcnNCYXNlLCBzaXplb2YoVUlOVCkpOworCVN0YXR1cyA9IHJkbWFsdChBZGFwdGVyLCBEU1hfTUVTU0FHRV9FWENIQU5HRV9CVUZGRVIsCisJCQkoUFVJTlQpJnVsVGFyZ2V0RHN4QnVmZmVyc0Jhc2UsIHNpemVvZihVSU5UKSk7CiAJaWYgKFN0YXR1cyA8IDApIHsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAiUkRNIGZhaWxlZCEhIik7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkiUkRNIGZhaWxlZCEhIik7CiAJCXJldHVybiAwOwogCX0KIAotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkJhc2UgQWRkcmVzcyBPZiBEU1ggIFRhcmdldCBCdWZmZXIgOiAweCVseCIsIHVsVGFyZ2V0RHN4QnVmZmVyc0Jhc2UpOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgICJUZ3QgQnVmZmVyIGlzIE5vdyAlbHggOiIsIHVsVGFyZ2V0RHN4QnVmZmVyc0Jhc2UpOwotCXVsQ250VGFyZ2V0QnVmZmVycyA9IERTWF9NRVNTQUdFX0VYQ0hBTkdFX0JVRkZFUl9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBiY21fY29ubmVjdF9tZ3JfcGFyYW1zKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiQmFzZSBBZGRyZXNzIE9mIERTWCAgVGFyZ2V0IEJ1ZmZlciA6IDB4JWx4IiwKKwkJCXVsVGFyZ2V0RHN4QnVmZmVyc0Jhc2UpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJUZ3QgQnVmZmVyIGlzIE5vdyAlbHggOiIsIHVsVGFyZ2V0RHN4QnVmZmVyc0Jhc2UpOworCXVsQ250VGFyZ2V0QnVmZmVycyA9IERTWF9NRVNTQUdFX0VYQ0hBTkdFX0JVRkZFUl9TSVpFIC8KKwkJc2l6ZW9mKHN0cnVjdCBiY21fY29ubmVjdF9tZ3JfcGFyYW1zKTsKIAogCUFkYXB0ZXItPnVsVG90YWxUYXJnZXRCdWZmZXJzQXZhaWxhYmxlID0KIAkJdWxDbnRUYXJnZXRCdWZmZXJzID4gTUFYX1RBUkdFVF9EU1hfQlVGRkVSUyA/CiAJCU1BWF9UQVJHRVRfRFNYX0JVRkZFUlMgOiB1bENudFRhcmdldEJ1ZmZlcnM7CiAKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICIgVG90YWwgVGFyZ2V0IERTWCBCdWZmZXIgc2V0dXAgJWx4ICIsIEFkYXB0ZXItPnVsVG90YWxUYXJnZXRCdWZmZXJzQXZhaWxhYmxlKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsCisJCQkiIFRvdGFsIFRhcmdldCBEU1ggQnVmZmVyIHNldHVwICVseCAiLAorCQkJQWRhcHRlci0+dWxUb3RhbFRhcmdldEJ1ZmZlcnNBdmFpbGFibGUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFkYXB0ZXItPnVsVG90YWxUYXJnZXRCdWZmZXJzQXZhaWxhYmxlOyBpKyspIHsKIAkJQWRhcHRlci0+YXN0VGFyZ2V0RHN4QnVmZmVyW2ldLnVsVGFyZ2V0RHN4QnVmZmVyID0gdWxUYXJnZXREc3hCdWZmZXJzQmFzZTsKQEAgLTE1NjksMTIgKzE3NTIsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIFVMT05HIEdldE5leHRUYXJnZXRCdWZmZXJMb2NhdGlvbihzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwgQl9VSU5UMTYgdGlkKQorc3RhdGljIFVMT05HIEdldE5leHRUYXJnZXRCdWZmZXJMb2NhdGlvbihzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwKKwkJQl9VSU5UMTYgdGlkKQogewogCVVMT05HIGRzeF9idWY7CiAJVUxPTkcgaWR4LCBtYXhfdHJ5OwogCi0JaWYgKChBZGFwdGVyLT51bFRvdGFsVGFyZ2V0QnVmZmVyc0F2YWlsYWJsZSA9PSAwKSB8fCAoQWRhcHRlci0+dWxGcmVlVGFyZ2V0QnVmZmVyQ250ID09IDApKSB7CisJaWYgKChBZGFwdGVyLT51bFRvdGFsVGFyZ2V0QnVmZmVyc0F2YWlsYWJsZSA9PSAwKQorCQkJfHwgKEFkYXB0ZXItPnVsRnJlZVRhcmdldEJ1ZmZlckNudCA9PSAwKSkgewogCQlDbGVhclRhcmdldERTWEJ1ZmZlcihBZGFwdGVyLCB0aWQsIGZhbHNlKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTU4Nyw3ICsxNzcyLDkgQEAKIAl9CiAKIAlpZiAobWF4X3RyeSA9PSAwKSB7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsICJcbiBHZXROZXh0VGFyZ2V0QnVmZmVyTG9jYXRpb24gOiBFcnJvciBObyBGcmVlIFRhcmdldCBEU1ggQnVmZmVycyBGcmVlQ250IDogJWx4ICIsIEFkYXB0ZXItPnVsRnJlZVRhcmdldEJ1ZmZlckNudCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCisJCQkJIlxuIEdldE5leHRUYXJnZXRCdWZmZXJMb2NhdGlvbiA6IEVycm9yIE5vIEZyZWUgVGFyZ2V0IERTWCBCdWZmZXJzIEZyZWVDbnQgOiAlbHggIiwKKwkJCQlBZGFwdGVyLT51bEZyZWVUYXJnZXRCdWZmZXJDbnQpOwogCQlDbGVhclRhcmdldERTWEJ1ZmZlcihBZGFwdGVyLCB0aWQsIGZhbHNlKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTU5OCw3ICsxNzg1LDkgQEAKIAlBZGFwdGVyLT51bEZyZWVUYXJnZXRCdWZmZXJDbnQtLTsKIAlpZHggPSAoaWR4KzEpJUFkYXB0ZXItPnVsVG90YWxUYXJnZXRCdWZmZXJzQXZhaWxhYmxlOwogCUFkYXB0ZXItPnVsQ3VycmVudFRhcmdldEJ1ZmZlciA9IGlkeDsKLQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfUFJJTlRLLCAwLCAwLCAiR2V0TmV4dFRhcmdldEJ1ZmZlckxvY2F0aW9uIDpSZXR1cm5pbmcgYWRkcmVzcyAlbHggdGlkICVkXG4iLCBkc3hfYnVmLCB0aWQpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCisJCQkiR2V0TmV4dFRhcmdldEJ1ZmZlckxvY2F0aW9uIDpSZXR1cm5pbmcgYWRkcmVzcyAlbHggdGlkICVkXG4iLAorCQkJZHN4X2J1ZiwgdGlkKTsKIAogCXJldHVybiBkc3hfYnVmOwogfQpAQCAtMTYwOSw3ICsxNzk4LDggQEAKIAkgKiBOZWVkIHRvIEFsbG9jYXRlIG1lbW9yeSB0byBjb250YWluIHRoZSBTVVBFUiBMYXJnZSBzdHJ1Y3R1cmVzCiAJICogT3VyIGRyaXZlciBjYW4ndCBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyBvbiBTdGFjawogCSAqLwotCUFkYXB0ZXItPmNhRHN4UmVxUmVzcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBiY21fYWRkX2luZGljYXRpb25fYWx0KStMRUFERVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJQWRhcHRlci0+Y2FEc3hSZXFSZXNwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJjbV9hZGRfaW5kaWNhdGlvbl9hbHQpCisJCQkrIExFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIUFkYXB0ZXItPmNhRHN4UmVxUmVzcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE4NjcsMjkgKzIwNTcsMzcgQEAKIAlyZXR1cm4gVFJVRTsKIH0KIAotaW50IGdldF9kc3hfc2ZfZGF0YV90b19hcHBsaWNhdGlvbihzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwgVUlOVCB1aVNGSWQsIHZvaWQgX191c2VyICp1c2VyX2J1ZmZlcikKK2ludCBnZXRfZHN4X3NmX2RhdGFfdG9fYXBwbGljYXRpb24oc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCVVJTlQgdWlTRklkLCB2b2lkIF9fdXNlciAqdXNlcl9idWZmZXIpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IGJjbV9wYWNrZXRfaW5mbyAqcHNTZkluZm8gPSBOVUxMOwogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAic3RhdHVzID0lZCIsIHN0YXR1cyk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJInN0YXR1cyA9JWQiLCBzdGF0dXMpOwogCXN0YXR1cyA9IFNlYXJjaFNmaWQoQWRhcHRlciwgdWlTRklkKTsKIAlpZiAoc3RhdHVzID49IE5PX09GX1FVRVVFUykgewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJTRklEICVkIG5vdCBwcmVzZW50IGluIHF1ZXVlICEhISIsIHVpU0ZJZCk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkiU0ZJRCAlZCBub3QgcHJlc2VudCBpbiBxdWV1ZSAhISEiLCB1aVNGSWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLCAic3RhdHVzID0lZCIsIHN0YXR1cyk7CisJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJInN0YXR1cyA9JWQiLCBzdGF0dXMpOwogCXBzU2ZJbmZvID0gJkFkYXB0ZXItPlBhY2tJbmZvW3N0YXR1c107Ci0JaWYgKHBzU2ZJbmZvLT5wc3RTRkluZGljYXRpb24gJiYgY29weV90b191c2VyKHVzZXJfYnVmZmVyLAotCQkJCQkJCXBzU2ZJbmZvLT5wc3RTRkluZGljYXRpb24sIHNpemVvZihzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uX2FsdCkpKSB7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsICJjb3B5IHRvIHVzZXIgZmFpbGVkIFNGSUQgJWQsIHByZXNlbnQgaW4gcXVldWUgISEhIiwgdWlTRklkKTsKKwlpZiAocHNTZkluZm8tPnBzdFNGSW5kaWNhdGlvbgorCQkJJiYgY29weV90b191c2VyKHVzZXJfYnVmZmVyLCBwc1NmSW5mby0+cHN0U0ZJbmRpY2F0aW9uLAorCQkJCXNpemVvZihzdHJ1Y3QgYmNtX2FkZF9pbmRpY2F0aW9uX2FsdCkpKSB7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9QUklOVEssIDAsIDAsCisJCQkJImNvcHkgdG8gdXNlciBmYWlsZWQgU0ZJRCAlZCwgcHJlc2VudCBpbiBxdWV1ZSAhISEiLAorCQkJCXVpU0ZJZCk7CiAJCXN0YXR1cyA9IC1FRkFVTFQ7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIAotVk9JRCBPdmVycmlkZVNlcnZpY2VGbG93UGFyYW1zKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBQVUlOVCBwdWlCdWZmZXIpCitWT0lEIE92ZXJyaWRlU2VydmljZUZsb3dQYXJhbXMoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCVBVSU5UIHB1aUJ1ZmZlcikKIHsKIAlCX1VJTlQzMiB1MzJOdW1vZlNGc2luTXNnID0gbnRvaGwoKihwdWlCdWZmZXIgKyAxKSk7CiAJc3RydWN0IGJjbV9zdGltX3NmaG9zdG5vdGlmeSAqcEhvc3RJbmZvID0gTlVMTDsKQEAgLTE4OTcsNyArMjA5NSw4IEBACiAJVUxPTkcgdWxTRklEID0gMDsKIAogCXB1aUJ1ZmZlciArPSAyOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgInUzMk51bW9mU0ZzaW5Nc2c6IDB4JXhcbiIsIHUzMk51bW9mU0ZzaW5Nc2cpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCSJ1MzJOdW1vZlNGc2luTXNnOiAweCV4XG4iLCB1MzJOdW1vZlNGc2luTXNnKTsKIAogCXdoaWxlICh1MzJOdW1vZlNGc2luTXNnICE9IDAgJiYgdTMyTnVtb2ZTRnNpbk1zZyA8IE5PX09GX1FVRVVFUykgewogCQl1MzJOdW1vZlNGc2luTXNnLS07CkBAIC0xOTA2LDMxICsyMTA1LDE0OSBAQAogCiAJCXVsU0ZJRCA9IG50b2hsKHBIb3N0SW5mby0+U0ZJRCk7CiAJCXVpU2VhcmNoUnVsZUluZGV4ID0gU2VhcmNoU2ZpZChBZGFwdGVyLCB1bFNGSUQpOwotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJTRklEOiAweCVseFxuIiwgdWxTRklEKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csIERCR19MVkxfQUxMLAorCQkJCSJTRklEOiAweCVseFxuIiwgdWxTRklEKTsKIAotCQlpZiAodWlTZWFyY2hSdWxlSW5kZXggPj0gTk9fT0ZfUVVFVUVTIHx8IHVpU2VhcmNoUnVsZUluZGV4ID09IEhpUHJpb3JpdHkpIHsKLQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIlRoZSBTRklEIDwlbHg+IGRvZXNuJ3QgZXhpc3QgaW4gaG9zdCBlbnRyeSBvciBpcyBJbnZhbGlkXG4iLCB1bFNGSUQpOworCQlpZiAodWlTZWFyY2hSdWxlSW5kZXggPj0gTk9fT0ZfUVVFVUVTCisJCQkJfHwgdWlTZWFyY2hSdWxlSW5kZXggPT0gSGlQcmlvcml0eSkgeworCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgQ09OTl9NU0csCisJCQkJCURCR19MVkxfQUxMLAorCQkJCQkiVGhlIFNGSUQgPCVseD4gZG9lc24ndCBleGlzdCBpbiBob3N0IGVudHJ5IG9yIGlzIEludmFsaWRcbiIsCisJCQkJCXVsU0ZJRCk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChwSG9zdEluZm8tPlJldGFpblNGID09IGZhbHNlKSB7Ci0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywgREJHX0xWTF9BTEwsICJHb2luZyB0byBEZWxldGUgU0YiKTsKKwkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLAorCQkJCQlEQkdfTFZMX0FMTCwgIkdvaW5nIHRvIERlbGV0ZSBTRiIpOwogCQkJZGVsZXRlU0ZCeVNmaWQoQWRhcHRlciwgdWlTZWFyY2hSdWxlSW5kZXgpOwogCQl9IGVsc2UgewotCQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLnVzVkNJRF9WYWx1ZSA9IG50b2hzKHBIb3N0SW5mby0+VkNJRCk7Ci0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0udXNDSUQgPSBudG9ocyhwSG9zdEluZm8tPm5ld0NJRCk7Ci0JCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYkFjdGl2ZSA9IGZhbHNlOworCQkJc3RydWN0IGJjbV9wYWNrZXRfaW5mbyAqcGFja2luZm8gPQorCQkJCSZBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF07CiAKLQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgInBIb3N0SW5mby0+UW9TUGFyYW1TZXQ6IDB4JXhcbiIsIHBIb3N0SW5mby0+UW9TUGFyYW1TZXQpOworCQkJcGFja2luZm8tPnVzVkNJRF9WYWx1ZSA9IG50b2hzKHBIb3N0SW5mby0+VkNJRCk7CisJCQlwYWNraW5mby0+dXNDSUQgPSBudG9ocyhwSG9zdEluZm8tPm5ld0NJRCk7CisJCQlwYWNraW5mby0+YkFjdGl2ZSA9IGZhbHNlOworCisJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBDT05OX01TRywKKwkJCQkJREJHX0xWTF9BTEwsCisJCQkJCSJwSG9zdEluZm8tPlFvU1BhcmFtU2V0OiAweCV4XG4iLAorCQkJCQlwSG9zdEluZm8tPlFvU1BhcmFtU2V0KTsKIAogCQkJaWYgKHBIb3N0SW5mby0+UW9TUGFyYW1TZXQgJiAweDEpCi0JCQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLmJBdXRob3JpemVkU2V0ID0gVFJVRTsKKwkJCQlwYWNraW5mby0+YkF1dGhvcml6ZWRTZXQgPSBUUlVFOwogCQkJaWYgKHBIb3N0SW5mby0+UW9TUGFyYW1TZXQgJiAweDIpCi0JCQkJQWRhcHRlci0+UGFja0luZm9bdWlTZWFyY2hSdWxlSW5kZXhdLmJBZG1pdHRlZFNldCA9IFRSVUU7CisJCQkJcGFja2luZm8tPmJBZG1pdHRlZFNldCA9IFRSVUU7CiAJCQlpZiAocEhvc3RJbmZvLT5Rb1NQYXJhbVNldCAmIDB4NCkgewotCQkJCUFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS5iQWN0aXZlU2V0ID0gVFJVRTsKLQkJCQlBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uYkFjdGl2ZSA9IFRSVUU7CisJCQkJcGFja2luZm8tPmJBY3RpdmVTZXQgPSBUUlVFOworCQkJCXBhY2tpbmZvLT5iQWN0aXZlID0gVFJVRTsKIAkJCX0KIAkJfQogCX0KIH0KKworc3RhdGljIHZvaWQgcmVzdG9yZV9lbmRpYW5lc3Nfb2ZfcHN0Q2xhc3NpZmllckVudHJ5KAorCQlzdHJ1Y3QgYmNtX2NsYXNzaWZpZXJfcnVsZSAqcHN0Q2xhc3NpZmllckVudHJ5LAorCQllbnVtIGJjbV9pcGFkZHJfY29udGV4dCBlSXBBZGRyQ29udGV4dCkKK3sKKwlpbnQgaTsKKwl1bmlvbiB1X2lwX2FkZHJlc3MgKnN0U3JjICA9ICZwc3RDbGFzc2lmaWVyRW50cnktPnN0U3JjSXBBZGRyZXNzOworCXVuaW9uIHVfaXBfYWRkcmVzcyAqc3REZXN0ID0gJnBzdENsYXNzaWZpZXJFbnRyeS0+c3REZXN0SXBBZGRyZXNzOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9JUF9SQU5HRV9MRU5HVEggKiA0OyBpKyspIHsKKwkJaWYgKGVJcEFkZHJDb250ZXh0ID09IGVTcmNJcEFkZHJlc3MpIHsKKwkJCXN0U3JjLT51bElwdjZBZGRyW2ldID0gbnRvaGwoc3RTcmMtPnVsSXB2NkFkZHJbaV0pOworCQkJc3RTcmMtPnVsSXB2Nk1hc2tbaV0gPSBudG9obChzdFNyYy0+dWxJcHY2TWFza1tpXSk7CisJCX0gZWxzZSBpZiAoZUlwQWRkckNvbnRleHQgPT0gZURlc3RJcEFkZHJlc3MpIHsKKwkJCXN0RGVzdC0+dWxJcHY2QWRkcltpXSA9IG50b2hsKHN0RGVzdC0+dWxJcHY2QWRkcltpXSk7CisJCQlzdERlc3QtPnVsSXB2Nk1hc2tbaV0gPSBudG9obChzdERlc3QtPnVsSXB2Nk1hc2tbaV0pOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBseV9waHNfcnVsZV90b19hbGxfY2xhc3NpZmllcnMoCisJCXJlZ2lzdGVyIHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAkJLyogPFBvaW50ZXIgdG8gdGhlIEFkYXB0ZXIgc3RydWN0dXJlICovCisJCXJlZ2lzdGVyIFVJTlQgdWlTZWFyY2hSdWxlSW5kZXgsCQkJLyogPEluZGV4IG9mIFF1ZXVlLCB0byB3aGljaCB0aGlzIGRhdGEgYmVsb25ncyAqLworCQlVU0hPUlQgdVZDSUQsCisJCXN0cnVjdCBiY21fcGhzX3J1bGUgKnNQaHNSdWxlLAorCQlzdHJ1Y3QgYmNtX3Boc19ydWxlcyAqY1Boc1J1bGUsCisJCXN0cnVjdCBiY21fYWRkX2luZGljYXRpb25fYWx0ICpwc3RBZGRJbmRpY2F0aW9uKQoreworCXVuc2lnbmVkIGludCB1aUNsYXNzaWZpZXJJbmRleCA9IDA7CisJc3RydWN0IGJjbV9jbGFzc2lmaWVyX3J1bGUgKmN1cnJfY2xhc3NpZmllciA9IE5VTEw7CisKKwlpZiAocHN0QWRkSW5kaWNhdGlvbi0+dThEaXJlY3Rpb24gPT0gVVBMSU5LX0RJUikgeworCQlmb3IgKHVpQ2xhc3NpZmllckluZGV4ID0gMDsgdWlDbGFzc2lmaWVySW5kZXggPCBNQVhfQ0xBU1NJRklFUlM7IHVpQ2xhc3NpZmllckluZGV4KyspIHsKKwkJCWN1cnJfY2xhc3NpZmllciA9CisJCQkJJkFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVt1aUNsYXNzaWZpZXJJbmRleF07CisJCQlpZiAoKGN1cnJfY2xhc3NpZmllci0+YlVzZWQpICYmCisJCQkJKGN1cnJfY2xhc3NpZmllci0+dWxTRklEID09IEFkYXB0ZXItPlBhY2tJbmZvW3VpU2VhcmNoUnVsZUluZGV4XS51bFNGSUQpICYmCisJCQkJKGN1cnJfY2xhc3NpZmllci0+dThBc3NvY2lhdGVkUEhTSSA9PSBjUGhzUnVsZS0+dThQSFNJKSkgeworCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwKKwkJCQkJCSJBZGRpbmcgUEhTIFJ1bGUgRm9yIENsYXNzaWZpZXI6IDB4JXggY1Boc1J1bGUudThQSFNJOiAweCV4XG4iLAorCQkJCQkJY3Vycl9jbGFzc2lmaWVyLT51aUNsYXNzaWZpZXJSdWxlSW5kZXgsCisJCQkJCQljUGhzUnVsZS0+dThQSFNJKTsKKwkJCQkvKiBVcGRhdGUgVGhlIFBIUyBSdWxlIGZvciB0aGlzIGNsYXNzaWZpZXIgYXMgQXNzb2NpYXRlZCBQSFNJIGlkIGRlZmluZWQgKi8KKworCQkJCS8qIENvcHkgdGhlIFBIUyBSdWxlICovCisJCQkJc1Boc1J1bGUtPnU4UEhTSSA9IGNQaHNSdWxlLT51OFBIU0k7CisJCQkJc1Boc1J1bGUtPnU4UEhTRkxlbmd0aCA9IGNQaHNSdWxlLT51OFBIU0ZMZW5ndGg7CisJCQkJc1Boc1J1bGUtPnU4UEhTTUxlbmd0aCA9IGNQaHNSdWxlLT51OFBIU01MZW5ndGg7CisJCQkJc1Boc1J1bGUtPnU4UEhTUyA9IGNQaHNSdWxlLT51OFBIU1M7CisJCQkJc1Boc1J1bGUtPnU4UEhTViA9IGNQaHNSdWxlLT51OFBIU1Y7CisJCQkJbWVtY3B5KHNQaHNSdWxlLT51OFBIU0YsIGNQaHNSdWxlLT51OFBIU0YsIE1BWF9QSFNfTEVOR1RIUyk7CisJCQkJbWVtY3B5KHNQaHNSdWxlLT51OFBIU00sIGNQaHNSdWxlLT51OFBIU00sIE1BWF9QSFNfTEVOR1RIUyk7CisJCQkJc1Boc1J1bGUtPnU4UmVmQ250ID0gMDsKKwkJCQlzUGhzUnVsZS0+YlVuY2xhc3NpZmllZFBIU1J1bGUgPSBmYWxzZTsKKwkJCQlzUGhzUnVsZS0+UEhTTW9kaWZpZWRCeXRlcyA9IDA7CisJCQkJc1Boc1J1bGUtPlBIU01vZGlmaWVkTnVtUGFja2V0cyA9IDA7CisJCQkJc1Boc1J1bGUtPlBIU0Vycm9yTnVtUGFja2V0cyA9IDA7CisKKwkJCQkvKiBiUEhTUnVsZUFzc29jaWF0ZWQgPSBUUlVFOyAqLworCQkJCS8qIFN0b3JlIFRoZSBQSFMgUnVsZSBmb3IgdGhpcyBjbGFzc2lmaWVyICovCisKKwkJCQlQaHNVcGRhdGVDbGFzc2lmaWVyUnVsZSgKKwkJCQkJJkFkYXB0ZXItPnN0QkNNUGhzQ29udGV4dCwKKwkJCQkJdVZDSUQsCisJCQkJCWN1cnJfY2xhc3NpZmllci0+dWlDbGFzc2lmaWVyUnVsZUluZGV4LAorCQkJCQlzUGhzUnVsZSwKKwkJCQkJY3Vycl9jbGFzc2lmaWVyLT51OEFzc29jaWF0ZWRQSFNJKTsKKworCQkJCS8qIFVwZGF0ZSBQSFMgUnVsZSBGb3IgdGhlIENsYXNzaWZpZXIgKi8KKwkJCQlpZiAoc1Boc1J1bGUtPnU4UEhTSSkgeworCQkJCQljdXJyX2NsYXNzaWZpZXItPnUzMlBIU1J1bGVJRCA9IHNQaHNSdWxlLT51OFBIU0k7CisJCQkJCW1lbWNweSgmY3Vycl9jbGFzc2lmaWVyLT5zUGhzUnVsZSwgc1Boc1J1bGUsIHNpemVvZihzdHJ1Y3QgYmNtX3Boc19ydWxlKSk7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogRXJyb3IgUEhTIFJ1bGUgc3BlY2lmaWVkIGluIHNpZ25hbGluZyBjb3VsZCBub3QgYmUgYXBwbGllZCB0byBhbnkgY2xhc3NpZmllciAqLworCisJCS8qIENvcHkgdGhlIFBIUyBSdWxlICovCisJCXNQaHNSdWxlLT51OFBIU0kgPSBjUGhzUnVsZS0+dThQSFNJOworCQlzUGhzUnVsZS0+dThQSFNGTGVuZ3RoID0gY1Boc1J1bGUtPnU4UEhTRkxlbmd0aDsKKwkJc1Boc1J1bGUtPnU4UEhTTUxlbmd0aCA9IGNQaHNSdWxlLT51OFBIU01MZW5ndGg7CisJCXNQaHNSdWxlLT51OFBIU1MgPSBjUGhzUnVsZS0+dThQSFNTOworCQlzUGhzUnVsZS0+dThQSFNWID0gY1Boc1J1bGUtPnU4UEhTVjsKKwkJbWVtY3B5KHNQaHNSdWxlLT51OFBIU0YsIGNQaHNSdWxlLT51OFBIU0YsIE1BWF9QSFNfTEVOR1RIUyk7CisJCW1lbWNweShzUGhzUnVsZS0+dThQSFNNLCBjUGhzUnVsZS0+dThQSFNNLCBNQVhfUEhTX0xFTkdUSFMpOworCQlzUGhzUnVsZS0+dThSZWZDbnQgPSAwOworCQlzUGhzUnVsZS0+YlVuY2xhc3NpZmllZFBIU1J1bGUgPSBUUlVFOworCQlzUGhzUnVsZS0+UEhTTW9kaWZpZWRCeXRlcyA9IDA7CisJCXNQaHNSdWxlLT5QSFNNb2RpZmllZE51bVBhY2tldHMgPSAwOworCQlzUGhzUnVsZS0+UEhTRXJyb3JOdW1QYWNrZXRzID0gMDsKKwkJLyogU3RvcmUgVGhlIFBIUyBSdWxlIGZvciB0aGlzIGNsYXNzaWZpZXIgKi8KKworCQkvKgorCQkgKiBQYXNzaW5nIHRoZSBhcmd1bWVudCB1OFBIU0kgaW5zdGVhZCBvZiBjbHNpZC4gQmVjYXVzZSBmb3IgREwgd2l0aCBubyBjbGFzc2lmaWVyIHJ1bGUsCisJCSAqIGNsc2lkIHdpbGwgYmUgemVybyBoZW5jZSB3ZSBjYW4ndCBoYXZlIG11bHRpcGxlIFBIUyBydWxlcyBmb3IgdGhlIHNhbWUgU0YuCisJCSAqIFRvIHN1cHBvcnQgbXVsdGlwbGUgUEhTIHJ1bGUsIHBhc3NpbmcgdThQSFNJLgorCQkgKi8KKwkJUGhzVXBkYXRlQ2xhc3NpZmllclJ1bGUoCisJCQkmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0LAorCQkJdVZDSUQsCisJCQlzUGhzUnVsZS0+dThQSFNJLAorCQkJc1Boc1J1bGUsCisJCQlzUGhzUnVsZS0+dThQSFNJKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZURsZC5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VEbGQuYwppbmRleCAwMDVlNDYwLi5lMTkyNWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZURsZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlRGxkLmMKQEAgLTUzLDggKzUzLDggQEAKIAlzdHJ1Y3QgYmNtX2ludGVyZmFjZV9hZGFwdGVyICpwc0ludGZBZGFwdGVyID0gYXJnOwogCWludCBieXRlczsKIAotCWJ1ZmYgPSBrbWFsbG9jKE1BWF9UUkFOU0ZFUl9DVFJMX0JZVEVfVVNCLCBHRlBfRE1BKTsKLQlidWZmX3JlYWRiYWNrID0ga21hbGxvYyhNQVhfVFJBTlNGRVJfQ1RSTF9CWVRFX1VTQiAsIEdGUF9ETUEpOworCWJ1ZmYgPSBremFsbG9jKE1BWF9UUkFOU0ZFUl9DVFJMX0JZVEVfVVNCLCBHRlBfRE1BKTsKKwlidWZmX3JlYWRiYWNrID0ga3phbGxvYyhNQVhfVFJBTlNGRVJfQ1RSTF9CWVRFX1VTQiAsIEdGUF9ETUEpOwogCWlmICghYnVmZiB8fCAhYnVmZl9yZWFkYmFjaykgewogCQlrZnJlZShidWZmKTsKIAkJa2ZyZWUoYnVmZl9yZWFkYmFjayk7CkBAIC02NCw4ICs2NCw2IEBACiAKIAlpc19jb25maWdfZmlsZSA9IChvbl9jaGlwX2xvYyA9PSBDT05GSUdfQkVHSU5fQUREUikgPyAxIDogMDsKIAotCW1lbXNldChidWZmX3JlYWRiYWNrLCAwLCBNQVhfVFJBTlNGRVJfQ1RSTF9CWVRFX1VTQik7Ci0JbWVtc2V0KGJ1ZmYsIDAsIE1BWF9UUkFOU0ZFUl9DVFJMX0JZVEVfVVNCKTsKIAl3aGlsZSAoMSkgewogCQlvbGRmcyA9IGdldF9mcygpOwogCQlzZXRfZnMoZ2V0X2RzKCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJZGxlTW9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJZGxlTW9kZS5jCmluZGV4IGZlY2Y4MWYuLmM4NGVlNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlSWRsZU1vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUlkbGVNb2RlLmMKQEAgLTIyMyw3ICsyMjMsNiBAQAogfQogaW50IEludGVyZmFjZUlkbGVNb2RlV2FrZXVwKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQogewotCVVMT05HCVN0YXR1cyA9IDA7CiAJaWYgKEFkYXB0ZXItPmJUcmllZFRvV2FrZVVwRnJvbWxvd1Bvd2VyTW9kZSkgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLAogCQlJRExFX01PREUsIERCR19MVkxfQUxMLApAQCAtMjMzLDcgKzIzMiw3IEBACiAJCUludGVyZmFjZUFib3J0SWRsZW1vZGUoQWRhcHRlciwgQWRhcHRlci0+dXNJZGxlTW9kZVBhdHRlcm4pOwogCiAJfQotCXJldHVybiBTdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgSW50ZXJmYWNlSGFuZGxlU2h1dGRvd25Nb2RlV2FrZXVwKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VNaXNjLmggYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZU1pc2MuaAppbmRleCBiY2U2ODY5Li5lZmI2ODYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZU1pc2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZU1pc2MuaApAQCAtMTQsMTMgKzE0LDEzIEBACiAJCQlJTlQgbGVuKTsKIAogCi1pbnQgSW50ZXJmYWNlRmlsZURvd25sb2FkKCBQVk9JRCBwc0ludGZBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUgKmZscCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvbl9jaGlwX2xvYyk7CitpbnQgSW50ZXJmYWNlRmlsZURvd25sb2FkKFBWT0lEIHBzSW50ZkFkYXB0ZXIsCisJCQlzdHJ1Y3QgZmlsZSAqZmxwLAorCQkJdW5zaWduZWQgaW50IG9uX2NoaXBfbG9jKTsKIAotaW50IEludGVyZmFjZUZpbGVSZWFkYmFja0Zyb21DaGlwKCBQVk9JRCBwc0ludGZBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUgKmZscCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvbl9jaGlwX2xvYyk7CitpbnQgSW50ZXJmYWNlRmlsZVJlYWRiYWNrRnJvbUNoaXAoUFZPSUQgcHNJbnRmQWRhcHRlciwKKwkJCXN0cnVjdCBmaWxlICpmbHAsCisJCQl1bnNpZ25lZCBpbnQgb25fY2hpcF9sb2MpOwogCiAKIGludCBCY21SRE0oUFZPSUQgYXJnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9QSFNNb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vUEhTTW9kdWxlLmMKaW5kZXggYWZjN2JjYy4uMDdjNWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9QSFNNb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL1BIU01vZHVsZS5jCkBAIC00MDksNyArNDA5LDYgQEAKICAqLwogVUxPTkcgUGhzRGVsZXRlUEhTUnVsZShJTiB2b2lkICpwdkNvbnRleHQsIElOIEJfVUlOVDE2IHVpVmNpZCwgSU4gQl9VSU5UOCB1OFBIU0kpCiB7Ci0JVUxPTkcgbFN0YXR1cyA9IDA7CiAJVUlOVCBuU0ZJbmRleCA9IDAsIG5DbHNpZEluZGV4ID0gMDsKIAlzdHJ1Y3QgYmNtX3Boc19lbnRyeSAqcHN0U2VydmljZUZsb3dFbnRyeSA9IE5VTEw7CiAJc3RydWN0IGJjbV9waHNfY2xhc3NpZmllcl90YWJsZSAqcHN0Q2xhc3NpZmllclJ1bGVzVGFibGUgPSBOVUxMOwpAQCAtNDQ2LDcgKzQ0NSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuIGxTdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00NjcsNyArNDY2LDYgQEAKICAqLwogVUxPTkcgUGhzRGVsZXRlQ2xhc3NpZmllclJ1bGUoSU4gdm9pZCAqcHZDb250ZXh0LCBJTiBCX1VJTlQxNiB1aVZjaWQsIElOIEJfVUlOVDE2IHVpQ2xzSWQpCiB7Ci0JVUxPTkcgbFN0YXR1cyA9IDA7CiAJVUlOVCBuU0ZJbmRleCA9IDAsIG5DbHNpZEluZGV4ID0gMDsKIAlzdHJ1Y3QgYmNtX3Boc19lbnRyeSAqcHN0U2VydmljZUZsb3dFbnRyeSA9IE5VTEw7CiAJc3RydWN0IGJjbV9waHNfY2xhc3NpZmllcl9lbnRyeSAqcHN0Q2xhc3NpZmllckVudHJ5ID0gTlVMTDsKQEAgLTUwNCw3ICs1MDIsNyBAQAogCQkJbWVtc2V0KHBzdENsYXNzaWZpZXJFbnRyeSwgMCwgc2l6ZW9mKHN0cnVjdCBiY21fcGhzX2NsYXNzaWZpZXJfZW50cnkpKTsKIAkJfQogCX0KLQlyZXR1cm4gbFN0YXR1czsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTUyNCw3ICs1MjIsNiBAQAogICovCiBVTE9ORyBQaHNEZWxldGVTRlJ1bGVzKElOIHZvaWQgKnB2Q29udGV4dCwgSU4gQl9VSU5UMTYgdWlWY2lkKQogewotCVVMT05HIGxTdGF0dXMgPSAwOwogCVVJTlQgblNGSW5kZXggPSAwLCBuQ2xzaWRJbmRleCA9IDA7CiAJc3RydWN0IGJjbV9waHNfZW50cnkgKnBzdFNlcnZpY2VGbG93RW50cnkgPSBOVUxMOwogCXN0cnVjdCBiY21fcGhzX2NsYXNzaWZpZXJfdGFibGUgKnBzdENsYXNzaWZpZXJSdWxlc1RhYmxlID0gTlVMTDsKQEAgLTU3Myw3ICs1NzAsNyBAQAogCQlwc3RTZXJ2aWNlRmxvd0VudHJ5LT51aVZjaWQgPSAwOwogCX0KIAotCXJldHVybiBsU3RhdHVzOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Rb3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vUW9zLmMKaW5kZXggNGYzMTU4My4uMGM3NDJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Rb3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL1Fvcy5jCkBAIC00LDExICs0LDE4IEBACiAqLwogI2luY2x1ZGUgImhlYWRlcnMuaCIKIAotc3RhdGljIHZvaWQgRVRoQ1NHZXRQa3RJbmZvKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBQVk9JRCBwdkV0aFBheWxvYWQsIHN0cnVjdCBiY21fZXRoX3BhY2tldF9pbmZvICpwc3RFdGhDc1BrdEluZm8pOwotc3RhdGljIGJvb2wgRVRoQ1NDbGFzc2lmeVBrdChzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwgc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IGJjbV9ldGhfcGFja2V0X2luZm8gKnBzdEV0aENzUGt0SW5mbywgc3RydWN0IGJjbV9jbGFzc2lmaWVyX3J1bGUgKnBzdENsYXNzaWZpZXJSdWxlLCBCX1VJTlQ4IEV0aENTQ3VwcG9ydCk7CitzdGF0aWMgdm9pZCBFVGhDU0dldFBrdEluZm8oc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCQkgICAgUFZPSUQgcHZFdGhQYXlsb2FkLAorCQkJICAgIHN0cnVjdCBiY21fZXRoX3BhY2tldF9pbmZvICpwc3RFdGhDc1BrdEluZm8pOwogCi1zdGF0aWMgVVNIT1JUCUlwVmVyc2lvbjQoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIHN0cnVjdCBpcGhkciAqaXBoZCwKLQkJCSAgIHN0cnVjdCBiY21fY2xhc3NpZmllcl9ydWxlICpwc3RDbGFzc2lmaWVyUnVsZSk7CitzdGF0aWMgYm9vbCBFVGhDU0NsYXNzaWZ5UGt0KHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3QgYmNtX2V0aF9wYWNrZXRfaW5mbyAqcHN0RXRoQ3NQa3RJbmZvLAorCQkJICAgICBzdHJ1Y3QgYmNtX2NsYXNzaWZpZXJfcnVsZSAqcHN0Q2xhc3NpZmllclJ1bGUsCisJCQkgICAgIEJfVUlOVDggRXRoQ1NDdXBwb3J0KTsKKworc3RhdGljIFVTSE9SVCBJcFZlcnNpb240KHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLCBzdHJ1Y3QgaXBoZHIgKmlwaGQsCisJCQkgc3RydWN0IGJjbV9jbGFzc2lmaWVyX3J1bGUgKnBzdENsYXNzaWZpZXJSdWxlKTsKIAogc3RhdGljIFZPSUQgUHJ1bmVRdWV1ZShzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwgSU5UIGlJbmRleCk7CiAKQEAgLTMzLDE0ICs0MCwxMSBAQAogCXVsU3JjSVAgPSBudG9obCh1bFNyY0lQKTsKIAlpZiAoMCA9PSBwc3RDbGFzc2lmaWVyUnVsZS0+dWNJUFNvdXJjZUFkZHJlc3NMZW5ndGgpCiAJCXJldHVybiBUUlVFOwotCWZvciAodWNMb29wSW5kZXggPSAwOyB1Y0xvb3BJbmRleCA8IChwc3RDbGFzc2lmaWVyUnVsZS0+dWNJUFNvdXJjZUFkZHJlc3NMZW5ndGgpOyB1Y0xvb3BJbmRleCsrKQotCXsKKwlmb3IgKHVjTG9vcEluZGV4ID0gMDsgdWNMb29wSW5kZXggPCAocHN0Q2xhc3NpZmllclJ1bGUtPnVjSVBTb3VyY2VBZGRyZXNzTGVuZ3RoKTsgdWNMb29wSW5kZXgrKykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIlNyYyBJcCBBZGRyZXNzIE1hc2s6MHgleCBQYWNrZXRJcDoweCV4IGFuZCBDbGFzc2lmaWNhdGlvbjoweCV4IiwgKFVJTlQpcHN0Q2xhc3NpZmllclJ1bGUtPnN0U3JjSXBBZGRyZXNzLnVsSXB2NE1hc2tbdWNMb29wSW5kZXhdLCAoVUlOVCl1bFNyY0lQLCAoVUlOVClwc3RDbGFzc2lmaWVyUnVsZS0+c3RTcmNJcEFkZHJlc3MudWxJcHY2QWRkclt1Y0xvb3BJbmRleF0pOwogCQlpZiAoKHBzdENsYXNzaWZpZXJSdWxlLT5zdFNyY0lwQWRkcmVzcy51bElwdjRNYXNrW3VjTG9vcEluZGV4XSAmIHVsU3JjSVApID09CiAJCQkJKHBzdENsYXNzaWZpZXJSdWxlLT5zdFNyY0lwQWRkcmVzcy51bElwdjRBZGRyW3VjTG9vcEluZGV4XSAmIHBzdENsYXNzaWZpZXJSdWxlLT5zdFNyY0lwQWRkcmVzcy51bElwdjRNYXNrW3VjTG9vcEluZGV4XSkpCi0JCXsKIAkJCXJldHVybiBUUlVFOwotCQl9CiAJfQogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiU3JjIElwIEFkZHJlc3MgTm90IE1hdGNoZWQiKTsKIAlyZXR1cm4gZmFsc2U7CkBAIC02OCwxMyArNzIsMTAgQEAKIAkJcmV0dXJuIFRSVUU7CiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJEZXN0aW5hdGlvbiBJcCBBZGRyZXNzIDB4JXggMHgleCAweCV4ICAiLCAoVUlOVCl1bERlc3RJUCwgKFVJTlQpcHN0Q2xhc3NpZmllclJ1bGUtPnN0RGVzdElwQWRkcmVzcy51bElwdjRNYXNrW3VjTG9vcEluZGV4XSwgKFVJTlQpcHN0Q2xhc3NpZmllclJ1bGUtPnN0RGVzdElwQWRkcmVzcy51bElwdjRBZGRyW3VjTG9vcEluZGV4XSk7CiAKLQlmb3IgKHVjTG9vcEluZGV4ID0gMDsgdWNMb29wSW5kZXggPCAocHN0Q2xhc3NpZmllclJ1bGUtPnVjSVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGgpOyB1Y0xvb3BJbmRleCsrKQotCXsKKwlmb3IgKHVjTG9vcEluZGV4ID0gMDsgdWNMb29wSW5kZXggPCAocHN0Q2xhc3NpZmllclJ1bGUtPnVjSVBEZXN0aW5hdGlvbkFkZHJlc3NMZW5ndGgpOyB1Y0xvb3BJbmRleCsrKSB7CiAJCWlmICgocHN0Q2xhc3NpZmllclJ1bGUtPnN0RGVzdElwQWRkcmVzcy51bElwdjRNYXNrW3VjTG9vcEluZGV4XSAmIHVsRGVzdElQKSA9PQogCQkJCShwc3RDbGFzc2lmaWVyUnVsZS0+c3REZXN0SXBBZGRyZXNzLnVsSXB2NEFkZHJbdWNMb29wSW5kZXhdICYgcHN0Q2xhc3NpZmllclJ1bGUtPnN0RGVzdElwQWRkcmVzcy51bElwdjRNYXNrW3VjTG9vcEluZGV4XSkpCi0JCXsKIAkJCXJldHVybiBUUlVFOwotCQl9CiAJfQogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiRGVzdGluYXRpb24gSXAgQWRkcmVzcyBOb3QgTWF0Y2hlZCIpOwogCXJldHVybiBmYWxzZTsKQEAgLTk5LDkgKzEwMCw4IEBACiAJCXJldHVybiBUUlVFOwogCiAJaWYgKCgocHN0Q2xhc3NpZmllclJ1bGUtPnVjVG9zTWFzayAmIHVjVHlwZU9mU2VydmljZSkgPD0gcHN0Q2xhc3NpZmllclJ1bGUtPnVjVG9zSGlnaCkgJiYgKChwc3RDbGFzc2lmaWVyUnVsZS0+dWNUb3NNYXNrICYgdWNUeXBlT2ZTZXJ2aWNlKSA+PSBwc3RDbGFzc2lmaWVyUnVsZS0+dWNUb3NMb3cpKQotCXsKIAkJcmV0dXJuIFRSVUU7Ci0JfQorCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJUeXBlIE9mIFNlcnZpY2UgTm90IE1hdGNoZWQiKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjMsMTMgKzEyMywxMCBAQAogCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyID0gR0VUX0JDTV9BREFQVEVSKGdibHBuZXRkZXYpOwogCWlmICgwID09IHBzdENsYXNzaWZpZXJSdWxlLT51Y1Byb3RvY29sTGVuZ3RoKQogCQlyZXR1cm4gVFJVRTsKLQlmb3IgKHVjTG9vcEluZGV4ID0gMDsgdWNMb29wSW5kZXggPCBwc3RDbGFzc2lmaWVyUnVsZS0+dWNQcm90b2NvbExlbmd0aDsgdWNMb29wSW5kZXgrKykKLQl7CisJZm9yICh1Y0xvb3BJbmRleCA9IDA7IHVjTG9vcEluZGV4IDwgcHN0Q2xhc3NpZmllclJ1bGUtPnVjUHJvdG9jb2xMZW5ndGg7IHVjTG9vcEluZGV4KyspIHsKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJQcm90b2NvbDoweCVYIENsYXNzaWZpY2F0aW9uIFByb3RvY29sOjB4JVgiLCB1Y1Byb3RvY29sLCBwc3RDbGFzc2lmaWVyUnVsZS0+dWNQcm90b2NvbFt1Y0xvb3BJbmRleF0pOwogCQlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPnVjUHJvdG9jb2xbdWNMb29wSW5kZXhdID09IHVjUHJvdG9jb2wpCi0JCXsKIAkJCXJldHVybiBUUlVFOwotCQl9CiAJfQogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiUHJvdG9jb2wgTm90IE1hdGNoZWQiKTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0xNTUsMTMgKzE1MiwxMCBAQAogCiAJaWYgKDAgPT0gcHN0Q2xhc3NpZmllclJ1bGUtPnVjU3JjUG9ydFJhbmdlTGVuZ3RoKQogCQlyZXR1cm4gVFJVRTsKLQlmb3IgKHVjTG9vcEluZGV4ID0gMDsgdWNMb29wSW5kZXggPCBwc3RDbGFzc2lmaWVyUnVsZS0+dWNTcmNQb3J0UmFuZ2VMZW5ndGg7IHVjTG9vcEluZGV4KyspCi0JeworCWZvciAodWNMb29wSW5kZXggPSAwOyB1Y0xvb3BJbmRleCA8IHBzdENsYXNzaWZpZXJSdWxlLT51Y1NyY1BvcnRSYW5nZUxlbmd0aDsgdWNMb29wSW5kZXgrKykgewogCQlpZiAodXNoU3JjUG9ydCA8PSBwc3RDbGFzc2lmaWVyUnVsZS0+dXNTcmNQb3J0UmFuZ2VIaVt1Y0xvb3BJbmRleF0gJiYKIAkJCXVzaFNyY1BvcnQgPj0gcHN0Q2xhc3NpZmllclJ1bGUtPnVzU3JjUG9ydFJhbmdlTG9bdWNMb29wSW5kZXhdKQotCQl7CiAJCQlyZXR1cm4gVFJVRTsKLQkJfQogCX0KIAlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIlNyYyBQb3J0OiAleCBOb3QgTWF0Y2hlZCAiLCB1c2hTcmNQb3J0KTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0xODYsMTUgKzE4MCwxMiBAQAogCWlmICgwID09IHBzdENsYXNzaWZpZXJSdWxlLT51Y0Rlc3RQb3J0UmFuZ2VMZW5ndGgpCiAJCXJldHVybiBUUlVFOwogCi0JZm9yICh1Y0xvb3BJbmRleCA9IDA7IHVjTG9vcEluZGV4IDwgcHN0Q2xhc3NpZmllclJ1bGUtPnVjRGVzdFBvcnRSYW5nZUxlbmd0aDsgdWNMb29wSW5kZXgrKykKLQl7CisJZm9yICh1Y0xvb3BJbmRleCA9IDA7IHVjTG9vcEluZGV4IDwgcHN0Q2xhc3NpZmllclJ1bGUtPnVjRGVzdFBvcnRSYW5nZUxlbmd0aDsgdWNMb29wSW5kZXgrKykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIk1hdGNoaW5nIFBvcnQ6MHglWCAgIDB4JVggIDB4JVgiLCB1c2hEZXN0UG9ydCwgcHN0Q2xhc3NpZmllclJ1bGUtPnVzRGVzdFBvcnRSYW5nZUxvW3VjTG9vcEluZGV4XSwgcHN0Q2xhc3NpZmllclJ1bGUtPnVzRGVzdFBvcnRSYW5nZUhpW3VjTG9vcEluZGV4XSk7CiAKIAkJaWYgKHVzaERlc3RQb3J0IDw9IHBzdENsYXNzaWZpZXJSdWxlLT51c0Rlc3RQb3J0UmFuZ2VIaVt1Y0xvb3BJbmRleF0gJiYKIAkJCXVzaERlc3RQb3J0ID49IHBzdENsYXNzaWZpZXJSdWxlLT51c0Rlc3RQb3J0UmFuZ2VMb1t1Y0xvb3BJbmRleF0pCi0JCXsKIAkJCXJldHVybiBUUlVFOwotCQl9CiAJfQogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiRGVzdCBQb3J0OiAleCBOb3QgTWF0Y2hlZCIsIHVzaERlc3RQb3J0KTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNzMsMjEgKzI2NCwxMyBAQAogCQliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gVFJVRTsKIAl9IHdoaWxlICgwKTsKIAotCWlmIChUUlVFID09IGJDbGFzc2lmaWNhdGlvblN1Y2NlZWQpCi0JeworCWlmIChUUlVFID09IGJDbGFzc2lmaWNhdGlvblN1Y2NlZWQpIHsKIAkJSU5UIGlNYXRjaGVkU0ZRdWV1ZUluZGV4ID0gMDsKIAkJaU1hdGNoZWRTRlF1ZXVlSW5kZXggPSBTZWFyY2hTZmlkKEFkYXB0ZXIsIHBzdENsYXNzaWZpZXJSdWxlLT51bFNGSUQpOwogCQlpZiAoaU1hdGNoZWRTRlF1ZXVlSW5kZXggPj0gTk9fT0ZfUVVFVUVTKQotCQl7CiAJCQliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gZmFsc2U7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZmFsc2UgPT0gQWRhcHRlci0+UGFja0luZm9baU1hdGNoZWRTRlF1ZXVlSW5kZXhdLmJBY3RpdmUpCi0JCQl7Ci0JCQkJYkNsYXNzaWZpY2F0aW9uU3VjY2VlZCA9IGZhbHNlOwotCQkJfQotCQl9CisJCWVsc2UgaWYgKGZhbHNlID09IEFkYXB0ZXItPlBhY2tJbmZvW2lNYXRjaGVkU0ZRdWV1ZUluZGV4XS5iQWN0aXZlKQorCQkJYkNsYXNzaWZpY2F0aW9uU3VjY2VlZCA9IGZhbHNlOwogCX0KIAogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiSXBWZXJzaW9uNCA8PT09PT09PT09PSIpOwpAQCAtMjk5LDggKzI4Miw3IEBACiB7CiAJVUlOVCBpSW5kZXggPSAwOwogCi0JZm9yIChpSW5kZXggPSAwOyBpSW5kZXggPCBIaVByaW9yaXR5OyBpSW5kZXgrKykKLQl7CisJZm9yIChpSW5kZXggPSAwOyBpSW5kZXggPCBIaVByaW9yaXR5OyBpSW5kZXgrKykgewogCQlpZiAoIUFkYXB0ZXItPlBhY2tJbmZvW2lJbmRleF0uYlZhbGlkKQogCQkJY29udGludWU7CiAKQEAgLTMzNCwxMCArMzE2LDEwIEBACiAKIAlzcGluX2xvY2tfYmgoJkFkYXB0ZXItPlBhY2tJbmZvW2lJbmRleF0uU0ZRdWV1ZUxvY2spOwogCi0Jd2hpbGUgKDEpCisJd2hpbGUgKDEpIHsKIC8vCXdoaWxlKChVSU5UKUFkYXB0ZXItPlBhY2tJbmZvW2lJbmRleF0udWlDdXJyZW50UGFja2V0c09uSG9zdCA+Ci0vLwkJU0ZfTUFYX0FMTE9XRURfUEFDS0VUU19UT19CQUNLVVApCi0JeworLy8JCVNGX01BWF9BTExPV0VEX1BBQ0tFVFNfVE9fQkFDS1VQKSB7CisKIAkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBQUlVORV9RVUVVRSwgREJHX0xWTF9BTEwsICJ1aUN1cnJlbnRCeXRlc09uSG9zdDoleCB1aU1heEJ1Y2tldFNpemUgOiV4IiwKIAkJQWRhcHRlci0+UGFja0luZm9baUluZGV4XS51aUN1cnJlbnRCeXRlc09uSG9zdCwKIAkJQWRhcHRlci0+UGFja0luZm9baUluZGV4XS51aU1heEJ1Y2tldFNpemUpOwpAQCAtMzUwLDggKzMzMiw3IEBACiAJCQkoKDEwMDAqKGppZmZpZXMgLSAqKChCX1VJTlQzMiAqKShQYWNrZXRUb0Ryb3AtPmNiKStTS0JfQ0JfTEFURU5DWV9PRkZTRVQpKS9IWikgPD0gQWRhcHRlci0+UGFja0luZm9baUluZGV4XS51aU1heExhdGVuY3kpKQogCQkJYnJlYWs7CiAKLQkJaWYgKFBhY2tldFRvRHJvcCkKLQkJeworCQlpZiAoUGFja2V0VG9Ecm9wKSB7CiAJCQlpZiAobmV0aWZfbXNnX3R4X2VycihBZGFwdGVyKSkKIAkJCQlwcl9pbmZvKFBGWCAiJXM6IHR4IHF1ZXVlICVkIG92ZXJsaW1pdFxuIiwKIAkJCQkJQWRhcHRlci0+ZGV2LT5uYW1lLCBpSW5kZXgpOwpAQCAtMzk0LDIwICszNzUsMTYgQEAKIAlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfT1RIRVJTLCBEVU1QX0lORk8sIERCR19MVkxfQUxMLCAiPT09PT0+Iik7CiAKIC8vCWRvd24oJkFkYXB0ZXItPmRhdGFfcGFja2V0X3F1ZXVlX2xvY2spOwotCWZvciAoaVFJbmRleCA9IExvd1ByaW9yaXR5OyBpUUluZGV4IDwgSGlQcmlvcml0eTsgaVFJbmRleCsrKQotCXsKKwlmb3IgKGlRSW5kZXggPSBMb3dQcmlvcml0eTsgaVFJbmRleCA8IEhpUHJpb3JpdHk7IGlRSW5kZXgrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0c3RhdHMgPSAmQWRhcHRlci0+ZGV2LT5zdGF0czsKIAogCQlzcGluX2xvY2tfYmgoJkFkYXB0ZXItPlBhY2tJbmZvW2lRSW5kZXhdLlNGUXVldWVMb2NrKTsKLQkJd2hpbGUgKEFkYXB0ZXItPlBhY2tJbmZvW2lRSW5kZXhdLkZpcnN0VHhRdWV1ZSkKLQkJeworCQl3aGlsZSAoQWRhcHRlci0+UGFja0luZm9baVFJbmRleF0uRmlyc3RUeFF1ZXVlKSB7CiAJCQlQYWNrZXRUb0Ryb3AgPSBBZGFwdGVyLT5QYWNrSW5mb1tpUUluZGV4XS5GaXJzdFR4UXVldWU7Ci0JCQlpZiAoUGFja2V0VG9Ecm9wKQotCQkJeworCQkJaWYgKFBhY2tldFRvRHJvcCkgewogCQkJCXVpVG90YWxQYWNrZXRMZW5ndGggPSBQYWNrZXRUb0Ryb3AtPmxlbjsKIAkJCQluZXRzdGF0cy0+dHhfZHJvcHBlZCsrOwotCQkJfQotCQkJZWxzZQorCQkJfSBlbHNlCiAJCQkJdWlUb3RhbFBhY2tldExlbmd0aCA9IDA7CiAKIAkJCURFUVVFVUVQQUNLRVQoQWRhcHRlci0+UGFja0luZm9baVFJbmRleF0uRmlyc3RUeFF1ZXVlLApAQCAtNDU1LDU4ICs0MzIsNDIgQEAKIAkqKChVSU5UMzIqKSAoc2tiLT5jYikgK1NLQl9DQl9UQ1BBQ0tfT0ZGU0VUKSA9IDA7CiAJRVRoQ1NHZXRQa3RJbmZvKEFkYXB0ZXIsIHB2RVRoUGF5bG9hZCwgJnN0RXRoQ3NQa3RJbmZvKTsKIAotCXN3aXRjaCAoc3RFdGhDc1BrdEluZm8uZU53cGt0RXRoRnJhbWVUeXBlKQotCXsKKwlzd2l0Y2ggKHN0RXRoQ3NQa3RJbmZvLmVOd3BrdEV0aEZyYW1lVHlwZSkgewogCQljYXNlIGVFdGg4MDJMTENGcmFtZToKLQkJewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJDbGFzc2lmeVBhY2tldCA6IDgwMkxMQ0ZyYW1lXG4iKTsKIAkJCXBJcEhlYWRlciA9IHB2RVRoUGF5bG9hZCArIHNpemVvZihzdHJ1Y3QgYmNtX2V0aF9sbGNfZnJhbWUpOwogCQkJYnJlYWs7Ci0JCX0KLQogCQljYXNlIGVFdGg4MDJMTENTTkFQRnJhbWU6Ci0JCXsKIAkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiQ2xhc3NpZnlQYWNrZXQgOiA4MDJMTEMgU05BUCBGcmFtZVxuIik7CiAJCQlwSXBIZWFkZXIgPSBwdkVUaFBheWxvYWQgKyBzaXplb2Yoc3RydWN0IGJjbV9ldGhfbGxjX3NuYXBfZnJhbWUpOwogCQkJYnJlYWs7Ci0JCX0KIAkJY2FzZSBlRXRoODAyUVZMQU5GcmFtZToKLQkJewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJDbGFzc2lmeVBhY2tldCA6IDgwMi4xUSBWTEFORnJhbWVcbiIpOwogCQkJcElwSGVhZGVyID0gcHZFVGhQYXlsb2FkICsgc2l6ZW9mKHN0cnVjdCBiY21fZXRoX3FfZnJhbWUpOwogCQkJYnJlYWs7Ci0JCX0KIAkJY2FzZSBlRXRoT3RoZXJGcmFtZToKLQkJewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJDbGFzc2lmeVBhY2tldCA6IEVUSCBPdGhlciBGcmFtZVxuIik7CiAJCQlwSXBIZWFkZXIgPSBwdkVUaFBheWxvYWQgKyBzaXplb2Yoc3RydWN0IGJjbV9ldGhlcm5ldDJfZnJhbWUpOwogCQkJYnJlYWs7Ci0JCX0KIAkJZGVmYXVsdDoKLQkJewogCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJDbGFzc2lmeVBhY2tldCA6IFVucmVjb2duaXplZCBFVEggRnJhbWVcbiIpOwogCQkJcElwSGVhZGVyID0gcHZFVGhQYXlsb2FkICsgc2l6ZW9mKHN0cnVjdCBiY21fZXRoZXJuZXQyX2ZyYW1lKTsKIAkJCWJyZWFrOwotCQl9CiAJfQogCi0JaWYgKHN0RXRoQ3NQa3RJbmZvLmVOd3BrdElQRnJhbWVUeXBlID09IGVJUHY0UGFja2V0KQotCXsKKwlpZiAoc3RFdGhDc1BrdEluZm8uZU53cGt0SVBGcmFtZVR5cGUgPT0gZUlQdjRQYWNrZXQpIHsKIAkJdXNDdXJyRnJhZ21lbnQgPSAobnRvaHMocElwSGVhZGVyLT5mcmFnX29mZikgJiBJUF9PRkZTRVQpOwogCQlpZiAoKG50b2hzKHBJcEhlYWRlci0+ZnJhZ19vZmYpICYgSVBfTUYpIHx8IHVzQ3VyckZyYWdtZW50KQogCQkJYkZyYWdtZW50ZWRQa3QgPSBUUlVFOwogCi0JCWlmIChiRnJhZ21lbnRlZFBrdCkKLQkJeworCQlpZiAoYkZyYWdtZW50ZWRQa3QpIHsKIAkJCQkvL0ZyYWdtZW50ZWQgIFBhY2tldC4gR2V0IEZyYWcgQ2xhc3NpZmllciBFbnRyeS4KIAkJCXBzdENsYXNzaWZpZXJSdWxlID0gR2V0RnJhZ0lQQ2xzRW50cnkoQWRhcHRlciwgcElwSGVhZGVyLT5pZCwgcElwSGVhZGVyLT5zYWRkcik7Ci0JCQlpZiAocHN0Q2xhc3NpZmllclJ1bGUpCi0JCQl7CisJCQlpZiAocHN0Q2xhc3NpZmllclJ1bGUpIHsKIAkJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICJJdCBpcyBuZXh0IEZyYWdtZW50ZWQgcGt0Iik7CiAJCQkJCWJDbGFzc2lmaWNhdGlvblN1Y2NlZWQgPSBUUlVFOwogCQkJfQotCQkJaWYgKCEobnRvaHMocElwSGVhZGVyLT5mcmFnX29mZikgJiBJUF9NRikpCi0JCQl7CisJCQlpZiAoIShudG9ocyhwSXBIZWFkZXItPmZyYWdfb2ZmKSAmIElQX01GKSkgewogCQkJCS8vRnJhZ21lbnRlZCBMYXN0IHBhY2tldCAuIFJlbW92ZSBGcmFnIENsYXNzaWZpZXIgRW50cnkKIAkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIlRoaXMgaXMgdGhlIGxhc3QgZnJhZ21lbnRlZCBQa3QiKTsKIAkJCQlEZWxGcmFnSVBDbHNFbnRyeShBZGFwdGVyLCBwSXBIZWFkZXItPmlkLCBwSXBIZWFkZXItPnNhZGRyKTsKQEAgLTUxNCwyMyArNDc1LDE5IEBACiAJCX0KIAl9CiAKLQlmb3IgKHVpTG9vcEluZGV4ID0gTUFYX0NMQVNTSUZJRVJTIC0gMTsgdWlMb29wSW5kZXggPj0gMDsgdWlMb29wSW5kZXgtLSkKLQl7CisJZm9yICh1aUxvb3BJbmRleCA9IE1BWF9DTEFTU0lGSUVSUyAtIDE7IHVpTG9vcEluZGV4ID49IDA7IHVpTG9vcEluZGV4LS0pIHsKIAkJaWYgKGJDbGFzc2lmaWNhdGlvblN1Y2NlZWQpCiAJCQlicmVhazsKIAkJLy9JdGVyYXRlIHRocm91Z2ggYWxsIGNsYXNzaWZpZXJzIHdoaWNoIGFyZSBhbHJlYWR5IGluIG9yZGVyIG9mIHByaW9yaXR5CiAJCS8vdG8gY2xhc3NpZnkgdGhlIHBhY2tldCB1bnRpbCBtYXRjaCBmb3VuZAotCQlkbwotCQl7Ci0JCQlpZiAoZmFsc2UgPT0gQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpTG9vcEluZGV4XS5iVXNlZCkKLQkJCXsKKwkJZG8geworCQkJaWYgKGZhbHNlID09IEFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVt1aUxvb3BJbmRleF0uYlVzZWQpIHsKIAkJCQliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gZmFsc2U7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgICJBZGFwdGVyLT5QYWNrSW5mb1slZF0uYnZhbGlkPVRydWVcbiIsIHVpTG9vcEluZGV4KTsKIAotCQkJaWYgKDAgPT0gQWRhcHRlci0+YXN0Q2xhc3NpZmllclRhYmxlW3VpTG9vcEluZGV4XS51Y0RpcmVjdGlvbikKLQkJCXsKKwkJCWlmICgwID09IEFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVt1aUxvb3BJbmRleF0udWNEaXJlY3Rpb24pIHsKIAkJCQliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gZmFsc2U7Ly9jYW5ub3QgYmUgcHJvY2Vzc2VkIGZvciBjbGFzc2lmaWNhdGlvbi4KIAkJCQlicmVhazsJCQkJCQkvLyBpdCBpcyBhIGRvd24gbGluayBjb25uZWN0aW9uCiAJCQl9CkBAIC01NDMsMTEgKzUwMCw5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmIChBZGFwdGVyLT5QYWNrSW5mb1t1aVNmSW5kZXhdLmJFdGhDU1N1cHBvcnQpCi0JCQl7CisJCQlpZiAoQWRhcHRlci0+UGFja0luZm9bdWlTZkluZGV4XS5iRXRoQ1NTdXBwb3J0KSB7CiAKLQkJCQlpZiAoZUV0aFVuc3VwcG9ydGVkRnJhbWUgPT0gc3RFdGhDc1BrdEluZm8uZU53cGt0RXRoRnJhbWVUeXBlKQotCQkJCXsKKwkJCQlpZiAoZUV0aFVuc3VwcG9ydGVkRnJhbWUgPT0gc3RFdGhDc1BrdEluZm8uZU53cGt0RXRoRnJhbWVUeXBlKSB7CiAJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiIENsYXNzaWZ5UGFja2V0IDogUGFja2V0IE5vdCBhIFZhbGlkIFN1cHBvcnRlZCBFdGhlcm5ldCBGcmFtZVxuIik7CiAJCQkJCWJDbGFzc2lmaWNhdGlvblN1Y2NlZWQgPSBmYWxzZTsKIAkJCQkJYnJlYWs7CkBAIC01NTgsMTcgKzUxMywxMiBAQAogCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIlBlcmZvcm1pbmcgRVRIIENTIENsYXNzaWZpY2F0aW9uIG9uIENsYXNzaWZpZXIgUnVsZSBJRCA6ICV4IFNlcnZpY2UgRmxvdyBJRCA6ICVseFxuIiwgcHN0Q2xhc3NpZmllclJ1bGUtPnVpQ2xhc3NpZmllclJ1bGVJbmRleCwgQWRhcHRlci0+UGFja0luZm9bdWlTZkluZGV4XS51bFNGSUQpOwogCQkJCWJDbGFzc2lmaWNhdGlvblN1Y2NlZWQgPSBFVGhDU0NsYXNzaWZ5UGt0KEFkYXB0ZXIsIHNrYiwgJnN0RXRoQ3NQa3RJbmZvLCBwc3RDbGFzc2lmaWVyUnVsZSwgQWRhcHRlci0+UGFja0luZm9bdWlTZkluZGV4XS5iRXRoQ1NTdXBwb3J0KTsKIAotCQkJCWlmICghYkNsYXNzaWZpY2F0aW9uU3VjY2VlZCkKLQkJCQl7CisJCQkJaWYgKCFiQ2xhc3NpZmljYXRpb25TdWNjZWVkKSB7CiAJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIkNsYXNzaWZ5UGFja2V0IDogRXRoZXJuZXQgQ1MgQ2xhc3NpZmljYXRpb24gRmFpbGVkXG4iKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJfQotCi0JCQllbHNlIC8vIE5vIEVUSCBTdXBwb3J0ZWQgb24gdGhpcyBTRgotCQkJewotCQkJCWlmIChlRXRoT3RoZXJGcmFtZSAhPSBzdEV0aENzUGt0SW5mby5lTndwa3RFdGhGcmFtZVR5cGUpCi0JCQkJeworCQkJfSBlbHNlIHsJLy8gTm8gRVRIIFN1cHBvcnRlZCBvbiB0aGlzIFNGCisJCQkJaWYgKGVFdGhPdGhlckZyYW1lICE9IHN0RXRoQ3NQa3RJbmZvLmVOd3BrdEV0aEZyYW1lVHlwZSkgewogCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIiBDbGFzc2lmeVBhY2tldCA6IFBhY2tldCBOb3QgYSA4MDIuMyBFdGhlcm5ldCBGcmFtZS4uLiBoZW5jZSBub3QgYWxsb3dlZCBvdmVyIG5vbi1FVEggQ1MgU0ZcbiIpOwogCQkJCQliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gZmFsc2U7CiAJCQkJCWJyZWFrOwpAQCAtNTc3LDExICs1MjcsOSBAQAogCiAJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgICJQcm9jZWVkaW5nIHRvIElQIENTIENsYXNpZmljYXRpb24iKTsKIAotCQkJaWYgKEFkYXB0ZXItPlBhY2tJbmZvW3VpU2ZJbmRleF0uYklQQ1NTdXBwb3J0KQotCQkJeworCQkJaWYgKEFkYXB0ZXItPlBhY2tJbmZvW3VpU2ZJbmRleF0uYklQQ1NTdXBwb3J0KSB7CiAKLQkJCQlpZiAoc3RFdGhDc1BrdEluZm8uZU53cGt0SVBGcmFtZVR5cGUgPT0gZU5vbklQUGFja2V0KQotCQkJCXsKKwkJCQlpZiAoc3RFdGhDc1BrdEluZm8uZU53cGt0SVBGcmFtZVR5cGUgPT0gZU5vbklQUGFja2V0KSB7CiAJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiIENsYXNzaWZ5UGFja2V0IDogUGFja2V0IGlzIE5vdCBhbiBJUCBQYWNrZXRcbiIpOwogCQkJCQliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gZmFsc2U7CiAJCQkJCWJyZWFrOwpAQCAtNTk4LDMxICs1NDYsMjYgQEAKIAkJfSB3aGlsZSAoMCk7CiAJfQogCi0JaWYgKGJDbGFzc2lmaWNhdGlvblN1Y2NlZWQgPT0gVFJVRSkKLQl7CisJaWYgKGJDbGFzc2lmaWNhdGlvblN1Y2NlZWQgPT0gVFJVRSkgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIkNGIGlkIDogJWQsIFNGIElEIGlzID0lbHUiLCBwc3RDbGFzc2lmaWVyUnVsZS0+dWlDbGFzc2lmaWVyUnVsZUluZGV4LCBwc3RDbGFzc2lmaWVyUnVsZS0+dWxTRklEKTsKIAogCQkvL1N0b3JlIFRoZSBtYXRjaGVkIENsYXNzaWZpZXIgaW4gU0tCCiAJCSooKFVJTlQzMiopKHNrYi0+Y2IpK1NLQl9DQl9DTEFTU0lGSUNBVElPTl9PRkZTRVQpID0gcHN0Q2xhc3NpZmllclJ1bGUtPnVpQ2xhc3NpZmllclJ1bGVJbmRleDsKLQkJaWYgKChUQ1AgPT0gcElwSGVhZGVyLT5wcm90b2NvbCkgJiYgIWJGcmFnbWVudGVkUGt0ICYmIChFVEhfQU5EX0lQX0hFQURFUl9MRU4gKyBUQ1BfSEVBREVSX0xFTiA8PSBza2ItPmxlbikpCi0JCXsKKwkJaWYgKChUQ1AgPT0gcElwSGVhZGVyLT5wcm90b2NvbCkgJiYgIWJGcmFnbWVudGVkUGt0ICYmIChFVEhfQU5EX0lQX0hFQURFUl9MRU4gKyBUQ1BfSEVBREVSX0xFTiA8PSBza2ItPmxlbikpIHsKIAkJCSBJcEhlYWRlckxlbmd0aCAgID0gcElwSGVhZGVyLT5paGw7CiAJCQkgcFRjcEhlYWRlciA9IChzdHJ1Y3QgYmNtX3RjcF9oZWFkZXIgKikoKChQVUNIQVIpcElwSGVhZGVyKSsoSXBIZWFkZXJMZW5ndGgqNCkpOwogCQkJIFRjcEhlYWRlckxlbmd0aCAgPSBHRVRfVENQX0hFQURFUl9MRU4ocFRjcEhlYWRlci0+SGVhZGVyTGVuZ3RoKTsKIAogCQkJaWYgKChwVGNwSGVhZGVyLT51Y0ZsYWdzICYgVENQX0FDSykgJiYKIAkJCSAgIChudG9ocyhwSXBIZWFkZXItPnRvdF9sZW4pID09IChJcEhlYWRlckxlbmd0aCo0KSsoVGNwSGVhZGVyTGVuZ3RoKjQpKSkKLQkJCXsKIAkJCQkqKChVSU5UMzIqKSAoc2tiLT5jYikgKyBTS0JfQ0JfVENQQUNLX09GRlNFVCkgPSBUQ1BfQUNLOwotCQkJfQogCQl9CiAKIAkJdXNJbmRleCA9IFNlYXJjaFNmaWQoQWRhcHRlciwgcHN0Q2xhc3NpZmllclJ1bGUtPnVsU0ZJRCk7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiaW5kZXggaXMJPSVkIiwgdXNJbmRleCk7CiAKIAkJLy9JZiB0aGlzIGlzIHRoZSBmaXJzdCBmcmFnbWVudCBvZiBhIEZyYWdtZW50ZWQgcGt0LCBhZGQgdGhpcyBDRi4gT25seSBUaGlzIENGIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgb3RoZXIgZnJhZ21lbnQgb2YgdGhpcyBQa3QuCi0JCWlmIChiRnJhZ21lbnRlZFBrdCAmJiAodXNDdXJyRnJhZ21lbnQgPT0gMCkpCi0JCXsKKwkJaWYgKGJGcmFnbWVudGVkUGt0ICYmICh1c0N1cnJGcmFnbWVudCA9PSAwKSkgewogCQkJLy9GaXJzdCBGcmFnbWVudCBvZiBGcmFnbWVudGVkIFBhY2tldC4gQ3JlYXRlIEZyYWcgQ0xTIEVudHJ5CiAJCQlzdHJ1Y3QgYmNtX2ZyYWdtZW50ZWRfcGFja2V0X2luZm8gc3RGcmFnUGt0SW5mbzsKIAkJCXN0RnJhZ1BrdEluZm8uYlVzZWQgPSBUUlVFOwpAQCAtNjQ4LDkgKzU5MSw4IEBACiAJc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIgPSBHRVRfQkNNX0FEQVBURVIoZ2JscG5ldGRldik7CiAJaWYgKHBzdENsYXNzaWZpZXJSdWxlLT51Y0V0aENTU3JjTUFDTGVuID09IDApCiAJCXJldHVybiBUUlVFOwotCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUkVTU19TSVpFOyBpKyspCi0JeworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IE1BQ19BRERSRVNTX1NJWkU7IGkrKykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgICJTUkMgTUFDWyV4XSA9ICV4IENsYXNzaWZpZXJSdWxlU3JjTUFDID0gJXggTWFzayA6ICV4XG4iLCBpLCBNYWNbaV0sIHBzdENsYXNzaWZpZXJSdWxlLT5hdThFVGhDU1NyY01BQ1tpXSwgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEVUaENTU3JjTUFDTWFza1tpXSk7CiAJCWlmICgocHN0Q2xhc3NpZmllclJ1bGUtPmF1OEVUaENTU3JjTUFDW2ldICYgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEVUaENTU3JjTUFDTWFza1tpXSkgIT0KIAkJCShNYWNbaV0gJiBwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RVRoQ1NTcmNNQUNNYXNrW2ldKSkKQEAgLTY2NSw5ICs2MDcsOCBAQAogCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyID0gR0VUX0JDTV9BREFQVEVSKGdibHBuZXRkZXYpOwogCWlmIChwc3RDbGFzc2lmaWVyUnVsZS0+dWNFdGhDU0Rlc3RNQUNMZW4gPT0gMCkKIAkJcmV0dXJuIFRSVUU7Ci0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFDX0FERFJFU1NfU0laRTsgaSsrKQotCXsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IE1BQ19BRERSRVNTX1NJWkU7IGkrKykgewogCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgIlNSQyBNQUNbJXhdID0gJXggQ2xhc3NpZmllclJ1bGVTcmNNQUMgPSAleCBNYXNrIDogJXhcbiIsIGksIE1hY1tpXSwgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEVUaENTRGVzdE1BQ1tpXSwgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEVUaENTRGVzdE1BQ01hc2tbaV0pOwogCQlpZiAoKHBzdENsYXNzaWZpZXJSdWxlLT5hdThFVGhDU0Rlc3RNQUNbaV0gJiBwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RVRoQ1NEZXN0TUFDTWFza1tpXSkgIT0KIAkJCShNYWNbaV0gJiBwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RVRoQ1NEZXN0TUFDTWFza1tpXSkpCkBAIC02ODMsMTAgKzYyNCw5IEBACiAJCShwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RXRoQ1NFdGhlclR5cGVbMF0gPT0gMCkpCiAJCXJldHVybiBUUlVFOwogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICAiJXMgU3JjRXRoZXJUeXBlOiV4IENMUyBFdGhlclR5cGVbMF06JXhcbiIsIF9fRlVOQ1RJT05fXywgcHN0RXRoQ3NQa3RJbmZvLT51c0V0aGVyVHlwZSwgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzBdKTsKLQlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzBdID09IDEpCi0JewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgICIlcyAgQ0xTIEV0aGVyVHlwZVsxXToleCBFdGhlclR5cGVbMl06JXhcbiIsIF9fRlVOQ1RJT05fXywgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzFdLCBwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RXRoQ1NFdGhlclR5cGVbMl0pOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzIFNyY0V0aGVyVHlwZToleCBDTFMgRXRoZXJUeXBlWzBdOiV4XG4iLCBfX2Z1bmNfXywgcHN0RXRoQ3NQa3RJbmZvLT51c0V0aGVyVHlwZSwgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzBdKTsKKwlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzBdID09IDEpIHsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICAiJXMgIENMUyBFdGhlclR5cGVbMV06JXggRXRoZXJUeXBlWzJdOiV4XG4iLCBfX2Z1bmNfXywgcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzFdLCBwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RXRoQ1NFdGhlclR5cGVbMl0pOwogCiAJCWlmIChtZW1jbXAoJnBzdEV0aENzUGt0SW5mby0+dXNFdGhlclR5cGUsICZwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RXRoQ1NFdGhlclR5cGVbMV0sIDIpID09IDApCiAJCQlyZXR1cm4gVFJVRTsKQEAgLTY5NCwxMiArNjM0LDExIEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKHBzdENsYXNzaWZpZXJSdWxlLT5hdThFdGhDU0V0aGVyVHlwZVswXSA9PSAyKQotCXsKKwlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzBdID09IDIpIHsKIAkJaWYgKGVFdGg4MDJMTENGcmFtZSAhPSBwc3RFdGhDc1BrdEluZm8tPmVOd3BrdEV0aEZyYW1lVHlwZSkKIAkJCXJldHVybiBmYWxzZTsKIAotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIElQVjRfREJHLCBEQkdfTFZMX0FMTCwgICIlcyAgRXRoQ1MgRFNBUDoleCBFdGhlclR5cGVbMl06JXhcbiIsIF9fRlVOQ1RJT05fXywgcHN0RXRoQ3NQa3RJbmZvLT51Y0RTQVAsIHBzdENsYXNzaWZpZXJSdWxlLT5hdThFdGhDU0V0aGVyVHlwZVsyXSk7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzICBFdGhDUyBEU0FQOiV4IEV0aGVyVHlwZVsyXToleFxuIiwgX19mdW5jX18sIHBzdEV0aENzUGt0SW5mby0+dWNEU0FQLCBwc3RDbGFzc2lmaWVyUnVsZS0+YXU4RXRoQ1NFdGhlclR5cGVbMl0pOwogCQlpZiAocHN0RXRoQ3NQa3RJbmZvLT51Y0RTQVAgPT0gcHN0Q2xhc3NpZmllclJ1bGUtPmF1OEV0aENTRXRoZXJUeXBlWzJdKQogCQkJcmV0dXJuIFRSVUU7CiAJCWVsc2UKQEAgLTcxOCwxMSArNjU3LDEwIEBACiAJQl9VSU5UOCB1UHJpb3JpdHkgPSAwOwogCXN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyID0gR0VUX0JDTV9BREFQVEVSKGdibHBuZXRkZXYpOwogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICAiJXMgIENMUyBVc2VyUHJpbzoleCBDTFMgVkxBTklEOiV4XG4iLCBfX0ZVTkNUSU9OX18sIG50b2hzKCooKFVTSE9SVCAqKXBzdENsYXNzaWZpZXJSdWxlLT51c1VzZXJQcmlvcml0eSkpLCBwc3RDbGFzc2lmaWVyUnVsZS0+dXNWTEFOSUQpOworCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzICBDTFMgVXNlclByaW86JXggQ0xTIFZMQU5JRDoleFxuIiwgX19mdW5jX18sIG50b2hzKCooKFVTSE9SVCAqKXBzdENsYXNzaWZpZXJSdWxlLT51c1VzZXJQcmlvcml0eSkpLCBwc3RDbGFzc2lmaWVyUnVsZS0+dXNWTEFOSUQpOwogCiAJLyogSW4gY2FzZSBGVyBkaWRuJ3QgcmVjZWl2ZSB0aGUgVExWLCB0aGUgcHJpb3JpdHkgZmllbGQgc2hvdWxkIGJlIGlnbm9yZWQgKi8KLQlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPnVzVmFsaWRpdHlCaXRNYXAgJiAoMTw8UEtUX0NMQVNTSUZJQ0FUSU9OX1VTRVJfUFJJT1JJVFlfVkFMSUQpKQotCXsKKwlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPnVzVmFsaWRpdHlCaXRNYXAgJiAoMTw8UEtUX0NMQVNTSUZJQ0FUSU9OX1VTRVJfUFJJT1JJVFlfVkFMSUQpKSB7CiAJCWlmIChwc3RFdGhDc1BrdEluZm8tPmVOd3BrdEV0aEZyYW1lVHlwZSAhPSBlRXRoODAyUVZMQU5GcmFtZSkKIAkJCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTczOSwxNCArNjc3LDEzIEBACiAKIAliQ2xhc3NpZmljYXRpb25TdWNjZWVkID0gZmFsc2U7CiAKLQlpZiAocHN0Q2xhc3NpZmllclJ1bGUtPnVzVmFsaWRpdHlCaXRNYXAgJiAoMTw8UEtUX0NMQVNTSUZJQ0FUSU9OX1ZMQU5JRF9WQUxJRCkpCi0JeworCWlmIChwc3RDbGFzc2lmaWVyUnVsZS0+dXNWYWxpZGl0eUJpdE1hcCAmICgxPDxQS1RfQ0xBU1NJRklDQVRJT05fVkxBTklEX1ZBTElEKSkgewogCQlpZiAocHN0RXRoQ3NQa3RJbmZvLT5lTndwa3RFdGhGcmFtZVR5cGUgIT0gZUV0aDgwMlFWTEFORnJhbWUpCiAJCQkJcmV0dXJuIGZhbHNlOwogCiAJCXVzVkxBTklEID0gbnRvaHMoKihVU0hPUlQgKikoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBiY21fZXRoX2hlYWRlcikpKSAmIDB4RkZGOwogCi0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIiVzICBQa3QgVkxBTklEICV4IFByaW9yaXR5OiAlZFxuIiwgX19GVU5DVElPTl9fLCB1c1ZMQU5JRCwgdVByaW9yaXR5KTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICAiJXMgIFBrdCBWTEFOSUQgJXggUHJpb3JpdHk6ICVkXG4iLCBfX2Z1bmNfXywgdXNWTEFOSUQsIHVQcmlvcml0eSk7CiAKIAkJaWYgKHVzVkxBTklEID09ICgocHN0Q2xhc3NpZmllclJ1bGUtPnVzVkxBTklEICYgMHhGRkYwKSA+PiA0KSkKIAkJCWJDbGFzc2lmaWNhdGlvblN1Y2NlZWQgPSBUUlVFOwpAQCAtODAwLDMyICs3MzcsMjQgQEAKIAlVU0hPUlQgdTE2RXR5cGUgPSBudG9ocygoKHN0cnVjdCBiY21fZXRoX2hlYWRlciAqKXB2RXRoUGF5bG9hZCktPnUxNkV0eXBlKTsKIAogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAgIkV0aENTR2V0UGt0SW5mbyA6IEV0aCBIZHIgVHlwZSA6ICVYXG4iLCB1MTZFdHlwZSk7Ci0JaWYgKHUxNkV0eXBlID4gMHg1ZGMpCi0JeworCWlmICh1MTZFdHlwZSA+IDB4NWRjKSB7CiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiRXRoQ1NHZXRQa3RJbmZvIDogRVRIMiBGcmFtZVxuIik7CiAJCS8vRVRIMiBGcmFtZQotCQlpZiAodTE2RXR5cGUgPT0gRVRIRVJORVRfRlJBTUVUWVBFXzgwMlFWTEFOKQotCQl7CisJCWlmICh1MTZFdHlwZSA9PSBFVEhFUk5FVF9GUkFNRVRZUEVfODAyUVZMQU4pIHsKIAkJCS8vODAyLjFRIFZMQU4gSGVhZGVyCiAJCQlwc3RFdGhDc1BrdEluZm8tPmVOd3BrdEV0aEZyYW1lVHlwZSA9IGVFdGg4MDJRVkxBTkZyYW1lOwogCQkJdTE2RXR5cGUgPSAoKHN0cnVjdCBiY21fZXRoX3FfZnJhbWUgKilwdkV0aFBheWxvYWQpLT5FdGhUeXBlOwogCQkJLy8oKEVUSF9DU184MDJfUV9GUkFNRSopcHZFdGhQYXlsb2FkKS0+VXNlclByaW9yaXR5Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQlwc3RFdGhDc1BrdEluZm8tPmVOd3BrdEV0aEZyYW1lVHlwZSA9IGVFdGhPdGhlckZyYW1lOwogCQkJdTE2RXR5cGUgPSBudG9ocyh1MTZFdHlwZSk7CiAJCX0KLQotCX0KLQllbHNlCi0JeworCX0gZWxzZSB7CiAJCS8vODAyLjIgTExDCiAJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgSVBWNF9EQkcsIERCR19MVkxfQUxMLCAiODAyLjIgTExDIEZyYW1lXG4iKTsKIAkJcHN0RXRoQ3NQa3RJbmZvLT5lTndwa3RFdGhGcmFtZVR5cGUgPSBlRXRoODAyTExDRnJhbWU7CiAJCXBzdEV0aENzUGt0SW5mby0+dWNEU0FQID0gKChzdHJ1Y3QgYmNtX2V0aF9sbGNfZnJhbWUgKilwdkV0aFBheWxvYWQpLT5EU0FQOwotCQlpZiAocHN0RXRoQ3NQa3RJbmZvLT51Y0RTQVAgPT0gMHhBQSAmJiAoKHN0cnVjdCBiY21fZXRoX2xsY19mcmFtZSAqKXB2RXRoUGF5bG9hZCktPlNTQVAgPT0gMHhBQSkKLQkJeworCQlpZiAocHN0RXRoQ3NQa3RJbmZvLT51Y0RTQVAgPT0gMHhBQSAmJiAoKHN0cnVjdCBiY21fZXRoX2xsY19mcmFtZSAqKXB2RXRoUGF5bG9hZCktPlNTQVAgPT0gMHhBQSkgewogCQkJLy9TTkFQIEZyYW1lCiAJCQlwc3RFdGhDc1BrdEluZm8tPmVOd3BrdEV0aEZyYW1lVHlwZSA9IGVFdGg4MDJMTENTTkFQRnJhbWU7CiAJCQl1MTZFdHlwZSA9ICgoc3RydWN0IGJjbV9ldGhfbGxjX3NuYXBfZnJhbWUgKilwdkV0aFBheWxvYWQpLT51c0V0aGVyVHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vVHJhbnNtaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vVHJhbnNtaXQuYwppbmRleCAyZWQ0ODM2Li40OTc2NzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL1RyYW5zbWl0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9UcmFuc21pdC5jCkBAIC00NiwxMiArNDYsMTQgQEAKIAogCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgVFhfQ09OVFJPTCwgREJHX0xWTF9BTEwsICJUeCIpOwogCWlmICghcENvbnRyb2xQYWNrZXQgfHwgIUFkYXB0ZXIpIHsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBUWF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgIkdvdCBOVUxMIENvbnRyb2wgUGFja2V0IG9yIEFkYXB0ZXIiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBUWF9DT05UUk9MLCBEQkdfTFZMX0FMTCwKKwkJCQkiR290IE5VTEwgQ29udHJvbCBQYWNrZXQgb3IgQWRhcHRlciIpOwogCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAJfQogCWlmICgoYXRvbWljX3JlYWQoJkFkYXB0ZXItPkN1cnJOdW1GcmVlVHhEZXNjKSA8CiAJCQkoKFBMZWFkZXItPlBMZW5ndGgtMSkvTUFYX0RFVklDRV9ERVNDX1NJWkUpKzEpKQl7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9UWCwgVFhfQ09OVFJPTCwgREJHX0xWTF9BTEwsICJOTyBGUkVFIERFU0NSSVBUT1JTIFRPIFNFTkQgQ09OVFJPTCBQQUNLRVQiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBUWF9DT05UUk9MLCBEQkdfTFZMX0FMTCwKKwkJCQkiTk8gRlJFRSBERVNDUklQVE9SUyBUTyBTRU5EIENPTlRST0wgUEFDS0VUIik7CiAJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKIAl9CiAKQEAgLTEwOSw3ICsxMTEsOCBAQAogCQkJKFVJTlQgKikmUGFja2V0LT5sZW4sIEFkYXB0ZXItPlBhY2tJbmZvW1F1ZXVlSW5kZXhdLmJFdGhDU1N1cHBvcnQpOwogCiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIE5FWFRfU0VORCwgREJHX0xWTF9BTEwsICJQSFMgVHJhbnNtaXQgZmFpbGVkLi5cbiIpOworCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIE5FWFRfU0VORCwgREJHX0xWTF9BTEwsCisJCQkJIlBIUyBUcmFuc21pdCBmYWlsZWQuLlxuIik7CiAJCWdvdG8gZXJyRXhpdDsKIAl9CiAKQEAgLTIxNywxMiArMjIwLDE1IEBACiAJCQlBZGFwdGVyLT5MaW5rU3RhdHVzID09IFNZTkNfVVBfUkVRVUVTVCAmJgogCQkJIUFkYXB0ZXItPmJTeW5jVXBSZXF1ZXN0U2VudCkgewogCi0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIFRYX1BBQ0tFVFMsIERCR19MVkxfQUxMLCAiQ2FsbGluZyBMaW5rTWVzc2FnZSIpOworCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBUWF9QQUNLRVRTLAorCQkJCQlEQkdfTFZMX0FMTCwgIkNhbGxpbmcgTGlua01lc3NhZ2UiKTsKIAkJCUxpbmtNZXNzYWdlKEFkYXB0ZXIpOwogCQl9CiAKIAkJaWYgKChBZGFwdGVyLT5JZGxlTW9kZSB8fCBBZGFwdGVyLT5iU2h1dFN0YXR1cykgJiYgYXRvbWljX3JlYWQoJkFkYXB0ZXItPlRvdGFsUGFja2V0Q291bnQpKSB7Ci0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIFRYX1BBQ0tFVFMsIERCR19MVkxfQUxMLCAiRGV2aWNlIGluIExvdyBQb3dlciBtb2RlLi4ud2FraW5nIHVwIik7CisJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsCisJCQkJCVRYX1BBQ0tFVFMsIERCR19MVkxfQUxMLAorCQkJCQkiRGV2aWNlIGluIExvdyBQb3dlciBtb2RlLi4ud2FraW5nIHVwIik7CiAJCQlBZGFwdGVyLT51c0lkbGVNb2RlUGF0dGVybiA9IEFCT1JUX0lETEVfTU9ERTsKIAkJCUFkYXB0ZXItPmJXYWtlVXBEZXZpY2UgPSBUUlVFOwogCQkJd2FrZV91cCgmQWRhcHRlci0+cHJvY2Vzc19yeF9jbnRybHBrdCk7CkBAIC0yMzIsNyArMjM4LDggQEAKIAkJYXRvbWljX3NldCgmQWRhcHRlci0+VHhQa3RBdmFpbCwgMCk7CiAJfQogCi0JQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBUWF9QQUNLRVRTLCBEQkdfTFZMX0FMTCwgIkV4aXRpbmcgdGhlIHR4IHRocmVhZC4uXG4iKTsKKwlCQ01fREVCVUdfUFJJTlQoQWRhcHRlciwgREJHX1RZUEVfVFgsIFRYX1BBQ0tFVFMsIERCR19MVkxfQUxMLAorCQkJIkV4aXRpbmcgdGhlIHR4IHRocmVhZC4uXG4iKTsKIAlBZGFwdGVyLT50cmFuc21pdF9wYWNrZXRfdGhyZWFkID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vaG9zdG1pYnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vaG9zdG1pYnMuYwppbmRleCAzOWFjZTU1Li40MmQ5MDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL2hvc3RtaWJzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9ob3N0bWlicy5jCkBAIC05LDM3ICs5LDQwIEBACiAKICNpbmNsdWRlICJoZWFkZXJzLmgiCiAKLUlOVCBQcm9jZXNzR2V0SG9zdE1pYnMoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsIHN0cnVjdCBiY21faG9zdF9zdGF0c19taWJzICpwc3RIb3N0TWlicykKK0lOVCBQcm9jZXNzR2V0SG9zdE1pYnMoc3RydWN0IGJjbV9taW5pX2FkYXB0ZXIgKkFkYXB0ZXIsCisJCSAgICAgICBzdHJ1Y3QgYmNtX2hvc3Rfc3RhdHNfbWlicyAqcHN0SG9zdE1pYnMpCiB7CiAJc3RydWN0IGJjbV9waHNfZW50cnkgKnBzdFNlcnZpY2VGbG93RW50cnkgPSBOVUxMOwogCXN0cnVjdCBiY21fcGhzX3J1bGUgKnBzdFBoc1J1bGUgPSBOVUxMOwogCXN0cnVjdCBiY21fcGhzX2NsYXNzaWZpZXJfdGFibGUgKnBzdENsYXNzaWZpZXJUYWJsZSA9IE5VTEw7CiAJc3RydWN0IGJjbV9waHNfY2xhc3NpZmllcl9lbnRyeSAqcHN0Q2xhc3NpZmllclJ1bGUgPSBOVUxMOwotCXN0cnVjdCBiY21fcGhzX2V4dGVuc2lvbiAqcERldmljZUV4dGVuc2lvbiA9IChzdHJ1Y3QgYmNtX3Boc19leHRlbnNpb24gKikgJkFkYXB0ZXItPnN0QkNNUGhzQ29udGV4dDsKLQotCVVJTlQgbkNsYXNzaWZpZXJJbmRleCA9IDAsIG5QaHNUYWJsZUluZGV4ID0gMCwgblNmSW5kZXggPSAwLCB1aUluZGV4ID0gMDsKKwlzdHJ1Y3QgYmNtX3Boc19leHRlbnNpb24gKnBEZXZpY2VFeHRlbnNpb24gPSAmQWRhcHRlci0+c3RCQ01QaHNDb250ZXh0OworCVVJTlQgbkNsYXNzaWZpZXJJbmRleCA9IDA7CisJVUlOVCBuUGhzVGFibGVJbmRleCA9IDA7CisJVUlOVCBuU2ZJbmRleCA9IDA7CisJVUlOVCB1aUluZGV4ID0gMDsKIAogCWlmIChwRGV2aWNlRXh0ZW5zaW9uID09IE5VTEwpIHsKLQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX09USEVSUywgSE9TVF9NSUJTLCBEQkdfTFZMX0FMTCwgIkludmFsaWQgRGV2aWNlIEV4dGVuc2lvblxuIik7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLCBEQkdfVFlQRV9PVEhFUlMsIEhPU1RfTUlCUywKKwkJCQlEQkdfTFZMX0FMTCwgIkludmFsaWQgRGV2aWNlIEV4dGVuc2lvblxuIik7CiAJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKIAl9CiAKIAkvKiBDb3B5IHRoZSBjbGFzc2lmaWVyIFRhYmxlICovCi0JZm9yIChuQ2xhc3NpZmllckluZGV4ID0gMDsgbkNsYXNzaWZpZXJJbmRleCA8IE1BWF9DTEFTU0lGSUVSUzsgbkNsYXNzaWZpZXJJbmRleCsrKSB7CisJZm9yIChuQ2xhc3NpZmllckluZGV4ID0gMDsgbkNsYXNzaWZpZXJJbmRleCA8IE1BWF9DTEFTU0lGSUVSUzsKKwkJCQkJCQluQ2xhc3NpZmllckluZGV4KyspIHsKIAkJaWYgKEFkYXB0ZXItPmFzdENsYXNzaWZpZXJUYWJsZVtuQ2xhc3NpZmllckluZGV4XS5iVXNlZCA9PSBUUlVFKQotCQkJbWVtY3B5KChQVk9JRCkgJnBzdEhvc3RNaWJzLT4KLQkJCSAgICAgICBhc3RDbGFzc2lmaWVyVGFibGVbbkNsYXNzaWZpZXJJbmRleF0sCi0JCQkgICAgICAgKFBWT0lEKSAmQWRhcHRlci0+Ci0JCQkgICAgICAgYXN0Q2xhc3NpZmllclRhYmxlW25DbGFzc2lmaWVySW5kZXhdLAorCQkJbWVtY3B5KCZwc3RIb3N0TWlicy0+YXN0Q2xhc3NpZmllclRhYmxlW25DbGFzc2lmaWVySW5kZXhdLAorCQkJICAgICAgICZBZGFwdGVyLT5hc3RDbGFzc2lmaWVyVGFibGVbbkNsYXNzaWZpZXJJbmRleF0sCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiY21fbWlic19jbGFzc2lmaWVyX3J1bGUpKTsKIAl9CiAKIAkvKiBDb3B5IHRoZSBTRiBUYWJsZSAqLwogCWZvciAoblNmSW5kZXggPSAwOyBuU2ZJbmRleCA8IE5PX09GX1FVRVVFUzsgblNmSW5kZXgrKykgewogCQlpZiAoQWRhcHRlci0+UGFja0luZm9bblNmSW5kZXhdLmJWYWxpZCkgewotCQkJbWVtY3B5KChQVk9JRCkgJnBzdEhvc3RNaWJzLT5hc3RTRnRhYmxlW25TZkluZGV4XSwKLQkJCSAgICAgICAoUFZPSUQpICZBZGFwdGVyLT5QYWNrSW5mb1tuU2ZJbmRleF0sCi0JCQkJc2l6ZW9mKHN0cnVjdCBiY21fbWlic190YWJsZSkpOworCQkJbWVtY3B5KCZwc3RIb3N0TWlicy0+YXN0U0Z0YWJsZVtuU2ZJbmRleF0sCisJCQkgICAgICAgJkFkYXB0ZXItPlBhY2tJbmZvW25TZkluZGV4XSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGJjbV9taWJzX3RhYmxlKSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBJZiBpbmRleCBpbiBub3QgdmFsaWQsCiAJCQkgKiBkb24ndCBwcm9jZXNzIHRoaXMgZm9yIHRoZSBQSFMgdGFibGUuCkBAIC02OCw5ICs3MSw5IEBACiAJCQkJcHN0SG9zdE1pYnMtPmFzdFBoc1J1bGVzVGFibGVbblBoc1RhYmxlSW5kZXhdLgogCQkJCSAgICB1bFNGSUQgPSBBZGFwdGVyLT5QYWNrSW5mb1tuU2ZJbmRleF0udWxTRklEOwogCi0JCQkJbWVtY3B5KCZwc3RIb3N0TWlicy0+Ci0JCQkJICAgICAgIGFzdFBoc1J1bGVzVGFibGVbblBoc1RhYmxlSW5kZXhdLnU4UEhTSSwKLQkJCQkgICAgICAgJnBzdFBoc1J1bGUtPnU4UEhTSSwgc2l6ZW9mKHN0cnVjdCBiY21fcGhzX3J1bGUpKTsKKwkJCQltZW1jcHkoJnBzdEhvc3RNaWJzLT5hc3RQaHNSdWxlc1RhYmxlW25QaHNUYWJsZUluZGV4XS51OFBIU0ksCisJCQkJICAgICAgICZwc3RQaHNSdWxlLT51OFBIU0ksCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmNtX3Boc19ydWxlKSk7CiAJCQkJblBoc1RhYmxlSW5kZXgrKzsKIAogCQkJfQpAQCAtODIsMjYgKzg1LDMyIEBACiAJLyogQ29weSBvdGhlciBIb3N0IFN0YXRpc3RpY3MgcGFyYW1ldGVycyAqLwogCXBzdEhvc3RNaWJzLT5zdEhvc3RJbmZvLkdvb2RUcmFuc21pdHMgPSBBZGFwdGVyLT5kZXYtPnN0YXRzLnR4X3BhY2tldHM7CiAJcHN0SG9zdE1pYnMtPnN0SG9zdEluZm8uR29vZFJlY2VpdmVzID0gQWRhcHRlci0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzOwotCXBzdEhvc3RNaWJzLT5zdEhvc3RJbmZvLkN1cnJOdW1GcmVlRGVzYyA9IGF0b21pY19yZWFkKCZBZGFwdGVyLT5DdXJyTnVtRnJlZVR4RGVzYyk7CisJcHN0SG9zdE1pYnMtPnN0SG9zdEluZm8uQ3Vyck51bUZyZWVEZXNjID0KKwkJCQlhdG9taWNfcmVhZCgmQWRhcHRlci0+Q3Vyck51bUZyZWVUeERlc2MpOwogCXBzdEhvc3RNaWJzLT5zdEhvc3RJbmZvLkJFQnVja2V0U2l6ZSA9IEFkYXB0ZXItPkJFQnVja2V0U2l6ZTsKIAlwc3RIb3N0TWlicy0+c3RIb3N0SW5mby5ydFBTQnVja2V0U2l6ZSA9IEFkYXB0ZXItPnJ0UFNCdWNrZXRTaXplOwogCXBzdEhvc3RNaWJzLT5zdEhvc3RJbmZvLlRpbWVyQWN0aXZlID0gQWRhcHRlci0+VGltZXJBY3RpdmU7CiAJcHN0SG9zdE1pYnMtPnN0SG9zdEluZm8udTMyVG90YWxEU0QgPSBBZGFwdGVyLT51MzJUb3RhbERTRDsKIAotCW1lbWNweShwc3RIb3N0TWlicy0+c3RIb3N0SW5mby5hVHhQa3RTaXplSGlzdCwgQWRhcHRlci0+YVR4UGt0U2l6ZUhpc3QsIHNpemVvZihVSU5UMzIpICogTUlCU19NQVhfSElTVF9FTlRSSUVTKTsKLQltZW1jcHkocHN0SG9zdE1pYnMtPnN0SG9zdEluZm8uYVJ4UGt0U2l6ZUhpc3QsIEFkYXB0ZXItPmFSeFBrdFNpemVIaXN0LCBzaXplb2YoVUlOVDMyKSAqIE1JQlNfTUFYX0hJU1RfRU5UUklFUyk7CisJbWVtY3B5KHBzdEhvc3RNaWJzLT5zdEhvc3RJbmZvLmFUeFBrdFNpemVIaXN0LCBBZGFwdGVyLT5hVHhQa3RTaXplSGlzdCwKKwkgICAgICAgc2l6ZW9mKFVJTlQzMikgKiBNSUJTX01BWF9ISVNUX0VOVFJJRVMpOworCW1lbWNweShwc3RIb3N0TWlicy0+c3RIb3N0SW5mby5hUnhQa3RTaXplSGlzdCwgQWRhcHRlci0+YVJ4UGt0U2l6ZUhpc3QsCisJICAgICAgIHNpemVvZihVSU5UMzIpICogTUlCU19NQVhfSElTVF9FTlRSSUVTKTsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIAotVk9JRCBHZXREcm9wcGVkQXBwQ250cmxQa3RNaWJzKHN0cnVjdCBiY21faG9zdF9zdGF0c19taWJzICpwc3RIb3N0TWlicywgc3RydWN0IGJjbV90YXJhbmdfZGF0YSAqcFRhcmFuZykKK1ZPSUQgR2V0RHJvcHBlZEFwcENudHJsUGt0TWlicyhzdHJ1Y3QgYmNtX2hvc3Rfc3RhdHNfbWlicyAqcHN0SG9zdE1pYnMsCisJCQkgICAgICAgc3RydWN0IGJjbV90YXJhbmdfZGF0YSAqcFRhcmFuZykKIHsKIAltZW1jcHkoJihwc3RIb3N0TWlicy0+c3REcm9wcGVkQXBwQ250cmxNc2dzKSwKIAkgICAgICAgJihwVGFyYW5nLT5zdERyb3BwZWRBcHBDbnRybE1zZ3MpLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGJjbV9taWJzX2Ryb3BwZWRfY250cmxfbXNnKSk7CiB9CiAKLVZPSUQgQ29weU1JQlNFeHRlbmRlZFNGUGFyYW1ldGVycyhzdHJ1Y3QgYmNtX21pbmlfYWRhcHRlciAqQWRhcHRlciwgc3RydWN0IGJjbV9jb25uZWN0X21ncl9wYXJhbXMgKnBzZkxvY2FsU2V0LCBVSU5UIHVpU2VhcmNoUnVsZUluZGV4KQorVk9JRCBDb3B5TUlCU0V4dGVuZGVkU0ZQYXJhbWV0ZXJzKHN0cnVjdCBiY21fbWluaV9hZGFwdGVyICpBZGFwdGVyLAorCQkJCSAgc3RydWN0IGJjbV9jb25uZWN0X21ncl9wYXJhbXMgKnBzZkxvY2FsU2V0LAorCQkJCSAgVUlOVCB1aVNlYXJjaFJ1bGVJbmRleCkKIHsKIAlzdHJ1Y3QgYmNtX21pYnNfcGFyYW1ldGVycyAqdCA9ICZBZGFwdGVyLT5QYWNrSW5mb1t1aVNlYXJjaFJ1bGVJbmRleF0uc3RNaWJzRXh0U2VydmljZUZsb3dUYWJsZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCmluZGV4IDcwM2M1ZDQuLjVkNTY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKQEAgLTE2MCwxNiArMTYwLDE4IEBACiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdmFyaW91cyBzaW1wbGUgSVNBIG9yIFBDLzEwNCBEaWdpdGFsIEkvTyBib2FyZHMuCiAJICBUaGVzZSBib2FyZHMgYWxsIHVzZSA4LWJpdCBJL08gcG9ydHMuCiAKLQkgIEFkdmFudGVjaCBQQ0wtNzMwICAgaXNvbGF0ZWQgLSAxNiBpbi8xNiBvdXQgIHR0bCAtIDE2IGluLzE2IG91dAotCSAgSUNQIElTTy03MzAgICAgICAgICBpc29sYXRlZCAtIDE2IGluLzE2IG91dCAgdHRsIC0gMTYgaW4vMTYgb3V0Ci0JICBBRGxpbmsgQUNMLTcxMzAgICAgIGlzb2xhdGVkIC0gMTYgaW4vMTYgb3V0ICB0dGwgLSAxNiBpbi8xNiBvdXQKLQkgIEFkdmFudGVjaCBQQ00tMzczMCAgaXNvbGF0ZWQgLSA4IGluLzggb3V0ICAgIHR0bCAtIDE2IGluLzE2IG91dAotCSAgQWR2YW50ZWNoIFBDTC03MjUgICBpc29sYXRlZCAtIDggaW4vOCBvdXQKLQkgIElDUCBQOFI4LURJTyAgICAgICAgaXNvbGF0ZWQgLSA4IGluLzggb3V0Ci0JICBBRGxpbmsgQUNMLTcyMjViICAgIGlzb2xhdGVkIC0gMTYgaW4vMTYgb3V0Ci0JICBJQ1AgUDE2UjE2LURJTyAgICAgIGlzb2xhdGVkIC0gMTYgaW4vMTYgb3V0Ci0JICBBZHZhbnRlY2ggUENMLTczMyAgIGlzb2xhdGVkIC0gMzIgaW4KLQkgIEFkdmFudGVjaCBQQ0wtNzM0ICAgaXNvbGF0ZWQgLSAzMiBvdXQKKwkgIEFkdmFudGVjaCBQQ0wtNzMwICAgICAgICAgICAgIGlzbyAtIDE2IGluLzE2IG91dCAgdHRsIC0gMTYgaW4vMTYgb3V0CisJICBJQ1AgSVNPLTczMCAgICAgICAgICAgICAgICAgICBpc28gLSAxNiBpbi8xNiBvdXQgIHR0bCAtIDE2IGluLzE2IG91dAorCSAgQURsaW5rIEFDTC03MTMwICAgICAgICAgICAgICAgaXNvIC0gMTYgaW4vMTYgb3V0ICB0dGwgLSAxNiBpbi8xNiBvdXQKKwkgIEFkdmFudGVjaCBQQ00tMzczMCAgICAgICAgICAgIGlzbyAtIDggaW4vOCBvdXQgICAgdHRsIC0gMTYgaW4vMTYgb3V0CisJICBBZHZhbnRlY2ggUENMLTcyNSAgICAgICAgICAgICBpc28gLSA4IGluLzggb3V0CisJICBJQ1AgUDhSOC1ESU8gICAgICAgICAgICAgICAgICBpc28gLSA4IGluLzggb3V0CisJICBBRGxpbmsgQUNMLTcyMjViICAgICAgICAgICAgICBpc28gLSAxNiBpbi8xNiBvdXQKKwkgIElDUCBQMTZSMTYtRElPICAgICAgICAgICAgICAgIGlzbyAtIDE2IGluLzE2IG91dAorCSAgQWR2YW50ZWNoIFBDTC03MzMgICAgICAgICAgICAgaXNvIC0gMzIgaW4KKwkgIEFkdmFudGVjaCBQQ0wtNzM0ICAgICAgICAgICAgIGlzbyAtIDMyIG91dAorCSAgRGlhbW9uZCBTeXN0ZW1zIE9QTU0tMTYxNi1YVCAgaXNvIC0gMTYgaW4vMTYgb3V0CisJICBEaWFtb25kIFN5c3RlbXMgUEVBUkwtTU0tUCAgICBpc28gLSAxNiBvdXQKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgcGNsNzMwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9UT0RPCmluZGV4IGZhOGRhOWEuLmI2OGZiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL1RPRE8KQEAgLTMsNyArMyw2IEBACiAJLSBMaW5kZW50CiAJLSByZW1vdmUgYWxsIHdyYXBwZXJzCiAJLSBhdWRpdCB1c2Vyc3BhY2UgaW50ZXJmYWNlCi0JLSByZXNlcnZlIG1ham9yIG51bWJlcgogCS0gY2xlYW51cCB0aGUgaW5kaXZpZHVhbCBjb21lZGkgZHJpdmVycyBhcyB3ZWxsCiAKIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9idWYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2J1Zi5jCmluZGV4IDI1NzU5NTAuLmRmNGE5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2J1Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2J1Zi5jCkBAIC0xODMsOSArMTgzLDkgQEAKIAlyZXR1cm4gYm07CiB9CiAKLWJvb2wgY29tZWRpX2J1Zl9pc19tbWFwcGVkKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQorYm9vbCBjb21lZGlfYnVmX2lzX21tYXBwZWQoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0Jc3RydWN0IGNvbWVkaV9idWZfbWFwICpibSA9IGFzeW5jLT5idWZfbWFwOworCXN0cnVjdCBjb21lZGlfYnVmX21hcCAqYm0gPSBzLT5hc3luYy0+YnVmX21hcDsKIAogCXJldHVybiBibSAmJiAoYXRvbWljX3JlYWQoJmJtLT5yZWZjb3VudC5yZWZjb3VudCkgPiAxKTsKIH0KQEAgLTIyMiw4ICsyMjIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21lZGlfYnVmX3Jlc2V0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQordm9pZCBjb21lZGlfYnVmX3Jlc2V0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogeworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisKIAlhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ID0gMDsKIAlhc3luYy0+YnVmX3dyaXRlX2NvdW50ID0gMDsKIAlhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQgPSAwOwpAQCAtMjQxLDE4ICsyNDMsMjAgQEAKIAlhc3luYy0+ZXZlbnRzID0gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQorc3RhdGljIHVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogeworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CiAJdW5zaWduZWQgaW50IGZyZWVfZW5kID0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50ICsgYXN5bmMtPnByZWFsbG9jX2J1ZnN6OwogCiAJcmV0dXJuIGZyZWVfZW5kIC0gYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2NvbWVkaV9idWZfd3JpdGVfYWxsb2Moc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsCitzdGF0aWMgdW5zaWduZWQgaW50IF9fY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLAogCQkJCQkgICAgIGludCBzdHJpY3QpCiB7Ci0JdW5zaWduZWQgaW50IGF2YWlsYWJsZSA9IGNvbWVkaV9idWZfd3JpdGVfbl9hdmFpbGFibGUoYXN5bmMpOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJdW5zaWduZWQgaW50IGF2YWlsYWJsZSA9IGNvbWVkaV9idWZfd3JpdGVfbl9hdmFpbGFibGUocyk7CiAKIAlpZiAobmJ5dGVzID4gYXZhaWxhYmxlKQogCQluYnl0ZXMgPSBzdHJpY3QgPyAwIDogYXZhaWxhYmxlOwpAQCAtMjY5LDEwICsyNzMsMTAgQEAKIH0KIAogLyogYWxsb2NhdGVzIGNodW5rIGZvciB0aGUgd3JpdGVyIGZyb20gZnJlZSBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLAordW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Moc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JcmV0dXJuIF9fY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhhc3luYywgbmJ5dGVzLCAwKTsKKwlyZXR1cm4gX19jb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMsIG5ieXRlcywgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfYnVmX3dyaXRlX2FsbG9jKTsKIApAQCAtMjgwLDEwICsyODQsMTAgQEAKICAqIG11bmdpbmcgaXMgYXBwbGllZCB0byBkYXRhIGJ5IGNvcmUgYXMgaXQgcGFzc2VzIGJldHdlZW4gdXNlcgogICogYW5kIGtlcm5lbCBzcGFjZQogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvbWVkaV9idWZfbXVuZ2Uoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbWVkaV9idWZfbXVuZ2Uoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gYXN5bmMtPnN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJY29uc3QgdW5zaWduZWQgbnVtX3NhbXBsZV9ieXRlcyA9IGJ5dGVzX3Blcl9zYW1wbGUocyk7CiAKQEAgLTMyMywyMyArMzI3LDI2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2FsbG9jYXRlZChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogeworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisKIAlyZXR1cm4gYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQ7CiB9CiAKIC8qIHRyYW5zZmVycyBhIGNodW5rIGZyb20gd3JpdGVyIHRvIGZpbGxlZCBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2ZyZWUoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JdW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IGNvbWVkaV9idWZfd3JpdGVfbl9hbGxvY2F0ZWQoYXN5bmMpOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJdW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IGNvbWVkaV9idWZfd3JpdGVfbl9hbGxvY2F0ZWQocyk7CiAKIAlpZiAobmJ5dGVzID4gYWxsb2NhdGVkKQogCQluYnl0ZXMgPSBhbGxvY2F0ZWQ7CiAKIAlhc3luYy0+YnVmX3dyaXRlX2NvdW50ICs9IG5ieXRlczsKIAlhc3luYy0+YnVmX3dyaXRlX3B0ciArPSBuYnl0ZXM7Ci0JY29tZWRpX2J1Zl9tdW5nZShhc3luYywgYXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIGFzeW5jLT5tdW5nZV9jb3VudCk7CisJY29tZWRpX2J1Zl9tdW5nZShzLCBhc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gYXN5bmMtPm11bmdlX2NvdW50KTsKIAlpZiAoYXN5bmMtPmJ1Zl93cml0ZV9wdHIgPj0gYXN5bmMtPnByZWFsbG9jX2J1ZnN6KQogCQlhc3luYy0+YnVmX3dyaXRlX3B0ciAlPSBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CiAKQEAgLTM0Nyw4ICszNTQsOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY29tZWRpX2J1Zl93cml0ZV9mcmVlKTsKIAotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAl1bnNpZ25lZCBudW1fYnl0ZXM7CiAKIAlpZiAoIWFzeW5jKQpAQCAtMzY3LDkgKzM3NSwxMCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKTsKIAogLyogYWxsb2NhdGVzIGEgY2h1bmsgZm9yIHRoZSByZWFkZXIgZnJvbSBmaWxsZWQgKGFuZCBtdW5nZWQpIGJ1ZmZlciBzcGFjZSAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfcmVhZF9hbGxvYyhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfYWxsb2Moc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXVuc2lnbmVkIGludCBhdmFpbGFibGU7CiAKIAlhdmFpbGFibGUgPSBhc3luYy0+bXVuZ2VfY291bnQgLSBhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQ7CkBAIC0zOTQsOSArNDAzLDEwIEBACiB9CiAKIC8qIHRyYW5zZmVycyBjb250cm9sIG9mIGEgY2h1bmsgZnJvbSByZWFkZXIgdG8gZnJlZSBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCQkgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkOwogCiAJLyoKQEAgLTQxNiwzNiArNDI2LDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfYnVmX3JlYWRfZnJlZSk7CiAKLWludCBjb21lZGlfYnVmX3B1dChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgc2hvcnQgeCkKK2ludCBjb21lZGlfYnVmX3B1dChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgc2hvcnQgeCkKIHsKLQl1bnNpZ25lZCBpbnQgbiA9IF9fY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhhc3luYywgc2l6ZW9mKHNob3J0KSwgMSk7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwl1bnNpZ25lZCBpbnQgbiA9IF9fY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLCBzaXplb2Yoc2hvcnQpLCAxKTsKIAogCWlmIChuIDwgc2l6ZW9mKHNob3J0KSkgewogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKIAkJcmV0dXJuIDA7CiAJfQogCSoodW5zaWduZWQgc2hvcnQgKikoYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5idWZfd3JpdGVfcHRyKSA9IHg7Ci0JY29tZWRpX2J1Zl93cml0ZV9mcmVlKGFzeW5jLCBzaXplb2Yoc2hvcnQpKTsKKwljb21lZGlfYnVmX3dyaXRlX2ZyZWUocywgc2l6ZW9mKHNob3J0KSk7CiAJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfYnVmX3B1dCk7CiAKLWludCBjb21lZGlfYnVmX2dldChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgc2hvcnQgKngpCitpbnQgY29tZWRpX2J1Zl9nZXQoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIHNob3J0ICp4KQogewotCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGFzeW5jKTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHMpOwogCiAJaWYgKG4gPCBzaXplb2Yoc2hvcnQpKQogCQlyZXR1cm4gMDsKLQljb21lZGlfYnVmX3JlYWRfYWxsb2MoYXN5bmMsIHNpemVvZihzaG9ydCkpOworCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLCBzaXplb2Yoc2hvcnQpKTsKIAkqeCA9ICoodW5zaWduZWQgc2hvcnQgKikoYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5idWZfcmVhZF9wdHIpOwotCWNvbWVkaV9idWZfcmVhZF9mcmVlKGFzeW5jLCBzaXplb2Yoc2hvcnQpKTsKKwljb21lZGlfYnVmX3JlYWRfZnJlZShzLCBzaXplb2Yoc2hvcnQpKTsKIAlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV9idWZfZ2V0KTsKIAotdm9pZCBjb21lZGlfYnVmX21lbWNweV90byhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCiB7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAl1bnNpZ25lZCBpbnQgd3JpdGVfcHRyID0gYXN5bmMtPmJ1Zl93cml0ZV9wdHIgKyBvZmZzZXQ7CiAKIAlpZiAod3JpdGVfcHRyID49IGFzeW5jLT5wcmVhbGxvY19idWZzeikKQEAgLTQ2OSwxMCArNDgyLDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfYnVmX21lbWNweV90byk7CiAKLXZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCSAgICB2b2lkICpkZXN0LCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXZvaWQgKnNyYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXVuc2lnbmVkIGludCByZWFkX3B0ciA9IGFzeW5jLT5idWZfcmVhZF9wdHIgKyBvZmZzZXQ7CiAKIAlpZiAocmVhZF9wdHIgPj0gYXN5bmMtPnByZWFsbG9jX2J1ZnN6KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IGFjYzgwMTkuLjlkOTlmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTIzOCw5ICsyMzgsOSBAQAogfQogCiBzdGF0aWMgaW50IHJlc2l6ZV9hc3luY19idWZmZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgbmV3X3NpemUpCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIG5ld19zaXplKQogeworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CiAJaW50IHJldHZhbDsKIAogCWlmIChuZXdfc2l6ZSA+IGFzeW5jLT5tYXhfYnVmc2l6ZSkKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQkJInN1YmRldmljZSBpcyBidXN5LCBjYW5ub3QgcmVzaXplIGJ1ZmZlclxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWlmIChjb21lZGlfYnVmX2lzX21tYXBwZWQoYXN5bmMpKSB7CisJaWYgKGNvbWVkaV9idWZfaXNfbW1hcHBlZChzKSkgewogCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAogCQkJInN1YmRldmljZSBpcyBtbWFwcGVkLCBjYW5ub3QgcmVzaXplIGJ1ZmZlclxuIik7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0zODAsNyArMzgwLDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlzID0gY29tZWRpX3JlYWRfc3ViZGV2aWNlKGRldiwgbWlub3IpOwogCWlmIChzICYmIChzLT5zdWJkZXZfZmxhZ3MgJiBTREZfQ01EX1JFQUQpICYmIHMtPmFzeW5jKQotCQllcnIgPSByZXNpemVfYXN5bmNfYnVmZmVyKGRldiwgcywgcy0+YXN5bmMsIHNpemUpOworCQllcnIgPSByZXNpemVfYXN5bmNfYnVmZmVyKGRldiwgcywgc2l6ZSk7CiAJZWxzZQogCQllcnIgPSAtRUlOVkFMOwogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CkBAIC00OTMsNyArNDkzLDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlzID0gY29tZWRpX3dyaXRlX3N1YmRldmljZShkZXYsIG1pbm9yKTsKIAlpZiAocyAmJiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0NNRF9XUklURSkgJiYgcy0+YXN5bmMpCi0JCWVyciA9IHJlc2l6ZV9hc3luY19idWZmZXIoZGV2LCBzLCBzLT5hc3luYywgc2l6ZSk7CisJCWVyciA9IHJlc2l6ZV9hc3luY19idWZmZXIoZGV2LCBzLCBzaXplKTsKIAllbHNlCiAJCWVyciA9IC1FSU5WQUw7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKQEAgLTU4Myw3ICs1ODMsNyBAQAogCiAJY29tZWRpX3NldF9zdWJkZXZpY2VfcnVuZmxhZ3MocywgU1JGX1JVTk5JTkcsIDApOwogCWlmIChhc3luYykgewotCQljb21lZGlfYnVmX3Jlc2V0KGFzeW5jKTsKKwkJY29tZWRpX2J1Zl9yZXNldChzKTsKIAkJYXN5bmMtPmludHRyaWcgPSBOVUxMOwogCQlrZnJlZShhc3luYy0+Y21kLmNoYW5saXN0KTsKIAkJYXN5bmMtPmNtZC5jaGFubGlzdCA9IE5VTEw7CkBAIC02MzUsNyArNjM1LDcgQEAKIAkJcyA9ICZkZXYtPnN1YmRldmljZXNbaV07CiAJCWlmIChzLT5idXN5KQogCQkJcmV0dXJuIDE7Ci0JCWlmIChzLT5hc3luYyAmJiBjb21lZGlfYnVmX2lzX21tYXBwZWQocy0+YXN5bmMpKQorCQlpZiAocy0+YXN5bmMgJiYgY29tZWRpX2J1Zl9pc19tbWFwcGVkKHMpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC02NjgsNiArNjY4LDcgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCWlmIChkZXYtPmF0dGFjaGVkKSB7CiAJCQlzdHJ1Y3QgbW9kdWxlICpkcml2ZXJfbW9kdWxlID0gZGV2LT5kcml2ZXItPm1vZHVsZTsKKwogCQkJY29tZWRpX2RldmljZV9kZXRhY2goZGV2KTsKIAkJCW1vZHVsZV9wdXQoZHJpdmVyX21vZHVsZSk7CiAJCX0KQEAgLTc0MCw3ICs3NDEsNyBAQAogCX0KIAogCWlmIChiYy5zaXplKSB7Ci0JCXJldHZhbCA9IHJlc2l6ZV9hc3luY19idWZmZXIoZGV2LCBzLCBhc3luYywgYmMuc2l6ZSk7CisJCXJldHZhbCA9IHJlc2l6ZV9hc3luY19idWZmZXIoZGV2LCBzLCBiYy5zaXplKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1cm4gcmV0dmFsOwogCX0KQEAgLTk5Miw4ICs5OTMsOCBAQAogCQlyZXR1cm4gLUVBQ0NFUzsKIAogCWlmIChiaS5ieXRlc19yZWFkICYmIChzLT5zdWJkZXZfZmxhZ3MgJiBTREZfQ01EX1JFQUQpKSB7Ci0JCWJpLmJ5dGVzX3JlYWQgPSBjb21lZGlfYnVmX3JlYWRfYWxsb2MoYXN5bmMsIGJpLmJ5dGVzX3JlYWQpOwotCQljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgYmkuYnl0ZXNfcmVhZCk7CisJCWJpLmJ5dGVzX3JlYWQgPSBjb21lZGlfYnVmX3JlYWRfYWxsb2MocywgYmkuYnl0ZXNfcmVhZCk7CisJCWNvbWVkaV9idWZfcmVhZF9mcmVlKHMsIGJpLmJ5dGVzX3JlYWQpOwogCiAJCWlmIChjb21lZGlfaXNfc3ViZGV2aWNlX2lkbGUocykgJiYKIAkJICAgIGFzeW5jLT5idWZfd3JpdGVfY291bnQgPT0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50KSB7CkBAIC0xMDAzLDggKzEwMDQsOCBAQAogCiAJaWYgKGJpLmJ5dGVzX3dyaXR0ZW4gJiYgKHMtPnN1YmRldl9mbGFncyAmIFNERl9DTURfV1JJVEUpKSB7CiAJCWJpLmJ5dGVzX3dyaXR0ZW4gPQotCQkgICAgY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhhc3luYywgYmkuYnl0ZXNfd3JpdHRlbik7Ci0JCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgYmkuYnl0ZXNfd3JpdHRlbik7CisJCSAgICBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMsIGJpLmJ5dGVzX3dyaXR0ZW4pOworCQljb21lZGlfYnVmX3dyaXRlX2ZyZWUocywgYmkuYnl0ZXNfd3JpdHRlbik7CiAJfQogCiBjb3B5YmFja19wb3NpdGlvbjoKQEAgLTE0MzUsMTMgKzE0MzYsMTUgQEAKIAlzID0gJmRldi0+c3ViZGV2aWNlc1tjbWQtPnN1YmRldl07CiAKIAlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9VTlVTRUQpIHsKLQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwgIiVkIG5vdCB2YWxpZCBzdWJkZXZpY2VcbiIsIGNtZC0+c3ViZGV2KTsKKwkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwgIiVkIG5vdCB2YWxpZCBzdWJkZXZpY2VcbiIsCisJCQljbWQtPnN1YmRldik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmICghcy0+ZG9fY21kIHx8ICFzLT5kb19jbWR0ZXN0IHx8ICFzLT5hc3luYykgewogCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAotCQkJInN1YmRldmljZSAlZCBkb2VzIG5vdCBzdXBwb3J0IGNvbW1hbmRzXG4iLCBjbWQtPnN1YmRldik7CisJCQkic3ViZGV2aWNlICVkIGRvZXMgbm90IHN1cHBvcnQgY29tbWFuZHNcbiIsCisJCQljbWQtPnN1YmRldik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTU1NCw3ICsxNTU3LDcgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWNvbWVkaV9idWZfcmVzZXQoYXN5bmMpOworCWNvbWVkaV9idWZfcmVzZXQocyk7CiAKIAlhc3luYy0+Y2JfbWFzayA9CiAJICAgIENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRVJST1IgfApAQCAtMTU5Nyw3ICsxNjAwLDYgQEAKIHsKIAlzdHJ1Y3QgY29tZWRpX2NtZCBjbWQ7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JdW5zaWduZWQgaW50ICpjaGFubGlzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IF9fdXNlciAqdXNlcl9jaGFubGlzdDsKIAlpbnQgcmV0OwogCkBAIC0xNjI2LDggKzE2MjgsNiBAQAogCQlyZXQgPSAtRUZBVUxUOwogCX0KIAotCWtmcmVlKGNoYW5saXN0KTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwMjksMTggKzIwMjksMTggQEAKIAlpZiAocyAmJiBzLT5hc3luYykgewogCQlwb2xsX3dhaXQoZmlsZSwgJnMtPmFzeW5jLT53YWl0X2hlYWQsIHdhaXQpOwogCQlpZiAoIXMtPmJ1c3kgfHwgIWNvbWVkaV9pc19zdWJkZXZpY2VfcnVubmluZyhzKSB8fAotCQkgICAgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHMtPmFzeW5jKSA+IDApCisJCSAgICBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUocykgPiAwKQogCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCX0KIAogCXMgPSBjb21lZGlfd3JpdGVfc3ViZGV2aWNlKGRldiwgbWlub3IpOwogCWlmIChzICYmIHMtPmFzeW5jKSB7Ci0JCXVuc2lnbmVkIGludCBicHMgPSBieXRlc19wZXJfc2FtcGxlKHMtPmFzeW5jLT5zdWJkZXZpY2UpOworCQl1bnNpZ25lZCBpbnQgYnBzID0gYnl0ZXNfcGVyX3NhbXBsZShzKTsKIAogCQlwb2xsX3dhaXQoZmlsZSwgJnMtPmFzeW5jLT53YWl0X2hlYWQsIHdhaXQpOwotCQljb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCQljb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMsIHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeik7CiAJCWlmICghcy0+YnVzeSB8fCAhY29tZWRpX2lzX3N1YmRldmljZV9ydW5uaW5nKHMpIHx8Ci0JCSAgICBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKHMtPmFzeW5jKSA+PSBicHMpCisJCSAgICBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKHMpID49IGJwcykKIAkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CiAJfQogCkBAIC0yMTM2LDkgKzIxMzYsOSBAQAogCQltID0gbjsKIAkJaWYgKGFzeW5jLT5idWZfd3JpdGVfcHRyICsgbSA+IGFzeW5jLT5wcmVhbGxvY19idWZzeikKIAkJCW0gPSBhc3luYy0+cHJlYWxsb2NfYnVmc3ogLSBhc3luYy0+YnVmX3dyaXRlX3B0cjsKLQkJY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhhc3luYywgYXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKLQkJaWYgKG0gPiBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKGFzeW5jKSkKLQkJCW0gPSBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKGFzeW5jKTsKKwkJY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOworCQlpZiAobSA+IGNvbWVkaV9idWZfd3JpdGVfbl9hbGxvY2F0ZWQocykpCisJCQltID0gY29tZWRpX2J1Zl93cml0ZV9uX2FsbG9jYXRlZChzKTsKIAkJaWYgKG0gPCBuKQogCQkJbiA9IG07CiAKQEAgLTIxNjcsNyArMjE2Nyw3IEBACiAJCQluIC09IG07CiAJCQlyZXR2YWwgPSAtRUZBVUxUOwogCQl9Ci0JCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgbik7CisJCWNvbWVkaV9idWZfd3JpdGVfZnJlZShzLCBuKTsKIAogCQljb3VudCArPSBuOwogCQluYnl0ZXMgLT0gbjsKQEAgLTIyMjksNyArMjIyOSw3IEBACiAKIAkJbiA9IG5ieXRlczsKIAotCQltID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGFzeW5jKTsKKwkJbSA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzKTsKIAkJLyogcHJpbnRrKCIlZCBhdmFpbGFibGVcbiIsbSk7ICovCiAJCWlmIChhc3luYy0+YnVmX3JlYWRfcHRyICsgbSA+IGFzeW5jLT5wcmVhbGxvY19idWZzeikKIAkJCW0gPSBhc3luYy0+cHJlYWxsb2NfYnVmc3ogLSBhc3luYy0+YnVmX3JlYWRfcHRyOwpAQCAtMjI3Miw4ICsyMjcyLDggQEAKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCX0KIAotCQljb21lZGlfYnVmX3JlYWRfYWxsb2MoYXN5bmMsIG4pOwotCQljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgbik7CisJCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLCBuKTsKKwkJY29tZWRpX2J1Zl9yZWFkX2ZyZWUocywgbik7CiAKIAkJY291bnQgKz0gbjsKIAkJbmJ5dGVzIC09IG47CkBAIC0yMzI3LDQ2ICsyMzI3LDEyIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIFRoaXMgaXMgc2xpZ2h0bHkgaGFja3ksIGJ1dCB3ZSB3YW50IG1vZHVsZSBhdXRvbG9hZGluZwotCSAqIHRvIHdvcmsgZm9yIHJvb3QuCi0JICogY2FzZTogdXNlciBvcGVucyBkZXZpY2UsIGF0dGFjaGVkIC0+IG9rCi0JICogY2FzZTogdXNlciBvcGVucyBkZXZpY2UsIHVuYXR0YWNoZWQsICFpbl9yZXF1ZXN0X21vZHVsZSAtPiBhdXRvbG9hZAotCSAqIGNhc2U6IHVzZXIgb3BlbnMgZGV2aWNlLCB1bmF0dGFjaGVkLCBpbl9yZXF1ZXN0X21vZHVsZSAtPiBmYWlsCi0JICogY2FzZTogcm9vdCBvcGVucyBkZXZpY2UsIGF0dGFjaGVkIC0+IG9rCi0JICogY2FzZTogcm9vdCBvcGVucyBkZXZpY2UsIHVuYXR0YWNoZWQsIGluX3JlcXVlc3RfbW9kdWxlIC0+IG9rCi0JICogICAodHlwaWNhbGx5IGNhbGxlZCBmcm9tIG1vZHByb2JlKQotCSAqIGNhc2U6IHJvb3Qgb3BlbnMgZGV2aWNlLCB1bmF0dGFjaGVkLCAhaW5fcmVxdWVzdF9tb2R1bGUgLT4gYXV0b2xvYWQKLQkgKgotCSAqIFRoZSBsYXN0IGNvdWxkIGJlIGNoYW5nZWQgdG8gIi0+IG9rIiwgd2hpY2ggd291bGQgZGVueSByb290Ci0JICogYXV0b2xvYWRpbmcuCi0JICovCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JaWYgKGRldi0+YXR0YWNoZWQpCi0JCWdvdG8gb2s7Ci0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmIGRldi0+aW5fcmVxdWVzdF9tb2R1bGUpIHsKLQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwgImluIHJlcXVlc3QgbW9kdWxlXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGNhcGFibGUoQ0FQX05FVF9BRE1JTikgJiYgZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSkKLQkJZ290byBvazsKLQotCWRldi0+aW5fcmVxdWVzdF9tb2R1bGUgPSB0cnVlOwotCi0jaWZkZWYgQ09ORklHX0tNT0QKLQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCXJlcXVlc3RfbW9kdWxlKCJjaGFyLW1ham9yLSVpLSVpIiwgQ09NRURJX01BSk9SLCBkZXYtPm1pbm9yKTsKLQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLSNlbmRpZgotCi0JZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSA9IGZhbHNlOwotCiAJaWYgKCFkZXYtPmF0dGFjaGVkICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CiAJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsICJub3QgYXR0YWNoZWQgYW5kIG5vdCBDQVBfTkVUX0FETUlOXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci1vazoKIAlpZiAoZGV2LT5hdHRhY2hlZCAmJiBkZXYtPnVzZV9jb3VudCA9PSAwKSB7CiAJCWlmICghdHJ5X21vZHVsZV9nZXQoZGV2LT5kcml2ZXItPm1vZHVsZSkpIHsKIAkJCXJjID0gLUVOT1NZUzsKQEAgLTI2NTQsNiArMjYyMCw3IEBACiAJLyogY3JlYXRlIGRldmljZXMgZmlsZXMgZm9yIGxlZ2FjeS9tYW51YWwgdXNlICovCiAJZm9yIChpID0gMDsgaSA8IGNvbWVkaV9udW1fbGVnYWN5X21pbm9yczsgaSsrKSB7CiAJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CisKIAkJZGV2ID0gY29tZWRpX2FsbG9jX2JvYXJkX21pbm9yKE5VTEwpOwogCQlpZiAoSVNfRVJSKGRldikpIHsKIAkJCWNvbWVkaV9jbGVhbnVwX2JvYXJkX21pbm9ycygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ludGVybmFsLmgKaW5kZXggYTQ5MmYyZC4uZTk3OGMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9pbnRlcm5hbC5oCkBAIC0xNSwxMyArMTUsMTMgQEAKIAogaW50IGNvbWVkaV9idWZfYWxsb2Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7Ci12b2lkIGNvbWVkaV9idWZfcmVzZXQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwotYm9vbCBjb21lZGlfYnVmX2lzX21tYXBwZWQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwordm9pZCBjb21lZGlfYnVmX3Jlc2V0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2Jvb2wgY29tZWRpX2J1Zl9pc19tbWFwcGVkKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIHZvaWQgY29tZWRpX2J1Zl9tYXBfZ2V0KHN0cnVjdCBjb21lZGlfYnVmX21hcCAqYm0pOwogaW50IGNvbWVkaV9idWZfbWFwX3B1dChzdHJ1Y3QgY29tZWRpX2J1Zl9tYXAgKmJtKTsKIHN0cnVjdCBjb21lZGlfYnVmX21hcCAqY29tZWRpX2J1Zl9tYXBfZnJvbV9zdWJkZXZfZ2V0KAogCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7Ci11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2FsbG9jYXRlZChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2FsbG9jYXRlZChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiB2b2lkIGNvbWVkaV9kZXZpY2VfY2FuY2VsX2FsbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBjb21lZGlfZGVmYXVsdF9idWZfc2l6ZV9rYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oCmluZGV4IGQ0NjEyM2EuLjhmNGU0NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaApAQCAtMTA4LDggKzEwOCw2IEBACiB9OwogCiBzdHJ1Y3QgY29tZWRpX2FzeW5jIHsKLQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOwotCiAJdm9pZCAqcHJlYWxsb2NfYnVmOwkvKiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBwcmVhbGxvY19idWZzejsJLyogYnVmZmVyIHNpemUsIGluIGJ5dGVzICovCiAJc3RydWN0IGNvbWVkaV9idWZfbWFwICpidWZfbWFwOwkvKiBtYXAgb2YgYnVmZmVyIHBhZ2VzICovCkBAIC0xODIsNyArMTgwLDYgQEAKIAljb25zdCBjaGFyICpib2FyZF9uYW1lOwogCWNvbnN0IHZvaWQgKmJvYXJkX3B0cjsKIAlib29sIGF0dGFjaGVkOjE7Ci0JYm9vbCBpbl9yZXF1ZXN0X21vZHVsZToxOwogCWJvb2wgaW9lbmFibGVkOjE7CiAJc3BpbmxvY2tfdCBzcGlubG9jazsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CkBAIC0zMzYsMTkgKzMzMywxOSBAQAogICovCiBpbnQgY29tZWRpX3NldF9od19kZXYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqaHdfZGV2KTsKIAotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Moc3RydWN0IGNvbWVkaV9hc3luYyAqLCB1bnNpZ25lZCBpbnQpOwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICosIHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IG4pOwordW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfZnJlZShzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IG4pOwogCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKik7Ci11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKiwgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICosIHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfYWxsb2Moc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCBuKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IG4pOwogCi1pbnQgY29tZWRpX2J1Zl9wdXQoc3RydWN0IGNvbWVkaV9hc3luYyAqLCB1bnNpZ25lZCBzaG9ydCk7Ci1pbnQgY29tZWRpX2J1Zl9nZXQoc3RydWN0IGNvbWVkaV9hc3luYyAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKK2ludCBjb21lZGlfYnVmX3B1dChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgc2hvcnQgeCk7CitpbnQgY29tZWRpX2J1Zl9nZXQoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIHNob3J0ICp4KTsKIAotdm9pZCBjb21lZGlfYnVmX21lbWNweV90byhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkgIGNvbnN0IHZvaWQgKnNvdXJjZSwgdW5zaWduZWQgaW50IG51bV9ieXRlcyk7Ci12b2lkIGNvbWVkaV9idWZfbWVtY3B5X2Zyb20oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCit2b2lkIGNvbWVkaV9idWZfbWVtY3B5X2Zyb20oc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkgICAgdm9pZCAqZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwogCiAvKiBkcml2ZXJzLmMgLSBnZW5lcmFsIGNvbWVkaSBkcml2ZXIgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jCmluZGV4IGFiMGU4ZWQuLjI5OTcyNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jCkBAIC0yNTgsNiArMjU4LDcgQEAKIAljb25zdCB1bnNpZ25lZCBiYXNlX2JpdGZpZWxkX2NoYW5uZWwgPQogCSAgICAoY2hhbiA8IGNoYW5uZWxzX3Blcl9iaXRmaWVsZCkgPyAwIDogY2hhbjsKIAl1bnNpZ25lZCBpbnQgbmV3X2RhdGFbMl07CisKIAltZW1zZXQobmV3X2RhdGEsIDAsIHNpemVvZihuZXdfZGF0YSkpOwogCW1lbXNldCgmbmV3X2luc24sIDAsIHNpemVvZihuZXdfaW5zbikpOwogCW5ld19pbnNuLmluc24gPSBJTlNOX0JJVFM7CkBAIC0zMDYsNyArMzA3LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhc3luYy0+d2FpdF9oZWFkKTsKLQlhc3luYy0+c3ViZGV2aWNlID0gczsKIAlzLT5hc3luYyA9IGFzeW5jOwogCiAJYXN5bmMtPm1heF9idWZzaXplID0gY29tZWRpX2RlZmF1bHRfYnVmX21heHNpemVfa2IgKiAxMDI0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjUzLmgKaW5kZXggZTNkNzM3Yy4uNTgyOWI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1My5oCkBAIC0zMCwxMDYgKzMwLDExIEBACiAjZGVmaW5lIEk4MjU0X09TQ19CQVNFXzJNSFoJCTUwMAogI2RlZmluZSBJODI1NF9PU0NfQkFTRV8xTUhaCQkxMDAwCiAKLSNkZWZpbmUgaTgyNTNfY2FzY2FkZV9uc190b190aW1lciBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYKLQotc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdl9vbGQoaW50IGk4MjUzX29zY19iYXNlLAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50ICpkMSwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZDIsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKm5hbm9zZWMsCi0JCQkJCQkgICAgICBpbnQgcm91bmRfbW9kZSkKLXsKLQlpbnQgZGl2aWRlcjsKLQlpbnQgZGl2MSwgZGl2MjsKLQlpbnQgZGl2MV9nbGIsIGRpdjJfZ2xiLCBuc19nbGI7Ci0JaW50IGRpdjFfbHViLCBkaXYyX2x1YiwgbnNfbHViOwotCWludCBuczsKLQotCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBpODI1M19vc2NfYmFzZSAvIDIpIC8gaTgyNTNfb3NjX2Jhc2U7Ci0KLQkvKiBmaW5kIDIgaW50ZWdlcnMgMTw9e3gseX08PTY1NTM2IHN1Y2ggdGhhdCB4KnkgaXMKLQkgICBjbG9zZSB0byBkaXZpZGVyICovCi0KLQlkaXYxX2x1YiA9IGRpdjJfbHViID0gMDsKLQlkaXYxX2dsYiA9IGRpdjJfZ2xiID0gMDsKLQotCW5zX2dsYiA9IDA7Ci0JbnNfbHViID0gMHhmZmZmZmZmZjsKLQotCWRpdjIgPSAweDEwMDAwOwotCWZvciAoZGl2MSA9IGRpdmlkZXIgLyA2NTUzNiArIDE7IGRpdjEgPCBkaXYyOyBkaXYxKyspIHsKLQkJZGl2MiA9IGRpdmlkZXIgLyBkaXYxOwotCi0JCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKLQkJaWYgKG5zIDw9ICpuYW5vc2VjICYmIG5zID4gbnNfZ2xiKSB7Ci0JCQluc19nbGIgPSBuczsKLQkJCWRpdjFfZ2xiID0gZGl2MTsKLQkJCWRpdjJfZ2xiID0gZGl2MjsKLQkJfQotCi0JCWRpdjIrKzsKLQkJaWYgKGRpdjIgPD0gNjU1MzYpIHsKLQkJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKLQkJCWlmIChucyA+ICpuYW5vc2VjICYmIG5zIDwgbnNfbHViKSB7Ci0JCQkJbnNfbHViID0gbnM7Ci0JCQkJZGl2MV9sdWIgPSBkaXYxOwotCQkJCWRpdjJfbHViID0gZGl2MjsKLQkJCX0KLQkJfQotCX0KLQotCSpuYW5vc2VjID0gZGl2MV9sdWIgKiBkaXYyX2x1YiAqIGk4MjUzX29zY19iYXNlOwotCSpkMSA9IGRpdjFfbHViICYgMHhmZmZmOwotCSpkMiA9IGRpdjJfbHViICYgMHhmZmZmOwotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfcG93ZXIoaW50IGk4MjUzX29zY19iYXNlLAotCQkJCQkJICAgdW5zaWduZWQgaW50ICpkMSwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCAqZDIsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgKm5hbm9zZWMsCi0JCQkJCQkgICBpbnQgcm91bmRfbW9kZSkKLXsKLQlpbnQgZGl2MSwgZGl2MjsKLQlpbnQgYmFzZTsKLQotCWZvciAoZGl2MSA9IDI7IGRpdjEgPD0gKDEgPDwgMTYpOyBkaXYxIDw8PSAxKSB7Ci0JCWJhc2UgPSBpODI1M19vc2NfYmFzZSAqIGRpdjE7Ci0JCXJvdW5kX21vZGUgJj0gVFJJR19ST1VORF9NQVNLOwotCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKLQkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6Ci0JCWRlZmF1bHQ6Ci0JCQlkaXYyID0gKCpuYW5vc2VjICsgYmFzZSAvIDIpIC8gYmFzZTsKLQkJCWJyZWFrOwotCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKLQkJCWRpdjIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKLQkJCWJyZWFrOwotCQljYXNlIFRSSUdfUk9VTkRfVVA6Ci0JCQlkaXYyID0gKCpuYW5vc2VjICsgYmFzZSAtIDEpIC8gYmFzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChkaXYyIDwgMikKLQkJCWRpdjIgPSAyOwotCQlpZiAoZGl2MiA8PSA2NTUzNikgewotCQkJKm5hbm9zZWMgPSBkaXYyICogYmFzZTsKLQkJCSpkMSA9IGRpdjEgJiAweGZmZmY7Ci0JCQkqZDIgPSBkaXYyICYgMHhmZmZmOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogc2hvdWxkbid0IGdldCBoZXJlICovCi0JZGl2MSA9IDB4MTAwMDA7Ci0JZGl2MiA9IDB4MTAwMDA7Ci0JKm5hbm9zZWMgPSBkaXYxICogZGl2MiAqIGk4MjUzX29zY19iYXNlOwotCSpkMSA9IGRpdjEgJiAweGZmZmY7Ci0JKmQyID0gZGl2MiAmIDB4ZmZmZjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihpbnQgaTgyNTNfb3NjX2Jhc2UsCi0JCQkJCQkgIHVuc2lnbmVkIGludCAqZDEsCi0JCQkJCQkgIHVuc2lnbmVkIGludCAqZDIsCi0JCQkJCQkgIHVuc2lnbmVkIGludCAqbmFub3NlYywKLQkJCQkJCSAgaW50IHJvdW5kX21vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihpbnQgaTgyNTNfb3NjX2Jhc2UsCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkMSwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmQyLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwkJCQkJICAgICBpbnQgcm91bmRfbW9kZSkKIHsKIAl1bnNpZ25lZCBpbnQgZGl2aWRlcjsKIAl1bnNpZ25lZCBpbnQgZGl2MSwgZGl2MjsKQEAgLTM4Niw3ICsyOTEsNyBAQAogCiAJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKIAkJcmV0dXJuIC0xOwotCWlmIChtb2RlID4gKEk4MjU0X01PREU1IHwgSTgyNTRfQklOQVJZKSkKKwlpZiAobW9kZSA+IChJODI1NF9NT0RFNSB8IEk4MjU0X0JDRCkpCiAJCXJldHVybiAtMTsKIAogCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OwpAQCAtNDA2LDcgKzMxMSw3IEBACiAKIAlpZiAoY291bnRlcl9udW1iZXIgPiAyKQogCQlyZXR1cm4gLTE7Ci0JaWYgKG1vZGUgPiAoSTgyNTRfTU9ERTUgfCBJODI1NF9CSU5BUlkpKQorCWlmIChtb2RlID4gKEk4MjU0X01PREU1IHwgSTgyNTRfQkNEKSkKIAkJcmV0dXJuIC0xOwogCiAJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuYwppbmRleCA0ODgxN2YwLi40NjExM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWQgPSBzcHJpdi0+aW8oMCwgXzgyNTVfREFUQSwgMCwgaW9iYXNlKTsKIAlkIHw9IChzcHJpdi0+aW8oMCwgXzgyNTVfREFUQSArIDEsIDAsIGlvYmFzZSkgPDwgOCk7CiAKLQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZCk7CisJY29tZWRpX2J1Zl9wdXQocywgZCk7CiAJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOwogCiAJY29tZWRpX2V2ZW50KGRldiwgcyk7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgMCk7Ci0JZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIDEpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdG9wX2FyZywgMCk7CiAKIAlpZiAoZXJyKQpAQCAtMjk4LDYgKzI5OCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXMtPmxlbl9jaGFubGlzdAk9IDE7CiAJcy0+ZG9fY21kdGVzdAk9IHN1YmRldl84MjU1X2NtZHRlc3Q7CiAJcy0+ZG9fY21kCT0gc3ViZGV2XzgyNTVfY21kOwogCXMtPmNhbmNlbAk9IHN1YmRldl84MjU1X2NhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5oCmluZGV4IDRmMTZlYTcuLjc5NWQyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuaApAQCAtMjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKIGludCBzdWJkZXZfODI1NV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkgICAgIGludCAoKmlvKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyksCisJCSAgICAgaW50ICgqaW8pKGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgaW9iYXNlKTsKIGludCBzdWJkZXZfODI1NV9pbml0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSBpbnQgKCppbykgKGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpLAorCQkJIGludCAoKmlvKShpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwKIAkJCSB1bnNpZ25lZCBsb25nIGlvYmFzZSk7CiB2b2lkIHN1YmRldl84MjU1X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCmluZGV4IDJlZDJkYTMuLjVjNmExMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmgKQEAgLTExOCwxOCArMTE4LDEwIEBACiAJaW50IGlfSW9iYXNlQW1jYzsJLyogIGJhc2Urc2l6ZSBmb3IgQU1DQyBjaGlwICovCiAJaW50IGlfSW9iYXNlQWRkb247CS8qIGFkZG9uIGJhc2UgYWRkcmVzcyAqLwogCWludCBpX0lvYmFzZVJlc2VydmVkOwotCXVuc2lnbmVkIGNoYXIgYl9BaUNvbnRpbnVvdXM7CS8qICB3ZSBkbyB1bmxpbWl0ZWQgQUkgKi8KIAl1bnNpZ25lZCBpbnQgdWlfQWlBY3R1YWxTY2FuOwkvKiBob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZCAqLwogCXVuc2lnbmVkIGludCB1aV9BaU5icm9mQ2hhbm5lbHM7CS8qICBob3cgbWFueSBjaGFubmVscyBpcyBtZWFzdXJlZCAqLwotCXVuc2lnbmVkIGludCB1aV9BaVNjYW5MZW5ndGg7CS8qICBMZW5ndGggb2YgYWN0dWFsIHNjYW5saXN0ICovCi0JdW5zaWduZWQgaW50ICpwdWlfQWlDaGFubmVsTGlzdDsJLyogIGFjdHVhbCBjaGFubGlzdCAqLwogCXVuc2lnbmVkIGludCB1aV9BaUNoYW5uZWxMaXN0WzMyXTsJLyogIGFjdHVhbCBjaGFubGlzdCAqLwogCXVuc2lnbmVkIGludCB1aV9BaVJlYWREYXRhWzMyXTsKLQl1bnNpZ25lZCBpbnQgdWlfQWlUaW1lcjA7CS8qIFRpbWVyIENvbnN0YW50IGZvciBUaW1lcjAgKi8KLQl1bnNpZ25lZCBpbnQgdWlfQWlUaW1lcjE7CS8qIFRpbWVyIGNvbnN0YW50IGZvciBUaW1lcjEgKi8KLQl1bnNpZ25lZCBpbnQgdWlfQWlGbGFnczsKLQl1bnNpZ25lZCBpbnQgdWlfQWlEYXRhTGVuZ3RoOwotCXVuc2lnbmVkIGludCB1aV9BaU5icm9mU2NhbnM7CS8qICBudW1iZXIgb2Ygc2NhbnMgdG8gZG8gKi8KIAl1bnNpZ25lZCBzaG9ydCB1c19Vc2VEbWE7CS8qICBUbyB1c2UgRG1hIG9yIG5vdCAqLwogCXVuc2lnbmVkIGNoYXIgYl9EbWFEb3VibGVCdWZmZXI7CS8qICB3ZSBjYW4gdXNlIGRvdWJsZSBidWZmZXJpbmcgKi8KIAl1bnNpZ25lZCBpbnQgdWlfRG1hQWN0dWFsQnVmZmVyOwkvKiAgd2hpY2ggYnVmZmVyIGlzIHVzZWQgbm93ICovCkBAIC0xNDUsNyArMTM3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCB1c19PdXRwdXRSZWdpc3RlcjsJLyogIENvbnRhaW4gZGF0YSB3cml0dGVuIGF0IGlvYmFzZSArIDAgKi8KIAl1bnNpZ25lZCBjaGFyIGJfVGltZXIyTW9kZTsJLyogIFNwZWNpZnkgdGhlIHRpbWVyIDIgbW9kZSAqLwogCXVuc2lnbmVkIGNoYXIgYl9UaW1lcjJJbnRlcnJ1cHQ7CS8qIFRpbWVyMiAgaW50ZXJydXB0IGVuYWJsZSBvciBkaXNhYmxlICovCi0JdW5zaWduZWQgY2hhciBiX0FpQ3ljbGljQWNxdWlzaXRpb247CS8qICBpbmRpY2F0ZSBjeWNsaWMgYWNxdWlzaXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgYWlfcnVubmluZzoxOwogCXVuc2lnbmVkIGNoYXIgYl9JbnRlcnJ1cHRNb2RlOwkvKiAgZW9jIGVvcyBvciBkbWEgKi8KIAl1bnNpZ25lZCBjaGFyIGJfRW9jRW9zSW50ZXJydXB0OwkvKiAgRW5hYmxlIGRpc2FibGUgZW9jIGVvcyBpbnRlcnJ1cHQgKi8KIAl1bnNpZ25lZCBpbnQgdWlfRW9jRW9zQ29udmVyc2lvblRpbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMKaW5kZXggOWM4NmIwMi4uMGJhNTM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYwpAQCAtMjEsNiArMjEsOCBAQAogICoKICAqLwogCisjaW5jbHVkZSAiLi4vYWRkaV93YXRjaGRvZy5oIgorCiAjZGVmaW5lIEFQQ0kxNTY0X0FERFJFU1NfUkFOR0UJCQkJMTI4CiAKIC8qIERpZ2l0YWwgSW5wdXQgSVJRIEZ1bmN0aW9uIFNlbGVjdGlvbiAqLwpAQCAtNzYsNyArNzgsNyBAQAogI2RlZmluZSBBUENJMTU2NF9USU1FUl9XQVJOX1RJTUVCQVNFX1JFRwkJMHg2NAogCiAvKgotICogZGV2cHJpdi0+aW9iYXNlIFJlZ2lzdGVyIE1hcAorICogZGV2PmlvYmFzZSBSZWdpc3RlciBNYXAKICAqLwogI2RlZmluZSBBUENJMTU2NF9UQ1dfUkVHKHgpCQkJCSgweDAwICsgKCh4KSAqIDB4MjApKQogI2RlZmluZSBBUENJMTU2NF9UQ1dfUkVMT0FEX1JFRyh4KQkJCSgweDA0ICsgKCh4KSAqIDB4MjApKQpAQCAtMTI3LDE4ICsxMjksNiBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi1zdGF0aWMgaW50IGFwY2kxNTY0X2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAotCQkJCSB1bnNpZ25lZCBpbnQgKmRhdGEpCi17Ci0Jc3RydWN0IGFkZGlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKLQotCWRhdGFbMV0gPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElfUkVHKTsKLQotCXJldHVybiBpbnNuLT5uOwotfQotCiAvKgogICogQ29uZmlndXJlcyBUaGUgRGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlLgogICoKQEAgLTE4MCwyMyArMTcwLDYgQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAotc3RhdGljIGludCBhcGNpMTU2NF9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKLQkJCQkgdW5zaWduZWQgaW50ICpkYXRhKQotewotCXN0cnVjdCBhZGRpX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0KLQlzLT5zdGF0ZSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ET19SRUcpOwotCi0JaWYgKGNvbWVkaV9kaW9fdXBkYXRlX3N0YXRlKHMsIGRhdGEpKQotCQlvdXRsKHMtPnN0YXRlLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ET19SRUcpOwotCi0JZGF0YVsxXSA9IHMtPnN0YXRlOwotCi0JcmV0dXJuIGluc24tPm47Ci19Ci0KIC8qCiAgKiBDb25maWd1cmVzIFRoZSBUaW1lciwgQ291bnRlciBvciBXYXRjaGRvZwogICoKQEAgLTIzOSwxMyArMjEyLDEzIEBACiAJCQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRE9fSVJRX1JFRyk7CiAJCQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfV0RPR19JUlFfUkVHKTsKIAkJCW91dGwoMHgwLAotCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVIxKSk7CisJCQkgICAgIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0lSUV9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKIAkJCW91dGwoMHgwLAotCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CisJCQkgICAgIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0lSUV9SRUcoQVBDSTE1NjRfQ09VTlRFUjIpKTsKIAkJCW91dGwoMHgwLAotCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVIzKSk7CisJCQkgICAgIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0lSUV9SRUcoQVBDSTE1NjRfQ09VTlRFUjMpKTsKIAkJCW91dGwoMHgwLAotCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVI0KSk7CisJCQkgICAgIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0lSUV9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGRpc2FibGUgVGltZXIgaW50ZXJydXB0ICovCiAJCQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVJfQ1RSTF9SRUcpOwpAQCAtMjY2LDEzICsyMzksMTMgQEAKIAkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSBkYXRhWzVdOwogCiAJCS8qIEZpcnN0IFN0b3AgVGhlIENvdW50ZXIgKi8KLQkJdWxfQ29tbWFuZDEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKGRhdGFbNV0gLSAxKSk7CisJCXVsX0NvbW1hbmQxID0gaW5sKGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKGRhdGFbNV0gLSAxKSk7CiAJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CiAJCS8qIFN0b3AgVGhlIFRpbWVyICovCi0JCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhkYXRhWzVdIC0gMSkpOworCQlvdXRsKHVsX0NvbW1hbmQxLCBkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhkYXRhWzVdIC0gMSkpOwogCiAJCS8qIFNldCB0aGUgcmVsb2FkIHZhbHVlICovCi0JCW91dGwoZGF0YVszXSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX1JFTE9BRF9SRUcoZGF0YVs1XSAtIDEpKTsKKwkJb3V0bChkYXRhWzNdLCBkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19SRUxPQURfUkVHKGRhdGFbNV0gLSAxKSk7CiAKIAkJLyogU2V0IHRoZSBtb2RlIDogICAgICAgICAgICAgKi8KIAkJLyogLSBEaXNhYmxlIHRoZSBoYXJkd2FyZSAgICAgKi8KQEAgLTI4NSwxNSArMjU4LDE1IEBACiAJCXVsX0NvbW1hbmQxID0KIAkJCSh1bF9Db21tYW5kMSAmIDB4RkZGQzE5RTJVTCkgfCAweDgwMDAwVUwgfAogCQkJKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBpbnQpIGRhdGFbNF0gPDwgMTZVTCk7Ci0JCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhkYXRhWzVdIC0gMSkpOworCQlvdXRsKHVsX0NvbW1hbmQxLCBkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhkYXRhWzVdIC0gMSkpOwogCiAJCS8qICBFbmFibGUgb3IgRGlzYWJsZSBJbnRlcnJ1cHQgKi8KIAkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZEKSB8IChkYXRhWzFdIDw8IDEpOwotCQlvdXRsKHVsX0NvbW1hbmQxLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoZGF0YVs1XSAtIDEpKTsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoZGF0YVs1XSAtIDEpKTsKIAogCQkvKiBTZXQgdGhlIFVwL0Rvd24gc2VsZWN0aW9uICovCiAJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZCRjlGRlVMKSB8IChkYXRhWzZdIDw8IDE4KTsKLQkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKGRhdGFbNV0gLSAxKSk7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKGRhdGFbNV0gLSAxKSk7CiAJfSBlbHNlIHsKIAkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwgIkludmFsaWQgc3ViZGV2aWNlLlxuIik7CiAJfQpAQCAtMzQ5LDggKzMyMiw4IEBACiAJfQogCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9DT1VOVEVSKSB7CiAJCXVsX0NvbW1hbmQxID0KLQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKwotCQkJCUFQQ0kxNTY0X1RDV19DVFJMX1JFRyhkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAtIDEpKTsKKwkJCWlubChkZXYtPmlvYmFzZSArCisJCQkgICAgQVBDSTE1NjRfVENXX0NUUkxfUkVHKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIC0gMSkpOwogCQlpZiAoZGF0YVsxXSA9PSAxKSB7CiAJCQkvKiBTdGFydCB0aGUgQ291bnRlciBzdWJkZXZpY2UgKi8KIAkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOwpAQCAtMzYyLDkgKzMzNSw4IEBACiAJCQkvKiAgQ2xlYXJzIHRoZSBDb3VudGVyIHN1YmRldmljZSAqLwogCQkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZGVUwpIHwgMHg0MDA7CiAJCX0KLQkJb3V0bCh1bF9Db21tYW5kMSwKLQkJCWRldnByaXYtPmlvYmFzZSArCi0JCQlBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLSAxKSk7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldi0+aW9iYXNlICsKKwkJICAgICBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLSAxKSk7CiAJfQogCXJldHVybiBpbnNuLT5uOwogfQpAQCAtMzkzLDExICszNjUsMTEgQEAKIAl9IGVsc2UgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX0NPVU5URVIpIHsKIAkJLyogIFJlYWQgdGhlIENvdW50ZXIgQWN0dWFsIFZhbHVlLiAqLwogCQlkYXRhWzBdID0KLQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKwotCQkJCUFQQ0kxNTY0X1RDV19SRUcoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLSAxKSk7CisJCQlpbmwoZGV2LT5pb2Jhc2UgKworCQkJICAgIEFQQ0kxNTY0X1RDV19SRUcoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLSAxKSk7CiAJCXVsX0NvbW1hbmQxID0KLQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKwotCQkJCUFQQ0kxNTY0X1RDV19TVEFUVVNfUkVHKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIC0gMSkpOworCQkJaW5sKGRldi0+aW9iYXNlICsKKwkJCSAgICBBUENJMTU2NF9UQ1dfU1RBVFVTX1JFRyhkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAtIDEpKTsKIAogCQkvKiBHZXQgdGhlIHNvZnR3YXJlIHRyaWdnZXIgc3RhdHVzICovCiAJCWRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikgKCh1bF9Db21tYW5kMSA+PiAxKSAmIDEpOwpAQCAtNDQ2LDEzICs0MTgsMTMgQEAKIAl1aV9ETyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ET19JUlFfUkVHKSAmIDB4MDE7CiAJdWlfVGltZXIgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVJfSVJRX1JFRykgJiAweDAxOwogCXVpX0MxID0KLQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVIxKSkgJiAweDE7CisJCWlubChkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVIxKSkgJiAweDE7CiAJdWlfQzIgPQotCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0lSUV9SRUcoQVBDSTE1NjRfQ09VTlRFUjIpKSAmIDB4MTsKKwkJaW5sKGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0lSUV9SRUcoQVBDSTE1NjRfQ09VTlRFUjIpKSAmIDB4MTsKIAl1aV9DMyA9Ci0JCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfSVJRX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpICYgMHgxOworCQlpbmwoZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfSVJRX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpICYgMHgxOwogCXVpX0M0ID0KLQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVI0KSkgJiAweDE7CisJCWlubChkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19JUlFfUkVHKEFQQ0kxNTY0X0NPVU5URVI0KSkgJiAweDE7CiAJaWYgKHVpX0RJID09IDAgJiYgdWlfRE8gPT0gMCAmJiB1aV9UaW1lciA9PSAwICYmIHVpX0MxID09IDAKIAkJJiYgdWlfQzIgPT0gMCAmJiB1aV9DMyA9PSAwICYmIHVpX0M0ID09IDApIHsKIAkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwgIkludGVycnVwdCBmcm9tIHVua25vd24gc291cmNlLlxuIik7CkBAIC01MDYsMTYgKzQ3OCwxNiBAQAogCiAJCQkvKiAgRGlzYWJsZSBDb3VudGVyIEludGVycnVwdCAqLwogCQkJdWxfQ29tbWFuZDIgPQotCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKKwkJCQlpbmwoZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKIAkJCW91dGwoMHgwLAotCQkJICAgICBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKKwkJCSAgICAgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKIAogCQkJLyogU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlICovCiAJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwogCiAJCQkvKiAgRW5hYmxlIENvdW50ZXIgSW50ZXJydXB0ICovCiAJCQlvdXRsKHVsX0NvbW1hbmQyLAotCQkJICAgICBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKKwkJCSAgICAgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKIAkJfQogCX0KIApAQCAtNTI1LDE2ICs0OTcsMTYgQEAKIAogCQkJLyogIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KIAkJCXVsX0NvbW1hbmQyID0KLQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CisJCQkJaW5sKGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CiAJCQlvdXRsKDB4MCwKLQkJCSAgICAgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CisJCQkgICAgIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CiAKIAkJCS8qIFNlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZSAqLwogCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKIAogCQkJLyogIEVuYWJsZSBDb3VudGVyIEludGVycnVwdCAqLwogCQkJb3V0bCh1bF9Db21tYW5kMiwKLQkJCSAgICAgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CisJCQkgICAgIGRldi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIyKSk7CiAJCX0KIAl9CiAKQEAgLTU0NCwxNiArNTE2LDE2IEBACiAKIAkJCS8qICBEaXNhYmxlIENvdW50ZXIgSW50ZXJydXB0ICovCiAJCQl1bF9Db21tYW5kMiA9Ci0JCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpOworCQkJCWlubChkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpOwogCQkJb3V0bCgweDAsCi0JCQkgICAgIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpOworCQkJICAgICBkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpOwogCiAJCQkvKiBTZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UgKi8KIAkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CiAKIAkJCS8qICBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KIAkJCW91dGwodWxfQ29tbWFuZDIsCi0JCQkgICAgIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpOworCQkJICAgICBkZXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMykpOwogCQl9CiAJfQogCkBAIC01NjMsNDUgKzUzNSwxNyBAQAogCiAJCQkvKiAgRGlzYWJsZSBDb3VudGVyIEludGVycnVwdCAqLwogCQkJdWxfQ29tbWFuZDIgPQotCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKKwkJCQlpbmwoZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKIAkJCW91dGwoMHgwLAotCQkJICAgICBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKKwkJCSAgICAgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKIAogCQkJLyogU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlICovCiAJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwogCiAJCQkvKiAgRW5hYmxlIENvdW50ZXIgSW50ZXJydXB0ICovCiAJCQlvdXRsKHVsX0NvbW1hbmQyLAotCQkJICAgICBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKKwkJCSAgICAgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKIAkJfQogCX0KIAlyZXR1cm47CiB9Ci0KLXN0YXRpYyBpbnQgYXBjaTE1NjRfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWRkaV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCi0JLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0cyAqLwotCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESV9JUlFfUkVHKTsKLQkvKiBSZXNldCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESV9JTlRfU1RBVFVTX1JFRyk7Ci0JLyogRGlzYWJsZSB0aGUgYW5kL29yIGludGVycnVwdCAqLwotCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESV9JTlRfTU9ERTFfUkVHKTsKLQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElfSU5UX01PREUyX1JFRyk7Ci0JZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOwotCXVpX1R5cGUgPSAwOwotCS8qIFJlc2V0cyB0aGUgb3V0cHV0IGNoYW5uZWxzICovCi0Jb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RPX1JFRyk7Ci0JLyogRGlzYWJsZXMgdGhlIGludGVycnVwdC4gKi8KLQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRE9fSU5UX0NUUkxfUkVHKTsKLQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfV0RPR19SRUxPQURfUkVHKTsKLQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVJfUkVHKTsKLQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVJfQ1RSTF9SRUcpOwotCi0Jb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSMSkpOwotCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjIpKTsKLQlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfVENXX0NUUkxfUkVHKEFQQ0kxNTY0X0NPVU5URVIzKSk7Ci0Jb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X1RDV19DVFJMX1JFRyhBUENJMTU2NF9DT1VOVEVSNCkpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCmluZGV4IDcwZThmNDIuLjc2NGM4ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKQEAgLTYwOSwxMSArNjA5LDEwIEBACiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgdXNfVG1wVmFsdWU7CiAKLQlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCWRldnByaXYtPmFpX3J1bm5pbmcgPSAwOwogCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKIAlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsKIAlkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSA9IDA7CS8qICBzZXQgZW9jIGVvcyBjb252IHRpbWUgdG8gMCAqLwotCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gMDsKIAogCS8qICB2YXJpYWJsZXMgdXNlZCBpbiB0aW1lciBzdWJkZXZpY2UgKi8KIAlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSAwOwpAQCAtNzIwLDEwICs3MTksOSBAQAogCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CiAJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuID0gMDsKIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwotCWRldnByaXYtPmJfQWlDb250aW51b3VzID0gMDsKIAlkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXIgPSAwOwogCi0JZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKwlkZXZwcml2LT5haV9ydW5uaW5nID0gMDsKIAlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsKIAlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CiAJYXBjaTMxMjBfcmVzZXQoZGV2KTsKQEAgLTczNCw3ICs3MzIsNiBAQAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29uc3Qgc3RydWN0IGFkZGlfYm9hcmQgKnRoaXNfYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KQEAgLTc2NywyMCArNzY0LDE2IEBACiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikJLyogVGVzdCBEZWxheSB0aW1pbmcgKi8KIAkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIDEwMDAwMCk7CiAKLQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CS8qICBUZXN0IEFjcXVpc2l0aW9uIHRpbWluZyAqLwotCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCQlpZiAoY21kLT5jb252ZXJ0X2FyZykKLQkJCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigKLQkJCQkJCSZjbWQtPmNvbnZlcnRfYXJnLCAxMDAwMCk7Ci0JCX0gZWxzZSB7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZykKIAkJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPmNvbnZlcnRfYXJnLAotCQkJCQkJCTEwMDAwKTsKLQkJfQorCQkJCQkJCSAxMDAwMCk7CisJfSBlbHNlIHsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+Y29udmVydF9hcmcsIDEwMDAwKTsKIAl9CiAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5jaGFubGlzdF9sZW4sIDEpOwotCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWF4KCZjbWQtPmNoYW5saXN0X2xlbiwKLQkJCQkJIHRoaXNfYm9hcmQtPmlfQWlDaGFubmVsTGlzdCk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKIAogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPnN0b3BfYXJnLCAxKTsKQEAgLTc5MiwxNSArNzg1LDEwIEBACiAKIAkvKiAgc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCi0JaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCi0JCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKLQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAotCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7Ci0JCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KLQkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7Ci0JCQllcnIrKzsKLQkJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkgICAgY21kLT5zY2FuX2JlZ2luX2FyZyA8IGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQllcnIgfD0gLUVJTlZBTDsKIAl9CiAKIAlpZiAoZXJyKQpAQCAtODIxLDE2ICs4MDksMTMgQEAKIHsKIAljb25zdCBzdHJ1Y3QgYWRkaV9ib2FyZCAqdGhpc19ib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCXN0cnVjdCBhZGRpX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGNoYXIgYl9UbXA7CiAJdW5zaWduZWQgaW50IHVpX1RtcCwgdWlfRGVsYXlUaW1pbmcgPSAwLCB1aV9UaW1lclZhbHVlMSA9IDAsIGRtYWxlbjAgPQogCQkwLCBkbWFsZW4xID0gMCwgdWlfVGltZXJWYWx1ZTIgPQogCQkwLCB1aV9UaW1lclZhbHVlMCwgdWlfQ29udmVydFRpbWluZzsKIAl1bnNpZ25lZCBzaG9ydCB1c19UbXBWYWx1ZTsKIAotCS8qIEJFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlciAqLwotCS8qIGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbj1BUENJMzEyMF9FTkFCTEU7ICovCi0JLyogRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlciAqLwotCiAJLyoqKioqKioqKioqKioqKioqKiovCiAJLyogUmVzZXRzIHRoZSBGSUZPICovCiAJLyoqKioqKioqKioqKioqKioqKiovCkBAIC04NDAsMTIgKzgyNSw3IEBACiAJLyogaW53KGRldi0+aW9iYXNlK0FQQ0kzMTIwX1JEX1NUQVRVUyk7ICovCiAJLyogRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlciAqLwogCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiBBY3F1aXNpdGlvbiBpbml0aWFsaXplZCAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyICovCi0JZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRU5BQkxFOwotCS8qIEVORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIgKi8KKwlkZXZwcml2LT5haV9ydW5uaW5nID0gMTsKIAogCS8qICBjbGVhciBzb2Z0d2FyZSAgcmVnaXN0ZXJzICovCiAJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSAwOwpAQCAtODkyLDE3ICs4NzIsMTcgQEAKIAlkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXIgPSAwOwogCiAJLyogIHZhbHVlIGZvciB0aW1lcjIgIG1pbnVzIC0yIGhhcyB0byBiZSBkb25lIC4uLi4uZHVubm8geT8/ICovCi0JdWlfVGltZXJWYWx1ZTIgPSBkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgLSAyOwotCXVpX0NvbnZlcnRUaW1pbmcgPSBkZXZwcml2LT51aV9BaVRpbWVyMDsKKwl1aV9UaW1lclZhbHVlMiA9IGNtZC0+c3RvcF9hcmcgLSAyOworCXVpX0NvbnZlcnRUaW1pbmcgPSBjbWQtPmNvbnZlcnRfYXJnOwogCiAJaWYgKG1vZGUgPT0gMikKLQkJdWlfRGVsYXlUaW1pbmcgPSBkZXZwcml2LT51aV9BaVRpbWVyMTsKKwkJdWlfRGVsYXlUaW1pbmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwogCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkvKiBJbml0aWFsaXplcyB0aGUgc2VxdWVuY2UgYXJyYXkgKi8KICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCWlmICghYXBjaTMxMjBfc2V0dXBfY2hhbl9saXN0KGRldiwgcywgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzLAotCQkJZGV2cHJpdi0+cHVpX0FpQ2hhbm5lbExpc3QsIDApKQorCQkJY21kLT5jaGFubGlzdCwgMCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdXNfVG1wVmFsdWUgPSAodW5zaWduZWQgc2hvcnQpIGludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CkBAIC0xMDM5LDcgKzEwMTksNyBAQAogCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAogCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CiAKLQkJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykgeworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAvKgogICogY29uZmlndXJlIFRpbWVyMiBGb3IgY291bnRpbmcgRU9TIFJlc2V0IGdhdGUgMiBvZiBUaW1lciAyIHRvCiAgKiBkaXNhYmxlIGl0IChTZXQgQml0IEQxNCB0byAwKQpAQCAtMTEwNyw2ICsxMDg3LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIElmIERNQSBFbmFibGVkICovCisJCXVuc2lnbmVkIGludCBzY2FuX2J5dGVzID0gY21kLT5zY2FuX2VuZF9hcmcgKiBzaXplb2Yoc2hvcnQpOwogCiAJCS8qIEJFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlciAqLwogCQkvKiBpbncoZGV2LT5pb2Jhc2UrMCk7IHJlc2V0IEVPQyBiaXQgKi8KQEAgLTExMjUsMzcgKzExMDYsMzggQEAKIAkJZG1hbGVuMCA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclNpemVbMF07CiAJCWRtYWxlbjEgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJTaXplWzFdOwogCi0JCWlmICghZGV2cHJpdi0+Yl9BaUNvbnRpbnVvdXMpIHsKLQotCQkJaWYgKGRtYWxlbjAgPiAoZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICogZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoICogMikpIHsJLyogIG11c3Qgd2UgZmlsbCBmdWxsIGZpcnN0IGJ1ZmZlcj8gKi8KLQkJCQlkbWFsZW4wID0KLQkJCQkJZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICoKLQkJCQkJZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoICogMjsKLQkJCX0gZWxzZSBpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgKiBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyIC0gZG1hbGVuMCkpCS8qICBhbmQgbXVzdCB3ZSBmaWxsIGZ1bGwgc2Vjb25kIGJ1ZmZlciB3aGVuIGZpcnN0IGlzIG9uY2UgZmlsbGVkPyAqLwotCQkJCWRtYWxlbjEgPQotCQkJCQlkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgKgotCQkJCQlkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyIC0gZG1hbGVuMDsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkJLyoKKwkJCSAqIE11c3Qgd2UgZmlsbCBmdWxsIGZpcnN0IGJ1ZmZlcj8gQW5kIG11c3Qgd2UgZmlsbAorCQkJICogZnVsbCBzZWNvbmQgYnVmZmVyIHdoZW4gZmlyc3QgaXMgb25jZSBmaWxsZWQ/CisJCQkgKi8KKwkJCWlmIChkbWFsZW4wID4gKGNtZC0+c3RvcF9hcmcgKiBzY2FuX2J5dGVzKSkgeworCQkJCWRtYWxlbjAgPSBjbWQtPnN0b3BfYXJnICogc2Nhbl9ieXRlczsKKwkJCX0gZWxzZSBpZiAoZG1hbGVuMSA+IChjbWQtPnN0b3BfYXJnICogc2Nhbl9ieXRlcyAtCisJCQkJCSAgICAgIGRtYWxlbjApKQorCQkJCWRtYWxlbjEgPSBjbWQtPnN0b3BfYXJnICogc2Nhbl9ieXRlcyAtCisJCQkJCSAgZG1hbGVuMDsKIAkJfQogCi0JCWlmIChkZXZwcml2LT51aV9BaUZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpIHsKIAkJCS8qICBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8gKi8KLQkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7Ci0JCQkJZG1hbGVuMCA9IGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDI7Ci0JCQkJaWYgKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAmIDEpCisJCQlpZiAoZG1hbGVuMCA+IHNjYW5fYnl0ZXMpIHsKKwkJCQlkbWFsZW4wID0gc2Nhbl9ieXRlczsKKwkJCQlpZiAoY21kLT5zY2FuX2VuZF9hcmcgJiAxKQogCQkJCQlkbWFsZW4wICs9IDI7CiAJCQl9Ci0JCQlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyKSkgewotCQkJCWRtYWxlbjEgPSBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyOwotCQkJCWlmIChkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggJiAxKQorCQkJaWYgKGRtYWxlbjEgPiBzY2FuX2J5dGVzKSB7CisJCQkJZG1hbGVuMSA9IHNjYW5fYnl0ZXM7CisJCQkJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICYgMSkKIAkJCQkJZG1hbGVuMSAtPSAyOwogCQkJCWlmIChkbWFsZW4xIDwgNCkKIAkJCQkJZG1hbGVuMSA9IDQ7CiAJCQl9CiAJCX0gZWxzZSB7CS8qICBpc24ndCBvdXRwdXQgYnVmZiBzbWFsbGVyIHRoYXQgb3VyIERNQSBidWZmPyAqLwotCQkJaWYgKGRtYWxlbjAgPiAoZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoKSkKLQkJCQlkbWFsZW4wID0gZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoOwotCQkJaWYgKGRtYWxlbjEgPiAoZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoKSkKLQkJCQlkbWFsZW4xID0gZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoOworCQkJaWYgKGRtYWxlbjAgPiBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opCisJCQkJZG1hbGVuMCA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKKwkJCWlmIChkbWFsZW4xID4gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KQorCQkJCWRtYWxlbjEgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CiAJCX0KIAkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXSA9IGRtYWxlbjA7CiAJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMV0gPSBkbWFsZW4xOwpAQCAtMTI5Myw4ICsxMjc1LDggQEAKIAkJLyogRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlciAqLwogCX0KIAotCWlmICgoZGV2cHJpdi0+dXNfVXNlRG1hID09IEFQQ0kzMTIwX0RJU0FCTEUpCi0JCSYmICFkZXZwcml2LT5iX0FpQ29udGludW91cykgeworCWlmIChkZXZwcml2LT51c19Vc2VEbWEgPT0gQVBDSTMxMjBfRElTQUJMRSAmJgorCSAgICBjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJLyogIHNldCBnYXRlIDIgICB0byBzdGFydCBjb252ZXJzaW9uICovCiAJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KIAkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMjsKQEAgLTEzMzcsNTAgKzEzMTksMTcgQEAKIAlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAKIAkvKiBsb2FkaW5nIHByaXZhdGUgc3RydWN0dXJlIHdpdGggY21kIHN0cnVjdHVyZSBpbnB1dHMgKi8KLQlkZXZwcml2LT51aV9BaUZsYWdzID0gY21kLT5mbGFnczsKIAlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMgPSBjbWQtPmNoYW5saXN0X2xlbjsKLQlkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggPSBjbWQtPnNjYW5fZW5kX2FyZzsKLQlkZXZwcml2LT5wdWlfQWlDaGFubmVsTGlzdCA9IGNtZC0+Y2hhbmxpc3Q7Ci0KLQkvKiBVUERBVEUtMC43LjU3LT4wLjcuNjhkZXZwcml2LT51aV9BaURhdGFMZW5ndGg9cy0+YXN5bmMtPmRhdGFfbGVuOyAqLwotCWRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKLQotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCi0JCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9IGNtZC0+c3RvcF9hcmc7Ci0JZWxzZQotCQlkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPSAwOwotCi0JZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSAwOwkvKiAgdmFyaWFibGVzIGNoYW5nZWQgdG8gdGltZXIwLHRpbWVyMSAqLwotCWRldnByaXYtPnVpX0FpVGltZXIxID0gMDsKLQlpZiAoKGRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9PSAwKSB8fCAoZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zID09IC0xKSkKLQkJZGV2cHJpdi0+Yl9BaUNvbnRpbnVvdXMgPSAxOwkvKiAgdXNlciB3YW50IG5ldmVyZW5kaW5nIGFuYWxvZyBhY3F1aXNpdGlvbiAqLwotCS8qICBzdG9wcGVkIHVzaW5nIGNhbmNlbCAqLwogCiAJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKQogCQlkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPSBBUENJMzEyMF9FTkFCTEU7CiAJZWxzZQogCQlkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPSBBUENJMzEyMF9ESVNBQkxFOwogCi0JaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKLQkJLyogIG1vZGUgMSBvciAzICovCi0JCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJCS8qICBtb2RlIDEgKi8KLQotCQkJZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSBjbWQtPmNvbnZlcnRfYXJnOwkvKiAgdGltZXIgY29uc3RhbnQgaW4gbmFubyBzZWNvbmRzICovCi0JCQkvKiByZXR1cm4gdGhpc19ib2FyZC0+YWlfY21kKDEsZGV2LHMpOyAqLwotCQkJcmV0dXJuIGFwY2kzMTIwX2N5Y2xpY19haSgxLCBkZXYsIHMpOwotCQl9Ci0KLQl9Ci0JaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCi0JCSYmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpKSB7Ci0JCS8qICBtb2RlIDIgKi8KLQkJZGV2cHJpdi0+dWlfQWlUaW1lcjEgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwotCQlkZXZwcml2LT51aV9BaVRpbWVyMCA9IGNtZC0+Y29udmVydF9hcmc7CS8qICB2YXJpYWJsZSBjaGFuZ2VkIHRpbWVyMiB0byB0aW1lcjAgKi8KLQkJLyogcmV0dXJuIHRoaXNfYm9hcmQtPmFpX2NtZCgyLGRldixzKTsgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwkJcmV0dXJuIGFwY2kzMTIwX2N5Y2xpY19haSgxLCBkZXYsIHMpOworCWVsc2UJLyogVFJJR19USU1FUiAqLwogCQlyZXR1cm4gYXBjaTMxMjBfY3ljbGljX2FpKDIsIGRldiwgcyk7Ci0JfQotCXJldHVybiAtMTsKIH0KIAogLyoKQEAgLTEzOTIsMTEgKzEzNDEsMTIgQEAKIAkJCQkJCSAgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQogewogCXN0cnVjdCBhZGRpX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCiAJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuICs9Ci0JCShzLT5hc3luYy0+Y3VyX2NoYW4gKyBudW1fc2FtcGxlcykgLyBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGg7CisJCShzLT5hc3luYy0+Y3VyX2NoYW4gKyBudW1fc2FtcGxlcykgLyBjbWQtPnNjYW5fZW5kX2FyZzsKIAlzLT5hc3luYy0+Y3VyX2NoYW4gKz0gbnVtX3NhbXBsZXM7Ci0Jcy0+YXN5bmMtPmN1cl9jaGFuICU9IGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aDsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gJT0gY21kLT5zY2FuX2VuZF9hcmc7CiAKIAljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRtYV9idWZmZXIsIG51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSk7CiB9CkBAIC0xNDEyLDYgKzEzNjIsNyBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOwogCXN0cnVjdCBhZGRpX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBpbnQgbmV4dF9kbWFfYnVmLCBzYW1wbGVzaW5idWY7CiAJdW5zaWduZWQgbG9uZyBsb3dfd29yZCwgaGlnaF93b3JkLCB2YXI7CiAJdW5zaWduZWQgaW50IHVpX1RtcDsKQEAgLTE0MjcsOCArMTM3OCw2IEBACiAJaWYgKHNhbXBsZXNpbmJ1ZiAmIDEpIHsKIAkJY29tZWRpX2Vycm9yKGRldiwgIk9kZCBjb3VudCBvZiBieXRlcyBpbiBETUEgcmluZyEiKTsKIAkJYXBjaTMxMjBfY2FuY2VsKGRldiwgcyk7Ci0JCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7Ci0KIAkJcmV0dXJuOwogCX0KIAlzYW1wbGVzaW5idWYgPSBzYW1wbGVzaW5idWYgPj4gMTsJLyogIG51bWJlciBvZiByZWNlaXZlZCBzYW1wbGVzICovCkBAIC0xNDg5LDE2ICsxNDM4LDE1IEBACiAJCQlkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsW2RldnByaXYtPgogCQkJCXVpX0RtYUFjdHVhbEJ1ZmZlcl0sIHNhbXBsZXNpbmJ1Zik7CiAKLQkJaWYgKCEoZGV2cHJpdi0+dWlfQWlGbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7CisJCWlmICghKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewogCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOwogCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CiAJCX0KIAl9Ci0JaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykKLQkJaWYgKGRldnByaXYtPnVpX0FpQWN0dWFsU2NhbiA+PSBkZXZwcml2LT51aV9BaU5icm9mU2NhbnMpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQlpZiAoZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuID49IGNtZC0+c3RvcF9hcmcpIHsKIAkJCS8qICBhbGwgZGF0YSBzYW1wbGVkICovCiAJCQlhcGNpMzEyMF9jYW5jZWwoZGV2LCBzKTsKLQkJCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKIAkJCXJldHVybjsKQEAgLTE1NzIsNyArMTUyMCw3IEBACiAJbl9jaGFuID0gZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOwogCiAJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKQotCQllcnIgJj0gY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSArIDApKTsKKwkJZXJyICY9IGNvbWVkaV9idWZfcHV0KHMsIGludyhkZXYtPmlvYmFzZSArIDApKTsKIAogCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKIApAQCAtMTY0OCw3ICsxNTk2LDcgQEAKIAogCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CS8qICBlbmFibGUgdGhpcyBpbiB3aXRob3V0IERNQSA/Pz8gKi8KIAotCQkJaWYgKGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJCWlmIChkZXZwcml2LT5haV9ydW5uaW5nKSB7CiAJCQkJdWlfQ2hlY2sgPSAwOwogCQkJCWFwY2kzMTIwX2ludGVycnVwdF9oYW5kbGVfZW9zKGRldik7CiAJCQkJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuKys7CkBAIC0xNjkwLDggKzE2MzgsNiBAQAogCiAJCXN3aXRjaCAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlKSB7CiAJCWNhc2UgQVBDSTMxMjBfQ09VTlRFUjoKLQotCQkJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKIAkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KIAkJCQlkZXZwcml2LT4KIAkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKQEAgLTE3MDcsNyArMTY1Myw2IEBACiAKIAkJCS8qIHN0b3AgdGltZXIgMCBhbmQgdGltZXIgMSAqLwogCQkJYXBjaTMxMjBfY2FuY2VsKGRldiwgcyk7Ci0JCQlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOwogCiAJCQkvKiBVUERBVEUtMC43LjU3LT4wLjcuNjhjb21lZGlfZG9uZShkZXYscyk7ICovCiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CkBAIC0xNzQ2LDcgKzE2OTEsNyBAQAogCX0KIAogCWlmICgoaW50X2RhcSAmIDB4NCkgJiYgKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9PSBBUENJMzEyMF9ETUFfTU9ERSkpIHsKLQkJaWYgKGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJaWYgKGRldnByaXYtPmFpX3J1bm5pbmcpIHsKIAogCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCQkvKiBDbGVhciBUaW1lciBXcml0ZSBUQyBpbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYwppbmRleCAwNTM2ZDgzLi5mNTQwMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jCkBAIC0yMjIxLDEyICsyMjIxLDExIEBACiAJdW5zaWduZWQgaW50IHVpX0NvbnZlcnRUaW1lQmFzZSA9IDA7CiAJdW5zaWduZWQgaW50IHVpX0RlbGF5VGltZSA9IDA7CiAJdW5zaWduZWQgaW50IHVpX0RlbGF5VGltZUJhc2UgPSAwOwotCWludCBpX1RyaWdnZXJtb2RlID0gMDsKLQlpbnQgaV9UcmlnZ2VyRWRnZSA9IDA7CiAJaW50IGlfTmJyT2ZDaGFubmVsID0gMDsKIAlpbnQgaV9DcHQgPSAwOwogCWRvdWJsZSBkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPSAwLjA7CiAJZG91YmxlIGRfU0NBTlRpbWVOZXdVbml0ID0gMC4wOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTIyNTMsMjMgKzIyNTIsMzcgQEAKIAogCS8qIFN0ZXAgMmIgOiBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLwogCi0JaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7Ci0JCWlfVHJpZ2dlckVkZ2UgPSBjbWQtPnN0YXJ0X2FyZyAmIDB4RkZGRjsKLQkJaV9UcmlnZ2VybW9kZSA9IGNtZC0+c3RhcnRfYXJnID4+IDE2OwotCQlpZiAoaV9UcmlnZ2VyRWRnZSA8IDEgfHwgaV9UcmlnZ2VyRWRnZSA+IDMpIHsKLQkJCWVycisrOwotCQkJcHJpbnRrKCJcblRoZSB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKLQkJfQotCQlpZiAoaV9UcmlnZ2VybW9kZSAhPSAyKSB7Ci0JCQllcnIrKzsKLQkJCXByaW50aygiXG5UaGUgdHJpZ2dlciBtb2RlIHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7Ci0JCX0KLQl9Ci0KIAlpZiAoZXJyKSB7CiAJCWFwY2kzMjAwX3Jlc2V0KGRldik7CiAJCXJldHVybiAyOwogCX0KKworCS8qIFN0ZXAgMzogY2hlY2sgaWYgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIHZhbGlkYXRlIHRoZSB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uICovCisJCWFyZyA9IGNtZC0+c3RhcnRfYXJnICYgMHhmZmZmOworCQlpZiAoYXJnIDwgMSB8fCBhcmcgPiAzKSB7CisJCQljbWQtPnN0YXJ0X2FyZyAmPSB+MHhmZmZmOworCQkJY21kLT5zdGFydF9hcmcgfD0gMTsKKwkJCWVyciB8PSAtRUlOVkFMOworCQl9CisJCS8qIHZhbGlkYXRlIHRoZSB0cmlnZ2VyIG1vZGUgc2VsZWN0aW9uICovCisJCWFyZyA9IGNtZC0+c3RhcnRfYXJnID4+IDE2OworCQlpZiAoYXJnICE9IDIpIHsKKwkJCWNtZC0+c3RhcnRfYXJnICY9IH4oMHhmZmZmIDw8IDE2KTsKKwkJCWNtZC0+c3RhcnRfYXJnIHw9ICgyIDw8IDE2KTsKKwkJCWVyciB8PSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CisKIAkvKiBpX0ZpcnN0Q2hhbm5lbD1jbWQtPmNoYW5saXN0WzBdOyAqLwogCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCA9IGNtZC0+Y2hhbmxpc3RbMF07CiAJLyogaV9MYXN0Q2hhbm5lbD1jbWQtPmNoYW5saXN0WzFdOyAqLwpAQCAtMjY4OSw4ICsyNzAyLDcgQEAKIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKIAogCQkJLyogIFRlc3QgaWYgZW5vdWd0aCBtZW1vcnkgaXMgYXZhaWxhYmxlIGFuZCBhbGxvY2F0ZSBpdCBmb3IgNyB2YWx1ZXMgKi8KLQkJCS8qIG4gPSBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMtPmFzeW5jLCA3KnNpemVvZih1bnNpZ25lZCBpbnQpKTsgKi8KLQkJCW4gPSBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMtPmFzeW5jLAorCQkJbiA9IGNvbWVkaV9idWZfd3JpdGVfYWxsb2MocywKIAkJCQkoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKIAogCQkJLyogIElmIG5vdCBlbm91Z2ggbWVtb3J5IGF2YWlsYWJsZSwgZXZlbnQgaXMgc2V0IHRvIENvbWVkaSBCdWZmZXIgRXJyb3IgKi8KQEAgLTI2OTksMTIgKzI3MTEsMTIgQEAKIAkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKIAkJCX0KIAkJCS8qICBXcml0ZSBhbGwgNyBzY2FuIHZhbHVlcyBpbiB0aGUgY29tZWRpIGJ1ZmZlciAqLwotCQkJY29tZWRpX2J1Zl9tZW1jcHlfdG8ocy0+YXN5bmMsIDAsCisJCQljb21lZGlfYnVmX21lbWNweV90byhzLCAwLAogCQkJCSh1bnNpZ25lZCBpbnQgKikgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgogCQkJCXVpX1NjYW5WYWx1ZUFycmF5LCAoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKIAogCQkJLyogIFVwZGF0ZSBjb21lZGkgYnVmZmVyIHBpbnRlcnMgaW5kZXhlcyAqLwotCQkJY29tZWRpX2J1Zl93cml0ZV9mcmVlKHMtPmFzeW5jLAorCQkJY29tZWRpX2J1Zl93cml0ZV9mcmVlKHMsCiAJCQkJKDcgKyAxMikgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CiAKIAkJCS8qICBTZW5kIGV2ZW50cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jCmluZGV4IDIwZTg5YjAuLmU4MmMzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmMKQEAgLTEwMiwxMSArMTAyLDcgQEAKIAkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOwogCQkJLyogRW5hYmxlIHRoZSBXYXRjaGRvZyAqLwogCQkJb3V0bCh1bF9Db21tYW5kMSwgZGV2LT5pb2Jhc2UgKyBBUENJMzUwMV9USU1FUl9DVFJMX1JFRyk7Ci0JCX0KLQotCQllbHNlIGlmIChkYXRhWzFdID09IDApCS8qIFN0b3AgVGhlIFdhdGNoZG9nICovCi0JCXsKLQkJCS8qIFN0b3AgVGhlIFdhdGNoZG9nICovCisJCX0gZWxzZSBpZiAoZGF0YVsxXSA9PSAwKSB7IC8qIFN0b3AgVGhlIFdhdGNoZG9nICovCiAJCQl1bF9Db21tYW5kMSA9IGlubChkZXYtPmlvYmFzZSArIEFQQ0kzNTAxX1RJTUVSX0NUUkxfUkVHKTsKIAkJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CiAJCQlvdXRsKDB4MCwgZGV2LT5pb2Jhc2UgKyBBUENJMzUwMV9USU1FUl9DVFJMX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCmluZGV4IDBkYWEwZWEuLjFiMmU3YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgMCk7Ci0JZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIDEpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdG9wX2FyZywgMCk7CiAKIAlpZiAoZXJyKQpAQCAtMjYyLDcgKzI2Miw3IEBACiAJb3V0bChjdHJsICYgfkFQQ0kxMDMyX0NUUkxfSU5UX0VOQSwgZGV2LT5pb2Jhc2UgKyBBUENJMTAzMl9DVFJMX1JFRyk7CiAKIAlzLT5zdGF0ZSA9IGlubChkZXYtPmlvYmFzZSArIEFQQ0kxMDMyX1NUQVRVU19SRUcpICYgMHhmZmZmOwotCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBzLT5zdGF0ZSk7CisJY29tZWRpX2J1Zl9wdXQocywgcy0+c3RhdGUpOwogCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPUzsKIAljb21lZGlfZXZlbnQoZGV2LCBzKTsKIApAQCAtMzMyLDYgKzMzMiw3IEBACiAJCXMtPnJhbmdlX3RhYmxlCT0gJnJhbmdlX2RpZ2l0YWw7CiAJCXMtPmluc25fY29uZmlnCT0gYXBjaTEwMzJfY29zX2luc25fY29uZmlnOwogCQlzLT5pbnNuX2JpdHMJPSBhcGNpMTAzMl9jb3NfaW5zbl9iaXRzOworCQlzLT5sZW5fY2hhbmxpc3QJPSAxOwogCQlzLT5kb19jbWR0ZXN0CT0gYXBjaTEwMzJfY29zX2NtZHRlc3Q7CiAJCXMtPmRvX2NtZAk9IGFwY2kxMDMyX2Nvc19jbWQ7CiAJCXMtPmNhbmNlbAk9IGFwY2kxMDMyX2Nvc19jYW5jZWw7CkBAIC0zNzksNSArMzgwLDUgQEAKIG1vZHVsZV9jb21lZGlfcGNpX2RyaXZlcihhcGNpMTAzMl9kcml2ZXIsIGFwY2kxMDMyX3BjaV9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFEREktREFUQSBBUENJLTEwMzIsIDMyIGNoYW5uZWwgREkgYm9hcmRzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCmluZGV4IGJkOGUwOGMuLmVhYjc1ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCkBAIC03Miw1ICs3Miw1IEBACiBtb2R1bGVfY29tZWRpX3BjaV9kcml2ZXIoYXBjaTE1MDBfZHJpdmVyLCBhcGNpMTUwMF9wY2lfZHJpdmVyKTsKIAogTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRERJLURBVEEgQVBDSS0xNTAwLCAxNiBjaGFubmVsIERJIC8gMTYgY2hhbm5lbCBETyBib2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTU2NC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKaW5kZXggMjdhYTlhZS4uMTNkOTk2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKQEAgLTMsNTAgKzMsMTY4IEBACiAKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKICNpbmNsdWRlICJjb21lZGlfZmMuaCIKLSNpbmNsdWRlICJhbWNjX3M1OTMzLmgiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uaCIKIAotI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2VlcHJvbS5jIgogI2luY2x1ZGUgImFkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5jIgotI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZGlfYm9hcmQgYXBjaTE1NjRfYm9hcmR0eXBlc1tdID0gewotCXsKLQkJLnBjX0RyaXZlck5hbWUJCT0gImFwY2kxNTY0IiwKLQkJLmlfSW9yYW5nZUJhc2UxCQk9IEFQQ0kxNTY0X0FERFJFU1NfUkFOR0UsCi0JCS5pX1BDSUVlcHJvbQkJPSBBRERJREFUQV9FRVBST00sCi0JCS5wY19FZXByb21DaGlwCQk9IEFERElEQVRBXzkzQzc2LAotCQkuaV9OYnJEaUNoYW5uZWwJCT0gMzIsCi0JCS5pX05ickRvQ2hhbm5lbAkJPSAzMiwKLQkJLmlfRG9NYXhkYXRhCQk9IDB4ZmZmZmZmZmYsCi0JCS5pX1RpbWVyCQk9IDEsCi0JCS5pbnRlcnJ1cHQJCT0gYXBjaTE1NjRfaW50ZXJydXB0LAotCQkucmVzZXQJCQk9IGFwY2kxNTY0X3Jlc2V0LAotCQkuZGlfY29uZmlnCQk9IGFwY2kxNTY0X2RpX2NvbmZpZywKLQkJLmRpX2JpdHMJCT0gYXBjaTE1NjRfZGlfaW5zbl9iaXRzLAotCQkuZG9fY29uZmlnCQk9IGFwY2kxNTY0X2RvX2NvbmZpZywKLQkJLmRvX2JpdHMJCT0gYXBjaTE1NjRfZG9faW5zbl9iaXRzLAotCQkuZG9fcmVhZAkJPSBhcGNpMTU2NF9kb19yZWFkLAotCQkudGltZXJfY29uZmlnCQk9IGFwY2kxNTY0X3RpbWVyX2NvbmZpZywKLQkJLnRpbWVyX3dyaXRlCQk9IGFwY2kxNTY0X3RpbWVyX3dyaXRlLAotCQkudGltZXJfcmVhZAkJPSBhcGNpMTU2NF90aW1lcl9yZWFkLAotCX0sCi19Oworc3RhdGljIGlycXJldHVybl90IHZfQURESV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlhcGNpMTU2NF9pbnRlcnJ1cHQoaXJxLCBkKTsKKwlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKK30KKworc3RhdGljIGludCBhcGNpMTU2NF9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgdW5zaWduZWQgaW50ICpkYXRhKQoreworCXN0cnVjdCBhZGRpX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisKKwlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJX1JFRyk7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBhcGNpMTU2NF9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgdW5zaWduZWQgaW50ICpkYXRhKQoreworCXN0cnVjdCBhZGRpX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisKKwlzLT5zdGF0ZSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ET19SRUcpOworCisJaWYgKGNvbWVkaV9kaW9fdXBkYXRlX3N0YXRlKHMsIGRhdGEpKQorCQlvdXRsKHMtPnN0YXRlLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ET19SRUcpOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgYXBjaTE1NjRfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRkaV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCisJdWlfVHlwZSA9IDA7CisKKwkvKiBEaXNhYmxlIHRoZSBpbnB1dCBpbnRlcnJ1cHRzIGFuZCByZXNldCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElfSVJRX1JFRyk7CisJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJX0lOVF9TVEFUVVNfUkVHKTsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElfSU5UX01PREUxX1JFRyk7CisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJX0lOVF9NT0RFMl9SRUcpOworCisJLyogUmVzZXQgdGhlIG91dHB1dCBjaGFubmVscyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RPX1JFRyk7CisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RPX0lOVF9DVFJMX1JFRyk7CisKKwkvKiBSZXNldCB0aGUgd2F0Y2hkb2cgcmVnaXN0ZXJzICovCisJYWRkaV93YXRjaGRvZ19yZXNldChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9XRE9HX1JFRyk7CisKKwkvKiBSZXNldCB0aGUgdGltZXIgcmVnaXN0ZXJzICovCisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSX0NUUkxfUkVHKTsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVJfUkVMT0FEX1JFRyk7CisKKwkvKiBSZXNldCB0aGUgY291bnRlciByZWdpc3RlcnMgKi8KKwlvdXRsKDB4MCwgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjEpKTsKKwlvdXRsKDB4MCwgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjIpKTsKKwlvdXRsKDB4MCwgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjMpKTsKKwlvdXRsKDB4MCwgZGV2LT5pb2Jhc2UgKyBBUENJMTU2NF9UQ1dfQ1RSTF9SRUcoQVBDSTE1NjRfQ09VTlRFUjQpKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IGFwY2kxNTY0X2F1dG9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkJdW5zaWduZWQgbG9uZyBjb250ZXh0KQorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY29udGV4dF91bnVzZWQpCiB7Ci0JZGV2LT5ib2FyZF9wdHIgPSAmYXBjaTE1NjRfYm9hcmR0eXBlc1swXTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gY29tZWRpX3RvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgYWRkaV9wcml2YXRlICpkZXZwcml2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQ7CiAKLQlyZXR1cm4gYWRkaV9hdXRvX2F0dGFjaChkZXYsIGNvbnRleHQpOworCWRldi0+Ym9hcmRfbmFtZSA9IGRldi0+ZHJpdmVyLT5kcml2ZXJfbmFtZTsKKworCWRldnByaXYgPSBjb21lZGlfYWxsb2NfZGV2cHJpdihkZXYsIHNpemVvZigqZGV2cHJpdikpOworCWlmICghZGV2cHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXYtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCWRldnByaXYtPmlfSW9iYXNlQW1jYyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCisJYXBjaTE1NjRfcmVzZXQoZGV2KTsKKworCWlmIChwY2lkZXYtPmlycSA+IDApIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIHZfQURESV9JbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJCSAgZGV2LT5ib2FyZF9uYW1lLCBkZXYpOworCQlpZiAocmV0ID09IDApCisJCQlkZXYtPmlycSA9IHBjaWRldi0+aXJxOworCX0KKworCXJldCA9IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VzKGRldiwgMyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qICBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBESSBTdWJkZXZpY2UgU3RydWN0dXJlcyAqLworCXMgPSAmZGV2LT5zdWJkZXZpY2VzWzBdOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMzI7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2NvbmZpZyA9IGFwY2kxNTY0X2RpX2NvbmZpZzsKKwlzLT5pbnNuX2JpdHMgPSBhcGNpMTU2NF9kaV9pbnNuX2JpdHM7CisKKwkvKiAgQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgRE8gU3ViZGV2aWNlIFN0cnVjdHVyZXMgKi8KKwlzID0gJmRldi0+c3ViZGV2aWNlc1sxXTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRTsKKwlzLT5uX2NoYW4gPSAzMjsKKwlzLT5tYXhkYXRhID0gMHhmZmZmZmZmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAzMjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fY29uZmlnID0gYXBjaTE1NjRfZG9fY29uZmlnOworCXMtPmluc25fYml0cyA9IGFwY2kxNTY0X2RvX2luc25fYml0czsKKwlzLT5pbnNuX3JlYWQgPSBhcGNpMTU2NF9kb19yZWFkOworCisJLyogIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFRpbWVyIFN1YmRldmljZSBTdHJ1Y3R1cmVzICovCisJcyA9ICZkZXYtPnN1YmRldmljZXNbMl07CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5tYXhkYXRhID0gMDsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl93cml0ZSA9IGFwY2kxNTY0X3RpbWVyX3dyaXRlOworCXMtPmluc25fcmVhZCA9IGFwY2kxNTY0X3RpbWVyX3JlYWQ7CisJcy0+aW5zbl9jb25maWcgPSBhcGNpMTU2NF90aW1lcl9jb25maWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXBjaTE1NjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkZGlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkKKwkJCWFwY2kxNTY0X3Jlc2V0KGRldik7CisJCWlmIChkZXYtPmlycSkKKwkJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwljb21lZGlfcGNpX2Rpc2FibGUoZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGFwY2kxNTY0X2RyaXZlciA9IHsKIAkuZHJpdmVyX25hbWUJPSAiYWRkaV9hcGNpXzE1NjQiLAogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCiAJLmF1dG9fYXR0YWNoCT0gYXBjaTE1NjRfYXV0b19hdHRhY2gsCi0JLmRldGFjaAkJPSBpX0FERElfRGV0YWNoLAorCS5kZXRhY2gJCT0gYXBjaTE1NjRfZGV0YWNoLAogfTsKIAogc3RhdGljIGludCBhcGNpMTU2NF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTcwLDUgKzE4OCw1IEBACiBtb2R1bGVfY29tZWRpX3BjaV9kcml2ZXIoYXBjaTE1NjRfZHJpdmVyLCBhcGNpMTU2NF9wY2lfZHJpdmVyKTsKIAogTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRERJLURBVEEgQVBDSS0xNTY0LCAzMiBjaGFubmVsIERJIC8gMzIgY2hhbm5lbCBETyBib2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDMyLmMKaW5kZXggYzliOTMzYy4uYmUwYThhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDMyLmMKQEAgLTE5Nyw2ICsxOTcsNyBAQAogewogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJc3RydWN0IGFwY2kyMDMyX2ludF9wcml2YXRlICpzdWJwcml2OwogCXVuc2lnbmVkIGludCB2YWw7CiAJYm9vbCBkb19ldmVudCA9IGZhbHNlOwpAQCAtMjIyLDIxICsyMjMsMjAgQEAKIAkgKi8KIAogCWlmIChzdWJwcml2LT5hY3RpdmUgJiYgKHZhbCAmIHN1YnByaXYtPmVuYWJsZWRfaXNucykgIT0gMCkgewotCQl1bnNpZ25lZCBzaG9ydCBiaXRzOwotCQl1bnNpZ25lZCBpbnQgbiwgbGVuOwotCQl1bnNpZ25lZCBpbnQgKmNoYW5saXN0OworCQl1bnNpZ25lZCBzaG9ydCBiaXRzID0gMDsKKwkJaW50IGk7CiAKIAkJLyogQml0cyBpbiBzY2FuIGRhdGEgY29ycmVzcG9uZCB0byBpbmRpY2VzIGluIGNoYW5uZWwgbGlzdC4gKi8KLQkJYml0cyA9IDA7Ci0JCWxlbiA9IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOwotCQljaGFubGlzdCA9ICZzLT5hc3luYy0+Y21kLmNoYW5saXN0WzBdOwotCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuKyspCi0JCQlpZiAoKHZhbCAmICgxVSA8PCBDUl9DSEFOKGNoYW5saXN0W25dKSkpICE9IDApCi0JCQkJYml0cyB8PSAxVSA8PCBuOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOwogCi0JCWlmIChjb21lZGlfYnVmX3B1dChzLT5hc3luYywgYml0cykpIHsKKwkJCWlmICh2YWwgJiAoMSA8PCBjaGFuKSkKKwkJCQliaXRzIHw9ICgxIDw8IGkpOworCQl9CisKKwkJaWYgKGNvbWVkaV9idWZfcHV0KHMsIGJpdHMpKSB7CiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1M7Ci0JCQlpZiAocy0+YXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCiAJCQkgICAgc3VicHJpdi0+c3RvcF9jb3VudCA+IDApIHsKIAkJCQlzdWJwcml2LT5zdG9wX2NvdW50LS07CiAJCQkJaWYgKHN1YnByaXYtPnN0b3BfY291bnQgPT0gMCkgewpAQCAtMzc0LDUgKzM3NCw1IEBACiBtb2R1bGVfY29tZWRpX3BjaV9kcml2ZXIoYXBjaTIwMzJfZHJpdmVyLCBhcGNpMjAzMl9wY2lfZHJpdmVyKTsKIAogTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRERJLURBVEEgQVBDSS0yMDMyLCAzMiBjaGFubmVsIERPIGJvYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYwppbmRleCA1N2VlNmU1Li4wY2ZiMTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYwpAQCAtMjQ2LDUgKzI0Niw1IEBACiBtb2R1bGVfY29tZWRpX3BjaV9kcml2ZXIoYXBjaTMxMjBfZHJpdmVyLCBhcGNpMzEyMF9wY2lfZHJpdmVyKTsKIAogTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRERJLURBVEEgQVBDSS0zMTIwLCBBbmFsb2cgaW5wdXQgYm9hcmQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKaW5kZXggNmRjMTFjNC4uMDUzMmI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKQEAgLTM3Myw3ICszNzMsNyBAQAogCQl3cml0ZWwoc3RhdHVzLCBkZXZwcml2LT5tbWlvICsgMTYpOwogCiAJCXZhbCA9IHJlYWRsKGRldnByaXYtPm1taW8gKyAyOCk7Ci0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwpOworCQljb21lZGlfYnVmX3B1dChzLCB2YWwpOwogCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7CkBAIC01MzMsNyArNTMzLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgYXBjaTN4eHhfYm9hcmRpbmZvICpib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB0bXA7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtNTczLDMxICs1NzMsOSBAQAogCiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCi0JLyoKLQkgKiBGSVhNRTogVGhlIGhhcmR3YXJlIHN1cHBvcnRzIG11bHRpcGxlIHNjYW4gbW9kZXMgYnV0IHRoZSBvcmlnaW5hbAotCSAqIGFkZGktZGF0YSBkcml2ZXIgb25seSBzdXBwb3J0ZWQgcmVhZGluZyBhIHNpbmdsZSBjaGFubmVsIHdpdGgKLQkgKiBpbnRlcnJ1cHRzLiBOZWVkIGEgcHJvcGVyIGRhdGFzaGVldCB0byBmaXggdGhpcy4KLQkgKgotCSAqIFRoZSBmb2xsb3dpbmcgc2NhbiBtb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZToKLQkgKiAxKSBTaW5nbGUgc29mdHdhcmUgc2NhbgotCSAqIDIpIFNpbmdsZSBoYXJkd2FyZSB0cmlnZ2VyZWQgc2NhbgotCSAqIDMpIENvbnRpbnVvdXMgc29mdHdhcmUgc2NhbgotCSAqIDQpIENvbnRpbnVvdXMgc29mdHdhcmUgc2NhbiB3aXRoIHRpbWVyIGRlbGF5Ci0JICogNSkgQ29udGludW91cyBoYXJkd2FyZSB0cmlnZ2VyZWQgc2NhbgotCSAqIDYpIENvbnRpbnVvdXMgaGFyZHdhcmUgdHJpZ2dlcmVkIHNjYW4gd2l0aCB0aW1lciBkZWxheQotCSAqCi0JICogRm9yIG5vdywgbGltaXQgdGhlIGNoYW5saXN0IHRvIGEgc2luZ2xlIGNoYW5uZWwuCi0JICovCi0JaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgewotCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7Ci0JCWVyciB8PSAtRUlOVkFMOwotCX0KLQotCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7Ci0JZXJyIHw9IGFwY2kzeHh4X2FpX25zX3RvX3RpbWVyKGRldiwgJmNtZC0+Y29udmVydF9hcmcsCi0JCQkJICAgICAgIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwotCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJZXJyIHw9IC1FSU5WQUw7CisJYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwllcnIgfD0gYXBjaTN4eHhfYWlfbnNfdG9fdGltZXIoZGV2LCAmYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCBhcmcpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CkBAIC03MTksNyArNjk3LDggQEAKIAkJaWYgKGNoYW4gPCAxNikKIAkJCXJldHVybiAtRUlOVkFMOwogCQllbHNlCi0JCQkvKiBjaGFuZ2luZyBhbnkgY2hhbm5lbCBpbiBwb3J0IDIgY2hhbmdlcyB0aGUgZW50aXJlIHBvcnQgKi8KKwkJCS8qIGNoYW5naW5nIGFueSBjaGFubmVsIGluIHBvcnQgMiAqLworCQkJLyogY2hhbmdlcyB0aGUgZW50aXJlIHBvcnQgICAgICAgICovCiAJCQltYXNrID0gMHhmZjAwMDA7CiAJfQogCkBAIC04NDIsMTIgKzgyMSwzMCBAQAogCQlzLT5zdWJkZXZfZmxhZ3MJPSBTREZfUkVBREFCTEUgfCBib2FyZC0+YWlfc3ViZGV2X2ZsYWdzOwogCQlzLT5uX2NoYW4JPSBib2FyZC0+YWlfbl9jaGFuOwogCQlzLT5tYXhkYXRhCT0gYm9hcmQtPmFpX21heGRhdGE7Ci0JCXMtPmxlbl9jaGFubGlzdAk9IHMtPm5fY2hhbjsKIAkJcy0+cmFuZ2VfdGFibGUJPSAmYXBjaTN4eHhfYWlfcmFuZ2U7CiAJCXMtPmluc25fcmVhZAk9IGFwY2kzeHh4X2FpX2luc25fcmVhZDsKIAkJaWYgKGRldi0+aXJxKSB7CisJCQkvKgorCQkJICogRklYTUU6IFRoZSBoYXJkd2FyZSBzdXBwb3J0cyBtdWx0aXBsZSBzY2FuIG1vZGVzCisJCQkgKiBidXQgdGhlIG9yaWdpbmFsIGFkZGktZGF0YSBkcml2ZXIgb25seSBzdXBwb3J0ZWQKKwkJCSAqIHJlYWRpbmcgYSBzaW5nbGUgY2hhbm5lbCB3aXRoIGludGVycnVwdHMuIE5lZWQgYQorCQkJICogcHJvcGVyIGRhdGFzaGVldCB0byBmaXggdGhpcy4KKwkJCSAqCisJCQkgKiBUaGUgZm9sbG93aW5nIHNjYW4gbW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUKKwkJCSAqIGhhcmR3YXJlOgorCQkJICogICAxKSBTaW5nbGUgc29mdHdhcmUgc2NhbgorCQkJICogICAyKSBTaW5nbGUgaGFyZHdhcmUgdHJpZ2dlcmVkIHNjYW4KKwkJCSAqICAgMykgQ29udGludW91cyBzb2Z0d2FyZSBzY2FuCisJCQkgKiAgIDQpIENvbnRpbnVvdXMgc29mdHdhcmUgc2NhbiB3aXRoIHRpbWVyIGRlbGF5CisJCQkgKiAgIDUpIENvbnRpbnVvdXMgaGFyZHdhcmUgdHJpZ2dlcmVkIHNjYW4KKwkJCSAqICAgNikgQ29udGludW91cyBoYXJkd2FyZSB0cmlnZ2VyZWQgc2NhbiB3aXRoIHRpbWVyCisJCQkgKiAgICAgIGRlbGF5CisJCQkgKgorCQkJICogRm9yIG5vdywgbGltaXQgdGhlIGNoYW5saXN0IHRvIGEgc2luZ2xlIGNoYW5uZWwuCisJCQkgKi8KIAkJCWRldi0+cmVhZF9zdWJkZXYgPSBzOwogCQkJcy0+c3ViZGV2X2ZsYWdzCXw9IFNERl9DTURfUkVBRDsKKwkJCXMtPmxlbl9jaGFubGlzdAk9IDE7CiAJCQlzLT5kb19jbWR0ZXN0CT0gYXBjaTN4eHhfYWlfY21kdGVzdDsKIAkJCXMtPmRvX2NtZAk9IGFwY2kzeHh4X2FpX2NtZDsKIAkJCXMtPmNhbmNlbAk9IGFwY2kzeHh4X2FpX2NhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKaW5kZXggYTI5Y2VhYy4uNTg0ZmQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKQEAgLTEzNywxMCArMTM3LDggQEAKIAl1bnNpZ25lZCBsb25nIGxjcl9pb19iYXNlOwogCiAJaW50IHN0b3BfY291bnRlcjsKLQlpbnQgc3RvcF9pc19ub25lOwogCiAJdW5zaWduZWQgaW50IHNjYW5fZGVsYXk7Ci0JdW5zaWduZWQgaW50IGNoYW5saXN0X2xlbjsKIAl1bnNpZ25lZCBpbnQgY2h1bmtfY291bnRlcjsKIAl1bnNpZ25lZCBpbnQgY2h1bmtfbnVtX3NhbXBsZXM7CiAKQEAgLTMxNCwxNDggKzMxMiwxMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwY2k5MTExX2FpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IHJhbmdlMCA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCXVuc2lnbmVkIGludCBhcmVmMCA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCQl1bnNpZ25lZCBpbnQgYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKGNoYW4gIT0gaSkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLGNvdW50aW5nIHVwd2FyZHMgZnJvbSAwXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJhbmdlICE9IHJhbmdlMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoYXJlZiAhPSBhcmVmMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJlZmVyZW5jZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBjaTkxMTFfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJCSAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEgKmRldl9wcml2YXRlID0gZGV2LT5wcml2YXRlOwotCWludCB0bXA7Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgcmFuZ2UsIHJlZmVyZW5jZTsKLQlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JZXJyb3IgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfc3JjKCZjbWQtPnN0YXJ0X3NyYywgVFJJR19OT1cpOwotCWVycm9yIHw9IGNmY19jaGVja190cmlnZ2VyX3NyYygmY21kLT5zY2FuX2JlZ2luX3NyYywKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfc3JjKCZjbWQtPnN0YXJ0X3NyYywgVFJJR19OT1cpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+c2Nhbl9iZWdpbl9zcmMsCiAJCQkJCVRSSUdfVElNRVIgfCBUUklHX0ZPTExPVyB8IFRSSUdfRVhUKTsKLQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+Y29udmVydF9zcmMsCisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX3NyYygmY21kLT5jb252ZXJ0X3NyYywKIAkJCQkJVFJJR19USU1FUiB8IFRSSUdfRVhUKTsKLQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+c2Nhbl9lbmRfc3JjLCBUUklHX0NPVU5UKTsKLQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+c3RvcF9zcmMsCisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX3NyYygmY21kLT5zY2FuX2VuZF9zcmMsIFRSSUdfQ09VTlQpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+c3RvcF9zcmMsCiAJCQkJCVRSSUdfQ09VTlQgfCBUUklHX05PTkUpOwogCi0JaWYgKGVycm9yKQorCWlmIChlcnIpCiAJCXJldHVybiAxOwogCiAJLyogU3RlcCAyYSA6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSAqLwogCi0JZXJyb3IgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfaXNfdW5pcXVlKGNtZC0+c2Nhbl9iZWdpbl9zcmMpOwotCWVycm9yIHw9IGNmY19jaGVja190cmlnZ2VyX2lzX3VuaXF1ZShjbWQtPmNvbnZlcnRfc3JjKTsKLQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9pc191bmlxdWUoY21kLT5zdG9wX3NyYyk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2lzX3VuaXF1ZShjbWQtPnNjYW5fYmVnaW5fc3JjKTsKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfaXNfdW5pcXVlKGNtZC0+Y29udmVydF9zcmMpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9pc191bmlxdWUoY21kLT5zdG9wX3NyYyk7CiAKIAkvKiBTdGVwIDJiIDogYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KIAotCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSAmJgotCSAgICAhKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHx8Ci0JICAgICAgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpKSkKLQkJZXJyb3IgfD0gLUVJTlZBTDsKLQlpZiAoKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpICYmCi0JICAgICEoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHx8Ci0JICAgICAgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpKSkKLQkJZXJyb3IgfD0gLUVJTlZBTDsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQkJZXJyIHw9IC1FSU5WQUw7CisJfQogCi0JaWYgKGVycm9yKQorCWlmIChlcnIpCiAJCXJldHVybiAyOwogCiAJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JZXJyb3IgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdGFydF9hcmcsIDApOwogCiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKLQkJZXJyb3IgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5jb252ZXJ0X2FyZywKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+Y29udmVydF9hcmcsCiAJCQkJCVBDSTkxMTFfQUlfQUNRVUlTSVRJT05fUEVSSU9EX01JTl9OUyk7CiAJZWxzZQkvKiBUUklHX0VYVCAqLwotCQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIDApOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCAwKTsKIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCi0JCWVycm9yIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAogCQkJCQlQQ0k5MTExX0FJX0FDUVVJU0lUSU9OX1BFUklPRF9NSU5fTlMpOwogCWVsc2UJLyogVFJJR19GT0xMT1cgfHwgVFJJR19FWFQgKi8KLQkJZXJyb3IgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCAwKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgMCk7CiAKLQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLAotCQkJCQkgIGNtZC0+Y2hhbmxpc3RfbGVuKTsKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOwogCiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKLQkJZXJyb3IgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5zdG9wX2FyZywgMSk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPnN0b3BfYXJnLCAxKTsKIAllbHNlCS8qIFRSSUdfTk9ORSAqLwotCQllcnJvciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RvcF9hcmcsIDApOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0b3BfYXJnLCAwKTsKIAotCWlmIChlcnJvcikKKwlpZiAoZXJyKQogCQlyZXR1cm4gMzsKIAotCS8qICBTdGVwIDQgOiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCS8qIFN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KIAogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKIAkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV8yTUhaLAogCQkJCQkgICZkZXZfcHJpdmF0ZS0+ZGl2MSwKIAkJCQkJICAmZGV2X3ByaXZhdGUtPmRpdjIsCi0JCQkJCSAgJmNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnJvcisrOworCQkJCQkgICZhcmcsIGNtZC0+ZmxhZ3MpOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCBhcmcpOwogCX0KLQkvKiAgVGhlcmUncyBvbmx5IG9uZSB0aW1lciBvbiB0aGlzIGNhcmQsIHNvIHRoZSBzY2FuX2JlZ2luIHRpbWVyIG11c3QgKi8KLQkvKiAgYmUgYSBtdWx0aXBsZSBvZiBjaGFubGlzdF9sZW4qY29udmVydF9hcmcgKi8KIAorCS8qCisJICogVGhlcmUncyBvbmx5IG9uZSB0aW1lciBvbiB0aGlzIGNhcmQsIHNvIHRoZSBzY2FuX2JlZ2luIHRpbWVyCisJICogbXVzdCBiZSBhIG11bHRpcGxlIG9mIGNoYW5saXN0X2xlbipjb252ZXJ0X2FyZworCSAqLwogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJYXJnID0gY21kLT5jaGFubGlzdF9sZW4gKiBjbWQtPmNvbnZlcnRfYXJnOwogCi0JCXVuc2lnbmVkIGludCBzY2FuX2JlZ2luX21pbjsKLQkJdW5zaWduZWQgaW50IHNjYW5fYmVnaW5fYXJnOwotCQl1bnNpZ25lZCBpbnQgc2Nhbl9mYWN0b3I7CisJCWlmIChhcmcgPCBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJYXJnICo9IChjbWQtPnNjYW5fYmVnaW5fYXJnIC8gYXJnKTsKIAotCQlzY2FuX2JlZ2luX21pbiA9IGNtZC0+Y2hhbmxpc3RfbGVuICogY21kLT5jb252ZXJ0X2FyZzsKLQotCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSBzY2FuX2JlZ2luX21pbikgewotCQkJaWYgKHNjYW5fYmVnaW5fbWluIDwgY21kLT5zY2FuX2JlZ2luX2FyZykgewotCQkJCXNjYW5fZmFjdG9yID0KLQkJCQkgICAgY21kLT5zY2FuX2JlZ2luX2FyZyAvIHNjYW5fYmVnaW5fbWluOwotCQkJCXNjYW5fYmVnaW5fYXJnID0gc2Nhbl9mYWN0b3IgKiBzY2FuX2JlZ2luX21pbjsKLQkJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSBzY2FuX2JlZ2luX2FyZykgewotCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gc2Nhbl9iZWdpbl9hcmc7Ci0JCQkJCWVycm9yKys7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gc2Nhbl9iZWdpbl9taW47Ci0JCQkJZXJyb3IrKzsKLQkJCX0KLQkJfQorCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBhcmcpOwogCX0KIAotCWlmIChlcnJvcikKKwlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qICBTdGVwIDUgOiBjaGVjayBjaGFubmVsIGxpc3QgKi8KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBwY2k5MTExX2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKIAotCWlmIChjbWQtPmNoYW5saXN0KSB7Ci0KLQkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKLQkJcmVmZXJlbmNlID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKLQotCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiAxKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGkpIHsKLQkJCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJCSAgICAgImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSAiCi0JCQkJCQkgICAgICJjaGFubmVscyxjb3VudGluZyB1cHdhcmRzIGZyb20gMFxuIik7Ci0JCQkJCWVycm9yKys7Ci0JCQkJfQotCQkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSByYW5nZSkgewotCQkJCQljb21lZGlfZXJyb3IoZGV2LAotCQkJCQkJICAgICAiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOwotCQkJCQllcnJvcisrOwotCQkJCX0KLQkJCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSAhPSByZWZlcmVuY2UpIHsKLQkJCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJCSAgICAgImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSByZWZlcmVuY2VcbiIpOwotCQkJCQllcnJvcisrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWlmIChlcnJvcikKKwlpZiAoZXJyKQogCQlyZXR1cm4gNTsKIAogCXJldHVybiAwOwpAQCAtNDY2LDE4ICs0NTMsMTggQEAKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IHBjaTkxMTFfcHJpdmF0ZV9kYXRhICpkZXZfcHJpdmF0ZSA9IGRldi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29tZWRpX2NtZCAqYXN5bmNfY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCiAJLyogIFNldCBjaGFubmVsIHNjYW4gbGltaXQgKi8KIAkvKiAgUENJOTExMSBhbGxvd3Mgb25seSBzY2FubmluZyBmcm9tIGNoYW5uZWwgMCB0byBjaGFubmVsIG4gKi8KIAkvKiAgVE9ETzogaGFuZGxlIHRoZSBjYXNlIG9mIGFuIGV4dGVybmFsIG11bHRpcGxleGVyICovCiAKLQlpZiAoYXN5bmNfY21kLT5jaGFubGlzdF9sZW4gPiAxKSB7Ci0JCW91dGIoYXN5bmNfY21kLT5jaGFubGlzdF9sZW4gLSAxLAorCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJb3V0YihjbWQtPmNoYW5saXN0X2xlbiAtIDEsCiAJCQlkZXYtPmlvYmFzZSArIFBDSTkxMTFfQUlfQ0hBTk5FTF9SRUcpOwogCQlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIHRydWUpOwogCX0gZWxzZSB7Ci0JCW91dGIoQ1JfQ0hBTihhc3luY19jbWQtPmNoYW5saXN0WzBdKSwKKwkJb3V0YihDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pLAogCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTExX0FJX0NIQU5ORUxfUkVHKTsKIAkJcGNpOTExMV9hdXRvc2Nhbl9zZXQoZGV2LCBmYWxzZSk7CiAJfQpAQCAtNDg1LDIyICs0NzIsMTggQEAKIAkvKiAgU2V0IGdhaW4gKi8KIAkvKiAgVGhpcyBpcyB0aGUgc2FtZSBnYWluIG9uIGV2ZXJ5IGNoYW5uZWwgKi8KIAotCW91dGIoQ1JfUkFOR0UoYXN5bmNfY21kLT5jaGFubGlzdFswXSkgJiBQQ0k5MTExX0FJX1JBTkdFX01BU0ssCisJb3V0YihDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSAmIFBDSTkxMTFfQUlfUkFOR0VfTUFTSywKIAkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTExX0FJX1JBTkdFX1NUQVRfUkVHKTsKIAogCS8qIFNldCBjb3VudGVyICovCi0JaWYgKGFzeW5jX2NtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQlkZXZfcHJpdmF0ZS0+c3RvcF9jb3VudGVyID0KLQkJICAgIGFzeW5jX2NtZC0+c3RvcF9hcmcgKiBhc3luY19jbWQtPmNoYW5saXN0X2xlbjsKLQkJZGV2X3ByaXZhdGUtPnN0b3BfaXNfbm9uZSA9IDA7Ci0JfSBlbHNlIHsJLyogVFJJR19OT05FICovCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciA9IGNtZC0+c3RvcF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwllbHNlCS8qIFRSSUdfTk9ORSAqLwogCQlkZXZfcHJpdmF0ZS0+c3RvcF9jb3VudGVyID0gMDsKLQkJZGV2X3ByaXZhdGUtPnN0b3BfaXNfbm9uZSA9IDE7Ci0JfQogCiAJLyogIFNldCB0aW1lciBwYWNlciAqLwogCWRldl9wcml2YXRlLT5zY2FuX2RlbGF5ID0gMDsKLQlpZiAoYXN5bmNfY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewogCQlwY2k5MTExX3RyaWdnZXJfc291cmNlX3NldChkZXYsIHNvZnR3YXJlKTsKIAkJcGNpOTExMV90aW1lcl9zZXQoZGV2KTsKIAkJcGNpOTExMV9maWZvX3Jlc2V0KGRldik7CkBAIC01MTAsMTEgKzQ5Myw5IEBACiAJCXBseDkwNTBfaW50ZXJydXB0X2NvbnRyb2woZGV2X3ByaXZhdGUtPmxjcl9pb19iYXNlLCB0cnVlLCB0cnVlLAogCQkJCQkgIGZhbHNlLCB0cnVlLCB0cnVlKTsKIAotCQlpZiAoYXN5bmNfY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCQlkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSA9Ci0JCQkJKGFzeW5jX2NtZC0+c2Nhbl9iZWdpbl9hcmcgLwotCQkJCSAoYXN5bmNfY21kLT5jb252ZXJ0X2FyZyAqCi0JCQkJICBhc3luY19jbWQtPmNoYW5saXN0X2xlbikpIC0gMTsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJZGV2X3ByaXZhdGUtPnNjYW5fZGVsYXkgPSAoY21kLT5zY2FuX2JlZ2luX2FyZyAvCisJCQkJKGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbikpIC0gMTsKIAkJfQogCX0gZWxzZSB7CS8qIFRSSUdfRVhUICovCiAJCXBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KGRldiwgZXh0ZXJuYWwpOwpAQCAtNTI3LDEwICs1MDgsOSBAQAogCX0KIAogCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgKj0gKDEgKyBkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSk7Ci0JZGV2X3ByaXZhdGUtPmNoYW5saXN0X2xlbiA9IGFzeW5jX2NtZC0+Y2hhbmxpc3RfbGVuOwogCWRldl9wcml2YXRlLT5jaHVua19jb3VudGVyID0gMDsKLQlkZXZfcHJpdmF0ZS0+Y2h1bmtfbnVtX3NhbXBsZXMgPQotCSAgICBkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuICogKDEgKyBkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSk7CisJZGV2X3ByaXZhdGUtPmNodW5rX251bV9zYW1wbGVzID0gY21kLT5jaGFubGlzdF9sZW4gKgorCQkJCQkgKDEgKyBkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU1MSwxMiArNTMxLDcxIEBACiAJCWFycmF5W2ldID0gKChhcnJheVtpXSA+PiBzaGlmdCkgJiBtYXhkYXRhKSBeIGludmVydDsKIH0KIAorc3RhdGljIHZvaWQgcGNpOTExMV9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKK3sKKwlzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCB0b3RhbCA9IDA7CisJdW5zaWduZWQgaW50IHNhbXBsZXM7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJICAgIFBDSTkxMTFfRklGT19IQUxGX1NJWkUgPiBkZXZwcml2LT5zdG9wX2NvdW50ZXIpCisJCXNhbXBsZXMgPSBkZXZwcml2LT5zdG9wX2NvdW50ZXI7CisJZWxzZQorCQlzYW1wbGVzID0gUENJOTExMV9GSUZPX0hBTEZfU0laRTsKKworCWluc3coZGV2LT5pb2Jhc2UgKyBQQ0k5MTExX0FJX0ZJRk9fUkVHLAorCSAgICAgZGV2cHJpdi0+YWlfYm91bmNlX2J1ZmZlciwgc2FtcGxlcyk7CisKKwlpZiAoZGV2cHJpdi0+c2Nhbl9kZWxheSA8IDEpIHsKKwkJdG90YWwgPSBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsCisJCQkJCQkgIGRldnByaXYtPmFpX2JvdW5jZV9idWZmZXIsCisJCQkJCQkgIHNhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgcG9zID0gMDsKKwkJdW5zaWduZWQgaW50IHRvX3JlYWQ7CisKKwkJd2hpbGUgKHBvcyA8IHNhbXBsZXMpIHsKKwkJCWlmIChkZXZwcml2LT5jaHVua19jb3VudGVyIDwgY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCQl0b19yZWFkID0gY21kLT5jaGFubGlzdF9sZW4gLQorCQkJCQkgIGRldnByaXYtPmNodW5rX2NvdW50ZXI7CisKKwkJCQlpZiAodG9fcmVhZCA+IHNhbXBsZXMgLSBwb3MpCisJCQkJCXRvX3JlYWQgPSBzYW1wbGVzIC0gcG9zOworCisJCQkJdG90YWwgKz0gY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLAorCQkJCQkJZGV2cHJpdi0+YWlfYm91bmNlX2J1ZmZlciArIHBvcywKKwkJCQkJCXRvX3JlYWQgKiBzaXplb2Yoc2hvcnQpKTsKKwkJCX0gZWxzZSB7CisJCQkJdG9fcmVhZCA9IGRldnByaXYtPmNodW5rX251bV9zYW1wbGVzIC0KKwkJCQkJICBkZXZwcml2LT5jaHVua19jb3VudGVyOworCisJCQkJaWYgKHRvX3JlYWQgPiBzYW1wbGVzIC0gcG9zKQorCQkJCQl0b19yZWFkID0gc2FtcGxlcyAtIHBvczsKKworCQkJCXRvdGFsICs9IHRvX3JlYWQgKiBzaXplb2Yoc2hvcnQpOworCQkJfQorCisJCQlwb3MgKz0gdG9fcmVhZDsKKwkJCWRldnByaXYtPmNodW5rX2NvdW50ZXIgKz0gdG9fcmVhZDsKKworCQkJaWYgKGRldnByaXYtPmNodW5rX2NvdW50ZXIgPj0KKwkJCSAgICBkZXZwcml2LT5jaHVua19udW1fc2FtcGxlcykKKwkJCQlkZXZwcml2LT5jaHVua19jb3VudGVyID0gMDsKKwkJfQorCX0KKworCWRldnByaXYtPnN0b3BfY291bnRlciAtPSB0b3RhbCAvIHNpemVvZihzaG9ydCk7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2k5MTExX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwX2RldmljZSkKIHsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gcF9kZXZpY2U7CiAJc3RydWN0IHBjaTkxMTFfcHJpdmF0ZV9kYXRhICpkZXZfcHJpdmF0ZSA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXVuc2lnbmVkIGNoYXIgaW50Y3NyOwpAQCAtNTY4LDYgKzYwNyw3IEBACiAJfQogCiAJYXN5bmMgPSBzLT5hc3luYzsKKwljbWQgPSAmYXN5bmMtPmNtZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOwogCkBAIC01OTksNzkgKzYzOSwxMSBAQAogCQl9CiAKIAkJLyogJzAnIG1lYW5zIEZJRk8gaXMgaGFsZi1mdWxsICovCi0JCWlmICghKHN0YXR1cyAmIFBDSTkxMTFfQUlfU1RBVF9GRl9IRikpIHsKLQkJCXVuc2lnbmVkIGludCBudW1fc2FtcGxlczsKLQkJCXVuc2lnbmVkIGludCBieXRlc193cml0dGVuID0gMDsKLQotCQkJbnVtX3NhbXBsZXMgPQotCQkJICAgIFBDSTkxMTFfRklGT19IQUxGX1NJWkUgPgotCQkJICAgIGRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIKLQkJCSAgICAmJiAhZGV2X3ByaXZhdGUtPgotCQkJICAgIHN0b3BfaXNfbm9uZSA/IGRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgOgotCQkJICAgIFBDSTkxMTFfRklGT19IQUxGX1NJWkU7Ci0JCQlpbnN3KGRldi0+aW9iYXNlICsgUENJOTExMV9BSV9GSUZPX1JFRywKLQkJCSAgICAgZGV2X3ByaXZhdGUtPmFpX2JvdW5jZV9idWZmZXIsIG51bV9zYW1wbGVzKTsKLQotCQkJaWYgKGRldl9wcml2YXRlLT5zY2FuX2RlbGF5IDwgMSkgewotCQkJCWJ5dGVzX3dyaXR0ZW4gPQotCQkJCSAgICBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsCi0JCQkJCQkJICAgICAgZGV2X3ByaXZhdGUtPgotCQkJCQkJCSAgICAgIGFpX2JvdW5jZV9idWZmZXIsCi0JCQkJCQkJICAgICAgbnVtX3NhbXBsZXMgKgotCQkJCQkJCSAgICAgIHNpemVvZihzaG9ydCkpOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgcG9zaXRpb24gPSAwOwotCQkJCWludCB0b19yZWFkOwotCi0JCQkJd2hpbGUgKHBvc2l0aW9uIDwgbnVtX3NhbXBsZXMpIHsKLQkJCQkJaWYgKGRldl9wcml2YXRlLT5jaHVua19jb3VudGVyIDwKLQkJCQkJICAgIGRldl9wcml2YXRlLT5jaGFubGlzdF9sZW4pIHsKLQkJCQkJCXRvX3JlYWQgPQotCQkJCQkJICAgIGRldl9wcml2YXRlLT5jaGFubGlzdF9sZW4gLQotCQkJCQkJICAgIGRldl9wcml2YXRlLT5jaHVua19jb3VudGVyOwotCi0JCQkJCQlpZiAodG9fcmVhZCA+Ci0JCQkJCQkgICAgbnVtX3NhbXBsZXMgLSBwb3NpdGlvbikKLQkJCQkJCQl0b19yZWFkID0KLQkJCQkJCQkgICAgbnVtX3NhbXBsZXMgLQotCQkJCQkJCSAgICBwb3NpdGlvbjsKLQotCQkJCQkJYnl0ZXNfd3JpdHRlbiArPQotCQkJCQkJICAgIGNmY193cml0ZV9hcnJheV90b19idWZmZXIKLQkJCQkJCSAgICAocywKLQkJCQkJCSAgICAgZGV2X3ByaXZhdGUtPmFpX2JvdW5jZV9idWZmZXIKLQkJCQkJCSAgICAgKyBwb3NpdGlvbiwKLQkJCQkJCSAgICAgdG9fcmVhZCAqIHNpemVvZihzaG9ydCkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJdG9fcmVhZCA9Ci0JCQkJCQkgICAgZGV2X3ByaXZhdGUtPmNodW5rX251bV9zYW1wbGVzCi0JCQkJCQkgICAgLQotCQkJCQkJICAgIGRldl9wcml2YXRlLT5jaHVua19jb3VudGVyOwotCQkJCQkJaWYgKHRvX3JlYWQgPgotCQkJCQkJICAgIG51bV9zYW1wbGVzIC0gcG9zaXRpb24pCi0JCQkJCQkJdG9fcmVhZCA9Ci0JCQkJCQkJICAgIG51bV9zYW1wbGVzIC0KLQkJCQkJCQkgICAgcG9zaXRpb247Ci0KLQkJCQkJCWJ5dGVzX3dyaXR0ZW4gKz0KLQkJCQkJCSAgICBzaXplb2Yoc2hvcnQpICogdG9fcmVhZDsKLQkJCQkJfQotCi0JCQkJCXBvc2l0aW9uICs9IHRvX3JlYWQ7Ci0JCQkJCWRldl9wcml2YXRlLT5jaHVua19jb3VudGVyICs9IHRvX3JlYWQ7Ci0KLQkJCQkJaWYgKGRldl9wcml2YXRlLT5jaHVua19jb3VudGVyID49Ci0JCQkJCSAgICBkZXZfcHJpdmF0ZS0+Y2h1bmtfbnVtX3NhbXBsZXMpCi0JCQkJCQlkZXZfcHJpdmF0ZS0+Y2h1bmtfY291bnRlciA9IDA7Ci0JCQkJfQotCQkJfQotCi0JCQlkZXZfcHJpdmF0ZS0+c3RvcF9jb3VudGVyIC09Ci0JCQkgICAgYnl0ZXNfd3JpdHRlbiAvIHNpemVvZihzaG9ydCk7Ci0JCX0KKwkJaWYgKCEoc3RhdHVzICYgUENJOTExMV9BSV9TVEFUX0ZGX0hGKSkKKwkJCXBjaTkxMTFfaGFuZGxlX2ZpZm9faGFsZl9mdWxsKGRldiwgcyk7CiAJfQogCi0JaWYgKGRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgPT0gMCAmJiAhZGV2X3ByaXZhdGUtPnN0b3BfaXNfbm9uZSkKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgPT0gMCkKIAkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTkxMTFfSU5UX0NMUl9SRUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwppbmRleCAzY2ZhMTc1Li41OWE2NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwpAQCAtOTYsNyArOTYsNyBAQAogCQkJCSAqIGNvcnJlY3QgY2hhbm5lbCBudW1iZXIgb24gZXZlcnkgMTIgYml0IHNhbXBsZQogCQkJCSAqLwogCi0jZGVmaW5lIElPUkFOR0VfOTExOCAJNjQJLyogSSBob3BlICovCisjZGVmaW5lIElPUkFOR0VfOTExOAk2NAkvKiBJIGhvcGUgKi8KICNkZWZpbmUgUENJOTExOF9DSEFOTEVOCTI1NQkvKgogCQkJCSAqIGxlbiBvZiBjaGFubGlzdCwgc29tZSBzb3VyY2Ugc2F5IDI1NiwKIAkJCQkgKiBidXQgcmVhbGl0eSBsb29rcyBsaWtlIDI1NSA6LSgKQEAgLTMyMCwxNCArMzIwLDkgQEAKIAl1bnNpZ25lZCBjaGFyIEFkQ29udHJvbFJlZzsJLyogQS9EIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAl1bnNpZ25lZCBjaGFyIEludENvbnRyb2xSZWc7CS8qIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCiAJdW5zaWduZWQgY2hhciBBZEZ1bmN0aW9uUmVnOwkvKiBBL0QgZnVuY3Rpb24gcmVnaXN0ZXIgKi8KLQljaGFyIHZhbGlkOwkJCS8qIGRyaXZlciBpcyBvayAqLwogCWNoYXIgYWlfbmV2ZXJlbmRpbmc7CQkvKiB3ZSBkbyB1bmxpbWl0ZWQgQUkgKi8KLQl1bnNpZ25lZCBpbnQgaTgyNTRfb3NjX2Jhc2U7CS8qIGZyZXF1ZW5jZSBvZiBvbmJvYXJkIG9zY2lsYXRvciAqLwogCXVuc2lnbmVkIGludCBhaV9kbzsJCS8qIHdoYXQgZG8gQUk/IDA9bm90aGluZywgMSB0byA0IG1vZGUgKi8KIAl1bnNpZ25lZCBpbnQgYWlfYWN0X3NjYW47CS8qIGhvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkICovCi0JdW5zaWduZWQgaW50IGFpX2J1Zl9wdHI7CS8qIGRhdGEgYnVmZmVyIHB0ciBpbiBzYW1wbGVzICovCi0JdW5zaWduZWQgaW50IGFpX25fY2hhbjsJCS8qIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkICovCi0JdW5zaWduZWQgaW50IGFpX25fc2NhbmxlbjsJLyogbGVuIG9mIGFjdHVhbCBzY2FubGlzdCAqLwogCXVuc2lnbmVkIGludCBhaV9uX3JlYWxzY2FubGVuOwkvKgogCQkJCQkgKiB3aGF0IHdlIG11c3QgdHJhbnNmZXIgZm9yIG9uZQogCQkJCQkgKiBvdXRnb2luZyBzY2FuIGluY2x1ZGUgZnJvbnQvYmFjayBhZGRzCkBAIC0zNDEsOSArMzM2LDYgQEAKIAkJCQkJICogaG93IG1hbnkgY2hhbm5lbHMgd2UgbXVzdCBhZGQKIAkJCQkJICogYmVmb3JlIHNjYW4gdG8gc2F0aXNmeSBETUE/CiAJCQkJCSAqLwotCXVuc2lnbmVkIGludCAqYWlfY2hhbmxpc3Q7CS8qIGFjdHVhbCBjaGFubGlzdCAqLwotCXVuc2lnbmVkIGludCBhaV90aW1lcjE7Ci0JdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKIAl1bnNpZ25lZCBpbnQgYWlfZmxhZ3M7CiAJY2hhciBhaTEyX3N0YXJ0c3RvcDsJCS8qCiAJCQkJCSAqIG1lYXN1cmUgY2FuIHN0YXJ0L3N0b3AKQEAgLTM1Myw5ICszNDUsNyBAQAogCQkJCQkJICogZGl2aXNvcnMgZm9yIHN0YXJ0IG9mIG1lYXN1cmUKIAkJCQkJCSAqIG9uIGV4dGVybmFsIHN0YXJ0CiAJCQkJCQkgKi8KLQl1bnNpZ25lZCBpbnQgYWlfZGF0YV9sZW47CiAJdW5zaWduZWQgc2hvcnQgYW9fZGF0YVsyXTsJCS8qIGRhdGEgb3V0cHV0IGJ1ZmZlciAqLwotCXVuc2lnbmVkIGludCBhaV9zY2FuczsJCQkvKiBudW1iZXIgb2Ygc2NhbnMgdG8gZG8gKi8KIAljaGFyIGRtYV9kb3VibGVidWY7CQkJLyogd2UgY2FuIHVzZSBkb3VibGUgYnVmZmVyaW5nICovCiAJdW5zaWduZWQgaW50IGRtYV9hY3RidWY7CQkvKiB3aGljaCBidWZmZXIgaXMgdXNlZCBub3cgKi8KIAl1bnNpZ25lZCBzaG9ydCAqZG1hYnVmX3ZpcnRbMl07CQkvKgpAQCAtMzcyLDMxICszNjIsMTIgQEAKIAkJCQkJCSAqLwogCXVuc2lnbmVkIGludCBkbWFidWZfdXNlZF9zaXplWzJdOwkvKiB3aGljaCBzaXplIHdhcyB0cnVseSB1c2VkICovCiAJdW5zaWduZWQgaW50IGRtYWJ1Zl9wYW5pY19zaXplWzJdOwotCXVuc2lnbmVkIGludCBkbWFidWZfc2FtcGxlc1syXTsJCS8qIHNpemUgaW4gc2FtcGxlcyAqLwogCWludCBkbWFidWZfcGFnZXNbMl07CQkJLyogbnVtYmVyIG9mIHBhZ2VzIGluIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGNoYXIgY250MF91c2VyczsJCS8qCi0JCQkJCQkgKiBiaXQgZmllbGQgb2YgODI1NCBDTlQwIHVzZXJzCi0JCQkJCQkgKiAoMC11bnVzZWQsIDEtQU8sIDItREksIDMtRE8pCi0JCQkJCQkgKi8KIAl1bnNpZ25lZCBjaGFyIGV4dHRyZ191c2VyczsJCS8qCiAJCQkJCQkgKiBiaXQgZmllbGQgb2YgZXh0ZXJuYWwgdHJpZ2dlcgogCQkJCQkJICogdXNlcnMoMC1BSSwgMS1BTywgMi1ESSwgMy1ETykKIAkJCQkJCSAqLwotCXVuc2lnbmVkIGludCBjbnQwX2Rpdmlzb3I7CQkvKiBhY3R1YWwgQ05UMCBkaXZpc29yICovCi0Jdm9pZCAoKmludF9haV9mdW5jKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKLQkJdW5zaWduZWQgc2hvcnQsCi0JCXVuc2lnbmVkIGludCwKLQkJdW5zaWduZWQgc2hvcnQpOwkvKgotCQkJCQkgKiBwdHIgdG8gYWN0dWFsIGludGVycnVwdAotCQkJCQkgKiBBSSBmdW5jdGlvbgotCQkJCQkgKi8KLQl1bnNpZ25lZCBjaGFyIGFpMTZiaXRzOwkJLyogPTEgMTYgYml0IGNhcmQgKi8KIAl1bnNpZ25lZCBjaGFyIHVzZWRtYTsJCS8qID0xIHVzZSBETUEgdHJhbnNmZXIgYW5kIG5vdCBJTlQgKi8KLQl1bnNpZ25lZCBjaGFyIHVzZWVvc2hhbmRsZTsJLyoKLQkJCQkJICogPTEgY2hhbmdlIFdBS0VfRU9TIERNQSB0cmFuc2ZlcgotCQkJCQkgKiB0byBmaXQgb24gZXZlcnkgc2Vjb25kCi0JCQkJCSAqLwotCXVuc2lnbmVkIGNoYXIgdXNlc3NoOwkJLyogPTEgdHVybiBvbiBTJkggc3VwcG9ydCAqLwogCWludCBzb2Z0c3NoZGVsYXk7CQkvKgogCQkJCQkgKiA+MCB1c2Ugc29mdHdhcmUgUyZILAogCQkJCQkgKiBudW1lciBpcyByZXF1ZXN0ZWQgZGVsYXkgaW4gbnMKQEAgLTQxMSw3ICszODIsNiBAQAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgYWlfbWFza2VycjsJLyogd2hpY2ggd2FybmluZyB3YXMgcHJpbnRlZCAqLwogCXVuc2lnbmVkIGludCBhaV9tYXNraGFyZGVycjsJLyogb24gd2hpY2ggZXJyb3IgYml0cyBzdG9wcyAqLwotCXVuc2lnbmVkIGludCBhaV9pbnR0cmlnX3N0YXJ0OwkvKiBUUklHX0lOVCBmb3Igc3RhcnQgKi8KIH07CiAKIHN0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC00NjgsNyArNDM4LDcgQEAKIHN0YXRpYyBpbnQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IG5fY2hhbiwKIAkJCSAgICAgIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCByb3QsIGludCBmcm9udGFkZCwKLQkJCSAgICAgIGludCBiYWNrYWRkLCBpbnQgdXNlZG1hLCBjaGFyIHVzZWVvcykKKwkJCSAgICAgIGludCBiYWNrYWRkLCBpbnQgdXNlZG1hKQogewogCXN0cnVjdCBwY2k5MTE4X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJdW5zaWduZWQgaW50IGksIGRpZmZlcmVuY2lhbCA9IDAsIGJpcG9sYXIgPSAwOwpAQCAtNTUyLDE4ICs1MjIsNiBAQAogI2lmZGVmIFBDSTkxMThfUEFSQU5PSURDSEVDSwogCWRldnByaXYtPmNoYW5saXN0W25fY2hhbiBeIHVzZWRtYV0gPSBkZXZwcml2LT5jaGFubGlzdFswIF4gdXNlZG1hXTsKIAkJCQkJCS8qIGZvciAzMmJpdCBvcGVyYXRpb25zICovCi0JaWYgKHVzZWVvcykgewotCQlmb3IgKGkgPSAxOyBpIDwgbl9jaGFuOyBpKyspIHsJLyogc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkICovCi0JCQlkZXZwcml2LT5jaGFubGlzdFsobl9jaGFuICsgaSkgXiB1c2VkbWFdID0KLQkJCSAgICAoQ1JfQ0hBTihjaGFubGlzdFtpXSkgJiAweGYpIDw8IHJvdDsKLQkJfQotCQlkZXZwcml2LT5jaGFubGlzdFsoMiAqIG5fY2hhbikgXiB1c2VkbWFdID0KLQkJCQkJCWRldnByaXYtPmNoYW5saXN0WzAgXiB1c2VkbWFdOwotCQkJCQkJLyogZm9yIDMyYml0IG9wZXJhdGlvbnMgKi8KLQkJdXNlZW9zID0gMjsKLQl9IGVsc2UgewotCQl1c2Vlb3MgPSAxOwotCX0KICNlbmRpZgogCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOwkvKiBjbG9zZSBzY2FuIHF1ZXVlICovCiAJLyogdWRlbGF5KDEwMCk7IGltcG9ydGFudCBkZWxheSwgb3IgZmlyc3Qgc2FtcGxlIHdpbGwgYmUgY3JpcHBsZWQgKi8KQEAgLTYwMyw3ICs1NjEsNyBAQAogCQkJCQkJICogdHJpZ2dlciBzdG9wCiAJCQkJCQkgKi8KIAotCWlmICghc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgMSwgJmluc24tPmNoYW5zcGVjLCAwLCAwLCAwLCAwLCAwKSkKKwlpZiAoIXNldHVwX2NoYW5uZWxfbGlzdChkZXYsIHMsIDEsICZpbnNuLT5jaGFuc3BlYywgMCwgMCwgMCwgMCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREVMRklGTyk7CS8qIGZsdXNoIEZJRk8gKi8KQEAgLTYxOCw3ICs1NzYsNyBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCWlmIChkZXZwcml2LT5haTE2Yml0cykgeworCQlpZiAocy0+bWF4ZGF0YSA9PSAweGZmZmYpIHsKIAkJCWRhdGFbbl0gPQogCQkJICAgIChpbmwoZGV2LT5pb2Jhc2UgKwogCQkJCSBQQ0k5MTE4X0FEX0RBVEEpICYgMHhmZmZmKSBeIDB4ODAwMDsKQEAgLTcxMywxMCArNjcxLDExIEBACiAJCQkJCSAgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQogewogCXN0cnVjdCBwY2k5MTE4X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CiAJdW5zaWduZWQgaW50IHN0YXJ0X3BvcyA9IGRldnByaXYtPmFpX2FkZF9mcm9udCwKLQkgICAgc3RvcF9wb3MgPSBkZXZwcml2LT5haV9hZGRfZnJvbnQgKyBkZXZwcml2LT5haV9uX2NoYW47Ci0JdW5zaWduZWQgaW50IHJhd19zY2FubGVuID0gZGV2cHJpdi0+YWlfYWRkX2Zyb250ICsgZGV2cHJpdi0+YWlfbl9jaGFuICsKKwkgICAgc3RvcF9wb3MgPSBkZXZwcml2LT5haV9hZGRfZnJvbnQgKyBjbWQtPmNoYW5saXN0X2xlbjsKKwl1bnNpZ25lZCBpbnQgcmF3X3NjYW5sZW4gPSBkZXZwcml2LT5haV9hZGRfZnJvbnQgKyBjbWQtPmNoYW5saXN0X2xlbiArCiAJICAgIGRldnByaXYtPmFpX2FkZF9iYWNrOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKQEAgLTczNywxMyArNjk2LDE0IEBACiAJCQkJCXVuc2lnbmVkIGludCBudW1fc2FtcGxlcykKIHsKIAlzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOwogCiAJbnVtX3NhbXBsZXMgPSBkZWZyYWdtZW50X2RtYV9idWZmZXIoZGV2LCBzLCBkbWFfYnVmZmVyLCBudW1fc2FtcGxlcyk7CiAJZGV2cHJpdi0+YWlfYWN0X3NjYW4gKz0KLQkgICAgKHMtPmFzeW5jLT5jdXJfY2hhbiArIG51bV9zYW1wbGVzKSAvIGRldnByaXYtPmFpX25fc2NhbmxlbjsKKwkgICAgKHMtPmFzeW5jLT5jdXJfY2hhbiArIG51bV9zYW1wbGVzKSAvIGNtZC0+c2Nhbl9lbmRfYXJnOwogCXMtPmFzeW5jLT5jdXJfY2hhbiArPSBudW1fc2FtcGxlczsKLQlzLT5hc3luYy0+Y3VyX2NoYW4gJT0gZGV2cHJpdi0+YWlfbl9zY2FubGVuOworCXMtPmFzeW5jLT5jdXJfY2hhbiAlPSBjbWQtPnNjYW5fZW5kX2FyZzsKIAludW1fYnl0ZXMgPQogCSAgICBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRtYV9idWZmZXIsCiAJCQkJICAgICAgbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKQEAgLTc5MSw0NyArNzUxLDUxIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgKnRpbTEsIHVuc2lnbmVkIGludCAqdGltMiwKIAkJCQkgIHVuc2lnbmVkIGludCBmbGFncywgaW50IGNoYW5zLAogCQkJCSAgdW5zaWduZWQgaW50ICpkaXYxLCB1bnNpZ25lZCBpbnQgKmRpdjIsCi0JCQkJICBjaGFyIHVzZXNzaCwgdW5zaWduZWQgaW50IGNobnNzaGZyb250KQorCQkJCSAgdW5zaWduZWQgaW50IGNobnNzaGZyb250KQogewogCWNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKnRoaXNfYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKLQlzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgMToKIAljYXNlIDQ6CiAJCWlmICgqdGltMiA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKIAkJCSp0aW0yID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOwotCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLAorCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzRNSFosCiAJCQkJCSAgZGl2MSwgZGl2MiwKIAkJCQkJICB0aW0yLCBmbGFncyAmIFRSSUdfUk9VTkRfTkVBUkVTVCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJaWYgKCp0aW0yIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQogCQkJKnRpbTIgPSB0aGlzX2JvYXJkLT5haV9uc19taW47Ci0JCSpkaXYxID0gKnRpbTIgLyBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsKKwkJKmRpdjEgPSAqdGltMiAvIEk4MjU0X09TQ19CQVNFXzRNSFo7CiAJCQkJCQkvKiBjb252ZXJ0IHRpbWVyIChidXJzdCkgKi8KIAkJaWYgKCpkaXYxIDwgdGhpc19ib2FyZC0+YWlfcGFjZXJfbWluKQogCQkJKmRpdjEgPSB0aGlzX2JvYXJkLT5haV9wYWNlcl9taW47Ci0JCSpkaXYyID0gKnRpbTEgLyBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsJLyogc2NhbiB0aW1lciAqLworCQkqZGl2MiA9ICp0aW0xIC8gSTgyNTRfT1NDX0JBU0VfNE1IWjsJLyogc2NhbiB0aW1lciAqLwogCQkqZGl2MiA9ICpkaXYyIC8gKmRpdjE7CQkvKiBtYWpvciB0aW1lciBpcyBjMSpjMiAqLwogCQlpZiAoKmRpdjIgPCBjaGFucykKIAkJCSpkaXYyID0gY2hhbnM7CiAKLQkJKnRpbTIgPSAqZGl2MSAqIGRldnByaXYtPmk4MjU0X29zY19iYXNlOwotCQkJCQkJCS8qIHJlYWwgY29udmVydCB0aW1lciAqLworCQkqdGltMiA9ICpkaXYxICogSTgyNTRfT1NDX0JBU0VfNE1IWjsJLyogcmVhbCBjb252ZXJ0IHRpbWVyICovCiAKLQkJaWYgKHVzZXNzaCAmJiAoY2huc3NoZnJvbnQgPT0gMCkpCS8qIHVzZSBCU1NIIHNpZ25hbCAqLworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAmJiAhY2huc3NoZnJvbnQpIHsKKwkJCS8qIHVzZSBCU1NIIHNpZ25hbCAqLwogCQkJaWYgKCpkaXYyIDwgKGNoYW5zICsgMikpCiAJCQkJKmRpdjIgPSBjaGFucyArIDI7CisJCX0KIAotCQkqdGltMSA9ICpkaXYxICogKmRpdjIgKiBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsKKwkJKnRpbTEgPSAqZGl2MSAqICpkaXYyICogSTgyNTRfT1NDX0JBU0VfNE1IWjsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgbW9kZSwKLQkJCXVuc2lnbmVkIGludCBkaXZpc29yMSwgdW5zaWduZWQgaW50IGRpdmlzb3IyKQorc3RhdGljIHZvaWQgcGNpOTExOF9zdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgbW9kZSkKIHsKKwlzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IGRldnByaXYtPmFpX2Rpdmlzb3IxOworCXVuc2lnbmVkIGludCBkaXZpc29yMiA9IGRldnByaXYtPmFpX2Rpdmlzb3IyOworCiAJb3V0bCgweDc0LCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UQ1RSTCk7CiAJb3V0bCgweGI0LCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UQ1RSTCk7CiAvKiBvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsgKi8KQEAgLTg1NSw3ICs4MTksNyBAQAogCQkJKH5FTl9BMlBfVFJBTlNGRVJTKSwKIAkJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUik7CS8qIHN0b3AgRE1BICovCiAJcGNpOTExOF9leHR0cmdfZGVsKGRldiwgRVhUVFJHX0FJKTsKLQlzdGFydF9wYWNlcihkZXYsIDAsIDAsIDApOwkvKiBzdG9wIDgyNTQgY291bnRlcnMgKi8KKwlwY2k5MTE4X3N0YXJ0X3BhY2VyKGRldiwgMCk7CS8qIHN0b3AgODI1NCBjb3VudGVycyAqLwogCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPSBBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZzsKIAlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOwogCQkJCQkvKgpAQCAtODgyLDcgKzg0Niw2IEBACiAJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA9IDA7CiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7Ci0JZGV2cHJpdi0+YWlfYnVmX3B0ciA9IDA7CiAJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOwogCWRldnByaXYtPmRtYV9hY3RidWYgPSAwOwogCkBAIC05MzgsNyArOTAxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgewogCQlpZiAoZGV2cHJpdi0+dXNlZG1hKQogCQkJYXJyYXlbaV0gPSBiZTE2X3RvX2NwdShhcnJheVtpXSk7Ci0JCWlmIChkZXZwcml2LT5haTE2Yml0cykKKwkJaWYgKHMtPm1heGRhdGEgPT0gMHhmZmZmKQogCQkJYXJyYXlbaV0gXj0gMHg4MDAwOwogCQllbHNlCiAJCQlhcnJheVtpXSA9IChhcnJheVtpXSA+PiA0KSAmIDB4MGZmZjsKQEAgLTk1Myw2ICs5MTYsNyBAQAogCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBpbnRfZGFxKQogewogCXN0cnVjdCBwY2k5MTE4X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIHNob3J0IHNhbXBsOwogCiAJaWYgKGludF9hZHN0YXQgJiBkZXZwcml2LT5haV9tYXNrZXJyKQpAQCAtOTYyLDcgKzkyNiw3IEBACiAJc2FtcGwgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEX0RBVEEpOwogCiAjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCi0JaWYgKGRldnByaXYtPmFpMTZiaXRzID09IDApIHsKKwlpZiAocy0+bWF4ZGF0YSAhPSAweGZmZmYpIHsKIAkJaWYgKChzYW1wbCAmIDB4MDAwZikgIT0gZGV2cHJpdi0+Y2hhbmxpc3Rbcy0+YXN5bmMtPmN1cl9jaGFuXSkgewogCQkJCQkJCS8qIGRhdGEgZHJvcG91dCEgKi8KIAkJCWRldl9pbmZvKGRldi0+Y2xhc3NfZGV2LApAQCAtOTc3LDEzICs5NDEsMTMgQEAKICNlbmRpZgogCWNmY193cml0ZV90b19idWZmZXIocywgc2FtcGwpOwogCXMtPmFzeW5jLT5jdXJfY2hhbisrOwotCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9zY2FubGVuKSB7CisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBjbWQtPnNjYW5fZW5kX2FyZykgewogCQkJCQkJCS8qIG9uZSBzY2FuIGRvbmUgKi8KLQkJcy0+YXN5bmMtPmN1cl9jaGFuICU9IGRldnByaXYtPmFpX25fc2NhbmxlbjsKKwkJcy0+YXN5bmMtPmN1cl9jaGFuICU9IGNtZC0+c2Nhbl9lbmRfYXJnOwogCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKSB7CiAJCQkvKiBhbGwgZGF0YSBzYW1wbGVkPyAqLwotCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKQorCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGNtZC0+c3RvcF9hcmcpCiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQl9CiAJfQpAQCAtOTk4LDYgKzk2Miw3IEBACiAJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBpbnRfZGFxKQogewogCXN0cnVjdCBwY2k5MTE4X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBuZXh0X2RtYV9idWYsIHNhbXBsZXNpbmJ1Ziwgc2FtcGxzLCBtOwogCiAJaWYgKGludF9hbWNjICYgTUFTVEVSX0FCT1JUX0lOVCkgewpAQCAtMTAzNywyMCArMTAwMiwxOCBAQAogCX0KIAogCWlmIChzYW1wbGVzaW5idWYpIHsKLQkJbSA9IGRldnByaXYtPmFpX2RhdGFfbGVuID4+IDE7CS8qCi0JCQkJCQkgKiBob3cgbWFueSBzYW1wbGVzIGlzIHRvCi0JCQkJCQkgKiBlbmQgb2YgYnVmZmVyCi0JCQkJCQkgKi8KKwkJLyogaG93IG1hbnkgc2FtcGxlcyBpcyB0byBlbmQgb2YgYnVmZmVyICovCisJCW0gPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3ogPj4gMTsKIAkJc2FtcGxzID0gbTsKIAkJbW92ZV9ibG9ja19mcm9tX2RtYShkZXYsIHMsCiAJCQkJICAgIGRldnByaXYtPmRtYWJ1Zl92aXJ0W2RldnByaXYtPmRtYV9hY3RidWZdLAogCQkJCSAgICBzYW1wbGVzaW5idWYpOwotCQltID0gbSAtIHNhbXBsczsJCS8qIG09IGhvdyBtYW55IHNhbXBsZXMgd2FzIHRyYW5zZmVycmVkICovCisJCW0gPSBtIC0gc2FtcGxzOwkJLyogbT1ob3cgbWFueSBzYW1wbGVzIHdhcyB0cmFuc2ZlcnJlZCAqLwogCX0KIAogCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKIAkJLyogYWxsIGRhdGEgc2FtcGxlZD8gKi8KLQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKQorCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gY21kLT5zdG9wX2FyZykKIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAl9CiAKQEAgLTEwNjgsNzggKzEwMzEsNzEgQEAKIAljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjaTkxMTgoaW50IGlycSwgdm9pZCAqZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2k5MTE4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQogewogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKIAlzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCXVuc2lnbmVkIGludCBpbnRfZGFxID0gMCwgaW50X2FtY2MsIGludF9hZHN0YXQ7CisJdW5zaWduZWQgaW50IGludHNyYzsJLyogSVJRIHJlYXNvbnMgZnJvbSBjYXJkICovCisJdW5zaWduZWQgaW50IGludGNzcjsJLyogSU5UIHJlZ2lzdGVyIGZyb20gQU1DQyBjaGlwICovCisJdW5zaWduZWQgaW50IGFkc3RhdDsJLyogU1RBVFVTIHJlZ2lzdGVyICovCiAKIAlpZiAoIWRldi0+YXR0YWNoZWQpCi0JCXJldHVybiBJUlFfTk9ORTsJLyogbm90IGZ1bGx5IGluaXRpYWxpemVkICovCisJCXJldHVybiBJUlFfTk9ORTsKIAotCWludF9kYXEgPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQykgJiAweGY7Ci0JCQkJCS8qIGdldCBJUlEgcmVhc29ucyBmcm9tIGNhcmQgKi8KLQlpbnRfYW1jYyA9IGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7Ci0JCQkJCS8qIGdldCBJTlQgcmVnaXN0ZXIgZnJvbSBBTUNDIGNoaXAgKi8KKwlpbnRzcmMgPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQykgJiAweGY7CisJaW50Y3NyID0gaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKIAotCWlmICgoIWludF9kYXEpICYmICghKGludF9hbWNjICYgQU5ZX1M1OTNYX0lOVCkpKQotCQlyZXR1cm4gSVJRX05PTkU7CS8qIGludGVycnVwdCBmcm9tIG90aGVyIHNvdXJjZSAqLworCWlmICghaW50c3JjICYmICEoaW50Y3NyICYgQU5ZX1M1OTNYX0lOVCkpCisJCXJldHVybiBJUlFfTk9ORTsKIAotCW91dGwoaW50X2FtY2MgfCAweDAwZmYwMDAwLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7Ci0JCQkJCS8qIHNodXRkb3duIElSUSByZWFzb25zIGluIEFNQ0MgKi8KKwlvdXRsKGludGNzciB8IDB4MDBmZjAwMDAsIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKIAotCWludF9hZHN0YXQgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEU1RBVCkgJiAweDFmZjsKLQkJCQkJLyogZ2V0IFNUQVRVUyByZWdpc3RlciAqLworCWFkc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTkxMThfQURTVEFUKSAmIDB4MWZmOwogCi0JaWYgKGRldnByaXYtPmFpX2RvKSB7Ci0JCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCkKLQkJCWlmICgoaW50X2Fkc3RhdCAmIEFkU3RhdHVzX0RUSCkgJiYKLQkJCQkJCQkoaW50X2RhcSAmIEludF9EVHJnKSkgewotCQkJCQkJLyogc3RhcnQgc3RvcCBvZiBtZWFzdXJlICovCi0JCQkJaWYgKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wICYgU1RBUlRfQUlfRVhUKSB7Ci0JCQkJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wICY9Ci0JCQkJCSAgICB+U1RBUlRfQUlfRVhUOwotCQkJCQlpZiAoIShkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmCi0JCQkJCQkJU1RPUF9BSV9FWFQpKQotCQkJCQkJCXBjaTkxMThfZXh0dHJnX2RlbAotCQkJCQkJCShkZXYsIEVYVFRSR19BSSk7Ci0JCQkJCQkvKiBkZWFjdGl2YXRlIEVYVCB0cmlnZ2VyICovCi0JCQkJCXN0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8sCi0JCQkJCQlkZXZwcml2LT5haV9kaXZpc29yMSwKLQkJCQkJCWRldnByaXYtPmFpX2Rpdmlzb3IyKTsKLQkJCQkJCS8qIHN0YXJ0IHBhY2VyICovCi0JCQkJCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLAotCQkJCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmCi0JCQkJCQlTVE9QX0FJX0VYVCkgewotCQkJCQkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJj0KLQkJCQkJCQl+U1RPUF9BSV9FWFQ7Ci0JCQkJCQlwY2k5MTE4X2V4dHRyZ19kZWwKLQkJCQkJCQkoZGV2LCBFWFRUUkdfQUkpOwotCQkJCQkJLyogZGVhY3RpdmF0ZSBFWFQgdHJpZ2dlciAqLwotCQkJCQkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOwotCQkJCQkJLyoKLQkJCQkJCSAqIHdlbGwsIG9uIG5leHQgaW50ZXJydXB0IGZyb20KLQkJCQkJCSAqIERNQS9FT0MgbWVhc3VyZSB3aWxsIHN0b3AKLQkJCQkJCSAqLwotCQkJCQl9Ci0JCQkJfQorCWlmICghZGV2cHJpdi0+YWlfZG8pCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCkgeworCQlpZiAoKGFkc3RhdCAmIEFkU3RhdHVzX0RUSCkgJiYgKGludHNyYyAmIEludF9EVHJnKSkgeworCQkJLyogc3RhcnQvc3RvcCBvZiBtZWFzdXJlICovCisJCQlpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJiBTVEFSVF9BSV9FWFQpIHsKKwkJCQkvKiBkZWFjdGl2YXRlIEVYVCB0cmlnZ2VyICovCisJCQkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJj0gflNUQVJUX0FJX0VYVDsKKwkJCQlpZiAoIShkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmIFNUT1BfQUlfRVhUKSkKKwkJCQkJcGNpOTExOF9leHR0cmdfZGVsKGRldiwgRVhUVFJHX0FJKTsKKworCQkJCS8qIHN0YXJ0IHBhY2VyICovCisJCQkJcGNpOTExOF9zdGFydF9wYWNlcihkZXYsIGRldnByaXYtPmFpX2RvKTsKKwkJCQlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywKKwkJCQkgICAgIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsKKwkJCX0gZWxzZSBpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJiBTVE9QX0FJX0VYVCkgeworCQkJCS8qIGRlYWN0aXZhdGUgRVhUIHRyaWdnZXIgKi8KKwkJCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmPSB+U1RPUF9BSV9FWFQ7CisJCQkJcGNpOTExOF9leHR0cmdfZGVsKGRldiwgRVhUVFJHX0FJKTsKKworCQkJCS8qIG9uIG5leHQgaW50ZXJydXB0IG1lYXN1cmUgd2lsbCBzdG9wICovCisJCQkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOwogCQkJfQotCi0JCShkZXZwcml2LT5pbnRfYWlfZnVuYykgKGRldiwgZGV2LT5yZWFkX3N1YmRldiwgaW50X2Fkc3RhdCwKLQkJCQkJaW50X2FtY2MsIGludF9kYXEpOwotCisJCX0KIAl9CisKKwlpZiAoZGV2cHJpdi0+dXNlZG1hKQorCQlpbnRlcnJ1cHRfcGNpOTExOF9haV9kbWEoZGV2LCBzLCBhZHN0YXQsIGludGNzciwgaW50c3JjKTsKKwllbHNlCisJCWludGVycnVwdF9wY2k5MTE4X2FpX29uZXNhbXBsZShkZXYsIHMsIGFkc3RhdCwgaW50Y3NyLCBpbnRzcmMpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IHBjaTkxMThfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCB0cmlnbnVtKQorCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdHJpZ19udW0pCiB7CiAJc3RydWN0IHBjaTkxMThfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAKLQlpZiAodHJpZ251bSAhPSBkZXZwcml2LT5haV9pbnR0cmlnX3N0YXJ0KQorCWlmICh0cmlnX251bSAhPSBjbWQtPnN0YXJ0X2FyZykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmPSB+U1RBUlRfQUlfSU5UOwpAQCAtMTE0OCw4ICsxMTA0LDcgQEAKIAlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKIAlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOwogCWlmIChkZXZwcml2LT5haV9kbyAhPSAzKSB7Ci0JCXN0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPmFpX2Rpdmlzb3IxLAotCQkJICAgIGRldnByaXYtPmFpX2Rpdmlzb3IyKTsKKwkJcGNpOTExOF9zdGFydF9wYWNlcihkZXYsIGRldnByaXYtPmFpX2RvKTsKIAkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9Tb2Z0RzsKIAl9CiAJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsKQEAgLTExNjUsNyArMTEyMCw3IEBACiAJc3RydWN0IHBjaTkxMThfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMDsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KQEAgLTEyMjEsOCArMTE3NiwxNSBAQAogCiAJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JaWYgKGNtZC0+c3RhcnRfc3JjICYgKFRSSUdfTk9XIHwgVFJJR19FWFQpKQorCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCWNhc2UgVFJJR19FWFQ6CiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0lOVDoKKwkJLyogc3RhcnRfYXJnIGlzIHRoZSBpbnRlcm5hbCB0cmlnZ2VyIChhbnkgdmFsdWUpICovCisJCWJyZWFrOworCX0KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKFRSSUdfRk9MTE9XIHwgVFJJR19FWFQpKQogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCAwKTsKQEAgLTEyNTksOCArMTIyMSw2IEBACiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RvcF9hcmcsIDApOwogCiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+Y2hhbmxpc3RfbGVuLCAxKTsKLQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21heCgmY21kLT5jaGFubGlzdF9sZW4sCi0JCQkJCSB0aGlzX2JvYXJkLT5uX2FpY2hhbmxpc3QpOwogCiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9lbmRfYXJnLAogCQkJCQkgY21kLT5jaGFubGlzdF9sZW4pOwpAQCAtMTI3Nyw0NSArMTIzNywzMCBAQAogCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKLQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwKKwkJYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV80TUhaLAogCQkJCQkgICZkaXZpc29yMSwgJmRpdmlzb3IyLAotCQkJCQkgICZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKLQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCi0JCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOwotCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19OT1cpKSB7Ci0JCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7Ci0JCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsCisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoSTgyNTRfT1NDX0JBU0VfNE1IWiwKIAkJCQkJICAmZGl2aXNvcjEsICZkaXZpc29yMiwKLQkJCQkJICAmY21kLT5jb252ZXJ0X2FyZywgY21kLT5mbGFncyk7Ci0JCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQotCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKLQkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQotCQkJZXJyKys7Ci0JCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIKLQkJICAgICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCSAgICBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CiAJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA9PSAwKSB7Ci0JCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPAotCQkJCSAgICB0aGlzX2JvYXJkLT5haV9uc19taW4gKgotCQkJCSAgICAoY21kLT5zY2FuX2VuZF9hcmcgKyAyKSkgewotCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KLQkJCQkJICAgIHRoaXNfYm9hcmQtPmFpX25zX21pbiAqCi0JCQkJCSAgICAoY21kLT5zY2FuX2VuZF9hcmcgKyAyKTsKLQkJCQkJZXJyKys7Ci0JCQkJfQorCQkJCWFyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbiAqCisJCQkJICAgICAgKGNtZC0+c2Nhbl9lbmRfYXJnICsgMik7CiAJCQl9IGVsc2UgewotCQkJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKLQkJCQkgICAgY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuKSB7Ci0JCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQotCQkJCQkgICAgY21kLT5jb252ZXJ0X2FyZyAqCi0JCQkJCSAgICBjbWQtPmNoYW5saXN0X2xlbjsKLQkJCQkJZXJyKys7Ci0JCQkJfQorCQkJCWFyZyA9IGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKIAkJCX0KKwkJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJCQkJCSBhcmcpOwogCQl9CiAJfQogCkBAIC0xMzMwLDIzICsxMjc1LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IENvbXB1dGVfYW5kX3NldHVwX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBpbnQgZG1hbGVuMCwgZG1hbGVuMSwgaTsKIAogCWRtYWxlbjAgPSBkZXZwcml2LT5kbWFidWZfc2l6ZVswXTsKIAlkbWFsZW4xID0gZGV2cHJpdi0+ZG1hYnVmX3NpemVbMV07CiAJLyogaXNuJ3Qgb3V0cHV0IGJ1ZmYgc21hbGxlciB0aGF0IG91ciBETUEgYnVmZj8gKi8KLQlpZiAoZG1hbGVuMCA+IChkZXZwcml2LT5haV9kYXRhX2xlbikpIHsKLQkJZG1hbGVuMCA9IGRldnByaXYtPmFpX2RhdGFfbGVuICYgfjNMOwkvKgotCQkJCQkJCSAqIGFsaWduIHRvIDMyYml0IGRvd24KLQkJCQkJCQkgKi8KKwlpZiAoZG1hbGVuMCA+IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeikgeworCQkvKiBhbGlnbiB0byAzMmJpdCBkb3duICovCisJCWRtYWxlbjAgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3ogJiB+M0w7CiAJfQotCWlmIChkbWFsZW4xID4gKGRldnByaXYtPmFpX2RhdGFfbGVuKSkgewotCQlkbWFsZW4xID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gJiB+M0w7CS8qCi0JCQkJCQkJICogYWxpZ24gdG8gMzJiaXQgZG93bgotCQkJCQkJCSAqLworCWlmIChkbWFsZW4xID4gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KSB7CisJCS8qIGFsaWduIHRvIDMyYml0IGRvd24gKi8KKwkJZG1hbGVuMSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeiAmIH4zTDsKIAl9CiAKIAkvKiB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8gKi8KQEAgLTEzNjAsOCArMTMwNSw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBzaG9ydCBmaXJzdCBETUEgYnVmZmVyIHRvIG9uZSBzY2FuICovCiAJCQlkbWFsZW4wID0gZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxOwotCQkJaWYgKGRldnByaXYtPnVzZWVvc2hhbmRsZSkKLQkJCQlkbWFsZW4wICs9IDI7CiAJCQlpZiAoZG1hbGVuMCA8IDQpIHsKIAkJCQlkZXZfaW5mbyhkZXYtPmNsYXNzX2RldiwKIAkJCQkJICJFUlI6IERNQTAgYnVmIGxlbiBidWc/ICglZDw0KVxuIiwKQEAgLTEzODAsOCArMTMyMyw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBzaG9ydCBzZWNvbmQgRE1BIGJ1ZmZlciB0byBvbmUgc2NhbiAqLwogCQkJZG1hbGVuMSA9IGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMTsKLQkJCWlmIChkZXZwcml2LT51c2Vlb3NoYW5kbGUpCi0JCQkJZG1hbGVuMSAtPSAyOwogCQkJaWYgKGRtYWxlbjEgPCA0KSB7CiAJCQkJZGV2X2luZm8oZGV2LT5jbGFzc19kZXYsCiAJCQkJCSAiRVJSOiBETUExIGJ1ZiBsZW4gYnVnPyAoJWQ8NClcbiIsCkBAIC0xNDE2LDEwICsxMzU3LDEwIEBACiAJCQkvKiBmaXRzIHdob2xlIG1lYXN1cmUgaW50byBvbmUgRE1BIGJ1ZmZlcj8gKi8KIAkJCWlmIChkbWFsZW4wID4KIAkJCSAgICAoKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkgKgotCQkJICAgICBkZXZwcml2LT5haV9zY2FucykpIHsKKwkJCSAgICAgY21kLT5zdG9wX2FyZykpIHsKIAkJCQlkbWFsZW4wID0KIAkJCQkgICAgKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkgKgotCQkJCSAgICBkZXZwcml2LT5haV9zY2FuczsKKwkJCQkgICAgY21kLT5zdG9wX2FyZzsKIAkJCQlkbWFsZW4wICY9IH4zTDsKIAkJCX0gZWxzZSB7CS8qCiAJCQkJCSAqIGZpdHMgd2hvbGUgbWVhc3VyZSBpbnRvCkBAIC0xNDI3LDEwICsxMzY4LDEwIEBACiAJCQkJCSAqLwogCQkJCWlmIChkbWFsZW4xID4KIAkJCQkgICAgKChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpICoKLQkJCQkgICAgIGRldnByaXYtPmFpX3NjYW5zIC0gZG1hbGVuMCkpCisJCQkJICAgICBjbWQtPnN0b3BfYXJnIC0gZG1hbGVuMCkpCiAJCQkJCWRtYWxlbjEgPQogCQkJCQkgICAgKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkgKgotCQkJCQkgICAgZGV2cHJpdi0+YWlfc2NhbnMgLSBkbWFsZW4wOworCQkJCQkgICAgY21kLT5zdG9wX2FyZyAtIGRtYWxlbjA7CiAJCQkJZG1hbGVuMSAmPSB+M0w7CiAJCQl9CiAJCX0KQEAgLTE0NDIsMTggKzEzODMsMTggQEAKIAlkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbMV0gPSBkbWFsZW4xOwogCiAjaWYgMAotCWlmIChkZXZwcml2LT5haV9uX3NjYW5sZW4gPCB0aGlzX2JvYXJkLT5oYWxmX2ZpZm9fc2l6ZSkgeworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA8IHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplKSB7CiAJCWRldnByaXYtPmRtYWJ1Zl9wYW5pY19zaXplWzBdID0KLQkJICAgICh0aGlzX2JvYXJkLT5oYWxmX2ZpZm9fc2l6ZSAvIGRldnByaXYtPmFpX25fc2NhbmxlbiArCi0JCSAgICAgMSkgKiBkZXZwcml2LT5haV9uX3NjYW5sZW4gKiBzaXplb2Yoc2hvcnQpOworCQkgICAgKHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplIC8gY21kLT5zY2FuX2VuZF9hcmcgKworCQkgICAgIDEpICogY21kLT5zY2FuX2VuZF9hcmcgKiBzaXplb2Yoc2hvcnQpOwogCQlkZXZwcml2LT5kbWFidWZfcGFuaWNfc2l6ZVsxXSA9Ci0JCSAgICAodGhpc19ib2FyZC0+aGFsZl9maWZvX3NpemUgLyBkZXZwcml2LT5haV9uX3NjYW5sZW4gKwotCQkgICAgIDEpICogZGV2cHJpdi0+YWlfbl9zY2FubGVuICogc2l6ZW9mKHNob3J0KTsKKwkJICAgICh0aGlzX2JvYXJkLT5oYWxmX2ZpZm9fc2l6ZSAvIGNtZC0+c2Nhbl9lbmRfYXJnICsKKwkJICAgICAxKSAqIGNtZC0+c2Nhbl9lbmRfYXJnICogc2l6ZW9mKHNob3J0KTsKIAl9IGVsc2UgewogCQlkZXZwcml2LT5kbWFidWZfcGFuaWNfc2l6ZVswXSA9Ci0JCSAgICAoZGV2cHJpdi0+YWlfbl9zY2FubGVuIDw8IDEpICUgZGV2cHJpdi0+ZG1hYnVmX3NpemVbMF07CisJCSAgICAoY21kLT5zY2FuX2VuZF9hcmcgPDwgMSkgJSBkZXZwcml2LT5kbWFidWZfc2l6ZVswXTsKIAkJZGV2cHJpdi0+ZG1hYnVmX3BhbmljX3NpemVbMV0gPQotCQkgICAgKGRldnByaXYtPmFpX25fc2NhbmxlbiA8PCAxKSAlIGRldnByaXYtPmRtYWJ1Zl9zaXplWzFdOworCQkgICAgKGNtZC0+c2Nhbl9lbmRfYXJnIDw8IDEpICUgZGV2cHJpdi0+ZG1hYnVmX3NpemVbMV07CiAJfQogI2VuZGlmCiAKQEAgLTE1MDAsOSArMTQ0MSw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWRldnByaXYtPmludF9haV9mdW5jID0gaW50ZXJydXB0X3BjaTkxMThfYWlfb25lc2FtcGxlOwotCQkJCQkJLyogdHJhbnNmZXIgZnVuY3Rpb24gKi8KLQogCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCkKIAkJcGNpOTExOF9leHR0cmdfYWRkKGRldiwgRVhUVFJHX0FJKTsKIAkJCQkJCS8qIGFjdGl2YXRlIEVYVCB0cmlnZ2VyICovCkBAIC0xNTIwLDggKzE0NTgsNyBAQAogCQlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKIAkJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsKIAkJaWYgKGRldnByaXYtPmFpX2RvICE9IDMpIHsKLQkJCXN0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPmFpX2Rpdmlzb3IxLAotCQkJCSAgICBkZXZwcml2LT5haV9kaXZpc29yMik7CisJCQlwY2k5MTE4X3N0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8pOwogCQkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9Tb2Z0RzsKIAkJfQogCQlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKQEAgLTE1MzQsOCArMTQ3MSw5IEBACiAJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IHBjaTkxMThfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAKLQlDb21wdXRlX2FuZF9zZXR1cF9kbWEoZGV2KTsKKwlDb21wdXRlX2FuZF9zZXR1cF9kbWEoZGV2LCBzKTsKIAogCXN3aXRjaCAoZGV2cHJpdi0+YWlfZG8pIHsKIAljYXNlIDE6CkBAIC0xNTQ4LDcgKzE0ODYsNyBAQAogCQlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnID0KIAkJICAgIEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnIHwgQWRGdW5jdGlvbl9CTSB8CiAJCSAgICBBZEZ1bmN0aW9uX0JTOwotCQlpZiAoZGV2cHJpdi0+dXNlc3NoICYmICghZGV2cHJpdi0+c29mdHNzaGRlbGF5KSkKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgJiYgIWRldnByaXYtPnNvZnRzc2hkZWxheSkKIAkJCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgfD0gQWRGdW5jdGlvbl9CU1NIOwogCQlvdXRsKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sIGRldi0+aW9iYXNlICsgUENJOTExOF9CVVJTVCk7CiAJCWJyZWFrOwpAQCAtMTU4MCw5ICsxNTE4LDYgQEAKIAkJCQkJCS8qIGFjdGl2YXRlIEVYVCB0cmlnZ2VyICovCiAJfQogCi0JZGV2cHJpdi0+aW50X2FpX2Z1bmMgPSBpbnRlcnJ1cHRfcGNpOTExOF9haV9kbWE7Ci0JCQkJCQkvKiB0cmFuc2ZlciBmdW5jdGlvbiAqLwotCiAJb3V0bCgweDAyMDAwMDAwIHwgQUlOVF9XUklURV9DT01QTCwKIAkgICAgIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKIApAQCAtMTU5MCw4ICsxNTI1LDcgQEAKIAkJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsKIAkJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CiAJCWlmIChkZXZwcml2LT5haV9kbyAhPSAzKSB7Ci0JCQlzdGFydF9wYWNlcihkZXYsIGRldnByaXYtPmFpX2RvLCBkZXZwcml2LT5haV9kaXZpc29yMSwKLQkJCQkgICAgZGV2cHJpdi0+YWlfZGl2aXNvcjIpOworCQkJcGNpOTExOF9zdGFydF9wYWNlcihkZXYsIGRldnByaXYtPmFpX2RvKTsKIAkJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfU29mdEc7CiAJCX0KIAkJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsKQEAgLTE2MTAsMTIgKzE1NDQsNiBAQAogCiAJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgPSAwOwogCWRldnByaXYtPmFpX2ZsYWdzID0gY21kLT5mbGFnczsKLQlkZXZwcml2LT5haV9uX2NoYW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKLQlkZXZwcml2LT5haV9uX3NjYW5sZW4gPSBjbWQtPnNjYW5fZW5kX2FyZzsKLQlkZXZwcml2LT5haV9jaGFubGlzdCA9IGNtZC0+Y2hhbmxpc3Q7Ci0JZGV2cHJpdi0+YWlfZGF0YV9sZW4gPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7Ci0JZGV2cHJpdi0+YWlfdGltZXIxID0gMDsKLQlkZXZwcml2LT5haV90aW1lcjIgPSAwOwogCWRldnByaXYtPmFpX2FkZF9mcm9udCA9IDA7CiAJZGV2cHJpdi0+YWlfYWRkX2JhY2sgPSAwOwogCWRldnByaXYtPmFpX21hc2tlcnIgPSAweDEwZTsKQEAgLTE2MjksMzEgKzE1NTcsMTIgQEAKIAl9CiAJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CiAJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wIHw9IFNUQVJUX0FJX0lOVDsKLQkJZGV2cHJpdi0+YWlfaW50dHJpZ19zdGFydCA9IGNtZC0+c3RhcnRfYXJnOwogCQlzLT5hc3luYy0+aW50dHJpZyA9IHBjaTkxMThfYWlfaW50dHJpZzsKIAl9Ci0jaWYgMAotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfSU5UKSB7Ci0JCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKLQkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgfD0gU1RPUF9BSV9JTlQ7Ci0JfQotI2VuZGlmCiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKQogCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDE7Ci0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOwotCX0gZWxzZSB7Ci0JCWRldnByaXYtPmFpX3NjYW5zID0gMDsKLQl9Ci0KLQkvKiB1c2Ugc2FtcGxlJmhvbGQgc2lnbmFsPyAqLwotCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQotCQlkZXZwcml2LT51c2Vzc2ggPSAxOwotCS8qIHllcyAqLwotCWVsc2UKLQkJZGV2cHJpdi0+dXNlc3NoID0gMDsKLQkJCQkvKiAgbm8gKi8KIAogCS8qCiAJICogdXNlIGFkZGl0aW9uYWwgc2FtcGxlIGF0IGVuZCBvZiBldmVyeSBzY2FuCkBAIC0xNjYxLDExICsxNTcwLDEwIEBACiAJICovCiAJZGV2cHJpdi0+YWlfYWRkX2Zyb250ID0gMDsKIAlkZXZwcml2LT5haV9hZGRfYmFjayA9IDA7Ci0JZGV2cHJpdi0+dXNlZW9zaGFuZGxlID0gMDsKIAlpZiAoZGV2cHJpdi0+bWFzdGVyKSB7CiAJCWRldnByaXYtPnVzZWRtYSA9IDE7CiAJCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpICYmCi0JCSAgICAoZGV2cHJpdi0+YWlfbl9zY2FubGVuID09IDEpKSB7CisJCSAgICAoY21kLT5zY2FuX2VuZF9hcmcgPT0gMSkpIHsKIAkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQogCQkJCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMTsKIAkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKQEAgLTE2NzcsMTMgKzE1ODUsOSBAQAogCQkJfQogCQl9CiAJCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpICYmCi0JCSAgICAoZGV2cHJpdi0+YWlfbl9zY2FubGVuICYgMSkgJiYKLQkJICAgIChkZXZwcml2LT5haV9uX3NjYW5sZW4gPiAxKSkgeworCQkgICAgKGNtZC0+c2Nhbl9lbmRfYXJnICYgMSkgJiYKKwkJICAgIChjbWQtPnNjYW5fZW5kX2FyZyA+IDEpKSB7CiAJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgewotCQkJCS8qCi0JCQkJICogdnByaXYtPnVzZWVvc2hhbmRsZT0xOyAvLyBjaGFuZ2UgRE1BIHRyYW5zZmVyCi0JCQkJICogYmxvY2sgdG8gZml0IEVPUyBvbiBldmVyeSBzZWNvbmQgY2FsbAotCQkJCSAqLwogCQkJCWRldnByaXYtPnVzZWRtYSA9IDA7CiAJCQkJLyoKIAkJCQkgKiBYWFggbWF5YmUgY2FuIGJlIGNvcnJlY3RlZCB0byB1c2UgMTYgYml0IERNQQpAQCAtMTcwMyw3ICsxNjA3LDcgQEAKIAkgKiB3ZSBuZWVkIHNvZnR3YXJlIFMmSCBzaWduYWw/CiAJICogSXQgYWRkcyB0d28gc2FtcGxlcyBiZWZvcmUgZXZlcnkgc2NhbiBhcyBtaW5pbXVtCiAJICovCi0JaWYgKGRldnByaXYtPnVzZXNzaCAmJiBkZXZwcml2LT5zb2Z0c3NoZGVsYXkpIHsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAmJiBkZXZwcml2LT5zb2Z0c3NoZGVsYXkpIHsKIAkJZGV2cHJpdi0+YWlfYWRkX2Zyb250ID0gMjsKIAkJaWYgKChkZXZwcml2LT51c2VkbWEgPT0gMSkgJiYgKGRldnByaXYtPmFpX2FkZF9iYWNrID09IDEpKSB7CiAJCQkJCQkJLyogbW92ZSBpdCB0byBmcm9udCAqLwpAQCAtMTcyMCw3ICsxNjI0LDcgQEAKIAkJCWRldnByaXYtPmFpX2FkZF9mcm9udCA9IGFkZGNoYW5zICsgMTsKIAkJCWlmIChkZXZwcml2LT51c2VkbWEgPT0gMSkKIAkJCQlpZiAoKGRldnByaXYtPmFpX2FkZF9mcm9udCArCi0JCQkJICAgICBkZXZwcml2LT5haV9uX2NoYW4gKworCQkJCSAgICAgY21kLT5jaGFubGlzdF9sZW4gKwogCQkJCSAgICAgZGV2cHJpdi0+YWlfYWRkX2JhY2spICYgMSkKIAkJCQkJZGV2cHJpdi0+YWlfYWRkX2Zyb250Kys7CiAJCQkJCQkJLyogcm91bmQgdXAgdG8gMzIgYml0ICovCkBAIC0xNzI5LDIxICsxNjMzLDIwIEBACiAJLyogd2VsbCwgd2Ugbm93IGtub3cgd2hhdCBtdXN0IGJlIGFsbCBhZGRlZCAqLwogCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPQkvKgogCQkJCQkgKiB3aGF0IHdlIG11c3QgdGFrZSBmcm9tIGNhcmQgaW4gcmVhbAotCQkJCQkgKiB0byBoYXZlIGFpX25fc2NhbmxlbiBvbiBvdXRwdXQ/CisJCQkJCSAqIHRvIGhhdmUgY21kLT5zY2FuX2VuZF9hcmcgb24gb3V0cHV0PwogCQkJCQkgKi8KLQkgICAgKGRldnByaXYtPmFpX2FkZF9mcm9udCArIGRldnByaXYtPmFpX25fY2hhbiArCi0JICAgICBkZXZwcml2LT5haV9hZGRfYmFjaykgKiAoZGV2cHJpdi0+YWlfbl9zY2FubGVuIC8KLQkJCQkgICAgICBkZXZwcml2LT5haV9uX2NoYW4pOworCSAgICAoZGV2cHJpdi0+YWlfYWRkX2Zyb250ICsgY21kLT5jaGFubGlzdF9sZW4gKworCSAgICAgZGV2cHJpdi0+YWlfYWRkX2JhY2spICogKGNtZC0+c2Nhbl9lbmRfYXJnIC8KKwkJCQkgICAgICBjbWQtPmNoYW5saXN0X2xlbik7CiAKIAkvKiBjaGVjayBhbmQgc2V0dXAgY2hhbm5lbCBsaXN0ICovCi0JaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9uX2NoYW4sCi0JCQkJZGV2cHJpdi0+YWlfY2hhbmxpc3QsIGRldnByaXYtPmFpX2FkZF9mcm9udCwKKwlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3RfbGVuLAorCQkJCWNtZC0+Y2hhbmxpc3QsIGRldnByaXYtPmFpX2FkZF9mcm9udCwKIAkJCQlkZXZwcml2LT5haV9hZGRfYmFjaykpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICghc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfbl9jaGFuLAotCQkJCWRldnByaXYtPmFpX2NoYW5saXN0LCAwLCBkZXZwcml2LT5haV9hZGRfZnJvbnQsCi0JCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2ssIGRldnByaXYtPnVzZWRtYSwKLQkJCQlkZXZwcml2LT51c2Vlb3NoYW5kbGUpKQorCWlmICghc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdF9sZW4sCisJCQkJY21kLT5jaGFubGlzdCwgMCwgZGV2cHJpdi0+YWlfYWRkX2Zyb250LAorCQkJCWRldnByaXYtPmFpX2FkZF9iYWNrLCBkZXZwcml2LT51c2VkbWEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGNvbXB1dGUgdGltZXJzIHNldHRpbmdzICovCkBAIC0xNzY1LDkgKzE2NjgsOCBAQAogCQkJCSAgICAgIGRldnByaXYtPmFpX2ZsYWdzLAogCQkJCSAgICAgIGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sCiAJCQkJICAgICAgJmRldnByaXYtPmFpX2Rpdmlzb3IxLAotCQkJCSAgICAgICZkZXZwcml2LT5haV9kaXZpc29yMiwgZGV2cHJpdi0+dXNlc3NoLAorCQkJCSAgICAgICZkZXZwcml2LT5haV9kaXZpc29yMiwKIAkJCQkgICAgICBkZXZwcml2LT5haV9hZGRfZnJvbnQpOwotCQlkZXZwcml2LT5haV90aW1lcjIgPSBjbWQtPmNvbnZlcnRfYXJnOwogCX0KIAogCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSAmJgpAQCAtMTc4NywxMCArMTY4OSw4IEBACiAJCQkJICAgICAgZGV2cHJpdi0+YWlfZmxhZ3MsCiAJCQkJICAgICAgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwKIAkJCQkgICAgICAmZGV2cHJpdi0+YWlfZGl2aXNvcjEsCi0JCQkJICAgICAgJmRldnByaXYtPmFpX2Rpdmlzb3IyLCBkZXZwcml2LT51c2Vzc2gsCisJCQkJICAgICAgJmRldnByaXYtPmFpX2Rpdmlzb3IyLAogCQkJCSAgICAgIGRldnByaXYtPmFpX2FkZF9mcm9udCk7Ci0JCWRldnByaXYtPmFpX3RpbWVyMSA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JCWRldnByaXYtPmFpX3RpbWVyMiA9IGNtZC0+Y29udmVydF9hcmc7CiAJfQogCiAJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKQpAQCAtMTc5OCw3ICsxNjk4LDcgQEAKIAkJZGV2cHJpdi0+YWlfZG8gPSAzOwogCX0KIAotCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvKiBzdG9wIHBhY2VyICovCisJcGNpOTExOF9zdGFydF9wYWNlcihkZXYsIC0xKTsJLyogc3RvcCBwYWNlciAqLwogCiAJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMDsJLyoKIAkJCQkJICogYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwKQEAgLTE4MjQsNyArMTcyNCw2IEBACiAJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSAwOwogCWRldnByaXYtPmFpX2FjdF9kbWFwb3MgPSAwOwogCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7Ci0JZGV2cHJpdi0+YWlfYnVmX3B0ciA9IDA7CiAKIAlpZiAoZGV2cHJpdi0+dXNlZG1hKQogCQlyZXQgPSBwY2k5MTE4X2FpX2RvY21kX2RtYShkZXYsIHMpOwpAQCAtMTg0NSw3ICsxNzQ0LDcgQEAKIAkJCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBzb3VyY2UgKi8KIAlvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKIC8qIG91dGwoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOyAqLwotCXN0YXJ0X3BhY2VyKGRldiwgMCwgMCwgMCk7CQkvKiBzdG9wIDgyNTQgY291bnRlcnMgKi8KKwlwY2k5MTE4X3N0YXJ0X3BhY2VyKGRldiwgMCk7CQkvKiBzdG9wIDgyNTQgY291bnRlcnMgKi8KIAlkZXZwcml2LT5BZENvbnRyb2xSZWcgPSAwOwogCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CiAJCQkJCQkvKgpAQCAtMTg4OCw3ICsxNzg3LDYgQEAKIAkJCQkJCSAqIGRpc2FibGUgSU5UIGFuZCBETUEKIAkJCQkJCSAqLwogCi0JZGV2cHJpdi0+Y250MF91c2VycyA9IDA7CiAJZGV2cHJpdi0+ZXh0dHJnX3VzZXJzID0gMDsKIAogCXJldHVybiAwOwpAQCAtMTk3MSw4ICsxODY5LDYgQEAKIAkJCWlmIChkZXZwcml2LT5kbWFidWZfdmlydFtpXSkgewogCQkJCWRldnByaXYtPmRtYWJ1Zl9wYWdlc1tpXSA9IHBhZ2VzOwogCQkJCWRldnByaXYtPmRtYWJ1Zl9zaXplW2ldID0gUEFHRV9TSVpFICogcGFnZXM7Ci0JCQkJZGV2cHJpdi0+ZG1hYnVmX3NhbXBsZXNbaV0gPQotCQkJCSAgICBkZXZwcml2LT5kbWFidWZfc2l6ZVtpXSA+PiAxOwogCQkJCWRldnByaXYtPmRtYWJ1Zl9od1tpXSA9CiAJCQkJICAgIHZpcnRfdG9fYnVzKCh2b2lkICopCiAJCQkJCQlkZXZwcml2LT5kbWFidWZfdmlydFtpXSk7CkBAIC0yMDE1LDcgKzE5MTEsNyBAQAogCQkJCS8qIEVuYWJsZSBwYXJpdHkgY2hlY2sgZm9yIHBhcml0eSBlcnJvciAqLwogCiAJaWYgKCFkaXNhYmxlX2lycSAmJiBwY2lkZXYtPmlycSkgewotCQlyZXQgPSByZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgaW50ZXJydXB0X3BjaTkxMTgsIElSUUZfU0hBUkVELAorCQlyZXQgPSByZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgcGNpOTExOF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSAgZGV2LT5ib2FyZF9uYW1lLCBkZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlkZXYtPmlycSA9IHBjaWRldi0+aXJxOwpAQCAtMjA3NCwyMiArMTk3MCwxMSBAQAogCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CiAJcy0+aW5zbl9iaXRzID0gcGNpOTExOF9pbnNuX2JpdHNfZG87CiAKLQlkZXZwcml2LT52YWxpZCA9IDE7Ci0JZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UgPSBJODI1NF9PU0NfQkFTRV80TUhaOwogCWRldnByaXYtPmFpX21hc2toYXJkZXJyID0gMHgxMGE7CiAJCQkJCS8qIGRlZmF1bHQgbWVhc3VyZSBjcmFzaCBjb25kaXRpb24gKi8KIAlpZiAoaHdfZXJyX21hc2spCQkvKiBkaXNhYmxlIHNvbWUgcmVxdWVzdGVkICovCiAJCWRldnByaXYtPmFpX21hc2toYXJkZXJyICY9IH5od19lcnJfbWFzazsKIAotCXN3aXRjaCAodGhpc19ib2FyZC0+YWlfbWF4ZGF0YSkgewotCWNhc2UgMHhmZmZmOgotCQlkZXZwcml2LT5haTE2Yml0cyA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldnByaXYtPmFpMTZiaXRzID0gMDsKLQkJYnJlYWs7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNTIsNyArMjAzNyw3IEBACiAJc3RydWN0IHBjaTkxMThfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAogCWlmIChkZXZwcml2KSB7Ci0JCWlmIChkZXZwcml2LT52YWxpZCkKKwkJaWYgKGRldi0+aW9iYXNlKQogCQkJcGNpOTExOF9yZXNldChkZXYpOwogCQlpZiAoZGV2LT5pcnEpCiAJCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKaW5kZXggMjhlYzQ4NS4uNjAyYjdhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKQEAgLTUxLDEwICs1MSw2IEBACiAjaW5jbHVkZSAiODI1My5oIgogI2luY2x1ZGUgImFtY2NfczU5MzMuaCIKIAotI2RlZmluZSBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sJLyogaWYgZGVmaW5lZCwgdGhlbiBpcyB1c2VkIGNvZGUgd2hpY2ggY29udHJvbAotCQkJCSAqIGNvcnJlY3QgY2hhbm5lbCBudW1iZXIgb24gZXZlcnkgMTIgYml0Ci0JCQkJICogc2FtcGxlICovCi0KIC8qIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLwogI2RlZmluZSBUWVBFX1BDSTE3MVgJMAogI2RlZmluZSBUWVBFX1BDSTE3MTMJMgpAQCAtNzMsNiArNjksOSBAQAogI2RlZmluZSBQQ0kxNzF4X0RBUkVGCTE0CS8qIFc6ICAgRC9BIHJlZmVyZW5jZSBjb250cm9sICovCiAjZGVmaW5lIFBDSTE3MXhfREkJMTYJLyogUjogICBkaWdpIGlucHV0cyAqLwogI2RlZmluZSBQQ0kxNzF4X0RPCTE2CS8qIFI6ICAgZGlnaSBpbnB1dHMgKi8KKworI2RlZmluZSBQQ0kxNzFYX1RJTUVSX0JBU0UJMHgxOAorCiAjZGVmaW5lIFBDSTE3MXhfQ05UMAkyNAkvKiBSL1c6IDgyNTQgY291bnRlciAwICovCiAjZGVmaW5lIFBDSTE3MXhfQ05UMQkyNgkvKiBSL1c6IDgyNTQgY291bnRlciAxICovCiAjZGVmaW5lIFBDSTE3MXhfQ05UMgkyOAkvKiBSL1c6IDgyNTQgY291bnRlciAyICovCkBAIC0yOTgsMjkgKzI5NywxOCBAQAogfTsKIAogc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSB7Ci0JY2hhciBuZXZlcmVuZGluZ19haTsJLyogIHdlIGRvIHVubGltaXRlZCBBSSAqLwogCXVuc2lnbmVkIGludCBDbnRybFJlZzsJLyogIENvbnRyb2wgcmVnaXN0ZXIgKi8KLQl1bnNpZ25lZCBpbnQgaTgyNTRfb3NjX2Jhc2U7CS8qICBmcmVxdWVuY2Ugb2Ygb25ib2FyZCBvc2NpbGF0b3IgKi8KLQl1bnNpZ25lZCBpbnQgYWlfZG87CS8qICB3aGF0IGRvIEFJPyAwPW5vdGhpbmcsIDEgdG8gNCBtb2RlICovCiAJdW5zaWduZWQgaW50IGFpX2FjdF9zY2FuOwkvKiAgaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQgKi8KLQl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW47CS8qICBhY3R1YWwgcG9zaXRpb24gaW4gYWN0dWFsIHNjYW4gKi8KLQl1bnNpZ25lZCBpbnQgYWlfYnVmX3B0cjsJLyogIGRhdGEgYnVmZmVyIHB0ciBpbiBzYW1wbGVzICovCi0JdW5zaWduZWQgY2hhciBhaV9lb3M7CS8qICAxPUVPUyB3YWtlIHVwICovCiAJdW5zaWduZWQgY2hhciBhaV9ldDsKIAl1bnNpZ25lZCBpbnQgYWlfZXRfQ250cmxSZWc7CiAJdW5zaWduZWQgaW50IGFpX2V0X011eFZhbDsKLQl1bnNpZ25lZCBpbnQgYWlfZXRfZGl2MSwgYWlfZXRfZGl2MjsKKwl1bnNpZ25lZCBpbnQgbmV4dF9kaXZpc29yMTsKKwl1bnNpZ25lZCBpbnQgbmV4dF9kaXZpc29yMjsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjE7CisJdW5zaWduZWQgaW50IGRpdmlzb3IyOwogCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMzJdOwkvKiAgbGlzdCBvZiBzY2FubmVkIGNoYW5uZWwgKi8KLQl1bnNpZ25lZCBjaGFyIGFjdF9jaGFubGlzdF9sZW47CS8qICBsZW4gb2Ygc2Nhbmxpc3QgKi8KLQl1bnNpZ25lZCBjaGFyIGFjdF9jaGFubGlzdF9wb3M7CS8qICBhY3R1YWwgcG9zaXRpb24gaW4gTVVYIGxpc3QgKi8KKwl1bnNpZ25lZCBjaGFyIHNhdmVkX3NlZ2xlbjsJLyogbGVuIG9mIHRoZSBub24tcmVwZWF0aW5nIGNoYW5saXN0ICovCiAJdW5zaWduZWQgY2hhciBkYV9yYW5nZXM7CS8qICBjb3B5IG9mIEQvQSBvdXRwaXQgcmFuZ2UgcmVnaXN0ZXIgKi8KLQl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8qICBsZW4gb2Ygc2Nhbmxpc3QgKi8KLQl1bnNpZ25lZCBpbnQgYWlfbl9jaGFuOwkvKiAgaG93IG1hbnkgY2hhbm5lbHMgaXMgbWVhc3VyZWQgKi8KLQl1bnNpZ25lZCBpbnQgKmFpX2NoYW5saXN0OwkvKiAgYWN0YXVsIGNoYW5saXN0ICovCi0JdW5zaWduZWQgaW50IGFpX2ZsYWdzOwkvKiAgZmxhZ2xpc3QgKi8KLQl1bnNpZ25lZCBpbnQgYWlfZGF0YV9sZW47CS8qICBsZW4gb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBpbnQgYWlfdGltZXIxOwkvKiAgdGltZXJzICovCi0JdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKIAl1bnNpZ25lZCBzaG9ydCBhb19kYXRhWzRdOwkvKiAgZGF0YSBvdXRwdXQgYnVmZmVyICovCiAJdW5zaWduZWQgaW50IGNudDBfd3JpdGVfd2FpdDsJLyogYWZ0ZXIgYSB3cml0ZSwgd2FpdCBmb3IgdXBkYXRlIG9mIHRoZQogCQkJCQkgKiBpbnRlcm5hbCBzdGF0ZSAqLwpAQCAtMzM0LDYyICszMjIsOTAgQEAKIAkweDE4MTgsIDB4MTkxOSwgMHgxYTFhLCAweDFiMWIsIDB4MWMxYywgMHgxZDFkLCAweDFlMWUsIDB4MWYxZgogfTsKIAotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbHQgY29ycmVjdGx5Ci0gSWYgaXQncyBvaywgdGhlbiBwcm9ncmFtIHNjYW4vZ2FpbiBsb2dpYy4KLSBUaGlzIHdvcmtzIGZvciBhbGwgY2FyZHMuCi0qLwotc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgcGNpMTcxeF9haV9kcm9wb3V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB2YWwpCiB7Ci0JdW5zaWduZWQgaW50IGNoYW5zZWdtZW50WzMyXTsKLQl1bnNpZ25lZCBpbnQgaSwgbm93bXVzdGJlY2hhbiwgc2VnbGVuLCBzZWdwb3M7CisJY29uc3Qgc3RydWN0IGJvYXJkdHlwZSAqYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKKwlzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCi0JLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCi0JaWYgKG5fY2hhbiA8IDEpIHsKLQkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwlpZiAoYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykgeworCQlpZiAoKHZhbCAmIDB4ZjAwMCkgIT0gZGV2cHJpdi0+YWN0X2NoYW5saXN0W2NoYW5dKSB7CisJCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAorCQkJCSJBL0QgZGF0YSBkcm9wdXQ6IHJlY2VpdmVkIGZyb20gY2hhbm5lbCAlZCwgZXhwZWN0ZWQgJWRcbiIsCisJCQkJKHZhbCA+PiAxMikgJiAweGYsCisJCQkJKGRldnByaXYtPmFjdF9jaGFubGlzdFtjaGFuXSA+PiAxMikgJiAweGYpOworCQkJcmV0dXJuIC1FTk9EQVRBOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXVuc2lnbmVkIGludCBjaGFuMCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJdW5zaWduZWQgaW50IGxhc3RfYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisJdW5zaWduZWQgaW50IG5leHRfY2hhbiA9IChjaGFuMCArIDEpICUgcy0+bl9jaGFuOworCXVuc2lnbmVkIGludCBjaGFuc2VnbWVudFszMl07CisJdW5zaWduZWQgaW50IHNlZ2xlbjsKKwlpbnQgaTsKKworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAxKSB7CisJCWRldnByaXYtPnNhdmVkX3NlZ2xlbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAobl9jaGFuID09IDEpCi0JCXJldHVybiAxOyAvKiBzZWdsZW49MSAqLworCS8qIGZpcnN0IGNoYW5uZWwgaXMgYWx3YXlzIG9rICovCisJY2hhbnNlZ21lbnRbMF0gPSBjbWQtPmNoYW5saXN0WzBdOwogCi0JY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsgLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnkgdGltZSBvayAqLwotCWZvciAoaSA9IDEsIHNlZ2xlbiA9IDE7IGkgPCBuX2NoYW47IGkrKywgc2VnbGVuKyspIHsKLQkJaWYgKGNoYW5saXN0WzBdID09IGNoYW5saXN0W2ldKQorCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJdW5zaWduZWQgaW50IGFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCWlmIChjbWQtPmNoYW5saXN0WzBdID09IGNtZC0+Y2hhbmxpc3RbaV0pCiAJCQlicmVhazsJLyogIHdlIGRldGVjdGVkIGEgbG9vcCwgc3RvcCAqLwotCQlpZiAoKENSX0NIQU4oY2hhbmxpc3RbaV0pICYgMSkgJiYKLQkJICAgIChDUl9BUkVGKGNoYW5saXN0W2ldKSA9PSBBUkVGX0RJRkYpKSB7Ci0JCQljb21lZGlfZXJyb3IoZGV2LCAiT2RkIGNoYW5uZWwgY2Fubm90IGJlIGRpZmZlcmVudGlhbCBpbnB1dCFcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJbm93bXVzdGJlY2hhbiA9IChDUl9DSEFOKGNoYW5zZWdtZW50W2kgLSAxXSkgKyAxKSAlIHMtPm5fY2hhbjsKLQkJaWYgKENSX0FSRUYoY2hhbnNlZ21lbnRbaSAtIDFdKSA9PSBBUkVGX0RJRkYpCi0JCQlub3dtdXN0YmVjaGFuID0gKG5vd211c3RiZWNoYW4gKyAxKSAlIHMtPm5fY2hhbjsKLQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsKLQkJCXByaW50aygiY2hhbm5lbCBsaXN0IG11c3QgYmUgY29udGludW91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKLQkJCSAgICAgICBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwgbm93bXVzdGJlY2hhbiwKLQkJCSAgICAgICBDUl9DSEFOKGNoYW5saXN0WzBdKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOyAvKiBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0ICovCi0JfQogCi0JZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7Ci0JCWlmIChjaGFubGlzdFtpXSAhPSBjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkgewotCQkJcHJpbnRrKCJiYWQgY2hhbm5lbCwgcmVmZXJlbmNlIG9yIHJhbmdlIG51bWJlciEgY2hhbmxpc3RbJWldPSVkLCVkLCVkIGFuZCBub3QgJWQsJWQsJWQhXG4iLAotCQkJICAgICAgIGksIENSX0NIQU4oY2hhbnNlZ21lbnRbaV0pLAotCQkJICAgICAgIENSX1JBTkdFKGNoYW5zZWdtZW50W2ldKSwKLQkJCSAgICAgICBDUl9BUkVGKGNoYW5zZWdtZW50W2ldKSwKLQkJCSAgICAgICBDUl9DSEFOKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKLQkJCSAgICAgICBDUl9SQU5HRShjaGFubGlzdFtpICUgc2VnbGVuXSksCi0JCQkgICAgICAgQ1JfQVJFRihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkpOwotCQkJcmV0dXJuIDA7CisJCWlmIChhcmVmID09IEFSRUZfRElGRiAmJiAoY2hhbiAmIDEpKSB7CisJCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAorCQkJCSJPZGQgY2hhbm5lbCBjYW5ub3QgYmUgZGlmZmVyZW50aWFsIGlucHV0IVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChsYXN0X2FyZWYgPT0gQVJFRl9ESUZGKQorCQkJbmV4dF9jaGFuID0gKG5leHRfY2hhbiArIDEpICUgcy0+bl9jaGFuOworCQlpZiAoY2hhbiAhPSBuZXh0X2NoYW4pIHsKKwkJCWRldl9lcnIoZGV2LT5jbGFzc19kZXYsCisJCQkJImNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbnVvdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgbXVzdCBiZSAlZCBvciAlZCFcbiIsCisJCQkJaSwgY2hhbiwgbmV4dF9jaGFuLCBjaGFuMCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIG5leHQgY29ycmVjdCBjaGFubmVsIGluIGxpc3QgKi8KKwkJY2hhbnNlZ21lbnRbaV0gPSBjbWQtPmNoYW5saXN0W2ldOworCQlsYXN0X2FyZWYgPSBhcmVmOworCX0KKwlzZWdsZW4gPSBpOworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJaWYgKGNtZC0+Y2hhbmxpc3RbaV0gIT0gY2hhbnNlZ21lbnRbaSAlIHNlZ2xlbl0pIHsKKwkJCWRldl9lcnIoZGV2LT5jbGFzc19kZXYsCisJCQkJImJhZCBjaGFubmVsLCByZWZlcmVuY2Ugb3IgcmFuZ2UgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCAlZCwlZCwlZCFcbiIsCisJCQkJaSwgQ1JfQ0hBTihjaGFuc2VnbWVudFtpXSksCisJCQkJQ1JfUkFOR0UoY2hhbnNlZ21lbnRbaV0pLAorCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAorCQkJCUNSX0NIQU4oY21kLT5jaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JcmV0dXJuIHNlZ2xlbjsKKwlkZXZwcml2LT5zYXZlZF9zZWdsZW4gPSBzZWdsZW47CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC00MDEsOSArNDE3LDYgQEAKIAlzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCXVuc2lnbmVkIGludCBpLCByYW5nZSwgY2hhbnByb2c7CiAKLQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfbGVuID0gc2VnbGVuOwotCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOwotCiAJZm9yIChpID0gMDsgaSA8IHNlZ2xlbjsgaSsrKSB7CS8qICBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQgKi8KIAkJY2hhbnByb2cgPSBtdXhvbmVjaGFuW0NSX0NIQU4oY2hhbmxpc3RbaV0pXTsKIAkJb3V0dyhjaGFucHJvZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7IC8qIHNlbGVjdCBjaGFubmVsICovCkBAIC00MTEsMTcgKzQyNCwxMyBAQAogCQlpZiAoQ1JfQVJFRihjaGFubGlzdFtpXSkgPT0gQVJFRl9ESUZGKQogCQkJcmFuZ2UgfD0gMHgwMDIwOwogCQlvdXR3KHJhbmdlLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfUkFOR0UpOyAvKiBzZWxlY3QgZ2FpbiAqLwotI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSwogCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbaV0gPQogCQkJKENSX0NIQU4oY2hhbmxpc3RbaV0pIDw8IDEyKSAmIDB4ZjAwMDsKLSNlbmRpZgogCX0KLSNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKIAlmb3IgKCA7IGkgPCBuX2NoYW47IGkrKykgeyAvKiBzdG9yZSByZW1haW5kZXIgb2YgY2hhbm5lbCBsaXN0ICovCiAJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSA9CiAJCQkoQ1JfQ0hBTihjaGFubGlzdFtpXSkgPDwgMTIpICYgMHhmMDAwOwogCX0KLSNlbmRpZgogCiAJZGV2cHJpdi0+YWlfZXRfTXV4VmFsID0KIAkJQ1JfQ0hBTihjaGFubGlzdFswXSkgfCAoQ1JfQ0hBTihjaGFubGlzdFtzZWdsZW4gLSAxXSkgPDwgOCk7CkBAIC00NDcsMTIgKzQ1Niw5IEBACiAJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKLQlpbnQgcmV0OwotCWludCBuOwotI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSwotCWNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKnRoaXNfYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKLQl1bnNpZ25lZCBpbnQgaWRhdGE7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCByZXQgPSAwOworCWludCBpOwogCiAJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOwogCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfU1c7CS8qICBzZXQgc29mdHdhcmUgdHJpZ2dlciAqLwpAQCAtNDYyLDM0ICs0NjgsMjcgQEAKIAogCXNldHVwX2NoYW5uZWxfbGlzdChkZXYsIHMsICZpbnNuLT5jaGFuc3BlYywgMSwgMSk7CiAKLQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsOworCiAJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NPRlRUUkcpOwkvKiBzdGFydCBjb252ZXJzaW9uICovCiAKIAkJcmV0ID0gY29tZWRpX3RpbWVvdXQoZGV2LCBzLCBpbnNuLCBwY2kxNzF4X2FpX2VvYywgMCk7Ci0JCWlmIChyZXQpIHsKLQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOwotCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCi0jaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCi0JCWlkYXRhID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKLQkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKLQkJCWlmICgoaWRhdGEgJiAweGYwMDApICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFswXSkgewotCQkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiBkYXRhIGRyb3B1dCEiKTsKLQkJCQlyZXR1cm4gLUVUSU1FOwotCQkJfQotCQlkYXRhW25dID0gaWRhdGEgJiAweDBmZmY7Ci0jZWxzZQotCQlkYXRhW25dID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKSAmIDB4MGZmZjsKLSNlbmRpZgorCQl2YWwgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpOworCQlyZXQgPSBwY2kxNzF4X2FpX2Ryb3BvdXQoZGV2LCBzLCBjaGFuLCB2YWwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CiAKKwkJZGF0YVtpXSA9IHZhbCAmIHMtPm1heGRhdGE7CiAJfQogCiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKIAotCXJldHVybiBuOworCXJldHVybiByZXQgPyByZXQgOiBpbnNuLT5uOwogfQogCiAvKgpAQCAtNTcxLDIwICs1NzAsMTggQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXN0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBtb2RlLAotCQkJdW5zaWduZWQgaW50IGRpdmlzb3IxLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjIpCitzdGF0aWMgdm9pZCBwY2kxNzF4X3N0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJYm9vbCBsb2FkX2NvdW50ZXJzKQogewotCW91dHcoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOwotCW91dHcoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCXN0cnVjdCBwY2kxNzEwX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlID0gZGV2LT5pb2Jhc2UgKyBQQ0kxNzFYX1RJTUVSX0JBU0U7CiAKLQlpZiAobW9kZSA9PSAxKSB7Ci0JCW91dHcoZGl2aXNvcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMik7Ci0JCW91dHcoKGRpdmlzb3IyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDIpOwotCQlvdXR3KGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDEpOwotCQlvdXR3KChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQxKTsKKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAxLCAyLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMSwgMSwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOworCisJaWYgKGxvYWRfY291bnRlcnMpIHsKKwkJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMSwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIpOworCQlpODI1NF93cml0ZSh0aW1lcl9iYXNlLCAxLCAxLCBkZXZwcml2LT5kaXZpc29yMSk7CiAJfQogfQogCkBAIC03MjcsNDUgKzcyNCwzNyBAQAogCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1NXOwogCiAJCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsJLyogIHJlc2V0IGFueSBvcGVyYXRpb25zICovCi0JCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOworCQlwY2kxNzF4X3N0YXJ0X3BhY2VyKGRldiwgZmFsc2UpOwogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJGSUZPKTsKIAkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKIAkJYnJlYWs7CiAJfQogCi0JZGV2cHJpdi0+YWlfZG8gPSAwOwogCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwotCWRldnByaXYtPmFpX2J1Zl9wdHIgPSAwOwotCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKIAogCXJldHVybiAwOwogfQogCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTE3MTBfZXZlcnlfc2FtcGxlKHZvaWQgKmQpCitzdGF0aWMgdm9pZCBwY2kxNzEwX2hhbmRsZV9ldmVyeV9zYW1wbGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0Jc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7Ci0JaW50IG07Ci0jaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCi0JY29uc3Qgc3RydWN0IGJvYXJkdHlwZSAqdGhpc19ib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwotCXVuc2lnbmVkIHNob3J0IHNhbXBsOwotI2VuZGlmCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OwogCi0JbSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKTsKLQlpZiAobSAmIFN0YXR1c19GRSkgewotCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LCAiQS9EIEZJRk8gZW1wdHkgKCU0eClcbiIsIG0pOworCXN0YXR1cyA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgU3RhdHVzX0ZFKSB7CisJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsICJBL0QgRklGTyBlbXB0eSAoJTR4KVxuIiwgc3RhdHVzKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOwogCQljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwogCQlyZXR1cm47CiAJfQotCWlmIChtICYgU3RhdHVzX0ZGKSB7CisJaWYgKHN0YXR1cyAmIFN0YXR1c19GRikgewogCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAotCQkJIkEvRCBGSUZPIEZ1bGwgc3RhdHVzIChGYXRhbCBFcnJvciEpICglNHgpXG4iLCBtKTsKKwkJCSJBL0QgRklGTyBGdWxsIHN0YXR1cyAoRmF0YWwgRXJyb3IhKSAoJTR4KVxuIiwgc3RhdHVzKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOwogCQljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwogCQlyZXR1cm47CkBAIC03NzQsNDIgKzc2MywyNyBAQAogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CS8qICBjbGVhciBvdXIgSU5UIHJlcXVlc3QgKi8KIAogCWZvciAoOyAhKGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSAmIFN0YXR1c19GRSk7KSB7Ci0jaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCi0JCXNhbXBsID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKLQkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKLQkJCWlmICgoc2FtcGwgJiAweGYwMDApICE9Ci0JCQkgICAgZGV2cHJpdi0+YWN0X2NoYW5saXN0W3MtPmFzeW5jLT5jdXJfY2hhbl0pIHsKLQkJCQlwcmludGsKLQkJCQkgICAgKCJjb21lZGk6IEEvRCBkYXRhIGRyb3BvdXQ6IHJlY2VpdmVkIGRhdGEgZnJvbSBjaGFubmVsICVkLCBleHBlY3RlZCAlZCFcbiIsCi0JCQkJICAgICAoc2FtcGwgJiAweGYwMDApID4+IDEyLAotCQkJCSAgICAgKGRldnByaXYtPgotCQkJCSAgICAgIGFjdF9jaGFubGlzdFtzLT4KLQkJCQkJCSAgIGFzeW5jLT5jdXJfY2hhbl0gJiAweGYwMDApID4+Ci0JCQkJICAgICAxMik7Ci0JCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQotCQkJCSAgICBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOwotCQkJCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcGwgJiAweDBmZmYpOwotI2Vsc2UKLQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsCi0JCQkgICAgICAgaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKSAmIDB4MGZmZik7Ci0jZW5kaWYKLQkJKytzLT5hc3luYy0+Y3VyX2NoYW47CisJCXZhbCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSk7CisJCXJldCA9IHBjaTE3MXhfYWlfZHJvcG91dChkZXYsIHMsIHMtPmFzeW5jLT5jdXJfY2hhbiwgdmFsKTsKKwkJaWYgKHJldCkgeworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJYnJlYWs7CisJCX0KIAotCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fY2hhbikKKwkJY29tZWRpX2J1Zl9wdXQocywgdmFsICYgcy0+bWF4ZGF0YSk7CisKKwkJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gY21kLT5jaGFubGlzdF9sZW4pCiAJCQlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCiAKIAkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CS8qICBvbmUgc2NhbiBkb25lICovCiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwotCQkJaWYgKCghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpICYmCi0JCQkgICAgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSkgeworCQkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgorCQkJICAgIGRldnByaXYtPmFpX2FjdF9zY2FuID49IGNtZC0+c3RvcF9hcmcpIHsKIAkJCQkvKiAgYWxsIGRhdGEgc2FtcGxlZCAqLwogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKLQkJCQljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwotCQkJCXJldHVybjsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KQEAgLTgyNiw1MyArODAwLDM3IEBACiAJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBuLCBpbnQgdHVybikKIHsKIAlzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCWludCBpLCBqOwotI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSwotCWNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKnRoaXNfYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKLQl1bnNpZ25lZCBzaG9ydCBzYW1wbDsKLSNlbmRpZgorCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisJaW50IGk7CiAKLQlqID0gcy0+YXN5bmMtPmN1cl9jaGFuOwogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKLQkJc2FtcGwgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpOwotCQlpZiAodGhpc19ib2FyZC0+Y2FyZHR5cGUgIT0gVFlQRV9QQ0kxNzEzKQotCQkJaWYgKChzYW1wbCAmIDB4ZjAwMCkgIT0gZGV2cHJpdi0+YWN0X2NoYW5saXN0W2pdKSB7Ci0JCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKLQkJCQkJIkEvRCBGSUZPIGRhdGEgZHJvcG91dDogcmVjZWl2ZWQgZGF0YSBmcm9tIGNoYW5uZWwgJWQsIGV4cGVjdGVkICVkISAoJWQvJWQvJWQvJWQvJWQvJTR4KVxuIiwKLQkJCQkJKHNhbXBsICYgMHhmMDAwKSA+PiAxMiwKLQkJCQkJKGRldnByaXYtPmFjdF9jaGFubGlzdFtqXSAmIDB4ZjAwMCkgPj4gMTIsCi0JCQkJCWksIGosIGRldnByaXYtPmFpX2FjdF9zY2FuLCBuLCB0dXJuLAotCQkJCQlzYW1wbCk7Ci0JCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQotCQkJCSAgICBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOwotCQkJCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBzYW1wbCAmIDB4MGZmZik7Ci0jZWxzZQotCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywKLQkJCSAgICAgICBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpICYgMHgwZmZmKTsKLSNlbmRpZgotCQlqKys7Ci0JCWlmIChqID49IGRldnByaXYtPmFpX25fY2hhbikgewotCQkJaiA9IDA7CisJCXZhbCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSk7CisKKwkJcmV0ID0gcGNpMTcxeF9haV9kcm9wb3V0KGRldiwgcywgcy0+YXN5bmMtPmN1cl9jaGFuLCB2YWwpOworCQlpZiAocmV0KSB7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJY29tZWRpX2J1Zl9wdXQocywgdmFsICYgcy0+bWF4ZGF0YSk7CisKKwkJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQl9CiAJfQotCXMtPmFzeW5jLT5jdXJfY2hhbiA9IGo7CiAJcmV0dXJuIDA7CiB9CiAKLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdGF0aWMgdm9pZCBpbnRlcnJ1cHRfcGNpMTcxMF9oYWxmX2ZpZm8odm9pZCAqZCkKK3N0YXRpYyB2b2lkIHBjaTE3MTBfaGFuZGxlX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKIAljb25zdCBzdHJ1Y3QgYm9hcmR0eXBlICp0aGlzX2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCBtLCBzYW1wbGVzaW5idWY7CiAKIAltID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpOwpAQCAtODkxLDggKzg0OSw4IEBACiAJfQogCiAJc2FtcGxlc2luYnVmID0gdGhpc19ib2FyZC0+Zmlmb19oYWxmX3NpemU7Ci0JaWYgKHNhbXBsZXNpbmJ1ZiAqIHNpemVvZihzaG9ydCkgPj0gZGV2cHJpdi0+YWlfZGF0YV9sZW4pIHsKLQkJbSA9IGRldnByaXYtPmFpX2RhdGFfbGVuIC8gc2l6ZW9mKHNob3J0KTsKKwlpZiAoc2FtcGxlc2luYnVmICogc2l6ZW9mKHNob3J0KSA+PSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opIHsKKwkJbSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeiAvIHNpemVvZihzaG9ydCk7CiAJCWlmIChtb3ZlX2Jsb2NrX2Zyb21fZmlmbyhkZXYsIHMsIG0sIDApKQogCQkJcmV0dXJuOwogCQlzYW1wbGVzaW5idWYgLT0gbTsKQEAgLTkwMywxMyArODYxLDEzIEBACiAJCQlyZXR1cm47CiAJfQogCi0JaWYgKCFkZXZwcml2LT5uZXZlcmVuZGluZ19haSkKLQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7IC8qIGFsbCBkYXRhCi0JCQkJCQkJCSAgICBzYW1wbGVkICovCi0JCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7Ci0JCQljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwotCQkJcmV0dXJuOwotCQl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgorCSAgICBkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBjbWQtPnN0b3BfYXJnKSB7CisJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOworCQlyZXR1cm47CisJfQogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CS8qICBjbGVhciBvdXIgSU5UIHJlcXVlc3QgKi8KIAogCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7CkBAIC05MjIsOSArODgwLDE1IEBACiB7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOwogCiAJaWYgKCFkZXYtPmF0dGFjaGVkKQkvKiAgaXMgZGV2aWNlIGF0dGFjaGVkPyAqLwogCQlyZXR1cm4gSVJRX05PTkU7CS8qICBubywgZXhpdCAqLworCisJcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKIAkvKiAgaXMgdGhpcyBpbnRlcnJ1cHQgZnJvbSBvdXIgYm9hcmQ/ICovCiAJaWYgKCEoaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0lSUSkpCiAJCXJldHVybiBJUlFfTk9ORTsJLyogIG5vLCBleGl0ICovCkBAIC05MzksOTUgKzkwMyw1OSBAQAogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOwogCQlvdXR3KGRldnByaXYtPmFpX2V0X011eFZhbCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7CiAJCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKLQkJLyogIHN0YXJ0IHBhY2VyICovCi0JCXN0YXJ0X3BhY2VyKGRldiwgMSwgZGV2cHJpdi0+YWlfZXRfZGl2MSwgZGV2cHJpdi0+YWlfZXRfZGl2Mik7CisJCXBjaTE3MXhfc3RhcnRfcGFjZXIoZGV2LCB0cnVlKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KLQlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7CS8qICBXZSB1c2UgRklGTyBoYWxmIGZ1bGwgSU5UIG9yIG5vdD8gKi8KLQkJaW50ZXJydXB0X3BjaTE3MTBfZXZlcnlfc2FtcGxlKGQpOwotCX0gZWxzZSB7Ci0JCWludGVycnVwdF9wY2kxNzEwX2hhbGZfZmlmbyhkKTsKLQl9CisKKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpCisJCXBjaTE3MTBfaGFuZGxlX2V2ZXJ5X3NhbXBsZShkZXYsIHMpOworCWVsc2UKKwkJcGNpMTcxMF9oYW5kbGVfZmlmbyhkZXYsIHMpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotc3RhdGljIGludCBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKnRoaXNfYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMDsKLQl1bnNpZ25lZCBpbnQgc2VnbGVuOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAotCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvKiAgc3RvcCBwYWNlciAqLworCXBjaTE3MXhfc3RhcnRfcGFjZXIoZGV2LCBmYWxzZSk7CiAKLQlzZWdsZW4gPSBjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdCwKLQkJCQkgICAgZGV2cHJpdi0+YWlfbl9jaGFuKTsKLQlpZiAoc2VnbGVuIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCi0JCQkgICBkZXZwcml2LT5haV9uX2NoYW4sIHNlZ2xlbik7CisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwgY21kLT5jaGFubGlzdF9sZW4sCisJCQkgICBkZXZwcml2LT5zYXZlZF9zZWdsZW4pOwogCiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKIAotCWRldnByaXYtPmFpX2RvID0gbW9kZTsKLQogCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwotCWRldnByaXYtPmFpX2J1Zl9wdHIgPSAwOwotCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKIAogCWRldnByaXYtPkNudHJsUmVnICY9IENvbnRyb2xfQ05UMDsKLQkvKiAgZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/ICBkZXZwcml2LT5haV9lb3M9MTsgKi8KLQlpZiAoKGRldnByaXYtPmFpX2ZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsKLQkJZGV2cHJpdi0+YWlfZW9zID0gMTsKLQl9IGVsc2UgeworCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpID09IDApCiAJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfT05FRkg7Ci0JCWRldnByaXYtPmFpX2VvcyA9IDA7Ci0JfQogCi0JaWYgKChkZXZwcml2LT5haV9zY2FucyA9PSAwKSB8fCAoZGV2cHJpdi0+YWlfc2NhbnMgPT0gLTEpKQotCQlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDE7Ci0JLyogd2VsbCwgdXNlciB3YW50IG5ldmVyZW5kaW5nICovCi0JZWxzZQotCQlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisJZGV2cHJpdi0+ZGl2aXNvcjEgPSBkZXZwcml2LT5uZXh0X2Rpdmlzb3IxOworCWRldnByaXYtPmRpdmlzb3IyID0gZGV2cHJpdi0+bmV4dF9kaXZpc29yMjsKIAotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgMToKLQljYXNlIDI6Ci0JCWlmIChkZXZwcml2LT5haV90aW1lcjEgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCi0JCQlkZXZwcml2LT5haV90aW1lcjEgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewogCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1BBQ0VSIHwgQ29udHJvbF9JUlFFTjsKLQkJaWYgKG1vZGUgPT0gMikgeworCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKIAkJCWRldnByaXYtPmFpX2V0X0NudHJsUmVnID0gZGV2cHJpdi0+Q250cmxSZWc7CiAJCQlkZXZwcml2LT5DbnRybFJlZyAmPQogCQkJICAgIH4oQ29udHJvbF9QQUNFUiB8IENvbnRyb2xfT05FRkggfCBDb250cm9sX0dBVEUpOwogCQkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9FWFQ7CiAJCQlkZXZwcml2LT5haV9ldCA9IDE7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSB7CS8qIFRSSUdfTk9XICovCiAJCQlkZXZwcml2LT5haV9ldCA9IDA7CiAJCX0KLQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwKLQkJCQkJICAmZGl2aXNvcjEsICZkaXZpc29yMiwKLQkJCQkJICAmZGV2cHJpdi0+YWlfdGltZXIxLAotCQkJCQkgIGRldnByaXYtPmFpX2ZsYWdzKTsKIAkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOwotCQlpZiAobW9kZSAhPSAyKSB7Ci0JCQkvKiAgc3RhcnQgcGFjZXIgKi8KLQkJCXN0YXJ0X3BhY2VyKGRldiwgbW9kZSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKLQkJfSBlbHNlIHsKLQkJCWRldnByaXYtPmFpX2V0X2RpdjEgPSBkaXZpc29yMTsKLQkJCWRldnByaXYtPmFpX2V0X2RpdjIgPSBkaXZpc29yMjsKLQkJfQotCQlicmVhazsKLQljYXNlIDM6CisKKwkJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQkJcGNpMTcxeF9zdGFydF9wYWNlcihkZXYsIHRydWUpOworCX0gZWxzZSB7CS8qIFRSSUdfRVhUICovCiAJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfRVhUIHwgQ29udHJvbF9JUlFFTjsKIAkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEwNDMsOCArOTcxLDcgQEAKIAljb25zdCBzdHJ1Y3QgYm9hcmR0eXBlICp0aGlzX2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOwotCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0xMDkyLDI2ICsxMDE5LDIzIEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOwotCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLAotCQkJCQkgICZkaXZpc29yMSwgJmRpdmlzb3IyLAotCQkJCQkgICZjbWQtPmNvbnZlcnRfYXJnLCBjbWQtPmZsYWdzKTsKLQkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCi0JCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKKwkJYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV8xME1IWiwKKwkJCQkJICAmZGV2cHJpdi0+bmV4dF9kaXZpc29yMSwKKwkJCQkJICAmZGV2cHJpdi0+bmV4dF9kaXZpc29yMiwKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qIHN0ZXAgNTogY29tcGxhaW4gYWJvdXQgc3BlY2lhbCBjaGFubGlzdCBjb25zaWRlcmF0aW9ucyAqLworCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0ICovCiAKLQlpZiAoY21kLT5jaGFubGlzdCkgewotCQlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3QsCi0JCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkKLQkJCXJldHVybiA1OwkvKiAgaW5jb3JyZWN0IGNoYW5uZWxzIGxpc3QgKi8KLQl9CisJZXJyIHw9IHBjaTE3MXhfYWlfY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOworCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTksNDIgKzEwNDMsNiBAQAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgcGNpMTcxeF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCi17Ci0Jc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7Ci0KLQlkZXZwcml2LT5haV9uX2NoYW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKLQlkZXZwcml2LT5haV9jaGFubGlzdCA9IGNtZC0+Y2hhbmxpc3Q7Ci0JZGV2cHJpdi0+YWlfZmxhZ3MgPSBjbWQtPmZsYWdzOwotCWRldnByaXYtPmFpX2RhdGFfbGVuID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6OwotCWRldnByaXYtPmFpX3RpbWVyMSA9IDA7Ci0JZGV2cHJpdi0+YWlfdGltZXIyID0gMDsKLQotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCi0JCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKLQllbHNlCi0JCWRldnByaXYtPmFpX3NjYW5zID0gMDsKLQotCi0JaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsJLyogIG1vZGUgMSwgMiwgMyAqLwotCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CS8qICBtb2RlIDEgYW5kIDIgKi8KLQkJCWRldnByaXYtPmFpX3RpbWVyMSA9IGNtZC0+Y29udmVydF9hcmc7Ci0JCQlyZXR1cm4gcGNpMTcxeF9haV9kb2NtZF9hbmRfbW9kZShjbWQtPnN0YXJ0X3NyYyA9PQotCQkJCQkJCSBUUklHX0VYVCA/IDIgOiAxLCBkZXYsCi0JCQkJCQkJIHMpOwotCQl9Ci0JCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CS8qICBtb2RlIDMgKi8KLQkJCXJldHVybiBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKDMsIGRldiwgcyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCiBzdGF0aWMgaW50IHBjaTE3MXhfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgYm9hcmR0eXBlICp0aGlzX2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CkBAIC0xMTY1LDcgKzEwNTMsNyBAQAogCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsJLyogIHJlc2V0IGFueSBvcGVyYXRpb25zICovCiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CS8qICBjbGVhciBGSUZPICovCiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLyogIGNsZWFyIElOVCByZXF1ZXN0ICovCi0Jc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CS8qICBzdG9wIDgyNTQgKi8KKwlwY2kxNzF4X3N0YXJ0X3BhY2VyKGRldiwgZmFsc2UpOwogCWRldnByaXYtPmRhX3JhbmdlcyA9IDA7CiAJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuKSB7CiAJCW91dGIoZGV2cHJpdi0+ZGFfcmFuZ2VzLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREFSRUYpOwkvKiAgc2V0IERBQ3MgdG8gMC4uNVYgKi8KQEAgLTEyOTAsNyArMTE3OCw2IEBACiAJCQlzLT5kb19jbWQgPSBwY2kxNzF4X2FpX2NtZDsKIAkJCXMtPmNhbmNlbCA9IHBjaTE3MXhfYWlfY2FuY2VsOwogCQl9Ci0JCWRldnByaXYtPmk4MjU0X29zY19iYXNlID0gSTgyNTRfT1NDX0JBU0VfMTBNSFo7CiAJCXN1YmRldisrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMF9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDBfY29tbW9uLmMKaW5kZXggODE4YTBkNy4uM2VkYWE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMF9jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwX2NvbW1vbi5jCkBAIC0xMzAsNyArMTMwLDYgQEAKIAl1bnNpZ25lZCBpbnQgZW5hYmxlZF9pc25zOwogCXVuc2lnbmVkIGludCBzdG9wY291bnQ7CiAJYm9vbCBhY3RpdmU6MTsKLQlib29sIGNvbnRpbnVvdXM6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGRpbzIwMF9sYXlvdXQgKgpAQCAtMjU5LDcgKzI1OCw3IEBACiAJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCByZXR2YWwgPSAwOwogCi0JaWYgKCFzdWJwcml2LT5jb250aW51b3VzICYmIHN1YnByaXYtPnN0b3Bjb3VudCA9PSAwKSB7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBzdWJwcml2LT5zdG9wY291bnQgPT0gMCkgewogCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlzdWJwcml2LT5hY3RpdmUgPSBmYWxzZTsKQEAgLTI4MSwyMiArMjgwLDE4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoKLSAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KLSAqLwotc3RhdGljIGludAotZGlvMjAwX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgdW5zaWduZWQgaW50IHRyaWdudW0pCitzdGF0aWMgaW50IGRpbzIwMF9pbnR0cmlnX3N0YXJ0X2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdfbnVtKQogewotCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXY7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGV2ZW50ID0gMDsKIAotCWlmICh0cmlnbnVtICE9IDApCisJaWYgKHRyaWdfbnVtICE9IGNtZC0+c3RhcnRfYXJnKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN1YnByaXYgPSBzLT5wcml2YXRlOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCWlmIChzdWJwcml2LT5hY3RpdmUpCkBAIC0zMTUsMTggKzMxMCwxOCBAQAogCQkJCSAgdW5zaWduZWQgaW50IHRyaWdnZXJlZCkKIHsKIAlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwotCXVuc2lnbmVkIGludCBuLCBjaCwgbGVuOworCXVuc2lnbmVkIGludCBuLCBjaDsKIAogCXZhbCA9IDA7Ci0JbGVuID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47Ci0JZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKSB7Ci0JCWNoID0gQ1JfQ0hBTihzLT5hc3luYy0+Y21kLmNoYW5saXN0W25dKTsKKwlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykgeworCQljaCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CiAJCWlmICh0cmlnZ2VyZWQgJiAoMVUgPDwgY2gpKQogCQkJdmFsIHw9ICgxVSA8PCBuKTsKIAl9CiAJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KLQlpZiAoY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHZhbCkpIHsKKwlpZiAoY29tZWRpX2J1Zl9wdXQocywgdmFsKSkgewogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IChDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TKTsKIAl9IGVsc2UgewogCQkvKiBFcnJvciEgIFN0b3AgYWNxdWlzaXRpb24uICAqLwpAQCAtMzM2LDggKzMzMSw3IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KLQlpZiAoIXN1YnByaXYtPmNvbnRpbnVvdXMpIHsKLQkJLyogc3RvcF9zcmMgPT0gVFJJR19DT1VOVCAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJaWYgKHN1YnByaXYtPnN0b3Bjb3VudCA+IDApIHsKIAkJCXN1YnByaXYtPnN0b3Bjb3VudC0tOwogCQkJaWYgKHN1YnByaXYtPnN0b3Bjb3VudCA9PSAwKSB7CkBAIC01MTYsMjggKzUxMCwxNiBAQAogCXN1YnByaXYtPmFjdGl2ZSA9IHRydWU7CiAKIAkvKiBTZXQgdXAgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLwotCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewotCWNhc2UgVFJJR19DT1VOVDoKLQkJc3VicHJpdi0+Y29udGludW91cyA9IGZhbHNlOworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCXN1YnByaXYtPnN0b3Bjb3VudCA9IGNtZC0+c3RvcF9hcmc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIFRSSUdfTk9ORSAqLwotCQlzdWJwcml2LT5jb250aW51b3VzID0gdHJ1ZTsKKwllbHNlCS8qIFRSSUdfTk9ORSAqLwogCQlzdWJwcml2LT5zdG9wY291bnQgPSAwOwotCQlicmVhazsKLQl9CiAKLQkvKiBTZXQgdXAgc3RhcnQgb2YgYWNxdWlzaXRpb24uICovCi0Jc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgewotCWNhc2UgVFJJR19JTlQ6CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKQogCQlzLT5hc3luYy0+aW50dHJpZyA9IGRpbzIwMF9pbnR0cmlnX3N0YXJ0X2ludHI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIFRSSUdfTk9XICovCisJZWxzZQkvKiBUUklHX05PVyAqLwogCQlldmVudCA9IGRpbzIwMF9zdGFydF9pbnRyKGRldiwgcyk7Ci0JCWJyZWFrOwotCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKIAlpZiAoZXZlbnQpCkBAIC04MjksNyArODExLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKIAlzd2l0Y2ggKGRhdGFbMF0pIHsKIAljYXNlIElOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREU6Ci0JCWlmIChkYXRhWzFdID4gKEk4MjU0X01PREU1IHwgSTgyNTRfQklOQVJZKSkKKwkJaWYgKGRhdGFbMV0gPiAoSTgyNTRfTU9ERTUgfCBJODI1NF9CQ0QpKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZWxzZQogCQkJZGlvMjAwX3N1YmRldl84MjU0X3NldF9tb2RlKGRldiwgcywgY2hhbiwgZGF0YVsxXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCmluZGV4IGIyMWQ3YjQuLmM5YTk2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgMCk7Ci0JZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIDEpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdG9wX2FyZywgMCk7CiAKIAlpZiAoZXJyKQpAQCAtMzYxLDcgKzM2MSw3IEBACiAKIAloYW5kbGVkID0gcGMyMzZfaW50cl9jaGVjayhkZXYpOwogCWlmIChkZXYtPmF0dGFjaGVkICYmIGhhbmRsZWQpIHsKLQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIDApOworCQljb21lZGlfYnVmX3B1dChzLCAwKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOwogCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKIAl9CkBAIC00MDIsNiArNDAyLDcgQEAKIAkJCXMtPm1heGRhdGEgPSAxOwogCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAkJCXMtPmluc25fYml0cyA9IHBjMjM2X2ludHJfaW5zbjsKKwkJCXMtPmxlbl9jaGFubGlzdAk9IDE7CiAJCQlzLT5kb19jbWR0ZXN0ID0gcGMyMzZfaW50cl9jbWR0ZXN0OwogCQkJcy0+ZG9fY21kID0gcGMyMzZfaW50cl9jbWQ7CiAJCQlzLT5jYW5jZWwgPSBwYzIzNl9pbnRyX2NhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwppbmRleCAyOWUwMWUyLi4zMzljNDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCkBAIC0zNzcsNyArMzc3LDYgQEAKIAl1bnNpZ25lZCBpbnQgY2FjaGVkX2RpdjE7CiAJdW5zaWduZWQgaW50IGNhY2hlZF9kaXYyOwogCXVuc2lnbmVkIGludCBhb19zdG9wX2NvdW50OwotCXNob3J0IGFvX3N0b3BfY29udGludW91czsKIAl1bnNpZ25lZCBzaG9ydCBhb19lbmFiOwkvKiBtYXggMTYgY2hhbm5lbHMgc28gJ3Nob3J0JyB3aWxsIGRvICovCiAJdW5zaWduZWQgY2hhciBpbnRzY2U7CiB9OwpAQCAtNDY3LDE2ICs0NjYsNiBAQAogfQogCiAvKgotICogSnVzdCBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUgZnVuY3Rpb24gJ2k4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXInLgotICovCi1zdGF0aWMgdm9pZAotcGNpMjI0X2Nhc2NhZGVfbnNfdG9fdGltZXIoaW50IG9zY19iYXNlLCB1bnNpZ25lZCBpbnQgKmQxLCB1bnNpZ25lZCBpbnQgKmQyLAotCQkJICAgdW5zaWduZWQgaW50ICpuYW5vc2VjLCBpbnQgcm91bmRfbW9kZSkKLXsKLQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKG9zY19iYXNlLCBkMSwgZDIsIG5hbm9zZWMsIHJvdW5kX21vZGUpOwotfQotCi0vKgogICogS2lsbHMgYSBjb21tYW5kIHJ1bm5pbmcgb24gdGhlIEFPIHN1YmRldmljZS4KICAqLwogc3RhdGljIHZvaWQgcGNpMjI0X2FvX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTUzMSw3ICs1MjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzZXRfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOwotCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzICYmIGRldnByaXYtPmFvX3N0b3BfY291bnQgPT0gMCkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+YW9fc3RvcF9jb3VudCA9PSAwKSB7CiAJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7CkBAIC01NTYsMjEgKzU0NSwxNSBAQAogewogCXN0cnVjdCBwY2kyMjRfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zY2FuID0gY2ZjX2J5dGVzX3Blcl9zY2FuKHMpOwogCXVuc2lnbmVkIGludCBudW1fc2NhbnM7CiAJdW5zaWduZWQgaW50IHJvb207CiAJdW5zaWduZWQgc2hvcnQgZGFjc3RhdDsKIAl1bnNpZ25lZCBpbnQgaSwgbjsKLQl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NjYW47CiAKLQlpZiAoY21kLT5jaGFubGlzdF9sZW4pIHsKLQkJYnl0ZXNfcGVyX3NjYW4gPSBjbWQtPmNoYW5saXN0X2xlbiAqIHNpemVvZihzaG9ydCk7Ci0JfSBlbHNlIHsKLQkJLyogU2hvdWxkbid0IGdldCBoZXJlISAqLwotCQlieXRlc19wZXJfc2NhbiA9IHNpemVvZihzaG9ydCk7Ci0JfQogCS8qIERldGVybWluZSBudW1iZXIgb2Ygc2NhbnMgYXZhaWxhYmxlIGluIGJ1ZmZlci4gKi8KLQludW1fc2NhbnMgPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUocy0+YXN5bmMpIC8gYnl0ZXNfcGVyX3NjYW47Ci0JaWYgKCFkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMpIHsKKwludW1fc2NhbnMgPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUocykgLyBieXRlc19wZXJfc2NhbjsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCS8qIEZpeGVkIG51bWJlciBvZiBzY2Fucy4gKi8KIAkJaWYgKG51bV9zY2FucyA+IGRldnByaXYtPmFvX3N0b3BfY291bnQpCiAJCQludW1fc2NhbnMgPSBkZXZwcml2LT5hb19zdG9wX2NvdW50OwpAQCAtNTgyLDcgKzU2NSw3IEBACiAJc3dpdGNoIChkYWNzdGF0ICYgUENJMjI0X0RBQ0NPTl9GSUZPRkxfTUFTSykgewogCWNhc2UgUENJMjI0X0RBQ0NPTl9GSUZPRkxfRU1QVFk6CiAJCXJvb20gPSBQQ0kyMjRfRklGT19ST09NX0VNUFRZOwotCQlpZiAoIWRldnByaXYtPmFvX3N0b3BfY29udGludW91cyAmJiBkZXZwcml2LT5hb19zdG9wX2NvdW50ID09IDApIHsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5hb19zdG9wX2NvdW50ID09IDApIHsKIAkJCS8qIEZJRk8gZW1wdHkgYXQgZW5kIG9mIGNvdW50ZWQgYWNxdWlzaXRpb24uICovCiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCQljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwpAQCAtNjA4LDggKzU5MSw3IEBACiAJCX0KIAl9CiAJLyogRGV0ZXJtaW5lIGhvdyBtYW55IG5ldyBzY2FucyBjYW4gYmUgcHV0IGluIHRoZSBGSUZPLiAqLwotCWlmIChjbWQtPmNoYW5saXN0X2xlbikKLQkJcm9vbSAvPSBjbWQtPmNoYW5saXN0X2xlbjsKKwlyb29tIC89IGNtZC0+Y2hhbmxpc3RfbGVuOwogCiAJLyogRGV0ZXJtaW5lIGhvdyBtYW55IHNjYW5zIHRvIHByb2Nlc3MuICovCiAJaWYgKG51bV9zY2FucyA+IHJvb20pCkBAIC02MjQsNyArNjA2LDcgQEAKIAkJCSAgICAgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDREFUQSk7CiAJCX0KIAl9Ci0JaWYgKCFkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCWRldnByaXYtPmFvX3N0b3BfY291bnQgLT0gbnVtX3NjYW5zOwogCQlpZiAoZGV2cHJpdi0+YW9fc3RvcF9jb3VudCA9PSAwKSB7CiAJCQkvKgpAQCAtNjcxLDE0ICs2NTMsMTMgQEAKIAljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOwogfQogCi0vKgotICogSW50ZXJuYWwgdHJpZ2dlciBmdW5jdGlvbiB0byBzdGFydCBhY3F1aXNpdGlvbiBvbiBBTyBzdWJkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbnQKLXBjaTIyNF9hb19pbnR0cmlnX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJdW5zaWduZWQgaW50IHRyaWdudW0pCitzdGF0aWMgaW50IHBjaTIyNF9hb19pbnR0cmlnX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgdW5zaWduZWQgaW50IHRyaWdfbnVtKQogewotCWlmICh0cmlnbnVtICE9IDApCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJaWYgKHRyaWdfbnVtICE9IGNtZC0+c3RhcnRfYXJnKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKQEAgLTY4Nyw2ICs2NjgsMzcgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBwY2kyMjRfYW9fY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IHJhbmdlMCA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCXVuc2lnbmVkIGludCBjaGFuX21hc2sgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQl1bnNpZ25lZCBpbnQgcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKworCQlpZiAoY2hhbl9tYXNrICYgKDEgPDwgY2hhbikpIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJIiVzOiBlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgY29udGFpbiBubyBkdXBsaWNhdGUgY2hhbm5lbHNcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2hhbl9tYXNrIHw9ICgxIDw8IGNoYW4pOworCisJCWlmIChyYW5nZSAhPSByYW5nZTApIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJIiVzOiBlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgcmFuZ2UgaW5kZXhcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogI2RlZmluZSBNQVhfU0NBTl9QRVJJT0QJCTB4RkZGRkZGRkZVCiAjZGVmaW5lIE1JTl9TQ0FOX1BFUklPRAkJMjUwMAogI2RlZmluZSBDT05WRVJUX1BFUklPRAkJNjI1CkBAIC03MDAsNyArNzEyLDcgQEAKIHsKIAlzdHJ1Y3QgcGNpMjI0X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC03MjcsMTQgKzczOSwxNCBAQAogCSAqIFRoZXJlJ3Mgb25seSBvbmUgZXh0ZXJuYWwgdHJpZ2dlciBzaWduYWwgKHdoaWNoIG1ha2VzIHRoZXNlCiAJICogdGVzdHMgZWFzaWVyKS4gIE9ubHkgb25lIHRoaW5nIGNhbiB1c2UgaXQuCiAJICovCi0JdG1wID0gMDsKKwlhcmcgPSAwOwogCWlmIChjbWQtPnN0YXJ0X3NyYyAmIFRSSUdfRVhUKQotCQl0bXArKzsKKwkJYXJnKys7CiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiBUUklHX0VYVCkKLQkJdG1wKys7CisJCWFyZysrOwogCWlmIChjbWQtPnN0b3Bfc3JjICYgVFJJR19FWFQpCi0JCXRtcCsrOwotCWlmICh0bXAgPiAxKQorCQlhcmcrKzsKKwlpZiAoYXJnID4gMSkKIAkJZXJyIHw9IC1FSU5WQUw7CiAKIAlpZiAoZXJyKQpAQCAtNzY3LDEwICs3NzksMTAgQEAKIAkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19tYXgoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCiAJCQkJCQkgTUFYX1NDQU5fUEVSSU9EKTsKIAotCQl0bXAgPSBjbWQtPmNoYW5saXN0X2xlbiAqIENPTlZFUlRfUEVSSU9EOwotCQlpZiAodG1wIDwgTUlOX1NDQU5fUEVSSU9EKQotCQkJdG1wID0gTUlOX1NDQU5fUEVSSU9EOwotCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5zY2FuX2JlZ2luX2FyZywgdG1wKTsKKwkJYXJnID0gY21kLT5jaGFubGlzdF9sZW4gKiBDT05WRVJUX1BFUklPRDsKKwkJaWYgKGFyZyA8IE1JTl9TQ0FOX1BFUklPRCkKKwkJCWFyZyA9IE1JTl9TQ0FOX1BFUklPRDsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgVFJJR19FWFQ6CiAJCS8qIEZvcmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgMC4gKi8KQEAgLTgyMSw5OCArODMzLDIxIEBACiAJLyogU3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cy4gKi8KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdW5zaWduZWQgaW50IGRpdjEsIGRpdjIsIHJvdW5kOwotCQlpbnQgcm91bmRfbW9kZSA9IGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0s7Ci0KLQkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKLQkJLyogQ2hlY2sgd2hldGhlciB0byB1c2UgYSBzaW5nbGUgdGltZXIuICovCi0JCXN3aXRjaCAocm91bmRfbW9kZSkgewotCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKLQkJZGVmYXVsdDoKLQkJCXJvdW5kID0gSTgyNTRfT1NDX0JBU0VfMTBNSFogLyAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFJJR19ST1VORF9ET1dOOgotCQkJcm91bmQgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFJJR19ST1VORF9VUDoKLQkJCXJvdW5kID0gSTgyNTRfT1NDX0JBU0VfMTBNSFogLSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogQmUgY2FyZWZ1bCB0byBhdm9pZCBvdmVyZmxvdyEgKi8KLQkJZGl2MiA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBJODI1NF9PU0NfQkFTRV8xME1IWjsKLQkJZGl2MiArPSAocm91bmQgKyBjbWQtPnNjYW5fYmVnaW5fYXJnICUgSTgyNTRfT1NDX0JBU0VfMTBNSFopIC8KLQkJCUk4MjU0X09TQ19CQVNFXzEwTUhaOwotCQlpZiAoZGl2MiA8PSAweDEwMDAwKSB7Ci0JCQkvKiBBIHNpbmdsZSB0aW1lciB3aWxsIHN1ZmZpY2UuICovCi0JCQlpZiAoZGl2MiA8IDIpCi0JCQkJZGl2MiA9IDI7Ci0JCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gZGl2MiAqIEk4MjU0X09TQ19CQVNFXzEwTUhaOwotCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBkaXYyIHx8Ci0JCQkgICAgY21kLT5zY2FuX2JlZ2luX2FyZyA8IEk4MjU0X09TQ19CQVNFXzEwTUhaKSB7Ci0JCQkJLyogT3ZlcmZsb3chICovCi0JCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TQ0FOX1BFUklPRDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFVzZSB0d28gdGltZXJzLiAqLwotCQkJZGl2MSA9IGRldnByaXYtPmNhY2hlZF9kaXYxOwotCQkJZGl2MiA9IGRldnByaXYtPmNhY2hlZF9kaXYyOwotCQkJcGNpMjI0X2Nhc2NhZGVfbnNfdG9fdGltZXIoSTgyNTRfT1NDX0JBU0VfMTBNSFosCi0JCQkJCQkgICAmZGl2MSwgJmRpdjIsCi0JCQkJCQkgICAmY21kLT5zY2FuX2JlZ2luX2FyZywKLQkJCQkJCSAgIHJvdW5kX21vZGUpOwotCQkJZGV2cHJpdi0+Y2FjaGVkX2RpdjEgPSBkaXYxOwotCQkJZGV2cHJpdi0+Y2FjaGVkX2RpdjIgPSBkaXYyOwotCQl9Ci0JCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKLQkJCWVycisrOwotCisJCWFyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCS8qIFVzZSB0d28gdGltZXJzLiAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzEwTUhaLAorCQkJCQkgICZkZXZwcml2LT5jYWNoZWRfZGl2MSwKKwkJCQkJICAmZGV2cHJpdi0+Y2FjaGVkX2RpdjIsCisJCQkJCSAgJmFyZywgY21kLT5mbGFncyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CiAKLQkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdC4gKi8KLQotCWlmIChjbWQtPmNoYW5saXN0ICYmIChjbWQtPmNoYW5saXN0X2xlbiA+IDApKSB7Ci0JCXVuc2lnbmVkIGludCByYW5nZTsKLQkJZW51bSB7IHJhbmdlX2VyciA9IDEsIGR1cGNoYW5fZXJyID0gMiwgfTsKLQkJdW5zaWduZWQgZXJyb3JzOwotCQl1bnNpZ25lZCBpbnQgbjsKLQkJdW5zaWduZWQgaW50IGNoOwotCi0JCS8qCi0JCSAqIENoZWNrIGFsbCBjaGFubmVscyBoYXZlIHRoZSBzYW1lIHJhbmdlIGluZGV4LiAgRG9uJ3QgY2FyZQotCQkgKiBhYm91dCBhbmFsb2d1ZSByZWZlcmVuY2UsIGFzIHdlIGNhbid0IGNvbmZpZ3VyZSBpdC4KLQkJICoKLQkJICogQ2hlY2sgdGhlIGxpc3QgaGFzIG5vIGR1cGxpY2F0ZSBjaGFubmVscy4KLQkJICovCi0JCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7Ci0JCWVycm9ycyA9IDA7Ci0JCXRtcCA9IDA7Ci0JCWZvciAobiA9IDA7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKSB7Ci0JCQljaCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7Ci0JCQlpZiAodG1wICYgKDFVIDw8IGNoKSkKLQkJCQllcnJvcnMgfD0gZHVwY2hhbl9lcnI7Ci0KLQkJCXRtcCB8PSAoMVUgPDwgY2gpOwotCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbbl0pICE9IHJhbmdlKQotCQkJCWVycm9ycyB8PSByYW5nZV9lcnI7Ci0KLQkJfQotCQlpZiAoZXJyb3JzKSB7Ci0JCQlpZiAoZXJyb3JzICYgZHVwY2hhbl9lcnIpIHsKLQkJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAotCQkJCQkiJXM6IGVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBjb250YWluIG5vIGR1cGxpY2F0ZSBjaGFubmVsc1xuIiwKLQkJCQkJX19mdW5jX18pOwotCQkJfQotCQkJaWYgKGVycm9ycyAmIHJhbmdlX2VycikgewotCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCi0JCQkJCSIlczogZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJhbmdlIGluZGV4XG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQl9Ci0JCQllcnIrKzsKLQkJfQotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBwY2kyMjRfYW9fY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDU7CkBAIC05MjAsOSArODU1LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiAnZG9fY21kJyBmdW5jdGlvbiBmb3IgQU8gc3ViZGV2aWNlLgotICovCitzdGF0aWMgdm9pZCBwY2kyMjRfYW9fc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQoreworCXN0cnVjdCBwY2kyMjRfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2UgPSBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1oyX0NUMDsKKworCS8qCisJICogVGhlIG91dHB1dCBvZiB0aW1lciBaMi0wIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2NhbiB0cmlnZ2VyCisJICogc291cmNlLgorCSAqLworCS8qIE1ha2Ugc3VyZSBaMi0wIGlzIGdhdGVkIG9uLiAgKi8KKwlvdXRiKEdBVF9DT05GSUcoMCwgR0FUX1ZDQyksIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkdBVF9TQ0UpOworCS8qIENhc2NhZGluZyB3aXRoIFoyLTIuICovCisJLyogTWFrZSBzdXJlIFoyLTIgaXMgZ2F0ZWQgb24uICAqLworCW91dGIoR0FUX0NPTkZJRygyLCBHQVRfVkNDKSwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aR0FUX1NDRSk7CisJLyogWjItMiBuZWVkcyAxMCBNSHogY2xvY2suICovCisJb3V0YihDTEtfQ09ORklHKDIsIENMS18xME1IWiksIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkNMS19TQ0UpOworCS8qIExvYWQgWjItMiBtb2RlICgyKSBhbmQgY291bnRlciAoZGl2MSkuICovCisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMiwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOworCWk4MjU0X3dyaXRlKHRpbWVyX2Jhc2UsIDAsIDIsIGRldnByaXYtPmNhY2hlZF9kaXYxKTsKKwkvKiBaMi0wIGlzIGNsb2NrZWQgZnJvbSBaMi0yJ3Mgb3V0cHV0LiAqLworCW91dGIoQ0xLX0NPTkZJRygwLCBDTEtfT1VUTk0xKSwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aQ0xLX1NDRSk7CisJLyogTG9hZCBaMi0wIG1vZGUgKDIpIGFuZCBjb3VudGVyIChkaXYyKS4gKi8KKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAwLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMCwgZGV2cHJpdi0+Y2FjaGVkX2RpdjIpOworfQorCiBzdGF0aWMgaW50IHBjaTIyNF9hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IHBjaTIyNF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwpAQCAtOTc4LDEwNiArOTM3LDI2IEBACiAJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKIAkgICAgIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NPTik7CiAKLQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyLCByb3VuZDsKLQkJdW5zaWduZWQgaW50IG5zID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKLQkJaW50IHJvdW5kX21vZGUgPSBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLOwotCi0JCS8qIENoZWNrIHdoZXRoZXIgdG8gdXNlIGEgc2luZ2xlIHRpbWVyLiAqLwotCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKLQkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6Ci0JCWRlZmF1bHQ6Ci0JCQlyb3VuZCA9IEk4MjU0X09TQ19CQVNFXzEwTUhaIC8gMjsKLQkJCWJyZWFrOwotCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKLQkJCXJvdW5kID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFRSSUdfUk9VTkRfVVA6Ci0JCQlyb3VuZCA9IEk4MjU0X09TQ19CQVNFXzEwTUhaIC0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIEJlIGNhcmVmdWwgdG8gYXZvaWQgb3ZlcmZsb3chICovCi0JCWRpdjIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gSTgyNTRfT1NDX0JBU0VfMTBNSFo7Ci0JCWRpdjIgKz0gKHJvdW5kICsgY21kLT5zY2FuX2JlZ2luX2FyZyAlIEk4MjU0X09TQ19CQVNFXzEwTUhaKSAvCi0JCQlJODI1NF9PU0NfQkFTRV8xME1IWjsKLQkJaWYgKGRpdjIgPD0gMHgxMDAwMCkgewotCQkJLyogQSBzaW5nbGUgdGltZXIgd2lsbCBzdWZmaWNlLiAqLwotCQkJaWYgKGRpdjIgPCAyKQotCQkJCWRpdjIgPSAyOwotCQkJZGl2MiAmPSAweGZmZmY7Ci0JCQlkaXYxID0gMTsJLyogRmxhZyB0aGF0IHNpbmdsZSB0aW1lciB0byBiZSB1c2VkLiAqLwotCQl9IGVsc2UgewotCQkJLyogVXNlIHR3byB0aW1lcnMuICovCi0JCQlkaXYxID0gZGV2cHJpdi0+Y2FjaGVkX2RpdjE7Ci0JCQlkaXYyID0gZGV2cHJpdi0+Y2FjaGVkX2RpdjI7Ci0JCQlwY2kyMjRfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV8xME1IWiwKLQkJCQkJCSAgICZkaXYxLCAmZGl2MiwKLQkJCQkJCSAgICZucywgcm91bmRfbW9kZSk7Ci0JCX0KLQotCQkvKgotCQkgKiBUaGUgb3V0cHV0IG9mIHRpbWVyIFoyLTAgd2lsbCBiZSB1c2VkIGFzIHRoZSBzY2FuIHRyaWdnZXIKLQkJICogc291cmNlLgotCQkgKi8KLQkJLyogTWFrZSBzdXJlIFoyLTAgaXMgZ2F0ZWQgb24uICAqLwotCQlvdXRiKEdBVF9DT05GSUcoMCwgR0FUX1ZDQyksCi0JCSAgICAgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aR0FUX1NDRSk7Ci0JCWlmIChkaXYxID09IDEpIHsKLQkJCS8qIE5vdCBjYXNjYWRpbmcuICBaMi0wIG5lZWRzIDEwIE1IeiBjbG9jay4gKi8KLQkJCW91dGIoQ0xLX0NPTkZJRygwLCBDTEtfMTBNSFopLAotCQkJICAgICBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1pDTEtfU0NFKTsKLQkJfSBlbHNlIHsKLQkJCS8qIENhc2NhZGluZyB3aXRoIFoyLTIuICovCi0JCQkvKiBNYWtlIHN1cmUgWjItMiBpcyBnYXRlZCBvbi4gICovCi0JCQlvdXRiKEdBVF9DT05GSUcoMiwgR0FUX1ZDQyksCi0JCQkgICAgIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkdBVF9TQ0UpOwotCQkJLyogWjItMiBuZWVkcyAxMCBNSHogY2xvY2suICovCi0JCQlvdXRiKENMS19DT05GSUcoMiwgQ0xLXzEwTUhaKSwKLQkJCSAgICAgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aQ0xLX1NDRSk7Ci0JCQkvKiBMb2FkIFoyLTIgbW9kZSAoMikgYW5kIGNvdW50ZXIgKGRpdjEpLiAqLwotCQkJaTgyNTRfbG9hZChkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1oyX0NUMCwgMCwKLQkJCQkgICAyLCBkaXYxLCAyKTsKLQkJCS8qIFoyLTAgaXMgY2xvY2tlZCBmcm9tIFoyLTIncyBvdXRwdXQuICovCi0JCQlvdXRiKENMS19DT05GSUcoMCwgQ0xLX09VVE5NMSksCi0JCQkgICAgIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkNMS19TQ0UpOwotCQl9Ci0JCS8qIExvYWQgWjItMCBtb2RlICgyKSBhbmQgY291bnRlciAoZGl2MikuICovCi0JCWk4MjU0X2xvYWQoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aMl9DVDAsIDAsIDAsIGRpdjIsIDIpOwotCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQlwY2kyMjRfYW9fc3RhcnRfcGFjZXIoZGV2LCBzKTsKIAogCS8qCiAJICogU29ydCBvdXQgZW5kIG9mIGFjcXVpc2l0aW9uLgogCSAqLwotCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewotCWNhc2UgVFJJR19DT1VOVDoKLQkJLyogRml4ZWQgbnVtYmVyIG9mIHNjYW5zLiAgKi8KLQkJZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzID0gMDsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5hb19zdG9wX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogQ29udGludW91cyBzY2Fucy4gKi8KLQkJZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzID0gMTsKKwllbHNlCS8qIFRSSUdfRVhUIHwgVFJJR19OT05FICovCiAJCWRldnByaXYtPmFvX3N0b3BfY291bnQgPSAwOwotCQlicmVhazsKLQl9CiAKLQkvKgotCSAqIFNvcnQgb3V0IHN0YXJ0IG9mIGFjcXVpc2l0aW9uLgotCSAqLwotCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKLQljYXNlIFRSSUdfSU5UOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKLQkJcy0+YXN5bmMtPmludHRyaWcgPSAmcGNpMjI0X2FvX2ludHRyaWdfc3RhcnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgVFJJR19FWFQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNpMjI0X2FvX2ludHRyaWdfc3RhcnQ7CisJfSBlbHNlIHsJLyogVFJJR19FWFQgKi8KIAkJLyogRW5hYmxlIGV4dGVybmFsIGludGVycnVwdCB0cmlnZ2VyIHRvIHN0YXJ0IGFjcXVpc2l0aW9uLiAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKIAkJZGV2cHJpdi0+aW50c2NlIHw9IFBDSTIyNF9JTlRSX0VYVDsKIAkJb3V0YihkZXZwcml2LT5pbnRzY2UsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfSU5UX1NDRSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTAxLDcgKzk4MCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHBjaTIyNF9ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJc3RydWN0IHBjaTIyNF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIHNob3J0ICphcnJheSA9IGRhdGE7CiAJdW5zaWduZWQgaW50IGxlbmd0aCA9IG51bV9ieXRlcyAvIHNpemVvZigqYXJyYXkpOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CkBAIC0xMTExLDcgKzk5MCw3IEBACiAJLyogVGhlIGhhcmR3YXJlIGV4cGVjdHMgMTYtYml0IG51bWJlcnMuICovCiAJc2hpZnQgPSAxNiAtIHRoaXNib2FyZC0+YW9fYml0czsKIAkvKiBDaGFubmVscyB3aWxsIGJlIGFsbCBiaXBvbGFyIG9yIGFsbCB1bmlwb2xhci4gKi8KLQlpZiAoKGRldnByaXYtPmh3cmFuZ2VbQ1JfUkFOR0UoYXN5bmMtPmNtZC5jaGFubGlzdFswXSldICYKKwlpZiAoKGRldnByaXYtPmh3cmFuZ2VbQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSldICYKIAkgICAgIFBDSTIyNF9EQUNDT05fUE9MQVJfTUFTSykgPT0gUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkpIHsKIAkJLyogVW5pcG9sYXIgKi8KIAkJb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYwppbmRleCA5OWU2MDgzLi4zODk1YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jCkBAIC01MTksMTQgKzUxOSw2IEBACiAJCQkJCSAqIGxldmVsIHRocmVzaG9sZCAoUENJMjMwKy8yNjArKS4gKi8KIAl1bnNpZ25lZCBzaG9ydCBhZGNnOwkvKiBBRENHIHJlZ2lzdGVyIHZhbHVlLiAqLwogCXVuc2lnbmVkIGNoYXIgaW50X2VuOwkvKiBJbnRlcnJ1cHQgZW5hYmxlcyBiaXRzLiAqLwotCXVuc2lnbmVkIGNoYXIgYWlfY29udGludW91czsJLyogRmxhZyBzZXQgd2hlbiBjbWQtPnN0b3Bfc3JjID09Ci0JCQkJCSAqIFRSSUdfTk9ORSAtIHVzZXIgY2hvb3NlcyB0byBzdG9wCi0JCQkJCSAqIGNvbnRpbnVvdXMgY29udmVyc2lvbiBieQotCQkJCQkgKiBjYW5jZWxhdGlvbi4gKi8KLQl1bnNpZ25lZCBjaGFyIGFvX2NvbnRpbnVvdXM7CS8qIEZsYWcgc2V0IHdoZW4gY21kLT5zdG9wX3NyYyA9PQotCQkJCQkgKiBUUklHX05PTkUgLSB1c2VyIGNob29zZXMgdG8gc3RvcAotCQkJCQkgKiBjb250aW51b3VzIGNvbnZlcnNpb24gYnkKLQkJCQkJICogY2FuY2VsYXRpb24uICovCiAJdW5zaWduZWQgY2hhciBhaV9iaXBvbGFyOwkvKiBTZXQgaWYgYmlwb2xhciBpbnB1dCByYW5nZSBzbyB3ZQogCQkJCQkgKiBrbm93IHRvIG1hbmdsZSBpdC4gKi8KIAl1bnNpZ25lZCBjaGFyIGFvX2JpcG9sYXI7CS8qIFNldCBpZiBiaXBvbGFyIG91dHB1dCByYW5nZSBzbyB3ZQpAQCAtOTUzLDYgKzk0NSwzOCBAQAogCXJldHVybiBpOwogfQogCitzdGF0aWMgaW50IHBjaTIzMF9hb19jaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgcHJldl9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwl1bnNpZ25lZCBpbnQgcmFuZ2UwID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCWlmIChjaGFuIDwgcHJldl9jaGFuKSB7CisJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCSIlczogY2hhbm5lbCBudW1iZXJzIG11c3QgaW5jcmVhc2VcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmFuZ2UgIT0gcmFuZ2UwKSB7CisJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCSIlczogY2hhbm5lbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcHJldl9jaGFuID0gY2hhbjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwY2kyMzBfYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKQEAgLTEwNjUsNDggKzEwODksOSBAQAogCWlmIChlcnIpCiAJCXJldHVybiA0OwogCi0JLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzLiAqLwotCi0JaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKSB7Ci0JCWVudW0gewotCQkJc2VxX2VyciA9ICgxIDw8IDApLAotCQkJcmFuZ2VfZXJyID0gKDEgPDwgMSkKLQkJfTsKLQkJdW5zaWduZWQgaW50IGVycm9yczsKLQkJdW5zaWduZWQgaW50IG47Ci0JCXVuc2lnbmVkIGludCBjaGFuLCBwcmV2X2NoYW47Ci0JCXVuc2lnbmVkIGludCByYW5nZSwgZmlyc3RfcmFuZ2U7Ci0KLQkJcHJldl9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKLQkJZmlyc3RfcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKLQkJZXJyb3JzID0gMDsKLQkJZm9yIChuID0gMTsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKLQkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOwotCQkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKTsKLQkJCS8qIENoYW5uZWwgbnVtYmVycyBtdXN0IHN0cmljdGx5IGluY3JlYXNlLiAqLwotCQkJaWYgKGNoYW4gPCBwcmV2X2NoYW4pCi0JCQkJZXJyb3JzIHw9IHNlcV9lcnI7Ci0KLQkJCS8qIFJhbmdlcyBtdXN0IGJlIHRoZSBzYW1lLiAqLwotCQkJaWYgKHJhbmdlICE9IGZpcnN0X3JhbmdlKQotCQkJCWVycm9ycyB8PSByYW5nZV9lcnI7Ci0KLQkJCXByZXZfY2hhbiA9IGNoYW47Ci0JCX0KLQkJaWYgKGVycm9ycyAhPSAwKSB7Ci0JCQllcnIrKzsKLQkJCWlmICgoZXJyb3JzICYgc2VxX2VycikgIT0gMCkgewotCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCi0JCQkJCSIlczogY2hhbm5lbCBudW1iZXJzIG11c3QgaW5jcmVhc2VcbiIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCX0KLQkJCWlmICgoZXJyb3JzICYgcmFuZ2VfZXJyKSAhPSAwKSB7Ci0JCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKLQkJCQkJIiVzOiBjaGFubmVscyBtdXN0IGhhdmUgdGhlIHNhbWUgcmFuZ2VcbiIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCX0KLQkJfQotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBwY2kyMzBfYW9fY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDU7CkBAIC0xMTc1LDExICsxMTYwLDExIEBACiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CiAKLQlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMgJiYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkpCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5hb19zY2FuX2NvdW50ID09IDApCiAJCXJldHVybjsKIAlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewogCQkvKiBSZWFkIHNhbXBsZSBmcm9tIENvbWVkaSdzIGNpcmN1bGFyIGJ1ZmZlci4gKi8KLQkJcmV0ID0gY29tZWRpX2J1Zl9nZXQocy0+YXN5bmMsICZkYXRhKTsKKwkJcmV0ID0gY29tZWRpX2J1Zl9nZXQocywgJmRhdGEpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOwogCQkJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKQEAgLTExOTAsNyArMTE3NSw3IEBACiAJCXBjaTIzMF9hb193cml0ZV9ub2ZpZm8oZGV2LCBkYXRhLCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pKTsKIAl9CiAJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOwotCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJZGV2cHJpdi0+YW9fc2Nhbl9jb3VudC0tOwogCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9PSAwKSB7CiAJCQkvKiBFbmQgb2YgYWNxdWlzaXRpb24uICovCkBAIC0xMjEyLDE2ICsxMTk3LDE0IEBACiAJdW5zaWduZWQgaW50IHJvb207CiAJdW5zaWduZWQgc2hvcnQgZGFjc3RhdDsKIAl1bnNpZ25lZCBpbnQgaSwgbjsKLQl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NjYW47CiAJdW5zaWduZWQgaW50IGV2ZW50cyA9IDA7CiAJaW50IHJ1bm5pbmc7CiAKIAkvKiBHZXQgREFDIEZJRk8gc3RhdHVzLiAqLwogCWRhY3N0YXQgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKIAkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHNjYW5zIGF2YWlsYWJsZSBpbiBidWZmZXIuICovCi0JYnl0ZXNfcGVyX3NjYW4gPSBjbWQtPmNoYW5saXN0X2xlbiAqIHNpemVvZihzaG9ydCk7Ci0JbnVtX3NjYW5zID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGFzeW5jKSAvIGJ5dGVzX3Blcl9zY2FuOwotCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCW51bV9zY2FucyA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzKSAvIGNmY19ieXRlc19wZXJfc2NhbihzKTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCS8qIEZpeGVkIG51bWJlciBvZiBzY2Fucy4gKi8KIAkJaWYgKG51bV9zY2FucyA+IGRldnByaXYtPmFvX3NjYW5fY291bnQpCiAJCQludW1fc2NhbnMgPSBkZXZwcml2LT5hb19zY2FuX2NvdW50OwpAQCAtMTI2NSwxMyArMTI0OCwxMyBAQAogCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKIAkJCQl1bnNpZ25lZCBzaG9ydCBkYXR1bTsKIAotCQkJCWNvbWVkaV9idWZfZ2V0KGFzeW5jLCAmZGF0dW0pOworCQkJCWNvbWVkaV9idWZfZ2V0KHMsICZkYXR1bSk7CiAJCQkJcGNpMjMwX2FvX3dyaXRlX2ZpZm8oZGV2LCBkYXR1bSwKIAkJCQkJCSAgICAgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSk7CiAJCQl9CiAJCX0KIAkJZXZlbnRzIHw9IENPTUVESV9DQl9FT1MgfCBDT01FRElfQ0JfQkxPQ0s7Ci0JCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCQlkZXZwcml2LT5hb19zY2FuX2NvdW50IC09IG51bV9zY2FuczsKIAkJCWlmIChkZXZwcml2LT5hb19zY2FuX2NvdW50ID09IDApIHsKIAkJCQkvKiBBbGwgZGF0YSBmb3IgdGhlIGNvbW1hbmQgaGFzIGJlZW4gd3JpdHRlbgpAQCAtMTM0OSw3ICsxMzMyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJc2V0X2JpdChBT19DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKTsKLQlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMgJiYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkgewogCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KIAkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlwY2kyMzBfYW9fc3RvcChkZXYsIHMpOwpAQCAtMTQzNCw3ICsxNDE3LDkgQEAKIAkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCQkgICB1bnNpZ25lZCBpbnQgdHJpZ19udW0pCiB7Ci0JaWYgKHRyaWdfbnVtICE9IDApCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJaWYgKHRyaWdfbnVtICE9IGNtZC0+c3RhcnRfc3JjKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKQEAgLTE0NjAsMTQgKzE0NDUsMTAgQEAKIAl9CiAKIAkvKiBHZXQgbnVtYmVyIG9mIHNjYW5zIHJlcXVpcmVkLiAqLwotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5hb19zY2FuX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKLQkJZGV2cHJpdi0+YW9fY29udGludW91cyA9IDA7Ci0JfSBlbHNlIHsKLQkJLyogVFJJR19OT05FLCB1c2VyIGNhbGxzIGNhbmNlbC4gKi8KKwllbHNlCS8qIFRSSUdfTk9ORSwgdXNlciBjYWxscyBjYW5jZWwgKi8KIAkJZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9IDA7Ci0JCWRldnByaXYtPmFvX2NvbnRpbnVvdXMgPSAxOwotCX0KIAogCS8qIFNldCByYW5nZSAtIHNlZSBhbmFsb2d1ZSBvdXRwdXQgcmFuZ2UgdGFibGU7IDAgPT4gdW5pcG9sYXIgMTBWLAogCSAqIDEgPT4gYmlwb2xhciArLy0xMFYgcmFuZ2Ugc2NhbGUgKi8KQEAgLTE1NTIsNiArMTUzMywxMDkgQEAKIAlyZXR1cm4gIWVycjsKIH0KIAorc3RhdGljIGludCBwY2kyMzBfYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJc3RydWN0IHBjaTIzMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXVuc2lnbmVkIGludCBtYXhfZGlmZl9jaGFuID0gKHMtPm5fY2hhbiAvIDIpIC0gMTsKKwl1bnNpZ25lZCBpbnQgcHJldl9jaGFuID0gMDsKKwl1bnNpZ25lZCBpbnQgcHJldl9yYW5nZSA9IDA7CisJdW5zaWduZWQgaW50IHByZXZfYXJlZiA9IDA7CisJdW5zaWduZWQgaW50IHByZXZfcG9sYXJpdHkgPSAwOworCXVuc2lnbmVkIGludCBzdWJzZXFfbGVuID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuc3BlYyA9IGNtZC0+Y2hhbmxpc3RbaV07CisJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjaGFuc3BlYyk7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNoYW5zcGVjKTsKKwkJdW5zaWduZWQgaW50IGFyZWYgPSBDUl9BUkVGKGNoYW5zcGVjKTsKKwkJdW5zaWduZWQgaW50IHBvbGFyaXR5ID0gcGNpMjMwX2FpX2JpcG9sYXJbcmFuZ2VdOworCisJCWlmIChhcmVmID09IEFSRUZfRElGRiAmJiBjaGFuID49IG1heF9kaWZmX2NoYW4pIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJIiVzOiBkaWZmZXJlbnRpYWwgY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIDAgdG8gJXVcbiIsCisJCQkJX19mdW5jX18sIG1heF9kaWZmX2NoYW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoaSA+IDApIHsKKwkJCS8qCisJCQkgKiBDaGFubmVsIG51bWJlcnMgbXVzdCBzdHJpY3RseSBpbmNyZWFzZSBvcgorCQkJICogc3Vic2VxdWVuY2UgbXVzdCByZXBlYXQgZXhhY3RseS4KKwkJCSAqLworCQkJaWYgKGNoYW4gPD0gcHJldl9jaGFuICYmIHN1YnNlcV9sZW4gPT0gMCkKKwkJCQlzdWJzZXFfbGVuID0gaTsKKworCQkJaWYgKHN1YnNlcV9sZW4gPiAwICYmCisJCQkgICAgY21kLT5jaGFubGlzdFtpICUgc3Vic2VxX2xlbl0gIT0gY2hhbnNwZWMpIHsKKwkJCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkJCSIlczogY2hhbm5lbCBudW1iZXJzIG11c3QgaW5jcmVhc2Ugb3Igc2VxdWVuY2UgbXVzdCByZXBlYXQgZXhhY3RseVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmIChhcmVmICE9IHByZXZfYXJlZikgeworCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJCSIlczogY2hhbm5lbCBzZXF1ZW5jZSBhbmFsb2d1ZSByZWZlcmVuY2VzIG11c3QgYmUgYWxsIHRoZSBzYW1lIChzaW5nbGUtZW5kZWQgb3IgZGlmZmVyZW50aWFsKVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAocG9sYXJpdHkgIT0gcHJldl9wb2xhcml0eSkgeworCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJCSIlczogY2hhbm5lbCBzZXF1ZW5jZSByYW5nZXMgbXVzdCBiZSBhbGwgYmlwb2xhciBvciBhbGwgdW5pcG9sYXJcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaWYgKGFyZWYgIT0gQVJFRl9ESUZGICYmIHJhbmdlICE9IHByZXZfcmFuZ2UgJiYKKwkJCSAgICAoKGNoYW4gXiBwcmV2X2NoYW4pICYgfjEpID09IDApIHsKKwkJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCQkiJXM6IHNpbmdsZS1lbmRlZCBjaGFubmVsIHBhaXJzIG11c3QgaGF2ZSB0aGUgc2FtZSByYW5nZVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJCXByZXZfY2hhbiA9IGNoYW47CisJCXByZXZfcmFuZ2UgPSByYW5nZTsKKwkJcHJldl9hcmVmID0gYXJlZjsKKwkJcHJldl9wb2xhcml0eSA9IHBvbGFyaXR5OworCX0KKworCWlmIChzdWJzZXFfbGVuID09IDApCisJCXN1YnNlcV9sZW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKKworCWlmICgoY21kLT5jaGFubGlzdF9sZW4gJSBzdWJzZXFfbGVuKSAhPSAwKSB7CisJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkiJXM6IHNlcXVlbmNlIG11c3QgcmVwZWF0IGV4YWN0bHlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBCdWdneSBQQ0kyMzArIG9yIFBDSTI2MCsgcmVxdWlyZXMgY2hhbm5lbCAwIHRvIGJlIChmaXJzdCkgaW4gdGhlCisJICogc2VxdWVuY2UgaWYgdGhlIHNlcXVlbmNlIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgY2hhbm5lbC4gSGFyZHdhcmUKKwkgKiB2ZXJzaW9ucyAxIGFuZCAyIGhhdmUgdGhlIGJ1Zy4gVGhlcmUgaXMgbm8gaGFyZHdhcmUgdmVyc2lvbiAzLgorCSAqCisJICogQWN0dWFsbHksIHRoZXJlIGFyZSB0d28gZmlybXdhcmVzIHRoYXQgcmVwb3J0IHRoZW1zZWx2ZXMgYXMKKwkgKiBoYXJkd2FyZSB2ZXJzaW9uIDEgKHRoZSBib2FyZHMgaGF2ZSBkaWZmZXJlbnQgQURDIGNoaXBzIHdpdGgKKwkgKiBzbGlnaHRseSBkaWZmZXJlbnQgdGltaW5nIHJlcXVpcmVtZW50cywgd2hpY2ggd2FzIHN1cHBvc2VkIHRvCisJICogYmUgaW52aXNpYmxlIHRvIHNvZnR3YXJlKS4gVGhlIGZpcnN0IG9uZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZQorCSAqIHRoZSBidWcsIGJ1dCB0aGUgc2Vjb25kIG9uZSBkb2VzLCBhbmQgd2UgY2FuJ3QgdGVsbCB0aGVtIGFwYXJ0IQorCSAqLworCWlmIChkZXZwcml2LT5od3ZlciA+IDAgJiYgZGV2cHJpdi0+aHd2ZXIgPCA0KSB7CisJCWlmIChzdWJzZXFfbGVuID4gMSAmJiBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pICE9IDApIHsKKwkJCWRldl9pbmZvKGRldi0+Y2xhc3NfZGV2LAorCQkJCSAiYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiBCdWdneSBQQ0kyMzArLzI2MCsgaC93IHZlcnNpb24gJXUgcmVxdWlyZXMgZmlyc3QgY2hhbm5lbCBvZiBtdWx0aS1jaGFubmVsIHNlcXVlbmNlIHRvIGJlIDAgKGNvcnJlY3RlZCBpbiBoL3cgdmVyc2lvbiA0KVxuIiwKKwkJCQkgZGV2cHJpdi0+aHd2ZXIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwY2kyMzBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKQEAgLTE3NDAsMTM2ICsxODI0LDkgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cy4gKi8KLQotCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkgewotCQllbnVtIHsKLQkJCXNlcV9lcnIgPSAxIDw8IDAsCi0JCQlyYW5nZXBhaXJfZXJyID0gMSA8PCAxLAotCQkJcG9sYXJpdHlfZXJyID0gMSA8PCAyLAotCQkJYXJlZl9lcnIgPSAxIDw8IDMsCi0JCQlkaWZmY2hhbl9lcnIgPSAxIDw8IDQsCi0JCQlidWdneV9jaGFuMF9lcnIgPSAxIDw8IDUKLQkJfTsKLQkJdW5zaWduZWQgaW50IGVycm9yczsKLQkJdW5zaWduZWQgaW50IGNoYW4sIHByZXZfY2hhbjsKLQkJdW5zaWduZWQgaW50IHJhbmdlLCBwcmV2X3JhbmdlOwotCQl1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHByZXZfcG9sYXJpdHk7Ci0JCXVuc2lnbmVkIGludCBhcmVmLCBwcmV2X2FyZWY7Ci0JCXVuc2lnbmVkIGludCBzdWJzZXFfbGVuOwotCQl1bnNpZ25lZCBpbnQgbjsKLQotCQlzdWJzZXFfbGVuID0gMDsKLQkJZXJyb3JzID0gMDsKLQkJcHJldl9jaGFuID0gcHJldl9hcmVmID0gcHJldl9yYW5nZSA9IHByZXZfcG9sYXJpdHkgPSAwOwotCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykgewotCQkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7Ci0JCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbbl0pOwotCQkJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFtuXSk7Ci0JCQlwb2xhcml0eSA9IHBjaTIzMF9haV9iaXBvbGFyW3JhbmdlXTsKLQkJCS8qIE9ubHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUgaWYKLQkJCSAqIGRpZmZlcmVudGlhbC4gIChUaGVzZSBhcmUgcmVtYXBwZWQgaW4gc29mdHdhcmUuICBJbgotCQkJICogaGFyZHdhcmUsIG9ubHkgdGhlIGV2ZW4gY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS4pICovCi0JCQlpZiAoKGFyZWYgPT0gQVJFRl9ESUZGKQotCQkJICAgICYmIChjaGFuID49IChzLT5uX2NoYW4gLyAyKSkpIHsKLQkJCQllcnJvcnMgfD0gZGlmZmNoYW5fZXJyOwotCQkJfQotCQkJaWYgKG4gPiAwKSB7Ci0JCQkJLyogQ2hhbm5lbCBudW1iZXJzIG11c3Qgc3RyaWN0bHkgaW5jcmVhc2Ugb3IKLQkJCQkgKiBzdWJzZXF1ZW5jZSBtdXN0IHJlcGVhdCBleGFjdGx5LiAqLwotCQkJCWlmICgoY2hhbiA8PSBwcmV2X2NoYW4pCi0JCQkJICAgICYmIChzdWJzZXFfbGVuID09IDApKSB7Ci0JCQkJCXN1YnNlcV9sZW4gPSBuOwotCQkJCX0KLQkJCQlpZiAoKHN1YnNlcV9sZW4gPiAwKQotCQkJCSAgICAmJiAoY21kLT5jaGFubGlzdFtuXSAhPQotCQkJCQljbWQtPmNoYW5saXN0W24gJSBzdWJzZXFfbGVuXSkpIHsKLQkJCQkJZXJyb3JzIHw9IHNlcV9lcnI7Ci0JCQkJfQotCQkJCS8qIENoYW5uZWxzIG11c3QgaGF2ZSBzYW1lIEFSRUYuICovCi0JCQkJaWYgKGFyZWYgIT0gcHJldl9hcmVmKQotCQkJCQllcnJvcnMgfD0gYXJlZl9lcnI7Ci0KLQkJCQkvKiBDaGFubmVsIHJhbmdlcyBtdXN0IGhhdmUgc2FtZSBwb2xhcml0eS4gKi8KLQkJCQlpZiAocG9sYXJpdHkgIT0gcHJldl9wb2xhcml0eSkKLQkJCQkJZXJyb3JzIHw9IHBvbGFyaXR5X2VycjsKLQotCQkJCS8qIFNpbmdsZS1lbmRlZCBjaGFubmVsIHBhaXJzIG11c3QgaGF2ZSBzYW1lCi0JCQkJICogcmFuZ2UuICAqLwotCQkJCWlmICgoYXJlZiAhPSBBUkVGX0RJRkYpCi0JCQkJICAgICYmICgoKGNoYW4gXiBwcmV2X2NoYW4pICYgfjEpID09IDApCi0JCQkJICAgICYmIChyYW5nZSAhPSBwcmV2X3JhbmdlKSkgewotCQkJCQllcnJvcnMgfD0gcmFuZ2VwYWlyX2VycjsKLQkJCQl9Ci0JCQl9Ci0JCQlwcmV2X2NoYW4gPSBjaGFuOwotCQkJcHJldl9yYW5nZSA9IHJhbmdlOwotCQkJcHJldl9hcmVmID0gYXJlZjsKLQkJCXByZXZfcG9sYXJpdHkgPSBwb2xhcml0eTsKLQkJfQotCQlpZiAoc3Vic2VxX2xlbiA9PSAwKSB7Ci0JCQkvKiBTdWJzZXF1ZW5jZSBpcyB3aG9sZSBzZXF1ZW5jZS4gKi8KLQkJCXN1YnNlcV9sZW4gPSBuOwotCQl9Ci0JCS8qIElmIGNoYW5uZWwgbGlzdCBpcyBhIHJlcGVhdGluZyBzdWJzZXF1ZW5jZSwgbmVlZCBhIHdob2xlCi0JCSAqIG51bWJlciBvZiByZXBlYXRzLiAqLwotCQlpZiAoKG4gJSBzdWJzZXFfbGVuKSAhPSAwKQotCQkJZXJyb3JzIHw9IHNlcV9lcnI7Ci0KLQkJaWYgKChkZXZwcml2LT5od3ZlciA+IDApICYmIChkZXZwcml2LT5od3ZlciA8IDQpKSB7Ci0JCQkvKgotCQkJICogQnVnZ3kgUENJMjMwKyBvciBQQ0kyNjArIHJlcXVpcmVzIGNoYW5uZWwgMCB0byBiZQotCQkJICogKGZpcnN0KSBpbiB0aGUgc2VxdWVuY2UgaWYgdGhlIHNlcXVlbmNlIGNvbnRhaW5zCi0JCQkgKiBtb3JlIHRoYW4gb25lIGNoYW5uZWwuICBIYXJkd2FyZSB2ZXJzaW9ucyAxIGFuZCAyCi0JCQkgKiBoYXZlIHRoZSBidWcuICBUaGVyZSBpcyBubyBoYXJkd2FyZSB2ZXJzaW9uIDMuCi0JCQkgKgotCQkJICogQWN0dWFsbHksIHRoZXJlIGFyZSB0d28gZmlybXdhcmVzIHRoYXQgcmVwb3J0Ci0JCQkgKiB0aGVtc2VsdmVzIGFzIGhhcmR3YXJlIHZlcnNpb24gMSAodGhlIGJvYXJkcwotCQkJICogaGF2ZSBkaWZmZXJlbnQgQURDIGNoaXBzIHdpdGggc2xpZ2h0bHkgZGlmZmVyZW50Ci0JCQkgKiB0aW1pbmcgcmVxdWlyZW1lbnRzLCB3aGljaCB3YXMgc3VwcG9zZWQgdG8gYmUKLQkJCSAqIGludmlzaWJsZSB0byBzb2Z0d2FyZSkuICBUaGUgZmlyc3Qgb25lIGRvZXNuJ3QKLQkJCSAqIHNlZW0gdG8gaGF2ZSB0aGUgYnVnLCBidXQgdGhlIHNlY29uZCBvbmUKLQkJCSAqIGRvZXMsIGFuZCB3ZSBjYW4ndCB0ZWxsIHRoZW0gYXBhcnQhCi0JCQkgKi8KLQkJCWlmICgoc3Vic2VxX2xlbiA+IDEpCi0JCQkgICAgJiYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgIT0gMCkpIHsKLQkJCQllcnJvcnMgfD0gYnVnZ3lfY2hhbjBfZXJyOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvcnMgIT0gMCkgewotCQkJZXJyKys7Ci0JCQlpZiAoKGVycm9ycyAmIHNlcV9lcnIpICE9IDApIHsKLQkJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAotCQkJCQkiJXM6IGNoYW5uZWwgbnVtYmVycyBtdXN0IGluY3JlYXNlIG9yIHNlcXVlbmNlIG11c3QgcmVwZWF0IGV4YWN0bHlcbiIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCX0KLQkJCWlmICgoZXJyb3JzICYgcmFuZ2VwYWlyX2VycikgIT0gMCkgewotCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCi0JCQkJCSIlczogc2luZ2xlLWVuZGVkIGNoYW5uZWwgcGFpcnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJhbmdlXG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQl9Ci0JCQlpZiAoKGVycm9ycyAmIHBvbGFyaXR5X2VycikgIT0gMCkgewotCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCi0JCQkJCSIlczogY2hhbm5lbCBzZXF1ZW5jZSByYW5nZXMgbXVzdCBiZSBhbGwgYmlwb2xhciBvciBhbGwgdW5pcG9sYXJcbiIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCX0KLQkJCWlmICgoZXJyb3JzICYgYXJlZl9lcnIpICE9IDApIHsKLQkJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAotCQkJCQkiJXM6IGNoYW5uZWwgc2VxdWVuY2UgYW5hbG9ndWUgcmVmZXJlbmNlcyBtdXN0IGJlIGFsbCB0aGUgc2FtZSAoc2luZ2xlLWVuZGVkIG9yIGRpZmZlcmVudGlhbClcbiIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCX0KLQkJCWlmICgoZXJyb3JzICYgZGlmZmNoYW5fZXJyKSAhPSAwKSB7Ci0JCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKLQkJCQkJIiVzOiBkaWZmZXJlbnRpYWwgY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIDAgdG8gJXVcbiIsCi0JCQkJCV9fZnVuY19fLCAocy0+bl9jaGFuIC8gMikgLSAxKTsKLQkJCX0KLQkJCWlmICgoZXJyb3JzICYgYnVnZ3lfY2hhbjBfZXJyKSAhPSAwKSB7Ci0JCQkJZGV2X2luZm8oZGV2LT5jbGFzc19kZXYsCi0JCQkJCSAiYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiBCdWdneSBQQ0kyMzArLzI2MCsgaC93IHZlcnNpb24gJXUgcmVxdWlyZXMgZmlyc3QgY2hhbm5lbCBvZiBtdWx0aS1jaGFubmVsIHNlcXVlbmNlIHRvIGJlIDAgKGNvcnJlY3RlZCBpbiBoL3cgdmVyc2lvbiA0KVxuIiwKLQkJCQkJIGRldnByaXYtPmh3dmVyKTsKLQkJCX0KLQkJfQotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBwY2kyMzBfYWlfY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDU7CkBAIC0xODkxLDkgKzE4NDgsOSBAQAogCQkvKiBXYWtlIGF0IGVuZCBvZiBzY2FuLiAqLwogCQl3YWtlID0gc2NhbmxlbiAtIGRldnByaXYtPmFpX3NjYW5fcG9zOwogCX0gZWxzZSB7Ci0JCWlmIChkZXZwcml2LT5haV9jb250aW51b3VzCi0JCSAgICB8fCAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA+PSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkKLQkJICAgIHx8IChzY2FubGVuID49IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMKSkgeworCQlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UIHx8CisJCSAgICBkZXZwcml2LT5haV9zY2FuX2NvdW50ID49IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMIHx8CisJCSAgICBzY2FubGVuID49IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMKSB7CiAJCQl3YWtlID0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEw7CiAJCX0gZWxzZSB7CiAJCQl3YWtlID0gKGRldnByaXYtPmFpX3NjYW5fY291bnQgKiBzY2FubGVuKQpAQCAtMjA0NCw3ICsyMDAxLDcgQEAKIAlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CiAKIAlzZXRfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOwotCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cyAmJiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSB7CiAJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLwogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCXBjaTIzMF9haV9zdG9wKGRldiwgcyk7CkBAIC0yMTc3LDcgKzIxMzQsOSBAQAogCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJCSAgIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKLQlpZiAodHJpZ19udW0gIT0gMCkKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwpAQCAtMjE5MCwxNiArMjE0OSwxNyBAQAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgcGNpMjMwX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IHNjYW5sZW4gPSBjbWQtPnNjYW5fZW5kX2FyZzsKIAl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzX2ZpZm87CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IHRvZG87CiAJdW5zaWduZWQgaW50IGZpZm9hbW91bnQ7Ci0Jc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKLQl1bnNpZ25lZCBpbnQgc2NhbmxlbiA9IGFzeW5jLT5jbWQuc2Nhbl9lbmRfYXJnOwogCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBzYW1wbGVzIHRvIHJlYWQuICovCi0JaWYgKGRldnByaXYtPmFpX2NvbnRpbnVvdXMpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKSB7CiAJCXRvZG8gPSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTDsKIAl9IGVsc2UgaWYgKGRldnByaXYtPmFpX3NjYW5fY291bnQgPT0gMCkgewogCQl0b2RvID0gMDsKQEAgLTIyNDcsNyArMjIwNyw3IEBACiAJCQl9CiAJCX0KIAkJLyogUmVhZCBzYW1wbGUgYW5kIHN0b3JlIGluIENvbWVkaSdzIGNpcmN1bGFyIGJ1ZmZlci4gKi8KLQkJaWYgKGNvbWVkaV9idWZfcHV0KGFzeW5jLCBwY2kyMzBfYWlfcmVhZChkZXYpKSA9PSAwKSB7CisJCWlmIChjb21lZGlfYnVmX3B1dChzLCBwY2kyMzBfYWlfcmVhZChkZXYpKSA9PSAwKSB7CiAJCQlldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX09WRVJGTE9XOwogCQkJY29tZWRpX2Vycm9yKGRldiwgIkFJIGJ1ZmZlciBvdmVyZmxvdyIpOwogCQkJYnJlYWs7CkBAIC0yMjYxLDcgKzIyMjEsNyBAQAogCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOwogCQl9CiAJfQotCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cyAmJiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSB7CiAJCS8qIEVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KIAkJZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJfSBlbHNlIHsKQEAgLTIzMTIsMTQgKzIyNzIsMTAgQEAKIAogCiAJLyogR2V0IG51bWJlciBvZiBzY2FucyByZXF1aXJlZC4gKi8KLQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9IGNtZC0+c3RvcF9hcmc7Ci0JCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIFRSSUdfTk9ORSwgdXNlciBjYWxscyBjYW5jZWwuICovCisJZWxzZQkvKiBUUklHX05PTkUsIHVzZXIgY2FsbHMgY2FuY2VsICovCiAJCWRldnByaXYtPmFpX3NjYW5fY291bnQgPSAwOwotCQlkZXZwcml2LT5haV9jb250aW51b3VzID0gMTsKLQl9CiAJZGV2cHJpdi0+YWlfc2Nhbl9wb3MgPSAwOwkvKiBQb3NpdGlvbiB3aXRoaW4gc2Nhbi4gKi8KIAogCS8qIFN0ZXBzOwpAQCAtMjQ2MywxMiArMjQxOSwxMCBAQAogCQl9CiAJfQogCi0JaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKQogCQlzLT5hc3luYy0+aW50dHJpZyA9IHBjaTIzMF9haV9pbnR0cmlnX3N0YXJ0OwotCX0gZWxzZSB7Ci0JCS8qIFRSSUdfTk9XICovCisJZWxzZQkvKiBUUklHX05PVyAqLwogCQlwY2kyMzBfYWlfc3RhcnQoZGV2LCBzKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKaW5kZXggNjQ1ZmNiMC4uZWIxYjkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKQEAgLTE4NCw2ICsxODQsNyBAQAogCiAJCWZvciAoYml0ID0gMTU7IGJpdCA+PSAwOyBiaXQtLSkgewogCQkJaW50IGIgPSAoZCA+PiBiaXQpICYgMHgxOworCiAJCQliIDw8PSAxOwogCQkJb3V0dyhzdGF0dXMxIHwgYiB8IDB4MDAwMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNkNTX01JU0MxKTsKIAkJCXVkZWxheSgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwppbmRleCA4M2EyNjVmLi43Mzc3ZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCkBAIC04MDMsNiArODAzLDMzIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQoreworCXVuc2lnbmVkIGludCBjaGFuMCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJdW5zaWduZWQgaW50IHJhbmdlMCA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQl1bnNpZ25lZCBpbnQgcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKworCQlpZiAoY2hhbiAhPSAoY2hhbjAgKyBpKSAlIHMtPm5fY2hhbikgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJhbmdlICE9IHJhbmdlMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQpAQCAtODEwLDggKzgzNyw3IEBACiAJY29uc3Qgc3RydWN0IGNiX3BjaWRhc19ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJc3RydWN0IGNiX3BjaWRhc19wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCBlcnIgPSAwOwotCWludCB0bXA7Ci0JaW50IGksIGdhaW4sIHN0YXJ0X2NoYW47CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtODQ2LDkgKzg3MiwxMiBAQAogCWlmIChlcnIpCiAJCXJldHVybiAyOwogCi0JLyogc3RlcCAzOiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCiAJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19OT1c6CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKKwkJYnJlYWs7CiAJY2FzZSBUUklHX0VYVDoKIAkJLyogRXh0ZXJuYWwgdHJpZ2dlciwgb25seSBDUl9FREdFIGFuZCBDUl9JTlZFUlQgZmxhZ3MgYWxsb3dlZCAqLwogCQlpZiAoKGNtZC0+c3RhcnRfYXJnCkBAIC04NjIsOSArODkxLDYgQEAKIAkJCWVyciB8PSAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKLQkJYnJlYWs7CiAJfQogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKQEAgLTg4Niw0NSArOTEyLDI4IEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzEwTUhaLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjIsCi0JCQkJCSAgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgYXJnKTsKIAl9CiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzEwTUhaLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjIsCi0JCQkJCSAgJmNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qICBjaGVjayBjaGFubmVsL2dhaW4gbGlzdCBhZ2FpbnN0IGNhcmQncyBsaW1pdGF0aW9ucyAqLwotCWlmIChjbWQtPmNoYW5saXN0KSB7Ci0JCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKLQkJc3RhcnRfY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7Ci0JCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7Ci0JCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPQotCQkJICAgIChzdGFydF9jaGFuICsgaSkgJSBzLT5uX2NoYW4pIHsKLQkJCQljb21lZGlfZXJyb3IoZGV2LAotCQkJCQkgICAgICJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOwotCQkJCWVycisrOwotCQkJfQotCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGdhaW4pIHsKLQkJCQljb21lZGlfZXJyb3IoZGV2LAotCQkJCQkgICAgICJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7Ci0JCQkJZXJyKys7Ci0JCQl9Ci0JCX0KLQl9CisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKQorCQllcnIgfD0gY2JfcGNpZGFzX2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiA1OwpAQCAtOTMyLDIwICs5NDEsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpucywKLQkJCQkgICAgaW50IHJvdW5kaW5nX2ZsYWdzKQorc3RhdGljIHZvaWQgY2JfcGNpZGFzX2FpX2xvYWRfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2JfcGNpZGFzX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlID0gZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBBREM4MjU0OwogCi0JaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV8xME1IWiwKLQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwgJmRldnByaXYtPmRpdmlzb3IyLAotCQkJCSAgbnMsIHJvdW5kaW5nX2ZsYWdzKTsKKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAxLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMiwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOwogCi0JLyogV3JpdGUgdGhlIHZhbHVlcyBvZiBjdHIxIGFuZCBjdHIyIGludG8gY291bnRlcnMgMSBhbmQgMiAqLwotCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBBREM4MjU0LCAwLCAxLAotCQkgICBkZXZwcml2LT5kaXZpc29yMSwgMik7Ci0JaTgyNTRfbG9hZChkZXZwcml2LT5wYWNlcl9jb3VudGVyX2RpbyArIEFEQzgyNTQsIDAsIDIsCi0JCSAgIGRldnByaXYtPmRpdmlzb3IyLCAyKTsKKwlpODI1NF93cml0ZSh0aW1lcl9iYXNlLCAwLCAxLCBkZXZwcml2LT5kaXZpc29yMSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIpOwogfQogCiBzdGF0aWMgaW50IGNiX3BjaWRhc19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTk4MywxMiArOTg4LDggQEAKIAlvdXR3KGJpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQURDTVVYX0NPTlQpOwogCiAJLyogIGxvYWQgY291bnRlcnMgKi8KLQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQotCQljYl9wY2lkYXNfbG9hZF9jb3VudGVycyhkZXYsICZjbWQtPmNvbnZlcnRfYXJnLAotCQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQllbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCi0JCWNiX3BjaWRhc19sb2FkX2NvdW50ZXJzKGRldiwgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCi0JCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgfHwgY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQljYl9wY2lkYXNfYWlfbG9hZF9jb3VudGVycyhkZXYpOwogCiAJLyogIHNldCBudW1iZXIgb2YgY29udmVyc2lvbnMgKi8KIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQpAQCAtMTAzNSw2ICsxMDM2LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQoreworCXVuc2lnbmVkIGludCBjaGFuMCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiAxKSB7CisJCXVuc2lnbmVkIGludCBjaGFuMSA9IENSX0NIQU4oY21kLT5jaGFubGlzdFsxXSk7CisKKwkJaWYgKGNoYW4wICE9IDAgfHwgY2hhbjEgIT0gMSkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiY2hhbm5lbHMgbXVzdCBiZSBvcmRlcmVkIGNoYW5uZWwgMCwgY2hhbm5lbCAxIGluIGNoYW5saXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQpAQCAtMTA0Miw3ICsxMDYyLDcgQEAKIAljb25zdCBzdHJ1Y3QgY2JfcGNpZGFzX2JvYXJkICp0aGlzYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlzdHJ1Y3QgY2JfcGNpZGFzX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0xMDg1LDI3ICsxMTA1LDIwIEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzEwTUhaLAogCQkJCQkgICZkZXZwcml2LT5hb19kaXZpc29yMSwKIAkJCQkJICAmZGV2cHJpdi0+YW9fZGl2aXNvcjIsCi0JCQkJCSAgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qICBjaGVjayBjaGFubmVsL2dhaW4gbGlzdCBhZ2FpbnN0IGNhcmQncyBsaW1pdGF0aW9ucyAqLwotCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgewotCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSAhPSAwIHx8Ci0JCSAgICBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMV0pICE9IDEpIHsKLQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJICAgICAiY2hhbm5lbHMgbXVzdCBiZSBvcmRlcmVkIGNoYW5uZWwgMCwgY2hhbm5lbCAxIGluIGNoYW5saXN0XG4iKTsKLQkJCWVycisrOwotCQl9Ci0JfQorCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cyAqLworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkKKwkJZXJyIHw9IGNiX3BjaWRhc19hb19jaGVja19jaGFubGlzdChkZXYsIHMsIGNtZCk7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNTsKQEAgLTExNDUsNyArMTE1OCw3IEBACiAJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAodHJpZ19udW0gIT0gMCkKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogIGxvYWQgdXAgZmlmbyAqLwpAQCAtMTE4MCw2ICsxMTkzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGNiX3BjaWRhc19hb19sb2FkX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNiX3BjaWRhc19wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZXJfYmFzZSA9IGRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvICsgREFDODI1NDsKKworCWk4MjU0X3NldF9tb2RlKHRpbWVyX2Jhc2UsIDAsIDEsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAyLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CisKKwlpODI1NF93cml0ZSh0aW1lcl9iYXNlLCAwLCAxLCBkZXZwcml2LT5hb19kaXZpc29yMSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMiwgZGV2cHJpdi0+YW9fZGl2aXNvcjIpOworfQorCiBzdGF0aWMgaW50IGNiX3BjaWRhc19hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKQEAgLTEyMDksMTggKzEyMzQsOSBAQAogCW91dHcoMCwgZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDRklGT0NMUik7CiAKIAkvKiAgbG9hZCBjb3VudGVycyAqLwotCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV8xME1IWiwKLQkJCQkJICAmZGV2cHJpdi0+YW9fZGl2aXNvcjEsCi0JCQkJCSAgJmRldnByaXYtPmFvX2Rpdmlzb3IyLAotCQkJCQkgICZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQljYl9wY2lkYXNfYW9fbG9hZF9jb3VudGVycyhkZXYpOwogCi0JCS8qIFdyaXRlIHRoZSB2YWx1ZXMgb2YgY3RyMSBhbmQgY3RyMiBpbnRvIGNvdW50ZXJzIDEgYW5kIDIgKi8KLQkJaTgyNTRfbG9hZChkZXZwcml2LT5wYWNlcl9jb3VudGVyX2RpbyArIERBQzgyNTQsIDAsIDEsCi0JCQkgICBkZXZwcml2LT5hb19kaXZpc29yMSwgMik7Ci0JCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBEQUM4MjU0LCAwLCAyLAotCQkJICAgZGV2cHJpdi0+YW9fZGl2aXNvcjIsIDIpOwotCX0KIAkvKiAgc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucyAqLwogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPmFvX2NvdW50ID0gY21kLT5jaGFubGlzdF9sZW4gKiBjbWQtPnN0b3BfYXJnOwpAQCAtMTMwNSw3ICsxMzIxLDcgQEAKIAkJCQkJICAgICAgIG51bV9wb2ludHMgKiBzaXplb2Yoc2hvcnQpKTsKIAkJbnVtX3BvaW50cyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CiAKLQkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJCWRldnByaXYtPmFvX2NvdW50IC09IG51bV9wb2ludHM7CiAJCS8qICB3cml0ZSBkYXRhIHRvIGJvYXJkJ3MgZmlmbyAqLwogCQlvdXRzdyhkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNEQVRBLCBkZXZwcml2LT5hb19idWZmZXIsCkBAIC0xMzI3LDYgKzEzNDMsNyBAQAogCXN0cnVjdCBjYl9wY2lkYXNfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKIAlpbnQgc3RhdHVzLCBzNTkzM19zdGF0dXM7CiAJaW50IGhhbGZfZmlmbyA9IHRoaXNib2FyZC0+Zmlmb19zaXplIC8gMjsKIAl1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMsIGk7CkBAIC0xMzM3LDYgKzEzNTQsNyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlhc3luYyA9IHMtPmFzeW5jOworCWNtZCA9ICZhc3luYy0+Y21kOwogCiAJczU5MzNfc3RhdHVzID0gaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CiAKQEAgLTEzNTksNyArMTM3Nyw3IEBACiAJaWYgKHN0YXR1cyAmIEFESEZJKSB7CiAJCS8qICByZWFkIGRhdGEgKi8KIAkJbnVtX3NhbXBsZXMgPSBoYWxmX2ZpZm87Ci0JCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgogCQkgICAgbnVtX3NhbXBsZXMgPiBkZXZwcml2LT5jb3VudCkgewogCQkJbnVtX3NhbXBsZXMgPSBkZXZwcml2LT5jb3VudDsKIAkJfQpAQCAtMTM2OCw3ICsxMzg2LDcgQEAKIAkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBkZXZwcml2LT5haV9idWZmZXIsCiAJCQkJCSAgbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKIAkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3NhbXBsZXM7Ci0JCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPT0gMCkKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5jb3VudCA9PSAwKQogCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQkvKiAgY2xlYXIgaGFsZi1mdWxsIGludGVycnVwdCBsYXRjaCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwpAQCAtMTM4Myw3ICsxNDAxLDcgQEAKIAkJCQkJSU5UX0FEQ0ZJRk8pKSA9PSAwKQogCQkJCWJyZWFrOwogCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBpbncoZGV2cHJpdi0+YWRjX2ZpZm8pKTsKLQkJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKIAkJCSAgICAtLWRldnByaXYtPmNvdW50ID09IDApIHsKIAkJCQkvKiBlbmQgb2YgYWNxdWlzaXRpb24gKi8KIAkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jCmluZGV4IGY5YWZjYmUuLjAzNWMzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jCkBAIC0xOTk1LDE0ICsxOTk1LDUyIEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGNiX3BjaWRhczY0X2FpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJY29uc3Qgc3RydWN0IHBjaWRhczY0X2JvYXJkICpib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOworCXVuc2lnbmVkIGludCBhcmVmMCA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKGFyZWYgIT0gYXJlZjApIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJImFsbCBlbGVtZW50cyBpbiBjaGFubGlzdCBtdXN0IHVzZSB0aGUgc2FtZSBhbmFsb2cgcmVmZXJlbmNlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKGJvYXJkLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJdW5zaWduZWQgaW50IGNoYW4wID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCQlpZiAoY2hhbiAhPSAoY2hhbjAgKyBpKSkgeworCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJCSJjaGFubGlzdCBtdXN0IHVzZSBjb25zZWN1dGl2ZSBjaGFubmVsc1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDMpIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJImNoYW5saXN0IGNhbm5vdCBiZSAzIGNoYW5uZWxzIGxvbmcsIHVzZSAxLCAyLCBvciA0IGNoYW5uZWxzXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAljb25zdCBzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgKnRoaXNib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGludCB0bXBfYXJnLCB0bXBfYXJnMjsKLQlpbnQgaTsKLQlpbnQgYXJlZjsKIAl1bnNpZ25lZCBpbnQgdHJpZ2dlcnM7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCkBAIC0yMDQwLDE1ICsyMDc4LDI0IEBACiAKIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCiAJCWVyciB8PSAtRUlOVkFMOwotCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYKLQkgICAgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCkKLQkJZXJyIHw9IC1FSU5WQUw7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gMjsKIAogCS8qIFN0ZXAgMzogY2hlY2sgaWYgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIAorCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qCisJCSAqIHN0YXJ0X2FyZyBpcyB0aGUgQ1JfQ0hBTiB8IENSX0lOVkVSVCBvZiB0aGUKKwkJICogZXh0ZXJuYWwgdHJpZ2dlci4KKwkJICovCisJCWJyZWFrOworCX0KKwogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKIAkJaWYgKHRoaXNib2FyZC0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CiAJCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCAwKTsKQEAgLTIwOTgsMzYgKzIxNDUsOSBAQAogCWlmIChlcnIpCiAJCXJldHVybiA0OwogCi0JLyogIG1ha2Ugc3VyZSB1c2VyIGlzIGRvZXNuJ3QgY2hhbmdlIGFuYWxvZyByZWZlcmVuY2UgbWlkIGNoYW5saXN0ICovCi0JaWYgKGNtZC0+Y2hhbmxpc3QpIHsKLQkJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7Ci0JCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7Ci0JCQlpZiAoYXJlZiAhPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pKSB7Ci0JCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJICAgICAiYWxsIGVsZW1lbnRzIGluIGNoYW5saXN0IG11c3QgdXNlIHRoZSBzYW1lIGFuYWxvZyByZWZlcmVuY2UiKTsKLQkJCQllcnIrKzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiAgY2hlY2sgNDAyMCBjaGFubGlzdCAqLwotCQlpZiAodGhpc2JvYXJkLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKLQkJCXVuc2lnbmVkIGludCBmaXJzdF9jaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKLQkJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7Ci0JCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KLQkJCQkgICAgZmlyc3RfY2hhbm5lbCArIGkpIHsKLQkJCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJCSAgICAgImNoYW5saXN0IG11c3QgdXNlIGNvbnNlY3V0aXZlIGNoYW5uZWxzIik7Ci0JCQkJCWVycisrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMykgewotCQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJCSAgICAgImNoYW5saXN0IGNhbm5vdCBiZSAzIGNoYW5uZWxzIGxvbmcsIHVzZSAxLCAyLCBvciA0IGNoYW5uZWxzIik7Ci0JCQkJZXJyKys7Ci0JCQl9Ci0JCX0KLQl9CisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKQorCQllcnIgfD0gY2JfcGNpZGFzNjRfYWlfY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDU7CkBAIC0yNzAzLDYgKzI3MjMsNyBAQAogCWNvbnN0IHN0cnVjdCBwY2lkYXM2NF9ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJc3RydWN0IHBjaWRhczY0X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBkZXYtPnJlYWRfc3ViZGV2LT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CiAJdWludDMyX3QgbmV4dF90cmFuc2Zlcl9hZGRyOwogCWludCBqOwogCWludCBudW1fc2FtcGxlcyA9IDA7CkBAIC0yNzI0LDcgKzI3NDUsNyBAQAogCSAgICAgIERNQV9CVUZGRVJfU0laRSkgJiYgaiA8IGFpX2RtYV9yaW5nX2NvdW50KHRoaXNib2FyZCk7IGorKykgewogCQkvKiAgdHJhbnNmZXIgZGF0YSBmcm9tIGRtYSBidWZmZXIgdG8gY29tZWRpIGJ1ZmZlciAqLwogCQludW1fc2FtcGxlcyA9IGRtYV90cmFuc2Zlcl9zaXplKGRldik7Ci0JCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewogCQkJaWYgKG51bV9zYW1wbGVzID4gZGV2cHJpdi0+YWlfY291bnQpCiAJCQkJbnVtX3NhbXBsZXMgPSBkZXZwcml2LT5haV9jb3VudDsKIAkJCWRldnByaXYtPmFpX2NvdW50IC09IG51bV9zYW1wbGVzOwpAQCAtMjg3Myw3ICsyODk0LDcgQEAKIAlidWZmZXJfaW5kZXggPSBkZXZwcml2LT5hb19kbWFfaW5kZXg7CiAJcHJldl9idWZmZXJfaW5kZXggPSBwcmV2X2FvX2RtYV9pbmRleChkZXYpOwogCi0JbnVtX2J5dGVzID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGRldi0+d3JpdGVfc3ViZGV2LT5hc3luYyk7CisJbnVtX2J5dGVzID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGRldi0+d3JpdGVfc3ViZGV2KTsKIAlpZiAobnVtX2J5dGVzID4gRE1BX0JVRkZFUl9TSVpFKQogCQludW1fYnl0ZXMgPSBETUFfQlVGRkVSX1NJWkU7CiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBudW1fYnl0ZXMgPiBkZXZwcml2LT5hb19jb3VudCkKQEAgLTMxODQsMTUgKzMyMDUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZXh0ZXJuYWxfYWlfcXVldWVfaW5fdXNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBleHRlcm5hbF9haV9xdWV1ZV9pbl91c2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJY29uc3Qgc3RydWN0IHBjaWRhczY0X2JvYXJkICp0aGlzYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAotCWlmIChkZXYtPnJlYWRfc3ViZGV2LT5idXN5KQorCWlmIChzLT5idXN5KQogCQlyZXR1cm4gMDsKIAlpZiAodGhpc2JvYXJkLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCiAJCXJldHVybiAwOwotCWVsc2UgaWYgKHVzZV9pbnRlcm5hbF9xdWV1ZV82eHh4KCZkZXYtPnJlYWRfc3ViZGV2LT5hc3luYy0+Y21kKSkKKwllbHNlIGlmICh1c2VfaW50ZXJuYWxfcXVldWVfNnh4eChjbWQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KQEAgLTMyMDQsNyArMzIyNyw3IEBACiAJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCByZXR2YWw7CiAKLQlpZiAodHJpZ19udW0gIT0gMCkKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dmFsID0gcHJlcF9hb19kbWEoZGV2LCBjbWQpOwpAQCAtMzIyNiw3ICszMjQ5LDcgQEAKIAlzdHJ1Y3QgcGNpZGFzNjRfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAKLQlpZiAoZXh0ZXJuYWxfYWlfcXVldWVfaW5fdXNlKGRldikpIHsKKwlpZiAoZXh0ZXJuYWxfYWlfcXVldWVfaW5fdXNlKGRldiwgcywgY21kKSkgewogCQl3YXJuX2V4dGVybmFsX3F1ZXVlKGRldik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMzI0NywxMyArMzI3MCwzMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNiX3BjaWRhczY0X2FvX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGNoYW4wID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKworCQlpZiAoY2hhbiAhPSAoY2hhbjAgKyBpKSkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiY2hhbmxpc3QgbXVzdCB1c2UgY29uc2VjdXRpdmUgY2hhbm5lbHNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWNvbnN0IHN0cnVjdCBwY2lkYXM2NF9ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgaW50IHRtcF9hcmc7Ci0JaW50IGk7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTMyODUsNiArMzMyNyw4IEBACiAKIAkvKiBTdGVwIDM6IGNoZWNrIGlmIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisKIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAogCQkJCQkJIHRoaXNib2FyZC0+YW9fc2Nhbl9zcGVlZCk7CkBAIC0zMzE1LDE3ICszMzU5LDkgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCWlmIChjbWQtPmNoYW5saXN0KSB7Ci0JCXVuc2lnbmVkIGludCBmaXJzdF9jaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKLQkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKLQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGZpcnN0X2NoYW5uZWwgKyBpKSB7Ci0JCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJICAgICAiY2hhbmxpc3QgbXVzdCB1c2UgY29uc2VjdXRpdmUgY2hhbm5lbHMiKTsKLQkJCQllcnIrKzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBjYl9wY2lkYXM2NF9hb19jaGVja19jaGFubGlzdChkZXYsIHMsIGNtZCk7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCmluZGV4IGQzMTQxYzguLjUwZTUyMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwpAQCAtMzEsNyArMzEsOCBAQAogCiBEZXZlbG9wZWQgZnJvbSBjYl9wY2lkYXMgYW5kIHNrZWwgYnkgUmljaGFyZCBCeXRoZXdheSAobW9jZWxldEBzdWNzLm9yZykuCiBPbmx5IHN1cHBvcnRzIERJTywgQU8gYW5kIHNpbXBsZSBBSSBpbiBpdCdzIHByZXNlbnQgZm9ybS4KLU5vIGludGVycnVwdHMsIG11bHRpIGNoYW5uZWwgb3IgRklGTyBBSSwgYWx0aG91Z2ggdGhlIGNhcmQgbG9va3MgbGlrZSBpdCBjb3VsZCBzdXBwb3J0IHRoaXMuCitObyBpbnRlcnJ1cHRzLCBtdWx0aSBjaGFubmVsIG9yIEZJRk8gQUksCithbHRob3VnaCB0aGUgY2FyZCBsb29rcyBsaWtlIGl0IGNvdWxkIHN1cHBvcnQgdGhpcy4KIFNlZSBodHRwOi8vd3d3Lm1jY2RhcS5jb20vUERGcy9NYW51YWxzL3BjaW0tZGFzMTYwMi0xNi5wZGYgZm9yIG1vcmUgZGV0YWlscy4KICovCiAKQEAgLTEyOCw4ICsxMjksMTIgQEAKIAkJZCA9IGQgJiAweGZkOwogCQlvdXRiKGQsIGRldnByaXYtPkJBRFIzICsgNSk7CiAJfQotCW91dGIoMHgwMSwgZGV2cHJpdi0+QkFEUjMgKyA2KTsJLyogc2V0IGJ1cnN0aW5nIG9mZiwgY29udmVyc2lvbnMgb24gKi8KLQlvdXRiKDB4MDAsIGRldnByaXYtPkJBRFIzICsgNyk7CS8qIHNldCByYW5nZSB0byAxMFYuIFVQL0JQIGlzIGNvbnRyb2xsZWQgYnkgYSBzd2l0Y2ggb24gdGhlIGJvYXJkICovCisKKwkvKiBzZXQgYnVyc3Rpbmcgb2ZmLCBjb252ZXJzaW9ucyBvbiAqLworCW91dGIoMHgwMSwgZGV2cHJpdi0+QkFEUjMgKyA2KTsKKworCS8qIHNldCByYW5nZSB0byAxMFYuIFVQL0JQIGlzIGNvbnRyb2xsZWQgYnkgYSBzd2l0Y2ggb24gdGhlIGJvYXJkICovCisJb3V0YigweDAwLCBkZXZwcml2LT5CQURSMyArIDcpOwogCiAJLyoKIAkgKiB3cml0ZSBjaGFubmVsIGxpbWl0cyB0byBtdWx0aXBsZXhlciwgc2V0IExvdyAoYml0cyAwLTMpIGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jCmluZGV4IDlkOWIxNDYuLmMzM2MzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogdW5zaWduZWQgaW50IGNmY19ieXRlc19wZXJfc2NhbihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQl1bnNpZ25lZCBpbnQgY2hhbmxpc3RfbGVuID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBudW1fc2FtcGxlczsKIAl1bnNpZ25lZCBpbnQgYml0c19wZXJfc2FtcGxlOwogCkBAIC0zMywxMSArMzMsMTEgQEAKIAljYXNlIENPTUVESV9TVUJEX0RPOgogCWNhc2UgQ09NRURJX1NVQkRfRElPOgogCQliaXRzX3Blcl9zYW1wbGUgPSA4ICogYnl0ZXNfcGVyX3NhbXBsZShzKTsKLQkJbnVtX3NhbXBsZXMgPSAoY2hhbmxpc3RfbGVuICsgYml0c19wZXJfc2FtcGxlIC0gMSkgLworCQludW1fc2FtcGxlcyA9IChjbWQtPmNoYW5saXN0X2xlbiArIGJpdHNfcGVyX3NhbXBsZSAtIDEpIC8KIAkJCQliaXRzX3Blcl9zYW1wbGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCW51bV9zYW1wbGVzID0gY2hhbmxpc3RfbGVuOworCQludW1fc2FtcGxlcyA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIG51bV9zYW1wbGVzICogYnl0ZXNfcGVyX3NhbXBsZShzKTsKQEAgLTY3LDE1ICs2NywxNSBAQAogCWlmIChudW1fYnl0ZXMgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR2YWwgPSBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKGFzeW5jLCBudW1fYnl0ZXMpOworCXJldHZhbCA9IGNvbWVkaV9idWZfd3JpdGVfYWxsb2MocywgbnVtX2J5dGVzKTsKIAlpZiAocmV0dmFsICE9IG51bV9ieXRlcykgewogCQlkZXZfd2FybihzLT5kZXZpY2UtPmNsYXNzX2RldiwgImJ1ZmZlciBvdmVycnVuXG4iKTsKIAkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CiAJCXJldHVybiAwOwogCX0KIAotCWNvbWVkaV9idWZfbWVtY3B5X3RvKGFzeW5jLCAwLCBkYXRhLCBudW1fYnl0ZXMpOwotCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgbnVtX2J5dGVzKTsKKwljb21lZGlfYnVmX21lbWNweV90byhzLCAwLCBkYXRhLCBudW1fYnl0ZXMpOworCWNvbWVkaV9idWZfd3JpdGVfZnJlZShzLCBudW1fYnl0ZXMpOwogCWNmY19pbmNfc2Nhbl9wcm9ncmVzcyhzLCBudW1fYnl0ZXMpOwogCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOwogCkBAIC04NiwxNiArODYsMTQgQEAKIHVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwotCiAJaWYgKG51bV9ieXRlcyA9PSAwKQogCQlyZXR1cm4gMDsKIAotCW51bV9ieXRlcyA9IGNvbWVkaV9idWZfcmVhZF9hbGxvYyhhc3luYywgbnVtX2J5dGVzKTsKLQljb21lZGlfYnVmX21lbWNweV9mcm9tKGFzeW5jLCAwLCBkYXRhLCBudW1fYnl0ZXMpOwotCWNvbWVkaV9idWZfcmVhZF9mcmVlKGFzeW5jLCBudW1fYnl0ZXMpOworCW51bV9ieXRlcyA9IGNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLCBudW1fYnl0ZXMpOworCWNvbWVkaV9idWZfbWVtY3B5X2Zyb20ocywgMCwgZGF0YSwgbnVtX2J5dGVzKTsKKwljb21lZGlfYnVmX3JlYWRfZnJlZShzLCBudW1fYnl0ZXMpOwogCWNmY19pbmNfc2Nhbl9wcm9ncmVzcyhzLCBudW1fYnl0ZXMpOwotCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOwogCiAJcmV0dXJuIG51bV9ieXRlczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKaW5kZXggOWRlODFjNy4uYTQyNzQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCAwKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCAwKTsKLQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fZW5kX2FyZywgMSk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0b3BfYXJnLCAwKTsKIAogCWlmIChlcnIpCkBAIC0yMjksNyArMjI5LDcgQEAKIAlpZiAoIShjdHJsICYgUEFSUE9SVF9DVFJMX0lSUV9FTkEpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgMCk7CisJY29tZWRpX2J1Zl9wdXQocywgMCk7CiAJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOwogCiAJY29tZWRpX2V2ZW50KGRldiwgcyk7CkBAIC0yOTUsNiArMjk1LDcgQEAKIAkJcy0+bWF4ZGF0YQk9IDE7CiAJCXMtPnJhbmdlX3RhYmxlCT0gJnJhbmdlX2RpZ2l0YWw7CiAJCXMtPmluc25fYml0cwk9IHBhcnBvcnRfaW50cl9pbnNuX2JpdHM7CisJCXMtPmxlbl9jaGFubGlzdAk9IDE7CiAJCXMtPmRvX2NtZHRlc3QJPSBwYXJwb3J0X2ludHJfY21kdGVzdDsKIAkJcy0+ZG9fY21kCT0gcGFycG9ydF9pbnRyX2NtZDsKIAkJcy0+Y2FuY2VsCT0gcGFycG9ydF9pbnRyX2NhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKaW5kZXggY2Q5NTYyNS4uNjdhMDlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKQEAgLTE4OCw2ICsxODgsNyBAQAogCiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewogCQl1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gY21kLT5zdG9wX2FyZyAtIGRldnByaXYtPmFpX2NvdW50OworCiAJCWlmIChudW1fc2NhbnMgPj0gcmVtYWluaW5nKSB7CiAJCQkvKiBhYm91dCB0byBmaW5pc2ggKi8KIAkJCW51bV9zY2FucyA9IHJlbWFpbmluZzsKQEAgLTE5OCw2ICsxOTksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fc2NhbnM7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgY21kLT5jaGFubGlzdF9sZW47IGorKykgewogCQkJdW5zaWduZWQgc2hvcnQgc2FtcGxlOworCiAJCQlzYW1wbGUgPSBmYWtlX3dhdmVmb3JtKGRldiwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2pdKSwKIAkJCQkJICAgICAgIENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbal0pLAogCQkJCQkgICAgICAgZGV2cHJpdi0+dXNlY19jdXJyZW50ICsKQEAgLTIyNCw3ICsyMjYsNyBAQAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0yNzYsMjIgKzI3OCwxOCBAQAogCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKIAkJLyogcm91bmQgdG8gbmVhcmVzdCBtaWNyb3NlYyAqLwotCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KLQkJICAgIG5hbm9fcGVyX21pY3JvICogKCh0bXAgKwotCQkJCSAgICAgICAobmFub19wZXJfbWljcm8gLyAyKSkgLyBuYW5vX3Blcl9taWNybyk7Ci0JCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKLQkJCWVycisrOworCQlhcmcgPSBuYW5vX3Blcl9taWNybyAqCisJCSAgICAgICgoYXJnICsgKG5hbm9fcGVyX21pY3JvIC8gMikpIC8gbmFub19wZXJfbWljcm8pOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBhcmcpOwogCX0KIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CiAJCS8qIHJvdW5kIHRvIG5lYXJlc3QgbWljcm9zZWMgKi8KLQkJY21kLT5jb252ZXJ0X2FyZyA9Ci0JCSAgICBuYW5vX3Blcl9taWNybyAqICgodG1wICsKLQkJCQkgICAgICAgKG5hbm9fcGVyX21pY3JvIC8gMikpIC8gbmFub19wZXJfbWljcm8pOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKKwkJYXJnID0gbmFub19wZXJfbWljcm8gKgorCQkgICAgICAoKGFyZyArIChuYW5vX3Blcl9taWNybyAvIDIpKSAvIG5hbm9fcGVyX21pY3JvKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQpAQCAtNDEzLDExICs0MTEsNyBAQAogCXMtPm5fY2hhbiA9IE5fQ0hBTlM7CiAJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKIAlzLT5yYW5nZV90YWJsZSA9ICZ3YXZlZm9ybV9haV9yYW5nZXM7Ci0Jcy0+bGVuX2NoYW5saXN0ID0gcy0+bl9jaGFuICogMjsKIAlzLT5pbnNuX3dyaXRlID0gd2F2ZWZvcm1fYW9faW5zbl93cml0ZTsKLQlzLT5kb19jbWQgPSBOVUxMOwotCXMtPmRvX2NtZHRlc3QgPSBOVUxMOwotCXMtPmNhbmNlbCA9IE5VTEw7CiAKIAkvKiBPdXIgZGVmYXVsdCBsb29wYmFjayB2YWx1ZSBpcyBqdXN0IGEgMFYgZmxhdGxpbmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5oCmluZGV4IDQ2YTMxNGMuLjE4Y2MxNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5oCkBAIC00MCw3ICs0MCw5IEBACiB9OwogCiBzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QgewotCXVuc2lnbmVkIGludCBkb19tdXhfYml0czsJLyogIGJpdHMgZm9yIGRvL211eCByZWdpc3RlciBvbiBib2FyZHMgd2l0aG91dCBzZXBhcmF0ZSBkbyByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBkb19tdXhfYml0czsJLyogIGJpdHMgZm9yIGRvL211eCByZWdpc3RlciBvbiBib2FyZHMKKwkJCQkJICogIHdpdGhvdXQgc2VwYXJhdGUgZG8gcmVnaXN0ZXIKKwkJCQkJICovCiAJY29uc3QgdW5zaWduZWQgaW50ICpwZ19nYWlubGlzdDsKIAl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CS8qIGFzc3VtZSAyIEFPIGNoYW5uZWxzICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYwppbmRleCA2YTdkNjUyLi4yZmVlY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYwpAQCAtNjAwLDI5ICs2MDAsNTYgQEAKIAkJbW9kX3RpbWVyKCZkZXZwcml2LT50aW1lciwgamlmZmllcyArIHRpbWVyX3BlcmlvZCgpKTsKIH0KIAorc3RhdGljIGludCBkYXMxNl9haV9jaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGNoYW4wID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwl1bnNpZ25lZCBpbnQgcmFuZ2UwID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCWlmIChjaGFuICE9ICgoY2hhbjAgKyBpKSAlIHMtPm5fY2hhbikpIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyYW5nZSAhPSByYW5nZTApIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZGFzMTZfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJY29uc3Qgc3RydWN0IGRhczE2X2JvYXJkICpib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCXN0cnVjdCBkYXMxNl9wcml2YXRlX3N0cnVjdCAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKLQlpbnQgZXJyID0gMCwgdG1wOwotCWludCBnYWluLCBzdGFydF9jaGFuLCBpOwotCWludCBtYXNrOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0cmlnX21hc2s7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIAogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+c3RhcnRfc3JjLCBUUklHX05PVyk7CiAKLQltYXNrID0gVFJJR19GT0xMT1c7CisJdHJpZ19tYXNrID0gVFJJR19GT0xMT1c7CiAJaWYgKGRldnByaXYtPmNhbl9idXJzdCkKLQkJbWFzayB8PSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7Ci0JZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX3NyYygmY21kLT5zY2FuX2JlZ2luX3NyYywgbWFzayk7CisJCXRyaWdfbWFzayB8PSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX3NyYygmY21kLT5zY2FuX2JlZ2luX3NyYywgdHJpZ19tYXNrKTsKIAotCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7Ci0JbWFzayA9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwl0cmlnX21hc2sgPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CiAJaWYgKGRldnByaXYtPmNhbl9idXJzdCkKLQkJbWFzayB8PSBUUklHX05PVzsKLQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfc3JjKCZjbWQtPmNvbnZlcnRfc3JjLCBtYXNrKTsKKwkJdHJpZ19tYXNrIHw9IFRSSUdfTk9XOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9zcmMoJmNtZC0+Y29udmVydF9zcmMsIHRyaWdfbWFzayk7CiAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfc3JjKCZjbWQtPnNjYW5fZW5kX3NyYywgVFJJR19DT1VOVCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX3NyYygmY21kLT5zdG9wX3NyYywgVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CkBAIC02NzMsNDQgKzcwMCwyOCBAQAogCiAJLyogIHN0ZXAgNDogZml4IHVwIGFyZ3VtZW50cyAqLwogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdW5zaWduZWQgaW50IHRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JCS8qICBzZXQgZGl2aXNvcnMsIGNvcnJlY3QgdGltaW5nIGFyZ3VtZW50cyAqLworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmNsb2NrYmFzZSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjEsCiAJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IyLAotCQkJCQkgICZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKLQkJZXJyICs9ICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJCQkJCSAgJmFyZywgY21kLT5mbGFncyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdW5zaWduZWQgaW50IHRtcCA9IGNtZC0+Y29udmVydF9hcmc7Ci0JCS8qICBzZXQgZGl2aXNvcnMsIGNvcnJlY3QgdGltaW5nIGFyZ3VtZW50cyAqLworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmNsb2NrYmFzZSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjEsCiAJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IyLAotCQkJCQkgICZjbWQtPmNvbnZlcnRfYXJnLCBjbWQtPmZsYWdzKTsKLQkJZXJyICs9ICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZyk7CisJCQkJCSAgJmFyZywgY21kLT5mbGFncyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIGFyZyk7CiAJfQogCWlmIChlcnIpCiAJCXJldHVybiA0OwogCi0JLyogIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zICovCi0JaWYgKGNtZC0+Y2hhbmxpc3QpIHsKLQkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOwotCQlzdGFydF9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKLQkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKLQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9Ci0JCQkgICAgKHN0YXJ0X2NoYW4gKyBpKSAlIHMtPm5fY2hhbikgewotCQkJCWRldl9lcnIoZGV2LT5jbGFzc19kZXYsCi0JCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOwotCQkJCWVycisrOwotCQkJfQotCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGdhaW4pIHsKLQkJCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAotCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOwotCQkJCWVycisrOwotCQkJfQotCQl9Ci0JfQorCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cyAqLworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkKKwkJZXJyIHw9IGRhczE2X2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKKwogCWlmIChlcnIpCiAJCXJldHVybiA1OwogCkBAIC03MjcsOSArNzM4LDEwIEBACiAJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjEsICZkZXZwcml2LT5kaXZpc29yMiwKIAkJCQkgICZucywgcm91bmRpbmdfZmxhZ3MpOwogCi0JLyogV3JpdGUgdGhlIHZhbHVlcyBvZiBjdHIxIGFuZCBjdHIyIGludG8gY291bnRlcnMgMSBhbmQgMiAqLwotCWk4MjU0X2xvYWQodGltZXJfYmFzZSwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsIDIpOwotCWk4MjU0X2xvYWQodGltZXJfYmFzZSwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsIDIpOworCWk4MjU0X3NldF9tb2RlKHRpbWVyX2Jhc2UsIDAsIDEsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAyLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEpOworCWk4MjU0X3dyaXRlKHRpbWVyX2Jhc2UsIDAsIDIsIGRldnByaXYtPmRpdmlzb3IyKTsKIAogCXJldHVybiBuczsKIH0KQEAgLTc1MCw4ICs3NjIsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JZGV2cHJpdi0+YWRjX2J5dGVfY291bnQgPQotCSAgICBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4gKiBzaXplb2YodWludDE2X3QpOworCWRldnByaXYtPmFkY19ieXRlX2NvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNmY19ieXRlc19wZXJfc2NhbihzKTsKIAogCWlmIChkZXZwcml2LT5jYW5fYnVyc3QpCiAJCW91dGIoREFTMTYwMF9DT05WX0RJU0FCTEUsIGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2bTEuYwppbmRleCA3NzkyMjU4Li5lYzAzOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNm0xLmMKQEAgLTE1MCwxMSArMTUwLDQwIEBACiAJCWFycmF5W2ldID0gbXVuZ2Vfc2FtcGxlKGFycmF5W2ldKTsKIH0KIAorc3RhdGljIGludCBkYXMxNm0xX2FpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJaW50IGk7CisKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGNtZC0+Y2hhbmxpc3RfbGVuICUgMikgIT0gMCkgeworCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJImNoYW5saXN0IG11c3QgYmUgb2YgZXZlbiBsZW5ndGggb3IgbGVuZ3RoIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKChpICUgMikgIT0gKGNoYW4gJSAyKSkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkgImV2ZW4vb2RkIGNoYW5uZWxzIG11c3QgZ28gaGF2ZSBldmVuL29kZCBjaGFubGlzdCBpbmRpY2VzXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZGFzMTZtMV9jbWRfdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCXN0cnVjdCBkYXMxNm0xX3ByaXZhdGVfc3RydWN0ICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCXVuc2lnbmVkIGludCBlcnIgPSAwLCB0bXAsIGk7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtMjAzLDM1ICsyMzIsMjAgQEAKIAkvKiBzdGVwIDQ6IGZpeCB1cCBhcmd1bWVudHMgKi8KIAogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzEwTUhaLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjIsCi0JCQkJCSAgJmNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qICBjaGVjayBjaGFubGlzdCBhZ2FpbnN0IGJvYXJkJ3MgcGVjdWxpYXJpdGllcyAqLwotCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgewotCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJLyogIGV2ZW4vb2RkIGNoYW5uZWxzIG11c3QgZ28gaW50byBldmVuL29kZCBxdWV1ZSBhZGRyZXNzZXMgKi8KLQkJCWlmICgoaSAlIDIpICE9IChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICUgMikpIHsKLQkJCQljb21lZGlfZXJyb3IoZGV2LCAiYmFkIGNoYW5saXN0OlxuIgotCQkJCQkgICAgICIgZXZlbi9vZGQgY2hhbm5lbHMgbXVzdCBnbyBoYXZlIGV2ZW4vb2RkIGNoYW5saXN0IGluZGljZXMiKTsKLQkJCQllcnIrKzsKLQkJCX0KLQkJfQotCQlpZiAoKGNtZC0+Y2hhbmxpc3RfbGVuICUgMikgIT0gMCkgewotCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkgICAgICJjaGFubGlzdCBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoIG9yIGxlbmd0aCAxIik7Ci0JCQllcnIrKzsKLQkJfQotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBkYXMxNm0xX2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiA1OwpAQCAtMjM5LDI2ICsyNTMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHRpbWUgaW4gbmFub3NlY29uZHMgYW5kIHNldHMgdGhlICAgICAqCi0gKiAyIHBhY2VyIGNsb2NrcyB0byB0aGUgY2xvc2VzdCBmcmVxdWVuY3kgcG9zc2libGUuIEl0IGFsc28gICoKLSAqIHJldHVybnMgdGhlIGFjdHVhbCBzYW1wbGluZyBwZXJpb2QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFzMTZtMV9zZXRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnMsIGludCByb3VuZGluZ19mbGFncykKK3N0YXRpYyB2b2lkIGRhczE2bTFfc2V0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlID0gZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfU0VDT05EOwogCi0JaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KEk4MjU0X09TQ19CQVNFXzEwTUhaLAotCQkJCSAgICAgICAmZGV2cHJpdi0+ZGl2aXNvcjEsCi0JCQkJICAgICAgICZkZXZwcml2LT5kaXZpc29yMiwKLQkJCQkgICAgICAgJm5zLCByb3VuZGluZ19mbGFncyk7CisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMSwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOworCWk4MjU0X3NldF9tb2RlKHRpbWVyX2Jhc2UsIDAsIDIsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKIAotCS8qIFdyaXRlIHRoZSB2YWx1ZXMgb2YgY3RyMSBhbmQgY3RyMiBpbnRvIGNvdW50ZXJzIDEgYW5kIDIgKi8KLQlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X1NFQ09ORCwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsCi0JCSAgIDIpOwotCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfU0VDT05ELCAwLCAyLCBkZXZwcml2LT5kaXZpc29yMiwKLQkJICAgMik7Ci0KLQlyZXR1cm4gbnM7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEpOworCWk4MjU0X3dyaXRlKHRpbWVyX2Jhc2UsIDAsIDIsIGRldnByaXYtPmRpdmlzb3IyKTsKIH0KIAogc3RhdGljIGludCBkYXMxNm0xX2NtZF9leGVjKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC0yNjcsNiArMjcxLDcgQEAKIAlzdHJ1Y3QgZGFzMTZtMV9wcml2YXRlX3N0cnVjdCAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2UgPSBkZXYtPmlvYmFzZSArIERBUzE2TTFfODI1NF9GSVJTVDsKIAl1bnNpZ25lZCBpbnQgYnl0ZSwgaTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgaW50ZXJuYWwgcGFjZXIgKi8KQEAgLTI3OCwxMSArMjgzLDExIEBACiAJLyogSW5pdGlhbGl6ZSBsb3dlciBoYWxmIG9mIGhhcmR3YXJlIGNvdW50ZXIsIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdwogCSAqIG1hbnkgc2FtcGxlcyBhcmUgaW4gZmlmby4gIFZhbHVlIGRvZXNuJ3QgYWN0dWFsbHkgbG9hZCBpbnRvIGNvdW50ZXIKIAkgKiB1bnRpbCBjb3VudGVyJ3MgbmV4dCBjbG9jayAodGhlIG5leHQgYS9kIGNvbnZlcnNpb24pICovCi0JaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE2TTFfODI1NF9GSVJTVCwgMCwgMSwgMCwgMik7CisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMSwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOworCWk4MjU0X3dyaXRlKHRpbWVyX2Jhc2UsIDAsIDEsIDApOwogCS8qIHJlbWVtYmVyIGN1cnJlbnQgcmVhZGluZyBvZiBjb3VudGVyIHNvIHdlIGtub3cgd2hlbiBjb3VudGVyIGhhcwogCSAqIGFjdHVhbGx5IGJlZW4gbG9hZGVkICovCi0JZGV2cHJpdi0+aW5pdGlhbF9od19jb3VudCA9Ci0JICAgIGk4MjU0X3JlYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1QsIDAsIDEpOworCWRldnByaXYtPmluaXRpYWxfaHdfY291bnQgPSBpODI1NF9yZWFkKHRpbWVyX2Jhc2UsIDAsIDEpOwogCS8qIHNldHVwIGNoYW5uZWwvZ2FpbiBxdWV1ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CiAJCW91dGIoaSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0FERFIpOwpAQCAtMjkyLDEwICsyOTcsMTQgQEAKIAkJb3V0YihieXRlLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfUVVFVUVfREFUQSk7CiAJfQogCi0JLyogc2V0IGNvdW50ZXIgbW9kZSBhbmQgY291bnRzICovCi0JY21kLT5jb252ZXJ0X2FyZyA9Ci0JICAgIGRhczE2bTFfc2V0X3BhY2VyKGRldiwgY21kLT5jb252ZXJ0X2FyZywKLQkJCSAgICAgIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCBzZXQgaW50ZXJuYWwgcGFjZXIgY291bnRlciBtb2RlIGFuZCBjb3VudHMgKi8KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlICY9IH5QQUNFUl9NQVNLOworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJZGFzMTZtMV9zZXRfcGFjZXIoZGV2KTsKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBJTlRfUEFDRVI7CisJfSBlbHNlIHsJLyogVFJJR19FWFQgKi8KKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBFWFRfUEFDRVI7CisJfQogCiAJLyogIHNldCBjb250cm9sICYgc3RhdHVzIHJlZ2lzdGVyICovCiAJYnl0ZSA9IDA7CkBAIC0zMDgsMTMgKzMxNyw2IEBACiAJLyogY2xlYXIgaW50ZXJydXB0IGJpdCAqLwogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NMRUFSX0lOVFIpOwogCi0JLyogZW5hYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCi0JZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+UEFDRVJfTUFTSzsKLQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQotCQlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IElOVF9QQUNFUjsKLQllbHNlCi0JCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gRVhUX1BBQ0VSOwotCiAJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBJTlRFOwogCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCmluZGV4IDhlOTc1ZDYuLjg1OTUxOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAKIAltdW5nZV9kYXRhKGRldiwgYnVmZmVyLCBudW1fc2FtcGxlcyk7CiAJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBidWZmZXIsIG51bV9ieXRlcyk7Ci0JaWYgKHMtPmFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5jb3VudCAtPSBudW1fc2FtcGxlczsKIAogCXJldHVybjsKQEAgLTczMSw3ICs3MzEsNyBAQAogLyogY29udmVydHMgcmVxdWVzdGVkIGNvbnZlcnNpb24gdGltaW5nIHRvIHRpbWluZyBjb21wYXRpYmxlIHdpdGgKICAqIGhhcmR3YXJlLCB1c2VkIG9ubHkgd2hlbiBjYXJkIGlzIGluICdidXJzdCBtb2RlJwogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGJ1cnN0X2NvbnZlcnRfYXJnKHVuc2lnbmVkIGludCBjb252ZXJ0X2FyZywgaW50IHJvdW5kX21vZGUpCitzdGF0aWMgdW5zaWduZWQgaW50IGJ1cnN0X2NvbnZlcnRfYXJnKHVuc2lnbmVkIGludCBjb252ZXJ0X2FyZywgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGludCBtaWNyb19zZWM7CiAKQEAgLTc0MCw3ICs3NDAsNyBAQAogCQljb252ZXJ0X2FyZyA9IDY0MDAwOwogCiAJLyogIHRoZSBjb252ZXJzaW9uIHRpbWUgbXVzdCBiZSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgbWljcm9zZWNvbmRzICovCi0Jc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJc3dpdGNoIChmbGFncyAmIFRSSUdfUk9VTkRfTUFTSykgewogCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgogCWRlZmF1bHQ6CiAJCW1pY3JvX3NlYyA9IChjb252ZXJ0X2FyZyArIDUwMCkgLyAxMDAwOwpAQCAtNzU3LDYgKzc1NywyNiBAQAogCXJldHVybiBtaWNyb19zZWMgKiAxMDAwOwogfQogCitzdGF0aWMgaW50IGRhczE4MDBfYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgdW5pcG9sYXIwID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgJiBVTklQT0xBUjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB1bmlwb2xhciA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICYgVU5JUE9MQVI7CisKKwkJaWYgKHVuaXBvbGFyICE9IHVuaXBvbGFyMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkidW5pcG9sYXIgYW5kIGJpcG9sYXIgcmFuZ2VzIGNhbm5vdCBiZSBtaXhlZCBpbiB0aGUgY2hhbmxpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyogdGVzdCBhbmFsb2cgaW5wdXQgY21kICovCiBzdGF0aWMgaW50IGRhczE4MDBfYWlfZG9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKQEAgLTc2NSw5ICs3ODUsNyBAQAogCWNvbnN0IHN0cnVjdCBkYXMxODAwX2JvYXJkICp0aGlzYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB0bXBfYXJnOwotCWludCBpOwotCWludCB1bmlwb2xhcjsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC04MjUsNjYgKzg0Myw0OCBAQAogCiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCi0JaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCQkvKiAgaWYgd2UgYXJlIG5vdCBpbiBidXJzdCBtb2RlICovCi0JCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7Ci0JCQl0bXBfYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJCS8qIGNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCB0aW1pbmcgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVyAmJgorCSAgICBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogd2UgYXJlIG5vdCBpbiBidXJzdCBtb2RlICovCisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoSTgyNTRfT1NDX0JBU0VfNU1IWiwKKwkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjEsCisJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IyLAorCQkJCQkgICZjbWQtPmNvbnZlcnRfYXJnLCBjbWQtPmZsYWdzKTsKKwkJaWYgKGFyZyAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogd2UgYXJlIGluIGJ1cnN0IG1vZGUgKi8KKwkJYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IGJ1cnN0X2NvbnZlcnRfYXJnKGNtZC0+Y29udmVydF9hcmcsCisJCQkJCQkgICAgIGNtZC0+ZmxhZ3MpOworCQlpZiAoYXJnICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJCQlpZiAoYXJnID4gY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBhcmc7CisJCQkJZXJyKys7CisJCQl9CisKKwkJCWFyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CiAJCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzVNSFosCiAJCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKIAkJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IyLAotCQkJCQkJICAmY21kLT5jb252ZXJ0X2FyZywKKwkJCQkJCSAgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCiAJCQkJCQkgIGNtZC0+ZmxhZ3MpOwotCQkJaWYgKHRtcF9hcmcgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWlmIChhcmcgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKIAkJCQllcnIrKzsKIAkJfQotCQkvKiAgaWYgd2UgYXJlIGluIGJ1cnN0IG1vZGUgKi8KLQkJZWxzZSB7Ci0JCQkvKiAgY2hlY2sgdGhhdCBjb252ZXJ0X2FyZyBpcyBjb21wYXRpYmxlICovCi0JCQl0bXBfYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJCWNtZC0+Y29udmVydF9hcmcgPQotCQkJICAgIGJ1cnN0X2NvbnZlcnRfYXJnKGNtZC0+Y29udmVydF9hcmcsCi0JCQkJCSAgICAgIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwotCQkJaWYgKHRtcF9hcmcgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJCQllcnIrKzsKLQotCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQkJCS8qICBpZiBzY2FucyBhcmUgdGltZWQgZmFzdGVyIHRoYW4gY29udmVyc2lvbiByYXRlIGFsbG93cyAqLwotCQkJCWlmIChjbWQtPmNvbnZlcnRfYXJnICogY21kLT5jaGFubGlzdF9sZW4gPgotCQkJCSAgICBjbWQtPnNjYW5fYmVnaW5fYXJnKSB7Ci0JCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQotCQkJCQkgICAgY21kLT5jb252ZXJ0X2FyZyAqCi0JCQkJCSAgICBjbWQtPmNoYW5saXN0X2xlbjsKLQkJCQkJZXJyKys7Ci0JCQkJfQotCQkJCXRtcF9hcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwotCQkJCS8qIGNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCB0aW1pbmcgKi8KLQkJCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzVNSFosCi0JCQkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjEsCi0JCQkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjIsCi0JCQkJCQkJICAmY21kLT5zY2FuX2JlZ2luX2FyZywKLQkJCQkJCQkgIGNtZC0+ZmxhZ3MpOwotCQkJCWlmICh0bXBfYXJnICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCi0JCQkJCWVycisrOwotCQkJfQotCQl9CiAJfQogCiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CiAKLQkvKiAgbWFrZSBzdXJlIHVzZXIgaXMgbm90IHRyeWluZyB0byBtaXggdW5pcG9sYXIgYW5kIGJpcG9sYXIgcmFuZ2VzICovCi0JaWYgKGNtZC0+Y2hhbmxpc3QpIHsKLQkJdW5pcG9sYXIgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSAmIFVOSVBPTEFSOwotCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJaWYgKHVuaXBvbGFyICE9IChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAmIFVOSVBPTEFSKSkgewotCQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJCSAgICAgInVuaXBvbGFyIGFuZCBiaXBvbGFyIHJhbmdlcyBjYW5ub3QgYmUgbWl4ZWQgaW4gdGhlIGNoYW5saXN0Iik7Ci0JCQkJZXJyKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9CisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKQorCQllcnIgfD0gZGFzMTgwMF9haV9jaGVja19jaGFubGlzdChkZXYsIHMsIGNtZCk7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNTsKQEAgLTk2Miw2OCArOTYyLDI5IEBACiAJcmV0dXJuIGNvbnRyb2xfYzsKIH0KIAotLyogbG9hZHMgY291bnRlcnMgd2l0aCBkaXZpc29yMSwgZGl2aXNvcjIgZnJvbSBwcml2YXRlIHN0cnVjdHVyZSAqLwotc3RhdGljIGludCBkYXMxODAwX3NldF9mcmVxdWVuY3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGRhczE4MDBfc2V0dXBfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCXN0cnVjdCBkYXMxODAwX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlID0gZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPVU5URVI7CiAKLQkvKiAgY291bnRlciAxLCBtb2RlIDIgKi8KLQlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsCi0JCSAgICAgICAyKSkKLQkJZXJyKys7Ci0JLyogIGNvdW50ZXIgMiwgbW9kZSAyICovCi0JaWYgKGk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPVU5URVIsIDAsIDIsIGRldnByaXYtPmRpdmlzb3IyLAotCQkgICAgICAgMikpCi0JCWVycisrOwotCWlmIChlcnIpCi0JCXJldHVybiAtMTsKKwkvKiBzZXR1cCBjYXNjYWRlZCBjb3VudGVycyBmb3IgY29udmVyc2lvbi9zY2FuIGZyZXF1ZW5jeSAqLworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVyB8fAorCSAgICAgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSAmJgorCSAgICBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMSwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOworCQlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAyLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CiAKLQlyZXR1cm4gMDsKLX0KLQotLyogc2V0cyB1cCBjb3VudGVycyAqLwotc3RhdGljIGludCBzZXR1cF9jb3VudGVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAotCQkJICBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQotewotCXN0cnVjdCBkYXMxODAwX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JdW5zaWduZWQgaW50IHBlcmlvZDsKLQotCS8qICBzZXR1cCBjYXNjYWRlZCBjb3VudGVycyBmb3IgY29udmVyc2lvbi9zY2FuIGZyZXF1ZW5jeSAqLwotCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgewotCWNhc2UgVFJJR19GT0xMT1c6CS8qICBub3QgaW4gYnVyc3QgbW9kZSAqLwotCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCQkvKiBzZXQgY29udmVyc2lvbiBmcmVxdWVuY3kgKi8KLQkJCXBlcmlvZCA9IGNtZC0+Y29udmVydF9hcmc7Ci0JCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzVNSFosCi0JCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKLQkJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IyLAotCQkJCQkJICAmcGVyaW9kLCBjbWQtPmZsYWdzKTsKLQkJCWlmIChkYXMxODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApCi0JCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVFJJR19USU1FUjoJLyogIGluIGJ1cnN0IG1vZGUgKi8KLQkJLyogc2V0IHNjYW4gZnJlcXVlbmN5ICovCi0JCXBlcmlvZCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoSTgyNTRfT1NDX0JBU0VfNU1IWiwKLQkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjEsCi0JCQkJCSAgJmRldnByaXYtPmRpdmlzb3IyLAotCQkJCQkgICZwZXJpb2QsIGNtZC0+ZmxhZ3MpOwotCQlpZiAoZGFzMTgwMF9zZXRfZnJlcXVlbmN5KGRldikgPCAwKQotCQkJcmV0dXJuIC0xOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKKwkJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEpOworCQlpODI1NF93cml0ZSh0aW1lcl9iYXNlLCAwLCAyLCBkZXZwcml2LT5kaXZpc29yMik7CiAJfQogCi0JLyogIHNldHVwIGNvdW50ZXIgMCBmb3IgJ2Fib3V0IHRyaWdnZXJpbmcnICovCisJLyogc2V0dXAgY291bnRlciAwIGZvciAnYWJvdXQgdHJpZ2dlcmluZycgKi8KIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgewotCQkvKiAgbG9hZCBjb3VudGVyIDAgaW4gbW9kZSAwICovCi0JCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPVU5URVIsIDAsIDAsIDEsIDApOwotCX0KKwkJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMCwgSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlkpOwogCi0JcmV0dXJuIDA7CisJCWk4MjU0X3dyaXRlKHRpbWVyX2Jhc2UsIDAsIDAsIDEpOworCX0KIH0KIAogLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHN1Z2dlc3RzIGEgZG1hIHRyYW5zZmVyIHNpemUgYmFzZWQgb24gdGhlIGNvbnZlcnNpb24gcGVyaW9kICducycgKi8KQEAgLTExMzYsNyArMTA5Nyw2IEBACiAJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXN0cnVjdCBkYXMxODAwX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JaW50IHJldDsKIAlpbnQgY29udHJvbF9hLCBjb250cm9sX2M7CiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CkBAIC0xMTY3LDExICsxMTI3LDcgQEAKIAogCS8qIHNldHVwIGNhcmQgYW5kIHN0YXJ0ICovCiAJcHJvZ3JhbV9jaGFubGlzdChkZXYsIGNtZCk7Ci0JcmV0ID0gc2V0dXBfY291bnRlcnMoZGV2LCBjbWQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWNvbWVkaV9lcnJvcihkZXYsICJFcnJvciBzZXR0aW5nIHVwIGNvdW50ZXJzIik7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWRhczE4MDBfc2V0dXBfY291bnRlcnMoZGV2LCBjbWQpOwogCXNldHVwX2RtYShkZXYsIGNtZCk7CiAJb3V0Yihjb250cm9sX2MsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0MpOwogCS8qICBzZXQgY29udmVyc2lvbiByYXRlIGFuZCBsZW5ndGggZm9yIGJ1cnN0IG1vZGUgKi8KQEAgLTE0NzAsNyArMTQyNiw3IEBACiBzdGF0aWMgaW50IGRhczE4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQljb25zdCBzdHJ1Y3QgZGFzMTgwMF9ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CisJY29uc3Qgc3RydWN0IGRhczE4MDBfYm9hcmQgKnRoaXNib2FyZDsKIAlzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlICpkZXZwcml2OwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCXVuc2lnbmVkIGludCBpcnEgPSBpdC0+b3B0aW9uc1sxXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCmluZGV4IGUwY2ZiNmMuLmQxOGVlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJdW5zaWduZWQgaW50IG1heGRhdGE7CiB9OwogCi1zdHJ1Y3QgZGFzNjQwMl9ib2FyZGluZm8gZGFzNjQwMl9ib2FyZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGFzNjQwMl9ib2FyZGluZm8gZGFzNjQwMl9ib2FyZHNbXSA9IHsKIAl7CiAJCS5uYW1lCQk9ICJkYXM2NDAyLTEyIiwKIAkJLm1heGRhdGEJPSAweDBmZmYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKaW5kZXggM2U0MDgzNy4uNmY3ZjhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwpAQCAtMjI0LDcgKzIyNCw2IEBACiAJdW5zaWduZWQgaW50IGRpdmlzb3IxOwkvKiBjb3VudGVyIDEgdmFsdWUgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCiAJdW5zaWduZWQgaW50IGRpdmlzb3IyOwkvKiBjb3VudGVyIDIgdmFsdWUgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCiAJdW5zaWduZWQgaW50IGRvX2JpdHM7CS8qIGRpZ2l0YWwgb3V0cHV0IGJpdHMgKi8KLQlib29sIGZvcmV2ZXI7CQkvKiBmbGFnIHRoYXQgd2Ugc2hvdWxkIHRha2UgZGF0YSBmb3JldmVyICovCiB9OwogCiBzdGF0aWMgdm9pZCBkYXM4MDBfaW5kX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC0yNzUsMzEgKzI3NCw1NCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgZGFzODAwX3NldF9mcmVxdWVuY3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGRhczgwMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRhczgwMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZXJfYmFzZSA9IGRldi0+aW9iYXNlICsgREFTODAwXzgyNTQ7CiAKLQlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzgwMF84MjU0LCAwLCAxLCBkZXZwcml2LT5kaXZpc29yMSwgMikpCi0JCWVycisrOwotCWlmIChpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTODAwXzgyNTQsIDAsIDIsIGRldnByaXYtPmRpdmlzb3IyLCAyKSkKLQkJZXJyKys7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIDA7CisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMSwgSTgyNTRfTU9ERTIgfCBJODI1NF9CSU5BUlkpOworCWk4MjU0X3NldF9tb2RlKHRpbWVyX2Jhc2UsIDAsIDIsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKKwlpODI1NF93cml0ZSh0aW1lcl9iYXNlLCAwLCAxLCBkZXZwcml2LT5kaXZpc29yMSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIpOwogfQogCiBzdGF0aWMgaW50IGRhczgwMF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IGRhczgwMF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCi0JZGV2cHJpdi0+Zm9yZXZlciA9IGZhbHNlOwogCWRldnByaXYtPmNvdW50ID0gMDsKIAlkYXM4MDBfZGlzYWJsZShkZXYpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRhczgwMF9haV9jaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbjAgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCXVuc2lnbmVkIGludCByYW5nZTAgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJdW5zaWduZWQgaW50IHJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKGNoYW4gIT0gKGNoYW4wICsgaSkgJSBzLT5uX2NoYW4pIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJImNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmFuZ2UgIT0gcmFuZ2UwKSB7CisJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCSJjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkYXM4MDBfYWlfZG9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJCXN0cnVjdCBjb21lZGlfY21kICpjbWQpCkBAIC0zMDcsNiArMzI5LDcgQEAKIAljb25zdCBzdHJ1Y3QgZGFzODAwX2JvYXJkICp0aGlzYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlzdHJ1Y3QgZGFzODAwX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtMzUyLDQxICszNzUsMjAgQEAKIAkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCiAKIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCWludCB0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOwotCi0JCS8qIGNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCB0aW1pbmcgKi8KKwkJYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKIAkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihJODI1NF9PU0NfQkFTRV8xTUhaLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjIsCi0JCQkJCSAgJmNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qICBjaGVjayBjaGFubmVsL2dhaW4gbGlzdCBhZ2FpbnN0IGNhcmQncyBsaW1pdGF0aW9ucyAqLwotCWlmIChjbWQtPmNoYW5saXN0KSB7Ci0JCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKLQkJdW5zaWduZWQgaW50IHJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7Ci0JCXVuc2lnbmVkIGludCBuZXh0OwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJbmV4dCA9IGNtZC0+Y2hhbmxpc3RbaV07Ci0JCQlpZiAoQ1JfQ0hBTihuZXh0KSAhPSAoY2hhbiArIGkpICUgTl9DSEFOX0FJKSB7Ci0JCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwKLQkJCQkJImNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUsIGNvdW50aW5nIHVwd2FyZHNcbiIpOwotCQkJCWVycisrOwotCQkJfQotCQkJaWYgKENSX1JBTkdFKG5leHQpICE9IHJhbmdlKSB7Ci0JCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwKLQkJCQkJImNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7Ci0JCQkJZXJyKys7Ci0JCQl9Ci0JCX0KLQl9CisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKQorCQllcnIgfD0gZGFzODAwX2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiA1OwpAQCAtNDAwLDkgKzQwMiwxMCBAQAogCWNvbnN0IHN0cnVjdCBkYXM4MDBfYm9hcmQgKnRoaXNib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCXN0cnVjdCBkYXM4MDBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwotCXVuc2lnbmVkIGludCBnYWluID0gQ1JfUkFOR0UoYXN5bmMtPmNtZC5jaGFubGlzdFswXSk7Ci0JdW5zaWduZWQgaW50IHN0YXJ0X2NoYW4gPSBDUl9DSEFOKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pOwotCXVuc2lnbmVkIGludCBlbmRfY2hhbiA9IChzdGFydF9jaGFuICsgYXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gLSAxKSAlIDg7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBnYWluID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJdW5zaWduZWQgaW50IHN0YXJ0X2NoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCXVuc2lnbmVkIGludCBlbmRfY2hhbiA9IChzdGFydF9jaGFuICsgY21kLT5jaGFubGlzdF9sZW4gLSAxKSAlIDg7CiAJdW5zaWduZWQgaW50IHNjYW5fY2hhbnMgPSAoZW5kX2NoYW4gPDwgMykgfCBzdGFydF9jaGFuOwogCWludCBjb252X2JpdHM7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CkBAIC00MjAsMjggKzQyMywyMiBAQAogCWdhaW4gJj0gMHhmOwogCW91dGIoZ2FpbiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CiAKLQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7Ci0JCWRldnByaXYtPmNvdW50ID0gYXN5bmMtPmNtZC5zdG9wX2FyZyAqIGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOwotCQlkZXZwcml2LT5mb3JldmVyID0gZmFsc2U7Ci0JfSBlbHNlIHsJLyogVFJJR19OT05FICovCi0JCWRldnByaXYtPmZvcmV2ZXIgPSB0cnVlOworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCWRldnByaXYtPmNvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCWVsc2UJLyogVFJJR19OT05FICovCiAJCWRldnByaXYtPmNvdW50ID0gMDsKLQl9CiAKIAkvKiBlbmFibGUgYXV0byBjaGFubmVsIHNjYW4sIHNlbmQgaW50ZXJydXB0cyBvbiBlbmQgb2YgY29udmVyc2lvbgogCSAqIGFuZCBzZXQgY2xvY2sgc291cmNlIHRvIGludGVybmFsIG9yIGV4dGVybmFsCiAJICovCiAJY29udl9iaXRzID0gMDsKIAljb252X2JpdHMgfD0gRUFDUyB8IElFT0M7Ci0JaWYgKGFzeW5jLT5jbWQuc3RhcnRfc3JjID09IFRSSUdfRVhUKQorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkKIAkJY29udl9iaXRzIHw9IERURU47Ci0JaWYgKGFzeW5jLT5jbWQuY29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKIAkJY29udl9iaXRzIHw9IENBU0MgfCBJVEU7CiAJCS8qIHNldCBjb252ZXJzaW9uIGZyZXF1ZW5jeSAqLwotCQlpZiAoZGFzODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApIHsKLQkJCWNvbWVkaV9lcnJvcihkZXYsICJFcnJvciBzZXR0aW5nIHVwIGNvdW50ZXJzIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KKwkJZGFzODAwX3NldF9mcmVxdWVuY3koZGV2KTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKQEAgLTQ2NSw3ICs0NjIsOCBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOwogCXN0cnVjdCBkYXM4MDBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7Ci0Jc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzID8gcy0+YXN5bmMgOiBOVUxMOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgdmFsOwpAQCAtNDc5LDYgKzQ3Nyw5IEBACiAJaWYgKCFkZXYtPmF0dGFjaGVkKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKKwlhc3luYyA9IHMtPmFzeW5jOworCWNtZCA9ICZhc3luYy0+Y21kOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CiAJc3RhdHVzID0gZGFzODAwX2luZF9yZWFkKGRldiwgQ09OVFJPTDEpICYgU1RBVFVTMl9IQ0VOOwogCS8qCkBAIC01MTAsNyArNTExLDcgQEAKIAkJCXZhbCA+Pj0gNDsJLyogMTItYml0IHNhbXBsZSAqLwogCiAJCS8qIGlmIHRoZXJlIGFyZSBtb3JlIGRhdGEgcG9pbnRzIHRvIGNvbGxlY3QgKi8KLQkJaWYgKGRldnByaXYtPmNvdW50ID4gMCB8fCBkZXZwcml2LT5mb3JldmVyKSB7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSB8fCBkZXZwcml2LT5jb3VudCA+IDApIHsKIAkJCS8qIHdyaXRlIGRhdGEgcG9pbnQgdG8gYnVmZmVyICovCiAJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIHZhbCAmIHMtPm1heGRhdGEpOwogCQkJZGV2cHJpdi0+Y291bnQtLTsKQEAgLTUyNSw3ICs1MjYsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JaWYgKGRldnByaXYtPmNvdW50ID4gMCB8fCBkZXZwcml2LT5mb3JldmVyKSB7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FIHx8IGRldnByaXYtPmNvdW50ID4gMCkgewogCQkvKiBSZS1lbmFibGUgY2FyZCdzIGludGVycnVwdC4KIAkJICogV2UgYWxyZWFkeSBoYXZlIHNwaW5sb2NrLCBzbyBpbmRpcmVjdCBhZGRyZXNzaW5nIGlzIHNhZmUgKi8KIAkJZGFzODAwX2luZF93cml0ZShkZXYsIENPTlRST0wxX0lOVEUgfCBkZXZwcml2LT5kb19iaXRzLApAQCAtNjczLDcgKzY3NCw3IEBACiAKIHN0YXRpYyBpbnQgZGFzODAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0JY29uc3Qgc3RydWN0IGRhczgwMF9ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CisJY29uc3Qgc3RydWN0IGRhczgwMF9ib2FyZCAqdGhpc2JvYXJkOwogCXN0cnVjdCBkYXM4MDBfcHJpdmF0ZSAqZGV2cHJpdjsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1bnNpZ25lZCBpbnQgaXJxID0gaXQtPm9wdGlvbnNbMV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYwppbmRleCBjOGEzNmViLi5hZDdhNWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKQEAgLTI0MywxMyArMjQzLDM5IEBACiAJcmV0dXJuICpuczsKIH0KIAorc3RhdGljIGludCBkbW0zMmF0X2FpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGNoYW4wID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwl1bnNpZ25lZCBpbnQgcmFuZ2UwID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCWlmIChjaGFuICE9IChjaGFuMCArIGkpICUgcy0+bl9jaGFuKSB7CisJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHJhbmdlICE9IHJhbmdlMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkbW0zMmF0X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOwotCWludCBzdGFydF9jaGFuLCBnYWluLCBpOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTMyNSw1MCArMzUxLDI4IEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwotCQlkbW0zMmF0X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAotCQkJCSAgICBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQotCQkJZXJyKys7CisJCWFyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWRtbTMyYXRfbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJZG1tMzJhdF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKLQkJCQkgICAgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJCWVycisrOwotCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCi0JCSAgICBjbWQtPnNjYW5fYmVnaW5fYXJnIDwKLQkJICAgIGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgewotCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9Ci0JCQkgICAgY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOwotCQkJZXJyKys7CisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCWRtbTMyYXRfbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIGFyZyk7CisKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJYXJnID0gY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJCQkJIGFyZyk7CiAJCX0KIAl9CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qIHN0ZXAgNSBjaGVjayB0aGUgY2hhbm5lbCBsaXN0LCB0aGUgY2hhbm5lbCBsaXN0IGZvciB0aGlzCi0JICAgYm9hcmQgbXVzdCBiZSBjb25zZWN1dGl2ZSBhbmQgZ2FpbnMgbXVzdCBiZSB0aGUgc2FtZSAqLwotCi0JaWYgKGNtZC0+Y2hhbmxpc3QpIHsKLQkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOwotCQlzdGFydF9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKLQkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKLQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9Ci0JCQkgICAgKHN0YXJ0X2NoYW4gKyBpKSAlIHMtPm5fY2hhbikgewotCQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJCSAgICAgImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7Ci0JCQkJZXJyKys7Ci0JCQl9Ci0JCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgIT0gZ2FpbikgewotCQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJCSAgICAgImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKLQkJCQllcnIrKzsKLQkJCX0KLQkJfQotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBkbW0zMmF0X2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiA1OwpAQCAtNDY0LDEyICs0NjgsNiBAQAogCQlvdXRiKDB4ZmYsIGRldi0+aW9iYXNlICsgRE1NMzJBVF9DT05WKTsKIAl9CiAKLS8qCWZvcihpPTA7aTxjbWQtPmNoYW5saXN0X2xlbjtpKyspICovCi0vKgkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsaSoxMDApOyAqLwotCi0vKglzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7ICovCi0vKgljb21lZGlfZXZlbnQoZGV2LCBzKTsgKi8KLQogCXJldHVybiAwOwogCiB9CkBAIC01MTAsNyArNTA4LDcgQEAKIAogCQkJLyogaW52ZXJ0IHNpZ24gYml0IHRvIG1ha2UgcmFuZ2UgdW5zaWduZWQgKi8KIAkJCXNhbXAgPSAoKG1zYiBeIDB4MDA4MCkgPDwgOCkgKyBsc2I7Ci0JCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcCk7CisJCQljb21lZGlfYnVmX3B1dChzLCBzYW1wKTsKIAkJfQogCiAJCWlmIChkZXZwcml2LT5haV9zY2Fuc19sZWZ0ICE9IDB4ZmZmZmZmZmYpIHsJLyogVFJJR19DT1VOVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCmluZGV4IGQ0ZDRlNGIuLjQyNjMwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKQEAgLTU0NSw3ICs1NDUsNyBAQAogKi8KIHN0YXRpYyBpbnQgZHQyODAxX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0JY29uc3Qgc3RydWN0IGR0MjgwMV9ib2FyZCAqYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHQyODAxX2JvYXJkICpib2FyZDsKIAlzdHJ1Y3QgZHQyODAxX3ByaXZhdGUgKmRldnByaXY7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IGJvYXJkX2NvZGUsIHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKaW5kZXggMzc5NGI3ZS4uOTA0YzlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTQuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwOwotCWludCB0bXA7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtMTcwLDEwICsxNzAsOSBAQAogCiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCi0JdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKLQlkdDI4MTRfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwotCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKLQkJZXJyKys7CisJYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlkdDI4MTRfbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgYXJnKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiA0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCmluZGV4IDE2Y2MxMDAuLmMyYTY2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODJ4LmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCiAJCWlmIChkZXZwcml2LT5hZF8yc2NvbXApCiAJCQlkYXRhIF49IDEgPDwgKGJvYXJkLT5hZGJpdHMgLSAxKTsKLQkJcmV0ID0gY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRhdGEpOworCQlyZXQgPSBjb21lZGlfYnVmX3B1dChzLCBkYXRhKTsKIAogCQlpZiAocmV0ID09IDApCiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKQEAgLTU3OCw3ICs1NzgsNyBAQAogewogCWNvbnN0IHN0cnVjdCBkdDI4MnhfYm9hcmQgKmJvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC02MzMsMTAgKzYzMyw5IEBACiAKIAkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCiAKLQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOwotCWR0MjgyeF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQotCQllcnIrKzsKKwlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOworCWR0MjgyeF9uc190b190aW1lcigmYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCBhcmcpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CkBAIC04MjUsNyArODI0LDcgQEAKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC04NTIsNyArODUxLDcgQEAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIDUwMDApOwogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIDApOwotCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWF4KCZjbWQtPnNjYW5fZW5kX2FyZywgMik7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKIAogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJLyogYW55IGNvdW50IGlzIGFsbG93ZWQgKi8KQEAgLTg2NSwxMCArODY0LDkgQEAKIAogCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KIAotCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JZHQyODJ4X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCi0JCWVycisrOworCWFyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJZHQyODJ4X25zX3RvX3RpbWVyKCZhcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKQEAgLTg3OCwxMiArODc2LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgZHQyODJ4X2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCB4KQorCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdfbnVtKQogewogCXN0cnVjdCBkdDI4MnhfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJaW50IHNpemU7CiAKLQlpZiAoeCAhPSAwKQorCWlmICh0cmlnX251bSAhPSBjbWQtPnN0YXJ0X3NyYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzaXplID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIocywgZGV2cHJpdi0+ZG1hWzBdLmJ1ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYwppbmRleCA0MzZlNDUxLi40YWI0ZGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQzMDAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWRhdGEgPSByZWFkdyhkZXZwcml2LT5pb19hZGRyICsgRFBSX0FEQ19idWZmZXIgKyByZWFyKTsKLQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRhdGEpOworCQljb21lZGlfYnVmX3B1dChzLCBkYXRhKTsKIAkJcmVhcisrOwogCQlpZiAocmVhciA+PSBBSV9GSUZPX0RFUFRIKQogCQkJcmVhciA9IDA7CkBAIC00MTYsNyArNDE2LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgZHQza19ib2FyZHR5cGUgKnRoaXNfYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTQ2NiwyNSArNDY2LDIwIEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwotCQlkdDNrX25zX3RvX3RpbWVyKDEwMCwgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCi0JCQkJIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwotCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCi0JCQllcnIrKzsKKwkJYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJZHQza19uc190b190aW1lcigxMDAsICZhcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBhcmcpOwogCX0KIAogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJZHQza19uc190b190aW1lcig1MCwgJmNtZC0+Y29udmVydF9hcmcsCi0JCQkJIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKLQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgotCQkgICAgY21kLT5zY2FuX2JlZ2luX2FyZyA8Ci0JCSAgICBjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKLQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQotCQkJICAgIGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKLQkJCWVycisrOworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlkdDNrX25zX3RvX3RpbWVyKDUwLCAmYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQkJCQkgYXJnKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwppbmRleCAwOGQ3NjU1Li4yMjMzM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwpAQCAtMzYwLDEyICszNjAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnc2NfaHBkaV9jaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKGNoYW4gIT0gaSkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiY2hhbmxpc3QgbXVzdCBiZSBjaCAwIHRvIDMxIGluIG9yZGVyXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ3NjX2hwZGlfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7Ci0JaW50IGk7CiAKIAlpZiAocy0+aW9fYml0cykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTIsNiArNDEwLDggQEAKIAogCS8qIFN0ZXAgMzogY2hlY2sgaWYgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIAorCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKKwogCWlmICghY21kLT5jaGFubGlzdF9sZW4gfHwgIWNtZC0+Y2hhbmxpc3QpIHsKIAkJY21kLT5jaGFubGlzdF9sZW4gPSAzMjsKIAkJZXJyIHw9IC1FSU5WQUw7CkBAIC00MTEsMTcgKzQzMSw5IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CiAKLQkvKiBzdGVwIDU6IGNvbXBsYWluIGFib3V0IHNwZWNpYWwgY2hhbmxpc3QgY29uc2lkZXJhdGlvbnMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7Ci0JCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGkpIHsKLQkJCS8qICBYWFggY291bGQgc3VwcG9ydCA4IG9yIDE2IGNoYW5uZWxzICovCi0JCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAotCQkJCSJjaGFubGlzdCBtdXN0IGJlIGNoIDAgdG8gMzEgaW4gb3JkZXIiKTsKLQkJCWVyciB8PSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKQorCQllcnIgfD0gZ3NjX2hwZGlfY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2lpX3BjaTIwa2MuYwppbmRleCAzNTU4YWIzLi4yNTE2Y2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKQEAgLTQ2MSw2ICs0NjEsNyBAQAogCWlkID0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgSUkyMEtfSURfUkVHKTsKIAlzd2l0Y2ggKGlkICYgSUkyMEtfSURfTUFTSykgewogCWNhc2UgSUkyMEtfSURfUENJMjAwMDFDXzFBOgorCQloYXNfZGlvID0gZmFsc2U7CiAJCWJyZWFrOwogCWNhc2UgSUkyMEtfSURfUENJMjAwMDFDXzJBOgogCQloYXNfZGlvID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwppbmRleCBmMDJiMzFiLi4yNWNlMmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCkBAIC01OTgsNjcgKzU5OCwzNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQorc3RhdGljIGludCBtZTQwMDBfYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29uc3Qgc3RydWN0IG1lNDAwMF9ib2FyZCAqdGhpc2JvYXJkID0gY29tZWRpX2JvYXJkKGRldik7Ci0JaW50IGFyZWY7CisJY29uc3Qgc3RydWN0IG1lNDAwMF9ib2FyZCAqYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWF4X2RpZmZfY2hhbiA9IGJvYXJkLT5haV9kaWZmX25jaGFuOworCXVuc2lnbmVkIGludCBhcmVmMCA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CiAJaW50IGk7CiAKLQkvKiBDaGVjayB3aGV0aGVyIGEgY2hhbm5lbCBsaXN0IGlzIGF2YWlsYWJsZSAqLwotCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKLQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwgIk5vIGNoYW5uZWwgbGlzdCBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDaGVjayB0aGUgY2hhbm5lbCBsaXN0IHNpemUgKi8KLQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX0NPVU5UKSB7Ci0JCWRldl9lcnIoZGV2LT5jbGFzc19kZXYsICJDaGFubmVsIGxpc3QgaXMgdG8gbGFyZ2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDaGVjayB0aGUgcG9pbnRlciAqLwotCWlmICghY21kLT5jaGFubGlzdCkgewotCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LCAiTlVMTCBwb2ludGVyIHRvIGNoYW5uZWwgbGlzdFxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIENoZWNrIHdoZXRoZXIgYXJlZiBpcyBlcXVhbCBmb3IgYWxsIGVudHJpZXMgKi8KLQlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKIAlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSAhPSBhcmVmKSB7Ci0JCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAorCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCQl1bnNpZ25lZCBpbnQgYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKGFyZWYgIT0gYXJlZjApIHsKKwkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCiAJCQkJIk1vZGUgaXMgbm90IGVxdWFsIGZvciBhbGwgZW50cmllc1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAotCS8qIENoZWNrIHdoZXRoZXIgY2hhbm5lbHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBlbmRpbmcgKi8KLQlpZiAoYXJlZiA9PSBTREZfRElGRikgewotCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgPj0KLQkJCSAgICB0aGlzYm9hcmQtPmFpX2RpZmZfbmNoYW4pIHsKLQkJCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAorCQlpZiAoYXJlZiA9PSBTREZfRElGRikgeworCQkJaWYgKGNoYW4gPj0gbWF4X2RpZmZfY2hhbikgeworCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCiAJCQkJCSJDaGFubmVsIG51bWJlciB0byBoaWdoXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7Ci0JCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSA+PSB0aGlzYm9hcmQtPmFpX25jaGFuKSB7Ci0JCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwKLQkJCQkJIkNoYW5uZWwgbnVtYmVyIHRvIGhpZ2hcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQogCi0JLyogQ2hlY2sgaWYgYmlwb2xhciBpcyBzZXQgZm9yIGFsbCBlbnRyaWVzIHdoZW4gaW4gZGlmZmVyZW50aWFsIG1vZGUgKi8KLQlpZiAoYXJlZiA9PSBTREZfRElGRikgewotCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IDEgJiYKLQkJCSAgICBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSAyKSB7Ci0JCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwKKwkJCWlmICghY29tZWRpX3JhbmdlX2lzX2JpcG9sYXIocywgcmFuZ2UpKSB7CisJCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKIAkJCQkgICAgICAgIkJpcG9sYXIgaXMgbm90IHNlbGVjdGVkIGluIGRpZmZlcmVudGlhbCBtb2RlXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTkzNCwyMiArOTAyLDEzIEBACiAJCWVyciB8PSAtRUlOVkFMOwogCX0KIAotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSAmJiBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX05PTkUpIHsKLQl9IGVsc2UgaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgotCQkgICBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX05PTkUpIHsKLQl9IGVsc2UgaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FICYmCi0JCSAgIGNtZC0+c2Nhbl9lbmRfc3JjID09IFRSSUdfQ09VTlQpIHsKLQl9IGVsc2UgaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgotCQkgICBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UKSB7Ci0JfSBlbHNlIHsKLQkJZXJyIHw9IC1FSU5WQUw7Ci0JfQotCiAJaWYgKGVycikKIAkJcmV0dXJuIDI7CiAKIAkvKiBTdGVwIDM6IGNoZWNrIGlmIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisKIAlpZiAoY21kLT5jaGFubGlzdF9sZW4gPCAxKSB7CiAJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKIAkJZXJyIHw9IC1FSU5WQUw7CkBAIC0xMDkxLDEwICsxMDUwLDExIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CiAKLQkvKgotCSAqIFN0YWdlIDUuIENoZWNrIHRoZSBjaGFubmVsIGxpc3QuCi0JICovCi0JaWYgKGFpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKSkKKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBtZTQwMDBfYWlfY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOworCisJaWYgKGVycikKIAkJcmV0dXJuIDU7CiAKIAlyZXR1cm4gMDsKQEAgLTExNjQsNyArMTEyNCw3IEBACiAJCQlsdmFsID0gaW5sKGRldi0+aW9iYXNlICsgTUU0MDAwX0FJX0RBVEFfUkVHKSAmIDB4RkZGRjsKIAkJCWx2YWwgXj0gMHg4MDAwOwogCi0JCQlpZiAoIWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBsdmFsKSkgeworCQkJaWYgKCFjb21lZGlfYnVmX3B1dChzLCBsdmFsKSkgewogCQkJCS8qCiAJCQkJICogQnVmZmVyIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24KIAkJCQkgKiBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cwpAQCAtMTIwOSw3ICsxMTY5LDcgQEAKIAkJCWx2YWwgPSBpbmwoZGV2LT5pb2Jhc2UgKyBNRTQwMDBfQUlfREFUQV9SRUcpICYgMHhGRkZGOwogCQkJbHZhbCBePSAweDgwMDA7CiAKLQkJCWlmICghY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGx2YWwpKSB7CisJCQlpZiAoIWNvbWVkaV9idWZfcHV0KHMsIGx2YWwpKSB7CiAJCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwgIkJ1ZmZlciBvdmVyZmxvd1xuIik7CiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CiAJCQkJYnJlYWs7CkBAIC0xMzkyLDYgKzEzNTIsNyBAQAogCQkJCSAgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCBtZTQwMDBfaW5mbyAqaW5mbyA9IGRldi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWludCBlcnI7CiAKIAlzd2l0Y2ggKGRhdGFbMF0pIHsKQEAgLTEzOTksMTYgKzEzNjAsMTcgQEAKIAkJaWYgKGluc24tPm4gIT0gMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWVyciA9IGk4MjU0X2xvYWQoaW5mby0+dGltZXJfcmVnYmFzZSwgMCwgaW5zbi0+Y2hhbnNwZWMsIDAsCi0JCQkJSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlkpOworCQllcnIgPSBpODI1NF9zZXRfbW9kZShpbmZvLT50aW1lcl9yZWdiYXNlLCAwLCBjaGFuLAorCQkJCSAgICAgSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlkpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKKwkJaTgyNTRfd3JpdGUoaW5mby0+dGltZXJfcmVnYmFzZSwgMCwgY2hhbiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgR1BDVF9TRVRfT1BFUkFUSU9OOgogCQlpZiAoaW5zbi0+biAhPSAyKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZXJyID0gaTgyNTRfc2V0X21vZGUoaW5mby0+dGltZXJfcmVnYmFzZSwgMCwgaW5zbi0+Y2hhbnNwZWMsCisJCWVyciA9IGk4MjU0X3NldF9tb2RlKGluZm8tPnRpbWVyX3JlZ2Jhc2UsIDAsIGNoYW4sCiAJCQkJKGRhdGFbMV0gPDwgMSkgfCBJODI1NF9CSU5BUlkpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCmluZGV4IDFhNTcyYzguLjE5YzAyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYwpAQCAtMzA3LDggKzMwNyw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywKLQkJICAgIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQorCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAl1bnNpZ25lZCBpbnQgbl9saW5rczsKIAlpbnQgaTsKIApAQCAtMzMzLDcgKzMzNCw3IEBACiAJCQkgICAgICAgbl9saW5rcyAqIHNpemVvZihzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvciksCiAJCQkgICAgICAgJnJpbmctPmRlc2NyaXB0b3JzX2RtYV9hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJpbmctPmRlc2NyaXB0b3JzKSB7Ci0JCWRldl9lcnIoYXN5bmMtPnN1YmRldmljZS0+ZGV2aWNlLT5jbGFzc19kZXYsCisJCWRldl9lcnIocy0+ZGV2aWNlLT5jbGFzc19kZXYsCiAJCQkibWl0ZTogcmluZyBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC01MjUsMTUgKzUyNiwxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobWl0ZV9kbWFfZGlzYXJtKTsKIAogaW50IG1pdGVfc3luY19pbnB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLAotCQkJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCisJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGFzeW5jLT5zdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAlpbnQgY291bnQ7CiAJdW5zaWduZWQgaW50IG5ieXRlcywgb2xkX2FsbG9jX2NvdW50OwogCiAJb2xkX2FsbG9jX2NvdW50ID0gYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudDsKIAkvKiB3cml0ZSBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbiAqLwotCWNvbWVkaV9idWZfd3JpdGVfYWxsb2MoYXN5bmMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CisJY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCiAJbmJ5dGVzID0gbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihtaXRlX2NoYW4pOwogCWlmICgoaW50KShtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X3ViKG1pdGVfY2hhbikgLQpAQCAtNTUwLDcgKzU1MSw3IEBACiAJaWYgKGNvdW50IDw9IDApCiAJCXJldHVybiAwOwogCi0JY29tZWRpX2J1Zl93cml0ZV9mcmVlKGFzeW5jLCBjb3VudCk7CisJY29tZWRpX2J1Zl93cml0ZV9mcmVlKHMsIGNvdW50KTsKIAljZmNfaW5jX3NjYW5fcHJvZ3Jlc3MocywgY291bnQpOwogCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOwogCXJldHVybiAwOwpAQCAtNTU4LDI4ICs1NTksMjUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG1pdGVfc3luY19pbnB1dF9kbWEpOwogCiBpbnQgbWl0ZV9zeW5jX291dHB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLAotCQkJIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQorCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWludCBjb3VudDsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1MzIgc3RvcF9jb3VudCA9IGNtZC0+c3RvcF9hcmcgKiBjZmNfYnl0ZXNfcGVyX3NjYW4ocyk7CisJdW5zaWduZWQgaW50IG9sZF9hbGxvY19jb3VudCA9IGFzeW5jLT5idWZfcmVhZF9hbGxvY19jb3VudDsKIAl1MzIgbmJ5dGVzX3ViLCBuYnl0ZXNfbGI7Ci0JdW5zaWduZWQgaW50IG9sZF9hbGxvY19jb3VudDsKLQl1MzIgc3RvcF9jb3VudCA9Ci0JICAgIGFzeW5jLT5jbWQuc3RvcF9hcmcgKiBjZmNfYnl0ZXNfcGVyX3NjYW4oYXN5bmMtPnN1YmRldmljZSk7CisJaW50IGNvdW50OwogCi0Jb2xkX2FsbG9jX2NvdW50ID0gYXN5bmMtPmJ1Zl9yZWFkX2FsbG9jX2NvdW50OwogCS8qICByZWFkIGFsbG9jIGFzIG11Y2ggYXMgd2UgY2FuICovCi0JY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOworCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCW5ieXRlc19sYiA9IG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihtaXRlX2NoYW4pOwotCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKLQkgICAgKGludCkobmJ5dGVzX2xiIC0gc3RvcF9jb3VudCkgPiAwKQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgKGludCkobmJ5dGVzX2xiIC0gc3RvcF9jb3VudCkgPiAwKQogCQluYnl0ZXNfbGIgPSBzdG9wX2NvdW50OwogCW5ieXRlc191YiA9IG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV91YihtaXRlX2NoYW4pOwotCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKLQkgICAgKGludCkobmJ5dGVzX3ViIC0gc3RvcF9jb3VudCkgPiAwKQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgKGludCkobmJ5dGVzX3ViIC0gc3RvcF9jb3VudCkgPiAwKQogCQluYnl0ZXNfdWIgPSBzdG9wX2NvdW50OwogCWlmICgoaW50KShuYnl0ZXNfdWIgLSBvbGRfYWxsb2NfY291bnQpID4gMCkgewotCQlkZXZfd2Fybihhc3luYy0+c3ViZGV2aWNlLT5kZXZpY2UtPmNsYXNzX2RldiwKLQkJCSAibWl0ZTogRE1BIHVuZGVycnVuXG4iKTsKKwkJZGV2X3dhcm4ocy0+ZGV2aWNlLT5jbGFzc19kZXYsICJtaXRlOiBETUEgdW5kZXJydW5cbiIpOwogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTU4OCw3ICs1ODYsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChjb3VudCkgewotCQljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgY291bnQpOworCQljb21lZGlfYnVmX3JlYWRfZnJlZShzLCBjb3VudCk7CiAJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5oCmluZGV4IDc4ZjIzNTcuLmU2ZTU4ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuaApAQCAtMTA2LDkgKzEwNiw5IEBACiB2b2lkIG1pdGVfZG1hX2FybShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogdm9pZCBtaXRlX2RtYV9kaXNhcm0oc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIGludCBtaXRlX3N5bmNfaW5wdXRfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwKLQkJCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKTsKKwkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIGludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sCi0JCQkgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOworCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIHUzMiBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7CiB1MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV91YihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogdTMyIG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwpAQCAtMTIwLDcgKzEyMCw3IEBACiB2b2lkIG1pdGVfcHJlcF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLAogCQkgICB1bnNpZ25lZCBpbnQgbnVtX2RldmljZV9iaXRzLCB1bnNpZ25lZCBpbnQgbnVtX21lbW9yeV9iaXRzKTsKIGludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywKLQkJICAgIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKTsKKwkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIAogc3RhdGljIGlubGluZSBpbnQgQ0hBTl9PRkZTRVQoaW50IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYwppbmRleCA4NjBmYzgxLi5jOGIxZmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAoc3RhdHVzICYgTkk2NTI3X1NUQVRVU19FREdFKSB7Ci0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwkJY29tZWRpX2J1Zl9wdXQocywgMCk7CiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7CiAJfQpAQCAtMjUzLDcgKzI1Myw3IEBACiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdGFydF9hcmcsIDApOwogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIDApOwogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIDApOwotCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLCAxKTsKKwllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOwogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RvcF9hcmcsIDApOwogCiAJaWYgKGVycikKQEAgLTQyMSw2ICs0MjEsNyBAQAogCQlzLT5yYW5nZV90YWJsZQk9ICZyYW5nZV9kaWdpdGFsOwogCQlzLT5pbnNuX2NvbmZpZwk9IG5pNjUyN19pbnRyX2luc25fY29uZmlnOwogCQlzLT5pbnNuX2JpdHMJPSBuaTY1MjdfaW50cl9pbnNuX2JpdHM7CisJCXMtPmxlbl9jaGFubGlzdAk9IDE7CiAJCXMtPmRvX2NtZHRlc3QJPSBuaTY1MjdfaW50cl9jbWR0ZXN0OwogCQlzLT5kb19jbWQJPSBuaTY1MjdfaW50cl9jbWQ7CiAJCXMtPmNhbmNlbAk9IG5pNjUyN19pbnRyX2NhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCmluZGV4IDZlNDIwMDEuLjlhMTM5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdywKIAkgICAgICAgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CiAKLQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgMCk7CisJY29tZWRpX2J1Zl9wdXQocywgMCk7CiAJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOwogCWNvbWVkaV9ldmVudChkZXYsIHMpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCAwKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCAwKTsKLQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fZW5kX2FyZywgMSk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0b3BfYXJnLCAwKTsKIAogCWlmIChlcnIpCkBAIC00OTEsNyArNDkxLDYgQEAKIAkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgbmlfNjV4eF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCS8qIHN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsgKi8KIAogCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCiAJICAgICAgIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xlYXJfUmVnaXN0ZXIpOwpAQCAtNjcxLDYgKzY3MCw3IEBACiAJcy0+bl9jaGFuID0gMTsKIAlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwogCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdAk9IDE7CiAJcy0+ZG9fY21kdGVzdCA9IG5pXzY1eHhfaW50cl9jbWR0ZXN0OwogCXMtPmRvX2NtZCA9IG5pXzY1eHhfaW50cl9jbWQ7CiAJcy0+Y2FuY2VsID0gbmlfNjV4eF9pbnRyX2NhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCmluZGV4IDBkNGI5MDEuLjYzNGNkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwpAQCAtODIzLDkgKzgyMyw5IEBACiAKIAkvKiBsb2NrIHRvIGF2b2lkIHJhY2Ugd2l0aCBjb21lZGlfcG9sbCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pbnRlcnJ1cHRfbG9jaywgZmxhZ3MpOwotCW1pdGVfc3luY19pbnB1dF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJbWl0ZV9zeW5jX2lucHV0X2RtYShjb3VudGVyLT5taXRlX2NoYW4sIHMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmludGVycnVwdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzLT5hc3luYyk7CisJcmV0dXJuIGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzKTsKIH0KIAogc3RhdGljIGludCBuaV82NjB4X2J1Zl9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTgzNiw3ICs4MzYsNyBAQAogCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbWl0ZV9idWZfY2hhbmdlKG1pdGVfcmluZyhkZXZwcml2LCBjb3VudGVyKSwgcy0+YXN5bmMpOworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShtaXRlX3JpbmcoZGV2cHJpdiwgY291bnRlciksIHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCmluZGV4IDRlMzliMWYuLjViZDE5NDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYwpAQCAtMjg3LDE0ICsyODcsNTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhMjE1MF9haV9jaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGNoYW4wID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwl1bnNpZ25lZCBpbnQgYXJlZjAgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCWludCBpOworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDIgJiYgKGNoYW4wID09IDEgfHwgY2hhbjAgPT0gMykpIHsKKwkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCSJsZW5ndGggMiBjaGFubGlzdCBtdXN0IGJlIGNoYW5uZWxzIDAsMSBvciBjaGFubmVscyAyLDNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMykgeworCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJImNoYW5saXN0IG11c3QgaGF2ZSAxLDIgb3IgNCBjaGFubmVsc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJdW5zaWduZWQgaW50IGFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCWlmIChjaGFuICE9IChjaGFuMCArIGkpKSB7CisJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY2hhbiA9PSAyKQorCQkJYXJlZjAgPSBhcmVmOworCQlpZiAoYXJlZiAhPSBhcmVmMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiY2hhbm5lbHMgMC8xIGFuZCAyLzMgbXVzdCBoYXZlIHRoZSBzYW1lIGFuYWxvZyByZWZlcmVuY2VcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhMjE1MF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJY29uc3Qgc3RydWN0IGEyMTUwX2JvYXJkICp0aGlzYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOwotCWludCBzdGFydENoYW47Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtMzM5LDQyICszNzksMTcgQEAKIAkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCiAKIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JCWEyMTUwX2dldF90aW1pbmcoZGV2LCAmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyk7Ci0JCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKLQkJCWVycisrOworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlhMjE1MF9nZXRfdGltaW5nKGRldiwgJmFyZywgY21kLT5mbGFncyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCiAJaWYgKGVycikKIAkJcmV0dXJuIDQ7CiAKLQkvKiAgY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMgKi8KLQlpZiAoY21kLT5jaGFubGlzdCkgewotCQlzdGFydENoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOwotCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewotCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gKHN0YXJ0Q2hhbiArIGkpKSB7Ci0JCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJICAgICAiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKLQkJCQllcnIrKzsKLQkJCX0KLQkJfQotCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMiAmJiBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pID09IDEpIHsKLQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJICAgICAibGVuZ3RoIDIgY2hhbmxpc3QgbXVzdCBiZSBjaGFubmVscyAwLDEgb3IgY2hhbm5lbHMgMiwzIik7Ci0JCQllcnIrKzsKLQkJfQotCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMykgewotCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkgICAgICJjaGFubGlzdCBtdXN0IGhhdmUgMSwyIG9yIDQgY2hhbm5lbHMiKTsKLQkJCWVycisrOwotCQl9Ci0JCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pICE9IENSX0FSRUYoY21kLT5jaGFubGlzdFsxXSkgfHwKLQkJICAgIENSX0FSRUYoY21kLT5jaGFubGlzdFsyXSkgIT0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzNdKSkgewotCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkgICAgICJjaGFubmVscyAwLzEgYW5kIDIvMyBtdXN0IGhhdmUgdGhlIHNhbWUgYW5hbG9nIHJlZmVyZW5jZSIpOwotCQkJZXJyKys7Ci0JCX0KLQl9CisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKQorCQllcnIgfD0gYTIxNTBfYWlfY2hlY2tfY2hhbmxpc3QoZGV2LCBzLCBjbWQpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIDU7CkBAIC0zODcsNiArNDAyLDcgQEAKIAlzdHJ1Y3QgYTIxNTBfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2UgPSBkZXYtPmlvYmFzZSArIEk4MjUzX0JBU0VfUkVHOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAl1bnNpZ25lZCBpbnQgb2xkX2NvbmZpZ19iaXRzID0gZGV2cHJpdi0+Y29uZmlnX2JpdHM7CiAJdW5zaWduZWQgaW50IHRyaWdnZXJfYml0czsKQEAgLTQ1NCw3ICs0NzAsOCBAQAogCW91dHcoZGV2cHJpdi0+aXJxX2RtYV9iaXRzLCBkZXYtPmlvYmFzZSArIElSUV9ETUFfQ05UUkxfUkVHKTsKIAogCS8qICBtYXkgbmVlZCB0byB3YWl0IDcyIHNhbXBsaW5nIHBlcmlvZHMgaWYgdGltaW5nIHdhcyBjaGFuZ2VkICovCi0JaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIEk4MjUzX0JBU0VfUkVHLCAwLCAyLCA3MiwgMCk7CisJaTgyNTRfc2V0X21vZGUodGltZXJfYmFzZSwgMCwgMiwgSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlkpOworCWk4MjU0X3dyaXRlKHRpbWVyX2Jhc2UsIDAsIDIsIDcyKTsKIAogCS8qICBzZXR1cCBzdGFydCB0cmlnZ2VyaW5nICovCiAJdHJpZ2dlcl9iaXRzID0gMDsKQEAgLTY3OSw3ICs2OTYsNyBAQAogCiBzdGF0aWMgaW50IGEyMTUwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0JY29uc3Qgc3RydWN0IGEyMTUwX2JvYXJkICp0aGlzYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKKwljb25zdCBzdHJ1Y3QgYTIxNTBfYm9hcmQgKnRoaXNib2FyZDsKIAlzdHJ1Y3QgYTIxNTBfcHJpdmF0ZSAqZGV2cHJpdjsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1bnNpZ25lZCBpbnQgaXJxID0gaXQtPm9wdGlvbnNbMV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hby5jCmluZGV4IDEwZTNlOTQ3Li5jOTNiNDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYwpAQCAtMzEwLDYgKzMxMCw3IEBACiBzdGF0aWMgdm9pZCBhdGFvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0YW9fcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2UgPSBkZXYtPmlvYmFzZSArIEFUQU9fODJDNTNfQkFTRTsKIAogCS8qIFRoaXMgaXMgdGhlIHJlc2V0IHNlcXVlbmNlIGRlc2NyaWJlZCBpbiB0aGUgbWFudWFsICovCiAKQEAgLTMxNywxMCArMzE4LDkgQEAKIAlvdXR3KGRldnByaXYtPmNmZzEsIGRldi0+aW9iYXNlICsgQVRBT19DRkcxX1JFRyk7CiAKIAkvKiBQdXQgb3V0cHV0cyBvZiBjb3VudGVyIDEgYW5kIGNvdW50ZXIgMiBpbiBhIGhpZ2ggc3RhdGUgKi8KLQlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgQVRBT184MkM1M19CQVNFLCAwLAotCQkgICAwLCAweDAwMDMsIEk4MjU0X01PREU0IHwgSTgyNTRfQklOQVJZKTsKLQlpODI1NF9zZXRfbW9kZShkZXYtPmlvYmFzZSArIEFUQU9fODJDNTNfQkFTRSwgMCwKLQkJICAgMSwgSTgyNTRfTU9ERTQgfCBJODI1NF9CSU5BUlkpOworCWk4MjU0X3NldF9tb2RlKHRpbWVyX2Jhc2UsIDAsIDAsIEk4MjU0X01PREU0IHwgSTgyNTRfQklOQVJZKTsKKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAxLCBJODI1NF9NT0RFNCB8IEk4MjU0X0JJTkFSWSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMCwgMHgwMDAzKTsKIAogCW91dHcoQVRBT19DRkcyX0NBTExEX05PUCwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzJfUkVHKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYwppbmRleCA0MjYyMzg1Li42YWQyN2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCi0JY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSArIEFEX0ZJRk9fUkVHKSk7CisJY29tZWRpX2J1Zl9wdXQocywgaW53KGRldi0+aW9iYXNlICsgQURfRklGT19SRUcpKTsKIAogCWNvbWVkaV9ldmVudChkZXYsIHMpOwogCXJldHVybiBJUlFfSEFORExFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKaW5kZXggZjQyMTZlOC4uM2UzZjk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKQEAgLTE3MSwzMiArMTcxLDM5IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbGFicGNfY291bnRlcl9sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGJhc2VfYWRkcmVzcywKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IG1vZGUpCitzdGF0aWMgdm9pZCBsYWJwY19jb3VudGVyX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJhc2VfYWRkcmVzcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQogewogCWNvbnN0IHN0cnVjdCBsYWJwY19ib2FyZGluZm8gKmJvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAKLQlpZiAoYm9hcmQtPmhhc19tbWlvKQotCQlyZXR1cm4gaTgyNTRfbW1fbG9hZCgodm9pZCBfX2lvbWVtICopYmFzZV9hZGRyZXNzLCAwLAotCQkJCSAgICAgY291bnRlcl9udW1iZXIsIGNvdW50LCBtb2RlKTsKLQllbHNlCi0JCXJldHVybiBpODI1NF9sb2FkKGJhc2VfYWRkcmVzcywgMCwgY291bnRlcl9udW1iZXIsIGNvdW50LCBtb2RlKTsKKwlpZiAoYm9hcmQtPmhhc19tbWlvKSB7CisJCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKWJhc2VfYWRkcmVzczsKKworCQlpODI1NF9tbV9zZXRfbW9kZShtbWlvX2Jhc2UsIDAsIGNvdW50ZXJfbnVtYmVyLCBtb2RlKTsKKwkJaTgyNTRfbW1fd3JpdGUobW1pb19iYXNlLCAwLCBjb3VudGVyX251bWJlciwgY291bnQpOworCX0gZWxzZSB7CisJCWk4MjU0X3NldF9tb2RlKGJhc2VfYWRkcmVzcywgMCwgY291bnRlcl9udW1iZXIsIG1vZGUpOworCQlpODI1NF93cml0ZShiYXNlX2FkZHJlc3MsIDAsIGNvdW50ZXJfbnVtYmVyLCBjb3VudCk7CisJfQogfQogCi1zdGF0aWMgaW50IGxhYnBjX2NvdW50ZXJfc2V0X21vZGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLAotCQkJCSAgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLAotCQkJCSAgdW5zaWduZWQgaW50IG1vZGUpCitzdGF0aWMgdm9pZCBsYWJwY19jb3VudGVyX3NldF9tb2RlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsCisJCQkJICAgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLAorCQkJCSAgIHVuc2lnbmVkIGludCBtb2RlKQogewogCWNvbnN0IHN0cnVjdCBsYWJwY19ib2FyZGluZm8gKmJvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAKLQlpZiAoYm9hcmQtPmhhc19tbWlvKQotCQlyZXR1cm4gaTgyNTRfbW1fc2V0X21vZGUoKHZvaWQgX19pb21lbSAqKWJhc2VfYWRkcmVzcywgMCwKLQkJCQkJIGNvdW50ZXJfbnVtYmVyLCBtb2RlKTsKLQllbHNlCi0JCXJldHVybiBpODI1NF9zZXRfbW9kZShiYXNlX2FkZHJlc3MsIDAsIGNvdW50ZXJfbnVtYmVyLCBtb2RlKTsKKwlpZiAoYm9hcmQtPmhhc19tbWlvKSB7CisJCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKWJhc2VfYWRkcmVzczsKKworCQlpODI1NF9tbV9zZXRfbW9kZShtbWlvX2Jhc2UsIDAsIGNvdW50ZXJfbnVtYmVyLCBtb2RlKTsKKwl9IGVsc2UgeworCQlpODI1NF9zZXRfbW9kZShiYXNlX2FkZHJlc3MsIDAsIGNvdW50ZXJfbnVtYmVyLCBtb2RlKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgbGFicGNfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQpAQCAtMzQ5LDEwICszNTYsOCBAQAogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y21kNCwgZGV2LT5pb2Jhc2UgKyBDTUQ0X1JFRyk7CiAKIAkvKiBpbml0aWFsaXplIHBhY2VyIGNvdW50ZXIgdG8gcHJldmVudCBhbnkgcHJvYmxlbXMgKi8KLQlyZXQgPSBsYWJwY19jb3VudGVyX3NldF9tb2RlKGRldiwgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQkFTRV9SRUcsCi0JCQkJICAgICAwLCBJODI1NF9NT0RFMik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlsYWJwY19jb3VudGVyX3NldF9tb2RlKGRldiwgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQkFTRV9SRUcsCisJCQkgICAgICAgMCwgSTgyNTRfTU9ERTIpOwogCiAJbGFicGNfY2xlYXJfYWRjX2ZpZm8oZGV2KTsKIApAQCAtNTQ2LDcyICs1NTEsNjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsYWJwY19haV9jaGFubGlzdF9pbnZhbGlkKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAotCQkJCSAgICAgZW51bSBzY2FuX21vZGUgbW9kZSkKK3N0YXRpYyBpbnQgbGFicGNfYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewotCWludCBjaGFubmVsLCByYW5nZSwgYXJlZiwgaTsKLQotCWlmIChjbWQtPmNoYW5saXN0ID09IE5VTEwpCi0JCXJldHVybiAwOworCWVudW0gc2Nhbl9tb2RlIG1vZGUgPSBsYWJwY19haV9zY2FuX21vZGUoY21kKTsKKwl1bnNpZ25lZCBpbnQgY2hhbjAgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCXVuc2lnbmVkIGludCByYW5nZTAgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwl1bnNpZ25lZCBpbnQgYXJlZjAgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCWludCBpOwogCiAJaWYgKG1vZGUgPT0gTU9ERV9TSU5HTEVfQ0hBTikKIAkJcmV0dXJuIDA7CiAKLQlpZiAobW9kZSA9PSBNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMKSB7Ci0JCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDB4ZmYpIHsKLQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJICAgICAibmlfbGFicGM6IGNoYW5saXN0IHRvbyBsb25nIGZvciBzaW5nbGUgY2hhbm5lbCBpbnRlcnZhbCBtb2RlXG4iKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7Ci0JcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKLQlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKLQogCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJdW5zaWduZWQgaW50IHJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSk7CisJCXVuc2lnbmVkIGludCBhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKTsKIAogCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBNT0RFX1NJTkdMRV9DSEFOOgorCQkJYnJlYWs7CiAJCWNhc2UgTU9ERV9TSU5HTEVfQ0hBTl9JTlRFUlZBTDoKLQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGNoYW5uZWwpIHsKLQkJCQljb21lZGlfZXJyb3IoZGV2LAotCQkJCQkgICAgICJjaGFubmVsIHNjYW5uaW5nIG9yZGVyIHNwZWNpZmllZCBpbiBjaGFubGlzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLlxuIik7Ci0JCQkJcmV0dXJuIDE7CisJCQlpZiAoY2hhbiAhPSBjaGFuMCkgeworCQkJCWRldl9kYmcoZGV2LT5jbGFzc19kZXYsCisJCQkJCSJjaGFubmVsIHNjYW5uaW5nIG9yZGVyIHNwZWNpZmllZCBpbiBjaGFubGlzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE1PREVfTVVMVF9DSEFOX1VQOgotCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gaSkgewotCQkJCWNvbWVkaV9lcnJvcihkZXYsCi0JCQkJCSAgICAgImNoYW5uZWwgc2Nhbm5pbmcgb3JkZXIgc3BlY2lmaWVkIGluIGNoYW5saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUuXG4iKTsKLQkJCQlyZXR1cm4gMTsKKwkJCWlmIChjaGFuICE9IGkpIHsKKwkJCQlkZXZfZGJnKGRldi0+Y2xhc3NfZGV2LAorCQkJCQkiY2hhbm5lbCBzY2FubmluZyBvcmRlciBzcGVjaWZpZWQgaW4gY2hhbmxpc3QgaXMgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBNT0RFX01VTFRfQ0hBTl9ET1dOOgotCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KLQkJCSAgICBjbWQtPmNoYW5saXN0X2xlbiAtIGkgLSAxKSB7Ci0JCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkJICAgICAiY2hhbm5lbCBzY2FubmluZyBvcmRlciBzcGVjaWZpZWQgaW4gY2hhbmxpc3QgaXMgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS5cbiIpOwotCQkJCXJldHVybiAxOworCQkJaWYgKGNoYW4gIT0gKGNtZC0+Y2hhbmxpc3RfbGVuIC0gaSAtIDEpKSB7CisJCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkJImNoYW5uZWwgc2Nhbm5pbmcgb3JkZXIgc3BlY2lmaWVkIGluIGNoYW5saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmVcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LAotCQkJCSJuaV9sYWJwYzogYnVnISBpbiBjaGFubGlzdCBjaGVja1xuIik7Ci0JCQlyZXR1cm4gMTsKLQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IHJhbmdlKSB7Ci0JCQljb21lZGlfZXJyb3IoZGV2LAotCQkJCSAgICAgImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSByYW5nZVxuIik7Ci0JCQlyZXR1cm4gMTsKKwkJaWYgKHJhbmdlICE9IHJhbmdlMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJhbmdlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgIT0gYXJlZikgewotCQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCQkgICAgICJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlXG4iKTsKLQkJCXJldHVybiAxOworCQlpZiAoYXJlZiAhPSBhcmVmMCkgeworCQkJZGV2X2RiZyhkZXYtPmNsYXNzX2RldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJlZmVyZW5jZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIApAQCAtNjYxLDggKzY1NCwxNCBAQAogCiAJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JaWYgKGNtZC0+c3RhcnRfYXJnID09IFRSSUdfTk9XKQorCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIHN0YXJ0X2FyZyB2YWx1ZSBpcyBpZ25vcmVkICovCisJCWJyZWFrOworCX0KIAogCWlmICghY21kLT5jaGFubGlzdF9sZW4pCiAJCWVyciB8PSAtRUlOVkFMOwpAQCAtNzExLDcgKzcxMCwxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiA0OwogCi0JaWYgKGxhYnBjX2FpX2NoYW5saXN0X2ludmFsaWQoZGV2LCBjbWQsIG1vZGUpKQorCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cyAqLworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkKKwkJZXJyIHw9IGxhYnBjX2FpX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKKworCWlmIChlcnIpCiAJCXJldHVybiA1OwogCiAJcmV0dXJuIDA7CkBAIC03MzIsNyArNzM1LDYgQEAKIAl1bnNpZ25lZCBpbnQgYXJlZiA9IENSX0FSRUYoY2hhbnNwZWMpOwogCWVudW0gdHJhbnNmZXJfdHlwZSB4ZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKIAogCS8qIG1ha2Ugc3VyZSBib2FyZCBpcyBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB1cCBhY3F1aXNpdGlvbiAqLwogCWxhYnBjX2NhbmNlbChkZXYsIHMpOwpAQCAtNzQ3LDE3ICs3NDksMTIgQEAKIAkJICogbG9hZCBjb3VudGVyIGExIHdpdGggY291bnQgb2YgMwogCQkgKiAocGMrIG1hbnVhbCBzYXlzIHRoaXMgaXMgbWluaW11bSBhbGxvd2VkKSB1c2luZyBtb2RlIDAKIAkJICovCi0JCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAotCQkJCQkgMSwgMywgSTgyNTRfTU9ERTApOworCQlsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9CQVNFX1JFRywKKwkJCQkgICAxLCAzLCBJODI1NF9NT0RFMCk7CiAJfSBlbHNlCXsKIAkJLyoganVzdCBwdXQgY291bnRlciBhMSBpbiBtb2RlIDAgdG8gc2V0IGl0cyBvdXRwdXQgbG93ICovCi0JCXJldCA9IGxhYnBjX2NvdW50ZXJfc2V0X21vZGUoZGV2LAotCQkJCQkgICAgIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAotCQkJCQkgICAgIDEsIEk4MjU0X01PREUwKTsKLQl9Ci0JaWYgKHJldCkgewotCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGExIik7Ci0JCXJldHVybiByZXQ7CisJCWxhYnBjX2NvdW50ZXJfc2V0X21vZGUoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9CQVNFX1JFRywKKwkJCQkgICAgICAgMSwgSTgyNTRfTU9ERTApOwogCX0KIAogCS8qIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2Qgd2Ugd2lsbCB1c2UgdG8gdHJhbnNmZXIgZGF0YSAqLwpAQCAtODAyLDM4ICs3OTksMjUgQEAKIAkJLyogIHNldCB1cCBwYWNpbmcgKi8KIAkJbGFicGNfYWRjX3RpbWluZyhkZXYsIGNtZCwgbW9kZSk7CiAJCS8qICBsb2FkIGNvdW50ZXIgYjAgaW4gbW9kZSAzICovCi0JCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9CX0JBU0VfUkVHLAotCQkJCQkgMCwgZGV2cHJpdi0+ZGl2aXNvcl9iMCwgSTgyNTRfTU9ERTMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIGxvYWRpbmcgY291bnRlciBiMCIpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJCWxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9CX0JBU0VfUkVHLAorCQkJCSAgIDAsIGRldnByaXYtPmRpdmlzb3JfYjAsIEk4MjU0X01PREUzKTsKIAl9CiAJLyogIHNldCB1cCBjb252ZXJzaW9uIHBhY2luZyAqLwogCWlmIChsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQsIG1vZGUpKSB7CiAJCS8qICBsb2FkIGNvdW50ZXIgYTAgaW4gbW9kZSAyICovCi0JCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAotCQkJCQkgMCwgZGV2cHJpdi0+ZGl2aXNvcl9hMCwgSTgyNTRfTU9ERTIpOworCQlsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9CQVNFX1JFRywKKwkJCQkgICAwLCBkZXZwcml2LT5kaXZpc29yX2EwLCBJODI1NF9NT0RFMik7CiAJfSBlbHNlIHsKIAkJLyogaW5pdGlhbGl6ZSBwYWNlciBjb3VudGVyIHRvIHByZXZlbnQgYW55IHByb2JsZW1zICovCi0JCXJldCA9IGxhYnBjX2NvdW50ZXJfc2V0X21vZGUoZGV2LAotCQkJCQkgICAgIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAotCQkJCQkgICAgIDAsIEk4MjU0X01PREUyKTsKLQl9Ci0JaWYgKHJldCkgewotCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGEwIik7Ci0JCXJldHVybiByZXQ7CisJCWxhYnBjX2NvdW50ZXJfc2V0X21vZGUoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9CQVNFX1JFRywKKwkJCQkgICAgICAgMCwgSTgyNTRfTU9ERTIpOwogCX0KIAogCS8qICBzZXQgdXAgc2NhbiBwYWNpbmcgKi8KIAlpZiAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kLCBtb2RlKSkgewogCQkvKiAgbG9hZCBjb3VudGVyIGIxIGluIG1vZGUgMiAqLwotCQlyZXQgPSBsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQl9CQVNFX1JFRywKLQkJCQkJIDEsIGRldnByaXYtPmRpdmlzb3JfYjEsIEk4MjU0X01PREUyKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBsb2FkaW5nIGNvdW50ZXIgYjEiKTsKLQkJCXJldHVybiAtMTsKLQkJfQorCQlsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQl9CQVNFX1JFRywKKwkJCQkgICAxLCBkZXZwcml2LT5kaXZpc29yX2IxLCBJODI1NF9NT0RFMik7CiAJfQogCiAJbGFicGNfY2xlYXJfYWRjX2ZpZm8oZGV2KTsKQEAgLTg5MCw4ICs4NzQsOSBAQAogc3RhdGljIGludCBsYWJwY19kcmFpbl9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxhYnBjX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JdW5zaWduZWQgc2hvcnQgZGF0YTsKIAlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IGRldi0+cmVhZF9zdWJkZXYtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBzaG9ydCBkYXRhOwogCWNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTkwMCw3ICs4ODUsNyBAQAogCWZvciAoaSA9IDA7IChkZXZwcml2LT5zdGF0MSAmIFNUQVQxX0RBVkFJTCkgJiYgaSA8IHRpbWVvdXQ7CiAJICAgICBpKyspIHsKIAkJLyogIHF1aXQgaWYgd2UgaGF2ZSBhbGwgdGhlIGRhdGEgd2Ugd2FudCAqLwotCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJCWlmIChkZXZwcml2LT5jb3VudCA9PSAwKQogCQkJCWJyZWFrOwogCQkJZGV2cHJpdi0+Y291bnQtLTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19pc2FkbWEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19pc2FkbWEuYwppbmRleCAyMTQ5NTk2Li5kOWYyNWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfaXNhZG1hLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2lzYWRtYS5jCkBAIC04Nyw2ICs4Nyw3IEBACiAJc3RydWN0IGxhYnBjX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOwogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbWF4X3BvaW50cywgbnVtX3BvaW50cywgcmVzaWR1ZSwgbGVmdG92ZXI7CkBAIC0xMDgsMTIgKzEwOSwxMiBAQAogCSAqLwogCXJlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hX2NoYW4pIC8gc2FtcGxlX3NpemU7CiAJbnVtX3BvaW50cyA9IG1heF9wb2ludHMgLSByZXNpZHVlOwotCWlmIChkZXZwcml2LT5jb3VudCA8IG51bV9wb2ludHMgJiYgYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPCBudW1fcG9pbnRzKQogCQludW1fcG9pbnRzID0gZGV2cHJpdi0+Y291bnQ7CiAKIAkvKiBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB3aWxsIGJlIHN0b3JlZCBuZXh0IHRpbWUgKi8KIAlsZWZ0b3ZlciA9IDA7Ci0JaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgIT0gVFJJR19DT1VOVCkgeworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpIHsKIAkJbGVmdG92ZXIgPSBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAvIHNhbXBsZV9zaXplOwogCX0gZWxzZSBpZiAoZGV2cHJpdi0+Y291bnQgPiBudW1fcG9pbnRzKSB7CiAJCWxlZnRvdmVyID0gZGV2cHJpdi0+Y291bnQgLSBudW1fcG9pbnRzOwpAQCAtMTI1LDcgKzEyNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKykKIAkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkZXZwcml2LT5kbWFfYnVmZmVyW2ldKTsKIAotCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3BvaW50czsKIAogCS8qIHNldCBhZGRyZXNzIGFuZCBjb3VudCBmb3IgbmV4dCB0cmFuc2ZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKaW5kZXggOGEwZTNiNy4uN2ZmZGNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCkBAIC04NjQsNyArODY0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4pCi0JCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLCBzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCkBAIC04NzcsNyArODc3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlmIChkZXZwcml2LT5hb19taXRlX2NoYW4pCi0JCW1pdGVfc3luY19vdXRwdXRfZG1hKGRldnByaXYtPmFvX21pdGVfY2hhbiwgcy0+YXN5bmMpOworCQltaXRlX3N5bmNfb3V0cHV0X2RtYShkZXZwcml2LT5hb19taXRlX2NoYW4sIHMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTExNDksNyArMTE0OSw3IEBACiAKIAljaGFuID0gYXN5bmMtPmN1cl9jaGFuOwogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJZXJyICY9IGNvbWVkaV9idWZfZ2V0KGFzeW5jLCAmZCk7CisJCWVyciAmPSBjb21lZGlfYnVmX2dldChzLCAmZCk7CiAJCWlmIChlcnIgPT0gMCkKIAkJCWJyZWFrOwogCkBAIC0xMTU5LDcgKzExNTksNyBAQAogCQkJcGFja2VkX2RhdGEgPSBkICYgMHhmZmZmOwogCQkJLyogNjcxMSBvbmx5IGhhcyAxNiBiaXQgd2lkZSBhbyBmaWZvICovCiAJCQlpZiAoYm9hcmQtPnJlZ190eXBlICE9IG5pX3JlZ182NzExKSB7Ci0JCQkJZXJyICY9IGNvbWVkaV9idWZfZ2V0KGFzeW5jLCAmZCk7CisJCQkJZXJyICY9IGNvbWVkaV9idWZfZ2V0KHMsICZkKTsKIAkJCQlpZiAoZXJyID09IDApCiAJCQkJCWJyZWFrOwogCQkJCWNoYW4rKzsKQEAgLTEyMDAsNyArMTIwMCw3IEBACiAJY29uc3Qgc3RydWN0IG5pX2JvYXJkX3N0cnVjdCAqYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlpbnQgbjsKIAotCW4gPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUocy0+YXN5bmMpOworCW4gPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUocyk7CiAJaWYgKG4gPT0gMCkgewogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKIAkJcmV0dXJuIDA7CkBAIC0xMjMwLDcgKzEyMzAsNyBAQAogCQluaV9hb193aW5fb3V0bChkZXYsIDB4NiwgQU9fRklGT19PZmZzZXRfTG9hZF82MTF4KTsKIAogCS8qIGxvYWQgc29tZSBkYXRhICovCi0JbiA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzLT5hc3luYyk7CisJbiA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzKTsKIAlpZiAobiA9PSAwKQogCQlyZXR1cm4gMDsKIApAQCAtMTQ2OCwxMCArMTQ2OCwxMSBAQAogewogCXN0cnVjdCBuaV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBsZW5ndGggPSBudW1fYnl0ZXMgLyBieXRlc19wZXJfc2FtcGxlKHMpOwogCXVuc2lnbmVkIHNob3J0ICphcnJheSA9IGRhdGE7CiAJdW5zaWduZWQgaW50ICpsYXJyYXkgPSBkYXRhOworCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWZkZWYgUENJRE1BCkBAIC0xNDg1LDcgKzE0ODYsNyBAQAogCQllbHNlCiAJCQlhcnJheVtpXSArPSBkZXZwcml2LT5haV9vZmZzZXRbY2hhbl9pbmRleF07CiAJCWNoYW5faW5kZXgrKzsKLQkJY2hhbl9pbmRleCAlPSBhc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKKwkJY2hhbl9pbmRleCAlPSBjbWQtPmNoYW5saXN0X2xlbjsKIAl9CiB9CiAKQEAgLTE1MDUsNyArMTUwNiw3IEBACiAvKiBwcmludGsoImNvbWVkaV9kZWJ1ZzogdXNpbmcgbWl0ZSBjaGFubmVsICVpIGZvciBhaS5cbiIsIGRldnByaXYtPmFpX21pdGVfY2hhbi0+Y2hhbm5lbCk7ICovCiAKIAkvKiB3cml0ZSBhbGxvYyB0aGUgZW50aXJlIGJ1ZmZlciAqLwotCWNvbWVkaV9idWZfd3JpdGVfYWxsb2Mocy0+YXN5bmMsIHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeik7CisJY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWYgKGRldnByaXYtPmFpX21pdGVfY2hhbiA9PSBOVUxMKSB7CkBAIC0xNTQ1LDcgKzE1NDYsNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyogcmVhZCBhbGxvYyB0aGUgZW50aXJlIGJ1ZmZlciAqLwotCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLT5hc3luYywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKwljb21lZGlfYnVmX3JlYWRfYWxsb2Mocywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlmIChkZXZwcml2LT5hb19taXRlX2NoYW4pIHsKQEAgLTIwODAsNyArMjA4MSw3IEBACiAJY29uc3Qgc3RydWN0IG5pX2JvYXJkX3N0cnVjdCAqYm9hcmQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlzdHJ1Y3QgbmlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOworCXVuc2lnbmVkIGludCB0bXA7CiAJdW5zaWduZWQgaW50IHNvdXJjZXM7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCkBAIC0yMTE5LDE3ICsyMTIwLDE5IEBACiAKIAkvKiBTdGVwIDM6IGNoZWNrIGlmIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKLQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKLQkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLwotCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPnN0YXJ0X2FyZyk7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19OT1c6CisJY2FzZSBUUklHX0lOVDoKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdGFydF9hcmcsIDApOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQl0bXAgPSBDUl9DSEFOKGNtZC0+c3RhcnRfYXJnKTsKIAogCQlpZiAodG1wID4gMTYpCiAJCQl0bXAgPSAxNjsKIAkJdG1wIHw9IChjbWQtPnN0YXJ0X2FyZyAmIChDUl9JTlZFUlQgfCBDUl9FREdFKSk7CiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCB0bXApOwotCX0gZWxzZSB7Ci0JCS8qIHRydWUgZm9yIGJvdGggVFJJR19OT1cgYW5kIFRSSUdfSU5UICovCi0JCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewpAQCAtMjUxMCwzMCArMjUxMywyOCBAQAogCX0KICNlbmRpZgogCi0Jc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgewotCWNhc2UgVFJJR19OT1c6CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKSB7CiAJCS8qIEFJX1NUQVJUMV9QdWxzZSAqLwogCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU1RBUlQxX1B1bHNlIHwgZGV2cHJpdi0+YWlfY21kMiwKIAkJCQkgICAgQUlfQ29tbWFuZF8yX1JlZ2lzdGVyKTsKIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIFRSSUdfRVhUOgorCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIFRSSUdfSU5UOgotCQlzLT5hc3luYy0+aW50dHJpZyA9ICZuaV9haV9pbnR0cmlnOwotCQlicmVhazsKKwl9IGVsc2UgewkvKiBUUklHX0lOVCAqLworCQlzLT5hc3luYy0+aW50dHJpZyA9IG5pX2FpX2ludHRyaWc7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSB1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3N0YXRpYyBpbnQgbmlfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKIAlzdHJ1Y3QgbmlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAKLQlpZiAodHJpZ251bSAhPSAwKQorCWlmICh0cmlnX251bSAhPSBjbWQtPnN0YXJ0X2FyZykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU1RBUlQxX1B1bHNlIHwgZGV2cHJpdi0+YWlfY21kMiwKQEAgLTI3MTAsMjIgKzI3MTEsMjIgQEAKIHsKIAljb25zdCBzdHJ1Y3QgbmlfYm9hcmRfc3RydWN0ICpib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBsZW5ndGggPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAxIDw8IChib2FyZC0+YW9iaXRzIC0gMSk7CisJdW5zaWduZWQgc2hvcnQgKmFycmF5ID0gZGF0YTsKIAl1bnNpZ25lZCBpbnQgcmFuZ2U7CiAJdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtX2J5dGVzIC8gc2l6ZW9mKHNob3J0KTsKLQl1bnNpZ25lZCBzaG9ydCAqYXJyYXkgPSBkYXRhOwogCi0Jb2Zmc2V0ID0gMSA8PCAoYm9hcmQtPmFvYml0cyAtIDEpOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQlyYW5nZSA9IENSX1JBTkdFKGFzeW5jLT5jbWQuY2hhbmxpc3RbY2hhbl9pbmRleF0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbY2hhbl9pbmRleF0pOwogCQlpZiAoYm9hcmQtPmFvX3VuaXBvbGFyID09IDAgfHwgKHJhbmdlICYgMSkgPT0gMCkKIAkJCWFycmF5W2ldIC09IG9mZnNldDsKICNpZmRlZiBQQ0lETUEKIAkJYXJyYXlbaV0gPSBjcHVfdG9fbGUxNihhcnJheVtpXSk7CiAjZW5kaWYKIAkJY2hhbl9pbmRleCsrOwotCQljaGFuX2luZGV4ICU9IGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCQljaGFuX2luZGV4ICU9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCX0KIH0KIApAQCAtMjk0NiwxNyArMjk0NywxOSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IG5pX2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgdW5zaWduZWQgaW50IHRyaWdudW0pCitzdGF0aWMgaW50IG5pX2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSB1bnNpZ25lZCBpbnQgdHJpZ19udW0pCiB7CiAJY29uc3Qgc3RydWN0IG5pX2JvYXJkX3N0cnVjdCAqYm9hcmQgX19tYXliZV91bnVzZWQgPSBjb21lZGlfYm9hcmQoZGV2KTsKIAlzdHJ1Y3QgbmlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJaW50IHJldDsKIAlpbnQgaW50ZXJydXB0X2JfYml0czsKIAlpbnQgaTsKIAlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwOwogCi0JaWYgKHRyaWdudW0gIT0gMCkKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogTnVsbCB0cmlnIGF0IGJlZ2lubmluZyBwcmV2ZW50IGFvIHN0YXJ0IHRyaWdnZXIgZnJvbSBleGVjdXRpbmcgbW9yZSB0aGFuCkBAIC0zMjE3LDcgKzMyMjAsNyBAQAogCQkJICAgIEFPX0JDX1RDX0ludGVycnVwdF9FbmFibGUsIDEpOwogCX0KIAotCXMtPmFzeW5jLT5pbnR0cmlnID0gJm5pX2FvX2ludHRyaWc7CisJcy0+YXN5bmMtPmludHRyaWcgPSBuaV9hb19pbnR0cmlnOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjI4LDcgKzMyMzEsNyBAQAogCWNvbnN0IHN0cnVjdCBuaV9ib2FyZF9zdHJ1Y3QgKmJvYXJkID0gY29tZWRpX2JvYXJkKGRldik7CiAJc3RydWN0IG5pX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgdG1wOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0zMjU4LDE3ICszMjYxLDE4IEBACiAKIAkvKiBTdGVwIDM6IGNoZWNrIGlmIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKLQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKLQkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLwotCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPnN0YXJ0X2FyZyk7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJdG1wID0gQ1JfQ0hBTihjbWQtPnN0YXJ0X2FyZyk7CiAKIAkJaWYgKHRtcCA+IDE4KQogCQkJdG1wID0gMTg7CiAJCXRtcCB8PSAoY21kLT5zdGFydF9hcmcgJiAoQ1JfSU5WRVJUIHwgQ1JfRURHRSkpOwogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgdG1wKTsKLQl9IGVsc2UgewotCQkvKiB0cnVlIGZvciBib3RoIFRSSUdfTk9XIGFuZCBUUklHX0lOVCAqLwotCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJCWJyZWFrOwogCX0KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKQEAgLTMzMDQsMTEgKzMzMDgsNiBAQAogCWlmIChlcnIpCiAJCXJldHVybiA0OwogCi0JLyogc3RlcCA1OiBmaXggdXAgY2hhbmxpc3QgKi8KLQotCWlmIChlcnIpCi0JCXJldHVybiA1OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0MzksMTIgKzM0MzgsMjcgQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAorc3RhdGljIGludCBuaV9jZGlvX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisKKwkJaWYgKGNoYW4gIT0gaSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5pX2NkaW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IHRtcDsKLQl1bnNpZ25lZCBpOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0zNDg0LDEyICszNDk4LDkgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gNDsKIAotCS8qIHN0ZXAgNTogY2hlY2sgY2hhbmxpc3QgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgKytpKSB7Ci0JCWlmIChjbWQtPmNoYW5saXN0W2ldICE9IGkpCi0JCQllcnIgPSAxOwotCX0KKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApCisJCWVyciB8PSBuaV9jZGlvX2NoZWNrX2NoYW5saXN0KGRldiwgcywgY21kKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiA1OwpAQCAtMzUzMCwyNSArMzU0MSwzMiBAQAogCXJldHZhbCA9IG5pX3JlcXVlc3RfY2RvX21pdGVfY2hhbm5lbChkZXYpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwotCXMtPmFzeW5jLT5pbnR0cmlnID0gJm5pX2Nkb19pbnR0cmlnOworCisJcy0+YXN5bmMtPmludHRyaWcgPSBuaV9jZG9faW50dHJpZzsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pX2Nkb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICB1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3N0YXRpYyBpbnQgbmlfY2RvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKICNpZmRlZiBQQ0lETUEKIAlzdHJ1Y3QgbmlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2VuZGlmCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGk7CiAJY29uc3QgdW5zaWduZWQgdGltZW91dCA9IDEwMDA7CiAKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCisJCXJldHVybiAtRUlOVkFMOworCiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCiAJLyogcmVhZCBhbGxvYyB0aGUgZW50aXJlIGJ1ZmZlciAqLwotCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLT5hc3luYywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKwljb21lZGlfYnVmX3JlYWRfYWxsb2Mocywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKIAogI2lmZGVmIFBDSURNQQogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwpAQCAtMzYyMyw3ICszNjQxLDcgQEAKIAkJCSAgICAgICBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKwogCQkJICAgICAgIE1JVEVfQ0hPUihkZXZwcml2LT5jZG9fbWl0ZV9jaGFuLT5jaGFubmVsKSk7CiAJCX0KLQkJbWl0ZV9zeW5jX291dHB1dF9kbWEoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiwgcy0+YXN5bmMpOworCQltaXRlX3N5bmNfb3V0cHV0X2RtYShkZXZwcml2LT5jZG9fbWl0ZV9jaGFuLCBzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCmluZGV4IDg1YWMyZDkuLjVmYzc0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOwogCXNwaW5fbG9jaygmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2spOwogCWlmIChkZXZwcml2LT5kaV9taXRlX2NoYW4pCi0JCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLCBzKTsKIAlzcGluX3VubG9jaygmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2spOwogCWNvdW50ID0gcy0+YXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIHMtPmFzeW5jLT5idWZfcmVhZF9jb3VudDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOwpAQCAtNDA1LDcgKzQwNSw3IEBACiAJCQl3cml0ZWwoQ0hPUl9DTFJMQywKIAkJCSAgICAgICBtaXRlLT5taXRlX2lvX2FkZHIgKwogCQkJICAgICAgIE1JVEVfQ0hPUihkZXZwcml2LT5kaV9taXRlX2NoYW4tPmNoYW5uZWwpKTsKLQkJCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJCQltaXRlX3N5bmNfaW5wdXRfZG1hKGRldnByaXYtPmRpX21pdGVfY2hhbiwgcyk7CiAJCQkvKiBYWFggbmVlZCB0byBieXRlc3dhcCAqLwogCQl9CiAJCWlmIChtX3N0YXR1cyAmIH4oQ0hTUl9JTlQgfCBDSFNSX0xJTktDIHwgQ0hTUl9ET05FIHwgQ0hTUl9EUkRZIHwKQEAgLTQ0Nyw4ICs0NDcsOCBAQAogCQkJCQkgIEdyb3VwXzFfRklGTyk7CiAJCQkJZGF0YTEgPSBhdXhkYXRhICYgMHhmZmZmOwogCQkJCWRhdGEyID0gKGF1eGRhdGEgJiAweGZmZmYwMDAwKSA+PiAxNjsKLQkJCQljb21lZGlfYnVmX3B1dChhc3luYywgZGF0YTEpOwotCQkJCWNvbWVkaV9idWZfcHV0KGFzeW5jLCBkYXRhMik7CisJCQkJY29tZWRpX2J1Zl9wdXQocywgZGF0YTEpOworCQkJCWNvbWVkaV9idWZfcHV0KHMsIGRhdGEyKTsKIAkJCQlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKIAkJCQkJICAgICAgR3JvdXBfMV9GbGFncyk7CiAJCQl9CkBAIC01MzYsNyArNTM2LDcgQEAKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC01OTUsMTEgKzU5NSw5IEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwotCQluaV9wY2lkaW9fbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCi0JCQkJICAgICAgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKLQkJCWVycisrOworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQluaV9wY2lkaW9fbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCiAJaWYgKGVycikKQEAgLTc1OSw3ICs3NTcsNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyogd3JpdGUgYWxsb2MgdGhlIGVudGlyZSBidWZmZXIgKi8KLQljb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCWNvbWVkaV9idWZfd3JpdGVfYWxsb2Mocywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlmIChkZXZwcml2LT5kaV9taXRlX2NoYW4pIHsKQEAgLTc3MywxMSArNzcxLDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgbmlfcGNpZGlvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCB0cmlnbnVtKQorCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdfbnVtKQogewogCXN0cnVjdCBuaWRpbzk2X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCi0JaWYgKHRyaWdudW0gIT0gMCkKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJd3JpdGViKGRldnByaXYtPk9wTW9kZUJpdHMsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKQEAgLTgwNCw3ICs4MDQsNyBAQAogCXN0cnVjdCBuaWRpbzk2X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IHJldDsKIAotCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5kaV9taXRlX3JpbmcsIHMtPmFzeW5jKTsKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+ZGlfbWl0ZV9yaW5nLCBzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCmluZGV4IGQ0MGRmMDcuLjg5MzAwZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKQEAgLTE1NjAsNyArMTU2MCw3IEBACiAJc3RydWN0IG5pX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IHJldDsKIAotCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5haV9taXRlX3JpbmcsIHMtPmFzeW5jKTsKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+YWlfbWl0ZV9yaW5nLCBzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTU3Myw3ICsxNTczLDcgQEAKIAlzdHJ1Y3QgbmlfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmFvX21pdGVfcmluZywgcy0+YXN5bmMpOworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5hb19taXRlX3JpbmcsIHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCXN0cnVjdCBuaV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCByZXQ7CiAKLQlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0sIHMtPmFzeW5jKTsKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0sIHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjAxLDcgKzE2MDEsNyBAQAogCXN0cnVjdCBuaV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCByZXQ7CiAKLQlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMV0sIHMtPmFzeW5jKTsKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMV0sIHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjE0LDcgKzE2MTQsNyBAQAogCXN0cnVjdCBuaV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCByZXQ7CiAKLQlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Y2RvX21pdGVfcmluZywgcy0+YXN5bmMpOworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5jZG9fbWl0ZV9yaW5nLCBzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb2NtZC5jCmluZGV4IDdkNjRmODguLjI1NTdhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW9jbWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMKQEAgLTg5LDE0ICs4OSwxNiBAQAogCiBzdGF0aWMgaW50IG5pX3Rpb19pbnB1dF9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJdW5zaWduZWQgaW50IHRyaWdudW0pCisJCQkJdW5zaWduZWQgaW50IHRyaWdfbnVtKQogeworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CiAKIAlCVUdfT04oY291bnRlciA9PSBOVUxMKTsKLQlpZiAodHJpZ251bSAhPSAwKQorCisJaWYgKHRyaWdfbnVtICE9IGNtZC0+c3RhcnRfc3JjKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CkBAIC0xMTMsMTUgKzExNSwxNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgbmlfdGlvX2lucHV0X2NtZChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCitzdGF0aWMgaW50IG5pX3Rpb19pbnB1dF9jbWQoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzLT5wcml2YXRlOwogCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKIAl1bnNpZ25lZCBjaWR4ID0gY291bnRlci0+Y291bnRlcl9pbmRleDsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHdyaXRlIGFsbG9jIHRoZSBlbnRpcmUgYnVmZmVyICovCi0JY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhhc3luYywgYXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKwljb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CiAJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfSU5QVVQ7CiAJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgewogCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgpAQCAtMTYyLDkgKzE2NiwxMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgbmlfdGlvX291dHB1dF9jbWQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCi0JCQkgICAgIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQorc3RhdGljIGludCBuaV90aW9fb3V0cHV0X2NtZChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisKIAlkZXZfZXJyKGNvdW50ZXItPmNvdW50ZXJfZGV2LT5kZXYtPmNsYXNzX2RldiwKIAkJIm91dHB1dCBjb21tYW5kcyBub3QgeWV0IGltcGxlbWVudGVkLlxuIik7CiAJcmV0dXJuIC1FTk9UU1VQUDsKQEAgLTE3Niw5ICsxODEsMTAgQEAKIAlyZXR1cm4gbmlfdGlvX2FybShjb3VudGVyLCAxLCBOSV9HUENUX0FSTV9JTU1FRElBVEUpOwogfQogCi1zdGF0aWMgaW50IG5pX3Rpb19jbWRfc2V0dXAoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQorc3RhdGljIGludCBuaV90aW9fY21kX3NldHVwKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzLT5wcml2YXRlOwogCXVuc2lnbmVkIGNpZHggPSBjb3VudGVyLT5jb3VudGVyX2luZGV4OwogCWludCBzZXRfZ2F0ZV9zb3VyY2UgPSAwOwogCXVuc2lnbmVkIGdhdGVfc291cmNlOwpAQCAtMjE3LDEyICsyMjMsMTIgQEAKIAkJCSJJbnRlcnJ1cHQtZHJpdmVuIGNvbW1hbmRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXG4iKTsKIAkJcmV0dmFsID0gLUVJTzsKIAl9IGVsc2UgewotCQlyZXR2YWwgPSBuaV90aW9fY21kX3NldHVwKGNvdW50ZXIsIGFzeW5jKTsKKwkJcmV0dmFsID0gbmlfdGlvX2NtZF9zZXR1cChzKTsKIAkJaWYgKHJldHZhbCA9PSAwKSB7CiAJCQlpZiAoY21kLT5mbGFncyAmIENNREZfV1JJVEUpCi0JCQkJcmV0dmFsID0gbmlfdGlvX291dHB1dF9jbWQoY291bnRlciwgYXN5bmMpOworCQkJCXJldHZhbCA9IG5pX3Rpb19vdXRwdXRfY21kKHMpOwogCQkJZWxzZQotCQkJCXJldHZhbCA9IG5pX3Rpb19pbnB1dF9jbWQoY291bnRlciwgYXN5bmMpOworCQkJCXJldHZhbCA9IG5pX3Rpb19pbnB1dF9jbWQocyk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOwpAQCAtMjcxLDggKzI3NywxNiBAQAogCiAJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCWNhc2UgVFJJR19JTlQ6CisJY2FzZSBUUklHX09USEVSOgogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIHN0YXJ0X2FyZyBpcyB0aGUgc3RhcnRfdHJpZ2dlciBwYXNzZWQgdG8gbmlfdGlvX2FybSgpICovCisJCWJyZWFrOworCX0KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCAwKTsKQEAgLTQ1MCw3ICs0NjQsNyBAQAogCQkgICAgICAgY291bnRlci0+bWl0ZV9jaGFuLT5taXRlLT5taXRlX2lvX2FkZHIgKwogCQkgICAgICAgTUlURV9DSE9SKGNvdW50ZXItPm1pdGVfY2hhbi0+Y2hhbm5lbCkpOwogCX0KLQltaXRlX3N5bmNfaW5wdXRfZG1hKGNvdW50ZXItPm1pdGVfY2hhbiwgcy0+YXN5bmMpOworCW1pdGVfc3luY19pbnB1dF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCBzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faGFuZGxlX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKaW5kZXggN2MwM2E1ZC4uYzM4ZDk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYwpAQCAtMjAyLDYgKzIwMiw3IEBACiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJc3RydWN0IHBjbDcxMV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgaW50IGRhdGE7CiAKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKQEAgLTIxMywxMiArMjE0LDExIEBACiAKIAlvdXRiKFBDTDcxMV9JTlRfU1RBVF9DTFIsIGRldi0+aW9iYXNlICsgUENMNzExX0lOVF9TVEFUX1JFRyk7CiAKLQlpZiAoY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRhdGEpID09IDApIHsKKwlpZiAoY29tZWRpX2J1Zl9wdXQocywgZGF0YSkgPT0gMCkgewogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKIAl9IGVsc2UgewogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1M7Ci0JCWlmIChzLT5hc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKLQkJICAgICEoLS1kZXZwcml2LT5udHJpZykpIHsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiAhKC0tZGV2cHJpdi0+bnRyaWcpKSB7CiAJCQlwY2w3MTFfYWlfc2V0X21vZGUoZGV2LCBQQ0w3MTFfTU9ERV9TT0ZUVFJJRyk7CiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCX0KQEAgLTI5NSw4ICsyOTUsOCBAQAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JaW50IHRtcDsKIAlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0zNDQsMTQgKzM0NCwxMiBAQAogCS8qIHN0ZXAgNCAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzJNSFosCiAJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IxLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMiwKLQkJCQkJICAmY21kLT5zY2FuX2JlZ2luX2FyZywKLQkJCQkJICBjbWQtPmZsYWdzKTsKLQkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQotCQkJZXJyKys7CisJCQkJCSAgJmFyZywgY21kLT5mbGFncyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCiAJaWYgKGVycikKQEAgLTM2MCw2ICszNTgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGNsNzExX2FpX2xvYWRfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlID0gZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfVElNRVJfQkFTRTsKKworCWk4MjU0X3NldF9tb2RlKHRpbWVyX2Jhc2UsIDAsIDEsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKKwlpODI1NF9zZXRfbW9kZSh0aW1lcl9iYXNlLCAwLCAyLCBJODI1NF9NT0RFMiB8IEk4MjU0X0JJTkFSWSk7CisKKwlpODI1NF93cml0ZSh0aW1lcl9iYXNlLCAwLCAxLCBkZXZwcml2LT5kaXZpc29yMSk7CisJaTgyNTRfd3JpdGUodGltZXJfYmFzZSwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIpOworfQorCiBzdGF0aWMgaW50IHBjbDcxMV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IHBjbDcxMV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwpAQCAtMzc4LDEzICszODgsOCBAQAogCX0KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIFBDTDcxMV9USU1FUl9CQVNFLCAwLAotCQkJICAgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKLQkJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIFBDTDcxMV9USU1FUl9CQVNFLCAwLAotCQkJICAgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsIEk4MjU0X01PREUyIHwgSTgyNTRfQklOQVJZKTsKLQorCQlwY2w3MTFfYWlfbG9hZF9jb3VudGVycyhkZXYpOwogCQlvdXRiKFBDTDcxMV9JTlRfU1RBVF9DTFIsIGRldi0+aW9iYXNlICsgUENMNzExX0lOVF9TVEFUX1JFRyk7Ci0KIAkJcGNsNzExX2FpX3NldF9tb2RlKGRldiwgUENMNzExX01PREVfUEFDRVJfSVJRKTsKIAl9IGVsc2UgewogCQlwY2w3MTFfYWlfc2V0X21vZGUoZGV2LCBQQ0w3MTFfTU9ERV9FWFRfSVJRKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjYuYwppbmRleCBjZjk1NjhlLi43NGY2NDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNi5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2JlZ2luX2FyZywgMCk7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgMCk7Ci0JZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIDEpOworCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CiAJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdG9wX2FyZywgMCk7CiAKIAlpZiAoZXJyKQpAQCAtMjQwLDcgKzI0MCw3IEBACiAJaWYgKGRldnByaXYtPmNtZF9ydW5uaW5nKSB7CiAJCXBjbDcyNl9pbnRyX2NhbmNlbChkZXYsIHMpOwogCi0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwkJY29tZWRpX2J1Zl9wdXQocywgMCk7CiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1MpOwogCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKIAl9CkBAIC00MzAsNiArNDMwLDcgQEAKIAkJcy0+bWF4ZGF0YQk9IDE7CiAJCXMtPnJhbmdlX3RhYmxlCT0gJnJhbmdlX2RpZ2l0YWw7CiAJCXMtPmluc25fYml0cwk9IHBjbDcyNl9pbnRyX2luc25fYml0czsKKwkJcy0+bGVuX2NoYW5saXN0CT0gMTsKIAkJcy0+ZG9fY21kdGVzdAk9IHBjbDcyNl9pbnRyX2NtZHRlc3Q7CiAJCXMtPmRvX2NtZAk9IHBjbDcyNl9pbnRyX2NtZDsKIAkJcy0+Y2FuY2VsCT0gcGNsNzI2X2ludHJfY2FuY2VsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCmluZGV4IDJiYWFmMWQuLjdmYjA0NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKQEAgLTE3LDYgKzE3LDggQEAKICAqCSAgICAoSUNQKSBQMTZSMTYtRElPIFtwMTZyMTZkaW9dCiAgKgkgICAgKEFkdmFudGVjaCkgUENMLTczMyBbcGNsNzMzXQogICoJICAgIChBZHZhbnRlY2gpIFBDTC03MzQgW3BjbDczNF0KKyAqCSAgICAoRGlhbW9uZCBTeXN0ZW1zKSBPUE1NLTE2MTYtWFQgW29wbW0tMTYxNi14dF0KKyAqCSAgICAoRGlhbW9uZCBTeXN0ZW1zKSBQRUFSTC1NTS1QIFtwcmVhcmwtbW0tcF0KICAqIEF1dGhvcjogSm9zw6kgTHVpcyBTw6FuY2hleiAoanNhbmNoZXp2QHRlbGVsaW5lLmVzKQogICogU3RhdHVzOiB1bnRlc3RlZAogICoKQEAgLTcwLDYgKzcyLDI3IEBACiAgKiAgICAgQkFTRSsxICBJc29sYXRlZCBvdXRwdXRzIDgtMTUgKHdyaXRlKSBvciBpbnB1dHMgOC0xNSAocmVhZCkKICAqICAgICBCQVNFKzIgIElzb2xhdGVkIG91dHB1dHMgMTYtMjMgKHdyaXRlKSBvciBpbnB1dHMgMTYtMjMgKHJlYWQpCiAgKiAgICAgQkFTRSszICBJc29sYXRlZCBvdXRwdXRzIDI0LTMxICh3cml0ZSkgb3IgaW5wdXRzIDI0LTMxIChyZWFkKQorICoKKyAqIFRoZSBvcG1tLTE2MTYteHQgYm9hcmQgaGFzIHRoaXMgcmVnaXN0ZXIgbWFwcGluZzoKKyAqCisgKiAgICAgQkFTRSswICBJc29sYXRlZCBvdXRwdXRzIDAtNyAod3JpdGUpIChyZWFkIGJhY2spCisgKiAgICAgQkFTRSsxICBJc29sYXRlZCBvdXRwdXRzIDgtMTUgKHdyaXRlKSAocmVhZCBiYWNrKQorICogICAgIEJBU0UrMiAgSXNvbGF0ZWQgaW5wdXRzIDAtNyAocmVhZCkKKyAqICAgICBCQVNFKzMgIElzb2xhdGVkIGlucHV0cyA4LTE1IChyZWFkKQorICoKKyAqICAgICBUaGVzZSByZWdpc3RlcnMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkOgorICoKKyAqICAgICBCQVNFKzIgIFJlbGF5IHNlbGVjdCByZWdpc3RlciAod3JpdGUpCisgKiAgICAgQkFTRSszICBCb2FyZCByZXNldCBjb250cm9sIHJlZ2lzdGVyICh3cml0ZSkKKyAqICAgICBCQVNFKzQgIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICh3cml0ZSkKKyAqICAgICBCQVNFKzQgIENoYW5nZSBkZXRlY3QgNy0wIHN0YXR1cyByZWdpc3RlciAocmVhZCkKKyAqICAgICBCQVNFKzUgIExFRCBjb250cm9sIHJlZ2lzdGVyICh3cml0ZSkKKyAqICAgICBCQVNFKzUgIENoYW5nZSBkZXRlY3QgMTUtOCBzdGF0dXMgcmVnaXN0ZXIgKHJlYWQpCisgKgorICogVGhlIHBlYXJsLW1tLXAgYm9hcmQgaGFzIHRoaXMgcmVnaXN0ZXIgbWFwcGluZzoKKyAqCisgKiAgICAgQkFTRSswICBJc29sYXRlZCBvdXRwdXRzIDAtNyAod3JpdGUpCisgKiAgICAgQkFTRSsxICBJc29sYXRlZCBvdXRwdXRzIDgtMTUgKHdyaXRlKQogICovCiAKIHN0cnVjdCBwY2w3MzBfYm9hcmQgewpAQCAtMTU4LDYgKzE4MSwxOSBAQAogCQkuaW9fcmFuZ2UJPSAweDA0LAogCQkubl9zdWJkZXZzCT0gMSwKIAkJLm5faXNvX291dF9jaGFuCT0gMzIsCisJfSwgeworCQkubmFtZQkJPSAib3BtbS0xNjE2LXh0IiwKKwkJLmlvX3JhbmdlCT0gMHgxMCwKKwkJLmlzX2FjbDcyMjViCT0gMSwKKwkJLmhhc19yZWFkYmFjawk9IDEsCisJCS5uX3N1YmRldnMJPSAyLAorCQkubl9pc29fb3V0X2NoYW4JPSAxNiwKKwkJLm5faXNvX2luX2NoYW4JPSAxNiwKKwl9LCB7CisJCS5uYW1lCQk9ICJwZWFybC1tbS1wIiwKKwkJLmlvX3JhbmdlCT0gMHgwMiwKKwkJLm5fc3ViZGV2cwk9IDEsCisJCS5uX2lzb19vdXRfY2hhbgk9IDE2LAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKaW5kZXggMTYwZWFjOC4uNGMxYjk0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYwpAQCAtNTU3LDEwICs1NTcsOCBAQAogCiAJLyogIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4gKi8KIAlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7Ci0JCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0KLQkJCWNtZC0+Y2hhbmxpc3RfbGVuICogc2l6ZW9mKHNob3J0KTsKLQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPQotCQkJY21kLT5jaGFubGlzdF9sZW4gKiBzaXplb2Yoc2hvcnQpOworCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9IGNmY19ieXRlc19wZXJfc2NhbihzKTsKKwkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPSBjZmNfYnl0ZXNfcGVyX3NjYW4ocyk7CiAJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IDE7CiAJfSBlbHNlIHsKIAkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPSBkZXZwcml2LT5od2RtYXNpemU7CkBAIC01NzUsOCArNTczLDcgQEAKIAkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IDE7CiAJCX0gZWxzZSB7CiAJCQkvKiAgaG93IG1hbnkgc2FtcGxlcyB3ZSBtdXN0IHRyYW5zZmVyPyAqLwotCQkJYnl0ZXMgPSBjbWQtPmNoYW5saXN0X2xlbiAqCi0JCQkJY21kLT5zdG9wX2FyZyAqIHNpemVvZihzaG9ydCk7CisJCQlieXRlcyA9IGNtZC0+c3RvcF9hcmcgKiBjZmNfYnl0ZXNfcGVyX3NjYW4ocyk7CiAKIAkJCS8qICBob3cgbWFueSBETUEgcGFnZXMgd2UgbXVzdCBmaWxsICovCiAJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPQpAQCAtNzIxLDcgKzcxOCw3IEBACiAJc3RydWN0IHBjbDgxMl9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGludCBmbGFnczsKLQlpbnQgdG1wOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTc2MSw3ICs3NTgsNiBAQAogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCAwKTsKIAogCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWluKCZjbWQtPmNoYW5saXN0X2xlbiwgMSk7Ci0JZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19tYXgoJmNtZC0+Y2hhbmxpc3RfbGVuLCBNQVhfQ0hBTkxJU1RfTEVOKTsKIAllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOwogCiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKQEAgLTc3NSwxNSArNzcxLDEyIEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKEk4MjU0X09TQ19CQVNFXzJNSFosCiAJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IxLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMiwKLQkJCQkJICAmY21kLT5jb252ZXJ0X2FyZywgY21kLT5mbGFncyk7Ci0JCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgYm9hcmQtPmFpX25zX21pbikKLQkJCWNtZC0+Y29udmVydF9hcmcgPSBib2FyZC0+YWlfbnNfbWluOwotCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCi0JCQllcnIrKzsKKwkJCQkJICAmYXJnLCBjbWQtPmZsYWdzKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKIAl9CiAKIAlpZiAoZXJyKQpAQCAtODExLDggKzgwNCw5IEBACiAJCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsKIAkJCQlicmVhazsKIAkJCX0KLQl9IGVsc2UKKwl9IGVsc2UgewogCQlkZXZwcml2LT5haV9kbWEgPSAwOworCX0KIAogCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKIAlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CkBAIC04ODIsNyArODc2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwY2w4MTJfYWlfZ2V0X3NhbXBsZShkZXYsIHMpKTsKKwljb21lZGlfYnVmX3B1dChzLCBwY2w4MTJfYWlfZ2V0X3NhbXBsZShkZXYsIHMpKTsKIAogCS8qIFNldCB1cCBuZXh0IGNoYW5uZWwuIEFkZGVkIGJ5IGFiYm90dGkgMjAxMC0wMS0yMCwgYnV0IHVudGVzdGVkLiAqLwogCW5leHRfY2hhbiA9IHMtPmFzeW5jLT5jdXJfY2hhbiArIDE7CkBAIC05MDIsNyArODk2LDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IGxlbjsgaTsgaS0tKSB7Ci0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsKKwkJY29tZWRpX2J1Zl9wdXQocywgcHRyW2J1ZnB0cisrXSk7CiAKIAkJaWYgKCFwY2w4MTJfYWlfbmV4dF9jaGFuKGRldiwgcykpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwppbmRleCA2ZjI3NmYyLi5kOWNhN2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCkBAIC0xNjQsOSArMTY0LDcgQEAKIAlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZTsKIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCS8qICBob3cgbWFueSAqLwotCQlieXRlcyA9IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuICoKLQkJcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKgotCQlzaXplb2Yoc2hvcnQpOworCQlieXRlcyA9IGNtZC0+c3RvcF9hcmcgKiBjZmNfYnl0ZXNfcGVyX3NjYW4ocyk7CiAKIAkJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KIAkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gYnl0ZXMgLyBkZXZwcml2LT5od2RtYXNpemU7CkBAIC0zMjIsNyArMzIwLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgcHRyW2J1ZnB0cisrXSk7CisJCWNvbWVkaV9idWZfcHV0KHMsIHB0cltidWZwdHIrK10pOwogCiAJCWlmICghcGNsODE2X2FpX25leHRfY2hhbihkZXYsIHMpKQogCQkJcmV0dXJuOwpAQCAtMzcwLDcgKzM2OCw3IEBACiB7CiAJc3RydWN0IHBjbDgxNl9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCWludCBlcnIgPSAwOwotCWludCB0bXA7CisJdW5zaWduZWQgaW50IGFyZzsKIAogCS8qIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXJzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtNDE3LDE1ICs0MTUsMTIgQEAKIAogCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CiAJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoSTgyNTRfT1NDX0JBU0VfMTBNSFosCiAJCQkJCSAgJmRldnByaXYtPmRpdmlzb3IxLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMiwKLQkJCQkJICAmY21kLT5jb252ZXJ0X2FyZywgY21kLT5mbGFncyk7Ci0JCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgMTAwMDApCi0JCQljbWQtPmNvbnZlcnRfYXJnID0gMTAwMDA7Ci0JCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJCWVycisrOworCQkJCQkgICZhcmcsIGNtZC0+ZmxhZ3MpOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCBhcmcpOwogCX0KIAogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKaW5kZXggNjQ2MzQ3Ni4uN2QwMGFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsJLyogIGRpc2FibGUgZG1hICovCiAJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemU7CiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQlieXRlcyA9IGNtZC0+Y2hhbmxpc3RfbGVuICogY21kLT5zdG9wX2FyZyAqIHNpemVvZihzaG9ydCk7CisJCWJ5dGVzID0gY21kLT5zdG9wX2FyZyAqIGNmY19ieXRlc19wZXJfc2NhbihzKTsKIAkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gYnl0ZXMgLyBkZXZwcml2LT5od2RtYXNpemU7CiAJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9IGJ5dGVzICUgZGV2cHJpdi0+aHdkbWFzaXplOwogCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKQEAgLTU2MSw3ICs1NjEsNyBAQAogCWlmIChwY2w4MThfYWlfZHJvcG91dChkZXYsIHMsIGNoYW4pKQogCQlyZXR1cm47CiAKLQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgdmFsKTsKKwljb21lZGlfYnVmX3B1dChzLCB2YWwpOwogCiAJcGNsODE4X2FpX25leHRfY2hhbihkZXYsIHMpOwogfQpAQCAtNTkwLDcgKzU5MCw3IEBACiAJCWlmIChwY2w4MThfYWlfZHJvcG91dChkZXYsIHMsIGNoYW4pKQogCQkJYnJlYWs7CiAKLQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHZhbCk7CisJCWNvbWVkaV9idWZfcHV0KHMsIHZhbCk7CiAKIAkJaWYgKCFwY2w4MThfYWlfbmV4dF9jaGFuKGRldiwgcykpCiAJCQlicmVhazsKQEAgLTYzMCw3ICs2MzAsNyBAQAogCQlpZiAocGNsODE4X2FpX2Ryb3BvdXQoZGV2LCBzLCBjaGFuKSkKIAkJCWJyZWFrOwogCi0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwpOworCQljb21lZGlfYnVmX3B1dChzLCB2YWwpOwogCiAJCWlmICghcGNsODE4X2FpX25leHRfY2hhbihkZXYsIHMpKQogCQkJYnJlYWs7CkBAIC03NDEsNyArNzQxLDcgQEAKIAljb25zdCBzdHJ1Y3QgcGNsODE4X2JvYXJkICpib2FyZCA9IGNvbWVkaV9ib2FyZChkZXYpOwogCXN0cnVjdCBwY2w4MThfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTc4OCwxNSArNzg4LDEyIEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjUzX29zY19iYXNlLAogCQkJCQkgICZkZXZwcml2LT5kaXZpc29yMSwKIAkJCQkJICAmZGV2cHJpdi0+ZGl2aXNvcjIsCi0JCQkJCSAgJmNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOwotCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IGJvYXJkLT5uc19taW4pCi0JCQljbWQtPmNvbnZlcnRfYXJnID0gYm9hcmQtPm5zX21pbjsKLQkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQotCQkJZXJyKys7CisJCQkJCSAgJmFyZywgY21kLT5mbGFncyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIGFyZyk7CiAJfQogCiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwppbmRleCBlODliY2E4Li5mZWQ3ZTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCkBAIC0xOTIsNyArMTkyLDYgQEAKIAl1bnNpZ25lZCBpbnQgZW5hYmxlZF9tYXNrOwogCXVuc2lnbmVkIGludCBzdG9wX2NvdW50OwogCXVuc2lnbmVkIGludCBhY3RpdmU6MTsKLQl1bnNpZ25lZCBpbnQgY29udGludW91czoxOwogCiAJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzhdOwogfTsKQEAgLTMzOSw4ICszMzgsOCBAQAogCQkJCSAgIHVuc2lnbmVkIGludCB0cmlnZ2VyZWQpCiB7CiAJc3RydWN0IHBjbW1pb19wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBpbnQgb2xkZXZlbnRzID0gcy0+YXN5bmMtPmV2ZW50czsKLQl1bnNpZ25lZCBpbnQgbGVuID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CiAJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKQEAgLTM1MywxNiArMzUyLDE2IEBACiAJaWYgKCEodHJpZ2dlcmVkICYgZGV2cHJpdi0+ZW5hYmxlZF9tYXNrKSkKIAkJZ290byBkb25lOwogCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihzLT5hc3luYy0+Y21kLmNoYW5saXN0W2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CiAKIAkJaWYgKHRyaWdnZXJlZCAmICgxIDw8IGNoYW4pKQogCQkJdmFsIHw9ICgxIDw8IGkpOwogCX0KIAogCS8qIFdyaXRlIHRoZSBzY2FuIHRvIHRoZSBidWZmZXIuICovCi0JaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwpICYmCi0JICAgIGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwgPj4gMTYpKSB7CisJaWYgKGNvbWVkaV9idWZfcHV0KHMsIHZhbCkgJiYKKwkgICAgY29tZWRpX2J1Zl9wdXQocywgdmFsID4+IDE2KSkgewogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IChDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TKTsKIAl9IGVsc2UgewogCQkvKiBPdmVyZmxvdyEgU3RvcCBhY3F1aXNpdGlvbiEhICovCkBAIC0zNzEsMTUgKzM3MCwxMiBAQAogCX0KIAogCS8qIENoZWNrIGZvciBlbmQgb2YgYWNxdWlzaXRpb24uICovCi0JaWYgKCFkZXZwcml2LT5jb250aW51b3VzKSB7Ci0JCS8qIHN0b3Bfc3JjID09IFRSSUdfQ09VTlQgKi8KLQkJaWYgKGRldnByaXYtPnN0b3BfY291bnQgPiAwKSB7Ci0JCQlkZXZwcml2LT5zdG9wX2NvdW50LS07Ci0JCQlpZiAoZGV2cHJpdi0+c3RvcF9jb3VudCA9PSAwKSB7Ci0JCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwotCQkJCS8qIFRPRE86IFNUT1BfQUNRVUlTSVRJT05fQ0FMTF9IRVJFISEgKi8KLQkJCQlwY21taW9fc3RvcF9pbnRyKGRldiwgcyk7Ci0JCQl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5zdG9wX2NvdW50ID4gMCkgeworCQlkZXZwcml2LT5zdG9wX2NvdW50LS07CisJCWlmIChkZXZwcml2LT5zdG9wX2NvdW50ID09IDApIHsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCS8qIFRPRE86IFNUT1BfQUNRVUlTSVRJT05fQ0FMTF9IRVJFISEgKi8KKwkJCXBjbW1pb19zdG9wX2ludHIoZGV2LCBzKTsKIAkJfQogCX0KIApAQCAtNDIxLDcgKzQxNyw3IEBACiAJdW5zaWduZWQgaW50IHBvbF9iaXRzID0gMDsKIAlpbnQgaTsKIAotCWlmICghZGV2cHJpdi0+Y29udGludW91cyAmJiBkZXZwcml2LT5zdG9wX2NvdW50ID09IDApIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPnN0b3BfY291bnQgPT0gMCkgewogCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlkZXZwcml2LT5hY3RpdmUgPSAwOwpAQCAtNDY0LDE4ICs0NjAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KLSAqLwotc3RhdGljIGludAotcGNtbWlvX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgdW5zaWduZWQgaW50IHRyaWdudW0pCitzdGF0aWMgaW50IHBjbW1pb19pbnR0cmlnX3N0YXJ0X2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdfbnVtKQogewogCXN0cnVjdCBwY21taW9fcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXZlbnQgPSAwOwogCi0JaWYgKHRyaWdudW0gIT0gMCkKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CkBAIC01MDQsMjggKzQ5OCwxNyBAQAogCWRldnByaXYtPmFjdGl2ZSA9IDE7CiAKIAkvKiBTZXQgdXAgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLwotCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewotCWNhc2UgVFJJR19DT1VOVDoKLQkJZGV2cHJpdi0+Y29udGludW91cyA9IDA7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+c3RvcF9jb3VudCA9IGNtZC0+c3RvcF9hcmc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIFRSSUdfTk9ORSAqLwotCQlkZXZwcml2LT5jb250aW51b3VzID0gMTsKKwllbHNlCS8qIFRSSUdfTk9ORSAqLwogCQlkZXZwcml2LT5zdG9wX2NvdW50ID0gMDsKLQkJYnJlYWs7Ci0JfQogCiAJLyogU2V0IHVwIHN0YXJ0IG9mIGFjcXVpc2l0aW9uLiAqLwotCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKLQljYXNlIFRSSUdfSU5UOgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCkKIAkJcy0+YXN5bmMtPmludHRyaWcgPSBwY21taW9faW50dHJpZ19zdGFydF9pbnRyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBUUklHX05PVyAqLworCWVsc2UJLyogVFJJR19OT1cgKi8KIAkJZXZlbnQgPSBwY21taW9fc3RhcnRfaW50cihkZXYsIHMpOwotCQlicmVhazsKLQl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5zcGlubG9jaywgZmxhZ3MpOwogCiAJaWYgKGV2ZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCmluZGV4IGE4ZjM5MGYuLjYyOTE0YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCXN0cnVjdCBwY211aW9fcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgYXNpYyA9IHBjbXVpb19zdWJkZXZpY2VfdG9fYXNpYyhzKTsKIAlzdHJ1Y3QgcGNtdWlvX2FzaWMgKmNoaXAgPSAmZGV2cHJpdi0+YXNpY3NbYXNpY107Ci0JdW5zaWduZWQgaW50IGxlbiA9IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBvbGRldmVudHMgPSBzLT5hc3luYy0+ZXZlbnRzOwogCXVuc2lnbmVkIGludCB2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzEsMTUgKzMzMSwxNSBAQAogCWlmICghKHRyaWdnZXJlZCAmIGNoaXAtPmVuYWJsZWRfbWFzaykpCiAJCWdvdG8gZG9uZTsKIAotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtpXSk7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOwogCQlpZiAodHJpZ2dlcmVkICYgKDEgPDwgY2hhbikpCiAJCQl2YWwgfD0gKDEgPDwgaSk7CiAJfQogCiAJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KLQlpZiAoY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHZhbCkgJiYKLQkgICAgY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHZhbCA+PiAxNikpIHsKKwlpZiAoY29tZWRpX2J1Zl9wdXQocywgdmFsKSAmJgorCSAgICBjb21lZGlfYnVmX3B1dChzLCB2YWwgPj4gMTYpKSB7CiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1MpOwogCX0gZWxzZSB7CiAJCS8qIE92ZXJmbG93ISBTdG9wIGFjcXVpc2l0aW9uISEgKi8KQEAgLTQ2MCwyMCArNDYwLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBJbnRlcm5hbCB0cmlnZ2VyIGZ1bmN0aW9uIHRvIHN0YXJ0IGFjcXVpc2l0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbnQKLXBjbXVpb19pbnR0cmlnX3N0YXJ0X2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgIHVuc2lnbmVkIGludCB0cmlnbnVtKQorc3RhdGljIGludCBwY211aW9faW50dHJpZ19zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKIAlzdHJ1Y3QgcGNtdWlvX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCBhc2ljID0gcGNtdWlvX3N1YmRldmljZV90b19hc2ljKHMpOwogCXN0cnVjdCBwY211aW9fYXNpYyAqY2hpcCA9ICZkZXZwcml2LT5hc2ljc1thc2ljXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBldmVudCA9IDA7CiAKLQlpZiAodHJpZ251bSAhPSAwKQorCWlmICh0cmlnX251bSAhPSBjbWQtPnN0YXJ0X2FyZykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+c3BpbmxvY2ssIGZsYWdzKTsKQEAgLTUxOCwxNSArNTE2LDExIEBACiAJfQogCiAJLyogU2V0IHVwIHN0YXJ0IG9mIGFjcXVpc2l0aW9uLiAqLwotCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKLQljYXNlIFRSSUdfSU5UOgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCkKIAkJcy0+YXN5bmMtPmludHRyaWcgPSBwY211aW9faW50dHJpZ19zdGFydF9pbnRyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBUUklHX05PVyAqLworCWVsc2UJLyogVFJJR19OT1cgKi8KIAkJZXZlbnQgPSBwY211aW9fc3RhcnRfaW50cihkZXYsIHMpOwotCQlicmVhazsKLQl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5zcGlubG9jaywgZmxhZ3MpOwogCiAJaWYgKGV2ZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCmluZGV4IDI5OGRiYTAuLmIzYmJlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQkJZGF0YSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pIDw8IDg7CiAJCQlkYXRhIF49IDB4ODAwMDsKIAotCQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRhdGEpOworCQkJY29tZWRpX2J1Zl9wdXQocywgZGF0YSk7CiAKIAkJCS8qIElmIHRoZXJlJ3MgYSBsaW1pdCwgZGVjcmVtZW50IGl0CiAJCQkgKiBhbmQgc3RvcCBjb252ZXJzaW9uIGlmIHplcm8KQEAgLTM3Myw3ICszNzMsNyBAQAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC00MzUsMTkgKzQzNSwxNSBAQAogCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKLQkJZGFxcF9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKLQkJCQkgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKLQkJCWVycisrOworCQlhcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkYXFwX25zX3RvX3RpbWVyKCZhcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBhcmcpOwogCX0KIAogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJZGFxcF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKLQkJCQkgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJCWVycisrOworCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlkYXFwX25zX3RvX3RpbWVyKCZhcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPmNvbnZlcnRfYXJnLCBhcmcpOwogCX0KIAogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKaW5kZXggY2QzZmRmOS4uZDU1YzU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYwpAQCAtNjI5LDcgKzYyOSw3IEBACiAJCQlkID0gY29tZWRpX29mZnNldF9tdW5nZShzLCBkKTsKIAkJZCAmPSBzLT5tYXhkYXRhOwogCi0JCWlmICghY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGQpKQorCQlpZiAoIWNvbWVkaV9idWZfcHV0KHMsIGQpKQogCQkJcmV0dXJuIC0xOwogCiAJCWlmIChkZXZwcml2LT5haV9jb3VudCA+IDApCS8qIDwgMCwgbWVhbnMgcmVhZCBmb3JldmVyICovCkBAIC02NTgsNyArNjU4LDcgQEAKIAkJCWQgPSBjb21lZGlfb2Zmc2V0X211bmdlKHMsIGQpOwogCQlkICY9IHMtPm1heGRhdGE7CiAKLQkJaWYgKCFjb21lZGlfYnVmX3B1dChzLT5hc3luYywgZCkpCisJCWlmICghY29tZWRpX2J1Zl9wdXQocywgZCkpCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKGRldnByaXYtPmFpX2NvdW50ID4gMCkJLyogPCAwLCBtZWFucyByZWFkIGZvcmV2ZXIgKi8KQEAgLTc3OSw3ICs3NzksNyBAQAogCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTg3OCw2ICs4NzgsOCBAQAogCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21heCgmY21kLT5jb252ZXJ0X2FyZywgOSk7CiAJfQogCisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKKwogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJLyogVE9ETyBjaGVjayBmb3Igcm91bmRpbmcgZXJyb3IgZHVlIHRvIGNvdW50ZXIgd3JhcCAqLwogCX0gZWxzZSB7CkBAIC04OTEsMzEgKzg5MywyMSBAQAogCiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCi0JaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gUlREX01BWF9DSEFOTElTVCkgewotCQljbWQtPmNoYW5saXN0X2xlbiA9IFJURF9NQVhfQ0hBTkxJU1Q7Ci0JCWVycisrOwotCX0KIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JCXJ0ZF9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKLQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQotCQkJZXJyKys7Ci0KKwkJYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJcnRkX25zX3RvX3RpbWVyKCZhcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBhcmcpOwogCX0KLQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7Ci0JCXJ0ZF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKLQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQotCQkJZXJyKys7CiAKLQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUgotCQkgICAgJiYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcKLQkJCTwgKGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykpKSB7Ci0JCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KLQkJCSAgICBjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7Ci0JCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCXJ0ZF9uc190b190aW1lcigmYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQkJCQkgYXJnKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKaW5kZXggOTVmYWRmMy4uMDgzOGY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCkBAIC0yOTUsMTAgKzI5NSwyNCBAQAogCiAvKiAqKioqKioqKioqKioqKiAgRUVQUk9NIEFDQ0VTUyBGVU5DVElPTlMgICoqKioqKioqKioqKioqICovCiAKLXN0YXRpYyB1aW50MzJfdCBzNjI2X2kyY19oYW5kc2hha2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKQorc3RhdGljIGludCBzNjI2X2kyY19oYW5kc2hha2VfZW9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJIHVuc2lnbmVkIGxvbmcgY29udGV4dCkKK3sKKwlib29sIHN0YXR1czsKKworCXN0YXR1cyA9IHM2MjZfbWNfdGVzdChkZXYsIFM2MjZfTUMyX1VQTERfSUlDLCBTNjI2X1BfTUMyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IHM2MjZfaTJjX2hhbmRzaGFrZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MzJfdCB2YWwpCiB7CiAJc3RydWN0IHM2MjZfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgY3RybDsKKwlpbnQgcmV0OwogCiAJLyogV3JpdGUgSTJDIGNvbW1hbmQgdG8gSTJDIFRyYW5zZmVyIENvbnRyb2wgc2hhZG93IHJlZ2lzdGVyICovCiAJd3JpdGVsKHZhbCwgZGV2cHJpdi0+bW1pbyArIFM2MjZfUF9JMkNDVFJMKTsKQEAgLTMwOCw4ICszMjIsOSBAQAogCSAqIHdhaXQgZm9yIHVwbG9hZCBjb25maXJtYXRpb24uCiAJICovCiAJczYyNl9tY19lbmFibGUoZGV2LCBTNjI2X01DMl9VUExEX0lJQywgUzYyNl9QX01DMik7Ci0Jd2hpbGUgKCFzNjI2X21jX3Rlc3QoZGV2LCBTNjI2X01DMl9VUExEX0lJQywgUzYyNl9QX01DMikpCi0JCTsKKwlyZXQgPSBjb21lZGlfdGltZW91dChkZXYsIE5VTEwsIE5VTEwsIHM2MjZfaTJjX2hhbmRzaGFrZV9lb2MsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBXYWl0IHVudGlsIEkyQyBidXMgdHJhbnNmZXIgaXMgZmluaXNoZWQgb3IgYW4gZXJyb3Igb2NjdXJzICovCiAJZG8gewpAQCAtMTYxMyw3ICsxNjI4LDYgQEAKIAkJcmVhZGFkZHIrKzsKIAogCQkvKiBwdXQgZGF0YSBpbnRvIHJlYWQgYnVmZmVyICovCi0JCS8qIGNvbWVkaV9idWZfcHV0KGFzeW5jLCB0ZW1wZGF0YSk7ICovCiAJCWNmY193cml0ZV90b19idWZmZXIocywgdGVtcGRhdGEpOwogCX0KIApAQCAtMjAyOSw4ICsyMDQzLDkgQEAKIAkvKiBXYWl0IGZvciB0aGUgZGF0YSB0byBhcnJpdmUgaW4gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKIAkvKiBXYWl0IGZvciBBREMgZG9uZSAqLwotCXdoaWxlICghKHJlYWRsKGRldnByaXYtPm1taW8gKyBTNjI2X1BfUFNSKSAmIFM2MjZfUFNSX0dQSU8yKSkKLQkJOworCXJldCA9IGNvbWVkaV90aW1lb3V0KGRldiwgcywgaW5zbiwgczYyNl9haV9lb2MsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBGZXRjaCBBREMgZGF0YSBmcm9tIGF1ZGlvIGludGVyZmFjZSdzIGlucHV0IHNoaWZ0IHJlZ2lzdGVyLiAqLwogCkBAIC0yMDYwLDkgKzIwNzUsMTIgQEAKIH0KIAogc3RhdGljIGludCBzNjI2X2FpX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgdHJpZ251bSkKKwkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgdW5zaWduZWQgaW50IHRyaWdfbnVtKQogewotCWlmICh0cmlnbnVtICE9IDApCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJaWYgKHRyaWdfbnVtICE9IGNtZC0+c3RhcnRfYXJnKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0gKi8KQEAgLTIwODAsNyArMjA5OCw3IEBACiAgKiBBbHNvLCBpdCBzaG91bGQgYWRqdXN0IG5zIHNvIHRoYXQgaXQgY29vcmVzcG9uZHMgdG8gdGhlIGFjdHVhbCB0aW1lCiAgKiB0aGF0IHRoZSBkZXZpY2Ugd2lsbCB1c2UuCiAgKi8KLXN0YXRpYyBpbnQgczYyNl9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKQorc3RhdGljIGludCBzNjI2X25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpCiB7CiAJaW50IGRpdmlkZXIsIGJhc2U7CiAKQEAgLTIxODgsNyArMjIwNiw3IEBACiAJCSAqIGludGVydmFsCiAJCSAqLwogCQlrID0gJnM2MjZfZW5jX2NoYW5faW5mb1s1XTsKLQkJdGljayA9IHM2MjZfbnNfdG9fdGltZXIoKGludCAqKSZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQl0aWNrID0gczYyNl9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKIAkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CiAKIAkJLyogbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdCAqLwpAQCAtMjIxMSw3ICsyMjI5LDcgQEAKIAkJICogaW50ZXJ2YWwKIAkJICovCiAJCWsgPSAmczYyNl9lbmNfY2hhbl9pbmZvWzRdOwotCQl0aWNrID0gczYyNl9uc190b190aW1lcigoaW50ICopJmNtZC0+Y29udmVydF9hcmcsCisJCXRpY2sgPSBzNjI2X25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLAogCQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKIAogCQkvKiBsb2FkIHRpbWVyIHZhbHVlIGFuZCBlbmFibGUgaW50ZXJydXB0ICovCkBAIC0yMjcwLDcgKzIyODgsNyBAQAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7Ci0JaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgYXJnOwogCiAJLyogU3RlcCAxIDogY2hlY2sgaWYgdHJpZ2dlcnMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCkBAIC0yMjk4LDEyICsyMzE2LDE4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDI7CiAKLQkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCWNhc2UgVFJJR19JTlQ6CiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c3RhcnRfYXJnLCAwKTsKLQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CiAJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfbWF4KCZjbWQtPnN0YXJ0X2FyZywgMzkpOworCQlicmVhazsKKwl9CisKIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkKIAkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19tYXgoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIDM5KTsKIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkKQEAgLTIzNDcsMjQgKzIzNzEsMjAgQEAKIAkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCiAKIAlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7Ci0JCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7Ci0JCXM2MjZfbnNfdG9fdGltZXIoKGludCAqKSZjbWQtPnNjYW5fYmVnaW5fYXJnLAotCQkJCSBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQotCQkJZXJyKys7CisJCWFyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCXM2MjZfbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQorCiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOwotCQlzNjI2X25zX3RvX3RpbWVyKChpbnQgKikmY21kLT5jb252ZXJ0X2FyZywKLQkJCQkgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJCWVycisrOwotCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCi0JCSAgICBjbWQtPnNjYW5fYmVnaW5fYXJnIDwgY21kLT5jb252ZXJ0X2FyZyAqCi0JCQkJCSAgY21kLT5zY2FuX2VuZF9hcmcpIHsKLQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBjbWQtPmNvbnZlcnRfYXJnICoKLQkJCQkJICAgICAgY21kLT5zY2FuX2VuZF9hcmc7Ci0JCQllcnIrKzsKKwkJYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJczYyNl9uc190b190aW1lcigmYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5jb252ZXJ0X2FyZywgYXJnKTsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQlhcmcgPSBjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX21pbigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQkJCQkgYXJnKTsKIAkJfQogCX0KIApAQCAtMjY4MSw4ICsyNzAxLDkgQEAKIAl3cml0ZWwoUzYyNl9JMkNfQ0xLU0VMIHwgUzYyNl9JMkNfQUJPUlQsCiAJICAgICAgIGRldnByaXYtPm1taW8gKyBTNjI2X1BfSTJDU1RBVCk7CiAJczYyNl9tY19lbmFibGUoZGV2LCBTNjI2X01DMl9VUExEX0lJQywgUzYyNl9QX01DMik7Ci0Jd2hpbGUgKCEocmVhZGwoZGV2cHJpdi0+bW1pbyArIFM2MjZfUF9NQzIpICYgUzYyNl9NQzJfVVBMRF9JSUMpKQotCQk7CisJcmV0ID0gY29tZWRpX3RpbWVvdXQoZGV2LCBOVUxMLCBOVUxMLCBzNjI2X2kyY19oYW5kc2hha2VfZW9jLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyoKIAkgKiBQZXIgU0FBNzE0NiBkYXRhIHNoZWV0LCB3cml0ZSB0byBTVEFUVVMKQEAgLTI2OTEsOCArMjcxMiw5IEBACiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl3cml0ZWwoUzYyNl9JMkNfQ0xLU0VMLCBkZXZwcml2LT5tbWlvICsgUzYyNl9QX0kyQ1NUQVQpOwogCQlzNjI2X21jX2VuYWJsZShkZXYsIFM2MjZfTUMyX1VQTERfSUlDLCBTNjI2X1BfTUMyKTsKLQkJd2hpbGUgKCFzNjI2X21jX3Rlc3QoZGV2LCBTNjI2X01DMl9VUExEX0lJQywgUzYyNl9QX01DMikpCi0JCQk7CisJCXJldCA9IGNvbWVkaV90aW1lb3V0KGRldiwgTlVMTCwgTlVMTCwgczYyNl9pMmNfaGFuZHNoYWtlX2VvYywgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NrZWwuYwppbmRleCAzOTAwOGNmLi4zYmZhMjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQkJICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdG1wOworCXVuc2lnbmVkIGludCBhcmc7CiAKIAkvKiBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VycyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTI4NiwyNCArMjg2LDE5IEBACiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOwotCQlza2VsX25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAotCQkJCSBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQotCQkJZXJyKys7CisJCWFyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCXNrZWxfbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGFyZyk7CiAJfQogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKLQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKLQkJc2tlbF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKLQkJCQkgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7Ci0JCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKLQkJCWVycisrOwotCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCi0JCSAgICBjbWQtPnNjYW5fYmVnaW5fYXJnIDwKLQkJICAgIGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgewotCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9Ci0JCQkgICAgY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOwotCQkJZXJyKys7CisJCWFyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCXNrZWxfbnNfdG9fdGltZXIoJmFyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciB8PSBjZmNfY2hlY2tfdHJpZ2dlcl9hcmdfaXMoJmNtZC0+Y29udmVydF9hcmcsIGFyZyk7CisKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJYXJnID0gY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19taW4oJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJCQkJIGFyZyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCBiNTlhZjAzLi41ZjY1ZTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0yMDIsMTQgKzIwMiwxMSBAQAogCS8qIGlucHV0IGJ1ZmZlciBmb3Igc2luZ2xlIGluc24gKi8KIAl1aW50MTZfdCAqaW5zbl9idWY7CiAKLQl1aW50OF90IGFvX2NoYW5saXN0W1VTQkRVWF9OVU1fQU9fQ0hBTl07CiAJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrW1VTQkRVWF9OVU1fQU9fQ0hBTl07CiAKIAl1bnNpZ25lZCBpbnQgaGlnaF9zcGVlZDoxOwogCXVuc2lnbmVkIGludCBhaV9jbWRfcnVubmluZzoxOwotCXVuc2lnbmVkIGludCBhaV9jb250aW5vdXM6MTsKIAl1bnNpZ25lZCBpbnQgYW9fY21kX3J1bm5pbmc6MTsKLQl1bnNpZ25lZCBpbnQgYW9fY29udGlub3VzOjE7CiAJdW5zaWduZWQgaW50IHB3bV9jbWRfcnVubmluZzoxOwogCiAJLyogbnVtYmVyIG9mIHNhbXBsZXMgdG8gYWNxdWlyZSAqLwpAQCAtMjY2LDcgKzI2Myw4IEBACiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CiAJc3RydWN0IHVzYmR1eF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwotCWludCBpLCBlcnIsIG47CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBpLCBlcnI7CiAKIAkvKiBmaXJzdCB3ZSB0ZXN0IGlmIHNvbWV0aGluZyB1bnVzdWFsIGhhcyBqdXN0IGhhcHBlbmVkICovCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewpAQCAtMzQ5LDcgKzM0Nyw3IEBACiAJZGV2cHJpdi0+YWlfY291bnRlciA9IGRldnByaXYtPmFpX3RpbWVyOwogCiAJLyogdGVzdCwgaWYgd2UgdHJhbnNtaXQgb25seSBhIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCi0JaWYgKCFkZXZwcml2LT5haV9jb250aW5vdXMpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCS8qIG5vdCBjb250aW51b3VzLCBmaXhlZCBudW1iZXIgb2Ygc2FtcGxlcyAqLwogCQlkZXZwcml2LT5haV9zYW1wbGVfY291bnQtLTsKIAkJLyogYWxsIHNhbXBsZXMgcmVjZWl2ZWQ/ICovCkBAIC0zNjMsOSArMzYxLDggQEAKIAkJfQogCX0KIAkvKiBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgVVNCIGJ1cyBhbmQgaGFuZCBpdCBvdmVyIHRvIGNvbWVkaSAqLwotCW4gPSBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RbaV0pOworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOwogCQl1aW50MTZfdCB2YWwgPSBsZTE2X3RvX2NwdShkZXZwcml2LT5pbl9idWZbaV0pOwogCiAJCS8qIGJpcG9sYXIgZGF0YSBpcyB0d28ncy1jb21wbGVtZW50ICovCkBAIC0zNzMsNyArMzcwLDcgQEAKIAkJCXZhbCBePSAoKHMtPm1heGRhdGEgKyAxKSA+PiAxKTsKIAogCQkvKiB0cmFuc2ZlciBkYXRhICovCi0JCWVyciA9IGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwpOworCQllcnIgPSBjb21lZGlfYnVmX3B1dChzLCB2YWwpOwogCQlpZiAodW5saWtlbHkoZXJyID09IDApKSB7CiAJCQkvKiBidWZmZXIgb3ZlcmZsb3cgKi8KIAkJCXVzYmR1eF9haV9zdG9wKGRldiwgMCk7CkBAIC00MTQsOCArNDExLDggQEAKIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT53cml0ZV9zdWJkZXY7CiAJc3RydWN0IHVzYmR1eF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1aW50OF90ICpkYXRhcDsKLQlpbnQgbGVuOwogCWludCByZXQ7CiAJaW50IGk7CiAKQEAgLTQ2Myw3ICs0NjAsNyBAQAogCQlkZXZwcml2LT5hb19jb3VudGVyID0gZGV2cHJpdi0+YW9fdGltZXI7CiAKIAkJLyogaGFuZGxlIG5vbiBjb250aW5vdXMgYWNxdWlzaXRpb24gKi8KLQkJaWYgKCFkZXZwcml2LT5hb19jb250aW5vdXMpIHsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewogCQkJLyogZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJCWRldnByaXYtPmFvX3NhbXBsZV9jb3VudC0tOwogCQkJaWYgKGRldnByaXYtPmFvX3NhbXBsZV9jb3VudCA8IDApIHsKQEAgLTQ3OCwxMyArNDc1LDEyIEBACiAKIAkJLyogdHJhbnNtaXQgZGF0YSB0byB0aGUgVVNCIGJ1cyAqLwogCQlkYXRhcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQlsZW4gPSBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKLQkJKmRhdGFwKysgPSBsZW47Ci0JCWZvciAoaSA9IDA7IGkgPCBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbjsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgY2hhbiA9IGRldnByaXYtPmFvX2NoYW5saXN0W2ldOworCQkqZGF0YXArKyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOwogCQkJdW5zaWduZWQgc2hvcnQgdmFsOwogCi0JCQlyZXQgPSBjb21lZGlfYnVmX2dldChzLT5hc3luYywgJnZhbCk7CisJCQlyZXQgPSBjb21lZGlfYnVmX2dldChzLCAmdmFsKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwgImJ1ZmZlciB1bmRlcmZsb3dcbiIpOwogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9FT0EgfApAQCAtNjkyLDE2ICs2ODgsMTcgQEAKIAogc3RhdGljIGludCB1c2JkdXhfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdudW0pCisJCQkgICAgIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKIAlzdHJ1Y3QgdXNiZHV4X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXQ7CisKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCisJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmZGV2cHJpdi0+c2VtKTsKIAotCWlmICh0cmlnbnVtICE9IDApCi0JCWdvdG8gYWlfdHJpZ19leGl0OwotCiAJaWYgKCFkZXZwcml2LT5haV9jbWRfcnVubmluZykgewogCQlkZXZwcml2LT5haV9jbWRfcnVubmluZyA9IDE7CiAJCXJldCA9IHVzYmR1eF9zdWJtaXRfdXJicyhkZXYsIGRldnByaXYtPmFpX3VyYnMsCkBAIC03NzcsMTAgKzc3NCw4IEBACiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewogCQkvKiBkYXRhIGFycml2ZXMgYXMgb25lIHBhY2tldCAqLwogCQlkZXZwcml2LT5haV9zYW1wbGVfY291bnQgPSBjbWQtPnN0b3BfYXJnOwotCQlkZXZwcml2LT5haV9jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7CiAJCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwotCQlkZXZwcml2LT5haV9jb250aW5vdXMgPSAxOwogCQlkZXZwcml2LT5haV9zYW1wbGVfY291bnQgPSAwOwogCX0KIApAQCAtOTEzLDE2ICs5MDgsMTcgQEAKIAogc3RhdGljIGludCB1c2JkdXhfYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdudW0pCisJCQkgICAgIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKIAlzdHJ1Y3QgdXNiZHV4X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXQ7CisKKwlpZiAodHJpZ19udW0gIT0gY21kLT5zdGFydF9hcmcpCisJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmZGV2cHJpdi0+c2VtKTsKIAotCWlmICh0cmlnbnVtICE9IDApCi0JCWdvdG8gYW9fdHJpZ19leGl0OwotCiAJaWYgKCFkZXZwcml2LT5hb19jbWRfcnVubmluZykgewogCQlkZXZwcml2LT5hb19jbWRfcnVubmluZyA9IDE7CiAJCXJldCA9IHVzYmR1eF9zdWJtaXRfdXJicyhkZXYsIGRldnByaXYtPmFvX3VyYnMsCkBAIC0xMDMwLDcgKzEwMjYsNiBAQAogCXN0cnVjdCB1c2JkdXhfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJaW50IHJldCA9IC1FQlVTWTsKLQlpbnQgaTsKIAogCWRvd24oJmRldnByaXYtPnNlbSk7CiAKQEAgLTEwNDAsOSArMTAzNSw2IEBACiAJLyogc2V0IGN1cnJlbnQgY2hhbm5lbCBvZiB0aGUgcnVubmluZyBhY3F1aXNpdGlvbiB0byB6ZXJvICovCiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgKytpKQotCQlkZXZwcml2LT5hb19jaGFubGlzdFtpXSA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7Ci0KIAkvKiB3ZSBjb3VudCBpbiBzdGVwcyBvZiAxbXMgKDEyNXVzKSAqLwogCS8qIDEyNXVzIG1vZGUgbm90IHVzZWQgeWV0ICovCiAJaWYgKDApIHsJCS8qIChkZXZwcml2LT5oaWdoX3NwZWVkKSAqLwpAQCAtMTA3NCwxMCArMTA2Niw4IEBACiAJCQkvKiBkYXRhIGFycml2ZXMgYXMgb25lIHBhY2tldCAqLwogCQkJZGV2cHJpdi0+YW9fc2FtcGxlX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKIAkJfQotCQlkZXZwcml2LT5hb19jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7CiAJCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwotCQlkZXZwcml2LT5hb19jb250aW5vdXMgPSAxOwogCQlkZXZwcml2LT5hb19zYW1wbGVfY291bnQgPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKaW5kZXggZDZmYWUxMS4uODVmOWRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCkBAIC0xNTQsNyArMTU0LDYgQEAKIAl1aW50OF90ICpkdXhidWY7CiAJaW50OF90ICppbmJ1ZjsKIAlzaG9ydCBpbnQgYWlfY21kX3J1bm5pbmc7CS8qIGFzeW5jaHJvbm91cyBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KLQlzaG9ydCBpbnQgYWlfY29udGlub3VzOwkvKiBjb250aW5vdXMgYWNxdWlzaXRpb24gKi8KIAlsb25nIGludCBhaV9zYW1wbGVfY291bnQ7CS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KIAlpbnQgaWdub3JlOwkJLyogY291bnRlciB3aGljaCBpZ25vcmVzIHRoZSBmaXJzdAogCQkJCSAgIGJ1ZmZlcnMgKi8KQEAgLTIzOSw2ICsyMzgsNyBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IgPSBjb21lZGlfdG9fdXNiX2RldihkZXYpOwogCXN0cnVjdCB1c2JkdXhmYXN0X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW50IG4sIGVycjsKQEAgLTI4NSw3ICsyODUsNyBAQAogCX0KIAogCWlmICghZGV2cHJpdi0+aWdub3JlKSB7Ci0JCWlmICghZGV2cHJpdi0+YWlfY29udGlub3VzKSB7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKIAkJCS8qIG5vdCBjb250aW51b3VzLCBmaXhlZCBudW1iZXIgb2Ygc2FtcGxlcyAqLwogCQkJbiA9IHVyYi0+YWN0dWFsX2xlbmd0aCAvIHNpemVvZih1aW50MTZfdCk7CiAJCQlpZiAodW5saWtlbHkoZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50IDwgbikpIHsKQEAgLTM5OCw4ICszOTgsNyBAQAogCiAJLyogU3RlcCAzOiBjaGVjayBpZiBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCi0JaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQotCQllcnIgfD0gY2ZjX2NoZWNrX3RyaWdnZXJfYXJnX2lzKCZjbWQtPnN0YXJ0X2FyZywgMCk7CisJZXJyIHw9IGNmY19jaGVja190cmlnZ2VyX2FyZ19pcygmY21kLT5zdGFydF9hcmcsIDApOwogCiAJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikKIAkJZXJyIHw9IC1FSU5WQUw7CkBAIC00NTEsMjEgKzQ1MCwyMCBAQAogCiBzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgdW5zaWduZWQgaW50IHRyaWdudW0pCisJCQkJIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKIAlzdHJ1Y3QgdXNiZHV4ZmFzdF9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAlpbnQgcmV0OwogCiAJaWYgKCFkZXZwcml2KQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCWlmICh0cmlnX251bSAhPSBjbWQtPnN0YXJ0X2FyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlkb3duKCZkZXZwcml2LT5zZW0pOwogCi0JaWYgKHRyaWdudW0gIT0gMCkgewotCQlkZXZfZXJyKGRldi0+Y2xhc3NfZGV2LCAiaW52YWxpZCB0cmlnbnVtXG4iKTsKLQkJdXAoJmRldnByaXYtPnNlbSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlpZiAoIWRldnByaXYtPmFpX2NtZF9ydW5uaW5nKSB7CiAJCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMTsKIAkJcmV0ID0gdXNiZHV4ZmFzdF9zdWJtaXRfdXJiKGRldik7CkBAIC04MTEsMjAgKzgwOSwxMSBAQAogCQl1cCgmZGV2cHJpdi0+c2VtKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9Ci0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOwotCQlpZiAoZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50IDwgMSkgewotCQkJZGV2X2VycihkZXYtPmNsYXNzX2RldiwKLQkJCQkiKGNtZC0+c3RvcF9hcmcpKihjbWQtPnNjYW5fZW5kX2FyZyk8MSwgYWJvcnRpbmdcbiIpOwotCQkJdXAoJmRldnByaXYtPnNlbSk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlkZXZwcml2LT5haV9jb250aW5vdXMgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwotCQlkZXZwcml2LT5haV9jb250aW5vdXMgPSAxOworCWVsc2UJLyogVFJJR19OT05FICovCiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IDA7Ci0JfQogCiAJaWYgKChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgfHwgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSkgewogCQkvKiBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KQEAgLTgzNywxMiArODI2LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRSSUdfSU5UCi0JCSAqIGRvbid0IGVuYWJsZSB0aGUgYWNxdWlzaW9uIG9wZXJhdGlvbgotCQkgKiB3YWl0IGZvciBhbiBpbnRlcm5hbCBzaWduYWwKLQkJICovCisJfSBlbHNlIHsJLyogVFJJR19JTlQgKi8KIAkJcy0+YXN5bmMtPmludHRyaWcgPSB1c2JkdXhmYXN0X2FpX2ludHRyaWc7CiAJfQogCXVwKCZkZXZwcml2LT5zZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eHNpZ21hLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4c2lnbWEuYwppbmRleCA4OGM2MGI2Li5jY2MzZWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4c2lnbWEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4c2lnbWEuYwpAQCAtMTYxLDE0ICsxNjEsMTEgQEAKIAkvKiBpbnB1dCBidWZmZXIgZm9yIHNpbmdsZSBpbnNuICovCiAJdWludDhfdCAqaW5zbl9idWY7CiAKLQl1aW50OF90IGFvX2NoYW5saXN0W1VTQkRVWFNJR01BX05VTV9BT19DSEFOXTsKIAl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbVVNCRFVYU0lHTUFfTlVNX0FPX0NIQU5dOwogCiAJdW5zaWduZWQgaGlnaF9zcGVlZDoxOwogCXVuc2lnbmVkIGFpX2NtZF9ydW5uaW5nOjE7Ci0JdW5zaWduZWQgYWlfY29udGludW91czoxOwogCXVuc2lnbmVkIGFvX2NtZF9ydW5uaW5nOjE7Ci0JdW5zaWduZWQgYW9fY29udGludW91czoxOwogCXVuc2lnbmVkIHB3bV9jbWRfcnVubmluZzoxOwogCiAJLyogbnVtYmVyIG9mIHNhbXBsZXMgdG8gYWNxdWlyZSAqLwpAQCAtMjIzLDYgKzIyMCw3IEBACiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgdXNiZHV4c2lnbWFfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBkaW9fc3RhdGU7CiAJdWludDMyX3QgdmFsOwogCWludCByZXQ7CkBAIC0zMDEsNyArMjk5LDcgQEAKIAkvKiB0aW1lciB6ZXJvLCB0cmFuc2ZlciBtZWFzdXJlbWVudHMgdG8gY29tZWRpICovCiAJZGV2cHJpdi0+YWlfY291bnRlciA9IGRldnByaXYtPmFpX3RpbWVyOwogCi0JaWYgKCFkZXZwcml2LT5haV9jb250aW51b3VzKSB7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewogCQkvKiBub3QgY29udGludW91cywgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50LS07CiAJCWlmIChkZXZwcml2LT5haV9zYW1wbGVfY291bnQgPCAwKSB7CkBAIC0zMTQsNyArMzEyLDcgQEAKIAl9CiAKIAkvKiBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgVVNCIGJ1cyBhbmQgaGFuZCBpdCBvdmVyIHRvIGNvbWVkaSAqLwotCWZvciAoaSA9IDA7IGkgPCBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKIAkJLyogdHJhbnNmZXIgZGF0YSwgbm90ZSBmaXJzdCBieXRlIGlzIHRoZSBESU8gc3RhdGUgKi8KIAkJdmFsID0gYmUzMl90b19jcHUoZGV2cHJpdi0+aW5fYnVmW2krMV0pOwogCQl2YWwgJj0gMHgwMGZmZmZmZjsJLyogc3RyaXAgc3RhdHVzIGJ5dGUgKi8KQEAgLTM2MCw4ICszNTgsOCBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYmR1eHNpZ21hX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdWludDhfdCAqZGF0YXA7Ci0JaW50IGxlbjsKIAlpbnQgcmV0OwogCWludCBpOwogCkBAIC00MDMsNyArNDAxLDcgQEAKIAkJLyogdGltZXIgemVybywgdHJhbnNmZXIgZnJvbSBjb21lZGkgKi8KIAkJZGV2cHJpdi0+YW9fY291bnRlciA9IGRldnByaXYtPmFvX3RpbWVyOwogCi0JCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCQkvKiBub3QgY29udGludW91cywgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJCWRldnByaXYtPmFvX3NhbXBsZV9jb3VudC0tOwogCQkJaWYgKGRldnByaXYtPmFvX3NhbXBsZV9jb3VudCA8IDApIHsKQEAgLTQxNywxMyArNDE1LDEyIEBACiAKIAkJLyogdHJhbnNtaXQgZGF0YSB0byB0aGUgVVNCIGJ1cyAqLwogCQlkYXRhcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQlsZW4gPSBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKLQkJKmRhdGFwKysgPSBsZW47Ci0JCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJdW5zaWduZWQgaW50IGNoYW4gPSBkZXZwcml2LT5hb19jaGFubGlzdFtpXTsKKwkJKmRhdGFwKysgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKIAkJCXVuc2lnbmVkIHNob3J0IHZhbDsKIAotCQkJcmV0ID0gY29tZWRpX2J1Zl9nZXQocy0+YXN5bmMsICZ2YWwpOworCQkJcmV0ID0gY29tZWRpX2J1Zl9nZXQocywgJnZhbCk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWRldl9lcnIoZGV2LT5jbGFzc19kZXYsICJidWZmZXIgdW5kZXJmbG93XG4iKTsKIAkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IChDT01FRElfQ0JfRU9BIHwKQEAgLTU5NiwxMCArNTkzLDggQEAKIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCS8qIGRhdGEgYXJyaXZlcyBhcyBvbmUgcGFja2V0ICovCiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmc7Ci0JCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAwOwogCX0gZWxzZSB7CiAJCS8qIGNvbnRpbnVvdXMgYWNxdWlzaXRpb24gKi8KLQkJZGV2cHJpdi0+YWlfY29udGludW91cyA9IDE7CiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJfQogCkBAIC02NjMsMTIgKzY1OCwxMyBAQAogCiBzdGF0aWMgaW50IHVzYmR1eHNpZ21hX2FpX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSAgdW5zaWduZWQgaW50IHRyaWdudW0pCisJCQkJICB1bnNpZ25lZCBpbnQgdHJpZ19udW0pCiB7CiAJc3RydWN0IHVzYmR1eHNpZ21hX3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCByZXQ7CiAKLQlpZiAodHJpZ251bSAhPSAwKQorCWlmICh0cmlnX251bSAhPSBjbWQtPnN0YXJ0X2FyZykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkb3duKCZkZXZwcml2LT5zZW0pOwpAQCAtNzM4LDcgKzczNCw2IEBACiAJCX0KIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCX0gZWxzZSB7CS8qIFRSSUdfSU5UICovCi0JCS8qIHdhaXQgZm9yIGFuIGludGVybmFsIHNpZ25hbCBhbmQgc3VibWl0IHRoZSB1cmJzIGxhdGVyICovCiAJCXMtPmFzeW5jLT5pbnR0cmlnID0gdXNiZHV4c2lnbWFfYWlfaW50dHJpZzsKIAl9CiAKQEAgLTg1NiwxMiArODUxLDEzIEBACiAKIHN0YXRpYyBpbnQgdXNiZHV4c2lnbWFfYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICB1bnNpZ25lZCBpbnQgdHJpZ251bSkKKwkJCQkgIHVuc2lnbmVkIGludCB0cmlnX251bSkKIHsKIAlzdHJ1Y3QgdXNiZHV4c2lnbWFfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJaW50IHJldDsKIAotCWlmICh0cmlnbnVtICE9IDApCisJaWYgKHRyaWdfbnVtICE9IGNtZC0+c3RhcnRfYXJnKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRvd24oJmRldnByaXYtPnNlbSk7CkBAIC05ODUsMTAgKzk4MSw4IEBACiAJCQkgKi8KIAkJCWRldnByaXYtPmFvX3NhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CiAJCX0KLQkJZGV2cHJpdi0+YW9fY29udGludW91cyA9IDA7CiAJfSBlbHNlIHsKIAkJLyogY29udGludW91cyBhY3F1aXNpdGlvbiAqLwotCQlkZXZwcml2LT5hb19jb250aW51b3VzID0gMTsKIAkJZGV2cHJpdi0+YW9fc2FtcGxlX2NvdW50ID0gMDsKIAl9CiAKQEAgLTEwMDQsMTQgKzk5OCwxMSBAQAogCXN0cnVjdCB1c2JkdXhzaWdtYV9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOwogCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAlpbnQgcmV0OwotCWludCBpOwogCiAJZG93bigmZGV2cHJpdi0+c2VtKTsKIAogCS8qIHNldCBjdXJyZW50IGNoYW5uZWwgb2YgdGhlIHJ1bm5pbmcgYWNxdWlzaXRpb24gdG8gemVybyAqLwogCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpCi0JCWRldnByaXYtPmFvX2NoYW5saXN0W2ldID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKIAogCWRldnByaXYtPmFvX2NvdW50ZXIgPSBkZXZwcml2LT5hb190aW1lcjsKIApAQCAtMTAyNyw3ICsxMDE4LDYgQEAKIAkJfQogCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CiAJfSBlbHNlIHsJLyogVFJJR19JTlQgKi8KLQkJLyogd2FpdCBmb3IgYW4gaW50ZXJuYWwgc2lnbmFsIGFuZCBzdWJtaXQgdGhlIHVyYnMgbGF0ZXIgKi8KIAkJcy0+YXN5bmMtPmludHRyaWcgPSB1c2JkdXhzaWdtYV9hb19pbnR0cmlnOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwppbmRleCAyMGJlOTU3Li5lNmZiMzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwpAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgY2hkX2RlY19pc3IoaW50IGlycSwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAgPSAoc3RydWN0IGNyeXN0YWxoZF9hZHAgKikgYXJnOworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAgPSBhcmc7CiAJaW50IHJjID0gMDsKIAlpZiAoYWRwKQogCQlyYyA9IGNyeXN0YWxoZF9jbWRfaW50ZXJydXB0KCZhZHAtPmNtZHMpOwpAQCAtMTEyLDcgKzExMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNyeXN0YWxoZF91c2VyX2RhdGEodm9pZCBfX3VzZXIgKnVkLCB2b2lkICpkciwKLQkJCSBpbnQgc2l6ZSwgaW50IHNldCkKKwkJCQkgICAgICBpbnQgc2l6ZSwgaW50IHNldCkKIHsKIAlpbnQgcmM7CiAKQEAgLTEzNSw3ICsxMzUsOCBAQAogfQogCiBzdGF0aWMgaW50IGNoZF9kZWNfZmV0Y2hfY2RhdGEoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwKLQkgc3RydWN0IGNyeXN0YWxoZF9pb2N0bF9kYXRhICppbywgdWludDMyX3QgbV9zeiwgdW5zaWduZWQgbG9uZyB1YSkKKwkJCSAgICAgICBzdHJ1Y3QgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlvLCB1aW50MzJfdCBtX3N6LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWEpCiB7CiAJdW5zaWduZWQgbG9uZyB1YV9vZmY7CiAJaW50IHJjID0gMDsKQEAgLTE1NCw3ICsxNTUsNyBAQAogCWlvLT5hZGRfY2RhdGFfc3ogPSBtX3N6OwogCXVhX29mZiA9IHVhICsgc2l6ZW9mKGlvLT51ZGF0YSk7CiAJcmMgPSBjcnlzdGFsaGRfdXNlcl9kYXRhKCh2b2lkIF9fdXNlciAqKXVhX29mZiwgaW8tPmFkZF9jZGF0YSwKLQkJCWlvLT5hZGRfY2RhdGFfc3osIDApOworCQkJCSBpby0+YWRkX2NkYXRhX3N6LCAwKTsKIAlpZiAocmMpIHsKIAkJQkNNTE9HX0VSUigiZmFpbGVkIHRvIHB1bGwgYWRkX2NkYXRhIHN6OiV4IHVhX29mZjoleFxuIiwKIAkJCSAgIGlvLT5hZGRfY2RhdGFfc3osICh1bnNpZ25lZCBpbnQpdWFfb2ZmKTsKQEAgLTE2Nyw3ICsxNjgsOCBAQAogfQogCiBzdGF0aWMgaW50IGNoZF9kZWNfcmVsZWFzZV9jZGF0YShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLAotCQkJIHN0cnVjdCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaW8sIHVuc2lnbmVkIGxvbmcgdWEpCisJCQkJIHN0cnVjdCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaW8sCisJCQkJIHVuc2lnbmVkIGxvbmcgdWEpCiB7CiAJdW5zaWduZWQgbG9uZyB1YV9vZmY7CiAJaW50IHJjOwpAQCAtMTgwLDcgKzE4Miw3IEBACiAJaWYgKGlvLT5jbWQgIT0gQkNNX0lPQ19GV19ET1dOTE9BRCkgewogCQl1YV9vZmYgPSB1YSArIHNpemVvZihpby0+dWRhdGEpOwogCQlyYyA9IGNyeXN0YWxoZF91c2VyX2RhdGEoKHZvaWQgX191c2VyICopdWFfb2ZmLCBpby0+YWRkX2NkYXRhLAotCQkJCQlpby0+YWRkX2NkYXRhX3N6LCAxKTsKKwkJCQkJIGlvLT5hZGRfY2RhdGFfc3osIDEpOwogCQlpZiAocmMpIHsKIAkJCUJDTUxPR19FUlIoCiAJCQkJImZhaWxlZCB0byBwdXNoIGFkZF9jZGF0YSBzejoleCB1YV9vZmY6JXhcbiIsCkBAIC0yMTAsNyArMjEyLDcgQEAKIAl9CiAKIAlyYyA9IGNyeXN0YWxoZF91c2VyX2RhdGEoKHZvaWQgX191c2VyICopdWEsICZpby0+dWRhdGEsCi0JCQlzaXplb2YoaW8tPnVkYXRhKSwgc2V0KTsKKwkJCQkgc2l6ZW9mKGlvLT51ZGF0YSksIHNldCk7CiAJaWYgKHJjKSB7CiAJCUJDTUxPR19FUlIoImZhaWxlZCB0byAlcyBpb2RhdGFcbiIsIChzZXQgPyAic2V0IiA6ICJnZXQiKSk7CiAJCXJldHVybiByYzsKQEAgLTM4Miw3ICszODQsNyBAQAogCX0KIAogCWRldiA9IGRldmljZV9jcmVhdGUoY3J5c3RhbGhkX2NsYXNzLCBOVUxMLAotCQkJIE1LREVWKGFkcC0+Y2hkX2RlY19tYWpvciwgMCksIE5VTEwsICJjcnlzdGFsaGQiKTsKKwkJCSAgICBNS0RFVihhZHAtPmNoZF9kZWNfbWFqb3IsIDApLCBOVUxMLCAiY3J5c3RhbGhkIik7CiAJaWYgKElTX0VSUihkZXYpKSB7CiAJCXJjID0gUFRSX0VSUihkZXYpOwogCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGRldmljZVxuIik7CkBAIC0zOTcsOCArMzk5LDcgQEAKIAogCS8qIEFsbG9jYXRlIGdlbmVyYWwgcHVycG9zZSBpb2N0bCBwb29sLiAqLwogCWZvciAoaSA9IDA7IGkgPCBDSERfSU9EQVRBX1BPT0xfU1o7IGkrKykgewotCQl0ZW1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXN0YWxoZF9pb2N0bF9kYXRhKSwKLQkJCQkJIEdGUF9LRVJORUwpOworCQl0ZW1wID0ga3phbGxvYyhzaXplb2YoKnRlbXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0ZW1wKSB7CiAJCQlCQ01MT0dfRVJSKCJpb2N0bCBkYXRhIHBvb2wga3phbGxvYyBmYWlsZWRcbiIpOwogCQkJcmMgPSAtRU5PTUVNOwpAQCAtNTQ5LDExICs1NTAsMTEgQEAKIAllbnVtIEJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKIAogCUJDTUxPRyhCQ01MT0dfREJHLAotCQkiUENJX0lORk86IFZlbmRvcjoweCUwNHggRGV2aWNlOjB4JTA0eCBzX3ZlbmRvcjoweCUwNHggc19kZXZpY2U6IDB4JTA0eFxuIiwKLQkJcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCi0JCXBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCSAgICAgICAiUENJX0lORk86IFZlbmRvcjoweCUwNHggRGV2aWNlOjB4JTA0eCBzX3ZlbmRvcjoweCUwNHggc19kZXZpY2U6IDB4JTA0eFxuIiwKKwkgICAgICAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCisJICAgICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCi0JcGluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5c3RhbGhkX2FkcCksIEdGUF9LRVJORUwpOworCXBpbmZvID0ga3phbGxvYyhzaXplb2YoKnBpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwaW5mbykgewogCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2Z1bmN0aW9ucy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9mdW5jdGlvbnMuYwppbmRleCBlZTlkMzliLi42NWI2ZmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2Z1bmN0aW9ucy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvZnVuY3Rpb25zLmMKQEAgLTI0LDI0ICsyNCw2IEBACiAjaW5jbHVkZSAibGlic2Jldy5oIgogI2luY2x1ZGUgInBtY2M0LmgiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TQkVfSERMQ19WNykgfHwgZGVmaW5lZChDT05GSUdfU0JFX1dBTjI1NlQzX0hETENfVjcpIHx8IFwKLWRlZmluZWQoQ09ORklHX1NCRV9IRExDX1Y3X01PRFVMRSkgfHwgXAotZGVmaW5lZChDT05GSUdfU0JFX1dBTjI1NlQzX0hETENfVjdfTU9EVUxFKQotI2RlZmluZSBfdjdfaGRsY18gIDEKLSNlbHNlCi0jZGVmaW5lIF92N19oZGxjXyAgMAotI2VuZGlmCi0KLSNpZiBfdjdfaGRsY18KLSNkZWZpbmUgVjcoeCkgKHggIyMgX3Y3KQotZXh0ZXJuIGludCAgaGRsY19uZXRpZl9yeF92NyhoZGxjX2RldmljZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKLWV4dGVybiBpbnQgIHJlZ2lzdGVyX2hkbGNfZGV2aWNlX3Y3KGhkbGNfZGV2aWNlICopOwotZXh0ZXJuIGludCAgdW5yZWdpc3Rlcl9oZGxjX2RldmljZV92NyhoZGxjX2RldmljZSAqKTsKLQotI2Vsc2UKLSNkZWZpbmUgVjcoeCkgeAotI2VuZGlmCi0KIAogI2lmbmRlZiBVU0VfTUFYX0lOVF9ERUxBWQogc3RhdGljIGludCAgZHVtbXkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2h3cHJvYmUuYwppbmRleCA5YjQxOThiLi40ZmEyN2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2h3cHJvYmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2h3cHJvYmUuYwpAQCAtMTU5LDggKzE1OSw4IEBACiAJCWhpLT5uZGV2ID0gTlVMTDsKIAkJaGktPmFkZHJbMF0gPSAwTDsKIAkJaGktPmFkZHJbMV0gPSAwTDsKLQkJaGktPmFkZHJfbWFwcGVkWzBdID0gMEw7Ci0JCWhpLT5hZGRyX21hcHBlZFsxXSA9IDBMOworCQloaS0+YWRkcl9tYXBwZWRbMF0gPSBOVUxMOworCQloaS0+YWRkcl9tYXBwZWRbMV0gPSBOVUxMOwogCX0KIH0KIApAQCAtMTc0LDE0ICsxNzQsMTQgQEAKIAkJaWYgKGhpLT5wY2lfc2xvdCA9PSAweGZmKQogCQkJYnJlYWs7CiAJCWlmIChoaS0+YWRkcl9tYXBwZWRbMF0pIHsKLQkJCWlvdW5tYXAoKHZvaWQgKikoaGktPmFkZHJfbWFwcGVkWzBdKSk7CisJCQlpb3VubWFwKGhpLT5hZGRyX21hcHBlZFswXSk7CiAJCQlyZWxlYXNlX21lbV9yZWdpb24oKGxvbmcpIGhpLT5hZGRyWzBdLCBoaS0+bGVuWzBdKTsKLQkJCWhpLT5hZGRyX21hcHBlZFswXSA9IDA7CisJCQloaS0+YWRkcl9tYXBwZWRbMF0gPSBOVUxMOwogCQl9CiAJCWlmIChoaS0+YWRkcl9tYXBwZWRbMV0pIHsKLQkJCWlvdW5tYXAoKHZvaWQgKikoaGktPmFkZHJfbWFwcGVkWzFdKSk7CisJCQlpb3VubWFwKGhpLT5hZGRyX21hcHBlZFsxXSk7CiAJCQlyZWxlYXNlX21lbV9yZWdpb24oKGxvbmcpIGhpLT5hZGRyWzFdLCBoaS0+bGVuWzFdKTsKLQkJCWhpLT5hZGRyX21hcHBlZFsxXSA9IDA7CisJCQloaS0+YWRkcl9tYXBwZWRbMV0gPSBOVUxMOwogCQl9CiAJfQogfQpAQCAtMjA1LDcgKzIwNSw3IEBACiAjaWZkZWYgQ09ORklHX1NCRV9QTUNDNF9OQ09NTQogCQlmcmVlX2lycShoaS0+cGRldlsxXS0+aXJxLCBoaS0+bmRldik7CiAjZW5kaWYKLQkJT1Nfa2ZyZWUoaGktPm5kZXYpOworCQlrZnJlZShoaS0+bmRldik7CiAJfQogfQogCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KIAotCQkJaGktPmFkZHJfbWFwcGVkW2pdID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChoaS0+YWRkcltqXSwgaGktPmxlbltqXSk7CisJCQloaS0+YWRkcl9tYXBwZWRbal0gPSBpb3JlbWFwKGhpLT5hZGRyW2pdLCBoaS0+bGVuW2pdKTsKIAkJCWlmICghaGktPmFkZHJfbWFwcGVkW2pdKSB7CiAJCQkJcHJfd2FybmluZygiJXM6IGlvcmVtYXAgZmFpbHMsIGFkZHI9MHglbHgsIGxlbj0weCVseCA/XG4iLAogCQkJCQkgICBoaS0+ZGV2bmFtZSwgaGktPmFkZHJbal0sIGhpLT5sZW5bal0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jCmluZGV4IGIwMmY1YWRlLi4wOWYzZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jCkBAIC02MCw3ICs2MCw2IEBACiB2b2lkICAgICAgICBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0KHZvaWQgKik7CiBzdGF0dXNfdCBfX2luaXQgYzRfaW5pdChjaV90ICosIHVfY2hhciAqLCB1X2NoYXIgKik7CiBzdGF0dXNfdCBfX2luaXQgYzRfaW5pdDIoY2lfdCAqKTsKLWNpX3QgICAgICAgKl9faW5pdCBjNF9uZXcodm9pZCAqKTsKIGludCBfX2luaXQgIGM0aHdfYXR0YWNoX2FsbCh2b2lkKTsKIHZvaWQgX19pbml0IGhkd19zbl9nZXQoaGR3X2luZm9fdCAqLCBpbnQpOwogCkBAIC04NCwyMyArODMsNiBAQAogZXh0ZXJuIGNpX3QgKkNJOwogZXh0ZXJuIHN0cnVjdCBzX2hkd19pbmZvIGhkd19pbmZvW107CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TQkVfSERMQ19WNykgfHwgZGVmaW5lZChDT05GSUdfU0JFX1dBTjI1NlQzX0hETENfVjcpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TQkVfSERMQ19WN19NT0RVTEUpIHx8IGRlZmluZWQoQ09ORklHX1NCRV9XQU4yNTZUM19IRExDX1Y3X01PRFVMRSkKLSNkZWZpbmUgX3Y3X2hkbGNfICAxCi0jZWxzZQotI2RlZmluZSBfdjdfaGRsY18gIDAKLSNlbmRpZgotCi0jaWYgX3Y3X2hkbGNfCi0jZGVmaW5lIFY3KHgpICh4ICMjIF92NykKLWV4dGVybiBpbnQgIGhkbGNfbmV0aWZfcnhfdjcoaGRsY19kZXZpY2UgKiwgc3RydWN0IHNrX2J1ZmYgKik7Ci1leHRlcm4gaW50ICByZWdpc3Rlcl9oZGxjX2RldmljZV92NyhoZGxjX2RldmljZSAqKTsKLWV4dGVybiBpbnQgIHVucmVnaXN0ZXJfaGRsY19kZXZpY2VfdjcoaGRsY19kZXZpY2UgKik7Ci0KLSNlbHNlCi0jZGVmaW5lIFY3KHgpIHgKLSNlbmRpZgotCiBpbnQgICAgICAgICBlcnJvcl9mbGFnOyAgICAgICAgIC8qIG1vZHVsZSBsb2FkIGVycm9yIHJlcG9ydGluZyAqLwogaW50ICAgICAgICAgY3h0MWUxX2xvZ19sZXZlbCA9IExPR19FUlJPUjsKIHN0YXRpYyBpbnQgIGxvZ19sZXZlbF9kZWZhdWx0ID0gTE9HX0VSUk9SOwpAQCAtNDE4LDcgKzQwMCw3IEBACiAJCXN0cnVjdCBjNF9wcml2ICpwcml2OwogCiAJCS8qIGFsbG9jYXRlIHRoZW4gZmlsbCBpbiBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCi0JCXByaXYgPSBPU19rbWFsbG9jKHNpemVvZihzdHJ1Y3QgYzRfcHJpdikpOworCQlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGM0X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwcml2KSB7CiAJCQlwcl93YXJuaW5nKCIlczogbm8gbWVtb3J5IGZvciBuZXRfZGV2aWNlICFcbiIsCiAJCQkJICAgY2ktPmRldm5hbWUpOwpAQCAtNDI4LDcgKzQxMCw3IEBACiAJCWlmICghZGV2KSB7CiAJCQlwcl93YXJuaW5nKCIlczogbm8gbWVtb3J5IGZvciBoZGxjX2RldmljZSAhXG4iLAogCQkJCSAgIGNpLT5kZXZuYW1lKTsKLQkJCU9TX2tmcmVlKHByaXYpOworCQkJa2ZyZWUocHJpdik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlwcml2LT5jaSA9IGNpOwpAQCAtOTcyLDggKzk1NCw4IEBACiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5kZXYpIHx8CiAJCShjNF9pbml0KGNpLCAodV9jaGFyICopIGYwLCAodV9jaGFyICopIGYxKSAhPSBTQkVfRFJWUl9TVUNDRVNTKSkgewotCQlPU19rZnJlZShuZXRkZXZfcHJpdihuZGV2KSk7Ci0JCU9TX2tmcmVlKG5kZXYpOworCQlrZnJlZShuZXRkZXZfcHJpdihuZGV2KSk7CisJCWtmcmVlKG5kZXYpOwogCQllcnJvcl9mbGFnID0gLUVOT0RFVjsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtOTk4LDggKzk4MCw4IEBACiAJCXByX3dhcm5pbmcoIiVzOiBNVVNZQ0MgY291bGQgbm90IGdldCBpcnE6ICVkXG4iLAogCQkJICAgbmRldi0+bmFtZSwgaXJxMCk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwotCQlPU19rZnJlZShuZXRkZXZfcHJpdihuZGV2KSk7Ci0JCU9TX2tmcmVlKG5kZXYpOworCQlrZnJlZShuZXRkZXZfcHJpdihuZGV2KSk7CisJCWtmcmVlKG5kZXYpOwogCQllcnJvcl9mbGFnID0gLUVJTzsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTAwOCw4ICs5OTAsOCBAQAogCQlwcl93YXJuaW5nKCIlczogRUJVUyBjb3VsZCBub3QgZ2V0IGlycTogJWRcbiIsIGhpLT5kZXZuYW1lLCBpcnExKTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJCWZyZWVfaXJxKGlycTAsIG5kZXYpOwotCQlPU19rZnJlZShuZXRkZXZfcHJpdihuZGV2KSk7Ci0JCU9TX2tmcmVlKG5kZXYpOworCQlrZnJlZShuZXRkZXZfcHJpdihuZGV2KSk7CisJCWtmcmVlKG5kZXYpOwogCQllcnJvcl9mbGFnID0gLUVJTzsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTA2OCw4ICsxMDUwLDggQEAKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJCWZyZWVfaXJxKGlycTEsIG5kZXYpOwogCQlmcmVlX2lycShpcnEwLCBuZGV2KTsKLQkJT1Nfa2ZyZWUobmV0ZGV2X3ByaXYobmRldikpOwotCQlPU19rZnJlZShuZGV2KTsKKwkJa2ZyZWUobmV0ZGV2X3ByaXYobmRldikpOworCQlrZnJlZShuZGV2KTsKIAkJLyogZmFpbHVyZSwgZXJyb3JfZmxhZyBpcyBzZXQgKi8KIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMKaW5kZXggN2I0ZjZmMi4uMGJjYmQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jCkBAIC0xLDUgKzEsNSBAQAotc3RhdGljIHVuc2lnbmVkIGludCBtYXhfaW50Y250ID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2JoID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2ludGNudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2JoOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBtdXN5Y2MuYyAtCkBAIC02NCwxMzIgKzY0LDEzNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIDEKIHN0YXRpYyBpbnQKIG11c3ljY19kdW1wX3J4YnVmZmVyX3JpbmcobWNoX3QgKmNoLCBpbnQgbG9ja2l0KQogewotICAgIHN0cnVjdCBtZGVzYyAqbTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlzdHJ1Y3QgbWRlc2MgKm07CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLSAgICB1X2ludDMyX3Qgc3RhdHVzOwotICAgIGludCAgICAgICAgIG47CisJdV9pbnQzMl90IHN0YXR1czsKKwlpbnQgICAgICAgICBuOwogCi0gICAgaWYgKGxvY2tpdCkKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNoX3J4bG9jaywgZmxhZ3MpOwotICAgIGlmIChjaC0+cnhkX251bSA9PSAwKQotCXByX2luZm8oIiAgWkVSTyByZWNlaXZlIGJ1ZmZlcnMgYWxsb2NhdGVkIGZvciB0aGlzIGNoYW5uZWwuIik7Ci0gICAgZWxzZSB7Ci0JRkxVU0hfTUVNX1JFQUQoKTsKLQltID0gJmNoLT5tZHJbY2gtPnJ4aXhfaXJxX3Nydl07Ci0JZm9yIChuID0gY2gtPnJ4ZF9udW07IG47IG4tLSkgewotCSAgICBzdGF0dXMgPSBsZTMyX3RvX2NwdShtLT5zdGF0dXMpOwotCSAgICB7Ci0JCXByX2luZm8oIiVjICAlMDhseFslMmRdOiBzdHMgJTA4eCAoJWMlYyVjJWM6JWQuKSBEYXRhIFslMDh4XSBOZXh0IFslMDh4XVxuIiwKLQkJCShtID09ICZjaC0+bWRyW2NoLT5yeGl4X2lycV9zcnZdKSA/ICdGJyA6ICcgJywKLQkJCSh1bnNpZ25lZCBsb25nKSBtLCBuLAotCQkJc3RhdHVzLAotCQkJbS0+ZGF0YSA/IChzdGF0dXMgJiBIT1NUX1JYX09XTkVEID8gJ0gnIDogJ00nKSA6ICctJywKLQkJCXN0YXR1cyAmIFBPTExfRElTQUJMRUQgPyAnUCcgOiAnLScsCi0JCQlzdGF0dXMgJiBFT0JJUlFfRU5BQkxFID8gJ2InIDogJy0nLAotCQkJc3RhdHVzICYgRU9NSVJRX0VOQUJMRSA/ICdtJyA6ICctJywKLQkJCXN0YXR1cyAmIExFTkdUSF9NQVNLLAotCQkJbGUzMl90b19jcHUobS0+ZGF0YSksIGxlMzJfdG9fY3B1KG0tPm5leHQpKTsKICNpZmRlZiBSTERfRFVNUF9CVUZEQVRBCi0JCXsKLQkJICAgIHVfaW50MzJfdCAgKmRwOwotCQkgICAgaW50ICAgICAgICAgbGVuID0gc3RhdHVzICYgTEVOR1RIX01BU0s7CisJdV9pbnQzMl90ICpkcDsKKwlpbnQgbGVuID0gMDsKKyNlbmRpZgorCWlmIChsb2NraXQpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y2hfcnhsb2NrLCBmbGFncyk7CisJaWYgKGNoLT5yeGRfbnVtID09IDApCisJCXByX2luZm8oIiAgWkVSTyByZWNlaXZlIGJ1ZmZlcnMgYWxsb2NhdGVkIGZvciB0aGlzIGNoYW5uZWwuIik7CisJZWxzZSB7CisJCUZMVVNIX01FTV9SRUFEKCk7CisJCW0gPSAmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XTsKKwkJZm9yIChuID0gY2gtPnJ4ZF9udW07IG47IG4tLSkgeworCQkJc3RhdHVzID0gbGUzMl90b19jcHUobS0+c3RhdHVzKTsKKwkJCXByX2luZm8oIiVjICAlMDhseFslMmRdOiBzdHMgJTA4eCAoJWMlYyVjJWM6JWQuKSBEYXRhIFslMDh4XSBOZXh0IFslMDh4XVxuIiwKKwkJCQkobSA9PSAmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XSkgPyAnRicgOiAnICcsCisJCQkJKHVuc2lnbmVkIGxvbmcpIG0sIG4sCisJCQkJc3RhdHVzLAorCQkJCW0tPmRhdGEgPyAoc3RhdHVzICYgSE9TVF9SWF9PV05FRCA/ICdIJyA6ICdNJykgOiAnLScsCisJCQkJc3RhdHVzICYgUE9MTF9ESVNBQkxFRCA/ICdQJyA6ICctJywKKwkJCQlzdGF0dXMgJiBFT0JJUlFfRU5BQkxFID8gJ2InIDogJy0nLAorCQkJCXN0YXR1cyAmIEVPTUlSUV9FTkFCTEUgPyAnbScgOiAnLScsCisJCQkJc3RhdHVzICYgTEVOR1RIX01BU0ssCisJCQkJbGUzMl90b19jcHUobS0+ZGF0YSksIGxlMzJfdG9fY3B1KG0tPm5leHQpKTsKKyNpZmRlZiBSTERfRFVNUF9CVUZEQVRBCisJCQkJbGVuID0gc3RhdHVzICYgTEVOR1RIX01BU0s7CiAKICNpZiAxCi0JCSAgICBpZiAobS0+ZGF0YSAmJiAoc3RhdHVzICYgSE9TVF9SWF9PV05FRCkpCisJCQkJaWYgKG0tPmRhdGEgJiYgKHN0YXR1cyAmIEhPU1RfUlhfT1dORUQpKQogI2Vsc2UKLQkJICAgIGlmIChtLT5kYXRhKSAgICAvKiBhbHdheXMgZHVtcCByZWdhcmRsZXNzIG9mIHZhbGlkIFJYCi0JCQkJICAgICAqIGRhdGEgKi8KKwkJCQkvKiBhbHdheXMgZHVtcCByZWdhcmRsZXNzIG9mIHZhbGlkIFJYIGRhdGEgKi8KKwkJCQlpZiAobS0+ZGF0YSkKICNlbmRpZgotCQkgICAgewotCQkJZHAgPSAodV9pbnQzMl90ICopIE9TX3BoeXN0b3YoKHZvaWQgKikgKGxlMzJfdG9fY3B1KG0tPmRhdGEpKSk7Ci0JCQlpZiAobGVuID49IDB4MTApCi0JCQkgICAgcHJfaW5mbygiICAgICV4WyV4XTogJTA4WCAlMDhYICUwOFggJTA4eFxuIiwgKHVfaW50MzJfdCkgZHAsIGxlbiwKLQkJCQkgICAgKmRwLCAqKGRwICsgMSksICooZHAgKyAyKSwgKihkcCArIDMpKTsKLQkJCWVsc2UgaWYgKGxlbiA+PSAweDA4KQotCQkJICAgIHByX2luZm8oIiAgICAleFsleF06ICUwOFggJTA4WFxuIiwgKHVfaW50MzJfdCkgZHAsIGxlbiwKLQkJCQkgICAgKmRwLCAqKGRwICsgMSkpOwotCQkJZWxzZQotCQkJICAgIHByX2luZm8oIiAgICAleFsleF06ICUwOFhcbiIsICh1X2ludDMyX3QpIGRwLCBsZW4sICpkcCk7Ci0JCSAgICB9CisJCQkJeworCQkJCQlkcCA9ICh1X2ludDMyX3QgKilPU19waHlzdG92KCh2b2lkICopKGxlMzJfdG9fY3B1KG0tPmRhdGEpKSk7CisJCQkJCWlmIChsZW4gPj0gMHgxMCkKKwkJCQkJCXByX2luZm8oIiAgICAleFsleF06ICUwOFggJTA4WCAlMDhYICUwOHhcbiIsCisJCQkJCQkJKHVfaW50MzJfdClkcCwgbGVuLAorCQkJCQkJCSpkcCwgKihkcCArIDEpLAorCQkJCQkJCSooZHAgKyAyKSwgKihkcCArIDMpKTsKKwkJCQkJZWxzZSBpZiAobGVuID49IDB4MDgpCisJCQkJCQlwcl9pbmZvKCIgICAgJXhbJXhdOiAlMDhYICUwOFhcbiIsCisJCQkJCQkJKHVfaW50MzJfdClkcCwgbGVuLAorCQkJCQkJCSpkcCwgKihkcCArIDEpKTsKKwkJCQkJZWxzZQorCQkJCQkJcHJfaW5mbygiICAgICV4WyV4XTogJTA4WFxuIiwKKwkJCQkJCQkodV9pbnQzMl90KWRwLAorCQkJCQkJCWxlbiwgKmRwKTsKKwkJCQl9CisjZW5kaWYKKwkJCW0gPSBtLT5zbmV4dDsKIAkJfQotI2VuZGlmCi0JICAgIH0KLQkgICAgbSA9IG0tPnNuZXh0OwogCX0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mb3ItICovCi0gICAgcHJfaW5mbygiXG4iKTsKKwlwcl9pbmZvKCJcbiIpOwogCi0gICAgaWYgKGxvY2tpdCkKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y2hfcnhsb2NrLCBmbGFncyk7Ci0gICAgcmV0dXJuIDA7CisJaWYgKGxvY2tpdCkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3J4bG9jaywgZmxhZ3MpOworCXJldHVybiAwOwogfQotI2VuZGlmCiAKLSNpZiAxCiBzdGF0aWMgaW50CiBtdXN5Y2NfZHVtcF90eGJ1ZmZlcl9yaW5nKG1jaF90ICpjaCwgaW50IGxvY2tpdCkKIHsKLSAgICBzdHJ1Y3QgbWRlc2MgKm07Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Ci0gICAgdV9pbnQzMl90ICAgc3RhdHVzOwotICAgIGludCAgICAgICAgIG47Ci0KLSAgICBpZiAobG9ja2l0KQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7Ci0gICAgaWYgKGNoLT50eGRfbnVtID09IDApCi0JcHJfaW5mbygiICBaRVJPIHRyYW5zbWl0IGJ1ZmZlcnMgYWxsb2NhdGVkIGZvciB0aGlzIGNoYW5uZWwuIik7Ci0gICAgZWxzZSB7Ci0JRkxVU0hfTUVNX1JFQUQoKTsKLQltID0gY2gtPnR4ZF9pcnFfc3J2OwotCWZvciAobiA9IGNoLT50eGRfbnVtOyBuOyBuLS0pIHsKLQkgICAgc3RhdHVzID0gbGUzMl90b19jcHUobS0+c3RhdHVzKTsKLQkgICAgewotCQlwcl9pbmZvKCIlYyVjICUwOGx4WyUyZF06IHN0cyAlMDh4ICglYyVjJWMlYzolZC4pIERhdGEgWyUwOHhdIE5leHQgWyUwOHhdXG4iLAotCQkJKG0gPT0gY2gtPnR4ZF91c3JfYWRkKSA/ICdGJyA6ICcgJywKLQkJCShtID09IGNoLT50eGRfaXJxX3NydikgPyAnTCcgOiAnICcsCi0JCQkodW5zaWduZWQgbG9uZykgbSwgbiwKLQkJCXN0YXR1cywKLQkJICAgICBtLT5kYXRhID8gKHN0YXR1cyAmIE1VU1lDQ19UWF9PV05FRCA/ICdNJyA6ICdIJykgOiAnLScsCi0JCQlzdGF0dXMgJiBQT0xMX0RJU0FCTEVEID8gJ1AnIDogJy0nLAotCQkJc3RhdHVzICYgRU9CSVJRX0VOQUJMRSA/ICdiJyA6ICctJywKLQkJCXN0YXR1cyAmIEVPTUlSUV9FTkFCTEUgPyAnbScgOiAnLScsCi0JCQlzdGF0dXMgJiBMRU5HVEhfTUFTSywKLQkJCWxlMzJfdG9fY3B1KG0tPmRhdGEpLCBsZTMyX3RvX2NwdShtLT5uZXh0KSk7CisJc3RydWN0IG1kZXNjICptOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVfaW50MzJfdCAgIHN0YXR1czsKKwlpbnQgICAgICAgICBuOwogI2lmZGVmIFJMRF9EVU1QX0JVRkRBVEEKLQkJewotCQkgICAgdV9pbnQzMl90ICAqZHA7Ci0JCSAgICBpbnQgICAgICAgICBsZW4gPSBzdGF0dXMgJiBMRU5HVEhfTUFTSzsKKwl1X2ludDMyX3QgKmRwOworCWludCBsZW4gPSAwOworI2VuZGlmCiAKLQkJICAgIGlmIChtLT5kYXRhKSB7Ci0JCQlkcCA9ICh1X2ludDMyX3QgKikgT1NfcGh5c3Rvdigodm9pZCAqKSAobGUzMl90b19jcHUobS0+ZGF0YSkpKTsKLQkJCWlmIChsZW4gPj0gMHgxMCkKLQkJCSAgICBwcl9pbmZvKCIgICAgJXhbJXhdOiAlMDhYICUwOFggJTA4WCAlMDh4XG4iLCAodV9pbnQzMl90KSBkcCwgbGVuLAotCQkJCSAgICAqZHAsICooZHAgKyAxKSwgKihkcCArIDIpLCAqKGRwICsgMykpOwotCQkJZWxzZSBpZiAobGVuID49IDB4MDgpCi0JCQkgICAgcHJfaW5mbygiICAgICV4WyV4XTogJTA4WCAlMDhYXG4iLCAodV9pbnQzMl90KSBkcCwgbGVuLAotCQkJCSAgICAqZHAsICooZHAgKyAxKSk7Ci0JCQllbHNlCi0JCQkgICAgcHJfaW5mbygiICAgICV4WyV4XTogJTA4WFxuIiwgKHVfaW50MzJfdCkgZHAsIGxlbiwgKmRwKTsKLQkJICAgIH0KKwlpZiAobG9ja2l0KQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOworCWlmIChjaC0+dHhkX251bSA9PSAwKQorCQlwcl9pbmZvKCIgIFpFUk8gdHJhbnNtaXQgYnVmZmVycyBhbGxvY2F0ZWQgZm9yIHRoaXMgY2hhbm5lbC4iKTsKKwllbHNlIHsKKwkJRkxVU0hfTUVNX1JFQUQoKTsKKwkJbSA9IGNoLT50eGRfaXJxX3NydjsKKwkJZm9yIChuID0gY2gtPnR4ZF9udW07IG47IG4tLSkgeworCQkJc3RhdHVzID0gbGUzMl90b19jcHUobS0+c3RhdHVzKTsKKwkJCXByX2luZm8oIiVjJWMgJTA4bHhbJTJkXTogc3RzICUwOHggKCVjJWMlYyVjOiVkLikgRGF0YSBbJTA4eF0gTmV4dCBbJTA4eF1cbiIsCisJCQkJKG0gPT0gY2gtPnR4ZF91c3JfYWRkKSA/ICdGJyA6ICcgJywKKwkJCQkobSA9PSBjaC0+dHhkX2lycV9zcnYpID8gJ0wnIDogJyAnLAorCQkJCSh1bnNpZ25lZCBsb25nKSBtLCBuLAorCQkJCXN0YXR1cywKKwkJCQltLT5kYXRhID8gKHN0YXR1cyAmIE1VU1lDQ19UWF9PV05FRCA/ICdNJyA6ICdIJykgOiAnLScsCisJCQkJc3RhdHVzICYgUE9MTF9ESVNBQkxFRCA/ICdQJyA6ICctJywKKwkJCQlzdGF0dXMgJiBFT0JJUlFfRU5BQkxFID8gJ2InIDogJy0nLAorCQkJCXN0YXR1cyAmIEVPTUlSUV9FTkFCTEUgPyAnbScgOiAnLScsCisJCQkJc3RhdHVzICYgTEVOR1RIX01BU0ssCisJCQkJbGUzMl90b19jcHUobS0+ZGF0YSksIGxlMzJfdG9fY3B1KG0tPm5leHQpKTsKKyNpZmRlZiBSTERfRFVNUF9CVUZEQVRBCisJCQlsZW4gPSBzdGF0dXMgJiBMRU5HVEhfTUFTSzsKKworCQkJaWYgKG0tPmRhdGEpIHsKKwkJCQlkcCA9ICh1X2ludDMyX3QgKilPU19waHlzdG92KCh2b2lkICopKGxlMzJfdG9fY3B1KG0tPmRhdGEpKSk7CisJCQkJaWYgKGxlbiA+PSAweDEwKQorCQkJCQlwcl9pbmZvKCIgICAgJXhbJXhdOiAlMDhYICUwOFggJTA4WCAlMDh4XG4iLAorCQkJCQkJKHVfaW50MzJfdCkgZHAsIGxlbiwKKwkJCQkJCSpkcCwgKihkcCArIDEpLAorCQkJCQkJKihkcCArIDIpLCAqKGRwICsgMykpOworCQkJCWVsc2UgaWYgKGxlbiA+PSAweDA4KQorCQkJCQlwcl9pbmZvKCIgICAgJXhbJXhdOiAlMDhYICUwOFhcbiIsCisJCQkJCQkodV9pbnQzMl90KWRwLCBsZW4sCisJCQkJCQkqZHAsICooZHAgKyAxKSk7CisJCQkJZWxzZQorCQkJCQlwcl9pbmZvKCIgICAgJXhbJXhdOiAlMDhYXG4iLAorCQkJCQkJKHVfaW50MzJfdClkcCwgbGVuLCAqZHApOworCQkJfQorI2VuZGlmCisJCQltID0gbS0+c25leHQ7CiAJCX0KLSNlbmRpZgotCSAgICB9Ci0JICAgIG0gPSBtLT5zbmV4dDsKLQl9Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9yLSAqLwotICAgIHByX2luZm8oIlxuIik7CisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9yLSAqLworCXByX2luZm8oIlxuIik7CiAKLSAgICBpZiAobG9ja2l0KQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSAgICByZXR1cm4gMDsKKwlpZiAobG9ja2l0KQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKLQogCiAvKgogICogVGhlIGZvbGxvd2luZyBzdXBwb3J0cyBhIGJhY2tkb29yIGRlYnVnIGZhY2lsaXR5IHdoaWNoIGNhbiBiZSB1c2VkIHRvCkBAIC0xOTksMTIgKzIwMSwxMSBAQAogc3RhdHVzX3QKIG11c3ljY19kdW1wX3JpbmcoY2lfdCAqY2ksIHVuc2lnbmVkIGludCBjaGFuKQogewotICAgIG1jaF90ICAgICAgKmNoOworCW1jaF90ICAgICAgKmNoOworCWludCBiaDsKIAotICAgIGlmIChjaGFuID49IE1BWF9DSEFOU19VU0VEKQotCXJldHVybiBTQkVfRFJWUl9GQUlMOyAgICAgICAvKiBFMkJJRyAqLwotICAgIHsKLQlpbnQgICAgICAgICBiaDsKKwlpZiAoY2hhbiA+PSBNQVhfQ0hBTlNfVVNFRCkKKwkJcmV0dXJuIFNCRV9EUlZSX0ZBSUw7ICAgICAgIC8qIEUyQklHICovCiAKIAliaCA9IGF0b21pY19yZWFkKCZjaS0+YmhfcGVuZGluZyk7CiAJcHJfaW5mbygiPj4gYmhfcGVuZCAlZCBbJWRdIGloZWFkICVkIGl0YWlsICVkIFslZF0gdGhfY250ICVkIGJoX2NudCAlZCB3ZGNudCAlZCBub3RlICVkXG4iLApAQCAtMjE0LDQwICsyMTUsNDMgQEAKIAkJY2ktPndkY291bnQsIGNpLT53ZF9ub3RpZnkpOwogCW1heF9iaCA9IDA7ICAgICAgICAgICAgICAgICAvKiByZXNldCBjb3VudGVyICovCiAJbWF4X2ludGNudCA9IDA7ICAgICAgICAgICAgIC8qIHJlc2V0IGNvdW50ZXIgKi8KLSAgICB9CiAKLSAgICBjaCA9IHNkX2ZpbmRfY2hhbihkdW1teSwgY2hhbik7Ci0gICAgaWYgKCFjaCkgewotCXByX2luZm8oIj4+IG11c3ljY19kdW1wX3Jpbmc6IGNoYW5uZWwgJWQgbm90IHVwLlxuIiwgY2hhbik7Ci0JcmV0dXJuIEVOT0VOVDsKLSAgICB9Ci0gICAgcHJfaW5mbygiPj4gQ0kgJXAgQ0hBTk5FTCAlM2QgQCAlcDogc3RhdGUgJXggc3RhdHVzL3AgJXgvJXhcbiIsIGNpLCBjaGFuLCBjaCwgY2gtPnN0YXRlLAotCSAgICBjaC0+c3RhdHVzLCBjaC0+cC5zdGF0dXMpOwotICAgIHByX2luZm8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5UWCBCdWZmZXIgUmluZyAtIENoYW5uZWwgJWQsIHR4ZF9udW0gJWQuIChiZC9jaCBwZW5kICVkICVkKSwgVFhEIHJlcXVpcmVkICVkLCB0eHBrdCAlbHVcbiIsCi0JICAgIGNoYW4sIGNoLT50eGRfbnVtLAotCSAgICAodV9pbnQzMl90KSBhdG9taWNfcmVhZCgmY2ktPnR4X3BlbmRpbmcpLCAodV9pbnQzMl90KSBhdG9taWNfcmVhZCgmY2gtPnR4X3BlbmRpbmcpLCBjaC0+dHhkX3JlcXVpcmVkLCBjaC0+cy50eF9wYWNrZXRzKTsKLSAgICBwcl9pbmZvKCIrKyBVc2VyIDB4JXAgSVJRX1NSViAweCVwIFVTUl9BREQgMHglcCBRU3RvcHBlZCAleCwgc3RhcnRfdHggJXggdHhfZnVsbCAlZCB0eGRfZnJlZSAlZCBtb2RlICV4XG4iLAotCSAgICBjaC0+dXNlciwgY2gtPnR4ZF9pcnFfc3J2LCBjaC0+dHhkX3Vzcl9hZGQsCi0JICAgIHNkX3F1ZXVlX3N0b3BwZWQoY2gtPnVzZXIpLAotCSAgICBjaC0+Y2hfc3RhcnRfdHgsIGNoLT50eF9mdWxsLCBjaC0+dHhkX2ZyZWUsIGNoLT5wLmNoYW5fbW9kZSk7Ci0gICAgbXVzeWNjX2R1bXBfdHhidWZmZXJfcmluZyhjaCwgMSk7Ci0gICAgcHJfaW5mbygiUlggQnVmZmVyIFJpbmcgLSBDaGFubmVsICVkLCByeGRfbnVtICVkLiBJUlFfU1JWWyVkXSAweCVwLCBzdGFydF9yeCAleCByeHBrdCAlbHVcbiIsCi0JICAgIGNoYW4sIGNoLT5yeGRfbnVtLCBjaC0+cnhpeF9pcnFfc3J2LAotCSAgICAmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XSwgY2gtPmNoX3N0YXJ0X3J4LCBjaC0+cy5yeF9wYWNrZXRzKTsKLSAgICBtdXN5Y2NfZHVtcF9yeGJ1ZmZlcl9yaW5nKGNoLCAxKTsKKwljaCA9IHNkX2ZpbmRfY2hhbihkdW1teSwgY2hhbik7CisJaWYgKCFjaCkgeworCQlwcl9pbmZvKCI+PiBtdXN5Y2NfZHVtcF9yaW5nOiBjaGFubmVsICVkIG5vdCB1cC5cbiIsIGNoYW4pOworCQlyZXR1cm4gRU5PRU5UOworCX0KKwlwcl9pbmZvKCI+PiBDSSAlcCBDSEFOTkVMICUzZCBAICVwOiBzdGF0ZSAleCBzdGF0dXMvcCAleC8leFxuIiwKKwkJY2ksIGNoYW4sIGNoLCBjaC0+c3RhdGUsCisJCWNoLT5zdGF0dXMsIGNoLT5wLnN0YXR1cyk7CisJcHJfaW5mbygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByX2luZm8oIlRYIEJ1ZmZlciBSaW5nIC0gQ2hhbm5lbCAlZCwgdHhkX251bSAlZC4gKGJkL2NoIHBlbmQgJWQgJWQpLCBUWEQgcmVxdWlyZWQgJWQsIHR4cGt0ICVsdVxuIiwKKwkJY2hhbiwgY2gtPnR4ZF9udW0sCisJCSh1X2ludDMyX3QpYXRvbWljX3JlYWQoJmNpLT50eF9wZW5kaW5nKSwKKwkJKHVfaW50MzJfdClhdG9taWNfcmVhZCgmY2gtPnR4X3BlbmRpbmcpLAorCQljaC0+dHhkX3JlcXVpcmVkLCBjaC0+cy50eF9wYWNrZXRzKTsKKwlwcl9pbmZvKCIrKyBVc2VyIDB4JXAgSVJRX1NSViAweCVwIFVTUl9BREQgMHglcCBRU3RvcHBlZCAleCwgc3RhcnRfdHggJXggdHhfZnVsbCAlZCB0eGRfZnJlZSAlZCBtb2RlICV4XG4iLAorCQljaC0+dXNlciwgY2gtPnR4ZF9pcnFfc3J2LCBjaC0+dHhkX3Vzcl9hZGQsCisJCXNkX3F1ZXVlX3N0b3BwZWQoY2gtPnVzZXIpLAorCQljaC0+Y2hfc3RhcnRfdHgsIGNoLT50eF9mdWxsLCBjaC0+dHhkX2ZyZWUsIGNoLT5wLmNoYW5fbW9kZSk7CisJbXVzeWNjX2R1bXBfdHhidWZmZXJfcmluZyhjaCwgMSk7CisJcHJfaW5mbygiUlggQnVmZmVyIFJpbmcgLSBDaGFubmVsICVkLCByeGRfbnVtICVkLiBJUlFfU1JWWyVkXSAweCVwLCBzdGFydF9yeCAleCByeHBrdCAlbHVcbiIsCisJCWNoYW4sIGNoLT5yeGRfbnVtLCBjaC0+cnhpeF9pcnFfc3J2LAorCQkmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XSwgY2gtPmNoX3N0YXJ0X3J4LCBjaC0+cy5yeF9wYWNrZXRzKTsKKwltdXN5Y2NfZHVtcF9yeGJ1ZmZlcl9yaW5nKGNoLCAxKTsKIAotICAgIHJldHVybiBTQkVfRFJWUl9TVUNDRVNTOworCXJldHVybiBTQkVfRFJWUl9TVUNDRVNTOwogfQogCiAKIHN0YXR1c190CiBtdXN5Y2NfZHVtcF9yaW5ncyhjaV90ICpjaSwgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW4pCiB7Ci0gICAgdW5zaWduZWQgaW50IGNoYW47CisJdW5zaWduZWQgaW50IGNoYW47CiAKLSAgICBmb3IgKGNoYW4gPSBzdGFydF9jaGFuOyBjaGFuIDwgKHN0YXJ0X2NoYW4gKyA1KTsgY2hhbisrKQotCW11c3ljY19kdW1wX3JpbmcoY2ksIGNoYW4pOwotICAgIHJldHVybiBTQkVfRFJWUl9TVUNDRVNTOworCWZvciAoY2hhbiA9IHN0YXJ0X2NoYW47IGNoYW4gPCAoc3RhcnRfY2hhbiArIDUpOyBjaGFuKyspCisJCW11c3ljY19kdW1wX3JpbmcoY2ksIGNoYW4pOworCXJldHVybiBTQkVfRFJWUl9TVUNDRVNTOwogfQogCiAKQEAgLTI1OSwyMiArMjYzLDIyIEBACiB2b2lkCiBtdXN5Y2NfaW5pdF9tZHQobXBpX3QgKnBpKQogewotICAgIHVfaW50MzJfdCAgKmFkZHIsIGNmZzsKLSAgICBpbnQgICAgICAgICBpOworCXVfaW50MzJfdCAgKmFkZHIsIGNmZzsKKwlpbnQgICAgICAgICBpOwogCi0gICAgLyoKLSAgICAgKiBUaGlzIElkbGUgQ29kZSBpbnNlcnRpb24gdGFrZXMgZWZmZWN0IHByaW9yIHRvIGNoYW5uZWwncyBmaXJzdAotICAgICAqIHRyYW5zbWl0dGVkICBtZXNzYWdlLiAgQWZ0ZXIgdGhhdCwgZWFjaCBtZXNzYWdlIGNvbnRhaW5zIGl0cyBvd24gSWRsZQotICAgICAqIENvZGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgdG8gYmUgaXNzdWVkIGFmdGVyIHRoZSBtZXNzYWdlIGlzCi0gICAgICogdHJhbnNtaXR0ZWQgKFJlZi5NVVNZQ0MgNS4yLjIuMzogTUNFTkJMIGJpdCBpbiBHcm91cCBDb25maWd1cmF0aW9uCi0gICAgICogRGVzY3JpcHRvcikuCi0gICAgICovCisJLyoKKwkgKiBUaGlzIElkbGUgQ29kZSBpbnNlcnRpb24gdGFrZXMgZWZmZWN0IHByaW9yIHRvIGNoYW5uZWwncyBmaXJzdAorCSAqIHRyYW5zbWl0dGVkICBtZXNzYWdlLiAgQWZ0ZXIgdGhhdCwgZWFjaCBtZXNzYWdlIGNvbnRhaW5zIGl0cyBvd24gSWRsZQorCSAqIENvZGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgdG8gYmUgaXNzdWVkIGFmdGVyIHRoZSBtZXNzYWdlIGlzCisJICogdHJhbnNtaXR0ZWQgKFJlZi5NVVNZQ0MgNS4yLjIuMzogTUNFTkJMIGJpdCBpbiBHcm91cCBDb25maWd1cmF0aW9uCisJICogRGVzY3JpcHRvcikuCisJICovCiAKLSAgICBhZGRyID0gKHVfaW50MzJfdCAqKSAoKHVfbG9uZykgcGktPnJlZyArIE1VU1lDQ19NRFRfQkFTRTAzX0FERFIpOwotICAgIGNmZyA9IENGR19DSF9GTEFHXzdFIDw8IElETEVfQ09ERTsKKwlhZGRyID0gKHVfaW50MzJfdCAqKSAoKHVfbG9uZykgcGktPnJlZyArIE1VU1lDQ19NRFRfQkFTRTAzX0FERFIpOworCWNmZyA9IENGR19DSF9GTEFHXzdFIDw8IElETEVfQ09ERTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgYWRkcisrLCBpKyspCi0JcGNpX3dyaXRlXzMyKGFkZHIsIGNmZyk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBhZGRyKyssIGkrKykKKwkJcGNpX3dyaXRlXzMyKGFkZHIsIGNmZyk7CiB9CiAKIApAQCAtMjgzLDQ0ICsyODcsNDUgQEAKIHZvaWQKIG11c3ljY191cGRhdGVfdHhfdGhwKG1jaF90ICpjaCkKIHsKLSAgICBzdHJ1Y3QgbWRlc2MgKm1kOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1kZXNjICptZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSAgICB3aGlsZSAoMSkgeworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7CisJd2hpbGUgKDEpIHsKKwkJbWQgPSBjaC0+dHhkX2lycV9zcnY7CisJCUZMVVNIX01FTV9SRUFEKCk7CisJCWlmICghbWQtPmRhdGEpIHsKKwkJCS8qIE5vIE1EcyB3aXRoIGJ1ZmZlcnMgdG8gcHJvY2VzcyAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgobGUzMl90b19jcHUobWQtPnN0YXR1cykpICYgTVVTWUNDX1RYX09XTkVEKSB7CisJCQkvKiB0aGlzIGlzIHRoZSBNRCB0byByZXN0YXJ0IFRYIHdpdGggKi8KKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIE90aGVyd2lzZSwgd2UgaGF2ZSBhIHZhbGlkLCBob3N0LW93bmVkIG1lc3NhZ2UgZGVzY3JpcHRvciB3aGljaAorCQkgKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgYW5kIHdob3NlIGJ1ZmZlciBjYW4gYmUgZnJlZWQsCisJCSAqIHNvLi4uIHByb2Nlc3MgdGhpcyBNRCwgaXQncyBvd25lZCBieSB0aGUgaG9zdC4gIChUaGlzIG1pZ2h0IGdpdmUKKwkJICogYXMgYSBuZXcsIHVwZGF0ZWQgdHhkX2lycV9zcnYuKQorCQkgKi8KKwkJbXVzeWNjX2JoX3R4X2VvbShjaC0+dXAsIGNoLT5nY2hhbik7CisJfQogCW1kID0gY2gtPnR4ZF9pcnFfc3J2OwotCUZMVVNIX01FTV9SRUFEKCk7Ci0JaWYgKCFtZC0+ZGF0YSkgewotCSAgICAvKiBObyBNRHMgd2l0aCBidWZmZXJzIHRvIHByb2Nlc3MgKi8KLQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOwotCSAgICByZXR1cm47Ci0JfQotCWlmICgobGUzMl90b19jcHUobWQtPnN0YXR1cykpICYgTVVTWUNDX1RYX09XTkVEKSB7Ci0JICAgIC8qIHRoaXMgaXMgdGhlIE1EIHRvIHJlc3RhcnQgVFggd2l0aCAqLwotCSAgICBicmVhazsKLQl9Ci0JLyoKLQkgKiBPdGhlcndpc2UsIHdlIGhhdmUgYSB2YWxpZCwgaG9zdC1vd25lZCBtZXNzYWdlIGRlc2NyaXB0b3Igd2hpY2gKLQkgKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgYW5kIHdob3NlIGJ1ZmZlciBjYW4gYmUgZnJlZWQsCi0JICogc28uLi4gcHJvY2VzcyB0aGlzIE1ELCBpdCdzIG93bmVkIGJ5IHRoZSBob3N0LiAgKFRoaXMgbWlnaHQgZ2l2ZQotCSAqIGFzIGEgbmV3LCB1cGRhdGVkIHR4ZF9pcnFfc3J2LikKLQkgKi8KLQltdXN5Y2NfYmhfdHhfZW9tKGNoLT51cCwgY2gtPmdjaGFuKTsKLSAgICB9Ci0gICAgbWQgPSBjaC0+dHhkX2lycV9zcnY7Ci0gICAgY2gtPnVwLT5yZWdyYW0tPnRocFtjaC0+Z2NoYW5dID0gY3B1X3RvX2xlMzIoT1NfdnRvcGh5cyhtZCkpOwotICAgIEZMVVNIX01FTV9XUklURSgpOworCWNoLT51cC0+cmVncmFtLT50aHBbY2gtPmdjaGFuXSA9IGNwdV90b19sZTMyKE9TX3Z0b3BoeXMobWQpKTsKKwlGTFVTSF9NRU1fV1JJVEUoKTsKIAotICAgIGlmIChjaC0+dHhfZnVsbCkgewotCWNoLT50eF9mdWxsID0gMDsKLQljaC0+dHhkX3JlcXVpcmVkID0gMDsKLQlzZF9lbmFibGVfeG1pdChjaC0+dXNlcik7ICAvKiByZS1lbmFibGUgdG8gY2F0Y2ggZmxvdyBjb250cm9sbGVkCi0JCQkJICAgICAqIGNoYW5uZWwgKi8KLSAgICB9Ci0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOworCWlmIChjaC0+dHhfZnVsbCkgeworCQljaC0+dHhfZnVsbCA9IDA7CisJCWNoLT50eGRfcmVxdWlyZWQgPSAwOworCQlzZF9lbmFibGVfeG1pdChjaC0+dXNlcik7ICAvKiByZS1lbmFibGUgdG8gY2F0Y2ggZmxvdyBjb250cm9sbGVkCisJCQkJCSAgICAqIGNoYW5uZWwgKi8KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOwogCiAjaWZkZWYgUkxEX1RSQU5TX0RFQlVHCi0gICAgcHJfaW5mbygiKysgbXVzeWNjX3VwZGF0ZV90eF90aHBbJWRdOiBzZXR0aW5nIHRocCA9ICVwLCBzdHMgJXhcbiIsIGNoLT5jaGFubnVtLCBtZCwgbWQtPnN0YXR1cyk7CisJcHJfaW5mbygiKysgbXVzeWNjX3VwZGF0ZV90eF90aHBbJWRdOiBzZXR0aW5nIHRocCA9ICVwLCBzdHMgJXhcbiIsCisJCWNoLT5jaGFubnVtLCBtZCwgbWQtPnN0YXR1cyk7CiAjZW5kaWYKIH0KIApAQCAtMzM3LDk2ICszNDIsODggQEAKIHZvaWQKIG11c3ljY193cV9jaGFuX3Jlc3RhcnQodm9pZCAqYXJnKSAgICAgIC8qIGNoYW5uZWwgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIHsKLSAgICBtY2hfdCAgICAgICpjaDsKLSAgICBtcGlfdCAgICAgICpwaTsKLSAgICBzdHJ1Y3QgbWRlc2MgKm1kOwotI2lmIDAKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCisJbWNoX3QgICAgICAqY2g7CisJbXBpX3QgICAgICAqcGk7CisJc3RydWN0IG1kZXNjICptZDsKIAotICAgIGNoID0gY29udGFpbmVyX29mKGFyZywgc3RydWN0IGM0X2NoYW5faW5mbywgY2hfd29yayk7Ci0gICAgcGkgPSBjaC0+dXA7Ci0KLSNpZmRlZiBSTERfVFJBTlNfREVCVUcKLSAgICBwcl9pbmZvKCJ3cV9jaGFuX3Jlc3RhcnRbJWRdOiBzdGFydF9SVFslZC8lZF0gc3RhdHVzICV4XG4iLAotCSAgICBjaC0+Y2hhbm51bSwgY2gtPmNoX3N0YXJ0X3J4LCBjaC0+Y2hfc3RhcnRfdHgsIGNoLT5zdGF0dXMpOwotCi0jZW5kaWYKLQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qKiBjaGVjayBmb3IgUlggcmVzdGFydCByZXF1ZXN0ICoqLwotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgaWYgKChjaC0+Y2hfc3RhcnRfcngpICYmIChjaC0+c3RhdHVzICYgUlhfRU5BQkxFRCkpIHsKLQotCWNoLT5jaF9zdGFydF9yeCA9IDA7CiAjaWYgZGVmaW5lZChSTERfVFJBTlNfREVCVUcpIHx8IGRlZmluZWQoUkxEX1JYQUNUX0RFQlVHKQotCXsKLQkgICAgc3RhdGljIGludCAgaGVyZWI0ID0gNzsKKwlzdGF0aWMgaW50IGhlcmViNCA9IDc7CisjZW5kaWYKIAotCSAgICBpZiAoaGVyZWI0KSB7ICAgICAgICAgICAgLyogUkxEIERFQlVHICovCi0JCWhlcmViNC0tOworCWNoID0gY29udGFpbmVyX29mKGFyZywgc3RydWN0IGM0X2NoYW5faW5mbywgY2hfd29yayk7CisJcGkgPSBjaC0+dXA7CisKICNpZmRlZiBSTERfVFJBTlNfREVCVUcKLQkJbWQgPSAmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XTsKLQkJcHJfaW5mbygiKysgbXVzeWNjX3dxX2NoYW5fcmVzdGFydFslZF0gQ0hBTiBSWCBBQ1RJVkFURTogcnhpeF9pcnFfc3J2ICVkLCBtZCAlcCBzdHMgJXgsIHJ4cGt0ICVsdVxuIiwKLQkJY2gtPmNoYW5udW0sIGNoLT5yeGl4X2lycV9zcnYsIG1kLCBsZTMyX3RvX2NwdShtZC0+c3RhdHVzKSwKLQkJCWNoLT5zLnJ4X3BhY2tldHMpOworCXByX2luZm8oIndxX2NoYW5fcmVzdGFydFslZF06IHN0YXJ0X1JUWyVkLyVkXSBzdGF0dXMgJXhcbiIsCisJCWNoLT5jaGFubnVtLCBjaC0+Y2hfc3RhcnRfcngsIGNoLT5jaF9zdGFydF90eCwgY2gtPnN0YXR1cyk7CisKKyNlbmRpZgorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyoqIGNoZWNrIGZvciBSWCByZXN0YXJ0IHJlcXVlc3QgKiovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGNoLT5jaF9zdGFydF9yeCkgJiYgKGNoLT5zdGF0dXMgJiBSWF9FTkFCTEVEKSkgeworCisJCWNoLT5jaF9zdGFydF9yeCA9IDA7CisjaWYgZGVmaW5lZChSTERfVFJBTlNfREVCVUcpIHx8IGRlZmluZWQoUkxEX1JYQUNUX0RFQlVHKQorCQlpZiAoaGVyZWI0KSB7ICAgICAgICAgICAgLyogUkxEIERFQlVHICovCisJCQloZXJlYjQtLTsKKyNpZmRlZiBSTERfVFJBTlNfREVCVUcKKwkJCW1kID0gJmNoLT5tZHJbY2gtPnJ4aXhfaXJxX3Nydl07CisJCQlwcl9pbmZvKCIrKyBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0WyVkXSBDSEFOIFJYIEFDVElWQVRFOiByeGl4X2lycV9zcnYgJWQsIG1kICVwIHN0cyAleCwgcnhwa3QgJWx1XG4iLAorCQkJCWNoLT5jaGFubnVtLCBjaC0+cnhpeF9pcnFfc3J2LCBtZCwKKwkJCQlsZTMyX3RvX2NwdShtZC0+c3RhdHVzKSwgY2gtPnMucnhfcGFja2V0cyk7CiAjZWxpZiBkZWZpbmVkKFJMRF9SWEFDVF9ERUJVRykKLQkJbWQgPSAmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XTsKLQkJcHJfaW5mbygiKysgbXVzeWNjX3dxX2NoYW5fcmVzdGFydFslZF0gQ0hBTiBSWCBBQ1RJVkFURTogcnhpeF9pcnFfc3J2ICVkLCBtZCAlcCBzdHMgJXgsIHJ4cGt0ICVsdVxuIiwKLQkJY2gtPmNoYW5udW0sIGNoLT5yeGl4X2lycV9zcnYsIG1kLCBsZTMyX3RvX2NwdShtZC0+c3RhdHVzKSwKLQkJCWNoLT5zLnJ4X3BhY2tldHMpOwotCQltdXN5Y2NfZHVtcF9yeGJ1ZmZlcl9yaW5nKGNoLCAxKTsgICAgICAvKiBSTEQgREVCVUcgKi8KKwkJCW1kID0gJmNoLT5tZHJbY2gtPnJ4aXhfaXJxX3Nydl07CisJCQlwcl9pbmZvKCIrKyBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0WyVkXSBDSEFOIFJYIEFDVElWQVRFOiByeGl4X2lycV9zcnYgJWQsIG1kICVwIHN0cyAleCwgcnhwa3QgJWx1XG4iLAorCQkJCWNoLT5jaGFubnVtLCBjaC0+cnhpeF9pcnFfc3J2LAorCQkJCW1kLCBsZTMyX3RvX2NwdShtZC0+c3RhdHVzKSwKKwkJCQljaC0+cy5yeF9wYWNrZXRzKTsKKwkJCW11c3ljY19kdW1wX3J4YnVmZmVyX3JpbmcoY2gsIDEpOyAgICAgIC8qIFJMRCBERUJVRyAqLwogI2VuZGlmCi0JICAgIH0KKwkJfQorI2VuZGlmCisJCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfQ0hBTk5FTF9BQ1RJVkFURSB8CisJCQkJU1JfUlhfRElSRUNUSU9OIHwgY2gtPmdjaGFuKTsKIAl9Ci0jZW5kaWYKLQltdXN5Y2Nfc2Vydl9yZXEocGksIFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9SWF9ESVJFQ1RJT04gfCBjaC0+Z2NoYW4pOwotICAgIH0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiogY2hlY2sgZm9yIFRYIHJlc3RhcnQgcmVxdWVzdCAqKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiogY2hlY2sgZm9yIFRYIHJlc3RhcnQgcmVxdWVzdCAqKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAgIGlmICgoY2gtPmNoX3N0YXJ0X3R4KSAmJiAoY2gtPnN0YXR1cyAmIFRYX0VOQUJMRUQpKSB7Ci0JLyogZmluZCBuZXh0IHVucHJvY2Vzc2VkIG1lc3NhZ2UsIHRoZW4gc2V0IFRYIHRocCB0byBpdCAqLwotCW11c3ljY191cGRhdGVfdHhfdGhwKGNoKTsKKwlpZiAoKGNoLT5jaF9zdGFydF90eCkgJiYgKGNoLT5zdGF0dXMgJiBUWF9FTkFCTEVEKSkgeworCQkvKiBmaW5kIG5leHQgdW5wcm9jZXNzZWQgbWVzc2FnZSwgdGhlbiBzZXQgVFggdGhwIHRvIGl0ICovCisJCW11c3ljY191cGRhdGVfdHhfdGhwKGNoKTsKIAotI2lmIDAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOwotI2VuZGlmCi0JbWQgPSBjaC0+dHhkX2lycV9zcnY7Ci0JaWYgKCFtZCkgeworCQltZCA9IGNoLT50eGRfaXJxX3NydjsKKwkJaWYgKCFtZCkgewogI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotCSAgICBwcl9pbmZvKCItLSBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0WyVkXTogV0FSTklORywgc3RhcnRpbmcgTlVMTCBtZFxuIiwgY2gtPmNoYW5udW0pOworCQkJcHJfaW5mbygiLS0gbXVzeWNjX3dxX2NoYW5fcmVzdGFydFslZF06IFdBUk5JTkcsIHN0YXJ0aW5nIE5VTEwgbWRcbiIsCisJCQkJY2gtPmNoYW5udW0pOwogI2VuZGlmCi0jaWYgMAotCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7Ci0jZW5kaWYKLQl9IGVsc2UgaWYgKG1kLT5kYXRhICYmICgobGUzMl90b19jcHUobWQtPnN0YXR1cykpICYgTVVTWUNDX1RYX09XTkVEKSkgewotCSAgICBjaC0+Y2hfc3RhcnRfdHggPSAwOwotI2lmIDAKLQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOyAgIC8qIGFsbG93IGludGVycnVwdHMgZm9yIHNlcnZpY2UgcmVxdWVzdCAqLwotI2VuZGlmCisJCX0gZWxzZSBpZiAobWQtPmRhdGEgJiYgKChsZTMyX3RvX2NwdShtZC0+c3RhdHVzKSkgJgorCQkJICAgTVVTWUNDX1RYX09XTkVEKSkgeworCQkJY2gtPmNoX3N0YXJ0X3R4ID0gMDsKKwogI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotCSAgICBwcl9pbmZvKCIrKyBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0KCkgQ0hBTiBUWCBBQ1RJVkFURTogY2hhbiAlZCB0eGRfaXJxX3NydiAlcCA9IHN0cyAleCwgdHhwa3QgJWx1XG4iLAotCQkgICAgY2gtPmNoYW5udW0sIGNoLT50eGRfaXJxX3NydiwgY2gtPnR4ZF9pcnFfc3J2LT5zdGF0dXMsIGNoLT5zLnR4X3BhY2tldHMpOworCQkJcHJfaW5mbygiKysgbXVzeWNjX3dxX2NoYW5fcmVzdGFydCgpIENIQU4gVFggQUNUSVZBVEU6IGNoYW4gJWQgdHhkX2lycV9zcnYgJXAgPSBzdHMgJXgsIHR4cGt0ICVsdVxuIiwKKwkJCQljaC0+Y2hhbm51bSwgY2gtPnR4ZF9pcnFfc3J2LAorCQkJCWNoLT50eGRfaXJxX3Nydi0+c3RhdHVzLCBjaC0+cy50eF9wYWNrZXRzKTsKICNlbmRpZgotCSAgICBtdXN5Y2Nfc2Vydl9yZXEocGksIFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9UWF9ESVJFQ1RJT04gfCBjaC0+Z2NoYW4pOwotCX0KKwkJCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfQ0hBTk5FTF9BQ1RJVkFURSB8CisJCQkJCVNSX1RYX0RJUkVDVElPTiB8IGNoLT5nY2hhbik7CisJCX0KICNpZmRlZiBSTERfUkVTVEFSVF9ERUJVRwotCWVsc2UgewotCSAgICAvKiByZXRhaW4gcmVxdWVzdCB0byBzdGFydCB1bnRpbCByZXRyaWVkIGFuZCB3ZSBoYXZlIGRhdGEgdG8geG1pdCAqLwotCSAgICBwcl9pbmZvKCItLSBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0WyVkXTogREVMQVlFRCBkdWUgdG8gbWQgJXAgc3RzICV4IGRhdGEgJXgsIHN0YXJ0X3R4ICV4XG4iLAotCQkgICAgY2gtPmNoYW5udW0sIG1kLAotCQkgICAgbGUzMl90b19jcHUobWQtPnN0YXR1cyksCi0JCSAgICBsZTMyX3RvX2NwdShtZC0+ZGF0YSksIGNoLT5jaF9zdGFydF90eCk7Ci0JICAgIG11c3ljY19kdW1wX3R4YnVmZmVyX3JpbmcoY2gsIDApOwotI2lmIDAKLQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX3R4bG9jaywgZmxhZ3MpOyAgIC8qIGFsbG93IGludGVycnVwdHMgZm9yIHNlcnZpY2UgcmVxdWVzdCAqLworCQllbHNlIHsKKwkJCS8qIHJldGFpbiByZXF1ZXN0IHRvIHN0YXJ0IHVudGlsIHJldHJpZWQgYW5kIHdlIGhhdmUgZGF0YSB0byB4bWl0ICovCisJCQlwcl9pbmZvKCItLSBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0WyVkXTogREVMQVlFRCBkdWUgdG8gbWQgJXAgc3RzICV4IGRhdGEgJXgsIHN0YXJ0X3R4ICV4XG4iLAorCQkJCWNoLT5jaGFubnVtLCBtZCwKKwkJCQlsZTMyX3RvX2NwdShtZC0+c3RhdHVzKSwKKwkJCQlsZTMyX3RvX2NwdShtZC0+ZGF0YSksIGNoLT5jaF9zdGFydF90eCk7CisJCQltdXN5Y2NfZHVtcF90eGJ1ZmZlcl9yaW5nKGNoLCAwKTsKKwkJfQogI2VuZGlmCiAJfQotI2VuZGlmCi0gICAgfQogfQogCiAKQEAgLTQzOSwzMSArNDM2LDMyIEBACiBtdXN5Y2NfY2hhbl9yZXN0YXJ0KG1jaF90ICpjaCkKIHsKICNpZmRlZiBSTERfUkVTVEFSVF9ERUJVRwotICAgIHByX2luZm8oIisrIG11c3ljY19jaGFuX3Jlc3RhcnRbJWRdOiB0eGRfaXJxX3NydiBAICVwID0gc3RzICV4XG4iLAotCSAgICBjaC0+Y2hhbm51bSwgY2gtPnR4ZF9pcnFfc3J2LCBjaC0+dHhkX2lycV9zcnYtPnN0YXR1cyk7CisJcHJfaW5mbygiKysgbXVzeWNjX2NoYW5fcmVzdGFydFslZF06IHR4ZF9pcnFfc3J2IEAgJXAgPSBzdHMgJXhcbiIsCisJCWNoLT5jaGFubnVtLCBjaC0+dHhkX2lycV9zcnYsIGNoLT50eGRfaXJxX3Nydi0+c3RhdHVzKTsKICNlbmRpZgogCi0gICAgLyogMi42IC0gZmluZCBuZXh0IHVucHJvY2Vzc2VkIG1lc3NhZ2UsIHRoZW4gc2V0IFRYIHRocCB0byBpdCAqLworCS8qIDIuNiAtIGZpbmQgbmV4dCB1bnByb2Nlc3NlZCBtZXNzYWdlLCB0aGVuIHNldCBUWCB0aHAgdG8gaXQgKi8KICNpZmRlZiBSTERfUkVTVEFSVF9ERUJVRwotICAgIHByX2luZm8oIj4+IG11c3ljY19jaGFuX3Jlc3RhcnQ6IHNjaGVkdWxpbmcgQ2hhbiAleCB3b3JrUSBAICVwXG4iLCBjaC0+Y2hhbm51bSwgJmNoLT5jaF93b3JrKTsKKwlwcl9pbmZvKCI+PiBtdXN5Y2NfY2hhbl9yZXN0YXJ0OiBzY2hlZHVsaW5nIENoYW4gJXggd29ya1EgQCAlcFxuIiwKKwkJY2gtPmNoYW5udW0sICZjaC0+Y2hfd29yayk7CiAjZW5kaWYKLSAgICBjNF93a19jaGFuX3Jlc3RhcnQoY2gpOyAgICAgICAgLyogd29yayBxdWV1ZSBtZWNoYW5pc20gZmlyZXMgb2ZmOiBSZWY6Ci0JCQkJICAgICAqIG11c3ljY193cV9jaGFuX3Jlc3RhcnQgKCkgKi8KLQorCWM0X3drX2NoYW5fcmVzdGFydChjaCk7ICAgICAgICAvKiB3b3JrIHF1ZXVlIG1lY2hhbmlzbSBmaXJlcyBvZmY6IFJlZjoKKwkJCQkJKiBtdXN5Y2Nfd3FfY2hhbl9yZXN0YXJ0ICgpICovCiB9CiAKIAogdm9pZAogcmxkX3B1dF9sZWQobXBpX3QgKnBpLCB1X2ludDMyX3QgbGVkdmFsKQogewotICAgIHN0YXRpYyB1X2ludDMyX3QgbGVkID0gMDsKKwlzdGF0aWMgdV9pbnQzMl90IGxlZDsKIAotICAgIGlmIChsZWR2YWwgPT0gMCkKLQlsZWQgPSAwOwotICAgIGVsc2UKLQlsZWQgfD0gbGVkdmFsOworCWlmIChsZWR2YWwgPT0gMCkKKwkJbGVkID0gMDsKKwllbHNlCisJCWxlZCB8PSBsZWR2YWw7CiAKLSAgICBwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmcGktPnVwLT5jcGxkYmFzZS0+bGVkcywgbGVkKTsgIC8qIFJMRCBERUJVRyBUUkFOSEFORyAqLworCS8qIFJMRCBERUJVRyBUUkFOSEFORyAqLworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopICZwaS0+dXAtPmNwbGRiYXNlLT5sZWRzLCBsZWQpOwogfQogCiAKQEAgLTQ3MiwxMDAgKzQ3MCwxMTAgQEAKIHZvaWQKIG11c3ljY19zZXJ2X3JlcShtcGlfdCAqcGksIHVfaW50MzJfdCByZXEpCiB7Ci0gICAgdm9sYXRpbGUgdV9pbnQzMl90IHI7Ci0gICAgaW50ICAgICAgICAgcmNudDsKLQotICAgIC8qCi0gICAgICogUE9SVCBOT1RFOiBTZW1hcGhvcmUgcHJvdGVjdCBzZXJ2aWNlIGxvb3AgZ3VhcmFudGVlcyBvbmx5IGEgc2luZ2xlCi0gICAgICogb3BlcmF0aW9uIGF0IGEgdGltZS4gIFBlciBNVVNZQ0MgTWFudWFsIC0gIklzc3Vpbmcgc2VydmljZSByZXF1ZXN0cyB0bwotICAgICAqIHRoZSBzYW1lIGNoYW5uZWwgZ3JvdXAgd2l0aG91dCBmaXJzdCByZWNlaXZpbmcgQUNLIGZyb20gZWFjaCByZXF1ZXN0Ci0gICAgICogbWF5IGNhdXNlIHRoZSBob3N0IHRvIGxvc2UgdHJhY2sgb2Ygd2hpY2ggc2VydmljZSByZXF1ZXN0IGhhcyBiZWVuCi0gICAgICogYWNrbm93bGVkZ2VkLiIKLSAgICAgKi8KLQotICAgIFNEX1NFTV9UQUtFKCZwaS0+c3Jfc2VtX2J1c3ksICJzZXJ2Iik7ICAgICAvKiBvbmx5IDEgdGhydSBoZXJlLCBwZXIKLQkJCQkJCSAqIGdyb3VwICovCi0KLSAgICBpZiAocGktPnNyX2xhc3QgPT0gcmVxKSB7Ci0jaWZkZWYgUkxEX1RSQU5TX0RFQlVHCi0JcHJfaW5mbygiPj4gc2FtZSBTUiwgUG9ydCAlZCBSZXEgJXhcbiIsIHBpLT5wb3J0bnVtLCByZXEpOwotI2VuZGlmCisJdm9sYXRpbGUgdV9pbnQzMl90IHI7CisJaW50ICAgICAgICAgcmNudDsKIAogCS8qCi0JICogVGhlIG1vc3QgbGlrZWx5IHJlcGVhdGVkIHJlcXVlc3QgaXMgdGhlIGNoYW5uZWwgYWN0aXZhdGlvbiBjb21tYW5kCi0JICogd2hpY2ggZm9sbG93cyB0aGUgb2NjdXJyZW5jZSBvZiBhIFRyYW5zcGFyZW50IG1vZGUgVFggT05SIG9yIGEKLQkgKiBCVUZGIGVycm9yLiAgSWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgd2FzIGEgQ0hBTk5FTCBBQ1RJVkFURSwKLQkgKiBwcmVjZWRlIGl0IHdpdGggYSBOT09QIGNvbW1hbmQgaW4gb3JkZXIgbWFpbnRhaW4gY29oZXJlbnQgY29udHJvbAotCSAqIG9mIHRoaXMgY3VycmVudCAocmUpQUNUSVZBVEUuCisJICogUE9SVCBOT1RFOiBTZW1hcGhvcmUgcHJvdGVjdCBzZXJ2aWNlIGxvb3AgZ3VhcmFudGVlcyBvbmx5IGEgc2luZ2xlCisJICogb3BlcmF0aW9uIGF0IGEgdGltZS4gIFBlciBNVVNZQ0MgTWFudWFsIC0gIklzc3Vpbmcgc2VydmljZSByZXF1ZXN0cyB0bworCSAqIHRoZSBzYW1lIGNoYW5uZWwgZ3JvdXAgd2l0aG91dCBmaXJzdCByZWNlaXZpbmcgQUNLIGZyb20gZWFjaCByZXF1ZXN0CisJICogbWF5IGNhdXNlIHRoZSBob3N0IHRvIGxvc2UgdHJhY2sgb2Ygd2hpY2ggc2VydmljZSByZXF1ZXN0IGhhcyBiZWVuCisJICogYWNrbm93bGVkZ2VkLiIKIAkgKi8KIAotCXIgPSAocGktPnNyX2xhc3QgJiB+U1JfR0NIQU5ORUxfTUFTSyk7Ci0JaWYgKChyID09IChTUl9DSEFOTkVMX0FDVElWQVRFIHwgU1JfVFhfRElSRUNUSU9OKSkgfHwKLQkgICAgKHIgPT0gKFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9SWF9ESVJFQ1RJT04pKSkgeworCVNEX1NFTV9UQUtFKCZwaS0+c3Jfc2VtX2J1c3ksICJzZXJ2Iik7ICAgICAvKiBvbmx5IDEgdGhydSBoZXJlLCBwZXIKKwkJCQkJCSAgICAqIGdyb3VwICovCisKKwlpZiAocGktPnNyX2xhc3QgPT0gcmVxKSB7CiAjaWZkZWYgUkxEX1RSQU5TX0RFQlVHCi0JICAgIHByX2luZm8oIj4+IHNhbWUgQ0hBTiBBQ1QgU1IsIFBvcnQgJWQgUmVxICV4ID0+IGlzc3VlIFNSX05PT1AgQ01EXG4iLCBwaS0+cG9ydG51bSwgcmVxKTsKKwkJcHJfaW5mbygiPj4gc2FtZSBTUiwgUG9ydCAlZCBSZXEgJXhcbiIsIHBpLT5wb3J0bnVtLCByZXEpOwogI2VuZGlmCi0JICAgIFNEX1NFTV9HSVZFKCZwaS0+c3Jfc2VtX2J1c3kpOyAgICAgLyogYWxsb3cgdGhpcyBuZXh0IHJlcXVlc3QgKi8KLQkgICAgbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9OT09QKTsKLQkgICAgU0RfU0VNX1RBS0UoJnBpLT5zcl9zZW1fYnVzeSwgInNlcnYiKTsgICAgIC8qIHJlbG9jayAmIGNvbnRpbnVlIHcvCi0JCQkJCQkJICogb3JpZ2luYWwgcmVxICovCi0JfSBlbHNlIGlmIChyZXEgPT0gU1JfTk9PUCkgewotCSAgICAvKiBubyBuZWVkIHRvIGlzc3VlIGJhY2stdG8tYmFjayBTUl9OT09QIGNvbW1hbmRzIGF0IHRoaXMgdGltZSAqLworCisJCS8qCisJCSAqIFRoZSBtb3N0IGxpa2VseSByZXBlYXRlZCByZXF1ZXN0IGlzIHRoZSBjaGFubmVsIGFjdGl2YXRpb24gY29tbWFuZAorCQkgKiB3aGljaCBmb2xsb3dzIHRoZSBvY2N1cnJlbmNlIG9mIGEgVHJhbnNwYXJlbnQgbW9kZSBUWCBPTlIgb3IgYQorCQkgKiBCVUZGIGVycm9yLiAgSWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgd2FzIGEgQ0hBTk5FTCBBQ1RJVkFURSwKKwkJICogcHJlY2VkZSBpdCB3aXRoIGEgTk9PUCBjb21tYW5kIGluIG9yZGVyIG1haW50YWluIGNvaGVyZW50IGNvbnRyb2wKKwkJICogb2YgdGhpcyBjdXJyZW50IChyZSlBQ1RJVkFURS4KKwkJICovCisKKwkJciA9IChwaS0+c3JfbGFzdCAmIH5TUl9HQ0hBTk5FTF9NQVNLKTsKKwkJaWYgKChyID09IChTUl9DSEFOTkVMX0FDVElWQVRFIHwgU1JfVFhfRElSRUNUSU9OKSkgfHwKKwkJICAgIChyID09IChTUl9DSEFOTkVMX0FDVElWQVRFIHwgU1JfUlhfRElSRUNUSU9OKSkpIHsKICNpZmRlZiBSTERfVFJBTlNfREVCVUcKLQkgICAgcHJfaW5mbygiPj4gc2FtZSBQb3J0IFNSX05PT1Agc2tpcHBlZCwgUG9ydCAlZFxuIiwgcGktPnBvcnRudW0pOworCQkJcHJfaW5mbygiPj4gc2FtZSBDSEFOIEFDVCBTUiwgUG9ydCAlZCBSZXEgJXggPT4gaXNzdWUgU1JfTk9PUCBDTURcbiIsIHBpLT5wb3J0bnVtLCByZXEpOwogI2VuZGlmCi0JICAgIFNEX1NFTV9HSVZFKCZwaS0+c3Jfc2VtX2J1c3kpOyAgICAgLyogYWxsb3cgdGhpcyBuZXh0IHJlcXVlc3QgKi8KLQkgICAgcmV0dXJuOworCQkJLyogYWxsb3cgdGhpcyBuZXh0IHJlcXVlc3QgKi8KKwkJCVNEX1NFTV9HSVZFKCZwaS0+c3Jfc2VtX2J1c3kpOworCQkJbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9OT09QKTsKKwkJCS8qIHJlbG9jayAmIGNvbnRpbnVlIHcvIG9yaWdpbmFsIHJlcSAqLworCQkJU0RfU0VNX1RBS0UoJnBpLT5zcl9zZW1fYnVzeSwgInNlcnYiKTsKKwkJfSBlbHNlIGlmIChyZXEgPT0gU1JfTk9PUCkgeworCQkJLyogbm8gbmVlZCB0byBpc3N1ZSBiYWNrLXRvLWJhY2sKKwkJCSAqIFNSX05PT1AgY29tbWFuZHMgYXQgdGhpcyB0aW1lCisJCQkgKi8KKyNpZmRlZiBSTERfVFJBTlNfREVCVUcKKwkJCXByX2luZm8oIj4+IHNhbWUgUG9ydCBTUl9OT09QIHNraXBwZWQsIFBvcnQgJWRcbiIsCisJCQkJcGktPnBvcnRudW0pOworI2VuZGlmCisJCQkvKiBhbGxvdyB0aGlzIG5leHQgcmVxdWVzdCAqLworCQkJU0RfU0VNX0dJVkUoJnBpLT5zcl9zZW1fYnVzeSk7CisJCQlyZXR1cm47CisJCX0KIAl9Ci0gICAgfQotICAgIHJjbnQgPSAwOwotICAgIHBpLT5zcl9sYXN0ID0gcmVxOworCXJjbnQgPSAwOworCXBpLT5zcl9sYXN0ID0gcmVxOwogcmV3cml0ZToKLSAgICBwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmcGktPnJlZy0+c3JkLCByZXEpOwotICAgIEZMVVNIX01FTV9XUklURSgpOworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopICZwaS0+cmVnLT5zcmQsIHJlcSk7CisJRkxVU0hfTUVNX1dSSVRFKCk7CiAKLSAgICAvKgotICAgICAqIFBlciBNVVNZQ0MgTWFudWFsLCBTZWN0aW9uIDYuMSwyIC0gIldoZW4gd3JpdGluZyBhbiBTQ1Igc2VydmljZQotICAgICAqIHJlcXVlc3QsIHRoZSBob3N0IG11c3QgZW5zdXJlIGF0IGxlYXN0IG9uZSBQQ0kgYnVzIGNsb2NrIGN5Y2xlIGhhcwotICAgICAqIGVsYXBzZWQgYmVmb3JlIHdyaXRpbmcgYW5vdGhlciBzZXJ2aWNlIHJlcXVlc3QuICBUbyBtZWV0IHRoaXMgbWluaW11bQotICAgICAqIGVsYXBzZWQgc2VydmljZSByZXF1ZXN0IHdyaXRlIHRpbWluZyBpbnRlcnZhbCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAotICAgICAqIHRoZSBob3N0IGZvbGxvdyBhbnkgU0NSIHdyaXRlIHdpdGggYW5vdGhlciBvcGVyYXRpb24gd2hpY2ggcmVhZHMgZnJvbQotICAgICAqIHRoZSBzYW1lIGFkZHJlc3MuIgotICAgICAqLwotICAgIHIgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopICZwaS0+cmVnLT5zcmQpOyAgICAgIC8qIGFkaGVyZSB0byB3cml0ZQotCQkJCQkJCSAqIHRpbWluZyBpbXBvc2l0aW9uICovCi0KLQotICAgIGlmICgociAhPSByZXEpICYmIChyZXEgIT0gU1JfQ0hJUF9SRVNFVCkgJiYgKCsrcmNudCA8PSBNVVNZQ0NfU1JfUkVUUllfQ05UKSkgewotCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SKQotCSAgICBwcl9pbmZvKCIlczogJWQgLSByZWlzc3VlIHNydiByZXEvbGFzdCAleC8leCAoaGR3IHJlYWRzICV4KSwgQ2hhbiAlZC5cbiIsCi0JCSAgICBwaS0+dXAtPmRldm5hbWUsIHJjbnQsIHJlcSwgcGktPnNyX2xhc3QsIHIsCi0JCSAgICAocGktPnBvcnRudW0gKiBNVVNZQ0NfTkNIQU5TKSArIChyZXEgJiAweDFmKSk7Ci0JT1NfdXdhaXRfZHVtbXkoKTsgICAgICAgICAgLyogdGhpcyBkZWxheSBoZWxwcyByZWR1Y2UgcmVpc3N1ZSBjb3VudHMKLQkJCQkgICAgICogKHJlYXNvbiBub3QgeWV0IHJlc2VhcmNoZWQpICovCi0JZ290byByZXdyaXRlOwotICAgIH0KLSAgICBpZiAocmNudCA+IE1VU1lDQ19TUl9SRVRSWV9DTlQpIHsKLQlwcl93YXJuaW5nKCIlczogZmFpbGVkIHNlcnZpY2UgcmVxdWVzdCAoIyVkKT0gJXgsIGdyb3VwICVkLlxuIiwKLQkJICAgcGktPnVwLT5kZXZuYW1lLCBNVVNZQ0NfU1JfUkVUUllfQ05ULCByZXEsIHBpLT5wb3J0bnVtKTsKLQlTRF9TRU1fR0lWRSgmcGktPnNyX3NlbV9idXN5KTsgLyogYWxsb3cgYW55IG5leHQgcmVxdWVzdCAqLwotCXJldHVybjsKLSAgICB9Ci0gICAgaWYgKHJlcSA9PSBTUl9DSElQX1JFU0VUKSB7CiAJLyoKLQkgKiBQT1JUIE5PVEU6IHRoZSBDSElQX1JFU0VUIGNvbW1hbmQgaXMgTk9UIGFjaydkIGJ5IHRoZSBNVVNZQ0MsIHRodXMKLQkgKiB0aGUgdXBjb21pbmcgZGVsYXkgaXMgdXNlZC4gIFRob3VnaCB0aGUgTVVTWUNDIGRvY3VtZW50YXRpb24KLQkgKiBzdWdnZXN0cyBhIHJlYWQtYWZ0ZXItd3JpdGUgd291bGQgc3VwcGx5IHRoZSByZXF1aXJlZCBkZWxheSwgaXQncwotCSAqIHVuY2xlYXIgd2hhdCBDUFUvQlVTIGNsb2NrIHNwZWVkcyBtaWdodCBoYXZlIGJlZW4gYXNzdW1lZCB3aGVuCi0JICogc3VnZ2VzdGluZyB0aGlzICdsYWNrIG9mIEFDSycgd29ya2Fyb3VuZC4gIFRodXMgdGhlIHVzZSBvZiB1d2FpdC4KKwkgKiBQZXIgTVVTWUNDIE1hbnVhbCwgU2VjdGlvbiA2LjEsMiAtICJXaGVuIHdyaXRpbmcgYW4gU0NSIHNlcnZpY2UKKwkgKiByZXF1ZXN0LCB0aGUgaG9zdCBtdXN0IGVuc3VyZSBhdCBsZWFzdCBvbmUgUENJIGJ1cyBjbG9jayBjeWNsZSBoYXMKKwkgKiBlbGFwc2VkIGJlZm9yZSB3cml0aW5nIGFub3RoZXIgc2VydmljZSByZXF1ZXN0LiAgVG8gbWVldCB0aGlzIG1pbmltdW0KKwkgKiBlbGFwc2VkIHNlcnZpY2UgcmVxdWVzdCB3cml0ZSB0aW1pbmcgaW50ZXJ2YWwsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKKwkgKiB0aGUgaG9zdCBmb2xsb3cgYW55IFNDUiB3cml0ZSB3aXRoIGFub3RoZXIgb3BlcmF0aW9uIHdoaWNoIHJlYWRzIGZyb20KKwkgKiB0aGUgc2FtZSBhZGRyZXNzLiIKIAkgKi8KLQlPU191d2FpdCgxMDAwMDAsICJpY2FyZCIpOyAvKiAxMDBtcyAqLwotICAgIH0gZWxzZSB7Ci0JRkxVU0hfTUVNX1JFQUQoKTsKLQlTRF9TRU1fVEFLRSgmcGktPnNyX3NlbV93YWl0LCAic2FrYWNrIik7ICAgICAgIC8qIHNsZWVwIHVudGlsIFNBQ0sKLQkJCQkJCQkgKiBpbnRlcnJ1cHQgb2NjdXJzICovCi0gICAgfQotICAgIFNEX1NFTV9HSVZFKCZwaS0+c3Jfc2VtX2J1c3kpOyAvKiBhbGxvdyBhbnkgbmV4dCByZXF1ZXN0ICovCisKKwkvKiBhZGhlcmUgdG8gd3JpdGUgdGltaW5nIGltcG9zaXRpb24gKi8KKwlyID0gcGNpX3JlYWRfMzIoKHVfaW50MzJfdCAqKSAmcGktPnJlZy0+c3JkKTsKKworCisJaWYgKChyICE9IHJlcSkgJiYgKHJlcSAhPSBTUl9DSElQX1JFU0VUKSAmJgorCSAgICAoKytyY250IDw9IE1VU1lDQ19TUl9SRVRSWV9DTlQpKSB7CisJCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SKQorCQkJcHJfaW5mbygiJXM6ICVkIC0gcmVpc3N1ZSBzcnYgcmVxL2xhc3QgJXgvJXggKGhkdyByZWFkcyAleCksIENoYW4gJWQuXG4iLAorCQkJCXBpLT51cC0+ZGV2bmFtZSwgcmNudCwgcmVxLCBwaS0+c3JfbGFzdCwgciwKKwkJCQkocGktPnBvcnRudW0gKiBNVVNZQ0NfTkNIQU5TKSArIChyZXEgJiAweDFmKSk7CisJCS8qIHRoaXMgZGVsYXkgaGVscHMgcmVkdWNlIHJlaXNzdWUgY291bnRzCisJCSAqIChyZWFzb24gbm90IHlldCByZXNlYXJjaGVkKQorCQkgKi8KKwkJT1NfdXdhaXRfZHVtbXkoKTsKKwkJZ290byByZXdyaXRlOworCX0KKwlpZiAocmNudCA+IE1VU1lDQ19TUl9SRVRSWV9DTlQpIHsKKwkJcHJfd2FybmluZygiJXM6IGZhaWxlZCBzZXJ2aWNlIHJlcXVlc3QgKCMlZCk9ICV4LCBncm91cCAlZC5cbiIsCisJCQkgICBwaS0+dXAtPmRldm5hbWUsIE1VU1lDQ19TUl9SRVRSWV9DTlQsCisJCQkgICByZXEsIHBpLT5wb3J0bnVtKTsKKwkJU0RfU0VNX0dJVkUoJnBpLT5zcl9zZW1fYnVzeSk7IC8qIGFsbG93IGFueSBuZXh0IHJlcXVlc3QgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAocmVxID09IFNSX0NISVBfUkVTRVQpIHsKKwkJLyoKKwkJICogUE9SVCBOT1RFOiB0aGUgQ0hJUF9SRVNFVCBjb21tYW5kIGlzIE5PVCBhY2snZCBieSB0aGUgTVVTWUNDLCB0aHVzCisJCSAqIHRoZSB1cGNvbWluZyBkZWxheSBpcyB1c2VkLiAgVGhvdWdoIHRoZSBNVVNZQ0MgZG9jdW1lbnRhdGlvbgorCQkgKiBzdWdnZXN0cyBhIHJlYWQtYWZ0ZXItd3JpdGUgd291bGQgc3VwcGx5IHRoZSByZXF1aXJlZCBkZWxheSwgaXQncworCQkgKiB1bmNsZWFyIHdoYXQgQ1BVL0JVUyBjbG9jayBzcGVlZHMgbWlnaHQgaGF2ZSBiZWVuIGFzc3VtZWQgd2hlbgorCQkgKiBzdWdnZXN0aW5nIHRoaXMgJ2xhY2sgb2YgQUNLJyB3b3JrYXJvdW5kLiAgVGh1cyB0aGUgdXNlIG9mIHV3YWl0LgorCQkgKi8KKwkJT1NfdXdhaXQoMTAwMDAwLCAiaWNhcmQiKTsgLyogMTAwbXMgKi8KKwl9IGVsc2UgeworCQlGTFVTSF9NRU1fUkVBRCgpOworCQkvKiBzbGVlcCB1bnRpbCBTQUNLIGludGVycnVwdCBvY2N1cnMgKi8KKwkJU0RfU0VNX1RBS0UoJnBpLT5zcl9zZW1fd2FpdCwgInNha2FjayIpOworCX0KKwlTRF9TRU1fR0lWRSgmcGktPnNyX3NlbV9idXN5KTsgLyogYWxsb3cgYW55IG5leHQgcmVxdWVzdCAqLwogfQogCiAKQEAgLTU3Myw5NCArNTgxLDEwMSBAQAogdm9pZAogbXVzeWNjX3VwZGF0ZV90aW1lc2xvdHMobXBpX3QgKnBpKQogewotICAgIGludCAgICAgICAgIGksIGNoOwotICAgIGNoYXIgICAgICAgIGUxbW9kZSA9IElTX0ZSQU1FX0FOWV9FMShwaS0+cC5wb3J0X21vZGUpOworCWludCAgICAgICAgIGksIGNoOworCWNoYXIgICAgICAgIGUxbW9kZSA9IElTX0ZSQU1FX0FOWV9FMShwaS0+cC5wb3J0X21vZGUpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQlpbnQgICAgICAgICB1c2VkYnkgPSAwLCBsYXN0ID0gMCwgdHMsIGosIGJpdHNbOF07CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaW50ICAgICAgICAgdXNlZGJ5ID0gMCwgbGFzdCA9IDAsIHRzLCBqLCBiaXRzWzhdOwogCi0JdV9pbnQ4X3QgbGFzdHZhbCA9IDA7CisJCXVfaW50OF90IGxhc3R2YWwgPSAwOwogCi0JaWYgKCgoaSA9PSAwKSAmJiBlMW1vZGUpIHx8IC8qIGRpc2FibGUgaWYgIEUxIG1vZGUgKi8KLQkgICAgKChpID09IDE2KSAmJiAoKHBpLT5wLnBvcnRfbW9kZSA9PSBDRkdfRlJBTUVfRTFDUkNfQ0FTKSB8fCAocGktPnAucG9ydF9tb2RlID09IENGR19GUkFNRV9FMUNSQ19DQVNfQU1JKSkpCi0JICAgIHx8ICgoaSA+IDIzKSAmJiAoIWUxbW9kZSkpKSAvKiBkaXNhYmxlIGlmIFQxIG1vZGUgKi8KLQkgICAgcGktPnRzbVtpXSA9IDB4ZmY7ICAgICAgLyogbWFrZSB0c2xvdCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBtb2RlICovCi0JZWxzZQotCSAgICBwaS0+dHNtW2ldID0gMHgwMDsgICAgICAvKiBtYWtlIHRzbG90IGF2YWlsYWJsZSBmb3IgYXNzaWdubWVudCAqLwotCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JICAgIGJpdHNbal0gPSAtMTsKLQlmb3IgKGNoID0gMDsgY2ggPCBNVVNZQ0NfTkNIQU5TOyBjaCsrKSB7Ci0JICAgIGlmICgocGktPmNoYW5bY2hdLT5zdGF0ZSA9PSBVUCkgJiYgKHBpLT5jaGFuW2NoXS0+cC5iaXRtYXNrW2ldKSkgewotCQl1c2VkYnkrKzsKLQkJbGFzdCA9IGNoOwotCQlsYXN0dmFsID0gcGktPmNoYW5bY2hdLT5wLmJpdG1hc2tbaV07CisJCWlmICgoKGkgPT0gMCkgJiYgZTFtb2RlKSB8fCAvKiBkaXNhYmxlIGlmICBFMSBtb2RlICovCisJCSAgICAoKGkgPT0gMTYpICYmICgocGktPnAucG9ydF9tb2RlID09IENGR19GUkFNRV9FMUNSQ19DQVMpIHx8CisJCSAgICAocGktPnAucG9ydF9tb2RlID09IENGR19GUkFNRV9FMUNSQ19DQVNfQU1JKSkpIHx8CisJCSAgICAoKGkgPiAyMykgJiYgKCFlMW1vZGUpKSkgLyogZGlzYWJsZSBpZiBUMSBtb2RlICovCisJCQkvKiBtYWtlIHRzbG90IHVuYXZhaWxhYmxlIGZvciB0aGlzIG1vZGUgKi8KKwkJCXBpLT50c21baV0gPSAweGZmOworCQllbHNlCisJCQkvKiBtYWtlIHRzbG90IGF2YWlsYWJsZSBmb3IgYXNzaWdubWVudCAqLworCQkJcGktPnRzbVtpXSA9IDB4MDA7CiAJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCSAgICBpZiAobGFzdHZhbCAmICgxIDw8IGopKQotCQkJYml0c1tqXSA9IGNoOwotCQlwaS0+dHNtW2ldIHw9IGxhc3R2YWw7Ci0JICAgIH0KLQl9Ci0JaWYgKCF1c2VkYnkpCi0JICAgIHRzID0gMDsKLQllbHNlIGlmICgodXNlZGJ5ID09IDEpICYmIChsYXN0dmFsID09IDB4ZmYpKQotCSAgICB0cyA9ICg0IDw8IDUpIHwgbGFzdDsKLQllbHNlIGlmICgodXNlZGJ5ID09IDEpICYmIChsYXN0dmFsID09IDB4N2YpKQotCSAgICB0cyA9ICg1IDw8IDUpIHwgbGFzdDsKLQllbHNlIHsKLQkgICAgaW50ICAgICAgICAgaWR4OworCQkJYml0c1tqXSA9IC0xOworCQlmb3IgKGNoID0gMDsgY2ggPCBNVVNZQ0NfTkNIQU5TOyBjaCsrKSB7CisJCQlpZiAoKHBpLT5jaGFuW2NoXS0+c3RhdGUgPT0gVVApICYmCisJCQkgICAgKHBpLT5jaGFuW2NoXS0+cC5iaXRtYXNrW2ldKSkgeworCQkJCXVzZWRieSsrOworCQkJCWxhc3QgPSBjaDsKKwkJCQlsYXN0dmFsID0gcGktPmNoYW5bY2hdLT5wLmJpdG1hc2tbaV07CisJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJCQkJaWYgKGxhc3R2YWwgJiAoMSA8PCBqKSkKKwkJCQkJCWJpdHNbal0gPSBjaDsKKwkJCQlwaS0+dHNtW2ldIHw9IGxhc3R2YWw7CisJCQl9CisJCX0KKwkJaWYgKCF1c2VkYnkpCisJCQl0cyA9IDA7CisJCWVsc2UgaWYgKCh1c2VkYnkgPT0gMSkgJiYgKGxhc3R2YWwgPT0gMHhmZikpCisJCQl0cyA9ICg0IDw8IDUpIHwgbGFzdDsKKwkJZWxzZSBpZiAoKHVzZWRieSA9PSAxKSAmJiAobGFzdHZhbCA9PSAweDdmKSkKKwkJCXRzID0gKDUgPDwgNSkgfCBsYXN0OworCQllbHNlIHsKKwkJCWludCAgICAgICAgIGlkeDsKIAotCSAgICBpZiAoYml0c1swXSA8IDApCi0JCXRzID0gKDYgPDwgNSkgfCAoaWR4ID0gbGFzdCk7Ci0JICAgIGVsc2UKLQkJdHMgPSAoNyA8PCA1KSB8IChpZHggPSBiaXRzWzBdKTsKLQkgICAgZm9yIChqID0gMTsgaiA8IDg7IGorKykgewotCQlwaS0+cmVncmFtLT5yc2NtW2lkeCAqIDggKyBqXSA9IChiaXRzW2pdIDwgMCkgPyAwIDogKDB4ODAgfCBiaXRzW2pdKTsKLQkJcGktPnJlZ3JhbS0+dHNjbVtpZHggKiA4ICsgal0gPSAoYml0c1tqXSA8IDApID8gMCA6ICgweDgwIHwgYml0c1tqXSk7Ci0JICAgIH0KKwkJCWlmIChiaXRzWzBdIDwgMCkKKwkJCQl0cyA9ICg2IDw8IDUpIHwgKGlkeCA9IGxhc3QpOworCQkJZWxzZQorCQkJCXRzID0gKDcgPDwgNSkgfCAoaWR4ID0gYml0c1swXSk7CisJCQlmb3IgKGogPSAxOyBqIDwgODsgaisrKSB7CisJCQkJcGktPnJlZ3JhbS0+cnNjbVtpZHggKiA4ICsgal0gPQorCQkJCQkoYml0c1tqXSA8IDApID8gMCA6ICgweDgwIHwgYml0c1tqXSk7CisJCQkJcGktPnJlZ3JhbS0+dHNjbVtpZHggKiA4ICsgal0gPQorCQkJCQkoYml0c1tqXSA8IDApID8gMCA6ICgweDgwIHwgYml0c1tqXSk7CisJCQl9CisJCX0KKwkJcGktPnJlZ3JhbS0+cnRzbVtpXSA9IHRzOworCQlwaS0+cmVncmFtLT50dHNtW2ldID0gdHM7CiAJfQotCXBpLT5yZWdyYW0tPnJ0c21baV0gPSB0czsKLQlwaS0+cmVncmFtLT50dHNtW2ldID0gdHM7Ci0gICAgfQotICAgIEZMVVNIX01FTV9XUklURSgpOworCUZMVVNIX01FTV9XUklURSgpOwogCi0gICAgbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9USU1FU0xPVF9NQVAgfCBTUl9SWF9ESVJFQ1RJT04pOwotICAgIG11c3ljY19zZXJ2X3JlcShwaSwgU1JfVElNRVNMT1RfTUFQIHwgU1JfVFhfRElSRUNUSU9OKTsKLSAgICBtdXN5Y2Nfc2Vydl9yZXEocGksIFNSX1NVQkNIQU5ORUxfTUFQIHwgU1JfUlhfRElSRUNUSU9OKTsKLSAgICBtdXN5Y2Nfc2Vydl9yZXEocGksIFNSX1NVQkNIQU5ORUxfTUFQIHwgU1JfVFhfRElSRUNUSU9OKTsKKwltdXN5Y2Nfc2Vydl9yZXEocGksIFNSX1RJTUVTTE9UX01BUCB8IFNSX1JYX0RJUkVDVElPTik7CisJbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9USU1FU0xPVF9NQVAgfCBTUl9UWF9ESVJFQ1RJT04pOworCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfU1VCQ0hBTk5FTF9NQVAgfCBTUl9SWF9ESVJFQ1RJT04pOworCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfU1VCQ0hBTk5FTF9NQVAgfCBTUl9UWF9ESVJFQ1RJT04pOwogfQogI2VuZGlmCiAKIAogI2lmZGVmIFNCRV9XQU4yNTZUM19FTkFCTEUKLXZvaWQKKwl2b2lkCiBtdXN5Y2NfdXBkYXRlX3RpbWVzbG90cyhtcGlfdCAqcGkpCiB7Ci0gICAgbWNoX3QgICAgICAqY2g7CisJbWNoX3QgICAgICAqY2g7CiAKLSAgICB1X2ludDhfdCAgICB0cywgaG1hc2ssIHRzZW47Ci0gICAgaW50ICAgICAgICAgZ2NoYW47Ci0gICAgaW50ICAgICAgICAgaTsKKwl1X2ludDhfdCAgICB0cywgaG1hc2ssIHRzZW47CisJaW50ICAgICAgICAgZ2NoYW47CisJaW50ICAgICAgICAgaTsKIAogI2lmZGVmIFNCRV9QTUNDNF9FTkFCTEUKLSAgICBobWFzayA9ICgweDFmIDw8IHBpLT51cC0+cC5oeXBlcnNpemUpICYgMHgxZjsKKwlobWFzayA9ICgweDFmIDw8IHBpLT51cC0+cC5oeXBlcnNpemUpICYgMHgxZjsKICNlbmRpZgogI2lmZGVmIFNCRV9XQU4yNTZUM19FTkFCTEUKLSAgICBobWFzayA9ICgweDFmIDw8IGh5cGVyZHVtbXkpICYgMHgxZjsKKwlobWFzayA9ICgweDFmIDw8IGh5cGVyZHVtbXkpICYgMHgxZjsKICNlbmRpZgotICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewotCWdjaGFuID0gKChwaS0+cG9ydG51bSAqIE1VU1lDQ19OQ0hBTlMpICsgKGkgJiBobWFzaykpICUgTVVTWUNDX05DSEFOUzsKLQljaCA9IHBpLT5jaGFuW2djaGFuXTsKLQlpZiAoY2gtPnAubW9kZV81NmspCi0JICAgIHRzZW4gPSBNT0RFXzU2S0JQUzsKLQllbHNlCi0JICAgIHRzZW4gPSBNT0RFXzY0S0JQUzsgICAgIC8qIGFsc28gdGhlIGRlZmF1bHQgKi8KLQl0cyA9ICgocGktPnBvcnRudW0gJSA0KSA9PSAoaSAvIDMyKSkgPyAodHNlbiA8PCA1KSB8IChpICYgaG1hc2spIDogMDsKLQlwaS0+cmVncmFtLT5ydHNtW2ldID0gdHM7Ci0JcGktPnJlZ3JhbS0+dHRzbVtpXSA9IHRzOwotICAgIH0KLSAgICBGTFVTSF9NRU1fV1JJVEUoKTsKLSAgICBtdXN5Y2Nfc2Vydl9yZXEocGksIFNSX1RJTUVTTE9UX01BUCB8IFNSX1JYX0RJUkVDVElPTik7Ci0gICAgbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9USU1FU0xPVF9NQVAgfCBTUl9UWF9ESVJFQ1RJT04pOworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQlnY2hhbiA9ICgocGktPnBvcnRudW0gKiBNVVNZQ0NfTkNIQU5TKSArCisJCQkoaSAmIGhtYXNrKSkgJSBNVVNZQ0NfTkNIQU5TOworCQljaCA9IHBpLT5jaGFuW2djaGFuXTsKKwkJaWYgKGNoLT5wLm1vZGVfNTZrKQorCQkJdHNlbiA9IE1PREVfNTZLQlBTOworCQllbHNlCisJCQl0c2VuID0gTU9ERV82NEtCUFM7ICAgICAvKiBhbHNvIHRoZSBkZWZhdWx0ICovCisJCXRzID0gKChwaS0+cG9ydG51bSAlIDQpID09IChpIC8gMzIpKSA/ICh0c2VuIDw8IDUpIHwgKGkgJiBobWFzaykgOiAwOworCQlwaS0+cmVncmFtLT5ydHNtW2ldID0gdHM7CisJCXBpLT5yZWdyYW0tPnR0c21baV0gPSB0czsKKwl9CisJRkxVU0hfTUVNX1dSSVRFKCk7CisJbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9USU1FU0xPVF9NQVAgfCBTUl9SWF9ESVJFQ1RJT04pOworCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfVElNRVNMT1RfTUFQIHwgU1JfVFhfRElSRUNUSU9OKTsKIH0KICNlbmRpZgogCkBAIC02NzIsNTkgKzY4Nyw1OSBAQAogdV9pbnQzMl90CiBtdXN5Y2NfY2hhbl9wcm90byhpbnQgcHJvdG8pCiB7Ci0gICAgaW50ICAgICAgICAgcmVnOworCWludCAgICAgICAgIHJlZzsKIAotICAgIHN3aXRjaCAocHJvdG8pIHsKLSAgICBjYXNlIENGR19DSF9QUk9UT19UUkFOUzogICAgICAgIC8qIDAgKi8KLQlyZWcgPSBNVVNZQ0NfQ0NEX1RSQU5TOwotCWJyZWFrOwotICAgIGNhc2UgQ0ZHX0NIX1BST1RPX1NTNzogICAgICAgICAgLyogMSAqLwotCXJlZyA9IE1VU1lDQ19DQ0RfU1M3OwotCWJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSBDRkdfQ0hfUFJPVE9fSVNMUF9NT0RFOiAgIC8qIDQgKi8KLSAgICBjYXNlIENGR19DSF9QUk9UT19IRExDX0ZDUzE2OiAgLyogMiAqLwotCXJlZyA9IE1VU1lDQ19DQ0RfSERMQ19GQ1MxNjsKLQlicmVhazsKLSAgICBjYXNlIENGR19DSF9QUk9UT19IRExDX0ZDUzMyOiAgLyogMyAqLwotCXJlZyA9IE1VU1lDQ19DQ0RfSERMQ19GQ1MzMjsKLQlicmVhazsKLSAgICB9CisJc3dpdGNoIChwcm90bykgeworCWNhc2UgQ0ZHX0NIX1BST1RPX1RSQU5TOiAgICAgICAgLyogMCAqLworCQlyZWcgPSBNVVNZQ0NfQ0NEX1RSQU5TOworCQlicmVhazsKKwljYXNlIENGR19DSF9QUk9UT19TUzc6ICAgICAgICAgIC8qIDEgKi8KKwkJcmVnID0gTVVTWUNDX0NDRF9TUzc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBDRkdfQ0hfUFJPVE9fSVNMUF9NT0RFOiAgIC8qIDQgKi8KKwljYXNlIENGR19DSF9QUk9UT19IRExDX0ZDUzE2OiAgLyogMiAqLworCQlyZWcgPSBNVVNZQ0NfQ0NEX0hETENfRkNTMTY7CisJCWJyZWFrOworCWNhc2UgQ0ZHX0NIX1BST1RPX0hETENfRkNTMzI6ICAvKiAzICovCisJCXJlZyA9IE1VU1lDQ19DQ0RfSERMQ19GQ1MzMjsKKwkJYnJlYWs7CisJfQogCi0gICAgcmV0dXJuIHJlZzsKKwlyZXR1cm4gcmVnOwogfQogCiAjaWZkZWYgU0JFX1dBTjI1NlQzX0VOQUJMRQogc3RhdGljIHZvaWQgX19pbml0CiBtdXN5Y2NfaW5pdF9wb3J0KG1waV90ICpwaSkKIHsKLSAgICBwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmcGktPnJlZy0+Z2JwLCBPU192dG9waHlzKHBpLT5yZWdyYW0pKTsKKwlwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmcGktPnJlZy0+Z2JwLCBPU192dG9waHlzKHBpLT5yZWdyYW0pKTsKIAotICAgIHBpLT5yZWdyYW0tPmdyY2QgPQotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoTVVTWUNDX0dSQ0RfUlhfRU5BQkxFIHwKLQkJCQlNVVNZQ0NfR1JDRF9UWF9FTkFCTEUgfAotCQkJCU1VU1lDQ19HUkNEX1NGX0FMSUdOIHwKLQkJCQlNVVNZQ0NfR1JDRF9TVUJDSEFOX0RJU0FCTEUgfAotCQkJCU1VU1lDQ19HUkNEX09PRk1QX0RJU0FCTEUgfAotCQkJCU1VU1lDQ19HUkNEX0NPRkFJUlFfRElTQUJMRSB8Ci0JCQkJTVVTWUNDX0dSQ0RfTUNfRU5BQkxFIHwKLQkJICAgICAgIChNVVNZQ0NfR1JDRF9QT0xMVEhfMzIgPDwgTVVTWUNDX0dSQ0RfUE9MTFRIX1NISUZUKSk7CisJcGktPnJlZ3JhbS0+Z3JjZCA9CisJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoTVVTWUNDX0dSQ0RfUlhfRU5BQkxFIHwKKwkJCQkgICAgICAgTVVTWUNDX0dSQ0RfVFhfRU5BQkxFIHwKKwkJCQkgICAgICAgTVVTWUNDX0dSQ0RfU0ZfQUxJR04gfAorCQkJCSAgICAgICBNVVNZQ0NfR1JDRF9TVUJDSEFOX0RJU0FCTEUgfAorCQkJCSAgICAgICBNVVNZQ0NfR1JDRF9PT0ZNUF9ESVNBQkxFIHwKKwkJCQkgICAgICAgTVVTWUNDX0dSQ0RfQ09GQUlSUV9ESVNBQkxFIHwKKwkJCQkgICAgICAgTVVTWUNDX0dSQ0RfTUNfRU5BQkxFIHwKKwkJCQkgICAgICAgKE1VU1lDQ19HUkNEX1BPTExUSF8zMiA8PCBNVVNZQ0NfR1JDRF9QT0xMVEhfU0hJRlQpKTsKIAotICAgIHBpLT5yZWdyYW0tPnBjZCA9Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihNVVNZQ0NfUENEX0UxWDRfTU9ERSB8Ci0JCQkJTVVTWUNDX1BDRF9UWERBVEFfUklTSU5HIHwKLQkJCQlNVVNZQ0NfUENEX1RYX0RSSVZFTik7CisJcGktPnJlZ3JhbS0+cGNkID0KKwkJX19jb25zdGFudF9jcHVfdG9fbGUzMihNVVNZQ0NfUENEX0UxWDRfTU9ERSB8CisJCQkJICAgICAgIE1VU1lDQ19QQ0RfVFhEQVRBX1JJU0lORyB8CisJCQkJICAgICAgIE1VU1lDQ19QQ0RfVFhfRFJJVkVOKTsKIAotICAgIC8qIE1lc3NhZ2UgbGVuZ3RoIGRlc2NyaXB0b3IgKi8KLSAgICAgICBwaS0+cmVncmFtLT5tbGQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKGN4dDFlMV9tYXhfbXJ1IHwgKGN4dDFlMV9tYXhfbXJ1IDw8IDE2KSk7Ci0gICAgRkxVU0hfTUVNX1dSSVRFKCk7CisJLyogTWVzc2FnZSBsZW5ndGggZGVzY3JpcHRvciAqLworCXBpLT5yZWdyYW0tPm1sZCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoY3h0MWUxX21heF9tcnUgfCAoY3h0MWUxX21heF9tcnUgPDwgMTYpKTsKKwlGTFVTSF9NRU1fV1JJVEUoKTsKIAotICAgIG11c3ljY19zZXJ2X3JlcShwaSwgU1JfR1JPVVBfSU5JVCB8IFNSX1JYX0RJUkVDVElPTik7Ci0gICAgbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9HUk9VUF9JTklUIHwgU1JfVFhfRElSRUNUSU9OKTsKKwltdXN5Y2Nfc2Vydl9yZXEocGksIFNSX0dST1VQX0lOSVQgfCBTUl9SWF9ESVJFQ1RJT04pOworCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfR1JPVVBfSU5JVCB8IFNSX1RYX0RJUkVDVElPTik7CiAKLSAgICBtdXN5Y2NfaW5pdF9tZHQocGkpOworCW11c3ljY19pbml0X21kdChwaSk7CiAKLSAgICBtdXN5Y2NfdXBkYXRlX3RpbWVzbG90cyhwaSk7CisJbXVzeWNjX3VwZGF0ZV90aW1lc2xvdHMocGkpOwogfQogI2VuZGlmCiAKQEAgLTczMiw0OTAgKzc0Nyw0NTYgQEAKIHN0YXR1c190ICAgIF9faW5pdAogbXVzeWNjX2luaXQoY2lfdCAqY2kpCiB7Ci0gICAgY2hhciAgICAgICAqcmVnYWRkcjsgICAgICAgIC8qIHRlbXAgZm9yIGFkZHJlc3MgYm91bmRhcnkgY2FsY3VsYXRpb25zICovCi0gICAgaW50ICAgICAgICAgaSwgZ2NoYW47CisJY2hhciAgICAgICAqcmVnYWRkcjsgICAgICAgIC8qIHRlbXAgZm9yIGFkZHJlc3MgYm91bmRhcnkgY2FsY3VsYXRpb25zICovCisJaW50ICAgICAgICAgaSwgZ2NoYW47CiAKLSAgICBPU19zZW1faW5pdCgmY2ktPnNlbV93ZGJ1c3ksIFNFTV9BVkFJTEFCTEUpOyAgICAgICAvKiB3YXRjaGRvZyBleGNsdXNpb24gKi8KKwlPU19zZW1faW5pdCgmY2ktPnNlbV93ZGJ1c3ksIFNFTV9BVkFJTEFCTEUpOyAvKiB3YXRjaGRvZyBleGNsdXNpb24gKi8KIAotICAgIC8qCi0gICAgICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gNi4zLjQgLSAiVGhlIGhvc3QgbXVzdCBhbGxvY2F0ZSBhIGR3b3JkCi0gICAgICogYWxpZ25lZCBtZW1vcnkgc2VnbWVudCBmb3IgaW50ZXJydXB0IHF1ZXVlIHBvaW50ZXJzLiIKLSAgICAgKi8KKwkvKgorCSAqIFBlciBNVVNZQ0MgbWFudWFsLCBTZWN0aW9uIDYuMy40IC0gIlRoZSBob3N0IG11c3QgYWxsb2NhdGUgYSBkd29yZAorCSAqIGFsaWduZWQgbWVtb3J5IHNlZ21lbnQgZm9yIGludGVycnVwdCBxdWV1ZSBwb2ludGVycy4iCisJICovCiAKICNkZWZpbmUgSU5UX1FVRVVFX0JPVU5EQVJZICA0CiAKLSAgICByZWdhZGRyID0gT1Nfa21hbGxvYygoSU5UX1FVRVVFX1NJWkUgKyAxKSAqIHNpemVvZih1X2ludDMyX3QpKTsKLSAgICBpZiAoIXJlZ2FkZHIpCi0JcmV0dXJuIC1FTk9NRU07Ci0gICAgY2ktPmlxZF9wX3NhdmVkID0gcmVnYWRkcjsgICAgICAvKiBzYXZlIG9yaWcgdmFsdWUgZm9yIGZyZWUncyB1c2FnZSAqLwotICAgIGNpLT5pcWRfcCA9ICh1X2ludDMyX3QgKikgKCh1bnNpZ25lZCBsb25nKSAocmVnYWRkciArIElOVF9RVUVVRV9CT1VOREFSWSAtIDEpICYKLQkJCSAgICAgICAofihJTlRfUVVFVUVfQk9VTkRBUlkgLSAxKSkpOyAgICAvKiB0aGlzIGNhbGN1bGF0ZXMKLQkJCQkJCQkJICogY2xvc2VzdCBib3VuZGFyeSAqLworCXJlZ2FkZHIgPSBremFsbG9jKChJTlRfUVVFVUVfU0laRSArIDEpICogc2l6ZW9mKHVfaW50MzJfdCksCisJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIXJlZ2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCWNpLT5pcWRfcF9zYXZlZCA9IHJlZ2FkZHI7ICAgICAgLyogc2F2ZSBvcmlnIHZhbHVlIGZvciBmcmVlJ3MgdXNhZ2UgKi8KKwkvKiB0aGlzIGNhbGN1bGF0ZXMgY2xvc2VzdCBib3VuZGFyeSAqLworCWNpLT5pcWRfcCA9ICh1X2ludDMyX3QgKikgKCh1bnNpZ25lZCBsb25nKShyZWdhZGRyICsgSU5UX1FVRVVFX0JPVU5EQVJZIC0gMSkgJgorCQkJCSAgICh+KElOVF9RVUVVRV9CT1VOREFSWSAtIDEpKSk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgSU5UX1FVRVVFX1NJWkU7IGkrKykKLQljaS0+aXFkX3BbaV0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKElOVF9FTVBUWV9FTlRSWSk7CisJZm9yIChpID0gMDsgaSA8IElOVF9RVUVVRV9TSVpFOyBpKyspCisJCWNpLT5pcWRfcFtpXSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSU5UX0VNUFRZX0VOVFJZKTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBjaS0+bWF4X3BvcnQ7IGkrKykgewotCW1waV90ICAgICAgKnBpID0gJmNpLT5wb3J0W2ldOworCWZvciAoaSA9IDA7IGkgPCBjaS0+bWF4X3BvcnQ7IGkrKykgeworCQltcGlfdCAgICAgICpwaSA9ICZjaS0+cG9ydFtpXTsKIAotCS8qCi0JICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gNi4zLjIgLSAiVGhlIGhvc3QgbXVzdCBhbGxvY2F0ZSBhIDJLQgotCSAqIGJvdW5kIG1lbW9yeSBzZWdtZW50IGZvciBDaGFubmVsIEdyb3VwIDAuIgotCSAqLworCQkvKgorCQkgKiBQZXIgTVVTWUNDIG1hbnVhbCwgU2VjdGlvbiA2LjMuMiAtICJUaGUgaG9zdCBtdXN0IGFsbG9jYXRlIGEgMktCCisJCSAqIGJvdW5kIG1lbW9yeSBzZWdtZW50IGZvciBDaGFubmVsIEdyb3VwIDAuIgorCQkgKi8KIAogI2RlZmluZSBHUk9VUF9CT1VOREFSWSAgIDB4ODAwCiAKLQlyZWdhZGRyID0gT1Nfa21hbGxvYyhzaXplb2Yoc3RydWN0IG11c3ljY19ncm91cHIpICsgR1JPVVBfQk9VTkRBUlkpOwotCWlmICghcmVnYWRkcikgewotCSAgICBmb3IgKGdjaGFuID0gMDsgZ2NoYW4gPCBpOyBnY2hhbisrKSB7Ci0JCXBpID0gJmNpLT5wb3J0W2djaGFuXTsKLQkJT1Nfa2ZyZWUocGktPnJlZyk7Ci0JCXBpLT5yZWcgPSBOVUxMOwotCSAgICB9Ci0JICAgIHJldHVybiAtRU5PTUVNOworCQlyZWdhZGRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG11c3ljY19ncm91cHIpICsgR1JPVVBfQk9VTkRBUlksCisJCQkJICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCWlmICghcmVnYWRkcikgeworCQkJZm9yIChnY2hhbiA9IDA7IGdjaGFuIDwgaTsgZ2NoYW4rKykgeworCQkJCXBpID0gJmNpLT5wb3J0W2djaGFuXTsKKwkJCQlrZnJlZShwaS0+cmVnKTsKKwkJCQlwaS0+cmVnID0gTlVMTDsKKwkJCX0KKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXBpLT5yZWdyYW1fc2F2ZWQgPSByZWdhZGRyOyAvKiBzYXZlIG9yaWcgdmFsdWUgZm9yIGZyZWUncyB1c2FnZSAqLworCQkvKiB0aGlzIGNhbGN1bGF0ZXMgY2xvc2VzdCBib3VuZGFyeSAqLworCQlwaS0+cmVncmFtID0gKHN0cnVjdCBtdXN5Y2NfZ3JvdXByICopICgodW5zaWduZWQgbG9uZykocmVnYWRkciArIEdST1VQX0JPVU5EQVJZIC0gMSkgJgorCQkJCSh+KEdST1VQX0JPVU5EQVJZIC0gMSkpKTsKIAl9Ci0JcGktPnJlZ3JhbV9zYXZlZCA9IHJlZ2FkZHI7IC8qIHNhdmUgb3JpZyB2YWx1ZSBmb3IgZnJlZSdzIHVzYWdlICovCi0JcGktPnJlZ3JhbSA9IChzdHJ1Y3QgbXVzeWNjX2dyb3VwciAqKSAoKHVuc2lnbmVkIGxvbmcpIChyZWdhZGRyICsgR1JPVVBfQk9VTkRBUlkgLSAxKSAmCi0JCQkJCSAgICAgICAofihHUk9VUF9CT1VOREFSWSAtIDEpKSk7ICAgICAgICAvKiB0aGlzIGNhbGN1bGF0ZXMKLQkJCQkJCQkJCQkgKiBjbG9zZXN0IGJvdW5kYXJ5ICovCi0gICAgfQogCi0gICAgLyogYW55IGJvYXJkIGNlbnRyaWMgTVVTWUNDIGNvbW1hbmRzIHdpbGwgdXNlIGdyb3VwIFpFUk8gYXMgaXRzICJob21lIiAqLwotICAgIGNpLT5yZWdyYW0gPSBjaS0+cG9ydFswXS5yZWdyYW07Ci0gICAgbXVzeWNjX3NlcnZfcmVxKCZjaS0+cG9ydFswXSwgU1JfQ0hJUF9SRVNFVCk7CisJLyogYW55IGJvYXJkIGNlbnRyaWMgTVVTWUNDIGNvbW1hbmRzIHdpbGwgdXNlIGdyb3VwIFpFUk8gYXMgaXRzICJob21lIiAqLworCWNpLT5yZWdyYW0gPSBjaS0+cG9ydFswXS5yZWdyYW07CisJbXVzeWNjX3NlcnZfcmVxKCZjaS0+cG9ydFswXSwgU1JfQ0hJUF9SRVNFVCk7CiAKLSAgICBwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmY2ktPnJlZy0+Z2JwLCBPU192dG9waHlzKGNpLT5yZWdyYW0pKTsKLSAgICBwY2lfZmx1c2hfd3JpdGUoY2kpOworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopICZjaS0+cmVnLT5nYnAsIE9TX3Z0b3BoeXMoY2ktPnJlZ3JhbSkpOworCXBjaV9mbHVzaF93cml0ZShjaSk7CiAjaWZkZWYgQ09ORklHX1NCRV9QTUNDNF9OQ09NTQotICAgIGNpLT5yZWdyYW0tPl9fZ2xjZCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoR0NEX01BR0lDKTsKKwljaS0+cmVncmFtLT5fX2dsY2QgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKEdDRF9NQUdJQyk7CiAjZWxzZQotICAgIC8qIHN0YW5kYXJkIGRyaXZlciBQT0xMUyBmb3IgSU5UQiB2aWEgQ1BMRCByZWdpc3RlciAqLwotICAgIGNpLT5yZWdyYW0tPl9fZ2xjZCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoR0NEX01BR0lDIHwgTVVTWUNDX0dDRF9JTlRCX0RJU0FCTEUpOworCS8qIHN0YW5kYXJkIGRyaXZlciBQT0xMUyBmb3IgSU5UQiB2aWEgQ1BMRCByZWdpc3RlciAqLworCWNpLT5yZWdyYW0tPl9fZ2xjZCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoR0NEX01BR0lDIHwKKwkJCQkJCSAgICBNVVNZQ0NfR0NEX0lOVEJfRElTQUJMRSk7CiAjZW5kaWYKIAotICAgIGNpLT5yZWdyYW0tPl9faXFwID0gY3B1X3RvX2xlMzIoT1NfdnRvcGh5cygmY2ktPmlxZF9wWzBdKSk7Ci0gICAgY2ktPnJlZ3JhbS0+X19pcWwgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKElOVF9RVUVVRV9TSVpFIC0gMSk7Ci0gICAgcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmRhY2JwLCAwKTsKLSAgICBGTFVTSF9NRU1fV1JJVEUoKTsKKwljaS0+cmVncmFtLT5fX2lxcCA9IGNwdV90b19sZTMyKE9TX3Z0b3BoeXMoJmNpLT5pcWRfcFswXSkpOworCWNpLT5yZWdyYW0tPl9faXFsID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihJTlRfUVVFVUVfU0laRSAtIDEpOworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopICZjaS0+cmVnLT5kYWNicCwgMCk7CisJRkxVU0hfTUVNX1dSSVRFKCk7CiAKLSAgICBjaS0+c3RhdGUgPSBDX1JVTk5JTkc7ICAgICAgICAgIC8qIG1hcmsgYXMgZnVsbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZwotCQkJCSAgICAgKiBhdmFpbGFibGUgKi8KKwljaS0+c3RhdGUgPSBDX1JVTk5JTkc7ICAgICAgICAgIC8qIG1hcmsgYXMgZnVsbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZworCQkJCQkgKiBhdmFpbGFibGUgKi8KIAotICAgIG11c3ljY19zZXJ2X3JlcSgmY2ktPnBvcnRbMF0sIFNSX0dMT0JBTF9JTklUKTsgICAgIC8qIEZJUlNUIElOVEVSUlVQVCAhICovCisJbXVzeWNjX3NlcnZfcmVxKCZjaS0+cG9ydFswXSwgU1JfR0xPQkFMX0lOSVQpOyAvKiBGSVJTVCBJTlRFUlJVUFQgISAqLwogCi0gICAgLyogc2FuaXR5IGNoZWNrIHNldHRhYmxlIHBhcmFtZXRlcnMgKi8KKwkvKiBzYW5pdHkgY2hlY2sgc2V0dGFibGUgcGFyYW1ldGVycyAqLwogCi0gICAgICAgaWYgKGN4dDFlMV9tYXhfbXJ1ID4gMHhmZmUpIHsKLQlwcl93YXJuaW5nKCJNYXhpbXVtIGFsbG93ZWQgTVJVIGV4Y2VlZGVkLCByZXNldHRpbmcgJWQgdG8gJWQuXG4iLAotCQkJCSAgY3h0MWUxX21heF9tcnUsIDB4ZmZlKTsKLQkgICAgICAgY3h0MWUxX21heF9tcnUgPSAweGZmZTsKLSAgICB9Ci0gICAgICAgaWYgKGN4dDFlMV9tYXhfbXR1ID4gMHhmZmUpIHsKLQlwcl93YXJuaW5nKCJNYXhpbXVtIGFsbG93ZWQgTVRVIGV4Y2VlZGVkLCByZXNldHRpbmcgJWQgdG8gJWQuXG4iLAotCQkJCSAgY3h0MWUxX21heF9tdHUsIDB4ZmZlKTsKLQkgICAgICAgY3h0MWUxX21heF9tdHUgPSAweGZmZTsKLSAgICB9CisJaWYgKGN4dDFlMV9tYXhfbXJ1ID4gMHhmZmUpIHsKKwkJcHJfd2FybmluZygiTWF4aW11bSBhbGxvd2VkIE1SVSBleGNlZWRlZCwgcmVzZXR0aW5nICVkIHRvICVkLlxuIiwKKwkJCSAgIGN4dDFlMV9tYXhfbXJ1LCAweGZmZSk7CisJCWN4dDFlMV9tYXhfbXJ1ID0gMHhmZmU7CisJfQorCWlmIChjeHQxZTFfbWF4X210dSA+IDB4ZmZlKSB7CisJCXByX3dhcm5pbmcoIk1heGltdW0gYWxsb3dlZCBNVFUgZXhjZWVkZWQsIHJlc2V0dGluZyAlZCB0byAlZC5cbiIsCisJCQkgICBjeHQxZTFfbWF4X210dSwgMHhmZmUpOworCQljeHQxZTFfbWF4X210dSA9IDB4ZmZlOworCX0KICNpZmRlZiBTQkVfV0FOMjU2VDNfRU5BQkxFCi0gICAgZm9yIChpID0gMDsgaSA8IE1VU1lDQ19OUE9SVFM7IGkrKykKLQltdXN5Y2NfaW5pdF9wb3J0KCZjaS0+cG9ydFtpXSk7CisJZm9yIChpID0gMDsgaSA8IE1VU1lDQ19OUE9SVFM7IGkrKykKKwkJbXVzeWNjX2luaXRfcG9ydCgmY2ktPnBvcnRbaV0pOwogI2VuZGlmCiAKLSAgICByZXR1cm4gU0JFX0RSVlJfU1VDQ0VTUzsgICAgICAgIC8qIG5vIGVycm9yICovCisJcmV0dXJuIFNCRV9EUlZSX1NVQ0NFU1M7ICAgICAgICAvKiBubyBlcnJvciAqLwogfQogCiAKIHZvaWQKIG11c3ljY19iaF90eF9lb20obXBpX3QgKnBpLCBpbnQgZ2NoYW4pCiB7Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0gICAgc3RydWN0IG1kZXNjICptZDsKKwltY2hfdCAgICAgICpjaDsKKwlzdHJ1Y3QgbWRlc2MgKm1kOwogCi0jaWYgMAotI2lmbmRlZiBTQkVfSVNSX0lOTElORQotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9sYXRpbGUgdV9pbnQzMl90IHN0YXR1czsKIAotI2VuZGlmCi0jZW5kaWYKLSAgICB2b2xhdGlsZSB1X2ludDMyX3Qgc3RhdHVzOworCWNoID0gcGktPmNoYW5bZ2NoYW5dOworCWlmICghY2ggfHwgY2gtPnN0YXRlICE9IFVQKSB7CisJCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19FUlJPUikKKwkJCXByX2luZm8oIiVzOiBpbnRyOiB4bWl0IEVPTSBvbiB1bmluaXRpYWxpemVkIGNoYW5uZWwgJWRcbiIsCisJCQkJcGktPnVwLT5kZXZuYW1lLCBnY2hhbik7CisJfQorCWlmICghY2ggfHwgIWNoLT5tZHQpCisJCXJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiBub3RlOiBtZHQ9PTAgaW1wbGllcyBhIG1hbGxvYygpCisJCQkJCSAgICAgKiBmYWlsdXJlIHcvaW4gY2hhbl91cCgpIHJvdXRpbmUgKi8KIAotICAgIGNoID0gcGktPmNoYW5bZ2NoYW5dOwotICAgIGlmICghY2ggfHwgY2gtPnN0YXRlICE9IFVQKSB7Ci0JaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX0VSUk9SKQotCSAgICBwcl9pbmZvKCIlczogaW50cjogeG1pdCBFT00gb24gdW5pbml0aWFsaXplZCBjaGFubmVsICVkXG4iLAotCQkgICAgcGktPnVwLT5kZXZuYW1lLCBnY2hhbik7Ci0gICAgfQotICAgIGlmICghY2ggfHwgIWNoLT5tZHQpCi0JcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIG5vdGU6IG1kdD09MCBpbXBsaWVzIGEgbWFsbG9jKCkKLQkJCQkgICAgICogZmFpbHVyZSB3L2luIGNoYW5fdXAoKSByb3V0aW5lICovCi0KLSNpZiAwCi0jaWZkZWYgU0JFX0lTUl9JTkxJTkUKLSAgICBzcGluX2xvY2tfaXJxKCZjaC0+Y2hfdHhsb2NrKTsKLSNlbHNlCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgZG8gewotCUZMVVNIX01FTV9SRUFEKCk7Ci0JbWQgPSBjaC0+dHhkX2lycV9zcnY7Ci0Jc3RhdHVzID0gbGUzMl90b19jcHUobWQtPnN0YXR1cyk7Ci0KLQkvKgotCSAqIE5vdGU6IFBlciBNVVNZQ0MgUmVmIDYuNC45LCB0aGUgaG9zdCBkb2VzIG5vdCBwb2xsIGEgaG9zdC1vd25lZAotCSAqIFRyYW5zbWl0IEJ1ZmZlciBEZXNjcmlwdG9yIGR1cmluZyBUcmFuc3BhcmVudCBNb2RlLgotCSAqLwotCWlmIChzdGF0dXMgJiBNVVNZQ0NfVFhfT1dORUQpIHsKLQkgICAgaW50ICAgICAgICAgcmVhZENvdW50LCBsb29wQ291bnQ7Ci0KLQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCSAgICAvKiBIVyBCdWcgRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JICAgIC8qIC0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkgICAgLyogVW5kZXIgY2VydGFpbiBQQ0kgQnVzIGxvYWRpbmcgY29uZGl0aW9ucywgdGhlIGRhdGEgICAgICAqLwotCSAgICAvKiBhc3NvY2lhdGVkIHdpdGggYW4gdXBkYXRlIG9mIFNoYXJlZCBNZW1vcnkgaXMgZGVsYXllZCAgICovCi0JICAgIC8qIHJlbGF0aXZlIHRvIGl0cyBQQ0kgSW50ZXJydXB0LiAgVGhpcyBpcyBjYXVnaHQgd2hlbiAgICAgKi8KLQkgICAgLyogdGhlIGhvc3QgZGV0ZXJtaW5lcyBpdCBkb2VzIG5vdCB5ZXQgT1dOIHRoZSBkZXNjcmlwdG9yLiAqLwotCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQkgICAgcmVhZENvdW50ID0gMDsKLQkgICAgd2hpbGUgKHN0YXR1cyAmIE1VU1lDQ19UWF9PV05FRCkgewotCQlmb3IgKGxvb3BDb3VudCA9IDA7IGxvb3BDb3VudCA8IDB4MzA7IGxvb3BDb3VudCsrKQotCQkgICAgT1NfdXdhaXRfZHVtbXkoKTsgIC8qIHVzZSBjYWxsIHRvIGF2b2lkIG9wdGltaXphdGlvbgotCQkJCQkgKiByZW1vdmFsIG9mIGR1bW15IGRlbGF5ICovCisJZG8gewogCQlGTFVTSF9NRU1fUkVBRCgpOworCQltZCA9IGNoLT50eGRfaXJxX3NydjsKIAkJc3RhdHVzID0gbGUzMl90b19jcHUobWQtPnN0YXR1cyk7Ci0JCWlmIChyZWFkQ291bnQrKyA+IDQwKQotCQkgICAgYnJlYWs7ICAgICAgICAgIC8qIGRvbid0IHdhaXQgYW55IGxvbmdlciAqLwotCSAgICB9Ci0JICAgIGlmIChzdGF0dXMgJiBNVVNZQ0NfVFhfT1dORUQpIHsKLQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpIHsKLQkJICAgIHByX2luZm8oIiVzOiBQb3J0ICVkIENoYW4gJTJkIC0gdW5leHBlY3RlZCBUWCBtc2cgb3duZXJzaGlwIGludHIgKG1kICVwIHN0cyAleClcbiIsCi0JCQkgICAgcGktPnVwLT5kZXZuYW1lLCBwaS0+cG9ydG51bSwgY2gtPmNoYW5udW0sCi0JCQkgICAgbWQsIHN0YXR1cyk7Ci0JCSAgICBwcl9pbmZvKCIrKyBVc2VyIDB4JXAgSVJRX1NSViAweCVwIFVTUl9BREQgMHglcCBRU3RvcHBlZCAleCwgc3RhcnRfdHggJXggdHhfZnVsbCAlZCB0eGRfZnJlZSAlZCBtb2RlICV4XG4iLAotCQkJICAgIGNoLT51c2VyLCBjaC0+dHhkX2lycV9zcnYsIGNoLT50eGRfdXNyX2FkZCwKLQkJCSAgICBzZF9xdWV1ZV9zdG9wcGVkKGNoLT51c2VyKSwKLQkJCSAgICBjaC0+Y2hfc3RhcnRfdHgsIGNoLT50eF9mdWxsLCBjaC0+dHhkX2ZyZWUsIGNoLT5wLmNoYW5fbW9kZSk7Ci0JCSAgICBtdXN5Y2NfZHVtcF90eGJ1ZmZlcl9yaW5nKGNoLCAwKTsKLQkJfQotCQlicmVhazsgICAgICAgICAgICAgIC8qIE5vdCBvdXIgbWRlc2MsIGRvbmUgKi8KLQkgICAgfSBlbHNlIHsKLQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCi0JCSAgICBwcl9pbmZvKCIlczogUG9ydCAlZCBDaGFuICUyZCAtIHJlY292ZXJlZCBUWCBtc2cgb3duZXJzaGlwIFslZF0gKG1kICVwIHN0cyAleClcbiIsCi0JCQkgICAgcGktPnVwLT5kZXZuYW1lLCBwaS0+cG9ydG51bSwgY2gtPmNoYW5udW0sIHJlYWRDb3VudCwgbWQsIHN0YXR1cyk7Ci0JICAgIH0KLQl9Ci0JY2gtPnR4ZF9pcnFfc3J2ID0gbWQtPnNuZXh0OwogCi0JbWQtPmRhdGEgPSAwOwotCWlmIChtZC0+bWVtX3Rva2VuKQl7Ci0JICAgIC8qIHVwY291bnQgY2hhbm5lbCAqLwotCSAgICBhdG9taWNfc3ViKE9TX21lbV90b2tlbl90bGVuKG1kLT5tZW1fdG9rZW4pLCAmY2gtPnR4X3BlbmRpbmcpOwotCSAgICAvKiB1cGNvdW50IGNhcmQgKi8KLQkgICAgYXRvbWljX3N1YihPU19tZW1fdG9rZW5fdGxlbihtZC0+bWVtX3Rva2VuKSwgJnBpLT51cC0+dHhfcGVuZGluZyk7CisJCS8qCisJCSAqIE5vdGU6IFBlciBNVVNZQ0MgUmVmIDYuNC45LCB0aGUgaG9zdCBkb2VzIG5vdCBwb2xsIGEgaG9zdC1vd25lZAorCQkgKiBUcmFuc21pdCBCdWZmZXIgRGVzY3JpcHRvciBkdXJpbmcgVHJhbnNwYXJlbnQgTW9kZS4KKwkJICovCisJCWlmIChzdGF0dXMgJiBNVVNZQ0NfVFhfT1dORUQpIHsKKwkJCWludCAgICAgICAgIHJlYWRDb3VudCwgbG9vcENvdW50OworCisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBIVyBCdWcgRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkvKiAtLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkvKiBVbmRlciBjZXJ0YWluIFBDSSBCdXMgbG9hZGluZyBjb25kaXRpb25zLCB0aGUgZGF0YSAgICAgICovCisJCQkvKiBhc3NvY2lhdGVkIHdpdGggYW4gdXBkYXRlIG9mIFNoYXJlZCBNZW1vcnkgaXMgZGVsYXllZCAgICovCisJCQkvKiByZWxhdGl2ZSB0byBpdHMgUENJIEludGVycnVwdC4gIFRoaXMgaXMgY2F1Z2h0IHdoZW4gICAgICovCisJCQkvKiB0aGUgaG9zdCBkZXRlcm1pbmVzIGl0IGRvZXMgbm90IHlldCBPV04gdGhlIGRlc2NyaXB0b3IuICovCisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXJlYWRDb3VudCA9IDA7CisJCQl3aGlsZSAoc3RhdHVzICYgTVVTWUNDX1RYX09XTkVEKSB7CisJCQkJZm9yIChsb29wQ291bnQgPSAwOyBsb29wQ291bnQgPCAweDMwOyBsb29wQ291bnQrKykKKwkJCQkJLyogdXNlIGNhbGwgdG8gYXZvaWQgb3B0aW1pemF0aW9uCisJCQkJCSAqIHJlbW92YWwgb2YgZHVtbXkgZGVsYXkgKi8KKwkJCQkJT1NfdXdhaXRfZHVtbXkoKTsKKwkJCQlGTFVTSF9NRU1fUkVBRCgpOworCQkJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KG1kLT5zdGF0dXMpOworCQkJCWlmIChyZWFkQ291bnQrKyA+IDQwKQorCQkJCQlicmVhazsgLyogZG9uJ3Qgd2FpdCBhbnkgbG9uZ2VyICovCisJCQl9CisJCQlpZiAoc3RhdHVzICYgTVVTWUNDX1RYX09XTkVEKSB7CisJCQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpIHsKKwkJCQkJcHJfaW5mbygiJXM6IFBvcnQgJWQgQ2hhbiAlMmQgLSB1bmV4cGVjdGVkIFRYIG1zZyBvd25lcnNoaXAgaW50ciAobWQgJXAgc3RzICV4KVxuIiwKKwkJCQkJCXBpLT51cC0+ZGV2bmFtZSwgcGktPnBvcnRudW0sCisJCQkJCQljaC0+Y2hhbm51bSwgbWQsIHN0YXR1cyk7CisJCQkJCXByX2luZm8oIisrIFVzZXIgMHglcCBJUlFfU1JWIDB4JXAgVVNSX0FERCAweCVwIFFTdG9wcGVkICV4LCBzdGFydF90eCAleCB0eF9mdWxsICVkIHR4ZF9mcmVlICVkIG1vZGUgJXhcbiIsCisJCQkJCQljaC0+dXNlciwgY2gtPnR4ZF9pcnFfc3J2LAorCQkJCQkJY2gtPnR4ZF91c3JfYWRkLAorCQkJCQkJc2RfcXVldWVfc3RvcHBlZChjaC0+dXNlciksCisJCQkJCQljaC0+Y2hfc3RhcnRfdHgsIGNoLT50eF9mdWxsLAorCQkJCQkJY2gtPnR4ZF9mcmVlLCBjaC0+cC5jaGFuX21vZGUpOworCQkJCQltdXN5Y2NfZHVtcF90eGJ1ZmZlcl9yaW5nKGNoLCAwKTsKKwkJCQl9CisJCQkJYnJlYWs7ICAgICAgICAgICAgICAvKiBOb3Qgb3VyIG1kZXNjLCBkb25lICovCisJCQl9IGVsc2UgeworCQkJCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SKQorCQkJCQlwcl9pbmZvKCIlczogUG9ydCAlZCBDaGFuICUyZCAtIHJlY292ZXJlZCBUWCBtc2cgb3duZXJzaGlwIFslZF0gKG1kICVwIHN0cyAleClcbiIsCisJCQkJCQlwaS0+dXAtPmRldm5hbWUsIHBpLT5wb3J0bnVtLAorCQkJCQkJY2gtPmNoYW5udW0sIHJlYWRDb3VudCwKKwkJCQkJCW1kLCBzdGF0dXMpOworCQkJfQorCQl9CisJCWNoLT50eGRfaXJxX3NydiA9IG1kLT5zbmV4dDsKKworCQltZC0+ZGF0YSA9IDA7CisJCWlmIChtZC0+bWVtX3Rva2VuKSB7CisJCQkvKiB1cGNvdW50IGNoYW5uZWwgKi8KKwkJCWF0b21pY19zdWIoT1NfbWVtX3Rva2VuX3RsZW4obWQtPm1lbV90b2tlbiksCisJCQkJICAgJmNoLT50eF9wZW5kaW5nKTsKKwkJCS8qIHVwY291bnQgY2FyZCAqLworCQkJYXRvbWljX3N1YihPU19tZW1fdG9rZW5fdGxlbihtZC0+bWVtX3Rva2VuKSwKKwkJCQkgICAmcGktPnVwLT50eF9wZW5kaW5nKTsKICNpZmRlZiBTQkVfV0FOMjU2VDNfRU5BQkxFCi0JICAgIGlmICghYXRvbWljX3JlYWQoJnBpLT51cC0+dHhfcGVuZGluZykpCi0JCXdhbjI1NnQzX2xlZChwaS0+dXAsIExFRF9UWCwgMCk7CisJCQlpZiAoIWF0b21pY19yZWFkKCZwaS0+dXAtPnR4X3BlbmRpbmcpKQorCQkJCXdhbjI1NnQzX2xlZChwaS0+dXAsIExFRF9UWCwgMCk7CiAjZW5kaWYKLQotI2lmZGVmIENPTkZJR19TQkVfV0FOMjU2VDNfTkNPTU0KLQkgICAgLyogY2FsbGJhY2sgdGhhdCBvdXIgcGFja2V0IHdhcyBzZW50ICovCi0JICAgIHsKLQkJaW50ICAgICAgICAgaGRsY251bSA9IChwaS0+cG9ydG51bSAqIDMyICsgZ2NoYW4pOwotCi0JCWlmIChoZGxjbnVtID49IDIyOCkgewotCQkgICAgaWYgKG5jaVByb2Nlc3NfVFhfY29tcGxldGUpCi0JCQkoKm5jaVByb2Nlc3NfVFhfY29tcGxldGUpIChoZGxjbnVtLAotCQkJCQkJICAgZ2V0dXNlcmJ5Y2hhbihnY2hhbikpOworCQkJT1NfbWVtX3Rva2VuX2ZyZWVfaXJxKG1kLT5tZW1fdG9rZW4pOworCQkJbWQtPm1lbV90b2tlbiA9IE5VTEw7CiAJCX0KLQkgICAgfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqKiBDT05GSUdfU0JFX1dBTjI1NlQzX05DT01NICoqKi8KLQotCSAgICBPU19tZW1fdG9rZW5fZnJlZV9pcnEobWQtPm1lbV90b2tlbik7Ci0JICAgIG1kLT5tZW1fdG9rZW4gPSBOVUxMOwotCX0KLQltZC0+c3RhdHVzID0gMDsKKwkJbWQtPnN0YXR1cyA9IDA7CiAjaWZkZWYgUkxEX1RYRlVMTF9ERUJVRwotCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SMikKLQkgICAgcHJfaW5mbygifn4gdHhfZW9tOiB0eF9mdWxsICV4ICB0eGRfZnJlZSAlZCAtPiAlZFxuIiwKLQkJICAgIGNoLT50eF9mdWxsLCBjaC0+dHhkX2ZyZWUsIGNoLT50eGRfZnJlZSArIDEpOworCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUjIpCisJCQlwcl9pbmZvKCJ+fiB0eF9lb206IHR4X2Z1bGwgJXggIHR4ZF9mcmVlICVkIC0+ICVkXG4iLAorCQkJCWNoLT50eF9mdWxsLCBjaC0+dHhkX2ZyZWUsIGNoLT50eGRfZnJlZSArIDEpOwogI2VuZGlmCi0JKytjaC0+dHhkX2ZyZWU7Ci0JRkxVU0hfTUVNX1dSSVRFKCk7CisJCSsrY2gtPnR4ZF9mcmVlOworCQlGTFVTSF9NRU1fV1JJVEUoKTsKIAotCWlmICgoY2gtPnAuY2hhbl9tb2RlICE9IENGR19DSF9QUk9UT19UUkFOUykgJiYgKHN0YXR1cyAmIEVPQklSUV9FTkFCTEUpKSB7Ci0JICAgIGlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SKQotCQlwcl9pbmZvKCIlczogTW9kZSAoJXgpIGluY29ycmVjdCBFT0Igc3RhdHVzICgleClcbiIsCi0JCQlwaS0+dXAtPmRldm5hbWUsIGNoLT5wLmNoYW5fbW9kZSwgc3RhdHVzKTsKLQkgICAgaWYgKChzdGF0dXMgJiBFT01JUlFfRU5BQkxFKSA9PSAwKQotCQlicmVhazsKLQl9Ci0gICAgfSB3aGlsZSAoKGNoLT5wLmNoYW5fbW9kZSAhPSBDRkdfQ0hfUFJPVE9fVFJBTlMpICYmICgoc3RhdHVzICYgRU9NSVJRX0VOQUJMRSkgPT0gMCkpOwotICAgIC8qCi0gICAgICogTk9URTogKFRoZSBhYm92ZSAnd2hpbGUnIGlzIGNvdXBsZWQgdy8gcHJldmlvdXMgJ2RvJywgd2F5IGFib3ZlLikgRWFjaAotICAgICAqIFRyYW5zcGFyZW50IGRhdGEgYnVmZmVyIGhhcyB0aGUgRU9CIGJpdCwgYW5kIE5PVCB0aGUgRU9NIGJpdCwgc2V0IGFuZAotICAgICAqIHdpbGwgZnVydGhlcm1vcmUgaGF2ZSBhIHNlcGFyYXRlIElRRCBhc3NvY2lhdGVkIHdpdGggZWFjaCBtZXNzYWdlcwotICAgICAqIGJ1ZmZlci4KLSAgICAgKi8KLQotICAgIEZMVVNIX01FTV9SRUFEKCk7Ci0gICAgLyoKLSAgICAgKiBTbW9vdGggZmxvdyBjb250cm9sIGh5c3RlcmlzaXMgYnkgbWFpbnRhaW5pbmcgdGFzayBzdG9wcGFnZSB1bnRpbCBoYWxmCi0gICAgICogdGhlIGF2YWlsYWJsZSB3cml0ZSBidWZmZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgICovCi0gICAgaWYgKGNoLT50eF9mdWxsICYmIChjaC0+dHhkX2ZyZWUgPj0gKGNoLT50eGRfbnVtIC8gMikpKSB7CisJCWlmICgoY2gtPnAuY2hhbl9tb2RlICE9IENGR19DSF9QUk9UT19UUkFOUykgJiYKKwkJICAgIChzdGF0dXMgJiBFT0JJUlFfRU5BQkxFKSkgeworCQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCisJCQkJcHJfaW5mbygiJXM6IE1vZGUgKCV4KSBpbmNvcnJlY3QgRU9CIHN0YXR1cyAoJXgpXG4iLAorCQkJCQlwaS0+dXAtPmRldm5hbWUsIGNoLT5wLmNoYW5fbW9kZSwKKwkJCQkJc3RhdHVzKTsKKwkJCWlmICgoc3RhdHVzICYgRU9NSVJRX0VOQUJMRSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKChjaC0+cC5jaGFuX21vZGUgIT0gQ0ZHX0NIX1BST1RPX1RSQU5TKSAmJgorCQkgKChzdGF0dXMgJiBFT01JUlFfRU5BQkxFKSA9PSAwKSk7CiAJLyoKLQkgKiBUaGVuLCBvbmx5IHJlbGVhdmUgdGFzayBzdG9wcGFnZSBpZiB3ZSBhY3R1YWxseSBoYXZlIGVub3VnaAotCSAqIGJ1ZmZlcnMgdG8gc2VydmljZSB0aGUgbGFzdCByZXF1ZXN0ZWQgcGFja2V0LiAgSXQgbWF5IHJlcXVpcmUgTU9SRQotCSAqIHRoYW4gaGFsZiB0aGUgYXZhaWxhYmxlIQorCSAqIE5PVEU6IChUaGUgYWJvdmUgJ3doaWxlJyBpcyBjb3VwbGVkIHcvIHByZXZpb3VzICdkbycsIHdheSBhYm92ZS4pIEVhY2gKKwkgKiBUcmFuc3BhcmVudCBkYXRhIGJ1ZmZlciBoYXMgdGhlIEVPQiBiaXQsIGFuZCBOT1QgdGhlIEVPTSBiaXQsIHNldCBhbmQKKwkgKiB3aWxsIGZ1cnRoZXJtb3JlIGhhdmUgYSBzZXBhcmF0ZSBJUUQgYXNzb2NpYXRlZCB3aXRoIGVhY2ggbWVzc2FnZXMKKwkgKiBidWZmZXIuCiAJICovCi0JaWYgKGNoLT50eGRfZnJlZSA+PSBjaC0+dHhkX3JlcXVpcmVkKSB7CisKKwlGTFVTSF9NRU1fUkVBRCgpOworCS8qCisJICogU21vb3RoIGZsb3cgY29udHJvbCBoeXN0ZXJpc2lzIGJ5IG1haW50YWluaW5nIHRhc2sgc3RvcHBhZ2UgdW50aWwgaGFsZgorCSAqIHRoZSBhdmFpbGFibGUgd3JpdGUgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorCSAqLworCWlmIChjaC0+dHhfZnVsbCAmJiAoY2gtPnR4ZF9mcmVlID49IChjaC0+dHhkX251bSAvIDIpKSkgeworCQkvKgorCQkgKiBUaGVuLCBvbmx5IHJlbGVhdmUgdGFzayBzdG9wcGFnZSBpZiB3ZSBhY3R1YWxseSBoYXZlIGVub3VnaAorCQkgKiBidWZmZXJzIHRvIHNlcnZpY2UgdGhlIGxhc3QgcmVxdWVzdGVkIHBhY2tldC4gIEl0IG1heSByZXF1aXJlIE1PUkUKKwkJICogdGhhbiBoYWxmIHRoZSBhdmFpbGFibGUhCisJCSAqLworCQlpZiAoY2gtPnR4ZF9mcmVlID49IGNoLT50eGRfcmVxdWlyZWQpIHsKIAogI2lmZGVmIFJMRF9UWEZVTExfREVCVUcKLQkgICAgaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKQotCQlwcl9pbmZvKCJ0eF9lb21bJWRdOiBlbmFibGUgeG1pdCB0eF9mdWxsIG5vIG1vcmUsIHR4ZF9mcmVlICVkIHR4ZF9udW0vMiAlZFxuIiwKLQkJCWNoLT5jaGFubnVtLAotCQkJY2gtPnR4ZF9mcmVlLCBjaC0+dHhkX251bSAvIDIpOworCQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKQorCQkJCXByX2luZm8oInR4X2VvbVslZF06IGVuYWJsZSB4bWl0IHR4X2Z1bGwgbm8gbW9yZSwgdHhkX2ZyZWUgJWQgdHhkX251bS8yICVkXG4iLAorCQkJCQljaC0+Y2hhbm51bSwKKwkJCQkJY2gtPnR4ZF9mcmVlLCBjaC0+dHhkX251bSAvIDIpOwogI2VuZGlmCi0JICAgIGNoLT50eF9mdWxsID0gMDsKLQkgICAgY2gtPnR4ZF9yZXF1aXJlZCA9IDA7Ci0JICAgIHNkX2VuYWJsZV94bWl0KGNoLT51c2VyKTsgIC8qIHJlLWVuYWJsZSB0byBjYXRjaCBmbG93IGNvbnRyb2xsZWQKLQkJCQkJICogY2hhbm5lbCAqLworCQkJY2gtPnR4X2Z1bGwgPSAwOworCQkJY2gtPnR4ZF9yZXF1aXJlZCA9IDA7CisJCQkvKiByZS1lbmFibGUgdG8gY2F0Y2ggZmxvdyBjb250cm9sbGVkIGNoYW5uZWwgKi8KKwkJCXNkX2VuYWJsZV94bWl0KGNoLT51c2VyKTsKKwkJfQogCX0KLSAgICB9CiAjaWZkZWYgUkxEX1RYRlVMTF9ERUJVRwotICAgIGVsc2UgaWYgKGNoLT50eF9mdWxsKSB7Ci0JaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKQotCSAgICBwcl9pbmZvKCJ0eF9lb21bJWRdOiBieXBhc3MgVFggZW5hYmxlIHRob3VnaCByb29tIGF2YWlsYWJsZT8gKHR4ZF9mcmVlICVkIHR4ZF9udW0vMiAlZClcbiIsCi0JCSAgICBjaC0+Y2hhbm51bSwKLQkJICAgIGNoLT50eGRfZnJlZSwgY2gtPnR4ZF9udW0gLyAyKTsKLSAgICB9CisJZWxzZSBpZiAoY2gtPnR4X2Z1bGwpIHsKKwkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKQorCQkJcHJfaW5mbygidHhfZW9tWyVkXTogYnlwYXNzIFRYIGVuYWJsZSB0aG91Z2ggcm9vbSBhdmFpbGFibGU/ICh0eGRfZnJlZSAlZCB0eGRfbnVtLzIgJWQpXG4iLAorCQkJCWNoLT5jaGFubnVtLAorCQkJCWNoLT50eGRfZnJlZSwgY2gtPnR4ZF9udW0gLyAyKTsKKwl9CiAjZW5kaWYKIAotICAgIEZMVVNIX01FTV9XUklURSgpOwotI2lmIDAKLSNpZmRlZiBTQkVfSVNSX0lOTElORQotICAgIHNwaW5fdW5sb2NrX2lycSgmY2gtPmNoX3R4bG9jayk7Ci0jZWxzZQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSNlbmRpZgotI2VuZGlmCisJRkxVU0hfTUVNX1dSSVRFKCk7CiB9CiAKIAogc3RhdGljIHZvaWQKIG11c3ljY19iaF9yeF9lb20obXBpX3QgKnBpLCBpbnQgZ2NoYW4pCiB7Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0gICAgdm9pZCAgICAgICAqbSwgKm0yOwotICAgIHN0cnVjdCBtZGVzYyAqbWQ7Ci0gICAgdm9sYXRpbGUgdV9pbnQzMl90IHN0YXR1czsKLSAgICB1X2ludDMyX3QgICBlcnJvcjsKKwltY2hfdCAgICAgICpjaDsKKwl2b2lkICAgICAgICptLCAqbTI7CisJc3RydWN0IG1kZXNjICptZDsKKwl2b2xhdGlsZSB1X2ludDMyX3Qgc3RhdHVzOworCXVfaW50MzJfdCAgIGVycm9yOwogCi0gICAgY2ggPSBwaS0+Y2hhbltnY2hhbl07Ci0gICAgaWYgKCFjaCB8fCBjaC0+c3RhdGUgIT0gVVApIHsKLQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+IExPR19FUlJPUikKLQkgICAgcHJfaW5mbygiJXM6IGludHI6IHJlY2VpdmUgRU9NIG9uIHVuaW5pdGlhbGl6ZWQgY2hhbm5lbCAlZFxuIiwKLQkJICAgIHBpLT51cC0+ZGV2bmFtZSwgZ2NoYW4pOwotCXJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFjaC0+bWRyKQotCXJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiBjYW4gdGhpcyBoYXBwZW4gPyAqLworCWNoID0gcGktPmNoYW5bZ2NoYW5dOworCWlmICghY2ggfHwgY2gtPnN0YXRlICE9IFVQKSB7CisJCWlmIChjeHQxZTFfbG9nX2xldmVsID4gTE9HX0VSUk9SKQorCQkJcHJfaW5mbygiJXM6IGludHI6IHJlY2VpdmUgRU9NIG9uIHVuaW5pdGlhbGl6ZWQgY2hhbm5lbCAlZFxuIiwKKwkJCQlwaS0+dXAtPmRldm5hbWUsIGdjaGFuKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWNoLT5tZHIpCisJCXJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiBjYW4gdGhpcyBoYXBwZW4gPyAqLwogCi0gICAgZm9yICg7OykgewotCUZMVVNIX01FTV9SRUFEKCk7Ci0JbWQgPSAmY2gtPm1kcltjaC0+cnhpeF9pcnFfc3J2XTsKLQlzdGF0dXMgPSBsZTMyX3RvX2NwdShtZC0+c3RhdHVzKTsKLQlpZiAoIShzdGF0dXMgJiBIT1NUX1JYX09XTkVEKSkKLQkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogTm90IG91ciBtZGVzYywgZG9uZSAqLwotCW0gPSBtZC0+bWVtX3Rva2VuOwotCWVycm9yID0gKHN0YXR1cyA+PiAxNikgJiAweGY7Ci0JaWYgKGVycm9yID09IDApIHsKLSNpZmRlZiBDT05GSUdfU0JFX1dBTjI1NlQzX05DT01NCi0JICAgIGludCAgICAgICAgIGhkbGNudW0gPSAocGktPnBvcnRudW0gKiAzMiArIGdjaGFuKTsKKwlmb3IgKDs7KSB7CisJCUZMVVNIX01FTV9SRUFEKCk7CisJCW1kID0gJmNoLT5tZHJbY2gtPnJ4aXhfaXJxX3Nydl07CisJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KG1kLT5zdGF0dXMpOworCQlpZiAoIShzdGF0dXMgJiBIT1NUX1JYX09XTkVEKSkKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIE5vdCBvdXIgbWRlc2MsIGRvbmUgKi8KKwkJbSA9IG1kLT5tZW1fdG9rZW47CisJCWVycm9yID0gKHN0YXR1cyA+PiAxNikgJiAweGY7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQl7CisJCQkJbTIgPSBPU19tZW1fdG9rZW5fYWxsb2MoY3h0MWUxX21heF9tcnUpOworCQkJCWlmIChtMikgeworCQkJCQkvKiBzdWJzdGl0dXRlIHRoZSBtYnVmK2NsdXN0ZXIgKi8KKwkJCQkJbWQtPm1lbV90b2tlbiA9IG0yOworCQkJCQltZC0+ZGF0YSA9IGNwdV90b19sZTMyKE9TX3Z0b3BoeXMoCisJCQkJCQkJICAgICAgIE9TX21lbV90b2tlbl9kYXRhKG0yKSkpOwogCi0JICAgIC8qCi0JICAgICAqIGlmIHRoZSBwYWNrZXQgbnVtYmVyIGJlbG9uZ3MgdG8gTkNPTU0sIHRoZW4gc2VuZCBpdCB0byB0aGUgVE1TCi0JICAgICAqIGRyaXZlcgotCSAgICAgKi8KLQkgICAgaWYgKGhkbGNudW0gPj0gMjI4KSB7Ci0JCWlmIChuY2lQcm9jZXNzX1JYX3BhY2tldCkKLQkJICAgICgqbmNpUHJvY2Vzc19SWF9wYWNrZXQpIChoZGxjbnVtLCBzdGF0dXMgJiAweDNmZmYsIG0sIGNoLT51c2VyKTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKioqIENPTkZJR19TQkVfV0FOMjU2VDNfTkNPTU0gKioqLworCQkJCQkvKiBwYXNzIHRoZSByZWNlaXZlZCBtYnVmIHVwd2FyZCAqLworCQkJCQlzZF9yZWN2X2NvbnN1bWUobSwgc3RhdHVzICYgTEVOR1RIX01BU0ssCisJCQkJCQkJY2gtPnVzZXIpOworCQkJCQljaC0+cy5yeF9wYWNrZXRzKys7CisJCQkJCWNoLT5zLnJ4X2J5dGVzICs9IHN0YXR1cyAmIExFTkdUSF9NQVNLOworCQkJCX0gZWxzZQorCQkJCQljaC0+cy5yeF9kcm9wcGVkKys7CisJCQl9CisJCX0gZWxzZSBpZiAoZXJyb3IgPT0gRVJSX0ZDUykKKwkJCWNoLT5zLnJ4X2NyY19lcnJvcnMrKzsKKwkJZWxzZSBpZiAoZXJyb3IgPT0gRVJSX0FMSUdOKQorCQkJY2gtPnMucnhfbWlzc2VkX2Vycm9ycysrOworCQllbHNlIGlmIChlcnJvciA9PSBFUlJfQUJUKQorCQkJY2gtPnMucnhfbWlzc2VkX2Vycm9ycysrOworCQllbHNlIGlmIChlcnJvciA9PSBFUlJfTE5HKQorCQkJY2gtPnMucnhfbGVuZ3RoX2Vycm9ycysrOworCQllbHNlIGlmIChlcnJvciA9PSBFUlJfU0hUKQorCQkJY2gtPnMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlGTFVTSF9NRU1fV1JJVEUoKTsKKwkJc3RhdHVzID0gY3h0MWUxX21heF9tcnU7CisJCWlmIChjaC0+cC5jaGFuX21vZGUgPT0gQ0ZHX0NIX1BST1RPX1RSQU5TKQorCQkJc3RhdHVzIHw9IEVPQklSUV9FTkFCTEU7CisJCW1kLT5zdGF0dXMgPSBjcHVfdG9fbGUzMihzdGF0dXMpOwogCi0JICAgIHsKLQkJbTIgPSBPU19tZW1fdG9rZW5fYWxsb2MoY3h0MWUxX21heF9tcnUpOwotCQlpZiAobTIpIHsKLQkJCS8qIHN1YnN0aXR1dGUgdGhlIG1idWYrY2x1c3RlciAqLwotCQkJbWQtPm1lbV90b2tlbiA9IG0yOwotCQkJbWQtPmRhdGEgPSBjcHVfdG9fbGUzMihPU192dG9waHlzKAotCQkJCU9TX21lbV90b2tlbl9kYXRhKG0yKSkpOwotCi0JCQkvKiBwYXNzIHRoZSByZWNlaXZlZCBtYnVmIHVwd2FyZCAqLwotCQkJc2RfcmVjdl9jb25zdW1lKG0sIHN0YXR1cyAmIExFTkdUSF9NQVNLLCBjaC0+dXNlcik7Ci0JCQljaC0+cy5yeF9wYWNrZXRzKys7Ci0JCQljaC0+cy5yeF9ieXRlcyArPSBzdGF0dXMgJiBMRU5HVEhfTUFTSzsKLQkJfSBlbHNlCi0JCQljaC0+cy5yeF9kcm9wcGVkKys7Ci0JICAgIH0KLQl9IGVsc2UgaWYgKGVycm9yID09IEVSUl9GQ1MpCi0JICAgIGNoLT5zLnJ4X2NyY19lcnJvcnMrKzsKLQllbHNlIGlmIChlcnJvciA9PSBFUlJfQUxJR04pCi0JICAgIGNoLT5zLnJ4X21pc3NlZF9lcnJvcnMrKzsKLQllbHNlIGlmIChlcnJvciA9PSBFUlJfQUJUKQotCSAgICBjaC0+cy5yeF9taXNzZWRfZXJyb3JzKys7Ci0JZWxzZSBpZiAoZXJyb3IgPT0gRVJSX0xORykKLQkgICAgY2gtPnMucnhfbGVuZ3RoX2Vycm9ycysrOwotCWVsc2UgaWYgKGVycm9yID09IEVSUl9TSFQpCi0JICAgIGNoLT5zLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQlGTFVTSF9NRU1fV1JJVEUoKTsKLQkgICAgICAgc3RhdHVzID0gY3h0MWUxX21heF9tcnU7Ci0JaWYgKGNoLT5wLmNoYW5fbW9kZSA9PSBDRkdfQ0hfUFJPVE9fVFJBTlMpCi0JICAgIHN0YXR1cyB8PSBFT0JJUlFfRU5BQkxFOwotCW1kLT5zdGF0dXMgPSBjcHVfdG9fbGUzMihzdGF0dXMpOwotCi0JLyogQ2hlY2sgbmV4dCBtZGVzYyBpbiB0aGUgcmluZyAqLwotCWlmICgrK2NoLT5yeGl4X2lycV9zcnYgPj0gY2gtPnJ4ZF9udW0pCi0JICAgIGNoLT5yeGl4X2lycV9zcnYgPSAwOwotCUZMVVNIX01FTV9XUklURSgpOwotICAgIH0KKwkJLyogQ2hlY2sgbmV4dCBtZGVzYyBpbiB0aGUgcmluZyAqLworCQlpZiAoKytjaC0+cnhpeF9pcnFfc3J2ID49IGNoLT5yeGRfbnVtKQorCQkJY2gtPnJ4aXhfaXJxX3NydiA9IDA7CisJCUZMVVNIX01FTV9XUklURSgpOworCX0KIH0KIAogCiBpcnFyZXR1cm5fdAogbXVzeWNjX2ludHJfdGhfaGFuZGxlcih2b2lkICpkZXZwKQogewotICAgIGNpX3QgICAgICAgKmNpID0gKGNpX3QgKikgZGV2cDsKLSAgICB2b2xhdGlsZSB1X2ludDMyX3Qgc3RhdHVzLCBjdXJySW50ID0gMDsKLSAgICB1X2ludDMyX3QgICBuZXh0SW50LCBpbnRDbnQ7CisJY2lfdCAgICAgICAqY2kgPSAoY2lfdCAqKSBkZXZwOworCXZvbGF0aWxlIHVfaW50MzJfdCBzdGF0dXMsIGN1cnJJbnQgPSAwOworCXVfaW50MzJfdCAgIG5leHRJbnQsIGludENudDsKIAotICAgIC8qCi0gICAgICogSGFyZHdhcmUgbm90IGF2YWlsYWJsZSwgcG90ZW50aWFsIGludGVycnVwdCBoYW5nLiAgQnV0IHNpbmNlIGludGVycnVwdAotICAgICAqIG1pZ2h0IGJlIHNoYXJlZCwganVzdCByZXR1cm4uCi0gICAgICovCi0gICAgaWYgKGNpLT5zdGF0ZSA9PSBDX0lOSVQpCi0JcmV0dXJuIElSUV9OT05FOwotICAgIC8qCi0gICAgICogTWFya2VkIGFzIGhhcmR3YXJlIGF2YWlsYWJsZS4gRG9uJ3Qgc2VydmljZSBpbnRlcnJ1cHRzLCBqdXN0IGNsZWFyIHRoZQotICAgICAqIGV2ZW50LgotICAgICAqLworCS8qCisJICogSGFyZHdhcmUgbm90IGF2YWlsYWJsZSwgcG90ZW50aWFsIGludGVycnVwdCBoYW5nLiAgQnV0IHNpbmNlIGludGVycnVwdAorCSAqIG1pZ2h0IGJlIHNoYXJlZCwganVzdCByZXR1cm4uCisJICovCisJaWYgKGNpLT5zdGF0ZSA9PSBDX0lOSVQpCisJCXJldHVybiBJUlFfTk9ORTsKKwkvKgorCSAqIE1hcmtlZCBhcyBoYXJkd2FyZSBhdmFpbGFibGUuIERvbid0IHNlcnZpY2UgaW50ZXJydXB0cywganVzdCBjbGVhciB0aGUKKwkgKiBldmVudC4KKwkgKi8KIAotICAgIGlmIChjaS0+c3RhdGUgPT0gQ19JRExFKSB7Ci0Jc3RhdHVzID0gcGNpX3JlYWRfMzIoKHVfaW50MzJfdCAqKSAmY2ktPnJlZy0+aXNkKTsKKwlpZiAoY2ktPnN0YXRlID09IENfSURMRSkgeworCQlzdGF0dXMgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopICZjaS0+cmVnLT5pc2QpOwogCi0JLyogY2xlYXIgdGhlIGludGVycnVwdCBidXQgcHJvY2VzcyBub3RoaW5nIGVsc2UgKi8KLQlwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmY2ktPnJlZy0+aXNkLCBzdGF0dXMpOwotCXJldHVybiBJUlFfSEFORExFRDsKLSAgICB9Ci0gICAgRkxVU0hfUENJX1JFQUQoKTsKLSAgICBGTFVTSF9NRU1fUkVBRCgpOwotCi0gICAgc3RhdHVzID0gcGNpX3JlYWRfMzIoKHVfaW50MzJfdCAqKSAmY2ktPnJlZy0+aXNkKTsKLSAgICBuZXh0SW50ID0gSU5UUlBUU19ORVhUSU5UKHN0YXR1cyk7Ci0gICAgaW50Q250ID0gSU5UUlBUU19JTlRDTlQoc3RhdHVzKTsKLSAgICBjaS0+aW50bG9nLmRydnJfaW50cl90aGNvdW50Kys7Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIEhXIEJ1ZyBGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBVbmRlciBjZXJ0YWluIFBDSSBCdXMgbG9hZGluZyBjb25kaXRpb25zLCB0aGUgICAgICAgICAqLwotICAgIC8qIE1VU1lDQyBsb29zZXMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIHVwZGF0ZSAgICAgICovCi0gICAgLyogb2YgaXRzIElTRCBhbmQgZXJyb25lb3VzbHkgcmV0dXJucyB0aGUgaW1tZWRpYXRlbHkgICAgKi8KLSAgICAvKiBwcmVjZWRpbmcgJ25leHRJbnQnIHZhbHVlLiAgSG93ZXZlciwgdGhlICdpbnRDbnQnICAgICAqLwotICAgIC8qIHZhbHVlIGFwcGVhcnMgdG8gYmUgY29ycmVjdC4gIEJ5IG5vdCBzdGFydGluZyBzZXJ2aWNlICovCi0gICAgLyogd2hlcmUgdGhlICdtaXNzaW5nJyAnbmV4dEludCcgU0hPVUxEIHBvaW50IGNhdXNlcyAgICAgKi8KLSAgICAvKiB0aGUgSVFEIG5vdCB0byBiZSBzZXJ2aWNlZCAtIHRoZSAnbm90IHNlcnZpY2VkJyAgICAgICAqLwotICAgIC8qIGVudHJpZXMgdGhlbiByZW1haW4gYW5kIGNvbnRpbnVlIHRvIGluY3JlYXNlIGFzIG1vcmUgICovCi0gICAgLyogaW5jb3JyZWN0IElTRCdzIGFyZSBlbmNvdW50ZXJlZC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgaWYgKG5leHRJbnQgIT0gSU5UUlBUU19ORVhUSU5UKGNpLT5pbnRsb2cudGhpc19zdGF0dXNfbmV3KSkgewotCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SKSB7Ci0JICAgIHByX2luZm8oIiVzOiBub3RlIC0gdXBkYXRlZCBJU0QgZnJvbSAlMDh4IHRvICUwOHhcbiIsCi0JCSAgICBjaS0+ZGV2bmFtZSwgc3RhdHVzLAotCSAgICAgIChzdGF0dXMgJiAofklOVFJQVFNfTkVYVElOVF9NKSkgfCBjaS0+aW50bG9nLnRoaXNfc3RhdHVzX25ldyk7CisJCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgYnV0IHByb2Nlc3Mgbm90aGluZyBlbHNlICovCisJCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopICZjaS0+cmVnLT5pc2QsIHN0YXR1cyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKIAl9Ci0JLyoKLQkgKiBSZXBsYWNlIGJvZ3VzIHN0YXR1cyB3aXRoIHNvZnR3YXJlIGNvcnJlY3RlZCB2YWx1ZS4KLQkgKgotCSAqIEl0J3Mgbm90IGtub3duIHdoZXRoZXIsIGR1cmluZyB0aGlzIHByb2JsZW0gb2NjdXJyZW5jZSwgaWYgdGhlCi0JICogSU5URlVMTCBiaXQgaXMgY29ycmVjdGx5IHJlcG9ydGVkIG9yIG5vdC4KLQkgKi8KLQlzdGF0dXMgPSAoc3RhdHVzICYgKH5JTlRSUFRTX05FWFRJTlRfTSkpIHwgKGNpLT5pbnRsb2cudGhpc19zdGF0dXNfbmV3KTsKKwlGTFVTSF9QQ0lfUkVBRCgpOworCUZMVVNIX01FTV9SRUFEKCk7CisKKwlzdGF0dXMgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopICZjaS0+cmVnLT5pc2QpOwogCW5leHRJbnQgPSBJTlRSUFRTX05FWFRJTlQoc3RhdHVzKTsKLSAgICB9Ci0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogQ244NDd4IEJ1ZyBGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogRml4IGZvciBpbmFiaWxpdHkgdG8gd3JpdGUgYmFjayBzYW1lIGluZGV4ICovCi0gICAgLyogYXMgcmVhZCBmb3IgYSBmdWxsIGludGVycnVwdCBxdWV1ZS4gICAgICAgICovCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaW50Q250ID0gSU5UUlBUU19JTlRDTlQoc3RhdHVzKTsKKwljaS0+aW50bG9nLmRydnJfaW50cl90aGNvdW50Kys7CiAKLSAgICBpZiAoaW50Q250ID09IElOVF9RVUVVRV9TSVpFKQotCWN1cnJJbnQgPSAoKGludENudCAtIDEpICsgbmV4dEludCkgJiAoSU5UX1FVRVVFX1NJWkUgLSAxKTsKLSAgICBlbHNlCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiBJbnRlcnJ1cHQgV3JpdGUgTG9jYXRpb24gSXNzdWVzICAgICAgICAgICAgICAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICovCi0JLyogV2hlbiB0aGUgaW50ZXJydXB0IHN0YXR1cyBkZXNjcmlwdG9yIGlzICAgICAgKi8KLQkvKiB3cml0dGVuLCB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZGUtYXNzZXJ0ZWQgICAqLwotCS8qIGJ5IHRoZSBDbjg0N3guICBJbiB0aGUgY2FzZSBvZiBNSVBTICAgICAgICAgICovCi0JLyogbWljcm9wcm9jZXNzb3JzLCB0aGlzIG11c3Qgb2NjdXIgYXQgdGhlICAgICAgKi8KLQkvKiBiZWdpbm5pbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIHNvIHRoYXQgICAqLwotCS8qIHRoZSBpbnRlcnJ1cHQgaGFuZGxlIGlzIG5vdCByZS1lbnRlcmVkIGR1ZSAgICovCi0JLyogdG8gaW50ZXJydXB0IGRpcy1hc3NlcnRpb24gbGF0ZW5jeS4gICAgICAgICAgKi8KLQkvKiBJbiB0aGUgY2FzZSBvZiBhbGwgb3RoZXIgcHJvY2Vzc29ycywgdGhpcyAgICAqLwotCS8qIGFjdGlvbiBzaG91bGQgb2NjdXIgYXQgdGhlIGVuZCBvZiB0aGUgICAgICAgICovCi0JLyogaW50ZXJydXB0IGhhbmRsZXIgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlICAgKi8KLQkvKiBpbnRlcnJ1cHQgcXVldWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBIVyBCdWcgRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogVW5kZXIgY2VydGFpbiBQQ0kgQnVzIGxvYWRpbmcgY29uZGl0aW9ucywgdGhlICAgICAgICAgKi8KKwkvKiBNVVNZQ0MgbG9vc2VzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiB1cGRhdGUgICAgICAqLworCS8qIG9mIGl0cyBJU0QgYW5kIGVycm9uZW91c2x5IHJldHVybnMgdGhlIGltbWVkaWF0ZWx5ICAgICovCisJLyogcHJlY2VkaW5nICduZXh0SW50JyB2YWx1ZS4gIEhvd2V2ZXIsIHRoZSAnaW50Q250JyAgICAgKi8KKwkvKiB2YWx1ZSBhcHBlYXJzIHRvIGJlIGNvcnJlY3QuICBCeSBub3Qgc3RhcnRpbmcgc2VydmljZSAqLworCS8qIHdoZXJlIHRoZSAnbWlzc2luZycgJ25leHRJbnQnIFNIT1VMRCBwb2ludCBjYXVzZXMgICAgICovCisJLyogdGhlIElRRCBub3QgdG8gYmUgc2VydmljZWQgLSB0aGUgJ25vdCBzZXJ2aWNlZCcgICAgICAgKi8KKwkvKiBlbnRyaWVzIHRoZW4gcmVtYWluIGFuZCBjb250aW51ZSB0byBpbmNyZWFzZSBhcyBtb3JlICAqLworCS8qIGluY29ycmVjdCBJU0QncyBhcmUgZW5jb3VudGVyZWQuICAgICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAgIGlmIChpbnRDbnQpCi0JY3VyckludCA9IChpbnRDbnQgKyBuZXh0SW50KSAmIChJTlRfUVVFVUVfU0laRSAtIDEpOwotICAgIGVsc2UgewotCS8qCi0JICogTk9URTogU2VydmljaW5nIGFuIGludGVycnVwdCB3aG9zZSBJU0QgY29udGFpbnMgYSBjb3VudCBvZiBaRVJPCi0JICogY2FuIGJlIGluZGljYXRpdmUgb2YgYSBTaGFyZWQgSW50ZXJydXB0IGNoYWluLiAgT3VyIGRyaXZlciBjYW4gYmUKLQkgKiBjYWxsZWQgZnJvbSB0aGUgc3lzdGVtJ3MgaW50ZXJydXB0IGhhbmRsZXIgYXMgYSBtYXR0ZXIgb2YgdGhlIE9TCi0JICogd2Fsa2luZyB0aGUgY2hhaW4uICBBcyB0aGUgY2hhaW4gaXMgd2Fsa2VkLCB0aGUgaW50ZXJydXB0IHdpbGwKLQkgKiBldmVudHVhbGx5IGJlIHNlcnZpY2VkIGJ5IHRoZSBjb3JyZWN0IGRyaXZlci9oYW5kbGVyLgotCSAqLwotI2lmIDAKLQkvKiBjaGFpbmVkIGludGVycnVwdCA9IG5vdCBvdXJzICovCi0JcHJfaW5mbygiPj4gJXM6IGludENudCBOVUxMLCBzdHMgJXgsIHBvc3NpYmx5IGEgY2hhaW5lZCBpbnRlcnJ1cHQhXG4iLAotCQljaS0+ZGV2bmFtZSwgc3RhdHVzKTsKLSNlbmRpZgotCXJldHVybiBJUlFfTk9ORTsKLSAgICB9CisJaWYgKG5leHRJbnQgIT0gSU5UUlBUU19ORVhUSU5UKGNpLT5pbnRsb2cudGhpc19zdGF0dXNfbmV3KSkgeworCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUikgeworCQkJcHJfaW5mbygiJXM6IG5vdGUgLSB1cGRhdGVkIElTRCBmcm9tICUwOHggdG8gJTA4eFxuIiwKKwkJCQljaS0+ZGV2bmFtZSwgc3RhdHVzLAorCQkJCShzdGF0dXMgJiAofklOVFJQVFNfTkVYVElOVF9NKSkgfAorCQkJCWNpLT5pbnRsb2cudGhpc19zdGF0dXNfbmV3KTsKKwkJfQorCQkvKgorCQkgKiBSZXBsYWNlIGJvZ3VzIHN0YXR1cyB3aXRoIHNvZnR3YXJlIGNvcnJlY3RlZCB2YWx1ZS4KKwkJICoKKwkJICogSXQncyBub3Qga25vd24gd2hldGhlciwgZHVyaW5nIHRoaXMgcHJvYmxlbSBvY2N1cnJlbmNlLCBpZiB0aGUKKwkJICogSU5URlVMTCBiaXQgaXMgY29ycmVjdGx5IHJlcG9ydGVkIG9yIG5vdC4KKwkJICovCisJCXN0YXR1cyA9IChzdGF0dXMgJiAofklOVFJQVFNfTkVYVElOVF9NKSkgfAorCQkJIChjaS0+aW50bG9nLnRoaXNfc3RhdHVzX25ldyk7CisJCW5leHRJbnQgPSBJTlRSUFRTX05FWFRJTlQoc3RhdHVzKTsKKwl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQ244NDd4IEJ1ZyBGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogRml4IGZvciBpbmFiaWxpdHkgdG8gd3JpdGUgYmFjayBzYW1lIGluZGV4ICovCisJLyogYXMgcmVhZCBmb3IgYSBmdWxsIGludGVycnVwdCBxdWV1ZS4gICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgICBjaS0+aXFwX3RhaWx4ID0gY3VyckludDsKKwlpZiAoaW50Q250ID09IElOVF9RVUVVRV9TSVpFKQorCQljdXJySW50ID0gKChpbnRDbnQgLSAxKSArIG5leHRJbnQpICYgKElOVF9RVUVVRV9TSVpFIC0gMSk7CisJZWxzZQorCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBJbnRlcnJ1cHQgV3JpdGUgTG9jYXRpb24gSXNzdWVzICAgICAgICAgICAgICAqLworCQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAqLworCQkvKiBXaGVuIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGRlc2NyaXB0b3IgaXMgICAgICAqLworCQkvKiB3cml0dGVuLCB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZGUtYXNzZXJ0ZWQgICAqLworCQkvKiBieSB0aGUgQ244NDd4LiAgSW4gdGhlIGNhc2Ugb2YgTUlQUyAgICAgICAgICAqLworCQkvKiBtaWNyb3Byb2Nlc3NvcnMsIHRoaXMgbXVzdCBvY2N1ciBhdCB0aGUgICAgICAqLworCQkvKiBiZWdpbm5pbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIHNvIHRoYXQgICAqLworCQkvKiB0aGUgaW50ZXJydXB0IGhhbmRsZSBpcyBub3QgcmUtZW50ZXJlZCBkdWUgICAqLworCQkvKiB0byBpbnRlcnJ1cHQgZGlzLWFzc2VydGlvbiBsYXRlbmN5LiAgICAgICAgICAqLworCQkvKiBJbiB0aGUgY2FzZSBvZiBhbGwgb3RoZXIgcHJvY2Vzc29ycywgdGhpcyAgICAqLworCQkvKiBhY3Rpb24gc2hvdWxkIG9jY3VyIGF0IHRoZSBlbmQgb2YgdGhlICAgICAgICAqLworCQkvKiBpbnRlcnJ1cHQgaGFuZGxlciB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUgICAqLworCQkvKiBpbnRlcnJ1cHQgcXVldWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gICAgY3VyckludCA8PD0gSU5UUlBUU19ORVhUSU5UX1M7Ci0gICAgY2ktPmludGxvZy5sYXN0X3N0YXR1c19uZXcgPSBjaS0+aW50bG9nLnRoaXNfc3RhdHVzX25ldzsKLSAgICBjaS0+aW50bG9nLnRoaXNfc3RhdHVzX25ldyA9IGN1cnJJbnQ7CisJCWlmIChpbnRDbnQpCisJCQljdXJySW50ID0gKGludENudCArIG5leHRJbnQpICYgKElOVF9RVUVVRV9TSVpFIC0gMSk7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIE5PVEU6IFNlcnZpY2luZyBhbiBpbnRlcnJ1cHQgd2hvc2UgSVNEIGNvbnRhaW5zIGEgY291bnQgb2YgWkVSTworCQkJICogY2FuIGJlIGluZGljYXRpdmUgb2YgYSBTaGFyZWQgSW50ZXJydXB0IGNoYWluLiAgT3VyIGRyaXZlciBjYW4gYmUKKwkJCSAqIGNhbGxlZCBmcm9tIHRoZSBzeXN0ZW0ncyBpbnRlcnJ1cHQgaGFuZGxlciBhcyBhIG1hdHRlciBvZiB0aGUgT1MKKwkJCSAqIHdhbGtpbmcgdGhlIGNoYWluLiAgQXMgdGhlIGNoYWluIGlzIHdhbGtlZCwgdGhlIGludGVycnVwdCB3aWxsCisJCQkgKiBldmVudHVhbGx5IGJlIHNlcnZpY2VkIGJ5IHRoZSBjb3JyZWN0IGRyaXZlci9oYW5kbGVyLgorCQkJICovCisJCQlyZXR1cm4gSVJRX05PTkU7CisJCX0KIAotICAgIGlmICgoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfV0FSTikgJiYgKHN0YXR1cyAmIElOVFJQVFNfSU5URlVMTF9NKSkKLQlwcl9pbmZvKCIlczogSW50ZXJydXB0IHF1ZXVlIGZ1bGwgY29uZGl0aW9uIG9jY3VycmVkXG4iLCBjaS0+ZGV2bmFtZSk7Ci0gICAgaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX0RFQlVHKQotCXByX2luZm8oIiVzOiBpbnRlcnJ1cHRzIHBlbmRpbmcsIGlzZCBAIDB4JXA6ICV4IGN1cnIgJWQgY250ICVkIE5FWFQgJWRcbiIsCi0JCWNpLT5kZXZuYW1lLCAmY2ktPnJlZy0+aXNkLAotCXN0YXR1cywgbmV4dEludCwgaW50Q250LCAoaW50Q250ICsgbmV4dEludCkgJiAoSU5UX1FVRVVFX1NJWkUgLSAxKSk7CisJY2ktPmlxcF90YWlseCA9IGN1cnJJbnQ7CiAKLSAgICBGTFVTSF9NRU1fV1JJVEUoKTsKKwljdXJySW50IDw8PSBJTlRSUFRTX05FWFRJTlRfUzsKKwljaS0+aW50bG9nLmxhc3Rfc3RhdHVzX25ldyA9IGNpLT5pbnRsb2cudGhpc19zdGF0dXNfbmV3OworCWNpLT5pbnRsb2cudGhpc19zdGF0dXNfbmV3ID0gY3VyckludDsKKworCWlmICgoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfV0FSTikgJiYgKHN0YXR1cyAmIElOVFJQVFNfSU5URlVMTF9NKSkKKwkJcHJfaW5mbygiJXM6IEludGVycnVwdCBxdWV1ZSBmdWxsIGNvbmRpdGlvbiBvY2N1cnJlZFxuIiwKKwkJCWNpLT5kZXZuYW1lKTsKKwlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfREVCVUcpCisJCXByX2luZm8oIiVzOiBpbnRlcnJ1cHRzIHBlbmRpbmcsIGlzZCBAIDB4JXA6ICV4IGN1cnIgJWQgY250ICVkIE5FWFQgJWRcbiIsCisJCQljaS0+ZGV2bmFtZSwgJmNpLT5yZWctPmlzZCwKKwkJCXN0YXR1cywgbmV4dEludCwgaW50Q250LAorCQkJKGludENudCArIG5leHRJbnQpICYgKElOVF9RVUVVRV9TSVpFIC0gMSkpOworCisJRkxVU0hfTUVNX1dSSVRFKCk7CiAjaWYgZGVmaW5lZChTQkVfSVNSX1RBU0tMRVQpCi0gICAgcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmlzZCwgY3VyckludCk7Ci0gICAgYXRvbWljX2luYygmY2ktPmJoX3BlbmRpbmcpOwotICAgIHRhc2tsZXRfc2NoZWR1bGUoJmNpLT5jaV9tdXN5Y2NfaXNyX3Rhc2tsZXQpOworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopICZjaS0+cmVnLT5pc2QsIGN1cnJJbnQpOworCWF0b21pY19pbmMoJmNpLT5iaF9wZW5kaW5nKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZjaS0+Y2lfbXVzeWNjX2lzcl90YXNrbGV0KTsKICNlbGlmIGRlZmluZWQoU0JFX0lTUl9JTU1FRElBVEUpCi0gICAgcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmlzZCwgY3VyckludCk7Ci0gICAgYXRvbWljX2luYygmY2ktPmJoX3BlbmRpbmcpOwotICAgIHF1ZXVlX3Rhc2soJmNpLT5jaV9tdXN5Y2NfaXNyX3RxLCAmdHFfaW1tZWRpYXRlKTsKLSAgICBtYXJrX2JoKElNTUVESUFURV9CSCk7CisJcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmlzZCwgY3VyckludCk7CisJYXRvbWljX2luYygmY2ktPmJoX3BlbmRpbmcpOworCXF1ZXVlX3Rhc2soJmNpLT5jaV9tdXN5Y2NfaXNyX3RxLCAmdHFfaW1tZWRpYXRlKTsKKwltYXJrX2JoKElNTUVESUFURV9CSCk7CiAjZWxpZiBkZWZpbmVkKFNCRV9JU1JfSU5MSU5FKQotICAgICh2b2lkKSBtdXN5Y2NfaW50cl9iaF90YXNrbGV0KGNpKTsKLSAgICBwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSAmY2ktPnJlZy0+aXNkLCBjdXJySW50KTsKKwkodm9pZCkgbXVzeWNjX2ludHJfYmhfdGFza2xldChjaSk7CisJcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmlzZCwgY3VyckludCk7CiAjZW5kaWYKLSAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiAKQEAgLTEyMjYsNTc0ICsxMjA3LDUxMyBAQAogI2VuZGlmCiBtdXN5Y2NfaW50cl9iaF90YXNrbGV0KGNpX3QgKmNpKQogewotICAgIG1waV90ICAgICAgKnBpOwotICAgIG1jaF90ICAgICAgKmNoOwotICAgIHVuc2lnbmVkIGludCBpbnRDbnQ7Ci0gICAgdm9sYXRpbGUgdV9pbnQzMl90IGN1cnJJbnQgPSAwOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBoZWFkeCwgdGFpbHg7Ci0gICAgaW50ICAgICAgICAgcmVhZENvdW50LCBsb29wQ291bnQ7Ci0gICAgaW50ICAgICAgICAgZ3JvdXAsIGdjaGFuLCBldmVudCwgZXJyLCB0eDsKLSAgICB1X2ludDMyX3QgICBiYWRJbnQgPSBJTlRfRU1QVFlfRU5UUlk7Ci0gICAgdV9pbnQzMl90ICAgYmFkSW50MiA9IElOVF9FTVBUWV9FTlRSWTI7Ci0KLSAgICAvKgotICAgICAqIEhhcmR3YXJlIG5vdCBhdmFpbGFibGUsIHBvdGVudGlhbCBpbnRlcnJ1cHQgaGFuZy4gIEJ1dCBzaW5jZSBpbnRlcnJ1cHQKLSAgICAgKiBtaWdodCBiZSBzaGFyZWQsIGp1c3QgcmV0dXJuLgotICAgICAqLwotICAgIGlmICgoZHJ2cl9zdGF0ZSAhPSBTQkVfRFJWUl9BVkFJTEFCTEUpIHx8IChjaS0+c3RhdGUgPT0gQ19JTklUKSkgewotI2lmIGRlZmluZWQoU0JFX0lTUl9JTU1FRElBVEUpCi0JcmV0dXJuIDBMOwotI2Vsc2UKLQlyZXR1cm47Ci0jZW5kaWYKLSAgICB9Ci0jaWYgZGVmaW5lZChTQkVfSVNSX1RBU0tMRVQpIHx8IGRlZmluZWQoU0JFX0lTUl9JTU1FRElBVEUpCi0gICAgaWYgKGRydnJfc3RhdGUgIT0gU0JFX0RSVlJfQVZBSUxBQkxFKSB7Ci0jaWYgZGVmaW5lZChTQkVfSVNSX1RBU0tMRVQpCi0JcmV0dXJuOwotI2VsaWYgZGVmaW5lZChTQkVfSVNSX0lNTUVESUFURSkKLQlyZXR1cm4gMEw7Ci0jZW5kaWYKLSAgICB9Ci0jZWxpZiBkZWZpbmVkKFNCRV9JU1JfSU5MSU5FKQotICAgIC8qIG5vIHNlbWFwaG9yZSB0YWtlbiwgbm8gZG91YmxlIGNoZWNrcyAqLwotI2VuZGlmCi0KLSAgICBjaS0+aW50bG9nLmRydnJfaW50cl9iaGNvdW50Kys7Ci0gICAgRkxVU0hfTUVNX1JFQUQoKTsKLSAgICB7Ci0JdW5zaWduZWQgaW50IGJoID0gYXRvbWljX3JlYWQoJmNpLT5iaF9wZW5kaW5nKTsKLQotCW1heF9iaCA9IG1heChiaCwgbWF4X2JoKTsKLSAgICB9Ci0gICAgYXRvbWljX3NldCgmY2ktPmJoX3BlbmRpbmcsIDApOy8qIGlmIGhlcmUsIG5vIGxvbmdlciBwZW5kaW5nICovCi0gICAgd2hpbGUgKChoZWFkeCA9IGNpLT5pcXBfaGVhZHgpICE9ICh0YWlseCA9IGNpLT5pcXBfdGFpbHgpKSB7Ci0JaW50Q250ID0gKHRhaWx4ID49IGhlYWR4KSA/ICh0YWlseCAtIGhlYWR4KSA6ICh0YWlseCAtIGhlYWR4ICsgSU5UX1FVRVVFX1NJWkUpOwotCWN1cnJJbnQgPSBsZTMyX3RvX2NwdShjaS0+aXFkX3BbaGVhZHhdKTsKLQotCW1heF9pbnRjbnQgPSBtYXgoaW50Q250LCBtYXhfaW50Y250KTsgIC8qIFJMRCBERUJVRyAqLwotCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIEhXIEJ1ZyBGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiAtLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyogVGhlIGZvbGxvd2luZyBjb2RlIGNoZWNrcyBmb3IgdGhlIGNvbmRpdGlvbiAgICAqLwotCS8qIG9mIGludGVycnVwdCBhc3NlcnRpb24gYmVmb3JlIGludGVycnVwdCAgICAgICAgKi8KLQkvKiBxdWV1ZSB1cGRhdGUuICBUaGlzIGlzIGEgcHJvYmxlbSBvbiBzZXZlcmFsICAgICovCi0JLyogUENJLUxvY2FsIGJyaWRnZSBjaGlwcyBmb3VuZCBvbiBzb21lIHByb2R1Y3RzLiAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCXJlYWRDb3VudCA9IDA7Ci0JaWYgKChjdXJySW50ID09IGJhZEludCkgfHwgKGN1cnJJbnQgPT0gYmFkSW50MikpCi0JICAgIGNpLT5pbnRsb2cuZHJ2cl9pbnRfZmFpbHVyZSsrOwotCi0Jd2hpbGUgKChjdXJySW50ID09IGJhZEludCkgfHwgKGN1cnJJbnQgPT0gYmFkSW50MikpIHsKLQkgICAgZm9yIChsb29wQ291bnQgPSAwOyBsb29wQ291bnQgPCAweDMwOyBsb29wQ291bnQrKykKLQkJT1NfdXdhaXRfZHVtbXkoKTsgIC8qIHVzZSBjYWxsIHRvIGF2b2lkIG9wdGltaXphdGlvbiByZW1vdmFsCi0JCQkJICAgICAqIG9mIGR1bW15IGRlbGF5ICovCi0JICAgIEZMVVNIX01FTV9SRUFEKCk7Ci0JICAgIGN1cnJJbnQgPSBsZTMyX3RvX2NwdShjaS0+aXFkX3BbaGVhZHhdKTsKLQkgICAgaWYgKHJlYWRDb3VudCsrID4gMjApCi0JCWJyZWFrOwotCX0KLQotCWlmICgoY3VyckludCA9PSBiYWRJbnQpIHx8IChjdXJySW50ID09IGJhZEludDIpKSB7ICAgICAgLyogY2F0Y2ggZmFpbHVyZSBvZiBCdWcKLQkJCQkJCQkJICogRml4IGNoZWNraW5nICovCi0JICAgIGlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19XQVJOKQotCQlwcl9pbmZvKCIlczogSWxsZWdhbCBJbnRlcnJ1cHQgRGV0ZWN0ZWQgQCAweCVwLCBtb2QgJWQuKVxuIiwKLQkJCWNpLT5kZXZuYW1lLCAmY2ktPmlxZF9wW2hlYWR4XSwgaGVhZHgpOwotCi0JICAgIC8qCi0JICAgICAqIElmIHRoZSBkZXNjcmlwdG9yIGhhcyBub3QgcmVjb3ZlcmVkLCB0aGVuIGxlYXZpbmcgdGhlIEVNUFRZCi0JICAgICAqIGVudHJ5IHNldCB3aWxsIG5vdCBzaWduYWwgdG8gdGhlIE1VU1lDQyB0aGF0IHRoaXMgZGVzY3JpcHRvcgotCSAgICAgKiBoYXMgYmVlbiBzZXJ2aWNlZC4gVGhlIEludGVycnVwdCBRdWV1ZSBjYW4gdGhlbiBzdGFydCBsb3NpbmcKLQkgICAgICogYXZhaWxhYmxlIGRlc2NyaXB0b3JzIGFuZCBNVVNZQ0MgZXZlbnR1YWxseSBlbmNvdW50ZXJzIGFuZAotCSAgICAgKiByZXBvcnRzIHRoZSBJTlRGVUxMIGNvbmRpdGlvbi4gIFBlciBtYW51YWwsIGNoYW5naW5nIGFueSBiaXQKLQkgICAgICogbWFya3MgZGVzY3JpcHRvciBhcyBhdmFpbGFibGUsIHRodXMgdGhlIHVzZSBvZiBkaWZmZXJlbnQKLQkgICAgICogRU1QVFlfRU5UUlkgdmFsdWVzLgotCSAgICAgKi8KLQotCSAgICBpZiAoY3VyckludCA9PSBiYWRJbnQpCi0JCWNpLT5pcWRfcFtoZWFkeF0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKElOVF9FTVBUWV9FTlRSWTIpOwotCSAgICBlbHNlCi0JCWNpLT5pcWRfcFtoZWFkeF0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKElOVF9FTVBUWV9FTlRSWSk7Ci0JICAgIGNpLT5pcXBfaGVhZHggPSAoaGVhZHggKyAxKSAmIChJTlRfUVVFVUVfU0laRSAtIDEpOyAvKiBpbnN1cmUgd3JhcG5lc3MgKi8KLQkgICAgRkxVU0hfTUVNX1dSSVRFKCk7Ci0JICAgIEZMVVNIX01FTV9SRUFEKCk7Ci0JICAgIGNvbnRpbnVlOwotCX0KLQlncm91cCA9IElOVFJQVF9HUlAoY3VyckludCk7Ci0JZ2NoYW4gPSBJTlRSUFRfQ0goY3VyckludCk7Ci0JZXZlbnQgPSBJTlRSUFRfRVZFTlQoY3VyckludCk7Ci0JZXJyID0gSU5UUlBUX0VSUk9SKGN1cnJJbnQpOwotCXR4ID0gY3VyckludCAmIElOVFJQVF9ESVJfTTsKLQotCWNpLT5pcWRfcFtoZWFkeF0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKElOVF9FTVBUWV9FTlRSWSk7Ci0JRkxVU0hfTUVNX1dSSVRFKCk7Ci0KLQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfREVCVUcpIHsKLQkgICAgaWYgKGVyciAhPSAwKQotCQlwcl9pbmZvKCIgJTA4eCAtPiBlcnI6ICUyZCwiLCBjdXJySW50LCBlcnIpOwotCi0JICAgIHByX2luZm8oIisgaW50ZXJydXB0IGV2ZW50OiAlZCwgZ3JwOiAlZCwgY2hhbjogJTJkLCBzaWRlOiAlY1hcbiIsCi0JCSAgICBldmVudCwgZ3JvdXAsIGdjaGFuLCB0eCA/ICdUJyA6ICdSJyk7Ci0JfQotCXBpID0gJmNpLT5wb3J0W2dyb3VwXTsgICAgICAvKiBub3RpY2UgdGhhdCBoZXJlIHdlIGFzc3VtZSAxLTEgZ3JvdXAgLQotCQkJCSAgICAgKiBwb3J0IG1hcHBpbmcgKi8KLQljaCA9IHBpLT5jaGFuW2djaGFuXTsKLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBFVkVfU0FDSzogICAgICAgICAgICAgIC8qIFNlcnZpY2UgUmVxdWVzdCBBY2tub3dsZWRnZSAqLwotCSAgICBpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfREVCVUcpIHsKLQkJdm9sYXRpbGUgdV9pbnQzMl90IHI7Ci0KLQkJciA9IHBjaV9yZWFkXzMyKCh1X2ludDMyX3QgKikgJnBpLT5yZWctPnNyZCk7Ci0JCXByX2luZm8oIi0gU0FDSyBjbWQ6ICUwOHggKGhkdz0gJTA4eClcbiIsIHBpLT5zcl9sYXN0LCByKTsKLQkgICAgfQotCSAgICBTRF9TRU1fR0lWRSgmcGktPnNyX3NlbV93YWl0KTsgICAgIC8qIHdha2UgdXAgd2FpdGluZyBwcm9jZXNzICovCi0JICAgIGJyZWFrOwotCWNhc2UgRVZFX0NIQUJUOiAgICAgLyogQ2hhbmdlIFRvIEFib3J0IENvZGUgKDB4N2UgLT4gMHhmZikgKi8KLQljYXNlIEVWRV9DSElDOiAgICAgICAgICAgICAgLyogQ2hhbmdlIFRvIElkbGUgQ29kZSAoMHhmZiAtPiAweDdlKSAqLwotCSAgICBicmVhazsKLQljYXNlIEVWRV9FT006ICAgICAgICAgICAgICAgLyogRW5kIE9mIE1lc3NhZ2UgKi8KLQljYXNlIEVWRV9FT0I6ICAgICAgICAgICAgICAgLyogRW5kIE9mIEJ1ZmZlciAoVHJhbnNwYXJlbnQgbW9kZSkgKi8KLQkgICAgaWYgKHR4KQotCQltdXN5Y2NfYmhfdHhfZW9tKHBpLCBnY2hhbik7Ci0JICAgIGVsc2UKLQkJbXVzeWNjX2JoX3J4X2VvbShwaSwgZ2NoYW4pOwotI2lmIDAKLQkgICAgYnJlYWs7Ci0jZWxzZQotCSAgICAvKgotCSAgICAgKiBNVVNZQ0MgSW50ZXJydXB0IERlc2NyaXB0b3Igc2VjdGlvbiBzdGF0ZXMgdGhhdCBFT0IgYW5kIEVPTQotCSAgICAgKiBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgTk9ORSBlcnJvciAoYXMgd2VsbCBhcyBvdGhlcnMpLiAgU28KLQkgICAgICogZHJvcCB0aHJ1IHRvIGNhdGNoIHRoaXMuLi4KLQkgICAgICovCi0jZW5kaWYKLQljYXNlIEVWRV9OT05FOgotCSAgICBpZiAoZXJyID09IEVSUl9TSFQpCi0JCWNoLT5zLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX1dBUk4pCi0JCXByX2luZm8oIiVzOiB1bmV4cGVjdGVkIGludGVycnVwdCBldmVudDogJWQsIGlxZFslZF06ICUwOHgsIHBvcnQ6ICVkXG4iLCBjaS0+ZGV2bmFtZSwKLQkJCWV2ZW50LCBoZWFkeCwgY3VyckludCwgZ3JvdXApOwotCSAgICBicmVhazsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIG9uIGV2ZW50ICovCi0KKwltcGlfdCAgICAgICpwaTsKKwltY2hfdCAgICAgICpjaDsKKwl1bnNpZ25lZCBpbnQgaW50Q250OworCXZvbGF0aWxlIHVfaW50MzJfdCBjdXJySW50ID0gMDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaGVhZHgsIHRhaWx4OworCWludCAgICAgICAgIHJlYWRDb3VudCwgbG9vcENvdW50OworCWludCAgICAgICAgIGdyb3VwLCBnY2hhbiwgZXZlbnQsIGVyciwgdHg7CisJdV9pbnQzMl90ICAgYmFkSW50ID0gSU5UX0VNUFRZX0VOVFJZOworCXVfaW50MzJfdCAgIGJhZEludDIgPSBJTlRfRU1QVFlfRU5UUlkyOwogCiAJLyoKLQkgKiBQZXIgTVVTWUNDIE1hbnVhbCwgU2VjdGlvbiA2LjQuOC4zIFtUcmFuc21pdCBFcnJvcnNdLCBUWCBlcnJvcnMKLQkgKiBhcmUgc2VydmljZS1hZmZlY3RpbmcgYW5kIHJlcXVpcmUgYWN0aW9uIHRvIHJlc3VtZSBub3JtYWwKLQkgKiBiaXQtbGV2ZWwgcHJvY2Vzc2luZy4KKwkgKiBIYXJkd2FyZSBub3QgYXZhaWxhYmxlLCBwb3RlbnRpYWwgaW50ZXJydXB0IGhhbmcuICBCdXQgc2luY2UgaW50ZXJydXB0CisJICogbWlnaHQgYmUgc2hhcmVkLCBqdXN0IHJldHVybi4KIAkgKi8KLQotCXN3aXRjaCAoZXJyKSB7Ci0JY2FzZSBFUlJfT05SOgotCSAgICAvKgotCSAgICAgKiBQZXIgTVVTWUNDIG1hbnVhbCwgU2VjdGlvbiAgNi40LjguMyBbVHJhbnNtaXQgRXJyb3JzXSwgdGhpcwotCSAgICAgKiBlcnJvciByZXF1aXJlcyBUcmFuc21pdCBjaGFubmVsIHJlYWN0aXZhdGlvbi4KLQkgICAgICoKLQkgICAgICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gIDYuNC44LjQgW1JlY2VpdmUgRXJyb3JzXSwgdGhpcyBlcnJvcgotCSAgICAgKiByZXF1aXJlcyBSZWNlaXZlIGNoYW5uZWwgcmVhY3RpdmF0aW9uLgotCSAgICAgKi8KLQkgICAgaWYgKHR4KSB7Ci0KLQkJLyoKLQkJICogVFggT05SIEVycm9yIG9ubHkgb2NjdXJzIHdoZW4gY2hhbm5lbCBpcyBjb25maWd1cmVkIGZvcgotCQkgKiBUcmFuc3BhcmVudCBNb2RlLiAgSG93ZXZlciwgdGhpcyBjb2RlIHdpbGwgY2F0Y2ggYW5kCi0JCSAqIHJlLWFjdGl2YXRlIG9uIEFOWSBUWCBPTlIgZXJyb3IuCi0JCSAqLwotCi0JCS8qCi0JCSAqIFNldCBmbGFnIHRvIHJlLWVuYWJsZSBvbiBhbnkgbmV4dCB0cmFuc21pdCBhdHRlbXB0LgotCQkgKi8KLQkJY2gtPmNoX3N0YXJ0X3R4ID0gQ0hfU1RBUlRfVFhfT05SOwotCi0JCXsKLSNpZmRlZiBSTERfVFJBTlNfREVCVUcKLQkJICAgIGlmICgxIHx8IGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCi0jZWxzZQotCQkgICAgaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCi0jZW5kaWYKLQkJICAgIHsKLQkJCXByX2luZm8oIiVzOiBUWCBidWZmZXIgdW5kZXJmbG93IFtPTlJdIG9uIGNoYW5uZWwgJWQsIG1vZGUgJXggUVN0b3BwZWQgJXggZnJlZSAlZFxuIiwKLQkJCQljaS0+ZGV2bmFtZSwgY2gtPmNoYW5udW0sIGNoLT5wLmNoYW5fbW9kZSwgc2RfcXVldWVfc3RvcHBlZChjaC0+dXNlciksIGNoLT50eGRfZnJlZSk7Ci0jaWZkZWYgUkxEX0RFQlVHCi0JCQlpZiAoY2gtPnAuY2hhbl9tb2RlID09IDIpIHsgICAgIC8qIHByb2JsZW0gPSBPTlIgb24gSERMQwotCQkJCQkJCSAqIG1vZGUgKi8KLQkJCSAgICBwcl9pbmZvKCIrKyBGYWlsZWQgTGFzdCAleCBOZXh0ICV4IFFTdG9wcGVkICV4LCBzdGFydF90eCAleCB0eF9mdWxsICVkIHR4ZF9mcmVlICVkIG1vZGUgJXhcbiIsCi0JCQkJICAgICh1X2ludDMyX3QpIGNoLT50eGRfaXJxX3NydiwgKHVfaW50MzJfdCkgY2gtPnR4ZF91c3JfYWRkLAotCQkJCSAgICBzZF9xdWV1ZV9zdG9wcGVkKGNoLT51c2VyKSwKLQkJCQkgICAgY2gtPmNoX3N0YXJ0X3R4LCBjaC0+dHhfZnVsbCwgY2gtPnR4ZF9mcmVlLCBjaC0+cC5jaGFuX21vZGUpOwotCQkJICAgIG11c3ljY19kdW1wX3R4YnVmZmVyX3JpbmcoY2gsIDApOwotCQkJfQotI2VuZGlmCi0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgIC8qIFJYIGJ1ZmZlciBvdmVycnVuICovCi0JCS8qCi0JCSAqIFBlciBNVVNZQ0MgbWFudWFsLCBTZWN0aW9uIDYuNC44LjQgW1JlY2VpdmUgRXJyb3JzXSwKLQkJICogY2hhbm5lbCByZWNvdmVyeSBmb3IgdGhpcyBSWCBPTlIgZXJyb3IgSVMgcmVxdWlyZWQuICBJdCBpcwotCQkgKiBhbHNvIHN1Z2dlc3RlZCB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVycwotCQkgKiBmb3IgdGhpcyBjaGFubmVsLiAgUmVjZWl2ZSBjaGFubmVsIHJlYWN0aXZhdGlvbiBJUwotCQkgKiByZXF1aXJlZCwgYW5kIGRhdGEgaGFzIGJlZW4gbG9zdC4KLQkJICovCi0JCWNoLT5zLnJ4X292ZXJfZXJyb3JzKys7Ci0JCWNoLT5jaF9zdGFydF9yeCA9IENIX1NUQVJUX1JYX09OUjsKLQotCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfV0FSTikgewotCQkgICAgcHJfaW5mbygiJXM6IFJYIGJ1ZmZlciBvdmVyZmxvdyBbT05SXSBvbiBjaGFubmVsICVkLCBtb2RlICV4XG4iLAotCQkJICAgIGNpLT5kZXZuYW1lLCBjaC0+Y2hhbm51bSwgY2gtPnAuY2hhbl9tb2RlKTsKLQkJICAgIC8vbXVzeWNjX2R1bXBfcnhidWZmZXJfcmluZyAoY2gsIDApOyAgICAgICAgLyogUkxEIERFQlVHICovCi0JCX0KLQkgICAgfQotCSAgICBtdXN5Y2NfY2hhbl9yZXN0YXJ0KGNoKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBFUlJfQlVGOgotCSAgICBpZiAodHgpIHsKLQkJY2gtPnMudHhfZmlmb19lcnJvcnMrKzsKLQkJY2gtPmNoX3N0YXJ0X3R4ID0gQ0hfU1RBUlRfVFhfQlVGOwotCQkvKgotCQkgKiBQZXIgTVVTWUNDIG1hbnVhbCwgU2VjdGlvbiAgNi40LjguMyBbVHJhbnNtaXQgRXJyb3JzXSwKLQkJICogdGhpcyBCVUZGIGVycm9yIHJlcXVpcmVzIFRyYW5zbWl0IGNoYW5uZWwgcmVhY3RpdmF0aW9uLgotCQkgKi8KLQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCi0JCSAgICBwcl9pbmZvKCIlczogVFggYnVmZmVyIHVuZGVycnVuIFtCVUZGXSBvbiBjaGFubmVsICVkLCBtb2RlICV4XG4iLAotCQkJICAgIGNpLT5kZXZuYW1lLCBjaC0+Y2hhbm51bSwgY2gtPnAuY2hhbl9tb2RlKTsKLQkgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgIC8qIFJYIGJ1ZmZlciBvdmVycnVuICovCi0JCWNoLT5zLnJ4X292ZXJfZXJyb3JzKys7Ci0JCS8qCi0JCSAqIFBlciBNVVNZQ0MgbWFudWFsLCBTZWN0aW9uIDYuNC44LjQgW1JlY2VpdmUgRXJyb3JzXSwgSERMQwotCQkgKiBtb2RlIHJlcXVpcmVzIE5PIHJlY292ZXJ5IGZvciB0aGlzIFJYIEJVRkYgZXJyb3IgaXMKLQkJICogcmVxdWlyZWQuICBJdCBpcyBzdWdnZXN0ZWQgdG8gaW5jcmVhc2UgdGhlIEZJRk8gYnVmZmVyCi0JCSAqIHNwYWNlIGZvciB0aGlzIGNoYW5uZWwuICBSZWNlaXZlIGNoYW5uZWwgcmVhY3RpdmF0aW9uIGlzCi0JCSAqIG5vdCByZXF1aXJlZCwgYnV0IGRhdGEgaGFzIGJlZW4gbG9zdC4KLQkJICovCi0JCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19XQVJOKQotCQkgICAgcHJfaW5mbygiJXM6IFJYIGJ1ZmZlciBvdmVycnVuIFtCVUZGXSBvbiBjaGFubmVsICVkLCBtb2RlICV4XG4iLAotCQkJICAgIGNpLT5kZXZuYW1lLCBjaC0+Y2hhbm51bSwgY2gtPnAuY2hhbl9tb2RlKTsKLQkJLyoKLQkJICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gNi40LjkuNCBbUmVjZWl2ZSBFcnJvcnNdLAotCQkgKiBUcmFuc3BhcmVudCBtb2RlIERPRVMgcmVxdWlyZSByZWNvdmVyeSBmb3IgdGhlIFJYIEJVRkYKLQkJICogZXJyb3IuICBJdCBpcyBzdWdnZXN0ZWQgdG8gaW5jcmVhc2UgdGhlIEZJRk8gYnVmZmVyIHNwYWNlCi0JCSAqIGZvciB0aGlzIGNoYW5uZWwuICBSZWNlaXZlIGNoYW5uZWwgcmVhY3RpdmF0aW9uIElTCi0JCSAqIHJlcXVpcmVkIGFuZCBkYXRhIGhhcyBiZWVuIGxvc3QuCi0JCSAqLwotCQlpZiAoY2gtPnAuY2hhbl9tb2RlID09IENGR19DSF9QUk9UT19UUkFOUykKLQkJICAgIGNoLT5jaF9zdGFydF9yeCA9IENIX1NUQVJUX1JYX0JVRjsKLQkgICAgfQotCi0JICAgIGlmICh0eCB8fCAoY2gtPnAuY2hhbl9tb2RlID09IENGR19DSF9QUk9UT19UUkFOUykpCi0JCW11c3ljY19jaGFuX3Jlc3RhcnQoY2gpOwotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIG9uIGVyciAqLwotCi0JLyogQ2hlY2sgZm9yIGludGVycnVwdCBsb3N0IGNvbmRpdGlvbiAqLwotCWlmICgoY3VyckludCAmIElOVFJQVF9JTE9TVF9NKSAmJiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfRVJST1IpKQotCSAgICBwcl9pbmZvKCIlczogSW50ZXJydXB0IHF1ZXVlIG92ZXJmbG93IC0gSUxPU1QgYXNzZXJ0ZWRcbiIsCi0JCSAgICBjaS0+ZGV2bmFtZSk7Ci0JY2ktPmlxcF9oZWFkeCA9IChoZWFkeCArIDEpICYgKElOVF9RVUVVRV9TSVpFIC0gMSk7ICAgICAvKiBpbnN1cmUgd3JhcG5lc3MgKi8KLQlGTFVTSF9NRU1fV1JJVEUoKTsKLQlGTFVTSF9NRU1fUkVBRCgpOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpbGUgKi8KLSAgICBpZiAoKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKSAmJiAoY2ktPmlxcF9oZWFkeCAhPSBjaS0+aXFwX3RhaWx4KSkgewotCWludCAgICAgICAgIGJoOwotCi0JYmggPSBhdG9taWNfcmVhZCgmQ0ktPmJoX3BlbmRpbmcpOwotCXByX2luZm8oIl9iaF86IGxhdGUgYXJyaXZhbHMsIGhlYWQgJWQgIT0gdGFpbCAlZCwgcGVuZGluZyAlZFxuIiwKLQkJY2ktPmlxcF9oZWFkeCwgY2ktPmlxcF90YWlseCwgYmgpOwotICAgIH0KKwlpZiAoKGRydnJfc3RhdGUgIT0gU0JFX0RSVlJfQVZBSUxBQkxFKSB8fCAoY2ktPnN0YXRlID09IENfSU5JVCkpIHsKICNpZiBkZWZpbmVkKFNCRV9JU1JfSU1NRURJQVRFKQotICAgIHJldHVybiAwTDsKKwkJcmV0dXJuIDBMOworI2Vsc2UKKwkJcmV0dXJuOwogI2VuZGlmCi0gICAgLyogZWxzZSwgbm90aGluZyByZXR1cm5lZCAqLworCX0KKyNpZiBkZWZpbmVkKFNCRV9JU1JfVEFTS0xFVCkgfHwgZGVmaW5lZChTQkVfSVNSX0lNTUVESUFURSkKKwlpZiAoZHJ2cl9zdGF0ZSAhPSBTQkVfRFJWUl9BVkFJTEFCTEUpIHsKKyNpZiBkZWZpbmVkKFNCRV9JU1JfVEFTS0xFVCkKKwkJcmV0dXJuOworI2VsaWYgZGVmaW5lZChTQkVfSVNSX0lNTUVESUFURSkKKwkJcmV0dXJuIDBMOworI2VuZGlmCisJfQorI2VsaWYgZGVmaW5lZChTQkVfSVNSX0lOTElORSkKKwkvKiBubyBzZW1hcGhvcmUgdGFrZW4sIG5vIGRvdWJsZSBjaGVja3MgKi8KKyNlbmRpZgorCisJY2ktPmludGxvZy5kcnZyX2ludHJfYmhjb3VudCsrOworCUZMVVNIX01FTV9SRUFEKCk7CisJeworCQl1bnNpZ25lZCBpbnQgYmggPSBhdG9taWNfcmVhZCgmY2ktPmJoX3BlbmRpbmcpOworCisJCW1heF9iaCA9IG1heChiaCwgbWF4X2JoKTsKKwl9CisJYXRvbWljX3NldCgmY2ktPmJoX3BlbmRpbmcsIDApOy8qIGlmIGhlcmUsIG5vIGxvbmdlciBwZW5kaW5nICovCisJd2hpbGUgKChoZWFkeCA9IGNpLT5pcXBfaGVhZHgpICE9ICh0YWlseCA9IGNpLT5pcXBfdGFpbHgpKSB7CisJCWludENudCA9ICh0YWlseCA+PSBoZWFkeCkgPyAodGFpbHggLSBoZWFkeCkgOiAodGFpbHggLSBoZWFkeCArIElOVF9RVUVVRV9TSVpFKTsKKwkJY3VyckludCA9IGxlMzJfdG9fY3B1KGNpLT5pcWRfcFtoZWFkeF0pOworCisJCW1heF9pbnRjbnQgPSBtYXgoaW50Q250LCBtYXhfaW50Y250KTsgIC8qIFJMRCBERUJVRyAqLworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogSFcgQnVnIEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkvKiAtLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qIFRoZSBmb2xsb3dpbmcgY29kZSBjaGVja3MgZm9yIHRoZSBjb25kaXRpb24gICAgKi8KKwkJLyogb2YgaW50ZXJydXB0IGFzc2VydGlvbiBiZWZvcmUgaW50ZXJydXB0ICAgICAgICAqLworCQkvKiBxdWV1ZSB1cGRhdGUuICBUaGlzIGlzIGEgcHJvYmxlbSBvbiBzZXZlcmFsICAgICovCisJCS8qIFBDSS1Mb2NhbCBicmlkZ2UgY2hpcHMgZm91bmQgb24gc29tZSBwcm9kdWN0cy4gKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCXJlYWRDb3VudCA9IDA7CisJCWlmICgoY3VyckludCA9PSBiYWRJbnQpIHx8IChjdXJySW50ID09IGJhZEludDIpKQorCQkJY2ktPmludGxvZy5kcnZyX2ludF9mYWlsdXJlKys7CisKKwkJd2hpbGUgKChjdXJySW50ID09IGJhZEludCkgfHwgKGN1cnJJbnQgPT0gYmFkSW50MikpIHsKKwkJCWZvciAobG9vcENvdW50ID0gMDsgbG9vcENvdW50IDwgMHgzMDsgbG9vcENvdW50KyspCisJCQkJLyogdXNlIGNhbGwgdG8gYXZvaWQgb3B0aW1pemF0aW9uCisJCQkJICogcmVtb3ZhbCBvZiBkdW1teSBkZWxheQorCQkJCSAqLworCQkJCU9TX3V3YWl0X2R1bW15KCk7CisJCQlGTFVTSF9NRU1fUkVBRCgpOworCQkJY3VyckludCA9IGxlMzJfdG9fY3B1KGNpLT5pcWRfcFtoZWFkeF0pOworCQkJaWYgKHJlYWRDb3VudCsrID4gMjApCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBjYXRjaCBmYWlsdXJlIG9mIEJ1ZyBGaXggY2hlY2tpbmcgKi8KKwkJaWYgKChjdXJySW50ID09IGJhZEludCkgfHwgKGN1cnJJbnQgPT0gYmFkSW50MikpIHsKKwkJCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19XQVJOKQorCQkJCXByX2luZm8oIiVzOiBJbGxlZ2FsIEludGVycnVwdCBEZXRlY3RlZCBAIDB4JXAsIG1vZCAlZC4pXG4iLAorCQkJCQljaS0+ZGV2bmFtZSwgJmNpLT5pcWRfcFtoZWFkeF0sIGhlYWR4KTsKKworCQkJLyoKKwkJCSAqIElmIHRoZSBkZXNjcmlwdG9yIGhhcyBub3QgcmVjb3ZlcmVkLCB0aGVuIGxlYXZpbmcgdGhlIEVNUFRZCisJCQkgKiBlbnRyeSBzZXQgd2lsbCBub3Qgc2lnbmFsIHRvIHRoZSBNVVNZQ0MgdGhhdCB0aGlzIGRlc2NyaXB0b3IKKwkJCSAqIGhhcyBiZWVuIHNlcnZpY2VkLiBUaGUgSW50ZXJydXB0IFF1ZXVlIGNhbiB0aGVuIHN0YXJ0IGxvc2luZworCQkJICogYXZhaWxhYmxlIGRlc2NyaXB0b3JzIGFuZCBNVVNZQ0MgZXZlbnR1YWxseSBlbmNvdW50ZXJzIGFuZAorCQkJICogcmVwb3J0cyB0aGUgSU5URlVMTCBjb25kaXRpb24uICBQZXIgbWFudWFsLCBjaGFuZ2luZyBhbnkgYml0CisJCQkgKiBtYXJrcyBkZXNjcmlwdG9yIGFzIGF2YWlsYWJsZSwgdGh1cyB0aGUgdXNlIG9mIGRpZmZlcmVudAorCQkJICogRU1QVFlfRU5UUlkgdmFsdWVzLgorCQkJICovCisKKwkJCWlmIChjdXJySW50ID09IGJhZEludCkKKwkJCQljaS0+aXFkX3BbaGVhZHhdID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihJTlRfRU1QVFlfRU5UUlkyKTsKKwkJCWVsc2UKKwkJCQljaS0+aXFkX3BbaGVhZHhdID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihJTlRfRU1QVFlfRU5UUlkpOworCQkJLyogaW5zdXJlIHdyYXBuZXNzICovCisJCQljaS0+aXFwX2hlYWR4ID0gKGhlYWR4ICsgMSkgJiAoSU5UX1FVRVVFX1NJWkUgLSAxKTsKKwkJCUZMVVNIX01FTV9XUklURSgpOworCQkJRkxVU0hfTUVNX1JFQUQoKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWdyb3VwID0gSU5UUlBUX0dSUChjdXJySW50KTsKKwkJZ2NoYW4gPSBJTlRSUFRfQ0goY3VyckludCk7CisJCWV2ZW50ID0gSU5UUlBUX0VWRU5UKGN1cnJJbnQpOworCQllcnIgPSBJTlRSUFRfRVJST1IoY3VyckludCk7CisJCXR4ID0gY3VyckludCAmIElOVFJQVF9ESVJfTTsKKworCQljaS0+aXFkX3BbaGVhZHhdID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihJTlRfRU1QVFlfRU5UUlkpOworCQlGTFVTSF9NRU1fV1JJVEUoKTsKKworCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfREVCVUcpIHsKKwkJCWlmIChlcnIgIT0gMCkKKwkJCQlwcl9pbmZvKCIgJTA4eCAtPiBlcnI6ICUyZCwiLCBjdXJySW50LCBlcnIpOworCisJCQlwcl9pbmZvKCIrIGludGVycnVwdCBldmVudDogJWQsIGdycDogJWQsIGNoYW46ICUyZCwgc2lkZTogJWNYXG4iLAorCQkJCWV2ZW50LCBncm91cCwgZ2NoYW4sIHR4ID8gJ1QnIDogJ1InKTsKKwkJfQorCQkvKiBub3RpY2UgdGhhdCBoZXJlIHdlIGFzc3VtZSAxLTEgZ3JvdXAgLSBwb3J0IG1hcHBpbmcgKi8KKwkJcGkgPSAmY2ktPnBvcnRbZ3JvdXBdOworCQljaCA9IHBpLT5jaGFuW2djaGFuXTsKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIEVWRV9TQUNLOiAgICAgICAgICAgICAgLyogU2VydmljZSBSZXF1ZXN0IEFja25vd2xlZGdlICovCisJCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfREVCVUcpIHsKKwkJCQl2b2xhdGlsZSB1X2ludDMyX3QgcjsKKworCQkJCXIgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopICZwaS0+cmVnLT5zcmQpOworCQkJCXByX2luZm8oIi0gU0FDSyBjbWQ6ICUwOHggKGhkdz0gJTA4eClcbiIsCisJCQkJCXBpLT5zcl9sYXN0LCByKTsKKwkJCX0KKwkJCS8qIHdha2UgdXAgd2FpdGluZyBwcm9jZXNzICovCisJCQlTRF9TRU1fR0lWRSgmcGktPnNyX3NlbV93YWl0KTsKKwkJCWJyZWFrOworCQljYXNlIEVWRV9DSEFCVDogLyogQ2hhbmdlIFRvIEFib3J0IENvZGUgKDB4N2UgLT4gMHhmZikgKi8KKwkJY2FzZSBFVkVfQ0hJQzogIC8qIENoYW5nZSBUbyBJZGxlIENvZGUgKDB4ZmYgLT4gMHg3ZSkgKi8KKwkJCWJyZWFrOworCQljYXNlIEVWRV9FT006ICAgLyogRW5kIE9mIE1lc3NhZ2UgKi8KKwkJY2FzZSBFVkVfRU9COiAgIC8qIEVuZCBPZiBCdWZmZXIgKFRyYW5zcGFyZW50IG1vZGUpICovCisJCQlpZiAodHgpCisJCQkJbXVzeWNjX2JoX3R4X2VvbShwaSwgZ2NoYW4pOworCQkJZWxzZQorCQkJCW11c3ljY19iaF9yeF9lb20ocGksIGdjaGFuKTsKKwkJCS8qCisJCQkgKiBNVVNZQ0MgSW50ZXJydXB0IERlc2NyaXB0b3Igc2VjdGlvbiBzdGF0ZXMgdGhhdCBFT0IgYW5kIEVPTQorCQkJICogY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIE5PTkUgZXJyb3IgKGFzIHdlbGwgYXMgb3RoZXJzKS4gIFNvCisJCQkgKiBkcm9wIHRocnUgdG8gY2F0Y2ggdGhpcy4uLgorCQkJICovCisJCWNhc2UgRVZFX05PTkU6CisJCQlpZiAoZXJyID09IEVSUl9TSFQpCisJCQkJY2gtPnMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfV0FSTikKKwkJCQlwcl9pbmZvKCIlczogdW5leHBlY3RlZCBpbnRlcnJ1cHQgZXZlbnQ6ICVkLCBpcWRbJWRdOiAlMDh4LCBwb3J0OiAlZFxuIiwgY2ktPmRldm5hbWUsCisJCQkJCWV2ZW50LCBoZWFkeCwgY3VyckludCwgZ3JvdXApOworCQkJYnJlYWs7CisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggb24gZXZlbnQgKi8KKworCisJCS8qCisJCSAqIFBlciBNVVNZQ0MgTWFudWFsLCBTZWN0aW9uIDYuNC44LjMgW1RyYW5zbWl0IEVycm9yc10sIFRYIGVycm9ycworCQkgKiBhcmUgc2VydmljZS1hZmZlY3RpbmcgYW5kIHJlcXVpcmUgYWN0aW9uIHRvIHJlc3VtZSBub3JtYWwKKwkJICogYml0LWxldmVsIHByb2Nlc3NpbmcuCisJCSAqLworCisJCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgRVJSX09OUjoKKwkJCS8qCisJCQkgKiBQZXIgTVVTWUNDIG1hbnVhbCwgU2VjdGlvbiAgNi40LjguMyBbVHJhbnNtaXQgRXJyb3JzXSwgdGhpcworCQkJICogZXJyb3IgcmVxdWlyZXMgVHJhbnNtaXQgY2hhbm5lbCByZWFjdGl2YXRpb24uCisJCQkgKgorCQkJICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gIDYuNC44LjQgW1JlY2VpdmUgRXJyb3JzXSwgdGhpcyBlcnJvcgorCQkJICogcmVxdWlyZXMgUmVjZWl2ZSBjaGFubmVsIHJlYWN0aXZhdGlvbi4KKwkJCSAqLworCQkJaWYgKHR4KSB7CisKKwkJCQkvKgorCQkJCSAqIFRYIE9OUiBFcnJvciBvbmx5IG9jY3VycyB3aGVuIGNoYW5uZWwgaXMgY29uZmlndXJlZCBmb3IKKwkJCQkgKiBUcmFuc3BhcmVudCBNb2RlLiAgSG93ZXZlciwgdGhpcyBjb2RlIHdpbGwgY2F0Y2ggYW5kCisJCQkJICogcmUtYWN0aXZhdGUgb24gQU5ZIFRYIE9OUiBlcnJvci4KKwkJCQkgKi8KKworCQkJCS8qCisJCQkJICogU2V0IGZsYWcgdG8gcmUtZW5hYmxlIG9uIGFueSBuZXh0IHRyYW5zbWl0IGF0dGVtcHQuCisJCQkJICovCisJCQkJY2gtPmNoX3N0YXJ0X3R4ID0gQ0hfU1RBUlRfVFhfT05SOworCisjaWZkZWYgUkxEX1RSQU5TX0RFQlVHCisJCQkJaWYgKDEgfHwgY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUikKKyNlbHNlCisJCQkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCisjZW5kaWYKKwkJCQl7CisJCQkJCXByX2luZm8oIiVzOiBUWCBidWZmZXIgdW5kZXJmbG93IFtPTlJdIG9uIGNoYW5uZWwgJWQsIG1vZGUgJXggUVN0b3BwZWQgJXggZnJlZSAlZFxuIiwKKwkJCQkJCWNpLT5kZXZuYW1lLCBjaC0+Y2hhbm51bSwKKwkJCQkJCWNoLT5wLmNoYW5fbW9kZSwKKwkJCQkJCXNkX3F1ZXVlX3N0b3BwZWQoY2gtPnVzZXIpLAorCQkJCQkJY2gtPnR4ZF9mcmVlKTsKKyNpZmRlZiBSTERfREVCVUcKKwkJCQkJLyogcHJvYmxlbSA9IE9OUiBvbiBIRExDIG1vZGUgKi8KKwkJCQkJaWYgKGNoLT5wLmNoYW5fbW9kZSA9PSAyKSB7CisJCQkJCQlwcl9pbmZvKCIrKyBGYWlsZWQgTGFzdCAleCBOZXh0ICV4IFFTdG9wcGVkICV4LCBzdGFydF90eCAleCB0eF9mdWxsICVkIHR4ZF9mcmVlICVkIG1vZGUgJXhcbiIsCisJCQkJCQkJKHVfaW50MzJfdCljaC0+dHhkX2lycV9zcnYsCisJCQkJCQkJKHVfaW50MzJfdCljaC0+dHhkX3Vzcl9hZGQsCisJCQkJCQkJc2RfcXVldWVfc3RvcHBlZChjaC0+dXNlciksCisJCQkJCQkJY2gtPmNoX3N0YXJ0X3R4LAorCQkJCQkJCWNoLT50eF9mdWxsLAorCQkJCQkJCWNoLT50eGRfZnJlZSwKKwkJCQkJCQljaC0+cC5jaGFuX21vZGUpOworCQkJCQkJbXVzeWNjX2R1bXBfdHhidWZmZXJfcmluZyhjaCwgMCk7CisJCQkJCX0KKyNlbmRpZgorCQkJCX0KKwkJCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAvKiBSWCBidWZmZXIgb3ZlcnJ1biAqLworCQkJCS8qCisJCQkJICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gNi40LjguNCBbUmVjZWl2ZSBFcnJvcnNdLAorCQkJCSAqIGNoYW5uZWwgcmVjb3ZlcnkgZm9yIHRoaXMgUlggT05SIGVycm9yIElTIHJlcXVpcmVkLiAgSXQgaXMKKwkJCQkgKiBhbHNvIHN1Z2dlc3RlZCB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVycworCQkJCSAqIGZvciB0aGlzIGNoYW5uZWwuICBSZWNlaXZlIGNoYW5uZWwgcmVhY3RpdmF0aW9uIElTCisJCQkJICogcmVxdWlyZWQsIGFuZCBkYXRhIGhhcyBiZWVuIGxvc3QuCisJCQkJICovCisJCQkJY2gtPnMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQljaC0+Y2hfc3RhcnRfcnggPSBDSF9TVEFSVF9SWF9PTlI7CisKKwkJCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfV0FSTikgeworCQkJCQlwcl9pbmZvKCIlczogUlggYnVmZmVyIG92ZXJmbG93IFtPTlJdIG9uIGNoYW5uZWwgJWQsIG1vZGUgJXhcbiIsCisJCQkJCQljaS0+ZGV2bmFtZSwgY2gtPmNoYW5udW0sCisJCQkJCQljaC0+cC5jaGFuX21vZGUpOworI2lmZGVmIFJMRF9ERUJVRworCQkJCQltdXN5Y2NfZHVtcF9yeGJ1ZmZlcl9yaW5nKGNoLCAwKTsKKyNlbmRpZgorCQkJCX0KKwkJCX0KKwkJCW11c3ljY19jaGFuX3Jlc3RhcnQoY2gpOworCQkJYnJlYWs7CisJCWNhc2UgRVJSX0JVRjoKKwkJCWlmICh0eCkgeworCQkJCWNoLT5zLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJY2gtPmNoX3N0YXJ0X3R4ID0gQ0hfU1RBUlRfVFhfQlVGOworCQkJCS8qCisJCQkJICogUGVyIE1VU1lDQyBtYW51YWwsIFNlY3Rpb24gIDYuNC44LjMgW1RyYW5zbWl0IEVycm9yc10sCisJCQkJICogdGhpcyBCVUZGIGVycm9yIHJlcXVpcmVzIFRyYW5zbWl0IGNoYW5uZWwgcmVhY3RpdmF0aW9uLgorCQkJCSAqLworCQkJCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SKQorCQkJCQlwcl9pbmZvKCIlczogVFggYnVmZmVyIHVuZGVycnVuIFtCVUZGXSBvbiBjaGFubmVsICVkLCBtb2RlICV4XG4iLAorCQkJCQkJY2ktPmRldm5hbWUsIGNoLT5jaGFubnVtLAorCQkJCQkJY2gtPnAuY2hhbl9tb2RlKTsKKwkJCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAvKiBSWCBidWZmZXIgb3ZlcnJ1biAqLworCQkJCWNoLT5zLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJLyoKKwkJCQkgKiBQZXIgTVVTWUNDIG1hbnVhbCwgU2VjdGlvbiA2LjQuOC40IFtSZWNlaXZlIEVycm9yc10sIEhETEMKKwkJCQkgKiBtb2RlIHJlcXVpcmVzIE5PIHJlY292ZXJ5IGZvciB0aGlzIFJYIEJVRkYgZXJyb3IgaXMKKwkJCQkgKiByZXF1aXJlZC4gIEl0IGlzIHN1Z2dlc3RlZCB0byBpbmNyZWFzZSB0aGUgRklGTyBidWZmZXIKKwkJCQkgKiBzcGFjZSBmb3IgdGhpcyBjaGFubmVsLiAgUmVjZWl2ZSBjaGFubmVsIHJlYWN0aXZhdGlvbiBpcworCQkJCSAqIG5vdCByZXF1aXJlZCwgYnV0IGRhdGEgaGFzIGJlZW4gbG9zdC4KKwkJCQkgKi8KKwkJCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfV0FSTikKKwkJCQkJcHJfaW5mbygiJXM6IFJYIGJ1ZmZlciBvdmVycnVuIFtCVUZGXSBvbiBjaGFubmVsICVkLCBtb2RlICV4XG4iLAorCQkJCQkJY2ktPmRldm5hbWUsIGNoLT5jaGFubnVtLAorCQkJCQkJY2gtPnAuY2hhbl9tb2RlKTsKKwkJCQkvKgorCQkJCSAqIFBlciBNVVNZQ0MgbWFudWFsLCBTZWN0aW9uIDYuNC45LjQgW1JlY2VpdmUgRXJyb3JzXSwKKwkJCQkgKiBUcmFuc3BhcmVudCBtb2RlIERPRVMgcmVxdWlyZSByZWNvdmVyeSBmb3IgdGhlIFJYIEJVRkYKKwkJCQkgKiBlcnJvci4gIEl0IGlzIHN1Z2dlc3RlZCB0byBpbmNyZWFzZSB0aGUgRklGTyBidWZmZXIgc3BhY2UKKwkJCQkgKiBmb3IgdGhpcyBjaGFubmVsLiAgUmVjZWl2ZSBjaGFubmVsIHJlYWN0aXZhdGlvbiBJUworCQkJCSAqIHJlcXVpcmVkIGFuZCBkYXRhIGhhcyBiZWVuIGxvc3QuCisJCQkJICovCisJCQkJaWYgKGNoLT5wLmNoYW5fbW9kZSA9PSBDRkdfQ0hfUFJPVE9fVFJBTlMpCisJCQkJCWNoLT5jaF9zdGFydF9yeCA9IENIX1NUQVJUX1JYX0JVRjsKKwkJCX0KKworCQkJaWYgKHR4IHx8IChjaC0+cC5jaGFuX21vZGUgPT0gQ0ZHX0NIX1BST1RPX1RSQU5TKSkKKwkJCQltdXN5Y2NfY2hhbl9yZXN0YXJ0KGNoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggb24gZXJyICovCisKKwkJLyogQ2hlY2sgZm9yIGludGVycnVwdCBsb3N0IGNvbmRpdGlvbiAqLworCQlpZiAoKGN1cnJJbnQgJiBJTlRSUFRfSUxPU1RfTSkgJiYKKwkJICAgIChjeHQxZTFfbG9nX2xldmVsID49IExPR19FUlJPUikpCisJCQlwcl9pbmZvKCIlczogSW50ZXJydXB0IHF1ZXVlIG92ZXJmbG93IC0gSUxPU1QgYXNzZXJ0ZWRcbiIsCisJCQkJY2ktPmRldm5hbWUpOworCQkvKiBpbnN1cmUgd3JhcG5lc3MgKi8KKwkJY2ktPmlxcF9oZWFkeCA9IChoZWFkeCArIDEpICYgKElOVF9RVUVVRV9TSVpFIC0gMSk7CisJCUZMVVNIX01FTV9XUklURSgpOworCQlGTFVTSF9NRU1fUkVBRCgpOworCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpbGUgKi8KKwlpZiAoKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKSAmJgorCSAgICAoY2ktPmlxcF9oZWFkeCAhPSBjaS0+aXFwX3RhaWx4KSkgeworCQlpbnQgICAgICAgICBiaDsKKworCQliaCA9IGF0b21pY19yZWFkKCZDSS0+YmhfcGVuZGluZyk7CisJCXByX2luZm8oIl9iaF86IGxhdGUgYXJyaXZhbHMsIGhlYWQgJWQgIT0gdGFpbCAlZCwgcGVuZGluZyAlZFxuIiwKKwkJCWNpLT5pcXBfaGVhZHgsIGNpLT5pcXBfdGFpbHgsIGJoKTsKKwl9CisjaWYgZGVmaW5lZChTQkVfSVNSX0lNTUVESUFURSkKKwlyZXR1cm4gMEw7CisjZW5kaWYKKwkvKiBlbHNlLCBub3RoaW5nIHJldHVybmVkICovCiB9CiAKLSNpZiAwCi1pbnQgICAgICAgICBfX2luaXQKLW11c3ljY19uZXdfY2hhbihjaV90ICpjaSwgaW50IGNoYW5udW0sIHZvaWQgKnVzZXIpCi17Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0KLSAgICBjaCA9IGNpLT5wb3J0W2NoYW5udW0gLyBNVVNZQ0NfTkNIQU5TXS5jaGFuW2NoYW5udW0gJSBNVVNZQ0NfTkNIQU5TXTsKLQotICAgIGlmIChjaC0+c3RhdGUgIT0gVU5BU1NJR05FRCkKLQlyZXR1cm4gRUVYSVNUOwotICAgIC8qIE5PVEU6IG1jaF90IGFscmVhZHkgY2xlYXJlZCBkdXJpbmcgT1Nfa21hbGxvYygpICovCi0gICAgY2gtPnN0YXRlID0gRE9XTjsKLSAgICBjaC0+dXNlciA9IHVzZXI7Ci0jaWYgMAotICAgIGNoLT5zdGF0dXMgPSAwOwotICAgIGNoLT5wLnN0YXR1cyA9IDA7Ci0gICAgY2gtPnAuaW50cl9tYXNrID0gMDsKLSNlbmRpZgotICAgIGNoLT5wLmNoYW5fbW9kZSA9IENGR19DSF9QUk9UT19IRExDX0ZDUzE2OwotICAgIGNoLT5wLmlkbGVjb2RlID0gQ0ZHX0NIX0ZMQUdfN0U7Ci0gICAgY2gtPnAucGFkX2ZpbGxfY291bnQgPSAyOwotICAgIHNwaW5fbG9ja19pbml0KCZjaC0+Y2hfcnhsb2NrKTsKLSAgICBzcGluX2xvY2tfaW5pdCgmY2gtPmNoX3R4bG9jayk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KICNpZmRlZiBTQkVfUE1DQzRfRU5BQkxFCi1zdGF0dXNfdAorCXN0YXR1c190CiBtdXN5Y2NfY2hhbl9kb3duKGNpX3QgKmR1bW15LCBpbnQgY2hhbm51bSkKIHsKLSAgICBtcGlfdCAgICAgICpwaTsKLSAgICBtY2hfdCAgICAgICpjaDsKLSAgICBpbnQgICAgICAgICBpLCBnY2hhbjsKKwltcGlfdCAgICAgICpwaTsKKwltY2hfdCAgICAgICpjaDsKKwlpbnQgICAgICAgICBpLCBnY2hhbjsKIAotICAgIGNoID0gc2RfZmluZF9jaGFuKGR1bW15LCBjaGFubnVtKTsKLSAgICBpZiAoIWNoKQotCXJldHVybiAtRUlOVkFMOwotICAgIHBpID0gY2gtPnVwOwotICAgIGdjaGFuID0gY2gtPmdjaGFuOworCWNoID0gc2RfZmluZF9jaGFuKGR1bW15LCBjaGFubnVtKTsKKwlpZiAoIWNoKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwaSA9IGNoLT51cDsKKwlnY2hhbiA9IGNoLT5nY2hhbjsKIAotICAgIC8qIERlYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KLSAgICBtdXN5Y2Nfc2Vydl9yZXEocGksIFNSX0NIQU5ORUxfREVBQ1RJVkFURSB8IFNSX1JYX0RJUkVDVElPTiB8IGdjaGFuKTsKLSAgICBjaC0+Y2hfc3RhcnRfcnggPSAwOwotICAgIG11c3ljY19zZXJ2X3JlcShwaSwgU1JfQ0hBTk5FTF9ERUFDVElWQVRFIHwgU1JfVFhfRElSRUNUSU9OIHwgZ2NoYW4pOwotICAgIGNoLT5jaF9zdGFydF90eCA9IDA7CisJLyogRGVhY3RpdmF0ZSB0aGUgY2hhbm5lbCAqLworCW11c3ljY19zZXJ2X3JlcShwaSwgU1JfQ0hBTk5FTF9ERUFDVElWQVRFIHwgU1JfUlhfRElSRUNUSU9OIHwgZ2NoYW4pOworCWNoLT5jaF9zdGFydF9yeCA9IDA7CisJbXVzeWNjX3NlcnZfcmVxKHBpLCBTUl9DSEFOTkVMX0RFQUNUSVZBVEUgfCBTUl9UWF9ESVJFQ1RJT04gfCBnY2hhbik7CisJY2gtPmNoX3N0YXJ0X3R4ID0gMDsKIAotICAgIGlmIChjaC0+c3RhdGUgPT0gRE9XTikKKwlpZiAoY2gtPnN0YXRlID09IERPV04pCisJCXJldHVybiAwOworCWNoLT5zdGF0ZSA9IERPV047CisKKwlwaS0+cmVncmFtLT50aHBbZ2NoYW5dID0gMDsKKwlwaS0+cmVncmFtLT50bXBbZ2NoYW5dID0gMDsKKwlwaS0+cmVncmFtLT5yaHBbZ2NoYW5dID0gMDsKKwlwaS0+cmVncmFtLT5ybXBbZ2NoYW5dID0gMDsKKwlGTFVTSF9NRU1fV1JJVEUoKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2gtPnR4ZF9udW07IGkrKykKKwkJaWYgKGNoLT5tZHRbaV0ubWVtX3Rva2VuKQorCQkJT1NfbWVtX3Rva2VuX2ZyZWUoY2gtPm1kdFtpXS5tZW1fdG9rZW4pOworCisJZm9yIChpID0gMDsgaSA8IGNoLT5yeGRfbnVtOyBpKyspCisJCWlmIChjaC0+bWRyW2ldLm1lbV90b2tlbikKKwkJCU9TX21lbV90b2tlbl9mcmVlKGNoLT5tZHJbaV0ubWVtX3Rva2VuKTsKKworCWtmcmVlKGNoLT5tZHIpOworCWNoLT5tZHIgPSBOVUxMOworCWNoLT5yeGRfbnVtID0gMDsKKwlrZnJlZShjaC0+bWR0KTsKKwljaC0+bWR0ID0gTlVMTDsKKwljaC0+dHhkX251bSA9IDA7CisKKwltdXN5Y2NfdXBkYXRlX3RpbWVzbG90cyhwaSk7CisJYzRfZmlmb19mcmVlKHBpLCBjaC0+Z2NoYW4pOworCisJcGktPm9wZW5jaGFucy0tOwogCXJldHVybiAwOwotICAgIGNoLT5zdGF0ZSA9IERPV047Ci0KLSAgICBwaS0+cmVncmFtLT50aHBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT50bXBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT5yaHBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT5ybXBbZ2NoYW5dID0gMDsKLSAgICBGTFVTSF9NRU1fV1JJVEUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY2gtPnR4ZF9udW07IGkrKykKLQlpZiAoY2gtPm1kdFtpXS5tZW1fdG9rZW4pCi0JICAgIE9TX21lbV90b2tlbl9mcmVlKGNoLT5tZHRbaV0ubWVtX3Rva2VuKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBjaC0+cnhkX251bTsgaSsrKQotCWlmIChjaC0+bWRyW2ldLm1lbV90b2tlbikKLQkgICAgT1NfbWVtX3Rva2VuX2ZyZWUoY2gtPm1kcltpXS5tZW1fdG9rZW4pOwotCi0gICAgT1Nfa2ZyZWUoY2gtPm1kcik7Ci0gICAgY2gtPm1kciA9IE5VTEw7Ci0gICAgY2gtPnJ4ZF9udW0gPSAwOwotICAgIE9TX2tmcmVlKGNoLT5tZHQpOwotICAgIGNoLT5tZHQgPSBOVUxMOwotICAgIGNoLT50eGRfbnVtID0gMDsKLQotICAgIG11c3ljY191cGRhdGVfdGltZXNsb3RzKHBpKTsKLSAgICBjNF9maWZvX2ZyZWUocGksIGNoLT5nY2hhbik7Ci0KLSAgICBwaS0+b3BlbmNoYW5zLS07Ci0gICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotCi0jaWYgMAotLyogVE9ETzogZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdCBiZSBuZWVkZWQgYW5kIGNhbiBiZSByZW1vdmVkICovCi1pbnQKLW11c3ljY19kZWxfY2hhbihjaV90ICpjaSwgaW50IGNoYW5udW0pCi17Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0KLSAgICBpZiAoKGNoYW5udW0gPCAwKSB8fCAoY2hhbm51bSA+PSAoTVVTWUNDX05QT1JUUyAqIE1VU1lDQ19OQ0hBTlMpKSkgIC8qIHNhbml0eSBjaGsgcGFyYW0gKi8KLQlyZXR1cm4gRUNIUk5HOwotICAgIGNoID0gc2RfZmluZF9jaGFuKGNpLCBjaGFubnVtKTsKLSAgICBpZiAoIWNoKQotCXJldHVybiBFTk9FTlQ7Ci0gICAgaWYgKGNoLT5zdGF0ZSA9PSBVUCkKLQltdXN5Y2NfY2hhbl9kb3duKGNpLCBjaGFubnVtKTsKLSAgICBjaC0+c3RhdGUgPSBVTkFTU0lHTkVEOwotICAgIHJldHVybiAwOwotfQotCi0KLWludAotbXVzeWNjX2RlbF9jaGFuX3N0YXRzKGNpX3QgKmNpLCBpbnQgY2hhbm51bSkKLXsKLSAgICBtY2hfdCAgICAgICpjaDsKLQotICAgIGlmIChjaGFubnVtIDwgMCB8fCBjaGFubnVtID49IChNVVNZQ0NfTlBPUlRTICogTVVTWUNDX05DSEFOUykpICAgICAgLyogc2FuaXR5IGNoayBwYXJhbSAqLwotCXJldHVybiBFQ0hSTkc7Ci0gICAgY2ggPSBzZF9maW5kX2NoYW4oY2ksIGNoYW5udW0pOwotICAgIGlmICghY2gpCi0JcmV0dXJuIEVOT0VOVDsKLQotICAgIG1lbXNldCgmY2gtPnMsIDAsIHNpemVvZihzdHJ1Y3Qgc2JlY29tX2NoYW5fc3RhdHMpKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KIGludAogbXVzeWNjX3N0YXJ0X3htaXQoY2lfdCAqY2ksIGludCBjaGFubnVtLCB2b2lkICptZW1fdG9rZW4pCiB7Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0gICAgc3RydWN0IG1kZXNjICptZDsKLSAgICB2b2lkICAgICAgICptMjsKLSNpZiAwCi0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgotICAgIGludCAgICAgICAgIHR4ZF9uZWVkX2NudDsKLSAgICB1X2ludDMyX3QgICBsZW47CisJbWNoX3QgICAgICAqY2g7CisJc3RydWN0IG1kZXNjICptZDsKKwl2b2lkICAgICAgICptMjsKKwlpbnQgICAgICAgICB0eGRfbmVlZF9jbnQ7CisJdV9pbnQzMl90ICAgbGVuOwogCi0gICAgY2ggPSBzZF9maW5kX2NoYW4oY2ksIGNoYW5udW0pOwotICAgIGlmICghY2gpCi0JcmV0dXJuIC1FTk9FTlQ7CisJY2ggPSBzZF9maW5kX2NoYW4oY2ksIGNoYW5udW0pOworCWlmICghY2gpCisJCXJldHVybiAtRU5PRU5UOwogCi0gICAgaWYgKGNpLT5zdGF0ZSAhPSBDX1JVTk5JTkcpICAgICAvKiBmdWxsIGludGVycnVwdCBwcm9jZXNzaW5nIGF2YWlsYWJsZSAqLwotCXJldHVybiAtRUlOVkFMOwotICAgIGlmIChjaC0+c3RhdGUgIT0gVVApCi0JcmV0dXJuIC1FSU5WQUw7CisJLyogZnVsbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBhdmFpbGFibGUgKi8KKwlpZiAoY2ktPnN0YXRlICE9IENfUlVOTklORykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoLT5zdGF0ZSAhPSBVUCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAoIShjaC0+c3RhdHVzICYgVFhfRU5BQkxFRCkpCi0JcmV0dXJuIC1FUk9GUzsgICAgICAgICAgICAgICAvKiBob3cgZWxzZSB0byBmbGFnIHVud3JpdGFibGUgc3RhdGUgPyAqLworCS8qIGhvdyBlbHNlIHRvIGZsYWcgdW53cml0YWJsZSBzdGF0ZSA/ICovCisJaWYgKCEoY2gtPnN0YXR1cyAmIFRYX0VOQUJMRUQpKQorCQlyZXR1cm4gLUVST0ZTOwogCi0jaWZkZWYgUkxEX1RSQU5TX0RFQlVHeAotICAgIGlmICgxIHx8IGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKQorI2lmZGVmIFJMRF9UUkFOU19ERUJVRworCWlmICgxIHx8IGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IyKQogI2Vsc2UKLSAgICBpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUjIpCi0jZW5kaWYKLSAgICB7Ci0JcHJfaW5mbygiKysgc3RhcnRfeG10WyVkXTogc3RhdGUgJXggc3RhcnQgJXggZnVsbCAlZCBmcmVlICVkIHJlcXVpcmVkICVkIHN0b3BwZWQgJXhcbiIsCi0JCWNoYW5udW0sIGNoLT5zdGF0ZSwgY2gtPmNoX3N0YXJ0X3R4LCBjaC0+dHhfZnVsbCwKLQkJY2gtPnR4ZF9mcmVlLCBjaC0+dHhkX3JlcXVpcmVkLCBzZF9xdWV1ZV9zdG9wcGVkKGNoLT51c2VyKSk7Ci0gICAgfQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiogRGV0ZXJtaW5lIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQgKiovCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIG0yID0gbWVtX3Rva2VuOwotICAgIHR4ZF9uZWVkX2NudCA9IDA7Ci0gICAgZm9yIChsZW4gPSBPU19tZW1fdG9rZW5fdGxlbihtMik7IGxlbiA+IDA7Ci0JIG0yID0gKHZvaWQgKikgT1NfbWVtX3Rva2VuX25leHQobTIpKSB7Ci0JaWYgKCFPU19tZW1fdG9rZW5fbGVuKG0yKSkKLQkgICAgY29udGludWU7Ci0JdHhkX25lZWRfY250Kys7Ci0JbGVuIC09IE9TX21lbV90b2tlbl9sZW4obTIpOwotICAgIH0KLQotICAgIGlmICh0eGRfbmVlZF9jbnQgPT0gMCkgewogCWlmIChjeHQxZTFfbG9nX2xldmVsID49IExPR19NT05JVE9SMikKLQkgICAgcHJfaW5mbygiJXMgY2hhbm5lbCAlZDogbm8gVFggZGF0YSBpbiBVc2VyIGJ1ZmZlclxuIiwgY2ktPmRldm5hbWUsIGNoYW5udW0pOwotCU9TX21lbV90b2tlbl9mcmVlKG1lbV90b2tlbik7Ci0JcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIG5vIGRhdGEgdG8gc2VuZCAqLwotICAgIH0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiogQXJlIHRoZXJlIHN1ZmZpY2llbnQgZGVzY3JpcHRvcnMgYXZhaWxhYmxlPyAqKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICBpZiAodHhkX25lZWRfY250ID4gY2gtPnR4ZF9udW0pIHsgLyogbmV2ZXIgZW5vdWdoIGRlc2NyaXB0b3JzIGZvciB0aGlzCi0JCQkJICAgICAgICogbGFyZ2UgYSBidWZmZXIgKi8KLQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfREVCVUcpCi0JICAgIHByX2luZm8oInN0YXJ0X3htaXQ6IGRpc2NhcmRpbmcgYnVmZmVyLCBpbnN1ZmZpY2llbnQgZGVzY3JpcHRvciBjbnQgJWQsIG5lZWQgJWQuXG4iLAotCQkgICAgY2gtPnR4ZF9udW0sIHR4ZF9uZWVkX2NudCArIDEpOwotCWNoLT5zLnR4X2Ryb3BwZWQrKzsKLQlPU19tZW1fdG9rZW5fZnJlZShtZW1fdG9rZW4pOwotCXJldHVybiAwOwotICAgIH0KLSNpZiAwCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKICNlbmRpZgotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyoqIGZsb3cgY29udHJvbCB0aGUgbGluZSBpZiBub3QgZW5vdWdoIGRlc2NyaXB0b3JzIHJlbWFpbiAqKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIGlmICh0eGRfbmVlZF9jbnQgPiBjaC0+dHhkX2ZyZWUpIHsKLQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUjIpCi0JICAgIHByX2luZm8oInN0YXJ0X3htaXRbJWRdOiBFQlVTWSAtIG5lZWQgbW9yZSBkZXNjcmlwdG9ycywgaGF2ZSAlZCBvZiAlZCBuZWVkICVkXG4iLAotCQkgICAgY2hhbm51bSwgY2gtPnR4ZF9mcmVlLCBjaC0+dHhkX251bSwgdHhkX25lZWRfY250KTsKLQljaC0+dHhfZnVsbCA9IDE7Ci0JY2gtPnR4ZF9yZXF1aXJlZCA9IHR4ZF9uZWVkX2NudDsKLQlzZF9kaXNhYmxlX3htaXQoY2gtPnVzZXIpOwotI2lmIDAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7Ci0jZW5kaWYKLQlyZXR1cm4gLUVCVVNZOyAgICAgICAgICAgICAgIC8qIHRlbGwgdXNlciB0byB0cnkgYWdhaW4gbGF0ZXIgKi8KLSAgICB9Ci0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qKiBQdXQgdGhlIHVzZXIgZGF0YSBpbnRvIE1VU1lDQyBkYXRhIGJ1ZmZlcihzKSAqKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgbTIgPSBtZW1fdG9rZW47Ci0gICAgbWQgPSBjaC0+dHhkX3Vzcl9hZGQ7ICAgICAgICAgICAvKiBnZXQgY3VycmVudCBhdmFpbGFibGUgZGVzY3JpcHRvciAqLworCXsKKwkJcHJfaW5mbygiKysgc3RhcnRfeG10WyVkXTogc3RhdGUgJXggc3RhcnQgJXggZnVsbCAlZCBmcmVlICVkIHJlcXVpcmVkICVkIHN0b3BwZWQgJXhcbiIsCisJCQljaGFubnVtLCBjaC0+c3RhdGUsIGNoLT5jaF9zdGFydF90eCwgY2gtPnR4X2Z1bGwsCisJCQljaC0+dHhkX2ZyZWUsIGNoLT50eGRfcmVxdWlyZWQsCisJCQlzZF9xdWV1ZV9zdG9wcGVkKGNoLT51c2VyKSk7CisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiogRGV0ZXJtaW5lIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQgKiovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW0yID0gbWVtX3Rva2VuOworCXR4ZF9uZWVkX2NudCA9IDA7CisJZm9yIChsZW4gPSBPU19tZW1fdG9rZW5fdGxlbihtMik7IGxlbiA+IDA7CisJICAgICBtMiA9ICh2b2lkICopIE9TX21lbV90b2tlbl9uZXh0KG0yKSkgeworCQlpZiAoIU9TX21lbV90b2tlbl9sZW4obTIpKQorCQkJY29udGludWU7CisJCXR4ZF9uZWVkX2NudCsrOworCQlsZW4gLT0gT1NfbWVtX3Rva2VuX2xlbihtMik7CisJfQogCi0gICAgZm9yIChsZW4gPSBPU19tZW1fdG9rZW5fdGxlbihtMik7IGxlbiA+IDA7IG0yID0gT1NfbWVtX3Rva2VuX25leHQobTIpKSB7Ci0JaW50ICAgICAgICAgdSA9IE9TX21lbV90b2tlbl9sZW4obTIpOworCWlmICh0eGRfbmVlZF9jbnQgPT0gMCkgeworCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUjIpCisJCQlwcl9pbmZvKCIlcyBjaGFubmVsICVkOiBubyBUWCBkYXRhIGluIFVzZXIgYnVmZmVyXG4iLAorCQkJCWNpLT5kZXZuYW1lLCBjaGFubnVtKTsKKwkJT1NfbWVtX3Rva2VuX2ZyZWUobWVtX3Rva2VuKTsKKwkJcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIG5vIGRhdGEgdG8gc2VuZCAqLworCX0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiogQXJlIHRoZXJlIHN1ZmZpY2llbnQgZGVzY3JpcHRvcnMgYXZhaWxhYmxlPyAqKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAodHhkX25lZWRfY250ID4gY2gtPnR4ZF9udW0pIHsgLyogbmV2ZXIgZW5vdWdoIGRlc2NyaXB0b3JzIGZvciB0aGlzCisJCQkJCSAgICogbGFyZ2UgYSBidWZmZXIgKi8KKwkJaWYgKGN4dDFlMV9sb2dfbGV2ZWwgPj0gTE9HX0RFQlVHKQorCQkJcHJfaW5mbygic3RhcnRfeG1pdDogZGlzY2FyZGluZyBidWZmZXIsIGluc3VmZmljaWVudCBkZXNjcmlwdG9yIGNudCAlZCwgbmVlZCAlZC5cbiIsCisJCQkJY2gtPnR4ZF9udW0sIHR4ZF9uZWVkX2NudCArIDEpOworCQljaC0+cy50eF9kcm9wcGVkKys7CisJCU9TX21lbV90b2tlbl9mcmVlKG1lbV90b2tlbik7CisJCXJldHVybiAwOworCX0KIAotCWlmICghdSkKLQkgICAgY29udGludWU7Ci0JbGVuIC09IHU7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiogZmxvdyBjb250cm9sIHRoZSBsaW5lIGlmIG5vdCBlbm91Z2ggZGVzY3JpcHRvcnMgcmVtYWluICoqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKHR4ZF9uZWVkX2NudCA+IGNoLT50eGRfZnJlZSkgeworCQlpZiAoY3h0MWUxX2xvZ19sZXZlbCA+PSBMT0dfTU9OSVRPUjIpCisJCQlwcl9pbmZvKCJzdGFydF94bWl0WyVkXTogRUJVU1kgLSBuZWVkIG1vcmUgZGVzY3JpcHRvcnMsIGhhdmUgJWQgb2YgJWQgbmVlZCAlZFxuIiwKKwkJCQljaGFubnVtLCBjaC0+dHhkX2ZyZWUsCisJCQkJY2gtPnR4ZF9udW0sIHR4ZF9uZWVkX2NudCk7CisJCWNoLT50eF9mdWxsID0gMTsKKwkJY2gtPnR4ZF9yZXF1aXJlZCA9IHR4ZF9uZWVkX2NudDsKKwkJc2RfZGlzYWJsZV94bWl0KGNoLT51c2VyKTsKKwkJcmV0dXJuIC1FQlVTWTsgICAgICAgICAgICAgICAvKiB0ZWxsIHVzZXIgdG8gdHJ5IGFnYWluIGxhdGVyICovCisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiogUHV0IHRoZSB1c2VyIGRhdGEgaW50byBNVVNZQ0MgZGF0YSBidWZmZXIocykgKiovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW0yID0gbWVtX3Rva2VuOworCW1kID0gY2gtPnR4ZF91c3JfYWRkOyAgICAgICAgICAgLyogZ2V0IGN1cnJlbnQgYXZhaWxhYmxlIGRlc2NyaXB0b3IgKi8KKworCWZvciAobGVuID0gT1NfbWVtX3Rva2VuX3RsZW4obTIpOyBsZW4gPiAwOyBtMiA9IE9TX21lbV90b2tlbl9uZXh0KG0yKSkgeworCQlpbnQgICAgICAgICB1ID0gT1NfbWVtX3Rva2VuX2xlbihtMik7CisKKwkJaWYgKCF1KQorCQkJY29udGludWU7CisJCWxlbiAtPSB1OworCisJCS8qCisJCSAqIEVuYWJsZSBmb2xsb3dpbmcgY2h1bmtzLCB5ZXQgd2FpdCB0byBlbmFibGUgdGhlIEZJUlNUIGNodW5rIHVudGlsCisJCSAqIGFmdGVyIEFMTCBzdWJzZXF1ZW50IGNodW5rcyBhcmUgc2V0dXAuCisJCSAqLworCQlpZiAobWQgIT0gY2gtPnR4ZF91c3JfYWRkKSAgLyogbm90IGZpcnN0IGNodW5rICovCisJCQkvKiB0cmFuc2ZlciBvd25lcnNoaXAgZnJvbSBIT1NUIHRvIE1VU1lDQyAqLworCQkJdSB8PSBNVVNZQ0NfVFhfT1dORUQ7CisKKwkJaWYgKGxlbikgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBsYXN0IGNodW5rICovCisJCQl1IHw9IEVPQklSUV9FTkFCTEU7CisJCWVsc2UgaWYgKGNoLT5wLmNoYW5fbW9kZSA9PSBDRkdfQ0hfUFJPVE9fVFJBTlMpIHsKKwkJCS8qCisJCQkgKiBQZXIgTVVTWUNDIFJlZiA2LjQuOSBmb3IgVHJhbnNwYXJlbnQgTW9kZSwgdGhlIGhvc3QgbXVzdAorCQkJICogYWx3YXlzIGNsZWFyIEVPTUlSUV9FTkFCTEUgaW4gZXZlcnkgVHJhbnNtaXQgQnVmZmVyIERlc2NyaXB0b3IKKwkJCSAqIChJRS4gZG9uJ3Qgc2V0IGhlcmVpbikuCisJCQkgKi8KKwkJCXUgfD0gRU9CSVJRX0VOQUJMRTsKKwkJfSBlbHNlCisJCQl1IHw9IEVPTUlSUV9FTkFCTEU7ICAgICAvKiBFT00sIGxhc3QgSERMQyBjaHVuayAqLworCisKKwkJLyogbGFzdCBjaHVuayBpbiBoZGxjIG1vZGUgKi8KKwkJdSB8PSAoY2gtPnAuaWRsZWNvZGUgPDwgSURMRV9DT0RFKTsKKwkJaWYgKGNoLT5wLnBhZF9maWxsX2NvdW50KSB7CisJCQl1IHw9IChQQURGSUxMX0VOQUJMRSB8IChjaC0+cC5wYWRfZmlsbF9jb3VudCA8PCBFWFRSQV9GTEFHUykpOworCQl9CisJCS8qIEZpbGwgaW4gbWRzIG9uIGxhc3Qgc2VnbWVudCwgb3RoZXJzIHNldCBaRVJPCisJCSAqIHNvIHRoYXQgZW50aXJlIHRva2VuIGlzIHJlbW92ZWQgT05MWSB3aGVuIEFMTAorCQkgKiBzZWdtZW50cyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisJCSAqLworCQltZC0+bWVtX3Rva2VuID0gbGVuID8gTlVMTCA6IG1lbV90b2tlbjsKKworCQltZC0+ZGF0YSA9IGNwdV90b19sZTMyKE9TX3Z0b3BoeXMoT1NfbWVtX3Rva2VuX2RhdGEobTIpKSk7CisJCUZMVVNIX01FTV9XUklURSgpOworCQltZC0+c3RhdHVzID0gY3B1X3RvX2xlMzIodSk7CisJCS0tY2gtPnR4ZF9mcmVlOworCQltZCA9IG1kLT5zbmV4dDsKKwl9CisJRkxVU0hfTUVNX1dSSVRFKCk7CisKIAogCS8qCi0JICogRW5hYmxlIGZvbGxvd2luZyBjaHVua3MsIHlldCB3YWl0IHRvIGVuYWJsZSB0aGUgRklSU1QgY2h1bmsgdW50aWwKLQkgKiBhZnRlciBBTEwgc3Vic2VxdWVudCBjaHVua3MgYXJlIHNldHVwLgorCSAqIE5vdyB0cmFuc2ZlciBvd25lcnNoaXAgb2YgZmlyc3QgY2h1bmsgZnJvbSBIT1NUIHRvIE1VU1lDQyBpbiBvcmRlciB0bworCSAqIGZpcmUtb2ZmIHRoaXMgWE1JVC4KIAkgKi8KLQlpZiAobWQgIT0gY2gtPnR4ZF91c3JfYWRkKSAgLyogbm90IGZpcnN0IGNodW5rICovCi0JICAgIHUgfD0gTVVTWUNDX1RYX09XTkVEOyAgIC8qIHRyYW5zZmVyIG93bmVyc2hpcCBmcm9tIEhPU1QgdG8gTVVTWUNDICovCi0KLQlpZiAobGVuKSAgICAgICAgICAgICAgICAgICAgLyogbm90IGxhc3QgY2h1bmsgKi8KLQkgICAgdSB8PSBFT0JJUlFfRU5BQkxFOwotCWVsc2UgaWYgKGNoLT5wLmNoYW5fbW9kZSA9PSBDRkdfQ0hfUFJPVE9fVFJBTlMpCXsKLQkgICAgLyoKLQkgICAgICogUGVyIE1VU1lDQyBSZWYgNi40LjkgZm9yIFRyYW5zcGFyZW50IE1vZGUsIHRoZSBob3N0IG11c3QKLQkgICAgICogYWx3YXlzIGNsZWFyIEVPTUlSUV9FTkFCTEUgaW4gZXZlcnkgVHJhbnNtaXQgQnVmZmVyIERlc2NyaXB0b3IKLQkgICAgICogKElFLiBkb24ndCBzZXQgaGVyZWluKS4KLQkgICAgICovCi0JICAgIHUgfD0gRU9CSVJRX0VOQUJMRTsKLQl9IGVsc2UKLQkgICAgdSB8PSBFT01JUlFfRU5BQkxFOyAgICAgLyogRU9NLCBsYXN0IEhETEMgY2h1bmsgKi8KLQotCi0JLyogbGFzdCBjaHVuayBpbiBoZGxjIG1vZGUgKi8KLQl1IHw9IChjaC0+cC5pZGxlY29kZSA8PCBJRExFX0NPREUpOwotCWlmIChjaC0+cC5wYWRfZmlsbF9jb3VudCkgewotI2lmIDAKLQkgICAgLyogTk9PUCBOT1RFOiB1X2ludDhfdCBjYW5ub3QgYmUgPiAweEZGICovCi0JICAgIC8qIHNhbml0aXplIHBhZF9maWxsX2NvdW50IGZvciBtYXhpbXVtcyBhbGxvd2VkIGJ5IGhhcmR3YXJlICovCi0JICAgIGlmIChjaC0+cC5wYWRfZmlsbF9jb3VudCA+IEVYVFJBX0ZMQUdTX01BU0spCi0JCWNoLT5wLnBhZF9maWxsX2NvdW50ID0gRVhUUkFfRkxBR1NfTUFTSzsKLSNlbmRpZgotCSAgICB1IHw9IChQQURGSUxMX0VOQUJMRSB8IChjaC0+cC5wYWRfZmlsbF9jb3VudCA8PCBFWFRSQV9GTEFHUykpOwotCX0KLQltZC0+bWVtX3Rva2VuID0gbGVuID8gTlVMTCA6IG1lbV90b2tlbjsgICAgLyogRmlsbCBpbiBtZHMgb24gbGFzdAotCQkJCQkJICogc2VnbWVudCwgb3RoZXJzIHNldCBaRVJPCi0JCQkJCQkgKiBzbyB0aGF0IGVudGlyZSB0b2tlbiBpcwotCQkJCQkJICogcmVtb3ZlZCBPTkxZIHdoZW4gQUxMCi0JCQkJCQkgKiBzZWdtZW50cyBoYXZlIGJlZW4KLQkJCQkJCSAqIHRyYW5zbWl0dGVkLiAqLwotCi0JbWQtPmRhdGEgPSBjcHVfdG9fbGUzMihPU192dG9waHlzKE9TX21lbV90b2tlbl9kYXRhKG0yKSkpOworCWNoLT50eGRfdXNyX2FkZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoTVVTWUNDX1RYX09XTkVEKTsKIAlGTFVTSF9NRU1fV1JJVEUoKTsKLQltZC0+c3RhdHVzID0gY3B1X3RvX2xlMzIodSk7Ci0JLS1jaC0+dHhkX2ZyZWU7Ci0JbWQgPSBtZC0+c25leHQ7Ci0gICAgfQotICAgIEZMVVNIX01FTV9XUklURSgpOworCWNoLT50eGRfdXNyX2FkZCA9IG1kOwogCi0KLSAgICAvKgotICAgICAqIE5vdyB0cmFuc2ZlciBvd25lcnNoaXAgb2YgZmlyc3QgY2h1bmsgZnJvbSBIT1NUIHRvIE1VU1lDQyBpbiBvcmRlciB0bwotICAgICAqIGZpcmUtb2ZmIHRoaXMgWE1JVC4KLSAgICAgKi8KLSAgICBjaC0+dHhkX3Vzcl9hZGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKE1VU1lDQ19UWF9PV05FRCk7Ci0gICAgRkxVU0hfTUVNX1dSSVRFKCk7Ci0gICAgY2gtPnR4ZF91c3JfYWRkID0gbWQ7Ci0KLSAgICBsZW4gPSBPU19tZW1fdG9rZW5fdGxlbihtZW1fdG9rZW4pOwotICAgIGF0b21pY19hZGQobGVuLCAmY2gtPnR4X3BlbmRpbmcpOwotICAgIGF0b21pY19hZGQobGVuLCAmY2ktPnR4X3BlbmRpbmcpOwotICAgIGNoLT5zLnR4X3BhY2tldHMrKzsKLSAgICBjaC0+cy50eF9ieXRlcyArPSBsZW47Ci0gICAgLyoKLSAgICAgKiBJZiBhbiBPTlIgd2FzIHNlZW4sIHRoZW4gY2hhbm5lbCByZXF1aXJlcyBwb2tpbmcgdG8gcmVzdGFydAotICAgICAqIHRyYW5zbWlzc2lvbi4KLSAgICAgKi8KLSAgICBpZiAoY2gtPmNoX3N0YXJ0X3R4KQotCW11c3ljY19jaGFuX3Jlc3RhcnQoY2gpOworCWxlbiA9IE9TX21lbV90b2tlbl90bGVuKG1lbV90b2tlbik7CisJYXRvbWljX2FkZChsZW4sICZjaC0+dHhfcGVuZGluZyk7CisJYXRvbWljX2FkZChsZW4sICZjaS0+dHhfcGVuZGluZyk7CisJY2gtPnMudHhfcGFja2V0cysrOworCWNoLT5zLnR4X2J5dGVzICs9IGxlbjsKKwkvKgorCSAqIElmIGFuIE9OUiB3YXMgc2VlbiwgdGhlbiBjaGFubmVsIHJlcXVpcmVzIHBva2luZyB0byByZXN0YXJ0CisJICogdHJhbnNtaXNzaW9uLgorCSAqLworCWlmIChjaC0+Y2hfc3RhcnRfdHgpCisJCW11c3ljY19jaGFuX3Jlc3RhcnQoY2gpOwogI2lmZGVmIFNCRV9XQU4yNTZUM19FTkFCTEUKLSAgICB3YW4yNTZ0M19sZWQoY2ksIExFRF9UWCwgTEVEVl9HKTsKKwl3YW4yNTZ0M19sZWQoY2ksIExFRF9UWCwgTEVEVl9HKTsKICNlbmRpZgotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jOTN4Nl9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jOTN4Nl9lZXByb20uYwppbmRleCA3OGNjMTcwLi5iYTU4OGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtYzkzeDZfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWM5M3g2X2VlcHJvbS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAic2JlY29tX2lubGluZV9saW51eC5oIgogI2luY2x1ZGUgInBtY2M0LmgiCiAjaW5jbHVkZSAic2JlX3Byb21mb3JtYXQuaCIKKyNpbmNsdWRlICJwbWM5M3g2X2VlcHJvbS5oIgogCiAjaWZuZGVmIFRSVUUKICNkZWZpbmUgVFJVRSAgIDEKQEAgLTQzLDM4ICs0NCwzNSBAQAogICogICAgICB1c2luZy4KICAqLwogCi0jZGVmaW5lIEVFX01GRyAgICAgIChsb25nKTAgICAgIC8qIEluZGV4IHRvIG1hbnVmYWN0dXJpbmcgcmVjb3JkICovCi0jZGVmaW5lIEVFX0ZJUlNUICAgIDB4MjggICAgICAgIC8qIEluZGV4IHRvIHN0YXJ0IHRlc3RpbmcgYXQgKi8KLSNkZWZpbmUgRUVfTElNSVQgICAgMTI4ICAgICAgICAgLyogSW5kZXggdG8gZW5kIHRlc3RpbmcgYXQgKi8KLQorI2RlZmluZSBFRV9NRkcgICAgICAobG9uZykwCS8qIEluZGV4IHRvIG1hbnVmYWN0dXJpbmcgcmVjb3JkICovCisjZGVmaW5lIEVFX0ZJUlNUICAgIDB4MjgJLyogSW5kZXggdG8gc3RhcnQgdGVzdGluZyBhdCAqLworI2RlZmluZSBFRV9MSU1JVCAgICAxMjgJCS8qIEluZGV4IHRvIGVuZCB0ZXN0aW5nIGF0ICovCiAKIC8qICBCaXQgT3JkZXJpbmcgZm9yIEluc3RydWN0aW9ucwotKioKLSoqICBBMCwgQTEsIEEyLCBBMywgQTQsIEE1LCBBNiwgT1AwLCBPUDEsIFNCICAgKGxzYiwgb3IgMXN0IGJpdCBvdXQpCi0qKgotKi8KKyAqCisgKiAgQTAsIEExLCBBMiwgQTMsIEE0LCBBNSwgQTYsIE9QMCwgT1AxLCBTQiAgIChsc2IsIG9yIDFzdCBiaXQgb3V0KQorICoKKyAqLwogCi0jZGVmaW5lIEVQUk9NX0VXRU4gICAgICAweDAwMTkgIC8qIEVyYXNlL1dyaXRlIGVuYWJsZSAocmV2ZXJzZWQpICovCi0jZGVmaW5lIEVQUk9NX0VXRFMgICAgICAweDAwMDEgIC8qIEVyYXNlL1dyaXRlIGRpc2FibGUgKHJldmVyc2VkKSAqLwotI2RlZmluZSBFUFJPTV9SRUFEICAgICAgMHgwMDAzICAvKiBSZWFkIChyZXZlcnNlZCkgKi8KLSNkZWZpbmUgRVBST01fV1JJVEUgICAgIDB4MDAwNSAgLyogV3JpdGUgKHJldmVyc2VkKSAqLwotI2RlZmluZSBFUFJPTV9FUkFTRSAgICAgMHgwMDA3ICAvKiBFcmFzZSAocmV2ZXJzZWQpICovCi0jZGVmaW5lIEVQUk9NX0VSQUwgICAgICAweDAwMDkgIC8qIEVyYXNlIEFsbCAocmV2ZXJzZWQpICovCi0jZGVmaW5lIEVQUk9NX1dSQUwgICAgICAweDAwMTEgIC8qIFdyaXRlIEFsbCAocmV2ZXJzZWQpICovCisjZGVmaW5lIEVQUk9NX0VXRU4gICAgICAweDAwMTkJLyogRXJhc2UvV3JpdGUgZW5hYmxlIChyZXZlcnNlZCkgKi8KKyNkZWZpbmUgRVBST01fRVdEUyAgICAgIDB4MDAwMQkvKiBFcmFzZS9Xcml0ZSBkaXNhYmxlIChyZXZlcnNlZCkgKi8KKyNkZWZpbmUgRVBST01fUkVBRCAgICAgIDB4MDAwMwkvKiBSZWFkIChyZXZlcnNlZCkgKi8KKyNkZWZpbmUgRVBST01fV1JJVEUgICAgIDB4MDAwNQkvKiBXcml0ZSAocmV2ZXJzZWQpICovCisjZGVmaW5lIEVQUk9NX0VSQVNFICAgICAweDAwMDcJLyogRXJhc2UgKHJldmVyc2VkKSAqLworI2RlZmluZSBFUFJPTV9FUkFMICAgICAgMHgwMDA5CS8qIEVyYXNlIEFsbCAocmV2ZXJzZWQpICovCisjZGVmaW5lIEVQUk9NX1dSQUwgICAgICAweDAwMTEJLyogV3JpdGUgQWxsIChyZXZlcnNlZCkgKi8KIAotI2RlZmluZSBFUFJPTV9BRFJfU1ogICAgNyAgICAgICAvKiBOdW1iZXIgb2YgYml0cyBpbiBvZmZzZXQgYWRkcmVzcyAqLwotI2RlZmluZSBFUFJPTV9PUF9TWiAgICAgMyAgICAgICAvKiBOdW1iZXIgb2YgYml0cyBpbiBjb21tYW5kICovCisjZGVmaW5lIEVQUk9NX0FEUl9TWiAgICA3CS8qIE51bWJlciBvZiBiaXRzIGluIG9mZnNldCBhZGRyZXNzICovCisjZGVmaW5lIEVQUk9NX09QX1NaICAgICAzCS8qIE51bWJlciBvZiBiaXRzIGluIGNvbW1hbmQgKi8KICNkZWZpbmUgU0laRV9BRERSX09QICAgIChFUFJPTV9BRFJfU1ogKyBFUFJPTV9PUF9TWikKLSNkZWZpbmUgTEM0NkFfTUFYX09QUyAgIDEwICAgICAgLyogTnVtYmVyIG9mIGJpdHMgaW4gSW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgTlVNX09GX0JJVFMgICAgIDggICAgICAgLyogTnVtYmVyIG9mIGJpdHMgaW4gZGF0YSAqLwotCisjZGVmaW5lIExDNDZBX01BWF9PUFMgICAxMAkvKiBOdW1iZXIgb2YgYml0cyBpbiBJbnN0cnVjdGlvbiAqLworI2RlZmluZSBOVU1fT0ZfQklUUyAgICAgOAkvKiBOdW1iZXIgb2YgYml0cyBpbiBkYXRhICovCiAKIC8qIEVFUFJPTSBzaWduYWwgYml0cyAqLwotI2RlZmluZSBFUFJPTV9BQ1RJVkVfT1VUX0JJVCAgICAweDAwMDEgIC8qIE91dCBkYXRhIGJpdCAqLwotI2RlZmluZSBFUFJPTV9BQ1RJVkVfSU5fQklUICAgICAweDAwMDIgIC8qIEluIGRhdGEgYml0ICovCi0jZGVmaW5lIEFDVElWRV9JTl9CSVRfU0hJRlQgICAgIDB4MDAwMSAgLyogU2hpZnQgSW4gZGF0YSBiaXQgdG8gTFNCICovCi0jZGVmaW5lIEVQUk9NX0VOQ1MgICAgICAgICAgICAgIDB4MDAwNCAgLyogU2V0IEVFUFJPTSBDUyBkdXJpbmcgb3BlcmF0aW9uICovCi0KKyNkZWZpbmUgRVBST01fQUNUSVZFX09VVF9CSVQgICAgMHgwMDAxCS8qIE91dCBkYXRhIGJpdCAqLworI2RlZmluZSBFUFJPTV9BQ1RJVkVfSU5fQklUICAgICAweDAwMDIJLyogSW4gZGF0YSBiaXQgKi8KKyNkZWZpbmUgQUNUSVZFX0lOX0JJVF9TSElGVCAgICAgMHgwMDAxCS8qIFNoaWZ0IEluIGRhdGEgYml0IHRvIExTQiAqLworI2RlZmluZSBFUFJPTV9FTkNTICAgICAgICAgICAgICAweDAwMDQJLyogU2V0IEVFUFJPTSBDUyBkdXJpbmcgb3BlcmF0aW9uICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIFRoZSBCeXRlUmV2ZXJzZSB0YWJsZSBpcyB1c2VkIHRvIHJldmVyc2VzIHRoZSA4IGJpdHMgd2l0aGluIGEgYnl0ZQpAQCAtODIsMjkgKzgwLDI2IEBACiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgQnl0ZVJldmVyc2VbMjU2XTsKLXN0YXRpYyBpbnQgIEJ5dGVSZXZlcnNlQnVpbHQgPSBGQUxTRTsKLQorc3RhdGljIGludCBCeXRlUmV2ZXJzZUJ1aWx0ID0gRkFMU0U7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIG1mZ190ZW1wbGF0ZSAtIGluaXRpYWwgc2VyaWFsIEVFUFJPTSBkYXRhIHN0cnVjdHVyZQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1zdGF0aWMgdTggbWZnX3RlbXBsYXRlW3NpemVvZihGTERfVFlQRTIpXSA9Ci17Ci0gICAgUFJPTV9GT1JNQVRfVFlQRTIsICAgICAgICAgIC8qIHR5cGU7ICovCi0gICAgMHgwMCwgMHgxQSwgICAgICAgICAgICAgICAgIC8qIGxlbmd0aFsyXTsgKi8KLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgLyogQ3JjMzJbNF07ICovCi0gICAgMHgxMSwgMHg3NiwgICAgICAgICAgICAgICAgIC8qIElkWzJdOyAqLwotICAgIDB4MDcsIDB4MDUsICAgICAgICAgICAgICAgICAvKiBTdWJJZFsyXSBFMTsgKi8KLSAgICAweDAwLCAweEEwLCAweEQ2LCAweDAwLCAweDAwLCAweDAwLCAvKiBTZXJpYWxbNl07ICovCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgICAgIC8qIENyZWF0ZVRpbWVbNF07ICovCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgICAgIC8qIEhlYXRSdW5UaW1lWzRdOyAqLwotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAvKiBIZWF0UnVuSXRlcmF0aW9uc1s0XTsgKi8KLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgLyogSGVhdFJ1bkVycm9yc1s0XTsgKi8KK3N0YXRpYyB1OCBtZmdfdGVtcGxhdGVbc2l6ZW9mKEZMRF9UWVBFMildID0geworCVBST01fRk9STUFUX1RZUEUyLAkvKiB0eXBlOyAqLworCTB4MDAsIDB4MUEsCQkvKiBsZW5ndGhbMl07ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogQ3JjMzJbNF07ICovCisJMHgxMSwgMHg3NiwJCS8qIElkWzJdOyAqLworCTB4MDcsIDB4MDUsCQkvKiBTdWJJZFsyXSBFMTsgKi8KKwkweDAwLCAweEEwLCAweEQ2LCAweDAwLCAweDAwLCAweDAwLAkvKiBTZXJpYWxbNl07ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogQ3JlYXRlVGltZVs0XTsgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBIZWF0UnVuVGltZVs0XTsgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBIZWF0UnVuSXRlcmF0aW9uc1s0XTsgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBIZWF0UnVuRXJyb3JzWzRdOyAqLwogfTsKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICBCdWlsZEJ5dGVSZXZlcnNlIC0gYnVpbGQgdGhlIDgtYml0IHJldmVyc2UgdGFibGUKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTMsMzkgKzEwOCwzNSBAQAogICogICAgICAodGhlIE1TQiBiZWNvbWVzIHRoZSBMU0IgZXRjLikuCiAgKi8KIAotc3RhdGljIHZvaWQKLUJ1aWxkQnl0ZVJldmVyc2UgKHZvaWQpCitzdGF0aWMgdm9pZCBCdWlsZEJ5dGVSZXZlcnNlKHZvaWQpCiB7Ci0gICAgbG9uZyAgICAgICAgaGFsZjsgICAgICAgICAgIC8qIFVzZWQgdG8gYnVpbGQgYnkgcG93ZXJzIHRvIDIgKi8KLSAgICBpbnQgICAgICAgICBpOworCS8qIFVzZWQgdG8gYnVpbGQgYnkgcG93ZXJzIHRvIDIgKi8KKwlsb25nIGhhbGY7CisJaW50IGk7CiAKLSAgICBCeXRlUmV2ZXJzZVswXSA9IDA7CisJQnl0ZVJldmVyc2VbMF0gPSAwOwogCi0gICAgZm9yIChoYWxmID0gMTsgaGFsZiA8IHNpemVvZiAoQnl0ZVJldmVyc2UpOyBoYWxmIDw8PSAxKQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGFsZjsgaSsrKQotICAgICAgICAgICAgQnl0ZVJldmVyc2VbaGFsZiArIGldID0gKGNoYXIpIChCeXRlUmV2ZXJzZVtpXSB8ICgweDgwIC8gaGFsZikpOworCWZvciAoaGFsZiA9IDE7IGhhbGYgPCBzaXplb2YoQnl0ZVJldmVyc2UpOyBoYWxmIDw8PSAxKQorCQlmb3IgKGkgPSAwOyBpIDwgaGFsZjsgaSsrKQorCQkJQnl0ZVJldmVyc2VbaGFsZiArIGldID0KKwkJCSAgICAoY2hhcikoQnl0ZVJldmVyc2VbaV0gfCAoMHg4MCAvIGhhbGYpKTsKIAotICAgIEJ5dGVSZXZlcnNlQnVpbHQgPSBUUlVFOworCUJ5dGVSZXZlcnNlQnVpbHQgPSBUUlVFOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIGVlcHJvbV9kZWxheSAtIHNtYWxsIGRlbGF5IGZvciBFRVBST00gdGltaW5nCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLXN0YXRpYyB2b2lkCi1lZXByb21fZGVsYXkgKHZvaWQpCitzdGF0aWMgdm9pZCBlZXByb21fZGVsYXkodm9pZCkKIHsKLSAgICBpbnQgICAgICAgICB0aW1lb3V0OworCWludCB0aW1lb3V0OwogCi0gICAgZm9yICh0aW1lb3V0ID0gMjA7IHRpbWVvdXQ7IC0tdGltZW91dCkKLSAgICB7Ci0gICAgICAgIE9TX3V3YWl0X2R1bW15ICgpOwotICAgIH0KKwlmb3IgKHRpbWVvdXQgPSAyMDsgdGltZW91dDsgLS10aW1lb3V0KQorCQlPU191d2FpdF9kdW1teSgpOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIGVlcHJvbV9wdXRfYnl0ZSAtIFNlbmQgYSBieXRlIHRvIHRoZSBFRVBST00gc2VyaWFsbHkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTQsMjMgKzE0NSwyMyBAQAogICogICAgICB0aGUgZGF0YSB0byB0aGUgRUVQUk9NLgogICovCiAKLXZvaWQKLWVlcHJvbV9wdXRfYnl0ZSAobG9uZyBhZGRyLCBsb25nIGRhdGEsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGVlcHJvbV9wdXRfYnl0ZShsb25nIGFkZHIsIGxvbmcgZGF0YSwgaW50IGNvdW50KQogewotICAgIHVfaW50MzJfdCBvdXRwdXQ7CisJdV9pbnQzMl90IG91dHB1dDsKIAotICAgIHdoaWxlICgtLWNvdW50ID49IDApCi0gICAgewotICAgICAgICBvdXRwdXQgPSAoZGF0YSAmIEVQUk9NX0FDVElWRV9PVVRfQklUKSA/IDEgOiAwOyAvKiBHZXQgbmV4dCBkYXRhIGJpdCAqLwotICAgICAgICBvdXRwdXQgfD0gRVBST01fRU5DUzsgICAgICAgLyogQWRkIENoaXAgU2VsZWN0ICovCi0gICAgICAgIGRhdGEgPj49IDE7CisJd2hpbGUgKC0tY291bnQgPj0gMCkgeworCQkvKiBHZXQgbmV4dCBkYXRhIGJpdCAqLworCQlvdXRwdXQgPSAoZGF0YSAmIEVQUk9NX0FDVElWRV9PVVRfQklUKSA/IDEgOiAwOworCQkvKiBBZGQgQ2hpcCBTZWxlY3QgKi8KKwkJb3V0cHV0IHw9IEVQUk9NX0VOQ1M7CisJCWRhdGEgPj49IDE7CiAKLSAgICAgICAgZWVwcm9tX2RlbGF5ICgpOwotICAgICAgICBwY2lfd3JpdGVfMzIgKCh1X2ludDMyX3QgKikgYWRkciwgb3V0cHV0KTsgICAgICAvKiBPdXRwdXQgaXQgKi8KLSAgICB9CisJCWVlcHJvbV9kZWxheSgpOworCQkvKiBPdXRwdXQgaXQgKi8KKwkJcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgYWRkciwgb3V0cHV0KTsKKwl9CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICAgICAgZWVwcm9tX2dldF9ieXRlIC0gUmVjZWl2ZSBhIGJ5dGUgZnJvbSB0aGUgRUVQUk9NIHNlcmlhbGx5CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc5LDM3ICsxNzAsMzUgQEAKICAqICAgICAgZnJvbSB0aGUgIEVFUFJPTS4KICAqLwogCi11X2ludDMyX3QKLWVlcHJvbV9nZXRfYnl0ZSAobG9uZyBhZGRyKQorc3RhdGljIHVfaW50MzJfdCBlZXByb21fZ2V0X2J5dGUobG9uZyBhZGRyKQogewotICAgIHVfaW50MzJfdCAgIGlucHV0OwotICAgIHVfaW50MzJfdCAgIGRhdGE7Ci0gICAgaW50ICAgICAgICAgY291bnQ7CisJdV9pbnQzMl90IGlucHV0OworCXVfaW50MzJfdCBkYXRhOworCWludCBjb3VudDsKIAogLyogIFN0YXJ0IHRoZSBSZWFkaW5nIG9mIERBVEEKLSoqCi0qKiAgVGhlIGZpcnN0IHJlYWQgaXMgYSBkdW1teSBhcyB0aGUgZGF0YSBpcyBsYXRjaGVkIGluIHRoZQotKiogIEVQTEQgYW5kIHJlYWQgb24gdGhlIG5leHQgcmVhZCBhY2Nlc3MgdG8gdGhlIEVFUFJPTS4KLSovCisgKgorICogIFRoZSBmaXJzdCByZWFkIGlzIGEgZHVtbXkgYXMgdGhlIGRhdGEgaXMgbGF0Y2hlZCBpbiB0aGUKKyAqICBFUExEIGFuZCByZWFkIG9uIHRoZSBuZXh0IHJlYWQgYWNjZXNzIHRvIHRoZSBFRVBST00uCisgKi8KIAotICAgIGlucHV0ID0gcGNpX3JlYWRfMzIgKCh1X2ludDMyX3QgKikgYWRkcik7CisJaW5wdXQgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopIGFkZHIpOwogCi0gICAgZGF0YSA9IDA7Ci0gICAgY291bnQgPSBOVU1fT0ZfQklUUzsKLSAgICB3aGlsZSAoLS1jb3VudCA+PSAwKQotICAgIHsKLSAgICAgICAgZWVwcm9tX2RlbGF5ICgpOwotICAgICAgICBpbnB1dCA9IHBjaV9yZWFkXzMyICgodV9pbnQzMl90ICopIGFkZHIpOworCWRhdGEgPSAwOworCWNvdW50ID0gTlVNX09GX0JJVFM7CisJd2hpbGUgKC0tY291bnQgPj0gMCkgeworCQllZXByb21fZGVsYXkoKTsKKwkJaW5wdXQgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopIGFkZHIpOwogCi0gICAgICAgIGRhdGEgPDw9IDE7ICAgICAgICAgICAgICAgICAvKiBTaGlmdCBkYXRhIG92ZXIgKi8KLSAgICAgICAgZGF0YSB8PSAoaW5wdXQgJiBFUFJPTV9BQ1RJVkVfSU5fQklUKSA/IDEgOiAwOworCQkvKiBTaGlmdCBkYXRhIG92ZXIgKi8KKwkJZGF0YSA8PD0gMTsKKwkJZGF0YSB8PSAoaW5wdXQgJiBFUFJPTV9BQ1RJVkVfSU5fQklUKSA/IDEgOiAwOwogCi0gICAgfQorCX0KIAotICAgIHJldHVybiBkYXRhOworCXJldHVybiBkYXRhOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIGRpc2FibGVfcG1jX2VlcHJvbSAtIERpc2FibGUgd3JpdGVzIHRvIHRoZSBFRVBST00KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTcsMTYgKzIwNiwxNCBAQAogICogICAgICBJc3N1ZSB0aGUgRUVQUk9NIGNvbW1hbmQgdG8gZGlzYWJsZSB3cml0ZXMuCiAgKi8KIAotc3RhdGljIHZvaWQKLWRpc2FibGVfcG1jX2VlcHJvbSAobG9uZyBhZGRyKQorc3RhdGljIHZvaWQgZGlzYWJsZV9wbWNfZWVwcm9tKGxvbmcgYWRkcikKIHsKLSAgICBlZXByb21fcHV0X2J5dGUgKGFkZHIsIEVQUk9NX0VXRFMsIFNJWkVfQUREUl9PUCk7CisJZWVwcm9tX3B1dF9ieXRlKGFkZHIsIEVQUk9NX0VXRFMsIFNJWkVfQUREUl9PUCk7CiAKLSAgICBwY2lfd3JpdGVfMzIgKCh1X2ludDMyX3QgKikgYWRkciwgMCk7ICAgICAgIC8qIHRoaXMgcmVtb3ZlcyBDaGlwIFNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZnJvbSBFRVBST00gKi8KKwkvKiB0aGlzIHJlbW92ZXMgQ2hpcCBTZWxlY3QgZnJvbSBFRVBST00gKi8KKwlwY2lfd3JpdGVfMzIoKHVfaW50MzJfdCAqKSBhZGRyLCAwKTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICBlbmFibGVfcG1jX2VlcHJvbSAtIEVuYWJsZSB3cml0ZXMgdG8gdGhlIEVFUFJPTQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzNCwxNiArMjIxLDE0IEBACiAgKiAgICAgIElzc3VlIHRoZSBFRVBST00gY29tbWFuZCB0byBlbmFibGUgd3JpdGVzLgogICovCiAKLXN0YXRpYyB2b2lkCi1lbmFibGVfcG1jX2VlcHJvbSAobG9uZyBhZGRyKQorc3RhdGljIHZvaWQgZW5hYmxlX3BtY19lZXByb20obG9uZyBhZGRyKQogewotICAgIGVlcHJvbV9wdXRfYnl0ZSAoYWRkciwgRVBST01fRVdFTiwgU0laRV9BRERSX09QKTsKKwllZXByb21fcHV0X2J5dGUoYWRkciwgRVBST01fRVdFTiwgU0laRV9BRERSX09QKTsKIAotICAgIHBjaV93cml0ZV8zMiAoKHVfaW50MzJfdCAqKSBhZGRyLCAwKTsgICAgICAgLyogdGhpcyByZW1vdmVzIENoaXAgU2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIEVFUFJPTSAqLworCS8qIHRoaXMgcmVtb3ZlcyBDaGlwIFNlbGVjdCBmcm9tIEVFUFJPTSAqLworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopIGFkZHIsIDApOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIHBtY19lZXByb21fcmVhZCAtIEVFUFJPTSBsb2NhdGlvbiByZWFkCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjUyLDM1ICsyMzcsNDEgQEAKICAqICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gdG8gdGhlIGNhbGxpbmcgcm91dGluZS4KICAqLwogCi11X2ludDMyX3QKLXBtY19lZXByb21fcmVhZCAobG9uZyBhZGRyLCBsb25nIG1lbV9vZmZzZXQpCitzdGF0aWMgdV9pbnQzMl90IHBtY19lZXByb21fcmVhZChsb25nIGFkZHIsIGxvbmcgbWVtX29mZnNldCkKIHsKLSAgICB1X2ludDMyX3QgICBkYXRhOyAgICAgICAgICAgLyogRGF0YSBmcm9tIGNoaXAgKi8KKwkvKiBEYXRhIGZyb20gY2hpcCAqLworCXVfaW50MzJfdCBkYXRhOwogCi0gICAgaWYgKCFCeXRlUmV2ZXJzZUJ1aWx0KQotICAgICAgICBCdWlsZEJ5dGVSZXZlcnNlICgpOworCWlmICghQnl0ZVJldmVyc2VCdWlsdCkKKwkJQnVpbGRCeXRlUmV2ZXJzZSgpOwogCi0gICAgbWVtX29mZnNldCA9IEJ5dGVSZXZlcnNlWzB4N0YgJiBtZW1fb2Zmc2V0XTsgICAgICAgIC8qIFJldmVyc2UgYWRkcmVzcyAqLwotICAgIC8qCi0gICAgICogTk9URTogVGhlIG1heCBvZmZzZXQgYWRkcmVzcyBpcyAxMjggb3IgaGFsZiB0aGUgcmV2ZXJzYWwgdGFibGUuIFNvIHRoZQotICAgICAqIExTQiBpcyBhbHdheXMgemVybyBhbmQgY291bnRzIGFzIGEgYnVpbHQgaW4gc2hpZnQgb2Ygb25lIGJpdC4gIFNvIGV2ZW4KLSAgICAgKiB0aG91Z2ggd2UgbmVlZCB0byBzaGlmdCAzIGJpdHMgdG8gbWFrZSByb29tIGZvciB0aGUgY29tbWFuZCwgd2Ugb25seQotICAgICAqIG5lZWQgdG8gc2hpZnQgdHdpY2UgbW9yZSBiZWNhdXNlIG9mIHRoZSBidWlsdCBpbiBzaGlmdC4KLSAgICAgKi8KLSAgICBtZW1fb2Zmc2V0IDw8PSAyOyAgICAgICAgICAgICAgIC8qIFNoaWZ0IGZvciBjb21tYW5kICovCi0gICAgbWVtX29mZnNldCB8PSBFUFJPTV9SRUFEOyAgICAgICAvKiBBZGQgY29tbWFuZCAqLworCS8qIFJldmVyc2UgYWRkcmVzcyAqLworCW1lbV9vZmZzZXQgPSBCeXRlUmV2ZXJzZVsweDdGICYgbWVtX29mZnNldF07CiAKLSAgICBlZXByb21fcHV0X2J5dGUgKGFkZHIsIG1lbV9vZmZzZXQsIFNJWkVfQUREUl9PUCk7ICAgLyogT3V0cHV0IGNoaXAgYWRkcmVzcyAqLworCS8qCisJICogTk9URTogVGhlIG1heCBvZmZzZXQgYWRkcmVzcyBpcyAxMjggb3IgaGFsZiB0aGUgcmV2ZXJzYWwgdGFibGUuIFNvCisJICogdGhlIExTQiBpcyBhbHdheXMgemVybyBhbmQgY291bnRzIGFzIGEgYnVpbHQgaW4gc2hpZnQgb2Ygb25lIGJpdC4KKwkgKiBTbyBldmVuIHRob3VnaCB3ZSBuZWVkIHRvIHNoaWZ0IDMgYml0cyB0byBtYWtlIHJvb20gZm9yIHRoZSBjb21tYW5kLAorCSAqIHdlIG9ubHkgbmVlZCB0byBzaGlmdCB0d2ljZSBtb3JlIGJlY2F1c2Ugb2YgdGhlIGJ1aWx0IGluIHNoaWZ0LgorCSAqLwogCi0gICAgZGF0YSA9IGVlcHJvbV9nZXRfYnl0ZSAoYWRkcik7ICAvKiBSZWFkIGNoaXAgZGF0YSAqLworCS8qIFNoaWZ0IGZvciBjb21tYW5kICovCisJbWVtX29mZnNldCA8PD0gMjsKKwkvKiBBZGQgY29tbWFuZCAqLworCW1lbV9vZmZzZXQgfD0gRVBST01fUkVBRDsKIAotICAgIHBjaV93cml0ZV8zMiAoKHVfaW50MzJfdCAqKSBhZGRyLCAwKTsgICAgICAgLyogUmVtb3ZlIENoaXAgU2VsZWN0IGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEVFUFJPTSAqLworCS8qIE91dHB1dCBjaGlwIGFkZHJlc3MgKi8KKwllZXByb21fcHV0X2J5dGUoYWRkciwgbWVtX29mZnNldCwgU0laRV9BRERSX09QKTsKIAotICAgIHJldHVybiAoZGF0YSAmIDB4MDAwMDAwRkYpOworCS8qIFJlYWQgY2hpcCBkYXRhICovCisJZGF0YSA9IGVlcHJvbV9nZXRfYnl0ZShhZGRyKTsKKworCS8qIFJlbW92ZSBDaGlwIFNlbGVjdCBmcm9tIEVFUFJPTSAqLworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopIGFkZHIsIDApOworCisJcmV0dXJuIChkYXRhICYgMHgwMDAwMDBGRik7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICAgICAgcG1jX2VlcHJvbV93cml0ZSAtIEVFUFJPTSBsb2NhdGlvbiB3cml0ZQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5MiwxODkgKzI4MywxODEgQEAKICAqICAgICAgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KICAqLwogCi1pbnQKLXBtY19lZXByb21fd3JpdGUgKGxvbmcgYWRkciwgbG9uZyBtZW1fb2Zmc2V0LCB1X2ludDMyX3QgZGF0YSkKK3N0YXRpYyBpbnQgcG1jX2VlcHJvbV93cml0ZShsb25nIGFkZHIsIGxvbmcgbWVtX29mZnNldCwgdV9pbnQzMl90IGRhdGEpCiB7Ci0gICAgdm9sYXRpbGUgdV9pbnQzMl90IHRlbXA7Ci0gICAgaW50ICAgICAgICAgY291bnQ7CisJdV9pbnQzMl90IHRlbXA7CisJaW50IGNvdW50OwogCi0gICAgaWYgKCFCeXRlUmV2ZXJzZUJ1aWx0KQotICAgICAgICBCdWlsZEJ5dGVSZXZlcnNlICgpOworCWlmICghQnl0ZVJldmVyc2VCdWlsdCkKKwkJQnVpbGRCeXRlUmV2ZXJzZSgpOwogCi0gICAgbWVtX29mZnNldCA9IEJ5dGVSZXZlcnNlWzB4N0YgJiBtZW1fb2Zmc2V0XTsgICAgICAgIC8qIFJldmVyc2UgYWRkcmVzcyAqLwotICAgIC8qCi0gICAgICogTk9URTogVGhlIG1heCBvZmZzZXQgYWRkcmVzcyBpcyAxMjggb3IgaGFsZiB0aGUgcmV2ZXJzYWwgdGFibGUuIFNvIHRoZQotICAgICAqIExTQiBpcyBhbHdheXMgemVybyBhbmQgY291bnRzIGFzIGEgYnVpbHQgaW4gc2hpZnQgb2Ygb25lIGJpdC4gIFNvIGV2ZW4KLSAgICAgKiB0aG91Z2ggd2UgbmVlZCB0byBzaGlmdCAzIGJpdHMgdG8gbWFrZSByb29tIGZvciB0aGUgY29tbWFuZCwgd2Ugb25seQotICAgICAqIG5lZWQgdG8gc2hpZnQgdHdpY2UgbW9yZSBiZWNhdXNlIG9mIHRoZSBidWlsdCBpbiBzaGlmdC4KLSAgICAgKi8KLSAgICBtZW1fb2Zmc2V0IDw8PSAyOyAgICAgICAgICAgICAgIC8qIFNoaWZ0IGZvciBjb21tYW5kICovCi0gICAgbWVtX29mZnNldCB8PSBFUFJPTV9XUklURTsgICAgICAvKiBBZGQgY29tbWFuZCAqLworCS8qIFJldmVyc2UgYWRkcmVzcyAqLworCW1lbV9vZmZzZXQgPSBCeXRlUmV2ZXJzZVsweDdGICYgbWVtX29mZnNldF07CiAKLSAgICBlZXByb21fcHV0X2J5dGUgKGFkZHIsIG1lbV9vZmZzZXQsIFNJWkVfQUREUl9PUCk7ICAgLyogT3V0cHV0IGNoaXAgYWRkcmVzcyAqLworCS8qCisJICogTk9URTogVGhlIG1heCBvZmZzZXQgYWRkcmVzcyBpcyAxMjggb3IgaGFsZiB0aGUgcmV2ZXJzYWwgdGFibGUuIFNvCisJICogdGhlIExTQiBpcyBhbHdheXMgemVybyBhbmQgY291bnRzIGFzIGEgYnVpbHQgaW4gc2hpZnQgb2Ygb25lIGJpdC4KKwkgKiBTbyBldmVuIHRob3VnaCB3ZSBuZWVkIHRvIHNoaWZ0IDMgYml0cyB0byBtYWtlIHJvb20gZm9yIHRoZSBjb21tYW5kLAorCSAqIHdlIG9ubHkgbmVlZCB0byBzaGlmdCB0d2ljZSBtb3JlIGJlY2F1c2Ugb2YgdGhlIGJ1aWx0IGluIHNoaWZ0LgorCSAqLwogCi0gICAgZGF0YSA9IEJ5dGVSZXZlcnNlWzB4RkYgJiBkYXRhXTsvKiBSZXZlcnNlIGRhdGEgKi8KLSAgICBlZXByb21fcHV0X2J5dGUgKGFkZHIsIGRhdGEsIE5VTV9PRl9CSVRTKTsgIC8qIE91dHB1dCBjaGlwIGRhdGEgKi8KKwkvKiBTaGlmdCBmb3IgY29tbWFuZCAqLworCW1lbV9vZmZzZXQgPDw9IDI7CisJLyogQWRkIGNvbW1hbmQgKi8KKwltZW1fb2Zmc2V0IHw9IEVQUk9NX1dSSVRFOwogCi0gICAgcGNpX3dyaXRlXzMyICgodV9pbnQzMl90ICopIGFkZHIsIDApOyAgICAgICAvKiBSZW1vdmUgQ2hpcCBTZWxlY3QgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRUVQUk9NICovCisJLyogT3V0cHV0IGNoaXAgYWRkcmVzcyAqLworCWVlcHJvbV9wdXRfYnl0ZShhZGRyLCBtZW1fb2Zmc2V0LCBTSVpFX0FERFJfT1ApOworCisJLyogUmV2ZXJzZSBkYXRhICovCisJZGF0YSA9IEJ5dGVSZXZlcnNlWzB4RkYgJiBkYXRhXTsKKwkvKiBPdXRwdXQgY2hpcCBkYXRhICovCisJZWVwcm9tX3B1dF9ieXRlKGFkZHIsIGRhdGEsIE5VTV9PRl9CSVRTKTsKKworCS8qIFJlbW92ZSBDaGlwIFNlbGVjdCBmcm9tIEVFUFJPTSAqLworCXBjaV93cml0ZV8zMigodV9pbnQzMl90ICopIGFkZHIsIDApOwogCiAvKgotKiogIE11c3Qgc2VlIERhdGEgSW4gYXQgYSBsb3cgc3RhdGUgYmVmb3JlIGNvbXBsZXRpbmcgdGhpcyB0cmFuc2FjdGlvbi4KLSoqCi0qKiAgQWZ0ZXJ3YXJkcywgdGhlIGRhdGEgYml0IHdpbGwgcmV0dXJuIHRvIGEgaGlnaCBzdGF0ZSwgfjYgbXMsIHRlcm1pbmF0aW5nCi0qKiAgdGhlIG9wZXJhdGlvbi4KLSovCi0gICAgcGNpX3dyaXRlXzMyICgodV9pbnQzMl90ICopIGFkZHIsIEVQUk9NX0VOQ1MpOyAgICAgIC8qIFJlLWVuYWJsZSBDaGlwIFNlbGVjdCAqLwotICAgIHRlbXAgPSBwY2lfcmVhZF8zMiAoKHVfaW50MzJfdCAqKSBhZGRyKTsgICAgLyogZGlzY2FyZCBmaXJzdCByZWFkICovCi0gICAgdGVtcCA9IHBjaV9yZWFkXzMyICgodV9pbnQzMl90ICopIGFkZHIpOwotICAgIGlmICh0ZW1wICYgRVBST01fQUNUSVZFX0lOX0JJVCkKLSAgICB7Ci0gICAgICAgIHRlbXAgPSBwY2lfcmVhZF8zMiAoKHVfaW50MzJfdCAqKSBhZGRyKTsKLSAgICAgICAgaWYgKHRlbXAgJiBFUFJPTV9BQ1RJVkVfSU5fQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBwY2lfd3JpdGVfMzIgKCh1X2ludDMyX3QgKikgYWRkciwgMCk7ICAgICAgIC8qIFJlbW92ZSBDaGlwIFNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIEVFUFJPTSAqLwotICAgICAgICAgICAgcmV0dXJuICgxKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb3VudCA9IDEwMDA7Ci0gICAgd2hpbGUgKGNvdW50LS0pCi0gICAgewotICAgICAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgMHgxMDsgdGVtcCsrKQotICAgICAgICAgICAgT1NfdXdhaXRfZHVtbXkgKCk7CisgKiAgTXVzdCBzZWUgRGF0YSBJbiBhdCBhIGxvdyBzdGF0ZSBiZWZvcmUgY29tcGxldGluZyB0aGlzIHRyYW5zYWN0aW9uLgorICoKKyAqICBBZnRlcndhcmRzLCB0aGUgZGF0YSBiaXQgd2lsbCByZXR1cm4gdG8gYSBoaWdoIHN0YXRlLCB+NiBtcywgdGVybWluYXRpbmcKKyAqICB0aGUgb3BlcmF0aW9uLgorICovCisJLyogUmUtZW5hYmxlIENoaXAgU2VsZWN0ICovCisJcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgYWRkciwgRVBST01fRU5DUyk7CisJLyogZGlzY2FyZCBmaXJzdCByZWFkICovCisJdGVtcCA9IHBjaV9yZWFkXzMyKCh1X2ludDMyX3QgKikgYWRkcik7CisJdGVtcCA9IHBjaV9yZWFkXzMyKCh1X2ludDMyX3QgKikgYWRkcik7CisJaWYgKHRlbXAgJiBFUFJPTV9BQ1RJVkVfSU5fQklUKSB7CisJCXRlbXAgPSBwY2lfcmVhZF8zMigodV9pbnQzMl90ICopIGFkZHIpOworCQlpZiAodGVtcCAmIEVQUk9NX0FDVElWRV9JTl9CSVQpIHsKKwkJCS8qIFJlbW92ZSBDaGlwIFNlbGVjdCBmcm9tIEVFUFJPTSAqLworCQkJcGNpX3dyaXRlXzMyKCh1X2ludDMyX3QgKikgYWRkciwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwljb3VudCA9IDEwMDA7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJZm9yICh0ZW1wID0gMDsgdGVtcCA8IDB4MTA7IHRlbXArKykKKwkJCU9TX3V3YWl0X2R1bW15KCk7CiAKLSAgICAgICAgaWYgKHBjaV9yZWFkXzMyICgodV9pbnQzMl90ICopIGFkZHIpICYgRVBST01fQUNUSVZFX0lOX0JJVCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKwkJaWYgKHBjaV9yZWFkXzMyKCh1X2ludDMyX3QgKikgYWRkcikgJiBFUFJPTV9BQ1RJVkVfSU5fQklUKQorCQkJYnJlYWs7CisJfQogCi0gICAgaWYgKGNvdW50ID09IC0xKQotICAgICAgICByZXR1cm4gKDIpOworCWlmIChjb3VudCA9PSAtMSkKKwkJcmV0dXJuIDI7CiAKLSAgICByZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIHBtY0dldEJ1ZmZWYWx1ZSAtIHJlYWQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIGJ1ZmZlcgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1sb25nCi1wbWNHZXRCdWZmVmFsdWUgKGNoYXIgKnB0ciwgaW50IHNpemUpCitzdGF0aWMgbG9uZyBwbWNHZXRCdWZmVmFsdWUoY2hhciAqcHRyLCBpbnQgc2l6ZSkKIHsKLSAgICBsb25nICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgaW50ICAgICAgICAgaW5kZXg7CisJbG9uZyB2YWx1ZSA9IDA7CisJaW50IGluZGV4OwogCi0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgKytpbmRleCkKLSAgICB7Ci0gICAgICAgIHZhbHVlIDw8PSA4OwotICAgICAgICB2YWx1ZSB8PSBwdHJbaW5kZXhdICYgMHhGRjsKLSAgICB9CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgKytpbmRleCkgeworCQl2YWx1ZSA8PD0gODsKKwkJdmFsdWUgfD0gcHRyW2luZGV4XSAmIDB4RkY7CisJfQogCi0gICAgcmV0dXJuIHZhbHVlOworCXJldHVybiB2YWx1ZTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICBwbWNTZXRCdWZmVmFsdWUgLSBzYXZlIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYnVmZmVyCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLXZvaWQKLXBtY1NldEJ1ZmZWYWx1ZSAoY2hhciAqcHRyLCBsb25nIHZhbHVlLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIHBtY1NldEJ1ZmZWYWx1ZShjaGFyICpwdHIsIGxvbmcgdmFsdWUsIGludCBzaXplKQogewotICAgIGludCAgICAgICAgIGluZGV4ID0gc2l6ZTsKKwlpbnQgaW5kZXggPSBzaXplOwogCi0gICAgd2hpbGUgKC0taW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIHB0cltpbmRleF0gPSAoY2hhcikgKHZhbHVlICYgMHhGRik7Ci0gICAgICAgIHZhbHVlID4+PSA4OwotICAgIH0KKwl3aGlsZSAoLS1pbmRleCA+PSAwKSB7CisJCXB0cltpbmRleF0gPSAoY2hhcikodmFsdWUgJiAweEZGKTsKKwkJdmFsdWUgPj49IDg7CisJfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgICAgIHBtY19lZXByb21fcmVhZF9idWZmZXIgLSByZWFkIEVFUFJPTSBkYXRhIGludG8gc3BlY2lmaWVkIGJ1ZmZlcgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiB2b2lkCi1wbWNfZWVwcm9tX3JlYWRfYnVmZmVyIChsb25nIGFkZHIsIGxvbmcgbWVtX29mZnNldCwgY2hhciAqZGVzdF9wdHIsIGludCBzaXplKQorcG1jX2VlcHJvbV9yZWFkX2J1ZmZlcihsb25nIGFkZHIsIGxvbmcgbWVtX29mZnNldCwgY2hhciAqZGVzdF9wdHIsIGludCBzaXplKQogewotICAgIHdoaWxlICgtLXNpemUgPj0gMCkKLSAgICAgICAgKmRlc3RfcHRyKysgPSAoY2hhcikgcG1jX2VlcHJvbV9yZWFkIChhZGRyLCBtZW1fb2Zmc2V0KyspOworCXdoaWxlICgtLXNpemUgPj0gMCkKKwkJKmRlc3RfcHRyKysgPSAoY2hhcilwbWNfZWVwcm9tX3JlYWQoYWRkciwgbWVtX29mZnNldCsrKTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICBwbWNfZWVwcm9tX3dyaXRlX2J1ZmZlciAtIHdyaXRlIEVFUFJPTSBkYXRhIGZyb20gc3BlY2lmaWVkIGJ1ZmZlcgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiB2b2lkCi1wbWNfZWVwcm9tX3dyaXRlX2J1ZmZlciAobG9uZyBhZGRyLCBsb25nIG1lbV9vZmZzZXQsIGNoYXIgKmRlc3RfcHRyLCBpbnQgc2l6ZSkKK3BtY19lZXByb21fd3JpdGVfYnVmZmVyKGxvbmcgYWRkciwgbG9uZyBtZW1fb2Zmc2V0LCBjaGFyICpkZXN0X3B0ciwgaW50IHNpemUpCiB7Ci0gICAgZW5hYmxlX3BtY19lZXByb20gKGFkZHIpOworCWVuYWJsZV9wbWNfZWVwcm9tKGFkZHIpOwogCi0gICAgd2hpbGUgKC0tc2l6ZSA+PSAwKQotICAgICAgICBwbWNfZWVwcm9tX3dyaXRlIChhZGRyLCBtZW1fb2Zmc2V0KyssICpkZXN0X3B0cisrKTsKKwl3aGlsZSAoLS1zaXplID49IDApCisJCXBtY19lZXByb21fd3JpdGUoYWRkciwgbWVtX29mZnNldCsrLCAqZGVzdF9wdHIrKyk7CiAKLSAgICBkaXNhYmxlX3BtY19lZXByb20gKGFkZHIpOworCWRpc2FibGVfcG1jX2VlcHJvbShhZGRyKTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICBwbWNDYWxjQ3JjIC0gY2FsY3VsYXRlIHRoZSBDUkMgZm9yIHRoZSBzZXJpYWwgRUVQUk9NIHN0cnVjdHVyZQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi11X2ludDMyX3QKLXBtY0NhbGNDcmNfVDAxICh2b2lkICpidWZwKQorc3RhdGljIHVfaW50MzJfdCBwbWNDYWxjQ3JjX1QwMSh2b2lkICpidWZwKQogewotICAgIEZMRF9UWVBFMiAgKmJ1ZiA9IGJ1ZnA7Ci0gICAgdV9pbnQzMl90ICAgY3JjOyAgICAgICAgICAgIC8qIENSQyBvZiB0aGUgc3RydWN0dXJlICovCisJRkxEX1RZUEUyICpidWYgPSBidWZwOworCS8qIENSQyBvZiB0aGUgc3RydWN0dXJlICovCisJdV9pbnQzMl90IGNyYzsKIAotICAgIC8qIENhbGMgQ1JDIGZvciB0eXBlIGFuZCBsZW5ndGggZmllbGRzICovCi0gICAgc2JlQ3JjICgKLSAgICAgICAgICAgICh1X2ludDhfdCAqKSAmYnVmLT50eXBlLAotICAgICAgICAgICAgKHVfaW50MzJfdCkgU1RSVUNUX09GRlNFVCAoRkxEX1RZUEUxLCBDcmMzMiksCi0gICAgICAgICAgICAodV9pbnQzMl90KSAwLAotICAgICAgICAgICAgKHVfaW50MzJfdCAqKSAmY3JjKTsKKwkvKiBDYWxjIENSQyBmb3IgdHlwZSBhbmQgbGVuZ3RoIGZpZWxkcyAqLworCXNiZUNyYygodV9pbnQ4X3QgKikgJmJ1Zi0+dHlwZSwKKwkgICAgICAgKHVfaW50MzJfdCkgU1RSVUNUX09GRlNFVChGTERfVFlQRTEsIENyYzMyKSwKKwkgICAgICAgKHVfaW50MzJfdCkgMCwgKHVfaW50MzJfdCAqKSAmY3JjKTsKIAogI2lmZGVmIEVFUFJPTV9UWVBFX0RFQlVHCi0gICAgcHJfaW5mbygic2JlQ3JjOiBjcmMgMSBjYWxjdWxhdGVkIGFzICUwOHhcbiIsIGNyYyk7IC8qIFJMRCBERUJVRyAqLworCS8qIFJMRCBERUJVRyAqLworCXByX2luZm8oInNiZUNyYzogY3JjIDEgY2FsY3VsYXRlZCBhcyAlMDh4XG4iLCBjcmMpOwogI2VuZGlmCi0gICAgcmV0dXJuIH5jcmM7CisJcmV0dXJuIH5jcmM7CiB9CiAKLXVfaW50MzJfdAotcG1jQ2FsY0NyY19UMDIgKHZvaWQgKmJ1ZnApCitzdGF0aWMgdV9pbnQzMl90IHBtY0NhbGNDcmNfVDAyKHZvaWQgKmJ1ZnApCiB7Ci0gICAgRkxEX1RZUEUyICAqYnVmID0gYnVmcDsKLSAgICB1X2ludDMyX3QgICBjcmM7ICAgICAgICAgICAgLyogQ1JDIG9mIHRoZSBzdHJ1Y3R1cmUgKi8KKwlGTERfVFlQRTIgKmJ1ZiA9IGJ1ZnA7CisJLyogQ1JDIG9mIHRoZSBzdHJ1Y3R1cmUgKi8KKwl1X2ludDMyX3QgY3JjOwogCi0gICAgLyogQ2FsYyBDUkMgZm9yIHR5cGUgYW5kIGxlbmd0aCBmaWVsZHMgKi8KLSAgICBzYmVDcmMgKAotICAgICAgICAgICAgKHVfaW50OF90ICopICZidWYtPnR5cGUsCi0gICAgICAgICAgICAodV9pbnQzMl90KSBTVFJVQ1RfT0ZGU0VUIChGTERfVFlQRTIsIENyYzMyKSwKLSAgICAgICAgICAgICh1X2ludDMyX3QpIDAsCi0gICAgICAgICAgICAodV9pbnQzMl90ICopICZjcmMpOworCS8qIENhbGMgQ1JDIGZvciB0eXBlIGFuZCBsZW5ndGggZmllbGRzICovCisJc2JlQ3JjKCh1X2ludDhfdCAqKSAmYnVmLT50eXBlLAorCSAgICAgICAodV9pbnQzMl90KSBTVFJVQ1RfT0ZGU0VUKEZMRF9UWVBFMiwgQ3JjMzIpLAorCSAgICAgICAodV9pbnQzMl90KSAwLCAodV9pbnQzMl90ICopICZjcmMpOwogCi0gICAgLyogQ2FsYyBDUkMgZm9yIHJlbWFpbmluZyBmaWVsZHMgKi8KLSAgICBzYmVDcmMgKAotICAgICAgICAgICAgKHVfaW50OF90ICopICZidWYtPklkWzBdLAotICAgICAgICAgICAgKHVfaW50MzJfdCkgKHNpemVvZiAoRkxEX1RZUEUyKSAtIFNUUlVDVF9PRkZTRVQgKEZMRF9UWVBFMiwgSWQpKSwKLSAgICAgICAgICAgICh1X2ludDMyX3QpIGNyYywKLSAgICAgICAgICAgICh1X2ludDMyX3QgKikgJmNyYyk7CisJLyogQ2FsYyBDUkMgZm9yIHJlbWFpbmluZyBmaWVsZHMgKi8KKwlzYmVDcmMoKHVfaW50OF90ICopICZidWYtPklkWzBdLAorCSAgICAgICAodV9pbnQzMl90KSAoc2l6ZW9mKEZMRF9UWVBFMikgLSBTVFJVQ1RfT0ZGU0VUKEZMRF9UWVBFMiwgSWQpKSwKKwkgICAgICAgKHVfaW50MzJfdCkgY3JjLCAodV9pbnQzMl90ICopICZjcmMpOwogCiAjaWZkZWYgRUVQUk9NX1RZUEVfREVCVUcKLSAgICBwcl9pbmZvKCJzYmVDcmM6IGNyYyAyIGNhbGN1bGF0ZWQgYXMgJTA4eFxuIiwgY3JjKTsgLyogUkxEIERFQlVHICovCisJLyogUkxEIERFQlVHICovCisJcHJfaW5mbygic2JlQ3JjOiBjcmMgMiBjYWxjdWxhdGVkIGFzICUwOHhcbiIsIGNyYyk7CiAjZW5kaWYKLSAgICByZXR1cm4gY3JjOworCXJldHVybiBjcmM7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICAgICAgcG1jX2luaXRfc2VlcHJvbSAtIGluaXRpYWxpemUgdGhlIHNlcmlhbCBFRVBST00gc3RydWN0dXJlCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDg1LDY0ICs0NjgsNjUgQEAKICAqICAgICAgc2VyaWFsIG51bWJlciBmaWVsZC4KICAqLwogCi12b2lkCi1wbWNfaW5pdF9zZWVwcm9tICh1X2ludDMyX3QgYWRkciwgdV9pbnQzMl90IHNlcmlhbE51bSkKK3ZvaWQgcG1jX2luaXRfc2VlcHJvbSh1X2ludDMyX3QgYWRkciwgdV9pbnQzMl90IHNlcmlhbE51bSkKIHsKLSAgICBQUk9NRk9STUFUICBidWZmZXI7ICAgICAgICAgLyogTWVtb3J5IGltYWdlIG9mIHN0cnVjdHVyZSAqLwotICAgIHVfaW50MzJfdCAgIGNyYzsgICAgICAgICAgICAvKiBDUkMgb2Ygc3RydWN0dXJlICovCi0gICAgdGltZV90ICAgICAgY3JlYXRlVGltZTsKKwkvKiBNZW1vcnkgaW1hZ2Ugb2Ygc3RydWN0dXJlICovCisJUFJPTUZPUk1BVCBidWZmZXI7CisJLyogQ1JDIG9mIHN0cnVjdHVyZSAqLworCXVfaW50MzJfdCBjcmM7CisJdGltZV90IGNyZWF0ZVRpbWU7CiAKLSAgICBjcmVhdGVUaW1lID0gZ2V0X3NlY29uZHMgKCk7CisJY3JlYXRlVGltZSA9IGdldF9zZWNvbmRzKCk7CiAKLSAgICAvKiB1c2UgdGVtcGxhdGUgZGF0YSAqLwotICAgIG1lbWNweSgmYnVmZmVyLmZsZFR5cGUyLCBtZmdfdGVtcGxhdGUsIHNpemVvZihidWZmZXIuZmxkVHlwZTIpKTsKKwkvKiB1c2UgdGVtcGxhdGUgZGF0YSAqLworCW1lbWNweSgmYnVmZmVyLmZsZFR5cGUyLCBtZmdfdGVtcGxhdGUsIHNpemVvZihidWZmZXIuZmxkVHlwZTIpKTsKIAotICAgIC8qIFVwZGF0ZSBzZXJpYWwgbnVtYmVyIGZpZWxkIGluIGJ1ZmZlciAqLwotICAgIHBtY1NldEJ1ZmZWYWx1ZSAoJmJ1ZmZlci5mbGRUeXBlMi5TZXJpYWxbM10sIHNlcmlhbE51bSwgMyk7CisJLyogVXBkYXRlIHNlcmlhbCBudW1iZXIgZmllbGQgaW4gYnVmZmVyICovCisJcG1jU2V0QnVmZlZhbHVlKCZidWZmZXIuZmxkVHlwZTIuU2VyaWFsWzNdLCBzZXJpYWxOdW0sIDMpOwogCi0gICAgLyogVXBkYXRlIGNyZWF0ZSB0aW1lIGZpZWxkIGluIGJ1ZmZlciAqLwotICAgIHBtY1NldEJ1ZmZWYWx1ZSAoJmJ1ZmZlci5mbGRUeXBlMi5DcmVhdGVUaW1lWzBdLCBjcmVhdGVUaW1lLCA0KTsKKwkvKiBVcGRhdGUgY3JlYXRlIHRpbWUgZmllbGQgaW4gYnVmZmVyICovCisJcG1jU2V0QnVmZlZhbHVlKCZidWZmZXIuZmxkVHlwZTIuQ3JlYXRlVGltZVswXSwgY3JlYXRlVGltZSwgNCk7CiAKLSAgICAvKiBVcGRhdGUgQ1JDIGZpZWxkIGluIGJ1ZmZlciAqLwotICAgIGNyYyA9IHBtY0NhbGNDcmNfVDAyICgmYnVmZmVyKTsKLSAgICBwbWNTZXRCdWZmVmFsdWUgKCZidWZmZXIuZmxkVHlwZTIuQ3JjMzJbMF0sIGNyYywgNCk7CisJLyogVXBkYXRlIENSQyBmaWVsZCBpbiBidWZmZXIgKi8KKwljcmMgPSBwbWNDYWxjQ3JjX1QwMigmYnVmZmVyKTsKKwlwbWNTZXRCdWZmVmFsdWUoJmJ1ZmZlci5mbGRUeXBlMi5DcmMzMlswXSwgY3JjLCA0KTsKIAogI2lmZGVmIERFQlVHCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoRkxEX1RZUEUyKTsgKytpKQotICAgICAgICBwcl9pbmZvKCJbJTAyWF0gPSAlMDJYXG4iLCBpLCBidWZmZXIuYnl0ZXNbaV0gJiAweEZGKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKEZMRF9UWVBFMik7ICsraSkKKwkJcHJfaW5mbygiWyUwMlhdID0gJTAyWFxuIiwgaSwgYnVmZmVyLmJ5dGVzW2ldICYgMHhGRik7CiAjZW5kaWYKIAotICAgIC8qIFdyaXRlIHN0cnVjdHVyZSB0byBzZXJpYWwgRUVQUk9NICovCi0gICAgcG1jX2VlcHJvbV93cml0ZV9idWZmZXIgKGFkZHIsIEVFX01GRywgKGNoYXIgKikgJmJ1ZmZlciwgc2l6ZW9mIChGTERfVFlQRTIpKTsKKwkvKiBXcml0ZSBzdHJ1Y3R1cmUgdG8gc2VyaWFsIEVFUFJPTSAqLworCXBtY19lZXByb21fd3JpdGVfYnVmZmVyKGFkZHIsIEVFX01GRywgKGNoYXIgKikmYnVmZmVyLAorCQkJCXNpemVvZihGTERfVFlQRTIpKTsKIH0KIAotCi1jaGFyCi1wbWNfdmVyaWZ5X2Nrc3VtICh2b2lkICpidWZwKQorY2hhciBwbWNfdmVyaWZ5X2Nrc3VtKHZvaWQgKmJ1ZnApCiB7Ci0gICAgRkxEX1RZUEUxICAqYnVmMSA9IGJ1ZnA7Ci0gICAgRkxEX1RZUEUyICAqYnVmMiA9IGJ1ZnA7Ci0gICAgdV9pbnQzMl90ICAgY3JjMSwgY3JjMjsgICAgIC8qIENSQyByZWFkIGZyb20gRUVQUk9NICovCisJRkxEX1RZUEUxICpidWYxID0gYnVmcDsKKwlGTERfVFlQRTIgKmJ1ZjIgPSBidWZwOworCS8qIENSQyByZWFkIGZyb20gRUVQUk9NICovCisJdV9pbnQzMl90IGNyYzEsIGNyYzI7CiAKLSAgICAvKiBSZXRyaWV2ZSBjb250ZW50cyBvZiBDUkMgZmllbGQgKi8KLSAgICBjcmMxID0gcG1jR2V0QnVmZlZhbHVlICgmYnVmMS0+Q3JjMzJbMF0sIHNpemVvZiAoYnVmMS0+Q3JjMzIpKTsKKwkvKiBSZXRyaWV2ZSBjb250ZW50cyBvZiBDUkMgZmllbGQgKi8KKwljcmMxID0gcG1jR2V0QnVmZlZhbHVlKCZidWYxLT5DcmMzMlswXSwgc2l6ZW9mKGJ1ZjEtPkNyYzMyKSk7CiAjaWZkZWYgRUVQUk9NX1RZUEVfREVCVUcKLSAgICBwcl9pbmZvKCJFRVBST006IGNoa3N1bSAxIHJlYWRzICAgYXMgJTA4eFxuIiwgY3JjMSk7ICAgICAgICAvKiBSTEQgREVCVUcgKi8KKwkvKiBSTEQgREVCVUcgKi8KKwlwcl9pbmZvKCJFRVBST006IGNoa3N1bSAxIHJlYWRzICAgYXMgJTA4eFxuIiwgY3JjMSk7CiAjZW5kaWYKLSAgICBpZiAoKGJ1ZjEtPnR5cGUgPT0gUFJPTV9GT1JNQVRfVFlQRTEpICYmCi0gICAgICAgIChwbWNDYWxjQ3JjX1QwMSAoKHZvaWQgKikgYnVmMSkgPT0gY3JjMSkpCi0gICAgICAgIHJldHVybiBQUk9NX0ZPUk1BVF9UWVBFMTsgICAvKiBjaGVja3N1bSB0eXBlIDEgdmVyaWZpZWQgKi8KKwlpZiAoKGJ1ZjEtPnR5cGUgPT0gUFJPTV9GT1JNQVRfVFlQRTEpICYmCisJICAgIChwbWNDYWxjQ3JjX1QwMSgodm9pZCAqKWJ1ZjEpID09IGNyYzEpKQorCQlyZXR1cm4gUFJPTV9GT1JNQVRfVFlQRTE7CS8qIGNoZWNrc3VtIHR5cGUgMSB2ZXJpZmllZCAqLwogCi0gICAgY3JjMiA9IHBtY0dldEJ1ZmZWYWx1ZSAoJmJ1ZjItPkNyYzMyWzBdLCBzaXplb2YgKGJ1ZjItPkNyYzMyKSk7CisJY3JjMiA9IHBtY0dldEJ1ZmZWYWx1ZSgmYnVmMi0+Q3JjMzJbMF0sIHNpemVvZihidWYyLT5DcmMzMikpOwogI2lmZGVmIEVFUFJPTV9UWVBFX0RFQlVHCi0gICAgcHJfaW5mbygiRUVQUk9NOiBjaGtzdW0gMiByZWFkcyAgIGFzICUwOHhcbiIsIGNyYzIpOyAgICAgICAgLyogUkxEIERFQlVHICovCisJLyogUkxEIERFQlVHICovCisJcHJfaW5mbygiRUVQUk9NOiBjaGtzdW0gMiByZWFkcyAgIGFzICUwOHhcbiIsIGNyYzIpOwogI2VuZGlmCi0gICAgaWYgKChidWYyLT50eXBlID09IFBST01fRk9STUFUX1RZUEUyKSAmJgotICAgICAgICAocG1jQ2FsY0NyY19UMDIgKCh2b2lkICopIGJ1ZjIpID09IGNyYzIpKQotICAgICAgICByZXR1cm4gUFJPTV9GT1JNQVRfVFlQRTI7ICAgLyogY2hlY2tzdW0gdHlwZSAyIHZlcmlmaWVkICovCisJaWYgKChidWYyLT50eXBlID09IFBST01fRk9STUFUX1RZUEUyKSAmJgorCSAgICAocG1jQ2FsY0NyY19UMDIoKHZvaWQgKilidWYyKSA9PSBjcmMyKSkKKwkJcmV0dXJuIFBST01fRk9STUFUX1RZUEUyOwkvKiBjaGVja3N1bSB0eXBlIDIgdmVyaWZpZWQgKi8KIAotICAgIHJldHVybiBQUk9NX0ZPUk1BVF9Vbms7ICAgICAgICAgLyogZmFpbGVkIHRvIHZhbGlkYXRlICovCisJLyogZmFpbGVkIHRvIHZhbGlkYXRlICovCisJcmV0dXJuIFBST01fRk9STUFUX1VuazsKIH0KLQotCi0vKioqIEVuZC1vZi1GaWxlICoqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzRfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2Rydi5jCmluZGV4IDYyMWE3MjkuLjc2YmViZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzRfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kcnYuYwpAQCAtMTIyLDM1ICsxMjIsNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0KLWNpX3QgICAgICAgKl9faW5pdAotYzRfbmV3ICh2b2lkICpoaSkKLXsKLSAgICBjaV90ICAgICAgICpjaTsKLQotI2lmZGVmIFNCRV9NQVBfREVCVUcKLSAgICBwcl93YXJuaW5nKCJjNF9uZXcoKSBlbnRlcmVkLCBjaSBuZWVkcyAldS5cbiIsCi0gICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBzaXplb2YgKGNpX3QpKTsKLSNlbmRpZgotCi0gICAgY2kgPSAoY2lfdCAqKSBPU19rbWFsbG9jIChzaXplb2YgKGNpX3QpKTsKLSAgICBpZiAoY2kpCi0gICAgewotICAgICAgICBjaS0+aGR3X2luZm8gPSBoaTsKLSAgICAgICAgY2ktPnN0YXRlID0gQ19JTklUOyAgICAgICAgIC8qIG1hcmsgYXMgaGFyZHdhcmUgbm90IGF2YWlsYWJsZSAqLwotICAgICAgICBjaS0+bmV4dCA9IGM0X2xpc3Q7Ci0gICAgICAgIGM0X2xpc3QgPSBjaTsKLSAgICAgICAgY2ktPmJyZG5vID0gY2ktPm5leHQgPyBjaS0+bmV4dC0+YnJkbm8gKyAxIDogMDsKLSAgICB9IGVsc2UKLSAgICAgICAgcHJfd2FybmluZygiZmFpbGVkIENJIG1hbGxvYywgc2l6ZSAldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgc2l6ZW9mIChjaV90KSk7Ci0KLSAgICBpZiAoIUNJKQotICAgICAgICBDSSA9IGNpOyAgICAgICAgICAgICAgICAgICAgLyogREVCVUcsIG9ubHkgYm9hcmQgMCB1c2FnZSAqLwotICAgIHJldHVybiBjaTsKLX0KLQotCiAvKioqCiAgKiBDaGVjayBwb3J0IHN0YXRlIGFuZCBzZXQgTEVEIHN0YXRlcyB1c2luZyB3YXRjaGRvZyBvciBpb2N0bC4uLgogICogYWxzbyBjaGVjayBmb3IgaW4tYmFuZCBTRiBsb29wYmFjayBjb21tYW5kcyAoJiBjYXVzZSByZXN1bHRzIGlmIHRoZXkgYXJlIHRoZXJlKQpAQCAtNDg1LDEyICs0NTYsMTIgQEAKICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBNVVNZQ0NfTkNIQU5TOyBqKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKHBpLT5jaGFuW2pdKQotICAgICAgICAgICAgICAgICAgICBPU19rZnJlZSAocGktPmNoYW5bal0pOyAgICAgLyogZnJlZSBtY2hfdCBzdHJ1Y3QgKi8KKyAgICAgICAgICAgICAgICAgICAga2ZyZWUocGktPmNoYW5bal0pOyAgICAgLyogZnJlZSBtY2hfdCBzdHJ1Y3QgKi8KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE9TX2tmcmVlIChwaS0+cmVncmFtX3NhdmVkKTsKKyAgICAgICAgICAgIGtmcmVlKHBpLT5yZWdyYW1fc2F2ZWQpOwogICAgICAgICB9Ci0gICAgICAgIE9TX2tmcmVlIChjaS0+aXFkX3Bfc2F2ZWQpOwotICAgICAgICBPU19rZnJlZSAoY2kpOworICAgICAgICBrZnJlZShjaS0+aXFkX3Bfc2F2ZWQpOworICAgICAgICBrZnJlZShjaSk7CiAgICAgICAgIGNpID0gbmV4dDsgICAgICAgICAgICAgICAgICAvKiBjbGVhbnVwIG5leHQgYm9hcmQsIGlmIGFueSAqLwogICAgIH0KIH0KQEAgLTYxOSw3ICs1OTAsNyBAQAogICAgICAgICAvKiBhbGxvY2F0ZSBjaGFubmVsIHN0cnVjdHVyZXMgZm9yIHRoaXMgcG9ydCAqLwogICAgICAgICBmb3IgKGogPSAwOyBqIDwgTVVTWUNDX05DSEFOUzsgaisrKQogICAgICAgICB7Ci0gICAgICAgICAgICBjaCA9IE9TX2ttYWxsb2MgKHNpemVvZiAobWNoX3QpKTsKKwkJY2ggPSBremFsbG9jKHNpemVvZihtY2hfdCksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKICAgICAgICAgICAgIGlmIChjaCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwaS0+Y2hhbltqXSA9IGNoOwpAQCAtMTM2OCw4ICsxMzM5LDggQEAKICAgICBjaC0+dHhkX251bSA9IHR4bnVtOwogICAgIGNoLT5yeGl4X2lycV9zcnYgPSAwOwogCi0gICAgY2gtPm1kciA9IE9TX2ttYWxsb2MgKHNpemVvZiAoc3RydWN0IG1kZXNjKSAqIHJ4bnVtKTsKLSAgICBjaC0+bWR0ID0gT1Nfa21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbWRlc2MpICogdHhudW0pOworCWNoLT5tZHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWRlc2MpICogcnhudW0sIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwljaC0+bWR0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1kZXNjKSAqIHR4bnVtLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAgICAgaWYgKGNoLT5wLmNoYW5fbW9kZSA9PSBDRkdfQ0hfUFJPVE9fVFJBTlMpCiAgICAgICAgICAgICAgICB0bXAgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChjeHQxZTFfbWF4X21ydSB8IEVPQklSUV9FTkFCTEUpOwogICAgIGVsc2UKQEAgLTE0NjIsMTAgKzE0MzMsMTAgQEAKICAgICAgICAgaS0tOwogICAgICAgICBPU19tZW1fdG9rZW5fZnJlZSAoY2gtPm1kcltpXS5tZW1fdG9rZW4pOwogICAgIH0KLSAgICBPU19rZnJlZSAoY2gtPm1kdCk7CisgICAga2ZyZWUoY2gtPm1kdCk7CiAgICAgY2gtPm1kdCA9IE5VTEw7CiAgICAgY2gtPnR4ZF9udW0gPSAwOwotICAgIE9TX2tmcmVlIChjaC0+bWRyKTsKKyAgICBrZnJlZShjaC0+bWRyKTsKICAgICBjaC0+bWRyID0gTlVMTDsKICAgICBjaC0+cnhkX251bSA9IDA7CiAgICAgY2gtPnN0YXRlID0gRE9XTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzRfcHJpdmF0ZS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9wcml2YXRlLmgKaW5kZXggZWIyOGYwOS4uNDUxZjEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9wcml2YXRlLmgKQEAgLTI2Miw3ICsyNjIsNyBAQAogICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2WzJdOwogCiAgICAgdW5zaWduZWQgbG9uZyBhZGRyWzJdOwotICAgIHVuc2lnbmVkIGxvbmcgYWRkcl9tYXBwZWRbMl07CisgICAgdm9pZCBfX2lvbWVtICphZGRyX21hcHBlZFsyXTsKICAgICB1bnNpZ25lZCBsb25nIGxlblsyXTsKIAogICAgIHVuaW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZWNvbV9pbmxpbmVfbGludXguaCBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY29tX2lubGluZV9saW51eC5oCmluZGV4IGJhM2ZmM2UuLmY1ODM1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY29tX2lubGluZV9saW51eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY29tX2lubGluZV9saW51eC5oCkBAIC0zOSwyNyArMzksNiBAQAogICogc3lzdGVtIGRlcGVuZGVudCBjYWxsYmFja3MKICAqLwogCi0vKioqKioqKioqKi8KLS8qIG1hbGxvYyAqLwotLyoqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1PU19rbWFsbG9jIChzaXplX3Qgc2l6ZSkKLXsKLSAgICBjaGFyICAgICAgICpwdHIgPSBrbWFsbG9jIChzaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0KLSAgICBpZiAocHRyKQotICAgICAgICBtZW1zZXQgKHB0ciwgMCwgc2l6ZSk7Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1PU19rZnJlZSAodm9pZCAqeCkKLXsKLSAgICBrZnJlZSAoeCk7Ci19Ci0KLQogLyoqKioqKioqKioqKioqKiovCiAvKiBtZW1vcnkgdG9rZW4gKi8KIC8qKioqKioqKioqKioqKioqLwpAQCAtMTk3LDcgKzE3Niw3IEBACiBPU19mcmVlX3dhdGNoZG9nIChzdHJ1Y3Qgd2F0Y2hkb2cgKndkKQogewogICAgIE9TX3N0b3Bfd2F0Y2hkb2cgKHdkKTsKLSAgICBPU19rZnJlZSAod2QpOworICAgIGtmcmVlKHdkKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjcmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY3JjLmMKaW5kZXggODFmYThhMy4uYTUxNzgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjcmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZWNyYy5jCkBAIC0xMDEsNyArMTAxLDggQEAKIAkJdGJsID0gJkNSQ1RhYmxlOwogCQlnZW5DcmNUYWJsZSh0YmwpOwogI2Vsc2UKLQkJdGJsID0gKHVfaW50MzJfdCAqKSBPU19rbWFsbG9jKENSQ19UQUJMRV9FTlRSSUVTICogc2l6ZW9mKHVfaW50MzJfdCkpOworCQl0YmwgPSBremFsbG9jKENSQ19UQUJMRV9FTlRSSUVTICogc2l6ZW9mKHVfaW50MzJfdCksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0YmwpIHsKIAkJCSpyZXN1bHQgPSAwOyAgIC8qIGR1bW15IHVwIHJldHVybiB2YWx1ZSBkdWUgdG8gbWFsbG9jCiAJCQkJCSogZmFpbHVyZSAqLwpAQCAtMTI1LDcgKzEyNiw3IEBACiAKICNpZm5kZWYgU1RBVElDX0NSQ19UQUJMRQogCWNyY1RhYmxlSW5pdCA9IDA7Ci0JT1Nfa2ZyZWUodGJsKTsKKwlrZnJlZSh0YmwpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVwcm9jLmMKaW5kZXggODQwYzY0Ny4uMWMyZTUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVwcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVwcm9jLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAljaGFyICAgICAgICpzcGQ7CiAJc3RydWN0IHNiZV9icmRfaW5mbyAqYmlwOwogCi0JYmlwID0gT1Nfa21hbGxvYyhzaXplb2Yoc3RydWN0IHNiZV9icmRfaW5mbykpOworCWJpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYmVfYnJkX2luZm8pLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFiaXApCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZGdhcC9kZ2FwLmMgYi9kcml2ZXJzL3N0YWdpbmcvZGdhcC9kZ2FwLmMKaW5kZXggYTVmYzNjNy4uMTcwZDZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RnYXAvZGdhcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kZ2FwL2RnYXAuYwpAQCAtMTIsMjEgKzEyLDYgQEAKICAqIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqCi0gKglOT1RFIFRPIExJTlVYIEtFUk5FTCBIQUNLRVJTOiAgRE8gTk9UIFJFRk9STUFUIFRISVMgQ09ERSEKLSAqCi0gKglUaGlzIGlzIHNoYXJlZCBjb2RlIGJldHdlZW4gRGlnaSdzIENWUyBhcmNoaXZlIGFuZCB0aGUKLSAqCUxpbnV4IEtlcm5lbCBzb3VyY2VzLgotICoJQ2hhbmdpbmcgdGhlIHNvdXJjZSBqdXN0IGZvciByZWZvcm1hdHRpbmcgbmVlZGxlc3NseSBicmVha3MKLSAqCW91ciBDVlMgZGlmZiBoaXN0b3J5LgotICoKLSAqCVNlbmQgYW55IGJ1ZyBmaXhlcy9jaGFuZ2VzIHRvOiAgRW5nLkxpbnV4IGF0IGRpZ2kgZG90IGNvbS4KLSAqCVRoYW5rIHlvdS4KLSAqCiAgKi8KIAogLyoKQEAgLTc4LDIxICs2MywxMSBAQAogCiAjaW5jbHVkZSAiZGdhcC5oIgogCi0jZGVmaW5lIGluaXRfTVVURVgoc2VtKSAgICAgICAgIHNlbWFfaW5pdChzZW0sIDEpCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgICAgIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCAxKQotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEaWdpIEludGVybmF0aW9uYWwsIGh0dHA6Ly93d3cuZGlnaS5jb20iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgRGlnaSBJbnRlcm5hdGlvbmFsIEVQQ0EgUENJIGJhc2VkIHByb2R1Y3QgbGluZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoImRnYXAiKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogcHJvdG9zIGZvciB0aGlzIGZpbGUKLSAqCi0gKi8KLQogc3RhdGljIGludCBkZ2FwX3N0YXJ0KHZvaWQpOwogc3RhdGljIHZvaWQgZGdhcF9pbml0X2dsb2JhbHModm9pZCk7CiBzdGF0aWMgaW50IGRnYXBfZm91bmRfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpZCk7CkBAIC0xMDUsNyArODAsNiBAQAogc3RhdGljIGludCBkZ2FwX2RvX3JlbWFwKHN0cnVjdCBib2FyZF90ICpicmQpOwogc3RhdGljIGlycXJldHVybl90IGRnYXBfaW50cihpbnQgaXJxLCB2b2lkICp2b2lkYnJkKTsKIAotLyogT3VyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBpbnQgZGdhcF90dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgdm9pZCBkZ2FwX3R0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGRnYXBfYmxvY2tfdGlsX3JlYWR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMTYxLDkgKzEzNSw5IEBACiBzdGF0aWMgaW50IGRnYXBfZXZlbnQoc3RydWN0IGJvYXJkX3QgKmJkKTsKIAogc3RhdGljIHZvaWQgZGdhcF9wb2xsX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0YXRpYyB2b2lkIGRnYXBfY21kYihzdHJ1Y3QgY2hhbm5lbF90ICpjaCwgdWNoYXIgY21kLCB1Y2hhciBieXRlMSwKLQkJCXVjaGFyIGJ5dGUyLCB1aW50IG5jbWRzKTsKLXN0YXRpYyB2b2lkIGRnYXBfY21kdyhzdHJ1Y3QgY2hhbm5lbF90ICpjaCwgdWNoYXIgY21kLCB1MTYgd29yZCwgdWludCBuY21kcyk7CitzdGF0aWMgdm9pZCBkZ2FwX2NtZGIoc3RydWN0IGNoYW5uZWxfdCAqY2gsIHU4IGNtZCwgdTggYnl0ZTEsCisJCQl1OCBieXRlMiwgdWludCBuY21kcyk7CitzdGF0aWMgdm9pZCBkZ2FwX2NtZHcoc3RydWN0IGNoYW5uZWxfdCAqY2gsIHU4IGNtZCwgdTE2IHdvcmQsIHVpbnQgbmNtZHMpOwogc3RhdGljIHZvaWQgZGdhcF93bW92ZShzdHJ1Y3QgY2hhbm5lbF90ICpjaCwgY2hhciAqYnVmLCB1aW50IGNudCk7CiBzdGF0aWMgaW50IGRnYXBfcGFyYW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBkZ2FwX3Bhcml0eV9zY2FuKHN0cnVjdCBjaGFubmVsX3QgKmNoLCB1bnNpZ25lZCBjaGFyICpjYnVmLApAQCAtMTc2LDcgKzE1MCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgZGdhcF9nZXR0b2soY2hhciAqKmluLCBzdHJ1Y3QgY25vZGUgKnApOwogc3RhdGljIGNoYXIgKmRnYXBfZ2V0d29yZChjaGFyICoqaW4pOwotc3RhdGljIGNoYXIgKmRnYXBfc2F2ZXN0cmluZyhjaGFyICpzKTsKIHN0YXRpYyBzdHJ1Y3QgY25vZGUgKmRnYXBfbmV3bm9kZShpbnQgdCk7CiBzdGF0aWMgaW50IGRnYXBfY2hlY2tub2RlKHN0cnVjdCBjbm9kZSAqcCk7CiBzdGF0aWMgdm9pZCBkZ2FwX2VycihjaGFyICpzKTsKQEAgLTIwMiw3ICsxNzUsNyBAQAogLyoKICAqIEZ1bmN0aW9uIHByb3RvdHlwZXMgZnJvbSBkZ2FwX3BhcnNlLmgKICAqLwotc3RhdGljIGludCBkZ2FwX3BhcnNlZmlsZShjaGFyICoqaW4sIGludCBSZW1vdmUpOworc3RhdGljIGludCBkZ2FwX3BhcnNlZmlsZShjaGFyICoqaW4sIGludCByZW1vdmUpOwogc3RhdGljIHN0cnVjdCBjbm9kZSAqZGdhcF9maW5kX2NvbmZpZyhpbnQgdHlwZSwgaW50IGJ1cywgaW50IHNsb3QpOwogc3RhdGljIHVpbnQgZGdhcF9jb25maWdfZ2V0X251bV9wcnRzKHN0cnVjdCBib2FyZF90ICpiZCk7CiBzdGF0aWMgY2hhciAqZGdhcF9jcmVhdGVfY29uZmlnX3N0cmluZyhzdHJ1Y3QgYm9hcmRfdCAqYmQsIGNoYXIgKnN0cmluZyk7CkBAIC0yMTAsMjIgKzE4MywyMSBAQAogc3RhdGljIHVpbnQgZGdhcF9jb25maWdfZ2V0X2FsdHBpbihzdHJ1Y3QgYm9hcmRfdCAqYmQpOwogCiBzdGF0aWMgaW50IGRnYXBfbXNfc2xlZXAodWxvbmcgbXMpOwotc3RhdGljIHZvaWQgZGdhcF9kb19iaW9zX2xvYWQoc3RydWN0IGJvYXJkX3QgKmJyZCwgY29uc3QgdWNoYXIgKnViaW9zLCBpbnQgbGVuKTsKLXN0YXRpYyB2b2lkIGRnYXBfZG9fZmVwX2xvYWQoc3RydWN0IGJvYXJkX3QgKmJyZCwgY29uc3QgdWNoYXIgKnVmZXAsIGludCBsZW4pOworc3RhdGljIHZvaWQgZGdhcF9kb19iaW9zX2xvYWQoc3RydWN0IGJvYXJkX3QgKmJyZCwgY29uc3QgdTggKnViaW9zLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIGRnYXBfZG9fZmVwX2xvYWQoc3RydWN0IGJvYXJkX3QgKmJyZCwgY29uc3QgdTggKnVmZXAsIGludCBsZW4pOwogI2lmZGVmIERJR0lfQ09OQ0VOVFJBVE9SU19TVVBQT1JURUQKLXN0YXRpYyB2b2lkIGRnYXBfZG9fY29uY19sb2FkKHN0cnVjdCBib2FyZF90ICpicmQsIHVjaGFyICp1YWRkciwgaW50IGxlbik7CitzdGF0aWMgdm9pZCBkZ2FwX2RvX2NvbmNfbG9hZChzdHJ1Y3QgYm9hcmRfdCAqYnJkLCB1OCAqdWFkZHIsIGludCBsZW4pOwogI2VuZGlmCiBzdGF0aWMgaW50IGRnYXBfYWZ0ZXJfY29uZmlnX2xvYWRlZChpbnQgYm9hcmQpOwogc3RhdGljIGludCBkZ2FwX2ZpbmFsaXplX2JvYXJkX2luaXQoc3RydWN0IGJvYXJkX3QgKmJyZCk7CiAKIHN0YXRpYyB2b2lkIGRnYXBfZ2V0X3ZwZChzdHJ1Y3QgYm9hcmRfdCAqYnJkKTsKIHN0YXRpYyB2b2lkIGRnYXBfZG9fcmVzZXRfYm9hcmQoc3RydWN0IGJvYXJkX3QgKmJyZCk7Ci1zdGF0aWMgaW50IGRnYXBfZG9fd2FpdF9mb3JfYmlvcyhzdHJ1Y3QgYm9hcmRfdCAqYnJkKTsKLXN0YXRpYyBpbnQgZGdhcF9kb193YWl0X2Zvcl9mZXAoc3RydWN0IGJvYXJkX3QgKmJyZCk7CitzdGF0aWMgaW50IGRnYXBfdGVzdF9iaW9zKHN0cnVjdCBib2FyZF90ICpicmQpOworc3RhdGljIGludCBkZ2FwX3Rlc3RfZmVwKHN0cnVjdCBib2FyZF90ICpicmQpOwogc3RhdGljIGludCBkZ2FwX3R0eV9yZWdpc3Rlcl9wb3J0cyhzdHJ1Y3QgYm9hcmRfdCAqYnJkKTsKIHN0YXRpYyBpbnQgZGdhcF9maXJtd2FyZV9sb2FkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgY2FyZF90eXBlKTsKIAotLyogRHJpdmVyIHVubG9hZCBmdW5jdGlvbiAqLwogc3RhdGljIHZvaWQgZGdhcF9jbGVhbnVwX21vZHVsZSh2b2lkKTsKIAogbW9kdWxlX2V4aXQoZGdhcF9jbGVhbnVwX21vZHVsZSk7CkBAIC0yMzMsMzUgKzIwNSwyNyBAQAogLyoKICAqIEZpbGUgb3BlcmF0aW9ucyBwZXJtaXR0ZWQgb24gQ29udHJvbC9NYW5hZ2VtZW50IG1ham9yLgogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBEZ2FwQm9hcmRGb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGdhcF9ib2FyZF9mb3BzID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogfTsKIAotLyoKLSAqIEdsb2JhbHMKLSAqLwotc3RhdGljIHVpbnQgZGdhcF9OdW1Cb2FyZHM7Ci1zdGF0aWMgc3RydWN0IGJvYXJkX3QgKmRnYXBfQm9hcmRbTUFYQk9BUkRTXTsKK3N0YXRpYyB1aW50IGRnYXBfbnVtYm9hcmRzOworc3RhdGljIHN0cnVjdCBib2FyZF90ICpkZ2FwX2JvYXJkW01BWEJPQVJEU107CiBzdGF0aWMgdWxvbmcgZGdhcF9wb2xsX2NvdW50ZXI7CiBzdGF0aWMgY2hhciAqZGdhcF9jb25maWdfYnVmOwogc3RhdGljIGludCBkZ2FwX2RyaXZlcl9zdGF0ZSA9IERSSVZFUl9JTklUSUFMSVpFRDsKLURFRklORV9TUElOTE9DSyhkZ2FwX2RsX2xvY2spOwogc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IGRnYXBfZGxfd2FpdDsKLXN0YXRpYyBpbnQgZGdhcF9kbF9hY3Rpb247CiBzdGF0aWMgaW50IGRnYXBfcG9sbF90aWNrID0gMjA7CS8qIFBvbGwgaW50ZXJ2YWwgLSAyMCBtcyAqLwogCi0vKgotICogU3RhdGljIHZhcnMuCi0gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmRnYXBfY2xhc3M7CiAKLXN0YXRpYyBzdHJ1Y3QgYm9hcmRfdCAqZGdhcF9Cb2FyZHNCeU1ham9yWzI1Nl07CitzdGF0aWMgc3RydWN0IGJvYXJkX3QgKmRnYXBfYm9hcmRzX2J5X21ham9yWzI1Nl07CiBzdGF0aWMgdWludCBkZ2FwX2NvdW50ID0gNTAwOwogCiAvKgogICogUG9sbGVyIHN0dWZmCiAgKi8KLURFRklORV9TUElOTE9DSyhkZ2FwX3BvbGxfbG9jayk7CS8qIFBvbGwgc2NoZWR1bGluZyBsb2NrICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRnYXBfcG9sbF9sb2NrKTsJLyogUG9sbCBzY2hlZHVsaW5nIGxvY2sgKi8KIHN0YXRpYyB1bG9uZyBkZ2FwX3BvbGxfdGltZTsJCS8qIFRpbWUgb2YgbmV4dCBwb2xsICovCiBzdGF0aWMgdWludCBkZ2FwX3BvbGxfc3RvcDsJCS8qIFVzZWQgdG8gdGVsbCBwb2xsZXIgdG8gc3RvcCAqLwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGRnYXBfcG9sbF90aW1lcjsKQEAgLTMxMCwxMiArMjc0LDEyIEBACiAgKi8KIHN0cnVjdCBib2FyZF9pZCB7CiAJdWludCBjb25maWdfdHlwZTsKLQl1Y2hhciAqbmFtZTsKKwl1OCAqbmFtZTsKIAl1aW50IG1heHBvcnRzOwogCXVpbnQgZHBhdHlwZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYm9hcmRfaWQgZGdhcF9JZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYm9hcmRfaWQgZGdhcF9pZHNbXSA9IHsKIAl7IFBQQ00sICAgICAgICBQQ0lfREVWX1hFTV9OQU1FLCAgICAgNjQsIChUX1BDWE18VF9QQ0xJVEV8VF9QQ0lCVVMpIH0sCiAJeyBQQ1gsICAgICAgICAgUENJX0RFVl9DWF9OQU1FLCAgICAgMTI4LCAoVF9DWHxUX1BDSUJVUykgICAgICAgICAgICB9LAogCXsgUENYLCAgICAgICAgIFBDSV9ERVZfQ1hfSUJNX05BTUUsIDEyOCwgKFRfQ1h8VF9QQ0lCVVMpICAgICAgICAgICAgfSwKQEAgLTM0MiwzMyArMzA2LDMzIEBACiB9OwogCiBzdHJ1Y3QgZmlybXdhcmVfaW5mbyB7Ci0JdWNoYXIgKmNvbmZfbmFtZTsgICAgICAgLyogZGdhcC5jb25mICovCi0JdWNoYXIgKmJpb3NfbmFtZTsJLyogQklPUyBmaWxlbmFtZSAqLwotCXVjaGFyICpmZXBfbmFtZTsJLyogRkVQICBmaWxlbmFtZSAqLwotCXVjaGFyICpjb25fbmFtZTsJLyogQ29uY2VudHJhdG9yIGZpbGVuYW1lICBGSVhNRSovCi0JaW50IG51bTsgICAgICAgICAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyICovCisJdTggKmNvbmZfbmFtZTsgIC8qIGRnYXAuY29uZiAqLworCXU4ICpiaW9zX25hbWU7CS8qIEJJT1MgZmlsZW5hbWUgKi8KKwl1OCAqZmVwX25hbWU7CS8qIEZFUCAgZmlsZW5hbWUgKi8KKwl1OCAqY29uX25hbWU7CS8qIENvbmNlbnRyYXRvciBmaWxlbmFtZSAgRklYTUUqLworCWludCBudW07ICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgKi8KIH07CiAKIC8qCiAgKiBGaXJtd2FyZSAtIEJJT1MsIEZFUCwgYW5kIENPTkMgZmlsZW5hbWVzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmlybXdhcmVfaW5mbyBmd19pbmZvW10gPSB7Ci0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9zeGJpb3MuYmluIiwgICJkZ2FwL3N4ZmVwLmJpbiIsICAwLCAwIH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9jeHBiaW9zLmJpbiIsICJkZ2FwL2N4cGZlcC5iaW4iLCAwLCAxIH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9jeHBiaW9zLmJpbiIsICJkZ2FwL2N4cGZlcC5iaW4iLCAwLCAyIH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9wY2liaW9zLmJpbiIsICJkZ2FwL3BjaWZlcC5iaW4iLCAwLCAzIH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCA0IH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCA1IH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCA2IH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCA3IH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCA4IH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCA5IH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCAxMCB9LAotCXsgImRnYXAvZGdhcC5jb25mIiwgImRnYXAveHJiaW9zLmJpbiIsICAiZGdhcC94cmZlcC5iaW4iLCAgMCwgMTEgfSwKLQl7ICJkZ2FwL2RnYXAuY29uZiIsICJkZ2FwL3hyYmlvcy5iaW4iLCAgImRnYXAveHJmZXAuYmluIiwgIDAsIDEyIH0sCi0JeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICAwLCAxMyB9LAotCXsgImRnYXAvZGdhcC5jb25mIiwgImRnYXAvc3hiaW9zLmJpbiIsICAiZGdhcC9zeGZlcC5iaW4iLCAgMCwgMTQgfSwKLQl7MCx9CisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9zeGJpb3MuYmluIiwgICJkZ2FwL3N4ZmVwLmJpbiIsICBOVUxMLCAwIH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9jeHBiaW9zLmJpbiIsICJkZ2FwL2N4cGZlcC5iaW4iLCBOVUxMLCAxIH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9jeHBiaW9zLmJpbiIsICJkZ2FwL2N4cGZlcC5iaW4iLCBOVUxMLCAyIH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC9wY2liaW9zLmJpbiIsICJkZ2FwL3BjaWZlcC5iaW4iLCBOVUxMLCAzIH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCA0IH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCA1IH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCA2IH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCA3IH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCA4IH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCA5IH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCAxMCB9LAorCXsgImRnYXAvZGdhcC5jb25mIiwgImRnYXAveHJiaW9zLmJpbiIsICAiZGdhcC94cmZlcC5iaW4iLCAgTlVMTCwgMTEgfSwKKwl7ICJkZ2FwL2RnYXAuY29uZiIsICJkZ2FwL3hyYmlvcy5iaW4iLCAgImRnYXAveHJmZXAuYmluIiwgIE5VTEwsIDEyIH0sCisJeyAiZGdhcC9kZ2FwLmNvbmYiLCAiZGdhcC94cmJpb3MuYmluIiwgICJkZ2FwL3hyZmVwLmJpbiIsICBOVUxMLCAxMyB9LAorCXsgImRnYXAvZGdhcC5jb25mIiwgImRnYXAvc3hiaW9zLmJpbiIsICAiZGdhcC9zeGZlcC5iaW4iLCAgTlVMTCwgMTQgfSwKKwl7TlVMTCx9CiB9OwogCiAvKgpAQCAtMzk0LDcgKzM1OCw3IEBACiAgKiAxIHN0b3AgYml0LgogICovCiAKLXN0YXRpYyBzdHJ1Y3Qga3Rlcm1pb3MgRGdhcERlZmF1bHRUZXJtaW9zID0geworc3RhdGljIHN0cnVjdCBrdGVybWlvcyBkZ2FwX2RlZmF1bHRfdGVybWlvcyA9IHsKIAkuY19pZmxhZyA9CShERUZBVUxUX0lGTEFHUyksCS8qIGlmbGFncyAqLwogCS5jX29mbGFnID0JKERFRkFVTFRfT0ZMQUdTKSwJLyogb2ZsYWdzICovCiAJLmNfY2ZsYWcgPQkoREVGQVVMVF9DRkxBR1MpLAkvKiBjZmxhZ3MgKi8KQEAgLTQzNCw4ICszOTgsOCBAQAogc3RhdGljIGNoYXIgZGdhcF9jd29yZFtNQVhDV09SRF07CiAKIHN0cnVjdCB0b2tsaXN0IHsKLQlpbnQJdG9rZW47Ci0JY2hhcgkqc3RyaW5nOworCWludCB0b2tlbjsKKwljaGFyICpzdHJpbmc7CiB9OwogCiBzdGF0aWMgc3RydWN0IHRva2xpc3QgZGdhcF90bGlzdFtdID0gewpAQCAtNTAyLDcgKzQ2Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZGdhcF9pbml0X21vZHVsZSh2b2lkKQogewotCWludCByYyA9IDA7CisJaW50IHJjOwogCiAJcHJfaW5mbygiJXMsIERpZ2kgSW50ZXJuYXRpb25hbCBQYXJ0IE51bWJlciAlc1xuIiwgREdfTkFNRSwgREdfUEFSVCk7CiAKQEAgLTUzNSw3ICs0OTksNyBAQAogICovCiBzdGF0aWMgaW50IGRnYXBfc3RhcnQodm9pZCkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKIApAQCAtNTQ1LDcgKzUwOSw3IEBACiAJICovCiAJZGdhcF9pbml0X2dsb2JhbHMoKTsKIAotCWRnYXBfTnVtQm9hcmRzID0gMDsKKwlkZ2FwX251bWJvYXJkcyA9IDA7CiAKIAlwcl9pbmZvKCJGb3IgdGhlIHRvb2xzIHBhY2thZ2UgcGxlYXNlIHZpc2l0IGh0dHA6Ly93d3cuZGlnaS5jb21cbiIpOwogCkBAIC01NTYsNyArNTIwLDcgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIG1hbmFnZW1lbnQvZHBhIGRldmljZXMKIAkgKi8KLQlyYyA9IHJlZ2lzdGVyX2NocmRldihESUdJX0RHQVBfTUFKT1IsICJkZ2FwIiwgJkRnYXBCb2FyZEZvcHMpOworCXJjID0gcmVnaXN0ZXJfY2hyZGV2KERJR0lfREdBUF9NQUpPUiwgImRnYXAiLCAmZGdhcF9ib2FyZF9mb3BzKTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKQEAgLTYwMiwyNCArNTY2LDIzIEBACiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRnYXBfZHJpdmVyKTsKIH0KIAotLyogcmV0dXJucyBjb3VudCAoPj0gMCksIG9yIG5lZ2F0aXZlIG9uIGVycm9yICovCiBzdGF0aWMgaW50IGRnYXBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IHJjOwogCi0JLyogd2FrZSB1cCBhbmQgZW5hYmxlIGRldmljZSAqLwotCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGRnYXBfbnVtYm9hcmRzID49IE1BWEJPQVJEUykKKwkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChyYyA8IDApIHsKLQkJcmMgPSAtRUlPOwotCX0gZWxzZSB7Ci0JCXJjID0gZGdhcF9wcm9iZTEocGRldiwgZW50LT5kcml2ZXJfZGF0YSk7Ci0JCWlmIChyYyA9PSAwKSB7Ci0JCQlkZ2FwX051bUJvYXJkcysrOwotCQkJcmMgPSBkZ2FwX2Zpcm13YXJlX2xvYWQocGRldiwgZW50LT5kcml2ZXJfZGF0YSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gLUVJTzsKKworCXJjID0gZGdhcF9wcm9iZTEocGRldiwgZW50LT5kcml2ZXJfZGF0YSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlkZ2FwX251bWJvYXJkcysrOworCXJldHVybiBkZ2FwX2Zpcm13YXJlX2xvYWQocGRldiwgZW50LT5kcml2ZXJfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgZGdhcF9wcm9iZTEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBjYXJkX3R5cGUpCkBAIC02NTUsMTUgKzYxOCwxMyBAQAogCWNsYXNzX2Rlc3Ryb3koZGdhcF9jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYoRElHSV9ER0FQX01BSk9SLCAiZGdhcCIpOwogCi0Ja2ZyZWUoZGdhcF9jb25maWdfYnVmKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkZ2FwX051bUJvYXJkczsgKytpKSB7Ci0JCWRnYXBfcmVtb3ZlX3BvcnRzX3N5c2ZpbGVzKGRnYXBfQm9hcmRbaV0pOwotCQlkZ2FwX3R0eV91bmluaXQoZGdhcF9Cb2FyZFtpXSk7Ci0JCWRnYXBfY2xlYW51cF9ib2FyZChkZ2FwX0JvYXJkW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGdhcF9udW1ib2FyZHM7ICsraSkgeworCQlkZ2FwX3JlbW92ZV9wb3J0c19zeXNmaWxlcyhkZ2FwX2JvYXJkW2ldKTsKKwkJZGdhcF90dHlfdW5pbml0KGRnYXBfYm9hcmRbaV0pOworCQlkZ2FwX2NsZWFudXBfYm9hcmQoZGdhcF9ib2FyZFtpXSk7CiAJfQogCi0JaWYgKGRnYXBfTnVtQm9hcmRzKQorCWlmIChkZ2FwX251bWJvYXJkcykKIAkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkZ2FwX2RyaXZlcik7CiB9CiAKQEAgLTY3NCw3ICs2MzUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBkZ2FwX2NsZWFudXBfYm9hcmQoc3RydWN0IGJvYXJkX3QgKmJyZCkKIHsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAlpZiAoIWJyZCB8fCBicmQtPm1hZ2ljICE9IERHQVBfQk9BUkRfTUFHSUMpCiAJCXJldHVybjsKQEAgLTcwMyw3ICs2NjQsNyBAQAogCWtmcmVlKGJyZC0+ZmxpcGJ1Zik7CiAJa2ZyZWUoYnJkLT5mbGlwZmxhZ2J1Zik7CiAKLQlkZ2FwX0JvYXJkW2JyZC0+Ym9hcmRudW1dID0gTlVMTDsKKwlkZ2FwX2JvYXJkW2JyZC0+Ym9hcmRudW1dID0gTlVMTDsKIAogCWtmcmVlKGJyZCk7CiB9CkBAIC03MTcsMjggKzY3OCwyOCBAQAogewogCXN0cnVjdCBib2FyZF90ICpicmQ7CiAJdW5zaWduZWQgaW50IHBjaV9pcnE7Ci0JaW50IGkgPSAwOworCWludCBpOwogCiAJLyogZ2V0IHRoZSBib2FyZCBzdHJ1Y3R1cmUgYW5kIHByZXAgaXQgKi8KIAlicmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYm9hcmRfdCksIEdGUF9LRVJORUwpOwogCWlmICghYnJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRnYXBfQm9hcmRbZGdhcF9OdW1Cb2FyZHNdID0gYnJkOworCWRnYXBfYm9hcmRbZGdhcF9udW1ib2FyZHNdID0gYnJkOwogCiAJLyogc3RvcmUgdGhlIGluZm8gZm9yIHRoZSBib2FyZCB3ZSd2ZSBmb3VuZCAqLwogCWJyZC0+bWFnaWMgPSBER0FQX0JPQVJEX01BR0lDOwotCWJyZC0+Ym9hcmRudW0gPSBkZ2FwX051bUJvYXJkczsKKwlicmQtPmJvYXJkbnVtID0gZGdhcF9udW1ib2FyZHM7CiAJYnJkLT5maXJzdG1pbm9yID0gMDsKIAlicmQtPnZlbmRvciA9IGRnYXBfcGNpX3RibFtpZF0udmVuZG9yOwogCWJyZC0+ZGV2aWNlID0gZGdhcF9wY2lfdGJsW2lkXS5kZXZpY2U7CiAJYnJkLT5wZGV2ID0gcGRldjsKIAlicmQtPnBjaV9idXMgPSBwZGV2LT5idXMtPm51bWJlcjsKIAlicmQtPnBjaV9zbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOwotCWJyZC0+bmFtZSA9IGRnYXBfSWRzW2lkXS5uYW1lOwotCWJyZC0+bWF4cG9ydHMgPSBkZ2FwX0lkc1tpZF0ubWF4cG9ydHM7Ci0JYnJkLT50eXBlID0gZGdhcF9JZHNbaWRdLmNvbmZpZ190eXBlOwotCWJyZC0+ZHBhdHlwZSA9IGRnYXBfSWRzW2lkXS5kcGF0eXBlOworCWJyZC0+bmFtZSA9IGRnYXBfaWRzW2lkXS5uYW1lOworCWJyZC0+bWF4cG9ydHMgPSBkZ2FwX2lkc1tpZF0ubWF4cG9ydHM7CisJYnJkLT50eXBlID0gZGdhcF9pZHNbaWRdLmNvbmZpZ190eXBlOworCWJyZC0+ZHBhdHlwZSA9IGRnYXBfaWRzW2lkXS5kcGF0eXBlOwogCWJyZC0+ZHBhc3RhdHVzID0gQkRfTk9GRVA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYnJkLT5zdGF0ZV93YWl0KTsKIApAQCAtODE5LDkgKzc4MCw4IEBACiAJaWYgKGkpCiAJCWJyZC0+c3RhdGUgPSBCT0FSRF9GQUlMRUQ7CiAKLQlwcl9pbmZvKCJkZ2FwOiBib2FyZCAlZDogJXMgKHJldiAlZCksIGlycSAlbGQsICVzXG4iLAotCQlkZ2FwX051bUJvYXJkcywgYnJkLT5uYW1lLCBicmQtPnJldiwgYnJkLT5pcnEsCi0JCWJyZC0+c3RhdGUgPyAiTk9UIFJFQURZXDAiIDogIlJFQURZXDAiKTsKKwlwcl9pbmZvKCJkZ2FwOiBib2FyZCAlZDogJXMgKHJldiAlZCksIGlycSAlbGRcbiIsCisJCWRnYXBfbnVtYm9hcmRzLCBicmQtPm5hbWUsIGJyZC0+cmV2LCBicmQtPmlycSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg1NiwxNCArODE2LDE1IEBACiAKIHN0YXRpYyBpbnQgZGdhcF9maXJtd2FyZV9sb2FkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgY2FyZF90eXBlKQogewotCXN0cnVjdCBib2FyZF90ICpicmQgPSBkZ2FwX0JvYXJkW2RnYXBfTnVtQm9hcmRzIC0gMV07CisJc3RydWN0IGJvYXJkX3QgKmJyZCA9IGRnYXBfYm9hcmRbZGdhcF9udW1ib2FyZHMgLSAxXTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNoYXIgKnRtcF9wdHI7CiAJaW50IHJldDsKIAogCWRnYXBfZ2V0X3ZwZChicmQpOwogCWRnYXBfZG9fcmVzZXRfYm9hcmQoYnJkKTsKIAotCWlmIChmd19pbmZvW2NhcmRfdHlwZV0uY29uZl9uYW1lKSB7CisJaWYgKChmd19pbmZvW2NhcmRfdHlwZV0uY29uZl9uYW1lKSAmJiAhZGdhcF9jb25maWdfYnVmKSB7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19pbmZvW2NhcmRfdHlwZV0uY29uZl9uYW1lLAogCQkJCQkgJnBkZXYtPmRldik7CiAJCWlmIChyZXQpIHsKQEAgLTg3MSwyMCArODMyLDI4IEBACiAJCQkJZndfaW5mb1tjYXJkX3R5cGVdLmNvbmZfbmFtZSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisKKwkJZGdhcF9jb25maWdfYnVmID0ga3phbGxvYyhmdy0+c2l6ZSArIDEsIEdGUF9LRVJORUwpOwogCQlpZiAoIWRnYXBfY29uZmlnX2J1ZikgewotCQkJZGdhcF9jb25maWdfYnVmID0ga21hbGxvYyhmdy0+c2l6ZSArIDEsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFkZ2FwX2NvbmZpZ19idWYpIHsKLQkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAogCQltZW1jcHkoZGdhcF9jb25maWdfYnVmLCBmdy0+ZGF0YSwgZnctPnNpemUpOwogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJZGdhcF9jb25maWdfYnVmW2Z3LT5zaXplICsgMV0gPSAnXDAnOwogCi0JCWlmIChkZ2FwX3BhcnNlZmlsZSgmZGdhcF9jb25maWdfYnVmLCBUUlVFKSAhPSAwKQorCQkvKgorCQkgKiBwcmVzZXJ2ZSBkZ2FwX2NvbmZpZ19idWYKKwkJICogYXMgZGdhcF9wYXJzZWZpbGUgd291bGQKKwkJICogb3RoZXJ3aXNlIGFsdGVyIGl0LgorCQkgKi8KKwkJdG1wX3B0ciA9IGRnYXBfY29uZmlnX2J1ZjsKKworCQlpZiAoZGdhcF9wYXJzZWZpbGUoJnRtcF9wdHIsIFRSVUUpICE9IDApIHsKKwkJCWtmcmVlKGRnYXBfY29uZmlnX2J1Zik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlrZnJlZShkZ2FwX2NvbmZpZ19idWYpOwogCX0KIAogCXJldCA9IGRnYXBfYWZ0ZXJfY29uZmlnX2xvYWRlZChicmQtPmJvYXJkbnVtKTsKQEAgLTkxMSw4ICs4ODAsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGdhcF90dHlfcmVnaXN0ZXIoYnJkKTsKLQlkZ2FwX2ZpbmFsaXplX2JvYXJkX2luaXQoYnJkKTsKKwlyZXQgPSBkZ2FwX3R0eV9yZWdpc3RlcihicmQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkZ2FwX2ZpbmFsaXplX2JvYXJkX2luaXQoYnJkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGZ3X2luZm9bY2FyZF90eXBlXS5iaW9zX25hbWUpIHsKIAkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2luZm9bY2FyZF90eXBlXS5iaW9zX25hbWUsCkBAIC05MjYsOCArOTAwLDkgQEAKIAkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKIAkJLyogV2FpdCBmb3IgQklPUyB0byB0ZXN0IGJvYXJkLi4uICovCi0JCWlmICghZGdhcF9kb193YWl0X2Zvcl9iaW9zKGJyZCkpCi0JCQlyZXR1cm4gLUVOWElPOworCQlyZXQgPSBkZ2FwX3Rlc3RfYmlvcyhicmQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAoZndfaW5mb1tjYXJkX3R5cGVdLmZlcF9uYW1lKSB7CkBAIC05NDIsOCArOTE3LDkgQEAKIAkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKIAkJLyogV2FpdCBmb3IgRkVQIHRvIGxvYWQgb24gYm9hcmQuLi4gKi8KLQkJaWYgKCFkZ2FwX2RvX3dhaXRfZm9yX2ZlcChicmQpKQotCQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0ID0gZGdhcF90ZXN0X2ZlcChicmQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKICNpZmRlZiBESUdJX0NPTkNFTlRSQVRPUlNfU1VQUE9SVEVECkBAIC05OTksNyArOTc1LDcgQEAKIHN0YXRpYyBpbnQgZGdhcF9kb19yZW1hcChzdHJ1Y3QgYm9hcmRfdCAqYnJkKQogewogCWlmICghYnJkIHx8IGJyZC0+bWFnaWMgIT0gREdBUF9CT0FSRF9NQUdJQykKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIC1FSU87CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihicmQtPm1lbWJhc2UsIDB4MjAwMDAwLCAiZGdhcCIpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEwNzcsMTAgKzEwNTMsMTAgQEAKIAkgKiBPdGhlcndpc2UsIHVzZSBvdXIgbmV3IHRhc2tsZXQgYmFzZWQgcG9sbGVyLCB3aGljaCBzaG91bGQKIAkgKiBzcGVlZCB0aGluZ3MgdXAgZm9yIG11bHRpcGxlIGJvYXJkcy4KIAkgKi8KLQlpZiAoKGRnYXBfTnVtQm9hcmRzID09IDEpIHx8IChudW1fb25saW5lX2NwdXMoKSA8PSAxKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgZGdhcF9OdW1Cb2FyZHM7IGkrKykgeworCWlmICgoZGdhcF9udW1ib2FyZHMgPT0gMSkgfHwgKG51bV9vbmxpbmVfY3B1cygpIDw9IDEpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZ2FwX251bWJvYXJkczsgaSsrKSB7CiAKLQkJCWJyZCA9IGRnYXBfQm9hcmRbaV07CisJCQlicmQgPSBkZ2FwX2JvYXJkW2ldOwogCiAJCQlpZiAoYnJkLT5zdGF0ZSA9PSBCT0FSRF9GQUlMRUQpCiAJCQkJY29udGludWU7CkBAIC0xMDkzLDggKzEwNjksOCBAQAogCQkgKiBHbyB0aHJ1IGVhY2ggYm9hcmQsIGtpY2tpbmcgb2ZmIGEKIAkJICogdGFza2xldCBmb3IgZWFjaCBpZiBuZWVkZWQKIAkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBkZ2FwX051bUJvYXJkczsgaSsrKSB7Ci0JCQlicmQgPSBkZ2FwX0JvYXJkW2ldOworCQlmb3IgKGkgPSAwOyBpIDwgZGdhcF9udW1ib2FyZHM7IGkrKykgeworCQkJYnJkID0gZGdhcF9ib2FyZFtpXTsKIAogCQkJLyoKIAkJCSAqIEF0dGVtcHQgdG8gZ3JhYiB0aGUgYm9hcmQgbG9jay4KQEAgLTExODksMTUgKzExNjUsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgZGdhcF9pbml0X2dsb2JhbHModm9pZCkKIHsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYQk9BUkRTOyBpKyspCi0JCWRnYXBfQm9hcmRbaV0gPSBOVUxMOworCQlkZ2FwX2JvYXJkW2ldID0gTlVMTDsKIAogCWluaXRfdGltZXIoJmRnYXBfcG9sbF90aW1lcik7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZ2FwX2RsX3dhaXQpOwotCWRnYXBfZGxfYWN0aW9uID0gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTIzMyw4NiArMTIwOCwxMDUgQEAKICAqLwogc3RhdGljIGludCBkZ2FwX3R0eV9yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfdCAqYnJkKQogewotCWludCByYyA9IDA7CisJaW50IHJjOwogCi0JYnJkLT5TZXJpYWxEcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE1BWFBPUlRTKTsKKwlicmQtPnNlcmlhbF9kcml2ZXIgPSB0dHlfYWxsb2NfZHJpdmVyKE1BWFBPUlRTLCAwKTsKKwlpZiAoSVNfRVJSKGJyZC0+c2VyaWFsX2RyaXZlcikpCisJCXJldHVybiBQVFJfRVJSKGJyZC0+c2VyaWFsX2RyaXZlcik7CiAKLQlzbnByaW50ZihicmQtPlNlcmlhbE5hbWUsIE1BWFRUWU5BTUVMRU4sICJ0dHlfZGdhcF8lZF8iLCBicmQtPmJvYXJkbnVtKTsKLQlicmQtPlNlcmlhbERyaXZlci0+bmFtZSA9IGJyZC0+U2VyaWFsTmFtZTsKLQlicmQtPlNlcmlhbERyaXZlci0+bmFtZV9iYXNlID0gMDsKLQlicmQtPlNlcmlhbERyaXZlci0+bWFqb3IgPSAwOwotCWJyZC0+U2VyaWFsRHJpdmVyLT5taW5vcl9zdGFydCA9IDA7Ci0JYnJkLT5TZXJpYWxEcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotCWJyZC0+U2VyaWFsRHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCWJyZC0+U2VyaWFsRHJpdmVyLT5pbml0X3Rlcm1pb3MgPSBEZ2FwRGVmYXVsdFRlcm1pb3M7Ci0JYnJkLT5TZXJpYWxEcml2ZXItPmRyaXZlcl9uYW1lID0gRFJWU1RSOwotCWJyZC0+U2VyaWFsRHJpdmVyLT5mbGFncyA9IChUVFlfRFJJVkVSX1JFQUxfUkFXIHwKKwlzbnByaW50ZihicmQtPnNlcmlhbF9uYW1lLCBNQVhUVFlOQU1FTEVOLCAidHR5X2RnYXBfJWRfIiwKKwkJIGJyZC0+Ym9hcmRudW0pOworCWJyZC0+c2VyaWFsX2RyaXZlci0+bmFtZSA9IGJyZC0+c2VyaWFsX25hbWU7CisJYnJkLT5zZXJpYWxfZHJpdmVyLT5uYW1lX2Jhc2UgPSAwOworCWJyZC0+c2VyaWFsX2RyaXZlci0+bWFqb3IgPSAwOworCWJyZC0+c2VyaWFsX2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOworCWJyZC0+c2VyaWFsX2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CisJYnJkLT5zZXJpYWxfZHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOworCWJyZC0+c2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gZGdhcF9kZWZhdWx0X3Rlcm1pb3M7CisJYnJkLT5zZXJpYWxfZHJpdmVyLT5kcml2ZXJfbmFtZSA9IERSVlNUUjsKKwlicmQtPnNlcmlhbF9kcml2ZXItPmZsYWdzID0gKFRUWV9EUklWRVJfUkVBTF9SQVcgfAogCQkJCSAgICBUVFlfRFJJVkVSX0RZTkFNSUNfREVWIHwKIAkJCQkgICAgVFRZX0RSSVZFUl9IQVJEV0FSRV9CUkVBSyk7CiAKIAkvKiBUaGUga2VybmVsIHdhbnRzIHNwYWNlIHRvIHN0b3JlIHBvaW50ZXJzIHRvIHR0eV9zdHJ1Y3RzICovCi0JYnJkLT5TZXJpYWxEcml2ZXItPnR0eXMgPQorCWJyZC0+c2VyaWFsX2RyaXZlci0+dHR5cyA9CiAJCWt6YWxsb2MoTUFYUE9SVFMgKiBzaXplb2Yoc3RydWN0IHR0eV9zdHJ1Y3QgKiksIEdGUF9LRVJORUwpOwotCWlmICghYnJkLT5TZXJpYWxEcml2ZXItPnR0eXMpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghYnJkLT5zZXJpYWxfZHJpdmVyLT50dHlzKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NlcmlhbF9kcnY7CisJfQogCiAJLyoKIAkgKiBFbnRyeSBwb2ludHMgZm9yIGRyaXZlci4gIENhbGxlZCBieSB0aGUga2VybmVsIGZyb20KIAkgKiB0dHlfaW8uYyBhbmQgbl90dHkuYy4KIAkgKi8KLQl0dHlfc2V0X29wZXJhdGlvbnMoYnJkLT5TZXJpYWxEcml2ZXIsICZkZ2FwX3R0eV9vcHMpOworCXR0eV9zZXRfb3BlcmF0aW9ucyhicmQtPnNlcmlhbF9kcml2ZXIsICZkZ2FwX3R0eV9vcHMpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBkb2luZyB0cmFuc3BhcmVudCBwcmludCwgd2UgaGF2ZSB0byBkbyBhbGwgb2YgdGhlIGFib3ZlCiAJICogYWdhaW4sIHNlcGFyYXRlbHkgc28gd2UgZG9uJ3QgZ2V0IHRoZSBMRCBjb25mdXNlZCBhYm91dCB3aGF0IG1ham9yCiAJICogd2UgYXJlIHdoZW4gd2UgZ2V0IGludG8gdGhlIGRnYXBfdHR5X29wZW4oKSByb3V0aW5lLgogCSAqLwotCWJyZC0+UHJpbnREcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE1BWFBPUlRTKTsKKwlicmQtPnByaW50X2RyaXZlciA9IHR0eV9hbGxvY19kcml2ZXIoTUFYUE9SVFMsIDApOworCWlmIChJU19FUlIoYnJkLT5wcmludF9kcml2ZXIpKSB7CisJCXJjID0gUFRSX0VSUihicmQtPnByaW50X2RyaXZlcik7CisJCWdvdG8gZnJlZV9zZXJpYWxfZHJ2OworCX0KIAotCXNucHJpbnRmKGJyZC0+UHJpbnROYW1lLCBNQVhUVFlOQU1FTEVOLCAicHJfZGdhcF8lZF8iLCBicmQtPmJvYXJkbnVtKTsKLQlicmQtPlByaW50RHJpdmVyLT5uYW1lID0gYnJkLT5QcmludE5hbWU7Ci0JYnJkLT5QcmludERyaXZlci0+bmFtZV9iYXNlID0gMDsKLQlicmQtPlByaW50RHJpdmVyLT5tYWpvciA9IDA7Ci0JYnJkLT5QcmludERyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwotCWJyZC0+UHJpbnREcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotCWJyZC0+UHJpbnREcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JYnJkLT5QcmludERyaXZlci0+aW5pdF90ZXJtaW9zID0gRGdhcERlZmF1bHRUZXJtaW9zOwotCWJyZC0+UHJpbnREcml2ZXItPmRyaXZlcl9uYW1lID0gRFJWU1RSOwotCWJyZC0+UHJpbnREcml2ZXItPmZsYWdzID0gKFRUWV9EUklWRVJfUkVBTF9SQVcgfAorCXNucHJpbnRmKGJyZC0+cHJpbnRfbmFtZSwgTUFYVFRZTkFNRUxFTiwgInByX2RnYXBfJWRfIiwKKwkJIGJyZC0+Ym9hcmRudW0pOworCWJyZC0+cHJpbnRfZHJpdmVyLT5uYW1lID0gYnJkLT5wcmludF9uYW1lOworCWJyZC0+cHJpbnRfZHJpdmVyLT5uYW1lX2Jhc2UgPSAwOworCWJyZC0+cHJpbnRfZHJpdmVyLT5tYWpvciA9IDA7CisJYnJkLT5wcmludF9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMDsKKwlicmQtPnByaW50X2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CisJYnJkLT5wcmludF9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJYnJkLT5wcmludF9kcml2ZXItPmluaXRfdGVybWlvcyA9IGRnYXBfZGVmYXVsdF90ZXJtaW9zOworCWJyZC0+cHJpbnRfZHJpdmVyLT5kcml2ZXJfbmFtZSA9IERSVlNUUjsKKwlicmQtPnByaW50X2RyaXZlci0+ZmxhZ3MgPSAoVFRZX0RSSVZFUl9SRUFMX1JBVyB8CiAJCQkJICAgVFRZX0RSSVZFUl9EWU5BTUlDX0RFViB8CiAJCQkJICAgVFRZX0RSSVZFUl9IQVJEV0FSRV9CUkVBSyk7CiAKIAkvKiBUaGUga2VybmVsIHdhbnRzIHNwYWNlIHRvIHN0b3JlIHBvaW50ZXJzIHRvIHR0eV9zdHJ1Y3RzICovCi0JYnJkLT5QcmludERyaXZlci0+dHR5cyA9CisJYnJkLT5wcmludF9kcml2ZXItPnR0eXMgPQogCQlremFsbG9jKE1BWFBPUlRTICogc2l6ZW9mKHN0cnVjdCB0dHlfc3RydWN0ICopLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJyZC0+UHJpbnREcml2ZXItPnR0eXMpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghYnJkLT5wcmludF9kcml2ZXItPnR0eXMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfcHJpbnRfZHJ2OworCX0KIAogCS8qCiAJICogRW50cnkgcG9pbnRzIGZvciBkcml2ZXIuICBDYWxsZWQgYnkgdGhlIGtlcm5lbCBmcm9tCiAJICogdHR5X2lvLmMgYW5kIG5fdHR5LmMuCiAJICovCi0JdHR5X3NldF9vcGVyYXRpb25zKGJyZC0+UHJpbnREcml2ZXIsICZkZ2FwX3R0eV9vcHMpOworCXR0eV9zZXRfb3BlcmF0aW9ucyhicmQtPnByaW50X2RyaXZlciwgJmRnYXBfdHR5X29wcyk7CiAKLQlpZiAoIWJyZC0+ZGdhcF9NYWpvcl9TZXJpYWxfUmVnaXN0ZXJlZCkgewotCQkvKiBSZWdpc3RlciB0dHkgZGV2aWNlcyAqLwotCQlyYyA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoYnJkLT5TZXJpYWxEcml2ZXIpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCQlicmQtPmRnYXBfTWFqb3JfU2VyaWFsX1JlZ2lzdGVyZWQgPSBUUlVFOwotCQlkZ2FwX0JvYXJkc0J5TWFqb3JbYnJkLT5TZXJpYWxEcml2ZXItPm1ham9yXSA9IGJyZDsKLQkJYnJkLT5kZ2FwX1NlcmlhbF9NYWpvciA9IGJyZC0+U2VyaWFsRHJpdmVyLT5tYWpvcjsKLQl9CisJLyogUmVnaXN0ZXIgdHR5IGRldmljZXMgKi8KKwlyYyA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoYnJkLT5zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGZyZWVfcHJpbnRfZHJ2OwogCi0JaWYgKCFicmQtPmRnYXBfTWFqb3JfVHJhbnNwYXJlbnRQcmludF9SZWdpc3RlcmVkKSB7Ci0JCS8qIFJlZ2lzdGVyIFRyYW5zcGFyZW50IFByaW50IGRldmljZXMgKi8KLQkJcmMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGJyZC0+UHJpbnREcml2ZXIpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCQlicmQtPmRnYXBfTWFqb3JfVHJhbnNwYXJlbnRQcmludF9SZWdpc3RlcmVkID0gVFJVRTsKLQkJZGdhcF9Cb2FyZHNCeU1ham9yW2JyZC0+UHJpbnREcml2ZXItPm1ham9yXSA9IGJyZDsKLQkJYnJkLT5kZ2FwX1RyYW5zcGFyZW50UHJpbnRfTWFqb3IgPSBicmQtPlByaW50RHJpdmVyLT5tYWpvcjsKLQl9CisJLyogUmVnaXN0ZXIgVHJhbnNwYXJlbnQgUHJpbnQgZGV2aWNlcyAqLworCXJjID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihicmQtPnByaW50X2RyaXZlcik7CisJaWYgKHJjIDwgMCkKKwkJZ290byB1bnJlZ2lzdGVyX3NlcmlhbF9kcnY7CisKKwlicmQtPmRnYXBfbWFqb3Jfc2VyaWFsX3JlZ2lzdGVyZWQgPSBUUlVFOworCWRnYXBfYm9hcmRzX2J5X21ham9yW2JyZC0+c2VyaWFsX2RyaXZlci0+bWFqb3JdID0gYnJkOworCWJyZC0+ZGdhcF9zZXJpYWxfbWFqb3IgPSBicmQtPnNlcmlhbF9kcml2ZXItPm1ham9yOworCisJYnJkLT5kZ2FwX21ham9yX3RyYW5zcGFyZW50X3ByaW50X3JlZ2lzdGVyZWQgPSBUUlVFOworCWRnYXBfYm9hcmRzX2J5X21ham9yW2JyZC0+cHJpbnRfZHJpdmVyLT5tYWpvcl0gPSBicmQ7CisJYnJkLT5kZ2FwX3RyYW5zcGFyZW50X3ByaW50X21ham9yID0gYnJkLT5wcmludF9kcml2ZXItPm1ham9yOworCisJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXJfc2VyaWFsX2RydjoKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYnJkLT5zZXJpYWxfZHJpdmVyKTsKK2ZyZWVfcHJpbnRfZHJ2OgorCXB1dF90dHlfZHJpdmVyKGJyZC0+cHJpbnRfZHJpdmVyKTsKK2ZyZWVfc2VyaWFsX2RydjoKKwlwdXRfdHR5X2RyaXZlcihicmQtPnNlcmlhbF9kcml2ZXIpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTMyNywxNSArMTMyMSwxNSBAQAogewogCWludCBpOwogCWludCB0bHc7Ci0JdWludCB0cnVlX2NvdW50ID0gMDsKLQl1Y2hhciAqdmFkZHI7Ci0JdWNoYXIgbW9kZW0gPSAwOworCXVpbnQgdHJ1ZV9jb3VudDsKKwl1OCBfX2lvbWVtICp2YWRkcjsKKwl1OCBtb2RlbTsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKLQlzdHJ1Y3QgYnNfdCAqYnM7Ci0Jc3RydWN0IGNtX3QgKmNtOworCXN0cnVjdCBic190IF9faW9tZW0gKmJzOworCXN0cnVjdCBjbV90IF9faW9tZW0gKmNtOwogCiAJaWYgKCFicmQpCi0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRUlPOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIGJvYXJkIHN0cnVjdHVyZSBlbGVtZW50cy4KQEAgLTEzNzMsNyArMTM2Nyw3IEBACiAJCWlmICghYnJkLT5uYXN5bmMpIHsKIAkJCWJyZC0+c3RhdGUgPSBCT0FSRF9GQUlMRUQ7CiAJCQlicmQtPmRwYXN0YXR1cyA9IEJEX05PRkVQOwotCQkJcmV0dXJuIC1FTlhJTzsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCkBAIC0xMzg0LDcgKzEzNzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBicmQtPm5hc3luYzsgaSsrKSB7CiAJCWlmICghYnJkLT5jaGFubmVsc1tpXSkgewogCQkJYnJkLT5jaGFubmVsc1tpXSA9Ci0JCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGNoYW5uZWxfdCksIEdGUF9BVE9NSUMpOworCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFubmVsX3QpLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghYnJkLT5jaGFubmVsc1tpXSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMTM5Myw4ICsxMzg3LDggQEAKIAljaCA9IGJyZC0+Y2hhbm5lbHNbMF07CiAJdmFkZHIgPSBicmQtPnJlX21hcF9tZW1iYXNlOwogCi0JYnMgPSAoc3RydWN0IGJzX3QgKikgKCh1bG9uZykgdmFkZHIgKyBDSEFOQlVGKTsKLQljbSA9IChzdHJ1Y3QgY21fdCAqKSAoKHVsb25nKSB2YWRkciArIENNREJVRik7CisJYnMgPSAoc3RydWN0IGJzX3QgX19pb21lbSAqKSAoKHVsb25nKSB2YWRkciArIENIQU5CVUYpOworCWNtID0gKHN0cnVjdCBjbV90IF9faW9tZW0gKikgKCh1bG9uZykgdmFkZHIgKyBDTURCVUYpOwogCiAJYnJkLT5iZF9icyA9IGJzOwogCkBAIC0xNDM3LDggKzE0MzEsOCBAQAogCQkJY2gtPmNoX2Rzcgk9IERNX0RTUjsKIAkJfQogCi0JCWNoLT5jaF90YWRkciA9IHZhZGRyICsgKChjaC0+Y2hfYnMtPnR4X3NlZykgPDwgNCk7Ci0JCWNoLT5jaF9yYWRkciA9IHZhZGRyICsgKChjaC0+Y2hfYnMtPnJ4X3NlZykgPDwgNCk7CisJCWNoLT5jaF90YWRkciA9IHZhZGRyICsgKGlvcmVhZDE2KCYoY2gtPmNoX2JzLT50eF9zZWcpKSA8PCA0KTsKKwkJY2gtPmNoX3JhZGRyID0gdmFkZHIgKyAoaW9yZWFkMTYoJihjaC0+Y2hfYnMtPnJ4X3NlZykpIDw8IDQpOwogCQljaC0+Y2hfdHhfd2luID0gMDsKIAkJY2gtPmNoX3J4X3dpbiA9IDA7CiAJCWNoLT5jaF90c2l6ZSA9IHJlYWR3KCYoY2gtPmNoX2JzLT50eF9tYXgpKSArIDE7CkBAIC0xNDY4LDcgKzE0NjIsNiBAQAogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaC0+Y2hfZmxhZ3Nfd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5jaF90dW4udW5fZmxhZ3Nfd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5jaF9wdW4udW5fZmxhZ3Nfd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5jaF9zbmlmZl93YWl0KTsKIAogCQkvKiBUdXJuIG9uIGFsbCBtb2RlbSBpbnRlcnJ1cHRzIGZvciBub3cgKi8KIAkJbW9kZW0gPSAoRE1fQ0QgfCBETV9EU1IgfCBETV9DVFMgfCBETV9SSSk7CkBAIC0xNDk4LDE2MCArMTQ5MSwzOSBAQAogc3RhdGljIHZvaWQgZGdhcF90dHlfdW5pbml0KHN0cnVjdCBib2FyZF90ICpicmQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCWludCBpID0gMDsKKwlpbnQgaTsKIAotCWlmIChicmQtPmRnYXBfTWFqb3JfU2VyaWFsX1JlZ2lzdGVyZWQpIHsKLQkJZGdhcF9Cb2FyZHNCeU1ham9yW2JyZC0+U2VyaWFsRHJpdmVyLT5tYWpvcl0gPSBOVUxMOwotCQlicmQtPmRnYXBfU2VyaWFsX01ham9yID0gMDsKKwlpZiAoYnJkLT5kZ2FwX21ham9yX3NlcmlhbF9yZWdpc3RlcmVkKSB7CisJCWRnYXBfYm9hcmRzX2J5X21ham9yW2JyZC0+c2VyaWFsX2RyaXZlci0+bWFqb3JdID0gTlVMTDsKKwkJYnJkLT5kZ2FwX3NlcmlhbF9tYWpvciA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCBicmQtPm5hc3luYzsgaSsrKSB7Ci0JCQl0dHlfcG9ydF9kZXN0cm95KCZicmQtPlNlcmlhbFBvcnRzW2ldKTsKKwkJCXR0eV9wb3J0X2Rlc3Ryb3koJmJyZC0+c2VyaWFsX3BvcnRzW2ldKTsKIAkJCWRldiA9IGJyZC0+Y2hhbm5lbHNbaV0tPmNoX3R1bi51bl9zeXNmczsKIAkJCWRnYXBfcmVtb3ZlX3R0eV9zeXNmcyhkZXYpOwotCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGJyZC0+U2VyaWFsRHJpdmVyLCBpKTsKKwkJCXR0eV91bnJlZ2lzdGVyX2RldmljZShicmQtPnNlcmlhbF9kcml2ZXIsIGkpOwogCQl9Ci0JCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihicmQtPlNlcmlhbERyaXZlcik7Ci0JCWtmcmVlKGJyZC0+U2VyaWFsRHJpdmVyLT50dHlzKTsKLQkJYnJkLT5TZXJpYWxEcml2ZXItPnR0eXMgPSBOVUxMOwotCQlwdXRfdHR5X2RyaXZlcihicmQtPlNlcmlhbERyaXZlcik7Ci0JCWtmcmVlKGJyZC0+U2VyaWFsUG9ydHMpOwotCQlicmQtPmRnYXBfTWFqb3JfU2VyaWFsX1JlZ2lzdGVyZWQgPSBGQUxTRTsKKwkJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGJyZC0+c2VyaWFsX2RyaXZlcik7CisJCXB1dF90dHlfZHJpdmVyKGJyZC0+c2VyaWFsX2RyaXZlcik7CisJCWtmcmVlKGJyZC0+c2VyaWFsX3BvcnRzKTsKKwkJYnJkLT5kZ2FwX21ham9yX3NlcmlhbF9yZWdpc3RlcmVkID0gRkFMU0U7CiAJfQogCi0JaWYgKGJyZC0+ZGdhcF9NYWpvcl9UcmFuc3BhcmVudFByaW50X1JlZ2lzdGVyZWQpIHsKLQkJZGdhcF9Cb2FyZHNCeU1ham9yW2JyZC0+UHJpbnREcml2ZXItPm1ham9yXSA9IE5VTEw7Ci0JCWJyZC0+ZGdhcF9UcmFuc3BhcmVudFByaW50X01ham9yID0gMDsKKwlpZiAoYnJkLT5kZ2FwX21ham9yX3RyYW5zcGFyZW50X3ByaW50X3JlZ2lzdGVyZWQpIHsKKwkJZGdhcF9ib2FyZHNfYnlfbWFqb3JbYnJkLT5wcmludF9kcml2ZXItPm1ham9yXSA9IE5VTEw7CisJCWJyZC0+ZGdhcF90cmFuc3BhcmVudF9wcmludF9tYWpvciA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCBicmQtPm5hc3luYzsgaSsrKSB7Ci0JCQl0dHlfcG9ydF9kZXN0cm95KCZicmQtPlByaW50ZXJQb3J0c1tpXSk7CisJCQl0dHlfcG9ydF9kZXN0cm95KCZicmQtPnByaW50ZXJfcG9ydHNbaV0pOwogCQkJZGV2ID0gYnJkLT5jaGFubmVsc1tpXS0+Y2hfcHVuLnVuX3N5c2ZzOwogCQkJZGdhcF9yZW1vdmVfdHR5X3N5c2ZzKGRldik7Ci0JCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoYnJkLT5QcmludERyaXZlciwgaSk7CisJCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoYnJkLT5wcmludF9kcml2ZXIsIGkpOwogCQl9Ci0JCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihicmQtPlByaW50RHJpdmVyKTsKLQkJa2ZyZWUoYnJkLT5QcmludERyaXZlci0+dHR5cyk7Ci0JCWJyZC0+UHJpbnREcml2ZXItPnR0eXMgPSBOVUxMOwotCQlwdXRfdHR5X2RyaXZlcihicmQtPlByaW50RHJpdmVyKTsKLQkJa2ZyZWUoYnJkLT5QcmludGVyUG9ydHMpOwotCQlicmQtPmRnYXBfTWFqb3JfVHJhbnNwYXJlbnRQcmludF9SZWdpc3RlcmVkID0gRkFMU0U7CisJCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihicmQtPnByaW50X2RyaXZlcik7CisJCXB1dF90dHlfZHJpdmVyKGJyZC0+cHJpbnRfZHJpdmVyKTsKKwkJa2ZyZWUoYnJkLT5wcmludGVyX3BvcnRzKTsKKwkJYnJkLT5kZ2FwX21ham9yX3RyYW5zcGFyZW50X3ByaW50X3JlZ2lzdGVyZWQgPSBGQUxTRTsKIAl9CiB9CiAKLSNkZWZpbmUgVE1QQlVGTEVOICgxMDI0KQotLyoKLSAqIGRnYXBfc25pZmYgLSBEdW1wIGRhdGEgb3V0IHRvIHRoZSAic25pZmYiIGJ1ZmZlciBpZiB0aGUKLSAqIHByb2Mgc25pZmYgZmlsZSBpcyBvcGVuZWQuLi4KLSAqLwotc3RhdGljIHZvaWQgZGdhcF9zbmlmZl9ub3dhaXRfbm9sb2NrKHN0cnVjdCBjaGFubmVsX3QgKmNoLCB1Y2hhciAqdGV4dCwKLQkJCQkgICAgIHVjaGFyICpidWYsIGludCBsZW4pCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JaW50IG47Ci0JaW50IHI7Ci0JaW50IG5idWY7Ci0JaW50IGk7Ci0JaW50IHRtcGJ1ZmxlbjsKLQljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOwotCWNoYXIgKnAgPSB0bXBidWY7Ci0JaW50IHRvb19tdWNoX2RhdGE7Ci0KLQkvKiBMZWF2ZSBpZiBzbmlmZiBub3Qgb3BlbiAqLwotCWlmICghKGNoLT5jaF9zbmlmZl9mbGFncyAmIFNOSUZGX09QRU4pKQotCQlyZXR1cm47Ci0KLQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQotCS8qIENyZWF0ZSBvdXIgaGVhZGVyIGZvciBkYXRhIGR1bXAgKi8KLQlwICs9IHNwcmludGYocCwgIjwlbGQgJWxkPjwlcz48IiwgdHYudHZfc2VjLCB0di50dl91c2VjLCB0ZXh0KTsKLQl0bXBidWZsZW4gPSBwIC0gdG1wYnVmOwotCi0JZG8gewotCQl0b29fbXVjaF9kYXRhID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuICYmIHRtcGJ1ZmxlbiA8IChUTVBCVUZMRU4gLSA0KTsgaSsrKSB7Ci0JCQlwICs9IHNwcmludGYocCwgIiUwMnggIiwgKmJ1Zik7Ci0JCQlidWYrKzsKLQkJCXRtcGJ1ZmxlbiA9IHAgLSB0bXBidWY7Ci0JCX0KLQotCQlpZiAodG1wYnVmbGVuIDwgKFRNUEJVRkxFTiAtIDQpKSB7Ci0JCQlpZiAoaSA+IDApCi0JCQkJcCArPSBzcHJpbnRmKHAgLSAxLCAiJXNcbiIsICI+Iik7Ci0JCQllbHNlCi0JCQkJcCArPSBzcHJpbnRmKHAsICIlc1xuIiwgIj4iKTsKLQkJfSBlbHNlIHsKLQkJCXRvb19tdWNoX2RhdGEgPSAxOwotCQkJbGVuIC09IGk7Ci0JCX0KLQotCQluYnVmID0gc3RybGVuKHRtcGJ1Zik7Ci0JCXAgPSB0bXBidWY7Ci0KLQkJLyoKLQkJICogIExvb3Agd2hpbGUgZGF0YSByZW1haW5zLgotCQkgKi8KLQkJd2hpbGUgKG5idWYgPiAwICYmIGNoLT5jaF9zbmlmZl9idWYpIHsKLQkJCS8qCi0JCQkgKiAgRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHNwYWNlIGxlZnQgaW4gdGhlCi0JCQkgKiAgYnVmZmVyLiAgSWYgdGhlcmUncyBub25lLCB3YWl0IHVudGlsIHNvbWUgYXBwZWFycy4KLQkJCSAqLwotCQkJbiA9IChjaC0+Y2hfc25pZmZfb3V0IC0gY2gtPmNoX3NuaWZmX2luIC0gMSkgJgotCQkJICAgICBTTklGRl9NQVNLOwotCi0JCQkvKgotCQkJICogSWYgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCB0byB3cml0ZSB0byBpbiBvdXIgc25pZmYKLQkJCSAqIGJ1ZmZlciwgd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIGRyb3AgdGhlIGRhdGEuCi0JCQkgKiBXZSAqY2Fubm90KiBzbGVlcCBoZXJlIHdhaXRpbmcgZm9yIHNwYWNlLCBiZWNhdXNlCi0JCQkgKiB0aGlzIGZ1bmN0aW9uIHdhcyBwcm9iYWJseSBjYWxsZWQgYnkgdGhlCi0JCQkgKiBpbnRlcnJ1cHQvdGltZXIgcm91dGluZXMhCi0JCQkgKi8KLQkJCWlmIChuID09IDApCi0JCQkJcmV0dXJuOwotCi0JCQkvKgotCQkJICogQ29weSBhcyBtdWNoIGRhdGEgYXMgd2lsbCBmaXQuCi0JCQkgKi8KLQotCQkJaWYgKG4gPiBuYnVmKQotCQkJCW4gPSBuYnVmOwotCi0JCQlyID0gU05JRkZfTUFYIC0gY2gtPmNoX3NuaWZmX2luOwotCi0JCQlpZiAociA8PSBuKSB7Ci0JCQkJbWVtY3B5KGNoLT5jaF9zbmlmZl9idWYgKwotCQkJCSAgICAgICBjaC0+Y2hfc25pZmZfaW4sIHAsIHIpOwotCi0JCQkJbiAtPSByOwotCQkJCWNoLT5jaF9zbmlmZl9pbiA9IDA7Ci0JCQkJcCArPSByOwotCQkJCW5idWYgLT0gcjsKLQkJCX0KLQotCQkJbWVtY3B5KGNoLT5jaF9zbmlmZl9idWYgKyBjaC0+Y2hfc25pZmZfaW4sIHAsIG4pOwotCi0JCQljaC0+Y2hfc25pZmZfaW4gKz0gbjsKLQkJCXAgKz0gbjsKLQkJCW5idWYgLT0gbjsKLQotCQkJLyoKLQkJCSAqICBXYWtldXAgYW55IHRocmVhZCB3YWl0aW5nIGZvciBkYXRhCi0JCQkgKi8KLQkJCWlmIChjaC0+Y2hfc25pZmZfZmxhZ3MgJiBTTklGRl9XQUlUX0RBVEEpIHsKLQkJCQljaC0+Y2hfc25pZmZfZmxhZ3MgJj0gflNOSUZGX1dBSVRfREFUQTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoLT5jaF9zbmlmZl93YWl0KTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIElmIHRoZSB1c2VyIHNlbnQgdXMgdG9vIG11Y2ggZGF0YSB0byBwdXNoIGludG8gb3VyIHRtcGJ1ZiwKLQkJICogd2UgbmVlZCB0byBrZWVwIGxvb3BpbmcgYXJvdW5kIG9uIGFsbCB0aGUgZGF0YS4KLQkJICovCi0JCWlmICh0b29fbXVjaF9kYXRhKSB7Ci0JCQlwID0gdG1wYnVmOwotCQkJdG1wYnVmbGVuID0gMDsKLQkJfQotCi0JfSB3aGlsZSAodG9vX211Y2hfZGF0YSk7Ci19Ci0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKiAgICAgIGRnYXBfaW5wdXQgLSBQcm9jZXNzIHJlY2VpdmVkIGRhdGEuCkBAIC0xNjYzLDIxICsxNTM1LDIxIEBACiBzdGF0aWMgdm9pZCBkZ2FwX2lucHV0KHN0cnVjdCBjaGFubmVsX3QgKmNoKQogewogCXN0cnVjdCBib2FyZF90ICpiZDsKLQlzdHJ1Y3QgYnNfdAkqYnM7CisJc3RydWN0IGJzX3QgX19pb21lbSAqYnM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnRwOwogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwotCXVpbnQJcm1hc2s7Ci0JdWludAloZWFkOwotCXVpbnQJdGFpbDsKLQlpbnQJZGF0YV9sZW47Ci0JdWxvbmcJbG9ja19mbGFnczsKLQl1bG9uZyAgIGxvY2tfZmxhZ3MyOworCXVpbnQgcm1hc2s7CisJdWludCBoZWFkOworCXVpbnQgdGFpbDsKKwlpbnQgZGF0YV9sZW47CisJdWxvbmcgbG9ja19mbGFnczsKKwl1bG9uZyBsb2NrX2ZsYWdzMjsKIAlpbnQgZmxpcF9sZW47Ci0JaW50IGxlbiA9IDA7Ci0JaW50IG4gPSAwOwotCXVjaGFyICpidWY7Ci0JdWNoYXIgdG1wY2hhcjsKLQlpbnQgcyA9IDA7CisJaW50IGxlbjsKKwlpbnQgbjsKKwl1OCAqYnVmOworCXU4IHRtcGNoYXI7CisJaW50IHM7CiAKIAlpZiAoIWNoIHx8IGNoLT5tYWdpYyAhPSBER0FQX0NIQU5ORUxfTUFHSUMpCiAJCXJldHVybjsKQEAgLTE4MTQsOCArMTY4Niw3IEBACiAJCWlmIChzIDw9IDApCiAJCQlicmVhazsKIAotCQltZW1jcHlfZnJvbWlvKGJ1ZiwgKGNoYXIgKikgY2gtPmNoX3JhZGRyICsgdGFpbCwgcyk7Ci0JCWRnYXBfc25pZmZfbm93YWl0X25vbG9jayhjaCwgIlVTRVIgUkVBRCIsIGJ1Ziwgcyk7CisJCW1lbWNweV9mcm9taW8oYnVmLCBjaC0+Y2hfcmFkZHIgKyB0YWlsLCBzKTsKIAogCQl0YWlsICs9IHM7CiAJCWJ1ZiArPSBzOwpAQCAtMTk4NywyOSArMTg1OCwyNyBAQAogICovCiBzdGF0aWMgaW50IGRnYXBfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGJvYXJkX3QJKmJyZDsKKwlzdHJ1Y3QgYm9hcmRfdCAqYnJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwotCXN0cnVjdCB1bl90CSp1bjsKLQlzdHJ1Y3QgYnNfdAkqYnM7Ci0JdWludAkJbWFqb3IgPSAwOwotCXVpbnQJCW1pbm9yID0gMDsKLQlpbnQJCXJjID0gMDsKLQl1bG9uZwkJbG9ja19mbGFnczsKLQl1bG9uZwkJbG9ja19mbGFnczI7Ci0JdTE2CQloZWFkOwotCi0JcmMgPSAwOworCXN0cnVjdCB1bl90ICp1bjsKKwlzdHJ1Y3QgYnNfdCBfX2lvbWVtICpiczsKKwl1aW50IG1ham9yOworCXVpbnQgbWlub3I7CisJaW50IHJjOworCXVsb25nIGxvY2tfZmxhZ3M7CisJdWxvbmcgbG9ja19mbGFnczI7CisJdTE2IGhlYWQ7CiAKIAltYWpvciA9IE1BSk9SKHR0eV9kZXZudW0odHR5KSk7CiAJbWlub3IgPSBNSU5PUih0dHlfZGV2bnVtKHR0eSkpOwogCiAJaWYgKG1ham9yID4gMjU1KQotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAogCS8qIEdldCBib2FyZCBwb2ludGVyIGZyb20gb3VyIGFycmF5IG9mIG1ham9ycyB3ZSBoYXZlIGFsbG9jYXRlZCAqLwotCWJyZCA9IGRnYXBfQm9hcmRzQnlNYWpvclttYWpvcl07CisJYnJkID0gZGdhcF9ib2FyZHNfYnlfbWFqb3JbbWFqb3JdOwogCWlmICghYnJkKQotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAogCS8qCiAJICogSWYgYm9hcmQgaXMgbm90IHlldCB1cCB0byBhIHN0YXRlIG9mIFJFQURZLCBnbyB0bwpAQCAtMjAyNiwzNSArMTg5NSwzNSBAQAogCS8qIFRoZSB3YWl0IGFib3ZlIHNob3VsZCBndWFyYW50ZWUgdGhpcyBjYW5ub3QgaGFwcGVuICovCiAJaWYgKGJyZC0+c3RhdGUgIT0gQk9BUkRfUkVBRFkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkLT5iZF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogSWYgb3BlbmVkIGRldmljZSBpcyBncmVhdGVyIHRoYW4gb3VyIG51bWJlciBvZiBwb3J0cywgYmFpbC4gKi8KIAlpZiAoTUlOT1IodHR5X2Rldm51bSh0dHkpKSA+IGJyZC0+bmFzeW5jKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZC0+YmRfbG9jaywgbG9ja19mbGFncyk7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRUlPOwogCX0KIAogCWNoID0gYnJkLT5jaGFubmVsc1ttaW5vcl07CiAJaWYgKCFjaCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmQtPmJkX2xvY2ssIGxvY2tfZmxhZ3MpOwotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBHcmFiIGNoYW5uZWwgbG9jayAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y2hfbG9jaywgbG9ja19mbGFnczIpOwogCiAJLyogRmlndXJlIG91dCBvdXIgdHlwZSAqLwotCWlmIChtYWpvciA9PSBicmQtPmRnYXBfU2VyaWFsX01ham9yKSB7CisJaWYgKG1ham9yID09IGJyZC0+ZGdhcF9zZXJpYWxfbWFqb3IpIHsKIAkJdW4gPSAmYnJkLT5jaGFubmVsc1ttaW5vcl0tPmNoX3R1bjsKIAkJdW4tPnVuX3R5cGUgPSBER0FQX1NFUklBTDsKLQl9IGVsc2UgaWYgKG1ham9yID09IGJyZC0+ZGdhcF9UcmFuc3BhcmVudFByaW50X01ham9yKSB7CisJfSBlbHNlIGlmIChtYWpvciA9PSBicmQtPmRnYXBfdHJhbnNwYXJlbnRfcHJpbnRfbWFqb3IpIHsKIAkJdW4gPSAmYnJkLT5jaGFubmVsc1ttaW5vcl0tPmNoX3B1bjsKIAkJdW4tPnVuX3R5cGUgPSBER0FQX1BSSU5UOwogCX0gZWxzZSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzMik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZC0+YmRfbG9jaywgbG9ja19mbGFncyk7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIFN0b3JlIG91ciB1bml0IGludG8gZHJpdmVyX2RhdGEsIHNvIHdlIGFsd2F5cyBoYXZlIGl0IGF2YWlsYWJsZS4gKi8KQEAgLTIwNjcsNyArMTkzNiw3IEBACiAJaWYgKCFicykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y2hfbG9jaywgbG9ja19mbGFnczIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmQtPmJkX2xvY2ssIGxvY2tfZmxhZ3MpOwotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKgpAQCAtMjE0NSwxOCArMjAxNCwxOCBAQAogCQkJCXN0cnVjdCBjaGFubmVsX3QgKmNoKQogewogCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB1bl90ICp1biA9IE5VTEw7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzOwotCXVpbnQJb2xkX2ZsYWdzID0gMDsKLQlpbnQgc2xlZXBfb25fdW5fZmxhZ3MgPSAwOworCXN0cnVjdCB1bl90ICp1bjsKKwl1bG9uZyBsb2NrX2ZsYWdzOworCXVpbnQgb2xkX2ZsYWdzOworCWludCBzbGVlcF9vbl91bl9mbGFnczsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDIHx8ICFmaWxlIHx8ICFjaCB8fAogCQljaC0+bWFnaWMgIT0gREdBUF9DSEFOTkVMX01BR0lDKQotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAogCXVuID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIXVuIHx8IHVuLT5tYWdpYyAhPSBER0FQX1VOSVRfTUFHSUMpCi0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRUlPOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKIApAQCAtMjE3Miw3ICsyMDQxLDcgQEAKIAkJICogYmFpbCB3aXRoIGVycm9yLgogCQkgKi8KIAkJaWYgKGNoLT5jaF9iZC0+c3RhdGUgPT0gQk9BUkRfRkFJTEVEKSB7Ci0JCQlyZXR2YWwgPSAtRU5YSU87CisJCQlyZXR2YWwgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjI3Nyw5ICsyMTQ2LDkgQEAKICAqLwogc3RhdGljIHZvaWQgZGdhcF90dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGJvYXJkX3QJKmJkOworCXN0cnVjdCBib2FyZF90ICpiZDsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKLQlzdHJ1Y3QgdW5fdAkqdW47CisJc3RydWN0IHVuX3QgKnVuOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybjsKQEAgLTIyOTgsNyArMjE2Nyw2IEBACiAKIAkvKiBmbHVzaCB0aGUgdHJhbnNtaXQgcXVldWVzICovCiAJZGdhcF90dHlfZmx1c2hfYnVmZmVyKHR0eSk7Ci0KIH0KIAogLyoKQEAgLTIzMTIsNyArMjE4MCw2IEBACiAJc3RydWN0IGNoYW5uZWxfdCAqY2g7CiAJc3RydWN0IHVuX3QgKnVuOwogCXVsb25nIGxvY2tfZmxhZ3M7Ci0JaW50IHJjID0gMDsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKQogCQlyZXR1cm47CkBAIC0yMzc4LDcgKzIyNDUsNyBAQAogCQkvKiB3YWl0IGZvciBvdXRwdXQgdG8gZHJhaW4gKi8KIAkJLyogVGhpcyB3aWxsIGFsc28gcmV0dXJuIGlmIHdlIHRha2UgYW4gaW50ZXJydXB0ICovCiAKLQkJcmMgPSBkZ2FwX3dhaXRfZm9yX2RyYWluKHR0eSk7CisJCWRnYXBfd2FpdF9mb3JfZHJhaW4odHR5KTsKIAogCQlkZ2FwX3R0eV9mbHVzaF9idWZmZXIodHR5KTsKIAkJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CkBAIC0yNDQxLDE3ICsyMzA4LDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgZGdhcF90dHlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGJvYXJkX3QgKmJkID0gTlVMTDsKLQlzdHJ1Y3QgY2hhbm5lbF90ICpjaCA9IE5VTEw7Ci0Jc3RydWN0IHVuX3QgKnVuID0gTlVMTDsKLQlzdHJ1Y3QgYnNfdCAqYnMgPSBOVUxMOwotCXVjaGFyIHRidXN5OwotCXVpbnQgY2hhcnMgPSAwOworCXN0cnVjdCBib2FyZF90ICpiZDsKKwlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKKwlzdHJ1Y3QgdW5fdCAqdW47CisJc3RydWN0IGJzX3QgX19pb21lbSAqYnM7CisJdTggdGJ1c3k7CisJdWludCBjaGFyczsKIAl1MTYgdGhlYWQsIHR0YWlsLCB0bWFzaywgY2hlYWQsIGN0YWlsOwotCXVsb25nICAgbG9ja19mbGFncyA9IDA7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMiA9IDA7CisJdWxvbmcgbG9ja19mbGFncyA9IDA7CisJdWxvbmcgbG9ja19mbGFnczIgPSAwOwogCi0JaWYgKHR0eSA9PSBOVUxMKQorCWlmICghdHR5KQogCQlyZXR1cm4gMDsKIAogCXVuID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTI1MzUsMjcgKzI0MDIsMjUgQEAKIHsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKIAlzdHJ1Y3QgdW5fdCAqdW47Ci0Jc3RydWN0IGJzX3QgKmJzOwotCWludCByZXQgPSAtRUlPOworCXN0cnVjdCBic190IF9faW9tZW0gKmJzOworCWludCByZXQgPSAwOwogCXVpbnQgY291bnQgPSAxOwotCXVsb25nICAgbG9ja19mbGFncyA9IDA7CisJdWxvbmcgbG9ja19mbGFncyA9IDA7CiAKIAlpZiAoIXR0eSB8fCB0dHktPm1hZ2ljICE9IFRUWV9NQUdJQykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CiAKIAl1biA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCF1biB8fCB1bi0+bWFnaWMgIT0gREdBUF9VTklUX01BR0lDKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVJTzsKIAogCWNoID0gdW4tPnVuX2NoOwogCWlmICghY2ggfHwgY2gtPm1hZ2ljICE9IERHQVBfQ0hBTk5FTF9NQUdJQykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CiAKIAlicyA9IGNoLT5jaF9iczsKIAlpZiAoIWJzKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gMDsKKwkJcmV0dXJuIC1FSU87CiAKIAkvKiBMb29wIHVudGlsIGRhdGEgaXMgZHJhaW5lZCAqLwogCXdoaWxlIChjb3VudCAhPSAwKSB7CkBAIC0yNTk2LDEwICsyNDYxLDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgZGdhcF9tYXhjcHNfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnl0ZXNfYXZhaWxhYmxlKQogewotCXN0cnVjdCBjaGFubmVsX3QgKmNoID0gTlVMTDsKLQlzdHJ1Y3QgdW5fdCAqdW4gPSBOVUxMOworCXN0cnVjdCBjaGFubmVsX3QgKmNoOworCXN0cnVjdCB1bl90ICp1bjsKIAotCWlmICh0dHkgPT0gTlVMTCkKKwlpZiAoIXR0eSkKIAkJcmV0dXJuIGJ5dGVzX2F2YWlsYWJsZTsKIAogCXVuID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTI2NDUsOCArMjUxMCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZ2FwX3NldF9maXJtd2FyZV9ldmVudChzdHJ1Y3QgdW5fdCAqdW4sIHVuc2lnbmVkIGludCBldmVudCkKIHsKLQlzdHJ1Y3QgY2hhbm5lbF90ICpjaCA9IE5VTEw7Ci0Jc3RydWN0IGJzX3QgKmJzID0gTlVMTDsKKwlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKKwlzdHJ1Y3QgYnNfdCBfX2lvbWVtICpiczsKIAogCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHQVBfVU5JVF9NQUdJQykKIAkJcmV0dXJuOwpAQCAtMjY3OCwxMiArMjU0MywxMiBAQAogICovCiBzdGF0aWMgaW50IGRnYXBfdHR5X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2hhbm5lbF90ICpjaCA9IE5VTEw7Ci0Jc3RydWN0IHVuX3QgKnVuID0gTlVMTDsKLQlzdHJ1Y3QgYnNfdCAqYnMgPSBOVUxMOworCXN0cnVjdCBjaGFubmVsX3QgKmNoOworCXN0cnVjdCB1bl90ICp1bjsKKwlzdHJ1Y3QgYnNfdCBfX2lvbWVtICpiczsKIAl1MTYgaGVhZCwgdGFpbCwgdG1hc2s7Ci0JaW50IHJldCA9IDA7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzID0gMDsKKwlpbnQgcmV0OworCXVsb25nIGxvY2tfZmxhZ3MgPSAwOwogCiAJaWYgKCF0dHkpCiAJCXJldHVybiAwOwpAQCAtMjc2NywxMyArMjYzMiwxMyBAQAogc3RhdGljIGludCBkZ2FwX3R0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkJaW50IGNvdW50KQogewotCXN0cnVjdCBjaGFubmVsX3QgKmNoID0gTlVMTDsKLQlzdHJ1Y3QgdW5fdCAqdW4gPSBOVUxMOwotCXN0cnVjdCBic190ICpicyA9IE5VTEw7Ci0JY2hhciAqdmFkZHIgPSBOVUxMOworCXN0cnVjdCBjaGFubmVsX3QgKmNoOworCXN0cnVjdCB1bl90ICp1bjsKKwlzdHJ1Y3QgYnNfdCBfX2lvbWVtICpiczsKKwljaGFyIF9faW9tZW0gKnZhZGRyOwogCXUxNiBoZWFkLCB0YWlsLCB0bWFzaywgcmVtYWluOwotCWludCBidWZjb3VudCA9IDAsIG4gPSAwOwotCWludCBvcmlnX2NvdW50ID0gMDsKKwlpbnQgYnVmY291bnQsIG47CisJaW50IG9yaWdfY291bnQ7CiAJdWxvbmcgbG9ja19mbGFnczsKIAogCWlmICghdHR5KQpAQCAtMjg1NSwxNiArMjcyMCw2IEBACiAJCWNoLT5jaF9mbGFncyAmPSB+Q0hfUFJPTjsKIAl9CiAKLQkvKgotCSAqIElmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjb3B5LCBvcgotCSAqIEkgY2FuJ3QgaGFuZGxlIGFueSBtb3JlIGRhdGEsIGxlYXZlLgotCSAqLwotCWlmIChjb3VudCA8PSAwKSB7Ci0JCWRnYXBfc2V0X2Zpcm13YXJlX2V2ZW50KHVuLCBVTl9MT1cgfCBVTl9FTVBUWSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJbiA9IGNvdW50OwogCiAJLyoKQEAgLTI4NzgsOSArMjczMyw3IEBACiAJCW4gLT0gcmVtYWluOwogCQl2YWRkciA9IGNoLT5jaF90YWRkciArIGhlYWQ7CiAKLQkJbWVtY3B5X3RvaW8odmFkZHIsICh1Y2hhciAqKSBidWYsIHJlbWFpbik7Ci0JCWRnYXBfc25pZmZfbm93YWl0X25vbG9jayhjaCwgIlVTRVIgV1JJVEUiLCAodWNoYXIgKikgYnVmLAotCQkJCQlyZW1haW4pOworCQltZW1jcHlfdG9pbyh2YWRkciwgKHU4ICopIGJ1ZiwgcmVtYWluKTsKIAogCQloZWFkID0gY2gtPmNoX3RzdGFydDsKIAkJYnVmICs9IHJlbWFpbjsKQEAgLTI4OTQsMTAgKzI3NDcsNyBAQAogCQl2YWRkciA9IGNoLT5jaF90YWRkciArIGhlYWQ7CiAJCXJlbWFpbiA9IG47CiAKLQkJbWVtY3B5X3RvaW8odmFkZHIsICh1Y2hhciAqKSBidWYsIHJlbWFpbik7Ci0JCWRnYXBfc25pZmZfbm93YWl0X25vbG9jayhjaCwgIlVTRVIgV1JJVEUiLCAodWNoYXIgKilidWYsCi0JCQkJCXJlbWFpbik7Ci0KKwkJbWVtY3B5X3RvaW8odmFkZHIsICh1OCAqKSBidWYsIHJlbWFpbik7CiAJCWhlYWQgKz0gcmVtYWluOwogCiAJfQpAQCAtMjk0OSwyMCArMjc5OSwyMCBAQAogewogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQlpbnQgcmVzdWx0ID0gLUVJTzsKLQl1Y2hhciBtc3RhdCA9IDA7CisJaW50IHJlc3VsdDsKKwl1OCBtc3RhdDsKIAl1bG9uZyBsb2NrX2ZsYWdzOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCi0JCXJldHVybiByZXN1bHQ7CisJCXJldHVybiAtRUlPOwogCiAJdW4gPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHQVBfVU5JVF9NQUdJQykKLQkJcmV0dXJuIHJlc3VsdDsKKwkJcmV0dXJuIC1FSU87CiAKIAljaCA9IHVuLT51bl9jaDsKIAlpZiAoIWNoIHx8IGNoLT5tYWdpYyAhPSBER0FQX0NIQU5ORUxfTUFHSUMpCi0JCXJldHVybiByZXN1bHQ7CisJCXJldHVybiAtRUlPOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKIApAQCAtMzAwMSwyNCArMjg1MSwyMyBAQAogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKIAlzdHJ1Y3QgdW5fdCAqdW47Ci0JaW50IHJldCA9IC1FSU87CiAJdWxvbmcgbG9ja19mbGFnczsKIAl1bG9uZyBsb2NrX2ZsYWdzMjsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVJTzsKIAogCXVuID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIXVuIHx8IHVuLT5tYWdpYyAhPSBER0FQX1VOSVRfTUFHSUMpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlPOwogCiAJY2ggPSB1bi0+dW5fY2g7CiAJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdBUF9DSEFOTkVMX01BR0lDKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVJTzsKIAogCWJkID0gY2gtPmNoX2JkOwogCWlmICghYmQgfHwgYmQtPm1hZ2ljICE9IERHQVBfQk9BUkRfTUFHSUMpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlPOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJkLT5iZF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MyKTsKQEAgLTMwNjEsMjQgKzI5MTAsMjMgQEAKIAlzdHJ1Y3QgYm9hcmRfdCAqYmQ7CiAJc3RydWN0IGNoYW5uZWxfdCAqY2g7CiAJc3RydWN0IHVuX3QgKnVuOwotCWludCByZXQgPSAtRUlPOwogCXVsb25nIGxvY2tfZmxhZ3M7CiAJdWxvbmcgbG9ja19mbGFnczI7CiAKIAlpZiAoIXR0eSB8fCB0dHktPm1hZ2ljICE9IFRUWV9NQUdJQykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CiAKIAl1biA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCF1biB8fCB1bi0+bWFnaWMgIT0gREdBUF9VTklUX01BR0lDKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVJTzsKIAogCWNoID0gdW4tPnVuX2NoOwogCWlmICghY2ggfHwgY2gtPm1hZ2ljICE9IERHQVBfQ0hBTk5FTF9NQUdJQykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CiAKIAliZCA9IGNoLT5jaF9iZDsKIAlpZiAoIWJkIHx8IGJkLT5tYWdpYyAhPSBER0FQX0JPQVJEX01BR0lDKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVJTzsKIAogCXN3aXRjaCAobXNlYykgewogCWNhc2UgLTE6CkBAIC0zMTc1LDEzICszMDIzLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgZGdhcF9nZXRfbW9kZW1faW5mbyhzdHJ1Y3QgY2hhbm5lbF90ICpjaCwgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JdWNoYXIgbXN0YXQgPSAwOworCWludCByZXN1bHQ7CisJdTggbXN0YXQ7CiAJdWxvbmcgbG9ja19mbGFnczsKLQlpbnQgcmMgPSAwOworCWludCByYzsKIAogCWlmICghY2ggfHwgY2gtPm1hZ2ljICE9IERHQVBfQ0hBTk5FTF9NQUdJQykKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIC1FSU87CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwogCkBAIC0zMjIyLDI1ICszMDcwLDI1IEBACiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQlpbnQgcmV0ID0gLUVOWElPOwotCXVuc2lnbmVkIGludCBhcmcgPSAwOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGFyZzsKIAl1bG9uZyBsb2NrX2ZsYWdzOwogCXVsb25nIGxvY2tfZmxhZ3MyOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlPOwogCiAJdW4gPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHQVBfVU5JVF9NQUdJQykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CiAKIAljaCA9IHVuLT51bl9jaDsKIAlpZiAoIWNoIHx8IGNoLT5tYWdpYyAhPSBER0FQX0NIQU5ORUxfTUFHSUMpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlPOwogCiAJYmQgPSBjaC0+Y2hfYmQ7CiAJaWYgKCFiZCB8fCBiZC0+bWFnaWMgIT0gREdBUF9CT0FSRF9NQUdJQykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CiAKIAlyZXQgPSBnZXRfdXNlcihhcmcsIHZhbHVlKTsKIAlpZiAocmV0KQpAQCAtMzM2MCw3ICszMjA4LDcgQEAKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKIAlzdHJ1Y3QgdW5fdCAqdW47CiAJc3RydWN0IGRpZ2lfdCBuZXdfZGlnaTsKLQl1bG9uZyAgIGxvY2tfZmxhZ3MgPSAwOworCXVsb25nIGxvY2tfZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczI7CiAKIAlpZiAoIXR0eSB8fCB0dHktPm1hZ2ljICE9IFRUWV9NQUdJQykKQEAgLTM2NDAsOCArMzQ4OCw4IEBACiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQl1bG9uZyAgIGxvY2tfZmxhZ3M7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMjsKKwl1bG9uZyBsb2NrX2ZsYWdzOworCXVsb25nIGxvY2tfZmxhZ3MyOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybjsKQEAgLTM2NzYsOCArMzUyNCw4IEBACiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQl1bG9uZyAgIGxvY2tfZmxhZ3M7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMjsKKwl1bG9uZyBsb2NrX2ZsYWdzOworCXVsb25nIGxvY2tfZmxhZ3MyOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybjsKQEAgLTM3MTIsOCArMzU2MCw4IEBACiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQl1bG9uZyAgIGxvY2tfZmxhZ3M7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMjsKKwl1bG9uZyBsb2NrX2ZsYWdzOworCXVsb25nIGxvY2tfZmxhZ3MyOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybjsKQEAgLTM3MzcsNyArMzU4NSw2IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y2hfbG9jaywgbG9ja19mbGFnczIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJkLT5iZF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQogfQogCiBzdGF0aWMgdm9pZCBkZ2FwX3R0eV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0zNzQ1LDggKzM1OTIsOCBAQAogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKIAlzdHJ1Y3QgdW5fdCAqdW47Ci0JdWxvbmcgICBsb2NrX2ZsYWdzOwotCXVsb25nICAgbG9ja19mbGFnczI7CisJdWxvbmcgbG9ja19mbGFnczsKKwl1bG9uZyBsb2NrX2ZsYWdzMjsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKQogCQlyZXR1cm47CkBAIC0zNzcwLDcgKzM2MTcsNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZC0+YmRfbG9jaywgbG9ja19mbGFncyk7Ci0KIH0KIAogLyoKQEAgLTM3OTEsOCArMzYzNyw4IEBACiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQl1bG9uZyAgIGxvY2tfZmxhZ3M7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMjsKKwl1bG9uZyBsb2NrX2ZsYWdzOworCXVsb25nIGxvY2tfZmxhZ3MyOwogCiAJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybjsKQEAgLTM4MjgsOSArMzY3NCw5IEBACiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKLQl1bG9uZyAgIGxvY2tfZmxhZ3M7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMjsKLQl1MTYJaGVhZCA9IDA7CisJdWxvbmcgbG9ja19mbGFnczsKKwl1bG9uZyBsb2NrX2ZsYWdzMjsKKwl1MTYgaGVhZDsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKQogCQlyZXR1cm47CkBAIC0zODg4LDkgKzM3MzQsOSBAQAogCXN0cnVjdCBjaGFubmVsX3QgKmNoOwogCXN0cnVjdCB1bl90ICp1bjsKIAlpbnQgcmM7Ci0JdTE2CWhlYWQgPSAwOwotCXVsb25nICAgbG9ja19mbGFncyA9IDA7Ci0JdWxvbmcgICBsb2NrX2ZsYWdzMiA9IDA7CisJdTE2IGhlYWQ7CisJdWxvbmcgbG9ja19mbGFncyA9IDA7CisJdWxvbmcgbG9ja19mbGFnczIgPSAwOwogCXZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopIGFyZzsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKQpAQCAtNDI2NiwxOCArNDExMiwxOCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBLTUUgd2FpdHF1ZXVlcy4uLgogCSAqLwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJihkZ2FwX0JvYXJkW2JvYXJkXS0+a21lX3dhaXQpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoZGdhcF9ib2FyZFtib2FyZF0tPmttZV93YWl0KSk7CiAKIAkvKgogCSAqIGFsbG9jYXRlIGZsaXAgYnVmZmVyIGZvciBib2FyZC4KIAkgKi8KLQlkZ2FwX0JvYXJkW2JvYXJkXS0+ZmxpcGJ1ZiA9IGttYWxsb2MoTVlGTElQTEVOLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWRnYXBfQm9hcmRbYm9hcmRdLT5mbGlwYnVmKQorCWRnYXBfYm9hcmRbYm9hcmRdLT5mbGlwYnVmID0ga21hbGxvYyhNWUZMSVBMRU4sIEdGUF9LRVJORUwpOworCWlmICghZGdhcF9ib2FyZFtib2FyZF0tPmZsaXBidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGdhcF9Cb2FyZFtib2FyZF0tPmZsaXBmbGFnYnVmID0ga21hbGxvYyhNWUZMSVBMRU4sIEdGUF9BVE9NSUMpOwotCWlmICghZGdhcF9Cb2FyZFtib2FyZF0tPmZsaXBmbGFnYnVmKSB7Ci0JCWtmcmVlKGRnYXBfQm9hcmRbYm9hcmRdLT5mbGlwYnVmKTsKKwlkZ2FwX2JvYXJkW2JvYXJkXS0+ZmxpcGZsYWdidWYgPSBrbWFsbG9jKE1ZRkxJUExFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZ2FwX2JvYXJkW2JvYXJkXS0+ZmxpcGZsYWdidWYpIHsKKwkJa2ZyZWUoZGdhcF9ib2FyZFtib2FyZF0tPmZsaXBidWYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyOTIsMzYgKzQxMzgsMzcgQEAKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKIAlpbnQgaTsKIAotCWJyZC0+U2VyaWFsUG9ydHMgPSBrY2FsbG9jKGJyZC0+bmFzeW5jLCBzaXplb2YoKmJyZC0+U2VyaWFsUG9ydHMpLAorCWJyZC0+c2VyaWFsX3BvcnRzID0ga2NhbGxvYyhicmQtPm5hc3luYywgc2l6ZW9mKCpicmQtPnNlcmlhbF9wb3J0cyksCiAJCQkJCUdGUF9LRVJORUwpOwotCWlmIChicmQtPlNlcmlhbFBvcnRzID09IE5VTEwpCisJaWYgKCFicmQtPnNlcmlhbF9wb3J0cykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IGJyZC0+bmFzeW5jOyBpKyspCi0JCXR0eV9wb3J0X2luaXQoJmJyZC0+U2VyaWFsUG9ydHNbaV0pOwogCi0JYnJkLT5QcmludGVyUG9ydHMgPSBrY2FsbG9jKGJyZC0+bmFzeW5jLCBzaXplb2YoKmJyZC0+UHJpbnRlclBvcnRzKSwKKwlicmQtPnByaW50ZXJfcG9ydHMgPSBrY2FsbG9jKGJyZC0+bmFzeW5jLCBzaXplb2YoKmJyZC0+cHJpbnRlcl9wb3J0cyksCiAJCQkJCUdGUF9LRVJORUwpOwotCWlmIChicmQtPlByaW50ZXJQb3J0cyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGJyZC0+U2VyaWFsUG9ydHMpOworCWlmICghYnJkLT5wcmludGVyX3BvcnRzKSB7CisJCWtmcmVlKGJyZC0+c2VyaWFsX3BvcnRzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZvciAoaSA9IDA7IGkgPCBicmQtPm5hc3luYzsgaSsrKQotCQl0dHlfcG9ydF9pbml0KCZicmQtPlByaW50ZXJQb3J0c1tpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnJkLT5uYXN5bmM7IGkrKykgeworCQl0dHlfcG9ydF9pbml0KCZicmQtPnNlcmlhbF9wb3J0c1tpXSk7CisJCXR0eV9wb3J0X2luaXQoJmJyZC0+cHJpbnRlcl9wb3J0c1tpXSk7CisJfQogCiAJY2ggPSBicmQtPmNoYW5uZWxzWzBdOwogCWZvciAoaSA9IDA7IGkgPCBicmQtPm5hc3luYzsgaSsrLCBjaCA9IGJyZC0+Y2hhbm5lbHNbaV0pIHsKIAogCQlzdHJ1Y3QgZGV2aWNlICpjbGFzc3A7CiAKLQkJY2xhc3NwID0gdHR5X3BvcnRfcmVnaXN0ZXJfZGV2aWNlKCZicmQtPlNlcmlhbFBvcnRzW2ldLAotCQkJCQlicmQtPlNlcmlhbERyaXZlciwKKwkJY2xhc3NwID0gdHR5X3BvcnRfcmVnaXN0ZXJfZGV2aWNlKCZicmQtPnNlcmlhbF9wb3J0c1tpXSwKKwkJCQkJYnJkLT5zZXJpYWxfZHJpdmVyLAogCQkJCQlicmQtPmZpcnN0bWlub3IgKyBpLCBOVUxMKTsKIAogCQlkZ2FwX2NyZWF0ZV90dHlfc3lzZnMoJmNoLT5jaF90dW4sIGNsYXNzcCk7CiAJCWNoLT5jaF90dW4udW5fc3lzZnMgPSBjbGFzc3A7CiAKLQkJY2xhc3NwID0gdHR5X3BvcnRfcmVnaXN0ZXJfZGV2aWNlKCZicmQtPlByaW50ZXJQb3J0c1tpXSwKLQkJCQkJYnJkLT5QcmludERyaXZlciwKKwkJY2xhc3NwID0gdHR5X3BvcnRfcmVnaXN0ZXJfZGV2aWNlKCZicmQtPnByaW50ZXJfcG9ydHNbaV0sCisJCQkJCWJyZC0+cHJpbnRfZHJpdmVyLAogCQkJCQlicmQtPmZpcnN0bWlub3IgKyBpLCBOVUxMKTsKIAogCQlkZ2FwX2NyZWF0ZV90dHlfc3lzZnMoJmNoLT5jaF9wdW4sIGNsYXNzcCk7CkBAIC00MzM2LDkgKzQxODMsOSBAQAogICogQ29waWVzIHRoZSBCSU9TIGNvZGUgZnJvbSB0aGUgdXNlciB0byB0aGUgYm9hcmQsCiAgKiBhbmQgc3RhcnRzIHRoZSBCSU9TIHJ1bm5pbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGRnYXBfZG9fYmlvc19sb2FkKHN0cnVjdCBib2FyZF90ICpicmQsIGNvbnN0IHVjaGFyICp1YmlvcywgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRnYXBfZG9fYmlvc19sb2FkKHN0cnVjdCBib2FyZF90ICpicmQsIGNvbnN0IHU4ICp1YmlvcywgaW50IGxlbikKIHsKLQl1Y2hhciAqYWRkcjsKKwl1OCBfX2lvbWVtICphZGRyOwogCXVpbnQgb2Zmc2V0OwogCWludCBpOwogCkBAIC00MzY5LDE2ICs0MjE2LDE1IEBACiAvKgogICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgQklPUyBjb21wbGV0ZWQgcnVubmluZyBvbiB0aGUgY2FyZC4KICAqLwotc3RhdGljIGludCBkZ2FwX2RvX3dhaXRfZm9yX2Jpb3Moc3RydWN0IGJvYXJkX3QgKmJyZCkKK3N0YXRpYyBpbnQgZGdhcF90ZXN0X2Jpb3Moc3RydWN0IGJvYXJkX3QgKmJyZCkKIHsKLQl1Y2hhciAqYWRkcjsKKwl1OCBfX2lvbWVtICphZGRyOwogCXUxNiB3b3JkOwogCXUxNiBlcnIxOwogCXUxNiBlcnIyOwotCWludCByZXQgPSAwOwogCiAJaWYgKCFicmQgfHwgKGJyZC0+bWFnaWMgIT0gREdBUF9CT0FSRF9NQUdJQykgfHwgIWJyZC0+cmVfbWFwX21lbWJhc2UpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYWRkciA9IGJyZC0+cmVfbWFwX21lbWJhc2U7CiAJd29yZCA9IHJlYWR3KGFkZHIgKyBQT1NUQVJFQSk7CkBAIC00MzkyLDcgKzQyMzgsNyBAQAogCXdoaWxlIChicmQtPndhaXRfZm9yX2Jpb3MgPCAxMDAwKSB7CiAJCS8qIENoZWNrIHRvIHNlZSBpZiBCSU9TIHRoaW5rcyBib2FyZCBpcyBnb29kLiAoR0QpLiAqLwogCQlpZiAod29yZCA9PSAqKHUxNiAqKSAiR0QiKQotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gMDsKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOwogCQlicmQtPndhaXRfZm9yX2Jpb3MrKzsKIAkJd29yZCA9IHJlYWR3KGFkZHIgKyBQT1NUQVJFQSk7CkBAIC00NDA2LDE2ICs0MjUyLDE2IEBACiAJYnJkLT5zdGF0ZSA9IEJPQVJEX0ZBSUxFRDsKIAlicmQtPmRwYXN0YXR1cyA9IEJEX05PQklPUzsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCiAgKiBDb3BpZXMgdGhlIEZFUCBjb2RlIGZyb20gdGhlIHVzZXIgdG8gdGhlIGJvYXJkLAogICogYW5kIHN0YXJ0cyB0aGUgRkVQIHJ1bm5pbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGRnYXBfZG9fZmVwX2xvYWQoc3RydWN0IGJvYXJkX3QgKmJyZCwgY29uc3QgdWNoYXIgKnVmZXAsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkZ2FwX2RvX2ZlcF9sb2FkKHN0cnVjdCBib2FyZF90ICpicmQsIGNvbnN0IHU4ICp1ZmVwLCBpbnQgbGVuKQogewotCXVjaGFyICphZGRyOworCXU4IF9faW9tZW0gKmFkZHI7CiAJdWludCBvZmZzZXQ7CiAKIAlpZiAoIWJyZCB8fCAoYnJkLT5tYWdpYyAhPSBER0FQX0JPQVJEX01BR0lDKSB8fCAhYnJkLT5yZV9tYXBfbWVtYmFzZSkKQEAgLTQ0MzQsOCArNDI4MCw5IEBACiAJICogaXQgaXRzIGNvbmZpZyBzdHJpbmcgZGVzY3JpYmluZyBob3cgdGhlIGNvbmNlbnRyYXRvcnMgbG9vay4KIAkgKi8KIAlpZiAoKGJyZC0+dHlwZSA9PSBQQ1gpIHx8IChicmQtPnR5cGUgPT0gUEVQQykpIHsKLQkJdWNoYXIgc3RyaW5nWzEwMF07Ci0JCXVjaGFyICpjb25maWcsICp4Y29uZmlnOworCQl1OCBzdHJpbmdbMTAwXTsKKwkJdTggX19pb21lbSAqY29uZmlnOworCQl1OCAqeGNvbmZpZzsKIAkJaW50IGkgPSAwOwogCiAJCXhjb25maWcgPSBkZ2FwX2NyZWF0ZV9jb25maWdfc3RyaW5nKGJyZCwgc3RyaW5nKTsKQEAgLTQ0NTcsMTYgKzQzMDQsMTUgQEAKIC8qCiAgKiBXYWl0cyBmb3IgdGhlIEZFUCB0byByZXBvcnQgdGhhdHMgaXRzIHJlYWR5IGZvciB1cyB0byB1c2UuCiAgKi8KLXN0YXRpYyBpbnQgZGdhcF9kb193YWl0X2Zvcl9mZXAoc3RydWN0IGJvYXJkX3QgKmJyZCkKK3N0YXRpYyBpbnQgZGdhcF90ZXN0X2ZlcChzdHJ1Y3QgYm9hcmRfdCAqYnJkKQogewotCXVjaGFyICphZGRyOworCXU4IF9faW9tZW0gKmFkZHI7CiAJdTE2IHdvcmQ7CiAJdTE2IGVycjE7CiAJdTE2IGVycjI7Ci0JaW50IHJldCA9IDA7CiAKIAlpZiAoIWJyZCB8fCAoYnJkLT5tYWdpYyAhPSBER0FQX0JPQVJEX01BR0lDKSB8fCAhYnJkLT5yZV9tYXBfbWVtYmFzZSkKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRyID0gYnJkLT5yZV9tYXBfbWVtYmFzZTsKIAl3b3JkID0gcmVhZHcoYWRkciArIEZFUFNUQVQpOwpAQCAtNDQ4Niw3ICs0MzMyLDcgQEAKIAkJCWlmICh3b3JkID09ICoodTE2ICopICI1QSIpCiAJCQkJYnJkLT5iZF9mbGFncyB8PSBCRF9GRVA1UExVUzsKIAotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gMDsKIAkJfQogCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CiAJCWJyZC0+d2FpdF9mb3JfZmVwKys7CkBAIC00NTAxLDcgKzQzNDcsNyBAQAogCWJyZC0+c3RhdGUgPSBCT0FSRF9GQUlMRUQ7CiAJYnJkLT5kcGFzdGF0dXMgPSBCRF9OT0ZFUDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCkBAIC00NTA5LDEwICs0MzU1LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIGRnYXBfZG9fcmVzZXRfYm9hcmQoc3RydWN0IGJvYXJkX3QgKmJyZCkKIHsKLQl1Y2hhciBjaGVjazsKKwl1OCBjaGVjazsKIAl1MzIgY2hlY2sxOwogCXUzMiBjaGVjazI7Ci0JaW50IGkgPSAwOworCWludCBpOwogCiAJaWYgKCFicmQgfHwgKGJyZC0+bWFnaWMgIT0gREdBUF9CT0FSRF9NQUdJQykgfHwKIAkgICAgIWJyZC0+cmVfbWFwX21lbWJhc2UgfHwgIWJyZC0+cmVfbWFwX3BvcnQpCkBAIC00NTUwLDE3ICs0Mzk2LDE2IEBACiAJCWJyZC0+ZHBhc3RhdHVzID0gQkRfTk9GRVA7CiAJCXJldHVybjsKIAl9Ci0KIH0KIAogI2lmZGVmIERJR0lfQ09OQ0VOVFJBVE9SU19TVVBQT1JURUQKIC8qCiAgKiBTZW5kcyBhIGNvbmNlbnRyYXRvciBpbWFnZSBpbnRvIHRoZSBGRVA1IGJvYXJkLgogICovCi1zdGF0aWMgdm9pZCBkZ2FwX2RvX2NvbmNfbG9hZChzdHJ1Y3QgYm9hcmRfdCAqYnJkLCB1Y2hhciAqdWFkZHIsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkZ2FwX2RvX2NvbmNfbG9hZChzdHJ1Y3QgYm9hcmRfdCAqYnJkLCB1OCAqdWFkZHIsIGludCBsZW4pCiB7Ci0JY2hhciAqdmFkZHI7Ci0JdTE2IG9mZnNldCA9IDA7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKKwl1MTYgb2Zmc2V0OwogCXN0cnVjdCBkb3dubGRfdCAqdG9fZHA7CiAKIAlpZiAoIWJyZCB8fCAoYnJkLT5tYWdpYyAhPSBER0FQX0JPQVJEX01BR0lDKSB8fCAhYnJkLT5yZV9tYXBfbWVtYmFzZSkKQEAgLTQ1OTAsOCArNDQzNSw4IEBACiAJdTE2IHZwZF9vZmZzZXQ7CiAJdTE2IGltYWdlX2xlbmd0aDsKIAl1MTYgaTsKLQl1Y2hhciBieXRlMTsKLQl1Y2hhciBieXRlMjsKKwl1OCBieXRlMTsKKwl1OCBieXRlMjsKIAogCS8qCiAJICogUG9rZSB0aGUgbWFnaWMgbnVtYmVyIGF0IHRoZSBQQ0kgUm9tIEFkZHJlc3MgbG9jYXRpb24uCkBAIC00Njk2LDggKzQ1NDEsOCBAQAogc3RhdGljIHZvaWQgZGdhcF9wb2xsX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBib2FyZF90ICpiZCA9IChzdHJ1Y3QgYm9hcmRfdCAqKSBkYXRhOwotCXVsb25nICBsb2NrX2ZsYWdzOwotCWNoYXIgKnZhZGRyOworCXVsb25nIGxvY2tfZmxhZ3M7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKIAl1MTYgaGVhZCwgdGFpbDsKIAogCWlmICghYmQgfHwgKGJkLT5tYWdpYyAhPSBER0FQX0JPQVJEX01BR0lDKSkKQEAgLTQ3MTUsNyArNDU2MCw3IEBACiAJICovCiAJaWYgKGJkLT5zdGF0ZSA9PSBCT0FSRF9SRUFEWSkgewogCi0JCXN0cnVjdCBldl90ICplYWRkciA9IE5VTEw7CisJCXN0cnVjdCBldl90IF9faW9tZW0gKmVhZGRyOwogCiAJCWlmICghYmQtPnJlX21hcF9tZW1iYXNlKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZC0+YmRfbG9jaywgbG9ja19mbGFncyk7CkBAIC00NzI5LDcgKzQ1NzQsNyBAQAogCQlpZiAoIWJkLT5uYXN5bmMpCiAJCQlnb3RvIG91dDsKIAotCQllYWRkciA9IChzdHJ1Y3QgZXZfdCAqKSAodmFkZHIgKyBFVkJVRik7CisJCWVhZGRyID0gKHN0cnVjdCBldl90IF9faW9tZW0gKikgKHZhZGRyICsgRVZCVUYpOwogCiAJCS8qIEdldCBvdXIgaGVhZCBhbmQgdGFpbCAqLwogCQloZWFkID0gcmVhZHcoJihlYWRkci0+ZXZfaGVhZCkpOwpAQCAtNDc3MCwxNSArNDYxNSwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY21kIGJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nLgogICoKICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgZGdhcF9jbWRiKHN0cnVjdCBjaGFubmVsX3QgKmNoLCB1Y2hhciBjbWQsIHVjaGFyIGJ5dGUxLAotCQkJdWNoYXIgYnl0ZTIsIHVpbnQgbmNtZHMpCitzdGF0aWMgdm9pZCBkZ2FwX2NtZGIoc3RydWN0IGNoYW5uZWxfdCAqY2gsIHU4IGNtZCwgdTggYnl0ZTEsCisJCQl1OCBieXRlMiwgdWludCBuY21kcykKIHsKLQljaGFyCQkqdmFkZHIgPSBOVUxMOwotCXN0cnVjdCBjbV90CSpjbV9hZGRyID0gTlVMTDsKLQl1aW50CQljb3VudDsKLQl1aW50CQluOwotCXUxNgkJaGVhZDsKLQl1MTYJCXRhaWw7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKKwlzdHJ1Y3QgX19pb21lbSBjbV90ICpjbV9hZGRyOworCXVpbnQgY291bnQ7CisJdWludCBuOworCXUxNiBoZWFkOworCXUxNiB0YWlsOwogCiAJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdBUF9DSEFOTkVMX01BR0lDKQogCQlyZXR1cm47CkBAIC00Nzk4LDcgKzQ2NDMsNyBAQAogCWlmICghdmFkZHIpCiAJCXJldHVybjsKIAotCWNtX2FkZHIgPSAoc3RydWN0IGNtX3QgKikgKHZhZGRyICsgQ01EQlVGKTsKKwljbV9hZGRyID0gKHN0cnVjdCBjbV90IF9faW9tZW0gKikgKHZhZGRyICsgQ01EQlVGKTsKIAloZWFkID0gcmVhZHcoJihjbV9hZGRyLT5jbV9oZWFkKSk7CiAKIAkvKgpAQCAtNDgxMiwxMCArNDY1NywxMCBAQAogCS8qCiAJICogUHV0IHRoZSBkYXRhIGluIHRoZSBjaXJjdWxhciBjb21tYW5kIGJ1ZmZlci4KIAkgKi8KLQl3cml0ZWIoY21kLCAoY2hhciAqKSAodmFkZHIgKyBoZWFkICsgQ01EU1RBUlQgKyAwKSk7Ci0Jd3JpdGViKCh1Y2hhcikgY2gtPmNoX3BvcnRudW0sIChjaGFyICopICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDEpKTsKLQl3cml0ZWIoYnl0ZTEsIChjaGFyICopICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDIpKTsKLQl3cml0ZWIoYnl0ZTIsIChjaGFyICopICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDMpKTsKKwl3cml0ZWIoY21kLCAodmFkZHIgKyBoZWFkICsgQ01EU1RBUlQgKyAwKSk7CisJd3JpdGViKCh1OCkgY2gtPmNoX3BvcnRudW0sICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDEpKTsKKwl3cml0ZWIoYnl0ZTEsICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDIpKTsKKwl3cml0ZWIoYnl0ZTIsICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDMpKTsKIAogCWhlYWQgPSAoaGVhZCArIDQpICYgKENNRE1BWCAtIENNRFNUQVJUIC0gNCk7CiAKQEAgLTQ4NTYsMTQgKzQ3MDEsMTQgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGNtZCBidWZmZXIgYmVmb3JlIHJldHVybmluZy4KICAqCiAgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIGRnYXBfY21kdyhzdHJ1Y3QgY2hhbm5lbF90ICpjaCwgdWNoYXIgY21kLCB1MTYgd29yZCwgdWludCBuY21kcykKK3N0YXRpYyB2b2lkIGRnYXBfY21kdyhzdHJ1Y3QgY2hhbm5lbF90ICpjaCwgdTggY21kLCB1MTYgd29yZCwgdWludCBuY21kcykKIHsKLQljaGFyCQkqdmFkZHIgPSBOVUxMOwotCXN0cnVjdCBjbV90CSpjbV9hZGRyID0gTlVMTDsKLQl1aW50CQljb3VudDsKLQl1aW50CQluOwotCXUxNgkJaGVhZDsKLQl1MTYJCXRhaWw7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKKwlzdHJ1Y3QgX19pb21lbSBjbV90ICpjbV9hZGRyOworCXVpbnQgY291bnQ7CisJdWludCBuOworCXUxNiBoZWFkOworCXUxNiB0YWlsOwogCiAJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdBUF9DSEFOTkVMX01BR0lDKQogCQlyZXR1cm47CkBAIC00ODgyLDcgKzQ3MjcsNyBAQAogCWlmICghdmFkZHIpCiAJCXJldHVybjsKIAotCWNtX2FkZHIgPSAoc3RydWN0IGNtX3QgKikgKHZhZGRyICsgQ01EQlVGKTsKKwljbV9hZGRyID0gKHN0cnVjdCBjbV90IF9faW9tZW0gKikgKHZhZGRyICsgQ01EQlVGKTsKIAloZWFkID0gcmVhZHcoJihjbV9hZGRyLT5jbV9oZWFkKSk7CiAKIAkvKgpAQCAtNDg5Niw5ICs0NzQxLDkgQEAKIAkvKgogCSAqIFB1dCB0aGUgZGF0YSBpbiB0aGUgY2lyY3VsYXIgY29tbWFuZCBidWZmZXIuCiAJICovCi0Jd3JpdGViKGNtZCwgKGNoYXIgKikgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgMCkpOwotCXdyaXRlYigodWNoYXIpIGNoLT5jaF9wb3J0bnVtLCAoY2hhciAqKSAodmFkZHIgKyBoZWFkICsgQ01EU1RBUlQgKyAxKSk7Ci0Jd3JpdGV3KCh1MTYpIHdvcmQsIChjaGFyICopICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDIpKTsKKwl3cml0ZWIoY21kLCAodmFkZHIgKyBoZWFkICsgQ01EU1RBUlQgKyAwKSk7CisJd3JpdGViKCh1OCkgY2gtPmNoX3BvcnRudW0sICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDEpKTsKKwl3cml0ZXcoKHUxNikgd29yZCwgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgMikpOwogCiAJaGVhZCA9IChoZWFkICsgNCkgJiAoQ01ETUFYIC0gQ01EU1RBUlQgLSA0KTsKIApAQCAtNDk0MSwxMiArNDc4NiwxMiBAQAogICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBkZ2FwX2NtZHdfZXh0KHN0cnVjdCBjaGFubmVsX3QgKmNoLCB1MTYgY21kLCB1MTYgd29yZCwgdWludCBuY21kcykKIHsKLQljaGFyCQkqdmFkZHIgPSBOVUxMOwotCXN0cnVjdCBjbV90CSpjbV9hZGRyID0gTlVMTDsKLQl1aW50CQljb3VudDsKLQl1aW50CQluOwotCXUxNgkJaGVhZDsKLQl1MTYJCXRhaWw7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKKwlzdHJ1Y3QgX19pb21lbSBjbV90ICpjbV9hZGRyOworCXVpbnQgY291bnQ7CisJdWludCBuOworCXUxNiBoZWFkOworCXUxNiB0YWlsOwogCiAJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdBUF9DSEFOTkVMX01BR0lDKQogCQlyZXR1cm47CkBAIC00OTY1LDcgKzQ4MTAsNyBAQAogCWlmICghdmFkZHIpCiAJCXJldHVybjsKIAotCWNtX2FkZHIgPSAoc3RydWN0IGNtX3QgKikgKHZhZGRyICsgQ01EQlVGKTsKKwljbV9hZGRyID0gKHN0cnVjdCBjbV90IF9faW9tZW0gKikgKHZhZGRyICsgQ01EQlVGKTsKIAloZWFkID0gcmVhZHcoJihjbV9hZGRyLT5jbV9oZWFkKSk7CiAKIAkvKgpAQCAtNDk4MSwxOSArNDgyNiwxOSBAQAogCSAqLwogCiAJLyogV3JpdGUgYW4gRkYgdG8gdGVsbCB0aGUgRkVQIHRoYXQgd2Ugd2FudCBhbiBleHRlbmRlZCBjb21tYW5kICovCi0Jd3JpdGViKCh1Y2hhcikgMHhmZiwgKGNoYXIgKikgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgMCkpOworCXdyaXRlYigodTgpIDB4ZmYsICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDApKTsKIAotCXdyaXRlYigodWNoYXIpIGNoLT5jaF9wb3J0bnVtLCAodWNoYXIgKikgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgMSkpOwotCXdyaXRldygodTE2KSBjbWQsIChjaGFyICopICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDIpKTsKKwl3cml0ZWIoKHU4KSBjaC0+Y2hfcG9ydG51bSwgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgMSkpOworCXdyaXRldygodTE2KSBjbWQsICh2YWRkciArIGhlYWQgKyBDTURTVEFSVCArIDIpKTsKIAogCS8qCiAJICogSWYgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb21tYW5kIHdvbid0IGZpdCwKIAkgKiBwdXQgaXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyLgogCSAqLwogCWlmICgoKGhlYWQgKyA0KSA+PSAoKENNRE1BWCAtIENNRFNUQVJUKSkgfHwgKGhlYWQgJiAwMykpKQotCQl3cml0ZXcoKHUxNikgd29yZCwgKGNoYXIgKikgKHZhZGRyICsgQ01EU1RBUlQpKTsKKwkJd3JpdGV3KCh1MTYpIHdvcmQsICh2YWRkciArIENNRFNUQVJUKSk7CiAJZWxzZQotCQl3cml0ZXcoKHUxNikgd29yZCwgKGNoYXIgKikgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgNCkpOworCQl3cml0ZXcoKHUxNikgd29yZCwgKHZhZGRyICsgaGVhZCArIENNRFNUQVJUICsgNCkpOwogCiAJaGVhZCA9IChoZWFkICsgOCkgJiAoQ01ETUFYIC0gQ01EU1RBUlQgLSA0KTsKIApAQCAtNTAzNCwxMCArNDg3OSwxMCBAQAogICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBkZ2FwX3dtb3ZlKHN0cnVjdCBjaGFubmVsX3QgKmNoLCBjaGFyICpidWYsIHVpbnQgY250KQogewotCWludCAgICBuOwotCWNoYXIgICAqdGFkZHI7Ci0Jc3RydWN0IGJzX3QgICAgKmJzOwotCXUxNiAgICBoZWFkOworCWludCBuOworCWNoYXIgX19pb21lbSAqdGFkZHI7CisJc3RydWN0IGJzX3QgX19pb21lbSAqYnM7CisJdTE2IGhlYWQ7CiAKIAlpZiAoIWNoIHx8IGNoLT5tYWdpYyAhPSBER0FQX0NIQU5ORUxfTUFHSUMpCiAJCXJldHVybjsKQEAgLTUwODgsOSArNDkzMyw5IEBACiAgKi8KIHN0YXRpYyB1aW50IGRnYXBfZ2V0X2N1c3RvbV9iYXVkKHN0cnVjdCBjaGFubmVsX3QgKmNoKQogewotCXVjaGFyICp2YWRkcjsKLQl1bG9uZyBvZmZzZXQgPSAwOwotCXVpbnQgdmFsdWUgPSAwOworCXU4IF9faW9tZW0gKnZhZGRyOworCXVsb25nIG9mZnNldDsKKwl1aW50IHZhbHVlOwogCiAJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdBUF9DSEFOTkVMX01BR0lDKQogCQlyZXR1cm4gMDsKQEAgLTUxMTAsOCArNDk1NSw4IEBACiAJICogR28gZ2V0IGZyb20gZmVwIG1lbSwgd2hhdCB0aGUgZmVwCiAJICogYmVsaWV2ZXMgdGhlIGN1c3RvbSBiYXVkIHJhdGUgaXMuCiAJICovCi0Jb2Zmc2V0ID0gKCgoKCoodW5zaWduZWQgc2hvcnQgKikodmFkZHIgKyBFQ1NfU0VHKSkgPDwgNCkgKwotCQkoY2gtPmNoX3BvcnRudW0gKiAweDI4KSArIExJTkVfU1BFRUQpKTsKKwlvZmZzZXQgPSAoaW9yZWFkMTYodmFkZHIgKyBFQ1NfU0VHKSA8PCA0KSArIChjaC0+Y2hfcG9ydG51bSAqIDB4MjgpCisJICAgICAgICsgTElORV9TUEVFRDsKIAogCXZhbHVlID0gcmVhZHcodmFkZHIgKyBvZmZzZXQpOwogCXJldHVybiB2YWx1ZTsKQEAgLTUxNTUsMzIgKzUwMDAsMzIgQEAKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRzOwogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKLQlzdHJ1Y3QgYnNfdCAgICpiczsKLQlzdHJ1Y3QgdW5fdCAgICp1bjsKLQl1MTYJaGVhZDsKLQl1MTYJY2ZsYWc7Ci0JdTE2CWlmbGFnOwotCXVjaGFyCW12YWw7Ci0JdWNoYXIJaGZsb3c7CisJc3RydWN0IGJzX3QgX19pb21lbSAqYnM7CisJc3RydWN0IHVuX3QgKnVuOworCXUxNiBoZWFkOworCXUxNiBjZmxhZzsKKwl1MTYgaWZsYWc7CisJdTggbXZhbDsKKwl1OCBoZmxvdzsKIAogCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKQotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAogCXVuID0gKHN0cnVjdCB1bl90ICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCF1biB8fCB1bi0+bWFnaWMgIT0gREdBUF9VTklUX01BR0lDKQotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAogCWNoID0gdW4tPnVuX2NoOwogCWlmICghY2ggfHwgY2gtPm1hZ2ljICE9IERHQVBfQ0hBTk5FTF9NQUdJQykKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIC1FSU87CiAKIAliZCA9IGNoLT5jaF9iZDsKIAlpZiAoIWJkIHx8IGJkLT5tYWdpYyAhPSBER0FQX0JPQVJEX01BR0lDKQotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVJTzsKIAogCWJzID0gY2gtPmNoX2JzOwogCWlmICghYnMpCi0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRUlPOwogCiAJdHMgPSAmdHR5LT50ZXJtaW9zOwogCkBAIC01NDI3LDEwICs1MjcyLDkgQEAKIAkJY2gtPmNoX2hmbG93ID0gaGZsb3c7CiAKIAkJLyogT2theSB0byBoYXZlIGNoYW5uZWwgYW5kIGJvYXJkIGxvY2tzIGhlbGQgY2FsbGluZyB0aGlzICovCi0JCWRnYXBfY21kYihjaCwgU0hGTE9XLCAodWNoYXIpIGhmbG93LCAweGZmLCAwKTsKKwkJZGdhcF9jbWRiKGNoLCBTSEZMT1csICh1OCkgaGZsb3csIDB4ZmYsIDApOwogCX0KIAotCiAJLyoKIAkgKiBTZXQgUlRTIGFuZC9vciBEVFIgVG9nZ2xlIGlmIG5lZWRlZCwKIAkgKiBidXQgb25seSBpZiBwcm9kdWN0IGlzIEZFUDUrIGJhc2VkLgpAQCAtNTQ1NSw3ICs1Mjk5LDcgQEAKIAkJY2gtPmNoX21vc3RhdCA9IG12YWw7CiAKIAkJLyogT2theSB0byBoYXZlIGNoYW5uZWwgYW5kIGJvYXJkIGxvY2tzIGhlbGQgY2FsbGluZyB0aGlzICovCi0JCWRnYXBfY21kYihjaCwgU01PREVNLCAodWNoYXIpIG12YWwsIERfUlRTKGNoKXxEX0RUUihjaCksIDApOworCQlkZ2FwX2NtZGIoY2gsIFNNT0RFTSwgKHU4KSBtdmFsLCBEX1JUUyhjaCl8RF9EVFIoY2gpLCAwKTsKIAl9CiAKIAkvKgpAQCAtNTYwNiwyMSArNTQ1MCwyMSBAQAogc3RhdGljIGludCBkZ2FwX2V2ZW50KHN0cnVjdCBib2FyZF90ICpiZCkKIHsKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKLQl1bG9uZwkJbG9ja19mbGFnczsKLQl1bG9uZwkJbG9ja19mbGFnczI7Ci0Jc3RydWN0IGJzX3QJKmJzOwotCXVjaGFyCQkqZXZlbnQ7Ci0JdWNoYXIJCSp2YWRkciA9IE5VTEw7Ci0Jc3RydWN0IGV2X3QJKmVhZGRyID0gTlVMTDsKLQl1aW50CQloZWFkOwotCXVpbnQJCXRhaWw7Ci0JaW50CQlwb3J0OwotCWludAkJcmVhc29uOwotCWludAkJbW9kZW07Ci0JaW50CQliMTsKKwl1bG9uZyBsb2NrX2ZsYWdzOworCXVsb25nIGxvY2tfZmxhZ3MyOworCXN0cnVjdCBic190IF9faW9tZW0gKmJzOworCXU4IF9faW9tZW0gKmV2ZW50OworCXU4IF9faW9tZW0gKnZhZGRyOworCXN0cnVjdCBldl90IF9faW9tZW0gKmVhZGRyOworCXVpbnQgaGVhZDsKKwl1aW50IHRhaWw7CisJaW50IHBvcnQ7CisJaW50IHJlYXNvbjsKKwlpbnQgbW9kZW07CisJaW50IGIxOwogCiAJaWYgKCFiZCB8fCBiZC0+bWFnaWMgIT0gREdBUF9CT0FSRF9NQUdJQykKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIC1FSU87CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmQtPmJkX2xvY2ssIGxvY2tfZmxhZ3MpOwogCkBAIC01NjI4LDEwICs1NDcyLDEwIEBACiAKIAlpZiAoIXZhZGRyKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJkLT5iZF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JZWFkZHIgPSAoc3RydWN0IGV2X3QgKikgKHZhZGRyICsgRVZCVUYpOworCWVhZGRyID0gKHN0cnVjdCBldl90IF9faW9tZW0gKikgKHZhZGRyICsgRVZCVUYpOwogCiAJLyogR2V0IG91ciBoZWFkIGFuZCB0YWlsICovCiAJaGVhZCA9IHJlYWR3KCYoZWFkZHItPmV2X2hlYWQpKTsKQEAgLTU2NDUsNyArNTQ4OSw3IEBACiAJICAgIChoZWFkIHwgdGFpbCkgJiAwMykgewogCQkvKiBMZXQgZ28gb2YgYm9hcmQgbG9jayAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZC0+YmRfbG9jaywgbG9ja19mbGFncyk7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRUlPOwogCX0KIAogCS8qCkBAIC01NjU5LDEwICs1NTAzLDEwIEBACiAKIAkJZXZlbnQgPSBiZC0+cmVfbWFwX21lbWJhc2UgKyB0YWlsICsgRVZTVEFSVDsKIAotCQlwb3J0ICAgPSBldmVudFswXTsKLQkJcmVhc29uID0gZXZlbnRbMV07Ci0JCW1vZGVtICA9IGV2ZW50WzJdOwotCQliMSAgICAgPSBldmVudFszXTsKKwkJcG9ydCAgID0gaW9yZWFkOChldmVudCk7CisJCXJlYXNvbiA9IGlvcmVhZDgoZXZlbnQgKyAxKTsKKwkJbW9kZW0gID0gaW9yZWFkOChldmVudCArIDIpOworCQliMSAgICAgPSBpb3JlYWQ4KGV2ZW50ICsgMyk7CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSBpbnRlcnJ1cHQgaXMgdmFsaWQuCkBAIC01Nzk1LDcgKzU2MzksNyBAQAogCiBzdGF0aWMgc3NpemVfdCBkZ2FwX2RyaXZlcl9ib2FyZHNfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGRwLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGRnYXBfTnVtQm9hcmRzKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZGdhcF9udW1ib2FyZHMpOwogfQogc3RhdGljIERSSVZFUl9BVFRSKGJvYXJkcywgU19JUlVTUiwgZGdhcF9kcml2ZXJfYm9hcmRzX3Nob3csIE5VTEwpOwogCkBAIC01ODczLDcgKzU3MTcsNyBAQAogewogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlpbnQgY291bnQgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaTsKIAogCWJkID0gZGdhcF92ZXJpZnlfYm9hcmQocCk7CiAJaWYgKCFiZCkKQEAgLTU4OTQsNyArNTczOCw3IEBACiB7CiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCWludCBjb3VudCA9IDA7Ci0JaW50IGkgPSAwOworCWludCBpOwogCiAJYmQgPSBkZ2FwX3ZlcmlmeV9ib2FyZChwKTsKIAlpZiAoIWJkKQpAQCAtNTkxNSw3ICs1NzU5LDcgQEAKIHsKIAlzdHJ1Y3QgYm9hcmRfdCAqYmQ7CiAJaW50IGNvdW50ID0gMDsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAliZCA9IGRnYXBfdmVyaWZ5X2JvYXJkKHApOwogCWlmICghYmQpCkBAIC01OTUyLDcgKzU3OTYsNyBAQAogewogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlpbnQgY291bnQgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaTsKIAogCWJkID0gZGdhcF92ZXJpZnlfYm9hcmQocCk7CiAJaWYgKCFiZCkKQEAgLTU5NzIsNyArNTgxNiw3IEBACiB7CiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCWludCBjb3VudCA9IDA7Ci0JaW50IGkgPSAwOworCWludCBpOwogCiAJYmQgPSBkZ2FwX3ZlcmlmeV9ib2FyZChwKTsKIAlpZiAoIWJkKQpAQCAtNTk5Miw3ICs1ODM2LDcgQEAKIHsKIAlzdHJ1Y3QgYm9hcmRfdCAqYmQ7CiAJaW50IGNvdW50ID0gMDsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAliZCA9IGRnYXBfdmVyaWZ5X2JvYXJkKHApOwogCWlmICghYmQpCkBAIC02MDEyLDcgKzU4NTYsNyBAQAogewogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlpbnQgY291bnQgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaTsKIAogCWJkID0gZGdhcF92ZXJpZnlfYm9hcmQocCk7CiAJaWYgKCFiZCkKQEAgLTYwMzIsNyArNTg3Niw3IEBACiB7CiAJc3RydWN0IGJvYXJkX3QgKmJkOwogCWludCBjb3VudCA9IDA7Ci0JaW50IGkgPSAwOworCWludCBpOwogCiAJYmQgPSBkZ2FwX3ZlcmlmeV9ib2FyZChwKTsKIAlpZiAoIWJkKQpAQCAtNjA1Miw3ICs1ODk2LDcgQEAKIHsKIAlzdHJ1Y3QgYm9hcmRfdCAqYmQ7CiAJaW50IGNvdW50ID0gMDsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAliZCA9IGRnYXBfdmVyaWZ5X2JvYXJkKHApOwogCWlmICghYmQpCkBAIC02MDcyLDcgKzU5MTYsNyBAQAogewogCXN0cnVjdCBib2FyZF90ICpiZDsKIAlpbnQgY291bnQgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaTsKIAogCWJkID0gZGdhcF92ZXJpZnlfYm9hcmQocCk7CiAJaWYgKCFiZCkKQEAgLTYzOTYsMTMgKzYyNDAsMTMgQEAKIAlzdHJ1Y3QgYm9hcmRfdCAqYmQ7CiAJc3RydWN0IGNoYW5uZWxfdCAqY2g7CiAJc3RydWN0IHVuX3QgKnVuOwotCWludAljbjsKLQlpbnQJYm47Ci0Jc3RydWN0IGNub2RlICpjcHRyID0gTlVMTDsKKwlpbnQgY247CisJaW50IGJuOworCXN0cnVjdCBjbm9kZSAqY3B0cjsKIAlpbnQgZm91bmQgPSBGQUxTRTsKIAlpbnQgbmNvdW50ID0gMDsKIAlpbnQgc3RhcnRvID0gMDsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKIAlpZiAoIWQpCiAJCXJldHVybiAwOwpAQCAtNjQ5NCw3ICs2MzM4LDYgQEAKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzX2RnYXBfJWRfJWRcbiIsCiAJCSh1bi0+dW5fdHlwZSA9PSBER0FQX1BSSU5UKSA/ICJwciIgOiAidHR5IiwgYm4sIGNuKTsKLQogfQogc3RhdGljIERFVklDRV9BVFRSKGN1c3RvbV9uYW1lLCBTX0lSVVNSLCBkZ2FwX3R0eV9uYW1lX3Nob3csIE5VTEwpOwogCkBAIC02NTM4LDE4ICs2MzgxLDE4IEBACiAvKgogICogUGFyc2UgYSBjb25maWd1cmF0aW9uIGZpbGUgcmVhZCBpbnRvIG1lbW9yeSBhcyBhIHN0cmluZy4KICAqLwotc3RhdGljIGludAlkZ2FwX3BhcnNlZmlsZShjaGFyICoqaW4sIGludCBSZW1vdmUpCitzdGF0aWMgaW50IGRnYXBfcGFyc2VmaWxlKGNoYXIgKippbiwgaW50IHJlbW92ZSkKIHsKIAlzdHJ1Y3QgY25vZGUgKnAsICpicmQsICpsaW5lLCAqY29uYzsKLQlpbnQJcmM7Ci0JY2hhcgkqcyA9IE5VTEw7Ci0JaW50CWxpbmVjbnQgPSAwOworCWludCByYzsKKwljaGFyICpzOworCWludCBsaW5lY250ID0gMDsKIAogCXAgPSAmZGdhcF9oZWFkOwogCWJyZCA9IGxpbmUgPSBjb25jID0gTlVMTDsKIAogCS8qIHBlcmhhcHMgd2UgYXJlIGFkZGluZyB0byBhbiBleGlzdGluZyBsaXN0PyAqLwotCXdoaWxlIChwLT5uZXh0ICE9IE5VTEwpCisJd2hpbGUgKHAtPm5leHQpCiAJCXAgPSBwLT5uZXh0OwogCiAJLyogZmlsZSBtdXN0IHN0YXJ0IHdpdGggYSBCRUdJTiAqLwpAQCAtNjU4OSw3ICs2NDMyLDcgQEAKIAkJCX0KIAkJCXAgPSBwLT5uZXh0OwogCi0JCQlwLT51LmJvYXJkLnN0YXR1cyA9IGRnYXBfc2F2ZXN0cmluZygiTm8iKTsKKwkJCXAtPnUuYm9hcmQuc3RhdHVzID0ga3N0cmR1cCgiTm8iLCBHRlBfS0VSTkVMKTsKIAkJCWxpbmUgPSBjb25jID0gTlVMTDsKIAkJCWJyZCA9IHA7CiAJCQlsaW5lY250ID0gLTE7CkBAIC02NjgzLDExICs2NTI2LDExIEBACiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQlpZiAocyA9PSBOVUxMKSB7CisJCQlpZiAoIXMpIHsKIAkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KLQkJCXAtPnUuYm9hcmQucG9ydHN0ciA9IGRnYXBfc2F2ZXN0cmluZyhzKTsKKwkJCXAtPnUuYm9hcmQucG9ydHN0ciA9IGtzdHJkdXAocywgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoa3N0cnRvbChzLCAwLCAmcC0+dS5ib2FyZC5wb3J0KSkgewogCQkJCWRnYXBfZXJyKCJiYWQgbnVtYmVyIGZvciBJTyBwb3J0Iik7CiAJCQkJcmV0dXJuIC0xOwpAQCAtNjcwMSwxMSArNjU0NCwxMSBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCQlwLT51LmJvYXJkLmFkZHJzdHIgPSBkZ2FwX3NhdmVzdHJpbmcocyk7CisJCQlwLT51LmJvYXJkLmFkZHJzdHIgPSBrc3RyZHVwKHMsIEdGUF9LRVJORUwpOwogCQkJaWYgKGtzdHJ0b3VsKHMsIDAsICZwLT51LmJvYXJkLmFkZHIpKSB7CiAJCQkJZGdhcF9lcnIoImJhZCBudW1iZXIgZm9yIG1lbW9yeSBhZGRyZXNzIik7CiAJCQkJcmV0dXJuIC0xOwpAQCAtNjcxOSwyMiArNjU2MiwyMiBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCQlwLT51LmJvYXJkLnBjaWJ1c3N0ciA9IGRnYXBfc2F2ZXN0cmluZyhzKTsKKwkJCXAtPnUuYm9hcmQucGNpYnVzc3RyID0ga3N0cmR1cChzLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChrc3RydG91bChzLCAwLCAmcC0+dS5ib2FyZC5wY2lidXMpKSB7CiAJCQkJZGdhcF9lcnIoImJhZCBudW1iZXIgZm9yIHBjaSBidXMiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlwLT51LmJvYXJkLnZfcGNpYnVzID0gMTsKIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCQlwLT51LmJvYXJkLnBjaXNsb3RzdHIgPSBkZ2FwX3NhdmVzdHJpbmcocyk7CisJCQlwLT51LmJvYXJkLnBjaXNsb3RzdHIgPSBrc3RyZHVwKHMsIEdGUF9LRVJORUwpOwogCQkJaWYgKGtzdHJ0b3VsKHMsIDAsICZwLT51LmJvYXJkLnBjaXNsb3QpKSB7CiAJCQkJZGdhcF9lcnIoImJhZCBudW1iZXIgZm9yIHBjaSBzbG90Iik7CiAJCQkJcmV0dXJuIC0xOwpAQCAtNjc0OCwxMSArNjU5MSwxMSBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCQlwLT51LmJvYXJkLm1ldGhvZCA9IGRnYXBfc2F2ZXN0cmluZyhzKTsKKwkJCXAtPnUuYm9hcmQubWV0aG9kID0ga3N0cmR1cChzLCBHRlBfS0VSTkVMKTsKIAkJCXAtPnUuYm9hcmQudl9tZXRob2QgPSAxOwogCQkJYnJlYWs7CiAKQEAgLTY3NjIsMTcgKzY2MDUsMTcgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCWlmIChzID09IE5VTEwpIHsKKwkJCWlmICghcykgewogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkJcC0+dS5ib2FyZC5zdGF0dXMgPSBkZ2FwX3NhdmVzdHJpbmcocyk7CisJCQlwLT51LmJvYXJkLnN0YXR1cyA9IGtzdHJkdXAocywgR0ZQX0tFUk5FTCk7CiAJCQlicmVhazsKIAogCQljYXNlIE5QT1JUUzoJLyogbnVtYmVyIG9mIHBvcnRzICovCiAJCQlpZiAocC0+dHlwZSA9PSBCTk9ERSkgewogCQkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJCWlmIChzID09IE5VTEwpIHsKKwkJCQlpZiAoIXMpIHsKIAkJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KQEAgLTY3ODMsNyArNjYyNiw3IEBACiAJCQkJcC0+dS5ib2FyZC52X25wb3J0ID0gMTsKIAkJCX0gZWxzZSBpZiAocC0+dHlwZSA9PSBDTk9ERSkgewogCQkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJCWlmIChzID09IE5VTEwpIHsKKwkJCQlpZiAoIXMpIHsKIAkJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KQEAgLTY3OTQsNyArNjYzNyw3IEBACiAJCQkJcC0+dS5jb25jLnZfbnBvcnQgPSAxOwogCQkJfSBlbHNlIGlmIChwLT50eXBlID09IE1OT0RFKSB7CiAJCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJCWlmICghcykgewogCQkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQpAQCAtNjgxMSwxOCArNjY1NCwxOCBAQAogCiAJCWNhc2UgSUQ6CS8qIGxldHRlciBJRCB1c2VkIGluIHR0eSBuYW1lICovCiAJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCWlmIChzID09IE5VTEwpIHsKKwkJCWlmICghcykgewogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlwLT51LmJvYXJkLnN0YXR1cyA9IGRnYXBfc2F2ZXN0cmluZyhzKTsKKwkJCXAtPnUuYm9hcmQuc3RhdHVzID0ga3N0cmR1cChzLCBHRlBfS0VSTkVMKTsKIAogCQkJaWYgKHAtPnR5cGUgPT0gQ05PREUpIHsKLQkJCQlwLT51LmNvbmMuaWQgPSBkZ2FwX3NhdmVzdHJpbmcocyk7CisJCQkJcC0+dS5jb25jLmlkID0ga3N0cmR1cChzLCBHRlBfS0VSTkVMKTsKIAkJCQlwLT51LmNvbmMudl9pZCA9IDE7CiAJCQl9IGVsc2UgaWYgKHAtPnR5cGUgPT0gTU5PREUpIHsKLQkJCQlwLT51Lm1vZHVsZS5pZCA9IGRnYXBfc2F2ZXN0cmluZyhzKTsKKwkJCQlwLT51Lm1vZHVsZS5pZCA9IGtzdHJkdXAocywgR0ZQX0tFUk5FTCk7CiAJCQkJcC0+dS5tb2R1bGUudl9pZCA9IDE7CiAJCQl9IGVsc2UgewogCQkJCWRnYXBfZXJyKCJpZCBvbmx5IHZhbGlkIGZvciBjb25jZW50cmF0b3JzIG9yIG1vZHVsZXMiKTsKQEAgLTY4MzMsNyArNjY3Niw3IEBACiAJCWNhc2UgU1RBUlRPOgkvKiBzdGFydCBvZmZzZXQgb2YgSUQgKi8KIAkJCWlmIChwLT50eXBlID09IEJOT0RFKSB7CiAJCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJCWlmICghcykgewogCQkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQpAQCAtNjg0NCw3ICs2Njg3LDcgQEAKIAkJCQlwLT51LmJvYXJkLnZfc3RhcnQgPSAxOwogCQkJfSBlbHNlIGlmIChwLT50eXBlID09IENOT0RFKSB7CiAJCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJCWlmICghcykgewogCQkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQpAQCAtNjg1NSw3ICs2Njk4LDcgQEAKIAkJCQlwLT51LmNvbmMudl9zdGFydCA9IDE7CiAJCQl9IGVsc2UgaWYgKHAtPnR5cGUgPT0gTU5PREUpIHsKIAkJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCQlpZiAocyA9PSBOVUxMKSB7CisJCQkJaWYgKCFzKSB7CiAJCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CkBAIC02ODg0LDcgKzY3MjcsNyBAQAogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCQlwLT51LnR0eW5hbWUgPSBkZ2FwX3NhdmVzdHJpbmcocyk7CisJCQlwLT51LnR0eW5hbWUgPSBrc3RyZHVwKHMsIEdGUF9LRVJORUwpOwogCQkJaWYgKCFwLT51LnR0eW5hbWUpIHsKIAkJCQlkZ2FwX2Vycigib3V0IG9mIG1lbW9yeSIpOwogCQkJCXJldHVybiAtMTsKQEAgLTY5MDUsNyArNjc0OCw3IEBACiAJCQkJZGdhcF9lcnIoInVuZXhwZWNlZCBlbmQgb2YgZmlsZSIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KLQkJCXAtPnUuY3VuYW1lID0gZGdhcF9zYXZlc3RyaW5nKHMpOworCQkJcC0+dS5jdW5hbWUgPSBrc3RyZHVwKHMsIEdGUF9LRVJORUwpOwogCQkJaWYgKCFwLT51LmN1bmFtZSkgewogCQkJCWRnYXBfZXJyKCJvdXQgb2YgbWVtb3J5Iik7CiAJCQkJcmV0dXJuIC0xOwpAQCAtNjkxNSw3ICs2NzU4LDcgQEAKIAkJY2FzZSBMSU5FOgkvKiBsaW5lIGluZm9ybWF0aW9uICovCiAJCQlpZiAoZGdhcF9jaGVja25vZGUocCkpCiAJCQkJcmV0dXJuIC0xOwotCQkJaWYgKGJyZCA9PSBOVUxMKSB7CisJCQlpZiAoIWJyZCkgewogCQkJCWRnYXBfZXJyKCJtdXN0IHNwZWNpZnkgYm9hcmQgYmVmb3JlIGxpbmUgaW5mbyIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTY5MzgsNyArNjc4MSw3IEBACiAJCWNhc2UgQ09OQzoJLyogY29uY2VudHJhdG9yIGluZm9ybWF0aW9uICovCiAJCQlpZiAoZGdhcF9jaGVja25vZGUocCkpCiAJCQkJcmV0dXJuIC0xOwotCQkJaWYgKGxpbmUgPT0gTlVMTCkgeworCQkJaWYgKCFsaW5lKSB7CiAJCQkJZGdhcF9lcnIoIm11c3Qgc3BlY2lmeSBsaW5lIGluZm8gYmVmb3JlIGNvbmNlbnRyYXRvciIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTY5NzcsNyArNjgyMCw3IEBACiAJCWNhc2UgTU9EOgkvKiBFQkkgbW9kdWxlICovCiAJCQlpZiAoZGdhcF9jaGVja25vZGUocCkpCiAJCQkJcmV0dXJuIC0xOwotCQkJaWYgKGJyZCA9PSBOVUxMKSB7CisJCQlpZiAoIWJyZCkgewogCQkJCWRnYXBfZXJyKCJtdXN0IHNwZWNpZnkgYm9hcmQgaW5mbyBiZWZvcmUgRUJJIG1vZHVsZXMiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CkBAIC02OTg2LDcgKzY4MjksNyBAQAogCQkJCWxpbmVjbnQgPSAwOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlpZiAoY29uYyA9PSBOVUxMKSB7CisJCQkJaWYgKCFjb25jKSB7CiAJCQkJCWRnYXBfZXJyKCJtdXN0IHNwZWNpZnkgY29uY2VudHJhdG9yIGluZm8gYmVmb3JlIEVCSSBtb2R1bGUiKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KQEAgLTcwMjksNyArNjg3Miw3IEBACiAJCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9Ci0JCQkJcC0+dS5saW5lLmNhYmxlID0gZGdhcF9zYXZlc3RyaW5nKHMpOworCQkJCXAtPnUubGluZS5jYWJsZSA9IGtzdHJkdXAocywgR0ZQX0tFUk5FTCk7CiAJCQkJcC0+dS5saW5lLnZfY2FibGUgPSAxOwogCQkJfQogCQkJYnJlYWs7CkBAIC03MDM3LDcgKzY4ODAsNyBAQAogCQljYXNlIFNQRUVEOgkvKiBzeW5jIGxpbmUgc3BlZWQgaW5kaWNhdGlvbiAqLwogCQkJaWYgKHAtPnR5cGUgPT0gTE5PREUpIHsKIAkJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCQlpZiAocyA9PSBOVUxMKSB7CisJCQkJaWYgKCFzKSB7CiAJCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CkBAIC03MDQ4LDcgKzY4OTEsNyBAQAogCQkJCXAtPnUubGluZS52X3NwZWVkID0gMTsKIAkJCX0gZWxzZSBpZiAocC0+dHlwZSA9PSBDTk9ERSkgewogCQkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJCWlmIChzID09IE5VTEwpIHsKKwkJCQlpZiAoIXMpIHsKIAkJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KQEAgLTcwNzAsNyArNjkxMyw3IEBACiAJCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9Ci0JCQkJcC0+dS5jb25jLmNvbm5lY3QgPSBkZ2FwX3NhdmVzdHJpbmcocyk7CisJCQkJcC0+dS5jb25jLmNvbm5lY3QgPSBrc3RyZHVwKHMsIEdGUF9LRVJORUwpOwogCQkJCXAtPnUuY29uYy52X2Nvbm5lY3QgPSAxOwogCQkJfQogCQkJYnJlYWs7CkBAIC03MDg4LDcgKzY5MzEsNyBAQAogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCQlwLT51LnByaW50bmFtZSA9IGRnYXBfc2F2ZXN0cmluZyhzKTsKKwkJCXAtPnUucHJpbnRuYW1lID0ga3N0cmR1cChzLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghcC0+dS5wcmludG5hbWUpIHsKIAkJCQlkZ2FwX2Vycigib3V0IG9mIG1lbW9yeSIpOwogCQkJCXJldHVybiAtMTsKQEAgLTcxMDUsNyArNjk0OCw3IEBACiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CkBAIC03MTI1LDcgKzY5NjgsNyBAQAogCQkJfQogCQkJcCA9IHAtPm5leHQ7CiAJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCWlmIChzID09IE5VTEwpIHsKKwkJCWlmICghcykgewogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtNzE0NSw3ICs2OTg4LDcgQEAKIAkJCX0KIAkJCXAgPSBwLT5uZXh0OwogCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQlpZiAocyA9PSBOVUxMKSB7CisJCQlpZiAoIXMpIHsKIAkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTcxNjUsNyArNzAwOCw3IEBACiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CkBAIC03MTg1LDcgKzcwMjgsNyBAQAogCQkJfQogCQkJcCA9IHAtPm5leHQ7CiAJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCWlmIChzID09IE5VTEwpIHsKKwkJCWlmICghcykgewogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtNzIwNSw3ICs3MDQ4LDcgQEAKIAkJCX0KIAkJCXAgPSBwLT5uZXh0OwogCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQlpZiAocyA9PSBOVUxMKSB7CisJCQlpZiAoIXMpIHsKIAkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTcyMjUsNyArNzA2OCw3IEBACiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJCXMgPSBkZ2FwX2dldHdvcmQoaW4pOwotCQkJaWYgKHMgPT0gTlVMTCkgeworCQkJaWYgKCFzKSB7CiAJCQkJZGdhcF9lcnIoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CkBAIC03MjQ1LDcgKzcwODgsNyBAQAogCQkJfQogCQkJcCA9IHAtPm5leHQ7CiAJCQlzID0gZGdhcF9nZXR3b3JkKGluKTsKLQkJCWlmIChzID09IE5VTEwpIHsKKwkJCWlmICghcykgewogCQkJCWRnYXBfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtNzI2NSw3ICs3MTA4LDcgQEAKIAkJCX0KIAkJCXAgPSBwLT5uZXh0OwogCQkJcyA9IGRnYXBfZ2V0d29yZChpbik7Ci0JCQlpZiAocyA9PSBOVUxMKSB7CisJCQlpZiAoIXMpIHsKIAkJCQlkZ2FwX2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTcyODUsNyArNzEyOCw3IEBACiAgKi8KIHN0YXRpYyBjaGFyICpkZ2FwX3NpbmRleChjaGFyICpzdHJpbmcsIGNoYXIgKmdyb3VwKQogewotCWNoYXIgICAgKnB0cjsKKwljaGFyICpwdHI7CiAKIAlpZiAoIXN0cmluZyB8fCAhZ3JvdXApCiAJCXJldHVybiAoY2hhciAqKSBOVUxMOwpAQCAtNzMxNyw3ICs3MTYwLDcgQEAKICAqLwogc3RhdGljIGludCBkZ2FwX2dldHRvayhjaGFyICoqaW4sIHN0cnVjdCBjbm9kZSAqcCkKIHsKLQljaGFyCSp3OworCWNoYXIgKnc7CiAJc3RydWN0IHRva2xpc3QgKnQ7CiAKIAlpZiAoc3Ryc3RyKGRnYXBfY3dvcmQsICJib2FyIikpIHsKQEAgLTczODYsOCArNzIyOSw4IEBACiB7CiAJc3RydWN0IGNub2RlICpuOwogCi0JbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbm9kZSksIEdGUF9BVE9NSUMpOwotCWlmIChuICE9IE5VTEwpIHsKKwluID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNub2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG4pIHsKIAkJbWVtc2V0KChjaGFyICopbiwgMCwgc2l6ZW9mKHN0cnVjdCBjbm9kZSkpOwogCQluLT50eXBlID0gdDsKIAl9CkBAIC03NDU0LDM3ICs3Mjk3LDIxIEBACiB9CiAKIC8qCi0gKiBzYXZlIGEgc3RyaW5nIHNvbWV3aGVyZQotICovCi1zdGF0aWMgY2hhcgkqZGdhcF9zYXZlc3RyaW5nKGNoYXIgKnMpCi17Ci0JY2hhcgkqcDsKLQotCXAgPSBrbWFsbG9jKHN0cmxlbihzKSArIDEsIEdGUF9BVE9NSUMpOwotCWlmIChwKQotCQlzdHJjcHkocCwgcyk7Ci0JcmV0dXJuIHA7Ci19Ci0KLS8qCiAgKiBHaXZlbiBhIGJvYXJkIHBvaW50ZXIsIHJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgdXNlIGludGVycnVwdHMgb3Igbm90LgogICovCiBzdGF0aWMgdWludCBkZ2FwX2NvbmZpZ19nZXRfdXNlaW50cihzdHJ1Y3QgYm9hcmRfdCAqYmQpCiB7Ci0Jc3RydWN0IGNub2RlICpwID0gTlVMTDsKKwlzdHJ1Y3QgY25vZGUgKnA7CiAKIAlpZiAoIWJkKQogCQlyZXR1cm4gMDsKIAogCWZvciAocCA9IGJkLT5iZF9jb25maWc7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCXN3aXRjaCAocC0+dHlwZSkgewotCQljYXNlIElOVFJOT0RFOgorCQlpZiAocC0+dHlwZSA9PSBJTlRSTk9ERSkgewogCQkJLyoKIAkJCSAqIGNoZWNrIGZvciBwY3hyIHR5cGVzLgogCQkJICovCiAJCQlyZXR1cm4gcC0+dS51c2VpbnRyOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTc0OTcsMjAgKzczMjQsMTcgQEAKICAqLwogc3RhdGljIHVpbnQgZGdhcF9jb25maWdfZ2V0X2FsdHBpbihzdHJ1Y3QgYm9hcmRfdCAqYmQpCiB7Ci0Jc3RydWN0IGNub2RlICpwID0gTlVMTDsKKwlzdHJ1Y3QgY25vZGUgKnA7CiAKIAlpZiAoIWJkKQogCQlyZXR1cm4gMDsKIAogCWZvciAocCA9IGJkLT5iZF9jb25maWc7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCXN3aXRjaCAocC0+dHlwZSkgewotCQljYXNlIEFOT0RFOgorCQlpZiAocC0+dHlwZSA9PSBBTk9ERSkgewogCQkJLyoKIAkJCSAqIGNoZWNrIGZvciBwY3hyIHR5cGVzLgogCQkJICovCiAJCQlyZXR1cm4gcC0+dS5hbHRwaW47Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKIAkJfQogCX0KIApAQCAtNzUyNCw1OSArNzM0OCw2MSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNub2RlICpkZ2FwX2ZpbmRfY29uZmlnKGludCB0eXBlLCBpbnQgYnVzLCBpbnQgc2xvdCkKIHsKLQlzdHJ1Y3QgY25vZGUgKnAsICpwcmV2ID0gTlVMTCwgKnByZXYyID0gTlVMTCwgKmZvdW5kID0gTlVMTDsKKwlzdHJ1Y3QgY25vZGUgKnAsICpwcmV2LCAqcHJldjIsICpmb3VuZDsKIAogCXAgPSAmZGdhcF9oZWFkOwogCi0Jd2hpbGUgKHAtPm5leHQgIT0gTlVMTCkgeworCXdoaWxlIChwLT5uZXh0KSB7CiAJCXByZXYgPSBwOwogCQlwID0gcC0+bmV4dDsKIAotCQlpZiAocC0+dHlwZSA9PSBCTk9ERSkgeworCQlpZiAocC0+dHlwZSAhPSBCTk9ERSkKKwkJCWNvbnRpbnVlOwogCi0JCQlpZiAocC0+dS5ib2FyZC50eXBlID09IHR5cGUpIHsKKwkJaWYgKHAtPnUuYm9hcmQudHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CiAKLQkJCQlpZiAocC0+dS5ib2FyZC52X3BjaWJ1cyAmJgotCQkJCSAgICBwLT51LmJvYXJkLnBjaWJ1cyAhPSBidXMpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChwLT51LmJvYXJkLnZfcGNpc2xvdCAmJgotCQkJCSAgICBwLT51LmJvYXJkLnBjaXNsb3QgIT0gc2xvdCkKLQkJCQkJY29udGludWU7CisJCWlmIChwLT51LmJvYXJkLnZfcGNpYnVzICYmCisJCSAgICBwLT51LmJvYXJkLnBjaWJ1cyAhPSBidXMpCisJCQljb250aW51ZTsKIAotCQkJCWZvdW5kID0gcDsKLQkJCQkvKgotCQkJCSAqIEtlZXAgd2Fsa2luZyB0aHJ1IHRoZSBsaXN0IHRpbGwgd2UKLQkJCQkgKiBmaW5kIHRoZSBuZXh0IGJvYXJkLgotCQkJCSAqLwotCQkJCXdoaWxlIChwLT5uZXh0ICE9IE5VTEwpIHsKLQkJCQkJcHJldjIgPSBwOwotCQkJCQlwID0gcC0+bmV4dDsKLQkJCQkJaWYgKHAtPnR5cGUgPT0gQk5PREUpIHsKKwkJaWYgKHAtPnUuYm9hcmQudl9wY2lzbG90ICYmCisJCSAgICBwLT51LmJvYXJkLnBjaXNsb3QgIT0gc2xvdCkKKwkJCWNvbnRpbnVlOwogCi0JCQkJCQkvKgotCQkJCQkJICogTWFyayB0aGUgZW5kIG9mIG91ciAxIGJvYXJkCi0JCQkJCQkgKiBjaGFpbiBvZiBjb25maWdzLgotCQkJCQkJICovCi0JCQkJCQlwcmV2Mi0+bmV4dCA9IE5VTEw7CisJCWZvdW5kID0gcDsKKwkJLyoKKwkJICogS2VlcCB3YWxraW5nIHRocnUgdGhlIGxpc3QgdGlsbCB3ZQorCQkgKiBmaW5kIHRoZSBuZXh0IGJvYXJkLgorCQkgKi8KKwkJd2hpbGUgKHAtPm5leHQpIHsKKwkJCXByZXYyID0gcDsKKwkJCXAgPSBwLT5uZXh0OwogCi0JCQkJCQkvKgotCQkJCQkJICogTGluayB0aGUgIm5leHQiIGJvYXJkIHRvIHRoZQotCQkJCQkJICogcHJldmlvdXMgYm9hcmQsIGVmZmVjdGl2ZWx5Ci0JCQkJCQkgKiAidW5saW5raW5nIiBvdXIgYm9hcmQgZnJvbQotCQkJCQkJICogdGhlIG1haW4gY29uZmlnLgotCQkJCQkJICovCi0JCQkJCQlwcmV2LT5uZXh0ID0gcDsKKwkJCWlmIChwLT50eXBlICE9IEJOT0RFKQorCQkJCWNvbnRpbnVlOwogCi0JCQkJCQlyZXR1cm4gZm91bmQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBJdCBtdXN0IGJlIHRoZSBsYXN0IGJvYXJkIGluIHRoZSBsaXN0LgotCQkJCSAqLwotCQkJCXByZXYtPm5leHQgPSBOVUxMOwotCQkJCXJldHVybiBmb3VuZDsKLQkJCX0KKwkJCS8qCisJCQkgKiBNYXJrIHRoZSBlbmQgb2Ygb3VyIDEgYm9hcmQKKwkJCSAqIGNoYWluIG9mIGNvbmZpZ3MuCisJCQkgKi8KKwkJCXByZXYyLT5uZXh0ID0gTlVMTDsKKworCQkJLyoKKwkJCSAqIExpbmsgdGhlICJuZXh0IiBib2FyZCB0byB0aGUKKwkJCSAqIHByZXZpb3VzIGJvYXJkLCBlZmZlY3RpdmVseQorCQkJICogInVubGlua2luZyIgb3VyIGJvYXJkIGZyb20KKwkJCSAqIHRoZSBtYWluIGNvbmZpZy4KKwkJCSAqLworCQkJcHJldi0+bmV4dCA9IHA7CisKKwkJCXJldHVybiBmb3VuZDsKIAkJfQorCQkvKgorCQkgKiBJdCBtdXN0IGJlIHRoZSBsYXN0IGJvYXJkIGluIHRoZSBsaXN0LgorCQkgKi8KKwkJcHJldi0+bmV4dCA9IE5VTEw7CisJCXJldHVybiBmb3VuZDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NTg5LDcgKzc0MTUsNyBAQAogc3RhdGljIHVpbnQgZGdhcF9jb25maWdfZ2V0X251bV9wcnRzKHN0cnVjdCBib2FyZF90ICpiZCkKIHsKIAlpbnQgY291bnQgPSAwOwotCXN0cnVjdCBjbm9kZSAqcCA9IE5VTEw7CisJc3RydWN0IGNub2RlICpwOwogCiAJaWYgKCFiZCkKIAkJcmV0dXJuIDA7CkBAIC03NjE4LDggKzc0NDQsOCBAQAogc3RhdGljIGNoYXIgKmRnYXBfY3JlYXRlX2NvbmZpZ19zdHJpbmcoc3RydWN0IGJvYXJkX3QgKmJkLCBjaGFyICpzdHJpbmcpCiB7CiAJY2hhciAqcHRyID0gc3RyaW5nOwotCXN0cnVjdCBjbm9kZSAqcCA9IE5VTEw7Ci0Jc3RydWN0IGNub2RlICpxID0gTlVMTDsKKwlzdHJ1Y3QgY25vZGUgKnA7CisJc3RydWN0IGNub2RlICpxOwogCWludCBzcGVlZDsKIAogCWlmICghYmQpIHsKQEAgLTc2NDUsMTMgKzc0NzEsMTEgQEAKIAkJCSAqLwogCQkJc3BlZWQgPSBwLT51LmNvbmMuc3BlZWQ7CiAJCQlxID0gcC0+bmV4dDsKLQkJCWlmICgocSAhPSBOVUxMKSAmJiAocS0+dHlwZSA9PSBNTk9ERSkpIHsKKwkJCWlmIChxICYmIChxLT50eXBlID09IE1OT0RFKSkgewogCQkJCSpwdHIgPSAocC0+dS5jb25jLm5wb3J0ICsgMHg4MCk7CiAJCQkJcHRyKys7CiAJCQkJcCA9IHE7Ci0JCQkJd2hpbGUgKChxLT5uZXh0ICE9IE5VTEwpICYmCi0JCQkJICAgICAgIChxLT5uZXh0LT50eXBlKSA9PSBNTk9ERSkgewotCisJCQkJd2hpbGUgKHEtPm5leHQgJiYgKHEtPm5leHQtPnR5cGUpID09IE1OT0RFKSB7CiAJCQkJCSpwdHIgPSAocS0+dS5tb2R1bGUubnBvcnQgKyAweDgwKTsKIAkJCQkJcHRyKys7CiAJCQkJCXAgPSBxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RnYXAvZGdhcC5oIGIvZHJpdmVycy9zdGFnaW5nL2RnYXAvZGdhcC5oCmluZGV4IDZiOGY1ZjguLjAzYzAyMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kZ2FwL2RnYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZGdhcC9kZ2FwLmgKQEAgLTM5LDkgKzM5LDYgQEAKICMgZGVmaW5lIEZBTFNFIDAKICNlbmRpZgogCi0vKiBSZXF1aXJlZCBmb3Igb3VyIHNoYXJlZCBoZWFkZXJzISAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1Y2hhcjsKLQogI2lmICFkZWZpbmVkKFRUWV9GTElQQlVGX1NJWkUpCiAjIGRlZmluZSBUVFlfRkxJUEJVRl9TSVpFIDUxMgogI2VuZGlmCkBAIC02MSw3ICs1OCw3IEBACiAKIC8qCiAgKiBkZWZpbmVzIGZyb20gZGdhcF9wY2kuaAotICovIAorICovCiAjZGVmaW5lIFBDSU1BWCAzMgkJCS8qIG1heGltdW0gbnVtYmVyIG9mIFBDSSBib2FyZHMgKi8KIAogI2RlZmluZSBESUdJX1ZJRAkJMHgxMTRGCkBAIC0xODYsNyArMTgzLDcgQEAKIAkJCUVDSE9DVEwgfCBFQ0hPS0UgfCBJRVhURU4pCiAKICNpZm5kZWYgX1BPU0lYX1ZESVNBQkxFCi0jZGVmaW5lICAgX1BPU0lYX1ZESVNBQkxFICdcMCcKKyNkZWZpbmUgX1BPU0lYX1ZESVNBQkxFICgnXDAnKQogI2VuZGlmCiAKICNkZWZpbmUgU05JRkZfTUFYCTY1NTM2CQkvKiBTbmlmZiBidWZmZXIgc2l6ZSAoMl5uKSAqLwpAQCAtMjA3LDkgKzIwNCwxMSBAQAogI2RlZmluZSBFVlNUQVJUICAgICAgICAgMHgwODAwTCAgICAgICAgIC8qIFN0YXJ0IG9mIGV2ZW50IGJ1ZmZlciAgICAgICAgKi8KICNkZWZpbmUgRVZNQVggICAgICAgICAgIDB4MGMwMEwgICAgICAgICAvKiBFbmQgb2YgZXZlbnQgYnVmZmVyICAgICAgICAgICovCiAjZGVmaW5lIEZFUDVfUExVUyAgICAgICAweDBFNDAgICAgICAgICAgLyogQVNDSUkgJzUnIGFuZCBBU0NJSSAnQScgaXMgaGVyZSAgKi8KLSNkZWZpbmUgRUNTX1NFRyAgICAgICAgIDB4MEU0NCAgICAgICAgICAvKiBTZWdtZW50IG9mIHRoZSBleHRlbmRlZCBjaGFubmVsIHN0cnVjdHVyZSAqLwotI2RlZmluZSBMSU5FX1NQRUVEICAgICAgMHgxMCAgICAgICAgICAgIC8qIE9mZnNldCBpbnRvIEVDU19TRUcgZm9yIGxpbmUgc3BlZWQgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZSBmZXAgaGFzIGV4dGVuZGVkIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBFQ1NfU0VHICAgICAgICAgMHgwRTQ0ICAgICAgICAgIC8qIFNlZ21lbnQgb2YgdGhlIGV4dGVuZGVkICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCBzdHJ1Y3R1cmUgICAgICAgICAgICAqLworI2RlZmluZSBMSU5FX1NQRUVEICAgICAgMHgxMCAgICAgICAgICAgIC8qIE9mZnNldCBpbnRvIEVDU19TRUcgZm9yIGxpbmUgKi8KKwkJCQkJLyogc3BlZWQgaWYgdGhlIGZlcCBoYXMgZXh0ZW5kZWQgKi8KKwkJCQkJLyogY2FwYWJpbGl0aWVzICAgICAgICAgICAgICAgICAqLwogCiAvKiBCSU9TIE1BR0lDIFNQT1RTICovCiAjZGVmaW5lIEVSUk9SICAgICAgICAgICAweDBDMTRMCQkvKiBCSU9TIGVycm9yIGNvZGUgICAgICAgICAgICAgICovCkBAIC0yNDcsMTIgKzI0NiwxMiBAQAogCiAjZGVmaW5lIEZFUFRJTUVPVVQgMjAwMDAwCiAKLSNkZWZpbmUgRU5BQkxFX0lOVFIJCTB4MGUwNAkJLyogRW5hYmxlIGludGVycnVwdHMgZmxhZyAqLwotI2RlZmluZSBGRVBQT0xMX01JTgkJMQkJLyogbWluaW11bSBvZiAxIG1pbGxpc2Vjb25kICovCi0jZGVmaW5lIEZFUFBPTExfTUFYCQkyMAkJLyogbWF4aW11bSBvZiAyMCBtaWxsaXNlY29uZHMgKi8KLSNkZWZpbmUgRkVQUE9MTAkJCTB4MGMyNgkJLyogRmVwIGV2ZW50IHBvbGwgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgRU5BQkxFX0lOVFIJMHgwZTA0CQkvKiBFbmFibGUgaW50ZXJydXB0cyBmbGFnICovCisjZGVmaW5lIEZFUFBPTExfTUlOCTEJCS8qIG1pbmltdW0gb2YgMSBtaWxsaXNlY29uZCAqLworI2RlZmluZSBGRVBQT0xMX01BWAkyMAkJLyogbWF4aW11bSBvZiAyMCBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgRkVQUE9MTAkJMHgwYzI2CQkvKiBGZXAgZXZlbnQgcG9sbCBpbnRlcnZhbCAqLwogCi0jZGVmaW5lCUlBTFRQSU4JCQkweDAwODAJCS8qIElucHV0IGZsYWcgdG8gc3dhcCBEU1IgPC0+IERDRCAqLworI2RlZmluZQlJQUxUUElOCQkweDAwODAJCS8qIElucHV0IGZsYWcgdG8gc3dhcCBEU1IgPC0+IERDRCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBGRVAgc3VwcG9ydGVkIGZ1bmN0aW9ucwpAQCAtMjgwLDE0ICsyNzksMTIgQEAKICNkZWZpbmUgU1BJTlRGQwkJMHhmYwkJLyogUmVzZXJ2ZWQJCQkqLwogI2RlZmluZSBTQ09NTU9ERQkweGZkCQkvKiBTZXQgUlMyMzIvNDIyIG1vZGUJCSovCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJTW9kZXMgZm9yIFNDT01NT0RFCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBNT0RFXzIzMgkweDAwCiAjZGVmaW5lIE1PREVfNDIyCTB4MDEKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgIEV2ZW50IGZsYWdzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM2MiwxMyArMzU5LDEzIEBACiAjZGVmaW5lIE1DOEU4SyAgMzYKIAogI2RlZmluZSBBVkFORlMJNDIJLyogc3RhcnQgb2YgQXZhbnN0YXIgZmFtaWx5IGRlZmluaXRpb25zICovCi0jZGVmaW5lIEE4UCAJNDIKKyNkZWZpbmUgQThQCTQyCiAjZGVmaW5lIEExNlAJNDMKICNkZWZpbmUgQVZBTkZFCTQzCS8qIGVuZCBvZiBBdmFuc3RhciBmYW1pbHkgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBEQTIwMDBGUwk0NAkvKiBzdGFydCBvZiBBY2NlbGVQb3J0IDIwMDAgZmFtaWx5IGRlZmluaXRpb25zICovCi0jZGVmaW5lIERBMjIgCQk0NCAvKiBBY2NlbGVQb3J0IDIwMDIgKi8KLSNkZWZpbmUgREEyNCAJCTQ1IC8qIEFjY2VsZVBvcnQgMjAwNCAqLworI2RlZmluZSBEQTIwMDBGUwk0NCAvKiBzdGFydCBvZiBBY2NlbGVQb3J0IDIwMDAgZmFtaWx5IGRlZmluaXRpb25zICovCisjZGVmaW5lIERBMjIJCTQ0IC8qIEFjY2VsZVBvcnQgMjAwMiAqLworI2RlZmluZSBEQTI0CQk0NSAvKiBBY2NlbGVQb3J0IDIwMDQgKi8KICNkZWZpbmUgREEyOAkJNDYgLyogQWNjZWxlUG9ydCAyMDA4ICovCiAjZGVmaW5lIERBMjE2CQk0NyAvKiBBY2NlbGVQb3J0IDIwMTYgKi8KICNkZWZpbmUgREFSNAkJNDggLyogQWNjZWxlUG9ydCBSQVMgNCBwb3J0ICovCkBAIC00OTIsOCArNDg5LDYgQEAKIAlSRVFVRVNURURfQ09OQ0VOVFJBVE9SCiB9OwogCi0KLQogLyoKICAqIE1vZGVtIGxpbmUgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBiZWNhdXNlIERTUiBhbmQKICAqIERDRCBhcmUgc3dhcGFibGUgdXNpbmcgdGhlIGRpdHR5IGFsdHBpbiBvcHRpb24uCkBAIC01MDUsMTQgKzUwMCwxMiBAQAogI2RlZmluZSBEX1JJKGNoKSAgICAgICAgRE1fUkkgICAgICAgICAgIC8qIFJpbmcgaW5kaWNhdG9yICAgICAgICovCiAjZGVmaW5lIERfRFRSKGNoKSAgICAgICBETV9EVFIgICAgICAgICAgLyogRGF0YSB0ZXJtaW5hbCByZWFkeSAgKi8KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFN0cnVjdHVyZXMgYW5kIGNsb3NlbHkgcmVsYXRlZCBkZWZpbmVzLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KIC8qCiAgKiBBIHN0cnVjdHVyZSB0byBob2xkIGEgc3RhdGlzdGljcyBjb3VudGVyLiAgV2UgYWxzbwogICogY29tcHV0ZSBtb3ZpbmcgYXZlcmFnZXMgZm9yIHRoaXMgY291bnRlci4KQEAgLTUyNCw3ICs1MTcsNiBAQAogCXVsb25nCQllbWE7CS8qIEV4cG9uZW50aWFsIG1vdmluZyBhdmVyYWdlICovCiB9OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERldmljZSBmbGFnIGRlZmluaXRpb25zIGZvciBiZF9mbGFncy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NDYsMTEgKzUzOCwxMSBAQAogCXUxNgkJZGV2aWNlOwkJLyogUENJIGRldmljZSBJRCAqLwogCXUxNgkJc3VidmVuZG9yOwkvKiBQQ0kgc3Vic3lzdGVtIHZlbmRvciBJRCAqLwogCXUxNgkJc3ViZGV2aWNlOwkvKiBQQ0kgc3Vic3lzdGVtIGRldmljZSBJRCAqLwotCXVjaGFyCQlyZXY7CQkvKiBQQ0kgcmV2aXNpb24gSUQgKi8KKwl1OAkJcmV2OwkJLyogUENJIHJldmlzaW9uIElEICovCiAJdWludAkJcGNpX2J1czsJLyogUENJIGJ1cyB2YWx1ZSAqLwogCXVpbnQJCXBjaV9zbG90OwkvKiBQQ0kgc2xvdCB2YWx1ZSAqLwogCXUxNgkJbWF4cG9ydHM7CS8qIE1BWCBwb3J0cyB0aGlzIGJvYXJkIGNhbiBoYW5kbGUgKi8KLQl1Y2hhcgkJdnBkW1ZQRFNJWkVdOwkvKiBWUEQgb2YgYm9hcmQsIGlmIGZvdW5kICovCisJdTgJCXZwZFtWUERTSVpFXTsJLyogVlBEIG9mIGJvYXJkLCBpZiBmb3VuZCAqLwogCXUzMgkJYmRfZmxhZ3M7CS8qIEJvYXJkIGZsYWdzICovCiAKIAlzcGlubG9ja190CWJkX2xvY2s7CS8qIFVzZWQgdG8gcHJvdGVjdCBib2FyZCAqLwpAQCAtNTcxLDQ4ICs1NjMsNTMgQEAKIAl1bG9uZwkJaXJxOwkJLyogSW50ZXJydXB0IHJlcXVlc3QgbnVtYmVyICovCiAJdWxvbmcJCWludHJfY291bnQ7CS8qIENvdW50IG9mIGludGVycnVwdHMgKi8KIAl1MzIJCWludHJfdXNlZDsJLyogTm9uLXplcm8gaWYgdXNpbmcgaW50ZXJydXB0cyAqLwotCXUzMgkJaW50cl9ydW5uaW5nOwkvKiBOb24temVybyBpZiBGRVAga25vd3MgaXRzIGRvaW5nIGludGVycnVwdHMgKi8KKwl1MzIJCWludHJfcnVubmluZzsJLyogTm9uLXplcm8gaWYgRkVQIGtub3dzIGl0cyBkb2luZyAqLworCQkJCQkvKiBpbnRlcnJ1cHRzICovCiAKIAl1bG9uZwkJcG9ydDsJCS8qIFN0YXJ0IG9mIGJhc2UgaW8gcG9ydCBvZiB0aGUgY2FyZCAqLwogCXVsb25nCQlwb3J0X2VuZDsJLyogRW5kIG9mIGJhc2UgaW8gcG9ydCBvZiB0aGUgY2FyZCAqLwogCXVsb25nCQltZW1iYXNlOwkvKiBTdGFydCBvZiBiYXNlIG1lbW9yeSBvZiB0aGUgY2FyZCAqLwogCXVsb25nCQltZW1iYXNlX2VuZDsJLyogRW5kIG9mIGJhc2UgbWVtb3J5IG9mIHRoZSBjYXJkICovCiAKLQl1Y2hhciAJCSpyZV9tYXBfcG9ydDsJLyogUmVtYXBwZWQgaW8gcG9ydCBvZiB0aGUgY2FyZCAqLwotCXVjaGFyCQkqcmVfbWFwX21lbWJhc2U7LyogUmVtYXBwZWQgbWVtb3J5IG9mIHRoZSBjYXJkICovCisJdTggX19pb21lbQkqcmVfbWFwX3BvcnQ7CS8qIFJlbWFwcGVkIGlvIHBvcnQgb2YgdGhlIGNhcmQgKi8KKwl1OCBfX2lvbWVtCSpyZV9tYXBfbWVtYmFzZTsvKiBSZW1hcHBlZCBtZW1vcnkgb2YgdGhlIGNhcmQgKi8KIAotCXVjaGFyCQlydW53YWl0OwkvKiAjIFByb2Nlc3NlcyB3YWl0aW5nIGZvciBGRVAgICovCi0JdWNoYXIJCWluaGliaXRfcG9sbGVyOyAvKiBUZWxscyAgdGhlIHBvbGxlciB0byBsZWF2ZSB1cyBhbG9uZSAqLworCXU4CQlydW53YWl0OwkvKiAjIFByb2Nlc3NlcyB3YWl0aW5nIGZvciBGRVAgICovCisJdTgJCWluaGliaXRfcG9sbGVyOyAvKiBUZWxscyB0aGUgcG9sbGVyIHRvIGxlYXZlIHVzIGFsb25lICovCiAKLQlzdHJ1Y3QgY2hhbm5lbF90ICpjaGFubmVsc1tNQVhQT1JUU107IC8qIGFycmF5IG9mIHBvaW50ZXJzIHRvIG91ciBjaGFubmVscy4gKi8KKwlzdHJ1Y3QgY2hhbm5lbF90ICpjaGFubmVsc1tNQVhQT1JUU107IC8qIGFycmF5IG9mIHBvaW50ZXJzIHRvIG91ciAqLworCQkJCQkgICAgICAvKiBjaGFubmVscy4gICAgICAgICAgICAgICAgKi8KIAotCXN0cnVjdCB0dHlfZHJpdmVyCSpTZXJpYWxEcml2ZXI7Ci0Jc3RydWN0IHR0eV9wb3J0ICpTZXJpYWxQb3J0czsKLQljaGFyCQlTZXJpYWxOYW1lWzIwMF07Ci0Jc3RydWN0IHR0eV9kcml2ZXIJKlByaW50RHJpdmVyOwotCXN0cnVjdCB0dHlfcG9ydCAqUHJpbnRlclBvcnRzOwotCWNoYXIJCVByaW50TmFtZVsyMDBdOworCXN0cnVjdCB0dHlfZHJpdmVyCSpzZXJpYWxfZHJpdmVyOworCXN0cnVjdCB0dHlfcG9ydCAqc2VyaWFsX3BvcnRzOworCWNoYXIJCXNlcmlhbF9uYW1lWzIwMF07CisJc3RydWN0IHR0eV9kcml2ZXIJKnByaW50X2RyaXZlcjsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnByaW50ZXJfcG9ydHM7CisJY2hhcgkJcHJpbnRfbmFtZVsyMDBdOwogCi0JdTMyCQlkZ2FwX01ham9yX1NlcmlhbF9SZWdpc3RlcmVkOwotCXUzMgkJZGdhcF9NYWpvcl9UcmFuc3BhcmVudFByaW50X1JlZ2lzdGVyZWQ7CisJdTMyCQlkZ2FwX21ham9yX3NlcmlhbF9yZWdpc3RlcmVkOworCXUzMgkJZGdhcF9tYWpvcl90cmFuc3BhcmVudF9wcmludF9yZWdpc3RlcmVkOwogCi0JdTMyCQlkZ2FwX1NlcmlhbF9NYWpvcjsKLQl1MzIJCWRnYXBfVHJhbnNwYXJlbnRQcmludF9NYWpvcjsKKwl1MzIJCWRnYXBfc2VyaWFsX21ham9yOworCXUzMgkJZGdhcF90cmFuc3BhcmVudF9wcmludF9tYWpvcjsKIAotCXN0cnVjdCBic190CSpiZF9iczsJCQkvKiBCYXNlIHN0cnVjdHVyZSBwb2ludGVyICAgICAgICovCisJc3RydWN0IGJzX3QgX19pb21lbSAqYmRfYnM7CS8qIEJhc2Ugc3RydWN0dXJlIHBvaW50ZXIgICAgICAgICAqLwogCi0JY2hhcgkqZmxpcGJ1ZjsJCS8qIE91ciBmbGlwIGJ1ZmZlciwgYWxsb2NlZCBpZiBib2FyZCBpcyBmb3VuZCAqLwotCWNoYXIJKmZsaXBmbGFnYnVmOwkJLyogT3VyIGZsaXAgZmxhZyBidWZmZXIsIGFsbG9jZWQgaWYgYm9hcmQgaXMgZm91bmQgKi8KKwljaGFyCSpmbGlwYnVmOwkJLyogT3VyIGZsaXAgYnVmZmVyLCBhbGxvY2VkIGlmICAgICovCisJCQkJCS8qIGJvYXJkIGlzIGZvdW5kICAgICAgICAgICAgICAgICAqLworCWNoYXIJKmZsaXBmbGFnYnVmOwkJLyogT3VyIGZsaXAgZmxhZyBidWZmZXIsIGFsbG9jZWQgICovCisJCQkJCS8qIGlmIGJvYXJkIGlzIGZvdW5kICAgICAgICAgICAgICAqLwogCi0JdTE2CQlkcGF0eXBlOwkvKiBUaGUgYm9hcmQgInR5cGUiLCBhcyBkZWZpbmVkIGJ5IERQQSAqLwotCXUxNgkJZHBhc3RhdHVzOwkvKiBUaGUgYm9hcmQgInN0YXR1cyIsIGFzIGRlZmluZWQgYnkgRFBBICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qga21lX3dhaXQ7CS8qIE5lZWRlZCBmb3IgRFBBIHN1cHBvcnQgKi8KKwl1MTYJCWRwYXR5cGU7CS8qIFRoZSBib2FyZCAidHlwZSIsIGFzIGRlZmluZWQgICAqLworCQkJCQkvKiBieSBEUEEgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MTYJCWRwYXN0YXR1czsJLyogVGhlIGJvYXJkICJzdGF0dXMiLCBhcyBkZWZpbmVkICovCisJCQkJCS8qIGJ5IERQQSAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXdhaXRfcXVldWVfaGVhZF90IGttZV93YWl0OwkvKiBOZWVkZWQgZm9yIERQQSBzdXBwb3J0ICAgICAgICAgKi8KIAotCXUzMgkJY29uY19kbF9zdGF0dXM7CS8qIFN0YXR1cyBvZiBhbnkgcGVuZGluZyBjb25jIGRvd25sb2FkICovCisJdTMyCQljb25jX2RsX3N0YXR1czsJLyogU3RhdHVzIG9mIGFueSBwZW5kaW5nIGNvbmMgICAgICovCisJCQkJCS8qIGRvd25sb2FkICAgICAgICAgICAgICAgICAgICAgICAqLwogfTsKIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFVuaXQgZmxhZyBkZWZpbml0aW9ucyBmb3IgdW5fZmxhZ3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjQwLDcgKzYzNyw3IEBACiAJc3RydWN0CWNoYW5uZWxfdCAqdW5fY2g7CiAJdTMyCXVuX3RpbWU7CiAJdTMyCXVuX3R5cGU7Ci0JdTMyCXVuX29wZW5fY291bnQ7CS8qIENvdW50ZXIgb2Ygb3BlbnMgdG8gcG9ydAkJKi8KKwlpbnQJdW5fb3Blbl9jb3VudDsJLyogQ291bnRlciBvZiBvcGVucyB0byBwb3J0CQkqLwogCXN0cnVjdCB0dHlfc3RydWN0ICp1bl90dHk7LyogUG9pbnRlciB0byB1bml0IHR0eSBzdHJ1Y3R1cmUJKi8KIAl1MzIJdW5fZmxhZ3M7CS8qIFVuaXQgZmxhZ3MJCQkJKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB1bl9mbGFnc193YWl0OyAvKiBQbGFjZSB0byBzbGVlcCB0byB3YWl0IG9uIHVuaXQgKi8KQEAgLTY1MCw3ICs2NDcsNiBAQAogCXN0cnVjdCBkZXZpY2UgKnVuX3N5c2ZzOwogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEZXZpY2UgZmxhZyBkZWZpbml0aW9ucyBmb3IgY2hfZmxhZ3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjc3LDcgKzY3Myw2IEBACiAjZGVmaW5lIFNOSUZGX1dBSVRfREFUQQkweDIKICNkZWZpbmUgU05JRkZfV0FJVF9TUEFDRSAweDQKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCURlZmluaXRpb25zIGZvciBEaWdpIGRpdHR5KDEpIGNvbW1hbmQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjg5LDggKzY4NCw4IEBACiAKICNpZiAhZGVmaW5lZChUSU9DTU9ERykKIAotI2RlZmluZQlUSU9DTU9ERwkoKCdkJzw8OCkgfCAyNTApCQkvKiBnZXQgbW9kZW0gY3RybCBzdGF0ZQkqLwotI2RlZmluZQlUSU9DTU9EUwkoKCdkJzw8OCkgfCAyNTEpCQkvKiBzZXQgbW9kZW0gY3RybCBzdGF0ZQkqLworI2RlZmluZQlUSU9DTU9ERwkoKCdkJzw8OCkgfCAyNTApCS8qIGdldCBtb2RlbSBjdHJsIHN0YXRlCSovCisjZGVmaW5lCVRJT0NNT0RTCSgoJ2QnPDw4KSB8IDI1MSkJLyogc2V0IG1vZGVtIGN0cmwgc3RhdGUJKi8KIAogI2lmbmRlZiBUSU9DTV9MRQogI2RlZmluZQkJVElPQ01fTEUJMHgwMQkJLyogbGluZSBlbmFibGUJCSovCkBAIC03MDksMTYgKzcwNCwxNSBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChUSU9DTVNFVCkKLSNkZWZpbmUJVElPQ01TRVQJKCgnZCc8PDgpIHwgMjUyKQkJLyogc2V0IG1vZGVtIGN0cmwgc3RhdGUJKi8KLSNkZWZpbmUJVElPQ01HRVQJKCgnZCc8PDgpIHwgMjUzKQkJLyogc2V0IG1vZGVtIGN0cmwgc3RhdGUJKi8KKyNkZWZpbmUJVElPQ01TRVQJKCgnZCc8PDgpIHwgMjUyKQkvKiBzZXQgbW9kZW0gY3RybCBzdGF0ZQkqLworI2RlZmluZQlUSU9DTUdFVAkoKCdkJzw8OCkgfCAyNTMpCS8qIHNldCBtb2RlbSBjdHJsIHN0YXRlCSovCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKFRJT0NNQklDKQotI2RlZmluZQlUSU9DTUJJQwkoKCdkJzw8OCkgfCAyNTQpCQkvKiBzZXQgbW9kZW0gY3RybCBzdGF0ZSAqLwotI2RlZmluZQlUSU9DTUJJUwkoKCdkJzw8OCkgfCAyNTUpCQkvKiBzZXQgbW9kZW0gY3RybCBzdGF0ZSAqLworI2RlZmluZQlUSU9DTUJJQwkoKCdkJzw8OCkgfCAyNTQpCS8qIHNldCBtb2RlbSBjdHJsIHN0YXRlICovCisjZGVmaW5lCVRJT0NNQklTCSgoJ2QnPDw4KSB8IDI1NSkJLyogc2V0IG1vZGVtIGN0cmwgc3RhdGUgKi8KICNlbmRpZgogCi0KICNpZiAhZGVmaW5lZChUSU9DU0RUUikKICNkZWZpbmUJVElPQ1NEVFIJKCgnZSc8PDgpIHwgMCkJCS8qIHNldCBEVFIJCSovCiAjZGVmaW5lCVRJT0NDRFRSCSgoJ2UnPDw4KSB8IDEpCQkvKiBjbGVhciBEVFIJCSovCkBAIC03MzcsMjYgKzczMSwyNSBAQAogCQkJCQkJLyogQWRhcHRlciBNZW1vcnkJKi8KIAogI2RlZmluZQlESUdJX0dFVEZMT1cJKCgnZSc8PDgpIHwgOTkpCQkvKiBHZXQgc3RhcnRjL3N0b3BjIGZsb3cgKi8KLQkJCQkJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAJICovCi0jZGVmaW5lCURJR0lfU0VURkxPVwkoKCdlJzw8OCkgfCAxMDApCQkvKiBTZXQgc3RhcnRjL3N0b3BjIGZsb3cgKi8KKwkJCQkJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAgICAqLworI2RlZmluZQlESUdJX1NFVEZMT1cJKCgnZSc8PDgpIHwgMTAwKQkvKiBTZXQgc3RhcnRjL3N0b3BjIGZsb3cgKi8KIAkJCQkJCS8qIGNvbnRyb2wgY2hhcmFjdGVycwkgKi8KLSNkZWZpbmUJRElHSV9HRVRBRkxPVwkoKCdlJzw8OCkgfCAxMDEpCQkvKiBHZXQgQXV4LiBzdGFydGMvc3RvcGMgKi8KLQkJCQkJCS8qIGZsb3cgY29udHJvbCBjaGFycyAJICovCi0jZGVmaW5lCURJR0lfU0VUQUZMT1cJKCgnZSc8PDgpIHwgMTAyKQkJLyogU2V0IEF1eC4gc3RhcnRjL3N0b3BjICovCisjZGVmaW5lCURJR0lfR0VUQUZMT1cJKCgnZSc8PDgpIHwgMTAxKQkvKiBHZXQgQXV4LiBzdGFydGMvc3RvcGMgKi8KKwkJCQkJCS8qIGZsb3cgY29udHJvbCBjaGFycyAgICAqLworI2RlZmluZQlESUdJX1NFVEFGTE9XCSgoJ2UnPDw4KSB8IDEwMikJLyogU2V0IEF1eC4gc3RhcnRjL3N0b3BjICovCiAJCQkJCQkvKiBmbG93IGNvbnRyb2wgY2hhcnMJICovCiAKLSNkZWZpbmUgRElHSV9HRURFTEFZCSgoJ2QnPDw4KSB8IDI0NikJCS8qIEdldCBlZGVsYXkgKi8KLSNkZWZpbmUgRElHSV9TRURFTEFZCSgoJ2QnPDw4KSB8IDI0NykJCS8qIFNldCBlZGVsYXkgKi8KKyNkZWZpbmUgRElHSV9HRURFTEFZCSgoJ2QnPDw4KSB8IDI0NikJLyogR2V0IGVkZWxheSAqLworI2RlZmluZSBESUdJX1NFREVMQVkJKCgnZCc8PDgpIHwgMjQ3KQkvKiBTZXQgZWRlbGF5ICovCiAKIHN0cnVjdAlkaWdpZmxvd190IHsKLQl1bnNpZ25lZCBjaGFyCXN0YXJ0YzsJCQkJLyogZmxvdyBjbnRsIHN0YXJ0IGNoYXIJKi8KLQl1bnNpZ25lZCBjaGFyCXN0b3BjOwkJCQkvKiBmbG93IGNudGwgc3RvcCBjaGFyCSovCisJdW5zaWduZWQgY2hhcglzdGFydGM7CQkJLyogZmxvdyBjbnRsIHN0YXJ0IGNoYXIJKi8KKwl1bnNpZ25lZCBjaGFyCXN0b3BjOwkJCS8qIGZsb3cgY250bCBzdG9wIGNoYXIJKi8KIH07CiAKLQogI2lmZGVmCUZMT1dfMjIwMAotI2RlZmluZQlGMjIwMF9HRVRBCSgoJ2UnPDw4KSB8IDEwNCkJCS8qIEdldCAyeDM2IGZsb3cgY250bCBmbGFncyAqLwotI2RlZmluZQlGMjIwMF9TRVRBVwkoKCdlJzw8OCkgfCAxMDUpCQkvKiBTZXQgMngzNiBmbG93IGNudGwgZmxhZ3MgKi8KKyNkZWZpbmUJRjIyMDBfR0VUQQkoKCdlJzw8OCkgfCAxMDQpCS8qIEdldCAyeDM2IGZsb3cgY250bCBmbGFncyAqLworI2RlZmluZQlGMjIwMF9TRVRBVwkoKCdlJzw8OCkgfCAxMDUpCS8qIFNldCAyeDM2IGZsb3cgY250bCBmbGFncyAqLwogI2RlZmluZQkJRjIyMDBfTUFTSwkweDAzCQkvKiAyMjAwIGZsb3cgY250bCBiaXQgbWFzayAgKi8KICNkZWZpbmUJCUZDTlRMXzIyMDAJMHgwMQkJLyogMngzNiB0ZXJtaW5hbCBmbG93IGNudGwgICovCiAjZGVmaW5lCQlQQ05UTF8yMjAwCTB4MDIJCS8qIDJ4MzYgcHJpbnRlciBmbG93IGNudGwgICAqLwpAQCAtODMwLDU5ICs4MjMsNiBAQAogCXVuc2lnbmVkIGNoYXIJcndfZGF0YVsxMjhdOwkvKiBEYXRhIHRvIHJlYWQvd3JpdGUJCSovCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNocmluayBCdWZmZXIgYW5kIEJvYXJkIEluZm9ybWF0aW9uIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzLgotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJLyogQm9hcmQgdHlwZSByZXR1cm4gY29kZXMgKi8KLSNkZWZpbmUJUENYSV9UWVBFIDEgICAgIC8qIEJvYXJkIHR5cGUgYXQgdGhlIGRlc2lnbmF0ZWQgcG9ydCBpcyBhIFBDL1hpICovCi0jZGVmaW5lIFBDWE1fVFlQRSAyICAgICAvKiBCb2FyZCB0eXBlIGF0IHRoZSBkZXNpZ25hdGVkIHBvcnQgaXMgYSBQQy9YbSAqLwotI2RlZmluZQlQQ1hFX1RZUEUgMyAgICAgLyogQm9hcmQgdHlwZSBhdCB0aGUgZGVzaWduYXRlZCBwb3J0IGlzIGEgUEMvWGUgKi8KLSNkZWZpbmUJTUNYSV9UWVBFIDQgICAgIC8qIEJvYXJkIHR5cGUgYXQgdGhlIGRlc2lnbmF0ZWQgcG9ydCBpcyBhIE1DL1hpICovCi0jZGVmaW5lIENPTVhJX1RZUEUgNSAgICAgLyogQm9hcmQgdHlwZSBhdCB0aGUgZGVzaWduYXRlZCBwb3J0IGlzIGEgQ09NL1hpICovCi0KLQkJCSAvKiBOb24tWmVybyBSZXN1bHQgY29kZXMuICovCi0jZGVmaW5lIFJFU1VMVF9OT0JERk5EIDEgLyogQSBEaWdpIHByb2R1Y3QgYXQgdGhhdCBwb3J0IGlzIG5vdCBjb25maWcgaW5zdGFsbGVkICovCi0jZGVmaW5lIFJFU1VMVF9OT0RFU0NUIDIgLyogQSBtZW1vcnkgZGVzY3JpcHRvciB3YXMgbm90IG9idGFpbmFibGUgKi8KLSNkZWZpbmUgUkVTVUxUX05PT1NTSUcgMyAvKiBGRVAvT1Mgc2lnbmF0dXJlIHdhcyBub3QgZGV0ZWN0ZWQgb24gdGhlIGJvYXJkICovCi0jZGVmaW5lIFJFU1VMVF9UT09TTUwgIDQgLyogVG9vIHNtYWxsIGFuIGFyZWEgdG8gc2hyaW5rLiAgKi8KLSNkZWZpbmUgUkVTVUxUX05PQ0hBTiAgNSAvKiBDaGFubmVsIHN0cnVjdHVyZSBmb3IgdGhlIGJvYXJkIHdhcyBub3QgZm91bmQgKi8KLQotc3RydWN0IHNocmlua19idWZfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfdmFkZHI7CS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBib2FyZCAqLwotCXVuc2lnbmVkIGxvbmcJc2hyaW5rX2J1Zl9waHlzOwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGJvYXJkICovCi0JdW5zaWduZWQgbG9uZwlzaHJpbmtfYnVmX2JzZWc7CS8qIEFtb3VudCBvZiBib2FyZCBtZW1vcnkgKi8KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfaHNlZzsJLyogJzE4NiBCZWdpbm5pbmcgb2YgRHVhbC1Qb3J0ICovCi0KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfbHNlZzsJLyogJzE4NiBCZWdpbm5pbmcgb2YgZnJlZWQgbWVtb3J5CQkJCQkJKi8KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfbXNlZzsJLyogTGluZWFyIGFkZHJlc3MgZnJvbSBzdGFydCBvZgotCQkJCQkJICAgZHVhbC1wb3J0IHdlcmUgZnJlZWQgbWVtb3J5Ci0JCQkJCQkgICBiZWdpbnMsIGhvc3Qgdmlld3BvaW50LiAqLwotCi0JdW5zaWduZWQgbG9uZwlzaHJpbmtfYnVmX2JkcGFyYW07CS8qIFBhcmFtZXRlciBmb3IgeHhtZW1vbiBhbmQKLQkJCQkJCSAgIHh4bWVtb2ZmICovCi0KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfcmVzZXJ2YTsJLyogUmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfcmVzZXJ2YjsJLyogUmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfcmVzZXJ2YzsJLyogUmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBsb25nCXNocmlua19idWZfcmVzZXJ2ZDsJLyogUmVzZXJ2ZWQgKi8KLQotCXVuc2lnbmVkIGNoYXIJc2hyaW5rX2J1Zl9yZXN1bHQ7CS8qIFJlYXNvbiBmb3IgY2FsbCBmYWlsaW5nCi0JCQkJCQkgICBaZXJvIGlzIEdvb2QgcmV0dXJuICovCi0JdW5zaWduZWQgY2hhcglzaHJpbmtfYnVmX2luaXQ7CS8qIE5vbi1aZXJvIGlmIGl0IGNhdXNlZCBhbgotCQkJCQkJICAgeHhpbml0IGNhbGwuICovCi0KLQl1bnNpZ25lZCBjaGFyCXNocmlua19idWZfYW5wb3J0czsJLyogTnVtYmVyIG9mIGFzeW5jIHBvcnRzICAqLwotCXVuc2lnbmVkIGNoYXIJc2hyaW5rX2J1Zl9zbnBvcnRzOyAJLyogTnVtYmVyIG9mIHN5bmMgIHBvcnRzICovCi0JdW5zaWduZWQgY2hhcglzaHJpbmtfYnVmX3R5cGU7CS8qIEJvYXJkIHR5cGUgMSA9IFBDL1hpLAotCQkJCQkJCSAgICAgIDIgPSBQQy9YbSwKLQkJCQkJCQkgICAgICAzID0gUEMvWGUKLQkJCQkJCQkgICAgICA0ID0gTUMvWGkKLQkJCQkJCQkgICAgICA1ID0gQ09NWC9pICovCi0JdW5zaWduZWQgY2hhcglzaHJpbmtfYnVmX2NhcmQ7CS8qIENhcmQgbnVtYmVyICovCi0KLX07Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFN0cnVjdHVyZSB0byBnZXQgZHJpdmVyIHN0YXR1cyBpbmZvcm1hdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTg5Miw3ICs4MzIsNyBAQAogCWNoYXIJCWRpbmZvX3ZlcnNpb25bMTZdOwkvKiBkcml2ZXIgdmVyc2lvbiAgICAgICAqLwogfTsKIAotI2RlZmluZQlESUdJX0dFVERECSgoJ2QnPDw4KSB8IDI0OCkJCS8qIGdldCBkcml2ZXIgaW5mbyAgICAgICovCisjZGVmaW5lCURJR0lfR0VUREQJKCgnZCc8PDgpIHwgMjQ4KQkvKiBnZXQgZHJpdmVyIGluZm8gICAgICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTdHJ1Y3R1cmUgdXNlZCB3aXRoIGlvY3RsIGNvbW1hbmRzIGZvciBwZXItYm9hcmQgaW5mb3JtYXRpb24KQEAgLTkxMiw3ICs4NTIsNyBAQAogCWNoYXIJCWluZm9fcmVzZXJ2ZWRbN107CS8qIGZvciBmdXR1cmUgZXhwYW5zaW9uICAgICovCiB9OwogCi0jZGVmaW5lCURJR0lfR0VUQkQJKCgnZCc8PDgpIHwgMjQ5KQkJLyogZ2V0IGJvYXJkIGluZm8gICAgICAgICAgKi8KKyNkZWZpbmUJRElHSV9HRVRCRAkoKCdkJzw8OCkgfCAyNDkpCS8qIGdldCBib2FyZCBpbmZvICAgICAgICAgICovCiAKIHN0cnVjdCBkaWdpX3N0YXQgewogCXVuc2lnbmVkIGludAlpbmZvX2NoYW47CQkvKiBDaGFubmVsIG51bWJlciAoMCBiYXNlZCkgICovCkBAIC05MjcsNyArODY3LDcgQEAKIAl1bnNpZ25lZCBsb25nCWluZm9fcmVzZXJ2ZWRbOF07CS8qIGZvciBmdXR1cmUgZXhwYW5zaW9uICAgICovCiB9OwogCi0jZGVmaW5lCURJR0lfR0VUU1RBVAkoKCdkJzw8OCkgfCAyNDQpCQkvKiBnZXQgYm9hcmQgaW5mbyAgICAgICAgICAqLworI2RlZmluZQlESUdJX0dFVFNUQVQJKCgnZCc8PDgpIHwgMjQ0KQkvKiBnZXQgYm9hcmQgaW5mbyAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFN0cnVjdHVyZSB1c2VkIHdpdGggaW9jdGwgY29tbWFuZHMgZm9yIHBlci1jaGFubmVsIGluZm9ybWF0aW9uCkBAIC05MzYsOSArODc2LDkgQEAKIHN0cnVjdCBkaWdpX2NoIHsKIAl1bnNpZ25lZCBsb25nCWluZm9fYmRudW07CQkvKiBCb2FyZCBudW1iZXIgKDAgYmFzZWQpICAqLwogCXVuc2lnbmVkIGxvbmcJaW5mb19jaGFubmVsOwkJLyogQ2hhbm5lbCBpbmRleCBudW1iZXIgICAgKi8KLQl1bnNpZ25lZCBsb25nCWluZm9fY2hfY2ZsYWc7CQkvKiBDaGFubmVsIGNmbGFnICAgCSAgICovCi0JdW5zaWduZWQgbG9uZwlpbmZvX2NoX2lmbGFnOwkJLyogQ2hhbm5lbCBpZmxhZyAgIAkgICAqLwotCXVuc2lnbmVkIGxvbmcJaW5mb19jaF9vZmxhZzsJCS8qIENoYW5uZWwgb2ZsYWcgICAJICAgKi8KKwl1bnNpZ25lZCBsb25nCWluZm9fY2hfY2ZsYWc7CQkvKiBDaGFubmVsIGNmbGFnICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcJaW5mb19jaF9pZmxhZzsJCS8qIENoYW5uZWwgaWZsYWcgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZwlpbmZvX2NoX29mbGFnOwkJLyogQ2hhbm5lbCBvZmxhZyAgICAgICAgICAgKi8KIAl1bnNpZ25lZCBsb25nCWluZm9fY2hzaXplOwkJLyogQ2hhbm5lbCBzdHJ1Y3R1cmUgc2l6ZSAgKi8KIAl1bnNpZ25lZCBsb25nCWluZm9fc2xlZXBfc3RhdDsJLyogc2xlZXAgc3RhdHVzCQkgICAqLwogCWRldl90CQlpbmZvX2RldjsJCS8qIGRldmljZSBudW1iZXIJICAgKi8KQEAgLTk3MCw3ICs5MTAsNyBAQAogI2RlZmluZSBJTkZPX0NIX1dMT1cJMHgwMDIwCiAjZGVmaW5lIElORk9fWFhCVUZfQlVTWSAweDAwNDAKIAotI2RlZmluZQlESUdJX0dFVENICSgoJ2QnPDw4KSB8IDI0NSkJCS8qIGdldCBib2FyZCBpbmZvICAgICAgICAgICovCisjZGVmaW5lCURJR0lfR0VUQ0gJKCgnZCc8PDgpIHwgMjQ1KQkvKiBnZXQgYm9hcmQgaW5mbyAgICAgICAgICAqLwogCiAvKiBCb2FyZCB0eXBlIGRlZmluaXRpb25zICovCiAKQEAgLTEwMTUsMjQgKzk1NSwyNSBAQAogI2RlZmluZSBCRF9UUklCT09UCTB4OAogI2RlZmluZQlCRF9CQURLTUUJMHg4MAogCi0jZGVmaW5lIERJR0lfTE9PUEJBQ0sJICAgICAgKCgnZCc8PDgpIHwgMjUyKQkJLyogRW5hYmxlL2Rpc2FibGUgVUFSVCBpbnRlcm5hbCBsb29wYmFjayAqLwotI2RlZmluZSBESUdJX1NQT0xMICAgICAgICAgICAgKCgnZCc8PDgpIHwgMjU0KQkJLyogY2hhbmdlIHBvbGxlciByYXRlICAgKi8KKyNkZWZpbmUgRElHSV9MT09QQkFDSwkoKCdkJzw8OCkgfCAyNTIpCS8qIEVuYWJsZS9kaXNhYmxlIFVBUlQgICovCisJCQkJCQkvKiBpbnRlcm5hbCBsb29wYmFjayAgICAqLworI2RlZmluZSBESUdJX1NQT0xMCSgoJ2QnPDw4KSB8IDI1NCkJLyogY2hhbmdlIHBvbGxlciByYXRlICAgKi8KIAotI2RlZmluZSBESUdJX1NFVENVU1RPTUJBVUQJX0lPVygnZScsIDEwNiwgaW50KQkvKiBTZXQgaW50ZWdlciBiYXVkIHJhdGUgKi8KLSNkZWZpbmUgRElHSV9HRVRDVVNUT01CQVVECV9JT1IoJ2UnLCAxMDcsIGludCkJLyogR2V0IGludGVnZXIgYmF1ZCByYXRlICovCi0jZGVmaW5lIERJR0lfUkVTRVRfUE9SVAkJKCgnZSc8PDgpIHwgOTMpCQkvKiBSZXNldCBwb3J0CQkqLworI2RlZmluZSBESUdJX1NFVENVU1RPTUJBVUQgX0lPVygnZScsIDEwNiwgaW50KQkvKiBTZXQgaW50ZWdlciBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgRElHSV9HRVRDVVNUT01CQVVEIF9JT1IoJ2UnLCAxMDcsIGludCkJLyogR2V0IGludGVnZXIgYmF1ZCByYXRlICovCisjZGVmaW5lIERJR0lfUkVTRVRfUE9SVAkgICAoKCdlJzw8OCkgfCA5MykJLyogUmVzZXQgcG9ydAkJICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENoYW5uZWwgaW5mb3JtYXRpb24gc3RydWN0dXJlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBjaGFubmVsX3QgewogCWludCBtYWdpYzsJCQkvKiBDaGFubmVsIE1hZ2ljIE51bWJlcgkJKi8KLQlzdHJ1Y3QgYnNfdAkqY2hfYnM7CQkvKiBCYXNlIHN0cnVjdHVyZSBwb2ludGVyICAgICAgICovCi0Jc3RydWN0IGNtX3QJKmNoX2NtOwkJLyogQ29tbWFuZCBxdWV1ZSBwb2ludGVyICAgICAgICAqLworCXN0cnVjdCBic190IF9faW9tZW0gKmNoX2JzOwkvKiBCYXNlIHN0cnVjdHVyZSBwb2ludGVyICAgICAgICovCisJc3RydWN0IGNtX3QgX19pb21lbSAqY2hfY207CS8qIENvbW1hbmQgcXVldWUgcG9pbnRlciAgICAgICAgKi8KIAlzdHJ1Y3QgYm9hcmRfdCAqY2hfYmQ7CQkvKiBCb2FyZCBzdHJ1Y3R1cmUgcG9pbnRlciAgICAgICovCi0JdW5zaWduZWQgY2hhciAqY2hfdmFkZHI7CS8qIEZFUCBtZW1vcnkgb3JpZ2luICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyICpjaF90YWRkcjsJLyogV3JpdGUgYnVmZmVyIG9yaWdpbiAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgKmNoX3JhZGRyOwkvKiBSZWFkIGJ1ZmZlciBvcmlnaW4gICAgICAgICAgICovCisJdTggX19pb21lbSAqY2hfdmFkZHI7CQkvKiBGRVAgbWVtb3J5IG9yaWdpbiAgICAgICAgICAgICovCisJdTggX19pb21lbSAqY2hfdGFkZHI7CQkvKiBXcml0ZSBidWZmZXIgb3JpZ2luICAgICAgICAgICovCisJdTggX19pb21lbSAqY2hfcmFkZHI7CQkvKiBSZWFkIGJ1ZmZlciBvcmlnaW4gICAgICAgICAgICovCiAJc3RydWN0IGRpZ2lfdCAgY2hfZGlnaTsJCS8qIFRyYW5zcGFyZW50IFByaW50IHN0cnVjdHVyZSAgKi8KIAlzdHJ1Y3QgdW5fdCBjaF90dW47CQkvKiBUZXJtaW5hbCB1bml0IGluZm8gICAgICAgICAgICovCiAJc3RydWN0IHVuX3QgY2hfcHVuOwkJLyogUHJpbnRlciB1bml0IGluZm8gICAgICAgICAgICAqLwpAQCAtMTA0MSwxNCArOTgyLDE0IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QgY2hfZmxhZ3Nfd2FpdDsKIAogCXUzMglwc2Nhbl9zdGF0ZTsKLQl1Y2hhcglwc2Nhbl9zYXZlY2hhcjsKKwl1OAlwc2Nhbl9zYXZlY2hhcjsKIAogCXUzMiBjaF9wb3J0bnVtOwkJCS8qIFBvcnQgbnVtYmVyLCAwIG9mZnNldC4JKi8KIAl1MzIgY2hfb3Blbl9jb3VudDsJCS8qIG9wZW4gY291bnQJCQkqLwogCXUzMgljaF9mbGFnczsJCS8qIENoYW5uZWwgZmxhZ3MgICAgICAgICAgICAgICAgKi8KIAotCi0JdTMyCWNoX2Nsb3NlX2RlbGF5OwkJLyogSG93IGxvbmcgd2Ugc2hvdWxkIGRyb3AgUlRTL0RUUiBmb3IgKi8KKwl1MzIJY2hfY2xvc2VfZGVsYXk7CQkvKiBIb3cgbG9uZyB3ZSBzaG91bGQgZHJvcCAgICAgICovCisJCQkJCS8qIFJUUy9EVFIgZm9yICAgICAgICAgICAgICAgICAgKi8KIAogCXUzMgljaF9jcHN0aW1lOwkJLyogVGltZSBmb3IgQ1BTIGNhbGN1bGF0aW9ucyAgICAqLwogCkBAIC0xMDU3LDcgKzk5OCw3IEBACiAJdGNmbGFnX3QgY2hfY19vZmxhZzsJCS8qIGNoYW5uZWwgb2ZsYWdzICAgICAgICAgICAgICAgKi8KIAl0Y2ZsYWdfdCBjaF9jX2xmbGFnOwkJLyogY2hhbm5lbCBsZmxhZ3MgICAgICAgICAgICAgICAqLwogCi0JdTE2ICBjaF9mZXBpZmxhZzsgICAgICAgICAgICAvKiBGRVAgdHR5IGlmbGFncyAgICAgICAgICAgICAgICovCisJdTE2ICBjaF9mZXBpZmxhZzsJCS8qIEZFUCB0dHkgaWZsYWdzICAgICAgICAgICAgICAgKi8KIAl1MTYgIGNoX2ZlcGNmbGFnOwkJLyogRkVQIHR0eSBjZmxhZ3MgICAgICAgICAgICAgICAqLwogCXUxNiAgY2hfZmVwb2ZsYWc7CQkvKiBGRVAgdHR5IG9mbGFncyAgICAgICAgICAgICAgICovCiAJdTE2ICBjaF93b3BlbjsJCQkvKiBXYWl0aW5nIGZvciBvcGVuIHByb2Nlc3MgY250ICovCkBAIC0xMDcxLDc1ICsxMDEyLDY5IEBACiAKIAl1MTYgIGNoX2Nvb2s7CQkJLyogT3V0cHV0IGNoYXJhY3RlciBtYXNrICAgICAgICAqLwogCi0JdWNoYXIgICBjaF9jYXJkOwkJLyogQ2FyZCBjaGFubmVsIGlzIG9uICAgICAgICAgICAqLwotCXVjaGFyICAgY2hfc3RvcGM7CQkvKiBTdG9wIGNoYXJhY3RlciAgICAgICAgICAgICAgICovCi0JdWNoYXIgICBjaF9zdGFydGM7CQkvKiBTdGFydCBjaGFyYWN0ZXIgICAgICAgICAgICAgICovCisJdTggICBjaF9jYXJkOwkJCS8qIENhcmQgY2hhbm5lbCBpcyBvbiAgICAgICAgICAgKi8KKwl1OCAgIGNoX3N0b3BjOwkJCS8qIFN0b3AgY2hhcmFjdGVyICAgICAgICAgICAgICAgKi8KKwl1OCAgIGNoX3N0YXJ0YzsJCQkvKiBTdGFydCBjaGFyYWN0ZXIgICAgICAgICAgICAgICovCiAKLQl1Y2hhciAgIGNoX21vc3RhdDsJCS8qIEZFUCBvdXRwdXQgbW9kZW0gc3RhdHVzICAgICAgKi8KLQl1Y2hhciAgIGNoX21pc3RhdDsJCS8qIEZFUCBpbnB1dCBtb2RlbSBzdGF0dXMgICAgICAgKi8KLQl1Y2hhciAgIGNoX21mb3JjZTsJCS8qIE1vZGVtIHZhbHVlcyB0byBiZSBmb3JjZWQgICAgKi8KLQl1Y2hhciAgIGNoX212YWw7CQkvKiBGb3JjZSB2YWx1ZXMgICAgICAgICAgICAgICAgICovCi0JdWNoYXIgICBjaF9mZXBzdG9wYzsJCS8qIEZFUCBzdG9wIGNoYXJhY3RlciAgICAgICAgICAgKi8KLQl1Y2hhciAgIGNoX2ZlcHN0YXJ0YzsJCS8qIEZFUCBzdGFydCBjaGFyYWN0ZXIgICAgICAgICAgKi8KKwl1OCAgIGNoX21vc3RhdDsJCQkvKiBGRVAgb3V0cHV0IG1vZGVtIHN0YXR1cyAgICAgICovCisJdTggICBjaF9taXN0YXQ7CQkJLyogRkVQIGlucHV0IG1vZGVtIHN0YXR1cyAgICAgICAqLworCXU4ICAgY2hfbWZvcmNlOwkJCS8qIE1vZGVtIHZhbHVlcyB0byBiZSBmb3JjZWQgICAgKi8KKwl1OCAgIGNoX212YWw7CQkJLyogRm9yY2UgdmFsdWVzICAgICAgICAgICAgICAgICAqLworCXU4ICAgY2hfZmVwc3RvcGM7CQkvKiBGRVAgc3RvcCBjaGFyYWN0ZXIgICAgICAgICAgICovCisJdTggICBjaF9mZXBzdGFydGM7CQkvKiBGRVAgc3RhcnQgY2hhcmFjdGVyICAgICAgICAgICovCiAKLQl1Y2hhciAgIGNoX2FzdG9wYzsJCS8qIEF1eGlsaWFyeSBTdG9wIGNoYXJhY3RlciAgICAgKi8KLQl1Y2hhciAgIGNoX2FzdGFydGM7CQkvKiBBdXhpbGlhcnkgU3RhcnQgY2hhcmFjdGVyICAgICovCi0JdWNoYXIgICBjaF9mZXBhc3RvcGM7CQkvKiBBdXhpbGlhcnkgRkVQIHN0b3AgY2hhciAgICAgICovCi0JdWNoYXIgICBjaF9mZXBhc3RhcnRjOwkJLyogQXV4aWxpYXJ5IEZFUCBzdGFydCBjaGFyICAgICAqLworCXU4ICAgY2hfYXN0b3BjOwkJCS8qIEF1eGlsaWFyeSBTdG9wIGNoYXJhY3RlciAgICAgKi8KKwl1OCAgIGNoX2FzdGFydGM7CQkvKiBBdXhpbGlhcnkgU3RhcnQgY2hhcmFjdGVyICAgICovCisJdTggICBjaF9mZXBhc3RvcGM7CQkvKiBBdXhpbGlhcnkgRkVQIHN0b3AgY2hhciAgICAgICovCisJdTggICBjaF9mZXBhc3RhcnRjOwkJLyogQXV4aWxpYXJ5IEZFUCBzdGFydCBjaGFyICAgICAqLwogCi0JdWNoYXIgICBjaF9oZmxvdzsJCS8qIEZFUCBoYXJkd2FyZSBoYW5kc2hha2UgICAgICAgKi8KLQl1Y2hhciAgIGNoX2RzcjsJCQkvKiBzdG9yZXMgcmVhbCBkc3IgdmFsdWUgICAgICAgICovCi0JdWNoYXIgICBjaF9jZDsJCQkvKiBzdG9yZXMgcmVhbCBjZCB2YWx1ZSAgICAgICAgICovCi0JdWNoYXIgICBjaF90eF93aW47CQkvKiBjaGFubmVsIHR4IGJ1ZmZlciB3aW5kb3cgICAgICovCi0JdWNoYXIgICBjaF9yeF93aW47CQkvKiBjaGFubmVsIHJ4IGJ1ZmZlciB3aW5kb3cgICAgICovCisJdTggICBjaF9oZmxvdzsJCQkvKiBGRVAgaGFyZHdhcmUgaGFuZHNoYWtlICAgICAgICovCisJdTggICBjaF9kc3I7CQkJLyogc3RvcmVzIHJlYWwgZHNyIHZhbHVlICAgICAgICAqLworCXU4ICAgY2hfY2Q7CQkJLyogc3RvcmVzIHJlYWwgY2QgdmFsdWUgICAgICAgICAqLworCXU4ICAgY2hfdHhfd2luOwkJCS8qIGNoYW5uZWwgdHggYnVmZmVyIHdpbmRvdyAgICAgKi8KKwl1OCAgIGNoX3J4X3dpbjsJCQkvKiBjaGFubmVsIHJ4IGJ1ZmZlciB3aW5kb3cgICAgICovCiAJdWludAljaF9jdXN0b21fc3BlZWQ7CS8qIEN1c3RvbSBiYXVkLCBpZiBzZXQJCSovCi0JdWludAljaF9iYXVkX2luZm87CQkvKiBDdXJyZW50IGJhdWQgaW5mbyBmb3IgL3Byb2Mgb3V0cHV0CSovCi0JdWxvbmcJY2hfcnhjb3VudDsJCS8qIHRvdGFsIG9mIGRhdGEgcmVjZWl2ZWQgc28gZmFyCSovCi0JdWxvbmcJY2hfdHhjb3VudDsJCS8qIHRvdGFsIG9mIGRhdGEgdHJhbnNtaXR0ZWQgc28gZmFyCSovCi0JdWxvbmcJY2hfZXJyX3Bhcml0eTsJCS8qIENvdW50IG9mIHBhcml0eSBlcnJvcnMgb24gY2hhbm5lbAkqLwotCXVsb25nCWNoX2Vycl9mcmFtZTsJCS8qIENvdW50IG9mIGZyYW1pbmcgZXJyb3JzIG9uIGNoYW5uZWwJKi8KKwl1aW50CWNoX2JhdWRfaW5mbzsJCS8qIEN1cnJlbnQgYmF1ZCBpbmZvIGZvciAvcHJvYyBvdXRwdXQgKi8KKwl1bG9uZwljaF9yeGNvdW50OwkJLyogdG90YWwgb2YgZGF0YSByZWNlaXZlZCBzbyBmYXIgICAgICAqLworCXVsb25nCWNoX3R4Y291bnQ7CQkvKiB0b3RhbCBvZiBkYXRhIHRyYW5zbWl0dGVkIHNvIGZhciAgICovCisJdWxvbmcJY2hfZXJyX3Bhcml0eTsJCS8qIENvdW50IG9mIHBhcml0eSBlcnJvcnMgb24gY2hhbm5lbCAgKi8KKwl1bG9uZwljaF9lcnJfZnJhbWU7CQkvKiBDb3VudCBvZiBmcmFtaW5nIGVycm9ycyBvbiBjaGFubmVsICovCiAJdWxvbmcJY2hfZXJyX2JyZWFrOwkJLyogQ291bnQgb2YgYnJlYWtzIG9uIGNoYW5uZWwJKi8KIAl1bG9uZwljaF9lcnJfb3ZlcnJ1bjsJCS8qIENvdW50IG9mIG92ZXJydW5zIG9uIGNoYW5uZWwJKi8KLQotCXVpbnQgY2hfc25pZmZfaW47Ci0JdWludCBjaF9zbmlmZl9vdXQ7Ci0JY2hhciAqY2hfc25pZmZfYnVmOwkJLyogU25pZmYgYnVmZmVyIGZvciBwcm9jICovCi0JdWxvbmcgY2hfc25pZmZfZmxhZ3M7CQkvKiBDaGFubmVsIGZsYWdzICAgICAgICAgICAgICAgICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgY2hfc25pZmZfd2FpdDsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENvbW1hbmQgc3RydWN0dXJlIGRlZmluaXRpb24uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGNtX3QgewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGNtX2hlYWQ7CS8qIENvbW1hbmQgYnVmZmVyIGhlYWQgb2Zmc2V0CSovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgY21fdGFpbDsJLyogQ29tbWFuZCBidWZmZXIgdGFpbCBvZmZzZXQJKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBjbV9zdGFydDsJLyogc3RhcnQgb2Zmc2V0IG9mIGJ1ZmZlcgkqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGNtX21heDsJCS8qIGxhc3Qgb2Zmc2V0IG9mIGJ1ZmZlcgkqLworCXVuc2lnbmVkIHNob3J0IGNtX2hlYWQ7CQkvKiBDb21tYW5kIGJ1ZmZlciBoZWFkIG9mZnNldCAqLworCXVuc2lnbmVkIHNob3J0IGNtX3RhaWw7CQkvKiBDb21tYW5kIGJ1ZmZlciB0YWlsIG9mZnNldCAqLworCXVuc2lnbmVkIHNob3J0IGNtX3N0YXJ0OwkvKiBzdGFydCBvZmZzZXQgb2YgYnVmZmVyICAgICAqLworCXVuc2lnbmVkIHNob3J0IGNtX21heDsJCS8qIGxhc3Qgb2Zmc2V0IG9mIGJ1ZmZlciAgICAgICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFdmVudCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgZXZfdCB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZXZfaGVhZDsJLyogQ29tbWFuZCBidWZmZXIgaGVhZCBvZmZzZXQJKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBldl90YWlsOwkvKiBDb21tYW5kIGJ1ZmZlciB0YWlsIG9mZnNldAkqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGV2X3N0YXJ0OwkvKiBzdGFydCBvZmZzZXQgb2YgYnVmZmVyCSovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgZXZfbWF4OwkJLyogbGFzdCBvZmZzZXQgb2YgYnVmZmVyCSovCisJdW5zaWduZWQgc2hvcnQgZXZfaGVhZDsJCS8qIENvbW1hbmQgYnVmZmVyIGhlYWQgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQgZXZfdGFpbDsJCS8qIENvbW1hbmQgYnVmZmVyIHRhaWwgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQgZXZfc3RhcnQ7CS8qIHN0YXJ0IG9mZnNldCBvZiBidWZmZXIgICAgICovCisJdW5zaWduZWQgc2hvcnQgZXZfbWF4OwkJLyogbGFzdCBvZmZzZXQgb2YgYnVmZmVyICAgICAgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERvd25sb2FkIGJ1ZmZlciBzdHJ1Y3R1cmUuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGRvd25sZF90IHsKLQl1Y2hhcglkbF90eXBlOwkJLyogSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVjaGFyCWRsX3NlcTsJCQkvKiBEb3dubG9hZCBzZXF1ZW5jZSAgICAgICAgICAgICovCisJdTgJZGxfdHlwZTsJCS8qIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1OAlkbF9zZXE7CQkJLyogRG93bmxvYWQgc2VxdWVuY2UgICAgICAgICAgICAqLwogCXVzaG9ydAlkbF9zcmV2OwkJLyogU29mdHdhcmUgcmV2aXNpb24gbnVtYmVyICAgICAqLwogCXVzaG9ydAlkbF9scmV2OwkJLyogTG93IHJldmlzaW9uIG51bWJlciAgICAgICAgICAqLwogCXVzaG9ydAlkbF9ocmV2OwkJLyogSGlnaCByZXZpc2lvbiBudW1iZXIgICAgICAgICAqLwogCXVzaG9ydAlkbF9zZWc7CQkJLyogU3RhcnQgc2VnbWVudCBhZGRyZXNzICAgICAgICAqLwogCXVzaG9ydAlkbF9zaXplOwkJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGRvd25sb2FkICAqLwotCXVjaGFyCWRsX2RhdGFbMTAyNF07CQkvKiBEb3dubG9hZCBkYXRhICAgICAgICAgICAgICAgICovCisJdTgJZGxfZGF0YVsxMDI0XTsJCS8qIERvd25sb2FkIGRhdGEgICAgICAgICAgICAgICAgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExNTIsNzAgKzEwODcsNzQgQEAKICAqICAgICAgICBVID0gdW5rbm93biAobWF5IGJlIGNoYW5nZWQgdy9vIG5vdGljZSkgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgYnNfdCB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIHRwX2ptcDsJLyogVHJhbnNtaXQgcG9sbCBqdW1wCQkgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgdGNfam1wOwkvKiBDb29rZWQgcHJvY2VkdXJlIGp1bXAJICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIHJpX2ptcDsJLyogTm90IGN1cnJlbnRseSB1c2VkCQkgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgcnBfam1wOwkvKiBSZWNlaXZlIHBvbGwganVtcAkJICovCisJdW5zaWduZWQgc2hvcnQgIHRwX2ptcDsJCS8qIFRyYW5zbWl0IHBvbGwganVtcAkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgdGNfam1wOwkJLyogQ29va2VkIHByb2NlZHVyZSBqdW1wICovCisJdW5zaWduZWQgc2hvcnQgIHJpX2ptcDsJCS8qIE5vdCBjdXJyZW50bHkgdXNlZAkgKi8KKwl1bnNpZ25lZCBzaG9ydCAgcnBfam1wOwkJLyogUmVjZWl2ZSBwb2xsIGp1bXAJICovCiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgdHhfc2VnOwkvKiBXICBUeCBzZWdtZW50CSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICB0eF9oZWFkOwkvKiBXICBUeCBidWZmZXIgaGVhZCBvZmZzZXQJKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgdHhfdGFpbDsJLyogUiAgVHggYnVmZmVyIHRhaWwgb2Zmc2V0CSovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIHR4X21heDsJLyogVyAgVHggYnVmZmVyIHNpemUgLSAxCSAqLworCXVuc2lnbmVkIHNob3J0ICB0eF9zZWc7CQkvKiBXIFR4IHNlZ21lbnQJICovCisJdW5zaWduZWQgc2hvcnQgIHR4X2hlYWQ7CS8qIFcgVHggYnVmZmVyIGhlYWQgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQgIHR4X3RhaWw7CS8qIFIgVHggYnVmZmVyIHRhaWwgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQgIHR4X21heDsJCS8qIFcgVHggYnVmZmVyIHNpemUgLSAxICAgICovCiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgcnhfc2VnOwkvKiBXICBSeCBzZWdtZW50CQkqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICByeF9oZWFkOwkvKiBXICBSeCBidWZmZXIgaGVhZCBvZmZzZXQJKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgcnhfdGFpbDsJLyogUiAgUnggYnVmZmVyIHRhaWwgb2Zmc2V0CSovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIHJ4X21heDsJLyogVyAgUnggYnVmZmVyIHNpemUgLSAxCSAqLworCXVuc2lnbmVkIHNob3J0ICByeF9zZWc7CQkvKiBXIFJ4IHNlZ21lbnQJICAgICovCisJdW5zaWduZWQgc2hvcnQgIHJ4X2hlYWQ7CS8qIFcgUnggYnVmZmVyIGhlYWQgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQgIHJ4X3RhaWw7CS8qIFIgUnggYnVmZmVyIHRhaWwgb2Zmc2V0ICovCisJdW5zaWduZWQgc2hvcnQgIHJ4X21heDsJCS8qIFcgUnggYnVmZmVyIHNpemUgLSAxICAgICovCiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgdHhfbHc7CQkvKiBXICBUeCBidWZmZXIgbG93IHdhdGVyIG1hcmsgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIHJ4X2x3OwkJLyogVyAgUnggYnVmZmVyIGxvdyB3YXRlciBtYXJrICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICByeF9odzsJCS8qIFcgIFJ4IGJ1ZmZlciBoaWdoIHdhdGVyIG1hcmsgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgaW5jcjsJCS8qIFcgIEluY3JlbWVudCB0byBuZXh0IGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBzaG9ydCAgdHhfbHc7CQkvKiBXIFR4IGJ1ZmZlciBsb3cgd2F0ZXIgbWFyayAqLworCXVuc2lnbmVkIHNob3J0ICByeF9sdzsJCS8qIFcgUnggYnVmZmVyIGxvdyB3YXRlciBtYXJrICovCisJdW5zaWduZWQgc2hvcnQgIHJ4X2h3OwkJLyogVyBSeCBidWZmZXIgaGlnaCB3YXRlciBtYXJrKi8KKwl1bnNpZ25lZCBzaG9ydCAgaW5jcjsJCS8qIFcgSW5jcmVtZW50IHRvIG5leHQgY2hhbm5lbCovCiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgZmVwZGV2OwkvKiBVICBTQ0MgZGV2aWNlIGJhc2UgYWRkcmVzcyAgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICBlZGVsYXk7CS8qIFcgIEV4Y2VwdGlvbiBkZWxheSAgICAgICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIGJsZW47CQkvKiBXICBCcmVhayBsZW5ndGggICAgICAgICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIGJ0aW1lOwkJLyogVSAgQnJlYWsgY29tcGxldGUgdGltZSAgICAgICAqLworCXVuc2lnbmVkIHNob3J0ICBmZXBkZXY7CQkvKiBVIFNDQyBkZXZpY2UgYmFzZSBhZGRyZXNzICAqLworCXVuc2lnbmVkIHNob3J0ICBlZGVsYXk7CQkvKiBXIEV4Y2VwdGlvbiBkZWxheSAgICAgICAgICAqLworCXVuc2lnbmVkIHNob3J0ICBibGVuOwkJLyogVyBCcmVhayBsZW5ndGggICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBzaG9ydCAgYnRpbWU7CQkvKiBVIEJyZWFrIGNvbXBsZXRlIHRpbWUgICAgICAqLwogCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIGlmbGFnOwkJLyogQyAgVU5JWCBpbnB1dCBmbGFncyAgICAgICAgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICBvZmxhZzsJCS8qIEMgIFVOSVggb3V0cHV0IGZsYWdzICAgICAgICAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAgY2ZsYWc7CQkvKiBDICBVTklYIGNvbnRyb2wgZmxhZ3MgICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgIHdmaWxsWzEzXTsJLyogVSAgUmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbiAgICAqLworCXVuc2lnbmVkIHNob3J0ICBpZmxhZzsJCS8qIEMgVU5JWCBpbnB1dCBmbGFncyAgICAgICAgICovCisJdW5zaWduZWQgc2hvcnQgIG9mbGFnOwkJLyogQyBVTklYIG91dHB1dCBmbGFncyAgICAgICAgKi8KKwl1bnNpZ25lZCBzaG9ydCAgY2ZsYWc7CQkvKiBDIFVOSVggY29udHJvbCBmbGFncyAgICAgICAqLworCXVuc2lnbmVkIHNob3J0ICB3ZmlsbFsxM107CS8qIFUgUmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbiAgICovCiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgbnVtOwkJLyogVSAgQ2hhbm5lbCBudW1iZXIgICAgICAgICAgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICByYWN0OwkJLyogVSAgUmVjZWl2ZXIgYWN0aXZlIGNvdW50ZXIgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBic3RhdDsJCS8qIFUgIEJyZWFrIHN0YXR1cyBiaXRzICAgICAgICAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgdGJ1c3k7CQkvKiBXICBUcmFuc21pdCBidXN5ICAgICAgICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIGllbXB0eTsJLyogVyAgVHJhbnNtaXQgZW1wdHkgZXZlbnQgZW5hYmxlICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIGlsb3c7CQkvKiBXICBUcmFuc21pdCBsb3ctd2F0ZXIgZXZlbnQgZW5hYmxlICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIGlkYXRhOwkJLyogVyAgUmVjZWl2ZSBkYXRhIGludGVycnVwdCBlbmFibGUgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgZWZsYWc7CQkvKiBVICBIb3N0IGV2ZW50IGZsYWdzICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIG51bTsJCS8qIFUgQ2hhbm5lbCBudW1iZXIgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIHJhY3Q7CQkvKiBVIFJlY2VpdmVyIGFjdGl2ZSBjb3VudGVyICAqLworCXVuc2lnbmVkIGNoYXIgICBic3RhdDsJCS8qIFUgQnJlYWsgc3RhdHVzIGJpdHMgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIHRidXN5OwkJLyogVyBUcmFuc21pdCBidXN5ICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICAgaWVtcHR5OwkJLyogVyBUcmFuc21pdCBlbXB0eSBldmVudCAgICAgKi8KKwkJCQkJLyogZW5hYmxlICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICAgaWxvdzsJCS8qIFcgVHJhbnNtaXQgbG93LXdhdGVyIGV2ZW50ICovCisJCQkJCS8qIGVuYWJsZSAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIGlkYXRhOwkJLyogVyBSZWNlaXZlIGRhdGEgaW50ZXJydXB0ICAgKi8KKwkJCQkJLyogZW5hYmxlICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICAgZWZsYWc7CQkvKiBVIEhvc3QgZXZlbnQgZmxhZ3MgICAgICAgICAqLwogCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIHRmbGFnOwkJLyogVSAgVHJhbnNtaXQgZmxhZ3MgICAgICAgICAgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICByZmxhZzsJCS8qIFUgIFJlY2VpdmUgZmxhZ3MgICAgICAgICAgICAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgeG1hc2s7CQkvKiBVICBUcmFuc21pdCByZWFkeSBmbGFncyAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIHh2YWw7CQkvKiBVICBUcmFuc21pdCByZWFkeSB2YWx1ZSAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIG1fc3RhdDsJLyogUkMgTW9kZW0gc3RhdHVzIGJpdHMgICAgICAgICAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgbV9jaGFuZ2U7CS8qIFUgIE1vZGVtIGJpdHMgd2hpY2ggY2hhbmdlZCAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgbV9pbnQ7CQkvKiBXICBNb2RlbSBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgbV9sYXN0OwkvKiBVICBMYXN0IG1vZGVtIHN0YXR1cyAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIHRmbGFnOwkJLyogVSBUcmFuc21pdCBmbGFncyAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICAgcmZsYWc7CQkvKiBVIFJlY2VpdmUgZmxhZ3MgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICB4bWFzazsJCS8qIFUgVHJhbnNtaXQgcmVhZHkgZmxhZ3MgICAgICovCisJdW5zaWduZWQgY2hhciAgIHh2YWw7CQkvKiBVIFRyYW5zbWl0IHJlYWR5IHZhbHVlICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBtX3N0YXQ7CQkvKiBSQyBNb2RlbSBzdGF0dXMgYml0cyAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBtX2NoYW5nZTsJLyogVSBNb2RlbSBiaXRzIHdoaWNoIGNoYW5nZWQgKi8KKwl1bnNpZ25lZCBjaGFyICAgbV9pbnQ7CQkvKiBXIE1vZGVtIGludGVycnVwdCBlbmFibGUgICAqLworCQkJCQkvKiBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBtX2xhc3Q7CQkvKiBVIExhc3QgbW9kZW0gc3RhdHVzICAgICAgICAqLwogCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIG10cmFuOwkJLyogQyAgIFVucmVwb3J0ZWQgbW9kZW0gdHJhbnMgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBvcnVuOwkJLyogQyAgIEJ1ZmZlciBvdmVycnVuIG9jY3VycmVkICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBhc3RhcnRjOwkvKiBXICAgQXV4aWxpYXJ5IFhvbiBjaGFyICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIGFzdG9wYzsJLyogVyAgIEF1eGlsaWFyeSBYb2ZmIGNoYXIgICAgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBzdGFydGM7CS8qIFcgICBYb24gY2hhcmFjdGVyICAgICAgICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIHN0b3BjOwkJLyogVyAgIFhvZmYgY2hhcmFjdGVyICAgICAgICAgICAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICB2bmV4dGM7CS8qIFcgICBWbmV4dCBjaGFyYWN0ZXIgICAgICAgICAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIGhmbG93OwkJLyogQyAgIFNvZnR3YXJlIGZsb3cgY29udHJvbCAgICAqLwotCQotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBmaWxsYzsJCS8qIFUgICBEZWxheSBGaWxsIGNoYXJhY3RlciAgICAgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAgb2NoYXI7CQkvKiBVICAgU2F2ZWQgb3V0cHV0IGNoYXJhY3RlciAgICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgIG9tYXNrOwkJLyogVSAgIE91dHB1dCBjaGFyYWN0ZXIgbWFzayAgICAqLworCXVuc2lnbmVkIGNoYXIgICBtdHJhbjsJCS8qIEMgVW5yZXBvcnRlZCBtb2RlbSB0cmFucyAgICovCisJdW5zaWduZWQgY2hhciAgIG9ydW47CQkvKiBDIEJ1ZmZlciBvdmVycnVuIG9jY3VycmVkICAqLworCXVuc2lnbmVkIGNoYXIgICBhc3RhcnRjOwkvKiBXIEF1eGlsaWFyeSBYb24gY2hhciAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBhc3RvcGM7CQkvKiBXIEF1eGlsaWFyeSBYb2ZmIGNoYXIgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBzdGFydGM7CQkvKiBXIFhvbiBjaGFyYWN0ZXIgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBzdG9wYzsJCS8qIFcgWG9mZiBjaGFyYWN0ZXIgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIHZuZXh0YzsJCS8qIFcgVm5leHQgY2hhcmFjdGVyICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIGhmbG93OwkJLyogQyBTb2Z0d2FyZSBmbG93IGNvbnRyb2wgICAgKi8KIAotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBiZmlsbFsxM107CS8qIFUgICBSZXNlcnZlZCBmb3IgZXhwYW5zaW9uICAgKi8KKwl1bnNpZ25lZCBjaGFyICAgZmlsbGM7CQkvKiBVIERlbGF5IEZpbGwgY2hhcmFjdGVyICAgICAqLworCXVuc2lnbmVkIGNoYXIgICBvY2hhcjsJCS8qIFUgU2F2ZWQgb3V0cHV0IGNoYXJhY3RlciAgICovCisJdW5zaWduZWQgY2hhciAgIG9tYXNrOwkJLyogVSBPdXRwdXQgY2hhcmFjdGVyIG1hc2sgICAgKi8KIAotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICBzY2NbMTZdOwkvKiBVICAgU0NDIHJlZ2lzdGVycyAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciAgIGJmaWxsWzEzXTsJLyogVSBSZXNlcnZlZCBmb3IgZXhwYW5zaW9uICAgKi8KKworCXVuc2lnbmVkIGNoYXIgICBzY2NbMTZdOwkvKiBVIFNDQyByZWdpc3RlcnMgICAgICAgICAgICAqLwogfTsKIAogc3RydWN0IGNub2RlIHsKQEAgLTEyMjUsNyArMTE2NCw3IEBACiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQljaGFyICB0eXBlOwkvKiBCb2FyZCBUeXBlIAkJKi8KKwkJCWNoYXIgIHR5cGU7CS8qIEJvYXJkIFR5cGUgICAgICAgICAgICovCiAJCQlsb25nICBwb3J0OwkvKiBJL08gQWRkcmVzcwkJKi8KIAkJCWNoYXIgICpwb3J0c3RyOyAvKiBJL08gQWRkcmVzcyBpbiBzdHJpbmcgKi8KIAkJCWxvbmcgIGFkZHI7CS8qIE1lbW9yeSBBZGRyZXNzCSovCkBAIC0xMjk0LDI5ICsxMjMzLDE3IEBACiAJCX0gbW9kdWxlOwogCiAJCWNoYXIgKnR0eW5hbWU7Ci0KIAkJY2hhciAqY3VuYW1lOwotCiAJCWNoYXIgKnByaW50bmFtZTsKLQogCQlsb25nIG1ham9ybnVtYmVyOwotCiAJCWxvbmcgYWx0cGluOwotCiAJCWxvbmcgdHR5c2l6ZTsKLQogCQlsb25nIGNoc2l6ZTsKLQogCQlsb25nIGJzc2l6ZTsKLQogCQlsb25nIHVuc2l6ZTsKLQogCQlsb25nIGYyc2l6ZTsKLQogCQlsb25nIHZwaXhzaXplOwotCiAJCWxvbmcgdXNlaW50cjsKIAl9IHU7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfY2xzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX2Nscy5jCmluZGV4IDYwZDliNjIuLjhlMjY1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfY2xzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY19jbHMuYwpAQCAtNDUzLDEwICs0NTMsNiBAQAogCQkJY2xzX2NvcHlfZGF0YV9mcm9tX3F1ZXVlX3RvX3VhcnQoY2gpOwogCQl9CiAKLQkJLyogUmVjZWl2ZWQgWG9mZiBzaWduYWwvU3BlY2lhbCBjaGFyYWN0ZXIgKi8KLQkJaWYgKGlzciAmIFVBUlRfSUlSX1hPRkYpCi0JCQkvKiBFbXB0eSAqLwotCiAJCS8qIENUUy9SVFMgY2hhbmdlIG9mIHN0YXRlICovCiAJCWlmIChpc3IgJiBVQVJUX0lJUl9DVFNSVFMpIHsKIAkJCWJyZC0+aW50cl9tb2RlbSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY19jbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfY2xzLmgKaW5kZXggZmZlODUzNS4uNDY1ZDc5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY19jbHMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX2Nscy5oCkBAIC02MSw3ICs2MSw2IEBACiAjZGVmaW5lIFVBUlRfMTY2NTRfRkNSX1JYVFJJR0dFUl81NgkweDgwCiAjZGVmaW5lIFVBUlRfMTY2NTRfRkNSX1JYVFJJR0dFUl82MCAgICAgMHhDMAogCi0jZGVmaW5lIFVBUlRfSUlSX1hPRkYJCQkweDEwCS8qIFJlY2VpdmVkIFhvZmYgc2lnbmFsL1NwZWNpYWwgY2hhcmFjdGVyICovCiAjZGVmaW5lIFVBUlRfSUlSX0NUU1JUUwkJCTB4MjAJLyogUmVjZWl2ZWQgQ1RTL1JUUyBjaGFuZ2Ugb2Ygc3RhdGUgKi8KICNkZWZpbmUgVUFSVF9JSVJfUkRJX1RJTUVPVVQJCTB4MEMgICAgLyogUmVjZWl2ZXIgZGF0YSBUSU1FT1VUICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX2RyaXZlci5jCmluZGV4IGIxYTM5YjIuLjVhZjgzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY19kcml2ZXIuYwpAQCAtMTUzLDggKzE1Myw3IEBACiAJdW5zaWduZWQgaW50IGlzX3BjaV9leHByZXNzOwogfTsKIAotc3RhdGljIHN0cnVjdCBib2FyZF9pZCBkZ25jX0lkc1tdID0KLXsKK3N0YXRpYyBzdHJ1Y3QgYm9hcmRfaWQgZGduY19JZHNbXSA9IHsKIAl7CVBDSV9ERVZJQ0VfQ0xBU1NJQ180X1BDSV9OQU1FLAkJNCwJMAl9LAogCXsJUENJX0RFVklDRV9DTEFTU0lDXzRfNDIyX1BDSV9OQU1FLAk0LAkwCX0sCiAJewlQQ0lfREVWSUNFX0NMQVNTSUNfOF9QQ0lfTkFNRSwJCTgsCTAJfSwKQEAgLTIxOSw5ICsyMTgsOCBAQAogCSAqLwogCXJjID0gZGduY19zdGFydCgpOwogCi0JaWYgKHJjIDwgMCkgeworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKLQl9CiAKIAkvKgogCSAqIEZpbmQgYW5kIGNvbmZpZ3VyZSBhbGwgdGhlIGNhcmRzCkBAIC0yMzksOCArMjM3LDcgQEAKIAkJCXByX3dhcm4oIldBUk5JTkc6IGRnbmMgZHJpdmVyIGxvYWQgZmFpbGVkLiAgTm8gRGlnaSBOZW8gb3IgQ2xhc3NpYyBib2FyZHMgZm91bmQuXG4iKTsKIAogCQlkZ25jX2NsZWFudXBfbW9kdWxlKCk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWRnbmNfY3JlYXRlX2RyaXZlcl9zeXNmaWxlcygmZGduY19kcml2ZXIpOwogCX0KIApAQCAtNDUxLDIwICs0NDgsMTUgQEAKIAkvKiBGcmVlIGFsbCBhbGxvY2F0ZWQgY2hhbm5lbHMgc3RydWN0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhQT1JUUyA7IGkrKykgewogCQlpZiAoYnJkLT5jaGFubmVsc1tpXSkgewotCQkJaWYgKGJyZC0+Y2hhbm5lbHNbaV0tPmNoX3JxdWV1ZSkKLQkJCQlrZnJlZShicmQtPmNoYW5uZWxzW2ldLT5jaF9ycXVldWUpOwotCQkJaWYgKGJyZC0+Y2hhbm5lbHNbaV0tPmNoX2VxdWV1ZSkKLQkJCQlrZnJlZShicmQtPmNoYW5uZWxzW2ldLT5jaF9lcXVldWUpOwotCQkJaWYgKGJyZC0+Y2hhbm5lbHNbaV0tPmNoX3dxdWV1ZSkKLQkJCQlrZnJlZShicmQtPmNoYW5uZWxzW2ldLT5jaF93cXVldWUpOwotCisJCQlrZnJlZShicmQtPmNoYW5uZWxzW2ldLT5jaF9ycXVldWUpOworCQkJa2ZyZWUoYnJkLT5jaGFubmVsc1tpXS0+Y2hfZXF1ZXVlKTsKKwkJCWtmcmVlKGJyZC0+Y2hhbm5lbHNbaV0tPmNoX3dxdWV1ZSk7CiAJCQlrZnJlZShicmQtPmNoYW5uZWxzW2ldKTsKIAkJCWJyZC0+Y2hhbm5lbHNbaV0gPSBOVUxMOwogCQl9CiAJfQogCi0JaWYgKGJyZC0+ZmxpcGJ1ZikKLQkJa2ZyZWUoYnJkLT5mbGlwYnVmKTsKKwlrZnJlZShicmQtPmZsaXBidWYpOwogCiAJZGduY19Cb2FyZFticmQtPmJvYXJkbnVtXSA9IE5VTEw7CiAKQEAgLTUxOSw5ICs1MTEsOCBAQAogCiAJYnJkLT5zdGF0ZQkJPSBCT0FSRF9GT1VORDsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhQT1JUUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWFBPUlRTOyBpKyspCiAJCWJyZC0+Y2hhbm5lbHNbaV0gPSBOVUxMOwotCX0KIAogCS8qIHN0b3JlIHdoaWNoIGNhcmQgJiByZXZpc2lvbiB3ZSBoYXZlICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZicmQtPnN1YnZlbmRvcik7CkBAIC03MzAsMTUgKzcyMSwxOCBAQAogCURQUl9JTklUKCgiZGduY19maW5hbGl6ZV9ib2FyZF9pbml0KCkgLSBzdGFydCAjMlxuIikpOwogCiAJaWYgKGJyZC0+aXJxKSB7Ci0JCXJjID0gcmVxdWVzdF9pcnEoYnJkLT5pcnEsIGJyZC0+YmRfb3BzLT5pbnRyLCBJUlFGX1NIQVJFRCwgIkRHTkMiLCBicmQpOworCQlyYyA9IHJlcXVlc3RfaXJxKGJyZC0+aXJxLCBicmQtPmJkX29wcy0+aW50ciwKKwkJCQkgSVJRRl9TSEFSRUQsICJER05DIiwgYnJkKTsKIAogCQlpZiAocmMpIHsKLQkJCXByaW50aygiRmFpbGVkIHRvIGhvb2sgSVJRICVkXG4iLGJyZC0+aXJxKTsKKwkJCWRldl9lcnIoJmJyZC0+cGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gaG9vayBJUlEgJWRcbiIsIGJyZC0+aXJxKTsKIAkJCWJyZC0+c3RhdGUgPSBCT0FSRF9GQUlMRUQ7CiAJCQlicmQtPmRwYXN0YXR1cyA9IEJEX05PRkVQOwogCQkJcmMgPSAtRU5PREVWOwogCQl9IGVsc2UgewotCQkJRFBSX0lOSVQoKCJSZXF1ZXN0ZWQgYW5kIHJlY2VpdmVkIHVzYWdlIG9mIElSUSAlZFxuIiwgYnJkLT5pcnEpKTsKKwkJCURQUl9JTklUKCgiUmVxdWVzdGVkIGFuZCByZWNlaXZlZCB1c2FnZSBvZiBJUlEgJWRcbiIsCisJCQkJICBicmQtPmlycSkpOwogCQl9CiAJfQogCXJldHVybiByYzsKQEAgLTc5OSw5ICs3OTMsOCBAQAogCSAqIGRyaXZlciB0ZWxscyB1cyBpdHMgdXAgYW5kIHJ1bm5pbmcsIGFuZCBoYXMKIAkgKiBldmVyeXRoaW5nIGl0IG5lZWRzLgogCSAqLwotCWlmIChkZ25jX2RyaXZlcl9zdGF0ZSAhPSBEUklWRVJfUkVBRFkpIHsKKwlpZiAoZGduY19kcml2ZXJfc3RhdGUgIT0gRFJJVkVSX1JFQURZKQogCQlnb3RvIHNjaGVkdWxlX3BvbGxlcjsKLQl9CiAKIAkvKiBHbyB0aHJ1IGVhY2ggYm9hcmQsIGtpY2tpbmcgb2ZmIGEgdGFza2xldCBmb3IgZWFjaCBpZiBuZWVkZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGduY19OdW1Cb2FyZHM7IGkrKykgewpAQCAtODMxLDkgKzgyNCw4IEBACiAKIAluZXdfdGltZSA9IGRnbmNfcG9sbF90aW1lIC0gamlmZmllczsKIAotCWlmICgodWxvbmcpIG5ld190aW1lID49IDIgKiBkZ25jX3BvbGxfdGljaykgeworCWlmICgodWxvbmcpIG5ld190aW1lID49IDIgKiBkZ25jX3BvbGxfdGljaykKIAkJZGduY19wb2xsX3RpbWUgPSBqaWZmaWVzICsgIGRnbmNfamlmZmllc19mcm9tX21zKGRnbmNfcG9sbF90aWNrKTsKLQl9CiAKIAlpbml0X3RpbWVyKCZkZ25jX3BvbGxfdGltZXIpOwogCWRnbmNfcG9sbF90aW1lci5mdW5jdGlvbiA9IGRnbmNfcG9sbF9oYW5kbGVyOwpAQCAtODYwLDkgKzg1Miw4IEBACiAJZGduY190cmNidWZfc2l6ZQk9IHRyY2J1Zl9zaXplOwogCWRnbmNfZGVidWcJCT0gZGVidWc7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYQk9BUkRTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYQk9BUkRTOyBpKyspCiAJCWRnbmNfQm9hcmRbaV0gPSBOVUxMOwotCX0KIAogCWluaXRfdGltZXIoJmRnbmNfcG9sbF90aW1lcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX25lby5jIGIvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY19uZW8uYwppbmRleCBjZjIyYzdiLi45ZGU5ODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX25lby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfbmVvLmMKQEAgLTM5NSw3ICszOTUsOCBAQAogCiAJLyogVHVybiBicmVhayBvZmYsIGFuZCB1bnNldCBzb21lIHZhcmlhYmxlcyAqLwogCWlmIChjaC0+Y2hfZmxhZ3MgJiBDSF9CUkVBS19TRU5ESU5HKSB7Ci0JCWlmICgoamlmZmllcyA+PSBjaC0+Y2hfc3RvcF9zZW5kaW5nX2JyZWFrKSB8fCBmb3JjZSkgeworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBjaC0+Y2hfc3RvcF9zZW5kaW5nX2JyZWFrKQorCQkgICAgfHwgZm9yY2UpIHsKIAkJCXVjaGFyIHRlbXAgPSByZWFkYigmY2gtPmNoX25lb191YXJ0LT5sY3IpOwogCQkJd3JpdGViKCh0ZW1wICYgflVBUlRfTENSX1NCQyksICZjaC0+Y2hfbmVvX3VhcnQtPmxjcik7CiAJCQluZW9fcGNpX3Bvc3RpbmdfZmx1c2goY2gtPmNoX2JkKTsKQEAgLTQzNCw5ICs0MzUsOCBAQAogCQlpc3IgPSByZWFkYigmY2gtPmNoX25lb191YXJ0LT5pc3JfZmNyKTsKIAogCQkvKiBCYWlsIGlmIG5vIHBlbmRpbmcgaW50ZXJydXB0ICovCi0JCWlmIChpc3IgJiBVQVJUX0lJUl9OT19JTlQpICB7CisJCWlmIChpc3IgJiBVQVJUX0lJUl9OT19JTlQpCiAJCQlicmVhazsKLQkJfQogCiAJCS8qCiAJCSAqIFlhbmsgb2ZmIHRoZSB1cHBlciAyIGJpdHMsIHdoaWNoIGp1c3Qgc2hvdyB0aGF0IHRoZSBGSUZPJ3MgYXJlIGVuYWJsZWQuCkBAIC00ODUsOCArNDg1LDcgQEAKIAkJCQkJREdOQ19VTkxPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJCX0KIAkJCQlEUFJfSU5UUigoIlBvcnQgJWQuIFhPTiBkZXRlY3RlZCBpbiBpbmNvbWluZyBkYXRhXG4iLCBwb3J0KSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChjYXVzZSA9PSBVQVJUXzE3MTU4X1hPRkZfREVURUNUKSB7CisJCQl9IGVsc2UgaWYgKGNhdXNlID09IFVBUlRfMTcxNThfWE9GRl9ERVRFQ1QpIHsKIAkJCQlpZiAoIShicmQtPmNoYW5uZWxzW3BvcnRdLT5jaF9mbGFncyAmIENIX1NUT1ApKSB7CiAJCQkJCURHTkNfTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7CiAJCQkJCWNoLT5jaF9mbGFncyB8PSBDSF9TVE9QOwpAQCAtNTExLDggKzUxMCw3IEBACiAJCQkJCURHTkNfTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7CiAJCQkJCWNoLT5jaF9tb3N0YXQgfD0gVUFSVF9NQ1JfUlRTOwogCQkJCQlER05DX1VOTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7Ci0JCQkJfQotCQkJCWVsc2UgeworCQkJCX0gZWxzZSB7CiAJCQkJCURHTkNfTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7CiAJCQkJCWNoLT5jaF9tb3N0YXQgJj0gfihVQVJUX01DUl9SVFMpOwogCQkJCQlER05DX1VOTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7CkBAIC01MjIsOCArNTIwLDcgQEAKIAkJCQkJREdOQ19MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAkJCQkJY2gtPmNoX21vc3RhdCB8PSBVQVJUX01DUl9EVFI7CiAJCQkJCURHTkNfVU5MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJCQl9Ci0JCQkJZWxzZSB7CisJCQkJfSBlbHNlIHsKIAkJCQkJREdOQ19MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAkJCQkJY2gtPmNoX21vc3RhdCAmPSB+KFVBUlRfTUNSX0RUUik7CiAJCQkJCURHTkNfVU5MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTYyNCw4ICs2MjEsNyBAQAogCiAJCS8qIFRyYW5zZmVyIGRhdGEgKGlmIGFueSkgZnJvbSBXcml0ZSBRdWV1ZSAtPiBVQVJULiAqLwogCQluZW9fY29weV9kYXRhX2Zyb21fcXVldWVfdG9fdWFydChjaCk7Ci0JfQotCWVsc2UgaWYgKGxpbmVzdGF0dXMgJiBVQVJUXzE3MTU4X1RYX0FORF9GSUZPX0NMUikgeworCX0gZWxzZSBpZiAobGluZXN0YXR1cyAmIFVBUlRfMTcxNThfVFhfQU5EX0ZJRk9fQ0xSKSB7CiAJCWJyZC0+aW50cl90eCsrOwogCQljaC0+Y2hfaW50cl90eCsrOwogCQlER05DX0xPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwpAQCAtNjU0LDI0ICs2NTAsMjAgQEAKIAlzdHJ1Y3QgY2hhbm5lbF90ICpjaDsKIAlzdHJ1Y3QgdW5fdCAgICp1bjsKIAotCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKSB7CisJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybjsKLQl9CiAKIAl1biA9IChzdHJ1Y3QgdW5fdCAqKSB0dHktPmRyaXZlcl9kYXRhOwotCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHTkNfVU5JVF9NQUdJQykgeworCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHTkNfVU5JVF9NQUdJQykKIAkJcmV0dXJuOwotCX0KIAogCWNoID0gdW4tPnVuX2NoOwotCWlmICghY2ggfHwgY2gtPm1hZ2ljICE9IERHTkNfQ0hBTk5FTF9NQUdJQykgeworCWlmICghY2ggfHwgY2gtPm1hZ2ljICE9IERHTkNfQ0hBTk5FTF9NQUdJQykKIAkJcmV0dXJuOwotCX0KIAogCWJkID0gY2gtPmNoX2JkOwotCWlmICghYmQgfHwgYmQtPm1hZ2ljICE9IERHTkNfQk9BUkRfTUFHSUMpIHsKKwlpZiAoIWJkIHx8IGJkLT5tYWdpYyAhPSBER05DX0JPQVJEX01BR0lDKQogCQlyZXR1cm47Ci0JfQogCiAJRFBSX1BBUkFNKCgicGFyYW0gc3RhcnQ6IHRkZXY6ICV4IGNmbGFnczogJXggb2ZsYWdzOiAleCBpZmxhZ3M6ICV4XG4iLAogCQljaC0+Y2hfdHVuLnVuX2RldiwgY2gtPmNoX2NfY2ZsYWcsIGNoLT5jaF9jX29mbGFnLCBjaC0+Y2hfY19pZmxhZykpOwpAQCAtNzc3LDEzICs3NjksMTEgQEAKIAkJfQogCX0KIAotCWlmIChjaC0+Y2hfY19jZmxhZyAmIFBBUkVOQikgeworCWlmIChjaC0+Y2hfY19jZmxhZyAmIFBBUkVOQikKIAkJbGNyIHw9IFVBUlRfTENSX1BBUklUWTsKLQl9CiAKLQlpZiAoIShjaC0+Y2hfY19jZmxhZyAmIFBBUk9ERCkpIHsKKwlpZiAoIShjaC0+Y2hfY19jZmxhZyAmIFBBUk9ERCkpCiAJCWxjciB8PSBVQVJUX0xDUl9FUEFSOwotCX0KIAogCS8qCiAJICogTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBtYXJrL3NwYWNlIHBhcml0eSwKQEAgLTgzMiwyNiArODIyLDIzIEBACiAJaWYgKHVhcnRfbGNyICE9IGxjcikKIAkJd3JpdGViKGxjciwgJmNoLT5jaF9uZW9fdWFydC0+bGNyKTsKIAotCWlmIChjaC0+Y2hfY19jZmxhZyAmIENSRUFEKSB7CisJaWYgKGNoLT5jaF9jX2NmbGFnICYgQ1JFQUQpCiAJCWllciB8PSAoVUFSVF9JRVJfUkRJIHwgVUFSVF9JRVJfUkxTSSk7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJaWVyICY9IH4oVUFSVF9JRVJfUkRJIHwgVUFSVF9JRVJfUkxTSSk7Ci0JfQogCiAJLyoKIAkgKiBIYXZlIHRoZSBVQVJUIGludGVycnVwdCBvbiBtb2RlbSBzaWduYWwgY2hhbmdlcyBPTkxZIHdoZW4KIAkgKiB3ZSBhcmUgaW4gaGFyZHdhcmUgZmxvdyBjb250cm9sIG1vZGUsIG9yIENMT0NBTC9GT1JDRURDRCBpcyBub3Qgc2V0LgogCSAqLwotCWlmICgoY2gtPmNoX2RpZ2kuZGlnaV9mbGFncyAmIENUU1BBQ0UpIHx8IChjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgUlRTUEFDRSkgfHwKLQkJKGNoLT5jaF9jX2NmbGFnICYgQ1JUU0NUUykgfHwgIShjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgRElHSV9GT1JDRURDRCkgfHwKLQkJIShjaC0+Y2hfY19jZmxhZyAmIENMT0NBTCkpCi0JeworCWlmICgoY2gtPmNoX2RpZ2kuZGlnaV9mbGFncyAmIENUU1BBQ0UpIHx8CisJICAgIChjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgUlRTUEFDRSkgfHwKKwkgICAgKGNoLT5jaF9jX2NmbGFnICYgQ1JUU0NUUykgfHwKKwkgICAgIShjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgRElHSV9GT1JDRURDRCkgfHwKKwkgICAgIShjaC0+Y2hfY19jZmxhZyAmIENMT0NBTCkpCiAJCWllciB8PSBVQVJUX0lFUl9NU0k7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJaWVyICY9IH5VQVJUX0lFUl9NU0k7Ci0JfQogCiAJaWVyIHw9IFVBUlRfSUVSX1RIUkk7CiAKQEAgLTg2MywyOSArODUwLDI1IEBACiAKIAlpZiAoY2gtPmNoX2RpZ2kuZGlnaV9mbGFncyAmIENUU1BBQ0UgfHwgY2gtPmNoX2NfY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCW5lb19zZXRfY3RzX2Zsb3dfY29udHJvbChjaCk7Ci0JfQotCWVsc2UgaWYgKGNoLT5jaF9jX2lmbGFnICYgSVhPTikgeworCX0gZWxzZSBpZiAoY2gtPmNoX2NfaWZsYWcgJiBJWE9OKSB7CiAJCS8qIElmIHN0YXJ0L3N0b3AgaXMgc2V0IHRvIGRpc2FibGUsIHRoZW4gd2Ugc2hvdWxkIGRpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmICgoY2gtPmNoX3N0YXJ0YyA9PSBfUE9TSVhfVkRJU0FCTEUpIHx8IChjaC0+Y2hfc3RvcGMgPT0gX1BPU0lYX1ZESVNBQkxFKSkKIAkJCW5lb19zZXRfbm9fb3V0cHV0X2Zsb3dfY29udHJvbChjaCk7CiAJCWVsc2UKIAkJCW5lb19zZXRfaXhvbl9mbG93X2NvbnRyb2woY2gpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQluZW9fc2V0X25vX291dHB1dF9mbG93X2NvbnRyb2woY2gpOwogCX0KIAogCWlmIChjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgUlRTUEFDRSB8fCBjaC0+Y2hfY19jZmxhZyAmIENSVFNDVFMpIHsKIAkJbmVvX3NldF9ydHNfZmxvd19jb250cm9sKGNoKTsKLQl9Ci0JZWxzZSBpZiAoY2gtPmNoX2NfaWZsYWcgJiBJWE9GRikgeworCX0gZWxzZSBpZiAoY2gtPmNoX2NfaWZsYWcgJiBJWE9GRikgewogCQkvKiBJZiBzdGFydC9zdG9wIGlzIHNldCB0byBkaXNhYmxlLCB0aGVuIHdlIHNob3VsZCBkaXNhYmxlIGZsb3cgY29udHJvbCAqLwogCQlpZiAoKGNoLT5jaF9zdGFydGMgPT0gX1BPU0lYX1ZESVNBQkxFKSB8fCAoY2gtPmNoX3N0b3BjID09IF9QT1NJWF9WRElTQUJMRSkpCiAJCQluZW9fc2V0X25vX2lucHV0X2Zsb3dfY29udHJvbChjaCk7CiAJCWVsc2UKIAkJCW5lb19zZXRfaXhvZmZfZmxvd19jb250cm9sKGNoKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbmVvX3NldF9ub19pbnB1dF9mbG93X2NvbnRyb2woY2gpOwogCX0KIApAQCAtMTIyNSwxMiArMTIwOCwxMCBAQAogCQkgKiBUaGUgY291bnQgY2FuIGJlIGFueSB3aGVyZSBmcm9tIDAtMyBieXRlcyAib2ZmIi4KIAkJICogQml6YXJyZSwgYnV0IHRydWUuCiAJCSAqLwotCQlpZiAoKGNoLT5jaF9iZC0+ZHZpZCAmIDB4ZjApID49IFVBUlRfWFIxN0UxNThfRFZJRCkgeworCQlpZiAoKGNoLT5jaF9iZC0+ZHZpZCAmIDB4ZjApID49IFVBUlRfWFIxN0UxNThfRFZJRCkKIAkJCXRvdGFsIC09IDE7Ci0JCX0KLQkJZWxzZSB7CisJCWVsc2UKIAkJCXRvdGFsIC09IDM7Ci0JCX0KIAl9CiAKIApAQCAtMTI3NCw5ICsxMjU1LDggQEAKIAkJICogd2lsbCByZXNldCBzb21lIGJpdHMgYWZ0ZXIgb3VyIHJlYWQsIHdlIG5lZWQgdG8gZW5zdXJlCiAJCSAqIHdlIGRvbid0IG1pc3Mgb3VyIFRYIEZJRk8gZW1wdHlzLgogCQkgKi8KLQkJaWYgKGxpbmVzdGF0dXMgJiAoVUFSVF9MU1JfVEhSRSB8IFVBUlRfMTcxNThfVFhfQU5EX0ZJRk9fQ0xSKSkgeworCQlpZiAobGluZXN0YXR1cyAmIChVQVJUX0xTUl9USFJFIHwgVUFSVF8xNzE1OF9UWF9BTkRfRklGT19DTFIpKQogCQkJY2gtPmNoX2ZsYWdzIHw9IChDSF9UWF9GSUZPX0VNUFRZIHwgQ0hfVFhfRklGT19MV00pOwotCQl9CiAKIAkJbGluZXN0YXR1cyA9IDA7CiAKQEAgLTE0MDQsMTkgKzEzODQsMTYgQEAKIAlzdHJ1Y3QgdW5fdCAqdW47CiAJaW50IHJjID0gMDsKIAotCWlmICghdHR5IHx8IHR0eS0+bWFnaWMgIT0gVFRZX01BR0lDKSB7CisJaWYgKCF0dHkgfHwgdHR5LT5tYWdpYyAhPSBUVFlfTUFHSUMpCiAJCXJldHVybiAtRU5YSU87Ci0JfQogCiAJdW4gPSAoc3RydWN0IHVuX3QgKikgdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAoIXVuIHx8IHVuLT5tYWdpYyAhPSBER05DX1VOSVRfTUFHSUMpIHsKKwlpZiAoIXVuIHx8IHVuLT5tYWdpYyAhPSBER05DX1VOSVRfTUFHSUMpCiAJCXJldHVybiAtRU5YSU87Ci0JfQogCiAJY2ggPSB1bi0+dW5fY2g7Ci0JaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdOQ19DSEFOTkVMX01BR0lDKSB7CisJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdOQ19DSEFOTkVMX01BR0lDKQogCQlyZXR1cm4gLUVOWElPOwotCX0KIAogCURQUl9JT0NUTCgoIiVkIERyYWluIHdhaXQgc3RhcnRlZC5cbiIsIF9fTElORV9fKSk7CiAKQEAgLTE0MzMsMTIgKzE0MTAsMTAgQEAKIAlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1bi0+dW5fZmxhZ3Nfd2FpdCwgKCh1bi0+dW5fZmxhZ3MgJiBVTl9FTVBUWSkgPT0gMCkpOwogCiAJLyogSWYgcmV0IGlzIG5vbi16ZXJvLCB1c2VyIGN0cmwtYydlZCB1cyAqLwotCWlmIChyYykgeworCWlmIChyYykKIAkJRFBSX0lPQ1RMKCgiJWQgRHJhaW4gLSBVc2VyIGN0cmwgYydlZFxuIiwgX19MSU5FX18pKTsKLQl9Ci0JZWxzZSB7CisJZWxzZQogCQlEUFJfSU9DVEwoKCIlZCBEcmFpbiB3YWl0IGZpbmlzaGVkLlxuIiwgX19MSU5FX18pKTsKLQl9CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDU0LDkgKzE0MjksOCBAQAogCXVjaGFyIHRtcCA9IDA7CiAJaW50IGkgPSAwOwogCi0JaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdOQ19DSEFOTkVMX01BR0lDKSB7CisJaWYgKCFjaCB8fCBjaC0+bWFnaWMgIT0gREdOQ19DSEFOTkVMX01BR0lDKQogCQlyZXR1cm47Ci0JfQogCiAJd3JpdGViKChVQVJUX0ZDUl9FTkFCTEVfRklGTyB8IFVBUlRfRkNSX0NMRUFSX1hNSVQpLCAmY2gtPmNoX25lb191YXJ0LT5pc3JfZmNyKTsKIAluZW9fcGNpX3Bvc3RpbmdfZmx1c2goY2gtPmNoX2JkKTsKQEAgLTE0NjgsOCArMTQ0Miw3IEBACiAJCWlmICh0bXAgJiA0KSB7CiAJCQlEUFJfSU9DVEwoKCJTdGlsbCBmbHVzaGluZyBUWCBVQVJULi4uIGk6ICVkXG4iLCBpKSk7CiAJCQl1ZGVsYXkoMTApOwotCQl9Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlicmVhazsKIAl9CiAKQEAgLTE0ODcsOSArMTQ2MCw4IEBACiAJdWNoYXIgdG1wID0gMDsKIAlpbnQgaSA9IDA7CiAKLQlpZiAoIWNoIHx8IGNoLT5tYWdpYyAhPSBER05DX0NIQU5ORUxfTUFHSUMpIHsKKwlpZiAoIWNoIHx8IGNoLT5tYWdpYyAhPSBER05DX0NIQU5ORUxfTUFHSUMpCiAJCXJldHVybjsKLQl9CiAKIAl3cml0ZWIoKFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfQ0xFQVJfUkNWUiksICZjaC0+Y2hfbmVvX3VhcnQtPmlzcl9mY3IpOwogCW5lb19wY2lfcG9zdGluZ19mbHVzaChjaC0+Y2hfYmQpOwpAQCAtMTUwMSw4ICsxNDczLDcgQEAKIAkJaWYgKHRtcCAmIDIpIHsKIAkJCURQUl9JT0NUTCgoIlN0aWxsIGZsdXNoaW5nIFJYIFVBUlQuLi4gaTogJWRcbiIsIGkpKTsKIAkJCXVkZWxheSgxMCk7Ci0JCX0KLQkJZWxzZQorCQl9IGVsc2UKIAkJCWJyZWFrOwogCX0KIH0KQEAgLTE1OTgsOCArMTU2OSw3IEBACiAJCX0KIAogCQluID0gVUFSVF8xNzE1OF9UWF9GSUZPU0laRSAtIGNoLT5jaF90X3RsZXZlbDsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbiA9IFVBUlRfMTcxNThfVFhfRklGT1NJWkUgLSByZWFkYigmY2gtPmNoX25lb191YXJ0LT50Zmlmbyk7CiAJfQogCkBAIC0xOTYzLDEzICsxOTMzLDEwIEBACiAJCXx8ICAoYnJkLT52cGRbMHg3Rl0gIT0gMHg3OCkpICAgLyogc21hbGwgcmVzb3VyY2UgZW5kIHRhZyAqLwogCXsKIAkJbWVtc2V0KGJyZC0+dnBkLCAnXDAnLCBORU9fVlBEX0lNQUdFU0laRSk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCS8qIFNlYXJjaCBmb3IgdGhlIHNlcmlhbCBudW1iZXIgKi8KLQkJZm9yIChpID0gMDsgaSA8IE5FT19WUERfSU1BR0VCWVRFUyAtIDM7IGkrKykgewotCQkJaWYgKGJyZC0+dnBkW2ldID09ICdTJyAmJiBicmQtPnZwZFtpICsgMV0gPT0gJ04nKSB7CisJCWZvciAoaSA9IDA7IGkgPCBORU9fVlBEX0lNQUdFQllURVMgLSAzOyBpKyspCisJCQlpZiAoYnJkLT52cGRbaV0gPT0gJ1MnICYmIGJyZC0+dnBkW2kgKyAxXSA9PSAnTicpCiAJCQkJc3RybmNweShicmQtPnNlcmlhbF9udW0sICYoYnJkLT52cGRbaSArIDNdKSwgOSk7Ci0JCQl9Ci0JCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX3N5c2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX3N5c2ZzLmMKaW5kZXggOTQ2MjMwYy4uMGYwZThmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY19zeXNmcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfc3lzZnMuYwpAQCAtNzM5LDcgKzczOSw3IEBACiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmMtPmtvYmosICZkZ25jX3R0eV9hdHRyaWJ1dGVfZ3JvdXApOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkZ25jOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIHR0eSBkZXZpY2UgYXR0cmlidXRlcy5cbiIpOworCQlkZXZfZXJyKGMsICJkZ25jOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIHR0eSBkZXZpY2UgYXR0cmlidXRlcy5cbiIpOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmMtPmtvYmosICZkZ25jX3R0eV9hdHRyaWJ1dGVfZ3JvdXApOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY190dHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9kZ25jL2RnbmNfdHR5LmMKaW5kZXggZjBiMTdjMy4uNDEzNWNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RnbmMvZGduY190dHkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZGduYy9kZ25jX3R0eS5jCkBAIC01MzMsOSArNTMzLDggQEAKIAkJCSAqIFdlICpjYW5ub3QqIHNsZWVwIGhlcmUgd2FpdGluZyBmb3Igc3BhY2UsIGJlY2F1c2UgdGhpcwogCQkJICogZnVuY3Rpb24gd2FzIHByb2JhYmx5IGNhbGxlZCBieSB0aGUgaW50ZXJydXB0L3RpbWVyIHJvdXRpbmVzIQogCQkJICovCi0JCQlpZiAobiA9PSAwKSB7CisJCQlpZiAobiA9PSAwKQogCQkJCXJldHVybjsKLQkJCX0KIAogCQkJLyoKIAkJCSAqIENvcHkgYXMgbXVjaCBkYXRhIGFzIHdpbGwgZml0LgpAQCAtNjYxLDcgKzY2MCw3IEBACiAJdHAgPSBjaC0+Y2hfdHVuLnVuX3R0eTsKIAogCWJkID0gY2gtPmNoX2JkOwotCWlmKCFiZCB8fCBiZC0+bWFnaWMgIT0gREdOQ19CT0FSRF9NQUdJQykKKwlpZiAoIWJkIHx8IGJkLT5tYWdpYyAhPSBER05DX0JPQVJEX01BR0lDKQogCQlyZXR1cm47CiAKIAlER05DX0xPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwpAQCAtODAzLDggKzgwMiw3IEBACiAJCQkJZWxzZQogCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0cC0+cG9ydCwgKihjaC0+Y2hfcnF1ZXVlICsgdGFpbCArIGkpLCBUVFlfTk9STUFMKTsKIAkJCX0KLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHAtPnBvcnQsIGNoLT5jaF9ycXVldWUgKyB0YWlsLCBzKTsKIAkJfQogCkBAIC04NTcsMTQgKzg1NSwxMSBAQAogCQlwaHlzX2NhcnJpZXIgPSAxOwogCX0KIAotCWlmIChjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgRElHSV9GT1JDRURDRCkgeworCWlmIChjaC0+Y2hfZGlnaS5kaWdpX2ZsYWdzICYgRElHSV9GT1JDRURDRCkKIAkJdmlydF9jYXJyaWVyID0gMTsKLQl9CiAKLQlpZiAoY2gtPmNoX2NfY2ZsYWcgJiBDTE9DQUwpIHsKKwlpZiAoY2gtPmNoX2NfY2ZsYWcgJiBDTE9DQUwpCiAJCXZpcnRfY2FycmllciA9IDE7Ci0JfQotCiAKIAlEUFJfQ0FSUigoIkRDRDogcGh5c2ljYWw6ICVkIHZpcnQ6ICVkXG4iLCBwaHlzX2NhcnJpZXIsIHZpcnRfY2FycmllcikpOwogCkBAIC0xMDA1LDExICsxMDAwLDEwIEBACiAJCQlkZWx0YWhpZ2ggPSB0ZXN0cmF0ZV9oaWdoIC0gbmV3cmF0ZTsKIAkJCWRlbHRhbG93ID0gbmV3cmF0ZSAtIHRlc3RyYXRlX2xvdzsKIAotCQkJaWYgKGRlbHRhaGlnaCA8IGRlbHRhbG93KSB7CisJCQlpZiAoZGVsdGFoaWdoIDwgZGVsdGFsb3cpCiAJCQkJbmV3cmF0ZSA9IHRlc3RyYXRlX2hpZ2g7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCW5ld3JhdGUgPSB0ZXN0cmF0ZV9sb3c7Ci0JCQl9CiAJCX0KIAl9CiAKQEAgLTEwNDQsNyArMTAzOCw3IEBACiAJaWYgKHFsZWZ0IDwgMjU2KSB7CiAJCS8qIEhXRkxPVyAqLwogCQlpZiAoY2gtPmNoX2RpZ2kuZGlnaV9mbGFncyAmIENUU1BBQ0UgfHwgY2gtPmNoX2NfY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCQlpZighKGNoLT5jaF9mbGFncyAmIENIX1JFQ0VJVkVSX09GRikpIHsKKwkJCWlmICghKGNoLT5jaF9mbGFncyAmIENIX1JFQ0VJVkVSX09GRikpIHsKIAkJCQljaC0+Y2hfYmQtPmJkX29wcy0+ZGlzYWJsZV9yZWNlaXZlcihjaCk7CiAJCQkJY2gtPmNoX2ZsYWdzIHw9IChDSF9SRUNFSVZFUl9PRkYpOwogCQkJCURQUl9SRUFEKCgiSW50ZXJuYWwgcXVldWUgaGl0IGhpbGV2ZWwgbWFyayAoJWQpISBUdXJuaW5nIG9mZiBpbnRlcnJ1cHRzLlxuIiwKQEAgLTEyMjIsMTUgKzEyMTYsMTMgQEAKIAltYWpvciA9IE1BSk9SKHR0eV9kZXZudW0odHR5KSk7CiAJbWlub3IgPSBNSU5PUih0dHlfZGV2bnVtKHR0eSkpOwogCi0JaWYgKG1ham9yID4gMjU1KSB7CisJaWYgKG1ham9yID4gMjU1KQogCQlyZXR1cm4gLUVOWElPOwotCX0KIAogCS8qIEdldCBib2FyZCBwb2ludGVyIGZyb20gb3VyIGFycmF5IG9mIG1ham9ycyB3ZSBoYXZlIGFsbG9jYXRlZCAqLwogCWJyZCA9IGRnbmNfQm9hcmRzQnlNYWpvclttYWpvcl07Ci0JaWYgKCFicmQpIHsKKwlpZiAoIWJyZCkKIAkJcmV0dXJuIC1FTlhJTzsKLQl9CiAKIAkvKgogCSAqIElmIGJvYXJkIGlzIG5vdCB5ZXQgdXAgdG8gYSBzdGF0ZSBvZiBSRUFEWSwgZ28gdG8KQEAgLTEyMzksOSArMTIzMSw4IEBACiAJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnJkLT5zdGF0ZV93YWl0LAogCQkoYnJkLT5zdGF0ZSAmIEJPQVJEX1JFQURZKSk7CiAKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXJldHVybiByYzsKLQl9CiAKIAlER05DX0xPQ0soYnJkLT5iZF9sb2NrLCBsb2NrX2ZsYWdzKTsKIApAQCAtMTI2NywxMiArMTI1OCwxMCBAQAogCWlmICghSVNfUFJJTlQobWlub3IpKSB7CiAJCXVuID0gJmJyZC0+Y2hhbm5lbHNbUE9SVF9OVU0obWlub3IpXS0+Y2hfdHVuOwogCQl1bi0+dW5fdHlwZSA9IERHTkNfU0VSSUFMOwotCX0KLQllbHNlIGlmIChJU19QUklOVChtaW5vcikpIHsKKwl9IGVsc2UgaWYgKElTX1BSSU5UKG1pbm9yKSkgewogCQl1biA9ICZicmQtPmNoYW5uZWxzW1BPUlRfTlVNKG1pbm9yKV0tPmNoX3B1bjsKIAkJdW4tPnVuX3R5cGUgPSBER05DX1BSSU5UOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlER05DX1VOTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7CiAJCURQUl9PUEVOKCgiJWQgVW5rbm93biBUWVBFIVxuIiwgX19MSU5FX18pKTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE0MDksMTAgKzEzOTgsOSBAQAogCiAJcmMgPSBkZ25jX2Jsb2NrX3RpbF9yZWFkeSh0dHksIGZpbGUsIGNoKTsKIAotCWlmIChyYykgeworCWlmIChyYykKIAkJRFBSX09QRU4oKCJkZ25jX3R0eV9vcGVuIHJldHVybmluZyBhZnRlciBkZ25jX2Jsb2NrX3RpbF9yZWFkeSAiCiAJCQkid2l0aCAlZFxuIiwgcmMpKTsKLQl9CiAKIAkvKiBObyBnb2luZyBiYWNrIG5vdywgaW5jcmVtZW50IG91ciB1bml0IGFuZCBjaGFubmVsIGNvdW50ZXJzICovCiAJREdOQ19MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTE0NDQsOSArMTQzMiw4IEBACiAJfQogCiAJdW4gPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHTkNfVU5JVF9NQUdJQykgeworCWlmICghdW4gfHwgdW4tPm1hZ2ljICE9IERHTkNfVU5JVF9NQUdJQykKIAkJcmV0dXJuIC1FTlhJTzsKLQl9CiAKIAlEUFJfT1BFTigoImRnbmNfYmxvY2tfdGlsX3JlYWR5IC0gYmVmb3JlIGJsb2NrLlxuIikpOwogCkBAIC0xNDg5LDkgKzE0NzYsOCBAQAogCQkJICogMykgRENEIChmYWtlIG9yIHJlYWwpIGlzIGFjdGl2ZS4KIAkJCSAqLwogCi0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCQlicmVhazsKLQkJCX0KIAogCQkJaWYgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSB7CiAJCQkJcmV0dmFsID0gLUVJTzsKQEAgLTE1MDcsOCArMTQ5Myw3IEBACiAJCQkJRFBSX09QRU4oKCIlZDogY2hfZmxhZ3M6ICV4XG4iLCBfX0xJTkVfXywgY2gtPmNoX2ZsYWdzKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlzbGVlcF9vbl91bl9mbGFncyA9IDE7CiAJCX0KIApAQCAtMTU0NywxNCArMTUzMiwxMiBAQAogCQkvKgogCQkgKiBXYWl0IGZvciBzb21ldGhpbmcgaW4gdGhlIGZsYWdzIHRvIGNoYW5nZSBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLgogCQkgKi8KLQkJaWYgKHNsZWVwX29uX3VuX2ZsYWdzKSB7CisJCWlmIChzbGVlcF9vbl91bl9mbGFncykKIAkJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1bi0+dW5fZmxhZ3Nfd2FpdCwKIAkJCQkob2xkX2ZsYWdzICE9IChjaC0+Y2hfdHVuLnVuX2ZsYWdzIHwgY2gtPmNoX3B1bi51bl9mbGFncykpKTsKLQkJfQotCQllbHNlIHsKKwkJZWxzZQogCQkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNoLT5jaF9mbGFnc193YWl0LAogCQkJCShvbGRfZmxhZ3MgIT0gY2gtPmNoX2ZsYWdzKSk7Ci0JCX0KIAogCQlEUFJfT1BFTigoIkFmdGVyIHNsZWVwLi4uIHJldHZhbDogJXhcbiIsIHJldHZhbCkpOwogCkBAIC0xNjkzLDcgKzE2NzYsNyBAQAogCQkvKgogCQkgKiB0dXJuIG9mZiBwcmludCBkZXZpY2Ugd2hlbiBjbG9zaW5nIHByaW50IGRldmljZS4KIAkJICovCi0JCWlmICgodW4tPnVuX3R5cGUgPT0gREdOQ19QUklOVCkgJiYgKGNoLT5jaF9mbGFncyAmIENIX1BST04pICkgeworCQlpZiAoKHVuLT51bl90eXBlID09IERHTkNfUFJJTlQpICYmIChjaC0+Y2hfZmxhZ3MgJiBDSF9QUk9OKSkgewogCQkJZGduY193bW92ZShjaCwgY2gtPmNoX2RpZ2kuZGlnaV9vZmZzdHIsCiAJCQkJKGludCkgY2gtPmNoX2RpZ2kuZGlnaV9vZmZsZW4pOwogCQkJY2gtPmNoX2ZsYWdzICY9IH5DSF9QUk9OOwpAQCAtMTcwOCw5ICsxNjkxLDggQEAKIAogCQlEUFJfQ0xPU0UoKCJBZnRlciBjYWxsaW5nIHdhaXRfZm9yX2RyYWluXG4iKSk7CiAKLQkJaWYgKHJjKSB7CisJCWlmIChyYykKIAkJCURQUl9CQVNJQygoImRnbmNfdHR5X2Nsb3NlIC0gYmFkIHJldHVybjogJWQgIiwgcmMpKTsKLQkJfQogCiAJCWRnbmNfdHR5X2ZsdXNoX2J1ZmZlcih0dHkpOwogCQl0dHlfbGRpc2NfZmx1c2godHR5KTsKQEAgLTE3NDgsMTIgKzE3MzAsMTEgQEAKIAogCQkvKiBUdXJuIG9mZiBVQVJUIGludGVycnVwdHMgZm9yIHRoaXMgcG9ydCAqLwogCQljaC0+Y2hfYmQtPmJkX29wcy0+dWFydF9vZmYoY2gpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKgogCQkgKiB0dXJuIG9mZiBwcmludCBkZXZpY2Ugd2hlbiBjbG9zaW5nIHByaW50IGRldmljZS4KIAkJICovCi0JCWlmICgodW4tPnVuX3R5cGUgPT0gREdOQ19QUklOVCkgJiYgKGNoLT5jaF9mbGFncyAmIENIX1BST04pICkgeworCQlpZiAoKHVuLT51bl90eXBlID09IERHTkNfUFJJTlQpICYmIChjaC0+Y2hfZmxhZ3MgJiBDSF9QUk9OKSkgewogCQkJZGduY193bW92ZShjaCwgY2gtPmNoX2RpZ2kuZGlnaV9vZmZzdHIsCiAJCQkJKGludCkgY2gtPmNoX2RpZ2kuZGlnaV9vZmZsZW4pOwogCQkJY2gtPmNoX2ZsYWdzICY9IH5DSF9QUk9OOwpAQCAtMTg1Nyw3ICsxODM4LDcgQEAKIAlpZiAodW4tPnVuX3R5cGUgIT0gREdOQ19QUklOVCkKIAkJcmV0dXJuIGJ5dGVzX2F2YWlsYWJsZTsKIAotCWlmIChjaC0+Y2hfZGlnaS5kaWdpX21heGNwcyA+IDAgJiYgY2gtPmNoX2RpZ2kuZGlnaV9idWZzaXplID4gMCApIHsKKwlpZiAoY2gtPmNoX2RpZ2kuZGlnaV9tYXhjcHMgPiAwICYmIGNoLT5jaF9kaWdpLmRpZ2lfYnVmc2l6ZSA+IDApIHsKIAkJaW50IGNwc19saW1pdCA9IDA7CiAJCXVuc2lnbmVkIGxvbmcgY3VycmVudF90aW1lID0gamlmZmllczsKIAkJdW5zaWduZWQgbG9uZyBidWZmZXJfdGltZSA9IGN1cnJlbnRfdGltZSArCkBAIC0xODY3LDEyICsxODQ4LDEwIEBACiAJCQkvKiBidWZmZXIgaXMgZW1wdHkgKi8KIAkJCWNoLT5jaF9jcHN0aW1lID0gY3VycmVudF90aW1lOwkgICAgLyogcmVzZXQgY2hfY3BzdGltZSAqLwogCQkJY3BzX2xpbWl0ID0gY2gtPmNoX2RpZ2kuZGlnaV9idWZzaXplOwotCQl9Ci0JCWVsc2UgaWYgKGNoLT5jaF9jcHN0aW1lIDwgYnVmZmVyX3RpbWUpIHsKKwkJfSBlbHNlIGlmIChjaC0+Y2hfY3BzdGltZSA8IGJ1ZmZlcl90aW1lKSB7CiAJCQkvKiBzdGlsbCByb29tIGluIHRoZSBidWZmZXIgKi8KIAkJCWNwc19saW1pdCA9ICgoYnVmZmVyX3RpbWUgLSBjaC0+Y2hfY3BzdGltZSkgKiBjaC0+Y2hfZGlnaS5kaWdpX21heGNwcykgLyBIWjsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIG5vIHJvb20gaW4gdGhlIGJ1ZmZlciAqLwogCQkJY3BzX2xpbWl0ID0gMDsKIAkJfQpAQCAtMTkzMSw4ICsxOTEwLDcgQEAKIAkJaWYgKCEoY2gtPmNoX2ZsYWdzICYgQ0hfUFJPTikpCiAJCQlyZXQgLT0gY2gtPmNoX2RpZ2kuZGlnaV9vbmxlbjsKIAkJcmV0IC09IGNoLT5jaF9kaWdpLmRpZ2lfb2ZmbGVuOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlpZiAoY2gtPmNoX2ZsYWdzICYgQ0hfUFJPTikKIAkJCXJldCAtPSBjaC0+Y2hfZGlnaS5kaWdpX29mZmxlbjsKIAl9CkBAIC0yMDg2LDkgKzIwNjQsOCBAQAogCQkgKiB0aGUgYm9hcmQuCiAJCSAqLwogCQkvKiB3ZSdyZSBhbGxvd2VkIHRvIGJsb2NrIGlmIGl0J3MgZnJvbV91c2VyICovCi0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRnbmNfVG1wV3JpdGVTZW0pKSB7CisJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRnbmNfVG1wV3JpdGVTZW0pKQogCQkJcmV0dXJuIC1FSU5UUjsKLQkJfQogCiAJCS8qCiAJCSAqIGNvcHlfZnJvbV91c2VyKCkgcmV0dXJucyB0aGUgbnVtYmVyCkBAIC0yMjcxLDIxICsyMjQ4LDE3IEBACiAKIAlER05DX0xPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwogCi0JaWYgKHNldCAmIFRJT0NNX1JUUykgeworCWlmIChzZXQgJiBUSU9DTV9SVFMpCiAJCWNoLT5jaF9tb3N0YXQgfD0gVUFSVF9NQ1JfUlRTOwotCX0KIAotCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQogCQljaC0+Y2hfbW9zdGF0IHw9IFVBUlRfTUNSX0RUUjsKLQl9CiAKLQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCiAJCWNoLT5jaF9tb3N0YXQgJj0gfihVQVJUX01DUl9SVFMpOwotCX0KIAotCWlmIChjbGVhciAmIFRJT0NNX0RUUikgeworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKIAkJY2gtPmNoX21vc3RhdCAmPSB+KFVBUlRfTUNSX0RUUik7Ci0JfQogCiAJY2gtPmNoX2JkLT5iZF9vcHMtPmFzc2VydF9tb2RlbV9zaWduYWxzKGNoKTsKIApAQCAtMjUzNSw0MiArMjUwOCwzNCBAQAogCiAJc3dpdGNoIChjb21tYW5kKSB7CiAJY2FzZSBUSU9DTUJJUzoKLQkJaWYgKGFyZyAmIFRJT0NNX1JUUykgeworCQlpZiAoYXJnICYgVElPQ01fUlRTKQogCQkJY2gtPmNoX21vc3RhdCB8PSBVQVJUX01DUl9SVFM7Ci0JCX0KIAotCQlpZiAoYXJnICYgVElPQ01fRFRSKSB7CisJCWlmIChhcmcgJiBUSU9DTV9EVFIpCiAJCQljaC0+Y2hfbW9zdGF0IHw9IFVBUlRfTUNSX0RUUjsKLQkJfQogCiAJCWJyZWFrOwogCiAJY2FzZSBUSU9DTUJJQzoKLQkJaWYgKGFyZyAmIFRJT0NNX1JUUykgeworCQlpZiAoYXJnICYgVElPQ01fUlRTKQogCQkJY2gtPmNoX21vc3RhdCAmPSB+KFVBUlRfTUNSX1JUUyk7Ci0JCX0KIAotCQlpZiAoYXJnICYgVElPQ01fRFRSKSB7CisJCWlmIChhcmcgJiBUSU9DTV9EVFIpCiAJCQljaC0+Y2hfbW9zdGF0ICY9IH4oVUFSVF9NQ1JfRFRSKTsKLQkJfQogCiAJCWJyZWFrOwogCiAJY2FzZSBUSU9DTVNFVDoKIAotCQlpZiAoYXJnICYgVElPQ01fUlRTKSB7CisJCWlmIChhcmcgJiBUSU9DTV9SVFMpCiAJCQljaC0+Y2hfbW9zdGF0IHw9IFVBUlRfTUNSX1JUUzsKLQkJfQotCQllbHNlIHsKKwkJZWxzZQogCQkJY2gtPmNoX21vc3RhdCAmPSB+KFVBUlRfTUNSX1JUUyk7Ci0JCX0KIAotCQlpZiAoYXJnICYgVElPQ01fRFRSKSB7CisJCWlmIChhcmcgJiBUSU9DTV9EVFIpCiAJCQljaC0+Y2hfbW9zdGF0IHw9IFVBUlRfTUNSX0RUUjsKLQkJfQotCQllbHNlIHsKKwkJZWxzZQogCQkJY2gtPmNoX21vc3RhdCAmPSB+KFVBUlRfTUNSX0RUUik7Ci0JCX0KIAogCQlicmVhazsKIApAQCAtMzA0OCw5ICszMDEzLDggQEAKIAkJICovCiAJCXJjID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwogCQlER05DX1VOTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7Ci0JCWlmIChyYykgeworCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7Ci0JCX0KIAogCQlyYyA9IGNoLT5jaF9iZC0+YmRfb3BzLT5kcmFpbih0dHksIDApOwogCkBAIC0zMDYxLDcgKzMwMjUsNyBAQAogCiAJCURHTkNfTE9DSyhjaC0+Y2hfbG9jaywgbG9ja19mbGFncyk7CiAKLQkJaWYoKChjbWQgPT0gVENTQlJLKSAmJiAoIWFyZykpIHx8IChjbWQgPT0gVENTQlJLUCkpIHsKKwkJaWYgKCgoY21kID09IFRDU0JSSykgJiYgKCFhcmcpKSB8fCAoY21kID09IFRDU0JSS1ApKSB7CiAJCQljaC0+Y2hfYmQtPmJkX29wcy0+c2VuZF9icmVhayhjaCwgMjUwKTsKIAkJfQogCkBAIC0zMDgxLDkgKzMwNDUsOCBAQAogCQkgKi8KIAkJcmMgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7CiAJCURHTkNfVU5MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYykKIAkJCXJldHVybiByYzsKLQkJfQogCiAJCXJjID0gY2gtPmNoX2JkLT5iZF9vcHMtPmRyYWluKHR0eSwgMCk7CiAJCWlmIChyYykgewpAQCAtMzEwNSw5ICszMDY4LDggQEAKIAljYXNlIFRJT0NTQlJLOgogCQlyYyA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKIAkJREdOQ19VTkxPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwotCQlpZiAocmMpIHsKKwkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwotCQl9CiAKIAkJcmMgPSBjaC0+Y2hfYmQtPmJkX29wcy0+ZHJhaW4odHR5LCAwKTsKIAkJaWYgKHJjKSB7CkBAIC0zMjc5LDggKzMyNDEsNyBAQAogCQkJCXJldHVybiAtRUlOVFI7CiAJCQl9CiAJCQlER05DX0xPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJCX0KIAkJLyogZmFsbCB0aHJ1ICovCkBAIC0zMzcwLDkgKzMzMzEsOSBAQAogCiAJCURHTkNfVU5MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAotCQlpZiAoY29weV90b191c2VyKHVhcmcsICZidWYsIHNpemVvZihidWYpKSkgeworCQlpZiAoY29weV90b191c2VyKHVhcmcsICZidWYsIHNpemVvZihidWYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQl9CisKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMzg5LDkgKzMzNTAsOSBAQAogCQkvKiBOT1RFOiBNT1JFIEVWRU5UUyBORUVEUyBUTyBCRSBBRERFRCBIRVJFICovCiAJCWlmIChjaC0+Y2hfZmxhZ3MgJiBDSF9CUkVBS19TRU5ESU5HKQogCQkJZXZlbnRzIHw9IEVWX1RYQjsKLQkJaWYgKChjaC0+Y2hfZmxhZ3MgJiBDSF9TVE9QKSB8fCAoY2gtPmNoX2ZsYWdzICYgQ0hfRk9SQ0VEX1NUT1ApKSB7CisJCWlmICgoY2gtPmNoX2ZsYWdzICYgQ0hfU1RPUCkgfHwgKGNoLT5jaF9mbGFncyAmIENIX0ZPUkNFRF9TVE9QKSkKIAkJCWV2ZW50cyB8PSAoRVZfT1BVIHwgRVZfT1BTKTsKLQkJfQorCiAJCWlmICgoY2gtPmNoX2ZsYWdzICYgQ0hfU1RPUEkpIHx8IChjaC0+Y2hfZmxhZ3MgJiBDSF9GT1JDRURfU1RPUEkpKSB7CiAJCQlldmVudHMgfD0gKEVWX0lQVSB8IEVWX0lQUyk7CiAJCX0KQEAgLTM0MTgsOSArMzM3OSw4IEBACiAJCS8qCiAJCSAqIEdldCBkYXRhIGZyb20gdXNlciBmaXJzdC4KIAkJICovCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YXJnLCBzaXplb2YoYnVmKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVhcmcsIHNpemVvZihidWYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQl9CiAKIAkJREdOQ19MT0NLKGNoLT5jaF9sb2NrLCBsb2NrX2ZsYWdzKTsKIApAQCAtMzQ0OSwyNCArMzQwOSwyMiBAQAogCQkgKiBpbnNlcnQgbW9yZSBjaGFyYWN0ZXJzIGludG8gb3VyIHF1ZXVlIGZvciBPUE9TVCBwcm9jZXNzaW5nCiAJCSAqIHRoYXQgdGhlIFJlYWxQb3J0IFNlcnZlciBkb2Vzbid0IGtub3cgYWJvdXQuCiAJCSAqLwotCQlpZiAoYnVmLnR4YnVmID4gdGRpc3QpIHsKKwkJaWYgKGJ1Zi50eGJ1ZiA+IHRkaXN0KQogCQkJYnVmLnR4YnVmID0gdGRpc3Q7Ci0JCX0KIAogCQkvKgogCQkgKiBSZXBvcnQgd2hldGhlciBvdXIgcXVldWUgYW5kIFVBUlQgVFggYXJlIGNvbXBsZXRlbHkgZW1wdHkuCiAJCSAqLwotCQlpZiAoY291bnQpIHsKKwkJaWYgKGNvdW50KQogCQkJYnVmLnR4ZG9uZSA9IDA7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWJ1Zi50eGRvbmUgPSAxOwotCQl9CiAKIAkJREdOQ19VTkxPQ0soY2gtPmNoX2xvY2ssIGxvY2tfZmxhZ3MpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIodWFyZywgJmJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIodWFyZywgJmJ1Ziwgc2l6ZW9mKGJ1ZikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KKwogCQlyZXR1cm4gMDsKIAl9CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvTW9kdWxlLnN5bXZlcnMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L01vZHVsZS5zeW12ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvTW9kdWxlLnN5bXZlcnMKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4LmMKaW5kZXggZDMyOWNmMy4uMDkwMWVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeC5jCkBAIC03NjIsNiArNzYyLDcgQEAKIAkgKi8KIAlpZiAoZWVzdGF0dXMgJiAweDRDKSB7CiAJCWludCB3cml0ZV9mYWlsZWQgPSAwOworCiAJCWlmIChwZGV2LT5yZXZpc2lvbiA9PSAweDAxKSB7CiAJCQlpbnQJaTsKIAkJCXN0YXRpYyBjb25zdCB1OCBlZWRhdGFbNF0gPSB7IDB4RkUsIDB4MTMsIDB4MTAsIDB4RkYgfTsKQEAgLTIwOTEsNiArMjA5Miw3IEBACiBzdGF0aWMgaW5saW5lIHUzMiBidW1wX2ZyZWVfYnVmZl9yaW5nKHUzMiAqZnJlZV9idWZmX3JpbmcsIHUzMiBsaW1pdCkKIHsKIAl1MzIgdG1wX2ZyZWVfYnVmZl9yaW5nID0gKmZyZWVfYnVmZl9yaW5nOworCiAJdG1wX2ZyZWVfYnVmZl9yaW5nKys7CiAJLyogVGhpcyB3b3JrcyBmb3IgYWxsIGNhc2VzIHdoZXJlIGxpbWl0IDwgMTAyNC4gVGhlIDEwMjMgY2FzZQogCSAqIHdvcmtzIGJlY2F1c2UgMTAyMysrIGlzIDEwMjQgd2hpY2ggbWVhbnMgdGhlIGlmIGNvbmRpdGlvbiBpcyBub3QKQEAgLTQyMzcsNyArNDIzOSw2IEBACiBzdGF0aWMgaW50IGV0MTMxeF9zZXRfcGFja2V0X2ZpbHRlcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGZpbHRlciA9IGFkYXB0ZXItPnBhY2tldF9maWx0ZXI7Ci0JaW50IHN0YXR1cyA9IDA7CiAJdTMyIGN0cmw7CiAJdTMyIHBmX2N0cmw7CiAKQEAgLTQyODgsNyArNDI4OSw3IEBACiAJCXdyaXRlbChwZl9jdHJsLCAmYWRhcHRlci0+cmVncy0+cnhtYWMucGZfY3RybCk7CiAJCXdyaXRlbChjdHJsLCAmYWRhcHRlci0+cmVncy0+cnhtYWMuY3RybCk7CiAJfQotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKIC8qIGV0MTMxeF9tdWx0aWNhc3QgLSBUaGUgaGFuZGxlciB0byBjb25maWd1cmUgbXVsdGljYXN0aW5nIG9uIHRoZSBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYwppbmRleCAwNTcxOTg4Li4yZjg2MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvdHJhbnpwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jCkBAIC0yNzEsOCArMjcxLDggQEAKIAkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNl0sCiAJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzddKTsKICNpZiBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUwotCWlmIChkZXYtPm9mZmxpbmUgPT0gMiAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKLQkJZ290byByZXN1Ym1pdDsKKwkJaWYgKGRldi0+b2ZmbGluZSA9PSAyICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKQorCQkJZ290byByZXN1Ym1pdDsKIAkJaWYgKGRldi0+b2ZmbGluZSA9PSAxICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7CiAJCQlkZXYtPm9mZmxpbmUgPSAyOwogCQkJZ290byByZXN1Ym1pdDsKQEAgLTI4NSw4ICsyODUsOCBAQAogCQkJZGV2LT5vZmZsaW5lID0gMTsKIAogI2VuZGlmCS8qIFNVUFBSRVNTX0VYVFJBX09GRkxJTkVfRVZFTlRTICovCi0JICAgZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwKLQkJX19mdW5jX18sIGRldi0+cmluZ19oZWFkLCBkZXYtPnJpbmdfdGFpbCk7CisJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsCisJCQkgX19mdW5jX18sIGRldi0+cmluZ19oZWFkLCBkZXYtPnJpbmdfdGFpbCk7CiAKIAkJbmV4dF9yaW5nX2hlYWQgPSAoZGV2LT5yaW5nX2hlYWQgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CiAKQEAgLTQ3NSw2ICs0NzUsNyBAQAogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCiAJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5yZWFkX3dhaXQsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmZGV2LT53cml0ZV93YWl0LCB3YWl0KTsKQEAgLTkzNyw2ICs5MzgsNyBAQAogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJaW50IG1pbm9yOworCiAJbXV0ZXhfbG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMC5oCmluZGV4IDY1ZjdhYjYuLjBjMjFhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwLmgKQEAgLTI1LDcgKzI1LDEwIEBACiAKICNkZWZpbmUgRlQxMDAwX0RQUkFNX0JBU0UJMHgwMDAwCS8qIER1YWwgUG9ydCBSQU0gc3RhcnRpbmcgb2Zmc2V0ICovCiAKLS8qIE1heGltdW0gbnVtYmVyIG9mIG9jY3VycmVuY2Ugb2YgcHNldWRvIGhlYWRlciBlcnJvcnMgYmVmb3JlIHJlc2V0dGluZyBQQyBDYXJkLiAqLworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIG9jY3VycmVuY2Ugb2YgcHNldWRvIGhlYWRlciBlcnJvcnMgYmVmb3JlIHJlc2V0dGluZyBQQworICogQ2FyZC4KKyAqLwogI2RlZmluZSBNQVhfUEhfRVJSCTMwMAogCiAjZGVmaW5lIFNVQ0NFU1MJMHgwMApAQCAtNDAsMTYgKzQzLDE3IEBACiBzdHJ1Y3QgcGNtY2lhX2RldmljZTsKIHN0cnVjdCBuZXRfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICppbml0X2Z0MTAwMF9jYXJkKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLAotCQkJCQkJdm9pZCAqZnQxMDAwX3Jlc2V0KTsKKwkJCQkJICAgdm9pZCAqZnQxMDAwX3Jlc2V0KTsKIGV4dGVybiB2b2lkIHN0b3BfZnQxMDAwX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGNhcmRfZG93bmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKnBGaWxlU3RhcnQsCi0JCQlzaXplX3QgRmlsZUxlbmd0aCk7CisJCQkgc2l6ZV90IEZpbGVMZW5ndGgpOwogZXh0ZXJuIHZvaWQgZnQxMDAwSW5pdFByb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBmdDEwMDBDbGVhbnVwUHJvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIHUxNiBmdDEwMDBfcmVhZF9kcHJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2Zmc2V0KTsKIGV4dGVybiB2b2lkIGNhcmRfYm9vdGxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdTE2IGZ0MTAwMF9yZWFkX2RwcmFtX21hZ18xNihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2Zmc2V0LCBpbnQgSW5kZXgpOworZXh0ZXJuIHUxNiBmdDEwMDBfcmVhZF9kcHJhbV9tYWdfMTYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9mZnNldCwKKwkJCQkgICAgaW50IEluZGV4KTsKIGV4dGVybiB1MzIgZnQxMDAwX3JlYWRfZHByYW1fbWFnXzMyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvZmZzZXQpOwogdm9pZCBmdDEwMDBfd3JpdGVfZHByYW1fbWFnXzMyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvZmZzZXQsIHUzMiB2YWx1ZSk7CiAKQEAgLTYwLDcgKzY0LDggQEAKIH0KIAogLyogU2V0IHRoZSB2YWx1ZSBvZiBhIGdpdmVuIEFTSUMgcmVnaXN0ZXIuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnQxMDAwX3dyaXRlX3JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgZnQxMDAwX3dyaXRlX3JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LAorCQkJCSAgICB1MTYgdmFsdWUpCiB7CiAJb3V0dyh2YWx1ZSwgZGV2LT5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9jcy5jCmluZGV4IGYzNzZjYTQuLjFmOGIzY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2NzLmMKQEAgLTk1LDIwICs5NSwyMCBAQAogCS8qIHNldHVwIElPIHdpbmRvdyAqLwogCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBmdDEwMDBfY29uZmNoZWNrLCBOVUxMKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImZ0MTAwMDogQ291bGQgbm90IGNvbmZpZ3VyZSBwY21jaWFcbiIpOworCQlkZXZfZXJyKCZsaW5rLT5kZXYsICJDb3VsZCBub3QgY29uZmlndXJlIHBjbWNpYVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIGNvbmZpZ3VyZSBkZXZpY2UgKi8KIAlyZXQgPSBwY21jaWFfZW5hYmxlX2RldmljZShsaW5rKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImZ0MTAwMDogY291bGQgbm90IGVuYWJsZSBwY21jaWFcbiIpOworCQlkZXZfZXJyKCZsaW5rLT5kZXYsICJDb3VsZCBub3QgZW5hYmxlIHBjbWNpYVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCWxpbmstPnByaXYgPSBpbml0X2Z0MTAwMF9jYXJkKGxpbmssICZmdDEwMDBfcmVzZXQpOwogCWlmICghbGluay0+cHJpdikgewotCQlwcmludGsoS0VSTl9JTkZPICJmdDEwMDA6IENvdWxkIG5vdCByZWdpc3RlciBhcyBuZXR3b3JrIGRldmljZVxuIik7CisJCWRldl9lcnIoJmxpbmstPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBhcyBuZXR3b3JrIGRldmljZVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9kZWJ1Zy5jCmluZGV4IGZmZGM3ZjUuLmE4OTQ1YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfZGVidWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2RlYnVnLmMKQEAgLTQxNyw4ICs0MTcsOCBAQAogICAgIHUxNiB0ZW1wd29yZDsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgIElPQ1RMX0dFVF9WRVIgZ2V0X3Zlcl9kYXRhOwotICAgIElPQ1RMX0dFVF9EU1BfU1RBVCBnZXRfc3RhdF9kYXRhOworCXN0cnVjdCBJT0NUTF9HRVRfVkVSIGdldF92ZXJfZGF0YTsKKwlzdHJ1Y3QgSU9DVExfR0VUX0RTUF9TVEFUIGdldF9zdGF0X2RhdGE7CiAgICAgdTggQ29ubmVjdGlvbk1zZ1tdID0gezB4MDAsMHg0NCwweDEwLDB4MjAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDkzLDB4NjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHgwMCwweDAwLDB4MGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCkBAIC01MjcsOCArNTI3LDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJT0NUTF9TRVRfRFBSQU1fQ01EOgogICAgICAgICB7Ci0gICAgICAgICAgICBJT0NUTF9EUFJBTV9CTEsgKmRwcmFtX2RhdGEgPSBOVUxMOwotICAgICAgICAgICAgLyogSU9DVExfRFBSQU1fQ09NTUFORCBkcHJhbV9jb21tYW5kOyAqLworCQlzdHJ1Y3QgSU9DVExfRFBSQU1fQkxLICpkcHJhbV9kYXRhID0gTlVMTDsKKwkJLyogc3RydWN0IElPQ1RMX0RQUkFNX0NPTU1BTkQgZHByYW1fY29tbWFuZDsgKi8KICAgICAgICAgICAgIHUxNiBxdHlwZTsKICAgICAgICAgICAgIHUxNiBtc2dzejsKIAkJc3RydWN0IHBzZXVkb19oZHIgKnBwc2V1ZG9faGRyOwpAQCAtNjcyLDcgKzY3Miw3IEBACiAgICAgY2FzZSBJT0NUTF9HRVRfRFBSQU1fQ01EOgogICAgICAgICB7CiAJCXN0cnVjdCBkcHJhbV9ibGsgKnBkcHJhbV9ibGs7Ci0gICAgICAgICAgICBJT0NUTF9EUFJBTV9CTEsgX191c2VyICpwaW9jdGxfZHByYW07CisJCXN0cnVjdCBJT0NUTF9EUFJBTV9CTEsgX191c2VyICpwaW9jdGxfZHByYW07CiAgICAgICAgICAgICBpbnQgbXNnbGVuOwogCiAgICAgICAgICAgICAvKiBERUJVRygiRlQxMDAwOmZ0MTAwMF9pb2N0bDogSU9DVExfRlQxMDAwX0dFVF9EUFJBTSBjYWxsZWRcbiIpOyAqLwpAQCAtNzg1LDcgKzc4NSw3IEBACiAKICAgICAvKiBpbml0aWFsaXplIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uICovCiAgICAgZnQxMDAwZGV2LT5hcHBjbnQtLTsKLSAgICBERUJVRygiZnQxMDAwX2NoZGV2OiVzOmFwcGNudCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGZ0MTAwMGRldi0+YXBwY250KTsKKyAgICBERUJVRygiZnQxMDAwX2NoZGV2OiVzOmFwcGNudCA9ICVkXG4iLCBfX2Z1bmNfXywgZnQxMDAwZGV2LT5hcHBjbnQpOwogICAgIGZ0MTAwMGRldi0+YXBwX2luZm9baV0uZmlsZW9iamVjdCA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfZG93bmxvYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfZG93bmxvYWQuYwppbmRleCBjYWI5Y2RmLi42NWY5ODAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2Rvd25sb2FkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9kb3dubG9hZC5jCkBAIC01MjIsNyArNTIyLDYgQEAKIHN0YXRpYyBpbnQgd3JpdGVfYmxrX2ZpZm8oc3RydWN0IGZ0MTAwMF91c2IgKmZ0MTAwMGRldiwgdTE2ICoqcFVzRmlsZSwKIAkJCSAgdTggKipwVWNGaWxlLCBsb25nIHdvcmRfbGVuZ3RoKQogewotCWludCBTdGF0dXMgPSAwOwogCWludCBieXRlX2xlbmd0aDsKIAogCWJ5dGVfbGVuZ3RoID0gd29yZF9sZW5ndGggKiA0OwpAQCAtNTQ3LDcgKzU0Niw3IEBACiAJKnBVc0ZpbGUgPSAqcFVzRmlsZSArICh3b3JkX2xlbmd0aCA8PCAxKTsKIAkqcFVjRmlsZSA9ICpwVWNGaWxlICsgKHdvcmRfbGVuZ3RoIDw8IDIpOwogCi0JcmV0dXJuIFN0YXR1czsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzY3JhbV9zdGFydF9kd25sZChzdHJ1Y3QgZnQxMDAwX3VzYiAqZnQxMDAwZGV2LCB1MTYgKmhzaGFrZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaW9jdGwuaAppbmRleCA0MTllNTM0Li5jYjY0NGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9pb2N0bC5oCkBAIC0yMyw4MyArMjMsMTAxIEBACiAqIEhpc3Rvcnk6CiAqIDExLzUvMDIgICAgV2hjICAgICAgICAgICAgICAgIENyZWF0ZWQuCiAqCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAjaWZuZGVmIF9GVDEwMDBJT0NUTEhfCiAjZGVmaW5lIF9GVDEwMDBJT0NUTEhfCiAKLXR5cGVkZWYgc3RydWN0IF9JT0NUTF9HRVRfVkVSIHsKLSAgICB1bnNpZ25lZCBsb25nIGRydl92ZXI7Ci19IF9fcGFja2VkIElPQ1RMX0dFVF9WRVIsICpQSU9DVExfR0VUX1ZFUjsKK3N0cnVjdCBJT0NUTF9HRVRfVkVSIHsKKwl1bnNpZ25lZCBsb25nIGRydl92ZXI7Cit9IF9fcGFja2VkOwogCiAvKiBEYXRhIHN0cnVjdHVyZSBmb3IgRHNwIHN0YXRpc3RpY3MgKi8KLXR5cGVkZWYgc3RydWN0IF9JT0NUTF9HRVRfRFNQX1NUQVQgewotICAgIHVuc2lnbmVkIGNoYXIgRHNwVmVyW0RTUFZFUlNaXTsgICAgICAgIC8qIERTUCB2ZXJzaW9uIG51bWJlciAqLwotICAgIHVuc2lnbmVkIGNoYXIgSHdTZXJOdW1bSFdTRVJOVU1TWl07ICAgIC8qIEhhcmR3YXJlIFNlcmlhbCBOdW1iZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyIFNrdVtTS1VTWl07ICAgICAgICAgICAgICAvKiBTS1UgKi8KLSAgICB1bnNpZ25lZCBjaGFyIGV1aTY0W0VVSVNaXTsgICAgICAgICAgICAvKiBFVUk2NCAqLwotICAgIHVuc2lnbmVkIHNob3J0IENvblN0YXQ7ICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gU3RhdHVzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMgMC0zID0gQ29ubmVjdGlvbiBTdGF0dXMgRmllbGQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAwMDAwPUlkbGUgKERpc2Nvbm5lY3QpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgMDAwMT1TZWFyY2hpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAwMDEwPUFjdGl2ZSAoQ29ubmVjdGVkKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgIDAwMTE9V2FpdGluZyBmb3IgTDIgZG93biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgIDAxMDA9U2xlZXAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBMZWRTdGF0OyAgICAgICAgICAgICAgICAvKiBMZWQgU3RhdHVzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMgMC0zICAgPSBTaWduYWwgU3RyZW5ndGggRmllbGQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgIDAwMDAgPSAtMTA1ZEJtIHRvIC05MmRCbSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgMDAwMSA9IC05MmRCbSB0byAtODVkQm0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgIDAwMTEgPSAtODVkQm0gdG8gLTc1ZEJtICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAwMTExID0gLTc1ZEJtIHRvIC01MGRCbSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgMTExMSA9IC01MGRCbSB0byAwZEJtICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMgNC03ICAgPSBSZXNlcnZlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBCaXRzIDgtMTEgID0gU05SIEZpZWxkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAwMDAwID0gPDJkQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgMDAwMSA9IDJkQiB0byA4ZEIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgIDAwMTEgPSA4ZEIgdG8gMTVkQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgMDExMSA9IDE1ZEIgdG8gMjJkQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgMTExMSA9ID4yMmRCICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMgMTItMTUgPSBSZXNlcnZlZCAqLwotICAgIHVuc2lnbmVkIGxvbmcgblR4UGt0czsgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgZnJvbSBob3N0IHRvIGRzcCAqLwotICAgIHVuc2lnbmVkIGxvbmcgblJ4UGt0czsgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgZnJvbSBkc3AgdG8gaG9zdCAqLwotICAgIHVuc2lnbmVkIGxvbmcgblR4Qnl0ZXM7ICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGZyb20gaG9zdCB0byBkc3AgKi8KLSAgICB1bnNpZ25lZCBsb25nIG5SeEJ5dGVzOyAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBmcm9tIGRzcCB0byBob3N0ICovCi0gICAgdW5zaWduZWQgbG9uZyBDb25UbTsgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHNlc3Npb24gY29ubmVjdGlvbiB0aW1lIGluIHNlY29uZHMgKi8KLSAgICB1bnNpZ25lZCBjaGFyIENhbFZlcltDQUxWRVJTWl07ICAgICAgIC8qIFByb3ByaWV0YXJ5IENhbGlicmF0aW9uIFZlcnNpb24gKi8KLSAgICB1bnNpZ25lZCBjaGFyIENhbERhdGVbQ0FMREFURVNaXTsgICAgIC8qIFByb3ByaWV0YXJ5IENhbGlicmF0aW9uIERhdGUgKi8KLX0gX19wYWNrZWQgSU9DVExfR0VUX0RTUF9TVEFULCAqUElPQ1RMX0dFVF9EU1BfU1RBVDsKK3N0cnVjdCBJT0NUTF9HRVRfRFNQX1NUQVQgeworCXVuc2lnbmVkIGNoYXIgRHNwVmVyW0RTUFZFUlNaXTsgICAgICAgIC8qIERTUCB2ZXJzaW9uIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgSHdTZXJOdW1bSFdTRVJOVU1TWl07ICAgIC8qIEhhcmR3YXJlIFNlcmlhbCBOdW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIFNrdVtTS1VTWl07ICAgICAgICAgICAgICAvKiBTS1UgKi8KKwl1bnNpZ25lZCBjaGFyIGV1aTY0W0VVSVNaXTsgICAgICAgICAgICAvKiBFVUk2NCAqLworCXVuc2lnbmVkIHNob3J0IENvblN0YXQ7ICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gU3RhdHVzICovCisJLyogICAgQml0cyAwLTMgPSBDb25uZWN0aW9uIFN0YXR1cyBGaWVsZCAqLworCS8qICAgICAgICAgICAgICAgMDAwMD1JZGxlIChEaXNjb25uZWN0KSAqLworCS8qICAgICAgICAgICAgICAgMDAwMT1TZWFyY2hpbmcgKi8KKwkvKiAgICAgICAgICAgICAgIDAwMTA9QWN0aXZlIChDb25uZWN0ZWQpICovCisJLyogICAgICAgICAgICAgICAwMDExPVdhaXRpbmcgZm9yIEwyIGRvd24gKi8KKwkvKiAgICAgICAgICAgICAgIDAxMDA9U2xlZXAgKi8KKwl1bnNpZ25lZCBzaG9ydCBMZWRTdGF0OyAgICAgICAgICAgICAgICAvKiBMZWQgU3RhdHVzICovCisJLyogICAgQml0cyAwLTMgICA9IFNpZ25hbCBTdHJlbmd0aCBGaWVsZCAqLworCS8qICAgICAgICAgICAgICAgICAwMDAwID0gLTEwNWRCbSB0byAtOTJkQm0gKi8KKwkvKiAgICAgICAgICAgICAgICAgMDAwMSA9IC05MmRCbSB0byAtODVkQm0gKi8KKwkvKiAgICAgICAgICAgICAgICAgMDAxMSA9IC04NWRCbSB0byAtNzVkQm0gKi8KKwkvKiAgICAgICAgICAgICAgICAgMDExMSA9IC03NWRCbSB0byAtNTBkQm0gKi8KKwkvKiAgICAgICAgICAgICAgICAgMTExMSA9IC01MGRCbSB0byAwZEJtICovCisJLyogICAgQml0cyA0LTcgICA9IFJlc2VydmVkICovCisJLyogICAgQml0cyA4LTExICA9IFNOUiBGaWVsZCAqLworCS8qICAgICAgICAgICAgICAgICAwMDAwID0gPDJkQiAqLworCS8qICAgICAgICAgICAgICAgICAwMDAxID0gMmRCIHRvIDhkQiAqLworCS8qICAgICAgICAgICAgICAgICAwMDExID0gOGRCIHRvIDE1ZEIgKi8KKwkvKiAgICAgICAgICAgICAgICAgMDExMSA9IDE1ZEIgdG8gMjJkQiAqLworCS8qICAgICAgICAgICAgICAgICAxMTExID0gPjIyZEIgKi8KKwkvKiAgICBCaXRzIDEyLTE1ID0gUmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIG5UeFBrdHM7ICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkCisJCQkJCSAgICAgICAqIGZyb20gaG9zdCB0byBkc3AKKwkJCQkJICAgICAgICovCisJdW5zaWduZWQgbG9uZyBuUnhQa3RzOyAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCBmcm9tCisJCQkJCSAgICAgICAqIGRzcCB0byBob3N0CisJCQkJCSAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgblR4Qnl0ZXM7ICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkCisJCQkJCSAgICAgICAqIGZyb20gaG9zdCB0byBkc3AKKwkJCQkJICAgICAgICovCisJdW5zaWduZWQgbG9uZyBuUnhCeXRlczsgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgZnJvbQorCQkJCQkgICAgICAgKiBkc3AgdG8gaG9zdAorCQkJCQkgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIENvblRtOyAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgc2Vzc2lvbiBjb25uZWN0aW9uIHRpbWUKKwkJCQkJICAgICAgICogaW4gc2Vjb25kcworCQkJCQkgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyIENhbFZlcltDQUxWRVJTWl07ICAgICAgIC8qIFByb3ByaWV0YXJ5IENhbGlicmF0aW9uCisJCQkJCSAgICAgICAqIFZlcnNpb24KKwkJCQkJICAgICAgICovCisJdW5zaWduZWQgY2hhciBDYWxEYXRlW0NBTERBVEVTWl07ICAgICAvKiBQcm9wcmlldGFyeSBDYWxpYnJhdGlvbiBEYXRlICovCit9IF9fcGFja2VkOwogCiAvKiBEYXRhIHN0cnVjdHVyZSBmb3IgRHVhbCBQb3J0ZWQgUkFNIG1lc3NhZ2luZyBiZXR3ZWVuIEhvc3QgYW5kIERzcCAqLwotdHlwZWRlZiBzdHJ1Y3QgX0lPQ1RMX0RQUkFNX0JMSyB7Ci0gICAgdW5zaWduZWQgc2hvcnQgdG90YWxfbGVuOworc3RydWN0IElPQ1RMX0RQUkFNX0JMSyB7CisJdW5zaWduZWQgc2hvcnQgdG90YWxfbGVuOwogCXN0cnVjdCBwc2V1ZG9faGRyIHBzZXVkb2hkcjsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxNzgwXTsKLX0gX19wYWNrZWQgSU9DVExfRFBSQU1fQkxLLCAqUElPQ1RMX0RQUkFNX0JMSzsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxNzgwXTsKK30gX19wYWNrZWQ7CiAKLXR5cGVkZWYgc3RydWN0IF9JT0NUTF9EUFJBTV9DT01NQU5EIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBleHRyYTsKLSAgICBJT0NUTF9EUFJBTV9CTEsgZHByYW1fYmxrOwotfSBfX3BhY2tlZCBJT0NUTF9EUFJBTV9DT01NQU5ELCAqUElPQ1RMX0RQUkFNX0NPTU1BTkQ7CitzdHJ1Y3QgSU9DVExfRFBSQU1fQ09NTUFORCB7CisJdW5zaWduZWQgc2hvcnQgZXh0cmE7CisJc3RydWN0IElPQ1RMX0RQUkFNX0JMSyBkcHJhbV9ibGs7Cit9IF9fcGFja2VkOwogCiAvKgogKiBDdXN0b20gSU9DVEwgY29tbWFuZCBjb2RlcwogKi8KICNkZWZpbmUgRlQxMDAwX01BR0lDX0NPREUgICAgICAnRicKIAotI2RlZmluZSBJT0NUTF9SRUdJU1RFUl9DTUQJCQkJCTAKLSNkZWZpbmUgSU9DVExfU0VUX0RQUkFNX0NNRAkJCQkJMwotI2RlZmluZSBJT0NUTF9HRVRfRFBSQU1fQ01ECQkJCQk0Ci0jZGVmaW5lIElPQ1RMX0dFVF9EU1BfU1RBVF9DTUQgICAgICA2Ci0jZGVmaW5lIElPQ1RMX0dFVF9WRVJfQ01EICAgICAgICAgICA3Ci0jZGVmaW5lIElPQ1RMX0NPTk5FQ1QgICAgICAgICAgICAgICAxMAotI2RlZmluZSBJT0NUTF9ESVNDT05ORUNUICAgICAgICAgICAgMTEKKyNkZWZpbmUgSU9DVExfUkVHSVNURVJfQ01ECTAKKyNkZWZpbmUgSU9DVExfU0VUX0RQUkFNX0NNRAkzCisjZGVmaW5lIElPQ1RMX0dFVF9EUFJBTV9DTUQJNAorI2RlZmluZSBJT0NUTF9HRVRfRFNQX1NUQVRfQ01ECTYKKyNkZWZpbmUgSU9DVExfR0VUX1ZFUl9DTUQJNworI2RlZmluZSBJT0NUTF9DT05ORUNUCQkxMAorI2RlZmluZSBJT0NUTF9ESVNDT05ORUNUCTExCiAKLSNkZWZpbmUgSU9DVExfRlQxMDAwX0dFVF9EU1BfU1RBVCBfSU9SKEZUMTAwMF9NQUdJQ19DT0RFLCBJT0NUTF9HRVRfRFNQX1NUQVRfQ01ELCBzaXplb2YoSU9DVExfR0VUX0RTUF9TVEFUKQotI2RlZmluZSBJT0NUTF9GVDEwMDBfR0VUX1ZFUiBfSU9SKEZUMTAwMF9NQUdJQ19DT0RFLCBJT0NUTF9HRVRfVkVSX0NNRCwgc2l6ZW9mKElPQ1RMX0dFVF9WRVIpCi0jZGVmaW5lIElPQ1RMX0ZUMTAwMF9DT05ORUNUIF9JT1coRlQxMDAwX01BR0lDX0NPREUsIElPQ1RMX0NPTk5FQ1QsIDAKLSNkZWZpbmUgSU9DVExfRlQxMDAwX0RJU0NPTk5FQ1QgX0lPVyhGVDEwMDBfTUFHSUNfQ09ERSwgSU9DVExfRElTQ09OTkVDVCwgMAotI2RlZmluZSBJT0NUTF9GVDEwMDBfU0VUX0RQUkFNIF9JT1coRlQxMDAwX01BR0lDX0NPREUsIElPQ1RMX1NFVF9EUFJBTV9DTUQsIHNpemVvZihJT0NUTF9EUFJBTV9CTEspCi0jZGVmaW5lIElPQ1RMX0ZUMTAwMF9HRVRfRFBSQU0gX0lPUihGVDEwMDBfTUFHSUNfQ09ERSwgSU9DVExfR0VUX0RQUkFNX0NNRCwgc2l6ZW9mKElPQ1RMX0RQUkFNX0JMSykKLSNkZWZpbmUgSU9DVExfRlQxMDAwX1JFR0lTVEVSICBfSU9XKEZUMTAwMF9NQUdJQ19DT0RFLCBJT0NUTF9SRUdJU1RFUl9DTUQsIHNpemVvZih1bnNpZ25lZCBzaG9ydCAqKQorI2RlZmluZSBJT0NUTF9GVDEwMDBfR0VUX0RTUF9TVEFUIF9JT1IoRlQxMDAwX01BR0lDX0NPREUsICAgICAgXAorCQkJCSAgICAgICBJT0NUTF9HRVRfRFNQX1NUQVRfQ01ELCBcCisJCQkJICAgICAgIHN0cnVjdCBJT0NUTF9HRVRfRFNQX1NUQVQpCisjZGVmaW5lIElPQ1RMX0ZUMTAwMF9HRVRfVkVSIF9JT1IoRlQxMDAwX01BR0lDX0NPREUsIElPQ1RMX0dFVF9WRVJfQ01ELCBcCisJCQkJICBzdHJ1Y3QgSU9DVExfR0VUX1ZFUikKKyNkZWZpbmUgSU9DVExfRlQxMDAwX0NPTk5FQ1QgX0lPKEZUMTAwMF9NQUdJQ19DT0RFLCBJT0NUTF9DT05ORUNUKQorI2RlZmluZSBJT0NUTF9GVDEwMDBfRElTQ09OTkVDVCBfSU8oRlQxMDAwX01BR0lDX0NPREUsIElPQ1RMX0RJU0NPTk5FQ1QpCisjZGVmaW5lIElPQ1RMX0ZUMTAwMF9TRVRfRFBSQU0gX0lPVyhGVDEwMDBfTUFHSUNfQ09ERSwgSU9DVExfU0VUX0RQUkFNX0NNRCwgXAorCQkJCSAgICBzdHJ1Y3QgSU9DVExfRFBSQU1fQkxLKQorI2RlZmluZSBJT0NUTF9GVDEwMDBfR0VUX0RQUkFNIF9JT1IoRlQxMDAwX01BR0lDX0NPREUsIElPQ1RMX0dFVF9EUFJBTV9DTUQsIFwKKwkJCQkgICAgc3RydWN0IElPQ1RMX0RQUkFNX0JMSykKKyNkZWZpbmUgSU9DVExfRlQxMDAwX1JFR0lTVEVSICBfSU9XKEZUMTAwMF9NQUdJQ19DT0RFLCBJT0NUTF9SRUdJU1RFUl9DTUQsIFwKKwkJCQkgICAgdW5zaWduZWQgc2hvcnQgKikKKwogI2VuZGlmIC8qIF9GVDEwMDBJT0NUTEhfICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9wcm9jLmMKaW5kZXggMjU3NWQwZC4uZTg5YjVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9wcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9wcm9jLmMKQEAgLTMyLDE3ICszMiwyMCBAQAogCiAKICNkZWZpbmUgc2VxX3B1dHgobSwgbWVzc2FnZSwgc2l6ZSwgdmFyKSBcCi0Jc2VxX3ByaW50ZihtLCBtZXNzYWdlKTsJXAotCWZvciAoaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspIFwKLQkJc2VxX3ByaW50ZihtLCAiJTAyeDoiLCB2YXJbaV0pOyBcCi0Jc2VxX3ByaW50ZihtLCAiJTAyeFxuIiwgdmFyW2ldKQorCWRvIHsgXAorCQlzZXFfcHJpbnRmKG0sIG1lc3NhZ2UpOwlcCisJCWZvciAoaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspIFwKKwkJCXNlcV9wcmludGYobSwgIiUwMng6IiwgdmFyW2ldKTsgXAorCQlzZXFfcHJpbnRmKG0sICIlMDJ4XG4iLCB2YXJbaV0pOwlcCisJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBzZXFfcHV0ZChtLCBtZXNzYWdlLCBzaXplLCB2YXIpIFwKLQlzZXFfcHJpbnRmKG0sIG1lc3NhZ2UpOyBcCi0JZm9yIChpID0gMDsgaSA8IChzaXplIC0gMSk7IGkrKykgXAotCQlzZXFfcHJpbnRmKG0sICIlZC4iLCB2YXJbaV0pOyBcCi0Jc2VxX3ByaW50ZihtLCAiJWRcbiIsIHZhcltpXSkKLQorCWRvIHsgXAorCQlzZXFfcHJpbnRmKG0sIG1lc3NhZ2UpOyBcCisJCWZvciAoaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspIFwKKwkJCXNlcV9wcmludGYobSwgIiVkLiIsIHZhcltpXSk7IFwKKwkJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHZhcltpXSk7CSAgICAgIFwKKwl9IHdoaWxlICgwKQogCiAjZGVmaW5lIEZUTkVUX1BST0MgaW5pdF9uZXQucHJvY19uZXQKIApAQCAtMjAwLDcgKzIwMyw3IEBACiAKIAlpbmZvLT5mdDEwMDBfcHJvY19kaXIgPSBwcm9jX21rZGlyKEZUMTAwMF9QUk9DX0RJUiwgRlRORVRfUFJPQyk7CiAJaWYgKGluZm8tPmZ0MTAwMF9wcm9jX2RpciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBjcmVhdGUgJXMgZGlyLlxuIiwKKwkJbmV0ZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSAlcyBkaXIuXG4iLAogCQkJRlQxMDAwX1BST0NfRElSKTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTIxMCw3ICsyMTMsNyBAQAogCQkJCSAmZnQxMDAwX3Byb2NfZm9wcywgZGV2KTsKIAogCWlmICghZnQxMDAwX3Byb2NfZmlsZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gY3JlYXRlIC9wcm9jIGVudHJ5LlxuIik7CisJCW5ldGRldl93YXJuKGRldiwgIlVuYWJsZSB0byBjcmVhdGUgL3Byb2MgZW50cnkuXG4iKTsKIAkJZ290byBmYWlsX2VudHJ5OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmMKaW5kZXggZTQwNzYzZS4uMGEyNTQ0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX3VzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKLXN0YXRpYyBib29sIGdQb2xsaW5nZmFpbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBnUG9sbGluZ2ZhaWxlZDsKIHN0YXRpYyBpbnQgZnQxMDAwX3BvbGxfdGhyZWFkKHZvaWQgKmFyZykKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmgKaW5kZXggYTZmZGQ1MjQuLjJkNGIwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuaApAQCAtMTQsMTcgKzE0LDIxIEBACiBzdHJ1Y3QgYXBwX2luZm9fYmxvY2sgewogCXUzMiBuVHhNc2c7ICAgICAgICAgICAgICAgICAgICAvKiBEUFJBTSBtc2cgc2VudCB0byBEU1Agd2l0aCBhcHBfaWQgKi8KIAl1MzIgblJ4TXNnOyAgICAgICAgICAgICAgICAgICAgLyogRFBSQU0gbXNnIHJjdiBmcm9tIGRzcCB3aXRoIGFwcF9pZCAqLwotCXUzMiBuVHhNc2dSZWplY3Q7ICAgICAgICAgICAgICAvKiBEUFJBTSBtc2cgcmVqZWN0ZWQgZHVlIHRvIERTUCBkb29yYmVsbCBzZXQgKi8KKwl1MzIgblR4TXNnUmVqZWN0OyAgICAgICAgICAgICAgLyogRFBSQU0gbXNnIHJlamVjdGVkIGR1ZSB0byBEU1AgZG9vcmJlbGwKKwkJCQkJKiBzZXQKKwkJCQkJKi8KIAl1MzIgblJ4TXNnTWlzczsgICAgICAgICAgICAgICAgLyogRFBSQU0gbXNnIGRyb3BwZWQgZHVlIHRvIG92ZXJmbG93ICovCiAJc3RydWN0IGZvd25fc3RydWN0ICpmaWxlb2JqZWN0Oy8qIEFwcGxpY2F0aW9uJ3MgZmlsZSBvYmplY3QgKi8KIAl1MTYgYXBwX2lkOyAgICAgICAgICAgICAgICAgICAgLyogQXBwbGljYXRpb24gaWQgKi8KIAlpbnQgRHNwQkNNc2dGbGFnOwogCWludCBOdW1PZk1zZzsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIG1lc3NhZ2VzIHF1ZXVlZCB1cCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfZHByYW1fbXNnOwotCXN0cnVjdCBsaXN0X2hlYWQgYXBwX3NxbGlzdDsgICAvKiBsaW5rIGxpc3Qgb2YgbXNncyBmb3IgYXBwbGljYXRvbiBvbiBzbG93IHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCBhcHBfc3FsaXN0OyAgIC8qIGxpbmsgbGlzdCBvZiBtc2dzIGZvciBhcHBsaWNhdG9uIG9uCisJCQkJCSogc2xvdyBxdWV1ZQorCQkJCQkqLwogfSBfX3BhY2tlZDsKIAotI2RlZmluZSBERUJVRyhhcmdzLi4uKSBwcmludGsoS0VSTl9JTkZPIGFyZ3MpCisjZGVmaW5lIERFQlVHKGFyZ3MuLi4pIHByX2luZm8oYXJncykKIAogI2RlZmluZSBGQUxTRSAgICAgICAgICAgMAogI2RlZmluZSBUUlVFICAgICAgICAgICAgMQpAQCAtNDEsNyArNDUsOSBAQAogLyogTUVNT1JZIE1BUCBGT1IgTUFHTkVNSVRFICovCiAvKiB0aGUgaW5kZXhlcyBhcmUgc3dhcHBlZCBjb21wYXJpbmcgdG8gUENNQ0lBIC0gaXMgaXQgT0sgb3IgYSBidWc/ICovCiAjdW5kZWYgRlQxMDAwX01BR19EU1BfTEVEX0lORFgKLSNkZWZpbmUgRlQxMDAwX01BR19EU1BfTEVEX0lORFgJCTB4MQkvKiBkc3AgbGVkIHN0YXR1cyBmb3IgUEFEIGRldmljZSAqLworI2RlZmluZSBGVDEwMDBfTUFHX0RTUF9MRURfSU5EWAkJMHgxCS8qIGRzcCBsZWQgc3RhdHVzIGZvciBQQUQKKwkJCQkJCSAqIGRldmljZQorCQkJCQkJICovCiAjdW5kZWYgRlQxMDAwX01BR19EU1BfQ09OX1NUQVRFX0lORFgKICNkZWZpbmUgRlQxMDAwX01BR19EU1BfQ09OX1NUQVRFX0lORFgJMHgwCS8qIERTUCBDb25uZWN0aW9uIFN0YXR1cyBJbmZvICovCiAKQEAgLTk5LDIxICsxMDUsMjEgQEAKIH0gX19wYWNrZWQ7CiAKIGludCBmdDEwMDBfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgZnQxMDAwX3VzYiAqZnQxMDAwZGV2LAotCQkJdTE2ICpEYXRhLCB1MTYgblJlZ0luZHgpOworCQkJIHUxNiAqRGF0YSwgdTE2IG5SZWdJbmR4KTsKIGludCBmdDEwMDBfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGZ0MTAwMF91c2IgKmZ0MTAwMGRldiwKLQkJCXUxNiB2YWx1ZSwgdTE2IG5SZWdJbmR4KTsKKwkJCSAgdTE2IHZhbHVlLCB1MTYgblJlZ0luZHgpOwogaW50IGZ0MTAwMF9yZWFkX2RwcmFtMzIoc3RydWN0IGZ0MTAwMF91c2IgKmZ0MTAwMGRldiwKIAkJCXUxNiBpbmR4LCB1OCAqYnVmZmVyLCB1MTYgY250KTsKIGludCBmdDEwMDBfd3JpdGVfZHByYW0zMihzdHJ1Y3QgZnQxMDAwX3VzYiAqZnQxMDAwZGV2LAotCQkJdTE2IGluZHgsIHU4ICpidWZmZXIsIHUxNiBjbnQpOworCQkJIHUxNiBpbmR4LCB1OCAqYnVmZmVyLCB1MTYgY250KTsKIGludCBmdDEwMDBfcmVhZF9kcHJhbTE2KHN0cnVjdCBmdDEwMDBfdXNiICpmdDEwMDBkZXYsCiAJCQl1MTYgaW5keCwgdTggKmJ1ZmZlciwgdTggaGlnaGxvdyk7CiBpbnQgZnQxMDAwX3dyaXRlX2RwcmFtMTYoc3RydWN0IGZ0MTAwMF91c2IgKmZ0MTAwMGRldiwKLQkJCXUxNiBpbmR4LCB1MTYgdmFsdWUsIHU4IGhpZ2hsb3cpOworCQkJIHUxNiBpbmR4LCB1MTYgdmFsdWUsIHU4IGhpZ2hsb3cpOwogaW50IGZpeF9mdDEwMDBfcmVhZF9kcHJhbTMyKHN0cnVjdCBmdDEwMDBfdXNiICpmdDEwMDBkZXYsCi0JCQl1MTYgaW5keCwgdTggKmJ1ZmZlcik7CisJCQkgICAgdTE2IGluZHgsIHU4ICpidWZmZXIpOwogaW50IGZpeF9mdDEwMDBfd3JpdGVfZHByYW0zMihzdHJ1Y3QgZnQxMDAwX3VzYiAqZnQxMDAwZGV2LAotCQkJdTE2IGluZHgsIHU4ICpidWZmZXIpOworCQkJICAgICB1MTYgaW5keCwgdTggKmJ1ZmZlcik7CiAKIGV4dGVybiB2b2lkICpwRmlsZVN0YXJ0OwogZXh0ZXJuIHNpemVfdCBGaWxlTGVuZ3RoOwpAQCAtMTI1LDEyICsxMzEsMTMgQEAKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZnJlZXJjdnBvb2w7CiAKLWV4dGVybiBzcGlubG9ja190IGZyZWVfYnVmZl9sb2NrOyAgIC8qIGxvY2sgdG8gYXJiaXRyYXRlIGZyZWUgYnVmZmVyIGxpc3QgZm9yIHJlY2VpdmUgY29tbWFuZCBkYXRhICovCisvKiBsb2NrIHRvIGFyYml0cmF0ZSBmcmVlIGJ1ZmZlciBsaXN0IGZvciByZWNlaXZlIGNvbW1hbmQgZGF0YSAqLworZXh0ZXJuIHNwaW5sb2NrX3QgZnJlZV9idWZmX2xvY2s7CiAKIGludCBmdDEwMDBfY3JlYXRlX2RldihzdHJ1Y3QgZnQxMDAwX3VzYiAqZGV2KTsKIHZvaWQgZnQxMDAwX2Rlc3Ryb3lfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgY2FyZF9zZW5kX2NvbW1hbmQoc3RydWN0IGZ0MTAwMF91c2IgKmZ0MTAwMGRldiwKLQkJCQl2b2lkICpwdGVtcGJ1ZmZlciwgaW50IHNpemUpOworCQkJICAgICAgdm9pZCAqcHRlbXBidWZmZXIsIGludCBzaXplKTsKIAogc3RydWN0IGRwcmFtX2JsayAqZnQxMDAwX2dldF9idWZmZXIoc3RydWN0IGxpc3RfaGVhZCAqYnVmZmxpc3QpOwogdm9pZCBmdDEwMDBfZnJlZV9idWZmZXIoc3RydWN0IGRwcmFtX2JsayAqcGRwcmFtX2Jsaywgc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QpOwpAQCAtMTM5LDEyICsxNDYsMTAgQEAKIGludCBpbml0X2Z0MTAwMF9uZXRkZXYoc3RydWN0IGZ0MTAwMF91c2IgKmZ0MTAwMGRldik7CiBzdHJ1Y3QgdXNiX2ludGVyZmFjZTsKIGludCByZWdfZnQxMDAwX25ldGRldihzdHJ1Y3QgZnQxMDAwX3VzYiAqZnQxMDAwZGV2LAotCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCQkgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBpbnQgZnQxMDAwX3BvbGwodm9pZCAqZGV2X2lkKTsKIAogaW50IGZ0MTAwMF9pbml0X3Byb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGZ0MTAwMF9jbGVhbnVwX3Byb2Moc3RydWN0IGZ0MTAwMF9pbmZvICppbmZvKTsKIAotCi0KLSNlbmRpZgorI2VuZGlmICAvKiBfRlQxMDAwX1VTQl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLmgKaW5kZXggY2NiODIxYS4uZGI1NzQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIENvbW1vbiBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmb3IgRlQxMDAwIEZsYXJpb24gRmxhc2ggT0ZETSBQQ01DSUEgYW5kIFVTQiBkZXZpY2VzCisgKiBDb21tb24gc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIEZUMTAwMCBGbGFyaW9uIEZsYXNoIE9GRE0gUENNQ0lBIGFuZAorICogVVNCIGRldmljZXMuCiAgKgogICogT3JpZ2luYWxseSBjb3B5cmlnaHQgKGMpIDIwMDIgRmxhcmlvbiBUZWNobm9sb2dpZXMKICAqCkBAIC0xNyw3ICsxOCw5IEBACiAjZGVmaW5lIE1BR05FTUlURV9JRAkweDFhMDEJLyogQVNJQyBJRCBmb3IgTWFnbmVtaXRlICovCiAKIC8qIE1FTU9SWSBNQVAgY29tbW9uIHRvIGJvdGggRUxFQ1RSQUJVWlogYW5kIE1BR05FTUlURSAqLwotI2RlZmluZQlGVDEwMDBfUkVHX0RQUkFNX0FERFIJMHgwMDBFCS8qIERQQURSIC0gRHVhbCBQb3J0IFJhbSBJbmRpcmVjdCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCUZUMTAwMF9SRUdfRFBSQU1fQUREUgkweDAwMEUJLyogRFBBRFIgLSBEdWFsIFBvcnQgUmFtIEluZGlyZWN0CisJCQkJCSAqIEFkZHJlc3MgUmVnaXN0ZXIKKwkJCQkJICovCiAjZGVmaW5lCUZUMTAwMF9SRUdfU1VQX0NUUkwJMHgwMDIwCS8qIEhDVFIgLSBIb3N0IENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUJRlQxMDAwX1JFR19TVVBfU1RBVAkweDAwMjIJLyogSFNUQVQgLSBIb3N0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZQlGVDEwMDBfUkVHX1JFU0VUCTB4MDAyNAkvKiBIQ1RSIC0gSG9zdCBDb250cm9sIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZndzZXJpYWwvZG1hX2ZpZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9md3NlcmlhbC9kbWFfZmlmby5jCmluZGV4IDVlODQ2MzQuLjAyNzkwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9md3NlcmlhbC9kbWFfZmlmby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9md3NlcmlhbC9kbWFfZmlmby5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE2OSw5ICsxNjUsOSBAQAogCW1lbWNweShmaWZvLT5kYXRhLCBzcmMgKyBsLCBuIC0gbCk7CiAKIAlpZiAoRkFJTChmaWZvLCBhZGRyX2NoZWNrKGZpZm8tPmRvbmUsIGZpZm8tPmluLCBmaWZvLT5pbiArIG4pIHx8Ci0JCQlmaWZvLT5hdmFpbCA8IG4sCi0JCQkiZmlmbyBjb3JydXB0OiBpbjoldSBvdXQ6JXUgZG9uZToldSBuOiVkIGF2YWlsOiVkIiwKLQkJCWZpZm8tPmluLCBmaWZvLT5vdXQsIGZpZm8tPmRvbmUsIG4sIGZpZm8tPmF2YWlsKSkKKwkJIGZpZm8tPmF2YWlsIDwgbiwKKwkJICJmaWZvIGNvcnJ1cHQ6IGluOiV1IG91dDoldSBkb25lOiV1IG46JWQgYXZhaWw6JWQiLAorCQkgZmlmby0+aW4sIGZpZm8tPm91dCwgZmlmby0+ZG9uZSwgbiwgZmlmby0+YXZhaWwpKQogCQlyZXR1cm4gLUVOWElPOwogCiAJZmlmby0+aW4gKz0gbjsKQEAgLTIzNiwxMiArMjMyLDEyIEBACiAJKytmaWZvLT5vcGVuOwogCiAJaWYgKEZBSUwoZmlmbywgZmlmby0+b3BlbiA+IGZpZm8tPm9wZW5fbGltaXQsCi0JCQkicGFzdCBvcGVuIGxpbWl0OiVkIChsaW1pdDolZCkiLAotCQkJZmlmby0+b3BlbiwgZmlmby0+b3Blbl9saW1pdCkpCisJCSAicGFzdCBvcGVuIGxpbWl0OiVkIChsaW1pdDolZCkiLAorCQkgZmlmby0+b3BlbiwgZmlmby0+b3Blbl9saW1pdCkpCiAJCXJldHVybiAtRU5YSU87CiAJaWYgKEZBSUwoZmlmbywgZmlmby0+b3V0ICYgKGZpZm8tPmFsaWduIC0gMSksCi0JCQkiZmlmbyBvdXQgdW5hbGlnbmVkOiV1IChhbGlnbjoldSkiLAotCQkJZmlmby0+b3V0LCBmaWZvLT5hbGlnbikpCisJCSAiZmlmbyBvdXQgdW5hbGlnbmVkOiV1IChhbGlnbjoldSkiLAorCQkgZmlmby0+b3V0LCBmaWZvLT5hbGlnbikpCiAJCXJldHVybiAtRU5YSU87CiAKIAlyZXR1cm4gbGVuIC0gbjsKQEAgLTI2NCw4ICsyNjAsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChGQUlMKGZpZm8sIGxpc3RfZW1wdHkoJmZpZm8tPnBlbmRpbmcpICE9IChmaWZvLT5vcGVuID09IDApLAotCQkJInBlbmRpbmcgbGlzdCBkaXNhZ3JlZXMgd2l0aCBvcGVuIGNvdW50OiVkIiwKLQkJCWZpZm8tPm9wZW4pKQorCQkgInBlbmRpbmcgbGlzdCBkaXNhZ3JlZXMgd2l0aCBvcGVuIGNvdW50OiVkIiwKKwkJIGZpZm8tPm9wZW4pKQogCQlyZXR1cm4gLUVOWElPOwogCiAJdG1wID0gY29tcGxldGUtPmRhdGE7CkBAIC0yODIsMTAgKzI3OCwxMCBAQAogCQl9CiAKIAkJaWYgKEZBSUwoZmlmbywgcGVuZGluZy0+b3V0ICE9IGZpZm8tPmRvbmUgfHwKLQkJCQlhZGRyX2NoZWNrKGZpZm8tPmluLCBmaWZvLT5kb25lLCBwZW5kaW5nLT5uZXh0KSwKLQkJCQkiaW46JXUgb3V0OiV1IGRvbmU6JXUgc2F2ZWQ6JXUgbmV4dDoldSIsCi0JCQkJZmlmby0+aW4sIGZpZm8tPm91dCwgZmlmby0+ZG9uZSwgcGVuZGluZy0+b3V0LAotCQkJCXBlbmRpbmctPm5leHQpKQorCQkJIGFkZHJfY2hlY2soZmlmby0+aW4sIGZpZm8tPmRvbmUsIHBlbmRpbmctPm5leHQpLAorCQkJICJpbjoldSBvdXQ6JXUgZG9uZToldSBzYXZlZDoldSBuZXh0OiV1IiwKKwkJCSBmaWZvLT5pbiwgZmlmby0+b3V0LCBmaWZvLT5kb25lLCBwZW5kaW5nLT5vdXQsCisJCQkgcGVuZGluZy0+bmV4dCkpCiAJCQlyZXR1cm4gLUVOWElPOwogCiAJCWxpc3RfZGVsX2luaXQoJnBlbmRpbmctPmxpbmspOwpAQCAtMzAwLDcgKzI5Niw3IEBACiAJaWYgKEZBSUwoZmlmbywgZmlmby0+b3BlbiA8IDAsICJvcGVuIGRtYTolZCA8IDAiLCBmaWZvLT5vcGVuKSkKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoRkFJTChmaWZvLCBmaWZvLT5hdmFpbCA+IGZpZm8tPnNpemUsICJmaWZvIGF2YWlsOiVkID4gc2l6ZTolZCIsCi0JCQlmaWZvLT5hdmFpbCwgZmlmby0+c2l6ZSkpCisJCSBmaWZvLT5hdmFpbCwgZmlmby0+c2l6ZSkpCiAJCXJldHVybiAtRU5YSU87CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9md3NlcmlhbC9kbWFfZmlmby5oIGIvZHJpdmVycy9zdGFnaW5nL2Z3c2VyaWFsL2RtYV9maWZvLmgKaW5kZXggYTExM2ZlMS4uNDEwOTg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z3c2VyaWFsL2RtYV9maWZvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z3c2VyaWFsL2RtYV9maWZvLmgKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAogI2lmbmRlZiBfRE1BX0ZJRk9fSF8KQEAgLTg1LDE1ICs4MSwxNSBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZylkcC0+ZGF0YSAmIDFVTDsKIH0KIAotZXh0ZXJuIHZvaWQgZG1hX2ZpZm9faW5pdChzdHJ1Y3QgZG1hX2ZpZm8gKmZpZm8pOwotZXh0ZXJuIGludCBkbWFfZmlmb19hbGxvYyhzdHJ1Y3QgZG1hX2ZpZm8gKmZpZm8sIGludCBzaXplLCB1bnNpZ25lZCBhbGlnbiwKLQkJCSAgaW50IHR4X2xpbWl0LCBpbnQgb3Blbl9saW1pdCwgZ2ZwX3QgZ2ZwX21hc2spOwotZXh0ZXJuIHZvaWQgZG1hX2ZpZm9fZnJlZShzdHJ1Y3QgZG1hX2ZpZm8gKmZpZm8pOwotZXh0ZXJuIHZvaWQgZG1hX2ZpZm9fcmVzZXQoc3RydWN0IGRtYV9maWZvICpmaWZvKTsKLWV4dGVybiBpbnQgZG1hX2ZpZm9faW4oc3RydWN0IGRtYV9maWZvICpmaWZvLCBjb25zdCB2b2lkICpzcmMsIGludCBuKTsKLWV4dGVybiBpbnQgZG1hX2ZpZm9fb3V0X3BlbmQoc3RydWN0IGRtYV9maWZvICpmaWZvLCBzdHJ1Y3QgZG1hX3BlbmRpbmcgKnBlbmRlZCk7Ci1leHRlcm4gaW50IGRtYV9maWZvX291dF9jb21wbGV0ZShzdHJ1Y3QgZG1hX2ZpZm8gKmZpZm8sCi0JCQkJIHN0cnVjdCBkbWFfcGVuZGluZyAqY29tcGxldGUpOwordm9pZCBkbWFfZmlmb19pbml0KHN0cnVjdCBkbWFfZmlmbyAqZmlmbyk7CitpbnQgZG1hX2ZpZm9fYWxsb2Moc3RydWN0IGRtYV9maWZvICpmaWZvLCBpbnQgc2l6ZSwgdW5zaWduZWQgYWxpZ24sCisJCSAgIGludCB0eF9saW1pdCwgaW50IG9wZW5fbGltaXQsIGdmcF90IGdmcF9tYXNrKTsKK3ZvaWQgZG1hX2ZpZm9fZnJlZShzdHJ1Y3QgZG1hX2ZpZm8gKmZpZm8pOwordm9pZCBkbWFfZmlmb19yZXNldChzdHJ1Y3QgZG1hX2ZpZm8gKmZpZm8pOworaW50IGRtYV9maWZvX2luKHN0cnVjdCBkbWFfZmlmbyAqZmlmbywgY29uc3Qgdm9pZCAqc3JjLCBpbnQgbik7CitpbnQgZG1hX2ZpZm9fb3V0X3BlbmQoc3RydWN0IGRtYV9maWZvICpmaWZvLCBzdHJ1Y3QgZG1hX3BlbmRpbmcgKnBlbmRlZCk7CitpbnQgZG1hX2ZpZm9fb3V0X2NvbXBsZXRlKHN0cnVjdCBkbWFfZmlmbyAqZmlmbywKKwkJCSAgc3RydWN0IGRtYV9wZW5kaW5nICpjb21wbGV0ZSk7CiAKIC8qIHJldHVybnMgdGhlICMgb2YgdXNlZCBieXRlcyBpbiB0aGUgZmlmbyAqLwogc3RhdGljIGlubGluZSBpbnQgZG1hX2ZpZm9fbGV2ZWwoc3RydWN0IGRtYV9maWZvICpmaWZvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z3c2VyaWFsL2Z3c2VyaWFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZndzZXJpYWwvZndzZXJpYWwuYwppbmRleCBiMjIxNDJlLi4zODQ3NThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZndzZXJpYWwvZndzZXJpYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZndzZXJpYWwvZndzZXJpYWwuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CkBAIC01MzAsNyArNTI2LDcgQEAKIAl3aGlsZSAobikgewogCQl0ID0gbWluKG4sIDE2KTsKIAkJYyA9IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZml4ZWRfZmxhZygmcG9ydC0+cG9ydCwgYnVmLAotCQkJCVRUWV9CUkVBSywgdCk7CisJCQkJCQkgICAgICBUVFlfQlJFQUssIHQpOwogCQluIC09IGM7CiAJCWJyayArPSBjOwogCQlpZiAoYyA8IHQpCkBAIC02MzgsOSArNjM0LDkgQEAKIAogCXN3aXRjaCAodGNvZGUpIHsKIAljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKLQkJaWYgKGFkZHIgIT0gcG9ydC0+cnhfaGFuZGxlci5vZmZzZXQgfHwgbGVuICE9IDQpCisJCWlmIChhZGRyICE9IHBvcnQtPnJ4X2hhbmRsZXIub2Zmc2V0IHx8IGxlbiAhPSA0KSB7CiAJCQlyY29kZSA9IFJDT0RFX0FERFJFU1NfRVJST1I7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJZnd0dHlfdXBkYXRlX3BvcnRfc3RhdHVzKHBvcnQsICoodW5zaWduZWQgKilkYXRhKTsKIAkJCXJjb2RlID0gUkNPREVfQ09NUExFVEU7CiAJCX0KQEAgLTc0MSw3ICs3MzcsNyBAQAogCS8qIHRyeSB0byB3cml0ZSBhcyBtYW55IGRtYSB0cmFuc2FjdGlvbnMgb3V0IGFzIHBvc3NpYmxlICovCiAJbiA9IC1FQUdBSU47CiAJd2hpbGUgKCF0dHktPnN0b3BwZWQgJiYgIXR0eS0+aHdfc3RvcHBlZCAmJgotCQkJIXRlc3RfYml0KFNUT1BfVFgsICZwb3J0LT5mbGFncykpIHsKKwkgICAgICAgIXRlc3RfYml0KFNUT1BfVFgsICZwb3J0LT5mbGFncykpIHsKIAkJdHhuID0ga21lbV9jYWNoZV9hbGxvYyhmd3R0eV90eG5fY2FjaGUsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXR4bikgewogCQkJbiA9IC1FTk9NRU07CkBAIC03NTYsMTEgKzc1MiwxMSBAQAogCiAJCWlmIChuIDwgMCkgewogCQkJa21lbV9jYWNoZV9mcmVlKGZ3dHR5X3R4bl9jYWNoZSwgdHhuKTsKLQkJCWlmIChuID09IC1FQUdBSU4pCisJCQlpZiAobiA9PSAtRUFHQUlOKSB7CiAJCQkJKytwb3J0LT5zdGF0cy50eF9zdGFsbDsKLQkJCWVsc2UgaWYgKG4gPT0gLUVOT0RBVEEpCisJCQl9IGVsc2UgaWYgKG4gPT0gLUVOT0RBVEEpIHsKIAkJCQlmd3R0eV9wcm9maWxlX2RhdGEocG9ydC0+c3RhdHMudHhucywgMCk7Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJKytwb3J0LT5zdGF0cy5maWZvX2VycnM7CiAJCQkJZnd0dHlfZXJyX3JhdGVsaW1pdGVkKHBvcnQsICJmaWZvIGVycjogJWRcbiIsCiAJCQkJCQkgICAgICBuKTsKQEAgLTg4NCw3ICs4ODAsNyBAQAogCWZvciAoaiA9IDA7IGogPCBudW1fcG9ydHM7ICsraSwgKytqKSB7CiAJCXBvcnRfdGFibGVfY29ycnVwdCB8PSBwb3J0X3RhYmxlW2ldICE9IHBvcnRzW2pdOwogCQlXQVJOX09OQ0UocG9ydF90YWJsZV9jb3JydXB0LCAicG9ydF90YWJsZVslZF06ICVwICE9IHBvcnRzWyVkXTogJXAiLAotCQkgICAgIGksIHBvcnRfdGFibGVbaV0sIGosIHBvcnRzW2pdKTsKKwkJCSAgaSwgcG9ydF90YWJsZVtpXSwgaiwgcG9ydHNbal0pOwogCiAJCXBvcnRfdGFibGVbaV0gPSBOVUxMOwogCX0KQEAgLTEyNTcsMTUgKzEyNTMsMTYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAodG1wLmlycSAhPSAwIHx8IHRtcC5wb3J0ICE9IDAgfHwgdG1wLmN1c3RvbV9kaXZpc29yICE9IDAgfHwKLQkJCXRtcC5iYXVkX2Jhc2UgIT0gNDAwMDAwMDAwKQorCSAgICB0bXAuYmF1ZF9iYXNlICE9IDQwMDAwMDAwMCkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewogCQlpZiAoKCh0bXAuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9CiAJCSAgICAgKHBvcnQtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJcG9ydC0+cG9ydC5jbG9zZV9kZWxheSA9IHRtcC5jbG9zZV9kZWxheSAqIEhaIC8gMTAwOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTMwOCw5ICsxMzA1LDkgQEAKIAlzcGluX2xvY2tfYmgoJnBvcnQtPmxvY2spOwogCWJhdWQgPSBzZXRfdGVybWlvcyhwb3J0LCB0dHkpOwogCi0JaWYgKChiYXVkID09IDApICYmIChvbGQtPmNfY2ZsYWcgJiBDQkFVRCkpCisJaWYgKChiYXVkID09IDApICYmIChvbGQtPmNfY2ZsYWcgJiBDQkFVRCkpIHsKIAkJcG9ydC0+bWN0cmwgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwotCWVsc2UgaWYgKChiYXVkICE9IDApICYmICEob2xkLT5jX2NmbGFnICYgQ0JBVUQpKSB7CisJfSBlbHNlIGlmICgoYmF1ZCAhPSAwKSAmJiAhKG9sZC0+Y19jZmxhZyAmIENCQVVEKSkgewogCQlpZiAoQ19DUlRTQ1RTKHR0eSkgfHwgIXRlc3RfYml0KFRUWV9USFJPVFRMRUQsICZ0dHktPmZsYWdzKSkKIAkJCXBvcnQtPm1jdHJsIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUzsKIAkJZWxzZQpAQCAtMTczMyw4ICsxNzMwLDkgQEAKIAkJICAgIHJjb2RlID09IFJDT0RFX0dFTkVSQVRJT04pIHsKIAkJCWZ3dHR5X2RiZygmcGVlci0+dW5pdCwgIm1nbXQgd3JpdGUgZXJyb3I6ICVkXG4iLCByY29kZSk7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQlicmVhazsKKwkJfQogCX0gd2hpbGUgKC0tdHJpZXMgPiAwKTsKIAlyZXR1cm4gcmNvZGU7CiB9CkBAIC0xODA5LDcgKzE4MDcsNyBAQAogCXBvcnQtPm1heF9wYXlsb2FkID0gbGlua19zcGVlZF90b19tYXhfcGF5bG9hZChTQ09ERV8xMDApOwogCWRtYV9maWZvX2NoYW5nZV90eF9saW1pdCgmcG9ydC0+dHhfZmlmbywgcG9ydC0+bWF4X3BheWxvYWQpOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKHBvcnQtPnBlZXIsIE5VTEwpOworCVJDVV9JTklUX1BPSU5URVIocG9ydC0+cGVlciwgTlVMTCk7CiAJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmxvY2spOwogCiAJaWYgKHBvcnQtPnBvcnQuY29uc29sZSAmJiBwb3J0LT5md2Nvbl9vcHMtPm5vdGlmeSAhPSBOVUxMKQpAQCAtMTgxOCw3ICsxODE2LDcgQEAKIAogc3RhdGljIHZvaWQgZndzZXJpYWxfcGx1Z190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgZnd0dHlfcGVlciAqcGVlciA9IChzdHJ1Y3QgZnd0dHlfcGVlciAqKSBkYXRhOworCXN0cnVjdCBmd3R0eV9wZWVyICpwZWVyID0gKHN0cnVjdCBmd3R0eV9wZWVyICopZGF0YTsKIAlzdHJ1Y3QgZnd0dHlfcG9ydCAqcG9ydDsKIAogCXNwaW5fbG9ja19iaCgmcGVlci0+bG9jayk7CkBAIC0yMjQyLDcgKzIyNDAsNyBAQAogCQlwb3J0LT5tYXhfcGF5bG9hZCA9IGxpbmtfc3BlZWRfdG9fbWF4X3BheWxvYWQoU0NPREVfMTAwKTsKIAkJZG1hX2ZpZm9faW5pdCgmcG9ydC0+dHhfZmlmbyk7CiAKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKHBvcnQtPnBlZXIsIE5VTEwpOworCQlSQ1VfSU5JVF9QT0lOVEVSKHBvcnQtPnBlZXIsIE5VTEwpOwogCQlzZXJpYWwtPnBvcnRzW2ldID0gcG9ydDsKIAogCQkvKiBnZXQgdW5pcXVlIGJ1cyBhZGRyIHJlZ2lvbiBmb3IgcG9ydCdzIHN0YXR1cyAmIHJlY3YgZmlmbyAqLwpAQCAtMjc0NCw5ICsyNzQyLDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZXU0NfVklSVF9DQUJMRV9VTlBMVUdfUlNQOgotCQlpZiAocGVlci0+c3RhdGUgIT0gRldQU19VTlBMVUdfUEVORElORykKKwkJaWYgKHBlZXItPnN0YXRlICE9IEZXUFNfVU5QTFVHX1BFTkRJTkcpIHsKIAkJCXJjb2RlID0gUkNPREVfQ09ORkxJQ1RfRVJST1I7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJaWYgKGJlMTZfdG9fY3B1KHBrdC0+aGRyLmNvZGUpICYgRldTQ19SU1BfTkFDSykKIAkJCQlmd3R0eV9ub3RpY2UoJnBlZXItPnVuaXQsICJOQUNLIHVucGx1Zz9cbiIpOwogCQkJcG9ydCA9IHBlZXJfcmV2ZXJ0X3N0YXRlKHBlZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L1RPRE8KaW5kZXggNWFiMjdmYi4uNjJkMGNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9UT0RPCkBAIC0xLDMgKzEsMiBAQAogVE9ETzoKLS0gUmVwbGFjZSBrZXJuZWxfdGhyZWFkIHdpdGgga3RocmVhZCBpbiBnZG1fdXNiLmMKIC0gQ2xlYW4gdXAgY29kaW5nIHN0eWxlIHRvIG1lZXQga2VybmVsIHN0YW5kYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3Fvcy5jIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3Fvcy5jCmluZGV4IDUwZDQzYWQuLmRmNmYwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV9xb3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fcW9zLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJoY2kuaCIKICNpbmNsdWRlICJnZG1fcW9zLmgiCiAKLSNkZWZpbmUgQjJIKHgpCQlfX2JlMTZfdG9fY3B1KHgpCisjZGVmaW5lIEIySCh4KQlfX2JlMTZfdG9fY3B1KHgpCiAKICNkZWZpbmUgTUFYX0ZSRUVfTElTVF9DTlQJCTMyCiBzdGF0aWMgc3RydWN0IHsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcW9zX2ZyZWVfbGlzdC5sb2NrLCBmbGFncyk7CiAJaWYgKHFvc19mcmVlX2xpc3QuY250KSB7CiAJCWVudHJ5ID0gbGlzdF9lbnRyeShxb3NfZnJlZV9saXN0LmhlYWQucHJldiwgc3RydWN0IHFvc19lbnRyeV9zLAotCQkJCQlsaXN0KTsKKwkJCQkgICBsaXN0KTsKIAkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKIAkJcW9zX2ZyZWVfbGlzdC5jbnQtLTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcW9zX2ZyZWVfbGlzdC5sb2NrLCBmbGFncyk7CkBAIC01NiwxMyArNTYsMTMgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcW9zX2ZyZWVfbGlzdC5sb2NrLCBmbGFncyk7CiAKLQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxb3NfZW50cnlfcyksIEdGUF9BVE9NSUMpOworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CiAJcmV0dXJuIGVudHJ5OwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX3Fvc19lbnRyeSh2b2lkICplbnRyeSkKIHsKLQlzdHJ1Y3QgcW9zX2VudHJ5X3MgKnFlbnRyeSA9IChzdHJ1Y3QgcW9zX2VudHJ5X3MgKikgZW50cnk7CisJc3RydWN0IHFvc19lbnRyeV9zICpxZW50cnkgPSAoc3RydWN0IHFvc19lbnRyeV9zICopZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxb3NfZnJlZV9saXN0LmxvY2ssIGZsYWdzKTsKQEAgLTE0MiwyNCArMTQyLDI0IEBACiAJZnJlZV9xb3NfZW50cnlfbGlzdCgmZnJlZV9saXN0KTsKIH0KIAotc3RhdGljIHUzMiBjaGtfaXB2NF9ydWxlKHN0cnVjdCBnZG1fd2ltYXhfY3NyX3MgKmNzciwgdTggKlN0cmVhbSwgdTggKnBvcnQpCitzdGF0aWMgdTMyIGNoa19pcHY0X3J1bGUoc3RydWN0IGdkbV93aW1heF9jc3JfcyAqY3NyLCB1OCAqc3RyZWFtLCB1OCAqcG9ydCkKIHsKIAlpbnQgaTsKIAogCWlmIChjc3ItPmNsYXNzaWZpZXJfcnVsZV9lbiZJUFRZUEVPRlNFUlZJQ0UpIHsKLQkJaWYgKCgoU3RyZWFtWzFdICYgY3NyLT5pcDJzX21hc2spIDwgY3NyLT5pcDJzX2xvKSB8fAotCQkoKFN0cmVhbVsxXSAmIGNzci0+aXAyc19tYXNrKSA+IGNzci0+aXAyc19oaSkpCisJCWlmICgoKHN0cmVhbVsxXSAmIGNzci0+aXAyc19tYXNrKSA8IGNzci0+aXAyc19sbykgfHwKKwkJICAgICgoc3RyZWFtWzFdICYgY3NyLT5pcDJzX21hc2spID4gY3NyLT5pcDJzX2hpKSkKIAkJCXJldHVybiAxOwogCX0KIAogCWlmIChjc3ItPmNsYXNzaWZpZXJfcnVsZV9lbiZQUk9UT0NPTCkgewotCQlpZiAoU3RyZWFtWzldICE9IGNzci0+cHJvdG9jb2wpCisJCWlmIChzdHJlYW1bOV0gIT0gY3NyLT5wcm90b2NvbCkKIAkJCXJldHVybiAxOwogCX0KIAogCWlmIChjc3ItPmNsYXNzaWZpZXJfcnVsZV9lbiZJUE1BU0tFRFNSQ0FERFJFU1MpIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJaWYgKChTdHJlYW1bMTIgKyBpXSAmIGNzci0+aXBzcmNfYWRkcm1hc2tbaV0pICE9CisJCQlpZiAoKHN0cmVhbVsxMiArIGldICYgY3NyLT5pcHNyY19hZGRybWFza1tpXSkgIT0KIAkJCShjc3ItPmlwc3JjX2FkZHJbaV0gJiBjc3ItPmlwc3JjX2FkZHJtYXNrW2ldKSkKIAkJCQlyZXR1cm4gMTsKIAkJfQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAlpZiAoY3NyLT5jbGFzc2lmaWVyX3J1bGVfZW4mSVBNQVNLRUREU1RBRERSRVNTKSB7CiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCWlmICgoU3RyZWFtWzE2ICsgaV0gJiBjc3ItPmlwZHN0X2FkZHJtYXNrW2ldKSAhPQorCQkJaWYgKChzdHJlYW1bMTYgKyBpXSAmIGNzci0+aXBkc3RfYWRkcm1hc2tbaV0pICE9CiAJCQkoY3NyLT5pcGRzdF9hZGRyW2ldICYgY3NyLT5pcGRzdF9hZGRybWFza1tpXSkpCiAJCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTE5MCwyNSArMTkwLDI0IEBACiAKIHN0YXRpYyB1MzIgZ2V0X3Fvc19pbmRleChzdHJ1Y3QgbmljICpuaWMsIHU4ICppcGgsIHU4ICp0Y3B1ZHBoKQogewotCXUzMglJUF9WZXIsIEhlYWRlcl9MZW4sIGk7CisJdTMyIElQX3ZlciwgaTsKIAlzdHJ1Y3QgcW9zX2NiX3MgKnFjYiA9ICZuaWMtPnFvczsKIAogCWlmIChpcGggPT0gTlVMTCB8fCB0Y3B1ZHBoID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCUlQX1ZlciA9IChpcGhbMF0+PjQpJjB4ZjsKLQlIZWFkZXJfTGVuID0gaXBoWzBdJjB4ZjsKKwlJUF92ZXIgPSAoaXBoWzBdPj40KSYweGY7CiAKLQlpZiAoSVBfVmVyID09IDQpIHsKLQkJZm9yIChpID0gMDsgaSA8IFFPU19NQVg7IGkrKykgewotCQkJaWYgKHFjYi0+Y3NyW2ldLmVuYWJsZWQpIHsKLQkJCQlpZiAocWNiLT5jc3JbaV0uY2xhc3NpZmllcl9ydWxlX2VuKSB7Ci0JCQkJCWlmIChjaGtfaXB2NF9ydWxlKCZxY2ItPmNzcltpXSwgaXBoLAotCQkJCQl0Y3B1ZHBoKSA9PSAwKQotCQkJCQkJcmV0dXJuIGk7Ci0JCQkJfQotCQkJfQotCQl9CisJaWYgKElQX3ZlciAhPSA0KQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgUU9TX01BWDsgaSsrKSB7CisJCWlmICghcWNiLT5jc3JbaV0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXFjYi0+Y3NyW2ldLmNsYXNzaWZpZXJfcnVsZV9lbikKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hrX2lwdjRfcnVsZSgmcWNiLT5jc3JbaV0sIGlwaCwgdGNwdWRwaCkgPT0gMCkKKwkJCXJldHVybiBpOwogCX0KIAogCXJldHVybiAtMTsKQEAgLTIyMywyMiArMjIyLDIxIEBACiAJSU5JVF9MSVNUX0hFQUQoaGVhZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUU9TX01BWDsgaSsrKSB7Ci0JCWlmIChxY2ItPmNzcltpXS5lbmFibGVkKSB7Ci0JCQlpZiAocWNiLT5jc3JbaV0ucW9zX2J1Zl9jb3VudCA8IHFjYi0+cW9zX2xpbWl0X3NpemUpIHsKLQkJCQlpZiAoIWxpc3RfZW1wdHkoJnFjYi0+cW9zX2xpc3RbaV0pKSB7Ci0JCQkJCWVudHJ5ID0gbGlzdF9lbnRyeSgKLQkJCQkJcWNiLT5xb3NfbGlzdFtpXS5wcmV2LAotCQkJCQlzdHJ1Y3QgcW9zX2VudHJ5X3MsIGxpc3QpOwotCQkJCQlsaXN0X21vdmVfdGFpbCgmZW50cnktPmxpc3QsIGhlYWQpOwotCQkJCQlxY2ItPmNzcltpXS5xb3NfYnVmX2NvdW50Kys7CisJCWlmICghcWNiLT5jc3JbaV0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAocWNiLT5jc3JbaV0ucW9zX2J1Zl9jb3VudCA+PSBxY2ItPnFvc19saW1pdF9zaXplKQorCQkJY29udGludWU7CisJCWlmIChsaXN0X2VtcHR5KCZxY2ItPnFvc19saXN0W2ldKSkKKwkJCWNvbnRpbnVlOwogCi0JCQkJCWlmICghbGlzdF9lbXB0eSgmcWNiLT5xb3NfbGlzdFtpXSkpCi0JCQkJCQluZXRkZXZfd2FybihuaWMtPm5ldGRldiwKLQkJCQkJCQkgICAgIkluZGV4KCVkKSBpcyBwaWxlZCEhXG4iLAotCQkJCQkJCSAgICBpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJZW50cnkgPSBsaXN0X2VudHJ5KHFjYi0+cW9zX2xpc3RbaV0ucHJldiwgc3RydWN0IHFvc19lbnRyeV9zLAorCQkJCSAgIGxpc3QpOworCisJCWxpc3RfbW92ZV90YWlsKCZlbnRyeS0+bGlzdCwgaGVhZCk7CisJCXFjYi0+Y3NyW2ldLnFvc19idWZfY291bnQrKzsKKworCQlpZiAoIWxpc3RfZW1wdHkoJnFjYi0+cW9zX2xpc3RbaV0pKQorCQkJbmV0ZGV2X3dhcm4obmljLT5uZXRkZXYsICJJbmRleCglZCkgaXMgcGlsZWQhIVxuIiwgaSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNjEsMTQgKzI1OSwxNCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgcW9zX2NiX3MgKnFjYiA9ICZuaWMtPnFvczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBldGhoZHIgKmV0aGggPSAoc3RydWN0IGV0aGhkciAqKSAoc2tiLT5kYXRhICsgSENJX0hFQURFUl9TSVpFKTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgKChjaGFyICopIGV0aGggKyBFVEhfSExFTik7CisJc3RydWN0IGV0aGhkciAqZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIEhDSV9IRUFERVJfU0laRSk7CisJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKChjaGFyICopZXRoaCArIEVUSF9ITEVOKTsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoOwogCXN0cnVjdCBxb3NfZW50cnlfcyAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgc2VuZF9saXN0OwogCWludCByZXQgPSAwOwogCi0JdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopIGlwaCArIGlwaC0+aWhsKjQ7CisJdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopaXBoICsgaXBoLT5paGwqNDsKIAogCWlmIChCMkgoZXRoaC0+aF9wcm90bykgPT0gRVRIX1BfSVApIHsKIAkJaWYgKHFjYi0+cW9zX2xpc3RfY250ICYmICFxb3NfZnJlZV9saXN0LmNudCkgewpAQCAtMjgxLDcgKzI3OSw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnFjYi0+cW9zX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHFjYi0+cW9zX2xpc3RfY250KSB7Ci0JCQlpbmRleCA9IGdldF9xb3NfaW5kZXgobmljLCAodTggKilpcGgsICh1OCAqKSB0Y3BoKTsKKwkJCWluZGV4ID0gZ2V0X3Fvc19pbmRleChuaWMsICh1OCAqKWlwaCwgKHU4ICopdGNwaCk7CiAJCQlpZiAoaW5kZXggPT0gLTEpCiAJCQkJaW5kZXggPSBxY2ItPnFvc19udWxsX2lkeDsKIApAQCAtMzM2LDE2ICszMzQsMTYgQEAKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuaWNfcHRyOwogCXUzMiBpLCBTRklELCBpbmRleCwgcG9zOwotCXU4IHN1YkNtZEV2dDsKKwl1OCBzdWJfY21kX2V2dDsKIAlzdHJ1Y3QgcW9zX2NiX3MgKnFjYiA9ICZuaWMtPnFvczsKIAlzdHJ1Y3QgcW9zX2VudHJ5X3MgKmVudHJ5LCAqbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNlbmRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3ViQ21kRXZ0ID0gKHU4KWJ1Zls0XTsKKwlzdWJfY21kX2V2dCA9ICh1OClidWZbNF07CiAKLQlpZiAoc3ViQ21kRXZ0ID09IFFPU19SRVBPUlQpIHsKKwlpZiAoc3ViX2NtZF9ldnQgPT0gUU9TX1JFUE9SVCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcWNiLT5xb3NfbG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSAwOyBpIDwgcWNiLT5xb3NfbGlzdF9jbnQ7IGkrKykgewogCQkJU0ZJRCA9ICgoYnVmWyhpKjUpKzZdPDwyNCkmMHhmZjAwMDAwMCk7CkBAIC0zNjcsNyArMzY1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIHN1YkNtZEV2dCA9PSBRT1NfQUREIHx8IHN1YkNtZEV2dCA9PSBRT1NfQ0hBTkdfREVMICovCisJLyogc3ViX2NtZF9ldnQgPT0gUU9TX0FERCB8fCBzdWJfY21kX2V2dCA9PSBRT1NfQ0hBTkdfREVMICovCiAJcG9zID0gNjsKIAlTRklEID0gKChidWZbcG9zKytdPDwyNCkmMHhmZjAwMDAwMCk7CiAJU0ZJRCArPSAoKGJ1Zltwb3MrK108PDE2KSYweGZmMDAwMCk7CkBAIC0zNzcsMTIgKzM3NSwxMiBAQAogCWluZGV4ID0gZ2V0X2NzcihxY2IsIFNGSUQsIDEpOwogCWlmIChpbmRleCA9PSAtMSkgewogCQluZXRkZXZfZXJyKG5pYy0+bmV0ZGV2LAotCQkJICAgIlFvUyBFUlJPUjogY3NyIFVwZGF0ZSBFcnJvciAvIFdyb25nIGluZGV4ICglZCkgXG4iLAorCQkJICAgIlFvUyBFUlJPUjogY3NyIFVwZGF0ZSBFcnJvciAvIFdyb25nIGluZGV4ICglZClcbiIsCiAJCQkgICBpbmRleCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoc3ViQ21kRXZ0ID09IFFPU19BREQpIHsKKwlpZiAoc3ViX2NtZF9ldnQgPT0gUU9TX0FERCkgewogCQluZXRkZXZfZGJnKG5pYy0+bmV0ZGV2LCAiUU9TX0FERCBTRklEID0gMHgleCwgaW5kZXg9JWRcbiIsCiAJCQkgICBTRklELCBpbmRleCk7CiAKQEAgLTQyMyw3ICs0MjEsNyBAQAogCiAJCXFjYi0+cW9zX2xpbWl0X3NpemUgPSAyNTQvcWNiLT5xb3NfbGlzdF9jbnQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFjYi0+cW9zX2xvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKHN1YkNtZEV2dCA9PSBRT1NfQ0hBTkdFX0RFTCkgeworCX0gZWxzZSBpZiAoc3ViX2NtZF9ldnQgPT0gUU9TX0NIQU5HRV9ERUwpIHsKIAkJbmV0ZGV2X2RiZyhuaWMtPm5ldGRldiwgIlFPU19DSEFOR0VfREVMIFNGSUQgPSAweCV4LCBpbmRleD0lZFxuIiwKIAkJCSAgIFNGSUQsIGluZGV4KTsKIApAQCAtNDM1LDcgKzQzMyw3IEBACiAJCXFjYi0+cW9zX2xpbWl0X3NpemUgPSAyNTQvcWNiLT5xb3NfbGlzdF9jbnQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmcWNiLT5xb3NfbGlzdFtpbmRleF0sCi0JCQkJCWxpc3QpIHsKKwkJCQkJIGxpc3QpIHsKIAkJCWxpc3RfbW92ZV90YWlsKCZlbnRyeS0+bGlzdCwgJmZyZWVfbGlzdCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWNiLT5xb3NfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3Fvcy5oIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3Fvcy5oCmluZGV4IDhmMTgxMTkuLjY1NDNjZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV9xb3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fcW9zLmgKQEAgLTM0LDIzICszNCw2IEBACiAjZGVmaW5lCUlFRUU4MDJfMVFWTEFOSUQJCTB4MTAKIAogc3RydWN0IGdkbV93aW1heF9jc3JfcyB7Ci0JLyoJdW5pb257Ci0JCVUxNiBhbGw7Ci0JCXN0cnVjdCBfQ1NfQ0xBU1NJRklFUl9SVUxFX0VOQUJMRXsKLQkJCUlQVHlwZU9mU2VydmljZToxLAotCQkJUHJvdG9jb2w6MSwKLQkJCUlQTWFza2VkU3JjQWRkcmVzczoxLAotCQkJSVBNYXNrZWREc3RBZGRyZXNzOjEsCi0JCQlQcm90b2NvbFNyY1BvcnRSYW5nZToxLAotCQkJUHJvdG9jb2xEc3RQb3J0UmFuZ2U6MSwKLQkJCURzdE1hY0FkZHI6MSwKLQkJCVNyY01hY0FkZHI6MSwKLQkJCUV0aGVydHlwZToxLAotCQkJSUVFRTgwMl8xRFVzZXJQcmlvcml0eToxLAotCQkJSUVFRTgwMl8xUVZMQU5JRDoxLAotCQkJUmVzZXJ2ZWQ6NTsKLQkJfSBmaWVsZHM7Ci0JfSAqLwogCUJPT0xFQU4JCWVuYWJsZWQ7CiAJdTMyCQlTRklEOwogCXU4CQlxb3NfYnVmX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3NkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV9zZGlvLmMKaW5kZXggYzI0NjUzNy4uNzM5OGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3NkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fc2Rpby5jCkBAIC0zMSwxMSArMzEsMTEgQEAKICNkZWZpbmUgTUFYX05SX1JYX0JVRgk0CiAKICNkZWZpbmUgU0RVX1RYX0JVRl9TSVpFCTIwNDgKLSNkZWZpbmUgVFhfQlVGX1NJWkUJCTIwNDgKKyNkZWZpbmUgVFhfQlVGX1NJWkUJMjA0OAogI2RlZmluZSBUWF9DSFVOS19TSVpFCSgyMDQ4IC0gVFlQRV9BX0hFQURFUl9TSVpFKQotI2RlZmluZSBSWF9CVUZfU0laRQkJKDI1KjEwMjQpCisjZGVmaW5lIFJYX0JVRl9TSVpFCSgyNSoxMDI0KQogCi0jZGVmaW5lIFRYX0haCTIwMDAKKyNkZWZpbmUgVFhfSFoJCTIwMDAKICNkZWZpbmUgVFhfSU5URVJWQUwJKDEwMDAwMDAvVFhfSFopCiAKIHN0YXRpYyBpbnQgaW5pdF9zZGlvKHN0cnVjdCBzZGlvd21fZGV2ICpzZGV2KTsKQEAgLTEyNywxMCArMTI3LDEwIEBACiBzdGF0aWMgaW50IGluaXRfc2RpbyhzdHJ1Y3Qgc2Rpb3dtX2RldiAqc2RldikKIHsKIAlpbnQgcmV0ID0gMCwgaTsKLQlzdHJ1Y3QgdHhfY3h0CSp0eCA9ICZzZGV2LT50eDsKLQlzdHJ1Y3QgcnhfY3h0CSpyeCA9ICZzZGV2LT5yeDsKLQlzdHJ1Y3Qgc2Rpb190eAkqdDsKLQlzdHJ1Y3Qgc2Rpb19yeAkqcjsKKwlzdHJ1Y3QgdHhfY3h0ICp0eCA9ICZzZGV2LT50eDsKKwlzdHJ1Y3QgcnhfY3h0ICpyeCA9ICZzZGV2LT5yeDsKKwlzdHJ1Y3Qgc2Rpb190eCAqdDsKKwlzdHJ1Y3Qgc2Rpb19yeCAqcjsKIAogCUlOSVRfTElTVF9IRUFEKCZ0eC0+ZnJlZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmdHgtPnNkdV9saXN0KTsKQEAgLTMxMyw3ICszMTMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzZW5kX2hjaShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBzdHJ1Y3QgdHhfY3h0ICp0eCwKLQkJCXN0cnVjdCBzZGlvX3R4ICp0KQorCQkgICAgIHN0cnVjdCBzZGlvX3R4ICp0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM4MCw3ICszODAsNyBAQAogfQogCiBzdGF0aWMgaW50IGdkbV9zZGlvX3NlbmQodm9pZCAqcHJpdl9kZXYsIHZvaWQgKmRhdGEsIGludCBsZW4sCi0JCQl2b2lkICgqY2IpKHZvaWQgKmRhdGEpLCB2b2lkICpjYl9kYXRhKQorCQkJIHZvaWQgKCpjYikodm9pZCAqZGF0YSksIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNkaW93bV9kZXYgKnNkZXYgPSBwcml2X2RldjsKIAlzdHJ1Y3QgdHhfY3h0ICp0eCA9ICZzZGV2LT50eDsKQEAgLTUxMCw2ICs1MTAsNyBAQAogCiAJaWYgKGhkclszXSA9PSAxKSB7CS8qIEFjayAqLwogCQl1MzIgKmFja19zZXEgPSAodTMyICopJmhkcls0XTsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHgtPmxvY2ssIGZsYWdzKTsKIAkJdHgtPmNhbl9zZW5kID0gMTsKIApAQCAtNTIxLDcgKzUyMiw3IEBACiAJfQogCiAJbWVtY3B5KHJ4LT5yeF9idWYsIGhkciArIFRZUEVfQV9IRUFERVJfU0laRSwKLQkJCVRZUEVfQV9MT09LQUhFQURfU0laRSAtIFRZUEVfQV9IRUFERVJfU0laRSk7CisJICAgICAgIFRZUEVfQV9MT09LQUhFQURfU0laRSAtIFRZUEVfQV9IRUFERVJfU0laRSk7CiAKIAlidWYgPSByeC0+cnhfYnVmICsgVFlQRV9BX0xPT0tBSEVBRF9TSVpFIC0gVFlQRV9BX0hFQURFUl9TSVpFOwogCXJlbWFpbiA9IGxlbiAtIFRZUEVfQV9MT09LQUhFQURfU0laRSArIFRZUEVfQV9IRUFERVJfU0laRTsKQEAgLTU3Nyw4ICs1NzgsOCBAQAogfQogCiBzdGF0aWMgaW50IGdkbV9zZGlvX3JlY2VpdmUodm9pZCAqcHJpdl9kZXYsCi0JCQkJdm9pZCAoKmNiKSh2b2lkICpjYl9kYXRhLCB2b2lkICpkYXRhLCBpbnQgbGVuKSwKLQkJCQl2b2lkICpjYl9kYXRhKQorCQkJICAgIHZvaWQgKCpjYikodm9pZCAqY2JfZGF0YSwgdm9pZCAqZGF0YSwgaW50IGxlbiksCisJCQkgICAgdm9pZCAqY2JfZGF0YSkKIHsKIAlzdHJ1Y3Qgc2Rpb3dtX2RldiAqc2RldiA9IHByaXZfZGV2OwogCXN0cnVjdCByeF9jeHQgKnJ4ID0gJnNkZXYtPnJ4OwpAQCAtNjAyLDcgKzYwMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc2Rpb193aW1heF9wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLAotCQkJCWNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpCisJCQkgICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBwaHlfZGV2ICpwaHlfZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV9zZGlvLmggYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fc2Rpby5oCmluZGV4IDIxNmU5OGYuLjBjMGUyY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV9zZGlvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3NkaW8uaApAQCAtMjIsMTAgKzIyLDggQEAKIHN0cnVjdCBzZGlvX3R4IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHR4X2N4dAkJKnR4X2N4dDsKLQotCXU4CSpidWY7Ci0JaW50CWxlbjsKLQorCXU4CQkJKmJ1ZjsKKwlpbnQJCQlsZW47CiAJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjYl9kYXRhKTsKIAl2b2lkICpjYl9kYXRhOwogfTsKQEAgLTM1LDE4ICszMywxNSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJc2R1X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAloY2lfbGlzdDsKIAlzdHJ1Y3QgdGltZXZhbAkJc2R1X3N0YW1wOwotCi0JdTgJKnNkdV9idWY7Ci0KLQlzcGlubG9ja190CQkJbG9jazsKLQlpbnQJY2FuX3NlbmQ7Ci0JaW50IHN0b3Bfc2R1X3R4OworCXU4CQkJKnNkdV9idWY7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlpbnQJCQljYW5fc2VuZDsKKwlpbnQJCQlzdG9wX3NkdV90eDsKIH07CiAKIHN0cnVjdCBzZGlvX3J4IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHJ4X2N4dAkJKnJ4X2N4dDsKLQogCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqY2JfZGF0YSwgdm9pZCAqZGF0YSwgaW50IGxlbik7CiAJdm9pZCAqY2JfZGF0YTsKIH07CkBAIC01NCwxOCArNDksMTQgQEAKIHN0cnVjdCByeF9jeHQgewogCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJcmVxX2xpc3Q7Ci0KLQl1OAkJKnJ4X2J1ZjsKLQotCXNwaW5sb2NrX3QJCQlsb2NrOworCXU4CQkJKnJ4X2J1ZjsKKwlzcGlubG9ja190CQlsb2NrOwogfTsKIAogc3RydWN0IHNkaW93bV9kZXYgewogCXN0cnVjdCBzZGlvX2Z1bmMJKmZ1bmM7Ci0KLQlzdHJ1Y3QgdHhfY3h0CXR4OwotCXN0cnVjdCByeF9jeHQJcng7Ci0KKwlzdHJ1Y3QgdHhfY3h0CQl0eDsKKwlzdHJ1Y3QgcnhfY3h0CQlyeDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd3M7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fdXNiLmMKaW5kZXggMjA1MzlkOC4uNzhkNjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV91c2IuYwpAQCAtMjcsNiArMjcsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogI2RlZmluZSBUWF9CVUZfU0laRQkJMjA0OAorCiAjaWYgZGVmaW5lZChDT05GSUdfV0lNQVhfR0RNNzJYWF9XSU1BWDIpCiAjZGVmaW5lIFJYX0JVRl9TSVpFCQkoMTI4KjEwMjQpCS8qIEZvciBwYWNrZXQgYWdncmVnYXRpb24gKi8KICNlbHNlCkBAIC0xNjYsMTAgKzE2NywxMCBAQAogc3RhdGljIGludCBpbml0X3VzYihzdHJ1Y3QgdXNid21fZGV2ICp1ZGV2KQogewogCWludCByZXQgPSAwLCBpOwotCXN0cnVjdCB0eF9jeHQJKnR4ID0gJnVkZXYtPnR4OwotCXN0cnVjdCByeF9jeHQJKnJ4ID0gJnVkZXYtPnJ4OwotCXN0cnVjdCB1c2JfdHgJKnQ7Ci0Jc3RydWN0IHVzYl9yeAkqcjsKKwlzdHJ1Y3QgdHhfY3h0ICp0eCA9ICZ1ZGV2LT50eDsKKwlzdHJ1Y3QgcnhfY3h0ICpyeCA9ICZ1ZGV2LT5yeDsKKwlzdHJ1Y3QgdXNiX3R4ICp0OworCXN0cnVjdCB1c2JfcnggKnI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUlOSVRfTElTVF9IRUFEKCZ0eC0+ZnJlZV9saXN0KTsKQEAgLTIxNSwxMCArMjE2LDEwIEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfdXNiKHN0cnVjdCB1c2J3bV9kZXYgKnVkZXYpCiB7Ci0Jc3RydWN0IHR4X2N4dAkqdHggPSAmdWRldi0+dHg7Ci0Jc3RydWN0IHJ4X2N4dAkqcnggPSAmdWRldi0+cng7Ci0Jc3RydWN0IHVzYl90eAkqdCwgKnRfbmV4dDsKLQlzdHJ1Y3QgdXNiX3J4CSpyLCAqcl9uZXh0OworCXN0cnVjdCB0eF9jeHQgKnR4ID0gJnVkZXYtPnR4OworCXN0cnVjdCByeF9jeHQgKnJ4ID0gJnVkZXYtPnJ4OworCXN0cnVjdCB1c2JfdHggKnQsICp0X25leHQ7CisJc3RydWN0IHVzYl9yeCAqciwgKnJfbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnR4LT5sb2NrLCBmbGFncyk7CkBAIC0zNDQsMTYgKzM0NSwxMSBAQAogCWlmICgobGVuICUgNTEyKSA9PSAwKQogCQlsZW4rKzsKIAotCXVzYl9maWxsX2J1bGtfdXJiKHQtPnVyYiwKLQkJCXVzYmRldiwKLQkJCXVzYl9zbmRidWxrcGlwZSh1c2JkZXYsIDEpLAotCQkJdC0+YnVmLAotCQkJbGVuICsgcGFkZGluZywKLQkJCWdkbV91c2Jfc2VuZF9jb21wbGV0ZSwKLQkJCXQpOworCXVzYl9maWxsX2J1bGtfdXJiKHQtPnVyYiwgdXNiZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiZGV2LCAxKSwgdC0+YnVmLAorCQkJICBsZW4gKyBwYWRkaW5nLCBnZG1fdXNiX3NlbmRfY29tcGxldGUsIHQpOwogCi0JcHJpbnRfaGV4X2R1bXBfZGVidWcoInVzYl9zZW5kOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKLQkJCSAgICAgdC0+YnVmLCBsZW4gKyBwYWRkaW5nLCBmYWxzZSk7CisJcHJpbnRfaGV4X2R1bXBfZGVidWcoInVzYl9zZW5kOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwgdC0+YnVmLAorCQkJICAgICBsZW4gKyBwYWRkaW5nLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX1dJTUFYX0dETTcyWFhfVVNCX1BNCiAJaWYgKHVzYmRldi0+c3RhdGUgJiBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CiAJCWxpc3RfYWRkX3RhaWwoJnQtPnBfbGlzdCwgJnR4LT5wZW5kaW5nX2xpc3QpOwpAQCAtNDcwLDggKzQ2Niw4IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2RtX3VzYl9yZWNlaXZlKHZvaWQgKnByaXZfZGV2LAotCQkJdm9pZCAoKmNiKSh2b2lkICpjYl9kYXRhLCB2b2lkICpkYXRhLCBpbnQgbGVuKSwKLQkJCXZvaWQgKmNiX2RhdGEpCisJCQkgICB2b2lkICgqY2IpKHZvaWQgKmNiX2RhdGEsIHZvaWQgKmRhdGEsIGludCBsZW4pLAorCQkJICAgdm9pZCAqY2JfZGF0YSkKIHsKIAlzdHJ1Y3QgdXNid21fZGV2ICp1ZGV2ID0gcHJpdl9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHVkZXYtPnVzYmRldjsKQEAgLTQ5NCwxMyArNDkwLDggQEAKIAlyLT5jYWxsYmFjayA9IGNiOwogCXItPmNiX2RhdGEgPSBjYl9kYXRhOwogCi0JdXNiX2ZpbGxfYnVsa191cmIoci0+dXJiLAotCQkJdXNiZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgMHg4MiksCi0JCQlyLT5idWYsCi0JCQlSWF9CVUZfU0laRSwKLQkJCWdkbV91c2JfcmN2X2NvbXBsZXRlLAotCQkJcik7CisJdXNiX2ZpbGxfYnVsa191cmIoci0+dXJiLCB1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIDB4ODIpLCByLT5idWYsCisJCQkgIFJYX0JVRl9TSVpFLCBnZG1fdXNiX3Jjdl9jb21wbGV0ZSwgcik7CiAKIAlyZXR1cm4gdXNiX3N1Ym1pdF91cmIoci0+dXJiLCBHRlBfQVRPTUlDKTsKIH0KQEAgLTUxOCw4ICs1MDksOCBAQAogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodWRldi0+aW50Zik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHgtPmxvY2ssIGZsYWdzKTsKLQlpZiAoISh1ZGV2LT51c2JkZXYtPnN0YXRlICYgVVNCX1NUQVRFX1NVU1BFTkRFRCkKLQkJJiYgKCFsaXN0X2VtcHR5KCZ0eC0+aGNpX2xpc3QpIHx8ICFsaXN0X2VtcHR5KCZ0eC0+c2R1X2xpc3QpKSkgeworCWlmICghKHVkZXYtPnVzYmRldi0+c3RhdGUgJiBVU0JfU1RBVEVfU1VTUEVOREVEKSAmJgorCSAgICAoIWxpc3RfZW1wdHkoJnR4LT5oY2lfbGlzdCkgfHwgIWxpc3RfZW1wdHkoJnR4LT5zZHVfbGlzdCkpKSB7CiAJCXN0cnVjdCB1c2JfdHggKnQsICp0ZW1wOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0LCB0ZW1wLCAmdHgtPnBlbmRpbmdfbGlzdCwgcF9saXN0KSB7CkBAIC01MzcsNyArNTI4LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfV0lNQVhfR0RNNzJYWF9VU0JfUE0gKi8KIAogc3RhdGljIGludCBnZG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHJldCA9IDA7CiAJdTggYkNvbmZpZ3VyYXRpb25WYWx1ZTsKQEAgLTU2Nyw3ICs1NTgsNyBAQAogCiAJLyogU3VwcG9ydCBmb3IgRUVQUk9NIGJvb3Rsb2FkZXIgKi8KIAlpZiAoYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBET1dOTE9BRF9DT05GX1ZBTFVFIHx8Ci0JCWlkUHJvZHVjdCAmIEJfRE9XTkxPQUQpIHsKKwkgICAgaWRQcm9kdWN0ICYgQl9ET1dOTE9BRCkgewogCQlyZXQgPSB1c2JfYm9vdCh1c2JkZXYsIGJjZERldmljZSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYzOSw4ICs2MzAsOSBAQAogCWlkUHJvZHVjdCA9IEwySCh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKIAogCWlmIChpZFByb2R1Y3QgIT0gRU1FUkdFTkNZX1BJRCAmJgotCQkJYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSBET1dOTE9BRF9DT05GX1ZBTFVFICYmCi0JCQkoaWRQcm9kdWN0ICYgQl9ET1dOTE9BRCkgPT0gMCkgeworCSAgICBiQ29uZmlndXJhdGlvblZhbHVlICE9IERPV05MT0FEX0NPTkZfVkFMVUUgJiYKKwkgICAgKGlkUHJvZHVjdCAmIEJfRE9XTkxPQUQpID09IDApIHsKKwogCQl1ZGV2ID0gcGh5X2Rldi0+cHJpdl9kZXY7CiAJCXVkZXYtPnVzYmRldiA9IE5VTEw7CiAKQEAgLTczMCw3ICs3MjIsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma19sb2NrLCBmbGFnczIpOwogCiAJCQlleHBpcmUgPSBqaWZmaWVzICsgS19XQUlUX1RJTUU7Ci0JCQl3aGlsZSAoamlmZmllcyA8IGV4cGlyZSkKKwkJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBleHBpcmUpKQogCQkJCXNjaGVkdWxlX3RpbWVvdXQoS19XQUlUX1RJTUUpOwogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcngtPmxvY2ssIGZsYWdzKTsKQEAgLTc0Myw3ICs3MzUsNyBAQAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnR4LT5sb2NrLCBmbGFncyk7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0LCB0ZW1wLCAmdHgtPnBlbmRpbmdfbGlzdCwKLQkJCQkJCXBfbGlzdCkgeworCQkJCQkJIHBfbGlzdCkgewogCQkJCWxpc3RfZGVsKCZ0LT5wX2xpc3QpOwogCQkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHQtPnVyYiwgR0ZQX0FUT01JQyk7CiAKQEAgLTc1OSw4ICs3NTEsOCBAQAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmtfbG9jaywgZmxhZ3MyKTsKIAkJfQogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja19pcnEoa193YWl0LAotCQkJCQkJICAhbGlzdF9lbXB0eSgma19saXN0KSB8fCBrX21vZGVfc3RvcCwKLQkJCQkJCSAga19sb2NrKTsKKwkJCQkJCSAgIWxpc3RfZW1wdHkoJmtfbGlzdCkgfHwKKwkJCQkJCSAga19tb2RlX3N0b3AsIGtfbG9jayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtfbG9jaywgZmxhZ3MyKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fdXNiLmggYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fdXNiLmgKaW5kZXggZjJjNTQ1MS4uMzA1MDY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvZ2RtX3VzYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV91c2IuaApAQCAtMjgsMTIgKzI4LDEwIEBACiAJc3RydWN0IGxpc3RfaGVhZAlwX2xpc3Q7CiAjZW5kaWYKIAlzdHJ1Y3QgdHhfY3h0CQkqdHhfY3h0OwotCiAJc3RydWN0IHVyYgkJKnVyYjsKIAl1OAkJCSpidWY7Ci0KIAl2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNiX2RhdGEpOwotCXZvaWQgKmNiX2RhdGE7CisJdm9pZAkJCSpjYl9kYXRhOwogfTsKIAogc3RydWN0IHR4X2N4dCB7CkBAIC00MywxNyArNDEsMTQgQEAKICNpZiBkZWZpbmVkKENPTkZJR19XSU1BWF9HRE03MlhYX1VTQl9QTSkgfHwgZGVmaW5lZChDT05GSUdfV0lNQVhfR0RNNzJYWF9LX01PREUpCiAJc3RydWN0IGxpc3RfaGVhZAlwZW5kaW5nX2xpc3Q7CiAjZW5kaWYKLQogCXNwaW5sb2NrX3QJCWxvY2s7CiB9OwogCiBzdHJ1Y3QgdXNiX3J4IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHJ4X2N4dAkJKnJ4X2N4dDsKLQogCXN0cnVjdCB1cmIJCSp1cmI7CiAJdTgJCQkqYnVmOwotCiAJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjYl9kYXRhLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKIAl2b2lkICpjYl9kYXRhOwogfTsKQEAgLTc1LDExICs3MCw5IEBACiAJaW50IGJ3X3N3aXRjaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAjZW5kaWYKLQogCXN0cnVjdCB0eF9jeHQJCXR4OwogCXN0cnVjdCByeF9jeHQJCXJ4OwotCi0JaW50IHBhZGRpbmc7CisJaW50CQkJcGFkZGluZzsKIH07CiAKICNlbmRpZiAvKiBfX0dETV9VU0JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fd2ltYXguYyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV93aW1heC5jCmluZGV4IDA1Y2UyYTIuLmU1ZTUxMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV93aW1heC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV93aW1heC5jCkBAIC0zNSwxMCArMzUsMTAgQEAKICNkZWZpbmUgRVZUX01BWF9TSVpFCTIwNDgKIAogc3RydWN0IGV2dF9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JY2hhciBldnRfZGF0YVtFVlRfTUFYX1NJWkVdOwotCWludAkgc2l6ZTsKKwlzdHJ1Y3QJbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0CW5ldF9kZXZpY2UgKmRldjsKKwljaGFyCWV2dF9kYXRhW0VWVF9NQVhfU0laRV07CisJaW50CXNpemU7CiB9OwogCiBzdGF0aWMgdm9pZCBfX2dkbV93aW1heF9ldmVudF9zZW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IHNvY2sgKnNvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBldnRxOwogCXNwaW5sb2NrX3QgZXZ0X2xvY2s7Ci0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3czsKIH0gd21fZXZlbnQ7CkBAIC0xMzUsMjQgKzEzNCwyNCBAQAogCXUxNiBwb3J0ID0gMDsKIAogCXByb3RvY29sID0gKGRhdGFbMTJdPDw4KSB8IGRhdGFbMTNdOwotCWloID0gKHN0cnVjdCBpcGhkciAqKSAoZGF0YStFVEhfSExFTik7CisJaWggPSAoc3RydWN0IGlwaGRyICopKGRhdGErRVRIX0hMRU4pOwogCiAJaWYgKHByb3RvY29sID09IEVUSF9QX0lQKSB7Ci0JCXVoID0gKHN0cnVjdCB1ZHBoZHIgKikgKChjaGFyICopaWggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CisJCXVoID0gKHN0cnVjdCB1ZHBoZHIgKikoKGNoYXIgKilpaCArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAkJaXBfcHJvdG9jb2wgPSBpaC0+cHJvdG9jb2w7CiAJCXBvcnQgPSBudG9ocyh1aC0+ZGVzdCk7CiAJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7Ci0JCXN0cnVjdCBpcHY2aGRyICppNmggPSAoc3RydWN0IGlwdjZoZHIgKikgZGF0YTsKLQkJdWggPSAoc3RydWN0IHVkcGhkciAqKSAoKGNoYXIgKilpNmggKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKKwkJc3RydWN0IGlwdjZoZHIgKmk2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKWRhdGE7CisKKwkJdWggPSAoc3RydWN0IHVkcGhkciAqKSgoY2hhciAqKWk2aCArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCQlpcF9wcm90b2NvbCA9IGk2aC0+bmV4dGhkcjsKIAkJcG9ydCA9IG50b2hzKHVoLT5kZXN0KTsKIAl9CiAKLQluZXRkZXZfZGJnKGRldiwgIlslc10gbGVuPSVkLCAlcywgJXMsICVzXG4iLAotCQl0aXRsZSwgbGVuLAotCQlnZXRfcHJvdG9jb2xfbmFtZShwcm90b2NvbCksCi0JCWdldF9pcF9wcm90b2NvbF9uYW1lKGlwX3Byb3RvY29sKSwKLQkJZ2V0X3BvcnRfbmFtZShwb3J0KSk7CisJbmV0ZGV2X2RiZyhkZXYsICJbJXNdIGxlbj0lZCwgJXMsICVzLCAlc1xuIiwgdGl0bGUsIGxlbiwKKwkJICAgZ2V0X3Byb3RvY29sX25hbWUocHJvdG9jb2wpLAorCQkgICBnZXRfaXBfcHJvdG9jb2xfbmFtZShpcF9wcm90b2NvbCksCisJCSAgIGdldF9wb3J0X25hbWUocG9ydCkpOwogCiAJaWYgKCEoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhmZikpIHsKIAkJaWYgKHByb3RvY29sID09IEVUSF9QX0lQKQpAQCAtMTY4LDcgKzE2Nyw2IEBACiB7CiAJdTE2IGJ1ZltIQ0lfSEVBREVSX1NJWkUgLyBzaXplb2YodTE2KV07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwotCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgSENJX0hFQURFUl9TSVpFKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKQEAgLTE4OCw3ICsxODYsNyBAQAogCW1lbWNweShza2ItPmRhdGEsIGJ1ZiwgSENJX0hFQURFUl9TSVpFKTsKIAogCSpwc2tiID0gc2tiOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGdkbV93aW1heF9ldmVudF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHR5cGUsIHZvaWQgKm1zZywKQEAgLTE5Niw5ICsxOTQsMTAgQEAKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JdTggKmJ1ZiA9ICh1OCAqKSBtc2c7CisJdTggKmJ1ZiA9ICh1OCAqKW1zZzsKIAl1MTYgaGNpX2NtZCA9ICAoYnVmWzBdPDw4KSB8IGJ1ZlsxXTsKIAl1MTYgaGNpX2xlbiA9IChidWZbMl08PDgpIHwgYnVmWzNdOworCiAJbmV0ZGV2X2RiZyhkZXYsICJIPT5EOiAweCUwNHgoJWQpXG4iLCBoY2lfY21kLCBoY2lfbGVuKTsKIAogCWdkbV93aW1heF9zZW5kKG5pYywgbXNnLCBsZW4pOwpAQCAtMjYzLDkgKzI2Miw5IEBACiB7CiAJc3RydWN0IGV2dF9lbnRyeSAqZTsKIAotCWlmIChsaXN0X2VtcHR5KCZ3bV9ldmVudC5mcmVlcSkpCisJaWYgKGxpc3RfZW1wdHkoJndtX2V2ZW50LmZyZWVxKSkgewogCQllID0gYWxsb2NfZXZlbnRfZW50cnkoKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQllID0gbGlzdF9lbnRyeSh3bV9ldmVudC5mcmVlcS5uZXh0LCBzdHJ1Y3QgZXZ0X2VudHJ5LCBsaXN0KTsKIAkJbGlzdF9kZWwoJmUtPmxpc3QpOwogCX0KQEAgLTMxMCw2ICszMDksNyBAQAogCiAJdTE2IGhjaV9jbWQgPSAgKCh1OClidWZbMF08PDgpIHwgKHU4KWJ1ZlsxXTsKIAl1MTYgaGNpX2xlbiA9ICgodTgpYnVmWzJdPDw4KSB8ICh1OClidWZbM107CisKIAluZXRkZXZfZGJnKGRldiwgIkQ9Pkg6IDB4JTA0eCglZClcbiIsIGhjaV9jbWQsIGhjaV9sZW4pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndtX2V2ZW50LmV2dF9sb2NrLCBmbGFncyk7CkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcmV0ID0gZ2RtX3dpbWF4X3NlbmRfd2l0aF9jYihuaWMsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIHR4X2NvbXBsZXRlLAotCQkJCQluaWMpOworCQkJCSAgICAgbmljKTsKIAlpZiAocmV0ID09IC1FTk9TUEMpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlyZXQgPSAwOwpAQCAtMzY4LDcgKzM2OCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG5pYyAqbmljID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZnNtX3MgKmZzbSA9IChzdHJ1Y3QgZnNtX3MgKikgbmljLT5zZGtfZGF0YVtTSU9DX0RBVEFfRlNNXS5idWY7CisJc3RydWN0IGZzbV9zICpmc20gPSAoc3RydWN0IGZzbV9zICopbmljLT5zZGtfZGF0YVtTSU9DX0RBVEFfRlNNXS5idWY7CiAKIAlkdW1wX2V0aF9wYWNrZXQoZGV2LCAiVFgiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIApAQCAtMzc5LDkgKzM3OSw5IEBACiAJfQogCiAJI2lmICFkZWZpbmVkKExPT1BCQUNLX1RFU1QpCi0JaWYgKCFmc20pCisJaWYgKCFmc20pIHsKIAkJbmV0ZGV2X2VycihkZXYsICJBU1NFUlRJT04gRVJST1I6IGZzbSBpcyBOVUxMISFcbiIpOwotCWVsc2UgaWYgKGZzbS0+bV9zdGF0dXMgIT0gTV9DT05ORUNURUQpIHsKKwl9IGVsc2UgaWYgKGZzbS0+bV9zdGF0dXMgIT0gTV9DT05ORUNURUQpIHsKIAkJbmV0ZGV2X2VtZXJnKGRldiwgIkFTU0VSVElPTiBFUlJPUjogRGV2aWNlIGlzIE5PVCByZWFkeS4gc3RhdHVzPSVkXG4iLAogCQkJICAgICBmc20tPm1fc3RhdHVzKTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC00MDgsNyArNDA4LDcgQEAKIHN0YXRpYyB2b2lkIF9fZ2RtX3dpbWF4X3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICptYWNfYWRkcikKIHsKIAl1MTYgaGNpX3BrdF9idWZbMzIgLyBzaXplb2YodTE2KV07Ci0JdTggKnBrdCA9ICh1OCAqKSAmaGNpX3BrdF9idWZbMF07CisJdTggKnBrdCA9ICh1OCAqKSZoY2lfcGt0X2J1ZlswXTsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogU2luY2UgZGV2IGlzIHJlZ2lzdGVyZWQgYXMgYSBldGhlcm5ldCBkZXZpY2UsCkBAIC00NTQsNyArNDU0LDcgQEAKIHN0YXRpYyBpbnQgZ2RtX3dpbWF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBmc21fcyAqZnNtID0gKHN0cnVjdCBmc21fcyAqKSBuaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKKwlzdHJ1Y3QgZnNtX3MgKmZzbSA9IChzdHJ1Y3QgZnNtX3MgKiluaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQAogc3RhdGljIGludCBnZG1fd2ltYXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBmc21fcyAqZnNtID0gKHN0cnVjdCBmc21fcyAqKSBuaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKKwlzdHJ1Y3QgZnNtX3MgKmZzbSA9IChzdHJ1Y3QgZnNtX3MgKiluaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtNTM2LDE3ICs1MzYsMTcgQEAKIHN0YXRpYyB2b2lkIGdkbV91cGRhdGVfZnNtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmc21fcyAqbmV3X2ZzbSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBmc21fcyAqY3VyX2ZzbSA9Ci0JCShzdHJ1Y3QgZnNtX3MgKikgbmljLT5zZGtfZGF0YVtTSU9DX0RBVEFfRlNNXS5idWY7CisJc3RydWN0IGZzbV9zICpjdXJfZnNtID0gKHN0cnVjdCBmc21fcyAqKQorCQkJCQluaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKIAogCWlmICghY3VyX2ZzbSkKIAkJcmV0dXJuOwogCiAJaWYgKGN1cl9mc20tPm1fc3RhdHVzICE9IG5ld19mc20tPm1fc3RhdHVzIHx8Ci0JCWN1cl9mc20tPmNfc3RhdHVzICE9IG5ld19mc20tPmNfc3RhdHVzKSB7Ci0JCWlmIChuZXdfZnNtLT5tX3N0YXR1cyA9PSBNX0NPTk5FQ1RFRCkKKwkgICAgY3VyX2ZzbS0+Y19zdGF0dXMgIT0gbmV3X2ZzbS0+Y19zdGF0dXMpIHsKKwkJaWYgKG5ld19mc20tPm1fc3RhdHVzID09IE1fQ09OTkVDVEVEKSB7CiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCWVsc2UgaWYgKGN1cl9mc20tPm1fc3RhdHVzID09IE1fQ09OTkVDVEVEKSB7CisJCX0gZWxzZSBpZiAoY3VyX2ZzbS0+bV9zdGF0dXMgPT0gTV9DT05ORUNURUQpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCQkjaWYgZGVmaW5lZChDT05GSUdfV0lNQVhfR0RNNzJYWF9RT1MpCiAJCQlnZG1fcW9zX3JlbGVhc2VfbGlzdChuaWMpOwpAQCAtNTU4LDcgKzU1OCw3IEBACiAKIHN0YXRpYyBpbnQgZ2RtX3dpbWF4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotCXN0cnVjdCB3bV9yZXFfcyAqcmVxID0gKHN0cnVjdCB3bV9yZXFfcyAqKSBpZnI7CisJc3RydWN0IHdtX3JlcV9zICpyZXEgPSAoc3RydWN0IHdtX3JlcV9zICopaWZyOwogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIApAQCAtNTc0LDggKzU3NCw4IEBACiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAkJaWYgKHJlcS0+Y21kID09IFNJT0NHX0RBVEEpIHsKLQkJCXJldCA9IGdkbV93aW1heF9pb2N0bF9nZXRfZGF0YSgmcmVxLT5kYXRhLAotCQkJCQkJJm5pYy0+c2RrX2RhdGFbcmVxLT5kYXRhX2lkXSk7CisJCQlyZXQgPSBnZG1fd2ltYXhfaW9jdGxfZ2V0X2RhdGEoCisJCQkJJnJlcS0+ZGF0YSwgJm5pYy0+c2RrX2RhdGFbcmVxLT5kYXRhX2lkXSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9IGVsc2UgaWYgKHJlcS0+Y21kID09IFNJT0NTX0RBVEEpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQAogCQkJCS8qTk9URTogZ2RtX3VwZGF0ZV9mc20gc2hvdWxkIGJlIGNhbGxlZAogCQkJCWJlZm9yZSBnZG1fd2ltYXhfaW9jdGxfc2V0X2RhdGEgaXMgY2FsbGVkKi8KIAkJCQlnZG1fdXBkYXRlX2ZzbShkZXYsCi0JCQkJCQkoc3RydWN0IGZzbV9zICopIHJlcS0+ZGF0YS5idWYpOworCQkJCQkgICAgICAgKHN0cnVjdCBmc21fcyAqKXJlcS0+ZGF0YS5idWYpOwogCQkJfQogCQkJcmV0ID0gZ2RtX3dpbWF4X2lvY3RsX3NldF9kYXRhKAogCQkJCSZuaWMtPnNka19kYXRhW3JlcS0+ZGF0YV9pZF0sICZyZXEtPmRhdGEpOwpAQCAtNjAzLDcgKzYwMyw3IEBACiB7CiAJc3RydWN0IG5pYyAqbmljID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MTYgYnVmWzMyIC8gc2l6ZW9mKHUxNildOwotCXN0cnVjdCBoY2lfcyAqaGNpID0gKHN0cnVjdCBoY2lfcyAqKSBidWY7CisJc3RydWN0IGhjaV9zICpoY2kgPSAoc3RydWN0IGhjaV9zICopYnVmOwogCXUxNiBsZW4gPSAwOwogCXUzMiB2YWwgPSAwOwogCkBAIC02NjEsNyArNjYxLDcgQEAKIH0KIAogc3RhdGljIGludCBnZG1fd2ltYXhfZ2V0X3ByZXBhcmVkX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqYnVmLAotCQkJCQlpbnQgbGVuKQorCQkJCSAgICAgICBpbnQgbGVuKQogewogCXU4IFQsICpWOwogCXUxNiBMOwpAQCAtNzQwLDcgKzc0MCw3IEBACiAJaW50IGxlbmd0aDsKIAogCXdoaWxlIChsZW4gPiAwKSB7Ci0JCWhjaSA9IChzdHJ1Y3QgaGNpX3MgKikgYnVmOworCQloY2kgPSAoc3RydWN0IGhjaV9zICopYnVmOwogCiAJCWlmIChCMkgoaGNpLT5jbWRfZXZ0KSAhPSBXSU1BWF9SWF9TRFUpIHsKIAkJCW5ldGRldl9lcnIoZGV2LCAiV3JvbmcgY21kX2V2dCgweCUwNFgpXG4iLApAQCAtNzg2LDcgKzc4Niw3IEBACiAJc3dpdGNoIChjbWRfZXZ0KSB7CiAJY2FzZSBXSU1BWF9SWF9TRFVfQUdHUjoKIAkJZ2RtX3dpbWF4X3RyYW5zbWl0X2FnZ3JfcGt0KGRldiwgJmJ1ZltIQ0lfSEVBREVSX1NJWkVdLAotCQkJCQkJY21kX2xlbik7CisJCQkJCSAgICBjbWRfbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBXSU1BWF9SWF9TRFU6CiAJCWdkbV93aW1heF9uZXRpZl9yeChkZXYsICZidWZbSENJX0hFQURFUl9TSVpFXSwgY21kX2xlbik7CkBAIC04MjIsMTMgKzgyMiwxMyBAQAogCW1lbWNweSgmaGNpX3BrdF9idWZbSENJX0hFQURFUl9TSVpFXSwgZnNtLCBzaXplb2Yoc3RydWN0IGZzbV9zKSk7CiAKIAlnZG1fd2ltYXhfZXZlbnRfc2VuZChkZXYsIGhjaV9wa3RfYnVmLAotCQkJCUhDSV9IRUFERVJfU0laRSArIHNpemVvZihzdHJ1Y3QgZnNtX3MpKTsKKwkJCSAgICAgSENJX0hFQURFUl9TSVpFICsgc2l6ZW9mKHN0cnVjdCBmc21fcykpOwogfQogCiBzdGF0aWMgdm9pZCBnZG1fd2ltYXhfaW5kX2lmX3VwZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZfdXApCiB7CiAJdTE2IGJ1ZlszMiAvIHNpemVvZih1MTYpXTsKLQlzdHJ1Y3QgaGNpX3MgKmhjaSA9IChzdHJ1Y3QgaGNpX3MgKikgYnVmOworCXN0cnVjdCBoY2lfcyAqaGNpID0gKHN0cnVjdCBoY2lfcyAqKWJ1ZjsKIAl1bnNpZ25lZCBjaGFyIHVwX2Rvd247CiAKIAl1cF9kb3duID0gaWZfdXAgPyBXSU1BWF9JRl9VUCA6IFdJTUFYX0lGX0RPV047CkBAIC04NTUsMTcgKzg1NSwxMyBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBnZG1fd2ltYXhfZ2V0X3ByZXBhcmVkX2luZm8obmljLT5uZXRkZXYsIGRhdGEsIGxlbik7Ci0JaWYgKHJldCA9PSAxKQorCWlmIChyZXQgPT0gMSkgewogCQlnZG1fd2ltYXhfcmN2X3dpdGhfY2IobmljLCByeF9jb21wbGV0ZSwgbmljKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQlpZiAocmV0IDwgMCkKIAkJCW5ldGRldl9lcnIobmljLT5uZXRkZXYsCiAJCQkJICAgImdldF9wcmVwYXJlZF9pbmZvIGZhaWxlZCglZClcbiIsIHJldCk7CiAJCWdkbV93aW1heF9yY3Zfd2l0aF9jYihuaWMsIHByZXBhcmVfcnhfY29tcGxldGUsIG5pYyk7Ci0JCSNpZiAwCi0JCS8qIFJlLXByZXBhcmUgV2lNYXggZGV2aWNlICovCi0JCWdkbV93aW1heF9wcmVwYXJlX2RldmljZShuaWMtPm5ldGRldik7Ci0JCSNlbmRpZgogCX0KIH0KIApAQCAtODc1LDEzICs4NzEsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZG1fbmV0ZGV2X29wcyA9IHsKLQkubmRvX29wZW4JCQkJPSBnZG1fd2ltYXhfb3BlbiwKLQkubmRvX3N0b3AJCQkJPSBnZG1fd2ltYXhfY2xvc2UsCi0JLm5kb19zZXRfY29uZmlnCQkJPSBnZG1fd2ltYXhfc2V0X2NvbmZpZywKLQkubmRvX3N0YXJ0X3htaXQJCQk9IGdkbV93aW1heF90eCwKLQkubmRvX2dldF9zdGF0cwkJCT0gZ2RtX3dpbWF4X3N0YXRzLAorCS5uZG9fb3BlbgkJPSBnZG1fd2ltYXhfb3BlbiwKKwkubmRvX3N0b3AJCT0gZ2RtX3dpbWF4X2Nsb3NlLAorCS5uZG9fc2V0X2NvbmZpZwkJPSBnZG1fd2ltYXhfc2V0X2NvbmZpZywKKwkubmRvX3N0YXJ0X3htaXQJCT0gZ2RtX3dpbWF4X3R4LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGdkbV93aW1heF9zdGF0cywKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGdkbV93aW1heF9zZXRfbWFjX2FkZHIsCi0JLm5kb19kb19pb2N0bAkJCT0gZ2RtX3dpbWF4X2lvY3RsLAorCS5uZG9fZG9faW9jdGwJCT0gZ2RtX3dpbWF4X2lvY3RsLAogfTsKIAogaW50IHJlZ2lzdGVyX3dpbWF4X2RldmljZShzdHJ1Y3QgcGh5X2RldiAqcGh5X2Rldiwgc3RydWN0IGRldmljZSAqcGRldikKQEAgLTk0OCw3ICs5NDQsNyBAQAogdm9pZCB1bnJlZ2lzdGVyX3dpbWF4X2RldmljZShzdHJ1Y3QgcGh5X2RldiAqcGh5X2RldikKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihwaHlfZGV2LT5uZXRkZXYpOwotCXN0cnVjdCBmc21fcyAqZnNtID0gKHN0cnVjdCBmc21fcyAqKSBuaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKKwlzdHJ1Y3QgZnNtX3MgKmZzbSA9IChzdHJ1Y3QgZnNtX3MgKiluaWMtPnNka19kYXRhW1NJT0NfREFUQV9GU01dLmJ1ZjsKIAogCWlmIChmc20pCiAJCWZzbS0+bV9zdGF0dXMgPSBNX0lOSVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9nZG1fd2ltYXguaCBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV93aW1heC5oCmluZGV4IDFmY2ZjODUuLjdlMmM4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV93aW1heC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2dkbV93aW1heC5oCkBAIC0yMywxMCArMjMsNiBAQAogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMy4yLjMiCiAKLS8qI2RlZmluZSBFVEhfUF9JUAkweDA4MDAgKi8KLS8qI2RlZmluZSBFVEhfUF9BUlAJMHgwODA2ICovCi0vKiNkZWZpbmUgRVRIX1BfSVBWNgkweDg2REQgKi8KLQogI2RlZmluZSBIMkwoeCkJCV9fY3B1X3RvX2xlMTYoeCkKICNkZWZpbmUgTDJIKHgpCQlfX2xlMTZfdG9fY3B1KHgpCiAjZGVmaW5lIERIMkwoeCkJCV9fY3B1X3RvX2xlMzIoeCkKQEAgLTM4LDEyICszNCwxMSBAQAogI2RlZmluZSBEQjJIKHgpCQlfX2JlMzJfdG9fY3B1KHgpCiAKIHN0cnVjdCBwaHlfZGV2IHsKLQl2b2lkCSpwcml2X2RldjsKKwl2b2lkCQkJKnByaXZfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRkZXY7Ci0KLQlpbnQJKCpzZW5kX2Z1bmMpKHZvaWQgKnByaXZfZGV2LCB2b2lkICpkYXRhLCBpbnQgbGVuLAotCQkJdm9pZCAoKmNiKSh2b2lkICpjYl9kYXRhKSwgdm9pZCAqY2JfZGF0YSk7Ci0JaW50CSgqcmN2X2Z1bmMpKHZvaWQgKnByaXZfZGV2LAorCWludCAoKnNlbmRfZnVuYykodm9pZCAqcHJpdl9kZXYsIHZvaWQgKmRhdGEsIGludCBsZW4sCisJCQkgdm9pZCAoKmNiKSh2b2lkICpjYl9kYXRhKSwgdm9pZCAqY2JfZGF0YSk7CisJaW50ICgqcmN2X2Z1bmMpKHZvaWQgKnByaXZfZGV2LAogCQkJdm9pZCAoKmNiKSh2b2lkICpjYl9kYXRhLCB2b2lkICpkYXRhLCBpbnQgbGVuKSwKIAkJCXZvaWQgKmNiX2RhdGEpOwogfTsKQEAgLTUxLDIxICs0NiwxNSBAQAogc3RydWN0IG5pYyB7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldjsKIAlzdHJ1Y3QgcGh5X2RldgkJKnBoeV9kZXY7Ci0KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLQotCXN0cnVjdCBkYXRhX3MJc2RrX2RhdGFbU0lPQ19EQVRBX01BWF07Ci0KKwlzdHJ1Y3QgZGF0YV9zCQlzZGtfZGF0YVtTSU9DX0RBVEFfTUFYXTsKICNpZiBkZWZpbmVkKENPTkZJR19XSU1BWF9HRE03MlhYX1FPUykKLQlzdHJ1Y3QgcW9zX2NiX3MJcW9zOworCXN0cnVjdCBxb3NfY2JfcwkJcW9zOwogI2VuZGlmCi0KIH07CiAKLS8qI2RlZmluZSBMT09QQkFDS19URVNUICovCi0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfd2ltYXhfZGV2aWNlKHN0cnVjdCBwaHlfZGV2ICpwaHlfZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKLWV4dGVybiBpbnQgZ2RtX3dpbWF4X3NlbmRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3dpbWF4X2RldmljZShzdHJ1Y3QgcGh5X2RldiAqcGh5X2Rldik7CitpbnQgcmVnaXN0ZXJfd2ltYXhfZGV2aWNlKHN0cnVjdCBwaHlfZGV2ICpwaHlfZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKK2ludCBnZG1fd2ltYXhfc2VuZF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgdW5yZWdpc3Rlcl93aW1heF9kZXZpY2Uoc3RydWN0IHBoeV9kZXYgKnBoeV9kZXYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L2hjaS5oIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvaGNpLmgKaW5kZXggMGUwNjc2Ni4uMjQ4NWEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvaGNpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvaGNpLmgKQEAgLTE4LDE4ICsxOCwxOCBAQAogI2RlZmluZSBIQ0lfVkFMVUVfT0ZGUwkJKEhDSV9IRUFERVJfU0laRSkKICNkZWZpbmUgSENJX01BWF9QQUNLRVQJCTIwNDgKICNkZWZpbmUgSENJX01BWF9QQVJBTQkJKEhDSV9NQVhfUEFDS0VULUhDSV9IRUFERVJfU0laRSkKLSNkZWZpbmUgSENJX01BWF9UTFYJCQkzMgorI2RlZmluZSBIQ0lfTUFYX1RMVgkJMzIKIAogLyogQ01ELUVWVCAqLwogCiAvKiBDYXRlZ29yeSAwICovCi0jZGVmaW5lIFdJTUFYX1JFU0VUCQkJCTB4MDAwMAotI2RlZmluZSBXSU1BWF9TRVRfSU5GTwkJCTB4MDAwMQotI2RlZmluZSBXSU1BWF9HRVRfSU5GTwkJCTB4MDAwMgorI2RlZmluZSBXSU1BWF9SRVNFVAkJMHgwMDAwCisjZGVmaW5lIFdJTUFYX1NFVF9JTkZPCQkweDAwMDEKKyNkZWZpbmUgV0lNQVhfR0VUX0lORk8JCTB4MDAwMgogI2RlZmluZSBXSU1BWF9HRVRfSU5GT19SRVNVTFQJMHg4MDAzCi0jZGVmaW5lIFdJTUFYX1JBRElPX09GRgkJCTB4MDAwNAotI2RlZmluZSBXSU1BWF9SQURJT19PTgkJCTB4MDAwNgotI2RlZmluZSBXSU1BWF9XSU1BWF9SRVNFVAkJMHgwMDA3CS8qIElzIHRoaXMgc3RpbGwgaGVyZSAqLworI2RlZmluZSBXSU1BWF9SQURJT19PRkYJCTB4MDAwNAorI2RlZmluZSBXSU1BWF9SQURJT19PTgkJMHgwMDA2CisjZGVmaW5lIFdJTUFYX1dJTUFYX1JFU0VUCTB4MDAwNwkvKiBJcyB0aGlzIHN0aWxsIGhlcmUgKi8KIAogLyogQ2F0ZWdvcnkgMSAqLwogI2RlZmluZSBXSU1BWF9ORVRfRU5UUlkJCQkweDAxMDAKQEAgLTQwLDI2ICs0MCwyMiBAQAogI2RlZmluZSBXSU1BWF9FWElUX0lETEUJCQkweDAxMDYKICNkZWZpbmUgV0lNQVhfTU9ERV9DSEFOR0UJCTB4ODEwOAogI2RlZmluZSBXSU1BWF9IQU5ET1ZFUgkJCTB4ODEwOQkvKiBvYnNvbGV0ZSAqLwotCi0jZGVmaW5lIFdJTUFYX1NDQU4JCQkJMHgwMTBkCisjZGVmaW5lIFdJTUFYX1NDQU4JCQkweDAxMGQKICNkZWZpbmUgV0lNQVhfU0NBTl9DT01QTEVURQkJMHg4MTBlCiAjZGVmaW5lIFdJTUFYX1NDQU5fUkVTVUxUCQkweDgxMGYKLQogI2RlZmluZSBXSU1BWF9DT05ORUNUCQkJMHgwMTEwCiAjZGVmaW5lIFdJTUFYX0NPTk5FQ1RfU1RBUlQJCTB4ODExMQotI2RlZmluZSBXSU1BWF9DT05ORUNUX0NPTVBMRVRFCTB4ODExMgorI2RlZmluZSBXSU1BWF9DT05ORUNUX0NPTVBMRVRFCQkweDgxMTIKICNkZWZpbmUgV0lNQVhfQVNTT0NfU1RBUlQJCTB4ODExMwotI2RlZmluZSBXSU1BWF9BU1NPQ19DT01QTEVURQkweDgxMTQKKyNkZWZpbmUgV0lNQVhfQVNTT0NfQ09NUExFVEUJCTB4ODExNAogI2RlZmluZSBXSU1BWF9ESVNDT05OX0lORAkJMHg4MTE1CiAjZGVmaW5lIFdJTUFYX0VOVFJZX0lORAkJCTB4ODExNgogI2RlZmluZSBXSU1BWF9IT19TVEFSVAkJCTB4ODExNwogI2RlZmluZSBXSU1BWF9IT19DT01QTEVURQkJMHg4MTE4Ci0jZGVmaW5lIFdJTUFYX1JBRElPX1NUQVRFX0lORAkweDgxMTkKKyNkZWZpbmUgV0lNQVhfUkFESU9fU1RBVEVfSU5ECQkweDgxMTkKICNkZWZpbmUgV0lNQVhfSVBfUkVORVdfSU5ECQkweDgxMWEKLQotI2RlZmluZSBXSU1BWF9ESVNDT1ZFUl9OU1AJCQkweDAxMWQKKyNkZWZpbmUgV0lNQVhfRElTQ09WRVJfTlNQCQkweDAxMWQKICNkZWZpbmUgV0lNQVhfRElTQ09WRVJfTlNQX1JFU1VMVAkweDgxMWUKLQogI2RlZmluZSBXSU1BWF9TRFVfVFhfRkxPVwkJMHg4MTI1CiAKIC8qIENhdGVnb3J5IDIgKi8KQEAgLTcxLDM0ICs2NywzMyBAQAogI2RlZmluZSBXSU1BWF9UWF9TRFVfQUdHUgkweDAyMDUKIAogLyogQ2F0ZWdvcnkgMyAqLwotI2RlZmluZSBXSU1BWF9ETV9DTUQJCQkJMHgwMzBhCi0jZGVmaW5lIFdJTUFYX0RNX1JTUAkJCQkweDgzMGIKKyNkZWZpbmUgV0lNQVhfRE1fQ01ECQkweDAzMGEKKyNkZWZpbmUgV0lNQVhfRE1fUlNQCQkweDgzMGIKIAotI2RlZmluZSBXSU1BWF9DTElfQ01ECQkJCTB4MDMwYwotI2RlZmluZSBXSU1BWF9DTElfUlNQCQkJCTB4ODMwZAorI2RlZmluZSBXSU1BWF9DTElfQ01ECQkweDAzMGMKKyNkZWZpbmUgV0lNQVhfQ0xJX1JTUAkJMHg4MzBkCiAKLSNkZWZpbmUgV0lNQVhfRExfSU1BR0UJCQkJMHgwMzEwCi0jZGVmaW5lIFdJTUFYX0RMX0lNQUdFX1NUQVRVUwkJMHg4MzExCi0jZGVmaW5lIFdJTUFYX1VMX0lNQUdFCQkJCTB4MDMxMgotI2RlZmluZSBXSU1BWF9VTF9JTUFHRV9SRVNVTFQJCTB4ODMxMwotI2RlZmluZSBXSU1BWF9VTF9JTUFHRV9TVEFUVVMJCTB4MDMxNAotCi0jZGVmaW5lIFdJTUFYX0VWVF9NT0RFTV9SRVBPUlQJCTB4ODMyNQorI2RlZmluZSBXSU1BWF9ETF9JTUFHRQkJMHgwMzEwCisjZGVmaW5lIFdJTUFYX0RMX0lNQUdFX1NUQVRVUwkweDgzMTEKKyNkZWZpbmUgV0lNQVhfVUxfSU1BR0UJCTB4MDMxMgorI2RlZmluZSBXSU1BWF9VTF9JTUFHRV9SRVNVTFQJMHg4MzEzCisjZGVmaW5lIFdJTUFYX1VMX0lNQUdFX1NUQVRVUwkweDAzMTQKKyNkZWZpbmUgV0lNQVhfRVZUX01PREVNX1JFUE9SVAkweDgzMjUKIAogLyogQ2F0ZWdvcnkgMHhGICovCi0jZGVmaW5lIFdJTUFYX0ZTTV9VUERBVEUJCQkweDhGMDEKLSNkZWZpbmUgV0lNQVhfSUZfVVBET1dOCQkJCTB4OEYwMgotCSNkZWZpbmUgV0lNQVhfSUZfVVAJCQkJMQotCSNkZWZpbmUgV0lNQVhfSUZfRE9XTgkJCTIKKyNkZWZpbmUgV0lNQVhfRlNNX1VQREFURQkweDhGMDEKKyNkZWZpbmUgV0lNQVhfSUZfVVBET1dOCQkweDhGMDIKKyNkZWZpbmUgV0lNQVhfSUZfVVAJCTEKKyNkZWZpbmUgV0lNQVhfSUZfRE9XTgkJMgogCiAvKiBXSU1BWCBtb2RlICovCi0jZGVmaW5lIFdfTlVMTAkJCQkwCi0jZGVmaW5lIFdfU1RBTkRCWQkJCTEKLSNkZWZpbmUgV19PT1oJCQkJMgotI2RlZmluZSBXX0FXQUtFCQkJCTMKLSNkZWZpbmUgV19JRExFCQkJCTQKLSNkZWZpbmUgV19TTEVFUAkJCQk1Ci0jZGVmaW5lIFdfV0FJVAkJCQk2CisjZGVmaW5lIFdfTlVMTAkJMAorI2RlZmluZSBXX1NUQU5EQlkJMQorI2RlZmluZSBXX09PWgkJMgorI2RlZmluZSBXX0FXQUtFCQkzCisjZGVmaW5lIFdfSURMRQkJNAorI2RlZmluZSBXX1NMRUVQCQk1CisjZGVmaW5lIFdfV0FJVAkJNgogCiAjZGVmaW5lIFdfTkVUX0VOVFJZX1JORwkJMHg4MAogI2RlZmluZSBXX05FVF9FTlRSWV9TQkMJCTB4ODEKQEAgLTExMyw4ICsxMDgsOCBAQAogI2RlZmluZSBXX05FVF9FTlRSWV9EU1hfRkFJTAkweDExMDQwMDAKIAogLyogU2NhbiBUeXBlICovCi0jZGVmaW5lIFdfU0NBTl9BTExfQ0hBTk5FTAkJCQkwCi0jZGVmaW5lIFdfU0NBTl9BTExfU1VCU0NSSVBUSU9OCQkJMQorI2RlZmluZSBXX1NDQU5fQUxMX0NIQU5ORUwJCTAKKyNkZWZpbmUgV19TQ0FOX0FMTF9TVUJTQ1JJUFRJT04JCTEKICNkZWZpbmUgV19TQ0FOX1NQRUNJRklFRF9TVUJTQ1JJUFRJT04JMgogCiAvKgpAQCAtMTI2LDcgKzEyMSw3IEBACiAgKgogICovCiAjZGVmaW5lIFRMVl9MKHgpCQkoKCh4KSA+PiAxNikgJiAweGZmKQotI2RlZmluZSBUTFZfVCh4KQkJCSgoeCkgJiAweGZmKQorI2RlZmluZSBUTFZfVCh4KQkJKCh4KSAmIDB4ZmYpCiAjZGVmaW5lIFRMVl9DT01QT1NJVEUoeCkJKCh4KSA+PiAzMSkKIAogLyogR0VORVJBTCAqLwpAQCAtMTQxLDcgKzEzNiw2IEBACiAjZGVmaW5lIFRfT09aX1NDQU5fSU5URVJWQUwJCSgweDA4CXwgKDQgPDwgMTYpKQogI2RlZmluZSBUX0lNRUkJCQkJKDB4MDkJfCAoOCA8PCAxNikpCiAjZGVmaW5lIFRfUElECQkJCSgweDBhCXwgKDEyIDw8IDE2KSkKLQogI2RlZmluZSBUX0NBUEFCSUxJVFkJCQkoMHgxYQl8ICg0IDw8IDE2KSkKICNkZWZpbmUgVF9SRUxFQVNFX05VTUJFUgkJKDB4MWIJfCAoNCA8PCAxNikpCiAjZGVmaW5lIFRfRFJJVkVSX1JFVklTSU9OCQkoMHgxYwl8ICg0IDw8IDE2KSkKQEAgLTE1MCwxOSArMTQ0LDE2IEBACiAjZGVmaW5lIFRfUEhZX0hXX1JFVklTSU9OCQkoMHgxZgl8ICg0IDw8IDE2KSkKIAogLyogSEFORE9WRVIgKi8KLSNkZWZpbmUgVF9TQ0FOX0lOVEVSVkFMCQkoMHgyMAl8ICgxIDw8IDE2KSkKLQorI2RlZmluZSBUX1NDQU5fSU5URVJWQUwJCQkoMHgyMAl8ICgxIDw8IDE2KSkKICNkZWZpbmUgVF9SU0NfUkVUQUlOX1RJTUUJCSgweDJmCXwgKDIgPDwgMTYpKQogCiAvKiBTTEVFUCAqLwogI2RlZmluZSBUX1RZUEUxX0lTVwkJCSgweDQwCXwgKDEgPDwgMTYpKQotCiAjZGVmaW5lIFRfU0xQX1NUQVJUX1RPCQkJKDB4NGEJfCAoMiA8PCAxNikpCiAKIC8qIElETEUgKi8KICNkZWZpbmUgVF9JRExFX01PREVfVE8JCQkoMHg1MAl8ICgyIDw8IDE2KSkKLQotI2RlZmluZSBUX0lETEVfU1RBUlRfVE8JCSgweDU0CXwgKDIgPDwgMTYpKQorI2RlZmluZSBUX0lETEVfU1RBUlRfVE8JCQkoMHg1NAl8ICgyIDw8IDE2KSkKIAogLyogTU9OSVRPUiAqLwogI2RlZmluZSBUX1JTU0kJCQkJKDB4NjAJfCAoMSA8PCAxNikpCkBAIC0xODAsNyArMTcxLDcgQEAKICNkZWZpbmUgVF9DU19UWVBFCQkJKDB4YTYJfCAoMiA8PCAxNikpCiAjZGVmaW5lIFRfVkVORE9SX05BTUUJCQkoMHhhNwl8ICgwIDw8IDE2KSkKICNkZWZpbmUgVF9NT0RfTkFNRQkJCSgweGE4CXwgKDAgPDwgMTYpKQotI2RlZmluZSBUX1BBQ0tFVF9GSUxURVIJCSgweGE5CXwgKDEgPDwgMTYpKQorI2RlZmluZSBUX1BBQ0tFVF9GSUxURVIJCQkoMHhhOQl8ICgxIDw8IDE2KSkKICNkZWZpbmUgVF9OU1BfQ0hBTkdFX0NPVU5UCQkoMHhhYQl8ICg0IDw8IDE2KSkKICNkZWZpbmUgVF9SQURJT19TVEFURQkJCSgweGFiCXwgKDEgPDwgMTYpKQogI2RlZmluZSBUX1VSSV9DT05UQUNUX1RZUEUJCSgweGFjCXwgKDEgPDwgMTYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvbmV0bGlua19rLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9uZXRsaW5rX2suYwppbmRleCBhZjdmMWMxLi45YmYwMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9uZXRsaW5rX2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9uZXRsaW5rX2suYwpAQCAtNTYsNyArNTYsNyBAQAogCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOwogCiAJCWlmIChza2ItPmxlbiA8IG5saC0+bmxtc2dfbGVuIHx8Ci0JCW5saC0+bmxtc2dfbGVuID4gTkRfTUFYX01TR19MRU4pIHsKKwkJICAgIG5saC0+bmxtc2dfbGVuID4gTkRfTUFYX01TR19MRU4pIHsKIAkJCW5ldGRldl9lcnIoc2tiLT5kZXYsICJJbnZhbGlkIGxlbmd0aCAoJWQsJWQpXG4iLAogCQkJCSAgIHNrYi0+bGVuLCBubGgtPm5sbXNnX2xlbik7CiAJCQlyZXR1cm47CkBAIC03NSw4ICs3NSw5IEBACiAJCQkJbmV0ZGV2X2Vycihza2ItPmRldiwKIAkJCQkJICAgImRldl9nZXRfYnlfaW5kZXgoJWQpIGlzIG5vdCBmb3VuZC5cbiIsCiAJCQkJCSAgIGlmaW5kZXgpOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKIAkJCW5ldGRldl9lcnIoc2tiLT5kZXYsICJVbnJlZ2lzdGVyZWQgQ2FsbGJhY2tcbiIpOworCQl9CiAJfQogfQogCkBAIC04OCw3ICs4OSw3IEBACiB9CiAKIHN0cnVjdCBzb2NrICpuZXRsaW5rX2luaXQoaW50IHVuaXQsIHZvaWQgKCpjYikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHR5cGUsCi0JCQkJCQl2b2lkICptc2csIGludCBsZW4pKQorCQkJCQkgICAgICAgdm9pZCAqbXNnLCBpbnQgbGVuKSkKIHsKIAlzdHJ1Y3Qgc29jayAqc29jazsKIAlzdHJ1Y3QgbmV0bGlua19rZXJuZWxfY2ZnIGNmZyA9IHsKQEAgLTE0NCw5ICsxNDUsOSBAQAogCiAJcmV0ID0gbmV0bGlua19icm9hZGNhc3Qoc29jaywgc2tiLCAwLCBncm91cCsxLCBHRlBfQVRPTUlDKTsKIAotCWlmICghcmV0KQorCWlmICghcmV0KSB7CiAJCXJldHVybiBsZW47Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJaWYgKHJldCAhPSAtRVNSQ0gpIHsKIAkJCXByX2VycigibmV0bGlua19icm9hZGNhc3QgZz0lZCwgdD0lZCwgbD0lZCwgcj0lZFxuIiwKIAkJCSAgICAgICBncm91cCwgdHlwZSwgbGVuLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvbmV0bGlua19rLmggYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9uZXRsaW5rX2suaAppbmRleCAxZGZmYWE2Li5iNmNhYWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9uZXRsaW5rX2suaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9uZXRsaW5rX2suaApAQCAtMTYsOCArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKLXN0cnVjdCBzb2NrICpuZXRsaW5rX2luaXQoaW50IHVuaXQsCi0Jdm9pZCAoKmNiKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdHlwZSwgdm9pZCAqbXNnLCBpbnQgbGVuKSk7CitzdHJ1Y3Qgc29jayAqbmV0bGlua19pbml0KGludCB1bml0LCB2b2lkICgqY2IpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB0eXBlLAorCQkJCQkgICAgICAgdm9pZCAqbXNnLCBpbnQgbGVuKSk7CiB2b2lkIG5ldGxpbmtfZXhpdChzdHJ1Y3Qgc29jayAqc29jayk7CiBpbnQgbmV0bGlua19zZW5kKHN0cnVjdCBzb2NrICpzb2NrLCBpbnQgZ3JvdXAsIHUxNiB0eXBlLCB2b2lkICptc2csIGludCBsZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9zZGlvX2Jvb3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3NkaW9fYm9vdC5jCmluZGV4IGNiZTVkY2YuLjJjMDI4NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3NkaW9fYm9vdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3NkaW9fYm9vdC5jCkBAIC00MSwxMSArNDEsMTEgQEAKIAogc3RhdGljIGludCBhY2tfcmVhZHkoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKwl1bnNpZ25lZCBsb25nIHdhaXQgPSBqaWZmaWVzICsgSFo7CiAJdTggdmFsOwogCWludCByZXQ7CiAKLQl3aGlsZSAoKGppZmZpZXMgLSBzdGFydCkgPCBIWikgeworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB3YWl0KSkgewogCQl2YWwgPSBzZGlvX3JlYWRiKGZ1bmMsIDB4MTMsICZyZXQpOwogCQlpZiAodmFsICYgMHgwMSkKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvc2Rpb19ib290LmggYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9zZGlvX2Jvb3QuaAppbmRleCAzNzNhYzI4Li4wNDVjMWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9zZGlvX2Jvb3QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9zZGlvX2Jvb3QuaApAQCAtMTYsNiArMTYsNiBAQAogCiBzdHJ1Y3Qgc2Rpb19mdW5jOwogCi1leHRlcm4gaW50IHNkaW9fYm9vdChzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTsKK2ludCBzZGlvX2Jvb3Qoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7CiAKICNlbmRpZiAvKiBfX1NESU9fQk9PVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3VzYl9ib290LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC91c2JfYm9vdC5jCmluZGV4IDBkNDVlYjYuLmQ1OWJhYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3VzYl9ib290LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvdXNiX2Jvb3QuYwpAQCAtNjcsNiArNjcsNyBAQAogc3RhdGljIHZvaWQgYXJyYXlfbGUzMl90b19jcHUodTMyICphcnIsIGludCBudW0pCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIGFycisrKQogCQkqYXJyID0gX19sZTMyX3RvX2NwdSgqYXJyKTsKIH0KQEAgLTc5LDcgKzgwLDcgQEAKIAlpbnQgYWN0dWFsOwogCiAJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYmRldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYmRldiwgMSksIGRhdGEsIGxlbiwKLQkJCSZhY3R1YWwsIDEwMDApOworCQkJICAgJmFjdHVhbCwgMTAwMCk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZ1c2JkZXYtPmRldiwgIkVycm9yIDogdXNiX2J1bGtfbXNnICggcmVzdWx0ID0gJWQgKVxuIiwKQEAgLTk1LDcgKzk2LDcgQEAKIAlpbnQgYWN0dWFsOwogCiAJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgMiksIGRhdGEsIGxlbiwKLQkJCSZhY3R1YWwsIDUwMDApOworCQkJICAgJmFjdHVhbCwgNTAwMCk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZ1c2JkZXYtPmRldiwKQEAgLTEwNiw4ICsxMDcsOCBAQAogfQogCiBzdGF0aWMgaW50IGRvd25sb2FkX2ltYWdlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsCi0JCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtLAotCQkJCWxvZmZfdCBwb3MsIHUzMiBpbWdfbGVuLCB1MzIgbWFnaWNfbnVtKQorCQkJICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm0sCisJCQkgIGxvZmZfdCBwb3MsIHUzMiBpbWdfbGVuLCB1MzIgbWFnaWNfbnVtKQogewogCXN0cnVjdCBkbl9oZWFkZXIgaDsKIAlpbnQgcmV0ID0gMDsKQEAgLTE2OSwxNCArMTcwLDcgQEAKIAltZW1jcHkoJmhkciwgZmlybS0+ZGF0YSwgc2l6ZW9mKGhkcikpOwogCiAJYXJyYXlfbGUzMl90b19jcHUoKHUzMiAqKSZoZHIsIDE5KTsKLSNpZiAwCi0JaWYgKGhkci5tYWdpY19jb2RlICE9IDB4MTA3NjdmZmYpIHsKLQkJZGV2X2VycigmdXNiZGV2LT5kZXYsICJJbnZhbGlkIG1hZ2ljIGNvZGUgMHglMDh4XG4iLAotCQkJaGRyLm1hZ2ljX2NvZGUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKKwogCWlmIChoZHIuY291bnQgPiBNQVhfSU1HX0NOVCkgewogCQlkZXZfZXJyKCZ1c2JkZXYtPmRldiwgIlRvbyBtYW55IGltYWdlcy4gJWRcbiIsIGhkci5jb3VudCk7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0yMDEsMTQgKzE5NSw2IEBACiAJCW1lbWNweSgmZndfaW5mbywgZmlybS0+ZGF0YSArIHBvcywgc2l6ZW9mKGZ3X2luZm8pKTsKIAogCQlhcnJheV9sZTMyX3RvX2NwdSgodTMyICopJmZ3X2luZm8sIDgpOwotI2lmIDAKLQkJaWYgKChmd19pbmZvLmlkICYgMHhmZmZmZjAwMCkgIT0gMHgxMDc2NzAwMCkgewotCQkJZGV2X2VycigmdXNiZGV2LT5kZXYsICJJbnZhbGlkIEZXIGlkLiAweCUwOHhcbiIsCi0JCQkJZndfaW5mby5pZCk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KLSNlbmRpZgogCiAJCWlmICgoZndfaW5mby5pZCAmIDB4ZmZmZikgIT0gcGlkKQogCQkJY29udGludWU7CkBAIC0yMTksOCArMjA1LDggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gZG93bmxvYWRfaW1hZ2UodXNiZGV2LCBmaXJtLCBwb3MsCi0JCQkJZndfaW5mby5rZXJuZWxfbGVuLCBETl9LRVJORUxfTUFHSUNfTlVNQkVSKTsKKwkJcmV0ID0gZG93bmxvYWRfaW1hZ2UodXNiZGV2LCBmaXJtLCBwb3MsIGZ3X2luZm8ua2VybmVsX2xlbiwKKwkJCQkgICAgIEROX0tFUk5FTF9NQUdJQ19OVU1CRVIpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCQlkZXZfaW5mbygmdXNiZGV2LT5kZXYsICJHQ1Q6IEtlcm5lbCBkb3dubG9hZCBzdWNjZXNzLlxuIik7CkBAIC0yMzEsNyArMjE3LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXJldCA9IGRvd25sb2FkX2ltYWdlKHVzYmRldiwgZmlybSwgcG9zLCBmd19pbmZvLnJvb3Rmc19sZW4sCi0JCQkJRE5fUk9PVEZTX01BR0lDX05VTUJFUik7CisJCQkJICAgICBETl9ST09URlNfTUFHSUNfTlVNQkVSKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAkJZGV2X2luZm8oJnVzYmRldi0+ZGV2LCAiR0NUOiBGaWxlc3lzdGVtIGRvd25sb2FkIHN1Y2Nlc3MuXG4iKTsKQEAgLTI3Niw3ICsyNjIsNyBAQAogfQogCiBzdGF0aWMgaW50IGVtX2Rvd25sb2FkX2ltYWdlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGNvbnN0IGNoYXIgKmltZ19uYW1lLAotCQkJCWNoYXIgKnR5cGVfc3RyaW5nKQorCQkJICAgICBjaGFyICp0eXBlX3N0cmluZykKIHsKIAljaGFyICpidWYgPSBOVUxMOwogCWxvZmZfdCBwb3MgPSAwOwpAQCAtMzQ3LDExICszMzMsOCBAQAogCiBzdGF0aWMgaW50IGVtX2Z3X3Jlc2V0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYpCiB7Ci0JaW50IHJldDsKLQogCS8qU2VuZCBaTFAqLwotCXJldCA9IGdkbV93aWJyb19zZW5kKHVzYmRldiwgTlVMTCwgMCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ2RtX3dpYnJvX3NlbmQodXNiZGV2LCBOVUxMLCAwKTsKIH0KIAogaW50IHVzYl9lbWVyZ2VuY3koc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3VzYl9ib290LmggYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC91c2JfYm9vdC5oCmluZGV4IGM3MTVjZDMuLjA1MzA4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3VzYl9ib290LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvdXNiX2Jvb3QuaApAQCAtMTYsNyArMTYsNyBAQAogCiBzdHJ1Y3QgdXNiX2RldmljZTsKIAotZXh0ZXJuIGludCB1c2JfYm9vdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCB1MTYgcGlkKTsKLWV4dGVybiBpbnQgdXNiX2VtZXJnZW5jeShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2KTsKK2ludCB1c2JfYm9vdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCB1MTYgcGlkKTsKK2ludCB1c2JfZW1lcmdlbmN5KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYpOwogCiAjZW5kaWYgLyogX19VU0JfQk9PVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3VzYl9pZHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3VzYl9pZHMuaAppbmRleCBiMzQ2MTZiLi4xYTYxYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC91c2JfaWRzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvdXNiX2lkcy5oCkBAIC0yOSw3ICsyOSw3IEBACiAJLmlkVmVuZG9yID0gKHZlbmQpLCAuaWRQcm9kdWN0ID0gKHByb2QpLCAuYkludGVyZmFjZUNsYXNzID0gKGludGYpCiAKICNkZWZpbmUgRU1FUkdFTkNZX1BJRAkJMHg3MjBmCi0jZGVmaW5lIEJMX1BJRF9NQVNLCQkJMHhmZmMwCisjZGVmaW5lIEJMX1BJRF9NQVNLCQkweGZmYzAKIAogI2RlZmluZSBVU0JfREVWSUNFX0JPT1RMT0FERVIodmlkLCBwaWQpCVwKIAl7VVNCX0RFVklDRSgodmlkKSwgKChwaWQpJkJMX1BJRF9NQVNLKXxCX0RPV05MT0FEKX0sCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3dtX2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC93bV9pb2N0bC5oCmluZGV4IDlmNDZlMDYuLmQwMjJjNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L3dtX2lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvd21faW9jdGwuaApAQCAtMTksMTAgKzE5LDEwIEBACiAKICNkZWZpbmUgTkVUTElOS19XSU1BWAkzMQogCi0jZGVmaW5lIFNJT0NXTUlPQ1RMCQkJU0lPQ0RFVlBSSVZBVEUKKyNkZWZpbmUgU0lPQ1dNSU9DVEwJU0lPQ0RFVlBSSVZBVEUKIAotI2RlZmluZSBTSU9DR19EQVRBCQkJMHg4RDEwCi0jZGVmaW5lIFNJT0NTX0RBVEEJCQkweDhEMTEKKyNkZWZpbmUgU0lPQ0dfREFUQQkweDhEMTAKKyNkZWZpbmUgU0lPQ1NfREFUQQkweDhEMTEKIAogZW51bSB7CiAJU0lPQ19EQVRBX0ZTTSwKQEAgLTM0LDcgKzM0LDcgQEAKIAlTSU9DX0RBVEFfRU5ECiB9OwogCi0jZGVmaW5lIFNJT0NfREFUQV9NQVgJCQkxNgorI2RlZmluZSBTSU9DX0RBVEFfTUFYCTE2CiAKIC8qIEZTTSAqLwogZW51bSB7CkBAIC02NywyMyArNjcsMjEgQEAKIH07CiAKIHN0cnVjdCBmc21fcyB7Ci0JaW50CQltX3N0YXR1czsJLyptYWluIHN0YXR1cyovCi0JaW50CQljX3N0YXR1czsJLypjb25uZWN0aW9uIHN0YXR1cyovCi0JaW50CQlkX3N0YXR1czsJLypvbWEtZG0gc3RhdHVzKi8KKwlpbnQJbV9zdGF0dXM7CS8qbWFpbiBzdGF0dXMqLworCWludAljX3N0YXR1czsJLypjb25uZWN0aW9uIHN0YXR1cyovCisJaW50CWRfc3RhdHVzOwkvKm9tYS1kbSBzdGF0dXMqLwogfTsKIAogc3RydWN0IGRhdGFfcyB7Ci0JaW50CQlzaXplOworCWludAlzaXplOwogCXZvaWQJKmJ1ZjsKIH07CiAKIHN0cnVjdCB3bV9yZXFfcyB7CiAJdW5pb24gewotCQljaGFyCWlmcm5fbmFtZVtJRk5BTVNJWl07CisJCWNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKIAl9IGlmcl9pZnJuOwotCiAJdW5zaWduZWQgc2hvcnQJY21kOwotCiAJdW5zaWduZWQgc2hvcnQJZGF0YV9pZDsKIAlzdHJ1Y3QgZGF0YV9zCWRhdGE7CiAKQEAgLTkxLDcgKzg5LDcgQEAKIH07CiAKICNpZm5kZWYgaWZyX25hbWUKLSNkZWZpbmUgaWZyX25hbWUJaWZyX2lmcm4uaWZybl9uYW1lCisjZGVmaW5lIGlmcl9uYW1lIGlmcl9pZnJuLmlmcm5fbmFtZQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvbGRmaXNoL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9nb2xkZmlzaC9SRUFETUUKaW5kZXggOTNkNjViMC4uMTgzYWYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvbGRmaXNoL1JFQURNRQorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvUkVBRE1FCkBAIC01LDcgKzUsNiBAQAogCiBOQU5ECiAtLS0tCi0tIFN3aXRjaCBmcm9tIHNwaW5sb2NrIHRvIG11dGV4CiAtIFJlbW92ZSBleGNlc3MgY2hlY2tpbmcgb2YgcGFyYW1ldGVycyBpbiBjYWxscwogLSBVc2UgZG1hIGNvaGVyZW50IG1lbW9yeSBub3Qga21hbGxvYy9fX3BhIGZvciB0aGUgbWVtb3J5ICh0aGlzIGlzIGp1c3QKICAgYSBjbGVhbmxpbmVzcyBpc3N1ZSBub3QgYSBjb3JyZWN0bmVzcyBvbmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvZ29sZGZpc2hfYXVkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9nb2xkZmlzaC9nb2xkZmlzaF9hdWRpby5jCmluZGV4IDdhYzI2MDIuLmNiZDQ1NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nb2xkZmlzaC9nb2xkZmlzaF9hdWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nb2xkZmlzaC9nb2xkZmlzaF9hdWRpby5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9nb2xkZmlzaC5oPgogCiBNT0RVTEVfQVVUSE9SKCJHb29nbGUsIEluYy4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQW5kcm9pZCBRRU1VIEF1ZGlvIERyaXZlciIpOwpAQCAtNjAsNiArNjEsOCBAQAogCiAjZGVmaW5lIEFVRElPX1JFQUQoZGF0YSwgYWRkcikJCShyZWFkbChkYXRhLT5yZWdfYmFzZSArIGFkZHIpKQogI2RlZmluZSBBVURJT19XUklURShkYXRhLCBhZGRyLCB4KQkod3JpdGVsKHgsIGRhdGEtPnJlZ19iYXNlICsgYWRkcikpCisjZGVmaW5lIEFVRElPX1dSSVRFNjQoZGF0YSwgYWRkciwgYWRkcjIsIHgpCVwKKwkoZ2Zfd3JpdGU2NCgodTY0KSh4KSwgZGF0YS0+cmVnX2Jhc2UgKyBhZGRyLCBkYXRhLT5yZWdfYmFzZSthZGRyMikpCiAKIC8qCiAgKiAgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgYmV0d2VlbiBnb2xkZmlzaF9hdWRpb19wcm9iZSgpIGFuZApAQCAtNzgsMTEgKzgxLDE0IEBACiAJLyogc2V0IG51bWJlciBvZiBieXRlcyBpbiBidWZmZXIgdG8gd3JpdGUgKi8KIAlBVURJT19XUklURV9CVUZGRVJfMSAgPSAweDEwLAogCUFVRElPX1dSSVRFX0JVRkZFUl8yICA9IDB4MTQsCisJQVVESU9fU0VUX1dSSVRFX0JVRkZFUl8xX0hJR0ggPSAweDI4LAorCUFVRElPX1NFVF9XUklURV9CVUZGRVJfMl9ISUdIID0gMHgzMCwKIAogCS8qIHRydWUgaWYgYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkICovCiAJQVVESU9fUkVBRF9TVVBQT1JURUQgPSAweDE4LAogCS8qIGJ1ZmZlciB0byB1c2UgZm9yIGF1ZGlvIGlucHV0ICovCiAJQVVESU9fU0VUX1JFQURfQlVGRkVSID0gMHgxQywKKwlBVURJT19TRVRfUkVBRF9CVUZGRVJfSElHSCA9IDB4MzQsCiAKIAkvKiBkcml2ZXIgd3JpdGVzIG51bWJlciBvZiBieXRlcyB0byByZWFkICovCiAJQVVESU9fU1RBUlRfUkVBRCAgPSAweDIwLApAQCAtMTQ3LDYgKzE1Myw3IEBACiAKIAl3aGlsZSAoY291bnQgPiAwKSB7CiAJCXNzaXplX3QgY29weSA9IGNvdW50OworCiAJCWlmIChjb3B5ID4gV1JJVEVfQlVGRkVSX1NJWkUpCiAJCQljb3B5ID0gV1JJVEVfQlVGRkVSX1NJWkU7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkYXRhLT53YWl0LCAoZGF0YS0+YnVmZmVyX3N0YXR1cyAmCkBAIC0zMjEsMTQgKzMyOCwxOSBAQAogCQlnb3RvIGVycl9taXNjX3JlZ2lzdGVyX2ZhaWxlZDsKIAl9CiAKLQlBVURJT19XUklURShkYXRhLCBBVURJT19TRVRfV1JJVEVfQlVGRkVSXzEsIGJ1Zl9hZGRyKTsKLQlBVURJT19XUklURShkYXRhLCBBVURJT19TRVRfV1JJVEVfQlVGRkVSXzIsCi0JCQkJCQlidWZfYWRkciArIFdSSVRFX0JVRkZFUl9TSVpFKTsKKwlBVURJT19XUklURTY0KGRhdGEsIEFVRElPX1NFVF9XUklURV9CVUZGRVJfMSwKKwkJCQlBVURJT19TRVRfV1JJVEVfQlVGRkVSXzFfSElHSCwgYnVmX2FkZHIpOworCWJ1Zl9hZGRyICs9IFdSSVRFX0JVRkZFUl9TSVpFOworCisJQVVESU9fV1JJVEU2NChkYXRhLCBBVURJT19TRVRfV1JJVEVfQlVGRkVSXzIsCisJCQkJQVVESU9fU0VUX1dSSVRFX0JVRkZFUl8yX0hJR0gsIGJ1Zl9hZGRyKTsKKworCWJ1Zl9hZGRyICs9IFdSSVRFX0JVRkZFUl9TSVpFOwogCiAJZGF0YS0+cmVhZF9zdXBwb3J0ZWQgPSBBVURJT19SRUFEKGRhdGEsIEFVRElPX1JFQURfU1VQUE9SVEVEKTsKIAlpZiAoZGF0YS0+cmVhZF9zdXBwb3J0ZWQpCi0JCUFVRElPX1dSSVRFKGRhdGEsIEFVRElPX1NFVF9SRUFEX0JVRkZFUiwKLQkJCQkJYnVmX2FkZHIgKyAyICogV1JJVEVfQlVGRkVSX1NJWkUpOworCQlBVURJT19XUklURTY0KGRhdGEsIEFVRElPX1NFVF9SRUFEX0JVRkZFUiwKKwkJCQlBVURJT19TRVRfUkVBRF9CVUZGRVJfSElHSCwgYnVmX2FkZHIpOwogCiAJYXVkaW9fZGF0YSA9IGRhdGE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvZ29sZGZpc2hfbmFuZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvbGRmaXNoL2dvbGRmaXNoX25hbmQuYwppbmRleCBlY2EwODczLi4wOTI2MDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvZ29sZGZpc2hfbmFuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nb2xkZmlzaC9nb2xkZmlzaF9uYW5kLmMKQEAgLTI0LDEzICsyNCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2dvbGRmaXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNpbmNsdWRlICJnb2xkZmlzaF9uYW5kX3JlZy5oIgogCiBzdHJ1Y3QgZ29sZGZpc2hfbmFuZCB7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBsb2NrOwogCXVuc2lnbmVkIGNoYXIgX19pb21lbSAgKmJhc2U7CiAJc3RydWN0IGNtZF9wYXJhbXMgICAgICAgKmNtZF9wYXJhbXM7CiAJc2l6ZV90ICAgICAgICAgICAgICAgICAgbXRkX2NvdW50OwpAQCAtNjYsNyArNjcsNyBAQAogCWNwcy0+YWRkcl9oaWdoID0gKHUzMikoYWRkciA+PiAzMik7CiAJY3BzLT5hZGRyX2xvdyA9ICh1MzIpYWRkcjsKIAljcHMtPnRyYW5zZmVyX3NpemUgPSBsZW47Ci0JY3BzLT5kYXRhID0gKHUzMilwdHI7CisJY3BzLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHRyOwogCXdyaXRlbChjbWRwLCBiYXNlICsgTkFORF9DT01NQU5EKTsKIAkqcnYgPSBjcHMtPnJlc3VsdDsKIAlyZXR1cm4gMDsKQEAgLTc3LDIwICs3OCwxOSBAQAogewogCXN0cnVjdCBnb2xkZmlzaF9uYW5kICpuYW5kID0gbXRkLT5wcml2OwogCXUzMiBydjsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAl1bnNpZ25lZCBjaGFyIF9faW9tZW0gICpiYXNlID0gbmFuZC0+YmFzZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuYW5kLT5sb2NrLCBpcnFfZmxhZ3MpOworCW11dGV4X2xvY2soJm5hbmQtPmxvY2spOwogCWlmIChnb2xkZmlzaF9uYW5kX2NtZF93aXRoX3BhcmFtcyhtdGQsIGNtZCwgYWRkciwgbGVuLCBwdHIsICZydikpIHsKIAkJd3JpdGVsKG10ZCAtIG5hbmQtPm10ZCwgYmFzZSArIE5BTkRfREVWKTsKIAkJd3JpdGVsKCh1MzIpKGFkZHIgPj4gMzIpLCBiYXNlICsgTkFORF9BRERSX0hJR0gpOwogCQl3cml0ZWwoKHUzMilhZGRyLCBiYXNlICsgTkFORF9BRERSX0xPVyk7CiAJCXdyaXRlbChsZW4sIGJhc2UgKyBOQU5EX1RSQU5TRkVSX1NJWkUpOwotCQl3cml0ZWwoKHUzMilwdHIsIGJhc2UgKyBOQU5EX0RBVEEpOworCQlnZl93cml0ZTY0KCh1NjQpcHRyLCBiYXNlICsgTkFORF9EQVRBLCBiYXNlICsgTkFORF9EQVRBX0hJR0gpOwogCQl3cml0ZWwoY21kLCBiYXNlICsgTkFORF9DT01NQU5EKTsKIAkJcnYgPSByZWFkbChiYXNlICsgTkFORF9SRVNVTFQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuYW5kLT5sb2NrLCBpcnFfZmxhZ3MpOworCW11dGV4X3VubG9jaygmbmFuZC0+bG9jayk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0xOTksOCArMTk5LDYgQEAKIAogCWlmIChmcm9tICsgbGVuID4gbXRkLT5zaXplKQogCQlnb3RvIGludmFsaWRfYXJnOwotCWlmIChsZW4gIT0gbXRkLT53cml0ZXNpemUpCi0JCWdvdG8gaW52YWxpZF9hcmc7CiAKIAlyZW0gPSBkb19kaXYoZnJvbSwgbXRkLT53cml0ZXNpemUpOwogCWlmIChyZW0pCkBAIC0yMjMsOCArMjIxLDYgQEAKIAogCWlmICh0byArIGxlbiA+IG10ZC0+c2l6ZSkKIAkJZ290byBpbnZhbGlkX2FyZzsKLQlpZiAobGVuICE9IG10ZC0+d3JpdGVzaXplKQotCQlnb3RvIGludmFsaWRfYXJnOwogCiAJcmVtID0gZG9fZGl2KHRvLCBtdGQtPndyaXRlc2l6ZSk7CiAJaWYgKHJlbSkKQEAgLTMwNywxMiArMzAzLDExIEBACiAJdTMyIG5hbWVfbGVuOwogCXUzMiByZXN1bHQ7CiAJdTMyIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXVuc2lnbmVkIGNoYXIgX19pb21lbSAgKmJhc2UgPSBuYW5kLT5iYXNlOwogCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gJm5hbmQtPm10ZFtpZF07CiAJY2hhciAqbmFtZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuYW5kLT5sb2NrLCBpcnFfZmxhZ3MpOworCW11dGV4X2xvY2soJm5hbmQtPmxvY2spOwogCXdyaXRlbChpZCwgYmFzZSArIE5BTkRfREVWKTsKIAlmbGFncyA9IHJlYWRsKGJhc2UgKyBOQU5EX0RFVl9GTEFHUyk7CiAJbmFtZV9sZW4gPSByZWFkbChiYXNlICsgTkFORF9ERVZfTkFNRV9MRU4pOwpAQCAtMzI5LDcgKzMyNCw3IEBACiAJCSJnb2xkZmlzaCBuYW5kIGRldiVkOiBzaXplICVsbHgsIHBhZ2UgJWQsIGV4dHJhICVkLCBlcmFzZSAlZFxuIiwKIAkJICAgICAgIGlkLCBtdGQtPnNpemUsIG10ZC0+d3JpdGVzaXplLAogCQkgICAgICAgbXRkLT5vb2JzaXplLCBtdGQtPmVyYXNlc2l6ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmFuZC0+bG9jaywgaXJxX2ZsYWdzKTsKKwltdXRleF91bmxvY2soJm5hbmQtPmxvY2spOwogCiAJbXRkLT5wcml2ID0gbmFuZDsKIApAQCAtNDA1LDcgKzQwMCw3IEBACiAJaWYgKG5hbmQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcGluX2xvY2tfaW5pdCgmbmFuZC0+bG9jayk7CisJbXV0ZXhfaW5pdCgmbmFuZC0+bG9jayk7CiAJbmFuZC0+YmFzZSA9IGJhc2U7CiAJbmFuZC0+bXRkX2NvdW50ID0gbnVtX2RldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuYW5kKTsKQEAgLTQyNSw2ICs0MjAsNyBAQAogewogCXN0cnVjdCBnb2xkZmlzaF9uYW5kICpuYW5kID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+bXRkX2NvdW50OyBpKyspIHsKIAkJaWYgKG5hbmQtPm10ZFtpXS5uYW1lKQogCQkJbXRkX2RldmljZV91bnJlZ2lzdGVyKCZuYW5kLT5tdGRbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvbGRmaXNoL2dvbGRmaXNoX25hbmRfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvZ29sZGZpc2hfbmFuZF9yZWcuaAppbmRleCBkZGZkYTcxLi5mZTdmNDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvZ29sZGZpc2hfbmFuZF9yZWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ29sZGZpc2gvZ29sZGZpc2hfbmFuZF9yZWcuaApAQCAtNTcsNiArNTcsNyBAQAogCU5BTkRfUkVTVUxUICAgICAgICAgPSAweDA0MCwKIAlOQU5EX0NPTU1BTkQgICAgICAgID0gMHgwNDQsCiAJTkFORF9EQVRBICAgICAgICAgICA9IDB4MDQ4LAorCU5BTkRfREFUQV9ISUdICSAgICA9IDB4MTAwLAogCU5BTkRfVFJBTlNGRVJfU0laRSAgPSAweDA0YywKIAlOQU5EX0FERFJfTE9XICAgICAgID0gMHgwNTAsCiAJTkFORF9BRERSX0hJR0ggICAgICA9IDB4MDU0LApAQCAtNjksNyArNzAsNyBAQAogCXVpbnQzMl90IGFkZHJfbG93OwogCXVpbnQzMl90IGFkZHJfaGlnaDsKIAl1aW50MzJfdCB0cmFuc2Zlcl9zaXplOwotCXVpbnQzMl90IGRhdGE7CisJdW5zaWduZWQgbG9uZyBkYXRhOwogCXVpbnQzMl90IHJlc3VsdDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nc19mcGdhYm9vdC9nc19mcGdhYm9vdC5jIGIvZHJpdmVycy9zdGFnaW5nL2dzX2ZwZ2Fib290L2dzX2ZwZ2Fib290LmMKaW5kZXggNzUwNjkwMC4uNmFhOWQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dzX2ZwZ2Fib290L2dzX2ZwZ2Fib290LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dzX2ZwZ2Fib290L2dzX2ZwZ2Fib290LmMKQEAgLTIxNCw4ICsyMTQsOCBAQAogewogCWNoYXIgKmJpdGRhdGE7CiAJaW50IHNpemUsIGksIGNudDsKLQljbnQgPSAwOwogCisJY250ID0gMDsKIAliaXRkYXRhID0gKGNoYXIgKilmaW1hZ2UtPmZwZ2FkYXRhOwogCXNpemUgPSBmaW1hZ2UtPmxlbmRhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nc19mcGdhYm9vdC9pby5jIGIvZHJpdmVycy9zdGFnaW5nL2dzX2ZwZ2Fib290L2lvLmMKaW5kZXggYjdiZThlMy4uMjNjMTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dzX2ZwZ2Fib290L2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dzX2ZwZ2Fib290L2lvLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIHZvaWQgeGxfc2hpZnRfY2NsayhpbnQgY291bnQpCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl4bF9jY2xrX2IoMSk7CiAJCXhsX2NjbGtfYigwKTsKQEAgLTg1LDYgKzg2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBiaXRzd2FwKHVuc2lnbmVkIGNoYXIgcykKIHsKIAl1bnNpZ25lZCBjaGFyIGQ7CisKIAlkID0gKCgocyYweDgwKT4+NykgfCAoKHMmMHg0MCk+PjUpIHwgKChzJjB4MjApPj4zKSB8ICgocyYweDEwKT4+MSkgfAogCQkoKHMmMHgwOCk8PDEpIHwgKChzJjB4MDQpPDwzKSB8ICgocyYweDAyKTw8NSkgfCAoKHMmMHgwMSk8PDcpKTsKIAlyZXR1cm4gZDsKQEAgLTEzNSw2ICsxMzcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKGludDMyX3QgcG9ydCwgdWludDMyX3QgZ3BpbywgdWludDMyX3QgdmFsdWUpCiB7CiAJaW50MzJfdCBnOworCiAJZyA9IDMxIC0gZ3BpbzsKIAlpZiAodmFsdWUpCiAJCW1wYzg1eHhfZ3Bpb19zZXRfaGlnaChwb3J0LCAxVSA8PCBnKTsKQEAgLTE0NSw2ICsxNDgsNyBAQAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUoaW50MzJfdCBwb3J0LCB1aW50MzJfdCBncGlvKQogewogCWludDMyX3QgZzsKKwogCWcgPSAzMSAtIGdwaW87CiAJcmV0dXJuICEhbXBjODV4eF9ncGlvX2dldChwb3J0LCAxVSA8PCBnKTsKIH0KQEAgLTE4NCw2ICsxODgsNyBAQAogc3RhdGljIGlubGluZSB1aW50MzJfdCBiaXRfcmVtYXBfYnl0ZTAodWludDMyX3QgcykKIHsKIAl1aW50MzJfdCBkOworCiAJZCA9ICgoKHMmMHg4MCk+PjcpIHwgKChzJjB4NDApPj41KSB8ICgocyYweDIwKT4+MykgfCAoKHMmMHgxMCk+PjEpIHwKIAkJKChzJjB4MDgpPDwxKSB8ICgocyYweDA0KTw8MykgfCAoKHMmMHgwMik8PDYpIHwgKChzJjB4MDEpPDw5KSk7CiAJcmV0dXJuIGQ7CkBAIC0xOTUsNiArMjAwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBieXRlMF9vdXQodW5zaWduZWQgY2hhciBkYXRhKQogewogCXVpbnQzMl90IHN3YXAzMjsKKwogCXN3YXAzMiA9ICBiaXRfcmVtYXBfYnl0ZTAoKHVpbnQzMl90KSBkYXRhKSA8PCA4OwogCiAJbXBjODV4eF9ncGlvX3NldCgwLCAweDAwMDJCRjAwLCAodWludDMyX3QpIHN3YXAzMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vaWlvX3V0aWxzLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vaWlvX3V0aWxzLmgKaW5kZXggMjA2NDgzOS4uYTljZmMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2lpb191dGlscy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9paW9fdXRpbHMuaApAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkJZnJlZShmaWxlbmFtZSk7CiAJCQkJZ290byBlcnJvcl9jbG9zZV9kaXI7CiAJCQl9Ci0JCQlmc2NhbmYoc3lzZnNmcCwgIiV1IiwgJnJldCk7CisJCQlmc2NhbmYoc3lzZnNmcCwgIiVpIiwgJnJldCk7CiAJCQlpZiAocmV0ID09IDEpCiAJCQkJKCpjb3VudGVyKSsrOwogCQkJZmNsb3NlKHN5c2ZzZnApOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCQkJcmV0ID0gLWVycm5vOwogCQkJCWdvdG8gZXJyb3JfY2xlYW51cF9hcnJheTsKIAkJCX0KLQkJCWZzY2FuZihzeXNmc2ZwLCAiJXUiLCAmY3VycmVudF9lbmFibGVkKTsKKwkJCWZzY2FuZihzeXNmc2ZwLCAiJWkiLCAmY3VycmVudF9lbmFibGVkKTsKIAkJCWZjbG9zZShzeXNmc2ZwKTsKIAogCQkJaWYgKCFjdXJyZW50X2VuYWJsZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9LY29uZmlnCmluZGV4IDM2MzMyOTguLmI4N2UzODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvS2NvbmZpZwpAQCAtMzcsMjYgKzM3LDYgQEAKIAkgIFNheSB5ZXMgaGVyZSB0byBpbmNsdWRlIHBhcmFsbGVsIGludGVyZmFjZSBzdXBwb3J0IG9uIHRoZSBBRDc2MDYKIAkgIEFEQyBkcml2ZXIuCiAKLWNvbmZpZyBBRDc5OVgKLQl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ3OTl4IEFEQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJMkMKLQlzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX0JVRkZFUgotCXNlbGVjdCBBRDc5OVhfUklOR19CVUZGRVIKLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXM6Ci0JICBhZDc5OTEsIGFkNzk5NSwgYWQ3OTk5LCBhZDc5OTIsIGFkNzk5MywgYWQ3OTk0LCBhZDc5OTcsIGFkNzk5OAotCSAgaTJjIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMgKEFEQykuIFByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MKLQkgIHZpYSBzeXNmcy4KLQotY29uZmlnIEFENzk5WF9SSU5HX0JVRkZFUgotCWJvb2wgIkFuYWxvZyBEZXZpY2VzIEFENzk5eDogdXNlIHJpbmcgYnVmZmVyIgotCWRlcGVuZHMgb24gQUQ3OTlYCi0Jc2VsZWN0IElJT19CVUZGRVIKLQlzZWxlY3QgSUlPX1RSSUdHRVJFRF9CVUZGRVIKLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gaW5jbHVkZSByaW5nIGJ1ZmZlciBzdXBwb3J0IGluIHRoZSBBRDc5OVgKLQkgIEFEQyBkcml2ZXIuCi0KIGNvbmZpZyBBRDc3ODAKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ3NzgwIGFuZCBzaW1pbGFyIEFEQ3MgZHJpdmVyIgogCWRlcGVuZHMgb24gU1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL01ha2VmaWxlCmluZGV4IDNlOWZiMTQuLmFmZGNkMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL01ha2VmaWxlCkBAIC04LDEwICs4LDYgQEAKIGFkNzYwNi0kKENPTkZJR19BRDc2MDZfSUZBQ0VfU1BJKSArPSBhZDc2MDZfc3BpLm8KIG9iai0kKENPTkZJR19BRDc2MDYpICs9IGFkNzYwNi5vCiAKLWFkNzk5eC15IDo9IGFkNzk5eF9jb3JlLm8KLWFkNzk5eC0kKENPTkZJR19BRDc5OVhfUklOR19CVUZGRVIpICs9IGFkNzk5eF9yaW5nLm8KLW9iai0kKENPTkZJR19BRDc5OVgpICs9IGFkNzk5eC5vCi0KIG9iai0kKENPTkZJR19BRDcyOTEpICs9IGFkNzI5MS5vCiBvYmotJChDT05GSUdfQUQ3NzgwKSArPSBhZDc3ODAubwogb2JqLSQoQ09ORklHX0FENzgxNikgKz0gYWQ3ODE2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI4MGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI4MGEuYwppbmRleCAxYWMxMWY2Li5kMjE1ZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyODBhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MjgwYS5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAogCW1zZWNzID0gKHJldCA+PiAzKSAqIDcxNTAwOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1zZWNzKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbXNlY3MpOwogfQogCiBzdGF0aWMgc3NpemVfdCBhZDcyODBfc3RvcmVfYmFsYW5jZV90aW1lcihzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC02MTksNyArNjE5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGFkNzI4MF93cml0ZV9jaGFubmVsX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDYuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNi5oCmluZGV4IDkzYzcyOTkuLmVjODlkMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNi5oCkBAIC0xNCw3ICsxNCw3IEBACiAgKi8KIAogLyoqCi0gKiBzdHJ1Y3QgYWQ3NjA2X3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybS9ib2FyZCBzcGVjaWZjIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3QgYWQ3NjA2X3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybS9ib2FyZCBzcGVjaWZpYyBpbmZvcm1hdGlvbgogICogQGRlZmF1bHRfb3M6CQlkZWZhdWx0IG92ZXJzYW1wbGluZyB2YWx1ZSB7MCwgMiwgNCwgOCwgMTYsIDMyLCA2NH0KICAqIEBkZWZhdWx0X3JhbmdlOglkZWZhdWx0IHJhbmdlICsvLXs1MDAwLCAxMDAwMH0gbVZvbHQKICAqIEBncGlvX2NvbnZzdDoJbnVtYmVyIG9mIGdwaW8gY29ubmVjdGVkIHRvIHRoZSBDT05WU1QgcGluCkBAIC00MSw3ICs0MSw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBhZDc2MDZfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZjIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3QgYWQ3NjA2X2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmaWMgaW5mb3JtYXRpb24KICAqIEBuYW1lOgkJaWRlbnRpZmljYXRpb24gc3RyaW5nIGZvciBjaGlwCiAgKiBAaW50X3ZyZWZfbXY6CXRoZSBpbnRlcm5hbCByZWZlcmVuY2Ugdm9sdGFnZQogICogQGNoYW5uZWxzOgkJY2hhbm5lbCBzcGVjaWZpY2F0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzgxNi5jCmluZGV4IDIzNjljZjIuLjE1OGQ3NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzgxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzgxNi5jCkBAIC00MCw3ICs0MCw3IEBACiAKIAogLyoKLSAqIHN0cnVjdCBhZDc4MTZfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZjIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3QgYWQ3ODE2X2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmaWMgaW5mb3JtYXRpb24KICAqLwogCiBzdHJ1Y3QgYWQ3ODE2X2NoaXBfaW5mbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXguaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzhjODUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBNaWNoYWVsIEhlbm5lcmljaCwgQW5hbG9nIERldmljZXMgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgSm9uYXRoYW4gQ2FtZXJvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogYWQ3OTl4LmgKLSAqLwotCi0jaWZuZGVmIF9BRDc5OVhfSF8KLSNkZWZpbmUgIF9BRDc5OVhfSF8KLQotI2RlZmluZSBBRDc5OVhfQ0hBTk5FTF9TSElGVAkJCTQKLSNkZWZpbmUgQUQ3OTlYX1NUT1JBR0VCSVRTCQkJMTYKLS8qCi0gKiBBRDc5OTEsIEFENzk5NSBhbmQgQUQ3OTk5IGRlZmluZXMKLSAqLwotCi0jZGVmaW5lIEFENzk5MV9SRUZfU0VMCQkJCTB4MDgKLSNkZWZpbmUgQUQ3OTkxX0ZMVFIJCQkJMHgwNAotI2RlZmluZSBBRDc5OTFfQklUX1RSSUFMX0RFTEFZCQkJMHgwMgotI2RlZmluZSBBRDc5OTFfU0FNUExFX0RFTEFZCQkJMHgwMQotCi0vKgotICogQUQ3OTkyLCBBRDc5OTMsIEFENzk5NCwgQUQ3OTk3IGFuZCBBRDc5OTggZGVmaW5lcwotICovCi0KLSNkZWZpbmUgQUQ3OTk4X0ZMVFIJCQkJMHgwOAotI2RlZmluZSBBRDc5OThfQUxFUlRfRU4JCQkJMHgwNAotI2RlZmluZSBBRDc5OThfQlVTWV9BTEVSVAkJCTB4MDIKLSNkZWZpbmUgQUQ3OTk4X0JVU1lfQUxFUlRfUE9MCQkJMHgwMQotCi0jZGVmaW5lIEFENzk5OF9DT05WX1JFU19SRUcJCQkweDAKLSNkZWZpbmUgQUQ3OTk4X0FMRVJUX1NUQVRfUkVHCQkJMHgxCi0jZGVmaW5lIEFENzk5OF9DT05GX1JFRwkJCQkweDIKLSNkZWZpbmUgQUQ3OTk4X0NZQ0xFX1RNUl9SRUcJCQkweDMKLQotI2RlZmluZSBBRDc5OThfREFUQUxPV19SRUcoeCkJCQkoKHgpICogMyArIDB4NCkKLSNkZWZpbmUgQUQ3OTk4X0RBVEFISUdIX1JFRyh4KQkJCSgoeCkgKiAzICsgMHg1KQotI2RlZmluZSBBRDc5OThfSFlTVF9SRUcoeCkJCQkoKHgpICogMyArIDB4NikKLQotI2RlZmluZSBBRDc5OThfQ1lDX01BU0sJCQkJMHg3Ci0jZGVmaW5lIEFENzk5OF9DWUNfRElTCQkJCTB4MAotI2RlZmluZSBBRDc5OThfQ1lDX1RDT05GXzMyCQkJMHgxCi0jZGVmaW5lIEFENzk5OF9DWUNfVENPTkZfNjQJCQkweDIKLSNkZWZpbmUgQUQ3OTk4X0NZQ19UQ09ORl8xMjgJCQkweDMKLSNkZWZpbmUgQUQ3OTk4X0NZQ19UQ09ORl8yNTYJCQkweDQKLSNkZWZpbmUgQUQ3OTk4X0NZQ19UQ09ORl81MTIJCQkweDUKLSNkZWZpbmUgQUQ3OTk4X0NZQ19UQ09ORl8xMDI0CQkJMHg2Ci0jZGVmaW5lIEFENzk5OF9DWUNfVENPTkZfMjA0OAkJCTB4NwotCi0jZGVmaW5lIEFENzk5OF9BTEVSVF9TVEFUX0NMRUFSCQkJMHhGRgotCi0vKgotICogQUQ3OTk3IGFuZCBBRDc5OTcgZGVmaW5lcwotICovCi0KLSNkZWZpbmUgQUQ3OTk3XzhfUkVBRF9TSU5HTEUJCQkweDgwCi0jZGVmaW5lIEFENzk5N184X1JFQURfU0VRVUVOQ0UJCQkweDcwCi0vKiBUT0RPOiBtb3ZlIHRoaXMgaW50byBhIGNvbW1vbiBoZWFkZXIgKi8KLSNkZWZpbmUgUkVTX01BU0soYml0cykJKCgxIDw8IChiaXRzKSkgLSAxKQotCi1lbnVtIHsKLQlhZDc5OTEsCi0JYWQ3OTk1LAotCWFkNzk5OSwKLQlhZDc5OTIsCi0JYWQ3OTkzLAotCWFkNzk5NCwKLQlhZDc5OTcsCi0JYWQ3OTk4Ci19OwotCi1zdHJ1Y3QgYWQ3OTl4X3N0YXRlOwotCi0vKioKLSAqIHN0cnVjdCBhZDc5OXhfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZjIGluZm9ybWF0aW9uCi0gKiBAY2hhbm5lbDoJCWNoYW5uZWwgc3BlY2lmaWNhdGlvbgotICogQG51bV9jaGFubmVsczoJbnVtYmVyIG9mIGNoYW5uZWxzCi0gKiBAbW9uaXRvcl9tb2RlOgl3aGV0aGVyIHRoZSBjaGlwIHN1cHBvcnRzIG1vbml0b3IgaW50ZXJydXB0cwotICogQGRlZmF1bHRfY29uZmlnOglkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uCi0gKiBAZXZlbnRfYXR0cnM6CXBvaW50ZXIgdG8gdGhlIG1vbml0b3IgZXZlbnQgYXR0cmlidXRlIGdyb3VwCi0gKi8KLQotc3RydWN0IGFkNzk5eF9jaGlwX2luZm8gewotCXN0cnVjdCBpaW9fY2hhbl9zcGVjCQljaGFubmVsWzldOwotCWludAkJCQludW1fY2hhbm5lbHM7Ci0JdTE2CQkJCWRlZmF1bHRfY29uZmlnOwotCWNvbnN0IHN0cnVjdCBpaW9faW5mbwkJKmluZm87Ci19OwotCi1zdHJ1Y3QgYWQ3OTl4X3N0YXRlIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkJKmNsaWVudDsKLQljb25zdCBzdHJ1Y3QgYWQ3OTl4X2NoaXBfaW5mbwkqY2hpcF9pbmZvOwotCXN0cnVjdCByZWd1bGF0b3IJCSpyZWc7Ci0Jc3RydWN0IHJlZ3VsYXRvcgkJKnZyZWY7Ci0JdW5zaWduZWQJCQlpZDsKLQl1MTYJCQkJY29uZmlnOwotCi0JdTgJCQkJKnJ4X2J1ZjsKLQl1bnNpZ25lZCBpbnQJCQl0cmFuc2Zlcl9zaXplOwotfTsKLQotI2lmZGVmIENPTkZJR19BRDc5OVhfUklOR19CVUZGRVIKLWludCBhZDc5OXhfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLXZvaWQgYWQ3OTl4X3JpbmdfY2xlYW51cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLSNlbHNlIC8qIENPTkZJR19BRDc5OVhfUklOR19CVUZGRVIgKi8KLQotc3RhdGljIGlubGluZSBpbnQKLWFkNzk5eF9yZWdpc3Rlcl9yaW5nX2Z1bmNzX2FuZF9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZDc5OXhfcmluZ19jbGVhbnVwKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX0FENzk5WF9SSU5HX0JVRkZFUiAqLwotI2VuZGlmIC8qIF9BRDc5OVhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfcmluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmY2YzAzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgTWljaGFlbCBIZW5uZXJpY2gsIEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIEpvbmF0aGFuIENhbWVyb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIGFkNzk5eF9yaW5nLmMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KLSNpbmNsdWRlIDxsaW51eC9paW8vYnVmZmVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJfY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9paW8vdHJpZ2dlcmVkX2J1ZmZlci5oPgotCi0jaW5jbHVkZSAiYWQ3OTl4LmgiCi0KLS8qKgotICogYWQ3OTl4X3RyaWdnZXJfaGFuZGxlcigpIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgotICoKLSAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBvcHRpb24gaW4gdGhpcyBkcml2ZXIgdG8gZGlzYWJsZSB0aGUgc2F2aW5nIG9mCi0gKiB0aW1lc3RhbXBzIHdpdGhpbiB0aGUgcmluZy4KLSAqKi8KLQotc3RhdGljIGlycXJldHVybl90IGFkNzk5eF90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKLXsKLQlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+aW5kaW9fZGV2OwotCXN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKLQlpbnQgYl9zZW50OwotCXU4IGNtZDsKLQotCXN3aXRjaCAoc3QtPmlkKSB7Ci0JY2FzZSBhZDc5OTE6Ci0JY2FzZSBhZDc5OTU6Ci0JY2FzZSBhZDc5OTk6Ci0JCWNtZCA9IHN0LT5jb25maWcgfAotCQkJKCppbmRpb19kZXYtPmFjdGl2ZV9zY2FuX21hc2sgPDwgQUQ3OTlYX0NIQU5ORUxfU0hJRlQpOwotCQlicmVhazsKLQljYXNlIGFkNzk5MjoKLQljYXNlIGFkNzk5MzoKLQljYXNlIGFkNzk5NDoKLQkJY21kID0gKCppbmRpb19kZXYtPmFjdGl2ZV9zY2FuX21hc2sgPDwgQUQ3OTlYX0NIQU5ORUxfU0hJRlQpIHwKLQkJCUFENzk5OF9DT05WX1JFU19SRUc7Ci0JCWJyZWFrOwotCWNhc2UgYWQ3OTk3OgotCWNhc2UgYWQ3OTk4OgotCQljbWQgPSBBRDc5OTdfOF9SRUFEX1NFUVVFTkNFIHwgQUQ3OTk4X0NPTlZfUkVTX1JFRzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJY21kID0gMDsKLQl9Ci0KLQliX3NlbnQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShzdC0+Y2xpZW50LAotCQkJY21kLCBzdC0+dHJhbnNmZXJfc2l6ZSwgc3QtPnJ4X2J1Zik7Ci0JaWYgKGJfc2VudCA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWlvX3B1c2hfdG9fYnVmZmVyc193aXRoX3RpbWVzdGFtcChpbmRpb19kZXYsIHN0LT5yeF9idWYsCi0JCQlpaW9fZ2V0X3RpbWVfbnMoKSk7Ci1vdXQ6Ci0JaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotaW50IGFkNzk5eF9yZWdpc3Rlcl9yaW5nX2Z1bmNzX2FuZF9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGlpb190cmlnZ2VyZWRfYnVmZmVyX3NldHVwKGluZGlvX2RldiwgTlVMTCwKLQkJJmFkNzk5eF90cmlnZ2VyX2hhbmRsZXIsIE5VTEwpOwotfQotCi12b2lkIGFkNzk5eF9yaW5nX2NsZWFudXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlpaW9fdHJpZ2dlcmVkX2J1ZmZlcl9jbGVhbnVwKGluZGlvX2Rldik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9zcGVhcl9hZGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL3NwZWFyX2FkYy5jCmluZGV4IDk3MGQ5ZWQuLmM1NDkyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL3NwZWFyX2FkYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL3NwZWFyX2FkYy5jCkBAIC0yMiwzOSArMjIsMzYgQEAKICNpbmNsdWRlIDxsaW51eC9paW8vaWlvLmg+CiAjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CiAKLS8qCi0gKiBTUEVBUiByZWdpc3RlcnMgZGVmaW5pdGlvbnMKLSAqLwotCi0jZGVmaW5lIFNDQU5fUkFURV9MTyh4KQkJKCh4KSAmIDB4RkZGRikKLSNkZWZpbmUgU0NBTl9SQVRFX0hJKHgpCQkoKCh4KSA+PiAweDEwKSAmIDB4RkZGRikKLSNkZWZpbmUgQ0xLX0xPVyh4KQkJKCgoeCkgJiAweGYpIDw8IDApCi0jZGVmaW5lIENMS19ISUdIKHgpCQkoKCh4KSAmIDB4ZikgPDwgNCkKKy8qIFNQRUFSIHJlZ2lzdGVycyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTUEVBUjYwMF9BRENfU0NBTl9SQVRFX0xPKHgpCSgoeCkgJiAweEZGRkYpCisjZGVmaW5lIFNQRUFSNjAwX0FEQ19TQ0FOX1JBVEVfSEkoeCkJKCgoeCkgPj4gMHgxMCkgJiAweEZGRkYpCisjZGVmaW5lIFNQRUFSX0FEQ19DTEtfTE9XKHgpCQkoKCh4KSAmIDB4ZikgPDwgMCkKKyNkZWZpbmUgU1BFQVJfQURDX0NMS19ISUdIKHgpCQkoKCh4KSAmIDB4ZikgPDwgNCkKIAogLyogQml0IGRlZmluaXRpb25zIGZvciBTUEVBUl9BRENfU1RBVFVTICovCi0jZGVmaW5lIFNUQVJUX0NPTlZFUlNJT04JKDEgPDwgMCkKLSNkZWZpbmUgQ0hBTk5FTF9OVU0oeCkJCSgoeCkgPDwgMSkKLSNkZWZpbmUgQURDX0VOQUJMRQkJKDEgPDwgNCkKLSNkZWZpbmUgQVZHX1NBTVBMRSh4KQkJKCh4KSA8PCA1KQotI2RlZmluZSBWUkVGX0lOVEVSTkFMCQkoMSA8PCA5KQorI2RlZmluZSBTUEVBUl9BRENfU1RBVFVTX1NUQVJUX0NPTlZFUlNJT04JKDEgPDwgMCkKKyNkZWZpbmUgU1BFQVJfQURDX1NUQVRVU19DSEFOTkVMX05VTSh4KQkJKCh4KSA8PCAxKQorI2RlZmluZSBTUEVBUl9BRENfU1RBVFVTX0FEQ19FTkFCTEUJCSgxIDw8IDQpCisjZGVmaW5lIFNQRUFSX0FEQ19TVEFUVVNfQVZHX1NBTVBMRSh4KQkJKCh4KSA8PCA1KQorI2RlZmluZSBTUEVBUl9BRENfU1RBVFVTX1ZSRUZfSU5URVJOQUwJCSgxIDw8IDkpCiAKLSNkZWZpbmUgREFUQV9NQVNLCQkweDAzZmYKLSNkZWZpbmUgREFUQV9CSVRTCQkxMAorI2RlZmluZSBTUEVBUl9BRENfREFUQV9NQVNLCQkweDAzZmYKKyNkZWZpbmUgU1BFQVJfQURDX0RBVEFfQklUUwkJMTAKIAotI2RlZmluZSBNT0RfTkFNRSAic3BlYXItYWRjIgorI2RlZmluZSBTUEVBUl9BRENfTU9EX05BTUUgInNwZWFyLWFkYyIKIAotI2RlZmluZSBBRENfQ0hBTk5FTF9OVU0JCTgKKyNkZWZpbmUgU1BFQVJfQURDX0NIQU5ORUxfTlVNCQk4CiAKLSNkZWZpbmUgQ0xLX01JTgkJCTI1MDAwMDAKLSNkZWZpbmUgQ0xLX01BWAkJCTIwMDAwMDAwCisjZGVmaW5lIFNQRUFSX0FEQ19DTEtfTUlOCQkJMjUwMDAwMAorI2RlZmluZSBTUEVBUl9BRENfQ0xLX01BWAkJCTIwMDAwMDAwCiAKIHN0cnVjdCBhZGNfcmVnc19zcGVhcjN4eCB7CiAJdTMyIHN0YXR1czsKIAl1MzIgYXZlcmFnZTsKIAl1MzIgc2Nhbl9yYXRlOwogCXUzMiBjbGs7CS8qIE5vdCBhdmFpbCBmb3IgMTM0MCAmIDEzMTAgKi8KLQl1MzIgY2hfY3RybFtBRENfQ0hBTk5FTF9OVU1dOwotCXUzMiBjaF9kYXRhW0FEQ19DSEFOTkVMX05VTV07CisJdTMyIGNoX2N0cmxbU1BFQVJfQURDX0NIQU5ORUxfTlVNXTsKKwl1MzIgY2hfZGF0YVtTUEVBUl9BRENfQ0hBTk5FTF9OVU1dOwogfTsKIAogc3RydWN0IGNoYW5fZGF0YSB7CkBAIC02NiwxNCArNjMsMTQgQEAKIAl1MzIgc3RhdHVzOwogCXUzMiBwYWRbMl07CiAJdTMyIGNsazsKLQl1MzIgY2hfY3RybFtBRENfQ0hBTk5FTF9OVU1dOwotCXN0cnVjdCBjaGFuX2RhdGEgY2hfZGF0YVtBRENfQ0hBTk5FTF9OVU1dOworCXUzMiBjaF9jdHJsW1NQRUFSX0FEQ19DSEFOTkVMX05VTV07CisJc3RydWN0IGNoYW5fZGF0YSBjaF9kYXRhW1NQRUFSX0FEQ19DSEFOTkVMX05VTV07CiAJdTMyIHNjYW5fcmF0ZV9sbzsKIAl1MzIgc2Nhbl9yYXRlX2hpOwogCXN0cnVjdCBjaGFuX2RhdGEgYXZlcmFnZTsKIH07CiAKLXN0cnVjdCBzcGVhcl9hZGNfaW5mbyB7CitzdHJ1Y3Qgc3BlYXJfYWRjX3N0YXRlIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCBhZGNfcmVnc19zcGVhcjN4eCBfX2lvbWVtICphZGNfYmFzZV9zcGVhcjN4eDsKIAlzdHJ1Y3QgYWRjX3JlZ3Nfc3BlYXI2eHggX19pb21lbSAqYWRjX2Jhc2Vfc3BlYXI2eHg7CkBAIC05MSwxMDAgKzg4LDEyOSBAQAogICogc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIGJlY2F1c2Ugb2YgZGlmZmVyZW50IHJlZ2lzdGVyIG9mZnNldHMKICAqIG9uIGRpZmZlcmVudCBTb0MgdmFyaWFudHMgKFNQRUFyMzAwIHZzIFNQRUFyNjAwIGV0YykuCiAgKi8KLXN0YXRpYyB2b2lkIHNwZWFyX2FkY19zZXRfc3RhdHVzKHN0cnVjdCBzcGVhcl9hZGNfaW5mbyAqaW5mbywgdTMyIHZhbCkKK3N0YXRpYyB2b2lkIHNwZWFyX2FkY19zZXRfc3RhdHVzKHN0cnVjdCBzcGVhcl9hZGNfc3RhdGUgKnN0LCB1MzIgdmFsKQogewotCV9fcmF3X3dyaXRlbCh2YWwsICZpbmZvLT5hZGNfYmFzZV9zcGVhcjZ4eC0+c3RhdHVzKTsKKwlfX3Jhd193cml0ZWwodmFsLCAmc3QtPmFkY19iYXNlX3NwZWFyNnh4LT5zdGF0dXMpOwogfQogCi1zdGF0aWMgdm9pZCBzcGVhcl9hZGNfc2V0X2NsayhzdHJ1Y3Qgc3BlYXJfYWRjX2luZm8gKmluZm8sIHUzMiB2YWwpCitzdGF0aWMgdm9pZCBzcGVhcl9hZGNfc2V0X2NsayhzdHJ1Y3Qgc3BlYXJfYWRjX3N0YXRlICpzdCwgdTMyIHZhbCkKIHsKIAl1MzIgY2xrX2hpZ2gsIGNsa19sb3csIGNvdW50OwotCXUzMiBhcGJfY2xrID0gY2xrX2dldF9yYXRlKGluZm8tPmNsayk7CisJdTMyIGFwYl9jbGsgPSBjbGtfZ2V0X3JhdGUoc3QtPmNsayk7CiAKIAljb3VudCA9IChhcGJfY2xrICsgdmFsIC0gMSkgLyB2YWw7CiAJY2xrX2xvdyA9IGNvdW50IC8gMjsKIAljbGtfaGlnaCA9IGNvdW50IC0gY2xrX2xvdzsKLQlpbmZvLT5jdXJyZW50X2NsayA9IGFwYl9jbGsgLyBjb3VudDsKKwlzdC0+Y3VycmVudF9jbGsgPSBhcGJfY2xrIC8gY291bnQ7CiAKLQlfX3Jhd193cml0ZWwoQ0xLX0xPVyhjbGtfbG93KSB8IENMS19ISUdIKGNsa19oaWdoKSwKLQkJICAgICAmaW5mby0+YWRjX2Jhc2Vfc3BlYXI2eHgtPmNsayk7CisJX19yYXdfd3JpdGVsKFNQRUFSX0FEQ19DTEtfTE9XKGNsa19sb3cpIHwgU1BFQVJfQURDX0NMS19ISUdIKGNsa19oaWdoKSwKKwkJICAgICAmc3QtPmFkY19iYXNlX3NwZWFyNnh4LT5jbGspOwogfQogCi1zdGF0aWMgdm9pZCBzcGVhcl9hZGNfc2V0X2N0cmwoc3RydWN0IHNwZWFyX2FkY19pbmZvICppbmZvLCBpbnQgbiwKK3N0YXRpYyB2b2lkIHNwZWFyX2FkY19zZXRfY3RybChzdHJ1Y3Qgc3BlYXJfYWRjX3N0YXRlICpzdCwgaW50IG4sCiAJCQkgICAgICAgdTMyIHZhbCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCAmaW5mby0+YWRjX2Jhc2Vfc3BlYXI2eHgtPmNoX2N0cmxbbl0pOworCV9fcmF3X3dyaXRlbCh2YWwsICZzdC0+YWRjX2Jhc2Vfc3BlYXI2eHgtPmNoX2N0cmxbbl0pOwogfQogCi1zdGF0aWMgdTMyIHNwZWFyX2FkY19nZXRfYXZlcmFnZShzdHJ1Y3Qgc3BlYXJfYWRjX2luZm8gKmluZm8pCitzdGF0aWMgdTMyIHNwZWFyX2FkY19nZXRfYXZlcmFnZShzdHJ1Y3Qgc3BlYXJfYWRjX3N0YXRlICpzdCkKIHsKLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mby0+bnAsICJzdCxzcGVhcjYwMC1hZGMiKSkgewotCQlyZXR1cm4gX19yYXdfcmVhZGwoJmluZm8tPmFkY19iYXNlX3NwZWFyNnh4LT5hdmVyYWdlLm1zYikgJgotCQkJREFUQV9NQVNLOworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzdC0+bnAsICJzdCxzcGVhcjYwMC1hZGMiKSkgeworCQlyZXR1cm4gX19yYXdfcmVhZGwoJnN0LT5hZGNfYmFzZV9zcGVhcjZ4eC0+YXZlcmFnZS5tc2IpICYKKwkJCVNQRUFSX0FEQ19EQVRBX01BU0s7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIF9fcmF3X3JlYWRsKCZpbmZvLT5hZGNfYmFzZV9zcGVhcjN4eC0+YXZlcmFnZSkgJgotCQkJREFUQV9NQVNLOworCQlyZXR1cm4gX19yYXdfcmVhZGwoJnN0LT5hZGNfYmFzZV9zcGVhcjN4eC0+YXZlcmFnZSkgJgorCQkJU1BFQVJfQURDX0RBVEFfTUFTSzsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNwZWFyX2FkY19zZXRfc2NhbnJhdGUoc3RydWN0IHNwZWFyX2FkY19pbmZvICppbmZvLCB1MzIgcmF0ZSkKK3N0YXRpYyB2b2lkIHNwZWFyX2FkY19zZXRfc2NhbnJhdGUoc3RydWN0IHNwZWFyX2FkY19zdGF0ZSAqc3QsIHUzMiByYXRlKQogewotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLT5ucCwgInN0LHNwZWFyNjAwLWFkYyIpKSB7Ci0JCV9fcmF3X3dyaXRlbChTQ0FOX1JBVEVfTE8ocmF0ZSksCi0JCQkgICAgICZpbmZvLT5hZGNfYmFzZV9zcGVhcjZ4eC0+c2Nhbl9yYXRlX2xvKTsKLQkJX19yYXdfd3JpdGVsKFNDQU5fUkFURV9ISShyYXRlKSwKLQkJCSAgICAgJmluZm8tPmFkY19iYXNlX3NwZWFyNnh4LT5zY2FuX3JhdGVfaGkpOworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzdC0+bnAsICJzdCxzcGVhcjYwMC1hZGMiKSkgeworCQlfX3Jhd193cml0ZWwoU1BFQVI2MDBfQURDX1NDQU5fUkFURV9MTyhyYXRlKSwKKwkJCSAgICAgJnN0LT5hZGNfYmFzZV9zcGVhcjZ4eC0+c2Nhbl9yYXRlX2xvKTsKKwkJX19yYXdfd3JpdGVsKFNQRUFSNjAwX0FEQ19TQ0FOX1JBVEVfSEkocmF0ZSksCisJCQkgICAgICZzdC0+YWRjX2Jhc2Vfc3BlYXI2eHgtPnNjYW5fcmF0ZV9oaSk7CiAJfSBlbHNlIHsKLQkJX19yYXdfd3JpdGVsKHJhdGUsICZpbmZvLT5hZGNfYmFzZV9zcGVhcjN4eC0+c2Nhbl9yYXRlKTsKKwkJX19yYXdfd3JpdGVsKHJhdGUsICZzdC0+YWRjX2Jhc2Vfc3BlYXIzeHgtPnNjYW5fcmF0ZSk7CiAJfQogfQogCi1zdGF0aWMgaW50IHNwZWFyX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCi0JCQkgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAotCQkJICBpbnQgKnZhbCwKLQkJCSAgaW50ICp2YWwyLAotCQkJICBsb25nIG1hc2spCitzdGF0aWMgaW50IHNwZWFyX2FkY19yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgICBpbnQgKnZhbCwKKwkJCSAgICAgIGludCAqdmFsMiwKKwkJCSAgICAgIGxvbmcgbWFzaykKIHsKLQlzdHJ1Y3Qgc3BlYXJfYWRjX2luZm8gKmluZm8gPSBpaW9fcHJpdihpbmRpb19kZXYpOworCXN0cnVjdCBzcGVhcl9hZGNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAl1MzIgc3RhdHVzOwogCiAJc3dpdGNoIChtYXNrKSB7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoKIAkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAKLQkJc3RhdHVzID0gQ0hBTk5FTF9OVU0oY2hhbi0+Y2hhbm5lbCkgfAotCQkJQVZHX1NBTVBMRShpbmZvLT5hdmdfc2FtcGxlcykgfAotCQkJU1RBUlRfQ09OVkVSU0lPTiB8IEFEQ19FTkFCTEU7Ci0JCWlmIChpbmZvLT52cmVmX2V4dGVybmFsID09IDApCi0JCQlzdGF0dXMgfD0gVlJFRl9JTlRFUk5BTDsKKwkJc3RhdHVzID0gU1BFQVJfQURDX1NUQVRVU19DSEFOTkVMX05VTShjaGFuLT5jaGFubmVsKSB8CisJCQlTUEVBUl9BRENfU1RBVFVTX0FWR19TQU1QTEUoc3QtPmF2Z19zYW1wbGVzKSB8CisJCQlTUEVBUl9BRENfU1RBVFVTX1NUQVJUX0NPTlZFUlNJT04gfAorCQkJU1BFQVJfQURDX1NUQVRVU19BRENfRU5BQkxFOworCQlpZiAoc3QtPnZyZWZfZXh0ZXJuYWwgPT0gMCkKKwkJCXN0YXR1cyB8PSBTUEVBUl9BRENfU1RBVFVTX1ZSRUZfSU5URVJOQUw7CiAKLQkJc3BlYXJfYWRjX3NldF9zdGF0dXMoaW5mbywgc3RhdHVzKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmaW5mby0+Y29tcGxldGlvbik7IC8qIHNldCBieSBJU1IgKi8KLQkJKnZhbCA9IGluZm8tPnZhbHVlOworCQlzcGVhcl9hZGNfc2V0X3N0YXR1cyhzdCwgc3RhdHVzKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmc3QtPmNvbXBsZXRpb24pOyAvKiBzZXQgYnkgSVNSICovCisJCSp2YWwgPSBzdC0+dmFsdWU7CiAKIAkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAogCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CiAKIAljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6Ci0JCSp2YWwgPSBpbmZvLT52cmVmX2V4dGVybmFsOwotCQkqdmFsMiA9IERBVEFfQklUUzsKKwkJKnZhbCA9IHN0LT52cmVmX2V4dGVybmFsOworCQkqdmFsMiA9IFNQRUFSX0FEQ19EQVRBX0JJVFM7CiAJCXJldHVybiBJSU9fVkFMX0ZSQUNUSU9OQUxfTE9HMjsKKwljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROgorCQkqdmFsID0gc3QtPmN1cnJlbnRfY2xrOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CiAJfQogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgc3BlYXJfYWRjX3dyaXRlX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgICAgIGludCB2YWwsCisJCQkgICAgICAgaW50IHZhbDIsCisJCQkgICAgICAgbG9uZyBtYXNrKQoreworCXN0cnVjdCBzcGVhcl9hZGNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtYXNrICE9IElJT19DSEFOX0lORk9fU0FNUF9GUkVRKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCisJaWYgKCh2YWwgPCBTUEVBUl9BRENfQ0xLX01JTikgfHwKKwkJKHZhbCA+IFNQRUFSX0FEQ19DTEtfTUFYKSB8fAorCQkodmFsMiAhPSAwKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzcGVhcl9hZGNfc2V0X2NsayhzdCwgdmFsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJcmV0dXJuIHJldDsKK30KKwogI2RlZmluZSBTUEVBUl9BRENfQ0hBTihpZHgpIHsJCQkJXAogCS50eXBlID0gSUlPX1ZPTFRBR0UsCQkJCVwKIAkuaW5kZXhlZCA9IDEsCQkJCQlcCiAJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksCVwKIAkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAlcCisJLmluZm9fbWFza19zaGFyZWRfYnlfYWxsID0gQklUKElJT19DSEFOX0lORk9fU0FNUF9GUkVRKSxcCiAJLmNoYW5uZWwgPSBpZHgsCQkJCQlcCi0JLnNjYW5fdHlwZSA9IHsJCQkJCVwKLQkJLnNpZ24gPSAndScsCQkJCVwKLQkJLnN0b3JhZ2ViaXRzID0gMTYsCQkJXAotCX0sCQkJCQkJXAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgc3BlYXJfYWRjX2lpb19jaGFubmVsc1tdID0gewpAQCAtMjAwLDkyICsyMjYsMzQgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNwZWFyX2FkY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBzcGVhcl9hZGNfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3BlYXJfYWRjX2luZm8gKilkZXZfaWQ7CisJc3RydWN0IHNwZWFyX2FkY19zdGF0ZSAqc3QgPSAoc3RydWN0IHNwZWFyX2FkY19zdGF0ZSAqKWRldl9pZDsKIAogCS8qIFJlYWQgdmFsdWUgdG8gY2xlYXIgSVJRICovCi0JaW5mby0+dmFsdWUgPSBzcGVhcl9hZGNfZ2V0X2F2ZXJhZ2UoaW5mbyk7Ci0JY29tcGxldGUoJmluZm8tPmNvbXBsZXRpb24pOworCXN0LT52YWx1ZSA9IHNwZWFyX2FkY19nZXRfYXZlcmFnZShzdCk7CisJY29tcGxldGUoJnN0LT5jb21wbGV0aW9uKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBzcGVhcl9hZGNfY29uZmlndXJlKHN0cnVjdCBzcGVhcl9hZGNfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgc3BlYXJfYWRjX2NvbmZpZ3VyZShzdHJ1Y3Qgc3BlYXJfYWRjX3N0YXRlICpzdCkKIHsKIAlpbnQgaTsKIAogCS8qIFJlc2V0IEFEQyBjb3JlICovCi0Jc3BlYXJfYWRjX3NldF9zdGF0dXMoaW5mbywgMCk7Ci0JX19yYXdfd3JpdGVsKDAsICZpbmZvLT5hZGNfYmFzZV9zcGVhcjZ4eC0+Y2xrKTsKKwlzcGVhcl9hZGNfc2V0X3N0YXR1cyhzdCwgMCk7CisJX19yYXdfd3JpdGVsKDAsICZzdC0+YWRjX2Jhc2Vfc3BlYXI2eHgtPmNsayk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJc3BlYXJfYWRjX3NldF9jdHJsKGluZm8sIGksIDApOwotCXNwZWFyX2FkY19zZXRfc2NhbnJhdGUoaW5mbywgMCk7CisJCXNwZWFyX2FkY19zZXRfY3RybChzdCwgaSwgMCk7CisJc3BlYXJfYWRjX3NldF9zY2FucmF0ZShzdCwgMCk7CiAKLQlzcGVhcl9hZGNfc2V0X2NsayhpbmZvLCBpbmZvLT5zYW1wbGluZ19mcmVxKTsKKwlzcGVhcl9hZGNfc2V0X2NsayhzdCwgc3QtPnNhbXBsaW5nX2ZyZXEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNwZWFyX2FkY19yZWFkX2ZyZXF1ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl90b19paW9fZGV2KGRldik7Ci0Jc3RydWN0IHNwZWFyX2FkY19pbmZvICppbmZvID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpbmZvLT5jdXJyZW50X2Nsayk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNwZWFyX2FkY193cml0ZV9mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSBjb25zdCBjaGFyICpidWYsCi0JCQkJCSBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfdG9faWlvX2RldihkZXYpOwotCXN0cnVjdCBzcGVhcl9hZGNfaW5mbyAqaW5mbyA9IGlpb19wcml2KGluZGlvX2Rldik7Ci0JdTMyIGNsa19oaWdoLCBjbGtfbG93LCBjb3VudDsKLQl1MzIgYXBiX2NsayA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwotCXVuc2lnbmVkIGxvbmcgbHZhbDsKLQlpbnQgcmV0OwotCi0JcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJmx2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCWlmICgobHZhbCA8IENMS19NSU4pIHx8IChsdmFsID4gQ0xLX01BWCkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY291bnQgPSAoYXBiX2NsayArIGx2YWwgLSAxKSAvIGx2YWw7Ci0JY2xrX2xvdyA9IGNvdW50IC8gMjsKLQljbGtfaGlnaCA9IGNvdW50IC0gY2xrX2xvdzsKLQlpbmZvLT5jdXJyZW50X2NsayA9IGFwYl9jbGsgLyBjb3VudDsKLQlzcGVhcl9hZGNfc2V0X2NsayhpbmZvLCBsdmFsKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwotfQotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX1NBTVBfRlJFUShTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgICAgIHNwZWFyX2FkY19yZWFkX2ZyZXF1ZW5jeSwKLQkJCSAgICAgIHNwZWFyX2FkY193cml0ZV9mcmVxdWVuY3kpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3BlYXJfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc3BlYXJfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IHNwZWFyX2F0dHJpYnV0ZXMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIHNwZWFyX2FkY19paW9faW5mbyA9IHsKLQkucmVhZF9yYXcgPSAmc3BlYXJfcmVhZF9yYXcsCi0JLmF0dHJzID0gJnNwZWFyX2F0dHJpYnV0ZV9ncm91cCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gc3BlYXJfYWRjX2luZm8gPSB7CisJLnJlYWRfcmF3ID0gJnNwZWFyX2FkY19yZWFkX3JhdywKKwkud3JpdGVfcmF3ID0gJnNwZWFyX2FkY193cml0ZV9yYXcsCiAJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTI5Myw0MCArMjYxLDQwIEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0Jc3RydWN0IHNwZWFyX2FkY19pbmZvICppbmZvOwotCXN0cnVjdCBpaW9fZGV2ICppb2RldiA9IE5VTEw7CisJc3RydWN0IHNwZWFyX2FkY19zdGF0ZSAqc3Q7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IE5VTEw7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAJaW50IGlycTsKIAotCWlvZGV2ID0gZGV2bV9paW9fZGV2aWNlX2FsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBzcGVhcl9hZGNfaW5mbykpOwotCWlmICghaW9kZXYpIHsKKwlpbmRpb19kZXYgPSBkZXZtX2lpb19kZXZpY2VfYWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHNwZWFyX2FkY19zdGF0ZSkpOworCWlmICghaW5kaW9fZGV2KSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIGFsbG9jYXRpbmcgaWlvIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWluZm8gPSBpaW9fcHJpdihpb2Rldik7Ci0JaW5mby0+bnAgPSBucDsKKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJc3QtPm5wID0gbnA7CiAKIAkvKgogCSAqIFNQRUFyNjAwIGhhcyBhIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXQgdGhhbiBvdGhlciBTUEVBciBTb0MncwogCSAqIChlLmcuIFNQRUFyM3h4KS4gTGV0J3MgcHJvdmlkZSB0d28gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzZXMKIAkgKiB0byBzdXBwb3J0IG11bHRpLWFyY2gga2VybmVscy4KIAkgKi8KLQlpbmZvLT5hZGNfYmFzZV9zcGVhcjZ4eCA9IG9mX2lvbWFwKG5wLCAwKTsKLQlpZiAoIWluZm8tPmFkY19iYXNlX3NwZWFyNnh4KSB7CisJc3QtPmFkY19iYXNlX3NwZWFyNnh4ID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghc3QtPmFkY19iYXNlX3NwZWFyNnh4KSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIG1hcHBpbmcgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWluZm8tPmFkY19iYXNlX3NwZWFyM3h4ID0KLQkJKHN0cnVjdCBhZGNfcmVnc19zcGVhcjN4eCBfX2lvbWVtICopaW5mby0+YWRjX2Jhc2Vfc3BlYXI2eHg7CisJc3QtPmFkY19iYXNlX3NwZWFyM3h4ID0KKwkJKHN0cnVjdCBhZGNfcmVnc19zcGVhcjN4eCBfX2lvbWVtICopc3QtPmFkY19iYXNlX3NwZWFyNnh4OwogCi0JaW5mby0+Y2xrID0gY2xrX2dldChkZXYsIE5VTEwpOwotCWlmIChJU19FUlIoaW5mby0+Y2xrKSkgeworCXN0LT5jbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzdC0+Y2xrKSkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCBnZXR0aW5nIGNsb2NrXG4iKTsKIAkJZ290byBlcnJvdXQxOwogCX0KIAotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbmZvLT5jbGspOworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzdC0+Y2xrKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIGVuYWJsaW5nIGNsb2NrXG4iKTsKIAkJZ290byBlcnJvdXQyOwpAQCAtMzM5LDE0ICszMDcsMTUgQEAKIAkJZ290byBlcnJvdXQzOwogCX0KIAotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHNwZWFyX2FkY19pc3IsIDAsIE1PRF9OQU1FLCBpbmZvKTsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBzcGVhcl9hZGNfaXNyLCAwLCBTUEVBUl9BRENfTU9EX05BTUUsCisJCQkgICAgICAgc3QpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHJlcXVlc3RpbmcgaW50ZXJydXB0XG4iKTsKIAkJZ290byBlcnJvdXQzOwogCX0KIAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInNhbXBsaW5nLWZyZXF1ZW5jeSIsCi0JCQkJICZpbmZvLT5zYW1wbGluZ19mcmVxKSkgeworCQkJCSAmc3QtPnNhbXBsaW5nX2ZyZXEpKSB7CiAJCWRldl9lcnIoZGV2LCAic2FtcGxpbmctZnJlcXVlbmN5IG1pc3NpbmcgaW4gRFRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycm91dDM7CkBAIC0zNTYsMjggKzMyNSwyOCBAQAogCSAqIE9wdGlvbmFsIGF2Z19zYW1wbGVzIGRlZmF1bHRzIHRvIDAsIHJlc3VsdGluZyBpbiBzaW5nbGUgZGF0YQogCSAqIGNvbnZlcnNpb24KIAkgKi8KLQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImF2ZXJhZ2Utc2FtcGxlcyIsICZpbmZvLT5hdmdfc2FtcGxlcyk7CisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhdmVyYWdlLXNhbXBsZXMiLCAmc3QtPmF2Z19zYW1wbGVzKTsKIAogCS8qCiAJICogT3B0aW9uYWwgdnJlZl9leHRlcm5hbCBkZWZhdWx0cyB0byAwLCByZXN1bHRpbmcgaW4gaW50ZXJuYWwgdnJlZgogCSAqIHNlbGVjdGlvbgogCSAqLwotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidnJlZi1leHRlcm5hbCIsICZpbmZvLT52cmVmX2V4dGVybmFsKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInZyZWYtZXh0ZXJuYWwiLCAmc3QtPnZyZWZfZXh0ZXJuYWwpOwogCi0Jc3BlYXJfYWRjX2NvbmZpZ3VyZShpbmZvKTsKKwlzcGVhcl9hZGNfY29uZmlndXJlKHN0KTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlvZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmRpb19kZXYpOwogCi0JaW5pdF9jb21wbGV0aW9uKCZpbmZvLT5jb21wbGV0aW9uKTsKKwlpbml0X2NvbXBsZXRpb24oJnN0LT5jb21wbGV0aW9uKTsKIAotCWlvZGV2LT5uYW1lID0gTU9EX05BTUU7Ci0JaW9kZXYtPmRldi5wYXJlbnQgPSBkZXY7Ci0JaW9kZXYtPmluZm8gPSAmc3BlYXJfYWRjX2lpb19pbmZvOwotCWlvZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwotCWlvZGV2LT5jaGFubmVscyA9IHNwZWFyX2FkY19paW9fY2hhbm5lbHM7Ci0JaW9kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3BlYXJfYWRjX2lpb19jaGFubmVscyk7CisJaW5kaW9fZGV2LT5uYW1lID0gU1BFQVJfQURDX01PRF9OQU1FOworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKKwlpbmRpb19kZXYtPmluZm8gPSAmc3BlYXJfYWRjX2luZm87CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBzcGVhcl9hZGNfaWlvX2NoYW5uZWxzOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShzcGVhcl9hZGNfaWlvX2NoYW5uZWxzKTsKIAotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoaW9kZXYpOworCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm91dDM7CiAKQEAgLTM4NiwyMyArMzU1LDIzIEBACiAJcmV0dXJuIDA7CiAKIGVycm91dDM6Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGluZm8tPmNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHN0LT5jbGspOwogZXJyb3V0MjoKLQljbGtfcHV0KGluZm8tPmNsayk7CisJY2xrX3B1dChzdC0+Y2xrKTsKIGVycm91dDE6Ci0JaW91bm1hcChpbmZvLT5hZGNfYmFzZV9zcGVhcjZ4eCk7CisJaW91bm1hcChzdC0+YWRjX2Jhc2Vfc3BlYXI2eHgpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc3BlYXJfYWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBpaW9fZGV2ICppb2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzcGVhcl9hZGNfaW5mbyAqaW5mbyA9IGlpb19wcml2KGlvZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNwZWFyX2FkY19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGlvZGV2KTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW5mby0+Y2xrKTsKLQljbGtfcHV0KGluZm8tPmNsayk7Ci0JaW91bm1hcChpbmZvLT5hZGNfYmFzZV9zcGVhcjZ4eCk7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHN0LT5jbGspOworCWNsa19wdXQoc3QtPmNsayk7CisJaW91bm1hcChzdC0+YWRjX2Jhc2Vfc3BlYXI2eHgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTksNyArMzg4LDcgQEAKIAkucHJvYmUJCT0gc3BlYXJfYWRjX3Byb2JlLAogCS5yZW1vdmUJCT0gc3BlYXJfYWRjX3JlbW92ZSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBNT0RfTkFNRSwKKwkJLm5hbWUJPSBTUEVBUl9BRENfTU9EX05BTUUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc3BlYXJfYWRjX2R0X2lkcyksCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRkYWMvYWR0NzMxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGRhYy9hZHQ3MzE2LmMKaW5kZXggOWYwZWJiMzIuLjVmMTc3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRkYWMvYWR0NzMxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRkYWMvYWR0NzMxNi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKICNkZWZpbmUgSURfQURUNzVYWAkJMHgxMAogCiAvKgotICogc3RydWN0IGFkdDczMTZfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZjIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3QgYWR0NzMxNl9jaGlwX2luZm8gLSBjaGlwIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKi8KIAogc3RydWN0IGFkdDczMTZfY2hpcF9pbmZvIHsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCShBRFQ3MzE2X1RFTVBfSU5UX01BU0spCiAKIC8qCi0gKiBzdHJ1Y3QgYWR0NzMxNl9jaGlwX2luZm8gLSBjaGlwIHNwZWNpZmMgaW5mb3JtYXRpb24KKyAqIHN0cnVjdCBhZHQ3MzE2X2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmaWMgaW5mb3JtYXRpb24KICAqLwogCiBzdHJ1Y3QgYWR0NzMxNl9saW1pdF9yZWdzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vY2RjL2FkNzE1Mi5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9jZGMvYWQ3MTUyLmMKaW5kZXggZjJjMzA5ZC4uODcxMTBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9jZGMvYWQ3MTUyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9jZGMvYWQ3MTUyLmMKQEAgLTc4LDcgKzc4LDcgQEAKIH07CiAKIC8qCi0gKiBzdHJ1Y3QgYWQ3MTUyX2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmYyBpbmZvcm1hdGlvbgorICogc3RydWN0IGFkNzE1Ml9jaGlwX2luZm8gLSBjaGlwIHNwZWNpZmljIGluZm9ybWF0aW9uCiAgKi8KIAogc3RydWN0IGFkNzE1Ml9jaGlwX2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9jZGMvYWQ3NzQ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2NkYy9hZDc3NDYuYwppbmRleCBjYmIxNTg4Li5lNmU5ZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2NkYy9hZDc3NDYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2NkYy9hZDc3NDYuYwpAQCAtOTEsNyArOTEsNyBAQAogI2RlZmluZSBBRDc3NDZfQ0FQREFDX0RBQ1AoeCkJCSgoeCkgJiAweDdGKQogCiAvKgotICogc3RydWN0IGFkNzc0Nl9jaGlwX2luZm8gLSBjaGlwIHNwZWNpZmMgaW5mb3JtYXRpb24KKyAqIHN0cnVjdCBhZDc3NDZfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZpYyBpbmZvcm1hdGlvbgogICovCiAKIHN0cnVjdCBhZDc3NDZfY2hpcF9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU4My5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTgzLmMKaW5kZXggMGE2MGRlZi4uZmE5NjQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTgzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTgzLmMKQEAgLTE2NSw4ICsxNjUsOSBAQAogCQkvKiBzZWxlY3QgcmVnaXN0ZXIgdG8gd3JpdGUgKi8KIAkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCAoVFNMMjU4WF9DTURfUkVHIHwgcmVnKSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInRhb3NfaTJjX3JlYWQgZmFpbGVkIHRvIHdyaXRlIgotCQkJCSIgcmVnaXN0ZXIgJXhcbiIsIHJlZyk7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkidGFvc19pMmNfcmVhZCBmYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgJXhcbiIsCisJCQkJcmVnKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJLyogcmVhZCB0aGUgZGF0YSAqLwpAQCAtMjExLDcgKzIxMiw3IEBACiAJaWYgKGNoaXAtPnRhb3NfY2hpcF9zdGF0dXMgIT0gVFNMMjU4WF9DSElQX1dPUktJTkcpIHsKIAkJLyogZGV2aWNlIGlzIG5vdCBlbmFibGVkICovCiAJCWRldl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LCAidGFvc19nZXRfbHV4IGRldmljZSBpcyBub3QgZW5hYmxlZFxuIik7Ci0JCXJldCA9IC1FQlVTWSA7CisJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIApAQCAtMjMxLDggKzIzMiw5IEBACiAJCWludCByZWcgPSBUU0wyNThYX0NNRF9SRUcgfCAoVFNMMjU4WF9BTFNfQ0hBTjBMTyArIGkpOwogCQlyZXQgPSB0YW9zX2kyY19yZWFkKGNoaXAtPmNsaWVudCwgcmVnLCAmYnVmW2ldLCAxKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LCAidGFvc19nZXRfbHV4IGZhaWxlZCB0byByZWFkIgotCQkJCSIgcmVnaXN0ZXIgJXhcbiIsIHJlZyk7CisJCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwKKwkJCQkidGFvc19nZXRfbHV4IGZhaWxlZCB0byByZWFkIHJlZ2lzdGVyICV4XG4iLAorCQkJCXJlZyk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAl9CkBAIC00NDksNyArNDUxLDcgQEAKIAkJfQogCX0KIAotCW1zbGVlcCgzKTsKKwl1c2xlZXBfcmFuZ2UoMzAwMCwgMzUwMCk7CiAJLyogTk9XIGVuYWJsZSB0aGUgQURDCiAJICogaW5pdGlhbGl6ZSB0aGUgZGVzaXJlZCBtb2RlIG9mIG9wZXJhdGlvbiAqLwogCXV0bXAgPSBUU0wyNThYX0NOVExfUFdSX09OIHwgVFNMMjU4WF9DTlRMX0FEQ19FTkJMOwpAQCAtODA5LDkgKzgxMSw3IEBACiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudHAtPmFkYXB0ZXIsCiAJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKLQkJZGV2X2VycigmY2xpZW50cC0+ZGV2LAotCQkJInRhb3NfcHJvYmUoKSAtIGkyYyBzbWJ1cyBieXRlIGRhdGEgIgotCQkJImZ1bmN0aW9ucyB1bnN1cHBvcnRlZFxuIik7CisJCWRldl9lcnIoJmNsaWVudHAtPmRldiwgInRhb3NfcHJvYmUoKSAtIGkyYyBzbWJ1cyBieXRlIGRhdGEgZnVuYyB1bnN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKQEAgLTgzMCwzMCArODMwLDMyIEBACiAJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudHAsCiAJCQkJKFRTTDI1OFhfQ01EX1JFRyB8IChUU0wyNThYX0NOVFJMICsgaSkpKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJmNsaWVudHAtPmRldiwgImkyY19zbWJ1c193cml0ZV9ieXRlcygpIHRvIGNtZCAiCi0JCQkJInJlZyBmYWlsZWQgaW4gdGFvc19wcm9iZSgpLCBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJCWRldl9lcnIoJmNsaWVudHAtPmRldiwKKwkJCQkiaTJjX3NtYnVzX3dyaXRlX2J5dGUgdG8gY21kIHJlZyBmYWlsZWQgaW4gdGFvc19wcm9iZSgpLCBlcnIgPSAlZFxuIiwKKwkJCQlyZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudHApOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmY2xpZW50cC0+ZGV2LCAiaTJjX3NtYnVzX3JlYWRfYnl0ZSBmcm9tICIKLQkJCQkicmVnIGZhaWxlZCBpbiB0YW9zX3Byb2JlKCksIGVyciA9ICVkXG4iLCByZXQpOwotCisJCQlkZXZfZXJyKCZjbGllbnRwLT5kZXYsCisJCQkJImkyY19zbWJ1c19yZWFkX2J5dGUgZnJvbSByZWcgZmFpbGVkIGluIHRhb3NfcHJvYmUoKSwgZXJyID0gJWRcbiIsCisJCQkJcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJYnVmW2ldID0gcmV0OwogCX0KIAogCWlmICghdGFvc190c2wyNTh4X2RldmljZShidWYpKSB7Ci0JCWRldl9pbmZvKCZjbGllbnRwLT5kZXYsICJpMmMgZGV2aWNlIGZvdW5kIGJ1dCBkb2VzIG5vdCBtYXRjaCAiCi0JCQkiZXhwZWN0ZWQgaWQgaW4gdGFvc19wcm9iZSgpXG4iKTsKKwkJZGV2X2luZm8oJmNsaWVudHAtPmRldiwKKwkJCSJpMmMgZGV2aWNlIGZvdW5kIGJ1dCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBpZCBpbiB0YW9zX3Byb2JlKClcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnRwLCAoVFNMMjU4WF9DTURfUkVHIHwgVFNMMjU4WF9DTlRSTCkpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJmNsaWVudHAtPmRldiwgImkyY19zbWJ1c193cml0ZV9ieXRlKCkgdG8gY21kIHJlZyAiCi0JCQkiZmFpbGVkIGluIHRhb3NfcHJvYmUoKSwgZXJyID0gJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJmNsaWVudHAtPmRldiwKKwkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIHRvIGNtZCByZWcgZmFpbGVkIGluIHRhb3NfcHJvYmUoKSwgZXJyID0gJWRcbiIsCisJCQlyZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXBlcmlvZGljLXJ0Yy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXBlcmlvZGljLXJ0Yy5jCmluZGV4IDQ4YTZhZmEuLjM4ZWNiNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1wZXJpb2RpYy1ydGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMKQEAgLTMzLDcgKzMzLDggQEAKIAlzdHJ1Y3QgaWlvX3BydGNfdHJpZ2dlcl9pbmZvICp0cmlnX2luZm8gPSBpaW9fdHJpZ2dlcl9nZXRfZHJ2ZGF0YSh0cmlnKTsKIAlpZiAodHJpZ19pbmZvLT5mcmVxdWVuY3kgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcHJpbnRrKEtFUk5fSU5GTyAidHJpZ2dlciBmcmVxdWVuY3kgaXMgJWRcbiIsIHRyaWdfaW5mby0+ZnJlcXVlbmN5KTsKKwlkZXZfaW5mbygmdHJpZ19pbmZvLT5ydGMtPmRldiwgInRyaWdnZXIgZnJlcXVlbmN5IGlzICVkXG4iLAorCQkJdHJpZ19pbmZvLT5mcmVxdWVuY3kpOwogCXJldHVybiBydGNfaXJxX3NldF9zdGF0ZSh0cmlnX2luZm8tPnJ0YywgJnRyaWdfaW5mby0+dGFzaywgc3RhdGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pbXgtaGRtaS5jIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaW14LWhkbWkuYwppbmRleCBkNDdkZWRkLi4xYjQ0MDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pbXgtaGRtaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lteC1oZG1pLmMKQEAgLTEyMCw4ICsxMjAsNiBAQAogCXN0cnVjdCBjbGsgKmlzZnJfY2xrOwogCXN0cnVjdCBjbGsgKmlhaGJfY2xrOwogCi0JZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBjb25uZWN0b3Jfc3RhdHVzOwotCiAJc3RydWN0IGhkbWlfZGF0YV9pbmZvIGhkbWlfZGF0YTsKIAlpbnQgdmljOwogCkBAIC0xNTksNiArMTU3LDcgQEAKIHN0YXRpYyB2b2lkIGhkbWlfbW9kYihzdHJ1Y3QgaW14X2hkbWkgKmhkbWksIHU4IGRhdGEsIHU4IG1hc2ssIHVuc2lnbmVkIHJlZykKIHsKIAl1OCB2YWwgPSBoZG1pX3JlYWRiKGhkbWksIHJlZykgJiB+bWFzazsKKwogCXZhbCB8PSBkYXRhICYgbWFzazsKIAloZG1pX3dyaXRlYihoZG1pLCB2YWwsIHJlZyk7CiB9CkBAIC02NTksMTMgKzY1OCwxMCBAQAogCiBzdGF0aWMgYm9vbCBoZG1pX3BoeV93YWl0X2kyY19kb25lKHN0cnVjdCBpbXhfaGRtaSAqaGRtaSwgaW50IG1zZWMpCiB7Ci0JdW5zaWduZWQgY2hhciB2YWwgPSAwOwotCXZhbCA9IGhkbWlfcmVhZGIoaGRtaSwgSERNSV9JSF9JMkNNUEhZX1NUQVQwKSAmIDB4MzsKLQl3aGlsZSAoIXZhbCkgewotCQl1ZGVsYXkoMTAwMCk7CisJd2hpbGUgKChoZG1pX3JlYWRiKGhkbWksIEhETUlfSUhfSTJDTVBIWV9TVEFUMCkgJiAweDMpID09IDApIHsKIAkJaWYgKG1zZWMtLSA9PSAwKQogCQkJcmV0dXJuIGZhbHNlOwotCQl2YWwgPSBoZG1pX3JlYWRiKGhkbWksIEhETUlfSUhfSTJDTVBIWV9TVEFUMCkgJiAweDM7CisJCXVkZWxheSgxMDAwKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMzgyLDcgKzEzNzgsOSBAQAogewogCXN0cnVjdCBpbXhfaGRtaSAqaGRtaSA9IGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCBpbXhfaGRtaSwKIAkJCQkJICAgICBjb25uZWN0b3IpOwotCXJldHVybiBoZG1pLT5jb25uZWN0b3Jfc3RhdHVzOworCisJcmV0dXJuIGhkbWlfcmVhZGIoaGRtaSwgSERNSV9QSFlfU1RBVDApICYgSERNSV9QSFlfSFBEID8KKwkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIH0KIAogc3RhdGljIGludCBpbXhfaGRtaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCkBAIC0xNTI0LDcgKzE1MjIsNiBAQAogCiAJCQloZG1pX21vZGIoaGRtaSwgMCwgSERNSV9QSFlfSFBELCBIRE1JX1BIWV9QT0wwKTsKIAotCQkJaGRtaS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQkJaW14X2hkbWlfcG93ZXJvbihoZG1pKTsKIAkJfSBlbHNlIHsKIAkJCWRldl9kYmcoaGRtaS0+ZGV2LCAiRVZFTlQ9cGx1Z291dFxuIik7CkBAIC0xNTMyLDcgKzE1MjksNiBAQAogCQkJaGRtaV9tb2RiKGhkbWksIEhETUlfUEhZX0hQRCwgSERNSV9QSFlfSFBELAogCQkJCUhETUlfUEhZX1BPTDApOwogCi0JCQloZG1pLT5jb25uZWN0b3Jfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAJCQlpbXhfaGRtaV9wb3dlcm9mZihoZG1pKTsKIAkJfQogCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaGRtaS0+Y29ubmVjdG9yLmRldik7CkBAIC0xNjA2LDEyICsxNjAyLDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaGRtaS0+ZGV2ID0gZGV2OwotCWhkbWktPmNvbm5lY3Rvcl9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAloZG1pLT5zYW1wbGVfcmF0ZSA9IDQ4MDAwOwogCWhkbWktPnJhdGlvID0gMTAwOwogCiAJaWYgKG9mX2lkKSB7CiAJCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmRldmljZV9pZCA9IG9mX2lkLT5kYXRhOworCiAJCWhkbWktPmRldl90eXBlID0gZGV2aWNlX2lkLT5kcml2ZXJfZGF0YTsKIAl9CiAKQEAgLTE2MjgsNyArMTYyNCw3IEBACiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGlycTsKIAogCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBpcnEsIGlteF9oZG1pX2hhcmRpcnEsCiAJCQkJCWlteF9oZG1pX2lycSwgSVJRRl9TSEFSRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaW14LWlwdS12My5oIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lteC1pcHUtdjMuaAppbmRleCBjNGQxNGVhLi5jMmM2ZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaW14LWlwdS12My5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pbXgtaXB1LXYzLmgKQEAgLTc2LDYgKzc2LDcgQEAKIAlJUFVfSVJRX0VPUyA9IDE5MiwKIH07CiAKK2ludCBpcHVfbWFwX2lycShzdHJ1Y3QgaXB1X3NvYyAqaXB1LCBpbnQgaXJxKTsKIGludCBpcHVfaWRtYWNfY2hhbm5lbF9pcnEoc3RydWN0IGlwdV9zb2MgKmlwdSwgc3RydWN0IGlwdXYzX2NoYW5uZWwgKmNoYW5uZWwsCiAJCWVudW0gaXB1X2NoYW5uZWxfaXJxIGlycSk7CiAKQEAgLTExNCw4ICsxMTUsMTAgQEAKIHZvaWQgaXB1X2RjX3B1dChzdHJ1Y3QgaXB1X2RjICpkYyk7CiBpbnQgaXB1X2RjX2luaXRfc3luYyhzdHJ1Y3QgaXB1X2RjICpkYywgc3RydWN0IGlwdV9kaSAqZGksIGJvb2wgaW50ZXJsYWNlZCwKIAkJdTMyIHBpeGVsX2ZtdCwgdTMyIHdpZHRoKTsKK3ZvaWQgaXB1X2RjX2VuYWJsZShzdHJ1Y3QgaXB1X3NvYyAqaXB1KTsKIHZvaWQgaXB1X2RjX2VuYWJsZV9jaGFubmVsKHN0cnVjdCBpcHVfZGMgKmRjKTsKIHZvaWQgaXB1X2RjX2Rpc2FibGVfY2hhbm5lbChzdHJ1Y3QgaXB1X2RjICpkYyk7Cit2b2lkIGlwdV9kY19kaXNhYmxlKHN0cnVjdCBpcHVfc29jICppcHUpOwogCiAvKgogICogSVBVIERpc3BsYXkgSW50ZXJmYWNlIChkaSkgZnVuY3Rpb25zCkBAIC0xNTIsOCArMTU1LDEwIEBACiAKIHN0cnVjdCBpcHVfZHAgKmlwdV9kcF9nZXQoc3RydWN0IGlwdV9zb2MgKmlwdSwgdW5zaWduZWQgaW50IGZsb3cpOwogdm9pZCBpcHVfZHBfcHV0KHN0cnVjdCBpcHVfZHAgKik7CitpbnQgaXB1X2RwX2VuYWJsZShzdHJ1Y3QgaXB1X3NvYyAqaXB1KTsKIGludCBpcHVfZHBfZW5hYmxlX2NoYW5uZWwoc3RydWN0IGlwdV9kcCAqZHApOwogdm9pZCBpcHVfZHBfZGlzYWJsZV9jaGFubmVsKHN0cnVjdCBpcHVfZHAgKmRwKTsKK3ZvaWQgaXB1X2RwX2Rpc2FibGUoc3RydWN0IGlwdV9zb2MgKmlwdSk7CiBpbnQgaXB1X2RwX3NldHVwX2NoYW5uZWwoc3RydWN0IGlwdV9kcCAqZHAsCiAJCWVudW0gaXB1X2NvbG9yX3NwYWNlIGluLCBlbnVtIGlwdV9jb2xvcl9zcGFjZSBvdXQpOwogaW50IGlwdV9kcF9zZXRfd2luZG93X3BvcyhzdHJ1Y3QgaXB1X2RwICosIHUxNiB4X3BvcywgdTE2IHlfcG9zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaXB1LWNvbW1vbi5jCmluZGV4IGNhODVkM2QuLmExZjdiMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1jb21tb24uYwpAQCAtNjk3LDYgKzY5NywxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2lkbWFjX2VuYWJsZV9jaGFubmVsKTsKIAorYm9vbCBpcHVfaWRtYWNfY2hhbm5lbF9idXN5KHN0cnVjdCBpcHVfc29jICppcHUsIHVuc2lnbmVkIGludCBjaG5vKQoreworCXJldHVybiAoaXB1X2lkbWFjX3JlYWQoaXB1LCBJRE1BQ19DSEFfQlVTWShjaG5vKSkgJiBpZG1hX21hc2soY2hubykpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2lkbWFjX2NoYW5uZWxfYnVzeSk7CisKIGludCBpcHVfaWRtYWNfd2FpdF9idXN5KHN0cnVjdCBpcHV2M19jaGFubmVsICpjaGFubmVsLCBpbnQgbXMpCiB7CiAJc3RydWN0IGlwdV9zb2MgKmlwdSA9IGNoYW5uZWwtPmlwdTsKQEAgLTcxNCw2ICs3MjAsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwdV9pZG1hY193YWl0X2J1c3kpOwogCitpbnQgaXB1X3dhaXRfaW50ZXJydXB0KHN0cnVjdCBpcHVfc29jICppcHUsIGludCBpcnEsIGludCBtcykKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpOworCWlwdV9jbV93cml0ZShpcHUsIEJJVChpcnEgJSAzMiksIElQVV9JTlRfU1RBVChpcnEgLyAzMikpOworCXdoaWxlICghKGlwdV9jbV9yZWFkKGlwdSwgSVBVX0lOVF9TVEFUKGlycSAvIDMyKSAmIEJJVChpcnEgJSAzMikpKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQljcHVfcmVsYXgoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwdV93YWl0X2ludGVycnVwdCk7CisKIGludCBpcHVfaWRtYWNfZGlzYWJsZV9jaGFubmVsKHN0cnVjdCBpcHV2M19jaGFubmVsICpjaGFubmVsKQogewogCXN0cnVjdCBpcHVfc29jICppcHUgPSBjaGFubmVsLT5pcHU7CkBAIC05MDAsNyArOTIyLDggQEAKIAkJc3RhdHVzICY9IGlwdV9jbV9yZWFkKGlwdSwgSVBVX0lOVF9DVFJMKHJlZ3NbaV0pKTsKIAogCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJnN0YXR1cywgMzIpIHsKLQkJCWlycSA9IGlycV9saW5lYXJfcmV2bWFwKGlwdS0+ZG9tYWluLCByZWdzW2ldICogMzIgKyBiaXQpOworCQkJaXJxID0gaXJxX2xpbmVhcl9yZXZtYXAoaXB1LT5kb21haW4sCisJCQkJCQlyZWdzW2ldICogMzIgKyBiaXQpOwogCQkJaWYgKGlycSkKIAkJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKIAkJfQpAQCAtOTMzLDE1ICs5NTYsMjIgQEAKIAljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCitpbnQgaXB1X21hcF9pcnEoc3RydWN0IGlwdV9zb2MgKmlwdSwgaW50IGlycSkKK3sKKwlpbnQgdmlycTsKKworCXZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChpcHUtPmRvbWFpbiwgaXJxKTsKKwlpZiAoIXZpcnEpCisJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoaXB1LT5kb21haW4sIGlycSk7CisKKwlyZXR1cm4gdmlycTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwdV9tYXBfaXJxKTsKKwogaW50IGlwdV9pZG1hY19jaGFubmVsX2lycShzdHJ1Y3QgaXB1X3NvYyAqaXB1LCBzdHJ1Y3QgaXB1djNfY2hhbm5lbCAqY2hhbm5lbCwKIAkJZW51bSBpcHVfY2hhbm5lbF9pcnEgaXJxX3R5cGUpCiB7Ci0JaW50IGlycSA9IGlycV9saW5lYXJfcmV2bWFwKGlwdS0+ZG9tYWluLCBpcnFfdHlwZSArIGNoYW5uZWwtPm51bSk7Ci0KLQlpZiAoIWlycSkKLQkJaXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGlwdS0+ZG9tYWluLCBpcnFfdHlwZSArIGNoYW5uZWwtPm51bSk7Ci0KLQlyZXR1cm4gaXJxOworCXJldHVybiBpcHVfbWFwX2lycShpcHUsIGlycV90eXBlICsgY2hhbm5lbC0+bnVtKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwdV9pZG1hY19jaGFubmVsX2lycSk7CiAKQEAgLTEwNTMsNyArMTA4Myw4IEBACiAJfQogCiAJcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGlwdS0+ZG9tYWluLCAzMiwgMSwgIklQVSIsCi0JCQkJCSAgICAgaGFuZGxlX2xldmVsX2lycSwgMCwgSVJRRl9WQUxJRCwgMCk7CisJCQkJCSAgICAgaGFuZGxlX2xldmVsX2lycSwgMCwKKwkJCQkJICAgICBJUlFGX1ZBTElELCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGlwdS0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIGdlbmVyaWMgaXJxIGNoaXBzXG4iKTsKIAkJaXJxX2RvbWFpbl9yZW1vdmUoaXB1LT5kb21haW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kYy5jIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kYy5jCmluZGV4IGQ1ZGU4YmIuLjc4NGE0YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtZGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaXB1LWRjLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSAiLi4vaW14LWRybS5oIgpAQCAtOTEsNiArOTIsNyBAQAogCUlQVV9EQ19NQVBfUkdCNTY1LAogCUlQVV9EQ19NQVBfR0JSMjQsIC8qIFRWRXYyICovCiAJSVBVX0RDX01BUF9CR1I2NjYsCisJSVBVX0RDX01BUF9MVkRTNjY2LAogCUlQVV9EQ19NQVBfQkdSMjQsCiB9OwogCkBAIC0xMTAsNiArMTEyLDkgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBpcHVfZGMJCWNoYW5uZWxzW0lQVV9EQ19OVU1fQ0hBTk5FTFNdOwogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcDsKKwlpbnQJCQlkY19pcnE7CisJaW50CQkJZHBfaXJxOwogfTsKIAogc3RhdGljIHZvaWQgZGNfbGlua19ldmVudChzdHJ1Y3QgaXB1X2RjICpkYywgaW50IGV2ZW50LCBpbnQgYWRkciwgaW50IHByaW9yaXR5KQpAQCAtMTUzLDYgKzE1OCw4IEBACiAJCXJldHVybiBJUFVfRENfTUFQX0dCUjI0OwogCWNhc2UgVjRMMl9QSVhfRk1UX0JHUjY2NjoKIAkJcmV0dXJuIElQVV9EQ19NQVBfQkdSNjY2OworCWNhc2UgdjRsMl9mb3VyY2MoJ0wnLCAnVicsICdEJywgJzYnKToKKwkJcmV0dXJuIElQVV9EQ19NQVBfTFZEUzY2NjsKIAljYXNlIFY0TDJfUElYX0ZNVF9CR1IyNDoKIAkJcmV0dXJuIElQVV9EQ19NQVBfQkdSMjQ7CiAJZGVmYXVsdDoKQEAgLTIyMCwxMiArMjI3LDE2IEBACiAJd3JpdGVsKDB4MCwgZGMtPmJhc2UgKyBEQ19XUl9DSF9BRERSKTsKIAl3cml0ZWwod2lkdGgsIHByaXYtPmRjX3JlZyArIERDX0RJU1BfQ09ORjIoZGMtPmRpKSk7CiAKLQlpcHVfbW9kdWxlX2VuYWJsZShwcml2LT5pcHUsIElQVV9DT05GX0RDX0VOKTsKLQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2RjX2luaXRfc3luYyk7CiAKK3ZvaWQgaXB1X2RjX2VuYWJsZShzdHJ1Y3QgaXB1X3NvYyAqaXB1KQoreworCWlwdV9tb2R1bGVfZW5hYmxlKGlwdSwgSVBVX0NPTkZfRENfRU4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2RjX2VuYWJsZSk7CisKIHZvaWQgaXB1X2RjX2VuYWJsZV9jaGFubmVsKHN0cnVjdCBpcHVfZGMgKmRjKQogewogCWludCBkaTsKQEAgLTIzOSw0MSArMjUwLDU1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcHVfZGNfZW5hYmxlX2NoYW5uZWwpOwogCitzdGF0aWMgaXJxcmV0dXJuX3QgZGNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpcHVfZGMgKmRjID0gZGV2X2lkOworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChkYy0+YmFzZSArIERDX1dSX0NIX0NPTkYpOworCXJlZyAmPSB+RENfV1JfQ0hfQ09ORl9QUk9HX1RZUEVfTUFTSzsKKwl3cml0ZWwocmVnLCBkYy0+YmFzZSArIERDX1dSX0NIX0NPTkYpOworCisJLyogVGhlIEZyZWVzY2FsZSBCU1Aga2VybmVsIGNsZWFycyBESXhfQ09VTlRFUl9SRUxFQVNFIGhlcmUgKi8KKworCWNvbXBsZXRlKCZkYy0+cHJpdi0+Y29tcCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiB2b2lkIGlwdV9kY19kaXNhYmxlX2NoYW5uZWwoc3RydWN0IGlwdV9kYyAqZGMpCiB7CiAJc3RydWN0IGlwdV9kY19wcml2ICpwcml2ID0gZGMtPnByaXY7CisJaW50IGlycSwgcmV0OwogCXUzMiB2YWw7Ci0JaW50IGlycSA9IDAsIHRpbWVvdXQgPSA1MDsKIAorCS8qIFRPRE86IEhhbmRsZSBNRU1fRkdfU1lOQyBkaWZmZXJlbnRseSBmcm9tIE1FTV9CR19TWU5DICovCiAJaWYgKGRjLT5jaG5vID09IDEpCi0JCWlycSA9IElQVV9JUlFfRENfRkNfMTsKKwkJaXJxID0gcHJpdi0+ZGNfaXJxOwogCWVsc2UgaWYgKGRjLT5jaG5vID09IDUpCi0JCWlycSA9IElQVV9JUlFfRFBfU0ZfRU5EOworCQlpcnEgPSBwcml2LT5kcF9pcnE7CiAJZWxzZQogCQlyZXR1cm47CiAKLQkvKiBzaG91bGQgd2FpdCBmb3IgdGhlIGludGVycnVwdCBoZXJlICovCi0JbWRlbGF5KDUwKTsKKwlpbml0X2NvbXBsZXRpb24oJnByaXYtPmNvbXApOworCWVuYWJsZV9pcnEoaXJxKTsKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnByaXYtPmNvbXAsIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKwlkaXNhYmxlX2lycShpcnEpOworCWlmIChyZXQgPD0gMCkgeworCQlkZXZfd2Fybihwcml2LT5kZXYsICJEQyBzdG9wIHRpbWVvdXQgYWZ0ZXIgNTAgbXNcbiIpOwogCi0JaWYgKGRjLT5kaSA9PSAwKQotCQl2YWwgPSAweDAwMDAwMDAyOwotCWVsc2UKLQkJdmFsID0gMHgwMDAwMDAyMDsKLQotCS8qIFdhaXQgZm9yIERDIHRyaXBsZSBidWZmZXIgdG8gZW1wdHkgKi8KLQl3aGlsZSAoKHJlYWRsKHByaXYtPmRjX3JlZyArIERDX1NUQVQpICYgdmFsKSAhPSB2YWwpIHsKLQkJdXNsZWVwX3JhbmdlKDIwMDAsIDIwMDAwKTsKLQkJdGltZW91dCAtPSAyOwotCQlpZiAodGltZW91dCA8PSAwKQotCQkJYnJlYWs7CisJCXZhbCA9IHJlYWRsKGRjLT5iYXNlICsgRENfV1JfQ0hfQ09ORik7CisJCXZhbCAmPSB+RENfV1JfQ0hfQ09ORl9QUk9HX1RZUEVfTUFTSzsKKwkJd3JpdGVsKHZhbCwgZGMtPmJhc2UgKyBEQ19XUl9DSF9DT05GKTsKIAl9Ci0KLQl2YWwgPSByZWFkbChkYy0+YmFzZSArIERDX1dSX0NIX0NPTkYpOwotCXZhbCAmPSB+RENfV1JfQ0hfQ09ORl9QUk9HX1RZUEVfTUFTSzsKLQl3cml0ZWwodmFsLCBkYy0+YmFzZSArIERDX1dSX0NIX0NPTkYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2RjX2Rpc2FibGVfY2hhbm5lbCk7CiAKK3ZvaWQgaXB1X2RjX2Rpc2FibGUoc3RydWN0IGlwdV9zb2MgKmlwdSkKK3sKKwlpcHVfbW9kdWxlX2Rpc2FibGUoaXB1LCBJUFVfQ09ORl9EQ19FTik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcHVfZGNfZGlzYWJsZSk7CisKIHN0YXRpYyB2b2lkIGlwdV9kY19tYXBfY29uZmlnKHN0cnVjdCBpcHVfZGNfcHJpdiAqcHJpdiwgZW51bSBpcHVfZGNfbWFwIG1hcCwKIAkJaW50IGJ5dGVfbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbWFzaykKIHsKQEAgLTM0MCw3ICszNjUsNyBAQAogCXN0cnVjdCBpcHVfZGNfcHJpdiAqcHJpdjsKIAlzdGF0aWMgaW50IGNoYW5uZWxfb2Zmc2V0c1tdID0geyAwLCAweDFjLCAweDM4LCAweDU0LCAweDU4LCAweDVjLAogCQkweDc4LCAwLCAweDk0LCAweGI0fTsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCiAJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKQEAgLTM2MSwxMyArMzg2LDMxIEBACiAJCXByaXYtPmNoYW5uZWxzW2ldLmJhc2UgPSBwcml2LT5kY19yZWcgKyBjaGFubmVsX29mZnNldHNbaV07CiAJfQogCisJcHJpdi0+ZGNfaXJxID0gaXB1X21hcF9pcnEoaXB1LCBJUFVfSVJRX0RDX0ZDXzEpOworCWlmICghcHJpdi0+ZGNfaXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcHJpdi0+ZGNfaXJxLCBkY19pcnFfaGFuZGxlciwgMCwgTlVMTCwKKwkJCSAgICAgICAmcHJpdi0+Y2hhbm5lbHNbMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRpc2FibGVfaXJxKHByaXYtPmRjX2lycSk7CisJcHJpdi0+ZHBfaXJxID0gaXB1X21hcF9pcnEoaXB1LCBJUFVfSVJRX0RQX1NGX0VORCk7CisJaWYgKCFwcml2LT5kcF9pcnEpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwcml2LT5kcF9pcnEsIGRjX2lycV9oYW5kbGVyLCAwLCBOVUxMLAorCQkJICAgICAgICZwcml2LT5jaGFubmVsc1s1XSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZGlzYWJsZV9pcnEocHJpdi0+ZHBfaXJxKTsKKwogCXdyaXRlbChEQ19XUl9DSF9DT05GX1dPUkRfU0laRV8yNCB8IERDX1dSX0NIX0NPTkZfRElTUF9JRF9QQVJBTExFTCgxKSB8CiAJCQlEQ19XUl9DSF9DT05GX1BST0dfRElfSUQsCiAJCQlwcml2LT5jaGFubmVsc1sxXS5iYXNlICsgRENfV1JfQ0hfQ09ORik7CiAJd3JpdGVsKERDX1dSX0NIX0NPTkZfV09SRF9TSVpFXzI0IHwgRENfV1JfQ0hfQ09ORl9ESVNQX0lEX1BBUkFMTEVMKDApLAogCQkJcHJpdi0+Y2hhbm5lbHNbNV0uYmFzZSArIERDX1dSX0NIX0NPTkYpOwogCi0Jd3JpdGVsKERDX0dFTl9TWU5DXzFfNl9TWU5DIHwgRENfR0VOX1NZTkNfUFJJT1JJVFlfMSwgcHJpdi0+ZGNfcmVnICsgRENfR0VOKTsKKwl3cml0ZWwoRENfR0VOX1NZTkNfMV82X1NZTkMgfCBEQ19HRU5fU1lOQ19QUklPUklUWV8xLAorCQlwcml2LT5kY19yZWcgKyBEQ19HRU4pOwogCiAJaXB1LT5kY19wcml2ID0gcHJpdjsKIApAQCAtMzk4LDYgKzQ0MSwxMiBAQAogCWlwdV9kY19tYXBfY29uZmlnKHByaXYsIElQVV9EQ19NQVBfQkdSNjY2LCAxLCAxMSwgMHhmYyk7IC8qIGdyZWVuICovCiAJaXB1X2RjX21hcF9jb25maWcocHJpdiwgSVBVX0RDX01BUF9CR1I2NjYsIDIsIDE3LCAweGZjKTsgLyogcmVkICovCiAKKwkvKiBsdmRzNjY2ICovCisJaXB1X2RjX21hcF9jbGVhcihwcml2LCBJUFVfRENfTUFQX0xWRFM2NjYpOworCWlwdV9kY19tYXBfY29uZmlnKHByaXYsIElQVV9EQ19NQVBfTFZEUzY2NiwgMCwgNSwgMHhmYyk7IC8qIGJsdWUgKi8KKwlpcHVfZGNfbWFwX2NvbmZpZyhwcml2LCBJUFVfRENfTUFQX0xWRFM2NjYsIDEsIDEzLCAweGZjKTsgLyogZ3JlZW4gKi8KKwlpcHVfZGNfbWFwX2NvbmZpZyhwcml2LCBJUFVfRENfTUFQX0xWRFM2NjYsIDIsIDIxLCAweGZjKTsgLyogcmVkICovCisKIAkvKiBiZ3IyNCAqLwogCWlwdV9kY19tYXBfY2xlYXIocHJpdiwgSVBVX0RDX01BUF9CR1IyNCk7CiAJaXB1X2RjX21hcF9jb25maWcocHJpdiwgSVBVX0RDX01BUF9CR1IyNCwgMiwgNywgMHhmZik7IC8qIHJlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kaS5jIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kaS5jCmluZGV4IDgyYTllYmEuLjg0OWIzZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaXB1LWRpLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFzaWctPmNsa19wb2wpCisJaWYgKHNpZy0+Y2xrX3BvbCkKIAkJZGlfZ2VuIHw9IERJX0dFTl9QT0xBUklUWV9ESVNQX0NMSzsKIAogCWlwdV9kaV93cml0ZShkaSwgZGlfZ2VuLCBESV9HRU5FUkFMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtZG1mYy5jIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kbWZjLmMKaW5kZXggNDUyMTMwMS4uNTlmMTgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kbWZjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kbWZjLmMKQEAgLTI4LDcgKzI4LDEyIEBACiAjZGVmaW5lIERNRkNfR0VORVJBTDEJCTB4MDAxNAogI2RlZmluZSBETUZDX0dFTkVSQUwyCQkweDAwMTgKICNkZWZpbmUgRE1GQ19JQ19DVFJMCQkweDAwMWMKLSNkZWZpbmUgRE1GQ19TVEFUCQkweDAwMjAKKyNkZWZpbmUgRE1GQ19XUl9DSEFOX0FMVAkweDAwMjAKKyNkZWZpbmUgRE1GQ19XUl9DSEFOX0RFRl9BTFQJMHgwMDI0CisjZGVmaW5lIERNRkNfRFBfQ0hBTl9BTFQJMHgwMDI4CisjZGVmaW5lIERNRkNfRFBfQ0hBTl9ERUZfQUxUCTB4MDAyYworI2RlZmluZSBETUZDX0dFTkVSQUwxX0FMVAkweDAwMzAKKyNkZWZpbmUgRE1GQ19TVEFUCQkweDAwMzQKIAogI2RlZmluZSBETUZDX1dSX0NIQU5fMV8yOAkJMAogI2RlZmluZSBETUZDX1dSX0NIQU5fMl80MQkJOApAQCAtMTMzLDYgKzEzOCwyMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2RtZmNfZW5hYmxlX2NoYW5uZWwpOwogCitzdGF0aWMgdm9pZCBpcHVfZG1mY193YWl0X2ZpZm9zKHN0cnVjdCBpcHVfZG1mY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCisJd2hpbGUgKChyZWFkbChwcml2LT5iYXNlICsgRE1GQ19TVEFUKSAmIDB4MDJmZmYwMDApICE9IDB4MDJmZmYwMDApIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWRldl93YXJuKHByaXYtPmRldiwKKwkJCQkgIlRpbWVvdXQgd2FpdGluZyBmb3IgRE1GQyBGSUZPcyB0byBjbGVhclxuIik7CisJCQlicmVhazsKKwkJfQorCQljcHVfcmVsYXgoKTsKKwl9Cit9CisKIHZvaWQgaXB1X2RtZmNfZGlzYWJsZV9jaGFubmVsKHN0cnVjdCBkbWZjX2NoYW5uZWwgKmRtZmMpCiB7CiAJc3RydWN0IGlwdV9kbWZjX3ByaXYgKnByaXYgPSBkbWZjLT5wcml2OwpAQCAtMTQxLDggKzE2MCwxMCBAQAogCiAJcHJpdi0+dXNlX2NvdW50LS07CiAKLQlpZiAoIXByaXYtPnVzZV9jb3VudCkKKwlpZiAoIXByaXYtPnVzZV9jb3VudCkgeworCQlpcHVfZG1mY193YWl0X2ZpZm9zKHByaXYpOwogCQlpcHVfbW9kdWxlX2Rpc2FibGUocHJpdi0+aXB1LCBJUFVfQ09ORl9ETUZDX0VOKTsKKwl9CiAKIAlpZiAocHJpdi0+dXNlX2NvdW50IDwgMCkKIAkJcHJpdi0+dXNlX2NvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtZHAuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtZHAuYwppbmRleCA1OGY4N2M4Li5kOTBmODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaXB1LWRwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1kcC5jCkBAIC0yMTUsMTAgKzIxNSw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcHVfZHBfc2V0dXBfY2hhbm5lbCk7CiAKLWludCBpcHVfZHBfZW5hYmxlX2NoYW5uZWwoc3RydWN0IGlwdV9kcCAqZHApCitpbnQgaXB1X2RwX2VuYWJsZShzdHJ1Y3QgaXB1X3NvYyAqaXB1KQogewotCXN0cnVjdCBpcHVfZmxvdyAqZmxvdyA9IHRvX2Zsb3coZHApOwotCXN0cnVjdCBpcHVfZHBfcHJpdiAqcHJpdiA9IGZsb3ctPnByaXY7CisJc3RydWN0IGlwdV9kcF9wcml2ICpwcml2ID0gaXB1LT5kcF9wcml2OwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCkBAIC0yMjcsMTUgKzIyNiwyOCBAQAogCiAJcHJpdi0+dXNlX2NvdW50Kys7CiAKLQlpZiAoZHAtPmZvcmVncm91bmQpIHsKLQkJdTMyIHJlZzsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCQlyZWcgPSByZWFkbChmbG93LT5iYXNlICsgRFBfQ09NX0NPTkYpOwotCQlyZWcgfD0gRFBfQ09NX0NPTkZfRkdfRU47Ci0JCXdyaXRlbChyZWcsIGZsb3ctPmJhc2UgKyBEUF9DT01fQ09ORik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcHVfZHBfZW5hYmxlKTsKIAotCQlpcHVfc3JtX2RwX3N5bmNfdXBkYXRlKHByaXYtPmlwdSk7Ci0JfQoraW50IGlwdV9kcF9lbmFibGVfY2hhbm5lbChzdHJ1Y3QgaXB1X2RwICpkcCkKK3sKKwlzdHJ1Y3QgaXB1X2Zsb3cgKmZsb3cgPSB0b19mbG93KGRwKTsKKwlzdHJ1Y3QgaXB1X2RwX3ByaXYgKnByaXYgPSBmbG93LT5wcml2OworCXUzMiByZWc7CisKKwlpZiAoIWRwLT5mb3JlZ3JvdW5kKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCXJlZyA9IHJlYWRsKGZsb3ctPmJhc2UgKyBEUF9DT01fQ09ORik7CisJcmVnIHw9IERQX0NPTV9DT05GX0ZHX0VOOworCXdyaXRlbChyZWcsIGZsb3ctPmJhc2UgKyBEUF9DT01fQ09ORik7CisKKwlpcHVfc3JtX2RwX3N5bmNfdXBkYXRlKHByaXYtPmlwdSk7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIApAQCAtMjQ3LDI2ICsyNTksMzkgQEAKIHsKIAlzdHJ1Y3QgaXB1X2Zsb3cgKmZsb3cgPSB0b19mbG93KGRwKTsKIAlzdHJ1Y3QgaXB1X2RwX3ByaXYgKnByaXYgPSBmbG93LT5wcml2OworCXUzMiByZWcsIGNzYzsKKworCWlmICghZHAtPmZvcmVncm91bmQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCXJlZyA9IHJlYWRsKGZsb3ctPmJhc2UgKyBEUF9DT01fQ09ORik7CisJY3NjID0gcmVnICYgRFBfQ09NX0NPTkZfQ1NDX0RFRl9NQVNLOworCWlmIChjc2MgPT0gRFBfQ09NX0NPTkZfQ1NDX0RFRl9GRykKKwkJcmVnICY9IH5EUF9DT01fQ09ORl9DU0NfREVGX01BU0s7CisKKwlyZWcgJj0gfkRQX0NPTV9DT05GX0ZHX0VOOworCXdyaXRlbChyZWcsIGZsb3ctPmJhc2UgKyBEUF9DT01fQ09ORik7CisKKwl3cml0ZWwoMCwgZmxvdy0+YmFzZSArIERQX0ZHX1BPUyk7CisJaXB1X3NybV9kcF9zeW5jX3VwZGF0ZShwcml2LT5pcHUpOworCisJaWYgKGlwdV9pZG1hY19jaGFubmVsX2J1c3kocHJpdi0+aXB1LCBJUFVWM19DSEFOTkVMX01FTV9CR19TWU5DKSkKKwkJaXB1X3dhaXRfaW50ZXJydXB0KHByaXYtPmlwdSwgSVBVX0lSUV9EUF9TRl9FTkQsIDUwKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2RwX2Rpc2FibGVfY2hhbm5lbCk7CisKK3ZvaWQgaXB1X2RwX2Rpc2FibGUoc3RydWN0IGlwdV9zb2MgKmlwdSkKK3sKKwlzdHJ1Y3QgaXB1X2RwX3ByaXYgKnByaXYgPSBpcHUtPmRwX3ByaXY7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlwcml2LT51c2VfY291bnQtLTsKIAotCWlmIChkcC0+Zm9yZWdyb3VuZCkgewotCQl1MzIgcmVnLCBjc2M7Ci0KLQkJcmVnID0gcmVhZGwoZmxvdy0+YmFzZSArIERQX0NPTV9DT05GKTsKLQkJY3NjID0gcmVnICYgRFBfQ09NX0NPTkZfQ1NDX0RFRl9NQVNLOwotCQlpZiAoY3NjID09IERQX0NPTV9DT05GX0NTQ19ERUZfRkcpCi0JCQlyZWcgJj0gfkRQX0NPTV9DT05GX0NTQ19ERUZfTUFTSzsKLQotCQlyZWcgJj0gfkRQX0NPTV9DT05GX0ZHX0VOOwotCQl3cml0ZWwocmVnLCBmbG93LT5iYXNlICsgRFBfQ09NX0NPTkYpOwotCi0JCXdyaXRlbCgwLCBmbG93LT5iYXNlICsgRFBfRkdfUE9TKTsKLQkJaXB1X3NybV9kcF9zeW5jX3VwZGF0ZShwcml2LT5pcHUpOwotCX0KLQogCWlmICghcHJpdi0+dXNlX2NvdW50KQogCQlpcHVfbW9kdWxlX2Rpc2FibGUocHJpdi0+aXB1LCBJUFVfQ09ORl9EUF9FTik7CiAKQEAgLTI3NSw3ICszMDAsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpcHVfZHBfZGlzYWJsZV9jaGFubmVsKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlwdV9kcF9kaXNhYmxlKTsKIAogc3RydWN0IGlwdV9kcCAqaXB1X2RwX2dldChzdHJ1Y3QgaXB1X3NvYyAqaXB1LCB1bnNpZ25lZCBpbnQgZmxvdykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtcHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHUtdjMvaXB1LXBydi5oCmluZGV4IDRkZjAwNTAuLmJmYzFiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdS12My9pcHUtcHJ2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1LXYzL2lwdS1wcnYuaApAQCAtMTg1LDYgKzE4NSw5IEBACiBpbnQgaXB1X21vZHVsZV9lbmFibGUoc3RydWN0IGlwdV9zb2MgKmlwdSwgdTMyIG1hc2spOwogaW50IGlwdV9tb2R1bGVfZGlzYWJsZShzdHJ1Y3QgaXB1X3NvYyAqaXB1LCB1MzIgbWFzayk7CiAKK2Jvb2wgaXB1X2lkbWFjX2NoYW5uZWxfYnVzeShzdHJ1Y3QgaXB1X3NvYyAqaXB1LCB1bnNpZ25lZCBpbnQgY2hubyk7CitpbnQgaXB1X3dhaXRfaW50ZXJydXB0KHN0cnVjdCBpcHVfc29jICppcHUsIGludCBpcnEsIGludCBtcyk7CisKIGludCBpcHVfZGlfaW5pdChzdHJ1Y3QgaXB1X3NvYyAqaXB1LCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpZCwKIAkJdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgbW9kdWxlLCBzdHJ1Y3QgY2xrICppcHVfY2xrKTsKIHZvaWQgaXB1X2RpX2V4aXQoc3RydWN0IGlwdV9zb2MgKmlwdSwgaW50IGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdXYzLWNydGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdXYzLWNydGMuYwppbmRleCBjNDhmNjQwLi40N2JlYzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHV2My1jcnRjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1djMtY3J0Yy5jCkBAIC02MCwyNCArNjAsMzIgQEAKIAogc3RhdGljIHZvaWQgaXB1X2ZiX2VuYWJsZShzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQogeworCXN0cnVjdCBpcHVfc29jICppcHUgPSBkZXZfZ2V0X2RydmRhdGEoaXB1X2NydGMtPmRldi0+cGFyZW50KTsKKwogCWlmIChpcHVfY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JaXB1X2RpX2VuYWJsZShpcHVfY3J0Yy0+ZGkpOwotCWlwdV9kY19lbmFibGVfY2hhbm5lbChpcHVfY3J0Yy0+ZGMpOworCWlwdV9kY19lbmFibGUoaXB1KTsKIAlpcHVfcGxhbmVfZW5hYmxlKGlwdV9jcnRjLT5wbGFuZVswXSk7CisJLyogU3RhcnQgREMgY2hhbm5lbCBhbmQgREkgYWZ0ZXIgSURNQUMgKi8KKwlpcHVfZGNfZW5hYmxlX2NoYW5uZWwoaXB1X2NydGMtPmRjKTsKKwlpcHVfZGlfZW5hYmxlKGlwdV9jcnRjLT5kaSk7CiAKIAlpcHVfY3J0Yy0+ZW5hYmxlZCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdV9mYl9kaXNhYmxlKHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCiB7CisJc3RydWN0IGlwdV9zb2MgKmlwdSA9IGRldl9nZXRfZHJ2ZGF0YShpcHVfY3J0Yy0+ZGV2LT5wYXJlbnQpOworCiAJaWYgKCFpcHVfY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JaXB1X3BsYW5lX2Rpc2FibGUoaXB1X2NydGMtPnBsYW5lWzBdKTsKKwkvKiBTdG9wIERDIGNoYW5uZWwgYW5kIERJIGJlZm9yZSBJRE1BQyAqLwogCWlwdV9kY19kaXNhYmxlX2NoYW5uZWwoaXB1X2NydGMtPmRjKTsKIAlpcHVfZGlfZGlzYWJsZShpcHVfY3J0Yy0+ZGkpOworCWlwdV9wbGFuZV9kaXNhYmxlKGlwdV9jcnRjLT5wbGFuZVswXSk7CisJaXB1X2RjX2Rpc2FibGUoaXB1KTsKIAogCWlwdV9jcnRjLT5lbmFibGVkID0gMDsKIH0KQEAgLTE1OCw3ICsxNjYsNyBAQAogCQlzaWdfY2ZnLlZzeW5jX3BvbCA9IDE7CiAKIAlzaWdfY2ZnLmVuYWJsZV9wb2wgPSAxOwotCXNpZ19jZmcuY2xrX3BvbCA9IDE7CisJc2lnX2NmZy5jbGtfcG9sID0gMDsKIAlzaWdfY2ZnLndpZHRoID0gbW9kZS0+aGRpc3BsYXk7CiAJc2lnX2NmZy5oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKIAlzaWdfY2ZnLnBpeGVsX2ZtdCA9IG91dF9waXhlbF9mbXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHV2My1wbGFuZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vaXB1djMtcGxhbmUuYwppbmRleCAyN2E4ZDczLi41Njk3ZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9pcHV2My1wbGFuZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL2lwdXYzLXBsYW5lLmMKQEAgLTIzOSw2ICsyMzksOCBAQAogCiB2b2lkIGlwdV9wbGFuZV9lbmFibGUoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lKQogeworCWlmIChpcHVfcGxhbmUtPmRwKQorCQlpcHVfZHBfZW5hYmxlKGlwdV9wbGFuZS0+aXB1KTsKIAlpcHVfZG1mY19lbmFibGVfY2hhbm5lbChpcHVfcGxhbmUtPmRtZmMpOwogCWlwdV9pZG1hY19lbmFibGVfY2hhbm5lbChpcHVfcGxhbmUtPmlwdV9jaCk7CiAJaWYgKGlwdV9wbGFuZS0+ZHApCkBAIC0yNTcsNiArMjU5LDggQEAKIAkJaXB1X2RwX2Rpc2FibGVfY2hhbm5lbChpcHVfcGxhbmUtPmRwKTsKIAlpcHVfaWRtYWNfZGlzYWJsZV9jaGFubmVsKGlwdV9wbGFuZS0+aXB1X2NoKTsKIAlpcHVfZG1mY19kaXNhYmxlX2NoYW5uZWwoaXB1X3BsYW5lLT5kbWZjKTsKKwlpZiAoaXB1X3BsYW5lLT5kcCkKKwkJaXB1X2RwX2Rpc2FibGUoaXB1X3BsYW5lLT5pcHUpOwogfQogCiBzdGF0aWMgdm9pZCBpcHVfcGxhbmVfZHBtcyhzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIGludCBtb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vcGFyYWxsZWwtZGlzcGxheS5jIGIvZHJpdmVycy9zdGFnaW5nL2lteC1kcm0vcGFyYWxsZWwtZGlzcGxheS5jCmluZGV4IGM2MGI2YzYuLmVhZjRkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbXgtZHJtL3BhcmFsbGVsLWRpc3BsYXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW14LWRybS9wYXJhbGxlbC1kaXNwbGF5LmMKQEAgLTIxOSw2ICsyMTksOCBAQAogCQkJaW14cGQtPmludGVyZmFjZV9waXhfZm10ID0gVjRMMl9QSVhfRk1UX1JHQjU2NTsKIAkJZWxzZSBpZiAoIXN0cmNtcChmbXQsICJiZ3I2NjYiKSkKIAkJCWlteHBkLT5pbnRlcmZhY2VfcGl4X2ZtdCA9IFY0TDJfUElYX0ZNVF9CR1I2NjY7CisJCWVsc2UgaWYgKCFzdHJjbXAoZm10LCAibHZkczY2NiIpKQorCQkJaW14cGQtPmludGVyZmFjZV9waXhfZm10ID0gdjRsMl9mb3VyY2MoJ0wnLCAnVicsICdEJywgJzYnKTsKIAl9CiAKIAlwYW5lbF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgImZzbCxwYW5lbCIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmMKaW5kZXggZTYxMTgzOS4uMWU3NDQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgInVzYi5oIgogI2luY2x1ZGUgInNjc2lnbHVlLmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic21pbC5oIgogI2luY2x1ZGUgImluaXQuaCIKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmggYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5oCmluZGV4IDk4ZDJlM2IuLmQxMzY3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuaApAQCAtMSwxMCArMSw1IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLWV4dGVybiB1MzIgTWVkaWFDaGFuZ2U7Ci1leHRlcm4gaW50IENoZWNrX0RfTWVkaWFGbXQoc3RydWN0IHVzX2RhdGEgKik7Ci0KLQotCiBzdGF0aWMgdTggU01fSW5pdFtdID0gewogMHg3QiwgMHgwOSwgMHg3QywgMHhGMCwgMHg3RCwgMHgxMCwgMHg3RSwgMHhFOSwKIDB4N0YsIDB4Q0MsIDB4MTIsIDB4MkYsIDB4NzEsIDB4OTAsIDB4RTksIDB4Q0MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc2NzaWdsdWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zY3NpZ2x1ZS5jCmluZGV4IGFjM2QzNGQuLjdkOGQ0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zY3NpZ2x1ZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkvKiBjaGVjayBmb3Igc3RhdGUtdHJhbnNpdGlvbiBlcnJvcnMgKi8KIAlpZiAodXMtPnNyYiAhPSBOVUxMKSB7CiAJCS8qIHByX2luZm8oIkVycm9yIGluICVzOiB1cy0+c3JiID0gJXBcbiIKLQkJCQkgX19GVU5DVElPTl9fLCB1cy0+c3JiKTsgKi8KKwkJCQkgX19mdW5jX18sIHVzLT5zcmIpOyAqLwogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsLmggYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbC5oCmluZGV4IDM5OTUxNzMuLmY5Mzg3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWwuaApAQCAtMjA0LDYgKzIwNCw3IEBACiBpbnQgICAgICAgICBJbml0X0RfU21hcnRNZWRpYSh2b2lkKTsKIGludCAgICAgICAgIFB3b2ZmX0RfU21hcnRNZWRpYSh2b2lkKTsKIGludCAgICAgICAgIENoZWNrX0RfU21hcnRNZWRpYSh2b2lkKTsKK2ludCAgICAgICAgIENoZWNrX0RfTWVkaWFGbXQoc3RydWN0IHVzX2RhdGEgKik7CiBpbnQgICAgICAgICBDaGVja19EX1BhcmFtZXRlcihzdHJ1Y3QgdXNfZGF0YSAqLCB1MTYgKiwgdTggKiwgdTggKik7CiBpbnQgICAgICAgICBNZWRpYV9EX1JlYWRTZWN0b3Ioc3RydWN0IHVzX2RhdGEgKiwgdTMyLCB1MTYsIHU4ICopOwogaW50ICAgICAgICAgTWVkaWFfRF9Xcml0ZVNlY3RvcihzdHJ1Y3QgdXNfZGF0YSAqLCB1MzIsIHUxNiwgdTggKik7CkBAIC0yODQsNiArMjg1LDQgQEAKIGludCAgX0NvcnJlY3RfRF9Td0VDQyh1OCAqLCB1OCAqLCB1OCAqKTsKIHZvaWQgX0NhbGN1bGF0ZV9EX1N3RUNDKHU4ICosIHU4ICopOwogCi12b2lkIFNNX0luaXQodm9pZCk7Ci0KICNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbG1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCmluZGV4IGZjN2NiYzYuLjQyZWM4YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCkBAIC0xNDEsMjMgKzE0MSw2IEBACiAJcmV0dXJuIE5PX0VSUk9SOwogfQogCi0vKiAtLS0tLSBSZWxlYXNlX0RfQ29weVNlY3RvcigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGludCBSZWxlYXNlX0RfQ29weVNlY3RvcihzdHJ1Y3QgdXNfZGF0YSAqdXMpCi17Ci0JTG9nMlBoeVtNZWRpYS5ab25lXVtNZWRpYS5Mb2dCbG9ja10gPSBXcml0ZUJsb2NrOwotCU1lZGlhLlBoeUJsb2NrID0gUmVhZEJsb2NrOwotCi0JaWYgKE1lZGlhLlBoeUJsb2NrID09IE5PX0FTU0lHTikgewotCQlNZWRpYS5QaHlCbG9jayA9IFdyaXRlQmxvY2s7Ci0JCXJldHVybiBTTVNVQ0NFU1M7Ci0JfQotCi0JQ2xyX0RfQml0KEFzc2lnbltNZWRpYS5ab25lXSwgTWVkaWEuUGh5QmxvY2spOwotCU1lZGlhLlBoeUJsb2NrID0gV3JpdGVCbG9jazsKLQotCXJldHVybiBTTVNVQ0NFU1M7Ci19Ci0KIC8qIFNtYXJ0TWVkaWEgUGh5c2ljYWwgRm9ybWF0IFRlc3QgU3Vicm91dGluZSAqLwogLyogLS0tLS0gQ2hlY2tfRF9NZWRpYUZtdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogaW50IENoZWNrX0RfTWVkaWFGbXQoc3RydWN0IHVzX2RhdGEgKnVzKQpAQCAtMTg0LDYgKzE2NywyMyBAQAogCXJldHVybiBTTVNVQ0NFU1M7CiB9CiAKKy8qIC0tLS0tIFJlbGVhc2VfRF9Db3B5U2VjdG9yKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IFJlbGVhc2VfRF9Db3B5U2VjdG9yKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlMb2cyUGh5W01lZGlhLlpvbmVdW01lZGlhLkxvZ0Jsb2NrXSA9IFdyaXRlQmxvY2s7CisJTWVkaWEuUGh5QmxvY2sgPSBSZWFkQmxvY2s7CisKKwlpZiAoTWVkaWEuUGh5QmxvY2sgPT0gTk9fQVNTSUdOKSB7CisJCU1lZGlhLlBoeUJsb2NrID0gV3JpdGVCbG9jazsKKwkJcmV0dXJuIFNNU1VDQ0VTUzsKKwl9CisKKwlDbHJfRF9CaXQoQXNzaWduW01lZGlhLlpvbmVdLCBNZWRpYS5QaHlCbG9jayk7CisJTWVkaWEuUGh5QmxvY2sgPSBXcml0ZUJsb2NrOworCisJcmV0dXJuIFNNU1VDQ0VTUzsKK30KKwogLyogU21hcnRNZWRpYSBQaHlzaWNhbCBBZGRyZXNzIENvbnRyb2wgU3Vicm91dGluZSAqLwogLyogLS0tLS0gQ29udl9EX01lZGlhQWRkcigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBDb252X0RfTWVkaWFBZGRyKHN0cnVjdCB1c19kYXRhICp1cywgdTMyIGFkZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbHN1Yi5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxzdWIuYwppbmRleCA0NGNlZDgyLi5lOTgxZjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbHN1Yi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogdm9pZCBTZXRfRF9GYWlsQmxvY2sodTggKnJlZHVuZGFudCkKIHsKIAljaGFyIGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgUkVEVFNJWkU7IGkrKykKIAkJKnJlZHVuZGFudCsrID0gKHU4KSgoaSA9PSBSRURUX0JMT0NLKSA/IDB4RjAgOiAweEZGKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci90cmFuc3BvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci90cmFuc3BvcnQuYwppbmRleCBhZTk0MTQ3Li41ZTU5NTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3RyYW5zcG9ydC5jCkBAIC02NjksNiArNjY5LDcgQEAKIAkvKiAgUi9XIGRhdGEgKi8KIAlpZiAodHJhbnNmZXJfbGVuZ3RoKSB7CiAJCXVuc2lnbmVkIGludCBwaXBlOworCiAJCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKIAkJCXBpcGUgPSB1cy0+cmVjdl9idWxrX3BpcGU7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5jCmluZGV4IDBlZGE1MWQuLmU2Y2E2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuYwpAQCAtOTcsNiArOTcsNyBAQAogCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luKSkgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksICZsaW5lNnBjbS0+dW5saW5rX3VyYl9pbikpIHsKIAkJCQlzdHJ1Y3QgdXJiICp1ID0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpXTsKKwogCQkJCXVzYl91bmxpbmtfdXJiKHUpOwogCQkJfQogCQl9CkBAIC0zMzQsNiArMzM1LDcgQEAKIHN0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKIAlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfQlVGRkVSKTsKIAlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwogfQpAQCAtMzgwLDYgKzM4Miw3IEBACiBzbmRfbGluZTZfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwogCXJldHVybiBsaW5lNnBjbS0+cG9zX2luX2RvbmU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYwppbmRleCA3N2YxYjQyLi5lZjUxMWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCkBAIC0xMjQsNiArMTI0LDcgQEAKIHN0YXRpYyBpbnQgbGluZTZfc3RhcnRfbGlzdGVuKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQogewogCWludCBlcnI7CisKIAl1c2JfZmlsbF9pbnRfdXJiKGxpbmU2LT51cmJfbGlzdGVuLCBsaW5lNi0+dXNiZGV2LAogCQkJIHVzYl9yY3ZpbnRwaXBlKGxpbmU2LT51c2JkZXYsIGxpbmU2LT5lcF9jb250cm9sX3JlYWQpLAogCQkJIGxpbmU2LT5idWZmZXJfbGlzdGVuLCBMSU5FNl9CVUZTSVpFX0xJU1RFTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5jCmluZGV4IDAyMzQ1ZmIwLi4xYWMzNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmMKQEAgLTE4Myw2ICsxODMsNyBAQAogCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0KIAkgICAgbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pLT5saW5lNjsKIAlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKm1pZGkgPSBsaW5lNi0+bGluZTZtaWRpOworCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG1pZGktPnNlbmRfd2FpdCwKIAkJCQkgbWlkaS0+bnVtX2FjdGl2ZV9zZW5kX3VyYnMgPT0gMCk7CiB9CkBAIC0yNjAsNiArMjYxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2xpbmU2X21pZGlfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwogCWxpbmU2X21pZGlidWZfZGVzdHJveSgmbGluZTZtaWRpLT5taWRpYnVmX2luKTsKIAlsaW5lNl9taWRpYnVmX2Rlc3Ryb3koJmxpbmU2bWlkaS0+bWlkaWJ1Zl9vdXQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5jCmluZGV4IDY2MTA4MGIuLmEzMTM2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCQlNSVNTSU5HX0NBU0U7CiAJfQogCi0JbGluZTZwY20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSksIEdGUF9LRVJORUwpOworCWxpbmU2cGNtID0ga3phbGxvYyhzaXplb2YoKmxpbmU2cGNtKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAobGluZTZwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCmluZGV4IDQxODY5Y2EuLjJjYTg5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCkBAIC0zNCw2ICszNCw3IEBACiAKIAlpZiAoYnl0ZXNfcGVyX2ZyYW1lID09IDQpIHsKIAkJc2hvcnQgKnAsICpidWZfZW5kOworCiAJCXAgPSAoc2hvcnQgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7CiAJCWJ1Zl9lbmQgPSBwICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIHNpemVvZigqcCk7CiAKQEAgLTQzLDExICs0NCwxMyBAQAogCQl9CiAJfSBlbHNlIGlmIChieXRlc19wZXJfZnJhbWUgPT0gNikgewogCQl1bnNpZ25lZCBjaGFyICpwLCAqYnVmX2VuZDsKKwogCQlwID0gKHVuc2lnbmVkIGNoYXIgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7CiAJCWJ1Zl9lbmQgPSBwICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKIAogCQlmb3IgKDsgcCA8IGJ1Zl9lbmQ7IHAgKz0gMykgewogCQkJaW50IHZhbDsKKwogCQkJdmFsID0gcFswXSArIChwWzFdIDw8IDgpICsgKChzaWduZWQgY2hhcilwWzJdIDw8IDE2KTsKIAkJCXZhbCA9ICh2YWwgKiB2b2x1bWVbY2huICYgMV0pID4+IDg7CiAJCQlwWzBdID0gdmFsOwpAQCAtMTE2LDYgKzExOSw3IEBACiAKIAlpZiAoYnl0ZXNfcGVyX2ZyYW1lID09IDQpIHsKIAkJc2hvcnQgKnBpLCAqcG8sICpidWZfZW5kOworCiAJCXBpID0gKHNob3J0ICopc2lnbmFsOwogCQlwbyA9IChzaG9ydCAqKXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcjsKIAkJYnVmX2VuZCA9IHBvICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIHNpemVvZigqcG8pOwpAQCAtMTcxLDYgKzE3NSw3IEBACiAKIAkJaWYgKGZzaXplID09IDApIHsKIAkJCWludCBuOworCiAJCQlsaW5lNnBjbS0+Y291bnRfb3V0ICs9IGZyYW1lX2luY3JlbWVudDsKIAkJCW4gPSBsaW5lNnBjbS0+Y291bnRfb3V0IC8gZnJhbWVfZmFjdG9yOwogCQkJbGluZTZwY20tPmNvdW50X291dCAtPSBuICogZnJhbWVfZmFjdG9yOwpAQCAtMjA3LDYgKzIxMiw3IEBACiAJCQkgICBjb3B5IHRoZSBkYXRhIHRvIHRoZSB0ZW1wIGJ1ZmZlci4KIAkJCSAqLwogCQkJaW50IGxlbjsKKwogCQkJbGVuID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBsaW5lNnBjbS0+cG9zX291dDsKIAogCQkJaWYgKGxlbiA+IDApIHsKQEAgLTMwNSw2ICszMTEsNyBAQAogCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCkpIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmbGluZTZwY20tPnVubGlua191cmJfb3V0KSkgewogCQkJCXN0cnVjdCB1cmIgKnUgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXTsKKwogCQkJCXVzYl91bmxpbmtfdXJiKHUpOwogCQkJfQogCQl9CkBAIC0zNTgsNyArMzY1LDYgQEAKIHsKIAlpbnQgaSwgaW5kZXgsIGxlbmd0aCA9IDAsIHNodXRkb3duID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gKHN0cnVjdCBzbmRfbGluZTZfcGNtICopdXJiLT5jb250ZXh0OwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0KIAkgICAgZ2V0X3N1YnN0cmVhbShsaW5lNnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CkBAIC0zODQsNiArMzkwLDcgQEAKIAogCWlmICh0ZXN0X2JpdChMSU5FNl9JTkRFWF9QQ01fQUxTQV9QTEFZQkFDS19TVFJFQU0sICZsaW5lNnBjbS0+ZmxhZ3MpKSB7CiAJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKIAkJbGluZTZwY20tPnBvc19vdXRfZG9uZSArPQogCQkgICAgbGVuZ3RoIC8gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKIApAQCAtNDgwLDYgKzQ4Nyw3IEBACiBzdGF0aWMgaW50IHNuZF9saW5lNl9wbGF5YmFja19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwogCWxpbmU2X3BjbV9yZWxlYXNlKGxpbmU2cGNtLCBMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfQlVGRkVSKTsKIAlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwogfQpAQCAtNTM0LDYgKzU0Miw3IEBACiBzbmRfbGluZTZfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKIAlyZXR1cm4gbGluZTZwY20tPnBvc19vdXRfZG9uZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5jCmluZGV4IGY0ZTk1YTYuLjQ0ZjRiMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmMKQEAgLTE5Nyw2ICsxOTcsNyBAQAogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CiAJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPnNlcmlhbF9udW1iZXIpOwogfQogCkBAIC0yMDgsNiArMjA5LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwogCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkXG4iLCBwb2QtPmZpcm13YXJlX3ZlcnNpb24gLyAxMDAsCiAJCSAgICAgICBwb2QtPmZpcm13YXJlX3ZlcnNpb24gJSAxMDApOwogfQpAQCAtMjIwLDYgKzIyMiw3IEBACiB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKIAlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvZC0+ZGV2aWNlX2lkKTsKIH0KIApAQCAtMjQzLDYgKzI0Niw3IEBACiB7CiAJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWRhdGE7CiAJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAmcG9kLT5saW5lNjsKKwogCUNIRUNLX1NUQVJUVVBfUFJPR1JFU1MocG9kLT5zdGFydHVwX3Byb2dyZXNzLCBQT0RfU1RBUlRVUF9WRVJTSU9OUkVRKTsKIAogCS8qIHJlcXVlc3QgZmlybXdhcmUgdmVyc2lvbjogKi8KQEAgLTI5NCw2ICsyOTgsNyBAQAogewogCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gKHN0cnVjdCB1c2JfbGluZTZfcG9kICopbGluZTZwY20tPmxpbmU2OworCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBwb2QtPm1vbml0b3JfbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jCmluZGV4IGFmMmU3ZTUuLjY5NDM3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jCkBAIC0xODUsNiArMTg1LDcgQEAKIAkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBsaW5lNnBjbS0+dm9sdW1lX21vbml0b3I7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTMsNiArMjE0LDcgQEAKIAkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAljb25zdCBpbnQgc2l6ZSA9IEFSUkFZX1NJWkUodG9uZXBvcnRfc291cmNlX2luZm8pOworCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IHNpemU7CkBAIC0yNjIsNiArMjY0LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICopYXJnOwogCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gJnRvbmVwb3J0LT5saW5lNjsKKwogCWxpbmU2X3BjbV9hY3F1aXJlKGxpbmU2LT5saW5lNnBjbSwgTElORTZfQklUU19QQ01fTU9OSVRPUik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYwppbmRleCBiZDBmNjk0Li5hZTJiZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jCkBAIC05NSw2ICs5NSw3IEBACiBzdGF0aWMgdm9pZCB2YXJpYXhfc3RhcnR1cDQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSAoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilkYXRhOworCiAJQ0hFQ0tfU1RBUlRVUF9QUk9HUkVTUyh2YXJpYXgtPnN0YXJ0dXBfcHJvZ3Jlc3MsCiAJCQkgICAgICAgVkFSSUFYX1NUQVJUVVBfQUNUSVZBVEUpOwogCkBAIC0xMDcsNiArMTA4LDcgQEAKIHN0YXRpYyB2b2lkIHZhcmlheF9zdGFydHVwNSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWRhdGE7CisKIAlDSEVDS19TVEFSVFVQX1BST0dSRVNTKHZhcmlheC0+c3RhcnR1cF9wcm9ncmVzcywKIAkJCSAgICAgICBWQVJJQVhfU1RBUlRVUF9XT1JLUVVFVUUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL1RPRE8KaW5kZXggMGEyYjZjYi4uZTMyNWUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvVE9ETwpAQCAtOSw2ICs5LDUgQEAKICogT3RoZXIgbWlub3IgbWlzYyBjbGVhbnVwcy4uLgogCiBQbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgQW5kcmVhcyBEaWxnZXIKLTxhbmRyZWFzLmRpbGdlckBpbnRlbC5jb20+LCBPbGVnIERyb2tpbiA8b2xlZy5kcm9raW5AaW50ZWwuY29tPiBhbmQKLVBlbmcgVGFvIDx0YW8ucGVuZ0BlbWMuY29tPi4gQ0NpbmcgaHBkZC1kaXNjdXNzIDxocGRkLWRpc2N1c3NAbGlzdHMuMDEub3JnPgotd291bGQgYmUgZ3JlYXQgdG9vLgorPGFuZHJlYXMuZGlsZ2VyQGludGVsLmNvbT4sIE9sZWcgRHJva2luIDxvbGVnLmRyb2tpbkBpbnRlbC5jb20+LiBDQ2luZworaHBkZC1kaXNjdXNzIDxocGRkLWRpc2N1c3NAbGlzdHMuMDEub3JnPiB3b3VsZCBiZSBncmVhdCB0b28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2N1cnByb2MuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvY3VycHJvYy5oCmluZGV4IDhmZDQ3YzkuLmIzMTRmMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvY3VycHJvYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvY3VycHJvYy5oCkBAIC01Niw3ICs1Niw2IEBACiAvKiBjaGVjayBpZiB0YXNrIGlzIHJ1bm5pbmcgaW4gY29tcGF0IG1vZGUuKi8KICNkZWZpbmUgY3VycmVudF9waWQoKQkJKGN1cnJlbnQtPnBpZCkKICNkZWZpbmUgY3VycmVudF9jb21tKCkJCShjdXJyZW50LT5jb21tKQotaW50IGNmc19nZXRfZW52aXJvbihjb25zdCBjaGFyICprZXksIGNoYXIgKnZhbHVlLCBpbnQgKnZhbF9sZW4pOwogCiB0eXBlZGVmIF9fdTMyIGNmc19jYXBfdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGliY2ZzLmgKaW5kZXggNGE2YzdkYS4uMjZiNTNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmcy5oCkBAIC00Miw2ICs0Miw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L2xpYmNmcy9saW51eC9saWJjZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KIAogI2luY2x1ZGUgImN1cnByb2MuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfY3B1LmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19jcHUuaAppbmRleCBjODdlZmI0Li5hMTQwZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19jcHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19jcHUuaApAQCAtMTI4LDcgKzEyOCw3IEBACiBpbnQKIGNmc19jcHRfbnVtYmVyKHN0cnVjdCBjZnNfY3B0X3RhYmxlICpjcHRhYik7CiAvKioKLSAqIHJldHVybiBudW1iZXIgb2YgSFcgY29yZXMgb3IgaHlwdGVyLXRocmVhZGluZ3MgaW4gYSBDUFUgcGFydGl0aW9uIFxhIGNwdAorICogcmV0dXJuIG51bWJlciBvZiBIVyBjb3JlcyBvciBoeXBlci10aHJlYWRpbmdzIGluIGEgQ1BVIHBhcnRpdGlvbiBcYSBjcHQKICAqLwogaW50IGNmc19jcHRfd2VpZ2h0KHN0cnVjdCBjZnNfY3B0X3RhYmxlICpjcHRhYiwgaW50IGNwdCk7CiAvKioKQEAgLTE1Miw3ICsxNTIsNyBAQAogICovCiBpbnQgY2ZzX2NwdF9iaW5kKHN0cnVjdCBjZnNfY3B0X3RhYmxlICpjcHRhYiwgaW50IGNwdCk7CiAvKioKLSAqIGFkZCBcYSBjcHUgdG8gQ1BVIHBhcnRpb24gQGNwdCBvZiBcYSBjcHRhYiwgcmV0dXJuIDEgZm9yIHN1Y2Nlc3MsCisgKiBhZGQgXGEgY3B1IHRvIENQVSBwYXJ0aXRpb24gQGNwdCBvZiBcYSBjcHRhYiwgcmV0dXJuIDEgZm9yIHN1Y2Nlc3MsCiAgKiBvdGhlcndpc2UgMCBpcyByZXR1cm5lZAogICovCiBpbnQgY2ZzX2NwdF9zZXRfY3B1KHN0cnVjdCBjZnNfY3B0X3RhYmxlICpjcHRhYiwgaW50IGNwdCwgaW50IGNwdSk7CkBAIC0yMDMsNiArMjAzLDExIEBACiBpbnQgY2ZzX2NwdF9zcHJlYWRfbm9kZShzdHJ1Y3QgY2ZzX2NwdF90YWJsZSAqY3B0YWIsIGludCBjcHQpOwogCiAvKioKKyAqIHJldHVybiBudW1iZXIgb2YgSFRzIGluIHRoZSBzYW1lIGNvcmUgb2YgXGEgY3B1CisgKi8KK2ludCBjZnNfY3B1X2h0X25zaWJsaW5ncyhpbnQgY3B1KTsKKworLyoqCiAgKiBpdGVyYXRlIG92ZXIgYWxsIENQVSBwYXJ0aXRpb25zIGluIFxhIGNwdGFiCiAgKi8KICNkZWZpbmUgY2ZzX2NwdF9mb3JfZWFjaChpLCBjcHRhYikJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfY3J5cHRvLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19jcnlwdG8uaAppbmRleCA3NzZlOWMwLi45ZTYxMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19jcnlwdG8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19jcnlwdG8uaApAQCAtMzEsNyArMzEsNyBAQAogc3RydWN0IGNmc19jcnlwdG9faGFzaF90eXBlIHsKIAljaGFyCQkqY2h0X25hbWU7ICAgICAgLyoqPCBoYXNoIGFsZ29yaXRobSBuYW1lLCBlcXVhbCB0bwogCQkJCQkgKiBmb3JtYXQgbmFtZSBmb3IgY3J5cHRvIGFwaSAqLwotCXVuc2lnbmVkIGludCAgICBjaHRfa2V5OwkvKio8IGluaXQga2V5IGJ5IGRlZmF1bHQgKHZhaWxkIGZvcgorCXVuc2lnbmVkIGludCAgICBjaHRfa2V5OwkvKio8IGluaXQga2V5IGJ5IGRlZmF1bHQgKHZhbGlkIGZvcgogCQkJCQkgKiA0IGJ5dGVzIGNvbnRleHQgbGlrZSBjcmMzMiwgYWRsZXIgKi8KIAl1bnNpZ25lZCBpbnQgICAgY2h0X3NpemU7ICAgICAgIC8qKjwgaGFzaCBkaWdlc3Qgc2l6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGliY2ZzX2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19kZWJ1Zy5oCmluZGV4IDJiZDQ4ODUuLmIyNzBkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGliY2ZzX2RlYnVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfZGVidWcuaApAQCAtMTgzLDcgKzE4Myw3IEBACiBkbyB7CQkJCQkJCQlcCiAJKGRhdGEpLT5tc2dfc3Vic3lzID0gREVCVUdfU1VCU1lTVEVNOwkJCVwKIAkoZGF0YSktPm1zZ19maWxlICAgPSBfX0ZJTEVfXzsJCQkJXAotCShkYXRhKS0+bXNnX2ZuICAgICA9IF9fRlVOQ1RJT05fXzsJCQlcCisJKGRhdGEpLT5tc2dfZm4gICAgID0gX19mdW5jX187CQkJCVwKIAkoZGF0YSktPm1zZ19saW5lICAgPSBfX0xJTkVfXzsJCQkJXAogCShkYXRhKS0+bXNnX2NkbHMgICA9IChjZGxzKTsJCQkJXAogCShkYXRhKS0+bXNnX21hc2sgICA9IChtYXNrKTsJCQkJXApAQCAtMTkzLDcgKzE5Myw3IEBACiAJc3RhdGljIHN0cnVjdCBsaWJjZnNfZGVidWdfbXNnX2RhdGEgZGF0YW5hbWUgPSB7CVwKIAkgICAgICAgLm1zZ19zdWJzeXMgPSBERUJVR19TVUJTWVNURU0sCQkJXAogCSAgICAgICAubXNnX2ZpbGUgICA9IF9fRklMRV9fLAkJCQlcCi0JICAgICAgIC5tc2dfZm4gICAgID0gX19GVU5DVElPTl9fLAkJCVwKKwkgICAgICAgLm1zZ19mbiAgICAgPSBfX2Z1bmNfXywJCQkJXAogCSAgICAgICAubXNnX2xpbmUgICA9IF9fTElORV9fLAkJCQlcCiAJICAgICAgIC5tc2dfY2RscyAgID0gKGNkbHMpCSB9OwkJCVwKIAlkYXRhbmFtZS5tc2dfbWFzayAgID0gKG1hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfaGFzaC5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfaGFzaC5oCmluZGV4IGU1ZDVkYjIuLjk1NDE2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGliY2ZzX2hhc2guaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19oYXNoLmgKQEAgLTU5LDggKzU5LDggQEAKIC8qCiAgKiBJZGVhbGx5IHdlIHdvdWxkIHVzZSBIQVZFX0hBU0hfTE9ORyBmb3IgdGhpcywgYnV0IG9uIGxpbnV4IHdlIGNvbmZpZ3VyZQogICogdGhlIGxpbnV4IGtlcm5lbCBhbmQgdXNlciBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lLCBzbyB3ZSBuZWVkIHRvIGRpZmZlcmVudGlhdGUKLSAqIGJldHdlZW4gdGhlbSBleHBsaWNpdGVseS4gSWYgdGhpcyBpcyBub3QgbmVlZGVkIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMsIHRoZW4KLSAqIHdlJ2xsIG5lZWQgdG8gbW92ZSB0aGUgZnVuY3Rpb25zIHRvIGFyY2hpIHNwZWNpZmljIGhlYWRlcnMuCisgKiBiZXR3ZWVuIHRoZW0gZXhwbGljaXRseS4gSWYgdGhpcyBpcyBub3QgbmVlZGVkIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMsIHRoZW4KKyAqIHdlJ2xsIG5lZWQgdG8gbW92ZSB0aGUgZnVuY3Rpb25zIHRvIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBoZWFkZXJzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CkBAIC04Niw3ICs4Niw3IEBACiAKIC8qKgogICogY2ZzX2hhc2hfYnVja2V0IGlzIGEgY29udGFpbmVyIG9mOgotICogLSBsb2NrLCBjb3V0ZXIgLi4uCisgKiAtIGxvY2ssIGNvdW50ZXIgLi4uCiAgKiAtIGFycmF5IG9mIGhhc2gtaGVhZCBzdGFydGluZyBmcm9tIGhzYl9oZWFkWzBdLCBoYXNoLWhlYWQgY2FuIGJlIG9uZSBvZgogICogICAuIGNmc19oYXNoX2hlYWRfdAogICogICAuIGNmc19oYXNoX2hlYWRfZGVwX3QKQEAgLTEzNiw3ICsxMzYsNyBAQAogCUNGU19IQVNIX05PX0JLVExPQ0sgICAgID0gMSA8PCAxLAogCS8qKiByd2xvY2sgdG8gcHJvdGVjdCBidWNrZXQgKi8KIAlDRlNfSEFTSF9SV19CS1RMT0NLICAgICA9IDEgPDwgMiwKLQkvKiogc3Bpbmxjb2sgdG8gcHJvdGVjdCBidWNrZXQgKi8KKwkvKiogc3BpbmxvY2sgdG8gcHJvdGVjdCBidWNrZXQgKi8KIAlDRlNfSEFTSF9TUElOX0JLVExPQ0sgICA9IDEgPDwgMywKIAkvKiogYWx3YXlzIGFkZCBuZXcgaXRlbSB0byB0YWlsICovCiAJQ0ZTX0hBU0hfQUREX1RBSUwgICAgICAgPSAxIDw8IDQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19wcml2YXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19wcml2YXRlLmgKaW5kZXggZGRkY2NjYTEuLjc0MGJmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGliY2ZzX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19wcml2YXRlLmgKQEAgLTE1Myw3ICsxNTMsNyBAQAogICogZGVmYXVsdCBhbGxvY2F0b3IKICAqLwogI2RlZmluZSBMSUJDRlNfQUxMT0MocHRyLCBzaXplKSBcCi0JTElCQ0ZTX0FMTE9DX0dGUChwdHIsIHNpemUsIF9fR0ZQX0lPKQorCUxJQkNGU19BTExPQ19HRlAocHRyLCBzaXplLCBHRlBfTk9GUykKIAogLyoqCiAgKiBub24tc2xlZXBpbmcgYWxsb2NhdG9yCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogLyoqIGRlZmF1bHQgbnVtYSBhbGxvY2F0b3IgKi8KICNkZWZpbmUgTElCQ0ZTX0NQVF9BTExPQyhwdHIsIGNwdGFiLCBjcHQsIHNpemUpCQkJCSAgICBcCi0JTElCQ0ZTX0NQVF9BTExPQ19HRlAocHRyLCBjcHRhYiwgY3B0LCBzaXplLCBfX0dGUF9JTykKKwlMSUJDRlNfQ1BUX0FMTE9DX0dGUChwdHIsIGNwdGFiLCBjcHQsIHNpemUsIEdGUF9OT0ZTKQogCiAjZGVmaW5lIExJQkNGU19GUkVFKHB0ciwgc2l6ZSkJCQkJCSAgXAogZG8gewkJCQkJCQkJICAgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGludXgvbGludXgtbG9jay5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saW51eC9saW51eC1sb2NrLmgKaW5kZXggZDZlMDBmOS4uYjc1ZTQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saW51eC9saW51eC1sb2NrLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saW51eC9saW51eC1sb2NrLmgKQEAgLTY2LDcgKzY2LDcgQEAKICAqIC0gc3Bpbl91bmxvY2soeCkKICAqIC0gc3Bpbl91bmxvY2tfYmgoeCkKICAqIC0gc3Bpbl90cnlsb2NrKHgpCi0gKiAtIHNwaW5faXNfbG9ja2VkKHgpCisgKiAtIGFzc2VydF9zcGluX2xvY2tlZCh4KQogICoKICAqIC0gc3Bpbl9sb2NrX2lycSh4KQogICogLSBzcGluX2xvY2tfaXJxc2F2ZSh4LCBmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saW51eC9saW51eC1tZW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGludXgvbGludXgtbWVtLmgKaW5kZXggMmFmMTVkNC4uY2NlZTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saW51eC9saW51eC1tZW0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpbnV4L2xpbnV4LW1lbS5oCkBAIC01Myw2ICs1MywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KIAorI2lmbmRlZiBIQVZFX0xJQkNGU19DUFQKKy8qIE5lZWQgdGhpcyBmb3IgY2ZzX2NwdF90YWJsZSAqLworI2luY2x1ZGUgPGxpbnV4L2xpYmNmcy9saWJjZnNfY3B1Lmg+CisjZW5kaWYKKwogI2RlZmluZSBDRlNfUEFHRV9NQVNLCQkgICAofigoX191NjQpUEFHRV9DQUNIRV9TSVpFLTEpKQogI2RlZmluZSBwYWdlX2luZGV4KHApICAgICAgICgocCktPmluZGV4KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9saWItbG5ldC5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xuZXQvbGliLWxuZXQuaAppbmRleCA4NTZmY2ZhLi4wNmZmNDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9saWItbG5ldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L2xpYi1sbmV0LmgKQEAgLTE4MSw3ICsxODEsNyBAQAogI2RlZmluZSBNQVhfUE9SVEFMUyAgICAgNjQKIAogLyogdGhlc2UgYXJlIG9ubHkgdXNlZCBieSBjb2RlIHdpdGggTE5FVF9VU0VfTElCX0ZSRUVMSVNULCBidXQgd2Ugc3RpbGwKLSAqIGV4cG9ydGVkIHRoZW0gdG8gIUxORVRfVVNFX0xJQl9GUkVFTElTVCBmb3IgZWFzeSBpbXBsZW1ldGF0aW9uICovCisgKiBleHBvcnRlZCB0aGVtIHRvICFMTkVUX1VTRV9MSUJfRlJFRUxJU1QgZm9yIGVhc3kgaW1wbGVtZW50YXRpb24gKi8KICNkZWZpbmUgTE5FVF9GTF9NQVhfTUVTCQkyMDQ4CiAjZGVmaW5lIExORVRfRkxfTUFYX01EUwkJMjA0OAogI2RlZmluZSBMTkVUX0ZMX01BWF9FUVMJCTUxMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xuZXQvbGliLXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9saWItdHlwZXMuaAppbmRleCAxYzEzZWY3Li5hNjM2NTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9saWItdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9saWItdHlwZXMuaApAQCAtMjA0LDcgKzIwNCw3IEBACiAJdW5zaWduZWQgaW50CSAgbXNnX3JlY2VpdmluZzoxOyAgICAvKiBiZWluZyByZWNlaXZlZCAqLwogCXVuc2lnbmVkIGludAkgIG1zZ190eGNyZWRpdDoxOyAgICAgLyogdGFrZW4gYW4gTkkgc2VuZCBjcmVkaXQgKi8KIAl1bnNpZ25lZCBpbnQJICBtc2dfcGVlcnR4Y3JlZGl0OjE7IC8qIHRha2VuIGEgcGVlciBzZW5kIGNyZWRpdCAqLwotCXVuc2lnbmVkIGludAkgIG1zZ19ydHJjcmVkaXQ6MTsgICAgLyogdGFrZW4gYSBnbG9iZWwgcm91dGVyIGNyZWRpdCAqLworCXVuc2lnbmVkIGludAkgIG1zZ19ydHJjcmVkaXQ6MTsgICAgLyogdGFrZW4gYSBnbG9iYWwgcm91dGVyIGNyZWRpdCAqLwogCXVuc2lnbmVkIGludAkgIG1zZ19wZWVycnRyY3JlZGl0OjE7IC8qIHRha2VuIGEgcGVlciByb3V0ZXIgY3JlZGl0ICovCiAJdW5zaWduZWQgaW50CSAgbXNnX29uYWN0aXZlbGlzdDoxOyAvKiBvbiB0aGUgYWN0aXZlbGlzdCAqLwogCkBAIC0zNDIsNyArMzQyLDcgQEAKIAogCS8qIFN0YXJ0IHJlY2VpdmluZyAnbWxlbicgYnl0ZXMgb2YgcGF5bG9hZCBkYXRhLCBza2lwcGluZyB0aGUgZm9sbG93aW5nCiAJICogJ3JsZW4nIC0gJ21sZW4nIGJ5dGVzLiAncHJpdmF0ZScgaXMgdGhlICdwcml2YXRlJyBwYXNzZWQgdG8KLQkgKiBsbmV0X3BhcnNlKCkuICBSZXR1cm4gbm9uLXplcm8gZm9yIGltbWVkYWl0ZSBmYWlsdXJlLCBvdGhlcndpc2UKKwkgKiBsbmV0X3BhcnNlKCkuICBSZXR1cm4gbm9uLXplcm8gZm9yIGltbWVkaWF0ZSBmYWlsdXJlLCBvdGhlcndpc2UKIAkgKiBjb21wbGV0ZSBsYXRlciB3aXRoIGxuZXRfZmluYWxpemUoKS4gIFRoaXMgYWxzbyBnaXZlcyBiYWNrIGEgcmVjZWl2ZQogCSAqIGNyZWRpdCBpZiB0aGUgTE5EIGRvZXMgZmxvdyBjb250cm9sLiAqLwogCWludCAoKmxuZF9yZWN2KShzdHJ1Y3QgbG5ldF9uaSAqbmksIHZvaWQgKnByaXZhdGUsIGxuZXRfbXNnX3QgKm1zZywKQEAgLTU5NCw3ICs1OTQsNyBAQAogCXVuc2lnbmVkIGludAkJbXRfY3B0OwogCXVuc2lnbmVkIGludAkJbXRfcG9ydGFsOyAgICAgIC8qIHBvcnRhbCBpbmRleCAqLwogCS8qIG1hdGNoIHRhYmxlIGlzIHNldCBhcyAiZW5hYmxlZCIgaWYgdGhlcmUncyBub24tZXhoYXVzdGVkIE1ECi0JICogYXR0YWNoZWQgb24gbXRfbWhhc2gsIGl0J3Mgb25seSB2YWxpZGUgZm9yIHdpbGRjYXJkIHBvcnRhbCAqLworCSAqIGF0dGFjaGVkIG9uIG10X21oYXNoLCBpdCdzIG9ubHkgdmFsaWQgZm9yIHdpbGRjYXJkIHBvcnRhbCAqLwogCXVuc2lnbmVkIGludAkJbXRfZW5hYmxlZDsKIAkvKiBiaXRtYXAgdG8gZmxhZyB3aGV0aGVyIE1FcyBvbiBtdF9oYXNoIGFyZSBleGhhdXN0ZWQgb3Igbm90ICovCiAJX191NjQJCQltdF9leGhhdXN0ZWRbTE5FVF9NVF9FWEhBVVNURURfQk1BUF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9sbmV0c3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L2xuZXRzdC5oCmluZGV4IGUwNjA1OTkuLjg3ZmU5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L2xuZXRzdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L2xuZXRzdC5oCkBAIC00MDIsNyArNDAyLDcgQEAKIC8qIGFkZCBzdGF0IGluIHNlc3Npb24gKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlpbnQJCSAgICAgbHN0aW9fc3RhX2tleTsJICAvKiBJTjogc2Vzc2lvbiBrZXkgKi8KLQlpbnQJCSAgICAgbHN0aW9fc3RhX3RpbWVvdXQ7ICAgICAgLyogSU46IHRpbWVvdXQgZm9yIHN0YXQgcmVxdXN0ICovCisJaW50CQkgICAgIGxzdGlvX3N0YV90aW1lb3V0OyAgICAgIC8qIElOOiB0aW1lb3V0IGZvciBzdGF0IHJlcXVlc3QgKi8KIAlpbnQJCSAgICAgbHN0aW9fc3RhX25tbGVuOwkvKiBJTjogZ3JvdXAgbmFtZSBsZW5ndGggKi8KIAljaGFyCQkgICAqbHN0aW9fc3RhX25hbWVwOwkvKiBJTjogZ3JvdXAgbmFtZSAqLwogCWludAkJICAgICBsc3Rpb19zdGFfY291bnQ7CS8qIElOOiAjIG9mIHBpZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xuZXQvcHRsbG5kLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9wdGxsbmQuaAppbmRleCA1NjRmNWQzLi4zMTM0NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9wdGxsbmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9wdGxsbmQuaApAQCAtNjYsNyArNjYsNyBAQAogLyojZGVmaW5lIFBUTF9NRF9MVVNUUkVfQ09NUExFVElPTl9TRU1BTlRJQ1MgKi8KIAogLyogQ2FuIGNvbXBhcmUgaGFuZGxlcyBkaXJlY3RseSBvbiBDcmF5IFBvcnRhbHMgKi8KLSNkZWZpbmUgUHRsSGFuZGxlSXNFcXVhbChhLGIpICgoYSkgPT0gKGIpKQorI2RlZmluZSBQdGxIYW5kbGVJc0VxdWFsKGEsIGIpICgoYSkgPT0gKGIpKQogCiAvKiBEaWZmZXJlbnQgZXJyb3IgdHlwZXMgb24gQ3JheSBQb3J0YWxzKi8KICNkZWZpbmUgcHRsX2Vycl90IHB0bF9uaV9mYWlsX3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L3B0bGxuZF93aXJlLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC9wdGxsbmRfd2lyZS5oCmluZGV4IDdkMTJiM2EuLjBkM2VjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L3B0bGxuZF93aXJlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xuZXQvcHRsbG5kX3dpcmUuaApAQCAtNjQsMjYgKzY0LDIyIEBACiAJCQkJCSAqIGFib3ZlIGlzIGZvciBidWxrIGRhdGEgdHJhbnNmZXIgKi8KICNkZWZpbmUgTE5FVF9NU0dfTUFUQ0hCSVRTICAgICAgIDAgICAgICAvKiB0aGUgdmFsdWUgZm9yIHRoZSBtZXNzYWdlIGNoYW5uZWwgKi8KIAotdHlwZWRlZiBzdHJ1Y3QKLXsKK3R5cGVkZWYgc3RydWN0IHsKIAlsbmV0X2hkcl90CWtwdGxpbV9oZHI7CSAgICAgLyogcG9ydGFscyBoZWFkZXIgKi8KIAljaGFyCSAgICAgIGtwdGxpbV9wYXlsb2FkWzBdOyAgICAgIC8qIHBpZ2d5LWJhY2tlZCBwYXlsb2FkICovCiB9IFdJUkVfQVRUUiBrcHRsX2ltbWVkaWF0ZV9tc2dfdDsKIAotdHlwZWRlZiBzdHJ1Y3QKLXsKK3R5cGVkZWYgc3RydWN0IHsKIAlsbmV0X2hkcl90CWtwdGxybV9oZHI7CSAgICAgLyogcG9ydGFscyBoZWFkZXIgKi8KIAlfX3U2NAkgICAgIGtwdGxybV9tYXRjaGJpdHM7ICAgICAgIC8qIG1hdGNoYml0cyAqLwogfSBXSVJFX0FUVFIga3B0bF9yZG1hX21zZ190OwogCi10eXBlZGVmIHN0cnVjdAotewordHlwZWRlZiBzdHJ1Y3QgewogCV9fdTY0CSAgICAga3B0bGhtX21hdGNoYml0czsgICAgICAgLyogbWF0Y2hiaXRzICovCiAJX191MzIJICAgICBrcHRsaG1fbWF4X21zZ19zaXplOyAgICAvKiBtYXggbWVzc2FnZSBzaXplICovCiB9IFdJUkVfQVRUUiBrcHRsX2hlbGxvX21zZ190OwogCi10eXBlZGVmIHN0cnVjdAotewordHlwZWRlZiBzdHJ1Y3QgewogCS8qIEZpcnN0IDIgZmllbGRzIGZpeGVkIEZPUiBBTEwgVElNRSAqLwogCV9fdTMyCSAgIHB0bG1fbWFnaWM7ICAgICAvKiBJJ20gYSBQb3J0YWxzIExORCBtZXNzYWdlICovCiAJX191MTYJICAgcHRsbV92ZXJzaW9uOyAgIC8qIHRoaXMgaXMgbXkgdmVyc2lvbiBudW1iZXIgKi8KQEAgLTEwNyw3ICsxMDMsNyBAQAogfSBrcHRsX21zZ190OwogCiAvKiBrcHRsX21zZ190OjpwdGxtX2NyZWRpdHMgaXMgb25seSBhIF9fdTggKi8KLSNkZWZpbmUgUFRMTE5EX01TR19NQVhfQ1JFRElUUyAoKHR5cGVvZigoKGtwdGxfbXNnX3QqKSAwKS0+cHRsbV9jcmVkaXRzKSkgLTEpCisjZGVmaW5lIFBUTExORF9NU0dfTUFYX0NSRURJVFMgKCh0eXBlb2YoKChrcHRsX21zZ190KikgMCktPnB0bG1fY3JlZGl0cykpIC0gMSkKIAogI2RlZmluZSBQVExMTkRfTVNHX01BR0lDCQlMTkVUX1BST1RPX1BUTF9NQUdJQwogI2RlZmluZSBQVExMTkRfTVNHX1ZFUlNJT04JICAgICAgMHgwNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xuZXQvdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9sbmV0L3R5cGVzLmgKaW5kZXggYzgzM2NlOC4uMmFkZDc5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xuZXQvdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbG5ldC90eXBlcy5oCkBAIC0xMTIsNyArMTEyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgTE5ldEhhbmRsZUlzRXF1YWwgKGxuZXRfaGFuZGxlX2FueV90IGgxLCBsbmV0X2hhbmRsZV9hbnlfdCBoMikKIHsKLQlyZXR1cm4gKGgxLmNvb2tpZSA9PSBoMi5jb29raWUpOworCXJldHVybiBoMS5jb29raWUgPT0gaDIuY29va2llOwogfQogCiAvKioKQEAgLTEyMiw3ICsxMjIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBMTmV0SGFuZGxlSXNJbnZhbGlkKGxuZXRfaGFuZGxlX2FueV90IGgpCiB7Ci0JcmV0dXJuIChMTkVUX1dJUkVfSEFORExFX0NPT0tJRV9OT05FID09IGguY29va2llKTsKKwlyZXR1cm4gTE5FVF9XSVJFX0hBTkRMRV9DT09LSUVfTk9ORSA9PSBoLmNvb2tpZTsKIH0KIAogLyoqCkBAIC0xODEsNyArMTgxLDcgQEAKIAkgKiBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIGxuZXRfa2lvdl90IGFuZCB0aGUgbGVuZ3RoIGZpZWxkIHNwZWNpZmllcwogCSAqIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkuIFRoZSBsZW5ndGggY2FuJ3QgYmUgYmlnZ2VyCiAJICogdGhhbiBMTkVUX01BWF9JT1YuIFRoZSBsbmV0X2tpb3ZfdCBpcyB1c2VkIHRvIGRlc2NyaWJlIHBhZ2UtYmFzZWQKLQkgKiBmcmFnbWVudHMgdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IG1hcHBlZCBpbiB2aXJ0YWwgbWVtb3J5LgorCSAqIGZyYWdtZW50cyB0aGF0IGFyZSBub3QgbmVjZXNzYXJpbHkgbWFwcGVkIGluIHZpcnR1YWwgbWVtb3J5LgogCSAqIC0gTE5FVF9NRF9JT1ZFQyBiaXQgc2V0OiBUaGUgc3RhcnQgZmllbGQgcG9pbnRzIHRvIHRoZSBzdGFydGluZwogCSAqIGFkZHJlc3Mgb2YgYW4gYXJyYXkgb2Ygc3RydWN0IGlvdmVjIGFuZCB0aGUgbGVuZ3RoIGZpZWxkIHNwZWNpZmllcwogCSAqIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkuIFRoZSBsZW5ndGggY2FuJ3QgYmUgYmlnZ2VyCkBAIC0zODEsNyArMzgxLDcgQEAKIAogI2RlZmluZSBMTkVUX1NFUV9CQVNFVFlQRSAgICAgICBsb25nCiB0eXBlZGVmIHVuc2lnbmVkIExORVRfU0VRX0JBU0VUWVBFIGxuZXRfc2VxX3Q7Ci0jZGVmaW5lIExORVRfU0VRX0dUKGEsYikJKCgoc2lnbmVkIExORVRfU0VRX0JBU0VUWVBFKSgoYSkgLSAoYikpKSA+IDApCisjZGVmaW5lIExORVRfU0VRX0dUKGEsIGIpCSgoKHNpZ25lZCBMTkVUX1NFUV9CQVNFVFlQRSkoKGEpIC0gKGIpKSkgPiAwKQogCiAvKioKICAqIEluZm9ybWF0aW9uIGFib3V0IGFuIGV2ZW50IG9uIGEgTUQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvbzJpYmxuZC9vMmlibG5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvbzJpYmxuZC9vMmlibG5kLmMKaW5kZXggMDA2MWM4YS4uODkyYzQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL28yaWJsbmQvbzJpYmxuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9vMmlibG5kL28yaWJsbmQuYwpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKIAkJcC0+aWJwX3BhZ2VzW2ldID0gYWxsb2NfcGFnZXNfbm9kZSgKIAkJCQkgICAgY2ZzX2NwdF9zcHJlYWRfbm9kZShsbmV0X2NwdF90YWJsZSgpLCBjcHQpLAotCQkJCSAgICBfX0dGUF9JTywgMCk7CisJCQkJICAgIEdGUF9OT0ZTLCAwKTsKIAkJaWYgKHAtPmlicF9wYWdlc1tpXSA9PSBOVUxMKSB7CiAJCQlDRVJST1IoIkNhbid0IGFsbG9jYXRlIHBhZ2UgJWQgb2YgJWRcbiIsIGksIG5wYWdlcyk7CiAJCQlraWJsbmRfZnJlZV9wYWdlcyhwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9vMmlibG5kL28yaWJsbmRfY2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9vMmlibG5kL28yaWJsbmRfY2IuYwppbmRleCA2MTczZTc0Li5kZmQxNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvbzJpYmxuZC9vMmlibG5kX2NiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL28yaWJsbmQvbzJpYmxuZF9jYi5jCkBAIC00MCw3ICs0MCw3IEBACiAKICNpbmNsdWRlICJvMmlibG5kLmgiCiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfdHhfZG9uZSAobG5ldF9uaV90ICpuaSwga2liX3R4X3QgKnR4KQogewogCWxuZXRfbXNnX3QgKmxudG1zZ1syXTsKQEAgLTk5LDcgKzk5LDcgQEAKIAl9CiB9CiAKLWtpYl90eF90ICoKK3N0YXRpYyBraWJfdHhfdCAqCiBraWJsbmRfZ2V0X2lkbGVfdHgobG5ldF9uaV90ICpuaSwgbG5ldF9uaWRfdCB0YXJnZXQpCiB7CiAJa2liX25ldF90CQkqbmV0ID0gKGtpYl9uZXRfdCAqKW5pLT5uaV9kYXRhOwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJcmV0dXJuIHR4OwogfQogCi12b2lkCitzdGF0aWMgdm9pZAoga2libG5kX2Ryb3Bfcngoa2liX3J4X3QgKnJ4KQogewogCWtpYl9jb25uX3QJCSpjb25uCT0gcngtPnJ4X2Nvbm47CkBAIC0yMDksNyArMjA5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAota2liX3R4X3QgKgorc3RhdGljIGtpYl90eF90ICoKIGtpYmxuZF9maW5kX3dhaXRpbmdfdHhfbG9ja2VkKGtpYl9jb25uX3QgKmNvbm4sIGludCB0eHR5cGUsIF9fdTY0IGNvb2tpZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgKnRtcDsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAoga2libG5kX2hhbmRsZV9jb21wbGV0aW9uKGtpYl9jb25uX3QgKmNvbm4sIGludCB0eHR5cGUsIGludCBzdGF0dXMsIF9fdTY0IGNvb2tpZSkKIHsKIAlraWJfdHhfdCAgICAqdHg7CkBAIC0yNzMsNyArMjczLDcgQEAKIAkJa2libG5kX3R4X2RvbmUobmksIHR4KTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGtpYmxuZF9zZW5kX2NvbXBsZXRpb24oa2liX2Nvbm5fdCAqY29ubiwgaW50IHR5cGUsIGludCBzdGF0dXMsIF9fdTY0IGNvb2tpZSkKIHsKIAlsbmV0X25pX3QgICAqbmkgPSBjb25uLT5pYmNfcGVlci0+aWJwX25pOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJa2libG5kX3F1ZXVlX3R4KHR4LCBjb25uKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGtpYmxuZF9oYW5kbGVfcnggKGtpYl9yeF90ICpyeCkKIHsKIAlraWJfbXNnX3QgICAgKm1zZyA9IHJ4LT5yeF9tc2c7CkBAIC00NTMsNyArNDUzLDcgQEAKIAkJa2libG5kX3Bvc3RfcngocngsIHBvc3RfY3JlZGl0KTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGtpYmxuZF9yeF9jb21wbGV0ZSAoa2liX3J4X3QgKnJ4LCBpbnQgc3RhdHVzLCBpbnQgbm9iKQogewogCWtpYl9tc2dfdCAgICAqbXNnID0gcngtPnJ4X21zZzsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCWtpYmxuZF9kcm9wX3J4KHJ4KTsJCSAgICAgLyogRG9uJ3QgcmUtcG9zdCByeC4gKi8KIH0KIAotc3RydWN0IHBhZ2UgKgorc3RhdGljIHN0cnVjdCBwYWdlICoKIGtpYmxuZF9rdmFkZHJfdG9fcGFnZSAodW5zaWduZWQgbG9uZyB2YWRkcikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTY5NSw3ICs2OTUsNyBAQAogfQogCiAKLWludAorc3RhdGljIGludAoga2libG5kX3NldHVwX3JkX2lvdihsbmV0X25pX3QgKm5pLCBraWJfdHhfdCAqdHgsIGtpYl9yZG1hX2Rlc2NfdCAqcmQsCiAJCSAgICB1bnNpZ25lZCBpbnQgbmlvdiwgc3RydWN0IGlvdmVjICppb3YsIGludCBvZmZzZXQsIGludCBub2IpCiB7CkBAIC03NDgsNyArNzQ4LDcgQEAKIAlyZXR1cm4ga2libG5kX21hcF90eChuaSwgdHgsIHJkLCBzZyAtIHR4LT50eF9mcmFncyk7CiB9CiAKLWludAorc3RhdGljIGludAoga2libG5kX3NldHVwX3JkX2tpb3YgKGxuZXRfbmlfdCAqbmksIGtpYl90eF90ICp0eCwga2liX3JkbWFfZGVzY190ICpyZCwKIAkJICAgICAgaW50IG5raW92LCBsbmV0X2tpb3ZfdCAqa2lvdiwgaW50IG9mZnNldCwgaW50IG5vYikKIHsKQEAgLTc4OCw4ICs3ODgsMTAgQEAKIAlyZXR1cm4ga2libG5kX21hcF90eChuaSwgdHgsIHJkLCBzZyAtIHR4LT50eF9mcmFncyk7CiB9CiAKLWludAorc3RhdGljIGludAoga2libG5kX3Bvc3RfdHhfbG9ja2VkIChraWJfY29ubl90ICpjb25uLCBraWJfdHhfdCAqdHgsIGludCBjcmVkaXQpCisJX19yZWxlYXNlcyhjb25uLT5pYmNfbG9jaykKKwlfX2FjcXVpcmVzKGNvbm4tPmliY19sb2NrKQogewogCWtpYl9tc2dfdAkgKm1zZyA9IHR4LT50eF9tc2c7CiAJa2liX3BlZXJfdAkqcGVlciA9IGNvbm4tPmliY19wZWVyOwpAQCAtOTkyLDcgKzk5NCw3IEBACiAJa2libG5kX2Nvbm5fZGVjcmVmKGNvbm4pOyAvKiAuLi51bnRpbCBoZXJlICovCiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfdHhfY29tcGxldGUgKGtpYl90eF90ICp0eCwgaW50IHN0YXR1cykKIHsKIAlpbnQJICAgZmFpbGVkID0gKHN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKTsKQEAgLTEyNjYsNyArMTI2OCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAoga2libG5kX2Nvbm5lY3RfcGVlciAoa2liX3BlZXJfdCAqcGVlcikKIHsKIAlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21pZDsKQEAgLTE2MjMsNyArMTYyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfcmVwbHkgKGxuZXRfbmlfdCAqbmksIGtpYl9yeF90ICpyeCwgbG5ldF9tc2dfdCAqbG50bXNnKQogewogCWxuZXRfcHJvY2Vzc19pZF90IHRhcmdldCA9IGxudG1zZy0+bXNnX3RhcmdldDsKQEAgLTE4MTAsNyArMTgxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfdGhyZWFkX2ZpbmkgKHZvaWQpCiB7CiAJYXRvbWljX2RlYyAoJmtpYmxuZF9kYXRhLmtpYl9udGhyZWFkcyk7CkBAIC0xODI0LDcgKzE4MjYsNyBAQAogCW1iKCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfcGVlcl9ub3RpZnkgKGtpYl9wZWVyX3QgKnBlZXIpCiB7CiAJaW50CSAgIGVycm9yID0gMDsKQEAgLTE5MzAsNyArMTkzMiw3IEBACiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmtpYmxuZF9kYXRhLmtpYl9nbG9iYWxfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAoga2libG5kX2hhbmRsZV9lYXJseV9yeHMoa2liX2Nvbm5fdCAqY29ubikKIHsKIAl1bnNpZ25lZCBsb25nICAgIGZsYWdzOwpAQCAtMTk1Myw3ICsxOTU1LDcgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgma2libG5kX2RhdGEua2liX2dsb2JhbF9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfYWJvcnRfdHhzKGtpYl9jb25uX3QgKmNvbm4sIHN0cnVjdCBsaXN0X2hlYWQgKnR4cykKIHsKIAlMSVNUX0hFQUQgICAgICAgKHpvbWJpZXMpOwpAQCAtMTk4OSw3ICsxOTkxLDcgQEAKIAlraWJsbmRfdHhsaXN0X2RvbmUoY29ubi0+aWJjX3BlZXItPmlicF9uaSwgJnpvbWJpZXMsIC1FQ09OTkFCT1JURUQpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAoga2libG5kX2ZpbmFsaXNlX2Nvbm4gKGtpYl9jb25uX3QgKmNvbm4pCiB7CiAJTEFTU0VSVCAoIWluX2ludGVycnVwdCgpKTsKQEAgLTIxNjMsNyArMjE2NSw3IEBACiAJa2libG5kX2hhbmRsZV9lYXJseV9yeHMoY29ubik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfcmVqZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbWlkLCBraWJfcmVqX3QgKnJlaikKIHsKIAlpbnQJICByYzsKQEAgLTIxNzQsNyArMjE3Niw3IEBACiAJCUNXQVJOKCJFcnJvciAlZCBzZW5kaW5nIHJlamVjdFxuIiwgcmMpOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIGtpYmxuZF9wYXNzaXZlX2Nvbm5lY3QgKHN0cnVjdCByZG1hX2NtX2lkICpjbWlkLCB2b2lkICpwcml2LCBpbnQgcHJpdl9ub2IpCiB7CiAJcndsb2NrX3QJCSpnX2xvY2sgPSAma2libG5kX2RhdGEua2liX2dsb2JhbF9sb2NrOwpAQCAtMjQ0OCw3ICsyNDUwLDcgQEAKIAlyZXR1cm4gLUVDT05OUkVGVVNFRDsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGtpYmxuZF9yZWNvbm5lY3QgKGtpYl9jb25uX3QgKmNvbm4sIGludCB2ZXJzaW9uLAogCQkgIF9fdTY0IGluY2FybmF0aW9uLCBpbnQgd2h5LCBraWJfY29ubnBhcmFtc190ICpjcCkKIHsKQEAgLTI1MTIsNyArMjUxNCw3IEBACiAJa2libG5kX2Nvbm5lY3RfcGVlcihwZWVyKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGtpYmxuZF9yZWplY3RlZCAoa2liX2Nvbm5fdCAqY29ubiwgaW50IHJlYXNvbiwgdm9pZCAqcHJpdiwgaW50IHByaXZfbm9iKQogewogCWtpYl9wZWVyX3QgICAgKnBlZXIgPSBjb25uLT5pYmNfcGVlcjsKQEAgLTI2MDksMTMgKzI2MTEsMTcgQEAKIAogCQkJY2FzZSBJQkxORF9SRUpFQ1RfTVNHX1FVRVVFX1NJWkU6CiAJCQkJQ0VSUk9SKCIlcyByZWplY3RlZDogaW5jb21wYXRpYmxlIG1lc3NhZ2UgcXVldWUgZGVwdGggJWQsICVkXG4iLAotCQkJCSAgICAgICBsaWJjZnNfbmlkMnN0cihwZWVyLT5pYnBfbmlkKSwgY3AtPmliY3BfcXVldWVfZGVwdGgsCisJCQkJICAgICAgIGxpYmNmc19uaWQyc3RyKHBlZXItPmlicF9uaWQpLAorCQkJCSAgICAgICBjcCAhPSBOVUxMID8gY3AtPmliY3BfcXVldWVfZGVwdGggOgorCQkJCSAgICAgICBJQkxORF9NU0dfUVVFVUVfU0laRShyZWotPmlicl92ZXJzaW9uKSwKIAkJCQkgICAgICAgSUJMTkRfTVNHX1FVRVVFX1NJWkUoY29ubi0+aWJjX3ZlcnNpb24pKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBJQkxORF9SRUpFQ1RfUkRNQV9GUkFHUzoKIAkJCQlDRVJST1IoIiVzIHJlamVjdGVkOiBpbmNvbXBhdGlibGUgIyBvZiBSRE1BIGZyYWdtZW50cyAlZCwgJWRcbiIsCi0JCQkJICAgICAgIGxpYmNmc19uaWQyc3RyKHBlZXItPmlicF9uaWQpLCBjcC0+aWJjcF9tYXhfZnJhZ3MsCisJCQkJICAgICAgIGxpYmNmc19uaWQyc3RyKHBlZXItPmlicF9uaWQpLAorCQkJCSAgICAgICBjcCAhPSBOVUxMID8gY3AtPmliY3BfbWF4X2ZyYWdzIDoKKwkJCQkgICAgICAgSUJMTkRfUkRNQV9GUkFHUyhyZWotPmlicl92ZXJzaW9uKSwKIAkJCQkgICAgICAgSUJMTkRfUkRNQV9GUkFHUyhjb25uLT5pYmNfdmVyc2lvbikpOwogCQkJCWJyZWFrOwogCkBAIC0yNjQ3LDcgKzI2NTMsNyBAQAogCWtpYmxuZF9jb25ucmVxX2RvbmUoY29ubiwgLUVDT05OUkVGVVNFRCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfY2hlY2tfY29ubnJlcGx5IChraWJfY29ubl90ICpjb25uLCB2b2lkICpwcml2LCBpbnQgcHJpdl9ub2IpCiB7CiAJa2liX3BlZXJfdCAgICAqcGVlciA9IGNvbm4tPmliY19wZWVyOwpAQCAtMjc0Niw3ICsyNzUyLDcgQEAKIAlraWJsbmRfY29ubnJlcV9kb25lKGNvbm4sIDApOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIGtpYmxuZF9hY3RpdmVfY29ubmVjdCAoc3RydWN0IHJkbWFfY21faWQgKmNtaWQpCiB7CiAJa2liX3BlZXJfdAkgICAgICAqcGVlciA9IChraWJfcGVlcl90ICopY21pZC0+Y29udGV4dDsKQEAgLTMwMTcsNyArMzAyMyw3IEBACiAJCWtpYmxuZF9jaGVja190eHNfbG9ja2VkKGNvbm4sICZjb25uLT5pYmNfYWN0aXZlX3R4cyk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfY2hlY2tfY29ubnMgKGludCBpZHgpCiB7CiAJTElTVF9IRUFEIChjbG9zZXMpOwpAQCAtMzEwMCw3ICszMTA2LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBraWJsbmRfZGlzY29ubmVjdF9jb25uIChraWJfY29ubl90ICpjb25uKQogewogCUxBU1NFUlQgKCFpbl9pbnRlcnJ1cHQoKSk7CkBAIC0zMjM5LDcgKzMyNDUsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGtpYmxuZF9jb21wbGV0ZSAoc3RydWN0IGliX3djICp3YykKIHsKIAlzd2l0Y2ggKGtpYmxuZF93cmVxaWQydHlwZSh3Yy0+d3JfaWQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvc29ja2xuZC9zb2NrbG5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvc29ja2xuZC9zb2NrbG5kLmMKaW5kZXggMjFkMzZlZS4uNzc1ZGNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL3NvY2tsbmQvc29ja2xuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9zb2NrbG5kL3NvY2tsbmQuYwpAQCAtNTgsMTAgKzU4LDEwIEBACiAJCWlmYWNlID0gJm5ldC0+a3Nubl9pbnRlcmZhY2VzW2ldOwogCiAJCWlmIChpZmFjZS0+a3NuaV9pcGFkZHIgPT0gaXApCi0JCQlyZXR1cm4gKGlmYWNlKTsKKwkJCXJldHVybiBpZmFjZTsKIAl9CiAKLQlyZXR1cm4gKE5VTEwpOworCXJldHVybiBOVUxMOwogfQogCiBrc29ja19yb3V0ZV90ICoKQEAgLTcxLDcgKzcxLDcgQEAKIAogCUxJQkNGU19BTExPQyAocm91dGUsIHNpemVvZiAoKnJvdXRlKSk7CiAJaWYgKHJvdXRlID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7CisJCXJldHVybiBOVUxMOwogCiAJYXRvbWljX3NldCAoJnJvdXRlLT5rc25yX3JlZmNvdW50LCAxKTsKIAlyb3V0ZS0+a3Nucl9wZWVyID0gTlVMTDsKQEAgLTg1LDcgKzg1LDcgQEAKIAlyb3V0ZS0+a3Nucl9jb25uX2NvdW50ID0gMDsKIAlyb3V0ZS0+a3Nucl9zaGFyZV9jb3VudCA9IDA7CiAKLQlyZXR1cm4gKHJvdXRlKTsKKwlyZXR1cm4gcm91dGU7CiB9CiAKIHZvaWQKQEAgLTE5Nyw5ICsxOTcsOSBAQAogCQlDREVCVUcoRF9ORVQsICJnb3QgcGVlciBbJXBdIC0+ICVzICglZClcbiIsCiAJCSAgICAgICBwZWVyLCBsaWJjZnNfaWQyc3RyKGlkKSwKIAkJICAgICAgIGF0b21pY19yZWFkKCZwZWVyLT5rc25wX3JlZmNvdW50KSk7Ci0JCXJldHVybiAocGVlcik7CisJCXJldHVybiBwZWVyOwogCX0KLQlyZXR1cm4gKE5VTEwpOworCXJldHVybiBOVUxMOwogfQogCiBrc29ja19wZWVyX3QgKgpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCWtzb2NrbmFsX3BlZXJfYWRkcmVmKHBlZXIpOwogCXJlYWRfdW5sb2NrKCZrc29ja25hbF9kYXRhLmtzbmRfZ2xvYmFsX2xvY2spOwogCi0JcmV0dXJuIChwZWVyKTsKKwlyZXR1cm4gcGVlcjsKIH0KIAogdm9pZApAQCAtMzE4LDcgKzMxOCw3IEBACiAJfQogIG91dDoKIAlyZWFkX3VubG9jaygma3NvY2tuYWxfZGF0YS5rc25kX2dsb2JhbF9sb2NrKTsKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHZvaWQKQEAgLTQ1OSw3ICs0NTksNyBAQAogCiAJaWYgKGlkLm5pZCA9PSBMTkVUX05JRF9BTlkgfHwKIAkgICAgaWQucGlkID09IExORVRfUElEX0FOWSkKLQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBIYXZlIGEgYnJhbmQgbmV3IHBlZXIgcmVhZHkuLi4gKi8KIAlyYyA9IGtzb2NrbmFsX2NyZWF0ZV9wZWVyKCZwZWVyLCBuaSwgaWQpOwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJcm91dGUgPSBrc29ja25hbF9jcmVhdGVfcm91dGUgKGlwYWRkciwgcG9ydCk7CiAJaWYgKHJvdXRlID09IE5VTEwpIHsKIAkJa3NvY2tuYWxfcGVlcl9kZWNyZWYocGVlcik7Ci0JCXJldHVybiAoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXdyaXRlX2xvY2tfYmgoJmtzb2NrbmFsX2RhdGEua3NuZF9nbG9iYWxfbG9jayk7CkBAIC01MDYsNyArNTA2LDcgQEAKIAogCXdyaXRlX3VubG9ja19iaCgma3NvY2tuYWxfZGF0YS5rc25kX2dsb2JhbF9sb2NrKTsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQKQEAgLTYyMCw3ICs2MjAsNyBAQAogCiAJa3NvY2tuYWxfdHhsaXN0X2RvbmUobmksICZ6b21iaWVzLCAxKTsKIAotCXJldHVybiAocmMpOworCXJldHVybiByYzsKIH0KIAoga3NvY2tfY29ubl90ICoKQEAgLTY1MCwxNSArNjUwLDE0IEBACiAJCQkJY29ubiA9IGxpc3RfZW50cnkgKGN0bXAsIGtzb2NrX2Nvbm5fdCwKIAkJCQkJCSAgICAgICBrc25jX2xpc3QpOwogCQkJCWtzb2NrbmFsX2Nvbm5fYWRkcmVmKGNvbm4pOwotCQkJCXJlYWRfdW5sb2NrKCZrc29ja25hbF9kYXRhLiBcCi0JCQkJCQkga3NuZF9nbG9iYWxfbG9jayk7Ci0JCQkJcmV0dXJuIChjb25uKTsKKwkJCQlyZWFkX3VubG9jaygma3NvY2tuYWxfZGF0YS5rc25kX2dsb2JhbF9sb2NrKTsKKwkJCQlyZXR1cm4gY29ubjsKIAkJCX0KIAkJfQogCX0KIAogCXJlYWRfdW5sb2NrKCZrc29ja25hbF9kYXRhLmtzbmRfZ2xvYmFsX2xvY2spOwotCXJldHVybiAoTlVMTCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIGtzb2NrX3NjaGVkX3QgKgpAQCAtNzA5LDcgKzcwOCw3IEBACiAJfQogCiAJcmVhZF91bmxvY2soJmtzb2NrbmFsX2RhdGEua3NuZF9nbG9iYWxfbG9jayk7Ci0JcmV0dXJuIChuaXApOworCXJldHVybiBuaXA7CiB9CiAKIGludApAQCAtNzQxLDcgKzc0MCw3IEBACiAJfQogCiAJTEFTU0VSVCAoYmVzdCA+PSAwKTsKLQlyZXR1cm4gKGJlc3QpOworCXJldHVybiBiZXN0OwogfQogCiBpbnQKQEAgLTc5Myw4ICs3OTIsNiBAQAogCQkJaXAgPSBwZWVyLT5rc25wX3Bhc3NpdmVfaXBzW2ldOwogCQkJYmVzdF9pZmFjZSA9IGtzb2NrbmFsX2lwMmlmYWNlKHBlZXItPmtzbnBfbmksIGlwKTsKIAotCQkJLyogcGVlciBwYXNzaXZlIGlwcyBhcmUga2VwdCB1cCB0byBkYXRlICovCi0JCQlMQVNTRVJUKGJlc3RfaWZhY2UgIT0gTlVMTCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBjaG9vc2UgYSBuZXcgaW50ZXJmYWNlICovCiAJCQlMQVNTRVJUIChpID09IHBlZXItPmtzbnBfbl9wYXNzaXZlX2lwcyk7CkBAIC04MzUsOCArODMyLDYgQEAKIAkJCXBlZXItPmtzbnBfbl9wYXNzaXZlX2lwcyA9IGkrMTsKIAkJfQogCi0JCUxBU1NFUlQgKGJlc3RfaWZhY2UgIT0gTlVMTCk7Ci0KIAkJLyogbWFyayB0aGUgYmVzdCBtYXRjaGluZyBwZWVyIElQIHVzZWQgKi8KIAkJaiA9IGtzb2NrbmFsX21hdGNoX3BlZXJpcChiZXN0X2lmYWNlLCBwZWVyaXBzLCBuX3BlZXJpcHMpOwogCQlwZWVyaXBzW2pdID0gMDsKQEAgLTg0Nyw3ICs4NDIsNyBAQAogCiAJd3JpdGVfdW5sb2NrX2JoKGdsb2JhbF9sb2NrKTsKIAotCXJldHVybiAobl9pcHMpOworCXJldHVybiBuX2lwczsKIH0KIAogdm9pZApAQCAtMTU3MSw3ICsxNTY2LDcgQEAKIAljb25uLT5rc25jX3R4X3JlYWR5ID0gMTsKIAogCWlmICghY29ubi0+a3NuY190eF9zY2hlZHVsZWQgJiYKLQkgICAgIWxpc3RfZW1wdHkoJmNvbm4tPmtzbmNfdHhfcXVldWUpKXsKKwkgICAgIWxpc3RfZW1wdHkoJmNvbm4tPmtzbmNfdHhfcXVldWUpKSB7CiAJCWxpc3RfYWRkX3RhaWwgKCZjb25uLT5rc25jX3R4X2xpc3QsCiAJCQkgICAgICAgJnNjaGVkLT5rc3NfdHhfY29ubnMpOwogCQljb25uLT5rc25jX3R4X3NjaGVkdWxlZCA9IDE7CkBAIC0xNzA5LDcgKzE3MDQsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIChjb3VudCk7CisJcmV0dXJuIGNvdW50OwogfQogCiBpbnQKQEAgLTE3MjUsNyArMTcyMCw3IEBACiAKIAl3cml0ZV91bmxvY2tfYmgoJmtzb2NrbmFsX2RhdGEua3NuZF9nbG9iYWxfbG9jayk7CiAKLQlyZXR1cm4gKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIGludApAQCAtMTc2Niw3ICsxNzYxLDcgQEAKIAogCS8qIHdpbGRjYXJkcyBhbHdheXMgc3VjY2VlZCAqLwogCWlmIChpZC5uaWQgPT0gTE5FVF9OSURfQU5ZIHx8IGlkLnBpZCA9PSBMTkVUX1BJRF9BTlkgfHwgaXBhZGRyID09IDApCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTkzNyw3ICsxOTMyLDcgQEAKIAogCX0KIAotCXJldHVybiAocmMpOworCXJldHVybiByYzsKIH0KIAogaW50CkBAIC0xOTU1LDcgKzE5NTAsNyBAQAogCiAJaWYgKGlwYWRkcmVzcyA9PSAwIHx8CiAJICAgIG5ldG1hc2sgPT0gMCkKLQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3cml0ZV9sb2NrX2JoKCZrc29ja25hbF9kYXRhLmtzbmRfZ2xvYmFsX2xvY2spOwogCkBAIC0xOTk5LDcgKzE5OTQsNyBAQAogCiAJd3JpdGVfdW5sb2NrX2JoKCZrc29ja25hbF9kYXRhLmtzbmRfZ2xvYmFsX2xvY2spOwogCi0JcmV0dXJuIChyYyk7CisJcmV0dXJuIHJjOwogfQogCiB2b2lkCkBAIC0yMDg4LDcgKzIwODMsNyBAQAogCiAJd3JpdGVfdW5sb2NrX2JoKCZrc29ja25hbF9kYXRhLmtzbmRfZ2xvYmFsX2xvY2spOwogCi0JcmV0dXJuIChyYyk7CisJcmV0dXJuIHJjOwogfQogCiBpbnQKQEAgLTIwOTgsNyArMjA5Myw3IEBACiAJc3RydWN0IGxpYmNmc19pb2N0bF9kYXRhICpkYXRhID0gYXJnOwogCWludCByYzsKIAotCXN3aXRjaChjbWQpIHsKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSU9DX0xJQkNGU19HRVRfSU5URVJGQUNFOiB7CiAJCWtzb2NrX25ldF90ICAgICAgICpuZXQgPSBuaS0+bmlfZGF0YTsKIAkJa3NvY2tfaW50ZXJmYWNlX3QgKmlmYWNlOwpAQCAtMjI5OSwxMiArMjI5NCwxMiBAQAogCQkJCWZvciAoaiA9IDA7IGogPCBpbmZvLT5rc2lfbnRocmVhZHNfbWF4OyBqKyspIHsKIAogCQkJCQlzY2hlZCA9ICZpbmZvLT5rc2lfc2NoZWRzW2pdOwotCQkJCQlMQVNTRVJUKGxpc3RfZW1wdHkoJnNjaGVkLT5cCi0JCQkJCQkJICAgICAgIGtzc190eF9jb25ucykpOwotCQkJCQlMQVNTRVJUKGxpc3RfZW1wdHkoJnNjaGVkLT5cCi0JCQkJCQkJICAgICAgIGtzc19yeF9jb25ucykpOwotCQkJCQlMQVNTRVJUKGxpc3RfZW1wdHkoJnNjaGVkLT4gXAotCQkJCQkJICBrc3Nfem9tYmllX25vb3BfdHhzKSk7CisJCQkJCUxBU1NFUlQobGlzdF9lbXB0eSgKKwkJCQkJCSZzY2hlZC0+a3NzX3R4X2Nvbm5zKSk7CisJCQkJCUxBU1NFUlQobGlzdF9lbXB0eSgKKwkJCQkJCSZzY2hlZC0+a3NzX3J4X2Nvbm5zKSk7CisJCQkJCUxBU1NFUlQobGlzdF9lbXB0eSgKKwkJCQkJCSZzY2hlZC0+a3NzX3pvbWJpZV9ub29wX3R4cykpOwogCQkJCQlMQVNTRVJUKHNjaGVkLT5rc3NfbmNvbm5zID09IDApOwogCQkJCX0KIAkJCX0KQEAgLTI1MTQsNyArMjUwOSw4IEBACiAJCWxpc3RfZm9yX2VhY2ggKHRtcCwgJmtzb2NrbmFsX2RhdGEua3NuZF9wZWVyc1tpXSkgewogCQkJcGVlciA9IGxpc3RfZW50cnkgKHRtcCwga3NvY2tfcGVlcl90LCBrc25wX2xpc3QpOwogCi0JCQlpZiAocGVlci0+a3NucF9uaSA9PSBuaSkgYnJlYWs7CisJCQlpZiAocGVlci0+a3NucF9uaSA9PSBuaSkKKwkJCQlicmVhazsKIAogCQkJcGVlciA9IE5VTEw7CiAJCX0KQEAgLTI2ODMsOCArMjY3OSw4IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAma3NvY2tuYWxfZGF0YS5rc25kX25ldHMsCiAJCQkJCWtzbm5fbGlzdCkgewogCQkJZm9yIChqID0gMDsgIWZvdW5kICYmIGogPCB0bXAtPmtzbm5fbmludGVyZmFjZXM7IGorKykgewotCQkJCWNoYXIgKmlmbmFtMiA9ICZ0bXAtPmtzbm5faW50ZXJmYWNlc1tqXS5cCi0JCQkJCSAgICAga3NuaV9uYW1lWzBdOworCQkJCWNoYXIgKmlmbmFtMiA9CisJCQkJCSZ0bXAtPmtzbm5faW50ZXJmYWNlc1tqXS5rc25pX25hbWVbMF07CiAJCQkJY2hhciAqY29sb24yID0gc3RyY2hyKGlmbmFtMiwgJzonKTsKIAogCQkJCWlmIChjb2xvbjIgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9zb2NrbG5kL3NvY2tsbmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9zb2NrbG5kL3NvY2tsbmQuaAppbmRleCBkZjJiZTdhLi4xMDlhMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvc29ja2xuZC9zb2NrbG5kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL3NvY2tsbmQvc29ja2xuZC5oCkBAIC00MTgsNyArNDE4LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9ICgodW5zaWduZWQgaW50KW5pZCkgJSBrc29ja25hbF9kYXRhLmtzbmRfcGVlcl9oYXNoX3NpemU7CiAKLQlyZXR1cm4gKCZrc29ja25hbF9kYXRhLmtzbmRfcGVlcnMgW2hhc2hdKTsKKwlyZXR1cm4gJmtzb2NrbmFsX2RhdGEua3NuZF9wZWVyc1toYXNoXTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC00NTIsNyArNDUyLDcgQEAKIAl9CiAJcmVhZF91bmxvY2soJmtzb2NrbmFsX2RhdGEua3NuZF9nbG9iYWxfbG9jayk7CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL3NvY2tsbmQvc29ja2xuZF9jYi5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL3NvY2tsbmQvc29ja2xuZF9jYi5jCmluZGV4IGJkZjk1ZWEuLjc1YmQ2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9zb2NrbG5kL3NvY2tsbmRfY2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvc29ja2xuZC9zb2NrbG5kX2NiLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXJjID0ga3NvY2tuYWxfbGliX3NlbmRfaW92KGNvbm4sIHR4KTsKIAogCWlmIChyYyA8PSAwKQkJCSAgICAvKiBzZW50IG5vdGhpbmc/ICovCi0JCXJldHVybiAocmMpOworCQlyZXR1cm4gcmM7CiAKIAlub2IgPSByYzsKIAlMQVNTRVJUIChub2IgPD0gdHgtPnR4X3Jlc2lkKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQlpZiAobm9iIDwgKGludCkgaW92LT5pb3ZfbGVuKSB7CiAJCQlpb3YtPmlvdl9iYXNlID0gKHZvaWQgKikoKGNoYXIgKilpb3YtPmlvdl9iYXNlICsgbm9iKTsKIAkJCWlvdi0+aW92X2xlbiAtPSBub2I7Ci0JCQlyZXR1cm4gKHJjKTsKKwkJCXJldHVybiByYzsKIAkJfQogCiAJCW5vYiAtPSBpb3YtPmlvdl9sZW47CkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJdHgtPnR4X25pb3YtLTsKIAl9IHdoaWxlIChub2IgIT0gMCk7CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIGludApAQCAtMTU4LDcgKzE1OCw3IEBACiAJcmMgPSBrc29ja25hbF9saWJfc2VuZF9raW92KGNvbm4sIHR4KTsKIAogCWlmIChyYyA8PSAwKQkJCSAgICAvKiBzZW50IG5vdGhpbmc/ICovCi0JCXJldHVybiAocmMpOworCQlyZXR1cm4gcmM7CiAKIAlub2IgPSByYzsKIAlMQVNTRVJUIChub2IgPD0gdHgtPnR4X3Jlc2lkKTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQl0eC0+dHhfbmtpb3YtLTsKIAl9IHdoaWxlIChub2IgIT0gMCk7CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIGludApAQCAtMTk4LDcgKzE5OCw3IEBACiAJcmMgPSBrc29ja25hbF9jb25uc29ja19hZGRyZWYoY29ubik7CiAJaWYgKHJjICE9IDApIHsKIAkJTEFTU0VSVCAoY29ubi0+a3NuY19jbG9zaW5nKTsKLQkJcmV0dXJuICgtRVNIVVRET1dOKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCiAJZG8gewpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJfSB3aGlsZSAodHgtPnR4X3Jlc2lkICE9IDApOwogCiAJa3NvY2tuYWxfY29ubnNvY2tfZGVjcmVmKGNvbm4pOwotCXJldHVybiAocmMpOworCXJldHVybiByYzsKIH0KIAogaW50CkBAIC0yNjIsNyArMjYyLDcgQEAKIAlyYyA9IGtzb2NrbmFsX2xpYl9yZWN2X2lvdihjb25uKTsKIAogCWlmIChyYyA8PSAwKQotCQlyZXR1cm4gKHJjKTsKKwkJcmV0dXJuIHJjOwogCiAJLyogcmVjZWl2ZWQgc29tZXRoaW5nLi4uICovCiAJbm9iID0gcmM7CkBAIC0yODIsNyArMjgyLDcgQEAKIAkJaWYgKG5vYiA8IChpbnQpaW92LT5pb3ZfbGVuKSB7CiAJCQlpb3YtPmlvdl9sZW4gLT0gbm9iOwogCQkJaW92LT5pb3ZfYmFzZSA9ICh2b2lkICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIG5vYik7Ci0JCQlyZXR1cm4gKC1FQUdBSU4pOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAogCQlub2IgLT0gaW92LT5pb3ZfbGVuOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCWNvbm4tPmtzbmNfcnhfbmlvdi0tOwogCX0gd2hpbGUgKG5vYiAhPSAwKTsKIAotCXJldHVybiAocmMpOworCXJldHVybiByYzsKIH0KIAogaW50CkBAIC0zMDYsNyArMzA2LDcgQEAKIAlyYyA9IGtzb2NrbmFsX2xpYl9yZWN2X2tpb3YoY29ubik7CiAKIAlpZiAocmMgPD0gMCkKLQkJcmV0dXJuIChyYyk7CisJCXJldHVybiByYzsKIAogCS8qIHJlY2VpdmVkIHNvbWV0aGluZy4uLiAqLwogCW5vYiA9IHJjOwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJcmMgPSBrc29ja25hbF9jb25uc29ja19hZGRyZWYoY29ubik7CiAJaWYgKHJjICE9IDApIHsKIAkJTEFTU0VSVCAoY29ubi0+a3NuY19jbG9zaW5nKTsKLQkJcmV0dXJuICgtRVNIVVRET1dOKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCiAJZm9yICg7OykgewpAQCAtNTE1LDExICs1MTUsMTEgQEAKIAkJLyogU2VudCBldmVyeXRoaW5nIE9LICovCiAJCUxBU1NFUlQgKHJjID09IDApOwogCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChyYyA9PSAtRUFHQUlOKQotCQlyZXR1cm4gKHJjKTsKKwkJcmV0dXJuIHJjOwogCiAJaWYgKHJjID09IC1FTk9NRU0pIHsKIAkJc3RhdGljIGludCBjb3VudGVyOwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJCQl3YWtlX3VwICgma3NvY2tuYWxfZGF0YS5rc25kX3JlYXBlcl93YWl0cSk7CiAKIAkJc3Bpbl91bmxvY2tfYmgoJmtzb2NrbmFsX2RhdGEua3NuZF9yZWFwZXJfbG9jayk7Ci0JCXJldHVybiAocmMpOworCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogQWN0dWFsIGVycm9yICovCkBAIC01NzYsNyArNTc2LDcgQEAKIAlrc29ja25hbF9jbG9zZV9jb25uX2FuZF9zaWJsaW5ncyAoY29ubiwKIAkJCQkJICAoY29ubi0+a3NuY19jbG9zaW5nKSA/IDAgOiByYyk7CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHZvaWQKQEAgLTgwOCwxMCArODA4LDEwIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXJldHVybiAocm91dGUpOworCQlyZXR1cm4gcm91dGU7CiAJfQogCi0JcmV0dXJuIChOVUxMKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAoga3NvY2tfcm91dGVfdCAqCkBAIC04MjYsMTAgKzgyNiwxMCBAQAogCQlMQVNTRVJUICghcm91dGUtPmtzbnJfY29ubmVjdGluZyB8fCByb3V0ZS0+a3Nucl9zY2hlZHVsZWQpOwogCiAJCWlmIChyb3V0ZS0+a3Nucl9zY2hlZHVsZWQpCi0JCQlyZXR1cm4gKHJvdXRlKTsKKwkJCXJldHVybiByb3V0ZTsKIAl9CiAKLQlyZXR1cm4gKE5VTEwpOworCXJldHVybiBOVUxMOwogfQogCiBpbnQKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCQkJCQkgKiBjb25uZWN0aW9uLi4uICovCiAJCQkJCWtzb2NrbmFsX3F1ZXVlX3R4X2xvY2tlZCAodHgsIGNvbm4pOwogCQkJCQlyZWFkX3VubG9jayhnX2xvY2spOwotCQkJCQlyZXR1cm4gKDApOworCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTkwMSw3ICs5MDEsNyBAQAogCQkvKiBDb25uZWN0aW9uIGV4aXN0czsgcXVldWUgbWVzc2FnZSBvbiBpdCAqLwogCQlrc29ja25hbF9xdWV1ZV90eF9sb2NrZWQgKHR4LCBjb25uKTsKIAkJd3JpdGVfdW5sb2NrX2JoKGdfbG9jayk7Ci0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChwZWVyLT5rc25wX2FjY2VwdGluZyA+IDAgfHwKQEAgLTkyMCw3ICs5MjAsNyBAQAogCiAJLyogTkIgUm91dGVzIG1heSBiZSBpZ25vcmVkIGlmIGNvbm5lY3Rpb25zIHRvIHRoZW0gZmFpbGVkIHJlY2VudGx5ICovCiAJQ05FVEVSUigiTm8gdXNhYmxlIHJvdXRlcyB0byAlc1xuIiwgbGliY2ZzX2lkMnN0cihpZCkpOwotCXJldHVybiAoLUVIT1NUVU5SRUFDSCk7CisJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiB9CiAKIGludApAQCAtOTY1LDcgKzk2NSw3IEBACiAJCSAgICAgICB0eXBlLCBkZXNjX3NpemUpOwogCQlpZiAobG50bXNnLT5tc2dfdm1mbHVzaCkKIAkJCWNmc19tZW1vcnlfcHJlc3N1cmVfcmVzdG9yZShtcGZsYWcpOwotCQlyZXR1cm4gKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl0eC0+dHhfY29ubiA9IE5VTEw7CQkgICAgIC8qIHNldCB3aGVuIGFzc2lnbmVkIGEgY29ubiAqLwpAQCAtOTk5LDEwICs5OTksMTAgQEAKIAkJY2ZzX21lbW9yeV9wcmVzc3VyZV9yZXN0b3JlKG1wZmxhZyk7CiAKIAlpZiAocmMgPT0gMCkKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAKIAlrc29ja25hbF9mcmVlX3R4KHR4KTsKLQlyZXR1cm4gKC1FSU8pOworCXJldHVybiAtRUlPOwogfQogCiBpbnQKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJCWNvbm4tPmtzbmNfcnhfa2lvdiA9IE5VTEw7CiAJCWNvbm4tPmtzbmNfcnhfbmtpb3YgPSAwOwogCQljb25uLT5rc25jX3J4X2NzdW0gPSB+MDsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogU2V0IHVwIHRvIHNraXAgYXMgbXVjaCBhcyBwb3NzaWJsZSBub3cuICBJZiB0aGVyZSdzIG1vcmUgbGVmdApAQCAtMTEwNiw3ICsxMTA2LDcgQEAKIAljb25uLT5rc25jX3J4X2tpb3YgPSBOVUxMOwogCWNvbm4tPmtzbmNfcnhfbmtpb3YgPSAwOwogCWNvbm4tPmtzbmNfcnhfbm9iX3dhbnRlZCA9IHNraXBwZWQ7Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50CkBAIC0xMTUzLDcgKzExNTMsNyBAQAogCiAJCWlmIChjb25uLT5rc25jX3J4X25vYl93YW50ZWQgIT0gMCkgewogCQkJLyogc2hvcnQgcmVhZCAqLwotCQkJcmV0dXJuICgtRUFHQUlOKTsKKwkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJfQogCXN3aXRjaCAoY29ubi0+a3NuY19yeF9zdGF0ZSkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAKIAkJCSAgICAgICBjb25uLT5rc25jX21zZy5rc21fdHlwZSk7CiAJCQlrc29ja25hbF9uZXdfcGFja2V0KGNvbm4sIDApOwogCQkJa3NvY2tuYWxfY2xvc2VfY29ubl9hbmRfc2libGluZ3MoY29ubiwgLUVQUk9UTyk7Ci0JCQlyZXR1cm4gKC1FUFJPVE8pOworCQkJcmV0dXJuIC1FUFJPVE87CiAJCX0KIAogCQlpZiAoY29ubi0+a3NuY19tc2cua3NtX3R5cGUgPT0gS1NPQ0tfTVNHX05PT1AgJiYKQEAgLTExODQsNyArMTE4NCw3IEBACiAJCQkgICAgICAgY29ubi0+a3NuY19tc2cua3NtX2NzdW0sIGNvbm4tPmtzbmNfcnhfY3N1bSk7CiAJCQlrc29ja25hbF9uZXdfcGFja2V0KGNvbm4sIDApOwogCQkJa3NvY2tuYWxfY2xvc2VfY29ubl9hbmRfc2libGluZ3MoY29ubiwgLUVQUk9UTyk7Ci0JCQlyZXR1cm4gKC1FSU8pOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCQlpZiAoY29ubi0+a3NuY19tc2cua3NtX3pjX2Nvb2tpZXNbMV0gIT0gMCkgewpAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAkJCQkgICAgICAgY29va2llLCBjb25uLT5rc25jX21zZy5rc21femNfY29va2llc1sxXSk7CiAJCQkJa3NvY2tuYWxfbmV3X3BhY2tldChjb25uLCAwKTsKIAkJCQlrc29ja25hbF9jbG9zZV9jb25uX2FuZF9zaWJsaW5ncyhjb25uLCAtRVBST1RPKTsKLQkJCQlyZXR1cm4gKHJjKTsKKwkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCX0KIApAQCAtMTI1Miw3ICsxMjUyLDcgQEAKIAkJCWtzb2NrbmFsX25ld19wYWNrZXQoY29ubiwgMCk7CiAJCQlrc29ja25hbF9jbG9zZV9jb25uX2FuZF9zaWJsaW5ncyAoY29ubiwgcmMpOwogCQkJa3NvY2tuYWxfY29ubl9kZWNyZWYoY29ubik7Ci0JCQlyZXR1cm4gKC1FUFJPVE8pOworCQkJcmV0dXJuIC1FUFJPVE87CiAJCX0KIAogCQkvKiBJJ20gcmFjaW5nIHdpdGgga3NvY2tuYWxfcmVjdigpICovCkBAIC0xMjk1LDcgKzEyOTUsNyBAQAogCQlpZiAocmMgIT0gMCkgewogCQkJa3NvY2tuYWxfbmV3X3BhY2tldChjb25uLCAwKTsKIAkJCWtzb2NrbmFsX2Nsb3NlX2Nvbm5fYW5kX3NpYmxpbmdzIChjb25uLCByYyk7Ci0JCQlyZXR1cm4gKC1FUFJPVE8pOworCQkJcmV0dXJuIC1FUFJPVE87CiAJCX0KIAkJLyogRmFsbCB0aHJvdWdoICovCiAKQEAgLTEzMTEsNyArMTMxMSw3IEBACiAKIAkvKiBOb3QgUmVhY2hlZCAqLwogCUxCVUcgKCk7Ci0JcmV0dXJuICgtRUlOVkFMKTsJCSAgICAgICAvKiBrZWVwIGdjYyBoYXBweSAqLworCXJldHVybiAtRUlOVkFMOwkJICAgICAgIC8qIGtlZXAgZ2NjIGhhcHB5ICovCiB9CiAKIGludApAQCAtMTY3OSwxMyArMTY3OSwxMyBAQAogCXsKIAljYXNlIFNPQ0tMTkRfQ09OTl9BTlk6CiAJY2FzZSBTT0NLTE5EX0NPTk5fQ09OVFJPTDoKLQkJcmV0dXJuICh0eXBlKTsKKwkJcmV0dXJuIHR5cGU7CiAJY2FzZSBTT0NLTE5EX0NPTk5fQlVMS19JTjoKIAkJcmV0dXJuIFNPQ0tMTkRfQ09OTl9CVUxLX09VVDsKIAljYXNlIFNPQ0tMTkRfQ09OTl9CVUxLX09VVDoKIAkJcmV0dXJuIFNPQ0tMTkRfQ09OTl9CVUxLX0lOOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAoU09DS0xORF9DT05OX05PTkUpOworCQlyZXR1cm4gU09DS0xORF9DT05OX05PTkU7CiAJfQogfQogCkBAIC0yMjkxLDcgKzIyOTEsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlyZXR1cm4gKGNvbm4pOworCQkJcmV0dXJuIGNvbm47CiAJCX0KIAogCQlpZiAoY29ubi0+a3NuY19yeF9zdGFydGVkICYmCkBAIC0yMzA3LDcgKzIzMDcsNyBAQAogCQkJCWNvbm4tPmtzbmNfcnhfc3RhdGUsCiAJCQkJY29ubi0+a3NuY19yeF9ub2Jfd2FudGVkLAogCQkJCWNvbm4tPmtzbmNfcnhfbm9iX2xlZnQpOwotCQkJcmV0dXJuIChjb25uKTsKKwkJCXJldHVybiBjb25uOwogCQl9CiAKIAkJaWYgKCghbGlzdF9lbXB0eSgmY29ubi0+a3NuY190eF9xdWV1ZSkgfHwKQEAgLTIzMjIsMTEgKzIzMjIsMTEgQEAKIAkJCQlsaWJjZnNfaWQyc3RyKHBlZXItPmtzbnBfaWQpLAogCQkJCSZjb25uLT5rc25jX2lwYWRkciwKIAkJCQljb25uLT5rc25jX3BvcnQpOwotCQkJcmV0dXJuIChjb25uKTsKKwkJCXJldHVybiBjb25uOwogCQl9CiAJfQogCi0JcmV0dXJuIChOVUxMKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvc29ja2xuZC9zb2NrbG5kX2xpYi1saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2tsbmRzL3NvY2tsbmQvc29ja2xuZF9saWItbGludXguYwppbmRleCAzNzc1OGQxLi5kMThiYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQva2xuZHMvc29ja2xuZC9zb2NrbG5kX2xpYi1saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9rbG5kcy9zb2NrbG5kL3NvY2tsbmRfbGliLWxpbnV4LmMKQEAgLTE4OCw3ICsxODgsNiBAQAoga3NvY2tuYWxfbGliX2VhZ2VyX2FjayAoa3NvY2tfY29ubl90ICpjb25uKQogewogCWludAkgICAgb3B0ID0gMTsKLQltbV9zZWdtZW50X3QgICBvbGRtbSA9IGdldF9mcygpOwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBjb25uLT5rc25jX3NvY2s7CiAKIAkvKiBSZW1pbmQgdGhlIHNvY2tldCB0byBBQ0sgZWFnZXJseS4gIElmIEkgZG9uJ3QsIHRoZSBzb2NrZXQgbWlnaHQKQEAgLTE5NiwxMCArMTk1LDggQEAKIAkgKiBvbiwgaW50cm9kdWNpbmcgZGVsYXkgaW4gY29tcGxldGluZyB6ZXJvLWNvcHkgc2VuZHMgaW4gbXkKIAkgKiBwZWVyLiAqLwogCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0Jc29jay0+b3BzLT5zZXRzb2Nrb3B0IChzb2NrLCBTT0xfVENQLCBUQ1BfUVVJQ0tBQ0ssCisJa2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX1FVSUNLQUNLLAogCQkJICAgICAgIChjaGFyICopJm9wdCwgc2l6ZW9mIChvcHQpKTsKLQlzZXRfZnMob2xkbW0pOwogfQogCiBpbnQKQEAgLTM4Myw3ICszODAsNyBAQAogCQkJa3VubWFwKGtpb3ZbaV0ua2lvdl9wYWdlKTsKIAl9CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHZvaWQKQEAgLTQyOCw3ICs0MjUsNiBAQAogaW50CiBrc29ja25hbF9saWJfZ2V0X2Nvbm5fdHVuYWJsZXMgKGtzb2NrX2Nvbm5fdCAqY29ubiwgaW50ICp0eG1lbSwgaW50ICpyeG1lbSwgaW50ICpuYWdsZSkKIHsKLQltbV9zZWdtZW50X3QgICBvbGRtbSA9IGdldF9mcyAoKTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gY29ubi0+a3NuY19zb2NrOwogCWludAkgICAgbGVuOwogCWludAkgICAgcmM7CkBAIC00MzcsMTYgKzQzMywxNCBAQAogCWlmIChyYyAhPSAwKSB7CiAJCUxBU1NFUlQgKGNvbm4tPmtzbmNfY2xvc2luZyk7CiAJCSp0eG1lbSA9ICpyeG1lbSA9ICpuYWdsZSA9IDA7Ci0JCXJldHVybiAoLUVTSFVURE9XTik7CisJCXJldHVybiAtRVNIVVRET1dOOwogCX0KIAogCXJjID0gbGliY2ZzX3NvY2tfZ2V0YnVmKHNvY2ssIHR4bWVtLCByeG1lbSk7CiAJaWYgKHJjID09IDApIHsKIAkJbGVuID0gc2l6ZW9mKCpuYWdsZSk7Ci0JCXNldF9mcyhLRVJORUxfRFMpOwotCQlyYyA9IHNvY2stPm9wcy0+Z2V0c29ja29wdChzb2NrLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKKwkJcmMgPSBrZXJuZWxfZ2V0c29ja29wdChzb2NrLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKIAkJCQkJICAgKGNoYXIgKiluYWdsZSwgJmxlbik7Ci0JCXNldF9mcyhvbGRtbSk7CiAJfQogCiAJa3NvY2tuYWxfY29ubnNvY2tfZGVjcmVmKGNvbm4pOwpAQCAtNDU2LDEzICs0NTAsMTIgQEAKIAllbHNlCiAJCSp0eG1lbSA9ICpyeG1lbSA9ICpuYWdsZSA9IDA7CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIGludAoga3NvY2tuYWxfbGliX3NldHVwX3NvY2sgKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7Ci0JbW1fc2VnbWVudF90ICAgIG9sZG1tID0gZ2V0X2ZzICgpOwogCWludAkgICAgIHJjOwogCWludAkgICAgIG9wdGlvbjsKIAlpbnQJICAgICBrZWVwX2lkbGU7CkBAIC00NzksMzUgKzQ3MiwyOSBAQAogCWxpbmdlci5sX29ub2ZmID0gMDsKIAlsaW5nZXIubF9saW5nZXIgPSAwOwogCi0Jc2V0X2ZzIChLRVJORUxfRFMpOwotCXJjID0gc29ja19zZXRzb2Nrb3B0IChzb2NrLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCisJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCiAJCQkgICAgICAoY2hhciAqKSZsaW5nZXIsIHNpemVvZiAobGluZ2VyKSk7Ci0Jc2V0X2ZzIChvbGRtbSk7CiAJaWYgKHJjICE9IDApIHsKIAkJQ0VSUk9SICgiQ2FuJ3Qgc2V0IFNPX0xJTkdFUjogJWRcbiIsIHJjKTsKLQkJcmV0dXJuIChyYyk7CisJCXJldHVybiByYzsKIAl9CiAKIAlvcHRpb24gPSAtMTsKLQlzZXRfZnMgKEtFUk5FTF9EUyk7Ci0JcmMgPSBzb2NrLT5vcHMtPnNldHNvY2tvcHQgKHNvY2ssIFNPTF9UQ1AsIFRDUF9MSU5HRVIyLAorCXJjID0ga2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX0xJTkdFUjIsCiAJCQkJICAgIChjaGFyICopJm9wdGlvbiwgc2l6ZW9mIChvcHRpb24pKTsKLQlzZXRfZnMgKG9sZG1tKTsKIAlpZiAocmMgIT0gMCkgewogCQlDRVJST1IgKCJDYW4ndCBzZXQgU09fTElOR0VSMjogJWRcbiIsIHJjKTsKLQkJcmV0dXJuIChyYyk7CisJCXJldHVybiByYzsKIAl9CiAKIAlpZiAoISprc29ja25hbF90dW5hYmxlcy5rc25kX25hZ2xlKSB7CiAJCW9wdGlvbiA9IDE7CiAKLQkJc2V0X2ZzIChLRVJORUxfRFMpOwotCQlyYyA9IHNvY2stPm9wcy0+c2V0c29ja29wdCAoc29jaywgU09MX1RDUCwgVENQX05PREVMQVksCisJCXJjID0ga2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX05PREVMQVksCiAJCQkJCSAgICAoY2hhciAqKSZvcHRpb24sIHNpemVvZiAob3B0aW9uKSk7Ci0JCXNldF9mcyAob2xkbW0pOwogCQlpZiAocmMgIT0gMCkgewogCQkJQ0VSUk9SICgiQ2FuJ3QgZGlzYWJsZSBuYWdsZTogJWRcbiIsIHJjKTsKLQkJCXJldHVybiAocmMpOworCQkJcmV0dXJuIHJjOwogCQl9CiAJfQogCkBAIC01MTgsNyArNTA1LDcgQEAKIAkJQ0VSUk9SICgiQ2FuJ3Qgc2V0IGJ1ZmZlciB0eCAlZCwgcnggJWQgYnVmZmVyczogJWRcbiIsCiAJCQkqa3NvY2tuYWxfdHVuYWJsZXMua3NuZF90eF9idWZmZXJfc2l6ZSwKIAkJCSprc29ja25hbF90dW5hYmxlcy5rc25kX3J4X2J1ZmZlcl9zaXplLCByYyk7Ci0JCXJldHVybiAocmMpOworCQlyZXR1cm4gcmM7CiAJfQogCiAvKiBUQ1BfQkFDS09GRl8qIHNvY2tvcHQgdHVuYWJsZXMgdW5zdXBwb3J0ZWQgaW4gc3RvY2sga2VybmVscyAqLwpAQCAtNTMxLDQ2ICs1MTgsMzggQEAKIAlkb19rZWVwYWxpdmUgPSAoa2VlcF9pZGxlID4gMCAmJiBrZWVwX2NvdW50ID4gMCAmJiBrZWVwX2ludHZsID4gMCk7CiAKIAlvcHRpb24gPSAoZG9fa2VlcGFsaXZlID8gMSA6IDApOwotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQlyYyA9IHNvY2tfc2V0c29ja29wdCAoc29jaywgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAorCXJjID0ga2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAogCQkJICAgICAgKGNoYXIgKikmb3B0aW9uLCBzaXplb2YgKG9wdGlvbikpOwotCXNldF9mcyAob2xkbW0pOwogCWlmIChyYyAhPSAwKSB7CiAJCUNFUlJPUiAoIkNhbid0IHNldCBTT19LRUVQQUxJVkU6ICVkXG4iLCByYyk7Ci0JCXJldHVybiAocmMpOworCQlyZXR1cm4gcmM7CiAJfQogCiAJaWYgKCFkb19rZWVwYWxpdmUpCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCi0Jc2V0X2ZzIChLRVJORUxfRFMpOwotCXJjID0gc29jay0+b3BzLT5zZXRzb2Nrb3B0IChzb2NrLCBTT0xfVENQLCBUQ1BfS0VFUElETEUsCisJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfVENQLCBUQ1BfS0VFUElETEUsCiAJCQkJICAgIChjaGFyICopJmtlZXBfaWRsZSwgc2l6ZW9mIChrZWVwX2lkbGUpKTsKLQlzZXRfZnMgKG9sZG1tKTsKIAlpZiAocmMgIT0gMCkgewogCQlDRVJST1IgKCJDYW4ndCBzZXQgVENQX0tFRVBJRExFOiAlZFxuIiwgcmMpOwotCQlyZXR1cm4gKHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQlyYyA9IHNvY2stPm9wcy0+c2V0c29ja29wdCAoc29jaywgU09MX1RDUCwgVENQX0tFRVBJTlRWTCwKKwlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9UQ1AsIFRDUF9LRUVQSU5UVkwsCiAJCQkJICAgIChjaGFyICopJmtlZXBfaW50dmwsIHNpemVvZiAoa2VlcF9pbnR2bCkpOwotCXNldF9mcyAob2xkbW0pOwogCWlmIChyYyAhPSAwKSB7CiAJCUNFUlJPUiAoIkNhbid0IHNldCBUQ1BfS0VFUElOVFZMOiAlZFxuIiwgcmMpOwotCQlyZXR1cm4gKHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQlyYyA9IHNvY2stPm9wcy0+c2V0c29ja29wdCAoc29jaywgU09MX1RDUCwgVENQX0tFRVBDTlQsCisJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfVENQLCBUQ1BfS0VFUENOVCwKIAkJCQkgICAgKGNoYXIgKikma2VlcF9jb3VudCwgc2l6ZW9mIChrZWVwX2NvdW50KSk7Ci0Jc2V0X2ZzIChvbGRtbSk7CiAJaWYgKHJjICE9IDApIHsKIAkJQ0VSUk9SICgiQ2FuJ3Qgc2V0IFRDUF9LRUVQQ05UOiAlZFxuIiwgcmMpOwotCQlyZXR1cm4gKHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQKQEAgLTU4MSw3ICs1NjAsNiBAQAogCWludAkgICAgIG5vbmFnbGU7CiAJaW50CSAgICAgdmFsID0gMTsKIAlpbnQJICAgICByYzsKLQltbV9zZWdtZW50X3QgICAgb2xkbW07CiAKIAlyYyA9IGtzb2NrbmFsX2Nvbm5zb2NrX2FkZHJlZihjb25uKTsKIAlpZiAocmMgIT0gMCkJCQkgICAgLyogYmVpbmcgc2h1dCBkb3duICovCkBAIC01OTUsMTUgKzU3MywxMCBAQAogCXRwLT5ub25hZ2xlID0gMTsKIAlyZWxlYXNlX3NvY2sgKHNrKTsKIAotCW9sZG1tID0gZ2V0X2ZzICgpOwotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQotCXJjID0gc2stPnNrX3Byb3QtPnNldHNvY2tvcHQgKHNrLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKKwlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KGNvbm4tPmtzbmNfc29jaywgU09MX1RDUCwgVENQX05PREVMQVksCiAJCQkJICAgICAgKGNoYXIgKikmdmFsLCBzaXplb2YgKHZhbCkpOwogCUxBU1NFUlQgKHJjID09IDApOwogCi0Jc2V0X2ZzIChvbGRtbSk7Ci0KIAlsb2NrX3NvY2sgKHNrKTsKIAl0cC0+bm9uYWdsZSA9IG5vbmFnbGU7CiAJcmVsZWFzZV9zb2NrIChzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQvbG5ldC9hcGktbmkuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9sbmV0L2FwaS1uaS5jCmluZGV4IDQ1YzIzMTkuLjNmODc4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9sbmV0L2FwaS1uaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9sbmV0L2FwaS1uaS5jCkBAIC0xMjcsOCArMTI3LDcgQEAKIHN0YXRpYyB2b2lkCiBsbmV0X2Rlc3Ryb3lfcmVtb3RlX25ldHNfdGFibGUodm9pZCkKIHsKLQlpbnQJCWk7Ci0Jc3RydWN0IGxpc3RfaGVhZAkqaGFzaDsKKwlpbnQgaTsKIAogCWlmICh0aGVfbG5ldC5sbl9yZW1vdGVfbmV0c19oYXNoID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTEzNyw3ICsxMzYsOCBAQAogCQlMQVNTRVJUKGxpc3RfZW1wdHkoJnRoZV9sbmV0LmxuX3JlbW90ZV9uZXRzX2hhc2hbaV0pKTsKIAogCUxJQkNGU19GUkVFKHRoZV9sbmV0LmxuX3JlbW90ZV9uZXRzX2hhc2gsCi0JCSAgICBMTkVUX1JFTU9URV9ORVRTX0hBU0hfU0laRSAqIHNpemVvZigqaGFzaCkpOworCQkgICAgTE5FVF9SRU1PVEVfTkVUU19IQVNIX1NJWkUgKgorCQkgICAgc2l6ZW9mKHRoZV9sbmV0LmxuX3JlbW90ZV9uZXRzX2hhc2hbMF0pKTsKIAl0aGVfbG5ldC5sbl9yZW1vdGVfbmV0c19oYXNoID0gTlVMTDsKIH0KIApAQCAtMzM4LDcgKzMzOCw3IEBACiAJCWNvdW50ZXJzLT5zZW5kX2NvdW50ICAgKz0gY3RyLT5zZW5kX2NvdW50OwogCQljb3VudGVycy0+cmVjdl9jb3VudCAgICs9IGN0ci0+cmVjdl9jb3VudDsKIAkJY291bnRlcnMtPnJvdXRlX2NvdW50ICArPSBjdHItPnJvdXRlX2NvdW50OwotCQljb3VudGVycy0+ZHJvcF9sZW5ndGggICs9IGN0ci0+ZHJvcF9sZW5ndGg7CisJCWNvdW50ZXJzLT5kcm9wX2NvdW50ICAgKz0gY3RyLT5kcm9wX2NvdW50OwogCQljb3VudGVycy0+c2VuZF9sZW5ndGggICs9IGN0ci0+c2VuZF9sZW5ndGg7CiAJCWNvdW50ZXJzLT5yZWN2X2xlbmd0aCAgKz0gY3RyLT5yZWN2X2xlbmd0aDsKIAkJY291bnRlcnMtPnJvdXRlX2xlbmd0aCArPSBjdHItPnJvdXRlX2xlbmd0aDsKQEAgLTk4NiwxMiArOTg2LDExIEBACiAJCQlicmVhazsKIAkJfQogCi0JCXdoaWxlICghbGlzdF9lbXB0eSgmbmktPm5pX2xpc3QpKSB7CisJCWlmICghbGlzdF9lbXB0eSgmbmktPm5pX2xpc3QpKSB7CiAJCQlsbmV0X25ldF91bmxvY2soTE5FVF9MT0NLX0VYKTsKIAkJCSsraTsKIAkJCWlmICgoaSAmICgtaSkpID09IGkpIHsKLQkJCQlDREVCVUcoRF9XQVJOSU5HLAotCQkJCSAgICAgICAiV2FpdGluZyBmb3Igem9tYmllIExOSSAlc1xuIiwKKwkJCQlDREVCVUcoRF9XQVJOSU5HLCAiV2FpdGluZyBmb3Igem9tYmllIExOSSAlc1xuIiwKIAkJCQkgICAgICAgbGliY2ZzX25pZDJzdHIobmktPm5pX25pZCkpOwogCQkJfQogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpAQCAtMTAxNiw2ICsxMDE1LDggQEAKIAkJCSAgICAgICBsaWJjZnNfbmlkMnN0cihuaS0+bmlfbmlkKSk7CiAKIAkJbG5ldF9uaV9mcmVlKG5pKTsKKwkJaSA9IDI7CisKIAkJbG5ldF9uZXRfbG9jayhMTkVUX0xPQ0tfRVgpOwogCX0KIApAQCAtMTkyNiw2ICsxOTI3LDcgQEAKIAogCXJjID0gLUVGQVVMVDsJCQkgICAvKiBJZiBJIFNFR1YuLi4gKi8KIAorCW1lbXNldCgmdG1waWQsIDAsIHNpemVvZih0bXBpZCkpOwogCWZvciAoaSA9IDA7IGkgPCBuX2lkczsgaSsrKSB7CiAJCXRtcGlkLnBpZCA9IGluZm8tPnBpX3BpZDsKIAkJdG1waWQubmlkID0gaW5mby0+cGlfbmlbaV0ubnNfbmlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sbmV0L2xuZXQvbGliLWVxLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQvbG5ldC9saWItZXEuYwppbmRleCA3Y2UwN2Y2Li5kMjVkY2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQvbG5ldC9saWItZXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQvbG5ldC9saWItZXEuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJbG5ldF9lcV93YWl0X3VubG9jaygpOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIGxuZXRfZXFfZGVxdWV1ZV9ldmVudChsbmV0X2VxX3QgKmVxLCBsbmV0X2V2ZW50X3QgKmV2KQogewogCWludAkJbmV3X2luZGV4ID0gZXEtPmVxX2RlcV9zZXEgJiAoZXEtPmVxX3NpemUgLSAxKTsKQEAgLTMyNSw2ICszMjUsNyBAQAogCiBzdGF0aWMgaW50CiBsbmV0X2VxX3dhaXRfbG9ja2VkKGludCAqdGltZW91dF9tcykKK19fbXVzdF9ob2xkKCZ0aGVfbG5ldC5sbl9lcV93YWl0X2xvY2spCiB7CiAJaW50CQl0bXMgPSAqdGltZW91dF9tczsKIAlpbnQJCXdhaXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2xuZXQvbG5ldC9yb3V0ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9sbmV0L3JvdXRlci5jCmluZGV4IDk5NWY1MDkuLjkyNjkyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9sbmV0L3JvdXRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbG5ldC9sbmV0L3JvdXRlci5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkgKiBOQiBpbmRpdmlkdWFsIGV2ZW50cyBjYW4gYmUgbWlzc2VkOyB0aGUgb25seSBndWFyYW50ZWUgaXMgdGhhdCB5b3UKIAkgKiBhbHdheXMgZ2V0IHRoZSBtb3N0IHJlY2VudCBuZXdzICovCiAKLQlpZiAobHAtPmxwX25vdGlmeWluZykKKwlpZiAobHAtPmxwX25vdGlmeWluZyB8fCBuaSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlscC0+bHBfbm90aWZ5aW5nID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2ZpZC9scHJvY19maWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2ZpZC9scHJvY19maWQuYwppbmRleCBkZGQ4MTNjLi42ZjU2NzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9maWQvbHByb2NfZmlkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvZmlkL2xwcm9jX2ZpZC5jCkBAIC01NCwzMiArNTQsNDkgQEAKICNpbmNsdWRlIDxsdXN0cmVfZmlkLmg+CiAjaW5jbHVkZSAiZmlkX2ludGVybmFsLmgiCiAKKy8qIEZvcm1hdDogWzB4NjRCSVRfSU5UIC0gMHg2NEJJVF9JTlRdICsgMzIgYnl0ZXMganVzdCBpbiBjYXNlICovCisjZGVmaW5lIE1BWF9GSURfUkFOR0VfU1RSTEVOICgzMiArIDIgKiAyICogc2l6ZW9mKF9fdTY0KSkKIC8qCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3IgdGVzdGluZywgaXQgaXMgbm8gc2FmZSBmb3IgcHJvZHVjdGlvbgogICogdXNlLgogICovCi1zdGF0aWMgaW50Ci1scHJvY2ZzX2ZpZF93cml0ZV9jb21tb24oY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCQkJIHN0cnVjdCBsdV9zZXFfcmFuZ2UgKnJhbmdlKQorc3RhdGljIGludCBscHJvY2ZzX2ZpZF93cml0ZV9jb21tb24oY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJCSAgICBzdHJ1Y3QgbHVfc2VxX3JhbmdlICpyYW5nZSkKIHsKIAlzdHJ1Y3QgbHVfc2VxX3JhbmdlIHRtcDsKIAlpbnQgcmM7CisJY2hhciBrZXJuYnVmW01BWF9GSURfUkFOR0VfU1RSTEVOXTsKIAogCUxBU1NFUlQocmFuZ2UgIT0gTlVMTCk7CiAKLQlyYyA9IHNzY2FuZihidWZmZXIsICJbJWxseCAtICVsbHhdXG4iLAorCWlmIChjb3VudCA+PSBzaXplb2Yoa2VybmJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5idWYsIGJ1ZmZlciwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWtlcm5idWZbY291bnRdID0gMDsKKworCWlmIChjb3VudCA9PSA1ICYmIHN0cmNtcChrZXJuYnVmLCAiY2xlYXIiKSA9PSAwKSB7CisJCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOworCQlyZXR1cm4gY291bnQ7CisJfQorCisJLyogb2YgdGhlIGZvcm0gIlsweDAwMDAwMDAyNDAwMDA0MDAgLSAweDAwMDAwMDAyODAwMDQwMF0iICovCisJcmMgPSBzc2NhbmYoa2VybmJ1ZiwgIlslbGx4IC0gJWxseF1cbiIsCiAJCSAgICAobG9uZyBsb25nIHVuc2lnbmVkICopJnRtcC5sc3Jfc3RhcnQsCiAJCSAgICAobG9uZyBsb25nIHVuc2lnbmVkICopJnRtcC5sc3JfZW5kKTsKLQlpZiAocmMgIT0gMiB8fCAhcmFuZ2VfaXNfc2FuZSgmdG1wKSB8fCByYW5nZV9pc196ZXJvKCZ0bXApKQorCWlmICghcmFuZ2VfaXNfc2FuZSgmdG1wKSB8fCByYW5nZV9pc196ZXJvKCZ0bXApIHx8CisJICAgIHRtcC5sc3Jfc3RhcnQgPCByYW5nZS0+bHNyX3N0YXJ0IHx8IHRtcC5sc3JfZW5kID4gcmFuZ2UtPmxzcl9lbmQpCiAJCXJldHVybiAtRUlOVkFMOwogCSpyYW5nZSA9IHRtcDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIC8qIENsaWVudCBzaWRlIHByb2NmcyBzdHVmZiAqLwotc3RhdGljIHNzaXplX3QKLWxwcm9jZnNfZmlkX3NwYWNlX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCitzdGF0aWMgc3NpemVfdCBscHJvY2ZzX2ZpZF9zcGFjZV9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCiB7CiAJc3RydWN0IGx1X2NsaWVudF9zZXEgKnNlcSA9ICgoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKIAlpbnQgcmM7CkBAIC0xMTQsOSArMTMxLDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1scHJvY2ZzX2ZpZF93aWR0aF9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQorc3RhdGljIHNzaXplX3QgbHByb2Nmc19maWRfd2lkdGhfc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQogewogCXN0cnVjdCBsdV9jbGllbnRfc2VxICpzZXEgPSAoKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGU7CiAJX191NjQgIG1heDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvZHRfb2JqZWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2R0X29iamVjdC5oCmluZGV4IDkzMDRjMjYuLjliNzkyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvZHRfb2JqZWN0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9kdF9vYmplY3QuaApAQCAtNDQxLDcgKzQ0MSw4IEBACiAJCQkJCXN0cnVjdCBkdF9vYmplY3QgKmR0LAogCQkJCQlzdHJ1Y3QgbHVzdHJlX2NhcGEgKm9sZCwKIAkJCQkJX191NjQgb3BjKTsKLQlpbnQgKCpkb19vYmplY3Rfc3luYykoY29uc3Qgc3RydWN0IGx1X2VudiAqLCBzdHJ1Y3QgZHRfb2JqZWN0ICopOworCWludCAoKmRvX29iamVjdF9zeW5jKShjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsIHN0cnVjdCBkdF9vYmplY3QgKm9iaiwKKwkJCSAgICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQpOwogCS8qKgogCSAqIEdldCBvYmplY3QgaW5mbyBvZiBuZXh0IGxldmVsLiBDdXJyZW50bHksIG9ubHkgZ2V0IGlub2RlIGZyb20gb3NkLgogCSAqIFRoaXMgaXMgb25seSB1c2VkIGJ5IHF1b3RhIGI9MTY1NDIKQEAgLTkwMCwxMyArOTAxLDEzIEBACiBpbnQgZHRfbG9va3VwX2Rpcihjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsIHN0cnVjdCBkdF9vYmplY3QgKmRpciwKIAkJICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbHVfZmlkICpmaWQpOwogCi1zdGF0aWMgaW5saW5lIGludCBkdF9vYmplY3Rfc3luYyhjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsCi0JCQkJIHN0cnVjdCBkdF9vYmplY3QgKm8pCitzdGF0aWMgaW5saW5lIGludCBkdF9vYmplY3Rfc3luYyhjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsIHN0cnVjdCBkdF9vYmplY3QgKm8sCisJCQkJIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQpCiB7CiAJTEFTU0VSVChvKTsKIAlMQVNTRVJUKG8tPmRvX29wcyk7CiAJTEFTU0VSVChvLT5kb19vcHMtPmRvX29iamVjdF9zeW5jKTsKLQlyZXR1cm4gby0+ZG9fb3BzLT5kb19vYmplY3Rfc3luYyhlbnYsIG8pOworCXJldHVybiBvLT5kb19vcHMtPmRvX29iamVjdF9zeW5jKGVudiwgbywgc3RhcnQsIGVuZCk7CiB9CiAKIGludCBkdF9kZWNsYXJlX3ZlcnNpb25fc2V0KGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGR0X29iamVjdCAqbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvaW9jdGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk4NjkyMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2lvY3RsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIEdQTCBIRUFERVIgU1RBUlQKLSAqCi0gKiBETyBOT1QgQUxURVIgT1IgUkVNT1ZFIENPUFlSSUdIVCBOT1RJQ0VTIE9SIFRISVMgRklMRSBIRUFERVIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9ubHksCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgZm9yIG1vcmUgZGV0YWlscyAoYSBjb3B5IGlzIGluY2x1ZGVkCi0gKiBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlKS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL3Byb2R1Y3RzL2x1c3RyZS9kb2NzL0dQTHYyLnBkZgotICoKLSAqIFBsZWFzZSBjb250YWN0IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDQxNTAgTmV0d29yayBDaXJjbGUsIFNhbnRhIENsYXJhLAotICogQ0EgOTUwNTQgVVNBIG9yIHZpc2l0IHd3dy5zdW4uY29tIGlmIHlvdSBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb3IKLSAqIGhhdmUgYW55IHF1ZXN0aW9ucy4KLSAqCi0gKiBHUEwgSEVBREVSIEVORAotICovCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDEwLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4KLSAqLwotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEx1c3RyZSwgaHR0cDovL3d3dy5sdXN0cmUub3JnLwotICogTHVzdHJlIGlzIGEgdHJhZGVtYXJrIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAqLwotCi0jaWZuZGVmIF9JT1dSCi0KLS8qIE9uIGkzODYgYW5kIHg4Nl82NCwgX0FTTV9JMzg2X0lPQ1RMX0ggaXMgZGVmaW5lZCBieSB0aGUga2VybmVsJ3MgaW9jdGwuaCwKLSAqIGFuZCBvbiBuZXdlciBrZXJuZWxzIHRoaXMgaGVhZGVyIGlzIHNoYXJlZCBhcyBfQVNNX0dFTkVSSUNfSU9DVExfSC4KLSAqCi0gKiBXZSBjYW4gYXZvaWQgYW55IHByb2JsZW1zIHdpdGggdGhlIGtlcm5lbCBoZWFkZXIgYmVpbmcgaW5jbHVkZWQgYWdhaW4gYnkKLSAqIGRlZmluaW5nIF9BU01fSTM4Nl9JT0NUTF9IIGhlcmUgc28gdGhhdCBhIGxhdGVyIG9jY3VycmVuY2Ugb2YgPGFzbS9pb2N0bC5oPgotICogZG9lcyBub3QgaW5jbHVkZSB0aGUga2VybmVsJ3MgaW9jdGwuaCBhZnRlciB0aGlzIG9uZS4gYj0xNDc0NiAqLwotI2RlZmluZSBfQVNNX0kzODZfSU9DVExfSAotI2RlZmluZSBfQVNNX0dFTkVSSUNfSU9DVExfSAotCi0vKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCi0gKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQotICogdXBwZXIgMTYgYml0cy4KLSAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0Ci0gKiBUaGUgaGlnaGVzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBpbmRpY2F0aW5nIHRoZSBgYGFjY2VzcyBtb2RlJycuCi0gKiBOT1RFOiBUaGlzIGxpbWl0cyB0aGUgbWF4IHBhcmFtZXRlciBzaXplIHRvIDE2a0IgLTEgIQotICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjb21wYXRpYmlsaXR5IGFjcm9zcyB0aGUgdmFyaW91cyBMaW51eAotICogcGxhdGZvcm1zLiAgVGhlIGkzODYgaW9jdGwgbnVtYmVyaW5nIHNjaGVtZSBkb2Vzbid0IHJlYWxseSBlbmZvcmNlCi0gKiBhIHR5cGUgZmllbGQuICBEZSBmYWN0bywgaG93ZXZlciwgdGhlIHRvcCA4IGJpdHMgb2YgdGhlIGxvd2VyIDE2Ci0gKiBiaXRzIGFyZSBpbmRlZWQgdXNlZCBhcyBhIHR5cGUgZmllbGQsIHNvIHdlIG1pZ2h0IGp1c3QgYXMgd2VsbCBtYWtlCi0gKiB0aGlzIGV4cGxpY2l0IGhlcmUuICBQbGVhc2UgYmUgc3VyZSB0byB1c2UgdGhlIGRlY29kaW5nIG1hY3JvcwotICogYmVsb3cgZnJvbSBub3cgb24uCi0gKi8KLSNkZWZpbmUgX0lPQ19OUkJJVFMgICAgIDgKLSNkZWZpbmUgX0lPQ19UWVBFQklUUyAgIDgKLSNkZWZpbmUgX0lPQ19TSVpFQklUUyAgIDE0Ci0jZGVmaW5lIF9JT0NfRElSQklUUyAgICAyCi0KLSNkZWZpbmUgX0lPQ19OUk1BU0sgICAgICgoMSA8PCBfSU9DX05SQklUUyktMSkKLSNkZWZpbmUgX0lPQ19UWVBFTUFTSyAgICgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQotI2RlZmluZSBfSU9DX1NJWkVNQVNLICAgKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCi0jZGVmaW5lIF9JT0NfRElSTUFTSyAgICAoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQotCi0jZGVmaW5lIF9JT0NfTlJTSElGVCAgICAwCi0jZGVmaW5lIF9JT0NfVFlQRVNISUZUICAoX0lPQ19OUlNISUZUK19JT0NfTlJCSVRTKQotI2RlZmluZSBfSU9DX1NJWkVTSElGVCAgKF9JT0NfVFlQRVNISUZUK19JT0NfVFlQRUJJVFMpCi0jZGVmaW5lIF9JT0NfRElSU0hJRlQgICAoX0lPQ19TSVpFU0hJRlQrX0lPQ19TSVpFQklUUykKLQotLyoKLSAqIERpcmVjdGlvbiBiaXRzLgotICovCi0jZGVmaW5lIF9JT0NfTk9ORSAgICAgICAwVQotI2RlZmluZSBfSU9DX1dSSVRFICAgICAgMVUKLSNkZWZpbmUgX0lPQ19SRUFEICAgICAgIDJVCi0KLSNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSAoKChkaXIpICA8PCBfSU9DX0RJUlNISUZUKSB8ICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgKChucikgICA8PCBfSU9DX05SU0hJRlQpIHwgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCi0KLS8qIHVzZWQgdG8gY3JlYXRlIG51bWJlcnMgKi8KLSNkZWZpbmUgX0lPKHR5cGUsbnIpCSAgICBfSU9DKF9JT0NfTk9ORSwodHlwZSksKG5yKSwwKQotI2RlZmluZSBfSU9SKHR5cGUsbnIsc2l6ZSkgICAgICBfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCi0jZGVmaW5lIF9JT1codHlwZSxucixzaXplKSAgICAgIF9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCi0jZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkgICAgIF9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQotCi0vKiB1c2VkIHRvIGRlY29kZSBpb2N0bCBudW1iZXJzLi4gKi8KLSNkZWZpbmUgX0lPQ19ESVIobnIpCSAgICAoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCi0jZGVmaW5lIF9JT0NfVFlQRShucikJICAgKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCi0jZGVmaW5lIF9JT0NfTlIobnIpCSAgICAgKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKLSNkZWZpbmUgX0lPQ19TSVpFKG5yKQkgICAoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKLQotLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLwotCi0jZGVmaW5lIElPQ19JTgkgIChfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCi0jZGVmaW5lIElPQ19PVVQJIChfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKLSNkZWZpbmUgSU9DX0lOT1VUICAgICAgICgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCi0jZGVmaW5lIElPQ1NJWkVfTUFTSyAgICAoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKLSNkZWZpbmUgSU9DU0laRV9TSElGVCAgIChfSU9DX1NJWkVTSElGVCkKLQotI2VuZGlmIC8qIF9JT1dSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2xpbnV4L29iZC5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9saW51eC9vYmQuaAppbmRleCBkYzM2Zjc1ZS4uZjk2ZjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9saW51eC9vYmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2xpbnV4L29iZC5oCkBAIC04MCw4ICs4MCw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmICgoamlmZmllcyAtIGN1ciA+IDUgKiBIWikgJiYKLQkJICAgIChqaWZmaWVzIC0gbG9jay0+dGltZSA+IDUgKiBIWikpIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGN1ciArIDUgKiBIWiwgamlmZmllcykgJiYKKwkJICAgIHRpbWVfYmVmb3JlKGxvY2stPnRpbWUgKyA1ICogSFosIGppZmZpZXMpKSB7CiAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBsb2NrLT50YXNrOwogCiAJCQlpZiAodGFzayA9PSBOVUxMKQpAQCAtMTA0LDcgKzEwNCw3IEBACiB9CiAKICNkZWZpbmUgY2xpZW50X29iZF9saXN0X2xvY2sobG9jaykgXAotCV9fY2xpZW50X29iZF9saXN0X2xvY2sobG9jaywgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKwlfX2NsaWVudF9vYmRfbGlzdF9sb2NrKGxvY2ssIF9fZnVuY19fLCBfX0xJTkVfXykKIAogc3RhdGljIGlubGluZSB2b2lkIGNsaWVudF9vYmRfbGlzdF91bmxvY2soY2xpZW50X29iZF9sb2NrX3QgKmxvY2spCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2xwcm9jZnNfc3RhdHVzLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2xwcm9jZnNfc3RhdHVzLmgKaW5kZXggNDI4ZTNlNC4uMWI3ZjZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9scHJvY2ZzX3N0YXR1cy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHByb2Nmc19zdGF0dXMuaApAQCAtMzY5LDYgKzM2OSw3IEBACiAjZGVmaW5lIEpPQlNUQVRTX0pPQklEX1ZBUl9NQVhfTEVOCTIwCiAjZGVmaW5lIEpPQlNUQVRTX0RJU0FCTEUJCSJkaXNhYmxlIgogI2RlZmluZSBKT0JTVEFUU19QUk9DTkFNRV9VSUQJCSJwcm9jbmFtZV91aWQiCisjZGVmaW5lIEpPQlNUQVRTX05PREVMT0NBTAkJIm5vZGVsb2NhbCIKIAogZXh0ZXJuIGludCBscHJvY2ZzX3dyaXRlX2ZyYWNfaGVscGVyKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwKIAkJCQkgICAgIGludCAqdmFsLCBpbnQgbXVsdCk7CkBAIC02ODcsNyArNjg4LDcgQEAKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG5hbWUjI19zZXFfc2hvdywgUERFX0RBVEEoaW5vZGUpKTsJXAogfQkJCQkJCQkJCVwKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjX2ZvcHMgPSB7CQkJCSAgICAgXAorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjX2ZvcHMgPSB7CQkJCVwKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAkJCQkJICAgIFwKIAkub3BlbiAgICA9IG5hbWUjI19zaW5nbGVfb3BlbiwJCQkJICAgICBcCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwJCQkJCSAgICAgICBcCkBAIC03MzAsNyArNzMxLDcgQEAKIAl7CQkJCQkJCQlcCiAJCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBOVUxMLCBQREVfREFUQShpbm9kZSkpOwlcCiAJfQkJCQkJCQkJXAotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjXyMjdHlwZSMjX2ZvcHMgPSB7CQkJXAorCXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5hbWUjI18jI3R5cGUjI19mb3BzID0gewlcCiAJCS5vcGVuCT0gbmFtZSMjXyMjdHlwZSMjX29wZW4sCQkJCVwKIAkJLndyaXRlCT0gbmFtZSMjXyMjdHlwZSMjX3dyaXRlLAkJCVwKIAkJLnJlbGVhc2UgPSBscHJvY2ZzX3NpbmdsZV9yZWxlYXNlLAkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVfb2JqZWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1X29iamVjdC5oCmluZGV4IDY3NzNiY2EuLjk4MTQ5ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVfb2JqZWN0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdV9vYmplY3QuaApAQCAtNTE2LDYgKzUxNiwxMCBAQAogICovCiBzdHJ1Y3QgbHVfb2JqZWN0X2hlYWRlciB7CiAJLyoqCisJICogRmlkLCB1bmlxdWVseSBpZGVudGlmeWluZyB0aGlzIG9iamVjdC4KKwkgKi8KKwlzdHJ1Y3QgbHVfZmlkCQlsb2hfZmlkOworCS8qKgogCSAqIE9iamVjdCBmbGFncyBmcm9tIGVudW0gbHVfb2JqZWN0X2hlYWRlcl9mbGFncy4gU2V0IGFuZCBjaGVja2VkCiAJICogYXRvbWljYWxseS4KIAkgKi8KQEAgLTUyNSwxMCArNTI5LDYgQEAKIAkgKi8KIAlhdG9taWNfdAkgICBsb2hfcmVmOwogCS8qKgotCSAqIEZpZCwgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhpcyBvYmplY3QuCi0JICovCi0Jc3RydWN0IGx1X2ZpZAkgIGxvaF9maWQ7Ci0JLyoqCiAJICogQ29tbW9uIG9iamVjdCBhdHRyaWJ1dGVzLCBjYWNoZWQgZm9yIGVmZmljaWVuY3kuIEZyb20gZW51bQogCSAqIGx1X29iamVjdF9oZWFkZXJfYXR0ci4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVfcmVmLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1X3JlZi5oCmluZGV4IDUwYTJhN2Y3Li5iNDUxYTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1X3JlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVfcmVmLmgKQEAgLTY5LDEyICs2OSwxMiBAQAogICoKICAqCS8vIGN1cnJlbnQgdGhyZWFkIGFjcXVpcmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byBmb28uCiAgKglmb29fZ2V0KGZvbyk7Ci0gKglsdV9yZWZfYWRkKCZmb28tPnJlZmVyZW5jZSwgX19GVU5DVElPTl9fLCBjdXJyZW50KTsKKyAqCWx1X3JlZl9hZGQoJmZvby0+cmVmZXJlbmNlLCBfX2Z1bmNfXywgY3VycmVudCk7CiAgKgogICoJLi4uCiAgKgogICoJLy8gdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyByZWxlYXNlZC4KLSAqCWx1X3JlZl9kZWwoJmZvby0+cmVmZXJlbmNlLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQpOworICoJbHVfcmVmX2RlbCgmZm9vLT5yZWZlcmVuY2UsIF9fZnVuY19fLCBjdXJyZW50KTsKICAqCWZvb19wdXQoZm9vKTsKICAqIFxlbmRjb2RlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmUvbHVzdHJlX2lkbC5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmUvbHVzdHJlX2lkbC5oCmluZGV4IDg3OTA1YmIuLjgzMDE0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlL2x1c3RyZV9pZGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZS9sdXN0cmVfaWRsLmgKQEAgLTI2NSw3ICsyNjUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmFuZ2VfaW5pdChzdHJ1Y3QgbHVfc2VxX3JhbmdlICpyYW5nZSkKIHsKLQlyYW5nZS0+bHNyX3N0YXJ0ID0gcmFuZ2UtPmxzcl9lbmQgPSByYW5nZS0+bHNyX2luZGV4ID0gMDsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZigqcmFuZ2UpKTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgKzE2ODIsMzAgQEAKIAkJCQlzdHJpcGVzICogc2l6ZW9mKHN0cnVjdCBsb3Zfb3N0X2RhdGFfdjEpOwogfQogCitzdGF0aWMgaW5saW5lIF9fdTMyCitsb3ZfbWRzX21kX21heF9zdHJpcGVfY291bnQoc2l6ZV90IGJ1Zl9zaXplLCBfX3UzMiBsbW1fbWFnaWMpCit7CisJc3dpdGNoIChsbW1fbWFnaWMpIHsKKwljYXNlIExPVl9NQUdJQ19WMTogeworCQlzdHJ1Y3QgbG92X21kc19tZF92MSBsbW07CisKKwkJaWYgKGJ1Zl9zaXplIDwgc2l6ZW9mKGxtbSkpCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gKGJ1Zl9zaXplIC0gc2l6ZW9mKGxtbSkpIC8gc2l6ZW9mKGxtbS5sbW1fb2JqZWN0c1swXSk7CisJfQorCWNhc2UgTE9WX01BR0lDX1YzOiB7CisJCXN0cnVjdCBsb3ZfbWRzX21kX3YzIGxtbTsKKworCQlpZiAoYnVmX3NpemUgPCBzaXplb2YobG1tKSkKKwkJCXJldHVybiAwOworCisJCXJldHVybiAoYnVmX3NpemUgLSBzaXplb2YobG1tKSkgLyBzaXplb2YobG1tLmxtbV9vYmplY3RzWzBdKTsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQogCiAjZGVmaW5lIE9CRF9NRF9GTElECSgweDAwMDAwMDAxVUxMKSAvKiBvYmplY3QgSUQgKi8KICNkZWZpbmUgT0JEX01EX0ZMQVRJTUUgICAgICgweDAwMDAwMDAyVUxMKSAvKiBhY2Nlc3MgdGltZSAqLwpAQCAtMjY4MSw2ICsyNzA1LDggQEAKICAqIHByb3RvY29sLCB0aGlzIHdpbGwgbGltaXQgdGhlIG1heCBudW1iZXIgb2YgT1NUcyBwZXIgTE9WICovCiAKICNkZWZpbmUgTE9WX0RFU0NfTUFHSUMgMHhCMENDREU1QworI2RlZmluZSBMT1ZfREVTQ19RT1NfTUFYQUdFX0RFRkFVTFQgNSAgLyogU2Vjb25kcyAqLworI2RlZmluZSBMT1ZfREVTQ19TVFJJUEVfU0laRV9ERUZBVUxUICgxIDw8IExORVRfTVRVX0JJVFMpCiAKIC8qIExPViBzZXR0aW5ncyBkZXNjcmlwdG9yIChzaG91bGQgb25seSBjb250YWluIHN0YXRpYyBpbmZvKSAqLwogc3RydWN0IGxvdl9kZXNjIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlL2x1c3RyZV91c2VyLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZS9sdXN0cmVfdXNlci5oCmluZGV4IGY1ZjM2OWUuLjk1Yzc1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlL2x1c3RyZV91c2VyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmUvbHVzdHJlX3VzZXIuaApAQCAtMTEwNiw3ICsxMTA2LDggQEAKIHsKIAlyZXR1cm4gKHN0cnVjdCBoc21fYWN0aW9uX2l0ZW0gKikoaGFsLT5oYWxfZnNuYW1lICsKIAkJCQkJICBjZnNfc2l6ZV9yb3VuZChzdHJsZW4oaGFsLT4gXAotCQkJCQkJCQloYWxfZnNuYW1lKSkpOworCQkJCQkJCQloYWxfZnNuYW1lKQorCQkJCQkJCSArIDEpKTsKIH0KIC8qIFJldHVybiBwb2ludGVyIHRvIG5leHQgaGFpICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc21fYWN0aW9uX2l0ZW0gKiBoYWlfbmV4dChzdHJ1Y3QgaHNtX2FjdGlvbl9pdGVtICpoYWkpCkBAIC0xMTIxLDcgKzExMjIsNyBAQAogCWludCBpLCBzejsKIAlzdHJ1Y3QgaHNtX2FjdGlvbl9pdGVtICpoYWk7CiAKLQlzeiA9IHNpemVvZigqaGFsKSArIGNmc19zaXplX3JvdW5kKHN0cmxlbihoYWwtPmhhbF9mc25hbWUpKTsKKwlzeiA9IHNpemVvZigqaGFsKSArIGNmc19zaXplX3JvdW5kKHN0cmxlbihoYWwtPmhhbF9mc25hbWUpICsgMSk7CiAJaGFpID0gaGFpX3plcm8oaGFsKTsKIAlmb3IgKGkgPSAwOyBpIDwgaGFsLT5oYWxfY291bnQ7IGkrKywgaGFpID0gaGFpX25leHQoaGFpKSkKIAkJc3ogKz0gY2ZzX3NpemVfcm91bmQoaGFpLT5oYWlfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9kZWJ1Zy5oCmluZGV4IDdlYzkxZWQuLjYxNDZjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2RlYnVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmVfZGVidWcuaApAQCAtNDgsNyArNDgsNiBAQAogLyogbGliL2RlYnVnLmMgKi8KIHZvaWQgZHVtcF9sbmlvYnVmKHN0cnVjdCBuaW9idWZfbG9jYWwgKmxuYik7CiBpbnQgZHVtcF9yZXEoc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXEpOwotdm9pZCBkdW1wX2xzbShpbnQgbGV2ZWwsIHN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc20pOwogaW50IGJsb2NrX2RlYnVnX3NldHVwKHZvaWQgKmFkZHIsIGludCBsZW4sIF9fdTY0IG9mZiwgX191NjQgaWQpOwogaW50IGJsb2NrX2RlYnVnX2NoZWNrKGNoYXIgKndobywgdm9pZCAqYWRkciwgaW50IGxlbiwgX191NjQgb2ZmLCBfX3U2NCBpZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2RsbS5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmVfZGxtLmgKaW5kZXggM2UyNWYwMC4uMGM2Yjc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmVfZGxtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmVfZGxtLmgKQEAgLTIxMiw3ICsyMTIsNyBAQAogCWludCAoKnBvX3JlY2FsYykoc3RydWN0IGxkbG1fcG9vbCAqcGwpOwogCS8qKiBDYW5jZWwgYXQgbGVhc3QgXGEgbnIgbG9ja3MgZnJvbSBwb29sIFxhIHBsICovCiAJaW50ICgqcG9fc2hyaW5rKShzdHJ1Y3QgbGRsbV9wb29sICpwbCwgaW50IG5yLAotCQkJIHVuc2lnbmVkIGludCBnZnBfbWFzayk7CisJCQkgZ2ZwX3QgZ2ZwX21hc2spOwogCWludCAoKnBvX3NldHVwKShzdHJ1Y3QgbGRsbV9wb29sICpwbCwgaW50IGxpbWl0KTsKIH07CiAKQEAgLTI2MCw3ICsyNjAsNyBAQAogCS8qKiBSZWNhbGN1bGF0aW9uIHBlcmlvZCBmb3IgcG9vbC4gKi8KIAl0aW1lX3QJCQlwbF9yZWNhbGNfcGVyaW9kOwogCS8qKiBSZWNhbGN1bGF0aW9uIGFuZCBzaHJpbmsgb3BlcmF0aW9ucy4gKi8KLQlzdHJ1Y3QgbGRsbV9wb29sX29wcwkqcGxfb3BzOworCWNvbnN0IHN0cnVjdCBsZGxtX3Bvb2xfb3BzCSpwbF9vcHM7CiAJLyoqIE51bWJlciBvZiBwbGFubmVkIGxvY2tzIGZvciBuZXh0IHBlcmlvZC4gKi8KIAlpbnQJCQlwbF9ncmFudF9wbGFuOwogCS8qKiBQb29sIHN0YXRpc3RpY3MuICovCkBAIC0xMzEyLDExICsxMzEyLDExIEBACiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgbGRsbV9yZXNfaWQgKik7CiAKICNkZWZpbmUgTERMTV9SRVNPVVJDRV9BRERSRUYocmVzKSBkbyB7CQkJCSAgXAotCWx1X3JlZl9hZGRfYXRvbWljKCYocmVzKS0+bHJfcmVmZXJlbmNlLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQpOyAgXAorCWx1X3JlZl9hZGRfYXRvbWljKCYocmVzKS0+bHJfcmVmZXJlbmNlLCBfX2Z1bmNfXywgY3VycmVudCk7ICBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIExETE1fUkVTT1VSQ0VfREVMUkVGKHJlcykgZG8gewkJCQkgIFwKLQlsdV9yZWZfZGVsKCYocmVzKS0+bHJfcmVmZXJlbmNlLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQpOyAgXAorCWx1X3JlZl9kZWwoJihyZXMpLT5scl9yZWZlcmVuY2UsIF9fZnVuY19fLCBjdXJyZW50KTsJICBcCiB9IHdoaWxlICgwKQogCiAvKiBsZGxtX3JlcXVlc3QuYyAqLwpAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAKIC8qKiBDaGVjayBpZiByZXNvdXJjZSBpcyBhbHJlYWR5IGxvY2tlZCwgYXNzZXJ0IGlmIG5vdC4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19yZXNfbG9ja2VkKHN0cnVjdCBsZGxtX3Jlc291cmNlICpyZXMpCiB7Ci0JTEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcmVzLT5scl9sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZyZXMtPmxyX2xvY2spOwogfQogCiBzdHJ1Y3QgbGRsbV9yZXNvdXJjZSAqIGxvY2tfcmVzX2FuZF9sb2NrKHN0cnVjdCBsZGxtX2xvY2sgKmxvY2spOwpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAKIGludCBsZGxtX3Bvb2xfaW5pdChzdHJ1Y3QgbGRsbV9wb29sICpwbCwgc3RydWN0IGxkbG1fbmFtZXNwYWNlICpucywKIAkJICAgaW50IGlkeCwgbGRsbV9zaWRlX3QgY2xpZW50KTsKIGludCBsZGxtX3Bvb2xfc2hyaW5rKHN0cnVjdCBsZGxtX3Bvb2wgKnBsLCBpbnQgbnIsCi0JCSAgICAgdW5zaWduZWQgaW50IGdmcF9tYXNrKTsKKwkJICAgICBnZnBfdCBnZnBfbWFzayk7CiB2b2lkIGxkbG1fcG9vbF9maW5pKHN0cnVjdCBsZGxtX3Bvb2wgKnBsKTsKIGludCBsZGxtX3Bvb2xfc2V0dXAoc3RydWN0IGxkbG1fcG9vbCAqcGwsIGludCBsaW1pdCk7CiBpbnQgbGRsbV9wb29sX3JlY2FsYyhzdHJ1Y3QgbGRsbV9wb29sICpwbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9saWIuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2xpYi5oCmluZGV4IDAzNjhjYTYuLjNjMjZiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2xpYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2xpYi5oCkBAIC05NCwxOSArOTQsNiBAQAogdm9pZCBzdGF0ZnNfcGFjayhzdHJ1Y3Qgb2JkX3N0YXRmcyAqb3Nmcywgc3RydWN0IGtzdGF0ZnMgKnNmcyk7CiB2b2lkIHN0YXRmc191bnBhY2soc3RydWN0IGtzdGF0ZnMgKnNmcywgc3RydWN0IG9iZF9zdGF0ZnMgKm9zZnMpOwogCi0vKiBsX2xvY2suYyAqLwotc3RydWN0IGx1c3RyZV9sb2NrIHsKLQlpbnQJCQlsX2RlcHRoOwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqbF9vd25lcjsKLQlzdHJ1Y3Qgc2VtYXBob3JlCWxfc2VtOwotCXNwaW5sb2NrX3QJCWxfc3BpbjsKLX07Ci0KLXZvaWQgbF9sb2NrX2luaXQoc3RydWN0IGx1c3RyZV9sb2NrICopOwotdm9pZCBsX2xvY2soc3RydWN0IGx1c3RyZV9sb2NrICopOwotdm9pZCBsX3VubG9jayhzdHJ1Y3QgbHVzdHJlX2xvY2sgKik7Ci1pbnQgbF9oYXNfbG9jayhzdHJ1Y3QgbHVzdHJlX2xvY2sgKik7Ci0KIC8qCiAgKiBGb3IgbWQgZWNobyBjbGllbnQKICAqLwpAQCAtMTkyLDI0ICsxNzksMjUgQEAKIAogc3RhdGljIGlubGluZSBpbnQgb2JkX2lvY3RsX2lzX2ludmFsaWQoc3RydWN0IG9iZF9pb2N0bF9kYXRhICpkYXRhKQogewotCWlmIChkYXRhLT5pb2NfbGVuID4gKDE8PDMwKSkgewotCQlDRVJST1IoIk9CRCBpb2N0bDogaW9jX2xlbiBsYXJnZXIgdGhhbiAxPDwzMFxuIik7CisJaWYgKGRhdGEtPmlvY19sZW4gPiBPQkRfTUFYX0lPQ1RMX0JVRkZFUikgeworCQlDRVJST1IoIk9CRCBpb2N0bDogaW9jX2xlbiBsYXJnZXIgdGhhbiAlZFxuIiwKKwkJICAgICAgIE9CRF9NQVhfSU9DVExfQlVGRkVSKTsKIAkJcmV0dXJuIDE7CiAJfQotCWlmIChkYXRhLT5pb2NfaW5sbGVuMSA+ICgxPDwzMCkpIHsKLQkJQ0VSUk9SKCJPQkQgaW9jdGw6IGlvY19pbmxsZW4xIGxhcmdlciB0aGFuIDE8PDMwXG4iKTsKKwlpZiAoZGF0YS0+aW9jX2lubGxlbjEgPiBPQkRfTUFYX0lPQ1RMX0JVRkZFUikgeworCQlDRVJST1IoIk9CRCBpb2N0bDogaW9jX2lubGxlbjEgbGFyZ2VyIHRoYW4gaW9jX2xlblxuIik7CiAJCXJldHVybiAxOwogCX0KLQlpZiAoZGF0YS0+aW9jX2lubGxlbjIgPiAoMTw8MzApKSB7Ci0JCUNFUlJPUigiT0JEIGlvY3RsOiBpb2NfaW5sbGVuMiBsYXJnZXIgdGhhbiAxPDwzMFxuIik7CisJaWYgKGRhdGEtPmlvY19pbmxsZW4yID4gT0JEX01BWF9JT0NUTF9CVUZGRVIpIHsKKwkJQ0VSUk9SKCJPQkQgaW9jdGw6IGlvY19pbmxsZW4yIGxhcmdlciB0aGFuIGlvY19sZW5cbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0JaWYgKGRhdGEtPmlvY19pbmxsZW4zID4gKDE8PDMwKSkgewotCQlDRVJST1IoIk9CRCBpb2N0bDogaW9jX2lubGxlbjMgbGFyZ2VyIHRoYW4gMTw8MzBcbiIpOworCWlmIChkYXRhLT5pb2NfaW5sbGVuMyA+IE9CRF9NQVhfSU9DVExfQlVGRkVSKSB7CisJCUNFUlJPUigiT0JEIGlvY3RsOiBpb2NfaW5sbGVuMyBsYXJnZXIgdGhhbiBpb2NfbGVuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCWlmIChkYXRhLT5pb2NfaW5sbGVuNCA+ICgxPDwzMCkpIHsKLQkJQ0VSUk9SKCJPQkQgaW9jdGw6IGlvY19pbmxsZW40IGxhcmdlciB0aGFuIDE8PDMwXG4iKTsKKwlpZiAoZGF0YS0+aW9jX2lubGxlbjQgPiBPQkRfTUFYX0lPQ1RMX0JVRkZFUikgeworCQlDRVJST1IoIk9CRCBpb2N0bDogaW9jX2lubGxlbjQgbGFyZ2VyIHRoYW4gaW9jX2xlblxuIik7CiAJCXJldHVybiAxOwogCX0KIAlpZiAoZGF0YS0+aW9jX2lubGJ1ZjEgJiYgIWRhdGEtPmlvY19pbmxsZW4xKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9sb2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2xvZy5oCmluZGV4IDg5NmM3NTcuLjFhOWE5MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2xvZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX2xvZy5oCkBAIC0yMDYsMTEgKzIwNiw3IEBACiBpbnQgX19sbG9nX2N0eHRfcHV0KGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGxsb2dfY3R4dCAqY3R4dCk7CiBpbnQgbGxvZ19jbGVhbnVwKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGxsb2dfY3R4dCAqKTsKIGludCBsbG9nX3N5bmMoc3RydWN0IGxsb2dfY3R4dCAqY3R4dCwgc3RydWN0IG9iZF9leHBvcnQgKmV4cCwgaW50IGZsYWdzKTsKLWludCBsbG9nX29iZF9hZGQoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LCBzdHJ1Y3QgbGxvZ19jdHh0ICpjdHh0LAotCQkgc3RydWN0IGxsb2dfcmVjX2hkciAqcmVjLCBzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLAotCQkgc3RydWN0IGxsb2dfY29va2llICpsb2djb29raWVzLCBpbnQgbnVtY29va2llcyk7CiBpbnQgbGxvZ19jYW5jZWwoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LCBzdHJ1Y3QgbGxvZ19jdHh0ICpjdHh0LAotCQlzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLCBpbnQgY291bnQsCiAJCXN0cnVjdCBsbG9nX2Nvb2tpZSAqY29va2llcywgaW50IGZsYWdzKTsKIAogaW50IG9iZF9sbG9nX2luaXQoc3RydWN0IG9iZF9kZXZpY2UgKm9iZCwgc3RydWN0IG9iZF9sbG9nX2dyb3VwICpvbGcsCkBAIC0yNDIsNyArMjM4LDYgQEAKIAkJCWludCBmbGFncyk7CiAJaW50ICgqbG9wX2NsZWFudXApKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGxsb2dfY3R4dCAqY3R4dCk7CiAJaW50ICgqbG9wX2NhbmNlbCkoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LCBzdHJ1Y3QgbGxvZ19jdHh0ICpjdHh0LAotCQkJICBzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLCBpbnQgY291bnQsCiAJCQkgIHN0cnVjdCBsbG9nX2Nvb2tpZSAqY29va2llcywgaW50IGZsYWdzKTsKIAlpbnQgKCpsb3BfY29ubmVjdCkoc3RydWN0IGxsb2dfY3R4dCAqY3R4dCwgc3RydWN0IGxsb2dfbG9naWQgKmxvZ2lkLAogCQkJICAgc3RydWN0IGxsb2dfZ2VuICpnZW4sIHN0cnVjdCBvYmRfdXVpZCAqdXVpZCk7CkBAIC0yOTYsMTEgKzI5MSw2IEBACiAJaW50ICgqbG9wX2FkZCkoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LCBzdHJ1Y3QgbGxvZ19oYW5kbGUgKmxnaCwKIAkJICAgICAgIHN0cnVjdCBsbG9nX3JlY19oZHIgKnJlYywgc3RydWN0IGxsb2dfY29va2llICpjb29raWUsCiAJCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aGFuZGxlICp0aCk7Ci0JLyogT2xkIGxsb2dfYWRkIHZlcnNpb24sIHVzZWQgaW4gTURTLUxPVi1PU0Mgbm93IGFuZCB3aWxsIGdvbmUgd2l0aAotCSAqIExPRC9PU1AgcmVwbGFjZW1lbnQgKi8KLQlpbnQgKCpsb3Bfb2JkX2FkZCkoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LCBzdHJ1Y3QgbGxvZ19jdHh0ICpjdHh0LAotCQkJICAgc3RydWN0IGxsb2dfcmVjX2hkciAqcmVjLCBzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLAotCQkJICAgc3RydWN0IGxsb2dfY29va2llICpsb2djb29raWVzLCBpbnQgbnVtY29va2llcyk7CiB9OwogCiAvKiBJbi1tZW1vcnkgZGVzY3JpcHRvciBmb3IgYSBsb2cgb2JqZWN0IG9yIGxvZyBjYXRhbG9nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9tZGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX21kYy5oCmluZGV4IDQ2OGYzNjMuLjY2NzY1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX21kYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX21kYy5oCkBAIC0xNDAsMTcgKzE0MCwyNiBAQAogCW11dGV4X3VubG9jaygmbGNrLT5ycGNsX211dGV4KTsKIH0KIAorLyogVXBkYXRlIHRoZSBtYXhpbXVtIG9ic2VydmVkIGVhc2l6ZSBhbmQgY29va2llc2l6ZS4gIFRoZSBkZWZhdWx0IGVhc2l6ZQorICogYW5kIGNvb2tpZXNpemUgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIG1pbmltdW0gdmFsdWUgYnV0IGFsbG93ZWQgdG8gZ3JvdworICogdXAgdG8gYSBzaW5nbGUgcGFnZSBpbiBzaXplIGlmIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGUgY29tbW9uIGNhc2UuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZGNfdXBkYXRlX21heF9lYV9mcm9tX2JvZHkoc3RydWN0IG9iZF9leHBvcnQgKmV4cCwKIAkJCQkJICAgICAgIHN0cnVjdCBtZHRfYm9keSAqYm9keSkKIHsKIAlpZiAoYm9keS0+dmFsaWQgJiBPQkRfTURfRkxNT0RFQVNJWkUpIHsKLQkJaWYgKGV4cC0+ZXhwX29iZC0+dS5jbGkuY2xfbWF4X21kc19lYXNpemUgPCBib2R5LT5tYXhfbWRzaXplKQotCQkJZXhwLT5leHBfb2JkLT51LmNsaS5jbF9tYXhfbWRzX2Vhc2l6ZSA9Ci0JCQkJCQlib2R5LT5tYXhfbWRzaXplOwotCQlpZiAoZXhwLT5leHBfb2JkLT51LmNsaS5jbF9tYXhfbWRzX2Nvb2tpZXNpemUgPAotCQkJCQkJYm9keS0+bWF4X2Nvb2tpZXNpemUpCi0JCQlleHAtPmV4cF9vYmQtPnUuY2xpLmNsX21heF9tZHNfY29va2llc2l6ZSA9Ci0JCQkJCQlib2R5LT5tYXhfY29va2llc2l6ZTsKKwkJc3RydWN0IGNsaWVudF9vYmQgKmNsaSA9ICZleHAtPmV4cF9vYmQtPnUuY2xpOworCisJCWlmIChjbGktPmNsX21heF9tZHNfZWFzaXplIDwgYm9keS0+bWF4X21kc2l6ZSkgeworCQkJY2xpLT5jbF9tYXhfbWRzX2Vhc2l6ZSA9IGJvZHktPm1heF9tZHNpemU7CisJCQljbGktPmNsX2RlZmF1bHRfbWRzX2Vhc2l6ZSA9CisJCQkgICAgbWluX3QoX191MzIsIGJvZHktPm1heF9tZHNpemUsIFBBR0VfQ0FDSEVfU0laRSk7CisJCX0KKwkJaWYgKGNsaS0+Y2xfbWF4X21kc19jb29raWVzaXplIDwgYm9keS0+bWF4X2Nvb2tpZXNpemUpIHsKKwkJCWNsaS0+Y2xfbWF4X21kc19jb29raWVzaXplID0gYm9keS0+bWF4X2Nvb2tpZXNpemU7CisJCQljbGktPmNsX2RlZmF1bHRfbWRzX2Nvb2tpZXNpemUgPQorCQkJICAgIG1pbl90KF9fdTMyLCBib2R5LT5tYXhfY29va2llc2l6ZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9sdXN0cmVfbmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9uZXQuaAppbmRleCA3NDVhZGJiLi5mNmI3ZDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9uZXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9uZXQuaApAQCAtMjY0LDYgKzI2NCw4IEBACiAjZGVmaW5lIExETE1fTUFYUkVRU0laRSAgICg1ICogMTAyNCkKICNkZWZpbmUgTERMTV9NQVhSRVBTSVpFICAgKDEwMjQpCiAKKyNkZWZpbmUgTURTX01BWFJFUVNJWkUJCSg1ICogMTAyNCkJLyogPj0gNDczNiAqLworCiAjZGVmaW5lIE9TVF9NQVhSRVFTSVpFCQkoNSAqIDEwMjQpCiAKIC8qIE1hY3JvIHRvIGhpZGUgYSB0eXBlY2FzdC4gKi8KQEAgLTcxNyw3ICs3MTksNyBAQAogCSAqCQkJIFxhIG5ycQogCSAqIFxwYXJhbVtpbixvdXRdIG5ycQkgVGhlIHJlcXVlc3QKIAkgKgotCSAqIFxwcmUgc3Bpbl9pc19sb2NrZWQoJnN2Y3B0LT5zY3BfcmVxX2xvY2spCisJICogXHByZSBhc3NlcnRfc3Bpbl9sb2NrZWQoJnN2Y3B0LT5zY3BfcmVxX2xvY2spCiAJICoKIAkgKiBcc2VlIHB0bHJwY19ucnNfcmVxX3N0b3Bfbm9sb2NrKCkKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvb2JkLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL29iZC5oCmluZGV4IDcyY2YzZmUuLmQ1YzQ2MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvb2JkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9vYmQuaApAQCAtMTMyLDYgKzEzMiwxMyBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW5saW5lIGludCBsb3Zfc3RyaXBlX21kX3NpemUodW5zaWduZWQgaW50IHN0cmlwZV9jb3VudCkKK3sKKwlzdHJ1Y3QgbG92X3N0cmlwZV9tZCBsc207CisKKwlyZXR1cm4gc2l6ZW9mKGxzbSkgKyBzdHJpcGVfY291bnQgKiBzaXplb2YobHNtLmxzbV9vaW5mb1swXSk7Cit9CisKIHN0cnVjdCBvYmRfaW5mbzsKIAogdHlwZWRlZiBpbnQgKCpvYmRfZW5xdWV1ZV91cGRhdGVfZikodm9pZCAqY29va2llLCBpbnQgcmMpOwpAQCAtMzA5LDkgKzMxNiwxMCBAQAogCWludAkJICAgICAgY2xfY29ubl9jb3VudDsKIAkvKiBtYXhfbWRzX2Vhc2l6ZSBpcyBwdXJlbHkgYSBwZXJmb3JtYW5jZSB0aGluZyBzbyB3ZSBkb24ndCBoYXZlIHRvCiAJICogY2FsbCBvYmRfc2l6ZV9kaXNrbWQoKSBhbGwgdGhlIHRpbWUuICovCi0JaW50CQkgICAgICBjbF9kZWZhdWx0X21kc19lYXNpemU7Ci0JaW50CQkgICAgICBjbF9tYXhfbWRzX2Vhc2l6ZTsKLQlpbnQJCSAgICAgIGNsX21heF9tZHNfY29va2llc2l6ZTsKKwlpbnQJCQkgY2xfZGVmYXVsdF9tZHNfZWFzaXplOworCWludAkJCSBjbF9tYXhfbWRzX2Vhc2l6ZTsKKwlpbnQJCQkgY2xfZGVmYXVsdF9tZHNfY29va2llc2l6ZTsKKwlpbnQJCQkgY2xfbWF4X21kc19jb29raWVzaXplOwogCiAJZW51bSBsdXN0cmVfc2VjX3BhcnQgICAgIGNsX3NwX21lOwogCWVudW0gbHVzdHJlX3NlY19wYXJ0ICAgICBjbF9zcF90bzsKQEAgLTM5OCw3ICs0MDYsNyBAQAogCXN0cnVjdCBtZGNfcnBjX2xvY2sgICAgICpjbF9jbG9zZV9sb2NrOwogCiAJLyogbWdjIGRhdGFzdHJ1Y3QgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCSBjbF9tZ2Nfc2VtOworCXN0cnVjdCBtdXRleAkJIGNsX21nY19tdXRleDsKIAlzdHJ1Y3QgbG9jYWxfb2lkX3N0b3JhZ2UgKmNsX21nY19sb3M7CiAJc3RydWN0IGR0X29iamVjdAkqY2xfbWdjX2NvbmZpZ3NfZGlyOwogCWF0b21pY190CSAgICAgY2xfbWdjX3JlZmNvdW50OwpAQCAtNTk4LDYgKzYwNiw3IEBACiAJaW50CQkJbWF4X2Vhc2l6ZTsKIAlpbnQJCQltYXhfZGVmX2Vhc2l6ZTsKIAlpbnQJCQltYXhfY29va2llc2l6ZTsKKwlpbnQJCQltYXhfZGVmX2Nvb2tpZXNpemU7CiAJaW50CQkJc2VydmVyX3RpbWVvdXQ7CiAKIAlpbnQJCQl0Z3RzX3NpemU7IC8qIHNpemUgb2YgdGd0cyBhcnJheSAqLwpAQCAtOTg5LDcgKzk5OCwxMCBAQAogI2RlZmluZSBLRVlfTE9DS19UT19TVFJJUEUgICAgICAibG9ja190b19zdHJpcGUiCiAjZGVmaW5lIEtFWV9MT1ZERVNDCSAgICAgImxvdmRlc2MiCiAjZGVmaW5lIEtFWV9MT1ZfSURYCSAgICAgImxvdl9pZHgiCi0jZGVmaW5lIEtFWV9NQVhfRUFTSVpFCSAgIm1heF9lYXNpemUiCisjZGVmaW5lIEtFWV9NQVhfRUFTSVpFCQkibWF4X2Vhc2l6ZSIKKyNkZWZpbmUgS0VZX0RFRkFVTFRfRUFTSVpFCSJkZWZhdWx0X2Vhc2l6ZSIKKyNkZWZpbmUgS0VZX01BWF9DT09LSUVTSVpFCSJtYXhfY29va2llc2l6ZSIKKyNkZWZpbmUgS0VZX0RFRkFVTFRfQ09PS0lFU0laRQkiZGVmYXVsdF9jb29raWVzaXplIgogI2RlZmluZSBLRVlfTURTX0NPTk4JICAgICJtZHNfY29ubiIKICNkZWZpbmUgS0VZX01HU1NFQwkgICAgICAibWdzc2VjIgogI2RlZmluZSBLRVlfTkVYVF9JRAkgICAgICJuZXh0X2lkIgpAQCAtMTM4Myw3ICsxMzk1LDcgQEAKIAkJCSAgY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50LAogCQkJICBzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKiopOwogCi0JaW50ICgqbV9pbml0X2VhX3NpemUpKHN0cnVjdCBvYmRfZXhwb3J0ICosIGludCwgaW50LCBpbnQpOworCWludCAoKm1faW5pdF9lYV9zaXplKShzdHJ1Y3Qgb2JkX2V4cG9ydCAqLCBpbnQsIGludCwgaW50LCBpbnQpOwogCiAJaW50ICgqbV9nZXRfbHVzdHJlX21kKShzdHJ1Y3Qgb2JkX2V4cG9ydCAqLCBzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKiwKIAkJCSAgICAgICBzdHJ1Y3Qgb2JkX2V4cG9ydCAqLCBzdHJ1Y3Qgb2JkX2V4cG9ydCAqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9vYmRfY2xhc3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvb2JkX2NsYXNzLmgKaW5kZXggOWQxZjI2Ni4uZTI2NTgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9vYmRfY2xhc3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL29iZF9jbGFzcy5oCkBAIC03MTEsMTUgKzcxMSw2IEBACiAJcmV0dXJuIG9iZF9wYWNrbWQoZXhwLCBOVUxMLCBtZW1fc3JjKTsKIH0KIAotLyogaGVscGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBpbnQgb2JkX2FsbG9jX2Rpc2ttZChzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLAotCQkJCSAgIHN0cnVjdCBsb3ZfbWRzX21kICoqZGlza190Z3QpCi17Ci0JTEFTU0VSVChkaXNrX3RndCk7Ci0JTEFTU0VSVCgqZGlza190Z3QgPT0gTlVMTCk7Ci0JcmV0dXJuIG9iZF9wYWNrbWQoZXhwLCBkaXNrX3RndCwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9iZF9mcmVlX2Rpc2ttZChzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLAogCQkJCSAgc3RydWN0IGxvdl9tZHNfbWQgKipkaXNrX3RndCkKIHsKQEAgLTIwNTUsMTIgKzIwNDYsMTMgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWRfaW5pdF9lYV9zaXplKHN0cnVjdCBvYmRfZXhwb3J0ICpleHAsIGludCBlYXNpemUsCi0JCQkJICBpbnQgZGVmX2FzaXplLCBpbnQgY29va2llc2l6ZSkKKwkJCQkgIGludCBkZWZfYXNpemUsIGludCBjb29raWVzaXplLAorCQkJCSAgaW50IGRlZl9jb29raWVzaXplKQogewogCUVYUF9DSEVDS19NRF9PUChleHAsIGluaXRfZWFfc2l6ZSk7CiAJRVhQX01EX0NPVU5URVJfSU5DUkVNRU5UKGV4cCwgaW5pdF9lYV9zaXplKTsKIAlyZXR1cm4gTURQKGV4cC0+ZXhwX29iZCwgaW5pdF9lYV9zaXplKShleHAsIGVhc2l6ZSwgZGVmX2FzaXplLAotCQkJCQkgICAgICAgY29va2llc2l6ZSk7CisJCQkJCSAgICAgICBjb29raWVzaXplLCBkZWZfY29va2llc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1kX2dldF9yZW1vdGVfcGVybShzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLApAQCAtMjEzMyw3ICsyMTI1LDcgQEAKIAogI2RlZmluZSBPQkRPX0FMTE9DKHB0cikJCQkJCQkgICAgICAgXAogZG8gewkJCQkJCQkJCSAgXAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoKHB0ciksIG9iZG9fY2FjaGVwLCBfX0dGUF9JTyk7CSAgICAgXAorCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoKHB0ciksIG9iZG9fY2FjaGVwLCBHRlBfTk9GUyk7ICAgICAgICAgICAgIFwKIH0gd2hpbGUoMCkKIAogI2RlZmluZSBPQkRPX0ZSRUUocHRyKQkJCQkJCQlcCkBAIC0yMTkwLDYgKzIxODIsOSBAQAogaW50IG1lYV9uYW1lMmlkeChzdHJ1Y3QgbG12X3N0cmlwZV9tZCAqbWVhLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CiBpbnQgcmF3X25hbWUyaWR4KGludCBoYXNodHlwZSwgaW50IGNvdW50LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CiAKKy8qIGNsYXNzX29iZC5jICovCitleHRlcm4gY2hhciBvYmRfam9iaWRfbm9kZVtdOworCiAvKiBwcm5nLmMgKi8KICNkZWZpbmUgbGxfZ2VuZXJhdGVfcmFuZG9tX3V1aWQodXVpZF9vdXQpIGNmc19nZXRfcmFuZG9tX2J5dGVzKHV1aWRfb3V0LCBzaXplb2YoY2xhc3NfdXVpZF90KSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9vYmRfbG92LmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL29iZF9sb3YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1NzE4Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL29iZF9sb3YuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogR1BMIEhFQURFUiBTVEFSVAotICoKLSAqIERPIE5PVCBBTFRFUiBPUiBSRU1PVkUgQ09QWVJJR0hUIE5PVElDRVMgT1IgVEhJUyBGSUxFIEhFQURFUi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb25seSwKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBmb3IgbW9yZSBkZXRhaWxzIChhIGNvcHkgaXMgaW5jbHVkZWQKLSAqIGluIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCBhY2NvbXBhbmllZCB0aGlzIGNvZGUpLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvcHJvZHVjdHMvbHVzdHJlL2RvY3MvR1BMdjIucGRmCi0gKgotICogUGxlYXNlIGNvbnRhY3QgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgNDE1MCBOZXR3b3JrIENpcmNsZSwgU2FudGEgQ2xhcmEsCi0gKiBDQSA5NTA1NCBVU0Egb3IgdmlzaXQgd3d3LnN1bi5jb20gaWYgeW91IG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvcgotICogaGF2ZSBhbnkgcXVlc3Rpb25zLgotICoKLSAqIEdQTCBIRUFERVIgRU5ECi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMTAsIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCi0gKi8KLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMdXN0cmUsIGh0dHA6Ly93d3cubHVzdHJlLm9yZy8KLSAqIEx1c3RyZSBpcyBhIHRyYWRlbWFyayBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0gKi8KLQotI2lmbmRlZiBfT0JEX0xPVl9IX18KLSNkZWZpbmUgX09CRF9MT1ZfSF9fCi0KLSNkZWZpbmUgTE9WX0RFRkFVTFRfU1RSSVBFX1NJWkUgKDEgPDwgTE5FVF9NVFVfQklUUykKLQotc3RhdGljIGlubGluZSBpbnQgbG92X3N0cmlwZV9tZF9zaXplKF9fdTE2IHN0cmlwZXMpCi17Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3QgbG92X3N0cmlwZV9tZCkgKyBzdHJpcGVzKnNpemVvZihzdHJ1Y3QgbG92X29pbmZvKik7Ci19Ci0KLXN0cnVjdCBsb3ZfdmVyc2lvbl9zaXplIHsKLQlfX3UzMiAgIGx2c19tYWdpYzsKLQlzaXplX3QgIGx2c19sbW1fc2l6ZTsKLQlzaXplX3QgIGx2c19sb2Rfc2l6ZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgX191MzIgbG92X21kc19tZF9zdHJpcGVjbnQoaW50IGVhX3NpemUsIF9fdTMyIGxtbV9tYWdpYykKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGxvdl92ZXJzaW9uX3NpemUgbG1tX3Zlcl9zaXplW10gPSB7Ci0JCQl7IC5sdnNfbWFnaWMgPSBMT1ZfTUFHSUNfVjMsCi0JCQkgIC5sdnNfbG1tX3NpemUgPSBzaXplb2Yoc3RydWN0IGxvdl9tZHNfbWRfdjMpLAotCQkJICAubHZzX2xvZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb3Zfb3N0X2RhdGFfdjEpIH0sCi0JCQl7IC5sdnNfbWFnaWMgPSBMT1ZfTUFHSUNfVjEsCi0JCQkgIC5sdnNfbG1tX3NpemUgPSBzaXplb2Yoc3RydWN0IGxvdl9tZHNfbWRfdjEpLAotCQkJICAubHZzX2xvZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb3Zfb3N0X2RhdGFfdjEpfSB9OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG1tX3Zlcl9zaXplKTsgaSsrKSB7Ci0JCWlmIChsbW1fbWFnaWMgPT0gbG1tX3Zlcl9zaXplW2ldLmx2c19tYWdpYykgewotCQkJaWYgKGVhX3NpemUgPD0gbG1tX3Zlcl9zaXplW2ldLmx2c19sbW1fc2l6ZSkKLQkJCQlyZXR1cm4gMDsKLQkJCXJldHVybiAoZWFfc2l6ZSAtIGxtbV92ZXJfc2l6ZVtpXS5sdnNfbG1tX3NpemUpIC8KLQkJCQlsbW1fdmVyX3NpemVbaV0ubHZzX2xvZF9zaXplOwotCQl9Ci0JfQotCi0JLyogSW52YWxpZCBMT1YgbWFnaWMsIHNvIG5vIHN0cmlwZXMgY291bGQgZml0ICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGxvdl9kb19kaXY2NChhLCBiKSByZXR1cm5zIGEgJSBiLCBhbmQgYSA9IGEgLyBiLgotICogVGhlIDMyLWJpdCBjb2RlIGlzIExPVi1zcGVjaWZpYyBkdWUgdG8ga25vd2luZyBhYm91dCBzdHJpcGUgbGltaXRzIGluCi0gKiBvcmRlciB0byByZWR1Y2UgdGhlIGRpdmlzb3IgdG8gYSAzMi1iaXQgbnVtYmVyLiAgSWYgdGhlIGRpdmlzb3IgaXMKLSAqIGFscmVhZHkgYSAzMi1iaXQgdmFsdWUgdGhlIGNvbXBpbGVyIGhhbmRsZXMgdGhpcyBkaXJlY3RseS4gKi8KLSNpZiBCSVRTX1BFUl9MT05HID4gMzIKLSMgZGVmaW5lIGxvdl9kb19kaXY2NChuLGJhc2UpICh7CQkJCQlcCi0JdWludDY0X3QgX19iYXNlID0gKGJhc2UpOwkJCQkJXAotCXVpbnQ2NF90IF9fcmVtOwkJCQkJCQlcCi0JX19yZW0gPSAoKHVpbnQ2NF90KShuKSkgJSBfX2Jhc2U7CQkJCVwKLQkobikgPSAoKHVpbnQ2NF90KShuKSkgLyBfX2Jhc2U7CQkJCQlcCi0JX19yZW07CQkJCQkJCQlcCi0gIH0pCi0jZWxzZQotIyBkZWZpbmUgbG92X2RvX2RpdjY0KG4sYmFzZSkgKHsJCQkJCVwKLQl1aW50NjRfdCBfX3JlbTsJCQkJCQkJXAotCWlmICgoc2l6ZW9mKGJhc2UpID4gNCkgJiYgKCgoYmFzZSkgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpICE9IDApKSB7ICBcCi0JCWludCBfX3JlbWFpbmRlcjsJCQkJCSAgICAgIFwKLQkJTEFTU0VSVEYoISgoYmFzZSkgJiAoTE9WX01JTl9TVFJJUEVfU0laRSAtIDEpKSwgIjY0IGJpdCBsb3YgIiBcCi0JCQkgImRpdmlzaW9uICVsbHUgLyAlbGx1XG4iLCAobiksICh1aW50NjRfdCkoYmFzZSkpOyAgICBcCi0JCV9fcmVtYWluZGVyID0gKG4pICYgKExPVl9NSU5fU1RSSVBFX1NJWkUgLSAxKTsJCVwKLQkJKG4pID4+PSBMT1ZfTUlOX1NUUklQRV9CSVRTOwkJCQlcCi0JCV9fcmVtID0gZG9fZGl2KG4sIChiYXNlKSA+PiBMT1ZfTUlOX1NUUklQRV9CSVRTKTsJXAotCQlfX3JlbSA8PD0gTE9WX01JTl9TVFJJUEVfQklUUzsJCQkJXAotCQlfX3JlbSArPSBfX3JlbWFpbmRlcjsJCQkJCVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JCV9fcmVtID0gZG9fZGl2KG4sIGJhc2UpOwkJCQlcCi0JfQkJCQkJCQkJXAotCV9fcmVtOwkJCQkJCQkJXAotICB9KQotI2VuZGlmCi0KLSNkZWZpbmUgSU9DX0xPVl9UWVBFCQkgICAnZycKLSNkZWZpbmUgSU9DX0xPVl9NSU5fTlIJCSA1MAotI2RlZmluZSBJT0NfTE9WX1NFVF9PU0NfQUNUSVZFCSBfSU9XUignZycsIDUwLCBsb25nKQotI2RlZmluZSBJT0NfTE9WX01BWF9OUgkJIDUwCi0KLSNkZWZpbmUgUU9TX0RFRkFVTFRfVEhSRVNIT0xECSAgIDEwIC8qIE1CICovCi0jZGVmaW5lIFFPU19ERUZBVUxUX01BWEFHRQkgICAgICA1ICAvKiBTZWNvbmRzICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9vYmRfc3VwcG9ydC5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvaW5jbHVkZS9vYmRfc3VwcG9ydC5oCmluZGV4IDVlYzMzNjkuLmNjNWFmNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2luY2x1ZGUvb2JkX3N1cHBvcnQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9pbmNsdWRlL29iZF9zdXBwb3J0LmgKQEAgLTY0MSw4ICs2NDEsOCBAQAogI2RlZmluZSBPQkRfQUxMT0NfR0ZQKHB0ciwgc2l6ZSwgZ2ZwX21hc2spCQkJCSAgICAgIFwKIAlfX09CRF9NQUxMT0NfVkVSQk9TRShwdHIsIE5VTEwsIDAsIHNpemUsIGdmcF9tYXNrKQogCi0jZGVmaW5lIE9CRF9BTExPQyhwdHIsIHNpemUpIE9CRF9BTExPQ19HRlAocHRyLCBzaXplLCBfX0dGUF9JTykKLSNkZWZpbmUgT0JEX0FMTE9DX1dBSVQocHRyLCBzaXplKSBPQkRfQUxMT0NfR0ZQKHB0ciwgc2l6ZSwgR0ZQX0lPRlMpCisjZGVmaW5lIE9CRF9BTExPQyhwdHIsIHNpemUpIE9CRF9BTExPQ19HRlAocHRyLCBzaXplLCBHRlBfTk9GUykKKyNkZWZpbmUgT0JEX0FMTE9DX1dBSVQocHRyLCBzaXplKSBPQkRfQUxMT0NfR0ZQKHB0ciwgc2l6ZSwgR0ZQX0tFUk5FTCkKICNkZWZpbmUgT0JEX0FMTE9DX1BUUihwdHIpIE9CRF9BTExPQyhwdHIsIHNpemVvZigqKHB0cikpKQogI2RlZmluZSBPQkRfQUxMT0NfUFRSX1dBSVQocHRyKSBPQkRfQUxMT0NfV0FJVChwdHIsIHNpemVvZigqKHB0cikpKQogCkBAIC02NTAsNyArNjUwLDcgQEAKIAlfX09CRF9NQUxMT0NfVkVSQk9TRShwdHIsIGNwdGFiLCBjcHQsIHNpemUsIGdmcF9tYXNrKQogCiAjZGVmaW5lIE9CRF9DUFRfQUxMT0MocHRyLCBjcHRhYiwgY3B0LCBzaXplKQkJCQkgICAgICBcCi0JT0JEX0NQVF9BTExPQ19HRlAocHRyLCBjcHRhYiwgY3B0LCBzaXplLCBfX0dGUF9JTykKKwlPQkRfQ1BUX0FMTE9DX0dGUChwdHIsIGNwdGFiLCBjcHQsIHNpemUsIEdGUF9OT0ZTKQogCiAjZGVmaW5lIE9CRF9DUFRfQUxMT0NfUFRSKHB0ciwgY3B0YWIsIGNwdCkJCQkJICAgICAgXAogCU9CRF9DUFRfQUxMT0MocHRyLCBjcHRhYiwgY3B0LCBzaXplb2YoKihwdHIpKSkKQEAgLTc5MywxMCArNzkzLDEwIEBACiB9IHdoaWxlKDApCiAKICNkZWZpbmUgT0JEX1NMQUJfQUxMT0MocHRyLCBzbGFiLCBzaXplKQkJCQkJICAgICAgXAotCU9CRF9TTEFCX0FMTE9DX0dGUChwdHIsIHNsYWIsIHNpemUsIF9fR0ZQX0lPKQorCU9CRF9TTEFCX0FMTE9DX0dGUChwdHIsIHNsYWIsIHNpemUsIEdGUF9OT0ZTKQogCiAjZGVmaW5lIE9CRF9TTEFCX0NQVF9BTExPQyhwdHIsIHNsYWIsIGNwdGFiLCBjcHQsIHNpemUpCQkJICAgICAgXAotCU9CRF9TTEFCX0NQVF9BTExPQ19HRlAocHRyLCBzbGFiLCBjcHRhYiwgY3B0LCBzaXplLCBfX0dGUF9JTykKKwlPQkRfU0xBQl9DUFRfQUxMT0NfR0ZQKHB0ciwgc2xhYiwgY3B0YWIsIGNwdCwgc2l6ZSwgR0ZQX05PRlMpCiAKICNkZWZpbmUgT0JEX1NMQUJfQUxMT0NfUFRSKHB0ciwgc2xhYikJCQkJCSAgICAgIFwKIAlPQkRfU0xBQl9BTExPQyhwdHIsIHNsYWIsIHNpemVvZigqKHB0cikpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGNsaWVudC9sY29tbW9uX2NsLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sY2xpZW50L2xjb21tb25fY2wuYwppbmRleCA2OTA3YTE2Li5kYzI0Y2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sY2xpZW50L2xjb21tb25fY2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sY2xpZW50L2xjb21tb25fY2wuYwpAQCAtNjMsNyArNjMsNyBAQAogCiAjaW5jbHVkZSAiLi4vbGxpdGUvbGxpdGVfaW50ZXJuYWwuaCIKIAotY29uc3Qgc3RydWN0IGNsX3JlcV9vcGVyYXRpb25zIGNjY19yZXFfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBjbF9yZXFfb3BlcmF0aW9ucyBjY2NfcmVxX29wczsKIAogLyoKICAqIGNjY18gcHJlZml4IHN0YW5kcyBmb3IgIkNvbW1vbiBDbGllbnQgQ29kZSIuCkBAIC0xMTIsMTIgKzExMiwxMSBAQAogICoKICAqLwogCi12b2lkICpjY2Nfa2V5X2luaXQoY29uc3Qgc3RydWN0IGx1X2NvbnRleHQgKmN0eCwKLQkJCSAgc3RydWN0IGx1X2NvbnRleHRfa2V5ICprZXkpCit2b2lkICpjY2Nfa2V5X2luaXQoY29uc3Qgc3RydWN0IGx1X2NvbnRleHQgKmN0eCwgc3RydWN0IGx1X2NvbnRleHRfa2V5ICprZXkpCiB7CiAJc3RydWN0IGNjY190aHJlYWRfaW5mbyAqaW5mbzsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoaW5mbywgY2NjX3RocmVhZF9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChpbmZvLCBjY2NfdGhyZWFkX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlpbmZvID0gRVJSX1BUUigtRU5PTUVNKTsKIAlyZXR1cm4gaW5mbzsKQEAgLTEzNSw3ICsxMzQsNyBAQAogewogCXN0cnVjdCBjY2Nfc2Vzc2lvbiAqc2Vzc2lvbjsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoc2Vzc2lvbiwgY2NjX3Nlc3Npb25fa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoc2Vzc2lvbiwgY2NjX3Nlc3Npb25fa21lbSwgR0ZQX05PRlMpOwogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXNlc3Npb24gPSBFUlJfUFRSKC1FTk9NRU0pOwogCXJldHVybiBzZXNzaW9uOwpAQCAtMjUxLDcgKzI1MCw3IEBACiAJc3RydWN0IGNjY19yZXEgKnZycTsKIAlpbnQgcmVzdWx0OwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUCh2cnEsIGNjY19yZXFfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAodnJxLCBjY2NfcmVxX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAodnJxICE9IE5VTEwpIHsKIAkJY2xfcmVxX3NsaWNlX2FkZChyZXEsICZ2cnEtPmNycV9jbCwgZGV2LCAmY2NjX3JlcV9vcHMpOwogCQlyZXN1bHQgPSAwOwpAQCAtMzI3LDcgKzMyNiw3IEBACiAJc3RydWN0IGNjY19vYmplY3QgKnZvYjsKIAlzdHJ1Y3QgbHVfb2JqZWN0ICAqb2JqOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUCh2b2IsIGNjY19vYmplY3Rfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAodm9iLCBjY2Nfb2JqZWN0X2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAodm9iICE9IE5VTEwpIHsKIAkJc3RydWN0IGNsX29iamVjdF9oZWFkZXIgKmhkcjsKIApAQCAtMzk2LDcgKzM5NSw3IEBACiAKIAlDTE9CSU5WUk5UKGVudiwgb2JqLCBjY2Nfb2JqZWN0X2ludmFyaWFudChvYmopKTsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoY2xrLCBjY2NfbG9ja19rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChjbGssIGNjY19sb2NrX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoY2xrICE9IE5VTEwpIHsKIAkJY2xfbG9ja19zbGljZV9hZGQobG9jaywgJmNsay0+Y2xrX2NsLCBvYmosIGxrb3BzKTsKIAkJcmVzdWx0ID0gMDsKQEAgLTk2Myw3ICs5NjIsNyBAQAogCSAgICAgICBKT0JTVEFUU19KT0JJRF9TSVpFKTsKIH0KIAotY29uc3Qgc3RydWN0IGNsX3JlcV9vcGVyYXRpb25zIGNjY19yZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbF9yZXFfb3BlcmF0aW9ucyBjY2NfcmVxX29wcyA9IHsKIAkuY3JvX2F0dHJfc2V0ICAgPSBjY2NfcmVxX2F0dHJfc2V0LAogCS5jcm9fY29tcGxldGlvbiA9IGNjY19yZXFfY29tcGxldGlvbgogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xjbGllbnQvbGNvbW1vbl9taXNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sY2xpZW50L2xjb21tb25fbWlzYy5jCmluZGV4IGUwNGMyZDMuLjIxZGUxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xjbGllbnQvbGNvbW1vbl9taXNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGNsaWVudC9sY29tbW9uX21pc2MuYwpAQCAtNTYsNyArNTYsNyBAQAogCV9fdTMyIHZhbHNpemUgPSBzaXplb2Yoc3RydWN0IGxvdl9kZXNjKTsKIAlpbnQgcmMsIGVhc2l6ZSwgZGVmX2Vhc2l6ZSwgY29va2llc2l6ZTsKIAlzdHJ1Y3QgbG92X2Rlc2MgZGVzYzsKLQlfX3UxNiBzdHJpcGVzOworCV9fdTE2IHN0cmlwZXMsIGRlZl9zdHJpcGVzOwogCiAJcmMgPSBvYmRfZ2V0X2luZm8oTlVMTCwgZHRfZXhwLCBzaXplb2YoS0VZX0xPVkRFU0MpLCBLRVlfTE9WREVTQywKIAkJCSAgJnZhbHNpemUsICZkZXNjLCBOVUxMKTsKQEAgLTY3LDE1ICs2NywyMCBAQAogCWxzbS5sc21fc3RyaXBlX2NvdW50ID0gc3RyaXBlczsKIAllYXNpemUgPSBvYmRfc2l6ZV9kaXNrbWQoZHRfZXhwLCAmbHNtKTsKIAotCWxzbS5sc21fc3RyaXBlX2NvdW50ID0gZGVzYy5sZF9kZWZhdWx0X3N0cmlwZV9jb3VudDsKKwlkZWZfc3RyaXBlcyA9IG1pbl90KF9fdTMyLCBkZXNjLmxkX2RlZmF1bHRfc3RyaXBlX2NvdW50LAorCQkJICAgIExPVl9NQVhfU1RSSVBFX0NPVU5UKTsKKwlsc20ubHNtX3N0cmlwZV9jb3VudCA9IGRlZl9zdHJpcGVzOwogCWRlZl9lYXNpemUgPSBvYmRfc2l6ZV9kaXNrbWQoZHRfZXhwLCAmbHNtKTsKIAogCWNvb2tpZXNpemUgPSBzdHJpcGVzICogc2l6ZW9mKHN0cnVjdCBsbG9nX2Nvb2tpZSk7CiAKLQlDREVCVUcoRF9IQSwgInVwZGF0aW5nIG1heF9tZHNpemUvbWF4X2Nvb2tpZXNpemU6ICVkLyVkXG4iLAotCSAgICAgICBlYXNpemUsIGNvb2tpZXNpemUpOworCS8qIGRlZmF1bHQgY29va2llc2l6ZSBpcyAwIGJlY2F1c2UgZnJvbSAyLjQgc2VydmVyIGRvZXNuJ3Qgc2VuZAorCSAqIGxsb2cgY29va2llcyB0byBjbGllbnQuICovCisJQ0RFQlVHKERfSEEsCisJICAgICAgICJ1cGRhdGluZyBkZWYvbWF4X2Vhc2l6ZTogJWQvJWQgZGVmL21heF9jb29raWVzaXplOiAwLyVkXG4iLAorCSAgICAgICBkZWZfZWFzaXplLCBlYXNpemUsIGNvb2tpZXNpemUpOwogCi0JcmMgPSBtZF9pbml0X2VhX3NpemUobWRfZXhwLCBlYXNpemUsIGRlZl9lYXNpemUsIGNvb2tpZXNpemUpOworCXJjID0gbWRfaW5pdF9lYV9zaXplKG1kX2V4cCwgZWFzaXplLCBkZWZfZWFzaXplLCBjb29raWVzaXplLCAwKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9leHRlbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9leHRlbnQuYwppbmRleCBhYzVkNjZhLi5iZGUzYTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sZGxtL2xkbG1fZXh0ZW50LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX2V4dGVudC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlzdHJ1Y3QgbGRsbV9pbnRlcnZhbCAqbm9kZTsKIAogCUxBU1NFUlQobG9jay0+bF9yZXNvdXJjZS0+bHJfdHlwZSA9PSBMRExNX0VYVEVOVCk7Ci0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChub2RlLCBsZGxtX2ludGVydmFsX3NsYWIsIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKG5vZGUsIGxkbG1faW50ZXJ2YWxfc2xhYiwgR0ZQX05PRlMpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sZGxtL2xkbG1faW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9pbnRlcm5hbC5oCmluZGV4IDhjZDc5NjMuLmY5OTc1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9pbnRlcm5hbC5oCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlzdHJ1Y3QgX18jI3ZhciMjX19kdW1teV9yZWFkIHs7fSAvKiBzZW1pY29sb24gY2F0Y2hlciAqLwogCiAjZGVmaW5lIExETE1fUE9PTF9QUk9DX1dSSVRFUih2YXIsIHR5cGUpCQkJCSAgICBcCi0JaW50IGxwcm9jZnNfd3JfIyN2YXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwJICAgIFwKKwlzdGF0aWMgaW50IGxwcm9jZnNfd3JfIyN2YXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgIFwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkJCSAgICBcCiAJewkJCQkJCQkJICAgIFwKIAkJc3RydWN0IGxkbG1fcG9vbCAqcGwgPSBkYXRhOwkJCQkgICAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX2xpYi5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX2xpYi5jCmluZGV4IDFhOGMwZDcuLjhiYjU5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9saWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sZGxtL2xkbG1fbGliLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCX0KIAogCWluaXRfcndzZW0oJmNsaS0+Y2xfc2VtKTsKLQlzZW1hX2luaXQoJmNsaS0+Y2xfbWdjX3NlbSwgMSk7CisJbXV0ZXhfaW5pdCgmY2xpLT5jbF9tZ2NfbXV0ZXgpOwogCWNsaS0+Y2xfY29ubl9jb3VudCA9IDA7CiAJbWVtY3B5KHNlcnZlcl91dWlkLnV1aWQsIGx1c3RyZV9jZmdfYnVmKGxjZmcsIDIpLAogCSAgICAgICBtaW5fdCh1bnNpZ25lZCBpbnQsIExVU1RSRV9DRkdfQlVGTEVOKGxjZmcsIDIpLApAQCAtNTE0LDcgKzUxNCw3IEBACiAJCUxBU1NFUlQgKGltcC0+aW1wX3N0YXRlID09IExVU1RSRV9JTVBfRElTQ09OKTsKIAkJR09UTyhvdXRfbGRsbSwgcmMpOwogCX0KLQlMQVNTRVJUKCgqZXhwKS0+ZXhwX2Nvbm5lY3Rpb24pOworCUxBU1NFUlQoKmV4cCAhPSBOVUxMICYmICgqZXhwKS0+ZXhwX2Nvbm5lY3Rpb24pOwogCiAJaWYgKGRhdGEpIHsKIAkJTEFTU0VSVEYoKG9jZC0+b2NkX2Nvbm5lY3RfZmxhZ3MgJiBkYXRhLT5vY2RfY29ubmVjdF9mbGFncykgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9sb2NrLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sZGxtL2xkbG1fbG9jay5jCmluZGV4IDA1NDhhY2EuLjFiM2Y1YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9sb2NrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX2xvY2suYwpAQCAtMjMyLDggKzIzMiw2IEBACiAKIAkJTEFTU0VSVChsb2NrLT5sX3Jlc291cmNlLT5scl90eXBlICE9IExETE1fRkxPQ0spOwogCQlsaXN0X2RlbF9pbml0KCZsb2NrLT5sX2xydSk7Ci0JCWlmIChsb2NrLT5sX2ZsYWdzICYgTERMTV9GTF9TS0lQUEVEKQotCQkJbG9jay0+bF9mbGFncyAmPSB+TERMTV9GTF9TS0lQUEVEOwogCQlMQVNTRVJUKG5zLT5uc19ucl91bnVzZWQgPiAwKTsKIAkJbnMtPm5zX25yX3VudXNlZC0tOwogCQlyYyA9IDE7CkBAIC0yNzEsNiArMjY5LDggQEAKIAlMQVNTRVJUKGxpc3RfZW1wdHkoJmxvY2stPmxfbHJ1KSk7CiAJTEFTU0VSVChsb2NrLT5sX3Jlc291cmNlLT5scl90eXBlICE9IExETE1fRkxPQ0spOwogCWxpc3RfYWRkX3RhaWwoJmxvY2stPmxfbHJ1LCAmbnMtPm5zX3VudXNlZF9saXN0KTsKKwlpZiAobG9jay0+bF9mbGFncyAmIExETE1fRkxfU0tJUFBFRCkKKwkJbG9jay0+bF9mbGFncyAmPSB+TERMTV9GTF9TS0lQUEVEOwogCUxBU1NFUlQobnMtPm5zX25yX3VudXNlZCA+PSAwKTsKIAlucy0+bnNfbnJfdW51c2VkKys7CiB9CkBAIC00MzcsNyArNDM3LDcgQEAKIAlpZiAocmVzb3VyY2UgPT0gTlVMTCkKIAkJTEJVRygpOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsb2NrLCBsZGxtX2xvY2tfc2xhYiwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobG9jaywgbGRsbV9sb2NrX3NsYWIsIEdGUF9OT0ZTKTsKIAlpZiAobG9jayA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTYyNCw3ICsxNjI0LDcgQEAKIAkgKiBoYXZlIHRvIGFsbG9jYXRlIHRoZSBpbnRlcnZhbCBub2RlIGVhcmx5IG90aGVyd2lzZSB3ZSBjYW4ndCByZWdyYW50CiAJICogdGhpcyBsb2NrIGluIHRoZSBmdXR1cmUuIC0gamF5ICovCiAJaWYgKCFsb2NhbCAmJiAoKmZsYWdzICYgTERMTV9GTF9SRVBMQVkpICYmIHJlcy0+bHJfdHlwZSA9PSBMRExNX0VYVEVOVCkKLQkJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChub2RlLCBsZGxtX2ludGVydmFsX3NsYWIsIF9fR0ZQX0lPKTsKKwkJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChub2RlLCBsZGxtX2ludGVydmFsX3NsYWIsIEdGUF9OT0ZTKTsKIAogCWxvY2tfcmVzX2FuZF9sb2NrKGxvY2spOwogCWlmIChsb2NhbCAmJiBsb2NrLT5sX3JlcV9tb2RlID09IGxvY2stPmxfZ3JhbnRlZF9tb2RlKSB7CkBAIC0yMTQ2LDcgKzIxNDYsNyBAQAogCiAJLyogSSBjYW4ndCBjaGVjayB0aGUgdHlwZSBvZiBsb2NrIGhlcmUgYmVjYXVzZSB0aGUgYml0bG9jayBvZiBsb2NrCiAJICogaXMgbm90IGhlbGQgaGVyZSwgc28gZG8gdGhlIGFsbG9jYXRpb24gYmxpbmRseS4gLWpheSAqLwotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobm9kZSwgbGRsbV9pbnRlcnZhbF9zbGFiLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChub2RlLCBsZGxtX2ludGVydmFsX3NsYWIsIEdGUF9OT0ZTKTsKIAlpZiAobm9kZSA9PSBOVUxMKQogCQkvKiBBY3R1YWxseSwgdGhpcyBjYXVzZXMgRURFQURMT0NLIHRvIGJlIHJldHVybmVkICovCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX3Bvb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9wb29sLmMKaW5kZXggNjc1ODY0Ni4uMmNjNjk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX3Bvb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sZGxtL2xkbG1fcG9vbC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKICAqIGxvY2tzIHNtYWxsZXIgaW4gbmV4dCAxMGguCiAgKi8KIHN0YXRpYyBpbnQgbGRsbV9zcnZfcG9vbF9zaHJpbmsoc3RydWN0IGxkbG1fcG9vbCAqcGwsCi0JCQkJaW50IG5yLCB1bnNpZ25lZCBpbnQgZ2ZwX21hc2spCisJCQkJaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlfX3UzMiBsaW1pdDsKIApAQCAtNTE4LDcgKzUxOCw3IEBACiAgKiBwYXNzZWQgXGEgcGwgYWNjb3JkaW5nIHRvIFxhIG5yIGFuZCBcYSBnZnBfbWFzay4KICAqLwogc3RhdGljIGludCBsZGxtX2NsaV9wb29sX3NocmluayhzdHJ1Y3QgbGRsbV9wb29sICpwbCwKLQkJCQlpbnQgbnIsIHVuc2lnbmVkIGludCBnZnBfbWFzaykKKwkJCQlpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBsZGxtX25hbWVzcGFjZSAqbnM7CiAJaW50IHVudXNlZDsKQEAgLTU0NiwxMyArNTQ2LDEzIEBACiAJCXJldHVybiBsZGxtX2NhbmNlbF9scnUobnMsIG5yLCBMQ0ZfQVNZTkMsIExETE1fQ0FOQ0VMX1NIUklOSyk7CiB9CiAKLXN0cnVjdCBsZGxtX3Bvb2xfb3BzIGxkbG1fc3J2X3Bvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsZGxtX3Bvb2xfb3BzIGxkbG1fc3J2X3Bvb2xfb3BzID0gewogCS5wb19yZWNhbGMgPSBsZGxtX3Nydl9wb29sX3JlY2FsYywKIAkucG9fc2hyaW5rID0gbGRsbV9zcnZfcG9vbF9zaHJpbmssCiAJLnBvX3NldHVwICA9IGxkbG1fc3J2X3Bvb2xfc2V0dXAKIH07CiAKLXN0cnVjdCBsZGxtX3Bvb2xfb3BzIGxkbG1fY2xpX3Bvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsZGxtX3Bvb2xfb3BzIGxkbG1fY2xpX3Bvb2xfb3BzID0gewogCS5wb19yZWNhbGMgPSBsZGxtX2NsaV9wb29sX3JlY2FsYywKIAkucG9fc2hyaW5rID0gbGRsbV9jbGlfcG9vbF9zaHJpbmsKIH07CkBAIC02MDMsNyArNjAzLDcgQEAKICAqIGZyZWVhYmxlIGxvY2tzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNhbmNlbGVkIGxvY2tzLgogICovCiBpbnQgbGRsbV9wb29sX3NocmluayhzdHJ1Y3QgbGRsbV9wb29sICpwbCwgaW50IG5yLAotCQkgICAgIHVuc2lnbmVkIGludCBnZnBfbWFzaykKKwkJICAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgY2FuY2VsID0gMDsKIApAQCAtNzE4LDcgKzcxOCw3IEBACiAJCXNucHJpbnRmKHZhcl9uYW1lLCBNQVhfU1RSSU5HX1NJWkUsICNuYW1lKTsJXAogCQlwb29sX3ZhcnNbMF0uZGF0YSA9IHZhcjsJCQlcCiAJCXBvb2xfdmFyc1swXS5mb3BzID0gb3BzOwkJCVwKLQkJbHByb2Nmc19hZGRfdmFycyhwbC0+cGxfcHJvY19kaXIsIHBvb2xfdmFycywgMCk7XAorCQlscHJvY2ZzX2FkZF92YXJzKHBsLT5wbF9wcm9jX2RpciwgcG9vbF92YXJzLCBOVUxMKTtcCiAJfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBsZGxtX3Bvb2xfcHJvY19pbml0KHN0cnVjdCBsZGxtX3Bvb2wgKnBsKQpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKICAqIGNvdW50IGxvY2tzIGZyb20gYWxsIG5hbWVzcGFjZXMgKGlmIHBvc3NpYmxlKS4gUmV0dXJucyBudW1iZXIgb2YKICAqIGNhY2hlZCBsb2Nrcy4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbGRsbV9wb29sc19jb3VudChsZGxtX3NpZGVfdCBjbGllbnQsIHVuc2lnbmVkIGludCBnZnBfbWFzaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxkbG1fcG9vbHNfY291bnQobGRsbV9zaWRlX3QgY2xpZW50LCBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgdG90YWwgPSAwLCBucl9uczsKIAlzdHJ1Y3QgbGRsbV9uYW1lc3BhY2UgKm5zOwpAQCAtMTA4Miw3ICsxMDgyLDcgQEAKIAlyZXR1cm4gdG90YWw7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxkbG1fcG9vbHNfc2NhbihsZGxtX3NpZGVfdCBjbGllbnQsIGludCBuciwgdW5zaWduZWQgaW50IGdmcF9tYXNrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbGRsbV9wb29sc19zY2FuKGxkbG1fc2lkZV90IGNsaWVudCwgaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsKIAlpbnQgdG1wLCBucl9uczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xkbG0vbGRsbV9yZXNvdXJjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX3Jlc291cmNlLmMKaW5kZXggMjgyNGQ0YS4uYzU1ZDcyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGRsbS9sZGxtX3Jlc291cmNlLmMKQEAgLTg5LDcgKzg5LDcgQEAKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGxwcm9jZnNfdmFycyBsaXN0W10gPSB7Ci0JCXsgImR1bXBfbmFtZXNwYWNlcyIsICZsZGxtX2R1bXBfbnNfZm9wcywgMCwgMDIyMiB9LAorCQl7ICJkdW1wX25hbWVzcGFjZXMiLCAmbGRsbV9kdW1wX25zX2ZvcHMsIE5VTEwsIDAyMjIgfSwKIAkJeyAiZHVtcF9ncmFudGVkX21heCIsICZsZGxtX3J3X3VpbnRfZm9wcywKIAkJICAmbGRsbV9kdW1wX2dyYW50ZWRfbWF4IH0sCiAJCXsgImNhbmNlbF91bnVzZWRfbG9ja3NfYmVmb3JlX3JlcGxheSIsICZsZGxtX3J3X3VpbnRfZm9wcywKQEAgLTMyMiw3ICszMjIsNyBAQAogCQlzbnByaW50Zihsb2NrX25hbWUsIE1BWF9TVFJJTkdfU0laRSwgbmFtZSk7CVwKIAkJbG9ja192YXJzWzBdLmRhdGEgPSB2YXI7CQkJXAogCQlsb2NrX3ZhcnNbMF0uZm9wcyA9IG9wczsJCQlcCi0JCWxwcm9jZnNfYWRkX3ZhcnMobnNfcGRlLCBsb2NrX3ZhcnMsIDApOwkJXAorCQlscHJvY2ZzX2FkZF92YXJzKG5zX3BkZSwgbG9ja192YXJzLCBOVUxMKTsJXAogCX0gd2hpbGUgKDApCiAKIGludCBsZGxtX25hbWVzcGFjZV9wcm9jX3JlZ2lzdGVyKHN0cnVjdCBsZGxtX25hbWVzcGFjZSAqbnMpCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCXN0cnVjdCBsZGxtX3Jlc291cmNlICpyZXM7CiAJaW50IGlkeDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAocmVzLCBsZGxtX3Jlc291cmNlX3NsYWIsIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKHJlcywgbGRsbV9yZXNvdXJjZV9zbGFiLCBHRlBfTk9GUyk7CiAJaWYgKHJlcyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpYmNmc19jcHUuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9saWJjZnNfY3B1LmMKaW5kZXggMWZiMzcwMC4uYTFhN2JmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpYmNmc19jcHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGliY2ZzX2NwdS5jCkBAIC03NCw2ICs3NCwyMiBAQAogfQogRVhQT1JUX1NZTUJPTChjZnNfY3B0X3RhYmxlX2ZyZWUpOwogCisjaWZkZWYgQ09ORklHX1NNUAoraW50CitjZnNfY3B0X3RhYmxlX3ByaW50KHN0cnVjdCBjZnNfY3B0X3RhYmxlICpjcHRhYiwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludAlyYyA9IDA7CisKKwlyYyA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAiJWRcdDogJWRcbiIsIDAsIDApOworCWxlbiAtPSByYzsKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAtRUZCSUc7CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKGNmc19jcHRfdGFibGVfcHJpbnQpOworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwogaW50CiBjZnNfY3B0X251bWJlcihzdHJ1Y3QgY2ZzX2NwdF90YWJsZSAqY3B0YWIpCiB7CkBAIC0xNjEsNiArMTc3LDEzIEBACiBFWFBPUlRfU1lNQk9MKGNmc19jcHRfc3ByZWFkX25vZGUpOwogCiBpbnQKK2Nmc19jcHVfaHRfbnNpYmxpbmdzKGludCBjcHUpCit7CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKGNmc19jcHVfaHRfbnNpYmxpbmdzKTsKKworaW50CiBjZnNfY3B0X2N1cnJlbnQoc3RydWN0IGNmc19jcHRfdGFibGUgKmNwdGFiLCBpbnQgcmVtYXApCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtY3B1LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtY3B1LmMKaW5kZXggNzdiMWVmNi4uZmMyMTIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpbnV4L2xpbnV4LWNwdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9saW51eC9saW51eC1jcHUuYwpAQCAtNzEsNyArNzEsNyBAQAogCS8qIHJlc2VydmVkIGZvciBob3RwbHVnICovCiAJdW5zaWduZWQgbG9uZwkJY3B0X3ZlcnNpb247CiAJLyogbXV0ZXggdG8gcHJvdGVjdCBjcHRfY3B1bWFzayAqLwotCXN0cnVjdCBzZW1hcGhvcmUJY3B0X211dGV4OworCXN0cnVjdCBtdXRleAkJY3B0X211dGV4OwogCS8qIHNjcmF0Y2ggYnVmZmVyIGZvciBzZXQvdW5zZXRfbm9kZSAqLwogCWNwdW1hc2tfdAkJKmNwdF9jcHVtYXNrOwogfTsKQEAgLTQyMCwxNCArNDIwLDE0IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRvd24oJmNwdF9kYXRhLmNwdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmY3B0X2RhdGEuY3B0X211dGV4KTsKIAogCW1hc2sgPSBjcHRfZGF0YS5jcHRfY3B1bWFzazsKIAljZnNfbm9kZV90b19jcHVtYXNrKG5vZGUsIG1hc2spOwogCiAJcmMgPSBjZnNfY3B0X3NldF9jcHVtYXNrKGNwdGFiLCBjcHQsIG1hc2spOwogCi0JdXAoJmNwdF9kYXRhLmNwdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjcHRfZGF0YS5jcHRfbXV0ZXgpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtNDQ0LDE0ICs0NDQsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRvd24oJmNwdF9kYXRhLmNwdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmY3B0X2RhdGEuY3B0X211dGV4KTsKIAogCW1hc2sgPSBjcHRfZGF0YS5jcHRfY3B1bWFzazsKIAljZnNfbm9kZV90b19jcHVtYXNrKG5vZGUsIG1hc2spOwogCiAJY2ZzX2NwdF91bnNldF9jcHVtYXNrKGNwdGFiLCBjcHQsIG1hc2spOwogCi0JdXAoJmNwdF9kYXRhLmNwdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjcHRfZGF0YS5jcHRfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChjZnNfY3B0X3Vuc2V0X25vZGUpOwogCkBAIC04ODEsNyArODgxLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHNzY2FuZihzdHIsICIldSVuIiwgJmNwdCwgJm4pIDwgMSkgeworCQlpZiAoc3NjYW5mKHN0ciwgIiVkJW4iLCAmY3B0LCAmbikgPCAxKSB7CiAJCQlDRVJST1IoIkludmFsaWQgY3B1IHBhdHRlcm4gJXNcbiIsIHN0cik7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQpAQCAtOTY5LDExICs5NjksMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG93bigmY3B0X2RhdGEuY3B0X211dGV4KTsKKwkJbXV0ZXhfbG9jaygmY3B0X2RhdGEuY3B0X211dGV4KTsKIAkJLyogaWYgYWxsIEhUcyBpbiBhIGNvcmUgYXJlIG9mZmxpbmUsIGl0IG1heSBicmVhayBhZmZpbml0eSAqLwogCQljZnNfY3B1X2h0X3NpYmxpbmdzKGNwdSwgY3B0X2RhdGEuY3B0X2NwdW1hc2spOwogCQl3YXJuID0gYW55X29ubGluZV9jcHUoKmNwdF9kYXRhLmNwdF9jcHVtYXNrKSA+PSBucl9jcHVfaWRzOwotCQl1cCgmY3B0X2RhdGEuY3B0X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjcHRfZGF0YS5jcHRfbXV0ZXgpOwogCQlDREVCVUcod2FybiA/IERfV0FSTklORyA6IERfSU5GTywKIAkJICAgICAgICJMdXN0cmU6IGNhbid0IHN1cHBvcnQgQ1BVIHBsdWctb3V0IHdlbGwgbm93LCAiCiAJCSAgICAgICAicGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBjb3VsZCBiZSBpbXBhY3RlZCAiCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZjcHRfZGF0YS5jcHRfbG9jayk7Ci0Jc2VtYV9pbml0KCZjcHRfZGF0YS5jcHRfbXV0ZXgsIDEpOworCW11dGV4X2luaXQoJmNwdF9kYXRhLmNwdF9tdXRleCk7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNmc19jcHVfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpbnV4L2xpbnV4LWN1cnByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9saW51eC9saW51eC1jdXJwcm9jLmMKaW5kZXggZTc0YzNlMi4uYmQzMDFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpbnV4L2xpbnV4LWN1cnByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtY3VycHJvYy5jCkBAIC0xMDAsMTU4ICsxMDAsNiBAQAogCXJldHVybiBjYXA7CiB9CiAKLXN0YXRpYyBpbnQgY2ZzX2FjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQotewotCS8qIEp1c3QgY29waWVkIGZyb20ga2VybmVsIGZvciB0aGUga2VybmVscyB3aGljaCBkb2Vzbid0Ci0JICogaGF2ZSBhY2Nlc3NfcHJvY2Vzc192bSgpIGV4cG9ydGVkICovCi0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKQotCQlyZXR1cm4gMDsKLQotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi8KLQl3aGlsZSAobGVuKSB7Ci0JCWludCBieXRlcywgcmMsIG9mZnNldDsKLQkJdm9pZCAqbWFkZHI7Ci0KLQkJcmMgPSBnZXRfdXNlcl9wYWdlcyh0c2ssIG1tLCBhZGRyLCAxLAotCQkJCSAgICAgd3JpdGUsIDEsICZwYWdlLCAmdm1hKTsKLQkJaWYgKHJjIDw9IDApCi0JCQlicmVhazsKLQotCQlieXRlcyA9IGxlbjsKLQkJb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7Ci0JCWlmIChieXRlcyA+IFBBR0VfU0laRS1vZmZzZXQpCi0JCQlieXRlcyA9IFBBR0VfU0laRS1vZmZzZXQ7Ci0KLQkJbWFkZHIgPSBrbWFwKHBhZ2UpOwotCQlpZiAod3JpdGUpIHsKLQkJCWNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkciwKLQkJCQkJICBtYWRkciArIG9mZnNldCwgYnVmLCBieXRlcyk7Ci0JCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKHBhZ2UpOwotCQl9IGVsc2UgewotCQkJY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsCi0JCQkJCSAgICBidWYsIG1hZGRyICsgb2Zmc2V0LCBieXRlcyk7Ci0JCX0KLQkJa3VubWFwKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCWxlbiAtPSBieXRlczsKLQkJYnVmICs9IGJ5dGVzOwotCQlhZGRyICs9IGJ5dGVzOwotCX0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCW1tcHV0KG1tKTsKLQotCXJldHVybiBidWYgLSBvbGRfYnVmOwotfQotCi0vKiBSZWFkIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvZiBjdXJyZW50IHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IEBrZXkuICovCi1pbnQgY2ZzX2dldF9lbnZpcm9uKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqdmFsdWUsIGludCAqdmFsX2xlbikKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQljaGFyICpidWZmZXIsICp0bXBfYnVmID0gTlVMTDsKLQlpbnQgYnVmX2xlbiA9IFBBR0VfQ0FDSEVfU0laRTsKLQlpbnQga2V5X2xlbiA9IHN0cmxlbihrZXkpOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgcmM7Ci0KLQlidWZmZXIgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9VU0VSKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOwotCWlmICghbW0pIHsKLQkJa2ZyZWUoYnVmZmVyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQXZvaWQgZGVhZGxvY2tzIG9uIG1tYXBfc2VtIGlmIGNhbGxlZCBmcm9tIHN5c19tbWFwX3Bnb2ZmKCksCi0JICogd2hpY2ggaXMgYWxyZWFkeSBob2xkaW5nIG1tYXBfc2VtIGZvciB3cml0ZXMuICBJZiBzb21lIG90aGVyCi0JICogdGhyZWFkIGdldHMgdGhlIHdyaXRlIGxvY2sgaW4gdGhlIG1lYW50aW1lLCB0aGlzIHRocmVhZCB3aWxsCi0JICogYmxvY2ssIGJ1dCBhdCBsZWFzdCBpdCB3b24ndCBkZWFkbG9jayBvbiBpdHNlbGYuICBMVS0xNzM1ICovCi0JaWYgKGRvd25fcmVhZF90cnlsb2NrKCZtbS0+bW1hcF9zZW0pID09IDApIHsKLQkJa2ZyZWUoYnVmZmVyKTsKLQkJcmV0dXJuIC1FREVBRExLOwotCX0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCi0JYWRkciA9IG1tLT5lbnZfc3RhcnQ7Ci0Jd2hpbGUgKGFkZHIgPCBtbS0+ZW52X2VuZCkgewotCQlpbnQgdGhpc19sZW4sIHJldHZhbCwgc2Nhbl9sZW47Ci0JCWNoYXIgKmVudl9zdGFydCwgKmVudl9lbmQ7Ci0KLQkJbWVtc2V0KGJ1ZmZlciwgMCwgYnVmX2xlbik7Ci0KLQkJdGhpc19sZW4gPSBtaW5fdChpbnQsIG1tLT5lbnZfZW5kIC0gYWRkciwgYnVmX2xlbik7Ci0JCXJldHZhbCA9IGNmc19hY2Nlc3NfcHJvY2Vzc192bShjdXJyZW50LCBhZGRyLCBidWZmZXIsCi0JCQkJCSAgICAgICB0aGlzX2xlbiwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gdGhpc19sZW4pCi0JCQlicmVhazsKLQotCQlhZGRyICs9IHJldHZhbDsKLQotCQkvKiBQYXJzZSB0aGUgYnVmZmVyIHRvIGZpbmQgb3V0IHRoZSBzcGVjaWZpZWQga2V5L3ZhbHVlIHBhaXIuCi0JCSAqIFRoZSAia2V5PXZhbHVlIiBlbnRyaWVzIGFyZSBzZXBhcmF0ZWQgYnkgJ1wwJy4gKi8KLQkJZW52X3N0YXJ0ID0gYnVmZmVyOwotCQlzY2FuX2xlbiA9IHRoaXNfbGVuOwotCQl3aGlsZSAoc2Nhbl9sZW4pIHsKLQkJCWNoYXIgKmVudHJ5OwotCQkJaW50IGVudHJ5X2xlbjsKLQotCQkJZW52X2VuZCA9IG1lbXNjYW4oZW52X3N0YXJ0LCAnXDAnLCBzY2FuX2xlbik7Ci0JCQlMQVNTRVJUKGVudl9lbmQgPj0gZW52X3N0YXJ0ICYmCi0JCQkJZW52X2VuZCA8PSBlbnZfc3RhcnQgKyBzY2FuX2xlbik7Ci0KLQkJCS8qIFRoZSBsYXN0IGVudHJ5IG9mIHRoaXMgYnVmZmVyIGNyb3NzIHRoZSBidWZmZXIKLQkJCSAqIGJvdW5kYXJ5LCByZXJlYWQgaXQgaW4gbmV4dCBjeWNsZS4gKi8KLQkJCWlmICh1bmxpa2VseShlbnZfZW5kIC0gZW52X3N0YXJ0ID09IHNjYW5fbGVuKSkgewotCQkJCS8qIFRoaXMgZW50cnkgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBidWZmZXIgKi8KLQkJCQlpZiAodW5saWtlbHkoc2Nhbl9sZW4gPT0gdGhpc19sZW4pKSB7Ci0JCQkJCUNFUlJPUigiVG9vIGxvbmcgZW52IHZhcmlhYmxlLlxuIik7Ci0JCQkJCUdPVE8ob3V0LCByYyA9IC1FSU5WQUwpOwotCQkJCX0KLQkJCQlhZGRyIC09IHNjYW5fbGVuOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQllbnRyeSA9IGVudl9zdGFydDsKLQkJCWVudHJ5X2xlbiA9IGVudl9lbmQgLSBlbnZfc3RhcnQ7Ci0KLQkJCS8qIEtleSBsZW5ndGggKyBsZW5ndGggb2YgJz0nICovCi0JCQlpZiAoZW50cnlfbGVuID4ga2V5X2xlbiArIDEgJiYKLQkJCSAgICAhbWVtY21wKGVudHJ5LCBrZXksIGtleV9sZW4pKSB7Ci0JCQkJZW50cnkgKz0ga2V5X2xlbiArIDE7Ci0JCQkJZW50cnlfbGVuIC09IGtleV9sZW4gKyAxOwotCQkJCS8qIFRoZSAndmFsdWUnIGJ1ZmZlciBwYXNzZWQgaW4gaXMgdG9vIHNtYWxsLiovCi0JCQkJaWYgKGVudHJ5X2xlbiA+PSAqdmFsX2xlbikKLQkJCQkJR09UTyhvdXQsIHJjID0gLUVPVkVSRkxPVyk7Ci0KLQkJCQltZW1jcHkodmFsdWUsIGVudHJ5LCBlbnRyeV9sZW4pOwotCQkJCSp2YWxfbGVuID0gZW50cnlfbGVuOwotCQkJCUdPVE8ob3V0LCByYyA9IDApOwotCQkJfQotCi0JCQlzY2FuX2xlbiAtPSAoZW52X2VuZCAtIGVudl9zdGFydCArIDEpOwotCQkJZW52X3N0YXJ0ID0gZW52X2VuZCArIDE7Ci0JCX0KLQl9Ci0JR09UTyhvdXQsIHJjID0gLUVOT0VOVCk7Ci0KLW91dDoKLQltbXB1dChtbSk7Ci0Ja2ZyZWUoKHZvaWQgKilidWZmZXIpOwotCWlmICh0bXBfYnVmKQotCQlrZnJlZSgodm9pZCAqKXRtcF9idWYpOwotCXJldHVybiByYzsKLX0KLUVYUE9SVF9TWU1CT0woY2ZzX2dldF9lbnZpcm9uKTsKLQogRVhQT1JUX1NZTUJPTChjZnNfY2FwX3JhaXNlKTsKIEVYUE9SVF9TWU1CT0woY2ZzX2NhcF9sb3dlcik7CiBFWFBPUlRfU1lNQk9MKGNmc19jYXBfcmFpc2VkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9saW51eC9saW51eC1tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9saW51eC9saW51eC1tb2R1bGUuYwppbmRleCBlNmVhZTA2Li41ODFiNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpbnV4L2xpbnV4LW1vZHVsZS5jCkBAIC00NCwxNCArNDQsMTMgQEAKIHsKIAlzdHJ1Y3QgbGliY2ZzX2lvY3RsX2hkciAgICpoZHI7CiAJc3RydWN0IGxpYmNmc19pb2N0bF9kYXRhICAqZGF0YTsKLQlpbnQgZXJyOworCWludCBvcmlnX2xlbjsKIAogCWhkciA9IChzdHJ1Y3QgbGliY2ZzX2lvY3RsX2hkciAqKWJ1ZjsKIAlkYXRhID0gKHN0cnVjdCBsaWJjZnNfaW9jdGxfZGF0YSAqKWJ1ZjsKIAotCWVyciA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgKHZvaWQgKilhcmcsIHNpemVvZigqaGRyKSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAodm9pZCAqKWFyZywgc2l6ZW9mKCpoZHIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoaGRyLT5pb2NfdmVyc2lvbiAhPSBMSUJDRlNfSU9DVExfVkVSU0lPTikgewogCQlDRVJST1IoIlBPUlRBTFM6IHZlcnNpb24gbWlzbWF0Y2gga2VybmVsIHZzIGFwcGxpY2F0aW9uXG4iKTsKQEAgLTY5LDkgKzY4LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWVyciA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgKHZvaWQgKilhcmcsIGhkci0+aW9jX2xlbik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlvcmlnX2xlbiA9IGhkci0+aW9jX2xlbjsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAodm9pZCAqKWFyZywgaGRyLT5pb2NfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKG9yaWdfbGVuICE9IGRhdGEtPmlvY19sZW4pCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGxpYmNmc19pb2N0bF9pc19pbnZhbGlkKGRhdGEpKSB7CiAJCUNFUlJPUigiUE9SVEFMUzogaW9jdGwgbm90IGNvcnJlY3RseSBmb3JtYXR0ZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL2xpbnV4L2xpbnV4LXRjcGlwLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtdGNwaXAuYwppbmRleCA3NTM5ZmUxLi5hYzNhNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtdGNwaXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbGludXgvbGludXgtdGNwaXAuYwpAQCAtNDYsMzEgKzQ2LDE2IEBACiBpbnQKIGxpYmNmc19zb2NrX2lvY3RsKGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCW1tX3NlZ21lbnRfdCAgICBvbGRtbSA9IGdldF9mcygpOwogCXN0cnVjdCBzb2NrZXQgICpzb2NrOwogCWludAkgICAgIHJjOwotCXN0cnVjdCBmaWxlICAgICpzb2NrX2ZpbHA7CiAKIAlyYyA9IHNvY2tfY3JlYXRlIChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCwgJnNvY2spOwogCWlmIChyYyAhPSAwKSB7CiAJCUNFUlJPUiAoIkNhbid0IGNyZWF0ZSBzb2NrZXQ6ICVkXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9Ci0KLQlzb2NrX2ZpbHAgPSBzb2NrX2FsbG9jX2ZpbGUoc29jaywgMCwgTlVMTCk7Ci0JaWYgKElTX0VSUihzb2NrX2ZpbHApKSB7Ci0JCXNvY2tfcmVsZWFzZShzb2NrKTsKLQkJcmMgPSBQVFJfRVJSKHNvY2tfZmlscCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNldF9mcyhLRVJORUxfRFMpOwotCWlmIChzb2NrX2ZpbHAtPmZfb3AtPnVubG9ja2VkX2lvY3RsKQotCQlyYyA9IHNvY2tfZmlscC0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwoc29ja19maWxwLCBjbWQsIGFyZyk7Ci0Jc2V0X2ZzKG9sZG1tKTsKLQotCWZwdXQoc29ja19maWxwKTsKLW91dDoKKwlyYyA9IGtlcm5lbF9zb2NrX2lvY3RsKHNvY2ssIGNtZCwgYXJnKTsKKwlzb2NrX3JlbGVhc2Uoc29jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yNTUsNyArMjQwLDYgQEAKIGxpYmNmc19zb2NrX3dyaXRlIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB2b2lkICpidWZmZXIsIGludCBub2IsIGludCB0aW1lb3V0KQogewogCWludAkgICAgcmM7Ci0JbW1fc2VnbWVudF90ICAgb2xkbW0gPSBnZXRfZnMoKTsKIAlsb25nCSAgIHRpY2tzID0gdGltZW91dCAqIEhaOwogCXVuc2lnbmVkIGxvbmcgIHRoZW47CiAJc3RydWN0IHRpbWV2YWwgdHY7CkBAIC0yNzksMTAgKzI2Myw4IEBACiAJCQkJLnR2X3NlYyA9IHRpY2tzIC8gSFosCiAJCQkJLnR2X3VzZWMgPSAoKHRpY2tzICUgSFopICogMTAwMDAwMCkgLyBIWgogCQkJfTsKLQkJCXNldF9mcyhLRVJORUxfRFMpOwotCQkJcmMgPSBzb2NrX3NldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fU05EVElNRU8sCisJCQlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NORFRJTUVPLAogCQkJCQkgICAgIChjaGFyICopJnR2LCBzaXplb2YodHYpKTsKLQkJCXNldF9mcyhvbGRtbSk7CiAJCQlpZiAocmMgIT0gMCkgewogCQkJCUNFUlJPUigiQ2FuJ3Qgc2V0IHNvY2tldCBzZW5kIHRpbWVvdXQgIgogCQkJCSAgICAgICAiJWxkLiUwNmQ6ICVkXG4iLApAQCAtMzIxLDcgKzMwMyw2IEBACiBsaWJjZnNfc29ja19yZWFkIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB2b2lkICpidWZmZXIsIGludCBub2IsIGludCB0aW1lb3V0KQogewogCWludAkgICAgcmM7Ci0JbW1fc2VnbWVudF90ICAgb2xkbW0gPSBnZXRfZnMoKTsKIAlsb25nCSAgIHRpY2tzID0gdGltZW91dCAqIEhaOwogCXVuc2lnbmVkIGxvbmcgIHRoZW47CiAJc3RydWN0IHRpbWV2YWwgdHY7CkBAIC0zNDMsMTAgKzMyNCw4IEBACiAJCQkudHZfc2VjID0gdGlja3MgLyBIWiwKIAkJCS50dl91c2VjID0gKCh0aWNrcyAlIEhaKSAqIDEwMDAwMDApIC8gSFoKIAkJfTsKLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCXJjID0gc29ja19zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLAorCQlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLAogCQkJCSAgICAgKGNoYXIgKikmdHYsIHNpemVvZih0dikpOwotCQlzZXRfZnMob2xkbW0pOwogCQlpZiAocmMgIT0gMCkgewogCQkJQ0VSUk9SKCJDYW4ndCBzZXQgc29ja2V0IHJlY3YgdGltZW91dCAlbGQuJTA2ZDogJWRcbiIsCiAJCQkgICAgICAgKGxvbmcpdHYudHZfc2VjLCAoaW50KXR2LnR2X3VzZWMsIHJjKTsKQEAgLTM4NCw3ICszNjMsNiBAQAogCXN0cnVjdCBzb2NrZXQgICAgICAqc29jazsKIAlpbnQJCSByYzsKIAlpbnQJCSBvcHRpb247Ci0JbW1fc2VnbWVudF90CW9sZG1tID0gZ2V0X2ZzKCk7CiAKIAkvKiBBbGwgZXJyb3JzIGFyZSBmYXRhbCBleGNlcHQgYmluZCBmYWlsdXJlIGlmIHRoZSBwb3J0IGlzIGluIHVzZSAqLwogCSpmYXRhbCA9IDE7CkBAIC0zOTYsMTEgKzM3NCw5IEBACiAJCXJldHVybiAocmMpOwogCX0KIAotCXNldF9mcyAoS0VSTkVMX0RTKTsKIAlvcHRpb24gPSAxOwotCXJjID0gc29ja19zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKwlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKIAkJCSAgICAgKGNoYXIgKikmb3B0aW9uLCBzaXplb2YgKG9wdGlvbikpOwotCXNldF9mcyAob2xkbW0pOwogCWlmIChyYyAhPSAwKSB7CiAJCUNFUlJPUigiQ2FuJ3Qgc2V0IFNPX1JFVVNFQUREUiBmb3Igc29ja2V0OiAlZFxuIiwgcmMpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTQzNywxNiArNDEzLDEzIEBACiBpbnQKIGxpYmNmc19zb2NrX3NldGJ1ZiAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR4YnVmc2l6ZSwgaW50IHJ4YnVmc2l6ZSkKIHsKLQltbV9zZWdtZW50X3QJb2xkbW0gPSBnZXRfZnMoKTsKIAlpbnQJCSBvcHRpb247CiAJaW50CQkgcmM7CiAKIAlpZiAodHhidWZzaXplICE9IDApIHsKIAkJb3B0aW9uID0gdHhidWZzaXplOwotCQlzZXRfZnMgKEtFUk5FTF9EUyk7Ci0JCXJjID0gc29ja19zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwKKwkJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYsCiAJCQkJICAgICAoY2hhciAqKSZvcHRpb24sIHNpemVvZiAob3B0aW9uKSk7Ci0JCXNldF9mcyAob2xkbW0pOwogCQlpZiAocmMgIT0gMCkgewogCQkJQ0VSUk9SICgiQ2FuJ3Qgc2V0IHNlbmQgYnVmZmVyICVkOiAlZFxuIiwKIAkJCQlvcHRpb24sIHJjKTsKQEAgLTQ1NiwxMCArNDI5LDggQEAKIAogCWlmIChyeGJ1ZnNpemUgIT0gMCkgewogCQlvcHRpb24gPSByeGJ1ZnNpemU7Ci0JCXNldF9mcyAoS0VSTkVMX0RTKTsKLQkJcmMgPSBzb2NrX3NldHNvY2tvcHQgKHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKKwkJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsCiAJCQkJICAgICAgKGNoYXIgKikmb3B0aW9uLCBzaXplb2YgKG9wdGlvbikpOwotCQlzZXRfZnMgKG9sZG1tKTsKIAkJaWYgKHJjICE9IDApIHsKIAkJCUNFUlJPUiAoIkNhbid0IHNldCByZWNlaXZlIGJ1ZmZlciAlZDogJWRcbiIsCiAJCQkJb3B0aW9uLCByYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbW9kdWxlLmMKaW5kZXggMjRhZTI2ZC4uYjE2ZWUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9tb2R1bGUuYwpAQCAtODcsNyArODcsOCBAQAogfQogCiBpbnQKLWtwb3J0YWxfbWVtaG9nX2FsbG9jIChzdHJ1Y3QgbGliY2ZzX2RldmljZV91c2Vyc3RhdGUgKmxkdSwgaW50IG5wYWdlcywgaW50IGZsYWdzKQora3BvcnRhbF9tZW1ob2dfYWxsb2Moc3RydWN0IGxpYmNmc19kZXZpY2VfdXNlcnN0YXRlICpsZHUsIGludCBucGFnZXMsCisJCSAgICAgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHBhZ2UgKipsZXZlbDBwOwogCXN0cnVjdCBwYWdlICoqbGV2ZWwxcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9uaWRzdHJpbmdzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbmlkc3RyaW5ncy5jCmluZGV4IGNmYjI3NGYuLjg3NzA1YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9uaWRzdHJpbmdzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL25pZHN0cmluZ3MuYwpAQCAtMjI3LDExICsyMjcsMTEgQEAKIGludAogbGliY2ZzX2lwX3N0cjJhZGRyKGNvbnN0IGNoYXIgKnN0ciwgaW50IG5vYiwgX191MzIgKmFkZHIpCiB7Ci0JaW50ICAgYTsKLQlpbnQgICBiOwotCWludCAgIGM7Ci0JaW50ICAgZDsKLQlpbnQgICBuID0gbm9iOwkJCSAgLyogWHNjYW5mWCAqLworCXVuc2lnbmVkIGludAlhOworCXVuc2lnbmVkIGludAliOworCXVuc2lnbmVkIGludAljOworCXVuc2lnbmVkIGludAlkOworCWludAkJbiA9IG5vYjsgLyogWHNjYW5mWCAqLwogCiAJLyogbnVtZXJpYyBJUD8gKi8KIAlpZiAoc3NjYW5mKHN0ciwgIiV1LiV1LiV1LiV1JW4iLCAmYSwgJmIsICZjLCAmZCwgJm4pID49IDQgJiYKQEAgLTQxOSw3ICs0MTksNyBAQAogewogCXN0cnVjdCBuZXRzdHJmbnMgKnVuaW5pdGlhbGl6ZWRfdmFyKG5mKTsKIAlpbnQJICAgICAgIG5vYjsKLQlpbnQJICAgICAgIG5ldG51bTsKKwl1bnNpZ25lZCBpbnQgICBuZXRudW07CiAJaW50CSAgICAgICBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxpYmNmc19ubmV0c3RyZm5zOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy90cmFjZWZpbGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy90cmFjZWZpbGUuYwppbmRleCBjODU5OWVlLi4wNzg0NWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvdHJhY2VmaWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL3RyYWNlZmlsZS5jCkBAIC02Niw3ICs2Niw3IEBACiAJcmV0dXJuIGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGNmc190cmFjZV9wYWdlLCBsaW5rYWdlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjZnNfdHJhY2VfcGFnZSAqY2ZzX3RhZ2VfYWxsb2MoaW50IGdmcCkKK3N0YXRpYyBzdHJ1Y3QgY2ZzX3RyYWNlX3BhZ2UgKmNmc190YWdlX2FsbG9jKGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgcGFnZQkgICAgKnBhZ2U7CiAJc3RydWN0IGNmc190cmFjZV9wYWdlICp0YWdlOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJbGlzdF9tb3ZlX3RhaWwoJnRhZ2UtPmxpbmthZ2UsIHF1ZXVlKTsKIH0KIAotaW50IGNmc190cmFjZV9yZWZpbGxfc3RvY2soc3RydWN0IGNmc190cmFjZV9jcHVfZGF0YSAqdGNkLCBpbnQgZ2ZwLAoraW50IGNmc190cmFjZV9yZWZpbGxfc3RvY2soc3RydWN0IGNmc190cmFjZV9jcHVfZGF0YSAqdGNkLCBnZnBfdCBnZnAsCiAJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpzdG9jaykKIHsKIAlpbnQgaTsKQEAgLTQxNiwxMyArNDE2LDEzIEBACiAJCQljZGxzLT5jZGxzX2RlbGF5IC89IGxpYmNmc19jb25zb2xlX2JhY2tvZmYgKiA0OwogCQl9IGVsc2UgewogCQkJY2Rscy0+Y2Rsc19kZWxheSAqPSBsaWJjZnNfY29uc29sZV9iYWNrb2ZmOwotCi0JCQlpZiAoY2Rscy0+Y2Rsc19kZWxheSA8IGxpYmNmc19jb25zb2xlX21pbl9kZWxheSkKLQkJCQljZGxzLT5jZGxzX2RlbGF5ID0gbGliY2ZzX2NvbnNvbGVfbWluX2RlbGF5OwotCQkJZWxzZSBpZiAoY2Rscy0+Y2Rsc19kZWxheSA+IGxpYmNmc19jb25zb2xlX21heF9kZWxheSkKLQkJCQljZGxzLT5jZGxzX2RlbGF5ID0gbGliY2ZzX2NvbnNvbGVfbWF4X2RlbGF5OwogCQl9CiAKKwkJaWYgKGNkbHMtPmNkbHNfZGVsYXkgPCBsaWJjZnNfY29uc29sZV9taW5fZGVsYXkpCisJCQljZGxzLT5jZGxzX2RlbGF5ID0gbGliY2ZzX2NvbnNvbGVfbWluX2RlbGF5OworCQllbHNlIGlmIChjZGxzLT5jZGxzX2RlbGF5ID4gbGliY2ZzX2NvbnNvbGVfbWF4X2RlbGF5KQorCQkJY2Rscy0+Y2Rsc19kZWxheSA9IGxpYmNmc19jb25zb2xlX21heF9kZWxheTsKKwogCQkvKiBlbnN1cmUgY2Rsc19uZXh0IGlzIG5ldmVyIHplcm8gYWZ0ZXIgaXQncyBiZWVuIHNlZW4gKi8KIAkJY2Rscy0+Y2Rsc19uZXh0ID0gKGNmc190aW1lX2N1cnJlbnQoKSArIGNkbHMtPmNkbHNfZGVsYXkpIHwgMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvdHJhY2VmaWxlLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvdHJhY2VmaWxlLmgKaW5kZXggN2U4ZDE3Yy4uNTVlY2ZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL3RyYWNlZmlsZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy90cmFjZWZpbGUuaApAQCAtMzA3LDcgKzMwNyw3IEBACiAJcHV0X2NwdSgpOwogfQogCi1pbnQgY2ZzX3RyYWNlX3JlZmlsbF9zdG9jayhzdHJ1Y3QgY2ZzX3RyYWNlX2NwdV9kYXRhICp0Y2QsIGludCBnZnAsCitpbnQgY2ZzX3RyYWNlX3JlZmlsbF9zdG9jayhzdHJ1Y3QgY2ZzX3RyYWNlX2NwdV9kYXRhICp0Y2QsIGdmcF90IGdmcCwKIAkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnN0b2NrKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvd29ya2l0ZW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy93b3JraXRlbS5jCmluZGV4IGJhMTZmZDUuLjBhMDNiZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy93b3JraXRlbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy93b3JraXRlbS5jCkBAIC03NSw3ICs3NSw3IEBACiAJY2hhcgkJCXdzX25hbWVbQ0ZTX1dTX05BTUVfTEVOXTsKIH0gY2ZzX3dpX3NjaGVkX3Q7CiAKLXN0cnVjdCBjZnNfd29ya2l0ZW1fZGF0YSB7CitzdGF0aWMgc3RydWN0IGNmc193b3JraXRlbV9kYXRhIHsKIAkvKiogc2VyaWFsaXplICovCiAJc3BpbmxvY2tfdAkJd2lfZ2xvY2s7CiAJLyoqIGxpc3Qgb2YgYWxsIHNjaGVkdWxlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2RjYWNoZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGNhY2hlLmMKaW5kZXggOGI1NTA4MC4uN2Q1MjBkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGNhY2hlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGNhY2hlLmMKQEAgLTY5LDggKzY5LDcgQEAKIAkJbGxfaW50ZW50X3JlbGVhc2UobGxkLT5sbGRfaXQpOwogCQlPQkRfRlJFRShsbGQtPmxsZF9pdCwgc2l6ZW9mKCpsbGQtPmxsZF9pdCkpOwogCX0KLQlMQVNTRVJUKGxsZC0+bGxkX2N3ZF9jb3VudCA9PSAwKTsKLQlMQVNTRVJUKGxsZC0+bGxkX21udF9jb3VudCA9PSAwKTsKKwogCWRlLT5kX2ZzZGF0YSA9IE5VTEw7CiAJY2FsbF9yY3UoJmxsZC0+bGxkX3JjdV9oZWFkLCBmcmVlX2RlbnRyeV9kYXRhKTsKIH0KQEAgLTgyLDggKzgxLDkgQEAKICAqIGFuIEFTVCBiZWZvcmUgY2FsbGluZyBkX3JldmFsaWRhdGVfaXQoKS4gIFRoZSBkZW50cnkgc3RpbGwgZXhpc3RzIChtYXJrZWQKICAqIElOVkFMSUQpIHNvIGRfbG9va3VwKCkgbWF0Y2hlcyBpdCwgYnV0IHdlIGhhdmUgbm8gbG9jayBvbiBpdCAoc28KICAqIGxvY2tfbWF0Y2goKSBmYWlscykgYW5kIHdlIHNwaW4gYXJvdW5kIHJlYWxfbG9va3VwKCkuICovCi1pbnQgbGxfZGNvbXBhcmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCitzdGF0aWMgaW50IGxsX2Rjb21wYXJlKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7CiAJaWYgKGxlbiAhPSBuYW1lLT5sZW4pCiAJCXJldHVybiAxOwpAQCAtMjM4LDcgKzIzOCw4IEBACiAJbGxfaW50ZW50X2Ryb3BfbG9jayhpdCk7CiAJLyogV2UgYXJlIHN0aWxsIGhvbGRpbmcgZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmVxdWVzdCwgbmVlZCB0byBmcmVlIGl0ICovCiAJaWYgKGl0X2Rpc3Bvc2l0aW9uKGl0LCBESVNQX0VOUV9PUEVOX1JFRikpCi0JCSBwdGxycGNfcmVxX2ZpbmlzaGVkKGl0LT5kLmx1c3RyZS5pdF9kYXRhKTsgLyogbGxfZmlsZV9vcGVuICovCisJCXB0bHJwY19yZXFfZmluaXNoZWQoaXQtPmQubHVzdHJlLml0X2RhdGEpOyAvKiBsbF9maWxlX29wZW4gKi8KKwogCWlmIChpdF9kaXNwb3NpdGlvbihpdCwgRElTUF9FTlFfQ1JFQVRFX1JFRikpIC8qIGNyZWF0ZSByZWMgKi8KIAkJcHRscnBjX3JlcV9maW5pc2hlZChpdC0+ZC5sdXN0cmUuaXRfZGF0YSk7CiAKQEAgLTMxNiwxNSArMzE3LDYgQEAKIAl9CiB9CiAKLXZvaWQgbGxfZnJvYl9pbnRlbnQoc3RydWN0IGxvb2t1cF9pbnRlbnQgKippdHAsIHN0cnVjdCBsb29rdXBfaW50ZW50ICpkZWZ0KQotewotCXN0cnVjdCBsb29rdXBfaW50ZW50ICppdCA9ICppdHA7Ci0KLQlpZiAoIWl0IHx8IGl0LT5pdF9vcCA9PSBJVF9HRVRYQVRUUikKLQkJaXQgPSAqaXRwID0gZGVmdDsKLQotfQotCiBzdGF0aWMgaW50IGxsX3JldmFsaWRhdGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQl1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzKQogewpAQCAtMzU2LDcgKzM0OCw3IEBACiAvKgogICogQWx3YXlzIHRydXN0IGNhY2hlZCBkZW50cmllcy4gVXBkYXRlIHN0YXRhaGVhZCB3aW5kb3cgaWYgbmVjZXNzYXJ5LgogICovCi1pbnQgbGxfcmV2YWxpZGF0ZV9uZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyBpbnQgbGxfcmV2YWxpZGF0ZV9uZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmM7CiAKQEAgLTM2OCw3ICszNjAsNyBAQAogfQogCiAKLXZvaWQgbGxfZF9pcHV0KHN0cnVjdCBkZW50cnkgKmRlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgbGxfZF9pcHV0KHN0cnVjdCBkZW50cnkgKmRlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCUxBU1NFUlQoaW5vZGUpOwogCWlmICghZmluZF9jYmRhdGEoaW5vZGUpKQpAQCAtMzc2LDcgKzM2OCw3IEBACiAJaXB1dChpbm9kZSk7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBsbF9kX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBsbF9kX29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gbGxfcmV2YWxpZGF0ZV9uZCwKIAkuZF9yZWxlYXNlID0gbGxfcmVsZWFzZSwKIAkuZF9kZWxldGUgID0gbGxfZGRlbGV0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2Rpci5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGlyLmMKaW5kZXggN2ZiYzE4ZS4uYWU2ZjYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGlyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGlyLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGxsX3NlbmRfbWdjX3BhcmFtKHN0cnVjdCBvYmRfZXhwb3J0ICptZ2MsIGNoYXIgKnN0cmluZykKK3N0YXRpYyBpbnQgbGxfc2VuZF9tZ2NfcGFyYW0oc3RydWN0IG9iZF9leHBvcnQgKm1nYywgY2hhciAqc3RyaW5nKQogewogCXN0cnVjdCBtZ3Nfc2VuZF9wYXJhbSAqbXNwOwogCWludCByYyA9IDA7CkBAIC03OTUsNyArNzk1LDcgQEAKIAlpbnQgcmMsIGxtbXNpemU7CiAJc3RydWN0IG1kX29wX2RhdGEgKm9wX2RhdGE7CiAKLQlyYyA9IGxsX2dldF9tYXhfbWRzaXplKHNiaSwgJmxtbXNpemUpOworCXJjID0gbGxfZ2V0X2RlZmF1bHRfbWRzaXplKHNiaSwgJmxtbXNpemUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xODA0LDYgKzE4MDQsMTEgQEAKIAkJLyogQ29tcHV0ZSB0aGUgd2hvbGUgc3RydWN0IHNpemUgKi8KIAkJdG90YWxzaXplID0gaHVyX2xlbihodXIpOwogCQlPQkRfRlJFRV9QVFIoaHVyKTsKKworCQkvKiBGaW5hbCBzaXplIHdpbGwgYmUgbW9yZSB0aGFuIGRvdWJsZSB0b3RhbHNpemUgKi8KKwkJaWYgKHRvdGFsc2l6ZSA+PSBNRFNfTUFYUkVRU0laRSAvIDMpCisJCQlyZXR1cm4gLUUyQklHOworCiAJCU9CRF9BTExPQ19MQVJHRShodXIsIHRvdGFsc2l6ZSk7CiAJCWlmIChodXIgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTk1OSwxNyArMTk2NCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBsbF9kaXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgbGxfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIGxsX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKLWludCBsbF9kaXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgbGxfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIGxsX2ZpbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGxfZGlyX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX2Rpcl9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgICA9IGxsX2Rpcl9zZWVrLAogCS5vcGVuICAgICA9IGxsX2Rpcl9vcGVuLAogCS5yZWxlYXNlICA9IGxsX2Rpcl9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZmlsZS5jCmluZGV4IDhlODQ0YTYuLmM0ZGRlYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2ZpbGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9maWxlLmMKQEAgLTUwLDExICs1MCwyMSBAQAogCiAjaW5jbHVkZSAiY2xfb2JqZWN0LmgiCiAKLXN0cnVjdCBsbF9maWxlX2RhdGEgKmxsX2ZpbGVfZGF0YV9nZXQodm9pZCkKK3N0YXRpYyBpbnQKK2xsX3B1dF9ncm91cGxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworc3RhdGljIGludCBsbF9sZWFzZV9jbG9zZShzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKm9jaCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgYm9vbCAqbGVhc2VfYnJva2VuKTsKKworc3RhdGljIGVudW0gbGxpb2NfaXRlcgorbGxfaW9jb250cm9sX2NhbGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCAqcmNwKTsKKworc3RhdGljIHN0cnVjdCBsbF9maWxlX2RhdGEgKmxsX2ZpbGVfZGF0YV9nZXQodm9pZCkKIHsKIAlzdHJ1Y3QgbGxfZmlsZV9kYXRhICpmZDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoZmQsIGxsX2ZpbGVfZGF0YV9zbGFiLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChmZCwgbGxfZmlsZV9kYXRhX3NsYWIsIEdGUF9OT0ZTKTsKIAlpZiAoZmQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZmQtPmZkX3dyaXRlX2ZhaWxlZCA9IGZhbHNlOwpAQCAtMjQ3LDggKzI1Nyw4IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgbGxfbWRfY2xvc2Uoc3RydWN0IG9iZF9leHBvcnQgKm1kX2V4cCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGxsX21kX2Nsb3NlKHN0cnVjdCBvYmRfZXhwb3J0ICptZF9leHAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgbGxfZmlsZV9kYXRhICpmZCA9IExVU1RSRV9GUFJJVkFURShmaWxlKTsKIAlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpID0gbGxfaTJpbmZvKGlub2RlKTsKQEAgLTQ4Miw4ICs0OTIsOCBAQAogCXJldHVybiBtZF9zZXRfb3Blbl9yZXBsYXlfZGF0YShtZF9leHAsIG9jaCwgaXQpOwogfQogCi1pbnQgbGxfbG9jYWxfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0LAotCQkgIHN0cnVjdCBsbF9maWxlX2RhdGEgKmZkLCBzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKm9jaCkKK3N0YXRpYyBpbnQgbGxfbG9jYWxfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0LAorCQkJIHN0cnVjdCBsbF9maWxlX2RhdGEgKmZkLCBzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKm9jaCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhpbm9kZSk7CkBAIC03MzMsOCArNzQzLDkgQEAKIC8qKgogICogQWNxdWlyZSBhIGxlYXNlIGFuZCBvcGVuIHRoZSBmaWxlLgogICovCi1zdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKmxsX2xlYXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWZtb2RlX3QgZm1vZGUsIF9fdTY0IG9wZW5fZmxhZ3MpCitzdGF0aWMgc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICoKK2xsX2xlYXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGZtb2RlX3QgZm1vZGUsCisJICAgICAgX191NjQgb3Blbl9mbGFncykKIHsKIAlzdHJ1Y3QgbG9va3VwX2ludGVudCBpdCA9IHsgLml0X29wID0gSVRfT1BFTiB9OwogCXN0cnVjdCBsbF9zYl9pbmZvICpzYmkgPSBsbF9pMnNiaShpbm9kZSk7CkBAIC04NjIsMTQgKzg3MywxMyBAQAogCU9CRF9GUkVFX1BUUihvY2gpOwogCXJldHVybiBFUlJfUFRSKHJjKTsKIH0KLUVYUE9SVF9TWU1CT0wobGxfbGVhc2Vfb3Blbik7CiAKIC8qKgogICogUmVsZWFzZSBsZWFzZSBhbmQgY2xvc2UgdGhlIGZpbGUuCiAgKiBJdCB3aWxsIGNoZWNrIGlmIHRoZSBsZWFzZSBoYXMgZXZlciBicm9rZW4uCiAgKi8KLWludCBsbF9sZWFzZV9jbG9zZShzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKm9jaCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCWJvb2wgKmxlYXNlX2Jyb2tlbikKK3N0YXRpYyBpbnQgbGxfbGVhc2VfY2xvc2Uoc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICpvY2gsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgIGJvb2wgKmxlYXNlX2Jyb2tlbikKIHsKIAlzdHJ1Y3QgbGRsbV9sb2NrICpsb2NrOwogCWJvb2wgY2FuY2VsbGVkID0gdHJ1ZTsKQEAgLTg5NSw3ICs5MDUsNiBAQAogCQkJCSAgICAgICBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MKGxsX2xlYXNlX2Nsb3NlKTsKIAogLyogRmlsbHMgdGhlIG9iZG8gd2l0aCB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIGxzbSAqLwogc3RhdGljIGludCBsbF9sc21fZ2V0YXR0cihzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLCBzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLApAQCAtMTQ0MCw3ICsxNDQ5LDcgQEAKIAlzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YTsKIAlpbnQgcmMsIGxtbXNpemU7CiAKLQlyYyA9IGxsX2dldF9tYXhfbWRzaXplKHNiaSwgJmxtbXNpemUpOworCXJjID0gbGxfZ2V0X2RlZmF1bHRfbWRzaXplKHNiaSwgJmxtbXNpemUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xNTkwLDcgKzE1OTksOCBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGxsX2dldF9ncm91cGxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludAorbGxfZ2V0X2dyb3VwbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGxsX2lub2RlX2luZm8gICAqbGxpID0gbGxfaTJpbmZvKGlub2RlKTsKIAlzdHJ1Y3QgbGxfZmlsZV9kYXRhICAgICpmZCA9IExVU1RSRV9GUFJJVkFURShmaWxlKTsKQEAgLTE3MTAsMTMgKzE3MjAsMTMgQEAKICAqIEdldCBzaXplIGZvciBpbm9kZSBmb3Igd2hpY2ggRklFTUFQIG1hcHBpbmcgaXMgcmVxdWVzdGVkLgogICogTWFrZSB0aGUgRklFTUFQIGdldF9pbmZvIGNhbGwgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KICAqLwotaW50IGxsX2RvX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGxfdXNlcl9maWVtYXAgKmZpZW1hcCwKLQkgICAgICBpbnQgbnVtX2J5dGVzKQorc3RhdGljIGludCBsbF9kb19maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxsX3VzZXJfZmllbWFwICpmaWVtYXAsCisJCQlzaXplX3QgbnVtX2J5dGVzKQogewogCXN0cnVjdCBvYmRfZXhwb3J0ICpleHAgPSBsbF9pMmR0ZXhwKGlub2RlKTsKIAlzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtID0gTlVMTDsKIAlzdHJ1Y3QgbGxfZmllbWFwX2luZm9fa2V5IGZtX2tleSA9IHsgLm5hbWUgPSBLRVlfRklFTUFQLCB9OwotCWludCB2YWxsZW4gPSBudW1fYnl0ZXM7CisJX191MzIgdmFsbGVuID0gbnVtX2J5dGVzOwogCWludCByYzsKIAogCS8qIENoZWNrcyBmb3IgZmllbWFwIGZsYWdzICovCkBAIC0xODE5LDYgKzE4MjksMTAgQEAKIAlpZiAoZ2V0X3VzZXIoZXh0ZW50X2NvdW50LAogCSAgICAmKChzdHJ1Y3QgbGxfdXNlcl9maWVtYXAgX191c2VyICopYXJnKS0+Zm1fZXh0ZW50X2NvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZXh0ZW50X2NvdW50ID49CisJICAgIChTSVpFX01BWCAtIHNpemVvZigqZmllbWFwX3MpKSAvIHNpemVvZihzdHJ1Y3QgbGxfZmllbWFwX2V4dGVudCkpCisJCXJldHVybiAtRUlOVkFMOwogCW51bV9ieXRlcyA9IHNpemVvZigqZmllbWFwX3MpICsgKGV4dGVudF9jb3VudCAqCiAJCQkJCSBzaXplb2Yoc3RydWN0IGxsX2ZpZW1hcF9leHRlbnQpKTsKIApAQCAtMjE5MCw3ICsyMjA0LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWxvbmcgbGxfZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZworbGxfZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbGxfZmlsZV9kYXRhCSpmZCA9IExVU1RSRV9GUFJJVkFURShmaWxlKTsKQEAgLTI1MDksNyArMjUyNCw3IEBACiB9CiAKIAotbG9mZl90IGxsX2ZpbGVfc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3N0YXRpYyBsb2ZmX3QgbGxfZmlsZV9zZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlsb2ZmX3QgcmV0dmFsLCBlb2YgPSAwOwpAQCAtMjUzMyw3ICsyNTQ4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgbGxfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgaWQpCitzdGF0aWMgaW50IGxsX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IGlkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpID0gbGxfaTJpbmZvKGlub2RlKTsKQEAgLTI1NTksNyArMjU3NCw3IEBACiAKIC8qKgogICogQ2FsbGVkIHRvIG1ha2Ugc3VyZSBhIHBvcnRpb24gb2YgZmlsZSBoYXMgYmVlbiB3cml0dGVuIG91dC4KLSAqIGlmIEBsb2NhbF9vbmx5IGlzIG5vdCB0cnVlLCBpdCB3aWxsIHNlbmQgT1NUX1NZTkMgUlBDcyB0byBvc3QuCisgKiBpZiBAbW9kZSBpcyBub3QgQ0xfRlNZTkNfTE9DQUwsIGl0IHdpbGwgc2VuZCBPU1RfU1lOQyBSUENzIHRvIE9TVC4KICAqCiAgKiBSZXR1cm4gaG93IG1hbnkgcGFnZXMgaGF2ZSBiZWVuIHdyaXR0ZW4uCiAgKi8KQEAgLTI2NTMsMTEgKzI2NjgsMTAgQEAKIAlpZiAoIWVycikKIAkJcHRscnBjX3JlcV9maW5pc2hlZChyZXEpOwogCi0JaWYgKGRhdGFzeW5jICYmIFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQlzdHJ1Y3QgbGxfZmlsZV9kYXRhICpmZCA9IExVU1RSRV9GUFJJVkFURShmaWxlKTsKIAotCQllcnIgPSBjbF9zeW5jX2ZpbGVfcmFuZ2UoaW5vZGUsIDAsIE9CRF9PQkpFQ1RfRU9GLAotCQkJCUNMX0ZTWU5DX0FMTCwgMCk7CisJCWVyciA9IGNsX3N5bmNfZmlsZV9yYW5nZShpbm9kZSwgc3RhcnQsIGVuZCwgQ0xfRlNZTkNfQUxMLCAwKTsKIAkJaWYgKHJjID09IDAgJiYgZXJyIDwgMCkKIAkJCXJjID0gZXJyOwogCQlpZiAocmMgPCAwKQpAQCAtMjY3MCw3ICsyNjg0LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBsbF9maWxlX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2spCitzdGF0aWMgaW50CitsbF9maWxlX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2spCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBsbF9zYl9pbmZvICpzYmkgPSBsbF9pMnNiaShpbm9kZSk7CkBAIC0yNjkxLDIwICsyNzA2LDE1IEBACiAKIAlsbF9zdGF0c19vcHNfdGFsbHkobGxfaTJzYmkoaW5vZGUpLCBMUFJPQ19MTF9GTE9DSywgMSk7CiAKLQlpZiAoZmlsZV9sb2NrLT5mbF9mbGFncyAmIEZMX0ZMT0NLKSB7CisJaWYgKGZpbGVfbG9jay0+ZmxfZmxhZ3MgJiBGTF9GTE9DSykKIAkJTEFTU0VSVCgoY21kID09IEZfU0VUTEtXKSB8fCAoY21kID09IEZfU0VUTEspKTsKLQkJLyogZmxvY2tzIGFyZSB3aG9sZS1maWxlIGxvY2tzICovCi0JCWZsb2NrLmxfZmxvY2suZW5kID0gT0ZGU0VUX01BWDsKLQkJLyogRm9yIGZsb2NrcyBvd25lciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsb2NhbCBmaWxlIGRlc2NyaXB0b3IqLwotCQlmbG9jay5sX2Zsb2NrLm93bmVyID0gKHVuc2lnbmVkIGxvbmcpZmlsZV9sb2NrLT5mbF9maWxlOwotCX0gZWxzZSBpZiAoZmlsZV9sb2NrLT5mbF9mbGFncyAmIEZMX1BPU0lYKSB7Ci0JCWZsb2NrLmxfZmxvY2sub3duZXIgPSAodW5zaWduZWQgbG9uZylmaWxlX2xvY2stPmZsX293bmVyOwotCQlmbG9jay5sX2Zsb2NrLnN0YXJ0ID0gZmlsZV9sb2NrLT5mbF9zdGFydDsKLQkJZmxvY2subF9mbG9jay5lbmQgPSBmaWxlX2xvY2stPmZsX2VuZDsKLQl9IGVsc2UgeworCWVsc2UgaWYgKCEoZmlsZV9sb2NrLT5mbF9mbGFncyAmIEZMX1BPU0lYKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCisJZmxvY2subF9mbG9jay5vd25lciA9ICh1bnNpZ25lZCBsb25nKWZpbGVfbG9jay0+Zmxfb3duZXI7CiAJZmxvY2subF9mbG9jay5waWQgPSBmaWxlX2xvY2stPmZsX3BpZDsKKwlmbG9jay5sX2Zsb2NrLnN0YXJ0ID0gZmlsZV9sb2NrLT5mbF9zdGFydDsKKwlmbG9jay5sX2Zsb2NrLmVuZCA9IGZpbGVfbG9jay0+ZmxfZW5kOwogCiAJLyogU29tZXdoYXQgdWdseSB3b3JrYXJvdW5kIGZvciBzdmMgbG9ja2QuCiAJICogbG9ja2QgaW5zdGFsbHMgY3VzdG9tIGZsX2xtb3BzLT5sbV9jb21wYXJlX293bmVyIHRoYXQgY2hlY2tzCkBAIC0yNzk5LDcgKzI4MDksOCBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGxsX2ZpbGVfbm9mbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKQorc3RhdGljIGludAorbGxfZmlsZV9ub2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2spCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC0yODgyLDE2ICsyODkzLDE2IEBACiAJCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCXJldHVybiAwOwogCX0gZWxzZSBpZiAocmMgIT0gMCkgewotCQlDRVJST1IoIiVzOiByZXZhbGlkYXRlIEZJRCAiREZJRCIgZXJyb3I6IHJjID0gJWRcbiIsCi0JCSAgICAgICBsbF9nZXRfZnNuYW1lKGlub2RlLT5pX3NiLCBOVUxMLCAwKSwKLQkJICAgICAgIFBGSUQobGxfaW5vZGUyZmlkKGlub2RlKSksIHJjKTsKKwkJQ0RFQlVHX0xJTUlUKChyYyA9PSAtRUFDQ0VTIHx8IHJjID09IC1FSURSTSkgPyBEX0lORk8gOiBEX0VSUk9SLAorCQkJICAgICAiJXM6IHJldmFsaWRhdGUgRklEICJERklEIiBlcnJvcjogcmMgPSAlZFxuIiwKKwkJCSAgICAgbGxfZ2V0X2ZzbmFtZShpbm9kZS0+aV9zYiwgTlVMTCwgMCksCisJCQkgICAgIFBGSUQobGxfaW5vZGUyZmlkKGlub2RlKSksIHJjKTsKIAl9CiAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBfX2xsX2lub2RlX3JldmFsaWRhdGVfaXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbG9va3VwX2ludGVudCAqaXQsCi0JCQkgICAgIF9fdTY0IGliaXRzKQorc3RhdGljIGludCBfX2xsX2lub2RlX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX3U2NCBpYml0cykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxID0gTlVMTDsKQEAgLTI5NTYsNyArMjk2Nyw3IEBACiAJCWludCBlYWxlbiA9IDA7CiAKIAkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCXJjID0gbGxfZ2V0X21heF9tZHNpemUoc2JpLCAmZWFsZW4pOworCQkJcmMgPSBsbF9nZXRfZGVmYXVsdF9tZHNpemUoc2JpLCAmZWFsZW4pOwogCQkJaWYgKHJjKQogCQkJCXJldHVybiByYzsKIAkJCXZhbGlkIHw9IE9CRF9NRF9GTEVBU0laRSB8IE9CRF9NRF9GTE1PREVBU0laRTsKQEAgLTI5ODYsMTMgKzI5OTcsMTIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBsbF9pbm9kZV9yZXZhbGlkYXRlX2l0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0LAotCQkJICAgX191NjQgaWJpdHMpCitzdGF0aWMgaW50IGxsX2lub2RlX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX3U2NCBpYml0cykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCByYzsKIAotCXJjID0gX19sbF9pbm9kZV9yZXZhbGlkYXRlX2l0KGRlbnRyeSwgaXQsIGliaXRzKTsKKwlyYyA9IF9fbGxfaW5vZGVfcmV2YWxpZGF0ZShkZW50cnksIGliaXRzKTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCkBAIC0zMDE1LDE2ICszMDI1LDE1IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgbGxfZ2V0YXR0cl9pdChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGUsCi0JCSAgc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0LCBzdHJ1Y3Qga3N0YXQgKnN0YXQpCitpbnQgbGxfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGUtPmRfaW5vZGU7CiAJc3RydWN0IGxsX3NiX2luZm8gKnNiaSA9IGxsX2kyc2JpKGlub2RlKTsKIAlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpID0gbGxfaTJpbmZvKGlub2RlKTsKIAlpbnQgcmVzID0gMDsKIAotCXJlcyA9IGxsX2lub2RlX3JldmFsaWRhdGVfaXQoZGUsIGl0LCBNRFNfSU5PREVMT0NLX1VQREFURSB8Ci0JCQkJCSAgICAgTURTX0lOT0RFTE9DS19MT09LVVApOworCXJlcyA9IGxsX2lub2RlX3JldmFsaWRhdGUoZGUsIE1EU19JTk9ERUxPQ0tfVVBEQVRFIHwKKwkJCQkgICAgICBNRFNfSU5PREVMT0NLX0xPT0tVUCk7CiAJbGxfc3RhdHNfb3BzX3RhbGx5KHNiaSwgTFBST0NfTExfR0VUQVRUUiwgMSk7CiAKIAlpZiAocmVzKQpAQCAtMzA1MCwxNSArMzA1OSw5IEBACiAKIAlyZXR1cm4gMDsKIH0KLWludCBsbF9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZSwgc3RydWN0IGtzdGF0ICpzdGF0KQotewotCXN0cnVjdCBsb29rdXBfaW50ZW50IGl0ID0geyAuaXRfb3AgPSBJVF9HRVRBVFRSIH07CiAKLQlyZXR1cm4gbGxfZ2V0YXR0cl9pdChtbnQsIGRlLCAmaXQsIHN0YXQpOwotfQotCi1pbnQgbGxfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCi0JCV9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4pCitzdGF0aWMgaW50IGxsX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAorCQkgICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4pCiB7CiAJaW50IHJjOwogCXNpemVfdCBudW1fYnl0ZXM7CkBAIC0zMDc2LDIxICszMDc5LDI0IEBACiAJZmllbWFwLT5mbV9leHRlbnRfY291bnQgPSBmaWVpbmZvLT5maV9leHRlbnRzX21heDsKIAlmaWVtYXAtPmZtX3N0YXJ0ID0gc3RhcnQ7CiAJZmllbWFwLT5mbV9sZW5ndGggPSBsZW47Ci0JbWVtY3B5KCZmaWVtYXAtPmZtX2V4dGVudHNbMF0sIGZpZWluZm8tPmZpX2V4dGVudHNfc3RhcnQsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgbGxfZmllbWFwX2V4dGVudCkpOworCWlmIChleHRlbnRfY291bnQgPiAwKQorCQltZW1jcHkoJmZpZW1hcC0+Zm1fZXh0ZW50c1swXSwgZmllaW5mby0+ZmlfZXh0ZW50c19zdGFydCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGxfZmllbWFwX2V4dGVudCkpOwogCiAJcmMgPSBsbF9kb19maWVtYXAoaW5vZGUsIGZpZW1hcCwgbnVtX2J5dGVzKTsKIAogCWZpZWluZm8tPmZpX2ZsYWdzID0gZmllbWFwLT5mbV9mbGFnczsKIAlmaWVpbmZvLT5maV9leHRlbnRzX21hcHBlZCA9IGZpZW1hcC0+Zm1fbWFwcGVkX2V4dGVudHM7Ci0JbWVtY3B5KGZpZWluZm8tPmZpX2V4dGVudHNfc3RhcnQsICZmaWVtYXAtPmZtX2V4dGVudHNbMF0sCi0JICAgICAgIGZpZW1hcC0+Zm1fbWFwcGVkX2V4dGVudHMgKiBzaXplb2Yoc3RydWN0IGxsX2ZpZW1hcF9leHRlbnQpKTsKKwlpZiAoZXh0ZW50X2NvdW50ID4gMCkKKwkJbWVtY3B5KGZpZWluZm8tPmZpX2V4dGVudHNfc3RhcnQsICZmaWVtYXAtPmZtX2V4dGVudHNbMF0sCisJCSAgICAgICBmaWVtYXAtPmZtX21hcHBlZF9leHRlbnRzICoKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGxfZmllbWFwX2V4dGVudCkpOwogCiAJT0JEX0ZSRUVfTEFSR0UoZmllbWFwLCBudW1fYnl0ZXMpOwogCXJldHVybiByYzsKIH0KIAotc3RydWN0IHBvc2l4X2FjbCAqIGxsX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCitzdHJ1Y3QgcG9zaXhfYWNsICpsbF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewogCXN0cnVjdCBsbF9pbm9kZV9pbmZvICpsbGkgPSBsbF9pMmluZm8oaW5vZGUpOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CkBAIC0zMTE3LDEwICszMTIzLDggQEAKIAkqIG5lZWQgdG8gZG8gaXQgYmVmb3JlIHBlcm1pc3Npb24gY2hlY2suICovCiAKIAlpZiAoaW5vZGUgPT0gaW5vZGUtPmlfc2ItPnNfcm9vdC0+ZF9pbm9kZSkgewotCQlzdHJ1Y3QgbG9va3VwX2ludGVudCBpdCA9IHsgLml0X29wID0gSVRfTE9PS1VQIH07Ci0KLQkJcmMgPSBfX2xsX2lub2RlX3JldmFsaWRhdGVfaXQoaW5vZGUtPmlfc2ItPnNfcm9vdCwgJml0LAotCQkJCQkgICAgICBNRFNfSU5PREVMT0NLX0xPT0tVUCk7CisJCXJjID0gX19sbF9pbm9kZV9yZXZhbGlkYXRlKGlub2RlLT5pX3NiLT5zX3Jvb3QsCisJCQkJCSAgIE1EU19JTk9ERUxPQ0tfTE9PS1VQKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCX0KQEAgLTMyNzIsOCArMzI3Niw5IEBACiBFWFBPUlRfU1lNQk9MKGxsX2lvY29udHJvbF9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGxsX2lvY29udHJvbF91bnJlZ2lzdGVyKTsKIAotZW51bSBsbGlvY19pdGVyIGxsX2lvY29udHJvbF9jYWxsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCAqcmNwKQorc3RhdGljIGVudW0gbGxpb2NfaXRlcgorbGxfaW9jb250cm9sX2NhbGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCAqcmNwKQogewogCWVudW0gbGxpb2NfaXRlciByZXQgPSBMTElPQ19DT05UOwogCXN0cnVjdCBsbGlvY19kYXRhICpkYXRhOwpAQCAtMzM1OCw3ICszMzYzLDcgQEAKIAkgKiBsYXlvdXQgaGVyZS4gUGxlYXNlIG5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIExWQiBidWZmZXIgaW4KIAkgKiBjb21wbGV0aW9uIEFTVCBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhIGxhcmdlIGVub3VnaCBidWZmZXIgKi8KIAlvYyA9IGxsX21kc2NhcGFfZ2V0KGlub2RlKTsKLQlyYyA9IGxsX2dldF9tYXhfbWRzaXplKHNiaSwgJmxtbXNpemUpOworCXJjID0gbGxfZ2V0X2RlZmF1bHRfbWRzaXplKHNiaSwgJmxtbXNpemUpOwogCWlmIChyYyA9PSAwKQogCQlyYyA9IG1kX2dldHhhdHRyKHNiaS0+bGxfbWRfZXhwLCBsbF9pbm9kZTJmaWQoaW5vZGUpLCBvYywKIAkJCQlPQkRfTURfRkxYQVRUUiwgWEFUVFJfTkFNRV9MT1YsIE5VTEwsIDAsCkBAIC0zMzY4LDcgKzMzNzMsNyBAQAogCQlyZXR1cm4gcmM7CiAKIAlib2R5ID0gcmVxX2NhcHN1bGVfc2VydmVyX2dldCgmcmVxLT5ycV9waWxsLCAmUk1GX01EVF9CT0RZKTsKLQlpZiAoYm9keSA9PSBOVUxMIHx8IGJvZHktPmVhZGF0YXNpemUgPiBsbW1zaXplKQorCWlmIChib2R5ID09IE5VTEwpCiAJCUdPVE8ob3V0LCByYyA9IC1FUFJPVE8pOwogCiAJbG1tc2l6ZSA9IGJvZHktPmVhZGF0YXNpemU7CkBAIC0zNDM1LDcgKzM0NDAsNyBAQAogCQlpZiAobHZiX3JlYWR5KSB7CiAJCQkvKiBsYXlvdXRfZ2VuIG11c3QgYmUgdmFsaWQgaWYgbGF5b3V0IGxvY2sgaXMgbm90CiAJCQkgKiBjYW5jZWxsZWQgYW5kIHN0cmlwZSBoYXMgYWxyZWFkeSBzZXQgKi8KLQkJCSpnZW4gPSBsbGktPmxsaV9sYXlvdXRfZ2VuOworCQkJKmdlbiA9IGxsX2xheW91dF92ZXJzaW9uX2dldChsbGkpOwogCQkJcmMgPSAwOwogCQl9CiAJCUdPVE8ob3V0LCByYyk7CkBAIC0zNTMzLDMyICszNTM4LDIwIEBACiAJfTsKIAlpbnQgcmM7CiAKLQkqZ2VuID0gbGxpLT5sbGlfbGF5b3V0X2dlbjsKLQlpZiAoIShzYmktPmxsX2ZsYWdzICYgTExfU0JJX0xBWU9VVF9MT0NLKSkKKwkqZ2VuID0gbGxfbGF5b3V0X3ZlcnNpb25fZ2V0KGxsaSk7CisJaWYgKCEoc2JpLT5sbF9mbGFncyAmIExMX1NCSV9MQVlPVVRfTE9DSykgfHwgKmdlbiAhPSBMTF9MQVlPVVRfR0VOX05PTkUpCiAJCXJldHVybiAwOwogCiAJLyogc2FuaXR5IGNoZWNrcyAqLwogCUxBU1NFUlQoZmlkX2lzX3NhbmUobGxfaW5vZGUyZmlkKGlub2RlKSkpOwogCUxBU1NFUlQoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSk7CiAKLQkvKiBtb3N0bHkgbGF5b3V0IGxvY2sgaXMgY2FjaGluZyBvbiB0aGUgbG9jYWwgc2lkZSwgc28gdHJ5IHRvIG1hdGNoCi0JICogaXQgYmVmb3JlIGdyYWJiaW5nIGxheW91dCBsb2NrIG11dGV4LiAqLwotCW1vZGUgPSBsbF90YWtlX21kX2xvY2soaW5vZGUsIE1EU19JTk9ERUxPQ0tfTEFZT1VULCAmbG9ja2gsIDAsCi0JCQkgICAgICAgTENLX0NSIHwgTENLX0NXIHwgTENLX1BSIHwgTENLX1BXKTsKLQlpZiAobW9kZSAhPSAwKSB7IC8qIGhpdCBjYWNoZWQgbG9jayAqLwotCQlyYyA9IGxsX2xheW91dF9sb2NrX3NldCgmbG9ja2gsIG1vZGUsIGlub2RlLCBnZW4sIGZhbHNlKTsKLQkJaWYgKHJjID09IDApCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBiZXR0ZXIgaG9sZCBsbGlfbGF5b3V0X211dGV4IHRvIHRyeSBhZ2FpbiBvdGhlcndpc2UKLQkJICogaXQgd2lsbCBoYXZlIHN0YXJ2YXRpb24gcHJvYmxlbS4gKi8KLQl9Ci0KIAkvKiB0YWtlIGxheW91dCBsb2NrIG11dGV4IHRvIGVucXVldWUgbGF5b3V0IGxvY2sgZXhjbHVzaXZlbHkuICovCiAJbXV0ZXhfbG9jaygmbGxpLT5sbGlfbGF5b3V0X211dGV4KTsKIAogYWdhaW46Ci0JLyogdHJ5IGFnYWluLiBNYXliZSBzb21lYm9keSBlbHNlIGhhcyBkb25lIHRoaXMuICovCisJLyogbW9zdGx5IGxheW91dCBsb2NrIGlzIGNhY2hpbmcgb24gdGhlIGxvY2FsIHNpZGUsIHNvIHRyeSB0byBtYXRjaAorCSAqIGl0IGJlZm9yZSBncmFiYmluZyBsYXlvdXQgbG9jayBtdXRleC4gKi8KIAltb2RlID0gbGxfdGFrZV9tZF9sb2NrKGlub2RlLCBNRFNfSU5PREVMT0NLX0xBWU9VVCwgJmxvY2toLCAwLAogCQkJICAgICAgIExDS19DUiB8IExDS19DVyB8IExDS19QUiB8IExDS19QVyk7CiAJaWYgKG1vZGUgIT0gMCkgeyAvKiBoaXQgY2FjaGVkIGxvY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2NhcGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2NhcGEuYwppbmRleCBlZGQ1MTJiMi4uZDA2ZDBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfY2FwYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2NhcGEuYwpAQCAtNjgsNiArNjgsOCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsbF9jYXBhX3JlbmV3YWxfZmFpbGVkID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbGxfY2FwYV9yZW5ld2FsX3JldHJpZXMgPSAwOwogCitzdGF0aWMgaW50IGxsX3VwZGF0ZV9jYXBhKHN0cnVjdCBvYmRfY2FwYSAqb2NhcGEsIHN0cnVjdCBsdXN0cmVfY2FwYSAqY2FwYSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY2FwYV90aW1lcihzdHJ1Y3Qgb2JkX2NhcGEgKm9jYXBhLCBjZnNfdGltZV90IGV4cGlyeSkKIHsKIAlpZiAoY2ZzX3RpbWVfYmVmb3JlKGV4cGlyeSwgbGxfY2FwYV90aW1lci5leHBpcmVzKSB8fApAQCAtNTE1LDcgKzUxNyw3IEBACiAJb2MtPmNfZXhwaXJ5ID0gY2ZzX3RpbWVfYWRkKG9jLT5jX2V4cGlyeSwgY2ZzX3RpbWVfc2Vjb25kcyhkZWxheSkpOwogfQogCi1pbnQgbGxfdXBkYXRlX2NhcGEoc3RydWN0IG9iZF9jYXBhICpvY2FwYSwgc3RydWN0IGx1c3RyZV9jYXBhICpjYXBhKQorc3RhdGljIGludCBsbF91cGRhdGVfY2FwYShzdHJ1Y3Qgb2JkX2NhcGEgKm9jYXBhLCBzdHJ1Y3QgbHVzdHJlX2NhcGEgKmNhcGEpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG9jYXBhLT51LmNsaS5pbm9kZTsKIAlpbnQgcmMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2ludGVybmFsLmgKaW5kZXggNjlhYmEwYS4uZGRlNzYzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfaW50ZXJuYWwuaApAQCAtNzEsMTAgKzcxLDYgQEAKICNkZWZpbmUgTFVTVFJFX0ZQUklWQVRFKGZpbGUpICgoZmlsZSktPnByaXZhdGVfZGF0YSkKIAogc3RydWN0IGxsX2RlbnRyeV9kYXRhIHsKLQlpbnQJCQkJbGxkX2N3ZF9jb3VudDsKLQlpbnQJCQkJbGxkX21udF9jb3VudDsKLQlzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUJbGxkX2N3ZF9vY2g7Ci0Jc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlCWxsZF9tbnRfb2NoOwogCXN0cnVjdCBsb29rdXBfaW50ZW50CQkqbGxkX2l0OwogCXVuc2lnbmVkIGludAkJCWxsZF9zYV9nZW5lcmF0aW9uOwogCXVuc2lnbmVkIGludAkJCWxsZF9pbnZhbGlkOjE7CkBAIC04Myw4ICs3OSw2IEBACiAKICNkZWZpbmUgbGxfZDJkKGRlKSAoKHN0cnVjdCBsbF9kZW50cnlfZGF0YSopKChkZSktPmRfZnNkYXRhKSkKIAotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGxfcGdjYWNoZV9zZXFfZm9wczsKLQogI2RlZmluZSBMTElfSU5PREVfTUFHSUMJCSAweDExMWQwZGU1CiAjZGVmaW5lIExMSV9JTk9ERV9ERUFECQkgIDB4ZGVhZGQwMGQKIApAQCAtMTIwLDE2ICsxMTQsMTIgQEAKIAkvKiBTaXplb24tb24tTURTIGF0dHJpYnV0ZXMgYXJlIGNoYW5nZWQuIEFuIGF0dHJpYnV0ZSB1cGRhdGUgbmVlZHMgdG8KIAkgKiBiZSBzZW50IHRvIE1EUy4gKi8KIAlMTElGX1NPTV9ESVJUWQkgID0gKDEgPDwgMyksCi0JLyogRmlsZSBpcyBjb250ZW50ZWQgKi8KLQlMTElGX0NPTlRFTkRFRAkgID0gKDEgPDwgNCksCi0JLyogVHJ1bmNhdGUgdXNlcyBzZXJ2ZXIgbG9jayBmb3IgdGhpcyBmaWxlICovCi0JTExJRl9TUlZMT0NLCSAgICA9ICgxIDw8IDUpLAogCS8qIEZpbGUgZGF0YSBpcyBtb2RpZmllZC4gKi8KLQlMTElGX0RBVEFfTU9ESUZJRUQgICAgICA9ICgxIDw8IDYpLAorCUxMSUZfREFUQV9NT0RJRklFRCAgICAgID0gKDEgPDwgNCksCiAJLyogRmlsZSBpcyBiZWluZyByZXN0b3JlZCAqLwotCUxMSUZfRklMRV9SRVNUT1JJTkcJPSAoMSA8PCA3KSwKKwlMTElGX0ZJTEVfUkVTVE9SSU5HCT0gKDEgPDwgNSksCiAJLyogWGF0dHIgY2FjaGUgaXMgYXR0YWNoZWQgdG8gdGhlIGZpbGUgKi8KLQlMTElGX1hBVFRSX0NBQ0hFCT0gKDEgPDwgOCksCisJTExJRl9YQVRUUl9DQUNIRQk9ICgxIDw8IDYpLAogfTsKIAogc3RydWN0IGxsX2lub2RlX2luZm8gewpAQCAtMTk0LDcgKzE4NCw2IEBACiAJCQkgKiBjbGVhbnVwIHRoZSBkaXIgcmVhZGFoZWFkLiAqLwogCQkJdm9pZAkJCSAgICpkX29wZW5kaXJfa2V5OwogCQkJc3RydWN0IGxsX3N0YXRhaGVhZF9pbmZvICAgICAgICpkX3NhaTsKLQkJCXN0cnVjdCBwb3NpeF9hY2wJICAgICAgICpkX2RlZl9hY2w7CiAJCQkvKiBwcm90ZWN0IHN0YXRhaGVhZCBzdHVmZi4gKi8KIAkJCXNwaW5sb2NrX3QJCQlkX3NhX2xvY2s7CiAJCQkvKiAib3BlbmRpcl9waWQiIGlzIHRoZSB0b2tlbiB3aGVuIGxvb2t1cC9yZXZhbGlkCkBAIC0yMDUsMTQgKzE5NCwxMiBAQAogI2RlZmluZSBsbGlfcmVhZGRpcl9tdXRleCAgICAgICB1LmQuZF9yZWFkZGlyX211dGV4CiAjZGVmaW5lIGxsaV9vcGVuZGlyX2tleQkgdS5kLmRfb3BlbmRpcl9rZXkKICNkZWZpbmUgbGxpX3NhaQkJIHUuZC5kX3NhaQotI2RlZmluZSBsbGlfZGVmX2FjbAkgICAgIHUuZC5kX2RlZl9hY2wKICNkZWZpbmUgbGxpX3NhX2xvY2sJICAgICB1LmQuZF9zYV9sb2NrCiAjZGVmaW5lIGxsaV9vcGVuZGlyX3BpZAkgdS5kLmRfb3BlbmRpcl9waWQKIAogCQkvKiBmb3Igbm9uLWRpcmVjdG9yeSAqLwogCQlzdHJ1Y3QgewotCQkJc3RydWN0IHNlbWFwaG9yZQkJZl9zaXplX3NlbTsKLQkJCXZvaWQJCQkJKmZfc2l6ZV9zZW1fb3duZXI7CisJCQlzdHJ1Y3QgbXV0ZXgJCQlmX3NpemVfbXV0ZXg7CiAJCQljaGFyCQkJCSpmX3N5bWxpbmtfbmFtZTsKIAkJCV9fdTY0CQkJCWZfbWF4Ynl0ZXM7CiAJCQkvKgpAQCAtMjMzLDExICsyMjAsNiBAQAogCQkJLyogZm9yIHdyaXRlcGFnZSgpIG9ubHkgdG8gY29tbXVuaWNhdGUgdG8gZnN5bmMgKi8KIAkJCWludAkJCQlmX2FzeW5jX3JjOwogCi0JCQkvKiB2b2xhdGlsZSBmaWxlIGNyaXRlcmlhIGlzIGJhc2VkIG9uIGZpbGUgbmFtZSwgdGhpcwotCQkJICogZmxhZyBpcyB1c2VkIHRvIGtlZXAgdGhlIHRlc3QgcmVzdWx0LCBzbyB0aGUgc3RyY21wCi0JCQkgKiBpcyBkb25lIG9ubHkgb25jZQotCQkJICovCi0JCQlib29sCQkJCWZfdm9sYXRpbGU7CiAJCQkvKgogCQkJICogd2hlbmV2ZXIgYSBwcm9jZXNzIHRyeSB0byByZWFkL3dyaXRlIHRoZSBmaWxlLCB0aGUKIAkJCSAqIGpvYmlkIG9mIHRoZSBwcm9jZXNzIHdpbGwgYmUgc2F2ZWQgaGVyZSwgYW5kIGl0J2xsCkBAIC0yNDksOCArMjMxLDcgQEAKIAkJCWNoYXIJCSAgICAgZl9qb2JpZFtKT0JTVEFUU19KT0JJRF9TSVpFXTsKIAkJfSBmOwogCi0jZGVmaW5lIGxsaV9zaXplX3NlbQkgICAgdS5mLmZfc2l6ZV9zZW0KLSNkZWZpbmUgbGxpX3NpemVfc2VtX293bmVyICAgICAgdS5mLmZfc2l6ZV9zZW1fb3duZXIKKyNkZWZpbmUgbGxpX3NpemVfbXV0ZXggICAgICAgICAgdS5mLmZfc2l6ZV9tdXRleAogI2RlZmluZSBsbGlfc3ltbGlua19uYW1lCXUuZi5mX3N5bWxpbmtfbmFtZQogI2RlZmluZSBsbGlfbWF4Ynl0ZXMJICAgIHUuZi5mX21heGJ5dGVzCiAjZGVmaW5lIGxsaV90cnVuY19zZW0JICAgdS5mLmZfdHJ1bmNfc2VtCkBAIC0yNjEsNyArMjQyLDYgQEAKICNkZWZpbmUgbGxpX2FnbF9pbmRleAkJdS5mLmZfYWdsX2luZGV4CiAjZGVmaW5lIGxsaV9hc3luY19yYwkJdS5mLmZfYXN5bmNfcmMKICNkZWZpbmUgbGxpX2pvYmlkCQl1LmYuZl9qb2JpZAotI2RlZmluZSBsbGlfdm9sYXRpbGUJCXUuZi5mX3ZvbGF0aWxlCiAKIAl9IHU7CiAKQEAgLTI4MCwxNCArMjYwLDMzIEBACiAKIAkvKiBtdXRleCB0byByZXF1ZXN0IGZvciBsYXlvdXQgbG9jayBleGNsdXNpdmVseS4gKi8KIAlzdHJ1Y3QgbXV0ZXgJCQlsbGlfbGF5b3V0X211dGV4OwotCS8qIHZhbGlkIG9ubHkgaW5zaWRlIExBWU9VVCBpYml0cyBsb2NrLCBwcm90ZWN0ZWQgYnkgbGxpX2xheW91dF9tdXRleCAqLworCS8qIExheW91dCB2ZXJzaW9uLCBwcm90ZWN0ZWQgYnkgbGxpX2xheW91dF9sb2NrICovCiAJX191MzIJCQkJbGxpX2xheW91dF9nZW47CisJc3BpbmxvY2tfdAkJCWxsaV9sYXlvdXRfbG9jazsKIAogCXN0cnVjdCByd19zZW1hcGhvcmUJCWxsaV94YXR0cnNfbGlzdF9yd3NlbTsKIAlzdHJ1Y3QgbXV0ZXgJCQlsbGlfeGF0dHJzX2VucV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJCWxsaV94YXR0cnM7LyogbGxfeGF0dHJfZW50cnktPnhlX2xpc3QgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgX191MzIgbGxfbGF5b3V0X3ZlcnNpb25fZ2V0KHN0cnVjdCBsbF9pbm9kZV9pbmZvICpsbGkpCit7CisJX191MzIgZ2VuOworCisJc3Bpbl9sb2NrKCZsbGktPmxsaV9sYXlvdXRfbG9jayk7CisJZ2VuID0gbGxpLT5sbGlfbGF5b3V0X2dlbjsKKwlzcGluX3VubG9jaygmbGxpLT5sbGlfbGF5b3V0X2xvY2spOworCisJcmV0dXJuIGdlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxsX2xheW91dF92ZXJzaW9uX3NldChzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpLCBfX3UzMiBnZW4pCit7CisJc3Bpbl9sb2NrKCZsbGktPmxsaV9sYXlvdXRfbG9jayk7CisJbGxpLT5sbGlfbGF5b3V0X2dlbiA9IGdlbjsKKwlzcGluX3VubG9jaygmbGxpLT5sbGlfbGF5b3V0X2xvY2spOworfQorCiBpbnQgbGxfeGF0dHJfY2FjaGVfZGVzdHJveShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogaW50IGxsX3hhdHRyX2NhY2hlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLApAQCAtMzAwLDcgKzI5OSw3IEBACiAgKiBMb2NraW5nIHRvIGd1YXJhbnRlZSBjb25zaXN0ZW5jeSBvZiBub24tYXRvbWljIHVwZGF0ZXMgdG8gbG9uZyBsb25nIGlfc2l6ZSwKICAqIGNvbnNpc3RlbmN5IGJldHdlZW4gZmlsZSBzaXplIGFuZCBLTVMuCiAgKgotICogSW1wbGVtZW50ZWQgYnkgLT5sbGlfc2l6ZV9zZW0gYW5kIC0+bHNtX2xvY2ssIG5lc3RlZCBpbiB0aGF0IG9yZGVyLgorICogSW1wbGVtZW50ZWQgYnkgLT5sbGlfc2l6ZV9tdXRleCBhbmQgLT5sc21fbG9jaywgbmVzdGVkIGluIHRoYXQgb3JkZXIuCiAgKi8KIAogdm9pZCBsbF9pbm9kZV9zaXplX2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7CkBAIC00NDIsMTAgKzQ0MSw2IEBACiAJInhhdHRyIiwJXAogfQogCi0vKiBkZWZhdWx0IHZhbHVlIGZvciBsbF9zYl9pbmZvLT5jb250ZW50aW9uX3RpbWUgKi8KLSNkZWZpbmUgU0JJX0RFRkFVTFRfQ09OVEVOVElPTl9TRUNPTkRTICAgICA2MAotLyogZGVmYXVsdCB2YWx1ZSBmb3IgbG9ja2xlc3NfdHJ1bmNhdGVfZW5hYmxlICovCi0jZGVmaW5lIFNCSV9ERUZBVUxUX0xPQ0tMRVNTX1RSVU5DQVRFX0VOQUJMRSAxCiAjZGVmaW5lIFJDRV9IQVNIRVMgICAgICAzMgogCiBzdHJ1Y3Qgcm10YWNsX2N0bF9lbnRyeSB7CkBAIC02NTYsMTIgKzY1MSw2IEBACiAJcmV0dXJuICZsbGktPmxsaV92ZnNfaW5vZGU7CiB9CiAKLXN0cnVjdCBpdF9jYl9kYXRhIHsKLQlzdHJ1Y3QgaW5vZGUgICppY2JkX3BhcmVudDsKLQlzdHJ1Y3QgZGVudHJ5ICoqaWNiZF9jaGlsZHA7Ci0Jb2JkX2lkCWhhc2g7Ci19OwotCiBfX3UzMiBsbF9pMnN1cHBnaWQoc3RydWN0IGlub2RlICppKTsKIHZvaWQgbGxfaTJnaWRzKF9fdTMyICpzdXBwZ2lkcywgc3RydWN0IGlub2RlICppMSxzdHJ1Y3QgaW5vZGUgKmkyKTsKIApAQCAtNjY5LDIxICs2NTgsMTMgQEAKIHsKICNpZiBCSVRTX1BFUl9MT05HID09IDMyCiAJcmV0dXJuIDE7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpCisJcmV0dXJuIHVubGlrZWx5KGlzX2NvbXBhdF90YXNrKCkgfHwgKHNiaS0+bGxfZmxhZ3MgJiBMTF9TQklfMzJCSVRfQVBJKSk7CiAjZWxzZQotCXJldHVybiB1bmxpa2VseSgKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCWlzX2NvbXBhdF90YXNrKCkgfHwKLSNlbmRpZgotCQkoc2JpLT5sbF9mbGFncyAmIExMX1NCSV8zMkJJVF9BUEkpCi0JKTsKKwlyZXR1cm4gdW5saWtlbHkoc2JpLT5sbF9mbGFncyAmIExMX1NCSV8zMkJJVF9BUEkpOwogI2VuZGlmCiB9CiAKLSNkZWZpbmUgTExBUF9NQUdJQyA5ODc2NDMyMQotCi1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmxsX2FzeW5jX3BhZ2Vfc2xhYjsKLWV4dGVybiBzaXplX3QgbGxfYXN5bmNfcGFnZV9zbGFiX3NpemU7Ci0KIHZvaWQgbGxfcmFfcmVhZF9pbihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGxsX3JhX3JlYWQgKnJhcik7CiB2b2lkIGxsX3JhX3JlYWRfZXgoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBsbF9yYV9yZWFkICpyYXIpOwogc3RydWN0IGxsX3JhX3JlYWQgKmxsX3JhX3JlYWRfZ2V0KHN0cnVjdCBmaWxlICpmKTsKQEAgLTcxNiwxNCArNjk3LDE2IEBACiAKIC8qIGxsaXRlL2Rpci5jICovCiB2b2lkIGxsX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJlbW92ZSk7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsbF9kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsbF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxsX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RydWN0IHBhZ2UgKmxsX2dldF9kaXJfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgX191NjQgaGFzaCwKIAkJCSAgICAgc3RydWN0IGxsX2Rpcl9jaGFpbiAqY2hhaW4pOwogaW50IGxsX2Rpcl9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KTsKIAogaW50IGxsX2dldF9tZHRfaWR4KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogLyogbGxpdGUvbmFtZWkuYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxsX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKKwogaW50IGxsX29iamVjdHNfZGVzdHJveShzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcik7CiBzdHJ1Y3QgaW5vZGUgKmxsX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaGFzaCwKQEAgLTczOCw0MyArNzIxLDM0IEBACiBpbnQgbGxfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKIGludCBsbF93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBsbF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKLXZvaWQgbGxfcmVtb3ZlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgbGxfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKTsKIHZvaWQgbGxfcmVhZGFoZWFkX2luaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxsX3JlYWRhaGVhZF9zdGF0ZSAqcmFzKTsKLWludCBsbF9maWxlX3B1bmNoKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QsIGludCk7Ci1zc2l6ZV90IGxsX2ZpbGVfbG9ja2xlc3NfaW8oc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqLCBpbnQpOwotdm9pZCBsbF9jbGVhcl9maWxlX2NvbnRlbmRlZChzdHJ1Y3QgaW5vZGUqKTsKLWludCBsbF9zeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCwgc2l6ZV90KTsKIGludCBsbF9yZWFkYWhlYWQoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LCBzdHJ1Y3QgY2xfaW8gKmlvLAogCQkgc3RydWN0IGxsX3JlYWRhaGVhZF9zdGF0ZSAqcmFzLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJIHN0cnVjdCBjbF9wYWdlX2xpc3QgKnF1ZXVlLCBpbnQgZmxhZ3MpOwogCisjaWZuZGVmIE1TX0hBU19ORVdfQU9QUworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbGxfYW9wczsKKyNlbHNlCitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc19leHQgbGxfYW9wczsKKyNlbmRpZgorCiAvKiBsbGl0ZS9maWxlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX2ZpbGVfb3BlcmF0aW9uc19mbG9jazsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX2ZpbGVfb3BlcmF0aW9uc19ub2Zsb2NrOwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxsX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBpbnQgbGxfaW5vZGVfcmV2YWxpZGF0ZV9pdChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBsb29rdXBfaW50ZW50ICosCi0JCQkJICBfX3U2NCk7CiBleHRlcm4gaW50IGxsX2hhdmVfbWRfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBfX3U2NCAqYml0cywKIAkJCSAgIGxkbG1fbW9kZV90IGxfcmVxX21vZGUpOwogZXh0ZXJuIGxkbG1fbW9kZV90IGxsX3Rha2VfbWRfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBfX3U2NCBiaXRzLAogCQkJCSAgIHN0cnVjdCBsdXN0cmVfaGFuZGxlICpsb2NraCwgX191NjQgZmxhZ3MsCiAJCQkJICAgbGRsbV9tb2RlX3QgbW9kZSk7Ci1pbnQgX19sbF9pbm9kZV9yZXZhbGlkYXRlX2l0KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKiwKLQkJCSAgICAgX191NjQgYml0cyk7Ci1pbnQgbGxfcmV2YWxpZGF0ZV9uZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgbGxfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBsbF9maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogaW50IGxsX2dsaW1wc2VfaW9jdGwoc3RydWN0IGxsX3NiX2luZm8gKnNiaSwKIAkJICAgICBzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLCBsc3RhdF90ICpzdCk7CiB2b2lkIGxsX2lvZXBvY2hfb3BlbihzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpLCBfX3U2NCBpb2Vwb2NoKTsKLWludCBsbF9sb2NhbF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgIHN0cnVjdCBsb29rdXBfaW50ZW50ICppdCwgc3RydWN0IGxsX2ZpbGVfZGF0YSAqZmQsCi0JCSAgc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICpvY2gpOwogaW50IGxsX3JlbGVhc2Vfb3BlbmhhbmRsZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBsb29rdXBfaW50ZW50ICopOwotaW50IGxsX21kX2Nsb3NlKHN0cnVjdCBvYmRfZXhwb3J0ICptZF9leHAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCXN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBsbF9tZF9yZWFsX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGZtb2RlX3QgZm1vZGUpOwogdm9pZCBsbF9pb2Vwb2NoX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhLAogCQkgICAgICBzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKipvY2gsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpAQCAtNzgyLDE1ICs3NTYsMTAgQEAKIGludCBsbF9zb21fdXBkYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhKTsKIGludCBsbF9pbm9kZV9nZXRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvYmRvICpvYmRvLAogCQkgICAgIF9fdTY0IGlvZXBvY2gsIGludCBzeW5jKTsKLWludCBsbF9tZF9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG1kX29wX2RhdGEgKm9wX2RhdGEsCi0JCSAgc3RydWN0IG1kX29wZW5fZGF0YSAqKm1vZCk7CiB2b2lkIGxsX3BhY2tfaW5vZGUyb3BkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhLAogCQkJICBzdHJ1Y3QgbHVzdHJlX2hhbmRsZSAqZmgpOwotaW50IGxsX2dldGF0dHJfaXQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlLAotCSAgICAgICBzdHJ1Y3QgbG9va3VwX2ludGVudCAqaXQsIHN0cnVjdCBrc3RhdCAqc3RhdCk7CiBpbnQgbGxfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCk7Ci1zdHJ1Y3QgbGxfZmlsZV9kYXRhICpsbF9maWxlX2RhdGFfZ2V0KHZvaWQpOwotc3RydWN0IHBvc2l4X2FjbCAqIGxsX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpOworc3RydWN0IHBvc2l4X2FjbCAqbGxfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7CiAKIGludCBsbF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKIApAQCAtODA1LDQ0ICs3NzQsMzAgQEAKIGludCBsbF9kaXJfZ2V0c3RyaXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb3ZfbWRzX21kICoqbG1tcCwKIAkJICAgICBpbnQgKmxtbV9zaXplLCBzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKipyZXF1ZXN0KTsKIGludCBsbF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YSk7Ci1pbnQgbGxfZG9fZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsbF91c2VyX2ZpZW1hcCAqZmllbWFwLAotCSAgICAgIGludCBudW1fYnl0ZXMpOwogaW50IGxsX21lcmdlX2x2Yihjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IGxsX2dldF9ncm91cGxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWludCBsbF9wdXRfZ3JvdXBsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgbGxfZmlkMnBhdGgoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnKTsKIGludCBsbF9kYXRhX3ZlcnNpb24oc3RydWN0IGlub2RlICppbm9kZSwgX191NjQgKmRhdGFfdmVyc2lvbiwgaW50IGV4dGVudF9sb2NrKTsKIGludCBsbF9oc21fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICpsbF9sZWFzZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQlmbW9kZV90IG1vZGUsIF9fdTY0IGZsYWdzKTsKLWludCBsbF9sZWFzZV9jbG9zZShzdHJ1Y3Qgb2JkX2NsaWVudF9oYW5kbGUgKm9jaCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgYm9vbCAqbGVhc2VfYnJva2VuKTsKLQogLyogbGxpdGUvZGNhY2hlLmMgKi8KIAogaW50IGxsX2RfaW5pdChzdHJ1Y3QgZGVudHJ5ICpkZSk7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGxsX2Rfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBsbF9kX29wczsKIHZvaWQgbGxfaW50ZW50X2Ryb3BfbG9jayhzdHJ1Y3QgbG9va3VwX2ludGVudCAqKTsKIHZvaWQgbGxfaW50ZW50X3JlbGVhc2Uoc3RydWN0IGxvb2t1cF9pbnRlbnQgKik7CiB2b2lkIGxsX2ludmFsaWRhdGVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKik7Ci12b2lkIGxsX2Zyb2JfaW50ZW50KHN0cnVjdCBsb29rdXBfaW50ZW50ICoqaXRwLCBzdHJ1Y3QgbG9va3VwX2ludGVudCAqZGVmdCk7CiB2b2lkIGxsX2xvb2t1cF9maW5pc2hfbG9ja3Moc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IGxsX2Rjb21wYXJlKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpkX25hbWUpOwogaW50IGxsX3JldmFsaWRhdGVfaXRfZmluaXNoKHN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxdWVzdCwKIAkJCSAgICBzdHJ1Y3QgbG9va3VwX2ludGVudCAqaXQsIHN0cnVjdCBkZW50cnkgKmRlKTsKIAogLyogbGxpdGUvbGxpdGVfbGliLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBsdXN0cmVfc3VwZXJfb3BlcmF0aW9uczsKIAotY2hhciAqbGxfcmVhZF9vcHQoY29uc3QgY2hhciAqb3B0LCBjaGFyICpkYXRhKTsKIHZvaWQgbGxfbGxpX2luaXQoc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSk7CiBpbnQgbGxfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiB2b2lkIGxsX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHZvaWQgbGxfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0cnVjdCBpbm9kZSAqbGxfaW5vZGVfZnJvbV9yZXNvdXJjZV9sb2NrKHN0cnVjdCBsZGxtX2xvY2sgKmxvY2spOwotc3RydWN0IGlub2RlICpsbF9pbm9kZV9mcm9tX2xvY2soc3RydWN0IGxkbG1fbG9jayAqbG9jayk7CiB2b2lkIGxsX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IGxsX3NldGF0dHJfcmF3KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyLCBib29sIGhzbV9pbXBvcnQpOwogaW50IGxsX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGUsIHN0cnVjdCBpYXR0ciAqYXR0cik7CkBAIC04NjIsOSArODE3LDExIEBACiBpbnQgbGxfcHJlcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKippbm9kZSwgc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXEsCiAJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBsb29rdXBfaW50ZW50ICopOwogdm9pZCBsdXN0cmVfZHVtcF9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBpbnQgcmVjdXIpOwotdm9pZCBsdXN0cmVfZHVtcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBpbnQgbGxfb2JkX3N0YXRmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICphcmcpOwogaW50IGxsX2dldF9tYXhfbWRzaXplKHN0cnVjdCBsbF9zYl9pbmZvICpzYmksIGludCAqbWF4X21kc2l6ZSk7CitpbnQgbGxfZ2V0X2RlZmF1bHRfbWRzaXplKHN0cnVjdCBsbF9zYl9pbmZvICpzYmksIGludCAqZGVmYXVsdF9tZHNpemUpOworaW50IGxsX2dldF9tYXhfY29va2llc2l6ZShzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpLCBpbnQgKm1heF9jb29raWVzaXplKTsKK2ludCBsbF9nZXRfZGVmYXVsdF9jb29raWVzaXplKHN0cnVjdCBsbF9zYl9pbmZvICpzYmksIGludCAqZGVmYXVsdF9jb29raWVzaXplKTsKIGludCBsbF9wcm9jZXNzX2NvbmZpZyhzdHJ1Y3QgbHVzdHJlX2NmZyAqbGNmZyk7CiBzdHJ1Y3QgbWRfb3BfZGF0YSAqbGxfcHJlcF9tZF9vcF9kYXRhKHN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhLAogCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaTEsIHN0cnVjdCBpbm9kZSAqaTIsCkBAIC04ODEsMTUgKzgzOCw2IEBACiBzdHJ1Y3QgaW5vZGUgKnNlYXJjaF9pbm9kZV9mb3JfbHVzdHJlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGx1X2ZpZCAqZmlkKTsKIAotLyogbGxpdGUvc3BlY2lhbC5jICovCi1leHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbGxfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGxfc3BlY2lhbF9jaHJfaW5vZGVfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3NwZWNpYWxfY2hyX2ZpbGVfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3NwZWNpYWxfYmxrX2lub2RlX2ZvcHM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsbF9zcGVjaWFsX2ZpZm9faW5vZGVfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3NwZWNpYWxfZmlmb19maWxlX2ZvcHM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsbF9zcGVjaWFsX3NvY2tfaW5vZGVfZm9wczsKLQogLyogbGxpdGUvc3ltbGluay5jICovCiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbGxfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAKQEAgLTk1NywxMSArOTA1LDYgQEAKIAkgKiBTZXQgd2hlbiBjdWlfYmVhZCBoYXMgYmVlbiBpbml0aWFsaXplZC4KIAkgKi8KIAlpbnQJCSAgY3VpX3JhX3dpbmRvd19zZXQ7Ci0JLyoqCi0JICogUGFydGlhbGx5IHRydW5jYXRlZCBwYWdlLCB0aGF0IHZ2cF9pb190cnVuY19zdGFydCgpIGtlZXBzIGxvY2tlZAotCSAqIGFjcm9zcyB0cnVuY2F0ZS4KLQkgKi8KLQlzdHJ1Y3QgY2xfcGFnZSAgICAgICpjdWlfcGFydHBhZ2U7CiB9OwogCiAvKioKQEAgLTk5MCwxMiArOTMzLDkgQEAKIAlzdHJ1Y3QgY2xfcGFnZSAqbGNjX3BhZ2U7CiAJc3RydWN0IGx1X2VudiAgKmxjY19lbnY7CiAJaW50CSAgICAgbGNjX3JlZmNoZWNrOwotCWludAkgICAgIGxjY19jcmVhdGVkOwogfTsKIAogc3RydWN0IHZ2cF90aHJlYWRfaW5mbyB7Ci0Jc3RydWN0IG9zdF9sdmIgICAgICAgdnRpX2x2YjsKLQlzdHJ1Y3QgY2xfMnF1ZXVlICAgICB2dGlfcXVldWU7CiAJc3RydWN0IGlvdmVjCSB2dGlfbG9jYWxfaW92OwogCXN0cnVjdCB2dnBfaW9fYXJncyAgIHZ0aV9hcmdzOwogCXN0cnVjdCByYV9pb19hcmcgICAgIHZ0aV9yaWE7CkBAIC0xMDQyLDI1ICs5ODIsMTcgQEAKIAlyZXR1cm4gJnZ2cF9lbnZfc2Vzc2lvbihlbnYpLT52c19pb3M7CiB9CiAKK2ludCB2dnBfZ2xvYmFsX2luaXQodm9pZCk7Cit2b2lkIHZ2cF9nbG9iYWxfZmluaSh2b2lkKTsKKwogdm9pZCBsbF9xdWV1ZV9kb25lX3dyaXRpbmcoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiB2b2lkIGxsX2Nsb3NlX3RocmVhZF9zaHV0ZG93bihzdHJ1Y3QgbGxfY2xvc2VfcXVldWUgKmxjcSk7CiBpbnQgbGxfY2xvc2VfdGhyZWFkX3N0YXJ0KHN0cnVjdCBsbF9jbG9zZV9xdWV1ZSAqKmxjcV9yZXQpOwogCiAvKiBsbGl0ZS9sbGl0ZV9tbWFwLmMgKi8KLXR5cGVkZWYgc3RydWN0IHJiX3Jvb3QgIHJiX3Jvb3RfdDsKLXR5cGVkZWYgc3RydWN0IHJiX25vZGUgIHJiX25vZGVfdDsKLQotc3RydWN0IGxsX2xvY2tfdHJlZV9ub2RlOwotc3RydWN0IGxsX2xvY2tfdHJlZSB7Ci0JcmJfcm9vdF90CQkgICAgICAgbHRfcm9vdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQkgICAgICBsdF9sb2NrZWRfbGlzdDsKLQlzdHJ1Y3QgbGxfZmlsZV9kYXRhCSAgICAqbHRfZmQ7Ci19OwogCiBpbnQgbGxfdGVhcmRvd25fbW1hcHMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIF9fdTY0IGZpcnN0LCBfX3U2NCBsYXN0KTsKIGludCBsbF9maWxlX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwotc3RydWN0IGxsX2xvY2tfdHJlZV9ub2RlICogbGxfbm9kZV9mcm9tX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTY0IHN0YXJ0LAotCQkJCQkgICAgICBfX3U2NCBlbmQsIGxkbG1fbW9kZV90IG1vZGUpOwogdm9pZCBwb2xpY3lfZnJvbV92bWEobGRsbV9wb2xpY3lfZGF0YV90ICpwb2xpY3ksCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBjb3VudCk7CiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm91cl92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTExMjcsMTEgKzEwNTksNiBAQAogCXJldHVybiBmaWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxsX21kc19tYXhfZWFzaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIHNiaTJtZGMobGxfczJzYmkoc2IpKS0+Y2xfbWF4X21kc19lYXNpemU7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgX191NjQgbGxfZmlsZV9tYXhieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiBsbF9pMmluZm8oaW5vZGUpLT5sbGlfbWF4Ynl0ZXM7CkBAIC0xMTQ5LDcgKzEwNzYsNiBAQAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpsbF9yZW1vdGVfcGVybV9jYWNoZXA7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmxsX3JtdHBlcm1faGFzaF9jYWNoZXA7CiAKLXN0cnVjdCBobGlzdF9oZWFkICphbGxvY19ybXRwZXJtX2hhc2godm9pZCk7CiB2b2lkIGZyZWVfcm10cGVybV9oYXNoKHN0cnVjdCBobGlzdF9oZWFkICpoYXNoKTsKIGludCBsbF91cGRhdGVfcmVtb3RlX3Blcm0oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG1kdF9yZW1vdGVfcGVybSAqcGVybSk7CiBpbnQgbHVzdHJlX2NoZWNrX3JlbW90ZV9wZXJtKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKQEAgLTExNjIsNyArMTA4OCw2IEBACiB2b2lkIGxsX2NhcGFfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyB1bnVzZWQpOwogCiBzdHJ1Y3Qgb2JkX2NhcGEgKmxsX2FkZF9jYXBhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvYmRfY2FwYSAqb2NhcGEpOwotaW50IGxsX3VwZGF0ZV9jYXBhKHN0cnVjdCBvYmRfY2FwYSAqb2NhcGEsIHN0cnVjdCBsdXN0cmVfY2FwYSAqY2FwYSk7CiAKIHZvaWQgbGxfY2FwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogdm9pZCBsbF9jYXBhX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMTE4MiwxNCArMTEwNywxMiBAQAogICovCiBpbnQgY2xfc2JfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBjbF9zYl9maW5pKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotZW51bSBjbF9sb2NrX21vZGUgIHZ2cF9tb2RlX2Zyb21fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgbGxfaW9faW5pdChzdHJ1Y3QgY2xfaW8gKmlvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IHdyaXRlKTsKIAogdm9pZCByYXNfdXBkYXRlKHN0cnVjdCBsbF9zYl9pbmZvICpzYmksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCBsbF9yZWFkYWhlYWRfc3RhdGUgKnJhcywgdW5zaWduZWQgbG9uZyBpbmRleCwKIAkJdW5zaWduZWQgaGl0KTsKIHZvaWQgbGxfcmFfY291bnRfcHV0KHN0cnVjdCBsbF9zYl9pbmZvICpzYmksIHVuc2lnbmVkIGxvbmcgbGVuKTsKLWludCBsbF9pc19maWxlX2NvbnRlbmRlZChzdHJ1Y3QgZmlsZSAqZmlsZSk7CiB2b2lkIGxsX3JhX3N0YXRzX2luYyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgZW51bSByYV9zdGF0IHdoaWNoKTsKIAogLyogbGxpdGUvbGxpdGVfcm10YWNsLmMgKi8KQEAgLTEyNjIsNyArMTE4NSw2IEBACiAJdW5zaWduZWQgaW50CSAgICBzYWlfc2tpcF9oaWRkZW47Lyogc2tpcHBlZCBoaWRkZW4gZGVudHJ5IGNvdW50ICovCiAJdW5zaWduZWQgaW50CSAgICBzYWlfbHNfYWxsOjEsICAgLyogImxzIC1hbCIsIGRvIHN0YXQtYWhlYWQgZm9yCiAJCQkJCQkgKiBoaWRkZW4gZW50cmllcyAqLwotCQkJCXNhaV9pbl9yZWFkcGFnZToxLC8qIHN0YXRhaGVhZCBpcyBpbiByZWFkZGlyKCkqLwogCQkJCXNhaV9hZ2xfdmFsaWQ6MTsvKiBBR0wgaXMgdmFsaWQgZm9yIHRoZSBkaXIgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAkgICAgIHNhaV93YWl0cTsgICAgICAvKiBzdGF0LWFoZWFkIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgcHRscnBjX3RocmVhZCAgICBzYWlfdGhyZWFkOyAgICAgLyogc3RhdC1haGVhZCB0aHJlYWQgKi8KQEAgLTEzODcsOSArMTMwOSw2IEBACiAJCXN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKIAkJdm9pZCAqbWFnaWMsIGludCAqcmNwKTsKIAotZW51bSBsbGlvY19pdGVyIGxsX2lvY29udHJvbF9jYWxsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgaW50ICpyY3ApOwotCiAvKiBleHBvcnQgZnVuY3Rpb25zICovCiAvKiBSZWdpc3RlciBpb2N0bCBibG9jayBkeW5hbWF0aWNhbGx5IGZvciBhIHJlZ3VsYXIgZmlsZS4KICAqCkBAIC0xNDMxLDcgKzEzNTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xfaXNpemVfd3JpdGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBrbXMpCiB7Ci0JTEFTU0VSVChkb3duX3RyeWxvY2soJmxsX2kyaW5mbyhpbm9kZSktPmxsaV9zaXplX3NlbSkgIT0gMCk7CisJTEFTU0VSVChtdXRleF9pc19sb2NrZWQoJmxsX2kyaW5mbyhpbm9kZSktPmxsaV9zaXplX211dGV4KSk7CiAJaV9zaXplX3dyaXRlKGlub2RlLCBrbXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbGl0ZV9saWIuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2xpYi5jCmluZGV4IDdjNGZkOTcuLmRlY2EyN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2xpYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2xpYi5jCkBAIC01OCwxNCArNTgsOCBAQAogc3RydWN0IGttZW1fY2FjaGUgKmxsX2ZpbGVfZGF0YV9zbGFiOwogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2x1c3RyZV9mc19yb290OwogCi1MSVNUX0hFQUQobGxfc3VwZXJfYmxvY2tzKTsKLURFRklORV9TUElOTE9DSyhsbF9zYl9sb2NrKTsKLQotI2lmbmRlZiBNU19IQVNfTkVXX0FPUFMKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGxsX2FvcHM7Ci0jZWxzZQotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNfZXh0IGxsX2FvcHM7Ci0jZW5kaWYKK3N0YXRpYyBMSVNUX0hFQUQobGxfc3VwZXJfYmxvY2tzKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxfc2JfbG9jayk7CiAKICNpZm5kZWYgbG9nMgogI2RlZmluZSBsb2cyKG4pIGZmeih+KG4pKQpAQCAtMTQzLDcgKzEzNyw3IEBACiAJcmV0dXJuIHNiaTsKIH0KIAotdm9pZCBsbF9mcmVlX3NiaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIHZvaWQgbGxfZnJlZV9zYmkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfczJzYmkoc2IpOwogCkBAIC01OTcsOCArNTkxLDcgQEAKIAogCXJldHVybiBlcnI7CiBvdXRfcm9vdDoKLQlpZiAocm9vdCkKLQkJaXB1dChyb290KTsKKwlpcHV0KHJvb3QpOwogb3V0X2xvY2tfY25fY2I6CiAJb2JkX2ZpZF9maW5pKHNiaS0+bGxfZHRfZXhwLT5leHBfb2JkKTsKIG91dF9kdDoKQEAgLTYzNCw3ICs2MjcsNDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgbGxfZHVtcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoraW50IGxsX2dldF9kZWZhdWx0X21kc2l6ZShzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpLCBpbnQgKmxtbXNpemUpCit7CisJaW50IHNpemUsIHJjOworCisJc2l6ZSA9IHNpemVvZihpbnQpOworCXJjID0gb2JkX2dldF9pbmZvKE5VTEwsIHNiaS0+bGxfbWRfZXhwLCBzaXplb2YoS0VZX0RFRkFVTFRfRUFTSVpFKSwKKwkJCSBLRVlfREVGQVVMVF9FQVNJWkUsICZzaXplLCBsbW1zaXplLCBOVUxMKTsKKwlpZiAocmMpCisJCUNFUlJPUigiR2V0IGRlZmF1bHQgbWRzaXplIGVycm9yIHJjICVkXG4iLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBsbF9nZXRfbWF4X2Nvb2tpZXNpemUoc3RydWN0IGxsX3NiX2luZm8gKnNiaSwgaW50ICpsbW1zaXplKQoreworCWludCBzaXplLCByYzsKKworCXNpemUgPSBzaXplb2YoaW50KTsKKwlyYyA9IG9iZF9nZXRfaW5mbyhOVUxMLCBzYmktPmxsX21kX2V4cCwgc2l6ZW9mKEtFWV9NQVhfQ09PS0lFU0laRSksCisJCQkgIEtFWV9NQVhfQ09PS0lFU0laRSwgJnNpemUsIGxtbXNpemUsIE5VTEwpOworCWlmIChyYykKKwkJQ0VSUk9SKCJHZXQgbWF4IGNvb2tpZXNpemUgZXJyb3IgcmMgJWRcbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KKworaW50IGxsX2dldF9kZWZhdWx0X2Nvb2tpZXNpemUoc3RydWN0IGxsX3NiX2luZm8gKnNiaSwgaW50ICpsbW1zaXplKQoreworCWludCBzaXplLCByYzsKKworCXNpemUgPSBzaXplb2YoaW50KTsKKwlyYyA9IG9iZF9nZXRfaW5mbyhOVUxMLCBzYmktPmxsX21kX2V4cCwgc2l6ZW9mKEtFWV9ERUZBVUxUX0NPT0tJRVNJWkUpLAorCQkJICBLRVlfREVGQVVMVF9DT09LSUVTSVpFLCAmc2l6ZSwgbG1tc2l6ZSwgTlVMTCk7CisJaWYgKHJjKQorCQlDRVJST1IoIkdldCBkZWZhdWx0IGNvb2tpZXNpemUgZXJyb3IgcmMgJWRcbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbGxfZHVtcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBsbF9kX2hsaXN0X25vZGUgKnRtcDsKIAlpbnQgZGVudHJ5X2NvdW50ID0gMDsKQEAgLTY3Nyw3ICs3MDksNyBAQAogCX0KIH0KIAotdm9pZCBjbGllbnRfY29tbW9uX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIHZvaWQgY2xpZW50X2NvbW1vbl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfczJzYmkoc2IpOwogCkBAIC03MjYsMzAgKzc1OCw2IEBACiAJfQogfQogCi1jaGFyICpsbF9yZWFkX29wdChjb25zdCBjaGFyICpvcHQsIGNoYXIgKmRhdGEpCi17Ci0JY2hhciAqdmFsdWU7Ci0JY2hhciAqcmV0dmFsOwotCi0JQ0RFQlVHKERfU1VQRVIsICJvcHRpb246ICVzLCBkYXRhICVzXG4iLCBvcHQsIGRhdGEpOwotCWlmIChzdHJuY21wKG9wdCwgZGF0YSwgc3RybGVuKG9wdCkpKQotCQlyZXR1cm4gTlVMTDsKLQl2YWx1ZSA9IHN0cmNocihkYXRhLCAnPScpOwotCWlmICh2YWx1ZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXZhbHVlKys7Ci0JT0JEX0FMTE9DKHJldHZhbCwgc3RybGVuKHZhbHVlKSArIDEpOwotCWlmICghcmV0dmFsKSB7Ci0JCUNFUlJPUigib3V0IG9mIG1lbW9yeSFcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltZW1jcHkocmV0dmFsLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSsxKTsKLQlDREVCVUcoRF9TVVBFUiwgIkFzc2lnbmVkIG9wdGlvbjogJXMsIHZhbHVlICVzXG4iLCBvcHQsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbGxfc2V0X29wdChjb25zdCBjaGFyICpvcHQsIGNoYXIgKmRhdGEsIGludCBmbCkKIHsKIAlpZiAoc3RybmNtcChvcHQsIGRhdGEsIHN0cmxlbihvcHQpKSAhPSAwKQpAQCAtOTI3LDcgKzkzNSw4IEBACiAJbXV0ZXhfaW5pdCgmbGxpLT5sbGlfb2NoX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmbGxpLT5sbGlfYWdsX2xvY2spOwogCWxsaS0+bGxpX2hhc19zbWQgPSBmYWxzZTsKLQlsbGktPmxsaV9sYXlvdXRfZ2VuID0gTExfTEFZT1VUX0dFTl9OT05FOworCXNwaW5fbG9ja19pbml0KCZsbGktPmxsaV9sYXlvdXRfbG9jayk7CisJbGxfbGF5b3V0X3ZlcnNpb25fc2V0KGxsaSwgTExfTEFZT1VUX0dFTl9OT05FKTsKIAlsbGktPmxsaV9jbG9iID0gTlVMTDsKIAogCWluaXRfcndzZW0oJmxsaS0+bGxpX3hhdHRyc19saXN0X3J3c2VtKTsKQEAgLTkzOCwxMiArOTQ3LDEwIEBACiAJCW11dGV4X2luaXQoJmxsaS0+bGxpX3JlYWRkaXJfbXV0ZXgpOwogCQlsbGktPmxsaV9vcGVuZGlyX2tleSA9IE5VTEw7CiAJCWxsaS0+bGxpX3NhaSA9IE5VTEw7Ci0JCWxsaS0+bGxpX2RlZl9hY2wgPSBOVUxMOwogCQlzcGluX2xvY2tfaW5pdCgmbGxpLT5sbGlfc2FfbG9jayk7CiAJCWxsaS0+bGxpX29wZW5kaXJfcGlkID0gMDsKIAl9IGVsc2UgewotCQlzZW1hX2luaXQoJmxsaS0+bGxpX3NpemVfc2VtLCAxKTsKLQkJbGxpLT5sbGlfc2l6ZV9zZW1fb3duZXIgPSBOVUxMOworCQltdXRleF9pbml0KCZsbGktPmxsaV9zaXplX211dGV4KTsKIAkJbGxpLT5sbGlfc3ltbGlua19uYW1lID0gTlVMTDsKIAkJaW5pdF9yd3NlbSgmbGxpLT5sbGlfdHJ1bmNfc2VtKTsKIAkJbXV0ZXhfaW5pdCgmbGxpLT5sbGlfd3JpdGVfbXV0ZXgpOwpAQCAtOTUyLDcgKzk1OSw2IEBACiAJCUlOSVRfTElTVF9IRUFEKCZsbGktPmxsaV9hZ2xfbGlzdCk7CiAJCWxsaS0+bGxpX2FnbF9pbmRleCA9IDA7CiAJCWxsaS0+bGxpX2FzeW5jX3JjID0gMDsKLQkJbGxpLT5sbGlfdm9sYXRpbGUgPSBmYWxzZTsKIAl9CiAJbXV0ZXhfaW5pdCgmbGxpLT5sbGlfbGF5b3V0X211dGV4KTsKIH0KQEAgLTExNTEsMjggKzExNTcsNiBAQAogCXJldHVybiBpbm9kZTsKIH0KIAotc3RydWN0IGlub2RlICpsbF9pbm9kZV9mcm9tX2xvY2soc3RydWN0IGxkbG1fbG9jayAqbG9jaykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKLQkvKiBOT1RFOiB3ZSBkZXBlbmQgb24gYXRvbWljIGlncmFiKCkgLWJ6enogKi8KLQlsb2NrX3Jlc19hbmRfbG9jayhsb2NrKTsKLQlpZiAobG9jay0+bF9hc3RfZGF0YSkgewotCQlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpID0gbGxfaTJpbmZvKGxvY2stPmxfYXN0X2RhdGEpOwotCQlpZiAobGxpLT5sbGlfaW5vZGVfbWFnaWMgPT0gTExJX0lOT0RFX01BR0lDKSB7Ci0JCQlpbm9kZSA9IGlncmFiKGxvY2stPmxfYXN0X2RhdGEpOwotCQl9IGVsc2UgewotCQkJaW5vZGUgPSBsb2NrLT5sX2FzdF9kYXRhOwotCQkJTERMTV9ERUJVR19MSU1JVChpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORyA/ICBEX0lORk8gOgotCQkJCQkgRF9XQVJOSU5HLCBsb2NrLCAibF9hc3RfZGF0YSAlcCBpcyAiCi0JCQkJCSAiYm9ndXM6IG1hZ2ljICUwOHgiLCBsb2NrLT5sX2FzdF9kYXRhLAotCQkJCQkgbGxpLT5sbGlfaW5vZGVfbWFnaWMpOwotCQkJaW5vZGUgPSBOVUxMOwotCQl9Ci0JfQotCXVubG9ja19yZXNfYW5kX2xvY2sobG9jayk7Ci0JcmV0dXJuIGlub2RlOwotfQotCiB2b2lkIGxsX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhpbm9kZSk7CkBAIC0xNDQ5LDcgKzE0MzMsNiBAQAogCQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpCiAJCQlpbm9kZV9kaW9fd3JpdGVfZG9uZShpbm9kZSk7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQlkb3duX3dyaXRlKCZsbGktPmxsaV90cnVuY19zZW0pOwogCX0KIAogCW1lbWNweSgmb3BfZGF0YS0+b3BfYXR0ciwgYXR0ciwgc2l6ZW9mKCphdHRyKSk7CkBAIC0xNTEzLDcgKzE0OTYsMTEgQEAKIAkJICogZXhjZXNzaXZlIHRvIHNlbmQgbXRpbWUvYXRpbWUgdXBkYXRlcyB0byBPU1RzIHdoZW4gbm90CiAJCSAqIHNldHRpbmcgdGltZXMgdG8gcGFzdCwgYnV0IGl0IGlzIG5lY2Vzc2FyeSBkdWUgdG8gcG9zc2libGUKIAkJICogdGltZSBkZS1zeW5jaHJvbml6YXRpb24gYmV0d2VlbiBNRFQgaW5vZGUgYW5kIE9TVCBvYmplY3RzICovCisJCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKKwkJCWRvd25fd3JpdGUoJmxsaS0+bGxpX3RydW5jX3NlbSk7CiAJCXJjID0gbGxfc2V0YXR0cl9vc3QoaW5vZGUsIGF0dHIpOworCQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpCisJCQl1cF93cml0ZSgmbGxpLT5sbGlfdHJ1bmNfc2VtKTsKIG91dDoKIAlpZiAob3BfZGF0YSkgewogCQlpZiAob3BfZGF0YS0+b3BfaW9lcG9jaCkgewpAQCAtMTUyNCw3ICsxNTExLDYgQEAKIAkJbGxfZmluaXNoX21kX29wX2RhdGEob3BfZGF0YSk7CiAJfQogCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQl1cF93cml0ZSgmbGxpLT5sbGlfdHJ1bmNfc2VtKTsKIAkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJiAhaHNtX2ltcG9ydCkKIAkJCWlub2RlX2Rpb193YWl0KGlub2RlKTsKQEAgLTE2NTgsMTAgKzE2NDQsNyBAQAogCUxBU1NFUlQoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpOwogCiAJbGxpID0gbGxfaTJpbmZvKGlub2RlKTsKLQlMQVNTRVJUKGxsaS0+bGxpX3NpemVfc2VtX293bmVyICE9IGN1cnJlbnQpOwotCWRvd24oJmxsaS0+bGxpX3NpemVfc2VtKTsKLQlMQVNTRVJUKGxsaS0+bGxpX3NpemVfc2VtX293bmVyID09IE5VTEwpOwotCWxsaS0+bGxpX3NpemVfc2VtX293bmVyID0gY3VycmVudDsKKwltdXRleF9sb2NrKCZsbGktPmxsaV9zaXplX211dGV4KTsKIH0KIAogdm9pZCBsbF9pbm9kZV9zaXplX3VubG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtMTY2OSw5ICsxNjUyLDcgQEAKIAlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpOwogCiAJbGxpID0gbGxfaTJpbmZvKGlub2RlKTsKLQlMQVNTRVJUKGxsaS0+bGxpX3NpemVfc2VtX293bmVyID09IGN1cnJlbnQpOwotCWxsaS0+bGxpX3NpemVfc2VtX293bmVyID0gTlVMTDsKLQl1cCgmbGxpLT5sbGlfc2l6ZV9zZW0pOworCW11dGV4X3VubG9jaygmbGxpLT5sbGlfc2l6ZV9tdXRleCk7CiB9CiAKIHZvaWQgbGxfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsdXN0cmVfbWQgKm1kKQpAQCAtMjQyMCwxMSArMjQwMSwxMiBAQAogCQkJcGF0aCA9IGxsX2RfcGF0aChkZW50cnksIGJ1ZiwgUEFHRV9TSVpFKTsKIAl9CiAKLQlDV0FSTigiJXM6IGRpcnR5IHBhZ2UgZGlzY2FyZDogJXMvZmlkOiAiREZJRCIvJXMgbWF5IGdldCBjb3JydXB0ZWQgIgotCSAgICAgICIocmMgJWQpXG4iLCBsbF9nZXRfZnNuYW1lKHBhZ2UtPm1hcHBpbmctPmhvc3QtPmlfc2IsIE5VTEwsIDApLAotCSAgICAgIHMybHNpKHBhZ2UtPm1hcHBpbmctPmhvc3QtPmlfc2IpLT5sc2lfbG1kLT5sbWRfZGV2LAotCSAgICAgIFBGSUQoJm9iai0+Y29iX2hlYWRlci5jb2hfbHUubG9oX2ZpZCksCi0JICAgICAgKHBhdGggJiYgIUlTX0VSUihwYXRoKSkgPyBwYXRoIDogIiIsIGlvcmV0KTsKKwlDREVCVUcoRF9XQVJOSU5HLAorCSAgICAgICAiJXM6IGRpcnR5IHBhZ2UgZGlzY2FyZDogJXMvZmlkOiAiREZJRCIvJXMgbWF5IGdldCBjb3JydXB0ZWQgIgorCSAgICAgICAiKHJjICVkKVxuIiwgbGxfZ2V0X2ZzbmFtZShwYWdlLT5tYXBwaW5nLT5ob3N0LT5pX3NiLCBOVUxMLCAwKSwKKwkgICAgICAgczJsc2kocGFnZS0+bWFwcGluZy0+aG9zdC0+aV9zYiktPmxzaV9sbWQtPmxtZF9kZXYsCisJICAgICAgIFBGSUQoJm9iai0+Y29iX2hlYWRlci5jb2hfbHUubG9oX2ZpZCksCisJICAgICAgIChwYXRoICYmICFJU19FUlIocGF0aCkpID8gcGF0aCA6ICIiLCBpb3JldCk7CiAKIAlpZiAoZGVudHJ5ICE9IE5VTEwpCiAJCWRwdXQoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX21tYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX21tYXAuYwppbmRleCA5MGIyYzBkLi40MjZjNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbGl0ZV9tbWFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbW1hcC5jCkBAIC01MSwxMCArNTEsNyBAQAogI2luY2x1ZGUgImxsaXRlX2ludGVybmFsLmgiCiAjaW5jbHVkZSA8bGludXgvbHVzdHJlX2NvbXBhdDI1Lmg+CiAKLXN0cnVjdCBwYWdlICpsbF9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgIGludCAqdHlwZSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbGxfZmlsZV92bV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGxsX2ZpbGVfdm1fb3BzOwogCiB2b2lkIHBvbGljeV9mcm9tX3ZtYShsZGxtX3BvbGljeV9kYXRhX3QgKnBvbGljeSwKIAkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLApAQCAtOTcsMTAgKzk0LDEwIEBACiAgKiBccmV0dmFsIEVJTlZBTCBpZiBlbnYgY2FuJ3QgYWxsb2NhdGVkCiAgKiBccmV0dXJuIG90aGVyIGVycm9yIGNvZGVzIGZyb20gY2xfaW9faW5pdC4KICAqLwotc3RydWN0IGNsX2lvICpsbF9mYXVsdF9pb19pbml0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICAgIHN0cnVjdCBsdV9lbnYgKiplbnZfcmV0LAotCQkJICAgICAgIHN0cnVjdCBjbF9lbnZfbmVzdCAqbmVzdCwKLQkJCSAgICAgICBwZ29mZl90IGluZGV4LCB1bnNpZ25lZCBsb25nICpyYV9mbGFncykKK3N0YXRpYyBzdHJ1Y3QgY2xfaW8gKgorbGxfZmF1bHRfaW9faW5pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGx1X2VudiAqKmVudl9yZXQsCisJCSBzdHJ1Y3QgY2xfZW52X25lc3QgKm5lc3QsIHBnb2ZmX3QgaW5kZXgsCisJCSB1bnNpZ25lZCBsb25nICpyYV9mbGFncykKIHsKIAlzdHJ1Y3QgZmlsZQkgICAgICAgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CiAJc3RydWN0IGlub2RlCSAgICAgICAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKQEAgLTQ0NiwxNCArNDQzLDYgQEAKIAlMQVNTRVJUKGF0b21pY19yZWFkKCZ2b2ItPmNvYl9tbWFwX2NudCkgPj0gMCk7CiB9CiAKLQotLyogcmV0dXJuIHRoZSB1c2VyIHNwYWNlIHBvaW50ZXIgdGhhdCBtYXBzIHRvIGEgZmlsZSBvZmZzZXQgdmlhIGEgdm1hICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmlsZV90b191c2VyKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBfX3U2NCBieXRlKQotewotCXJldHVybiB2bWEtPnZtX3N0YXJ0ICsgKGJ5dGUgLSAoKF9fdTY0KXZtYS0+dm1fcGdvZmYgPDwgUEFHRV9DQUNIRV9TSElGVCkpOwotCi19Ci0KIC8qIFhYWCBwdXQgbmljZSBjb21tZW50IGhlcmUuICB0YWxrIGFib3V0IF9fZnJlZV9wdGUgLT4gZGlydHkgcGFnZXMgYW5kCiAgKiBub3BhZ2UncyByZWZlcmVuY2UgcGFzc2luZyB0byB0aGUgcHRlICovCiBpbnQgbGxfdGVhcmRvd25fbW1hcHMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIF9fdTY0IGZpcnN0LCBfX3U2NCBsYXN0KQpAQCAtNDcwLDcgKzQ1OSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGxsX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBsbF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCQk9IGxsX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJCT0gbGxfcGFnZV9ta3dyaXRlLAogCS5vcGVuCQkJPSBsbF92bV9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbmZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbGl0ZV9uZnMuYwppbmRleCAzNTgwMDY5Li5hNjE0YjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbGl0ZV9uZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbGl0ZV9uZnMuYwpAQCAtNTEsNyArNTEsOSBAQAogCV9fdTMyIGtleTAgPSAweDEyYTNmZTJkLCBrZXkxID0gMHgzN2FiZThmOTsKIAl3aGlsZSAobGVuLS0pIHsKIAkJX191MzIga2V5ID0ga2V5MSArIChrZXkwIF4gKCpuYW1lKysgKiA3MTUyMzczKSk7Ci0JCWlmIChrZXkgJiAweDgwMDAwMDAwKSBrZXkgLT0gMHg3ZmZmZmZmZjsKKworCQlpZiAoa2V5ICYgMHg4MDAwMDAwMCkKKwkJCWtleSAtPSAweDdmZmZmZmZmOwogCQlrZXkxID0ga2V5MDsKIAkJa2V5MCA9IGtleTsKIAl9CkBAIC05OCw3ICsxMDAsNyBAQAogCWlmIChpbm9kZSkKIAkJcmV0dXJuIGlub2RlOwogCi0JcmMgPSBsbF9nZXRfbWF4X21kc2l6ZShzYmksICZlYWRhdGFsZW4pOworCXJjID0gbGxfZ2V0X2RlZmF1bHRfbWRzaXplKHNiaSwgJmVhZGF0YWxlbik7CiAJaWYgKHJjKQogCQlyZXR1cm4gRVJSX1BUUihyYyk7CiAKQEAgLTI5MCw3ICsyOTIsNyBAQAogCUNERUJVRyhEX0lORk8sICJnZXR0aW5nIHBhcmVudCBmb3IgKCVsdSwiREZJRCIpXG4iLAogCQkJZGlyLT5pX2lubywgUEZJRChsbF9pbm9kZTJmaWQoZGlyKSkpOwogCi0JcmMgPSBsbF9nZXRfbWF4X21kc2l6ZShzYmksICZsbW1zaXplKTsKKwlyYyA9IGxsX2dldF9kZWZhdWx0X21kc2l6ZShzYmksICZsbW1zaXplKTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIEVSUl9QVFIocmMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbG9vcC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxvb3AuYwppbmRleCBmNzhlZGEyLi4wZmY4YzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbG9vcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsb29wLmMKQEAgLTEyMiw5ICsxMjIsNiBAQAogCWxvZmZfdAkgICAgICAgbG9fb2Zmc2V0OwogCWxvZmZfdAkgICAgICAgbG9fc2l6ZWxpbWl0OwogCWludAkJICBsb19mbGFnczsKLQlpbnQJCSgqaW9jdGwpKHN0cnVjdCBsbG9vcF9kZXZpY2UgKiwgaW50IGNtZCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpOwotCiAJc3RydWN0IGZpbGUJICpsb19iYWNraW5nX2ZpbGU7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlOwogCXVuc2lnbmVkCSAgICAgbG9fYmxvY2tzaXplOwpAQCAtNDA3LDcgKzQwNCw3IEBACiAJaW50IHJlZmNoZWNrOwogCWludCByZXQgPSAwOwogCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUlOX05JQ0UpOwogCiAJbG8tPmxvX3N0YXRlID0gTExPT1BfQk9VTkQ7CiAKQEAgLTUwOSw3ICs1MDYsNiBAQAogCWxvLT5sb19kZXZpY2UgPSBiZGV2OwogCWxvLT5sb19mbGFncyA9IGxvX2ZsYWdzOwogCWxvLT5sb19iYWNraW5nX2ZpbGUgPSBmaWxlOwotCWxvLT5pb2N0bCA9IE5VTEw7CiAJbG8tPmxvX3NpemVsaW1pdCA9IDA7CiAJbG8tPm9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbG8tPm9sZF9nZnBfbWFzayAmIH4oX19HRlBfSU98X19HRlBfRlMpKTsKQEAgLTU2OCw3ICs1NjQsNiBAQAogCiAJZG93bigmbG8tPmxvX3NlbSk7CiAJbG8tPmxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7Ci0JbG8tPmlvY3RsID0gTlVMTDsKIAlsby0+bG9fZGV2aWNlID0gTlVMTDsKIAlsby0+bG9fb2Zmc2V0ID0gMDsKIAlsby0+bG9fc2l6ZWxpbWl0ID0gMDsKQEAgLTYyNCw3ICs2MTksMTAgQEAKIAljYXNlIExMX0lPQ19MTE9PUF9JTkZPOiB7CiAJCXN0cnVjdCBsdV9maWQgZmlkOwogCi0JCUxBU1NFUlQobG8tPmxvX2JhY2tpbmdfZmlsZSAhPSBOVUxMKTsKKwkJaWYgKGxvLT5sb19iYWNraW5nX2ZpbGUgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CiAJCWlmIChpbm9kZSA9PSBOVUxMKQogCQkJaW5vZGUgPSBsby0+bG9fYmFja2luZ19maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAkJaWYgKGxvLT5sb19zdGF0ZSA9PSBMTE9PUF9CT1VORCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xwcm9jX2xsaXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9scHJvY19sbGl0ZS5jCmluZGV4IGE5YTEwNGEuLjc3ZWU5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xwcm9jX2xsaXRlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbHByb2NfbGxpdGUuYwpAQCAtNDEsMTIgKzQxLDEyIEBACiAjaW5jbHVkZSA8b2JkX3N1cHBvcnQuaD4KIAogI2luY2x1ZGUgImxsaXRlX2ludGVybmFsLmgiCisjaW5jbHVkZSAidnZwX2ludGVybmFsLmgiCiAKIC8qIC9wcm9jL2x1c3RyZS9sbGl0ZSBtb3VudCBwb2ludCByZWdpc3RyYXRpb24gKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ2cF9kdW1wX3BnY2FjaGVfZmlsZV9vcHM7Ci1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3J3X2V4dGVudHNfc3RhdHNfZm9wczsKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGxfcndfZXh0ZW50c19zdGF0c19wcF9mb3BzOwotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsbF9yd19vZmZzZXRfc3RhdHNfZm9wczsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3J3X2V4dGVudHNfc3RhdHNfZm9wczsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3J3X2V4dGVudHNfc3RhdHNfcHBfZm9wczsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxsX3J3X29mZnNldF9zdGF0c19mb3BzOwogCiBzdGF0aWMgaW50IGxsX2Jsa3NpemVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewpAQCAtMzY3LDggKzM2Nyw5IEBACiAJCQljYWNoZS0+Y2NjX2xydV9zaHJpbmtlcnMpOwogfQogCi1zdGF0aWMgc3NpemVfdCBsbF9tYXhfY2FjaGVkX21iX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCitzdGF0aWMgc3NpemVfdCBsbF9tYXhfY2FjaGVkX21iX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICgoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfczJzYmkoc2IpOwpAQCAtMzc2LDkgKzM3NywxOCBAQAogCWludCBtdWx0LCByYywgcGFnZXNfbnVtYmVyOwogCWludCBkaWZmID0gMDsKIAlpbnQgbnJwYWdlcyA9IDA7CisJY2hhciBrZXJuYnVmWzEyOF07CisKKwlpZiAoY291bnQgPj0gc2l6ZW9mKGtlcm5idWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihrZXJuYnVmLCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJa2VybmJ1Zltjb3VudF0gPSAwOwogCiAJbXVsdCA9IDEgPDwgKDIwIC0gUEFHRV9DQUNIRV9TSElGVCk7Ci0JYnVmZmVyID0gbHByb2Nmc19maW5kX25hbWVkX3ZhbHVlKGJ1ZmZlciwgIm1heF9jYWNoZWRfbWI6IiwgJmNvdW50KTsKKwlidWZmZXIgKz0gbHByb2Nmc19maW5kX25hbWVkX3ZhbHVlKGtlcm5idWYsICJtYXhfY2FjaGVkX21iOiIsICZjb3VudCkgLQorCQkgIGtlcm5idWY7CiAJcmMgPSBscHJvY2ZzX3dyaXRlX2ZyYWNfaGVscGVyKGJ1ZmZlciwgY291bnQsICZwYWdlc19udW1iZXIsIG11bHQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtNjgxLDcgKzY5MSw3IEBACiB9CiBMUFJPQ19TRVFfRk9QUyhsbF9sYXp5c3RhdGZzKTsKIAotc3RhdGljIGludCBsbF9tYXhlYV9zaXplX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3N0YXRpYyBpbnQgbGxfbWF4X2Vhc2l6ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG0tPnByaXZhdGU7CiAJc3RydWN0IGxsX3NiX2luZm8gKnNiaSA9IGxsX3Myc2JpKHNiKTsKQEAgLTY5NCw3ICs3MDQsNTIgQEAKIAogCXJldHVybiBzZXFfcHJpbnRmKG0sICIldVxuIiwgZWFsZW4pOwogfQotTFBST0NfU0VRX0ZPUFNfUk8obGxfbWF4ZWFfc2l6ZSk7CitMUFJPQ19TRVFfRk9QU19STyhsbF9tYXhfZWFzaXplKTsKKworc3RhdGljIGludCBsbF9kZWZ1bHRfZWFzaXplX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfczJzYmkoc2IpOworCXVuc2lnbmVkIGludCBlYWxlbjsKKwlpbnQgcmM7CisKKwlyYyA9IGxsX2dldF9kZWZhdWx0X21kc2l6ZShzYmksICZlYWxlbik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gc2VxX3ByaW50ZihtLCAiJXVcbiIsIGVhbGVuKTsKK30KK0xQUk9DX1NFUV9GT1BTX1JPKGxsX2RlZnVsdF9lYXNpemUpOworCitzdGF0aWMgaW50IGxsX21heF9jb29raWVzaXplX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfczJzYmkoc2IpOworCXVuc2lnbmVkIGludCBjb29raWVsZW47CisJaW50IHJjOworCisJcmMgPSBsbF9nZXRfbWF4X2Nvb2tpZXNpemUoc2JpLCAmY29va2llbGVuKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJldHVybiBzZXFfcHJpbnRmKG0sICIldVxuIiwgY29va2llbGVuKTsKK30KK0xQUk9DX1NFUV9GT1BTX1JPKGxsX21heF9jb29raWVzaXplKTsKKworc3RhdGljIGludCBsbF9kZWZ1bHRfY29va2llc2l6ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG0tPnByaXZhdGU7CisJc3RydWN0IGxsX3NiX2luZm8gKnNiaSA9IGxsX3Myc2JpKHNiKTsKKwl1bnNpZ25lZCBpbnQgY29va2llbGVuOworCWludCByYzsKKworCXJjID0gbGxfZ2V0X2RlZmF1bHRfY29va2llc2l6ZShzYmksICZjb29raWVsZW4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHNlcV9wcmludGYobSwgIiV1XG4iLCBjb29raWVsZW4pOworfQorTFBST0NfU0VRX0ZPUFNfUk8obGxfZGVmdWx0X2Nvb2tpZXNpemUpOwogCiBzdGF0aWMgaW50IGxsX3NiaV9mbGFnc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CkBAIC03ODEsNyArODM2LDEwIEBACiAJeyAic3RhdGFoZWFkX2FnbCIsICAgICZsbF9zdGF0YWhlYWRfYWdsX2ZvcHMsIDAgfSwKIAl7ICJzdGF0YWhlYWRfc3RhdHMiLCAgJmxsX3N0YXRhaGVhZF9zdGF0c19mb3BzLCAwLCAwIH0sCiAJeyAibGF6eXN0YXRmcyIsICAgICAgICZsbF9sYXp5c3RhdGZzX2ZvcHMsIDAgfSwKLQl7ICJtYXhfZWFzaXplIiwgICAgICAgJmxsX21heGVhX3NpemVfZm9wcywgMCwgMCB9LAorCXsgIm1heF9lYXNpemUiLCAgICAgICAmbGxfbWF4X2Vhc2l6ZV9mb3BzLCAwLCAwIH0sCisJeyAiZGVmYXVsdF9lYXNpemUiLCAgICZsbF9kZWZ1bHRfZWFzaXplX2ZvcHMsIDAsIDAgfSwKKwl7ICJtYXhfY29va2llc2l6ZSIsICAgJmxsX21heF9jb29raWVzaXplX2ZvcHMsIDAsIDAgfSwKKwl7ICJkZWZhdWx0X2Nvb2tpZXNpemUiLCAmbGxfZGVmdWx0X2Nvb2tpZXNpemVfZm9wcywgMCwgMCB9LAogCXsgInNiaV9mbGFncyIsCSAgICAgICZsbF9zYmlfZmxhZ3NfZm9wcywgMCwgMCB9LAogCXsgInhhdHRyX2NhY2hlIiwgICAgICAmbGxfeGF0dHJfY2FjaGVfZm9wcywgMCwgMCB9LAogCXsgMCB9CkBAIC03ODksNyArODQ3LDcgQEAKIAogI2RlZmluZSBNQVhfU1RSSU5HX1NJWkUgMTI4CiAKLXN0cnVjdCBsbGl0ZV9maWxlX29wY29kZSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxsaXRlX2ZpbGVfb3Bjb2RlIHsKIAlfX3UzMiAgICAgICBvcGNvZGU7CiAJX191MzIgICAgICAgdHlwZTsKIAljb25zdCBjaGFyICpvcG5hbWU7CkBAIC0xMTE1LDcgKzExNzMsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBsbF9yd19leHRlbnRzX3N0YXRzX3BwX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgbGVuLAogCQkJCQkJbG9mZl90ICpvZmYpCiB7CiAJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xMTI0LDEwICsxMTgzLDI0IEBACiAJaW50IGk7CiAJaW50IHZhbHVlID0gMSwgcmMgPSAwOwogCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJjID0gbHByb2Nmc193cml0ZV9oZWxwZXIoYnVmLCBsZW4sICZ2YWx1ZSk7Ci0JaWYgKHJjIDwgMCAmJiAoc3RyY21wKGJ1ZiwgImRpc2FibGVkIikgPT0gMCB8fAotCQkgICAgICAgc3RyY21wKGJ1ZiwgIkRpc2FibGVkIikgPT0gMCkpCi0JCXZhbHVlID0gMDsKKwlpZiAocmMgPCAwICYmIGxlbiA8IDE2KSB7CisJCWNoYXIga2VybmJ1ZlsxNl07CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5idWYsIGJ1ZiwgbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlrZXJuYnVmW2xlbl0gPSAwOworCisJCWlmIChrZXJuYnVmW2xlbiAtIDFdID09ICdcbicpCisJCQlrZXJuYnVmW2xlbiAtIDFdID0gMDsKKworCQlpZiAoc3RyY21wKGtlcm5idWYsICJkaXNhYmxlZCIpID09IDAgfHwKKwkJICAgIHN0cmNtcChrZXJuYnVmLCAiRGlzYWJsZWQiKSA9PSAwKQorCQkJdmFsdWUgPSAwOworCX0KIAogCWlmICh2YWx1ZSA9PSAwKQogCQlzYmktPmxsX3J3X3N0YXRzX29uID0gMDsKQEAgLTExNzQsOCArMTI0Nyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGxsX3J3X2V4dGVudHNfc3RhdHNfc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCi0JCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmKQorc3RhdGljIHNzaXplX3QgbGxfcndfZXh0ZW50c19zdGF0c19zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZikKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gc2VxLT5wcml2YXRlOwpAQCAtMTE4MywxNSArMTI1NywzMCBAQAogCWludCBpOwogCWludCB2YWx1ZSA9IDEsIHJjID0gMDsKIAorCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyYyA9IGxwcm9jZnNfd3JpdGVfaGVscGVyKGJ1ZiwgbGVuLCAmdmFsdWUpOwotCWlmIChyYyA8IDAgJiYgKHN0cmNtcChidWYsICJkaXNhYmxlZCIpID09IDAgfHwKLQkJICAgICAgIHN0cmNtcChidWYsICJEaXNhYmxlZCIpID09IDApKQotCQl2YWx1ZSA9IDA7CisJaWYgKHJjIDwgMCAmJiBsZW4gPCAxNikgeworCQljaGFyIGtlcm5idWZbMTZdOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihrZXJuYnVmLCBidWYsIGxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJa2VybmJ1ZltsZW5dID0gMDsKKworCQlpZiAoa2VybmJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJa2VybmJ1ZltsZW4gLSAxXSA9IDA7CisKKwkJaWYgKHN0cmNtcChrZXJuYnVmLCAiZGlzYWJsZWQiKSA9PSAwIHx8CisJCSAgICBzdHJjbXAoa2VybmJ1ZiwgIkRpc2FibGVkIikgPT0gMCkKKwkJCXZhbHVlID0gMDsKKwl9CiAKIAlpZiAodmFsdWUgPT0gMCkKIAkJc2JpLT5sbF9yd19zdGF0c19vbiA9IDA7CiAJZWxzZQogCQlzYmktPmxsX3J3X3N0YXRzX29uID0gMTsKKwogCXNwaW5fbG9jaygmc2JpLT5sbF9wcF9leHRlbnRfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8PSBMTF9QUk9DRVNTX0hJU1RfTUFYOyBpKyspIHsKIAkJaW9fZXh0ZW50cy0+cHBfZXh0ZW50c1tpXS5waWQgPSAwOwpAQCAtMTIwMiw3ICsxMjkxLDYgQEAKIAogCXJldHVybiBsZW47CiB9Ci0KIExQUk9DX1NFUV9GT1BTKGxsX3J3X2V4dGVudHNfc3RhdHMpOwogCiB2b2lkIGxsX3J3X3N0YXRzX3RhbGx5KHN0cnVjdCBsbF9zYl9pbmZvICpzYmksIHBpZF90IHBpZCwKQEAgLTEzNjIsOCArMTQ1MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGxsX3J3X29mZnNldF9zdGF0c19zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCitzdGF0aWMgc3NpemVfdCBsbF9yd19vZmZzZXRfc3RhdHNfc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmKQogewogCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBsbF9zYl9pbmZvICpzYmkgPSBzZXEtPnByaXZhdGU7CkBAIC0xMzcxLDExICsxNDYwLDI1IEBACiAJc3RydWN0IGxsX3J3X3Byb2Nlc3NfaW5mbyAqb2Zmc2V0X2luZm8gPSBzYmktPmxsX3J3X29mZnNldF9pbmZvOwogCWludCB2YWx1ZSA9IDEsIHJjID0gMDsKIAorCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyYyA9IGxwcm9jZnNfd3JpdGVfaGVscGVyKGJ1ZiwgbGVuLCAmdmFsdWUpOwogCi0JaWYgKHJjIDwgMCAmJiAoc3RyY21wKGJ1ZiwgImRpc2FibGVkIikgPT0gMCB8fAotCQkJICAgc3RyY21wKGJ1ZiwgIkRpc2FibGVkIikgPT0gMCkpCi0JCXZhbHVlID0gMDsKKwlpZiAocmMgPCAwICYmIGxlbiA8IDE2KSB7CisJCWNoYXIga2VybmJ1ZlsxNl07CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5idWYsIGJ1ZiwgbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlrZXJuYnVmW2xlbl0gPSAwOworCisJCWlmIChrZXJuYnVmW2xlbiAtIDFdID09ICdcbicpCisJCQlrZXJuYnVmW2xlbiAtIDFdID0gMDsKKworCQlpZiAoc3RyY21wKGtlcm5idWYsICJkaXNhYmxlZCIpID09IDAgfHwKKwkJICAgIHN0cmNtcChrZXJuYnVmLCAiRGlzYWJsZWQiKSA9PSAwKQorCQkJdmFsdWUgPSAwOworCX0KIAogCWlmICh2YWx1ZSA9PSAwKQogCQlzYmktPmxsX3J3X3N0YXRzX29uID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL25hbWVpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jCmluZGV4IDI1YTZlYTU4Li5kZmExZTc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbmFtZWkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jCkBAIC03NSwxNCArNzUsNiBAQAogCXJldHVybiBtb3VudGVkOwogfQogCi1pbnQgbGxfdW5sb2NrKF9fdTMyIG1vZGUsIHN0cnVjdCBsdXN0cmVfaGFuZGxlICpsb2NraCkKLXsKLQlsZGxtX2xvY2tfZGVjcmVmKGxvY2toLCBtb2RlKTsKLQotCXJldHVybiAwOwotfQotCi0KIC8qIGNhbGxlZCBmcm9tIGlnZXQ1X2xvY2tlZC0+ZmluZF9pbm9kZSgpIHVuZGVyIGlub2RlX2hhc2hfbG9jayBzcGlubG9jayAqLwogc3RhdGljIGludCBsbF90ZXN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSkKIHsKQEAgLTQzMywxMiArNDI1LDEwIEBACiAJcmV0dXJuIGRlOwogfQogCi1pbnQgbGxfbG9va3VwX2l0X2ZpbmlzaChzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QsCi0JCQlzdHJ1Y3QgbG9va3VwX2ludGVudCAqaXQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGxsX2xvb2t1cF9pdF9maW5pc2goc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJICAgICAgIHN0cnVjdCBsb29rdXBfaW50ZW50ICppdCwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqKmRlKQogewotCXN0cnVjdCBpdF9jYl9kYXRhICppY2JkID0gZGF0YTsKLQlzdHJ1Y3QgZGVudHJ5ICoqZGUgPSBpY2JkLT5pY2JkX2NoaWxkcDsKLQlzdHJ1Y3QgaW5vZGUgKnBhcmVudCA9IGljYmQtPmljYmRfcGFyZW50OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCV9fdTY0IGJpdHMgPSAwOwogCWludCByYzsKQEAgLTUxMyw3ICs1MDMsNiBAQAogCXN0cnVjdCBkZW50cnkgKnNhdmUgPSBkZW50cnksICpyZXR2YWw7CiAJc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCXN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhOwotCXN0cnVjdCBpdF9jYl9kYXRhIGljYmQ7CiAJX191MzIgb3BjOwogCWludCByYzsKIApAQCAtNTI3LDcgKzUxNiw4IEBACiAJaWYgKGRfbW91bnRwb2ludChkZW50cnkpKQogCQlDRVJST1IoIlRlbGwgUGV0ZXIsIGxvb2t1cCBvbiBtdHB0LCBpdCAlc1xuIiwgTExfSVQyU1RSKGl0KSk7CiAKLQlsbF9mcm9iX2ludGVudCgmaXQsICZsb29rdXBfaXQpOworCWlmIChpdCA9PSBOVUxMIHx8IGl0LT5pdF9vcCA9PSBJVF9HRVRYQVRUUikKKwkJaXQgPSAmbG9va3VwX2l0OwogCiAJaWYgKGl0LT5pdF9vcCA9PSBJVF9HRVRBVFRSKSB7CiAJCXJjID0gbGxfc3RhdGFoZWFkX2VudGVyKHBhcmVudCwgJmRlbnRyeSwgMCk7CkBAIC01MzgsOSArNTI4LDYgQEAKIAkJfQogCX0KIAotCWljYmQuaWNiZF9jaGlsZHAgPSAmZGVudHJ5OwotCWljYmQuaWNiZF9wYXJlbnQgPSBwYXJlbnQ7Ci0KIAlpZiAoaXQtPml0X29wICYgSVRfQ1JFQVQpCiAJCW9wYyA9IExVU1RSRV9PUENfQ1JFQVRFOwogCWVsc2UKQEAgLTU2Miw3ICs1NDksNyBAQAogCWlmIChyYyA8IDApCiAJCUdPVE8ob3V0LCByZXR2YWwgPSBFUlJfUFRSKHJjKSk7CiAKLQlyYyA9IGxsX2xvb2t1cF9pdF9maW5pc2gocmVxLCBpdCwgJmljYmQpOworCXJjID0gbGxfbG9va3VwX2l0X2ZpbmlzaChyZXEsIGl0LCBwYXJlbnQsICZkZW50cnkpOwogCWlmIChyYyAhPSAwKSB7CiAJCWxsX2ludGVudF9yZWxlYXNlKGl0KTsKIAkJR09UTyhvdXQsIHJldHZhbCA9IEVSUl9QVFIocmMpKTsKQEAgLTY5NywxMCArNjg0LDcgQEAKIAogCiAvKiBXZSBkZXBlbmQgb24gIm1vZGUiIGJlaW5nIHNldCB3aXRoIHRoZSBwcm9wZXIgZmlsZSB0eXBlL3VtYXNrIGJ5IG5vdyAqLwotc3RhdGljIHN0cnVjdCBpbm9kZSAqbGxfY3JlYXRlX25vZGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIGludCBuYW1lbGVuLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbiwKLQkJCQkgICAgaW50IG1vZGUsIF9fdTY0IGV4dHJhLAotCQkJCSAgICBzdHJ1Y3QgbG9va3VwX2ludGVudCAqaXQpCitzdGF0aWMgc3RydWN0IGlub2RlICpsbF9jcmVhdGVfbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxdWVzdCA9IE5VTEw7CkBAIC03NTcsMTQgKzc0MSwxMCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaW5vZGUgPSBsbF9jcmVhdGVfbm9kZShkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCSAgICAgICBOVUxMLCAwLCBtb2RlLCAwLCBpdCk7CisJaW5vZGUgPSBsbF9jcmVhdGVfbm9kZShkaXIsIGl0KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwogCi0JaWYgKGZpbGVuYW1lX2lzX3ZvbGF0aWxlKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgTlVMTCkpCi0JCWxsX2kyaW5mbyhpbm9kZSktPmxsaV92b2xhdGlsZSA9IHRydWU7Ci0KIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXJldHVybiAwOwogfQpAQCAtMTIzOCw3ICsxMjE4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsbF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxsX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5ta25vZAkgICAgICA9IGxsX21rbm9kLAogCS5hdG9taWNfb3BlbgkgICAgPSBsbF9hdG9taWNfb3BlbiwKIAkubG9va3VwCSAgICAgPSBsbF9sb29rdXBfbmQsCkBAIC0xMjYwLDcgKzEyNDAsNyBAQAogCS5nZXRfYWNsCSAgICA9IGxsX2dldF9hY2wsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsbF9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsbF9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnNldGF0dHIJPSBsbF9zZXRhdHRyLAogCS5nZXRhdHRyCT0gbGxfZ2V0YXR0ciwKIAkucGVybWlzc2lvbiAgICAgPSBsbF9pbm9kZV9wZXJtaXNzaW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvcmVtb3RlX3Blcm0uYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3JlbW90ZV9wZXJtLmMKaW5kZXggZGVkZDU2YS4uYThiMTExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvcmVtb3RlX3Blcm0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9yZW1vdGVfcGVybS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJT0JEX1NMQUJfRlJFRShscnAsIGxsX3JlbW90ZV9wZXJtX2NhY2hlcCwgc2l6ZW9mKCpscnApKTsKIH0KIAotc3RydWN0IGhsaXN0X2hlYWQgKmFsbG9jX3JtdHBlcm1faGFzaCh2b2lkKQorc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICphbGxvY19ybXRwZXJtX2hhc2godm9pZCkKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaDsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3J3LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9ydy5jCmluZGV4IDQxNmY3YTAuLmYwMTIyYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3J3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvcncuYwpAQCAtNzcsMTIgKzc3LDYgQEAKIAkJY2xfcGFnZV9wdXQoZW52LCBwYWdlKTsKIAl9CiAKLQlpZiAoaW8gJiYgbGNjLT5sY2NfY3JlYXRlZCkgewotCQljbF9pb19lbmQoZW52LCBpbyk7Ci0JCWNsX2lvX3VubG9jayhlbnYsIGlvKTsKLQkJY2xfaW9faXRlcl9maW5pKGVudiwgaW8pOwotCQljbF9pb19maW5pKGVudiwgaW8pOwotCX0KIAljbF9lbnZfcHV0KGVudiwgJmxjYy0+bGNjX3JlZmNoZWNrKTsKIH0KIApAQCAtMTY3LDcgKzE2MSw2IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJcmVzdWx0ID0gaW8tPmNpX3Jlc3VsdDsKLQkJbGNjLT5sY2NfY3JlYXRlZCA9IDE7CiAJfQogCiAJbGNjLT5sY2NfaW8gPSBpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3J3MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3J3MjYuYwppbmRleCA3ZTNlMDk2Li41NWNhOGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9ydzI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvcncyNi5jCkBAIC0zODUsOCArMzg1LDggQEAKIAlpZiAoKGZpbGVfb2Zmc2V0ICYgfkNGU19QQUdFX01BU0spIHx8IChjb3VudCAmIH5DRlNfUEFHRV9NQVNLKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDppbm9kZT0lbHUvJXUoJXApLCBzaXplPSVsdSAobWF4ICVsdSksICIKLQkgICAgICAgIm9mZnNldD0lbGxkPSVsbHgsIHBhZ2VzICVsdSAobWF4ICVsdSlcbiIsCisJQ0RFQlVHKERfVkZTVFJBQ0UsCisJICAgICAgICJWRlMgT3A6aW5vZGU9JWx1LyV1KCVwKSwgc2l6ZT0lemQgKG1heCAlbHUpLCBvZmZzZXQ9JWxsZD0lbGx4LCBwYWdlcyAlemQgKG1heCAlbHUpXG4iLAogCSAgICAgICBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX2dlbmVyYXRpb24sIGlub2RlLCBjb3VudCwgTUFYX0RJT19TSVpFLAogCSAgICAgICBmaWxlX29mZnNldCwgZmlsZV9vZmZzZXQsIGNvdW50ID4+IFBBR0VfQ0FDSEVfU0hJRlQsCiAJICAgICAgIE1BWF9ESU9fU0laRSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKQEAgLTUyOSw5ICs1MjksOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgotaW50IGxsX21pZ3JhdGVwYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UKLQkJLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlCitzdGF0aWMgaW50IGxsX21pZ3JhdGVwYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJIHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlCiAJCSkKIHsKIAkvKiBBbHdheXMgZmFpbCBwYWdlIG1pZ3JhdGlvbiB1bnRpbCB3ZSBoYXZlIGEgcHJvcGVyIGltcGxlbWVudGF0aW9uICovCkBAIC01NDAsOSArNTQwLDggQEAKICNlbmRpZgogCiAjaWZuZGVmIE1TX0hBU19ORVdfQU9QUwotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBsbF9hb3BzID0gewotCS5yZWFkcGFnZSAgICAgICA9IGxsX3JlYWRwYWdlLAotLy8JLnJlYWRwYWdlcyAgICAgID0gbGxfcmVhZHBhZ2VzLAorY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBsbF9hb3BzID0geworCS5yZWFkcGFnZQk9IGxsX3JlYWRwYWdlLAogCS5kaXJlY3RfSU8gICAgICA9IGxsX2RpcmVjdF9JT18yNiwKIAkud3JpdGVwYWdlICAgICAgPSBsbF93cml0ZXBhZ2UsCiAJLndyaXRlcGFnZXMgICAgID0gbGxfd3JpdGVwYWdlcywKQEAgLTU1NCwxMCArNTUzLDkgQEAKICNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCiAJLm1pZ3JhdGVwYWdlICAgID0gbGxfbWlncmF0ZXBhZ2UsCiAjZW5kaWYKLQkuYm1hcAkgICA9IE5VTEwKIH07CiAjZWxzZQotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc19leHQgbGxfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNfZXh0IGxsX2FvcHMgPSB7CiAJLm9yaWdfYW9wcy5yZWFkcGFnZSAgICAgICA9IGxsX3JlYWRwYWdlLAogLy8JLm9yaWdfYW9wcy5yZWFkcGFnZXMgICAgICA9IGxsX3JlYWRwYWdlcywKIAkub3JpZ19hb3BzLmRpcmVjdF9JTyAgICAgID0gbGxfZGlyZWN0X0lPXzI2LApAQCAtNTcxLDcgKzU2OSw2IEBACiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgogCS5vcmlnX2FvcHMubWlncmF0ZXBhZ2UgICAgPSBsbF9taWdyYXRlcGFnZSwKICNlbmRpZgotCS5vcmlnX2FvcHMuYm1hcAkgICA9IE5VTEwsCiAJLndyaXRlX2JlZ2luICAgID0gbGxfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZCAgICAgID0gbGxfd3JpdGVfZW5kCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvc3RhdGFoZWFkLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9zdGF0YWhlYWQuYwppbmRleCBjODYyNGI1Li4xYjQ3Nzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9zdGF0YWhlYWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9zdGF0YWhlYWQuYwpAQCAtOTU4LDEzICs5NTgsMTggQEAKIAlzdHJ1Y3QgcHRscnBjX3RocmVhZCAgICAgKnRocmVhZCA9ICZzYWktPnNhaV9hZ2xfdGhyZWFkOwogCXN0cnVjdCBsX3dhaXRfaW5mbwlsd2kgICAgPSB7IDAgfTsKIAotCUNERUJVRyhEX1JFQURBLCAiYWdsIHRocmVhZCBzdGFydGVkOiBbcGlkICVkXSBbcGFyZW50ICUuKnNdXG4iLAotCSAgICAgICBjdXJyZW50X3BpZCgpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCXRocmVhZC0+dF9waWQgPSBjdXJyZW50X3BpZCgpOworCUNERUJVRyhEX1JFQURBLCAiYWdsIHRocmVhZCBzdGFydGVkOiBzYWkgJXAsIHBhcmVudCAlLipzXG4iLAorCSAgICAgICBzYWksIHBhcmVudC0+ZF9uYW1lLmxlbiwgcGFyZW50LT5kX25hbWUubmFtZSk7CiAKIAlhdG9taWNfaW5jKCZzYmktPmxsX2FnbF90b3RhbCk7CiAJc3Bpbl9sb2NrKCZwbGxpLT5sbGlfYWdsX2xvY2spOwogCXNhaS0+c2FpX2FnbF92YWxpZCA9IDE7Ci0JdGhyZWFkX3NldF9mbGFncyh0aHJlYWQsIFNWQ19SVU5OSU5HKTsKKwlpZiAodGhyZWFkX2lzX2luaXQodGhyZWFkKSkKKwkJLyogSWYgc29tZW9uZSBlbHNlIGhhcyBjaGFuZ2VkIHRoZSB0aHJlYWQgc3RhdGUKKwkJICogKGUuZy4gYWxyZWFkeSBjaGFuZ2VkIHRvIFNWQ19TVE9QUElORyksIHdlIGNhbid0IGp1c3QKKwkJICogYmxpbmRseSBvdmVyd3JpdGUgdGhhdCBzZXR0aW5nLiAqLworCQl0aHJlYWRfc2V0X2ZsYWdzKHRocmVhZCwgU1ZDX1JVTk5JTkcpOwogCXNwaW5fdW5sb2NrKCZwbGxpLT5sbGlfYWdsX2xvY2spOwogCXdha2VfdXAoJnRocmVhZC0+dF9jdGxfd2FpdHEpOwogCkBAIC0xMDA0LDggKzEwMDksOCBAQAogCXNwaW5fdW5sb2NrKCZwbGxpLT5sbGlfYWdsX2xvY2spOwogCXdha2VfdXAoJnRocmVhZC0+dF9jdGxfd2FpdHEpOwogCWxsX3NhaV9wdXQoc2FpKTsKLQlDREVCVUcoRF9SRUFEQSwgImFnbCB0aHJlYWQgc3RvcHBlZDogW3BpZCAlZF0gW3BhcmVudCAlLipzXVxuIiwKLQkgICAgICAgY3VycmVudF9waWQoKSwgcGFyZW50LT5kX25hbWUubGVuLCBwYXJlbnQtPmRfbmFtZS5uYW1lKTsKKwlDREVCVUcoRF9SRUFEQSwgImFnbCB0aHJlYWQgc3RvcHBlZDogc2FpICVwLCBwYXJlbnQgJS4qc1xuIiwKKwkgICAgICAgc2FpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDE2LDggKzEwMjEsOCBAQAogCXN0cnVjdCBsbF9pbm9kZV9pbmZvICAqcGxsaTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAKLQlDREVCVUcoRF9SRUFEQSwgInN0YXJ0IGFnbCB0aHJlYWQ6IFtwaWQgJWRdIFtwYXJlbnQgJS4qc11cbiIsCi0JICAgICAgIGN1cnJlbnRfcGlkKCksIHBhcmVudC0+ZF9uYW1lLmxlbiwgcGFyZW50LT5kX25hbWUubmFtZSk7CisJQ0RFQlVHKERfUkVBREEsICJzdGFydCBhZ2wgdGhyZWFkOiBzYWkgJXAsIHBhcmVudCAlLipzXG4iLAorCSAgICAgICBzYWksIHBhcmVudC0+ZF9uYW1lLmxlbiwgcGFyZW50LT5kX25hbWUubmFtZSk7CiAKIAlwbGxpID0gbGxfaTJpbmZvKHBhcmVudC0+ZF9pbm9kZSk7CiAJdGFzayA9IGt0aHJlYWRfcnVuKGxsX2FnbF90aHJlYWQsIHBhcmVudCwKQEAgLTEwNTAsMTUgKzEwNTUsMjAgQEAKIAlzdHJ1Y3QgbGxfZGlyX2NoYWluICAgICAgIGNoYWluOwogCXN0cnVjdCBsX3dhaXRfaW5mbwlsd2kgICAgPSB7IDAgfTsKIAotCUNERUJVRyhEX1JFQURBLCAic3RhdGFoZWFkIHRocmVhZCBzdGFydGVkOiBbcGlkICVkXSBbcGFyZW50ICUuKnNdXG4iLAotCSAgICAgICBjdXJyZW50X3BpZCgpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCXRocmVhZC0+dF9waWQgPSBjdXJyZW50X3BpZCgpOworCUNERUJVRyhEX1JFQURBLCAic3RhdGFoZWFkIHRocmVhZCBzdGFydGluZzogc2FpICVwLCBwYXJlbnQgJS4qc1xuIiwKKwkgICAgICAgc2FpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOwogCiAJaWYgKHNiaS0+bGxfZmxhZ3MgJiBMTF9TQklfQUdMX0VOQUJMRUQpCiAJCWxsX3N0YXJ0X2FnbChwYXJlbnQsIHNhaSk7CiAKIAlhdG9taWNfaW5jKCZzYmktPmxsX3NhX3RvdGFsKTsKIAlzcGluX2xvY2soJnBsbGktPmxsaV9zYV9sb2NrKTsKLQl0aHJlYWRfc2V0X2ZsYWdzKHRocmVhZCwgU1ZDX1JVTk5JTkcpOworCWlmICh0aHJlYWRfaXNfaW5pdCh0aHJlYWQpKQorCQkvKiBJZiBzb21lb25lIGVsc2UgaGFzIGNoYW5nZWQgdGhlIHRocmVhZCBzdGF0ZQorCQkgKiAoZS5nLiBhbHJlYWR5IGNoYW5nZWQgdG8gU1ZDX1NUT1BQSU5HKSwgd2UgY2FuJ3QganVzdAorCQkgKiBibGluZGx5IG92ZXJ3cml0ZSB0aGF0IHNldHRpbmcuICovCisJCXRocmVhZF9zZXRfZmxhZ3ModGhyZWFkLCBTVkNfUlVOTklORyk7CiAJc3Bpbl91bmxvY2soJnBsbGktPmxsaV9zYV9sb2NrKTsKIAl3YWtlX3VwKCZ0aHJlYWQtPnRfY3RsX3dhaXRxKTsKIApAQCAtMTIyMCw5ICsxMjMwLDcgQEAKIAkJCSAqLwogCQkJbGxfcmVsZWFzZV9wYWdlKHBhZ2UsIGxlMzJfdG9fY3B1KGRwLT5sZHBfZmxhZ3MpICYKIAkJCQkJICAgICAgTERGX0NPTExJREUpOwotCQkJc2FpLT5zYWlfaW5fcmVhZHBhZ2UgPSAxOwogCQkJcGFnZSA9IGxsX2dldF9kaXJfcGFnZShkaXIsIHBvcywgJmNoYWluKTsKLQkJCXNhaS0+c2FpX2luX3JlYWRwYWdlID0gMDsKIAkJfSBlbHNlIHsKIAkJCUxBU1NFUlQobGUzMl90b19jcHUoZHAtPmxkcF9mbGFncykgJiBMREZfQ09MTElERSk7CiAJCQlsbF9yZWxlYXNlX3BhZ2UocGFnZSwgMSk7CkBAIC0xMjM5LDggKzEyNDcsOCBAQAogCQlzcGluX3VubG9jaygmcGxsaS0+bGxpX2FnbF9sb2NrKTsKIAkJd2FrZV91cCgmYWdsX3RocmVhZC0+dF9jdGxfd2FpdHEpOwogCi0JCUNERUJVRyhEX1JFQURBLCAic3RvcCBhZ2wgdGhyZWFkOiBbcGlkICVkXVxuIiwKLQkJICAgICAgIGN1cnJlbnRfcGlkKCkpOworCQlDREVCVUcoRF9SRUFEQSwgInN0b3AgYWdsIHRocmVhZDogc2FpICVwIHBpZCAldVxuIiwKKwkJICAgICAgIHNhaSwgKHVuc2lnbmVkIGludClhZ2xfdGhyZWFkLT50X3BpZCk7CiAJCWxfd2FpdF9ldmVudChhZ2xfdGhyZWFkLT50X2N0bF93YWl0cSwKIAkJCSAgICAgdGhyZWFkX2lzX3N0b3BwZWQoYWdsX3RocmVhZCksCiAJCQkgICAgICZsd2kpOwpAQCAtMTI2Niw4ICsxMjc0LDggQEAKIAl3YWtlX3VwKCZ0aHJlYWQtPnRfY3RsX3dhaXRxKTsKIAlsbF9zYWlfcHV0KHNhaSk7CiAJZHB1dChwYXJlbnQpOwotCUNERUJVRyhEX1JFQURBLCAic3RhdGFoZWFkIHRocmVhZCBzdG9wcGVkOiBbcGlkICVkXSBbcGFyZW50ICUuKnNdXG4iLAotCSAgICAgICBjdXJyZW50X3BpZCgpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCUNERUJVRyhEX1JFQURBLCAic3RhdGFoZWFkIHRocmVhZCBzdG9wcGVkOiBzYWkgJXAsIHBhcmVudCAlLipzXG4iLAorCSAgICAgICBzYWksIHBhcmVudC0+ZF9uYW1lLmxlbiwgcGFyZW50LT5kX25hbWUubmFtZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMjk4LDggKzEzMDYsOCBAQAogCQkJc3Bpbl91bmxvY2soJmxsaS0+bGxpX3NhX2xvY2spOwogCQkJd2FrZV91cCgmdGhyZWFkLT50X2N0bF93YWl0cSk7CiAKLQkJCUNERUJVRyhEX1JFQURBLCAic3RvcCBzdGF0YWhlYWQgdGhyZWFkOiBbcGlkICVkXVxuIiwKLQkJCSAgICAgICBjdXJyZW50X3BpZCgpKTsKKwkJCUNERUJVRyhEX1JFQURBLCAic3RvcCBzdGF0YWhlYWQgdGhyZWFkOiBzYWkgJXAgcGlkICV1XG4iLAorCQkJICAgICAgIGxsaS0+bGxpX3NhaSwgKHVuc2lnbmVkIGludCl0aHJlYWQtPnRfcGlkKTsKIAkJCWxfd2FpdF9ldmVudCh0aHJlYWQtPnRfY3RsX3dhaXRxLAogCQkJCSAgICAgdGhyZWFkX2lzX3N0b3BwZWQodGhyZWFkKSwKIAkJCQkgICAgICZsd2kpOwpAQCAtMTQ3MywxMCArMTQ4MSwxMCBAQAogCQkJQ0RFQlVHKERfUkVBREEsICJTdGF0YWhlYWQgZm9yIGRpciAiREZJRCIgaGl0ICIKIAkJCSAgICAgICAicmF0aW8gdG9vIGxvdzogaGl0L21pc3MgIkxQVTY0Ii8iTFBVNjQKIAkJCSAgICAgICAiLCBzZW50L3JlcGxpZWQgIkxQVTY0Ii8iTFBVNjQiLCBzdG9wcGluZyAiCi0JCQkgICAgICAgInN0YXRhaGVhZCB0aHJlYWQ6IHBpZCAlZFxuIiwKKwkJCSAgICAgICAic3RhdGFoZWFkIHRocmVhZFxuIiwKIAkJCSAgICAgICBQRklEKCZsbGktPmxsaV9maWQpLCBzYWktPnNhaV9oaXQsCiAJCQkgICAgICAgc2FpLT5zYWlfbWlzcywgc2FpLT5zYWlfc2VudCwKLQkJCSAgICAgICBzYWktPnNhaV9yZXBsaWVkLCBjdXJyZW50X3BpZCgpKTsKKwkJCSAgICAgICBzYWktPnNhaV9yZXBsaWVkKTsKIAkJCXNwaW5fbG9jaygmbGxpLT5sbGlfc2FfbG9jayk7CiAJCQlpZiAoIXRocmVhZF9pc19zdG9wcGVkKHRocmVhZCkpCiAJCQkJdGhyZWFkX3NldF9mbGFncyh0aHJlYWQsIFNWQ19TVE9QUElORyk7CkBAIC0xNTUzLDEyICsxNTYxLDYgQEAKIAkJCXJldHVybiBlbnRyeSA/IDEgOiAtRUFHQUlOOwogCQl9CiAKLQkJLyogaWYgc3RhdGFoZWFkIGlzIGJ1c3kgaW4gcmVhZGRpciwgaGVscCBpdCBkbyBwb3N0LXdvcmsgKi8KLQkJd2hpbGUgKCFsbF9zYV9lbnRyeV9zdGF0ZWQoZW50cnkpICYmCi0JCSAgICAgICBzYWktPnNhaV9pbl9yZWFkcGFnZSAmJgotCQkgICAgICAgIXNhX3JlY2VpdmVkX2VtcHR5KHNhaSkpCi0JCQlsbF9wb3N0X3N0YXRhaGVhZChzYWkpOwotCiAJCWlmICghbGxfc2FfZW50cnlfc3RhdGVkKGVudHJ5KSkgewogCQkJc2FpLT5zYWlfaW5kZXhfd2FpdCA9IGVudHJ5LT5zZV9pbmRleDsKIAkJCWx3aSA9IExXSV9USU1FT1VUX0lOVFIoY2ZzX3RpbWVfc2Vjb25kcygzMCksIE5VTEwsCkBAIC0xNjU1LDkgKzE2NTcsMTUgQEAKIAkJR09UTyhvdXQsIHJjID0gLUVBR0FJTik7CiAJfQogCi0JQ0RFQlVHKERfUkVBREEsICJzdGFydCBzdGF0YWhlYWQgdGhyZWFkOiBbcGlkICVkXSBbcGFyZW50ICUuKnNdXG4iLAotCSAgICAgICBjdXJyZW50X3BpZCgpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCUNERUJVRyhEX1JFQURBLCAic3RhcnQgc3RhdGFoZWFkIHRocmVhZDogc2FpICVwLCBwYXJlbnQgJS4qc1xuIiwKKwkgICAgICAgc2FpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOwogCisJLyogVGhlIHNhaSBidWZmZXIgYWxyZWFkeSBoYXMgb25lIHJlZmVyZW5jZSB0YWtlbiBhdCBhbGxvY2F0aW9uIHRpbWUsCisJICogYnV0IGFzIHNvb24gYXMgd2UgZXhwb3NlIHRoZSBzYWkgYnkgYXR0YWNoaW5nIGl0IHRvIHRoZSBsbGkgdGhhdAorCSAqIGRlZmF1bHQgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIGJ5IGFub3RoZXIgdGhyZWFkIGNhbGxpbmcKKwkgKiBsbF9zdG9wX3N0YXRhaGVhZC4gV2UgbmVlZCB0byB0YWtlIGEgbG9jYWwgcmVmZXJlbmNlIHRvIHByb3RlY3QKKwkgKiB0aGUgc2FpIGJ1ZmZlciB3aGlsZSB3ZSBpbnRlbmQgdG8gYWNjZXNzIGl0LiAqLworCWxsX3NhaV9nZXQoc2FpKTsKIAlsbGktPmxsaV9zYWkgPSBzYWk7CiAKIAlwbGxpID0gbGxfaTJpbmZvKHBhcmVudC0+ZF9pbm9kZSk7CkBAIC0xNjcwLDYgKzE2NzgsOSBAQAogCQlsbGktPmxsaV9vcGVuZGlyX2tleSA9IE5VTEw7CiAJCXRocmVhZF9zZXRfZmxhZ3ModGhyZWFkLCBTVkNfU1RPUFBFRCk7CiAJCXRocmVhZF9zZXRfZmxhZ3MoJnNhaS0+c2FpX2FnbF90aHJlYWQsIFNWQ19TVE9QUEVEKTsKKwkJLyogRHJvcCBib3RoIG91ciBvd24gbG9jYWwgcmVmZXJlbmNlIGFuZCB0aGUgZGVmYXVsdAorCQkgKiByZWZlcmVuY2UgZnJvbSBhbGxvY2F0aW9uIHRpbWUuICovCisJCWxsX3NhaV9wdXQoc2FpKTsKIAkJbGxfc2FpX3B1dChzYWkpOwogCQlMQVNTRVJUKGxsaS0+bGxpX3NhaSA9PSBOVUxMKTsKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC0xNjc4LDYgKzE2ODksNyBAQAogCWxfd2FpdF9ldmVudCh0aHJlYWQtPnRfY3RsX3dhaXRxLAogCQkgICAgIHRocmVhZF9pc19ydW5uaW5nKHRocmVhZCkgfHwgdGhyZWFkX2lzX3N0b3BwZWQodGhyZWFkKSwKIAkJICAgICAmbHdpKTsKKwlsbF9zYWlfcHV0KHNhaSk7CiAKIAkvKgogCSAqIFdlIGRvbid0IHN0YXQtYWhlYWQgZm9yIHRoZSBmaXJzdCBkaXJlbnQgc2luY2Ugd2UgYXJlIGFscmVhZHkgaW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3N1cGVyMjUuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3N1cGVyMjUuYwppbmRleCBlMjFlMWM3Li45NTFmZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9zdXBlcjI1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvc3VwZXIyNS5jCkBAIC01Miw3ICs1Miw3IEBACiB7CiAJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaTsKIAlsbF9zdGF0c19vcHNfdGFsbHkobGxfczJzYmkoc2IpLCBMUFJPQ19MTF9BTExPQ19JTk9ERSwgMSk7Ci0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsbGksIGxsX2lub2RlX2NhY2hlcCwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobGxpLCBsbF9pbm9kZV9jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAobGxpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC03Miw3ICs3Miw3IEBACiAJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgbGxfaW5vZGVfZGVzdHJveV9jYWxsYmFjayk7CiB9CiAKLWludCBsbF9pbml0X2lub2RlY2FjaGUodm9pZCkKK3N0YXRpYyBpbnQgbGxfaW5pdF9pbm9kZWNhY2hlKHZvaWQpCiB7CiAJbGxfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImx1c3RyZV9pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGxsX2lub2RlX2luZm8pLApAQCAtODIsNyArODIsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGxsX2Rlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQorc3RhdGljIHZvaWQgbGxfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7CiAJa21lbV9jYWNoZV9kZXN0cm95KGxsX2lub2RlX2NhY2hlcCk7CiB9CkBAIC0xMDMsOSArMTAzLDYgQEAKIAogdm9pZCBsdXN0cmVfcmVnaXN0ZXJfY2xpZW50X3Byb2Nlc3NfY29uZmlnKGludCAoKmNwYykoc3RydWN0IGx1c3RyZV9jZmcgKmxjZmcpKTsKIAotaW50IHZ2cF9nbG9iYWxfaW5pdCh2b2lkKTsKLXZvaWQgdnZwX2dsb2JhbF9maW5pKHZvaWQpOwotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2x1c3RyZV9saXRlKHZvaWQpCiB7CiAJaW50IGksIHJjLCBzZWVkWzJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvc3ltbGluay5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvc3ltbGluay5jCmluZGV4IDgwZDQ4YjUuLjEyOWQzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3N5bWxpbmsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9zeW1saW5rLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKIAlpbnQgcmM7Ci0JY2hhciAqc3ltbmFtZTsKKwljaGFyICpzeW1uYW1lID0gTlVMTDsKIAogCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wXG4iKTsKIAkvKiBMaW1pdCB0aGUgcmVjdXJzaXZlIHN5bWxpbmsgZGVwdGggdG8gNSBpbnN0ZWFkIG9mIGRlZmF1bHQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9kZXYuYwppbmRleCBjNGQxNTgwLi4wZjY4YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS92dnBfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2Rldi5jCkBAIC00Myw3ICs0Myw3IEBACiAKICNpbmNsdWRlIDxvYmQuaD4KICNpbmNsdWRlIDxsdXN0cmVfbGl0ZS5oPgotCisjaW5jbHVkZSAibGxpdGVfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJ2dnBfaW50ZXJuYWwuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiAibGxpdGVfIiAodmFyLiAibGxfIikgcHJlZml4LgogICovCiAKLXN0cnVjdCBrbWVtX2NhY2hlICp2dnBfdGhyZWFkX2ttZW07CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnZ2cF90aHJlYWRfa21lbTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdnZwX3Nlc3Npb25fa21lbTsKIHN0YXRpYyBzdHJ1Y3QgbHVfa21lbV9kZXNjciB2dnBfY2FjaGVzW10gPSB7CiAJewpAQCAtODAsNyArODAsNyBAQAogewogCXN0cnVjdCB2dnBfdGhyZWFkX2luZm8gKmluZm87CiAKLQlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGluZm8sIHZ2cF90aHJlYWRfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoaW5mbywgdnZwX3RocmVhZF9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJaW5mbyA9IEVSUl9QVFIoLUVOT01FTSk7CiAJcmV0dXJuIGluZm87CkBAIC05OCw3ICs5OCw3IEBACiB7CiAJc3RydWN0IHZ2cF9zZXNzaW9uICpzZXNzaW9uOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChzZXNzaW9uLCB2dnBfc2Vzc2lvbl9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChzZXNzaW9uLCB2dnBfc2Vzc2lvbl9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJc2Vzc2lvbiA9IEVSUl9QVFIoLUVOT01FTSk7CiAJcmV0dXJuIHNlc3Npb247CkBAIC01MzYsNyArNTM2LDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ2cF9kdW1wX3BnY2FjaGVfZmlsZV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ2cF9kdW1wX3BnY2FjaGVfZmlsZV9vcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IHZ2cF9kdW1wX3BnY2FjaGVfc2VxX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9pbnRlcm5hbC5oIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2ludGVybmFsLmgKaW5kZXggYzgyYmYxNy4uM2M5YTAzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2ludGVybmFsLmgKQEAgLTU3LDYgKzU3LDYgQEAKIAogc3RydWN0IGNjY19vYmplY3QgKmNsX2lub2RlMmNjYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICp2dnBfdGhyZWFkX2ttZW07CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2dnBfZHVtcF9wZ2NhY2hlX2ZpbGVfb3BzOwogCiAjZW5kaWYgLyogVlZQX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9pby5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKaW5kZXggYzdkNzAwOS4uN2RkMmI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAljYXNlIENJVF9XUklURToKIAkJLyogZG9uJ3QgbmVlZCBsb2NrIGhlcmUgdG8gY2hlY2sgbGxpX2xheW91dF9nZW4gYXMgd2UgaGF2ZSBoZWxkCiAJCSAqIGV4dGVudCBsb2NrIGFuZCBHUk9VUCBsb2NrIGhhcyB0byBob2xkIHRvIHN3YXAgbGF5b3V0ICovCi0JCWlmIChsbGktPmxsaV9sYXlvdXRfZ2VuICE9IGNpby0+Y3VpX2xheW91dF9nZW4pIHsKKwkJaWYgKGxsX2xheW91dF92ZXJzaW9uX2dldChsbGkpICE9IGNpby0+Y3VpX2xheW91dF9nZW4pIHsKIAkJCWlvLT5jaV9uZWVkX3Jlc3RhcnQgPSAxOwogCQkJLyogdGhpcyB3aWxsIHJldHVybiBhcHBsaWNhdGlvbiBhIHNob3J0IHJlYWQvd3JpdGUgKi8KIAkJCWlvLT5jaV9jb250aW51ZSA9IDA7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAl2dnBfaW9fZmluaShlbnYsIGlvcyk7CiB9CiAKLWVudW0gY2xfbG9ja19tb2RlIHZ2cF9tb2RlX2Zyb21fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGVudW0gY2xfbG9ja19tb2RlIHZ2cF9tb2RlX2Zyb21fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCS8qCiAJICogd2Ugb25seSB3YW50IHRvIGhvbGQgUFcgbG9ja3MgaWYgdGhlIG1tYXAoKSBjYW4gZ2VuZXJhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9vYmplY3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9vYmplY3QuYwppbmRleCAyNTk3M2RlLi42NWI2ZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS92dnBfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX29iamVjdC5jCkBAIC0xMjAsMTMgKzEyMCwyOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdnZwX2NvbmZfc2V0KGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGNsX29iamVjdCAqb2JqLAotCQljb25zdCBzdHJ1Y3QgY2xfb2JqZWN0X2NvbmYgKmNvbmYpCitzdGF0aWMgaW50IHZ2cF9jb25mX3NldChjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsIHN0cnVjdCBjbF9vYmplY3QgKm9iaiwKKwkJCWNvbnN0IHN0cnVjdCBjbF9vYmplY3RfY29uZiAqY29uZikKIHsKIAlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbGxpID0gbGxfaTJpbmZvKGNvbmYtPmNvY19pbm9kZSk7CiAKIAlpZiAoY29uZi0+Y29jX29wYyA9PSBPQkpFQ1RfQ09ORl9JTlZBTElEQVRFKSB7Ci0JCWxsaS0+bGxpX2xheW91dF9nZW4gPSBMTF9MQVlPVVRfR0VOX05PTkU7CisJCUNERUJVRyhEX1ZGU1RSQUNFLCBERklEICI6IGxvc2luZyBsYXlvdXQgbG9ja1xuIiwKKwkJICAgICAgIFBGSUQoJmxsaS0+bGxpX2ZpZCkpOworCisJCWxsX2xheW91dF92ZXJzaW9uX3NldChsbGksIExMX0xBWU9VVF9HRU5fTk9ORSk7CisKKwkJLyogQ2xlYW4gdXAgcGFnZSBtbWFwIGZvciB0aGlzIGlub2RlLgorCQkgKiBUaGUgcmVhc29uIGZvciB1cyB0byBkbyB0aGlzIGlzIHRoYXQgaWYgdGhlIHBhZ2UgaGFzCisJCSAqIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQgaW50byBtZW1vcnkgc3BhY2UsIHRoZSBwcm9jZXNzCisJCSAqIGNhbiBhY2Nlc3MgaXQgd2l0aG91dCBpbnRlcmFjdGluZyB3aXRoIGx1c3RyZSwgc28gdGhpcworCQkgKiBwYWdlIG1heSBiZSBzdGFsZSBkdWUgdG8gbGF5b3V0IGNoYW5nZSwgYW5kIHRoZSBwcm9jZXNzCisJCSAqIHdpbGwgbmV2ZXIgYmUgbm90aWZpZWQuCisJCSAqIFRoaXMgb3BlcmF0aW9uIGlzIGV4cGVuc2l2ZSBidXQgbW1hcCBwcm9jZXNzZXMgaGF2ZSB0byBwYXkKKwkJICogYSBwcmljZSB0aGVtc2VsdmVzLiAqLworCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGNvbmYtPmNvY19pbm9kZS0+aV9tYXBwaW5nLAorCQkJCSAgICAwLCBPQkRfT0JKRUNUX0VPRiwgMCk7CisKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMzQsMTggKzE0OSwxOCBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChjb25mLT51LmNvY19tZCAhPSBOVUxMICYmIGNvbmYtPnUuY29jX21kLT5sc20gIT0gTlVMTCkgewotCQlDREVCVUcoRF9WRlNUUkFDRSwgImxheW91dCBsb2NrIGNoYW5nZTogJXUgLT4gJXVcbiIsCi0JCQlsbGktPmxsaV9sYXlvdXRfZ2VuLAotCQkJY29uZi0+dS5jb2NfbWQtPmxzbS0+bHNtX2xheW91dF9nZW4pOworCQlDREVCVUcoRF9WRlNUUkFDRSwgREZJRCAiOiBsYXlvdXQgdmVyc2lvbiBjaGFuZ2U6ICV1IC0+ICV1XG4iLAorCQkgICAgICAgUEZJRCgmbGxpLT5sbGlfZmlkKSwgbGxpLT5sbGlfbGF5b3V0X2dlbiwKKwkJICAgICAgIGNvbmYtPnUuY29jX21kLT5sc20tPmxzbV9sYXlvdXRfZ2VuKTsKIAogCQlsbGktPmxsaV9oYXNfc21kID0gbHNtX2hhc19vYmplY3RzKGNvbmYtPnUuY29jX21kLT5sc20pOwotCQlsbGktPmxsaV9sYXlvdXRfZ2VuID0gY29uZi0+dS5jb2NfbWQtPmxzbS0+bHNtX2xheW91dF9nZW47CisJCWxsX2xheW91dF92ZXJzaW9uX3NldChsbGksIGNvbmYtPnUuY29jX21kLT5sc20tPmxzbV9sYXlvdXRfZ2VuKTsKIAl9IGVsc2UgewotCQlDREVCVUcoRF9WRlNUUkFDRSwgImxheW91dCBsb2NrIGRlc3Ryb3llZDogJXUuXG4iLAotCQkJbGxpLT5sbGlfbGF5b3V0X2dlbik7CisJCUNERUJVRyhEX1ZGU1RSQUNFLCBERklEICI6IGxheW91dCBudWtlZDogJXUuXG4iLAorCQkgICAgICAgUEZJRCgmbGxpLT5sbGlfZmlkKSwgbGxpLT5sbGlfbGF5b3V0X2dlbik7CiAKIAkJbGxpLT5sbGlfaGFzX3NtZCA9IGZhbHNlOwotCQlsbGktPmxsaV9sYXlvdXRfZ2VuID0gTExfTEFZT1VUX0dFTl9FTVBUWTsKKwkJbGxfbGF5b3V0X3ZlcnNpb25fc2V0KGxsaSwgTExfTEFZT1VUX0dFTl9FTVBUWSk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUveGF0dHIuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3hhdHRyLmMKaW5kZXggYjFlZDRkOS4uYzZjMjdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUveGF0dHIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS94YXR0ci5jCkBAIC0xMTIsOCArMTEyLDggQEAKIAlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcSA9IE5VTEw7CiAJaW50IHhhdHRyX3R5cGUsIHJjOwogCXN0cnVjdCBvYmRfY2FwYSAqb2M7Ci0Jc3RydWN0IHJtdGFjbF9jdGxfZW50cnkgKnJjZSA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTAorCXN0cnVjdCBybXRhY2xfY3RsX2VudHJ5ICpyY2UgPSBOVUxMOwogCXBvc2l4X2FjbF94YXR0cl9oZWFkZXIgKm5ld192YWx1ZSA9IE5VTEw7CiAJZXh0X2FjbF94YXR0cl9oZWFkZXIgKmFjbCA9IE5VTEw7CiAjZW5kaWYKQEAgLTEyNCw2ICsxMjQsMTEgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCWlmICgoeGF0dHJfdHlwZSA9PSBYQVRUUl9BQ0xfQUNDRVNTX1QgfHwKKwkgICAgIHhhdHRyX3R5cGUgPT0gWEFUVFJfQUNMX0RFRkFVTFRfVCkgJiYKKwkgICAgIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQorCQlyZXR1cm4gLUVQRVJNOworCiAJLyogYjEwNjY3OiBpZ25vcmUgbHVzdHJlIHNwZWNpYWwgeGF0dHIgZm9yIG5vdyAqLwogCWlmICgoeGF0dHJfdHlwZSA9PSBYQVRUUl9UUlVTVEVEX1QgJiYgc3RyY21wKG5hbWUsICJ0cnVzdGVkLmxvdiIpID09IDApIHx8CiAJICAgICh4YXR0cl90eXBlID09IFhBVFRSX0xVU1RSRV9UICYmIHN0cmNtcChuYW1lLCAibHVzdHJlLmxvdiIpID09IDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUveGF0dHJfY2FjaGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3hhdHRyX2NhY2hlLmMKaW5kZXggNGRlZmEyZi4uNGRkODNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUveGF0dHJfY2FjaGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS94YXR0cl9jYWNoZS5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUCh4YXR0ciwgeGF0dHJfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoeGF0dHIsIHhhdHRyX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoeGF0dHIgPT0gTlVMTCkgewogCQlDREVCVUcoRF9DQUNIRSwgImZhaWxlZCB0byBhbGxvY2F0ZSB4YXR0clxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAgKiBccmV0dmFsIDAgQGNhY2hlIGlzIG5vdCBpbml0aWFsaXplZAogICogXHJldHZhbCAxIEBjYWNoZSBpcyBpbml0aWFsaXplZAogICovCi1pbnQgbGxfeGF0dHJfY2FjaGVfdmFsaWQoc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSkKK3N0YXRpYyBpbnQgbGxfeGF0dHJfY2FjaGVfdmFsaWQoc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSkKIHsKIAlyZXR1cm4gISEobGxpLT5sbGlfZmxhZ3MgJiBMTElGX1hBVFRSX0NBQ0hFKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xtdi9sbXZfb2JkLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbXYvbG12X29iZC5jCmluZGV4IDNiYTBhMGEuLjRlZGY4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xtdi9sbXZfb2JkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG12L2xtdl9vYmQuYwpAQCAtMjgwLDcgKzI4MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbG12X2luaXRfZWFfc2l6ZShzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLCBpbnQgZWFzaXplLAotCQkJICAgIGludCBkZWZfZWFzaXplLCBpbnQgY29va2llc2l6ZSkKKwkJCSAgICBpbnQgZGVmX2Vhc2l6ZSwgaW50IGNvb2tpZXNpemUsIGludCBkZWZfY29va2llc2l6ZSkKIHsKIAlzdHJ1Y3Qgb2JkX2RldmljZSAgICpvYmQgPSBleHAtPmV4cF9vYmQ7CiAJc3RydWN0IGxtdl9vYmQgICAgICAqbG12ID0gJm9iZC0+dS5sbXY7CkBAIC0zMDAsNiArMzAwLDEwIEBACiAJCWxtdi0+bWF4X2Nvb2tpZXNpemUgPSBjb29raWVzaXplOwogCQljaGFuZ2UgPSAxOwogCX0KKwlpZiAobG12LT5tYXhfZGVmX2Nvb2tpZXNpemUgPCBkZWZfY29va2llc2l6ZSkgeworCQlsbXYtPm1heF9kZWZfY29va2llc2l6ZSA9IGRlZl9jb29raWVzaXplOworCQljaGFuZ2UgPSAxOworCX0KIAlpZiAoY2hhbmdlID09IDApCiAJCXJldHVybiAwOwogCkBAIC0zMTUsNyArMzE5LDcgQEAKIAkJfQogCiAJCXJjID0gbWRfaW5pdF9lYV9zaXplKGxtdi0+dGd0c1tpXS0+bHRkX2V4cCwgZWFzaXplLCBkZWZfZWFzaXplLAotCQkJCSAgICAgY29va2llc2l6ZSk7CisJCQkJICAgICBjb29raWVzaXplLCBkZWZfY29va2llc2l6ZSk7CiAJCWlmIChyYykgewogCQkJQ0VSUk9SKCIlczogb2JkX2luaXRfZWFfc2l6ZSgpIGZhaWxlZCBvbiBNRFQgdGFyZ2V0ICVkOiIKIAkJCSAgICAgICAiIHJjID0gJWQuXG4iLCBvYmQtPm9iZF9uYW1lLCBpLCByYyk7CkBAIC00MDAsOCArNDA0LDggQEAKIAl0Z3QtPmx0ZF9leHAgPSBtZGNfZXhwOwogCWxtdi0+ZGVzYy5sZF9hY3RpdmVfdGd0X2NvdW50Kys7CiAKLQltZF9pbml0X2VhX3NpemUodGd0LT5sdGRfZXhwLCBsbXYtPm1heF9lYXNpemUsCi0JCQlsbXYtPm1heF9kZWZfZWFzaXplLCBsbXYtPm1heF9jb29raWVzaXplKTsKKwltZF9pbml0X2VhX3NpemUodGd0LT5sdGRfZXhwLCBsbXYtPm1heF9lYXNpemUsIGxtdi0+bWF4X2RlZl9lYXNpemUsCisJCQlsbXYtPm1heF9jb29raWVzaXplLCBsbXYtPm1heF9kZWZfY29va2llc2l6ZSk7CiAKIAlDREVCVUcoRF9DT05GSUcsICJDb25uZWN0ZWQgdG8gJXMoJXMpIHN1Y2Nlc3NmdWxseSAoJWQpXG4iLAogCQltZGNfb2JkLT5vYmRfbmFtZSwgbWRjX29iZC0+b2JkX3V1aWQudXVpZCwKQEAgLTUyNyw5ICs1MzEsOCBAQAogCQkJc3Bpbl91bmxvY2soJmxtdi0+bG12X2xvY2spOwogCQl9IGVsc2UgewogCQkJaW50IGVhc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG12X3N0cmlwZV9tZCkgKwotCQkJCSAgICAgbG12LT5kZXNjLmxkX3RndF9jb3VudCAqCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IGx1X2ZpZCk7Ci0JCQlsbXZfaW5pdF9lYV9zaXplKG9iZC0+b2JkX3NlbGZfZXhwb3J0LCBlYXNpemUsIDAsIDApOworCQkJCWxtdi0+ZGVzYy5sZF90Z3RfY291bnQgKiBzaXplb2Yoc3RydWN0IGx1X2ZpZCk7CisJCQlsbXZfaW5pdF9lYV9zaXplKG9iZC0+b2JkX3NlbGZfZXhwb3J0LCBlYXNpemUsIDAsIDAsIDApOwogCQl9CiAJfQogCkBAIC01NzgsNyArNTgxLDcgQEAKIAljbGFzc19leHBvcnRfcHV0KGxtdi0+ZXhwKTsKIAlsbXYtPmNvbm5lY3RlZCA9IDE7CiAJZWFzaXplID0gbG12X2dldF9lYXNpemUobG12KTsKLQlsbXZfaW5pdF9lYV9zaXplKG9iZC0+b2JkX3NlbGZfZXhwb3J0LCBlYXNpemUsIDAsIDApOworCWxtdl9pbml0X2VhX3NpemUob2JkLT5vYmRfc2VsZl9leHBvcnQsIGVhc2l6ZSwgMCwgMCwgMCk7CiAJbG12X2luaXRfdW5sb2NrKGxtdik7CiAJcmV0dXJuIDA7CiAKQEAgLTIzNDAsNyArMjM0MywxMSBAQAogCQkJCXJldHVybiAwOwogCQl9CiAJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoS0VZX0lTKEtFWV9NQVhfRUFTSVpFKSB8fCBLRVlfSVMoS0VZX0NPTk5fREFUQSkpIHsKKwl9IGVsc2UgaWYgKEtFWV9JUyhLRVlfTUFYX0VBU0laRSkgfHwKKwkJICAgS0VZX0lTKEtFWV9ERUZBVUxUX0VBU0laRSkgfHwKKwkJICAgS0VZX0lTKEtFWV9NQVhfQ09PS0lFU0laRSkgfHwKKwkJICAgS0VZX0lTKEtFWV9ERUZBVUxUX0NPT0tJRVNJWkUpIHx8CisJCSAgIEtFWV9JUyhLRVlfQ09OTl9EQVRBKSkgewogCQlyYyA9IGxtdl9jaGVja19jb25uZWN0KG9iZCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xtdi9scHJvY19sbXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xtdi9scHJvY19sbXYuYwppbmRleCA1ZDVjMzA4Li5hZTczYzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbXYvbHByb2NfbG12LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG12L2xwcm9jX2xtdi5jCkBAIC0yMDAsMTkgKzIwMCwxOSBAQAogTFBST0NfU0VRX0ZPUFNfUk9fVFlQRShsbXYsIHV1aWQpOwogCiBzdHJ1Y3QgbHByb2Nmc192YXJzIGxwcm9jZnNfbG12X29iZF92YXJzW10gPSB7Ci0JeyAibnVtb2JkIiwJICAmbG12X251bW9iZF9mb3BzLAkgIDAsIDAgfSwKLQl7ICJwbGFjZW1lbnQiLAkgICZsbXZfcGxhY2VtZW50X2ZvcHMsICAgIDAsIDAgfSwKLQl7ICJhY3RpdmVvYmQiLAkgICZsbXZfYWN0aXZlb2JkX2ZvcHMsICAgIDAsIDAgfSwKLQl7ICJ1dWlkIiwJICAmbG12X3V1aWRfZm9wcywJICAwLCAwIH0sCi0JeyAiZGVzY191dWlkIiwJICAmbG12X2Rlc2NfdXVpZF9mb3BzLCAgICAwLCAwIH0sCi0JeyAwIH0KKwl7ICJudW1vYmQiLAkgICZsbXZfbnVtb2JkX2ZvcHMsCSAgTlVMTCwgMCB9LAorCXsgInBsYWNlbWVudCIsCSAgJmxtdl9wbGFjZW1lbnRfZm9wcywgICAgTlVMTCwgMCB9LAorCXsgImFjdGl2ZW9iZCIsCSAgJmxtdl9hY3RpdmVvYmRfZm9wcywgICAgTlVMTCwgMCB9LAorCXsgInV1aWQiLAkgICZsbXZfdXVpZF9mb3BzLAkgIE5VTEwsIDAgfSwKKwl7ICJkZXNjX3V1aWQiLAkgICZsbXZfZGVzY191dWlkX2ZvcHMsICAgIE5VTEwsIDAgfSwKKwl7IE5VTEwgfQogfTsKIAogTFBST0NfU0VRX0ZPUFNfUk9fVFlQRShsbXYsIG51bXJlZnMpOwogCiBzdGF0aWMgc3RydWN0IGxwcm9jZnNfdmFycyBscHJvY2ZzX2xtdl9tb2R1bGVfdmFyc1tdID0gewotCXsgIm51bV9yZWZzIiwJICAgJmxtdl9udW1yZWZzX2ZvcHMsIDAsIDAgfSwKLQl7IDAgfQorCXsgIm51bV9yZWZzIiwJICAgJmxtdl9udW1yZWZzX2ZvcHMsIE5VTEwsIDAgfSwKKwl7IE5VTEwgfQogfTsKIAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsbXZfcHJvY190YXJnZXRfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9NYWtlZmlsZQppbmRleCA5YTVmMjZkLi5hOTA4ZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogb2JqLSQoQ09ORklHX0xVU1RSRV9GUykgKz0gbG92Lm8KLWxvdi15IDo9IGxvdl9sb2cubyBsb3Zfb2JkLm8gbG92X3BhY2subyBsb3Zfb2Zmc2V0Lm8gbG92X21lcmdlLm8gXAorbG92LXkgOj0gbG92X29iZC5vIGxvdl9wYWNrLm8gbG92X29mZnNldC5vIGxvdl9tZXJnZS5vIFwKIAkgbG92X3JlcXVlc3QubyBsb3ZfZWEubyBsb3ZfZGV2Lm8gbG92X29iamVjdC5vIGxvdl9wYWdlLm8gIFwKIAkgbG92X2xvY2subyBsb3ZfaW8ubyBsb3ZzdWJfZGV2Lm8gbG92c3ViX29iamVjdC5vIGxvdnN1Yl9wYWdlLm8gICAgICBcCiAJIGxvdnN1Yl9sb2NrLm8gbG92c3ViX2lvLm8gbG92X3Bvb2wubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfZGV2LmMKaW5kZXggMWYzM2IwNC4uNTNlNTc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X2Rldi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIHsKIAlzdHJ1Y3QgbG92X3RocmVhZF9pbmZvICppbmZvOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChpbmZvLCBsb3ZfdGhyZWFkX2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGluZm8sIGxvdl90aHJlYWRfa21lbSwgR0ZQX05PRlMpOwogCWlmIChpbmZvICE9IE5VTEwpCiAJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5sdGlfY2xvc3VyZS5jbGNfbGlzdCk7CiAJZWxzZQpAQCAtMTcwLDcgKzE3MCw3IEBACiB7CiAJc3RydWN0IGxvdl9zZXNzaW9uICppbmZvOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChpbmZvLCBsb3Zfc2Vzc2lvbl9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChpbmZvLCBsb3Zfc2Vzc2lvbl9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJaW5mbyA9IEVSUl9QVFIoLUVOT01FTSk7CiAJcmV0dXJuIGluZm87CkBAIC0yNjAsNyArMjYwLDcgQEAKIAlzdHJ1Y3QgbG92X3JlcSAqbHI7CiAJaW50IHJlc3VsdDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobHIsIGxvdl9yZXFfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobHIsIGxvdl9yZXFfa21lbSwgR0ZQX05PRlMpOwogCWlmIChsciAhPSBOVUxMKSB7CiAJCWNsX3JlcV9zbGljZV9hZGQocmVxLCAmbHItPmxyX2NsLCBkZXYsICZsb3ZfcmVxX29wcyk7CiAJCXJlc3VsdCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X2VhLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X2VhLmMKaW5kZXggNmYzNTZlMC4uYTBjMTQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9lYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfZWEuYwpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmNmcy9saWJjZnMuaD4KIAogI2luY2x1ZGUgPG9iZF9jbGFzcy5oPgotI2luY2x1ZGUgPG9iZF9sb3YuaD4KICNpbmNsdWRlIDxsdXN0cmUvbHVzdHJlX2lkbC5oPgogCiAjaW5jbHVkZSAibG92X2ludGVybmFsLmgiCkBAIC0xMDEsNyArMTAwLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3RyaXBlX2NvdW50OyBpKyspIHsKLQkJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsb2ksIGxvdl9vaW5mb19zbGFiLCBfX0dGUF9JTyk7CisJCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobG9pLCBsb3Zfb2luZm9fc2xhYiwgR0ZQX05PRlMpOwogCQlpZiAobG9pID09IE5VTEwpCiAJCQlnb3RvIGVycjsKIAkJbHNtLT5sc21fb2luZm9baV0gPSBsb2k7CkBAIC0zNDYsMyArMzQ1LDE0IEBACiAJLmxzbV9sbW1fdmVyaWZ5CSA9IGxzbV9sbW1fdmVyaWZ5X3YzLAogCS5sc21fdW5wYWNrbWQJICAgPSBsc21fdW5wYWNrbWRfdjMsCiB9OworCit2b2lkIGR1bXBfbHNtKHVuc2lnbmVkIGludCBsZXZlbCwgY29uc3Qgc3RydWN0IGxvdl9zdHJpcGVfbWQgKmxzbSkKK3sKKwlDREVCVUcobGV2ZWwsICJsc20gJXAsIG9iamlkICJET1NUSUQiLCBtYXhieXRlcyAiTFBYNjQiLCBtYWdpYyAweCUwOFgsIgorCSAgICAgICAiIHN0cmlwZV9zaXplICV1LCBzdHJpcGVfY291bnQgJXUsIHJlZmM6ICVkLCIKKwkgICAgICAgIiBsYXlvdXRfZ2VuICV1LCBwb29sIFsiTE9WX1BPT0xOQU1FRiJdXG4iLCBsc20sCisJICAgICAgIFBPU1RJRCgmbHNtLT5sc21fb2kpLCBsc20tPmxzbV9tYXhieXRlcywgbHNtLT5sc21fbWFnaWMsCisJICAgICAgIGxzbS0+bHNtX3N0cmlwZV9zaXplLCBsc20tPmxzbV9zdHJpcGVfY291bnQsCisJICAgICAgIGF0b21pY19yZWFkKCZsc20tPmxzbV9yZWZjKSwgbHNtLT5sc21fbGF5b3V0X2dlbiwKKwkgICAgICAgbHNtLT5sc21fcG9vbF9uYW1lKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfaW50ZXJuYWwuaAppbmRleCAyYjIyYTAzLi4zODUwOGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9pbnRlcm5hbC5oCkBAIC0zOCw5ICszOCwzOSBAQAogI2RlZmluZSBMT1ZfSU5URVJOQUxfSAogCiAjaW5jbHVkZSA8b2JkX2NsYXNzLmg+Ci0jaW5jbHVkZSA8b2JkX2xvdi5oPgogI2luY2x1ZGUgPGx1c3RyZS9sdXN0cmVfdXNlci5oPgogCisvKiBsb3ZfZG9fZGl2NjQoYSwgYikgcmV0dXJucyBhICUgYiwgYW5kIGEgPSBhIC8gYi4KKyAqIFRoZSAzMi1iaXQgY29kZSBpcyBMT1Ytc3BlY2lmaWMgZHVlIHRvIGtub3dpbmcgYWJvdXQgc3RyaXBlIGxpbWl0cyBpbgorICogb3JkZXIgdG8gcmVkdWNlIHRoZSBkaXZpc29yIHRvIGEgMzItYml0IG51bWJlci4gIElmIHRoZSBkaXZpc29yIGlzCisgKiBhbHJlYWR5IGEgMzItYml0IHZhbHVlIHRoZSBjb21waWxlciBoYW5kbGVzIHRoaXMgZGlyZWN0bHkuICovCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorIyBkZWZpbmUgbG92X2RvX2RpdjY0KG4sIGJhc2UpICh7CQkJCQlcCisJdWludDY0X3QgX19iYXNlID0gKGJhc2UpOwkJCQkJXAorCXVpbnQ2NF90IF9fcmVtOwkJCQkJCQlcCisJX19yZW0gPSAoKHVpbnQ2NF90KShuKSkgJSBfX2Jhc2U7CQkJCVwKKwkobikgPSAoKHVpbnQ2NF90KShuKSkgLyBfX2Jhc2U7CQkJCQlcCisJX19yZW07CQkJCQkJCQlcCit9KQorI2VsaWYgQklUU19QRVJfTE9ORyA9PSAzMgorIyBkZWZpbmUgbG92X2RvX2RpdjY0KG4sIGJhc2UpICh7CQkJCQlcCisJdWludDY0X3QgX19yZW07CQkJCQkJCVwKKwlpZiAoKHNpemVvZihiYXNlKSA+IDQpICYmICgoKGJhc2UpICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSAhPSAwKSkgeyAgXAorCQlpbnQgX19yZW1haW5kZXI7CQkJCQkgICAgICBcCisJCUxBU1NFUlRGKCEoKGJhc2UpICYgKExPVl9NSU5fU1RSSVBFX1NJWkUgLSAxKSksICI2NCBiaXQgbG92ICIgXAorCQkJICJkaXZpc2lvbiAlbGx1IC8gJWxsdVxuIiwgKG4pLCAodWludDY0X3QpKGJhc2UpKTsgICAgXAorCQlfX3JlbWFpbmRlciA9IChuKSAmIChMT1ZfTUlOX1NUUklQRV9TSVpFIC0gMSk7CQlcCisJCShuKSA+Pj0gTE9WX01JTl9TVFJJUEVfQklUUzsJCQkJXAorCQlfX3JlbSA9IGRvX2RpdihuLCAoYmFzZSkgPj4gTE9WX01JTl9TVFJJUEVfQklUUyk7CVwKKwkJX19yZW0gPDw9IExPVl9NSU5fU1RSSVBFX0JJVFM7CQkJCVwKKwkJX19yZW0gKz0gX19yZW1haW5kZXI7CQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlfX3JlbSA9IGRvX2RpdihuLCBiYXNlKTsJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3JlbTsJCQkJCQkJCVwKK30pCisjZW5kaWYKKwogc3RydWN0IGxvdl9sb2NrX2hhbmRsZXMgewogCXN0cnVjdCBwb3J0YWxzX2hhbmRsZSAgIGxsaF9oYW5kbGU7CiAJYXRvbWljX3QJICAgIGxsaF9yZWZjb3VudDsKQEAgLTI1MSwxMCArMjgxLDYgQEAKIAkJCSAgICBfX3UzMiAqaW5kZXhwLCBpbnQgKmdlbnApOwogaW50IGxvdl9kZWxfdGFyZ2V0KHN0cnVjdCBvYmRfZGV2aWNlICpvYmQsIF9fdTMyIGluZGV4LAogCQkgICBzdHJ1Y3Qgb2JkX3V1aWQgKnV1aWRwLCBpbnQgZ2VuKTsKLS8qIGxvdl9sb2cuYyAqLwotaW50IGxvdl9sbG9nX2luaXQoc3RydWN0IG9iZF9kZXZpY2UgKm9iZCwgc3RydWN0IG9iZF9sbG9nX2dyb3VwICpvbGcsCi0JCSAgc3RydWN0IG9iZF9kZXZpY2UgKnRndCwgaW50ICppZHgpOwotaW50IGxvdl9sbG9nX2ZpbmlzaChzdHJ1Y3Qgb2JkX2RldmljZSAqb2JkLCBpbnQgY291bnQpOwogCiAvKiBsb3ZfcGFjay5jICovCiBpbnQgbG92X3BhY2ttZChzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLCBzdHJ1Y3QgbG92X21kc19tZCAqKmxtbSwKQEAgLTI3OSw2ICszMDUsNyBAQAogLyogbG92X2VhLmMgKi8KIHN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc21fYWxsb2NfcGxhaW4oX191MTYgc3RyaXBlX2NvdW50LCBpbnQgKnNpemUpOwogdm9pZCBsc21fZnJlZV9wbGFpbihzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtKTsKK3ZvaWQgZHVtcF9sc20odW5zaWduZWQgaW50IGxldmVsLCBjb25zdCBzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtKTsKIAogaW50IGxvdmVhX2Rlc3Ryb3lfb2JqZWN0KHN0cnVjdCBsb3Zfb2JkICpsb3YsIHN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc20sCiAJCQkgc3RydWN0IG9iZG8gKm9hLCB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9sb2NrLmMKaW5kZXggZWQyNzI2ZS4uMDhhYzM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9sb2NrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9sb2NrLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAJTEFTU0VSVChpZHggPCBsY2stPmxsc19ucik7CiAKLQlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGxpbmssIGxvdl9sb2NrX2xpbmtfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobGluaywgbG92X2xvY2tfbGlua19rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKGxpbmsgIT0gTlVMTCkgewogCQlzdHJ1Y3QgbG92X3N1YmxvY2tfZW52ICpzdWJlbnY7CiAJCXN0cnVjdCBsb3ZfbG9ja19zdWIgICpsbHM7CkBAIC0zNDYsNDEgKzM0Niw3IEBACiAJCX0KIAl9CiAJTEFTU0VSVChuciA9PSBsY2stPmxsc19ucik7Ci0JLyoKLQkgKiBUaGVuLCBjcmVhdGUgc3ViLWxvY2tzLiBPbmNlIGF0IGxlYXN0IG9uZSBzdWItbG9jayB3YXMgY3JlYXRlZCwKLQkgKiB0b3AtbG9jayBjYW4gYmUgcmVhY2hlZCBieSBvdGhlciB0aHJlYWRzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBsY2stPmxsc19ucjsgKytpKSB7Ci0JCXN0cnVjdCBjbF9sb2NrICAgICAgICpzdWJsb2NrOwotCQlzdHJ1Y3QgbG92X2xvY2tfbGluayAqbGluazsKIAotCQlpZiAobGNrLT5sbHNfc3ViW2ldLnN1Yl9sb2NrID09IE5VTEwpIHsKLQkJCXN1YmxvY2sgPSBsb3Zfc3VibG9ja19hbGxvYyhlbnYsIGlvLCBsY2ssIGksICZsaW5rKTsKLQkJCWlmIChJU19FUlIoc3VibG9jaykpIHsKLQkJCQlyZXN1bHQgPSBQVFJfRVJSKHN1YmxvY2spOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2xfbG9ja19nZXRfdHJ1c3Qoc3VibG9jayk7Ci0JCQljbF9sb2NrX211dGV4X2dldChlbnYsIHN1YmxvY2spOwotCQkJY2xfbG9ja19tdXRleF9nZXQoZW52LCBwYXJlbnQpOwotCQkJLyoKLQkJCSAqIHJlY2hlY2sgdW5kZXIgbXV0ZXggdGhhdCBzdWItbG9jayB3YXNuJ3QgY3JlYXRlZAotCQkJICogY29uY3VycmVudGx5LCBhbmQgdGhhdCB0b3AtbG9jayBpcyBzdGlsbCBhbGl2ZS4KLQkJCSAqLwotCQkJaWYgKGxjay0+bGxzX3N1YltpXS5zdWJfbG9jayA9PSBOVUxMICYmCi0JCQkgICAgcGFyZW50LT5jbGxfc3RhdGUgPCBDTFNfRlJFRUlORykgewotCQkJCWxvdl9zdWJsb2NrX2Fkb3B0KGVudiwgbGNrLCBzdWJsb2NrLCBpLCBsaW5rKTsKLQkJCQljbF9sb2NrX211dGV4X3B1dChlbnYsIHBhcmVudCk7Ci0JCQl9IGVsc2UgewotCQkJCU9CRF9TTEFCX0ZSRUVfUFRSKGxpbmssIGxvdl9sb2NrX2xpbmtfa21lbSk7Ci0JCQkJY2xfbG9ja19tdXRleF9wdXQoZW52LCBwYXJlbnQpOwotCQkJCWNsX2xvY2tfdW5ob2xkKGVudiwgc3VibG9jaywKLQkJCQkJICAgICAgICJsb3YtcGFyZW50IiwgcGFyZW50KTsKLQkJCX0KLQkJCWNsX2xvY2tfbXV0ZXhfcHV0KGVudiwgc3VibG9jayk7Ci0JCQljbF9sb2NrX3B1dChlbnYsIHN1YmxvY2spOwotCQl9Ci0JfQogCS8qCiAJICogU29tZSBzdWItbG9ja3MgY2FuIGJlIG1pc3NpbmcgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBub3QgYSBwcm9ibGVtLAogCSAqIGJlY2F1c2UgZW5xdWV1ZSB3aWxsIGNyZWF0ZSB0aGVtIGFueXdheS4gTWFpbiBkdXR5IG9mIHRoaXMgZnVuY3Rpb24KQEAgLTUzMyw3ICs0OTksNyBAQAogc3RhdGljIGludCBsb3Zfc3VibG9ja19maWxsKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGNsX2xvY2sgKnBhcmVudCwKIAkJCSAgICBzdHJ1Y3QgY2xfaW8gKmlvLCBzdHJ1Y3QgbG92X2xvY2sgKmxjaywgaW50IGlkeCkKIHsKLQlzdHJ1Y3QgbG92X2xvY2tfbGluayAqbGluazsKKwlzdHJ1Y3QgbG92X2xvY2tfbGluayAqbGluayA9IE5VTEw7CiAJc3RydWN0IGNsX2xvY2sgICAgICAgKnN1YmxvY2s7CiAJaW50CQkgICByZXN1bHQ7CiAKQEAgLTExNTksNyArMTEyNSw3IEBACiAJc3RydWN0IGxvdl9sb2NrICpsY2s7CiAJaW50IHJlc3VsdDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobGNrLCBsb3ZfbG9ja19rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsY2ssIGxvdl9sb2NrX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAobGNrICE9IE5VTEwpIHsKIAkJY2xfbG9ja19zbGljZV9hZGQobG9jaywgJmxjay0+bGxzX2NsLCBvYmosICZsb3ZfbG9ja19vcHMpOwogCQlyZXN1bHQgPSBsb3ZfbG9ja19zdWJfaW5pdChlbnYsIGxjaywgaW8pOwpAQCAtMTE5NCw3ICsxMTYwLDcgQEAKIAlzdHJ1Y3QgbG92X2xvY2sgKmxjazsKIAlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobGNrLCBsb3ZfbG9ja19rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsY2ssIGxvdl9sb2NrX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAobGNrICE9IE5VTEwpIHsKIAkJY2xfbG9ja19zbGljZV9hZGQobG9jaywgJmxjay0+bGxzX2NsLCBvYmosICZsb3ZfZW1wdHlfbG9ja19vcHMpOwogCQlsY2stPmxsc19vcmlnID0gbG9jay0+Y2xsX2Rlc2NyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9sb2cuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZWRkOTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9sb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogR1BMIEhFQURFUiBTVEFSVAotICoKLSAqIERPIE5PVCBBTFRFUiBPUiBSRU1PVkUgQ09QWVJJR0hUIE5PVElDRVMgT1IgVEhJUyBGSUxFIEhFQURFUi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb25seSwKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBmb3IgbW9yZSBkZXRhaWxzIChhIGNvcHkgaXMgaW5jbHVkZWQKLSAqIGluIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCBhY2NvbXBhbmllZCB0aGlzIGNvZGUpLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvcHJvZHVjdHMvbHVzdHJlL2RvY3MvR1BMdjIucGRmCi0gKgotICogUGxlYXNlIGNvbnRhY3QgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgNDE1MCBOZXR3b3JrIENpcmNsZSwgU2FudGEgQ2xhcmEsCi0gKiBDQSA5NTA1NCBVU0Egb3IgdmlzaXQgd3d3LnN1bi5jb20gaWYgeW91IG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvcgotICogaGF2ZSBhbnkgcXVlc3Rpb25zLgotICoKLSAqIEdQTCBIRUFERVIgRU5ECi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMTAsIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCi0gKi8KLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBMdXN0cmUsIGh0dHA6Ly93d3cubHVzdHJlLm9yZy8KLSAqIEx1c3RyZSBpcyBhIHRyYWRlbWFyayBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0gKgotICogbHVzdHJlL2xvdi9sb3ZfbG9nLmMKLSAqCi0gKiBBdXRob3I6IFBoaWwgU2Nod2FuIDxwaGlsQGNsdXN0ZXJmcy5jb20+Ci0gKiBBdXRob3I6IFBldGVyIEJyYWFtIDxicmFhbUBjbHVzdGVyZnMuY29tPgotICogQXV0aG9yOiBNaWtlIFNoYXZlciA8c2hhdmVyQGNsdXN0ZXJmcy5jb20+Ci0gKi8KLQotI2RlZmluZSBERUJVR19TVUJTWVNURU0gU19MT1YKLSNpbmNsdWRlIDxsaW51eC9saWJjZnMvbGliY2ZzLmg+Ci0KLSNpbmNsdWRlIDxvYmRfc3VwcG9ydC5oPgotI2luY2x1ZGUgPGx1c3RyZV9saWIuaD4KLSNpbmNsdWRlIDxsdXN0cmVfbmV0Lmg+Ci0jaW5jbHVkZSA8bHVzdHJlL2x1c3RyZV9pZGwuaD4KLSNpbmNsdWRlIDxsdXN0cmVfZGxtLmg+Ci0jaW5jbHVkZSA8bHVzdHJlX21kcy5oPgotI2luY2x1ZGUgPG9iZF9jbGFzcy5oPgotI2luY2x1ZGUgPG9iZF9sb3YuaD4KLSNpbmNsdWRlIDxvYmRfb3N0Lmg+Ci0jaW5jbHVkZSA8bHByb2Nmc19zdGF0dXMuaD4KLSNpbmNsdWRlIDxsdXN0cmVfbG9nLmg+Ci0KLSNpbmNsdWRlICJsb3ZfaW50ZXJuYWwuaCIKLQotLyogQWRkIGxvZyByZWNvcmRzIGZvciBlYWNoIE9TQyB0aGF0IHRoaXMgb2JqZWN0IGlzIHN0cmlwZWQgb3ZlciwgYW5kIHJldHVybgotICogY29va2llcyBmb3IgZWFjaCBvbmUuICBXZSBfd291bGRfIGhhdmUgbmljZSBhYnN0cmFjdGlvbiBoZXJlLCBleGNlcHQgdGhhdAotICogd2UgbmVlZCB0byBrZWVwIGNvb2tpZXMgaW4gc3RyaXBlIG9yZGVyLCBldmVuIGlmIHNvbWUgYXJlIE5VTEwsIHNvIHRoYXQKLSAqIHRoZSByaWdodCBjb29raWVzIGFyZSBwYXNzZWQgYmFjayB0byB0aGUgcmlnaHQgT1NUcyBhdCB0aGUgY2xpZW50IHNpZGUuCi0gKiBVbnNldCBjb29raWVzIHNob3VsZCBiZSBhbGwtemVybyAod2hpY2ggd2lsbCBuZXZlciBvY2N1ciBuYXR1cmFsbHkpLiAqLwotc3RhdGljIGludCBsb3ZfbGxvZ19vcmlnaW5fYWRkKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwKLQkJCSAgICAgICBzdHJ1Y3QgbGxvZ19jdHh0ICpjdHh0LAotCQkJICAgICAgIHN0cnVjdCBsbG9nX3JlY19oZHIgKnJlYywKLQkJCSAgICAgICBzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLAotCQkJICAgICAgIHN0cnVjdCBsbG9nX2Nvb2tpZSAqbG9nY29va2llcywgaW50IG51bWNvb2tpZXMpCi17Ci0Jc3RydWN0IG9iZF9kZXZpY2UgKm9iZCA9IGN0eHQtPmxvY19vYmQ7Ci0Jc3RydWN0IGxvdl9vYmQgKmxvdiA9ICZvYmQtPnUubG92OwotCWludCBpLCByYyA9IDAsIGNvb2tpZXMgPSAwOwotCi0JTEFTU0VSVEYobG9nY29va2llcyAmJiBudW1jb29raWVzID49IGxzbS0+bHNtX3N0cmlwZV9jb3VudCwKLQkJICJsb2djb29raWVzICVwLCBudW1jb29raWVzICVkIGxzbS0+bHNtX3N0cmlwZV9jb3VudCAlZCBcbiIsCi0JCSBsb2djb29raWVzLCBudW1jb29raWVzLCBsc20tPmxzbV9zdHJpcGVfY291bnQpOwotCi0JZm9yIChpID0gMDsgaSA8IGxzbS0+bHNtX3N0cmlwZV9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBsb3Zfb2luZm8gKmxvaSA9IGxzbS0+bHNtX29pbmZvW2ldOwotCQlzdHJ1Y3Qgb2JkX2RldmljZSAqY2hpbGQgPQotCQkJbG92LT5sb3ZfdGd0c1tsb2ktPmxvaV9vc3RfaWR4XS0+bHRkX2V4cC0+ZXhwX29iZDsKLQkJc3RydWN0IGxsb2dfY3R4dCAqY2N0eHQgPSBsbG9nX2dldF9jb250ZXh0KGNoaWxkLCBjdHh0LT5sb2NfaWR4KTsKLQotCQkvKiBmaWxsIG1kcyB1bmxpbmsvc2V0YXR0ciBsb2cgcmVjb3JkICovCi0JCXN3aXRjaCAocmVjLT5scmhfdHlwZSkgewotCQljYXNlIE1EU19VTkxJTktfUkVDOiB7Ci0JCQlzdHJ1Y3QgbGxvZ191bmxpbmtfcmVjICpsdXIgPSAoc3RydWN0IGxsb2dfdW5saW5rX3JlYyAqKXJlYzsKLQkJCWx1ci0+bHVyX29pZCA9IG9zdGlkX2lkKCZsb2ktPmxvaV9vaSk7Ci0JCQlsdXItPmx1cl9vc2VxID0gKF9fdTMyKW9zdGlkX3NlcSgmbG9pLT5sb2lfb2kpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBNRFNfU0VUQVRUUjY0X1JFQzogewotCQkJc3RydWN0IGxsb2dfc2V0YXR0cjY0X3JlYyAqbHNyID0gKHN0cnVjdCBsbG9nX3NldGF0dHI2NF9yZWMgKilyZWM7Ci0JCQlsc3ItPmxzcl9vaSA9IGxvaS0+bG9pX29pOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogaW5qZWN0IGVycm9yIGluIGxsb2dfb2JkX2FkZCgpIGJlbG93ICovCi0JCWlmIChPQkRfRkFJTF9DSEVDSyhPQkRfRkFJTF9NRFNfRkFJTF9MT1ZfTE9HX0FERCkpIHsKLQkJCWxsb2dfY3R4dF9wdXQoY2N0eHQpOwotCQkJY2N0eHQgPSBOVUxMOwotCQl9Ci0JCXJjID0gbGxvZ19vYmRfYWRkKGVudiwgY2N0eHQsIHJlYywgTlVMTCwgbG9nY29va2llcyArIGNvb2tpZXMsCi0JCQkJICBudW1jb29raWVzIC0gY29va2llcyk7Ci0JCWxsb2dfY3R4dF9wdXQoY2N0eHQpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlDRVJST1IoIkNhbid0IGFkZCBsbG9nIChyYyA9ICVkKSBmb3Igc3RyaXBlICVkXG4iLAotCQkJICAgICAgIHJjLCBjb29raWVzKTsKLQkJCW1lbXNldChsb2djb29raWVzICsgY29va2llcywgMCwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGxsb2dfY29va2llKSk7Ci0JCQlyYyA9IDE7IC8qIHNraXAgdGhpcyBjb29raWUgKi8KLQkJfQotCQkvKiBOb3RlIHRoYXQgcmMgaXMgYWx3YXlzIDEgaWYgbGxvZ19vYmRfYWRkIHdhcyBzdWNjZXNzZnVsICovCi0JCWNvb2tpZXMgKz0gcmM7Ci0JfQotCXJldHVybiBjb29raWVzOwotfQotCi1zdGF0aWMgaW50IGxvdl9sbG9nX29yaWdpbl9jb25uZWN0KHN0cnVjdCBsbG9nX2N0eHQgKmN0eHQsCi0JCQkJICAgc3RydWN0IGxsb2dfbG9naWQgKmxvZ2lkLAotCQkJCSAgIHN0cnVjdCBsbG9nX2dlbiAqZ2VuLAotCQkJCSAgIHN0cnVjdCBvYmRfdXVpZCAqdXVpZCkKLXsKLQlzdHJ1Y3Qgb2JkX2RldmljZSAqb2JkID0gY3R4dC0+bG9jX29iZDsKLQlzdHJ1Y3QgbG92X29iZCAqbG92ID0gJm9iZC0+dS5sb3Y7Ci0JaW50IGksIHJjID0gMCwgZXJyID0gMDsKLQotCW9iZF9nZXRyZWYob2JkKTsKLQlmb3IgKGkgPSAwOyBpIDwgbG92LT5kZXNjLmxkX3RndF9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBvYmRfZGV2aWNlICpjaGlsZDsKLQkJc3RydWN0IGxsb2dfY3R4dCAqY2N0eHQ7Ci0KLQkJaWYgKCFsb3YtPmxvdl90Z3RzW2ldIHx8ICFsb3YtPmxvdl90Z3RzW2ldLT5sdGRfYWN0aXZlKQotCQkJY29udGludWU7Ci0JCWlmICh1dWlkICYmICFvYmRfdXVpZF9lcXVhbHModXVpZCwgJmxvdi0+bG92X3RndHNbaV0tPmx0ZF91dWlkKSkKLQkJCWNvbnRpbnVlOwotCQlDREVCVUcoRF9DT05GSUcsICJjb25uZWN0ICVkLyVkXG4iLCBpLCBsb3YtPmRlc2MubGRfdGd0X2NvdW50KTsKLQkJY2hpbGQgPSBsb3YtPmxvdl90Z3RzW2ldLT5sdGRfZXhwLT5leHBfb2JkOwotCQljY3R4dCA9IGxsb2dfZ2V0X2NvbnRleHQoY2hpbGQsIGN0eHQtPmxvY19pZHgpOwotCQlyYyA9IGxsb2dfY29ubmVjdChjY3R4dCwgbG9naWQsIGdlbiwgdXVpZCk7Ci0JCWxsb2dfY3R4dF9wdXQoY2N0eHQpOwotCi0JCWlmIChyYykgewotCQkJQ0VSUk9SKCJlcnJvciBvc2NfbGxvZ19jb25uZWN0IHRndCAlZCAoJWQpXG4iLCBpLCByYyk7Ci0JCQlpZiAoIWVycikKLQkJCQllcnIgPSByYzsKLQkJfQotCX0KLQlvYmRfcHV0cmVmKG9iZCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiB0aGUgcmVwbGljYXRvcnMgY29tbWl0IGNhbGxiYWNrICovCi1zdGF0aWMgaW50IGxvdl9sbG9nX3JlcGxfY2FuY2VsKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwKLQkJCQlzdHJ1Y3QgbGxvZ19jdHh0ICpjdHh0LAotCQkJCXN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc20sCi0JCQkJaW50IGNvdW50LCBzdHJ1Y3QgbGxvZ19jb29raWUgKmNvb2tpZXMsCi0JCQkJaW50IGZsYWdzKQotewotCXN0cnVjdCBsb3Zfb2JkICpsb3Y7Ci0Jc3RydWN0IG9iZF9kZXZpY2UgKm9iZCA9IGN0eHQtPmxvY19vYmQ7Ci0JaW50IHJjID0gMCwgaTsKLQotCUxBU1NFUlQobHNtICE9IE5VTEwpOwotCUxBU1NFUlQoY291bnQgPT0gbHNtLT5sc21fc3RyaXBlX2NvdW50KTsKLQotCWxvdiA9ICZvYmQtPnUubG92OwotCW9iZF9nZXRyZWYob2JkKTsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgY29va2llcysrKSB7Ci0JCXN0cnVjdCBsb3Zfb2luZm8gKmxvaSA9IGxzbS0+bHNtX29pbmZvW2ldOwotCQlzdHJ1Y3Qgb2JkX2RldmljZSAqY2hpbGQgPQotCQkJbG92LT5sb3ZfdGd0c1tsb2ktPmxvaV9vc3RfaWR4XS0+bHRkX2V4cC0+ZXhwX29iZDsKLQkJc3RydWN0IGxsb2dfY3R4dCAqY2N0eHQgPQotCQkJbGxvZ19nZXRfY29udGV4dChjaGlsZCwgY3R4dC0+bG9jX2lkeCk7Ci0JCWludCBlcnI7Ci0KLQkJZXJyID0gbGxvZ19jYW5jZWwoZW52LCBjY3R4dCwgTlVMTCwgMSwgY29va2llcywgZmxhZ3MpOwotCQlsbG9nX2N0eHRfcHV0KGNjdHh0KTsKLQkJaWYgKGVyciAmJiBsb3YtPmxvdl90Z3RzW2xvaS0+bG9pX29zdF9pZHhdLT5sdGRfYWN0aXZlKSB7Ci0JCQlDRVJST1IoIiVzOiBvYmppZCAiRE9TVElEIiBzdWJvYmogIkRPU1RJRAotCQkJICAgICAgICIgb24gT1NUIGlkeCAlZDogcmMgPSAlZFxuIiwKLQkJCSAgICAgICBvYmQtPm9iZF9uYW1lLCBQT1NUSUQoJmxzbS0+bHNtX29pKSwKLQkJCSAgICAgICBQT1NUSUQoJmxvaS0+bG9pX29pKSwgbG9pLT5sb2lfb3N0X2lkeCwgZXJyKTsKLQkJCWlmICghcmMpCi0JCQkJcmMgPSBlcnI7Ci0JCX0KLQl9Ci0Jb2JkX3B1dHJlZihvYmQpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHN0cnVjdCBsbG9nX29wZXJhdGlvbnMgbG92X21kc19vc3Rfb3JpZ19sb2dvcHMgPSB7Ci0JLmxvcF9vYmRfYWRkCT0gbG92X2xsb2dfb3JpZ2luX2FkZCwKLQkubG9wX2Nvbm5lY3QJPSBsb3ZfbGxvZ19vcmlnaW5fY29ubmVjdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGxvZ19vcGVyYXRpb25zIGxvdl9zaXplX3JlcGxfbG9nb3BzID0gewotCS5sb3BfY2FuY2VsCT0gbG92X2xsb2dfcmVwbF9jYW5jZWwsCi19OwotCi1pbnQgbG92X2xsb2dfaW5pdChzdHJ1Y3Qgb2JkX2RldmljZSAqb2JkLCBzdHJ1Y3Qgb2JkX2xsb2dfZ3JvdXAgKm9sZywKLQkJICBzdHJ1Y3Qgb2JkX2RldmljZSAqZGlza19vYmQsIGludCAqaW5kZXgpCi17Ci0Jc3RydWN0IGxvdl9vYmQgKmxvdiA9ICZvYmQtPnUubG92OwotCXN0cnVjdCBvYmRfZGV2aWNlICpjaGlsZDsKLQlpbnQgaSwgcmMgPSAwOwotCi0JTEFTU0VSVChvbGcgPT0gJm9iZC0+b2JkX29sZyk7Ci0JcmMgPSBsbG9nX3NldHVwKE5VTEwsIG9iZCwgb2xnLCBMTE9HX01EU19PU1RfT1JJR19DVFhULCBkaXNrX29iZCwKLQkJCSZsb3ZfbWRzX29zdF9vcmlnX2xvZ29wcyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IGxsb2dfc2V0dXAoTlVMTCwgb2JkLCBvbGcsIExMT0dfU0laRV9SRVBMX0NUWFQsIGRpc2tfb2JkLAotCQkJJmxvdl9zaXplX3JlcGxfbG9nb3BzKTsKLQlpZiAocmMpCi0JCUdPVE8oZXJyX2NsZWFudXAsIHJjKTsKLQotCW9iZF9nZXRyZWYob2JkKTsKLQkvKiBjb3VudCBtYXkgbm90IG1hdGNoIGxvdi0+ZGVzYy5sZF90Z3RfY291bnQgZHVyaW5nIGR5bmFtaWMgb3N0IGFkZCAqLwotCWZvciAoaSA9IDA7IGkgPCBsb3YtPmRlc2MubGRfdGd0X2NvdW50OyBpKyspIHsKLQkJaWYgKCFsb3YtPmxvdl90Z3RzW2ldKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGluZGV4ICYmIGkgIT0gKmluZGV4KQotCQkJY29udGludWU7Ci0KLQkJY2hpbGQgPSBsb3YtPmxvdl90Z3RzW2ldLT5sdGRfb2JkOwotCQlyYyA9IG9iZF9sbG9nX2luaXQoY2hpbGQsICZjaGlsZC0+b2JkX29sZywgZGlza19vYmQsICZpKTsKLQkJaWYgKHJjKQotCQkJQ0VSUk9SKCJlcnJvciBvc2NfbGxvZ19pbml0IGlkeCAlZCBvc2MgJyVzJyB0Z3QgJyVzJyAiCi0JCQkgICAgICAgIihyYz0lZClcbiIsIGksIGNoaWxkLT5vYmRfbmFtZSwKLQkJCSAgICAgICBkaXNrX29iZC0+b2JkX25hbWUsIHJjKTsKLQkJcmMgPSAwOwotCX0KLQlvYmRfcHV0cmVmKG9iZCk7Ci0JR09UTyhlcnJfY2xlYW51cCwgcmMpOwotZXJyX2NsZWFudXA6Ci0JaWYgKHJjKSB7Ci0JCXN0cnVjdCBsbG9nX2N0eHQgKmN0eHQgPQotCQkJbGxvZ19nZXRfY29udGV4dChvYmQsIExMT0dfU0laRV9SRVBMX0NUWFQpOwotCQlpZiAoY3R4dCkKLQkJCWxsb2dfY2xlYW51cChOVUxMLCBjdHh0KTsKLQkJY3R4dCA9IGxsb2dfZ2V0X2NvbnRleHQob2JkLCBMTE9HX01EU19PU1RfT1JJR19DVFhUKTsKLQkJaWYgKGN0eHQpCi0JCQlsbG9nX2NsZWFudXAoTlVMTCwgY3R4dCk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotaW50IGxvdl9sbG9nX2ZpbmlzaChzdHJ1Y3Qgb2JkX2RldmljZSAqb2JkLCBpbnQgY291bnQpCi17Ci0Jc3RydWN0IGxsb2dfY3R4dCAqY3R4dDsKLQotCS8qIGNsZWFudXAgb3VyIGxsb2dzIG9ubHkgaWYgdGhlIGN0eHRzIGhhdmUgYmVlbiBzZXR1cAotCSAqIChjbGllbnQgbG92IGRvZXNuJ3Qgc2V0dXAsIG1kcyBsb3YgZG9lcykuICovCi0JY3R4dCA9IGxsb2dfZ2V0X2NvbnRleHQob2JkLCBMTE9HX01EU19PU1RfT1JJR19DVFhUKTsKLQlpZiAoY3R4dCkKLQkJbGxvZ19jbGVhbnVwKE5VTEwsIGN0eHQpOwotCi0JY3R4dCA9IGxsb2dfZ2V0X2NvbnRleHQob2JkLCBMTE9HX1NJWkVfUkVQTF9DVFhUKTsKLQlpZiAoY3R4dCkKLQkJbGxvZ19jbGVhbnVwKE5VTEwsIGN0eHQpOwotCi0JLyogbG92LT50Z3QgbGxvZ3MgYXJlIGNsZWFuZWQgZHVyaW5nIG9zY19jbGVhbnVwLiAqLwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9tZXJnZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9tZXJnZS5jCmluZGV4IDlkZWZhNTUuLmRhOTU5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfbWVyZ2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X21lcmdlLmMKQEAgLTM5LDggKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saWJjZnMvbGliY2ZzLmg+CiAKICNpbmNsdWRlIDxvYmRfY2xhc3MuaD4KLSNpbmNsdWRlIDxvYmRfbG92Lmg+Ci0KICNpbmNsdWRlICJsb3ZfaW50ZXJuYWwuaCIKIAogLyoqIE1lcmdlIHRoZSBsb2NrIHZhbHVlIGJsb2NrKCZsdmIpIGF0dHJpYnV0ZXMgYW5kIEtNUyBmcm9tIGVhY2ggb2YgdGhlCkBAIC02MCw3ICs1OCw3IEBACiAJaW50IGk7CiAJaW50IHJjID0gMDsKIAotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmxzbS0+bHNtX2xvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxzbS0+bHNtX2xvY2spOwogCUxBU1NFUlQobHNtLT5sc21fbG9ja19vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKIAogCUNERUJVRyhEX0lOT0RFLCAiTURUIElEICJET1NUSUQiIGluaXRpYWwgdmFsdWU6IHM9IkxQVTY0IiBtPSJMUFU2NApAQCAtMTQ3LDcgKzE0NSw3IEBACiAJaW50IHN0cmlwZSA9IDA7CiAJX191NjQga21zOwogCi0JTEFTU0VSVChzcGluX2lzX2xvY2tlZCgmbHNtLT5sc21fbG9jaykpOworCWFzc2VydF9zcGluX2xvY2tlZCgmbHNtLT5sc21fbG9jayk7CiAJTEFTU0VSVChsc20tPmxzbV9sb2NrX293bmVyID09IGN1cnJlbnRfcGlkKCkpOwogCiAJaWYgKHNocmluaykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9vYmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3Zfb2JkLmMKaW5kZXggMDI1MDlkMC4uMmQ4NDNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9vYmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X29iZC5jCkBAIC01MCwxNiArNTAsMTMgQEAKICNpbmNsdWRlIDxsdXN0cmUvbHVzdHJlX2lkbC5oPgogI2luY2x1ZGUgPGx1c3RyZV9kbG0uaD4KICNpbmNsdWRlIDxsdXN0cmVfbWRzLmg+Ci0jaW5jbHVkZSA8bHVzdHJlX2RlYnVnLmg+CiAjaW5jbHVkZSA8b2JkX2NsYXNzLmg+Ci0jaW5jbHVkZSA8b2JkX2xvdi5oPgogI2luY2x1ZGUgPG9iZF9vc3QuaD4KICNpbmNsdWRlIDxscHJvY2ZzX3N0YXR1cy5oPgogI2luY2x1ZGUgPGx1c3RyZV9wYXJhbS5oPgogI2luY2x1ZGUgPGNsX29iamVjdC5oPgogI2luY2x1ZGUgPGxjbGllbnQuaD4gLyogZm9yIGNsX2NsaWVudF9scnUgKi8KICNpbmNsdWRlIDxsdXN0cmUvbGxfZmllbWFwLmg+Ci0jaW5jbHVkZSA8bHVzdHJlX2xvZy5oPgogI2luY2x1ZGUgPGx1c3RyZV9maWQuaD4KIAogI2luY2x1ZGUgImxvdl9pbnRlcm5hbC5oIgpAQCAtMjgwLDcgKzI3Nyw3IEBACiAKIAlvc2Nfb2JkID0gY2xhc3NfZXhwMm9iZCh0Z3QtPmx0ZF9leHApOwogCUNERUJVRyhEX0NPTkZJRywgIiVzOiBkaXNjb25uZWN0aW5nIHRhcmdldCAlc1xuIiwKLQkgICAgICAgb2JkLT5vYmRfbmFtZSwgb3NjX29iZC0+b2JkX25hbWUpOworCQlvYmQtPm9iZF9uYW1lLCBvc2Nfb2JkID8gb3NjX29iZC0+b2JkX25hbWUgOiAiTlVMTCIpOwogCiAJaWYgKHRndC0+bHRkX2FjdGl2ZSkgewogCQl0Z3QtPmx0ZF9hY3RpdmUgPSAwOwpAQCAtMjg4LDExICsyODUsMTEgQEAKIAkJdGd0LT5sdGRfZXhwLT5leHBfb2JkLT5vYmRfaW5hY3RpdmUgPSAxOwogCX0KIAotCWxvdl9wcm9jX2RpciA9IG9iZC0+b2JkX3Byb2NfcHJpdmF0ZTsKLQlpZiAobG92X3Byb2NfZGlyKQotCQlscHJvY2ZzX3JlbW92ZV9wcm9jX2VudHJ5KG9zY19vYmQtPm9iZF9uYW1lLCBsb3ZfcHJvY19kaXIpOwotCiAJaWYgKG9zY19vYmQpIHsKKwkJbG92X3Byb2NfZGlyID0gb2JkLT5vYmRfcHJvY19wcml2YXRlOworCQlpZiAobG92X3Byb2NfZGlyKSB7CisJCQlscHJvY2ZzX3JlbW92ZV9wcm9jX2VudHJ5KG9zY19vYmQtPm9iZF9uYW1lLCBsb3ZfcHJvY19kaXIpOworCQl9CiAJCS8qIFBhc3MgaXQgb24gdG8gb3VyIGNsaWVudHMuCiAJCSAqIFhYWCBUaGlzIHNob3VsZCBiZSBhbiBhcmd1bWVudCB0byBkaXNjb25uZWN0LAogCQkgKiBYWFggbm90IGEgYmFjay1kb29yIGZsYWcgb24gdGhlIE9CRC4gIEFoIHdlbGwuCkBAIC03MjYsOCArNzIzLDggQEAKIAkJaWYgKCp2YWwgIT0gMCkKIAkJCUxDT05TT0xFX0lORk8oIkluY3JlYXNpbmcgZGVmYXVsdCBzdHJpcGUgc2l6ZSB0byAiCiAJCQkJICAgICAgIm1pbmltdW0gJXVcbiIsCi0JCQkJICAgICAgTE9WX0RFRkFVTFRfU1RSSVBFX1NJWkUpOwotCQkqdmFsID0gTE9WX0RFRkFVTFRfU1RSSVBFX1NJWkU7CisJCQkJICAgICAgTE9WX0RFU0NfU1RSSVBFX1NJWkVfREVGQVVMVCk7CisJCSp2YWwgPSBMT1ZfREVTQ19TVFJJUEVfU0laRV9ERUZBVUxUOwogCX0gZWxzZSBpZiAoKnZhbCAmIChMT1ZfTUlOX1NUUklQRV9TSVpFIC0gMSkpIHsKIAkJKnZhbCAmPSB+KExPVl9NSU5fU1RSSVBFX1NJWkUgLSAxKTsKIAkJTENPTlNPTEVfV0FSTigiQ2hhbmdpbmcgZGVmYXVsdCBzdHJpcGUgc2l6ZSB0byAiTFBVNjQiIChhICIKQEAgLTc1Myw5ICs3NTAsOCBAQAogCiB2b2lkIGxvdl9maXhfZGVzY19xb3NfbWF4YWdlKF9fdTMyICp2YWwpCiB7Ci0JLyogZml4IHFvc19tYXhhZ2UgKi8KIAlpZiAoKnZhbCA9PSAwKQotCQkqdmFsID0gUU9TX0RFRkFVTFRfTUFYQUdFOworCQkqdmFsID0gTE9WX0RFU0NfUU9TX01BWEFHRV9ERUZBVUxUOwogfQogCiB2b2lkIGxvdl9maXhfZGVzYyhzdHJ1Y3QgbG92X2Rlc2MgKmRlc2MpCkBAIC04NjEsMTIgKzg1NywxMCBAQAogCQl9CiAJCWJyZWFrOwogCX0KLQljYXNlIE9CRF9DTEVBTlVQX0VYUE9SVFM6Ci0JCXJjID0gb2JkX2xsb2dfZmluaXNoKG9iZCwgMCk7Ci0JCWlmIChyYyAhPSAwKQotCQkJQ0VSUk9SKCJmYWlsZWQgdG8gY2xlYW51cCBsbG9nZ2luZyBzdWJzeXN0ZW1zXG4iKTsKKwlkZWZhdWx0OgogCQlicmVhazsKIAl9CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIyNTQsMTEgKzIyNDgsMTIgQEAKIAlpZiAoZm1fZW5kX29mZnNldCA9PSAtRUlOVkFMKQogCQlHT1RPKG91dCwgcmMgPSAtRUlOVkFMKTsKIAorCWlmIChmaWVtYXBfY291bnRfdG9fc2l6ZShmaWVtYXAtPmZtX2V4dGVudF9jb3VudCkgPiAqdmFsbGVuKQorCQlmaWVtYXAtPmZtX2V4dGVudF9jb3VudCA9IGZpZW1hcF9zaXplX3RvX2NvdW50KCp2YWxsZW4pOwogCWlmIChmaWVtYXAtPmZtX2V4dGVudF9jb3VudCA9PSAwKSB7CiAJCWdldF9udW1fZXh0ZW50cyA9IDE7CiAJCWNvdW50X2xvY2FsID0gMDsKIAl9Ci0KIAkvKiBDaGVjayBlYWNoIHN0cmlwZSAqLwogCWZvciAoY3VyX3N0cmlwZSA9IHN0YXJ0X3N0cmlwZSwgaSA9IDA7IGkgPCBzdHJpcGVfY291bnQ7CiAJICAgICBpKyssIGN1cl9zdHJpcGUgPSAoY3VyX3N0cmlwZSArIDEpICUgbHNtLT5sc21fc3RyaXBlX2NvdW50KSB7CkBAIC0yODA4LDggKzI4MDMsNiBAQAogCS5vX2dldF9pbmZvCSAgICA9IGxvdl9nZXRfaW5mbywKIAkub19zZXRfaW5mb19hc3luYyAgICAgID0gbG92X3NldF9pbmZvX2FzeW5jLAogCS5vX2V4dGVudF9jYWxjCSA9IGxvdl9leHRlbnRfY2FsYywKLQkub19sbG9nX2luaXQJICAgPSBsb3ZfbGxvZ19pbml0LAotCS5vX2xsb2dfZmluaXNoCSA9IGxvdl9sbG9nX2ZpbmlzaCwKIAkub19ub3RpZnkJICAgICAgPSBsb3Zfbm90aWZ5LAogCS5vX3Bvb2xfbmV3CSAgICA9IGxvdl9wb29sX25ldywKIAkub19wb29sX3JlbQkgICAgPSBsb3ZfcG9vbF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X29iamVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9vYmplY3QuYwppbmRleCBkNmIyY2I0Li45OTJjODBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X29iamVjdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3Zfb2JqZWN0LmMKQEAgLTQyLDcgKzQyLDYgQEAKICNkZWZpbmUgREVCVUdfU1VCU1lTVEVNIFNfTE9WCiAKICNpbmNsdWRlICJsb3ZfY2xfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDxsdXN0cmVfZGVidWcuaD4KIAogLyoqIFxhZGR0b2dyb3VwIGxvdgogICogIEB7CkBAIC04ODUsNyArODg0LDcgQEAKIAlzdHJ1Y3QgbG92X29iamVjdCAqbG92OwogCXN0cnVjdCBsdV9vYmplY3QgICpvYmo7CiAKLQlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGxvdiwgbG92X29iamVjdF9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsb3YsIGxvdl9vYmplY3Rfa21lbSwgR0ZQX05PRlMpOwogCWlmIChsb3YgIT0gTlVMTCkgewogCQlvYmogPSBsb3YybHUobG92KTsKIAkJbHVfb2JqZWN0X2luaXQob2JqLCBOVUxMLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9vZmZzZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3Zfb2Zmc2V0LmMKaW5kZXggMDQ4NjNhNy4uMzc5NTY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9vZmZzZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X29mZnNldC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGliY2ZzL2xpYmNmcy5oPgogCiAjaW5jbHVkZSA8b2JkX2NsYXNzLmg+Ci0jaW5jbHVkZSA8b2JkX2xvdi5oPgogCiAjaW5jbHVkZSAibG92X2ludGVybmFsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZfcGFjay5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9wYWNrLmMKaW5kZXggNzQyMDBjZi4uNTlhYjdjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9wYWNrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9wYWNrLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKIAogI2luY2x1ZGUgPGx1c3RyZV9uZXQuaD4KICNpbmNsdWRlIDxvYmQuaD4KLSNpbmNsdWRlIDxvYmRfbG92Lmg+CiAjaW5jbHVkZSA8b2JkX2NsYXNzLmg+CiAjaW5jbHVkZSA8b2JkX3N1cHBvcnQuaD4KICNpbmNsdWRlIDxsdXN0cmUvbHVzdHJlX3VzZXIuaD4KQEAgLTE3Nyw4ICsxNzYsOSBAQAogCQkgKiBBbnl3YXksIHRoaXMgaXMgcHJldHR5IGluYWNjdXJhdGUgc2luY2UgbGRfdGd0X2NvdW50IG5vdwogCQkgKiByZXByZXNlbnRzIG1heCBpbmRleCBhbmQgd2Ugc2hvdWxkIHJlbHkgb24gdGhlIGFjdHVhbCBudW1iZXIKIAkJICogb2YgT1NUcyBpbnN0ZWFkICovCi0JCXN0cmlwZV9jb3VudCA9IGxvdl9tZHNfbWRfc3RyaXBlY250KGxvdi0+bG92X29jZC5vY2RfbWF4X2Vhc2l6ZSwKLQkJCQkJCSAgICBsbW1fbWFnaWMpOworCQlzdHJpcGVfY291bnQgPSBsb3ZfbWRzX21kX21heF9zdHJpcGVfY291bnQoCisJCQlsb3YtPmxvdl9vY2Qub2NkX21heF9lYXNpemUsIGxtbV9tYWdpYyk7CisKIAkJaWYgKHN0cmlwZV9jb3VudCA+IGxvdi0+ZGVzYy5sZF90Z3RfY291bnQpCiAJCQlzdHJpcGVfY291bnQgPSBsb3YtPmRlc2MubGRfdGd0X2NvdW50OwogCX0KQEAgLTI2NCw4ICsyNjQsOCBAQAogCSAqIGxhcmdlciBFQSBzaXplcyAqLwogCWlmIChsb3YtPmxvdl9vY2Qub2NkX2Nvbm5lY3RfZmxhZ3MgJiBPQkRfQ09OTkVDVF9NQVhfRUFTSVpFICYmCiAJICAgIGxvdi0+bG92X29jZC5vY2RfbWF4X2Vhc2l6ZSkKLQkJbWF4X3N0cmlwZXMgPSBsb3ZfbWRzX21kX3N0cmlwZWNudChsb3YtPmxvdl9vY2Qub2NkX21heF9lYXNpemUsCi0JCQkJCQkgICBtYWdpYyk7CisJCW1heF9zdHJpcGVzID0gbG92X21kc19tZF9tYXhfc3RyaXBlX2NvdW50KAorCQkJbG92LT5sb3Zfb2NkLm9jZF9tYXhfZWFzaXplLCBtYWdpYyk7CiAKIAlpZiAoc3RyaXBlX2NvdW50ID4gbWF4X3N0cmlwZXMpCiAJCXN0cmlwZV9jb3VudCA9IG1heF9zdHJpcGVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdl9yZXF1ZXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X3JlcXVlc3QuYwppbmRleCBhNTQ4MWQ3Li5iZDY0OTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X3JlcXVlc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92X3JlcXVlc3QuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmNmcy9saWJjZnMuaD4KIAogI2luY2x1ZGUgPG9iZF9jbGFzcy5oPgotI2luY2x1ZGUgPG9iZF9sb3YuaD4KICNpbmNsdWRlIDxsdXN0cmUvbHVzdHJlX2lkbC5oPgogCiAjaW5jbHVkZSAibG92X2ludGVybmFsLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92c3ViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdnN1Yl9kZXYuYwppbmRleCA5MjZjMzVhLi41MmZiNmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92c3ViX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZzdWJfZGV2LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXN0cnVjdCBsb3ZzdWJfcmVxICpsc3I7CiAJaW50IHJlc3VsdDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobHNyLCBsb3ZzdWJfcmVxX2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGxzciwgbG92c3ViX3JlcV9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKGxzciAhPSBOVUxMKSB7CiAJCWNsX3JlcV9zbGljZV9hZGQocmVxLCAmbHNyLT5sc3JxX2NsLCBkZXYsICZsb3ZzdWJfcmVxX29wcyk7CiAJCXJlc3VsdCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92c3ViX2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZzdWJfbG9jay5jCmluZGV4IDgwMzA1YWEuLjYyYjY5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZzdWJfbG9jay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZzdWJfbG9jay5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAlzdHJ1Y3QgbG92c3ViX2xvY2sgKmxzazsKIAlpbnQgcmVzdWx0OwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsc2ssIGxvdnN1Yl9sb2NrX2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGxzaywgbG92c3ViX2xvY2tfa21lbSwgR0ZQX05PRlMpOwogCWlmIChsc2sgIT0gTlVMTCkgewogCQlJTklUX0xJU1RfSEVBRCgmbHNrLT5sc3NfcGFyZW50cyk7CiAJCWNsX2xvY2tfc2xpY2VfYWRkKGxvY2ssICZsc2stPmxzc19jbCwgb2JqLCAmbG92c3ViX2xvY2tfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZzdWJfb2JqZWN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sb3YvbG92c3ViX29iamVjdC5jCmluZGV4IDg5NzYwYjMuLjU3ZTM2MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xvdi9sb3ZzdWJfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbG92L2xvdnN1Yl9vYmplY3QuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJc3RydWN0IGxvdnN1Yl9vYmplY3QgKmxvczsKIAlzdHJ1Y3QgbHVfb2JqZWN0ICAgICAqb2JqOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsb3MsIGxvdnN1Yl9vYmplY3Rfa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobG9zLCBsb3ZzdWJfb2JqZWN0X2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAobG9zICE9IE5VTEwpIHsKIAkJc3RydWN0IGNsX29iamVjdF9oZWFkZXIgKmhkcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbWRjL21kY19sb2Nrcy5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbWRjL21kY19sb2Nrcy5jCmluZGV4IDUzMDIyZWMuLjFhOGNkOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL21kYy9tZGNfbG9ja3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZGMvbWRjX2xvY2tzLmMKQEAgLTQ0Miw5ICs0NDIsOSBAQAogCW1kY191bmxpbmtfcGFjayhyZXEsIG9wX2RhdGEpOwogCiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9NRFRfTUQsIFJDTF9TRVJWRVIsCi0JCQkgICAgIG9iZGRldi0+dS5jbGkuY2xfbWF4X21kc19lYXNpemUpOworCQkJICAgICBvYmRkZXYtPnUuY2xpLmNsX2RlZmF1bHRfbWRzX2Vhc2l6ZSk7CiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9BQ0wsIFJDTF9TRVJWRVIsCi0JCQkgICAgIG9iZGRldi0+dS5jbGkuY2xfbWF4X21kc19jb29raWVzaXplKTsKKwkJCSAgICAgb2JkZGV2LT51LmNsaS5jbF9kZWZhdWx0X21kc19jb29raWVzaXplKTsKIAlwdGxycGNfcmVxdWVzdF9zZXRfcmVwbGVuKHJlcSk7CiAJcmV0dXJuIHJlcTsKIH0KQEAgLTQ2Miw2ICs0NjIsNyBAQAogCQkJCQkgICAgICAgT0JEX01EX0ZMUk1UUEVSTSA6IE9CRF9NRF9GTEFDTCk7CiAJc3RydWN0IGxkbG1faW50ZW50ICAgICpsaXQ7CiAJaW50CQkgICAgcmM7CisJaW50CQkgICAgZWFzaXplOwogCiAJcmVxID0gcHRscnBjX3JlcXVlc3RfYWxsb2MoY2xhc3NfZXhwMmNsaWltcChleHApLAogCQkJCSAgICZSUUZfTERMTV9JTlRFTlRfR0VUQVRUUik7CkBAIC00ODIsMTIgKzQ4MywxNSBAQAogCWxpdCA9IHJlcV9jYXBzdWxlX2NsaWVudF9nZXQoJnJlcS0+cnFfcGlsbCwgJlJNRl9MRExNX0lOVEVOVCk7CiAJbGl0LT5vcGMgPSAoX191NjQpaXQtPml0X29wOwogCi0JLyogcGFjayB0aGUgaW50ZW5kZWQgcmVxdWVzdCAqLwotCW1kY19nZXRhdHRyX3BhY2socmVxLCB2YWxpZCwgaXQtPml0X2ZsYWdzLCBvcF9kYXRhLAotCQkJIG9iZGRldi0+dS5jbGkuY2xfbWF4X21kc19lYXNpemUpOworCWlmIChvYmRkZXYtPnUuY2xpLmNsX2RlZmF1bHRfbWRzX2Vhc2l6ZSA+IDApCisJCWVhc2l6ZSA9IG9iZGRldi0+dS5jbGkuY2xfZGVmYXVsdF9tZHNfZWFzaXplOworCWVsc2UKKwkJZWFzaXplID0gb2JkZGV2LT51LmNsaS5jbF9tYXhfbWRzX2Vhc2l6ZTsKIAotCXJlcV9jYXBzdWxlX3NldF9zaXplKCZyZXEtPnJxX3BpbGwsICZSTUZfTURUX01ELCBSQ0xfU0VSVkVSLAotCQkJICAgICBvYmRkZXYtPnUuY2xpLmNsX21heF9tZHNfZWFzaXplKTsKKwkvKiBwYWNrIHRoZSBpbnRlbmRlZCByZXF1ZXN0ICovCisJbWRjX2dldGF0dHJfcGFjayhyZXEsIHZhbGlkLCBpdC0+aXRfZmxhZ3MsIG9wX2RhdGEsIGVhc2l6ZSk7CisKKwlyZXFfY2Fwc3VsZV9zZXRfc2l6ZSgmcmVxLT5ycV9waWxsLCAmUk1GX01EVF9NRCwgUkNMX1NFUlZFUiwgZWFzaXplKTsKIAlpZiAoY2xpZW50X2lzX3JlbW90ZShleHApKQogCQlyZXFfY2Fwc3VsZV9zZXRfc2l6ZSgmcmVxLT5ycV9waWxsLCAmUk1GX0FDTCwgUkNMX1NFUlZFUiwKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbWR0X3JlbW90ZV9wZXJtKSk7CkBAIC01MjgsNyArNTMyLDcgQEAKIAlsYXlvdXQtPmxpX29wYyA9IExBWU9VVF9JTlRFTlRfQUNDRVNTOwogCiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9ETE1fTFZCLCBSQ0xfU0VSVkVSLAotCQkJb2JkLT51LmNsaS5jbF9tYXhfbWRzX2Vhc2l6ZSk7CisJCQkgICAgIG9iZC0+dS5jbGkuY2xfZGVmYXVsdF9tZHNfZWFzaXplKTsKIAlwdGxycGNfcmVxdWVzdF9zZXRfcmVwbGVuKHJlcSk7CiAJcmV0dXJuIHJlcTsKIH0KQEAgLTg5Myw3ICs4OTcsMTAgQEAKIAltZGNfcHV0X3JwY19sb2NrKG9iZGRldi0+dS5jbGkuY2xfcnBjX2xvY2ssIGl0KTsKIAogCWlmIChyYyA8IDApIHsKLQkJQ0VSUk9SKCJsZGxtX2NsaV9lbnF1ZXVlOiAlZFxuIiwgcmMpOworCQlDREVCVUdfTElNSVQoKHJjID09IC1FQUNDRVMgfHwgcmMgPT0gLUVJRFJNKSA/IERfSU5GTyA6IERfRVJST1IsCisJCQkgICAgICIlczogbGRsbV9jbGlfZW5xdWV1ZSBmYWlsZWQ6IHJjID0gJWRcbiIsCisJCQkgICAgIG9iZGRldi0+b2JkX25hbWUsIHJjKTsKKwogCQltZGNfY2xlYXJfcmVwbGF5X2ZsYWcocmVxLCByYyk7CiAJCXB0bHJwY19yZXFfZmluaXNoZWQocmVxKTsKIAkJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbWRjL21kY19yZWludC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbWRjL21kY19yZWludC5jCmluZGV4IGQ3OWFhMTYuLjA4ZTgwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL21kYy9tZGNfcmVpbnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZGMvbWRjX3JlaW50LmMKQEAgLTE5OSw3ICsxOTksOCBAQAogCSpyZXF1ZXN0ID0gcmVxOwogCWlmIChyYyAmJiByZXEtPnJxX2NvbW1pdF9jYikgewogCQkvKiBQdXQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIFx2YXIgbW9kIG9uIGVycm9yIGNhc2UuICovCi0JCW9iZF9tb2RfcHV0KCptb2QpOworCQlpZiAobW9kICE9IE5VTEwgJiYgKm1vZCAhPSBOVUxMKQorCQkJb2JkX21vZF9wdXQoKm1vZCk7CiAJCXJlcS0+cnFfY29tbWl0X2NiKHJlcSk7CiAJfQogCXJldHVybiByYzsKQEAgLTM1Nyw5ICszNTgsOSBAQAogCW1kY191bmxpbmtfcGFjayhyZXEsIG9wX2RhdGEpOwogCiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9NRFRfTUQsIFJDTF9TRVJWRVIsCi0JCQkgICAgIG9iZC0+dS5jbGkuY2xfbWF4X21kc19lYXNpemUpOworCQkJICAgICBvYmQtPnUuY2xpLmNsX2RlZmF1bHRfbWRzX2Vhc2l6ZSk7CiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9MT0dDT09LSUVTLCBSQ0xfU0VSVkVSLAotCQkJICAgICBvYmQtPnUuY2xpLmNsX21heF9tZHNfY29va2llc2l6ZSk7CisJCQkgICAgIG9iZC0+dS5jbGkuY2xfZGVmYXVsdF9tZHNfY29va2llc2l6ZSk7CiAJcHRscnBjX3JlcXVlc3Rfc2V0X3JlcGxlbihyZXEpOwogCiAJKnJlcXVlc3QgPSByZXE7CkBAIC00NzAsOSArNDcxLDkgQEAKIAltZGNfcmVuYW1lX3BhY2socmVxLCBvcF9kYXRhLCBvbGQsIG9sZGxlbiwgbmV3LCBuZXdsZW4pOwogCiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9NRFRfTUQsIFJDTF9TRVJWRVIsCi0JCQkgICAgIG9iZC0+dS5jbGkuY2xfbWF4X21kc19lYXNpemUpOworCQkJICAgICBvYmQtPnUuY2xpLmNsX2RlZmF1bHRfbWRzX2Vhc2l6ZSk7CiAJcmVxX2NhcHN1bGVfc2V0X3NpemUoJnJlcS0+cnFfcGlsbCwgJlJNRl9MT0dDT09LSUVTLCBSQ0xfU0VSVkVSLAotCQkJICAgICBvYmQtPnUuY2xpLmNsX21heF9tZHNfY29va2llc2l6ZSk7CisJCQkgICAgIG9iZC0+dS5jbGkuY2xfZGVmYXVsdF9tZHNfY29va2llc2l6ZSk7CiAJcHRscnBjX3JlcXVlc3Rfc2V0X3JlcGxlbihyZXEpOwogCiAJcmMgPSBtZGNfcmVpbnQocmVxLCBvYmQtPnUuY2xpLmNsX3JwY19sb2NrLCBMVVNUUkVfSU1QX0ZVTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbWRjL21kY19yZXF1ZXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZGMvbWRjX3JlcXVlc3QuYwppbmRleCBiZGU5ZjkzLi5mY2E0M2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZGMvbWRjX3JlcXVlc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZGMvbWRjX3JlcXVlc3QuYwpAQCAtOTAzLDkgKzkwMyw5IEBACiAJbWRjX2Nsb3NlX3BhY2socmVxLCBvcF9kYXRhKTsKIAogCXJlcV9jYXBzdWxlX3NldF9zaXplKCZyZXEtPnJxX3BpbGwsICZSTUZfTURUX01ELCBSQ0xfU0VSVkVSLAotCQkJICAgICBvYmQtPnUuY2xpLmNsX21heF9tZHNfZWFzaXplKTsKKwkJCSAgICAgb2JkLT51LmNsaS5jbF9kZWZhdWx0X21kc19lYXNpemUpOwogCXJlcV9jYXBzdWxlX3NldF9zaXplKCZyZXEtPnJxX3BpbGwsICZSTUZfTE9HQ09PS0lFUywgUkNMX1NFUlZFUiwKLQkJCSAgICAgb2JkLT51LmNsaS5jbF9tYXhfbWRzX2Nvb2tpZXNpemUpOworCQkJICAgICBvYmQtPnUuY2xpLmNsX2RlZmF1bHRfbWRzX2Nvb2tpZXNpemUpOwogCiAJcHRscnBjX3JlcXVlc3Rfc2V0X3JlcGxlbihyZXEpOwogCkBAIC0yMTUzLDEyICsyMTUzLDQwIEBACiAKIAkJaWYgKCp2YWxsZW4gIT0gc2l6ZW9mKGludCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWRzaXplID0gKihpbnQqKXZhbDsKKwkJbWRzaXplID0gKihpbnQgKil2YWw7CiAJCWlmIChtZHNpemUgPiBleHAtPmV4cF9vYmQtPnUuY2xpLmNsX21heF9tZHNfZWFzaXplKQogCQkJZXhwLT5leHBfb2JkLT51LmNsaS5jbF9tYXhfbWRzX2Vhc2l6ZSA9IG1kc2l6ZTsKIAkJbWF4X2Vhc2l6ZSA9IHZhbDsKIAkJKm1heF9lYXNpemUgPSBleHAtPmV4cF9vYmQtPnUuY2xpLmNsX21heF9tZHNfZWFzaXplOwogCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKEtFWV9JUyhLRVlfREVGQVVMVF9FQVNJWkUpKSB7CisJCWludCAqZGVmYXVsdF9lYXNpemU7CisKKwkJaWYgKCp2YWxsZW4gIT0gc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVmYXVsdF9lYXNpemUgPSB2YWw7CisJCSpkZWZhdWx0X2Vhc2l6ZSA9IGV4cC0+ZXhwX29iZC0+dS5jbGkuY2xfZGVmYXVsdF9tZHNfZWFzaXplOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKEtFWV9JUyhLRVlfTUFYX0NPT0tJRVNJWkUpKSB7CisJCWludCBtZHNpemUsICptYXhfY29va2llc2l6ZTsKKworCQlpZiAoKnZhbGxlbiAhPSBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQltZHNpemUgPSAqKGludCAqKXZhbDsKKwkJaWYgKG1kc2l6ZSA+IGV4cC0+ZXhwX29iZC0+dS5jbGkuY2xfbWF4X21kc19jb29raWVzaXplKQorCQkJZXhwLT5leHBfb2JkLT51LmNsaS5jbF9tYXhfbWRzX2Nvb2tpZXNpemUgPSBtZHNpemU7CisJCW1heF9jb29raWVzaXplID0gdmFsOworCQkqbWF4X2Nvb2tpZXNpemUgPSBleHAtPmV4cF9vYmQtPnUuY2xpLmNsX21heF9tZHNfY29va2llc2l6ZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChLRVlfSVMoS0VZX0RFRkFVTFRfQ09PS0lFU0laRSkpIHsKKwkJaW50ICpkZWZhdWx0X2Nvb2tpZXNpemU7CisKKwkJaWYgKCp2YWxsZW4gIT0gc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVmYXVsdF9jb29raWVzaXplID0gdmFsOworCQkqZGVmYXVsdF9jb29raWVzaXplID0KKwkJCWV4cC0+ZXhwX29iZC0+dS5jbGkuY2xfZGVmYXVsdF9tZHNfY29va2llc2l6ZTsKKwkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChLRVlfSVMoS0VZX0NPTk5fREFUQSkpIHsKIAkJc3RydWN0IG9iZF9pbXBvcnQgKmltcCA9IGNsYXNzX2V4cDJjbGlpbXAoZXhwKTsKIAkJc3RydWN0IG9iZF9jb25uZWN0X2RhdGEgKmRhdGEgPSB2YWw7CkBAIC0yNDM5LDExICsyNDY3LDE1IEBACiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgYW5kIG1heGltdW0gTE9WIEVBIGFuZCBjb29raWUgc2l6ZXMuICBUaGlzIGFsbG93cwotICogdXMgdG8gbWFrZSBNRFMgUlBDcyB3aXRoIGxhcmdlIGVub3VnaCByZXBseSBidWZmZXJzIHRvIGhvbGQgdGhlCi0gKiBtYXhpbXVtLXNpemVkICg9IG1heGltdW0gc3RyaXBlZCkgRUEgYW5kIGNvb2tpZSB3aXRob3V0IGhhdmluZyB0bwotICogY2FsY3VsYXRlIHRoaXMgKHZpYSBhIGNhbGwgaW50byB0aGUgTE9WICsgT1NDcykgZWFjaCB0aW1lIHdlIG1ha2UgYW4gUlBDLiAqLworICogdXMgdG8gbWFrZSBNRFMgUlBDcyB3aXRoIGxhcmdlIGVub3VnaCByZXBseSBidWZmZXJzIHRvIGhvbGQgYSBkZWZhdWx0CisgKiBzaXplZCBFQSBhbmQgY29va2llIHdpdGhvdXQgaGF2aW5nIHRvIGNhbGN1bGF0ZSB0aGlzICh2aWEgYSBjYWxsIGludG8gdGhlCisgKiBMT1YgKyBPU0NzKSBlYWNoIHRpbWUgd2UgbWFrZSBhbiBSUEMuICBUaGUgbWF4aW11bSBzaXplIGlzIGFsc28gdHJhY2tlZAorICogYnV0IG5vdCB1c2VkIHRvIGF2b2lkIHdhc3RlZnVsbHkgdm1hbGxvYygpJ2luZyBsYXJnZSByZXBseSBidWZmZXJzIHdoZW4KKyAqIGEgbGFyZ2UgbnVtYmVyIG9mIHN0cmlwZXMgaXMgcG9zc2libGUuICBJZiBhIGxhcmdlciByZXBseSBidWZmZXIgaXMKKyAqIHJlcXVpcmVkIGl0IHdpbGwgYmUgcmVhbGxvY2F0ZWQgaW4gdGhlIHB0bHJwYyBsYXllciBkdWUgdG8gb3ZlcmZsb3cuCisgKi8KIHN0YXRpYyBpbnQgbWRjX2luaXRfZWFfc2l6ZShzdHJ1Y3Qgb2JkX2V4cG9ydCAqZXhwLCBpbnQgZWFzaXplLAotCQkgICAgIGludCBkZWZfZWFzaXplLCBpbnQgY29va2llc2l6ZSkKKwkJCSAgICBpbnQgZGVmX2Vhc2l6ZSwgaW50IGNvb2tpZXNpemUsIGludCBkZWZfY29va2llc2l6ZSkKIHsKIAlzdHJ1Y3Qgb2JkX2RldmljZSAqb2JkID0gZXhwLT5leHBfb2JkOwogCXN0cnVjdCBjbGllbnRfb2JkICpjbGkgPSAmb2JkLT51LmNsaTsKQEAgLTI0NTcsNiArMjQ4OSw5IEBACiAJaWYgKGNsaS0+Y2xfbWF4X21kc19jb29raWVzaXplIDwgY29va2llc2l6ZSkKIAkJY2xpLT5jbF9tYXhfbWRzX2Nvb2tpZXNpemUgPSBjb29raWVzaXplOwogCisJaWYgKGNsaS0+Y2xfZGVmYXVsdF9tZHNfY29va2llc2l6ZSA8IGRlZl9jb29raWVzaXplKQorCQljbGktPmNsX2RlZmF1bHRfbWRzX2Nvb2tpZXNpemUgPSBkZWZfY29va2llc2l6ZTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZ2MvbHByb2NfbWdjLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZ2MvbHByb2NfbWdjLmMKaW5kZXggMTUwNmFmMS4uNmM4NzdjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbWdjL2xwcm9jX21nYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL21nYy9scHJvY19tZ2MuYwpAQCAtNTYsMjEgKzU2LDIxIEBACiBMUFJPQ19TRVFfRk9QU19STyhtZ2NfaXJfc3RhdGUpOwogCiBzdGF0aWMgc3RydWN0IGxwcm9jZnNfdmFycyBscHJvY2ZzX21nY19vYmRfdmFyc1tdID0gewotCXsgInV1aWQiLAkgICAgICZtZ2NfdXVpZF9mb3BzLAkgIDAsIDAgfSwKLQl7ICJwaW5nIiwJICAgICAmbWdjX3BpbmdfZm9wcywgICAgICAwLCAwMjIyIH0sCi0JeyAiY29ubmVjdF9mbGFncyIsICAgJm1nY19jb25uZWN0X2ZsYWdzX2ZvcHMsIDAsIDAgfSwKLQl7ICJtZ3Nfc2VydmVyX3V1aWQiLCAmbWdjX3NlcnZlcl91dWlkX2ZvcHMsICAgMCwgMCB9LAotCXsgIm1nc19jb25uX3V1aWQiLCAgICZtZ2NfY29ubl91dWlkX2ZvcHMsICAgICAwLCAwIH0sCi0JeyAiaW1wb3J0IiwJICAgICAmbWdjX2ltcG9ydF9mb3BzLAkwLCAwIH0sCi0JeyAic3RhdGUiLAkgICAgICZtZ2Nfc3RhdGVfZm9wcywJIDAsIDAgfSwKLQl7ICJpcl9zdGF0ZSIsCSAgICAgJm1nY19pcl9zdGF0ZV9mb3BzLCAgMCwgMCB9LAotCXsgMCB9CisJeyAidXVpZCIsCSAgICAgJm1nY191dWlkX2ZvcHMsCSAgTlVMTCwgMCB9LAorCXsgInBpbmciLAkgICAgICZtZ2NfcGluZ19mb3BzLCAgICAgIE5VTEwsIDAyMjIgfSwKKwl7ICJjb25uZWN0X2ZsYWdzIiwgICAmbWdjX2Nvbm5lY3RfZmxhZ3NfZm9wcywgTlVMTCwgMCB9LAorCXsgIm1nc19zZXJ2ZXJfdXVpZCIsICZtZ2Nfc2VydmVyX3V1aWRfZm9wcywgICBOVUxMLCAwIH0sCisJeyAibWdzX2Nvbm5fdXVpZCIsICAgJm1nY19jb25uX3V1aWRfZm9wcywgICAgIE5VTEwsIDAgfSwKKwl7ICJpbXBvcnQiLAkgICAgICZtZ2NfaW1wb3J0X2ZvcHMsCU5VTEwsIDAgfSwKKwl7ICJzdGF0ZSIsCSAgICAgJm1nY19zdGF0ZV9mb3BzLAkgTlVMTCwgMCB9LAorCXsgImlyX3N0YXRlIiwJICAgICAmbWdjX2lyX3N0YXRlX2ZvcHMsICBOVUxMLCAwIH0sCisJeyBOVUxMIH0KIH07CiAKIExQUk9DX1NFUV9GT1BTX1JPX1RZUEUobWdjLCBudW1yZWZzKTsKIHN0YXRpYyBzdHJ1Y3QgbHByb2Nmc192YXJzIGxwcm9jZnNfbWdjX21vZHVsZV92YXJzW10gPSB7Ci0JeyAibnVtX3JlZnMiLAkmbWdjX251bXJlZnNfZm9wcywgICAgICAgMCwgMCB9LAotCXsgMCB9CisJeyAibnVtX3JlZnMiLAkmbWdjX251bXJlZnNfZm9wcywgICAgICAgTlVMTCwgMCB9LAorCXsgTlVMTCB9CiB9OwogCiB2b2lkIGxwcm9jZnNfbWdjX2luaXRfdmFycyhzdHJ1Y3QgbHByb2Nmc19zdGF0aWNfdmFycyAqbHZhcnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9tZ2MvbWdjX3JlcXVlc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL21nYy9tZ2NfcmVxdWVzdC5jCmluZGV4IGRlOWZiMTQuLmE4MDZhZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL21nYy9tZ2NfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL21nYy9tZ2NfcmVxdWVzdC5jCkBAIC02NzIsOCArNjcyLDggQEAKIAlpZiAoZW52ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogVGhlIG1nYyBmcyBleGNsdXNpb24gc2VtLiBPbmx5IG9uZSBmcyBjYW4gYmUgc2V0dXAgYXQgYSB0aW1lLiAqLwotCWRvd24oJmNsaS0+Y2xfbWdjX3NlbSk7CisJLyogVGhlIG1nYyBmcyBleGNsdXNpb24gbXV0ZXguIE9ubHkgb25lIGZzIGNhbiBiZSBzZXR1cCBhdCBhIHRpbWUuICovCisJbXV0ZXhfbG9jaygmY2xpLT5jbF9tZ2NfbXV0ZXgpOwogCiAJY2ZzX2NsZWFudXBfZ3JvdXBfaW5mbygpOwogCkBAIC03MjcsNyArNzI3LDcgQEAKIAlpZiAocmMgPCAwKSB7CiAJCWxvY2FsX29pZF9zdG9yYWdlX2ZpbmkoZW52LCBjbGktPmNsX21nY19sb3MpOwogCQljbGktPmNsX21nY19sb3MgPSBOVUxMOwotCQl1cCgmY2xpLT5jbF9tZ2Nfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjbGktPmNsX21nY19tdXRleCk7CiAJfQogb3V0X2VudjoKIAlsdV9lbnZfZmluaShlbnYpOwpAQCAtNzU5LDcgKzc1OSw3IEBACiAKIHVubG9jazoKIAljbGFzc19kZWNyZWYob2JkLCAibWdjX2ZzIiwgb2JkKTsKLQl1cCgmY2xpLT5jbF9tZ2Nfc2VtKTsKKwltdXRleF91bmxvY2soJmNsaS0+Y2xfbWdjX211dGV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvY2xfbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvY2xfbG9jay5jCmluZGV4IGQ3OTVjZWYuLmRmNzdjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2NsX2xvY2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbF9sb2NrLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCSAgICAgICBmdW5jLCBsaW5lKTsKIH0KICNkZWZpbmUgY2xfbG9ja190cmFjZShsZXZlbCwgZW52LCBwcmVmaXgsIGxvY2spCQkJIFwKLQljbF9sb2NrX3RyYWNlMChsZXZlbCwgZW52LCBwcmVmaXgsIGxvY2ssIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisJY2xfbG9ja190cmFjZTAobGV2ZWwsIGVudiwgcHJlZml4LCBsb2NrLCBfX2Z1bmNfXywgX19MSU5FX18pCiAKICNkZWZpbmUgUkVUSVAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKIApAQCAtMzYwLDcgKzM2MCw3IEBACiAJc3RydWN0IGNsX2xvY2sJICAqbG9jazsKIAlzdHJ1Y3QgbHVfb2JqZWN0X2hlYWRlciAqaGVhZDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAobG9jaywgY2xfbG9ja19rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChsb2NrLCBjbF9sb2NrX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAobG9jayAhPSBOVUxMKSB7CiAJCWF0b21pY19zZXQoJmxvY2stPmNsbF9yZWYsIDEpOwogCQlsb2NrLT5jbGxfZGVzY3IgPSAqZGVzY3I7CkBAIC00NzgsNyArNDc4LDcgQEAKIAlzdHJ1Y3QgY2xfb2JqZWN0X2hlYWRlciAqaGVhZDsKIAogCWhlYWQgPSBjbF9vYmplY3RfaGVhZGVyKG9iaik7Ci0JTElOVlJOVChzcGluX2lzX2xvY2tlZCgmaGVhZC0+Y29oX2xvY2tfZ3VhcmQpKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmhlYWQtPmNvaF9sb2NrX2d1YXJkKTsKIAlDU19MT0NLX0lOQyhvYmosIGxvb2t1cCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2NrLCAmaGVhZC0+Y29oX2xvY2tzLCBjbGxfbGlua2FnZSkgewogCQlpbnQgbWF0Y2hlZDsKQEAgLTUzMyw2ICs1MzMsNyBAQAogCQkJc3Bpbl9sb2NrKCZoZWFkLT5jb2hfbG9ja19ndWFyZCk7CiAJCQlnaG9zdCA9IGNsX2xvY2tfbG9va3VwKGVudiwgb2JqLCBpbywgbmVlZCk7CiAJCQlpZiAoZ2hvc3QgPT0gTlVMTCkgeworCQkJCWNsX2xvY2tfZ2V0X3RydXN0KGxvY2spOwogCQkJCWxpc3RfYWRkX3RhaWwoJmxvY2stPmNsbF9saW5rYWdlLAogCQkJCQkJICAmaGVhZC0+Y29oX2xvY2tzKTsKIAkJCQlzcGluX3VubG9jaygmaGVhZC0+Y29oX2xvY2tfZ3VhcmQpOwpAQCAtNzkxLDE1ICs3OTIsMjIgQEAKIAlMSU5WUk5UKGNsX2xvY2tfaW52YXJpYW50KGVudiwgbG9jaykpOwogCiAJaWYgKGxvY2stPmNsbF9zdGF0ZSA8IENMU19GUkVFSU5HKSB7CisJCWJvb2wgaW5fY2FjaGU7CisKIAkJTEFTU0VSVChsb2NrLT5jbGxfc3RhdGUgIT0gQ0xTX0lOVFJBTlNJVCk7CiAJCWNsX2xvY2tfc3RhdGVfc2V0KGVudiwgbG9jaywgQ0xTX0ZSRUVJTkcpOwogCiAJCWhlYWQgPSBjbF9vYmplY3RfaGVhZGVyKGxvY2stPmNsbF9kZXNjci5jbGRfb2JqKTsKIAogCQlzcGluX2xvY2soJmhlYWQtPmNvaF9sb2NrX2d1YXJkKTsKLQkJbGlzdF9kZWxfaW5pdCgmbG9jay0+Y2xsX2xpbmthZ2UpOworCQlpbl9jYWNoZSA9ICFsaXN0X2VtcHR5KCZsb2NrLT5jbGxfbGlua2FnZSk7CisJCWlmIChpbl9jYWNoZSkKKwkJCWxpc3RfZGVsX2luaXQoJmxvY2stPmNsbF9saW5rYWdlKTsKIAkJc3Bpbl91bmxvY2soJmhlYWQtPmNvaF9sb2NrX2d1YXJkKTsKIAorCQlpZiAoaW5fY2FjaGUpIC8qIGNvaF9sb2NrcyBjYWNoZSBob2xkcyBhIHJlZmNvdW50LiAqLworCQkJY2xfbG9ja19wdXQoZW52LCBsb2NrKTsKKwogCQkvKgogCQkgKiBGcm9tIG5vdyBvbiwgbm8gbmV3IHJlZmVyZW5jZXMgdG8gdGhpcyBsb2NrIGNhbiBiZSBhY3F1aXJlZAogCQkgKiBieSBjbF9sb2NrX2xvb2t1cCgpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvY2xfb2JqZWN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbF9vYmplY3QuYwppbmRleCAwZmMyNTZmLi40MWNiYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbF9vYmplY3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbF9vYmplY3QuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJc3RydWN0IGx1X29iamVjdF9oZWFkZXIgKnRvcDsKIAlpbnQgcmVzdWx0OwogCi0JTEFTU0VSVChzcGluX2lzX2xvY2tlZChjbF9vYmplY3RfYXR0cl9ndWFyZChvYmopKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKGNsX29iamVjdF9hdHRyX2d1YXJkKG9iaikpOwogCiAJdG9wID0gb2JqLT5jb19sdS5sb19oZWFkZXI7CiAJcmVzdWx0ID0gMDsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXN0cnVjdCBsdV9vYmplY3RfaGVhZGVyICp0b3A7CiAJaW50IHJlc3VsdDsKIAotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoY2xfb2JqZWN0X2F0dHJfZ3VhcmQob2JqKSkpOworCWFzc2VydF9zcGluX2xvY2tlZChjbF9vYmplY3RfYXR0cl9ndWFyZChvYmopKTsKIAogCXRvcCA9IG9iai0+Y29fbHUubG9faGVhZGVyOwogCXJlc3VsdCA9IDA7CkBAIC02ODQsNyArNjg0LDcgQEAKIAlzdHJ1Y3QgbHVfZW52ICplbnY7CiAJc3RydWN0IGNsX2VudiAqY2xlOwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChjbGUsIGNsX2Vudl9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChjbGUsIGNsX2Vudl9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKGNsZSAhPSBOVUxMKSB7CiAJCWludCByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvY2xfcGFnZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvY2xfcGFnZS5jCmluZGV4IDJhNWNlMzcuLjFiNjE2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2NsX3BhZ2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbF9wYWdlLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogewogCXN0cnVjdCBjbF9wYWdlICpwYWdlOwogCi0JTEFTU0VSVChzcGluX2lzX2xvY2tlZCgmaGRyLT5jb2hfcGFnZV9ndWFyZCkpOworCWFzc2VydF9zcGluX2xvY2tlZCgmaGRyLT5jb2hfcGFnZV9ndWFyZCk7CiAKIAlwYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoJmhkci0+Y29oX3RyZWUsIGluZGV4KTsKIAlpZiAocGFnZSAhPSBOVUxMKQpAQCAtMjkyLDcgKzI5Miw3IEBACiAJc3RydWN0IGx1X29iamVjdF9oZWFkZXIgKmhlYWQ7CiAKIAlPQkRfQUxMT0NfR0ZQKHBhZ2UsIGNsX29iamVjdF9oZWFkZXIobyktPmNvaF9wYWdlX2J1ZnNpemUsCi0JCQlfX0dGUF9JTyk7CisJCQlHRlBfTk9GUyk7CiAJaWYgKHBhZ2UgIT0gTlVMTCkgewogCQlpbnQgcmVzdWx0ID0gMDsKIAkJYXRvbWljX3NldCgmcGFnZS0+Y3BfcmVmLCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2NsYXNzX29iZC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvY2xhc3Nfb2JkLmMKaW5kZXggYzkzMTMxZS4uZGRlMDRiNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbGFzc19vYmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9jbGFzc19vYmQuYwpAQCAtMTAyLDIzICsxMDIsMTcgQEAKIGNoYXIgb2JkX2pvYmlkX3ZhcltKT0JTVEFUU19KT0JJRF9WQVJfTUFYX0xFTiArIDFdID0gSk9CU1RBVFNfRElTQUJMRTsKIEVYUE9SVF9TWU1CT0wob2JkX2pvYmlkX3Zhcik7CiAKLS8qIEdldCBqb2JpZCBvZiBjdXJyZW50IHByb2Nlc3MgYnkgcmVhZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK2NoYXIgb2JkX2pvYmlkX25vZGVbSk9CU1RBVFNfSk9CSURfU0laRSArIDFdOworCisvKiBHZXQgam9iaWQgb2YgY3VycmVudCBwcm9jZXNzIGZyb20gc3RvcmVkIHZhcmlhYmxlIG9yIGNhbGN1bGF0ZQorICogaXQgZnJvbSBwaWQgYW5kIHVzZXJfaWQuCisgKgorICogSGlzdG9yaWNhbGx5IHRoaXMgd2FzIGFsc28gZG9uZSBieSByZWFkaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQogICogc3RvcmVkIGluIGJldHdlZW4gdGhlICJlbnZfc3RhcnQiICYgImVudl9lbmQiIG9mIHRhc2sgc3RydWN0LgotICoKLSAqIFRPRE86Ci0gKiBJdCdzIGJldHRlciB0byBjYWNoZSB0aGUgam9iaWQgZm9yIGxhdGVyIHVzZSBpZiB0aGVyZSBpcyBhbnkKLSAqIGVmZmljaWVudCB3YXksIHRoZSBjbF9lbnYgY29kZSBwcm9iYWJseSBjb3VsZCBiZSByZXVzZWQgZm9yIHRoaXMKLSAqIHB1cnBvc2UuCi0gKgotICogSWYgc29tZSBqb2Igc2NoZWR1bGVyIGRvZXNuJ3Qgc3RvcmUgam9iaWQgaW4gdGhlICJlbnZfc3RhcnQvZW5kIiwKLSAqIHRoZW4gYW4gdXBjYWxsIGNvdWxkIGJlIGlzc3VlZCBoZXJlIHRvIGdldCB0aGUgam9iaWQgYnkgdXRpbGl6aW5nCi0gKiB0aGUgdXNlcnNwYWNlIHRvb2xzL2FwaS4gVGhlbiwgdGhlIGpvYmlkIG11c3QgYmUgY2FjaGVkLgorICogVGhpcyBpcyBub3cgZGVwcmVjYXRlZC4KICAqLwogaW50IGx1c3RyZV9nZXRfam9iaWQoY2hhciAqam9iaWQpCiB7Ci0JaW50IGpvYmlkX2xlbiA9IEpPQlNUQVRTX0pPQklEX1NJWkU7Ci0JaW50IHJjID0gMDsKLQogCW1lbXNldChqb2JpZCwgMCwgSk9CU1RBVFNfSk9CSURfU0laRSk7CiAJLyogSm9ic3RhdHMgaXNuJ3QgZW5hYmxlZCAqLwogCWlmIChzdHJjbXAob2JkX2pvYmlkX3ZhciwgSk9CU1RBVFNfRElTQUJMRSkgPT0gMCkKQEAgLTEzMiwzMSArMTI2LDEzIEBACiAJCXJldHVybiAwOwogCX0KIAotCXJjID0gY2ZzX2dldF9lbnZpcm9uKG9iZF9qb2JpZF92YXIsIGpvYmlkLCAmam9iaWRfbGVuKTsKLQlpZiAocmMpIHsKLQkJaWYgKHJjID09IC1FT1ZFUkZMT1cpIHsKLQkJCS8qIEZvciB0aGUgUEJTX0pPQklEIGFuZCBMT0FETF9TVEVQX0lEIGtleXMgKHdoaWNoIGFyZQotCQkJICogdmFyaWFibGUgbGVuZ3RoIHN0cmluZ3MgaW5zdGVhZCBvZiBqdXN0IG51bWJlcnMpLCBpdAotCQkJICogbWlnaHQgbWFrZSBzZW5zZSB0byBrZWVwIHRoZSB1bmlxdWUgcGFydHMgZm9yIEpvYklELAotCQkJICogaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBhbiBlcnJvci4gIFRoYXQgbWVhbnMgYQotCQkJICogbGFyZ2VyIHRlbXAgYnVmZmVyIGZvciBjZnNfZ2V0X2Vudmlyb24oKSwgdGhlbgotCQkJICogdHJ1bmNhdGluZyB0aGUgc3RyaW5nIGF0IHNvbWUgc2VwYXJhdG9yIHRvIGZpdCBpbnRvCi0JCQkgKiB0aGUgc3BlY2lmaWVkIGpvYmlkX2xlbi4gIEZpeCBsYXRlciBpZiBuZWVkZWQuICovCi0JCQlzdGF0aWMgYm9vbCBwcmludGVkOwotCQkJaWYgKHVubGlrZWx5KCFwcmludGVkKSkgewotCQkJCUxDT05TT0xFX0VSUk9SX01TRygweDE2YiwgIiVzIHZhbHVlIHRvbyBsYXJnZSAiCi0JCQkJCQkgICAiZm9yIEpvYklEIGJ1ZmZlciAoJWQpXG4iLAotCQkJCQkJICAgb2JkX2pvYmlkX3Zhciwgam9iaWRfbGVuKTsKLQkJCQlwcmludGVkID0gdHJ1ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCUNERUJVRygocmMgPT0gLUVOT0VOVCB8fCByYyA9PSAtRUlOVkFMIHx8Ci0JCQkJcmMgPT0gLUVERUFETEspID8gRF9JTkZPIDogRF9FUlJPUiwKLQkJCSAgICAgICAiR2V0IGpvYmlkIGZvciAoJXMpIGZhaWxlZDogcmMgPSAlZFxuIiwKLQkJCSAgICAgICBvYmRfam9iaWRfdmFyLCByYyk7Ci0JCX0KKwkvKiBXaG9sZSBub2RlIGRlZGljYXRlZCB0byBzaW5nbGUgam9iICovCisJaWYgKHN0cmNtcChvYmRfam9iaWRfdmFyLCBKT0JTVEFUU19OT0RFTE9DQUwpID09IDApIHsKKwkJc3RyY3B5KGpvYmlkLCBvYmRfam9iaWRfbm9kZSk7CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gLUVOT0VOVDsKIH0KIEVYUE9SVF9TWU1CT0wobHVzdHJlX2dldF9qb2JpZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9kZWJ1Zy5jCmluZGV4IDE1ZjcxYmIuLmE0ZTdlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2RlYnVnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvZGVidWcuYwpAQCAtNTYsMTggKzU2LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF9sbmlvYnVmKTsKIAotdm9pZCBkdW1wX2xzbShpbnQgbGV2ZWwsIHN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc20pCi17Ci0JQ0RFQlVHKGxldmVsLCAibHNtICVwLCBvYmppZCAiRE9TVElEIiwgbWF4Ynl0ZXMgIkxQWDY0IiwgbWFnaWMgMHglMDhYLCIKLQkgICAgICAgIiBzdHJpcGVfc2l6ZSAldSwgc3RyaXBlX2NvdW50ICV1LCByZWZjOiAlZCwiCi0JICAgICAgICIgbGF5b3V0X2dlbiAldSwgcG9vbCBbIkxPVl9QT09MTkFNRUYiXVxuIiwgbHNtLAotCSAgICAgICBQT1NUSUQoJmxzbS0+bHNtX29pKSwgbHNtLT5sc21fbWF4Ynl0ZXMsIGxzbS0+bHNtX21hZ2ljLAotCSAgICAgICBsc20tPmxzbV9zdHJpcGVfc2l6ZSwgbHNtLT5sc21fc3RyaXBlX2NvdW50LAotCSAgICAgICBhdG9taWNfcmVhZCgmbHNtLT5sc21fcmVmYyksIGxzbS0+bHNtX2xheW91dF9nZW4sCi0JICAgICAgIGxzbS0+bHNtX3Bvb2xfbmFtZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGR1bXBfbHNtKTsKLQogI2RlZmluZSBMUERTIHNpemVvZihfX3U2NCkKIGludCBibG9ja19kZWJ1Z19zZXR1cCh2b2lkICphZGRyLCBpbnQgbGVuLCBfX3U2NCBvZmYsIF9fdTY0IGlkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvZ2Vub3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9nZW5vcHMuYwppbmRleCBmMmJkZWEzLi4zMjEwYWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9nZW5vcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9nZW5vcHMuYwpAQCAtNzIsNyArNzIsNyBAQAogewogCXN0cnVjdCBvYmRfZGV2aWNlICpvYmQ7CiAKLQlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKG9iZCwgb2JkX2RldmljZV9jYWNoZXAsIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKG9iZCwgb2JkX2RldmljZV9jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAob2JkICE9IE5VTEwpIHsKIAkJb2JkLT5vYmRfbWFnaWMgPSBPQkRfREVWSUNFX01BR0lDOwogCX0KQEAgLTYxNSwxMyArNjE1LDEzIEBACiAJCWlmIChzdHJuY21wKG9iZC0+b2JkX25hbWUsIGZzbmFtZSwgbmFtZWxlbikpCiAJCQljb250aW51ZTsKIAotCQljbGFzc19pbmNyZWYob2JkLCBfX0ZVTkNUSU9OX18sIG9iZCk7CisJCWNsYXNzX2luY3JlZihvYmQsIF9fZnVuY19fLCBvYmQpOwogCQlyZWFkX3VubG9jaygmb2JkX2Rldl9sb2NrKTsKIAkJcmMyID0gb2JkX3NldF9pbmZvX2FzeW5jKE5VTEwsIG9iZC0+b2JkX3NlbGZfZXhwb3J0LAogCQkJCQkgc2l6ZW9mKEtFWV9TUFRMUlBDX0NPTkYpLAogCQkJCQkgS0VZX1NQVExSUENfQ09ORiwgMCwgTlVMTCwgTlVMTCk7CiAJCXJjID0gcmMgPyByYyA6IHJjMjsKLQkJY2xhc3NfZGVjcmVmKG9iZCwgX19GVU5DVElPTl9fLCBvYmQpOworCQljbGFzc19kZWNyZWYob2JkLCBfX2Z1bmNfXywgb2JkKTsKIAkJcmVhZF9sb2NrKCZvYmRfZGV2X2xvY2spOwogCX0KIAlyZWFkX3VubG9jaygmb2JkX2Rldl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2xpbnV4L2xpbnV4LW1vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvbGludXgvbGludXgtbW9kdWxlLmMKaW5kZXggYmEyMDc3Ni4uYmRmMmVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvbGludXgvbGludXgtbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvbGludXgvbGludXgtbW9kdWxlLmMKQEAgLTEyMiw2ICsxMjIsOCBAQAogCQlPQkRfRlJFRV9MQVJHRSgqYnVmLCBoZHIuaW9jX2xlbik7CiAJCXJldHVybiBlcnI7CiAJfQorCWlmIChoZHIuaW9jX2xlbiAhPSBkYXRhLT5pb2NfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChvYmRfaW9jdGxfaXNfaW52YWxpZChkYXRhKSkgewogCQlDRVJST1IoImlvY3RsIG5vdCBjb3JyZWN0bHkgZm9ybWF0dGVkXG4iKTsKQEAgLTI0NCw3ICsyNDYsNyBAQAogCQlpZiAob2JkLT5vYmRfc3RvcHBpbmcpCiAJCQljb250aW51ZTsKIAotCQljbGFzc19pbmNyZWYob2JkLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQpOworCQljbGFzc19pbmNyZWYob2JkLCBfX2Z1bmNfXywgY3VycmVudCk7CiAJCXJlYWRfdW5sb2NrKCZvYmRfZGV2X2xvY2spOwogCiAJCWlmIChvYmRfaGVhbHRoX2NoZWNrKE5VTEwsIG9iZCkpIHsKQEAgLTI1Miw3ICsyNTQsNyBAQAogCQkJCSAgICAgIG9iZC0+b2JkX25hbWUpOwogCQkJcmMrKzsKIAkJfQotCQljbGFzc19kZWNyZWYob2JkLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQpOworCQljbGFzc19kZWNyZWYob2JkLCBfX2Z1bmNfXywgY3VycmVudCk7CiAJCXJlYWRfbG9jaygmb2JkX2Rldl9sb2NrKTsKIAl9CiAJcmVhZF91bmxvY2soJm9iZF9kZXZfbG9jayk7CkBAIC0yNzcsMTIgKzI3OSw0NCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbXNldChvYmRfam9iaWRfdmFyLCAwLCBKT0JTVEFUU19KT0JJRF9WQVJfTUFYX0xFTiArIDEpOworCisJLyogVGhpcyBtaWdodCBsZWF2ZSB0aGUgdmFyIGludmFsaWQgb24gZXJyb3IsIHdoaWNoIGlzIHByb2JhYmx5IGZpbmUuKi8KKwlpZiAoY29weV9mcm9tX3VzZXIob2JkX2pvYmlkX3ZhciwgYnVmZmVyLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCiAJLyogVHJpbSB0aGUgdHJhaWxpbmcgJ1xuJyBpZiBhbnkgKi8KLQltZW1jcHkob2JkX2pvYmlkX3ZhciwgYnVmZmVyLCBjb3VudCAtIChidWZmZXJbY291bnQgLSAxXSA9PSAnXG4nKSk7CisJaWYgKG9iZF9qb2JpZF92YXJbY291bnQgLSAxXSA9PSAnXG4nKQorCQlvYmRfam9iaWRfdmFyW2NvdW50IC0gMV0gPSAwOworCiAJcmV0dXJuIGNvdW50OwogfQogTFBST0NfU0VRX0ZPUFMob2JkX3Byb2Nfam9iaWRfdmFyKTsKIAorc3RhdGljIGludCBvYmRfcHJvY19qb2JpZF9uYW1lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihtLCAiJXNcbiIsIG9iZF9qb2JpZF92YXIpOworfQorCitzdGF0aWMgc3NpemVfdCBvYmRfcHJvY19qb2JpZF9uYW1lX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJaWYgKCFjb3VudCB8fCBjb3VudCA+IEpPQlNUQVRTX0pPQklEX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKG9iZF9qb2JpZF9ub2RlLCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlvYmRfam9iaWRfbm9kZVtjb3VudF0gPSAwOworCisJLyogVHJpbSB0aGUgdHJhaWxpbmcgJ1xuJyBpZiBhbnkgKi8KKwlpZiAob2JkX2pvYmlkX25vZGVbY291bnQgLSAxXSA9PSAnXG4nKQorCQlvYmRfam9iaWRfbm9kZVtjb3VudCAtIDFdID0gMDsKKworCXJldHVybiBjb3VudDsKK30KK0xQUk9DX1NFUV9GT1BTKG9iZF9wcm9jX2pvYmlkX25hbWUpOworCiAvKiBSb290IGZvciAvcHJvYy9mcy9sdXN0cmUgKi8KIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19sdXN0cmVfcm9vdCA9IE5VTEw7CiBFWFBPUlRfU1lNQk9MKHByb2NfbHVzdHJlX3Jvb3QpOwpAQCAtMjkyLDYgKzMyNiw4IEBACiAJeyAicGluZ2VyIiwgJm9iZF9wcm9jX3Bpbmdlcl9mb3BzIH0sCiAJeyAiaGVhbHRoX2NoZWNrIiwgJm9iZF9wcm9jX2hlYWx0aF9mb3BzIH0sCiAJeyAiam9iaWRfdmFyIiwgJm9iZF9wcm9jX2pvYmlkX3Zhcl9mb3BzIH0sCisJeyAubmFtZSA9CSJqb2JpZF9uYW1lIiwKKwkgIC5mb3BzID0JJm9iZF9wcm9jX2pvYmlkX25hbWVfZm9wc30sCiAJeyAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2xsb2dfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2xsb2dfaW9jdGwuYwppbmRleCBkYTU1OGE1Li5lMTkyYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9sbG9nX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvbGxvZ19pb2N0bC5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAkJCUdPVE8ob3V0X2Nsb3NlLCByYyA9IC1FSU5WQUwpOwogCQl9CiAKLQkJaWYgKGRhdGEtPmlvY19pbmxidWYyID4gMCkgeworCQlpZiAoZGF0YS0+aW9jX2lubGxlbjIgPiAwKSB7CiAJCQkvKiByZW1vdmUgaW5kaWNhdGUgbG9nIGZyb20gdGhlIGNhdGFsb2cgKi8KIAkJCXJjID0gc3RyMmxvZ2lkKCZwbGFpbiwgZGF0YS0+aW9jX2lubGJ1ZjIsCiAJCQkJICAgICAgIGRhdGEtPmlvY19pbmxsZW4yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2xsb2dfb2JkLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9sbG9nX29iZC5jCmluZGV4IDcxODE3YWYuLjJjNmQ4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGNsYXNzL2xsb2dfb2JkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3MvbGxvZ19vYmQuYwpAQCAtMjI2LDM0ICsyMjYsNyBAQAogfQogRVhQT1JUX1NZTUJPTChsbG9nX3N5bmMpOwogCi1pbnQgbGxvZ19vYmRfYWRkKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IGxsb2dfY3R4dCAqY3R4dCwKLQkJIHN0cnVjdCBsbG9nX3JlY19oZHIgKnJlYywgc3RydWN0IGxvdl9zdHJpcGVfbWQgKmxzbSwKLQkJIHN0cnVjdCBsbG9nX2Nvb2tpZSAqbG9nY29va2llcywgaW50IG51bWNvb2tpZXMpCi17Ci0JaW50IHJhaXNlZCwgcmM7Ci0KLQlpZiAoIWN0eHQpIHsKLQkJQ0VSUk9SKCJObyBjdHh0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGN0eHQtPmxvY19mbGFncyAmIExMT0dfQ1RYVF9GTEFHX1VOSU5JVElBTElaRUQpCi0JCXJldHVybiAtRU5YSU87Ci0KLQlDVFhUX0NIRUNLX09QKGN0eHQsIG9iZF9hZGQsIC1FT1BOT1RTVVBQKTsKLQlyYWlzZWQgPSBjZnNfY2FwX3JhaXNlZChDRlNfQ0FQX1NZU19SRVNPVVJDRSk7Ci0JaWYgKCFyYWlzZWQpCi0JCWNmc19jYXBfcmFpc2UoQ0ZTX0NBUF9TWVNfUkVTT1VSQ0UpOwotCXJjID0gQ1RYVFAoY3R4dCwgb2JkX2FkZCkoZW52LCBjdHh0LCByZWMsIGxzbSwgbG9nY29va2llcywKLQkJCQkgIG51bWNvb2tpZXMpOwotCWlmICghcmFpc2VkKQotCQljZnNfY2FwX2xvd2VyKENGU19DQVBfU1lTX1JFU09VUkNFKTsKLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKGxsb2dfb2JkX2FkZCk7Ci0KIGludCBsbG9nX2NhbmNlbChjb25zdCBzdHJ1Y3QgbHVfZW52ICplbnYsIHN0cnVjdCBsbG9nX2N0eHQgKmN0eHQsCi0JCXN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc20sIGludCBjb3VudCwKIAkJc3RydWN0IGxsb2dfY29va2llICpjb29raWVzLCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJjOwpAQCAtMjY0LDcgKzIzNyw3IEBACiAJfQogCiAJQ1RYVF9DSEVDS19PUChjdHh0LCBjYW5jZWwsIC1FT1BOT1RTVVBQKTsKLQlyYyA9IENUWFRQKGN0eHQsIGNhbmNlbCkoZW52LCBjdHh0LCBsc20sIGNvdW50LCBjb29raWVzLCBmbGFncyk7CisJcmMgPSBDVFhUUChjdHh0LCBjYW5jZWwpKGVudiwgY3R4dCwgY29va2llcywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0wobGxvZ19jYW5jZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3Mvb2JkX21vdW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRjbGFzcy9vYmRfbW91bnQuYwppbmRleCA2ZjhiYTU0Li5hMDM0YWVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3Mvb2JkX21vdW50LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkY2xhc3Mvb2JkX21vdW50LmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWludCByYzsKIAlDREVCVUcoRF9NT1VOVCwgIlN0YXJ0aW5nIG9iZCAlcyAodHlwPSVzKVxuIiwgb2JkbmFtZSwgdHlwZSk7CiAKLQlyYyA9IGRvX2xjZmcob2JkbmFtZSwgMCwgTENGR19BVFRBQ0gsIHR5cGUsIHV1aWQsIDAsIDApOworCXJjID0gZG9fbGNmZyhvYmRuYW1lLCAwLCBMQ0ZHX0FUVEFDSCwgdHlwZSwgdXVpZCwgTlVMTCwgTlVMTCk7CiAJaWYgKHJjKSB7CiAJCUNFUlJPUigiJXMgYXR0YWNoIGVycm9yICVkXG4iLCBvYmRuYW1lLCByYyk7CiAJCXJldHVybiByYzsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCXJjID0gZG9fbGNmZyhvYmRuYW1lLCAwLCBMQ0ZHX1NFVFVQLCBzMSwgczIsIHMzLCBzNCk7CiAJaWYgKHJjKSB7CiAJCUNFUlJPUigiJXMgc2V0dXAgZXJyb3IgJWRcbiIsIG9iZG5hbWUsIHJjKTsKLQkJZG9fbGNmZyhvYmRuYW1lLCAwLCBMQ0ZHX0RFVEFDSCwgMCwgMCwgMCwgMCk7CisJCWRvX2xjZmcob2JkbmFtZSwgMCwgTENGR19ERVRBQ0gsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0zMzcsNyArMzM3LDggQEAKIAkJCWxuZXRfcHJvY2Vzc19pZF90IGlkOwogCQkJd2hpbGUgKChyYyA9IExOZXRHZXRJZChpKyssICZpZCkpICE9IC1FTk9FTlQpIHsKIAkJCQlyYyA9IGRvX2xjZmcobWdjbmFtZSwgaWQubmlkLAotCQkJCQkgICAgIExDRkdfQUREX1VVSUQsIG5pZHV1aWQsIDAsMCwwKTsKKwkJCQkJICAgICBMQ0ZHX0FERF9VVUlELCBuaWR1dWlkLAorCQkJCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogVXNlIG1nc25vZGU9IG5pZHMgKi8KQEAgLTM1MSw3ICszNTIsOCBAQAogCQkJfQogCQkJd2hpbGUgKGNsYXNzX3BhcnNlX25pZChwdHIsICZuaWQsICZwdHIpID09IDApIHsKIAkJCQlyYyA9IGRvX2xjZmcobWdjbmFtZSwgbmlkLAotCQkJCQkgICAgIExDRkdfQUREX1VVSUQsIG5pZHV1aWQsIDAsMCwwKTsKKwkJCQkJICAgICBMQ0ZHX0FERF9VVUlELCBuaWR1dWlkLAorCQkJCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwogCQkJCWkrKzsKIAkJCX0KIAkJfQpAQCAtMzYwLDcgKzM2Miw3IEBACiAJCXB0ciA9IGxzaS0+bHNpX2xtZC0+bG1kX2RldjsKIAkJd2hpbGUgKGNsYXNzX3BhcnNlX25pZChwdHIsICZuaWQsICZwdHIpID09IDApIHsKIAkJCXJjID0gZG9fbGNmZyhtZ2NuYW1lLCBuaWQsCi0JCQkJICAgICBMQ0ZHX0FERF9VVUlELCBuaWR1dWlkLCAwLDAsMCk7CisJCQkJICAgICBMQ0ZHX0FERF9VVUlELCBuaWR1dWlkLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJCWkrKzsKIAkJCS8qIFN0b3AgYXQgdGhlIGZpcnN0IGZhaWxvdmVyIG5pZCAqLwogCQkJaWYgKCpwdHIgPT0gJzonKQpAQCAtMzgxLDcgKzM4Myw3IEBACiAJLyogU3RhcnQgdGhlIE1HQyAqLwogCXJjID0gbHVzdHJlX3N0YXJ0X3NpbXBsZShtZ2NuYW1lLCBMVVNUUkVfTUdDX05BTUUsCiAJCQkJIChjaGFyICopdXVpZC0+dXVpZCwgTFVTVFJFX01HU19PQkROQU1FLAotCQkJCSBuaWR1dWlkLCAwLCAwKTsKKwkJCQkgbmlkdXVpZCwgTlVMTCwgTlVMTCk7CiAJT0JEX0ZSRUVfUFRSKHV1aWQpOwogCWlmIChyYykKIAkJR09UTyhvdXRfZnJlZSwgcmMpOwpAQCAtMzk2LDEzICszOTgsMTMgQEAKIAkJd2hpbGUgKGNsYXNzX3BhcnNlX25pZF9xdWlldChwdHIsICZuaWQsICZwdHIpID09IDApIHsKIAkJCWorKzsKIAkJCXJjID0gZG9fbGNmZyhtZ2NuYW1lLCBuaWQsCi0JCQkJICAgICBMQ0ZHX0FERF9VVUlELCBuaWR1dWlkLCAwLDAsMCk7CisJCQkJICAgICBMQ0ZHX0FERF9VVUlELCBuaWR1dWlkLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJCWlmICgqcHRyID09ICc6JykKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaiA+IDApIHsKIAkJCXJjID0gZG9fbGNmZyhtZ2NuYW1lLCAwLCBMQ0ZHX0FERF9DT05OLAotCQkJCSAgICAgbmlkdXVpZCwgMCwgMCwgMCk7CisJCQkJICAgICBuaWR1dWlkLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJCWkrKzsKIAkJfSBlbHNlIHsKIAkJCS8qIGF0ICI6L2ZzbmFtZSIgKi8KQEAgLTQ4MCw3ICs0ODIsNyBAQAogewogCXN0cnVjdCBsdXN0cmVfc2JfaW5mbyAqbHNpID0gczJsc2koc2IpOwogCXN0cnVjdCBvYmRfZGV2aWNlICpvYmQ7Ci0JY2hhciAqbmlkdXVpZCA9IDAsICpwdHIgPSAwOworCWNoYXIgKm5pZHV1aWQgPSBOVUxMLCAqcHRyID0gTlVMTDsKIAlpbnQgaSwgcmMgPSAwLCBsZW4gPSAwOwogCiAJaWYgKCFsc2kpCkBAIC01MzIsNyArNTM0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbHNpLT5sc2lfbG1kLT5sbWRfbWdzX2ZhaWxub2RlczsgaSsrKSB7CiAJCXNwcmludGYocHRyLCAiXyV4IiwgaSk7CiAJCXJjID0gZG9fbGNmZyhMVVNUUkVfTUdDX09CRE5BTUUsIDAsIExDRkdfREVMX1VVSUQsCi0JCQkgICAgIG5pZHV1aWQsIDAsIDAsIDApOworCQkJICAgICBuaWR1dWlkLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJaWYgKHJjKQogCQkJQ0VSUk9SKCJkZWwgTURDIFVVSUQgJXMgZmFpbGVkOiByYyA9ICVkXG4iLAogCQkJICAgICAgIG5pZHV1aWQsIHJjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGVjaG8vZWNob19jbGllbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGVjaG8vZWNob19jbGllbnQuYwppbmRleCA3NTRhYThlLi5jZGM0NjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRlY2hvL2VjaG9fY2xpZW50LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkZWNoby9lY2hvX2NsaWVudC5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8bHVzdHJlX2ZpZC5oPgogI2luY2x1ZGUgPGx1c3RyZV9hY2wuaD4KICNpbmNsdWRlIDxsdXN0cmVfbmV0Lmg+Ci0jaW5jbHVkZSA8b2JkX2xvdi5oPgogCiAjaW5jbHVkZSAiZWNob19pbnRlcm5hbC5oIgogCkBAIC00MjgsNyArNDI3LDcgQEAKIHsKIAlzdHJ1Y3QgZWNob19sb2NrICplbDsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoZWwsIGVjaG9fbG9ja19rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChlbCwgZWNob19sb2NrX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoZWwgIT0gTlVMTCkgewogCQljbF9sb2NrX3NsaWNlX2FkZChsb2NrLCAmZWwtPmVsX2NsLCBvYmosICZlY2hvX2xvY2tfb3BzKTsKIAkJZWwtPmVsX29iamVjdCA9IGNsMmVjaG9fb2JqKG9iaik7CkBAIC01OTksNyArNTk4LDcgQEAKIAogCS8qIHdlJ3JlIHRoZSB0b3AgZGV2LiAqLwogCUxBU1NFUlQoaGRyID09IE5VTEwpOwotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoZWNvLCBlY2hvX29iamVjdF9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChlY28sIGVjaG9fb2JqZWN0X2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoZWNvICE9IE5VTEwpIHsKIAkJc3RydWN0IGNsX29iamVjdF9oZWFkZXIgKmhkciA9ICZlY28tPmVvX2hkcjsKIApAQCAtNjYzLDcgKzY2Miw3IEBACiB7CiAJc3RydWN0IGVjaG9fdGhyZWFkX2luZm8gKmluZm87CiAKLQlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGluZm8sIGVjaG9fdGhyZWFkX2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGluZm8sIGVjaG9fdGhyZWFkX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlpbmZvID0gRVJSX1BUUigtRU5PTUVNKTsKIAlyZXR1cm4gaW5mbzsKQEAgLTY5Myw3ICs2OTIsNyBAQAogewogCXN0cnVjdCBlY2hvX3Nlc3Npb25faW5mbyAqc2Vzc2lvbjsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoc2Vzc2lvbiwgZWNob19zZXNzaW9uX2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKHNlc3Npb24sIGVjaG9fc2Vzc2lvbl9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJc2Vzc2lvbiA9IEVSUl9QVFIoLUVOT01FTSk7CiAJcmV0dXJuIHNlc3Npb247CkBAIC0yNDMyLDcgKzI0MzEsNyBAQAogCWludAkJICAgICBpOwogCWludAkJICAgICByYzsKIAlpbnQJCSAgICAgdmVyaWZ5OwotCWludAkJICAgICBnZnBfbWFzazsKKwlnZnBfdAkJICAgICBnZnBfbWFzazsKIAlpbnQJCSAgICAgYnJ3X2ZsYWdzID0gMDsKIAogCXZlcmlmeSA9IChvc3RpZF9pZCgmb2EtPm9fb2kpICE9IEVDSE9fUEVSU0lTVEVOVF9PQkpJRCAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkZWNoby9scHJvY19lY2hvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRlY2hvL2xwcm9jX2VjaG8uYwppbmRleCBiOWFiYWMxLi44ZmU5MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRlY2hvL2xwcm9jX2VjaG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRlY2hvL2xwcm9jX2VjaG8uYwpAQCAtMzksMTMgKzM5LDEzIEBACiAjaWZkZWYgTFBST0NGUwogTFBST0NfU0VRX0ZPUFNfUk9fVFlQRShlY2hvLCB1dWlkKTsKIHN0YXRpYyBzdHJ1Y3QgbHByb2Nmc192YXJzIGxwcm9jZnNfZWNob19vYmRfdmFyc1tdID0gewotCXsgInV1aWQiLAkgJmVjaG9fdXVpZF9mb3BzLAkwLCAwIH0sCisJeyAidXVpZCIsCSAmZWNob191dWlkX2ZvcHMsCU5VTEwsIDAgfSwKIAl7IDAgfQogfTsKIAogTFBST0NfU0VRX0ZPUFNfUk9fVFlQRShlY2hvLCBudW1yZWZzKTsKIHN0YXRpYyBzdHJ1Y3QgbHByb2Nmc192YXJzIGxwcm9jZnNfZWNob19tb2R1bGVfdmFyc1tdID0gewotCXsgIm51bV9yZWZzIiwgICAgICZlY2hvX251bXJlZnNfZm9wcywgICAgIDAsIDAgfSwKKwl7ICJudW1fcmVmcyIsICAgICAmZWNob19udW1yZWZzX2ZvcHMsICAgICBOVUxMLCAwIH0sCiAJeyAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9scHJvY19vc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9scHJvY19vc2MuYwppbmRleCAwYjU5ZmMxLi4wY2FkZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2MvbHByb2Nfb3NjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL2xwcm9jX29zYy5jCkBAIC0xNzQsMTUgKzE3NCwyNSBAQAogfQogCiAvKiBzaHJpbmsgdGhlIG51bWJlciBvZiBjYWNoaW5nIHBhZ2VzIHRvIGEgc3BlY2lmaWMgbnVtYmVyICovCi1zdGF0aWMgc3NpemVfdCBvc2NfY2FjaGVkX21iX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCitzdGF0aWMgc3NpemVfdCBvc2NfY2FjaGVkX21iX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKIAlzdHJ1Y3Qgb2JkX2RldmljZSAqZGV2ID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlOwogCXN0cnVjdCBjbGllbnRfb2JkICpjbGkgPSAmZGV2LT51LmNsaTsKIAlpbnQgcGFnZXNfbnVtYmVyLCBtdWx0LCByYzsKKwljaGFyIGtlcm5idWZbMTI4XTsKKworCWlmIChjb3VudCA+PSBzaXplb2Yoa2VybmJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5idWYsIGJ1ZmZlciwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlrZXJuYnVmW2NvdW50XSA9IDA7CiAKIAltdWx0ID0gMSA8PCAoMjAgLSBQQUdFX0NBQ0hFX1NISUZUKTsKLQlidWZmZXIgPSBscHJvY2ZzX2ZpbmRfbmFtZWRfdmFsdWUoYnVmZmVyLCAidXNlZF9tYjoiLCAmY291bnQpOworCWJ1ZmZlciArPSBscHJvY2ZzX2ZpbmRfbmFtZWRfdmFsdWUoa2VybmJ1ZiwgInVzZWRfbWI6IiwgJmNvdW50KSAtCisJCSAga2VybmJ1ZjsKIAlyYyA9IGxwcm9jZnNfd3JpdGVfZnJhY19oZWxwZXIoYnVmZmVyLCBjb3VudCwgJnBhZ2VzX251bWJlciwgbXVsdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC01MTUsNDQgKzUyNSw0NCBAQAogTFBST0NfU0VRX0ZPUFNfUldfVFlQRShvc2MsIHBpbmdlcl9yZWNvdik7CiAKIHN0YXRpYyBzdHJ1Y3QgbHByb2Nmc192YXJzIGxwcm9jZnNfb3NjX29iZF92YXJzW10gPSB7Ci0JeyAidXVpZCIsCSAgICAgJm9zY191dWlkX2ZvcHMsCTAsIDAgfSwKLQl7ICJwaW5nIiwJICAgICAmb3NjX3BpbmdfZm9wcywgICAgMCwgMDIyMiB9LAotCXsgImNvbm5lY3RfZmxhZ3MiLCAgICZvc2NfY29ubmVjdF9mbGFnc19mb3BzLCAwLCAwIH0sCi0JeyAiYmxvY2tzaXplIiwgICAgICAgJm9zY19ibGtzaXplX2ZvcHMsICAgICAwLCAwIH0sCi0JeyAia2J5dGVzdG90YWwiLCAgICAgJm9zY19rYnl0ZXN0b3RhbF9mb3BzLCAwLCAwIH0sCi0JeyAia2J5dGVzZnJlZSIsICAgICAgJm9zY19rYnl0ZXNmcmVlX2ZvcHMsICAwLCAwIH0sCi0JeyAia2J5dGVzYXZhaWwiLCAgICAgJm9zY19rYnl0ZXNhdmFpbF9mb3BzLCAwLCAwIH0sCi0JeyAiZmlsZXN0b3RhbCIsICAgICAgJm9zY19maWxlc3RvdGFsX2ZvcHMsICAwLCAwIH0sCi0JeyAiZmlsZXNmcmVlIiwgICAgICAgJm9zY19maWxlc2ZyZWVfZm9wcywgICAwLCAwIH0sCi0JLy97ICJmaWxlZ3JvdXBzIiwgICAgICBscHJvY2ZzX3JkX2ZpbGVncm91cHMsICAwLCAwIH0sCi0JeyAib3N0X3NlcnZlcl91dWlkIiwgJm9zY19zZXJ2ZXJfdXVpZF9mb3BzLCAwLCAwIH0sCi0JeyAib3N0X2Nvbm5fdXVpZCIsICAgJm9zY19jb25uX3V1aWRfZm9wcywgMCwgMCB9LAotCXsgImFjdGl2ZSIsCSAgICAgJm9zY19hY3RpdmVfZm9wcywgMCB9LAotCXsgIm1heF9wYWdlc19wZXJfcnBjIiwgJm9zY19vYmRfbWF4X3BhZ2VzX3Blcl9ycGNfZm9wcywgMCB9LAotCXsgIm1heF9ycGNzX2luX2ZsaWdodCIsICZvc2NfbWF4X3JwY3NfaW5fZmxpZ2h0X2ZvcHMsIDAgfSwKLQl7ICJkZXN0cm95c19pbl9mbGlnaHQiLCAmb3NjX2Rlc3Ryb3lzX2luX2ZsaWdodF9mb3BzLCAwLCAwIH0sCi0JeyAibWF4X2RpcnR5X21iIiwgICAgJm9zY19tYXhfZGlydHlfbWJfZm9wcywgMCB9LAotCXsgIm9zY19jYWNoZWRfbWIiLCAgICZvc2NfY2FjaGVkX21iX2ZvcHMsIDAgfSwKLQl7ICJjdXJfZGlydHlfYnl0ZXMiLCAmb3NjX2N1cl9kaXJ0eV9ieXRlc19mb3BzLCAwLCAwIH0sCi0JeyAiY3VyX2dyYW50X2J5dGVzIiwgJm9zY19jdXJfZ3JhbnRfYnl0ZXNfZm9wcywgMCB9LAotCXsgImN1cl9sb3N0X2dyYW50X2J5dGVzIiwgJm9zY19jdXJfbG9zdF9ncmFudF9ieXRlc19mb3BzLCAwLCAwfSwKLQl7ICJncmFudF9zaHJpbmtfaW50ZXJ2YWwiLCAmb3NjX2dyYW50X3Nocmlua19pbnRlcnZhbF9mb3BzLCAwIH0sCi0JeyAiY2hlY2tzdW1zIiwgICAgICAgJm9zY19jaGVja3N1bV9mb3BzLCAwIH0sCi0JeyAiY2hlY2tzdW1fdHlwZSIsICAgJm9zY19jaGVja3N1bV90eXBlX2ZvcHMsIDAgfSwKLQl7ICJyZXNlbmRfY291bnQiLCAgICAmb3NjX3Jlc2VuZF9jb3VudF9mb3BzLCAwfSwKLQl7ICJ0aW1lb3V0cyIsCSAgICAgJm9zY190aW1lb3V0c19mb3BzLCAwLCAwIH0sCi0JeyAiY29udGVudGlvbl9zZWNvbmRzIiwgJm9zY19jb250ZW50aW9uX3NlY29uZHNfZm9wcywgMCB9LAotCXsgImxvY2tsZXNzX3RydW5jYXRlIiwgICZvc2NfbG9ja2xlc3NfdHJ1bmNhdGVfZm9wcywgMCB9LAotCXsgImltcG9ydCIsCQkmb3NjX2ltcG9ydF9mb3BzLCAwIH0sCi0JeyAic3RhdGUiLAkJJm9zY19zdGF0ZV9mb3BzLCAwLCAwIH0sCi0JeyAicGluZ2VyX3JlY292IiwJJm9zY19waW5nZXJfcmVjb3ZfZm9wcywgMCB9LAotCXsgMCB9CisJeyAidXVpZCIsCSAgICAgJm9zY191dWlkX2ZvcHMsCU5VTEwsIDAgfSwKKwl7ICJwaW5nIiwJICAgICAmb3NjX3BpbmdfZm9wcywgICAgTlVMTCwgMDIyMiB9LAorCXsgImNvbm5lY3RfZmxhZ3MiLCAgICZvc2NfY29ubmVjdF9mbGFnc19mb3BzLCBOVUxMLCAwIH0sCisJeyAiYmxvY2tzaXplIiwgICAgICAgJm9zY19ibGtzaXplX2ZvcHMsICAgICBOVUxMLCAwIH0sCisJeyAia2J5dGVzdG90YWwiLCAgICAgJm9zY19rYnl0ZXN0b3RhbF9mb3BzLCBOVUxMLCAwIH0sCisJeyAia2J5dGVzZnJlZSIsICAgICAgJm9zY19rYnl0ZXNmcmVlX2ZvcHMsICBOVUxMLCAwIH0sCisJeyAia2J5dGVzYXZhaWwiLCAgICAgJm9zY19rYnl0ZXNhdmFpbF9mb3BzLCBOVUxMLCAwIH0sCisJeyAiZmlsZXN0b3RhbCIsICAgICAgJm9zY19maWxlc3RvdGFsX2ZvcHMsICBOVUxMLCAwIH0sCisJeyAiZmlsZXNmcmVlIiwgICAgICAgJm9zY19maWxlc2ZyZWVfZm9wcywgICBOVUxMLCAwIH0sCisJLyp7ICJmaWxlZ3JvdXBzIiwgICAgICBscHJvY2ZzX3JkX2ZpbGVncm91cHMsICBOVUxMLCAwIH0sKi8KKwl7ICJvc3Rfc2VydmVyX3V1aWQiLCAmb3NjX3NlcnZlcl91dWlkX2ZvcHMsIE5VTEwsIDAgfSwKKwl7ICJvc3RfY29ubl91dWlkIiwgICAmb3NjX2Nvbm5fdXVpZF9mb3BzLCBOVUxMLCAwIH0sCisJeyAiYWN0aXZlIiwJICAgICAmb3NjX2FjdGl2ZV9mb3BzLCBOVUxMIH0sCisJeyAibWF4X3BhZ2VzX3Blcl9ycGMiLCAmb3NjX29iZF9tYXhfcGFnZXNfcGVyX3JwY19mb3BzLCBOVUxMIH0sCisJeyAibWF4X3JwY3NfaW5fZmxpZ2h0IiwgJm9zY19tYXhfcnBjc19pbl9mbGlnaHRfZm9wcywgTlVMTCB9LAorCXsgImRlc3Ryb3lzX2luX2ZsaWdodCIsICZvc2NfZGVzdHJveXNfaW5fZmxpZ2h0X2ZvcHMsIE5VTEwsIDAgfSwKKwl7ICJtYXhfZGlydHlfbWIiLCAgICAmb3NjX21heF9kaXJ0eV9tYl9mb3BzLCBOVUxMIH0sCisJeyAib3NjX2NhY2hlZF9tYiIsICAgJm9zY19jYWNoZWRfbWJfZm9wcywgTlVMTCB9LAorCXsgImN1cl9kaXJ0eV9ieXRlcyIsICZvc2NfY3VyX2RpcnR5X2J5dGVzX2ZvcHMsIE5VTEwsIDAgfSwKKwl7ICJjdXJfZ3JhbnRfYnl0ZXMiLCAmb3NjX2N1cl9ncmFudF9ieXRlc19mb3BzLCBOVUxMIH0sCisJeyAiY3VyX2xvc3RfZ3JhbnRfYnl0ZXMiLCAmb3NjX2N1cl9sb3N0X2dyYW50X2J5dGVzX2ZvcHMsIE5VTEwsIDB9LAorCXsgImdyYW50X3Nocmlua19pbnRlcnZhbCIsICZvc2NfZ3JhbnRfc2hyaW5rX2ludGVydmFsX2ZvcHMsIE5VTEwgfSwKKwl7ICJjaGVja3N1bXMiLCAgICAgICAmb3NjX2NoZWNrc3VtX2ZvcHMsIE5VTEwgfSwKKwl7ICJjaGVja3N1bV90eXBlIiwgICAmb3NjX2NoZWNrc3VtX3R5cGVfZm9wcywgTlVMTCB9LAorCXsgInJlc2VuZF9jb3VudCIsICAgICZvc2NfcmVzZW5kX2NvdW50X2ZvcHMsIE5VTEx9LAorCXsgInRpbWVvdXRzIiwJICAgICAmb3NjX3RpbWVvdXRzX2ZvcHMsIE5VTEwsIDAgfSwKKwl7ICJjb250ZW50aW9uX3NlY29uZHMiLCAmb3NjX2NvbnRlbnRpb25fc2Vjb25kc19mb3BzLCBOVUxMIH0sCisJeyAibG9ja2xlc3NfdHJ1bmNhdGUiLCAgJm9zY19sb2NrbGVzc190cnVuY2F0ZV9mb3BzLCBOVUxMIH0sCisJeyAiaW1wb3J0IiwJCSZvc2NfaW1wb3J0X2ZvcHMsIE5VTEwgfSwKKwl7ICJzdGF0ZSIsCQkmb3NjX3N0YXRlX2ZvcHMsIE5VTEwsIDAgfSwKKwl7ICJwaW5nZXJfcmVjb3YiLAkmb3NjX3Bpbmdlcl9yZWNvdl9mb3BzLCBOVUxMIH0sCisJeyBOVUxMIH0KIH07CiAKIExQUk9DX1NFUV9GT1BTX1JPX1RZUEUob3NjLCBudW1yZWZzKTsKIHN0YXRpYyBzdHJ1Y3QgbHByb2Nmc192YXJzIGxwcm9jZnNfb3NjX21vZHVsZV92YXJzW10gPSB7Ci0JeyAibnVtX3JlZnMiLAkmb3NjX251bXJlZnNfZm9wcywgICAgIDAsIDAgfSwKLQl7IDAgfQorCXsgIm51bV9yZWZzIiwJJm9zY19udW1yZWZzX2ZvcHMsICAgICBOVUxMLCAwIH0sCisJeyBOVUxMIH0KIH07CiAKICNkZWZpbmUgcGN0KGEsYikgKGIgPyBhICogMTAwIC8gYiA6IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX2NhY2hlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX2NhY2hlLmMKaW5kZXggZmU5OTg5YS4uMDBmMzhlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19jYWNoZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfY2FjaGUuYwpAQCAtMTMxMSw3ICsxMzExLDcgQEAKIHN0YXRpYyB2b2lkIG9zY19jb25zdW1lX3dyaXRlX2dyYW50KHN0cnVjdCBjbGllbnRfb2JkICpjbGksCiAJCQkJICAgIHN0cnVjdCBicndfcGFnZSAqcGdhKQogewotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmNsaS0+Y2xfbG9pX2xpc3RfbG9jay5sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZjbGktPmNsX2xvaV9saXN0X2xvY2subG9jayk7CiAJTEFTU0VSVCghKHBnYS0+ZmxhZyAmIE9CRF9CUldfRlJPTV9HUkFOVCkpOwogCWF0b21pY19pbmMoJm9iZF9kaXJ0eV9wYWdlcyk7CiAJY2xpLT5jbF9kaXJ0eSArPSBQQUdFX0NBQ0hFX1NJWkU7CkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogc3RhdGljIHZvaWQgb3NjX3JlbGVhc2Vfd3JpdGVfZ3JhbnQoc3RydWN0IGNsaWVudF9vYmQgKmNsaSwKIAkJCQkgICAgc3RydWN0IGJyd19wYWdlICpwZ2EpCiB7Ci0JTEFTU0VSVChzcGluX2lzX2xvY2tlZCgmY2xpLT5jbF9sb2lfbGlzdF9sb2NrLmxvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmNsaS0+Y2xfbG9pX2xpc3RfbG9jay5sb2NrKTsKIAlpZiAoIShwZ2EtPmZsYWcgJiBPQkRfQlJXX0ZST01fR1JBTlQpKSB7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX2NsX2ludGVybmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX2NsX2ludGVybmFsLmgKaW5kZXggOWU3ODk5Zi4uZTc0YjdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19jbF9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfY2xfaW50ZXJuYWwuaApAQCAtMTc2LDcgKzE3NiwxNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBvc2Nfb2JqZWN0X2lzX2xvY2tlZChzdHJ1Y3Qgb3NjX29iamVjdCAqb2JqKQogeworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCiAJcmV0dXJuIHNwaW5faXNfbG9ja2VkKCZvYmotPm9vX2xvY2spOworI2Vsc2UKKwkvKgorCSAqIEl0IGlzIG5vdCBwZXJmZWN0IHRvIHJldHVybiB0cnVlIGFsbCB0aGUgdGltZS4KKwkgKiBCdXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGFzc2VydGlvbgorCSAqIGFuZCBjaGVja2luZywgaXQgc2VlbXMgT0suCisJICovCisJcmV0dXJuIDE7CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX2Rldi5jCmluZGV4IDM1ZjI1NzguLmE3YzFlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19kZXYuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiB7CiAJc3RydWN0IG9zY190aHJlYWRfaW5mbyAqaW5mbzsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoaW5mbywgb3NjX3RocmVhZF9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChpbmZvLCBvc2NfdGhyZWFkX2ttZW0sIEdGUF9OT0ZTKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlpbmZvID0gRVJSX1BUUigtRU5PTUVNKTsKIAlyZXR1cm4gaW5mbzsKQEAgLTE0Niw3ICsxNDYsNyBAQAogewogCXN0cnVjdCBvc2Nfc2Vzc2lvbiAqaW5mbzsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoaW5mbywgb3NjX3Nlc3Npb25fa21lbSwgX19HRlBfSU8pOworCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAoaW5mbywgb3NjX3Nlc3Npb25fa21lbSwgR0ZQX05PRlMpOwogCWlmIChpbmZvID09IE5VTEwpCiAJCWluZm8gPSBFUlJfUFRSKC1FTk9NRU0pOwogCXJldHVybiBpbmZvOwpAQCAtMTkzLDcgKzE5Myw3IEBACiBzdGF0aWMgc3RydWN0IGx1X2RldmljZSAqb3NjX2RldmljZV9maW5pKGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwKIAkJCQkJIHN0cnVjdCBsdV9kZXZpY2UgKmQpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbHVfZGV2aWNlICpvc2NfZGV2aWNlX2ZyZWUoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19pby5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19pby5jCmluZGV4IDVmM2M1NDUuLjA5ZTA2ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX2lvLmMKQEAgLTUwOSwxMiArNTA5LDExIEBACiBzdGF0aWMgaW50IG9zY19pb19yZWFkX3N0YXJ0KGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGNsX2lvX3NsaWNlICpzbGljZSkKIHsKLQlzdHJ1Y3Qgb3NjX2lvICAgICpvaW8gICA9IGNsMm9zY19pbyhlbnYsIHNsaWNlKTsKIAlzdHJ1Y3QgY2xfb2JqZWN0ICpvYmogICA9IHNsaWNlLT5jaXNfb2JqOwogCXN0cnVjdCBjbF9hdHRyICAgKmF0dHIgID0gJm9zY19lbnZfaW5mbyhlbnYpLT5vdGlfYXR0cjsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKG9pby0+b2lfbG9ja2xlc3MgPT0gMCAmJiAhc2xpY2UtPmNpc19pby0+Y2lfbm9hdGltZSkgeworCWlmICghc2xpY2UtPmNpc19pby0+Y2lfbm9hdGltZSkgewogCQljbF9vYmplY3RfYXR0cl9sb2NrKG9iaik7CiAJCWF0dHItPmNhdF9hdGltZSA9IExUSU1FX1MoQ1VSUkVOVF9USU1FKTsKIAkJcmMgPSBjbF9vYmplY3RfYXR0cl9zZXQoZW52LCBvYmosIGF0dHIsIENBVF9BVElNRSk7CkBAIC01MjYsMjQgKzUyNSwxNyBAQAogc3RhdGljIGludCBvc2NfaW9fd3JpdGVfc3RhcnQoY29uc3Qgc3RydWN0IGx1X2VudiAqZW52LAogCQkJICAgICAgY29uc3Qgc3RydWN0IGNsX2lvX3NsaWNlICpzbGljZSkKIHsKLQlzdHJ1Y3Qgb3NjX2lvICAgICpvaW8gICA9IGNsMm9zY19pbyhlbnYsIHNsaWNlKTsKIAlzdHJ1Y3QgY2xfb2JqZWN0ICpvYmogICA9IHNsaWNlLT5jaXNfb2JqOwogCXN0cnVjdCBjbF9hdHRyICAgKmF0dHIgID0gJm9zY19lbnZfaW5mbyhlbnYpLT5vdGlfYXR0cjsKLQlpbnQJICAgICAgcmVzdWx0ID0gMDsKKwlpbnQgcmMgPSAwOwogCi0JaWYgKG9pby0+b2lfbG9ja2xlc3MgPT0gMCkgewotCQlPQkRfRkFJTF9USU1FT1VUKE9CRF9GQUlMX09TQ19ERUxBWV9TRVRUSU1FLCAxKTsKLQkJY2xfb2JqZWN0X2F0dHJfbG9jayhvYmopOwotCQlyZXN1bHQgPSBjbF9vYmplY3RfYXR0cl9nZXQoZW52LCBvYmosIGF0dHIpOwotCQlpZiAocmVzdWx0ID09IDApIHsKLQkJCWF0dHItPmNhdF9tdGltZSA9IGF0dHItPmNhdF9jdGltZSA9Ci0JCQkJTFRJTUVfUyhDVVJSRU5UX1RJTUUpOwotCQkJcmVzdWx0ID0gY2xfb2JqZWN0X2F0dHJfc2V0KGVudiwgb2JqLCBhdHRyLAotCQkJCQkJICAgIENBVF9NVElNRSB8IENBVF9DVElNRSk7Ci0JCX0KLQkJY2xfb2JqZWN0X2F0dHJfdW5sb2NrKG9iaik7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJT0JEX0ZBSUxfVElNRU9VVChPQkRfRkFJTF9PU0NfREVMQVlfU0VUVElNRSwgMSk7CisJY2xfb2JqZWN0X2F0dHJfbG9jayhvYmopOworCWF0dHItPmNhdF9tdGltZSA9IGF0dHItPmNhdF9jdGltZSA9IExUSU1FX1MoQ1VSUkVOVF9USU1FKTsKKwlyYyA9IGNsX29iamVjdF9hdHRyX3NldChlbnYsIG9iaiwgYXR0ciwgQ0FUX01USU1FIHwgQ0FUX0NUSU1FKTsKKwljbF9vYmplY3RfYXR0cl91bmxvY2sob2JqKTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBvc2NfZnN5bmNfb3N0KGNvbnN0IHN0cnVjdCBsdV9lbnYgKmVudiwgc3RydWN0IG9zY19vYmplY3QgKm9iaiwKQEAgLTgxMiw3ICs4MDQsNyBAQAogCXN0cnVjdCBvc2NfcmVxICpvcjsKIAlpbnQgcmVzdWx0OwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChvciwgb3NjX3JlcV9rbWVtLCBfX0dGUF9JTyk7CisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChvciwgb3NjX3JlcV9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKG9yICE9IE5VTEwpIHsKIAkJY2xfcmVxX3NsaWNlX2FkZChyZXEsICZvci0+b3JfY2wsIGRldiwgJm9zY19yZXFfb3BzKTsKIAkJcmVzdWx0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19sb2NrLmMKaW5kZXggZWY3YjljMi4uYTQ2MTI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19sb2NrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19sb2NrLmMKQEAgLTExOTIsNiArMTE5Miw3IEBACiAKIAkJTEFTU0VSVChvbGNrLT5vbHNfYWdsKTsKIAkJb2xjay0+b2xzX2FnbCA9IDA7CisJCW9sY2stPm9sc19mbGFncyAmPSB+TERMTV9GTF9CTE9DS19OT1dBSVQ7CiAJCXJjID0gb3NjX2xvY2tfZW5xdWV1ZShlbnYsIHNsaWNlLCBOVUxMLCBDRUZfQVNZTkMgfCBDRUZfTVVTVCk7CiAJCWlmIChyYyAhPSAwKQogCQkJcmV0dXJuIHJjOwpAQCAtMTU1OCw3ICsxNTU5LDcgQEAKIAlzdHJ1Y3Qgb3NjX2xvY2sgKmNsazsKIAlpbnQgcmVzdWx0OwogCi0JT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChjbGssIG9zY19sb2NrX2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKGNsaywgb3NjX2xvY2tfa21lbSwgR0ZQX05PRlMpOwogCWlmIChjbGsgIT0gTlVMTCkgewogCQlfX3UzMiBlbnFmbGFncyA9IGxvY2stPmNsbF9kZXNjci5jbGRfZW5xX2ZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX29iamVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb3NjL29zY19vYmplY3QuYwppbmRleCA5ZDM0ZGU4Li5mOWJmZGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX29iamVjdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2Nfb2JqZWN0LmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCXN0cnVjdCBvc2Nfb2JqZWN0ICpvc2M7CiAJc3RydWN0IGx1X29iamVjdCAgKm9iajsKIAotCU9CRF9TTEFCX0FMTE9DX1BUUl9HRlAob3NjLCBvc2Nfb2JqZWN0X2ttZW0sIF9fR0ZQX0lPKTsKKwlPQkRfU0xBQl9BTExPQ19QVFJfR0ZQKG9zYywgb3NjX29iamVjdF9rbWVtLCBHRlBfTk9GUyk7CiAJaWYgKG9zYyAhPSBOVUxMKSB7CiAJCW9iaiA9IG9zYzJsdShvc2MpOwogCQlsdV9vYmplY3RfaW5pdChvYmosIE5VTEwsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vc2Mvb3NjX3JlcXVlc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfcmVxdWVzdC5jCmluZGV4IGVlNjk1M2EuLjI5NGRiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29zYy9vc2NfcmVxdWVzdC5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8bHVzdHJlL2x1c3RyZV91c2VyLmg+CiAjaW5jbHVkZSA8b2JkX2Nrc3VtLmg+CiAjaW5jbHVkZSA8b2JkX29zdC5oPgotI2luY2x1ZGUgPG9iZF9sb3YuaD4KIAogI2luY2x1ZGUgPGx1c3RyZV9oYS5oPgogI2luY2x1ZGUgPGxwcm9jZnNfc3RhdHVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvY2xpZW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvY2xpZW50LmMKaW5kZXggNGM5ZTAwNi4uNzI0NmU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2NsaWVudC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9jbGllbnQuYwpAQCAtMzc5LDYgKzM3OSwzNCBAQAogCXJldHVybiByYzsKIH0KIAorc3RydWN0IGttZW1fY2FjaGUgKnJlcXVlc3RfY2FjaGU7CisKK2ludCBwdGxycGNfcmVxdWVzdF9jYWNoZV9pbml0KHZvaWQpCit7CisJcmVxdWVzdF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwdGxycGNfY2FjaGUiLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgcHRscnBjX3JlcXVlc3QpLAorCQkJCQkgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJcmV0dXJuIHJlcXVlc3RfY2FjaGUgPT0gTlVMTCA/IC1FTk9NRU0gOiAwOworfQorCit2b2lkIHB0bHJwY19yZXF1ZXN0X2NhY2hlX2Zpbmkodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxdWVzdF9jYWNoZSk7Cit9CisKK3N0cnVjdCBwdGxycGNfcmVxdWVzdCAqcHRscnBjX3JlcXVlc3RfY2FjaGVfYWxsb2MoaW50IGZsYWdzKQoreworCXN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxOworCisJT0JEX1NMQUJfQUxMT0NfUFRSX0dGUChyZXEsIHJlcXVlc3RfY2FjaGUsIGZsYWdzKTsKKwlyZXR1cm4gcmVxOworfQorCit2b2lkIHB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZyZWUoc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXEpCit7CisJT0JEX1NMQUJfRlJFRV9QVFIocmVxLCByZXF1ZXN0X2NhY2hlKTsKK30KKwogLyoqCiAgKiBXaW5kIGRvd24gcmVxdWVzdCBwb29sIFxhIHBvb2wuCiAgKiBGcmVlcyBhbGwgcmVxdWVzdHMgZnJvbSB0aGUgcG9vbCB0b28KQEAgLTM5Nyw3ICs0MjUsNyBAQAogCQlMQVNTRVJUKHJlcS0+cnFfcmVxYnVmKTsKIAkJTEFTU0VSVChyZXEtPnJxX3JlcWJ1Zl9sZW4gPT0gcG9vbC0+cHJwX3JxX3NpemUpOwogCQlPQkRfRlJFRV9MQVJHRShyZXEtPnJxX3JlcWJ1ZiwgcG9vbC0+cHJwX3JxX3NpemUpOwotCQlPQkRfRlJFRShyZXEsIHNpemVvZigqcmVxKSk7CisJCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZyZWUocmVxKTsKIAl9CiAJc3Bpbl91bmxvY2soJnBvb2wtPnBycF9sb2NrKTsKIAlPQkRfRlJFRShwb29sLCBzaXplb2YoKnBvb2wpKTsKQEAgLTQyNywxMiArNDU1LDEyIEBACiAJCXN0cnVjdCBsdXN0cmVfbXNnICptc2c7CiAKIAkJc3Bpbl91bmxvY2soJnBvb2wtPnBycF9sb2NrKTsKLQkJT0JEX0FMTE9DKHJlcSwgc2l6ZW9mKHN0cnVjdCBwdGxycGNfcmVxdWVzdCkpOworCQlyZXEgPSBwdGxycGNfcmVxdWVzdF9jYWNoZV9hbGxvYyhHRlBfTk9GUyk7CiAJCWlmICghcmVxKQogCQkJcmV0dXJuOwogCQlPQkRfQUxMT0NfTEFSR0UobXNnLCBzaXplKTsKIAkJaWYgKCFtc2cpIHsKLQkJCU9CRF9GUkVFKHJlcSwgc2l6ZW9mKHN0cnVjdCBwdGxycGNfcmVxdWVzdCkpOworCQkJcHRscnBjX3JlcXVlc3RfY2FjaGVfZnJlZShyZXEpOwogCQkJcmV0dXJuOwogCQl9CiAJCXJlcS0+cnFfcmVxYnVmID0gbXNnOwpAQCAtNjY4LDcgKzY5Niw3IEBACiAJCXJlcXVlc3QgPSBwdGxycGNfcHJlcF9yZXFfZnJvbV9wb29sKHBvb2wpOwogCiAJaWYgKCFyZXF1ZXN0KQotCQlPQkRfQUxMT0NfUFRSKHJlcXVlc3QpOworCQlyZXF1ZXN0ID0gcHRscnBjX3JlcXVlc3RfY2FjaGVfYWxsb2MoR0ZQX05PRlMpOwogCiAJaWYgKHJlcXVlc3QpIHsKIAkJTEFTU0VSVEYoKHVuc2lnbmVkIGxvbmcpaW1wID4gMHgxMDAwLCAiJXAiLCBpbXApOwpAQCAtNzM5LDcgKzc2Nyw3IEBACiAJaWYgKHJlcXVlc3QtPnJxX3Bvb2wpCiAJCV9fcHRscnBjX2ZyZWVfcmVxX3RvX3Bvb2wocmVxdWVzdCk7CiAJZWxzZQotCQlPQkRfRlJFRV9QVFIocmVxdWVzdCk7CisJCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZyZWUocmVxdWVzdCk7CiB9CiBFWFBPUlRfU1lNQk9MKHB0bHJwY19yZXF1ZXN0X2ZyZWUpOwogCkBAIC0yMjMzLDcgKzIyNjEsNyBAQAogCWlmIChyZXF1ZXN0LT5ycV9wb29sKQogCQlfX3B0bHJwY19mcmVlX3JlcV90b19wb29sKHJlcXVlc3QpOwogCWVsc2UKLQkJT0JEX0ZSRUUocmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSk7CisJCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZyZWUocmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgX19wdGxycGNfcmVxX2ZpbmlzaGVkKHN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxdWVzdCwgaW50IGxvY2tlZCk7CkBAIC0yMjQzLDcgKzIyNzEsNyBAQAogICovCiB2b2lkIHB0bHJwY19yZXFfZmluaXNoZWRfd2l0aF9pbXBfbG9jayhzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JTEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcmVxdWVzdC0+cnFfaW1wb3J0LT5pbXBfbG9jaykpOworCWFzc2VydF9zcGluX2xvY2tlZCgmcmVxdWVzdC0+cnFfaW1wb3J0LT5pbXBfbG9jayk7CiAJKHZvaWQpX19wdGxycGNfcmVxX2ZpbmlzaGVkKHJlcXVlc3QsIDEpOwogfQogRVhQT1JUX1NZTUJPTChwdGxycGNfcmVxX2ZpbmlzaGVkX3dpdGhfaW1wX2xvY2spOwpAQCAtMjQyNCw5ICsyNDUyLDcgQEAKIAlib29sCQkgICAgICAgc2tpcF9jb21taXR0ZWRfbGlzdCA9IHRydWU7CiAKIAlMQVNTRVJUKGltcCAhPSBOVUxMKTsKLQotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmltcC0+aW1wX2xvY2spKTsKLQorCWFzc2VydF9zcGluX2xvY2tlZCgmaW1wLT5pbXBfbG9jayk7CiAKIAlpZiAoaW1wLT5pbXBfcGVlcl9jb21taXR0ZWRfdHJhbnNubyA9PSBpbXAtPmltcF9sYXN0X3RyYW5zbm9fY2hlY2tlZCAmJgogCSAgICBpbXAtPmltcF9nZW5lcmF0aW9uID09IGltcC0+aW1wX2xhc3RfZ2VuZXJhdGlvbl9jaGVja2VkKSB7CkBAIC0yNTU3LDcgKzI1ODMsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmltcC0+aW1wX2xvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmltcC0+aW1wX2xvY2spOwogCiAJaWYgKHJlcS0+cnFfdHJhbnNubyA9PSAwKSB7CiAJCURFQlVHX1JFUShEX0VNRVJHLCByZXEsICJzYXZpbmcgcmVxdWVzdCB3aXRoIHplcm8gdHJhbnNubyIpOwpAQCAtMzAyMyw3ICszMDQ5LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAkvKiBjb3B5IHNvbWUgY29kZSBmcm9tIGRlcHJlY2F0ZWQgZmFrZXJlcS4gKi8KLQlPQkRfQUxMT0NfUFRSKHJlcSk7CisJcmVxID0gcHRscnBjX3JlcXVlc3RfY2FjaGVfYWxsb2MoR0ZQX05PRlMpOwogCWlmIChyZXEgPT0gTlVMTCkgewogCQlDRVJST1IoInB0bHJwYzogcnVuIG91dCBvZiBtZW1vcnkhXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvZXZlbnRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvZXZlbnRzLmMKaW5kZXggNmVhMGE0OS4uYWE4NTIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9ldmVudHMuYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCQkvKiBXZSBtb2FuZWQgYWJvdmUgYWxyZWFkeS4uLiAqLwogCQkJcmV0dXJuOwogCQl9Ci0JCU9CRF9BTExPQ19HRlAocmVxLCBzaXplb2YoKnJlcSksIEFMTE9DX0FUT01JQ19UUlkpOworCQlyZXEgPSBwdGxycGNfcmVxdWVzdF9jYWNoZV9hbGxvYyhBTExPQ19BVE9NSUNfVFJZKTsKIAkJaWYgKHJlcSA9PSBOVUxMKSB7CiAJCQlDRVJST1IoIkNhbid0IGFsbG9jYXRlIGluY29taW5nIHJlcXVlc3QgZGVzY3JpcHRvcjogIgogCQkJICAgICAgICJEcm9wcGluZyAlcyBSUEMgZnJvbSAlc1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9nc3MvZ3NzX2J1bGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9nc3MvZ3NzX2J1bGsuYwppbmRleCA3ODUyYmYzLi45Mzc5NGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvZ3NzL2dzc19idWxrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2dzcy9nc3NfYnVsay5jCkBAIC0xNzYsMzEgKzE3NiwzMSBAQAogCXN3aXRjaCAoU1BUTFJQQ19GTFZSX1NWQyhyZXEtPnJxX2ZsdnIuc2ZfcnBjKSkgewogCWNhc2UgU1BUTFJQQ19TVkNfTlVMTDoKIAkJdm1zZyA9IHJlcS0+cnFfcmVwZGF0YTsKKwkJTEFTU0VSVCh2bXNnICE9IE5VTEwgJiYgdm1zZy0+bG1fYnVmY291bnQgPj0gMyk7CiAJCXZvZmYgPSB2bXNnLT5sbV9idWZjb3VudCAtIDE7Ci0JCUxBU1NFUlQodm1zZyAmJiB2bXNnLT5sbV9idWZjb3VudCA+PSAzKTsKIAogCQlybXNnID0gcmVxLT5ycV9yZXFidWY7CisJCUxBU1NFUlQocm1zZyAhPSBOVUxMICYmIHJtc2ctPmxtX2J1ZmNvdW50ID49IDMpOwogCQlyb2ZmID0gcm1zZy0+bG1fYnVmY291bnQgLSAxOyAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJTEFTU0VSVChybXNnICYmIHJtc2ctPmxtX2J1ZmNvdW50ID49IDMpOwogCQlicmVhazsKIAljYXNlIFNQVExSUENfU1ZDX0FVVEg6CiAJY2FzZSBTUFRMUlBDX1NWQ19JTlRHOgogCQl2bXNnID0gcmVxLT5ycV9yZXBkYXRhOworCQlMQVNTRVJUKHZtc2cgIT0gTlVMTCAmJiB2bXNnLT5sbV9idWZjb3VudCA+PSA0KTsKIAkJdm9mZiA9IHZtc2ctPmxtX2J1ZmNvdW50IC0gMjsKLQkJTEFTU0VSVCh2bXNnICYmIHZtc2ctPmxtX2J1ZmNvdW50ID49IDQpOwogCiAJCXJtc2cgPSByZXEtPnJxX3JlcWJ1ZjsKKwkJTEFTU0VSVChybXNnICE9IE5VTEwgJiYgcm1zZy0+bG1fYnVmY291bnQgPj0gNCk7CiAJCXJvZmYgPSBybXNnLT5sbV9idWZjb3VudCAtIDI7IC8qIHNlY29uZCBsYXN0IHNlZ21lbnQgKi8KLQkJTEFTU0VSVChybXNnICYmIHJtc2ctPmxtX2J1ZmNvdW50ID49IDQpOwogCQlicmVhazsKIAljYXNlIFNQVExSUENfU1ZDX1BSSVY6CiAJCXZtc2cgPSByZXEtPnJxX3JlcGRhdGE7CisJCUxBU1NFUlQodm1zZyAhPSBOVUxMICYmIHZtc2ctPmxtX2J1ZmNvdW50ID49IDIpOwogCQl2b2ZmID0gdm1zZy0+bG1fYnVmY291bnQgLSAxOwotCQlMQVNTRVJUKHZtc2cgJiYgdm1zZy0+bG1fYnVmY291bnQgPj0gMik7CiAKIAkJcm1zZyA9IHJlcS0+cnFfY2xyYnVmOworCQlMQVNTRVJUKHJtc2cgIT0gTlVMTCAmJiBybXNnLT5sbV9idWZjb3VudCA+PSAyKTsKIAkJcm9mZiA9IHJtc2ctPmxtX2J1ZmNvdW50IC0gMTsgLyogbGFzdCBzZWdtZW50ICovCi0JCUxBU1NFUlQocm1zZyAmJiBybXNnLT5sbV9idWZjb3VudCA+PSAyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJTEJVRygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2dzcy9nc3NfcGlwZWZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvZ3NzL2dzc19waXBlZnMuYwppbmRleCA3YTFmZjRmLi4zYmU1YmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvZ3NzL2dzc19waXBlZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvZ3NzL2dzc19waXBlZnMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiBzdGF0aWMKIHZvaWQgY3R4X3VuaGFzaF9wZihzdHJ1Y3QgcHRscnBjX2NsaV9jdHggKmN0eCwgc3RydWN0IGhsaXN0X2hlYWQgKmZyZWVsaXN0KQogewotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmN0eC0+Y2Nfc2VjLT5wc19sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZjdHgtPmNjX3NlYy0+cHNfbG9jayk7CiAJTEFTU0VSVChhdG9taWNfcmVhZCgmY3R4LT5jY19yZWZjb3VudCkgPiAwKTsKIAlMQVNTRVJUKHRlc3RfYml0KFBUTFJQQ19DVFhfQ0FDSEVEX0JJVCwgJmN0eC0+Y2NfZmxhZ3MpKTsKIAlMQVNTRVJUKCFobGlzdF91bmhhc2hlZCgmY3R4LT5jY19jYWNoZSkpOwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJX191MzIgaWR4ID0gZ21zZy0+Z3VtX21lY2hpZHg7CiAKIAlMQVNTRVJUKGlkeCA8IE1FQ0hfTUFYKTsKLQlMQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZ1cGNhbGxfbG9ja3NbaWR4XSkpOworCWFzc2VydF9zcGluX2xvY2tlZCgmdXBjYWxsX2xvY2tzW2lkeF0pOwogCiAJaWYgKGxpc3RfZW1wdHkoJmdtc2ctPmd1bV9saXN0KSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2ltcG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2ltcG9ydC5jCmluZGV4IDUzN2FhNjIuLjg1NzNmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9pbXBvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvaW1wb3J0LmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbXBfbG9jayBoZWxkISAqLwogc3RhdGljIHZvaWQgcHRscnBjX2RlYWN0aXZhdGVfYW5kX3VubG9ja19pbXBvcnQoc3RydWN0IG9iZF9pbXBvcnQgKmltcCkKIHsKLQlMQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZpbXAtPmltcF9sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZpbXAtPmltcF9sb2NrKTsKIAogCUNERUJVRyhEX0hBLCAic2V0dGluZyBpbXBvcnQgJXMgSU5WQUxJRFxuIiwgb2JkMmNsaV90Z3QoaW1wLT5pbXBfb2JkKSk7CiAJaW1wLT5pbXBfaW52YWxpZCA9IDE7CkBAIC0zODEsNiArMzgxLDExIEBACiAJc3RydWN0IG9iZF9kZXZpY2UgKm9iZCA9IGltcC0+aW1wX29iZDsKIAogCXNwaW5fbG9jaygmaW1wLT5pbXBfbG9jayk7CisJaWYgKGltcC0+aW1wX2RlYWN0aXZlICE9IDApIHsKKwkJc3Bpbl91bmxvY2soJmltcC0+aW1wX2xvY2spOworCQlyZXR1cm47CisJfQorCiAJaW1wLT5pbXBfaW52YWxpZCA9IDA7CiAJc3Bpbl91bmxvY2soJmltcC0+aW1wX2xvY2spOwogCW9iZF9pbXBvcnRfZXZlbnQob2JkLCBpbXAsIElNUF9FVkVOVF9BQ1RJVkUpOwpAQCAtNjQwLDcgKzY0NSw3IEBACiAJaWYgKHJjKQogCQlHT1RPKG91dCwgcmMpOwogCi0JcmMgPSBzcHRscnBjX2ltcG9ydF9zZWNfYWRhcHQoaW1wLCBOVUxMLCAwKTsKKwlyYyA9IHNwdGxycGNfaW1wb3J0X3NlY19hZGFwdChpbXAsIE5VTEwsIE5VTEwpOwogCWlmIChyYykKIAkJR09UTyhvdXQsIHJjKTsKIApAQCAtMTM5OSwyNiArMTQwNCwzMyBAQAogewogCXN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxOwogCWludCBycV9vcGMsIHJjID0gMDsKLQlpbnQgbm93YWl0ID0gaW1wLT5pbXBfb2JkLT5vYmRfZm9yY2U7CiAKLQlpZiAobm93YWl0KQorCWlmIChpbXAtPmltcF9vYmQtPm9iZF9mb3JjZSkKIAkJR09UTyhzZXRfc3RhdGUsIHJjKTsKIAogCXN3aXRjaCAoaW1wLT5pbXBfY29ubmVjdF9vcCkgewotCWNhc2UgT1NUX0NPTk5FQ1Q6IHJxX29wYyA9IE9TVF9ESVNDT05ORUNUOyBicmVhazsKLQljYXNlIE1EU19DT05ORUNUOiBycV9vcGMgPSBNRFNfRElTQ09OTkVDVDsgYnJlYWs7Ci0JY2FzZSBNR1NfQ09OTkVDVDogcnFfb3BjID0gTUdTX0RJU0NPTk5FQ1Q7IGJyZWFrOworCWNhc2UgT1NUX0NPTk5FQ1Q6CisJCXJxX29wYyA9IE9TVF9ESVNDT05ORUNUOworCQlicmVhazsKKwljYXNlIE1EU19DT05ORUNUOgorCQlycV9vcGMgPSBNRFNfRElTQ09OTkVDVDsKKwkJYnJlYWs7CisJY2FzZSBNR1NfQ09OTkVDVDoKKwkJcnFfb3BjID0gTUdTX0RJU0NPTk5FQ1Q7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUNFUlJPUigiZG9uJ3Qga25vdyBob3cgdG8gZGlzY29ubmVjdCBmcm9tICVzIChjb25uZWN0X29wICVkKVxuIiwKLQkJICAgICAgIG9iZDJjbGlfdGd0KGltcC0+aW1wX29iZCksIGltcC0+aW1wX2Nvbm5lY3Rfb3ApOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmMgPSAtRUlOVkFMOworCQlDRVJST1IoIiVzOiBkb24ndCBrbm93IGhvdyB0byBkaXNjb25uZWN0IGZyb20gJXMgIgorCQkgICAgICAgIihjb25uZWN0X29wICVkKTogcmMgPSAlZFxuIiwKKwkJICAgICAgIGltcC0+aW1wX29iZC0+b2JkX25hbWUsIG9iZDJjbGlfdGd0KGltcC0+aW1wX29iZCksCisJCSAgICAgICBpbXAtPmltcF9jb25uZWN0X29wLCByYyk7CisJCXJldHVybiByYzsKIAl9CiAKIAlpZiAocHRscnBjX2ltcG9ydF9pbl9yZWNvdmVyeShpbXApKSB7CiAJCXN0cnVjdCBsX3dhaXRfaW5mbyBsd2k7CiAJCWNmc19kdXJhdGlvbl90IHRpbWVvdXQ7CiAKLQogCQlpZiAoQVRfT0ZGKSB7CiAJCQlpZiAoaW1wLT5pbXBfc2VydmVyX3RpbWVvdXQpCiAJCQkJdGltZW91dCA9IGNmc190aW1lX3NlY29uZHMob2JkX3RpbWVvdXQgLyAyKTsKQEAgLTE0NDEsNyArMTQ1Myw2IEBACiAJc3Bpbl9sb2NrKCZpbXAtPmltcF9sb2NrKTsKIAlpZiAoaW1wLT5pbXBfc3RhdGUgIT0gTFVTVFJFX0lNUF9GVUxMKQogCQlHT1RPKG91dCwgMCk7Ci0KIAlzcGluX3VubG9jaygmaW1wLT5pbXBfbG9jayk7CiAKIAlyZXEgPSBwdGxycGNfcmVxdWVzdF9hbGxvY19wYWNrKGltcCwgJlJRRl9NRFNfRElTQ09OTkVDVCwKQEAgLTE0NzQsNiArMTQ4NSw5IEBACiAJbWVtc2V0KCZpbXAtPmltcF9yZW1vdGVfaGFuZGxlLCAwLCBzaXplb2YoaW1wLT5pbXBfcmVtb3RlX2hhbmRsZSkpOwogCXNwaW5fdW5sb2NrKCZpbXAtPmltcF9sb2NrKTsKIAorCWlmIChyYyA9PSAtRVRJTUVET1VUIHx8IHJjID09IC1FTk9UQ09OTiB8fCByYyA9PSAtRVNIVVRET1dOKQorCQlyYyA9IDA7CisKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MKHB0bHJwY19kaXNjb25uZWN0X2ltcG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvbHByb2NfcHRscnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvbHByb2NfcHRscnBjLmMKaW5kZXggNThmMWM4Yi4uNmI5YzZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL2xwcm9jX3B0bHJwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9scHJvY19wdGxycGMuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiB7CiAJTEFTU0VSVChwb2xpY3kgIT0gTlVMTCk7CiAJTEFTU0VSVChpbmZvICE9IE5VTEwpOwotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBvbGljeS0+cG9sX25ycy0+bnJzX2xvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnBvbGljeS0+cG9sX25ycy0+bnJzX2xvY2spOwogCiAJbWVtY3B5KGluZm8tPnBpX25hbWUsIHBvbGljeS0+cG9sX2Rlc2MtPnBkX25hbWUsIE5SU19QT0xfTkFNRV9NQVgpOwogCkBAIC0xMTkwLDcgKzExOTAsNyBAQAogCSAqIHRoZSBwcm9jIGVudHJpZXMgdW5kZXIgdGhlIGJlaW5nIGRlc3Ryb3llZCBleHBvcnR7fSwgc28gSSBoYXZlCiAJICogdG8gZHJvcCB0aGUgbG9jayBhdCBmaXJzdCBoZXJlLgogCSAqIC0gamF5LCBqeGlvbmdAY2x1c3RlcmZzLmNvbSAqLwotCWNsYXNzX2luY3JlZihvYmQsIF9fRlVOQ1RJT05fXywgY3VycmVudCk7CisJY2xhc3NfaW5jcmVmKG9iZCwgX19mdW5jX18sIGN1cnJlbnQpOwogCiAJaWYgKHN0cm5jbXAodG1wYnVmLCAibmlkOiIsIDQpID09IDApCiAJCW9iZF9leHBvcnRfZXZpY3RfYnlfbmlkKG9iZCwgdG1wYnVmICsgNCk7CkBAIC0xMTk5LDcgKzExOTksNyBAQAogCWVsc2UKIAkJb2JkX2V4cG9ydF9ldmljdF9ieV91dWlkKG9iZCwgdG1wYnVmKTsKIAotCWNsYXNzX2RlY3JlZihvYmQsIF9fRlVOQ1RJT05fXywgY3VycmVudCk7CisJY2xhc3NfZGVjcmVmKG9iZCwgX19mdW5jX18sIGN1cnJlbnQpOwogCiBvdXQ6CiAJT0JEX0ZSRUUoa2J1ZiwgQlVGTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9ucnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9ucnMuYwppbmRleCBiY2JhMWM4ZS4uMTIxNTFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL25ycy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9ucnMuYwpAQCAtNzQ2LDcgKzc0Niw3IEBACiAJTEFTU0VSVChkZXNjLT5wZF9jb21wYXQgIT0gTlVMTCk7CiAKIAlPQkRfQ1BUX0FMTE9DX0dGUChwb2xpY3ksIHN2Y3B0LT5zY3Bfc2VydmljZS0+c3J2X2NwdGFibGUsCi0JCQkgIHN2Y3B0LT5zY3BfY3B0LCBzaXplb2YoKnBvbGljeSksIF9fR0ZQX0lPKTsKKwkJCSAgc3ZjcHQtPnNjcF9jcHQsIHNpemVvZigqcG9saWN5KSwgR0ZQX05PRlMpOwogCWlmIChwb2xpY3kgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9wYWNrX2dlbmVyaWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9wYWNrX2dlbmVyaWMuYwppbmRleCA0NWMwYjg0Li5jZGRlZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvcGFja19nZW5lcmljLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3BhY2tfZ2VuZXJpYy5jCkBAIC0zMDAsNiArMzAwLDcgQEAKIAlzcGluX3VubG9jaygmc3ZjcHQtPnNjcF9yZXBfbG9jayk7CiAKIAltZW1zZXQocnMsIDAsIHN2Y3B0LT5zY3Bfc2VydmljZS0+c3J2X21heF9yZXBseV9zaXplKTsKKwlycy0+cnNfc2l6ZSA9IHN2Y3B0LT5zY3Bfc2VydmljZS0+c3J2X21heF9yZXBseV9zaXplOwogCXJzLT5yc19zdmNwdCA9IHN2Y3B0OwogCXJzLT5yc19wcmVhbGxvYyA9IDE7CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvcGluZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvcGluZ2VyLmMKaW5kZXggNmRmZjUwMi4uMzgwOTlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3Bpbmdlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9waW5nZXIuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiB2b2lkIHB0bHJwY19waW5nZXJfY29tbWl0X2V4cGVjdGVkKHN0cnVjdCBvYmRfaW1wb3J0ICppbXApCiB7CiAJcHRscnBjX3VwZGF0ZV9uZXh0X3BpbmcoaW1wLCAxKTsKLQlMQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZpbXAtPmltcF9sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZpbXAtPmltcF9sb2NrKTsKIAkvKgogCSAqIEF2b2lkIHJlYWRpbmcgc3RhbGUgaW1wX2Nvbm5lY3RfZGF0YS4gIFdoZW4gbm90IHN1cmUgaWYgcGluZ3MgYXJlCiAJICogZXhwZWN0ZWQgb3Igbm90IG9uIG5leHQgY29ubmVjdGlvbiwgd2UgYXNzdW1lIHRoZXkgYXJlIG5vdCBhbmQgZm9yY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9wdGxycGNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9wdGxycGNfaW50ZXJuYWwuaAppbmRleCBlM2I1YTkyLi43Yzk0MDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvcHRscnBjX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3B0bHJwY19pbnRlcm5hbC5oCkBAIC01NSw2ICs1NSwxMCBAQAogLyogY2xpZW50LmMgKi8KIHN0cnVjdCBwdGxycGNfYnVsa19kZXNjICpwdGxycGNfbmV3X2J1bGsodW5zaWduZWQgbnBhZ2VzLCB1bnNpZ25lZCBtYXhfYnJ3LAogCQkJCQkgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgcG9ydGFsKTsKK2ludCBwdGxycGNfcmVxdWVzdF9jYWNoZV9pbml0KHZvaWQpOwordm9pZCBwdGxycGNfcmVxdWVzdF9jYWNoZV9maW5pKHZvaWQpOworc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpwdGxycGNfcmVxdWVzdF9jYWNoZV9hbGxvYyhpbnQgZmxhZ3MpOwordm9pZCBwdGxycGNfcmVxdWVzdF9jYWNoZV9mcmVlKHN0cnVjdCBwdGxycGNfcmVxdWVzdCAqcmVxKTsKIHZvaWQgcHRscnBjX2luaXRfeGlkKHZvaWQpOwogCiAvKiBldmVudHMuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3B0bHJwY19tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9wdGxycGNfbW9kdWxlLmMKaW5kZXggMGVmZDM1OC4uMjUxYWU3NWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvcHRscnBjX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9wdGxycGNfbW9kdWxlLmMKQEAgLTczLDI5ICs3MywzNCBAQAogCQlyZXR1cm4gcmM7CiAKIAljbGVhbnVwX3BoYXNlID0gMTsKKwlyYyA9IHB0bHJwY19yZXF1ZXN0X2NhY2hlX2luaXQoKTsKKwlpZiAocmMpCisJCUdPVE8oY2xlYW51cCwgcmMpOwogCisJY2xlYW51cF9waGFzZSA9IDI7CiAJcmMgPSBwdGxycGNfaW5pdF9wb3J0YWxzKCk7CiAJaWYgKHJjKQogCQlHT1RPKGNsZWFudXAsIHJjKTsKLQljbGVhbnVwX3BoYXNlID0gMjsKKworCWNsZWFudXBfcGhhc2UgPSAzOwogCiAJcmMgPSBwdGxycGNfY29ubmVjdGlvbl9pbml0KCk7CiAJaWYgKHJjKQogCQlHT1RPKGNsZWFudXAsIHJjKTsKLQljbGVhbnVwX3BoYXNlID0gMzsKIAorCWNsZWFudXBfcGhhc2UgPSA0OwogCXB0bHJwY19wdXRfY29ubmVjdGlvbl9zdXBlcmhhY2sgPSBwdGxycGNfY29ubmVjdGlvbl9wdXQ7CiAKIAlyYyA9IHB0bHJwY19zdGFydF9waW5nZXIoKTsKIAlpZiAocmMpCiAJCUdPVE8oY2xlYW51cCwgcmMpOwotCWNsZWFudXBfcGhhc2UgPSA0OwogCisJY2xlYW51cF9waGFzZSA9IDU7CiAJcmMgPSBsZGxtX2luaXQoKTsKIAlpZiAocmMpCiAJCUdPVE8oY2xlYW51cCwgcmMpOwotCWNsZWFudXBfcGhhc2UgPSA1OwogCisJY2xlYW51cF9waGFzZSA9IDY7CiAJcmMgPSBzcHRscnBjX2luaXQoKTsKIAlpZiAocmMpCiAJCUdPVE8oY2xlYW51cCwgcmMpOwpAQCAtMTE1LDE5ICsxMjAsMjkgQEAKIAlzd2l0Y2ggKGNsZWFudXBfcGhhc2UpIHsKIAljYXNlIDg6CiAJCXB0bHJwY19ucnNfZmluaSgpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIDc6CiAJCXNwdGxycGNfZmluaSgpOwotCWNhc2UgNToKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSA2OgogCQlsZGxtX2V4aXQoKTsKLQljYXNlIDQ6CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgNToKIAkJcHRscnBjX3N0b3BfcGluZ2VyKCk7Ci0JY2FzZSAzOgorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIDQ6CiAJCXB0bHJwY19jb25uZWN0aW9uX2ZpbmkoKTsKLQljYXNlIDI6CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgMzoKIAkJcHRscnBjX2V4aXRfcG9ydGFscygpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIDI6CisJCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZpbmkoKTsKKwkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSAxOgogCQlwdGxycGNfaHJfZmluaSgpOwogCQlyZXFfbGF5b3V0X2ZpbmkoKTsKKwkJLyogRmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDogOwogCX0KIApAQCAtMTQyLDYgKzE1Nyw3IEBACiAJbGRsbV9leGl0KCk7CiAJcHRscnBjX3N0b3BfcGluZ2VyKCk7CiAJcHRscnBjX2V4aXRfcG9ydGFscygpOworCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZpbmkoKTsKIAlwdGxycGNfaHJfZmluaSgpOwogCXB0bHJwY19jb25uZWN0aW9uX2ZpbmkoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9yZWNvdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvcmVjb3Zlci5jCmluZGV4IDQ4YWUzMjguLjljZWM4YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9yZWNvdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3JlY292ZXIuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPG9iZC5oPgogI2luY2x1ZGUgPG9iZF9vc3QuaD4KICNpbmNsdWRlIDxvYmRfY2xhc3MuaD4KLSNpbmNsdWRlIDxvYmRfbG92Lmg+IC8qIGZvciBJT0NfTE9WX1NFVF9PU0NfQUNUSVZFICovCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSAicHRscnBjX2ludGVybmFsLmgiCkBAIC0zNjksMTEgKzM2OCwxNCBAQAogaW50IHB0bHJwY19pbXBvcnRfaW5fcmVjb3Zlcnkoc3RydWN0IG9iZF9pbXBvcnQgKmltcCkKIHsKIAlpbnQgaW5fcmVjb3ZlcnkgPSAxOworCiAJc3Bpbl9sb2NrKCZpbXAtPmltcF9sb2NrKTsKIAlpZiAoaW1wLT5pbXBfc3RhdGUgPT0gTFVTVFJFX0lNUF9GVUxMIHx8CiAJICAgIGltcC0+aW1wX3N0YXRlID09IExVU1RSRV9JTVBfQ0xPU0VEIHx8Ci0JICAgIGltcC0+aW1wX3N0YXRlID09IExVU1RSRV9JTVBfRElTQ09OKQorCSAgICBpbXAtPmltcF9zdGF0ZSA9PSBMVVNUUkVfSU1QX0RJU0NPTiB8fAorCSAgICBpbXAtPmltcF9vYmQtPm9iZF9ub19yZWNvdikKIAkJaW5fcmVjb3ZlcnkgPSAwOwogCXNwaW5fdW5sb2NrKCZpbXAtPmltcF9sb2NrKTsKKwogCXJldHVybiBpbl9yZWNvdmVyeTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZWMuYwppbmRleCBkODA0MTgwNS4uMjhhYzgyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZWMuYwpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCXJldHVybiAwOwogCiAJQ0RFQlVHKERfU0VDLCAiZm91bmQgZGVsYXllZCBzZWMgYWRhcHQgZXhwaXJlZCwgZG8gaXQgbm93XG4iKTsKLQlyZXR1cm4gc3B0bHJwY19pbXBvcnRfc2VjX2FkYXB0KGltcCwgTlVMTCwgMCk7CisJcmV0dXJuIHNwdGxycGNfaW1wb3J0X3NlY19hZGFwdChpbXAsIE5VTEwsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IGltcG9ydF9zZWNfdmFsaWRhdGVfZ2V0KHN0cnVjdCBvYmRfaW1wb3J0ICppbXAsCkBAIC05MDQsNyArOTA0LDcgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JT0JEX0FMTE9DX1BUUihyZXEpOworCXJlcSA9IHB0bHJwY19yZXF1ZXN0X2NhY2hlX2FsbG9jKEdGUF9OT0ZTKTsKIAlpZiAoIXJlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTkyMCw3ICs5MjAsNyBAQAogCXJjID0gc3B0bHJwY19yZXFfcmVmcmVzaF9jdHgocmVxLCAwKTsKIAlMQVNTRVJUKGxpc3RfZW1wdHkoJnJlcS0+cnFfY3R4X2NoYWluKSk7CiAJc3B0bHJwY19jbGlfY3R4X3B1dChyZXEtPnJxX2NsaV9jdHgsIDEpOwotCU9CRF9GUkVFX1BUUihyZXEpOworCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZyZWUocmVxKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTEwODgsNyArMTA4OCw3IEBACiAJaW50CQkgICAgIGVhcmx5X2J1ZnN6LCBlYXJseV9zaXplOwogCWludAkJICAgICByYzsKIAotCU9CRF9BTExPQ19QVFIoZWFybHlfcmVxKTsKKwllYXJseV9yZXEgPSBwdGxycGNfcmVxdWVzdF9jYWNoZV9hbGxvYyhHRlBfTk9GUyk7CiAJaWYgKGVhcmx5X3JlcSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIGVycl9idWY6CiAJT0JEX0ZSRUVfTEFSR0UoZWFybHlfYnVmLCBlYXJseV9idWZzeik7CiBlcnJfcmVxOgotCU9CRF9GUkVFX1BUUihlYXJseV9yZXEpOworCXB0bHJwY19yZXF1ZXN0X2NhY2hlX2ZyZWUoZWFybHlfcmVxKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTExNzcsNyArMTE3Nyw3IEBACiAKIAlzcHRscnBjX2NsaV9jdHhfcHV0KGVhcmx5X3JlcS0+cnFfY2xpX2N0eCwgMSk7CiAJT0JEX0ZSRUVfTEFSR0UoZWFybHlfcmVxLT5ycV9yZXBidWYsIGVhcmx5X3JlcS0+cnFfcmVwYnVmX2xlbik7Ci0JT0JEX0ZSRUVfUFRSKGVhcmx5X3JlcSk7CisJcHRscnBjX3JlcXVlc3RfY2FjaGVfZnJlZShlYXJseV9yZXEpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIwODYsOCArMjA4NiwxOCBAQAogCiAJcmMgPSBwb2xpY3ktPnNwX3NvcHMtPmFsbG9jX3JzKHJlcSwgbXNnbGVuKTsKIAlpZiAodW5saWtlbHkocmMgPT0gLUVOT01FTSkpIHsKKwkJc3RydWN0IHB0bHJwY19zZXJ2aWNlX3BhcnQgKnN2Y3B0ID0gcmVxLT5ycV9ycWJkLT5ycWJkX3N2Y3B0OworCQlpZiAoc3ZjcHQtPnNjcF9zZXJ2aWNlLT5zcnZfbWF4X3JlcGx5X3NpemUgPAorCQkgICBtc2dsZW4gKyBzaXplb2Yoc3RydWN0IHB0bHJwY19yZXBseV9zdGF0ZSkpIHsKKwkJCS8qIEp1c3QgcmV0dXJuIGZhaWx1cmUgaWYgdGhlIHNpemUgaXMgdG9vIGJpZyAqLworCQkJQ0VSUk9SKCJzaXplIG9mIG1lc3NhZ2UgaXMgdG9vIGJpZyAoJXpkKSwgJWQgYWxsb3dlZCIsCisJCQkJbXNnbGVuICsgc2l6ZW9mKHN0cnVjdCBwdGxycGNfcmVwbHlfc3RhdGUpLAorCQkJCXN2Y3B0LT5zY3Bfc2VydmljZS0+c3J2X21heF9yZXBseV9zaXplKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKIAkJLyogZmFpbGVkIGFsbG9jLCB0cnkgZW1lcmdlbmN5IHBvb2wgKi8KLQkJcnMgPSBsdXN0cmVfZ2V0X2VtZXJnX3JzKHJlcS0+cnFfcnFiZC0+cnFiZF9zdmNwdCk7CisJCXJzID0gbHVzdHJlX2dldF9lbWVyZ19ycyhzdmNwdCk7CiAJCWlmIChycyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZWNfYnVsay5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlY19idWxrLmMKaW5kZXggOTY1NjY4MS4uOWQ1MWJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlY19idWxrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlY19idWxrLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCQkJZ290byBvdXRfcG9vbHM7CiAKIAkJZm9yIChqID0gMDsgaiA8IFBBR0VTX1BFUl9QT09MICYmIGFsbG9jZWQgPCBucGFnZXM7IGorKykgewotCQkJcG9vbHNbaV1bal0gPSBhbGxvY19wYWdlKF9fR0ZQX0lPIHwKKwkJCXBvb2xzW2ldW2pdID0gYWxsb2NfcGFnZShHRlBfTk9GUyB8CiAJCQkJCQkgICAgIF9fR0ZQX0hJR0hNRU0pOwogCQkJaWYgKHBvb2xzW2ldW2pdID09IE5VTEwpCiAJCQkJZ290byBvdXRfcG9vbHM7CkBAIC00NTAsNyArNDUwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGVuY19wb29sc193YWtldXAodm9pZCkKIHsKLQlMQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwYWdlX3Bvb2xzLmVwcF9sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZwYWdlX3Bvb2xzLmVwcF9sb2NrKTsKIAlMQVNTRVJUKHBhZ2VfcG9vbHMuZXBwX3dhaXRxbGVuID49IDApOwogCiAJaWYgKHVubGlrZWx5KHBhZ2VfcG9vbHMuZXBwX3dhaXRxbGVuKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlY19jb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZWNfY29uZmlnLmMKaW5kZXggYmY1NjEyMC4uMjMxNjU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlY19jb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvc2VjX2NvbmZpZy5jCkBAIC03NDUsMTEgKzc0NSwxMyBAQAogCW11dGV4X2xvY2soJnNwdGxycGNfY29uZl9sb2NrKTsKIAogCWNvbmYgPSBzcHRscnBjX2NvbmZfZ2V0KGZzbmFtZSwgMCk7Ci0JaWYgKGNvbmYgJiYgY29uZi0+c2NfbG9jYWwpIHsKLQkJTEFTU0VSVChjb25mLT5zY191cGRhdGVkID09IDApOwotCQlzcHRscnBjX2NvbmZfZnJlZV9yc2V0cyhjb25mKTsKKwlpZiAoY29uZikgeworCQlpZihjb25mLT5zY19sb2NhbCkgeworCQkJTEFTU0VSVChjb25mLT5zY191cGRhdGVkID09IDApOworCQkJc3B0bHJwY19jb25mX2ZyZWVfcnNldHMoY29uZik7CisJCX0KKwkJY29uZi0+c2NfbW9kaWZpZWQgPSAwOwogCX0KLQljb25mLT5zY19tb2RpZmllZCA9IDA7CiAKIAltdXRleF91bmxvY2soJnNwdGxycGNfY29uZl9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZXJ2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9wdGxycGMvc2VydmljZS5jCmluZGV4IDE5MmFkZWMuLmQyNzhmMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL3B0bHJwYy9zZXJ2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvcHRscnBjL3NlcnZpY2UuYwpAQCAtMzg0LDggKzM4NCw4IEBACiB2b2lkCiBwdGxycGNfc2NoZWR1bGVfZGlmZmljdWx0X3JlcGx5KHN0cnVjdCBwdGxycGNfcmVwbHlfc3RhdGUgKnJzKQogewotCUxBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnJzLT5yc19zdmNwdC0+c2NwX3JlcF9sb2NrKSk7Ci0JTEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcnMtPnJzX2xvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJzLT5yc19zdmNwdC0+c2NwX3JlcF9sb2NrKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJzLT5yc19sb2NrKTsKIAlMQVNTRVJUKHJzLT5yc19kaWZmaWN1bHQpOwogCXJzLT5yc19zY2hlZHVsZWRfZXZlciA9IDE7ICAvKiBmbGFnIGFueSBub3RpZmljYXRpb24gYXR0ZW1wdCAqLwogCkBAIC04NDIsNyArODQyLDcgQEAKIAkJLyogTkIgcmVxdWVzdCBidWZmZXJzIHVzZSBhbiBlbWJlZGRlZAogCQkgKiByZXEgaWYgdGhlIGluY29taW5nIHJlcSB1bmxpbmtlZCB0aGUKIAkJICogTUQ7IHRoaXMgaXNuJ3Qgb25lIG9mIHRoZW0hICovCi0JCU9CRF9GUkVFKHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwkJcHRscnBjX3JlcXVlc3RfY2FjaGVfZnJlZShyZXEpOwogCX0KIH0KIApAQCAtMTA0Miw5ICsxMDQyLDYgQEAKIAkJcmV0dXJuOwogCiAJZXhwLT5leHBfbGFzdF9yZXF1ZXN0X3RpbWUgPSBuZXdfdGltZTsKLQlDREVCVUcoRF9IQSwgInVwZGF0aW5nIGV4cG9ydCAlcyBhdCAiQ0ZTX1RJTUVfVCIgZXhwICVwXG4iLAotCSAgICAgICBleHAtPmV4cF9jbGllbnRfdXVpZC51dWlkLAotCSAgICAgICBleHAtPmV4cF9sYXN0X3JlcXVlc3RfdGltZSwgZXhwKTsKIAogCS8qIGV4cG9ydHMgbWF5IGdldCBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY2hhaW4gZXZlbiB0aG91Z2ggdGhlCiAJICAgZXhwb3J0IGhhcyByZWZlcmVuY2VzLCBzbyB3ZSBtdXN0IGtlZXAgdGhlIHNwaW4gbG9jayB3aGlsZQpAQCAtMTMwOCwxNCArMTMwNSwxMiBAQAogCX0KIAluZXdkbCA9IGNmc190aW1lX2N1cnJlbnRfc2VjKCkgKyBhdF9nZXQoJnN2Y3B0LT5zY3BfYXRfZXN0aW1hdGUpOwogCi0JT0JEX0FMTE9DKHJlcWNvcHksIHNpemVvZigqcmVxY29weSkpOworCXJlcWNvcHkgPSBwdGxycGNfcmVxdWVzdF9jYWNoZV9hbGxvYyhHRlBfTk9GUyk7CiAJaWYgKHJlcWNvcHkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJT0JEX0FMTE9DX0xBUkdFKHJlcW1zZywgcmVxLT5ycV9yZXFsZW4pOwotCWlmICghcmVxbXNnKSB7Ci0JCU9CRF9GUkVFKHJlcWNvcHksIHNpemVvZigqcmVxY29weSkpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFyZXFtc2cpCisJCUdPVE8ob3V0X2ZyZWUsIHJjID0gLUVOT01FTSk7CiAKIAkqcmVxY29weSA9ICpyZXE7CiAJcmVxY29weS0+cnFfcmVwbHlfc3RhdGUgPSBOVUxMOwpAQCAtMTM3Miw3ICsxMzY3LDggQEAKIG91dDoKIAlzcHRscnBjX3N2Y19jdHhfZGVjcmVmKHJlcWNvcHkpOwogCU9CRF9GUkVFX0xBUkdFKHJlcW1zZywgcmVxLT5ycV9yZXFsZW4pOwotCU9CRF9GUkVFKHJlcWNvcHksIHNpemVvZigqcmVxY29weSkpOworb3V0X2ZyZWU6CisJcHRscnBjX3JlcXVlc3RfY2FjaGVfZnJlZShyZXFjb3B5KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9iY20yMDQ4L3JhZGlvLWJjbTIwNDguYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9iY20yMDQ4L3JhZGlvLWJjbTIwNDguYwppbmRleCBiMmNkM2E4Li5iYmYyMzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYmNtMjA0OC9yYWRpby1iY20yMDQ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2JjbTIwNDgvcmFkaW8tYmNtMjA0OC5jCkBAIC03MzcsNyArNzM3LDcgQEAKIAlpbnQgZXJyOwogCXUzMiBuZXdfZnJlcXVlbmN5ID0gMDsKIAotCWlmIChyZWdpb24gPiBBUlJBWV9TSVpFKHJlZ2lvbl9jb25maWdzKSkKKwlpZiAocmVnaW9uID49IEFSUkFZX1NJWkUocmVnaW9uX2NvbmZpZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmJkZXYtPm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9nbzcwMDcvZ283MDA3LnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9nbzcwMDcvZ283MDA3LnR4dAppbmRleCBkYzAwMjZjLi5jOGU1ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvZ283MDA3L2dvNzAwNy50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2dvNzAwNy9nbzcwMDcudHh0CkBAIC03OSw3ICs3OSw2IEBACiBrZXJuZWwgYXMgYnVpbHQtaW4gb3IgbW9kdWxlczoKIAogCUNPTkZJR19NT0RVTEVTICAgICAgICAgICAtIEVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotCUNPTkZJR19LTU9EICAgICAgICAgICAgICAtIEF1dG9tYXRpYyBrZXJuZWwgbW9kdWxlIGxvYWRpbmcKIAlDT05GSUdfRldfTE9BREVSICAgICAgICAgLSBIb3RwbHVnIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydAogCUNPTkZJR19JMkMgICAgICAgICAgICAgICAtIEkyQyBzdXBwb3J0CiAJQ09ORklHX1ZJREVPX0RFViAgICAgICAgIC0gVmlkZW8gRm9yIExpbnV4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX2J0ODI5LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX2J0ODI5LmMKaW5kZXggMzBlZGM3NC4uZmUwMTA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19idDgyOS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfYnQ4MjkuYwpAQCAtNjQsNyArNjQsNyBAQAogCiBzdGF0aWMgaW50IGF0aXJfbWlub3I7CiBzdGF0aWMgcGh5c19hZGRyX3QgcGNpX2FkZHJfcGh5czsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpwY2lfYWRkcl9saW47CitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2lvbWVtICpwY2lfYWRkcl9saW47CiAKIHN0YXRpYyBzdHJ1Y3QgbGlyY19kcml2ZXIgYXRpcl9kcml2ZXI7CiAKQEAgLTM4Miw3ICszODIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlYWRfaW5kZXgodW5zaWduZWQgY2hhciBpbmRleCkKIHsKLQl1bnNpZ25lZCBjaGFyICphZGRyOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqYWRkcjsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAJLyogIGFkZHIgPSBwY2lfYWRkcl9saW4gKyBEQVRBX1BDSV9PRkYgKyAoKGluZGV4ICYgMHhGRikgPDwgMik7ICovCiAJYWRkciA9IHBjaV9hZGRyX2xpbiArICgoaW5kZXggJiAweEZGKSA8PCAyKTsKQEAgLTM5Miw3ICszOTIsNyBAQAogCiBzdGF0aWMgdm9pZCB3cml0ZV9pbmRleCh1bnNpZ25lZCBjaGFyIGluZGV4LCB1bnNpZ25lZCBpbnQgcmVnX3ZhbCkKIHsKLQl1bnNpZ25lZCBjaGFyICphZGRyOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqYWRkcjsKIAlhZGRyID0gcGNpX2FkZHJfbGluICsgKChpbmRleCAmIDB4RkYpIDw8IDIpOwogCXdyaXRlbChyZWdfdmFsLCBhZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfaWdvcnBsdWd1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfaWdvcnBsdWd1c2IuYwppbmRleCBmNTA4YTEzLi40NGIwZDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX2lnb3JwbHVndXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19pZ29ycGx1Z3VzYi5jCkBAIC02MCwxOSArNjAsNiBAQAogI2RlZmluZSBEUklWRVJfREVTQwkJIklnb3JwbHVnIFVTQiByZW1vdGUgZHJpdmVyIGZvciBMSVJDIgogI2RlZmluZSBEUklWRVJfTkFNRQkJImxpcmNfaWdvcnBsdWd1c2IiCiAKLS8qIGRlYnVnZ2luZyBzdXBwb3J0ICovCi0jaWZkZWYgQ09ORklHX1VTQl9ERUJVRwotc3RhdGljIGJvb2wgZGVidWcgPSB0cnVlOwotI2Vsc2UKLXN0YXRpYyBib29sIGRlYnVnOwotI2VuZGlmCi0KLSNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmIChkZWJ1ZykJCQkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7CVwKLQl9IHdoaWxlICgwKQotCiAvKiBPbmUgbW9kZTIgcHVsc2Uvc3BhY2UgaGFzIDQgYnl0ZXMuICovCiAjZGVmaW5lIENPREVfTEVOR1RICSAgICAgc2l6ZW9mKGludCkKIApAQCAtMjM3LDcgKzIyNCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRwcmludGsoRFJJVkVSX05BTUUgIlslZF06IGNhbGxpbmcgbGlyY191bnJlZ2lzdGVyX2RyaXZlclxuIiwgZGV2bnVtKTsKKwlkZXZfZGJnKCZpci0+dXNiZGV2LT5kZXYsICJjYWxsaW5nIGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXJcbiIpOwogCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoZC0+bWlub3IpOwogCiAJcmV0dXJuIGRldm51bTsKQEAgLTI1Miw3ICsyMzksNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlkcHJpbnRrKERSSVZFUl9OQU1FICJbJWRdOiBzZXQgdXNlIGluY1xuIiwgaXItPmRldm51bSk7CisJZGV2X2RiZygmaXItPnVzYmRldi0+ZGV2LCAic2V0IHVzZSBpbmNcbiIpOwogCiAJaWYgKCFpci0+dXNiZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTI2OSw3ICsyNTYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZHByaW50ayhEUklWRVJfTkFNRSAiWyVkXTogc2V0IHVzZSBkZWNcbiIsIGlyLT5kZXZudW0pOworCWRldl9kYmcoJmlyLT51c2JkZXYtPmRldiwgInNldCB1c2UgZGVjXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudChzdHJ1Y3QgaWdvcnBsdWcgKmlyLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZiwKQEAgLTMyMSw3ICszMDgsNyBAQAogCQlpZiAocmV0IDwgREVWSUNFX0hFQURFUkxFTikKIAkJCXJldHVybiAtRU5PREFUQTsKIAotCQlkcHJpbnRrKERSSVZFUl9OQU1FICI6IEdvdCAlZCBieXRlcy4gSGVhZGVyOiAlKnBoXG4iLAorCQlkZXZfZGJnKCZpci0+dXNiZGV2LT5kZXYsICJHb3QgJWQgYnl0ZXMuIEhlYWRlcjogJSpwaFxuIiwKIAkJCXJldCwgMywgaXItPmJ1Zl9pbik7CiAKIAkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwpAQCAtMzg1LDcgKzM3Miw3IEBACiAJY2hhciBidWZbNjNdLCBuYW1lWzEyOF0gPSAiIjsKIAlpbnQgcmV0OwogCi0JZHByaW50ayhEUklWRVJfTkFNRSAiOiB1c2IgcHJvYmUgY2FsbGVkLlxuIik7CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXM6IHVzYiBwcm9iZSBjYWxsZWQuXG4iLCBfX2Z1bmNfXyk7CiAKIAlkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCkBAIC00MDUsOCArMzkyLDggQEAKIAlkZXZudW0gPSBkZXYtPmRldm51bTsKIAltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKIAotCWRwcmludGsoRFJJVkVSX05BTUUgIlslZF06IGJ5dGVzX2luX2tleT0lenUgbWF4cD0lZFxuIiwKLQkJZGV2bnVtLCBDT0RFX0xFTkdUSCwgbWF4cCk7CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXM6IGJ5dGVzX2luX2tleT0lenUgbWF4cD0lZFxuIiwKKwkJX19mdW5jX18sIENPREVfTEVOR1RILCBtYXhwKTsKIAogCWlyID0gZGV2bV9remFsbG9jKCZpbnRmLT5kZXYsIHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlyKQpAQCAtNTI1LDYgKzUxMiwzIEBACiAKIG1vZHVsZV9wYXJhbShzYW1wbGVfcmF0ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHNhbXBsZV9yYXRlLCAiU2FtcGxpbmcgcmF0ZSBpbiBIeiAoZGVmYXVsdDogMTAwKSIpOwotCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19wYXJhbGxlbC5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19wYXJhbGxlbC5jCmluZGV4IDYyZjUxMzcuLjEzOTRmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfcGFyYWxsZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX3BhcmFsbGVsLmMKQEAgLTMyNCw3ICszMjQsOCBAQAogCXJldHVybiAtRVNQSVBFOwogfQogCi1zdGF0aWMgc3NpemVfdCBsaXJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyICpidWYsIHNpemVfdCBuLCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBsaXJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbiwKKwkJCSBsb2ZmX3QgKnBwb3MpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGNvdW50ID0gMDsKQEAgLTM2Miw3ICszNjMsNyBAQAogCXJldHVybiBjb3VudCA/IGNvdW50IDogcmVzdWx0OwogfQogCi1zdGF0aWMgc3NpemVfdCBsaXJjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbiwKK3N0YXRpYyBzc2l6ZV90IGxpcmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbiwKIAkJCSAgbG9mZl90ICpwcG9zKQogewogCWludCBjb3VudDsKQEAgLTQ2Myw0MyArNDY0LDQ0IEBACiBzdGF0aWMgbG9uZyBsaXJjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHJlc3VsdDsKLQlfX3UzMiBmZWF0dXJlcyA9IExJUkNfQ0FOX1NFVF9UUkFOU01JVFRFUl9NQVNLIHwKLQkJCSBMSVJDX0NBTl9TRU5EX1BVTFNFIHwgTElSQ19DQU5fUkVDX01PREUyOwotCV9fdTMyIG1vZGU7Ci0JX191MzIgdmFsdWU7CisJdTMyIF9fdXNlciAqdXB0ciA9ICh1MzIgX191c2VyICopYXJnOworCXUzMiBmZWF0dXJlcyA9IExJUkNfQ0FOX1NFVF9UUkFOU01JVFRFUl9NQVNLIHwKKwkJICAgICAgIExJUkNfQ0FOX1NFTkRfUFVMU0UgfCBMSVJDX0NBTl9SRUNfTU9ERTI7CisJdTMyIG1vZGU7CisJdTMyIHZhbHVlOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIExJUkNfR0VUX0ZFQVRVUkVTOgotCQlyZXN1bHQgPSBwdXRfdXNlcihmZWF0dXJlcywgKF9fdTMyICopIGFyZyk7CisJCXJlc3VsdCA9IHB1dF91c2VyKGZlYXR1cmVzLCB1cHRyKTsKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAJCWJyZWFrOwogCWNhc2UgTElSQ19HRVRfU0VORF9NT0RFOgotCQlyZXN1bHQgPSBwdXRfdXNlcihMSVJDX01PREVfUFVMU0UsIChfX3UzMiAqKSBhcmcpOworCQlyZXN1bHQgPSBwdXRfdXNlcihMSVJDX01PREVfUFVMU0UsIHVwdHIpOwogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJYnJlYWs7CiAJY2FzZSBMSVJDX0dFVF9SRUNfTU9ERToKLQkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19NT0RFX01PREUyLCAoX191MzIgKikgYXJnKTsKKwkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19NT0RFX01PREUyLCB1cHRyKTsKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAJCWJyZWFrOwogCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgotCQlyZXN1bHQgPSBnZXRfdXNlcihtb2RlLCAoX191MzIgKikgYXJnKTsKKwkJcmVzdWx0ID0gZ2V0X3VzZXIobW9kZSwgdXB0cik7CiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQlpZiAobW9kZSAhPSBMSVJDX01PREVfUFVMU0UpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJY2FzZSBMSVJDX1NFVF9SRUNfTU9ERToKLQkJcmVzdWx0ID0gZ2V0X3VzZXIobW9kZSwgKF9fdTMyICopIGFyZyk7CisJCXJlc3VsdCA9IGdldF91c2VyKG1vZGUsIHVwdHIpOwogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKG1vZGUgIT0gTElSQ19NT0RFX01PREUyKQogCQkJcmV0dXJuIC1FTk9TWVM7CiAJCWJyZWFrOwogCWNhc2UgTElSQ19TRVRfVFJBTlNNSVRURVJfTUFTSzoKLQkJcmVzdWx0ID0gZ2V0X3VzZXIodmFsdWUsIChfX3UzMiAqKSBhcmcpOworCQlyZXN1bHQgPSBnZXRfdXNlcih2YWx1ZSwgdXB0cik7CiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQlpZiAoKHZhbHVlICYgTElSQ19QQVJBTExFTF9UUkFOU01JVFRFUl9NQVNLKSAhPSB2YWx1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfc2VyaWFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX3NlcmlhbC5jCmluZGV4IDEwYzY4NWQuLmVmZTU2MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19zZXJpYWwuYwpAQCAtNzMsOSArNzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2VuZGlmCiAvKiBGcm9tIEludGVsIElYUDQyWCBEZXZlbG9wZXIncyBNYW51YWwgKCMyNTI0ODAtMDA1KTogKi8KIC8qIGZ0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9tYW51YWxzLzI1MjQ4MDA1LnBkZiAqLwogI2RlZmluZSBVQVJUX0lFX0lYUDQyWF9VVUUgICAweDQwIC8qIElYUDQyWCBVQVJUIFVuaXQgZW5hYmxlICovCkBAIC0xOTgsMzMgKzE5NSw2IEBACiAJCS5mZWF0dXJlcyAgICA9IExJUkNfQ0FOX1JFQ19NT0RFMgogI2VuZGlmCiAJfSwKLQotI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgotCS8qCi0JICogTW9kaWZpZWQgTGlua3N5cyBOZXR3b3JrIFN0b3JhZ2UgTGluayBVU0IgMi4wIChOU0xVMik6Ci0JICogV2UgcmVjZWl2ZSBvbiBDVFMgb2YgdGhlIDJuZCBzZXJpYWwgcG9ydCAoUjE0MixMSFMpLCB3ZQotCSAqIHRyYW5zbWl0IHdpdGggYSBJUiBkaW9kZSBiZXR3ZWVuIEdQSU9bMV0gKGdyZWVuIHN0YXR1cyBMRUQpLAotCSAqIGFuZCBncm91bmQgKE1hdHRoaWFzIEdvZWJsIDxtYXR0aGlhcy5nb2VibEBnb2VibC5uZXQ+KS4KLQkgKiBTZWUgYWxzbyBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZyBmb3IgdGhpcyBkZXZpY2UKLQkgKi8KLQlbTElSQ19OU0xVMl0gPSB7Ci0JCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaGFyZHdhcmVbTElSQ19OU0xVMl0ubG9jayksCi0JCS5zaWduYWxfcGluICAgICAgICA9IFVBUlRfTVNSX0NUUywKLQkJLnNpZ25hbF9waW5fY2hhbmdlID0gVUFSVF9NU1JfRENUUywKLQkJLm9uICA9IChVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9PVVQyIHwgVUFSVF9NQ1JfRFRSKSwKLQkJLm9mZiA9IChVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9PVVQyKSwKLQkJLnNlbmRfcHVsc2UgPSBzZW5kX3B1bHNlX2hvbWVicmV3LAotCQkuc2VuZF9zcGFjZSA9IHNlbmRfc3BhY2VfaG9tZWJyZXcsCi0jaWZkZWYgQ09ORklHX0xJUkNfU0VSSUFMX1RSQU5TTUlUVEVSCi0JCS5mZWF0dXJlcyAgICA9IChMSVJDX0NBTl9TRVRfU0VORF9EVVRZX0NZQ0xFIHwKLQkJCQlMSVJDX0NBTl9TRVRfU0VORF9DQVJSSUVSIHwKLQkJCQlMSVJDX0NBTl9TRU5EX1BVTFNFIHwgTElSQ19DQU5fUkVDX01PREUyKQotI2Vsc2UKLQkJLmZlYXR1cmVzICAgID0gTElSQ19DQU5fUkVDX01PREUyCi0jZW5kaWYKLQl9LAotI2VuZGlmCi0KIH07CiAKICNkZWZpbmUgUlNfSVNSX1BBU1NfTElNSVQgMjU2CkBAIC0zMTUsMTYgKzI4NSw2IEBACiAKIHN0YXRpYyB2b2lkIG9uKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0xJUkNfU0VSSUFMX05TTFUyCi0JLyoKLQkgKiBPbiBOU0xVMiwgd2UgcHV0IHRoZSB0cmFuc21pdCBkaW9kZSBiZXR3ZWVuIHRoZSBvdXRwdXQgb2YgdGhlIGdyZWVuCi0JICogc3RhdHVzIExFRCBhbmQgZ3JvdW5kCi0JICovCi0JaWYgKHR5cGUgPT0gTElSQ19OU0xVMikgewotCQlncGlvX3NldF92YWx1ZShOU0xVMl9MRURfR1JOLCAwKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgogCWlmICh0eHNlbnNlKQogCQlzb3V0cChVQVJUX01DUiwgaGFyZHdhcmVbdHlwZV0ub2ZmKTsKIAllbHNlCkBAIC0zMzMsMTIgKzI5Myw2IEBACiAKIHN0YXRpYyB2b2lkIG9mZih2b2lkKQogewotI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgotCWlmICh0eXBlID09IExJUkNfTlNMVTIpIHsKLQkJZ3Bpb19zZXRfdmFsdWUoTlNMVTJfTEVEX0dSTiwgMSk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKIAlpZiAodHhzZW5zZSkKIAkJc291dHAoVUFSVF9NQ1IsIGhhcmR3YXJlW3R5cGVdLm9uKTsKIAllbHNlCkBAIC03OTMsMjAgKzc0Nyw2IEBACiAJc2lucChVQVJUX0lJUik7CiAJc2lucChVQVJUX01TUik7CiAKLSNpZmRlZiBDT05GSUdfTElSQ19TRVJJQUxfTlNMVTIKLQlpZiAodHlwZSA9PSBMSVJDX05TTFUyKSB7Ci0JCS8qIFNldHVwIE5TTFUyIFVBUlQgKi8KLQotCQkvKiBFbmFibGUgVUFSVCAqLwotCQlzb3V0cChVQVJUX0lFUiwgc2lucChVQVJUX0lFUikgfCBVQVJUX0lFX0lYUDQyWF9VVUUpOwotCQkvKiBEaXNhYmxlIFJlY2VpdmVyIGRhdGEgVGltZSBvdXQgaW50ZXJydXB0ICovCi0JCXNvdXRwKFVBUlRfSUVSLCBzaW5wKFVBUlRfSUVSKSAmIH5VQVJUX0lFX0lYUDQyWF9SVE9JRSk7Ci0JCS8qIHNldCBvdXQyID0gaW50ZXJydXB0IHVubWFzazsgb2ZmKCkgZG9lc24ndCBzZXQgTUNSCi0JCSAgIG9uIE5TTFUyICovCi0JCXNvdXRwKFVBUlRfTUNSLCBVQVJUX01DUl9SVFN8VUFSVF9NQ1JfT1VUMik7Ci0JfQotI2VuZGlmCi0KIAkvKiBTZXQgbGluZSBmb3IgcG93ZXIgc291cmNlICovCiAJb2ZmKCk7CiAKQEAgLTg0MiwxNiArNzgyLDYgQEAKIHsKIAlpbnQgaSwgbmxvdywgbmhpZ2gsIHJlc3VsdDsKIAotI2lmZGVmIENPTkZJR19MSVJDX1NFUklBTF9OU0xVMgotCS8qIFRoaXMgR1BJTyBpcyB1c2VkIGZvciBhIExFRCBvbiB0aGUgTlNMVTIgKi8KLQlyZXN1bHQgPSBkZXZtX2dwaW9fcmVxdWVzdChkZXYsIE5TTFUyX0xFRF9HUk4sICJsaXJjLXNlcmlhbCIpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0JcmVzdWx0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5TTFUyX0xFRF9HUk4sIDApOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0jZW5kaWYKLQogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKGlycSwgbGlyY19pcnFfaGFuZGxlciwKIAkJCSAgICAgKHNoYXJlX2lycSA/IElSUUZfU0hBUkVEIDogMCksCiAJCQkgICAgIExJUkNfRFJJVkVSX05BTUUsICh2b2lkICopJmhhcmR3YXJlKTsKQEAgLTEwMTEsNyArOTQxLDggQEAKIHN0YXRpYyBsb25nIGxpcmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmVzdWx0OwotCV9fdTMyIHZhbHVlOworCXUzMiBfX3VzZXIgKnVwdHIgPSAodTMyIF9fdXNlciAqKWFyZzsKKwl1MzIgdmFsdWU7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTElSQ19HRVRfU0VORF9NT0RFOgpAQCAtMTAyMCw3ICs5NTEsNyBAQAogCiAJCXJlc3VsdCA9IHB1dF91c2VyKExJUkNfU0VORDJNT0RFCiAJCQkJICAoaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMmTElSQ19DQU5fU0VORF9NQVNLKSwKLQkJCQkgIChfX3UzMiAqKSBhcmcpOworCQkJCSAgdXB0cik7CiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQlicmVhazsKQEAgLTEwMjksNyArOTYwLDcgQEAKIAkJaWYgKCEoaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMmTElSQ19DQU5fU0VORF9NQVNLKSkKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAKLQkJcmVzdWx0ID0gZ2V0X3VzZXIodmFsdWUsIChfX3UzMiAqKSBhcmcpOworCQlyZXN1bHQgPSBnZXRfdXNlcih2YWx1ZSwgdXB0cik7CiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQkvKiBvbmx5IExJUkNfTU9ERV9QVUxTRSBzdXBwb3J0ZWQgKi8KQEAgLTEwNDYsNyArOTc3LDcgQEAKIAkJaWYgKCEoaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMmTElSQ19DQU5fU0VUX1NFTkRfRFVUWV9DWUNMRSkpCiAJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCi0JCXJlc3VsdCA9IGdldF91c2VyKHZhbHVlLCAoX191MzIgKikgYXJnKTsKKwkJcmVzdWx0ID0gZ2V0X3VzZXIodmFsdWUsIHVwdHIpOwogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKHZhbHVlIDw9IDAgfHwgdmFsdWUgPiAxMDApCkBAIC0xMDU5LDcgKzk5MCw3IEBACiAJCWlmICghKGhhcmR3YXJlW3R5cGVdLmZlYXR1cmVzJkxJUkNfQ0FOX1NFVF9TRU5EX0NBUlJJRVIpKQogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAotCQlyZXN1bHQgPSBnZXRfdXNlcih2YWx1ZSwgKF9fdTMyICopIGFyZyk7CisJCXJlc3VsdCA9IGdldF91c2VyKHZhbHVlLCB1cHRyKTsKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAJCWlmICh2YWx1ZSA+IDUwMDAwMCB8fCB2YWx1ZSA8IDIwMDAwKQpAQCAtMTIxNiwxNCArMTE0Nyw2IEBACiAJCWlvID0gaW8gPyBpbyA6IDB4M2Y4OwogCQlpcnEgPSBpcnEgPyBpcnEgOiA0OwogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfTElSQ19TRVJJQUxfTlNMVTIKLQljYXNlIExJUkNfTlNMVTI6Ci0JCWlvID0gaW8gPyBpbyA6IElSUV9JWFA0WFhfVUFSVDI7Ci0JCWlycSA9IGlycSA/IGlycSA6IChJWFA0WFhfVUFSVDJfQkFTRV9WSVJUICsgUkVHX09GRlNFVCk7Ci0JCWlvbW1hcCA9IGlvbW1hcCA/IGlvbW1hcCA6IElYUDRYWF9VQVJUMl9CQVNFX1BIWVM7Ci0JCWlvc2hpZnQgPSBpb3NoaWZ0ID8gaW9zaGlmdCA6IDI7Ci0JCWJyZWFrOwotI2VuZGlmCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTIzMSw5ICsxMTU0LDYgQEAKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgTElSQ19IT01FQlJFVzoKIAkJY2FzZSBMSVJDX0lHT1I6Ci0jaWZkZWYgQ09ORklHX0xJUkNfU0VSSUFMX05TTFUyCi0JCWNhc2UgTElSQ19OU0xVMjoKLSNlbmRpZgogCQkJaGFyZHdhcmVbdHlwZV0uZmVhdHVyZXMgJj0KIAkJCQl+KExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEV8CiAJCQkJICBMSVJDX0NBTl9TRVRfU0VORF9DQVJSSUVSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfc2lyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX3Npci5jCmluZGV4IGY3ODFjNTMuLmUzMWNiYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfc2lyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19zaXIuYwpAQCAtMTg3LDEwICsxODcsMTAgQEAKIAogLyogQ29tbXVuaWNhdGlvbiB3aXRoIHVzZXItc3BhY2UgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGlyY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKLXN0YXRpYyBzc2l6ZV90IGxpcmNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCWxvZmZfdCAqcHBvcyk7Ci1zdGF0aWMgc3NpemVfdCBsaXJjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuLAotCQlsb2ZmX3QgKnBvcyk7CitzdGF0aWMgc3NpemVfdCBsaXJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSBsb2ZmX3QgKnBwb3MpOworc3RhdGljIHNzaXplX3QgbGlyY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG4sCisJCQkgIGxvZmZfdCAqcG9zKTsKIHN0YXRpYyBsb25nIGxpcmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBhZGRfcmVhZF9xdWV1ZShpbnQgZmxhZywgdW5zaWduZWQgbG9uZyB2YWwpOwogc3RhdGljIGludCBpbml0X2NocmRldih2b2lkKTsKQEAgLTI1Miw4ICsyNTIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBsaXJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQlsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBsaXJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSBsb2ZmX3QgKnBwb3MpCiB7CiAJaW50IG4gPSAwOwogCWludCByZXR2YWwgPSAwOwpAQCAtMjY2LDkgKzI2Niw5IEBACiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAobiA8IGNvdW50KSB7CiAJCWlmIChyeF9oZWFkICE9IHJ4X3RhaWwpIHsKLQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYnVmICsgbiwKLQkJCQkJKHZvaWQgKikgKHJ4X2J1ZiArIHJ4X2hlYWQpLAotCQkJCQlzaXplb2YoaW50KSkpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgbiwKKwkJCQkJIHJ4X2J1ZiArIHJ4X2hlYWQsCisJCQkJCSBzaXplb2YoaW50KSkpIHsKIAkJCQlyZXR2YWwgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjkxLDggKzI5MSw4IEBACiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZXR1cm4gbiA/IG4gOiByZXR2YWw7CiB9Ci1zdGF0aWMgc3NpemVfdCBsaXJjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuLAotCQkJCWxvZmZfdCAqcG9zKQorc3RhdGljIHNzaXplX3QgbGlyY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG4sCisJCQkgIGxvZmZfdCAqcG9zKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGNvdW50OwpAQCAtMzM4LDggKzMzOCw5IEBACiAKIHN0YXRpYyBsb25nIGxpcmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwl1MzIgX191c2VyICp1cHRyID0gKHUzMiBfX3VzZXIgKilhcmc7CiAJaW50IHJldHZhbCA9IDA7Ci0JX191MzIgdmFsdWUgPSAwOworCXUzMiB2YWx1ZSA9IDA7CiAjaWZkZWYgTElSQ19PTl9TQTExMDAKIAogCWlmIChjbWQgPT0gTElSQ19HRVRfRkVBVFVSRVMpCkBAIC0zNjQsMTYgKzM2NSwxNiBAQAogCWNhc2UgTElSQ19HRVRfRkVBVFVSRVM6CiAJY2FzZSBMSVJDX0dFVF9TRU5EX01PREU6CiAJY2FzZSBMSVJDX0dFVF9SRUNfTU9ERToKLQkJcmV0dmFsID0gcHV0X3VzZXIodmFsdWUsIChfX3UzMiAqKSBhcmcpOworCQlyZXR2YWwgPSBwdXRfdXNlcih2YWx1ZSwgdXB0cik7CiAJCWJyZWFrOwogCiAJY2FzZSBMSVJDX1NFVF9TRU5EX01PREU6CiAJY2FzZSBMSVJDX1NFVF9SRUNfTU9ERToKLQkJcmV0dmFsID0gZ2V0X3VzZXIodmFsdWUsIChfX3UzMiAqKSBhcmcpOworCQlyZXR2YWwgPSBnZXRfdXNlcih2YWx1ZSwgdXB0cik7CiAJCWJyZWFrOwogI2lmZGVmIExJUkNfT05fU0ExMTAwCiAJY2FzZSBMSVJDX1NFVF9TRU5EX0RVVFlfQ1lDTEU6Ci0JCXJldHZhbCA9IGdldF91c2VyKHZhbHVlLCAoX191MzIgKikgYXJnKTsKKwkJcmV0dmFsID0gZ2V0X3VzZXIodmFsdWUsIHVwdHIpOwogCQlpZiAocmV0dmFsKQogCQkJcmV0dXJuIHJldHZhbDsKIAkJaWYgKHZhbHVlIDw9IDAgfHwgdmFsdWUgPiAxMDApCkBAIC0zODgsNyArMzg5LDcgQEAKIAkJCXNwYWNlX3dpZHRoIC09IExJUkNfT05fU0ExMTAwX1RSQU5TTUlUVEVSX0xBVEVOQ1k7CiAJCWJyZWFrOwogCWNhc2UgTElSQ19TRVRfU0VORF9DQVJSSUVSOgotCQlyZXR2YWwgPSBnZXRfdXNlcih2YWx1ZSwgKF9fdTMyICopIGFyZyk7CisJCXJldHZhbCA9IGdldF91c2VyKHZhbHVlLCB1cHRyKTsKIAkJaWYgKHJldHZhbCkKIAkJCXJldHVybiByZXR2YWw7CiAJCWlmICh2YWx1ZSA+IDUwMDAwMCB8fCB2YWx1ZSA8IDIwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY196aWxvZy5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY196aWxvZy5jCmluZGV4IGUxZmViNjEuLjMyNTlhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfemlsb2cuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX3ppbG9nLmMKQEAgLTg5Miw3ICs4OTIsOCBAQAogfQogCiAvKiBjb3BpZWQgZnJvbSBsaXJjX2RldiAqLwotc3RhdGljIHNzaXplX3QgcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNoYXIgKm91dGJ1Ziwgc2l6ZV90IG4sIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHJlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyIF9fdXNlciAqb3V0YnVmLCBzaXplX3QgbiwKKwkJICAgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgSVIgKmlyID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgSVJfcnggKnJ4OwpAQCAtOTU0LDcgKzk1NSw3IEBACiAJCQl9CiAJCQltID0gbGlyY19idWZmZXJfcmVhZChyYnVmLCBidWYpOwogCQkJaWYgKG0gPT0gcmJ1Zi0+Y2h1bmtfc2l6ZSkgewotCQkJCXJldCA9IGNvcHlfdG9fdXNlcigodm9pZCAqKW91dGJ1Zit3cml0dGVuLCBidWYsCisJCQkJcmV0ID0gY29weV90b191c2VyKG91dGJ1ZiArIHdyaXR0ZW4sIGJ1ZiwKIAkJCQkJCSAgIHJidWYtPmNodW5rX3NpemUpOwogCQkJCXdyaXR0ZW4gKz0gcmJ1Zi0+Y2h1bmtfc2l6ZTsKIAkJCX0gZWxzZSB7CkBAIC0xMDk0LDggKzEwOTUsOCBAQAogICogc2VudCB0byB0aGUgZGV2aWNlLiAgV2UgaGF2ZSBhIHNwaW4gbG9jayBhcyBwZXIgaTJjIGRvY3VtZW50YXRpb24gdG8gcHJldmVudAogICogbXVsdGlwbGUgY29uY3VycmVudCBzZW5kcyB3aGljaCB3b3VsZCBwcm9iYWJseSBjYXVzZSB0aGUgZGV2aWNlIHRvIGV4cGxvZGUuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHdyaXRlKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbiwKLQkJCSAgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3Qgd3JpdGUoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbiwKKwkJICAgICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IElSICppciA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IElSX3R4ICp0eDsKQEAgLTEyMzcsNiArMTIzOCw3IEBACiBzdGF0aWMgbG9uZyBpb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBJUiAqaXIgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgX191c2VyICp1cHRyID0gKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnOwogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgbG9uZyBtb2RlLCBmZWF0dXJlczsKIApAQCAtMTI0NCwxMSArMTI0NiwxMCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIExJUkNfR0VUX0xFTkdUSDoKLQkJcmVzdWx0ID0gcHV0X3VzZXIoKHVuc2lnbmVkIGxvbmcpMTMsCi0JCQkJICAodW5zaWduZWQgbG9uZyAqKWFyZyk7CisJCXJlc3VsdCA9IHB1dF91c2VyKDEzVUwsIHVwdHIpOwogCQlicmVhazsKIAljYXNlIExJUkNfR0VUX0ZFQVRVUkVTOgotCQlyZXN1bHQgPSBwdXRfdXNlcihmZWF0dXJlcywgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJcmVzdWx0ID0gcHV0X3VzZXIoZmVhdHVyZXMsIHVwdHIpOwogCQlicmVhazsKIAljYXNlIExJUkNfR0VUX1JFQ19NT0RFOgogCQlpZiAoIShmZWF0dXJlcyZMSVJDX0NBTl9SRUNfTUFTSykpCkBAIC0xMjU2LDEzICsxMjU3LDEzIEBACiAKIAkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19SRUMyTU9ERQogCQkJCSAgKGZlYXR1cmVzJkxJUkNfQ0FOX1JFQ19NQVNLKSwKLQkJCQkgICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwkJCQkgIHVwdHIpOwogCQlicmVhazsKIAljYXNlIExJUkNfU0VUX1JFQ19NT0RFOgogCQlpZiAoIShmZWF0dXJlcyZMSVJDX0NBTl9SRUNfTUFTSykpCiAJCQlyZXR1cm4gLUVOT1NZUzsKIAotCQlyZXN1bHQgPSBnZXRfdXNlcihtb2RlLCAodW5zaWduZWQgbG9uZyAqKWFyZyk7CisJCXJlc3VsdCA9IGdldF91c2VyKG1vZGUsIHVwdHIpOwogCQlpZiAoIXJlc3VsdCAmJiAhKExJUkNfTU9ERTJSRUMobW9kZSkgJiBmZWF0dXJlcykpCiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTEyNzAsMTMgKzEyNzEsMTMgQEAKIAkJaWYgKCEoZmVhdHVyZXMmTElSQ19DQU5fU0VORF9NQVNLKSkKIAkJCXJldHVybiAtRU5PU1lTOwogCi0JCXJlc3VsdCA9IHB1dF91c2VyKExJUkNfTU9ERV9QVUxTRSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKKwkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19NT0RFX1BVTFNFLCB1cHRyKTsKIAkJYnJlYWs7CiAJY2FzZSBMSVJDX1NFVF9TRU5EX01PREU6CiAJCWlmICghKGZlYXR1cmVzJkxJUkNfQ0FOX1NFTkRfTUFTSykpCiAJCQlyZXR1cm4gLUVOT1NZUzsKIAotCQlyZXN1bHQgPSBnZXRfdXNlcihtb2RlLCAodW5zaWduZWQgbG9uZyAqKSBhcmcpOworCQlyZXN1bHQgPSBnZXRfdXNlcihtb2RlLCB1cHRyKTsKIAkJaWYgKCFyZXN1bHQgJiYgbW9kZSAhPSBMSVJDX01PREVfUFVMU0UpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXQyOWZfc3BpbmFuZC9tdDI5Zl9zcGluYW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXQyOWZfc3BpbmFuZC9tdDI5Zl9zcGluYW5kLmMKaW5kZXggNTFkYmMxMy4uMzQ2NGUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL210MjlmX3NwaW5hbmQvbXQyOWZfc3BpbmFuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tdDI5Zl9zcGluYW5kL210MjlmX3NwaW5hbmQuYwpAQCAtNjk5LDYgKzY5OSw3IEBACiB7CiAKIAlzdHJ1Y3Qgc3BpbmFuZF9zdGF0ZSAqc3RhdGUgPSBtdGRfdG9fc3RhdGUobXRkKTsKKwogCW1lbWNweShzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1Zl9wdHIsIGJ1ZiwgbGVuKTsKIAlzdGF0ZS0+YnVmX3B0ciArPSBsZW47CiB9CkBAIC03MDYsNiArNzA3LDcgQEAKIHN0YXRpYyB2b2lkIHNwaW5hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3BpbmFuZF9zdGF0ZSAqc3RhdGUgPSBtdGRfdG9fc3RhdGUobXRkKTsKKwogCW1lbWNweShidWYsIHN0YXRlLT5idWYgKyBzdGF0ZS0+YnVmX3B0ciwgbGVuKTsKIAlzdGF0ZS0+YnVmX3B0ciArPSBsZW47CiB9CkBAIC05MjQsNiArOTI2LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpbmFuZF9kdFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAic3BpbmFuZCxtdDI5ZiIsIH0sCisJe30KIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbmV0bG9naWMveGxyX25ldC5jIGIvZHJpdmVycy9zdGFnaW5nL25ldGxvZ2ljL3hscl9uZXQuYwppbmRleCBjODNlMzM3Li43NWQ3YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbmV0bG9naWMveGxyX25ldC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9uZXRsb2dpYy94bHJfbmV0LmMKQEAgLTI2OCw2ICsyNjgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGh5c2tiID0gdmlydF90b19waHlzKHNrYik7CiAJaW50IGNwdV9jb3JlID0gbmxtX2NvcmVfaWQoKTsKIAlpbnQgZnJfc3RuX2lkID0gY3B1X2NvcmUgKiA4ICsgWExSX0ZCX1NUTjsJLyogRkIgdG8gNnRoIGJ1Y2tldCAqLworCiAJbXNnLT5tc2cwID0gKCgodTY0KTEgPDwgNjMpCXwJLyogRW5kIG9mIHBhY2tldCBkZXNjcmlwdG9yICovCiAJCSgodTY0KTEyNyA8PCA1NCkJfAkvKiBObyBGcmVlIGJhY2sgKi8KIAkJKHU2NClza2ItPmxlbiA8PCA0MAl8CS8qIExlbmd0aCBvZiBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbm9raWFfaDRwL25va2lhX2Z3LWJjbS5jIGIvZHJpdmVycy9zdGFnaW5nL25va2lhX2g0cC9ub2tpYV9mdy1iY20uYwppbmRleCAxMTFhZTk0Li5iNTVmNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbm9raWFfaDRwL25va2lhX2Z3LWJjbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ub2tpYV9oNHAvbm9raWFfZnctYmNtLmMKQEAgLTczLDcgKzczLDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChmd19za2ItPmRhdGFbMV0gPT0gMHgwMSAmJiBmd19za2ItPmRhdGFbMl0gPT0gMHhmYyAmJiBmd19za2ItPmxlbiA+PSAxMCkgeworCWlmIChmd19za2ItPmRhdGFbMV0gPT0gMHgwMSAmJiBmd19za2ItPmRhdGFbMl0gPT0gMHhmYyAmJgorCQkJZndfc2tiLT5sZW4gPj0gMTApIHsKIAkJQlRfREJHKCJTZXR0aW5nIGJsdWV0b290aCBhZGRyZXNzIik7CiAJCWVyciA9IGhjaV9oNHBfYmNtX3NldF9iZGFkZHIoaW5mbywgZndfc2tiKTsKIAkJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL29jdGVvbi1oY2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL29jdGVvbi1oY2QuYwppbmRleCA4YjhjZTcyLi5jNGM3MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9vY3Rlb24taGNkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2Ivb2N0ZW9uLWhjZC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC0yNDUsOSArMjQ2LDYgQEAKIAlfX0NWTVhfVVNCX1BJUEVfRkxBR1NfTkVFRF9QSU5HCT0gMSA8PCAxOCwKIH07CiAKLS8qIE5vcm1hbCBwcmVmZXRjaCB0aGF0IHVzZSB0aGUgcHJlZiBpbnN0cnVjdGlvbi4gKi8KLSNkZWZpbmUgQ1ZNWF9QUkVGRVRDSChhZGRyZXNzLCBvZmZzZXQpIGFzbSB2b2xhdGlsZSAoInByZWYgJVt0eXBlXSwgJVtvZmZdKCVbcmJhc2VdKSIgOiA6IFtyYmFzZV0gImQiIChhZGRyZXNzKSwgW29mZl0gIkkiIChvZmZzZXQpLCBbdHlwZV0gIm4iICgwKSkKLQogLyogTWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgZmFpbGVkIHRyYW5zYWN0aW9ucyAqLwogI2RlZmluZSBNQVhfUkVUUklFUwkJMwogCkBAIC00NjIsNyArNDYwLDggQEAKIAl9IHdoaWxlICgwKQogCiAvKiBSZXR1cm5zIHRoZSBJTyBhZGRyZXNzIHRvIHB1c2gvcG9wIHN0dWZmIGRhdGEgZnJvbSB0aGUgRklGT3MgKi8KLSNkZWZpbmUgVVNCX0ZJRk9fQUREUkVTUyhjaGFubmVsLCB1c2JfaW5kZXgpIChDVk1YX1VTQkNYX0dPVEdDVEwodXNiX2luZGV4KSArICgoY2hhbm5lbCkrMSkqMHgxMDAwKQorI2RlZmluZSBVU0JfRklGT19BRERSRVNTKGNoYW5uZWwsIHVzYl9pbmRleCkgXAorCShDVk1YX1VTQkNYX0dPVEdDVEwodXNiX2luZGV4KSArICgoY2hhbm5lbCkrMSkqMHgxMDAwKQogCiAvKioKICAqIHN0cnVjdCBvY3Rlb25fdGVtcF9idWZmZXIgLSBhIGJvdW5jZSBidWZmZXIgZm9yIFVTQiB0cmFuc2ZlcnMKQEAgLTg5Miw2ICs4OTEsNyBAQAogCSAqLwogCXsKIAkJdW5pb24gY3ZteF91c2JjeF9ndXNiY2ZnIHVzYmN4X2d1c2JjZmc7CisKIAkJdXNiY3hfZ3VzYmNmZy51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLAogCQkJCUNWTVhfVVNCQ1hfR1VTQkNGRyh1c2ItPmluZGV4KSk7CiAJCXVzYmN4X2d1c2JjZmcucy50b3V0Y2FsID0gMDsKQEAgLTk0OSw2ICs5NDksNyBAQAogCQkgKi8KIAkJewogCQkJdW5pb24gY3ZteF91c2JjeF9oY2ZnIHVzYmN4X2hjZmc7CisKIAkJCXVzYmN4X2hjZmcudTMyID0gX19jdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwKIAkJCQkJQ1ZNWF9VU0JDWF9IQ0ZHKHVzYi0+aW5kZXgpKTsKIAkJCXVzYmN4X2hjZmcucy5mc2xzc3VwcCA9IDA7CkBAIC0xMDc2LDYgKzEwNzcsNyBAQAogCSAqLwogCXsKIAkJdW5pb24gY3ZteF91c2JjeF9nbnB0eGZzaXogc2l6OworCiAJCXNpei51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLAogCQkJCUNWTVhfVVNCQ1hfR05QVFhGU0laKHVzYi0+aW5kZXgpKTsKIAkJc2l6LnMubnB0eGZkZXAgPSB1c2JjeF9naHdjZmczLnMuZGZpZm9kZXB0aCAvIDI7CkBAIC0xMDkwLDYgKzEwOTIsNyBAQAogCSAqLwogCXsKIAkJdW5pb24gY3ZteF91c2JjeF9ocHR4ZnNpeiBzaXo7CisKIAkJc2l6LnUzMiA9IF9fY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsCiAJCQkJQ1ZNWF9VU0JDWF9IUFRYRlNJWih1c2ItPmluZGV4KSk7CiAJCXNpei5zLnB0eGZzaXplID0gdXNiY3hfZ2h3Y2ZnMy5zLmRmaWZvZGVwdGggLyA0OwpAQCAtMTIxOSw4ICsxMjIyLDggQEAKICAqIFJldHVybnM6IEEgbm9uLU5VTEwgdmFsdWUgaXMgYSBwaXBlLiBOVUxMIG1lYW5zIGFuIGVycm9yLgogICovCiBzdGF0aWMgc3RydWN0IGN2bXhfdXNiX3BpcGUgKmN2bXhfdXNiX29wZW5fcGlwZShzdHJ1Y3QgY3ZteF91c2Jfc3RhdGUgKnVzYiwKLQkJCQkJCWludCBkZXZpY2VfYWRkciwgaW50Ci0JCQkJCQllbmRwb2ludF9udW0sCisJCQkJCQlpbnQgZGV2aWNlX2FkZHIsCisJCQkJCQlpbnQgZW5kcG9pbnRfbnVtLAogCQkJCQkJZW51bSBjdm14X3VzYl9zcGVlZAogCQkJCQkJCWRldmljZV9zcGVlZCwKIAkJCQkJCWludCBtYXhfcGFja2V0LApAQCAtMTI4Niw3ICsxMjg5LDggQEAKIAlpZiAoX19jdm14X3VzYl9waXBlX25lZWRzX3NwbGl0KHVzYiwgcGlwZSkpIHsKIAkJcGlwZS0+aW50ZXJ2YWwgPSBpbnRlcnZhbCo4OwogCQkvKiBGb3JjZSBzdGFydCBzcGxpdHMgdG8gYmUgc2NoZWR1bGUgb24gdUZyYW1lIDAgKi8KLQkJcGlwZS0+bmV4dF90eF9mcmFtZSA9ICgodXNiLT5mcmFtZV9udW1iZXIrNykmfjcpICsgcGlwZS0+aW50ZXJ2YWw7CisJCXBpcGUtPm5leHRfdHhfZnJhbWUgPSAoKHVzYi0+ZnJhbWVfbnVtYmVyKzcpJn43KSArCisJCQkJCXBpcGUtPmludGVydmFsOwogCX0gZWxzZSB7CiAJCXBpcGUtPmludGVydmFsID0gaW50ZXJ2YWw7CiAJCXBpcGUtPm5leHRfdHhfZnJhbWUgPSB1c2ItPmZyYW1lX251bWJlciArIHBpcGUtPmludGVydmFsOwpAQCAtMTMzNyw5ICsxMzQxLDEzIEBACiAJCXJldHVybjsKIAogCS8qIEdldCB3aGVyZSB0aGUgRE1BIGVuZ2luZSB3b3VsZCBoYXZlIHdyaXR0ZW4gdGhpcyBkYXRhICovCi0JYWRkcmVzcyA9IF9fY3ZteF91c2JfcmVhZF9jc3I2NCh1c2IsIENWTVhfVVNCTlhfRE1BMF9JTkJfQ0hOMCh1c2ItPmluZGV4KSArIGNoYW5uZWwqOCk7CisJYWRkcmVzcyA9IF9fY3ZteF91c2JfcmVhZF9jc3I2NCh1c2IsCisJCQlDVk1YX1VTQk5YX0RNQTBfSU5CX0NITjAodXNiLT5pbmRleCkgKyBjaGFubmVsKjgpOworCiAJcHRyID0gY3ZteF9waHlzX3RvX3B0cihhZGRyZXNzKTsKLQlfX2N2bXhfdXNiX3dyaXRlX2NzcjY0KHVzYiwgQ1ZNWF9VU0JOWF9ETUEwX0lOQl9DSE4wKHVzYi0+aW5kZXgpICsgY2hhbm5lbCo4LCBhZGRyZXNzICsgYnl0ZXMpOworCV9fY3ZteF91c2Jfd3JpdGVfY3NyNjQodXNiLAorCQkJICAgICAgIENWTVhfVVNCTlhfRE1BMF9JTkJfQ0hOMCh1c2ItPmluZGV4KSArIGNoYW5uZWwqOCwKKwkJCSAgICAgICBhZGRyZXNzICsgYnl0ZXMpOwogCiAJLyogTG9vcCB3cml0aW5nIHRoZSBGSUZPIGRhdGEgZm9yIHRoaXMgcGFja2V0IGludG8gbWVtb3J5ICovCiAJd2hpbGUgKGJ5dGVzID4gMCkgewpAQCAtMTQyMyw2ICsxNDMxLDcgQEAKIHsKIAlpZiAodXNiLT5wZXJpb2RpYy5oZWFkICE9IHVzYi0+cGVyaW9kaWMudGFpbCkgewogCQl1bmlvbiBjdm14X3VzYmN4X2hwdHhzdHMgdHhfc3RhdHVzOworCiAJCXR4X3N0YXR1cy51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLAogCQkJCUNWTVhfVVNCQ1hfSFBUWFNUUyh1c2ItPmluZGV4KSk7CiAJCWlmIChfX2N2bXhfdXNiX2ZpbGxfdHhfaHcodXNiLCAmdXNiLT5wZXJpb2RpYywKQEAgLTE0MzgsNiArMTQ0Nyw3IEBACiAKIAlpZiAodXNiLT5ub25wZXJpb2RpYy5oZWFkICE9IHVzYi0+bm9ucGVyaW9kaWMudGFpbCkgewogCQl1bmlvbiBjdm14X3VzYmN4X2ducHR4c3RzIHR4X3N0YXR1czsKKwogCQl0eF9zdGF0dXMudTMyID0gX19jdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwKIAkJCQlDVk1YX1VTQkNYX0dOUFRYU1RTKHVzYi0+aW5kZXgpKTsKIAkJaWYgKF9fY3ZteF91c2JfZmlsbF90eF9odyh1c2IsICZ1c2ItPm5vbnBlcmlvZGljLApAQCAtMTUzNiwyNSArMTU0NiwzMyBAQAogCXN3aXRjaCAodHJhbnNhY3Rpb24tPnN0YWdlKSB7CiAJY2FzZSBDVk1YX1VTQl9TVEFHRV9OT05fQ09OVFJPTDoKIAljYXNlIENWTVhfVVNCX1NUQUdFX05PTl9DT05UUk9MX1NQTElUX0NPTVBMRVRFOgotCQljdm14X2RwcmludGYoIiVzOiBFUlJPUiAtIE5vbiBjb250cm9sIHN0YWdlXG4iLCBfX0ZVTkNUSU9OX18pOworCQljdm14X2RwcmludGYoIiVzOiBFUlJPUiAtIE5vbiBjb250cm9sIHN0YWdlXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfU0VUVVA6CiAJCXVzYmNfaGN0c2l6LnMucGlkID0gMzsgLyogU2V0dXAgKi8KIAkJYnl0ZXNfdG9fdHJhbnNmZXIgPSBzaXplb2YoKmhlYWRlcik7CiAJCS8qIEFsbCBDb250cm9sIG9wZXJhdGlvbnMgc3RhcnQgd2l0aCBhIHNldHVwIGdvaW5nIE9VVCAqLwotCQlVU0JfU0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9IQ0NIQVJYKGNoYW5uZWwsIHVzYi0+aW5kZXgpLCB1bmlvbiBjdm14X3VzYmN4X2hjY2hhcngsIGVwZGlyLCBDVk1YX1VTQl9ESVJFQ1RJT05fT1VUKTsKKwkJVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLCB1c2ItPmluZGV4KSwKKwkJCQl1bmlvbiBjdm14X3VzYmN4X2hjY2hhcngsIGVwZGlyLAorCQkJCUNWTVhfVVNCX0RJUkVDVElPTl9PVVQpOwogCQkvKgogCQkgKiBTZXR1cCBzZW5kIHRoZSBjb250cm9sIGhlYWRlciBpbnN0ZWFkIG9mIHRoZSBidWZmZXIgZGF0YS4gVGhlCiAJCSAqIGJ1ZmZlciBkYXRhIHdpbGwgYmUgdXNlZCBpbiB0aGUgbmV4dCBzdGFnZQogCQkgKi8KLQkJX19jdm14X3VzYl93cml0ZV9jc3I2NCh1c2IsIENWTVhfVVNCTlhfRE1BMF9PVVRCX0NITjAodXNiLT5pbmRleCkgKyBjaGFubmVsKjgsIHRyYW5zYWN0aW9uLT5jb250cm9sX2hlYWRlcik7CisJCV9fY3ZteF91c2Jfd3JpdGVfY3NyNjQodXNiLAorCQkJQ1ZNWF9VU0JOWF9ETUEwX09VVEJfQ0hOMCh1c2ItPmluZGV4KSArIGNoYW5uZWwqOCwKKwkJCXRyYW5zYWN0aW9uLT5jb250cm9sX2hlYWRlcik7CiAJCWJyZWFrOwogCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfU0VUVVBfU1BMSVRfQ09NUExFVEU6CiAJCXVzYmNfaGN0c2l6LnMucGlkID0gMzsgLyogU2V0dXAgKi8KIAkJYnl0ZXNfdG9fdHJhbnNmZXIgPSAwOwogCQkvKiBBbGwgQ29udHJvbCBvcGVyYXRpb25zIHN0YXJ0IHdpdGggYSBzZXR1cCBnb2luZyBPVVQgKi8KLQkJVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLCB1c2ItPmluZGV4KSwgdW5pb24gY3ZteF91c2JjeF9oY2NoYXJ4LCBlcGRpciwgQ1ZNWF9VU0JfRElSRUNUSU9OX09VVCk7Ci0JCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0hDU1BMVFgoY2hhbm5lbCwgdXNiLT5pbmRleCksIHVuaW9uIGN2bXhfdXNiY3hfaGNzcGx0eCwgY29tcHNwbHQsIDEpOworCQlVU0JfU0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9IQ0NIQVJYKGNoYW5uZWwsIHVzYi0+aW5kZXgpLAorCQkJCXVuaW9uIGN2bXhfdXNiY3hfaGNjaGFyeCwgZXBkaXIsCisJCQkJQ1ZNWF9VU0JfRElSRUNUSU9OX09VVCk7CisKKwkJVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSENTUExUWChjaGFubmVsLCB1c2ItPmluZGV4KSwKKwkJCQl1bmlvbiBjdm14X3VzYmN4X2hjc3BsdHgsIGNvbXBzcGx0LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBDVk1YX1VTQl9TVEFHRV9EQVRBOgogCQl1c2JjX2hjdHNpei5zLnBpZCA9IF9fY3ZteF91c2JfZ2V0X2RhdGFfcGlkKHBpcGUpOwpAQCAtMTY4NCw2ICsxNzAyLDcgQEAKIAkJLyogQ2xlYXIgYWxsIGNoYW5uZWwgc3RhdHVzIGJpdHMgKi8KIAkJdXNiY19oY2ludC51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLAogCQkJCUNWTVhfVVNCQ1hfSENJTlRYKGNoYW5uZWwsIHVzYi0+aW5kZXgpKTsKKwogCQlfX2N2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwKIAkJCQkgICAgICAgQ1ZNWF9VU0JDWF9IQ0lOVFgoY2hhbm5lbCwgdXNiLT5pbmRleCksCiAJCQkJICAgICAgIHVzYmNfaGNpbnQudTMyKTsKQEAgLTE3MTQsMTggKzE3MzMsMzEgQEAKIAkJX19jdm14X3VzYl93cml0ZV9jc3IzMih1c2IsIENWTVhfVVNCQ1hfSENJTlRNU0tYKGNoYW5uZWwsIHVzYi0+aW5kZXgpLCB1c2JjX2hjaW50bXNrLnUzMik7CiAKIAkJLyogRW5hYmxlIHRoZSBjaGFubmVsIGludGVycnVwdCB0byBwcm9wYWdhdGUgKi8KLQkJdXNiY19oYWludG1zay51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLCBDVk1YX1VTQkNYX0hBSU5UTVNLKHVzYi0+aW5kZXgpKTsKKwkJdXNiY19oYWludG1zay51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLAorCQkJCQlDVk1YX1VTQkNYX0hBSU5UTVNLKHVzYi0+aW5kZXgpKTsKIAkJdXNiY19oYWludG1zay5zLmhhaW50bXNrIHw9IDE8PGNoYW5uZWw7Ci0JCV9fY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNiLCBDVk1YX1VTQkNYX0hBSU5UTVNLKHVzYi0+aW5kZXgpLCB1c2JjX2hhaW50bXNrLnUzMik7CisJCV9fY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNiLAorCQkJCQlDVk1YX1VTQkNYX0hBSU5UTVNLKHVzYi0+aW5kZXgpLAorCQkJCQl1c2JjX2hhaW50bXNrLnUzMik7CiAJfQogCiAJLyogU2V0dXAgdGhlIGxvY2F0aW9ucyB0aGUgRE1BIGVuZ2luZXMgdXNlICAqLwogCXsKLQkJdWludDY0X3QgZG1hX2FkZHJlc3MgPSB0cmFuc2FjdGlvbi0+YnVmZmVyICsgdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlczsKKwkJdWludDY0X3QgZG1hX2FkZHJlc3MgPSB0cmFuc2FjdGlvbi0+YnVmZmVyICsKKwkJCQkJdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlczsKKwogCQlpZiAodHJhbnNhY3Rpb24tPnR5cGUgPT0gQ1ZNWF9VU0JfVFJBTlNGRVJfSVNPQ0hST05PVVMpCi0JCQlkbWFfYWRkcmVzcyA9IHRyYW5zYWN0aW9uLT5idWZmZXIgKyB0cmFuc2FjdGlvbi0+aXNvX3BhY2tldHNbMF0ub2Zmc2V0ICsgdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlczsKLQkJX19jdm14X3VzYl93cml0ZV9jc3I2NCh1c2IsIENWTVhfVVNCTlhfRE1BMF9PVVRCX0NITjAodXNiLT5pbmRleCkgKyBjaGFubmVsKjgsIGRtYV9hZGRyZXNzKTsKLQkJX19jdm14X3VzYl93cml0ZV9jc3I2NCh1c2IsIENWTVhfVVNCTlhfRE1BMF9JTkJfQ0hOMCh1c2ItPmluZGV4KSArIGNoYW5uZWwqOCwgZG1hX2FkZHJlc3MpOworCQkJZG1hX2FkZHJlc3MgPSB0cmFuc2FjdGlvbi0+YnVmZmVyICsKKwkJCQkJdHJhbnNhY3Rpb24tPmlzb19wYWNrZXRzWzBdLm9mZnNldCArCisJCQkJCXRyYW5zYWN0aW9uLT5hY3R1YWxfYnl0ZXM7CisKKwkJX19jdm14X3VzYl93cml0ZV9jc3I2NCh1c2IsCisJCQlDVk1YX1VTQk5YX0RNQTBfT1VUQl9DSE4wKHVzYi0+aW5kZXgpICsgY2hhbm5lbCo4LAorCQkJZG1hX2FkZHJlc3MpOworCisJCV9fY3ZteF91c2Jfd3JpdGVfY3NyNjQodXNiLAorCQkJQ1ZNWF9VU0JOWF9ETUEwX0lOQl9DSE4wKHVzYi0+aW5kZXgpICsgY2hhbm5lbCo4LAorCQkJZG1hX2FkZHJlc3MpOwogCX0KIAogCS8qIFNldHVwIGJvdGggdGhlIHNpemUgb2YgdGhlIHRyYW5zZmVyIGFuZCB0aGUgU1BMSVQgY2hhcmFjdGVyaXN0aWNzICovCkBAIC0yMDA4LDggKzIwNDAsNyBAQAogCQkJICgoKChpbnQpY3VycmVudF9mcmFtZSAtIChpbnQpcGlwZS0+c3BsaXRfc2NfZnJhbWUpCiAJCQkgICAmIDB4N2YpIDwgMHg0MCkpICYmCiAJCQkoIXVzYi0+YWN0aXZlX3NwbGl0IHx8ICh1c2ItPmFjdGl2ZV9zcGxpdCA9PSB0KSkpIHsKLQkJCUNWTVhfUFJFRkVUQ0gocGlwZSwgMTI4KTsKLQkJCUNWTVhfUFJFRkVUQ0godCwgMCk7CisJCQlwcmVmZXRjaCh0KTsKIAkJCXJldHVybiBwaXBlOwogCQl9CiAJfQpAQCAtMjAzNiw4ICsyMDY3LDE2IEBACiAJCSAqIFdpdGhvdXQgRE1BIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBub3Qgc2NoZWR1bGUgc29tZXRoaW5nCiAJCSAqIGF0IHRoZSBlbmQgb2YgYSBmcmFtZSBhbmQgY2F1c2UgYW4gb3ZlcnJ1bi4KIAkJICovCi0JCXVuaW9uIGN2bXhfdXNiY3hfaGZudW0gaGZudW0gPSB7LnUzMiA9IF9fY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsIENWTVhfVVNCQ1hfSEZOVU0odXNiLT5pbmRleCkpfTsKLQkJdW5pb24gY3ZteF91c2JjeF9oZmlyIGhmaXIgPSB7LnUzMiA9IF9fY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsIENWTVhfVVNCQ1hfSEZJUih1c2ItPmluZGV4KSl9OworCQl1bmlvbiBjdm14X3VzYmN4X2hmbnVtIGhmbnVtID0geworCQkJLnUzMiA9IF9fY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsCisJCQkJCQlDVk1YX1VTQkNYX0hGTlVNKHVzYi0+aW5kZXgpKQorCQl9OworCisJCXVuaW9uIGN2bXhfdXNiY3hfaGZpciBoZmlyID0geworCQkJLnUzMiA9IF9fY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsCisJCQkJCQlDVk1YX1VTQkNYX0hGSVIodXNiLT5pbmRleCkpCisJCX07CisKIAkJaWYgKGhmbnVtLnMuZnJyZW0gPCBoZmlyLnMuZnJpbnQvNCkKIAkJCWdvdG8gZG9uZTsKIAl9CkBAIC0yNTIyLDYgKzI1NjEsNyBAQAogCS8qIFNpbXBseSBsb29wIHRocm91Z2ggYW5kIGF0dGVtcHQgdG8gY2FuY2VsIGVhY2ggdHJhbnNhY3Rpb24gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHJhbnNhY3Rpb24sIG5leHQsICZwaXBlLT50cmFuc2FjdGlvbnMsIG5vZGUpIHsKIAkJaW50IHJlc3VsdCA9IGN2bXhfdXNiX2NhbmNlbCh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uKTsKKwogCQlpZiAodW5saWtlbHkocmVzdWx0ICE9IDApKQogCQkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0yNjU0LDE5ICsyNjk0LDIwIEBACiAJfQogCiAJLyogRGlzYWJsZSB0aGUgY2hhbm5lbCBpbnRlcnJ1cHRzIG5vdyB0aGF0IGl0IGlzIGRvbmUgKi8KLQlfX2N2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9IQ0lOVE1TS1goY2hhbm5lbCwgdXNiLT5pbmRleCksIDApOworCV9fY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNiLAorCQkJCUNWTVhfVVNCQ1hfSENJTlRNU0tYKGNoYW5uZWwsIHVzYi0+aW5kZXgpLAorCQkJCTApOwogCXVzYi0+aWRsZV9oYXJkd2FyZV9jaGFubmVscyB8PSAoMTw8Y2hhbm5lbCk7CiAKIAkvKiBNYWtlIHN1cmUgdGhpcyBjaGFubmVsIGlzIHRpZWQgdG8gYSB2YWxpZCBwaXBlICovCiAJcGlwZSA9IHVzYi0+cGlwZV9mb3JfY2hhbm5lbFtjaGFubmVsXTsKLQlDVk1YX1BSRUZFVENIKHBpcGUsIDApOwotCUNWTVhfUFJFRkVUQ0gocGlwZSwgMTI4KTsKKwlwcmVmZXRjaChwaXBlKTsKIAlpZiAoIXBpcGUpCiAJCXJldHVybiAwOwogCXRyYW5zYWN0aW9uID0gbGlzdF9maXJzdF9lbnRyeSgmcGlwZS0+dHJhbnNhY3Rpb25zLAogCQkJCSAgICAgICB0eXBlb2YoKnRyYW5zYWN0aW9uKSwKIAkJCQkgICAgICAgbm9kZSk7Ci0JQ1ZNWF9QUkVGRVRDSCh0cmFuc2FjdGlvbiwgMCk7CisJcHJlZmV0Y2godHJhbnNhY3Rpb24pOwogCiAJLyoKIAkgKiBEaXNjb25uZWN0IHRoaXMgcGlwZSBmcm9tIHRoZSBIVyBjaGFubmVsLiBMYXRlciB0aGUgc2NoZWR1bGUKQEAgLTMwMjEsNyArMzA2Miw4IEBACiAJCQkJCSAqLwogCQkJCQlpZiAoIWJ1ZmZlcl9zcGFjZV9sZWZ0IHx8CiAJCQkJCQkoYnl0ZXNfdGhpc190cmFuc2ZlciA8IDE4OCkpIHsKLQkJCQkJCXBpcGUtPm5leHRfdHhfZnJhbWUgKz0gcGlwZS0+aW50ZXJ2YWw7CisJCQkJCQlwaXBlLT5uZXh0X3R4X2ZyYW1lICs9CisJCQkJCQkJcGlwZS0+aW50ZXJ2YWw7CiAJCQkJCQlfX2N2bXhfdXNiX3BlcmZvcm1fY29tcGxldGUoCiAJCQkJCQkJdXNiLAogCQkJCQkJCXBpcGUsCkBAIC0zMDgzLDYgKzMxMjUsNyBAQAogCQkJCXBpcGUtPmludGVydmFsOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjdm14X3VzYl9wb3J0X3N0YXR1cyBwb3J0OworCiAJCXBvcnQgPSBjdm14X3VzYl9nZXRfc3RhdHVzKHVzYik7CiAJCWlmIChwb3J0LnBvcnRfZW5hYmxlZCkgewogCQkJLyogV2UnbGwgcmV0cnkgdGhlIGV4YWN0IHNhbWUgdHJhbnNhY3Rpb24gYWdhaW4gKi8KQEAgLTMxMjMsMjQgKzMxNjYsMjQgQEAKIAl1bmlvbiBjdm14X3VzYmN4X2hmbnVtIHVzYmNfaGZudW07CiAJdW5pb24gY3ZteF91c2JjeF9naW50c3RzIHVzYmNfZ2ludHN0czsKIAotCUNWTVhfUFJFRkVUQ0godXNiLCAwKTsKLQlDVk1YX1BSRUZFVENIKHVzYiwgMSoxMjgpOwotCUNWTVhfUFJFRkVUQ0godXNiLCAyKjEyOCk7Ci0JQ1ZNWF9QUkVGRVRDSCh1c2IsIDMqMTI4KTsKLQlDVk1YX1BSRUZFVENIKHVzYiwgNCoxMjgpOworCXByZWZldGNoX3JhbmdlKHVzYiwgc2l6ZW9mKCp1c2IpKTsKIAogCS8qIFVwZGF0ZSB0aGUgZnJhbWUgY291bnRlciAqLwotCXVzYmNfaGZudW0udTMyID0gX19jdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9IRk5VTSh1c2ItPmluZGV4KSk7CisJdXNiY19oZm51bS51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLAorCQkJCQkJQ1ZNWF9VU0JDWF9IRk5VTSh1c2ItPmluZGV4KSk7CiAJaWYgKCh1c2ItPmZyYW1lX251bWJlciYweDNmZmYpID4gdXNiY19oZm51bS5zLmZybnVtKQogCQl1c2ItPmZyYW1lX251bWJlciArPSAweDQwMDA7CiAJdXNiLT5mcmFtZV9udW1iZXIgJj0gfjB4M2ZmZnVsbDsKIAl1c2ItPmZyYW1lX251bWJlciB8PSB1c2JjX2hmbnVtLnMuZnJudW07CiAKIAkvKiBSZWFkIHRoZSBwZW5kaW5nIGludGVycnVwdHMgKi8KLQl1c2JjX2dpbnRzdHMudTMyID0gX19jdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9HSU5UU1RTKHVzYi0+aW5kZXgpKTsKKwl1c2JjX2dpbnRzdHMudTMyID0gX19jdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwKKwkJCQkJCUNWTVhfVVNCQ1hfR0lOVFNUUyh1c2ItPmluZGV4KSk7CiAKIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0cyBub3cgdGhhdCB3ZSBrbm93IGFib3V0IHRoZW0gKi8KLQlfX2N2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9HSU5UU1RTKHVzYi0+aW5kZXgpLCB1c2JjX2dpbnRzdHMudTMyKTsKKwlfX2N2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwKKwkJCQlDVk1YX1VTQkNYX0dJTlRTVFModXNiLT5pbmRleCksCisJCQkJdXNiY19naW50c3RzLnUzMik7CiAKIAlpZiAodXNiY19naW50c3RzLnMucnhmbHZsKSB7CiAJCS8qCkBAIC0zMTk2LDcgKzMyMzksOSBAQAogCQkgKiB0byBjbGVhciB0aGlzIGJpdC4KIAkJICovCiAJCXVuaW9uIGN2bXhfdXNiY3hfaGFpbnQgdXNiY19oYWludDsKLQkJdXNiY19oYWludC51MzIgPSBfX2N2bXhfdXNiX3JlYWRfY3NyMzIodXNiLCBDVk1YX1VTQkNYX0hBSU5UKHVzYi0+aW5kZXgpKTsKKworCQl1c2JjX2hhaW50LnUzMiA9IF9fY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsCisJCQkJCUNWTVhfVVNCQ1hfSEFJTlQodXNiLT5pbmRleCkpOwogCQl3aGlsZSAodXNiY19oYWludC51MzIpIHsKIAkJCWludCBjaGFubmVsOwogCkBAIC0zMjY3LDYgKzMzMTIsNyBAQAogCQllbnVtIGN2bXhfdXNiX3NwZWVkIHNwZWVkOwogCQlpbnQgc3BsaXRfZGV2aWNlID0gMDsKIAkJaW50IHNwbGl0X3BvcnQgPSAwOworCiAJCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKIAkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgogCQkJdHJhbnNmZXJfdHlwZSA9IENWTVhfVVNCX1RSQU5TRkVSX0lTT0NIUk9OT1VTOwpAQCAtMzMwMyw2ICszMzQ5LDcgQEAKIAkJCSAqIHRyZWUuCiAJCQkgKi8KIAkJCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cmItPmRldjsKKwogCQkJd2hpbGUgKGRldi0+cGFyZW50KSB7CiAJCQkJLyoKIAkJCQkgKiBJZiBvdXIgcGFyZW50IGlzIGhpZ2ggc3BlZWQgdGhlbiBoZSdsbApAQCAtMzQ2Miw2ICszNTA5LDcgQEAKIAkJc3RydWN0IG9jdGVvbl9oY2QgKnByaXYgPSBoY2RfdG9fb2N0ZW9uKGhjZCk7CiAJCXN0cnVjdCBjdm14X3VzYl9waXBlICpwaXBlID0gZXAtPmhjcHJpdjsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQljdm14X3VzYl9jYW5jZWxfYWxsKCZwcml2LT51c2IsIHBpcGUpOwogCQlpZiAoY3ZteF91c2JfY2xvc2VfcGlwZSgmcHJpdi0+dXNiLCBwaXBlKSkKQEAgLTM0ODMsMTAgKzM1MzEsMTEgQEAKIAlidWZbMF0gPSAwOwogCWJ1ZlswXSA9IHBvcnRfc3RhdHVzLmNvbm5lY3RfY2hhbmdlIDw8IDE7CiAKLQlyZXR1cm4gKGJ1ZlswXSAhPSAwKTsKKwlyZXR1cm4gYnVmWzBdICE9IDA7CiB9CiAKLXN0YXRpYyBpbnQgb2N0ZW9uX3VzYl9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3N0YXRpYyBpbnQgb2N0ZW9uX3VzYl9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCQl1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQogewogCXN0cnVjdCBvY3Rlb25faGNkICpwcml2ID0gaGNkX3RvX29jdGVvbihoY2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGhjZC0+c2VsZi5jb250cm9sbGVyOwpAQCAtMzc3OCw2ICszODI3LDcgQEAKIAlpZiAoaXJxIDwgMCkgewogCQkvKiBEZWZlY3RpdmUgZGV2aWNlIHRyZWUsIGJ1dCB3ZSBrbm93IGhvdyB0byBmaXggaXQuICovCiAJCWlycV9od19udW1iZXJfdCBod2lycSA9IHVzYl9udW0gPyAoMSA8PCA2KSArIDE3IDogNTY7CisKIAkJaXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIGh3aXJxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCmluZGV4IDI2YjRlYzUuLmViODNiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwpAQCAtMjEwLDYgKzIxMCw3IEBACiAKIAlpZiAoc2xlZXApIHsKIAkJdTggcG0gPSAwOworCiAJCXggPSBvbHBjX2VjX2NtZChFQ19EQ09OX1BPV0VSX01PREUsICZwbSwgMSwgTlVMTCwgMCk7CiAJCWlmICh4KQogCQkJcHJfd2FybigidW5hYmxlIHRvIGZvcmNlIGRjb24gdG8gcG93ZXIgZG93bjogJWQhXG4iLCB4KTsKQEAgLTI0MCw2ICsyNDEsNyBAQAogc3RhdGljIHZvaWQgZGNvbl9sb2FkX2hvbGRvZmYoc3RydWN0IGRjb25fcHJpdiAqZGNvbikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgZGVsdGFfdCwgbm93OworCiAJd2hpbGUgKDEpIHsKIAkJZ2V0bnN0aW1lb2ZkYXkoJm5vdyk7CiAJCWRlbHRhX3QgPSB0aW1lc3BlY19zdWIobm93LCBkY29uLT5sb2FkX3RpbWUpOwpAQCAtMzk5LDE0ICs0MDEsMTUgQEAKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkY29uX3ByaXYgKmRjb24gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiU0LjRYXG4iLCBkY29uLT5kaXNwX21vZGUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBkY29uX3NsZWVwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0KIAlzdHJ1Y3QgZGNvbl9wcml2ICpkY29uID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGNvbi0+YXNsZWVwKTsKIH0KIApAQCAtNDE0LDYgKzQxNyw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZGNvbl9wcml2ICpkY29uID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGNvbi0+Y3Vycl9zcmMgPT0gRENPTl9TT1VSQ0VfRENPTiA/IDEgOiAwKTsKIH0KIApAQCAtNDIxLDYgKzQyNSw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZGNvbl9wcml2ICpkY29uID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGNvbi0+bW9ubyk7CiB9CiAKQEAgLTUzNCw2ICs1MzksNyBAQAogc3RhdGljIGludCBkY29uX2JsX2dldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkY29uX3ByaXYgKmRjb24gPSBibF9nZXRfZGF0YShkZXYpOworCiAJcmV0dXJuIGRjb24tPmJsX3ZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL296d3Bhbi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL296d3Bhbi9UT0RPCmluZGV4IGI0ZmViZDcuLmYzMmMxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vendwYW4vVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3p3cGFuL1RPRE8KQEAgLTEwLDUgKzEwLDUgQEAKIAktIHRlc3Rpbmcgd2l0aCBhcyBtYW55IGRldmljZXMgYXMgcG9zc2libGUuCiAKIFBsZWFzZSBzZW5kIGFueSBwYXRjaGVzIGZvciB0aGlzIGRyaXZlciB0bwotUnVwZXNoIEd1amFyZSA8cnVwZXNoLmd1amFyZUBhdG1lbC5jb20+CitTaGlnZWthdHN1IFRhdGVubyA8c2hpZ2VrYXRzdS50YXRlbm9AYXRtZWwuY29tPgogYW5kIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL296d3Bhbi9vemhjZC5jIGIvZHJpdmVycy9zdGFnaW5nL296d3Bhbi9vemhjZC5jCmluZGV4IGIzZDQwMWEuLjMwYmQ5MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vendwYW4vb3poY2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3p3cGFuL296aGNkLmMKQEAgLTI5NCw2ICsyOTQsNyBAQAogewogCWlmICh1cmJsKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRlOworCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZnX2xpbmtfbG9jaywgaXJxX3N0YXRlKTsKIAkJaWYgKGdfbGlua19wb29sX3NpemUgPCBPWl9NQVhfTElOS19QT09MX1NJWkUpIHsKIAkJCXVyYmwtPmxpbmsubmV4dCA9IGdfbGlua19wb29sOwpAQCAtNDI0LDYgKzQyNSw3IEBACiAJaWYgKHBvcnQpIHsKIAkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCQlzdHJ1Y3Qgb3pfaGNkICpvemhjZCA9IHBvcnQtPm96aGNkOworCiAJCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAkJaWYgKGVwLT5mbGFncyAmIE9aX0ZfRVBfSEFWRV9TVFJFQU0pCiAJCQlvel91c2Jfc3RyZWFtX2RlbGV0ZShwb3J0LT5ocGQsIGVwLT5lcF9udW0pOwpAQCAtNTY4LDYgKzU3MCw3IEBACiAJCWVwID0gcG9ydC0+b3V0X2VwW2VwX2FkZHJdOwogCWlmIChlcCkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICplOworCiAJCWxpc3RfZm9yX2VhY2goZSwgJmVwLT51cmJfbGlzdCkgewogCQkJdXJibCA9IGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3Qgb3pfdXJiX2xpbmssIGxpbmspOwogCQkJaWYgKHVyYmwtPnVyYiA9PSB1cmIpIHsKQEAgLTU5OSw2ICs2MDIsNyBAQAogCWVwID0gcG9ydC0+b3V0X2VwW2VwX2l4XTsKIAlpZiAoZXApIHsKIAkJc3RydWN0IGxpc3RfaGVhZCAqZTsKKwogCQlsaXN0X2Zvcl9lYWNoKGUsICZlcC0+dXJiX2xpc3QpIHsKIAkJCXVyYmwgPSBjb250YWluZXJfb2YoZSwgc3RydWN0IG96X3VyYl9saW5rLCBsaW5rKTsKIAkJCWlmICh1cmJsLT5yZXFfaWQgPT0gcmVxX2lkKSB7CkBAIC04MTUsNiArODE5LDcgQEAKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJaW50IGNvcHlfbGVuOwogCQlpbnQgcmVxdWlyZWRfc2l6ZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwogCQlpZiAocmVxdWlyZWRfc2l6ZSA+IHRvdGFsX3NpemUpCiAJCQlyZXF1aXJlZF9zaXplID0gdG90YWxfc2l6ZTsKIAkJY29weV9sZW4gPSByZXF1aXJlZF9zaXplLW9mZnNldDsKQEAgLTgyNiw2ICs4MzEsNyBAQAogCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXAgPQogCQkJCShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopdXJiLT5zZXR1cF9wYWNrZXQ7CiAJCQl1bnNpZ25lZCB3dmFsdWUgPSBsZTE2X3RvX2NwdShzZXR1cC0+d1ZhbHVlKTsKKwogCQkJaWYgKG96X2VucXVldWVfZXBfdXJiKHBvcnQsIDAsIDAsIHVyYiwgcmVxX2lkKSkKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJZWxzZSBpZiAob3pfdXNiX2dldF9kZXNjX3JlcShwb3J0LT5ocGQsIHJlcV9pZCwKQEAgLTkxOSw2ICs5MjUsNyBAQAogCWlmICgocmNvZGUgPT0gMCkgJiYgKHBvcnQtPmNvbmZpZ19udW0gPiAwKSkgewogCQlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWc7CiAJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisKIAkJb3pfZGJnKE9OLCAiU2V0IGludGVyZmFjZSAlZCBhbHQgJWRcbiIsIGlmX251bSwgYWx0KTsKIAkJb3pfY2xlYW5fZW5kcG9pbnRzX2Zvcl9pbnRlcmZhY2UoaGNkLCBwb3J0LCBpZl9udW0pOwogCQljb25maWcgPSAmdXJiLT5kZXYtPmNvbmZpZ1twb3J0LT5jb25maWdfbnVtLTFdOwpAQCAtOTc0LDYgKzk4MSw3IEBACiAKIAl9IGVsc2UgewogCQlpbnQgY29weV9sZW47CisKIAkJb3pfZGJnKE9OLCAiVkVORE9SLUNMQVNTIC0gY25mXG4iKTsKIAkJaWYgKGRhdGFfbGVuKSB7CiAJCQlpZiAoZGF0YV9sZW4gPD0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQpAQCAtMTA0Nyw2ICsxMDU1LDcgQEAKIAkJCQkJc3RydWN0IG96X3VyYl9saW5rLCBsaW5rKTsKIAkJCXN0cnVjdCB1cmIgKnVyYjsKIAkJCWludCBjb3B5X2xlbjsKKwogCQkJbGlzdF9kZWxfaW5pdCgmdXJibC0+bGluayk7CiAJCQlzcGluX3VubG9ja19iaCgmb3poY2QtPmhjZF9sb2NrKTsKIAkJCXVyYiA9IHVyYmwtPnVyYjsKQEAgLTExNDAsNiArMTE0OSw3IEBACiAJc3Bpbl9sb2NrX2JoKCZvemhjZC0+aGNkX2xvY2spOwogCWxpc3RfZm9yX2VhY2goZSwgJnBvcnQtPmlzb2NfaW5fZXApIHsKIAkJc3RydWN0IG96X2VuZHBvaW50ICplcCA9IGVwX2Zyb21fbGluayhlKTsKKwogCQlpZiAoZXAtPmZsYWdzICYgT1pfRl9FUF9CVUZGRVJJTkcpIHsKIAkJCWlmIChlcC0+YnVmZmVyZWRfdW5pdHMgPj0gT1pfSU5fQlVGRkVSSU5HX1VOSVRTKSB7CiAJCQkJZXAtPmZsYWdzICY9IH5PWl9GX0VQX0JVRkZFUklORzsKQEAgLTExNjAsNiArMTE3MCw3IEBACiAJCQlpbnQgbGVuID0gMDsKIAkJCWludCBjb3B5X2xlbjsKIAkJCWludCBpOworCiAJCQlpZiAoZXAtPmNyZWRpdCAgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKQogCQkJCWJyZWFrOwogCQkJaWYgKGVwLT5idWZmZXJlZF91bml0cyA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpCkBAIC0xMjE1LDYgKzEyMjYsNyBAQAogCWlmIChlcCkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICplOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpuOworCiAJCXNwaW5fbG9ja19iaCgmb3poY2QtPmhjZF9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9zYWZlKGUsIG4sICZlcC0+dXJiX2xpc3QpIHsKIAkJCXVyYmwgPSBjb250YWluZXJfb2YoZSwgc3RydWN0IG96X3VyYl9saW5rLCBsaW5rKTsKQEAgLTE1NTcsNiArMTU2OSw3IEBACiAJfQogCWlmICghcmMgJiYgIWNvbXBsZXRlKSB7CiAJCWludCBkYXRhX2xlbiA9IDA7CisKIAkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgPT0gMCkKIAkJCWRhdGFfbGVuID0gd2xlbmd0aDsKIAkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gZGF0YV9sZW47CkBAIC0xNzYxLDYgKzE3NzQsNyBAQAogewogCWlmIChvemhjZCkgewogCQlzdHJ1Y3Qgb3pfdXJiX2xpbmsgKnVyYmw7CisKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZvemhjZC0+b3JwaGFuYWdlKSkgewogCQkJdXJibCA9IGxpc3RfZmlyc3RfZW50cnkoJm96aGNkLT5vcnBoYW5hZ2UsCiAJCQkJc3RydWN0IG96X3VyYl9saW5rLCBsaW5rKTsKQEAgLTE5OTcsNyArMjAxMSw2IEBACiBzdGF0aWMgaW50IG96X3NldF9wb3J0X2ZlYXR1cmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHd2YWx1ZSwgdTE2IHdpbmRleCkKIHsKIAlzdHJ1Y3Qgb3pfcG9ydCAqcG9ydDsKLQlpbnQgZXJyID0gMDsKIAl1OCBwb3J0X2lkID0gKHU4KXdpbmRleDsKIAlzdHJ1Y3Qgb3pfaGNkICpvemhjZCA9IG96X2hjZF9wcml2YXRlKGhjZCk7CiAJdW5zaWduZWQgc2V0X2JpdHMgPSAwOwpAQCAtMjA2NCw3ICsyMDc3LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPnBvcnRfbG9jayk7CiAJfQogCW96X2RiZyhIVUIsICJQb3J0WyVkXSBzdGF0dXMgPSAweCV4XG4iLCBwb3J0X2lkLCBwb3J0LT5zdGF0dXMpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMDczLDcgKzIwODYsNiBAQAogc3RhdGljIGludCBvel9jbGVhcl9wb3J0X2ZlYXR1cmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHd2YWx1ZSwgdTE2IHdpbmRleCkKIHsKIAlzdHJ1Y3Qgb3pfcG9ydCAqcG9ydDsKLQlpbnQgZXJyID0gMDsKIAl1OCBwb3J0X2lkID0gKHU4KXdpbmRleDsKIAlzdHJ1Y3Qgb3pfaGNkICpvemhjZCA9IG96X2hjZF9wcml2YXRlKGhjZCk7CiAJdW5zaWduZWQgY2xlYXJfYml0cyA9IDA7CkBAIC0yMTQwLDcgKzIxNTIsNyBAQAogCX0KIAlvel9kYmcoSFVCLCAiUG9ydFslZF0gc3RhdHVzID0gMHgleFxuIiwKIAkgICAgICAgcG9ydF9pZCwgb3poY2QtPnBvcnRzW3BvcnRfaWQtMV0uc3RhdHVzKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjI1OCw2ICsyMjcwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmb3poY2QtPmhjZF9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgT1pfTkJfUE9SVFM7IGkrKykgewogCQlzdHJ1Y3Qgb3pfcG9ydCAqcG9ydCA9ICZvemhjZC0+cG9ydHNbaV07CisKIAkJcG9ydC0+b3poY2QgPSBvemhjZDsKIAkJcG9ydC0+ZmxhZ3MgPSAwOwogCQlwb3J0LT5zdGF0dXMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL296d3Bhbi9venByb3RvLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3p3cGFuL296cHJvdG8uYwppbmRleCBmMDlhY2QwLi4xMTAyMDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3p3cGFuL296cHJvdG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3p3cGFuL296cHJvdG8uYwpAQCAtNzY1LDcgKzc2NSw3IEBACiBpbnQgb3pfcHJvdG9jb2xfaW5pdChjaGFyICpkZXZzKQogewogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmdfcnhfcXVldWUpOwotCWlmIChkZXZzICYmIChkZXZzWzBdID09ICcqJykpIHsKKwlpZiAoZGV2c1swXSA9PSAnKicpIHsKIAkJb3pfYmluZGluZ19hZGQoTlVMTCk7CiAJfSBlbHNlIHsKIAkJY2hhciBkWzMyXTsKQEAgLTc5Miw3ICs3OTIsNyBAQAogCQlpZiAoY291bnQgPj0gbWF4X2NvdW50KQogCQkJYnJlYWs7CiAJCXBkID0gY29udGFpbmVyX29mKGUsIHN0cnVjdCBvel9wZCwgbGluayk7Ci0JCW1lbWNweSgmYWRkcltjb3VudCsrXSwgcGQtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJCWV0aGVyX2FkZHJfY29weSgodTggKikmYWRkcltjb3VudCsrXSwgcGQtPm1hY19hZGRyKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmdfcG9sbGluZ19sb2NrKTsKIAlyZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IDA4ZjlhNDguLjRlOTIyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC00NjIsNyArNDYyLDcgQEAKIHN0YXRpYyBpbnQgbGNkX3Byb3RvID0gLTE7CiBtb2R1bGVfcGFyYW0obGNkX3Byb3RvLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhsY2RfcHJvdG8sCi0JCSJMQ0QgY29tbXVuaWNhdGlvbjogMD1wYXJhbGxlbCAoLy8pLCAxPXNlcmlhbCwgMj1USSBMQ0QgSW50ZXJmYWNlIik7CisJCSAiTENEIGNvbW11bmljYXRpb246IDA9cGFyYWxsZWwgKC8vKSwgMT1zZXJpYWwsIDI9VEkgTENEIEludGVyZmFjZSIpOwogCiBzdGF0aWMgaW50IGxjZF9jaGFyc2V0ID0gLTE7CiBtb2R1bGVfcGFyYW0obGNkX2NoYXJzZXQsIGludCwgMDAwMCk7CkBAIC02NjQsOCArNjY0LDEyIEBACiB7CiAJaW50IGRfYml0LCBjX2JpdCwgaW52OwogCi0JZF92YWxbMF0gPSBjX3ZhbFswXSA9IGRfdmFsWzFdID0gY192YWxbMV0gPSAwOwotCWRfdmFsWzJdID0gY192YWxbMl0gPSAweEZGOworCWRfdmFsWzBdID0gMDsKKwljX3ZhbFswXSA9IDA7CisJZF92YWxbMV0gPSAwOworCWNfdmFsWzFdID0gMDsKKwlkX3ZhbFsyXSA9IDB4RkY7CisJY192YWxbMl0gPSAweEZGOwogCiAJaWYgKHBpbiA9PSAwKQogCQlyZXR1cm47CkBAIC02NzQsNyArNjc4LDggQEAKIAlpZiAoaW52KQogCQlwaW4gPSAtcGluOwogCi0JZF9iaXQgPSBjX2JpdCA9IDA7CisJZF9iaXQgPSAwOworCWNfYml0ID0gMDsKIAogCXN3aXRjaCAocGluKSB7CiAJY2FzZSBQSU5fU1RST0JFOgkvKiBzdHJvYmUsIGludmVydGVkICovCkBAIC03MTEsMTAgKzcxNiw5IEBACiAvKiBzbGVlcHMgdGhhdCBtYW55IG1pbGxpc2Vjb25kcyB3aXRoIGEgcmVzY2hlZHVsZSAqLwogc3RhdGljIHZvaWQgbG9uZ19zbGVlcChpbnQgbXMpCiB7Ci0KLQlpZiAoaW5faW50ZXJydXB0KCkpCisJaWYgKGluX2ludGVycnVwdCgpKSB7CiAJCW1kZWxheShtcyk7Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CiAJCXNjaGVkdWxlX3RpbWVvdXQoKG1zICogSFogKyA5OTkpIC8gMTAwMCk7CiAJfQpAQCAtODY3LDcgKzg3MSw5IEBACiBzdGF0aWMgdm9pZCBsY2RfY2xlYXJfZmFzdF9zKHZvaWQpCiB7CiAJaW50IHBvczsKLQlsY2RfYWRkcl94ID0gbGNkX2FkZHJfeSA9IDA7CisKKwlsY2RfYWRkcl94ID0gMDsKKwlsY2RfYWRkcl95ID0gMDsKIAlsY2RfZ290b3h5KCk7CiAKIAlzcGluX2xvY2tfaXJxKCZwcHJ0X2xvY2spOwpAQCAtODc5LDcgKzg4NSw4IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcHBydF9sb2NrKTsKIAotCWxjZF9hZGRyX3ggPSBsY2RfYWRkcl95ID0gMDsKKwlsY2RfYWRkcl94ID0gMDsKKwlsY2RfYWRkcl95ID0gMDsKIAlsY2RfZ290b3h5KCk7CiB9CiAKQEAgLTg4Nyw3ICs4OTQsOSBAQAogc3RhdGljIHZvaWQgbGNkX2NsZWFyX2Zhc3RfcDgodm9pZCkKIHsKIAlpbnQgcG9zOwotCWxjZF9hZGRyX3ggPSBsY2RfYWRkcl95ID0gMDsKKworCWxjZF9hZGRyX3ggPSAwOworCWxjZF9hZGRyX3kgPSAwOwogCWxjZF9nb3RveHkoKTsKIAogCXNwaW5fbG9ja19pcnEoJnBwcnRfbG9jayk7CkBAIC05MTQsNyArOTIzLDggQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZwcHJ0X2xvY2spOwogCi0JbGNkX2FkZHJfeCA9IGxjZF9hZGRyX3kgPSAwOworCWxjZF9hZGRyX3ggPSAwOworCWxjZF9hZGRyX3kgPSAwOwogCWxjZF9nb3RveHkoKTsKIH0KIApAQCAtOTIyLDcgKzkzMiw5IEBACiBzdGF0aWMgdm9pZCBsY2RfY2xlYXJfZmFzdF90aWxjZCh2b2lkKQogewogCWludCBwb3M7Ci0JbGNkX2FkZHJfeCA9IGxjZF9hZGRyX3kgPSAwOworCisJbGNkX2FkZHJfeCA9IDA7CisJbGNkX2FkZHJfeSA9IDA7CiAJbGNkX2dvdG94eSgpOwogCiAJc3Bpbl9sb2NrX2lycSgmcHBydF9sb2NrKTsKQEAgLTkzNCw3ICs5NDYsOCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZwcHJ0X2xvY2spOwogCi0JbGNkX2FkZHJfeCA9IGxjZF9hZGRyX3kgPSAwOworCWxjZF9hZGRyX3ggPSAwOworCWxjZF9hZGRyX3kgPSAwOwogCWxjZF9nb3RveHkoKTsKIH0KIApAQCAtOTQyLDE0ICs5NTUsMTQgQEAKIHN0YXRpYyB2b2lkIGxjZF9jbGVhcl9kaXNwbGF5KHZvaWQpCiB7CiAJbGNkX3dyaXRlX2NtZCgweDAxKTsJLyogY2xlYXIgZGlzcGxheSAqLwotCWxjZF9hZGRyX3ggPSBsY2RfYWRkcl95ID0gMDsKKwlsY2RfYWRkcl94ID0gMDsKKwlsY2RfYWRkcl95ID0gMDsKIAkvKiB3ZSBtdXN0IHdhaXQgYSBmZXcgbWlsbGlzZWNvbmRzICgxNSkgKi8KIAlsb25nX3NsZWVwKDE1KTsKIH0KIAogc3RhdGljIHZvaWQgbGNkX2luaXRfZGlzcGxheSh2b2lkKQogewotCiAJbGNkX2ZsYWdzID0gKChsY2RfaGVpZ2h0ID4gMSkgPyBMQ0RfRkxBR19OIDogMCkKIAkgICAgfCBMQ0RfRkxBR19EIHwgTENEX0ZMQUdfQyB8IExDRF9GTEFHX0I7CiAKQEAgLTEwOTIsNiArMTEwNSw3IEBACiAJCWJyZWFrOwogCWNhc2UgJ2snOiB7CS8qIGtpbGwgZW5kIG9mIGxpbmUgKi8KIAkJaW50IHg7CisKIAkJZm9yICh4ID0gbGNkX2FkZHJfeDsgeCA8IGxjZF9id2lkdGg7IHgrKykKIAkJCWxjZF93cml0ZV9kYXRhKCcgJyk7CiAKQEAgLTExMzcsMTMgKzExNTEsMTMgQEAKIAkJdmFsdWUgPSAwOwogCQl3aGlsZSAoKmVzYyAmJiBjZ29mZnNldCA8IDgpIHsKIAkJCXNoaWZ0IF49IDQ7Ci0JCQlpZiAoKmVzYyA+PSAnMCcgJiYgKmVzYyA8PSAnOScpCisJCQlpZiAoKmVzYyA+PSAnMCcgJiYgKmVzYyA8PSAnOScpIHsKIAkJCQl2YWx1ZSB8PSAoKmVzYyAtICcwJykgPDwgc2hpZnQ7Ci0JCQllbHNlIGlmICgqZXNjID49ICdBJyAmJiAqZXNjIDw9ICdaJykKKwkJCX0gZWxzZSBpZiAoKmVzYyA+PSAnQScgJiYgKmVzYyA8PSAnWicpIHsKIAkJCQl2YWx1ZSB8PSAoKmVzYyAtICdBJyArIDEwKSA8PCBzaGlmdDsKLQkJCWVsc2UgaWYgKCplc2MgPj0gJ2EnICYmICplc2MgPD0gJ3onKQorCQkJfSBlbHNlIGlmICgqZXNjID49ICdhJyAmJiAqZXNjIDw9ICd6JykgewogCQkJCXZhbHVlIHw9ICgqZXNjIC0gJ2EnICsgMTApIDw8IHNoaWZ0OwotCQkJZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCWVzYysrOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTE3OSw4ICsxMTkzLDkgQEAKIAkJCQllc2MrKzsKIAkJCQlpZiAoa3N0cnRvdWwoZXNjLCAxMCwgJmxjZF9hZGRyX3kpIDwgMCkKIAkJCQkJYnJlYWs7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQlsY2RfZ290b3h5KCk7CkBAIC0xMjE3LDExMSArMTIzMiwxMTQgQEAKIAlyZXR1cm4gcHJvY2Vzc2VkOwogfQogCi1zdGF0aWMgc3NpemVfdCBsY2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyB2b2lkIGxjZF93cml0ZV9jaGFyKGNoYXIgYykKIHsKLQljb25zdCBjaGFyICp0bXAgPSBidWY7CisJLyogZmlyc3QsIHdlJ2xsIHRlc3QgaWYgd2UncmUgaW4gZXNjYXBlIG1vZGUgKi8KKwlpZiAoKGMgIT0gJ1xuJykgJiYgbGNkX2VzY2FwZV9sZW4gPj0gMCkgeworCQkvKiB5ZXMsIGxldCdzIGFkZCB0aGlzIGNoYXIgdG8gdGhlIGJ1ZmZlciAqLworCQlsY2RfZXNjYXBlW2xjZF9lc2NhcGVfbGVuKytdID0gYzsKKwkJbGNkX2VzY2FwZVtsY2RfZXNjYXBlX2xlbl0gPSAwOworCX0gZWxzZSB7CisJCS8qIGFib3J0cyBhbnkgcHJldmlvdXMgZXNjYXBlIHNlcXVlbmNlICovCisJCWxjZF9lc2NhcGVfbGVuID0gLTE7CisKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgTENEX0VTQ0FQRV9DSEFSOgorCQkJLyogc3RhcnQgb2YgYW4gZXNjYXBlIHNlcXVlbmNlICovCisJCQlsY2RfZXNjYXBlX2xlbiA9IDA7CisJCQlsY2RfZXNjYXBlW2xjZF9lc2NhcGVfbGVuXSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnXGInOgorCQkJLyogZ28gYmFjayBvbmUgY2hhciBhbmQgY2xlYXIgaXQgKi8KKwkJCWlmIChsY2RfYWRkcl94ID4gMCkgeworCQkJCS8qIGNoZWNrIGlmIHdlJ3JlIG5vdCBhdCB0aGUKKwkJCQkgICBlbmQgb2YgdGhlIGxpbmUgKi8KKwkJCQlpZiAobGNkX2FkZHJfeCA8IGxjZF9id2lkdGgpCisJCQkJCS8qIGJhY2sgb25lIGNoYXIgKi8KKwkJCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsKKwkJCQlsY2RfYWRkcl94LS07CisJCQl9CisJCQkvKiByZXBsYWNlIHdpdGggYSBzcGFjZSAqLworCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsKKwkJCS8qIGJhY2sgb25lIGNoYXIgYWdhaW4gKi8KKwkJCWxjZF93cml0ZV9jbWQoMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAnXDAxNCc6CisJCQkvKiBxdWlja2x5IGNsZWFyIHRoZSBkaXNwbGF5ICovCisJCQlsY2RfY2xlYXJfZmFzdCgpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xuJzoKKwkJCS8qIGZsdXNoIHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgbGluZSBhbmQKKwkJCSAgIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSAqLworCQkJZm9yICg7IGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoOyBsY2RfYWRkcl94KyspCisJCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsKKwkJCWxjZF9hZGRyX3ggPSAwOworCQkJbGNkX2FkZHJfeSA9IChsY2RfYWRkcl95ICsgMSkgJSBsY2RfaGVpZ2h0OworCQkJbGNkX2dvdG94eSgpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xyJzoKKwkJCS8qIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbWUgbGluZSAqLworCQkJbGNkX2FkZHJfeCA9IDA7CisJCQlsY2RfZ290b3h5KCk7CisJCQlicmVhazsKKwkJY2FzZSAnXHQnOgorCQkJLyogcHJpbnQgYSBzcGFjZSBpbnN0ZWFkIG9mIHRoZSB0YWIgKi8KKwkJCWxjZF9wcmludCgnICcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBzaW1wbHkgcHJpbnQgdGhpcyBjaGFyICovCisJCQlsY2RfcHJpbnQoYyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG5vdyB3ZSdsbCBzZWUgaWYgd2UncmUgaW4gYW4gZXNjYXBlIG1vZGUgYW5kIGlmIHRoZSBjdXJyZW50CisJICAgZXNjYXBlIHNlcXVlbmNlIGNhbiBiZSB1bmRlcnN0b29kLiAqLworCWlmIChsY2RfZXNjYXBlX2xlbiA+PSAyKSB7CisJCWludCBwcm9jZXNzZWQgPSAwOworCisJCWlmICghc3RyY21wKGxjZF9lc2NhcGUsICJbMkoiKSkgeworCQkJLyogY2xlYXIgdGhlIGRpc3BsYXkgKi8KKwkJCWxjZF9jbGVhcl9mYXN0KCk7CisJCQlwcm9jZXNzZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobGNkX2VzY2FwZSwgIltIIikpIHsKKwkJCS8qIGN1cnNvciB0byBob21lICovCisJCQlsY2RfYWRkcl94ID0gMDsKKwkJCWxjZF9hZGRyX3kgPSAwOworCQkJbGNkX2dvdG94eSgpOworCQkJcHJvY2Vzc2VkID0gMTsKKwkJfQorCQkvKiBjb2RlcyBzdGFydGluZyB3aXRoIF5bW0wgKi8KKwkJZWxzZSBpZiAoKGxjZF9lc2NhcGVfbGVuID49IDMpICYmCisJCQkgKGxjZF9lc2NhcGVbMF0gPT0gJ1snKSAmJgorCQkJIChsY2RfZXNjYXBlWzFdID09ICdMJykpIHsKKwkJCXByb2Nlc3NlZCA9IGhhbmRsZV9sY2Rfc3BlY2lhbF9jb2RlKCk7CisJCX0KKworCQkvKiBMQ0Qgc3BlY2lhbCBlc2NhcGUgY29kZXMgKi8KKwkJLyogZmx1c2ggdGhlIGVzY2FwZSBzZXF1ZW5jZSBpZiBpdCdzIGJlZW4gcHJvY2Vzc2VkCisJCSAgIG9yIGlmIGl0IGlzIGdldHRpbmcgdG9vIGxvbmcuICovCisJCWlmIChwcm9jZXNzZWQgfHwgKGxjZF9lc2NhcGVfbGVuID49IExDRF9FU0NBUEVfTEVOKSkKKwkJCWxjZF9lc2NhcGVfbGVuID0gLTE7CisJfSAvKiBlc2NhcGUgY29kZXMgKi8KK30KKworc3RhdGljIHNzaXplX3QgbGNkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWNvbnN0IGNoYXIgX191c2VyICp0bXAgPSBidWY7CiAJY2hhciBjOwogCi0JZm9yICg7IGNvdW50LS0gPiAwOyAocHBvcyA/ICgqcHBvcykrKyA6IDApLCArK3RtcCkgeworCWZvciAoOyBjb3VudC0tID4gMDsgKCpwcG9zKSsrLCB0bXArKykgewogCQlpZiAoIWluX2ludGVycnVwdCgpICYmICgoKGNvdW50ICsgMSkgJiAweDFmKSA9PSAwKSkKIAkJCS8qIGxldCdzIGJlIGEgbGl0dGxlIG5pY2Ugd2l0aCBvdGhlciBwcm9jZXNzZXMKIAkJCSAgIHRoYXQgbmVlZCBzb21lIENQVSAqLwogCQkJc2NoZWR1bGUoKTsKIAotCQlpZiAocHBvcyA9PSBOVUxMICYmIGZpbGUgPT0gTlVMTCkKLQkJCS8qIGxldCdzIG5vdCB1c2UgZ2V0X3VzZXIoKSBmcm9tIHRoZSBrZXJuZWwgISAqLwotCQkJYyA9ICp0bXA7Ci0JCWVsc2UgaWYgKGdldF91c2VyKGMsIHRtcCkpCisJCWlmIChnZXRfdXNlcihjLCB0bXApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJLyogZmlyc3QsIHdlJ2xsIHRlc3QgaWYgd2UncmUgaW4gZXNjYXBlIG1vZGUgKi8KLQkJaWYgKChjICE9ICdcbicpICYmIGxjZF9lc2NhcGVfbGVuID49IDApIHsKLQkJCS8qIHllcywgbGV0J3MgYWRkIHRoaXMgY2hhciB0byB0aGUgYnVmZmVyICovCi0JCQlsY2RfZXNjYXBlW2xjZF9lc2NhcGVfbGVuKytdID0gYzsKLQkJCWxjZF9lc2NhcGVbbGNkX2VzY2FwZV9sZW5dID0gMDsKLQkJfSBlbHNlIHsKLQkJCS8qIGFib3J0cyBhbnkgcHJldmlvdXMgZXNjYXBlIHNlcXVlbmNlICovCi0JCQlsY2RfZXNjYXBlX2xlbiA9IC0xOwotCi0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgTENEX0VTQ0FQRV9DSEFSOgotCQkJCS8qIHN0YXJ0IG9mIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLwotCQkJCWxjZF9lc2NhcGVfbGVuID0gMDsKLQkJCQlsY2RfZXNjYXBlW2xjZF9lc2NhcGVfbGVuXSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcYic6Ci0JCQkJLyogZ28gYmFjayBvbmUgY2hhciBhbmQgY2xlYXIgaXQgKi8KLQkJCQlpZiAobGNkX2FkZHJfeCA+IDApIHsKLQkJCQkJLyogY2hlY2sgaWYgd2UncmUgbm90IGF0IHRoZQotCQkJCQkgICBlbmQgb2YgdGhlIGxpbmUgKi8KLQkJCQkJaWYgKGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoKQotCQkJCQkJLyogYmFjayBvbmUgY2hhciAqLwotCQkJCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsKLQkJCQkJbGNkX2FkZHJfeC0tOwotCQkJCX0KLQkJCQkvKiByZXBsYWNlIHdpdGggYSBzcGFjZSAqLwotCQkJCWxjZF93cml0ZV9kYXRhKCcgJyk7Ci0JCQkJLyogYmFjayBvbmUgY2hhciBhZ2FpbiAqLwotCQkJCWxjZF93cml0ZV9jbWQoMHgxMCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcMDE0JzoKLQkJCQkvKiBxdWlja2x5IGNsZWFyIHRoZSBkaXNwbGF5ICovCi0JCQkJbGNkX2NsZWFyX2Zhc3QoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xuJzoKLQkJCQkvKiBmbHVzaCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgYW5kCi0JCQkJICAgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lICovCi0JCQkJZm9yICg7IGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoOyBsY2RfYWRkcl94KyspCi0JCQkJCWxjZF93cml0ZV9kYXRhKCcgJyk7Ci0JCQkJbGNkX2FkZHJfeCA9IDA7Ci0JCQkJbGNkX2FkZHJfeSA9IChsY2RfYWRkcl95ICsgMSkgJSBsY2RfaGVpZ2h0OwotCQkJCWxjZF9nb3RveHkoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xyJzoKLQkJCQkvKiBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1lIGxpbmUgKi8KLQkJCQlsY2RfYWRkcl94ID0gMDsKLQkJCQlsY2RfZ290b3h5KCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcdCc6Ci0JCQkJLyogcHJpbnQgYSBzcGFjZSBpbnN0ZWFkIG9mIHRoZSB0YWIgKi8KLQkJCQlsY2RfcHJpbnQoJyAnKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogc2ltcGx5IHByaW50IHRoaXMgY2hhciAqLwotCQkJCWxjZF9wcmludChjKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIG5vdyB3ZSdsbCBzZWUgaWYgd2UncmUgaW4gYW4gZXNjYXBlIG1vZGUgYW5kIGlmIHRoZSBjdXJyZW50Ci0JCSAgIGVzY2FwZSBzZXF1ZW5jZSBjYW4gYmUgdW5kZXJzdG9vZC4gKi8KLQkJaWYgKGxjZF9lc2NhcGVfbGVuID49IDIpIHsKLQkJCWludCBwcm9jZXNzZWQgPSAwOwotCi0JCQlpZiAoIXN0cmNtcChsY2RfZXNjYXBlLCAiWzJKIikpIHsKLQkJCQkvKiBjbGVhciB0aGUgZGlzcGxheSAqLwotCQkJCWxjZF9jbGVhcl9mYXN0KCk7Ci0JCQkJcHJvY2Vzc2VkID0gMTsKLQkJCX0gZWxzZSBpZiAoIXN0cmNtcChsY2RfZXNjYXBlLCAiW0giKSkgewotCQkJCS8qIGN1cnNvciB0byBob21lICovCi0JCQkJbGNkX2FkZHJfeCA9IGxjZF9hZGRyX3kgPSAwOwotCQkJCWxjZF9nb3RveHkoKTsKLQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJfQotCQkJLyogY29kZXMgc3RhcnRpbmcgd2l0aCBeW1tMICovCi0JCQllbHNlIGlmICgobGNkX2VzY2FwZV9sZW4gPj0gMykgJiYKLQkJCQkgKGxjZF9lc2NhcGVbMF0gPT0gJ1snKSAmJgotCQkJCSAobGNkX2VzY2FwZVsxXSA9PSAnTCcpKSB7Ci0JCQkJcHJvY2Vzc2VkID0gaGFuZGxlX2xjZF9zcGVjaWFsX2NvZGUoKTsKLQkJCX0KLQotCQkJLyogTENEIHNwZWNpYWwgZXNjYXBlIGNvZGVzICovCi0JCQkvKiBmbHVzaCB0aGUgZXNjYXBlIHNlcXVlbmNlIGlmIGl0J3MgYmVlbiBwcm9jZXNzZWQKLQkJCSAgIG9yIGlmIGl0IGlzIGdldHRpbmcgdG9vIGxvbmcuICovCi0JCQlpZiAocHJvY2Vzc2VkIHx8IChsY2RfZXNjYXBlX2xlbiA+PSBMQ0RfRVNDQVBFX0xFTikpCi0JCQkJbGNkX2VzY2FwZV9sZW4gPSAtMTsKLQkJfSAvKiBlc2NhcGUgY29kZXMgKi8KKwkJbGNkX3dyaXRlX2NoYXIoYyk7CiAJfQogCiAJcmV0dXJuIHRtcCAtIGJ1ZjsKQEAgLTEzNjUsOCArMTM4MywxOSBAQAogLyogcHVibGljIGZ1bmN0aW9uIHVzYWJsZSBmcm9tIHRoZSBrZXJuZWwgZm9yIGFueSBwdXJwb3NlICovCiBzdGF0aWMgdm9pZCBwYW5lbF9sY2RfcHJpbnQoY29uc3QgY2hhciAqcykKIHsKLQlpZiAobGNkX2VuYWJsZWQgJiYgbGNkX2luaXRpYWxpemVkKQotCQlsY2Rfd3JpdGUoTlVMTCwgcywgc3RybGVuKHMpLCBOVUxMKTsKKwljb25zdCBjaGFyICp0bXAgPSBzOworCWludCBjb3VudCA9IHN0cmxlbihzKTsKKworCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7IGNvdW50LS0gPiAwOyB0bXArKykgeworCQkJaWYgKCFpbl9pbnRlcnJ1cHQoKSAmJiAoKChjb3VudCArIDEpICYgMHgxZikgPT0gMCkpCisJCQkJLyogbGV0J3MgYmUgYSBsaXR0bGUgbmljZSB3aXRoIG90aGVyIHByb2Nlc3NlcworCQkJCSAgIHRoYXQgbmVlZCBzb21lIENQVSAqLworCQkJCXNjaGVkdWxlKCk7CisKKwkJCWxjZF93cml0ZV9jaGFyKCp0bXApOworCQl9CisJfQogfQogCiAvKiBpbml0aWFsaXplIHRoZSBMQ0QgZHJpdmVyICovCkBAIC0xNTYwLDcgKzE1ODksOCBAQAogCXBhbmVsX2xjZF9wcmludCgiXHgxYltMY1x4MWJbTGJceDFiW0wqTGludXgtIiBVVFNfUkVMRUFTRSAiXG5QYW5lbC0iCiAJCQlQQU5FTF9WRVJTSU9OKTsKICNlbmRpZgotCWxjZF9hZGRyX3ggPSBsY2RfYWRkcl95ID0gMDsKKwlsY2RfYWRkcl94ID0gMDsKKwlsY2RfYWRkcl95ID0gMDsKIAkvKiBjbGVhciB0aGUgZGlzcGxheSBvbiB0aGUgbmV4dCBkZXZpY2Ugb3BlbmluZyAqLwogCWxjZF9tdXN0X2NsZWFyID0gMTsKIAlsY2RfZ290b3h5KCk7CkBAIC0xNTcxLDExICsxNjAxLDEwIEBACiAgKi8KIAogc3RhdGljIHNzaXplX3Qga2V5cGFkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorCQkJICAgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0KIAl1bnNpZ25lZCBpID0gKnBwb3M7Ci0JY2hhciAqdG1wID0gYnVmOworCWNoYXIgX191c2VyICp0bXAgPSBidWY7CiAKIAlpZiAoa2V5cGFkX2J1ZmxlbiA9PSAwKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKQEAgLTE1OTgsNyArMTYyNyw2IEBACiAKIHN0YXRpYyBpbnQga2V5cGFkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0KIAlpZiAoa2V5cGFkX29wZW5fY250KQogCQlyZXR1cm4gLUVCVVNZOwkvKiBvcGVuIG9ubHkgb25jZSBhdCBhIHRpbWUgKi8KIApAQCAtMTcyOCw4ICsxNzU2LDggQEAKIAkgKiByZWxlYXNlIGZ1bmN0aW9uLgogCSAqIGVnOiAwIC0ocHJlc3MgQSktPiBBIC0ocHJlc3MgQiktPiBBQiA6IGRvbid0IG1hdGNoIEEncyByZWxlYXNlLgogCSAqLwotCWlmICgoKHBoeXNfcHJldiAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpCi0JICAgICYmICgocGh5c19jdXJyICYgaW5wdXQtPm1hc2spID4gaW5wdXQtPnZhbHVlKSkgeworCWlmICgoKHBoeXNfcHJldiAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpICYmCisJICAgICgocGh5c19jdXJyICYgaW5wdXQtPm1hc2spID4gIGlucHV0LT52YWx1ZSkpIHsKIAkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOyAvKiBpbnZhbGlkYXRlICovCiAJCXJldHVybiAxOwogCX0KQEAgLTE3NDcsMTYgKzE3NzUsMjAgQEAKIAogCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyID09IDApIHsKIAkJCQljaGFyICpwcmVzc19zdHIgPSBpbnB1dC0+dS5rYmQucHJlc3Nfc3RyOworCiAJCQkJaWYgKHByZXNzX3N0clswXSkgewogCQkJCQlpbnQgcyA9IHNpemVvZihpbnB1dC0+dS5rYmQucHJlc3Nfc3RyKTsKKwogCQkJCQlrZXlwYWRfc2VuZF9rZXkocHJlc3Nfc3RyLCBzKTsKIAkJCQl9CiAJCQl9CiAKIAkJCWlmIChpbnB1dC0+dS5rYmQucmVwZWF0X3N0clswXSkgewogCQkJCWNoYXIgKnJlcGVhdF9zdHIgPSBpbnB1dC0+dS5rYmQucmVwZWF0X3N0cjsKKwogCQkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA+PSBLRVlQQURfUkVQX1NUQVJUKSB7CiAJCQkJCWludCBzID0gc2l6ZW9mKGlucHV0LT51LmtiZC5yZXBlYXRfc3RyKTsKKwogCQkJCQlpbnB1dC0+aGlnaF90aW1lciAtPSBLRVlQQURfUkVQX0RFTEFZOwogCQkJCQlrZXlwYWRfc2VuZF9rZXkocmVwZWF0X3N0ciwgcyk7CiAJCQkJfQpAQCAtMTc4MCw4ICsxODEyLDggQEAKIHsKICNpZiAwCiAJLyogRklYTUUgISEhIHNhbWUgY29tbWVudCBhcyBpbiBpbnB1dF9zdGF0ZV9oaWdoICovCi0JaWYgKCgocGh5c19wcmV2ICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkKLQkgICAgJiYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPiBpbnB1dC0+dmFsdWUpKSB7CisJaWYgKCgocGh5c19wcmV2ICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkgJiYKKwkgICAgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPiAgaW5wdXQtPnZhbHVlKSkgewogCQlpbnB1dC0+c3RhdGUgPSBJTlBVVF9TVF9MT1c7CS8qIGludmFsaWRhdGUgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTE3OTQsOCArMTgyNiwxMCBAQAogCiAJCQlpZiAoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHJbMF0pIHsKIAkJCQljaGFyICpyZXBlYXRfc3RyID0gaW5wdXQtPnUua2JkLnJlcGVhdF9zdHI7CisKIAkJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPj0gS0VZUEFEX1JFUF9TVEFSVCkgewogCQkJCQlpbnQgcyA9IHNpemVvZihpbnB1dC0+dS5rYmQucmVwZWF0X3N0cik7CisKIAkJCQkJaW5wdXQtPmhpZ2hfdGltZXIgLT0gS0VZUEFEX1JFUF9ERUxBWTsKIAkJCQkJa2V5cGFkX3NlbmRfa2V5KHJlcGVhdF9zdHIsIHMpOwogCQkJCX0KQEAgLTE4MTEsMTIgKzE4NDUsMTUgQEAKIAkJLyogY2FsbCByZWxlYXNlIGV2ZW50ICovCiAJCWlmIChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX1NURCkgewogCQkJdm9pZCAoKnJlbGVhc2VfZmN0KShpbnQpID0gaW5wdXQtPnUuc3RkLnJlbGVhc2VfZmN0OworCiAJCQlpZiAocmVsZWFzZV9mY3QgIT0gTlVMTCkKIAkJCQlyZWxlYXNlX2ZjdChpbnB1dC0+dS5zdGQucmVsZWFzZV9kYXRhKTsKIAkJfSBlbHNlIGlmIChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX0tCRCkgewogCQkJY2hhciAqcmVsZWFzZV9zdHIgPSBpbnB1dC0+dS5rYmQucmVsZWFzZV9zdHI7CisKIAkJCWlmIChyZWxlYXNlX3N0clswXSkgewogCQkJCWludCBzID0gc2l6ZW9mKGlucHV0LT51LmtiZC5yZWxlYXNlX3N0cik7CisKIAkJCQlrZXlwYWRfc2VuZF9rZXkocmVsZWFzZV9zdHIsIHMpOwogCQkJfQogCQl9CkBAIC0xOTMwLDEyICsxOTY3LDE3IEBACiAJY2hhciBpbSwgb207CiAJcG1hc2tfdCBtLCB2OwogCi0Jb20gPSBpbSA9IG0gPSB2ID0gMFVMTDsKKwlvbSA9IDBVTEw7CisJaW0gPSAwVUxMOworCW0gPSAwVUxMOworCXYgPSAwVUxMOwogCXdoaWxlICgqbmFtZSkgewogCQlpbnQgaW4sIG91dCwgYml0LCBuZWc7Ci0JCWZvciAoaW4gPSAwOyAoaW4gPCBzaXplb2Yoc2lndGFiKSkgJiYKLQkJCSAgICAgKHNpZ3RhYltpbl0gIT0gKm5hbWUpOyBpbisrKQorCisJCWZvciAoaW4gPSAwOyAoaW4gPCBzaXplb2Yoc2lndGFiKSkgJiYgKHNpZ3RhYltpbl0gIT0gKm5hbWUpOworCQkgICAgIGluKyspCiAJCQk7CisKIAkJaWYgKGluID49IHNpemVvZihzaWd0YWIpKQogCQkJcmV0dXJuIDA7CS8qIGlucHV0IG5hbWUgbm90IGZvdW5kICovCiAJCW5lZyA9IChpbiAmIDEpOwkvKiBvZGQgKGxvd2VyKSBuYW1lcyBhcmUgbmVnYXRlZCAqLwpAQCAtMTk0NiwxMCArMTk4OCwxMSBAQAogCQlpZiAoaXNkaWdpdCgqbmFtZSkpIHsKIAkJCW91dCA9ICpuYW1lIC0gJzAnOwogCQkJb20gfD0gKDEgPDwgb3V0KTsKLQkJfSBlbHNlIGlmICgqbmFtZSA9PSAnLScpCisJCX0gZWxzZSBpZiAoKm5hbWUgPT0gJy0nKSB7CiAJCQlvdXQgPSA4OwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyZXR1cm4gMDsJLyogdW5rbm93biBiaXQgbmFtZSAqLworCQl9CiAKIAkJYml0ID0gKG91dCAqIDUpICsgaW47CiAKQEAgLTE5NzcsNyArMjAyMCw3IEBACiB7CiAJc3RydWN0IGxvZ2ljYWxfaW5wdXQgKmtleTsKIAotCWtleSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2dpY2FsX2lucHV0KSwgR0ZQX0tFUk5FTCk7CisJa2V5ID0ga3phbGxvYyhzaXplb2YoKmtleSksIEdGUF9LRVJORUwpOwogCWlmICgha2V5KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjAxNSw3ICsyMDU4LDcgQEAKIHsKIAlzdHJ1Y3QgbG9naWNhbF9pbnB1dCAqY2FsbGJhY2s7CiAKLQljYWxsYmFjayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2dpY2FsX2lucHV0KSwgR0ZQX0tFUk5FTCk7CisJY2FsbGJhY2sgPSBrbWFsbG9jKHNpemVvZigqY2FsbGJhY2spLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhbGxiYWNrKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjA0MCw2ICsyMDgzLDcgQEAKIHN0YXRpYyB2b2lkIGtleXBhZF9pbml0KHZvaWQpCiB7CiAJaW50IGtleW51bTsKKwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmtleXBhZF9yZWFkX3dhaXQpOwogCWtleXBhZF9idWZsZW4gPSAwOwkvKiBmbHVzaGVzIGFueSBldmVudHVhbCBub2lzeSBrZXlzdHJva2UgKi8KIApAQCAtMjI5OCw3ICsyMzQyLDcgQEAKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGFuZWxfbm90aWZpZXIpOwogCiAJaWYgKHNjYW5fdGltZXIuZnVuY3Rpb24gIT0gTlVMTCkKLQkJZGVsX3RpbWVyKCZzY2FuX3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNjYW5fdGltZXIpOwogCiAJaWYgKHBwcnQgIT0gTlVMTCkgewogCQlpZiAoa2V5cGFkX2VuYWJsZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfYXAuYwppbmRleCBmZjc0ZDBkLi44NWZkYTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X2FwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19hcC5jCkBAIC0xMzA2LDYgKzEzMDYsMTAgQEAKIAogCURCR184OEUoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlwd3BzX2llX3NyYyA9IHBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZTsKKwlpZiAocHdwc19pZV9zcmMgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJcHdwc19pZSA9IHJ0d19nZXRfd3BzX2llKGllK19GSVhFRF9JRV9MRU5HVEhfLCBpZWxlbi1fRklYRURfSUVfTEVOR1RIXywgTlVMTCwgJndwc19pZWxlbik7CiAKIAlpZiAocHdwc19pZSA9PSBOVUxMIHx8IHdwc19pZWxlbiA9PSAwKQpAQCAtMTMyMywxMCArMTMyNyw2IEBACiAJCQltZW1jcHkocGJhY2t1cF9yZW1haW5kZXJfaWUsIHByZW1haW5kZXJfaWUsIHJlbWFpbmRlcl9pZWxlbik7CiAJfQogCi0JcHdwc19pZV9zcmMgPSBwbWxtZXByaXYtPndwc19iZWFjb25faWU7Ci0JaWYgKHB3cHNfaWVfc3JjID09IE5VTEwpCi0JCXJldHVybjsKLQogCXdwc19pZWxlbiA9ICh1aW50KXB3cHNfaWVfc3JjWzFdOy8qIHRvIGdldCBpZSBkYXRhIGxlbiAqLwogCWlmICgod3BzX29mZnNldCt3cHNfaWVsZW4rMityZW1haW5kZXJfaWVsZW4pIDw9IE1BWF9JRV9TWikgewogCQltZW1jcHkocHdwc19pZSwgcHdwc19pZV9zcmMsIHdwc19pZWxlbisyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfYnJfZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X2JyX2V4dC5jCmluZGV4IGU4NDNjNmIuLmY5N2YwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfYnJfZXh0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19icl9leHQuYwpAQCAtNDQyLDYgKzQ0Miw3IEBACiB2b2lkIG5hdDI1X2RiX2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKnByaXYpCiB7CiAJaW50IGk7CisKIAlzcGluX2xvY2tfYmgoJnByaXYtPmJyX2V4dF9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQVQyNV9IQVNIX1NJWkU7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19jbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfY21kLmMKaW5kZXggYzJmYjA1MC4uMWUwYjhiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19jbWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X2NtZC5jCkBAIC0xNDMxLDQxICsxNDMxLDYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi11OCBydHdfbGVkX2JsaW5rX2NtZChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBMRURfODcxeCAqcExlZCkKLXsKLQlzdHJ1Y3QJY21kX29iaiAqcGNtZG9iajsKLQlzdHJ1Y3QJTGVkQmxpbmtfcGFyYW0gKmxlZEJsaW5rX3BhcmFtOwotCXN0cnVjdAljbWRfcHJpdiAgICpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKLQotCXU4CXJlcyA9IF9TVUNDRVNTOwotCi0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfY21kX2NfLCBfZHJ2X25vdGljZV8sICgiK3J0d19sZWRfYmxpbmtfY21kXG4iKSk7Ci0KLQlwY21kb2JqID0gKHN0cnVjdCBjbWRfb2JqICopcnR3X3ptYWxsb2Moc2l6ZW9mKHN0cnVjdAljbWRfb2JqKSk7Ci0JaWYgKHBjbWRvYmogPT0gTlVMTCkgewotCQlyZXMgPSBfRkFJTDsKLQkJZ290byBleGl0OwotCX0KLQotCWxlZEJsaW5rX3BhcmFtID0gKHN0cnVjdAlMZWRCbGlua19wYXJhbSAqKXJ0d196bWFsbG9jKHNpemVvZihzdHJ1Y3QJTGVkQmxpbmtfcGFyYW0pKTsKLQlpZiAobGVkQmxpbmtfcGFyYW0gPT0gTlVMTCkgewotCQlrZnJlZShwY21kb2JqKTsKLQkJcmVzID0gX0ZBSUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlsZWRCbGlua19wYXJhbS0+cExlZCA9IHBMZWQ7Ci0KLQlpbml0X2gyZndjbWRfd19wYXJtX25vX3JzcChwY21kb2JqLCBsZWRCbGlua19wYXJhbSwgR0VOX0NNRF9DT0RFKF9MZWRCbGluaykpOwotCXJlcyA9IHJ0d19lbnF1ZXVlX2NtZChwY21kcHJpdiwgcGNtZG9iaik7Ci0KLWV4aXQ6Ci0KLQotCXJldHVybiByZXM7Ci19Ci0KIHU4IHJ0d19zZXRfY3NhX2NtZChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHU4IG5ld19jaF9ubykKIHsKIAlzdHJ1Y3QJY21kX29iaiAqcGNtZG9iajsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfbGVkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X2xlZC5jCmluZGV4IDQyYjQxYWIuLjg3ZDZmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfbGVkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19sZWQuYwpAQCAtNDAsNyArNDAsNiBAQAogLyogICovCiAvKglEZXNjcmlwdGlvbjogKi8KIC8qCQlDYWxsYmFjayBmdW5jdGlvbiBvZiBMRUQgQmxpbmtXb3JrSXRlbS4gKi8KLS8qCQlXZSBkaXNwYXRjaCBhY3R1cmUgTEVEIGJsaW5rIGFjdGlvbiBhY2NvcmRpbmcgdG8gTGVkU3RyYXRlZ3kuICovCiAvKiAgKi8KIHZvaWQgQmxpbmtXb3JrSXRlbUNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTcxLDEwICs3MCw5IEBACiAKIC8qRGVzY3JpcHRpb246ICovCiAvKgkJSW5pdGlhbGl6ZSBhbiBMRURfODcxeCBvYmplY3QuICovCi12b2lkIEluaXRMZWQ4NzF4KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IExFRF84NzF4ICpwTGVkLCBlbnVtIExFRF9QSU5fODcxeCBMZWRQaW4pCit2b2lkIEluaXRMZWQ4NzF4KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IExFRF84NzF4ICpwTGVkKQogewogCXBMZWQtPnBhZGFwdGVyID0gcGFkYXB0ZXI7Ci0JcExlZC0+TGVkUGluID0gTGVkUGluOwogCiAJUmVzZXRMZWRTdGF0dXMocExlZCk7CiAKQEAgLTEwMSw4NyArOTksNiBAQAogLyoJCUl0IHRvZ2dsZSBvZmYgTEVEIGFuZCBzY2hlZHVsZSBjb3JyZXNwb25kaW5nIHRpbWVyIGlmIG5lY2Vzc2FyeS4gKi8KIC8qICAqLwogCi1zdGF0aWMgdm9pZCBTd0xlZEJsaW5rKHN0cnVjdCBMRURfODcxeCAqcExlZCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIgPSBwTGVkLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmKHBhZGFwdGVyLT5tbG1lcHJpdik7Ci0JdTggYlN0b3BCbGlua2luZyA9IGZhbHNlOwotCi0JLyogIENoYW5nZSBMRUQgYWNjb3JkaW5nIHRvIEJsaW5raW5nTGVkU3RhdGUgc3BlY2lmaWVkLiAqLwotCWlmIChwTGVkLT5CbGlua2luZ0xlZFN0YXRlID09IFJUV19MRURfT04pIHsKLQkJU3dMZWRPbihwYWRhcHRlciwgcExlZCk7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQmxpbmt0aW1lcyAoJWQpOiB0dXJuIG9uXG4iLCBwTGVkLT5CbGlua1RpbWVzKSk7Ci0JfSBlbHNlIHsKLQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkJsaW5rdGltZXMgKCVkKTogdHVybiBvZmZcbiIsIHBMZWQtPkJsaW5rVGltZXMpKTsKLQl9Ci0KLQkvKiAgRGV0ZXJtaW5lIGlmIHdlIHNoYWxsIGNoYW5nZSBMRUQgc3RhdGUgYWdhaW4uICovCi0JcExlZC0+QmxpbmtUaW1lcy0tOwotCXN3aXRjaCAocExlZC0+Q3VyckxlZFN0YXRlKSB7Ci0JY2FzZSBMRURfQkxJTktfTk9STUFMOgotCQlpZiAocExlZC0+QmxpbmtUaW1lcyA9PSAwKQotCQkJYlN0b3BCbGlua2luZyA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0JMSU5LX1N0YXJ0VG9CbGluazoKLQkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSAmJiBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkKLQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpICYmCi0JCSAgICAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpIHx8Ci0JCSAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKSkKLQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQllbHNlIGlmIChwTGVkLT5CbGlua1RpbWVzID09IDApCi0JCQliU3RvcEJsaW5raW5nID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfQkxJTktfV1BTOgotCQlpZiAocExlZC0+QmxpbmtUaW1lcyA9PSAwKQotCQkJYlN0b3BCbGlua2luZyA9IHRydWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoYlN0b3BCbGlua2luZykgewotCQkvKiBpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LmNwd20gPj0gUFNfU1RBVEVfUzIpICovCi0JCWlmICgwKSB7Ci0JCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCX0gZWxzZSBpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgJiYgKCFwTGVkLT5iTGVkT24pKSB7Ci0JCQlTd0xlZE9uKHBhZGFwdGVyLCBwTGVkKTsKLQkJfSBlbHNlIGlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSAmJiAgcExlZC0+YkxlZE9uKSB7Ci0JCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCX0KLQkJcExlZC0+QmxpbmtUaW1lcyA9IDA7Ci0JCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQl9IGVsc2UgewotCQkvKiAgQXNzaWduIExFRCBzdGF0ZSB0byB0b2dnbGUuICovCi0JCWlmIChwTGVkLT5CbGlua2luZ0xlZFN0YXRlID09IFJUV19MRURfT04pCi0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCWVsc2UKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCi0JCS8qICBTY2hlZHVsZSBhIHRpbWVyIHRvIHRvZ2dsZSBMRUQgc3RhdGUuICovCi0JCXN3aXRjaCAocExlZC0+Q3VyckxlZFN0YXRlKSB7Ci0JCWNhc2UgTEVEX0JMSU5LX05PUk1BTDoKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PUk1BTF9JTlRFUlZBTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBMRURfQkxJTktfU0xPV0xZOgotCQljYXNlIExFRF9CTElOS19TdGFydFRvQmxpbms6Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19TTE9XTFlfSU5URVJWQUwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTEVEX0JMSU5LX1dQUzoKLQkJCWlmIChwTGVkLT5CbGlua2luZ0xlZFN0YXRlID09IFJUV19MRURfT04pCi0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTE9OR19JTlRFUlZBTCk7Ci0JCQllbHNlCi0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTE9OR19JTlRFUlZBTCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NMT1dMWV9JTlRFUlZBTCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQgU3dMZWRCbGluazEoc3RydWN0IExFRF84NzF4ICpwTGVkKQogewogCXN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciA9IHBMZWQtPnBhZGFwdGVyOwpAQCAtMzE5LDQ0OSArMjM2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIFN3TGVkQmxpbmsyKHN0cnVjdCBMRURfODcxeCAqcExlZCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIgPSBwTGVkLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmKHBhZGFwdGVyLT5tbG1lcHJpdik7Ci0JdTggYlN0b3BCbGlua2luZyA9IGZhbHNlOwotCi0JLyogIENoYW5nZSBMRUQgYWNjb3JkaW5nIHRvIEJsaW5raW5nTGVkU3RhdGUgc3BlY2lmaWVkLiAqLwotCWlmIChwTGVkLT5CbGlua2luZ0xlZFN0YXRlID09IFJUV19MRURfT04pIHsKLQkJU3dMZWRPbihwYWRhcHRlciwgcExlZCk7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQmxpbmt0aW1lcyAoJWQpOiB0dXJuIG9uXG4iLCBwTGVkLT5CbGlua1RpbWVzKSk7Ci0JfSBlbHNlIHsKLQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkJsaW5rdGltZXMgKCVkKTogdHVybiBvZmZcbiIsIHBMZWQtPkJsaW5rVGltZXMpKTsKLQl9Ci0KLQlzd2l0Y2ggKHBMZWQtPkN1cnJMZWRTdGF0ZSkgewotCWNhc2UgTEVEX0JMSU5LX1NDQU46Ci0JCXBMZWQtPkJsaW5rVGltZXMtLTsKLQkJaWYgKHBMZWQtPkJsaW5rVGltZXMgPT0gMCkKLQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQlpZiAoYlN0b3BCbGlua2luZykgewotCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbikgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7Ci0JCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlTd0xlZE9uKHBhZGFwdGVyLCBwTGVkKTsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoInN0b3Agc2NhbiBibGluayBDdXJyTGVkU3RhdGUgJWRcbiIsIHBMZWQtPkN1cnJMZWRTdGF0ZSkpOwotCi0JCQl9IGVsc2UgaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKLQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgic3RvcCBzY2FuIGJsaW5rIEN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCQl9Ci0JCQlwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9IGVsc2UgewotCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbikgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJIGlmIChwTGVkLT5iTGVkT24pCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQllbHNlCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NDQU5fSU5URVJWQUxfQUxQSEEpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0JMSU5LX1RYUlg6Ci0JCXBMZWQtPkJsaW5rVGltZXMtLTsKLQkJaWYgKHBMZWQtPkJsaW5rVGltZXMgPT0gMCkKLQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQlpZiAoYlN0b3BCbGlua2luZykgewotCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbikgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7Ci0JCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlTd0xlZE9uKHBhZGFwdGVyLCBwTGVkKTsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoInN0b3AgQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKLQkJCX0gZWxzZSBpZiAoIWNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgewotCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJzdG9wIEN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCQl9Ci0JCQlwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlICE9IHJmX29uKSB7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIHsKLQkJCQkgaWYgKHBMZWQtPmJMZWRPbikKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCWVsc2UKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfRkFTVEVSX0lOVEVSVkFMX0FMUEhBKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIFN3TGVkQmxpbmszKHN0cnVjdCBMRURfODcxeCAqcExlZCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIgPSBwTGVkLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmKHBhZGFwdGVyLT5tbG1lcHJpdik7Ci0JdTggYlN0b3BCbGlua2luZyA9IGZhbHNlOwotCi0JLyogIENoYW5nZSBMRUQgYWNjb3JkaW5nIHRvIEJsaW5raW5nTGVkU3RhdGUgc3BlY2lmaWVkLiAqLwotCWlmIChwTGVkLT5CbGlua2luZ0xlZFN0YXRlID09IFJUV19MRURfT04pIHsKLQkJU3dMZWRPbihwYWRhcHRlciwgcExlZCk7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQmxpbmt0aW1lcyAoJWQpOiB0dXJuIG9uXG4iLCBwTGVkLT5CbGlua1RpbWVzKSk7Ci0JfSBlbHNlIHsKLQkJaWYgKHBMZWQtPkN1cnJMZWRTdGF0ZSAhPSBMRURfQkxJTktfV1BTX1NUT1ApCi0JCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQmxpbmt0aW1lcyAoJWQpOiB0dXJuIG9mZlxuIiwgcExlZC0+QmxpbmtUaW1lcykpOwotCX0KLQotCXN3aXRjaCAocExlZC0+Q3VyckxlZFN0YXRlKSB7Ci0JY2FzZSBMRURfQkxJTktfU0NBTjoKLQkJcExlZC0+QmxpbmtUaW1lcy0tOwotCQlpZiAocExlZC0+QmxpbmtUaW1lcyA9PSAwKQotCQkJYlN0b3BCbGlua2luZyA9IHRydWU7Ci0JCWlmIChiU3RvcEJsaW5raW5nKSB7Ci0JCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlICE9IHJmX29uKSB7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKLQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCWlmICghcExlZC0+YkxlZE9uKQotCQkJCQlTd0xlZE9uKHBhZGFwdGVyLCBwTGVkKTsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCQl9IGVsc2UgaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKLQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKLQkJCX0KLQkJCXBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlICE9IHJmX29uKSB7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQkJZWxzZQotCQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19TQ0FOX0lOVEVSVkFMX0FMUEhBKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9CTElOS19UWFJYOgotCQlwTGVkLT5CbGlua1RpbWVzLS07Ci0JCWlmIChwTGVkLT5CbGlua1RpbWVzID09IDApCi0JCQliU3RvcEJsaW5raW5nID0gdHJ1ZTsKLQkJaWYgKGJTdG9wQmxpbmtpbmcpIHsKLQkJCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYucmZfcHdyc3RhdGUgIT0gcmZfb24pIHsKLQkJCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCQl9IGVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgewotCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJaWYgKCFwTGVkLT5iTGVkT24pCi0JCQkJCVN3TGVkT24ocGFkYXB0ZXIsIHBMZWQpOwotCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKLQkJCX0gZWxzZSBpZiAoIWNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgewotCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQotCQkJCWlmIChwTGVkLT5iTGVkT24pCi0JCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCQl9Ci0JCQlwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlICE9IHJmX29uKSB7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQkJZWxzZQotCQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19GQVNURVJfSU5URVJWQUxfQUxQSEEpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0JMSU5LX1dQUzoKLQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJZWxzZQotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NDQU5fSU5URVJWQUxfQUxQSEEpOwotCQlicmVhazsKLQljYXNlIExFRF9CTElOS19XUFNfU1RPUDoJLyogV1BTIHN1Y2Nlc3MgKi8KLQkJaWYgKHBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPT0gUlRXX0xFRF9PTikgewotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfV1BTX1NVQ0VTU19JTlRFUlZBTF9BTFBIQSk7Ci0JCQliU3RvcEJsaW5raW5nID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQliU3RvcEJsaW5raW5nID0gdHJ1ZTsKLQkJfQotCQlpZiAoYlN0b3BCbGlua2luZykgewotCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbikgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQlTd0xlZE9uKHBhZGFwdGVyLCBwTGVkKTsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCQl9Ci0JCQlwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBTd0xlZEJsaW5rNChzdHJ1Y3QgTEVEXzg3MXggKnBMZWQpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyID0gcExlZC0+cGFkYXB0ZXI7Ci0Jc3RydWN0IGxlZF9wcml2ICpsZWRwcml2ID0gJihwYWRhcHRlci0+bGVkcHJpdik7Ci0Jc3RydWN0IExFRF84NzF4ICpwTGVkMSA9ICYobGVkcHJpdi0+U3dMZWQxKTsKLQl1OCBiU3RvcEJsaW5raW5nID0gZmFsc2U7Ci0KLQkvKiAgQ2hhbmdlIExFRCBhY2NvcmRpbmcgdG8gQmxpbmtpbmdMZWRTdGF0ZSBzcGVjaWZpZWQuICovCi0JaWYgKHBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPT0gUlRXX0xFRF9PTikgewotCQlTd0xlZE9uKHBhZGFwdGVyLCBwTGVkKTsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJCbGlua3RpbWVzICglZCk6IHR1cm4gb25cbiIsIHBMZWQtPkJsaW5rVGltZXMpKTsKLQl9IGVsc2UgewotCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQmxpbmt0aW1lcyAoJWQpOiB0dXJuIG9mZlxuIiwgcExlZC0+QmxpbmtUaW1lcykpOwotCX0KLQotCWlmICghcExlZDEtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgJiYgcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPT0gTEVEX1VOS05PV04pIHsKLQkJcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJcExlZDEtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZDEpOwotCX0KLQotCXN3aXRjaCAocExlZC0+Q3VyckxlZFN0YXRlKSB7Ci0JY2FzZSBMRURfQkxJTktfU0xPV0xZOgotCQlpZiAocExlZC0+YkxlZE9uKQotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQllbHNlCi0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTk9fTElOS19JTlRFUlZBTF9BTFBIQSk7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0JMSU5LX1N0YXJ0VG9CbGluazoKLQkJaWYgKHBMZWQtPmJMZWRPbikgewotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfU0xPV0xZX0lOVEVSVkFMKTsKLQkJfSBlbHNlIHsKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTk9STUFMX0lOVEVSVkFMKTsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9CTElOS19TQ0FOOgotCQlwTGVkLT5CbGlua1RpbWVzLS07Ci0JCWlmIChwTGVkLT5CbGlua1RpbWVzID09IDApCi0JCQliU3RvcEJsaW5raW5nID0gZmFsc2U7Ci0JCWlmIChiU3RvcEJsaW5raW5nKSB7Ci0JCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlICE9IHJmX29uICYmIHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZm9mZl9yZWFzb24gPiBSRl9DSEFOR0VfQllfUFMpIHsKLQkJCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCQl9IGVsc2UgewotCQkJCXBMZWQtPmJMZWROb0xpbmtCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfU0xPV0xZOwotCQkJCWlmIChwTGVkLT5iTGVkT24pCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQllbHNlCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PX0xJTktfSU5URVJWQUxfQUxQSEEpOwotCQkJfQotCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYucmZfcHdyc3RhdGUgIT0gcmZfb24gJiYgcGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJIGlmIChwTGVkLT5iTGVkT24pCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQllbHNlCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NDQU5fSU5URVJWQUxfQUxQSEEpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0JMSU5LX1RYUlg6Ci0JCXBMZWQtPkJsaW5rVGltZXMtLTsKLQkJaWYgKHBMZWQtPkJsaW5rVGltZXMgPT0gMCkKLQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQlpZiAoYlN0b3BCbGlua2luZykgewotCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbiAmJiBwYWRhcHRlci0+cHdyY3RybHByaXYucmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKSB7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIHsKLQkJCQlwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzID0gdHJ1ZTsKLQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfU0xPV0xZOwotCQkJCWlmIChwTGVkLT5iTGVkT24pCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQllbHNlCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PX0xJTktfSU5URVJWQUxfQUxQSEEpOwotCQkJfQotCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9IGVsc2UgewotCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbiAmJiBwYWRhcHRlci0+cHdyY3RybHByaXYucmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKSB7Ci0JCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIHsKLQkJCQkgaWYgKHBMZWQtPmJMZWRPbikKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCWVsc2UKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfRkFTVEVSX0lOVEVSVkFMX0FMUEhBKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9CTElOS19XUFM6Ci0JCWlmIChwTGVkLT5iTGVkT24pIHsKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NMT1dMWV9JTlRFUlZBTCk7Ci0JCX0gZWxzZSB7Ci0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PUk1BTF9JTlRFUlZBTCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfQkxJTktfV1BTX1NUT1A6CS8qIFdQUyBhdXRoZW50aWNhdGlvbiBmYWlsICovCi0JCWlmIChwTGVkLT5iTGVkT24pCi0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCWVsc2UKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCi0JCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PUk1BTF9JTlRFUlZBTCk7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0JMSU5LX1dQU19TVE9QX09WRVJMQVA6CS8qIFdQUyBzZXNzaW9uIG92ZXJsYXAgKi8KLQkJcExlZC0+QmxpbmtUaW1lcy0tOwotCQlpZiAocExlZC0+QmxpbmtUaW1lcyA9PSAwKSB7Ci0JCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCXBMZWQtPkJsaW5rVGltZXMgPSAxOwotCQkJZWxzZQotCQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKGJTdG9wQmxpbmtpbmcpIHsKLQkJCXBMZWQtPkJsaW5rVGltZXMgPSAxMDsKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTElOS19JTlRFUlZBTF9BTFBIQSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCWVsc2UKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTk9STUFMX0lOVEVSVkFMKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJTd0xlZEJsaW5rNCBDdXJyTGVkU3RhdGUgJWRcbiIsIHBMZWQtPkN1cnJMZWRTdGF0ZSkpOwotfQotCi1zdGF0aWMgdm9pZCBTd0xlZEJsaW5rNShzdHJ1Y3QgTEVEXzg3MXggKnBMZWQpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyID0gcExlZC0+cGFkYXB0ZXI7Ci0JdTggYlN0b3BCbGlua2luZyA9IGZhbHNlOwotCi0JLyogIENoYW5nZSBMRUQgYWNjb3JkaW5nIHRvIEJsaW5raW5nTGVkU3RhdGUgc3BlY2lmaWVkLiAqLwotCWlmIChwTGVkLT5CbGlua2luZ0xlZFN0YXRlID09IFJUV19MRURfT04pIHsKLQkJU3dMZWRPbihwYWRhcHRlciwgcExlZCk7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQmxpbmt0aW1lcyAoJWQpOiB0dXJuIG9uXG4iLCBwTGVkLT5CbGlua1RpbWVzKSk7Ci0JfSBlbHNlIHsKLQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkJsaW5rdGltZXMgKCVkKTogdHVybiBvZmZcbiIsIHBMZWQtPkJsaW5rVGltZXMpKTsKLQl9Ci0KLQlzd2l0Y2ggKHBMZWQtPkN1cnJMZWRTdGF0ZSkgewotCWNhc2UgTEVEX0JMSU5LX1NDQU46Ci0JCXBMZWQtPkJsaW5rVGltZXMtLTsKLQkJaWYgKHBMZWQtPkJsaW5rVGltZXMgPT0gMCkKLQkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwotCi0JCWlmIChiU3RvcEJsaW5raW5nKSB7Ci0JCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlICE9IHJmX29uICYmIHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZm9mZl9yZWFzb24gPiBSRl9DSEFOR0VfQllfUFMpIHsKLQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQkJfSBlbHNlIHsKLQkJCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJCWlmICghcExlZC0+YkxlZE9uKQotCQkJCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfRkFTVEVSX0lOVEVSVkFMX0FMUEhBKTsKLQkJCX0KLQotCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYucmZfcHdyc3RhdGUgIT0gcmZfb24gJiYgcGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCWVsc2UKLQkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfU0NBTl9JTlRFUlZBTF9BTFBIQSk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfQkxJTktfVFhSWDoKLQkJcExlZC0+QmxpbmtUaW1lcy0tOwotCQlpZiAocExlZC0+QmxpbmtUaW1lcyA9PSAwKQotCQkJYlN0b3BCbGlua2luZyA9IHRydWU7Ci0KLQkJaWYgKGJTdG9wQmxpbmtpbmcpIHsKLQkJCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYucmZfcHdyc3RhdGUgIT0gcmZfb24gJiYgcGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykgewotCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZCk7Ci0JCQl9IGVsc2UgewotCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJaWYgKCFwTGVkLT5iTGVkT24pCi0JCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX0ZBU1RFUl9JTlRFUlZBTF9BTFBIQSk7Ci0JCQl9Ci0KLQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYucmZfcHdyc3RhdGUgIT0gcmZfb24gJiYgcGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykgewotCQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJIGlmIChwTGVkLT5iTGVkT24pCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCQllbHNlCi0JCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX0ZBU1RFUl9JTlRFUlZBTF9BTFBIQSk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIlN3TGVkQmxpbms1IEN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFN3TGVkQmxpbms2KHN0cnVjdCBMRURfODcxeCAqcExlZCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIgPSBwTGVkLT5wYWRhcHRlcjsKLQotCS8qICBDaGFuZ2UgTEVEIGFjY29yZGluZyB0byBCbGlua2luZ0xlZFN0YXRlIHNwZWNpZmllZC4gKi8KLQlpZiAocExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9PSBSVFdfTEVEX09OKSB7Ci0JCVN3TGVkT24ocGFkYXB0ZXIsIHBMZWQpOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkJsaW5rdGltZXMgKCVkKTogdHVybiBvblxuIiwgcExlZC0+QmxpbmtUaW1lcykpOwotCX0gZWxzZSB7Ci0JCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJCbGlua3RpbWVzICglZCk6IHR1cm4gb2ZmXG4iLCBwTGVkLT5CbGlua1RpbWVzKSk7Ci0JfQotCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCI8PT09PSBibGluazZcbiIpKTsKLX0KLQogIC8qIEFMUEhBLCBhZGRlZCBieSBjaGl5b2tvLCAyMDA5MDEwNiAqLwogc3RhdGljIHZvaWQgU3dMZWRDb250cm9sTW9kZTEoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBlbnVtIExFRF9DVExfTU9ERSBMZWRBY3Rpb24pCiB7CkBAIC05NjksNjc2ICs0NDMsMTggQEAKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkxlZCAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7CiB9CiAKLSAvKiBBcmNhZHlhbi9TaXRlY29tICwgYWRkZWQgYnkgY2hpeW9rbywgMjAwOTAyMTYgKi8KLXN0YXRpYyB2b2lkIFN3TGVkQ29udHJvbE1vZGUyKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgZW51bSBMRURfQ1RMX01PREUgTGVkQWN0aW9uKQotewotCXN0cnVjdCBsZWRfcHJpdiAqbGVkcHJpdiA9ICYocGFkYXB0ZXItPmxlZHByaXYpOwotCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IExFRF84NzF4ICpwTGVkID0gJihsZWRwcml2LT5Td0xlZDApOwotCi0Jc3dpdGNoIChMZWRBY3Rpb24pIHsKLQljYXNlIExFRF9DVExfU0lURV9TVVJWRVk6Ci0JCWlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYykgewotCQl9IGVsc2UgaWYgKCFwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJaWYgKElTX0xFRF9XUFNfQkxJTktJTkcocExlZCkpCi0JCQkJcmV0dXJuOwotCi0JCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1NDQU47Ci0JCQlwTGVkLT5CbGlua1RpbWVzID0gMjQ7Ci0JCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCWVsc2UKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NDQU5fSU5URVJWQUxfQUxQSEEpOwotCQkgfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfVFg6Ci0JY2FzZSBMRURfQ1RMX1JYOgotCQlpZiAoKCFwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzKSAmJiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSkgewotCQkJaWYgKHBMZWQtPkN1cnJMZWRTdGF0ZSA9PSBMRURfQkxJTktfU0NBTiB8fCBJU19MRURfV1BTX0JMSU5LSU5HKHBMZWQpKQotCQkJCXJldHVybjsKLQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1RYUlg7Ci0JCQlwTGVkLT5CbGlua1RpbWVzID0gMjsKLQkJCWlmIChwTGVkLT5iTGVkT24pCi0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJZWxzZQotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfRkFTVEVSX0lOVEVSVkFMX0FMUEhBKTsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfTElOSzoKLQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCWlmIChwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0JCWlmIChwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX1NUQVJUX1dQUzogLyogd2FpdCB1bnRpbCB4aW5waW4gZmluaXNoICovCi0JY2FzZSBMRURfQ1RMX1NUQVJUX1dQU19CT1RUT046Ci0JCWlmICghcExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcykgewotCQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQkJCWlmIChwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQkJCXBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCAwKTsKLQkJIH0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX1NUT1BfV1BTOgotCQlwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYucmZfcHdyc3RhdGUgIT0gcmZfb24pIHsKLQkJCVN3TGVkT2ZmKHBhZGFwdGVyLCBwTGVkKTsKLQkJfSBlbHNlIHsKLQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgMCk7Ci0JCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX1NUT1BfV1BTX0ZBSUw6Ci0JCXBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbikgewotCQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQl9IGVsc2UgewotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJDdXJyTGVkU3RhdGUgJWRcbiIsIHBMZWQtPkN1cnJMZWRTdGF0ZSkpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9TVEFSVF9UT19MSU5LOgotCWNhc2UgTEVEX0NUTF9OT19MSU5LOgotCQlpZiAoIUlTX0xFRF9CTElOS0lORyhwTGVkKSkgewotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9QT1dFUl9PRkY6Ci0JCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCWlmIChwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0JCWlmIChwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJaWYgKHBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQotCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci19Ci0KLSAgLyogQ09SRUdBLCBhZGRlZCBieSBjaGl5b2tvLCAyMDA5MDMxNiAqLwotIHN0YXRpYyB2b2lkIFN3TGVkQ29udHJvbE1vZGUzKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgZW51bSBMRURfQ1RMX01PREUgTGVkQWN0aW9uKQotewotCXN0cnVjdCBsZWRfcHJpdiAqbGVkcHJpdiA9ICYocGFkYXB0ZXItPmxlZHByaXYpOwotCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IExFRF84NzF4ICpwTGVkID0gJihsZWRwcml2LT5Td0xlZDApOwotCi0Jc3dpdGNoIChMZWRBY3Rpb24pIHsKLQljYXNlIExFRF9DVExfU0lURV9TVVJWRVk6Ci0JCWlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYykgewotCQl9IGVsc2UgaWYgKCFwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJaWYgKElTX0xFRF9XUFNfQkxJTktJTkcocExlZCkpCi0JCQkJcmV0dXJuOwotCi0JCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1NDQU47Ci0JCQlwTGVkLT5CbGlua1RpbWVzID0gMjQ7Ci0JCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCWVsc2UKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NDQU5fSU5URVJWQUxfQUxQSEEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9UWDoKLQljYXNlIExFRF9DVExfUlg6Ci0JCWlmICgoIXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpICYmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpKSB7Ci0JCQlpZiAocExlZC0+Q3VyckxlZFN0YXRlID09IExFRF9CTElOS19TQ0FOIHx8IElTX0xFRF9XUFNfQkxJTktJTkcocExlZCkpCi0JCQkJcmV0dXJuOwotCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfVFhSWDsKLQkJCXBMZWQtPkJsaW5rVGltZXMgPSAyOwotCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQllbHNlCi0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19GQVNURVJfSU5URVJWQUxfQUxQSEEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9MSU5LOgotCQlpZiAoSVNfTEVEX1dQU19CTElOS0lORyhwTGVkKSkKLQkJCXJldHVybjsKLQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCWlmIChwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0JCWlmIChwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQotCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQlicmVhazsKLQljYXNlIExFRF9DVExfU1RBUlRfV1BTOiAvKiB3YWl0IHVudGlsIHhpbnBpbiBmaW5pc2ggKi8KLQljYXNlIExFRF9DVExfU1RBUlRfV1BTX0JPVFRPTjoKLQkJaWYgKCFwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJaWYgKHBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzKSB7Ci0JCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCQlwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJcExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfV1BTOwotCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQllbHNlCi0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19TQ0FOX0lOVEVSVkFMX0FMUEhBKTsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfU1RPUF9XUFM6Ci0JCWlmIChwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9IGVsc2UgewotCQkJcExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCX0KLQotCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfV1BTX1NUT1A7Ci0JCWlmIChwTGVkLT5iTGVkT24pIHsKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1dQU19TVUNFU1NfSU5URVJWQUxfQUxQSEEpOwotCQl9IGVsc2UgewotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9TVE9QX1dQU19GQUlMOgotCQlpZiAocExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcykgewotCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfQotCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQlicmVhazsKLQljYXNlIExFRF9DVExfU1RBUlRfVE9fTElOSzoKLQljYXNlIExFRF9DVExfTk9fTElOSzoKLQkJaWYgKCFJU19MRURfQkxJTktJTkcocExlZCkpIHsKLQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCAwKTsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfUE9XRVJfT0ZGOgotCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfQotCQlpZiAocExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0JCWlmIChwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0KLQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCAwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sCi0JCSAoIkN1cnJMZWRTdGF0ZSAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci19Ci0KLSAvKiBFZGltYXgtQmVsa2luLCBhZGRlZCBieSBjaGl5b2tvLCAyMDA5MDQxMyAqLwotc3RhdGljIHZvaWQgU3dMZWRDb250cm9sTW9kZTQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBlbnVtIExFRF9DVExfTU9ERSBMZWRBY3Rpb24pCi17Ci0Jc3RydWN0IGxlZF9wcml2ICpsZWRwcml2ID0gJihwYWRhcHRlci0+bGVkcHJpdik7Ci0Jc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3QgTEVEXzg3MXggKnBMZWQgPSAmKGxlZHByaXYtPlN3TGVkMCk7Ci0Jc3RydWN0IExFRF84NzF4ICpwTGVkMSA9ICYobGVkcHJpdi0+U3dMZWQxKTsKLQotCXN3aXRjaCAoTGVkQWN0aW9uKSB7Ci0JY2FzZSBMRURfQ1RMX1NUQVJUX1RPX0xJTks6Ci0JCWlmIChwTGVkMS0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcykgewotCQkJcExlZDEtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkMS0+QmxpbmtUaW1lcikpOwotCi0JCQlwTGVkMS0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJcExlZDEtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCi0JCQlpZiAocExlZDEtPmJMZWRPbikKLQkJCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQl9Ci0KLQkJaWYgKCFwTGVkLT5iTGVkU3RhcnRUb0xpbmtCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCWlmIChwTGVkLT5DdXJyTGVkU3RhdGUgPT0gTEVEX0JMSU5LX1NDQU4gfHwgSVNfTEVEX1dQU19CTElOS0lORyhwTGVkKSkKLQkJCQlyZXR1cm47Ci0JCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJaWYgKHBMZWQtPmJMZWROb0xpbmtCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJCXBMZWQtPmJMZWROb0xpbmtCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQotCQkJcExlZC0+YkxlZFN0YXJ0VG9MaW5rQmxpbmtJblByb2dyZXNzID0gdHJ1ZTsKLQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IExFRF9CTElOS19TdGFydFRvQmxpbms7Ci0JCQlpZiAocExlZC0+YkxlZE9uKSB7Ci0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NMT1dMWV9JTlRFUlZBTCk7Ci0JCQl9IGVsc2UgewotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PUk1BTF9JTlRFUlZBTCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX0xJTks6Ci0JY2FzZSBMRURfQ1RMX05PX0xJTks6Ci0JCS8qIExFRDEgc2V0dGluZ3MgKi8KLQkJaWYgKExlZEFjdGlvbiA9PSBMRURfQ1RMX0xJTkspIHsKLQkJCWlmIChwTGVkMS0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcykgewotCQkJCXBMZWQxLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQxLT5CbGlua1RpbWVyKSk7Ci0KLQkJCQlwTGVkMS0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJCXBMZWQxLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQotCQkJCWlmIChwTGVkMS0+YkxlZE9uKQotCQkJCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlpZiAocExlZC0+Q3VyckxlZFN0YXRlID09IExFRF9CTElOS19TQ0FOIHx8IElTX0xFRF9XUFNfQkxJTktJTkcocExlZCkpCi0JCQkJcmV0dXJuOwotCQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQotCQkJcExlZC0+YkxlZE5vTGlua0JsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfU0xPV0xZOwotCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQllbHNlCi0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19OT19MSU5LX0lOVEVSVkFMX0FMUEhBKTsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfU0lURV9TVVJWRVk6Ci0JCWlmICgocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMpICYmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpKSB7Ci0JCX0gZWxzZSBpZiAoIXBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlpZiAoSVNfTEVEX1dQU19CTElOS0lORyhwTGVkKSkKLQkJCQlyZXR1cm47Ci0KLQkJCWlmIChwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzKSB7Ci0JCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCQlwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCQl9Ci0JCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1NDQU47Ci0JCQlwTGVkLT5CbGlua1RpbWVzID0gMjQ7Ci0JCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCWVsc2UKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX1NDQU5fSU5URVJWQUxfQUxQSEEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9UWDoKLQljYXNlIExFRF9DVExfUlg6Ci0JCWlmICghcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcykgewotCQkJaWYgKHBMZWQtPkN1cnJMZWRTdGF0ZSA9PSBMRURfQkxJTktfU0NBTiB8fCBJU19MRURfV1BTX0JMSU5LSU5HKHBMZWQpKQotCQkJCXJldHVybjsKLQkJCWlmIChwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzKSB7Ci0JCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCQlwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCQl9Ci0JCQlwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzID0gdHJ1ZTsKLQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IExFRF9CTElOS19UWFJYOwotCQkJcExlZC0+QmxpbmtUaW1lcyA9IDI7Ci0JCQlpZiAocExlZC0+YkxlZE9uKQotCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJCWVsc2UKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX0ZBU1RFUl9JTlRFUlZBTF9BTFBIQSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX1NUQVJUX1dQUzogLyogd2FpdCB1bnRpbCB4aW5waW4gZmluaXNoICovCi0JY2FzZSBMRURfQ1RMX1NUQVJUX1dQU19CT1RUT046Ci0JCWlmIChwTGVkMS0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcykgewotCQkJcExlZDEtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkMS0+QmxpbmtUaW1lcikpOwotCi0JCQlwTGVkMS0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQkJcExlZDEtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCi0JCQlpZiAocExlZDEtPmJMZWRPbikKLQkJCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIDApOwotCQl9Ci0KLQkJaWYgKCFwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlpZiAocExlZC0+YkxlZE5vTGlua0JsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZE5vTGlua0JsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkJfQotCQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQkJCWlmIChwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQkJCXBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1dQUzsKLQkJCWlmIChwTGVkLT5iTGVkT24pIHsKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfU0xPV0xZX0lOVEVSVkFMKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTk9STUFMX0lOVEVSVkFMKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfU1RPUF9XUFM6CS8qIFdQUyBjb25uZWN0IHN1Y2Nlc3MgKi8KLQkJaWYgKHBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQotCQlwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzID0gdHJ1ZTsKLQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1NMT1dMWTsKLQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJZWxzZQotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCV9zZXRfdGltZXIoJihwTGVkLT5CbGlua1RpbWVyKSwgTEVEX0JMSU5LX05PX0xJTktfSU5URVJWQUxfQUxQSEEpOwotCi0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9TVE9QX1dQU19GQUlMOgkJLyogV1BTIGF1dGhlbnRpY2F0aW9uIGZhaWwgKi8KLQkJaWYgKHBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJcExlZC0+YkxlZE5vTGlua0JsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IExFRF9CTElOS19TTE9XTFk7Ci0JCWlmIChwTGVkLT5iTGVkT24pCi0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCWVsc2UKLQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19OT19MSU5LX0lOVEVSVkFMX0FMUEhBKTsKLQotCQkvKiBMRUQxIHNldHRpbmdzICovCi0JCWlmIChwTGVkMS0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcykKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkMS0+QmxpbmtUaW1lcikpOwotCQllbHNlCi0JCQlwTGVkMS0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCXBMZWQxLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfV1BTX1NUT1A7Ci0JCWlmIChwTGVkMS0+YkxlZE9uKQotCQkJcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJZWxzZQotCQkJcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19OT1JNQUxfSU5URVJWQUwpOwotCQlicmVhazsKLQljYXNlIExFRF9DVExfU1RPUF9XUFNfRkFJTF9PVkVSTEFQOgkvKiBXUFMgc2Vzc2lvbiBvdmVybGFwICovCi0JCWlmIChwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0JCXBMZWQtPmJMZWROb0xpbmtCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfU0xPV0xZOwotCQlpZiAocExlZC0+YkxlZE9uKQotCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQllbHNlCi0JCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCBMRURfQkxJTktfTk9fTElOS19JTlRFUlZBTF9BTFBIQSk7Ci0KLQkJLyogTEVEMSBzZXR0aW5ncyAqLwotCQlpZiAocExlZDEtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MpCi0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZDEtPkJsaW5rVGltZXIpKTsKLQkJZWxzZQotCQkJcExlZDEtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwotCQlwTGVkMS0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX1dQU19TVE9QX09WRVJMQVA7Ci0JCXBMZWQxLT5CbGlua1RpbWVzID0gMTA7Ci0JCWlmIChwTGVkMS0+YkxlZE9uKQotCQkJcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJZWxzZQotCQkJcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19OT1JNQUxfSU5URVJWQUwpOwotCQlicmVhazsKLQljYXNlIExFRF9DVExfUE9XRVJfT0ZGOgotCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKLQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCi0JCWlmIChwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZE5vTGlua0JsaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQl9Ci0JCWlmIChwTGVkLT5iTGVkTGlua0JsaW5rSW5Qcm9ncmVzcykgewotCQkJX2NhbmNlbF90aW1lcl9leCgmKHBMZWQtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQtPmJMZWRMaW5rQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJaWYgKHBMZWQtPmJMZWRXUFNCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJaWYgKHBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJfQotCQlpZiAocExlZC0+YkxlZFN0YXJ0VG9MaW5rQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJcExlZC0+YkxlZFN0YXJ0VG9MaW5rQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJaWYgKHBMZWQxLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKSB7Ci0JCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZDEtPkJsaW5rVGltZXIpKTsKLQkJCXBMZWQxLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJcExlZDEtPkJsaW5raW5nTGVkU3RhdGUgPSBMRURfVU5LTk9XTjsKLQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQlTd0xlZE9mZihwYWRhcHRlciwgcExlZDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkxlZCAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci19Ci0KLQotCi0gLyogU2VyY29tbS1CZWxraW4sIGFkZGVkIGJ5IGNoaXlva28sIDIwMDkwNDE1ICovCi1zdGF0aWMgdm9pZAotU3dMZWRDb250cm9sTW9kZTUoCi0Jc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLAotCWVudW0gTEVEX0NUTF9NT0RFIExlZEFjdGlvbgotKQotewotCXN0cnVjdCBsZWRfcHJpdiAqbGVkcHJpdiA9ICYocGFkYXB0ZXItPmxlZHByaXYpOwotCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IExFRF84NzF4ICpwTGVkID0gJihsZWRwcml2LT5Td0xlZDApOwotCi0Jc3dpdGNoIChMZWRBY3Rpb24pIHsKLQljYXNlIExFRF9DVExfUE9XRVJfT046Ci0JY2FzZSBMRURfQ1RMX05PX0xJTks6Ci0JY2FzZSBMRURfQ1RMX0xJTks6CS8qIHNvbGlkIGJsdWUgKi8KLQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0KLQkJX3NldF90aW1lcigmKHBMZWQtPkJsaW5rVGltZXIpLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX1NJVEVfU1VSVkVZOgotCQlpZiAoKHBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uYkJ1c3lUcmFmZmljKSAmJiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSkgewotCQl9IGVsc2UgaWYgKCFwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykgewotCQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCQlfY2FuY2VsX3RpbWVyX2V4KCYocExlZC0+QmxpbmtUaW1lcikpOwotCQkJCXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKLQkJCX0KLQkJCXBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzID0gdHJ1ZTsKLQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IExFRF9CTElOS19TQ0FOOwotCQkJcExlZC0+QmxpbmtUaW1lcyA9IDI0OwotCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQllbHNlCi0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19TQ0FOX0lOVEVSVkFMX0FMUEhBKTsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9DVExfVFg6Ci0JY2FzZSBMRURfQ1RMX1JYOgotCQlpZiAoIXBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCWlmIChwTGVkLT5DdXJyTGVkU3RhdGUgPT0gTEVEX0JMSU5LX1NDQU4pCi0JCQkJcmV0dXJuOwotCQkJcExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9IHRydWU7Ci0JCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfVFhSWDsKLQkJCXBMZWQtPkJsaW5rVGltZXMgPSAyOwotCQkJaWYgKHBMZWQtPmJMZWRPbikKLQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0JCQllbHNlCi0JCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT047Ci0JCQlfc2V0X3RpbWVyKCYocExlZC0+QmxpbmtUaW1lciksIExFRF9CTElOS19GQVNURVJfSU5URVJWQUxfQUxQSEEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0NUTF9QT1dFUl9PRkY6Ci0JCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwotCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PRkY7Ci0KLQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MpIHsKLQkJCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkLT5CbGlua1RpbWVyKSk7Ci0JCQlwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzID0gZmFsc2U7Ci0JCX0KLQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLCAoIkxlZCAlZFxuIiwgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci19Ci0KLSAvKiBXTkMtQ29yZWdhLCBhZGRlZCBieSBjaGl5b2tvLCAyMDA5MDkwMiAqLwotc3RhdGljIHZvaWQKLVN3TGVkQ29udHJvbE1vZGU2KAotCXN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwKLQllbnVtIExFRF9DVExfTU9ERSBMZWRBY3Rpb24KLSkKLXsKLQlzdHJ1Y3QgbGVkX3ByaXYgKmxlZHByaXYgPSAmKHBhZGFwdGVyLT5sZWRwcml2KTsKLQlzdHJ1Y3QgTEVEXzg3MXggKnBMZWQwID0gJihsZWRwcml2LT5Td0xlZDApOwotCi0Jc3dpdGNoIChMZWRBY3Rpb24pIHsKLQljYXNlIExFRF9DVExfUE9XRVJfT046Ci0JY2FzZSBMRURfQ1RMX0xJTks6Ci0JY2FzZSBMRURfQ1RMX05PX0xJTks6Ci0JCV9jYW5jZWxfdGltZXJfZXgoJihwTGVkMC0+QmxpbmtUaW1lcikpOwotCQlwTGVkMC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PTjsKLQkJcExlZDAtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwotCQlfc2V0X3RpbWVyKCYocExlZDAtPkJsaW5rVGltZXIpLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfQ1RMX1BPV0VSX09GRjoKLQkJU3dMZWRPZmYocGFkYXB0ZXIsIHBMZWQwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJsZWRjb250cm9sIDYgTGVkICVkXG4iLCBwTGVkMC0+Q3VyckxlZFN0YXRlKSk7Ci19Ci0KIC8qICAqLwogLyoJRGVzY3JpcHRpb246ICovCiAvKgkJSGFuZGxlciBmdW5jdGlvbiBvZiBMRUQgQmxpbmtpbmcuICovCi0vKgkJV2UgZGlzcGF0Y2ggYWN0dXJlIExFRCBibGluayBhY3Rpb24gYWNjb3JkaW5nIHRvIExlZFN0cmF0ZWd5LiAqLwogLyogICovCiB2b2lkIEJsaW5rSGFuZGxlcihzdHJ1Y3QgTEVEXzg3MXggKnBMZWQpCiB7CiAJc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyID0gcExlZC0+cGFkYXB0ZXI7Ci0Jc3RydWN0IGxlZF9wcml2ICpsZWRwcml2ID0gJihwYWRhcHRlci0+bGVkcHJpdik7CiAKIAlpZiAoKHBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKSB8fCAocGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkKSkKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChsZWRwcml2LT5MZWRTdHJhdGVneSkgewotCWNhc2UgU1dfTEVEX01PREUwOgotCQlTd0xlZEJsaW5rKHBMZWQpOwotCQlicmVhazsKLQljYXNlIFNXX0xFRF9NT0RFMToKLQkJU3dMZWRCbGluazEocExlZCk7Ci0JCWJyZWFrOwotCWNhc2UgU1dfTEVEX01PREUyOgotCQlTd0xlZEJsaW5rMihwTGVkKTsKLQkJYnJlYWs7Ci0JY2FzZSBTV19MRURfTU9ERTM6Ci0JCVN3TGVkQmxpbmszKHBMZWQpOwotCQlicmVhazsKLQljYXNlIFNXX0xFRF9NT0RFNDoKLQkJU3dMZWRCbGluazQocExlZCk7Ci0JCWJyZWFrOwotCWNhc2UgU1dfTEVEX01PREU1OgotCQlTd0xlZEJsaW5rNShwTGVkKTsKLQkJYnJlYWs7Ci0JY2FzZSBTV19MRURfTU9ERTY6Ci0JCVN3TGVkQmxpbms2KHBMZWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJU3dMZWRCbGluazEocExlZCk7CiB9CiAKIHZvaWQgTGVkQ29udHJvbDgxODhldShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gTEVEX0NUTF9NT0RFIExlZEFjdGlvbikKQEAgLTE2NjEsMzIgKzQ3Nyw1IEBACiAJICAgICBMZWRBY3Rpb24gPT0gTEVEX0NUTF9QT1dFUl9PTikpCiAJCXJldHVybjsKIAotCXN3aXRjaCAobGVkcHJpdi0+TGVkU3RyYXRlZ3kpIHsKLQljYXNlIFNXX0xFRF9NT0RFMDoKLQkJYnJlYWs7Ci0JY2FzZSBTV19MRURfTU9ERTE6Ci0JCVN3TGVkQ29udHJvbE1vZGUxKHBhZGFwdGVyLCBMZWRBY3Rpb24pOwotCQlicmVhazsKLQljYXNlIFNXX0xFRF9NT0RFMjoKLQkJU3dMZWRDb250cm9sTW9kZTIocGFkYXB0ZXIsIExlZEFjdGlvbik7Ci0JCWJyZWFrOwotCWNhc2UgU1dfTEVEX01PREUzOgotCQlTd0xlZENvbnRyb2xNb2RlMyhwYWRhcHRlciwgTGVkQWN0aW9uKTsKLQkJYnJlYWs7Ci0JY2FzZSBTV19MRURfTU9ERTQ6Ci0JCVN3TGVkQ29udHJvbE1vZGU0KHBhZGFwdGVyLCBMZWRBY3Rpb24pOwotCQlicmVhazsKLQljYXNlIFNXX0xFRF9NT0RFNToKLQkJU3dMZWRDb250cm9sTW9kZTUocGFkYXB0ZXIsIExlZEFjdGlvbik7Ci0JCWJyZWFrOwotCWNhc2UgU1dfTEVEX01PREU2OgotCQlTd0xlZENvbnRyb2xNb2RlNihwYWRhcHRlciwgTGVkQWN0aW9uKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywKLQkJICgiTGVkU3RyYXRlZ3k6JWQsIExlZEFjdGlvbiAlZFxuIiwKLQkJIGxlZHByaXYtPkxlZFN0cmF0ZWd5LCBMZWRBY3Rpb24pKTsKKwlTd0xlZENvbnRyb2xNb2RlMShwYWRhcHRlciwgTGVkQWN0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfbWxtZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lLmMKaW5kZXggNzY5ZDRkZC4uMTU1MjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lLmMKQEAgLTE3MjcsMTUgKzE3MjcsMTMgQEAKIAlpbnQJcmVzID0gX1NVQ0NFU1M7CiAKIAlwY21kID0gKHN0cnVjdAljbWRfb2JqICopcnR3X3ptYWxsb2Moc2l6ZW9mKHN0cnVjdAljbWRfb2JqKSk7Ci0JaWYgKHBjbWQgPT0gTlVMTCkgewotCQlyZXMgPSBfRkFJTDsgIC8qIHRyeSBhZ2FpbiAqLwotCQlnb3RvIGV4aXQ7Ci0JfQorCWlmIChwY21kID09IE5VTEwpCisJCXJldHVybiBfRkFJTDsgIC8qIHRyeSBhZ2FpbiAqLworCiAJcHNldGtleXBhcm0gPSAoc3RydWN0IHNldGtleV9wYXJtICopcnR3X3ptYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXRrZXlfcGFybSkpOwogCWlmIChwc2V0a2V5cGFybSA9PSBOVUxMKSB7Ci0JCWtmcmVlKHBjbWQpOwogCQlyZXMgPSBfRkFJTDsKLQkJZ290byBleGl0OworCQlnb3RvIGVycl9mcmVlX2NtZDsKIAl9CiAKIAlfcnR3X21lbXNldChwc2V0a2V5cGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBzZXRrZXlfcGFybSkpOwpAQCAtMTc4NCw3ICsxNzgyLDcgQEAKIAkJCSAoIlxuIHJ0d19zZXRfa2V5OnBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG09JXggKG11c3QgYmUgMSBvciAyIG9yIDQgb3IgNSlcbiIsCiAJCQkgcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSkpOwogCQlyZXMgPSBfRkFJTDsKLQkJZ290byBleGl0OworCQlnb3RvIGVycl9mcmVlX3Bhcm07CiAJfQogCXBjbWQtPmNtZGNvZGUgPSBfU2V0S2V5X0NNRF87CiAJcGNtZC0+cGFybWJ1ZiA9ICh1OCAqKXBzZXRrZXlwYXJtOwpAQCAtMTc5Myw3ICsxNzkxLDEyIEBACiAJcGNtZC0+cnNwc3ogPSAwOwogCV9ydHdfaW5pdF9saXN0aGVhZCgmcGNtZC0+bGlzdCk7CiAJcmVzID0gcnR3X2VucXVldWVfY21kKHBjbWRwcml2LCBwY21kKTsKLWV4aXQ6CisJcmV0dXJuIHJlczsKKworZXJyX2ZyZWVfcGFybToKKwlrZnJlZShwc2V0a2V5cGFybSk7CitlcnJfZnJlZV9jbWQ6CisJa2ZyZWUocGNtZCk7CiAJcmV0dXJuIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lX2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tbG1lX2V4dC5jCmluZGV4IDNlZDU5NDEuLmY1YjQ5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfbWxtZV9leHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X21sbWVfZXh0LmMKQEAgLTUwMiw4ICs1MDIsNiBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlfbWd0X2Rpc3BhdGNoZXIocGFkYXB0ZXIsIHB0YWJsZSwgcHJlY3ZfZnJhbWUpOwotCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKQotCQkJcnR3X2hvc3RhcGRfbWxtZV9yeChwYWRhcHRlciwgcHJlY3ZfZnJhbWUpOwogCQlicmVhazsKIAl9CiAjZWxzZQpAQCAtNjU1Myw3ICs2NTUxLDYgQEAKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdgkqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8JKnBtbG1laW5mbyA9ICYocG1sbWVleHQtPm1sbWV4dF9pbmZvKTsKLQlfX2xlMzIgbGUzMl90bXA7CiAKIAlsZW4gPSBwYWNrZXRfbGVuIC0gc2l6ZW9mKHN0cnVjdCBydHdfaWVlZTgwMjExX2hkcl8zYWRkcik7CiAKQEAgLTY2MDAsMTMgKzY1OTcsMTMgQEAKIAkJcmV0dXJuIF9GQUlMOwogCX0KIAotCWlmICgqKHAgKyAxKSkgeworCWlmIChsZW4pIHsKIAkJaWYgKGxlbiA+IE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKSB7CiAJCQlEQkdfODhFKCIlcygpLSVkOiBJRSB0b28gbG9uZyAoJWQpIGZvciBzdXJ2ZXkgZXZlbnRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgbGVuKTsKIAkJCXJldHVybiBfRkFJTDsKIAkJfQotCQltZW1jcHkoYnNzaWQtPlNzaWQuU3NpZCwgKHAgKyAyKSwgKihwICsgMSkpOwotCQlic3NpZC0+U3NpZC5Tc2lkTGVuZ3RoID0gKihwICsgMSk7CisJCW1lbWNweShic3NpZC0+U3NpZC5Tc2lkLCAocCArIDIpLCBsZW4pOworCQlic3NpZC0+U3NpZC5Tc2lkTGVuZ3RoID0gbGVuOwogCX0gZWxzZSB7CiAJCWJzc2lkLT5Tc2lkLlNzaWRMZW5ndGggPSAwOwogCX0KQEAgLTY2NjcsOCArNjY2NCw4IEBACiAJCXJldHVybiBfU1VDQ0VTUzsKIAl9CiAKLQltZW1jcHkoJmxlMzJfdG1wLCBydHdfZ2V0X2JlYWNvbl9pbnRlcnZhbF9mcm9tX2llKGJzc2lkLT5JRXMpLCAyKTsKLQlic3NpZC0+Q29uZmlndXJhdGlvbi5CZWFjb25QZXJpb2QgPSBsZTMyX3RvX2NwdShsZTMyX3RtcCk7CisJYnNzaWQtPkNvbmZpZ3VyYXRpb24uQmVhY29uUGVyaW9kID0KKwkJZ2V0X3VuYWxpZ25lZF9sZTE2KHJ0d19nZXRfYmVhY29uX2ludGVydmFsX2Zyb21faWUoYnNzaWQtPklFcykpOwogCiAJdmFsMTYgPSBydHdfZ2V0X2NhcGFiaWxpdHkoKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopYnNzaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X21wLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X21wLmMKaW5kZXggNzA1ZjY2Ni4uMTc0MjdhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19tcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfbXAuYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+CiAKLSNpbmNsdWRlICJvZG1fcHJlY29tcC5oIgogI2luY2x1ZGUgInJ0bDgxODhlX2hhbC5oIgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19wMnAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfcDJwLmMKaW5kZXggOTQyNWM0OS4uMGExNWY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19wMnAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3AycC5jCkBAIC0xNTA1LDkgKzE1MDUsOSBAQAogCiAJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0ZJTkRfUEhBU0VfU0VBUkNIKTsKIAotICAgICAgICBzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci0gICAgICAgIHJ0d19zaXRlc3VydmV5X2NtZChwYWRhcHRlciwgJnNzaWQsIDEsIE5VTEwsIDApOwotICAgICAgICBzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CisJcnR3X3NpdGVzdXJ2ZXlfY21kKHBhZGFwdGVyLCAmc3NpZCwgMSwgTlVMTCwgMCk7CisJc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CiB9CiAKIHZvaWQgcDJwX2NvbmN1cnJlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19wd3JjdHJsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3B3cmN0cmwuYwppbmRleCBmNjU4MzczLi43MzllMjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3B3cmN0cmwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3B3cmN0cmwuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAlib29sIHJldCA9IGZhbHNlOwogCi0JaWYgKGFkYXB0ZXItPnB3cmN0cmxwcml2Lmlwc19kZW55X3RpbWUgPj0gamlmZmllcykKKwlpZiAodGltZV9hZnRlcl9lcShhZGFwdGVyLT5wd3JjdHJscHJpdi5pcHNfZGVueV90aW1lLCBqaWZmaWVzKSkKIAkJZ290byBleGl0OwogCiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FTT0NfU1RBVEV8V0lGSV9TSVRFX01PTklUT1IpIHx8CkBAIC00OTcsMTUgKzQ5Nyw2IEBACiAJX2luaXRfdGltZXIoJihwd3JjdHJscHJpdi0+cHdyX3N0YXRlX2NoZWNrX3RpbWVyKSwgcGFkYXB0ZXItPnBuZXRkZXYsIHB3cl9zdGF0ZV9jaGVja19oYW5kbGVyLCAodTggKilwYWRhcHRlcik7CiB9CiAKLXU4IHJ0d19pbnRlcmZhY2VfcHNfZnVuYyhzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gaGFsX2ludGZfcHNfZnVuYyBlZnVuY19pZCwgdTggKnZhbCkKLXsKLQl1OCBiUmVzdWx0ID0gdHJ1ZTsKLQlydHdfaGFsX2ludGZfcHNfZnVuYyhwYWRhcHRlciwgZWZ1bmNfaWQsIHZhbCk7Ci0KLQlyZXR1cm4gYlJlc3VsdDsKLX0KLQotCiBpbmxpbmUgdm9pZCBydHdfc2V0X2lwc19kZW55KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTMyIG1zKQogewogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnB3cnByaXYgPSAmcGFkYXB0ZXItPnB3cmN0cmxwcml2OwpAQCAtNTIzLDkgKzUxNCwxMSBAQAogewogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnB3cnByaXYgPSAmcGFkYXB0ZXItPnB3cmN0cmxwcml2OwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzOwogCWludCByZXQgPSBfU1VDQ0VTUzsKIAotCWlmIChwd3Jwcml2LT5pcHNfZGVueV90aW1lIDwgamlmZmllcyArIHJ0d19tc190b19zeXN0aW1lKGlwc19kZWZmZXJfbXMpKQorCWV4cGlyZXMgPSBqaWZmaWVzICsgcnR3X21zX3RvX3N5c3RpbWUoaXBzX2RlZmZlcl9tcyk7CisJaWYgKHRpbWVfYmVmb3JlKHB3cnByaXYtPmlwc19kZW55X3RpbWUsIGV4cGlyZXMpKQogCQlwd3Jwcml2LT5pcHNfZGVueV90aW1lID0gamlmZmllcyArIHJ0d19tc190b19zeXN0aW1lKGlwc19kZWZmZXJfbXMpOwogCiB7CkBAIC01ODAsNyArNTczLDggQEAKIAl9CiAKIGV4aXQ6Ci0JaWYgKHB3cnByaXYtPmlwc19kZW55X3RpbWUgPCBqaWZmaWVzICsgcnR3X21zX3RvX3N5c3RpbWUoaXBzX2RlZmZlcl9tcykpCisJZXhwaXJlcyA9IGppZmZpZXMgKyBydHdfbXNfdG9fc3lzdGltZShpcHNfZGVmZmVyX21zKTsKKwlpZiAodGltZV9iZWZvcmUocHdycHJpdi0+aXBzX2RlbnlfdGltZSwgZXhwaXJlcykpCiAJCXB3cnByaXYtPmlwc19kZW55X3RpbWUgPSBqaWZmaWVzICsgcnR3X21zX3RvX3N5c3RpbWUoaXBzX2RlZmZlcl9tcyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfcmVjdi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19yZWN2LmMKaW5kZXggZTMwNWQ0My4uMGU3M2RmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19yZWN2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19yZWN2LmMKQEAgLTYzLDggKzYzLDYgQEAKIAogCWludAlyZXMgPSBfU1VDQ0VTUzsKIAotCXNwaW5fbG9ja19pbml0KCZwcmVjdnByaXYtPmxvY2spOwotCiAJX3J0d19pbml0X3F1ZXVlKCZwcmVjdnByaXYtPmZyZWVfcmVjdl9xdWV1ZSk7CiAJX3J0d19pbml0X3F1ZXVlKCZwcmVjdnByaXYtPnJlY3ZfcGVuZGluZ19xdWV1ZSk7CiAJX3J0d19pbml0X3F1ZXVlKCZwcmVjdnByaXYtPnVjX3N3ZGVjX3BlbmRpbmdfcXVldWUpOwpAQCAtNzMsOCArNzEsNiBAQAogCiAJcHJlY3Zwcml2LT5mcmVlX3JlY3ZmcmFtZV9jbnQgPSBOUl9SRUNWRlJBTUU7CiAKLQlydHdfb3NfcmVjdl9yZXNvdXJjZV9pbml0KHByZWN2cHJpdiwgcGFkYXB0ZXIpOwotCiAJcHJlY3Zwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZiA9IHZ6YWxsb2MoTlJfUkVDVkZSQU1FICogc2l6ZW9mKHN0cnVjdCByZWN2X2ZyYW1lKSArIFJYRlJBTUVfQUxJR05fU1opOwogCiAJaWYgKHByZWN2cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgPT0gTlVMTCkgewpAQCAtMTAxLDggKzk3LDYgQEAKIAl9CiAJcHJlY3Zwcml2LT5yeF9wZW5kaW5nX2NudCA9IDE7CiAKLQlzZW1hX2luaXQoJnByZWN2cHJpdi0+YWxscnhyZXR1cm5ldnQsIDApOwotCiAJcmVzID0gcnR3X2hhbF9pbml0X3JlY3ZfcHJpdihwYWRhcHRlcik7CiAKIAlfaW5pdF90aW1lcigmcHJlY3Zwcml2LT5zaWduYWxfc3RhdF90aW1lciwgcGFkYXB0ZXItPnBuZXRkZXYsIFJUV19USU1FUl9IRExfTkFNRShzaWduYWxfc3RhdCksIHBhZGFwdGVyKTsKQEAgLTEyMyw4ICsxMTcsNiBAQAogCiAJcnR3X2ZyZWVfdWNfc3dkZWNfcGVuZGluZ19xdWV1ZShwYWRhcHRlcik7CiAKLQlydHdfb3NfcmVjdl9yZXNvdXJjZV9mcmVlKHByZWN2cHJpdik7Ci0KIAlpZiAocHJlY3Zwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZikgewogCQl2ZnJlZShwcmVjdnByaXYtPnBhbGxvY2F0ZWRfZnJhbWVfYnVmKTsKIAl9CkBAIC0yODksNTUgKzI4MSw2IEBACiAJcmV0dXJuIGNudDsKIH0KIAotaW50IHJ0d19lbnF1ZXVlX3JlY3ZidWZfdG9faGVhZChzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmLCBzdHJ1Y3QgX19xdWV1ZSAqcXVldWUpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+bG9jayk7Ci0KLQlydHdfbGlzdF9kZWxldGUoJnByZWN2YnVmLT5saXN0KTsKLQlydHdfbGlzdF9pbnNlcnRfaGVhZCgmcHJlY3ZidWYtPmxpc3QsIGdldF9saXN0X2hlYWQocXVldWUpKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+bG9jayk7Ci0KLQlyZXR1cm4gX1NVQ0NFU1M7Ci19Ci0KLWludCBydHdfZW5xdWV1ZV9yZWN2YnVmKHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYsIHN0cnVjdCBfX3F1ZXVlICpxdWV1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGlycUw7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBpcnFMKTsKLQotCXJ0d19saXN0X2RlbGV0ZSgmcHJlY3ZidWYtPmxpc3QpOwotCi0JcnR3X2xpc3RfaW5zZXJ0X3RhaWwoJnByZWN2YnVmLT5saXN0LCBnZXRfbGlzdF9oZWFkKHF1ZXVlKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycUwpOwotCXJldHVybiBfU1VDQ0VTUzsKLX0KLQotc3RydWN0IHJlY3ZfYnVmICpydHdfZGVxdWV1ZV9yZWN2YnVmIChzdHJ1Y3QgX19xdWV1ZSAqcXVldWUpCi17Ci0JdW5zaWduZWQgbG9uZyBpcnFMOwotCXN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsICpwaGVhZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxTCk7Ci0KLQlpZiAoX3J0d19xdWV1ZV9lbXB0eShxdWV1ZSkpIHsKLQkJcHJlY3ZidWYgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXBoZWFkID0gZ2V0X2xpc3RfaGVhZChxdWV1ZSk7Ci0KLQkJcGxpc3QgPSBwaGVhZC0+bmV4dDsKLQotCQlwcmVjdmJ1ZiA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHJlY3ZfYnVmLCBsaXN0KTsKLQotCQlydHdfbGlzdF9kZWxldGUoJnByZWN2YnVmLT5saXN0KTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxTCk7Ci0KLQlyZXR1cm4gcHJlY3ZidWY7Ci19Ci0KIHN0YXRpYyBpbnQgcmVjdmZyYW1lX2Noa21pYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSkKIHsKQEAgLTU1NCw2ICs0OTcsNyBAQAogCXUxNglldGhlcl90eXBlOwogCXUxNiAgZWFwb2xfdHlwZSA9IDB4ODg4ZTsvKiBmb3IgRnVuaWEgQkQncyBXUEEgaXNzdWUgKi8KIAlzdHJ1Y3QgcnhfcGt0X2F0dHJpYiAqcGF0dHJpYjsKKwlfX2JlMTYgYmVfdG1wOwogCiAKIAlwc3RhcHJpdiA9ICZhZGFwdGVyLT5zdGFwcml2OwpAQCAtNTczLDggKzUxNyw4IEBACiAJaWYgKGF1dGhfYWxnID09IDIpIHsKIAkJLyogZ2V0IGV0aGVyX3R5cGUgKi8KIAkJcHRyID0gcHRyICsgcGZoZHItPmF0dHJpYi5oZHJsZW4gKyBMTENfSEVBREVSX1NJWkU7Ci0JCW1lbWNweSgmZXRoZXJfdHlwZSwgcHRyLCAyKTsKLQkJZXRoZXJfdHlwZSA9IG50b2hzKCh1bnNpZ25lZCBzaG9ydClldGhlcl90eXBlKTsKKwkJbWVtY3B5KCZiZV90bXAsIHB0ciwgMik7CisJCWV0aGVyX3R5cGUgPSBudG9ocyhiZV90bXApOwogCiAJCWlmICgocHN0YSAhPSBOVUxMKSAmJiAocHN0YS0+aWVlZTgwMjF4X2Jsb2NrZWQpKSB7CiAJCQkvKiBibG9ja2VkICovCkBAIC02NDcsOCArNTkxLDggQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXZvaWQgcHJvY2Vzc19wd3JiaXRfZGF0YShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIHZvaWQgcHJvY2Vzc19wd3JiaXRfZGF0YShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkJc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogI2lmZGVmIENPTkZJR184OEVVX0FQX01PREUKIAl1bnNpZ25lZCBjaGFyIHB3cmJpdDsKQEAgLTE4MjIsOCArMTc2Niw4IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWludCBlbnF1ZXVlX3Jlb3JkZXJfcmVjdmZyYW1lKHN0cnVjdCByZWN2X3Jlb3JkZXJfY3RybCAqcHJlb3JkZXJfY3RybCwKLQkJCSAgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmZyYW1lKQorc3RhdGljIGludCBlbnF1ZXVlX3Jlb3JkZXJfcmVjdmZyYW1lKHN0cnVjdCByZWN2X3Jlb3JkZXJfY3RybCAqcHJlb3JkZXJfY3RybCwKKwkJCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmZyYW1lKQogewogCXN0cnVjdCByeF9wa3RfYXR0cmliICpwYXR0cmliID0gJnByZnJhbWUtPmF0dHJpYjsKIAlzdHJ1Y3QgX19xdWV1ZSAqcHBlbmRpbmdfcmVjdmZyYW1lX3F1ZXVlID0gJnByZW9yZGVyX2N0cmwtPnBlbmRpbmdfcmVjdmZyYW1lX3F1ZXVlOwpAQCAtMTg3MSw3ICsxODE1LDcgQEAKIAkJCXJldHVybiB0cnVlOwogCiAJCXByaGRyID0gY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3QgcmVjdl9mcmFtZSwgbGlzdCk7Ci0JICAgICAgICBwYXR0cmliID0gJnByaGRyLT5hdHRyaWI7CisJCXBhdHRyaWIgPSAmcHJoZHItPmF0dHJpYjsKIAkJcHJlb3JkZXJfY3RybC0+aW5kaWNhdGVfc2VxID0gcGF0dHJpYi0+c2VxX251bTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfc2VjdXJpdHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfc2VjdXJpdHkuYwppbmRleCBjNGIxNmVhLi4wNTMzNTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d19zZWN1cml0eS5jCkBAIC0xMTUzLDcgKzExNTMsNyBAQAogCiAJLyogSW5zZXJ0IE1JQyBpbnRvIHBheWxvYWQgKi8KIAlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotCXBmcmFtZVtwYXlsb2FkX2luZGV4K2pdID0gbWljW2pdOwkvKiBtZXNzYWdlW3BheWxvYWRfaW5kZXgral0gPSBtaWNbal07ICovCisJCXBmcmFtZVtwYXlsb2FkX2luZGV4K2pdID0gbWljW2pdOwogCiAJcGF5bG9hZF9pbmRleCA9IGhkcmxlbiArIDg7CiAJZm9yIChpID0gMDsgaSA8IG51bV9ibG9ja3M7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d193bGFuX3V0aWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfd2xhbl91dGlsLmMKaW5kZXggM2RkOTA1OS4uNmZiOGNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9jb3JlL3J0d193bGFuX3V0aWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3dsYW5fdXRpbC5jCkBAIC0xNTk5LDEzICsxNTk5LDE4IEBACiAJcElFID0gKHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWUgKilydHdfZ2V0X2llKHB2YXJfaWUsIF9TVVBQT1JURURSQVRFU19JRV8sICZpZV9sZW4sIHZhcl9pZV9sZW4pOwogCWlmIChwSUUgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOworCWlmIChpZV9sZW4gPiBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVgpCisJCXJldHVybiBfRkFJTDsKIAogCW1lbWNweShwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2NhbV9pZHhdLlN1cHBvcnRlZFJhdGVzLCBwSUUtPmRhdGEsIGllX2xlbik7CiAJc3VwcG9ydFJhdGVOdW0gPSBpZV9sZW47CiAKIAlwSUUgPSAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZSAqKXJ0d19nZXRfaWUocHZhcl9pZSwgX0VYVF9TVVBQT1JURURSQVRFU19JRV8sICZpZV9sZW4sIHZhcl9pZV9sZW4pOwotCWlmIChwSUUpCisJaWYgKHBJRSkgeworCQlpZiAoc3VwcG9ydFJhdGVOdW0gKyBpZV9sZW4gPiBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVgpCisJCQlyZXR1cm4gX0ZBSUw7CiAJCW1lbWNweSgocG1sbWVpbmZvLT5GV19zdGFfaW5mb1tjYW1faWR4XS5TdXBwb3J0ZWRSYXRlcyArIHN1cHBvcnRSYXRlTnVtKSwgcElFLT5kYXRhLCBpZV9sZW4pOworCX0KIAogCXJldHVybiBfU1VDQ0VTUzsKIH0KQEAgLTE2NTYsMjYgKzE2NjEsMyBAQAogewogCXJ0d19oYWxfYmNuX3JlbGF0ZWRfcmVnX3NldHRpbmcocGFkYXB0ZXIpOwogfQotCi1zdGF0aWMgc3RydWN0IGFkYXB0ZXIgKnBidWRkeV9wYWRhcHRlcjsKLQotaW50IHJ0d19oYW5kbGVfZHVhbG1hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBpbml0KQotewotCWludCBzdGF0dXMgPSBfU1VDQ0VTUzsKLQotCWlmIChpbml0KSB7Ci0JCWlmIChwYnVkZHlfcGFkYXB0ZXIgPT0gTlVMTCkgewotCQkJcGJ1ZGR5X3BhZGFwdGVyID0gYWRhcHRlcjsKLQkJCURCR184OEUoIiVzKCk6IHBidWRkeV9wYWRhcHRlciA9PSBOVUxMLCBTZXQgcGJ1ZGR5X3BhZGFwdGVyXG4iLCBfX2Z1bmNfXyk7Ci0JCX0gZWxzZSB7Ci0JCQlhZGFwdGVyLT5wYnVkZHlfYWRhcHRlciA9IHBidWRkeV9wYWRhcHRlcjsKLQkJCXBidWRkeV9wYWRhcHRlci0+cGJ1ZGR5X2FkYXB0ZXIgPSBhZGFwdGVyOwotCQkJLyogIGNsZWFyIGdsb2JhbCB2YWx1ZSAqLwotCQkJcGJ1ZGR5X3BhZGFwdGVyID0gTlVMTDsKLQkJCURCR184OEUoIiVzKCk6IHBidWRkeV9wYWRhcHRlciBleGlzdCwgRXhjaGFuZ2UgSW5mb3JtYXRpb25cbiIsIF9fZnVuY19fKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXBidWRkeV9wYWRhcHRlciA9IE5VTEw7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2NvcmUvcnR3X3htaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfeG1pdC5jCmluZGV4IDhkNDI2NWYuLjE0MTNlYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfeG1pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvY29yZS9ydHdfeG1pdC5jCkBAIC02MjEsOCArNjIxLDYgQEAKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sIF9kcnZfaW5mb18sICgidXBkYXRlX2F0dHJpYjogYnN3ZW5jID0gZmFsc2VcbiIpKTsKIAl9CiAKLQlydHdfc2V0X3R4X2Noa3N1bV9vZmZsb2FkKHBrdCwgcGF0dHJpYik7Ci0KIAl1cGRhdGVfYXR0cmliX3BoeV9pbmZvKHBhdHRyaWIsIHBzdGEpOwogCiBleGl0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvSGFsUGh5UmZfODE4OGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL0hhbFBoeVJmXzgxODhlLmMKaW5kZXggMDU2MDUyZGQuLjdjMjI2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL0hhbFBoeVJmXzgxODhlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvSGFsUGh5UmZfODE4OGUuYwpAQCAtODA0LDI0ICs4MDQsMTIgQEAKIAl9CiB9CiAKLS8qICAqLwotLyogIDIwMTEvMDcvMjYgTUggQWRkIGFuIEFQSSBmb3IgdGVzdGluZyBJUUsgZmFpbCBjYXNlLiAqLwotLyogICovCi0vKiAgTVAgQWxyZWFkeSBkZWNsYXJlIGluIG9kbS5jICovCi1zdGF0aWMgYm9vbCBPRE1fQ2hlY2tQb3dlclN0YXR1cyhzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlcikKLXsKLQlyZXR1cm4JdHJ1ZTsKLX0KLQogdm9pZCBfUEhZX1NhdmVBRERBUmVnaXN0ZXJzKHN0cnVjdCBhZGFwdGVyICphZGFwdCwgdTMyICpBRERBUmVnLCB1MzIgKkFEREFCYWNrdXAsIHUzMiBSZWdpc3Rlck51bSkKIHsKIAl1MzIgaTsKIAlzdHJ1Y3QgaGFsX2RhdGFfODE4OGUJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKGFkYXB0KTsKIAlzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqZG1fb2RtID0gJnBIYWxEYXRhLT5vZG1wcml2OwogCi0JaWYgKCFPRE1fQ2hlY2tQb3dlclN0YXR1cyhhZGFwdCkpCi0JCXJldHVybjsKLQogCU9ETV9SVF9UUkFDRShkbV9vZG0sIE9ETV9DT01QX0NBTElCUkFUSU9OLCBPRE1fREJHX0xPVUQsICgiU2F2ZSBBRERBIHBhcmFtZXRlcnMuXG4iKSk7CiAJZm9yIChpID0gMDsgaSA8IFJlZ2lzdGVyTnVtOyBpKyspIHsKIAkJQUREQUJhY2t1cFtpXSA9IFBIWV9RdWVyeUJCUmVnKGFkYXB0LCBBRERBUmVnW2ldLCBiTWFza0RXb3JkKTsKQEAgLTEyOTQsOCArMTI4Miw2IEBACiAJYm9vbCBpczJ0OwogCiAJaXMydCA9IChkbV9vZG0tPlJGVHlwZSA9PSBPRE1fMlQyUikgPyB0cnVlIDogZmFsc2U7Ci0JaWYgKCFPRE1fQ2hlY2tQb3dlclN0YXR1cyhhZGFwdCkpCi0JCXJldHVybjsKIAogCWlmICghKGRtX29kbS0+U3VwcG9ydEFiaWxpdHkgJiBPRE1fUkZfQ0FMSUJSQVRJT04pKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9oYWxfaW50Zi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvaGFsX2ludGYuYwppbmRleCBkNzVjYTdhLi5kMGFjNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9oYWxfaW50Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL2hhbF9pbnRmLmMKQEAgLTYwLDEzICs2MCw2IEBACiAJCWFkYXB0LT5IYWxGdW5jLmRtX2luaXQoYWRhcHQpOwogfQogCi12b2lkIHJ0d19oYWxfZG1fZGVpbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdCkKLXsKLQkvKiAgY2FuY2VsIGRtICB0aW1lciAqLwotCWlmIChhZGFwdC0+SGFsRnVuYy5kbV9kZWluaXQpCi0JCWFkYXB0LT5IYWxGdW5jLmRtX2RlaW5pdChhZGFwdCk7Ci19Ci0KIHZvaWQgcnR3X2hhbF9zd19sZWRfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHQpCiB7CiAJaWYgKGFkYXB0LT5IYWxGdW5jLkluaXRTd0xlZHMpCkBAIC0yMDcsMTUgKzIwMCw2IEBACiAJcmV0dXJuIF9GQUlMOwogfQogCi11OCBydHdfaGFsX2ludGZfcHNfZnVuYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHQsCi0JCQllbnVtIGhhbF9pbnRmX3BzX2Z1bmMgZWZ1bmNfaWQsIHU4ICp2YWwpCi17Ci0JaWYgKGFkYXB0LT5IYWxGdW5jLmludGVyZmFjZV9wc19mdW5jKQotCQlyZXR1cm4gYWRhcHQtPkhhbEZ1bmMuaW50ZXJmYWNlX3BzX2Z1bmMoYWRhcHQsIGVmdW5jX2lkLAotCQkJCQkJCSAgIHZhbCk7Ci0JcmV0dXJuIF9GQUlMOwotfQotCiBzMzIgcnR3X2hhbF94bWl0KHN0cnVjdCBhZGFwdGVyICphZGFwdCwgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpCiB7CiAJaWYgKGFkYXB0LT5IYWxGdW5jLmhhbF94bWl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvb2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9vZG0uYwppbmRleCA4OWEyNmUzLi4yYTBhYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9vZG0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9vZG0uYwpAQCAtMTgzLDcgKzE4Myw2IEBACiAJb2RtX1JhdGVBZGFwdGl2ZU1hc2tJbml0KHBETV9PZG0pOwogCiAJb2RtX1ByaW1hcnlDQ0FfSW5pdChwRE1fT2RtKTsgICAgLyogIEdhcnkgKi8KLQlvZG1fRHluYW1pY0JCUG93ZXJTYXZpbmdJbml0KHBETV9PZG0pOwogCW9kbV9EeW5hbWljVHhQb3dlckluaXQocERNX09kbSk7CiAJb2RtX1RYUG93ZXJUcmFja2luZ0luaXQocERNX09kbSk7CiAJT0RNX0VkY2FUdXJib0luaXQocERNX09kbSk7CkBAIC0yMTUsOCArMjE0LDYgQEAKIAogCW9kbV9SZWZyZXNoUmF0ZUFkYXB0aXZlTWFzayhwRE1fT2RtKTsKIAotCW9kbV9EeW5hbWljQkJQb3dlclNhdmluZyhwRE1fT2RtKTsKLQlvZG1fRHluYW1pY1ByaW1hcnlDQ0EocERNX09kbSk7CiAJaWYgKChwRE1fT2RtLT5BbnREaXZUeXBlID09ICBDR19UUlhfSFdfQU5URElWKQl8fAogCSAgICAocERNX09kbS0+QW50RGl2VHlwZSA9PSBDR0NTX1JYX0hXX0FOVERJVikJfHwKIAkgICAgKHBETV9PZG0tPkFudERpdlR5cGUgPT0gQ0dfVFJYX1NNQVJUX0FOVERJVikpCkBAIC01MTQsNjQgKzUxMSwxMCBAQAogCXN0cnVjdCBydHdfZGlnICpwRE1fRGlnVGFibGUgPSAmcERNX09kbS0+RE1fRGlnVGFibGU7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwRE1fT2RtLT5BZGFwdGVyOwogCi0JT0RNX1JUX1RSQUNFKHBETV9PZG0sIE9ETV9DT01QX0RJRywgT0RNX0RCR19MT1VELAotCQkgICAgICgiT0RNX1JFRyhJR0lfQSxwRE1fT2RtKT0weCV4LCBPRE1fQklUKElHSSxwRE1fT2RtKT0weCV4XG4iLAotCQkgICAgIE9ETV9SRUcoSUdJX0EsIHBETV9PZG0pLCBPRE1fQklUKElHSSwgcERNX09kbSkpKTsKLQogCWlmIChwRE1fRGlnVGFibGUtPkN1cklHVmFsdWUgIT0gQ3VycmVudElHSSkgewotCQlQSFlfU2V0QkJSZWcoYWRhcHRlciwgT0RNX1JFRyhJR0lfQSwgcERNX09kbSksIE9ETV9CSVQoSUdJLCBwRE1fT2RtKSwgQ3VycmVudElHSSk7Ci0JCU9ETV9SVF9UUkFDRShwRE1fT2RtLCBPRE1fQ09NUF9ESUcsIE9ETV9EQkdfTE9VRCwgKCJDdXJyZW50SUdJKDB4JTAyeCkuXG4iLCBDdXJyZW50SUdJKSk7Ci0JCS8qIHBETV9EaWdUYWJsZS0+UHJlSUdWYWx1ZSA9IHBETV9EaWdUYWJsZS0+Q3VySUdWYWx1ZTsgKi8KKwkJUEhZX1NldEJCUmVnKGFkYXB0ZXIsIE9ETV9SRUdfSUdJX0FfMTFOLCBPRE1fQklUX0lHSV8xMU4sIEN1cnJlbnRJR0kpOwogCQlwRE1fRGlnVGFibGUtPkN1cklHVmFsdWUgPSBDdXJyZW50SUdJOwogCX0KLQlPRE1fUlRfVFJBQ0UocERNX09kbSwgT0RNX0NPTVBfRElHLCBPRE1fREJHX0xPVUQsICgiT0RNX1dyaXRlX0RJRygpOkN1cnJlbnRJR0k9MHgleFxuIiwgQ3VycmVudElHSSkpOwotCi0vKiAgQWRkIGJ5IE5laWwgQ2hlbiB0byBlbmFibGUgZWRjY2EgdG8gTVAgUGxhdGZvcm0gKi8KLX0KLQotLyogTmVlZCBMUFMgbW9kZSBmb3IgQ0UgcGxhdGZvcm0gLS0yMDEyLS0wOC0tMjQtLS0gKi8KLS8qIDg3MjNBUy84MTg5RVMgKi8KLXZvaWQgb2RtX0RJR2J5UlNTSV9MUFMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKnBBZGFwdGVyID0gcERNX09kbS0+QWRhcHRlcjsKLQlzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgKnBGYWxzZUFsbUNudCA9ICZwRE1fT2RtLT5GYWxzZUFsbUNudDsKLQotCXU4IFJTU0lfTG93ZXIgPSBETV9ESUdfTUlOX05JQzsgICAvKiAweDFFIG9yIDB4MUMgKi8KLQl1OCBiRndDdXJyZW50SW5QU01vZGUgPSBmYWxzZTsKLQl1OCBDdXJyZW50SUdJID0gcERNX09kbS0+UlNTSV9NaW47Ci0KLQlDdXJyZW50SUdJID0gQ3VycmVudElHSSArIFJTU0lfT0ZGU0VUX0RJRzsKLQliRndDdXJyZW50SW5QU01vZGUgPSBwQWRhcHRlci0+cHdyY3RybHByaXYuYkZ3Q3VycmVudEluUFNNb2RlOwotCi0JLyogIFVzaW5nIEZXIFBTIG1vZGUgdG8gbWFrZSBJR0kgKi8KLQlpZiAoYkZ3Q3VycmVudEluUFNNb2RlKSB7Ci0JCU9ETV9SVF9UUkFDRShwRE1fT2RtLCBPRE1fQ09NUF9ESUcsIE9ETV9EQkdfTE9VRCwgKCItLS1OZWlsLS0tb2RtX0RJRyBpcyBpbiBMUFMgbW9kZVxuIikpOwotCQkvKiBBZGp1c3QgYnkgIEZBIGluIExQUyBNT0RFICovCi0JCWlmIChwRmFsc2VBbG1DbnQtPkNudF9hbGwgPiBETV9ESUdfRkFfVEgyX0xQUykKLQkJCUN1cnJlbnRJR0kgPSBDdXJyZW50SUdJKzI7Ci0JCWVsc2UgaWYgKHBGYWxzZUFsbUNudC0+Q250X2FsbCA+IERNX0RJR19GQV9USDFfTFBTKQotCQkJQ3VycmVudElHSSA9IEN1cnJlbnRJR0krMTsKLQkJZWxzZSBpZiAocEZhbHNlQWxtQ250LT5DbnRfYWxsIDwgRE1fRElHX0ZBX1RIMF9MUFMpCi0JCQlDdXJyZW50SUdJID0gQ3VycmVudElHSS0xOwotCX0gZWxzZSB7Ci0JCUN1cnJlbnRJR0kgPSBSU1NJX0xvd2VyOwotCX0KLQotCS8qIExvd2VyIGJvdW5kIGNoZWNraW5nICovCi0KLQkvKiBSU1NJIExvd2VyIGJvdW5kIGNoZWNrICovCi0JaWYgKChwRE1fT2RtLT5SU1NJX01pbi0xMCkgPiBETV9ESUdfTUlOX05JQykKLQkJUlNTSV9Mb3dlciA9IChwRE1fT2RtLT5SU1NJX01pbi0xMCk7Ci0JZWxzZQotCQlSU1NJX0xvd2VyID0gRE1fRElHX01JTl9OSUM7Ci0KLQkvKiBVcHBlciBhbmQgTG93ZXIgQm91bmQgY2hlY2tpbmcgKi8KLQkgaWYgKEN1cnJlbnRJR0kgPiBETV9ESUdfTUFYX05JQykKLQkJQ3VycmVudElHSSA9IERNX0RJR19NQVhfTklDOwotCSBlbHNlIGlmIChDdXJyZW50SUdJIDwgUlNTSV9Mb3dlcikKLQkJQ3VycmVudElHSSA9IFJTU0lfTG93ZXI7Ci0KLQlPRE1fV3JpdGVfRElHKHBETV9PZG0sIEN1cnJlbnRJR0kpOy8qIE9ETV9Xcml0ZV9ESUcocERNX09kbSwgcERNX0RpZ1RhYmxlLT5DdXJJR1ZhbHVlKTsgKi8KIH0KIAogdm9pZCBvZG1fRElHSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSkKQEAgLTU3OSw3ICs1MjIsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcERNX09kbS0+QWRhcHRlcjsKIAlzdHJ1Y3QgcnR3X2RpZyAqcERNX0RpZ1RhYmxlID0gJnBETV9PZG0tPkRNX0RpZ1RhYmxlOwogCi0JcERNX0RpZ1RhYmxlLT5DdXJJR1ZhbHVlID0gKHU4KSBQSFlfUXVlcnlCQlJlZyhhZGFwdGVyLCBPRE1fUkVHKElHSV9BLCBwRE1fT2RtKSwgT0RNX0JJVChJR0ksIHBETV9PZG0pKTsKKwlwRE1fRGlnVGFibGUtPkN1cklHVmFsdWUgPSAodTgpIFBIWV9RdWVyeUJCUmVnKGFkYXB0ZXIsIE9ETV9SRUdfSUdJX0FfMTFOLCBPRE1fQklUX0lHSV8xMU4pOwogCXBETV9EaWdUYWJsZS0+UnNzaUxvd1RocmVzaAk9IERNX0RJR19USFJFU0hfTE9XOwogCXBETV9EaWdUYWJsZS0+UnNzaUhpZ2hUaHJlc2gJPSBETV9ESUdfVEhSRVNIX0hJR0g7CiAJcERNX0RpZ1RhYmxlLT5GQUxvd1RocmVzaAk9IERNX2ZhbHNlX0FMQVJNX1RIUkVTSF9MT1c7CkBAIC04OTAsNjQgKzgzMywxMSBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdCA9IHBETV9PZG0tPkFkYXB0ZXI7CiAKIAlpZiAocERNX0RpZ1RhYmxlLT5DdXJDQ0tfQ0NBVGhyZXMgIT0gQ3VyQ0NLX0NDQVRocmVzKQkJLyogbW9kaWZ5IGJ5IEd1by5NaW5nemhpIDIwMTItMDEtMDMgKi8KLQkJcnR3X3dyaXRlOChhZGFwdCwgT0RNX1JFRyhDQ0tfQ0NBLCBwRE1fT2RtKSwgQ3VyQ0NLX0NDQVRocmVzKTsKKwkJcnR3X3dyaXRlOChhZGFwdCwgT0RNX1JFR19DQ0tfQ0NBXzExTiwgQ3VyQ0NLX0NDQVRocmVzKTsKIAlwRE1fRGlnVGFibGUtPlByZUNDS19DQ0FUaHJlcyA9IHBETV9EaWdUYWJsZS0+Q3VyQ0NLX0NDQVRocmVzOwogCXBETV9EaWdUYWJsZS0+Q3VyQ0NLX0NDQVRocmVzID0gQ3VyQ0NLX0NDQVRocmVzOwogfQogCi0vKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAzIEJCIFBvd2VyIFNhdmUgKi8KLS8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXZvaWQgb2RtX0R5bmFtaWNCQlBvd2VyU2F2aW5nSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSkKLXsKLQlzdHJ1Y3QgcnRsX3BzICpwRE1fUFNUYWJsZSA9ICZwRE1fT2RtLT5ETV9QU1RhYmxlOwotCi0JcERNX1BTVGFibGUtPlByZUNDQVN0YXRlID0gQ0NBX01BWDsKLQlwRE1fUFNUYWJsZS0+Q3VyQ0NBU3RhdGUgPSBDQ0FfTUFYOwotCXBETV9QU1RhYmxlLT5QcmVSRlN0YXRlID0gUkZfTUFYOwotCXBETV9QU1RhYmxlLT5DdXJSRlN0YXRlID0gUkZfTUFYOwotCXBETV9QU1RhYmxlLT5Sc3NpX3ZhbF9taW4gPSAwOwotCXBETV9QU1RhYmxlLT5pbml0aWFsaXplID0gMDsKLX0KLQotdm9pZCBvZG1fRHluYW1pY0JCUG93ZXJTYXZpbmcoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pCi17Ci19Ci0KLXZvaWQgb2RtXzFSX0NDQShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBETV9PZG0tPkFkYXB0ZXI7Ci0Jc3RydWN0IHJ0bF9wcyAqcERNX1BTVGFibGUgPSAmcERNX09kbS0+RE1fUFNUYWJsZTsKLQotCWlmIChwRE1fT2RtLT5SU1NJX01pbiAhPSAweEZGKSB7Ci0JCWlmIChwRE1fUFNUYWJsZS0+UHJlQ0NBU3RhdGUgPT0gQ0NBXzJSKSB7Ci0JCQlpZiAocERNX09kbS0+UlNTSV9NaW4gPj0gMzUpCi0JCQkJcERNX1BTVGFibGUtPkN1ckNDQVN0YXRlID0gQ0NBXzFSOwotCQkJZWxzZQotCQkJCXBETV9QU1RhYmxlLT5DdXJDQ0FTdGF0ZSA9IENDQV8yUjsKLQkJfSBlbHNlIHsKLQkJCWlmIChwRE1fT2RtLT5SU1NJX01pbiA8PSAzMCkKLQkJCQlwRE1fUFNUYWJsZS0+Q3VyQ0NBU3RhdGUgPSBDQ0FfMlI7Ci0JCQllbHNlCi0JCQkJcERNX1BTVGFibGUtPkN1ckNDQVN0YXRlID0gQ0NBXzFSOwotCQl9Ci0JfSBlbHNlIHsKLQkJcERNX1BTVGFibGUtPkN1ckNDQVN0YXRlID0gQ0NBX01BWDsKLQl9Ci0KLQlpZiAocERNX1BTVGFibGUtPlByZUNDQVN0YXRlICE9IHBETV9QU1RhYmxlLT5DdXJDQ0FTdGF0ZSkgewotCQlpZiAocERNX1BTVGFibGUtPkN1ckNDQVN0YXRlID09IENDQV8xUikgewotCQkJaWYgKHBETV9PZG0tPlJGVHlwZSA9PSBPRE1fMlQyUikKLQkJCQlQSFlfU2V0QkJSZWcoYWRhcHRlciwgMHhjMDQsIGJNYXNrQnl0ZTAsIDB4MTMpOwotCQkJZWxzZQotCQkJCVBIWV9TZXRCQlJlZyhhZGFwdGVyLCAweGMwNCwgYk1hc2tCeXRlMCwgMHgyMyk7Ci0JCX0gZWxzZSB7Ci0JCQlQSFlfU2V0QkJSZWcoYWRhcHRlciwgMHhjMDQsIGJNYXNrQnl0ZTAsIDB4MzMpOwotCQl9Ci0JCXBETV9QU1RhYmxlLT5QcmVDQ0FTdGF0ZSA9IHBETV9QU1RhYmxlLT5DdXJDQ0FTdGF0ZTsKLQl9Ci19Ci0KIHZvaWQgT0RNX1JGX1NhdmluZyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggYkZvcmNlSW5Ob3JtYWwpCiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwRE1fT2RtLT5BZGFwdGVyOwpAQCAtMTEzMywxMCArMTAyMyw2IEBACiAJb2RtX1JlZnJlc2hSYXRlQWRhcHRpdmVNYXNrQ0UocERNX09kbSk7CiB9CiAKLXZvaWQgb2RtX1JlZnJlc2hSYXRlQWRhcHRpdmVNYXNrTVAoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pCi17Ci19Ci0KIHZvaWQgb2RtX1JlZnJlc2hSYXRlQWRhcHRpdmVNYXNrQ0Uoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pCiB7CiAJdTggaTsKQEAgLTExNjUsMTAgKzEwNTEsNiBAQAogCX0KIH0KIAotdm9pZCBvZG1fUmVmcmVzaFJhdGVBZGFwdGl2ZU1hc2tBUEFEU0woc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pCi17Ci19Ci0KIC8qICBSZXR1cm4gVmFsdWU6IGJvb2wgKi8KIC8qICAtIHRydWU6IFJBVFJTdGF0ZSBpcyBjaGFuZ2VkLiAqLwogYm9vbCBPRE1fUkFTdGF0ZUNoZWNrKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCBzMzIgUlNTSSwgYm9vbCBiRm9yY2VVcGRhdGUsIHU4ICpwUkFUUlN0YXRlKQpAQCAtMTIzOSwxNSArMTEyMSw2IEBACiAJLyogIDIwMTIvMDEvMTIgTUggQWNjb3JkaW5nIHRvIEx1a2UncyBzdWdnZXN0aW9uLCBvbmx5IGhpZ2ggcG93ZXIgd2lsbCBzdXBwb3J0IHRoZSBmZWF0dXJlLiAqLwogCWlmICghcERNX09kbS0+RXh0UEEpCiAJCXJldHVybjsKLQotCS8qICAyMDExLzA5LzI5IE1IIEluIEhXIGludGVncmF0aW9uIGZpcnN0IHN0YWdlLCB3ZSBwcm92aWRlIDQgZGlmZmVyZW50IGhhbmRsZSB0byBvcGVyYXRlICovCi0JLyogIGF0IHRoZSBzYW1lIHRpbWUuIEluIHRoZSBzdGFnZTIvMywgd2UgbmVlZCB0byBwcml2ZSB1bml2ZXJzYWwgaW50ZXJmYWNlIGFuZCBtZXJnZSBhbGwgKi8KLQkvKiAgSFcgZHluYW1pYyBtZWNoYW5pc20uICovCi0Jb2RtX0R5bmFtaWNUeFBvd2VyTklDKHBETV9PZG0pOwotfQotCi12b2lkIG9kbV9EeW5hbWljVHhQb3dlck5JQyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSkKLXsKIH0KIAogLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTM4NiwyMiArMTI1OSw2IEBACiAJfQogfQogCi0vKiBhbnRlbm5hIG1hcHBpbmcgaW5mbyAqLwotLyogIDE6IHJpZ2h0LXNpZGUgYW50ZW5uYSAqLwotLyogIDIvMDogbGVmdC1zaWRlIGFudGVubmEgKi8KLS8qIFBETV9TV0FUX1RhYmxlLT5DQ0tfQW50MV9DbnQgL09GRE1fQW50MV9DbnQ6ICBmb3IgcmlnaHQtc2lkZSBhbnRlbm5hOiAgIEFudDoxICAgIFJ4RGVmYXVsdEFudDEgKi8KLS8qIFBETV9TV0FUX1RhYmxlLT5DQ0tfQW50Ml9DbnQgL09GRE1fQW50Ml9DbnQ6ICBmb3IgbGVmdC1zaWRlIGFudGVubmE6ICAgICBBbnQ6MCAgICBSeERlZmF1bHRBbnQyICovCi0vKiAgV2Ugc2VsZWN0IGxlZnQgYW50ZW5uYSBhcyBkZWZhdWx0IGFudGVubmEgaW4gaW5pdGlhbCBwcm9jZXNzLCBtb2RpZnkgaXQgYXMgbmVlZGVkICovCi0vKiAgKi8KLQotLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogMyBTVyBBbnRlbm5hIERpdmVyc2l0eSAqLwotLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi12b2lkIG9kbV9Td0FudERpdkNoa0FudFN3aXRjaENhbGxiYWNrKHZvaWQgKkZ1bmN0aW9uQ29udGV4dCkKLXsKLX0KLQogLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogMyBTVyBBbnRlbm5hIERpdmVyc2l0eSAqLwogLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTUyNywyOCArMTM4NCwzIEBACiAJcHhtaXRwcml2LT5sYXN0X3R4X2J5dGVzID0gcHhtaXRwcml2LT50eF9ieXRlczsKIAlwcmVjdnByaXYtPmxhc3RfcnhfYnl0ZXMgPSBwcmVjdnByaXYtPnJ4X2J5dGVzOwogfQotCi11MzIgQ29udmVydFRvX2RCKHUzMiBWYWx1ZSkKLXsKLQl1OCBpOwotCXU4IGo7Ci0JdTMyIGRCOwotCi0JVmFsdWUgPSBWYWx1ZSAmIDB4RkZGRjsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChWYWx1ZSA8PSBkQl9JbnZlcnRfVGFibGVbaV1bMTFdKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGkgPj0gOCkKLQkJcmV0dXJuIDk2OwkvKiAgbWF4aW11bSA5NiBkQiAqLwotCi0JZm9yIChqID0gMDsgaiA8IDEyOyBqKyspIHsKLQkJaWYgKFZhbHVlIDw9IGRCX0ludmVydF9UYWJsZVtpXVtqXSkKLQkJCWJyZWFrOwotCX0KLQotCWRCID0gaSoxMiArIGogKyAxOwotCi0JcmV0dXJuIGRCOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvb2RtX0hXQ29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9vZG1fSFdDb25maWcuYwppbmRleCBhNzU1ZGYzLi5mMmUxZDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9vZG1fSFdDb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9vZG1fSFdDb25maWcuYwpAQCAtMjc1LDEwICsyNzUsNiBAQAogCWRtX29kbS0+RE1fRmF0VGFibGUuYW50c2VsX3J4X2tlZXBfMiA9IHBQaHlTdGFScHQtPmFudHNlbF9yeF9rZWVwXzI7CiB9CiAKLXZvaWQgb2RtX0luaXRfUlNTSUZvckRNKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpkbV9vZG0pCi17Ci19Ci0KIHN0YXRpYyB2b2lkIG9kbV9Qcm9jZXNzX1JTU0lGb3JETShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqZG1fb2RtLAogCQkJCSAgc3RydWN0IG9kbV9waHlfc3RhdHVzX2luZm8gKnBQaHlJbmZvLAogCQkJCSAgc3RydWN0IG9kbV9wZXJfcGt0X2luZm8gKnBQa3RpbmZvKQpAQCAtNDM2LDE0ICs0MzIsNiBAQAogCU9ETV9QaHlTdGF0dXNRdWVyeV85MkNTZXJpZXMoZG1fb2RtLCBwUGh5SW5mbywgcFBoeVN0YXR1cywgcFBrdGluZm8pOwogfQogCi0vKiAgRm9yIGZ1dHVyZSB1c2UuICovCi12b2lkIE9ETV9NYWNTdGF0dXNRdWVyeShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqZG1fb2RtLCB1OCAqbWFjX3N0YXQsCi0JCQl1OCBtYWNpZCwgYm9vbCBwa3RfbWF0Y2hfYnNzaWQsCi0JCQlib29sIHBrdHRvc2VsZiwgYm9vbCBwa3RfYmVhY29uKQotewotCS8qICAyMDExLzEwLzE5IERyaXZlciB0ZWFtIHdpbGwgaGFuZGxlIGluIHRoZSBmdXR1cmUuICovCi19Ci0KIGVudW0gSEFMX1NUQVRVUyBPRE1fQ29uZmlnUkZXaXRoSGVhZGVyRmlsZShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqZG1fb2RtLAogCQkJCQkgICBlbnVtIHJmX3JhZGlvX3BhdGggY29udGVudCwKIAkJCQkJICAgZW51bSByZl9yYWRpb19wYXRoIHJmcGF0aCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL29kbV9SVEw4MTg4RS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvb2RtX1JUTDgxODhFLmMKaW5kZXggMzIzZWI5My4uYTI0ZDk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvb2RtX1JUTDgxODhFLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvb2RtX1JUTDgxODhFLmMKQEAgLTIwLDE4ICsyMCw2IEBACiAKICNpbmNsdWRlICJvZG1fcHJlY29tcC5oIgogCi12b2lkIE9ETV9ESUdfTG93ZXJCb3VuZF84OEUoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKmRtX29kbSkKLXsKLQlzdHJ1Y3QgcnR3X2RpZyAqcERNX0RpZ1RhYmxlID0gJmRtX29kbS0+RE1fRGlnVGFibGU7Ci0KLQlpZiAoZG1fb2RtLT5BbnREaXZUeXBlID09IENHX1RSWF9IV19BTlRESVYpIHsKLQkJcERNX0RpZ1RhYmxlLT5yeF9nYWluX3JhbmdlX21pbiA9ICh1OCkgcERNX0RpZ1RhYmxlLT5BbnREaXZfUlNTSV9tYXg7Ci0JCU9ETV9SVF9UUkFDRShkbV9vZG0sIE9ETV9DT01QX0FOVF9ESVYsIE9ETV9EQkdfTE9VRCwKLQkJCSAgICAgKCJPRE1fRElHX0xvd2VyQm91bmRfODhFKCk6IHBETV9EaWdUYWJsZS0+QW50RGl2X1JTU0lfbWF4PSVkXG4iLCBwRE1fRGlnVGFibGUtPkFudERpdl9SU1NJX21heCkpOwotCX0KLQkvKiBJZiBvbmx5IG9uZSBFbnRyeSBjb25uZWN0ZWQgKi8KLX0KLQogc3RhdGljIHZvaWQgb2RtX1JYX0hXQW50RGl2SW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqZG1fb2RtKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZG1fb2RtLT5BZGFwdGVyOwpAQCAtMzg4LDE1ICszNzYsMyBAQAogCVByaW1hcnlDQ0EtPk1vbml0b3JfZmxhZyA9IDA7CiAJUHJpbWFyeUNDQS0+UHJpQ0NBX2ZsYWcgPSAwOwogfQotCi1ib29sIE9ETV9EeW5hbWljUHJpbWFyeUNDQV9EdXBSVFMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKmRtX29kbSkKLXsKLQlzdHJ1Y3QgZHluX3ByaW1hcnlfY2NhICpQcmltYXJ5Q0NBID0gJihkbV9vZG0tPkRNX1ByaUNDQSk7Ci0KLQlyZXR1cm4JUHJpbWFyeUNDQS0+RHVwUlRTX2ZsYWc7Ci19Ci0KLXZvaWQgb2RtX0R5bmFtaWNQcmltYXJ5Q0NBKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpkbV9vZG0pCi17Ci0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGVfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhlX2RtLmMKaW5kZXggY2Y4OGJmMi4uZDVjZDMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGVfZG0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9kbS5jCkBAIC0zMSwxMCArMzEsNiBAQAogCiAjaW5jbHVkZSA8cnRsODE4OGVfaGFsLmg+CiAKLXN0YXRpYyB2b2lkIGRtX0NoZWNrU3RhdGlzdGljcyhzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlcikKLXsKLX0KLQogLyogIEluaXRpYWxpemUgR1BJTyBzZXR0aW5nIHJlZ2lzdGVycyAqLwogc3RhdGljIHZvaWQgZG1fSW5pdEdQSU9TZXR0aW5nKHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyKQogewpAQCAtMTczLDEyICsxNjksNiBAQAogCWlmIChBZGFwdGVyLT53ZGluZm8ucDJwX3BzX21vZGUpCiAJCWZ3X3BzX2F3YWtlID0gZmFsc2U7CiAKLQlpZiAoaHdfaW5pdF9jb21wbGV0ZWQgJiYgKCghZndfY3VyX2luX3BzKSAmJiBmd19wc19hd2FrZSkpIHsKLQkJLyogIENhbGN1bGF0ZSBUeC9SeCBzdGF0aXN0aWNzLiAqLwotCQlkbV9DaGVja1N0YXRpc3RpY3MoQWRhcHRlcik7Ci0KLQl9Ci0KIAkvKiBPRE0gKi8KIAlpZiAoaHdfaW5pdF9jb21wbGV0ZWQpIHsKIAkJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJkFkYXB0ZXItPm1sbWVwcml2OwpAQCAtMjEzLDEwICsyMDMsNiBAQAogCU9ETV9Jbml0RGVidWdTZXR0aW5nKHBvZG1wcml2KTsKIH0KIAotdm9pZCBydGw4MTg4ZV9kZWluaXRfZG1fcHJpdihzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlcikKLXsKLX0KLQogLyogIEFkZCBuZXcgZnVuY3Rpb24gdG8gcmVzZXQgdGhlIHN0YXRlIG9mIGFudGVubmEgZGl2ZXJzaXR5IGJlZm9yZSBsaW5rLiAqLwogLyogIENvbXBhcmUgUlNTSSBmb3IgZGVjaWRpbmcgYW50ZW5uYSAqLwogdm9pZCBBbnREaXZDb21wYXJlODE4OEUoc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIsIHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpkc3QsIHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpzcmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9oYWxfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGVfaGFsX2luaXQuYwppbmRleCBmOWQ1NTU4Li41YTIyYzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9oYWxfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhlX2hhbF9pbml0LmMKQEAgLTE4NDMsNyArMTg0Myw2IEBACiAJcEhhbEZ1bmMtPmZyZWVfaGFsX2RhdGEgPSAmcnRsODE4OGVfZnJlZV9oYWxfZGF0YTsKIAogCXBIYWxGdW5jLT5kbV9pbml0ID0gJnJ0bDgxODhlX2luaXRfZG1fcHJpdjsKLQlwSGFsRnVuYy0+ZG1fZGVpbml0ID0gJnJ0bDgxODhlX2RlaW5pdF9kbV9wcml2OwogCiAJcEhhbEZ1bmMtPnJlYWRfY2hpcF92ZXJzaW9uID0gJnJ0bDgxODhlX3JlYWRfY2hpcF92ZXJzaW9uOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9waHljZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhlX3BoeWNmZy5jCmluZGV4IDgwNzlmYzYuLjk0MWZmNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhlX3BoeWNmZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhlX3BoeWNmZy5jCkBAIC02MzEsMTY5ICs2MzEsNiBAQAogCXJldHVybiBydFN0YXR1czsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogICAgUEhZX0NvbmZpZ1JGV2l0aFBhcmFGaWxlKCkKLSAqCi0gKiBPdmVydmlldzogICAgVGhpcyBmdW5jdGlvbiByZWFkIFJGIHBhcmFtZXRlcnMgZnJvbSBnZW5lcmFsIGZpbGUgZm9ybWF0LCBhbmQgZG8gUkYgMy13aXJlCi0gKgotICogSW5wdXQ6CXN0cnVjdCBhZGFwdGVyICpBZGFwdGVyCi0gKgkJCXBzOAkJCQkJcEZpbGVOYW1lCi0gKgkJCWVudW0gcmZfcmFkaW9fcGF0aCBlUkZQYXRoCi0gKgotICogT3V0cHV0OiAgICAgIE5PTkUKLSAqCi0gKiBSZXR1cm46ICAgICAgUlRfU1RBVFVTX1NVQ0NFU1M6IGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdAotICoKLSAqIE5vdGU6CQlEZWxheSBtYXkgYmUgcmVxdWlyZWQgZm9yIFJGIGNvbmZpZ3VyYXRpb24KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBydGw4MTg4ZV9QSFlfQ29uZmlnUkZXaXRoUGFyYUZpbGUoc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIsIHU4ICpwRmlsZU5hbWUsIGVudW0gcmZfcmFkaW9fcGF0aCBlUkZQYXRoKQotewotCXJldHVybiBfU1VDQ0VTUzsKLX0KLQotdm9pZAotcnRsODE5MmNfUEhZX0dldEhXUmVnT3JpZ2luYWxWYWx1ZSgKLQkJc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIKLQkpCi17Ci0Jc3RydWN0IGhhbF9kYXRhXzgxODhlCSpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKLQotCS8qICByZWFkIHJ4IGluaXRpYWwgZ2FpbiAqLwotCXBIYWxEYXRhLT5EZWZhdWx0SW5pdGlhbEdhaW5bMF0gPSAodTgpUEhZX1F1ZXJ5QkJSZWcoQWRhcHRlciwgck9GRE0wX1hBQUdDQ29yZTEsIGJNYXNrQnl0ZTApOwotCXBIYWxEYXRhLT5EZWZhdWx0SW5pdGlhbEdhaW5bMV0gPSAodTgpUEhZX1F1ZXJ5QkJSZWcoQWRhcHRlciwgck9GRE0wX1hCQUdDQ29yZTEsIGJNYXNrQnl0ZTApOwotCXBIYWxEYXRhLT5EZWZhdWx0SW5pdGlhbEdhaW5bMl0gPSAodTgpUEhZX1F1ZXJ5QkJSZWcoQWRhcHRlciwgck9GRE0wX1hDQUdDQ29yZTEsIGJNYXNrQnl0ZTApOwotCXBIYWxEYXRhLT5EZWZhdWx0SW5pdGlhbEdhaW5bM10gPSAodTgpUEhZX1F1ZXJ5QkJSZWcoQWRhcHRlciwgck9GRE0wX1hEQUdDQ29yZTEsIGJNYXNrQnl0ZTApOwotCi0JLyogIHJlYWQgZnJhbWVzeW5jICovCi0JcEhhbERhdGEtPmZyYW1lc3luYyA9ICh1OClQSFlfUXVlcnlCQlJlZyhBZGFwdGVyLCByT0ZETTBfUnhEZXRlY3RvcjMsIGJNYXNrQnl0ZTApOwotCXBIYWxEYXRhLT5mcmFtZXN5bmNDMzQgPSBQSFlfUXVlcnlCQlJlZyhBZGFwdGVyLCByT0ZETTBfUnhEZXRlY3RvcjIsIGJNYXNrRFdvcmQpOwotfQotCi0vKiAgKi8KLS8qCURlc2NyaXB0aW9uOiAqLwotLyoJCU1hcCBkQm0gaW50byBUeCBwb3dlciBpbmRleCBhY2NvcmRpbmcgdG8gKi8KLS8qCQljdXJyZW50IEhXIG1vZGVsLCBmb3IgZXhhbXBsZSwgUkYgYW5kIFBBLCBhbmQgKi8KLS8qCQljdXJyZW50IHdpcmVsZXNzIG1vZGUuICovCi0vKglCeSBCcnVjZSwgMjAwOC0wMS0yOS4gKi8KLS8qICAqLwotc3RhdGljCXU4IHBoeV9EYm1Ub1R4UHdySWR4KHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyLCBlbnVtIHdpcmVsZXNzX21vZGUgV2lyZWxlc3NNb2RlLCBpbnQgUG93ZXJJbkRibSkKLXsKLQl1OCBUeFB3cklkeCA9IDA7Ci0JaW50CQkJCU9mZnNldCA9IDA7Ci0KLQotCS8qICAqLwotCS8qICBUZXN0ZWQgYnkgTVAsIHdlIGZvdW5kIHRoYXQgQ0NLIEluZGV4IDAgZXF1YWxzIHRvIDhkYm0sIE9GRE0gbGVnYWN5IGVxdWFscyB0byAqLwotCS8qICAzZGJtLCBhbmQgT0ZETSBIVCBlcXVhbHMgdG8gMGRibSByZXNwZWN0aXZlbHkuICovCi0JLyogIE5vdGU6ICovCi0JLyoJVGhlIG1hcHBpbmcgbWF5IGJlIGRpZmZlcmVudCBieSBkaWZmZXJlbnQgTklDcy4gRG8gbm90IHVzZSB0aGlzIGZvcm11bGEgZm9yIHdoYXQgbmVlZHMgYWNjdXJhdGUgcmVzdWx0LiAqLwotCS8qICBCeSBCcnVjZSwgMjAwOC0wMS0yOS4gKi8KLQkvKiAgKi8KLQlzd2l0Y2ggKFdpcmVsZXNzTW9kZSkgewotCWNhc2UgV0lSRUxFU1NfTU9ERV9COgotCQlPZmZzZXQgPSAtNzsKLQkJYnJlYWs7Ci0KLQljYXNlIFdJUkVMRVNTX01PREVfRzoKLQljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6Ci0JZGVmYXVsdDoKLQkJT2Zmc2V0ID0gLTg7Ci0JCWJyZWFrOwotCX0KLQotCWlmICgoUG93ZXJJbkRibSAtIE9mZnNldCkgPiAwKQotCQlUeFB3cklkeCA9ICh1OCkoKFBvd2VySW5EYm0gLSBPZmZzZXQpICogMik7Ci0JZWxzZQotCQlUeFB3cklkeCA9IDA7Ci0KLQkvKiAgVHggUG93ZXIgSW5kZXggaXMgdG9vIGxhcmdlLiAqLwotCWlmIChUeFB3cklkeCA+IE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTKQotCQlUeFB3cklkeCA9IE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTOwotCi0JcmV0dXJuIFR4UHdySWR4OwotfQotCi0vKiAgKi8KLS8qCURlc2NyaXB0aW9uOiAqLwotLyoJCU1hcCBUeCBwb3dlciBpbmRleCBpbnRvIGRCbSBhY2NvcmRpbmcgdG8gKi8KLS8qCQljdXJyZW50IEhXIG1vZGVsLCBmb3IgZXhhbXBsZSwgUkYgYW5kIFBBLCBhbmQgKi8KLS8qCQljdXJyZW50IHdpcmVsZXNzIG1vZGUuICovCi0vKglCeSBCcnVjZSwgMjAwOC0wMS0yOS4gKi8KLS8qICAqLwotc3RhdGljIGludCBwaHlfVHhQd3JJZHhUb0RibShzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlciwgZW51bSB3aXJlbGVzc19tb2RlIFdpcmVsZXNzTW9kZSwgdTggVHhQd3JJZHgpCi17Ci0JaW50CQkJCU9mZnNldCA9IDA7Ci0JaW50CQkJCVB3ck91dERibSA9IDA7Ci0KLQkvKiAgKi8KLQkvKiAgVGVzdGVkIGJ5IE1QLCB3ZSBmb3VuZCB0aGF0IENDSyBJbmRleCAwIGVxdWFscyB0byAtN2RibSwgT0ZETSBsZWdhY3kgZXF1YWxzIHRvIC04ZGJtLiAqLwotCS8qICBOb3RlOiAqLwotCS8qCVRoZSBtYXBwaW5nIG1heSBiZSBkaWZmZXJlbnQgYnkgZGlmZmVyZW50IE5JQ3MuIERvIG5vdCB1c2UgdGhpcyBmb3JtdWxhIGZvciB3aGF0IG5lZWRzIGFjY3VyYXRlIHJlc3VsdC4gKi8KLQkvKiAgQnkgQnJ1Y2UsIDIwMDgtMDEtMjkuICovCi0JLyogICovCi0Jc3dpdGNoIChXaXJlbGVzc01vZGUpIHsKLQljYXNlIFdJUkVMRVNTX01PREVfQjoKLQkJT2Zmc2V0ID0gLTc7Ci0JCWJyZWFrOwotCWNhc2UgV0lSRUxFU1NfTU9ERV9HOgotCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzI0RzoKLQlkZWZhdWx0OgotCQlPZmZzZXQgPSAtODsKLQkJYnJlYWs7Ci0JfQotCi0JUHdyT3V0RGJtID0gVHhQd3JJZHggLyAyICsgT2Zmc2V0OyAvKiAgRGlzY2FyZCB0aGUgZGVjaW1hbCBwYXJ0LiAqLwotCi0JcmV0dXJuIFB3ck91dERibTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogICAgR2V0VHhQb3dlckxldmVsODE5MCgpCi0gKgotICogT3ZlcnZpZXc6ICAgIFRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0IHRvICJjb21tb24iIG1vdWR1bGUKLSAqCi0gKiBJbnB1dDogICAgICAgc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIKLSAqCQkJcHNCeXRlCQkJUG93ZXIgTGV2ZWwKLSAqCi0gKiBPdXRwdXQ6ICAgICAgTk9ORQotICoKLSAqIFJldHVybjogICAgICBOT05FCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBQSFlfR2V0VHhQb3dlckxldmVsODE4OEUoc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIsIHUzMiAqcG93ZXJsZXZlbCkKLXsKLQlzdHJ1Y3QgaGFsX2RhdGFfODE4OGUJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwotCXU4IFR4UHdyTGV2ZWwgPSAwOwotCWludAkJCVR4UHdyRGJtOwotCi0JLyogICovCi0JLyogIEJlY2F1c2UgdGhlIFR4IHBvd2VyIGluZGV4ZXMgYXJlIGRpZmZlcmVudCwgd2UgcmVwb3J0IHRoZSBtYXhpbXVtIG9mIHRoZW0gdG8gKi8KLQkvKiAgbWVldCB0aGUgQ0NYIFRQQyByZXF1ZXN0LiBCeSBCcnVjZSwgMjAwOC0wMS0zMS4gKi8KLQkvKiAgKi8KLQotCS8qICBDQ0sgKi8KLQlUeFB3ckxldmVsID0gcEhhbERhdGEtPkN1cnJlbnRDY2tUeFB3cklkeDsKLQlUeFB3ckRibSA9IHBoeV9UeFB3cklkeFRvRGJtKEFkYXB0ZXIsIFdJUkVMRVNTX01PREVfQiwgVHhQd3JMZXZlbCk7Ci0KLQkvKiAgTGVnYWN5IE9GRE0gKi8KLQlUeFB3ckxldmVsID0gcEhhbERhdGEtPkN1cnJlbnRPZmRtMjRHVHhQd3JJZHggKyBwSGFsRGF0YS0+TGVnYWN5SFRUeFBvd2VyRGlmZjsKLQotCS8qICBDb21wYXJlIHdpdGggTGVnYWN5IE9GRE0gVHggcG93ZXIuICovCi0JaWYgKHBoeV9UeFB3cklkeFRvRGJtKEFkYXB0ZXIsIFdJUkVMRVNTX01PREVfRywgVHhQd3JMZXZlbCkgPiBUeFB3ckRibSkKLQkJVHhQd3JEYm0gPSBwaHlfVHhQd3JJZHhUb0RibShBZGFwdGVyLCBXSVJFTEVTU19NT0RFX0csIFR4UHdyTGV2ZWwpOwotCi0JLyogIEhUIE9GRE0gKi8KLQlUeFB3ckxldmVsID0gcEhhbERhdGEtPkN1cnJlbnRPZmRtMjRHVHhQd3JJZHg7Ci0KLQkvKiAgQ29tcGFyZSB3aXRoIEhUIE9GRE0gVHggcG93ZXIuICovCi0JaWYgKHBoeV9UeFB3cklkeFRvRGJtKEFkYXB0ZXIsIFdJUkVMRVNTX01PREVfTl8yNEcsIFR4UHdyTGV2ZWwpID4gVHhQd3JEYm0pCi0JCVR4UHdyRGJtID0gcGh5X1R4UHdySWR4VG9EYm0oQWRhcHRlciwgV0lSRUxFU1NfTU9ERV9OXzI0RywgVHhQd3JMZXZlbCk7Ci0KLQkqcG93ZXJsZXZlbCA9IFR4UHdyRGJtOwotfQotCiBzdGF0aWMgdm9pZCBnZXRUeFBvd2VySW5kZXg4OEUoc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIsIHU4IGNoYW5uZWwsIHU4ICpjY2tQb3dlckxldmVsLAogCQkJICAgICAgIHU4ICpvZmRtUG93ZXJMZXZlbCwgdTggKkJXMjBQb3dlckxldmVsLAogCQkJICAgICAgIHU4ICpCVzQwUG93ZXJMZXZlbCkKQEAgLTkxNyw1MSArNzU0LDYgQEAKIAlydGw4MTg4ZV9QSFlfUkY2MDUyU2V0T0ZETVR4UG93ZXIoQWRhcHRlciwgJm9mZG1Qb3dlckxldmVsWzBdLCAmQlcyMFBvd2VyTGV2ZWxbMF0sICZCVzQwUG93ZXJMZXZlbFswXSwgY2hhbm5lbCk7CiB9CiAKLS8qICAqLwotLyoJRGVzY3JpcHRpb246ICovCi0vKgkJVXBkYXRlIHRyYW5zbWl0IHBvd2VyIGxldmVsIG9mIGFsbCBjaGFubmVsIHN1cHBvcnRlZC4gKi8KLS8qICAqLwotLyoJVE9ETzogKi8KLS8qCQlBIG1vZGUuICovCi0vKglCeSBCcnVjZSwgMjAwOC0wMi0wNC4gKi8KLS8qICAqLwotYm9vbAotUEhZX1VwZGF0ZVR4UG93ZXJEYm04MTg4RSgKLQkJc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIsCi0JCWludAkJcG93ZXJJbkRibQotCSkKLXsKLQlzdHJ1Y3QgaGFsX2RhdGFfODE4OGUJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwotCXU4IGlkeDsKLQl1OCByZl9wYXRoOwotCi0JLyogIFRPRE86IEEgbW9kZSBUeCBwb3dlci4gKi8KLQl1OCBDY2tUeFB3cklkeCA9IHBoeV9EYm1Ub1R4UHdySWR4KEFkYXB0ZXIsIFdJUkVMRVNTX01PREVfQiwgcG93ZXJJbkRibSk7Ci0JdTggT2ZkbVR4UHdySWR4ID0gcGh5X0RibVRvVHhQd3JJZHgoQWRhcHRlciwgV0lSRUxFU1NfTU9ERV9OXzI0RywgcG93ZXJJbkRibSk7Ci0KLQlpZiAoT2ZkbVR4UHdySWR4IC0gcEhhbERhdGEtPkxlZ2FjeUhUVHhQb3dlckRpZmYgPiAwKQotCQlPZmRtVHhQd3JJZHggLT0gcEhhbERhdGEtPkxlZ2FjeUhUVHhQb3dlckRpZmY7Ci0JZWxzZQotCQlPZmRtVHhQd3JJZHggPSAwOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCAxNDsgaWR4KyspIHsKLQkJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykgewotCQkJcEhhbERhdGEtPlR4UHdyTGV2ZWxDY2tbcmZfcGF0aF1baWR4XSA9IENja1R4UHdySWR4OwotCQkJcEhhbERhdGEtPlR4UHdyTGV2ZWxIVDQwXzFTW3JmX3BhdGhdW2lkeF0gPQotCQkJcEhhbERhdGEtPlR4UHdyTGV2ZWxIVDQwXzJTW3JmX3BhdGhdW2lkeF0gPSBPZmRtVHhQd3JJZHg7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLVBIWV9TY2FuT3BlcmF0aW9uQmFja3VwODE4OEUoCi0JCXN0cnVjdCBhZGFwdGVyICpBZGFwdGVyLAotCQl1OCBPcGVyYXRpb24KLQkpCi17Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOiAgICBQSFlfU2V0QldNb2RlQ2FsbGJhY2s4MTkyQygpCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGVfcmY2MDUyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9yZjYwNTIuYwppbmRleCBiMWNiNWM0Li41MjEwM2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9yZjYwNTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZV9yZjYwNTIuYwpAQCAtNDYsNTEgKzQ2LDYgQEAKIAogI2luY2x1ZGUgPHJ0bDgxODhlX2hhbC5oPgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBMb2NhbCBDb25zdGFudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAgRGVmaW5lIGxvY2FsIHN0cnVjdHVyZSBmb3IgZGVidWchISEhISAqLwotc3RydWN0IHJmX3NoYWRvdyB7Ci0JLyogIFNoYWRvdyByZWdpc3RlciB2YWx1ZSAqLwotCXUzMiBWYWx1ZTsKLQkvKiAgQ29tcGFyZSBvciBub3QgZmxhZyAqLwotCXU4IENvbXBhcmU7Ci0JLyogIFJlY29yZCBJZiBpdCBoYWQgZXZlciBtb2RpZmllZCB1bnByZWRpY3RlZCAqLwotCXU4IEVycm9yT3JOb3Q7Ci0JLyogIFJlY29ydmVyIEZsYWcgKi8KLQl1OCBSZWNvcnZlcjsKLQkvKiAgKi8KLQl1OCBEcml2ZXJfV3JpdGU7Ci19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBMb2NhbCBDb25zdGFudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgZ2xvYmFsIHZhcmlhYmxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBsb2NhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOglSRl9DaGFuZ2VUeFBhdGgKLSAqCi0gKiBPdmVydmlldzoJRm9yIFJMNjA1Miwgd2UgbXVzdCBjaGFuZ2Ugc29tZSBSRiBzZXR0aWduIGZvciAxVCBvciAyVC4KLSAqCi0gKiBJbnB1dDoJCXUxNiBEYXRhUmF0ZQkJMHg4MC04ZiwgMHg5MC05ZgotICoKLSAqIE91dHB1dDogICAgICBOT05FCi0gKgotICogUmV0dXJuOiAgICAgIE5PTkUKLSAqCi0gKiBSZXZpc2VkIEhpc3Rvcnk6Ci0gKiBXaGVuCQkJV2hvCQlSZW1hcmsKLSAqIDA5LzI1LzIwMDgJTUhDCQlDcmVhdGUgVmVyc2lvbiAwLgotICoJCQkJCQlGaXJtd2FlciBzdXBwb3J0IHRoZSB1dGlsaXR5IGxhdGVyLgotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcnRsODE4OGVfUkZfQ2hhbmdlVHhQYXRoKHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyLCB1MTYgRGF0YVJhdGUpCi17Ci0vKiAgV2UgZG8gbm90IHN1cHBvcnQgZ2FpbiB0YWJsZSBjaGFuZ2UgaW5BQ1VUIG5vdyAhISEhIERlbGV0ZSBsYXRlciAhISEgKi8KLX0JLyogUkZfQ2hhbmdlVHhQYXRoICovCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246ICAgIFBIWV9SRjYwNTJTZXRCYW5kd2lkdGgoKQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhldV9sZWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhldV9sZWQuYwppbmRleCAwOGRmZDk0Li43N2RjZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZXVfbGVkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGV1X2xlZC5jCkBAIC0zNSwxNiArMzUsNyBAQAogCWlmIChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCB8fCBwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQpCiAJCXJldHVybjsKIAlMZWRDZmcgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19MRURDRkcyKTsKLQlzd2l0Y2ggKHBMZWQtPkxlZFBpbikgewotCWNhc2UgTEVEX1BJTl9MRUQwOgotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgKExlZENmZyYweGYwKXxCSVQ1fEJJVDYpOyAvKiAgU1cgY29udHJvbCBsZWQwIG9uLiAqLwotCQlicmVhazsKLQljYXNlIExFRF9QSU5fTEVEMToKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzIsIChMZWRDZmcmMHgwZil8QklUNSk7IC8qICBTVyBjb250cm9sIGxlZDEgb24uICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgKExlZENmZyYweGYwKXxCSVQ1fEJJVDYpOyAvKiAgU1cgY29udHJvbCBsZWQwIG9uLiAqLwogCXBMZWQtPmJMZWRPbiA9IHRydWU7CiB9CiAKQEAgLTYwLDI1ICs1MSwxNSBAQAogCiAJTGVkQ2ZnID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMik7LyogMHg0RSAqLwogCi0Jc3dpdGNoIChwTGVkLT5MZWRQaW4pIHsKLQljYXNlIExFRF9QSU5fTEVEMDoKLQkJaWYgKHBIYWxEYXRhLT5iTGVkT3BlbkRyYWluKSB7CisJaWYgKHBIYWxEYXRhLT5iTGVkT3BlbkRyYWluKSB7CiAJCQkvKiAgT3Blbi1kcmFpbiBhcnJhbmdlbWVudCBmb3IgY29udHJvbGxpbmcgdGhlIExFRCkgKi8KLQkJCUxlZENmZyAmPSAweDkwOyAvKiAgU2V0IHRvIHNvZnR3YXJlIGNvbnRyb2wuICovCi0JCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgKExlZENmZ3xCSVQzKSk7Ci0JCQlMZWRDZmcgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19NQUNfUElOTVVYX0NGRyk7Ci0JCQlMZWRDZmcgJj0gMHhGRTsKLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19NQUNfUElOTVVYX0NGRywgTGVkQ2ZnKTsKLQkJfSBlbHNlIHsKLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcyLCAoTGVkQ2ZnfEJJVDN8QklUNXxCSVQ2KSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfUElOX0xFRDE6Ci0JCUxlZENmZyAmPSAweDBmOyAvKiAgU2V0IHRvIHNvZnR3YXJlIGNvbnRyb2wuICovCisJCUxlZENmZyAmPSAweDkwOyAvKiAgU2V0IHRvIHNvZnR3YXJlIGNvbnRyb2wuICovCiAJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcyLCAoTGVkQ2ZnfEJJVDMpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisJCUxlZENmZyA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX01BQ19QSU5NVVhfQ0ZHKTsKKwkJTGVkQ2ZnICY9IDB4RkU7CisJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19NQUNfUElOTVVYX0NGRywgTGVkQ2ZnKTsKKwl9IGVsc2UgeworCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgKExlZENmZ3xCSVQzfEJJVDV8QklUNikpOwogCX0KIGV4aXQ6CiAJcExlZC0+YkxlZE9uID0gZmFsc2U7CkBAIC05MiwxMiArNzMsMTMgQEAKIHZvaWQgcnRsODE4OGV1X0luaXRTd0xlZHMoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBsZWRfcHJpdiAqcGxlZHByaXYgPSAmKHBhZGFwdGVyLT5sZWRwcml2KTsKKwlzdHJ1Y3QgaGFsX2RhdGFfODE4OGUgICAqaGFsZGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAKKwlwbGVkcHJpdi0+YlJlZ1VzZUxlZCA9IHRydWU7CiAJcGxlZHByaXYtPkxlZENvbnRyb2xIYW5kbGVyID0gTGVkQ29udHJvbDgxODhldTsKKwloYWxkYXRhLT5iTGVkT3BlbkRyYWluID0gdHJ1ZTsKIAotCUluaXRMZWQ4NzF4KHBhZGFwdGVyLCAmKHBsZWRwcml2LT5Td0xlZDApLCBMRURfUElOX0xFRDApOwotCi0JSW5pdExlZDg3MXgocGFkYXB0ZXIsICYocGxlZHByaXYtPlN3TGVkMSksIExFRF9QSU5fTEVEMSk7CisJSW5pdExlZDg3MXgocGFkYXB0ZXIsICYocGxlZHByaXYtPlN3TGVkMCkpOwogfQogCiAvKglEZXNjcmlwdGlvbjogKi8KQEAgLTEwNyw1ICs4OSw0IEBACiAJc3RydWN0IGxlZF9wcml2CSpsZWRwcml2ID0gJihwYWRhcHRlci0+bGVkcHJpdik7CiAKIAlEZUluaXRMZWQ4NzF4KCYobGVkcHJpdi0+U3dMZWQwKSk7Ci0JRGVJbml0TGVkODcxeCgmKGxlZHByaXYtPlN3TGVkMSkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGV1X3JlY3YuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3J0bDgxODhldV9yZWN2LmMKaW5kZXggYjFiMTU4NC4uMGY2MjIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvcnRsODE4OGV1X3JlY3YuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC9ydGw4MTg4ZXVfcmVjdi5jCkBAIC0yOCwyMiArMjgsNiBAQAogCiAjaW5jbHVkZSA8cnRsODE4OGVfaGFsLmg+CiAKLXZvaWQgcnRsODE4OGV1X2luaXRfcmVjdmJ1ZihzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYpCi17Ci0JcHJlY3ZidWYtPnRyYW5zZmVyX2xlbiA9IDA7Ci0KLQlwcmVjdmJ1Zi0+bGVuID0gMDsKLQotCXByZWN2YnVmLT5yZWZfY250ID0gMDsKLQotCWlmIChwcmVjdmJ1Zi0+cGJ1ZikgewotCQlwcmVjdmJ1Zi0+cGRhdGEgPSBwcmVjdmJ1Zi0+cGJ1ZjsKLQkJcHJlY3ZidWYtPnBoZWFkID0gcHJlY3ZidWYtPnBidWY7Ci0JCXByZWN2YnVmLT5wdGFpbCA9IHByZWN2YnVmLT5wYnVmOwotCQlwcmVjdmJ1Zi0+cGVuZCA9IHByZWN2YnVmLT5wZGF0YSArIE1BWF9SRUNWQlVGX1NaOwotCX0KLX0KLQogaW50CXJ0bDgxODhldV9pbml0X3JlY3ZfcHJpdihzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IHJlY3ZfcHJpdgkqcHJlY3Zwcml2ID0gJnBhZGFwdGVyLT5yZWN2cHJpdjsKQEAgLTcxLDEzICs1NSw5IEBACiAJcHJlY3ZidWYgPSAoc3RydWN0IHJlY3ZfYnVmICopcHJlY3Zwcml2LT5wcmVjdl9idWY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfUkVDVkJVRkY7IGkrKykgewotCQlfcnR3X2luaXRfbGlzdGhlYWQoJnByZWN2YnVmLT5saXN0KTsKLQkJc3Bpbl9sb2NrX2luaXQoJnByZWN2YnVmLT5yZWN2YnVmX2xvY2spOwotCQlwcmVjdmJ1Zi0+YWxsb2Nfc3ogPSBNQVhfUkVDVkJVRl9TWjsKIAkJcmVzID0gcnR3X29zX3JlY3ZidWZfcmVzb3VyY2VfYWxsb2MocGFkYXB0ZXIsIHByZWN2YnVmKTsKIAkJaWYgKHJlcyA9PSBfRkFJTCkKIAkJCWJyZWFrOwotCQlwcmVjdmJ1Zi0+cmVmX2NudCA9IDA7CiAJCXByZWN2YnVmLT5hZGFwdGVyID0gcGFkYXB0ZXI7CiAJCXByZWN2YnVmKys7CiAJfQpAQCAtMTE3LDcgKzk3LDcgQEAKIAlwcmVjdmJ1ZiA9IChzdHJ1Y3QgcmVjdl9idWYgKilwcmVjdnByaXYtPnByZWN2X2J1ZjsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9SRUNWQlVGRjsgaSsrKSB7Ci0JCXJ0d19vc19yZWN2YnVmX3Jlc291cmNlX2ZyZWUocGFkYXB0ZXIsIHByZWN2YnVmKTsKKwkJdXNiX2ZyZWVfdXJiKHByZWN2YnVmLT5wdXJiKTsKIAkJcHJlY3ZidWYrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3VzYl9oYWxpbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC91c2JfaGFsaW5pdC5jCmluZGV4IGM5MjA2N2YuLjE0MWY4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3VzYl9oYWxpbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvdXNiX2hhbGluaXQuYwpAQCAtNDIwLDIyICs0MjAsNiBAQAogCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19FRENBX1ZPX1BBUkFNLCAweDAwMkZBMjI2KTsKIH0KIAotc3RhdGljIHZvaWQgX0luaXRCZWFjb25NYXhFcnJvcihzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlciwgYm9vbAkJSW5mcmFNb2RlKQotewotfQotCi1zdGF0aWMgdm9pZCBfSW5pdEhXTGVkKHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyKQotewotCXN0cnVjdCBsZWRfcHJpdiAqcGxlZHByaXYgPSAmKEFkYXB0ZXItPmxlZHByaXYpOwotCi0JaWYgKHBsZWRwcml2LT5MZWRTdHJhdGVneSAhPSBIV19MRUQpCi0JCXJldHVybjsKLQotLyogIEhXIGxlZCBjb250cm9sICovCi0vKiAgdG8gZG8gLi4uLiAqLwotLyogbXVzdCBjb25zaWRlciBjYXNlcyBvZiBhbnRlbm5hIGRpdmVyc2l0eS8gY29tbWJvIGNhcmQvc29sbyBjYXJkL21pbmkgY2FyZCAqLwotfQotCiBzdGF0aWMgdm9pZCBfSW5pdFJER1NldHRpbmcoc3RydWN0IGFkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfUkRfQ1RSTCwgMHhGRik7CkBAIC01OTksMTAgKzU4Myw2IEBACiAJaGFsZGF0YS0+VXNiUnhIaWdoU3BlZWRNb2RlID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIF9Jbml0T3BlcmF0aW9uTW9kZShzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlcikKLXsKLX0KLQogc3RhdGljIHZvaWQgX0luaXRCZWFjb25QYXJhbWV0ZXJzKHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyKQogewogCXN0cnVjdCBoYWxfZGF0YV84MTg4ZQkqaGFsZGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKQEAgLTcxMyw3ICs2OTMsNiBAQAogCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19CRUdJTik7CiAKIAlpZiAoQWRhcHRlci0+cHdyY3RybHByaXYuYmtlZXBmd2FsaXZlKSB7Ci0JCV9wc19vcGVuX1JGKEFkYXB0ZXIpOwogCiAJCWlmIChoYWxkYXRhLT5vZG1wcml2LlJGQ2FsaWJyYXRlSW5mby5iSVFLSW5pdGlhbGl6ZWQpIHsKIAkJCVBIWV9JUUNhbGlicmF0ZV84MTg4RShBZGFwdGVyLCB0cnVlKTsKQEAgLTg0MCwxNCArODE5LDkgQEAKIAlfSW5pdEVEQ0EoQWRhcHRlcik7CiAJX0luaXRSZXRyeUZ1bmN0aW9uKEFkYXB0ZXIpOwogCUluaXRVc2JBZ2dyZWdhdGlvblNldHRpbmcoQWRhcHRlcik7Ci0JX0luaXRPcGVyYXRpb25Nb2RlKEFkYXB0ZXIpOy8qIHRvZG8gKi8KIAlfSW5pdEJlYWNvblBhcmFtZXRlcnMoQWRhcHRlcik7Ci0JX0luaXRCZWFjb25NYXhFcnJvcihBZGFwdGVyLCB0cnVlKTsKLQotCS8qICAqLwogCS8qICBJbml0IENSIE1BQ1RYRU4sIE1BQ1JYRU4gYWZ0ZXIgc2V0dGluZyBSeEZGIGJvdW5kYXJ5IFJFR19UUlhGRl9CTkRZIHRvIHBhdGNoICovCiAJLyogIEh3IGJ1ZyB3aGljaCBIdyBpbml0aWFscyBSeEZGIGJvdW5kYXJ5IHNpemUgdG8gYSB2YWx1ZSB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVhbCBSeCBidWZmZXIgc2l6ZSBpbiA4OEUuICovCi0JLyogICovCiAJLyogIEVuYWJsZSBNQUNUWEVOL01BQ1JYRU4gYmxvY2sgKi8KIAl2YWx1ZTE2ID0gcnR3X3JlYWQxNihBZGFwdGVyLCBSRUdfQ1IpOwogCXZhbHVlMTYgfD0gKE1BQ1RYRU4gfCBNQUNSWEVOKTsKQEAgLTg3MCw4ICs4NDQsNiBAQAogCXJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19QS1RfVk9fVklfTElGRV9USU1FLCAweDA0MDApOwkvKiAgdW5pdDogMjU2dXMuIDI1Nm1zICovCiAJcnR3X3dyaXRlMTYoQWRhcHRlciwgUkVHX1BLVF9CRV9CS19MSUZFX1RJTUUsIDB4MDQwMCk7CS8qICB1bml0OiAyNTZ1cy4gMjU2bXMgKi8KIAotCV9Jbml0SFdMZWQoQWRhcHRlcik7Ci0KIAkvKiBLZWVwIFJmUmVnQ2hubFZhbCBmb3IgbGF0ZXIgdXNlLiAqLwogCWhhbGRhdGEtPlJmUmVnQ2hubFZhbFswXSA9IFBIWV9RdWVyeVJGUmVnKEFkYXB0ZXIsIChlbnVtIHJmX3JhZGlvX3BhdGgpMCwgUkZfQ0hOTEJXLCBiUkZSZWdPZmZzZXRNYXNrKTsKIAloYWxkYXRhLT5SZlJlZ0NobmxWYWxbMV0gPSBQSFlfUXVlcnlSRlJlZyhBZGFwdGVyLCAoZW51bSByZl9yYWRpb19wYXRoKTEsIFJGX0NITkxCVywgYlJGUmVnT2Zmc2V0TWFzayk7CkBAIC05NzAsMTggKzk0Miw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBfcHNfb3Blbl9SRihzdHJ1Y3QgYWRhcHRlciAqYWRhcHQpCi17Ci0JLyogaGVyZSBjYWxsIHdpdGggYlJlZ1NTUHdyTHZsIDEsIGJSZWdTU1B3ckx2bCAyIG5lZWRzIHRvIGJlIHZlcmlmaWVkICovCi0JLyogcGh5X1NzUHdyU3dpdGNoOTJDVShhZGFwdCwgcmZfb24sIDEpOyAqLwotfQotCi1zdGF0aWMgdm9pZCBfcHNfY2xvc2VfUkYoc3RydWN0IGFkYXB0ZXIgKmFkYXB0KQotewotCS8qIGhlcmUgY2FsbCB3aXRoIGJSZWdTU1B3ckx2bCAxLCBiUmVnU1NQd3JMdmwgMiBuZWVkcyB0byBiZSB2ZXJpZmllZCAqLwotCS8qIHBoeV9Tc1B3clN3aXRjaDkyQ1UoYWRhcHQsIHJmX29mZiwgMSk7ICovCi19Ci0KIHN0YXRpYyB2b2lkIENhcmREaXNhYmxlUlRMODE4OEVVKHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyKQogewogCXU4IHZhbDg7CkBAIC0xMDU5LDcgKzEwMTksNiBAQAogCiAJREJHXzg4RSgiYmtlZXBmd2FsaXZlKCV4KVxuIiwgQWRhcHRlci0+cHdyY3RybHByaXYuYmtlZXBmd2FsaXZlKTsKIAlpZiAoQWRhcHRlci0+cHdyY3RybHByaXYuYmtlZXBmd2FsaXZlKSB7Ci0JCV9wc19jbG9zZV9SRihBZGFwdGVyKTsKIAkJaWYgKChBZGFwdGVyLT5wd3JjdHJscHJpdi5iSFdQd3JQaW5kZXRlY3QpICYmIChBZGFwdGVyLT5wd3JjdHJscHJpdi5iSFdQb3dlcmRvd24pKQogCQkJcnRsODE5MmN1X2h3X3Bvd2VyX2Rvd24oQWRhcHRlcik7CiAJfSBlbHNlIHsKQEAgLTExMjksMTYgKzEwODgsNiBAQAogLyoJRUVQUk9NL0VGVVNFIENvbnRlbnQgUGFyc2luZyAqLwogLyogICovCiAvKiAgKi8KLXN0YXRpYyB2b2lkIF9SZWFkTEVEU2V0dGluZyhzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlciwgdTggKlBST01Db250ZW50LCBib29sIEF1dG9sb2FkRmFpbCkKLXsKLQlzdHJ1Y3QgbGVkX3ByaXYgKnBsZWRwcml2ID0gJihBZGFwdGVyLT5sZWRwcml2KTsKLQlzdHJ1Y3QgaGFsX2RhdGFfODE4OGUJKmhhbGRhdGEgPSBHRVRfSEFMX0RBVEEoQWRhcHRlcik7Ci0KLQlwbGVkcHJpdi0+YlJlZ1VzZUxlZCA9IHRydWU7Ci0JcGxlZHByaXYtPkxlZFN0cmF0ZWd5ID0gU1dfTEVEX01PREUxOwotCWhhbGRhdGEtPmJMZWRPcGVuRHJhaW4gPSB0cnVlOy8qICBTdXBwb3J0IE9wZW4tZHJhaW4gYXJyYW5nZW1lbnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRUQuICovCi19Ci0KIHN0YXRpYyB2b2lkIEhhbF9FZnVzZVBhcnNlUElEVklEXzgxODhFVShzdHJ1Y3QgYWRhcHRlciAqYWRhcHQsIHU4ICpod2luZm8sIGJvb2wgQXV0b0xvYWRGYWlsKQogewogCXN0cnVjdCBoYWxfZGF0YV84MTg4ZQkqaGFsZGF0YSA9IEdFVF9IQUxfREFUQShhZGFwdCk7CkBAIC0xMTg0LDEwICsxMTMzLDYgQEAKIAkJIGVlcHJvbS0+bWFjX2FkZHJbNF0sIGVlcHJvbS0+bWFjX2FkZHJbNV0pKTsKIH0KIAotc3RhdGljIHZvaWQgSGFsX0N1c3RvbWl6ZUJ5Q3VzdG9tZXJJRF84MTg4RVUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0KQotewotfQotCiBzdGF0aWMgdm9pZAogcmVhZEFkYXB0ZXJJbmZvXzgxODhFVSgKIAkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0CkBAIC0xMjE0LDkgKzExNTksNiBAQAogCS8qICBUaGUgZm9sbG93aW5nIHBhcnQgaW5pdGlhbGl6ZSBzb21lIHZhcnMgYnkgUEcgaW5mby4gKi8KIAkvKiAgKi8KIAlIYWxfSW5pdENoYW5uZWxQbGFuKGFkYXB0KTsKLQlIYWxfQ3VzdG9taXplQnlDdXN0b21lcklEXzgxODhFVShhZGFwdCk7Ci0KLQlfUmVhZExFRFNldHRpbmcoYWRhcHQsIGVlcHJvbS0+ZWZ1c2VfZWVwcm9tX2RhdGEsIGVlcHJvbS0+YmF1dG9sb2FkX2ZhaWxfZmxhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9SZWFkUFJPTUNvbnRlbnQoCkBAIC0yMjg0LDEyICsyMjI2LDYgQEAKIAkJaGFsZGF0YS0+b2RtcHJpdi5SRkNhbGlicmF0ZUluZm8uVGhlcm1hbFZhbHVlX0hQW2ldID0gMDsKIH0KIAotc3RhdGljIHU4IHJ0bDgxODhldV9wc19mdW5jKHN0cnVjdCBhZGFwdGVyICpBZGFwdGVyLCBlbnVtIGhhbF9pbnRmX3BzX2Z1bmMgZWZ1bmNfaWQsIHU4ICp2YWwpCi17Ci0JdTggYlJlc3VsdCA9IHRydWU7Ci0JcmV0dXJuIGJSZXN1bHQ7Ci19Ci0KIHZvaWQgcnRsODE4OGV1X3NldF9oYWxfb3BzKHN0cnVjdCBhZGFwdGVyICphZGFwdCkKIHsKIAlzdHJ1Y3QgaGFsX29wcwkqaGFsZnVuYyA9ICZhZGFwdC0+SGFsRnVuYzsKQEAgLTIzMzAsNyArMjI2Niw1IEBACiAJaGFsZnVuYy0+aGFsX3htaXQgPSAmcnRsODE4OGV1X2hhbF94bWl0OwogCWhhbGZ1bmMtPm1nbnRfeG1pdCA9ICZydGw4MTg4ZXVfbWdudF94bWl0OwogCi0JaGFsZnVuYy0+aW50ZXJmYWNlX3BzX2Z1bmMgPSAmcnRsODE4OGV1X3BzX2Z1bmM7Ci0KIAlydGw4MTg4ZV9zZXRfaGFsX29wcyhoYWxmdW5jKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3VzYl9vcHNfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaGFsL3VzYl9vcHNfbGludXguYwppbmRleCAxZmE1MzcwLi4zYWFkZjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2hhbC91c2Jfb3BzX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9oYWwvdXNiX29wc19saW51eC5jCkBAIC0zMzMsNyArMzMzLDYgQEAKIAkJfQogCiAJCV9ydHdfaW5pdF9saXN0aGVhZCgmcHJlY3ZmcmFtZS0+bGlzdCk7Ci0JCXByZWN2ZnJhbWUtPnByZWN2YnVmID0gTlVMTDsJLyogY2FuJ3QgYWNjZXNzIHRoZSBwcmVjdmJ1ZiBmb3IgbmV3IGFyY2guICovCiAJCXByZWN2ZnJhbWUtPmxlbiA9IDA7CiAKIAkJdXBkYXRlX3JlY3ZmcmFtZV9hdHRyaWJfODhlKHByZWN2ZnJhbWUsIHByeHN0YXQpOwpAQCAtNTE4LDcgKzUxNyw2IEBACiAJCX0gZWxzZSB7CiAJCQlydHdfcmVzZXRfY29udGludWFsX3VyYl9lcnJvcihhZGFwdGVyX3RvX2R2b2JqKGFkYXB0KSk7CiAKLQkJCXByZWN2YnVmLT50cmFuc2Zlcl9sZW4gPSBwdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQkJc2tiX3B1dChwcmVjdmJ1Zi0+cHNrYiwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlza2JfcXVldWVfdGFpbCgmcHJlY3Zwcml2LT5yeF9za2JfcXVldWUsIHByZWN2YnVmLT5wc2tiKTsKIApAQCAtNTU5LDcgKzU1Nyw3IEBACiAJCQlydHdfcmVhZF9wb3J0KGFkYXB0LCBwcmVjdnByaXYtPmZmX2h3YWRkciwgMCwgKHVuc2lnbmVkIGNoYXIgKilwcmVjdmJ1Zik7CiAJCQlicmVhazsKIAkJY2FzZSAtRUlOUFJPR1JFU1M6Ci0JCQlEQkdfODhFKCJFUlJPUjogVVJCIElTIElOIFBST0dSRVNTIS9uIik7CisJCQlEQkdfODhFKCJFUlJPUjogVVJCIElTIElOIFBST0dSRVNTIVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtNjAxLDggKzU5OSw2IEBACiAJCQlwcmVjdmJ1Zi0+cmV1c2UgPSB0cnVlOwogCX0KIAotCXJ0bDgxODhldV9pbml0X3JlY3ZidWYoYWRhcHRlciwgcHJlY3ZidWYpOwotCiAJLyogcmUtYXNzaWduIGZvciBsaW51eCBiYXNlZCBvbiBza2IgKi8KIAlpZiAoKCFwcmVjdmJ1Zi0+cmV1c2UpIHx8IChwcmVjdmJ1Zi0+cHNrYiA9PSBOVUxMKSkgewogCQlwcmVjdmJ1Zi0+cHNrYiA9IG5ldGRldl9hbGxvY19za2IoYWRhcHRlci0+cG5ldGRldiwgTUFYX1JFQ1ZCVUZfU1ogKyBSRUNWQlVGRl9BTElHTl9TWik7CkBAIC02MTUsMTkgKzYxMSw3IEBACiAJCXRtcGFkZHIgPSAoc2l6ZV90KXByZWN2YnVmLT5wc2tiLT5kYXRhOwogCQlhbGlnbm1lbnQgPSB0bXBhZGRyICYgKFJFQ1ZCVUZGX0FMSUdOX1NaLTEpOwogCQlza2JfcmVzZXJ2ZShwcmVjdmJ1Zi0+cHNrYiwgKFJFQ1ZCVUZGX0FMSUdOX1NaIC0gYWxpZ25tZW50KSk7Ci0KLQkJcHJlY3ZidWYtPnBoZWFkID0gcHJlY3ZidWYtPnBza2ItPmhlYWQ7Ci0JCXByZWN2YnVmLT5wZGF0YSA9IHByZWN2YnVmLT5wc2tiLT5kYXRhOwotCQlwcmVjdmJ1Zi0+cHRhaWwgPSBza2JfdGFpbF9wb2ludGVyKHByZWN2YnVmLT5wc2tiKTsKLQkJcHJlY3ZidWYtPnBlbmQgPSBza2JfZW5kX3BvaW50ZXIocHJlY3ZidWYtPnBza2IpOwotCQlwcmVjdmJ1Zi0+cGJ1ZiA9IHByZWN2YnVmLT5wc2tiLT5kYXRhOwogCX0gZWxzZSB7IC8qIHJldXNlIHNrYiAqLwotCQlwcmVjdmJ1Zi0+cGhlYWQgPSBwcmVjdmJ1Zi0+cHNrYi0+aGVhZDsKLQkJcHJlY3ZidWYtPnBkYXRhID0gcHJlY3ZidWYtPnBza2ItPmRhdGE7Ci0JCXByZWN2YnVmLT5wdGFpbCA9IHNrYl90YWlsX3BvaW50ZXIocHJlY3ZidWYtPnBza2IpOwotCQlwcmVjdmJ1Zi0+cGVuZCA9IHNrYl9lbmRfcG9pbnRlcihwcmVjdmJ1Zi0+cHNrYik7Ci0JCXByZWN2YnVmLT5wYnVmID0gcHJlY3ZidWYtPnBza2ItPmRhdGE7Ci0KIAkJcHJlY3ZidWYtPnJldXNlID0gZmFsc2U7CiAJfQogCkBAIC02MzksNyArNjIzLDcgQEAKIAlwaXBlID0gZmZhZGRyMnBpcGVoZGwocGR2b2JqLCBhZGRyKTsKIAogCXVzYl9maWxsX2J1bGtfdXJiKHB1cmIsIHB1c2JkLCBwaXBlLAotCQkJICBwcmVjdmJ1Zi0+cGJ1ZiwKKwkJCSAgcHJlY3ZidWYtPnBza2ItPmRhdGEsCiAJCQkgIE1BWF9SRUNWQlVGX1NaLAogCQkJICB1c2JfcmVhZF9wb3J0X2NvbXBsZXRlLAogCQkJICBwcmVjdmJ1Zik7LyogY29udGV4dCBpcyBwcmVjdmJ1ZiAqLwpAQCAtNjk4LDkgKzY4MiwzIEBACiAJcG9wcy0+X3JlYWRfcG9ydF9jYW5jZWwgPSAmdXNiX3JlYWRfcG9ydF9jYW5jZWw7CiAJcG9wcy0+X3dyaXRlX3BvcnRfY2FuY2VsID0gJnVzYl93cml0ZV9wb3J0X2NhbmNlbDsKIH0KLQotdm9pZCBydGw4MTg4ZXVfc2V0X2h3X3R5cGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0KQotewotCWFkYXB0LT5jaGlwX3R5cGUgPSBSVEw4MTg4RTsKLQlEQkdfODhFKCJDSElQIFRZUEU6IFJUTDgxODhFXG4iKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9IYWw4MTg4RVBoeUNmZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL0hhbDgxODhFUGh5Q2ZnLmgKaW5kZXggMjVjYWU4MS4uMjYwZWE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL0hhbDgxODhFUGh5Q2ZnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL0hhbDgxODhFUGh5Q2ZnLmgKQEAgLTIyNCw3ICsyMjQsNiBAQAogLyogIEJCIFRYIFBvd2VyIFIvVyAqLwogdm9pZCBQSFlfR2V0VHhQb3dlckxldmVsODE4OEUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcG93ZXJsZXZlbCk7CiB2b2lkIFBIWV9TZXRUeFBvd2VyTGV2ZWw4MTg4RShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTggY2hhbm5lbCk7Ci1ib29sIFBIWV9VcGRhdGVUeFBvd2VyRGJtODE4OEUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3dlcik7CiAKIHZvaWQgUEhZX1NjYW5PcGVyYXRpb25CYWNrdXA4MTg4RShzdHJ1Y3QgYWRhcHRlciAqQWRhcHRlciwgdTggT3BlcmF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL2Rydl90eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL2Rydl90eXBlcy5oCmluZGV4IDkzNmMxOTYuLjEwY2MxYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9kcnZfdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvZHJ2X3R5cGVzLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KICNpbmNsdWRlIDx3bGFuX2Jzc2RlZi5oPgotI2luY2x1ZGUgPGRydl90eXBlc19saW51eC5oPgogI2luY2x1ZGUgPHJ0d19odC5oPgogI2luY2x1ZGUgPHJ0d19jbWQuaD4KICNpbmNsdWRlIDxydHdfeG1pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL2Rydl90eXBlc19saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL2Rydl90eXBlc19saW51eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTJiNzQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9kcnZfdHlwZXNfbGludXguaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfX0RSVl9UWVBFU19MSU5VWF9IX18KLSNkZWZpbmUgX19EUlZfVFlQRVNfTElOVVhfSF9fCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvaGFsX2ludGYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9oYWxfaW50Zi5oCmluZGV4IGMyNzRiMzQuLmM1OWZjY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9oYWxfaW50Zi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9oYWxfaW50Zi5oCkBAIC0xNjYsNyArMTY2LDYgQEAKIAl2b2lkCSgqRGVJbml0U3dMZWRzKShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpOwogCiAJdm9pZAkoKmRtX2luaXQpKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7Ci0Jdm9pZAkoKmRtX2RlaW5pdCkoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKTsKIAl2b2lkCSgqcmVhZF9jaGlwX3ZlcnNpb24pKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7CiAKIAl2b2lkCSgqaW5pdF9kZWZhdWx0X3ZhbHVlKShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpOwpAQCAtMjE4LDkgKzIxNyw2IEBACiAJdm9pZAkoKkFudERpdkNvbXBhcmVIYW5kbGVyKShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJc3RydWN0IHdsYW5fYnNzaWRfZXggKmRzdCwKIAkJCQkJc3RydWN0IHdsYW5fYnNzaWRfZXggKnNyYyk7Ci0JdTgJKCppbnRlcmZhY2VfcHNfZnVuYykoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgICAgZW51bSBoYWxfaW50Zl9wc19mdW5jIGVmdW5jX2lkLCB1OCAqdmFsKTsKLQogCXMzMgkoKmhhbF94bWl0KShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpOwogCXMzMiAoKm1nbnRfeG1pdCkoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLApAQCAtMjk5LDcgKzI5NSw2IEBACiB2b2lkCXJ0d19oYWxfZnJlZV9kYXRhKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7CiAKIHZvaWQgcnR3X2hhbF9kbV9pbml0KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfZG1fZGVpbml0KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIHJ0d19oYWxfc3dfbGVkX2luaXQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgcnR3X2hhbF9zd19sZWRfZGVpbml0KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7CiAKQEAgLTMzMiw5ICszMjcsNiBAQAogdTMyCXJ0d19oYWxfaW5pcnBfaW5pdChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpOwogdTMyCXJ0d19oYWxfaW5pcnBfZGVpbml0KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7CiAKLXU4CXJ0d19oYWxfaW50Zl9wc19mdW5jKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgZW51bSBoYWxfaW50Zl9wc19mdW5jIGVmdW5jX2lkLCB1OCAqdmFsKTsKLQogczMyCXJ0d19oYWxfeG1pdChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKTsKIHMzMglydHdfaGFsX21nbnRfeG1pdChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgIHN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vZG0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vZG0uaAppbmRleCA5ZDFhNzljLi5lODM4MTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29kbS5oCkBAIC05MCwxNCArOTAsNiBAQAogI2RlZmluZSBBTlRURVNUQQkJMHgwMQkvKiBBbnQgQSB3aWxsIGJlIFRlc3RpbmcgKi8KICNkZWZpbmUgQU5UVEVTVEIJCTB4MDIJLyogQW50IEIgd2lsbCBiZSB0ZXN0aW5nICovCiAKLS8qICBzdHJ1Y3R1cmUgYW5kIGRlZmluZSAqLwotCi0vKiAgQWRkIGZvciBBUC9BRFNMcHNldWRvIERNIHN0cnVjdHVlciByZXF1aXJlbWVudC4gKi8KLS8qICBXZSBuZWVkIHRvIHJlbW92ZSB0byBvdGhlciBwb3NpdGlvbj8/PyAqLwotc3RydWN0IHJ0bDgxOTJjZF9wcml2IHsKLQl1OAkJdGVtcDsKLX07Ci0KIHN0cnVjdCBydHdfZGlnIHsKIAl1OAkJRGlnX0VuYWJsZV9GbGFnOwogCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX1JUTDgxODhFLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX1JUTDgxODhFLmgKaW5kZXggZjk2YWQ1YS4uMDJhYzc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29kbV9SVEw4MTg4RS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vZG1fUlRMODE4OEUuaApAQCAtNTEsNiArNTEsNCBAQAogCiBib29sIE9ETV9EeW5hbWljUHJpbWFyeUNDQV9EdXBSVFMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwogCi12b2lkIG9kbV9EeW5hbWljUHJpbWFyeUNDQShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29kbV9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29kbV9kZWJ1Zy5oCmluZGV4IGU4YzRjYWIuLmRiN2I0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vZG1fZGVidWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX2RlYnVnLmgKQEAgLTg1LDcgKzg1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRXhwb3J0IE1hcmNvIERlZmluaXRpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSBEYmdQcmludAlwcl9pbmZvCiAjZGVmaW5lIFJUX1BSSU5USyhmbXQsIGFyZ3MuLi4pCQkJCVwKLQlEYmdQcmludCggIiVzKCk6ICIgZm10LCBfX2Z1bmNfXywgIyMgYXJncyk7CisJRGJnUHJpbnQoIiVzKCk6ICIgZm10LCBfX2Z1bmNfXywgIyMgYXJncyk7CiAKICNpZm5kZWYgQVNTRVJUCiAJI2RlZmluZSBBU1NFUlQoZXhwcikKQEAgLTEwNiw4ICsxMDYsOCBAQAogCiAjZGVmaW5lIE9ETV9SVF9BU1NFUlQocERNX09kbSwgZXhwciwgZm10KQkJCQlcCiAJaWYgKCEoZXhwcikpIHsJCQkJCQkJXAotCQlEYmdQcmludCggIkFzc2VydGlvbiBmYWlsZWQhICVzIGF0IC4uLi4uLlxuIiwgI2V4cHIpOwlcCi0JCURiZ1ByaW50KCAiICAgICAgLi4uLi4uJXMsJXMsbGluZT0lZFxuIiwgX19GSUxFX18sCVwKKwkJRGJnUHJpbnQoIkFzc2VydGlvbiBmYWlsZWQhICVzIGF0IC4uLi4uLlxuIiwgI2V4cHIpOwlcCisJCURiZ1ByaW50KCIgICAgICAuLi4uLi4lcywlcyxsaW5lPSVkXG4iLCBfX0ZJTEVfXywJXAogCQkJX19mdW5jX18sIF9fTElORV9fKTsJCQkJXAogCQlSVF9QUklOVEsgZm10OwkJCQkJCVwKIAkJQVNTRVJUKGZhbHNlKTsJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX2ludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29kbV9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4YTMwOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCi0gKgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYJX19PRE1fSU5URVJGQUNFX0hfXwotI2RlZmluZSBfX09ETV9JTlRFUkZBQ0VfSF9fCi0KLS8qICAqLwotLyogID09PT09PT09PT09IENvbnN0YW50L1N0cnVjdHVyZS9FbnVtLy4uLiBEZWZpbmUgKi8KLS8qICAqLwotCi0vKiAgKi8KLS8qICA9PT09PT09PT09PSBNYWNybyBEZWZpbmUgKi8KLS8qICAqLwotCi0jZGVmaW5lIF9yZWdfYWxsKF9uYW1lKQkJCU9ETV8jI19uYW1lCi0jZGVmaW5lIF9yZWdfaWMoX25hbWUsIF9pYykJCU9ETV8jI19uYW1lIyNfaWMKLSNkZWZpbmUgX2JpdF9hbGwoX25hbWUpCQkJQklUXyMjX25hbWUKLSNkZWZpbmUgX2JpdF9pYyhfbmFtZSwgX2ljKQkJQklUXyMjX25hbWUjI19pYwotCi0vKiAgX2NhdDogaW1wbGVtZW50ZWQgYnkgVG9rZW4tUGFzdGluZyBPcGVyYXRvci4gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jZGVmaW5lIE9ETV9SRUdfRElHXzExTgkJMHhDNTAKLSNkZWZpbmUgT0RNX1JFR19ESUdfMTFBQwkweERERAotCi1PRE1fUkVHKERJRyxfcERNX09kbSkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jZGVmaW5lIF9yZWdfMTFOKF9uYW1lKQkJCU9ETV9SRUdfIyNfbmFtZSMjXzExTgotI2RlZmluZSBfcmVnXzExQUMoX25hbWUpCQlPRE1fUkVHXyMjX25hbWUjI18xMUFDCi0jZGVmaW5lIF9iaXRfMTFOKF9uYW1lKQkJCU9ETV9CSVRfIyNfbmFtZSMjXzExTgotI2RlZmluZSBfYml0XzExQUMoX25hbWUpCQlPRE1fQklUXyMjX25hbWUjI18xMUFDCi0KLSNkZWZpbmUgX2NhdChfbmFtZSwgX2ljX3R5cGUsIF9mdW5jKQkJCQkJXAotCSgJCQkJCQkJCVwKLQkJKF9pY190eXBlKSA/IF9mdW5jIyNfMTFOKF9uYW1lKSA6CQkJXAotCQlfZnVuYyMjXzExQUMoX25hbWUpCQkJCQlcCi0JKQotCi0vKiAgX25hbWU6IG5hbWUgb2YgcmVnaXN0ZXIgb3IgYml0LiAqLwotLyogIEV4YW1wbGU6ICJPRE1fUkVHKFJfQV9BR0NfQ09SRTEsIHBETV9PZG0pIiAqLwotLyogICAgICAgICBnZXRzICJPRE1fUl9BX0FHQ19DT1JFMSIgb3IgIk9ETV9SX0FfQUdDX0NPUkUxXzgxOTJDIiwKLSAqCSAgIGRlcGVuZHMgb24gU3VwcG9ydElDVHlwZS4gKi8KLSNkZWZpbmUgT0RNX1JFRyhfbmFtZSwgX3BETV9PZG0pIF9jYXQoX25hbWUsIF9wRE1fT2RtLT5TdXBwb3J0SUNUeXBlLCBfcmVnKQotI2RlZmluZSBPRE1fQklUKF9uYW1lLCBfcERNX09kbSkgX2NhdChfbmFtZSwgX3BETV9PZG0tPlN1cHBvcnRJQ1R5cGUsIF9iaXQpCi0KLWVudW0gb2RtX2gyY19jbWQgewotCU9ETV9IMkNfUlNTSV9SRVBPUlQgPSAwLAotCU9ETV9IMkNfUFNEX1JFU1VMVCA9IDEsCi0JT0RNX0gyQ19QYXRoRGl2ID0gMiwKLQlPRE1fTUFYX0gyQ0NNRAotfTsKLQotLyogIDIwMTIvMDIvMTcgTUggRm9yIG5vbi1NUCBjb21waWxlIHBhc3Mgb25seS4gTGludXggZG9lcyBub3Qgc3VwcG9ydCB3b3JraXRlbS4gKi8KLS8qICBTdWdnZXN0IEhXIHRlYW0gdG8gdXNlIHRocmVhZCBpbnN0ZWFkIG9mIHdvcmtpdGVtLiBXaW5kb3dzIGFsc28gc3VwcG9ydCB0aGUgZmVhdHVyZS4gKi8KLXR5cGVkZWYgdm9pZCAoKlJUX1dPUktJVEVNX0NBTExfQkFDSykodm9pZCAqcENvbnRleHQpOwotCi0vKiAgPT09PT09PT09PT0gRXh0ZXJuIFZhcmlhYmxlID8/PyBJdCBzaG91bGQgYmUgZm9yYmlkZGVuLiAqLwotCi0vKiAgPT09PT09PT09PT0gRVh0ZXJuIEZ1bmN0aW9uIFByb3RvdHlwZSAqLwotCi0vKiAgTWVtb3J5IFJlbGF0aXZlIEZ1bmN0aW9uLiAqLwotCi0vKiAgT0RNIFRpbWVyIHJlbGF0aXZlIEFQSS4gKi8KLQotdm9pZCBPRE1fQ2FuY2VsVGltZXIoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIpOwotCi0vKiAgT0RNIEZXIHJlbGF0aXZlIEFQSS4gKi8KLXUzMiBPRE1fRmlsbEgyQ0NtZCh1OCAqcEgyQ0J1ZmZlciwgdTMyIEgyQ0J1ZmZlckxlbiwgdTMyIENtZE51bSwKLQkJICAgdTMyICpwRWxlbWVudElELCB1MzIgKnBDbWRMZW4sIHU4ICoqcENtYkJ1ZmZlciwKLQkJICAgdTggKkNtZFN0YXJ0U2VxKTsKLQotI2VuZGlmCS8qICBfX09ETV9JTlRFUkZBQ0VfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX3ByZWNvbXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vZG1fcHJlY29tcC5oCmluZGV4IDZlNmE2NTYuLjJlYjc2OWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX3ByZWNvbXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX3ByZWNvbXAuaApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkhhbDgxODhFUmF0ZUFkYXB0aXZlLmgiLyogZm9yICBSQSxQb3dlciB0cmFpbmluZyAqLwogI2luY2x1ZGUgInJ0bDgxODhlX2hhbC5oIgogCi0jaW5jbHVkZSAib2RtX2ludGVyZmFjZS5oIgogI2luY2x1ZGUgIm9kbV9yZWcuaCIKIAogI2luY2x1ZGUgIkhhbEhXSW1nODE4OEVfTUFDLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX3R5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb2RtX3R5cGVzLmgKaW5kZXggNzhlZTJiYS4uYzEzNTViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29kbV90eXBlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vZG1fdHlwZXMuaApAQCAtMjAsMzEgKzIwLDEzIEBACiAjaWZuZGVmIF9fT0RNX1RZUEVTX0hfXwogI2RlZmluZSBfX09ETV9UWVBFU19IX18KIAotLyogICovCi0vKiAgRGVmaW5lIERpZmZlcmVudCBTVyB0ZWFtIHN1cHBvcnQgKi8KLS8qICAqLwotI2RlZmluZQlPRE1fQVAJCQkweDAxCSAvKiBCSVQwICovCi0jZGVmaW5lCU9ETV9BRFNMCQkweDAyCS8qIEJJVDEgKi8KICNkZWZpbmUJT0RNX0NFCQkJMHgwNAkvKiBCSVQyICovCi0jZGVmaW5lCU9ETV9NUAkJCTB4MDgJLyogQklUMyAqLwotCi0jZGVmaW5lCQlSVF9QQ0lfSU5URVJGQUNFCQkJCTEKLSNkZWZpbmUJCVJUX1VTQl9JTlRFUkZBQ0UJCQkJMgotI2RlZmluZQkJUlRfU0RJT19JTlRFUkZBQ0UJCQkJMwogCiBlbnVtIEhBTF9TVEFUVVMgewogCUhBTF9TVEFUVVNfU1VDQ0VTUywKIAlIQUxfU1RBVFVTX0ZBSUxVUkUsCiB9OwogCi1lbnVtIFJUX1NQSU5MT0NLX1RZUEUgewotCVJUX1RFTVAgPSAxLAotfTsKLQotI2luY2x1ZGUgPGJhc2ljX3R5cGVzLmg+Ci0KLSNkZWZpbmUgREVWX0JVU19UWVBFCVJUX1VTQl9JTlRFUkZBQ0UKLQogI2RlZmluZSBTRVRfVFhfREVTQ19BTlRTRUxfQV84OEUoX19wVHhEZXNjLCBfX1ZhbHVlKQkJCVwKIAlTRVRfQklUU19UT19MRV80QllURShfX3BUeERlc2MrOCwgMjQsIDEsIF9fVmFsdWUpCiAjZGVmaW5lIFNFVF9UWF9ERVNDX0FOVFNFTF9CXzg4RShfX3BUeERlc2MsIF9fVmFsdWUpCQkJXApAQCAtNTIsMTEgKzM0LDQgQEAKICNkZWZpbmUgU0VUX1RYX0RFU0NfQU5UU0VMX0NfODhFKF9fcFR4RGVzYywgX19WYWx1ZSkJCQlcCiAJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wVHhEZXNjKzI4LCAyOSwgMSwgX19WYWx1ZSkKIAotLyogZGVmaW5lIHVzZWxlc3MgZmxhZyB0byBhdm9pZCBjb21waWxlIHdhcm5pbmcgKi8KLSNkZWZpbmUJVVNFX1dPUktJVEVNCQkJMAotI2RlZmluZQkJRk9SX0JSQVpJTF9QUkVURVNUCTAKLSNkZWZpbmUJQlRfMzBfU1VQUE9SVAkJCTAKLSNkZWZpbmUgICBGUEdBX1RXT19NQUNfVkVSSUZJQ0FUSU9OCTAKLQotCiAjZW5kaWYgLyogIF9fT0RNX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29zZGVwX3NlcnZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9vc2RlcF9zZXJ2aWNlLmgKaW5kZXggNTg4OWY1OC4uMzg1OWFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL29zZGVwX3NlcnZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvb3NkZXBfc2VydmljZS5oCkBAIC0xMTksMjEgKzExOSw2IEBACiAJCW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQobmV0ZGV2X2dldF90eF9xdWV1ZShwbmV0ZGV2LCAzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydHdfbmV0aWZfd2FrZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldikKLXsKLQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMocG5ldGRldik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydHdfbmV0aWZfc3RhcnRfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKnBuZXRkZXYpCi17Ci0JbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhwbmV0ZGV2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0d19uZXRpZl9zdG9wX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpwbmV0ZGV2KQotewotCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwbmV0ZGV2KTsKLX0KLQogI2lmbmRlZiBCSVQKIAkjZGVmaW5lIEJJVCh4KQkoMSA8PCAoeCkpCiAjZW5kaWYKQEAgLTI1NCwxMSArMjM5LDYgQEAKIAkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmVzX3RvX3N0YXR1cyhpbnQgcmVzKQotewotCXJldHVybiByZXM7Ci19Ci0KICNkZWZpbmUgX1JORChzeiwgcikgKCgoKHN6KSsoKHIpLTEpKS8ocikpKihyKSkKICNkZWZpbmUgUk5ENCh4KQkoKCh4ID4+IDIpICsgKCgoeCAmIDMpID09IDApID8gIDAgOiAxKSkgPDwgMikKIApAQCAtMzU5LDE1ICszMzksNyBAQAogCiAjZGVmaW5lIFJUV19HRVRfQkUyNChhKSAoKCgodTMyKSAoYSlbMF0pIDw8IDE2KSB8ICgoKHUzMikgKGEpWzFdKSA8PCA4KSB8IFwKIAkJCSAoKHUzMikgKGEpWzJdKSkKLSNkZWZpbmUgUlRXX1BVVF9CRTI0KGEsIHZhbCkJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJKGEpWzBdID0gKHU4KSAoKCgodTMyKSAodmFsKSkgPj4gMTYpICYgMHhmZik7CVwKLQkJKGEpWzFdID0gKHU4KSAoKCgodTMyKSAodmFsKSkgPj4gOCkgJiAweGZmKTsJXAotCQkoYSlbMl0gPSAodTgpICgoKHUzMikgKHZhbCkpICYgMHhmZik7CQlcCi0JfSB3aGlsZSAoMCkKIAotI2RlZmluZSBSVFdfR0VUX0JFMzIoYSkgKCgoKHUzMikgKGEpWzBdKSA8PCAyNCkgfCAoKCh1MzIpIChhKVsxXSkgPDwgMTYpIHwgXAotCQkJICgoKHUzMikgKGEpWzJdKSA8PCA4KSB8ICgodTMyKSAoYSlbM10pKQogI2RlZmluZSBSVFdfUFVUX0JFMzIoYSwgdmFsKQkJCQkJXAogCWRvIHsJCQkJCQkJXAogCQkoYSlbMF0gPSAodTgpICgoKCh1MzIpICh2YWwpKSA+PiAyNCkgJiAweGZmKTsJXApAQCAtMzc2LDM3ICszNDgsNiBAQAogCQkoYSlbM10gPSAodTgpICgoKHUzMikgKHZhbCkpICYgMHhmZik7CQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBSVFdfR0VUX0xFMzIoYSkgKCgoKHUzMikgKGEpWzNdKSA8PCAyNCkgfCAoKCh1MzIpIChhKVsyXSkgPDwgMTYpIHwgXAotCQkJICgoKHUzMikgKGEpWzFdKSA8PCA4KSB8ICgodTMyKSAoYSlbMF0pKQotI2RlZmluZSBSVFdfUFVUX0xFMzIoYSwgdmFsKQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQkoYSlbM10gPSAodTgpICgoKCh1MzIpICh2YWwpKSA+PiAyNCkgJiAweGZmKTsJXAotCQkoYSlbMl0gPSAodTgpICgoKCh1MzIpICh2YWwpKSA+PiAxNikgJiAweGZmKTsJXAotCQkoYSlbMV0gPSAodTgpICgoKCh1MzIpICh2YWwpKSA+PiA4KSAmIDB4ZmYpOwlcCi0JCShhKVswXSA9ICh1OCkgKCgodTMyKSAodmFsKSkgJiAweGZmKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJUV19HRVRfQkU2NChhKSAoKCgodTY0KSAoYSlbMF0pIDw8IDU2KSB8ICgoKHU2NCkgKGEpWzFdKSA8PCA0OCkgfCBcCi0JCQkgKCgodTY0KSAoYSlbMl0pIDw8IDQwKSB8ICgoKHU2NCkgKGEpWzNdKSA8PCAzMikgfCBcCi0JCQkgKCgodTY0KSAoYSlbNF0pIDw8IDI0KSB8ICgoKHU2NCkgKGEpWzVdKSA8PCAxNikgfCBcCi0JCQkgKCgodTY0KSAoYSlbNl0pIDw8IDgpIHwgKCh1NjQpIChhKVs3XSkpCi0jZGVmaW5lIFJUV19QVVRfQkU2NChhLCB2YWwpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQkoYSlbMF0gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDU2KTsJXAotCQkoYSlbMV0gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDQ4KTsJXAotCQkoYSlbMl0gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDQwKTsJXAotCQkoYSlbM10gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDMyKTsJXAotCQkoYSlbNF0gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDI0KTsJXAotCQkoYSlbNV0gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDE2KTsJXAotCQkoYSlbNl0gPSAodTgpICgoKHU2NCkgKHZhbCkpID4+IDgpOwlcCi0JCShhKVs3XSA9ICh1OCkgKCgodTY0KSAodmFsKSkgJiAweGZmKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUlRXX0dFVF9MRTY0KGEpICgoKCh1NjQpIChhKVs3XSkgPDwgNTYpIHwgKCgodTY0KSAoYSlbNl0pIDw8IDQ4KSB8IFwKLQkJCSAoKCh1NjQpIChhKVs1XSkgPDwgNDApIHwgKCgodTY0KSAoYSlbNF0pIDw8IDMyKSB8IFwKLQkJCSAoKCh1NjQpIChhKVszXSkgPDwgMjQpIHwgKCgodTY0KSAoYSlbMl0pIDw8IDE2KSB8IFwKLQkJCSAoKCh1NjQpIChhKVsxXSkgPDwgOCkgfCAoKHU2NCkgKGEpWzBdKSkKLQogdm9pZCBydHdfYnVmX2ZyZWUodTggKipidWYsIHUzMiAqYnVmX2xlbik7CiB2b2lkIHJ0d19idWZfdXBkYXRlKHU4ICoqYnVmLCB1MzIgKmJ1Zl9sZW4sIHU4ICpzcmMsIHUzMiBzcmNfbGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3JlY3Zfb3NkZXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9yZWN2X29zZGVwLmgKaW5kZXggZDc2Y2MyZC4uYTRmZDk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3JlY3Zfb3NkZXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcmVjdl9vc2RlcC5oCkBAIC0zMywxOSArMzMsMTUgQEAKIAkJCSBzdHJ1Y3QgcmVjdl9mcmFtZSAqcmVjdl9mcmFtZSk7CiB2b2lkIHJ0d19yZWN2X3JldHVybnBhY2tldChzdHJ1Y3QgIG5ldF9kZXZpY2UgKmNueHQsIHN0cnVjdCBza19idWZmICpyZXRwa3QpOwogCi12b2lkIHJ0d19ob3N0YXBkX21sbWVfcngoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcmVjdl9mcik7CiB2b2lkIHJ0d19oYW5kbGVfdGtpcF9taWNfZXJyKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTggYmdyb3VwKTsKIAogaW50IHJ0d19pbml0X3JlY3ZfcHJpdihzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYsIHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIHJ0d19mcmVlX3JlY3ZfcHJpdihzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYpOwogCi1pbnQgcnR3X29zX3JlY3ZfcmVzb3VyY2VfaW5pdChzdHJ1Y3QgcmVjdl9wcml2ICpyZWN2cHIsIHN0cnVjdCBhZGFwdGVyICphZGFwdCk7CiBpbnQgcnR3X29zX3JlY3ZfcmVzb3VyY2VfYWxsb2Moc3RydWN0IGFkYXB0ZXIgKmFkYXB0LAogCQkJICAgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpyZWN2ZnIpOwotdm9pZCBydHdfb3NfcmVjdl9yZXNvdXJjZV9mcmVlKHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdik7CiAKIGludCBydHdfb3NfcmVjdmJ1Zl9yZXNvdXJjZV9hbGxvYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHQsIHN0cnVjdCByZWN2X2J1ZiAqYnVmKTsKLWludCBydHdfb3NfcmVjdmJ1Zl9yZXNvdXJjZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdCwgc3RydWN0IHJlY3ZfYnVmICpidWYpOwogCiB2b2lkIHJ0d19vc19yZWFkX3BvcnQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0bDgxODhlX2RtLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnRsODE4OGVfZG0uaAppbmRleCA5N2EzMTc1Li41ZTBhYzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnRsODE4OGVfZG0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnRsODE4OGVfZG0uaApAQCAtNTEsNyArNTEsNiBAQAogfTsKIAogdm9pZCBydGw4MTg4ZV9pbml0X2RtX3ByaXYoc3RydWN0IGFkYXB0ZXIgKmFkYXB0KTsKLXZvaWQgcnRsODE4OGVfZGVpbml0X2RtX3ByaXYoc3RydWN0IGFkYXB0ZXIgKmFkYXB0KTsKIHZvaWQgcnRsODE4OGVfSW5pdEhhbERtKHN0cnVjdCBhZGFwdGVyICphZGFwdCk7CiB2b2lkIHJ0bDgxODhlX0hhbERtV2F0Y2hEb2coc3RydWN0IGFkYXB0ZXIgKmFkYXB0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0bDgxODhlX2hhbC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0bDgxODhlX2hhbC5oCmluZGV4IDc1ZTQxYzQuLmZlM2I0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydGw4MTg4ZV9oYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnRsODE4OGVfaGFsLmgKQEAgLTQ3MSw2ICs0NzEsNSBAQAogdm9pZCBydHdfSU9MX2NtZF90eF9wa3RfYnVmX2R1bXAoc3RydWN0IGFkYXB0ZXIgICpBZGFwdGVyLCBpbnQgbGVuKTsKIHMzMiBydGw4MTg4ZV9pb2xfZWZ1c2VfcGF0Y2goc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgcnR3X2NhbmNlbF9hbGxfdGltZXIoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgX3BzX29wZW5fUkYoc3RydWN0IGFkYXB0ZXIgKmFkYXB0KTsKIAogI2VuZGlmIC8qIF9fUlRMODE4OEVfSEFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0bDgxODhlX3JlY3YuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydGw4MTg4ZV9yZWN2LmgKaW5kZXggMDdlNWY1Mi4uNWZlZDMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0bDgxODhlX3JlY3YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnRsODE4OGVfcmVjdi5oCkBAIC01Niw3ICs1Niw2IEBACiB9OwogCiAjZGVmaW5lIElOVEVSUlVQVF9NU0dfRk9STUFUX0xFTiA2MAotdm9pZCBydGw4MTg4ZXVfaW5pdF9yZWN2YnVmKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfYnVmICpidWYpOwogczMyIHJ0bDgxODhldV9pbml0X3JlY3ZfcHJpdihzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBydGw4MTg4ZXVfZnJlZV9yZWN2X3ByaXYoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgcnRsODE4OGV1X3JlY3ZfaGRsKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfYnVmICpwcmVjdmJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnR3X2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0d19jbWQuaAppbmRleCAzZDM0NzAyLi42NjQ2N2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnR3X2NtZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfY21kLmgKQEAgLTgwNyw3ICs4MDcsNiBAQAogdTggcnR3X3NldF9jaF9jbWQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBjaCwgdTggYncsIHU4IGNoX29mZnNldCwKIAkJICB1OCBlbnF1ZXVlKTsKIHU4IHJ0d19zZXRfY2hwbGFuX2NtZChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGNocGxhbiwgdTggZW5xdWV1ZSk7Ci11OCBydHdfbGVkX2JsaW5rX2NtZChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBMRURfODcxeCAqcExlZCk7CiB1OCBydHdfc2V0X2NzYV9jbWQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBuZXdfY2hfbm8pOwogdTggcnR3X3RkbHNfY21kKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTggKmFkZHIsIHU4IG9wdGlvbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfbGVkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnR3X2xlZC5oCmluZGV4IDBkYTRlMjcuLmM1MTk0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfbGVkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0d19sZWQuaApAQCAtMjMsOTIgKzIzLDQzIEBACiAjaW5jbHVkZSA8b3NkZXBfc2VydmljZS5oPgogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogCi0jZGVmaW5lIE1TRUNTKHQpICAgICAgICAoSFogKiAoKHQpIC8gMTAwMCkgKyAoSFogKiAoKHQpICUgMTAwMCkpIC8gMTAwMCkKLQotI2RlZmluZSBMRURfQkxJTktfTk9STUFMX0lOVEVSVkFMCQkxMDAKLSNkZWZpbmUgTEVEX0JMSU5LX1NMT1dMWV9JTlRFUlZBTAkJMjAwCi0jZGVmaW5lIExFRF9CTElOS19MT05HX0lOVEVSVkFMCQkJNDAwCi0KICNkZWZpbmUgTEVEX0JMSU5LX05PX0xJTktfSU5URVJWQUxfQUxQSEEJMTAwMAogI2RlZmluZSBMRURfQkxJTktfTElOS19JTlRFUlZBTF9BTFBIQQkJNTAwCS8qIDUwMCAqLwogI2RlZmluZSBMRURfQkxJTktfU0NBTl9JTlRFUlZBTF9BTFBIQQkJMTgwCS8qIDE1MCAqLwogI2RlZmluZSBMRURfQkxJTktfRkFTVEVSX0lOVEVSVkFMX0FMUEhBCQk1MAogI2RlZmluZSBMRURfQkxJTktfV1BTX1NVQ0VTU19JTlRFUlZBTF9BTFBIQQk1MDAwCiAKLSNkZWZpbmUgTEVEX0JMSU5LX05PUk1BTF9JTlRFUlZBTF9ORVRUUk9OSVgJMTAwCi0jZGVmaW5lIExFRF9CTElOS19TTE9XTFlfSU5URVJWQUxfTkVUVFJPTklYCTIwMDAKLQotI2RlZmluZSBMRURfQkxJTktfU0xPV0xZX0lOVEVSVkFMX1BPUk5FVAkxMDAwCi0jZGVmaW5lIExFRF9CTElOS19OT1JNQUxfSU5URVJWQUxfUE9STkVUCTEwMAotCi0jZGVmaW5lIExFRF9CTElOS19GQVNUX0lOVEVSVkFMX0JJVExBTkQJCTMwCi0KLS8qICAwNjA0MDMsIHJjbmprbzogQ3VzdG9taXplZCBmb3IgQXpXYXZlLiAqLwotI2RlZmluZSBMRURfQ00yX0JMSU5LX09OX0lOVEVSVkFMCQkyNTAKLSNkZWZpbmUgTEVEX0NNMl9CTElOS19PRkZfSU5URVJWQUwJCTQ3NTAKLQotI2RlZmluZSBMRURfQ004X0JMSU5LX0lOVEVSVkFMCQkJNTAwCS8qIGZvciBRTUkgKi8KLSNkZWZpbmUgTEVEX0NNOF9CTElOS19PRkZfSU5URVJWQUwJCTM3NTAJLyogZm9yIFFNSSAqLwotCi0vKiAgMDgwMTI0LCBsYW5oc2luOiBDdXN0b21pemVkIGZvciBSdW5Ub3AgKi8KLSNkZWZpbmUgTEVEX1J1blRvcF9CTElOS19JTlRFUlZBTAkJMzAwCi0KLS8qICAwNjA0MjEsIHJjbmprbzogQ3VzdG9taXplZCBmb3IgU2VyY29tbSBQcmludGVyIFNlcnZlciBjYXNlLiAqLwotI2RlZmluZSBMRURfQ00zX0JMSU5LX0lOVEVSVkFMCQkJMTUwMAotCiBlbnVtIExFRF9DVExfTU9ERSB7Ci0JTEVEX0NUTF9QT1dFUl9PTiA9IDEsCi0JTEVEX0NUTF9MSU5LID0gMiwKLQlMRURfQ1RMX05PX0xJTksgPSAzLAotCUxFRF9DVExfVFggPSA0LAotCUxFRF9DVExfUlggPSA1LAotCUxFRF9DVExfU0lURV9TVVJWRVkgPSA2LAotCUxFRF9DVExfUE9XRVJfT0ZGID0gNywKLQlMRURfQ1RMX1NUQVJUX1RPX0xJTksgPSA4LAotCUxFRF9DVExfU1RBUlRfV1BTID0gOSwKLQlMRURfQ1RMX1NUT1BfV1BTID0gMTAsCi0JTEVEX0NUTF9TVEFSVF9XUFNfQk9UVE9OID0gMTEsIC8qIGFkZGVkIGZvciBydW50b3AgKi8KLQlMRURfQ1RMX1NUT1BfV1BTX0ZBSUwgPSAxMiwgLyogYWRkZWQgZm9yIEFMUEhBICovCi0JTEVEX0NUTF9TVE9QX1dQU19GQUlMX09WRVJMQVAgPSAxMywgLyogYWRkZWQgZm9yIEJFTEtJTiAqLwotCUxFRF9DVExfQ09OTkVDVElPTl9OT19UUkFOU0ZFUiA9IDE0LAorCUxFRF9DVExfUE9XRVJfT04sCisJTEVEX0NUTF9MSU5LLAorCUxFRF9DVExfTk9fTElOSywKKwlMRURfQ1RMX1RYLAorCUxFRF9DVExfUlggLAorCUxFRF9DVExfU0lURV9TVVJWRVksCisJTEVEX0NUTF9QT1dFUl9PRkYsCisJTEVEX0NUTF9TVEFSVF9UT19MSU5LLAorCUxFRF9DVExfU1RBUlRfV1BTLAorCUxFRF9DVExfU1RPUF9XUFMsCisJTEVEX0NUTF9TVEFSVF9XUFNfQk9UVE9OLAorCUxFRF9DVExfU1RPUF9XUFNfRkFJTAogfTsKIAogZW51bSBMRURfU1RBVEVfODcxeCB7Ci0JTEVEX1VOS05PV04gPSAwLAotCVJUV19MRURfT04gPSAxLAotCVJUV19MRURfT0ZGID0gMiwKLQlMRURfQkxJTktfTk9STUFMID0gMywKLQlMRURfQkxJTktfU0xPV0xZID0gNCwKLQlMRURfQkxJTktfUE9XRVJfT04gPSA1LAotCUxFRF9CTElOS19TQ0FOID0gNiwgLyogIExFRCBpcyBibGlua2luZyBkdXJpbmcgc2Nhbm5pbmcgcGVyaW9kLAotCQkJICAgICAqIHRoZSAjIG9mIHRpbWVzIHRvIGJsaW5rIGlzIGRlcGVuZCBvbiB0aW1lCi0JCQkgICAgICogZm9yIHNjYW5uaW5nLiAqLwotCUxFRF9CTElOS19OT19MSU5LID0gNywgLyogIExFRCBpcyBibGlua2luZyBkdXJpbmcgbm8gbGluayBzdGF0ZS4gKi8KLQlMRURfQkxJTktfU3RhcnRUb0JsaW5rID0gOCwvKiAgQ3VzdG9temllZCBmb3IgU2VyY29tbSBQcmludGVyCi0JCQkJICAgICogU2VydmVyIGNhc2UgKi8KLQlMRURfQkxJTktfVFhSWCA9IDksCi0JTEVEX0JMSU5LX1dQUyA9IDEwLAkvKiAgTEVEIGlzIGJsaW5rZyBkdXJpbmcgV1BTIGNvbW11bmljYXRpb24gKi8KLQlMRURfQkxJTktfV1BTX1NUT1AgPSAxMSwJLyogZm9yIEFMUEhBICovCi0JTEVEX0JMSU5LX1dQU19TVE9QX09WRVJMQVAgPSAxMiwJLyogZm9yIEJFTEtJTiAqLwotCUxFRF9CTElOS19SVU5UT1AgPSAxMywgLyogIEN1c3RvbWl6ZWQgZm9yIFJ1blRvcCAqLwotCUxFRF9CTElOS19DQU1FTyA9IDE0LAotCUxFRF9CTElOS19YQVZJID0gMTUsCi0JTEVEX0JMSU5LX0FMV0FZU19PTiA9IDE2LAotfTsKLQotZW51bSBMRURfUElOXzg3MXggewotCUxFRF9QSU5fTlVMTCA9IDAsCi0JTEVEX1BJTl9MRUQwID0gMSwKLQlMRURfUElOX0xFRDEgPSAyLAotCUxFRF9QSU5fTEVEMiA9IDMsCi0JTEVEX1BJTl9HUElPMCA9IDQsCisJTEVEX1VOS05PV04sCisJUlRXX0xFRF9PTiwKKwlSVFdfTEVEX09GRiwKKwlMRURfQkxJTktfTk9STUFMLAorCUxFRF9CTElOS19TTE9XTFksCisJTEVEX0JMSU5LX1BPV0VSX09OLAorCUxFRF9CTElOS19TQ0FOLAorCUxFRF9CTElOS19UWFJYLAorCUxFRF9CTElOS19XUFMsCisJTEVEX0JMSU5LX1dQU19TVE9QCiB9OwogCiBzdHJ1Y3QgTEVEXzg3MXggewogCXN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcjsKIAotCWVudW0gTEVEX1BJTl84NzF4CUxlZFBpbjsJLyogSWRlbnRpZnkgaG93IHRvIGltcGxlbWVudCB0aGlzCi0JCQkJCSAqIFNXIGxlZC4gKi8KIAllbnVtIExFRF9TVEFURV84NzF4CUN1cnJMZWRTdGF0ZTsgLyogIEN1cnJlbnQgTEVEIHN0YXRlLiAqLwogCWVudW0gTEVEX1NUQVRFXzg3MXgJQmxpbmtpbmdMZWRTdGF0ZTsgLyogIE5leHQgc3RhdGUgZm9yIGJsaW5raW5nLAogCQkJCSAgICogZWl0aGVyIFJUV19MRURfT04gb3IgUlRXX0xFRF9PRkYgYXJlLiAqLwpAQCAtMTM5LDM0ICs5MCwxMSBAQAogCSgoc3RydWN0IExFRF84NzF4ICopX0xFRF84NzF4KS0+Q3VyckxlZFN0YXRlID09IExFRF9CTElOS19XUFNfU1RPUCB8fCBcCiAJKChzdHJ1Y3QgTEVEXzg3MXggKilfTEVEXzg3MXgpLT5iTGVkV1BTQmxpbmtJblByb2dyZXNzKQogCi0jZGVmaW5lIElTX0xFRF9CTElOS0lORyhfTEVEXzg3MXgpCQkJCQlcCi0JKCgoc3RydWN0IExFRF84NzF4ICopX0xFRF84NzF4KS0+YkxlZFdQU0JsaW5rSW5Qcm9ncmVzcwl8fAlcCi0JKChzdHJ1Y3QgTEVEXzg3MXggKilfTEVEXzg3MXgpLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcykKLQotLyogIExFRCBjdXN0b21pemF0aW9uLiAqLwotCi1lbnVtIExFRF9TVFJBVEVHWV84NzF4IHsKLQlTV19MRURfTU9ERTAgPSAwLCAvKiBTVyBjb250cm9sIDEgTEVEIHZpYSBHUElPMC4gSXQgaXMgZGVmYXVsdCBvcHRpb24uKi8KLQlTV19MRURfTU9ERTEgPSAxLCAvKiAgMiBMRURzLCB0aHJvdWdoIExFRDAgYW5kIExFRDEuIEZvciBBTFBIQS4gKi8KLQlTV19MRURfTU9ERTIgPSAyLCAvKiAgU1cgY29udHJvbCAxIExFRCB2aWEgR1BJTzAsIGN1c3RvbWl6ZWQgZm9yIEF6V2F2ZQotCQkJICAgKiA4MTg3IG1pbmljYXJkLiAqLwotCVNXX0xFRF9NT0RFMyA9IDMsIC8qICBTVyBjb250cm9sIDEgTEVEIHZpYSBHUElPMCwgY3VzdG9taXplZCBmb3IgU2VyY29tbQotCQkJICAgKiBQcmludGVyIFNlcnZlciBjYXNlLiAqLwotCVNXX0xFRF9NT0RFNCA9IDQsIC8qIGZvciBFZGltYXggLyBCZWxraW4gKi8KLQlTV19MRURfTU9ERTUgPSA1LCAvKiBmb3IgU2VyY29tbSAvIEJlbGtpbiAqLwotCVNXX0xFRF9NT0RFNiA9IDYsIC8qIGZvciA4OENVIG1pbmljYXJkLCBwb3J0aW5nIGZyb20gY2UgU1dfTEVEX01PREU3ICovCi0JSFdfTEVEID0gNTAsIC8qICBIVyBjb250cm9sIDIgTEVEcywgTEVEMCBhbmQgTEVEMSAodGhlcmUgYXJlIDQKLQkJICAgICAgKiBkaWZmZXJlbnQgY29udHJvbCBtb2Rlcywgc2VlIE1BQy5DT05GSUcxIGZvciBkZXRhaWxzLikqLwotCUxFRF9TVF9OT05FID0gOTksCi19OwotCiB2b2lkIExlZENvbnRyb2w4MTg4ZXUoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBlbnVtIExFRF9DVExfTU9ERQlMZWRBY3Rpb24pOwogCiBzdHJ1Y3QgbGVkX3ByaXZ7CiAJLyogYWRkIGZvciBsZWQgY29udHJvbCAqLwogCXN0cnVjdCBMRURfODcxeAkJCVN3TGVkMDsKLQlzdHJ1Y3QgTEVEXzg3MXgJCQlTd0xlZDE7Ci0JZW51bSBMRURfU1RSQVRFR1lfODcxeAlMZWRTdHJhdGVneTsKIAl1OAliUmVnVXNlTGVkOwogCXZvaWQgKCpMZWRDb250cm9sSGFuZGxlcikoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLAogCQkJCSAgZW51bSBMRURfQ1RMX01PREUgTGVkQWN0aW9uKTsKQEAgLTE4NCw4ICsxMTIsNyBAQAogCiB2b2lkIFJlc2V0TGVkU3RhdHVzKHN0cnVjdCBMRURfODcxeCAqcExlZCk7CiAKLXZvaWQgSW5pdExlZDg3MXgoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgTEVEXzg3MXggKnBMZWQsCi0JCSBlbnVtIExFRF9QSU5fODcxeCBMZWRQaW4pOwordm9pZCBJbml0TGVkODcxeChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBMRURfODcxeCAqcExlZCk7CiAKIHZvaWQgRGVJbml0TGVkODcxeChzdHJ1Y3QgTEVEXzg3MXggKnBMZWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvcnR3X3B3cmN0cmwuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfcHdyY3RybC5oCmluZGV4IDlhNDI4NTkuLjU0ZGZiZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfcHdyY3RybC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfcHdyY3RybC5oCkBAIC0xOTIsNyArMTkyLDcgQEAKIAl1OAlpcHNfbW9kZV9yZXE7CS8qICB1c2VkIHRvIGFjY2VwdCB0aGUgbW9kZSBzZXR0aW5nIHJlcXVlc3QsCiAJCQkJICogIHdpbGwgdXBkYXRlIHRvIGlwc21vZGUgbGF0ZXIgKi8KIAl1aW50IGJpcHNfcHJvY2Vzc2luZzsKLQl1MzIgaXBzX2RlbnlfdGltZTsgLyogd2lsbCBkZW55IElQUyB3aGVuIHN5c3RlbSB0aW1lIGxlc3MgdGhhbiB0aGlzICovCisJdW5zaWduZWQgbG9uZyBpcHNfZGVueV90aW1lOyAvKiB3aWxsIGRlbnkgSVBTIHdoZW4gc3lzdGVtIHRpbWUgbGVzcyB0aGFuIHRoaXMgKi8KIAl1OCBwc19wcm9jZXNzaW5nOyAvKiB0ZW1wIHVzZWQgdG8gbWFyayB3aGV0aGVyIGluIHJ0d19wc19wcm9jZXNzb3IgKi8KIAogCXU4CWJMZWlzdXJlUHM7CkBAIC0yNTgsOCArMjU4LDYgQEAKIHZvaWQgTFBTX0VudGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgTFBTX0xlYXZlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIAotdTggcnR3X2ludGVyZmFjZV9wc19mdW5jKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJIGVudW0gaGFsX2ludGZfcHNfZnVuYyBlZnVuY19pZCwgdTggKnZhbCk7CiB2b2lkIHJ0d19zZXRfaXBzX2Rlbnkoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtcyk7CiBpbnQgX3J0d19wd3Jfd2FrZXVwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXBzX2RlZmVyX21zLAogCQkgICAgY29uc3QgY2hhciAqY2FsbGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS9ydHdfcmVjdi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0d19yZWN2LmgKaW5kZXggYmNiY2U0Ni4uZjBjMjZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0d19yZWN2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3J0d19yZWN2LmgKQEAgLTE3NSw3ICsxNzUsNiBAQAogdXNpbmcgZW50ZXJfY3JpdGljYWwgc2VjdGlvbiB0byBwcm90ZWN0CiAqLwogc3RydWN0IHJlY3ZfcHJpdiB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBfX3F1ZXVlIGZyZWVfcmVjdl9xdWV1ZTsKIAlzdHJ1Y3QgX19xdWV1ZSByZWN2X3BlbmRpbmdfcXVldWU7CiAJc3RydWN0IF9fcXVldWUgdWNfc3dkZWNfcGVuZGluZ19xdWV1ZTsKQEAgLTE4OSwxMSArMTg4LDYgQEAKIAl1NjQJcnhfZHJvcDsKIAl1NjQJbGFzdF9yeF9ieXRlczsKIAotCXVpbnQgIHJ4X2ljdl9lcnI7Ci0JdWludCAgcnhfbGFyZ2VwYWNrZXRfY3JjZXJyOwotCXVpbnQgIHJ4X3NtYWxscGFja2V0X2NyY2VycjsKLQl1aW50ICByeF9taWRkbGVwYWNrZXRfY3JjZXJyOwotCXN0cnVjdCBzZW1hcGhvcmUgYWxscnhyZXR1cm5ldnQ7CiAJdWludAlmZl9od2FkZHI7CiAJdTgJcnhfcGVuZGluZ19jbnQ7CiAKQEAgLTIxMyw5ICsyMDcsNyBAQAogCXU4IHNpZ25hbF9zdHJlbmd0aDsKIAl1OCBzaWduYWxfcXVhbDsKIAl1OCBub2lzZTsKLQlpbnQgUnhTTlJkQlsyXTsKIAlzOCBSeFJzc2lbMl07Ci0JaW50IEZhbHNlQWxtQ250X2FsbDsKIAogCXN0cnVjdCB0aW1lcl9saXN0IHNpZ25hbF9zdGF0X3RpbWVyOwogCXUzMiBzaWduYWxfc3RhdF9zYW1wbGluZ19pbnRlcnZhbDsKQEAgLTIzNSwyMiArMjI3LDggQEAKIH07CiAKIHN0cnVjdCByZWN2X2J1ZiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgcmVjdmJ1Zl9sb2NrOwotCXUzMglyZWZfY250OwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXU4CSpwYnVmOwotCXU4CSpwYWxsb2NhdGVkX2J1ZjsKLQl1MzIJbGVuOwotCXU4CSpwaGVhZDsKLQl1OAkqcGRhdGE7Ci0JdTgJKnB0YWlsOwotCXU4CSpwZW5kOwogCXN0cnVjdCB1cmIgKnB1cmI7Ci0JZG1hX2FkZHJfdCBkbWFfdHJhbnNmZXJfYWRkcjsJLyogKGluKSBkbWEgYWRkciBmb3IgdHJhbnNmZXJfYnVmZmVyICovCi0JdTMyIGFsbG9jX3N6OwotCXU4ICBpcnBfcGVuZGluZzsKLQlpbnQgIHRyYW5zZmVyX2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYjsKIAl1OAlyZXVzZTsKIH07CkBAIC0yNzUsMTUgKzI1MywxMiBAQAogCXN0cnVjdCBza19idWZmCSAqcGt0OwogCXN0cnVjdCBza19idWZmCSAqcGt0X25ld2FsbG9jOwogCXN0cnVjdCBhZGFwdGVyICAqYWRhcHRlcjsKLQl1OCBmcmFnY250OwotCWludCBmcmFtZV90YWc7CiAJc3RydWN0IHJ4X3BrdF9hdHRyaWIgYXR0cmliOwogCXVpbnQgIGxlbjsKIAl1OCAqcnhfaGVhZDsKIAl1OCAqcnhfZGF0YTsKIAl1OCAqcnhfdGFpbDsKIAl1OCAqcnhfZW5kOwotCXZvaWQgKnByZWN2YnVmOwogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAkvKiBmb3IgQS1NUERVIFJ4IHJlb3JkZXJpbmcgYnVmZmVyIGNvbnRyb2wgKi8KIAlzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmw7CkBAIC0zMDIsOSArMjc3LDYgQEAKIHZvaWQgcnR3X2ZyZWVfcmVjdmZyYW1lX3F1ZXVlKHN0cnVjdCBfX3F1ZXVlICpwZnJhbWVxdWV1ZSwKIAkJCSAgICAgIHN0cnVjdCBfX3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlKTsKIHUzMiBydHdfZnJlZV91Y19zd2RlY19wZW5kaW5nX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLWludCBydHdfZW5xdWV1ZV9yZWN2YnVmX3RvX2hlYWQoc3RydWN0IHJlY3ZfYnVmICpidWYsIHN0cnVjdCBfX3F1ZXVlICpxdWV1ZSk7Ci1pbnQgcnR3X2VucXVldWVfcmVjdmJ1ZihzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmLCBzdHJ1Y3QgX19xdWV1ZSAqcXVldWUpOwotc3RydWN0IHJlY3ZfYnVmICpydHdfZGVxdWV1ZV9yZWN2YnVmKHN0cnVjdCBfX3F1ZXVlICpxdWV1ZSk7CiAKIHZvaWQgcnR3X3Jlb3JkZXJpbmdfY3RybF90aW1lb3V0X2hhbmRsZXIodm9pZCAqcGNvbnRleHQpOwogCkBAIC0zMTYsMzEgKzI4OCw2IEBACiAJcmV0dXJuIHByZWN2ZnJhbWUtPnJ4X2hlYWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggKmdldF9yeF9zdGF0dXMoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUpCi17Ci0JcmV0dXJuIGdldF9yeG1lbShwcmVjdmZyYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB1OCAqcmVjdmZyYW1lX3B1c2goc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsIGludCBzeikKLXsKLQkvKiAgYXBwZW5kIGRhdGEgYmVmb3JlIHJ4X2RhdGEgKi8KLQotCS8qIGFkZCBkYXRhIHRvIHRoZSBzdGFydCBvZiByZWN2X2ZyYW1lCi0gKgotICogICAgICBUaGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHVzZWQgZGF0YSBhcmVhIG9mIHRoZSByZWN2X2ZyYW1lIGF0IHRoZSBidWZmZXIKLSAqICAgICAgc3RhcnQuIHJ4X2RhdGEgbXVzdCBiZSBzdGlsbCBsYXJnZXIgdGhhbiByeF9oZWFkLCBhZnRlciBwdXNoaW5nLgotICovCi0JaWYgKHByZWN2ZnJhbWUgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JcHJlY3ZmcmFtZS0+cnhfZGF0YSAtPSBzejsKLQlpZiAocHJlY3ZmcmFtZS0+cnhfZGF0YSA8IHByZWN2ZnJhbWUtPnJ4X2hlYWQpIHsKLQkJcHJlY3ZmcmFtZS0+cnhfZGF0YSArPSBzejsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXByZWN2ZnJhbWUtPmxlbiArPSBzejsKLQlyZXR1cm4gcHJlY3ZmcmFtZS0+cnhfZGF0YTsKLX0KLQogc3RhdGljIGlubGluZSB1OCAqcmVjdmZyYW1lX3B1bGwoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsIGludCBzeikKIHsKIAkvKiAgcnhfZGF0YSArPSBzejsgbW92ZSByeF9kYXRhIHN6IGJ5dGVzICBoZXJlYWZ0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS91c2Jfb3BzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUvdXNiX29wcy5oCmluZGV4IDdkMzM0NzcuLmEyOTBlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS91c2Jfb3BzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3VzYl9vcHMuaApAQCAtNjMsNyArNjMsNiBAQAogI2luY2x1ZGUgPHVzYl9vcHNfbGludXguaD4KIAogdm9pZCBydGw4MTg4ZXVfc2V0X2h3X3R5cGUoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKTsKLSNkZWZpbmUgaGFsX3NldF9od190eXBlIHJ0bDgxODhldV9zZXRfaHdfdHlwZQogdm9pZCBydGw4MTg4ZXVfc2V0X2ludGZfb3BzKHN0cnVjdCBfaW9fb3BzICpwb3BzKTsKICNkZWZpbmUgdXNiX3NldF9pbnRmX29wcyBydGw4MTg4ZXVfc2V0X2ludGZfb3BzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS94bWl0X29zZGVwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L2luY2x1ZGUveG1pdF9vc2RlcC5oCmluZGV4IDJmZjYyMmIuLjEzOTY1ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvaW5jbHVkZS94bWl0X29zZGVwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9pbmNsdWRlL3htaXRfb3NkZXAuaApAQCAtMzIsMTAgKzMyLDYgQEAKIAlzaXplX3QgYnVmX2xlbjsKIH07CiAKLWV4dGVybiBpbnQgcnR3X2h0X2VuYWJsZTsKLWV4dGVybiBpbnQgcnR3X2NidzQwX2VuYWJsZTsKLWV4dGVybiBpbnQgcnR3X2FtcGR1X2VuYWJsZTsvKiBmb3IgZW5hYmxlIHR4X2FtcGR1ICovCi0KICNkZWZpbmUgTlJfWE1JVEZSQU1FCTI1NgogCiBzdHJ1Y3QgeG1pdF9wcml2OwpAQCAtNTMsOCArNDksNiBAQAogdm9pZCBydHdfb3NfeG1pdF9yZXNvdXJjZV9mcmVlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwKIAkJCSAgICAgICBzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmLCB1MzIgZnJlZV9zeik7CiAKLXZvaWQgcnR3X3NldF90eF9jaGtzdW1fb2ZmbG9hZChzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCBzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYik7Ci0KIHVpbnQgcnR3X3JlbWFpbmRlcl9sZW4oc3RydWN0IHBrdF9maWxlICpwZmlsZSk7CiB2b2lkIF9ydHdfb3Blbl9wa3RmaWxlKHN0cnVjdCBza19idWZmICpwa3QsIHN0cnVjdCBwa3RfZmlsZSAqcGZpbGUpOwogdWludCBfcnR3X3BrdGZpbGVfcmVhZChzdHJ1Y3QgcGt0X2ZpbGUgKnBmaWxlLCB1OCAqcm1lbSwgdWludCBybGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL2lvY3RsX2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC9pb2N0bF9saW51eC5jCmluZGV4IGNmMzBhMDguLmYwNGFhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL2lvY3RsX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvaW9jdGxfbGludXguYwpAQCAtMjA5Nyw3ICsyMDk3LDggQEAKIAkJYWxnX25hbWUgPSAiQ0NNUCI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtMTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAlzdHJuY3B5KChjaGFyICopcGFyYW0tPnUuY3J5cHQuYWxnLCBhbGdfbmFtZSwgSUVFRV9DUllQVF9BTEdfTkFNRV9MRU4pOwpAQCAtMjEyNCw2ICsyMTI1LDcgQEAKIAogCXJldCA9ICB3cGFfc2V0X2VuY3J5cHRpb24oZGV2LCBwYXJhbSwgcGFyYW1fbGVuKTsKIAorZXhpdDoKIAlrZnJlZShwYXJhbSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxNTQsNiArMjE1Niw3IEBACiAJdTMyIGJ5dGVzOwogCXU4ICpwdG1wOwogCWludCBydjsKKwlpbnQgcmV0ID0gMDsKIAogCXBhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopcnR3X25ldGRldl9wcml2KGRldik7CiAJcCA9ICZ3cnF1LT5kYXRhOwpAQCAtMjE2MywxNiArMjE2NiwxNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihwdG1wLCBwLT5wb2ludGVyLCBsZW4pKSB7Ci0JCWtmcmVlKHB0bXApOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBleGl0OwogCX0KIAogCWJ5dGVzID0gMDsKIAlhZGRyID0gMDsKIAlydiA9IHNzY2FuZihwdG1wLCAiJWQsJXgiLCAmYnl0ZXMsICZhZGRyKTsKIAlpZiAocnYgIT0gMikgewotCQlrZnJlZShwdG1wKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAlzd2l0Y2ggKGJ5dGVzKSB7CkBAIC0yMTkwLDEyICsyMTkzLDE0IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURCR184OEUoS0VSTl9JTkZPICIlczogdXNhZ2U+IHJlYWQgW2J5dGVzXSxbYWRkcmVzcyhoZXgpXVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OwogCX0KIAlEQkdfODhFKEtFUk5fSU5GTyAiJXM6IGFkZHIgPSAweCUwOFggZGF0YSA9JXNcbiIsIF9fZnVuY19fLCBhZGRyLCBleHRyYSk7CiAKK2V4aXQ6CiAJa2ZyZWUocHRtcCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydHdfd3hfd3JpdGUzMihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzExNCwxNSArNzExOSwxNSBAQAogewogCXU4IGVuYWJsZTsKIAl1MzIgdGhlcm1hbDsKLQlzMzIgcmV0OwogCXN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciA9IHJ0d19uZXRkZXZfcHJpdihkZXYpOwogCWNoYXIJKmlucHV0ID0ga21hbGxvYyh3cnF1LT5sZW5ndGgsIEdGUF9LRVJORUwpOworCWludCByZXQgPSAwOwogCiAJaWYgKCFpbnB1dCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0LCB3cnF1LT5wb2ludGVyLCB3cnF1LT5sZW5ndGgpKSB7Ci0JCWtmcmVlKGlucHV0KTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKIAl9CiAJX3J0d19tZW1zZXQoZXh0cmEsIDAsIHdycXUtPmxlbmd0aCk7CiAKQEAgLTcxMzMsMjIgKzcxMzgsMjggQEAKIAkJCXNwcmludGYoZXh0cmEsICJtcCB0eCBwb3dlciB0cmFja2luZyBzdG9wIik7CiAJCX0gZWxzZSBpZiAoc3NjYW5mKGlucHV0LCAidGhlciA9JWQiLCAmdGhlcm1hbCkpIHsKIAkJCQlyZXQgPSBIYWxfU2V0VGhlcm1hbE1ldGVyKHBhZGFwdGVyLCAodTgpdGhlcm1hbCk7Ci0JCQkJaWYgKHJldCA9PSBfRkFJTCkKLQkJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCQlpZiAocmV0ID09IF9GQUlMKSB7CisJCQkJCXJldCA9IC1FUEVSTTsKKwkJCQkJZ290byBleGl0OworCQkJCX0KIAkJCQlzcHJpbnRmKGV4dHJhLCAibXAgdHggcG93ZXIgdHJhY2tpbmcgc3RhcnQsIHRhcmdldCB2YWx1ZSA9JWQgb2sgIiwgdGhlcm1hbCk7CiAJCX0gZWxzZSB7Ci0JCQlrZnJlZShpbnB1dCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKLQlrZnJlZShpbnB1dCk7CiAJcmV0ID0gSGFsX1NldFBvd2VyVHJhY2tpbmcocGFkYXB0ZXIsIGVuYWJsZSk7Ci0JaWYgKHJldCA9PSBfRkFJTCkKLQkJcmV0dXJuIC1FUEVSTTsKKwlpZiAocmV0ID09IF9GQUlMKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KIAogCXdycXUtPmxlbmd0aCA9IHN0cmxlbihleHRyYSk7Ci0JcmV0dXJuIDA7CisKK2V4aXQ6CisJa2ZyZWUoaW5wdXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnR3X21wX3BzZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzMxNiwxMSArNzMyNywxNCBAQAogCXN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciA9IHJ0d19uZXRkZXZfcHJpdihkZXYpOwogCWNoYXIJKmlucHV0ID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJdTggYk1haW4gPSAxLCBiVHVybm9mZiA9IDE7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIWlucHV0KQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoY29weV9mcm9tX3VzZXIoaW5wdXQsIHdycXUtPmRhdGEucG9pbnRlciwgd3JxdS0+ZGF0YS5sZW5ndGgpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0LCB3cnF1LT5kYXRhLnBvaW50ZXIsIHdycXUtPmRhdGEubGVuZ3RoKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQogCURCR184OEUoIiVzOml3cHJpdiBpbiA9JXNcbiIsIF9fZnVuY19fLCBpbnB1dCk7CiAKIAliTWFpbiA9IHN0cm5jbXAoaW5wdXQsICIxIiwgMik7IC8qICBzdHJuY21wIHRydWUgaXMgMCAqLwpAQCAtNzMzMyw4ICs3MzQ3LDEwIEBACiAJCU1QX1BIWV9TZXRSRlBhdGhTd2l0Y2gocGFkYXB0ZXIsIGZhbHNlKTsKIAkJREJHXzg4RSgiJXM6UEhZX1NldFJGUGF0aFN3aXRjaCA9IGZhbHNlXG4iLCBfX2Z1bmNfXyk7CiAJfQorCitleGl0OgogCWtmcmVlKGlucHV0KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0d19tcF9RdWVyeURydihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzM0NSwxMiArNzM2MSwxNSBAQAogCWNoYXIJKmlucHV0ID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJdTggcUF1dG9Mb2FkID0gMTsKIAlzdHJ1Y3QgZWVwcm9tX3ByaXYgKnBFRVBST00gPSBHRVRfRUVQUk9NX0VGVVNFX1BSSVYocGFkYXB0ZXIpOworCWludCByZXQgPSAwOwogCiAJaWYgKCFpbnB1dCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoaW5wdXQsIHdycXUtPmRhdGEucG9pbnRlciwgd3JxdS0+ZGF0YS5sZW5ndGgpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0LCB3cnF1LT5kYXRhLnBvaW50ZXIsIHdycXUtPmRhdGEubGVuZ3RoKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQogCURCR184OEUoIiVzOml3cHJpdiBpbiA9JXNcbiIsIF9fZnVuY19fLCBpbnB1dCk7CiAKIAlxQXV0b0xvYWQgPSBzdHJuY21wKGlucHV0LCAiYXV0b2xvYWQiLCA4KTsgLyogIHN0cm5jbXAgdHJ1ZSBpcyAwICovCkBAIC03MzY0LDggKzczODMsMTAgQEAKIAkJc3ByaW50ZihleHRyYSwgIm9rIik7CiAJfQogCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7CisKK2V4aXQ6CiAJa2ZyZWUoaW5wdXQpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnR3X21wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvb3NfaW50ZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL29zX2ludGZzLmMKaW5kZXggYjIyNWQxYy4uMGUwYzMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvb3NfaW50ZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC9vc19pbnRmcy5jCkBAIC04NCw5ICs4NCw5IEBACiBzdGF0aWMgaW50IHJ0d191YXBzZF9hY3ZpX2VuOwogc3RhdGljIGludCBydHdfdWFwc2RfYWN2b19lbjsKIAotaW50IHJ0d19odF9lbmFibGUgPSAxOwotaW50IHJ0d19jYnc0MF9lbmFibGUgPSAzOyAvKiAgMCA6ZGlzYWJsZSwgYml0KDApOiBlbmFibGUgMi40ZywgYml0KDEpOiBlbmFibGUgNWcgKi8KLWludCBydHdfYW1wZHVfZW5hYmxlID0gMTsvKiBmb3IgZW5hYmxlIHR4X2FtcGR1ICovCitzdGF0aWMgaW50IHJ0d19odF9lbmFibGUgPSAxOworc3RhdGljIGludCBydHdfY2J3NDBfZW5hYmxlID0gMzsgLyogIDAgOmRpc2FibGUsIGJpdCgwKTogZW5hYmxlIDIuNGcsIGJpdCgxKTogZW5hYmxlIDVnICovCitzdGF0aWMgaW50IHJ0d19hbXBkdV9lbmFibGUgPSAxOy8qIGZvciBlbmFibGUgdHhfYW1wZHUgKi8KIHN0YXRpYyBpbnQgcnR3X3J4X3N0YmMgPSAxOy8qICAwOiBkaXNhYmxlLCBiaXQoMCk6ZW5hYmxlIDIuNGcsIGJpdCgxKTplbmFibGUgNWcsIGRlZmF1bHQgaXMgc2V0IHRvIGVuYWJsZSAyLjRHSFogZm9yIElPVCBpc3N1ZSB3aXRoIGJ1ZmZsYW8ncyBBUCBhdCA1R0haICovCiBzdGF0aWMgaW50IHJ0d19hbXBkdV9hbXNkdTsvKiAgMDogZGlzYWJsZWQsIDE6ZW5hYmxlZCwgMjphdXRvICovCiAKQEAgLTk1MSw4ICs5NTEsNiBAQAogCV9jYW5jZWxfdGltZXJfZXgoJnBhZGFwdGVyLT5wd3JjdHJscHJpdi5wd3Jfc3RhdGVfY2hlY2tfdGltZXIpOwogCiAJX2NhbmNlbF90aW1lcl9leCgmcGFkYXB0ZXItPnJlY3Zwcml2LnNpZ25hbF9zdGF0X3RpbWVyKTsKLQkvKiBjYW5jZWwgZG0gdGltZXIgKi8KLQlydHdfaGFsX2RtX2RlaW5pdChwYWRhcHRlcik7CiB9CiAKIHU4IHJ0d19mcmVlX2Rydl9zdyhzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpCkBAIC0xMDg0LDkgKzEwODIsOSBAQAogCXJ0d19zZXRfcHdyX3N0YXRlX2NoZWNrX3RpbWVyKCZwYWRhcHRlci0+cHdyY3RybHByaXYpOwogCiAJaWYgKCFydHdfbmV0aWZfcXVldWVfc3RvcHBlZChwbmV0ZGV2KSkKLQkJcnR3X25ldGlmX3N0YXJ0X3F1ZXVlKHBuZXRkZXYpOworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHBuZXRkZXYpOwogCWVsc2UKLQkJcnR3X25ldGlmX3dha2VfcXVldWUocG5ldGRldik7CisJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhwbmV0ZGV2KTsKIAogCW5ldGRldl9icl9pbml0KHBuZXRkZXYpOwogCkBAIC0xMDk4LDcgKzEwOTYsNyBAQAogbmV0ZGV2X29wZW5fZXJyb3I6CiAJcGFkYXB0ZXItPmJ1cCA9IGZhbHNlOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHBuZXRkZXYpOwotCXJ0d19uZXRpZl9zdG9wX3F1ZXVlKHBuZXRkZXYpOworCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwbmV0ZGV2KTsKIAlSVF9UUkFDRShfbW9kdWxlX29zX2ludGZzX2NfLCBfZHJ2X2Vycl8sICgiLTg4ZXVfZHJ2IC0gZGV2X29wZW4sIGZhaWwhXG4iKSk7CiAJREJHXzg4RSgiLTg4ZXVfZHJ2IC0gZHJ2X29wZW4gZmFpbCwgYnVwID0lZFxuIiwgcGFkYXB0ZXItPmJ1cCk7CiAJcmV0dXJuIC0xOwpAQCAtMTIyMSw3ICsxMjE5LDcgQEAKIAkJLyogczEuICovCiAJCWlmIChwbmV0ZGV2KSB7CiAJCQlpZiAoIXJ0d19uZXRpZl9xdWV1ZV9zdG9wcGVkKHBuZXRkZXYpKQotCQkJCXJ0d19uZXRpZl9zdG9wX3F1ZXVlKHBuZXRkZXYpOworCQkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwbmV0ZGV2KTsKIAkJfQogCiAJCS8qIHMyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvcmVjdl9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvcmVjdl9saW51eC5jCmluZGV4IGRhMzk3ZTQuLmMwZmE4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3JlY3ZfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC9yZWN2X2xpbnV4LmMKQEAgLTI4LDEzICsyOCw2IEBACiAjaW5jbHVkZSA8b3NkZXBfaW50Zi5oPgogI2luY2x1ZGUgPHVzYl9vcHMuaD4KIAotLyogaW5pdCBvcyByZWxhdGVkIHJlc291cmNlIGluIHN0cnVjdCByZWN2X3ByaXYgKi8KLWludCBydHdfb3NfcmVjdl9yZXNvdXJjZV9pbml0KHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdiwKLQkJCSAgICAgIHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcikKLXsKLQlyZXR1cm4gX1NVQ0NFU1M7Ci19Ci0KIC8qIGFsbG9jIG9zIHJlbGF0ZWQgcmVzb3VyY2UgaW4gc3RydWN0IHJlY3ZfZnJhbWUgKi8KIGludCBydHdfb3NfcmVjdl9yZXNvdXJjZV9hbGxvYyhzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgICAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUpCkBAIC00NCw0MiArMzcsMjAgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLS8qIGZyZWUgb3MgcmVsYXRlZCByZXNvdXJjZSBpbiBzdHJ1Y3QgcmVjdl9mcmFtZSAqLwotdm9pZCBydHdfb3NfcmVjdl9yZXNvdXJjZV9mcmVlKHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdikKLXsKLX0KLQogLyogYWxsb2Mgb3MgcmVsYXRlZCByZXNvdXJjZSBpbiBzdHJ1Y3QgcmVjdl9idWYgKi8KIGludCBydHdfb3NfcmVjdmJ1Zl9yZXNvdXJjZV9hbGxvYyhzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkJICBzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmKQogewogCWludCByZXMgPSBfU1VDQ0VTUzsKIAotCXByZWN2YnVmLT5pcnBfcGVuZGluZyA9IGZhbHNlOwogCXByZWN2YnVmLT5wdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJlY3ZidWYtPnB1cmIgPT0gTlVMTCkKIAkJcmVzID0gX0ZBSUw7CiAJcHJlY3ZidWYtPnBza2IgPSBOVUxMOwogCXByZWN2YnVmLT5yZXVzZSA9IGZhbHNlOwotCXByZWN2YnVmLT5wYWxsb2NhdGVkX2J1ZiA9IE5VTEw7Ci0JcHJlY3ZidWYtPnBidWYgPSBOVUxMOwotCXByZWN2YnVmLT5wZGF0YSA9IE5VTEw7Ci0JcHJlY3ZidWYtPnBoZWFkID0gTlVMTDsKLQlwcmVjdmJ1Zi0+cHRhaWwgPSBOVUxMOwotCXByZWN2YnVmLT5wZW5kID0gTlVMTDsKLQlwcmVjdmJ1Zi0+dHJhbnNmZXJfbGVuID0gMDsKLQlwcmVjdmJ1Zi0+bGVuID0gMDsKIAlyZXR1cm4gcmVzOwogfQogCi0vKiBmcmVlIG9zIHJlbGF0ZWQgcmVzb3VyY2UgaW4gc3RydWN0IHJlY3ZfYnVmICovCi1pbnQgcnR3X29zX3JlY3ZidWZfcmVzb3VyY2VfZnJlZShzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJIHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYpCi17Ci0JdXNiX2ZyZWVfdXJiKHByZWN2YnVmLT5wdXJiKTsKLQlyZXR1cm4gX1NVQ0NFU1M7Ci19Ci0KIHZvaWQgcnR3X2hhbmRsZV90a2lwX21pY19lcnIoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiZ3JvdXApCiB7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwpAQCAtMTE2LDExICs4Nyw2IEBACiAJCQkgICAgJndycXUsIChjaGFyICopJmV2KTsKIH0KIAotdm9pZCBydHdfaG9zdGFwZF9tbG1lX3J4KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwKLQkJCSBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCi17Ci19Ci0KIGludCBydHdfcmVjdl9pbmRpY2F0ZXBrdChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewpAQCAtMjI5LDE0ICsxOTUsMTIgQEAKIHsKIAlzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYgPSAmcGFkYXB0ZXItPnJlY3Zwcml2OwogCi0JcHJlY3ZidWYtPnJlZl9jbnQtLTsKIAkvKiBmcmVlIHNrYiBpbiByZWN2X2J1ZiAqLwogCWRldl9rZnJlZV9za2JfYW55KHByZWN2YnVmLT5wc2tiKTsKIAlwcmVjdmJ1Zi0+cHNrYiA9IE5VTEw7CiAJcHJlY3ZidWYtPnJldXNlID0gZmFsc2U7Ci0JaWYgKCFwcmVjdmJ1Zi0+aXJwX3BlbmRpbmcpCi0JCXJ0d19yZWFkX3BvcnQocGFkYXB0ZXIsIHByZWN2cHJpdi0+ZmZfaHdhZGRyLCAwLAotCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKilwcmVjdmJ1Zik7CisJcnR3X3JlYWRfcG9ydChwYWRhcHRlciwgcHJlY3Zwcml2LT5mZl9od2FkZHIsIDAsCisJCQkodW5zaWduZWQgY2hhciAqKXByZWN2YnVmKTsKIH0KIAogc3RhdGljIHZvaWQgX3J0d19yZW9yZGVyaW5nX2N0cmxfdGltZW91dF9oYW5kbGVyKHZvaWQgKmZ1bmNfY29udGV4dCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3VzYl9pbnRmLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC91c2JfaW50Zi5jCmluZGV4IDJlNDljZDUuLjc1MjZiOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3VzYl9pbnRmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvdXNiX2ludGYuYwpAQCAtNjIsMTAgKzYyLDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHJ0d191c2JfaWRfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBzcGVjaWZpY19kZXZpY2VfaWQgc3BlY2lmaWNfZGV2aWNlX2lkX3RibFtdID0gewotCXt9CQkvKiBlbXB0eSB0YWJsZSBmb3Igbm93ICovCi19OwotCiBzdHJ1Y3QgcnR3X3VzYl9kcnYgewogCXN0cnVjdCB1c2JfZHJpdmVyIHVzYmRydjsKIAlpbnQgZHJ2X3JlZ2lzdGVyZWQ7CkBAIC04NCw0NiArODAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHJ0d191c2JfZHJ2ICp1c2JfZHJ2ID0gJnJ0bDgxODhlX3VzYl9kcnY7CiAKLXN0YXRpYyBpbmxpbmUgaW50IFJUX3VzYl9lbmRwb2ludF9kaXJfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IFJUX3VzYl9lbmRwb2ludF9kaXJfb3V0KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgUlRfdXNiX2VuZHBvaW50X3hmZXJfaW50KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBSVF91c2JfZW5kcG9pbnRfeGZlcl9idWxrKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgUlRfdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIFJUX3VzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiBSVF91c2JfZW5kcG9pbnRfZGlyX2luKGVwZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IFJUX3VzYl9lbmRwb2ludF9pc19idWxrX291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gUlRfdXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIFJUX3VzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnQoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIFJUX3VzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIFJUX3VzYl9lbmRwb2ludF9kaXJfaW4oZXBkKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgUlRfdXNiX2VuZHBvaW50X251bShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOwotfQotCiBzdGF0aWMgdTggcnR3X2luaXRfaW50Zl9wcml2KHN0cnVjdCBkdm9ial9wcml2ICpkdm9iaikKIHsKIAl1OCByc3QgPSBfU1VDQ0VTUzsKQEAgLTEzMiw3ICs4OCw3IEBACiAKIAlkdm9iai0+dXNiX2FsbG9jX3ZlbmRvcl9yZXFfYnVmID0gcnR3X3ptYWxsb2MoTUFYX1VTQl9JT19DVExfU0laRSk7CiAJaWYgKGR2b2JqLT51c2JfYWxsb2NfdmVuZG9yX3JlcV9idWYgPT0gTlVMTCkgewotCQlEQkdfODhFKCJhbGxvYyB1c2JfdmVuZG9yX3JlcV9idWYgZmFpbGVkLi4uIC9uIik7CisJCURCR184OEUoImFsbG9jIHVzYl92ZW5kb3JfcmVxX2J1ZiBmYWlsZWQuLi5cbiIpOwogCQlyc3QgPSBfRkFJTDsKIAkJZ290byBleGl0OwogCX0KQEAgLTE4Nyw2MCArMTQzLDM1IEBACiAJcGR2b2JqcHJpdi0+bnJfZW5kcG9pbnQgPSBwaWZhY2VfZGVzYy0+Yk51bUVuZHBvaW50czsKIAogCWZvciAoaSA9IDA7IGkgPCBwZHZvYmpwcml2LT5ucl9lbmRwb2ludDsgaSsrKSB7CisJCWludCBlcF9udW07CiAJCXBob3N0X2VuZHAgPSBwaG9zdF9pZmFjZS0+ZW5kcG9pbnQgKyBpOworCiAJCWlmIChwaG9zdF9lbmRwKSB7CiAJCQlwZW5kcF9kZXNjID0gJnBob3N0X2VuZHAtPmRlc2M7CisJCQllcF9udW0gPSB1c2JfZW5kcG9pbnRfbnVtKHBlbmRwX2Rlc2MpOwogCi0JCQlEQkdfODhFKCJcbnVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKCVkKTpcbiIsIGkpOwotCQkJREJHXzg4RSgiYkxlbmd0aD0leFxuIiwgcGVuZHBfZGVzYy0+Ykxlbmd0aCk7Ci0JCQlEQkdfODhFKCJiRGVzY3JpcHRvclR5cGU9JXhcbiIsCi0JCQkJcGVuZHBfZGVzYy0+YkRlc2NyaXB0b3JUeXBlKTsKLQkJCURCR184OEUoImJFbmRwb2ludEFkZHJlc3M9JXhcbiIsCi0JCQkJcGVuZHBfZGVzYy0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JCQlEQkdfODhFKCJ3TWF4UGFja2V0U2l6ZT0lZFxuIiwKLQkJCQlsZTE2X3RvX2NwdShwZW5kcF9kZXNjLT53TWF4UGFja2V0U2l6ZSkpOwotCQkJREJHXzg4RSgiYkludGVydmFsPSV4XG4iLCBwZW5kcF9kZXNjLT5iSW50ZXJ2YWwpOwotCi0JCQlpZiAoUlRfdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4ocGVuZHBfZGVzYykpIHsKLQkJCQlEQkdfODhFKCJSVF91c2JfZW5kcG9pbnRfaXNfYnVsa19pbiA9ICV4XG4iLAotCQkJCQlSVF91c2JfZW5kcG9pbnRfbnVtKHBlbmRwX2Rlc2MpKTsKLQkJCQlwZHZvYmpwcml2LT5SdEluUGlwZVtwZHZvYmpwcml2LT5SdE51bUluUGlwZXNdID0gUlRfdXNiX2VuZHBvaW50X251bShwZW5kcF9kZXNjKTsKKwkJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihwZW5kcF9kZXNjKSkgeworCQkJCXBkdm9ianByaXYtPlJ0SW5QaXBlW3Bkdm9ianByaXYtPlJ0TnVtSW5QaXBlc10gPSBlcF9udW07CiAJCQkJcGR2b2JqcHJpdi0+UnROdW1JblBpcGVzKys7Ci0JCQl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF9pc19pbnQocGVuZHBfZGVzYykpIHsKLQkJCQlEQkdfODhFKCJ1c2JfZW5kcG9pbnRfaXNfaW50ID0gJXgsIEludGVydmFsID0gJXhcbiIsCi0JCQkJCVJUX3VzYl9lbmRwb2ludF9udW0ocGVuZHBfZGVzYyksCi0JCQkJCXBlbmRwX2Rlc2MtPmJJbnRlcnZhbCk7Ci0JCQkJcGR2b2JqcHJpdi0+UnRJblBpcGVbcGR2b2JqcHJpdi0+UnROdW1JblBpcGVzXSA9IFJUX3VzYl9lbmRwb2ludF9udW0ocGVuZHBfZGVzYyk7CisJCQl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF9pc19pbnRfaW4ocGVuZHBfZGVzYykpIHsKKwkJCQlwZHZvYmpwcml2LT5SdEluUGlwZVtwZHZvYmpwcml2LT5SdE51bUluUGlwZXNdID0gZXBfbnVtOwogCQkJCXBkdm9ianByaXYtPlJ0TnVtSW5QaXBlcysrOwotCQkJfSBlbHNlIGlmIChSVF91c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQocGVuZHBfZGVzYykpIHsKLQkJCQlEQkdfODhFKCJSVF91c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQgPSAleFxuIiwKLQkJCQkJUlRfdXNiX2VuZHBvaW50X251bShwZW5kcF9kZXNjKSk7Ci0JCQkJcGR2b2JqcHJpdi0+UnRPdXRQaXBlW3Bkdm9ianByaXYtPlJ0TnVtT3V0UGlwZXNdID0gUlRfdXNiX2VuZHBvaW50X251bShwZW5kcF9kZXNjKTsKKwkJCX0gZWxzZSBpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KHBlbmRwX2Rlc2MpKSB7CisJCQkJcGR2b2JqcHJpdi0+UnRPdXRQaXBlW3Bkdm9ianByaXYtPlJ0TnVtT3V0UGlwZXNdID0gZXBfbnVtOwogCQkJCXBkdm9ianByaXYtPlJ0TnVtT3V0UGlwZXMrKzsKIAkJCX0KLQkJCXBkdm9ianByaXYtPmVwX251bVtpXSA9IFJUX3VzYl9lbmRwb2ludF9udW0ocGVuZHBfZGVzYyk7CisJCQlwZHZvYmpwcml2LT5lcF9udW1baV0gPSBlcF9udW07CiAJCX0KIAl9CiAKLQlEQkdfODhFKCJucl9lbmRwb2ludD0lZCwgaW5fbnVtPSVkLCBvdXRfbnVtPSVkXG5cbiIsCi0JCXBkdm9ianByaXYtPm5yX2VuZHBvaW50LCBwZHZvYmpwcml2LT5SdE51bUluUGlwZXMsCi0JCXBkdm9ianByaXYtPlJ0TnVtT3V0UGlwZXMpOwotCi0JaWYgKHB1c2JkLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCWlmIChwdXNiZC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCXBkdm9ianByaXYtPmlzaGlnaHNwZWVkID0gdHJ1ZTsKLQkJREJHXzg4RSgiVVNCX1NQRUVEX0hJR0hcbiIpOwotCX0gZWxzZSB7CisJZWxzZQogCQlwZHZvYmpwcml2LT5pc2hpZ2hzcGVlZCA9IGZhbHNlOwotCQlEQkdfODhFKCJOT04gVVNCX1NQRUVEX0hJR0hcbiIpOwotCX0KIAotCWlmIChydHdfaW5pdF9pbnRmX3ByaXYocGR2b2JqcHJpdikgPT0gX0ZBSUwpIHsKLQkJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9lcnJfLAotCQkJICgiXG4gQ2FuJ3QgSU5JVCBydHdfaW5pdF9pbnRmX3ByaXZcbiIpKTsKKwlpZiAocnR3X2luaXRfaW50Zl9wcml2KHBkdm9ianByaXYpID09IF9GQUlMKQogCQlnb3RvIGZyZWVfZHZvYmo7Ci0JfQogCi0JLyogMyBtaXNjICovCiAJc2VtYV9pbml0KCYocGR2b2JqcHJpdi0+dXNiX3N1c3BlbmRfc2VtYSksIDApOwogCXJ0d19yZXNldF9jb250aW51YWxfdXJiX2Vycm9yKHBkdm9ianByaXYpOwogCkBAIC0yODgsMTMgKzIxOSw2IEBACiAKIH0KIAotc3RhdGljIHZvaWQgY2hpcF9ieV91c2JfaWQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLAotCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnBkaWQpCi17Ci0JcGFkYXB0ZXItPmNoaXBfdHlwZSA9IE5VTExfQ0hJUF9UWVBFOwotCWhhbF9zZXRfaHdfdHlwZShwYWRhcHRlcik7Ci19Ci0KIHN0YXRpYyB2b2lkIHVzYl9pbnRmX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcikKIHsKIAlSVF9UUkFDRShfbW9kdWxlX2hjaV9pbnRmc19jXywgX2Rydl9lcnJfLCAoIit1c2JfaW50Zl9zdGFydFxuIikpOwpAQCAtMzYwLDI4ICsyODQsNiBAQAogCVJUX1RSQUNFKF9tb2R1bGVfaGNpX2ludGZzX2NfLCBfZHJ2X2Vycl8sICgiLXJ0d19kZXZfdW5sb2FkXG4iKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3Nfc3BlY19kZXZpZChjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcGRpZCkKLXsKLQl1MTYgdmlkLCBwaWQ7Ci0JdTMyIGZsYWdzOwotCWludCBpOwotCWludCBudW0gPSBzaXplb2Yoc3BlY2lmaWNfZGV2aWNlX2lkX3RibCkgLwotCQkgIHNpemVvZihzdHJ1Y3Qgc3BlY2lmaWNfZGV2aWNlX2lkKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQl2aWQgPSBzcGVjaWZpY19kZXZpY2VfaWRfdGJsW2ldLmlkVmVuZG9yOwotCQlwaWQgPSBzcGVjaWZpY19kZXZpY2VfaWRfdGJsW2ldLmlkUHJvZHVjdDsKLQkJZmxhZ3MgPSBzcGVjaWZpY19kZXZpY2VfaWRfdGJsW2ldLmZsYWdzOwotCi0JCWlmICgocGRpZC0+aWRWZW5kb3IgPT0gdmlkKSAmJiAocGRpZC0+aWRQcm9kdWN0ID09IHBpZCkgJiYKLQkJICAgIChmbGFncyZTUEVDX0RFVl9JRF9ESVNBQkxFX0hUKSkgewotCQkJcnR3X2h0X2VuYWJsZSA9IDA7Ci0JCQlydHdfY2J3NDBfZW5hYmxlID0gMDsKLQkJCXJ0d19hbXBkdV9lbmFibGUgPSAwOwotCQl9Ci0JfQotfQotCiBpbnQgcnR3X2h3X3N1c3BlbmQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnB3cnByaXYgPSAmcGFkYXB0ZXItPnB3cmN0cmxwcml2OwpAQCAtMzk2LDQ5ICsyOTgsNDcgQEAKIAkJZ290byBlcnJvcl9leGl0OwogCX0KIAotCWlmIChwYWRhcHRlcikgeyAvKiBzeXN0ZW0gc3VzcGVuZCAqLwotCQlMZWF2ZUFsbFBvd2VyU2F2ZU1vZGUocGFkYXB0ZXIpOworCS8qIHN5c3RlbSBzdXNwZW5kICovCisJTGVhdmVBbGxQb3dlclNhdmVNb2RlKHBhZGFwdGVyKTsKIAotCQlEQkdfODhFKCI9PT4gcnR3X2h3X3N1c3BlbmRcbiIpOwotCQlfZW50ZXJfcHdybG9jaygmcHdycHJpdi0+bG9jayk7Ci0JCXB3cnByaXYtPmJpcHNfcHJvY2Vzc2luZyA9IHRydWU7Ci0JCS8qIHMxLiAqLwotCQlpZiAocG5ldGRldikgewotCQkJbmV0aWZfY2Fycmllcl9vZmYocG5ldGRldik7Ci0JCQlydHdfbmV0aWZfc3RvcF9xdWV1ZShwbmV0ZGV2KTsKLQkJfQotCi0JCS8qIHMyLiAqLwotCQlydHdfZGlzYXNzb2NfY21kKHBhZGFwdGVyLCA1MDAsIGZhbHNlKTsKLQotCQkvKiBzMi0yLiAgaW5kaWNhdGUgZGlzY29ubmVjdCB0byBvcyAqLwotCQl7Ci0JCQlzdHJ1Y3QJbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCi0JCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7Ci0JCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIF9GV19MSU5LRUQpOwotCi0JCQkJcnR3X2xlZF9jb250cm9sKHBhZGFwdGVyLCBMRURfQ1RMX05PX0xJTkspOwotCi0JCQkJcnR3X29zX2luZGljYXRlX2Rpc2Nvbm5lY3QocGFkYXB0ZXIpOwotCi0JCQkJLyogZG9ubm90IGVucXVldWUgY21kICovCi0JCQkJcnR3X2xwc19jdHJsX3drX2NtZChwYWRhcHRlciwgTFBTX0NUUkxfRElTQ09OTkVDVCwgMCk7Ci0JCQl9Ci0JCX0KLQkJLyogczItMy4gKi8KLQkJcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzKHBhZGFwdGVyLCAxKTsKLQotCQkvKiBzMi00LiAqLwotCQlydHdfZnJlZV9uZXR3b3JrX3F1ZXVlKHBhZGFwdGVyLCB0cnVlKTsKLQkJcnR3X2lwc19kZXZfdW5sb2FkKHBhZGFwdGVyKTsKLQkJcHdycHJpdi0+cmZfcHdyc3RhdGUgPSByZl9vZmY7Ci0JCXB3cnByaXYtPmJpcHNfcHJvY2Vzc2luZyA9IGZhbHNlOwotCi0JCV9leGl0X3B3cmxvY2soJnB3cnByaXYtPmxvY2spOwotCX0gZWxzZSB7Ci0JCWdvdG8gZXJyb3JfZXhpdDsKKwlEQkdfODhFKCI9PT4gcnR3X2h3X3N1c3BlbmRcbiIpOworCV9lbnRlcl9wd3Jsb2NrKCZwd3Jwcml2LT5sb2NrKTsKKwlwd3Jwcml2LT5iaXBzX3Byb2Nlc3NpbmcgPSB0cnVlOworCS8qIHMxLiAqLworCWlmIChwbmV0ZGV2KSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHBuZXRkZXYpOworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMocG5ldGRldik7CiAJfQorCisJLyogczIuICovCisJcnR3X2Rpc2Fzc29jX2NtZChwYWRhcHRlciwgNTAwLCBmYWxzZSk7CisKKwkvKiBzMi0yLiAgaW5kaWNhdGUgZGlzY29ubmVjdCB0byBvcyAqLworCXsKKwkJc3RydWN0CW1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKKworCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CisJCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCk7CisKKwkJCXJ0d19sZWRfY29udHJvbChwYWRhcHRlciwgTEVEX0NUTF9OT19MSU5LKTsKKworCQkJcnR3X29zX2luZGljYXRlX2Rpc2Nvbm5lY3QocGFkYXB0ZXIpOworCisJCQkvKiBkb25ub3QgZW5xdWV1ZSBjbWQgKi8KKwkJCXJ0d19scHNfY3RybF93a19jbWQocGFkYXB0ZXIsIExQU19DVFJMX0RJU0NPTk5FQ1QsIDApOworCQl9CisJfQorCS8qIHMyLTMuICovCisJcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzKHBhZGFwdGVyLCAxKTsKKworCS8qIHMyLTQuICovCisJcnR3X2ZyZWVfbmV0d29ya19xdWV1ZShwYWRhcHRlciwgdHJ1ZSk7CisJcnR3X2lwc19kZXZfdW5sb2FkKHBhZGFwdGVyKTsKKwlwd3Jwcml2LT5yZl9wd3JzdGF0ZSA9IHJmX29mZjsKKwlwd3Jwcml2LT5iaXBzX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKworCV9leGl0X3B3cmxvY2soJnB3cnByaXYtPmxvY2spOworCiAJcmV0dXJuIDA7CiAKIGVycm9yX2V4aXQ6CkBAIC00NTIsMzYgKzM1MiwzMyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpwbmV0ZGV2ID0gcGFkYXB0ZXItPnBuZXRkZXY7CiAKIAotCWlmIChwYWRhcHRlcikgeyAvKiBzeXN0ZW0gcmVzdW1lICovCi0JCURCR184OEUoIj09PiBydHdfaHdfcmVzdW1lXG4iKTsKLQkJX2VudGVyX3B3cmxvY2soJnB3cnByaXYtPmxvY2spOwotCQlwd3Jwcml2LT5iaXBzX3Byb2Nlc3NpbmcgPSB0cnVlOwotCQlydHdfcmVzZXRfZHJ2X3N3KHBhZGFwdGVyKTsKKwkvKiBzeXN0ZW0gcmVzdW1lICovCisJREJHXzg4RSgiPT0+IHJ0d19od19yZXN1bWVcbiIpOworCV9lbnRlcl9wd3Jsb2NrKCZwd3Jwcml2LT5sb2NrKTsKKwlwd3Jwcml2LT5iaXBzX3Byb2Nlc3NpbmcgPSB0cnVlOworCXJ0d19yZXNldF9kcnZfc3cocGFkYXB0ZXIpOwogCi0JCWlmIChwbV9uZXRkZXZfb3BlbihwbmV0ZGV2LCBmYWxzZSkgIT0gMCkgewotCQkJX2V4aXRfcHdybG9jaygmcHdycHJpdi0+bG9jayk7Ci0JCQlnb3RvIGVycm9yX2V4aXQ7Ci0JCX0KLQotCQluZXRpZl9kZXZpY2VfYXR0YWNoKHBuZXRkZXYpOwotCQluZXRpZl9jYXJyaWVyX29uKHBuZXRkZXYpOwotCi0JCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChwbmV0ZGV2KSkKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHBuZXRkZXYpOwotCQllbHNlCi0JCQluZXRpZl93YWtlX3F1ZXVlKHBuZXRkZXYpOwotCi0JCXB3cnByaXYtPmJrZWVwZndhbGl2ZSA9IGZhbHNlOwotCQlwd3Jwcml2LT5icmZvZmZieWh3ID0gZmFsc2U7Ci0KLQkJcHdycHJpdi0+cmZfcHdyc3RhdGUgPSByZl9vbjsKLQkJcHdycHJpdi0+Ymlwc19wcm9jZXNzaW5nID0gZmFsc2U7Ci0KKwlpZiAocG1fbmV0ZGV2X29wZW4ocG5ldGRldiwgZmFsc2UpICE9IDApIHsKIAkJX2V4aXRfcHdybG9jaygmcHdycHJpdi0+bG9jayk7Ci0JfSBlbHNlIHsKIAkJZ290byBlcnJvcl9leGl0OwogCX0KIAorCW5ldGlmX2RldmljZV9hdHRhY2gocG5ldGRldik7CisJbmV0aWZfY2Fycmllcl9vbihwbmV0ZGV2KTsKKworCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChwbmV0ZGV2KSkKKwkJbmV0aWZfc3RhcnRfcXVldWUocG5ldGRldik7CisJZWxzZQorCQluZXRpZl93YWtlX3F1ZXVlKHBuZXRkZXYpOworCisJcHdycHJpdi0+YmtlZXBmd2FsaXZlID0gZmFsc2U7CisJcHdycHJpdi0+YnJmb2ZmYnlodyA9IGZhbHNlOworCisJcHdycHJpdi0+cmZfcHdyc3RhdGUgPSByZl9vbjsKKwlwd3Jwcml2LT5iaXBzX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKworCV9leGl0X3B3cmxvY2soJnB3cnByaXYtPmxvY2spOworCiAKIAlyZXR1cm4gMDsKIGVycm9yX2V4aXQ6CkBAIC01MTksNyArNDE2LDcgQEAKIAkvKiBzMS4gKi8KIAlpZiAocG5ldGRldikgewogCQluZXRpZl9jYXJyaWVyX29mZihwbmV0ZGV2KTsKLQkJcnR3X25ldGlmX3N0b3BfcXVldWUocG5ldGRldik7CisJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwbmV0ZGV2KTsKIAl9CiAKIAkvKiBzMi4gKi8KQEAgLTU5MSw4ICs0ODgsNyBAQAogCiAJX2VudGVyX3B3cmxvY2soJnB3cnByaXYtPmxvY2spOwogCXJ0d19yZXNldF9kcnZfc3cocGFkYXB0ZXIpOwotCWlmIChwd3Jwcml2KQotCQlwd3Jwcml2LT5ia2VlcGZ3YWxpdmUgPSBmYWxzZTsKKwlwd3Jwcml2LT5ia2VlcGZ3YWxpdmUgPSBmYWxzZTsKIAogCURCR184OEUoImJrZWVwZndhbGl2ZSgleClcbiIsIHB3cnByaXYtPmJrZWVwZndhbGl2ZSk7CiAJaWYgKHBtX25ldGRldl9vcGVuKHBuZXRkZXYsIHRydWUpICE9IDApCkBAIC02NDMsMTggKzUzOSwxMiBAQAogCWR2b2JqLT5pZjEgPSBwYWRhcHRlcjsKIAogCXBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9IHRydWU7Ci0KIAlwYWRhcHRlci0+aHdfaW5pdF9tdXRleCA9ICZ1c2JfZHJ2LT5od19pbml0X211dGV4OwotCi0JLyogc3RlcCAxLTEuLCBkZWNpZGUgdGhlIGNoaXBfdHlwZSB2aWEgdmlkL3BpZCAqLwotCWNoaXBfYnlfdXNiX2lkKHBhZGFwdGVyLCBwZGlkKTsKLQotCWlmIChydHdfaGFuZGxlX2R1YWxtYWMocGFkYXB0ZXIsIDEpICE9IF9TVUNDRVNTKQotCQlnb3RvIGZyZWVfYWRhcHRlcjsKKwlwYWRhcHRlci0+Y2hpcF90eXBlID0gUlRMODE4OEU7CiAKIAlwbmV0ZGV2ID0gcnR3X2luaXRfbmV0ZGV2KHBhZGFwdGVyKTsKIAlpZiAocG5ldGRldiA9PSBOVUxMKQotCQlnb3RvIGhhbmRsZV9kdWFsbWFjOworCQlnb3RvIGZyZWVfYWRhcHRlcjsKIAlTRVRfTkVUREVWX0RFVihwbmV0ZGV2LCBkdm9ial90b19kZXYoZHZvYmopKTsKIAlwYWRhcHRlciA9IHJ0d19uZXRkZXZfcHJpdihwbmV0ZGV2KTsKIApAQCAtNzI4LDkgKzYxOCw2IEBACiBmcmVlX2hhbF9kYXRhOgogCWlmIChzdGF0dXMgIT0gX1NVQ0NFU1MpCiAJCWtmcmVlKHBhZGFwdGVyLT5IYWxEYXRhKTsKLWhhbmRsZV9kdWFsbWFjOgotCWlmIChzdGF0dXMgIT0gX1NVQ0NFU1MpCi0JCXJ0d19oYW5kbGVfZHVhbG1hYyhwYWRhcHRlciwgMCk7CiBmcmVlX2FkYXB0ZXI6CiAJaWYgKHN0YXR1cyAhPSBfU1VDQ0VTUykgewogCQlpZiAocG5ldGRldikKQEAgLTc2Nyw3ICs2NTQsNiBAQAogCXJ0d19kZXZfdW5sb2FkKGlmMSk7CiAJREJHXzg4RSgiK3I4NzF4dV9kZXZfcmVtb3ZlLCBod19pbml0X2NvbXBsZXRlZD0lZFxuIiwKIAkJaWYxLT5od19pbml0X2NvbXBsZXRlZCk7Ci0JcnR3X2hhbmRsZV9kdWFsbWFjKGlmMSwgMCk7CiAJcnR3X2ZyZWVfZHJ2X3N3KGlmMSk7CiAJaWYgKHBuZXRkZXYpCiAJCXJ0d19mcmVlX25ldGRldihwbmV0ZGV2KTsKQEAgLTc3NiwxNCArNjYyLDExIEBACiBzdGF0aWMgaW50IHJ0d19kcnZfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcGRpZCkKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqaWYxID0gTlVMTDsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSBfRkFJTDsKIAlzdHJ1Y3QgZHZvYmpfcHJpdiAqZHZvYmo7CiAKIAlSVF9UUkFDRShfbW9kdWxlX2hjaV9pbnRmc19jXywgX2Rydl9lcnJfLCAoIitydHdfZHJ2X2luaXRcbiIpKTsKIAotCS8qIHN0ZXAgMC4gKi8KLQlwcm9jZXNzX3NwZWNfZGV2aWQocGRpZCk7Ci0KIAkvKiBJbml0aWFsaXplIGR2b2JqX3ByaXYgKi8KIAlkdm9iaiA9IHVzYl9kdm9ial9pbml0KHB1c2JfaW50Zik7CiAJaWYgKGR2b2JqID09IE5VTEwpIHsKQEAgLTgwNyw4ICs2OTAsNiBAQAogCiAJc3RhdHVzID0gX1NVQ0NFU1M7CiAKLQlpZiAoc3RhdHVzICE9IF9TVUNDRVNTICYmIGlmMSkKLQkJcnR3X3VzYl9pZjFfZGVpbml0KGlmMSk7CiBmcmVlX2R2b2JqOgogCWlmIChzdGF0dXMgIT0gX1NVQ0NFU1MpCiAJCXVzYl9kdm9ial9kZWluaXQocHVzYl9pbnRmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3VzYl9vcHNfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3VzYl9vcHNfbGludXguYwppbmRleCBmYjBiYmE4Li5iYTJhOGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC91c2Jfb3BzX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAvdXNiX29wc19saW51eC5jCkBAIC0zOSwxMyArMzksNiBAQAogCXJldHVybiBwaXBlOwogfQogCi1zdHJ1Y3QgemVyb19idWxrb3V0X2NvbnRleHQgewotCXZvaWQgKnBidWY7Ci0Jdm9pZCAqcHVyYjsKLQl2b2lkICpwaXJwOwotCXZvaWQgKnBhZGFwdGVyOwotfTsKLQogdm9pZCB1c2JfcmVhZF9tZW0oc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBjbnQsIHU4ICpybWVtKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAveG1pdF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODhldS9vc19kZXAveG1pdF9saW51eC5jCmluZGV4IDJjOGUzZjcuLjQwMDM1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg4ZXUvb3NfZGVwL3htaXRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L29zX2RlcC94bWl0X2xpbnV4LmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIF9YTUlUX09TREVQX0NfCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8b3NkZXBfc2VydmljZS5oPgogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogCkBAIC03NywxMCArNzYsNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBydHdfc2V0X3R4X2Noa3N1bV9vZmZsb2FkKHN0cnVjdCBza19idWZmICpwa3QsIHN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliKQotewotfQotCiBpbnQgcnR3X29zX3htaXRfcmVzb3VyY2VfYWxsb2Moc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmLCB1MzIgYWxsb2Nfc3opCiB7CiAJaW50IGk7CkBAIC0xMTcsNyArMTEyLDYgQEAKIAogdm9pZCBydHdfb3NfcGt0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnBrdCkKIHsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDM1KSkKIAl1MTYJcXVldWU7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIApAQCAtMTMwLDEwICsxMjQsNiBAQAogCQlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKHBhZGFwdGVyLT5wbmV0ZGV2LCBxdWV1ZSkpCiAJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHBhZGFwdGVyLT5wbmV0ZGV2LCBxdWV1ZSk7CiAJfQotI2Vsc2UKLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwYWRhcHRlci0+cG5ldGRldikpCi0JCW5ldGlmX3dha2VfcXVldWUocGFkYXB0ZXItPnBuZXRkZXYpOwotI2VuZGlmCiAKIAlkZXZfa2ZyZWVfc2tiX2FueShwa3QpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvS2NvbmZpZwppbmRleCBhZDgyYmMzLi4yODJlMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvS2NvbmZpZwpAQCAtNSw0ICs1LDUgQEAKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9jbWRwa3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfY21kcGt0LmMKaW5kZXggNWYxMGU0MC4uNzlkODZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9jbWRwa3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcjgxOTJFX2NtZHBrdC5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAkJZGVmYXVsdDoKIAogCQkJUlRfVFJBQ0UoQ09NUF9DTURQS1QsICItLS0tPmNtcGtfbWVzc2FnZV9oYW5kbGVfcngoKToiCi0JCQkJICJ1bmtub3cgQ01EIEVsZW1lbnRcbiIpOworCQkJCSAidW5rbm93biBDTUQgRWxlbWVudFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcjgxOTJFX2Zpcm13YXJlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcjgxOTJFX2Zpcm13YXJlLmMKaW5kZXggYWJjZDIyZi4uMWE5NWQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfZmlybXdhcmUuYwpAQCAtMjI4LDEzICsyMjgsNiBAQAogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gcnRsbGliX3ByaXYoZGV2KTsKIAlib29sCQkJcnRfc3RhdHVzID0gdHJ1ZTsKIAotCXU4CSpmaXJtd2FyZV9pbWdfYnVmWzNdID0geyAmUnRsODE5MlBjaUVGd0Jvb3RBcnJheVswXSwKLQkJCQkJICZSdGw4MTkyUGNpRUZ3TWFpbkFycmF5WzBdLAotCQkJCQkgJlJ0bDgxOTJQY2lFRndEYXRhQXJyYXlbMF19OwotCi0JdTMyCWZpcm13YXJlX2ltZ19sZW5bM10gPSB7IHNpemVvZihSdGw4MTkyUGNpRUZ3Qm9vdEFycmF5KSwKLQkJCQkJc2l6ZW9mKFJ0bDgxOTJQY2lFRndNYWluQXJyYXkpLAotCQkJCQlzaXplb2YoUnRsODE5MlBjaUVGd0RhdGFBcnJheSl9OwogCXUzMglmaWxlX2xlbmd0aCA9IDA7CiAJdTgJKm1hcHBlZF9maWxlID0gTlVMTDsKIAl1OAlpbml0X3N0ZXAgPSAwOwpAQCAtMjU3LDc3ICsyNTAsNTUgQEAKIAkJCSAiIGZpcm13YXJlIHN0YXRlXG4iKTsKIAl9CiAKLQlwcml2LT5maXJtd2FyZV9zb3VyY2UgPSBGV19TT1VSQ0VfSU1HX0ZJTEU7CiAJZm9yIChpbml0X3N0ZXAgPSBzdGFydGluZ19zdGF0ZTsgaW5pdF9zdGVwIDw9IEZXX0lOSVRfU1RFUDJfREFUQTsKIAkgICAgIGluaXRfc3RlcCsrKSB7CiAJCWlmIChyc3Rfb3B0ID09IE9QVF9TWVNURU1fUkVTRVQpIHsKLQkJCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfc291cmNlKSB7Ci0JCQljYXNlIEZXX1NPVVJDRV9JTUdfRklMRToKLQkJCXsKLQkJCQlpZiAocGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdID09IDApIHsKLQkJCQkJY29uc3QgY2hhciAqZndfbmFtZVszXSA9IHsKLQkJCQkJCQlSVEw4MTkyRV9CT09UX0lNR19GVywKLQkJCQkJCQlSVEw4MTkyRV9NQUlOX0lNR19GVywKLQkJCQkJCQlSVEw4MTkyRV9EQVRBX0lNR19GVwotCQkJCQl9OwotCQkJCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUJKmZ3X2VudHJ5OwotCQkJCQlpbnQgcmM7Ci0JCQkJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksCi0JCQkJCSBmd19uYW1lW2luaXRfc3RlcF0sICZwcml2LT5wZGV2LT5kZXYpOwotCQkJCQlpZiAocmMgPCAwKSB7Ci0JCQkJCQlSVF9UUkFDRShDT01QX0ZJUk1XQVJFLCAicmVxdWVzdCBmaXJtIgotCQkJCQkJICJ3YXJlIGZhaWwhXG4iKTsKLQkJCQkJCWdvdG8gZG93bmxvYWRfZmlybXdhcmVfZmFpbDsKLQkJCQkJfQotCQkJCQlpZiAoZndfZW50cnktPnNpemUgPgorCQkJaWYgKHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmX3NpemVbaW5pdF9zdGVwXSA9PSAwKSB7CisJCQkJY29uc3QgY2hhciAqZndfbmFtZVszXSA9IHsKKwkJCQkJUlRMODE5MkVfQk9PVF9JTUdfRlcsCisJCQkJCVJUTDgxOTJFX01BSU5fSU1HX0ZXLAorCQkJCQlSVEw4MTkyRV9EQVRBX0lNR19GVworCQkJCX07CisJCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwkJCQlpbnQgcmM7CisJCQkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwKKwkJCQkJCSAgICAgIGZ3X25hbWVbaW5pdF9zdGVwXSwKKwkJCQkJCSAgICAgICZwcml2LT5wZGV2LT5kZXYpOworCQkJCWlmIChyYyA8IDApIHsKKwkJCQkJUlRfVFJBQ0UoQ09NUF9GSVJNV0FSRSwgInJlcXVlc3QgZmlybXdhcmUgZmFpbCFcbiIpOworCQkJCQlnb3RvIGRvd25sb2FkX2Zpcm13YXJlX2ZhaWw7CisJCQkJfQorCQkJCWlmIChmd19lbnRyeS0+c2l6ZSA+CiAJCQkJICAgIHNpemVvZihwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdKSkgewotCQkJCQkJUlRfVFJBQ0UoQ09NUF9GSVJNV0FSRSwgImltZyBmaWxlIHNpemUgIgorCQkJCQlSVF9UUkFDRShDT01QX0ZJUk1XQVJFLCAiaW1nIGZpbGUgc2l6ZSAiCiAJCQkJCQkgImV4Y2VlZCB0aGUgY29udGFpbmVyIHN0cnVjdCAiCiAJCQkJCQkgImJ1ZmZlciBmYWlsIVxuIik7Ci0JCQkJCQlnb3RvIGRvd25sb2FkX2Zpcm13YXJlX2ZhaWw7Ci0JCQkJCX0KKwkJCQkJZ290byBkb3dubG9hZF9maXJtd2FyZV9mYWlsOworCQkJCX0KIAotCQkJCQlpZiAoaW5pdF9zdGVwICE9IEZXX0lOSVRfU1RFUDFfTUFJTikgewotCQkJCQkJbWVtY3B5KHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0sCisJCQkJaWYgKGluaXRfc3RlcCAhPSBGV19JTklUX1NURVAxX01BSU4pIHsKKwkJCQkJbWVtY3B5KHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0sCiAJCQkJCSAgICAgICBmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOwotCQkJCQkJcGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdID0KLQkJCQkJICAgICAgIGZ3X2VudHJ5LT5zaXplOworCQkJCQlwZmlybXdhcmUtPmZpcm13YXJlX2J1Zl9zaXplW2luaXRfc3RlcF0gPQorCQkJCQkJZndfZW50cnktPnNpemU7CiAKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCW1lbXNldChwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdLAorCQkJCX0gZWxzZSB7CisJCQkJCW1lbXNldChwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdLAogCQkJCQkgICAgICAgMCwgMTI4KTsKLQkJCQkJCW1lbWNweSgmcGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXVsxMjhdLAorCQkJCQltZW1jcHkoJnBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF1bMTI4XSwKIAkJCQkJICAgICAgIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7Ci0JCQkJCQlwZmlybXdhcmUtPmZpcm13YXJlX2J1Zl9zaXplW2luaXRfc3RlcF0gPQotCQkJCQkJCSBmd19lbnRyeS0+c2l6ZSArIDEyODsKLQkJCQkJfQotCi0JCQkJCWlmIChyc3Rfb3B0ID09IE9QVF9TWVNURU1fUkVTRVQpCi0JCQkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJCQkJcGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdID0KKwkJCQkJCWZ3X2VudHJ5LT5zaXplICsgMTI4OwogCQkJCX0KLQkJCQltYXBwZWRfZmlsZSA9IHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF07Ci0JCQkJZmlsZV9sZW5ndGggPSBwZmlybXdhcmUtPmZpcm13YXJlX2J1Zl9zaXplW2luaXRfc3RlcF07Ci0JCQkJYnJlYWs7CisKKwkJCQlpZiAocnN0X29wdCA9PSBPUFRfU1lTVEVNX1JFU0VUKQorCQkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAkJCX0KLQkJCWNhc2UgRldfU09VUkNFX0hFQURFUl9GSUxFOgotCQkJCW1hcHBlZF9maWxlID0gIGZpcm13YXJlX2ltZ19idWZbaW5pdF9zdGVwXTsKLQkJCQlmaWxlX2xlbmd0aCAgPSBmaXJtd2FyZV9pbWdfbGVuW2luaXRfc3RlcF07Ci0JCQkJaWYgKGluaXRfc3RlcCA9PSBGV19JTklUX1NURVAyX0RBVEEpIHsKLQkJCQkJbWVtY3B5KHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0sIG1hcHBlZF9maWxlLCBmaWxlX2xlbmd0aCk7Ci0JCQkJCXBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmX3NpemVbaW5pdF9zdGVwXSA9IGZpbGVfbGVuZ3RoOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQotCi0JCX0gZWxzZSBpZiAocnN0X29wdCA9PSBPUFRfRklSTVdBUkVfUkVTRVQpIHsKLQkJCW1hcHBlZF9maWxlID0gcGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXTsKLQkJCWZpbGVfbGVuZ3RoID0gcGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdOwogCQl9CiAKKwkJbWFwcGVkX2ZpbGUgPSBwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdOworCQlmaWxlX2xlbmd0aCA9IHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmX3NpemVbaW5pdF9zdGVwXTsKKwogCQlydF9zdGF0dXMgPSBmd19kb3dubG9hZF9jb2RlKGRldiwgbWFwcGVkX2ZpbGUsIGZpbGVfbGVuZ3RoKTsKIAkJaWYgKCFydF9zdGF0dXMpIHsKIAkJCWdvdG8gZG93bmxvYWRfZmlybXdhcmVfZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfZmlybXdhcmUuaAppbmRleCAwNmQ2YWJjLi45NGZhMTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcjgxOTJFX2Zpcm13YXJlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9maXJtd2FyZS5oCkBAIC00MywxMSArNDMsNiBAQAogCURFU0NfUEFDS0VUX1RZUEVfTk9STUFMID0gMSwKIH07CiAKLWVudW0gZmlybXdhcmVfc291cmNlIHsKLQlGV19TT1VSQ0VfSU1HX0ZJTEUgPSAwLAotCUZXX1NPVVJDRV9IRUFERVJfRklMRSA9IDEsCi19OwotCiBlbnVtIGZpcm13YXJlX3N0YXR1cyB7CiAJRldfU1RBVFVTXzBfSU5JVCA9IDAsCiAJRldfU1RBVFVTXzFfTU9WRV9CT09UX0NPREUgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9od2ltZy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9od2ltZy5jCmluZGV4IDA4ZTdkYmIuLjY3NjdiNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfaHdpbWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcjgxOTJFX2h3aW1nLmMKQEAgLTIwLDI3NzcgKzIwLDYgQEAKIAogI2luY2x1ZGUgInI4MTkyRV9od2ltZy5oIgogCi11OCBSdGw4MTkyUGNpRUZ3Qm9vdEFycmF5W0Jvb3RBcnJheUxlbmd0aFBjaUVdID0gewotMHgxMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwOCwweGJmLDB4YzAsMHgyNSwweDA4LDB4MDAsMHgwOCwKLTB4M2MsMHgwOSwweGIwLDB4MDMsMHhhZCwweDI4LDB4MDAsMHgyMCwweDQwLDB4ODAsMHg2OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNjLDB4MGEsMHhkMCwweDAwLDB4NDAsMHg4YSwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDgsMHg4MCwweDAxLAotMHgyNSwweDA4LDB4YTgsMHgwNCwweDI0LDB4MDksMHgwMCwweDAxLDB4M2MsMHgwMSwweDdmLDB4ZmYsMHgzNCwweDIxLDB4ZmYsMHhmZiwKLTB4MDEsMHgwMSwweDUwLDB4MjQsMHgwMCwweDA5LDB4NDgsMHg0MCwweDM1LDB4MjksMHgwMCwweDAxLDB4MDEsMHgyYSwweDEwLDB4MmIsCi0weDE0LDB4NDAsMHhmZiwweGZjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDBhLDB4MDAsMHgwMCwweDI1LDB4NGEsMHgwMCwweDAwLAotMHg0YywweDhhLDB4MDAsMHgwMCwweDRjLDB4ODksMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDA4LDB4ODAsMHgwMSwKLTB4MjUsMHgwOCwweGE4LDB4MDQsMHgzYywweDAxLDB4ODAsMHgwMCwweDAxLDB4MjEsMHg0OCwweDI1LDB4M2MsMHgwYSwweGJmLDB4YzAsCi0weDI1LDB4NGEsMHgwMCwweDdjLDB4M2MsMHgwYiwweGIwLDB4MDMsMHhhZCwweDZhLDB4MDAsMHgyMCwweGFkLDB4MDAsMHgwMCwweDAwLAotMHgyMSwweDA4LDB4MDAsMHgwNCwweDAxLDB4MDksMHgxMCwweDJiLDB4MTQsMHg0MCwweGZmLDB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2MsMHgwOCwweDgwLDB4MDEsMHgyNSwweDA4LDB4N2YsMHhmZiwweDI0LDB4MDksMHgwMCwweDAxLDB4M2MsMHgwMSwweDdmLDB4ZmYsCi0weDM0LDB4MjEsMHhmZiwweGZmLDB4MDEsMHgwMSwweDUwLDB4MjQsMHgwMCwweDA5LDB4NDgsMHg0MCwweDM1LDB4MjksMHgwMCwweDAxLAotMHgwMSwweDJhLDB4MTAsMHgyYiwweDE0LDB4NDAsMHhmZiwweGZjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDBhLDB4ODAsMHgwMSwKLTB4MjUsMHg0YSwweDAwLDB4MDAsMHgzYywweDAxLDB4N2YsMHhmZiwweDM0LDB4MjEsMHhmZiwweGZmLDB4MDEsMHg0MSwweDUwLDB4MjQsCi0weDNjLDB4MDksMHgwMCwweDAxLDB4MzUsMHgyOSwweDdmLDB4ZmYsMHg0YywweDhhLDB4MjAsMHgwMCwweDRjLDB4ODksMHgyOCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDA4LDB4MDQsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDg4LDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNjLDB4MDgsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDBhLDB4YmYsMHhjMCwweDI1LDB4NGEsMHgwMSwweDIwLDB4M2MsMHgwYiwweGIwLDB4MDMsMHhhZCwweDZhLDB4MDAsMHgyMCwKLTB4M2MsMHgwOCwweGIwLDB4MDMsMHg4ZCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzUsMHgyOSwweDAwLDB4MTAsCi0weGFkLDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDA4LDB4ODAsMHgwMCwweDI1LDB4MDgsMHg0YiwweDk0LAotMHgwMSwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLH07Ci0KLXU4IFJ0bDgxOTJQY2lFRndNYWluQXJyYXlbTWFpbkFycmF5TGVuZ3RoUGNpRV0gPSB7Ci0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NDAsMHgwNCwweDY4LDB4MDAsMHg0MCwweDA1LDB4NzAsMHgwMCwweDQwLDB4MDYsMHg0MCwweDAwLDB4MGMsMHgwMCwweDEyLDB4OTgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxYSwweDY4LDB4MDAsMHgzMywweDViLDB4MDAsMHgzYywweDE3LDB4NjAsMHgwMCwweDA5LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDViLDB4ZDAsMHgyNCwKLTB4NDAsMHgxYSwweDcwLDB4MDAsMHgwMywweDQwLDB4MDAsMHgwOCwweDQyLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGZmLDB4ZmYsMHgzNCwweDQyLDB4ZmYsMHhmZiwweDhjLDB4NDMsMHgwMCwweDAwLAotMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAwLDB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4MDAsMHhkMCwKLTB4YWMsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgyMSwweDI3LDB4ODUsMHg4YiwweDcwLDB4MDAsMHg4NSwweDE4LDB4MjEsCi0weDI0LDB4ODQsMHgwMCwweDAxLDB4MjgsMHg4MiwweDAwLDB4MGEsMHgxNCwweDQwLDB4ZmYsMHhmYywweGEwLDB4NjAsMHgwMCwweDAwLAotMHgyNywweDgyLDB4OGIsMHg3YSwweDI0LDB4MDQsMHgwMCwweDA2LDB4MjQsMHg4NCwweGZmLDB4ZmYsMHhhNCwweDQwLDB4MDAsMHgwMCwKLTB4MDQsMHg4MSwweGZmLDB4ZmQsMHgyNCwweDQyLDB4MDAsMHgwMiwweDI0LDB4MDIsMHgwMCwweDAzLDB4YTMsMHg4MiwweDhiLDB4NzAsCi0weDI0LDB4MDIsMHgwMCwweDBhLDB4MjQsMHgwMywweDA5LDB4YzQsMHhhMywweDgyLDB4OGIsMHg3MiwweDI0LDB4MDIsMHgwMCwweDA0LAotMHgyNCwweDA0LDB4MDAsMHgwMSwweDI0LDB4MDUsMHgwMCwweDAyLDB4YTcsMHg4MywweDhiLDB4ODYsMHhhMywweDgyLDB4OGIsMHg3OCwKLTB4MjQsMHgwMywweDA0LDB4MDAsMHgyNCwweDAyLDB4MDIsMHgwMCwweGFmLDB4ODMsMHg4YiwweDhjLDB4YTMsMHg4NSwweDhiLDB4NzksCi0weGE3LDB4ODIsMHg4YiwweDdhLDB4YTcsMHg4NCwweDhiLDB4N2MsMHhhZiwweDg0LDB4OGIsMHg4OCwweGEzLDB4ODQsMHg4YiwweDcxLAotMHhhMywweDgwLDB4OGIsMHg3MywweGEzLDB4ODAsMHg4YiwweDc0LDB4YTMsMHg4MCwweDhiLDB4NzUsMHhhMywweDg0LDB4OGIsMHg3NiwKLTB4YTMsMHg4NSwweDhiLDB4NzcsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMywweGIwLDB4MDMsCi0weDNjLDB4MDIsMHg4MCwweDAwLDB4MjQsMHg0MiwweDAxLDB4N2MsMHgzNCwweDYzLDB4MDAsMHgyMCwweGFjLDB4NjIsMHgwMCwweDAwLAotMHgyNywweDg0LDB4OGIsMHg5OCwweDAwLDB4MDAsMHgxMCwweDIxLDB4MjQsMHg0MiwweDAwLDB4MDEsMHgwMCwweDAyLDB4MTYsMHgwMCwKLTB4MDAsMHgwMiwweDE2LDB4MDMsMHgyOCwweDQzLDB4MDAsMHgwMywweGFjLDB4ODAsMHhmZiwweGZjLDB4YTAsMHg4MCwweDAwLDB4MDAsCi0weDE0LDB4NjAsMHhmZiwweGY5LDB4MjQsMHg4NCwweDAwLDB4MGMsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAwLDB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4MDEsMHhjMCwKLTB4M2MsMHgwOCwweGIwLDB4MDMsMHhhYywweDYyLDB4MDAsMHgwMCwweDM1LDB4MDgsMHgwMCwweDcwLDB4OGQsMHgwMiwweDAwLDB4MDAsCi0weDAwLDB4YTAsMHg0OCwweDIxLDB4MDAsMHgwNCwweDI2LDB4MDAsMHgwMCwweDAyLDB4MmEsMHg0MywweDAwLDB4MDYsMHgzNiwweDAwLAotMHgwMCwweDA3LDB4M2UsMHgwMCwweDAwLDB4MDIsMHgxMiwweDAzLDB4MjksMHgyMywweDAwLDB4MDMsMHgwMCwweDA0LDB4NTYsMHgwMywKLTB4MDAsMHgwNiwweDM2LDB4MDMsMHgwMCwweDA3LDB4M2UsMHgwMywweDMwLDB4NDgsMHgwMCwweDAxLDB4MTAsMHg2MCwweDAwLDB4MTEsCi0weDMwLDB4YTUsMHgwMCwweDA3LDB4MjQsMHgwMiwweDAwLDB4MDIsMHgwMCwweDQ5LDB4MTAsMHgyMywweDAwLDB4NDUsMHgxMCwweDA3LAotMHgzMCwweDQyLDB4MDAsMHgwMSwweDEwLDB4NDAsMHgwMCwweDY2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweGEyLDB4MDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MjEsMHg0MywweDExLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwNywweDIwLDB4MGIsCi0weDE1LDB4MjAsMHgwMCwweDA2LDB4MjQsMHgwMiwweDAwLDB4MDEsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwMSwweDIwLAotMHhhNCwweDQ0LDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweDIyLDB4MDAsMHgwNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwNSwweDA4LDB4MDAsMHgwMCwweDk0LDB4MzQsMHg0MiwweDAxLDB4MjQsCi0weDNjLDB4MDIsMHhiMCwweDA1LDB4MDgsMHgwMCwweDAwLDB4OTQsMHgzNCwweDQyLDB4MDEsMHgyMiwweDE1LDB4MjAsMHgwMCwweDU0LAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAwLDB4NzQsMHg5MCwweDQzLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhZiwweDgzLDB4OGIsMHg5NCwweDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAwLDB4NzAsCi0weDkwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDZiLDB4MDAsMHgwOCwweDExLDB4NjAsMHgwMCwweDE4LAotMHgwMCwweDA5LDB4MjgsMHg0MCwweDAwLDB4MDAsMHg0MCwweDIxLDB4MjcsMHg4NSwweDhiLDB4OTAsMHg4YywweGEzLDB4MDAsMHgwMCwKLTB4OGMsMHhhMiwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHgzOCwweDIzLDB4MDAsMHg0MywweDEwLDB4MmEsCi0weDEwLDB4NDAsMHgwMCwweDNkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYywweGE3LDB4MDAsMHgwMCwweDI1LDB4MDIsMHgwMCwweDAxLAotMHgwMCwweDAyLDB4MTYsMHgwMCwweDAwLDB4MDIsMHg0NiwweDAzLDB4MjksMHgwMywweDAwLDB4MDMsMHgxNCwweDYwLDB4ZmYsMHhmMywKLTB4MjQsMHhhNSwweDAwLDB4MGMsMHgzYywweDAzLDB4YjAsMHgwMywweDM0LDB4NjMsMHgwMCwweDcwLDB4OTAsMHg2MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0YiwweDEwLDB4MjMsMHhhMCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDksMHgyOCwweDQwLAotMHgwMCwweGE5LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4MywweDhiLDB4OTgsMHgwMCwweDBhLDB4MjAsMHgwYiwKLTB4MDAsMHg0MywweDE4LDB4MjEsMHgxMCwweGMwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgzOCwweDIxLDB4ODAsMHg2MiwweDAwLDB4MDEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweDAwLDB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4NjIsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDAzLDB4MDAsMHhhOSwweDEwLDB4MjEsMHgyNCwweDA3LDB4MDAsMHgwMSwKLTB4MDAsMHhhOSwweDEwLDB4MjEsMHgwMCwweDAyLDB4MzAsMHg4MCwweDI3LDB4ODIsMHg4YiwweDk4LDB4YTAsMHg2NywweDAwLDB4MDEsCi0weDAwLDB4YzIsMHgzOCwweDIxLDB4ODAsMHhlMywweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NjAsMHgwMCwweDA3LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI3LDB4ODMsMHg4YiwweDkwLDB4MDAsMHhjMywweDE4LDB4MjEsMHg4YywweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4MTAsMHgyMSwweGFjLDB4NjIsMHgwMCwweDAwLDB4MjcsMHg4NSwweDhiLDB4OTQsCi0weDI3LDB4ODIsMHg4YiwweDkwLDB4MDAsMHhjNSwweDI4LDB4MjEsMHgwMCwweGMyLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDAwLAotMHg4YywweGE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2NCwweDE4LDB4MmEsMHgxNCwweDYwLDB4MDAsMHgwMywKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHgwMywweGUwLDB4MDAsMHgwOCwweGEwLDB4ZTIsMHgwMCwweDAwLDB4YTAsMHhlMCwweDAwLDB4MDAsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHhiNywweGFjLDB4YTAsMHgwMCwweDAwLAotMHgxMSwweDIyLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDAsMHg3YywKLTB4OTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFmLDB4ODMsMHg4YiwweGFjLDB4MDgsMHgwMCwweDAwLDB4YTcsCi0weDNjLDB4MDIsMHhiMCwweDAzLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDAsMHg3OCwweDkwLDB4NDMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGFmLDB4ODMsMHg4YiwweGEwLDB4MDgsMHgwMCwweDAwLDB4YTcsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwweDM0LDB4NjMsMHgwMCwweDIwLDB4MjQsMHg0MiwweDA0LDB4MTAsCi0weDNjLDB4MDUsMHhiMCwweDAzLDB4YWMsMHg2MiwweDAwLDB4MDAsMHgzNCwweGE1LDB4MDAsMHg3MCwweDhjLDB4YTIsMHgwMCwweDAwLAotMHg5MCwweDg0LDB4MDAsMHgwOCwweDNjLDB4MDYsMHhiMCwweDAzLDB4MDAsMHgwMiwweDE2LDB4MDAsMHgyYywweDgzLDB4MDAsMHgwMywKLTB4MzQsMHhjNiwweDAwLDB4NzIsMHgyNCwweDA3LDB4MDAsMHgwMSwweDEwLDB4NjAsMHgwMCwweDExLDB4MDAsMHgwMiwweDJmLDB4YzIsCi0weDkwLDB4YzIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MjEsMHgwMCwweDAyLDB4MTYsMHgwMCwweDEwLDB4YTcsMHgwMCwweDA5LAotMHgwMCwweDAyLDB4MTYsMHgwMywweDE0LDB4ODAsMHgwMCwweDBjLDB4MzAsMHg0MywweDAwLDB4MDMsMHg4MywweDgyLDB4OGIsMHg5OCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDE2LDB4MDAsCi0weDAwLDB4MDIsMHgxZSwweDAzLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDAsMHg3MiwweGEwLDB4NDMsMHgwMCwweDAwLAotMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0NSwweDAwLDB4MDUsMHgxMCwweDg3LDB4MDAsMHgwNCwKLTB4MzAsMHg0MywweDAwLDB4MDYsMHg5MywweDgyLDB4OGIsMHhiMCwweDA4LDB4MDAsMHgwMSwweDFmLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDgzLDB4ODIsMHg4YiwweGE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTAsMHg0MCwweDA4LDB4MDAsMHgwMSwweDFmLAotMHgwMCwweDQ1LDB4MTAsMHgyMSwweDEwLDB4ODAsMHgwMCwweDA1LDB4MDAsMHgwMCwweDE4LDB4MjEsMHgyNCwweDYzLDB4MDAsMHgwMSwKLTB4MDAsMHg2NCwweDEwLDB4MmIsMHgxNCwweDQwLDB4ZmYsMHhmZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwweDI0LDB4NDIsMHgwNCwweGU0LAotMHgzYywweDA0LDB4YjAsMHgwMiwweDM0LDB4NjMsMHgwMCwweDIwLDB4YWMsMHg2MiwweDAwLDB4MDAsMHgzNCwweDg0LDB4MDAsMHgwOCwKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHhhZiwweDg0LDB4OGIsMHhjMCwweGEzLDB4ODIsMHg4YiwweGQwLDB4YTcsMHg4MCwweDhiLDB4YzQsCi0weGE3LDB4ODAsMHg4YiwweGM2LDB4YWYsMHg4MCwweDhiLDB4YzgsMHhhZiwweDgwLDB4OGIsMHhjYywweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgzNCwweDYzLDB4MDAsMHgyMCwKLTB4MjQsMHg0MiwweDA1LDB4MjQsMHgzYywweDA0LDB4YjAsMHgwMywweGFjLDB4NjIsMHgwMCwweDAwLDB4MzQsMHg4NCwweDAwLDB4YWMsCi0weDgwLDB4YTIsMHgwMCwweDE1LDB4OGMsMHg4MywweDAwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHhmMCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHhhYywweDgyLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTAsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4M2MsMHgwMywweDgwLDB4MDAsMHgzNCwweDQyLDB4MDAsMHgyMCwweDI0LDB4NjMsMHgwNSwweDVjLDB4MjcsMHhiZCwweGZmLDB4ZTAsCi0weGFjLDB4NDMsMHgwMCwweDAwLDB4YWYsMHhiMSwweDAwLDB4MTQsMHhhZiwweGIwLDB4MDAsMHgxMCwweGFmLDB4YmYsMHgwMCwweDE4LAotMHg4ZiwweDkwLDB4OGIsMHhjMCwweDBjLDB4MDAsMHgwMiwweDk4LDB4MDAsMHg4MCwweDg4LDB4MjEsMHgxNCwweDQwLDB4MDAsMHgyYSwKLTB4M2MsMHgwMiwweDAwLDB4ODAsMHgxNiwweDIwLDB4MDAsMHgwMiwweDM0LDB4NDIsMHgwMiwweDAxLDB4MjQsMHgwMiwweDAyLDB4MDEsCi0weGFlLDB4MDIsMHgwMCwweDAwLDB4OTcsMHg4NCwweDhiLDB4YzQsMHg5NywweDgyLDB4OGIsMHhjNiwweDNjLDB4MDMsMHhiMCwweDAyLAotMHgwMCwweDgzLDB4MjAsMHgyMSwweDI0LDB4NDIsMHgwMCwweDA0LDB4YTcsMHg4MiwweDhiLDB4YzYsMHhhNCwweDgyLDB4MDAsMHgwMCwKLTB4OGYsMHg4NCwweDhiLDB4YzgsMHg4ZiwweDgyLDB4OGIsMHhjMCwweDkzLDB4ODUsMHg4YiwweDcyLDB4MjQsMHg4NCwweDAwLDB4MDEsCi0weDI0LDB4NDIsMHgwMCwweDA0LDB4MjQsMHgwMywweDhmLDB4ZmYsMHgzYywweDA3LDB4YjAsMHgwNiwweDNjLDB4MDYsMHhiMCwweDAzLAotMHgwMCwweDQzLDB4MTAsMHgyNCwweDAwLDB4ODUsMHgyOCwweDJhLDB4MzQsMHhlNywweDgwLDB4MTgsMHhhZiwweDgyLDB4OGIsMHhjMCwKLTB4YWYsMHg4NCwweDhiLDB4YzgsMHgxMCwweGEwLDB4MDAsMHgwOCwweDM0LDB4YzYsMHgwMSwweDA4LDB4OGYsMHg4MywweDhiLDB4Y2MsCi0weDhmLDB4ODQsMHg4YiwweDhjLDB4OGMsMHhjMiwweDAwLDB4MDAsMHgwMCwweDY0LDB4MTgsMHgyMSwweDAwLDB4NDMsMHgxMCwweDJiLAotMHgxNCwweDQwLDB4MDAsMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHhlMiwweDAwLDB4MDAsMHgzYywweDAzLDB4MGYsMHgwMCwKLTB4M2MsMHgwNCwweDA0LDB4MDAsMHgwMCwweDQzLDB4MTAsMHgyNCwweDEwLDB4NDQsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBjLDB4MDAsMHgwNCwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweGJmLDB4MDAsMHgxOCwweDdiLDB4YjAsMHgwMCwweGJjLAotMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDIwLDB4MjcsMHhiZCwweGZmLDB4ZDgsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4M2MsMHgwMywweDgwLDB4MDAsMHgyNCwweDYzLDB4MDYsMHg0OCwweGFmLDB4YjAsMHgwMCwweDEwLDB4MzQsMHg0MiwweDAwLDB4MjAsCi0weDhmLDB4OTAsMHg4YiwweGMwLDB4YWMsMHg0MywweDAwLDB4MDAsMHhhZiwweGIzLDB4MDAsMHgxYywweGFmLDB4YjIsMHgwMCwweDE4LAotMHhhZiwweGIxLDB4MDAsMHgxNCwweGFmLDB4YmYsMHgwMCwweDIwLDB4MDAsMHg4MCwweDg4LDB4MjEsMHgwMCwweGEwLDB4OTAsMHgyMSwKLTB4MGMsMHgwMCwweDAyLDB4OTgsMHgwMCwweGMwLDB4OTgsMHgyMSwweDI0LDB4MDcsMHg4ZiwweGZmLDB4MTQsMHg0MCwweDAwLDB4MTksCi0weDI2LDB4MDMsMHgwMCwweDA0LDB4MjQsMHgwMiwweDBlLDB4MDMsMHhhZSwweDAyLDB4MDAsMHgwMCwweDAwLDB4NjcsMHg4MCwweDI0LAotMHgyNiwweDAyLDB4MDAsMHgwNCwweGFlLDB4MTEsMHgwMCwweDAwLDB4MDAsMHg0NywweDgwLDB4MjQsMHg5NywweDg2LDB4OGIsMHhjNCwKLTB4MjYsMHgwMywweDAwLDB4MDQsMHhhZSwweDEyLDB4MDAsMHgwMCwweDAwLDB4NjcsMHg4MCwweDI0LDB4YWUsMHgxMywweDAwLDB4MDAsCi0weDhmLDB4ODQsMHg4YiwweGMwLDB4M2MsMHgwMiwweGIwLDB4MDIsMHg5NywweDg1LDB4OGIsMHhjNiwweDAwLDB4YzIsMHgzMCwweDIxLAotMHg4ZiwweDgyLDB4OGIsMHhjOCwweDI0LDB4ODQsMHgwMCwweDEwLDB4MjQsMHhhNSwweDAwLDB4MTAsMHgwMCwweDg3LDB4MjAsMHgyNCwKLTB4MjQsMHg0MiwweDAwLDB4MDEsMHhhNywweDg1LDB4OGIsMHhjNiwweGFmLDB4ODQsMHg4YiwweGMwLDB4YWYsMHg4MiwweDhiLDB4YzgsCi0weGE0LDB4YzUsMHgwMCwweDAwLDB4OGYsMHhiZiwweDAwLDB4MjAsMHg3YiwweGIyLDB4MDAsMHhmYywweDdiLDB4YjAsMHgwMCwweGJjLAotMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDI4LDB4MjcsMHhiZCwweGZmLDB4ZTgsMHhhZiwweGJmLDB4MDAsMHgxMCwKLTB4OTQsMHg4MiwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHhlMCwweDAwLDB4MTQsMHg0MCwweDAwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHg4MiwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweGZjLAotMHgwMCwweDgyLDB4MjgsMHgyMSwweDhjLDB4YTQsMHgwMCwweDAwLDB4M2MsMHgwMiwweDAwLDB4NzAsMHg4YywweGE2LDB4MDAsMHgwOCwKLTB4MDAsMHg4MiwweDEwLDB4MjEsMHgyYywweDQzLDB4MDAsMHgwNiwweDEwLDB4NjAsMHgwMCwweDA5LDB4M2MsMHgwMywweDgwLDB4MDEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MjQsMHg2MywweDAxLDB4ZTgsMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhZiwweDg2LDB4ODAsMHgxNCwKLTB4OGYsMHhiZiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsCi0weDhjLDB4YTQsMHgwMCwweDAwLDB4MGMsMHgwMCwweDE3LDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMSwweGRjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgyNCwweDQ5LDB4MDAsMHhjMCwweDIwLDB4MjEsMHgwOCwweDAwLDB4MDEsMHhkYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMSwweDA4LDB4OGMsMHg0NCwweDAwLDB4MDAsCi0weDhmLDB4ODIsMHg4MCwweDE4LDB4M2MsMHgwMywweDAwLDB4MGYsMHgzNCwweDYzLDB4NDIsMHg0MCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHgwMCwweDgyLDB4MjAsMHgyYiwweDEwLDB4ODAsMHgwMCwweDA5LDB4MjQsMHgwMywweDAwLDB4MDUsMHg4ZiwweDgyLDB4ODMsMHg2MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHgwMSwweGFmLDB4ODIsMHg4MywweDYwLDB4MTAsMHg0MywweDAwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAzLAotMHg4YywweDYzLDB4MDEsMHgwOCwweDI0LDB4MDIsMHgwMCwweDAxLDB4YTMsMHg4MiwweDgwLDB4MTEsMHhhZiwweDgwLDB4ODMsMHg2MCwKLTB4YWYsMHg4MywweDgwLDB4MTgsMHgwOCwweDAwLDB4MDEsMHhmOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg4NCwweDAwLDB4ZmYsCi0weDE0LDB4ODAsMHgwMCwweDJmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweDgyLDB4ODAsMHgxNCwweGEzLDB4ODUsMHg4MywweDkzLAotMHgxMCwweDQwLDB4MDAsMHgyYiwweDJjLDB4YTIsMHgwMCwweDA0LDB4MTQsMHg0MCwweDAwLDB4MDYsMHgwMCwweDA1LDB4MTAsMHg0MCwKLTB4MjQsMHhhMiwweGZmLDB4ZmMsMHgyYywweDQyLDB4MDAsMHgwOCwweDEwLDB4NDAsMHgwMCwweDA5LDB4MjQsMHhhMiwweGZmLDB4ZjAsCi0weDAwLDB4MDUsMHgxMCwweDQwLDB4MjcsMHg4NCwweDgzLDB4OWMsMHgwMCwweDQ0LDB4MTAsMHgyMSwweDk0LDB4NDMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NjMsMHgwMCwweDAxLDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhNCwweDQzLDB4MDAsMHgwMCwKLTB4MmMsMHg0MiwweDAwLDB4MTAsMHgxNCwweDQwLDB4MDAsMHgwYSwweDAwLDB4MDUsMHgxMCwweDQwLDB4MjQsMHhhMiwweGZmLDB4ZTAsCi0weDJjLDB4NDIsMHgwMCwweDEwLDB4MTQsMHg0MCwweDAwLDB4MDYsMHgwMCwweDA1LDB4MTAsMHg0MCwweDI0LDB4YTIsMHhmZiwweGQwLAotMHgyYywweDQyLDB4MDAsMHgxMCwweDEwLDB4NDAsMHgwMCwweDA5LDB4MjQsMHhhMiwweGZmLDB4YzAsMHgwMCwweDA1LDB4MTAsMHg0MCwKLTB4MjcsMHg4NCwweDgzLDB4OWMsMHgwMCwweDQ0LDB4MTAsMHgyMSwweDk0LDB4NDMsMHhmZiwweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4NjMsMHgwMCwweDAxLDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhNCwweDQzLDB4ZmYsMHhmOCwweDJjLDB4NDIsMHgwMCwweDEwLAotMHgxMCwweDQwLDB4MDAsMHgwNywweDAwLDB4MDUsMHgxMCwweDQwLDB4MjcsMHg4NCwweDgzLDB4OWMsMHgwMCwweDQ0LDB4MTAsMHgyMSwKLTB4OTQsMHg0MywweGZmLDB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NjMsMHgwMCwweDAxLDB4YTQsMHg0MywweGZmLDB4ZjgsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweDg2LDB4OGIsMHhjMCwweDhmLDB4ODIsMHg4MCwweDE0LAotMHgyNywweGJkLDB4ZmYsMHhlOCwweGFmLDB4YmYsMHgwMCwweDEwLDB4MTAsMHg0MCwweDAwLDB4MmEsMHgwMCwweGMwLDB4MzgsMHgyMSwKLTB4MjQsMHgwMiwweDAwLDB4MDcsMHgyNCwweDAzLDB4ZmYsMHg5YywweGEzLDB4ODIsMHg4MywweDliLDB4YTMsMHg4MywweDgzLDB4OWEsCi0weDI3LDB4OGEsMHg4MywweDk4LDB4MDAsMHgwMCwweDIwLDB4MjEsMHgyNCwweDA5LDB4OGYsMHhmZiwweDAwLDB4MDQsMHgxMCwweDgwLAotMHgwMCwweDRhLDB4MjgsMHgyMSwweDhjLDB4YTIsMHgwMCwweDAwLDB4MjQsMHhlMywweDAwLDB4MDQsMHgyNCwweDg4LDB4MDAsMHgwMSwKLTB4YWMsMHhlMiwweDAwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMiwweDAwLDB4NjksMHgzOCwweDI0LDB4YWMsMHhhMCwweDAwLDB4MDAsCi0weDMxLDB4MDQsMHgwMCwweGZmLDB4MmMsMHg4MiwweDAwLDB4MjcsMHgxNCwweDQwLDB4ZmYsMHhmNSwweDAwLDB4MDQsMHgxMCwweDgwLAotMHg5NywweDgzLDB4OGIsMHhjNiwweDk3LDB4ODUsMHg4YiwweGM0LDB4M2MsMHgwMiwweGIwLDB4MDIsMHgyNCwweDYzLDB4MDAsMHg5YywKLTB4MDAsMHhhMiwweDI4LDB4MjEsMHgzYywweDA0LDB4YjAsMHgwNiwweGE3LDB4ODMsMHg4YiwweGM2LDB4MzQsMHg4NCwweDgwLDB4MTgsCi0weGE0LDB4YTMsMHgwMCwweDAwLDB4OGMsMHg4NSwweDAwLDB4MDAsMHgyNCwweDAyLDB4OGYsMHhmZiwweDI0LDB4YzYsMHgwMCwweDljLAotMHgzYywweDAzLDB4MGYsMHgwMCwweDAwLDB4YzIsMHgzMCwweDI0LDB4MDAsMHhhMywweDI4LDB4MjQsMHgzYywweDAyLDB4MDQsMHgwMCwKLTB4YWYsMHg4NiwweDhiLDB4YzAsMHgxMCwweGEyLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDA0LDB4OTYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHhiZiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgyNywweGJkLDB4MDAsMHgxOCwweDhmLDB4ODYsMHg4YiwweGMwLDB4MjcsMHhiZCwweGZmLDB4YzgsMHgyNCwweDAyLDB4MDAsMHgwOCwKLTB4MjQsMHgwMywweDAwLDB4MjAsMHhhZiwweGJmLDB4MDAsMHgzMCwweGEzLDB4YTIsMHgwMCwweDEzLDB4YTMsMHhhMywweDAwLDB4MTIsCi0weGE3LDB4YTQsMHgwMCwweDEwLDB4MDAsMHhjMCwweDI4LDB4MjEsMHgyNywweGE5LDB4MDAsMHgxMCwweDAwLDB4MDAsMHgzOCwweDIxLAotMHgyNCwweDA4LDB4OGYsMHhmZiwweDAwLDB4MDcsMHgxMCwweDgwLDB4MDAsMHg0OSwweDEwLDB4MjEsMHg4YywweDQ0LDB4MDAsMHgwMCwKLTB4MjQsMHhlMywweDAwLDB4MDEsMHgzMCwweDY3LDB4MDAsMHhmZiwweDI0LDB4YTIsMHgwMCwweDA0LDB4MmMsMHhlMywweDAwLDB4MDgsCi0weGFjLDB4YTQsMHgwMCwweDAwLDB4MTQsMHg2MCwweGZmLDB4ZjcsMHgwMCwweDQ4LDB4MjgsMHgyNCwweDk3LDB4ODMsMHg4YiwweGM2LAotMHg5NywweDg1LDB4OGIsMHhjNCwweDNjLDB4MDIsMHhiMCwweDAyLDB4MjQsMHg2MywweDAwLDB4MjAsMHgwMCwweGEyLDB4MjgsMHgyMSwKLTB4M2MsMHgwNCwweGIwLDB4MDYsMHhhNywweDgzLDB4OGIsMHhjNiwweDM0LDB4ODQsMHg4MCwweDE4LDB4YTQsMHhhMywweDAwLDB4MDAsCi0weDhjLDB4ODUsMHgwMCwweDAwLDB4MjQsMHgwMiwweDhmLDB4ZmYsMHgyNCwweGM2LDB4MDAsMHgyMCwweDNjLDB4MDMsMHgwZiwweDAwLAotMHgwMCwweGMyLDB4MzAsMHgyNCwweDAwLDB4YTMsMHgyOCwweDI0LDB4M2MsMHgwMiwweDA0LDB4MDAsMHhhZiwweDg2LDB4OGIsMHhjMCwKLTB4MTAsMHhhMiwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwNCwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhmLDB4YmYsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDM4LAotMHg5MywweDgyLDB4OGIsMHhkMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MTEsMHgyNCwweDA2LDB4MDAsMHgwMSwKLTB4OGYsMHg4MiwweDhiLDB4YzgsMHgzYywweDA1LDB4YjAsMHgwNiwweDNjLDB4MDQsMHhiMCwweDAzLDB4MzQsMHhhNSwweDgwLDB4MTgsCi0weDM0LDB4ODQsMHgwMSwweDA4LDB4MTQsMHg0MCwweDAwLDB4MDksMHgwMCwweDAwLDB4MzAsMHgyMSwweDk3LDB4ODIsMHg4YiwweGM0LAotMHg4YywweDg0LDB4MDAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAyLDB4MDAsMHg0MywweDEwLDB4MjEsMHhhZiwweDg0LDB4OGIsMHhjYywKLTB4YTcsMHg4MCwweDhiLDB4YzYsMHhhYywweDQwLDB4MDAsMHgwMCwweGFjLDB4NDAsMHgwMCwweDA0LDB4OGMsMHhhMiwweDAwLDB4MDAsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHhjMCwweDEwLDB4MjEsMHg4ZiwweDg2LDB4OGIsMHhjMCwweDhmLDB4ODIsMHg4YiwweGM4LAotMHgyNywweGJkLDB4ZmYsMHhlOCwweGFmLDB4YmYsMHgwMCwweDEwLDB4MDAsMHhjMCwweDQwLDB4MjEsMHgxNCwweDQwLDB4MDAsMHgwYSwKLTB4MDAsMHg0MCwweDUwLDB4MjEsMHgwMCwweDAwLDB4MzgsMHgyMSwweDI3LDB4ODksMHg4MywweDY4LDB4MjQsMHhlMiwweDAwLDB4MDEsCi0weDAwLDB4MDcsMHgxOCwweDgwLDB4MzAsMHg0NywweDAwLDB4ZmYsMHgwMCwweDY5LDB4MTgsMHgyMSwweDJjLDB4ZTIsMHgwMCwweDBhLAotMHgxNCwweDQwLDB4ZmYsMHhmYSwweGFjLDB4NjAsMHgwMCwweDAwLDB4M2MsMHgwMiwweDAwLDB4ODAsMHgxMCwweDgyLDB4MDAsMHg2ZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NywweDgyLDB4ODMsMHg2ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg0MiwweDAwLDB4MDEsCi0weGE3LDB4ODIsMHg4MywweDZlLDB4OTAsMHhhMywweDAwLDB4MTUsMHg5NywweDgyLDB4ODMsMHg3MCwweDAwLDB4MDMsMHgxZSwweDAwLAotMHgwMCwweDAzLDB4MWUsMHgwMywweDAwLDB4NDMsMHgxMCwweDIxLDB4YTcsMHg4MiwweDgzLDB4NzAsMHg4YywweGE0LDB4MDAsMHgyMCwKLTB4M2MsMHgwMiwweDAwLDB4NjAsMHgzYywweDAzLDB4MDAsMHgyMCwweDAwLDB4ODIsMHgyMCwweDI0LDB4MTAsMHg4MywweDAwLDB4NTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg4MCwweDAwLDB4NDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk3LDB4ODIsMHg4MywweDc0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDIsMHgwMCwweDAxLDB4YTcsMHg4MiwweDgzLDB4NzQsMHg4NCwweGEzLDB4MDAsMHgwNiwKLTB4OGYsMHg4MiwweDgzLDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4YWYsMHg4MiwweDgzLDB4ODQsCi0weDI1LDB4NDIsMHgwMCwweDAxLDB4MjgsMHg0MywweDI3LDB4MTAsMHhhZiwweDgyLDB4OGIsMHhjOCwweDEwLDB4NjAsMHgwMCwweDA5LAotMHgyNCwweDAyLDB4MDAsMHgwNCwweDkzLDB4ODMsMHg4MCwweDExLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMCwweDYyLDB4MDAsMHgwNSwKLTB4MjQsMHgwMiwweDAwLDB4MDQsMHg4ZiwweGJmLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDI3LDB4YmQsMHgwMCwweDE4LDB4MjQsMHgwMywweDAwLDB4MjgsMHhhMywweDgzLDB4ODMsMHg2YSwweGEzLDB4ODIsMHg4MywweDZiLAotMHg5MCwweGEyLDB4MDAsMHgxOCwweDkzLDB4ODMsMHg4MywweDkzLDB4MDAsMHgwMCwweDM4LDB4MjEsMHgwMCwweDAyLDB4MTYsMHgwMCwKLTB4MDAsMHgwMiwweDE2LDB4MDMsMHhhNywweDgyLDB4ODMsMHg3ZSwweGEzLDB4ODMsMHg4MywweDhjLDB4MjcsMHg4OSwweDgzLDB4NjgsCi0weDI0LDB4MDUsMHg4ZiwweGZmLDB4MDAsMHgwNywweDEwLDB4ODAsMHgwMCwweDQ5LDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDAwLAotMHgyNCwweGUzLDB4MDAsMHgwMSwweDMwLDB4NjcsMHgwMCwweGZmLDB4MjUsMHgwMiwweDAwLDB4MDQsMHgyYywweGUzLDB4MDAsMHgwYSwKLTB4YWQsMHgwNCwweDAwLDB4MDAsMHgxNCwweDYwLDB4ZmYsMHhmNywweDAwLDB4NDUsMHg0MCwweDI0LDB4OTcsMHg4MywweDhiLDB4YzYsCi0weDk3LDB4ODUsMHg4YiwweGM0LDB4M2MsMHgwMiwweGIwLDB4MDIsMHgyNCwweDYzLDB4MDAsMHgyOCwweDAwLDB4YTIsMHgyOCwweDIxLAotMHgzYywweDA0LDB4YjAsMHgwNiwweGE3LDB4ODMsMHg4YiwweGM2LDB4MzQsMHg4NCwweDgwLDB4MTgsMHhhNCwweGEzLDB4MDAsMHgwMCwKLTB4OGMsMHg4NSwweDAwLDB4MDAsMHgyNCwweDAyLDB4OGYsMHhmZiwweDI0LDB4YzYsMHgwMCwweDI4LDB4M2MsMHgwMywweDBmLDB4MDAsCi0weDAwLDB4YzIsMHgzMCwweDI0LDB4MDAsMHhhMywweDI4LDB4MjQsMHgzYywweDAyLDB4MDQsMHgwMCwweGFmLDB4ODYsMHg4YiwweGMwLAotMHgxMCwweGEyLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDA0LDB4OTYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGMsMHgwMCwweDAyLDB4MzYsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEzLDB4ODAsMHg4MCwweDExLDB4MDgsMHgwMCwweDAyLDB4ZTUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTcsMHg4MiwweDgzLDB4NzYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDIsMHgwMCwweDAxLAotMHhhNywweDgyLDB4ODMsMHg3NiwweDg0LDB4YTMsMHgwMCwweDA2LDB4OGYsMHg4MiwweDgzLDB4ODgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHg0MywweDEwLDB4MjEsMHhhZiwweDgyLDB4ODMsMHg4OCwweDA4LDB4MDAsMHgwMiwweGRkLDB4MjUsMHg0MiwweDAwLDB4MDEsCi0weDk3LDB4ODIsMHg4MywweDcyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHgwMSwweGE3LDB4ODIsMHg4MywweDcyLAotMHg4NCwweGEzLDB4MDAsMHgwNiwweDhmLDB4ODIsMHg4MywweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQzLDB4MTAsMHgyMSwKLTB4YWYsMHg4MiwweDgzLDB4ODAsMHgwOCwweDAwLDB4MDIsMHhkZCwweDI1LDB4NDIsMHgwMCwweDAxLDB4OTcsMHg4MiwweDgzLDB4NmMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg0MiwweDAwLDB4MDEsMHhhNywweDgyLDB4ODMsMHg2YywweDA4LDB4MDAsMHgwMiwweGM1LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI3LDB4YmQsMHhmZiwweGQwLDB4YWYsMHhiZiwweDAwLDB4MjgsMHg4YywweGEzLDB4MDAsMHgyMCwKLTB4OGYsMHg4YSwweDhiLDB4YzAsMHgzYywweDAyLDB4MDAsMHgxMCwweDAwLDB4NjIsMHgxMCwweDI0LDB4MDAsMHhhMCwweDM4LDB4MjEsCi0weDAxLDB4NDAsMHg0OCwweDIxLDB4MTAsMHg0MCwweDAwLDB4M2QsMHgwMCwweDgwLDB4MjgsMHgyMSwweDhjLDB4ZTQsMHgwMCwweDFjLAotMHgzNCwweGE1LDB4MTIsMHgwNiwweGFmLDB4YTUsMHgwMCwweDEwLDB4OGMsMHg4MiwweDAwLDB4MDgsMHgwMCwweDAzLDB4MWMsMHg0MiwKLTB4MzAsMHg2MywweDAwLDB4MzAsMHgwMCwweDAyLDB4MTMsMHgwMiwweDMwLDB4NDIsMHgwMCwweDQwLDB4MDAsMHg0MywweDEwLDB4MjUsCi0weDkwLDB4ZTYsMHgwMCwweDEwLDB4OTAsMHhlNCwweDAwLDB4MTMsMHg5NCwweGU4LDB4MDAsMHgwYywweDk0LDB4ZTMsMHgwMCwweDFhLAotMHgwMCwweDAyLDB4MTYsMHgwMCwweDkwLDB4ZTcsMHgwMCwweDEyLDB4MDAsMHhhMiwweDI4LDB4MjUsMHgyNCwweDAyLDB4MTIsMHgzNCwKLTB4YTcsMHhhMiwweDAwLDB4MWMsMHgyNCwweDAyLDB4NTYsMHg3OCwweGFmLDB4YTUsMHgwMCwweDEwLDB4YTMsMHhhNiwweDAwLDB4MTgsCi0weGEzLDB4YTcsMHgwMCwweDFmLDB4YTcsMHhhMywweDAwLDB4MWEsMHhhMywweGE0LDB4MDAsMHgxOSwweGE3LDB4YTgsMHgwMCwweDIwLAotMHhhNywweGEyLDB4MDAsMHgyMiwweDAwLDB4MDAsMHgyOCwweDIxLDB4MjcsMHhhNywweDAwLDB4MTAsMHgyNCwweDA2LDB4OGYsMHhmZiwKLTB4MDAsMHgwNSwweDEwLDB4ODAsMHgwMCwweDQ3LDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDAwLDB4MjQsMHhhMywweDAwLDB4MDEsCi0weDMwLDB4NjUsMHgwMCwweGZmLDB4MjUsMHgyMiwweDAwLDB4MDQsMHgyYywweGEzLDB4MDAsMHgwNSwweGFkLDB4MjQsMHgwMCwweDAwLAotMHgxNCwweDYwLDB4ZmYsMHhmNywweDAwLDB4NDYsMHg0OCwweDI0LDB4OTcsMHg4MywweDhiLDB4YzYsMHg5NywweDg1LDB4OGIsMHhjNCwKLTB4M2MsMHgwMiwweGIwLDB4MDIsMHgyNCwweDYzLDB4MDAsMHgxNCwweDAwLDB4YTIsMHgyOCwweDIxLDB4M2MsMHgwNCwweGIwLDB4MDYsCi0weGE3LDB4ODMsMHg4YiwweGM2LDB4MzQsMHg4NCwweDgwLDB4MTgsMHhhNCwweGEzLDB4MDAsMHgwMCwweDhjLDB4ODUsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4OGYsMHhmZiwweDI1LDB4NDYsMHgwMCwweDE0LDB4M2MsMHgwMywweDBmLDB4MDAsMHgwMCwweGMyLDB4NTAsMHgyNCwKLTB4MDAsMHhhMywweDI4LDB4MjQsMHgzYywweDAyLDB4MDQsMHgwMCwweGFmLDB4OGEsMHg4YiwweGMwLDB4MTAsMHhhMiwweDAwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDA0LDB4OTYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4YmYsMHgwMCwweDI4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MzAsMHgzYywweDA1LDB4YjAsMHgwMywKLTB4M2MsMHgwMiwweDgwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHhjOCwweDAwLDB4MDQsMHgyMiwweDAwLDB4MzQsMHhhNSwweDAwLDB4MjAsCi0weDI0LDB4NDIsMHgwZCwweGZjLDB4M2MsMHgwMywweGIwLDB4MDAsMHhhZiwweGI1LDB4MDAsMHgyNCwweGFmLDB4YjQsMHgwMCwweDIwLAotMHhhZiwweGIyLDB4MDAsMHgxOCwweGFmLDB4YjAsMHgwMCwweDEwLDB4YWYsMHhiZiwweDAwLDB4MzAsMHgwMCwweDgzLDB4ODAsMHgyMSwKLTB4YWYsMHhiNywweDAwLDB4MmMsMHhhZiwweGI2LDB4MDAsMHgyOCwweGFmLDB4YjMsMHgwMCwweDFjLDB4YWYsMHhiMSwweDAwLDB4MTQsCi0weGFjLDB4YTIsMHgwMCwweDAwLDB4OGUsMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgyMSwweDI2LDB4MTAsMHgwMCwweDA4LAotMHgwMCwweDA5LDB4YTYsMHgwMiwweDEyLDB4ODAsMHgwMCwweDEzLDB4MDAsMHgwMCwweGE4LDB4MjEsMHgyNCwweDEzLDB4MDAsMHgwMiwKLTB4M2MsMHgxNiwweDAwLDB4ZmYsMHgzYywweDE3LDB4ZmYsMHgwMCwweDhlLDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDksMHgxMiwweDAyLDB4MjQsMHg0MiwweDAwLDB4MDIsMHgzMSwweDI1LDB4MDAsMHhmZiwweDEwLDB4YjMsMHgwMCwweDc2LAotMHgzMCwweDUxLDB4MDAsMHhmZiwweDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhhMiwweDAwLDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHg1MSwweDEwLDB4MjEsMHgzMCwweDUyLDB4ZmYsMHhmZiwweDAyLDB4NTQsMHgxOCwweDJiLDB4MTQsMHg2MCwweGZmLDB4ZjIsCi0weDAyLDB4MTEsMHg4MCwweDIxLDB4MTIsMHhhMCwweDAwLDB4MGEsMHgzYywweDAyLDB4YjAsMHgwNiwweDM0LDB4NDIsMHg4MCwweDE4LAotMHg4YywweDQzLDB4MDAsMHgwMCwweDNjLDB4MDQsMHgwZiwweDAwLDB4M2MsMHgwMiwweDA0LDB4MDAsMHgwMCwweDY0LDB4MTgsMHgyNCwKLTB4MTAsMHg2MiwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwNCwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhmLDB4YmYsMHgwMCwweDMwLDB4N2IsMHhiNiwweDAxLDB4N2MsMHg3YiwweGI0LDB4MDEsMHgzYywweDdiLDB4YjIsMHgwMCwweGZjLAotMHg3YiwweGIwLDB4MDAsMHhiYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MzgsMHg4ZSwweDA5LDB4MDAsMHgwNCwKLTB4MjQsMHgxNSwweDAwLDB4MDEsMHg4ZSwweDA2LDB4MDAsMHgwYywweDAwLDB4MDksMHgxMSwweDQyLDB4MDAsMHgwOSwweDE4LDB4YzIsCi0weDMwLDB4NDgsMHgwMCwweDAzLDB4MDAsMHgwOSwweDE0LDB4MDIsMHgzMCwweDZjLDB4MDAsMHgwMywweDAwLDB4MDksMHgyNiwweDAyLAotMHgxMSwweDE1LDB4MDAsMHg0NSwweDMwLDB4NDMsMHgwMCwweDBmLDB4MjksMHgwMiwweDAwLDB4MDIsMHgxNCwweDQwLDB4MDAsMHgyNiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweDEzLDB4MDAsMHgwZiwweDAwLDB4MDAsMHgzOCwweDIxLDB4MDAsMHgwNywweDIyLDB4MDIsCi0weDMwLDB4ODQsMHhmZiwweDAwLDB4M2MsMHgwMywweDAwLDB4ZmYsMHgwMCwweDA3LDB4MmUsMHgwMiwweDAwLDB4MDcsMHgxMiwweDAwLAotMHgwMCwweDQzLDB4MTAsMHgyNCwweDAwLDB4YTQsMHgyOCwweDI1LDB4MDAsMHhhMiwweDI4LDB4MjUsMHgwMCwweDA3LDB4MWUsMHgwMCwKLTB4MDAsMHhhMywweDI4LDB4MjUsMHgwYywweDAwLDB4MDEsMHg5MiwweDAxLDB4MjAsMHgyMCwweDIxLDB4MDgsMHgwMCwweDAzLDB4YTUsCi0weDAyLDB4NTEsMHgxMCwweDIxLDB4MTEsMHg5NSwweDAwLDB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ODgsMHgwMCwweDA3LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgxMCwweDgwLDB4MjcsMHg4MywweDhiLDB4NzAsMHgwMCwweDQzLDB4MTAsMHgyMSwKLTB4OGMsMHg0NywweDAwLDB4MTgsMHgwOCwweDAwLDB4MDMsMHhjYywweDAwLDB4MDcsMHgyMiwweDAyLDB4MDAsMHgwNCwweDEwLDB4NDAsCi0weDI3LDB4ODMsMHg4YiwweDc4LDB4MDAsMHg0MywweDEwLDB4MjEsMHg5NCwweDQ3LDB4MDAsMHgwMiwweDA4LDB4MDAsMHgwMywweGNjLAotMHgwMCwweDA3LDB4MjIsMHgwMiwweDI3LDB4ODIsMHg4YiwweDcwLDB4MDAsMHg4MiwweDEwLDB4MjEsMHg5MCwweDQ3LDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDAzLDB4Y2MsMHgwMCwweDA3LDB4MjIsMHgwMiwweDE1LDB4MDAsMHhmZiwweGRjLDB4MDAsMHgwMCwweDM4LDB4MjEsCi0weDEwLDB4NzUsMHgwMCwweDA1LDB4MDAsMHg4MCwweDM4LDB4MjEsMHgwMCwweDY1LDB4MTgsMHgyNiwweDI0LDB4ODIsMHgwMSwweDAwLAotMHgwMCwweDAwLDB4MzgsMHgyMSwweDAwLDB4NDMsMHgzOCwweDBhLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMSwweDgyLDB4MDAsMHgwZSwKLTB4M2MsMHgwMiwweGIwLDB4MDMsMHgyNCwweDAyLDB4MDAsMHgwMiwweDExLDB4ODIsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNjLDB4MDIsMHhiMCwweDAzLDB4MDAsMHhlMiwweDEwLDB4MjEsMHg4YywweDQ3LDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMywweGNjLAotMHgwMCwweDA3LDB4MjIsMHgwMiwweDNjLDB4MDIsMHhiMCwweDAzLDB4MDAsMHhlMiwweDEwLDB4MjEsMHg5NCwweDQzLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDAzLDB4Y2IsMHgzMCwweDY3LDB4ZmYsMHhmZiwweDAwLDB4ZTIsMHgxMCwweDIxLDB4OTAsMHg0MywweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgwMywweGNiLDB4MzAsMHg2NywweDAwLDB4ZmYsMHgzMCwweDYyLDB4MDAsMHgwMywweDAwLDB4MDIsMHgxMiwweDAwLAotMHgxMSwweDk1LDB4MDAsMHgwNywweDAwLDB4NDQsMHgzOCwweDIxLDB4MTEsMHg5MywweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDAzLDB4ZmQsMHgzYywweDAyLDB4YjAsMHgwYSwweDA4LDB4MDAsMHgwNCwweDAyLDB4M2MsMHgwMiwweGIwLDB4MGEsCi0weDA4LDB4MDAsMHgwNCwweDA2LDB4M2MsMHgwMiwweGIwLDB4MGEsMHg4ZSwweDA5LDB4MDAsMHgwNCwweDhlLDB4MDIsMHgwMCwweDA4LAotMHg4ZSwweDAzLDB4MDAsMHgwYywweDAwLDB4MDksMHg0MSwweDQyLDB4MDAsMHgwMiwweDIyLDB4MDIsMHgwMCwweDAzLDB4M2EsMHgwMiwKLTB4MzAsMHg4NCwweGZmLDB4MDAsMHgzMCwweGU3LDB4ZmYsMHgwMCwweDAwLDB4MDIsMHg1ZSwweDAyLDB4MDAsMHgwMiwweDMyLDB4MDAsCi0weDAwLDB4MDMsMHg1NiwweDAyLDB4MDAsMHgwMywweDJhLDB4MDAsMHgwMSwweDY0LDB4NTgsMHgyNSwweDAwLDB4ZDYsMHgzMCwweDI0LAotMHgwMSwweDQ3LDB4NTAsMHgyNSwweDAwLDB4MDIsMHgxNiwweDAwLDB4MDAsMHhiNiwweDI4LDB4MjQsMHgwMCwweDAzLDB4MWUsMHgwMCwKLTB4MDEsMHg2NiwweDU4LDB4MjUsMHgwMSwweDQ1LDB4NTAsMHgyNSwweDAwLDB4NTcsMHgxMCwweDI0LDB4MDAsMHg3NywweDE4LDB4MjQsCi0weDAxLDB4NjIsMHgzOCwweDI1LDB4MDEsMHg0MywweDMwLDB4MjUsMHgwMCwweDA5LDB4MTAsMHhjMiwweDAwLDB4MDksMHgxYywweDAyLAotMHgzMSwweDA4LDB4MDAsMHgwMywweDMwLDB4NGMsMHgwMCwweDAzLDB4MzAsMHg2MywweDAwLDB4MGYsMHgwMCwweDA5LDB4MjYsMHgwMiwKLTB4MDAsMHhlMCwweDU4LDB4MjEsMHgxNSwweDAwLDB4MDAsMHgyOCwweDAwLDB4YzAsMHg1MCwweDIxLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDEwLDB4NjIsMHgwMCwweDA2LDB4MDAsMHg4MCwweDI4LDB4MjEsMHgyNCwweDAyLDB4MDAsMHgwMywweDE0LDB4NjIsMHhmZiwweDY5LAotMHgwMiwweDUxLDB4MTAsMHgyMSwweDI0LDB4ODUsMHgwMSwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMSwweDgyLDB4MDAsMHgxNSwKLTB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMSwweDgyLDB4MDAsMHgwYSwweDNjLDB4MDMsMHhiMCwweDAzLDB4MDAsMHhhMywweDE4LDB4MjEsCi0weDhjLDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwYSwweDIwLDB4MjcsMHgwMSwweDZhLDB4MjgsMHgyNCwweDAwLDB4NDQsMHgxMCwweDI0LAotMHgwMCwweDQ1LDB4MTAsMHgyNSwweGFjLDB4NjIsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAzLDB4YTUsMHgwMiwweDUxLDB4MTAsMHgyMSwKLTB4MDAsMHhhMywweDE4LDB4MjEsMHg5NCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MGEsMHgyMCwweDI3LDB4MDEsMHg2YSwweDI4LDB4MjQsCi0weDAwLDB4NDQsMHgxMCwweDI0LDB4MDAsMHg0NSwweDEwLDB4MjUsMHhhNCwweDYyLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMywweGE1LAotMHgwMiwweDUxLDB4MTAsMHgyMSwweDNjLDB4MDMsMHhiMCwweDAzLDB4MDAsMHhhMywweDE4LDB4MjEsMHg5MCwweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwYSwweDIwLDB4MjcsMHgwMSwweDZhLDB4MjgsMHgyNCwweDAwLDB4NDQsMHgxMCwweDI0LDB4MDAsMHg0NSwweDEwLDB4MjUsCi0weDA4LDB4MDAsMHgwMywweGE0LDB4YTAsMHg2MiwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDExLDB4MDIsMHgwMCwweDIxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4MTMsMHhmZiwweDQyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweDgyLDB4MDAsMHgxNywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweDg4LDB4MDAsMHgwYiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjcsMHg4MywweDhiLDB4NzAsCi0weDAwLDB4MDQsMHgyMCwweDgwLDB4MDAsMHg4MywweDIwLDB4MjEsMHg4YywweDgyLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgxOCwweDI3LAotMHgwMCwweGU2LDB4MjgsMHgyNCwweDAwLDB4NDMsMHgxMCwweDI0LDB4MDAsMHg0NSwweDEwLDB4MjUsMHgwOCwweDAwLDB4MDMsMHhhNCwKLTB4YWMsMHg4MiwweDAwLDB4MTgsMHgyNywweDgzLDB4OGIsMHg3OCwweDAwLDB4MDQsMHgyMCwweDQwLDB4MDAsMHg4MywweDIwLDB4MjEsCi0weDk0LDB4ODIsMHgwMCwweDAyLDB4MDAsMHgwNiwweDE4LDB4MjcsMHgwMCwweGU2LDB4MjgsMHgyNCwweDAwLDB4NDMsMHgxMCwweDI0LAotMHgwMCwweDQ1LDB4MTAsMHgyNSwweDA4LDB4MDAsMHgwMywweGE0LDB4YTQsMHg4MiwweDAwLDB4MDIsMHgyNywweDgzLDB4OGIsMHg3MCwKLTB4MDAsMHg4MywweDE4LDB4MjEsMHg5MCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgyMCwweDI3LDB4MDgsMHgwMCwweDA0LDB4NWEsCi0weDAwLDB4ZTYsMHgyOCwweDI0LDB4MzAsMHg2MiwweDAwLDB4MDcsMHgwMCwweDAyLDB4MTIsMHgwMCwweDExLDB4ODgsMHgwMCwweDBmLAotMHgwMCwweDQ0LDB4MTAsMHgyMSwweDExLDB4OTMsMHgwMCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAzLDB4YjAsMHgwYSwKLTB4MDAsMHg0MywweDE4LDB4MjEsMHg4YywweDYyLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgyMCwweDI3LDB4MDgsMHgwMCwweDA0LDB4NDcsCi0weDAwLDB4ZTYsMHgyOCwweDI0LDB4M2MsMHgwMywweGIwLDB4MGEsMHgwMCwweDQzLDB4MTgsMHgyMSwweDk0LDB4NjIsMHgwMCwweDAwLAotMHgwMCwweDA2LDB4MjAsMHgyNywweDA4LDB4MDAsMHgwNCwweDUwLDB4MDAsMHhlNiwweDI4LDB4MjQsMHgzYywweDAzLDB4YjAsMHgwYSwKLTB4MDgsMHgwMCwweDA0LDB4N2QsMHgwMCwweDQzLDB4MTgsMHgyMSwweDk3LDB4ODUsMHg4YiwweGM0LDB4M2MsMHgwNywweGIwLDB4MDIsCi0weDNjLDB4MDQsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgwMCwweGE3LDB4MjgsMHgyMSwweDM0LDB4ODQsMHgwMCwweDIwLAotMHgyNCwweDQyLDB4MTIsMHg1OCwweDI0LDB4MDMsMHhmZiwweDgwLDB4YWMsMHg4MiwweDAwLDB4MDAsMHhhMCwweGEzLDB4MDAsMHgwNywKLTB4OTcsMHg4MiwweDhiLDB4YzYsMHg5NywweDg1LDB4OGIsMHhjNCwweDNjLDB4MDYsMHhiMCwweDA2LDB4MzAsMHg0MiwweGZmLDB4ZjgsCi0weDI0LDB4NDIsMHgwMCwweDEwLDB4MDAsMHhhMiwweDEwLDB4MjEsMHgzMCwweDQyLDB4MGYsMHhmZiwweDI0LDB4NDQsMHgwMCwweDA4LAotMHgzMCwweDg0LDB4MGYsMHhmZiwweDAwLDB4MDUsMHgyOCwweGMyLDB4M2MsMHgwMywweDAwLDB4NDAsMHgwMCwweGEzLDB4MjgsMHgyNSwKLTB4MDAsMHg4NywweDIwLDB4MjEsMHgzNCwweGM2LDB4ODAsMHgxOCwweGFjLDB4YzUsMHgwMCwweDAwLDB4YWYsMHg4NCwweDhiLDB4YzAsCi0weGE3LDB4ODIsMHg4YiwweGM0LDB4YTcsMHg4MCwweDhiLDB4YzYsMHhhZiwweDgwLDB4OGIsMHhjOCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YTUsMHgwMCwweGZmLDB4MzAsMHg4NCwweDAwLDB4ZmYsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MDAsMHhlMCwweDQ4LDB4MjEsMHgzMCwweGM2LDB4MDAsMHhmZiwweDhmLDB4YTcsMHgwMCwweDEwLDB4MTAsMHg4MiwweDAwLDB4MDcsCi0weDAwLDB4YTAsMHg0MCwweDIxLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgxMCwweDgyLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHhhOCwweDAxLDB4MDAsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHgwMCwweDA3LDB4MjAsMHgyNywweDAxLDB4MjcsMHgyOCwweDI0LDB4MTAsMHhjMiwweDAwLDB4MTQsCi0weDAxLDB4MDMsMHgxOCwweDIxLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweGMyLDB4MDAsMHgwOSwweDAwLDB4MDcsMHg1MCwweDI3LAotMHgzYywweDAzLDB4YjAsMHgwMywweDAxLDB4MDMsMHgxOCwweDIxLDB4OGMsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHg0YSwweDEwLDB4MjQsMHgwMCwweDQ1LDB4MTAsMHgyNSwweDA4LDB4MDAsMHgwNCwweGUxLDB4YWMsMHg2MiwweDAwLDB4MDAsCi0weDNjLDB4MDMsMHhiMCwweDAzLDB4MDEsMHgwMywweDE4LDB4MjEsMHg5NCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDRhLDB4MTAsMHgyNCwweDAwLDB4NDUsMHgxMCwweDI1LDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhNCwweDYyLDB4MDAsMHgwMCwKLTB4OTAsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgxMCwweDI0LDB4MDAsMHg0NSwweDEwLDB4MjUsCi0weGEwLDB4NjIsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4ODQsMHgwMCwweDA3LAotMHgwMCwweDA0LDB4MjIsMHgwMCwweDMwLDB4YTUsMHgwMCwweGZmLDB4MDAsMHg4NSwweDI4LDB4MjEsMHgzYywweDAyLDB4YjAsMHgwYSwKLTB4MDAsMHhhMiwweDQwLDB4MjEsMHgzMCwweGM2LDB4MDAsMHhmZiwweDI0LDB4MDIsMHgwMCwweDAxLDB4OGYsMHhhNCwweDAwLDB4MTAsCi0weDEwLDB4YzIsMHgwMCwweDE0LDB4MjQsMHgwMiwweDAwLDB4MDIsMHgwMCwweDA0LDB4NTAsMHgyNywweDEwLDB4YzIsMHgwMCwweDA5LAotMHgwMCwweGU0LDB4NDgsMHgyNCwweDNjLDB4MDMsMHhiMCwweDBhLDB4MDAsMHhhMywweDE4LDB4MjEsMHg4YywweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDRhLDB4MTAsMHgyNCwweDAwLDB4NDksMHgxMCwweDI1LDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weGFjLDB4NjIsMHgwMCwweDAwLDB4M2MsMHgwMywweGIwLDB4MGEsMHgwMCwweGEzLDB4MTgsMHgyMSwweDk0LDB4NjIsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGEsMHgxMCwweDI0LDB4MDAsMHg0OSwweDEwLDB4MjUsMHgwMywweGUwLDB4MDAsMHgwOCwKLTB4YTQsMHg2MiwweDAwLDB4MDAsMHg5MSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgxOCwweDI3LDB4MDAsMHhlNCwweDIwLDB4MjQsCi0weDAwLDB4NDMsMHgxMCwweDI0LDB4MDAsMHg0NCwweDEwLDB4MjUsMHgwMywweGUwLDB4MDAsMHgwOCwweGExLDB4MDIsMHgwMCwweDAwLAotMHgzMCwweGE5LDB4MDAsMHhmZiwweDI3LDB4ODMsMHg4YiwweDcwLDB4MzAsMHg4NSwweDAwLDB4ZmYsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MDAsMHgwNywweDUwLDB4MjcsMHgwMCwweGM3LDB4NDAsMHgyNCwweDExLDB4MjIsMHgwMCwweDE3LDB4MDAsMHhhMywweDE4LDB4MjEsCi0weDAwLDB4MDUsMHgyMCwweDQwLDB4MjcsMHg4MiwweDhiLDB4NzAsMHgwMCwweDA1LDB4MjgsMHg4MCwweDI3LDB4ODMsMHg4YiwweDc4LAotMHgwMCwweDgzLDB4NTAsMHgyMSwweDAwLDB4YTIsMHgyMCwweDIxLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgwMCwweDA3LDB4NDAsMHgyNywKLTB4MTEsMHgyMiwweDAwLDB4MDcsMHgwMCwweGM3LDB4MjgsMHgyNCwweDhjLDB4ODIsMHgwMCwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4NDgsMHgxMCwweDI0LDB4MDAsMHg0NSwweDEwLDB4MjUsMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4ODIsMHgwMCwweDE4LAotMHg5NSwweDQyLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDEwLDB4MjQsMHgwMCwweDQ1LDB4MTAsMHgyNSwKLTB4MDMsMHhlMCwweDAwLDB4MDgsMHhhNSwweDQyLDB4MDAsMHgwMiwweDkwLDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4NGEsMHgxMCwweDI0LDB4MDAsMHg0OCwweDEwLDB4MjUsMHgwMywweGUwLDB4MDAsMHgwOCwweGEwLDB4NjIsMHgwMCwweDAwLAotMHgwMCwweDA0LDB4MzIsMHgwMiwweDMwLDB4YzYsMHhmZiwweDAwLDB4MDAsMHgwNCwweDE2LDB4MDIsMHgwMCwweDA0LDB4MWEsMHgwMCwKLTB4M2MsMHgwNSwweDAwLDB4ZmYsMHgwMCwweDY1LDB4MTgsMHgyNCwweDAwLDB4NDYsMHgxMCwweDI1LDB4MDAsMHg0MywweDEwLDB4MjUsCi0weDAwLDB4MDQsMHgyNiwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDQ0LDB4MTAsMHgyNSwweDNjLDB4MDMsMHhiMCwweDAzLAotMHgzYywweDAyLDB4ODAsMHgwMCwweDI3LDB4YmQsMHhmZiwweGU4LDB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4MTQsMHhkYywKLTB4M2MsMHgwNCwweGIwLDB4MDMsMHhhZiwweGJmLDB4MDAsMHgxNCwweGFjLDB4NjIsMHgwMCwweDAwLDB4YWYsMHhiMCwweDAwLDB4MTAsCi0weDM0LDB4ODQsMHgwMCwweDJjLDB4OGMsMHg4MywweDAwLDB4MDAsMHhhNywweDgwLDB4YmMsMHgwMCwweDAwLDB4MDMsMHgxMiwweDAyLAotMHgwMCwweDAzLDB4MmQsMHgwMiwweDMwLDB4NDIsMHgwZiwweGZmLDB4YTMsMHg4MywweGJjLDB4MDgsMHhhNywweDg1LDB4YmMsMHgwYywKLTB4YTcsMHg4MiwweGJjLDB4MGEsMHhhNywweDgwLDB4YmMsMHgwMiwweGE3LDB4ODAsMHhiYywweDA0LDB4YTcsMHg4MCwweGJjLDB4MDYsCi0weDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDA1LDB4MDAsMHgzYywweDA1LDB4MDgsMHgwMCwweDAwLDB4NDUsMHgyOCwweDI1LAotMHgyNCwweDA0LDB4MDUsMHgwMCwweDBjLDB4MDAsMHgwNiwweGJmLDB4MDAsMHg0MCwweDgwLDB4MjEsMHgzYywweDAyLDB4ZjcsMHhmZiwKLTB4MzQsMHg0MiwweGZmLDB4ZmYsMHgwMiwweDAyLDB4ODAsMHgyNCwweDAyLDB4MDAsMHgyOCwweDIxLDB4MGMsMHgwMCwweDA2LDB4YmYsCi0weDI0LDB4MDQsMHgwNSwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzYywweDAzLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMSwweDA4LAotMHgzNCwweDYzLDB4MDEsMHgxOCwweDhjLDB4NDUsMHgwMCwweDAwLDB4OGMsMHg2NCwweDAwLDB4MDAsMHgzYywweDAyLDB4MDAsMHgwZiwKLTB4M2MsMHgwMywweDAwLDB4NGMsMHgzMCwweDg0LDB4MDIsMHgwMCwweDM0LDB4NjMsMHg0YiwweDQwLDB4YWYsMHg4NSwweGJjLDB4MTAsCi0weDEwLDB4ODAsMHgwMCwweDA2LDB4MzQsMHg0MiwweDQyLDB4NDAsMHhhZiwweDgzLDB4YmMsMHgxNCwweDhmLDB4YmYsMHgwMCwweDE0LAotMHg4ZiwweGIwLDB4MDAsMHgxMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsMHhhZiwweDgyLDB4YmMsMHgxNCwKLTB4MDgsMHgwMCwweDA1LDB4NjcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsCi0weDI3LDB4YmQsMHhmZiwweGM4LDB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4MTUsMHhiOCwweDMwLDB4ODQsMHgwMCwweGZmLAotMHhhZiwweGJmLDB4MDAsMHgzMCwweGFmLDB4YjcsMHgwMCwweDJjLDB4YWYsMHhiNiwweDAwLDB4MjgsMHhhZiwweGI1LDB4MDAsMHgyNCwKLTB4YWYsMHhiNCwweDAwLDB4MjAsMHhhZiwweGIzLDB4MDAsMHgxYywweGFmLDB4YjIsMHgwMCwweDE4LDB4YWYsMHhiMSwweDAwLDB4MTQsCi0weGFmLDB4YjAsMHgwMCwweDEwLDB4YWMsMHg2MiwweDAwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgxYywweDI0LDB4MDIsMHgwMCwweDAyLAotMHgxMCwweDgyLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHhiZiwweDAwLDB4MzAsMHg3YiwweGI2LDB4MDEsMHg3YywKLTB4N2IsMHhiNCwweDAxLDB4M2MsMHg3YiwweGIyLDB4MDAsMHhmYywweDdiLDB4YjAsMHgwMCwweGJjLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDI3LDB4YmQsMHgwMCwweDM4LDB4YTcsMHg4MCwweGJjLDB4MDAsMHhhNywweDgwLDB4YmMsMHgwMiwweGE3LDB4ODAsMHhiYywweDA0LAotMHhhNywweDgwLDB4YmMsMHgwNiwweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDA1LDB4MDAsMHgzYywweDA1LDB4MDgsMHgwMCwKLTB4MDAsMHg0NSwweDI4LDB4MjUsMHgyNCwweDA0LDB4MDUsMHgwMCwweDBjLDB4MDAsMHgwNiwweGJmLDB4MDAsMHg0MCwweDgwLDB4MjEsCi0weDNjLDB4MDUsMHhmNywweGZmLDB4MzQsMHhhNSwweGZmLDB4ZmYsMHgwMiwweDA1LDB4MjgsMHgyNCwweDBjLDB4MDAsMHgwNiwweGJmLAotMHgyNCwweDA0LDB4MDUsMHgwMCwweDA4LDB4MDAsMHgwNSwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MDYsMHhkMSwKLTB4MjQsMHgwNCwweDA1LDB4YTAsMHgyNCwweDA0LDB4MDUsMHhhNCwweDBjLDB4MDAsMHgwNiwweGQxLDB4MDAsMHgwMiwweGJjLDB4MDIsCi0weDI0LDB4MDQsMHgwNSwweGE4LDB4MDAsMHgwMiwweGI0LDB4MDIsMHgwYywweDAwLDB4MDYsMHhkMSwweDMwLDB4NTUsMHhmZiwweGZmLAotMHgwMCwweDQwLDB4ODAsMHgyMSwweDk3LDB4ODQsMHhiYywweDAwLDB4OTcsMHg4MiwweGJjLDB4MDIsMHg5NywweDgzLDB4YmMsMHgwNiwKLTB4MDIsMHhlNCwweDIwLDB4MjMsMHgwMiwweGEyLDB4MTAsMHgyMywweDAwLDB4ODIsMHgyMCwweDIxLDB4OTcsMHg4MiwweGJjLDB4MDQsCi0weDMyLDB4MTQsMHhmZiwweGZmLDB4MDIsMHg4MywweDE4LDB4MjMsMHgwMiwweGMyLDB4MTAsMHgyMywweDAwLDB4ODIsMHgyMCwweDIxLAotMHg5MywweDgyLDB4YmMsMHgwOCwweDAwLDB4ODMsMHgyMCwweDIxLDB4MzAsMHg4NCwweGZmLDB4ZmYsMHgwMCwweDgyLDB4MTAsMHgyYiwKLTB4MTQsMHg0MCwweDAwLDB4YWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk3LDB4ODIsMHhiYywweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4NDQsMHgxMCwweDJiLDB4MTQsMHg0MCwweDAwLDB4N2YsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk3LDB4ODIsMHhiYywweDBhLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgxMCwweDJiLDB4MTAsMHg0MCwweDAwLDB4M2EsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGMsMHgwMCwweDA2LDB4ZDEsMHgyNCwweDA0LDB4MDQsMHg1MCwweDMwLDB4NTEsMHgwMCwweDdmLDB4MDAsMHg0MCwweDgwLDB4MjEsCi0weDJlLDB4MjIsMHgwMCwweDMyLDB4MTAsMHg0MCwweDAwLDB4MTMsMHgyNCwweDAyLDB4MDAsMHgyMCwweDEyLDB4MjIsMHgwMCwweDE3LAotMHgyNCwweDAyLDB4ZmYsMHg4MCwweDAyLDB4MDIsMHgxMCwweDI0LDB4MjYsMHgzMSwweDAwLDB4MDEsMHgwMCwweDUxLDB4ODAsMHgyNSwKLTB4MDIsMHgwMCwweDI4LDB4MjEsMHgwYywweDAwLDB4MDYsMHhiZiwweDI0LDB4MDQsMHgwNCwweDUwLDB4MDIsMHgwMCwweDI4LDB4MjEsCi0weDBjLDB4MDAsMHgwNiwweGJmLDB4MjQsMHgwNCwweDA0LDB4NTgsMHgwMiwweDAwLDB4MjgsMHgyMSwweDBjLDB4MDAsMHgwNiwweGJmLAotMHgyNCwweDA0LDB4MDQsMHg2MCwweDAyLDB4MDAsMHgyOCwweDIxLDB4MjQsMHgwNCwweDA0LDB4NjgsMHgwYywweDAwLDB4MDYsMHhiZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhNywweDk3LDB4YmMsMHgwMCwweGE3LDB4OTUsMHhiYywweDAyLDB4YTcsMHg5NiwweGJjLDB4MDQsCi0weGE3LDB4OTQsMHhiYywweDA2LDB4MDgsMHgwMCwweDA1LDB4ODIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwNiwweGQxLAotMHgyNCwweDA0LDB4MDIsMHgwOCwweDNjLDB4MDQsMHgwMCwweGMwLDB4MDAsMHg0MCwweDI4LDB4MjEsMHgwMCwweDQ0LDB4MTAsMHgyNCwKLTB4MDAsMHgwMiwweDE1LDB4ODIsMHgyNCwweDAzLDB4MDAsMHgwMywweDEwLDB4NDMsMHgwMCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNjLDB4MDIsMHhmZiwweDNmLDB4MzQsMHg0MiwweGZmLDB4ZmYsMHgwMCwweGEyLDB4MTAsMHgyNCwweDAwLDB4NDQsMHgyOCwweDI1LAotMHgwYywweDAwLDB4MDYsMHhiZiwweDI0LDB4MDQsMHgwMiwweDA4LDB4MGMsMHgwMCwweDA2LDB4ZDEsMHgyNCwweDA0LDB4MDIsMHgyYywKLTB4MDAsMHg0MCwweDkwLDB4MjEsMHgzYywweDAyLDB4ZmYsMHhmZiwweDM0LDB4NDIsMHgzZiwweGZmLDB4MDIsMHg0MiwweDkwLDB4MjQsCi0weDAyLDB4NDAsMHgyOCwweDIxLDB4MGMsMHgwMCwweDA2LDB4YmYsMHgyNCwweDA0LDB4MDIsMHgyYywweDA4LDB4MDAsMHgwNSwweGM5LAotMHgyNCwweDAyLDB4ZmYsMHg4MCwweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDA0LDB4NTAsMHgzMCwweDUxLDB4MDAsMHg3ZiwKLTB4MjQsMHgwMiwweDAwLDB4MjAsMHgxNiwweDIyLDB4ZmYsMHhkYiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDA2LDB4ZDEsCi0weDI0LDB4MDQsMHgwMiwweDJjLDB4MzQsMHg1MiwweDQwLDB4MDAsMHgwMiwweDQwLDB4MjgsMHgyMSwweDBjLDB4MDAsMHgwNiwweGJmLAotMHgyNCwweDA0LDB4MDIsMHgyYywweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDAyLDB4NTgsMHgyNCwweDA0LDB4MDIsMHg1YywKLTB4MGMsMHgwMCwweDA2LDB4ZDEsMHgwMCwweDAyLDB4OWUsMHgwMiwweDMwLDB4NDMsMHgwMCwweGZmLDB4MDAsMHgxMywweDEyLDB4MDAsCi0weDAwLDB4NDMsMHgxMCwweDI1LDB4MmMsMHg0MywweDAwLDB4MDQsMHgxNCwweDYwLDB4MDAsMHgxZCwweDJjLDB4NDIsMHgwMCwweDExLAotMHgxMCwweDQwLDB4MDAsMHgwYiwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGZmLDB4ZmYsMHgzNCwweDQyLDB4M2YsMHhmZiwKLTB4MDIsMHg0MiwweDkwLDB4MjQsMHgwMiwweDQwLDB4MjgsMHgyMSwweDI0LDB4MDQsMHgwMiwweDJjLDB4MGMsMHgwMCwweDA2LDB4YmYsCi0weDM2LDB4NTIsMHg4MCwweDAwLDB4MDIsMHg0MCwweDI4LDB4MjEsMHgwOCwweDAwLDB4MDUsMHhkNywweDI0LDB4MDQsMHgwMiwweDJjLAotMHgwYywweDAwLDB4MDYsMHhkMSwweDI0LDB4MDQsMHgwMiwweDA4LDB4M2MsMHgwNCwweDAwLDB4YzAsMHgwMCwweDQwLDB4MjgsMHgyMSwKLTB4MDAsMHg0NCwweDEwLDB4MjQsMHgwMCwweDAyLDB4MTUsMHg4MiwweDI0LDB4MDMsMHgwMCwweDAyLDB4MTQsMHg0MywweGZmLDB4ZWUsCi0weDNjLDB4MDIsMHhmZiwweDNmLDB4MzQsMHg0MiwweGZmLDB4ZmYsMHgwMCwweGEyLDB4MTAsMHgyNCwweDAwLDB4NDQsMHgyOCwweDI1LAotMHgwYywweDAwLDB4MDYsMHhiZiwweDI0LDB4MDQsMHgwMiwweDA4LDB4MDgsMHgwMCwweDA2LDB4MTMsMHgzYywweDAyLDB4ZmYsMHhmZiwKLTB4MGMsMHgwMCwweDA2LDB4ZDEsMHgyNCwweDA0LDB4MDIsMHgwOCwweDAwLDB4NDAsMHgyOCwweDIxLDB4MDAsMHgwMiwweDE1LDB4ODIsCi0weDMwLDB4NDIsMHgwMCwweDAzLDB4MjQsMHgwMywweDAwLDB4MDMsMHgxNCwweDQzLDB4ZmYsMHhkZiwweDNjLDB4MDIsMHhmZiwweDNmLAotMHgzNCwweDQyLDB4ZmYsMHhmZiwweDAwLDB4YTIsMHgxMCwweDI0LDB4M2MsMHgwMywweDAwLDB4ODAsMHgwOCwweDAwLDB4MDYsMHgyOCwKLTB4MDAsMHg0MywweDI4LDB4MjUsMHgwYywweDAwLDB4MDYsMHhkMSwweDI0LDB4MDQsMHgwNCwweDUwLDB4MzAsMHg1MSwweDAwLDB4N2YsCi0weDAwLDB4NDAsMHg4MCwweDIxLDB4MmUsMHgyMiwweDAwLDB4MzIsMHgxMCwweDQwLDB4ZmYsMHg5YSwweDI0LDB4MDIsMHgwMCwweDIwLAotMHgxMiwweDIyLDB4MDAsMHgwNCwweDI0LDB4MDIsMHhmZiwweDgwLDB4MDIsMHgwMiwweDEwLDB4MjQsMHgwOCwweDAwLDB4MDUsMHhjYiwKLTB4MjYsMHgzMSwweDAwLDB4MDIsMHgwYywweDAwLDB4MDYsMHhkMSwweDI0LDB4MDQsMHgwMiwweDA4LDB4M2MsMHgwNCwweDAwLDB4YzAsCi0weDAwLDB4NDAsMHgyOCwweDIxLDB4MDAsMHg0NCwweDEwLDB4MjQsMHgwMCwweDAyLDB4MTUsMHg4MiwweDI0LDB4MDMsMHgwMCwweDAzLAotMHgxMCwweDQzLDB4MDAsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGZmLDB4M2YsMHgzNCwweDQyLDB4ZmYsMHhmZiwKLTB4MDAsMHhhMiwweDEwLDB4MjQsMHgwMCwweDQ0LDB4MjgsMHgyNSwweDBjLDB4MDAsMHgwNiwweGJmLDB4MjQsMHgwNCwweDAyLDB4MDgsCi0weDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDAyLDB4MmMsMHgwMCwweDQwLDB4OTAsMHgyMSwweDNjLDB4MDIsMHhmZiwweGZmLAotMHgzNCwweDQyLDB4M2YsMHhmZiwweDAyLDB4NDIsMHg5MCwweDI0LDB4MDIsMHg0MCwweDI4LDB4MjEsMHgwYywweDAwLDB4MDYsMHhiZiwKLTB4MjQsMHgwNCwweDAyLDB4MmMsMHgwOCwweDAwLDB4MDYsMHg0MiwweDI0LDB4MDIsMHhmZiwweDgwLDB4MGMsMHgwMCwweDA2LDB4ZDEsCi0weDI0LDB4MDQsMHgwNCwweDUwLDB4MDAsMHg0MCwweDgwLDB4MjEsMHgzMCwweDUxLDB4MDAsMHg3ZiwweDI0LDB4MDIsMHgwMCwweDIwLAotMHgxMiwweDIyLDB4MDAsMHgxZCwweDJlLDB4MjIsMHgwMCwweDIxLDB4MTQsMHg0MCwweGZmLDB4NzIsMHgyNCwweDAyLDB4ZmYsMHg4MCwKLTB4MDIsMHgwMiwweDEwLDB4MjQsMHgyNiwweDMxLDB4ZmYsMHhmZiwweDAwLDB4NTEsMHg4MCwweDI1LDB4MjQsMHgwNCwweDA0LDB4NTAsCi0weDBjLDB4MDAsMHgwNiwweGJmLDB4MDIsMHgwMCwweDI4LDB4MjEsMHgyNCwweDA0LDB4MDQsMHg1OCwweDBjLDB4MDAsMHgwNiwweGJmLAotMHgwMiwweDAwLDB4MjgsMHgyMSwweDI0LDB4MDQsMHgwNCwweDYwLDB4MGMsMHgwMCwweDA2LDB4YmYsMHgwMiwweDAwLDB4MjgsMHgyMSwKLTB4MDIsMHgwMCwweDI4LDB4MjEsMHgwYywweDAwLDB4MDYsMHhiZiwweDI0LDB4MDQsMHgwNCwweDY4LDB4MjQsMHgwMiwweDAwLDB4MjAsCi0weDE2LDB4MjIsMHhmZiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MDYsMHhkMSwweDI0LDB4MDQsMHgwMiwweDJjLAotMHgwMCwweDQwLDB4OTAsMHgyMSwweDNjLDB4MDIsMHhmZiwweGZmLDB4MzQsMHg0MiwweDNmLDB4ZmYsMHgwMiwweDQyLDB4MTAsMHgyNCwKLTB4MDgsMHgwMCwweDA2LDB4MTksMHgzNCwweDUyLDB4ODAsMHgwMCwweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDAyLDB4MmMsCi0weDM0LDB4NTIsMHg0MCwweDAwLDB4MDIsMHg0MCwweDI4LDB4MjEsMHgwYywweDAwLDB4MDYsMHhiZiwweDI0LDB4MDQsMHgwMiwweDJjLAotMHgwYywweDAwLDB4MDYsMHhkMSwweDI0LDB4MDQsMHgwMiwweDU4LDB4MjQsMHgwNCwweDAyLDB4NWMsMHgwYywweDAwLDB4MDYsMHhkMSwKLTB4MDAsMHgwMiwweDllLDB4MDIsMHgzMCwweDQzLDB4MDAsMHhmZiwweDAwLDB4MTMsMHgxMiwweDAwLDB4MDAsMHg0MywweDEwLDB4MjUsCi0weDJjLDB4NDMsMHgwMCwweDA0LDB4MTQsMHg2MCwweDAwLDB4MjAsMHgyYywweDQyLDB4MDAsMHgxMSwweDEwLDB4NDAsMHgwMCwweDBkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDIsMHhmZiwweGZmLDB4MzQsMHg0MiwweDNmLDB4ZmYsMHgwMiwweDQyLDB4OTAsMHgyNCwKLTB4MDIsMHg0MCwweDI4LDB4MjEsMHgyNCwweDA0LDB4MDIsMHgyYywweDBjLDB4MDAsMHgwNiwweGJmLDB4MzYsMHg1MiwweDgwLDB4MDAsCi0weDAyLDB4NDAsMHgyOCwweDIxLDB4MGMsMHgwMCwweDA2LDB4YmYsMHgyNCwweDA0LDB4MDIsMHgyYywweDA4LDB4MDAsMHgwNiwweDY2LAotMHgyZSwweDIyLDB4MDAsMHgyMSwweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDAyLDB4MDgsMHgzYywweDA0LDB4MDAsMHhjMCwKLTB4MDAsMHg0MCwweDI4LDB4MjEsMHgwMCwweDQ0LDB4MTAsMHgyNCwweDAwLDB4MDIsMHgxNSwweDgyLDB4MjQsMHgwMywweDAwLDB4MDIsCi0weDE0LDB4NDMsMHhmZiwweGVjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4ZmYsMHgzZiwweDM0LDB4NDIsMHhmZiwweGZmLAotMHgwMCwweGEyLDB4MTAsMHgyNCwweDAwLDB4NDQsMHgyOCwweDI1LDB4MGMsMHgwMCwweDA2LDB4YmYsMHgyNCwweDA0LDB4MDIsMHgwOCwKLTB4MDgsMHgwMCwweDA2LDB4OTYsMHgzYywweDAyLDB4ZmYsMHhmZiwweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDAyLDB4MDgsCi0weDAwLDB4NDAsMHgyOCwweDIxLDB4MDAsMHgwMiwweDE1LDB4ODIsMHgzMCwweDQyLDB4MDAsMHgwMywweDI0LDB4MDMsMHgwMCwweDAzLAotMHgxNCwweDQzLDB4ZmYsMHhkYywweDNjLDB4MDMsMHgwMCwweDgwLDB4M2MsMHgwMiwweGZmLDB4M2YsMHgzNCwweDQyLDB4ZmYsMHhmZiwKLTB4MDAsMHhhMiwweDEwLDB4MjQsMHgwOCwweDAwLDB4MDYsMHhhZSwweDAwLDB4NDMsMHgyOCwweDI1LDB4MzAsMHg4MywweDAwLDB4MDMsCi0weDAwLDB4MDQsMHgyMCwweDQwLDB4MDAsMHg4MywweDIwLDB4MjMsMHgzYywweDAyLDB4YjAsMHgwYSwweDAwLDB4ODIsMHgyMCwweDIxLAotMHgzYywweDA2LDB4MDAsMHgwMSwweGFjLDB4ODUsMHgwMCwweDAwLDB4MjQsMHgwNywweDAwLDB4MDEsMHgwMCwweDAwLDB4MjgsMHgyMSwKLTB4MzQsMHhjNiwweDg2LDB4OWYsMHg4YywweDgyLDB4MTAsMHgwMCwweDI0LDB4YTUsMHgwMCwweDAxLDB4MTAsMHg0NywweDAwLDB4MDMsCi0weDAwLDB4YzUsMHgxOCwweDJiLDB4MTAsMHg2MCwweGZmLDB4ZmIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4ODMsMHgwMCwweDAzLDB4MDAsMHgwNCwweDIwLDB4NDAsMHgzYywweDAyLDB4YjAsMHgwYSwKLTB4MDAsMHg4MywweDIwLDB4MjMsMHgwMCwweDgyLDB4MjAsMHgyMSwweDNjLDB4MDYsMHgwMCwweDAxLDB4MjQsMHgwMiwweGZmLDB4ZmYsCi0weGFjLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MjEsMHgyNCwweDA3LDB4MDAsMHgwMSwweDM0LDB4YzYsMHg4NiwweDlmLAotMHg4YywweDgyLDB4MTAsMHgwMCwweDI0LDB4YTUsMHgwMCwweDAxLDB4MTAsMHg0NywweDAwLDB4MDMsMHgwMCwweGM1LDB4MTgsMHgyYiwKLTB4MTAsMHg2MCwweGZmLDB4ZmIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4ODIsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwNSwweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwweDI0LDB4NDIsMHgxYiwweDk0LAotMHgyNCwweDAzLDB4MDAsMHgwMSwweDM0LDB4YTUsMHgwMCwweDIwLDB4M2MsMHgwNiwweGIwLDB4MDMsMHhhYywweGEyLDB4MDAsMHgwMCwKLTB4MzQsMHhjNiwweDAxLDB4MDQsMHhhMCwweDgzLDB4MDAsMHg0OCwweGEwLDB4ODAsMHgwMCwweDA0LDB4YTAsMHg4MCwweDAwLDB4MDUsCi0weGEwLDB4ODAsMHgwMCwweDA2LDB4YTAsMHg4MCwweDAwLDB4MDcsMHhhMCwweDgwLDB4MDAsMHgwOCwweGEwLDB4ODAsMHgwMCwweDA5LAotMHhhMCwweDgwLDB4MDAsMHgwYSwweGEwLDB4ODAsMHgwMCwweDExLDB4YTAsMHg4MCwweDAwLDB4MTMsMHhhMCwweDgwLDB4MDAsMHg0OSwKLTB4OTQsMHhjMiwweDAwLDB4MDAsMHhhYywweDgwLDB4MDAsMHgwMCwweGEwLDB4ODAsMHgwMCwweDRlLDB4MDAsMHgwMiwweDE0LDB4MDAsCi0weDAwLDB4MDIsMHgxNCwweDAzLDB4MzAsMHg0MywweDAwLDB4ZmYsMHgzMCwweDQyLDB4ZmYsMHgwMCwweGE0LDB4ODIsMHgwMCwweDQ0LAotMHhhNCwweDgzLDB4MDAsMHg0NiwweGFjLDB4ODAsMHgwMCwweDI0LDB4YWMsMHg4MCwweDAwLDB4MjgsMHhhYywweDgwLDB4MDAsMHgyYywKLTB4YWMsMHg4MCwweDAwLDB4MzAsMHhhYywweDgwLDB4MDAsMHgzNCwweGFjLDB4ODAsMHgwMCwweDM4LDB4YWMsMHg4MCwweDAwLDB4M2MsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4YWMsMHg4MCwweDAwLDB4NDAsMHg4NCwweDgzLDB4MDAsMHgwYywweDNjLDB4MDcsMHhiMCwweDAzLAotMHgzNCwweGU3LDB4MDAsMHgyMCwweDAwLDB4MDMsMHgxMCwweGMwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg4MCwKLTB4MjcsMHg4MywweDkwLDB4MDQsMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDgsMHgwMCwweDE4LDB4M2MsMHgwMiwweDgwLDB4MDAsCi0weDI0LDB4NDIsMHgxYywweDI4LDB4YWMsMHhlMiwweDAwLDB4MDAsMHg4ZCwweDAzLDB4MDAsMHgwOCwweDgwLDB4ODIsMHgwMCwweDEzLAotMHgwMCwweDA1LDB4MmMsMHgwMCwweDAwLDB4MDMsMHgxZSwweDAyLDB4MDAsMHgwMiwweDEyLDB4MDAsMHgzMCwweDYzLDB4MDAsMHg3ZSwKLTB4MDAsMHg2MiwweDE4LDB4MjEsMHgwMCwweDY1LDB4MTgsMHgyMSwweDNjLDB4MDIsMHhjMCwweDAwLDB4M2MsMHgwNSwweGIwLDB4MDUsCi0weDM0LDB4NDIsMHgwNCwweDAwLDB4MjQsMHg2MywweDAwLDB4MDEsMHgzYywweDA3LDB4YjAsMHgwNSwweDNjLDB4MDgsMHhiMCwweDA1LAotMHgzNCwweGE1LDB4MDQsMHgyMCwweGFjLDB4YTMsMHgwMCwweDAwLDB4MDAsMHhjMiwweDMwLDB4MjEsMHgzNCwweGU3LDB4MDQsMHgyNCwKLTB4MzUsMHgwOCwweDAyLDB4MjgsMHgyNCwweDAyLDB4MDAsMHgwMSwweDI0LDB4MDMsMHgwMCwweDIwLDB4YWMsMHhlNiwweDAwLDB4MDAsCi0weGFjLDB4ODIsMHgwMCwweDNjLDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhMSwweDAzLDB4MDAsMHgwMCwweDI3LDB4YmQsMHhmZiwweGE4LAotMHgwMCwweDA3LDB4NjAsMHg4MCwweDI3LDB4ODIsMHhiNCwweDAwLDB4YWYsMHhiZSwweDAwLDB4NTAsMHhhZiwweGI3LDB4MDAsMHg0YywKLTB4YWYsMHhiNSwweDAwLDB4NDQsMHhhZiwweGI0LDB4MDAsMHg0MCwweGFmLDB4YmYsMHgwMCwweDU0LDB4YWYsMHhiNiwweDAwLDB4NDgsCi0weGFmLDB4YjMsMHgwMCwweDNjLDB4YWYsMHhiMiwweDAwLDB4MzgsMHhhZiwweGIxLDB4MDAsMHgzNCwweGFmLDB4YjAsMHgwMCwweDMwLAotMHgwMSwweDgyLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDAwLDB4MDAsMHhlMCwweDcwLDB4MjEsMHgzYywweDAyLDB4ODAsMHgwMCwKLTB4OTQsMHg3MywweDAwLDB4MTQsMHgzYywweDA3LDB4YjAsMHgwMywweDM0LDB4ZTcsMHgwMCwweDIwLDB4MjQsMHg0MiwweDFjLDB4YmMsCi0weDNjLDB4MDMsMHhiMCwweDA1LDB4YWMsMHhlMiwweDAwLDB4MDAsMHgzNCwweDYzLDB4MDEsMHgyOCwweDkwLDB4NjcsMHgwMCwweDAwLAotMHgwMCwweDEzLDB4YTgsMHhjMCwweDAyLDB4YjMsMHgxOCwweDIxLDB4MjcsMHg4MiwweDkwLDB4MDQsMHgwMCwweDAzLDB4MTgsMHg4MCwKLTB4MDAsMHg2MiwweDE4LDB4MjEsMHgwMCwweDA1LDB4MmMsMHgwMCwweDAwLDB4MDcsMHgzZSwweDAwLDB4MjgsMHhjMiwweDAwLDB4MDMsCi0weDAwLDB4YzAsMHhhMCwweDIxLDB4MDAsMHg4MCwweDc4LDB4MjEsMHgwMCwweDA1LDB4YmMsMHgwMywweDhjLDB4NjgsMHgwMCwweDE4LAotMHgwMiwweGEwLDB4NTgsMHgyMSwweDEwLDB4NDAsMHgwMSwweDgxLDB4MDAsMHgwNywweGY2LDB4MDMsMHgwMCwweGRlLDB4MTAsMHgwNywKLTB4MzAsMHg1ZSwweDAwLDB4MDEsMHgwMSwweDczLDB4MTAsMHgyMSwweDI3LDB4ODMsMHg5MCwweDA4LDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDAwLDB4NDMsMHgxMCwweDIxLDB4ODAsMHg0ZCwweDAwLDB4MDYsMHg4ZCwweDAzLDB4MDAsMHgwMCwweDhkLDB4MDIsMHgwMCwweDA0LAotMHg4ZCwweDBhLDB4MDAsMHgwOCwweDhkLDB4MDMsMHgwMCwweDBjLDB4YWYsMHhhMiwweDAwLDB4MjAsMHgxMSwweGEwLDB4MDEsMHg3MSwKLTB4YWYsMHhhMywweDAwLDB4MTgsMHgyNywweDgyLDB4YjQsMHgwMCwweDAxLDB4ODIsMHgxMCwweDIxLDB4OGMsMHg0NCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHg4MywweDAwLDB4MTYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NjMsMHgwMCwweDA0LAotMHgxNCwweDYwLDB4MDAsMHgxMiwweDAwLDB4MDAsMHhiMCwweDIxLDB4M2MsMHgwMiwweGIwLDB4MDksMHgzNCwweDQyLDB4MDEsMHg0NiwKLTB4OTAsMHg0MywweDAwLDB4MDAsMHgyYSwweDg0LDB4MDAsMHgwNCwweDEwLDB4ODAsMHgwMSwweDU2LDB4MzAsMHg2NSwweDAwLDB4MDEsCi0weDkxLDB4ZTIsMHgwMCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDgyLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MjgsMHgyMSwweDE0LDB4YTAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDM4LDB4MjEsMHgxMywweGMwLDB4MDAsMHgwMywKLTB4MzgsMHhmNiwweDAwLDB4MDEsMHgyNCwweDA3LDB4MDAsMHgwMSwweDM4LDB4ZjYsMHgwMCwweDAxLDB4MDEsMHg3MywweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgzMCwweDgwLDB4MjcsMHg4MywweDkwLDB4MTAsMHgwMCwweGMzLDB4NDgsMHgyMSwweDkxLDB4MjUsMHgwMCwweDAwLAotMHg4ZiwweGE0LDB4MDAsMHgyMCwweDJjLDB4YTMsMHgwMCwweDA0LDB4MDAsMHgwNCwweDExLDB4YzMsMHgzMCwweDQyLDB4MDAsMHgwMSwKLTB4MDAsMHgwMywweGIwLDB4MGIsMHgxMiwweGMwLDB4MDAsMHhkOCwweGFmLDB4YTIsMHgwMCwweDI0LDB4OTMsMHg5MCwweGJiLDB4ZWEsCi0weDAwLDB4MGEsMHgxNiwweDQyLDB4MzAsMHg1MiwweDAwLDB4M2YsMHgyZSwweDA2LDB4MDAsMHgwYywweDEwLDB4YzAsMHgwMCwweGMwLAotMHgwMCwweGEwLDB4MjAsMHgyMSwweDJjLDB4YTIsMHgwMCwweDEwLDB4MTQsMHg0MCwweDAwLDB4MDQsMHgwMCwweDkwLDB4MTAsMHgyYiwKLTB4MzAsMHhhMiwweDAwLDB4MDcsMHgyNCwweDQ0LDB4MDAsMHgwNCwweDAwLDB4OTAsMHgxMCwweDJiLDB4MTAsMHg0MCwweDAwLDB4MGIsCi0weDAxLDB4NzMsMHgxMCwweDIxLDB4MjcsMHg4NSwweGJiLDB4MWMsMHgwMCwweDEwLDB4MTAsMHg0MCwweDAwLDB4NTAsMHgxMCwweDIxLAotMHgwMCwweDQ1LDB4MTAsMHgyMSwweDkwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MTgsMHgyYiwKLTB4MTQsMHg2MCwweGZmLDB4ZmEsMHgwMCwweDEwLDB4MTAsMHg0MCwweDAxLDB4NzMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDI3LDB4ODMsMHg5MCwweDA4LDB4MDAsMHg0MywweDEwLDB4MjEsMHgzMSwweGE0LDB4MDAsMHgwMSwweDEwLDB4ODAsMHgwMCwweGE1LAotMHhhMCwweDUwLDB4MDAsMHgwNywweDNjLDB4MDQsMHhiMCwweDA1LDB4MzQsMHg4NCwweDAwLDB4MDgsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4M2MsMHgwMywweDgwLDB4MDAsMHhhMSwweGUyLDB4MDAsMHg0ZSwweGFjLDB4ODMsMHgwMCwweDAwLDB4OGMsMHg4NSwweDAwLDB4MDAsCi0weDNjLDB4MDIsMHgwMCwweGYwLDB4M2MsMHgwMywweDQwLDB4ZjAsMHgzNCwweDQyLDB4ZjAsMHgwMCwweDM0LDB4NjMsMHhmMCwweDAwLAotMHgyNCwweDE3LDB4MDAsMHgwZSwweDI0LDB4MTMsMHgwMSwweDA2LDB4YWMsMHg4MiwweDAwLDB4MDAsMHhhYywweDgzLDB4MDAsMHgwMCwKLTB4MjcsMHg4MiwweGI0LDB4MDAsMHgwMSwweDgyLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDAwLDB4MjQsMHgwNSwweDAwLDB4MDEsCi0weGFmLDB4YTUsMHgwMCwweDFjLDB4OTAsMHg2MiwweDAwLDB4MTYsMHgwMCwweDEzLDB4YTgsMHhjMCwweDMyLDB4NTEsMHgwMCwweDAyLAotMHgzNCwweDQyLDB4MDAsMHgwNCwweGEwLDB4NjIsMHgwMCwweDE2LDB4OGYsMHhhMywweDAwLDB4MjAsMHg4ZiwweGE0LDB4MDAsMHgxOCwKLTB4MDAsMHgwMywweDEzLDB4NDMsMHgwMCwweDA0LDB4MWEsMHgwMiwweDMwLDB4NDcsMHgwMCwweDAxLDB4MTIsMHgyMCwweDAwLDB4MDQsCi0weDMwLDB4NjQsMHgwNywweGZmLDB4MmUsMHgwMywweDAwLDB4MDQsMHgzMiwweDQyLDB4MDAsMHgzMywweDAwLDB4NDMsMHg5MCwweDBiLAotMHg4ZiwweGE1LDB4MDAsMHgyNCwweDhmLDB4YTYsMHgwMCwweDFjLDB4MDAsMHgxMiwweDEwLDB4NDAsMHgwMCwweDA1LDB4MTksMHhjMCwKLTB4MDAsMHg0NywweDEwLDB4MjEsMHgwMCwweDA2LDB4MmEsMHg4MCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgxMCwweDMyLDB4MDAsCi0weDAwLDB4MDQsMHgyNCwweDgwLDB4MDIsMHg2NSwweDI4LDB4MjEsMHgwMCwweGE0LDB4MjgsMHgyMSwweDAwLDB4NDYsMHgxMCwweDIxLAotMHgwMCwweDE3LDB4MWMsMHgwMCwweDNjLDB4MDQsMHhjMCwweDAwLDB4MDAsMHg0MywweDMwLDB4MjEsMHgxNiwweDgwLDB4MDAsMHgyOSwKLTB4MDAsMHhhNCwweDI4LDB4MjEsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwNCwweDAwLDB4M2MsMHgwMywweGIwLDB4MDUsCi0weDNjLDB4MDQsMHhiMCwweDA1LDB4YWMsMHg0NiwweDAwLDB4MDAsMHgzNCwweDYzLDB4MDQsMHgwNCwweDM0LDB4ODQsMHgwMiwweDI4LAotMHgyNCwweDAyLDB4MDAsMHgwMSwweGFjLDB4NjUsMHgwMCwweDAwLDB4YTAsMHg4MiwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwOSwKLTB4MzQsMHg0MiwweDAxLDB4NDYsMHg5MCwweDQ0LDB4MDAsMHgwMCwweDkxLDB4ZTMsMHgwMCwweDA5LDB4MzAsMHg4NiwweDAwLDB4MDEsCi0weDAyLDB4ODMsMHgxOCwweDI2LDB4MDAsMHgwMywweDMwLDB4MGIsMHgxNCwweGMwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgyOCwweDIxLAotMHgxMywweGMwLDB4MDAsMHgwMywweDAyLDB4YjMsMHgxMCwweDIxLDB4MjQsMHgwNSwweDAwLDB4MDEsMHgwMiwweGIzLDB4MTAsMHgyMSwKLTB4MjcsMHg4MywweDkwLDB4MDgsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDMsMHgxMCwweDIxLDB4ODQsMHg0OCwweDAwLDB4MDQsCi0weDAwLDB4YTAsMHgzMCwweDIxLDB4MDAsMHhlMCwweDIwLDB4MjEsMHgwMiwweDgwLDB4MjgsMHgyMSwweDAyLDB4YzAsMHgzOCwweDIxLAotMHgwYywweDAwLDB4MDAsMHg3MCwweGFmLDB4YTgsMHgwMCwweDEwLDB4N2IsMHhiZSwweDAyLDB4YmMsMHg3YiwweGI2LDB4MDIsMHg3YywKLTB4N2IsMHhiNCwweDAyLDB4M2MsMHg3YiwweGIyLDB4MDEsMHhmYywweDdiLDB4YjAsMHgwMSwweGJjLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDI3LDB4YmQsMHgwMCwweDU4LDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMiwweDgyLDB4MDAsMHgzZCwweDNjLDB4MDIsMHhiMCwweDA1LAotMHgyNCwweDAyLDB4MDAsMHgwMiwweDEyLDB4ODIsMHgwMCwweDMxLDB4M2MsMHgwMiwweGIwLDB4MDUsMHgyNCwweDAyLDB4MDAsMHgwMywKLTB4MTIsMHg4MiwweDAwLDB4MjUsMHgzYywweDAyLDB4YjAsMHgwNSwweDI0LDB4MDIsMHgwMCwweDEwLDB4MTIsMHg4MiwweDAwLDB4MTksCi0weDNjLDB4MDIsMHhiMCwweDA1LDB4MjQsMHgwMiwweDAwLDB4MTEsMHgxMiwweDgyLDB4MDAsMHgwZCwweDNjLDB4MDIsMHhiMCwweDA1LAotMHgyNCwweDAyLDB4MDAsMHgxMiwweDE2LDB4ODIsMHhmZiwweGQxLDB4M2MsMHgwMiwweGIwLDB4MDUsMHgzYywweDAzLDB4YjAsMHgwNSwKLTB4MzQsMHg0MiwweDA0LDB4MjAsMHgzYywweDA0LDB4YjAsMHgwNSwweDM0LDB4NjMsMHgwNCwweDI0LDB4YWMsMHg0NiwweDAwLDB4MDAsCi0weDM0LDB4ODQsMHgwMiwweDI4LDB4YWMsMHg2NSwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDcsMHhlNiwweDI0LDB4MDIsMHgwMCwweDIwLAotMHgzNCwweDQyLDB4MDQsMHg0MCwweDNjLDB4MDMsMHhiMCwweDA1LDB4M2MsMHgwNCwweGIwLDB4MDUsMHhhYywweDQ2LDB4MDAsMHgwMCwKLTB4MzQsMHg2MywweDA0LDB4NDQsMHgzNCwweDg0LDB4MDIsMHgyOCwweDI0LDB4MDIsMHgwMCwweDQwLDB4MDgsMHgwMCwweDA3LDB4ZTYsCi0weGFjLDB4NjUsMHgwMCwweDAwLDB4MzQsMHg0MiwweDA0LDB4MjgsMHgzYywweDAzLDB4YjAsMHgwNSwweDNjLDB4MDQsMHhiMCwweDA1LAotMHhhYywweDQ2LDB4MDAsMHgwMCwweDM0LDB4NjMsMHgwNCwweDJjLDB4MzQsMHg4NCwweDAyLDB4MjgsMHgyNCwweDAyLDB4ZmYsMHg4MCwKLTB4MDgsMHgwMCwweDA3LDB4ZTYsMHhhYywweDY1LDB4MDAsMHgwMCwweDM0LDB4NDIsMHgwNCwweDE4LDB4M2MsMHgwMywweGIwLDB4MDUsCi0weDNjLDB4MDQsMHhiMCwweDA1LDB4YWMsMHg0NiwweDAwLDB4MDAsMHgzNCwweDYzLDB4MDQsMHgxYywweDM0LDB4ODQsMHgwMiwweDI4LAotMHgyNCwweDAyLDB4MDAsMHgwOCwweDA4LDB4MDAsMHgwNywweGU2LDB4YWMsMHg2NSwweDAwLDB4MDAsMHgzNCwweDQyLDB4MDQsMHgxMCwKLTB4M2MsMHgwMywweGIwLDB4MDUsMHgzYywweDA0LDB4YjAsMHgwNSwweGFjLDB4NDYsMHgwMCwweDAwLDB4MzQsMHg2MywweDA0LDB4MTQsCi0weDM0LDB4ODQsMHgwMiwweDI4LDB4MjQsMHgwMiwweDAwLDB4MDQsMHgwOCwweDAwLDB4MDcsMHhlNiwweGFjLDB4NjUsMHgwMCwweDAwLAotMHgzNCwweDQyLDB4MDQsMHgwOCwweDNjLDB4MDMsMHhiMCwweDA1LDB4M2MsMHgwNCwweGIwLDB4MDUsMHhhYywweDQ2LDB4MDAsMHgwMCwKLTB4MzQsMHg2MywweDA0LDB4MGMsMHgzNCwweDg0LDB4MDIsMHgyOCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MDgsMHgwMCwweDA3LDB4ZTYsCi0weGFjLDB4NjUsMHgwMCwweDAwLDB4MjQsMHgxNywweDAwLDB4MTQsMHgwOCwweDAwLDB4MDcsMHhiOCwweDI0LDB4MTMsMHgwMSwweDAyLAotMHgzMCwweGEyLDB4MDAsMHgwNywweDI0LDB4NDQsMHgwMCwweDBjLDB4MDAsMHg5MCwweDE4LDB4MmIsMHgxMCwweDYwLDB4MDAsMHgwYywKLTB4MjYsMHgwMiwweDAwLDB4MDQsMHgyNywweDg1LDB4YmIsMHgxYywweDAwLDB4MTAsMHgxMCwweDQwLDB4MDAsMHg1MCwweDEwLDB4MjEsCi0weDAwLDB4NDUsMHgxMCwweDIxLDB4OTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgxOCwweDJiLAotMHgxNCwweDYwLDB4ZmYsMHhmYSwweDAwLDB4MTAsMHgxMCwweDQwLDB4MmUsMHgwNiwweDAwLDB4MGMsMHgyNiwweDAyLDB4MDAsMHgwNCwKLTB4MDgsMHgwMCwweDA3LDB4YTIsMHgwMCwweDQ2LDB4ODAsMHgwYSwweDI3LDB4ODIsMHhiNCwweDAwLDB4MDEsMHg4MiwweDIwLDB4MjEsCi0weDhjLDB4ODcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweGUyLDB4MDAsMHgxOSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxNCwweDQwLDB4MDAsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjcsMHg4MiwweDkwLDB4MjAsMHgwMCwweGMyLDB4MTAsMHgyMSwKLTB4OTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NjAsMHgwMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDkwLDB4ZTMsMHgwMCwweDE2LDB4MjcsMHg4MiwweDkwLDB4MDgsMHgwMCwweGMyLDB4MTAsMHgyMSwweDM0LDB4NjMsMHgwMCwweDIwLAotMHg5MCwweDUwLDB4MDAsMHgwNywweGEwLDB4ZTMsMHgwMCwweDE2LDB4OGMsMHg4NCwweDAwLDB4MDAsMHgwMCwweDBhLDB4MWUsMHg0MiwKLTB4MjQsMHgwNiwweDAwLDB4MDEsMHg5MCwweDgyLDB4MDAsMHgxNiwweDMwLDB4NzEsMHgwMCwweDAyLDB4MzAsMHg3MiwweDAwLDB4M2YsCi0weDMwLDB4NDIsMHgwMCwweGZiLDB4MjQsMHgxNywweDAwLDB4MTgsMHgyNCwweDEzLDB4MDEsMHgwMywweDI0LDB4MTUsMHgwOCwweDE4LAotMHhhZiwweGE2LDB4MDAsMHgxYywweDA4LDB4MDAsMHgwNywweGMyLDB4YTAsMHg4MiwweDAwLDB4MTYsMHg4ZCwweDAyLDB4MDAsMHgwNCwKLTB4MDAsMHgwYSwweDFjLDB4NDIsMHgzMCwweDQyLDB4MDAsMHgxMCwweDE0LDB4NDAsMHgwMCwweDE1LDB4MzAsMHg3MiwweDAwLDB4M2YsCi0weDgxLDB4MjIsMHgwMCwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgxMSwweDMwLDB4NzIsMHgwMCwweDNlLAotMHgyNywweDgzLDB4OTAsMHgxOCwweDAwLDB4YzMsMHgxOCwweDIxLDB4ODAsMHg2NCwweDAwLDB4MDAsMHgyNywweDgzLDB4YjUsMHg3OCwKLTB4MDAsMHgwNCwweDExLDB4MDAsMHgwMCwweDQ0LDB4MTAsMHgyMywweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0NCwweDEwLDB4MjMsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0MywweDEwLDB4MjEsMHg5MCwweDQ0LDB4MDAsMHgwNSwweDkwLDB4NDMsMHgwMCwweDA0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjQsMHgxOCwweDI0LDB4MzAsMHg2MywweDAwLDB4MDEsMHgwMiwweDQzLDB4OTAsMHgyNSwKLTB4MjcsMHg4NSwweGI0LDB4MDAsMHgwMSwweDg1LDB4MjgsMHgyMSwweDhjLDB4YTYsMHgwMCwweDAwLDB4MDEsMHg3MywweDEwLDB4MjEsCi0weDI3LDB4ODMsMHg5MCwweDEwLDB4OTAsMHhjNCwweDAwLDB4MTYsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHgzMCwweDg0LDB4MDAsMHhkZiwweDkwLDB4NTAsMHgwMCwweDAwLDB4YTAsMHhjNCwweDAwLDB4MTYsMHg4MCwweGM2LDB4MDAsMHgxMiwKLTB4OGMsMHhhMywweDAwLDB4MDAsMHgyZCwweGM0LDB4MDAsMHgwMiwweGFmLDB4YTYsMHgwMCwweDFjLDB4OTAsMHg2MiwweDAwLDB4MTYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmIsMHgxNCwweDgwLDB4MDAsMHgwNiwweGEwLDB4NjIsMHgwMCwweDE2LAotMHgyNCwweDAyLDB4MDAsMHgwNiwweDExLDB4YzIsMHgwMCwweDAzLDB4MjQsMHgwMiwweDAwLDB4MDQsMHgxNSwweGMyLDB4ZmYsMHgwZSwKLTB4MzIsMHg1MSwweDAwLDB4MDIsMHgzMiwweDUxLDB4MDAsMHgwMiwweDJlLDB4MDIsMHgwMCwweDBjLDB4MTQsMHg0MCwweDAwLDB4MGYsCi0weDAwLDB4MTEsMHgxOCwweDJiLDB4MzIsMHgwMiwweDAwLDB4MGYsMHgzNCwweDQyLDB4MDAsMHgxMCwweDAwLDB4MDMsMHgxOSwweDAwLAotMHgwMCwweDQzLDB4MTgsMHgyMSwweDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAwLDB4ZTAsMHhhMCwweDQzLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDIwLDB4MjEsMHgwMiwweDAwLDB4MjgsMHgyMSwweDBjLDB4MDAsMHgwMiwweDAzLDB4YWYsMHhhZiwweDAwLDB4MjgsCi0weDhmLDB4YWYsMHgwMCwweDI4LDB4MDgsMHgwMCwweDA3LDB4YzIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweGJkLAotMHgzMiwweDAzLDB4MDAsMHhmZiwweDNjLDB4MDMsMHhiMCwweDA1LDB4MzQsMHg2MywweDAyLDB4NDIsMHg5MCwweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHgwZiwweDE0LDB4NDAsMHhmZSwweGFhLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDkxLDB4ZTIsMHgwMCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgyLDB4MTAsMHgyNiwweDA4LDB4MDAsMHgwNywweDc5LAotMHgwMCwweDAyLDB4MjgsMHgwYiwweDA4LDB4MDAsMHgwNywweDdmLDB4MDAsMHgwMCwweGIwLDB4MjEsMHgyNCwweDAyLDB4MDAsMHgxMCwKLTB4MTAsMHhjMiwweDAwLDB4MDgsMHgyNCwweDAyLDB4MDAsMHgxMSwweDEwLDB4YzIsMHhmZSwweDdkLDB4MDAsMHgwNywweDE3LDB4ODMsCi0weDI0LDB4MDIsMHgwMCwweDEyLDB4MTQsMHhjMiwweGZlLDB4N2IsMHgwMCwweDA3LDB4MTcsMHg0MywweDA4LDB4MDAsMHgwNywweDU5LAotMHgzMCwweDVlLDB4MDAsMHgwMSwweDA4LDB4MDAsMHgwNywweDU5LDB4MDAsMHgwNywweGY3LDB4YzIsMHgwMCwweDA0LDB4MTAsMHg0MCwKLTB4MjcsMHg4MywweDgwLDB4MWMsMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4ODAsMHg0MCwweDIxLDB4OTQsMHg0NCwweDAwLDB4MDAsCi0weDJkLDB4MDcsMHgwMCwweDA0LDB4MjQsMHhjMiwweDAwLDB4MDMsMHgwMCwweDQ3LDB4MzAsMHgwYSwweDAwLDB4ODYsMHgwMCwweDE4LAotMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAwLDB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4MjMsMHg4YywKLTB4YWMsMHg2MiwweDAwLDB4MDAsMHgyZCwweDA2LDB4MDAsMHgxMCwweDAwLDB4MDAsMHgyMCwweDEyLDB4MDAsMHgwNCwweDIyLDB4NDIsCi0weDI0LDB4ODQsMHgwMCwweDAxLDB4MjQsMHg4MywweDAwLDB4YzAsMHgxMCwweGUwLDB4MDAsMHgwYiwweDI0LDB4ODIsMHgwMCwweDYwLAotMHgwMCwweDQwLDB4MjAsMHgyMSwweDAwLDB4NjUsMHgyMCwweDBhLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzNCwweDYzLDB4MDEsMHgwMCwKLTB4OTAsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweDAxLDB4MDAsMHg0NCwweDIwLDB4MDQsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHg4MCwweDEwLDB4MjEsMHgyNCwweDg1LDB4MDAsMHgyOCwweDI0LDB4ODMsMHgwMCwweDI0LAotMHgzMSwweDAyLDB4MDAsMHgwOCwweDE0LDB4YzAsMHhmZiwweGY0LDB4MjQsMHg4NCwweDAwLDB4MTQsMHgwMCwweDYwLDB4MjAsMHgyMSwKLTB4MDgsMHgwMCwweDA4LDB4ZmEsMHgwMCwweGEyLDB4MjAsMHgwYiwweDI3LDB4YmQsMHhmZiwweGUwLDB4M2MsMHgwMywweGIwLDB4MDMsCi0weDNjLDB4MDIsMHg4MCwweDAwLDB4YWYsMHhiMCwweDAwLDB4MTAsMHgyNCwweDQyLDB4MjQsMHgyOCwweDAwLDB4ODAsMHg4MCwweDIxLAotMHgzNCwweDYzLDB4MDAsMHgyMCwweDNjLDB4MDQsMHhiMCwweDAzLDB4YWYsMHhiMiwweDAwLDB4MTgsMHhhZiwweGIxLDB4MDAsMHgxNCwKLTB4YWYsMHhiZiwweDAwLDB4MWMsMHg4MywweGIxLDB4MDAsMHgzMywweDgzLDB4YTgsMHgwMCwweDM3LDB4MzQsMHg4NCwweDAxLDB4MTAsCi0weGFjLDB4NjIsMHgwMCwweDAwLDB4MmUsMHgwMiwweDAwLDB4MTAsMHgwMCwweGUwLDB4OTAsMHgyMSwweDhjLDB4ODcsMHgwMCwweDAwLAotMHgxNCwweDQwLDB4MDAsMHgwYywweDJlLDB4MDIsMHgwMCwweDBjLDB4M2MsMHgwMiwweDAwLDB4MGYsMHgzNCwweDQyLDB4ZjAsMHgwMCwKLTB4MDAsMHhlMiwweDEwLDB4MjQsMHgxNCwweDQwLDB4MDAsMHgzNywweDMyLDB4MDIsMHgwMCwweDA4LDB4MzIsMHgwMiwweDAwLDB4MDcsCi0weDI3LDB4ODMsMHg4MCwweGNjLDB4MDAsMHg0MywweDEwLDB4MjEsMHg5MCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyZSwweDAyLDB4MDAsMHgwYywweDE0LDB4NDAsMHgwMCwweDAzLDB4MDIsMHgwMCwweDIwLDB4MjEsMHgzMiwweDAyLDB4MDAsMHgwZiwKLTB4MjQsMHg0NCwweDAwLDB4MGMsMHgwMCwweDg3LDB4MTAsMHgwNiwweDMwLDB4NDIsMHgwMCwweDAxLDB4MTQsMHg0MCwweDAwLDB4MDcsCi0weDJjLDB4ODIsMHgwMCwweDBjLDB4MDAsMHgwNCwweDEwLDB4ODAsMHgyNywweDgzLDB4YjQsMHg1MCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHg4YywweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHg4MiwweDAwLDB4MGMsMHgxNCwweDQwLDB4MDAsMHgwNSwKLTB4MDAsMHgwNSwweDEwLDB4NDAsMHgwMCwweDQ2LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMSwweDAwLDB4MDAsMHg4MiwweDEwLDB4MjEsCi0weDI0LDB4NDQsMHgwMCwweDA0LDB4MTUsMHgwMCwweDAwLDB4MDIsMHgyNCwweDA2LDB4MDAsMHgyMCwweDI0LDB4MDYsMHgwMCwweDBlLAotMHgwYywweDAwLDB4MDgsMHhlMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDMwLDB4MjEsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4MzQsMHg0MiwweDAxLDB4MDAsMHg5MCwweDQzLDB4MDAsMHgwMCwweDJlLDB4MDQsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAwLDB4MTAsCi0weDI0LDB4MDUsMHgwMCwweDBhLDB4MDAsMHg0NCwweDI4LDB4MGEsMHgzMCwweDYzLDB4MDAsMHgwMSwweDE0LDB4NjAsMHgwMCwweDAyLAotMHgwMCwweDA1LDB4MTAsMHg0MCwweDAwLDB4YTAsMHgxMCwweDIxLDB4MzAsMHg0NSwweDAwLDB4ZmYsMHgwMCwweGM1LDB4MTAsMHgyMSwKLTB4MjQsMHg0NiwweDAwLDB4NDYsMHgwMiwweDI2LDB4MTgsMHgwNCwweGE2LDB4NDMsMHgwMCwweDAwLDB4OGYsMHhiZiwweDAwLDB4MWMsCi0weDhmLDB4YjIsMHgwMCwweDE4LDB4N2IsMHhiMCwweDAwLDB4YmMsMHgwMCwweGMwLDB4MTAsMHgyMSwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgyNywweGJkLDB4MDAsMHgyMCwweDEwLDB4NDAsMHhmZiwweGNmLDB4MmUsMHgwMiwweDAwLDB4MGMsMHgzMiwweDAyLDB4MDAsMHgwNywKLTB4MjcsMHg4MywweDgwLDB4YzQsMHgwMCwweDQzLDB4MTAsMHgyMSwweDkwLDB4NDQsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA5LDB4MjgsCi0weDAyLDB4MDQsMHg4MCwweDIzLDB4MjcsMHhiZCwweGZmLDB4YjgsMHgwMCwweDA1LDB4MzgsMHg4MCwweDI3LDB4ODIsMHhiNCwweDAwLAotMHhhZiwweGJlLDB4MDAsMHg0MCwweGFmLDB4YjYsMHgwMCwweDM4LDB4YWYsMHhiMywweDAwLDB4MmMsMHhhZiwweGJmLDB4MDAsMHg0NCwKLTB4YWYsMHhiNywweDAwLDB4M2MsMHhhZiwweGI1LDB4MDAsMHgzNCwweGFmLDB4YjQsMHgwMCwweDMwLDB4YWYsMHhiMiwweDAwLDB4MjgsCi0weGFmLDB4YjEsMHgwMCwweDI0LDB4YWYsMHhiMCwweDAwLDB4MjAsMHgwMCwweGUyLDB4MzgsMHgyMSwweDhjLDB4ZTYsMHgwMCwweDAwLAotMHhhZiwweGE1LDB4MDAsMHg0YywweDNjLDB4MDIsMHg4MCwweDAwLDB4M2MsMHgwNSwweGIwLDB4MDMsMHgzNCwweGE1LDB4MDAsMHgyMCwKLTB4MjQsMHg0MiwweDI1LDB4ODQsMHgyNCwweDAzLDB4MDAsMHgwMSwweGFjLDB4YTIsMHgwMCwweDAwLDB4YTAsMHhjMywweDAwLDB4MTIsCi0weDhjLDB4ZTUsMHgwMCwweDAwLDB4OTQsMHhjMywweDAwLDB4MDYsMHg5MCwweGEyLDB4MDAsMHgxNiwweGE0LDB4YzMsMHgwMCwweDE0LAotMHgyNywweDgzLDB4OTAsMHgwMCwweDM0LDB4NDIsMHgwMCwweDA4LDB4YTAsMHhhMiwweDAwLDB4MTYsMHg4YywweGU4LDB4MDAsMHgwMCwKLTB4YWYsMHhhNCwweDAwLDB4NDgsMHgyNywweDgyLDB4OTAsMHgwNCwweDk1LDB4MTEsMHgwMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MTEsMHg5OCwweGMwLDB4MDIsMHg3MSwweDIwLDB4MjEsMHgwMCwweDA0LDB4MjAsMHg4MCwweDAwLDB4ODIsMHgxMCwweDIxLAotMHg4YywweDUyLDB4MDAsMHgxOCwweDAwLDB4ODMsMHgxOCwweDIxLDB4ODQsMHg3NSwweDAwLDB4MDYsMHg4ZSwweDQ1LDB4MDAsMHgwOCwKLTB4OGUsMHg0NiwweDAwLDB4MDQsMHg4ZSwweDQ3LDB4MDAsMHgwNCwweDAwLDB4MDUsMHgxYywweDgyLDB4MDAsMHgwNiwweDMxLDB4NDIsCi0weDI3LDB4ODIsMHg5MCwweDEwLDB4MzAsMHg2MywweDAwLDB4MDEsMHgzMCwweGM2LDB4MDAsMHgwMSwweDAwLDB4ODIsMHgyMCwweDIxLAotMHhhNSwweDE1LDB4MDAsMHgxYSwweDAwLDB4MDUsMHgxNCwweDQyLDB4YWYsMHhhMywweDAwLDB4MTgsMHhhZiwweGE2LDB4MDAsMHgxYywKLTB4MzAsMHhlNywweDAwLDB4MTAsMHgzMCwweDU2LDB4MDAsMHgwMSwweDgwLDB4OTcsMHgwMCwweDA2LDB4MTQsMHhlMCwweDAwLDB4NDcsCi0weDAwLDB4MDUsMHhmNywweGMyLDB4ODAsMHg4MiwweDAwLDB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDQ0LAotMHgwMiwweDcxLDB4MTAsMHgyMSwweDkzLDB4OTAsMHhiYiwweGU5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZSwweDAyLDB4MDAsMHgwYywKLTB4MTQsMHg0MCwweDAwLDB4MDYsMHgwMiwweDAwLDB4MjAsMHgyMSwweDAwLDB4MTYsMHgxMCwweDQwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMSwweDAwLDB4MDIsMHgwMiwweDEwLDB4MjEsMHgyNCwweDQ0LDB4MDAsMHgwNCwweDAyLDB4NzEsMHgxMCwweDIxLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDI3LDB4ODMsMHg5MCwweDEwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDgwLDB4ODAsMHgyMSwKLTB4YTAsMHg0NCwweDAwLDB4MDMsMHhhMCwweDQ0LDB4MDAsMHgwMCwweDAyLDB4MDAsMHgyMCwweDIxLDB4MDIsMHhjMCwweDI4LDB4MjEsCi0weDBjLDB4MDAsMHgwOCwweGUzLDB4MDIsMHhhMCwweDMwLDB4MjEsMHgwMiwweDcxLDB4MTgsMHgyMSwweDAwLDB4MDMsMHg4OCwweDgwLAotMHgwMCwweDQwLDB4YTAsMHgyMSwweDI3LDB4ODIsMHg5MCwweDIwLDB4MDIsMHgyMiwweDEwLDB4MjEsMHg4YywweDQ0LDB4MDAsMHgwMCwKLTB4MjYsMHhlMywweDAwLDB4MDIsMHgwMCwweDAzLDB4MTcsMHhjMiwweDAwLDB4NjIsMHgxOCwweDIxLDB4MDAsMHgwNCwweDI1LDB4YzIsCi0weDAwLDB4MDMsMHgxOCwweDQzLDB4MzAsMHg4NCwweDAwLDB4MDEsMHgwMCwweDAzLDB4MTgsMHg0MCwweDAzLDB4YzQsMHgyMCwweDI0LAotMHgxNCwweDgwLDB4MDAsMHgxNSwweDAyLDB4NDMsMHgzOCwweDIxLDB4M2MsMHgwOCwweGIwLDB4MDMsMHgzNSwweDA4LDB4MDAsMHgyOCwKLTB4OGQsMHgwMywweDAwLDB4MDAsMHg4ZiwweGE2LDB4MDAsMHg0YywweDhmLDB4YTQsMHgwMCwweDQ4LDB4MjcsMHg4MiwweDkwLDB4MDgsCi0weDAyLDB4MjIsMHgxMCwweDIxLDB4MjQsMHg2MywweDAwLDB4MDEsMHgwMiwweGEwLDB4MjgsMHgyMSwweGE0LDB4NTQsMHgwMCwweDA0LAotMHgwMCwweGMwLDB4MzgsMHgyMSwweDBjLDB4MDAsMHgwNywweDJmLDB4YWQsMHgwMywweDAwLDB4MDAsMHg3YiwweGJlLDB4MDIsMHgzYywKLTB4N2IsMHhiNiwweDAxLDB4ZmMsMHg3YiwweGI0LDB4MDEsMHhiYywweDdiLDB4YjIsMHgwMSwweDdjLDB4N2IsMHhiMCwweDAxLDB4M2MsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4NDgsMHg4ZiwweGEyLDB4MDAsMHgxYywweDhmLDB4YTYsMHgwMCwweDE4LAotMHgwMiwweDAwLDB4MjAsMHgyMSwweDAyLDB4YzAsMHgyOCwweDIxLDB4YWYsMHhhMiwweDAwLDB4MTAsMHgwYywweDAwLDB4MDksMHgwYSwKLTB4YWYsMHhhMCwweDAwLDB4MTQsMHgwOCwweDAwLDB4MDksMHhjNiwweDAyLDB4ODIsMHhhMCwweDIxLDB4MDIsMHg3MSwweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4MywweDkwLDB4MTAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDkwLDB4NTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MDksMHhiMiwweGEwLDB4NTAsMHgwMCwweDAzLDB4MjcsMHhiZCwweGZmLDB4YjgsMHhhZiwweGIxLDB4MDAsMHgyNCwKLTB4OGYsMHhiMSwweDAwLDB4NWMsMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAwLDB4MzQsMHg2MywweDAwLDB4MjAsCi0weDI0LDB4NDIsMHgyNywweGE4LDB4YWYsMHhiZSwweDAwLDB4NDAsMHhhZiwweGI3LDB4MDAsMHgzYywweGFmLDB4YjYsMHgwMCwweDM4LAotMHhhZiwweGI1LDB4MDAsMHgzNCwweGFmLDB4YjQsMHgwMCwweDMwLDB4YWYsMHhhNSwweDAwLDB4NGMsMHg4ZiwweGI1LDB4MDAsMHg1OCwKLTB4YWYsMHhiZiwweDAwLDB4NDQsMHhhZiwweGIzLDB4MDAsMHgyYywweGFmLDB4YjIsMHgwMCwweDI4LDB4YWYsMHhiMCwweDAwLDB4MjAsCi0weDAwLDB4ZTAsMHhiMCwweDIxLDB4YWMsMHg2MiwweDAwLDB4MDAsMHgwMCwweDgwLDB4ZjAsMHgyMSwweDAwLDB4MDAsMHhiOCwweDIxLAotMHgxNiwweDIwLDB4MDAsMHgyYiwweDAwLDB4MDAsMHhhMCwweDIxLDB4MjcsMHg4NSwweGI0LDB4MDAsMHgwMCwweDA3LDB4MTAsMHg4MCwKLTB4MDAsMHg0NSwweDEwLDB4MjEsMHg4YywweDUzLDB4MDAsMHgwMCwweDAwLDB4MTUsMHgxOCwweDgwLDB4MDAsMHg2NSwweDE4LDB4MjEsCi0weDkyLDB4NjIsMHgwMCwweDE2LDB4OGMsMHg3MiwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHgwMywweDE0LDB4NDAsMHgwMCwweDJkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDkyLDB4NDIsMHgwMCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHgwMywKLTB4MTQsMHg0MCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4ODIsMHgwMCwweDM0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE0LDB4NDAsMHgwMCwweDE4LDB4MDIsMHgyMCwweDEwLDB4MjEsMHg4YywweDgyLDB4MDAsMHgzOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxNCwweDQwLDB4MDAsMHgxNCwweDAyLDB4MjAsMHgxMCwweDIxLDB4OGMsMHg4MiwweDAwLDB4M2MsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTQsMHg0MCwweDAwLDB4MGYsMHgzYywweDAzLDB4YjAsMHgwOSwweDNjLDB4MDUsMHhiMCwweDA1LDB4MzQsMHg2MywweDAxLDB4NDQsCi0weDM0LDB4YTUsMHgwMiwweDUyLDB4OTQsMHg2NiwweDAwLDB4MDAsMHg5MCwweGEyLDB4MDAsMHgwMCwweDhmLDB4YTMsMHgwMCwweDRjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHgxMCwweDA2LDB4MzAsMHg0MiwweDAwLDB4MDEsMHgxMCwweDQwLDB4MDAsMHgwNCwKLTB4MzAsMHhjNiwweGZmLDB4ZmYsMHgyYywweGMyLDB4MDAsMHg0MSwweDEwLDB4NDAsMHgwMCwweDA5LDB4MjQsMHgwNSwweDAwLDB4MTQsCi0weDAyLDB4MjAsMHgxMCwweDIxLDB4N2IsMHhiZSwweDAyLDB4M2MsMHg3YiwweGI2LDB4MDEsMHhmYywweDdiLDB4YjQsMHgwMSwweGJjLAotMHg3YiwweGIyLDB4MDEsMHg3YywweDdiLDB4YjAsMHgwMSwweDNjLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHg0OCwKLTB4MGMsMHgwMCwweDA3LDB4MGEsMHgyNCwweDA2LDB4MDEsMHgwNywweDI0LDB4MDIsMHgwMCwweDAxLDB4MDgsMHgwMCwweDBhLDB4MmMsCi0weGEzLDB4YzIsMHgwMCwweDExLDB4MTAsMHhjMCwweDAwLDB4MWMsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YzIsMHgwMCwweDE3LAotMHgwMCwweGMwLDB4ODgsMHgyMSwweDk2LDB4NTQsMHgwMCwweDFhLDB4MDIsMHhhMCwweGI4LDB4MjEsMHgxMiwweDIwLDB4ZmYsMHhlZCwKLTB4MDIsMHgyMCwweDEwLDB4MjEsMHgyNywweDgzLDB4YjQsMHgwMCwweDAwLDB4MTcsMHgxMCwweDgwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDhjLDB4NDQsMHgwMCwweDAwLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzNCwweDYzLDB4MDAsMHgyOCwweDgwLDB4ODYsMHgwMCwweDEyLAotMHg4YywweDYyLDB4MDAsMHgwMCwweDAwLDB4MTQsMHgyYywweDAwLDB4MDAsMHgwNSwweDJjLDB4MDMsMHgwMCwweDQ2LDB4MTAsMHgyMSwKLTB4OGYsMHhhNiwweDAwLDB4NGMsMHgwMiwweGUwLDB4MzgsMHgyMSwweDAzLDB4YzAsMHgyMCwweDIxLDB4MGMsMHgwMCwweDA3LDB4MmYsCi0weGFjLDB4NjIsMHgwMCwweDAwLDB4MDgsMHgwMCwweDBhLDB4MmMsMHhhZiwweGQxLDB4MDAsMHg0MCwweDk2LDB4NzQsMHgwMCwweDFhLAotMHgwOCwweDAwLDB4MGEsMHgzZiwweDAyLDB4YzAsMHhiOCwweDIxLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDEsMHgwOCwKLTB4OGMsMHg1MCwweDAwLDB4MDAsMHgwMiwweDYwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgxZSwweGYzLDB4MDIsMHgwMCwweDI4LDB4MjEsCi0weDMwLDB4NDIsMHgwMCwweGZmLDB4MDIsMHgwMCwweDI4LDB4MjEsMHgwMiwweDQwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgxZSwweGYzLAotMHhhZiwweGEyLDB4MDAsMHgxOCwweDhmLDB4YTQsMHgwMCwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHhlZCwKLTB4MzAsMHg1MCwweDAwLDB4ZmYsMHgxMiwweDAwLDB4MDAsMHgxOCwweDI0LDB4MTEsMHgwMCwweDAxLDB4OTYsMHg2MywweDAwLDB4MTQsCi0weDk2LDB4NDQsMHgwMCwweDE0LDB4MjcsMHg4NSwweDkwLDB4MDAsMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDUsMHgxMCwweDIxLDB4MDAsMHgwNCwweDE4LDB4YzAsMHg4YywweDQ2LDB4MDAsMHgwOCwKLTB4MDAsMHg2NCwweDE4LDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjUsMHgxOCwweDIxLDB4MDAsMHgwNiwweDE3LDB4MDIsCi0weDI0LDB4MDQsMHgwMCwweGZmLDB4OGMsMHg2MywweDAwLDB4MDgsMHgxMCwweDQ0LDB4MDAsMHhkNiwweDAwLDB4MDMsMHgxNywweDAyLAotMHgxMCwweDQ0LDB4MDAsMHhkNSwweDNjLDB4MDIsMHg4MCwweDAwLDB4MDAsMHg2NiwweDE4LDB4MmIsMHgyNCwweDExLDB4MDAsMHgwMiwKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHgwMCwweDQzLDB4ODgsMHgwYSwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTIsMHgyMiwweDAwLDB4NWEsCi0weDI0LDB4MDIsMHgwMCwweDAyLDB4MTYsMHgyMiwweGZmLDB4YmQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk2LDB4NDksMHgwMCwweDE0LAotMHgyNywweDgyLDB4OTAsMHgwNCwweDAyLDB4YTAsMHhiOCwweDIxLDB4MDAsMHgwOSwweDUwLDB4YzAsMHgwMSwweDQ5LDB4MTgsMHgyMSwKLTB4MDAsMHgwMywweDQwLDB4ODAsMHgwMSwweDAyLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhjLDB4NjUsMHgwMCwweDA4LDB4OGMsMHg2MiwweDAwLDB4MGMsMHg4YywweDYyLDB4MDAsMHgwNCwweDAwLDB4MDUsMHgyNCwweDQyLAotMHgwMCwweDA1LDB4MWMsMHg4MiwweDMwLDB4NDIsMHgwMCwweDEwLDB4MzAsMHg2NiwweDAwLDB4MDEsMHgxNCwweDQwLDB4MDAsMHg0MSwKLTB4MzAsMHg4NywweDAwLDB4MDEsMHgyNywweDgyLDB4OTAsMHgxOCwweDAxLDB4MDIsMHgxMCwweDIxLDB4ODAsMHg0NCwweDAwLDB4MDAsCi0weDI3LDB4ODIsMHhiNSwweDc4LDB4MDAsMHgwNCwweDE5LDB4MDAsMHgwMCwweDY0LDB4MTgsMHgyMywweDAwLDB4MDMsMHgxOCwweDgwLAotMHgwMCwweDY0LDB4MTgsMHgyMywweDAwLDB4MDMsMHgxOCwweDgwLDB4MDAsMHg2MiwweDEwLDB4MjEsMHg5MCwweDQ1LDB4MDAsMHgwNSwKLTB4MjcsMHg4NCwweGI0LDB4YTAsMHgwMCwweDY0LDB4MTgsMHgyMSwweDkwLDB4NjMsMHgwMCwweDAwLDB4MTAsMHhhMCwweDAwLDB4MmIsCi0weDJjLDB4NjQsMHgwMCwweDBjLDB4MTQsMHg4MCwweDAwLDB4MDQsMHgwMCwweDYwLDB4MTAsMHgyMSwweDAwLDB4MDYsMHgxMSwweDAwLAotMHgwMCwweDYyLDB4MTAsMHgyMSwweDI0LDB4NDIsMHgwMCwweDI0LDB4M2MsMHgwMSwweGIwLDB4MDMsMHhhMCwweDIyLDB4MDAsMHhlMSwKLTB4MTQsMHg4MCwweDAwLDB4MDYsMHgwMCwweDYwLDB4MjgsMHgyMSwweDAwLDB4MDcsMHgxMCwweDQwLDB4MDAsMHg0NiwweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMSwweDAwLDB4MDAsMHg2MiwweDEwLDB4MjEsMHgyNCwweDQ1LDB4MDAsMHgwNCwweDAxLDB4NDksMHgxMCwweDIxLAotMHgyNywweDgzLDB4OTAsMHgxMCwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweGEwLDB4MTgsMHgyMSwKLTB4YTAsMHg0NSwweDAwLDB4MDMsMHhhMCwweDQ1LDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDA4LDB4MTIsMHgwMiwweDAwLDB4MGIsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MDAsMHg2MCwweDI4LDB4MjEsMHgwMiwweDQwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgxZiwweDZmLAotMHhhZiwweGEyLDB4MDAsMHgxMCwweDMwLDB4NTQsMHhmZiwweGZmLDB4OTIsMHg0MiwweDAwLDB4MTYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHgwMiwweDEwLDB4MjUsMHgwOCwweDAwLDB4MGEsMHgzZiwweGEyLDB4NDIsMHgwMCwweDE2LDB4MDAsMHg2MCwweDI4LDB4MjEsCi0weDAyLDB4NDAsMHgyMCwweDIxLDB4MGMsMHgwMCwweDFmLDB4MjAsMHhhZiwweGEwLDB4MDAsMHgxMCwweDA4LDB4MDAsMHgwYSwweGMyLAotMHgzMCwweDU0LDB4ZmYsMHhmZiwweDA4LDB4MDAsMHgwYSwweGFhLDB4MDAsMHg2MCwweDEwLDB4MjEsMHgxNCwweDgwLDB4ZmYsMHhmZCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MTEsMHgwMCwweDAwLDB4NjIsMHgxMCwweDIxLDB4MDgsMHgwMCwweDBhLDB4YWEsCi0weDI0LDB4NDIsMHgwMCwweDA0LDB4MjcsMHg4MiwweDkwLDB4MTAsMHgwMSwweDAyLDB4MTAsMHgyMSwweDkwLDB4NDMsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MGEsMHhiYSwweGEwLDB4NDMsMHgwMCwweDAzLDB4OTYsMHg2OSwweDAwLDB4MTQsMHgwMiwweGMwLDB4YjgsMHgyMSwKLTB4MjQsMHgwYiwweDAwLDB4MDEsMHgwMCwweDA5LDB4MTAsMHhjMCwweDAwLDB4NDksMHgxOCwweDIxLDB4MDAsMHgwMywweDQwLDB4ODAsCi0weDAwLDB4NDAsMHg1MCwweDIxLDB4MjcsMHg4MiwweDkwLDB4MDQsMHgwMSwweDAyLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDE4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4NjUsMHgwMCwweDA4LDB4OGMsMHg2MiwweDAwLDB4MGMsMHg4YywweDYyLDB4MDAsMHgwNCwKLTB4MDAsMHgwNSwweDI0LDB4NDIsMHgwMCwweDA1LDB4MWMsMHg4MiwweDMwLDB4NDIsMHgwMCwweDEwLDB4MzAsMHg2NiwweDAwLDB4MDEsCi0weDEwLDB4NDAsMHgwMCwweDBkLDB4MzAsMHg4NywweDAwLDB4MDEsMHgyNywweDgyLDB4OTAsMHgxOCwweDAxLDB4MDIsMHgxMCwweDIxLAotMHg4MCwweDQzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1OCwweDIxLDB4MDAsMHgwMywweDExLDB4MDAsMHgwMCwweDQzLDB4MTAsMHgyMywKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQzLDB4MTAsMHgyMywweDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4MywweGI1LDB4NzAsCi0weDAwLDB4NDMsMHgxMCwweDIxLDB4YTAsMHg0MCwweDAwLDB4MDQsMHgxMSwweDYwLDB4MDAsMHg0ZiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDQ5LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgyMCwweDgwLDB4MjcsMHg4NSwweDkwLDB4MTAsMHgwMCwweDg1LDB4MTAsMHgyMSwKLTB4ODAsMHg0MywweDAwLDB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NjAsMHgwMCwweDQyLDB4MDEsMHg0OSwweDEwLDB4MjEsCi0weDI3LDB4ODIsMHg5MCwweDE4LDB4MDAsMHg4MiwweDEwLDB4MjEsMHg4MCwweDQ0LDB4MDAsMHgwMCwweDI3LDB4ODIsMHhiNSwweDc4LAotMHgwMCwweDA0LDB4MTksMHgwMCwweDAwLDB4NjQsMHgxOCwweDIzLDB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDY0LDB4MTgsMHgyMywKLTB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDYyLDB4MTAsMHgyMSwweDkwLDB4NDUsMHgwMCwweDA1LDB4MjcsMHg4NCwweGI0LDB4YTAsCi0weDAwLDB4NjQsMHgxOCwweDIxLDB4OTAsMHg2MywweDAwLDB4MDAsMHgxMCwweGEwLDB4MDAsMHgyYywweDJjLDB4NjQsMHgwMCwweDBjLAotMHgxNCwweDgwLDB4MDAsMHgwNCwweDAwLDB4NjAsMHgxMCwweDIxLDB4MDAsMHgwNiwweDExLDB4MDAsMHgwMCwweDYyLDB4MTAsMHgyMSwKLTB4MjQsMHg0MiwweDAwLDB4MjQsMHgzYywweDAxLDB4YjAsMHgwMywweGEwLDB4MjIsMHgwMCwweGUxLDB4MTQsMHg4MCwweDAwLDB4MDYsCi0weDAwLDB4NjAsMHgyOCwweDIxLDB4MDAsMHgwNywweDEwLDB4NDAsMHgwMCwweDQ2LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMSwweDAwLAotMHgwMCwweDYyLDB4MTAsMHgyMSwweDI0LDB4NDUsMHgwMCwweDA0LDB4MDEsMHg0OSwweDEwLDB4MjEsMHgyNywweDgzLDB4OTAsMHgxMCwKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4YTAsMHgxOCwweDIxLDB4YTAsMHg0NSwweDAwLDB4MDMsCi0weGEwLDB4NDUsMHgwMCwweDAwLDB4OGYsMHhhNCwweDAwLDB4MTgsMHgyNCwweDAyLDB4MDAsMHgwOCwweDEwLDB4ODIsMHgwMCwweDBjLAotMHgwMCwweDYwLDB4MjgsMHgyMSwweDI0LDB4MDIsMHgwMCwweDAxLDB4MDIsMHg2MCwweDIwLDB4MjEsMHgwYywweDAwLDB4MWYsMHg2ZiwKLTB4YWYsMHhhMiwweDAwLDB4MTAsMHg4ZiwweGEzLDB4MDAsMHgxOCwweDMwLDB4NTQsMHhmZiwweGZmLDB4OTIsMHg2MiwweDAwLDB4MTYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MiwweDEwLDB4MjUsMHgwOCwweDAwLDB4MGEsMHgzZiwweGEyLDB4NjIsMHgwMCwweDE2LAotMHgwMiwweDYwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgxZiwweDIwLDB4YWYsMHhhMCwweDAwLDB4MTAsMHgwOCwweDAwLDB4MGIsMHgzMSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MGIsMHgxOSwweDAwLDB4NjAsMHgxMCwweDIxLDB4MTQsMHg4MCwweGZmLDB4ZmQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDExLDB4MDAsMHgwMCwweDYyLDB4MTAsMHgyMSwweDA4LDB4MDAsMHgwYiwweDE5LAotMHgyNCwweDQyLDB4MDAsMHgwNCwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0NSwweDEwLDB4MjEsMHg5MCwweDQzLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDBiLDB4MjksMHhhMCwweDQzLDB4MDAsMHgwMywweDI3LDB4ODUsMHg5MCwweDEwLDB4MDgsMHgwMCwweDBiLDB4NDUsCi0weDAxLDB4NDksMHgxMCwweDIxLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgwMCwweDYyLDB4MTgsMHgyNiwweDA4LDB4MDAsMHgwYSwweDdhLAotMHgwMCwweGMyLDB4MzAsMHgyNiwweDEyLDB4MDAsMHhmZiwweDJkLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgwOCwweDAwLDB4MGEsMHg3ZiwKLTB4MjQsMHgxMSwweDAwLDB4MDIsMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAwLDB4MjcsMHhiZCwweGZmLDB4ZDAsCi0weDI0LDB4NDIsMHgyZCwweDU0LDB4MzQsMHg2MywweDAwLDB4MjAsMHgzYywweDA1LDB4YjAsMHgwNSwweGFmLDB4YjMsMHgwMCwweDI0LAotMHhhZiwweGIyLDB4MDAsMHgyMCwweGFmLDB4YjEsMHgwMCwweDFjLDB4YWYsMHhiZiwweDAwLDB4MjgsMHhhZiwweGIwLDB4MDAsMHgxOCwKLTB4YWMsMHg2MiwweDAwLDB4MDAsMHgzNCwweGE1LDB4MDIsMHg0MiwweDkwLDB4YTIsMHgwMCwweDAwLDB4MDAsMHg4MCwweDkwLDB4MjEsCi0weDI0LDB4MTEsMHgwMCwweDEwLDB4MzAsMHg1MywweDAwLDB4ZmYsMHgyNCwweDAyLDB4MDAsMHgxMCwweDEyLDB4MjIsMHgwMCwweGNmLAotMHgwMCwweDAwLDB4MTgsMHgyMSwweDI0LDB4MDIsMHgwMCwweDExLDB4MTIsMHgyMiwweDAwLDB4YzEsMHgyNCwweDAyLDB4MDAsMHgxMiwKLTB4MTIsMHgyMiwweDAwLDB4YjQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NjAsMHgwMCwweGFkLDB4YWUsMHg0MywweDAwLDB4NDAsCi0weDNjLDB4MDIsMHhiMCwweDA1LDB4MzQsMHg0MiwweDAyLDB4MmMsMHg4YywweDQ0LDB4MDAsMHgwMCwweDNjLDB4MDMsMHgwMCwweDAyLAotMHgzNCwweDYzLDB4MDAsMHhmZiwweDAwLDB4ODMsMHg4MCwweDI0LDB4MDAsMHgxMCwweDE0LDB4NDMsMHgxMCwweDQwLDB4MDAsMHgwNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZSwweDQyLDB4MDAsMHgzNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweDAwLDB4OTIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTMsMHg4MywweDhiLDB4NzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NjIsMHgwMCwweDAyLAotMHgxMCwweDQwLDB4MDAsMHgwNCwweDMyLDB4MTAsMHgwMCwweGZmLDB4MDAsMHgxMCwweDExLDB4YzMsMHgxNCwweDQwLDB4MDAsMHg4NiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNiwweDAwLDB4MDAsMHgxNSwweDAyLDB4MDAsMHgxMCwweDIxLDB4MjYsMHgyMiwweDAwLDB4MDEsCi0weDMwLDB4NTEsMHgwMCwweGZmLDB4MmUsMHgyMywweDAwLDB4MTMsMHgxNCwweDYwLDB4ZmYsMHhkYiwweDI0LDB4MDMsMHgwMCwweDAyLAotMHgxMiwweDYzLDB4MDAsMHg3MywweDI0LDB4MDIsMHgwMCwweDA1LDB4MmEsMHg2MiwweDAwLDB4MDMsMHgxMCwweDQwLDB4MDAsMHg1OCwKLTB4MjQsMHgwMiwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEyLDB4NjIsMHgwMCwweDRiLDB4MDIsMHg0MCwweDIwLDB4MjEsCi0weDNjLDB4MDIsMHhiMCwweDA1LDB4MzQsMHg0MiwweDAyLDB4MmMsMHg4YywweDQzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzMCwweDcwLDB4MDAsMHhmZiwweDEyLDB4MDAsMHgwMCwweDA2LDB4MDIsMHgwMCwweDEwLDB4MjEsMHg4ZiwweGJmLDB4MDAsMHgyOCwKLTB4N2IsMHhiMiwweDAxLDB4M2MsMHg3YiwweGIwLDB4MDAsMHhmYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MzAsCi0weDkyLDB4NDYsMHgwMCwweDA0LDB4OGUsMHg0MywweDAwLDB4MjQsMHgyNCwweDAyLDB4MDAsMHgwNywweDAyLDB4NDAsMHgyMCwweDIxLAotMHgwMCwweDAwLDB4MjgsMHgyMSwweDI0LDB4MDcsMHgwMCwweDA2LDB4YWYsMHhhMiwweDAwLDB4MTAsMHgwYywweDAwLDB4MDksMHhlYSwKLTB4YWYsMHhhMywweDAwLDB4MTQsMHhhZSwweDQyLDB4MDAsMHgyNCwweDNjLDB4MDIsMHhiMCwweDA1LDB4OGMsMHg0MiwweDAyLDB4MmMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg1MCwweDAwLDB4ZmYsMHgxNiwweDAwLDB4ZmYsMHhlYywweDAyLDB4MDAsMHgxMCwweDIxLAotMHg5MiwweDQ2LDB4MDAsMHgwNSwweDhlLDB4NDMsMHgwMCwweDI4LDB4MjQsMHgwMiwweDAwLDB4MDUsMHgwMiwweDQwLDB4MjAsMHgyMSwKLTB4MjQsMHgwNSwweDAwLDB4MDEsMHgyNCwweDA3LDB4MDAsMHgwNCwweGFmLDB4YTIsMHgwMCwweDEwLDB4MGMsMHgwMCwweDA5LDB4ZWEsCi0weGFmLDB4YTMsMHgwMCwweDE0LDB4YWUsMHg0MiwweDAwLDB4MjgsMHgzYywweDAyLDB4YjAsMHgwNSwweDhjLDB4NDIsMHgwMiwweDJjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NTAsMHgwMCwweGZmLDB4MTYsMHgwMCwweGZmLDB4ZGMsMHgwMiwweDAwLDB4MTAsMHgyMSwKLTB4OTIsMHg0NiwweDAwLDB4MDYsMHg4ZSwweDQzLDB4MDAsMHgyYywweDI0LDB4MDIsMHgwMCwweDAzLDB4MDIsMHg0MCwweDIwLDB4MjEsCi0weDI0LDB4MDUsMHgwMCwweDAyLDB4MDAsMHgwMCwweDM4LDB4MjEsMHhhZiwweGEyLDB4MDAsMHgxMCwweDBjLDB4MDAsMHgwOSwweGVhLAotMHhhZiwweGEzLDB4MDAsMHgxNCwweGFlLDB4NDIsMHgwMCwweDJjLDB4M2MsMHgwMiwweGIwLDB4MDUsMHg4YywweDQyLDB4MDIsMHgyYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDUwLDB4MDAsMHhmZiwweDE2LDB4MDAsMHhmZiwweGNjLDB4MDIsMHgwMCwweDEwLDB4MjEsCi0weDkyLDB4NDYsMHgwMCwweDA3LDB4OGUsMHg0MywweDAwLDB4MzAsMHgyNCwweDAyLDB4MDAsMHgwMiwweDAyLDB4NDAsMHgyMCwweDIxLAotMHgyNCwweDA1LDB4MDAsMHgwMywweDI0LDB4MDcsMHgwMCwweDAxLDB4YWYsMHhhMiwweDAwLDB4MTAsMHgwYywweDAwLDB4MDksMHhlYSwKLTB4YWYsMHhhMywweDAwLDB4MTQsMHhhZSwweDQyLDB4MDAsMHgzMCwweDNjLDB4MDIsMHhiMCwweDA1LDB4OGMsMHg0MiwweDAyLDB4MmMsCi0weDA4LDB4MDAsMHgwYiwweDliLDB4MzAsMHg0MiwweDAwLDB4ZmYsMHg5MiwweDQ2LDB4MDAsMHgwNCwweDhlLDB4NDMsMHgwMCwweDI0LAotMHgyNCwweDAyLDB4MDAsMHgwNywweDAwLDB4MDAsMHgyOCwweDIxLDB4MjQsMHgwNywweDAwLDB4MDYsMHhhZiwweGEyLDB4MDAsMHgxMCwKLTB4MGMsMHgwMCwweDA5LDB4ZWEsMHhhZiwweGEzLDB4MDAsMHgxNCwweDA4LDB4MDAsMHgwYiwweDk0LDB4YWUsMHg0MiwweDAwLDB4MjQsCi0weDEyLDB4NjIsMHgwMCwweDBkLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwweDAyLDB4MDAsMHgwOCwweDE2LDB4NjIsMHhmZiwweGE4LAotMHgwMiwweDQwLDB4MjAsMHgyMSwweDkyLDB4NDYsMHgwMCwweDA3LDB4OGUsMHg0MiwweDAwLDB4MzAsMHgyNCwweDA1LDB4MDAsMHgwMywKLTB4MjQsMHgwNywweDAwLDB4MDEsMHhhZiwweGEzLDB4MDAsMHgxMCwweDBjLDB4MDAsMHgwOSwweGVhLDB4YWYsMHhhMiwweDAwLDB4MTQsCi0weDA4LDB4MDAsMHgwYiwweDk0LDB4YWUsMHg0MiwweDAwLDB4MzAsMHg5MiwweDQ2LDB4MDAsMHgwNiwweDhlLDB4NDMsMHgwMCwweDJjLAotMHgwMiwweDQwLDB4MjAsMHgyMSwweDI0LDB4MDUsMHgwMCwweDAyLDB4MDAsMHgwMCwweDM4LDB4MjEsMHhhZiwweGEyLDB4MDAsMHgxMCwKLTB4MGMsMHgwMCwweDA5LDB4ZWEsMHhhZiwweGEzLDB4MDAsMHgxNCwweDA4LDB4MDAsMHgwYiwweDk0LDB4YWUsMHg0MiwweDAwLDB4MmMsCi0weDkyLDB4NDYsMHgwMCwweDA1LDB4OGUsMHg0MywweDAwLDB4MjgsMHgwMiwweDQwLDB4MjAsMHgyMSwweDI0LDB4MDUsMHgwMCwweDAxLAotMHgyNCwweDA3LDB4MDAsMHgwNCwweGFmLDB4YTIsMHgwMCwweDEwLDB4MGMsMHgwMCwweDA5LDB4ZWEsMHhhZiwweGEzLDB4MDAsMHgxNCwKLTB4MDgsMHgwMCwweDBiLDB4OTQsMHhhZSwweDQyLDB4MDAsMHgyOCwweDBjLDB4MDAsMHgwMSwweDU3LDB4MjQsMHgwNCwweDAwLDB4MDEsCi0weDA4LDB4MDAsMHgwYiwweDg1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweDg0LDB4YjQsMHg0MCwweGFlLDB4NDAsMHgwMCwweDM0LAotMHg5NCwweDg1LDB4MDAsMHgxNCwweDBjLDB4MDAsMHgxYiwweDY2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MywweDgzLDB4OGIsMHg3MSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDYyLDB4MDAsMHgwMiwweDEwLDB4NDAsMHhmZiwweDY5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBjLDB4MDAsMHgwMSwweDU3LDB4MDAsMHgwMCwweDIwLDB4MjEsMHgwOCwweDAwLDB4MGIsMHg3ZCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMiwweDQwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgwOSwweDYxLDB4MDIsMHgyMCwweDI4LDB4MjEsMHgwOCwweDAwLDB4MGIsMHg3MSwKLTB4M2MsMHgwMiwweGIwLDB4MDUsMHg4ZSwweDQyLDB4MDAsMHgzYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweGZmLDB4NGEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHg4MiwweGI0LDB4NDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4NDIsMHgwMCwweDBhLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxOCwweDJiLDB4MDgsMHgwMCwweDBiLDB4NmUsMHhhZSwweDQzLDB4MDAsMHgzYywKLTB4OGUsMHg0MiwweDAwLDB4MzgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHhmZiwweDNkLDB4MjQsMHgwMiwweDAwLDB4MTIsCi0weDhmLDB4ODIsMHhiNCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDQyLDB4MDAsMHgwYSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAyLDB4MTgsMHgyYiwweDA4LDB4MDAsMHgwYiwweDZlLDB4YWUsMHg0MywweDAwLDB4MzgsMHg4ZSwweDQyLDB4MDAsMHgzNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4ZmYsMHgzMCwweDI0LDB4MDIsMHgwMCwweDExLDB4OGYsMHg4MiwweGI0LDB4NDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHg0MiwweDAwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxOCwweDJiLAotMHgwOCwweDAwLDB4MGIsMHg2ZSwweGFlLDB4NDMsMHgwMCwweDM0LDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwKLTB4MjcsMHhiZCwweGZmLDB4ZTAsMHgzNCwweDYzLDB4MDAsMHgyMCwweDI0LDB4NDIsMHgzMSwweDA4LDB4M2MsMHgwOCwweGIwLDB4MDMsCi0weGFmLDB4YjEsMHgwMCwweDE0LDB4YWMsMHg2MiwweDAwLDB4MDAsMHgzNSwweDA4LDB4MDEsMHgwMCwweGFmLDB4YmYsMHgwMCwweDE4LAotMHhhZiwweGIwLDB4MDAsMHgxMCwweDkxLDB4MDMsMHgwMCwweDAwLDB4MDAsMHhhMCwweDQ4LDB4MjEsMHgyNCwweDExLDB4MDAsMHgwYSwKLTB4MmMsMHhhNSwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgxMCwweDAwLDB4NDUsMHg4OCwweDBhLDB4MzAsMHg2MywweDAwLDB4MDEsCi0weDAwLDB4YzAsMHgyOCwweDIxLDB4MTQsMHg2MCwweDAwLDB4MDIsMHgwMCwweDExLDB4NDAsMHg0MCwweDAyLDB4MjAsMHg0MCwweDIxLAotMHg4NCwweDgzLDB4MDAsMHgwYywweDMxLDB4MTEsMHgwMCwweGZmLDB4MDEsMHgyMCwweDIwLDB4MjEsMHgwMCwweDAzLDB4MTAsMHhjMCwKLTB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg4MCwweDI3LDB4ODMsMHg5MCwweDA4LDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDg0LDB4NDMsMHgwMCwweDA0LDB4MjQsMHgwNiwweDAwLDB4MGUsMHgxMCwweGUwLDB4MDAsMHgwNiwweDAyLDB4MjMsMHg4MCwweDIxLAotMHgwMiwweDAwLDB4MTAsMHgyMSwweDhmLDB4YmYsMHgwMCwweDE4LDB4N2IsMHhiMCwweDAwLDB4YmMsMHgwMywweGUwLDB4MDAsMHgwOCwKLTB4MjcsMHhiZCwweDAwLDB4MjAsMHgwYywweDAwLDB4MDgsMHhlMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxMSwweDE4LDB4MjEsCi0weDA4LDB4MDAsMHgwYywweDY0LDB4MDAsMHg2MiwweDgwLDB4MjEsMHgyNywweGJkLDB4ZmYsMHhkMCwweGFmLDB4YmYsMHgwMCwweDI4LAotMHhhZiwweGI0LDB4MDAsMHgyMCwweGFmLDB4YjMsMHgwMCwweDFjLDB4YWYsMHhiMiwweDAwLDB4MTgsMHhhZiwweGI1LDB4MDAsMHgyNCwKLTB4YWYsMHhiMSwweDAwLDB4MTQsMHhhZiwweGIwLDB4MDAsMHgxMCwweDg0LDB4ODIsMHgwMCwweDBjLDB4M2MsMHgwNiwweGIwLDB4MDMsCi0weDM0LDB4YzYsMHgwMCwweDIwLDB4MDAsMHgwMiwweDE4LDB4YzAsMHgwMCwweDYyLDB4MTgsMHgyMSwweDAwLDB4MDMsMHgxOCwweDgwLAotMHgyNywweDgyLDB4OTAsMHgwNCwweDAwLDB4NjIsMHgxMCwweDIxLDB4OGMsMHg1NSwweDAwLDB4MTgsMHgzYywweDAyLDB4ODAsMHgwMCwKLTB4MjQsMHg0MiwweDMxLDB4YjgsMHhhYywweGMyLDB4MDAsMHgwMCwweDhlLDB4YjAsMHgwMCwweDA4LDB4MjcsMHg4MiwweDkwLDB4MDgsCi0weDAwLDB4NjIsMHgxOCwweDIxLDB4OTAsMHg3MSwweDAwLDB4MDcsMHgwMCwweDEwLDB4ODYsMHg0MywweDMyLDB4MTAsMHgwMCwweDAxLAotMHgwMCwweGEwLDB4MzgsMHgyMSwweDAyLDB4MDAsMHgzMCwweDIxLDB4MDAsMHhhMCwweDk4LDB4MjEsMHgwMiwweDIwLDB4MjgsMHgyMSwKLTB4MGMsMHgwMCwweDBjLDB4NDIsMHgwMCwweDgwLDB4OTAsMHgyMSwweDAyLDB4MjAsMHgyMCwweDIxLDB4MDIsMHgwMCwweDI4LDB4MjEsCi0weDI0LDB4MDYsMHgwMCwweDE0LDB4MGMsMHgwMCwweDA4LDB4ZTMsMHgwMCwweDQwLDB4YTAsMHgyMSwweDg2LDB4NDMsMHgwMCwweDBjLAotMHgzYywweDA5LDB4YjAsMHgwOSwweDNjLDB4MDgsMHhiMCwweDA5LDB4MDAsMHgwMywweDEwLDB4YzAsMHgwMCwweDQzLDB4MTAsMHgyMSwKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgyNywweDgzLDB4OTAsMHgxMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4ODAsMHg0MywweDAwLDB4MDYsCi0weDNjLDB4MDcsMHhiMCwweDA5LDB4M2MsMHgwNSwweGIwLDB4MDksMHgyOCwweDYyLDB4MDAsMHgwMCwweDI0LDB4NjQsMHgwMCwweDAzLAotMHgwMCwweDgyLDB4MTgsMHgwYiwweDAwLDB4MDMsMHgxOCwweDgzLDB4M2MsMHgwMiwweGIwLDB4MDksMHgwMCwweDAzLDB4MTgsMHg4MCwKLTB4MzQsMHg0MiwweDAxLDB4MDIsMHgzNSwweDI5LDB4MDEsMHgxMCwweDM1LDB4MDgsMHgwMSwweDE0LDB4MzQsMHhlNywweDAxLDB4MjAsCi0weDM0LDB4YTUsMHgwMSwweDI0LDB4YTQsMHg1NCwweDAwLDB4MDAsMHgxMiwweDYwLDB4MDAsMHgxMSwweDAyLDB4YTMsMHhhOCwweDIxLAotMHg4ZSwweGEyLDB4MDAsMHgwYywweDhlLDB4YTMsMHgwMCwweDA4LDB4MDAsMHgwMiwweDE0LDB4MDAsMHgwMCwweDAzLDB4MWMsMHgwMiwKLTB4MDAsMHg0MywweDEwLDB4MjEsMHhhZCwweDIyLDB4MDAsMHgwMCwweDhlLDB4YTMsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDMsMHgxYywweDAyLDB4YTUsMHgwMywweDAwLDB4MDAsMHg4ZiwweGJmLDB4MDAsMHgyOCwweDdiLDB4YjQsMHgwMSwweDNjLAotMHg3YiwweGIyLDB4MDAsMHhmYywweDdiLDB4YjAsMHgwMCwweGJjLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHgzMCwKLTB4OGUsMHhhMiwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFkLDB4MjIsMHgwMCwweDAwLDB4OGUsMHhhNCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YTUsMHgwNCwweDAwLDB4MDAsMHg3YSwweGEyLDB4MDAsMHg3YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAzLDB4MWMsMHgwMCwweDAwLDB4MDIsMHgxNCwweDAyLDB4MDAsMHg2MiwweDE4LDB4MjEsMHhhYywweGUzLDB4MDAsMHgwMCwKLTB4OGUsMHhhMiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxNCwweDAyLDB4MDgsMHgwMCwweDBjLDB4YjYsCi0weGE0LDB4YTIsMHgwMCwweDAwLDB4MjcsMHhiZCwweGZmLDB4ZTAsMHhhZiwweGIyLDB4MDAsMHgxOCwweGFmLDB4YjAsMHgwMCwweDEwLAotMHhhZiwweGJmLDB4MDAsMHgxYywweGFmLDB4YjEsMHgwMCwweDE0LDB4ODQsMHg4MiwweDAwLDB4MGMsMHgwMCwweDgwLDB4OTAsMHgyMSwKLTB4M2MsMHgwNSwweGIwLDB4MDMsMHgwMCwweDAyLDB4MjAsMHhjMCwweDAwLDB4ODIsMHgyMCwweDIxLDB4MDAsMHgwNCwweDIwLDB4ODAsCi0weDI3LDB4ODIsMHg5MCwweDA0LDB4MDAsMHg4MiwweDEwLDB4MjEsMHg4YywweDUxLDB4MDAsMHgxOCwweDNjLDB4MDIsMHg4MCwweDAwLAotMHgzNCwweGE1LDB4MDAsMHgyMCwweDI0LDB4NDIsMHgzMywweDM0LDB4MjcsMHg4MywweDkwLDB4MDgsMHhhYywweGEyLDB4MDAsMHgwMCwKLTB4MDAsMHg4MywweDIwLDB4MjEsMHgzYywweDAyLDB4YjAsMHgwMywweDkwLDB4ODYsMHgwMCwweDA3LDB4MzQsMHg0MiwweDAxLDB4MDAsCi0weDhlLDB4MjMsMHgwMCwweDA4LDB4OTAsMHg0NCwweDAwLDB4MDAsMHgyYywweGM1LDB4MDAsMHgwNCwweDI0LDB4MDIsMHgwMCwweDEwLAotMHgyNCwweDEwLDB4MDAsMHgwYSwweDAwLDB4NDUsMHg4MCwweDBhLDB4MDAsMHgwMywweDFlLDB4NDMsMHgzMCwweDg0LDB4MDAsMHgwMSwKLTB4MzAsMHg2NSwweDAwLDB4MDEsMHgxNCwweDgwLDB4MDAsMHgwMiwweDAwLDB4MTAsMHgxMCwweDQwLDB4MDIsMHgwMCwweDEwLDB4MjEsCi0weDAwLDB4YzAsMHgyMCwweDIxLDB4MjQsMHgwNiwweDAwLDB4MjAsMHgwYywweDAwLDB4MDgsMHhlMywweDMwLDB4NTAsMHgwMCwweGZmLAotMHg4NiwweDQ0LDB4MDAsMHgwYywweDI3LDB4ODUsMHg5MCwweDEwLDB4M2MsMHgwNiwweGIwLDB4MDksMHgwMCwweDA0LDB4MTgsMHhjMCwKLTB4MDAsMHg2NCwweDE4LDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjUsMHgxOCwweDIxLDB4ODAsMHg2NCwweDAwLDB4MDYsCi0weDAwLDB4NTAsMHgxMCwweDIxLDB4MzQsMHhjNiwweDAxLDB4MDIsMHgyNCwweDg1LDB4MDAsMHgwMywweDI4LDB4ODMsMHgwMCwweDAwLAotMHgwMCwweGEzLDB4MjAsMHgwYiwweDAwLDB4MDQsMHgyMCwweDgzLDB4MDAsMHgwNCwweDIwLDB4ODAsMHhhNCwweGMyLDB4MDAsMHgwMCwKLTB4MDIsMHgyNCwweDIwLDB4MjEsMHg4YywweDgzLDB4MDAsMHgwNCwweDNjLDB4MDIsMHhiMCwweDA5LDB4MzQsMHg0MiwweDAxLDB4MTAsCi0weGFjLDB4NDMsMHgwMCwweDAwLDB4OGMsMHg4NiwweDAwLDB4MDgsMHgzYywweDAyLDB4YjAsMHgwOSwweDM0LDB4NDIsMHgwMSwweDE0LAotMHhhNCwweDQ2LDB4MDAsMHgwMCwweDhjLDB4ODUsMHgwMCwweDBjLDB4OGMsMHg4MiwweDAwLDB4MDgsMHgzYywweDA2LDB4YjAsMHgwOSwKLTB4MDAsMHgwNSwweDJjLDB4MDAsMHgwMCwweDAyLDB4MTQsMHgwMiwweDAwLDB4YTIsMHgyOCwweDIxLDB4MzQsMHhjNiwweDAxLDB4MjAsCi0weGFjLDB4YzUsMHgwMCwweDAwLDB4OGMsMHg4MywweDAwLDB4MGMsMHgzYywweDA1LDB4YjAsMHgwOSwweDM0LDB4YTUsMHgwMSwweDI0LAotMHgwMCwweDAzLDB4MWMsMHgwMiwweGE0LDB4YTMsMHgwMCwweDAwLDB4OTIsMHg0MiwweDAwLDB4MGEsMHgzYywweDAzLDB4YjAsMHgwOSwKLTB4MzQsMHg2MywweDAxLDB4MzAsMHgwMCwweDAyLDB4MTMsMHgwMCwweDI0LDB4NDIsMHgwMCwweDA0LDB4MzAsMHg0MiwweGZmLDB4ZmYsCi0weGE0LDB4NjIsMHgwMCwweDAwLDB4ODYsMHg0NCwweDAwLDB4MGMsMHgyNywweDgzLDB4OTAsMHgxOCwweDhmLDB4YmYsMHgwMCwweDFjLAotMHgwMCwweDA0LDB4MTAsMHhjMCwweDAwLDB4NDQsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQzLDB4MTAsMHgyMSwKLTB4OTQsMHg0NCwweDAwLDB4MDIsMHg4ZiwweGIyLDB4MDAsMHgxOCwweDdiLDB4YjAsMHgwMCwweGJjLDB4M2MsMHgwNSwweGIwLDB4MDksCi0weDM0LDB4YTUsMHgwMSwweDMyLDB4YTQsMHhhNCwweDAwLDB4MDAsMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDIwLAotMHgyNywweGJkLDB4ZmYsMHhlMCwweDNjLDB4MDIsMHhiMCwweDAzLDB4M2MsMHgwMywweDgwLDB4MDAsMHhhZiwweGIwLDB4MDAsMHgxMCwKLTB4MzQsMHg0MiwweDAwLDB4MjAsMHgwMCwweGEwLDB4ODAsMHgyMSwweDI0LDB4NjMsMHgzNCwweGMwLDB4MDAsMHgwNSwweDJjLDB4NDMsCi0weGFmLDB4YjEsMHgwMCwweDE0LDB4YWYsMHhiZiwweDAwLDB4MTgsMHhhYywweDQzLDB4MDAsMHgwMCwweDEwLDB4YTAsMHgwMCwweDA1LAotMHgwMCwweDgwLDB4ODgsMHgyMSwweDhjLDB4ODIsMHgwMCwweDM0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHhiNiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMiwweDEwLDB4MDAsMHhmZiwweDEyLDB4MDAsMHgwMCwweDRjLDB4MDAsMHgwMCwweDEwLDB4MjEsCi0weDI0LDB4MDIsMHgwMCwweDA4LDB4MTIsMHgwMiwweDAwLDB4YTMsMHgyYSwweDAyLDB4MDAsMHgwOSwweDEwLDB4NDAsMHgwMCwweDg5LAotMHgyNCwweDAyLDB4MDAsMHg0MCwweDI0LDB4MDQsMHgwMCwweDAyLDB4MTIsMHgwNCwweDAwLDB4NzksMHgyYSwweDAyLDB4MDAsMHgwMywKLTB4MTAsMHg0MCwweDAwLDB4NjksMHgyNCwweDAyLDB4MDAsMHgwNCwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTIsMHgwMiwweDAwLDB4NWEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDUsMHgzNCwweDQyLDB4MDAsMHgwOCwweDNjLDB4MDMsMHg4MCwweDAwLAotMHhhMiwweDIwLDB4MDAsMHg0ZSwweGFjLDB4NDMsMHgwMCwweDAwLDB4ODIsMHgyNCwweDAwLDB4MTEsMHg5MiwweDI3LDB4MDAsMHgxMSwKLTB4MTAsMHg4MCwweDAwLDB4NGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkyLDB4MjYsMHgwMCwweDBhLDB4MjQsMHgwMiwweDAwLDB4MTIsCi0weDEwLDB4NDYsMHgwMCwweDA5LDB4MzAsMHhjMiwweDAwLDB4ZmYsMHgyNywweDgzLDB4YjQsMHgwMCwweDAwLDB4MDIsMHgxMCwweDgwLAotMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDgzLDB4MDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhNiwweDIzLDB4MDAsMHgwYywweDNjLDB4MDIsMHhiMCwweDA5LDB4MzQsMHg0MiwweDAwLDB4NDAsCi0weDkwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDYzLDB4MDAsMHgwMywweGEyLDB4MjMsMHgwMCwweDEwLAotMHgxNCwweDYwLDB4MDAsMHgyYiwweDMwLDB4NjUsMHgwMCwweDAxLDB4MzAsMHhjMiwweDAwLDB4ZmYsMHgyNywweDgzLDB4YjQsMHgwMCwKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDAwLDB4ODIsMHgyMywweDAwLDB4MTIsCi0weDkwLDB4ODIsMHgwMCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTEsMHg0MiwweDMwLDB4NDIsMHgwMCwweDAxLAotMHgwMCwweDYyLDB4MTgsMHgyMSwweDAwLDB4MDMsMHgyNiwweDAwLDB4MTQsMHg4MCwweDAwLDB4MTgsMHhhMiwweDIzLDB4MDAsMHgxMiwKLTB4MDAsMHgwNywweDE2LDB4MDAsMHgxNCwweDQwLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMCwweDAxLDB4OTYsMHgyMywweDAwLDB4MGMsCi0weDI3LDB4ODQsMHg5MCwweDEwLDB4MDAsMHgwMywweDEwLDB4YzAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLAotMHgwMCwweDQ0LDB4MTAsMHgyMSwweDgwLDB4NDUsMHgwMCwweDA2LDB4MDAsMHgwMywweDFhLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMCwKLTB4MDAsMHg2NSwweDE4LDB4MjEsMHgwMCwweDYyLDB4MTgsMHgyMSwweDkwLDB4NjQsMHgwMCwweDAwLDB4OTAsMHg2MiwweDAwLDB4MDQsCi0weGEyLDB4MjAsMHgwMCwweDE1LDB4YTMsMHg4MCwweDhiLDB4ZDQsMHgyNCwweDAyLDB4MDAsMHgwMSwweDhmLDB4YmYsMHgwMCwweDE4LAotMHg3YiwweGIwLDB4MDAsMHhiYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjAsMHgwYywweDAwLDB4MGMsMHhjZCwKLTB4MDIsMHgyMCwweDIwLDB4MjEsMHg5MiwweDI3LDB4MDAsMHgxMSwweDA4LDB4MDAsMHgwZCwweDdkLDB4MDAsMHgwNywweDE2LDB4MDAsCi0weDBjLDB4MDAsMHgwYywweDZlLDB4MDIsMHgyMCwweDIwLDB4MjEsMHg4NiwweDIzLDB4MDAsMHgwYywweDI3LDB4ODQsMHg5MCwweDA4LAotMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ0LDB4MjAsMHgyMSwKLTB4OTAsMHg4NSwweDAwLDB4MDcsMHgyNywweDgzLDB4OTAsMHgxMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4YTIsMHgyNSwweDAwLDB4MTMsCi0weDkwLDB4ODMsMHgwMCwweDA3LDB4MDgsMHgwMCwweDBkLDB4OTUsMHhhMCwweDQzLDB4MDAsMHgwMiwweDkyLDB4MjYsMHgwMCwweDBhLAotMHgwOCwweDAwLDB4MGQsMHg1ZSwweDMwLDB4YzIsMHgwMCwweGZmLDB4OGUsMHgyMiwweDAwLDB4MjQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHg1MCwweDAwLDB4MDcsMHhhMiwweDIwLDB4MDAsMHgwOCwweDI0LDB4MDIsMHgwMCwweDA3LDB4YTIsMHgyMiwweDAwLDB4MGEsCi0weDkyLDB4MjIsMHgwMCwweDI3LDB4YWUsMHgyMCwweDAwLDB4MjQsMHgwOCwweDAwLDB4MGQsMHg1MSwweGEyLDB4MjIsMHgwMCwweDA0LAotMHgwOCwweDAwLDB4MGQsMHhhZiwweDI0LDB4MDIsMHgwMCwweDA2LDB4MTYsMHgwMiwweGZmLDB4OWIsMHgzYywweDAyLDB4YjAsMHgwNSwKLTB4OGUsMHgyMywweDAwLDB4MmMsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4NjIsMHgwMCwweDA3LDB4YTIsMHgyNCwweDAwLDB4MDgsCi0weDI0LDB4MDIsMHgwMCwweDAzLDB4YTIsMHgyMiwweDAwLDB4MGEsMHg5MiwweDIyLDB4MDAsMHgyZiwweGFlLDB4MjAsMHgwMCwweDJjLAotMHgwOCwweDAwLDB4MGQsMHg1MSwweGEyLDB4MjIsMHgwMCwweDA2LDB4MDgsMHgwMCwweDBkLDB4YmUsMHhhMiwweDIwLDB4MDAsMHgwYSwKLTB4OGUsMHgyMiwweDAwLDB4MjgsMHgyNCwweDAzLDB4MDAsMHgwMSwweDI0LDB4MDQsMHgwMCwweDAxLDB4MTAsMHg0NCwweDAwLDB4MDcsCi0weGEyLDB4MjMsMHgwMCwweDA4LDB4MjQsMHgwMiwweDAwLDB4MDUsMHhhMiwweDIyLDB4MDAsMHgwYSwweDkyLDB4MjIsMHgwMCwweDJiLAotMHhhZSwweDIwLDB4MDAsMHgyOCwweDA4LDB4MDAsMHgwZCwweDUxLDB4YTIsMHgyMiwweDAwLDB4MDUsMHgwOCwweDAwLDB4MGQsMHhjYSwKLTB4MjQsMHgwMiwweDAwLDB4MDQsMHgxMiwweDAyLDB4MDAsMHgxMiwweDJhLDB4MDIsMHgwMCwweDQxLDB4MTAsMHg0MCwweDAwLDB4MDksCi0weDI0LDB4MDIsMHgwMCwweDgwLDB4MjQsMHgwMiwweDAwLDB4MjAsMHgxNiwweDAyLDB4ZmYsMHg3YiwweDNjLDB4MDIsMHhiMCwweDA1LAotMHgyNCwweDAyLDB4MDAsMHgxMiwweGEyLDB4MjIsMHgwMCwweDBhLDB4YTIsMHgyMiwweDAwLDB4MDgsMHgwOCwweDAwLDB4MGQsMHg1MSwKLTB4YWUsMHgyMCwweDAwLDB4M2MsMHgxNiwweDAyLDB4ZmYsMHg3NCwweDNjLDB4MDIsMHhiMCwweDA1LDB4MjQsMHgwMiwweDAwLDB4MTAsCi0weGEyLDB4MjIsMHgwMCwweDBhLDB4YTIsMHgyMiwweDAwLDB4MDgsMHgwOCwweDAwLDB4MGQsMHg1MSwweGFlLDB4MjAsMHgwMCwweDM0LAotMHgyNCwweDAyLDB4MDAsMHgxMSwweGEyLDB4MjIsMHgwMCwweDBhLDB4YTIsMHgyMiwweDAwLDB4MDgsMHgwOCwweDAwLDB4MGQsMHg1MSwKLTB4YWUsMHgyMCwweDAwLDB4MzgsMHg4ZSwweDI0LDB4MDAsMHgzMCwweDI0LDB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMywweDAwLDB4MDEsCi0weDEwLDB4ODMsMHgwMCwweDA3LDB4YTIsMHgyMiwweDAwLDB4MDgsMHgyNCwweDAyLDB4MDAsMHgwMiwweGEyLDB4MjIsMHgwMCwweDBhLAotMHg5MiwweDIyLDB4MDAsMHgzMywweGFlLDB4MjAsMHgwMCwweDMwLDB4MDgsMHgwMCwweDBkLDB4NTEsMHhhMiwweDIyLDB4MDAsMHgwNywKLTB4MDgsMHgwMCwweDBkLDB4ZjAsMHhhMiwweDI0LDB4MDAsMHgwYSwweDhmLDB4ODQsMHhiNCwweDQwLDB4YWUsMHgyMCwweDAwLDB4MzQsCi0weDk0LDB4ODUsMHgwMCwweDE0LDB4MGMsMHgwMCwweDFiLDB4NjYsMHgzMiwweDEwLDB4MDAsMHhmZiwweDA4LDB4MDAsMHgwZCwweDQyLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgyNCwweDQyLDB4MzcsMHhmNCwKLTB4MzQsMHg2MywweDAwLDB4MjAsMHhhYywweDYyLDB4MDAsMHgwMCwweDgwLDB4YTIsMHgwMCwweDE1LDB4M2MsMHgwNiwweGIwLDB4MDUsCi0weDEwLDB4NDAsMHgwMCwweDBhLDB4MzQsMHhjNiwweDAyLDB4NTQsMHg4MywweDgzLDB4OGIsMHhkNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhhYywweDgzLDB4MDAsMHgyNCwweDhjLDB4YzIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTcsMHg0MiwKLTB4MzAsMHg0MiwweDAwLDB4MDEsMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4ODIsMHgwMCwweDI4LDB4OGMsMHg4MiwweDAwLDB4MmMsCi0weDNjLDB4MDYsMHhiMCwweDA1LDB4MzQsMHhjNiwweDA0LDB4NTAsMHgwMCwweDAyLDB4MTgsMHg0MywweDMwLDB4NjMsMHgwMCwweDAxLAotMHgxMCwweDQwLDB4MDAsMHgwNCwweDMwLDB4NDUsMHgwMCwweDAxLDB4YWMsMHg4MywweDAwLDB4MjgsMHgwMywweGUwLDB4MDAsMHgwOCwKLTB4YWMsMHg4NSwweDAwLDB4MjQsMHg5MCwweGMyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmYsCi0weDMwLDB4NDMsMHgwMCwweDAyLDB4MzAsMHg0MiwweDAwLDB4MDEsMHhhYywweDgzLDB4MDAsMHgyOCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHhhYywweDgyLDB4MDAsMHgyNCwweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHhkOCwKLTB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4MzgsMHg4NCwweGFjLDB4NjIsMHgwMCwweDAwLDB4YWYsMHhiMSwweDAwLDB4MWMsCi0weGFmLDB4YmYsMHgwMCwweDIwLDB4YWYsMHhiMCwweDAwLDB4MTgsMHg5MCwweGE2LDB4MDAsMHgwYSwweDI3LDB4ODMsMHhiNCwweDAwLAotMHgwMCwweGEwLDB4ODgsMHgyMSwweDAwLDB4MDYsMHgxMCwweDgwLDB4MDAsMHg0MywweDEwLDB4MjEsMHg4YywweDUwLDB4MDAsMHgwMCwKLTB4ODAsMHhhNSwweDAwLDB4MTEsMHg5MiwweDAzLDB4MDAsMHgxMiwweDEwLDB4YTAsMHgwMCwweDA0LDB4YTIsMHgyMCwweDAwLDB4MTUsCi0weDI0LDB4MDIsMHgwMCwweDEyLDB4MTAsMHhjMiwweDAwLDB4ZGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4MjIsMHgwMCwweDEyLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDY3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDIwLDB4MDAsMHgxMiwKLTB4YTIsMHgwMCwweDAwLDB4MTksMHg4NiwweDIzLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDEwLDB4YzAsCi0weDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgyNywweDgzLDB4OTAsMHgyMCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHhhMCwweDQwLDB4MDAsMHgwMCwweDkyLDB4MDMsMHgwMCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDYzLDB4MDAsMHhkZiwKLTB4YTIsMHgwMywweDAwLDB4MTYsMHg4MiwweDAyLDB4MDAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweDAwLDB4MjAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTIsMHgyMywweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NjAsMHgwMCwweDQ1LAotMHgyNCwweDAyLDB4MDAsMHgwMSwweGEyLDB4MjAsMHgwMCwweDA0LDB4OTIsMHgwOCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTUsMHgwMCwweDAwLDB4MWUsMHgyNCwweDAyLDB4MDAsMHgwMSwweDkyLDB4MDcsMHgwMCwweDBhLDB4YTIsMHgwMiwweDAwLDB4MTcsCi0weDkyLDB4MDIsMHgwMCwweDE2LDB4MzAsMHhlMywweDAwLDB4ZmYsMHgzMCwweDQyLDB4MDAsMHhlNCwweDEwLDB4NjAsMHgwMCwweDAzLAotMHhhMiwweDAyLDB4MDAsMHgxNiwweDM0LDB4NDIsMHgwMCwweDAxLDB4YTIsMHgwMiwweDAwLDB4MTYsMHgxMSwweDAwLDB4MDAsMHgwNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MiwweDAyLDB4MDAsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHg0MiwweDAwLDB4MDIsCi0weGEyLDB4MDIsMHgwMCwweDE2LDB4OTIsMHgwMiwweDAwLDB4MTcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDk2LDB4MDIsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhNiwweDAyLDB4MDAsMHgxNCwKLTB4OGYsMHhiZiwweDAwLDB4MjAsMHg3YiwweGIwLDB4MDAsMHhmYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjgsCi0weDk2LDB4MDIsMHgwMCwweDAwLDB4MDgsMHgwMCwweDBlLDB4NmMsMHhhNiwweDAyLDB4MDAsMHgxNCwweDkyLDB4MDcsMHgwMCwweDBhLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4ZTAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MGUsMHg1OCwKLTB4YTIsMHgwMCwweDAwLDB4MTcsMHg5NiwweDA0LDB4MDAsMHgwMCwweDk2LDB4MDUsMHgwMCwweDA2LDB4MjcsMHg4NiwweDkwLDB4MDAsCi0weDAwLDB4MDQsMHgxOCwweGMwLDB4MDAsMHg2NCwweDE4LDB4MjEsMHgwMCwweDA1LDB4MTAsMHhjMCwweDAwLDB4NDUsMHgxMCwweDIxLAotMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjYsMHgxOCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ2LDB4MTAsMHgyMSwKLTB4OGMsMHg2NiwweDAwLDB4MDgsMHg4YywweDQ1LDB4MDAsMHgwOCwweDNjLDB4MDMsMHg4MCwweDAwLDB4MDAsMHhjMywweDIwLDB4MjQsCi0weDEwLDB4ODAsMHgwMCwweDA4LDB4MDAsMHhhMywweDEwLDB4MjQsMHgxMCwweDQwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgxOCwweDIxLAotMHgxMCwweDgwLDB4MDAsMHgwMiwweDI0LDB4MDMsMHgwMCwweDAxLDB4MDAsMHhhNiwweDE4LDB4MmIsMHgwOCwweDAwLDB4MGUsMHg1OCwKLTB4YTIsMHgwMywweDAwLDB4MTcsMHgxMCwweDQwLDB4ZmYsMHhmZCwweDAwLDB4YTYsMHgxOCwweDJiLDB4MDgsMHgwMCwweDBlLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg2MiwweDAwLDB4MDksMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4NjIsMHgwMCwweDA1LAotMHgyNCwweDAyLDB4MDAsMHgwMywweDE0LDB4NjIsMHhmZiwweGI4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MGUsMHg1MiwKLTB4YTIsMHgyMCwweDAwLDB4MDcsMHgwOCwweDAwLDB4MGUsMHg1MiwweGEyLDB4MjAsMHgwMCwweDA2LDB4MDgsMHgwMCwweDBlLDB4NTIsCi0weGEyLDB4MjAsMHgwMCwweDA1LDB4ODIsMHgyMiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDY5LAotMHgyYywweDYyLDB4MDAsMHgwMiwweDEwLDB4NDAsMHgwMCwweDQ5LDB4M2MsMHgwMiwweGIwLDB4MDksMHg5MiwweDI1LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweGE2LDB4MDAsMHhmZiwweDJjLDB4YzIsMHgwMCwweDA0LDB4MTAsMHg0MCwweDAwLDB4M2IsCi0weDJjLDB4YzIsMHgwMCwweDEwLDB4M2MsMHgwNCwweGIwLDB4MDUsMHgzNCwweDg0LDB4MDIsMHgyOSwweDkwLDB4ODMsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDAwLDB4YzIsMHgxMCwweDA0LDB4MDAsMHgwMiwweDEwLDB4MjcsMHgwMCwweDYyLDB4MTgsMHgyNCwKLTB4YTAsMHg4MywweDAwLDB4MDAsMHg4NiwweDIzLDB4MDAsMHgwYywweDk2LDB4MjYsMHgwMCwweDBjLDB4MDAsMHgwMywweDEwLDB4YzAsCi0weDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDI4LDB4ODAsMHgyNywweDgzLDB4OTAsMHgwNCwweDAwLDB4YTMsMHgxOCwweDIxLAotMHg4YywweDY0LDB4MDAsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHg4MiwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHg0MiwweDAwLDB4MTAsMHgxMCwweDQwLDB4MDAsMHgxOCwweDI0LDB4MDcsMHgwMCwweDAxLDB4OTMsMHg4MiwweDhiLDB4NzEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgxNCwweDQwLDB4MDAsMHgwYSwweDI0LDB4MDUsMHgwMCwweDI0LAotMHgwMCwweDA2LDB4MmMsMHgwMCwweDAwLDB4MDUsMHgyYywweDAzLDB4MGMsMHgwMCwweDFiLDB4NjYsMHgwMiwweDAwLDB4MjAsMHgyMSwKLTB4OTIsMHgwMiwweDAwLDB4MTYsMHhhMiwweDAwLDB4MDAsMHgxMiwweDMwLDB4NDIsMHgwMCwweGU3LDB4MDgsMHgwMCwweDBlLDB4NDksCi0weGEyLDB4MDIsMHgwMCwweDE2LDB4ZjAsMHhjNSwweDAwLDB4MDYsMHgwMCwweDAwLDB4MjgsMHgxMiwweDI3LDB4ODIsMHg5MCwweDAwLAotMHgwMCwweGEyLDB4MjgsMHgyMSwweDBjLDB4MDAsMHgwMSwweDQ5LDB4M2MsMHgwNCwweDAwLDB4ODAsMHg5NiwweDI2LDB4MDAsMHgwYywKLTB4MDgsMHgwMCwweDBlLDB4YzksMHgwMCwweDA2LDB4MmMsMHgwMCwweDI3LDB4ODMsMHg5MCwweDEwLDB4MjcsMHg4MiwweDkwLDB4MTgsCi0weDAwLDB4YTIsMHgxMCwweDIxLDB4MDAsMHhhMywweDE4LDB4MjEsMHg5MCwweDQ0LDB4MDAsMHgwMCwweDkwLDB4NjUsMHgwMCwweDA1LAotMHg5MywweDgyLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgzMCwweDIxLDB4MGMsMHgwMCwweDIxLDB4OWEsMHhhZiwweGEyLDB4MDAsMHgxMCwKLTB4OTYsMHgyNiwweDAwLDB4MGMsMHgwOCwweDAwLDB4MGUsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweGZmLDB4Y2QsCi0weDNjLDB4MDQsMHhiMCwweDA1LDB4MzQsMHg4NCwweDAyLDB4MjksMHg5MCwweDgzLDB4MDAsMHgwMCwweDMwLDB4YTUsMHgwMCwweDBmLAotMHgyNCwweDAyLDB4MDAsMHg4MCwweDA4LDB4MDAsMHgwZSwweGIyLDB4MDAsMHhhMiwweDEwLDB4MDcsMHg4NiwweDI2LDB4MDAsMHgwYywKLTB4M2MsMHgwMywweGIwLDB4MDksMHgzNCwweDQyLDB4MDEsMHg3MiwweDM0LDB4NjMsMHgwMSwweDc4LDB4OTQsMHg0NywweDAwLDB4MDAsCi0weDhjLDB4NjUsMHgwMCwweDAwLDB4MDAsMHgwNiwweDEwLDB4YzAsMHgwMCwweDQ2LDB4MTAsMHgyMSwweDNjLDB4MDQsMHhiMCwweDA5LAotMHhhZSwweDI1LDB4MDAsMHgxYywweDM0LDB4ODQsMHgwMSwweDdjLDB4MjcsMHg4MywweDkwLDB4MDQsMHgwMCwweDAyLDB4MTAsMHg4MCwKLTB4OGMsMHg4NSwweDAwLDB4MDAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDE4LDB4YWUsMHgyNSwweDAwLDB4MjAsCi0weGE2LDB4MjcsMHgwMCwweDE4LDB4OGMsMHg2NiwweDAwLDB4MDgsMHgwMiwweDIwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgwZiwweDE5LAotMHgwMCwweDAwLDB4MjgsMHgyMSwweDg2LDB4MjUsMHgwMCwweDE4LDB4OGUsMHgyNiwweDAwLDB4MWMsMHg4ZSwweDI3LDB4MDAsMHgyMCwKLTB4MDIsMHgyMCwweDIwLDB4MjEsMHgwYywweDAwLDB4MWMsMHg2OCwweGFmLDB4YTIsMHgwMCwweDEwLDB4MDgsMHgwMCwweDBlLDB4NDksCi0weGEyLDB4MDIsMHgwMCwweDEyLDB4OTIsMHgyMiwweDAwLDB4MDgsMHgwOCwweDAwLDB4MGUsMHg0OSwweGEyLDB4MjIsMHgwMCwweDA5LAotMHhhMiwweDIwLDB4MDAsMHgxMSwweDgwLDB4ODIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgwMywKLTB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDAsMHhkMCwweGFjLDB4NDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDBlLDB4NDksCi0weGEwLDB4ODAsMHgwMCwweDUwLDB4OTQsMHg4YSwweDAwLDB4MGMsMHgyNCwweDAzLDB4MDAsMHgyNCwweDAwLDB4ODAsMHg3MCwweDIxLAotMHgzYywweDAyLDB4ODAsMHgwMCwweDNjLDB4MDQsMHhiMCwweDAzLDB4MjQsMHg0MiwweDNjLDB4NjQsMHhmMSwweDQzLDB4MDAsMHgwNiwKLTB4MzQsMHg4NCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MTgsMHgxMiwweDAwLDB4YTAsMHg2OCwweDIxLDB4YWMsMHg4MiwweDAwLDB4MDAsCi0weDI3LDB4ODUsMHg5MCwweDEwLDB4MjcsMHg4MiwweDkwLDB4MGYsMHgyNywweGJkLDB4ZmYsMHhmOCwweDAwLDB4NjIsMHg2MCwweDIxLAotMHgwMCwweDY1LDB4NTgsMHgyMSwweDAwLDB4MDAsMHhjMCwweDIxLDB4MTEsMHhhMCwweDAwLDB4Y2MsMHgwMCwweDAwLDB4NzgsMHgyMSwKLTB4MDAsMHgwYSwweDFjLDB4MDAsMHgwMCwweDAzLDB4MWMsMHgwMywweDAwLDB4MDMsMHgxMCwweGMwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0NSwweDEwLDB4MjEsMHg5MSwweDg3LDB4MDAsMHgwMCwweDgwLDB4NDgsMHgwMCwweDA0LAotMHgwMywweGEwLDB4NjAsMHgyMSwweDAwLDB4MGEsMHgxYywweDAwLDB4MDAsMHgwMywweDFjLDB4MDMsMHgwMCwweDAzLDB4MTAsMHhjMCwKLTB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4NDgsMHg4MCwweDI3LDB4ODMsMHg5MCwweDA0LDB4YTMsMHhhNywweDAwLDB4MDAsCi0weDAxLDB4MjMsMHgxOCwweDIxLDB4OGMsMHg2NCwweDAwLDB4MTgsMHgyNSwweDAyLDB4ZmYsMHhmZiwweDAwLDB4NDgsMHg0MCwweDBiLAotMHg4YywweDgzLDB4MDAsMHgwNCwweDJkLDB4MDUsMHgwMCwweDA3LDB4MjQsMHgwMiwweDAwLDB4MDYsMHgzMCwweDYzLDB4MDAsMHgwOCwKLTB4MTQsMHg2MCwweDAwLDB4MzUsMHgwMCwweDQ1LDB4NDAsMHgwYSwweDkzLDB4YTcsMHgwMCwweDAwLDB4MjcsMHg4MiwweDkwLDB4MTgsCi0weDAxLDB4MjIsMHgxMCwweDIxLDB4MzAsMHhlMywweDAwLDB4ZjAsMHgzOCwweDYzLDB4MDAsMHg1MCwweDMwLDB4ZTUsMHgwMCwweGZmLAotMHgwMCwweDA1LDB4MjAsMHgyYiwweDAwLDB4MDMsMHgxOCwweDJiLDB4MDAsMHg2NCwweDE4LDB4MjQsMHg5MCwweDQ5LDB4MDAsMHgwMCwKLTB4MTAsMHg2MCwweDAwLDB4MTYsMHgzMCwweGU0LDB4MDAsMHgwZiwweDI0LDB4MDIsMHgwMCwweDA0LDB4MTAsMHhhMiwweDAwLDB4OWQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhhMCwweDAwLDB4M2EsMHgyYywweGEyLDB4MDAsMHgwYywweDEwLDB4NDAsMHgwMCwweDAyLAotMHgyNCwweDg0LDB4MDAsMHgwYywweDAwLDB4ZTAsMHgyMCwweDIxLDB4MzAsMHg4NCwweDAwLDB4ZmYsMHgwMCwweDA0LDB4MTAsMHg0MCwKLTB4MjcsMHg4MywweGJiLDB4MWMsMHgwMCwweDQ0LDB4MTAsMHgyMSwweDAwLDB4NDMsMHgxMCwweDIxLDB4OTAsMHg0NywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHhlMywweDAwLDB4MGMsMHhhMywweGE3LDB4MDAsMHgwMCwweDEwLDB4NjAsMHgwMCwweDAyLAotMHgyNCwweGUyLDB4MDAsMHgwNCwweDAwLDB4ZTAsMHgxMCwweDIxLDB4YTMsMHhhMiwweDAwLDB4MDAsMHg5MSwweDY1LDB4MDAsMHgwMCwKLTB4OTEsMHg4MiwweDAwLDB4MDAsMHgzMCwweGEzLDB4MDAsMHhmZiwweDAwLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MCwweDAwLDB4MGUsCi0weDJjLDB4NjIsMHgwMCwweDBjLDB4MTQsMHg0MCwweDAwLDB4MDMsMHgwMCwweDYwLDB4MjAsMHgyMSwweDMwLDB4YTIsMHgwMCwweDBmLAotMHgyNCwweDQ0LDB4MDAsMHgwYywweDAwLDB4MDQsMHgxMCwweDQwLDB4MDAsMHg0NCwweDIwLDB4MjEsMHgyNywweDgzLDB4YmIsMHgxYywKLTB4MDAsMHg4MywweDE4LDB4MjEsMHg5MCwweDYyLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MDUsCi0weDAwLDB4MDksMHgxMSwweDAwLDB4YTEsMHg4NSwweDAwLDB4MDAsMHg5MywweGEyLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgyNywweGJkLDB4MDAsMHgwOCwweDAwLDB4NDksMHgxMCwweDIzLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ5LDB4MTAsMHgyMywKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ0LDB4MTAsMHgyMSwweDI3LDB4ODMsMHhiNCwweGE4LDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDkwLDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweDgzLDB4MDAsMHgwYywweDE0LDB4NjAsMHgwMCwweDA2LAotMHgwMCwweDgwLDB4MTAsMHgyMSwweDAwLDB4MTgsMHgxMCwweDQwLDB4MDAsMHg0ZiwweDEwLDB4MjEsMHgwMCwweDAyLDB4MTEsMHgwMCwKLTB4MDAsMHg4MiwweDEwLDB4MjEsMHgyNCwweDQyLDB4MDAsMHgwNCwweDA4LDB4MDAsMHgwZiwweDdhLDB4YTEsMHg4MiwweDAwLDB4MDAsCi0weDhmLDB4OGQsMHg4MSwweDVjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweGE4LDB4MTAsMHgyMSwweDkwLDB4NDMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NjAsMHhmZiwweGQxLDB4MDAsMHgwMCwweDI4LDB4MjEsMHgwMCwweDA2LDB4NzQsMHg4MiwKLTB4MzAsMHhlMiwweDAwLDB4ZmYsMHgyYywweDQyLDB4MDAsMHgwYywweDE0LDB4NDAsMHgwMCwweDAzLDB4MDAsMHhlMCwweDEwLDB4MjEsCi0weDMwLDB4ZTIsMHgwMCwweDBmLDB4MjQsMHg0MiwweDAwLDB4MGMsMHgzMCwweDQ0LDB4MDAsMHhmZiwweGEzLDB4YTIsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwYywweDEwLDB4ODIsMHgwMCwweDBkLDB4MDAsMHgwOSwweDExLDB4MDAsMHgwMCwweDQ5LDB4MTAsMHgyMywKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDA0LDB4MTgsMHg0MCwweDAwLDB4NDksMHgxMCwweDIzLDB4MDAsMHg2NCwweDE4LDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgyNywweDg0LDB4YjQsMHhhOCwweDAwLDB4NDQsMHgxMCwweDIxLAotMHg5MCwweDQ3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTMsMHhhNywweDAwLDB4MDAsMHgwMCwweDBhLDB4MWMsMHgwMCwKLTB4MDAsMHgwMywweDFjLDB4MDMsMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDI3LDB4ODMsMHg5MCwweDA0LDB4MDAsMHg0MywweDEwLDB4MjEsMHg4YywweDQ0LDB4MDAsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4YywweDgzLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg2MywweDAwLDB4MTAsMHgxNCwweDYwLDB4MDAsMHgzMywKLTB4MDAsMHgwNiwweDE0LDB4NDIsMHgwMCwweDA5LDB4MTEsMHgwMCwweDAwLDB4NDksMHgxMCwweDIzLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDAwLDB4NDksMHgxMCwweDIzLDB4MjcsMHg4MywweGI1LDB4NzgsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHg5MCwweDQ0LDB4MDAsMHgwNCwweDkwLDB4NDMsMHgwMCwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY0LDB4YzAsMHgyNCwKLTB4OTMsMHhhNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJjLDB4ZTIsMHgwMCwweDBmLDB4MTAsMHg0MCwweDAwLDB4MGYsCi0weDMxLDB4Y2YsMHgwMCwweDAxLDB4MDAsMHgwYSwweDFjLDB4MDAsMHgwMCwweDAzLDB4MWMsMHgwMywweDAwLDB4MDMsMHgxMCwweGMwLAotMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4NCwweDkwLDB4MDAsMHgwMCwweDQ0LDB4MTAsMHgyMSwKLTB4ODQsMHg0MywweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4NjMsMHgwNiwweDQxLDB4MTQsMHg2MCwweDAwLDB4MDQsCi0weDMwLDB4ZTIsMHgwMCwweGZmLDB4MjQsMHgwNywweDAwLDB4MGYsMHhhMywweGE3LDB4MDAsMHgwMCwweDMwLDB4ZTIsMHgwMCwweGZmLAotMHgyYywweDQyLDB4MDAsMHgwYywweDE0LDB4NDAsMHgwMCwweDA2LDB4MDAsMHhlMCwweDEwLDB4MjEsMHgwMCwweDE4LDB4MTAsMHg0MCwKLTB4MDAsMHg0ZiwweDEwLDB4MjEsMHgwMCwweDAyLDB4MTEsMHgwMCwweDAwLDB4NDcsMHgxMCwweDIxLDB4MjQsMHg0MiwweDAwLDB4MDQsCi0weGEzLDB4YTIsMHgwMCwweDAwLDB4MDAsMHg0MCwweDM4LDB4MjEsMHgwMSwweGE4LDB4MTAsMHgyMSwweDkwLDB4NDMsMHgwMCwweDAwLAotMHgyNCwweGE0LDB4MDAsMHgwMSwweDMwLDB4ODUsMHhmZiwweGZmLDB4MDAsMHhhMywweDE4LDB4MmIsMHgxNCwweDYwLDB4ZmYsMHhhZCwKLTB4MzAsMHhlMiwweDAwLDB4ZmYsMHgwOCwweDAwLDB4MGYsMHg2NywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDBmLDB4YzgsCi0weDMwLDB4NTgsMHgwMCwweDAxLDB4ODEsMHhjMiwweDAwLDB4NDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHhmZiwweDczLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwZiwweDU1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBhLDB4MWMsMHgwMCwKLTB4MDAsMHgwMywweDFjLDB4MDMsMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDAwLDB4NDUsMHgxMCwweDIxLDB4ODAsMHg0OCwweDAwLDB4MDUsMHg5MSwweDY3LDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwZiwweDM1LAotMHgwMywweGEwLDB4NTgsMHgyMSwweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgzNCwweDYzLDB4MDAsMHgyMCwKLTB4MjQsMHg0MiwweDQwLDB4MDQsMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4NjIsMHgwMCwweDAwLDB4MjcsMHhiZCwweGZmLDB4YzAsCi0weGFmLDB4YjcsMHgwMCwweDM0LDB4YWYsMHhiNiwweDAwLDB4MzAsMHhhZiwweGI1LDB4MDAsMHgyYywweGFmLDB4YjQsMHgwMCwweDI4LAotMHhhZiwweGIzLDB4MDAsMHgyNCwweGFmLDB4YjIsMHgwMCwweDIwLDB4YWYsMHhiZiwweDAwLDB4M2MsMHhhZiwweGJlLDB4MDAsMHgzOCwKLTB4YWYsMHhiMSwweDAwLDB4MWMsMHhhZiwweGIwLDB4MDAsMHgxOCwweDg0LDB4ODIsMHgwMCwweDBjLDB4MjcsMHg5MywweDkwLDB4MDQsCi0weDNjLDB4MDUsMHhiMCwweDAzLDB4MDAsMHgwMiwweDE4LDB4YzAsMHgwMCwweDYyLDB4MTgsMHgyMSwweDAwLDB4MDMsMHgxOCwweDgwLAotMHgwMCwweDczLDB4MTAsMHgyMSwweDhjLDB4NWUsMHgwMCwweDE4LDB4M2MsMHgwMiwweDgwLDB4MDAsMHgzNCwweGE1LDB4MDAsMHgyMCwKLTB4MjQsMHg0MiwweDQwLDB4MWMsMHhhYywweGEyLDB4MDAsMHgwMCwweDhmLDB4ZDAsMHgwMCwweDA4LDB4MjcsMHg5NSwweDkwLDB4MTAsCi0weDAwLDB4NzUsMHgxOCwweDIxLDB4MDAsMHgwMCwweDI4LDB4MjEsMHgwMiwweDAwLDB4MzAsMHgyMSwweDkwLDB4NzEsMHgwMCwweDAwLAotMHgwYywweDAwLDB4MGYsMHgxOSwweDAwLDB4ODAsMHhiMCwweDIxLDB4MDAsMHg0MCwweDkwLDB4MjEsMHgwMCwweDEwLDB4MTQsMHg0MiwKLTB4MzAsMHg1NCwweDAwLDB4MDEsMHgwMiwweDQwLDB4MjAsMHgyMSwweDAwLDB4MTAsMHgxNCwweDgyLDB4MDIsMHg4MCwweDI4LDB4MjEsCi0weDEyLDB4NTEsMHgwMCwweDIzLDB4MDAsMHgxMCwweGJmLDB4YzIsMHg4NiwweGMzLDB4MDAsMHgwYywweDMwLDB4NTAsMHgwMCwweDAxLAotMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDU1LDB4MTAsMHgyMSwKLTB4YTAsMHg1MiwweDAwLDB4MDAsMHg4NiwweGMzLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDEwLDB4YzAsCi0weDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDUzLDB4MzAsMHgyMSwweDhjLDB4YzcsMHgwMCwweDE4LAotMHgyNywweDgzLDB4OTAsMHgwMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4OGMsMHhlMywweDAwLDB4MDQsMHg4NCwweDQ2LDB4MDAsMHgwNiwKLTB4MDAsMHgwMywweDE5LDB4NDIsMHgwYywweDAwLDB4MDgsMHhlMywweDMwLDB4NzMsMHgwMCwweDAxLDB4MDAsMHg0MCwweDg4LDB4MjEsCi0weDAyLDB4NDAsMHgyMCwweDIxLDB4MDIsMHg4MCwweDI4LDB4MjEsMHgxNiwweGUwLDB4MDAsMHgxMCwweDAyLDB4MDAsMHgzMCwweDIxLAotMHg4NiwweGMyLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDE4LDB4YzAsMHgwMCwweDYyLDB4MTgsMHgyMSwKLTB4MDAsMHgwMywweDE4LDB4ODAsMHgyNywweDgyLDB4OTAsMHgwOCwweDAwLDB4NjIsMHgxOCwweDIxLDB4YTQsMHg3MSwweDAwLDB4MDQsCi0weDdiLDB4YmUsMHgwMSwweGZjLDB4N2IsMHhiNiwweDAxLDB4YmMsMHg3YiwweGI0LDB4MDEsMHg3YywweDdiLDB4YjIsMHgwMSwweDNjLAotMHg3YiwweGIwLDB4MDAsMHhmYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4NDAsMHg4NiwweGMzLDB4MDAsMHgwYywKLTB4YWYsMHhiMywweDAwLDB4MTAsMHhhZiwweGEwLDB4MDAsMHgxNCwweDAwLDB4MDMsMHgxMCwweGMwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg1NSwweDEwLDB4MjEsMHg4MCwweDQ3LDB4MDAsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweGU3LDB4MDAsMHgwMiwweDAwLDB4MDcsMHgxNywweGMyLDB4MDAsMHhlMiwweDM4LDB4MjEsMHgwMCwweDA3LDB4MzgsMHg0MywKLTB4MDAsMHgwNywweDM4LDB4NDAsMHgwYywweDAwLDB4MDksMHgwYSwweDAzLDB4YzcsMHgzOCwweDIxLDB4MDgsMHgwMCwweDEwLDB4NDgsCi0weDAyLDB4MjIsMHg4OCwweDIxLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwweDI3LDB4YmQsMHhmZiwweGQwLAotMHgzNCwweDYzLDB4MDAsMHgyMCwweDI0LDB4NDIsMHg0MSwweGE0LDB4YWYsMHhiMiwweDAwLDB4MjAsMHhhYywweDYyLDB4MDAsMHgwMCwKLTB4YWYsMHhiZiwweDAwLDB4MjgsMHhhZiwweGIzLDB4MDAsMHgyNCwweGFmLDB4YjEsMHgwMCwweDFjLDB4YWYsMHhiMCwweDAwLDB4MTgsCi0weDNjLDB4MDIsMHhiMCwweDAzLDB4OTAsMHg4MywweDAwLDB4MGEsMHgzNCwweDQyLDB4MDEsMHgwNCwweDk0LDB4NDUsMHgwMCwweDAwLAotMHgwMCwweDAzLDB4MTgsMHg4MCwweDI3LDB4ODIsMHhiNCwweDAwLDB4MDAsMHg2MiwweDE4LDB4MjEsMHgzMCwweGE2LDB4ZmYsMHhmZiwKLTB4OGMsMHg3MSwweDAwLDB4MDAsMHg4MCwweDg1LDB4MDAsMHgxMiwweDMwLDB4YzksMHgwMCwweGZmLDB4MDAsMHgwNiwweDMyLDB4MDIsCi0weGE0LDB4ODYsMHgwMCwweDQ0LDB4YTQsMHg4OSwweDAwLDB4NDYsMHg4MiwweDIyLDB4MDAsMHgxMiwweDAwLDB4ODAsMHg5MCwweDIxLAotMHgxMCwweGEwLDB4MDAsMHgxYiwweGEwLDB4ODAsMHgwMCwweDE1LDB4MDAsMHhjNSwweDEwLDB4MmEsMHgxMCwweDQwLDB4MDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDIwLDB4MDAsMHgxOSwweDg0LDB4ODMsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDMsMHgxMCwweGMwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg4MCwweDI3LDB4ODMsMHg5MCwweDIwLAotMHgwMCwweDQzLDB4MTAsMHgyMSwweGEwLDB4NDAsMHgwMCwweDAwLDB4YTAsMHg4MCwweDAwLDB4MTIsMHg5MiwweDIyLDB4MDAsMHgxNiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHhkZiwweGEyLDB4MjIsMHgwMCwweDE2LDB4OGYsMHhiZiwweDAwLDB4MjgsCi0weDdiLDB4YjIsMHgwMSwweDNjLDB4N2IsMHhiMCwweDAwLDB4ZmMsMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDMwLAotMHgwYywweDAwLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDEwLDB4OTcsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjgsMHg0MiwweDAwLDB4MDIsMHgxMCwweDQwLDB4MDEsMHg3NiwweDAwLDB4MDAsMHgyOCwweDIxLDB4OTQsMHg4NywweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDEwLDB4MjEsMHgwMCwweDAyLDB4MTQsMHgwMCwweDAwLDB4MDIsMHgxNCwweDAzLAotMHgwMCwweDA3LDB4MjQsMHgwMCwweDAwLDB4MDQsMHgyNCwweDAzLDB4MDAsMHgwMiwweDE4LDB4YzAsMHgwMCwweDYyLDB4MTgsMHgyMSwKLTB4MDAsMHgwNCwweDI4LDB4YzAsMHgwMCwweGE0LDB4MjgsMHgyMSwweDI3LDB4ODIsMHg5MCwweDIwLDB4MDAsMHgwMywweDE4LDB4ODAsCi0weDAwLDB4NjIsMHgxOCwweDIxLDB4MDAsMHgwNSwweDI4LDB4ODAsMHgyNywweDgyLDB4OTAsMHgwOCwweDAwLDB4YTIsMHgxMCwweDIxLAotMHg4YywweDY4LDB4MDAsMHgwMCwweDgwLDB4NDQsMHgwMCwweDA2LDB4MjcsMHg4MiwweDkwLDB4MTAsMHgwMCwweDA4LDB4MWQsMHgwMiwKLTB4MDAsMHhhMiwweDI4LDB4MjEsMHgzOCwweDg0LDB4MDAsMHgwMCwweDMwLDB4NjMsMHgwMCwweDAxLDB4MDEsMHgyNCwweDMwLDB4MGIsCi0weDgwLDB4YWEsMHgwMCwweDA0LDB4ODAsMHhhOSwweDAwLDB4MDUsMHgxMCwweDYwLDB4MDAsMHgwMiwweDAwLDB4MDgsMHgxNCwweDAyLAotMHgzMCwweDQ2LDB4MDAsMHgwZiwweDE1LDB4MjAsMHgwMCwweDI4LDB4MDEsMHg0OSwweDEwLDB4MjEsMHgxNSwweDQwLDB4MDAsMHgxMSwKLTB4MzAsMHhlMywweGZmLDB4ZmYsMHg5MiwweDQ1LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhhOCwweDAwLDB4ZmYsCi0weDJkLDB4MDIsMHgwMCwweDA0LDB4MTAsMHg0MCwweDAxLDB4NDYsMHgyZCwweDAyLDB4MDAsMHgxMCwweDNjLDB4MDQsMHhiMCwweDA1LAotMHgzNCwweDg0LDB4MDIsMHgyOSwweDkwLDB4ODMsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgwMSwweDAyLDB4MTAsMHgwNCwKLTB4MDAsMHg2MiwweDE4LDB4MjUsMHhhMCwweDgzLDB4MDAsMHgwMCwweDk2LDB4NDcsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDMwLDB4ZTMsMHhmZiwweGZmLDB4MDAsMHgwMywweDEwLDB4YzAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDI3LDB4ODQsMHg5MCwweDEwLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDQsMHgxMCwweDIxLDB4ODAsMHg0NSwweDAwLDB4MDYsMHgwMCwweDAzLDB4MWEsMHgwMCwKLTB4M2MsMHgwNCwweGIwLDB4MDAsMHgwMCwweDY1LDB4MTgsMHgyMSwweDAwLDB4NjQsMHgyMCwweDIxLDB4OTQsMHg4MiwweDAwLDB4MDAsCi0weDgyLDB4NDMsMHgwMCwweDEwLDB4MDAsMHgwMiwweDE0LDB4MDAsMHgxNCwweDYwLDB4MDAsMHgwNiwweDAwLDB4MDIsMHgzYywweDAzLAotMHgzMCwweGUyLDB4MDAsMHgwNCwweDE0LDB4NDAsMHgwMCwweDA0LDB4MDEsMHg0OSwweDEwLDB4MjEsMHgzNCwweGUyLDB4MDgsMHgwMCwKLTB4YTQsMHg4MiwweDAwLDB4MDAsMHgwMSwweDQ5LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxNiwweDAwLDB4MDAsMHgwMiwweDE2LDB4MDMsCi0weDAwLDB4NDYsMHgxMCwweDJhLDB4MTAsMHg0MCwweDAwLDB4N2MsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4NDIsMHgwMCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NiwweDQzLDB4MDAsMHgwYywKLTB4MjUsMHg0NCwweDAwLDB4MDEsMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDI3LDB4ODMsMHg5MCwweDEwLDB4MDAsMHg0MywweDEwLDB4MjEsMHhhMCwweDQ0LDB4MDAsMHgwNCwweDkyLDB4MjMsMHgwMCwweDE2LAotMHgwMiwweDQwLDB4MjAsMHgyMSwweDMwLDB4NjMsMHgwMCwweGZiLDB4MDgsMHgwMCwweDEwLDB4OWMsMHhhMiwweDIzLDB4MDAsMHgxNiwKLTB4ODYsMHg0MywweDAwLDB4MGMsMHgyNSwweDI0LDB4MDAsMHgwMSwweDAwLDB4MDMsMHgxMCwweGMwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4MywweDkwLDB4MTAsMHgwMCwweDQzLDB4MTAsMHgyMSwweGEwLDB4NDQsMHgwMCwweDA1LAotMHg4NiwweDQ1LDB4MDAsMHgwYywweDBjLDB4MDAsMHgxZSwweGVhLDB4MDIsMHgyMCwweDIwLDB4MjEsMHgxMCwweDQwLDB4MDAsMHg1YSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MiwweDQ1LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhhNiwweDAwLDB4ZmYsCi0weDJjLDB4YzIsMHgwMCwweDA0LDB4MTAsMHg0MCwweDAwLDB4NGMsMHgyYywweGMyLDB4MDAsMHgxMCwweDNjLDB4MDQsMHhiMCwweDA1LAotMHgzNCwweDg0LDB4MDIsMHgyOSwweDkwLDB4ODMsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgwMCwweGMyLDB4MTAsMHgwNCwKLTB4MDAsMHgwMiwweDEwLDB4MjcsMHgwMCwweDYyLDB4MTgsMHgyNCwweGEwLDB4ODMsMHgwMCwweDAwLDB4OTIsMHg0NSwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhhNSwweDAwLDB4ZmYsMHgxNCwweGEwLDB4MDAsMHgzMywweDI0LDB4MDIsMHgwMCwweDAxLAotMHhhMiwweDQwLDB4MDAsMHgwNCwweDkyLDB4MjIsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwYywKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHhhMiwweDIyLDB4MDAsMHgxNywweDkyLDB4MjIsMHgwMCwweDE3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4NDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NiwweDIyLDB4MDAsMHgwNiwweDA4LDB4MDAsMHgxMCwweDk3LAotMHhhNiwweDIyLDB4MDAsMHgxNCwweDk2LDB4MjIsMHgwMCwweDAwLDB4MDgsMHgwMCwweDEwLDB4OTcsMHhhNiwweDIyLDB4MDAsMHgxNCwKLTB4OTIsMHgyMiwweDAwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgxMSwweDI2LDB4YTIsMHgyMCwweDAwLDB4MTcsMHg5NiwweDI0LDB4MDAsMHgwMCwweDk2LDB4MjUsMHgwMCwweDA2LAotMHgyNywweDg2LDB4OTAsMHgwMCwweDAwLDB4MDQsMHgxOCwweGMwLDB4MDAsMHg2NCwweDE4LDB4MjEsMHgwMCwweDA1LDB4MTAsMHhjMCwKLTB4MDAsMHg0NSwweDEwLDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjYsMHgxOCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDAwLDB4NDYsMHgxMCwweDIxLDB4OGMsMHg2NSwweDAwLDB4MDgsMHg4YywweDQ0LDB4MDAsMHgwOCwweDNjLDB4MDMsMHg4MCwweDAwLAotMHgwMCwweGEzLDB4MzAsMHgyNCwweDEwLDB4YzAsMHgwMCwweDA4LDB4MDAsMHg4MywweDEwLDB4MjQsMHgxMCwweDQwLDB4MDAsMHgwNCwKLTB4MDAsMHgwMCwweDE4LDB4MjEsMHgxMCwweGMwLDB4MDAsMHgwMiwweDI0LDB4MDMsMHgwMCwweDAxLDB4MDAsMHg4NSwweDE4LDB4MmIsCi0weDA4LDB4MDAsMHgxMSwweDI2LDB4YTIsMHgyMywweDAwLDB4MTcsMHgxMCwweDQwLDB4ZmYsMHhmZCwweDAwLDB4ODUsMHgxOCwweDJiLAotMHgwOCwweDAwLDB4MTEsMHg0OSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhhMiwweDAwLDB4MDksMHgyNCwweDAyLDB4MDAsMHgwMiwKLTB4MTAsMHhhMiwweDAwLDB4MDUsMHgyNCwweDAyLDB4MDAsMHgwMywweDE0LDB4YTIsMHhmZiwweGNhLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgxMSwweDIxLDB4YTIsMHg0MCwweDAwLDB4MDcsMHgwOCwweDAwLDB4MTEsMHgyMSwweGEyLDB4NDAsMHgwMCwweDA2LAotMHgwOCwweDAwLDB4MTEsMHgyMSwweGEyLDB4NDAsMHgwMCwweDA1LDB4MTQsMHg0MCwweGZmLDB4YmUsMHgzYywweDA0LDB4YjAsMHgwNSwKLTB4MzQsMHg4NCwweDAyLDB4MjksMHg5MCwweDgzLDB4MDAsMHgwMCwweDMwLDB4YTUsMHgwMCwweDBmLDB4MjQsMHgwMiwweDAwLDB4ODAsCi0weDA4LDB4MDAsMHgxMSwweDE4LDB4MDAsMHhhMiwweDEwLDB4MDcsMHgwYywweDAwLDB4MTAsMHgwNywweDAyLDB4NDAsMHgyMCwweDIxLAotMHgwOCwweDAwLDB4MTAsMHg5NywweDAwLDB4MDAsMHgwMCwweDAwLDB4OTIsMHg0NSwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHhhNiwweDAwLDB4ZmYsMHgyYywweGMyLDB4MDAsMHgwNCwweDEwLDB4NDAsMHgwMCwweDk5LDB4MmMsMHhjMiwweDAwLDB4MTAsCi0weDNjLDB4MDQsMHhiMCwweDA1LDB4MzQsMHg4NCwweDAyLDB4MjksMHg5MCwweDgzLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLAotMHgwMCwweGMyLDB4MTAsMHgwNCwweDAwLDB4MDIsMHgxMCwweDI3LDB4MDAsMHg2MiwweDE4LDB4MjQsMHhhMCwweDgzLDB4MDAsMHgwMCwKLTB4OTIsMHg0NSwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YTUsMHgwMCwweGZmLDB4MTQsMHhhMCwweDAwLDB4ODAsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4YTIsMHg0MCwweDAwLDB4MDQsMHg4NiwweDQzLDB4MDAsMHgwYywweDI3LDB4OTMsMHg5MCwweDA0LAotMHg5NiwweDQ3LDB4MDAsMHgwYywweDAwLDB4MDMsMHgxMCwweGMwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MjgsMHg4MCwKLTB4MDAsMHhiMywweDE4LDB4MjEsMHg4YywweDY0LDB4MDAsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHg4MiwweDAwLDB4MDQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4MTAsMHgxMCwweDQwLDB4MDAsMHg2NCwweDAwLDB4MDAsMHgzMCwweDIxLAotMHgwMCwweDA3LDB4MWMsMHgwMCwweDAwLDB4MDMsMHgxYywweDAzLDB4MDAsMHgwMywweDEwLDB4YzAsMHgwMCwweDQzLDB4MTAsMHgyMSwKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDUzLDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDE4LDB4OTMsMHg4MiwweDhiLDB4NzEsCi0weDhjLDB4NjQsMHgwMCwweDA0LDB4MzAsMHg0MiwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjEsMHg0MiwweDE0LDB4NDAsMHgwMCwweDRkLAotMHgzMCwweDkwLDB4MDAsMHgwMSwweDAwLDB4MDcsMHgyYywweDAwLDB4MDAsMHgwNSwweDJjLDB4MDMsMHgwYywweDAwLDB4MWIsMHg2NiwKLTB4MDIsMHgyMCwweDIwLDB4MjEsMHg5NiwweDI2LDB4MDAsMHgwNiwweDEyLDB4MDAsMHgwMCwweDE0LDB4MzAsMHhjNSwweGZmLDB4ZmYsCi0weDAyLDB4NjAsMHg5MCwweDIxLDB4MDAsMHgwNSwweDEwLDB4YzAsMHgwMCwweDQ1LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLAotMHgwMCwweDUyLDB4MTgsMHgyMSwweDkyLDB4MjIsMHgwMCwweDBhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgwYiwKLTB4MDIsMHgyMCwweDIwLDB4MjEsMHg4YywweDYzLDB4MDAsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHg2MiwweDAwLDB4MDQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDExLDB4NDIsMHgwYywweDAwLDB4MWIsMHg2NiwweDMwLDB4NTAsMHgwMCwweDAxLAotMHg5NiwweDI2LDB4MDAsMHgwNiwweDE2LDB4MDAsMHhmZiwweGVmLDB4MzAsMHhjNSwweGZmLDB4ZmYsMHg5MiwweDIyLDB4MDAsMHgwNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwZCwweDI0LDB4MDIsMHgwMCwweDAxLDB4YTIsMHgyMiwweDAwLDB4MTcsCi0weDkyLDB4MjIsMHgwMCwweDE3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhhNiwweDI2LDB4MDAsMHgxNCwweDkyLDB4MjIsMHgwMCwweDE2LDB4MDgsMHgwMCwweDEwLDB4OTYsMHgzMCwweDQyLDB4MDAsMHhjMywKLTB4OTYsMHgyMiwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTEsMHhiZCwweGE2LDB4MjIsMHgwMCwweDE0LDB4OTIsMHgyMiwweDAwLDB4MGEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxMSwweGI4LAotMHhhMiwweDIwLDB4MDAsMHgxNywweDk2LDB4MjQsMHgwMCwweDAwLDB4MzAsMHhjNSwweGZmLDB4ZmYsMHgwMCwweDA1LDB4MTgsMHhjMCwKLTB4MDAsMHgwNCwweDEwLDB4YzAsMHgwMCwweDQ0LDB4MTAsMHgyMSwweDAwLDB4NjUsMHgxOCwweDIxLDB4MjcsMHg4NCwweDkwLDB4MDAsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0NCwweDEwLDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwweDhjLDB4NDUsMHgwMCwweDA4LAotMHgwMCwweDY0LDB4MTgsMHgyMSwweDhjLDB4NjQsMHgwMCwweDA4LDB4M2MsMHgwMiwweDgwLDB4MDAsMHgwMCwweGEyLDB4MzgsMHgyNCwKLTB4MTAsMHhlMCwweDAwLDB4MDgsMHgwMCwweDgyLDB4MTAsMHgyNCwweDEwLDB4NDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDE4LDB4MjEsCi0weDEwLDB4ZTAsMHgwMCwweDAyLDB4MjQsMHgwMywweDAwLDB4MDEsMHgwMCwweDg1LDB4MTgsMHgyYiwweDA4LDB4MDAsMHgxMSwweGI4LAotMHhhMiwweDIzLDB4MDAsMHgxNywweDEwLDB4NDAsMHhmZiwweGZkLDB4MDAsMHg4NSwweDE4LDB4MmIsMHgwOCwweDAwLDB4MTEsMHhkYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDA1LDB4MDAsMHgyNCwweGYwLDB4ZTUsMHgwMCwweDA2LDB4MDAsMHgwMCwweDI4LDB4MTIsCi0weDI3LDB4ODIsMHg5MCwweDAwLDB4MDAsMHhhMiwweDI4LDB4MjEsMHgwYywweDAwLDB4MDEsMHg0OSwweDAwLDB4MDAsMHgyMCwweDIxLAotMHg5NiwweDQ3LDB4MDAsMHgwYywweDA4LDB4MDAsMHgxMSwweDlhLDB4MDAsMHgwNywweDJjLDB4MDAsMHgyNywweDgzLDB4OTAsMHgxMCwKLTB4MjcsMHg4MiwweDkwLDB4MTgsMHgwMCwweGEyLDB4MTAsMHgyMSwweDAwLDB4YTMsMHgxOCwweDIxLDB4OTAsMHg0NCwweDAwLDB4MDAsCi0weDkwLDB4NjUsMHgwMCwweDA1LDB4OTMsMHg4MiwweDgwLDB4MTAsMHgyNCwweDA3LDB4MDAsMHgwMSwweDBjLDB4MDAsMHgyMSwweDlhLAotMHhhZiwweGEyLDB4MDAsMHgxMCwweDk2LDB4NDcsMHgwMCwweDBjLDB4MDgsMHgwMCwweDExLDB4OGQsMHgwMCwweDA3LDB4MWMsMHgwMCwKLTB4MTAsMHhhMiwweDAwLDB4MDksMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHgwMCwweDA1LDB4MjQsMHgwMiwweDAwLDB4MDMsCi0weDE0LDB4YTIsMHhmZiwweDdkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTEsMHg3ZSwweGEyLDB4NDAsMHgwMCwweDA3LAotMHgwOCwweDAwLDB4MTEsMHg3ZSwweGEyLDB4NDAsMHgwMCwweDA2LDB4MDgsMHgwMCwweDExLDB4N2UsMHhhMiwweDQwLDB4MDAsMHgwNSwKLTB4MTQsMHg0MCwweGZmLDB4NzEsMHgzYywweDA0LDB4YjAsMHgwNSwweDM0LDB4ODQsMHgwMiwweDI5LDB4OTAsMHg4MywweDAwLDB4MDAsCi0weDMwLDB4YTUsMHgwMCwweDBmLDB4MjQsMHgwMiwweDAwLDB4ODAsMHgwOCwweDAwLDB4MTEsMHg3NSwweDAwLDB4YTIsMHgxMCwweDA3LAotMHgxNCwweDQwLDB4ZmUsMHhjMywweDNjLDB4MDQsMHhiMCwweDA1LDB4MzQsMHg4NCwweDAyLDB4MjksMHg5MCwweDgzLDB4MDAsMHgwMCwKLTB4MzAsMHhhNSwweDAwLDB4MGYsMHgyNCwweDAyLDB4MDAsMHg4MCwweDA4LDB4MDAsMHgxMCwweGQwLDB4MDAsMHhhMiwweDEwLDB4MDcsCi0weDg0LDB4ODMsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MTAsMHhjMCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDI3LDB4ODMsMHg5MCwweDA0LDB4MDAsMHg0MywweDEwLDB4MjEsMHg4YywweDQ3LDB4MDAsMHgxOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YywweGU2LDB4MDAsMHgwOCwweDBjLDB4MDAsMHgwZiwweDE5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4NDAsMHgyMCwweDIxLDB4MDAsMHgwMCwweDI4LDB4MjEsMHgwMCwweDAwLDB4MzAsMHgyMSwweDAwLDB4MDAsMHgzOCwweDIxLAotMHgwYywweDAwLDB4MWMsMHg2OCwweGFmLDB4YTIsMHgwMCwweDEwLDB4MDAsMHgwMiwweDFlLDB4MDAsMHgxNCwweDYwLDB4ZmUsMHg2YiwKLTB4YTIsMHgyMiwweDAwLDB4MTIsMHg5MiwweDQzLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg2MCwweDAwLDB4NDAsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4YTIsMHg0MCwweDAwLDB4MDQsMHg5MiwweDI4LDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxNSwweDAwLDB4MDAsMHgxOSwweDI0LDB4MDIsMHgwMCwweDAxLDB4OTIsMHgyNywweDAwLDB4MGEsMHhhMiwweDIyLDB4MDAsMHgxNywKLTB4OTIsMHgyMiwweDAwLDB4MTcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDk2LDB4MjIsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhNiwweDIyLDB4MDAsMHgxNCwweDkyLDB4MjIsMHgwMCwweDE2LAotMHgzMCwweGUzLDB4MDAsMHhmZiwweDMwLDB4NDIsMHgwMCwweGMwLDB4MTAsMHg2MCwweDAwLDB4MDMsMHhhMiwweDIyLDB4MDAsMHgxNiwKLTB4MzQsMHg0MiwweDAwLDB4MDEsMHhhMiwweDIyLDB4MDAsMHgxNiwweDExLDB4MDAsMHhmZSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDkyLDB4MjIsMHgwMCwweDE2LDB4MDgsMHgwMCwweDEwLDB4OTYsMHgzNCwweDQyLDB4MDAsMHgwMiwweDk2LDB4MjIsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MTIsMHgzZiwweGE2LDB4MjIsMHgwMCwweDE0LDB4OTIsMHgyNywweDAwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTQsMHhlMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxMiwweDM4LDB4YTIsMHgyMCwweDAwLDB4MTcsCi0weDk2LDB4MjQsMHgwMCwweDAwLDB4OTYsMHgyNSwweDAwLDB4MDYsMHgyNywweDg2LDB4OTAsMHgwMCwweDAwLDB4MDQsMHgxOCwweGMwLAotMHgwMCwweDY0LDB4MTgsMHgyMSwweDAwLDB4MDUsMHgxMCwweGMwLDB4MDAsMHg0NSwweDEwLDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwKLTB4MDAsMHg2NiwweDE4LDB4MjEsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDYsMHgxMCwweDIxLDB4OGMsMHg2NSwweDAwLDB4MDgsCi0weDhjLDB4NDQsMHgwMCwweDA4LDB4M2MsMHgwMywweDgwLDB4MDAsMHgwMCwweGEzLDB4MzAsMHgyNCwweDEwLDB4YzAsMHgwMCwweDA4LAotMHgwMCwweDgzLDB4MTAsMHgyNCwweDEwLDB4NDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDE4LDB4MjEsMHgxMCwweGMwLDB4MDAsMHgwMiwKLTB4MjQsMHgwMywweDAwLDB4MDEsMHgwMCwweDg1LDB4MTgsMHgyYiwweDA4LDB4MDAsMHgxMiwweDM4LDB4YTIsMHgyMywweDAwLDB4MTcsCi0weDEwLDB4NDAsMHhmZiwweGZkLDB4MDAsMHg4NSwweDE4LDB4MmIsMHgwOCwweDAwLDB4MTIsMHg2NywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxMCwweDYyLDB4MDAsMHgwOSwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHg2MiwweDAwLDB4MDUsMHgyNCwweDAyLDB4MDAsMHgwMywKLTB4MTQsMHg2MiwweGZmLDB4YmQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxMiwweDMyLDB4YTIsMHg0MCwweDAwLDB4MDcsCi0weDA4LDB4MDAsMHgxMiwweDMyLDB4YTIsMHg0MCwweDAwLDB4MDYsMHgwOCwweDAwLDB4MTIsMHgzMiwweGEyLDB4NDAsMHgwMCwweDA1LAotMHgzYywweDAyLDB4ODAsMHgwMCwweDAwLDB4ODIsMHgzMCwweDI0LDB4MTAsMHhjMCwweDAwLDB4MDgsMHgwMCwweGEyLDB4MTgsMHgyNCwKLTB4MTAsMHg2MCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MTAsMHgyMSwweDEwLDB4YzAsMHgwMCwweDAyLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDAwLDB4YTQsMHgxMCwweDJiLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NjAsMHhmZiwweGZkLAotMHgwMCwweGE0LDB4MTAsMHgyYiwweDA4LDB4MDAsMHgxMiwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDgyLDB4ZmYsMHhmZiwKLTB4MDAsMHgwMiwweDE4LDB4YzAsMHgwMCwweDYyLDB4MTgsMHgyMSwweDI3LDB4ODQsMHg5MCwweDEwLDB4MDAsMHgwMywweDE4LDB4ODAsCi0weDAwLDB4NjQsMHgxOCwweDIxLDB4ODAsMHg2NiwweDAwLDB4MDYsMHgwMCwweDAyLDB4MTIsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAwLAotMHgwMCwweDQ2LDB4MTAsMHgyMSwweDAwLDB4NDUsMHgxMCwweDIxLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDQzLDB4MTAsMHgyMSwKLTB4MjcsMHhiZCwweGZmLDB4ZTAsMHgzMCwweDgyLDB4MDAsMHg3YywweDMwLDB4ODQsMHhmZiwweDAwLDB4YWYsMHhiZiwweDAwLDB4MWMsCi0weGFmLDB4YjIsMHgwMCwweDE4LDB4YWYsMHhiMSwweDAwLDB4MTQsMHhhZiwweGIwLDB4MDAsMHgxMCwweDE0LDB4NDAsMHgwMCwweDQxLAotMHgwMCwweDA0LDB4MjIsMHgwMywweDI0LDB4MDIsMHgwMCwweDA0LDB4M2MsMHgxMCwweGIwLDB4MDMsMHg4ZSwweDEwLDB4MDAsMHgwMCwKLTB4MTAsMHg4MiwweDAwLDB4MzIsMHgyNCwweDAyLDB4MDAsMHgwOCwweDEwLDB4ODIsMHgwMCwweDAzLDB4MzIsMHgwMiwweDAwLDB4MjAsCi0weDA4LDB4MDAsMHgxMiwweGE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgxNywweDNjLDB4MDIsMHhiMCwweDA2LAotMHgzNCwweDQyLDB4ODAsMHgyNCwweDhjLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDY3LDB4MDAsMHhmZiwKLTB4MTAsMHhlMCwweDAwLDB4MjMsMHgwMCwweDAwLDB4ODgsMHgyMSwweDhmLDB4ODUsMHg4ZiwweGUwLDB4MDAsMHg0MCwweDMwLDB4MjEsCi0weDk0LDB4YTIsMHgwMCwweDA4LDB4OGMsMHhjMywweDAwLDB4MDAsMHgyNiwweDMxLDB4MDAsMHgwMSwweDI0LDB4NDIsMHgwMCwweDAyLAotMHgzMCwweDQyLDB4MDEsMHhmZiwweDM0LDB4NjMsMHgwMSwweDAwLDB4MDIsMHgyNywweDIwLDB4MmEsMHhhNCwweGEyLDB4MDAsMHgwOCwKLTB4MTQsMHg4MCwweGZmLDB4ZjcsMHhhYywweGMzLDB4MDAsMHgwMCwweDg0LDB4YTMsMHgwMCwweDA4LDB4M2MsMHgwMiwweGIwLDB4MDMsCi0weDM0LDB4NDIsMHgwMCwweDMwLDB4YWMsMHg0MywweDAwLDB4MDAsMHgyNywweDkyLDB4YjQsMHgwMCwweDI0LDB4MTEsMHgwMCwweDEyLAotMHg4ZSwweDQ0LDB4MDAsMHgwMCwweDI2LDB4MzEsMHhmZiwweGZmLDB4OTAsMHg4MiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHg0MCwweDAwLDB4MDMsMHgyNiwweDUyLDB4MDAsMHgwNCwweDBjLDB4MDAsMHgxOCwweGQwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA2LDB4MjEsMHhmZiwweGY3LDB4MjQsMHgwMiwweGZmLDB4ZGYsMHgwMiwweDAyLDB4ODAsMHgyNCwweDNjLDB4MDEsMHhiMCwweDAzLAotMHgwYywweDAwLDB4MTMsMHgxYywweGFjLDB4MzAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDEyLDB4YTgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGYsMHg4NSwweDhmLDB4ZTAsMHgwOCwweDAwLDB4MTIsMHhiZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweGZmLDB4OTUsCi0weDNjLDB4MDMsMHhiMCwweDAzLDB4MDIsMHgwMiwweDgwLDB4MjQsMHgzNCwweDYzLDB4MDAsMHgzMCwweDNjLDB4MDEsMHhiMCwweDAzLAotMHhhYywweDMwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgxMiwweGU1LDB4YWMsMHg2MCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTIsMHhhOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMCwweDUwLDB4MDgsMHgwMCwweDEyLDB4YTgsCi0weGFjLDB4NDYsMHgwMCwweDAwLDB4M2MsMHgwYSwweDgwLDB4MDAsMHgyNSwweDRhLDB4NGIsMHg5NCwweDNjLDB4MGIsMHhiMCwweDAzLAotMHhhZCwweDZhLDB4MDAsMHgyMCwweDNjLDB4MDgsMHg4MCwweDAxLDB4MjUsMHgwOCwweDAwLDB4MDAsMHgzYywweDA5LDB4ODAsMHgwMSwKLTB4MjUsMHgyOSwweDAzLDB4NTAsMHgxMSwweDA5LDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwYSwweDgwLDB4MDAsCi0weDI1LDB4NGEsMHg0YiwweGJjLDB4M2MsMHgwYiwweGIwLDB4MDMsMHhhZCwweDZhLDB4MDAsMHgyMCwweDNjLDB4MDgsMHhiMCwweDA2LAotMHgzNSwweDA4LDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZCwweDA5LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMSwweDI5LDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMSwweDAwLDB4MDEsCi0weDE1LDB4MjEsMHhmZiwweGYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDBhLDB4ODAsMHgwMCwweDI1LDB4NGEsMHg0YiwweGY4LAotMHgzYywweDBiLDB4YjAsMHgwMywweGFkLDB4NmEsMHgwMCwweDIwLDB4M2MsMHgwMiwweGIwLDB4MDMsMHg4YywweDQzLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDYzLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWMsMHg0MywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwYSwweDgwLDB4MDAsMHgyNSwweDRhLDB4NGMsMHgyNCwweDNjLDB4MGIsMHhiMCwweDAzLAotMHhhZCwweDZhLDB4MDAsMHgyMCwweDNjLDB4MDIsMHg4MCwweDAxLDB4MjQsMHg0MiwweDAwLDB4MDAsMHgzYywweDAzLDB4ODAsMHgwMSwKLTB4MjQsMHg2MywweDAzLDB4NTAsMHgzYywweDA0LDB4YjAsMHgwMCwweDhjLDB4ODUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGFjLDB4NDUsMHgwMCwweDAwLDB4MjQsMHg0MiwweDAwLDB4MDQsMHgyNCwweDg0LDB4MDAsMHgwNCwweDAwLDB4NDMsMHgwOCwweDJhLAotMHgxNCwweDIwLDB4ZmYsMHhmOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDEzLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2MsMHgwYSwweDgwLDB4MDAsMHgyNSwweDRhLDB4NGMsMHg3MCwweDNjLDB4MGIsMHhiMCwweDAzLDB4YWQsMHg2YSwweDAwLDB4MjAsCi0weDNjLDB4MDIsMHg4MCwweDAxLDB4MjQsMHg0MiwweDAzLDB4NTAsMHgzYywweDAzLDB4ODAsMHgwMSwweDI0LDB4NjMsMHgzZiwweDI0LAotMHhhYywweDQwLDB4MDAsMHgwMCwweGFjLDB4NDAsMHgwMCwweDA0LDB4YWMsMHg0MCwweDAwLDB4MDgsMHhhYywweDQwLDB4MDAsMHgwYywKLTB4MjQsMHg0MiwweDAwLDB4MTAsMHgwMCwweDQzLDB4MDgsMHgyYSwweDE0LDB4MjAsMHhmZiwweGY5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNjLDB4MGEsMHg4MCwweDAwLDB4MjUsMHg0YSwweDRjLDB4YjAsMHgzYywweDBiLDB4YjAsMHgwMywweGFkLDB4NmEsMHgwMCwweDIwLAotMHgzYywweDFjLDB4ODAsMHgwMSwweDI3LDB4OWMsMHg3ZiwweGYwLDB4MjcsMHg5ZCwweDhiLDB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjcsMHg5ZCwweDhmLDB4YzgsMHgzYywweDBhLDB4ODAsMHgwMCwweDI1LDB4NGEsMHg0YywweGQ0LDB4M2MsMHgwYiwweGIwLDB4MDMsCi0weGFkLDB4NmEsMHgwMCwweDIwLDB4NDAsMHg4MCwweDY4LDB4MDAsMHg0MCwweDA4LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzNSwweDA4LDB4ZmYsMHgwMSwweDQwLDB4ODgsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MTUsMHg2MiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDg0LDB4ZjgsMHgwMCwweDMwLDB4ODcsMHgwMCwweDAzLDB4MDAsMHgwNCwweDMwLDB4NDAsCi0weDAwLDB4YzcsMHgyMCwweDIzLDB4M2MsMHgwMiwweGIwLDB4MGEsMHgyNywweGJkLDB4ZmYsMHhlMCwweDI0LDB4MDMsMHhmZiwweGZmLAotMHgwMCwweDgyLDB4MjAsMHgyMSwweGFmLDB4YjEsMHgwMCwweDE0LDB4YWMsMHg4MywweDEwLDB4MDAsMHhhZiwweGJmLDB4MDAsMHgxOCwKLTB4YWYsMHhiMCwweDAwLDB4MTAsMHgwMCwweGEwLDB4ODgsMHgyMSwweDI0LDB4MDMsMHgwMCwweDAxLDB4OGMsMHg4MiwweDEwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MywweGZmLDB4ZmQsMHgwMCwweGM3LDB4MTAsMHgyMywweDNjLDB4MDMsMHhiMCwweDBhLAotMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NTAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDEzLDB4OTksMHgwMiwweDIwLDB4MjAsMHgyMSwKLTB4MDIsMHgxMSwweDgwLDB4MjQsMHgwMCwweDUwLDB4ODAsMHgwNiwweDAyLDB4MDAsMHgxMCwweDIxLDB4OGYsMHhiZiwweDAwLDB4MTgsCi0weDdiLDB4YjAsMHgwMCwweGJjLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHgyMCwweDI3LDB4YmQsMHhmZiwweGQ4LAotMHhhZiwweGIyLDB4MDAsMHgxOCwweDAwLDB4YTAsMHg5MCwweDIxLDB4MjQsMHgwNSwweGZmLDB4ZmYsMHhhZiwweGIzLDB4MDAsMHgxYywKLTB4YWYsMHhiZiwweDAwLDB4MjAsMHhhZiwweGIxLDB4MDAsMHgxNCwweGFmLDB4YjAsMHgwMCwweDEwLDB4MDAsMHhjMCwweDk4LDB4MjEsCi0weDEyLDB4NDUsMHgwMCwweDIzLDB4MjQsMHg4NCwweGY4LDB4MDAsMHgzMCwweDgzLDB4MDAsMHgwMywweDAwLDB4MDQsMHgxMCwweDQwLAotMHgwMCwweDQwLDB4ODgsMHgyMSwweDAwLDB4NjAsMHgyMCwweDIxLDB4MDAsMHg0MywweDEwLDB4MjMsMHgzYywweDAzLDB4YjAsMHgwYSwKLTB4MDAsMHg0MywweDEwLDB4MjEsMHhhYywweDQ1LDB4MTAsMHgwMCwweDAwLDB4NDAsMHgxOCwweDIxLDB4MjQsMHgwNSwweDAwLDB4MDEsCi0weDhjLDB4NjIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQ1LDB4ZmYsMHhmZCwweDNjLDB4MDIsMHhiMCwweDBhLAotMHgwMiwweDI0LDB4ODgsMHgyMywweDAyLDB4MjIsMHg4OCwweDIxLDB4OGUsMHgzMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MTMsMHg5OSwKLTB4MDIsMHg0MCwweDIwLDB4MjEsMHgwMCwweDEyLDB4MTgsMHgyNywweDAyLDB4MDMsMHg4MCwweDI0LDB4MDAsMHg1MywweDEwLDB4MDQsCi0weDAyLDB4MDIsMHg4MCwweDI1LDB4YWUsMHgzMCwweDAwLDB4MDAsMHgyNCwweDAzLDB4MDAsMHgwMSwweDhlLDB4MjIsMHgxMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDMsMHhmZiwweGZkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweGJmLDB4MDAsMHgyMCwKLTB4N2IsMHhiMiwweDAwLDB4ZmMsMHg3YiwweGIwLDB4MDAsMHhiYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjgsCi0weDMwLDB4ODIsMHgwMCwweDAzLDB4MDAsMHgwNCwweDE4LDB4NDAsMHgwMCwweDYyLDB4MTgsMHgyMywweDNjLDB4MDQsMHhiMCwweDBhLAotMHgwMCwweDY0LDB4MTgsMHgyMSwweGFjLDB4NjYsMHgwMCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MDEsMHg4YywweDYyLDB4MTAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQ0LDB4ZmYsMHhmZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDEzLDB4ODcsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MjEsMHgwMCwweDY0LDB4MTAsMHgwNiwweDMwLDB4NDIsMHgwMCwweDAxLAotMHgxNCwweDQwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg2MywweDAwLDB4MDEsMHgyYywweDYyLDB4MDAsMHgyMCwKLTB4MTQsMHg0MCwweGZmLDB4ZjksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHg2MCwweDEwLDB4MjEsCi0weDI3LDB4YmQsMHhmZiwweGUwLDB4M2MsMHgwMywweGIwLDB4MDUsMHhhZiwweGIyLDB4MDAsMHgxOCwweGFmLDB4YjEsMHgwMCwweDE0LAotMHhhZiwweGIwLDB4MDAsMHgxMCwweGFmLDB4YmYsMHgwMCwweDFjLDB4MDAsMHg4MCwweDkwLDB4MjEsMHgwMCwweGEwLDB4ODAsMHgyMSwKLTB4MDAsMHhjMCwweDg4LDB4MjEsMHgzNCwweDYzLDB4MDIsMHgyZSwweDkwLDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDMwLDB4NDIsMHgwMCwweDAxLDB4MTQsMHg0MCwweGZmLDB4ZmMsMHgyNCwweDA0LDB4MDgsMHgyNCwweDNjLDB4MDUsMHgwMCwweGMwLAotMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDAzLDB4MjQsMHgwNCwweDA4LDB4MzQsMHgzYywweDA1LDB4MDAsMHhjMCwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwMywweDNjLDB4MDIsMHhjMCwweDAwLDB4MDAsMHgxMCwweDFjLDB4MDAsCi0weDM0LDB4NDIsMHgwNCwweDAwLDB4M2MsMHgwNCwweGIwLDB4MDUsMHgzYywweDA1LDB4YjAsMHgwNSwweDI0LDB4NjMsMHgxNiwweDA5LAotMHgwMiwweDIyLDB4MTAsMHgyMSwweDM0LDB4ODQsMHgwNCwweDIwLDB4MzQsMHhhNSwweDA0LDB4MjQsMHgzYywweDA2LDB4YjAsMHgwNSwKLTB4YWMsMHg4MywweDAwLDB4MDAsMHgyNCwweDA3LDB4MDAsMHgwMSwweGFjLDB4YTIsMHgwMCwweDAwLDB4MzQsMHhjNiwweDAyLDB4MjgsCi0weDI0LDB4MDIsMHgwMCwweDIwLDB4YWUsMHg0NywweDAwLDB4M2MsMHgyNCwweDA0LDB4MDgsMHgyNCwweGEwLDB4YzIsMHgwMCwweDAwLAotMHgzYywweDA1LDB4MDAsMHhjMCwweGEyLDB4NDcsMHgwMCwweDExLDB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwMSwKLTB4MjQsMHgwNCwweDA4LDB4MzQsMHgzYywweDA1LDB4MDAsMHhjMCwweDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDEsCi0weDhmLDB4YmYsMHgwMCwweDFjLDB4OGYsMHhiMiwweDAwLDB4MTgsMHg3YiwweGIwLDB4MDAsMHhiYywweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgyNywweGJkLDB4MDAsMHgyMCwweDI0LDB4MDIsMHgwMCwweDA2LDB4YWMsMHg4MiwweDAwLDB4MGMsMHhhMCwweDgwLDB4MDAsMHg1MCwKLTB4YWMsMHg4MCwweDAwLDB4MDAsMHhhYywweDgwLDB4MDAsMHgwNCwweGFjLDB4ODAsMHgwMCwweDA4LDB4YWMsMHg4MCwweDAwLDB4MTQsCi0weGFjLDB4ODAsMHgwMCwweDE4LDB4YWMsMHg4MCwweDAwLDB4MWMsMHhhNCwweDgwLDB4MDAsMHgyMCwweGFjLDB4ODAsMHgwMCwweDI0LAotMHhhYywweDgwLDB4MDAsMHgyOCwweGFjLDB4ODAsMHgwMCwweDJjLDB4YTAsMHg4MCwweDAwLDB4MzAsMHhhMCwweDgwLDB4MDAsMHgzMSwKLTB4YWMsMHg4MCwweDAwLDB4MzQsMHhhYywweDgwLDB4MDAsMHgzOCwweGEwLDB4ODAsMHgwMCwweDNjLDB4YWMsMHg4MiwweDAwLDB4MTAsCi0weGEwLDB4ODAsMHgwMCwweDQ0LDB4YWMsMHg4MCwweDAwLDB4NDgsMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4ODAsMHgwMCwweDRjLAotMHgzYywweDA0LDB4YjAsMHgwNiwweDM0LDB4ODQsMHg4MCwweDAwLDB4OGMsMHg4MywweDAwLDB4MDAsMHgzYywweDAyLDB4MTIsMHgwMCwKLTB4M2MsMHgwNSwweGIwLDB4MDMsMHgwMCwweDYyLDB4MTgsMHgyNSwweDM0LDB4YTUsMHgwMCwweDhiLDB4MjQsMHgwMiwweGZmLDB4ODAsCi0weGFjLDB4ODMsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhMCwweGEyLDB4MDAsMHgwMCwweDNjLDB4MDQsMHhiMCwweDAzLAotMHgzNCwweDg0LDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMCwweDIyLDB4M2MsMHgwNSwweGIwLDB4MDEsMHgzYywweDA2LDB4NDUsMHg2NywKLTB4M2MsMHgwYSwweGIwLDB4MDksMHhhMCwweDgyLDB4MDAsMHgwMCwweDM0LDB4YTUsMHgwMCwweDA0LDB4MzQsMHhjNiwweDg5LDB4YWEsCi0weDM1LDB4NGEsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAxLDB4MjMsMHgzYywweDBiLDB4YjAsMHgwOSwweDNjLDB4MDcsMHgwMSwweDIzLAotMHgzYywweDBjLDB4YjAsMHgwOSwweDNjLDB4MDEsMHhiMCwweDAxLDB4YWMsMHgyMCwweDAwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHhlMCwKLTB4YWMsMHhhMCwweDAwLDB4MDAsMHgzNSwweDZiLDB4MDAsMHgwOCwweDNjLDB4MDEsMHhiMCwweDA5LDB4YWMsMHgyNiwweDAwLDB4MDAsCi0weDM0LDB4ZTcsMHg0NSwweDY2LDB4YTUsMHg0MiwweDAwLDB4MDAsMHgzNSwweDhjLDB4MDAsMHgwYywweDI0LDB4MDIsMHhjZCwweGVmLAotMHgzYywweDBkLDB4YjAsMHgwOSwweDNjLDB4MDgsMHhjZCwweGVmLDB4M2MsMHgwZSwweGIwLDB4MDksMHhhZCwweDY3LDB4MDAsMHgwMCwKLTB4YWYsMHhiNywweDAwLDB4MWMsMHhhNSwweDgyLDB4MDAsMHgwMCwweGFmLDB4YjYsMHgwMCwweDE4LDB4YWYsMHhiNSwweDAwLDB4MTQsCi0weGFmLDB4YjQsMHgwMCwweDEwLDB4YWYsMHhiMywweDAwLDB4MGMsMHhhZiwweGIyLDB4MDAsMHgwOCwweGFmLDB4YjEsMHgwMCwweDA0LAotMHhhZiwweGIwLDB4MDAsMHgwMCwweDM1LDB4YWQsMHgwMCwweDEwLDB4MzUsMHgwOCwweDAxLDB4MjIsMHgzNSwweGNlLDB4MDAsMHgxNCwKLTB4MjQsMHgwMiwweDg5LDB4YWIsMHgzYywweDBmLDB4YjAsMHgwOSwweDNjLDB4MDksMHg4OSwweGFiLDB4M2MsMHgxMCwweGIwLDB4MDksCi0weDNjLDB4MTEsMHhiMCwweDA5LDB4M2MsMHgxMiwweGIwLDB4MDksMHgzYywweDEzLDB4YjAsMHgwOSwweDNjLDB4MTQsMHhiMCwweDA5LAotMHgzYywweDE1LDB4YjAsMHgwOSwweDNjLDB4MTYsMHhiMCwweDA5LDB4M2MsMHgxNywweGIwLDB4MDksMHhhZCwweGE4LDB4MDAsMHgwMCwKLTB4MjQsMHgwMywweGZmLDB4ZmYsMHhhNSwweGMyLDB4MDAsMHgwMCwweDM1LDB4ZWYsMHgwMCwweDE4LDB4MzUsMHgyOSwweGNkLDB4ZWUsCi0weDM2LDB4MTAsMHgwMCwweDFjLDB4MzYsMHgzMSwweDAwLDB4MjAsMHgzNiwweDUyLDB4MDAsMHgyNCwweDM2LDB4NzMsMHgwMCwweDI4LAotMHgzNiwweDk0LDB4MDAsMHgyYywweDM2LDB4YjUsMHgwMCwweDMwLDB4MzYsMHhkNiwweDAwLDB4MzQsMHgzNiwweGY3LDB4MDAsMHgzOCwKLTB4MjQsMHgwMiwweDQ1LDB4NjcsMHhhZCwweGU5LDB4MDAsMHgwMCwweGE2LDB4MDIsMHgwMCwweDAwLDB4YWUsMHgyMywweDAwLDB4MDAsCi0weDhmLDB4YjAsMHgwMCwweDAwLDB4YTYsMHg0MywweDAwLDB4MDAsMHg4ZiwweGIxLDB4MDAsMHgwNCwweGFlLDB4NjMsMHgwMCwweDAwLAotMHg4ZiwweGIyLDB4MDAsMHgwOCwweGE2LDB4ODMsMHgwMCwweDAwLDB4OGYsMHhiMywweDAwLDB4MGMsMHhhZSwweGEzLDB4MDAsMHgwMCwKLTB4OGYsMHhiNCwweDAwLDB4MTAsMHhhNiwweGMzLDB4MDAsMHgwMCwweDhmLDB4YjUsMHgwMCwweDE0LDB4YWUsMHhlMywweDAwLDB4MDAsCi0weDdiLDB4YjYsMHgwMCwweGZjLDB4M2MsMHgxOCwweGIwLDB4MDksMHgzNywweDE4LDB4MDAsMHgzYywweGE3LDB4MDMsMHgwMCwweDAwLAotMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDIwLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwKLTB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4NTEsMHg0OCwweGFjLDB4NjIsMHgwMCwweDAwLDB4OGMsMHg4MywweDAwLDB4MzQsCi0weDM0LDB4MDIsMHhmZiwweGZmLDB4MDAsMHg0MywweDEwLDB4MmEsMHgxNCwweDQwLDB4MDEsMHgwNCwweDAwLDB4ODAsMHgyOCwweDIxLAotMHg4YywweDg2LDB4MDAsMHgwOCwweDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhjMiwweDAwLDB4ZjcsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGMsMHhhMiwweDAwLDB4MmMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDRmLDB4MjQsMHgwMiwweDAwLDB4MDYsCi0weDNjLDB4MDMsMHhiMCwweDA1LDB4MzQsMHg2MywweDA0LDB4NTAsMHg5MCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzMCwweDQyLDB4MDAsMHhmZiwweDE0LDB4NDAsMHgwMCwweGRkLDB4YWMsMHhhMiwweDAwLDB4MmMsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MTAsMHhjMiwweDAwLDB4ZGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhjMiwweDAwLDB4Y2EsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHhhNywweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4ZTIsMHgwMCwweGMwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4YTIsMHgwMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwOSwKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHgzYywweDAzLDB4YjAsMHgwOSwweDM0LDB4NjMsMHgwMSwweDYwLDB4OTAsMHg2MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmYsMHgxMCwweDQwLDB4MDAsMHgwNSwweGFjLDB4YTIsMHgwMCwweDE0LAotMHgyNCwweDAyLDB4MDAsMHgwMSwweGFjLDB4YTIsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhYywweGEwLDB4MDAsMHgxNCwKLTB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDAsMHhkMCwweDhjLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA0LDB4NjEsMHgwMCwweDE5LDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzYywweDAzLDB4YjAsMHgwNSwweDM0LDB4NjMsMHgwMiwweDJlLAotMHg5MCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgxNCwweDQwLDB4MDAsMHgxMiwKLTB4M2MsMHgwMiwweGIwLDB4MDMsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwMiwweDQyLDB4OTAsMHg0MywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg2MCwweDAwLDB4MGMsMHgzYywweDAyLDB4YjAsMHgwMywweDgwLDB4YTIsMHgwMCwweDUwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDA4LDB4M2MsMHgwMiwweGIwLDB4MDMsMHgxNCwweGMwLDB4MDAsMHgwNywKLTB4MzQsMHg0MiwweDAwLDB4M2YsMHgyNCwweDAyLDB4MDAsMHgwZSwweDI0LDB4MDMsMHgwMCwweDAxLDB4YWMsMHhhMiwweDAwLDB4MDAsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4YTAsMHhhMywweDAwLDB4NTAsMHgzNCwweDQyLDB4MDAsMHgzZiwweDkwLDB4NDQsMHgwMCwweDAwLAotMHgyNCwweDAzLDB4MDAsMHgwMSwweDEwLDB4NjQsMHgwMCwweDdmLDB4M2MsMHgwMywweGIwLDB4MDUsMHg4MCwweGEyLDB4MDAsMHgzMSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgwYSwweDNjLDB4MDIsMHhiMCwweDA2LDB4MzQsMHg0MiwweDgwLDB4MTgsCi0weDhjLDB4NDMsMHgwMCwweDAwLDB4M2MsMHgwNCwweGYwLDB4MDAsMHgzYywweDAyLDB4ODAsMHgwMCwweDAwLDB4NjQsMHgxOCwweDI0LAotMHgxMCwweDYyLDB4MDAsMHgwMywweDI0LDB4MDIsMHgwMCwweDA5LDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhYywweGEyLDB4MDAsMHgwMCwKLTB4OGMsMHhhMiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4NjAsMHgwMCwweDA5LDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwMiwweDJjLAotMHg4YywweDQzLDB4MDAsMHgwMCwweDNjLDB4MDQsMHgwMCwweDAyLDB4MDAsMHg2NCwweDE4LDB4MjQsMHgxNCwweDYwLDB4ZmYsMHhmMiwKLTB4MjQsMHgwMiwweDAwLDB4MTAsMHgzYywweDAzLDB4YjAsMHgwMywweDM0LDB4NjMsMHgwMiwweDAxLDB4OTAsMHg2MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ODAsMHgxMCwweDQwLDB4MDAsMHgwZSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4YywweGEzLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4YWMsMHhhMywweDAwLDB4MTAsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4OTAsMHg0MiwweDAyLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweDBmLDB4YWMsMHhhMiwweDAwLDB4MGMsCi0weDkwLDB4YTMsMHgwMCwweDBmLDB4MjQsMHgwMiwweDAwLDB4MGQsMHgzYywweDAxLDB4YjAsMHgwMywweDA4LDB4MDAsMHgxNCwweGIyLAotMHhhMCwweDIzLDB4MDIsMHgwMSwweDNjLDB4MDIsMHhiMCwweDA5LDB4MzQsMHg0MiwweDAxLDB4ODAsMHg5MCwweDQ0LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MWUsMHgwMCwweDAwLDB4MDMsMHgxZSwweDAzLDB4MTAsMHg2MCwweDAwLDB4MTUsCi0weGEwLDB4YTQsMHgwMCwweDQ0LDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMCwweDYyLDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMCwweDAyLAotMHgxMCwweDYyLDB4MDAsMHgwMywweDI0LDB4MDMsMHgwMCwweDBkLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGMsMHhhMiwweDAwLDB4MGMsMHhhYywweGEzLDB4MDAsMHgwMCwweDI0LDB4MDMsMHgwMCwweDA0LDB4YWMsMHhhMiwweDAwLDB4MTAsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4YWMsMHhhMywweDAwLDB4MGMsMHgyNCwweDAyLDB4MDAsMHgwZCwweGFjLDB4YTIsMHgwMCwweDAwLAotMHgyNCwweDAzLDB4MDAsMHgwNCwweDI0LDB4MDIsMHgwMCwweDA2LDB4YWMsMHhhMywweDAwLDB4MTAsMHgwMywweGUwLDB4MDAsMHgwOCwKLTB4YWMsMHhhMiwweDAwLDB4MGMsMHg4YywweGEzLDB4MDAsMHgzOCwweDI0LDB4MDQsMHgwMCwweDAxLDB4MTAsMHg2NCwweDAwLDB4MmQsCi0weDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHg2MCwweDAwLDB4MTksMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NjIsMHgwMCwweDEwLAotMHgyNCwweDAyLDB4MDAsMHgwNCwweDEwLDB4NjIsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYywweGEwLDB4MDAsMHgzOCwKLTB4MDMsMHhlMCwweDAwLDB4MDgsMHhhYywweGEwLDB4MDAsMHgwMCwweDEwLDB4ZTQsMHgwMCwweDA3LDB4MjQsMHgwMiwweDAwLDB4MDMsCi0weDgwLDB4YTIsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTgsMHgwYiwweGFjLDB4YTMsMHgwMCwweDAwLAotMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4YTAsMHgwMCwweDM4LDB4MDgsMHgwMCwweDE1LDB4MDQsMHhhYywweGEyLDB4MDAsMHgwMCwKLTB4MTAsMHhlNCwweDAwLDB4MDIsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LDB4MDIsMHgwMCwweDBjLDB4YWMsMHhhMiwweDAwLDB4MDAsCi0weDI0LDB4MDIsMHgwMCwweDA0LDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhYywweGEyLDB4MDAsMHgzOCwweDEwLDB4ZTQsMHgwMCwweDBlLAotMHgzYywweDAzLDB4YjAsMHgwNiwweDM0LDB4NjMsMHg4MCwweDI0LDB4OGMsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHg0MiwweDAwLDB4ZmYsMHgxMCwweDQwLDB4MDAsMHgwNiwweGFjLDB4YTIsMHgwMCwweDE4LDB4MjQsMHgwMiwweDAwLDB4MDIsCi0weGFjLDB4YTIsMHgwMCwweDAwLDB4YWMsMHhhMCwweDAwLDB4MTgsMHgwOCwweDAwLDB4MTUsMHgwZCwweDI0LDB4MDIsMHgwMCwweDAxLAotMHgwOCwweDAwLDB4MTUsMHgxYSwweGFjLDB4YTAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgwOCwweDAwLDB4MTUsMHgxYSwKLTB4YWMsMHhhMiwweDAwLDB4MDAsMHgyNCwweDAzLDB4MDAsMHgwYiwweGFjLDB4YTIsMHgwMCwweDM4LDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weGFjLDB4YTMsMHgwMCwweDAwLDB4MzQsMHg2MywweDAyLDB4MmUsMHg5MCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzMCwweDQyLDB4MDAsMHgwMSwweDE0LDB4NDAsMHhmZiwweDdkLDB4M2MsMHgwMiwweGIwLDB4MDUsMHgzNCwweDQyLDB4MDIsMHg0MiwKLTB4OTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NjAsMHhmZiwweDc4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4YzAsMHhmZiwweDgxLDB4MjQsMHgwMiwweDAwLDB4MGUsMHgwOCwweDAwLDB4MTQsMHhhNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4MCwweGEyLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweGZmLDB4M2UsMHgyNCwweDAyLDB4MDAsMHgwNCwKLTB4MDgsMHgwMCwweDE0LDB4YjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4YTIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4NDAsMHhmZiwweDc1LDB4MjQsMHgwMiwweDAwLDB4MDYsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwMiwweDJlLAotMHg5MCwweDQzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg2MywweDAwLDB4MDEsMHgzMCwweDYzLDB4MDAsMHhmZiwKLTB4MDAsMHg2MCwweDEwLDB4MjEsMHgxNCwweDQwLDB4ZmYsMHgyYiwweGE0LDB4YTMsMHgwMCwweDIwLDB4MDgsMHgwMCwweDE0LDB4YjIsCi0weDI0LDB4MDIsMHgwMCwweDA2LDB4OGMsMHhhMiwweDAwLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4NDAsMHhmZiwweDY2LAotMHgyNCwweDAyLDB4MDAsMHgwNSwweDNjLDB4MDMsMHhiMCwweDA1LDB4MzQsMHg2MywweDAyLDB4MmMsMHg4YywweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHhmZiwweDEwLDB4NDAsMHhmZiwweDFiLDB4YWMsMHhhMiwweDAwLDB4MWMsCi0weDA4LDB4MDAsMHgxNCwweGIyLDB4MjQsMHgwMiwweDAwLDB4MDUsMHgzYywweDAyLDB4YjAsMHgwNSwweDhjLDB4NDIsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxNywweDQyLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgxNCwweDQwLDB4ZmYsMHg1NiwKLTB4MjQsMHgwMiwweDAwLDB4MDYsMHgwOCwweDAwLDB4MTQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MGEsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4YWMsMHg4MiwweDAwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHhkOCwweGFmLDB4YjAsMHgwMCwweDEwLAotMHgyNywweDkwLDB4ODYsMHg1OCwweGFmLDB4YmYsMHgwMCwweDIwLDB4YWYsMHhiMywweDAwLDB4MWMsMHhhZiwweGIyLDB4MDAsMHgxOCwKLTB4MGMsMHgwMCwweDI5LDB4ZDUsMHhhZiwweGIxLDB4MDAsMHgxNCwweGFmLDB4OTAsMHg4ZiwweGUwLDB4NDgsMHgwMiwweDAwLDB4MDAsCi0weDBjLDB4MDAsMHgxMywweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MTgsMHgxZiwweDAyLDB4MDAsMHgyMCwweDIxLAotMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMCwweDNhLDB4OTQsMHg0MywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YTMsMHg4MywweDhmLDB4ZTQsMHgwYywweDAwLDB4MDAsMHgzNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDEzLDB4ZmIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjcsMHg4NCwweDg0LDB4OTgsMHgwYywweDAwLDB4MjcsMHg1OSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg5MywweDg0LDB4ODAsMHgxMCwweDBjLDB4MDAsMHgyMSwweDNmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNywweDg0LDB4ODksMHgxOCwKLTB4MGMsMHgwMCwweDA2LDB4ZTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwMSwweDM5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI3LDB4ODQsMHg4NCwweDQwLDB4MGMsMHgwMCwweDEzLDB4ZDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDI3LDB4ODIsMHg4OSwweDRjLAotMHhhZiwweDgyLDB4ODQsMHg4MCwweDBjLDB4MDAsMHgwMCwweDVmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4MzQsMHg2MywweDAxLDB4MDgsMHgzYywweDA0LDB4YjAsMHgwOSwweDNjLDB4MDUsMHhiMCwweDA5LDB4OGMsMHg2NiwweDAwLDB4MDAsCi0weDM0LDB4ODQsMHgwMSwweDY4LDB4MzQsMHhhNSwweDAxLDB4NDAsMHgyNCwweDAyLDB4YzgsMHg4MCwweDI0LDB4MDMsMHgwMCwweDBhLAotMHhhNCwweDgyLDB4MDAsMHgwMCwweGE0LDB4YTMsMHgwMCwweDAwLDB4M2MsMHgwNCwweGIwLDB4MDMsMHg4YywweDgyLDB4MDAsMHgwMCwKLTB4OGYsMHg4NSwweDg0LDB4NDAsMHhhZiwweDg2LDB4ODQsMHgzOCwweDM0LDB4NDIsMHgwMCwweDIwLDB4YWMsMHg4MiwweDAwLDB4MDAsCi0weDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAwLDB4NTgsMHg4YywweDQzLDB4MDAsMHgwMCwweDJjLDB4YTQsMHgwMCwweDExLAotMHgzNCwweDYzLDB4MDEsMHgwMCwweGFjLDB4NDMsMHgwMCwweDAwLDB4MTAsMHg4MCwweGZmLDB4ZmEsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4M2MsMHgwMywweDgwLDB4MDEsMHgwMCwweDA1LDB4MTAsMHg4MCwweDI0LDB4NjMsMHgwMiwweDAwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weDhjLDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNywweDg0LDB4ODQsMHg5OCwweDBjLDB4MDAsMHgyNiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNywweDg0LDB4ODQsMHg0MCwKLTB4MGMsMHgwMCwweDE0LDB4NTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkzLDB4ODMsMHg4MSwweGYxLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDEwLDB4NjIsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweDg1LDB4ODQsMHg0MCwweDhmLDB4ODIsMHg4NCwweDc0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDIsMHgwMCwweDAxLDB4YWYsMHg4MiwweDg0LDB4NzQsMHgwOCwweDAwLDB4MTUsMHg5ZCwKLTB4M2MsMHgwMiwweGIwLDB4MDMsMHgyNywweDg0LDB4ODQsMHg5OCwweDBjLDB4MDAsMHgyNywweDBkLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgxNSwweGI2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNywweDg0LDB4ODQsMHg5OCwweDBjLDB4MDAsMHgyOCwweGRkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGEzLDB4ODIsMHg4NCwweDcxLDB4OGYsMHg4MiwweDg0LDB4NzQsMHhhZiwweDgwLDB4ODQsMHg0MCwKLTB4MjQsMHg0MiwweDAwLDB4MDEsMHhhZiwweDgyLDB4ODQsMHg3NCwweDA4LDB4MDAsMHgxNSwweDljLDB4MDAsMHgwMCwweDI4LDB4MjEsCi0weDI3LDB4ODQsMHg4NiwweDU4LDB4MGMsMHgwMCwweDE5LDB4NWIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweGZmLAotMHgxNCwweDQwLDB4MDAsMHgwNSwweDNjLDB4MDMsMHhiMCwweDA1LDB4YWYsMHg4MCwweDg0LDB4NDAsMHhhZiwweDgwLDB4ODQsMHg0NCwKLTB4MDgsMHgwMCwweDE1LDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM0LDB4NjMsMHgwNCwweDUwLDB4OTAsMHg2MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmYsMHhhZiwweDgyLDB4ODQsMHg2YywweDE0LDB4NDAsMHgwMCwweDIwLAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDhmLDB4ODQsMHg4NCwweDQ4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDgyLDB4MDAsMHgyMCwKLTB4M2MsMHgwMywweGIwLDB4MDksMHgzNCwweDYzLDB4MDEsMHg2MCwweDkwLDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDMwLDB4NDIsMHgwMCwweGZmLDB4YWYsMHg4MiwweDg0LDB4NTQsMHgxNCwweDQwLDB4MDAsMHgxNSwweDI0LDB4MDIsMHgwMCwweDAxLAotMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4ODIsMHgwMCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDA1LDB4MDAsMHgwMywKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHhhZiwweDgyLDB4ODQsMHg0NCwweGFmLDB4ODUsMHg4NCwweDQwLDB4MDgsMHgwMCwweDE1LDB4YjYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDUsMHgzNCwweDQyLDB4MDIsMHgyZSwweDkwLDB4NDMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NjMsMHgwMCwweDAxLDB4MzAsMHg2MywweDAwLDB4ZmYsMHgwMCwweDYwLDB4MTAsMHgyMSwKLTB4YTcsMHg4MywweDg0LDB4NjAsMHgxNCwweDQwLDB4ZmYsMHhmMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weGFmLDB4ODIsMHg4NCwweDQ0LDB4YWYsMHg4MCwweDg0LDB4NDAsMHgwOCwweDAwLDB4MTUsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDAzLDB4YjAsMHgwNSwweDM0LDB4NjMsMHgwMiwweDJjLDB4OGMsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHg0MiwweDAwLDB4ZmYsMHhhZiwweDgyLDB4ODQsMHg1YywweDE0LDB4NDAsMHhmZiwweGY1LDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDA4LDB4MDAsMHgxNSwweGUxLDB4M2MsMHgwMywweGIwLDB4MDksMHgyNywweDg0LDB4ODYsMHg1OCwweDBjLDB4MDAsMHgxYSwweGQxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDgzLDB4ODIsMHg4NCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4ZmYsMHhlYywKLTB4MjQsMHgwMiwweDAwLDB4MDIsMHgzYywweDAzLDB4YjAsMHgwNSwweDM0LDB4NjMsMHgwNCwweDUwLDB4OTAsMHg2MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmYsMHhhZiwweDgyLDB4ODQsMHg2YywweDE0LDB4NDAsMHhmZiwweGU0LAotMHgyNCwweDAyLDB4MDAsMHgwMiwweDhmLDB4ODQsMHg4NCwweDQ4LDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMCwweDgyLDB4MDAsMHgxMiwKLTB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweDgyLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwNSwweDAwLDB4MDQsCi0weDA4LDB4MDAsMHgxNSwweGVkLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwMiwweDJlLAotMHg5MCwweDQzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg2MywweDAwLDB4MDEsMHgzMCwweDYzLDB4MDAsMHhmZiwKLTB4MDAsMHg2MCwweDEwLDB4MjEsMHhhNywweDgzLDB4ODQsMHg2MCwweDE0LDB4NDAsMHhmZiwweGY0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgxNSwweGZjLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgzYywweDAzLDB4YjAsMHgwNSwweDM0LDB4NjMsMHgwMiwweDJjLAotMHg4YywweDYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmYsMHhhZiwweDgyLDB4ODQsMHg1YywKLTB4MTQsMHg0MCwweGZmLDB4ZjcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxNiwweDFkLDB4MjQsMHgwMiwweDAwLDB4MDIsCi0weDI3LDB4ODQsMHg4OSwweDE4LDB4MGMsMHgwMCwweDBiLDB4NTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODMsMHg4NCwweDQ0LAotMHhhZiwweDgyLDB4ODQsMHg1YywweDM4LDB4NjQsMHgwMCwweDAyLDB4MDAsMHgwNCwweDE4LDB4MGEsMHhhZiwweDgzLDB4ODQsMHg0NCwKLTB4MTQsMHg0MCwweGZmLDB4YWQsMHgyNCwweDA1LDB4MDAsMHgwNSwweDhmLDB4ODIsMHg4OSwweDU4LDB4YWYsMHg4MCwweDg0LDB4NDAsCi0weDEwLDB4NDAsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4MDEsMHhhZiwweDg0LDB4ODQsMHg0OCwweDkzLDB4ODIsMHg4OSwweDY2LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHhmZiwweDZjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwNSwKLTB4MzQsMHg0MiwweDAwLDB4MDgsMHg4YywweDQzLDB4MDAsMHgwMCwweDNjLDB4MDQsMHgyMCwweDAwLDB4MDAsMHg2NCwweDE4LDB4MjQsCi0weDEwLDB4NjAsMHhmZiwweDY1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMCwweGEwLAotMHg4YywweDQzLDB4MDAsMHgwMCwweDNjLDB4MDQsMHg4MCwweDAwLDB4YWYsMHg4MCwweDg5LDB4NDAsMHgyNCwweDYzLDB4MDAsMHgwMSwKLTB4YWMsMHg0MywweDAwLDB4MDAsMHgzYywweDAxLDB4YjAsMHgwNSwweGFjLDB4MjQsMHgwMCwweDA4LDB4YWYsMHg4MCwweDg5LDB4M2MsCi0weGFmLDB4ODAsMHg4OSwweDQ0LDB4YWYsMHg4MCwweDg5LDB4NDgsMHhhZiwweDgwLDB4ODksMHg1NCwweGFmLDB4ODAsMHg4OSwweDRjLAotMHgwOCwweDAwLDB4MTUsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODMsMHg4MiwweDg0LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHg0MCwweDAwLDB4MDIsMHgyNCwweDAyLDB4MDAsMHgyMCwweGFmLDB4ODIsMHg4NCwweDVjLDB4OGYsMHg4NSwweDg0LDB4NWMsCi0weDI3LDB4ODQsMHg4OSwweDE4LDB4MGMsMHgwMCwweDBkLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxZSwweDAwLAotMHhhMywweDgyLDB4ODQsMHg3MCwweGFmLDB4ODAsMHg4NCwweDVjLDB4MTAsMHg2MCwweGZmLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2MsMHgwMiwweGIwLDB4MDUsMHgzNCwweDQyLDB4MDIsMHgyZSwweDkwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDMwLDB4NjMsMHgwMCwweDAxLDB4MzAsMHg2MywweDAwLDB4ZmYsMHgwMCwweDYwLDB4MTAsMHgyMSwweGE3LDB4ODMsMHg4NCwweDYwLAotMHgxMCwweDQwLDB4MDAsMHgwNCwweDI0LDB4MDQsMHgwMCwweDAyLDB4YWYsMHg4NCwweDg0LDB4NDgsMHgwOCwweDAwLDB4MTUsMHhmZCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTUsMHhlZSwweDI0LDB4MDUsMHgwMCwweDA2LDB4MjcsMHg4NCwweDg0LDB4NDAsCi0weDI3LDB4ODUsMHg4OSwweDE4LDB4MGMsMHgwMCwweDBkLDB4ZmQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODIsMHg4NCwweDY0LAotMHhhZiwweDgwLDB4ODQsMHg2YywweDE0LDB4NDAsMHgwMCwweDE5LDB4MDAsMHg0MCwweDE4LDB4MjEsMHg4ZiwweDgyLDB4ODQsMHg2OCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgxNSwweDI0LDB4MDIsMHgwMCwweDAyLDB4OGYsMHg4MywweDg0LDB4NDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg2MiwweDAwLDB4MGIsMHgzYywweDAyLDB4NDAsMHgwMCwweDhmLDB4ODMsMHg4NCwweDQ0LAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4NjIsMHgwMCwweDAyLDB4MjQsMHgwNSwweDAwLDB4MDMsMHgyNCwweDA1LDB4MDAsMHgwNiwKLTB4YWYsMHg4NSwweDg0LDB4NDAsMHgyNCwweDA0LDB4MDAsMHgwMywweGFmLDB4ODQsMHg4NCwweDQ4LDB4MDgsMHgwMCwweDE1LDB4YjYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHg0MiwweDAwLDB4MTQsMHgzYywweDAxLDB4YjAsMHgwNSwweGFjLDB4MjIsMHgwMCwweDAwLAotMHhhZiwweDgwLDB4ODQsMHg0MCwweDA4LDB4MDAsMHgxNiwweDk2LDB4MjQsMHgwNCwweDAwLDB4MDMsMHgxMCwweDYwLDB4MDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNywweDg1LDB4ODksMHgxOCwweDI3LDB4ODQsMHg4NCwweDQwLDB4MGMsMHgwMCwweDBlLDB4MjEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHg4MywweDg0LDB4NDQsMHgyNCwweDAyLDB4MDAsMHgwMSwweGEzLDB4ODAsMHg4NCwweDcwLAotMHhhZiwweDgwLDB4ODQsMHg0OCwweDEwLDB4NjIsMHgwMCwweDAyLDB4MjQsMHgwNSwweDAwLDB4MDMsMHgyNCwweDA1LDB4MDAsMHgwNCwKLTB4YWYsMHg4NSwweDg0LDB4NDAsMHhhZiwweDgwLDB4ODQsMHg2NCwweDA4LDB4MDAsMHgxNSwweGI2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDgzLDB4ODIsMHg4NCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNywweDg0LDB4ODksMHgxOCwweDBjLDB4MDAsMHgxMCwweDY5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweDgyLDB4ODQsMHg0NCwKLTB4YTMsMHg4MCwweDg0LDB4NzAsMHhhZiwweDgwLDB4ODQsMHg0MCwweGFmLDB4ODAsMHg4NCwweDQ4LDB4MTQsMHg0MCwweDAwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsMHhhZiwweDgyLDB4ODQsMHg0NCwweGFmLDB4ODAsMHg4NCwweDY4LAotMHgwOCwweDAwLDB4MTUsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjcsMHg4NCwweDg0LDB4NDAsMHgyNywweDg1LDB4ODksMHgxOCwKLTB4MGMsMHgwMCwweDBlLDB4MjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODIsMHg4NCwweDQ0LDB4YTMsMHg4MCwweDg0LDB4NzAsCi0weGFmLDB4ODAsMHg4NCwweDQwLDB4YWYsMHg4MCwweDg0LDB4NDgsMHgxNCwweDQwLDB4ZmUsMHhlYiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwMiwweGFmLDB4ODIsMHg4NCwweDQ0LDB4MDgsMHgwMCwweDE1LDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjcsMHg4NCwweDg5LDB4MTgsMHgwYywweDAwLDB4MTAsMHg2OSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDE2LDB4YzYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjcsMHg4NCwweDg0LDB4OTgsMHgwYywweDAwLDB4MjksMHg3MywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MTUsMHhjNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDI0LDB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGMsMHgwMCwweDI2LDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgxOCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDkzLDB4ODMsMHhiYywweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDYwLDB4MDAsMHgyYiwweDNjLDB4MDIsMHhiMCwweDAzLAotMHgzNCwweDQyLDB4MDEsMHgwOCwweDhjLDB4NDQsMHgwMCwweDAwLDB4OGYsMHg4MywweGJjLDB4MTAsMHg4ZiwweDgyLDB4YmMsMHgxNCwKLTB4MDAsMHg4MywweDE4LDB4MjMsMHgwMCwweDQzLDB4MTAsMHgyYiwweDEwLDB4NDAsMHgwMCwweDIzLDB4M2MsMHgwMiwweGIwLDB4MDMsCi0weDI0LDB4MDQsMHgwNSwweGEwLDB4MzQsMHg0MiwweDAxLDB4MTgsMHg4YywweDQyLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwNiwweGQxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDQsMHgwNSwweGE0LDB4MGMsMHgwMCwweDA2LDB4ZDEsMHgwMCwweDAyLDB4ODQsMHgwMiwKLTB4MzAsMHg1MSwweGZmLDB4ZmYsMHgyNCwweDA0LDB4MDUsMHhhOCwweDAwLDB4MDIsMHg5NCwweDAyLDB4MGMsMHgwMCwweDA2LDB4ZDEsCi0weDNhLDB4MTAsMHhmZiwweGZmLDB4M2EsMHgzMSwweGZmLDB4ZmYsMHgzMCwweDQyLDB4ZmYsMHhmZiwweDJlLDB4MTAsMHgwMCwweDAxLAotMHgyZSwweDMxLDB4MDAsMHgwMSwweDNhLDB4NTIsMHhmZiwweGZmLDB4MDIsMHgxMSwweDgwLDB4MjUsMHgyZSwweDUyLDB4MDAsMHgwMSwKLTB4MzgsMHg0MiwweGZmLDB4ZmYsMHgwMiwweDEyLDB4ODAsMHgyNSwweDJjLDB4NDIsMHgwMCwweDAxLDB4MDIsMHgwMiwweDgwLDB4MjUsCi0weDE2LDB4MDAsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgwNSwweDZlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAxLDB4MDgsMHg4YywweDQzLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhZiwweDgzLDB4YmMsMHgxMCwweDBjLDB4MDAsMHgwMSwweGU5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGFmLDB4ODAsMHg4NCwweDQwLDB4YWYsMHg4MCwweDg0LDB4NzQsMHgwOCwweDAwLDB4MTUsMHg5YywweDAwLDB4MDAsMHgyOCwweDIxLAotMHgyNywweDkwLDB4YjQsMHgwMCwweDI0LDB4MTEsMHgwMCwweDEyLDB4OGUsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTAsMHg4MiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBjLDB4MDAsMHgxOCwweGQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNiwweDMxLDB4ZmYsMHhmZiwweDA2LDB4MjEsMHhmZiwweGY2LAotMHgyNiwweDEwLDB4MDAsMHgwNCwweGFmLDB4ODAsMHg4NCwweDQwLDB4MDgsMHgwMCwweDE1LDB4YjcsMHgwMCwweDAwLDB4MjgsMHgyMSwKLTB4M2MsMHgwMiwweGIwLDB4MDMsMHgzNCwweDQyLDB4MDEsMHgwOCwweDhjLDB4NDQsMHgwMCwweDAwLDB4OGYsMHg4MiwweDg0LDB4MzgsCi0weDAwLDB4MDQsMHgxOSwweGMyLDB4MDAsMHgwMiwweDExLDB4YzIsMHgxMCwweDYyLDB4ZmYsMHhmNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMSwweDAyLDB4OTAsMHg0MywweDAwLDB4MDAsMHgzYywweDEyLDB4YjAsMHgwNSwKLTB4YWYsMHg4NCwweDg0LDB4MzgsMHgzMCwweDYzLDB4MDAsMHhmZiwweDAwLDB4MDMsMHgxMSwweDQwLDB4MDAsMHg0MywweDEwLDB4MjMsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4OTksMHgwMCwweDAwLDB4MDAsMHg4OCwweDIxLAotMHgzNiwweDUyLDB4MDIsMHgyYywweDI3LDB4OTAsMHhiNCwweDAwLDB4OGUsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTAsMHg4MywweDAwLDB4MTYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NjIsMHgwMCwweDAzLDB4MTAsMHg0MCwweDAwLDB4MDYsCi0weDMwLDB4NjIsMHgwMCwweDFjLDB4MTQsMHg0MCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODUsMHg4NCwweDM4LAotMHgwYywweDAwLDB4MWUsMHg5NCwweDAyLDB4NjAsMHgzMCwweDIxLDB4OGUsMHg0MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHg0MiwweDAwLDB4ZmYsMHgxNCwweDQwLDB4ZmYsMHhkNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjYsMHgzMSwweDAwLDB4MDEsCi0weDJhLDB4MjIsMHgwMCwweDEzLDB4MTQsMHg0MCwweGZmLDB4ZWMsMHgyNiwweDEwLDB4MDAsMHgwNCwweDA4LDB4MDAsMHgxNywweDIxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODQsMHg4NCwweDRjLDB4MjcsMHg4NSwweDg5LDB4MTgsMHgwYywweDAwLDB4MTcsMHhhNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweDgzLDB4ODQsMHg0YywweDI0LDB4MDIsMHgwMCwweDA0LDB4MTQsMHg2MiwweGZlLDB4YTUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDE1LDB4ZWUsMHgyNCwweDA1LDB4MDAsMHgwNSwweDNjLDB4MDIsMHhiMCwweDAzLAotMHgzNCwweDQyLDB4MDAsMHgzZiwweDkwLDB4NDQsMHgwMCwweDAwLDB4MjQsMHgwMywweDAwLDB4MDEsMHgxMCwweDY0LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNywweDg0LDB4ODksMHgxOCwweDBjLDB4MDAsMHgyNCwweDJjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MDUsMHgwMCwweDA1LDB4YWYsMHg4NSwweDg0LDB4NDAsMHgwOCwweDAwLDB4MTUsMHhiNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMCwweDE0LDB4OGMsMHg0NCwweDAwLDB4MDAsMHgwYywweDAwLDB4MjQsMHg0OSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTcsMHg2NSwweDI0LDB4MDUsMHgwMCwweDA1LDB4OGYsMHg4MiwweDg5LDB4NGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODQsMHhiNCwweDQwLAotMHhhZiwweDgwLDB4ODksMHg0YywweDk0LDB4ODUsMHgwMCwweDE0LDB4MGMsMHgwMCwweDFiLDB4NjYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTMsMHg4MiwweDhiLDB4NzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweDAyLDB4MTAsMHg0MCwweDAwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDAxLDB4NTcsMHgwMCwweDAwLDB4MjAsMHgyMSwweDhmLDB4ODQsMHhiNCwweDQwLAotMHgwYywweDAwLDB4MTgsMHhkMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDE3LDB4MjEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2MsMHgwMiwweGZmLDB4OTAsMHgyNywweGJkLDB4ZmYsMHhlOCwweDAwLDB4ODAsMHgxOCwweDIxLDB4MzQsMHg0MiwweDAwLDB4MDEsCi0weDI3LDB4ODQsMHg4OSwweDE4LDB4MTAsMHg2MiwweDAwLDB4MDUsMHhhZiwweGJmLDB4MDAsMHgxMCwweDhmLDB4YmYsMHgwMCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsMHgwYywweDAwLDB4MDYsMHhlNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNywweDg0LDB4ODYsMHg1OCwweDBjLDB4MDAsMHgxOCwweDFmLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI3LDB4ODQsMHg4NCwweDQwLDB4MGMsMHgwMCwweDEzLDB4ZDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxNywweDhiLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4ODIsMHg4OSwweDU4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwNSwKLTB4MDAsMHgwMCwweDE4LDB4MjEsMHg4ZiwweDgyLDB4ODQsMHg0OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MDIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMywweDAwLDB4MDEsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4NjAsMHgxMCwweDIxLAotMHgyNywweGJkLDB4ZmYsMHhlMCwweDNjLDB4MDYsMHhiMCwweDAzLDB4YWYsMHhiMSwweDAwLDB4MTQsMHhhZiwweGIwLDB4MDAsMHgxMCwKLTB4MzQsMHhjNiwweDAwLDB4NWYsMHhhZiwweGJmLDB4MDAsMHgxOCwweDkwLDB4YzMsMHgwMCwweDAwLDB4M2MsMHgwNywweGIwLDB4MDMsCi0weDM0LDB4ZTcsMHgwMCwweDVkLDB4MzQsMHg2MywweDAwLDB4MDEsMHgzYywweDA5LDB4YjAsMHgwMywweDI0LDB4MDIsMHgwMCwweDAxLAotMHhhMCwweGMzLDB4MDAsMHgwMCwweDAwLDB4ODAsMHg4MCwweDIxLDB4YTAsMHhlMiwweDAwLDB4MDAsMHgwMCwweGEwLDB4ODgsMHgyMSwKLTB4MzUsMHgyOSwweDAwLDB4NWUsMHgwMCwweGUwLDB4NDAsMHgyMSwweDI0LDB4MDQsMHgwMCwweDAxLDB4OTEsMHgyMiwweDAwLDB4MDAsCi0weDkxLDB4MDMsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgxNCwweDgzLDB4MDAsMHgwMywweDMwLDB4NDIsMHgwMCwweDAxLAotMHgxNCwweDQwLDB4ZmYsMHhmYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDQsMHgxMiwweDAyLDB4MDAsMHgyYywKLTB4MjQsMHgwNSwweDBmLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwNiwweDEyLDB4MDIsMHgwMCwweDA4LDB4MjQsMHgwNSwweDAwLDB4MGYsCi0weDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAyLDB4MDAsMHhhMCwweDUwLDB4MDAsMHgwMCwweDhmLDB4YmYsMHgwMCwweDE4LAotMHg3YiwweGIwLDB4MDAsMHhiYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjAsMHgyNCwweDA0LDB4MGMsMHgwNCwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwZiwweDI0LDB4MDQsMHgwZCwweDA0LDB4MjQsMHgwNSwweDAwLDB4MGYsCi0weDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MGYsMHgyNCwweDA0LDB4MDgsMHg4MCwweDI0LDB4MDUsMHgxZSwweDAwLAotMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDBmLDB4MjQsMHgwNCwweDA4LDB4OGMsMHgyNCwweDA1LDB4MGYsMHgwMCwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwZiwweDI0LDB4MDQsMHgwOCwweDI0LDB4M2MsMHgwNSwweDAwLDB4MzAsCi0weDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDIsMHgyNCwweDA0LDB4MDgsMHgyYywweDNjLDB4MDUsMHgwMCwweDMwLAotMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDAyLDB4MjQsMHgwNCwweDA4LDB4MzQsMHgzYywweDA1LDB4MDAsMHgzMCwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwOCwweDNjLDB4M2MsMHgwNSwweDAwLDB4MzAsCi0weDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDIsMHgwOCwweDAwLDB4MTcsMHhjNSwweDNjLDB4MDIsMHhiMCwweDAzLAotMHgyNCwweDA0LDB4MDgsMHg4YywweDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDQsMHgyNCwweDA0LDB4MDgsMHg4MCwKLTB4MjQsMHgwNSwweDFlLDB4MDAsMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDA0LDB4MjQsMHgwNCwweDBjLDB4MDQsCi0weDI0LDB4MDUsMHgwMCwweDBmLDB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwNCwweDI0LDB4MDQsMHgwZCwweDA0LAotMHgyNCwweDA1LDB4MDAsMHgwZiwweDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDQsMHgyNCwweDA0LDB4MDgsMHgyNCwKLTB4M2MsMHgwNSwweDAwLDB4MzAsMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDAzLDB4MjQsMHgwNCwweDA4LDB4MmMsCi0weDNjLDB4MDUsMHgwMCwweDMwLDB4MGMsMHgwMCwweDEzLDB4NWYsMHgyNCwweDA2LDB4MDAsMHgwMywweDI0LDB4MDQsMHgwOCwweDM0LAotMHgzYywweDA1LDB4MDAsMHgzMCwweDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDIsMHgzYywweDA1LDB4MDAsMHgzMCwKLTB4MjQsMHgwNiwweDAwLDB4MDMsMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDQsMHgwOCwweDNjLDB4MDIsMHgyMCwweDIwLDB4MjEsCi0weDI0LDB4MDUsMHgwMCwweDE0LDB4MGMsMHgwMCwweDEzLDB4YTQsMHgyNCwweDA2LDB4MDEsMHgwNywweDA4LDB4MDAsMHgxNywweGM1LAotMHgzYywweDAyLDB4YjAsMHgwMywweDNjLDB4MDMsMHhiMCwweDAzLDB4MzQsMHg2MywweDAwLDB4NzMsMHg5MCwweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHgwMiwweDE0LDB4NDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGEzLDB4ODAsMHg4MSwweDU4LDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLAotMHhhMywweDgyLDB4ODEsMHg1OCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4M2MsMHgwMiwweDgwLDB4MDAsMHgwMCwweDgwLDB4NzAsMHgyMSwweDM0LDB4NjMsMHgwMCwweDIwLDB4MjQsMHg0MiwweDYwLDB4N2MsCi0weDNjLDB4MDQsMHhiMCwweDAzLDB4YWMsMHg2MiwweDAwLDB4MDAsMHgzNCwweDg0LDB4MDAsMHgzMCwweGFkLDB4YzAsMHgwMiwweGI4LAotMHg4YywweDgzLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweGZmLDB4YTUsMHhjMCwweDAwLDB4MGEsMHgwMCwweDAwLDB4MzAsMHgyMSwKLTB4YTcsMHg4MiwweDhmLDB4ZjAsMHgyNywweDg4LDB4OTAsMHgwMCwweGE1LDB4YzMsMHgwMCwweDA4LDB4M2MsMHgwNywweGIwLDB4MDgsCi0weDMwLDB4YzIsMHhmZiwweGZmLDB4MDAsMHgwMiwweDIwLDB4YzAsMHgyNCwweGMzLDB4MDAsMHgwMSwweDAwLDB4ODIsMHgxMCwweDIxLAotMHgwMCwweDYwLDB4MzAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MzAsMHg2MywweGZmLDB4ZmYsMHgwMCwweDQ4LDB4MTAsMHgyMSwKLTB4MDAsMHg4NywweDIwLDB4MjEsMHgyOCwweGM1LDB4MDAsMHhmZiwweGFjLDB4ODMsMHgwMCwweDAwLDB4MTQsMHhhMCwweGZmLDB4ZjQsCi0weGE0LDB4NDMsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDgsMHgzNCwweDAzLDB4ZmYsMHhmZiwweDI1LDB4YzQsMHgwMCwweDBjLAotMHgyNCwweDBhLDB4MDAsMHgwMiwweDM0LDB4NDIsMHgwNywweGY4LDB4M2MsMHgwNiwweGIwLDB4MDMsMHhhNywweDgzLDB4YjMsMHhkYywKLTB4YWMsMHg0MywweDAwLDB4MDAsMHhhZiwweDg0LDB4YjQsMHgwMCwweDM0LDB4YzYsMHgwMCwweDY0LDB4YTAsMHg4YSwweDAwLDB4MTgsCi0weDk0LDB4YzUsMHgwMCwweDAwLDB4OGYsMHg4MiwweGI0LDB4MDAsMHgyNSwweGM0LDB4MDAsMHgzMCwweDI0LDB4MDgsMHgwMCwweDAzLAotMHgzYywweDAzLDB4YjAsMHgwMywweGEwLDB4NDUsMHgwMCwweDIxLDB4MzQsMHg2MywweDAwLDB4NjYsMHhhZiwweDg0LDB4YjQsMHgwNCwKLTB4YTAsMHg4OCwweDAwLDB4MTgsMHg5NCwweDY1LDB4MDAsMHgwMCwweDhmLDB4ODIsMHhiNCwweDA0LDB4MjUsMHhjNCwweDAwLDB4NTQsCi0weDI1LDB4YzcsMHgwMCwweDc4LDB4YTAsMHg0NSwweDAwLDB4MjEsMHhhZiwweDg0LDB4YjQsMHgwOCwweGEwLDB4ODgsMHgwMCwweDE4LAotMHg5NCwweDY1LDB4MDAsMHgwMCwweDhmLDB4ODIsMHhiNCwweDA4LDB4MjUsMHhjOCwweDAwLDB4OWMsMHgyNCwweDA5LDB4MDAsMHgwMSwKLTB4YTAsMHg0NSwweDAwLDB4MjEsMHhhZiwweDg3LDB4YjQsMHgwYywweGEwLDB4ZWEsMHgwMCwweDE4LDB4OTQsMHhjNCwweDAwLDB4MDAsCi0weDhmLDB4ODIsMHhiNCwweDBjLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzNCwweDYzLDB4MDAsMHg2MiwweGEwLDB4NDQsMHgwMCwweDIxLAotMHhhZiwweDg4LDB4YjQsMHgxMCwweGExLDB4MDksMHgwMCwweDE4LDB4OTQsMHg2NSwweDAwLDB4MDAsMHg4ZiwweDgyLDB4YjQsMHgxMCwKLTB4MjUsMHhjNCwweDAwLDB4YzAsMHgzYywweDA2LDB4YjAsMHgwMywweGEwLDB4NDUsMHgwMCwweDIxLDB4YWYsMHg4NCwweGI0LDB4MTQsCi0weGEwLDB4ODksMHgwMCwweDE4LDB4OTQsMHg2NSwweDAwLDB4MDAsMHg4ZiwweDgyLDB4YjQsMHgxNCwweDI1LDB4YzQsMHgwMCwweGU0LAotMHgzNCwweGM2LDB4MDAsMHg2MCwweGEwLDB4NDUsMHgwMCwweDIxLDB4YWYsMHg4NCwweGI0LDB4MTgsMHhhMCwweDgwLDB4MDAsMHgxOCwKLTB4OTQsMHhjNSwweDAwLDB4MDAsMHg4ZiwweDgyLDB4YjQsMHgxOCwweDI1LDB4YzMsMHgwMSwweDA4LDB4MjUsMHhjNywweDAxLDB4MmMsCi0weGEwLDB4NDUsMHgwMCwweDIxLDB4YWYsMHg4MywweGI0LDB4MWMsMHhhMCwweDYwLDB4MDAsMHgxOCwweDk0LDB4YzgsMHgwMCwweDAwLAotMHg4ZiwweDgyLDB4YjQsMHgxYywweDI1LDB4YzQsMHgwMSwweDUwLDB4MjUsMHhjNSwweDAxLDB4NzQsMHhhMCwweDQ4LDB4MDAsMHgyMSwKLTB4MjUsMHhjNiwweDAxLDB4OTgsMHgyNSwweGM5LDB4MDEsMHhiYywweDI1LDB4Y2EsMHgwMSwweGUwLDB4MjUsMHhjYiwweDAyLDB4MDQsCi0weDI1LDB4Y2MsMHgwMiwweDI4LDB4MjUsMHhjZCwweDAyLDB4NGMsMHgyNCwweDAyLDB4MDAsMHgxMCwweDNjLDB4MDMsMHhiMCwweDAzLAotMHhhZiwweDg3LDB4YjQsMHgyMCwweDM0LDB4NjMsMHgwMCwweDM4LDB4YTAsMHhlMCwweDAwLDB4MTgsMHhhZiwweDg0LDB4YjQsMHgyNCwKLTB4YTAsMHg4MCwweDAwLDB4MTgsMHhhZiwweDg1LDB4YjQsMHgyOCwweGEwLDB4YTAsMHgwMCwweDE4LDB4YWYsMHg4NiwweGI0LDB4MmMsCi0weGEwLDB4YzAsMHgwMCwweDE4LDB4YWYsMHg4OSwweGI0LDB4MzAsMHhhMSwweDIwLDB4MDAsMHgxOCwweGFmLDB4OGEsMHhiNCwweDM0LAotMHhhMSwweDQwLDB4MDAsMHgxOCwweGFmLDB4OGIsMHhiNCwweDM4LDB4YTEsMHg2MCwweDAwLDB4MTgsMHhhZiwweDhjLDB4YjQsMHgzYywKLTB4YTEsMHg4MCwweDAwLDB4MTgsMHhhZiwweDhkLDB4YjQsMHg0MCwweGExLDB4YTIsMHgwMCwweDE4LDB4OTQsMHg2NCwweDAwLDB4MDAsCi0weDhmLDB4ODIsMHhiNCwweDQwLDB4MjUsMHhjNSwweDAyLDB4NzAsMHgzYywweDAzLDB4YjAsMHgwMywweGEwLDB4NDQsMHgwMCwweDIxLAotMHgyNCwweDAyLDB4MDAsMHgxMSwweGFmLDB4ODUsMHhiNCwweDQ0LDB4MzQsMHg2MywweDAwLDB4NmUsMHhhMCwweGEyLDB4MDAsMHgxOCwKLTB4OTQsMHg2NCwweDAwLDB4MDAsMHg4ZiwweDgyLDB4YjQsMHg0NCwweDI1LDB4YzUsMHgwMiwweDk0LDB4M2MsMHgwMywweGIwLDB4MDMsCi0weGEwLDB4NDQsMHgwMCwweDIxLDB4MjQsMHgwMiwweDAwLDB4MTIsMHhhZiwweDg1LDB4YjQsMHg0OCwweDM0LDB4NjMsMHgwMCwweDZjLAotMHhhMCwweGEyLDB4MDAsMHgxOCwweDk0LDB4NjQsMHgwMCwweDAwLDB4OGYsMHg4MiwweGI0LDB4NDgsMHgyNCwweDA1LDB4ZmYsMHhmZiwKLTB4MjQsMHgwNywweDAwLDB4MDEsMHhhMCwweDQ0LDB4MDAsMHgyMSwweDI0LDB4MDYsMHgwMCwweDEyLDB4MjcsMHg4NCwweGI0LDB4MDAsCi0weDhjLDB4ODIsMHgwMCwweDAwLDB4MjQsMHhjNiwweGZmLDB4ZmYsMHhhMCwweDQwLDB4MDAsMHgwNCwweDhjLDB4ODMsMHgwMCwweDAwLAotMHhhNCwweDQ1LDB4MDAsMHgwMCwweGE0LDB4NDUsMHgwMCwweDAyLDB4YTAsMHg2MCwweDAwLDB4MGEsMHg4YywweDgyLDB4MDAsMHgwMCwKLTB4YTQsMHg2NSwweDAwLDB4MDYsMHhhNCwweDY1LDB4MDAsMHgwOCwweGEwLDB4NDAsMHgwMCwweDEwLDB4OGMsMHg4MywweDAwLDB4MDAsCi0weGE0LDB4NDUsMHgwMCwweDBjLDB4YTQsMHg0NSwweDAwLDB4MGUsMHhhMCwweDYwLDB4MDAsMHgxMiwweDhjLDB4ODIsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4NDAsMHgwMCwweDE2LDB4OGMsMHg4MywweDAwLDB4MDAsMHhhNCwweDQ1LDB4MDAsMHgxNCwKLTB4YTAsMHg2NywweDAwLDB4MTcsMHg4YywweDgyLDB4MDAsMHgwMCwweDI0LDB4ODQsMHgwMCwweDA0LDB4YTAsMHg0MCwweDAwLDB4MjAsCi0weDA0LDB4YzEsMHhmZiwweGU3LDB4YWMsMHg0MCwweDAwLDB4MWMsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDAyLDB4YjAsMHgwMywweDNjLDB4MDMsMHg4MCwweDAwLDB4MzQsMHg0MiwweDAwLDB4MjAsMHgyNCwweDYzLDB4NjMsMHg0MCwKLTB4YWMsMHg0MywweDAwLDB4MDAsMHg5MCwweDgyLDB4MDAsMHgxMCwweDAwLDB4ODAsMHg2MCwweDIxLDB4MTAsMHg0MCwweDAwLDB4NTYsCi0weDAwLDB4MDAsMHg3MCwweDIxLDB4OTcsMHg4MiwweDhmLDB4ZjAsMHg5NCwweDhhLDB4MDAsMHgwYywweDI3LDB4ODcsMHg5MCwweDAwLAotMHgwMCwweDAyLDB4NDAsMHhjMCwweDAxLDB4MDIsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ3LDB4MTAsMHgyMSwKLTB4OTAsMHg4YiwweDAwLDB4MTgsMHhhNCwweDRhLDB4MDAsMHgwMCwweDk0LDB4ODMsMHgwMCwweDBlLDB4MzksMHg2NCwweDAwLDB4MTAsCi0weDJjLDB4ODQsMHgwMCwweDAxLDB4MDAsMHgwMywweDEwLDB4YzAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDM0LDB4ODUsMHgwMCwweDAyLAotMHgzOSwweDYzLDB4MDAsMHgxMSwweDAwLDB4ODMsMHgyOCwweDBiLDB4MzQsMHhhMywweDAwLDB4MDgsMHgzOSwweDY0LDB4MDAsMHgxMiwKLTB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweGE0LDB4MTgsMHgwYiwweDAwLDB4NDcsMHgxMCwweDIxLDB4OTQsMHg0OSwweDAwLDB4MDQsCi0weDM0LDB4NjQsMHgwMCwweDIwLDB4MDAsMHg2YiwweDIwLDB4MGIsMHgzNCwweDgzLDB4MDAsMHg0MCwweDM5LDB4NjIsMHgwMCwweDAxLAotMHgwMCwweDgyLDB4MTgsMHgwYiwweDAwLDB4MDksMHgzMCwweGMwLDB4MzQsMHg2NCwweDAwLDB4ODAsMHgwMCwweGM5LDB4MjgsMHgyMSwKLTB4MzksMHg2MiwweDAwLDB4MDIsMHgwMCwweDYwLDB4NjgsMHgyMSwweDAwLDB4ODIsMHg2OCwweDBhLDB4MDAsMHgwNSwweDI4LDB4ODAsCi0weDNjLDB4MDIsMHhiMCwweDA4LDB4MDAsMHhhNywweDI4LDB4MjEsMHgwMCwweGMyLDB4MzAsMHgyMSwweDAxLDB4MDIsMHg0MCwweDIxLAotMHgzNCwweDAzLDB4ZmYsMHhmZiwweDM1LDB4YTQsMHgwMSwweDAwLDB4MzksMHg2MiwweDAwLDB4MDMsMHgyZCwweDY3LDB4MDAsMHgxMywKLTB4YWQsMHgwYSwweDAwLDB4MDAsMHhhNCwweGEzLDB4MDAsMHgwMCwweGFjLDB4YzMsMHgwMCwweDAwLDB4YTcsMHg4OSwweDhmLDB4ZjAsCi0weDEwLDB4ZTAsMHgwMCwweDBmLDB4MDAsMHg4MiwweDY4LDB4MGEsMHgzYywweDAzLDB4ODAsMHgwMSwweDAwLDB4MGIsMHgxMCwweDgwLAotMHgyNCwweDYzLDB4MDIsMHg0NCwweDAwLDB4NDMsMHgxMCwweDIxLDB4OGMsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHg4MCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDAzLDB4MzQsMHg2MywweDAwLDB4NjAsCi0weDk0LDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTQsMHgwMCwweDAwLDB4MDIsMHg3NCwweDAzLAotMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMCwweDNhLDB4OTQsMHg0NCwweDAwLDB4MDAsMHg5MywweDgzLDB4OGYsMHhlNCwKLTB4OTEsMHg4MiwweDAwLDB4MjEsMHgwMSwweGM0LDB4MjAsMHgyMSwweDkxLDB4ODUsMHgwMCwweDEwLDB4MDAsMHgwNCwweDI0LDB4MDAsCi0weDAwLDB4NjIsMHgxOCwweDIxLDB4MDAsMHgwNCwweDc0LDB4MDMsMHgwMCwweDZlLDB4MTgsMHgyMywweDAwLDB4NjUsMHgxMCwweDJhLAotMHgwMCwweGEyLDB4MTgsMHgwYSwweDAwLDB4MGQsMHgyNCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDYsMHgyNCwweDA1LDB4ZmYsMHhmZiwKLTB4MDAsMHg2NCwweDE4LDB4MjUsMHgzNCwweDQyLDB4ODAsMHgyMCwweGFjLDB4NDMsMHgwMCwweDAwLDB4YTUsMHg4NSwweDAwLDB4MGUsCi0weGExLDB4ODAsMHgwMCwweDEwLDB4YTUsMHg4NSwweDAwLDB4MGMsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDAzLDB4YjAsMHgwMywweDA4LDB4MDAsMHgxOSwweDE0LDB4MzQsMHg2MywweDAwLDB4NjIsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4MDgsMHgwMCwweDE5LDB4MTQsMHgzNCwweDYzLDB4MDAsMHg2NCwweDNjLDB4MDMsMHhiMCwweDAzLDB4MDgsMHgwMCwweDE5LDB4MTQsCi0weDM0LDB4NjMsMHgwMCwweDY2LDB4M2MsMHgwMywweGIwLDB4MDMsMHgwOCwweDAwLDB4MTksMHgxNCwweDM0LDB4NjMsMHgwMCwweDM4LAotMHgzYywweDAzLDB4YjAsMHgwMywweDA4LDB4MDAsMHgxOSwweDE0LDB4MzQsMHg2MywweDAwLDB4NmUsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4MDgsMHgwMCwweDE5LDB4MTQsMHgzNCwweDYzLDB4MDAsMHg2YywweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsCi0weDM0LDB4NjMsMHgwMCwweDIwLDB4MjQsMHg0MiwweDY1LDB4MDgsMHgwMCwweDA1LDB4MjgsMHg0MCwweGFjLDB4NjIsMHgwMCwweDAwLAotMHgwMCwweGE2LDB4MjgsMHgyMSwweDJjLDB4ZTIsMHgwMCwweDEwLDB4MTQsMHg4MCwweDAwLDB4MDYsMHgwMCwweDAwLDB4MTgsMHgyMSwKLTB4MTAsMHg0MCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgxOCwweDIxLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDAwLDB4NjAsMHgxMCwweDIxLDB4MjQsMHgwMiwweDAwLDB4MjAsMHgxMCwweGUyLDB4MDAsMHgwNiwweDJjLDB4ZTQsMHgwMCwweDEwLAotMHgyNCwweGEyLDB4MDAsMHgwMSwweDEwLDB4ODAsMHhmZiwweGY5LDB4MDAsMHgwMiwweDExLDB4MDAsMHgwOCwweDAwLDB4MTksMHg0ZiwKLTB4MDAsMHg0NywweDE4LDB4MjEsMHgwOCwweDAwLDB4MTksMHg0ZiwweDI0LDB4YTMsMHgwMCwweDUwLDB4MjcsMHhiZCwweGZmLDB4YzgsCi0weGFmLDB4YjMsMHgwMCwweDFjLDB4YWYsMHhiMiwweDAwLDB4MTgsMHhhZiwweGIxLDB4MDAsMHgxNCwweGFmLDB4YmYsMHgwMCwweDMwLAotMHhhZiwweGI3LDB4MDAsMHgyYywweGFmLDB4YjYsMHgwMCwweDI4LDB4YWYsMHhiNSwweDAwLDB4MjQsMHhhZiwweGI0LDB4MDAsMHgyMCwKLTB4YWYsMHhiMCwweDAwLDB4MTAsMHgwMCwweDgwLDB4ODgsMHgyMSwweDg0LDB4ODQsMHgwMCwweDA4LDB4M2MsMHgwNSwweGIwLDB4MDMsCi0weDNjLDB4MDIsMHg4MCwweDAwLDB4MzQsMHhhNSwweDAwLDB4MjAsMHgyNCwweDQyLDB4NjUsMHg2YywweDNjLDB4MDMsMHhiMCwweDA2LAotMHgwMCwweDA0LDB4MjAsMHg4MCwweGFjLDB4YTIsMHgwMCwweDAwLDB4MDAsMHg4MywweDIwLDB4MjEsMHgzYywweDA2LDB4YjAsMHgwNiwKLTB4OGMsMHg4MiwweDAwLDB4MDAsMHgzNCwweGM2LDB4ODAsMHgyNCwweDhjLDB4ODgsMHgwMCwweDAwLDB4OGMsMHhjNCwweDAwLDB4MDAsCi0weDk2LDB4MjUsMHgwMCwweDA4LDB4MzAsMHg1MiwweGZmLDB4ZmYsMHgwMCwweDA4LDB4NDQsMHgwMiwweDM0LDB4ODQsMHgwMSwweDAwLAotMHgzYywweDAyLDB4YjAsMHgwMCwweDAwLDB4MDgsMHgxOCwweGMwLDB4MDAsMHgxMiwweDNhLDB4MDAsMHhhYywweGM0LDB4MDAsMHgwMCwKLTB4MDAsMHhlMiwweDM4LDB4MjEsMHhhZSwweDMyLDB4MDIsMHhiOCwweDAwLDB4NjgsMHgxOCwweDIxLDB4MjQsMHhhNSwweDAwLDB4MDIsCi0weDhjLDB4ZjYsMHgwMCwweDAwLDB4MzAsMHhhNSwweDAxLDB4ZmYsMHg4YywweGY0LDB4MDAsMHgwNCwweDI3LDB4ODYsMHg5MCwweDAwLAotMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4MTIsMHg5OCwweGMwLDB4YTYsMHgyNSwweDAwLDB4MDgsMHgwMCwweDY2LDB4MTgsMHgyMSwKLTB4MDIsMHg3MiwweDEwLDB4MjEsMHg5NCwweDY1LDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0OCwweDgwLDB4MDEsMHgyNiwweDMwLDB4MjEsCi0weDI0LDB4MDIsMHhmZiwweGZmLDB4MDAsMHgxNCwweDFhLDB4MDIsMHgyNywweDg0LDB4OTAsMHgxMCwweGE0LDB4YzIsMHgwMCwweDAyLAotMHgzMCwweDYzLDB4MDAsMHgxZiwweDI0LDB4MDIsMHgwMCwweDEwLDB4MDEsMHgyNCwweDIwLDB4MjEsMHhhNCwweGM4LDB4MDAsMHgwNCwKLTB4OGMsMHhmMCwweDAwLDB4MDgsMHhhNiwweDIzLDB4MDAsMHgwNiwweGE2LDB4MjUsMHgwMCwweDBhLDB4YTAsMHg4MiwweDAwLDB4MDYsCi0weDg2LDB4MjUsMHgwMCwweDA2LDB4MjcsMHg4MiwweDkwLDB4MDQsMHgwMSwweDIyLDB4MTAsMHgyMSwweDI0LDB4MDMsMHgwMCwweDEzLAotMHgxMCwweGEzLDB4MDAsMHhlZSwweGFjLDB4NDcsMHgwMCwweDE4LDB4M2MsMHgwMywweGIwLDB4MDMsMHgzNCwweDYzLDB4MDEsMHgwMCwKLTB4YTYsMHgyMCwweDAwLDB4MDIsMHgzYywweDAyLDB4YjAsMHgwMywweDkwLDB4NjQsMHgwMCwweDAwLDB4MzQsMHg0MiwweDAxLDB4MDgsCi0weDhjLDB4NDUsMHgwMCwweDAwLDB4MDAsMHgxMCwweDFiLDB4YzIsMHgwMCwweDA0LDB4MjAsMHg4MiwweDMwLDB4NjMsMHgwMCwweDAxLAotMHhhYywweGM1LDB4MDAsMHgwOCwweDEwLDB4NjAsMHgwMCwweGM3LDB4MzAsMHg5NywweDAwLDB4MDEsMHgwMCwweDEwLDB4MTYsMHg4MiwKLTB4MzAsMHg0NiwweDAwLDB4MDEsMHgwMCwweDEwLDB4MTIsMHgwMiwweDAwLDB4MTAsMHgxOSwweGMyLDB4MDAsMHgxMCwweDI2LDB4MDIsCi0weDAwLDB4MTAsMHgyZSwweDQyLDB4MzAsMHg0OCwweDAwLDB4N2YsMHgyNCwweDAyLDB4MDAsMHgwMSwweDMwLDB4NzUsMHgwMCwweDAxLAotMHgzMCwweDg0LDB4MDAsMHgwMSwweDEwLDB4YzIsMHgwMCwweGIzLDB4MzAsMHhhMywweDAwLDB4MDEsMHgwMCwweDYwLDB4MjgsMHgyMSwKLTB4MGMsMHgwMCwweDE5LDB4NDIsMHgwMSwweDAwLDB4MzgsMHgyMSwweDAyLDB4NzIsMHgxOCwweDIxLDB4MDAsMHgwMywweDE4LDB4ODAsCi0weDJjLDB4NDYsMHgwMCwweDU0LDB4MjcsMHg4NSwweDkwLDB4MTAsMHgyNywweDg0LDB4OTAsMHgwOCwweDAwLDB4MDYsMHgxMCwweDBhLAotMHgwMCwweDY1LDB4MjgsMHgyMSwweDI2LDB4YTYsMHgwMCwweDAyLDB4MDAsMHg2NCwweDE4LDB4MjEsMHhhMCwweGEyLDB4MDAsMHgwMiwKLTB4YTAsMHg2NiwweDAwLDB4MDYsMHhhMCwweDYyLDB4MDAsMHgwNywweGEwLDB4YTIsMHgwMCwweDAxLDB4MDIsMHg3MiwweDI4LDB4MjEsCi0weDAwLDB4MDUsMHgyOCwweDgwLDB4MjcsMHg4MiwweDkwLDB4MDQsMHgwMCwweGEyLDB4NTgsMHgyMSwweDhkLDB4NjQsMHgwMCwweDE4LAotMHgwMCwweDEwLDB4MTUsMHhjMiwweDMwLDB4NDIsMHgwMCwweDAxLDB4OGMsMHg4MywweDAwLDB4MGMsMHgyNywweDg0LDB4OTAsMHgyMCwKLTB4MDAsMHhhNCwweDQ4LDB4MjEsMHhhNiwweDIyLDB4MDAsMHgwMCwweGE2LDB4MzYsMHgwMCwweDA0LDB4OGQsMHgyNiwweDAwLDB4MDAsCi0weDAwLDB4MDMsMHgxOSwweDQyLDB4M2MsMHgwMiwweGZmLDB4ZWYsMHgzNCwweDQyLDB4ZmYsMHhmZiwweDMwLDB4NjMsMHgwMCwweDAxLAotMHgwMCwweGMyLDB4NDAsMHgyNCwweDAwLDB4MDMsMHgxZCwweDAwLDB4MDEsMHgwMywweDQwLDB4MjUsMHgwMCwweDA4LDB4MTUsMHgwMiwKLTB4MDAsMHgxNCwweDE5LDB4ODIsMHgwMCwweDE0LDB4MjUsMHg4MiwweDAwLDB4MTAsMHgzNCwweDQyLDB4MDAsMHgxMCwweDNjLDB4ODIsCi0weDAwLDB4MTAsMHgyYywweDAyLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgzMCwweGNkLDB4MDAsMHgwMSwweDMwLDB4NmMsMHgwMCwweDAxLAotMHgzMCwweGU2LDB4MDAsMHgwMSwweDMwLDB4OGEsMHgwMCwweDAzLDB4MzIsMHg5NCwweDAwLDB4MDcsMHgzMCwweGE1LDB4MDAsMHgwMSwKLTB4YWQsMHgyOCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgwYiwweDMyLDB4MDcsMHgwMCwweDdmLDB4OGQsMHg2NCwweDAwLDB4MTgsCi0weDNjLDB4MDMsMHhmZiwweGYwLDB4MzQsMHg2MywweGZmLDB4ZmYsMHg4YywweDgyLDB4MDAsMHgwYywweDAxLDB4MDMsMHgxOCwweDI0LAotMHgwMCwweDAyLDB4MTMsMHg4MiwweDMwLDB4NDIsMHgwMCwweDBmLDB4MDAsMHgwMiwweDE0LDB4MDAsMHgwMCwweDYyLDB4MTgsMHgyNSwKLTB4YWQsMHgyMywweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YzIsMHgwMCwweDZhLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE1LDB4ODAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweDQwLDB4MDAsMHg1YiwweDI0LDB4MDIsMHgwMCwweDAxLAotMHg5NiwweDIyLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg0MiwweDAwLDB4MDQsMHhhNiwweDIyLDB4MDAsMHgwNCwKLTB4MDAsMHhhMCwweDIwLDB4MjEsMHgwYywweDAwLDB4MTksMHg0MiwweDAxLDB4YTAsMHgyOCwweDIxLDB4MDIsMHg3MiwweDE4LDB4MjEsCi0weDAwLDB4MDMsMHg0MCwweDgwLDB4MmMsMHg0NSwweDAwLDB4NTQsMHgyNywweDg0LDB4OTAsMHgxMCwweDAxLDB4MDQsMHgyMCwweDIxLAotMHgwMCwweDA1LDB4MTAsMHgwYSwweGEwLDB4ODIsMHgwMCwweDAwLDB4YTAsMHg4MCwweDAwLDB4MDQsMHhhMCwweDgwLDB4MDAsMHgwNSwKLTB4OTYsMHgyMywweDAwLDB4MDQsMHgyNywweDgyLDB4OTAsMHgwMCwweDAxLDB4MDIsMHgxMCwweDIxLDB4YTQsMHg0MywweDAwLDB4MDYsCi0weDI3LDB4ODIsMHg5MCwweDA0LDB4OTIsMHgyNiwweDAwLDB4MDEsMHgwMSwweDAyLDB4MTAsMHgyMSwweDhjLDB4NDUsMHgwMCwweDE4LAotMHgyNywweDgzLDB4OTAsMHgyMCwweDAxLDB4MDMsMHgxOCwweDIxLDB4YTAsMHg2MCwweDAwLDB4MDAsMHhhMCwweDg2LDB4MDAsMHgwNywKLTB4OTQsMHhhMiwweDAwLDB4MTAsMHgyNCwweDAzLDB4MDAsMHgwNCwweDMwLDB4NDIsMHgwMCwweDBmLDB4MTAsMHg0MywweDAwLDB4MzYsCi0weDI0LDB4YTUsMHgwMCwweDEwLDB4OTQsMHhhMywweDAwLDB4MTYsMHgyNywweDg3LDB4OTAsMHgxOCwweDAxLDB4MDcsMHgxMCwweDIxLAotMHhhNCwweDQzLDB4MDAsMHgwMiwweDk0LDB4YTIsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHgwMSwKLTB4MTQsMHg0MCwweDAwLDB4MjQsMHgwMiwweDcyLDB4MjAsMHgyMSwweDk0LDB4YTIsMHgwMCwweDAwLDB4MjQsMHgwMywweDAwLDB4YTQsCi0weDMwLDB4NDIsMHgwMCwweGZmLDB4MTAsMHg0MywweDAwLDB4MWYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk0LDB4YTIsMHgwMCwweDAwLAotMHgyNCwweDAzLDB4MDAsMHg4OCwweDMwLDB4NDIsMHgwMCwweDg4LDB4MTAsMHg0MywweDAwLDB4MTQsMHgwMiwweDcyLDB4MTgsMHgyMSwKLTB4MjcsMHg4NCwweDkwLDB4MjAsMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjQsMHgxOCwweDIxLDB4OGMsMHg2MiwweDAwLDB4MDAsCi0weDNjLDB4MDQsMHgwMCwweDgwLDB4MDAsMHg0NCwweDEwLDB4MjUsMHhhYywweDYyLDB4MDAsMHgwMCwweDAyLDB4NzIsMHgxMCwweDIxLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDcsMHgxMCwweDIxLDB4YTAsMHg1NCwweDAwLDB4MDAsMHg4ZiwweGJmLDB4MDAsMHgzMCwKLTB4N2IsMHhiNiwweDAxLDB4N2MsMHg3YiwweGI0LDB4MDEsMHgzYywweDdiLDB4YjIsMHgwMCwweGZjLDB4N2IsMHhiMCwweDAwLDB4YmMsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHgzOCwweDk0LDB4YTIsMHgwMCwweDE4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweDYwLDB4MTAsMHg0MCwweGZmLDB4ZTksMHgwMiwweDcyLDB4MTgsMHgyMSwKLTB4MDIsMHg3MiwweDIwLDB4MjEsMHgyNywweDgyLDB4OTAsMHgyMCwweDAwLDB4MDQsMHgyMCwweDgwLDB4MDAsMHg4MiwweDIwLDB4MjEsCi0weDhjLDB4ODMsMHgwMCwweDAwLDB4M2MsMHgwMiwweGZmLDB4N2YsMHgzNCwweDQyLDB4ZmYsMHhmZiwweDAwLDB4NjIsMHgxOCwweDI0LAotMHgwOCwweDAwLDB4MWEsMHgzNywweGFjLDB4ODMsMHgwMCwweDAwLDB4MjcsMHg4NywweDkwLDB4MTgsMHgwMSwweDA3LDB4MTAsMHgyMSwKLTB4MDgsMHgwMCwweDFhLDB4MjEsMHhhNCwweDQwLDB4MDAsMHgwMiwweDExLDB4NDIsMHgwMCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJkLDB4NDIsMHgwMCwweDAyLDB4MTQsMHg0MCwweGZmLDB4YTcsMHgwMCwweGEwLDB4MjAsMHgyMSwweDk2LDB4MjIsMHgwMCwweDA0LAotMHgwOCwweDAwLDB4MTksMHhmZiwweDI0LDB4NDIsMHgwMCwweDBjLDB4OTYsMHgyMiwweDAwLDB4MDQsMHgwOCwweDAwLDB4MTksMHhmZiwKLTB4MjQsMHg0MiwweDAwLDB4MDgsMHgxNiwweGU2LDB4ZmYsMHg5NiwweDNjLDB4MDIsMHhmZiwweGZiLDB4OGQsMHg2MywweDAwLDB4MTgsCi0weDM0LDB4NDIsMHhmZiwweGZmLDB4MDIsMHgwMiwweDEwLDB4MjQsMHhhYywweDYyLDB4MDAsMHgwOCwweDA4LDB4MDAsMHgxOSwweGY4LAotMHgwMCwweDAwLDB4MzAsMHgyMSwweDE2LDB4ZTYsMHhmZiwweDRlLDB4MDAsMHg2MCwweDI4LDB4MjEsMHgzYywweDAyLDB4ZmIsMHhmZiwKLTB4MzQsMHg0MiwweGZmLDB4ZmYsMHgwMiwweDAyLDB4MTAsMHgyNCwweGFjLDB4ZTIsMHgwMCwweDA4LDB4MDgsMHgwMCwweDE5LDB4YjcsCi0weDAwLDB4MDAsMHgzMCwweDIxLDB4OTMsMHg4NywweGJiLDB4MTQsMHgwMCwweDEwLDB4MWUsMHg0MiwweDAwLDB4MTAsMHgyNiwweDgyLAotMHgyNywweDgyLDB4OTAsMHgwOCwweDJjLDB4ZTUsMHgwMCwweDBjLDB4MDEsMHgyMiwweDQ4LDB4MjEsMHgzMCwweDYzLDB4MDAsMHgwMSwKLTB4MzAsMHg4NiwweDAwLDB4MDEsMHgxNCwweGEwLDB4MDAsMHgwNiwweDAwLDB4ZTAsMHg0MCwweDIxLDB4MDAsMHgwMywweDEwLDB4NDAsCi0weDAwLDB4NDYsMHgxMCwweDIxLDB4MDAsMHgwMiwweDExLDB4MDAsMHgwMCwweGUyLDB4MTAsMHgyMSwweDI0LDB4NDgsMHgwMCwweDA0LAotMHgwMiwweDcyLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4NCwweDkwLDB4MTAsMHgyNywweDgzLDB4OTAsMHgwOCwKLTB4MDAsMHg0NCwweDIwLDB4MjEsMHgwMCwweDQzLDB4MTAsMHgyMSwweGExLDB4MjgsMHgwMCwweDA3LDB4YTAsMHg0MCwweDAwLDB4MDYsCi0weGEwLDB4ODAsMHgwMCwweDAyLDB4MDgsMHgwMCwweDE5LDB4YzcsMHhhMCwweDgwLDB4MDAsMHgwMSwweDI0LDB4MDIsMHgwMCwweDAxLAotMHhhNiwweDIyLDB4MDAsMHgwMiwweDBjLDB4MDAsMHgwMSwweGMyLDB4MDAsMHhlMCwweDIwLDB4MjEsMHgwOCwweDAwLDB4MWEsMHgzYiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweGE3LDB4ZmYsMHhmZiwweDAwLDB4MDcsMHgxOCwweGMwLDB4MDAsMHg2NywweDE4LDB4MjEsCi0weDNjLDB4MDYsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgyNCwweDQyLDB4NmEsMHg0NCwweDI3LDB4ODUsMHg5MCwweDEwLAotMHgwMCwweDAzLDB4MTgsMHg4MCwweDM0LDB4YzYsMHgwMCwweDIwLDB4MDAsMHg2NSwweDE4LDB4MjEsMHhhYywweGMyLDB4MDAsMHgwMCwKLTB4ODAsMHg2MiwweDAwLDB4MDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDI5LDB4MDAsMHg4MCwweDI4LDB4MjEsCi0weDkwLDB4ODIsMHgwMCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDQyLDB4MDAsMHgwMiwweDMwLDB4NDMsMHgwMCwweDAxLAotMHgxNCwweDYwLDB4MDAsMHgwMiwweGEwLDB4ODIsMHgwMCwweDE2LDB4YTAsMHg4MCwweDAwLDB4MTcsMHg5MCwweGEyLDB4MDAsMHgwNCwKLTB4M2MsMHgwMywweGIwLDB4MDMsMHgyNywweDg2LDB4OTAsMHgwMCwweDE0LDB4NDAsMHgwMCwweDA2LDB4MzQsMHg2MywweDAwLDB4MjAsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4YTAsMHhhMiwweDAwLDB4MDQsMHhhNCwweGE3LDB4MDAsMHgwMiwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHhhNCwweGE3LDB4MDAsMHgwMCwweDk0LDB4YTQsMHgwMCwweDAyLDB4M2MsMHgwMiwweDgwLDB4MDEsMHgyNCwweDQyLDB4ODIsMHg2YywKLTB4YWMsMHg2MiwweDAwLDB4MDAsMHgwMCwweDA0LDB4MTgsMHhjMCwweDAwLDB4NjQsMHgxOCwweDIxLDB4MDAsMHgwMywweDE4LDB4ODAsCi0weDAwLDB4NjYsMHgxOCwweDIxLDB4OTQsMHg2MiwweDAwLDB4MDQsMHhhNCwweDY3LDB4MDAsMHgwMiwweDNjLDB4MDMsMHhiMCwweDA4LAotMHgwMCwweDAyLDB4MjAsMHhjMCwweDAwLDB4ODIsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ2LDB4MTAsMHgyMSwKLTB4MDAsMHg4MywweDIwLDB4MjEsMHhhNCwweDQ3LDB4MDAsMHgwMCwweGFjLDB4ODcsMHgwMCwweDAwLDB4OTAsMHhhMiwweDAwLDB4MDQsCi0weGE0LDB4YTcsMHgwMCwweDAyLDB4MjQsMHg0MiwweDAwLDB4MDEsMHgwMywweGUwLDB4MDAsMHgwOCwweGEwLDB4YTIsMHgwMCwweDA0LAotMHg5MCwweDgyLDB4MDAsMHgxNiwweDI0LDB4ODUsMHgwMCwweDA2LDB4MzQsMHg0MiwweDAwLDB4MDEsMHgzMCwweDQzLDB4MDAsMHgwMiwKLTB4MTQsMHg2MCwweGZmLDB4ZGEsMHhhMCwweDgyLDB4MDAsMHgxNiwweDI0LDB4MDIsMHgwMCwweDAxLDB4MDgsMHgwMCwweDFhLDB4YTcsCi0weGEwLDB4ODIsMHgwMCwweDE3LDB4MjcsMHhiZCwweGZmLDB4ZTgsMHhhZiwweGJmLDB4MDAsMHgxMCwweDAwLDB4ODAsMHgzOCwweDIxLAotMHg4NCwweDg0LDB4MDAsMHgwMiwweDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgzYywweDBhLDB4YjAsMHgwNiwKLTB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4NmIsMHg0NCwweDNjLDB4MGIsMHhiMCwweDA4LDB4MjcsMHg4OSwweDkwLDB4MDAsCi0weDM0LDB4MGMsMHhmZiwweGZmLDB4MzUsMHg0YSwweDgwLDB4MjAsMHgxMCwweDgwLDB4MDAsMHgzMCwweGFjLDB4NjIsMHgwMCwweDAwLAotMHg5NywweDgyLDB4OGYsMHhmMCwweDk0LDB4ZTYsMHgwMiwweGJhLDB4MDAsMHgwMiwweDE4LDB4YzAsMHgwMCwweDZiLDB4MjgsMHgyMSwKLTB4YWMsMHhhNiwweDAwLDB4MDAsMHg4YywweGU0LDB4MDIsMHhiOCwweDAwLDB4NjIsMHgxOCwweDIxLDB4MDAsMHgwMywweDE4LDB4ODAsCi0weDAwLDB4MDQsMHgxMCwweGMwLDB4MDAsMHg0NCwweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDksMHgxMCwweDIxLAotMHg5NCwweDQ4LDB4MDAsMHgwNCwweDAwLDB4NjksMHgxOCwweDIxLDB4YTQsMHg2NiwweDAwLDB4MDAsMHgwMCwweDA4LDB4MjgsMHhjMCwKLTB4MDAsMHhhYiwweDEwLDB4MjEsMHhhYywweDRjLDB4MDAsMHgwMCwweDhjLDB4ZTQsMHgwMiwweGI4LDB4MjcsMHg4MiwweDkwLDB4MDQsCi0weDAwLDB4YTgsMHgyOCwweDIxLDB4MDAsMHgwNCwweDE4LDB4YzAsMHgwMCwweDY0LDB4MTgsMHgyMSwweDAwLDB4MDMsMHgxOCwweDgwLAotMHgwMCwweDYyLDB4MTAsMHgyMSwweDhjLDB4NDYsMHgwMCwweDE4LDB4MjcsMHg4NCwweDkwLDB4MTAsMHgwMCwweDY0LDB4MTgsMHgyMSwKLTB4OGMsMHhjMiwweDAwLDB4MDAsMHg4MCwweDY3LDB4MDAsMHgwNiwweDAwLDB4MDUsMHgyOCwweDgwLDB4MzAsMHg0MiwweGZmLDB4ZmYsCi0weDAwLDB4NDcsMHgxMCwweDIxLDB4MzAsMHg0MywweDAwLDB4ZmYsMHgwMCwweDAzLDB4MTgsMHgyYiwweDAwLDB4MDIsMHgxMiwweDAyLAotMHgwMCwweDQzLDB4MTAsMHgyMSwweDNjLDB4MDQsMHgwMCwweDA0LDB4MDAsMHhhOSwweDI4LDB4MjEsMHgwMCwweDQ0LDB4MTAsMHgyNSwKLTB4YTQsMHhhYywweDAwLDB4MDAsMHhhZCwweDQyLDB4MDAsMHgwMCwweGE3LDB4ODgsMHg4ZiwweGYwLDB4OGYsMHhiZiwweDAwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHgxOCwweDg0LDB4ZTMsMHgwMCwweDA2LAotMHgyNywweDgyLDB4YjQsMHgwMCwweDk0LDB4ZTUsMHgwMiwweGJhLDB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDYyLDB4MTgsMHgyMSwKLTB4OGMsMHg2NCwweDAwLDB4MDAsMHgwYywweDAwLDB4MWEsMHg5MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDFiLDB4MGIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHg4OCwweDAwLDB4MDAsMHgwMCwweDgwLDB4NTgsMHgyMSwweDI3LDB4OGEsMHg5MCwweDAwLAotMHgwMCwweDA4LDB4MTgsMHhjMCwweDAwLDB4NjgsMHgxOCwweDIxLDB4M2MsMHgwNCwweGIwLDB4MDMsMHgwMCwweDAzLDB4MTgsMHg4MCwKLTB4M2MsMHgwMiwweDgwLDB4MDAsMHgwMCwweDZhLDB4MTgsMHgyMSwweDM0LDB4ODQsMHgwMCwweDIwLDB4MjQsMHg0MiwweDZjLDB4NjQsCi0weDMwLDB4YTUsMHhmZiwweGZmLDB4YWMsMHg4MiwweDAwLDB4MDAsMHg5NCwweDY3LDB4MDAsMHgwMiwweDExLDB4MDUsMHgwMCwweDM1LAotMHgyNCwweDA0LDB4MDAsMHgwMSwweDkxLDB4NjYsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg2LDB4MTAsMHgyYSwKLTB4MTAsMHg0MCwweDAwLDB4MTAsMHgwMCwweGMwLDB4NDgsMHgyMSwweDNjLDB4MGQsMHhiMCwweDAzLDB4MDEsMHg0MCwweDYwLDB4MjEsCi0weDM1LDB4YWQsMHgwMCwweDIwLDB4MTAsMHhlNSwweDAwLDB4MGQsMHgyNCwweDg0LDB4MDAsMHgwMSwweDAwLDB4MDcsMHgxMCwweGMwLAotMHgwMCwweDQ3LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDEsMHgyMCwweDMwLDB4MjEsMHgwMCwweDRhLDB4MTAsMHgyMSwKLTB4MDAsMHg4NiwweDE4LDB4MmEsMHgwMCwweGUwLDB4NDAsMHgyMSwweDk0LDB4NDcsMHgwMCwweDAyLDB4MTQsMHg2MCwweGZmLDB4ZjUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MTAsMHgyMSwweDAwLDB4MDgsMHgyMCwweGMwLAotMHgwMCwweDg4LDB4MjAsMHgyMSwweDI0LDB4YzIsMHhmZiwweGZmLDB4MDAsMHgwNCwweDIwLDB4ODAsMHhhMSwweDYyLDB4MDAsMHgwNCwKLTB4MDAsMHg4YywweDIwLDB4MjEsMHg5NCwweDgzLDB4MDAsMHgwNCwweDAwLDB4MDcsMHgxMCwweGMwLDB4MDAsMHg0NywweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0YywweDEwLDB4MjEsMHgwMCwweDAzLDB4MjgsMHhjMCwweDk0LDB4NDYsMHgwMCwweDAyLAotMHgwMCwweGEzLDB4MTgsMHgyMSwweDAwLDB4MDMsMHgxOCwweDgwLDB4MDAsMHg2YywweDE4LDB4MjEsMHhhNCwweDY2LDB4MDAsMHgwMCwKLTB4YTQsMHg4NiwweDAwLDB4MDIsMHg5NSwweDY0LDB4MDAsMHgwMiwweDNjLDB4MDMsMHhiMCwweDA4LDB4M2MsMHgwMiwweDgwLDB4MDEsCi0weDAwLDB4YTMsMHgyOCwweDIxLDB4MjQsMHg0MiwweDgyLDB4NmMsMHhhZCwweGEyLDB4MDAsMHgwMCwweDEwLDB4ODcsMHgwMCwweDAzLAotMHhhYywweGE2LDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjQsMHgwMiwweDAwLDB4MDEsMHgwOCwweDAwLDB4MWIsMHg1OSwKLTB4YTUsMHg2OCwweDAwLDB4MDIsMHg5MSwweDYyLDB4MDAsMHgwNCwweGE1LDB4NjcsMHgwMCwweDAwLDB4MjQsMHg0MiwweGZmLDB4ZmYsCi0weDMwLDB4NDMsMHgwMCwweGZmLDB4MTQsMHg2MCwweGZmLDB4ZjcsMHhhMSwweDYyLDB4MDAsMHgwNCwweDI0LDB4MDIsMHhmZiwweGZmLAotMHgwOCwweDAwLDB4MWIsMHg1OSwweGE1LDB4NjIsMHgwMCwweDAyLDB4MDAsMHgwNSwweDQwLDB4YzAsMHgwMSwweDA1LDB4MzAsMHgyMSwKLTB4MjcsMHhiZCwweGZmLDB4ZDgsMHgwMCwweDA2LDB4MzAsMHg4MCwweDI3LDB4ODIsMHg5MCwweDA0LDB4YWYsMHhiMiwweDAwLDB4MTgsCi0weGFmLDB4YjEsMHgwMCwweDE0LDB4YWYsMHhiZiwweDAwLDB4MjAsMHhhZiwweGIzLDB4MDAsMHgxYywweGFmLDB4YjAsMHgwMCwweDEwLAotMHgwMCwweGMyLDB4MTAsMHgyMSwweDhjLDB4NDcsMHgwMCwweDE4LDB4MDAsMHhhMCwweDkwLDB4MjEsMHgzYywweDAyLDB4ODAsMHgwMCwKLTB4M2MsMHgwNSwweGIwLDB4MDMsMHgzNCwweGE1LDB4MDAsMHgyMCwweDI0LDB4NDIsMHg2ZCwweDk4LDB4YWMsMHhhMiwweDAwLDB4MDAsCi0weDI3LDB4ODMsMHg5MCwweDEwLDB4MDAsMHhjMywweDMwLDB4MjEsMHg4YywweGUyLDB4MDAsMHgwMCwweDgwLDB4YzUsMHgwMCwweDA2LAotMHgwMCwweDgwLDB4ODgsMHgyMSwweDMwLDB4NDIsMHhmZiwweGZmLDB4MDAsMHg0NSwweDEwLDB4MjEsMHgzMCwweDQzLDB4MDAsMHhmZiwKLTB4MTAsMHg2MCwweDAwLDB4MDIsMHgwMCwweDAyLDB4MTIsMHgwMiwweDI0LDB4NDIsMHgwMCwweDAxLDB4MzAsMHg1MywweDAwLDB4ZmYsCi0weDAxLDB4MTIsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgyNywweDgzLDB4OTAsMHgxMCwweDAwLDB4NDMsMHgxMCwweDIxLAotMHg4MCwweDQ0LDB4MDAsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4MCwweDAwLDB4NGIsMHgyNiwweDI0LDB4MDAsMHgwNiwKLTB4MzIsMHg1MCwweGZmLDB4ZmYsMHgwMiwweDIwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgxYiwweDE5LDB4MDIsMHgwMCwweDI4LDB4MjEsCi0weDkyLDB4MjIsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgyZSwweDNjLDB4MDMsMHhiMCwweDA4LAotMHgzYywweDA5LDB4ODAsMHgwMSwweDI3LDB4ODgsMHg5MCwweDAwLDB4YTYsMHgzMiwweDAwLDB4MGMsMHgwMCwweDEwLDB4MjAsMHhjMCwKLTB4MDAsMHg5MCwweDIwLDB4MjEsMHgwMCwweDA0LDB4MjAsMHg4MCwweDAwLDB4ODgsMHgyMCwweDIxLDB4OTQsMHg4MiwweDAwLDB4MDQsCi0weDNjLDB4MDMsMHhiMCwweDA4LDB4M2MsMHgwNywweGIwLDB4MDMsMHgwMCwweDAyLDB4MjgsMHhjMCwweDAwLDB4YTIsMHgxMCwweDIxLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDgsMHgxMCwweDIxLDB4MDAsMHhhMywweDI4LDB4MjEsMHgyNSwweDI2LDB4ODIsMHg2YywKLTB4MzQsMHgwMywweGZmLDB4ZmYsMHgzNCwweGU3LDB4MDAsMHgyMCwweGFjLDB4ZTYsMHgwMCwweDAwLDB4YTQsMHg4MywweDAwLDB4MDIsCi0weGE0LDB4NDMsMHgwMCwweDAwLDB4YWMsMHhhMywweDAwLDB4MDAsMHg5MiwweDIyLDB4MDAsMHgxMCwweDkyLDB4MjMsMHgwMCwweDBhLAotMHhhNiwweDMyLDB4MDAsMHgwZSwweDAyLDB4NjIsMHgxMCwweDIxLDB4MTQsMHg2MCwweDAwLDB4MDUsMHhhMiwweDIyLDB4MDAsMHgxMCwKLTB4OTIsMHgyMiwweDAwLDB4MTYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweGZlLDB4YTIsMHgyMiwweDAwLDB4MTYsCi0weDkyLDB4MjIsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg5MiwweDIyLDB4MDAsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4ZmQsMHhhMiwweDIyLDB4MDAsMHgxNiwKLTB4OGYsMHhiZiwweDAwLDB4MjAsMHg3YiwweGIyLDB4MDAsMHhmYywweDdiLDB4YjAsMHgwMCwweGJjLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDI3LDB4YmQsMHgwMCwweDI4LDB4OTYsMHgyMiwweDAwLDB4MGUsMHgyNywweDg4LDB4OTAsMHgwMCwweDAwLDB4MDIsMHgyMCwweGMwLAotMHgwMCwweDgyLDB4MjAsMHgyMSwweDAwLDB4MDQsMHgyMCwweDgwLDB4MDAsMHg4OCwweDIwLDB4MjEsMHg5NCwweDgyLDB4MDAsMHgwNCwKLTB4M2MsMHgwNiwweGIwLDB4MDMsMHgzYywweDA5LDB4ODAsMHgwMSwweDAwLDB4MDIsMHgyOCwweGMwLDB4MDAsMHhhMiwweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHhhMywweDI4LDB4MjEsMHgwMCwweDQ4LDB4MTAsMHgyMSwweDM0LDB4YzYsMHgwMCwweDIwLAotMHgyNSwweDIzLDB4ODIsMHg2YywweGFjLDB4YzMsMHgwMCwweDAwLDB4YTQsMHg1MCwweDAwLDB4MDAsMHhhYywweGIwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDFiLDB4OTcsMHhhNCwweDkwLDB4MDAsMHgwMiwweDA4LDB4MDAsMHgxYiwweDhlLDB4MzIsMHg1MCwweGZmLDB4ZmYsCi0weDNjLDB4MDMsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgyNCwweDQyLDB4NmYsMHg2MCwweDM0LDB4NjMsMHgwMCwweDIwLAotMHhhYywweDYyLDB4MDAsMHgwMCwweDkwLDB4ODIsMHgwMCwweDA0LDB4OTcsMHhhYSwweDAwLDB4MTIsMHgwMCwweDgwLDB4NjAsMHgyMSwKLTB4MzAsMHhhOCwweGZmLDB4ZmYsMHgwMCwweDRhLDB4MjAsMHgyMywweDM0LDB4MDksMHhmZiwweGZmLDB4MzAsMHhjZiwweGZmLDB4ZmYsCi0weDMwLDB4ZWUsMHhmZiwweGZmLDB4MTEsMHgwOSwweDAwLDB4NzMsMHhhMSwweDg0LDB4MDAsMHgwNCwweDAwLDB4MGUsMHhjMCwweGMwLAotMHgwMCwweDA4LDB4MTAsMHhjMCwweDAwLDB4NDgsMHgxMCwweDIxLDB4MDMsMHgwZSwweDIwLDB4MjEsMHgyNywweDhkLDB4OTAsMHgwMCwKLTB4MDAsMHgwNCwweDIwLDB4ODAsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NGQsMHgxMCwweDIxLDB4MDAsMHg4ZCwweDIwLDB4MjEsCi0weDk0LDB4ODYsMHgwMCwweDAyLDB4OTQsMHg0MywweDAwLDB4MDQsMHgzYywweDE5LDB4ODAsMHgwMSwweGE0LDB4NDYsMHgwMCwweDAyLAotMHgwMCwweDAzLDB4MjgsMHhjMCwweDAwLDB4YTMsMHgxOCwweDIxLDB4OTQsMHg4NywweDAwLDB4MDIsMHgzYywweDAyLDB4YjAsMHgwOCwKLTB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweGEyLDB4MjgsMHgyMSwweDAwLDB4NmQsMHgxOCwweDIxLDB4MjcsMHgyMiwweDgyLDB4NmMsCi0weDNjLDB4MDEsMHhiMCwweDAzLDB4YWMsMHgyMiwweDAwLDB4MjAsMHhhNCwweDY2LDB4MDAsMHgwMCwweDEwLDB4ZTksMHgwMCwweDU3LAotMHhhYywweGE2LDB4MDAsMHgwMCwweDAxLDB4ZTAsMHgzMCwweDIxLDB4MTEsMHg0MCwweDAwLDB4MWQsMHgwMCwweDAwLDB4NDgsMHgyMSwKLTB4MDEsMHg0MCwweDM4LDB4MjEsMHgyNywweDhiLDB4OTAsMHgwNCwweDI3LDB4OGEsMHg5MCwweDEwLDB4MDAsMHgwNiwweDQwLDB4YzAsCi0weDAxLDB4MDYsMHgxOCwweDIxLDB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDZiLDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDE4LAotMHgwMCwweDZhLDB4MTgsMHgyMSwweDgwLDB4NjUsMHgwMCwweDA2LDB4OGMsMHg4MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHg0MiwweGZmLDB4ZmYsMHgwMCwweDQ1LDB4MTAsMHgyMSwweDMwLDB4NDQsMHgwMCwweGZmLDB4MDAsMHgwMiwweDEyLDB4MDIsCi0weDAxLDB4MjIsMHgxOCwweDIxLDB4MjQsMHg2MiwweDAwLDB4MDEsMHgxNCwweDgwLDB4MDAsMHgwMiwweDMwLDB4NDksMHgwMCwweGZmLAotMHgzMCwweDY5LDB4MDAsMHhmZiwweDAxLDB4MDYsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDRkLDB4MTAsMHgyMSwKLTB4MjQsMHhlNywweGZmLDB4ZmYsMHg5NCwweDQ2LDB4MDAsMHgwMiwweDE0LDB4ZTAsMHhmZiwweGU5LDB4MDAsMHgwNiwweDQwLDB4YzAsCi0weDkxLDB4ODIsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgyMCwweDNjLDB4MDYsMHhiMCwweDAzLAotMHhhNSwweDhmLDB4MDAsMHgwYywweDAzLDB4MGUsMHgyMCwweDIxLDB4MDAsMHgwNCwweDIwLDB4ODAsMHgwMCwweDhkLDB4MjAsMHgyMSwKLTB4OTQsMHg4MiwweDAwLDB4MDQsMHgzYywweDAzLDB4YjAsMHgwOCwweDNjLDB4MDcsMHhiMCwweDAzLDB4MDAsMHgwMiwweDI4LDB4YzAsCi0weDAwLDB4YTIsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDRkLDB4MTAsMHgyMSwweDAwLDB4YTMsMHgyOCwweDIxLAotMHgyNywweDI2LDB4ODIsMHg2YywweDM0LDB4MDMsMHhmZiwweGZmLDB4MzQsMHhlNywweDAwLDB4MjAsMHhhYywweGU2LDB4MDAsMHgwMCwKLTB4YTQsMHg4MywweDAwLDB4MDIsMHhhNCwweDQzLDB4MDAsMHgwMCwweGFjLDB4YTMsMHgwMCwweDAwLDB4OTEsMHg4MiwweDAwLDB4MTAsCi0weDkxLDB4ODMsMHgwMCwweDA0LDB4YTUsMHg4ZSwweDAwLDB4MGUsMHgwMSwweDIyLDB4MTAsMHgyMSwweDE0LDB4NjAsMHgwMCwweDA1LAotMHhhMSwweDgyLDB4MDAsMHgxMCwweDkxLDB4ODIsMHgwMCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHhmZCwKLTB4YTEsMHg4MiwweDAwLDB4MTYsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTUsMHg4MiwweDAwLDB4MGUsCi0weDNjLDB4MDMsMHhiMCwweDA4LDB4MDAsMHgwMiwweDIwLDB4YzAsMHgwMCwweDgyLDB4MjAsMHgyMSwweDAwLDB4MDQsMHgyMCwweDgwLAotMHgwMCwweDhkLDB4MjAsMHgyMSwweDk0LDB4ODIsMHgwMCwweDA0LDB4MzQsMHhjNiwweDAwLDB4MjAsMHgyNywweDI3LDB4ODIsMHg2YywKLTB4MDAsMHgwMiwweDI4LDB4YzAsMHgwMCwweGEyLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHhhMywweDI4LDB4MjEsCi0weDAwLDB4NGQsMHgxMCwweDIxLDB4YWMsMHhjNywweDAwLDB4MDAsMHhhNCwweDhmLDB4MDAsMHgwMiwweGE0LDB4NGYsMHgwMCwweDAwLAotMHhhYywweGFmLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxYywweDI2LDB4MDMsMHgwZSwweDIwLDB4MjEsMHgwOCwweDAwLDB4MWMsMHgwMSwKLTB4YTUsMHg4OCwweDAwLDB4MDIsMHgwMCwweDBlLDB4YzAsMHhjMCwweDAzLDB4MGUsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDI3LDB4OGQsMHg5MCwweDAwLDB4MDAsMHg0ZCwweDEwLDB4MjEsMHg5NCwweDQzLDB4MDAsMHgwMiwweDMwLDB4ODQsMHgwMCwweGZmLAotMHgxNCwweDgwLDB4MDAsMHgwNSwweGE1LDB4ODMsMHgwMCwweDAwLDB4MjQsMHgwMiwweGZmLDB4ZmYsMHgzYywweDE5LDB4ODAsMHgwMSwKLTB4MDgsMHgwMCwweDFjLDB4MDEsMHhhNSwweDgyLDB4MDAsMHgwMiwweDA4LDB4MDAsMHgxYywweDAxLDB4M2MsMHgxOSwweDgwLDB4MDEsCi0weDNjLDB4MDgsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHg3OCwweDM1LDB4MDgsMHgwMCwweDIwLAotMHgyNCwweDQyLDB4NzEsMHhhMCwweGFmLDB4YjIsMHgwMCwweDY4LDB4YWYsMHhiMSwweDAwLDB4NjQsMHhhZiwweGIwLDB4MDAsMHg2MCwKLTB4YWQsMHgwMiwweDAwLDB4MDAsMHhhZiwweGJmLDB4MDAsMHg4NCwweGFmLDB4YmUsMHgwMCwweDgwLDB4YWYsMHhiNywweDAwLDB4N2MsCi0weGFmLDB4YjYsMHgwMCwweDc4LDB4YWYsMHhiNSwweDAwLDB4NzQsMHhhZiwweGI0LDB4MDAsMHg3MCwweGFmLDB4YjMsMHgwMCwweDZjLAotMHhhZiwweGE0LDB4MDAsMHg4OCwweDkwLDB4ODMsMHgwMCwweDBhLDB4MjcsMHg4MiwweGI0LDB4MDAsMHhhZiwweGE2LDB4MDAsMHg5MCwKLTB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDYyLDB4MTgsMHgyMSwweDhjLDB4NjMsMHgwMCwweDAwLDB4YWYsMHhhNywweDAwLDB4OTQsCi0weDI3LDB4ODYsMHg5MCwweDA0LDB4YWYsMHhhMywweDAwLDB4MWMsMHg5NCwweDYzLDB4MDAsMHgxNCwweDMwLDB4YjEsMHhmZiwweGZmLAotMHgyNCwweDA4LDB4MDAsMHgwMSwweDAwLDB4MDMsMHgyMCwweGMwLDB4YWYsMHhhMywweDAwLDB4MTgsMHgwMCwweDgzLDB4MTgsMHgyMSwKLTB4YWYsMHhhNCwweDAwLDB4NTQsMHgwMCwweDAzLDB4MTgsMHg4MCwweDI3LDB4ODQsMHg5MCwweDEwLDB4MDAsMHg2NCwweDIwLDB4MjEsCi0weDgwLDB4ODIsMHgwMCwweDA2LDB4MDAsMHg2NiwweDE4LDB4MjEsMHg4YywweDY2LDB4MDAsMHgxOCwweDI0LDB4NDIsMHgwMCwweDAyLAotMHgwMCwweDAyLDB4MWYsMHhjMiwweDhjLDB4YzQsMHgwMCwweDA4LDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg0MywKLTB4MDAsMHgwMiwweDEwLDB4NDAsMHgwMCwweDA0LDB4MmYsMHhjMiwweDAwLDB4MDQsMHgxYywweDgyLDB4MDAsMHhjMiwweDM4LDB4MjEsCi0weDAwLDB4MDQsMHgyNCwweDQyLDB4OGYsMHhhMiwweDAwLDB4MWMsMHgzMCwweDYzLDB4MDAsMHgwMSwweDMwLDB4ODQsMHgwMCwweDAxLAotMHhhZiwweGE1LDB4MDAsMHgzYywweGFmLDB4YTMsMHgwMCwweDM0LDB4YWYsMHhhNCwweDAwLDB4MzgsMHhhZiwweGEwLDB4MDAsMHg0MCwKLTB4YWYsMHhhMCwweDAwLDB4NDQsMHhhZiwweGEwLDB4MDAsMHg1MCwweGFmLDB4YTgsMHgwMCwweDIwLDB4ODAsMHg0MiwweDAwLDB4MTIsCi0weDhmLDB4YjIsMHgwMCwweDE4LDB4YWYsMHhhMiwweDAwLDB4MjgsMHg4YywweGQwLDB4MDAsMHgwYywweDE0LDB4YTAsMHgwMSwweGU0LAotMHgwMCwweDYwLDB4MzAsMHgyMSwweDAwLDB4MTAsMHgxMCwweDgyLDB4MzAsMHg0NSwweDAwLDB4MDcsMHgxMCwweGEwLDB4MDAsMHgxMSwKLTB4YWYsMHhhMCwweDAwLDB4MzAsMHg4ZiwweGE0LDB4MDAsMHg5OCwweDI3LDB4ODIsMHg4MCwweDFjLDB4MDAsMHgwNCwweDE4LDB4NDAsCi0weDAwLDB4NjIsMHgxOCwweDIxLDB4MjQsMHhhMiwweDAwLDB4MDYsMHg4ZiwweGE1LDB4MDAsMHgyMCwweDk0LDB4NjQsMHgwMCwweDAwLAotMHgwMCwweDQ1LDB4MTAsMHgwNCwweDAwLDB4NDQsMHgwMCwweDFhLDB4MTQsMHg4MCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwNywweDAwLDB4MGQsMHgwMCwweDAwLDB4MTAsMHgxMiwweDI0LDB4NDIsMHgwMCwweDIwLDB4MzAsMHg0MiwweGZmLDB4ZmMsCi0weGFmLDB4YTIsMHgwMCwweDMwLDB4OGYsMHhhMywweDAwLDB4MTgsMHg4ZiwweGE0LDB4MDAsMHgyOCwweDM0LDB4MDIsMHhmZiwweGZmLAotMHhhZiwweGEwLDB4MDAsMHgyYywweGFmLDB4YTIsMHgwMCwweDQ4LDB4YWYsMHhhMywweDAwLDB4NGMsMHgwMCwweDYwLDB4ZjAsMHgyMSwKLTB4MDAsMHgwMCwweGI4LDB4MjEsMHgxOCwweDgwLDB4MDAsMHg0OCwweGFmLDB4YTAsMHgwMCwweDI0LDB4MDAsMHgxMSwweDg5LDB4MDIsCi0weGFmLDB4YjEsMHgwMCwweDU4LDB4MDAsMHg4MCwweGE4LDB4MjEsMHgwMCwweDEyLDB4MTAsMHhjMCwweDAwLDB4NTIsMHgxOCwweDIxLAotMHgwMCwweDAzLDB4ODAsMHg4MCwweDI3LDB4ODUsMHg5MCwweDAwLDB4MDIsMHg0MCwweDIwLDB4MjEsMHgwMCwweDQwLDB4YTAsMHgyMSwKLTB4MDIsMHgwNSwweDEwLDB4MjEsMHg5NCwweDU2LDB4MDAsMHgwMiwweDBjLDB4MDAsMHgxMiwweDhiLDB4MDAsMHgwMCwweDI4LDB4MjEsCi0weDkwLDB4NDIsMHgwMCwweDAwLDB4MjQsMHgwMywweDAwLDB4MDgsMHgzMCwweDQyLDB4MDAsMHgwYywweDEwLDB4NDMsMHgwMSwweDllLAotMHgyNCwweDA0LDB4MDAsMHgwMSwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHg4MiwweDAxLDB4N2MsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4OGYsMHhhNiwweDAwLDB4ODgsMHgzNCwweDQyLDB4MDEsMHgwNCwweDg0LDB4YzUsMHgwMCwweDBjLDB4MDIsMHg5MiwweDE4LDB4MjEsCi0weDk0LDB4NDYsMHgwMCwweDAwLDB4MDAsMHgwNSwweDIwLDB4YzAsMHgwMCwweDg1LDB4MjAsMHgyMSwweDAwLDB4MDMsMHgxOCwweDgwLAotMHgyNywweDgyLDB4OTAsMHgxMCwweDI3LDB4ODUsMHg5MCwweDA4LDB4MDAsMHg2NSwweDI4LDB4MjEsMHgwMCwweDYyLDB4MTgsMHgyMSwKLTB4ODAsMHg3MSwweDAwLDB4MDUsMHg4MCwweDczLDB4MDAsMHgwNCwweDhmLDB4YTMsMHgwMCwweDg4LDB4MzAsMHhkMCwweGZmLDB4ZmYsCi0weDAwLDB4MTAsMHgzYSwweDAzLDB4MzIsMHgwOCwweDAwLDB4ZmYsMHgyNywweDgyLDB4OTAsMHgyMCwweDAwLDB4MDQsMHgyMCwweDgwLAotMHg4MCwweGE2LDB4MDAsMHgwNiwweDAwLDB4ODIsMHgyMCwweDIxLDB4YTQsMHg2NywweDAwLDB4NDQsMHhhNCwweDY4LDB4MDAsMHg0NiwKLTB4OGMsMHg4NCwweDAwLDB4MDAsMHgzOCwweGM2LDB4MDAsMHgwMCwweDAxLDB4MDAsMHg4MCwweDIxLDB4MDAsMHgwNCwweDE1LDB4MDIsCi0weDMwLDB4NDIsMHgwMCwweDAxLDB4MTAsMHg0MCwweDAwLDB4MDMsMHgwMCwweGU2LDB4ODAsMHgwYSwweDAwLDB4MDQsMHgxNCwweDAyLAotMHgzMCwweDUwLDB4MDAsMHgwZiwweDEyLDB4MjAsMHgwMSwweDUwLDB4MDIsMHg0MCwweDIwLDB4MjEsMHgwMiwweDcxLDB4MTAsMHgyMSwKLTB4MDAsMHg1MCwweDEwLDB4MmEsMHgxNCwweDQwLDB4MDAsMHhlZCwweDAyLDB4OTIsMHgxMCwweDIxLDB4OTMsMHg4MiwweDhiLDB4NzEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgxNCwweDQwLDB4MDAsMHhlMCwweDAyLDB4OTIsMHgyOCwweDIxLAotMHgyNiwweGUyLDB4MDAsMHgwMSwweDMwLDB4NTcsMHhmZiwweGZmLDB4MDIsMHg0MCwweGYwLDB4MjEsMHgyNiwweGI1LDB4ZmYsMHhmZiwKLTB4MTYsMHhhMCwweGZmLDB4YmQsMHgwMiwweGMwLDB4OTAsMHgyMSwweDE2LDB4ZTAsMHgwMCwweGQwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhmLDB4YTMsMHgwMCwweDk4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweDYyLDB4MDAsMHgxMCwweDEwLDB4NDAsMHgwMCwweDJlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4YTQsMHgwMCwweDI0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDgwLDB4MDAsMHgyYSwKLTB4MjQsMHgwMywweDAwLDB4MDEsMHg4ZiwweGE1LDB4MDAsMHgxYywweDI3LDB4ODQsMHg5MCwweDA0LDB4OTQsMHhiMiwweDAwLDB4MTQsCi0weGEwLDB4YTMsMHgwMCwweDEyLDB4OGYsMHhhNiwweDAwLDB4M2MsMHgwMCwweDEyLDB4MTAsMHhjMCwweDAwLDB4NTIsMHgxMCwweDIxLAotMHgwMCwweDAyLDB4ODAsMHg4MCwweDI3LDB4ODIsMHg5MCwweDEwLDB4MDIsMHgwMiwweDEwLDB4MjEsMHg4MCwweDQzLDB4MDAsMHgwNiwKLTB4MDIsMHgwNCwweDIwLDB4MjEsMHg4YywweDg1LDB4MDAsMHgxOCwweDI0LDB4NjMsMHgwMCwweDAyLDB4MDAsMHgwMywweDE3LDB4YzIsCi0weDAwLDB4NjIsMHgxOCwweDIxLDB4MDAsMHgwMywweDE4LDB4NDMsMHgwMCwweDAzLDB4MTgsMHg0MCwweDE0LDB4YzAsMHgwMCwweDBlLAotMHgwMCwweGEzLDB4MzgsMHgyMSwweDI3LDB4ODIsMHg5MCwweDAwLDB4MDIsMHgwMiwweDEwLDB4MjEsMHg5NCwweDQzLDB4MDAsMHgwNiwKLTB4OGYsMHhhOCwweDAwLDB4MWMsMHgyNCwweDAyLDB4MDAsMHgwMSwweGE1LDB4MDMsMHgwMCwweDFhLDB4N2IsMHhiZSwweDA0LDB4M2MsCi0weDdiLDB4YjYsMHgwMywweGZjLDB4N2IsMHhiNCwweDAzLDB4YmMsMHg3YiwweGIyLDB4MDMsMHg3YywweDdiLDB4YjAsMHgwMywweDNjLAotMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDg4LDB4OGYsMHhhNCwweDAwLDB4OTgsMHg4ZiwweGE1LDB4MDAsMHgzOCwKLTB4OGYsMHhhNiwweDAwLDB4MzQsMHhhZiwweGEwLDB4MDAsMHgxMCwweDBjLDB4MDAsMHgwOSwweDBhLDB4YWYsMHhhMCwweDAwLDB4MTQsCi0weDA4LDB4MDAsMHgxZCwweDJkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweGEzLDB4MDAsMHg0NCwweDkzLDB4ODIsMHg4MSwweDU4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDYxLDB4MzAsMHg2OSwweDAwLDB4MDMsMHg4ZiwweGE0LDB4MDAsMHgyNCwKLTB4OGYsMHhhNSwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODUsMHgxMCwweDJhLDB4MTAsMHg0MCwweDAwLDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHhhNiwweDAwLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4YzQsMHgwMCwweDA0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4ODMsMHgwMCwweGZmLDB4MDAsMHhhMywweDEwLDB4MmEsMHgxMCwweDQwLDB4MDAsMHg4NywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZiwweGE4LDB4MDAsMHgyNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHgwMCwweDAwLDB4ODMsCi0weDAwLDB4NjUsMHgxMCwweDIzLDB4MDAsMHhhOCwweDE4LDB4MjMsMHgwMCwweDYyLDB4MTAsMHgyYSwweDE0LDB4NDAsMHgwMCwweDdkLAotMHgzMCwweDYzLDB4MDAsMHhmZiwweDAwLDB4ODUsMHgxMCwweDIzLDB4MzAsMHg0MiwweDAwLDB4ZmYsMHhhZiwweGEyLDB4MDAsMHg1MCwKLTB4OGYsMHhhMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDczLDB4MDAsMHgwMCwweGE4LDB4MjEsCi0weDI3LDB4OGMsMHg5MCwweDAwLDB4M2MsMHgwYiwweDgwLDB4ZmYsMHgyNCwweDEwLDB4MDAsMHgwNCwweDI3LDB4OTEsMHg5MCwweDA0LAotMHgzNSwweDZiLDB4ZmYsMHhmZiwweDNjLDB4MGQsMHg3ZiwweDAwLDB4MjcsMHg4ZSwweDkwLDB4MTAsMHgwMSwweDgwLDB4NzgsMHgyMSwKLTB4MDAsMHgxMiwweDMwLDB4YzAsMHgwMCwweGQyLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0YywweDEwLDB4MjEsCi0weDk0LDB4NDIsMHgwMCwweDA2LDB4OGYsMHhhMywweDAwLDB4MmMsMHg4ZiwweGE0LDB4MDAsMHgzMCwweGFmLDB4YTIsMHgwMCwweDQ0LAotMHg4ZiwweGE1LDB4MDAsMHg0NCwweDMwLDB4NDksMHgwMCwweDAzLDB4MDIsMHgwOSwweDEwLDB4MjMsMHgzMCwweDQyLDB4MDAsMHgwMywKLTB4MDAsMHhhMiwweDEwLDB4MjEsMHg4ZiwweGE4LDB4MDAsMHgzMCwweDI0LDB4NDIsMHgwMCwweDA0LDB4MzAsMHg0MiwweGZmLDB4ZmYsCi0weDAwLDB4NjQsMHgzOCwweDIxLDB4MDEsMHgwMiwweDI4LDB4MjMsMHgwMCwweDYyLDB4MTgsMHgyMSwweDAwLDB4NDgsMHgxMCwweDJiLAotMHgxMCwweDQwLDB4MDAsMHg1MiwweDAwLDB4MDAsMHgyMCwweDIxLDB4MzAsMHhlNywweGZmLDB4ZmYsMHgzMCwweGE0LDB4ZmYsMHhmZiwKLTB4YWYsMHhhNywweDAwLDB4MmMsMHgwMCwweGQyLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg1MSwweDE4LDB4MjEsCi0weDhjLDB4NjUsMHgwMCwweDE4LDB4MDAsMHgwNCwweDI1LDB4NDAsMHgwMCwweDhkLDB4MjAsMHgyNCwweDhjLDB4YTgsMHgwMCwweDA0LAotMHgwMCwweDRlLDB4MTgsMHgyMSwweDAwLDB4NGYsMHg1MCwweDIxLDB4MDEsMHgwYiwweDQwLDB4MjQsMHgwMSwweDA0LDB4NDAsMHgyNSwKLTB4YWMsMHhhOCwweDAwLDB4MDQsMHg4ZiwweGE0LDB4MDAsMHg5OCwweDhmLDB4YTIsMHgwMCwweDUwLDB4MjYsMHhiNSwweDAwLDB4MDEsCi0weGEwLDB4NjQsMHgwMCwweDAwLDB4OGMsMHhhNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4ODEsMHgwMCwweDBjLAotMHgwMiwweGEyLDB4MzAsMHgyYSwweDgwLDB4NjIsMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHgwMiwKLTB4MDAsMHgwMiwweDFmLDB4YzIsMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDQzLDB4MDAsMHgwMiwweDEwLDB4NDAsCi0weDAwLDB4YTIsMHgzOCwweDIxLDB4OGYsMHhhNSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE0LDB4ZTUsMHgwMCwweDAwLAotMHg5NSwweDUyLDB4MDAsMHgwMiwweDE0LDB4YzAsMHhmZiwweGM3LDB4MDAsMHgxMiwweDMwLDB4YzAsMHg4ZiwweGE0LDB4MDAsMHgyNCwKLTB4OGYsMHhhNSwweDAwLDB4NTAsMHg4ZiwweGE2LDB4MDAsMHgxYywweDhmLDB4YTMsMHgwMCwweDJjLDB4MDAsMHg4NSwweDgwLDB4MjEsCi0weGEwLDB4ZDAsMHgwMCwweDEyLDB4MDAsMHgwOSwweDEwLDB4MjMsMHgzMCwweDQyLDB4MDAsMHgwMywweDhmLDB4YTgsMHgwMCwweDg4LAotMHgwMCwweDYyLDB4MTAsMHgyMywweGE0LDB4YzIsMHgwMCwweDFhLDB4ODUsMHgwMywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMywweDEwLDB4YzAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4MywweDkwLDB4MDQsCi0weDAwLDB4NDMsMHgxMCwweDIxLDB4OGMsMHg0NCwweDAwLDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4ODMsMHgwMCwweDA0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NjMsMHgwMCwweDEwLDB4MTQsMHg2MCwweGZmLDB4NzQsMHgwMiwweDAwLDB4MTAsMHgyMSwKLTB4OGYsMHhhMywweDAwLDB4NTQsMHg4ZiwweGE0LDB4MDAsMHgxOCwweDhmLDB4YTUsMHgwMCwweDI0LDB4MDAsMHg2NCwweDEwLDB4MjEsCi0weDAwLDB4MDIsMHgxMCwweDgwLDB4MjcsMHg4MywweDkwLDB4MTgsMHgwMCwweDQzLDB4MTAsMHgyMSwweDkwLDB4NDQsMHgwMCwweDAwLAotMHgxMCwweGEwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgzMCwweDIxLDB4MDgsMHgwMCwweDFkLDB4MzMsMHgwMiwweDAwLDB4MTAsMHgyMSwKLTB4OTMsMHg4MiwweDgwLDB4MTAsMHgwMCwweDAwLDB4MjgsMHgyMSwweDAwLDB4MDAsMHgzOCwweDIxLDB4MGMsMHgwMCwweDIxLDB4OWEsCi0weGFmLDB4YTIsMHgwMCwweDEwLDB4MDgsMHgwMCwweDFkLDB4MzMsMHgwMiwweDAwLDB4MTAsMHgyMSwweDMwLDB4NjMsMHhmZiwweGZmLAotMHgwOCwweDAwLDB4MWQsMHg4NSwweGFmLDB4YTMsMHgwMCwweDJjLDB4OGYsMHhhOCwweDAwLDB4NDQsMHgwOCwweDAwLDB4MWQsMHhhNywKLTB4MzEsMHgwOSwweDAwLDB4MDMsMHgwOCwweDAwLDB4MWQsMHg2MCwweGFmLDB4YTMsMHgwMCwweDUwLDB4OGYsMHhhNiwweDAwLDB4NDQsCi0weGFmLDB4YTAsMHgwMCwweDUwLDB4MDgsMHgwMCwweDFkLDB4YTcsMHgzMCwweGM5LDB4MDAsMHgwMywweDhmLDB4YTUsMHgwMCwweDQ4LAotMHg4ZiwweGE2LDB4MDAsMHg0YywweDhmLDB4YTQsMHgwMCwweDFjLDB4MDMsMHhjMCwweDM4LDB4MjEsMHgwYywweDAwLDB4MWIsMHhkOCwKLTB4YWYsMHhiNywweDAwLDB4MTAsMHgwOCwweDAwLDB4MWQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDI4LDB4ODAsCi0weDI3LDB4ODIsMHg5MCwweDAwLDB4MDAsMHhhMiwweDI4LDB4MjEsMHgwMCwweDAwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgwMSwweDQ5LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxZCwweDA5LDB4MjYsMHhlMiwweDAwLDB4MDEsMHgwMCwweDAyLDB4ODAsMHg4MCwKLTB4MjcsMHg4MywweDkwLDB4MTAsMHg4ZiwweGE0LDB4MDAsMHgxYywweDAyLDB4MDMsMHgxOCwweDIxLDB4MjYsMHgzMSwweDAwLDB4MDEsCi0weDAyLDB4NDAsMHgyOCwweDIxLDB4MGMsMHgwMCwweDFlLDB4ZWEsMHhhMCwweDcxLDB4MDAsMHgwNSwweDE0LDB4NDAsMHhmZiwweDEzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE2LDB4ZTAsMHgwMCwweDRkLDB4MDMsMHhjMCwweDM4LDB4MjEsMHg4ZiwweGE0LDB4MDAsMHgyNCwKLTB4OGYsMHhhNSwweDAwLDB4MjAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDI0LDB4ODQsMHgwMCwweDAxLDB4YWYsMHhiMiwweDAwLDB4NDgsCi0weGFmLDB4YjYsMHgwMCwweDRjLDB4MDIsMHhjMCwweGYwLDB4MjEsMHgxMCwweGEyLDB4MDAsMHg0MSwweGFmLDB4YTQsMHgwMCwweDI0LAotMHgyNywweDgyLDB4OTAsMHgwMCwweDAyLDB4MDIsMHgxMCwweDIxLDB4OTQsMHg0MiwweDAwLDB4MDYsMHg4ZiwweGE0LDB4MDAsMHgzMCwKLTB4YWYsMHhhMCwweDAwLDB4MjAsMHhhZiwweGEyLDB4MDAsMHg0NCwweDMwLDB4NDksMHgwMCwweDAzLDB4OGYsMHhhOCwweDAwLDB4NDQsCi0weDAwLDB4MDksMHgxMCwweDIzLDB4MzAsMHg0MiwweDAwLDB4MDMsMHgwMSwweDAyLDB4MTAsMHgyMSwweDI0LDB4NDIsMHgwMCwweDA0LAotMHgzMCwweDQyLDB4ZmYsMHhmZiwweDAwLDB4NDQsMHgxOCwweDJiLDB4MTAsMHg2MCwweDAwLDB4MmIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGYsMHhhNSwweDAwLDB4MmMsMHgwMCwweDgyLDB4MTAsMHgyMywweDAwLDB4YTQsMHgxOCwweDIxLDB4MzAsMHg2MywweGZmLDB4ZmYsCi0weDMwLDB4NDQsMHhmZiwweGZmLDB4YWYsMHhhMywweDAwLDB4MmMsMHgwMiwweDkyLDB4MjgsMHgyMSwweDAwLDB4MDUsMHgyOCwweDgwLAotMHgyNywweDgyLDB4OTAsMHgwNCwweDAwLDB4YTIsMHgxMCwweDIxLDB4OGMsMHg0NiwweDAwLDB4MTgsMHgzYywweDAzLDB4ODAsMHhmZiwKLTB4M2MsMHgwMiwweDdmLDB4MDAsMHg4YywweGM4LDB4MDAsMHgwNCwweDAwLDB4MDQsMHgyNSwweDQwLDB4MzQsMHg2MywweGZmLDB4ZmYsCi0weDAwLDB4ODIsMHgyMCwweDI0LDB4MDEsMHgwMywweDQwLDB4MjQsMHgwMSwweDA0LDB4NDAsMHgyNSwweGFjLDB4YzgsMHgwMCwweDA0LAotMHg4ZiwweGE4LDB4MDAsMHg5OCwweDI3LDB4ODIsMHg5MCwweDEwLDB4MDAsMHhhMiwweDEwLDB4MjEsMHhhMCwweDQ4LDB4MDAsMHgwMCwKLTB4OGMsMHhjNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgyNywweGMyLDB4MTAsMHg4MCwweGZlLDB4ZGIsCi0weGFmLDB4YTQsMHgwMCwweDNjLDB4ODAsMHg0MiwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDIsMHgwMCwweDAyLAotMHgwMCwweDAyLDB4MWYsMHhjMiwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4NDMsMHgwMCwweDAyLDB4MTAsMHg0MCwKLTB4MDAsMHhjMiwweDM4LDB4MjEsMHg4ZiwweGEyLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTQsMHhlMiwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgxZCwweDBjLDB4MjYsMHhiNSwweGZmLDB4ZmYsMHg4ZiwweGE2LDB4MDAsMHgyYywweDAwLDB4MDAsMHgyMCwweDIxLAotMHgwMCwweGMyLDB4MTAsMHgyMSwweDMwLDB4NDIsMHhmZiwweGZmLDB4MDgsMHgwMCwweDFlLDB4MWEsMHhhZiwweGEyLDB4MDAsMHgyYywKLTB4OGYsMHhhNiwweDAwLDB4MWMsMHgwOCwweDAwLDB4MWUsMHgwNCwweGE0LDB4ZDIsMHgwMCwweDE0LDB4OGYsMHhhNSwweDAwLDB4NDgsCi0weDhmLDB4YTYsMHgwMCwweDRjLDB4OGYsMHhhNCwweDAwLDB4MWMsMHgwYywweDAwLDB4MWIsMHhkOCwweGFmLDB4YjcsMHgwMCwweDEwLAotMHgwOCwweDAwLDB4MWQsMHhmYiwweDAwLDB4MDAsMHhiOCwweDIxLDB4MGMsMHgwMCwweDEyLDB4OGIsMHgwMCwweDAwLDB4MjgsMHgyMSwKLTB4MDAsMHg0MCwweDE4LDB4MjEsMHg5NCwweDQyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHg0MiwweDA4LDB4MDAsCi0weGE0LDB4NjIsMHgwMCwweDAwLDB4MDgsMHgwMCwweDFkLDB4MDAsMHgwMiwweDcxLDB4MTAsMHgyMSwweDAyLDB4OTIsMHgxOCwweDIxLAotMHgwMCwweDAzLDB4ODAsMHg4MCwweDI3LDB4ODIsMHg5MCwweDA0LDB4MDIsMHgwMiwweDEwLDB4MjEsMHg4YywweDQ0LDB4MDAsMHgxOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YywweDgzLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg2MywweDAwLDB4MTAsCi0weDEwLDB4NjAsMHgwMCwweDA5LDB4MjQsMHgwNiwweDAwLDB4MDEsMHg5MywweDgyLDB4OGIsMHg3MSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzMCwweDQyLDB4MDAsMHgwMSwweDEwLDB4NDAsMHhmZSwweGEyLDB4M2MsMHgwNCwweDAwLDB4ODAsMHgyNywweDg1LDB4OTAsMHgwMCwKLTB4MDgsMHgwMCwweDFkLDB4ZWIsMHgwMiwweDA1LDB4MjgsMHgyMSwweDI3LDB4ODMsMHg5MCwweDE4LDB4MjcsMHg4MiwweDkwLDB4MTAsCi0weDAyLDB4MDMsMHgxOCwweDIxLDB4MDIsMHgwMiwweDEwLDB4MjEsMHg5MCwweDY0LDB4MDAsMHgwMCwweDkwLDB4NDUsMHgwMCwweDA1LAotMHg5MywweDgzLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgzOCwweDIxLDB4MGMsMHgwMCwweDIxLDB4OWEsMHhhZiwweGEzLDB4MDAsMHgxMCwKLTB4MDgsMHgwMCwweDFlLDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI3LDB4ODIsMHg5MCwweDE4LDB4MDIsMHgwMiwweDEwLDB4MjEsCi0weDk0LDB4NDMsMHgwMCwweDAyLDB4OGYsMHhhNiwweDAwLDB4NTgsMHgwMCwweDAzLDB4MTksMHgwMiwweDAwLDB4NjYsMHgxOCwweDIzLAotMHgzMCwweDYzLDB4MGYsMHhmZiwweDI4LDB4NjIsMHgwMCwweDIwLDB4MTAsMHg0MCwweDAwLDB4MDYsMHgyOCwweDYyLDB4MDAsMHg0MCwKLTB4OGYsMHhhOCwweDAwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxMCwweDA2LDB4MDgsMHgwMCwweDFjLDB4ZDksCi0weDMwLDB4NDQsMHgwMCwweDAxLDB4MTAsMHg0MCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4YTQsMHgwMCwweDk0LAotMHgwOCwweDAwLDB4MWUsMHg4MywweDAwLDB4NjQsMHgxMCwweDA2LDB4MDgsMHgwMCwweDFjLDB4ZDksMHgwMCwweDAwLDB4MjAsMHgyMSwKLTB4OGYsMHhhNCwweDAwLDB4OTgsMHg4ZiwweGE1LDB4MDAsMHgzOCwweGFmLDB4YTAsMHgwMCwweDEwLDB4MGMsMHgwMCwweDA5LDB4MGEsCi0weGFmLDB4YTgsMHgwMCwweDE0LDB4MzAsMHg0MiwweGZmLDB4ZmYsMHgwOCwweDAwLDB4MWMsMHhhOSwweGFmLDB4YTIsMHgwMCwweDQwLAotMHgzYywweDAyLDB4YjAsMHgwMywweDNjLDB4MDMsMHg4MCwweDAwLDB4MjcsMHhiZCwweGZmLDB4ZTAsMHgzNCwweDQyLDB4MDAsMHgyMCwKLTB4MjQsMHg2MywweDdhLDB4NTAsMHhhZiwweGIxLDB4MDAsMHgxNCwweGFmLDB4YjAsMHgwMCwweDEwLDB4YWYsMHhiZiwweDAwLDB4MTgsCi0weGFjLDB4NDMsMHgwMCwweDAwLDB4OTAsMHg4MiwweDAwLDB4MGEsMHgwMCwweDgwLDB4ODAsMHgyMSwweDE0LDB4NDAsMHgwMCwweDQ1LAotMHgwMCwweDAwLDB4ODgsMHgyMSwweDkyLDB4MDIsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgzYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDIwLDB4MDAsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTIsMHgwMiwweDAwLDB4MTYsCi0weDkyLDB4MDUsMHgwMCwweDBhLDB4MzAsMHg0MiwweDAwLDB4ZmMsMHgxMCwweGEwLDB4MDAsMHgwMywweGEyLDB4MDIsMHgwMCwweDE2LAotMHgzNCwweDQyLDB4MDAsMHgwMSwweGEyLDB4MDIsMHgwMCwweDE2LDB4OTIsMHgwNCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHg4MywweDAwLDB4ZmYsMHgxMCwweDYwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTIsMHgwMiwweDAwLDB4MTYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHg0MiwweDAwLDB4MDIsMHhhMiwweDAyLDB4MDAsMHgxNiwweDEwLDB4NjAsMHgwMCwweDBhLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4YTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NiwweDAyLDB4MDAsMHgwMCwKLTB4YTIsMHgwMCwweDAwLDB4MTcsMHhhNiwweDAyLDB4MDAsMHgxNCwweDhmLDB4YmYsMHgwMCwweDE4LDB4N2IsMHhiMCwweDAwLDB4YmMsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjAsMHgxNCwweDgwLDB4MDAsMHgwNSwweDI0LDB4MDIsMHgwMCwweDAxLAotMHg5NiwweDAzLDB4MDAsMHgwNiwweGEyLDB4MDIsMHgwMCwweDE3LDB4MDgsMHgwMCwweDFlLDB4YmUsMHhhNiwweDAzLDB4MDAsMHgxNCwKLTB4OTYsMHgwNCwweDAwLDB4MDAsMHg5NiwweDA1LDB4MDAsMHgwNiwweDI3LDB4ODYsMHg5MCwweDAwLDB4MDAsMHgwNCwweDEwLDB4YzAsCi0weDAwLDB4MDUsMHgxOCwweGMwLDB4MDAsMHg0NCwweDEwLDB4MjEsMHgwMCwweDY1LDB4MTgsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLAotMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjYsMHgxOCwweDIxLDB4MDAsMHg0NiwweDEwLDB4MjEsMHg4YywweDY1LDB4MDAsMHgwOCwKLTB4OGMsMHg0NCwweDAwLDB4MDgsMHgwYywweDAwLDB4MTIsMHg3YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0MywweDAwLDB4ZmYsCi0weDEwLDB4NjAsMHgwMCwweDA0LDB4YTIsMHgwMiwweDAwLDB4MTcsMHg5NiwweDAyLDB4MDAsMHgwNiwweDA4LDB4MDAsMHgxZSwweGJlLAotMHhhNiwweDAyLDB4MDAsMHgxNCwweDk2LDB4MDIsMHgwMCwweDAwLDB4MDgsMHgwMCwweDFlLDB4YmUsMHhhNiwweDAyLDB4MDAsMHgxNCwKLTB4OTYsMHgwNSwweDAwLDB4MDAsMHgwYywweDAwLDB4MWUsMHhlYSwweDAyLDB4MDAsMHgyMCwweDIxLDB4MDgsMHgwMCwweDFlLDB4YTUsCi0weDAyLDB4MjIsMHg4OCwweDIxLDB4OTQsMHg4NSwweDAwLDB4MDYsMHgwYywweDAwLDB4MWUsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MWUsMHhhMSwweDAwLDB4NDAsMHg4OCwweDIxLDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMCwKLTB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4N2IsMHhhOCwweDI3LDB4YmQsMHhmZiwweGYwLDB4YWMsMHg2MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgxMCwweDIxLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHgxMCwweDNjLDB4MDMsMHhiMCwweDAzLAotMHgzYywweDAyLDB4ODAsMHgwMCwweDM0LDB4NjMsMHgwMCwweDIwLDB4MjQsMHg0MiwweDdiLDB4Y2MsMHhhYywweDYyLDB4MDAsMHgwMCwKLTB4OTAsMHg4OSwweDAwLDB4MGEsMHgwMCwweDgwLDB4MzAsMHgyMSwweDExLDB4MjAsMHgwMCwweDA1LDB4MDAsMHhhMCwweDUwLDB4MjEsCi0weDkwLDB4ODIsMHgwMCwweDE3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgxYiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg5MCwweGM3LDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhlMCwweDAwLDB4MWIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTQsMHhjOCwweDAwLDB4MDAsMHgyNywweDgzLDB4OTAsMHgwMCwweDkzLDB4ODUsMHg4YiwweDcwLDB4MDAsMHgwOCwweDEwLDB4YzAsCi0weDAwLDB4NDgsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDA4LAotMHgwMCwweGU1LDB4MjgsMHgyYiwweDEwLDB4YTAsMHgwMCwweDA2LDB4MDEsMHg0NCwweDE4LDB4MjMsMHg4ZiwweDgyLDB4OGIsMHg4OCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQzLDB4MTAsMHgyYiwweDEwLDB4NDAsMHgwMCwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MDMsMHgwMCwweDEwLDB4YTQsMHhjOCwweDAwLDB4MTQsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4NjAsMHgxMCwweDIxLAotMHgxMSwweDIwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHhjMiwweDAwLDB4MDYsMHgyNCwweDAzLDB4MDAsMHgwOCwKLTB4MDgsMHgwMCwweDFmLDB4MTYsMHhhNCwweGMyLDB4MDAsMHgxNCwweDA4LDB4MDAsMHgxZiwweDE2LDB4MDAsMHgwMCwweDE4LDB4MjEsCi0weDI3LDB4YmQsMHhmZiwweGM4LDB4YWYsMHhiNSwweDAwLDB4MmMsMHhhZiwweGI0LDB4MDAsMHgyOCwweGFmLDB4YjMsMHgwMCwweDI0LAotMHhhZiwweGIwLDB4MDAsMHgxOCwweGFmLDB4YmYsMHgwMCwweDMwLDB4YWYsMHhiMiwweDAwLDB4MjAsMHhhZiwweGIxLDB4MDAsMHgxYywKLTB4OTQsMHg5MSwweDAwLDB4MDYsMHgwMCwweDgwLDB4YTAsMHgyMSwweDNjLDB4MDIsMHg4MCwweDAwLDB4M2MsMHgwNCwweGIwLDB4MDMsCi0weDAwLDB4MTEsMHhhOCwweGMwLDB4MzQsMHg4NCwweDAwLDB4MjAsMHgyNCwweDQyLDB4N2MsMHg4MCwweDAyLDB4YjEsMHg0OCwweDIxLAotMHhhYywweDgyLDB4MDAsMHgwMCwweDAwLDB4MDksMHg0OCwweDgwLDB4MjQsMHgwMywweDAwLDB4MDEsMHgyNywweDgyLDB4OTAsMHgxMCwKLTB4YTIsMHg4MywweDAwLDB4MTIsMHgwMSwweDIyLDB4MTAsMHgyMSwweDI3LDB4ODQsMHg5MCwweDA0LDB4MDEsMHgyNCwweDIwLDB4MjEsCi0weDgwLDB4NDgsMHgwMCwweDA2LDB4OGMsMHg4YSwweDAwLDB4MTgsMHgyNywweDgzLDB4OTAsMHgyMCwweDAxLDB4MjMsMHg0OCwweDIxLAotMHg4ZCwweDI0LDB4MDAsMHgwMCwweDI1LDB4MDgsMHgwMCwweDAyLDB4OGQsMHg0MiwweDAwLDB4MDAsMHg4ZCwweDQ5LDB4MDAsMHgwNCwKLTB4MDAsMHgwOCwweDE3LDB4YzIsMHg4ZCwweDQzLDB4MDAsMHgwOCwweDAxLDB4MDIsMHg0MCwweDIxLDB4MDAsMHgwNCwweDI1LDB4YzIsCi0weDAwLDB4MDgsMHg0MCwweDQzLDB4MzAsMHg4NCwweDAwLDB4MDEsMHgwMCwweDAzLDB4MWYsMHhjMiwweDAwLDB4MDgsMHg0MCwweDQwLAotMHgwMCwweGUwLDB4ODAsMHgyMSwweDAwLDB4NjQsMHgxOCwweDI0LDB4MDAsMHgwOSwweDQ5LDB4NDIsMHgwMSwweDQ4LDB4MTAsMHgyMSwKLTB4MDAsMHhhMCwweDk4LDB4MjEsMHgwMCwweGEwLDB4MjAsMHgyMSwweDAwLDB4NDAsMHgzOCwweDIxLDB4MDIsMHgwMCwweDI4LDB4MjEsCi0weDE0LDB4NjAsMHgwMCwweDE5LDB4MzEsMHgyOSwweDAwLDB4MDEsMHg5NCwweDQyLDB4MDAsMHgwMCwweDAyLDB4YjEsMHg4OCwweDIxLAotMHgwMiwweDAwLDB4MjgsMHgyMSwweDAwLDB4MTEsMHg4OCwweDgwLDB4MjcsMHg5MCwweDkwLDB4MDAsMHgwMiwweDMwLDB4ODAsMHgyMSwKLTB4OTYsMHgwMywweDAwLDB4MDYsMHgzMCwweDUyLDB4ZmYsMHhmZiwweDAyLDB4NjAsMHgyMCwweDIxLDB4MDAsMHg2MCwweDMwLDB4MjEsCi0weGE2LDB4ODMsMHgwMCwweDFhLDB4MjcsMHg4MiwweDkwLDB4MDgsMHgwYywweDAwLDB4MDgsMHhlMywweDAyLDB4MjIsMHg4OCwweDIxLAotMHgwMCwweDUyLDB4MTAsMHgyMSwweDk2LDB4MDMsMHgwMCwweDA2LDB4YTYsMHgyMiwweDAwLDB4MDQsMHg4ZiwweGJmLDB4MDAsMHgzMCwKLTB4N2IsMHhiNCwweDAxLDB4N2MsMHg3YiwweGIyLDB4MDEsMHgzYywweDdiLDB4YjAsMHgwMCwweGZjLDB4MDAsMHg2MCwweDEwLDB4MjEsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MzgsMHhhZiwweGE5LDB4MDAsMHgxMCwweDBjLDB4MDAsMHgwOSwweDBhLAotMHhhZiwweGEwLDB4MDAsMHgxNCwweDA4LDB4MDAsMHgxZiwweDU0LDB4MDIsMHhiMSwweDg4LDB4MjEsMHgyNywweGJkLDB4ZmYsMHhjMCwKLTB4YWYsMHhiZSwweDAwLDB4MzgsMHhhZiwweGI3LDB4MDAsMHgzNCwweGFmLDB4YjYsMHgwMCwweDMwLDB4YWYsMHhiNSwweDAwLDB4MmMsCi0weGFmLDB4YjMsMHgwMCwweDI0LDB4YWYsMHhiMSwweDAwLDB4MWMsMHhhZiwweGJmLDB4MDAsMHgzYywweGFmLDB4YjQsMHgwMCwweDI4LAotMHhhZiwweGIyLDB4MDAsMHgyMCwweGFmLDB4YjAsMHgwMCwweDE4LDB4OTQsMHg5MCwweDAwLDB4MDAsMHgzYywweDA4LDB4YjAsMHgwMywKLTB4MzUsMHgwOCwweDAwLDB4MjAsMHgwMCwweDEwLDB4MTAsMHhjMCwweDAwLDB4NTAsMHgxOCwweDIxLDB4MDAsMHg0MCwweDg4LDB4MjEsCi0weDNjLDB4MDIsMHg4MCwweDAwLDB4MDAsMHgwMywweDQ4LDB4ODAsMHgyNCwweDQyLDB4N2QsMHhiYywweDAwLDB4ODAsMHg5OCwweDIxLAotMHgyNywweDg0LDB4OTAsMHgxMCwweDAxLDB4MjQsMHgyMCwweDIxLDB4OTMsMHhiNywweDAwLDB4NTMsMHhhZCwweDAyLDB4MDAsMHgwMCwKLTB4ODAsMHg4MywweDAwLDB4MDYsMHgyNywweDgyLDB4OTAsMHgwNCwweDAxLDB4MjIsMHgxMCwweDIxLDB4OGMsMHg0NCwweDAwLDB4MTgsCi0weDI0LDB4NjMsMHgwMCwweDAyLDB4MDAsMHgwMywweDE3LDB4YzIsMHg4YywweDg4LDB4MDAsMHgwOCwweDAwLDB4NjIsMHgxOCwweDIxLAotMHgwMCwweDAzLDB4MTgsMHg0MywweDAwLDB4MDMsMHgxOCwweDQwLDB4YWYsMHhhNywweDAwLDB4NGMsMHgyYywweGEyLDB4MDAsMHgxMCwKLTB4MDAsMHhhMCwweGE4LDB4MjEsMHgwMCwweDgzLDB4NTAsMHgyMSwweDAwLDB4MDgsMHg0NywweGMyLDB4MDAsMHhjMCwweDU4LDB4MjEsCi0weDAwLDB4MDAsMHhiMCwweDIxLDB4OGMsMHg5MiwweDAwLDB4MGMsMHgxNCwweDQwLDB4MDAsMHgxMywweDAwLDB4MDAsMHhmMCwweDIxLAotMHg5MiwweDY3LDB4MDAsMHgwNCwweDI0LDB4MTQsMHgwMCwweDAxLDB4MTIsMHg4NywweDAwLDB4MTAsMHgwMiwweDMwLDB4MTAsMHgyMSwKLTB4MjcsMHg4MywweDkwLDB4MTgsMHgwMSwweDIzLDB4MTgsMHgyMSwweDgwLDB4NjQsMHgwMCwweDAwLDB4MjcsMHg4MywweGI1LDB4NzAsCi0weDAwLDB4MDQsMHgxMSwweDAwLDB4MDAsMHg0NCwweDEwLDB4MjMsMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDQsMHgxMCwweDIzLAotMHgwMCwweDAyLDB4MTAsMHg4MCwweDAwLDB4NDMsMHgxMCwweDIxLDB4OTAsMHg0NCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHg4MCwweDAwLDB4MjMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MzAsMHgxMCwweDIxLDB4MDAsMHgwMiwweDgwLDB4ODAsCi0weDI0LDB4MDQsMHgwMCwweDAxLDB4MjcsMHg4MywweDkwLDB4MjAsMHhhMiwweDY0LDB4MDAsMHgxMiwweDAyLDB4MDMsMHgxOCwweDIxLAotMHg4YywweDYyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDE1LDB4YzIsMHgzMCwweDQyLDB4MDAsMHgwMSwKLTB4MDEsMHgwMiwweDEwLDB4MjQsMHgxNCwweDQwLDB4MDAsMHgwZSwweDAyLDB4YTAsMHgyMCwweDIxLDB4MjcsMHg4MiwweDkwLDB4MDAsCi0weDAyLDB4MDIsMHgxMCwweDIxLDB4OTQsMHg0MywweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE2LDB4NjMsMHgwMCwweDFhLAotMHg5NCwweDQyLDB4MDAsMHgwNiwweDdiLDB4YmUsMHgwMSwweGZjLDB4N2IsMHhiNiwweDAxLDB4YmMsMHg3YiwweGI0LDB4MDEsMHg3YywKLTB4N2IsMHhiMiwweDAxLDB4M2MsMHg3YiwweGIwLDB4MDAsMHhmYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4NDAsCi0weDhmLDB4YTUsMHgwMCwweDRjLDB4MDEsMHg2MCwweDMwLDB4MjEsMHgwMSwweDQwLDB4MzgsMHgyMSwweGFmLDB4YTAsMHgwMCwweDEwLAotMHgwYywweDAwLDB4MDksMHgwYSwweGFmLDB4YTAsMHgwMCwweDE0LDB4MDgsMHgwMCwweDFmLDB4YmIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjcsMHg4MywweDkwLDB4MjAsMHgwMSwweDIzLDB4MTgsMHgyMSwweDhjLDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDIsMHgxNSwweGMyLDB4MzAsMHg0MiwweDAwLDB4MDEsMHgwMSwweDAyLDB4MTAsMHgyNCwweDE0LDB4NDAsMHgwMCwweGFmLAotMHgwMCwweGEwLDB4MjAsMHgyMSwweDMyLDB4NGYsMHgwMCwweDAzLDB4MDAsMHgxMiwweDEwLDB4ODIsMHgyNSwweGUzLDB4MDAsMHgwZCwKLTB4MzAsMHg0NSwweDAwLDB4MDcsMHgwMCwweDc0LDB4NzgsMHgwNCwweDEwLDB4YTAsMHgwMCwweDBlLDB4MDAsMHgwMCwweDkwLDB4MjEsCi0weDI3LDB4ODIsMHg4MCwweDFjLDB4MDAsMHgxNSwweDE4LDB4NDAsMHgwMCwweDYyLDB4MTgsMHgyMSwweDk0LDB4NjQsMHgwMCwweDAwLAotMHgyNCwweGEyLDB4MDAsMHgwNiwweDAwLDB4NTQsMHgxMCwweDA0LDB4MDAsMHg0NCwweDAwLDB4MWEsMHgxNCwweDgwLDB4MDAsMHgwMiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA3LDB4MDAsMHgwZCwweDAwLDB4MDAsMHgxMCwweDEyLDB4MjQsMHg0MiwweDAwLDB4MjAsCi0weDMwLDB4NTIsMHhmZiwweGZjLDB4MDIsMHgzMCwweDEwLDB4MjEsMHgyNywweDgzLDB4OTAsMHgxMCwweDAwLDB4MDIsMHgxMCwweDgwLAotMHgwMCwweDQzLDB4MTAsMHgyMSwweDkwLDB4NDQsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDgzLDB4MDAsMHhmZiwKLTB4MmMsMHg2MiwweDAwLDB4MGMsMHgxNCwweDQwLDB4MDAsMHgwNCwweDJjLDB4NjIsMHgwMCwweDE5LDB4MzAsMHg4MiwweDAwLDB4MGYsCi0weDI0LDB4NDMsMHgwMCwweDBjLDB4MmMsMHg2MiwweDAwLDB4MTksMHgxMCwweDQwLDB4MDAsMHgxOSwweDI0LDB4MGUsMHgwMCwweDIwLAotMHgyNCwweDYyLDB4ZmYsMHhlOSwweDJjLDB4NDIsMHgwMCwweDAyLDB4MTQsMHg0MCwweDAwLDB4MTUsMHgyNCwweDBlLDB4MDAsMHgxMCwKLTB4MjQsMHg2MiwweGZmLDB4ZWIsMHgyYywweDQyLDB4MDAsMHgwMiwweDE0LDB4NDAsMHgwMCwweDExLDB4MjQsMHgwZSwweDAwLDB4MDgsCi0weDI0LDB4MDIsMHgwMCwweDE0LDB4MTAsMHg2MiwweDAwLDB4MGUsMHgyNCwweDBlLDB4MDAsMHgwMiwweDI0LDB4NjIsMHhmZiwweGVmLAotMHgyYywweDQyLDB4MDAsMHgwMywweDE0LDB4NDAsMHgwMCwweDBhLDB4MjQsMHgwZSwweDAwLDB4MTAsMHgyNCwweDYyLDB4ZmYsMHhmMSwKLTB4MmMsMHg0MiwweDAwLDB4MDIsMHgxNCwweDQwLDB4MDAsMHgwNiwweDI0LDB4MGUsMHgwMCwweDA4LDB4MjQsMHg2MiwweGZmLDB4ZjMsCi0weDJjLDB4NDIsMHgwMCwweDAyLDB4MjQsMHgwZSwweDAwLDB4MDQsMHgyNCwweDAzLDB4MDAsMHgwMiwweDAwLDB4NjIsMHg3MCwweDBhLAotMHgzMCwweGUyLDB4MDAsMHhmZiwweDAwLDB4MDAsMHg0OCwweDIxLDB4MDAsMHgwMCwweDY4LDB4MjEsMHgxMCwweDQwLDB4MDAsMHg2ZCwKLTB4MDAsMHgwMCwweDU4LDB4MjEsMHgzYywweDE0LDB4ODAsMHhmZiwweDI3LDB4OTksMHg5MCwweDAwLDB4MDEsMHhmMiwweGMwLDB4MjMsCi0weDM2LDB4OTQsMHhmZiwweGZmLDB4MDEsMHhjOSwweDEwLDB4MmEsMHgxNCwweDQwLDB4MDAsMHg2NCwweDI0LDB4MDMsMHgwMCwweDA0LAotMHgwMCwweDEwLDB4MjgsMHhjMCwweDAwLDB4YjAsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDU5LDB4MTAsMHgyMSwKLTB4OTQsMHg1NiwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMyLDB4Y2MsMHgwMCwweDAzLDB4MDAsMHg2YywweDEwLDB4MjMsCi0weDMwLDB4NDIsMHgwMCwweDAzLDB4MDIsMHhjMiwweDEwLDB4MjEsMHgyNCwweDQyLDB4MDAsMHgwNCwweDMwLDB4NTEsMHhmZiwweGZmLAotMHgwMiwweDMyLDB4MTgsMHgyYiwweDEwLDB4NjAsMHgwMCwweDRkLDB4MDEsMHhmMSwweDEwLDB4MjMsMHgwMiwweDUxLDB4MTAsMHgyMywKLTB4MDEsMHg3OCwweDE4LDB4MmIsMHgxMCwweDYwLDB4MDAsMHgzNCwweDMwLDB4NDQsMHhmZiwweGZmLDB4MjksMHgyMiwweDAwLDB4NDAsCi0weDEwLDB4NDAsMHgwMCwweDMxLDB4MDEsMHg3MiwweDE4LDB4MjEsMHgyNSwweDIyLDB4MDAsMHgwMSwweDAwLDB4MDIsMHgxNiwweDAwLAotMHgwMCwweDAyLDB4NGUsMHgwMywweDAwLDB4YjAsMHgxMCwweDIxLDB4MDAsMHgwMiwweDMwLDB4ODAsMHgyNywweDgyLDB4OTAsMHgwNCwKLTB4MzAsMHg2YiwweGZmLDB4ZmYsMHgwMCwweGMyLDB4MTgsMHgyMSwweDhjLDB4NjcsMHgwMCwweDE4LDB4MDAsMHgwNCwweDI1LDB4NDAsCi0weDNjLDB4MDMsMHg3ZiwweDAwLDB4OGMsMHhlMiwweDAwLDB4MDQsMHgwMCwweDgzLDB4MjAsMHgyNCwweDI3LDB4ODMsMHg5MCwweDEwLAotMHgwMCwweDU0LDB4MTAsMHgyNCwweDAwLDB4YzMsMHgyOCwweDIxLDB4MDAsMHg0NCwweDEwLDB4MjUsMHhhYywweGUyLDB4MDAsMHgwNCwKLTB4MTYsMHhlMCwweDAwLDB4MDIsMHhhMCwweGI1LDB4MDAsMHgwMCwweGEwLDB4YjUsMHgwMCwweDAzLDB4MjcsMHg4NCwweDkwLDB4MjAsCi0weDAwLDB4YzQsMHgxOCwweDIxLDB4OGMsMHg2MiwweDAwLDB4MDAsMHg4YywweGU4LDB4MDAsMHgwOCwweDAwLDB4MDIsMHgxNSwweGMyLAotMHgwMCwweDA4LDB4NDcsMHhjMiwweDMwLDB4NDIsMHgwMCwweDAxLDB4MDEsMHgwMiwweDEwLDB4MjQsMHgxMCwweDQwLDB4MDAsMHgwYSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweGEyLDB4MDAsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg0MiwweDAwLDB4MDIsCi0weDAwLDB4MDIsMHgxZiwweGMyLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg0MywweDAwLDB4MDIsMHgxMCwweDQwLAotMHgwMCwweGUyLDB4NTAsMHgyMSwweGE1LDB4NWUsMHgwMCwweDAwLDB4OTIsMHg2MiwweDAwLDB4MDQsMHgyNSwweGFkLDB4MDAsMHgwMSwKLTB4MjcsMHg4NCwweDkwLDB4MDAsMHgwMCwweGM0LDB4MTgsMHgyMSwweDAxLDB4YTIsMHgxMCwweDJhLDB4OTQsMHg3MCwweDAwLDB4MDIsCi0weDE0LDB4NDAsMHhmZiwweGI4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NiwweDYzLDB4MDAsMHgxNCwweDAwLDB4MGMsMHgxMCwweDIzLAotMHhhMiwweDY5LDB4MDAsMHgxMiwweDMwLDB4NDIsMHgwMCwweDAzLDB4MDEsMHg2MiwweDEwLDB4MjMsMHgwMCwweDAzLDB4ODAsMHhjMCwKLTB4OGYsMHhhNSwweDAwLDB4NGMsMHgzMCwweDRiLDB4ZmYsMHhmZiwweDAyLDB4MDMsMHg4MCwweDIxLDB4MjcsMHg4MiwweDkwLDB4MDgsCi0weDAwLDB4MTAsMHg4MCwweDgwLDB4YTYsMHg2YiwweDAwLDB4MWEsMHgwMiwweGEwLDB4MjAsMHgyMSwweDAxLDB4NjAsMHgzMCwweDIxLAotMHgwMSwweDYwLDB4ODgsMHgyMSwweDBjLDB4MDAsMHgwOCwweGUzLDB4MDIsMHgwMiwweDgwLDB4MjEsMHgwMCwweDVlLDB4MTAsMHgyMSwKLTB4YTYsMHgwMiwweDAwLDB4MDQsMHgwOCwweDAwLDB4MWYsMHhjMSwweDAyLDB4MjAsMHgxMCwweDIxLDB4MDEsMHg2MiwweDEwLDB4MmIsCi0weDEwLDB4NDAsMHhmZiwweGU5LDB4MDAsMHgwMCwweDIwLDB4MjEsMHgyOSwweDIyLDB4MDAsMHg0MCwweDEwLDB4NDAsMHhmZiwweGU2LAotMHgwMSwweDcxLDB4MTgsMHgyMSwweDA4LDB4MDAsMHgyMCwweDM3LDB4MjUsMHgyMiwweDAwLDB4MDEsMHgwOCwweDAwLDB4MjAsMHg2NiwKLTB4MzIsMHhjYywweDAwLDB4MDMsMHgwOCwweDAwLDB4MjAsMHg2NiwweDAwLDB4MDAsMHg2MCwweDIxLDB4OGYsMHhhNSwweDAwLDB4NGMsCi0weDAxLDB4NDAsMHgzOCwweDIxLDB4YWYsMHhhMCwweDAwLDB4MTAsMHgwYywweDAwLDB4MDksMHgwYSwweGFmLDB4YjQsMHgwMCwweDE0LAotMHg5MiwweDY3LDB4MDAsMHgwNCwweDA4LDB4MDAsMHgxZiwweGQ5LDB4MzAsMHg1ZSwweGZmLDB4ZmYsMHgzMCwweDg0LDB4ZmYsMHhmZiwKLTB4MDAsMHgwNCwweDMwLDB4YzAsMHgwMCwweGM0LDB4MjAsMHgyMSwweDAwLDB4MDQsMHgyMCwweDgwLDB4MjcsMHg4MiwweDkwLDB4MDAsCi0weDNjLDB4MDMsMHhiMCwweDA4LDB4MzAsMHhhNSwweGZmLDB4ZmYsMHgwMCwweDgyLDB4MjAsMHgyMSwweDAwLDB4YzMsMHgzMCwweDIxLAotMHhhYywweGM1LDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4YTQsMHg4NSwweDAwLDB4MDAsMHgzMCwweDg0LDB4ZmYsMHhmZiwKLTB4MDAsMHgwNCwweDMwLDB4YzAsMHgwMCwweGM0LDB4MzAsMHgyMSwweDI3LDB4ODgsMHg5MCwweDAwLDB4MDAsMHgwNiwweDMwLDB4ODAsCi0weDAwLDB4YzgsMHgzMCwweDIxLDB4OTQsMHhjMywweDAwLDB4MDQsMHgzYywweDAyLDB4YjAsMHgwOCwweDNjLDB4MDcsMHhiMCwweDAzLAotMHgwMCwweDAzLDB4MjAsMHhjMCwweDAwLDB4ODMsMHgxOCwweDIxLDB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDgyLDB4MjAsMHgyMSwKLTB4M2MsMHgwMiwweDgwLDB4MDEsMHgzMCwweGE1LDB4ZmYsMHhmZiwweDAwLDB4NjgsMHgxOCwweDIxLDB4MzQsMHhlNywweDAwLDB4MjAsCi0weDI0LDB4NDIsMHg4MiwweDZjLDB4YWMsMHhlMiwweDAwLDB4MDAsMHhhNCwweGM1LDB4MDAsMHgwMiwweGE0LDB4NjUsMHgwMCwweDAwLAotMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4ODUsMHgwMCwweDAwLDB4MzAsMHg4NCwweGZmLDB4ZmYsMHgwMCwweDA0LDB4MTAsMHhjMCwKLTB4MDAsMHg0NCwweDEwLDB4MjEsMHgyNywweDg5LDB4OTAsMHgwMCwweDAwLDB4MDIsMHgxMCwweDgwLDB4MDAsMHg0OSwweDEwLDB4MjEsCi0weDk3LDB4ODMsMHg4ZiwweGYwLDB4OTQsMHg0YSwweDAwLDB4MDQsMHgzYywweDAyLDB4YjAsMHgwOCwweDAwLDB4MDMsMHgzOCwweGMwLAotMHgwMCwweDBhLDB4NDAsMHhjMCwweDAwLDB4ZTMsMHgxOCwweDIxLDB4MDEsMHgwYSwweDI4LDB4MjEsMHgwMCwweGUyLDB4MzgsMHgyMSwKLTB4MDEsMHgwMiwweDQwLDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4MDUsMHgyOCwweDgwLDB4M2MsMHgwNiwweGIwLDB4MDMsCi0weDNjLDB4MDIsMHg4MCwweDAxLDB4MDAsMHhhOSwweDI4LDB4MjEsMHgwMCwweDY5LDB4MTgsMHgyMSwweDM0LDB4YzYsMHgwMCwweDIwLAotMHgzNCwweDA5LDB4ZmYsMHhmZiwweDI0LDB4NDIsMHg4MiwweGM4LDB4YWMsMHhjMiwweDAwLDB4MDAsMHhhNCwweDY0LDB4MDAsMHgwMCwKLTB4YWMsMHhlNCwweDAwLDB4MDAsMHhhNCwweGE5LDB4MDAsMHgwMCwweGFkLDB4MDksMHgwMCwweDAwLDB4YTcsMHg4YSwweDhmLDB4ZjAsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAxLAotMHgzNCwweDYzLDB4MDAsMHgyMCwweDI0LDB4NDIsMHg4MywweDQ4LDB4M2MsMHgwNCwweGIwLDB4MDMsMHhhYywweDYyLDB4MDAsMHgwMCwKLTB4MzQsMHg4NCwweDAxLDB4MTAsMHg4YywweDgyLDB4MDAsMHgwMCwweDk3LDB4ODMsMHg4MSwweDYwLDB4MzAsMHg0MiwweGZmLDB4ZmYsCi0weDEwLDB4NjIsMHgwMCwweDE2LDB4MjQsMHgwYSwweDAwLDB4MDEsMHhhNywweDgyLDB4ODEsMHg2MCwweGFmLDB4ODAsMHhiNCwweDUwLAotMHgwMCwweDQwLDB4MjgsMHgyMSwweDI0LDB4MDYsMHgwMCwweDAxLDB4MjcsMHg4NCwweGI0LDB4NTQsMHgyNSwweDQzLDB4ZmYsMHhmZiwKLTB4MDAsMHg2NiwweDEwLDB4MDQsMHgwMCwweGEyLDB4MTAsMHgyNCwweDE0LDB4NDAsMHgwMCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhjLDB4ODMsMHhmZiwweGZjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY2LDB4MTAsMHgwNCwweDAwLDB4YTIsMHgxMCwweDI0LAotMHgzOCwweDQyLDB4MDAsMHgwMCwweDAxLDB4NDIsMHgxOCwweDBhLDB4MjUsMHg0YSwweDAwLDB4MDEsMHgyZCwweDQyLDB4MDAsMHgxNCwKLTB4YWMsMHg4MywweDAwLDB4MDAsMHgxNCwweDQwLDB4ZmYsMHhmMSwweDI0LDB4ODQsMHgwMCwweDA0LDB4M2MsMHgwYiwweGIwLDB4MDMsCi0weDAwLDB4MDAsMHg1MCwweDIxLDB4M2MsMHgwYywweDgwLDB4MDAsMHgyNywweDg5LDB4YjQsMHhhMCwweDM1LDB4NmIsMHgwMSwweDIwLAotMHg4ZCwweDY4LDB4MDAsMHgwMCwweDhkLDB4MjMsMHgwMCwweDA0LDB4MDEsMHgwYywweDEwLDB4MjQsMHgwMCwweDAyLDB4MTcsMHhjMiwKLTB4MTEsMHgwMywweDAwLDB4MzcsMHhhMSwweDIyLDB4MDAsMHhkYywweGExLDB4MjAsMHgwMCwweGQ1LDB4YTEsMHgyMCwweDAwLDB4ZDYsCi0weDAxLDB4MjAsMHgzMCwweDIxLDB4MDAsMHgwMCwweDM4LDB4MjEsMHgwMCwweDAwLDB4MjgsMHgyMSwweDAxLDB4MjAsMHgyMCwweDIxLAotMHgwMCwweGE4LDB4MTAsMHgwNiwweDMwLDB4NDIsMHgwMCwweDAxLDB4MTAsMHhlMCwweDAwLDB4MTAsMHhhMCwweDgyLDB4MDAsMHgwYSwKLTB4OTAsMHg4MiwweDAwLDB4MDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDMxLDB4MjQsMHhhMiwweGZmLDB4ZmYsCi0weGEwLDB4ODIsMHgwMCwweDA4LDB4OTAsMHg4MiwweDAwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDA5LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4ODMsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MTAsMHg0MCwKLTB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDQ2LDB4MTAsMHgyMSwweGEwLDB4NDUsMHgwMCwweDA5LDB4OTAsMHg4MiwweDAwLDB4MGEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4ZTAsMHgwMCwweDA0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4YzUsMHgwMCwweGQ1LDB4MjQsMHgwNywweDAwLDB4MDEsMHhhMCwweDg1LDB4MDAsMHgwOCwKLTB4YTAsMHhjNSwweDAwLDB4ZDYsMHgyNCwweGE1LDB4MDAsMHgwMSwweDJjLDB4YTIsMHgwMCwweDFjLDB4MTQsMHg0MCwweGZmLDB4ZTAsCi0weDI0LDB4ODQsMHgwMCwweDAzLDB4OTAsMHhjNCwweDAwLDB4ZDUsMHgwMCwweDAwLDB4MjgsMHgyMSwweDAwLDB4YTQsMHgxMCwweDJiLAotMHgxMCwweDQwLDB4MDAsMHgwYiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE4LDB4MjEsMHhhMCwweDY0LDB4MDAsMHgwOCwKLTB4OTAsMHhjMiwweDAwLDB4ZDUsMHgyNCwweGE1LDB4MDAsMHgwMSwweGEwLDB4NjIsMHgwMCwweDA5LDB4OTAsMHhjNCwweDAwLDB4ZDUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhNCwweDEwLDB4MmIsMHgxNCwweDQwLDB4ZmYsMHhmOCwweDI0LDB4NjMsMHgwMCwweDAzLAotMHgyNSwweDRhLDB4MDAsMHgwMSwweDJkLDB4NDIsMHgwMCwweDA4LDB4YWQsMHgyOCwweDAwLDB4MDQsMHgyNSwweDZiLDB4MDAsMHgwNCwKLTB4MTQsMHg0MCwweGZmLDB4YmYsMHgyNSwweDI5LDB4MDAsMHhlYywweDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDkwLDB4ODIsMHgwMCwweDA1LDB4MDgsMHgwMCwweDIxLDB4MGQsMHhhMCwweDgyLDB4MDAsMHgwOCwweDk3LDB4ODUsMHg4YiwweDdhLAotMHgzYywweDAzLDB4YjAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAxLDB4MjcsMHhiZCwweGZmLDB4ZTgsMHgzNCwweDYzLDB4MDAsMHgyMCwKLTB4MjQsMHg0MiwweDg0LDB4ZmMsMHhhZiwweGIwLDB4MDAsMHgxMCwweGFmLDB4YmYsMHgwMCwweDE0LDB4YWMsMHg2MiwweDAwLDB4MDAsCi0weDMwLDB4OTAsMHgwMCwweGZmLDB4MDAsMHgwNSwweDI4LDB4NDIsMHgwMCwweDAwLDB4NDgsMHgyMSwweDI3LDB4OGYsMHhiNCwweGE0LAotMHgwMCwweDAwLDB4NTAsMHgyMSwweDAwLDB4MDAsMHg1OCwweDIxLDB4MjcsMHg5OCwweGI1LDB4ODQsMHgyNywweDk5LDB4YjUsMHg4MCwKLTB4MjcsMHg4ZSwweGI1LDB4N2UsMHgyNywweDhjLDB4YjQsMHhhOCwweDI3LDB4OGQsMHhiNSwweDAwLDB4MjcsMHg4OCwweGI1LDB4NzgsCi0weDAwLDB4MGEsMHgxOCwweDgwLDB4MDEsMHg2ZiwweDEwLDB4MjEsMHhhYywweDQwLDB4MDAsMHgwMCwweGFjLDB4NDUsMHgwMCwweDU4LAotMHgwMCwweDZlLDB4MjAsMHgyMSwweDAwLDB4NzgsMHgxMCwweDIxLDB4YTEsMHgwMCwweGZmLDB4ZmMsMHhhZCwweDAwLDB4MDAsMHgwMCwKLTB4YTEsMHgwMCwweDAwLDB4MDQsMHhhMSwweDAwLDB4MDAsMHgwNSwweGFkLDB4MDAsMHhmZiwweGY4LDB4MDAsMHg3OSwweDE4LDB4MjEsCi0weDI0LDB4MDYsMHgwMCwweDAxLDB4MjQsMHhjNiwweGZmLDB4ZmYsMHhhMCwweDgwLDB4MDAsMHgwMCwweGE0LDB4NjAsMHgwMCwweDAwLAotMHhhYywweDQwLDB4MDAsMHgwMCwweDI0LDB4NjMsMHgwMCwweDAyLDB4MjQsMHg0MiwweDAwLDB4MDQsMHgwNCwweGMxLDB4ZmYsMHhmOSwKLTB4MjQsMHg4NCwweDAwLDB4MDEsMHgwMCwweDBhLDB4MTAsMHg4MCwweDAwLDB4NGQsMHgyMCwweDIxLDB4MDAsMHgwMCwweDMwLDB4MjEsCi0weDAwLDB4NGMsMHgxOCwweDIxLDB4MjcsMHg4NywweDgxLDB4NjQsMHg4YywweGUyLDB4MDAsMHgwMCwweDI0LDB4ZTcsMHgwMCwweDA0LAotMHhhYywweDgyLDB4MDAsMHgwMCwweGEwLDB4NjYsMHgwMCwweDAwLDB4YTAsMHg2NiwweDAwLDB4MDEsMHgyNCwweGM2LDB4MDAsMHgwMSwKLTB4MjgsMHhjMiwweDAwLDB4MWMsMHhhMCwweDYwLDB4MDAsMHgwMiwweDI0LDB4ODQsMHgwMCwweDA0LDB4MTQsMHg0MCwweGZmLDB4ZjYsCi0weDI0LDB4NjMsMHgwMCwweDAzLDB4MjUsMHgyOSwweDAwLDB4MDEsMHgyOSwweDIyLDB4MDAsMHgwOCwweDI1LDB4NGEsMHgwMCwweDNiLAotMHgyNSwweDA4LDB4MDAsMHhlYywweDE0LDB4NDAsMHhmZiwweGQ2LDB4MjUsMHg2YiwweDAwLDB4ZWMsMHhhNywweDgwLDB4ODEsMHg2MCwKLTB4MDAsMHgwMCwweDQ4LDB4MjEsMHgyNywweDgzLDB4YjQsMHg1MCwweGFjLDB4NjksMHgwMCwweDAwLDB4MjUsMHgyOSwweDAwLDB4MDEsCi0weDI5LDB4MjIsMHgwMCwweDBjLDB4MTQsMHg0MCwweGZmLDB4ZmMsMHgyNCwweDYzLDB4MDAsMHgwNCwweDBjLDB4MDAsMHgyMCwweGQyLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJlLDB4MDQsMHgwMCwweDE0LDB4MjcsMHg4MywweGI0LDB4YTAsMHgyNCwweDA5LDB4MDAsMHgwNywKLTB4MTAsMHg4MCwweDAwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4NjIsMHgwMCwweGQ1LDB4MjUsMHgyOSwweGZmLDB4ZmYsCi0weGEwLDB4NjIsMHgwMCwweDAwLDB4MDUsMHgyMSwweGZmLDB4ZmEsMHgyNCwweDYzLDB4MDAsMHhlYywweDhmLDB4YmYsMHgwMCwweDE0LAotMHg4ZiwweGIwLDB4MDAsMHgxMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsMHg5MCwweDYyLDB4MDAsMHhkNiwKLTB4MDgsMHgwMCwweDIxLDB4OTAsMHgyNSwweDI5LDB4ZmYsMHhmZiwweDMwLDB4ODQsMHgwMCwweGZmLDB4MDAsMHgwNCwweDExLDB4MDAsCi0weDAwLDB4NDQsMHgxMCwweDIzLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ0LDB4MTAsMHgyMywweDAwLDB4MDIsMHgxMCwweDgwLAotMHgyNywweDgzLDB4YjQsMHhhMCwweDAwLDB4NDMsMHg2MCwweDIxLDB4M2MsMHgwNCwweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMSwKLTB4MzQsMHg4NCwweDAwLDB4MjAsMHgyNCwweDQyLDB4ODYsMHg2OCwweDMwLDB4YzYsMHgwMCwweGZmLDB4OTMsMHhhYSwweDAwLDB4MTMsCi0weDMwLDB4YTUsMHgwMCwweGZmLDB4MzAsMHhlNywweDAwLDB4ZmYsMHhhYywweDgyLDB4MDAsMHgwMCwweDEwLDB4YzAsMHgwMCwweGU4LAotMHgyNSwweDhmLDB4MDAsMHhkMCwweDkxLDB4ODIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDQyLDB4ZmYsMHhmYywKLTB4MmMsMHg0MywweDAwLDB4MTgsMHgxMCwweDYwLDB4MDAsMHhjNywweDNjLDB4MDMsMHg4MCwweDAxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDI0LDB4NjMsMHgwMiwweDkwLDB4MDAsMHg0MywweDEwLDB4MjEsMHg4YywweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDgwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmQsMHg0MiwweDAwLDB4MzAsMHgxNCwweDQwLDB4MDAsMHgxYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGEwLDB4MDAsMHgxNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDEwLDB4YTIsMHgwMCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhhMiwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDIsMHhmZiwweGUwLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weGFkLDB4ODIsMHgwMCwweGQwLDB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwOCwweDAwLDB4MjEsMHhjYiwweDI0LDB4NDIsMHhmZiwweGU4LAotMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwOCwweDAwLDB4MjEsMHhjYiwKLTB4MjQsMHg0MiwweDAwLDB4MDEsMHg4ZCwweDgyLDB4MDAsMHhkMCwweDA4LDB4MDAsMHgyMSwweGNiLDB4MjQsMHg0MiwweDAwLDB4MDIsCi0weDEwLDB4YTAsMHhmZiwweGY5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHgwMCwweDBhLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweGZmLDB4ZTksMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgwMiwweDAwLDB4MDMsMHgxMCwweGEyLDB4ZmYsMHhlNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGQsMHg4MiwweDAwLDB4ZDAsCi0weDA4LDB4MDAsMHgyMSwweGNiLDB4MjQsMHg0MiwweGZmLDB4ZDAsMHg4ZCwweDgyLDB4MDAsMHhkMCwweDA4LDB4MDAsMHgyMSwweGNiLAotMHgyNCwweDQyLDB4ZmYsMHhmYywweDEwLDB4YTAsMHhmZiwweGViLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MTAsMHhhMiwweGZmLDB4ZTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweGZmLDB4ZTAsCi0weDI0LDB4MDIsMHgwMCwweDAzLDB4MTQsMHhhMiwweGZmLDB4ZGIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhkLDB4ODIsMHgwMCwweGQwLAotMHgwOCwweDAwLDB4MjEsMHhjYiwweDI0LDB4NDIsMHhmZiwweGY4LDB4MmQsMHg0MiwweDAwLDB4MTksMHgxNCwweDQwLDB4ZmYsMHhjNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGEwLDB4ZmYsMHhkYiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDEwLDB4YTIsMHhmZiwweGQ1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHhmZiwweGQwLAotMHgyNCwweDAyLDB4MDAsMHgwMywweDEwLDB4YTIsMHhmZiwweGYxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZCwweDgyLDB4MDAsMHhkMCwKLTB4MDgsMHgwMCwweDIxLDB4Y2IsMHgyNCwweDQyLDB4ZmYsMHhmMCwweDJkLDB4NDIsMHgwMCwweDFiLDB4MTAsMHg0MCwweGZmLDB4ZjEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhhMCwweGZmLDB4Y2IsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLAotMHgxMCwweGEyLDB4ZmYsMHhjNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxNCwweGEyLDB4ZmYsMHhiNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZCwweDgyLDB4MDAsMHhkMCwweDA4LDB4MDAsMHgyMSwweGNiLDB4MjQsMHg0MiwweGZmLDB4ZjQsCi0weDJkLDB4NDIsMHgwMCwweDFlLDB4MTAsMHg0MCwweGZmLDB4ZTMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHhmZiwweGJkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweGZmLDB4YjUsMHgyNCwweDAyLDB4MDAsMHgwMiwKLTB4MTAsMHhhMiwweGZmLDB4ZDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMSwweGM2LDB4MjQsMHgwMiwweDAwLDB4MDMsCi0weDJkLDB4NDIsMHgwMCwweDIzLDB4MTAsMHg0MCwweGZmLDB4ZDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHhmZiwweGFlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweGZmLDB4YTksMHgyNCwweDAyLDB4MDAsMHgwMiwKLTB4MTQsMHhhMiwweGZmLDB4YjcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMiwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJkLDB4NDIsMHgwMCwweDI1LDB4MTAsMHg0MCwweGZmLDB4Y2IsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMSwweGQ4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJkLDB4NDIsMHgwMCwweDE2LDB4MTQsMHg0MCwweDAwLDB4MGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHhhMCwweGZmLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweGZmLDB4OWEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweGEyLDB4ZmYsMHg5NSwweDI0LDB4MDIsMHgwMCwweDAzLAotMHgxNCwweGEyLDB4ZmYsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwOCwweDAwLDB4MjEsMHhjYiwKLTB4MjQsMHg0MiwweGZmLDB4ZmEsMHgxMCwweGEwLDB4ZmYsMHg5MywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDEwLDB4YTIsMHhmZiwweDhkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHhmZiwweDg4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMSwweGYzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgxNywKLTB4MTQsMHg0MCwweGZmLDB4YWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMiwweDM0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJkLDB4NDIsMHgwMCwweDE5LDB4MTAsMHg0MCwweGZmLDB4ZTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHhmZiwweDgxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweGZmLDB4N2IsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweGEyLDB4ZmYsMHg3NiwweDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhhMiwweGZmLDB4OTcsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDIxLDB4YzgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMiwweDUxLAotMHgyZCwweDQyLDB4MDAsMHgxYiwweDJkLDB4NDIsMHgwMCwweDFlLDB4MTAsMHg0MCwweGZmLDB4ZGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHhhMCwweGZmLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweGZmLDB4NmEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweGEyLDB4ZmYsMHg2NSwweDI0LDB4MDIsMHgwMCwweDAzLAotMHgxMCwweGEyLDB4ZmYsMHg5NiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDIxLDB4YzgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmQsMHg0MiwweDAwLDB4MjMsMHgxNCwweDQwLDB4ZmYsMHhmMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDIxLDB4ZjksCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDIxLDB4ZjcsMHgyZCwweDQyLDB4MDAsMHgyNSwweDA4LDB4MDAsMHgyMiwweDJkLAotMHgyZCwweDQyLDB4MDAsMHgyNywweDEwLDB4YTAsMHhmZiwweDViLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MTAsMHhhMiwweGZmLDB4NTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweGZmLDB4NTAsCi0weDI0LDB4MDIsMHgwMCwweDAzLDB4MTQsMHhhMiwweGZmLDB4NzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMSwweGU2LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJkLDB4NDIsMHgwMCwweDI3LDB4MTQsMHg0MCwweGZmLDB4YWQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDIyLDB4NzksMHgwMCwweDAwLDB4MDAsMHgwMCwweDJkLDB4NDIsMHgwMCwweDJhLDB4MTQsMHg0MCwweGZmLDB4ZDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDIxLDB4ZTksMHgwMCwweDAwLDB4MDAsMHgwMCwweDJkLDB4NDIsMHgwMCwweDJjLAotMHgxNCwweDQwLDB4ZmYsMHg3OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDIxLDB4YmQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTEsMHg4NiwweDAwLDB4MDAsMHg5MSwweDgzLDB4MDAsMHhkNCwweDI1LDB4OGQsMHgwMCwweDVjLDB4MzAsMHhjNCwweDAwLDB4ZmYsCi0weDAwLDB4MDQsMHgxMCwweDQwLDB4MDAsMHg0NCwweDEwLDB4MjEsMHgwMCwweDA0LDB4NDgsMHg4MCwweDAxLDB4ODIsMHg1OCwweDIxLAotMHgwMSwweDg5LDB4NDAsMHgyMSwweDI1LDB4NzgsMHgwMCwweDA4LDB4MTAsMHg2MCwweDAwLDB4MzcsMHgyNSwweDBlLDB4MDAsMHg2MCwKLTB4MmMsMHhhMiwweDAwLDB4MDMsMHgxNCwweDQwLDB4MDAsMHgyNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTEsMHg4MiwweDAwLDB4ZGQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweDAwLDB4MWUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI3LDB4ODcsMHg4MSwweDY0LAotMHgwMSwweDI3LDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhZCwweDAzLDB4MDAsMHg2MCwKLTB4OTEsMHg2MiwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgzMCwweDIxLDB4YTEsMHg4MiwweDAwLDB4MDAsCi0weDMwLDB4YzIsMHgwMCwweGZmLDB4MDAsMHgwMiwweDEwLDB4ODAsMHgwMCwweDQ3LDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgxOCwweDQyLDB4YWQsMHhhMywweDAwLDB4MDAsMHg5MSwweDg0LDB4MDAsMHgwMCwKLTB4OGQsMHhjNSwweDAwLDB4MDAsMHgwMCwweDA0LDB4MjAsMHg4MCwweDAwLDB4ODcsMHgxMCwweDIxLDB4OGMsMHg0MywweDAwLDB4MDAsCi0weDAwLDB4MDUsMHgyOCwweDQwLDB4MDAsMHg4YywweDIwLDB4MjEsMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4YTMsMHgxMCwweDJiLAotMHgwMCwweDYyLDB4MjgsMHgwYSwweGFjLDB4ODUsMHgwMCwweDYwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHhhMSwweDgwLDB4MDAsMHhkNCwKLTB4MjcsMHg4NywweDgxLDB4NjQsMHgwOCwweDAwLDB4MjIsMHhiMCwweGExLDB4ODAsMHgwMCwweGRkLDB4MjcsMHg4MiwweDgxLDB4ZDQsCi0weDhkLDB4ODMsMHgwMCwweGQ4LDB4MDAsMHg4MiwweDEwLDB4MjEsMHg5MCwweDQ0LDB4MDAsMHgwMCwweDI0LDB4NjMsMHgwMCwweDAxLAotMHgwMCwweDY0LDB4MjAsMHgyYiwweDE0LDB4ODAsMHhmZiwweDAyLDB4YWQsMHg4MywweDAwLDB4ZDgsMHg4ZCwweDAyLDB4MDAsMHg2MCwKLTB4YTEsMHg4MCwweDAwLDB4ZDQsMHgwMCwweDAyLDB4MWYsMHhjMiwweDAwLDB4NDMsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4NDMsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4YWQsMHg4MiwweDAwLDB4NWMsMHgxMCwweGUwLDB4MDAsMHgxZCwweDI0LDB4ODMsMHhmZiwweGZjLAotMHgyYywweDYyLDB4MDAsMHgxOCwweDEwLDB4NDAsMHgwMSwweDEwLDB4MDAsMHgwMywweDEwLDB4ODAsMHgzYywweDAzLDB4ODAsMHgwMSwKLTB4MjQsMHg2MywweDAyLDB4ZjAsMHgwMCwweDQzLDB4MTAsMHgyMSwweDhjLDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4ODAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgzMCwweDE0LDB4NDAsMHgwMCwweDY1LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MTAsMHhhMiwweDAwLDB4NWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgxMCwweGEyLDB4MDAsMHg1MSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4ZCwweDgyLDB4MDAsMHhkMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg0MiwweGZmLDB4ZTAsMHhhZCwweDgyLDB4MDAsMHhkMCwKLTB4OGQsMHhlMywweDAwLDB4MDAsMHg4ZCwweGEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MywweDEwLDB4MjEsCi0weGFkLDB4YTIsMHgwMCwweDAwLDB4YWQsMHhlMCwweDAwLDB4MDAsMHg4ZCwweGEzLDB4MDAsMHgwMCwweDhkLDB4YzQsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODMsMHgxMCwweDJhLDB4MTAsMHg0MCwweDAwLDB4MjIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTMsMHgwNSwweDAwLDB4MDEsMHg5MSwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0NSwweDAwLDB4MDUsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4YTEsMHg4NSwweDAwLDB4MDAsMHhhMSwweDgyLDB4MDAsMHhkNCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHhhZCwweDgwLDB4MDAsMHhkOCwweDkxLDB4ODIsMHgwMCwweGRkLDB4MjQsMHgwMywweDAwLDB4MDEsMHgxMCwweDQzLDB4MDAsMHgwNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMSwweDgzLDB4MDAsMHhkNCwweGFkLDB4ODAsMHgwMCwweGQ4LDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weGExLDB4ODMsMHgwMCwweGRkLDB4MDAsMHgwNCwweDE3LDB4YzIsMHgwMCwweDgyLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDQzLAotMHhhZCwweGEyLDB4MDAsMHgwMCwweDkxLDB4ODMsMHgwMCwweDAwLDB4MjcsMHg4MiwweDgxLDB4NjQsMHg4ZCwweGM1LDB4MDAsMHgwMCwKLTB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDYyLDB4MTgsMHgyMSwweDhjLDB4NjQsMHgwMCwweDAwLDB4MDAsMHgwNSwweDI4LDB4NDAsCi0weDAwLDB4MDQsMHgxOCwweDgwLDB4MDAsMHhhMywweDEwLDB4MmIsMHgwMCwweDYyLDB4MjgsMHgwYSwweDA4LDB4MDAsMHgyMiwweGMyLAotMHhhZCwweGM1LDB4MDAsMHgwMCwweDk3LDB4ODIsMHg4YiwweDdjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4MTAsMHgyYSwKLTB4MTAsMHg0MCwweGZlLDB4YWIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkxLDB4ODIsMHgwMCwweGRkLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE0LDB4NDAsMHgwMCwweDE1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MSwweDgzLDB4MDAsMHgwMCwweDI3LDB4ODIsMHg4MSwweDY0LAotMHgwMCwweDAzLDB4MTgsMHg4MCwweDAwLDB4NjIsMHgxMCwweDIxLDB4OGMsMHg0NCwweDAwLDB4MDAsMHgwMCwweDZjLDB4MTgsMHgyMSwKLTB4YWMsMHg2NCwweDAwLDB4NjAsMHg5MywweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDEwLDB4ODAsCi0weDAxLDB4ODIsMHgxMCwweDIxLDB4MjQsMHg0ZSwweDAwLDB4NjAsMHhhMSwweDg1LDB4MDAsMHgwMCwweDhkLDB4YzIsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxZiwweGMyLDB4MDAsMHg0MywweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHg0MywKLTB4MDMsMHhlMCwweDAwLDB4MDgsMHhhZCwweGEyLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMywweDM3LDB4YTEsMHg4MCwweDAwLDB4ZGQsCi0weDhkLDB4ODIsMHgwMCwweGQwLDB4MDgsMHgwMCwweDIyLDB4ZjMsMHgyNCwweDQyLDB4ZmYsMHhlOCwweDhkLDB4ODIsMHgwMCwweGQwLAotMHgwOCwweDAwLDB4MjIsMHhmMywweDI0LDB4NDIsMHgwMCwweDAxLDB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwOCwweDAwLDB4MjIsMHhmMywKLTB4MjQsMHg0MiwweDAwLDB4MDIsMHgxMCwweGEwLDB4ZmYsMHhmOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weDEwLDB4YTIsMHgwMCwweDBhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHhmZiwweGEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhhMiwweGZmLDB4OWQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwOCwweDAwLDB4MjIsMHhmMywweDI0LDB4NDIsMHhmZiwweGQwLDB4OGQsMHg4MiwweDAwLDB4ZDAsCi0weDA4LDB4MDAsMHgyMiwweGYzLDB4MjQsMHg0MiwweGZmLDB4ZmMsMHgxMCwweGEwLDB4ZmYsMHhlYiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHhmZiwweGU1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMiwKLTB4MTAsMHhhMiwweGZmLDB4OTMsMHgyNCwweDAyLDB4MDAsMHgwMywweDE0LDB4YTIsMHhmZiwweGRkLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhkLDB4ODIsMHgwMCwweGQwLDB4MDgsMHgwMCwweDIyLDB4ZjMsMHgyNCwweDQyLDB4ZmYsMHhmOCwweDJkLDB4NDIsMHgwMCwweDE5LAotMHgxNCwweDQwLDB4ZmYsMHg3YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhhMCwweGZmLDB4ZGIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMCwweGEyLDB4ZmYsMHhkNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsCi0weDEwLDB4YTIsMHhmZiwweDgzLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgxMCwweGEyLDB4ZmYsMHhmMSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4ZCwweDgyLDB4MDAsMHhkMCwweDA4LDB4MDAsMHgyMiwweGYzLDB4MjQsMHg0MiwweGZmLDB4ZjAsMHgyZCwweDQyLDB4MDAsMHgxYiwKLTB4MTAsMHg0MCwweGZmLDB4ZjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHhmZiwweGNiLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweGZmLDB4YzUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLAotMHgxNCwweGEyLDB4ZmYsMHg2YywweDAwLDB4MDAsMHgwMCwweDAwLDB4OGQsMHg4MiwweDAwLDB4ZDAsMHgwOCwweDAwLDB4MjIsMHhmMywKLTB4MjQsMHg0MiwweGZmLDB4ZjQsMHgyZCwweDQyLDB4MDAsMHgxZSwweDEwLDB4NDAsMHhmZiwweGUzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4YTAsMHhmZiwweGJkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHhmZiwweDY4LAotMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHhmZiwweGQ2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjIsMHhlZSwKLTB4MjQsMHgwMiwweDAwLDB4MDMsMHgyZCwweDQyLDB4MDAsMHgyMywweDEwLDB4NDAsMHhmZiwweGQ3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4YTAsMHhmZiwweGFlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHhmZiwweDVjLAotMHgyNCwweDAyLDB4MDAsMHgwMiwweDE0LDB4YTIsMHhmZiwweGI3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjMsMHg3NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgyNSwweDEwLDB4NDAsMHhmZiwweGNiLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgyMywweDQ5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgxNiwweDE0LDB4NDAsMHgwMCwweDBlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHhmZiwweGEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MTAsMHhhMiwweGZmLDB4OWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweGZmLDB4NDgsCi0weDI0LDB4MDIsMHgwMCwweDAzLDB4MTQsMHhhMiwweGZmLDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhkLDB4ODIsMHgwMCwweGQwLAotMHgwOCwweDAwLDB4MjIsMHhmMywweDI0LDB4NDIsMHhmZiwweGZhLDB4MTAsMHhhMCwweGZmLDB4OTMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMCwweGEyLDB4ZmYsMHg4ZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsCi0weDEwLDB4YTIsMHhmZiwweDNiLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjMsMHg2NCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyZCwweDQyLDB4MDAsMHgxNywweDE0LDB4NDAsMHhmZiwweGFjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjMsMHhhNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgxOSwweDEwLDB4NDAsMHhmZiwweGUyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4YTAsMHhmZiwweDgxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHhmZiwweDdiLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweGZmLDB4MjksMHgyNCwweDAyLDB4MDAsMHgwMywKLTB4MTAsMHhhMiwweGZmLDB4OTcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMiwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgyMywweGMyLDB4MmQsMHg0MiwweDAwLDB4MWIsMHgyZCwweDQyLDB4MDAsMHgxZSwweDEwLDB4NDAsMHhmZiwweGRlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHhmZiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwKLTB4MTAsMHhhMiwweGZmLDB4NmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MTAsMHhhMiwweGZmLDB4MTgsCi0weDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhhMiwweGZmLDB4OTYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMiwweGYwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJkLDB4NDIsMHgwMCwweDIzLDB4MTQsMHg0MCwweGZmLDB4ZjIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDIzLDB4NmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMywweDY4LDB4MmQsMHg0MiwweDAwLDB4MjUsCi0weDA4LDB4MDAsMHgyMywweDllLDB4MmQsMHg0MiwweDAwLDB4MjcsMHgxMCwweGEwLDB4ZmYsMHg1YiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHhmZiwweDU1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMiwKLTB4MTAsMHhhMiwweGZmLDB4MDMsMHgyNCwweDAyLDB4MDAsMHgwMywweDE0LDB4YTIsMHhmZiwweDcxLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgyMywweDU3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgyNywweDE0LDB4NDAsMHhmZiwweGFkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDQyLDB4MDAsMHgyYSwKLTB4MTQsMHg0MCwweGZmLDB4ZDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMywweDVhLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJkLDB4NDIsMHgwMCwweDJjLDB4MTQsMHg0MCwweGZmLDB4NzgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyMiwweGU1LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI3LDB4YmQsMHhmZiwweGU4LDB4M2MsMHgwMiwweGIwLDB4MDMsMHhhZiwweGJmLDB4MDAsMHgxNCwKLTB4YWYsMHhiMCwweDAwLDB4MTAsMHgzNCwweDQyLDB4MDEsMHgxOCwweDNjLDB4MDMsMHhiMCwweDAzLDB4OGMsMHg1MCwweDAwLDB4MDAsCi0weDM0LDB4NjMsMHgwMSwweDJjLDB4OTAsMHg2MiwweDAwLDB4MDAsMHgzMiwweDA1LDB4MDAsMHgwMSwweGEzLDB4ODIsMHg4MCwweDEwLAotMHgxNCwweGEwLDB4MDAsMHgxNCwweDMwLDB4NDQsMHgwMCwweGZmLDB4MzIsMHgwMiwweDAxLDB4MDAsMHgxNCwweDQwLDB4MDAsMHgwOSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMiwweDAyLDB4MDgsMHgwMCwweDEwLDB4NDAsMHgwMCwweDAyLDB4MjQsMHgwMiwweDAwLDB4MDEsCi0weGEzLDB4ODIsMHhiYywweDE4LDB4OGYsMHhiZiwweDAwLDB4MTQsMHg4ZiwweGIwLDB4MDAsMHgxMCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgyNywweGJkLDB4MDAsMHgxOCwweDBjLDB4MDAsMHgwNSwweDM3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNiwweDAyLDB4ZmYsMHgwMCwKLTB4YTMsMHg4MCwweGJjLDB4MTgsMHgzYywweDAxLDB4YjAsMHgwMywweGFjLDB4MjIsMHgwMSwweDE4LDB4MDgsMHgwMCwweDI0LDB4MTYsCi0weDMyLDB4MDIsMHgwOCwweDAwLDB4MGMsMHgwMCwweDIxLDB4M2YsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI2LDB4MDIsMHhmZiwweGZmLAotMHgzYywweDAxLDB4YjAsMHgwMywweGFjLDB4MjIsMHgwMSwweDE4LDB4MDgsMHgwMCwweDI0LDB4MTMsMHgzMiwweDAyLDB4MDEsMHgwMCwKLTB4MjcsMHhiZCwweGZmLDB4ZTAsMHgzYywweDAyLDB4YjAsMHgwMywweDM0LDB4NDIsMHgwMCwweGQwLDB4YWYsMHhiZiwweDAwLDB4MTgsCi0weDhjLDB4NDMsMHgwMCwweDAwLDB4M2MsMHgwMiwweDAwLDB4NDAsMHgyNCwweDA3LDB4MGYsMHhmZiwweDAwLDB4MDMsMHgzMywweDAyLAotMHgwMCwweDAzLDB4MmQsMHgwMiwweDAwLDB4MDMsMHg0MywweDAyLDB4MzAsMHg2OSwweDBmLDB4ZmYsMHgwMCwweDYyLDB4MTgsMHgyNCwKLTB4MzAsMHhhNSwweDAwLDB4MDMsMHgzMCwweGM2LDB4MDAsMHhmZiwweDEwLDB4NjAsMHgwMCwweDA4LDB4MzEsMHgwOCwweDAwLDB4ZmYsCi0weDAxLDB4MDAsMHgzMCwweDIxLDB4MGMsMHgwMCwweDI0LDB4ZGYsMHhhZiwweGE5LDB4MDAsMHgxMCwweDhmLDB4YmYsMHgwMCwweDE4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjAsMHgwYywweDAwLDB4MjUsMHgzMSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAzLDB4YjAsMHgwMywweDM0LDB4NjMsMHgwMCwweGQ0LDB4MDgsMHgwMCwweDI0LDB4M2YsCi0weGFjLDB4NjIsMHgwMCwweDAwLDB4MjcsMHhiZCwweGZmLDB4YzAsMHgzYywweDAyLDB4YjAsMHgwMywweGFmLDB4YmUsMHgwMCwweDM4LAotMHhhZiwweGI1LDB4MDAsMHgyYywweGFmLDB4YjEsMHgwMCwweDFjLDB4YWYsMHhiMCwweDAwLDB4MTgsMHhhZiwweGJmLDB4MDAsMHgzYywKLTB4YWYsMHhiNywweDAwLDB4MzQsMHhhZiwweGI2LDB4MDAsMHgzMCwweGFmLDB4YjQsMHgwMCwweDI4LDB4YWYsMHhiMywweDAwLDB4MjQsCi0weGFmLDB4YjIsMHgwMCwweDIwLDB4MzQsMHg0MiwweDAwLDB4M2YsMHg5MCwweDQzLDB4MDAsMHgwMCwweDAwLDB4ODAsMHg4MCwweDIxLAotMHgwMCwweDAwLDB4ZjAsMHgyMSwweDAwLDB4MDAsMHg4OCwweDIxLDB4MTAsMHg2MCwweDAwLDB4NzYsMHgwMCwweDAwLDB4YTgsMHgyMSwKLTB4M2MsMHgwMSwweGIwLDB4MDMsMHhhMCwweDIwLDB4MDAsMHgzZiwweDAwLDB4MTAsMHgxMiwweDAyLDB4MjQsMHgwNCwweDA2LDB4MTQsCi0weDBjLDB4MDAsMHgwNiwweGQxLDB4MzAsMHg1NCwweDAwLDB4MGYsMHgyNCwweDA0LDB4MDYsMHgxNCwweDBjLDB4MDAsMHgwNiwweGQxLAotMHhhZiwweGEyLDB4MDAsMHgxMCwweDNjLDB4MDMsMHgwMCwweGZmLDB4MzQsMHg2MywweGZmLDB4ZmYsMHgzMiwweDEwLDB4MDAsMHg3ZiwKLTB4MDAsMHg0MywweDEwLDB4MjQsMHgwMCwweDEwLDB4ODYsMHgwMCwweDAyLDB4MDIsMHg4MCwweDI1LDB4MDIsMHgwMCwweDI4LDB4MjEsCi0weDI0LDB4MDQsMHgwNiwweDE0LDB4M2MsMHgxMywweGJmLDB4ZmYsMHgwYywweDAwLDB4MDYsMHhiZiwweDNjLDB4MTYsMHhiMCwweDAzLAotMHgwMCwweDAwLDB4OTAsMHgyMSwweDNjLDB4MTcsMHg0MCwweDAwLDB4MzYsMHg3MywweGZmLDB4ZmYsMHgzNiwweGQ2LDB4MDAsMHgzZSwKLTB4MGMsMHgwMCwweDA2LDB4ZDEsMHgyNCwweDA0LDB4MDQsMHgwMCwweDAwLDB4NTcsMHgxMCwweDI1LDB4MDAsMHg0MCwweDI4LDB4MjEsCi0weDBjLDB4MDAsMHgwNiwweGJmLDB4MjQsMHgwNCwweDA0LDB4MDAsMHgwMCwweDAwLDB4ODAsMHgyMSwweDBjLDB4MDAsMHgyNSwweGY5LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI2LDB4MDMsMHgwMCwweDAxLDB4MTAsMHg0MCwweDAwLDB4NDYsMHgzMCwweDcwLDB4MDAsMHhmZiwKLTB4MTIsMHgwMCwweGZmLDB4ZmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwNiwweGQxLDB4MjQsMHgwNCwweDA0LDB4MDAsCi0weDAwLDB4NTMsMHgxMCwweDI0LDB4MDAsMHg0MCwweDI4LDB4MjEsMHgwYywweDAwLDB4MDYsMHhiZiwweDI0LDB4MDQsMHgwNCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDEyLDB4ODIsMHgwMCwweDM3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDgwLDB4MDAsMHgzNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMiwweDMxLDB4MDAsMHg3ZiwweDEyLDB4MjAsMHgwMCwweDA0LDB4MjQsMHgwMywweDAwLDB4MDQsCi0weDI3LDB4YzIsMHgwMCwweDAxLDB4MzAsMHg1ZSwweDAwLDB4ZmYsMHgwMiwweGIxLDB4YTgsMHgyMSwweDEyLDB4NDMsMHgwMCwweDJhLAotMHgzYywweDAzLDB4YjAsMHgwMywweDAyLDB4NDMsMHgxMCwweDIxLDB4YTAsMHg1MSwweDAwLDB4MzQsMHgyNiwweDQyLDB4MDAsMHgwMSwKLTB4MzAsMHg1MiwweDAwLDB4ZmYsMHgyZSwweDQzLDB4MDAsMHgwNSwweDE0LDB4NjAsMHhmZiwweGQ5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhmLDB4YTUsMHgwMCwweDEwLDB4MGMsMHgwMCwweDA2LDB4YmYsMHgyNCwweDA0LDB4MDYsMHgxNCwweDEyLDB4YTAsMHgwMCwweDBlLAotMHgzYywweDAyLDB4YjAsMHgwMywweDEzLDB4YzAsMHgwMCwweDBkLDB4MzQsMHg0MiwweDAwLDB4M2MsMHgwMCwweDE1LDB4MTAsMHg0MCwKLTB4MDAsMHg1NSwweDEwLDB4MjEsMHgwMCwweDAyLDB4MTAsMHhjMCwweDAwLDB4NTUsMHgxMCwweDIxLDB4MDAsMHgwMiwweGE4LDB4ODAsCi0weDAyLDB4YmUsMHgwMCwweDFiLDB4MTcsMHhjMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDcsMHgwMCwweDBkLAotMHgwMCwweDAwLDB4YTgsMHgxMiwweDNjLDB4MDIsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAwLDB4M2MsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4M2MsMHgwNCwweGIwLDB4MDMsMHhhNCwweDU1LDB4MDAsMHgwMCwweDM0LDB4NjMsMHgwMCwweDFjLDB4MzQsMHg4NCwweDAwLDB4MWQsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4YTAsMHg2MCwweDAwLDB4MDAsMHhhMCwweDgyLDB4MDAsMHgwMCwweDdiLDB4YmUsMHgwMSwweGZjLAotMHg3YiwweGI2LDB4MDEsMHhiYywweDdiLDB4YjQsMHgwMSwweDdjLDB4N2IsMHhiMiwweDAxLDB4M2MsMHg3YiwweGIwLDB4MDAsMHhmYywKLTB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHg0MCwweGEyLDB4ZDEsMHgwMCwweDAwLDB4MDgsMHgwMCwweDI0LDB4OTgsCi0weDI2LDB4NDIsMHgwMCwweDAxLDB4MGMsMHgwMCwweDA2LDB4ZDEsMHgyNCwweDA0LDB4MDQsMHhmYywweDA4LDB4MDAsMHgyNCwweDhkLAotMHgwMCwweDQwLDB4ODgsMHgyMSwweDNjLDB4MDMsMHhiMCwweDAzLDB4MzQsMHg2MywweDAwLDB4M2MsMHgzYywweDA0LDB4YjAsMHgwMywKLTB4M2MsMHgwNSwweGIwLDB4MDMsMHhhNCwweDYwLDB4MDAsMHgwMCwweDM0LDB4ODQsMHgwMCwweDFjLDB4MzQsMHhhNSwweDAwLDB4MWQsCi0weDI0LDB4MDIsMHgwMCwweDAyLDB4MjQsMHgwMywweDAwLDB4MDEsMHhhMCwweDgyLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyNCwweGI3LAotMHhhMCwweGEzLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgxNywweDk5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4ZmYsMHg4YiwKLTB4MDAsMHgxMCwweDEyLDB4MDIsMHgzYywweDAyLDB4YjAsMHgwMywweDNjLDB4MDQsMHhiMCwweDAzLDB4MzQsMHg0MiwweDAwLDB4M2MsCi0weDM0LDB4ODQsMHgwMCwweDE0LDB4MjQsMHgwMywweDAwLDB4MDEsMHhhNCwweDQwLDB4MDAsMHgwMCwweDNjLDB4MDEsMHhiMCwweDAzLAotMHhhMCwweDIzLDB4MDAsMHgzZiwweDA4LDB4MDAsMHgyNCwweGI3LDB4YWMsMHg5MCwweDAwLDB4MDAsMHgyNywweGJkLDB4ZmYsMHhkOCwKLTB4YWYsMHhiMCwweDAwLDB4MTAsMHgzMCwweGQwLDB4MDAsMHhmZiwweDJlLDB4MDIsMHgwMCwweDJlLDB4YWYsMHhiMiwweDAwLDB4MTgsCi0weGFmLDB4YjEsMHgwMCwweDE0LDB4YWYsMHhiZiwweDAwLDB4MjAsMHhhZiwweGIzLDB4MDAsMHgxYywweDMwLDB4YjEsMHgwMCwweGZmLAotMHgxNCwweDQwLDB4MDAsMHgwNiwweDAwLDB4ODAsMHg5MCwweDIxLDB4OGYsMHhiZiwweDAwLDB4MjAsMHg3YiwweGIyLDB4MDAsMHhmYywKLTB4N2IsMHhiMCwweDAwLDB4YmMsMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDI4LDB4MmUsMHgxMywweDAwLDB4MTAsCi0weDI0LDB4MDUsMHgwMCwweDE0LDB4MGMsMHgwMCwweDEzLDB4YTQsMHgyNCwweDA2LDB4MDEsMHgwNywweDEyLDB4NjAsMHgwMCwweDM4LAotMHgwMiwweDAwLDB4MzAsMHgyMSwweDhmLDB4YTIsMHgwMCwweDM4LDB4MzAsMHhjMywweDAwLDB4M2YsMHgzYywweDA0LDB4YjAsMHgwOSwKLTB4MDAsMHgwMiwweDE0LDB4MDAsMHgwMCwweDQzLDB4MzAsMHgyNSwweDM0LDB4ODQsMHgwMSwweDYwLDB4OTAsMHg4MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg0MCwweGZmLDB4ZmQsMHgyNCwweDAyLDB4MDAsMHgwMSwweDEyLDB4MjIsMHgwMCwweDJhLAotMHgyYSwweDIyLDB4MDAsMHgwMiwweDE0LDB4NDAsMHgwMCwweDI0LDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMiwweDIyLDB4MDAsMHgyMCwKLTB4MjQsMHgwMiwweDAwLDB4MDMsMHgxMiwweDIyLDB4MDAsMHgxOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTYsMHg2MCwweGZmLDB4ZTIsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MTIsMHgyMiwweDAwLDB4MTMsMHgyYSwweDIyLDB4MDAsMHgwMiwweDE0LDB4NDAsMHgwMCwweDBkLAotMHgyNCwweDAyLDB4MDAsMHgwMiwweDEyLDB4MjIsMHgwMCwweDA5LDB4MjQsMHgwMiwweDAwLDB4MDMsMHgxNiwweDIyLDB4ZmYsMHhkYSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDA0LDB4MDgsMHg0YywweDI0LDB4MDUsMHhmZiwweGZmLDB4MGMsMHgwMCwweDEzLDB4NWYsCi0weDNjLDB4MDYsMHgwYywweGI4LDB4MDgsMHgwMCwweDI0LDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyNSwweDEyLAotMHgyNCwweDA0LDB4MDgsMHg0OCwweDE2LDB4MjAsMHhmZiwweGQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjUsMHgxMiwKLTB4MjQsMHgwNCwweDA4LDB4NDAsMHgwOCwweDAwLDB4MjUsMHgxMiwweDI0LDB4MDQsMHgwOCwweDQ0LDB4MjQsMHgwNCwweDA4LDB4NGMsCi0weDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNSwweGZmLDB4ZmYsMHgwOCwweDAwLDB4MjUsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MjUsMHgyMCwweDI0LDB4MDQsMHgwOCwweDQ4LDB4MTYsMHgyMCwweGZmLDB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDI1LDB4MjAsMHgyNCwweDA0LDB4MDgsMHg0MCwweDA4LDB4MDAsMHgyNSwweDIwLDB4MjQsMHgwNCwweDA4LDB4NDQsCi0weDAyLDB4NDAsMHgyMCwweDIxLDB4MGMsMHgwMCwweDI1LDB4NzEsMHgwMiwweDIwLDB4MjgsMHgyMSwweDA4LDB4MDAsMHgyNCwweGY1LAotMHgwMCwweDQwLDB4MzAsMHgyMSwweDI3LDB4YmQsMHhmZiwweGQ4LDB4MmMsMHhjMiwweDAwLDB4MmUsMHhhZiwweGIyLDB4MDAsMHgxOCwKLTB4YWYsMHhiMSwweDAwLDB4MTQsMHhhZiwweGIwLDB4MDAsMHgxMCwweGFmLDB4YmYsMHgwMCwweDIwLDB4YWYsMHhiMywweDAwLDB4MWMsCi0weDAwLDB4YzAsMHg4MCwweDIxLDB4MzAsMHhiMSwweDAwLDB4ZmYsMHgwMCwweDgwLDB4OTAsMHgyMSwweDE0LDB4NDAsMHgwMCwweDA3LAotMHgwMCwweDAwLDB4MTgsMHgyMSwweDhmLDB4YmYsMHgwMCwweDIwLDB4N2IsMHhiMiwweDAwLDB4ZmMsMHg3YiwweGIwLDB4MDAsMHhiYywKLTB4MDAsMHg2MCwweDEwLDB4MjEsMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDI4LDB4MmUsMHgxMywweDAwLDB4MTAsCi0weDI0LDB4MDUsMHgwMCwweDE0LDB4MGMsMHgwMCwweDEzLDB4YTQsMHgyNCwweDA2LDB4MDEsMHgwNywweDEyLDB4NjAsMHgwMCwweDI0LAotMHgwMiwweDAwLDB4MzAsMHgyMSwweDNjLDB4MDMsMHhiMCwweDA5LDB4MzQsMHg2MywweDAxLDB4NjAsMHg5MCwweDYyLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDQwLDB4ZmYsMHhmZCwweDMwLDB4YzUsMHgwMCwweDNmLDB4MGMsMHgwMCwweDI1LDB4YWUsCi0weDAyLDB4MjAsMHgyMCwweDIxLDB4MTYsMHg2MCwweDAwLDB4MGEsMHgwMCwweDQwLDB4ODAsMHgyMSwweDI0LDB4MDIsMHgwMCwweDAxLAotMHgxMiwweDIyLDB4MDAsMHgxNSwweDJhLDB4MjIsMHgwMCwweDAyLDB4MTQsMHg0MCwweDAwLDB4MGYsMHgyNCwweDAyLDB4MDAsMHgwMiwKLTB4MTIsMHgyMiwweDAwLDB4MGIsMHgyNCwweDAyLDB4MDAsMHgwMywweDEyLDB4MjIsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgyNSwweDNkLDB4MDIsMHgwMCwweDE4LDB4MjEsMHgyNCwweDA0LDB4MDgsMHg0YywweDI0LDB4MDUsMHhmZiwweGZmLAotMHgwYywweDAwLDB4MTMsMHg1ZiwweDNjLDB4MDYsMHgwYywweGI4LDB4MDgsMHgwMCwweDI1LDB4M2QsMHgwMiwweDAwLDB4MTgsMHgyMSwKLTB4MDgsMHgwMCwweDI1LDB4NWYsMHgyNCwweDA0LDB4MDgsMHg0OCwweDE2LDB4MjAsMHhmZiwweGY1LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgyNSwweDVmLDB4MjQsMHgwNCwweDA4LDB4NDAsMHgwOCwweDAwLDB4MjUsMHg1ZiwweDI0LDB4MDQsMHgwOCwweDQ0LAotMHgwMiwweDQwLDB4MjAsMHgyMSwweDBjLDB4MDAsMHgyNSwweDcxLDB4MDIsMHgyMCwweDI4LDB4MjEsMHgwOCwweDAwLDB4MjUsMHg0OSwKLTB4MDAsMHg0MCwweDMwLDB4MjEsMHgyNywweGJkLDB4ZmYsMHhlOCwweDJjLDB4YzIsMHgwMCwweDFmLDB4YWYsMHhiMCwweDAwLDB4MTAsCi0weGFmLDB4YmYsMHgwMCwweDE0LDB4MDAsMHhjMCwweDgwLDB4MjEsMHgxNCwweDQwLDB4MDAsMHgxZCwweDMwLDB4YTUsMHgwMCwweGZmLAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDEwLDB4YTIsMHgwMCwweDE4LDB4MjgsMHhhMiwweDAwLDB4MDIsMHgxNCwweDQwLDB4MDAsMHgxMiwKLTB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweGEyLDB4MDAsMHgwZSwweDI0LDB4MDIsMHgwMCwweDAzLDB4MTAsMHhhMiwweDAwLDB4MDcsCi0weDI0LDB4MDQsMHgwOCwweDRjLDB4MjYsMHgxMCwweGZmLDB4ZTIsMHgwMiwweDAwLDB4MTAsMHgyMSwweDhmLDB4YmYsMHgwMCwweDE0LAotMHg4ZiwweGIwLDB4MDAsMHgxMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsMHgyNCwweDA1LDB4ZmYsMHhmZiwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgzYywweDA2LDB4MGQsMHhmOCwweDA4LDB4MDAsMHgyNSwweDgyLDB4MjYsMHgxMCwweGZmLDB4ZTIsCi0weDA4LDB4MDAsMHgyNSwweDg3LDB4MjQsMHgwNCwweDA4LDB4NDgsMHgxNCwweGEwLDB4ZmYsMHhmMiwweDI0LDB4MDQsMHgwOCwweDQwLAotMHgwOCwweDAwLDB4MjUsMHg4OCwweDI0LDB4MDUsMHhmZiwweGZmLDB4MDgsMHgwMCwweDI1LDB4ODcsMHgyNCwweDA0LDB4MDgsMHg0NCwKLTB4MmMsMHhjMiwweDAwLDB4MTAsMHgxNCwweDQwLDB4ZmYsMHhlYywweDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHhhMiwweDAwLDB4MTQsCi0weDI4LDB4YTIsMHgwMCwweDAyLDB4MTQsMHg0MCwweDAwLDB4MGUsMHgyNCwweDAyLDB4MDAsMHgwMiwweDEwLDB4YTIsMHgwMCwweDBhLAotMHgyNCwweDAyLDB4MDAsMHgwMywweDEwLDB4YTIsMHgwMCwweDAzLDB4MjQsMHgwNCwweDA4LDB4NGMsMHgwOCwweDAwLDB4MjUsMHg4MiwKLTB4MjYsMHgxMCwweGZmLDB4ZjEsMHgyNCwweDA1LDB4ZmYsMHhmZiwweDBjLDB4MDAsMHgxMywweDVmLDB4M2MsMHgwNiwweDBkLDB4YjgsCi0weDA4LDB4MDAsMHgyNSwweDgyLDB4MjYsMHgxMCwweGZmLDB4ZjEsMHgwOCwweDAwLDB4MjUsMHhhMSwweDI0LDB4MDQsMHgwOCwweDQ4LAotMHgxNCwweGEwLDB4ZmYsMHhmNiwweDI0LDB4MDQsMHgwOCwweDQwLDB4MDgsMHgwMCwweDI1LDB4YTIsMHgyNCwweDA1LDB4ZmYsMHhmZiwKLTB4MDgsMHgwMCwweDI1LDB4YTEsMHgyNCwweDA0LDB4MDgsMHg0NCwweDI3LDB4YmQsMHhmZiwweGU4LDB4MzAsMHg4NCwweDAwLDB4ZmYsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MTAsMHg4MiwweDAwLDB4MzksMHhhZiwweGJmLDB4MDAsMHgxMCwweDI4LDB4ODIsMHgwMCwweDAyLAotMHgxNCwweDQwLDB4MDAsMHgyNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxMCwweDgyLDB4MDAsMHgxNywKLTB4MDAsMHhhMCwweDMwLDB4MjEsMHgyNCwweDAyLDB4MDAsMHgwMywweDEwLDB4ODIsMHgwMCwweDA1LDB4MjQsMHgwNCwweDA4LDB4M2MsCi0weDhmLDB4YmYsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweGUwLDB4MDAsMHgwOCwweDI3LDB4YmQsMHgwMCwweDE4LAotMHgwYywweDAwLDB4MTMsMHg1ZiwweDNjLDB4MDUsMHgzZiwweDAwLDB4MjQsMHgwNCwweDA4LDB4M2MsMHgzYywweDA1LDB4ODAsMHgwMCwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgwMCwweDAwLDB4MzAsMHgyMSwweDI0LDB4MDQsMHgwOCwweDNjLDB4M2MsMHgwNSwweDgwLDB4MDAsCi0weDBjLDB4MDAsMHgxMywweDVmLDB4MjQsMHgwNiwweDAwLDB4MDEsMHgyNCwweDA0LDB4MDgsMHhhYywweDBjLDB4MDAsMHgxMywweDQxLAotMHgyNCwweDA1LDB4MGYsMHhmZiwweDA4LDB4MDAsMHgyNSwweGJjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDA0LDB4MDgsMHgzNCwKLTB4MGMsMHgwMCwweDEzLDB4NWYsMHgzYywweDA1LDB4M2YsMHgwMCwweDI0LDB4MDQsMHgwOCwweDM0LDB4M2MsMHgwNSwweDgwLDB4MDAsCi0weDBjLDB4MDAsMHgxMywweDVmLDB4MDAsMHgwMCwweDMwLDB4MjEsMHgyNCwweDA0LDB4MDgsMHgzNCwweDNjLDB4MDUsMHg4MCwweDAwLAotMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDAxLDB4MDgsMHgwMCwweDI1LDB4Y2IsMHgyNCwweDA0LDB4MDgsMHhhOCwKLTB4MTQsMHg4MCwweGZmLDB4ZGYsMHgwMCwweGEwLDB4MzAsMHgyMSwweDI0LDB4MDQsMHgwOCwweDI0LDB4MGMsMHgwMCwweDEzLDB4NWYsCi0weDNjLDB4MDUsMHgzZiwweDAwLDB4MjQsMHgwNCwweDA4LDB4MjQsMHgzYywweDA1LDB4ODAsMHgwMCwweDBjLDB4MDAsMHgxMywweDVmLAotMHgwMCwweDAwLDB4MzAsMHgyMSwweDI0LDB4MDQsMHgwOCwweDI0LDB4M2MsMHgwNSwweDgwLDB4MDAsMHgwYywweDAwLDB4MTMsMHg1ZiwKLTB4MjQsMHgwNiwweDAwLDB4MDEsMHgwOCwweDAwLDB4MjUsMHhjYiwweDI0LDB4MDQsMHgwOCwweGEwLDB4MDAsMHhhMCwweDMwLDB4MjEsCi0weDI0LDB4MDQsMHgwOCwweDJjLDB4MGMsMHgwMCwweDEzLDB4NWYsMHgzYywweDA1LDB4M2YsMHgwMCwweDI0LDB4MDQsMHgwOCwweDJjLAotMHgzYywweDA1LDB4ODAsMHgwMCwweDBjLDB4MDAsMHgxMywweDVmLDB4MDAsMHgwMCwweDMwLDB4MjEsMHgyNCwweDA0LDB4MDgsMHgyYywKLTB4M2MsMHgwNSwweDgwLDB4MDAsMHgwYywweDAwLDB4MTMsMHg1ZiwweDI0LDB4MDYsMHgwMCwweDAxLDB4MDgsMHgwMCwweDI1LDB4Y2IsCi0weDI0LDB4MDQsMHgwOCwweGE0LDB4M2MsMHgwNSwweDAwLDB4MTQsMHgzYywweDAyLDB4YjAsMHgwNSwweDM0LDB4NDIsMHgwNCwweDIwLAotMHgzYywweDA2LDB4YzAsMHgwMCwweDNjLDB4MDMsMHhiMCwweDA1LDB4M2MsMHgwNCwweGIwLDB4MDUsMHgzNCwweGE1LDB4MTcsMHgwOSwKLTB4YWMsMHg0NSwweDAwLDB4MDAsMHgzNCwweGM2LDB4MDUsMHgwNywweDM0LDB4NjMsMHgwNCwweDI0LDB4MzQsMHg4NCwweDAyLDB4MjgsCi0weDNjLDB4MDcsMHhiMCwweDA1LDB4MjQsMHgwMiwweDAwLDB4MjAsMHhhYywweDY2LDB4MDAsMHgwMCwweDM0LDB4ZTcsMHgwNCwweDUwLAotMHhhMCwweDgyLDB4MDAsMHgwMCwweDkwLDB4ZTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDQyLDB4MDAsMHgwMywKLTB4MTAsMHg0MCwweGZmLDB4ZmMsMHgyNCwweDAyLDB4MDAsMHgwMSwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDkzLDB4ODUsMHg4MSwweGYxLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxNCwweGEyLDB4MDAsMHg1MywweDAwLDB4ODAsMHg0MCwweDIxLAotMHg4YywweDg5LDB4MDAsMHgwNCwweDNjLDB4MDIsMHhiMCwweDAxLDB4MDEsMHgyMiwweDMwLDB4MjEsMHg4YywweGMzLDB4MDAsMHgwNCwKLTB4M2MsMHgwMiwweDAxLDB4MDAsMHgwMCwweDYyLDB4MTAsMHgyNCwweDEwLDB4NDAsMHgwMCwweDRiLDB4MzAsMHg2MiwweDAwLDB4MDgsCi0weDEwLDB4NDUsMHgwMCwweDU5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweGMyLDB4MDAsMHgzOCwweDI0LDB4MDMsMHgwMCwweGI0LAotMHgzMCwweDQ0LDB4MDAsMHhmZiwweDEwLDB4ODMsMHgwMCwweDYxLDB4MjQsMHgwMiwweDAwLDB4YzQsMHgxMCwweDgyLDB4MDAsMHg1NCwKLTB4MjQsMHgwMiwweDAwLDB4OTQsMHgxMCwweDgyLDB4MDAsMHg0NSwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHhjMiwweDAwLDB4MzgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0NywweGZmLDB4ZmYsMHgzMCwweGUzLDB4NDAsMHhmZiwweDI0LDB4MDIsMHg0MCwweDg4LAotMHgxNCwweDYyLDB4MDAsMHgzOSwweDMwLDB4ZTMsMHgwMywweDAwLDB4MjQsMHgwMiwweDAzLDB4MDAsMHgxMCwweDYyLDB4MDAsMHgzOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweGMyLDB4MDAsMHg1NiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg0NywweGZmLDB4ZmYsCi0weDMwLDB4ZTIsMHgwMCwweDgwLDB4MTQsMHg0MCwweDAwLDB4MzAsMHgzYywweDAyLDB4YjAsMHgwMSwweDAxLDB4MjIsMHgzMCwweDIxLAotMHg5NCwweGMzLDB4MDAsMHg2MCwweDI0LDB4MDIsMHgwMCwweDA4LDB4MTQsMHg0MywweDAwLDB4M2IsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTAsMHhjMiwweDAwLDB4NjIsMHgyNCwweDAzLDB4MDAsMHgwNCwweDAwLDB4MDIsMHgzOSwweDAyLDB4MTAsMHhlMywweDAwLDB4MTUsCi0weDI0LDB4MDIsMHgwMCwweDA2LDB4MTQsMHhlMiwweDAwLDB4MzQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhkLDB4MDUsMHgwMSwweGFjLAotMHg5NCwweGM0LDB4MDAsMHg2NiwweDI3LDB4ODIsMHg4OSwweDY4LDB4MDAsMHgwNSwweDI4LDB4ODAsMHgzMCwweDg3LDB4ZmYsMHhmZiwKLTB4MDAsMHhhMiwweDI4LDB4MjEsMHgwMCwweDA3LDB4MWEsMHgwMCwweDhjLDB4YTQsMHgwMCwweDAwLDB4MDAsMHgwNywweDEyLDB4MDIsCi0weDAwLDB4NDMsMHgxMCwweDI1LDB4MjQsMHg0MiwweDAwLDB4NWUsMHgyNCwweDAzLDB4YzAsMHgwMCwweDMwLDB4NDcsMHhmZiwweGZmLAotMHgwMCwweDgzLDB4MjAsMHgyNCwweDAwLDB4ODcsMHgyMCwweDI1LDB4YWMsMHhhNCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjYsMHg3NiwKLTB4YWQsMHgwNywweDAwLDB4MTAsMHg4ZCwweDA1LDB4MDEsMHhhYywweDk0LDB4YzQsMHgwMCwweDY0LDB4MjcsMHg4MiwweDg5LDB4NjgsCi0weDAwLDB4MDUsMHgyOCwweDgwLDB4MzAsMHg4NywweGZmLDB4ZmYsMHgwMCwweGEyLDB4MjgsMHgyMSwweDAwLDB4MDcsMHgxYSwweDAwLAotMHg4YywweGE0LDB4MDAsMHgwMCwweDAwLDB4MDcsMHgxMiwweDAyLDB4MDAsMHg0MywweDEwLDB4MjUsMHgyNCwweDQyLDB4MDAsMHgzNiwKLTB4M2MsMHgwMywweGZmLDB4ZmYsMHgzMCwweDQ3LDB4ZmYsMHhmZiwweDAwLDB4ODMsMHgyMCwweDI0LDB4MDAsMHg4NywweDIwLDB4MjUsCi0weGFjLDB4YTQsMHgwMCwweDAwLDB4YWQsMHgwNywweDAwLDB4MTAsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg5NCwweGMyLDB4MDAsMHg1MCwweDA4LDB4MDAsMHgyNiwweDM0LDB4MzAsMHg0NywweGZmLDB4ZmYsMHg4ZCwweDA0LDB4MDEsMHhhYywKLTB4MjcsMHg4MywweDg5LDB4NjgsMHgwMCwweDA0LDB4MjAsMHg4MCwweDAwLDB4ODMsMHgyMCwweDIxLDB4OGMsMHg4MiwweDAwLDB4MDAsCi0weDNjLDB4MDMsMHhmZiwweGZmLDB4MDAsMHg0MywweDEwLDB4MjQsMHgzNCwweDQyLDB4MDAsMHgyZSwweGFjLDB4ODIsMHgwMCwweDAwLAotMHgyNCwweDAzLDB4MDAsMHgyZSwweGFkLDB4MDMsMHgwMCwweDEwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OGQsMHgwNCwweDAxLDB4YWMsMHgyNywweDgzLDB4ODksMHg2OCwweDAwLDB4MDQsMHgyMCwweDgwLDB4MDAsMHg4MywweDIwLDB4MjEsCi0weDhjLDB4ODIsMHgwMCwweDAwLDB4M2MsMHgwMywweGZmLDB4ZmYsMHgwMCwweDQzLDB4MTAsMHgyNCwweDM0LDB4NDIsMHgwMCwweDBlLAotMHgyNCwweDAzLDB4MDAsMHgwZSwweDA4LDB4MDAsMHgyNiwweDc1LDB4YWMsMHg4MiwweDAwLDB4MDAsMHg4ZCwweDA0LDB4MDEsMHhhYywKLTB4MjcsMHg4MywweDg5LDB4NjgsMHgwMCwweDA0LDB4MjAsMHg4MCwweDAwLDB4ODMsMHgyMCwweDIxLDB4OGMsMHg4MiwweDAwLDB4MDAsCi0weDNjLDB4MDMsMHhmZiwweGZmLDB4MDAsMHg0MywweDEwLDB4MjQsMHgzNCwweDQyLDB4MDAsMHgxNCwweDI0LDB4MDMsMHgwMCwweDE0LAotMHgwOCwweDAwLDB4MjYsMHg3NSwweGFjLDB4ODIsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzAsMHhjNiwweDAwLDB4ZmYsMHgwMCwweDA2LDB4NDgsMHg0MCwweDAxLDB4MjYsMHgxMCwweDIxLDB4MDAsMHgwMiwweDEwLDB4ODAsCi0weDI3LDB4OGIsMHhiYywweDMwLDB4MjcsMHg4MywweGJjLDB4MzYsMHgwMCwweDRiLDB4NDAsMHgyMSwweDAwLDB4NDMsMHgxMCwweDIxLAotMHg5NCwweDQ3LDB4MDAsMHgwMCwweDMwLDB4YTIsMHgzZiwweGZmLDB4MTAsMHhlMiwweDAwLDB4MjksMHgzMCwweDhhLDB4ZmYsMHhmZiwKLTB4OTUsMHgwMiwweDAwLDB4MDIsMHgyNCwweDAzLDB4MDAsMHgwMSwweDAwLDB4MDIsMHgxMSwweDgyLDB4MzAsMHg0MiwweDAwLDB4MDEsCi0weDEwLDB4NDMsMHgwMCwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDI2LDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMCwweDgwLAotMHgwMCwweDRiLDB4MzAsMHgyMSwweDk0LDB4YzQsMHgwMCwweDAyLDB4MjcsMHg4MywweGJjLDB4MzYsMHgyNywweDg1LDB4YmMsMHgzNCwKLTB4MDAsMHg0NSwweDI4LDB4MjEsMHgzMCwweDg0LDB4ZmYsMHhkZiwweDAwLDB4NDMsMHgxMCwweDIxLDB4YTQsMHhjNCwweDAwLDB4MDIsCi0weGE0LDB4NDAsMHgwMCwweDAwLDB4YTQsMHhhMCwweDAwLDB4MDAsMHg5NCwweGMzLDB4MDAsMHgwMiwweDNjLDB4MDQsMHhiMCwweDAxLAotMHgwMSwweDQ0LDB4MjAsMHgyMSwweDMwLDB4NjMsMHhmZiwweGJmLDB4YTQsMHhjMywweDAwLDB4MDIsMHhhMCwweGMwLDB4MDAsMHgwMCwKLTB4OGMsMHg4MiwweDAwLDB4MDQsMHgyNCwweDAzLDB4ZjAsMHhmZiwweDAwLDB4NDMsMHgxMCwweDI0LDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weGFjLDB4ODIsMHgwMCwweDA0LDB4MjQsMHgwMiwweGMwLDB4MDAsMHg5MSwweDA0LDB4MDAsMHgwMSwweDAwLDB4YTIsMHgxMCwweDI0LAotMHgwMCwweDQ3LDB4MjgsMHgyNSwweDNjLDB4MDMsMHhiMCwweDAxLDB4MjQsMHgwMiwweDAwLDB4MDIsMHgxNCwweDgyLDB4ZmYsMHhlMiwKLTB4MDEsMHg0MywweDE4LDB4MjEsMHhhYywweDY1LDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyNiwweGEzLDB4MDEsMHgyNiwweDEwLDB4MjEsCi0weDA4LDB4MDAsMHgyNiwweGEzLDB4MDEsMHgyNiwweDEwLDB4MjEsMHg5MywweDgzLDB4ODEsMHhmMSwweDI0LDB4MDIsMHgwMCwweDAxLAotMHgxNCwweDYyLDB4MDAsMHgwZCwweDNjLDB4MDIsMHhiMCwweDAxLDB4OGMsMHg4NCwweDAwLDB4MDQsMHgzYywweDA2LDB4YjAsMHgwOSwKLTB4MDAsMHg4MiwweDIwLDB4MjEsMHg4YywweDg1LDB4MDAsMHgwOCwweDhjLDB4ODMsMHgwMCwweDA0LDB4M2MsMHgwMiwweDAxLDB4MDAsCi0weDM0LDB4YzYsMHgwMSwweDAwLDB4MDAsMHg2MiwweDE4LDB4MjQsMHgxNCwweDYwLDB4MDAsMHgwNSwweDMwLDB4YTUsMHgyMCwweDAwLAotMHgyNCwweDAyLDB4MDAsMHgwNiwweGEwLDB4YzIsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2MsMHgwMywweGIwLDB4MDksMHgxMCwweGEwLDB4ZmYsMHhmYywweDM0LDB4NjMsMHgwMSwweDAwLDB4MjQsMHgwMiwweDAwLDB4MGUsCi0weDA4LDB4MDAsMHgyNiwweGQ2LDB4YTAsMHg2MiwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMSwweDMwLDB4YTUsMHhmZiwweGZmLAotMHgwMCwweGEyLDB4MjgsMHgyMSwweDhjLDB4YTMsMHgwMCwweDAwLDB4M2MsMHgwMiwweDEwLDB4MDAsMHgwMCwweDgwLDB4MzAsMHgyMSwKLTB4MDAsMHg2MiwweDE4LDB4MjQsMHg4YywweGEyLDB4MDAsMHgwNCwweDEwLDB4NjAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDMwLDB4NDIsMHg4MCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4YzIsMHgwMSwweGE4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDQsMHgwMCwweDAxLDB4MjgsMHg4MywweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHg0MCwKLTB4MDAsMHg4MywweDEwLDB4MGEsMHg5MywweDgzLDB4ODEsMHhmMCwweDAwLDB4MDIsMHgxMSwweDgzLDB4MDAsMHgwMiwweDExLDB4ODAsCi0weDAwLDB4ODIsMHgyMCwweDIzLDB4MjQsMHg2MywweGZmLDB4ZmYsMHhhYywweGM0LDB4MDEsMHhhOCwweGEzLDB4ODMsMHg4MSwweGYwLAotMHg4YywweGM0LDB4MDEsMHhhYywweDhjLDB4YzIsMHgwMSwweGE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4MTAsMHgyNiwKLTB4MDAsMHgwMiwweDEwLDB4MmIsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMywweGIwLDB4MDMsCi0weDM0LDB4NjMsMHgwMCwweDczLDB4OTAsMHg2MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4NDIsMHgwMCwweDAxLAotMHgxNCwweDQwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTMsMHg4MCwweDgxLDB4ZjEsMHgwMywweGUwLDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMSwweGEzLDB4ODIsMHg4MSwweGYxLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHg4MiwweDAwLDB4MDQsMHgzYywweDA1LDB4YjAsMHgwMSwweDAwLDB4ODAsMHg1MCwweDIxLAotMHgwMCwweDQ1LDB4MTAsMHgyMSwweDhjLDB4NDMsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAwLDB4MDUsMHgwMCwweDAzLDB4MWEsMHgwMiwKLTB4MzAsMHg2OSwweDAwLDB4MGYsMHgxMSwweDIyLDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMCwweDA3LDB4MTEsMHgyMiwweDAwLDB4MDksCi0weDI0LDB4MDIsMHgwMCwweDBhLDB4MTEsMHgyMiwweDAwLDB4MDcsMHgyNCwweDAyLDB4MDAsMHgwYiwweDExLDB4MjIsMHgwMCwweDA1LAotMHgyNCwweDAyLDB4MDAsMHgwMSwweDkzLDB4ODMsMHg4MSwweGYwLDB4M2MsMHgwNCwweGIwLDB4MDYsMHgxMCwweDYyLDB4MDAsMHgwMywKLTB4MzQsMHg4NCwweDgwLDB4MTgsMHgwMywweGUwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHg4MiwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDE3LDB4MDIsMHgxNCwweDQwLDB4ZmYsMHhmYSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4ZCwweDQzLDB4MDEsMHhhOCwweDI3LDB4ODIsMHg4OSwweDY4LDB4MDAsMHgwMywweDE4LDB4ODAsMHgwMCwweDZhLDB4MjAsMHgyMSwKLTB4OGMsMHg4NywweDAwLDB4YTgsMHgwMCwweDYyLDB4MTgsMHgyMSwweDhjLDB4NjgsMHgwMCwweDAwLDB4MDAsMHhlNSwweDI4LDB4MjEsCi0weDhjLDB4YTksMHgwMCwweDAwLDB4M2MsMHgwMiwweGZmLDB4ZmYsMHgyNywweDgzLDB4OGEsMHg2OCwweDAxLDB4MjIsMHgxMCwweDI0LAotMHgwMCwweDQ4LDB4MTAsMHgyNSwweGFjLDB4YTIsMHgwMCwweDAwLDB4OGQsMHg0NCwweDAxLDB4YTgsMHgwMCwweDA3LDB4MzAsMHhjMiwKLTB4M2MsMHgwMiwweDAwLDB4ODAsMHgwMCwweDA0LDB4MjAsMHg4MCwweDAwLDB4ODMsMHgyMCwweDIxLDB4MDAsMHgwNiwweDMyLDB4MDAsCi0weDhjLDB4YTksMHgwMCwweDA0LDB4MDAsMHhjMiwweDMwLDB4MjUsMHg4YywweDgyLDB4MDAsMHgwMCwweDNjLDB4MDMsMHg4MCwweDAwLAotMHgwMSwweDIyLDB4MTAsMHgyNSwweDAwLDB4NDMsMHgxMCwweDI1LDB4YWMsMHhhMiwweDAwLDB4MDQsMHhhZiwweDg3LDB4YmMsMHgyMCwKLTB4OGMsMHhhMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFmLDB4ODIsMHhiYywweDI4LDB4OGMsMHhhMywweDAwLDB4MDQsCi0weDNjLDB4MDEsMHhiMCwweDA3LDB4YWMsMHgyNiwweDgwLDB4MTgsMHg4ZCwweDQyLDB4MDEsMHhhOCwweGFmLDB4ODMsMHhiYywweDI0LAotMHg5MywweDg1LDB4ODEsMHhmMCwweDI0LDB4NDQsMHgwMCwweDAxLDB4MjgsMHg4MywweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHg0MCwKLTB4MDAsMHg4MywweDEwLDB4MGEsMHgwMCwweDAyLDB4MTEsMHg4MywweDAwLDB4MDIsMHgxMSwweDgwLDB4MjQsMHhhNSwweGZmLDB4ZmYsCi0weDAwLDB4ODIsMHgyMCwweDIzLDB4YWQsMHg0NCwweDAxLDB4YTgsMHhhMywweDg1LDB4ODEsMHhmMCwweDA4LDB4MDAsMHgyNywweDIxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDUsMHhiMCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDEsMHgzNCwweGE1LDB4MDAsMHgyMCwKLTB4MjQsMHg0MiwweDlkLDB4NjQsMHhhYywweGEyLDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAyLDB4MjQsMHgwMywweDAwLDB4MjAsCi0weGFjLDB4ODIsMHgwMCwweDY0LDB4M2MsMHgwMiwweDgwLDB4MDEsMHhhYywweDgzLDB4MDAsMHg2MCwweGFjLDB4ODAsMHgwMCwweDAwLAotMHhhYywweDgwLDB4MDAsMHgwNCwweGFjLDB4ODAsMHgwMCwweDA4LDB4YWMsMHg4MCwweDAwLDB4NGMsMHhhYywweDgwLDB4MDAsMHg1MCwKLTB4YWMsMHg4MCwweDAwLDB4NTQsMHhhYywweDgwLDB4MDAsMHgwYywweGFjLDB4ODAsMHgwMCwweDU4LDB4YTAsMHg4MCwweDAwLDB4NWMsCi0weDI0LDB4NDIsMHg5ZSwweDI4LDB4MjQsMHg4MywweDAwLDB4NjgsMHgyNCwweDA1LDB4MDAsMHgwZiwweDI0LDB4YTUsMHhmZiwweGZmLAotMHhhYywweDYyLDB4MDAsMHgwMCwweDA0LDB4YTEsMHhmZiwweGZkLDB4MjQsMHg2MywweDAwLDB4MDQsMHgzYywweDAyLDB4ODAsMHgwMSwKLTB4MjQsMHg0MiwweDlmLDB4MTAsMHhhYywweDgyLDB4MDAsMHg3OCwweDNjLDB4MDMsMHg4MCwweDAxLDB4M2MsMHgwMiwweDgwLDB4MDEsCi0weDI0LDB4NjMsMHhhMCwweDljLDB4MjQsMHg0MiwweGEwLDB4MDgsMHhhYywweDgzLDB4MDAsMHg4OCwweGFjLDB4ODIsMHgwMCwweDk4LAotMHgzYywweDAzLDB4ODAsMHgwMSwweDNjLDB4MDIsMHg4MCwweDAxLDB4MjQsMHg2MywweGExLDB4NDQsMHgyNCwweDQyLDB4YTIsMHg1YywKLTB4YWMsMHg4MywweDAwLDB4YTAsMHhhYywweDgyLDB4MDAsMHhhNCwweGEwLDB4ODAsMHgwMSwweGJhLDB4YWMsMHg4MCwweDAxLDB4YTgsCi0weGFjLDB4ODAsMHgwMSwweGFjLDB4YWMsMHg4MCwweDAxLDB4YjAsMHhhYywweDgwLDB4MDEsMHhiNCwweGEwLDB4ODAsMHgwMSwweGI4LAotMHgwMywweGUwLDB4MDAsMHgwOCwweGEwLDB4ODAsMHgwMSwweGI5LDB4M2MsMHgwMywweGIwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMSwKLTB4MzQsMHg2MywweDAwLDB4MjAsMHgyNCwweDQyLDB4OWUsMHgyOCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4YWMsMHg2MiwweDAwLDB4MDAsCi0weDNjLDB4MDIsMHhiMCwweDAzLDB4M2MsMHgwMywweDgwLDB4MDEsMHgzNCwweDQyLDB4MDAsMHgyMCwweDI0LDB4NjMsMHg5ZSwweDQwLAotMHhhYywweDQzLDB4MDAsMHgwMCwweDhjLDB4ODIsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgxMSwKLTB4MDAsMHg4MCwweDI4LDB4MjEsMHg4YywweDgyLDB4MDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MGQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHg4NCwweDAwLDB4MTAsMHg4YywweGEzLDB4MDAsMHgxNCwweDhjLDB4YTIsMHgwMCwweDA0LAotMHgwMCwweDgzLDB4MjAsMHgyMSwweDAwLDB4NDQsMHgxMCwweDIxLDB4MzAsMHg0MywweDAwLDB4ZmYsMHgwMCwweDAzLDB4MTgsMHgyYiwKLTB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwweDQzLDB4MTAsMHgyMSwweDAwLDB4MDIsMHgxMiwweDAwLDB4MzAsMHg0MiwweDNmLDB4ZmYsCi0weGFjLDB4YTIsMHgwMCwweDA0LDB4YWMsMHhhMCwweDAwLDB4MDAsMHhhYywweGEwLDB4MDAsMHg0YywweGFjLDB4YTAsMHgwMCwweDUwLAotMHhhYywweGEwLDB4MDAsMHg1NCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4YWMsMHhhMCwweDAwLDB4MGMsMHgzYywweDAzLDB4YjAsMHgwMywKLTB4M2MsMHgwMiwweDgwLDB4MDEsMHgzNCwweDYzLDB4MDAsMHgyMCwweDI0LDB4NDIsMHg5ZSwweGJjLDB4YWMsMHg2MiwweDAwLDB4MDAsCi0weDhjLDB4ODYsMHgwMCwweDA0LDB4M2MsMHgwMiwweGIwLDB4MDEsMHgyNCwweDAzLDB4MDAsMHgwMSwweDAwLDB4YzIsMHgxMCwweDIxLAotMHg4YywweDQ1LDB4MDAsMHgwMCwweGFjLDB4ODMsMHgwMCwweDRjLDB4MDAsMHgwNSwweDE0LDB4MDIsMHgzMCwweGEzLDB4M2YsMHhmZiwKLTB4MzAsMHg0MiwweDAwLDB4ZmYsMHhhYywweDgzLDB4MDAsMHgxMCwweGFjLDB4ODIsMHgwMCwweDE0LDB4OGMsMHg4MywweDAwLDB4MTQsCi0weGFjLDB4ODUsMHgwMCwweDQwLDB4MDAsMHhjMywweDMwLDB4MjEsMHgwMywweGUwLDB4MDAsMHgwOCwweGFjLDB4ODYsMHgwMCwweDA4LAotMHgzYywweDAyLDB4YjAsMHgwMywweDNjLDB4MDMsMHg4MCwweDAxLDB4MjcsMHhiZCwweGZmLDB4ZTgsMHgzNCwweDQyLDB4MDAsMHgyMCwKLTB4MjQsMHg2MywweDlmLDB4MTAsMHhhZiwweGIwLDB4MDAsMHgxMCwweGFmLDB4YmYsMHgwMCwweDE0LDB4YWMsMHg0MywweDAwLDB4MDAsCi0weDhjLDB4ODIsMHgwMCwweDRjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgwYSwweDAwLDB4ODAsMHg4MCwweDIxLAotMHhhZSwweDAwLDB4MDAsMHgwMCwweGFlLDB4MDAsMHgwMCwweDRjLDB4YWUsMHgwMCwweDAwLDB4NTAsMHhhZSwweDAwLDB4MDAsMHg1NCwKLTB4YWUsMHgwMCwweDAwLDB4MGMsMHg4ZiwweGJmLDB4MDAsMHgxNCwweDhmLDB4YjAsMHgwMCwweDEwLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDI3LDB4YmQsMHgwMCwweDE4LDB4MGMsMHgwMCwweDI3LDB4YWYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyNywweGQxLAotMHhhZSwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDIsMHhiMCwweDAzLDB4M2MsMHgwMywweDgwLDB4MDEsMHgyNywweGJkLDB4ZmYsMHhlOCwKLTB4MzQsMHg0MiwweDAwLDB4MjAsMHgyNCwweDYzLDB4OWYsMHg3NCwweGFmLDB4YjAsMHgwMCwweDEwLDB4YWYsMHhiZiwweDAwLDB4MTQsCi0weGFjLDB4NDMsMHgwMCwweDAwLDB4OGMsMHg4MiwweDAwLDB4NGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDE2LAotMHgwMCwweDgwLDB4ODAsMHgyMSwweDhlLDB4MDMsMHgwMCwweDA4LDB4M2MsMHgwMiwweGIwLDB4MDEsMHg4ZSwweDA0LDB4MDAsMHg0NCwKLTB4MDAsMHg2MiwweDE4LDB4MjEsMHg5MCwweDY1LDB4MDAsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAxLDB4YWUsMHgwMiwweDAwLDB4NTAsCi0weDMwLDB4YTMsMHgwMCwweGZmLDB4MDAsMHgwMywweDEwLDB4ODIsMHgwMCwweDA0LDB4MjMsMHgwMiwweDMwLDB4ODQsMHgwMCwweDBmLAotMHgzMCwweDQyLDB4MDAsMHgwMywweDAwLDB4MDMsMHgxOSwweDAyLDB4YWUsMHgwNCwweDAwLDB4MzQsMHhhZSwweDAyLDB4MDAsMHgyYywKLTB4YWUsMHgwMywweDAwLDB4MzAsMHhhMiwweDA1LDB4MDAsMHg0OCwweDhmLDB4YmYsMHgwMCwweDE0LDB4OGYsMHhiMCwweDAwLDB4MTAsCi0weDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsMHgwYywweDAwLDB4MjcsMHhhZiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MjcsMHhlOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzYywweDAzLDB4ODAsMHgwMSwKLTB4MjcsMHhiZCwweGZmLDB4ZTgsMHgzNCwweDQyLDB4MDAsMHgyMCwweDI0LDB4NjMsMHhhMCwweDA4LDB4YWYsMHhiMCwweDAwLDB4MTAsCi0weGFmLDB4YmYsMHgwMCwweDE0LDB4YWMsMHg0MywweDAwLDB4MDAsMHg4YywweDgyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxMCwweDQwLDB4MDAsMHgxNiwweDAwLDB4ODAsMHg4MCwweDIxLDB4OTIsMHgwMywweDAwLDB4NDQsMHg4ZSwweDAyLDB4MDAsMHg0MCwKLTB4ODMsMHg4NSwweDhiLDB4ZDQsMHg5MiwweDA0LDB4MDAsMHg0MSwweDMwLDB4NjMsMHgwMCwweDAxLDB4MDAsMHgwMiwweDE2LDB4MDIsCi0weGFlLDB4MDQsMHgwMCwweDE0LDB4MDAsMHgwMCwweDMwLDB4MjEsMHhhZSwweDAyLDB4MDAsMHgxOCwweDEwLDB4YTAsMHgwMCwweDA0LAotMHhhZSwweDAzLDB4MDAsMHgzYywweDEwLDB4NjAsMHgwMCwweDAzLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgyNCwweDA2LDB4MDAsMHgwMSwKLTB4MjQsMHgwMiwweDAwLDB4MDEsMHhhMywweDg2LDB4OGIsMHhkNCwweDhmLDB4YmYsMHgwMCwweDE0LDB4YWUsMHgwMiwweDAwLDB4NTQsCi0weDhmLDB4YjAsMHgwMCwweDEwLDB4MDMsMHhlMCwweDAwLDB4MDgsMHgyNywweGJkLDB4MDAsMHgxOCwweDBjLDB4MDAsMHgyNywweGRkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgyOCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4M2MsMHgwMywweDgwLDB4MDEsMHgyNywweGJkLDB4ZmYsMHhlOCwweDM0LDB4NDIsMHgwMCwweDIwLDB4MjQsMHg2MywweGEwLDB4OWMsCi0weGFmLDB4YjAsMHgwMCwweDEwLDB4YWYsMHhiZiwweDAwLDB4MTQsMHhhYywweDQzLDB4MDAsMHgwMCwweDhjLDB4ODIsMHgwMCwweDUwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDFiLDB4MDAsMHg4MCwweDgwLDB4MjEsMHgzYywweDAyLDB4YjAsMHgwMywKLTB4OGMsMHg0MiwweDAwLDB4MDAsMHg5MiwweDA0LDB4MDAsMHg0NCwweDhlLDB4MDMsMHgwMCwweDQwLDB4ODMsMHg4NiwweDhiLDB4ZDQsCi0weDkyLDB4MDUsMHgwMCwweDQxLDB4MzAsMHg0MiwweDA4LDB4MDAsMHgzMCwweDg0LDB4MDAsMHgwMSwweDAwLDB4MDIsMHgxMiwweGMyLAotMHgwMCwweDAzLDB4MWUsMHgwMiwweDAwLDB4ODIsMHgyMCwweDI1LDB4YWUsMHgwNSwweDAwLDB4MTQsMHgwMCwweDAwLDB4MzgsMHgyMSwKLTB4YWUsMHgwMywweDAwLDB4MTgsMHgxMCwweGMwLDB4MDAsMHgwNCwweGFlLDB4MDQsMHgwMCwweDNjLDB4MTAsMHg4MCwweDAwLDB4MDMsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MjQsMHgwNywweDAwLDB4MDEsMHgyNCwweDAyLDB4MDAsMHgwMSwweGEzLDB4ODcsMHg4YiwweGQ0LAotMHg4ZiwweGJmLDB4MDAsMHgxNCwweGFlLDB4MDIsMHgwMCwweDU0LDB4OGYsMHhiMCwweDAwLDB4MTAsMHgwMywweGUwLDB4MDAsMHgwOCwKLTB4MjcsMHhiZCwweDAwLDB4MTgsMHgwYywweDAwLDB4MjcsMHhkZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDI4LDB4MzMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDMsMHgzYywweDAzLDB4ODAsMHgwMSwweDI3LDB4YmQsMHhmZiwweGU4LAotMHgzNCwweDQyLDB4MDAsMHgyMCwweDI0LDB4NjMsMHhhMSwweDQ0LDB4YWYsMHhiMCwweDAwLDB4MTAsMHhhZiwweGJmLDB4MDAsMHgxNCwKLTB4YWMsMHg0MywweDAwLDB4MDAsMHg4YywweDgyLDB4MDAsMHg1NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MzcsCi0weDAwLDB4ODAsMHg4MCwweDIxLDB4OGUsMHgwNCwweDAwLDB4MDQsMHg4ZSwweDAzLDB4MDAsMHg0NCwweDNjLDB4MDIsMHg4MCwweDAwLAotMHgzYywweDA1LDB4YjAsMHgwMSwweDM0LDB4NDIsMHgwMCwweDEwLDB4MDAsMHg4NSwweDIwLDB4MjEsMHgwMCwweDYyLDB4MTgsMHgyNSwKLTB4YWMsMHg4MywweDAwLDB4MDQsMHg4ZSwweDAyLDB4MDAsMHgwNCwweDhlLDB4MDMsMHgwMSwweGFjLDB4MDIsMHgwMCwweDIwLDB4MjEsCi0weDAwLDB4NDUsMHgxMCwweDIxLDB4OGMsMHg0NiwweDAwLDB4MDAsMHgwMCwweDAzLDB4MTgsMHg4MCwweDI3LDB4ODIsMHg4OSwweDY4LAotMHgwMCwweDYyLDB4MTgsMHgyMSwweGFjLDB4NjYsMHgwMCwweDAwLDB4OGUsMHgwMiwweDAwLDB4MDQsMHg4ZSwweDAzLDB4MDEsMHhhYywKLTB4MDAsMHg0NSwweDEwLDB4MjEsMHg4YywweDQ2LDB4MDAsMHgwNCwweDAwLDB4MDMsMHgxOCwweDgwLDB4MjcsMHg4MiwweDhhLDB4NjgsCi0weDAwLDB4NjIsMHgxOCwweDIxLDB4MGMsMHgwMCwweDI2LDB4MTAsMHhhYywweDY2LDB4MDAsMHgwMCwweDhlLDB4MDMsMHgwMSwweGFjLAotMHg4ZSwweDA3LDB4MDAsMHgwNCwweDNjLDB4MDYsMHhiMCwweDAzLDB4MjQsMHg2NSwweDAwLDB4MDEsMHgyOCwweGE0LDB4MDAsMHgwMCwKLTB4MjQsMHg2MiwweDAwLDB4NDAsMHgwMCwweGE0LDB4MTAsMHgwYSwweDAwLDB4MDIsMHgxMSwweDgzLDB4MDAsMHgwMiwweDExLDB4ODAsCi0weDAwLDB4MDMsMHgxOCwweDgwLDB4MDAsMHhhMiwweDI4LDB4MjMsMHgwMCwweDcwLDB4MTgsMHgyMSwweGFlLDB4MDUsMHgwMSwweGFjLAotMHhhYywweDY3LDB4MDAsMHhhOCwweDM0LDB4YzYsMHgwMCwweDMwLDB4OGMsMHhjMywweDAwLDB4MDAsMHg5MywweDgyLDB4ODEsMHhmMCwKLTB4MDIsMHgwMCwweDIwLDB4MjEsMHgyNCwweDYzLDB4MDAsMHgwMSwweDI0LDB4NDIsMHgwMCwweDAxLDB4YWMsMHhjMywweDAwLDB4MDAsCi0weGEzLDB4ODIsMHg4MSwweGYwLDB4MGMsMHgwMCwweDI3LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4YmYsMHgwMCwweDE0LAotMHg4ZiwweGIwLDB4MDAsMHgxMCwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MTgsMHgwYywweDAwLDB4MjgsMHgyNywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjgsMHg1ZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMiwweGIwLDB4MDMsCi0weDNjLDB4MDMsMHg4MCwweDAxLDB4MjcsMHhiZCwweGZmLDB4ZTgsMHgzNCwweDQyLDB4MDAsMHgyMCwweDI0LDB4NjMsMHhhMiwweDVjLAotMHhhZiwweGIwLDB4MDAsMHgxMCwweGFmLDB4YmYsMHgwMCwweDE0LDB4YWMsMHg0MywweDAwLDB4MDAsMHg4YywweDgyLDB4MDAsMHg1NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgzNywweDAwLDB4ODAsMHg4MCwweDIxLDB4OGUsMHgwNCwweDAwLDB4MDQsCi0weDhlLDB4MDMsMHgwMCwweDQ0LDB4M2MsMHgwMiwweDgwLDB4MDAsMHgzYywweDA1LDB4YjAsMHgwMSwweDM0LDB4NDIsMHgwMCwweDEwLAotMHgwMCwweDg1LDB4MjAsMHgyMSwweDAwLDB4NjIsMHgxOCwweDI1LDB4YWMsMHg4MywweDAwLDB4MDQsMHg4ZSwweDAyLDB4MDAsMHgwNCwKLTB4OGUsMHgwMywweDAxLDB4YWMsMHgwMiwweDAwLDB4MjAsMHgyMSwweDAwLDB4NDUsMHgxMCwweDIxLDB4OGMsMHg0NiwweDAwLDB4MDAsCi0weDAwLDB4MDMsMHgxOCwweDgwLDB4MjcsMHg4MiwweDg5LDB4NjgsMHgwMCwweDYyLDB4MTgsMHgyMSwweGFjLDB4NjYsMHgwMCwweDAwLAotMHg4ZSwweDAyLDB4MDAsMHgwNCwweDhlLDB4MDMsMHgwMSwweGFjLDB4MDAsMHg0NSwweDEwLDB4MjEsMHg4YywweDQ2LDB4MDAsMHgwNCwKLTB4MDAsMHgwMywweDE4LDB4ODAsMHgyNywweDgyLDB4OGEsMHg2OCwweDAwLDB4NjIsMHgxOCwweDIxLDB4MGMsMHgwMCwweDI2LDB4MTAsCi0weGFjLDB4NjYsMHgwMCwweDAwLDB4OGUsMHgwMywweDAxLDB4YWMsMHg4ZSwweDA3LDB4MDAsMHgwNCwweDNjLDB4MDYsMHhiMCwweDAzLAotMHgyNCwweDY1LDB4MDAsMHgwMSwweDI4LDB4YTQsMHgwMCwweDAwLDB4MjQsMHg2MiwweDAwLDB4NDAsMHgwMCwweGE0LDB4MTAsMHgwYSwKLTB4MDAsMHgwMiwweDExLDB4ODMsMHgwMCwweDAyLDB4MTEsMHg4MCwweDAwLDB4MDMsMHgxOCwweDgwLDB4MDAsMHhhMiwweDI4LDB4MjMsCi0weDAwLDB4NzAsMHgxOCwweDIxLDB4YWUsMHgwNSwweDAxLDB4YWMsMHhhYywweDY3LDB4MDAsMHhhOCwweDM0LDB4YzYsMHgwMCwweDMwLAotMHg4YywweGMzLDB4MDAsMHgwMCwweDkzLDB4ODIsMHg4MSwweGYwLDB4MDIsMHgwMCwweDIwLDB4MjEsMHgyNCwweDYzLDB4MDAsMHgwMSwKLTB4MjQsMHg0MiwweDAwLDB4MDEsMHhhYywweGMzLDB4MDAsMHgwMCwweGEzLDB4ODIsMHg4MSwweGYwLDB4MGMsMHgwMCwweDI3LDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHhiZiwweDAwLDB4MTQsMHg4ZiwweGIwLDB4MDAsMHgxMCwweDAzLDB4ZTAsMHgwMCwweDA4LAotMHgyNywweGJkLDB4MDAsMHgxOCwweDBjLDB4MDAsMHgyOCwweDI3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MjgsMHhhMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwMywweDNjLDB4MDMsMHg4MCwweDAxLDB4MzQsMHg0MiwweDAwLDB4MjAsCi0weDI0LDB4NjMsMHhhMywweDc0LDB4MjcsMHhiZCwweGZmLDB4ZTAsMHhhYywweDQzLDB4MDAsMHgwMCwweDNjLDB4MDIsMHg4MCwweDAxLAotMHhhZiwweGIyLDB4MDAsMHgxOCwweGFmLDB4YjEsMHgwMCwweDE0LDB4YWYsMHhiMCwweDAwLDB4MTAsMHhhZiwweGJmLDB4MDAsMHgxYywKLTB4MDAsMHg4MCwweDgwLDB4MjEsMHgyNCwweDUyLDB4OWUsMHgyOCwweDAwLDB4MDAsMHg4OCwweDIxLDB4M2MsMHgwMywweGIwLDB4MDksCi0weDM0LDB4NjMsMHgwMCwweDA2LDB4OGUsMHgwNiwweDAwLDB4MDQsMHg5MCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgyMiwweDAyLAotMHgwMCwweDQ0LDB4MTAsMHgyMywweDI0LDB4NDQsMHgwMCwweDQwLDB4MjgsMHg4MywweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHg3ZiwKLTB4MDAsMHg4MywweDEwLDB4MGEsMHgwMCwweDAyLDB4MTEsMHg4MywweDAwLDB4MDIsMHgxMSwweDgwLDB4MjQsMHg4NCwweGZmLDB4ZmYsCi0weDEwLDB4NDQsMHgwMCwweDY4LDB4MDAsMHgwMCwweDI4LDB4MjEsMHgzYywweDAyLDB4YjAsMHgwMSwweDAwLDB4YzIsMHgxMCwweDIxLAotMHg4YywweDQ0LDB4MDAsMHgwNCwweDNjLDB4MDMsMHg3YywweDAwLDB4MzQsMHg2MywweDAwLDB4ZjAsMHgwMCwweDgzLDB4MTgsMHgyNCwKLTB4YWUsMHgwNCwweDAwLDB4NDQsMHg4YywweDQ0LDB4MDAsMHgwMCwweDEwLDB4NjAsMHgwMCwweDY5LDB4MDAsMHgwMCwweDM4LDB4MjEsCi0weDNjLDB4MDksMHhiMCwweDAzLDB4M2MsMHgwNiwweDdjLDB4MDAsMHgzNSwweDI5LDB4MDAsMHg5OSwweDNjLDB4MGEsMHhiMCwweDAxLAotMHgyNCwweDA4LDB4MDAsMHg0MCwweDM0LDB4YzYsMHgwMCwweGYwLDB4M2MsMHgwYiwweGZmLDB4ZmYsMHgzYywweDBjLDB4MjgsMHgzOCwKLTB4MTYsMHgyMCwweDAwLDB4MDYsMHgyNCwweGE1LDB4MDAsMHgwMSwweDkzLDB4ODIsMHg4MSwweGY2LDB4MjQsMHgxMSwweDAwLDB4MDEsCi0weDI0LDB4NDIsMHgwMCwweDAxLDB4YTEsMHgyMiwweDAwLDB4MDAsMHhhMywweDgyLDB4ODEsMHhmNiwweDhlLDB4MDIsMHgwMCwweDA0LAotMHgyNCwweDA3LDB4MDAsMHgwMSwweDI0LDB4NDIsMHgwMSwweDAwLDB4MzAsMHg0MiwweDNmLDB4ZmYsMHhhZSwweDAyLDB4MDAsMHgwNCwKLTB4MDAsMHg0YSwweDEwLDB4MjEsMHg4YywweDQzLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWUsMHgwMywweDAwLDB4NDQsCi0weDhjLDB4NDQsMHgwMCwweDAwLDB4MTAsMHhhOCwweDAwLDB4MmQsMHgwMCwweDY2LDB4MTgsMHgyNCwweDE0LDB4NjAsMHhmZiwweGVjLAotMHgwMCwweDhiLDB4MTAsMHgyNCwweDE0LDB4NGMsMHhmZiwweGVhLDB4MjQsMHgwMiwweDAwLDB4MDEsMHgxMCwweGUyLDB4MDAsMHgyZiwKLTB4M2MsMHgwMywweGIwLDB4MDksMHg4ZSwweDAyLDB4MDAsMHg0NCwweDhlLDB4MDQsMHgwMCwweDYwLDB4MDAsMHgwMiwweDFlLDB4NDIsCi0weDAwLDB4MDIsMHgxMiwweDAyLDB4MzAsMHg0MiwweDAwLDB4MGYsMHgzMCwweDYzLDB4MDAsMHgwMSwweGFlLDB4MDIsMHgwMCwweDAwLAotMHgxMCwweDQ0LDB4MDAsMHgxYSwweGFlLDB4MDMsMHgwMCwweDU4LDB4OGUsMHgwMiwweDAwLDB4NjQsMHg4ZSwweDA0LDB4MDAsMHg1OCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDgyLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWUsMHgwMCwweDAwLDB4NGMsCi0weGFlLDB4MDAsMHgwMCwweDUwLDB4YWUsMHgwMCwweDAwLDB4NTQsMHhhZSwweDAwLDB4MDAsMHgwYywweDhlLDB4MDMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgxMCwweDgwLDB4MDAsMHg1MCwweDEwLDB4MjEsMHg4YywweDQyLDB4MDAsMHg2OCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDUyLDB4MDAsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweGY4LDB4MDksCi0weDAyLDB4MDAsMHgyMCwweDIxLDB4OGUsMHgwNCwweDAwLDB4NTgsMHg4ZSwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhhZSwweDAzLDB4MDAsMHg2MCwweDA4LDB4MDAsMHgyOCwweGViLDB4YWUsMHgwNCwweDAwLDB4NjQsMHg4ZSwweDAyLDB4MDAsMHg2NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDYyLDB4ZmYsMHhlNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2EsMHgwMiwweDBkLDB4N2MsCi0weDhmLDB4YmYsMHgwMCwweDFjLDB4OGYsMHhiMiwweDAwLDB4MTgsMHg3YiwweGIwLDB4MDAsMHhiYywweDAwLDB4NDMsMHgxMCwweDI2LAotMHgwMCwweDAyLDB4MTAsMHgyYiwweDAzLDB4ZTAsMHgwMCwweDA4LDB4MjcsMHhiZCwweDAwLDB4MjAsMHgzNCwweDYzLDB4MDAsMHgwNiwKLTB4OGUsMHgwNCwweDAwLDB4MDQsMHg5MCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgyMiwweDAyLDB4MDAsMHg0NCwweDEwLDB4MjMsCi0weDI0LDB4NDQsMHgwMCwweDQwLDB4MjgsMHg4MywweDAwLDB4MDAsMHgyNCwweDQyLDB4MDAsMHg3ZiwweDAwLDB4ODMsMHgxMCwweDBhLAotMHgwMCwweDAyLDB4MTEsMHg4MywweDAwLDB4MDIsMHgxMSwweDgwLDB4MDAsMHg4MiwweDIwLDB4MjMsMHgxNCwweDg3LDB4ZmYsMHhjNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZSwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHg2MiwweDAwLDB4MDMsCi0weDE0LDB4NDAsMHgwMCwweDA1LDB4MjQsMHgwMiwweDAwLDB4MGQsMHgxMCwweDYyLDB4MDAsMHgwMywweDI0LDB4MDIsMHgwMCwweDAxLAotMHgwOCwweDAwLDB4MjksMHg0YiwweGEyLDB4MDIsMHgwMCwweDVjLDB4MDgsMHgwMCwweDI5LDB4NGIsMHhhMiwweDAwLDB4MDAsMHg1YywKLTB4M2MsMHgwMiwweGZmLDB4ZmYsMHgwMCwweDgyLDB4MTAsMHgyNCwweDNjLDB4MDMsMHgyOCwweDM4LDB4MTQsMHg0MywweGZmLDB4OTQsCi0weDI0LDB4MDIsMHgwMCwweDAxLDB4MDgsMHgwMCwweDI5LDB4MjMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDIsMHhiMCwweDAzLAotMHgzYywweDAzLDB4ODAsMHgwMSwweDM0LDB4NDIsMHgwMCwweDIwLDB4MjQsMHg2MywweGE1LDB4Y2MsMHhhYywweDQzLDB4MDAsMHgwMCwKLTB4OGMsMHg4MywweDAxLDB4YTgsMHg4YywweDgyLDB4MDEsMHhhYywweDAwLDB4ODAsMHg0MCwweDIxLDB4MTAsMHg2MiwweDAwLDB4MjAsCi0weDAwLDB4MDAsMHgyMCwweDIxLDB4OTMsMHg4MiwweDgxLDB4ZjEsMHgwMCwweDAzLDB4MjgsMHg4MCwweDNjLDB4MDcsMHhiMCwweDA2LAotMHgwMCwweGE4LDB4MTgsMHgyMSwweDI0LDB4MDQsMHgwMCwweDAxLDB4OGMsMHg2NiwweDAwLDB4YTgsMHgxMCwweDQ0LDB4MDAsMHgxYywKLTB4MzQsMHhlNywweDgwLDB4MTgsMHgzYywweDA1LDB4YjAsMHgwMSwweGFmLDB4ODYsMHhiYywweDIwLDB4MDAsMHhjNSwweDI4LDB4MjEsCi0weDhjLDB4YTMsMHgwMCwweDAwLDB4MDAsMHgwNiwweDIwLDB4YzIsMHgzYywweDAyLDB4MDAsMHg4MCwweDAwLDB4MDQsMHgyMiwweDAwLAotMHgwMCwweDgyLDB4MjAsMHgyNSwweGFmLDB4ODMsMHhiYywweDI4LDB4OGMsMHhhMiwweDAwLDB4MDQsMHhhYywweGU0LDB4MDAsMHgwMCwKLTB4OGQsMHgwMywweDAxLDB4YTgsMHhhZiwweDgyLDB4YmMsMHgyNCwweDI0LDB4NjQsMHgwMCwweDAxLDB4MDQsMHg4MCwweDAwLDB4MGEsCi0weDAwLDB4ODAsMHgxMCwweDIxLDB4MDAsMHgwMiwweDExLDB4ODMsMHg4ZCwweDAzLDB4MDEsMHhhYywweDAwLDB4MDIsMHgxMSwweDgwLAotMHgwMCwweDgyLDB4MTAsMHgyMywweDAwLDB4NDMsMHgxOCwweDI2LDB4YWQsMHgwMiwweDAxLDB4YTgsMHgwMCwweDAzLDB4MjAsMHgyYiwKLTB4MDMsMHhlMCwweDAwLDB4MDgsMHgwMCwweDgwLDB4MTAsMHgyMSwweDA4LDB4MDAsMHgyOSwweDk1LDB4MjQsMHg2MiwweDAwLDB4NDAsCi0weDI3LDB4ODIsMHg4OSwweDY4LDB4MDAsMHgwNiwweDIwLDB4YzIsMHgwMCwweDA0LDB4MjIsMHgwMCwweDAwLDB4YTIsMHg0OCwweDIxLAotMHgzYywweDAyLDB4MDAsMHg4MCwweDAwLDB4ODIsMHg1OCwweDI1LDB4OTMsMHg4MiwweDgxLDB4ZjAsMHgzYywweDBhLDB4YjAsMHgwNiwKLTB4M2MsMHgwMywweGIwLDB4MDEsMHgyYywweDQyLDB4MDAsMHgwMiwweDAwLDB4YzMsMHgzOCwweDIxLDB4MzUsMHg0YSwweDgwLDB4MTgsCi0weDE0LDB4NDAsMHhmZiwweGVmLDB4MDAsMHgwMCwweDIwLDB4MjEsMHg4YywweGU1LDB4MDAsMHgwMCwweDhkLDB4MjMsMHgwMCwweDAwLAotMHgyNCwweDAyLDB4YzAsMHgwMCwweDAwLDB4YTIsMHgxMCwweDI0LDB4MDAsMHg0MywweDEwLDB4MjUsMHhhYywweGUyLDB4MDAsMHgwMCwKLTB4OGQsMHgwNCwweDAxLDB4YTgsMHgyNywweDgzLDB4OGEsMHg2OCwweDhjLDB4ZTUsMHgwMCwweDA0LDB4MDAsMHgwNCwweDIwLDB4ODAsCi0weDAwLDB4ODMsMHgyMCwweDIxLDB4OGMsMHg4MiwweDAwLDB4MDAsMHgzYywweDAzLDB4ODAsMHgwMCwweDAwLDB4YTIsMHgxMCwweDI1LAotMHgwMCwweDQzLDB4MTAsMHgyNSwweGFjLDB4ZTIsMHgwMCwweDA0LDB4YWYsMHg4NiwweGJjLDB4MjAsMHg4YywweGUyLDB4MDAsMHgwMCwKLTB4OTMsMHg4NSwweDgxLDB4ZjAsMHhhZiwweDgyLDB4YmMsMHgyOCwweDhjLDB4ZTMsMHgwMCwweDA0LDB4YWQsMHg0YiwweDAwLDB4MDAsCi0weDhkLDB4MDIsMHgwMSwweGE4LDB4YWYsMHg4MywweGJjLDB4MjQsMHgyNCwweGE1LDB4ZmYsMHhmZiwweDI0LDB4NDQsMHgwMCwweDAxLAotMHgyOCwweDgzLDB4MDAsMHgwMCwweDI0LDB4NDIsMHgwMCwweDQwLDB4MDAsMHg4MywweDEwLDB4MGEsMHgwMCwweDAyLDB4MTEsMHg4MywKLTB4MDAsMHgwMiwweDExLDB4ODAsMHgwMCwweDgyLDB4MjAsMHgyMywweGFkLDB4MDQsMHgwMSwweGE4LDB4YTMsMHg4NSwweDgxLDB4ZjAsCi0weDc5LDB4MDIsMHgwZCwweDdjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQzLDB4MTAsMHgyNiwweDA4LDB4MDAsMHgyOSwweDljLAotMHgwMCwweDAyLDB4MjAsMHgyYiwweDNjLDB4MDQsMHhiMCwweDAzLDB4M2MsMHgwNiwweGIwLDB4MDcsMHgzYywweDAyLDB4ODAsMHgwMSwKLTB4MzQsMHhjNiwweDAwLDB4MTgsMHgzNCwweDg0LDB4MDAsMHgyMCwweDI0LDB4NDIsMHhhNywweDU0LDB4MjQsMHgwMywweGZmLDB4ODMsCi0weGFjLDB4ODIsMHgwMCwweDAwLDB4YTAsMHhjMywweDAwLDB4MDAsMHg5MCwweGM0LDB4MDAsMHgwMCwweDI3LDB4YmQsMHhmZiwweGY4LAotMHgzYywweDAzLDB4YjAsMHgwNywweDI0LDB4MDIsMHhmZiwweDgyLDB4YTMsMHhhNCwweDAwLDB4MDAsMHhhMCwweDYyLDB4MDAsMHgwMCwKLTB4OTAsMHg2NCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwNywweDM0LDB4NDIsMHgwMCwweDA4LDB4YTMsMHhhNCwweDAwLDB4MDEsCi0weGEwLDB4NDAsMHgwMCwweDAwLDB4OTAsMHg0MywweDAwLDB4MDAsMHgyNCwweDAyLDB4MDAsMHgwMywweDNjLDB4MDUsMHhiMCwweDA3LAotMHhhMywweGEzLDB4MDAsMHgwMCwweGEwLDB4YzIsMHgwMCwweDAwLDB4OTAsMHhjNCwweDAwLDB4MDAsMHgzNCwweGE1LDB4MDAsMHgxMCwKLTB4MjQsMHgwMiwweDAwLDB4MDYsMHgzYywweDAzLDB4YjAsMHgwNywweGEzLDB4YTQsMHgwMCwweDAwLDB4MzQsMHg2MywweDAwLDB4MzgsCi0weGEwLDB4YTIsMHgwMCwweDAwLDB4OTAsMHg2NCwweDAwLDB4MDAsMHgzYywweDAyLDB4YjAsMHgwNywweDM0LDB4NDIsMHgwMCwweDIwLAotMHhhMywweGE0LDB4MDAsMHgwMCwweGEwLDB4YTAsMHgwMCwweDAwLDB4OTAsMHhhMywweDAwLDB4MDAsMHhhZiwweDgyLDB4YmYsMHgzMCwKLTB4YTMsMHhhMywweDAwLDB4MDAsMHhhMCwweDQwLDB4MDAsMHgwMCwweDkwLDB4NDMsMHgwMCwweDAwLDB4MDMsMHhlMCwweDAwLDB4MDgsCi0weDI3LDB4YmQsMHgwMCwweDA4LH07Ci0KLXU4IFJ0bDgxOTJQY2lFRndEYXRhQXJyYXlbRGF0YUFycmF5TGVuZ3RoUGNpRV0gPSB7Ci0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwOCwweDAwLAotMHgwMiwweGU5LDB4MDEsMHg3NCwweDAyLDB4YWIsMHgwMSwweGM3LDB4MDEsMHg1NSwweDAwLDB4ZTQsMHgwMCwweGFiLDB4MDAsMHg3MiwKLTB4MDAsMHg1NSwweDAwLDB4NGMsMHgwMCwweDRjLDB4MDAsMHg0YywweDAwLDB4NGMsMHgwMCwweDRjLDB4MDIsMHg3NiwweDAxLDB4M2IsCi0weDAwLDB4ZDIsMHgwMCwweDllLDB4MDAsMHg2OSwweDAwLDB4NGYsMHgwMCwweDQ2LDB4MDAsMHgzZiwweDAxLDB4M2IsMHgwMCwweDllLAotMHgwMCwweDY5LDB4MDAsMHg0ZiwweDAwLDB4MzUsMHgwMCwweDI3LDB4MDAsMHgyMywweDAwLDB4MjAsMHgwMSwweDJmLDB4MDAsMHg5OCwKLTB4MDAsMHg2NSwweDAwLDB4NGMsMHgwMCwweDMzLDB4MDAsMHgyNiwweDAwLDB4MjIsMHgwMCwweDFlLDB4MDAsMHg5OCwweDAwLDB4NGMsCi0weDAwLDB4MzMsMHgwMCwweDI2LDB4MDAsMHgxOSwweDAwLDB4MTMsMHgwMCwweDExLDB4MDAsMHgwZiwweDAyLDB4MzksMHgwMSwweDFjLAotMHgwMCwweGJkLDB4MDAsMHg4ZSwweDAwLDB4NWYsMHgwMCwweDQ3LDB4MDAsMHgzZiwweDAwLDB4MzksMHgwMSwweDFjLDB4MDAsMHg4ZSwKLTB4MDAsMHg1ZiwweDAwLDB4NDcsMHgwMCwweDJmLDB4MDAsMHgyMywweDAwLDB4MjAsMHgwMCwweDFjLDB4MDEsMHgxMSwweDAwLDB4ODksCi0weDAwLDB4NWIsMHgwMCwweDQ0LDB4MDAsMHgyZSwweDAwLDB4MjIsMHgwMCwweDFlLDB4MDAsMHgxYiwweDAwLDB4ODksMHgwMCwweDQ0LAotMHgwMCwweDJlLDB4MDAsMHgyMiwweDAwLDB4MTcsMHgwMCwweDExLDB4MDAsMHgwZiwweDAwLDB4MGUsMHgwMiwweGFiLDB4MDIsMHhhYiwKLTB4MDIsMHg2NiwweDAyLDB4NjYsMHgwNywweDA2LDB4MDYsMHgwNiwweDA1LDB4MDYsMHgwNywweDA4LDB4MDQsMHgwNiwweDA3LDB4MDgsCi0weDA5LDB4MGEsMHgwYiwweDBiLDB4NDksMHg2ZSwweDc0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1NCwweDRjLAotMHg0MiwweDRkLDB4NGYsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTQsMHg0YywweDQyLDB4NGMsMHg1ZiwweDY0LDB4NjEsMHg3NCwKLTB4NjEsMHgwMCwweDU0LDB4NGMsMHg0MiwweDUzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHg2NCwweDQ1LDB4NGMsCi0weDVmLDB4NjQsMHg2MSwweDc0LDB4NjEsMHgwMCwweDQxLDB4NjQsMHg0NSwweDUzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0NSwweDc4LDB4NjMsMHg0MywweDZmLDB4NjQsMHg2NSwweDM2LDB4MDAsMHgwMCwweDQ1LDB4NzgsMHg2MywweDQzLDB4NmYsMHg2NCwKLTB4NjUsMHgzNywweDAwLDB4MDAsMHg1MywweDc5LDB4NzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQyLDB4NzAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MiwweDQ5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NDMsMHg3MCwweDU1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZiwweDc2LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDBiLDB4NjMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDJjLAotMHgwMCwweDAwLDB4MDAsMHg1OCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDAwLDB4MDAsMHg2MCwKLTB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMSwweDIwLDB4MDAsMHgwMCwweDAxLDB4ODAsCi0weDAwLDB4MDAsMHgwMSwweGIwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAwLDB4MDAsMHgwMCwweDljLAotMHgwMCwweDAwLDB4MDAsMHhkMCwweDAwLDB4MDAsMHgwMSwweDM4LDB4MDAsMHgwMCwweDAxLDB4YTAsMHgwMCwweDAwLDB4MDEsMHhkNCwKLTB4MDAsMHgwMCwweDAyLDB4MDgsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAwLDB4MDAsMHgwMCwweGQwLDB4MDAsMHgwMCwweDAxLDB4MzgsCi0weDAwLDB4MDAsMHgwMSwweGEwLDB4MDAsMHgwMCwweDAyLDB4NmYsMHgwMCwweDAwLDB4MDMsMHg0MCwweDAwLDB4MDAsMHgwMywweGE4LAotMHgwMCwweDAwLDB4MDQsMHgxMCwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDEsMHgwMSwweDAyLDB4MDIsMHgwMywweDAzLDB4MDQsMHgwNCwKLTB4MDEsMHgwMSwweDAyLDB4MDIsMHgwMywweDAzLDB4MDQsMHgwNCwweDAyLDB4MDMsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDcsMHg2YywweDgwLDB4MDAsMHgwNywweDgwLAotMHg4MCwweDAwLDB4MDcsMHg4MCwweDgwLDB4MDAsMHgwNywweDcwLDB4ODAsMHgwMCwweDA3LDB4NzAsMHg4MCwweDAwLDB4MDcsMHg5NCwKLTB4ODAsMHgwMCwweDU2LDB4YjAsMHg4MCwweDAwLDB4NTcsMHgwOCwweDgwLDB4MDAsMHg1NywweDMwLDB4ODAsMHgwMCwweDU4LDB4MjgsCi0weDgwLDB4MDAsMHg1OCwweGUwLDB4ODAsMHgwMCwweDU5LDB4ODgsMHg4MCwweDAwLDB4NTksMHhmYywweDgwLDB4MDAsMHg1YiwweDA4LAotMHg4MCwweDAwLDB4NWIsMHg0MCwweDgwLDB4MDAsMHg1YiwweDU0LDB4ODAsMHgwMCwweDViLDB4NjgsMHg4MCwweDAwLDB4NWMsMHg1MCwKLTB4ODAsMHgwMCwweDVjLDB4OTAsMHg4MCwweDAwLDB4NWQsMHg0NCwweDgwLDB4MDAsMHg1ZCwweDZjLDB4ODAsMHgwMCwweDU2LDB4NzAsCi0weDgwLDB4MDAsMHg1ZCwweGJjLDB4ODAsMHgwMCwweDY0LDB4NDgsMHg4MCwweDAwLDB4NjQsMHhjMCwweDgwLDB4MDAsMHg2NCwweGNjLAotMHg4MCwweDAwLDB4NjQsMHhkOCwweDgwLDB4MDAsMHg2NCwweDYwLDB4ODAsMHgwMCwweDY0LDB4NjAsMHg4MCwweDAwLDB4NjQsMHg2MCwKLTB4ODAsMHgwMCwweDY0LDB4NjAsMHg4MCwweDAwLDB4NjQsMHg2MCwweDgwLDB4MDAsMHg2NCwweDYwLDB4ODAsMHgwMCwweDY0LDB4NjAsCi0weDgwLDB4MDAsMHg2NCwweDYwLDB4ODAsMHgwMCwweDY0LDB4NjAsMHg4MCwweDAwLDB4NjQsMHg2MCwweDgwLDB4MDAsMHg2NCwweDYwLAotMHg4MCwweDAwLDB4NjQsMHg2MCwweDgwLDB4MDAsMHg2NCwweGU0LDB4ODAsMHgwMCwweDY0LDB4ZjAsMHg4MCwweDAwLDB4NjQsMHhmYywKLTB4ODAsMHgwMCwweDg3LDB4YTQsMHg4MCwweDAwLDB4ODcsMHhhNCwweDgwLDB4MDAsMHg4NywweGE0LDB4ODAsMHgwMCwweDg3LDB4ZDgsCi0weDgwLDB4MDAsMHg4OCwweDE4LDB4ODAsMHgwMCwweDg4LDB4NTAsMHg4MCwweDAwLDB4ODgsMHg4MCwweDgwLDB4MDAsMHg4OCwweGIwLAotMHg4MCwweDAwLDB4ODgsMHhjNCwweDgwLDB4MDAsMHg4OSwweDJjLDB4ODAsMHgwMCwweDg5LDB4NDAsMHg4MCwweDAwLDB4ODksMHg3YywKLTB4ODAsMHgwMCwweDg5LDB4ODQsMHg4MCwweDAwLDB4ODksMHhjMCwweDgwLDB4MDAsMHg4OSwweGQ0LDB4ODAsMHgwMCwweDg5LDB4ZGMsCi0weDgwLDB4MDAsMHg4OSwweGU0LDB4ODAsMHgwMCwweDg5LDB4ZTQsMHg4MCwweDAwLDB4ODksMHhlNCwweDgwLDB4MDAsMHg4OSwweGU0LAotMHg4MCwweDAwLDB4OGEsMHgxNCwweDgwLDB4MDAsMHg4YSwweDI4LDB4ODAsMHgwMCwweDhhLDB4M2MsMHg4MCwweDAwLDB4ODYsMHhlOCwKLTB4ODAsMHgwMCwweDhkLDB4NjgsMHg4MCwweDAwLDB4OGQsMHg2OCwweDgwLDB4MDAsMHg4ZCwweDY4LDB4ODAsMHgwMCwweDhkLDB4OWMsCi0weDgwLDB4MDAsMHg4ZCwweGRjLDB4ODAsMHgwMCwweDhlLDB4MTQsMHg4MCwweDAwLDB4OGUsMHg0NCwweDgwLDB4MDAsMHg4ZSwweDc0LAotMHg4MCwweDAwLDB4OGUsMHg4OCwweDgwLDB4MDAsMHg4ZSwweGYwLDB4ODAsMHgwMCwweDhmLDB4MDQsMHg4MCwweDAwLDB4OGYsMHg0MCwKLTB4ODAsMHgwMCwweDhmLDB4NDgsMHg4MCwweDAwLDB4OGYsMHg4NCwweDgwLDB4MDAsMHg4ZiwweDk4LDB4ODAsMHgwMCwweDhmLDB4YTAsCi0weDgwLDB4MDAsMHg4ZiwweGE4LDB4ODAsMHgwMCwweDhmLDB4YTgsMHg4MCwweDAwLDB4OGYsMHhhOCwweDgwLDB4MDAsMHg4ZiwweGE4LAotMHg4MCwweDAwLDB4OGYsMHhkOCwweDgwLDB4MDAsMHg4ZiwweGVjLDB4ODAsMHgwMCwweDkwLDB4MDAsMHg4MCwweDAwLDB4OGIsMHg4OCwKLX07Ci0KIHUzMiBSdGw4MTkyUGNpRVBIWV9SRUdBcnJheVtQSFlfUkVHQXJyYXlMZW5ndGhQY2lFXSA9IHsweDAsfTsKIAogdTMyIFJ0bDgxOTJQY2lFUEhZX1JFR18xVDJSQXJyYXlbUEhZX1JFR18xVDJSQXJyYXlMZW5ndGhQY2lFXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcjgxOTJFX3BoeS5jCmluZGV4IDVkNmQzMDQuLjg4NDg5MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9yODE5MkVfcGh5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3I4MTkyRV9waHkuYwpAQCAtNzI5LDcgKzcyOSw2IEBACiB7CiAKIAlpbnQgaTsKLQl1OCByZXQgPSAwOwogCiAJc3dpdGNoIChlUkZQYXRoKSB7CiAJY2FzZSBSRjkwX1BBVEhfQToKQEAgLTc4Nyw3ICs3ODYsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiB9CiBzdGF0aWMgdm9pZCBydGw4MTkyX1NldFR4UG93ZXJMZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjaGFubmVsKQpAQCAtMTU1NSw3ICsxNTU0LDcgQEAKIAogCQlkZWZhdWx0OgogCQkJYlJlc3VsdCA9IGZhbHNlOwotCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCk6IHVua25vdyBzdGF0ZSIKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCAiU2V0UkZQb3dlclN0YXRlODE5MCgpOiB1bmtub3duIHN0YXRlIgogCQkJCSAiIHRvIHNldDogMHglWCEhIVxuIiwgZVJGUG93ZXJTdGF0ZSk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3J0bF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX2NvcmUuYwppbmRleCBjMDFhYmMyLi4yOTIwZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX2NvcmUuYwpAQCAtMTkxNSw4ICsxOTE1LDcgQEAKIAltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5jYiksICZkZXYsIHNpemVvZihkZXYpKTsKIAlpZiAocXVldWVfaW5kZXggPT0gVFhDTURfUVVFVUUpIHsKIAkJcnRsODE5Ml90eF9jbWQoZGV2LCBza2IpOwotCQlyZXQgPSAwOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQl0Y2JfZGVzYy0+UkFUUkluZGV4ID0gNzsKIAkJdGNiX2Rlc2MtPmJUeERpc2FibGVSYXRlRmFsbEJhY2sgPSAxOwpAQCAtMjkyNiw4ICsyOTI1LDcgQEAKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZydGw4MTkyX25ldGRldl9vcHM7CiAKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKQotCQkJCSAmcjgxOTJfd3hfaGFuZGxlcnNfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcjgxOTJfd3hfaGFuZGxlcnNfZGVmOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmcnRsODE5eF9ldGh0b29sX29wczsKIAogCWRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKQEAgLTMwMzAsNyArMzAyOCw3IEBACiAJCVJUX1RSQUNFKENPTVBfRVJSLCAiRVJSISEhICVzKCk6IERyaXZlciBpcyBhbHJlYWR5IGRvd24hXG4iLAogCQkJIF9fZnVuY19fKTsKIAkJcHJpdi0+YmRpc2FibGVfbmljID0gZmFsc2U7Ci0JCXJldHVybiBSVF9TVEFUVVNfRkFJTFVSRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCVJUX1RSQUNFKENPTVBfUFMsICI9PT09PT09PT09PT4lcygpXG4iLCBfX2Z1bmNfXyk7CkBAIC0zMDQwLDcgKzMwMzgsNyBAQAogCQlSVF9UUkFDRShDT01QX0VSUiwgIkVSUiEhISAlcygpOiBpbml0aWFsaXphdGlvbiBpcyBmYWlsZWQhXG4iLAogCQkJIF9fZnVuY19fKTsKIAkJcHJpdi0+YmRpc2FibGVfbmljID0gZmFsc2U7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAlSVF9UUkFDRShDT01QX0lOSVQsICJzdGFydCBhZGFwdGVyIGZpbmlzaGVkXG4iKTsKIAlSVF9DTEVBUl9QU19MRVZFTChwUFNDLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9ydGxfY29yZS5oCmluZGV4IDM1ZmMxMTYuLmQxNDM4YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9ydGxfY29yZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9ydGxfY29yZS5oCkBAIC01ODIsNyArNTgyLDYgQEAKIAogCXN0cnVjdCBydF9maXJtd2FyZQkJCSpwRmlybXdhcmU7CiAJZW51bSBydGw4MTl4X2xvb3BiYWNrIExvb3BiYWNrTW9kZTsKLQllbnVtIGZpcm13YXJlX3NvdXJjZSBmaXJtd2FyZV9zb3VyY2U7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJCXdhdGNoX2RvZ190aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJCWZzeW5jX3RpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3J0bF93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3J0bF93eC5jCmluZGV4IDQ5ODk5NWQuLjUyODcwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9ydGxfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX3d4LmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgInJ0bF9jb3JlLmgiCisjaW5jbHVkZSAicnRsX3d4LmgiCiAKICNkZWZpbmUgUkFURV9DT1VOVCAxMgogc3RhdGljIHUzMiBydGw4MTkyX3JhdGVzW10gPSB7CkBAIC0xMTMwLDExICsxMTMxLDE4IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBydGxsaWJfcHJpdihkZXYpOwogCXN0cnVjdCBydGxsaWJfZGV2aWNlICppZWVlID0gcHJpdi0+cnRsbGliOwogCi0JdTMyICppbmZvX2J1ZiA9ICh1MzIgKikod3JxdS0+ZGF0YS5wb2ludGVyKTsKKwl1MzIgaW5mb19idWZbM107CiAKLQl1MzIgb2lkID0gaW5mb19idWZbMF07Ci0JdTMyIGJQcm9taXNjdW91c09uID0gaW5mb19idWZbMV07Ci0JdTMyIGJGaWx0ZXJTb3VyY2VTdGF0aW9uRnJhbWUgPSBpbmZvX2J1ZlsyXTsKKwl1MzIgb2lkOworCXUzMiBiUHJvbWlzY3VvdXNPbjsKKwl1MzIgYkZpbHRlclNvdXJjZVN0YXRpb25GcmFtZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihpbmZvX2J1Ziwgd3JxdS0+ZGF0YS5wb2ludGVyLCBzaXplb2YoaW5mb19idWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlvaWQgPSBpbmZvX2J1ZlswXTsKKwliUHJvbWlzY3VvdXNPbiA9IGluZm9fYnVmWzFdOworCWJGaWx0ZXJTb3VyY2VTdGF0aW9uRnJhbWUgPSBpbmZvX2J1ZlsyXTsKIAogCWlmIChPSURfUlRfSU5URUxfUFJPTUlTQ1VPVVNfTU9ERSA9PSBvaWQpIHsKIAkJaWVlZS0+SW50ZWxQcm9taXNjdW91c01vZGVJbmZvLmJQcm9taXNjdW91c09uID0KQEAgLTEyMTMsNyArMTIyMSw3IEBACiB9OwogCiAvKgotICogdGhlIGZvbGxvd2luZyBydWxlIG5lZWQgdG8gYmUgZm9sbHdpbmcsCisgKiB0aGUgZm9sbG93aW5nIHJ1bGUgbmVlZCB0byBiZSBmb2xsb3dpbmcsCiAgKiBPZGQgOiBnZXQgKHdvcmxkIGFjY2VzcyksCiAgKiBldmVuIDogc2V0IChyb290IGFjY2VzcykKICAqICovCkBAIC0xMzIwLDcgKzEzMjgsNyBAQAogCXJldHVybiB3c3RhdHM7CiB9CiAKLXN0cnVjdCBpd19oYW5kbGVyX2RlZiAgcjgxOTJfd3hfaGFuZGxlcnNfZGVmID0geworY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHI4MTkyX3d4X2hhbmRsZXJzX2RlZiA9IHsKIAkuc3RhbmRhcmQgPSByODE5Ml93eF9oYW5kbGVycywKIAkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShyODE5Ml93eF9oYW5kbGVycyksCiAJLnByaXZhdGUgPSByODE5Ml9wcml2YXRlX2hhbmRsZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX3d4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5MmUvcnRsX3d4LmgKaW5kZXggNmE1MWEyNS4uNTgzOTg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bDgxOTJlL3J0bF93eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTkyZS9ydGxfd3guaApAQCAtMjQsOCArMjQsNyBAQAogc3RydWN0IGl3X2hhbmRsZXJfZGVmOwogc3RydWN0IGl3X3N0YXRpc3RpY3M7CiAKLWV4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcjgxOTJfd3hfaGFuZGxlcnNfZGVmOwotc3RydWN0IGl3X3N0YXRpc3RpY3MgKnI4MTkyX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcjgxOTJfd3hfaGFuZGxlcnNfZGVmOwogdTE2IHJ0bDgxOTJfMTFuX3VzZXJfc2hvd19yYXRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IGFkYzZjYzcuLjQ4YTE0MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTl4X0JBUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0xMDksOSArMTA5LDkgQEAKIAlCQVJlcS0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoUlRMTElCX1NUWVBFX01BTkFHRV9BQ1QpOwogCiAJdGFnID0gKHU4ICopc2tiX3B1dChza2IsIDkpOwotCSp0YWcgKys9IEFDVF9DQVRfQkE7Ci0JKnRhZyArKz0gdHlwZTsKLQkqdGFnICsrPSBwQkEtPkRpYWxvZ1Rva2VuOworCSp0YWcrKyA9IEFDVF9DQVRfQkE7CisJKnRhZysrID0gdHlwZTsKKwkqdGFnKysgPSBwQkEtPkRpYWxvZ1Rva2VuOwogCiAJaWYgKEFDVF9BRERCQVJTUCA9PSB0eXBlKSB7CiAJCVJUX1RSQUNFKENPTVBfREJHLCAiPT09PT50byBzZW5kIEFEREJBUlNQXG4iKTsKQEAgLTE3NSw4ICsxNzUsOCBAQAogCiAJdGFnID0gKHU4ICopc2tiX3B1dChza2IsIDYpOwogCi0JKnRhZyArKz0gQUNUX0NBVF9CQTsKLQkqdGFnICsrPSBBQ1RfREVMQkE7CisJKnRhZysrID0gQUNUX0NBVF9CQTsKKwkqdGFnKysgPSBBQ1RfREVMQkE7CiAKIAl0bXAgPSBEZWxiYVBhcmFtU2V0LnNob3J0RGF0YTsKIAltZW1jcHkodGFnLCAodTggKikmdG1wLCAyKTsKQEAgLTIzMCw4ICsyMzAsOCBAQAogCWlmIChza2IpCiAJCXNvZnRtYWNfbWdtdF94bWl0KHNrYiwgaWVlZSk7CiAJZWxzZQotCQlSVExMSUJfREVCVUcoUlRMTElCX0RMX0VSUiwgImFsbG9jIHNrYiBlcnJvciBpbiBmdW5jIgotCQkJICAgICAidGlvbiAlcygpXG4iLCBfX2Z1bmNfXyk7CisJCVJUTExJQl9ERUJVRyhSVExMSUJfRExfRVJSLCAiYWxsb2Mgc2tiIGVycm9yIGluIGZ1bmN0aW9uIgorCQkJICAgICAiICVzKClcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsODE5eF9UU1Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IDI5NjA4ZTUuLjUyYjI5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTl4X1RTUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGw4MTl4X1RTUHJvYy5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAkJaWYgKGluZGV4ID4gUkVPUkRFUl9XSU5fU0laRSkgewogCQkJUlRMTElCX0RFQlVHKFJUTExJQl9ETF9FUlIsICJSeFJlb3JkZXJJbmRpY2F0ZVBhY2tldCgpOiIKLQkJCQkgICAgICIgUnggUmVvcmVyIHN0cnVjdCBidWZmZXIgZnVsbCEhXG4iKTsKKwkJCQkgICAgICIgUnggUmVvcmRlciBzdHJ1Y3QgYnVmZmVyIGZ1bGwhIVxuIik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaWVlZS0+cmVvcmRlcl9zcGlubG9jayksCiAJCQkJCSAgICAgICBmbGFncyk7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsbGliX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsbGliX3J4LmMKaW5kZXggNmM4YThlMS4uNjBkZTU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bGxpYl9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGxsaWJfcnguYwpAQCAtNzEyLDcgKzcxMiw3IEBACiAKIAkJaWYgKGluZGV4ID4gUkVPUkRFUl9XSU5fU0laRSkgewogCQkJUlRMTElCX0RFQlVHKFJUTExJQl9ETF9FUlIsICJSeFJlb3JkZXJJbmRpY2F0ZVBhY2tldCgpOiIKLQkJCQkgICAgICIgUnggUmVvcmVyIHN0cnVjdCBidWZmZXIgZnVsbCEhXG4iKTsKKwkJCQkgICAgICIgUnggUmVvcmRlciBzdHJ1Y3QgYnVmZmVyIGZ1bGwhIVxuIik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaWVlZS0+cmVvcmRlcl9zcGlubG9jayksCiAJCQkJCSAgICAgICBmbGFncyk7CiAJCQlyZXR1cm47CkBAIC0xNTg5LDcgKzE1ODksNiBAQAogewogCXN0cnVjdCBydGxsaWJfcW9zX2FjX3BhcmFtZXRlciAqYWNfcGFyYW1zOwogCXN0cnVjdCBydGxsaWJfcW9zX3BhcmFtZXRlcnMgKnFvc19wYXJhbSA9ICYocW9zX2RhdGEtPnBhcmFtZXRlcnMpOwotCWludCByYyA9IDA7CiAJaW50IGk7CiAJdTggYWNpOwogCXU4IGFjbTsKQEAgLTE2NDAsNyArMTYzOSw3IEBACiAJCSAgICAoYWNfcGFyYW1zLT5hY2lfYWlmc24gJiAweDEwKSA/IDB4MDEgOiAweDAwOwogCQlxb3NfcGFyYW0tPnR4X29wX2xpbWl0W2FjaV0gPSBhY19wYXJhbXMtPnR4X29wX2xpbWl0OwogCX0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcnRsbGliX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGxsaWJfc29mdG1hYy5jCmluZGV4IDRiZjcyYmMuLjY4NGNlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGxsaWJfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGxsaWJfc29mdG1hYy5jCkBAIC01NDMsNyArNTQzLDcgQEAKIAkJCQlnb3RvIG91dDsgLyogc2NhbiBjb21wbGV0ZWQgKi8KIAkJfSB3aGlsZSAoIWllZWUtPmFjdGl2ZV9jaGFubmVsX21hcFtjaF0pOwogCi0JCS8qIHRoaXMgZnVjdGlvbiBjYW4gYmUgY2FsbGVkIGluIHR3byBzaXR1YXRpb25zCisJCS8qIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBpbiB0d28gc2l0dWF0aW9ucwogCQkgKiAxLSBXZSBoYXZlIHN3aXRjaGVkIHRvIGFkLWhvYyBtb2RlIGFuZCB3ZSBhcmUKIAkJICogICAgcGVyZm9ybWluZyBhIGNvbXBsZXRlIHN5bmNybyBzY2FuIGJlZm9yZSBjb25jbHVkZQogCQkgKiAgICB0aGVyZSBhcmUgbm8gaW50ZXJlc3RpbmcgY2VsbCBhbmQgdG8gY3JlYXRlIGEKQEAgLTMyMzksNyArMzIzOSw2IEBACiAJc3RydWN0IHJ0bGxpYl9zZWN1cml0eSBzZWMgPSB7CiAJCS5mbGFncyA9IFNFQ19BVVRIX01PREUsCiAJfTsKLQlpbnQgcmV0ID0gMDsKIAogCWlmICh2YWx1ZSAmIEFVVEhfQUxHX1NIQVJFRF9LRVkpIHsKIAkJc2VjLmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwpAQCAtMzI1OSw3ICszMjU4LDcgQEAKIAlpZiAoaWVlZS0+c2V0X3NlY3VyaXR5KQogCQlpZWVlLT5zZXRfc2VjdXJpdHkoaWVlZS0+ZGV2LCAmc2VjKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnRsbGliX3dwYV9zZXRfcGFyYW0oc3RydWN0IHJ0bGxpYl9kZXZpY2UgKmllZWUsIHU4IG5hbWUsIHUzMiB2YWx1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9ydGxsaWJfc29mdG1hY193eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bGxpYl9zb2Z0bWFjX3d4LmMKaW5kZXggZTZhZjhjZi4uNjViNjUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bGxpYl9zb2Z0bWFjX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3J0bGxpYl9zb2Z0bWFjX3d4LmMKQEAgLTYyOCw4ICs2MjgsNiBAQAogCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlpbnQgcmV0ID0gMDsKLQogCWRvd24oJmllZWUtPnd4X3NlbSk7CiAKIAlpZiAoaWVlZS0+cHMgPT0gUlRMTElCX1BTX0RJU0FCTEVEKSB7CkBAIC02NTcsNyArNjU1LDcgQEAKIAogZXhpdDoKIAl1cCgmaWVlZS0+d3hfc2VtKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiB9CiBFWFBPUlRfU1lNQk9MKHJ0bGxpYl93eF9nZXRfcG93ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjA3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9LY29uZmlnCkBAIC0wLDAgKzEsMTUgQEAKK2NvbmZpZyBSODE5MkVFCisJdHJpc3RhdGUgIlJlYWx0ZWsgUlRMODE5MkVFIFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlciIKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOICYmIE1BQzgwMjExCisJZGVwZW5kcyBvbiBtCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBXRVhUX1BSSVYKKwlzZWxlY3QgRUVQUk9NXzkzQ1g2CisJc2VsZWN0IENSWVBUTworCXNlbGVjdCBGV19MT0FERVIKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgxOTJFRSA4MDIuMTEgUENJZQorCXdpcmVsZXNzIG5ldHdvcmsgYWRhcHRlcnMuCisKKwlJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCByODE5MmVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTcwODYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9NYWtlZmlsZQpAQCAtMCwwICsxLDQwIEBACisKK1BDSV9NQUlOX09CSlMJOj0gYmFzZS5vCVwKKwkJY2FtLm8JXAorCQljb3JlLm8JXAorCQlkZWJ1Zy5vCVwKKwkJZWZ1c2UubwlcCisJCXBjaS5vCVwKKwkJcHMubwlcCisJCXJjLm8JXAorCQlyZWdkLm8JXAorCQlzdGF0cy5vCisKK1BDSV84MTkyRUVfSEFMX09CSlM6PQkJXAorCXJ0bDgxOTJlZS9kbS5vCQlcCisJcnRsODE5MmVlL2Z3Lm8JCVwKKwlydGw4MTkyZWUvaHcubwkJXAorCXJ0bDgxOTJlZS9sZWQubwkJXAorCXJ0bDgxOTJlZS9waHkubwkJXAorCXJ0bDgxOTJlZS9wd3JzZXEubwlcCisJcnRsODE5MmVlL3B3cnNlcWNtZC5vCVwKKwlydGw4MTkyZWUvcmYubwkJXAorCXJ0bDgxOTJlZS9zdy5vCQlcCisJcnRsODE5MmVlL3RhYmxlLm8JXAorCXJ0bDgxOTJlZS90cngubworCisKKworQlRfQ09FWElTVF9PQkpTOj0JYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5vXAorCQkJYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMWFudC5vXAorCQkJYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMmFudC5vXAorCQkJYnRjb2V4aXN0L2hhbGJ0Yzg4MjFhMWFudC5vXAorCQkJYnRjb2V4aXN0L2hhbGJ0Yzg4MjFhMmFudC5vXAorCQkJYnRjb2V4aXN0L2hhbGJ0Y291dHNyYy5vXAorCQkJYnRjb2V4aXN0L3J0bF9idGMubworCityODE5MmVlLW9ianMgKz0gJChQQ0lfTUFJTl9PQkpTKSAkKFBDSV84MTkyRUVfSEFMX09CSlMpICQoQlRfQ09FWElTVF9PQkpTKQorCitvYmotJChDT05GSUdfUjgxOTJFRSkgKz0gcjgxOTJlZS5vCisKK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjIwOTJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9UT0RPCkBAIC0wLDAgKzEsMTIgQEAKK1RPRE86CistIGNvbnZlcnQgYW55IHJlbWFpbmluZyB1bnVzdWFsIHZhcmlhYmxlIHR5cGVzCistIGZpbmQgY29kZXMgdGhhdCBjYW4gdXNlICVwTSBhbmQgJU5waCBmb3JtYXR0aW5nCistIGNoZWNrcGF0Y2gucGwgZml4ZXMgLSBtb3N0IG9mIHRoZSByZW1haW5pbmcgb25lcyBhcmUgbGluZXMgdG9vIGxvbmcuIE1hbnkKKyAgb2YgdGhlbSB3aWxsIHJlcXVpcmUgcmVmYWN0b3JpbmcKKy0gbWVyZ2UgUmVhbHRlaydzIGJ1Z2ZpeGVzIGFuZCBuZXcgZmVhdHVyZXMgaW50byB0aGUgZHJpdmVyCistIENvbnZlcnQgdGhlIHZlcnNpb25zIG9mIHJ0bHdpZmkgYW5kIGJ0Y29leGlzdCBpbiBkcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpLy4uLgorICB0byB3b3JrIHdpdGggdGhlIFJUTDgxOTJFRQorLSBtb3ZlIHRoaXMgZHJpdmVyIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkKKworUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXguY29tPiwKK2FuZCBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9iYXNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2Jhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGFkZTIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9iYXNlLmMKQEAgLTAsMCArMSwxODUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgIndpZmkuaCIKKyNpbmNsdWRlICJyYy5oIgorI2luY2x1ZGUgImJhc2UuaCIKKyNpbmNsdWRlICJlZnVzZS5oIgorI2luY2x1ZGUgImNhbS5oIgorI2luY2x1ZGUgInBzLmgiCisjaW5jbHVkZSAicmVnZC5oIgorI2luY2x1ZGUgInBjaS5oIgorCisvKgorICpOT1RJQ0UhISE6IFRoaXMgZmlsZSB3aWxsIGJlIHZlcnkgYmlnLCB3ZSBoc291bGQKKyAqa2VlcCBpdCBjbGVhciB1bmRlciBmb2xsd2luZyByb2xlczoKKyAqCisgKlRoaXMgZmlsZSBpbmNsdWRlIGZvbGx3aW5nIHBhcnQsIHNvLCBpZiB5b3UgYWRkIG5ldworICpmdW5jdGlvbnMgaW50byB0aGlzIGZpbGUsIHBsZWFzZSBjaGVjayB3aGljaCBwYXJ0IGl0CisgKnNob3VsZCBpbmNsdWRlcy4gb3IgY2hlY2sgaWYgeW91IHNob3VsZCBhZGQgbmV3IHBhcnQKKyAqZm9yIHRoaXMgZmlsZToKKyAqCisgKjEpIG1hYzgwMjExIGluaXQgZnVuY3Rpb25zCisgKjIpIHR4IGluZm9ybWF0aW9uIGZ1bmN0aW9ucworICozKSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGNvcmUuYworICo0KSB3cSAmIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9ucworICo1KSBmcmFtZSBwcm9jZXNzIGZ1bmN0aW9ucworICo2KSBJT1QgZnVuY3Rpb25zCisgKjcpIHN5c2ZzIGZ1bmN0aW9ucworICo4KSB2aWYgZnVuY3Rpb25zCisgKjkpIC4uLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtYWM4MDIxMSBpbml0IGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHJ0bF9jaGFubmVsdGFibGVfMmdbXSA9IHsKKwl7LmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSx9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCx9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MzcsIC5od192YWx1ZSA9IDYsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNyx9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDksfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ2NywgLmh3X3ZhbHVlID0gMTIsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgcnRsX2NoYW5uZWx0YWJsZV81Z1tdID0geworCXsuY2VudGVyX2ZyZXEgPSA1MTgwLCAuaHdfdmFsdWUgPSAzNix9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjAwLCAuaHdfdmFsdWUgPSA0MCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjIwLCAuaHdfdmFsdWUgPSA0NCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjQwLCAuaHdfdmFsdWUgPSA0OCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjYwLCAuaHdfdmFsdWUgPSA1Mix9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjgwLCAuaHdfdmFsdWUgPSA1Nix9LAorCXsuY2VudGVyX2ZyZXEgPSA1MzAwLCAuaHdfdmFsdWUgPSA2MCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MzIwLCAuaHdfdmFsdWUgPSA2NCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTAwLCAuaHdfdmFsdWUgPSAxMDAsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTUyMCwgLmh3X3ZhbHVlID0gMTA0LH0sCisJey5jZW50ZXJfZnJlcSA9IDU1NDAsIC5od192YWx1ZSA9IDEwOCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTYwLCAuaHdfdmFsdWUgPSAxMTIsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTU4MCwgLmh3X3ZhbHVlID0gMTE2LH0sCisJey5jZW50ZXJfZnJlcSA9IDU2MDAsIC5od192YWx1ZSA9IDEyMCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjIwLCAuaHdfdmFsdWUgPSAxMjQsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTY0MCwgLmh3X3ZhbHVlID0gMTI4LH0sCisJey5jZW50ZXJfZnJlcSA9IDU2NjAsIC5od192YWx1ZSA9IDEzMix9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjgwLCAuaHdfdmFsdWUgPSAxMzYsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTcwMCwgLmh3X3ZhbHVlID0gMTQwLH0sCisJey5jZW50ZXJfZnJlcSA9IDU3NDUsIC5od192YWx1ZSA9IDE0OSx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NzY1LCAuaHdfdmFsdWUgPSAxNTMsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTc4NSwgLmh3X3ZhbHVlID0gMTU3LH0sCisJey5jZW50ZXJfZnJlcSA9IDU4MDUsIC5od192YWx1ZSA9IDE2MSx9LAorCXsuY2VudGVyX2ZyZXEgPSA1ODI1LCAuaHdfdmFsdWUgPSAxNjUsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsX3JhdGV0YWJsZV8yZ1tdID0geworCXsuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAweDAwLH0sCisJey5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDB4MDEsfSwKKwl7LmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMHgwMix9LAorCXsuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMHgwMyx9LAorCXsuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAweDA0LH0sCisJey5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDB4MDUsfSwKKwl7LmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDB4MDYsfSwKKwl7LmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDB4MDcsfSwKKwl7LmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDB4MDgsfSwKKwl7LmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDB4MDksfSwKKwl7LmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDB4MGEsfSwKKwl7LmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDB4MGIsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsX3JhdGV0YWJsZV81Z1tdID0geworCXsuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAweDA0LH0sCisJey5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDB4MDUsfSwKKwl7LmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDB4MDYsfSwKKwl7LmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDB4MDcsfSwKKwl7LmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDB4MDgsfSwKKwl7LmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDB4MDksfSwKKwl7LmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDB4MGEsfSwKKwl7LmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDB4MGIsfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHJ0bF9iYW5kXzJnaHogPSB7CisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLAorCisJLmNoYW5uZWxzID0gcnRsX2NoYW5uZWx0YWJsZV8yZywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocnRsX2NoYW5uZWx0YWJsZV8yZyksCisKKwkuYml0cmF0ZXMgPSBydGxfcmF0ZXRhYmxlXzJnLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShydGxfcmF0ZXRhYmxlXzJnKSwKKworCS5odF9jYXAgPSB7MH0sCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBydGxfYmFuZF81Z2h6ID0geworCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwKKworCS5jaGFubmVscyA9IHJ0bF9jaGFubmVsdGFibGVfNWcsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJ0bF9jaGFubmVsdGFibGVfNWcpLAorCisJLmJpdHJhdGVzID0gcnRsX3JhdGV0YWJsZV81ZywKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsX3JhdGV0YWJsZV81ZyksCisKKwkuaHRfY2FwID0gezB9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHRpZF90b19hY1tdID0geworCTIsIC8qIElFRUU4MDIxMV9BQ19CRSAqLworCTMsIC8qIElFRUU4MDIxMV9BQ19CSyAqLworCTMsIC8qIElFRUU4MDIxMV9BQ19CSyAqLworCTIsIC8qIElFRUU4MDIxMV9BQ19CRSAqLworCTEsIC8qIElFRUU4MDIxMV9BQ19WSSAqLworCTEsIC8qIElFRUU4MDIxMV9BQ19WSSAqLworCTAsIC8qIElFRUU4MDIxMV9BQ19WTyAqLworCTAsIC8qIElFRUU4MDIxMV9BQ19WTyAqLworfTsKKwordTggcnRsOTJlX3RpZF90b19hYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdGlkKQoreworCXJldHVybiB0aWRfdG9fYWNbdGlkXTsKK30KKworc3RhdGljIHZvaWQgX3J0bF9pbml0X2h3X2h0X2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXApCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlodF9jYXAtPmh0X3N1cHBvcnRlZCA9IHRydWU7CisJaHRfY2FwLT5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CisJICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKKwkgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfAorCSAgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MCB8IElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVOworCisJaWYgKHJ0bHByaXYtPnJ0bGhhbC5kaXNhYmxlX2Ftc2R1XzhrKQorCQlodF9jYXAtPmNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFU7CisKKwkvKgorCSAqTWF4aW11bSBsZW5ndGggb2YgQU1QRFUgdGhhdCB0aGUgU1RBIGNhbiByZWNlaXZlLgorCSAqTGVuZ3RoID0gMiBeICgxMyArIG1heF9hbXBkdV9sZW5ndGhfZXhwKSAtIDEgKG9jdGV0cykKKwkgKi8KKwlodF9jYXAtPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOworCisJLypNaW5pbXVtIE1QRFUgc3RhcnQgc3BhY2luZyAsICovCisJaHRfY2FwLT5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV8xNjsKKworCWh0X2NhcC0+bWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKworCS8qCisJICpody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdCisJICpiYXNlIG9uIGFudF9udW0KKwkgKnJ4X21hc2s6IFJYIG1hc2sKKwkgKmlmIHJ4X2FudCA9MSByeF9tYXNrWzBdPTB4ZmY7PT0+TUNTMC1NQ1M3CisJICppZiByeF9hbnQgPTIgcnhfbWFza1sxXT0weGZmOz09Pk1DUzgtTUNTMTUKKwkgKmlmIHJ4X2FudCA+PTMgcnhfbWFza1syXT0weGZmOworCSAqaWYgQldfNDAgcnhfbWFza1s0XT0weDAxOworCSAqaGlnaGVzdCBzdXBwb3J0ZWQgUlggcmF0ZQorCSAqLworCWlmIChydGxwcml2LT5kbS5zdXBwX3BoeW1vZGVfc3dpdGNoKSB7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0VNRVJHLCAoIlN1cHBvcnQgcGh5IG1vZGUgc3dpdGNoXG4iKSk7CisKKwkJaHRfY2FwLT5tY3MucnhfbWFza1swXSA9IDB4RkY7CisJCWh0X2NhcC0+bWNzLnJ4X21hc2tbMV0gPSAweEZGOworCQlodF9jYXAtPm1jcy5yeF9tYXNrWzRdID0gMHgwMTsKKworCQlodF9jYXAtPm1jcy5yeF9oaWdoZXN0ID0gY3B1X3RvX2xlMTYoTUFYX0JJVF9SQVRFXzQwTUhaX01DUzE1KTsKKwl9IGVsc2UgeworCQlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDJSIHx8CisJCSAgICBnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzJUMlIpIHsKKwkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIjFUMlIgb3IgMlQyUlxuIikpOworCisJCQlodF9jYXAtPm1jcy5yeF9tYXNrWzBdID0gMHhGRjsKKwkJCWh0X2NhcC0+bWNzLnJ4X21hc2tbMV0gPSAweEZGOworCQkJaHRfY2FwLT5tY3MucnhfbWFza1s0XSA9IDB4MDE7CisKKwkJCWh0X2NhcC0+bWNzLnJ4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNihNQVhfQklUX1JBVEVfNDBNSFpfTUNTMTUpOworCQl9IGVsc2UgaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQxUikgeworCQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csICgiMVQxUlxuIikpOworCisJCQlodF9jYXAtPm1jcy5yeF9tYXNrWzBdID0gMHhGRjsKKwkJCWh0X2NhcC0+bWNzLnJ4X21hc2tbMV0gPSAweDAwOworCQkJaHRfY2FwLT5tY3MucnhfbWFza1s0XSA9IDB4MDE7CisKKwkJCWh0X2NhcC0+bWNzLnJ4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNihNQVhfQklUX1JBVEVfNDBNSFpfTUNTNyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfaW5pdF9od192aHRfY2FwYWIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGFfdmh0X2NhcCAqdmh0X2NhcCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgxMkFFKSB7CisJCXUxNiBtY3NfbWFwOworCQl2aHRfY2FwLT52aHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJdmh0X2NhcC0+Y2FwID0KKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF8zODk1IHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF83OTkxIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF8xMTQ1NCB8CisJCQlJRUVFODAyMTFfVkhUX0NBUF9TSE9SVF9HSV84MCB8CisJCQlJRUVFODAyMTFfVkhUX0NBUF9UWFNUQkMgfAorCQkJSUVFRTgwMjExX1ZIVF9DQVBfUlhTVEJDXzEgfAorCQkJSUVFRTgwMjExX1ZIVF9DQVBfU1VfQkVBTUZPUk1FUl9DQVBBQkxFIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX1NVX0JFQU1GT1JNRUVfQ0FQQUJMRSB8CisJCQlJRUVFODAyMTFfVkhUX0NBUF9IVENfVkhUIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9BX01QRFVfTEVOR1RIX0VYUE9ORU5UX01BU0sgfAorCQkJSUVFRTgwMjExX1ZIVF9DQVBfUlhfQU5URU5OQV9QQVRURVJOIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX1RYX0FOVEVOTkFfUEFUVEVSTiB8CisJCQkwOworCisJCW1jc19tYXAgPSBJRUVFODAyMTFfVkhUX01DU19TVVBQT1JUXzBfOSA8PCAwIHwKKwkJCUlFRUU4MDIxMV9WSFRfTUNTX1NVUFBPUlRfMF85IDw8IDIgfAorCQkJSUVFRTgwMjExX1ZIVF9NQ1NfTk9UX1NVUFBPUlRFRCA8PCA0IHwKKwkJCUlFRUU4MDIxMV9WSFRfTUNTX05PVF9TVVBQT1JURUQgPDwgNiB8CisJCQlJRUVFODAyMTFfVkhUX01DU19OT1RfU1VQUE9SVEVEIDw8IDggfAorCQkJSUVFRTgwMjExX1ZIVF9NQ1NfTk9UX1NVUFBPUlRFRCA8PCAxMCB8CisJCQlJRUVFODAyMTFfVkhUX01DU19OT1RfU1VQUE9SVEVEIDw8IDEyIHwKKwkJCUlFRUU4MDIxMV9WSFRfTUNTX05PVF9TVVBQT1JURUQgPDwgMTQ7CisKKwkJdmh0X2NhcC0+dmh0X21jcy5yeF9tY3NfbWFwID0gY3B1X3RvX2xlMTYobWNzX21hcCk7CisJCXZodF9jYXAtPnZodF9tY3MucnhfaGlnaGVzdCA9CisJCQljcHVfdG9fbGUxNihNQVhfQklUX1JBVEVfU0hPUlRfR0lfMk5TU184ME1IWl9NQ1M5KTsKKwkJdmh0X2NhcC0+dmh0X21jcy50eF9tY3NfbWFwID0gY3B1X3RvX2xlMTYobWNzX21hcCk7CisJCXZodF9jYXAtPnZodF9tY3MudHhfaGlnaGVzdCA9CisJCQljcHVfdG9fbGUxNihNQVhfQklUX1JBVEVfU0hPUlRfR0lfMk5TU184ME1IWl9NQ1M5KTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MjFBRSkgeworCQl1MTYgbWNzX21hcDsKKworCQl2aHRfY2FwLT52aHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJdmh0X2NhcC0+Y2FwID0KKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF8zODk1IHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF83OTkxIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF8xMTQ1NCB8CisJCQlJRUVFODAyMTFfVkhUX0NBUF9TSE9SVF9HSV84MCB8CisJCQlJRUVFODAyMTFfVkhUX0NBUF9UWFNUQkMgfAorCQkJSUVFRTgwMjExX1ZIVF9DQVBfUlhTVEJDXzEgfAorCQkJSUVFRTgwMjExX1ZIVF9DQVBfU1VfQkVBTUZPUk1FUl9DQVBBQkxFIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX1NVX0JFQU1GT1JNRUVfQ0FQQUJMRSB8CisJCQlJRUVFODAyMTFfVkhUX0NBUF9IVENfVkhUIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9BX01QRFVfTEVOR1RIX0VYUE9ORU5UX01BU0sgfAorCQkJSUVFRTgwMjExX1ZIVF9DQVBfUlhfQU5URU5OQV9QQVRURVJOIHwKKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX1RYX0FOVEVOTkFfUEFUVEVSTiB8CisJCQkwOworCisJCW1jc19tYXAgPSBJRUVFODAyMTFfVkhUX01DU19TVVBQT1JUXzBfOSA8PCAwIHwKKwkJCUlFRUU4MDIxMV9WSFRfTUNTX05PVF9TVVBQT1JURUQgPDwgMiB8CisJCQlJRUVFODAyMTFfVkhUX01DU19OT1RfU1VQUE9SVEVEIDw8IDQgfAorCQkJSUVFRTgwMjExX1ZIVF9NQ1NfTk9UX1NVUFBPUlRFRCA8PCA2IHwKKwkJCUlFRUU4MDIxMV9WSFRfTUNTX05PVF9TVVBQT1JURUQgPDwgOCB8CisJCQlJRUVFODAyMTFfVkhUX01DU19OT1RfU1VQUE9SVEVEIDw8IDEwIHwKKwkJCUlFRUU4MDIxMV9WSFRfTUNTX05PVF9TVVBQT1JURUQgPDwgMTIgfAorCQkJSUVFRTgwMjExX1ZIVF9NQ1NfTk9UX1NVUFBPUlRFRCA8PCAxNDsKKworCQl2aHRfY2FwLT52aHRfbWNzLnJ4X21jc19tYXAgPSBjcHVfdG9fbGUxNihtY3NfbWFwKTsKKwkJdmh0X2NhcC0+dmh0X21jcy5yeF9oaWdoZXN0ID0KKwkJCWNwdV90b19sZTE2KE1BWF9CSVRfUkFURV9TSE9SVF9HSV8xTlNTXzgwTUhaX01DUzkpOworCQl2aHRfY2FwLT52aHRfbWNzLnR4X21jc19tYXAgPSBjcHVfdG9fbGUxNihtY3NfbWFwKTsKKwkJdmh0X2NhcC0+dmh0X21jcy50eF9oaWdoZXN0ID0KKwkJCWNwdV90b19sZTE2KE1BWF9CSVRfUkFURV9TSE9SVF9HSV8xTlNTXzgwTUhaX01DUzkpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bF9pbml0X21hYzgwMjExKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKKwlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKworCWlmIChydGxoYWwtPm1hY3BoeW1vZGUgPT0gU0lOR0xFTUFDX1NJTkdMRVBIWSAmJgorCSAgICBydGxoYWwtPmJhbmRzZXQgPT0gQkFORF9PTl9CT1RIKSB7CisJCS8qIDE6IDIuNCBHIGJhbmRzICovCisJCS8qIDwxPiB1c2UgIG1hYy0+YmFuZHMgYXMgbWVtIGZvciBody0+d2lwaHktPmJhbmRzICovCisJCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKTsKKworCQkvKiA8Mj4gc2V0IGh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0KKwkJICogdG8gZGVmYXVsdCB2YWx1ZSgxVDFSKSAqLworCQltZW1jcHkoJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKSwgJnJ0bF9iYW5kXzJnaHosCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCisJCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KKwkJX3J0bF9pbml0X2h3X2h0X2NhcGFiKGh3LCAmc2JhbmQtPmh0X2NhcCk7CisKKwkJLyogPDQ+IHNldCBtYWMtPnNiYW5kIHRvIHdpcGh5LT5zYmFuZCAqLworCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gc2JhbmQ7CisKKwkJLyogMjogNSBHIGJhbmRzICovCisJCS8qIDwxPiB1c2UgIG1hYy0+YmFuZHMgYXMgbWVtIGZvciBody0+d2lwaHktPmJhbmRzICovCisJCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdKTsKKworCQkvKiA8Mj4gc2V0IGh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0KKwkJICogdG8gZGVmYXVsdCB2YWx1ZSgxVDFSKSAqLworCQltZW1jcHkoJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdKSwgJnJ0bF9iYW5kXzVnaHosCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCisJCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KKwkJX3J0bF9pbml0X2h3X2h0X2NhcGFiKGh3LCAmc2JhbmQtPmh0X2NhcCk7CisKKwkJX3J0bF9pbml0X2h3X3ZodF9jYXBhYihodywgJnNiYW5kLT52aHRfY2FwKTsKKworCQkvKiA8ND4gc2V0IG1hYy0+c2JhbmQgdG8gd2lwaHktPnNiYW5kICovCisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBzYmFuZDsKKwl9IGVsc2UgeworCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykgeworCQkJLyogPDE+IHVzZSAgbWFjLT5iYW5kcyBhcyBtZW0gZm9yIGh3LT53aXBoeS0+YmFuZHMgKi8KKwkJCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKTsKKworCQkJLyogPDI+IHNldCBody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdCisJCQkgKiB0byBkZWZhdWx0IHZhbHVlKDFUMVIpICovCisJCQltZW1jcHkoJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKSwKKwkJCSAgICAgICAmcnRsX2JhbmRfMmdoeiwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCisJCQkvKiA8Mz4gaW5pdCBodCBjYXAgYmFzZSBvbiBhbnRfbnVtICovCisJCQlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKKworCQkJLyogPDQ+IHNldCBtYWMtPnNiYW5kIHRvIHdpcGh5LT5zYmFuZCAqLworCQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IHNiYW5kOworCQl9IGVsc2UgaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKSB7CisJCQkvKiA8MT4gdXNlICBtYWMtPmJhbmRzIGFzIG1lbSBmb3IgaHctPndpcGh5LT5iYW5kcyAqLworCQkJc2JhbmQgPSAmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pOworCisJCQkvKiA8Mj4gc2V0IGh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0KKwkJCSAqIHRvIGRlZmF1bHQgdmFsdWUoMVQxUikgKi8KKwkJCW1lbWNweSgmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pLAorCQkJICAgICAgICZydGxfYmFuZF81Z2h6LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kKSk7CisKKwkJCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KKwkJCV9ydGxfaW5pdF9od19odF9jYXBhYihodywgJnNiYW5kLT5odF9jYXApOworCisJCQlfcnRsX2luaXRfaHdfdmh0X2NhcGFiKGh3LCAmc2JhbmQtPnZodF9jYXApOworCisJCQkvKiA8ND4gc2V0IG1hYy0+c2JhbmQgdG8gd2lwaHktPnNiYW5kICovCisJCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gc2JhbmQ7CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19FTUVSRywKKwkJCQkgKCJFcnIgQkFORCAlZFxuIiwgcnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlKSk7CisJCX0KKwl9CisJLyogPDU+IHNldCBodyBjYXBzICovCisJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkgICAgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUyB8CisJICAgIElFRUU4MDIxMV9IV19DT05ORUNUSU9OX01PTklUT1IgfAorCSAgICAvKiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfQ1FNX1JTU0kgfCAqLworCSAgICBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUgfCAwOworCisJLyogc3dscHMgb3IgaHdscHMgaGFzIGJlZW4gc2V0IGluIGRpZmYgY2hpcCBpbiBpbml0X3N3X3ZhcnMgKi8KKwlpZiAocnRscHJpdi0+cHNjLmJfc3djdHJsX2xwcykKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCQlJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgfAorCQkJLyogSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMgfCAqLworCQkJMDsKKy8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTyk7CisJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0lCU1NfUlNOOworCisJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0hBU19SRU1BSU5fT05fQ0hBTk5FTDsKKworCWh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCA9IDIzNDc7CisKKwlody0+cXVldWVzID0gQUNfTUFYOworCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFJUTF9UWF9IRUFERVJfU0laRTsKKworCS8qIFRPRE86IENvcnJlY3QgdGhpcyB2YWx1ZSBmb3Igb3VyIGh3ICovCisJLyogVE9ETzogZGVmaW5lIHRoZXNlIGhhcmQgY29kZSB2YWx1ZSAqLworCS8qIGh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwOyBrZXJuZWwgZG9lcyBub3QgdXNlIGl0Ki8KKwlody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDEwOworCWh3LT5tYXhfcmF0ZV90cmllcyA9IDQ7CisJLyogaHctPm1heF9yYXRlcyA9IDE7ICovCisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0bF9zdGFfaW5mbyk7CisKKy8qIHdvd2xhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtlcm5lbCBpZiBDT05GSUdfUE0gaXMgbm90IGRlZmluZWQgKi8KKyNpZmRlZiBDT05GSUdfUE0KKwlpZiAocnRscHJpdi0+cHNjLndvX3dsYW5fbW9kZSkgeworCQlpZiAocnRscHJpdi0+cHNjLndvX3dsYW5fbW9kZSAmIFdBS0VfT05fTUFHSUNfUEFDS0VUKQorCQkJcnRscHJpdi0+d293bGFuLmZsYWdzID0gV0lQSFlfV09XTEFOX01BR0lDX1BLVDsKKwkJaWYgKHJ0bHByaXYtPnBzYy53b193bGFuX21vZGUgJiBXQUtFX09OX1BBVFRFUk5fTUFUQ0gpIHsKKwkJCXJ0bHByaXYtPndvd2xhbi5uX3BhdHRlcm5zID0KKwkJCQlNQVhfU1VQUE9SVF9XT0xfUEFUVEVSTl9OVU07CisJCQlydGxwcml2LT53b3dsYW4ucGF0dGVybl9taW5fbGVuID0gTUlOX1dPTF9QQVRURVJOX1NJWkU7CisJCQlydGxwcml2LT53b3dsYW4ucGF0dGVybl9tYXhfbGVuID0gTUFYX1dPTF9QQVRURVJOX1NJWkU7CisJCX0KKwkJaHctPndpcGh5LT53b3dsYW4gPSAmKHJ0bHByaXYtPndvd2xhbik7CisJfQorI2VuZGlmCisKKwkvKiA8Nj4gbWFjIGFkZHJlc3MgKi8KKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihydGxlZnVzZS0+ZGV2X2FkZHIpKSB7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBydGxlZnVzZS0+ZGV2X2FkZHIpOworCX0gZWxzZSB7CisJCXU4IHJ0bG1hY1tdID0geyAweDAwLCAweGUwLCAweDRjLCAweDgxLCAweDkyLCAweDAwIH07CisJCWdldF9yYW5kb21fYnl0ZXMoKHJ0bG1hYyArIChFVEhfQUxFTiAtIDEpKSwgMSk7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBydGxtYWMpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bF9pbml0X2RlZmVycmVkX3dvcmsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJLyogPDE+IHRpbWVyICovCisJaW5pdF90aW1lcigmcnRscHJpdi0+d29ya3Mud2F0Y2hkb2dfdGltZXIpOworCXNldHVwX3RpbWVyKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ190aW1lciwKKwkJICAgIHJ0bDkyZV93YXRjaF9kb2dfdGltZXJfY2FsbGJhY2ssICh1bnNpZ25lZCBsb25nKWh3KTsKKwlpbml0X3RpbWVyKCZydGxwcml2LT53b3Jrcy5kdWFsbWFjX2Vhc3ljb25jdXJyZW50X3JldHJ5dGltZXIpOworCXNldHVwX3RpbWVyKCZydGxwcml2LT53b3Jrcy5kdWFsbWFjX2Vhc3ljb25jdXJyZW50X3JldHJ5dGltZXIsCisJCSAgICBydGw5MmVfZWFzeV9jb25jdXJyZW50X3JldHJ5dGltZXJfY2FsbGJhY2ssICh1bnNpZ25lZCBsb25nKWh3KTsKKwkvKiA8Mj4gd29yayBxdWV1ZSAqLworCXJ0bHByaXYtPndvcmtzLmh3ID0gaHc7CisJcnRscHJpdi0+d29ya3MucnRsX3dxID0gYWxsb2Nfd29ya3F1ZXVlKHJ0bHByaXYtPmNmZy0+bmFtZSwgMCwgMCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLndhdGNoZG9nX3dxLAorCQkJICAodm9pZCAqKXJ0bDkyZV93YXRjaGRvZ193cV9jYWxsYmFjayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLmlwc19uaWNfb2ZmX3dxLAorCQkJICAodm9pZCAqKXJ0bDkyZV9pcHNfbmljX29mZl93cV9jYWxsYmFjayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLnBzX3dvcmssCisJCQkgICh2b2lkICopcnRsOTJlX3N3bHBzX3dxX2NhbGxiYWNrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcnRscHJpdi0+d29ya3MucHNfcmZvbl93cSwKKwkJCSAgKHZvaWQgKilydGw5MmVfc3dscHNfcmZvbl93cV9jYWxsYmFjayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLmZ3ZXZ0X3dxLAorCQkJICAodm9pZCAqKXJ0bDkyZV9md2V2dF93cV9jYWxsYmFjayk7Cit9CisKK3ZvaWQgcnRsOTJlX2RlaW5pdF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWRlbF90aW1lcl9zeW5jKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ190aW1lcik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ193cSk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcnRscHJpdi0+d29ya3MuaXBzX25pY19vZmZfd3EpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLnBzX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLnBzX3Jmb25fd3EpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLmZ3ZXZ0X3dxKTsKK30KKwordm9pZCBydGw5MmVfaW5pdF9yZmtpbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJYm9vbCByYWRpb19zdGF0ZTsKKwlib29sIGJsb2NrZWQ7CisJdTggdmFsaWQgPSAwOworCisJLypzZXQgaW5pdCBzdGF0ZSB0byBvbiAqLworCXJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPSAxOworCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoaHctPndpcGh5LCAwKTsKKworCXJhZGlvX3N0YXRlID0gcnRscHJpdi0+Y2ZnLT5vcHMtPnJhZGlvX29ub2ZmX2NoZWNraW5nKGh3LCAmdmFsaWQpOworCisJaWYgKHZhbGlkKSB7CisJCXByX2luZm8oInJ0bHdpZmk6IHdpcmVsZXNzIHN3aXRjaCBpcyAlc1xuIiwKKwkJCXJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPyAib24iIDogIm9mZiIpOworCisJCXJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPSByYWRpb19zdGF0ZTsKKworCQlibG9ja2VkID0gKHJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPT0gMSkgPyAwIDogMTsKKwkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksIGJsb2NrZWQpOworCX0KKworCXdpcGh5X3Jma2lsbF9zdGFydF9wb2xsaW5nKGh3LT53aXBoeSk7Cit9CisKK3ZvaWQgcnRsOTJlX2RlaW5pdF9yZmtpbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhody0+d2lwaHkpOworfQorCisjaWZkZWYgVklGX1RPRE8KK3N0YXRpYyB2b2lkIHJ0bF9pbml0X3ZpZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlJTklUX0xJU1RfSEVBRCgmcnRscHJpdi0+dmlmX3ByaXYudmlmX2xpc3QpOworCisJcnRscHJpdi0+dmlmX3ByaXYudmlmcyA9IDA7Cit9CisjZW5kaWYKKworaW50IHJ0bDkyZV9pbml0X2NvcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICpydGxtYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwkvKiA8MT4gaW5pdCBtYWM4MDIxMSAqLworCV9ydGxfaW5pdF9tYWM4MDIxMShodyk7CisJcnRsbWFjLT5odyA9IGh3OworCXJ0bG1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKKworCS8qIDwyPiByYXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJydGxfcmMiOworCisJLyoKKwkgKiA8Mz4gaW5pdCBDUkRBIG11c3QgY29tZSBhZnRlciBpbml0CisJICogbWFjODAyMTEgaHcgIGluIF9ydGxfaW5pdF9tYWM4MDIxMS4KKwkgKi8KKwlpZiAocnRsOTJlX3JlZ2RfaW5pdChodywgcnRsOTJlX3JlZ19ub3RpZmllcikpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywgKCJSRUdEIGluaXQgZmFpbGVkXG4iKSk7CisJCXJldHVybiAxOworCX0KKworCS8qIDw0PiBsb2NrcyAqLworCW11dGV4X2luaXQoJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5pcHNfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MucmZfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmVudHJ5X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmNja19hbmRfcndfcGFnZWFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmNoZWNrX3NlbmRwa3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5pcWtfbG9jayk7CisJLyogPDU+IGluaXQgbGlzdCAqLworCUlOSVRfTElTVF9IRUFEKCZydGxwcml2LT5lbnRyeV9saXN0KTsKKworCS8qIDw2PiBpbml0IGRlZmVycmVkIHdvcmsgKi8KKwlfcnRsX2luaXRfZGVmZXJyZWRfd29yayhodyk7CisKKwkvKiA8Nz4gKi8KKyNpZmRlZiBWSUZfVE9ETworCXJ0bF9pbml0X3ZpZihodyk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCit2b2lkIHJ0bDkyZV9kZWluaXRfY29yZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKK30KKwordm9pZCBydGw5MmVfaW5pdF9yeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX1JDUiwgKHU4ICopKCZtYWMtPnJ4X2NvbmYpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR4IGluZm9ybWF0aW9uIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfcnRsX3F1cmV5X3Nob3J0cHJlYW1ibGVfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYywKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHJhdGVfZmxhZyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CisKKwl0Y2JfZGVzYy0+dXNlX3Nob3J0cHJlYW1ibGUgPSBmYWxzZTsKKworCS8qIDFNIGNhbiBvbmx5IHVzZSBMb25nIFByZWFtYmxlLiAxMUIgc3BlYyAqLworCWlmICh0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dKQorCQlyZXR1cm47CisJZWxzZSBpZiAocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKKwkJdGNiX2Rlc2MtPnVzZV9zaG9ydHByZWFtYmxlID0gdHJ1ZTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX3J0bF9xdWVyeV9zaG9ydGdpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTggcmF0ZV9mbGFnID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKKwl1OCBzZ2lfNDAgPSAwLCBzZ2lfMjAgPSAwLCBid180MCA9IDA7CisJdTggc2dpXzgwID0gMCwgYndfODAgPSAwOworCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IGZhbHNlOworCisJaWYgKHN0YSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzZ2lfNDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwlzZ2lfMjAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwlzZ2lfODAgPSBzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfU0hPUlRfR0lfODA7CisKKwlpZiAoIShzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpICYmICEoc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpKQorCQlyZXR1cm47CisKKwlpZiAoIXNnaV80MCAmJiAhc2dpXzIwKQorCQlyZXR1cm47CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlid180MCA9IG1hYy0+YndfNDA7CisJCWJ3XzgwID0gbWFjLT5id184MDsKKwl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJYndfNDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJYndfODAgPSBzdGEtPnZodF9jYXAudmh0X3N1cHBvcnRlZDsKKwl9CisKKwlpZiAoYndfODApIHsKKwkJaWYgKHNnaV84MCkKKwkJCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IHRydWU7CisJCWVsc2UKKwkJCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IGZhbHNlOworCX0gZWxzZSB7CisJCWlmIChid180MCAmJiBzZ2lfNDApCisJCQl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSB0cnVlOworCQllbHNlIGlmICghYndfNDAgJiYgc2dpXzIwKQorCQkJdGNiX2Rlc2MtPnVzZV9zaG9ydGdpID0gdHJ1ZTsKKwl9CisKKwlpZiAoIShyYXRlX2ZsYWcgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpKQorCQl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgX3J0bF9xdWVyeV9wcm90ZWN0aW9uX21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHJhdGVfZmxhZyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CisKKwkvKiBDb21tb24gU2V0dGluZ3MgKi8KKwl0Y2JfZGVzYy0+Yl9ydHNfc3RiYyA9IGZhbHNlOworCXRjYl9kZXNjLT5iX2N0c19lbmFibGUgPSBmYWxzZTsKKwl0Y2JfZGVzYy0+cnRzX3NjID0gMDsKKwl0Y2JfZGVzYy0+Yl9ydHNfYncgPSBmYWxzZTsKKwl0Y2JfZGVzYy0+Yl9ydHNfdXNlX3Nob3J0cHJlYW1ibGUgPSBmYWxzZTsKKwl0Y2JfZGVzYy0+Yl9ydHNfdXNlX3Nob3J0Z2kgPSBmYWxzZTsKKworCWlmIChyYXRlX2ZsYWcgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJCS8qIFVzZSBDVFMtdG8tU0VMRiBpbiBwcm90ZWN0aW9uIG1vZGUuICovCisJCXRjYl9kZXNjLT5iX3J0c19lbmFibGUgPSB0cnVlOworCQl0Y2JfZGVzYy0+Yl9jdHNfZW5hYmxlID0gdHJ1ZTsKKwkJdGNiX2Rlc2MtPnJ0c19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dOworCX0gZWxzZSBpZiAocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CisJCS8qIFVzZSBSVFMtQ1RTIGluIHByb3RlY3Rpb24gbW9kZS4gKi8KKwkJdGNiX2Rlc2MtPmJfcnRzX2VuYWJsZSA9IHRydWU7CisJCXRjYl9kZXNjLT5ydHNfcmF0ZSA9IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfT0ZETV9SQVRFMjRNXTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfdHhyYXRlX3NlbGVjdG1vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCXU4IHJhdHJfaW5kZXggPSA3OworCisJaWYgKHN0YSkgeworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCXJhdHJfaW5kZXggPSBzdGFfZW50cnktPnJhdHJfaW5kZXg7CisJfQorCWlmICghdGNiX2Rlc2MtPmRpc2FibGVfcmF0ZWZhbGxiYWNrIHx8ICF0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlKSB7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IDA7CisJCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkJCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCQlpZiAodGNiX2Rlc2MtPmJfbXVsdGljYXN0IHx8IHRjYl9kZXNjLT5iX2Jyb2FkY2FzdCkgeworCQkJCXRjYl9kZXNjLT5od19yYXRlID0KKwkJCQkgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19DQ0tfUkFURTJNXTsKKwkJCQl0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gMTsKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX01DOworCQkJfSBlbHNlIHsKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IHJhdHJfaW5kZXg7CisJCQl9CisJCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gcmF0cl9pbmRleDsKKwkJfQorCX0KKworCWlmIChydGxwcml2LT5kbS5iX3VzZXJhbWFzaykgeworCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IHJhdHJfaW5kZXg7CisJCS8qIFRPRE8gd2Ugd2lsbCBkaWZmZXJlbnRpYXRlIGFkaG9jIGFuZCBzdGF0aW9uIGZ1dHJ1ZSAgKi8KKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKKwkJICAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOworCisJCQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQUNfNUcpCisJCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPQorCQkJCQlSQVRSX0lOWF9XSVJFTEVTU19BQ181TjsKKwkJCWVsc2UgaWYgKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX0FDXzI0RykKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9CisJCQkJCVJBVFJfSU5YX1dJUkVMRVNTX0FDXzI0TjsKKwkJCWVsc2UgaWYgKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX05fMjRHKQorCQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkdCOworCQkJZWxzZSBpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfTl81RykKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX05HOworCQkJZWxzZSBpZiAobWFjLT5tb2RlICYgV0lSRUxFU1NfTU9ERV9HKQorCQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfR0I7CisJCQllbHNlIGlmIChtYWMtPm1vZGUgJiBXSVJFTEVTU19NT0RFX0IpCisJCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19COworCQkJZWxzZSBpZiAobWFjLT5tb2RlICYgV0lSRUxFU1NfTU9ERV9BKQorCQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfRzsKKworCQl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCQkgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJaWYgKHN0YSkgeworCQkJCWlmIChzdGEtPmFpZCA+IDApCisJCQkJCXRjYl9kZXNjLT5tYWNfaWQgPSBzdGEtPmFpZCArIDE7CisJCQkJZWxzZQorCQkJCQl0Y2JfZGVzYy0+bWFjX2lkID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJdGNiX2Rlc2MtPm1hY19pZCA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcXVlcnlfYmFuZHdpZHRoX21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgICAgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCXRjYl9kZXNjLT5wYWNrZXRfYncgPSAwOworCWlmICghc3RhKQorCQlyZXR1cm47CisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJICAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJaWYgKCEoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB8fAorCQkgICAgIShzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkpCisJCQlyZXR1cm47CisJfSBlbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmICghbWFjLT5id180MCB8fCAhKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkpCisJCQlyZXR1cm47CisJfQorCWlmICh0Y2JfZGVzYy0+Yl9tdWx0aWNhc3QgfHwgdGNiX2Rlc2MtPmJfYnJvYWRjYXN0KQorCQlyZXR1cm47CisKKwkvKnVzZSBsZWdlbmN5IHJhdGUsIHNoYWxsIHVzZSAyME1IeiAqLworCWlmICh0Y2JfZGVzYy0+aHdfcmF0ZSA8PSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX09GRE1fUkFURTU0TV0pCisJCXJldHVybjsKKworCXRjYl9kZXNjLT5wYWNrZXRfYncgPSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOworCisJaWYgKHJ0bHByaXYtPnJ0bGhhbC5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgxMkFFIHx8CisJICAgIHJ0bHByaXYtPnJ0bGhhbC5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgyMUFFKSB7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkJICAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJCWlmICghKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSkgeworCQkJCXJldHVybjsKKwkJCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJCWlmICghbWFjLT5id184MCB8fAorCQkJCSAgICAhKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSkKKwkJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWlmICh0Y2JfZGVzYy0+aHdfcmF0ZSA8PQorCQkJcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19IVF9SQVRFTUNTMTVdKQorCQkJcmV0dXJuOworCQl0Y2JfZGVzYy0+cGFja2V0X2J3ID0gSFRfQ0hBTk5FTF9XSURUSF84MDsKKwl9Cit9CisKK3N0YXRpYyB1OCBfcnRsX2dldF92aHRfaGlnaGVzdF9uX3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1OCBod19yYXRlOworCXUxNiBtYXAgPSBsZTE2X3RvX2NwdShzdGEtPnZodF9jYXAudmh0X21jcy50eF9tY3NfbWFwKTsKKworCWlmICgoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8yVDJSKSAmJgorCSAgICAobWFwICYgMHgwMDBjKSAhPSAweDAwMGMwKSB7CisJCWlmICgobWFwICYgMHgwMDBjKSA+PiAyID09IElFRUU4MDIxMV9WSFRfTUNTX1NVUFBPUlRfMF83KQorCQkJaHdfcmF0ZSA9CisJCQlydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX1ZIVF9SQVRFXzJTU19NQ1M3XTsKKwkJZWxzZSBpZiAoKG1hcCAgJiAweDAwMGMpID4+IDIgPT0gSUVFRTgwMjExX1ZIVF9NQ1NfU1VQUE9SVF8wXzgpCisJCQlod19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19WSFRfUkFURV8yU1NfTUNTOV07CisJCWVsc2UKKwkJCWh3X3JhdGUgPSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX1ZIVF9SQVRFXzJTU19NQ1M5XTsKKwl9IGVsc2UgeworCQlpZiAoKG1hcCAgJiAweDAwMDMpID09IElFRUU4MDIxMV9WSFRfTUNTX1NVUFBPUlRfMF83KQorCQkJaHdfcmF0ZSA9IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfVkhUX1JBVEVfMVNTX01DUzddOworCQllbHNlIGlmICgobWFwICAmIDB4MDAwMykgPT0gSUVFRTgwMjExX1ZIVF9NQ1NfU1VQUE9SVF8wXzgpCisJCQlod19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19WSFRfUkFURV8xU1NfTUNTOV07CisJCWVsc2UKKwkJCWh3X3JhdGUgPSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX1ZIVF9SQVRFXzFTU19NQ1M5XTsKKwl9CisKKwlyZXR1cm4gaHdfcmF0ZTsKK30KKworc3RhdGljIHU4IF9ydGxfZ2V0X2hpZ2hlc3Rfbl9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1OCBod19yYXRlOworCisJaWYgKChnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzJUMlIpICYmCisJICAgIChzdGEtPmh0X2NhcC5tY3MucnhfbWFza1sxXSAhPSAwKSkKKwkJaHdfcmF0ZSA9IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XTsKKwllbHNlCisJCWh3X3JhdGUgPSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XTsKKworCXJldHVybiBod19yYXRlOworfQorCit2b2lkIHN0Z19ydGxfZ2V0X3RjYl9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBydGxfZ2V0X2hkcihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqdHhyYXRlOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKworCXR4cmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShodywgaW5mbyk7CisJaWYgKHR4cmF0ZSAhPSBOVUxMKQorCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9IHR4cmF0ZS0+aHdfdmFsdWU7CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCS8qCisJCSAqd2Ugc2V0IGRhdGEgcmF0ZSBJTlggMAorCQkgKmluIHJ0bF9yYy5jICAgaWYgc2tiIGlzIHNwZWNpYWwgZGF0YSBvcgorCQkgKm1ndCB3aGljaCBuZWVkIGxvdyBkYXRhIHJhdGUuCisJCSAqLworCisJCS8qCisJCSAqU28gdGNiX2Rlc2MtPmh3X3JhdGUgaXMganVzdCB1c2VkIGZvcgorCQkgKnNwZWNpYWwgZGF0YSBhbmQgbWd0IGZyYW1lcworCQkgKi8KKwkJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID09IDAgfHwKKwkJICAgIGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykpIHsKKwkJCXRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUgPSB0cnVlOworCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19NQzsKKworCQkJdGNiX2Rlc2MtPmRpc2FibGVfcmF0ZWZhbGxiYWNrID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKmJlY2F1c2UgaHcgd2lsbCBuZXJ2ZXIgdXNlIGh3X3JhdGUKKwkJCSAqd2hlbiB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gZmFsc2UKKwkJCSAqc28gd2UgbmV2ZXIgc2V0IGhpZ2hlc3QgTiByYXRlIGhlcmUsCisJCQkgKmFuZCBOIHJhdGUgd2lsbCBhbGwgYmUgY29udHJvbGVkIGJ5IEZXCisJCQkgKndoZW4gdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IGZhbHNlCisJCQkgKi8KKwkJCWlmIChzdGEgJiYgc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpIHsKKwkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CisJCQkJX3J0bF9nZXRfdmh0X2hpZ2hlc3Rfbl9yYXRlKGh3LCBzdGEpOworCQkJfSBlbHNlIGlmIChzdGEgJiYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkpIHsKKwkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CisJCQkJCV9ydGxfZ2V0X2hpZ2hlc3Rfbl9yYXRlKGh3LCBzdGEpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocnRsbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikgeworCQkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CisJCQkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXTsKKwkJCQl9IGVsc2UgeworCQkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CisJCQkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX09GRE1fUkFURTU0TV07CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpCisJCQl0Y2JfZGVzYy0+Yl9tdWx0aWNhc3QgPSAxOworCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKQorCQkJdGNiX2Rlc2MtPmJfYnJvYWRjYXN0ID0gMTsKKworCQlfcnRsX3R4cmF0ZV9zZWxlY3Rtb2RlKGh3LCBzdGEsIHRjYl9kZXNjKTsKKwkJX3J0bF9xdWVyeV9iYW5kd2lkdGhfbW9kZShodywgc3RhLCB0Y2JfZGVzYyk7CisJCV9ydGxfcXVyZXlfc2hvcnRwcmVhbWJsZV9tb2RlKGh3LCB0Y2JfZGVzYywgaW5mbyk7CisJCV9ydGxfcXVlcnlfc2hvcnRnaShodywgc3RhLCB0Y2JfZGVzYywgaW5mbyk7CisJCV9ydGxfcXVlcnlfcHJvdGVjdGlvbl9tb2RlKGh3LCB0Y2JfZGVzYywgaW5mbyk7CisJfSBlbHNlIHsKKwkJdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IHRydWU7CisJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTUM7CisJCXRjYl9kZXNjLT5kaXNhYmxlX3JhdGVmYWxsYmFjayA9IDE7CisJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOworCQl0Y2JfZGVzYy0+cGFja2V0X2J3ID0gMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19ydGxfZ2V0X3RjYl9kZXNjKTsKKworYm9vbCBydGw5MmVfdHhfbWdtdF9wcm9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKworCWlmIChydGxwcml2LT5kbS5zdXBwX3BoeW1vZGVfc3dpdGNoICYmCisJICAgIG1hYy0+bGlua19zdGF0ZSA8IE1BQzgwMjExX0xJTktFRCAmJgorCSAgICAoaWVlZTgwMjExX2lzX2F1dGgoZmMpIHx8IGllZWU4MDIxMV9pc19wcm9iZV9yZXEoZmMpKSkgeworCQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmNoZWNrX3N3aXRjaF90b19kbWRwKQorCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmNoZWNrX3N3aXRjaF90b19kbWRwKGh3KTsKKwl9CisJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkgeworCQlSVF9UUkFDRShDT01QX1NFTkQsIERCR19ETUVTRywgKCJNQUM4MDIxMV9MSU5LSU5HXG4iKSk7CisJCXJ0bDkyZV9pcHNfbmljX29uKGh3KTsKKworCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LSU5HOworCQkvKiBEdWwgbWFjICovCisJCXJ0bHByaXYtPnBoeS5iX25lZWRfaXFrID0gdHJ1ZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCBza19idWZmICpydGw5MmVfbWFrZV9kZWxfYmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzYSwKKwkJCQkgICB1OCAqYnNzaWQsIHUxNiB0aWQpOworCitib29sIHJ0bDkyZV9hY3Rpb25fcHJvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXNfdHgpCit7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJX19sZTE2IGZjID0gcnRsX2dldF9mYyhza2IpOworCXU4ICphY3QgPSAodTggKikoKCh1OCAqKXNrYi0+ZGF0YSArIE1BQzgwMjExXzNBRERSX0xFTikpOworCXU4IGNhdGVnb3J5OworCisJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKGZjKSkKKwkJcmV0dXJuIHRydWU7CisKKwljYXRlZ29yeSA9ICphY3Q7CisJYWN0Kys7CisJc3dpdGNoIChjYXRlZ29yeSkgeworCWNhc2UgQUNUX0NBVF9CQToKKwkJc3dpdGNoICgqYWN0KSB7CisJCWNhc2UgQUNUX0FEREJBUkVROgorCQkJaWYgKG1hYy0+YWN0X3NjYW5uaW5nKQorCQkJCXJldHVybiBmYWxzZTsKKworCQkJUlRfVFJBQ0UoKENPTVBfU0VORCB8IENPTVBfUkVDViksIERCR19ETUVTRywKKwkJCQkgKCIlcyBBQ1RfQUREQkFSRVEgRnJvbTolcE1cbiIsCisJCQkJaXNfdHggPyAiVHgiIDogIlJ4IiwgaGRyLT5hZGRyMikpOworCQkJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywgInJlcVxuIiwKKwkJCQkgICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCWlmICghaXNfdHgpIHsKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gTlVMTDsKKwkJCQlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOworCQkJCXUxNiBjYXBhYiA9IDAsIHRpZCA9IDA7CisJCQkJc3RydWN0IHJ0bF90aWRfZGF0YSAqdGlkX2RhdGE7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYl9kZWxiYSA9IE5VTEw7CisJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0geyAwIH07CisKKwkJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQkJc3RhID0gcnRsX2ZpbmRfc3RhKGh3LCBoZHItPmFkZHIzKTsKKwkJCQlpZiAoc3RhID09IE5VTEwpIHsKKwkJCQkJUlRfVFJBQ0UoKENPTVBfU0VORCB8IENPTVBfUkVDViksCisJCQkJCQkgREJHX1RSQUNFLCAoInN0YSBpcyBOVUxMXG4iKSk7CisJCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisKKwkJCQlzdGFfZW50cnkgPQorCQkJCQkoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCQkJaWYgKCFzdGFfZW50cnkpIHsKKwkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCQljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKKwkJCQl0aWQgPSAoY2FwYWIgJgorCQkJCQlJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7CisJCQkJdGlkX2RhdGEgPSAmc3RhX2VudHJ5LT50aWRzW3RpZF07CisJCQkJaWYgKHRpZF9kYXRhLT5hZ2cucnhfYWdnX3N0YXRlID09CisJCQkJICAgIFJUTF9SWF9BR0dfU1RBUlQpIHsKKwkJCQkJc2tiX2RlbGJhID0gcnRsOTJlX21ha2VfZGVsX2JhKGh3LAorCQkJCQkJCQkgICAgaGRyLT5hZGRyMiwKKwkJCQkJCQkJICAgIGhkci0+YWRkcjMsCisJCQkJCQkJCSAgICB0aWQpOworCQkJCQlpZiAoc2tiX2RlbGJhKSB7CisJCQkJCQlyeF9zdGF0dXMuZnJlcSA9CisJCQkJCQkJaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5jZW50ZXJfZnJlcTsKKwkJCQkJCXJ4X3N0YXR1cy5iYW5kID0KKwkJCQkJCQlody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQ7CisJCQkJCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKwkJCQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9NUERVOworCQkJCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gMDsKKwkJCQkJCXJ4X3N0YXR1cy5zaWduYWwgPSA1MCArIDEwOworCQkJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2JfZGVsYmEpLAorCQkJCQkJICAgICAgICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwkJCQkJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csCisJCQkJCQkJICAgICAgImZha2UgZGVsXG4iLAorCQkJCQkJCSAgICAgIHNrYl9kZWxiYS0+ZGF0YSwgc2tiX2RlbGJhLT5sZW4pOworCQkJCQkJaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYl9kZWxiYSk7CisJCQkJCX0KKwkJCQl9CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBBQ1RfQUREQkFSU1A6CisJCQlSVF9UUkFDRSgoQ09NUF9TRU5EIHwgQ09NUF9SRUNWKSwgREJHX0RNRVNHLAorCQkJCSAoIiVzIEFDVF9BRERCQVJTUCBGcm9tIDolcE1cbiIsCisJCQkJICBpc190eCA/ICJUeCIgOiAiUngiLCBoZHItPmFkZHIyKSk7CisJCQlicmVhazsKKwkJY2FzZSBBQ1RfREVMQkE6CisJCQlSVF9UUkFDRSgoQ09NUF9TRU5EIHwgQ09NUF9SRUNWKSwgREJHX0RNRVNHLAorCQkJCSAoIkFDVF9BRERCQURFTCBGcm9tIDolcE1cbiIsIGhkci0+YWRkcjIpKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKnNob3VsZCBjYWxsIGJlZm9yZSBzb2Z0d2FyZSBlbmMqLwordTggcnRsOTJlX2lzX3NwZWNpYWxfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgdTggaXNfdHgpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKwl1MTYgZXRoZXJfdHlwZTsKKwl1OCBtYWNfaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcDsKKworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpKQorCQlnb3RvIGVuZDsKKworCWlwID0gKHN0cnVjdCBpcGhkciAqKSgodTggKilza2ItPmRhdGEgKyBtYWNfaGRyX2xlbiArCisJCQkgICAgICBTTkFQX1NJWkUgKyBQUk9UT0NfVFlQRV9TSVpFKTsKKwlldGhlcl90eXBlID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikKKwkJCQkgIChza2ItPmRhdGEgKyBtYWNfaGRyX2xlbiArIFNOQVBfU0laRSkpOworCisJaWYgKEVUSF9QX0lQID09IGV0aGVyX3R5cGUpIHsKKwkJaWYgKElQUFJPVE9fVURQID09IGlwLT5wcm90b2NvbCkgeworCQkJc3RydWN0IHVkcGhkciAqdWRwID0gKHN0cnVjdCB1ZHBoZHIgKikoKHU4ICopaXAgKworCQkJCQkJCSAgICAgICAoaXAtPmlobCA8PCAyKSk7CisJCQlpZiAoKCgoKHU4ICopdWRwKVsxXSA9PSA2OCkgJiYKKwkJCSAgICAgKCgodTggKil1ZHApWzNdID09IDY3KSkgfHwKKwkJCSAgICAoKCgodTggKil1ZHApWzFdID09IDY3KSAmJgorCQkJICAgICAoKCh1OCAqKXVkcClbM10gPT0gNjgpKSkgeworCQkJCS8qCisJCQkJICogNjggOiBVRFAgQk9PVFAgY2xpZW50CisJCQkJICogNjcgOiBVRFAgQk9PVFAgc2VydmVyCisJCQkJICovCisJCQkJUlRfVFJBQ0UoKENPTVBfU0VORCB8IENPTVBfUkVDViksCisJCQkJCSBEQkdfRE1FU0csICgiZGhjcCAlcyAhIVxuIiwKKwkJCQkJCSAgICAgKGlzX3R4KSA/ICJUeCIgOiAiUngiKSk7CisKKwkJCQlpZiAoaXNfdHgpIHsKKwkJCQkJcnRscHJpdi0+cmEuaXNfc3BlY2lhbF9kYXRhID0gdHJ1ZTsKKwkJCQkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfYnRjX3N0YXR1cygpKQorCQkJCQkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19zcGVjaWFsX3BhY2tldF9ub3RpZnkoCisJCQkJCQkJCQlydGxwcml2LCAxKTsKKwkJCQkJcnRsOTJlX2xwc19sZWF2ZShodyk7CisJCQkJCXBwc2MtPmxhc3RfZGVsYXlscHNfc3RhbXBfamlmZmllcyA9CisJCQkJCQkJCQlqaWZmaWVzOworCQkJCX0KKworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChFVEhfUF9BUlAgPT0gZXRoZXJfdHlwZSkgeworCQlpZiAoaXNfdHgpIHsKKwkJCXJ0bHByaXYtPnJhLmlzX3NwZWNpYWxfZGF0YSA9IHRydWU7CisJCQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9idGNfc3RhdHVzKCkpCisJCQkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19zcGVjaWFsX3BhY2tldF9ub3RpZnkoCisJCQkJCQkJcnRscHJpdiwgMSk7CisJCQlydGw5MmVfbHBzX2xlYXZlKGh3KTsKKwkJCXBwc2MtPmxhc3RfZGVsYXlscHNfc3RhbXBfamlmZmllcyA9IGppZmZpZXM7CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgaWYgKEVUSF9QX1BBRSA9PSBldGhlcl90eXBlKSB7CisJCVJUX1RSQUNFKChDT01QX1NFTkQgfCBDT01QX1JFQ1YpLCBEQkdfRE1FU0csCisJCQkgKCI4MDIuMVggJXMgRUFQT0wgcGt0ISFcbiIsIChpc190eCkgPyAiVHgiIDogIlJ4IikpOworCisJCWlmIChpc190eCkgeworCQkJcnRscHJpdi0+cmEuaXNfc3BlY2lhbF9kYXRhID0gdHJ1ZTsKKwkJCXJ0bDkyZV9scHNfbGVhdmUoaHcpOworCQkJcHBzYy0+bGFzdF9kZWxheWxwc19zdGFtcF9qaWZmaWVzID0gamlmZmllczsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0gZWxzZSBpZiAoMHg4NkREID09IGV0aGVyX3R5cGUpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCitlbmQ6CisJcnRscHJpdi0+cmEuaXNfc3BlY2lhbF9kYXRhID0gZmFsc2U7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnVuY3Rpb25zIGNhbGxlZCBieSBjb3JlLmMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHJ0bDkyZV90eF9hZ2dfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF90aWRfZGF0YSAqdGlkX2RhdGE7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKworCWlmIChzdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwlpZiAoIXN0YV9lbnRyeSkKKwkJcmV0dXJuIC1FTlhJTzsKKwl0aWRfZGF0YSA9ICZzdGFfZW50cnktPnRpZHNbdGlkXTsKKworCVJUX1RSQUNFKENPTVBfU0VORCwgREJHX0RNRVNHLAorCQkgKCJvbiByYSA9ICVwTSB0aWQgPSAlZCBzZXE6JWRcbiIsIHN0YS0+YWRkciwgdGlkLAorCQkgIHRpZF9kYXRhLT5zZXFfbnVtYmVyKSk7CisKKwkqc3NuID0gdGlkX2RhdGEtPnNlcV9udW1iZXI7CisJdGlkX2RhdGEtPmFnZy5hZ2dfc3RhdGUgPSBSVExfQUdHX1NUQVJUOworCisJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydGw5MmVfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3RpZF9kYXRhICp0aWRfZGF0YTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCisJaWYgKHN0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENvbXBhcmluZyBhbiBhcnJheSB0byBudWxsIGlzIG5vdCB1c2VmdWwgKi8KKwkvKmlmICghc3RhLT5hZGRyKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgicmEgPSBOVUxMXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0qLworCisJUlRfVFJBQ0UoQ09NUF9TRU5ELCBEQkdfRE1FU0csCisJCSAoIm9uIHJhID0gJXBNIHRpZCA9ICVkXG4iLCBzdGEtPmFkZHIsIHRpZCkpOworCisJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJdGlkX2RhdGEgPSAmc3RhX2VudHJ5LT50aWRzW3RpZF07CisJc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9IFJUTF9BR0dfU1RPUDsKKworCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydGw5MmVfcnhfYWdnX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF90aWRfZGF0YSAqdGlkX2RhdGE7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKworCWlmIChzdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwlpZiAoIXN0YV9lbnRyeSkKKwkJcmV0dXJuIC1FTlhJTzsKKwl0aWRfZGF0YSA9ICZzdGFfZW50cnktPnRpZHNbdGlkXTsKKworCVJUX1RSQUNFKENPTVBfUkVDViwgREJHX0RNRVNHLAorCQkgKCJvbiByYSA9ICVwTSB0aWQgPSAlZCBzZXE6JWRcbiIsIHN0YS0+YWRkciwgdGlkLAorCQkgdGlkX2RhdGEtPnNlcV9udW1iZXIpKTsKKworCXRpZF9kYXRhLT5hZ2cucnhfYWdnX3N0YXRlID0gUlRMX1JYX0FHR19TVEFSVDsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0bDkyZV9yeF9hZ2dfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfdGlkX2RhdGEgKnRpZF9kYXRhOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisKKwlpZiAoc3RhID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29tcGFyaW5nIGFuIGFycmF5IHRvIG51bGwgaXMgbm90IHVzZWZ1bCAqLworCS8qaWYgKCFzdGEtPmFkZHIpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywgKCJyYSA9IE5VTExcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSovCisKKwlSVF9UUkFDRShDT01QX1NFTkQsIERCR19ETUVTRywKKwkJICgib24gcmEgPSAlcE0gdGlkID0gJWRcbiIsIHN0YS0+YWRkciwgdGlkKSk7CisKKwlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwl0aWRfZGF0YSA9ICZzdGFfZW50cnktPnRpZHNbdGlkXTsKKwlzdGFfZW50cnktPnRpZHNbdGlkXS5hZ2cucnhfYWdnX3N0YXRlID0gUlRMX1JYX0FHR19TVE9QOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydGw5MmVfdHhfYWdnX29wZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3RpZF9kYXRhICp0aWRfZGF0YTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCisJaWYgKHN0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENvbXBhcmluZyBhbiBhcnJheSB0byBudWxsIGlzIG5vdCB1c2VmdWwgKi8KKwkvKmlmICghc3RhLT5hZGRyKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgicmEgPSBOVUxMXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0qLworCisJUlRfVFJBQ0UoQ09NUF9TRU5ELCBEQkdfRE1FU0csCisJCSAoIm9uIHJhID0gJXBNIHRpZCA9ICVkXG4iLCBzdGEtPmFkZHIsIHRpZCkpOworCisJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJdGlkX2RhdGEgPSAmc3RhX2VudHJ5LT50aWRzW3RpZF07CisJc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9IFJUTF9BR0dfT1BFUkFUSU9OQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHdxICYgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3Igcm9hbWluZyAqLwordm9pZCBydGw5MmVfYmVhY29uX3N0YXRpc3RpYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpCisJCXJldHVybjsKKworCS8qIGNoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgYmVhY29uICovCisJaWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybjsKKworCS8qIG1pbi4gYmVhY29uIGxlbmd0aCArIEZDU19MRU4gKi8KKwlpZiAoc2tiLT5sZW4gPD0gNDAgKyBGQ1NfTEVOKQorCQlyZXR1cm47CisKKwkvKiBhbmQgb25seSBiZWFjb25zIGZyb20gdGhlIGFzc29jaWF0ZWQgQlNTSUQsIHBsZWFzZSAqLworCWlmICghZXRoZXJfYWRkcl9lcXVhbChoZHItPmFkZHIzLCBydGxwcml2LT5tYWM4MDIxMS5ic3NpZCkpCisJCXJldHVybjsKKworCXJ0bHByaXYtPmxpbmtfaW5mby5iY25fcnhfaW5wZXJpb2QrKzsKK30KKwordm9pZCBydGw5MmVfd2F0Y2hkb2dfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3dvcmtzICpydGx3b3JrcyA9IGNvbnRhaW5lcl9vZl9kd29ya19ydGwoZGF0YSwKKwkJCQkJCQkgICAgc3RydWN0IHJ0bF93b3JrcywKKwkJCQkJCQkgICAgd2F0Y2hkb2dfd3EpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcnRsd29ya3MtPmh3OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBiX2J1c3l0cmFmZmljID0gZmFsc2U7CisJYm9vbCBiX3R4X2J1c3lfdHJhZmZpYyA9IGZhbHNlOworCWJvb2wgYl9yeF9idXN5X3RyYWZmaWMgPSBmYWxzZTsKKwlib29sIGJfaGlnaGVyX2J1c3l0cmFmZmljID0gZmFsc2U7CisJYm9vbCBiX2hpZ2hlcl9idXN5cnh0cmFmZmljID0gZmFsc2U7CisJdTggaWR4LCB0aWQ7CisJdTMyIHJ4X2NudF9pbnA0ZXJpb2QgPSAwOworCXUzMiB0eF9jbnRfaW5wNGVyaW9kID0gMDsKKwl1MzIgYXZlcl9yeF9jbnRfaW5wZXJpb2QgPSAwOworCXUzMiBhdmVyX3R4X2NudF9pbnBlcmlvZCA9IDA7CisJdTMyIGF2ZXJfdGlkdHhfaW5wZXJpb2RbTUFYX1RJRF9DT1VOVF0gPSB7MH07CisJdTMyIHRpZHR4X2lucDRlcmlvZFtNQVhfVElEX0NPVU5UXSA9IHswfTsKKwlib29sIGJlbnRlcl9wcyA9IGZhbHNlOworCisJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpCisJCXJldHVybjsKKworCS8qIDwxPiBEZXRlcm1pbmUgaWYgYWN0aW9uIGZyYW1lIGlzIGFsbG93ZWQgKi8KKwlpZiAobWFjLT5saW5rX3N0YXRlID4gTUFDODAyMTFfTk9MSU5LKSB7CisJCWlmIChtYWMtPmNudF9hZnRlcl9saW5rZWQgPCAyMCkKKwkJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCsrOworCX0gZWxzZSB7CisJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCA9IDA7CisJfQorCisJLyogPDI+IHRvIGNoZWNrIGlmIHRyYWZmaWMgYnVzeSwgaWYKKwkgKiBidXN5dHJhZmZpYyB3ZSBkb24ndCBjaGFuZ2UgY2hhbm5lbCAqLworCWlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKSB7CisJCS8qICgxKSBnZXQgYXZlcl9yeF9jbnRfaW5wZXJpb2QgJiBhdmVyX3R4X2NudF9pbnBlcmlvZCAqLworCQlmb3IgKGlkeCA9IDA7IGlkeCA8PSAyOyBpZHgrKykgeworCQkJcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbjRwZXJpb2RbaWR4XSA9CisJCQkgICAgcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbjRwZXJpb2RbaWR4ICsgMV07CisJCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2luNHBlcmlvZFtpZHhdID0KKwkJCSAgICBydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2luNHBlcmlvZFtpZHggKyAxXTsKKwkJfQorCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2luNHBlcmlvZFszXSA9CisJCSAgICBydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kOworCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2luNHBlcmlvZFszXSA9CisJCSAgICBydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2lucGVyaW9kOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8PSAzOyBpZHgrKykgeworCQkJcnhfY250X2lucDRlcmlvZCArPQorCQkJICAgIHJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW40cGVyaW9kW2lkeF07CisJCQl0eF9jbnRfaW5wNGVyaW9kICs9CisJCQkgICAgcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbjRwZXJpb2RbaWR4XTsKKwkJfQorCQlhdmVyX3J4X2NudF9pbnBlcmlvZCA9IHJ4X2NudF9pbnA0ZXJpb2QgLyA0OworCQlhdmVyX3R4X2NudF9pbnBlcmlvZCA9IHR4X2NudF9pbnA0ZXJpb2QgLyA0OworCisJCS8qICgyKSBjaGVjayB0cmFmZmljIGJ1c3kgKi8KKwkJaWYgKGF2ZXJfcnhfY250X2lucGVyaW9kID4gMTAwIHx8IGF2ZXJfdHhfY250X2lucGVyaW9kID4gMTAwKSB7CisJCQliX2J1c3l0cmFmZmljID0gdHJ1ZTsKKwkJCWlmIChhdmVyX3J4X2NudF9pbnBlcmlvZCA+IGF2ZXJfdHhfY250X2lucGVyaW9kKQorCQkJCWJfcnhfYnVzeV90cmFmZmljID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQliX3R4X2J1c3lfdHJhZmZpYyA9IGZhbHNlOworCQl9CisKKwkJLyogSGlnaGVyIFR4L1J4IGRhdGEuICovCisJCWlmIChhdmVyX3J4X2NudF9pbnBlcmlvZCA+IDQwMDAgfHwKKwkJICAgIGF2ZXJfdHhfY250X2lucGVyaW9kID4gNDAwMCkgeworCQkJYl9oaWdoZXJfYnVzeXRyYWZmaWMgPSB0cnVlOworCisJCQkvKiBFeHRyZW1lbHkgaGlnaCBSeCBkYXRhLiAqLworCQkJaWYgKGF2ZXJfcnhfY250X2lucGVyaW9kID4gNTAwMCkKKwkJCQliX2hpZ2hlcl9idXN5cnh0cmFmZmljID0gdHJ1ZTsKKwkJfQorCisJCS8qIGNoZWNrIGV2ZXJ5IHRpZCdzIHR4IHRyYWZmaWMgKi8KKwkJZm9yICh0aWQgPSAwOyB0aWQgPD0gNzsgdGlkKyspIHsKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDw9IDI7IGlkeCsrKQorCQkJCXJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbjRwZXJpb2RbdGlkXVtpZHhdID0KKwkJCQkJcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2luNHBlcmlvZFt0aWRdCisJCQkJCVtpZHggKyAxXTsKKwkJCXJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbjRwZXJpb2RbdGlkXVszXSA9CisJCQkJcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2lucGVyaW9kW3RpZF07CisKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDw9IDM7IGlkeCsrKQorCQkJCXRpZHR4X2lucDRlcmlvZFt0aWRdICs9CisJCQkJICAgcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2luNHBlcmlvZFt0aWRdW2lkeF07CisJCQlhdmVyX3RpZHR4X2lucGVyaW9kW3RpZF0gPSB0aWR0eF9pbnA0ZXJpb2RbdGlkXSAvIDQ7CisJCQlpZiAoYXZlcl90aWR0eF9pbnBlcmlvZFt0aWRdID4gNTAwMCkKKwkJCQlydGxwcml2LT5saW5rX2luZm8uaGlnaGVyX2J1c3l0eHRyYWZmaWNbdGlkXSA9CisJCQkJCQkJCQl0cnVlOworCQkJZWxzZQorCQkJCXJ0bHByaXYtPmxpbmtfaW5mby5oaWdoZXJfYnVzeXR4dHJhZmZpY1t0aWRdID0KKwkJCQkJCQkJCWZhbHNlOworCQl9CisKKwkJaWYgKCgocnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCArCisJCSAgICAgIHJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QpID4gOCkgfHwKKwkJICAgIChydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kID4gMikpCisJCQliZW50ZXJfcHMgPSBmYWxzZTsKKwkJZWxzZQorCQkJYmVudGVyX3BzID0gdHJ1ZTsKKworCQkvKiBMZWlzdXJlUFMgb25seSB3b3JrIGluIGluZnJhIG1vZGUuICovCisJCWlmIChiZW50ZXJfcHMpCisJCQlydGw5MmVfbHBzX2VudGVyKGh3KTsKKwkJZWxzZQorCQkJcnRsOTJlX2xwc19sZWF2ZShodyk7CisJfQorCisJcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCA9IDA7CisJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCA9IDA7CisJZm9yICh0aWQgPSAwOyB0aWQgPD0gNzsgdGlkKyspCisJCXJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbnBlcmlvZFt0aWRdID0gMDsKKworCXJ0bHByaXYtPmxpbmtfaW5mby5iX2J1c3l0cmFmZmljID0gYl9idXN5dHJhZmZpYzsKKwlydGxwcml2LT5saW5rX2luZm8uYl9yeF9idXN5X3RyYWZmaWMgPSBiX3J4X2J1c3lfdHJhZmZpYzsKKwlydGxwcml2LT5saW5rX2luZm8uYl90eF9idXN5X3RyYWZmaWMgPSBiX3R4X2J1c3lfdHJhZmZpYzsKKwlydGxwcml2LT5saW5rX2luZm8uYl9oaWdoZXJfYnVzeXRyYWZmaWMgPSBiX2hpZ2hlcl9idXN5dHJhZmZpYzsKKwlydGxwcml2LT5saW5rX2luZm8uYl9oaWdoZXJfYnVzeXJ4dHJhZmZpYyA9IGJfaGlnaGVyX2J1c3lyeHRyYWZmaWM7CisKKwkvKiA8Mz4gRE0gKi8KKwlydGxwcml2LT5jZmctPm9wcy0+ZG1fd2F0Y2hkb2coaHcpOworCisJLyogPDQ+IHJvYW1pbmcgKi8KKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCAmJgorCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmICgocnRscHJpdi0+bGlua19pbmZvLmJjbl9yeF9pbnBlcmlvZCArCisJCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kKSA9PSAwKSB7CisJCQlydGxwcml2LT5saW5rX2luZm8ucm9hbV90aW1lcysrOworCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19ETUVTRywKKwkJCQkgKCJBUCBvZmYgZm9yICVkIHNcbiIsCisJCQkJICAocnRscHJpdi0+bGlua19pbmZvLnJvYW1fdGltZXMgKiAyKSkpOworCisJCQkvKiBpZiB3ZSBjYW4ndCByZWN2IGJlYWNvbiBmb3IgMTBzLAorCQkJKiB3ZSBzaG91bGQgcmVjb25uZWN0IHRoaXMgQVAgKi8KKwkJCWlmIChydGxwcml2LT5saW5rX2luZm8ucm9hbV90aW1lcyA+PSA1KSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkJICgiQVAgb2ZmLCB0cnkgdG8gcmVjb25uZWN0IG5vd1xuIikpOworCQkJCXJ0bHByaXYtPmxpbmtfaW5mby5yb2FtX3RpbWVzID0gMDsKKwkJCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKAorCQkJCQlydGxwcml2LT5tYWM4MDIxMS52aWYpOworCQkJfQorCQl9IGVsc2UgeworCQkJcnRscHJpdi0+bGlua19pbmZvLnJvYW1fdGltZXMgPSAwOworCQl9CisJfQorCisJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfYnRjX3N0YXR1cygpKQorCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX29wcy0+YnRjX3BlcmlvZGljYWwocnRscHJpdik7CisKKwlydGxwcml2LT5saW5rX2luZm8uYmNuX3J4X2lucGVyaW9kID0gMDsKK30KKwordm9pZCBydGw5MmVfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h3ICopZGF0YTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocnRscHJpdi0+d29ya3MucnRsX3dxLAorCQkJICAgJnJ0bHByaXYtPndvcmtzLndhdGNoZG9nX3dxLCAwKTsKKworCW1vZF90aW1lcigmcnRscHJpdi0+d29ya3Mud2F0Y2hkb2dfdGltZXIsCisJCSAgamlmZmllcyArIE1TRUNTKFJUTF9XQVRDSF9ET0dfVElNRSkpOworfQordm9pZCBydGw5MmVfZndldnRfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3dvcmtzICpydGx3b3JrcyA9CisJCWNvbnRhaW5lcl9vZl9kd29ya19ydGwoZGF0YSwgc3RydWN0IHJ0bF93b3JrcywgZndldnRfd3EpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcnRsd29ya3MtPmh3OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5jMmhfY29tbWFuZF9oYW5kbGUoaHcpOworfQordm9pZCBydGw5MmVfZWFzeV9jb25jdXJyZW50X3JldHJ5dGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKilkYXRhOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKmJ1ZGR5X3ByaXYgPSBydGxwcml2LT5idWRkeV9wcml2OworCisJaWYgKGJ1ZGR5X3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmR1YWxtYWNfZWFzeV9jb25jdXJyZW50KGh3KTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmcmFtZSBwcm9jZXNzIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1OCAqcnRsOTJlX2ZpbmRfaWUodTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIHU4IGllKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopZGF0YTsKKwl1OCAqcG9zLCAqZW5kOworCisJcG9zID0gKHU4ICopbWdtdC0+dS5iZWFjb24udmFyaWFibGU7CisJZW5kID0gZGF0YSArIGxlbjsKKwl3aGlsZSAocG9zIDwgZW5kKSB7CisJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKHBvc1swXSA9PSBpZSkKKwkJCXJldHVybiBwb3M7CisKKwkJcG9zICs9IDIgKyBwb3NbMV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiB3aGVuIHdlIHVzZSAyIHJ4IGFudHMgd2Ugc2VuZCBJRUVFODAyMTFfU01QU19PRkYgKi8KKy8qIHdoZW4gd2UgdXNlIDEgcnggYW50IHdlIHNlbmQgSUVFRTgwMjExX1NNUFNfU1RBVElDICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ0bF9tYWtlX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMsCisJCQkJCSAgICB1OCAqZGEsIHU4ICpic3NpZCkKK3sKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210X2NvbXBhdCAqYWN0aW9uX2ZyYW1lOworCisJLyogMjcgPSBoZWFkZXIgKyBjYXRlZ29yeSArIGFjdGlvbiArIHNtcHMgbW9kZSAqLworCXNrYiA9IGRldl9hbGxvY19za2IoMjcgKyBody0+ZXh0cmFfdHhfaGVhZHJvb20pOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYl9yZXNlcnZlKHNrYiwgaHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKwlhY3Rpb25fZnJhbWUgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCAyNyk7CisJbWVtc2V0KGFjdGlvbl9mcmFtZSwgMCwgMjcpOworCWV0aGVyX2FkZHJfY29weShhY3Rpb25fZnJhbWUtPmRhLCBkYSk7CisJZXRoZXJfYWRkcl9jb3B5KGFjdGlvbl9mcmFtZS0+c2EsIHJ0bGVmdXNlLT5kZXZfYWRkcik7CisJZXRoZXJfYWRkcl9jb3B5KGFjdGlvbl9mcmFtZS0+YnNzaWQsIGJzc2lkKTsKKwlhY3Rpb25fZnJhbWUtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0hUOworCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLmFjdGlvbiA9IFdMQU5fSFRfQUNUSU9OX1NNUFM7CisJc3dpdGNoIChzbXBzKSB7CisJY2FzZSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM6LyogMCAqLworCWNhc2UgSUVFRTgwMjExX1NNUFNfTlVNX01PREVTOi8qIDQgKi8KKwkJV0FSTl9PTigxKTsKKwkvKiBIZXJlIHdpbGwgZ2V0IGEgJ01JU1NJTkdfQlJFQUsnIGluIENvdmVyaXR5IFRlc3QsIGp1c3QgaWdub3JlIGl0LgorCSAqIEFjY29yZGluZyB0byBLZXJuZWwgQ29kZSwgaGVyZSBpcyByaWdodC4KKwkgKi8KKwljYXNlIElFRUU4MDIxMV9TTVBTX09GRjovKiAxICovIC8qTUlNT19QU19OT0xJTUlUKi8KKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9ESVNBQkxFRDsvKiAwICovCisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfU1RBVElDOi8qIDIgKi8gLypNSU1PX1BTX1NUQVRJQyovCisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfU1RBVElDOy8qIDEgKi8KKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU01QU19EWU5BTUlDOi8qIDMgKi8gLypNSU1PX1BTX0RZTkFNSUMqLworCQlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuaHRfc21wcy5zbXBzX2NvbnRyb2wgPQorCQkJCVdMQU5fSFRfU01QU19DT05UUk9MX0RZTkFNSUM7LyogMyAqLworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2tiOworfQorCitpbnQgc3RnX3J0bF9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3QgcnRsX3RjYl9kZXNjIHRjYl9kZXNjOworCXU4IGJzc2lkW0VUSF9BTEVOXSA9IHswfTsKKworCW1lbXNldCgmdGNiX2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgcnRsX3RjYl9kZXNjKSk7CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEuYWN0X3NjYW5uaW5nKQorCQlnb3RvIGVycl9mcmVlOworCisJaWYgKCFzdGEpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlpZiAodW5saWtlbHkoaXNfaGFsX3N0b3AocnRsaGFsKSB8fCBwcHNjLT5yZnB3cl9zdGF0ZSAhPSBFUkZPTikpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlpZiAoIXRlc3RfYml0KFJUTF9TVEFUVVNfSU5URVJGQUNFX1NUQVJULCAmcnRscHJpdi0+c3RhdHVzKSkKKwkJZ290byBlcnJfZnJlZTsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCWV0aGVyX2FkZHJfY29weShic3NpZCwgcnRscHJpdi0+ZWZ1c2UuZGV2X2FkZHIpOworCWVsc2UKKwkJZXRoZXJfYWRkcl9jb3B5KGJzc2lkLCBydGxwcml2LT5tYWM4MDIxMS5ic3NpZCk7CisKKwlza2IgPSBydGxfbWFrZV9zbXBzX2FjdGlvbihodywgc21wcywgc3RhLT5hZGRyLCBic3NpZCk7CisJLyogdGhpcyBpcyBhIHR5cGUgPSBtZ210ICogc3R5cGUgPSBhY3Rpb24gZnJhbWUgKi8KKwlpZiAoc2tiKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0KKwkJCShzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwkJc3RhX2VudHJ5LT5taW1vX3BzID0gc21wczsKKwkJLyogcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX3RibChodywgc3RhLCAwKTsgKi8KKworCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IDA7CisJCWluZm8tPmJhbmQgPSBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQ7CisJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBzdGEsIHNrYiwgJnRjYl9kZXNjKTsKKwl9CisJcmV0dXJuIDE7CisKK2Vycl9mcmVlOgorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX3NlbmRfc21wc19hY3Rpb24pOworCisvKiBiZWNhdXNlIG1hYzgwMjExIGhhdmUgaXNzdWVzIHdoZW4gY2FuIHJlY2VpdmUgZGVsIGJhCisgKiBzbyBoZXJlIHdlIGp1c3QgbWFrZSBhIGZha2UgZGVsX2JhIGlmIHdlIHJlY2VpdmUgYSBiYV9yZXEKKyAqIGJ1dCByeF9hZ2cgd2FzIG9wZW5lZCB0byBsZXQgbWFjODAyMTEgcmVsZWFzZSBzb21lIGJhCisgKiByZWxhdGVkIHJlc291cmNlcywgc28gcGxlYXNlIHRoaXMgZGVsX2JhIGZvciB0eCAqLworc3RydWN0IHNrX2J1ZmYgKnJ0bDkyZV9tYWtlX2RlbF9iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICB1OCAqc2EsIHU4ICpic3NpZCwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICphY3Rpb25fZnJhbWU7CisJdTE2IHBhcmFtczsKKworCS8qIDI3ID0gaGVhZGVyICsgY2F0ZWdvcnkgKyBhY3Rpb24gKyBzbXBzIG1vZGUgKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKDM0ICsgaHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2JfcmVzZXJ2ZShza2IsIGh3LT5leHRyYV90eF9oZWFkcm9vbSk7CisJYWN0aW9uX2ZyYW1lID0gKHZvaWQgKilza2JfcHV0KHNrYiwgMzQpOworCW1lbXNldChhY3Rpb25fZnJhbWUsIDAsIDM0KTsKKwlldGhlcl9hZGRyX2NvcHkoYWN0aW9uX2ZyYW1lLT5zYSwgc2EpOworCWV0aGVyX2FkZHJfY29weShhY3Rpb25fZnJhbWUtPmRhLCBydGxlZnVzZS0+ZGV2X2FkZHIpOworCWV0aGVyX2FkZHJfY29weShhY3Rpb25fZnJhbWUtPmJzc2lkLCBic3NpZCk7CisJYWN0aW9uX2ZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOworCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5kZWxiYS5hY3Rpb25fY29kZSA9IFdMQU5fQUNUSU9OX0RFTEJBOworCXBhcmFtcyA9ICh1MTYpKDEgPDwgMTEpOwkvKiBiaXQgMTEgaW5pdGlhdG9yICovCisJcGFyYW1zIHw9ICh1MTYpKHRpZCA8PCAxMik7CS8qIGJpdCAxNToxMiBUSUQgbnVtYmVyICovCisKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuZGVsYmEucmVhc29uX2NvZGUgPQorCQljcHVfdG9fbGUxNihXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOworCisJcmV0dXJuIHNrYjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElPVCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGJvb2wgcnRsX2Noa192ZW5kb3Jfb3Vpc3ViKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IG9jdGV0X3N0cmluZyB2ZW5kb3JfaWUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCXN0YXRpYyB1OCBhdGhjYXBfMVtdID0geyAweDAwLCAweDAzLCAweDdGIH07CisJc3RhdGljIHU4IGF0aGNhcF8yW10gPSB7IDB4MDAsIDB4MTMsIDB4NzQgfTsKKwlzdGF0aWMgdTggYnJvYWRjYXBfMVtdID0geyAweDAwLCAweDEwLCAweDE4IH07CisJc3RhdGljIHU4IGJyb2FkY2FwXzJbXSA9IHsgMHgwMCwgMHgwYSwgMHhmNyB9OworCXN0YXRpYyB1OCBicm9hZGNhcF8zW10gPSB7IDB4MDAsIDB4MDUsIDB4YjUgfTsKKwlzdGF0aWMgdTggcmFjYXBbXSA9IHsgMHgwMCwgMHgwYywgMHg0MyB9OworCXN0YXRpYyB1OCBjaXNjb2NhcFtdID0geyAweDAwLCAweDQwLCAweDk2IH07CisJc3RhdGljIHU4IG1hcnZjYXBbXSA9IHsgMHgwMCwgMHg1MCwgMHg0MyB9OworCisJaWYgKG1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGF0aGNhcF8xLCAzKSA9PSAwIHx8CisJICAgIG1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGF0aGNhcF8yLCAzKSA9PSAwKSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLnZlbmRvciA9IFBFRVJfQVRIOworCQltYXRjaGVkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKG1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGJyb2FkY2FwXzEsIDMpID09IDAgfHwKKwkJICAgbWVtY21wKHZlbmRvcl9pZS5vY3RldCwgYnJvYWRjYXBfMiwgMykgPT0gMCB8fAorCQkgICBtZW1jbXAodmVuZG9yX2llLm9jdGV0LCBicm9hZGNhcF8zLCAzKSA9PSAwKSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLnZlbmRvciA9IFBFRVJfQlJPQUQ7CisJCW1hdGNoZWQgPSB0cnVlOworCX0gZWxzZSBpZiAobWVtY21wKHZlbmRvcl9pZS5vY3RldCwgcmFjYXAsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9SQUw7CisJCW1hdGNoZWQgPSB0cnVlOworCX0gZWxzZSBpZiAobWVtY21wKHZlbmRvcl9pZS5vY3RldCwgY2lzY29jYXAsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9DSVNDTzsKKwkJbWF0Y2hlZCA9IHRydWU7CisJfSBlbHNlIGlmIChtZW1jbXAodmVuZG9yX2llLm9jdGV0LCBtYXJ2Y2FwLCAzKSA9PSAwKSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLnZlbmRvciA9IFBFRVJfTUFSVjsKKwkJbWF0Y2hlZCA9IHRydWU7CisJfQorCisJcmV0dXJuIG1hdGNoZWQ7Cit9CisKK3N0YXRpYyBib29sIHJ0bF9maW5kXzIyMV9pZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBvY3RldF9zdHJpbmcgdmVuZG9yX2llOworCXU4ICpwb3MsICplbmQ7CisKKwlwb3MgPSAodTggKiltZ210LT51LmJlYWNvbi52YXJpYWJsZTsKKwllbmQgPSBkYXRhICsgbGVuOworCXdoaWxlIChwb3MgPCBlbmQpIHsKKwkJaWYgKHBvc1swXSA9PSAyMjEpIHsKKwkJCXZlbmRvcl9pZS5sZW5ndGggPSBwb3NbMV07CisJCQl2ZW5kb3JfaWUub2N0ZXQgPSAmcG9zWzJdOworCQkJaWYgKHJ0bF9jaGtfdmVuZG9yX291aXN1YihodywgdmVuZG9yX2llKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXBvcyArPSAyICsgcG9zWzFdOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcnRsOTJlX3JlY29nbml6ZV9wZWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilkYXRhOworCXUzMiB2ZW5kb3IgPSBQRUVSX1VOS05PV047CisKKwlzdGF0aWMgdTggYXAzXzFbM10gPSB7IDB4MDAsIDB4MTQsIDB4YmYgfTsKKwlzdGF0aWMgdTggYXAzXzJbM10gPSB7IDB4MDAsIDB4MWEsIDB4NzAgfTsKKwlzdGF0aWMgdTggYXAzXzNbM10gPSB7IDB4MDAsIDB4MWQsIDB4N2UgfTsKKwlzdGF0aWMgdTggYXA0XzFbM10gPSB7IDB4MDAsIDB4OTAsIDB4Y2MgfTsKKwlzdGF0aWMgdTggYXA0XzJbM10gPSB7IDB4MDAsIDB4MGUsIDB4MmUgfTsKKwlzdGF0aWMgdTggYXA0XzNbM10gPSB7IDB4MDAsIDB4MTgsIDB4MDIgfTsKKwlzdGF0aWMgdTggYXA0XzRbM10gPSB7IDB4MDAsIDB4MTcsIDB4M2YgfTsKKwlzdGF0aWMgdTggYXA0XzVbM10gPSB7IDB4MDAsIDB4MWMsIDB4ZGYgfTsKKwlzdGF0aWMgdTggYXA1XzFbM10gPSB7IDB4MDAsIDB4MWMsIDB4ZjAgfTsKKwlzdGF0aWMgdTggYXA1XzJbM10gPSB7IDB4MDAsIDB4MjEsIDB4OTEgfTsKKwlzdGF0aWMgdTggYXA1XzNbM10gPSB7IDB4MDAsIDB4MjQsIDB4MDEgfTsKKwlzdGF0aWMgdTggYXA1XzRbM10gPSB7IDB4MDAsIDB4MTUsIDB4ZTkgfTsKKwlzdGF0aWMgdTggYXA1XzVbM10gPSB7IDB4MDAsIDB4MTcsIDB4OUEgfTsKKwlzdGF0aWMgdTggYXA1XzZbM10gPSB7IDB4MDAsIDB4MTgsIDB4RTcgfTsKKwlzdGF0aWMgdTggYXA2XzFbM10gPSB7IDB4MDAsIDB4MTcsIDB4OTQgfTsKKwlzdGF0aWMgdTggYXA3XzFbM10gPSB7IDB4MDAsIDB4MTQsIDB4YTQgfTsKKworCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX05PTElOSykgeworCQltYWMtPnZlbmRvciA9IFBFRVJfVU5LTk9XTjsKKwkJcmV0dXJuOworCX0KKworCWlmIChtYWMtPmNudF9hZnRlcl9saW5rZWQgPiAyKQorCQlyZXR1cm47CisKKwkvKiBjaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIGJlYWNvbiAqLworCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm47CisKKwkvKiBtaW4uIGJlYWNvbiBsZW5ndGggKyBGQ1NfTEVOICovCisJaWYgKGxlbiA8PSA0MCArIEZDU19MRU4pCisJCXJldHVybjsKKworCS8qIGFuZCBvbmx5IGJlYWNvbnMgZnJvbSB0aGUgYXNzb2NpYXRlZCBCU1NJRCwgcGxlYXNlICovCisJaWYgKCFldGhlcl9hZGRyX2VxdWFsKGhkci0+YWRkcjMsIHJ0bHByaXYtPm1hYzgwMjExLmJzc2lkKSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bF9maW5kXzIyMV9pZShodywgZGF0YSwgbGVuKSkKKwkJdmVuZG9yID0gbWFjLT52ZW5kb3I7CisKKwlpZiAoKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfMSwgMykgPT0gMCkgfHwKKwkgICAgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfMiwgMykgPT0gMCkgfHwKKwkgICAgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfMywgMykgPT0gMCkgfHwKKwkgICAgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfNCwgMykgPT0gMCkgfHwKKwkgICAgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfNSwgMykgPT0gMCkgfHwKKwkgICAgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfNiwgMykgPT0gMCkgfHwKKwkJdmVuZG9yID09IFBFRVJfQVRIKSB7CisJCXZlbmRvciA9IFBFRVJfQVRIOworCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwgKCI9PmF0aCBmaW5kXG4iKSk7CisJfSBlbHNlIGlmICgobWVtY21wKG1hYy0+YnNzaWQsIGFwNF80LCAzKSA9PSAwKSB8fAorCQkgICAobWVtY21wKG1hYy0+YnNzaWQsIGFwNF81LCAzKSA9PSAwKSB8fAorCQkgICAobWVtY21wKG1hYy0+YnNzaWQsIGFwNF8xLCAzKSA9PSAwKSB8fAorCQkgICAobWVtY21wKG1hYy0+YnNzaWQsIGFwNF8yLCAzKSA9PSAwKSB8fAorCQkgICAobWVtY21wKG1hYy0+YnNzaWQsIGFwNF8zLCAzKSA9PSAwKSB8fAorCQl2ZW5kb3IgPT0gUEVFUl9SQUwpIHsKKwkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5yYWwgZmluZG5cbiIpKTsKKwkJdmVuZG9yID0gUEVFUl9SQUw7CisJfSBlbHNlIGlmIChtZW1jbXAobWFjLT5ic3NpZCwgYXA2XzEsIDMpID09IDAgfHwKKwkJdmVuZG9yID09IFBFRVJfQ0lTQ08pIHsKKwkJdmVuZG9yID0gUEVFUl9DSVNDTzsKKwkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5jaXNjbyBmaW5kXG4iKSk7CisJfSBlbHNlIGlmICgobWVtY21wKG1hYy0+YnNzaWQsIGFwM18xLCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwM18yLCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwM18zLCAzKSA9PSAwKSB8fAorCQl2ZW5kb3IgPT0gUEVFUl9CUk9BRCkgeworCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwgKCI9PmJyb2FkIGZpbmRcbiIpKTsKKwkJdmVuZG9yID0gUEVFUl9CUk9BRDsKKwl9IGVsc2UgaWYgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDdfMSwgMykgPT0gMCB8fAorCQl2ZW5kb3IgPT0gUEVFUl9NQVJWKSB7CisJCXZlbmRvciA9IFBFRVJfTUFSVjsKKwkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5tYXJ2IGZpbmRcbiIpKTsKKwl9CisKKwltYWMtPnZlbmRvciA9IHZlbmRvcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN5c2ZzIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgcnRsX2dsb2JhbF92YXIgZ2xvYmFsX3ZhciA9IHt9OworCitpbnQgIHJ0bF9jb3JlX21vZHVsZV9pbml0KHZvaWQpCit7CisJc3RhdGljIGludCBoZXJlX29uY2U7CisKKwlpZiAoaGVyZV9vbmNlKyspCisJCXJldHVybiAwOworCisJaWYgKHJ0bDkyZV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKSkKKwkJcHJfZGVidWcoInJ0bDogVW5hYmxlIHRvIHJlZ2lzdGVyIHJ0bF9yYywgdXNlIGRlZmF1bHQgUkMgISFcbiIpOworCisJLyogaW5pdCBzb21lIGdsb2JhbCB2YXJzICovCisJSU5JVF9MSVNUX0hFQUQoJmdsb2JhbF92YXIuZ2xiX3ByaXZfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmdsb2JhbF92YXIuZ2xiX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK3ZvaWQgIHJ0bF9jb3JlX21vZHVsZV9leGl0KHZvaWQpCit7CisJLypSQyovCisJcnRsOTJlX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2Jhc2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTI5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2Jhc2UuaApAQCAtMCwwICsxLDE2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMX0JBU0VfSF9fCisjZGVmaW5lIF9fUlRMX0JBU0VfSF9fCisKKyNpbmNsdWRlICJjb21wYXQuaCIKKworZW51bSBhcF9wZWVyIHsKKwlQRUVSX1VOS05PV04gPSAwLAorCVBFRVJfUlRMID0gMSwKKwlQRUVSX1JUTF85MlNFID0gMiwKKwlQRUVSX0JST0FEID0gMywKKwlQRUVSX1JBTCA9IDQsCisJUEVFUl9BVEggPSA1LAorCVBFRVJfQ0lTQ08gPSA2LAorCVBFRVJfTUFSViA9IDcsCisJUEVFUl9BSVJHTyA9IDksCisJUEVFUl9NQVggPSAxMCwKK307CisKKyNkZWZpbmUgUlRMX0RVTU1ZX09GRlNFVAkwCisjZGVmaW5lIFJUTF9EVU1NWV9VTklUCQk4CisjZGVmaW5lIFJUTF9UWF9EVU1NWV9TSVpFCShSVExfRFVNTVlfT0ZGU0VUICogUlRMX0RVTU1ZX1VOSVQpCisjZGVmaW5lIFJUTF9UWF9ERVNDX1NJWkUJMzIKKyNkZWZpbmUgUlRMX1RYX0hFQURFUl9TSVpFCShSVExfVFhfREVTQ19TSVpFICsgUlRMX1RYX0RVTU1ZX1NJWkUpCisKKyNkZWZpbmUgSFRfQU1TRFVfU0laRV80SwkzODM5CisjZGVmaW5lIEhUX0FNU0RVX1NJWkVfOEsJNzkzNQorCisjZGVmaW5lIE1BWF9CSVRfUkFURV80ME1IWl9NQ1MxNQkzMDAJLyogTWJwcyAqLworI2RlZmluZSBNQVhfQklUX1JBVEVfNDBNSFpfTUNTNwkJMTUwCS8qIE1icHMgKi8KKworI2RlZmluZSBNQVhfQklUX1JBVEVfU0hPUlRfR0lfMk5TU184ME1IWl9NQ1M5CTg2NwkvKiBNYnBzICovCisjZGVmaW5lIE1BWF9CSVRfUkFURV9TSE9SVF9HSV8yTlNTXzgwTUhaX01DUzcJNjUwCS8qIE1icHMgKi8KKyNkZWZpbmUgTUFYX0JJVF9SQVRFX0xPTkdfR0lfMk5TU184ME1IWl9NQ1M5CTc4MAkvKiBNYnBzICovCisjZGVmaW5lIE1BWF9CSVRfUkFURV9MT05HX0dJXzJOU1NfODBNSFpfTUNTNwk1ODUJLyogTWJwcyAqLworCisjZGVmaW5lIE1BWF9CSVRfUkFURV9TSE9SVF9HSV8xTlNTXzgwTUhaX01DUzkJNDM0CS8qIE1icHMgKi8KKyNkZWZpbmUgTUFYX0JJVF9SQVRFX1NIT1JUX0dJXzFOU1NfODBNSFpfTUNTNwkzMjUJLyogTWJwcyAqLworI2RlZmluZSBNQVhfQklUX1JBVEVfTE9OR19HSV8xTlNTXzgwTUhaX01DUzkJMzkwCS8qIE1icHMgKi8KKyNkZWZpbmUgTUFYX0JJVF9SQVRFX0xPTkdfR0lfMU5TU184ME1IWl9NQ1M3CTI5MwkvKiBNYnBzICovCisKKworI2RlZmluZSBSVExfUkFURV9DT1VOVF9MRUdBQ1kJCTEyCisjZGVmaW5lIFJUTF9DSEFOTkVMX0NPVU5UCQkxNAorCisjZGVmaW5lIEZSQU1FX09GRlNFVF9GUkFNRV9DT05UUk9MCTAKKyNkZWZpbmUgRlJBTUVfT0ZGU0VUX0RVUkFUSU9OCQkyCisjZGVmaW5lIEZSQU1FX09GRlNFVF9BRERSRVNTMQkJNAorI2RlZmluZSBGUkFNRV9PRkZTRVRfQUREUkVTUzIJCTEwCisjZGVmaW5lIEZSQU1FX09GRlNFVF9BRERSRVNTMwkJMTYKKyNkZWZpbmUgRlJBTUVfT0ZGU0VUX1NFUVVFTkNFCQkyMgorI2RlZmluZSBGUkFNRV9PRkZTRVRfQUREUkVTUzQJCTI0CisKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9GUkFNRV9DT05UUk9MKF9oZHIsIF92YWwpCQlcCisJV1JJVEVFRjJCWVRFKF9oZHIsIF92YWwpCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfVFlQRV9BTkRfU1VCVFlQRShfaGRyLCBfdmFsKQlcCisJV1JJVEVFRjFCWVRFKF9oZHIsIF92YWwpCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfUFdSX01HTlQoX2hkciwgX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8yQllURShfaGRyLCAxMiwgMSwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9UT19EUyhfaGRyLCBfdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV8yQllURShfaGRyLCA4LCAxLCBfdmFsKQorCisjZGVmaW5lIFNFVF84MDIxMV9QU19QT0xMX0FJRChfaGRyLCBfdmFsKQkJXAorCSgqKHUxNiAqKSgodTggKikoX2hkcikgKyAyKSA9IF92YWwpCisjZGVmaW5lIFNFVF84MDIxMV9QU19QT0xMX0JTU0lEKF9oZHIsIF92YWwpCQlcCisJbWVtY3B5KCgodTggKikoX2hkcikpICsgNCwgKHU4ICopKF92YWwpLCBFVEhfQUxFTikKKyNkZWZpbmUgU0VUXzgwMjExX1BTX1BPTExfVEEoX2hkciwgX3ZhbCkJCVwKKwltZW1jcHkoKCh1OCAqKShfaGRyKSkgKyAxMCwgKHU4ICopKF92YWwpLCBFVEhfQUxFTikKKworI2RlZmluZSBTRVRfODAyMTFfSERSX0RVUkFUSU9OKF9oZHIsIF92YWwpCVwKKwlXUklURUVGMkJZVEUoKHU4ICopKF9oZHIpK0ZSQU1FX09GRlNFVF9EVVJBVElPTiwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9BRERSRVNTMShfaGRyLCBfdmFsKQlcCisJQ1BfTUFDQUREUigodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0FERFJFU1MxLCAodTggKikoX3ZhbCkpCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfQUREUkVTUzIoX2hkciwgX3ZhbCkJXAorCUNQX01BQ0FERFIoKHU4ICopKF9oZHIpK0ZSQU1FX09GRlNFVF9BRERSRVNTMiwgKHU4ICopKF92YWwpKQorI2RlZmluZSBTRVRfODAyMTFfSERSX0FERFJFU1MzKF9oZHIsIF92YWwpCVwKKwlDUF9NQUNBRERSKCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzMsICh1OCAqKShfdmFsKSkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9GUkFHTUVOVF9TRVFVRU5DRShfaGRyLCBfdmFsKSAgXAorCVdSSVRFRUYyQllURSgodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX1NFUVVFTkNFLCBfdmFsKQorCisjZGVmaW5lIFNFVF9CRUFDT05fUFJPQkVfUlNQX1RJTUVfU1RBTVBfTE9XKF9fcGhkciwgX192YWwpCVwKKwlXUklURUVGNEJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDI0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfVElNRV9TVEFNUF9ISUdIKF9fcGhkciwgX192YWwpIFwKKwlXUklURUVGNEJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDI4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfQkVBQ09OX0lOVEVSVkFMKF9fcGhkciwgX192YWwpIFwKKwlXUklURUVGMkJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDMyLCBfX3ZhbCkKKyNkZWZpbmUgR0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkcikJCVwKKwlSRUFERUYyQllURSgoKHU4ICopKF9fcGhkcikpICsgMzQpCisjZGVmaW5lIFNFVF9CRUFDT05fUFJPQkVfUlNQX0NBUEFCSUxJVFlfSU5GTyhfX3BoZHIsIF9fdmFsKSBcCisJV1JJVEVFRjJCWVRFKCgodTggKikoX19waGRyKSkgKyAzNCwgX192YWwpCisjZGVmaW5lIE1BU0tfQkVBQ09OX1BST0JFX1JTUF9DQVBBQklMSVRZX0lORk8oX19waGRyLCBfX3ZhbCkgXAorCVNFVF9CRUFDT05fUFJPQkVfUlNQX0NBUEFCSUxJVFlfSU5GTyhfX3BoZHIsIFwKKwkoR0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkcikgJiAofihfX3ZhbCkpKSkKKworaW50IHJ0bDkyZV9pbml0X2NvcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVfZGVpbml0X2NvcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVfaW5pdF9yeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVfaW5pdF9yZmtpbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVfZGVpbml0X3Jma2lsbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKK3ZvaWQgcnRsOTJlX3dhdGNoX2RvZ190aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBydGw5MmVfZGVpbml0X2RlZmVycmVkX3dvcmsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCitib29sIHJ0bDkyZV9hY3Rpb25fcHJvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXNfdHgpOworYm9vbCBydGw5MmVfdHhfbWdtdF9wcm9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3U4IHJ0bDkyZV9pc19zcGVjaWFsX2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHU4IGlzX3R4KTsKK3ZvaWQgcnRsOTJlX2JlYWNvbl9zdGF0aXN0aWMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBydGw5MmVfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitpbnQgcnRsOTJlX3R4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbik7CitpbnQgcnRsOTJlX3R4X2FnZ19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7CitpbnQgcnRsOTJlX3R4X2FnZ19vcGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7CitpbnQgcnRsOTJlX3J4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK2ludCBydGw5MmVfcnhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK3ZvaWQgcnRsOTJlX3dhdGNoZG9nX3dxX2NhbGxiYWNrKHZvaWQgKmRhdGEpOwordm9pZCBydGw5MmVfZndldnRfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSk7CisKK3ZvaWQgc3RnX3J0bF9nZXRfdGNiX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpOworCitpbnQgc3RnX3J0bF9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcyk7Cit1OCAqcnRsOTJlX2ZpbmRfaWUodTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIHU4IGllKTsKK3ZvaWQgcnRsOTJlX3JlY29nbml6ZV9wZWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Cit1OCBydGw5MmVfdGlkX3RvX2FjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB0aWQpOwordm9pZCBydGw5MmVfZWFzeV9jb25jdXJyZW50X3JldHJ5dGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKTsKK2V4dGVybiBzdHJ1Y3QgcnRsX2dsb2JhbF92YXIgZ2xvYmFsX3ZhcjsKK2ludCAgcnRsX2NvcmVfbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkICBydGxfY29yZV9tb2R1bGVfZXhpdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidF9wcmVjb21wLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidF9wcmVjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlNmM0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0X3ByZWNvbXAuaApAQCAtMCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDExIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9fSEFMQlRfUFJFQ09NUF9IX18KKyNkZWZpbmUgX19IQUxCVF9QUkVDT01QX0hfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluY2x1ZGUgZmlsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9lZnVzZS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9yZWdkLmgiCisjaW5jbHVkZSAiLi4vY2FtLmgiCisjaW5jbHVkZSAiLi4vcHMuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKworI2luY2x1ZGUgImhhbGJ0Y291dHNyYy5oIgorCisKKyNpbmNsdWRlICJoYWxidGM4MTkyZTJhbnQuaCIKKyNpbmNsdWRlICJoYWxidGM4NzIzYjFhbnQuaCIKKyNpbmNsdWRlICJoYWxidGM4NzIzYjJhbnQuaCIKKyNpbmNsdWRlICJoYWxidGM4ODIxYTJhbnQuaCIKKyNpbmNsdWRlICJoYWxidGM4ODIxYTFhbnQuaCIKKworI2RlZmluZQlNQVNLQllURTAJCQkweGZmCisjZGVmaW5lCU1BU0tCWVRFMQkJCTB4ZmYwMAorI2RlZmluZQlNQVNLQllURTIJCQkweGZmMDAwMAorI2RlZmluZQlNQVNLQllURTMJCQkweGZmMDAwMDAwCisjZGVmaW5lCU1BU0tIV09SRAkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJTUFTS0xXT1JECQkJMHgwMDAwZmZmZgorI2RlZmluZQlNQVNLRFdPUkQJCQkweGZmZmZmZmZmCisjZGVmaW5lCU1BU0sxMkJJVFMJCQkweGZmZgorI2RlZmluZQlNQVNLSDRCSVRTCQkJMHhmMDAwMDAwMAorI2RlZmluZSBNQVNLT0ZETV9ECQkJMHhmZmMwMDAwMAorI2RlZmluZQlNQVNLQ0NLCQkJCTB4M2YzZjNmM2YKKworI2VuZGlmCS8qIF9fSEFMQlRfUFJFQ09NUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODE5MmUyYW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyY2MyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5jCkBAIC0wLDAgKzEsNDExMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBUaGlzIGZpbGUgaXMgZm9yIFJUTDgxOTJFIENvLWV4aXN0IG1lY2hhbmlzbQorICoKKyAqIEhpc3RvcnkKKyAqIDIwMTIvMTEvMTUgQ29zYSBmaXJzdCBjaGVjayBpbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBpbmNsdWRlIGZpbGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaGFsYnRfcHJlY29tcC5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEdsb2JhbCB2YXJpYWJsZXMsIHRoZXNlIGFyZSBzdGF0aWMgdmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGNvZXhfZG1fODE5MmVfMmFudCBnbGNvZXhfZG1fODE5MmVfMmFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9kbV84MTkyZV8yYW50ICpjb2V4X2RtID0gJmdsY29leF9kbV84MTkyZV8yYW50Oworc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84MTkyZV8yYW50IGdsY29leF9zdGFfODE5MmVfMmFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9zdGFfODE5MmVfMmFudCAqY29leF9zdGEgPSAmZ2xjb2V4X3N0YV84MTkyZV8yYW50OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZ2xidF9pbmZvc3JjODE5MmUyYW50W10gPSB7CisJIkJUIEluZm9bd2lmaSBmd10iLAorCSJCVCBJbmZvW2J0IHJzcF0iLAorCSJCVCBJbmZvW2J0IGF1dG8gcmVwb3J0XSIsCit9OworCitzdGF0aWMgdTMyIGdsY29leF92ZXJfZGF0ZV84MTkyZV8yYW50ID0gMjAxMzA5MDI7CitzdGF0aWMgdTMyIGdsY29leF92ZXJfODE5MmVfMmFudCA9IDB4MzQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBsb2NhbCBmdW5jdGlvbiBwcm90byB0eXBlIGlmIG5lZWRlZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIGxvY2FsIGZ1bmN0aW9uIHN0YXJ0IHdpdGggaGFsYnRjODE5MmUyYW50XworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHU4IGhhbGJ0YzgxOTJlMmFudF9idHJzc2lfc3RhdGUodTggbGV2ZWxfbnVtLCB1OCByc3NpX3RocmVzaCwKKwkJCQkgICAgICAgdTggcnNzaV90aHJlc2gxKQoreworCWludCBidHJzc2kgPSAwOworCXU4IGJ0cnNzaV9zdGF0ZSA9IGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZTsKKworCWJ0cnNzaSA9IGNvZXhfc3RhLT5idF9yc3NpOworCisJaWYgKGxldmVsX251bSA9PSAyKSB7CisJCWlmICgoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkgICJCVCBSc3NpIHByZSBzdGF0ZSA9IExPV1xuIik7CisJCQlpZiAoYnRyc3NpID49IChyc3NpX3RocmVzaCArCisJCQkJICAgICAgIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84MTkyRV8yQU5UKSkgeworCQkJCWJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIkJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkgICJCVCBSc3NpIHByZSBzdGF0ZSA9IEhJR0hcbiIpOworCQkJaWYgKGJ0cnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIkJUIFJzc2kgc3RhdGUgc3RheSBhdCBIaWdoXG4iKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobGV2ZWxfbnVtID09IDMpIHsKKwkJaWYgKHJzc2lfdGhyZXNoID4gcnNzaV90aHJlc2gxKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkgICJCVCBSc3NpIHRocmVzaCBlcnJvciEhXG4iKTsKKwkJCXJldHVybiBjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGU7CisJCX0KKworCQlpZiAoKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJCSAgICAoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJICAiQlQgUnNzaSBwcmUgc3RhdGUgPSBMT1dcbiIpOworCQkJaWYgKGJ0cnNzaSA+PSAocnNzaV90aHJlc2ggKworCQkJCSAgICAgIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84MTkyRV8yQU5UKSkgeworCQkJCWJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIkJUIFJzc2kgc3RhdGUgc3RheSBhdCBMb3dcbiIpOworCQkJfQorCQl9IGVsc2UgaWYgKChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0KKwkJCSAgICBCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8CisJCQkgICAoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09CisJCQkgICAgQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBwcmUgc3RhdGUgPSBNRURJVU1cbiIpOworCQkJaWYgKGJ0cnNzaSA+PSAocnNzaV90aHJlc2gxICsKKwkJCQkgICAgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzgxOTJFXzJBTlQpKSB7CisJCQkJYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgaWYgKGJ0cnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IE1lZGl1bVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkgICJCVCBSc3NpIHByZSBzdGF0ZSA9IEhJR0hcbiIpOworCQkJaWYgKGJ0cnNzaSA8IHJzc2lfdGhyZXNoMSkgeworCQkJCWJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJCVCBSc3NpIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9CisKKwljb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPSBidHJzc2lfc3RhdGU7CisKKwlyZXR1cm4gYnRyc3NpX3N0YXRlOworfQorCitzdGF0aWMgdTggaGFsYnRjODE5MmUyYW50X3dpZmlyc3NpX3N0YXRlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgdTggaW5kZXgsIHU4IGxldmVsX251bSwgdTggcnNzaV90aHJlc2gsCisJCQkJCSB1OCByc3NpX3RocmVzaDEpCit7CisJaW50IHdpZmlyc3NpID0gMDsKKwl1OCB3aWZpcnNzaV9zdGF0ZSA9IGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaXJzc2kpOworCisJaWYgKGxldmVsX251bSA9PSAyKSB7CisJCWlmICgoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCSAgICAgQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkgICAgIEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKHdpZmlyc3NpID49IChyc3NpX3RocmVzaCArCisJCQkJCSBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODE5MkVfMkFOVCkpIHsKKwkJCQl3aWZpcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJ3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAid2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aWZpcnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJd2lmaXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJ3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIExvd1xuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAid2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGxldmVsX251bSA9PSAzKSB7CisJCWlmIChyc3NpX3RocmVzaCA+IHJzc2lfdGhyZXNoMSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkgICJ3aWZpIFJTU0kgdGhyZXNoIGVycm9yISFcbiIpOworCQkJcmV0dXJuIGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XTsKKwkJfQorCisJCWlmICgoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCSAgICAgQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkgICAgIEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKHdpZmlyc3NpID49IChyc3NpX3RocmVzaCArCisJCQkJCSBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODE5MkVfMkFOVCkpIHsKKwkJCQl3aWZpcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIndpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIndpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSBpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJICAgIEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJCSAgIChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJCSAgICBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJCWlmICh3aWZpcnNzaSA+PSAocnNzaV90aHJlc2gxICsKKwkJCQkJIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84MTkyRV8yQU5UKSkgeworCQkJCXdpZmlyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIndpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgaWYgKHdpZmlyc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQl3aWZpcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIndpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTG93XG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIndpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IE1lZGl1bVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2lmaXJzc2kgPCByc3NpX3RocmVzaDEpIHsKKwkJCQl3aWZpcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIndpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJ3aWZpIFJTU0kgc3RhdGUgc3RheSBhdCBIaWdoXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCWNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9IHdpZmlyc3NpX3N0YXRlOworCisJcmV0dXJuIHdpZmlyc3NpX3N0YXRlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGNfbW9uaXRvcl9idF9lbmFibGVfZGlzYWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdGF0aWMgYm9vbCBwcmVfYnRfZGlzYWJsZWQ7CisJc3RhdGljIHUzMiBidF9kaXNhYmxlX2NudDsKKwlib29sIGJ0X2FjdGl2ZSA9IHRydWUsIGJ0X2Rpc2FibGVkID0gZmFsc2U7CisKKwkvKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGJ0IGlzIGRpc2FibGVkICovCisKKwlpZiAoY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHggPT0gMCAmJgorCSAgICBjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCA9PSAwICYmCisJICAgIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfdHggPT0gMCAmJgorCSAgICBjb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4ID09IDApCisJCWJ0X2FjdGl2ZSA9IGZhbHNlOworCisJaWYgKGNvZXhfc3RhLT5oaWdoX3ByaW9yaXR5X3R4ID09IDB4ZmZmZiAmJgorCSAgICBjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCA9PSAweGZmZmYgJiYKKwkgICAgY29leF9zdGEtPmxvd19wcmlvcml0eV90eCA9PSAweGZmZmYgJiYKKwkgICAgY29leF9zdGEtPmxvd19wcmlvcml0eV9yeCA9PSAweGZmZmYpCisJCWJ0X2FjdGl2ZSA9IGZhbHNlOworCisJaWYgKGJ0X2FjdGl2ZSkgeworCQlidF9kaXNhYmxlX2NudCA9IDA7CisJCWJ0X2Rpc2FibGVkID0gZmFsc2U7CisJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfQlRfRElTQUJMRSwKKwkJCQkgICAmYnRfZGlzYWJsZWQpOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfTU9OSVRPUiwKKwkJCSAgIltCVENvZXhdLCBCVCBpcyBlbmFibGVkICEhXG4iKTsKKwl9IGVsc2UgeworCQlidF9kaXNhYmxlX2NudCsrOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfTU9OSVRPUiwKKwkJCSAgIltCVENvZXhdLCBidCBhbGwgY291bnRlcnMgPSAwLCAlZCB0aW1lcyEhXG4iLAorCQkJICBidF9kaXNhYmxlX2NudCk7CisJCWlmIChidF9kaXNhYmxlX2NudCA+PSAyKSB7CisJCQlidF9kaXNhYmxlZCA9IHRydWU7CisJCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX0RJU0FCTEUsCisJCQkJCSAgICZidF9kaXNhYmxlZCk7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfTU9OSVRPUiwKKwkJCQkgICJbQlRDb2V4XSwgQlQgaXMgZGlzYWJsZWQgISFcbiIpOworCQl9CisJfQorCWlmIChwcmVfYnRfZGlzYWJsZWQgIT0gYnRfZGlzYWJsZWQpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCQkgICJbQlRDb2V4XSwgQlQgaXMgZnJvbSAlcyB0byAlcyEhXG4iLAorCQkJICAocHJlX2J0X2Rpc2FibGVkID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiksCisJCQkgIChidF9kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpKTsKKwkJcHJlX2J0X2Rpc2FibGVkID0gYnRfZGlzYWJsZWQ7CisJfQorfQorCitzdGF0aWMgdTMyIGhhbGJ0YzgxOTJlMmFudF9kZWNpZGVyYV9tYXNrKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgdTggc3N0eXBlLCB1MzIgcmFfbWFza3R5cGUpCit7CisJdTMyIGRpc3JhX21hc2sgPSAweDA7CisKKwlzd2l0Y2ggKHJhX21hc2t0eXBlKSB7CisJY2FzZSAwOiAvKiBub3JtYWwgbW9kZSAqLworCQlpZiAoc3N0eXBlID09IDIpCisJCQlkaXNyYV9tYXNrID0gMHgwOwkvKiBlbmFibGUgMnNzICovCisJCWVsc2UKKwkJCWRpc3JhX21hc2sgPSAweGZmZjAwMDAwOy8qIGRpc2FibGUgMnNzICovCisJCWJyZWFrOworCWNhc2UgMTogLyogZGlzYWJsZSBjY2sgMS8yICovCisJCWlmIChzc3R5cGUgPT0gMikKKwkJCWRpc3JhX21hc2sgPSAweDAwMDAwMDAzOy8qIGVuYWJsZSAyc3MgKi8KKwkJZWxzZQorCQkJZGlzcmFfbWFzayA9IDB4ZmZmMDAwMDM7LyogZGlzYWJsZSAyc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAyOiAvKiBkaXNhYmxlIGNjayAxLzIvNS41LCBvZmRtIDYvOS8xMi8xOC8yNCwgbWNzIDAvMS8yLzMvNCAqLworCQlpZiAoc3N0eXBlID09IDIpCisJCQlkaXNyYV9tYXNrID0gMHgwMDAxZjFmNzsvKiBlbmFibGUgMnNzICovCisJCWVsc2UKKwkJCWRpc3JhX21hc2sgPSAweGZmZjFmMWY3Oy8qIGRpc2FibGUgMnNzICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBkaXNyYV9tYXNrOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfdXBkYXRlcmFfbWFzayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGZvcmNlX2V4ZWMsIHUzMiBkaXNfcmF0ZW1hc2spCit7CisJY29leF9kbS0+Y3VycmFfbWFzayA9IGRpc19yYXRlbWFzazsKKworCWlmIChmb3JjZV9leGVjIHx8IChjb2V4X2RtLT5wcmVyYV9tYXNrICE9IGNvZXhfZG0tPmN1cnJhX21hc2spKQorCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9VUERBVEVfcmFfbWFzaywKKwkJCQkgICAmY29leF9kbS0+Y3VycmFfbWFzayk7CisJY29leF9kbS0+cHJlcmFfbWFzayA9IGNvZXhfZG0tPmN1cnJhX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGF1dG9yYXRlX2ZhbGxiYWNrX3JldHJ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCit7CisJYm9vbCB3aWZpX3VuZGVyX2Jtb2RlID0gZmFsc2U7CisKKwljb2V4X2RtLT5jdXJfYXJmcnR5cGUgPSB0eXBlOworCisJaWYgKGZvcmNlX2V4ZWMgfHwgKGNvZXhfZG0tPnByZV9hcmZydHlwZSAhPSBjb2V4X2RtLT5jdXJfYXJmcnR5cGUpKSB7CisJCXN3aXRjaCAoY29leF9kbS0+Y3VyX2FyZnJ0eXBlKSB7CisJCWNhc2UgMDoJLyogbm9ybWFsIG1vZGUgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0MzAsCisJCQkJCQkgICBjb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQxKTsKKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0MzQsCisJCQkJCQkgICBjb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQyKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LAorCQkJCQkgICBCVENfR0VUX0JMX1dJRklfVU5ERVJfQl9NT0RFLAorCQkJCQkgICAmd2lmaV91bmRlcl9ibW9kZSk7CisJCQlpZiAod2lmaV91bmRlcl9ibW9kZSkgeworCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0MzAsCisJCQkJCQkJICAgMHgwKTsKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NDM0LAorCQkJCQkJCSAgIDB4MDEwMTAxMDEpOworCQkJfSBlbHNlIHsKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NDMwLAorCQkJCQkJCSAgIDB4MCk7CisJCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDQzNCwKKwkJCQkJCQkgICAweDA0MDMwMjAxKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwljb2V4X2RtLT5wcmVfYXJmcnR5cGUgPSBjb2V4X2RtLT5jdXJfYXJmcnR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9yZXRyeWxpbWl0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCit7CisJY29leF9kbS0+Y3VyX3JldHJ5bGltaXRfdHlwZSA9IHR5cGU7CisKKwlpZiAoZm9yY2VfZXhlYyB8fCAoY29leF9kbS0+cHJlX3JldHJ5bGltaXRfdHlwZSAhPQorCQkJICAgY29leF9kbS0+Y3VyX3JldHJ5bGltaXRfdHlwZSkpIHsKKwkJc3dpdGNoIChjb2V4X2RtLT5jdXJfcmV0cnlsaW1pdF90eXBlKSB7CisJCWNhc2UgMDoJLyogbm9ybWFsIG1vZGUgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEsCisJCQkJCSAgICBjb2V4X2RtLT5iYWNrdXBfcmV0cnlsaW1pdCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgkvKiByZXRyeSBsaW1pdCA9IDggKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEsCisJCQkJCQkgICAweDA4MDgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWNvZXhfZG0tPnByZV9yZXRyeWxpbWl0X3R5cGUgPSBjb2V4X2RtLT5jdXJfcmV0cnlsaW1pdF90eXBlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYW1wZHVfbWF4dGltZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCit7CisJY29leF9kbS0+Y3VyX2FtcGR1dGltZV90eXBlID0gdHlwZTsKKworCWlmIChmb3JjZV9leGVjIHx8IChjb2V4X2RtLT5wcmVfYW1wZHV0aW1lX3R5cGUgIT0KKwkJCSAgIGNvZXhfZG0tPmN1cl9hbXBkdXRpbWVfdHlwZSkpIHsKKwkJc3dpdGNoIChjb2V4X2RtLT5jdXJfYW1wZHV0aW1lX3R5cGUpIHsKKwkJY2FzZSAwOgkvKiBub3JtYWwgbW9kZSAqLworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDQ1NiwKKwkJCQkJCWNvZXhfZG0tPmJhY2t1cF9hbXBkdV9tYXh0aW1lKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CS8qIEFNUERVIHRpbXcgPSAweDM4ICogMzJ1cyAqLworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDQ1NiwgMHgzOCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJY29leF9kbS0+cHJlX2FtcGR1dGltZV90eXBlID0gY29leF9kbS0+Y3VyX2FtcGR1dGltZV90eXBlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfbGltaXRlZF90eChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCB1OCByYV9tYXNrdHlwZSwKKwkJCQkgICAgICAgdTggYXJmcl90eXBlLCB1OCByZXRyeWxpbWl0X3R5cGUsCisJCQkJICAgICAgIHU4IGFtcGR1dGltZV90eXBlKQoreworCXUzMiBkaXNyYV9tYXNrID0gMHgwOworCisJY29leF9kbS0+Y3VycmFfbWFza3R5cGUgPSByYV9tYXNrdHlwZTsKKwlkaXNyYV9tYXNrID0gaGFsYnRjODE5MmUyYW50X2RlY2lkZXJhX21hc2soYnRjb2V4aXN0LAorCQkJCQkJICAgY29leF9kbS0+Y3VyX3NzdHlwZSwKKwkJCQkJCSAgIHJhX21hc2t0eXBlKTsKKwloYWxidGM4MTkyZTJhbnRfdXBkYXRlcmFfbWFzayhidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIGRpc3JhX21hc2spOworCisJYXV0b3JhdGVfZmFsbGJhY2tfcmV0cnkoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCBhcmZyX3R5cGUpOworCWhhbGJ0YzgxOTJlMmFudF9yZXRyeWxpbWl0KGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgcmV0cnlsaW1pdF90eXBlKTsKKwloYWxidGM4MTkyZTJhbnRfYW1wZHVfbWF4dGltZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIGFtcGR1dGltZV90eXBlKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2xpbWl0ZWRfcngoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCByZWpfYXBfYWdnX3BrdCwKKwkJCQkgICAgICAgYm9vbCBiX2J0X2N0cmxfYWdnX2J1Zl9zaXplLAorCQkJCSAgICAgICB1OCBhZ2dfYnVmX3NpemUpCit7CisJYm9vbCByZWplY3RfcnhfYWdnID0gcmVqX2FwX2FnZ19wa3Q7CisJYm9vbCBidF9jdHJsX3J4X2FnZ19zaXplID0gYl9idF9jdHJsX2FnZ19idWZfc2l6ZTsKKwl1OCByeF9hZ2dfc2l6ZSA9IGFnZ19idWZfc2l6ZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKglSeCBBZ2dyZWdhdGlvbiByZWxhdGVkIHNldHRpbmcKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfVE9fUkVKX0FQX0FHR19QS1QsCisJCQkgICAmcmVqZWN0X3J4X2FnZyk7CisJLyogZGVjaWRlIEJUIGNvbnRyb2wgYWdncmVnYXRpb24gYnVmIHNpemUgb3Igbm90ICovCisJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9CTF9CVF9DVFJMX0FHR19TSVpFLAorCQkJICAgJmJ0X2N0cmxfcnhfYWdnX3NpemUpOworCS8qIGFnZ3JlZ2F0aW9uIGJ1ZiBzaXplLCBvbmx5IHdvcmsKKwkgKiB3aGVuIEJUIGNvbnRyb2wgUnggYWdncmVnYXRpb24gc2l6ZS4gKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX1UxX0FHR19CVUZfU0laRSwgJnJ4X2FnZ19zaXplKTsKKwkvKiByZWFsIHVwZGF0ZSBhZ2dyZWdhdGlvbiBzZXR0aW5nICovCisJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfQUdHUkVHQVRFX0NUUkwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfbW9uaXRvcl9idF9jdHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTMyIHJlZ19ocF90eHJ4LCByZWdfbHBfdHhyeCwgdTMydG1wOworCXUzMiByZWdfaHBfdHggPSAwLCByZWdfaHBfcnggPSAwLCByZWdfbHBfdHggPSAwLCByZWdfbHBfcnggPSAwOworCisJcmVnX2hwX3R4cnggPSAweDc3MDsKKwlyZWdfbHBfdHhyeCA9IDB4Nzc0OworCisJdTMydG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIHJlZ19ocF90eHJ4KTsKKwlyZWdfaHBfdHggPSB1MzJ0bXAgJiBNQVNLTFdPUkQ7CisJcmVnX2hwX3J4ID0gKHUzMnRtcCAmIE1BU0tIV09SRCk+PjE2OworCisJdTMydG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIHJlZ19scF90eHJ4KTsKKwlyZWdfbHBfdHggPSB1MzJ0bXAgJiBNQVNLTFdPUkQ7CisJcmVnX2xwX3J4ID0gKHUzMnRtcCAmIE1BU0tIV09SRCk+PjE2OworCisJY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHggPSByZWdfaHBfdHg7CisJY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfcnggPSByZWdfaHBfcng7CisJY29leF9zdGEtPmxvd19wcmlvcml0eV90eCA9IHJlZ19scF90eDsKKwljb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4ID0gcmVnX2xwX3J4OworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCSAgIltCVENvZXhdIEhpZ2ggUHJpb3JpdHkgVHgvUnggKHJlZyAweCV4KSA9IDB4JXgoJWQpLzB4JXgoJWQpXG4iLAorCQkgIHJlZ19ocF90eHJ4LCByZWdfaHBfdHgsIHJlZ19ocF90eCwgcmVnX2hwX3J4LCByZWdfaHBfcngpOworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9NT05JVE9SLAorCQkgICJbQlRDb2V4XSBMb3cgUHJpb3JpdHkgVHgvUnggKHJlZyAweCV4KSA9IDB4JXgoJWQpLzB4JXgoJWQpXG4iLAorCQkgIHJlZ19scF90eHJ4LCByZWdfbHBfdHgsIHJlZ19scF90eCwgcmVnX2xwX3J4LCByZWdfbHBfcngpOworCisJLyogcmVzZXQgY291bnRlciAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9xdWVyeWJ0X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKKworCWNvZXhfc3RhLT5jMmhfYnRfaW5mb19yZXFfc2VudCA9IHRydWU7CisKKwloMmNfcGFyYW1ldGVyWzBdIHw9IEJJVCgwKTsJLyogdHJpZ2dlciAqLworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBRdWVyeSBCdCBJbmZvLCBGVyB3cml0ZSAweDYxID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MSwgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF91cGRhdGVfYnRsaW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKwlib29sIGJ0X2hzb24gPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNvbik7CisKKwlidF9saW5rX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSBjb2V4X3N0YS0+YnRfbGlua19leGlzdDsKKwlidF9saW5rX2luZm8tPnNjb19leGlzdCA9IGNvZXhfc3RhLT5zY29fZXhpc3Q7CisJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ID0gY29leF9zdGEtPmEyZHBfZXhpc3Q7CisJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgPSBjb2V4X3N0YS0+cGFuX2V4aXN0OworCWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ID0gY29leF9zdGEtPmhpZF9leGlzdDsKKworCS8qIHdvcmsgYXJvdW5kIGZvciBIUyBtb2RlLiAqLworCWlmIChidF9oc29uKSB7CisJCWJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ID0gdHJ1ZTsKKwkJYnRfbGlua19pbmZvLT5idF9saW5rX2V4aXN0ID0gdHJ1ZTsKKwl9CisKKwkvKiBjaGVjayBpZiBTY28gb25seSAqLworCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCAmJgorCSAgICAhYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmCisJICAgICFidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCSAgICAhYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+c2NvX29ubHkgPSB0cnVlOworCWVsc2UKKwkJYnRfbGlua19pbmZvLT5zY29fb25seSA9IGZhbHNlOworCisJLyogY2hlY2sgaWYgQTJkcCBvbmx5ICovCisJaWYgKCFidF9saW5rX2luZm8tPnNjb19leGlzdCAmJgorCSAgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QgJiYKKwkgICAgIWJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJICAgICFidF9saW5rX2luZm8tPmhpZF9leGlzdCkKKwkJYnRfbGlua19pbmZvLT5hMmRwX29ubHkgPSB0cnVlOworCWVsc2UKKwkJYnRfbGlua19pbmZvLT5hMmRwX29ubHkgPSBmYWxzZTsKKworCS8qIGNoZWNrIGlmIFBhbiBvbmx5ICovCisJaWYgKCFidF9saW5rX2luZm8tPnNjb19leGlzdCAmJgorCSAgICAhYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmCisJICAgIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJICAgICFidF9saW5rX2luZm8tPmhpZF9leGlzdCkKKwkJYnRfbGlua19pbmZvLT5wYW5fb25seSA9IHRydWU7CisJZWxzZQorCQlidF9saW5rX2luZm8tPnBhbl9vbmx5ID0gZmFsc2U7CisKKwkvKiBjaGVjayBpZiBIaWQgb25seSAqLworCWlmICghYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYKKwkgICAgIWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCSAgICAhYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkgICAgYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+aGlkX29ubHkgPSB0cnVlOworCWVsc2UKKwkJYnRfbGlua19pbmZvLT5oaWRfb25seSA9IGZhbHNlOworfQorCitzdGF0aWMgdTggaGFsYnRjODE5MmUyYW50X2FjdGlvbl9hbGdvcml0aG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOworCWJvb2wgYnRfaHNvbiA9IGZhbHNlOworCXU4IGFsZ29yaXRobSA9IEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1VOREVGSU5FRDsKKwl1OCBudW1fZGlmZnByb2ZpbGUgPSAwOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc29uKTsKKworCWlmICghYnRfbGlua19pbmZvLT5idF9saW5rX2V4aXN0KSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIk5vIEJUIGxpbmsgZXhpc3RzISEhXG4iKTsKKwkJcmV0dXJuIGFsZ29yaXRobTsKKwl9CisKKwlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpCisJCW51bV9kaWZmcHJvZmlsZSsrOworCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCkKKwkJbnVtX2RpZmZwcm9maWxlKys7CisJaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KQorCQludW1fZGlmZnByb2ZpbGUrKzsKKwlpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KQorCQludW1fZGlmZnByb2ZpbGUrKzsKKworCWlmIChudW1fZGlmZnByb2ZpbGUgPT0gMSkgeworCQlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJTQ08gb25seVxuIik7CisJCQlhbGdvcml0aG0gPSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19TQ087CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIkhJRCBvbmx5XG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19ISUQ7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiQTJEUCBvbmx5XG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19BMkRQOworCQkJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIlBBTihIUykgb25seVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCQlCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5IUzsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJQQU4oRURSKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkVEUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG51bV9kaWZmcHJvZmlsZSA9PSAyKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJTQ08gKyBISURcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1NDTzsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJTQ08gKyBBMkRQID09PiBTQ09cbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiU0NPICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1NDTzsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJTQ08gKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCQlCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19TQ09fUEFOOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCAmJgorCQkJICAgIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCWlmIChzdGFja19pbmZvLT5udW1fb2ZfaGlkID49IDIpIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiSElEKjIgKyBBMkRQXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIkhJRCArIEEyRFBcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQkJfQorCQkJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCAmJgorCQkJCSAgIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiSElEICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJISUQgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJCQkgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNvbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19BMkRQX1BBTkhTOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIkEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfQTJEUDsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG51bV9kaWZmcHJvZmlsZSA9PSAzKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkgICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJTQ08gKyBISUQgKyBBMkRQID09PiBISURcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNvbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJTQ08gKyBISUQgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fU0NPOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIlNDTyArIEhJRCArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1NDT19QQU47CisJCQkJfQorCQkJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCQkJCSAgIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCWlmIChidF9oc29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIlNDTyArIEEyRFAgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fU0NPOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIlNDTyArIEEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCAmJgorCQkJICAgIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJCQkgICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiSElEICsgQTJEUCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiSElEICsgQTJEUCArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX2RpZmZwcm9maWxlID49IDMpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCQkJICAgIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCWlmIChidF9oc29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIkVycm9yU0NPK0hJRCtBMkRQK1BBTihIUylcbiIpOworCisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiU0NPK0hJRCtBMkRQK1BBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJICAgIEJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGFsZ29yaXRobTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldGZ3X2RhY19zd2luZ2xldmVsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJIHU4IGRhY19zd2luZ2x2bCkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OworCisJLyogVGhlcmUgYXJlIHNldmVyYWwgdHlwZSBvZiBkYWNzd2luZworCSAqIDB4MTgvIDB4MTAvIDB4Yy8gMHg4LyAweDQvIDB4NiAqLworCWgyY19wYXJhbWV0ZXJbMF0gPSBkYWNfc3dpbmdsdmw7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIFNldCBEYWMgU3dpbmcgTGV2ZWwgPSAweCV4XG4iLCBkYWNfc3dpbmdsdmwpOworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19FWEVDLAorCQkgICJbQlRDb2V4XSwgRlcgd3JpdGUgMHg2NCA9IDB4JXhcbiIsIGgyY19wYXJhbWV0ZXJbMF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY0LCAxLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9md2RlY19idHB3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgIHU4IGRlY19idHB3cl9sdmwpCit7CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKKworCWgyY19wYXJhbWV0ZXJbMF0gPSBkZWNfYnRwd3JfbHZsOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdIGRlY3JlYXNlIEJ0IFBvd2VyIGxldmVsID0gJWQsIEZXIHdyaXRlIDB4NjIgPSAweCV4XG4iLAorCQkgIGRlY19idHB3cl9sdmwsIGgyY19wYXJhbWV0ZXJbMF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYyLCAxLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IGRlY19idHB3cl9sdmwpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkgICJbQlRDb2V4XSwgJXMgRGVjIEJUIHBvd2VyIGxldmVsID0gJWRcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCBkZWNfYnRwd3JfbHZsKTsKKwljb2V4X2RtLT5jdXJfZGVjX2J0X3B3ciA9IGRlY19idHB3cl9sdmw7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVCdERlY1B3ckx2bCA9JWQsIGN1ckJ0RGVjUHdyTHZsID0lZFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2RlY19idF9wd3IsIGNvZXhfZG0tPmN1cl9kZWNfYnRfcHdyKTsKKwl9CisJaGFsYnRjODE5MmUyYW50X3NldF9md2RlY19idHB3cihidGNvZXhpc3QsIGNvZXhfZG0tPmN1cl9kZWNfYnRfcHdyKTsKKworCWNvZXhfZG0tPnByZV9kZWNfYnRfcHdyID0gY29leF9kbS0+Y3VyX2RlY19idF9wd3I7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfYnRfYXV0b3JlcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgYm9vbCBlbmFibGVfYXV0b3JlcG9ydCkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OworCisJaDJjX3BhcmFtZXRlclswXSA9IDA7CisKKwlpZiAoZW5hYmxlX2F1dG9yZXBvcnQpCisJCWgyY19wYXJhbWV0ZXJbMF0gfD0gQklUKDApOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBCVCBGVyBhdXRvIHJlcG9ydCA6ICVzLCBGVyB3cml0ZSAweDY4ID0gMHgleFxuIiwKKwkJICAoZW5hYmxlX2F1dG9yZXBvcnQgPyAiRW5hYmxlZCEhIiA6ICJEaXNhYmxlZCEhIiksCisJCSAgaDJjX3BhcmFtZXRlclswXSk7CisKKwlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjgsIDEsIGgyY19wYXJhbWV0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYnRfYXV0b3JlcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGZvcmNlX2V4ZWMsCisJCQkJCSAgYm9vbCBlbmFibGVfYXV0b3JlcG9ydCkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCisJCSAgIltCVENvZXhdLCAlcyBCVCBBdXRvIHJlcG9ydCA9ICVzXG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKKwkJICAoKGVuYWJsZV9hdXRvcmVwb3J0KSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpKTsKKwljb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQgPSBlbmFibGVfYXV0b3JlcG9ydDsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0gYlByZUJ0QXV0b1JlcG9ydCA9JWQsIGJDdXJCdEF1dG9SZXBvcnQgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfYnRfYXV0b19yZXBvcnQsCisJCQkgIGNvZXhfZG0tPmN1cl9idF9hdXRvX3JlcG9ydCk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9idF9hdXRvX3JlcG9ydCA9PSBjb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQpCisJCQlyZXR1cm47CisJfQorCWhhbGJ0YzgxOTJlMmFudF9zZXRfYnRfYXV0b3JlcG9ydChidGNvZXhpc3QsCisJCQkJCSAgY29leF9kbS0+Y3VyX2J0X2F1dG9fcmVwb3J0KTsKKworCWNvZXhfZG0tPnByZV9idF9hdXRvX3JlcG9ydCA9IGNvZXhfZG0tPmN1cl9idF9hdXRvX3JlcG9ydDsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2Z3X2RhY19zd2luZ2x2bChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgdTggZndfZGFjX3N3aW5nbHZsKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHNldCBGVyBEYWMgU3dpbmcgbGV2ZWwgPSAlZFxuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksIGZ3X2RhY19zd2luZ2x2bCk7CisJY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmwgPSBmd19kYWNfc3dpbmdsdmw7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdIHByZUZ3RGFjU3dpbmdMdmwgPSVkLCBjdXJGd0RhY1N3aW5nTHZsID0lZFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2Z3X2RhY19zd2luZ19sdmwsCisJCQkgIGNvZXhfZG0tPmN1cl9md19kYWNfc3dpbmdfbHZsKTsKKworCQlpZiAoY29leF9kbS0+cHJlX2Z3X2RhY19zd2luZ19sdmwgPT0KKwkJICAgIGNvZXhfZG0tPmN1cl9md19kYWNfc3dpbmdfbHZsKQorCQkJcmV0dXJuOworCX0KKworCWhhbGJ0YzgxOTJlMmFudF9zZXRmd19kYWNfc3dpbmdsZXZlbChidGNvZXhpc3QsCisJCQkJCSAgICAgY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmwpOworCisJY29leF9kbS0+cHJlX2Z3X2RhY19zd2luZ19sdmwgPSBjb2V4X2RtLT5jdXJfZndfZGFjX3N3aW5nX2x2bDsKK30KKworc3RhdGljIHZvaWQgc2V0X3N3X3JmX3J4X2xwZl9jb3JuZXIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgIGJvb2wgcnhfcmZfc2hyaW5rX29uKQoreworCWlmIChyeF9yZl9zaHJpbmtfb24pIHsKKwkJLyogU2hyaW5rIFJGIFJ4IExQRiBjb3JuZXIgKi8KKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCQkgICJbQlRDb2V4XSwgU2hyaW5rIFJGIFJ4IExQRiBjb3JuZXIhIVxuIik7CisJCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxZSwKKwkJCQkJICAweGZmZmZmLCAweGZmZmZjKTsKKwl9IGVsc2UgeworCQkvKiBSZXN1bWUgUkYgUnggTFBGIGNvcm5lcgorCQkgKiBBZnRlciBpbml0aWFsaXplZCwgd2UgY2FuIHVzZSBjb2V4X2RtLT5idFJmMHgxZUJhY2t1cCAqLworCQlpZiAoYnRjb2V4aXN0LT5pbml0aWxpemVkKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJCQkgICJbQlRDb2V4XSwgUmVzdW1lIFJGIFJ4IExQRiBjb3JuZXIhIVxuIik7CisJCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MWUsCisJCQkJCQkgIDB4ZmZmZmYsCisJCQkJCQkgIGNvZXhfZG0tPmJ0X3JmMHgxZV9iYWNrdXApOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfcmZfc2hyaW5rKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCByeF9yZl9zaHJpbmtfb24pCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAorCQkgICJbQlRDb2V4XSwgJXMgdHVybiBSeCBSRiBTaHJpbmsgPSAlc1xuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksCisJCSAgKChyeF9yZl9zaHJpbmtfb24pID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmsgPSByeF9yZl9zaHJpbmtfb247CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdYlByZVJmUnhMcGZTaHJpbmsgPSVkLCBiQ3VyUmZSeExwZlNocmluayA9JWRcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9yZl9yeF9scGZfc2hyaW5rLAorCQkJICBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3Nocmluayk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9yZl9yeF9scGZfc2hyaW5rID09CisJCSAgICBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3NocmluaykKKwkJCXJldHVybjsKKwl9CisJc2V0X3N3X3JmX3J4X2xwZl9jb3JuZXIoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3Nocmluayk7CisKKwljb2V4X2RtLT5wcmVfcmZfcnhfbHBmX3NocmluayA9IGNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X2RhY19zd2luZ3JlZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICB1MzIgbGV2ZWwpCit7CisJdTggdmFsID0gKHU4KWxldmVsOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBXcml0ZSBTd0RhY1N3aW5nID0gMHgleFxuIiwgbGV2ZWwpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDg4MywgMHgzZSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc2V0c3dfZnVsbHRpbWVfZGFjc3dpbmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgIGJvb2wgc3dfZGFjX3N3aW5nb24sCisJCQkJICAgIHUzMiBzd19kYWNfc3dpbmdsdmwpCit7CisJaWYgKHN3X2RhY19zd2luZ29uKQorCQloYWxidGM4MTkyZTJhbnRfc2V0X2RhY19zd2luZ3JlZyhidGNvZXhpc3QsIHN3X2RhY19zd2luZ2x2bCk7CisJZWxzZQorCQloYWxidGM4MTkyZTJhbnRfc2V0X2RhY19zd2luZ3JlZyhidGNvZXhpc3QsIDB4MTgpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfZGFjc3dpbmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZGFjX3N3aW5nb24sCisJCQkJICAgICB1MzIgZGFjX3N3aW5nbHZsKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gRGFjU3dpbmcgPSVzLCBkYWNfc3dpbmdsdmwgPSAweCV4XG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKKwkJICAoKGRhY19zd2luZ29uKSA/ICJPTiIgOiAiT0ZGIiksIGRhY19zd2luZ2x2bCk7CisJY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbiA9IGRhY19zd2luZ29uOworCWNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsID0gZGFjX3N3aW5nbHZsOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgYlByZURhY1N3aW5nT24gPSVkLCBwcmVEYWNTd2luZ0x2bCA9IDB4JXgsICIsCisJCQkgIGNvZXhfZG0tPnByZV9kYWNfc3dpbmdfb24sCisJCQkgIGNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKKwkJCSAgImJDdXJEYWNTd2luZ09uID0lZCwgY3VyRGFjU3dpbmdMdmwgPSAweCV4XG4iLAorCQkJICBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX29uLAorCQkJICBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX2x2bCk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfZGFjX3N3aW5nX29uID09IGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24pICYmCisJCSAgICAoY29leF9kbS0+cHJlX2RhY19zd2luZ19sdmwgPT0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmwpKQorCQkJcmV0dXJuOworCX0KKwltZGVsYXkoMzApOworCXNldHN3X2Z1bGx0aW1lX2RhY3N3aW5nKGJ0Y29leGlzdCwgZGFjX3N3aW5nb24sIGRhY19zd2luZ2x2bCk7CisKKwljb2V4X2RtLT5wcmVfZGFjX3N3aW5nX29uID0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbjsKKwljb2V4X2RtLT5wcmVfZGFjX3N3aW5nX2x2bCA9IGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X2FnY190YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGFnY190YWJsZV9lbikKK3sKKwkvKiBCQiBBR0MgR2FpbiBUYWJsZSAqLworCWlmIChhZ2NfdGFibGVfZW4pIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCQkgICJbQlRDb2V4XSwgQkIgQWdjIFRhYmxlIE9uIVxuIik7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4MGExQTAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweDA5MUIwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHgwODFDMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4MDcxRDAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweDA2MUUwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHgwNTFGMDAwMSk7CisJfSBlbHNlIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCQkgICJbQlRDb2V4XSwgQkIgQWdjIFRhYmxlIE9mZiFcbiIpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweGFhMUEwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHhhOTFCMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4YTgxQzAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweGE3MUQwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHhhNjFFMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4YTUxRjAwMDEpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FnY3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGFnY190YWJsZV9lbikKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCisJCSAgIltCVENvZXhdLCAlcyAlcyBBZ2MgVGFibGVcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgICgoYWdjX3RhYmxlX2VuKSA/ICJFbmFibGUiIDogIkRpc2FibGUiKSk7CisJY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbiA9IGFnY190YWJsZV9lbjsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVBZ2NUYWJsZUVuID0lZCwgYkN1ckFnY1RhYmxlRW4gPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuLCBjb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuKTsKKworCQlpZiAoY29leF9kbS0+cHJlX2FnY190YWJsZV9lbiA9PSBjb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuKQorCQkJcmV0dXJuOworCX0KKwloYWxidGM4MTkyZTJhbnRfc2V0X2FnY190YWJsZShidGNvZXhpc3QsIGFnY190YWJsZV9lbik7CisKKwljb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuID0gY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbjsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICB1MzIgdmFsMHg2YzAsIHUzMiB2YWwweDZjNCwKKwkJCQkJICAgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzAgPSAweCV4XG4iLCB2YWwweDZjMCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDZjMCwgdmFsMHg2YzApOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgY29leCB0YWJsZSwgc2V0IDB4NmM0ID0gMHgleFxuIiwgdmFsMHg2YzQpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg2YzQsIHZhbDB4NmM0KTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IGNvZXggdGFibGUsIHNldCAweDZjOCA9IDB4JXhcbiIsIHZhbDB4NmM4KTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NmM4LCB2YWwweDZjOCk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2Y2MgPSAweCV4XG4iLCB2YWwweDZjYyk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDZjYywgdmFsMHg2Y2MpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGNfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgYm9vbCBmb3JjZV9leGVjLAorCQkJICAgICAgdTMyIHZhbDB4NmMwLCB1MzIgdmFsMHg2YzQsCisJCQkgICAgICB1MzIgdmFsMHg2YzgsIHU4IHZhbDB4NmNjKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzIHdyaXRlIENvZXggVGFibGUgMHg2YzAgPSAweCV4LCAiLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwgdmFsMHg2YzApOworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiMHg2YzQgPSAweCV4LCAweDZjOCA9IDB4JXgsIDB4NmNjID0gMHgleFxuIiwKKwkJICB2YWwweDZjNCwgdmFsMHg2YzgsIHZhbDB4NmNjKTsKKwljb2V4X2RtLT5jdXJfdmFsMHg2YzAgPSB2YWwweDZjMDsKKwljb2V4X2RtLT5jdXJfdmFsMHg2YzQgPSB2YWwweDZjNDsKKwljb2V4X2RtLT5jdXJfdmFsMHg2YzggPSB2YWwweDZjODsKKwljb2V4X2RtLT5jdXJfdmFsMHg2Y2MgPSB2YWwweDZjYzsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHByZVZhbDB4NmMwID0gMHgleCwgcHJlVmFsMHg2YzQgPSAweCV4LCAiLAorCQkJICBjb2V4X2RtLT5wcmVfdmFsMHg2YzAsIGNvZXhfZG0tPnByZV92YWwweDZjNCk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJwcmVWYWwweDZjOCA9IDB4JXgsIHByZVZhbDB4NmNjID0gMHgleCEhXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfdmFsMHg2YzgsIGNvZXhfZG0tPnByZV92YWwweDZjYyk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgY3VyVmFsMHg2YzAgPSAweCV4LCBjdXJWYWwweDZjNCA9IDB4JXhcbiIsCisJCQkgIGNvZXhfZG0tPmN1cl92YWwweDZjMCwgY29leF9kbS0+Y3VyX3ZhbDB4NmM0KTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKKwkJCSAgImN1clZhbDB4NmM4ID0gMHgleCwgY3VyVmFsMHg2Y2MgPSAweCV4ICEhXG4iLAorCQkJICBjb2V4X2RtLT5jdXJfdmFsMHg2YzgsIGNvZXhfZG0tPmN1cl92YWwweDZjYyk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfdmFsMHg2YzAgPT0gY29leF9kbS0+Y3VyX3ZhbDB4NmMwKSAmJgorCQkgICAgKGNvZXhfZG0tPnByZV92YWwweDZjNCA9PSBjb2V4X2RtLT5jdXJfdmFsMHg2YzQpICYmCisJCSAgICAoY29leF9kbS0+cHJlX3ZhbDB4NmM4ID09IGNvZXhfZG0tPmN1cl92YWwweDZjOCkgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfdmFsMHg2Y2MgPT0gY29leF9kbS0+Y3VyX3ZhbDB4NmNjKSkKKwkJCXJldHVybjsKKwl9CisJaGFsYnRjODE5MmUyYW50X3NldF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgdmFsMHg2YzAsIHZhbDB4NmM0LAorCQkJCSAgICAgICB2YWwweDZjOCwgdmFsMHg2Y2MpOworCisJY29leF9kbS0+cHJlX3ZhbDB4NmMwID0gY29leF9kbS0+Y3VyX3ZhbDB4NmMwOworCWNvZXhfZG0tPnByZV92YWwweDZjNCA9IGNvZXhfZG0tPmN1cl92YWwweDZjNDsKKwljb2V4X2RtLT5wcmVfdmFsMHg2YzggPSBjb2V4X2RtLT5jdXJfdmFsMHg2Yzg7CisJY29leF9kbS0+cHJlX3ZhbDB4NmNjID0gY29leF9kbS0+Y3VyX3ZhbDB4NmNjOworfQorCitzdGF0aWMgdm9pZCBoYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDA6CisJCWhhbGJ0Y19jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkgIDB4NWE1YTVhNWEsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDE6CisJCWhhbGJ0Y19jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1YTVhNWE1YSwKKwkJCQkgIDB4NWE1YTVhNWEsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDI6CisJCWhhbGJ0Y19jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkgIDB4NWZmYjVmZmIsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDM6CisJCWhhbGJ0Y19jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHhkZmZmZGZmZiwKKwkJCQkgIDB4NWZkYjVmZGIsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWhhbGJ0Y19jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHhkZmZmZGZmZiwKKwkJCQkgIDB4NWZmYjVmZmIsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfZndfaWdub3JlX3dsYW5hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQkgIGJvb2wgZW5hYmxlKQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwlpZiAoZW5hYmxlKQorCQloMmNfcGFyYW1ldGVyWzBdIHw9IEJJVCgwKTsgLyogZnVuY3Rpb24gZW5hYmxlICovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF1zZXQgRlcgZm9yIEJUIElnbm9yZSBXbGFuX0FjdCwgRlcgd3JpdGUgMHg2MyA9IDB4JXhcbiIsCisJCSAgaDJjX3BhcmFtZXRlclswXSk7CisKKwlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjMsIDEsIGgyY19wYXJhbWV0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfaWdub3Jld2xhbmFjdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gSWdub3JlIFdsYW5BY3QgJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoZW5hYmxlID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCA9IGVuYWJsZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVJZ25vcmVXbGFuQWN0ID0gJWQgIiwKKwkJCSAgY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJiQ3VySWdub3JlV2xhbkFjdCA9ICVkISFcbiIsCisJCQkgIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpOworCisJCWlmIChjb2V4X2RtLT5wcmVfaWdub3JlX3dsYW5fYWN0ID09CisJCSAgICBjb2V4X2RtLT5jdXJfaWdub3JlX3dsYW5fYWN0KQorCQkJcmV0dXJuOworCX0KKwloYWxidGM4MTkyZTJhbnRfc2V0X2Z3X2lnbm9yZV93bGFuYWN0KGJ0Y29leGlzdCwgZW5hYmxlKTsKKworCWNvZXhfZG0tPnByZV9pZ25vcmVfd2xhbl9hY3QgPSBjb2V4X2RtLT5jdXJfaWdub3JlX3dsYW5fYWN0OworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IGJ5dGUxLAorCQkJCQl1OCBieXRlMiwgdTggYnl0ZTMsIHU4IGJ5dGU0LCB1OCBieXRlNSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzVdOworCisJaDJjX3BhcmFtZXRlclswXSA9IGJ5dGUxOworCWgyY19wYXJhbWV0ZXJbMV0gPSBieXRlMjsKKwloMmNfcGFyYW1ldGVyWzJdID0gYnl0ZTM7CisJaDJjX3BhcmFtZXRlclszXSA9IGJ5dGU0OworCWgyY19wYXJhbWV0ZXJbNF0gPSBieXRlNTsKKworCWNvZXhfZG0tPnBzX3RkbWFfcGFyYVswXSA9IGJ5dGUxOworCWNvZXhfZG0tPnBzX3RkbWFfcGFyYVsxXSA9IGJ5dGUyOworCWNvZXhfZG0tPnBzX3RkbWFfcGFyYVsyXSA9IGJ5dGUzOworCWNvZXhfZG0tPnBzX3RkbWFfcGFyYVszXSA9IGJ5dGU0OworCWNvZXhfZG0tPnBzX3RkbWFfcGFyYVs0XSA9IGJ5dGU1OworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBGVyB3cml0ZSAweDYwKDVieXRlcykgPSAweCV4JTA4eFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdLAorCQkgIGgyY19wYXJhbWV0ZXJbMV0gPDwgMjQgfCBoMmNfcGFyYW1ldGVyWzJdIDw8IDE2IHwKKwkJICBoMmNfcGFyYW1ldGVyWzNdIDw8IDggfCBoMmNfcGFyYW1ldGVyWzRdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MCwgNSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19zd19tZWNoYW5pc20xKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSBib29sIHNocmlua19yeF9scGYsIGJvb2wgbG93X3BlbmFsdHlfcmEsCisJCQkJIGJvb2wgbGltaXRlZF9kaWcsIGJvb2wgYnRsYW5fY29uc3RyYWluKQoreworCWhhbGJ0YzgxOTJlMmFudF9yZl9zaHJpbmsoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgc2hyaW5rX3J4X2xwZik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19zd19tZWNoYW5pc20yKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSBib29sIGFnY190YWJsZV9zaGlmdCwgYm9vbCBhZGNfYmFja29mZiwKKwkJCQkgYm9vbCBzd19kYWNfc3dpbmcsIHUzMiBkYWNfc3dpbmdsdmwpCit7CisJaGFsYnRjODE5MmUyYW50X2FnY3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGFnY190YWJsZV9zaGlmdCk7CisJaGFsYnRjODE5MmUyYW50X2RhY3N3aW5nKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHN3X2RhY19zd2luZywKKwkJCQkgZGFjX3N3aW5nbHZsKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCB0dXJuX29uLCB1OCB0eXBlKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gJXMgUFMgVERNQSwgdHlwZSA9JWRcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgICh0dXJuX29uID8gIk9OIiA6ICJPRkYiKSwgdHlwZSk7CisJY29leF9kbS0+Y3VyX3BzX3RkbWFfb24gPSB0dXJuX29uOworCWNvZXhfZG0tPmN1cl9wc190ZG1hID0gdHlwZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVQc1RkbWFPbiA9ICVkLCBiQ3VyUHNUZG1hT24gPSAlZCEhXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfcHNfdGRtYV9vbiwgY29leF9kbS0+Y3VyX3BzX3RkbWFfb24pOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHByZVBzVGRtYSA9ICVkLCBjdXJQc1RkbWEgPSAlZCEhXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfcHNfdGRtYSwgY29leF9kbS0+Y3VyX3BzX3RkbWEpOworCisJCWlmICgoY29leF9kbS0+cHJlX3BzX3RkbWFfb24gPT0gY29leF9kbS0+Y3VyX3BzX3RkbWFfb24pICYmCisJCSAgICAoY29leF9kbS0+cHJlX3BzX3RkbWEgPT0gY29leF9kbS0+Y3VyX3BzX3RkbWEpKQorCQkJcmV0dXJuOworCX0KKwlpZiAodHVybl9vbikgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSAxOgorCQlkZWZhdWx0OgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYSwKKwkJCQkJCSAgICAweDFhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEyLAorCQkJCQkJICAgIDB4MTIsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWhhbGJ0YzgxOTJlMmFudF9zZXRmd3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWMsCisJCQkJCQkgICAgMHgzLCAweGYxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEwLAorCQkJCQkJICAgIDB4MywgMHhmMSwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYSwKKwkJCQkJCSAgICAweDFhLCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEyLAorCQkJCQkJICAgIDB4MTIsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWhhbGJ0YzgxOTJlMmFudF9zZXRmd3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWMsCisJCQkJCQkgICAgMHgzLCAweDcwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweGEzLCAweDEwLAorCQkJCQkJICAgIDB4MywgMHg3MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSA5OgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYSwKKwkJCQkJCSAgICAweDFhLCAweGUxLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDEwOgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxMiwKKwkJCQkJCSAgICAweDEyLCAweGUxLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDExOgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYywKKwkJCQkJCSAgICAweDMsIDB4ZjEsIDB4MTApOworCQkJYnJlYWs7CisJCWNhc2UgMTI6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEwLAorCQkJCQkJICAgIDB4MywgMHhmMSwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAxMzoKKwkJCWhhbGJ0YzgxOTJlMmFudF9zZXRmd3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsCisJCQkJCQkgICAgMHgxYSwgMHhlMCwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAxNDoKKwkJCWhhbGJ0YzgxOTJlMmFudF9zZXRmd3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MTIsCisJCQkJCQkgICAgMHgxMiwgMHhlMCwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAxNToKKwkJCWhhbGJ0YzgxOTJlMmFudF9zZXRmd3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWMsCisJCQkJCQkgICAgMHgzLCAweGYwLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxMiwKKwkJCQkJCSAgICAweDMsIDB4ZjAsIDB4MTApOworCQkJYnJlYWs7CisJCWNhc2UgMTc6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweDYxLCAweDIwLAorCQkJCQkJICAgIDB4MDMsIDB4MTAsIDB4MTApOworCQkJYnJlYWs7CisJCWNhc2UgMTg6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDUsCisJCQkJCQkgICAgMHg1LCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDE5OgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgyNSwKKwkJCQkJCSAgICAweDI1LCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDIwOgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgyNSwKKwkJCQkJCSAgICAweDI1LCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDIxOgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxNSwKKwkJCQkJCSAgICAweDAzLCAweDcwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDcxOgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYSwKKwkJCQkJCSAgICAweDFhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZGlzYWJsZSBQUyB0ZG1hICovCisJCXN3aXRjaCAodHlwZSkgeworCQlkZWZhdWx0OgorCQljYXNlIDA6CisJCQloYWxidGM4MTkyZTJhbnRfc2V0Zndwc3RkbWEoYnRjb2V4aXN0LCAweDgsIDB4MCwgMHgwLAorCQkJCQkJICAgIDB4MCwgMHgwKTsKKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg5MmMsIDB4NCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaGFsYnRjODE5MmUyYW50X3NldGZ3cHN0ZG1hKGJ0Y29leGlzdCwgMHgwLCAweDAsIDB4MCwKKwkJCQkJCSAgICAweDgsIDB4MCk7CisJCQltZGVsYXkoNSk7CisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4OTJjLCAweDIwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogdXBkYXRlIHByZSBzdGF0ZSAqLworCWNvZXhfZG0tPnByZV9wc190ZG1hX29uID0gY29leF9kbS0+Y3VyX3BzX3RkbWFfb247CisJY29leF9kbS0+cHJlX3BzX3RkbWEgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKK30KKworc3RhdGljIHZvaWQgc2V0X3N3aXRjaF9zc3R5cGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHNzdHlwZSkKK3sKKwl1OCBtaW1vcHMgPSBCVENfTUlNT19QU19EWU5BTUlDOworCXUzMiBkaXNyYV9tYXNrID0gMHgwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkgICJbQlRDb2V4XSwgUkVBTCBzZXQgU1MgVHlwZSA9ICVkXG4iLCBzc3R5cGUpOworCisJZGlzcmFfbWFzayA9IGhhbGJ0YzgxOTJlMmFudF9kZWNpZGVyYV9tYXNrKGJ0Y29leGlzdCwgc3N0eXBlLAorCQkJCQkJICAgY29leF9kbS0+Y3VycmFfbWFza3R5cGUpOworCWhhbGJ0YzgxOTJlMmFudF91cGRhdGVyYV9tYXNrKGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgZGlzcmFfbWFzayk7CisKKwlpZiAoc3N0eXBlID09IDEpIHsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCBmYWxzZSwgMSk7CisJCS8qIHN3aXRjaCBvZmRtIHBhdGggKi8KKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweGMwNCwgMHgxMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHhkMDQsIDB4MSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg5MGMsIDB4ODExMTExMTEpOworCQkvKiBzd2l0Y2ggY2NrIHBhdGNoICovCisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweGU3NywgMHg0LCAweDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4YTA3LCAweDgxKTsKKwkJbWltb3BzID0gQlRDX01JTU9fUFNfU1RBVElDOworCX0gZWxzZSBpZiAoc3N0eXBlID09IDIpIHsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCBmYWxzZSwgMCk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHhjMDQsIDB4MzMpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4ZDA0LCAweDMpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4OTBjLCAweDgxMTIxMzEzKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4ZTc3LCAweDQsIDB4MCk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHhhMDcsIDB4NDEpOworCQltaW1vcHMgPSBCVENfTUlNT19QU19EWU5BTUlDOworCX0KKwkvKiBzZXQgcnggMXNzIG9yIDJzcyAqLworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX1NFTkRfTUlNT19QUywgJm1pbW9wcyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zd2l0Y2hfc3N0eXBlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIGJvb2wgZm9yY2VfZXhlYywgdTggbmV3X3NzdHlwZSkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCAlcyBTd2l0Y2ggU1MgVHlwZSA9ICVkXG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwgbmV3X3NzdHlwZSk7CisJY29leF9kbS0+Y3VyX3NzdHlwZSA9IG5ld19zc3R5cGU7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJaWYgKGNvZXhfZG0tPnByZV9zc3R5cGUgPT0gY29leF9kbS0+Y3VyX3NzdHlwZSkKKwkJCXJldHVybjsKKwl9CisJc2V0X3N3aXRjaF9zc3R5cGUoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfc3N0eXBlKTsKKworCWNvZXhfZG0tPnByZV9zc3R5cGUgPSBjb2V4X2RtLT5jdXJfc3N0eXBlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfY29leF9hbGxvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLyogZncgYWxsIG9mZiAqLworCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisKKwkvKiBzdyBhbGwgb2ZmICovCisJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKworCS8qIGh3IGFsbCBvZmYgKi8KKwloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLyogZm9yY2UgdG8gcmVzZXQgY29leCBtZWNoYW5pc20gKi8KKworCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgZmFsc2UsIDEpOworCWhhbGJ0YzgxOTJlMmFudF9md19kYWNfc3dpbmdsdmwoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCA2KTsKKwloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgMCk7CisKKwloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAwKTsKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIDIpOworCisJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9idF9pbnF1aXJ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWJvb2wgbG93X3B3cl9kaXNhYmxlID0gdHJ1ZTsKKworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKworCWhhbGJ0Y19jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisKKwloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworfQorCitzdGF0aWMgYm9vbCBoYWxidGM4MTkyZTJhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOworCWJvb2wgY29tbW9uID0gZmFsc2UsIHdpZmlfY29ubmVjdGVkID0gZmFsc2UsIHdpZmlfYnVzeSA9IGZhbHNlOworCWJvb2wgYnRfaHNvbiA9IGZhbHNlLCBsb3dfcHdyX2Rpc2FibGUgPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNvbik7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0JVU1ksICZ3aWZpX2J1c3kpOworCisJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0IHx8IGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQloYWxidGM4MTkyZTJhbnRfbGltaXRlZF90eChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxLCAwLCAwLCAwKTsKKwllbHNlCisJCWhhbGJ0YzgxOTJlMmFudF9saW1pdGVkX3R4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDAsIDAsIDAsIDApOworCisJaWYgKCF3aWZpX2Nvbm5lY3RlZCkgeworCQlsb3dfcHdyX2Rpc2FibGUgPSBmYWxzZTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsCisJCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIFdpZmkgbm9uLWNvbm5lY3RlZCBpZGxlISFcbiIpOworCisJCWlmICgoQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFID09CisJCSAgICAgY29leF9kbS0+YnRfc3RhdHVzKSB8fAorCQkgICAgKEJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09CisJCSAgICAgY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQkJaGFsYnRjODE5MmUyYW50X3N3aXRjaF9zc3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCSAgICAgIDIpOworCQkJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwKKwkJCQkJCSAgICBOT1JNQUxfRVhFQywgMSk7CisJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwKKwkJCQkJCTApOworCQl9IGVsc2UgeworCQkJaGFsYnRjODE5MmUyYW50X3N3aXRjaF9zc3R5cGUoYnRjb2V4aXN0LAorCQkJCQkJICAgICAgTk9STUFMX0VYRUMsIDEpOworCQkJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwKKwkJCQkJCSAgICBOT1JNQUxfRVhFQywgMCk7CisJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJZmFsc2UsIDEpOworCQl9CisKKwkJaGFsYnRjODE5MmUyYW50X2Z3X2RhY19zd2luZ2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKKworCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJICAgICBmYWxzZSk7CisJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCQkgICAgIDB4MTgpOworCisJCWNvbW1vbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKEJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX05PTl9DT05ORUNURURfSURMRSA9PQorCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSB7CisJCQlsb3dfcHdyX2Rpc2FibGUgPSBmYWxzZTsKKwkJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsCisJCQkJCSAgIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIldpZmkgY29ubmVjdGVkICsgQlQgbm9uIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCisJCQloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsCisJCQkJCQkgICAgICBOT1JNQUxfRVhFQywgMik7CisJCQloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LAorCQkJCQkJICAgIE5PUk1BTF9FWEVDLCAxKTsKKwkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQlmYWxzZSwgMCk7CisJCQloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJNik7CisJCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCisJCQljb21tb24gPSB0cnVlOworCQl9IGVsc2UgaWYgKEJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09CisJCQkgICBjb2V4X2RtLT5idF9zdGF0dXMpIHsKKwkJCWxvd19wd3JfZGlzYWJsZSA9IHRydWU7CisJCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LAorCQkJCQkgICBCVENfU0VUX0FDVF9ESVNBQkxFX0xPV19QT1dFUiwKKwkJCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwkJCWlmIChidF9oc29uKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJXaWZpIGNvbm5lY3RlZCArIEJUIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCisJCQloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJICAgICAgMik7CisJCQloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LAorCQkJCQkJICAgIE5PUk1BTF9FWEVDLCAxKTsKKwkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQlmYWxzZSwgMCk7CisJCQloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwKKwkJCQkJCQlOT1JNQUxfRVhFQywgNik7CisJCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisKKwkJCWNvbW1vbiA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlsb3dfcHdyX2Rpc2FibGUgPSB0cnVlOworCQkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwKKwkJCQkJICAgQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsCisJCQkJCSAgICZsb3dfcHdyX2Rpc2FibGUpOworCisJCQlpZiAod2lmaV9idXN5KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJXaWZpIENvbm5lY3RlZC1CdXN5ICsgQlQgQnVzeSEhXG4iKTsKKwkJCQljb21tb24gPSBmYWxzZTsKKwkJCX0gZWxzZSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJXaWZpIENvbm5lY3RlZC1JZGxlICsgQlQgQnVzeSEhXG4iKTsKKworCQkJCWhhbGJ0YzgxOTJlMmFudF9zd2l0Y2hfc3N0eXBlKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAgICBOT1JNQUxfRVhFQywgMSk7CisJCQkJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAgTk9STUFMX0VYRUMsIDIpOworCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJdHJ1ZSwgMjEpOworCQkJCWhhbGJ0YzgxOTJlMmFudF9md19kYWNfc3dpbmdsdmwoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywgNik7CisJCQkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsCisJCQkJCQkJICBOT1JNQUxfRVhFQywgMCk7CisJCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwKKwkJCQkJCSAgICAgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICBmYWxzZSk7CisJCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwKKwkJCQkJCSAgICAgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAweDE4KTsKKwkJCQljb21tb24gPSB0cnVlOworCQkJfQorCQl9CisJfQorCXJldHVybiBjb21tb247Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCSBib29sIHNjb19oaWQsIGJvb2wgdHhfcGF1c2UsCisJCQkJCQkgdTggbWF4X2ludGVydmFsKQoreworCXN0YXRpYyBpbnQgdXAsIGRuLCBtLCBuLCB3YWl0X2NudDsKKwkvKiAwOiBubyBjaGFuZ2UsICsxOiBpbmNyZWFzZSBXaUZpIGR1cmF0aW9uLAorCSAqIC0xOiBkZWNyZWFzZSBXaUZpIGR1cmF0aW9uICovCisJaW50IHJlc3VsdDsKKwl1OCByZXRyeV9jbnQgPSAwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkgICJbQlRDb2V4XSwgVGRtYUR1cmF0aW9uQWRqdXN0KClcbiIpOworCisJaWYgKCFjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KSB7CisJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSB0cnVlOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGZpcnN0IHJ1biBUZG1hRHVyYXRpb25BZGp1c3QoKSEhXG4iKTsKKwkJaWYgKHNjb19oaWQpIHsKKwkJCWlmICh0eF9wYXVzZSkgeworCQkJCWlmIChtYXhfaW50ZXJ2YWwgPT0gMSkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMzsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAyKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDMpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAobWF4X2ludGVydmFsID09IDEpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgOSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA5OworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDIpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTApOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTA7CisJCQkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMykgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQl9IGVsc2UgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodHhfcGF1c2UpIHsKKwkJCQlpZiAobWF4X2ludGVydmFsID09IDEpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA1OworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDIpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDMpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCX0gZWxzZSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChtYXhfaW50ZXJ2YWwgPT0gMSkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE7CisJCQkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMikgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMykgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJfSBlbHNlIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXVwID0gMDsKKwkJZG4gPSAwOworCQltID0gMTsKKwkJbiA9IDM7CisJCXJlc3VsdCA9IDA7CisJCXdhaXRfY250ID0gMDsKKwl9IGVsc2UgeworCQkvKiBhY2NxdWlyZSB0aGUgQlQgVFJ4IHJldHJ5IGNvdW50IGZyb20gQlRfSW5mbyBieXRlMiAqLworCQlyZXRyeV9jbnQgPSBjb2V4X3N0YS0+YnRfcmV0cnlfY250OworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHJldHJ5X2NudCA9ICVkXG4iLCByZXRyeV9jbnQpOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHVwID0lZCwgZG4gPSVkLCBtID0lZCwgbiA9JWQsIHdhaXRfY250ID0lZFxuIiwKKwkJCSAgdXAsIGRuLCBtLCBuLCB3YWl0X2NudCk7CisJCXJlc3VsdCA9IDA7CisJCXdhaXRfY250Kys7CisJCS8qIG5vIHJldHJ5IGluIHRoZSBsYXN0IDItc2Vjb25kIGR1cmF0aW9uICovCisJCWlmIChyZXRyeV9jbnQgPT0gMCkgeworCQkJdXArKzsKKwkJCWRuLS07CisKKwkJCWlmIChkbiA8PSAwKQorCQkJCWRuID0gMDsKKworCQkJaWYgKHVwID49IG4pIHsKKwkJCQl3YWl0X2NudCA9IDA7CisJCQkJbiA9IDM7CisJCQkJdXAgPSAwOworCQkJCWRuID0gMDsKKwkJCQlyZXN1bHQgPSAxOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkJICAiW0JUQ29leF1JbmNyZWFzZSB3aWZpIGR1cmF0aW9uISFcbiIpOworCQkJfQorCQl9IGVsc2UgaWYgKHJldHJ5X2NudCA8PSAzKSB7CisJCQl1cC0tOworCQkJZG4rKzsKKworCQkJaWYgKHVwIDw9IDApCisJCQkJdXAgPSAwOworCisJCQlpZiAoZG4gPT0gMikgeworCQkJCWlmICh3YWl0X2NudCA8PSAyKQorCQkJCQltKys7CisJCQkJZWxzZQorCQkJCQltID0gMTsKKworCQkJCWlmIChtID49IDIwKQorCQkJCQltID0gMjA7CisKKwkJCQluID0gMyAqIG07CisJCQkJdXAgPSAwOworCQkJCWRuID0gMDsKKwkJCQl3YWl0X2NudCA9IDA7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJSZWR1Y2Ugd2lmaSBkdXJhdGlvbiBmb3IgcmV0cnk8M1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2FpdF9jbnQgPT0gMSkKKwkJCQltKys7CisJCQllbHNlCisJCQkJbSA9IDE7CisKKwkJCWlmIChtID49IDIwKQorCQkJCW0gPSAyMDsKKworCQkJbiA9IDMqbTsKKwkJCXVwID0gMDsKKwkJCWRuID0gMDsKKwkJCXdhaXRfY250ID0gMDsKKwkJCXJlc3VsdCA9IC0xOworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkgICJEZWNyZWFzZSB3aWZpIGR1cmF0aW9uIGZvciByZXRyeUNvdW50ZXI+MyEhXG4iKTsKKwkJfQorCisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgbWF4IEludGVydmFsID0gJWRcbiIsIG1heF9pbnRlcnZhbCk7CisJCWlmIChtYXhfaW50ZXJ2YWwgPT0gMSkgeworCQkJaWYgKHR4X3BhdXNlKSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDFcbiIpOworCisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcxKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA2KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDY7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDQpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgOCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA4OworCQkJCX0KKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOSkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNjsKKwkJCQl9CisKKwkJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA1KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgOCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgODsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDE0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDE2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNjsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA3OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE2KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEzOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBUeFBhdXNlID0gMFxuIik7CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNzEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOCkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDQ7CisJCQkJfQorCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA5KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJfQorCisJCQkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNzEpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAyOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDMpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxMCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTA7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTI7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNzEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDcxOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEyKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTApOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEwOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgOSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgOTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMikgeworCQkJaWYgKHR4X3BhdXNlKSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDFcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNjsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDgpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gODsKKwkJCQl9CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTQpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTQ7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTY7CisJCQkJfQorCQkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA3OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCA4KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICA4OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEzKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE2OworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOCkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDY7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDY7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTUpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxNCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTQ7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTQpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxNCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTQ7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkJICAiW0JUQ29leF0sIFR4UGF1c2UgPSAwXG4iKTsKKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNSkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOCkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDQ7CisJCQkJfQorCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEwKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEwOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTUpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNikgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMjsKKwkJCQl9CisJCQkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMSkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDI7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDQ7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOSkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDEwKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDEyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMjsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDQpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDMpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAyOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAyOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEyKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTApOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEwOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTApOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEwOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAzKSB7CisJCQlpZiAodHhfcGF1c2UpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBUeFBhdXNlID0gMVxuIik7CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDQpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgOCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA4OworCQkJCX0KKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOSkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNjsKKwkJCQl9CisJCQkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNSkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDgpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDg7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTMpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTQpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTUpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTY7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA4KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNikgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDBcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA1KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA4KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDQpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNDsKKwkJCQl9CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEzKSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTQpIHsKKwkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE2KSB7CisJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEyOworCQkJCX0KKwkJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgNCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA5KSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICAgdHJ1ZSwgMTIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEyOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNCkgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAorCQkJCQkJCQkgICAgYnRjb2V4aXN0LAorCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCisJCQkJCQkJCSAgICB0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBpZiBjdXJyZW50IFBzVGRtYSBub3QgbWF0Y2ggd2l0aAorCSAqIHRoZSByZWNvcmRlZCBvbmUgKHdoZW4gc2NhbiwgZGhjcC4uLiksCisJICogdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCBpdCBiYWNrIHRvIHRoZSBwcmV2aW91cyByZWNvcmQgb25lLiAqLworCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSAhPSBjb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlKSB7CisJCWJvb2wgc2NhbiA9IGZhbHNlLCBsaW5rID0gZmFsc2UsIHJvYW0gPSBmYWxzZTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBQc1RkbWEgdHlwZSBkaXNtYXRjaCEhISwgIik7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJjdXJQc1RkbWEgPSVkLCByZWNvcmRQc1RkbWEgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5jdXJfcHNfdGRtYSwgY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSk7CisKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1NDQU4sICZzY2FuKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1JPQU0sICZyb2FtKTsKKworCQlpZiAoIXNjYW4gJiYgIWxpbmsgJiYgIXJvYW0pCisJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJdHJ1ZSwKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUpOworCQllbHNlCisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJICBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkgICJbQlRDb2V4XSwgcm9hbWluZy9saW5rL3NjYW4gaXMgdW5kZXIgcHJvZ3Jlc3MsIHdpbGwgYWRqdXN0IG5leHQgdGltZSEhIVxuIik7CisJfQorfQorCisvKiBTQ08gb25seSBvciBTQ08rUEFOKEhTKSAqLworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9zY28oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCXUzMiB3aWZpX2J3OworCisJd2lmaXJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfd2lmaXJzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCisJYnRyc3NpX3N0YXRlID0gaGFsYnRjODE5MmUyYW50X2J0cnNzaV9zdGF0ZSgzLCAzNCwgNDIpOworCisJaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCSAgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMyk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA5KTsKKwl9CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHg2KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4Nik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHg2KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDYpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX3Njb19wYW4oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCXUzMiB3aWZpX2J3OworCisJd2lmaXJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfd2lmaXJzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCisJYnRyc3NpX3N0YXRlID0gaGFsYnRjODE5MmUyYW50X2J0cnNzaV9zdGF0ZSgzLCAzNCwgNDIpOworCisJaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCSAgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNCk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA0KTsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCX0KKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCisJLyogc3cgbWVjaGFuaXNtICovCisJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDYpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHg2KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDYpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4Nik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25faGlkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlyc3NpX3N0YXRlLCBidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCXUzMiB3aWZpX2J3OworCisJd2lmaXJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfd2lmaXJzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CisJYnRyc3NpX3N0YXRlID0gaGFsYnRjODE5MmUyYW50X2J0cnNzaV9zdGF0ZSgzLCAzNCwgNDIpOworCisJaGFsYnRjODE5MmUyYW50X3N3aXRjaF9zc3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJaGFsYnRjODE5MmUyYW50X2xpbWl0ZWRfcngoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIGZhbHNlLCAweDgpOworCisJaGFsYnRjODE5MmUyYW50X2Z3X2RhY19zd2luZ2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCisJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDMpOworCisJaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCSAgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMyk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA5KTsKKwl9CisKKwkvKiBzdyBtZWNoYW5pc20gKi8KKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKKy8qIEEyRFAgb25seSAvIFBBTihFRFIpIG9ubHkvIEEyRFArUEFOKEhTKSAqLworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlyc3NpX3N0YXRlLCBidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCXUzMiB3aWZpX2J3OworCWJvb2wgbG9uZ19kaXN0ID0gZmFsc2U7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwlpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cgfHwKKwkgICAgIGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykgJiYKKwkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVyB8fAorCSAgICAgd2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBBMmRwLCB3aWZpL2J0IHJzc2kgYm90aCBMT1chIVxuIik7CisJCWxvbmdfZGlzdCA9IHRydWU7CisJfQorCWlmIChsb25nX2Rpc3QpIHsKKwkJaGFsYnRjODE5MmUyYW50X3N3aXRjaF9zc3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCWhhbGJ0YzgxOTJlMmFudF9saW1pdGVkX3J4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCB0cnVlLAorCQkJCQkgICAweDQpOworCX0gZWxzZSB7CisJCWhhbGJ0YzgxOTJlMmFudF9zd2l0Y2hfc3N0eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgIDB4OCk7CisJfQorCisJaGFsYnRjODE5MmUyYW50X2Z3X2RhY19zd2luZ2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKworCWlmIChsb25nX2Rpc3QpCisJCWhhbGJ0Y19jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKKwllbHNlCisJCWhhbGJ0Y19jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKworCWlmIChsb25nX2Rpc3QpIHsKKwkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTcpOworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisJfSBlbHNlIHsKKwkJaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLAorCQkJCQkJCSAgICAgdHJ1ZSwgMSk7CisJCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCQl9IGVsc2UgaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLAorCQkJCQkJCSAgICAgZmFsc2UsIDEpOworCQkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLAorCQkJCQkJCSAgICAgZmFsc2UsIDEpOworCQkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA0KTsKKwkJfQorCX0KKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fYTJkcF9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCWhhbGJ0Y19jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKworCWlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkgICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJaGFsYnRjODE5MmUyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDIpOworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgMik7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQloYWxidGM4MTkyZTJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgIDIpOworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCX0KKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgdHJ1ZSwgMHg2KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIHRydWUsIDB4Nik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgdHJ1ZSwgMHg2KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICB0cnVlLCAweDYpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCisJaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCSAgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA1KTsKKwl9IGVsc2UgaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxKTsKKwl9IGVsc2UgaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNCk7CisJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEpOworCX0KKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKKy8qIFBBTihIUykgb25seSAqLworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaGFsYnRjX2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCisJaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCSAgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCX0KKwloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCisvKiBQQU4oRURSKStBMkRQICovCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpcnNzaV9zdGF0ZSwgYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwl1MzIgd2lmaV9idzsKKworCXdpZmlyc3NpX3N0YXRlID0gaGFsYnRjODE5MmUyYW50X3dpZmlyc3NpX3N0YXRlKGJ0Y29leGlzdCwgMCwgMiwgMTUsIDApOworCWJ0cnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF9idHJzc2lfc3RhdGUoMywgMzQsIDQyKTsKKworCWhhbGJ0YzgxOTJlMmFudF9zd2l0Y2hfc3N0eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCWhhbGJ0YzgxOTJlMmFudF9saW1pdGVkX3J4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCBmYWxzZSwgMHg4KTsKKworCWhhbGJ0YzgxOTJlMmFudF9md19kYWNfc3dpbmdsdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisKKwloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkgICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKKwkJaGFsYnRjODE5MmUyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDMpOworCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgMyk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCQloYWxidGM4MTkyZTJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgIDMpOworCX0KKworCS8qIHN3IG1lY2hhbmlzbQkqLworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWhhbGJ0YzgxOTJlMmFudF9zd2l0Y2hfc3N0eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCWhhbGJ0YzgxOTJlMmFudF9saW1pdGVkX3J4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCBmYWxzZSwgMHg4KTsKKworCWhhbGJ0YzgxOTJlMmFudF9md19kYWNfc3dpbmdsdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisKKwloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMyk7CisKKwlpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJICAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE0KTsKKwl9IGVsc2UgaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CisJfQorCisJLyogc3cgbWVjaGFuaXNtICovCisJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCisvKiBISUQrQTJEUCtQQU4oRURSKSAqLworc3RhdGljIHZvaWQgYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwloYWxidGM4MTkyZTJhbnRfZndfZGFjX3N3aW5nbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMyk7CisKKwlpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJICAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDMpOworCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8CisJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIGZhbHNlLCAzKTsKKwl9IGVsc2UgaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNCk7CisJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIGZhbHNlLCAzKTsKKwl9CisKKwkvKiBzdyBtZWNoYW5pc20gKi8KKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCSAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25faGlkX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpcnNzaV9zdGF0ZSA9IGhhbGJ0YzgxOTJlMmFudF93aWZpcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidHJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfYnRyc3NpX3N0YXRlKDMsIDM0LCA0Mik7CisKKwloYWxidGM4MTkyZTJhbnRfc3dpdGNoX3NzdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwloYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDB4OCk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWhhbGJ0Y19jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAzKTsKKworCWlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkgICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKKwkJaGFsYnRjODE5MmUyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgMik7CisJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJICAgKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpCXsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJaGFsYnRjODE5MmUyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIDIpOworCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA0KTsKKwkJaGFsYnRjODE5MmUyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIDIpOworCX0KKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjX3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGNfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsCisJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Y19zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCBhbGdvcml0aG0gPSAwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkgICJbQlRDb2V4XSwgUnVuQ29leGlzdE1lY2hhbmlzbSgpID09PT5cbiIpOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIHJldHVybiBmb3IgTWFudWFsIENUUkwgPD09PVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29leF9zdGEtPnVuZGVyX2lwcykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgd2lmaSBpcyB1bmRlciBJUFMgISEhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWFsZ29yaXRobSA9IGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fYWxnb3JpdGhtKGJ0Y29leGlzdCk7CisJaWYgKGNvZXhfc3RhLT5jMmhfYnRfaW5xdWlyeV9wYWdlICYmCisJICAgIChCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5IUyAhPSBhbGdvcml0aG0pKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCVCBpcyB1bmRlciBpbnF1aXJ5L3BhZ2Ugc2NhbiAhIVxuIik7CisJCWhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fYnRfaW5xdWlyeShidGNvZXhpc3QpOworCQlyZXR1cm47CisJfQorCisJY29leF9kbS0+Y3VyX2FsZ29yaXRobSA9IGFsZ29yaXRobTsKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCBBbGdvcml0aG0gPSAlZFxuIiwgY29leF9kbS0+Y3VyX2FsZ29yaXRobSk7CisKKwlpZiAoaGFsYnRjODE5MmUyYW50X2lzX2NvbW1vbl9hY3Rpb24oYnRjb2V4aXN0KSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50IGNvbW1vbi5cbiIpOworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKGNvZXhfZG0tPmN1cl9hbGdvcml0aG0gIT0gY29leF9kbS0+cHJlX2FsZ29yaXRobSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdIHByZUFsZ29yaXRobSA9JWQsIGN1ckFsZ29yaXRobSA9JWRcbiIsCisJCQkJICBjb2V4X2RtLT5wcmVfYWxnb3JpdGhtLAorCQkJCSAgY29leF9kbS0+Y3VyX2FsZ29yaXRobSk7CisJCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJCX0KKwkJc3dpdGNoIChjb2V4X2RtLT5jdXJfYWxnb3JpdGhtKSB7CisJCWNhc2UgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fU0NPOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIkFjdGlvbiAyLUFudCwgYWxnb3JpdGhtID0gU0NPLlxuIik7CisJCQloYWxidGM4MTkyZTJhbnRfYWN0aW9uX3NjbyhidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fU0NPX1BBTjoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFNDTytQQU4oRURSKS5cbiIpOworCQkJaGFsYnRjODE5MmUyYW50X2FjdGlvbl9zY29fcGFuKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19ISUQ6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBISUQuXG4iKTsKKwkJCWhhbGJ0YzgxOTJlMmFudF9hY3Rpb25faGlkKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIkFjdGlvbiAyLUFudCwgYWxnb3JpdGhtID0gQTJEUC5cbiIpOworCQkJaGFsYnRjODE5MmUyYW50X2FjdGlvbl9hMmRwKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19BMkRQX1BBTkhTOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIkFjdGlvbiAyLUFudCwgYWxnb3JpdGhtID0gQTJEUCtQQU4oSFMpLlxuIik7CisJCQloYWxidGM4MTkyZTJhbnRfYWN0aW9uX2EyZHBfcGFuX2hzKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5FRFI6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBQQU4oRURSKS5cbiIpOworCQkJaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5fZWRyKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5IUzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IEhTIG1vZGUuXG4iKTsKKwkJCWhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fcGFuX2hzKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfQTJEUDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFBBTitBMkRQLlxuIik7CisJCQloYWxidGM4MTkyZTJhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFBBTihFRFIpK0hJRC5cbiIpOworCQkJaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5fZWRyX2hpZChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIkFjdGlvbiAyLUFudCwgYWxnb3JpdGhtID0gSElEK0EyRFArUEFOLlxuIik7CisJCQlhY3Rpb25faGlkX2EyZHBfcGFuX2VkcihidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFA6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBISUQrQTJEUC5cbiIpOworCQkJaGFsYnRjODE5MmUyYW50X2FjdGlvbl9oaWRfYTJkcChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSB1bmtub3duISFcbiIpOworCQkJLyogaGFsYnRjODE5MmUyYW50X2NvZXhfYWxsb2ZmKGJ0Y29leGlzdCk7ICovCisJCQlicmVhazsKKwkJfQorCQljb2V4X2RtLT5wcmVfYWxnb3JpdGhtID0gY29leF9kbS0+Y3VyX2FsZ29yaXRobTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9pbml0X2h3Y29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIGJvb2wgYmFja3VwKQoreworCXUxNiB1MTZ0bXAgPSAwOworCXU4IHU4dG1wID0gMDsKKworCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkgICJbQlRDb2V4XSwgMkFudCBJbml0IEhXIENvbmZpZyEhXG4iKTsKKworCWlmIChiYWNrdXApIHsKKwkJLyogYmFja3VwIHJmIDB4MWUgdmFsdWUgKi8KKwkJY29leF9kbS0+YnRfcmYweDFlX2JhY2t1cCA9CisJCQlidGNvZXhpc3QtPmJ0Y19nZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsCisJCQkJCQkgIDB4MWUsIDB4ZmZmZmYpOworCisJCWNvZXhfZG0tPmJhY2t1cF9hcmZyX2NudDEgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgICAgMHg0MzApOworCQljb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQyID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsCisJCQkJCQkJCSAgICAgMHg0MzQpOworCQljb2V4X2RtLT5iYWNrdXBfcmV0cnlsaW1pdCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMmJ5dGUoCisJCQkJCQkJCSAgICBidGNvZXhpc3QsCisJCQkJCQkJCSAgICAweDQyYSk7CisJCWNvZXhfZG0tPmJhY2t1cF9hbXBkdV9tYXh0aW1lID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZSgKKwkJCQkJCQkJICAgIGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIDB4NDU2KTsKKwl9CisKKwkvKiBhbnRlbm5hIHN3IGN0cmwgdG8gYnQgKi8KKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NGYsIDB4Nik7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDk0NCwgMHgyNCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDkzMCwgMHg3MDA3MDApOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg5MmMsIDB4MjApOworCWlmIChidGNvZXhpc3QtPmNoaXBfaW50ZXJmYWNlID09IEJUQ19JTlRGX1VTQikKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDY0LCAweDMwNDMwMDA0KTsKKwllbHNlCisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg2NCwgMHgzMDAzMDAwNCk7CisKKwloYWxidGNfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAwKTsKKworCS8qIGFudGVubmEgc3dpdGNoIGNvbnRyb2wgcGFyYW1ldGVyICovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDg1OCwgMHg1NTU1NTU1NSk7CisKKwkvKiBjb2V4IHBhcmFtZXRlcnMgKi8KKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4Nzc4LCAweDMpOworCS8qIDB4NzkwWzU6MF0gPSAweDUgKi8KKwl1OHRtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDc5MCk7CisJdTh0bXAgJj0gMHhjMDsKKwl1OHRtcCB8PSAweDU7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc5MCwgdTh0bXApOworCisJLyogZW5hYmxlIGNvdW50ZXIgc3RhdGlzdGljcyAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4NCk7CisKKwkvKiBlbmFibGUgUFRBICovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDQwLCAweDIwKTsKKwkvKiBlbmFibGUgbWFpbGJveCBpbnRlcmZhY2UgKi8KKwl1MTZ0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlKGJ0Y29leGlzdCwgMHg0MCk7CisJdTE2dG1wIHw9IEJJVCg5KTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4NDAsIHUxNnRtcCk7CisKKwkvKiBlbmFibGUgUFRBIEkyQyBtYWlsYm94ICAqLworCXU4dG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4MTAxKTsKKwl1OHRtcCB8PSBCSVQoNCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDEwMSwgdTh0bXApOworCisJLyogZW5hYmxlIGJ0IGNsb2NrIHdoZW4gd2lmaSBpcyBkaXNhYmxlZC4gKi8KKwl1OHRtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDkzKTsKKwl1OHRtcCB8PSBCSVQoMCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDkzLCB1OHRtcCk7CisJLyogZW5hYmxlIGJ0IGNsb2NrIHdoZW4gc3VzcGVuZC4gKi8KKwl1OHRtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDcpOworCXU4dG1wIHw9IEJJVCgwKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NywgdTh0bXApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICB3b3JrIGFyb3VuZCBmdW5jdGlvbiBzdGFydCB3aXRoIHdhX2hhbGJ0YzgxOTJlMmFudF8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIGV4dGVybiBmdW5jdGlvbiBzdGFydCB3aXRoIEVYaGFsYnRjODE5MmUyYW50XworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfaW5pdF9od2NvbmZpZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4MTkyZTJhbnRfaW5pdF9od2NvbmZpZyhidGNvZXhpc3QsIHRydWUpOworfQorCit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCSAgIltCVENvZXhdLCBDb2V4IE1lY2hhbmlzbSBJbml0ISFcbiIpOworCWhhbGJ0YzgxOTJlMmFudF9pbml0X2NvZXhfZG0oYnRjb2V4aXN0KTsKK30KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfZGlzcGxheV9jb2V4X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19ib2FyZF9pbmZvICpib2FyZF9pbmZvID0gJmJ0Y29leGlzdC0+Ym9hcmRfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOworCXU4ICpjbGlfYnVmID0gYnRjb2V4aXN0LT5jbGlfYnVmOworCXU4IHU4dG1wWzRdLCBpLCBidF9pbmZvX2V4dCwgcHNfdGRtYV9jYXNlID0gMDsKKwl1MTYgdTE2dG1wWzRdOworCXUzMiB1MzJ0bXBbNF07CisJYm9vbCByb2FtID0gZmFsc2UsIHNjYW4gPSBmYWxzZSwgbGluayA9IGZhbHNlLCB3aWZpX3VuZGVyXzVnID0gZmFsc2U7CisJYm9vbCBidF9oc29uID0gZmFsc2UsIHdpZmlfYnVzeSA9IGZhbHNlOworCWludCB3aWZpcnNzaSA9IDAsIGJ0X2hzX3Jzc2kgPSAwOworCXUzMiB3aWZpX2J3LCB3aWZpX3RyYWZmaWNfZGlyOworCXU4IHdpZmlfZG90MTFfY2hubCwgd2lmaV9oc19jaG5sOworCXUzMiBmd192ZXIgPSAwLCBidF9wYXRjaF92ZXIgPSAwOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcclxuID09PT09PT09PT09PVtCVCBDb2V4aXN0IGluZm9dID09PT09PT09PT09PSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sKSB7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJICAgIlxyXG4gPT09PT09PT09PT1bVW5kZXIgTWFudWFsIENvbnRyb2xdID09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXHJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCX0KKworCWlmICghYm9hcmRfaW5mby0+YnRfZXhpc3QpIHsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuIEJUIG5vdCBleGlzdHMgISEhIik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwkJcmV0dXJuOworCX0KKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXHJcbiAlLTM1cyA9ICVkLyAlZCAiLCAiQW50IFBHIG51bWJlci8gQW50IG1lY2hhbmlzbTogIiwKKwkJICAgYm9hcmRfaW5mby0+cGdfYW50X251bSwgYm9hcmRfaW5mby0+YnRkbV9hbnRfbnVtKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlcyAvICVkIiwKKwkJICAgIkJUIHN0YWNrLyBoY2kgZXh0IHZlciIsCisJCSAgICgoc3RhY2tfaW5mby0+cHJvZmlsZV9ub3RpZmllZCkgPyAiWWVzIiA6ICJObyIpLAorCQkgICBzdGFja19pbmZvLT5oY2lfdmVyc2lvbik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9CVF9QQVRDSF9WRVIsICZidF9wYXRjaF92ZXIpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9GV19WRVIsICZmd192ZXIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXHJcbiAlLTM1cyA9ICVkXyVkLyAweCV4LyAweCV4KCVkKSIsCisJCSAgICJDb2V4VmVyLyBGd1Zlci8gUGF0Y2hWZXIiLAorCQkgICBnbGNvZXhfdmVyX2RhdGVfODE5MmVfMmFudCwgZ2xjb2V4X3Zlcl84MTkyZV8yYW50LAorCQkgICBmd192ZXIsIGJ0X3BhdGNoX3ZlciwgYnRfcGF0Y2hfdmVyKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzb24pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9ET1QxMV9DSE5MLAorCQkJICAgJndpZmlfZG90MTFfY2hubCk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9XSUZJX0hTX0NITkwsICZ3aWZpX2hzX2NobmwpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkIC8gJWQoJWQpIiwKKwkJICAgIkRvdDExIGNoYW5uZWwgLyBIc01vZGUoSHNDaG5sKSIsCisJCSAgIHdpZmlfZG90MTFfY2hubCwgYnRfaHNvbiwgd2lmaV9oc19jaG5sKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlMDJ4ICUwMnggJTAyeCAiLAorCQkgICAiSDJDIFdpZmkgaW5mb3JtIGJ0IGNobmwgSW5mbyIsIGNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzBdLAorCQkgICBjb2V4X2RtLT53aWZpX2NobmxfaW5mb1sxXSwgY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMl0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaXJzc2kpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfSFNfUlNTSSwgJmJ0X2hzX3Jzc2kpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkLyAlZCIsCisJCSAgICJXaWZpIHJzc2kvIEhTIHJzc2kiLCB3aWZpcnNzaSwgYnRfaHNfcnNzaSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1NDQU4sICZzY2FuKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfTElOSywgJmxpbmspOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9ST0FNLCAmcm9hbSk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvICVkLyAlZCAiLAorCQkgICAiV2lmaSBsaW5rLyByb2FtLyBzY2FuIiwgbGluaywgcm9hbSwgc2Nhbik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1VOREVSXzVHLCAmd2lmaV91bmRlcl81Zyk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0JVU1ksICZ3aWZpX2J1c3kpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9UUkFGRklDX0RJUkVDVElPTiwKKwkJCSAgICZ3aWZpX3RyYWZmaWNfZGlyKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlcyAvICVzLyAlcyAiLAorCQkgICAiV2lmaSBzdGF0dXMiLCAod2lmaV91bmRlcl81ZyA/ICI1RyIgOiAiMi40RyIpLAorCQkgICAoKEJUQ19XSUZJX0JXX0xFR0FDWSA9PSB3aWZpX2J3KSA/ICJMZWdhY3kiIDoKKwkJCSgoKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgPyAiSFQ0MCIgOiAiSFQyMCIpKSksCisJCSAgICgoIXdpZmlfYnVzeSkgPyAiaWRsZSIgOgorCQkJKChCVENfV0lGSV9UUkFGRklDX1RYID09IHdpZmlfdHJhZmZpY19kaXIpID8KKwkJCQkidXBsaW5rIiA6ICJkb3dubGluayIpKSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gWyVzLyAlZC8gJWRdICIsCisJCSAgICJCVCBbc3RhdHVzLyByc3NpLyByZXRyeUNudF0iLAorCQkgICAoKGJ0Y29leGlzdC0+YnRfaW5mby5idF9kaXNhYmxlZCkgPyAoImRpc2FibGVkIikgOgorCQkgICAgKChjb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSkgPworCQkgICAgICgiaW5xdWlyeS9wYWdlIHNjYW4iKSA6CisJCSAgICAgICgoQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFID09CisJCQljb2V4X2RtLT5idF9zdGF0dXMpID8gIm5vbi1jb25uZWN0ZWQgaWRsZSIgOgorCQkJICgoQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEUgPT0KKwkJCSAgIGNvZXhfZG0tPmJ0X3N0YXR1cykgPyAiY29ubmVjdGVkLWlkbGUiIDogImJ1c3kiKSkpKSwKKwkJICAgY29leF9zdGEtPmJ0X3Jzc2ksIGNvZXhfc3RhLT5idF9yZXRyeV9jbnQpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkIC8gJWQgLyAlZCAvICVkIiwKKwkJICAgIlNDTy9ISUQvUEFOL0EyRFAiLCBzdGFja19pbmZvLT5zY29fZXhpc3QsCisJCSAgIHN0YWNrX2luZm8tPmhpZF9leGlzdCwgc3RhY2tfaW5mby0+cGFuX2V4aXN0LAorCQkgICBzdGFja19pbmZvLT5hMmRwX2V4aXN0KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwgQlRDX0RCR19ESVNQX0JUX0xJTktfSU5GTyk7CisKKwlidF9pbmZvX2V4dCA9IGNvZXhfc3RhLT5idF9pbmZvX2V4dDsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlcyIsCisJCSAgICJCVCBJbmZvIEEyRFAgcmF0ZSIsCisJCSAgIChidF9pbmZvX2V4dCAmIEJJVCgwKSkgPyAiQmFzaWMgcmF0ZSIgOiAiRURSIHJhdGUiKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQlRfSU5GT19TUkNfODE5MkVfMkFOVF9NQVg7IGkrKykgeworCQlpZiAoY29leF9zdGEtPmJ0X2luZm9fYzJoX2NudFtpXSkgeworCQkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkJICAgIlxyXG4gJS0zNXMgPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIsCisJCQkJICAgZ2xidF9pbmZvc3JjODE5MmUyYW50W2ldLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVswXSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bMV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzJdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVszXSk7CisJCQlDTF9QUklOVEYoY2xpX2J1Zik7CisJCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCQkgICAiJTAyeCAlMDJ4ICUwMngoJWQpIiwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bNF0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzVdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVs2XSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W2ldKTsKKwkJCUNMX1BSSU5URihjbGlfYnVmKTsKKwkJfQorCX0KKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzLyVzIiwKKwkJICAgIlBTIHN0YXRlLCBJUFMvTFBTIiwKKwkJICAgKChjb2V4X3N0YS0+dW5kZXJfaXBzID8gIklQUyBPTiIgOiAiSVBTIE9GRiIpKSwKKwkJICAgKChjb2V4X3N0YS0+dW5kZXJfbHBzID8gIkxQUyBPTiIgOiAiTFBTIE9GRiIpKSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCWJ0Y29leGlzdC0+YnRjX2Rpc3BfZGJnX21zZyhidGNvZXhpc3QsIEJUQ19EQkdfRElTUF9GV19QV1JfTU9ERV9DTUQpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleCAiLCAiU1MgVHlwZSIsCisJCSAgIGNvZXhfZG0tPmN1cl9zc3R5cGUpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCS8qIFN3IG1lY2hhbmlzbQkqLworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyIsCisJCSAgICI9PT09PT09PT09PT1bU3cgbWVjaGFuaXNtXSA9PT09PT09PT09PT0iKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvICVkLyAlZCAiLAorCQkgICAiU00xW1NoUmYvIExwUkEvIExpbURpZ10iLCBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3NocmluaywKKwkJICAgY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhLCBjb2V4X2RtLT5saW1pdGVkX2RpZyk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkLyAlZC8gJWQoMHgleCkgIiwKKwkJICAgIlNNMltBZ2NULyBBZGNCLyBTd0RhY1N3aW5nKGx2bCldIiwKKwkJICAgY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbiwgY29leF9kbS0+Y3VyX2FkY19iYWNrX29mZiwKKwkJICAgY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbiwgY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmwpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXggIiwgIlJhdGUgTWFzayIsCisJCSAgIGJ0Y29leGlzdC0+YnRfaW5mby5yYV9tYXNrKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkvKiBGdyBtZWNoYW5pc20JKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMiLAorCQkgICAiPT09PT09PT09PT09W0Z3IG1lY2hhbmlzbV0gPT09PT09PT09PT09Iik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJcHNfdGRtYV9jYXNlID0gY29leF9kbS0+Y3VyX3BzX3RkbWE7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcclxuICUtMzVzID0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IGNhc2UtJWQgKGF1dG86JWQpIiwKKwkJICAgIlBTIFRETUEiLCBjb2V4X2RtLT5wc190ZG1hX3BhcmFbMF0sCisJCSAgIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsxXSwgY29leF9kbS0+cHNfdGRtYV9wYXJhWzJdLAorCQkgICBjb2V4X2RtLT5wc190ZG1hX3BhcmFbM10sIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVs0XSwKKwkJICAgcHNfdGRtYV9jYXNlLCBjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQgIiwKKwkJICAgIkRlY0J0UHdyLyBJZ25XbGFuQWN0IiwKKwkJICAgY29leF9kbS0+Y3VyX2RlY19idF9wd3IsIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCS8qIEh3IHNldHRpbmcgKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMiLAorCQkgICAiPT09PT09PT09PT09W0h3IHNldHRpbmddID09PT09PT09PT09PSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgiLAorCQkgICAiUkYtQSwgMHgxZSBpbml0VmFsIiwgY29leF9kbS0+YnRfcmYweDFlX2JhY2t1cCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8weCV4LzB4JXgvMHgleCIsCisJCSAgICJiYWNrdXAgQVJGUjEvQVJGUjIvUkwvQU1heFRpbWUiLCBjb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQxLAorCQkgICBjb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQyLCBjb2V4X2RtLT5iYWNrdXBfcmV0cnlsaW1pdCwKKwkJICAgY29leF9kbS0+YmFja3VwX2FtcGR1X21heHRpbWUpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDQzMCk7CisJdTMydG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NDM0KTsKKwl1MTZ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEpOworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NDU2KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LzB4JXgvMHgleC8weCV4IiwKKwkJICAgIjB4NDMwLzB4NDM0LzB4NDJhLzB4NDU2IiwKKwkJICAgdTMydG1wWzBdLCB1MzJ0bXBbMV0sIHUxNnRtcFswXSwgdTh0bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweGMwNCk7CisJdTMydG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4ZDA0KTsKKwl1MzJ0bXBbMl0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg5MGMpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgiLAorCQkgICAiMHhjMDQvIDB4ZDA0LyAweDkwYyIsIHUzMnRtcFswXSwgdTMydG1wWzFdLCB1MzJ0bXBbMl0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4Nzc4KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4IiwgIjB4Nzc4IiwKKwkJICAgdTh0bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4OTJjKTsKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg5MzApOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLAorCQkgICAiMHg5MmMvIDB4OTMwIiwgKHU4dG1wWzBdKSwgdTMydG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1OHRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDQwKTsKKwl1OHRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDRmKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4IiwKKwkJICAgIjB4NDAvIDB4NGYiLCB1OHRtcFswXSwgdTh0bXBbMV0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDU1MCk7CisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg1MjIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLAorCQkgICAiMHg1NTAoYmNuIGN0cmwpLzB4NTIyIiwgdTMydG1wWzBdLCB1OHRtcFswXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTMydG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4YzUwKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4IiwgIjB4YzUwKGRpZykiLAorCQkgICB1MzJ0bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDZjMCk7CisJdTMydG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NmM0KTsKKwl1MzJ0bXBbMl0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg2YzgpOworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NmNjKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4LyAweCV4IiwKKwkJICAgIjB4NmMwLzB4NmM0LzB4NmM4LzB4NmNjKGNvZXhUYWJsZSkiLAorCQkgICB1MzJ0bXBbMF0sIHUzMnRtcFsxXSwgdTMydG1wWzJdLCB1OHRtcFswXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvICVkIiwKKwkJICAgIjB4NzcwKGhwIHJ4WzMxOjE2XS90eFsxNTowXSkiLAorCQkgICBjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCwgY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHgpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQiLAorCQkgICAiMHg3NzQobHAgcnhbMzE6MTZdL3R4WzE1OjBdKSIsCisJCSAgIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfcngsIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfdHgpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKyNpZiAoQlRfQVVUT19SRVBPUlRfT05MWV84MTkyRV8yQU5UID09IDEpCisJaGFsYnRjODE5MmUyYW50X21vbml0b3JfYnRfY3RyKGJ0Y29leGlzdCk7CisjZW5kaWYKKwlidGNvZXhpc3QtPmJ0Y19kaXNwX2RiZ19tc2coYnRjb2V4aXN0LCBCVENfREJHX0RJU1BfQ09FWF9TVEFUSVNUSUNTKTsKK30KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0lQU19FTlRFUiA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgSVBTIEVOVEVSIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9pcHMgPSB0cnVlOworCQloYWxidGM4MTkyZTJhbnRfY29leF9hbGxvZmYoYnRjb2V4aXN0KTsKKwl9IGVsc2UgaWYgKEJUQ19JUFNfTEVBVkUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIElQUyBMRUFWRSBub3RpZnlcbiIpOworCQljb2V4X3N0YS0+dW5kZXJfaXBzID0gZmFsc2U7CisJfQorfQorCit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9scHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWlmIChCVENfTFBTX0VOQUJMRSA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgTFBTIEVOQUJMRSBub3RpZnlcbiIpOworCQljb2V4X3N0YS0+dW5kZXJfbHBzID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKEJUQ19MUFNfRElTQUJMRSA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgTFBTIERJU0FCTEUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2xwcyA9IGZhbHNlOworCX0KK30KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfc2Nhbl9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJaWYgKEJUQ19TQ0FOX1NUQVJUID09IHR5cGUpCisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgU0NBTiBTVEFSVCBub3RpZnlcbiIpOworCWVsc2UgaWYgKEJUQ19TQ0FOX0ZJTklTSCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIFNDQU4gRklOSVNIIG5vdGlmeVxuIik7Cit9CisKK3ZvaWQgZXhfaGFsYnRjODE5MmUyYW50X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWlmIChCVENfQVNTT0NJQVRFX1NUQVJUID09IHR5cGUpCisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgQ09OTkVDVCBTVEFSVCBub3RpZnlcbiIpOworCWVsc2UgaWYgKEJUQ19BU1NPQ0lBVEVfRklOSVNIID09IHR5cGUpCisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgQ09OTkVDVCBGSU5JU0ggbm90aWZ5XG4iKTsKK30KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgIHU4IHR5cGUpCit7CisJdTggaDJjX3BhcmFtZXRlclszXSA9IHswfTsKKwl1MzIgd2lmaV9idzsKKwl1OCB3aWZpX2NlbnRlcl9jaG5sOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwKKwkgICAgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gfHwKKwkgICAgYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlpZiAoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBNRURJQSBjb25uZWN0IG5vdGlmeVxuIik7CisJZWxzZQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIE1FRElBIGRpc2Nvbm5lY3Qgbm90aWZ5XG4iKTsKKworCS8qIG9ubHkgMi40RyB3ZSBuZWVkIHRvIGluZm9ybSBidCB0aGUgY2hubCBtYXNrICovCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9XSUZJX0NFTlRSQUxfQ0hOTCwKKwkJCSAgICZ3aWZpX2NlbnRlcl9jaG5sKTsKKwlpZiAoKEJUQ19NRURJQV9DT05ORUNUID09IHR5cGUpICYmCisJICAgICh3aWZpX2NlbnRlcl9jaG5sIDw9IDE0KSkgeworCQloMmNfcGFyYW1ldGVyWzBdID0gMHgxOworCQloMmNfcGFyYW1ldGVyWzFdID0gd2lmaV9jZW50ZXJfY2hubDsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisJCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpCisJCQloMmNfcGFyYW1ldGVyWzJdID0gMHgzMDsKKwkJZWxzZQorCQkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MjA7CisJfQorCisJY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMF0gPSBoMmNfcGFyYW1ldGVyWzBdOworCWNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzFdID0gaDJjX3BhcmFtZXRlclsxXTsKKwljb2V4X2RtLT53aWZpX2NobmxfaW5mb1syXSA9IGgyY19wYXJhbWV0ZXJbMl07CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIEZXIHdyaXRlIDB4NjYgPSAweCV4XG4iLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0gPDwgMTYgfCBoMmNfcGFyYW1ldGVyWzFdIDw8IDggfAorCQkgIGgyY19wYXJhbWV0ZXJbMl0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY2LCAzLCBoMmNfcGFyYW1ldGVyKTsKK30KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICB1OCB0eXBlKQoreworCWlmICh0eXBlID09IEJUQ19QQUNLRVRfREhDUCkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBESENQIFBhY2tldCBub3RpZnlcbiIpOworfQorCit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggKnRtcF9idWYsIHU4IGxlbmd0aCkKK3sKKwl1OCBidF9pbmZvID0gMDsKKwl1OCBpLCByc3Bzb3VyY2UgPSAwOworCWJvb2wgYnRfYnVzeSA9IGZhbHNlLCBsaW1pdGVkX2RpZyA9IGZhbHNlOworCWJvb2wgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZTsKKworCWNvZXhfc3RhLT5jMmhfYnRfaW5mb19yZXFfc2VudCA9IGZhbHNlOworCisJcnNwc291cmNlID0gdG1wX2J1ZlswXSAmIDB4ZjsKKwlpZiAocnNwc291cmNlID49IEJUX0lORk9fU1JDXzgxOTJFXzJBTlRfTUFYKQorCQlyc3Bzb3VyY2UgPSBCVF9JTkZPX1NSQ184MTkyRV8yQU5UX1dJRklfRlc7CisJY29leF9zdGEtPmJ0X2luZm9fYzJoX2NudFtyc3Bzb3VyY2VdKys7CisKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkgICJbQlRDb2V4XSwgQnQgaW5mb1slZF0sIGxlbmd0aCA9JWQsIGhleCBkYXRhID1bIiwKKwkJICByc3Bzb3VyY2UsIGxlbmd0aCk7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bzb3VyY2VdW2ldID0gdG1wX2J1ZltpXTsKKwkJaWYgKGkgPT0gMSkKKwkJCWJ0X2luZm8gPSB0bXBfYnVmW2ldOworCQlpZiAoaSA9PSBsZW5ndGgtMSkKKwkJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkJICAiMHglMDJ4XVxuIiwgdG1wX2J1ZltpXSk7CisJCWVsc2UKKwkJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkJICAiMHglMDJ4LCAiLCB0bXBfYnVmW2ldKTsKKwl9CisKKwlpZiAoQlRfSU5GT19TUkNfODE5MkVfMkFOVF9XSUZJX0ZXICE9IHJzcHNvdXJjZSkgeworCQljb2V4X3N0YS0+YnRfcmV0cnlfY250ID0JLyogWzM6MF0gKi8KKwkJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bzb3VyY2VdWzJdICYgMHhmOworCisJCWNvZXhfc3RhLT5idF9yc3NpID0KKwkJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bzb3VyY2VdWzNdICogMiArIDEwOworCisJCWNvZXhfc3RhLT5idF9pbmZvX2V4dCA9CisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwc291cmNlXVs0XTsKKworCQkvKiBIZXJlIHdlIG5lZWQgdG8gcmVzZW5kIHNvbWUgd2lmaSBpbmZvIHRvIEJUCisJCSAqIGJlY2F1c2UgYnQgaXMgcmVzZXQgYW5kIGxvc3Mgb2YgdGhlIGluZm8uICovCisJCWlmICgoY29leF9zdGEtPmJ0X2luZm9fZXh0ICYgQklUKDEpKSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgImJpdDEsIHNlbmQgd2lmaSBCVyZDaG5sIHRvIEJUISFcbiIpOworCQkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCQkJICAgJndpZmlfY29ubmVjdGVkKTsKKwkJCWlmICh3aWZpX2Nvbm5lY3RlZCkKKwkJCQlleF9oYWxidGM4MTkyZTJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeSgKKwkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJQlRDX01FRElBX0NPTk5FQ1QpOworCQkJZWxzZQorCQkJCWV4X2hhbGJ0YzgxOTJlMmFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KAorCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQlCVENfTUVESUFfRElTQ09OTkVDVCk7CisJCX0KKworCQlpZiAoKGNvZXhfc3RhLT5idF9pbmZvX2V4dCAmIEJJVCgzKSkpIHsKKwkJCWlmICghYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCAmJgorCQkJICAgICFidGNvZXhpc3QtPnN0b3BfY29leF9kbSkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiYml0MywgQlQgTk9UIGlnbm9yZSBXbGFuIGFjdGl2ZSFcbiIpOworCQkJCWhhbGJ0YzgxOTJlMmFudF9pZ25vcmV3bGFuYWN0KGJ0Y29leGlzdCwKKwkJCQkJCQkgICAgICBGT1JDRV9FWEVDLAorCQkJCQkJCSAgICAgIGZhbHNlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEJUIGFscmVhZHkgTk9UIGlnbm9yZSBXbGFuIGFjdGl2ZSwKKwkJCSAqIGRvIG5vdGhpbmcgaGVyZS4gKi8KKwkJfQorCisjaWYgKEJUX0FVVE9fUkVQT1JUX09OTFlfODE5MkVfMkFOVCA9PSAwKQorCQlpZiAoKGNvZXhfc3RhLT5idF9pbmZvX2V4dCAmIEJJVCg0KSkpIHsKKwkJCS8qIEJUIGF1dG8gcmVwb3J0IGFscmVhZHkgZW5hYmxlZCwgZG8gbm90aGluZyAqLworCQl9IGVsc2UgeworCQkJaGFsYnRjODE5MmUyYW50X2J0X2F1dG9yZXBvcnQoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLAorCQkJCQkJICAgICAgdHJ1ZSk7CisJCX0KKyNlbmRpZgorCX0KKworCS8qIGNoZWNrIEJJVCgyKSBmaXJzdCA9PT4gY2hlY2sgaWYgYnQgaXMgdW5kZXIgaW5xdWlyeSBvciBwYWdlIHNjYW4gKi8KKwlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODE5MkVfMkFOVF9CX0lOUV9QQUdFKQorCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IHRydWU7CisJZWxzZQorCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IGZhbHNlOworCisJLyogc2V0IGxpbmsgZXhpc3Qgc3RhdHVzICovCisJaWYgKCEoYnRfaW5mbyZCVF9JTkZPXzgxOTJFXzJBTlRfQl9DT05ORUNUSU9OKSkgeworCQljb2V4X3N0YS0+YnRfbGlua19leGlzdCA9IGZhbHNlOworCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5oaWRfZXhpc3QgPSBmYWxzZTsKKwkJY29leF9zdGEtPnNjb19leGlzdCA9IGZhbHNlOworCX0gZWxzZSB7LyogY29ubmVjdGlvbiBleGlzdHMgKi8KKwkJY29leF9zdGEtPmJ0X2xpbmtfZXhpc3QgPSB0cnVlOworCQlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODE5MkVfMkFOVF9CX0ZUUCkKKwkJCWNvZXhfc3RhLT5wYW5fZXhpc3QgPSB0cnVlOworCQllbHNlCisJCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCWlmIChidF9pbmZvICYgQlRfSU5GT184MTkyRV8yQU5UX0JfQTJEUCkKKwkJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJY29leF9zdGEtPmEyZHBfZXhpc3QgPSBmYWxzZTsKKwkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzgxOTJFXzJBTlRfQl9ISUQpCisJCQljb2V4X3N0YS0+aGlkX2V4aXN0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IGZhbHNlOworCQlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODE5MkVfMkFOVF9CX1NDT19FU0NPKQorCQkJY29leF9zdGEtPnNjb19leGlzdCA9IHRydWU7CisJCWVsc2UKKwkJCWNvZXhfc3RhLT5zY29fZXhpc3QgPSBmYWxzZTsKKwl9CisKKwloYWxidGM4MTkyZTJhbnRfdXBkYXRlX2J0bGlua19pbmZvKGJ0Y29leGlzdCk7CisKKwlpZiAoIShidF9pbmZvJkJUX0lORk9fODE5MkVfMkFOVF9CX0NPTk5FQ1RJT04pKSB7CisJCWNvZXhfZG0tPmJ0X3N0YXR1cyA9IEJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX05PTl9DT05ORUNURURfSURMRTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIEJUIE5vbi1Db25uZWN0ZWQgaWRsZSEhIVxuIik7CisJfSBlbHNlIGlmIChidF9pbmZvID09IEJUX0lORk9fODE5MkVfMkFOVF9CX0NPTk5FQ1RJT04pIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEU7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBidF9pbmZvTm90aWZ5KCksIEJUIENvbm5lY3RlZC1pZGxlISEhXG4iKTsKKwl9IGVsc2UgaWYgKChidF9pbmZvJkJUX0lORk9fODE5MkVfMkFOVF9CX1NDT19FU0NPKSB8fAorCQkgICAoYnRfaW5mbyZCVF9JTkZPXzgxOTJFXzJBTlRfQl9TQ09fQlVTWSkpIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfU0NPX0JVU1k7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBidF9pbmZvTm90aWZ5KCksIEJUIFNDTyBidXN5ISEhXG4iKTsKKwl9IGVsc2UgaWYgKGJ0X2luZm8mQlRfSU5GT184MTkyRV8yQU5UX0JfQUNMX0JVU1kpIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfQUNMX0JVU1k7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBidF9pbmZvTm90aWZ5KCksIEJUIEFDTCBidXN5ISEhXG4iKTsKKwl9IGVsc2UgeworCQljb2V4X2RtLT5idF9zdGF0dXMgPSBCVF84MTkyRV8yQU5UX0JUX1NUQVRVU19NQVg7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdYnRfaW5mb05vdGlmeSgpLCBCVCBOb24tRGVmaW5lZCBzdGF0ZSEhIVxuIik7CisJfQorCisJaWYgKChCVF84MTkyRV8yQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84MTkyRV8yQU5UX0JUX1NUQVRVU19TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84MTkyRV8yQU5UX0JUX1NUQVRVU19BQ0xfU0NPX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQlidF9idXN5ID0gdHJ1ZTsKKwkJbGltaXRlZF9kaWcgPSB0cnVlOworCX0gZWxzZSB7CisJCWJ0X2J1c3kgPSBmYWxzZTsKKwkJbGltaXRlZF9kaWcgPSBmYWxzZTsKKwl9CisKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX1RSQUZGSUNfQlVTWSwgJmJ0X2J1c3kpOworCisJY29leF9kbS0+bGltaXRlZF9kaWcgPSBsaW1pdGVkX2RpZzsKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX0xJTUlURURfRElHLCAmbGltaXRlZF9kaWcpOworCisJaGFsYnRjODE5MmUyYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShidGNvZXhpc3QpOworfQorCit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9zdGFja19vcGVyYXRpb25fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICAgdTggdHlwZSkKK3sKK30KKwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfaGFsdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwgIltCVENvZXhdLCBIYWx0IG5vdGlmeVxuIik7CisKKwloYWxidGM4MTkyZTJhbnRfaWdub3Jld2xhbmFjdChidGNvZXhpc3QsIEZPUkNFX0VYRUMsIHRydWUpOworCWV4X2hhbGJ0YzgxOTJlMmFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KGJ0Y29leGlzdCwgQlRDX01FRElBX0RJU0NPTk5FQ1QpOworfQorCit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9wZXJpb2RpY2FsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0YXRpYyB1OCBkaXNfdmVyX2luZm9fY250OworCXUzMiBmd192ZXIgPSAwLCBidF9wYXRjaF92ZXIgPSAwOworCXN0cnVjdCBidGNfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICZidGNvZXhpc3QtPmJvYXJkX2luZm87CisJc3RydWN0IGJ0Y19zdGFja19pbmZvICpzdGFja19pbmZvID0gJmJ0Y29leGlzdC0+c3RhY2tfaW5mbzsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJICAiPT09PT09PT09PT09PT09PT09PT09PT0gUGVyaW9kaWNhbCA9PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJaWYgKGRpc192ZXJfaW5mb19jbnQgPD0gNSkgeworCQlkaXNfdmVyX2luZm9fY250ICs9IDE7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJBbnQgUEcgTnVtLyBBbnQgTWVjaC8gQW50IFBvcyA9ICVkLyAlZC8gJWRcbiIsCisJCQkgIGJvYXJkX2luZm8tPnBnX2FudF9udW0sIGJvYXJkX2luZm8tPmJ0ZG1fYW50X251bSwKKwkJCSAgYm9hcmRfaW5mby0+YnRkbV9hbnRfcG9zKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJCVCBzdGFjay8gaGNpIGV4dCB2ZXIgPSAlcyAvICVkXG4iLAorCQkJICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJCSAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X0JUX1BBVENIX1ZFUiwKKwkJCQkgICAmYnRfcGF0Y2hfdmVyKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0ZXX1ZFUiwgJmZ3X3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiQ29leFZlci8gRndWZXIvIFBhdGNoVmVyID0gJWRfJXgvIDB4JXgvIDB4JXgoJWQpXG4iLAorCQkJICBnbGNvZXhfdmVyX2RhdGVfODE5MmVfMmFudCwgZ2xjb2V4X3Zlcl84MTkyZV8yYW50LAorCQkJICBmd192ZXIsIGJ0X3BhdGNoX3ZlciwgYnRfcGF0Y2hfdmVyKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCX0KKworI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzgxOTJFXzJBTlQgPT0gMCkKKwloYWxidGM4MTkyZTJhbnRfcXVlcnlidF9pbmZvKGJ0Y29leGlzdCk7CisJaGFsYnRjODE5MmUyYW50X21vbml0b3JfYnRfY3RyKGJ0Y29leGlzdCk7CisJaGFsYnRjX21vbml0b3JfYnRfZW5hYmxlX2Rpc2FibGUoYnRjb2V4aXN0KTsKKyNlbHNlCisJaWYgKGhhbGJ0YzgxOTJlMmFudF9pc3dpZmlfc3RhdHVzX2NoYW5nZWQoYnRjb2V4aXN0KSB8fAorCSAgICBjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KQorCQloYWxidGM4MTkyZTJhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKGJ0Y29leGlzdCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODE5MmUyYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlM2UxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5oCkBAIC0wLDAgKzEsMTYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgVGhlIGZvbGxvd2luZyBpcyBmb3IgODE5MkUgMkFudCBCVCBDby1leGlzdCBkZWZpbml0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCUJUX0FVVE9fUkVQT1JUX09OTFlfODE5MkVfMkFOVAkJCTAKKworI2RlZmluZQlCVF9JTkZPXzgxOTJFXzJBTlRfQl9GVFAJCQlCSVQoNykKKyNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfQTJEUAkJCUJJVCg2KQorI2RlZmluZQlCVF9JTkZPXzgxOTJFXzJBTlRfQl9ISUQJCQlCSVQoNSkKKyNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfU0NPX0JVU1kJCQlCSVQoNCkKKyNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfQUNMX0JVU1kJCQlCSVQoMykKKyNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfSU5RX1BBR0UJCQlCSVQoMikKKyNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfU0NPX0VTQ08JCQlCSVQoMSkKKyNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfQ09OTkVDVElPTgkJCUJJVCgwKQorCisjZGVmaW5lIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84MTkyRV8yQU5UCQkyCisKK2VudW0gYnRfaW5mb19zcmNfODE5MmVfMmFudCB7CisJQlRfSU5GT19TUkNfODE5MkVfMkFOVF9XSUZJX0ZXCQkJPSAweDAsCisJQlRfSU5GT19TUkNfODE5MkVfMkFOVF9CVF9SU1AJCQk9IDB4MSwKKwlCVF9JTkZPX1NSQ184MTkyRV8yQU5UX0JUX0FDVElWRV9TRU5ECQk9IDB4MiwKKwlCVF9JTkZPX1NSQ184MTkyRV8yQU5UX01BWAorfTsKKworZW51bSBidF84MTkyZV8yYW50X2J0X3N0YXR1cyB7CisJQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFCT0gMHgwLAorCUJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFCQk9IDB4MSwKKwlCVF84MTkyRV8yQU5UX0JUX1NUQVRVU19JTlFfUEFHRQkJPSAweDIsCisJQlRfODE5MkVfMkFOVF9CVF9TVEFUVVNfQUNMX0JVU1kJCT0gMHgzLAorCUJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX1NDT19CVVNZCQk9IDB4NCwKKwlCVF84MTkyRV8yQU5UX0JUX1NUQVRVU19BQ0xfU0NPX0JVU1kJCT0gMHg1LAorCUJUXzgxOTJFXzJBTlRfQlRfU1RBVFVTX01BWAorfTsKKworZW51bSBidF84MTkyZV8yYW50X2NvZXhfYWxnbyB7CisJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fVU5ERUZJTkVECQk9IDB4MCwKKwlCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19TQ08JCQk9IDB4MSwKKwlCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19TQ09fUEFOCQkJPSAweDIsCisJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElECQkJPSAweDMsCisJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fQTJEUAkJCT0gMHg0LAorCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX0EyRFBfUEFOSFMJCT0gMHg1LAorCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkVEUgkJCT0gMHg2LAorCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkhTCQkJPSAweDcsCisJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fUEFORURSX0EyRFAJCT0gMHg4LAorCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQJCT0gMHg5LAorCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX0hJRF9BMkRQX1BBTkVEUgkJPSAweGEsCisJQlRfODE5MkVfMkFOVF9DT0VYX0FMR09fSElEX0EyRFAJCT0gMHhiLAorCUJUXzgxOTJFXzJBTlRfQ09FWF9BTEdPX01BWAkJCT0gMHhjCit9OworCitzdHJ1Y3QgY29leF9kbV84MTkyZV8yYW50IHsKKwkvKiBmdyBtZWNoYW5pc20gKi8KKwl1OCBwcmVfZGVjX2J0X3B3cjsKKwl1OCBjdXJfZGVjX2J0X3B3cjsKKwl1OCBwcmVfZndfZGFjX3N3aW5nX2x2bDsKKwl1OCBjdXJfZndfZGFjX3N3aW5nX2x2bDsKKwlib29sIGN1cl9pZ25vcmVfd2xhbl9hY3Q7CisJYm9vbCBwcmVfaWdub3JlX3dsYW5fYWN0OworCXU4IHByZV9wc190ZG1hOworCXU4IGN1cl9wc190ZG1hOworCXU4IHBzX3RkbWFfcGFyYVs1XTsKKwl1OCBwc190ZG1hX2R1X2Fkal90eXBlOworCWJvb2wgcmVzZXRfdGRtYV9hZGp1c3Q7CisJYm9vbCBhdXRvX3RkbWFfYWRqdXN0OworCWJvb2wgcHJlX3BzX3RkbWFfb247CisJYm9vbCBjdXJfcHNfdGRtYV9vbjsKKwlib29sIHByZV9idF9hdXRvX3JlcG9ydDsKKwlib29sIGN1cl9idF9hdXRvX3JlcG9ydDsKKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJvb2wgcHJlX3JmX3J4X2xwZl9zaHJpbms7CisJYm9vbCBjdXJfcmZfcnhfbHBmX3NocmluazsKKwl1MzIgYnRfcmYweDFlX2JhY2t1cDsKKwlib29sIHByZV9sb3dfcGVuYWx0eV9yYTsKKwlib29sIGN1cl9sb3dfcGVuYWx0eV9yYTsKKwlib29sIHByZV9kYWNfc3dpbmdfb247CisJdTMyIHByZV9kYWNfc3dpbmdfbHZsOworCWJvb2wgY3VyX2RhY19zd2luZ19vbjsKKwl1MzIgY3VyX2RhY19zd2luZ19sdmw7CisJYm9vbCBwcmVfYWRjX2JhY2tfb2ZmOworCWJvb2wgY3VyX2FkY19iYWNrX29mZjsKKwlib29sIHByZV9hZ2NfdGFibGVfZW47CisJYm9vbCBjdXJfYWdjX3RhYmxlX2VuOworCXUzMiBwcmVfdmFsMHg2YzA7CisJdTMyIGN1cl92YWwweDZjMDsKKwl1MzIgcHJlX3ZhbDB4NmM0OworCXUzMiBjdXJfdmFsMHg2YzQ7CisJdTMyIHByZV92YWwweDZjODsKKwl1MzIgY3VyX3ZhbDB4NmM4OworCXU4IHByZV92YWwweDZjYzsKKwl1OCBjdXJfdmFsMHg2Y2M7CisJYm9vbCBsaW1pdGVkX2RpZzsKKworCXUzMiBiYWNrdXBfYXJmcl9jbnQxOwkvKiBBdXRvIFJhdGUgRmFsbGJhY2sgUmV0cnkgY250ICovCisJdTMyIGJhY2t1cF9hcmZyX2NudDI7CS8qIEF1dG8gUmF0ZSBGYWxsYmFjayBSZXRyeSBjbnQgKi8KKwl1MTYgYmFja3VwX3JldHJ5bGltaXQ7CisJdTggYmFja3VwX2FtcGR1X21heHRpbWU7CisKKwkvKiBhbGdvcml0aG0gcmVsYXRlZCAqLworCXU4IHByZV9hbGdvcml0aG07CisJdTggY3VyX2FsZ29yaXRobTsKKwl1OCBidF9zdGF0dXM7CisJdTggd2lmaV9jaG5sX2luZm9bM107CisKKwl1OCBwcmVfc3N0eXBlOworCXU4IGN1cl9zc3R5cGU7CisKKwl1MzIgcHJlcmFfbWFzazsKKwl1MzIgY3VycmFfbWFzazsKKwl1OCBjdXJyYV9tYXNrdHlwZTsKKwl1OCBwcmVfYXJmcnR5cGU7CisJdTggY3VyX2FyZnJ0eXBlOworCXU4IHByZV9yZXRyeWxpbWl0X3R5cGU7CisJdTggY3VyX3JldHJ5bGltaXRfdHlwZTsKKwl1OCBwcmVfYW1wZHV0aW1lX3R5cGU7CisJdTggY3VyX2FtcGR1dGltZV90eXBlOworfTsKKworc3RydWN0IGNvZXhfc3RhXzgxOTJlXzJhbnQgeworCWJvb2wgYnRfbGlua19leGlzdDsKKwlib29sIHNjb19leGlzdDsKKwlib29sIGEyZHBfZXhpc3Q7CisJYm9vbCBoaWRfZXhpc3Q7CisJYm9vbCBwYW5fZXhpc3Q7CisKKwlib29sIHVuZGVyX2xwczsKKwlib29sIHVuZGVyX2lwczsKKwl1MzIgaGlnaF9wcmlvcml0eV90eDsKKwl1MzIgaGlnaF9wcmlvcml0eV9yeDsKKwl1MzIgbG93X3ByaW9yaXR5X3R4OworCXUzMiBsb3dfcHJpb3JpdHlfcng7CisJdTggYnRfcnNzaTsKKwl1OCBwcmVfYnRfcnNzaV9zdGF0ZTsKKwl1OCBwcmVfd2lmaV9yc3NpX3N0YXRlWzRdOworCWJvb2wgYzJoX2J0X2luZm9fcmVxX3NlbnQ7CisJdTggYnRfaW5mb19jMmhbQlRfSU5GT19TUkNfODE5MkVfMkFOVF9NQVhdWzEwXTsKKwl1MzIgYnRfaW5mb19jMmhfY250W0JUX0lORk9fU1JDXzgxOTJFXzJBTlRfTUFYXTsKKwlib29sIGMyaF9idF9pbnF1aXJ5X3BhZ2U7CisJdTggYnRfcmV0cnlfY250OworCXU4IGJ0X2luZm9fZXh0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgIFRoZSBmb2xsb3dpbmcgaXMgaW50ZXJmYWNlIHdoaWNoIHdpbGwgbm90aWZ5IGNvZXggbW9kdWxlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9pbml0X2h3Y29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhfaGFsYnRjODE5MmUyYW50X2luaXRfY29leF9kbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9pcHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODE5MmUyYW50X2xwc19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfc2Nhbl9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfY29ubmVjdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgIHU4IHR5cGUpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODE5MmUyYW50X2J0X2luZm9fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgICB1OCAqdG1wYnVmLCB1OCBsZW5ndGgpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfc3RhY2tfb3BlcmF0aW9uX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgIHU4IHR5cGUpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfaGFsdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleF9oYWxidGM4MTkyZTJhbnRfcGVyaW9kaWNhbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9kaXNwbGF5X2NvZXhfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMWFudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzA0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuYwpAQCAtMCwwICsxLDMxNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFRoaXMgZmlsZSBpcyBmb3IgUlRMODcyM0IgQ28tZXhpc3QgbWVjaGFuaXNtCisgKgorICogSGlzdG9yeQorICogMjAxMi8xMS8xNSBDb3NhIGZpcnN0IGNoZWNrIGluLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluY2x1ZGUgZmlsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaGFsYnRfcHJlY29tcC5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2xvYmFsIHZhcmlhYmxlcywgdGhlc2UgYXJlIHN0YXRpYyB2YXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGNvZXhfZG1fODcyM2JfMWFudCBnbGNvZXhfZG1fODcyM2JfMWFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9kbV84NzIzYl8xYW50ICpjb2V4X2RtID0gJmdsY29leF9kbV84NzIzYl8xYW50Oworc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84NzIzYl8xYW50IGdsY29leF9zdGFfODcyM2JfMWFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9zdGFfODcyM2JfMWFudCAqY29leF9zdGEgPSAmZ2xjb2V4X3N0YV84NzIzYl8xYW50OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZ2xiX2luZm9zcmM4NzIzYjFhbnRbXSA9IHsKKwkiQlQgSW5mb1t3aWZpIGZ3XSIsCisJIkJUIEluZm9bYnQgcnNwXSIsCisJIkJUIEluZm9bYnQgYXV0byByZXBvcnRdIiwKK307CisKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl9kYXRlXzg3MjNiXzFhbnQgPSAyMDEzMDkxODsKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl84NzIzYl8xYW50ID0gMHg0NzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbG9jYWwgZnVuY3Rpb24gcHJvdG8gdHlwZSBpZiBuZWVkZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsb2NhbCBmdW5jdGlvbiBzdGFydCB3aXRoIGhhbGJ0Yzg3MjNiMWFudF8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdTggaGFsYnRjODcyM2IxYW50X2J0X3Jzc2lfc3RhdGUodTggbGV2ZWxfbnVtLCB1OCByc3NpX3RocmVzaCwKKwkJCQkJdTggcnNzaV90aHJlc2gxKQoreworCXMzMiBidF9yc3NpID0gMDsKKwl1OCByc3NpX3N0YXRlID0gY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlOworCisJYnRfcnNzaSA9IGNvZXhfc3RhLT5idF9yc3NpOworCisJaWYgKGxldmVsX251bSA9PSAyKSB7CisJCWlmICgoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlpZiAoYnRfcnNzaSA+PSByc3NpX3RocmVzaCArCisJCQkJCUJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84NzIzQl8xQU5UKSB7CisJCQkJcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBIaWdoXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfcnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIExvd1xuIik7CisJCQl9IGVsc2UgeworCQkJCXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGxldmVsX251bSA9PSAzKSB7CisJCWlmIChyc3NpX3RocmVzaCA+IHJzc2lfdGhyZXNoMSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgdGhyZXNoIGVycm9yISFcbiIpOworCQkJcmV0dXJuIGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZTsKKwkJfQorCisJCWlmICgoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlpZiAoYnRfcnNzaSA+PSByc3NpX3RocmVzaCArCisJCQkJCUJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84NzIzQl8xQU5UKSB7CisJCQkJcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIE1lZGl1bVxuIik7CisJCQl9IGVsc2UgeworCQkJCXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3RheSBhdCBMb3dcbiIpOworCQkJfQorCQl9IGVsc2UgaWYgKChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0KKwkJCQkJQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkJICAoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09CisJCQkJCUJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgeworCQkJaWYgKGJ0X3Jzc2kgPj0gcnNzaV90aHJlc2gxICsKKwkJCQkJQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg3MjNCXzFBTlQpIHsKKwkJCQlyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIGlmIChidF9yc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQlyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gTG93XG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IE1lZGl1bVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfcnNzaSA8IHJzc2lfdGhyZXNoMSkgeworCQkJCXJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBNZWRpdW1cbiIpOworCQkJfSBlbHNlIHsKKwkJCQlyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IEhpZ2hcbiIpOworCQkJfQorCQl9CisJfQorCisJY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID0gcnNzaV9zdGF0ZTsKKworCXJldHVybiByc3NpX3N0YXRlOworfQorCitzdGF0aWMgdTggaGFsYnRjODcyM2IxYW50X3dpZmlfcnNzaV9zdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICB1OCBpbmRleCwgdTggbGV2ZWxfbnVtLAorCQkJCQkgIHU4IHJzc2lfdGhyZXNoLCB1OCByc3NpX3RocmVzaDEpCit7CisJczMyIHdpZmlfcnNzaSA9IDA7CisJdTggd2lmaV9yc3NpX3N0YXRlID0gY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwKKwkJQlRDX0dFVF9TNF9XSUZJX1JTU0ksICZ3aWZpX3Jzc2kpOworCisJaWYgKGxldmVsX251bSA9PSAyKSB7CisJCWlmICgoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCQkJCUJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJCQkJQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlpZiAod2lmaV9yc3NpID49IHJzc2lfdGhyZXNoICsKKwkJCQkJQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg3MjNCXzFBTlQpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2lmaV9yc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGxldmVsX251bSA9PSAzKSB7CisJCWlmIChyc3NpX3RocmVzaCA+IHJzc2lfdGhyZXNoMSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHRocmVzaCBlcnJvciEhXG4iKTsKKwkJCXJldHVybiBjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF07CisJCX0KKworCQlpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJCQkJQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJCQkJQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlpZiAod2lmaV9yc3NpID49IHJzc2lfdGhyZXNoICsKKwkJCQkJIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84NzIzQl8xQU5UKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmICgoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCQkJCQlCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8CisJCQkgICAoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCQkJCQlCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJCWlmICh3aWZpX3Jzc2kgPj0gcnNzaV90aHJlc2gxICsKKwkJCQkJIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84NzIzQl8xQU5UKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIGlmICh3aWZpX3Jzc2kgPCByc3NpX3RocmVzaCkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIExvd1xuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IE1lZGl1bVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2lmaV9yc3NpIDwgcnNzaV90aHJlc2gxKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IEhpZ2hcbiIpOworCQkJfQorCQl9CisJfQorCisJY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID0gd2lmaV9yc3NpX3N0YXRlOworCisJcmV0dXJuIHdpZmlfcnNzaV9zdGF0ZTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3VwZGF0ZXJhX21hc2soc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgYm9vbCBmb3JjZV9leGVjLCB1MzIgZGlzX3JhdGVfbWFzaykKK3sKKwljb2V4X2RtLT5jdXJyYV9tYXNrID0gZGlzX3JhdGVfbWFzazsKKworCWlmIChmb3JjZV9leGVjIHx8IChjb2V4X2RtLT5wcmVyYV9tYXNrICE9IGNvZXhfZG0tPmN1cnJhX21hc2spKQorCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9VUERBVEVfcmFfbWFzaywKKwkJCQkgICAmY29leF9kbS0+Y3VycmFfbWFzayk7CisKKwljb2V4X2RtLT5wcmVyYV9tYXNrID0gY29leF9kbS0+Y3VycmFfbWFzazsKK30KKworc3RhdGljIHZvaWQgYXV0b19yYXRlX2ZhbGxiYWNrX3JldHJ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgYm9vbCBmb3JjZV9leGVjLCB1OCB0eXBlKQoreworCWJvb2wgd2lmaV91bmRlcl9ibW9kZSA9IGZhbHNlOworCisJY29leF9kbS0+Y3VyX2FyZnJfdHlwZSA9IHR5cGU7CisKKwlpZiAoZm9yY2VfZXhlYyB8fCAoY29leF9kbS0+cHJlX2FyZnJfdHlwZSAhPSBjb2V4X2RtLT5jdXJfYXJmcl90eXBlKSkgeworCQlzd2l0Y2ggKGNvZXhfZG0tPmN1cl9hcmZyX3R5cGUpIHsKKwkJY2FzZSAwOgkvKiBub3JtYWwgbW9kZSAqLworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDQzMCwKKwkJCQkJCSAgIGNvZXhfZG0tPmJhY2t1cF9hcmZyX2NudDEpOworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDQzNCwKKwkJCQkJCSAgIGNvZXhfZG0tPmJhY2t1cF9hcmZyX2NudDIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsCisJCQkJCSAgIEJUQ19HRVRfQkxfV0lGSV9VTkRFUl9CX01PREUsCisJCQkJCSAgICZ3aWZpX3VuZGVyX2Jtb2RlKTsKKwkJCWlmICh3aWZpX3VuZGVyX2Jtb2RlKSB7CisJCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgIDB4NDMwLCAweDApOworCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAweDQzNCwgMHgwMTAxMDEwMSk7CisJCQl9IGVsc2UgeworCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAweDQzMCwgMHgwKTsKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsCisJCQkJCQkJICAgMHg0MzQsIDB4MDQwMzAyMDEpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWNvZXhfZG0tPnByZV9hcmZyX3R5cGUgPSBjb2V4X2RtLT5jdXJfYXJmcl90eXBlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfcmV0cnlfbGltaXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3sKKwljb2V4X2RtLT5jdXJfcmV0cnlfbGltaXRfdHlwZSA9IHR5cGU7CisKKwlpZiAoZm9yY2VfZXhlYyB8fCAoY29leF9kbS0+cHJlX3JldHJ5X2xpbWl0X3R5cGUgIT0KKwkJCSAgIGNvZXhfZG0tPmN1cl9yZXRyeV9saW1pdF90eXBlKSkgeworCQlzd2l0Y2ggKGNvZXhfZG0tPmN1cl9yZXRyeV9saW1pdF90eXBlKSB7CisJCWNhc2UgMDoJLyogbm9ybWFsIG1vZGUgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEsCisJCQkJCQkgICBjb2V4X2RtLT5iYWNrdXBfcmV0cnlfbGltaXQpOworCQkJYnJlYWs7CisJCWNhc2UgMToJLyogcmV0cnkgbGltaXQgPSA4ICovCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4NDJhLCAweDA4MDgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWNvZXhfZG0tPnByZV9yZXRyeV9saW1pdF90eXBlID0gY29leF9kbS0+Y3VyX3JldHJ5X2xpbWl0X3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hbXBkdV9tYXh0aW1lKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3sKKwljb2V4X2RtLT5jdXJfYW1wZHVfdGltZV90eXBlID0gdHlwZTsKKworCWlmIChmb3JjZV9leGVjIHx8IChjb2V4X2RtLT5wcmVfYW1wZHVfdGltZV90eXBlICE9CisJCWNvZXhfZG0tPmN1cl9hbXBkdV90aW1lX3R5cGUpKSB7CisJCXN3aXRjaCAoY29leF9kbS0+Y3VyX2FtcGR1X3RpbWVfdHlwZSkgeworCQljYXNlIDA6CS8qIG5vcm1hbCBtb2RlICovCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NDU2LAorCQkJCQljb2V4X2RtLT5iYWNrdXBfYW1wZHVfbWF4X3RpbWUpOworCQkJYnJlYWs7CisJCWNhc2UgMToJLyogQU1QRFUgdGltdyA9IDB4MzggKiAzMnVzICovCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsCisJCQkJCQkgICAweDQ1NiwgMHgzOCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJY29leF9kbS0+cHJlX2FtcGR1X3RpbWVfdHlwZSA9IGNvZXhfZG0tPmN1cl9hbXBkdV90aW1lX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9saW1pdGVkX3R4KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IHJhX21hc2t0eXBlLAorCQkJCSAgICAgICB1OCBhcmZyX3R5cGUsIHU4IHJldHJ5X2xpbWl0X3R5cGUsCisJCQkJICAgICAgIHU4IGFtcGR1X3RpbWVfdHlwZSkKK3sKKwlzd2l0Y2ggKHJhX21hc2t0eXBlKSB7CisJY2FzZSAwOgkvKiBub3JtYWwgbW9kZSAqLworCQloYWxidGM4NzIzYjFhbnRfdXBkYXRlcmFfbWFzayhidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMToJLyogZGlzYWJsZSBjY2sgMS8yICovCisJCWhhbGJ0Yzg3MjNiMWFudF91cGRhdGVyYV9tYXNrKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywKKwkJCQkJICAgICAgMHgwMDAwMDAwMyk7CisJCWJyZWFrOworCS8qIGRpc2FibGUgY2NrIDEvMi81LjUsIG9mZG0gNi85LzEyLzE4LzI0LCBtY3MgMC8xLzIvMy80Ki8KKwljYXNlIDI6CisJCWhhbGJ0Yzg3MjNiMWFudF91cGRhdGVyYV9tYXNrKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywKKwkJCQkJICAgICAgMHgwMDAxZjFmNyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWF1dG9fcmF0ZV9mYWxsYmFja19yZXRyeShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIGFyZnJfdHlwZSk7CisJaGFsYnRjODcyM2IxYW50X3JldHJ5X2xpbWl0KGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgcmV0cnlfbGltaXRfdHlwZSk7CisJaGFsYnRjODcyM2IxYW50X2FtcGR1X21heHRpbWUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCBhbXBkdV90aW1lX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfbGltaXRlZF9yeChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHJlal9hcF9hZ2dfcGt0LAorCQkJCWJvb2wgYl9idF9jdHJsX2FnZ19idWZfc2l6ZSwgdTggYWdnX2J1Zl9zaXplKQoreworCWJvb2wgcmVqZWN0X3J4X2FnZyA9IHJlal9hcF9hZ2dfcGt0OworCWJvb2wgYnRfY3RybF9yeF9hZ2dfc2l6ZSA9IGJfYnRfY3RybF9hZ2dfYnVmX3NpemU7CisJdTggcnhhZ2dzaXplID0gYWdnX2J1Zl9zaXplOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKglSeCBBZ2dyZWdhdGlvbiByZWxhdGVkIHNldHRpbmcKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX1RPX1JFSl9BUF9BR0dfUEtULAorCQkJICAgJnJlamVjdF9yeF9hZ2cpOworCS8qIGRlY2lkZSBCVCBjb250cm9sIGFnZ3JlZ2F0aW9uIGJ1ZiBzaXplIG9yIG5vdCAgKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX0NUUkxfQUdHX1NJWkUsCisJCQkgICAmYnRfY3RybF9yeF9hZ2dfc2l6ZSk7CisJLyogYWdncmVnYXRpb24gYnVmIHNpemUsIG9ubHkgd29yaworCSAqd2hlbiBCVCBjb250cm9sIFJ4IGFnZ3JlZ2F0aW9uIHNpemUuICAqLworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfVTFfQUdHX0JVRl9TSVpFLCAmcnhhZ2dzaXplKTsKKwkvKiByZWFsIHVwZGF0ZSBhZ2dyZWdhdGlvbiBzZXR0aW5nICAqLworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0FHR1JFR0FURV9DVFJMLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X21vbml0b3JfYnRfY3RyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXUzMiByZWdfaHBfdHhyeCwgcmVnX2xwX3R4cngsIHUzMnRtcDsKKwl1MzIgcmVnX2hwX3R4ID0gMCwgcmVnX2hwX3J4ID0gMDsKKwl1MzIgcmVnX2xwX3R4ID0gMCwgcmVnX2xwX3J4ID0gMDsKKworCXJlZ19ocF90eHJ4ID0gMHg3NzA7CisJcmVnX2xwX3R4cnggPSAweDc3NDsKKworCXUzMnRtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCByZWdfaHBfdHhyeCk7CisJcmVnX2hwX3R4ID0gdTMydG1wICYgTUFTS0xXT1JEOworCXJlZ19ocF9yeCA9ICh1MzJ0bXAgJiBNQVNLSFdPUkQpID4+IDE2OworCisJdTMydG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIHJlZ19scF90eHJ4KTsKKwlyZWdfbHBfdHggPSB1MzJ0bXAgJiBNQVNLTFdPUkQ7CisJcmVnX2xwX3J4ID0gKHUzMnRtcCAmIE1BU0tIV09SRCkgPj4gMTY7CisKKwljb2V4X3N0YS0+aGlnaF9wcmlvcml0eV90eCA9IHJlZ19ocF90eDsKKwljb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCA9IHJlZ19ocF9yeDsKKwljb2V4X3N0YS0+bG93X3ByaW9yaXR5X3R4ID0gcmVnX2xwX3R4OworCWNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfcnggPSByZWdfbHBfcng7CisKKwkvKiByZXNldCBjb3VudGVyICovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHhjKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3F1ZXJ5X2J0X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKKworCWNvZXhfc3RhLT5jMmhfYnRfaW5mb19yZXFfc2VudCA9IHRydWU7CisKKwloMmNfcGFyYW1ldGVyWzBdIHw9IEJJVCgwKTsJLyogdHJpZ2dlciovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIFF1ZXJ5IEJ0IEluZm8sIEZXIHdyaXRlIDB4NjEgPSAweCV4XG4iLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYxLCAxLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIGJvb2wgaXNfd2lmaV9zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdGF0aWMgYm9vbCBwcmVfd2lmaV9idXN5OworCXN0YXRpYyBib29sIHByZV91bmRlcl80d2F5LCBwcmVfYnRfaHNfb247CisJYm9vbCB3aWZpX2J1c3kgPSBmYWxzZSwgdW5kZXJfNHdheSA9IGZhbHNlLCBidF9oc19vbiA9IGZhbHNlOworCWJvb2wgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9DT05ORUNURUQsCisJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9CVVNZLCAmd2lmaV9idXN5KTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfNF9XQVlfUFJPR1JFU1MsCisJCQkgICAmdW5kZXJfNHdheSk7CisKKwlpZiAod2lmaV9jb25uZWN0ZWQpIHsKKwkJaWYgKHdpZmlfYnVzeSAhPSBwcmVfd2lmaV9idXN5KSB7CisJCQlwcmVfd2lmaV9idXN5ID0gd2lmaV9idXN5OworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKHVuZGVyXzR3YXkgIT0gcHJlX3VuZGVyXzR3YXkpIHsKKwkJCXByZV91bmRlcl80d2F5ID0gdW5kZXJfNHdheTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChidF9oc19vbiAhPSBwcmVfYnRfaHNfb24pIHsKKwkJCXByZV9idF9oc19vbiA9IGJ0X2hzX29uOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF91cGRhdGVfYnRfbGlua19pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCBidF9oc19vbiA9IGZhbHNlOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc19vbik7CisKKwlidF9saW5rX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSBjb2V4X3N0YS0+YnRfbGlua19leGlzdDsKKwlidF9saW5rX2luZm8tPnNjb19leGlzdCA9IGNvZXhfc3RhLT5zY29fZXhpc3Q7CisJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ID0gY29leF9zdGEtPmEyZHBfZXhpc3Q7CisJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgPSBjb2V4X3N0YS0+cGFuX2V4aXN0OworCWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ID0gY29leF9zdGEtPmhpZF9leGlzdDsKKworCS8qIHdvcmsgYXJvdW5kIGZvciBIUyBtb2RlLiAqLworCWlmIChidF9oc19vbikgeworCQlidF9saW5rX2luZm8tPnBhbl9leGlzdCA9IHRydWU7CisJCWJ0X2xpbmtfaW5mby0+YnRfbGlua19leGlzdCA9IHRydWU7CisJfQorCisJLyogY2hlY2sgaWYgU2NvIG9ubHkgKi8KKwlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYgIWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCSAgICAhYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYgIWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQlidF9saW5rX2luZm8tPnNjb19vbmx5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2xpbmtfaW5mby0+c2NvX29ubHkgPSBmYWxzZTsKKworCS8qIGNoZWNrIGlmIEEyZHAgb25seSAqLworCWlmICghYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmCisJICAgICFidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJiAhYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+YTJkcF9vbmx5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2xpbmtfaW5mby0+YTJkcF9vbmx5ID0gZmFsc2U7CisKKwkvKiBjaGVjayBpZiBQYW4gb25seSAqLworCWlmICghYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYgIWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCSAgICBidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJiAhYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+cGFuX29ubHkgPSB0cnVlOworCWVsc2UKKwkJYnRfbGlua19pbmZvLT5wYW5fb25seSA9IGZhbHNlOworCisJLyogY2hlY2sgaWYgSGlkIG9ubHkgKi8KKwlpZiAoIWJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0ICYmICFidF9saW5rX2luZm8tPmEyZHBfZXhpc3QgJiYKKwkgICAgIWJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQlidF9saW5rX2luZm8tPmhpZF9vbmx5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2xpbmtfaW5mby0+aGlkX29ubHkgPSBmYWxzZTsKK30KKworc3RhdGljIHU4IGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fYWxnb3JpdGhtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCBidF9oc19vbiA9IGZhbHNlOworCXU4IGFsZ29yaXRobSA9IEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1VOREVGSU5FRDsKKwl1OCBudW1vZmRpZmZwcm9maWxlID0gMDsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCisJaWYgKCFidF9saW5rX2luZm8tPmJ0X2xpbmtfZXhpc3QpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIE5vIEJUIGxpbmsgZXhpc3RzISEhXG4iKTsKKwkJcmV0dXJuIGFsZ29yaXRobTsKKwl9CisKKwlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpCisJCW51bW9mZGlmZnByb2ZpbGUrKzsKKwlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCW51bW9mZGlmZnByb2ZpbGUrKzsKKwlpZiAoYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpCisJCW51bW9mZGlmZnByb2ZpbGUrKzsKKwlpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KQorCQludW1vZmRpZmZwcm9maWxlKys7CisKKwlpZiAobnVtb2ZkaWZmcHJvZmlsZSA9PSAxKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gU0NPIG9ubHlcbiIpOworCQkJYWxnb3JpdGhtID0gQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fU0NPOworCQl9IGVsc2UgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IEhJRCBvbmx5XG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISUQ7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBBMkRQIG9ubHlcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX0EyRFA7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gUEFOKEhTKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJCUJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1BBTkhTOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gUEFOKEVEUikgb25seVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCQlCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19QQU5FRFI7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChudW1vZmRpZmZwcm9maWxlID09IDIpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gU0NPICsgSElEXG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISUQ7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBBMkRQID09PiBTQ09cbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1NDTzsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fU0NPOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gU0NPICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gSElEICsgQTJEUFxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBISUQgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJICAgIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX0hJRF9BMkRQOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gSElEICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJCQkJICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBCVCBQcm9maWxlID0gQTJEUCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fQTJEUF9QQU5IUzsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IEEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19QQU5FRFJfQTJEUDsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG51bW9mZGlmZnByb2ZpbGUgPT0gMykgeworCQlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCAmJgorCQkJICAgIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBISUQgKyBBMkRQID09PiBISURcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCQkgICBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IFNDTyArIEhJRCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBISUQgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJCQkgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1NDTzsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IFNDTyArIEEyRFAgKyBQQU4oRURSKSA9PT4gSElEXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJICAgIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkgICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBISUQgKyBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISURfQTJEUDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IEhJRCArIEEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISURfQTJEUF9QQU5FRFI7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChudW1vZmRpZmZwcm9maWxlID49IDMpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCQkJICAgIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgRXJyb3IhISEgQlQgUHJvZmlsZSA9IFNDTyArIEhJRCArIEEyRFAgKyBQQU4oSFMpXG4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IFNDTyArIEhJRCArIEEyRFAgKyBQQU4oRURSKSA9PT5QQU4oRURSKStISURcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gYWxnb3JpdGhtOworfQorCitzdGF0aWMgdm9pZCBzZXRfc3dfcGVuYWx0eV90eF9yYXRlX2FkYXB0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgYm9vbCBsb3dfcGVuYWx0eV9yYSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzZdID0gezB9OworCisJaDJjX3BhcmFtZXRlclswXSA9IDB4NjsJLyogb3BDb2RlLCAweDYgPSBSZXRyeV9QZW5hbHR5ICovCisKKwlpZiAobG93X3BlbmFsdHlfcmEpIHsKKwkJaDJjX3BhcmFtZXRlclsxXSB8PSBCSVQoMCk7CisJCS8qbm9ybWFsIHJhdGUgZXhjZXB0IE1DUzcvNi81LCBPRkRNNTQvNDgvMzYgKi8KKwkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MDA7CisJCWgyY19wYXJhbWV0ZXJbM10gPSAweGY3OyAgLypNQ1M3IG9yIE9GRE01NCAqLworCQloMmNfcGFyYW1ldGVyWzRdID0gMHhmODsgIC8qTUNTNiBvciBPRkRNNDggKi8KKwkJaDJjX3BhcmFtZXRlcls1XSA9IDB4Zjk7ICAvKk1DUzUgb3IgT0ZETTM2ICovCisJfQorCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgV2lGaSBMb3ctUGVuYWx0eSBSZXRyeTogJXMiLAorCQkgIChsb3dfcGVuYWx0eV9yYSA/ICJPTiEhIiA6ICJPRkYhISIpKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2OSwgNiwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9sb3dfcGVuYWx0eV9yYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGxvd19wZW5hbHR5X3JhKQoreworCWNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSA9IGxvd19wZW5hbHR5X3JhOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCWlmIChjb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEgPT0gY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKQorCQkJcmV0dXJuOworCX0KKwlzZXRfc3dfcGVuYWx0eV90eF9yYXRlX2FkYXB0KGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKTsKKworCWNvZXhfZG0tPnByZV9sb3dfcGVuYWx0eV9yYSA9IGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICB1MzIgdmFsMHg2YzAsIHUzMiB2YWwweDZjNCwKKwkJCQkJICAgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzAgPSAweCV4XG4iLCB2YWwweDZjMCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDZjMCwgdmFsMHg2YzApOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgY29leCB0YWJsZSwgc2V0IDB4NmM0ID0gMHgleFxuIiwgdmFsMHg2YzQpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg2YzQsIHZhbDB4NmM0KTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IGNvZXggdGFibGUsIHNldCAweDZjOCA9IDB4JXhcbiIsIHZhbDB4NmM4KTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NmM4LCB2YWwweDZjOCk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2Y2MgPSAweCV4XG4iLCB2YWwweDZjYyk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDZjYywgdmFsMHg2Y2MpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCB1MzIgdmFsMHg2YzAsCisJCQkJICAgICAgIHUzMiB2YWwweDZjNCwgdTMyIHZhbDB4NmM4LAorCQkJCSAgICAgICB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCisJCSAgIltCVENvZXhdLCAlcyB3cml0ZSBDb2V4IFRhYmxlIDB4NmMwID0gMHgleCwgMHg2YzQgPSAweCV4LCAweDZjYyA9IDB4JXhcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgIHZhbDB4NmMwLCB2YWwweDZjNCwgdmFsMHg2Y2MpOworCWNvZXhfZG0tPmN1cl92YWwweDZjMCA9IHZhbDB4NmMwOworCWNvZXhfZG0tPmN1cl92YWwweDZjNCA9IHZhbDB4NmM0OworCWNvZXhfZG0tPmN1cl92YWwweDZjOCA9IHZhbDB4NmM4OworCWNvZXhfZG0tPmN1cl92YWwweDZjYyA9IHZhbDB4NmNjOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCWlmICgoY29leF9kbS0+cHJlX3ZhbDB4NmMwID09IGNvZXhfZG0tPmN1cl92YWwweDZjMCkgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfdmFsMHg2YzQgPT0gY29leF9kbS0+Y3VyX3ZhbDB4NmM0KSAmJgorCQkgICAgKGNvZXhfZG0tPnByZV92YWwweDZjOCA9PSBjb2V4X2RtLT5jdXJfdmFsMHg2YzgpICYmCisJCSAgICAoY29leF9kbS0+cHJlX3ZhbDB4NmNjID09IGNvZXhfZG0tPmN1cl92YWwweDZjYykpCisJCQlyZXR1cm47CisJfQorCWhhbGJ0Yzg3MjNiMWFudF9zZXRfY29leF90YWJsZShidGNvZXhpc3QsIHZhbDB4NmMwLCB2YWwweDZjNCwKKwkJCQkgICAgICAgdmFsMHg2YzgsIHZhbDB4NmNjKTsKKworCWNvZXhfZG0tPnByZV92YWwweDZjMCA9IGNvZXhfZG0tPmN1cl92YWwweDZjMDsKKwljb2V4X2RtLT5wcmVfdmFsMHg2YzQgPSBjb2V4X2RtLT5jdXJfdmFsMHg2YzQ7CisJY29leF9kbS0+cHJlX3ZhbDB4NmM4ID0gY29leF9kbS0+Y3VyX3ZhbDB4NmM4OworCWNvZXhfZG0tPnByZV92YWwweDZjYyA9IGNvZXhfZG0tPmN1cl92YWwweDZjYzsKK30KKworc3RhdGljIHZvaWQgY29leF90YWJsZV93aXRoX3R5cGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDA6CisJCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkJICAgMHg1NTU1NTU1NSwgMHhmZmZmZmYsIDB4Myk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaGFsYnRjODcyM2IxYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweDU1NTU1NTU1LAorCQkJCQkgICAweDVhNWE1YTVhLCAweGZmZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQloYWxidGM4NzIzYjFhbnRfY29leF90YWJsZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIDB4NWE1YTVhNWEsCisJCQkJCSAgIDB4NWE1YTVhNWEsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDM6CisJCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkJICAgMHhhYWFhYWFhYSwgMHhmZmZmZmYsIDB4Myk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaGFsYnRjODcyM2IxYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweDU1NTU1NTU1LAorCQkJCQkgICAweDVhYWE1YWFhLCAweGZmZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQloYWxidGM4NzIzYjFhbnRfY29leF90YWJsZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIDB4NWE1YTVhNWEsCisJCQkJCSAgIDB4YWFhYTVhNWEsIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDY6CisJCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkJICAgMHhhYWFhNWE1YSwgMHhmZmZmZmYsIDB4Myk7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJaGFsYnRjODcyM2IxYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweGFhYWFhYWFhLAorCQkJCQkgICAweGFhYWFhYWFhLCAweGZmZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfZndfaWdub3JlX3dsYW5fYWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgIGJvb2wgZW5hYmxlKQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwlpZiAoZW5hYmxlKQorCQloMmNfcGFyYW1ldGVyWzBdIHw9IEJJVCgwKTsJLyogZnVuY3Rpb24gZW5hYmxlICovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBGVyBmb3IgQlQgSWdub3JlIFdsYW5fQWN0LCBGVyB3cml0ZSAweDYzID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MywgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9pZ25vcmVfd2xhbl9hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gSWdub3JlIFdsYW5BY3QgJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoZW5hYmxlID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCA9IGVuYWJsZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVJZ25vcmVXbGFuQWN0ID0gJWQsIGJDdXJJZ25vcmVXbGFuQWN0ID0gJWQhIVxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCwKKwkJCSAgY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9pZ25vcmVfd2xhbl9hY3QgPT0KKwkJICAgIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpCisJCQlyZXR1cm47CisJfQorCXNldF9md19pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LCBlbmFibGUpOworCisJY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCA9IGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3Q7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgdTggYnl0ZTEsIHU4IGJ5dGUyLCB1OCBieXRlMywKKwkJCQkJICAgdTggYnl0ZTQsIHU4IGJ5dGU1KQoreworCXU4IGgyY19wYXJhbWV0ZXJbNV0gPSB7MH07CisJdTggcmVhbF9ieXRlMSA9IGJ5dGUxLCByZWFsX2J5dGU1ID0gYnl0ZTU7CisJYm9vbCBhcF9lbmFibGUgPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9BUF9NT0RFX0VOQUJMRSwKKwkJCSAgICZhcF9lbmFibGUpOworCisJaWYgKGFwX2VuYWJsZSkgeworCQlpZiAoKGJ5dGUxICYgQklUKDQpKSAmJiAhKGJ5dGUxICYgQklUKDUpKSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCQkgICJbQlRDb2V4XSwgRlcgZm9yIDFBbnQgQVAgbW9kZVxuIik7CisJCQlyZWFsX2J5dGUxICY9IH5CSVQoNCk7CisJCQlyZWFsX2J5dGUxIHw9IEJJVCg1KTsKKworCQkJcmVhbF9ieXRlNSB8PSBCSVQoNSk7CisJCQlyZWFsX2J5dGU1ICY9IH5CSVQoNik7CisJCX0KKwl9CisKKwloMmNfcGFyYW1ldGVyWzBdID0gcmVhbF9ieXRlMTsKKwloMmNfcGFyYW1ldGVyWzFdID0gYnl0ZTI7CisJaDJjX3BhcmFtZXRlclsyXSA9IGJ5dGUzOworCWgyY19wYXJhbWV0ZXJbM10gPSBieXRlNDsKKwloMmNfcGFyYW1ldGVyWzRdID0gcmVhbF9ieXRlNTsKKworCWNvZXhfZG0tPnBzX3RkbWFfcGFyYVswXSA9IHJlYWxfYnl0ZTE7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzFdID0gYnl0ZTI7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzJdID0gYnl0ZTM7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzNdID0gYnl0ZTQ7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzRdID0gcmVhbF9ieXRlNTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19FWEVDLAorCQkgICJbQlRDb2V4XSwgUFMtVERNQSBIMkMgY21kID0gMHgleCUwOHhcbiIsCisJCSAgaDJjX3BhcmFtZXRlclswXSwKKwkJICBoMmNfcGFyYW1ldGVyWzFdIDw8IDI0IHwKKwkJICBoMmNfcGFyYW1ldGVyWzJdIDw8IDE2IHwKKwkJICBoMmNfcGFyYW1ldGVyWzNdIDw8IDggfAorCQkgIGgyY19wYXJhbWV0ZXJbNF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYwLCA1LCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9scHNfcnB3bShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJIHU4IGxwc192YWwsIHU4IHJwd21fdmFsKQoreworCXU4IGxwcyA9IGxwc192YWw7CisJdTggcnB3bSA9IHJwd21fdmFsOworCisJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9VMV9MUFNfVkFMLCAmbHBzKTsKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX1UxX1JQV01fVkFMLCAmcnB3bSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9scHNycHdtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsCisJCQkJICAgIHU4IGxwc192YWwsIHU4IHJwd21fdmFsKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHNldCBscHMvcnB3bSA9IDB4JXgvMHgleFxuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksIGxwc192YWwsIHJwd21fdmFsKTsKKwljb2V4X2RtLT5jdXJfbHBzID0gbHBzX3ZhbDsKKwljb2V4X2RtLT5jdXJfcnB3bSA9IHJwd21fdmFsOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgTFBTLVJ4QmVhY29uTW9kZSA9IDB4JXgsIExQUy1SUFdNID0gMHgleCEhXG4iLAorCQkJICBjb2V4X2RtLT5jdXJfbHBzLCBjb2V4X2RtLT5jdXJfcnB3bSk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfbHBzID09IGNvZXhfZG0tPmN1cl9scHMpICYmCisJCSAgICAoY29leF9kbS0+cHJlX3Jwd20gPT0gY29leF9kbS0+Y3VyX3Jwd20pKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCSAgIltCVENvZXhdLCBMUFMtUlBXTV9MYXN0ID0gMHgleCwgTFBTLVJQV01fTm93ID0gMHgleCEhXG4iLAorCQkJCSAgY29leF9kbS0+cHJlX3Jwd20sIGNvZXhfZG0tPmN1cl9ycHdtKTsKKworCQkJcmV0dXJuOworCQl9CisJfQorCWhhbGJ0Yzg3MjNiMWFudF9zZXRfbHBzX3Jwd20oYnRjb2V4aXN0LCBscHNfdmFsLCBycHdtX3ZhbCk7CisKKwljb2V4X2RtLT5wcmVfbHBzID0gY29leF9kbS0+Y3VyX2xwczsKKwljb2V4X2RtLT5wcmVfcnB3bSA9IGNvZXhfZG0tPmN1cl9ycHdtOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgYm9vbCBsb3dfcGVuYWx0eV9yYSkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfTU9OSVRPUiwKKwkJICAiW0JUQ29leF0sIFNNW0xwUkFdID0gJWRcbiIsIGxvd19wZW5hbHR5X3JhKTsKKworCWhhbGJ0Yzg3MjNiMWFudF9sb3dfcGVuYWx0eV9yYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBsb3dfcGVuYWx0eV9yYSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRhbnRwYXRoKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgICB1OCBhbnRfcG9zX3R5cGUsIGJvb2wgaW5pdF9od19jZmcsCisJCQkJYm9vbCB3aWZpX29mZikKK3sKKwlzdHJ1Y3QgYnRjX2JvYXJkX2luZm8gKmJyZF9pbmZvID0gJmJ0Y29leGlzdC0+Ym9hcmRfaW5mbzsKKwl1MzIgZndfdmVyID0gMCwgdTMydG1wID0gMDsKKwlib29sIHBnX2V4dF9zd2l0Y2ggPSBmYWxzZTsKKwlib29sIHVzZV9leHRfc3dpdGNoID0gZmFsc2U7CisJdTggaDJjX3BhcmFtZXRlclsyXSA9IHswfTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfRVhUX1NXSVRDSCwgJnBnX2V4dF9zd2l0Y2gpOworCS8qIFszMToxNl0gPSBmdyB2ZXIsIFsxNTowXSA9IGZ3IHN1YiB2ZXIgKi8KKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKworCWlmICgoZndfdmVyIDwgMHhjMDAwMCkgfHwgcGdfZXh0X3N3aXRjaCkKKwkJdXNlX2V4dF9zd2l0Y2ggPSB0cnVlOworCisJaWYgKGluaXRfaHdfY2ZnKSB7CisJCS8qQlQgc2VsZWN0IHMwL3MxIGlzIGNvbnRyb2xsZWQgYnkgV2lGaSAqLworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg2NywgMHgyMCwgMHgxKTsKKworCQkvKkZvcmNlIEdOVF9CVCB0byBOb3JtYWwgKi8KKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4NzY1LCAweDE4LCAweDApOworCX0gZWxzZSBpZiAod2lmaV9vZmYpIHsKKwkJLypGb3JjZSBHTlRfQlQgdG8gSGlnaCAqLworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg3NjUsIDB4MTgsIDB4Myk7CisJCS8qQlQgc2VsZWN0IHMwL3MxIGlzIGNvbnRyb2xsZWQgYnkgQlQgKi8KKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4NjcsIDB4MjAsIDB4MCk7CisKKwkJLyogMHg0Y1syNDoyM10gPSAwMCwgU2V0IEFudGVubmEgY29udHJvbCBieSBCVF9SRkVfQ1RSTAorCQkgKiBCVCBWZW5kb3IgMHhhYyA9IDB4ZjAwMiAqLworCQl1MzJ0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg0Yyk7CisJCXUzMnRtcCAmPSB+QklUKDIzKTsKKwkJdTMydG1wICY9IH5CSVQoMjQpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NGMsIHUzMnRtcCk7CisJfQorCisJaWYgKHVzZV9leHRfc3dpdGNoKSB7CisJCWlmIChpbml0X2h3X2NmZykgeworCQkJLyogMHg0Y1syM10gPSAwLCAweDRjWzI0XSA9IDEgIEFudGVubmEgY3RybCBieSBXTC9CVCAqLworCQkJdTMydG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NGMpOworCQkJdTMydG1wICY9IH5CSVQoMjMpOworCQkJdTMydG1wIHw9IEJJVCgyNCk7CisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NGMsIHUzMnRtcCk7CisKKwkJCWlmIChicmRfaW5mby0+YnRkbV9hbnRfcG9zID09CisJCQkgICAgQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKSB7CisJCQkJLyogTWFpbiBBbnQgdG8gIEJUIGZvciBJUFMgY2FzZSAweDRjWzIzXSA9IDEgKi8KKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg2NCwgMHgxLAorCQkJCQkJCQkgICAweDEpOworCisJCQkJLyp0ZWxsIGZpcm13YXJlICJubyBhbnRlbm5hIGludmVyc2UiKi8KKwkJCQloMmNfcGFyYW1ldGVyWzBdID0gMDsKKwkJCQloMmNfcGFyYW1ldGVyWzFdID0gMTsgIC8qZXh0IHN3aXRjaCB0eXBlKi8KKwkJCQlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjUsIDIsCisJCQkJCQkJaDJjX3BhcmFtZXRlcik7CisJCQl9IGVsc2UgeworCQkJCS8qQXV4IEFudCB0byAgQlQgZm9yIElQUyBjYXNlIDB4NGNbMjNdID0gMSAqLworCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LAorCQkJCQkJCQkgICAweDY0LCAweDEsCisJCQkJCQkJCSAgIDB4MCk7CisKKwkJCQkvKnRlbGwgZmlybXdhcmUgImFudGVubmEgaW52ZXJzZSIqLworCQkJCWgyY19wYXJhbWV0ZXJbMF0gPSAxOworCQkJCWgyY19wYXJhbWV0ZXJbMV0gPSAxOyAgLypleHQgc3dpdGNoIHR5cGUqLworCQkJCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NSwgMiwKKwkJCQkJCQloMmNfcGFyYW1ldGVyKTsKKwkJCX0KKwkJfQorCisJCS8qIGZpeGVkIGludGVybmFsIHN3aXRjaCBmaXJzdCovCisJCS8qIGZpeGVkIGludGVybmFsIHN3aXRjaCBTMS0+V2lGaSwgUzAtPkJUKi8KKwkJaWYgKGJyZF9pbmZvLT5idGRtX2FudF9wb3MgPT0gQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKQorCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMmJ5dGUoYnRjb2V4aXN0LCAweDk0OCwgMHgwKTsKKwkJZWxzZS8qIGZpeGVkIGludGVybmFsIHN3aXRjaCBTMC0+V2lGaSwgUzEtPkJUKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgsIDB4MjgwKTsKKworCQkvKiBleHQgc3dpdGNoIHNldHRpbmcgKi8KKwkJc3dpdGNoIChhbnRfcG9zX3R5cGUpIHsKKwkJY2FzZSBCVENfQU5UX1BBVEhfV0lGSToKKwkJCWlmIChicmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg5MmMsIDB4MywKKwkJCQkJCQkJICAgMHgxKTsKKwkJCWVsc2UKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg5MmMsIDB4MywKKwkJCQkJCQkJICAgMHgyKTsKKwkJCWJyZWFrOworCQljYXNlIEJUQ19BTlRfUEFUSF9CVDoKKwkJCWlmIChicmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg5MmMsIDB4MywKKwkJCQkJCQkJICAgMHgyKTsKKwkJCWVsc2UKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg5MmMsIDB4MywKKwkJCQkJCQkJICAgMHgxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIEJUQ19BTlRfUEFUSF9QVEE6CisJCQlpZiAoYnJkX2luZm8tPmJ0ZG1fYW50X3BvcyA9PSBCVENfQU5URU5OQV9BVF9NQUlOX1BPUlQpCisJCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsCisJCQkJCQkJCSAgIDB4OTJjLCAweDMsCisJCQkJCQkJCSAgIDB4MSk7CisJCQllbHNlCisJCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsCisJCQkJCQkJCSAgIDB4OTJjLCAweDMsCisJCQkJCQkJCSAgIDB4Mik7CisJCQlicmVhazsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKGluaXRfaHdfY2ZnKSB7CisJCQkvKiAweDRjWzIzXSA9IDEsIDB4NGNbMjRdID0gMCAgQW50ZW5uYSBjb250cm9sIGJ5IDB4NjQqLworCQkJdTMydG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NGMpOworCQkJdTMydG1wIHw9IEJJVCgyMyk7CisJCQl1MzJ0bXAgJj0gfkJJVCgyNCk7CisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NGMsIHUzMnRtcCk7CisKKwkJCWlmIChicmRfaW5mby0+YnRkbV9hbnRfcG9zID09CisJCQkgICAgQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKSB7CisJCQkJLypNYWluIEFudCB0byAgV2lGaSBmb3IgSVBTIGNhc2UgMHg0Y1syM10gPSAxKi8KKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg2NCwgMHgxLAorCQkJCQkJCQkgICAweDApOworCisJCQkJLyp0ZWxsIGZpcm13YXJlICJubyBhbnRlbm5hIGludmVyc2UiKi8KKwkJCQloMmNfcGFyYW1ldGVyWzBdID0gMDsKKwkJCQloMmNfcGFyYW1ldGVyWzFdID0gMDsgIC8qaW50ZXJuYWwgc3dpdGNoIHR5cGUqLworCQkJCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NSwgMiwKKwkJCQkJCQloMmNfcGFyYW1ldGVyKTsKKwkJCX0gZWxzZSB7CisJCQkJLypBdXggQW50IHRvICBCVCBmb3IgSVBTIGNhc2UgMHg0Y1syM10gPSAxKi8KKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgMHg2NCwgMHgxLAorCQkJCQkJCQkgICAweDEpOworCisJCQkJLyp0ZWxsIGZpcm13YXJlICJhbnRlbm5hIGludmVyc2UiKi8KKwkJCQloMmNfcGFyYW1ldGVyWzBdID0gMTsKKwkJCQloMmNfcGFyYW1ldGVyWzFdID0gMDsgIC8qaW50ZXJuYWwgc3dpdGNoIHR5cGUqLworCQkJCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NSwgMiwKKwkJCQkJCQloMmNfcGFyYW1ldGVyKTsKKwkJCX0KKwkJfQorCisJCS8qIGZpeGVkIGV4dGVybmFsIHN3aXRjaCBmaXJzdCovCisJCS8qTWFpbi0+V2lGaSwgQXV4LT5CVCovCisJCWlmIChicmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkKKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDkyYywKKwkJCQkJCQkgICAweDMsIDB4MSk7CisJCWVsc2UvKk1haW4tPkJULCBBdXgtPldpRmkgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDkyYywKKwkJCQkJCQkgICAweDMsIDB4Mik7CisKKwkJLyogaW50ZXJuYWwgc3dpdGNoIHNldHRpbmcqLworCQlzd2l0Y2ggKGFudF9wb3NfdHlwZSkgeworCQljYXNlIEJUQ19BTlRfUEFUSF9XSUZJOgorCQkJaWYgKGJyZF9pbmZvLT5idGRtX2FudF9wb3MgPT0gQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKQorCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgsCisJCQkJCQkJICAgMHgwKTsKKwkJCWVsc2UKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4OTQ4LAorCQkJCQkJCSAgIDB4MjgwKTsKKwkJCWJyZWFrOworCQljYXNlIEJUQ19BTlRfUEFUSF9CVDoKKwkJCWlmIChicmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4OTQ4LAorCQkJCQkJCSAgIDB4MjgwKTsKKwkJCWVsc2UKKwkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4OTQ4LAorCQkJCQkJCSAgIDB4MCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBCVENfQU5UX1BBVEhfUFRBOgorCQkJaWYgKGJyZF9pbmZvLT5idGRtX2FudF9wb3MgPT0gQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKQorCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgsCisJCQkJCQkJICAgMHgyMDApOworCQkJZWxzZQorCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgsCisJCQkJCQkJICAgMHg4MCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCB0dXJuX29uLCB1OCB0eXBlKQoreworCWJvb2wgd2lmaV9idXN5ID0gZmFsc2U7CisJdTggcnNzaV9hZGp1c3RfdmFsID0gMDsKKworCWNvZXhfZG0tPmN1cl9wc190ZG1hX29uID0gdHVybl9vbjsKKwljb2V4X2RtLT5jdXJfcHNfdGRtYSA9IHR5cGU7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hX29uKQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkgICJbQlRDb2V4XSwgKioqKioqKiogVERNQShvbiwgJWQpICoqKioqKioqKlxuIiwKKwkJCQkgIGNvZXhfZG0tPmN1cl9wc190ZG1hKTsKKwkJZWxzZQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkgICJbQlRDb2V4XSwgKioqKioqKiogVERNQShvZmYsICVkKSAqKioqKioqKlxuIiwKKwkJCQkgIGNvZXhfZG0tPmN1cl9wc190ZG1hKTsKKworCQlpZiAoKGNvZXhfZG0tPnByZV9wc190ZG1hX29uID09IGNvZXhfZG0tPmN1cl9wc190ZG1hX29uKSAmJgorCQkgICAgKGNvZXhfZG0tPnByZV9wc190ZG1hID09IGNvZXhfZG0tPmN1cl9wc190ZG1hKSkKKwkJCXJldHVybjsKKwl9CisJaWYgKHR1cm5fb24pIHsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWRlZmF1bHQ6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDUxLCAweDFhLAorCQkJCQkJICAgICAgIDB4MWEsIDB4MCwgMHg1MCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgzYSwKKwkJCQkJCSAgICAgICAweDAzLCAweDEwLCAweDUwKTsKKworCQkJcnNzaV9hZGp1c3RfdmFsID0gMTE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgyYiwKKwkJCQkJCSAgICAgICAweDAzLCAweDEwLCAweDUwKTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDE0OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NTEsIDB4MWQsCisJCQkJCQkgICAgICAgMHgxZCwgMHgwLCAweDUyKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDkzLCAweDE1LAorCQkJCQkJICAgICAgIDB4MywgMHgxNCwgMHgwKTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDE3OworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NjEsIDB4MTUsCisJCQkJCQkgICAgICAgMHgzLCAweDExLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDYxLCAweDIwLAorCQkJCQkJICAgICAgIDB4MywgMHgxMSwgMHgxMyk7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHgxMywgMHhjLAorCQkJCQkJICAgICAgIDB4NSwgMHgwLCAweDApOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4OTMsIDB4MjUsCisJCQkJCQkgICAgICAgMHgzLCAweDEwLCAweDApOworCQkJYnJlYWs7CisJCWNhc2UgOToKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NTEsICAweDIxLAorCQkJCQkJICAgICAgIDB4MywgMHgxMCwgMHg1MCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAxODsKKwkJCWJyZWFrOworCQljYXNlIDEwOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHgxMywgMHhhLAorCQkJCQkJICAgICAgIDB4YSwgMHgwLCAweDQwKTsKKwkJCWJyZWFrOworCQljYXNlIDExOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgxNSwKKwkJCQkJCSAgICAgICAweDAzLCAweDEwLCAweDUwKTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDIwOworCQkJYnJlYWs7CisJCWNhc2UgMTI6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDUxLCAweDBhLAorCQkJCQkJICAgICAgIDB4MGEsIDB4MCwgMHg1MCk7CisJCQlicmVhazsKKwkJY2FzZSAxMzoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NTEsIDB4MTUsCisJCQkJCQkgICAgICAgMHgxNSwgMHgwLCAweDUwKTsKKwkJCWJyZWFrOworCQljYXNlIDE0OgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgyMSwKKwkJCQkJCSAgICAgICAweDMsIDB4MTAsIDB4NTIpOworCQkJYnJlYWs7CisJCWNhc2UgMTU6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDEzLCAweGEsCisJCQkJCQkgICAgICAgMHgzLCAweDgsIDB4MCk7CisJCQlicmVhazsKKwkJY2FzZSAxNjoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4OTMsIDB4MTUsCisJCQkJCQkgICAgICAgMHgzLCAweDEwLCAweDApOworCQkJcnNzaV9hZGp1c3RfdmFsID0gMTg7CisJCQlicmVhazsKKwkJY2FzZSAxODoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4OTMsIDB4MjUsCisJCQkJCQkgICAgICAgMHgzLCAweDEwLCAweDApOworCQkJcnNzaV9hZGp1c3RfdmFsID0gMTQ7CisJCQlicmVhazsKKwkJY2FzZSAyMDoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NjEsIDB4MzUsCisJCQkJCQkgICAgICAgMHgwMywgMHgxMSwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAyMToKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NjEsIDB4MjUsCisJCQkJCQkgICAgICAgMHgwMywgMHgxMSwgMHgxMSk7CisJCQlicmVhazsKKwkJY2FzZSAyMjoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NjEsIDB4MjUsCisJCQkJCQkgICAgICAgMHgwMywgMHgxMSwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAyMzoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MjUsCisJCQkJCQkgICAgICAgMHgzLCAweDMxLCAweDE4KTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDIyOworCQkJYnJlYWs7CisJCWNhc2UgMjQ6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDE1LAorCQkJCQkJICAgICAgIDB4MywgMHgzMSwgMHgxOCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAyMjsKKwkJCWJyZWFrOworCQljYXNlIDI1OgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHhhLAorCQkJCQkJICAgICAgIDB4MywgMHgzMSwgMHgxOCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAyMjsKKwkJCWJyZWFrOworCQljYXNlIDI2OgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHhhLAorCQkJCQkJICAgICAgIDB4MywgMHgzMSwgMHgxOCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAyMjsKKwkJCWJyZWFrOworCQljYXNlIDI3OgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgyNSwKKwkJCQkJCSAgICAgICAweDMsIDB4MzEsIDB4OTgpOworCQkJcnNzaV9hZGp1c3RfdmFsID0gMjI7CisJCQlicmVhazsKKwkJY2FzZSAyODoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NjksIDB4MjUsCisJCQkJCQkgICAgICAgMHgzLCAweDMxLCAweDApOworCQkJYnJlYWs7CisJCWNhc2UgMjk6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGFiLCAweDFhLAorCQkJCQkJICAgICAgIDB4MWEsIDB4MSwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAzMDoKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NTEsIDB4MTQsCisJCQkJCQkgICAgICAgMHgzLCAweDEwLCAweDUwKTsKKwkJCWJyZWFrOworCQljYXNlIDMxOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhkMywgMHgxYSwKKwkJCQkJCSAgICAgICAweDFhLCAwLCAweDU4KTsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHg2MSwgMHhhLAorCQkJCQkJICAgICAgIDB4MywgMHgxMCwgMHgwKTsKKwkJCWJyZWFrOworCQljYXNlIDMzOgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhhMywgMHgyNSwKKwkJCQkJCSAgICAgICAweDMsIDB4MzAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMzQ6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDUzLCAweDFhLAorCQkJCQkJICAgICAgIDB4MWEsIDB4MCwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAzNToKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4NjMsIDB4MWEsCisJCQkJCQkgICAgICAgMHgxYSwgMHgwLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDM2OgorCQkJaGFsYnRjODcyM2IxYW50X3NldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhkMywgMHgxMiwKKwkJCQkJCSAgICAgICAweDMsIDB4MTQsIDB4NTApOworCQkJYnJlYWs7CisJCS8qIFNvZnRBUCBvbmx5IHdpdGggbm8gc3RhIGFzc29jaWF0ZWQsIEJUIGRpc2FibGUgLAorCQkgKiBURE1BIG1vZGUgZm9yIHBvd2VyIHNhdmluZworCQkgKiBoZXJlIHNvZnRhcCBtb2RlIHNjcmVlbiBvZmYgd2lsbCBjb3N0IDcwLTgwbUEgZm9yIHBob25lICovCisJCWNhc2UgNDA6CisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDIzLCAweDE4LAorCQkJCQkJICAgICAgIDB4MDAsIDB4MTAsIDB4MjQpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSA4OiAvKlBUQSBDb250cm9sICovCisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDgsIDB4MCwKKwkJCQkJCSAgICAgICAweDAsIDB4MCwgMHgwKTsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRhbnRwYXRoKGJ0Y29leGlzdCwgQlRDX0FOVF9QQVRIX1BUQSwKKwkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQlkZWZhdWx0OiAgLypTb2Z0d2FyZSBjb250cm9sLCBBbnRlbm5hIGF0IEJUIHNpZGUgKi8KKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4MCwgMHgwLAorCQkJCQkJICAgICAgIDB4MCwgMHgwLCAweDApOworCQkJaGFsYnRjODcyM2IxYW50X3NldGFudHBhdGgoYnRjb2V4aXN0LCBCVENfQU5UX1BBVEhfQlQsCisJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgOTogICAvKlNvZnR3YXJlIGNvbnRyb2wsIEFudGVubmEgYXQgV2lGaSBzaWRlICovCisJCQloYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweDAsIDB4MCwKKwkJCQkJCSAgICAgICAweDAsIDB4MCwgMHgwKTsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9zZXRhbnRwYXRoKGJ0Y29leGlzdCwgQlRDX0FOVF9QQVRIX1dJRkksCisJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcnNzaV9hZGp1c3RfdmFsID0gMDsKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LAorCQkJICAgQlRDX1NFVF9VMV9SU1NJX0FESl9WQUxfRk9SXzFBTlRfQ09FWF9UWVBFLAorCQkJICAgJnJzc2lfYWRqdXN0X3ZhbCk7CisKKwkvKiB1cGRhdGUgcHJlIHN0YXRlICovCisJY29leF9kbS0+cHJlX3BzX3RkbWFfb24gPSBjb2V4X2RtLT5jdXJfcHNfdGRtYV9vbjsKKwljb2V4X2RtLT5wcmVfcHNfdGRtYSA9IGNvZXhfZG0tPmN1cl9wc190ZG1hOworfQorCitzdGF0aWMgYm9vbCBoYWxidGM4NzIzYjFhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlib29sIGNvbW1vbSA9IGZhbHNlLCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOworCWJvb2wgd2lmaV9idXN5ID0gZmFsc2U7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJICAgJndpZmlfY29ubmVjdGVkKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisKKwlpZiAoIXdpZmlfY29ubmVjdGVkICYmCisJICAgIEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX05PTl9DT05ORUNURURfSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIFdpZmkgbm9uIGNvbm5lY3RlZC1pZGxlICsgQlQgbm9uIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCQloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworCQljb21tb20gPSB0cnVlOworCX0gZWxzZSBpZiAod2lmaV9jb25uZWN0ZWQgJiYKKwkJICAgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX05PTl9DT05ORUNURURfSURMRSA9PQorCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgV2lmaSBjb25uZWN0ZWQgKyBCVCBub24gY29ubmVjdGVkLWlkbGUhIVxuIik7CisJCWhhbGJ0Yzg3MjNiMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7CisJCWNvbW1vbSA9IHRydWU7CisJfSBlbHNlIGlmICghd2lmaV9jb25uZWN0ZWQgJiYKKwkJICAgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09CisJCSAgICBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBXaWZpIG5vbiBjb25uZWN0ZWQtaWRsZSArIEJUIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCQloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworCQljb21tb20gPSB0cnVlOworCX0gZWxzZSBpZiAod2lmaV9jb25uZWN0ZWQgJiYKKwkJICAgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09CisJCSAgICBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBXaWZpIGNvbm5lY3RlZCArIEJUIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCQloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworCQljb21tb20gPSB0cnVlOworCX0gZWxzZSBpZiAoIXdpZmlfY29ubmVjdGVkICYmCisJCSAgIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19DT05ORUNURURfSURMRSAhPQorCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgV2lmaSBub24gY29ubmVjdGVkLWlkbGUgKyBCVCBCdXN5ISFcbiIpOworCQloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworCQljb21tb20gPSB0cnVlOworCX0gZWxzZSB7CisJCWlmICh3aWZpX2J1c3kpCisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIFdpZmkgQ29ubmVjdGVkLUJ1c3kgKyBCVCBCdXN5ISFcbiIpOworCQllbHNlCisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIFdpZmkgQ29ubmVjdGVkLUlkbGUgKyBCVCBCdXN5ISFcbiIpOworCisJCWNvbW1vbSA9IGZhbHNlOworCX0KKworCXJldHVybiBjb21tb207Cit9CisKK3N0YXRpYyB2b2lkIHRkbWFfZHVyYXRpb25fYWRqdXN0X2Zvcl9hY2woc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSB1OCB3aWZpX3N0YXR1cykKK3sKKwlzdGF0aWMgczMyIHVwLCBkbiwgbSwgbiwgd2FpdF9jb3VudDsKKwkvKiAwOiBubyBjaGFuZ2UsICsxOiBpbmNyZWFzZSBXaUZpIGR1cmF0aW9uLAorCSAqIC0xOiBkZWNyZWFzZSBXaUZpIGR1cmF0aW9uICovCisJczMyIHJlc3VsdDsKKwl1OCByZXRyeV9jb3VudCA9IDAsIGJ0X2luZm9fZXh0OworCWJvb2wgd2lmaV9idXN5ID0gZmFsc2U7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCisJCSAgIltCVENvZXhdLCBUZG1hRHVyYXRpb25BZGp1c3RGb3JBY2woKVxuIik7CisKKwlpZiAoQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfQlVTWSA9PSB3aWZpX3N0YXR1cykKKwkJd2lmaV9idXN5ID0gdHJ1ZTsKKwllbHNlCisJCXdpZmlfYnVzeSA9IGZhbHNlOworCisJaWYgKChCVF84NzIzQl8xQU5UX1dJRklfU1RBVFVTX05PTl9DT05ORUNURURfQVNTT19BVVRIX1NDQU4gPT0KKwkJCQkJCQkgd2lmaV9zdGF0dXMpIHx8CisJICAgIChCVF84NzIzQl8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9TQ0FOID09IHdpZmlfc3RhdHVzKSB8fAorCSAgICAoQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfU1BFQ0lBTF9QS1QgPT0gd2lmaV9zdGF0dXMpKSB7CisJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSAhPSAxICYmIGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDIgJiYKKwkJICAgIGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDMgJiYgY29leF9kbS0+Y3VyX3BzX3RkbWEgIT0gOSkgeworCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCXRydWUsIDkpOworCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisKKwkJCXVwID0gMDsKKwkJCWRuID0gMDsKKwkJCW0gPSAxOworCQkJbiA9IDM7CisJCQlyZXN1bHQgPSAwOworCQkJd2FpdF9jb3VudCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmICghY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCkgeworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gdHJ1ZTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBmaXJzdCBydW4gVGRtYUR1cmF0aW9uQWRqdXN0KCkhIVxuIik7CisKKwkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCisJCXVwID0gMDsKKwkJZG4gPSAwOworCQltID0gMTsKKwkJbiA9IDM7CisJCXJlc3VsdCA9IDA7CisJCXdhaXRfY291bnQgPSAwOworCX0gZWxzZSB7CisJCS8qYWNjcXVpcmUgdGhlIEJUIFRSeCByZXRyeSBjb3VudCBmcm9tIEJUX0luZm8gYnl0ZTIgKi8KKwkJcmV0cnlfY291bnQgPSBjb2V4X3N0YS0+YnRfcmV0cnlfY250OworCQlidF9pbmZvX2V4dCA9IGNvZXhfc3RhLT5idF9pbmZvX2V4dDsKKwkJcmVzdWx0ID0gMDsKKwkJd2FpdF9jb3VudCsrOworCQkvKiBubyByZXRyeSBpbiB0aGUgbGFzdCAyLXNlY29uZCBkdXJhdGlvbiAqLworCQlpZiAocmV0cnlfY291bnQgPT0gMCkgeworCQkJdXArKzsKKwkJCWRuLS07CisKKwkJCWlmIChkbiA8PSAwKQorCQkJCWRuID0gMDsKKworCQkJaWYgKHVwID49IG4pIHsKKwkJCQl3YWl0X2NvdW50ID0gMDsKKwkJCQluID0gMzsKKwkJCQl1cCA9IDA7CisJCQkJZG4gPSAwOworCQkJCXJlc3VsdCA9IDE7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgSW5jcmVhc2Ugd2lmaSBkdXJhdGlvbiEhXG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXRyeV9jb3VudCA8PSAzKSB7CisJCQl1cC0tOworCQkJZG4rKzsKKworCQkJaWYgKHVwIDw9IDApCisJCQkJdXAgPSAwOworCisJCQlpZiAoZG4gPT0gMikgeworCQkJCWlmICh3YWl0X2NvdW50IDw9IDIpCisJCQkJCW0rKzsKKwkJCQllbHNlCisJCQkJCW0gPSAxOworCisJCQkJaWYgKG0gPj0gMjApCisJCQkJCW0gPSAyMDsKKworCQkJCW4gPSAzICogbTsKKwkJCQl1cCA9IDA7CisJCQkJZG4gPSAwOworCQkJCXdhaXRfY291bnQgPSAwOworCQkJCXJlc3VsdCA9IC0xOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkJICAiW0JUQ29leF0sIERlY3JlYXNlIHdpZmkgZHVyYXRpb24gZm9yIHJldHJ5Q291bnRlcjwzISFcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHdhaXRfY291bnQgPT0gMSkKKwkJCQltKys7CisJCQllbHNlCisJCQkJbSA9IDE7CisKKwkJCWlmIChtID49IDIwKQorCQkJCW0gPSAyMDsKKworCQkJbiA9IDMgKiBtOworCQkJdXAgPSAwOworCQkJZG4gPSAwOworCQkJd2FpdF9jb3VudCA9IDA7CisJCQlyZXN1bHQgPSAtMTsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJICAiW0JUQ29leF0sIERlY3JlYXNlIHdpZmkgZHVyYXRpb24gZm9yIHJldHJ5Q291bnRlcj4zISFcbiIpOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJaWYgKChCVF9JTkZPXzg3MjNCXzFBTlRfQTJEUF9CQVNJQ19SQVRFKGJ0X2luZm9fZXh0KSkgJiYKKwkJCSAgICAoKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHx8CisJCQkgICAgIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSkpIHsKKwkJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJCXRydWUsIDkpOworCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA5OworCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCQl0cnVlLCAyKTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJdHJ1ZSwgOSk7CisJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJCXRydWUsIDExKTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQl9CisJCX0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCWlmICgoQlRfSU5GT184NzIzQl8xQU5UX0EyRFBfQkFTSUNfUkFURShidF9pbmZvX2V4dCkpICYmCisJCQkgICAgKChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB8fAorCQkJICAgICAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikpKSB7CisJCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCQl0cnVlLCA5KTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gOTsKKwkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJCXRydWUsIDkpOworCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA5OworCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA5KSB7CisJCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCQl0cnVlLCAyKTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJdHJ1ZSwgMSk7CisJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE7CisJCQl9CisJCX0gZWxzZSB7CSAgLypubyBjaGFuZ2UgKi8KKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJICAiW0JUQ29leF0sKioqKioqKioqIFRETUEob24sICVkKSAqKioqKioqKlxuIiwKKwkJCQkgIGNvZXhfZG0tPmN1cl9wc190ZG1hKTsKKwkJfQorCisJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSAhPSAxICYmIGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDIgJiYKKwkJICAgIGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDkgJiYgY29leF9kbS0+Y3VyX3BzX3RkbWEgIT0gMTEpIHsKKwkJCS8qIHJlY292ZXIgdG8gcHJldmlvdXMgYWRqdXN0IHR5cGUgKi8KKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsCisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcHN0ZG1hY2hlY2tmb3Jwb3dlcnNhdmVzdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJIGJvb2wgbmV3X3BzX3N0YXRlKQoreworCXU4IGxwc19tb2RlID0gMHgwOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9MUFNfTU9ERSwgJmxwc19tb2RlKTsKKworCWlmIChscHNfbW9kZSkgewkvKiBhbHJlYWR5IHVuZGVyIExQUyBzdGF0ZSAqLworCQlpZiAobmV3X3BzX3N0YXRlKSB7CisJCQkvKiBrZWVwIHN0YXRlIHVuZGVyIExQUywgZG8gbm90aGluZy4gKi8KKwkJfSBlbHNlIHsKKwkJCS8qIHdpbGwgbGVhdmUgTFBTIHN0YXRlLCB0dXJuIG9mZiBwc1RkbWEgZmlyc3QgKi8KKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQlmYWxzZSwgMCk7CisJCX0KKwl9IGVsc2UgewkvKiBOTyBQUyBzdGF0ZSAqLworCQlpZiAobmV3X3BzX3N0YXRlKSB7CisJCQkvKiB3aWxsIGVudGVyIExQUyBzdGF0ZSwgdHVybiBvZmYgcHNUZG1hIGZpcnN0ICovCisJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJZmFsc2UsIDApOworCQl9IGVsc2UgeworCQkJLyoga2VlcCBzdGF0ZSB1bmRlciBOTyBQUyBzdGF0ZSwgZG8gbm90aGluZy4gKi8KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICAgdTggcHNfdHlwZSwgdTggbHBzX3ZhbCwKKwkJCQkJICAgICB1OCBycHdtX3ZhbCkKK3sKKwlib29sIGxvd19wd3JfZGlzYWJsZSA9IGZhbHNlOworCisJc3dpdGNoIChwc190eXBlKSB7CisJY2FzZSBCVENfUFNfV0lGSV9OQVRJVkU6CisJCS8qIHJlY292ZXIgdG8gb3JpZ2luYWwgMzJrIGxvdyBwb3dlciBzZXR0aW5nICovCisJCWxvd19wd3JfZGlzYWJsZSA9IGZhbHNlOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9ESVNBQkxFX0xPV19QT1dFUiwKKwkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfTk9STUFMX0xQUywgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgQlRDX1BTX0xQU19PTjoKKwkJcHN0ZG1hY2hlY2tmb3Jwb3dlcnNhdmVzdGF0ZShidGNvZXhpc3QsIHRydWUpOworCQloYWxidGM4NzIzYjFhbnRfbHBzcnB3bShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBscHNfdmFsLAorCQkJCQlycHdtX3ZhbCk7CisJCS8qIHdoZW4gY29leCBmb3JjZSB0byBlbnRlciBMUFMsIGRvIG5vdCBlbnRlciAzMmsgbG93IHBvd2VyLiAqLworCQlsb3dfcHdyX2Rpc2FibGUgPSB0cnVlOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9ESVNBQkxFX0xPV19QT1dFUiwKKwkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKwkJLyogcG93ZXIgc2F2ZSBtdXN0IGV4ZWN1dGVkIGJlZm9yZSBwc1RkbWEuCSAqLworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9FTlRFUl9MUFMsIE5VTEwpOworCQlicmVhazsKKwljYXNlIEJUQ19QU19MUFNfT0ZGOgorCQlwc3RkbWFjaGVja2ZvcnBvd2Vyc2F2ZXN0YXRlKGJ0Y29leGlzdCwgZmFsc2UpOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9MRUFWRV9MUFMsIE5VTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglTb2Z0d2FyZSBDb2V4IE1lY2hhbmlzbSBzdGFydAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTQ08gb25seSBvciBTQ08rUEFOKEhTKSAqLworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9zY28oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgdHJ1ZSk7Cit9CisKKy8qQTJEUCBvbmx5IC8gUEFOKEVEUikgb25seS8gQTJEUCtQQU4oSFMpICovCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9hMmRwX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKK30KKworLyogUEFOKEhTKSBvbmx5ICovCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworfQorCisvKlBBTihFRFIpK0EyRFAgKi8KK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fcGFuX2Vkcl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWhhbGJ0Yzg3MjNiMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIHRydWUpOworfQorCisvKiBISUQrQTJEUCtQQU4oRURSKSAqLworc3RhdGljIHZvaWQgYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2hpZF9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWhhbGJ0Yzg3MjNiMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCB0cnVlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJTm9uLVNvZnR3YXJlIENvZXggTWVjaGFuaXNtIHN0YXJ0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX211bHRpcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwKKwkJCQkJIDB4MCwgMHgwKTsKKworCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA4KTsKKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA1KTsKKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9idF9pbnF1aXJ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCBhcF9lbmFibGUgPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9BUF9NT0RFX0VOQUJMRSwKKwkJCSAgICZhcF9lbmFibGUpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9DT05ORUNURUQsCisJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCisJaWYgKCF3aWZpX2Nvbm5lY3RlZCkgeworCQloYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkgQlRDX1BTX1dJRklfTkFUSVZFLCAweDAsIDB4MCk7CisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA4KTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCB8fCBidF9saW5rX2luZm8tPmhpZF9vbmx5KSB7CisJCS8qIFNDTy9ISUQtb25seSBidXN5ICovCisJCWhhbGJ0Yzg3MjNiMWFudF9wb3dlcl9zYXZlX3N0YXRlKGJ0Y29leGlzdCwgQlRDX1BTX1dJRklfTkFUSVZFLAorCQkJCQkJIDB4MCwgMHgwKTsKKwkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMzIpOworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9IGVsc2UgeworCQlpZiAoYXBfZW5hYmxlKQorCQkJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LAorCQkJCQkJCSBCVENfUFNfV0lGSV9OQVRJVkUsCisJCQkJCQkJIDB4MCwgMHgwKTsKKwkJZWxzZQorCQkJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LAorCQkJCQkJCSBCVENfUFNfTFBTX09OLAorCQkJCQkJCSAweDUwLCAweDQpOworCisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMwKTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCXU4IHdpZmlfc3RhdHVzKQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisKKwkvKiB0ZG1hIGFuZCBjb2V4IHRhYmxlICovCisKKwlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpIHsKKwkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNSk7CisJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCX0gZWxzZSB7IC8qIEhJRCAqLworCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfY29ubmVjdGVkX2J0X2FjbF9idXN5KAorCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJdTggd2lmaV9zdGF0dXMpCit7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKwl1OCByc3NpX3N0YXRlOworCisJcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMWFudF9idF9yc3NpX3N0YXRlKDIsIDI4LCAwKTsKKworCWlmIChidF9saW5rX2luZm8tPmhpZF9vbmx5KSB7ICAvKkhJRCAqLworCQlhY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koYnRjb2V4aXN0LCB3aWZpX3N0YXR1cyk7CisJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5hMmRwX29ubHkpIHsgLypBMkRQICovCisJCWlmIChCVF84NzIzQl8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09IHdpZmlfc3RhdHVzKSB7CisJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwKKwkJCQkJCTgpOworCQkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJCX0gZWxzZSBpZiAoKHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJCSAgIChyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXRkbWFfZHVyYXRpb25fYWRqdXN0X2Zvcl9hY2woYnRjb2V4aXN0LCB3aWZpX3N0YXR1cyk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwkJfSBlbHNlIHsgLypmb3IgbG93IEJUIFJTU0kgKi8KKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQl0cnVlLCAxMSk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwkJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7IC8qSElEK0EyRFAgKi8KKwkJaWYgKChyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAocnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJdHJ1ZSwgMTQpOworCQkJY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCA9IGZhbHNlOworCQl9IGVsc2UgeyAvKmZvciBsb3cgQlQgUlNTSSovCisJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJdHJ1ZSwgMTQpOworCQkJY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCA9IGZhbHNlOworCQl9CisKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisJIC8qUEFOKE9QUCwgRlRQKSwgSElEK1BBTihPUFAsIEZUUCkgKi8KKwl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX29ubHkgfHwKKwkJICAgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSkgeworCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSBmYWxzZTsKKwkgLypBMkRQK1BBTihPUFAsIEZUUCksIEhJRCtBMkRQK1BBTihPUFAsIEZUUCkqLworCX0gZWxzZSBpZiAoKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJiBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgfHwKKwkJICAgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCQkgICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpKSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEzKTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSBmYWxzZTsKKwl9IGVsc2UgeworCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMSk7CisJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY3Rpb25fd2lmaV9ub3RfY29ubmVjdGVkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCS8qIHBvd2VyIHNhdmUgc3RhdGUgKi8KKwloYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwKKwkJCQkJIDB4MCwgMHgwKTsKKworCS8qIHRkbWEgYW5kIGNvZXggdGFibGUgKi8KKwloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgOCk7CisJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGFjdGlvbl93aWZpX25vdF9jb25uZWN0ZWRfc2NhbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOworCWhhbGJ0Yzg3MjNiMWFudF9wb3dlcl9zYXZlX3N0YXRlKGJ0Y29leGlzdCwgQlRDX1BTX1dJRklfTkFUSVZFLAorCQkJCQkgMHgwLCAweDApOworCisJLyogdGRtYSBhbmQgY29leCB0YWJsZSAqLworCWlmIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJiBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCXRydWUsIDIyKTsKKwkJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX29ubHkpIHsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQl0cnVlLCAyMCk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQl0cnVlLCAyMCk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwkJfQorCX0gZWxzZSBpZiAoKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX1NDT19CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkJICAgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PQorCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQlhY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koYnRjb2V4aXN0LAorCQkJCUJUXzg3MjNCXzFBTlRfV0lGSV9TVEFUVVNfQ09OTkVDVEVEX1NDQU4pOworCX0gZWxzZSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA4KTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY3Rpb25fd2lmaV9ub3RfY29ubmVjdGVkX2Fzc29fYXV0aChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOworCisJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsCisJCQkJCSAweDAsIDB4MCk7CisKKwlpZiAoKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkgICAgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB8fCAoYnRfbGlua19pbmZvLT5oaWRfb25seSkgfHwKKwkgICAgKGJ0X2xpbmtfaW5mby0+YTJkcF9vbmx5KSB8fCAoYnRfbGlua19pbmZvLT5wYW5fb25seSkpIHsKKwkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDgpOworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA3KTsKKwl9IGVsc2UgeworCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyMCk7CisJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgYWN0aW9uX3dpZmlfY29ubmVjdGVkX3NjYW4oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKworCWhhbGJ0Yzg3MjNiMWFudF9wb3dlcl9zYXZlX3N0YXRlKGJ0Y29leGlzdCwgQlRDX1BTX1dJRklfTkFUSVZFLAorCQkJCQkgMHgwLCAweDApOworCisJLyogdGRtYSBhbmQgY29leCB0YWJsZSAqLworCWlmIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJiBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCXRydWUsIDIyKTsKKwkJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX29ubHkpIHsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQl0cnVlLCAyMCk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAyKTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQl0cnVlLCAyMCk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwkJfQorCX0gZWxzZSBpZiAoKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX1NDT19CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkJICAgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PQorCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQlhY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koYnRjb2V4aXN0LAorCQkJCUJUXzg3MjNCXzFBTlRfV0lGSV9TVEFUVVNfQ09OTkVDVEVEX1NDQU4pOworCX0gZWxzZSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA4KTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY3Rpb25fd2lmaV9jb25uZWN0ZWRfc3BlY2lhbF9wYWNrZXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJYm9vbCBoc19jb25uZWN0aW5nID0gZmFsc2U7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfQ09OTkVDVElORywgJmhzX2Nvbm5lY3RpbmcpOworCisJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsCisJCQkJCSAweDAsIDB4MCk7CisKKwkvKiB0ZG1hIGFuZCBjb2V4IHRhYmxlICovCisJaWYgKChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19DT05ORUNURURfSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgfHwgKGJ0X2xpbmtfaW5mby0+aGlkX29ubHkpIHx8CisJICAgIChidF9saW5rX2luZm8tPmEyZHBfb25seSkgfHwgKGJ0X2xpbmtfaW5mby0+cGFuX29ubHkpKSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA4KTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNyk7CisJfSBlbHNlIHsKKwkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMjApOworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9jb25uZWN0ZWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJYm9vbCB3aWZpX2J1c3kgPSBmYWxzZTsKKwlib29sIHNjYW4gPSBmYWxzZSwgbGluayA9IGZhbHNlLCByb2FtID0gZmFsc2U7CisJYm9vbCB1bmRlcl80d2F5ID0gZmFsc2UsIGFwX2VuYWJsZSA9IGZhbHNlOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkgICJbQlRDb2V4XSwgQ29leEZvcldpZmlDb25uZWN0KCkgPT09PlxuIik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfNF9XQVlfUFJPR1JFU1MsCisJCQkgICAmdW5kZXJfNHdheSk7CisJaWYgKHVuZGVyXzR3YXkpIHsKKwkJYWN0aW9uX3dpZmlfY29ubmVjdGVkX3NwZWNpYWxfcGFja2V0KGJ0Y29leGlzdCk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBDb2V4Rm9yV2lmaUNvbm5lY3QoKSwgcmV0dXJuIGZvciB3aWZpIGlzIHVuZGVyIDR3YXk8PT09XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9TQ0FOLCAmc2Nhbik7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfUk9BTSwgJnJvYW0pOworCisJaWYgKHNjYW4gfHwgbGluayB8fCByb2FtKSB7CisJCWlmIChzY2FuKQorCQkJYWN0aW9uX3dpZmlfY29ubmVjdGVkX3NjYW4oYnRjb2V4aXN0KTsKKwkJZWxzZQorCQkJYWN0aW9uX3dpZmlfY29ubmVjdGVkX3NwZWNpYWxfcGFja2V0KGJ0Y29leGlzdCk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBDb2V4Rm9yV2lmaUNvbm5lY3QoKSwgcmV0dXJuIGZvciB3aWZpIGlzIHVuZGVyIHNjYW48PT09XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9BUF9NT0RFX0VOQUJMRSwKKwkJCSAgICZhcF9lbmFibGUpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9CVVNZLCAmd2lmaV9idXN5KTsKKwkvKiBwb3dlciBzYXZlIHN0YXRlICovCisJaWYgKCFhcF9lbmFibGUgJiYKKwkgICAgQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfQUNMX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzICYmCisJICAgICFidGNvZXhpc3QtPmJ0X2xpbmtfaW5mby5oaWRfb25seSkgeworCQlpZiAoIXdpZmlfYnVzeSAmJiBidGNvZXhpc3QtPmJ0X2xpbmtfaW5mby5hMmRwX29ubHkpCisJCQloYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJIEJUQ19QU19XSUZJX05BVElWRSwKKwkJCQkJCQkgMHgwLCAweDApOworCQllbHNlCisJCQloYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJIEJUQ19QU19MUFNfT04sCisJCQkJCQkJIDB4NTAsIDB4NCk7CisJfSBlbHNlIHsKKwkJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsCisJCQkJCQkgMHgwLCAweDApOworCX0KKwkvKiB0ZG1hIGFuZCBjb2V4IHRhYmxlICovCisJaWYgKCF3aWZpX2J1c3kpIHsKKwkJaWYgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0FDTF9CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgeworCQkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZF9idF9hY2xfYnVzeShidGNvZXhpc3QsCisJCQkJICAgICAgQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfSURMRSk7CisJCX0gZWxzZSBpZiAoKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX1NDT19CVVNZID09CisJCQkJCQljb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJCQkgICAoQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfQUNMX1NDT19CVVNZID09CisJCQkJCQljb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCQlhY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koYnRjb2V4aXN0LAorCQkJCSAgICAgQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfSURMRSk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJZmFsc2UsIDgpOworCQkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfQUNMX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSB7CisJCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfY29ubmVjdGVkX2J0X2FjbF9idXN5KGJ0Y29leGlzdCwKKwkJCQkgICAgQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfQlVTWSk7CisJCX0gZWxzZSBpZiAoKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX1NDT19CVVNZID09CisJCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSB8fAorCQkJICAgKEJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PQorCQkJICAgIGNvZXhfZG0tPmJ0X3N0YXR1cykpIHsKKwkJCWFjdGlvbl9idF9zY29faGlkX29ubHlfYnVzeShidGNvZXhpc3QsCisJCQkJICAgIEJUXzg3MjNCXzFBTlRfV0lGSV9TVEFUVVNfQ09OTkVDVEVEX0JVU1kpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDgpOworCQkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zd19jb2V4aXN0X21lY2hhbmlzbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCBhbGdvcml0aG0gPSAwOworCisJYWxnb3JpdGhtID0gaGFsYnRjODcyM2IxYW50X2FjdGlvbl9hbGdvcml0aG0oYnRjb2V4aXN0KTsKKwljb2V4X2RtLT5jdXJfYWxnb3JpdGhtID0gYWxnb3JpdGhtOworCisJaWYgKCFoYWxidGM4NzIzYjFhbnRfaXNfY29tbW9uX2FjdGlvbihidGNvZXhpc3QpKSB7CisJCXN3aXRjaCAoY29leF9kbS0+Y3VyX2FsZ29yaXRobSkgeworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1NDTzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IFNDTy5cbiIpOworCQkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9zY28oYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX0hJRDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IEhJRC5cbiIpOworCQkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9oaWQoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX0EyRFA6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiBhbGdvcml0aG0gPSBBMkRQLlxuIik7CisJCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX2EyZHAoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX0EyRFBfUEFOSFM6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiBhbGdvcml0aG0gPSBBMkRQK1BBTihIUykuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fYTJkcF9wYW5faHMoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1BBTkVEUjoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IFBBTihFRFIpLlxuIik7CisJCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9lZHIoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1BBTkhTOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gSFMgbW9kZS5cbiIpOworCQkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9wYW5faHMoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzFBTlRfQ09FWF9BTEdPX1BBTkVEUl9BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gUEFOK0EyRFAuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fcGFuX2Vkcl9hMmRwKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gUEFOKEVEUikrSElELlxuIik7CisJCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9lZHJfaGlkKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISURfQTJEUF9QQU5FRFI6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiBhbGdvcml0aG0gPSBISUQrQTJEUCtQQU4uXG4iKTsKKwkJCWFjdGlvbl9oaWRfYTJkcF9wYW5fZWRyKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISURfQTJEUDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IEhJRCtBMkRQLlxuIik7CisJCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX2hpZF9hMmRwKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IGNvZXhpc3QgQWxsIE9mZiEhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNvZXhfZG0tPnByZV9hbGdvcml0aG0gPSBjb2V4X2RtLT5jdXJfYWxnb3JpdGhtOworCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOworCWJvb2wgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZSwgYnRfaHNfb24gPSBmYWxzZTsKKwlib29sIGluY3JlYXNlX3NjYW5fZGV2X251bSA9IGZhbHNlOworCWJvb2wgYl9idF9jdHJsX2FnZ19idWZfc2l6ZSA9IGZhbHNlOworCXU4IGFnZ19idWZfc2l6ZSA9IDU7CisJdTggd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwl1MzIgd2lmaV9saW5rX3N0YXR1cyA9IDA7CisJdTMyIG51bV9vZl93aWZpX2xpbmsgPSAwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkgICJbQlRDb2V4XSwgUnVuQ29leGlzdE1lY2hhbmlzbSgpID09PT5cbiIpOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIFJ1bkNvZXhpc3RNZWNoYW5pc20oKSwgcmV0dXJuIGZvciBNYW51YWwgQ1RSTCA8PT09XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChidGNvZXhpc3QtPnN0b3BfY29leF9kbSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgUnVuQ29leGlzdE1lY2hhbmlzbSgpLCByZXR1cm4gZm9yIFN0b3AgQ29leCBETSA8PT09XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb2V4X3N0YS0+dW5kZXJfaXBzKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCB3aWZpIGlzIHVuZGVyIElQUyAhISFcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfU0NPX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSkKKwkJaW5jcmVhc2Vfc2Nhbl9kZXZfbnVtID0gdHJ1ZTsKKworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfSU5DX1NDQU5fREVWX05VTSwKKwkJCSAgICZpbmNyZWFzZV9zY2FuX2Rldl9udW0pOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfTElOS19TVEFUVVMsCisJCQkgICAmd2lmaV9saW5rX3N0YXR1cyk7CisJbnVtX29mX3dpZmlfbGluayA9IHdpZmlfbGlua19zdGF0dXMgPj4gMTY7CisJaWYgKG51bV9vZl93aWZpX2xpbmsgPj0gMikgeworCQloYWxidGM4NzIzYjFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwLCAwLCAwLCAwKTsKKwkJaGFsYnRjODcyM2IxYW50X2xpbWl0ZWRfcngoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsCisJCQkJCSAgIGJfYnRfY3RybF9hZ2dfYnVmX3NpemUsCisJCQkJCSAgIGFnZ19idWZfc2l6ZSk7CisJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9tdWx0aXBvcnQoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmICghYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYgIWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9saW1pdGVkX3R4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDAsIDAsIDAsIDApOworCX0gZWxzZSB7CisJCWlmICh3aWZpX2Nvbm5lY3RlZCkgeworCQkJd2lmaV9yc3NpX3N0YXRlID0KKwkJCQloYWxidGM4NzIzYjFhbnRfd2lmaV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkJMSwgMiwgMzAsIDApOworCQkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCQloYWxidGM4NzIzYjFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsCisJCQkJCQkJICAgTk9STUFMX0VYRUMsCisJCQkJCQkJICAgMSwgMSwgMSwgMSk7CisJCQl9IGVsc2UgeworCQkJCWhhbGJ0Yzg3MjNiMWFudF9saW1pdGVkX3R4KGJ0Y29leGlzdCwKKwkJCQkJCQkgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkgICAxLCAxLCAxLCAxKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMWFudF9saW1pdGVkX3R4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkgICAwLCAwLCAwLCAwKTsKKwkJfQorCX0KKworCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQliX2J0X2N0cmxfYWdnX2J1Zl9zaXplID0gdHJ1ZTsKKwkJYWdnX2J1Zl9zaXplID0gMHgzOworCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpIHsKKwkJYl9idF9jdHJsX2FnZ19idWZfc2l6ZSA9IHRydWU7CisJCWFnZ19idWZfc2l6ZSA9IDB4NTsKKwl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCB8fCBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQliX2J0X2N0cmxfYWdnX2J1Zl9zaXplID0gdHJ1ZTsKKwkJYWdnX2J1Zl9zaXplID0gMHg4OworCX0KKwloYWxidGM4NzIzYjFhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwKKwkJCQkgICBiX2J0X2N0cmxfYWdnX2J1Zl9zaXplLCBhZ2dfYnVmX3NpemUpOworCisJcnVuX3N3X2NvZXhpc3RfbWVjaGFuaXNtKGJ0Y29leGlzdCk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKworCWlmIChjb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSkgeworCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX2J0X2lucXVpcnkoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoYnRfaHNfb24pIHsKKwkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9ocyhidGNvZXhpc3QpOworCQlyZXR1cm47CisJfQorCisJaWYgKCF3aWZpX2Nvbm5lY3RlZCkgeworCQlib29sIHNjYW4gPSBmYWxzZSwgbGluayA9IGZhbHNlLCByb2FtID0gZmFsc2U7CisKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIHdpZmkgaXMgbm9uIGNvbm5lY3RlZC1pZGxlICEhIVxuIik7CisKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1NDQU4sICZzY2FuKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1JPQU0sICZyb2FtKTsKKworCQlpZiAoc2NhbiB8fCBsaW5rIHx8IHJvYW0pIHsKKwkJCWlmIChzY2FuKQorCQkJCWFjdGlvbl93aWZpX25vdF9jb25uZWN0ZWRfc2NhbihidGNvZXhpc3QpOworCQkJZWxzZQorCQkJCWFjdGlvbl93aWZpX25vdF9jb25uZWN0ZWRfYXNzb19hdXRoKGJ0Y29leGlzdCk7CisJCX0gZWxzZSB7CisJCQlhY3Rpb25fd2lmaV9ub3RfY29ubmVjdGVkKGJ0Y29leGlzdCk7CisJCX0KKwl9IGVsc2UgeyAvKiB3aWZpIExQUy9CdXN5ICovCisJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9jb25uZWN0ZWQoYnRjb2V4aXN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLyogc3cgYWxsIG9mZiAqLworCWhhbGJ0Yzg3MjNiMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7CisKKwloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIGZhbHNlLCA4KTsKKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIDApOworfQorCitzdGF0aWMgdm9pZCBpbml0X2h3X2NvbmZpZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgYm9vbCBiYWNrdXApCit7CisJdTMyIHUzMnRtcCA9IDA7CisJdTggdTh0bXAgPSAwOworCXUzMiBjbnRfYnRfY2FsX2NoayA9IDA7CisKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwKKwkJICAiW0JUQ29leF0sIDFBbnQgSW5pdCBIVyBDb25maWchIVxuIik7CisKKwlpZiAoYmFja3VwKSB7LyogYmFja3VwIHJmIDB4MWUgdmFsdWUgKi8KKwkJY29leF9kbS0+YmFja3VwX2FyZnJfY250MSA9CisJCQlidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg0MzApOworCQljb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQyID0KKwkJCWJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDQzNCk7CisJCWNvZXhfZG0tPmJhY2t1cF9yZXRyeV9saW1pdCA9CisJCQlidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEpOworCQljb2V4X2RtLT5iYWNrdXBfYW1wZHVfbWF4X3RpbWUgPQorCQkJYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NDU2KTsKKwl9CisKKwkvKiBXaUZpIGdvdG8gc3RhbmRieSB3aGlsZSBHTlRfQlQgMC0tPjEgKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwgMHg3ODApOworCS8qIEJUIGdvdG8gc3RhbmRieSB3aGlsZSBHTlRfQlQgMS0tPjAgKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MiwgMHhmZmZmZiwgMHg1MDApOworCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDk3NCwgMHhmZik7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4OTQ0LCAweDMsIDB4Myk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDkzMCwgMHg3Nyk7CisKKwkvKiBCVCBjYWxpYnJhdGlvbiBjaGVjayAqLworCXdoaWxlIChjbnRfYnRfY2FsX2NoayA8PSAyMCkgeworCQl1MzJ0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg0OWQpOworCQljbnRfYnRfY2FsX2NoaysrOworCQlpZiAodTMydG1wICYgQklUKDApKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwKKwkJCQkgICJbQlRDb2V4XSwgIyMjIyMjIyMjIyMgQlQgY2FsaWJyYXRpb24oY250ID0lZCkgIyMjIyMjIyMjIyNcbiIsCisJCQkJICBjbnRfYnRfY2FsX2Noayk7CisJCQltZGVsYXkoNTApOworCQl9IGVsc2UgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkJICAiW0JUQ29leF0sICoqKioqKioqKiogQlQgTk9UIGNhbGlicmF0aW9uIChjbnQgPSVkKSoqKioqKioqKipcbiIsCisJCQkJICBjbnRfYnRfY2FsX2Noayk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIDB4NzkwWzU6MF0gPSAweDUgKi8KKwl1OHRtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDc5MCk7CisJdTh0bXAgJj0gMHhjMDsKKwl1OHRtcCB8PSAweDU7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc5MCwgdTh0bXApOworCisJLyogRW5hYmxlIGNvdW50ZXIgc3RhdGlzdGljcyAqLworCS8qMHg3NmVbM10gPSAxLCBXTEFOX0FjdCBjb250cm9sIGJ5IFBUQSAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc3OCwgMHgxKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg0MCwgMHgyMCwgMHgxKTsKKworCS8qQW50ZW5uYSBjb25maWcgKi8KKwloYWxidGM4NzIzYjFhbnRfc2V0YW50cGF0aChidGNvZXhpc3QsIEJUQ19BTlRfUEFUSF9QVEEsIHRydWUsIGZhbHNlKTsKKwkvKiBQVEEgcGFyYW1ldGVyICovCisJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAwKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3dpZmlfb2ZmX2h3X2NmZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwkvKiBzZXQgd2xhbl9hY3QgdG8gbG93ICovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHg0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3b3JrIGFyb3VuZCBmdW5jdGlvbiBzdGFydCB3aXRoIHdhX2hhbGJ0Yzg3MjNiMWFudF8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZXh0ZXJuIGZ1bmN0aW9uIHN0YXJ0IHdpdGggRVhoYWxidGM4NzIzYjFhbnRfCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X2luaXRfaHdjb25maWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaW5pdF9od19jb25maWcoYnRjb2V4aXN0LCB0cnVlKTsKK30KKwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfaW5pdF9jb2V4X2RtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkgICJbQlRDb2V4XSwgQ29leCBNZWNoYW5pc20gSW5pdCEhXG4iKTsKKworCWJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtID0gZmFsc2U7CisKKwloYWxidGM4NzIzYjFhbnRfaW5pdF9jb2V4X2RtKGJ0Y29leGlzdCk7CisKKwloYWxidGM4NzIzYjFhbnRfcXVlcnlfYnRfaW5mbyhidGNvZXhpc3QpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9kaXNwbGF5X2NvZXhfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2JvYXJkX2luZm8gKmJyZF9pbmZvID0gJmJ0Y29leGlzdC0+Ym9hcmRfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJdTggKmNsaV9idWYgPSBidGNvZXhpc3QtPmNsaV9idWY7CisJdTggdTh0bXBbNF0sIGksIGJ0X2luZm9fZXh0LCBzdGRtYWNhc2UgPSAwOworCXUxNiB1MTZ0bXBbNF07CisJdTMyIHUzMnRtcFs0XTsKKwlib29sIHJvYW0gPSBmYWxzZSwgc2NhbiA9IGZhbHNlOworCWJvb2wgbGluayA9IGZhbHNlLCB3aWZpX3VuZGVyXzVnID0gZmFsc2U7CisJYm9vbCBidF9oc19vbiA9IGZhbHNlLCB3aWZpX2J1c3kgPSBmYWxzZTsKKwlzMzIgd2lmaV9yc3NpID0gMCwgYnRfaHNfcnNzaSA9IDA7CisJdTMyIHdpZmlfYncsIHdpZmlfdHJhZmZpY19kaXIsIGZhX29mZG0sIGZhX2Njaywgd2lmaV9saW5rX3N0YXR1czsKKwl1OCB3aWZpX2RvdDExX2NobmwsIHdpZmlfaHNfY2hubDsKKwl1MzIgZndfdmVyID0gMCwgYnRfcGF0Y2hfdmVyID0gMDsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXHJcbiA9PT09PT09PT09PT1bQlQgQ29leGlzdCBpbmZvXSA9PT09PT09PT09PT0iKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkgeworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCSAgICJcclxuID09PT09PT09PT09PVtVbmRlciBNYW51YWwgQ29udHJvbF0gPT09PT09PT09PSIpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJICAgIlxyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwl9CisJaWYgKGJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtKSB7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJICAgIlxyXG4gPT09PT09PT09PT09W0NvZXggaXMgU1RPUFBFRF0gPT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXHJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCX0KKworCWlmICghYnJkX2luZm8tPmJ0X2V4aXN0KSB7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiBCVCBub3QgZXhpc3RzICEhISIpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisJCXJldHVybjsKKwl9CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQvICVkIiwKKwkJICAgIkFudCBQRyBOdW0vIEFudCBNZWNoLyBBbnQgUG9zOiAiLAorCQkgICBicmRfaW5mby0+cGdfYW50X251bSwgYnJkX2luZm8tPmJ0ZG1fYW50X251bSwKKwkJICAgYnJkX2luZm8tPmJ0ZG1fYW50X3Bvcyk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJXMgLyAlZCIsCisJCSAgICJCVCBzdGFjay8gaGNpIGV4dCB2ZXIiLAorCQkgICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJICAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfQlRfUEFUQ0hfVkVSLCAmYnRfcGF0Y2hfdmVyKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxyXG4gJS0zNXMgPSAlZF8leC8gMHgleC8gMHgleCglZCkiLAorCQkgICAiQ29leFZlci8gRndWZXIvIFBhdGNoVmVyIiwKKwkJICAgZ2xjb2V4X3Zlcl9kYXRlXzg3MjNiXzFhbnQsIGdsY29leF92ZXJfODcyM2JfMWFudCwKKwkJICAgZndfdmVyLCBidF9wYXRjaF92ZXIsIGJ0X3BhdGNoX3Zlcik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc19vbik7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9XSUZJX0RPVDExX0NITkwsCisJCQkgICAmd2lmaV9kb3QxMV9jaG5sKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1UxX1dJRklfSFNfQ0hOTCwgJndpZmlfaHNfY2hubCk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQgLyAlZCglZCkiLAorCQkgICAiRG90MTEgY2hhbm5lbCAvIEhzQ2hubChIc01vZGUpIiwKKwkJICAgd2lmaV9kb3QxMV9jaG5sLCB3aWZpX2hzX2NobmwsIGJ0X2hzX29uKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlMDJ4ICUwMnggJTAyeCAiLAorCQkgICAiSDJDIFdpZmkgaW5mb3JtIGJ0IGNobmwgSW5mbyIsCisJCSAgIGNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzBdLCBjb2V4X2RtLT53aWZpX2NobmxfaW5mb1sxXSwKKwkJICAgY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMl0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaV9yc3NpKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1M0X0hTX1JTU0ksICZidF9oc19yc3NpKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQiLAorCQkgICAiV2lmaSByc3NpLyBIUyByc3NpIiwgd2lmaV9yc3NpLCBidF9oc19yc3NpKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfU0NBTiwgJnNjYW4pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9MSU5LLCAmbGluayk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1JPQU0sICZyb2FtKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQvICVkICIsCisJCSAgICJXaWZpIGxpbmsvIHJvYW0vIHNjYW4iLCBsaW5rLCByb2FtLCBzY2FuKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfVU5ERVJfNUcsCisJCQkgICAmd2lmaV91bmRlcl81Zyk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0JVU1ksICZ3aWZpX2J1c3kpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9UUkFGRklDX0RJUkVDVElPTiwKKwkJCSAgICZ3aWZpX3RyYWZmaWNfZGlyKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzIC8gJXMvICVzICIsCisJCSAgICJXaWZpIHN0YXR1cyIsICh3aWZpX3VuZGVyXzVnID8gIjVHIiA6ICIyLjRHIiksCisJCSAgICgoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpID8gIkxlZ2FjeSIgOgorCQkJKCgoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSA/ICJIVDQwIiA6ICJIVDIwIikpKSwKKwkJICAgKCghd2lmaV9idXN5KSA/ICJpZGxlIiA6CisJCQkoKEJUQ19XSUZJX1RSQUZGSUNfVFggPT0gd2lmaV90cmFmZmljX2RpcikgPworCQkJCSJ1cGxpbmsiIDogImRvd25saW5rIikpKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfTElOS19TVEFUVVMsCisJCQkgICAmd2lmaV9saW5rX3N0YXR1cyk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvICVkLyAlZC8gJWQvICVkIiwKKwkJICAgInN0YS92d2lmaS9ocy9wMnBHby9wMnBHYyIsCisJCSAgICgod2lmaV9saW5rX3N0YXR1cyAmIFdJRklfU1RBX0NPTk5FQ1RFRCkgPyAxIDogMCksCisJCSAgICgod2lmaV9saW5rX3N0YXR1cyAmIFdJRklfQVBfQ09OTkVDVEVEKSA/IDEgOiAwKSwKKwkJICAgKCh3aWZpX2xpbmtfc3RhdHVzICYgV0lGSV9IU19DT05ORUNURUQpID8gMSA6IDApLAorCQkgICAoKHdpZmlfbGlua19zdGF0dXMgJiBXSUZJX1AyUF9HT19DT05ORUNURUQpID8gMSA6IDApLAorCQkgICAoKHdpZmlfbGlua19zdGF0dXMgJiBXSUZJX1AyUF9HQ19DT05ORUNURUQpID8gMSA6IDApKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSBbJXMvICVkLyAlZF0gIiwKKwkJICAgIkJUIFtzdGF0dXMvIHJzc2kvIHJldHJ5Q250XSIsCisJCSAgICgoYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKSA/ICgiZGlzYWJsZWQiKSA6CisJCSAgICAoKGNvZXhfc3RhLT5jMmhfYnRfaW5xdWlyeV9wYWdlKSA/ICgiaW5xdWlyeS9wYWdlIHNjYW4iKSA6CisJCSAgICAgKChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19OT05fQ09OTkVDVEVEX0lETEUgPT0gY29leF9kbS0+YnRfc3RhdHVzKSA/CisJCSAgICAgICJub24tY29ubmVjdGVkIGlkbGUiIDoKKwkJICAgICAgKChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19DT05ORUNURURfSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpID8KKwkJICAgICAgICJjb25uZWN0ZWQtaWRsZSIgOiAiYnVzeSIpKSkpLAorCQkgICAgICAgY29leF9zdGEtPmJ0X3Jzc2ksIGNvZXhfc3RhLT5idF9yZXRyeV9jbnQpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkIC8gJWQgLyAlZCAvICVkIiwKKwkJIlNDTy9ISUQvUEFOL0EyRFAiLCBidF9saW5rX2luZm8tPnNjb19leGlzdCwKKwkJYnRfbGlua19pbmZvLT5oaWRfZXhpc3QsIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0LAorCQlidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKwlidGNvZXhpc3QtPmJ0Y19kaXNwX2RiZ19tc2coYnRjb2V4aXN0LCBCVENfREJHX0RJU1BfQlRfTElOS19JTkZPKTsKKworCWJ0X2luZm9fZXh0ID0gY29leF9zdGEtPmJ0X2luZm9fZXh0OworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzIiwKKwkJICAgIkJUIEluZm8gQTJEUCByYXRlIiwKKwkJICAgKGJ0X2luZm9fZXh0ICYgQklUKDApKSA/ICJCYXNpYyByYXRlIiA6ICJFRFIgcmF0ZSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWZvciAoaSA9IDA7IGkgPCBCVF9JTkZPX1NSQ184NzIzQl8xQU5UX01BWDsgaSsrKSB7CisJCWlmIChjb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W2ldKSB7CisJCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCQkgICAiXHJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngoJWQpIiwKKwkJCQkgICBnbGJfaW5mb3NyYzg3MjNiMWFudFtpXSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bMF0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzFdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVsyXSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bM10sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzRdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVs1XSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bNl0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoX2NudFtpXSk7CisJCQlDTF9QUklOVEYoY2xpX2J1Zik7CisJCX0KKwl9CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcclxuICUtMzVzID0gJXMvJXMsICgweCV4LzB4JXgpIiwKKwkJICAgIlBTIHN0YXRlLCBJUFMvTFBTLCAobHBzL3Jwd20pIiwKKwkJICAgKChjb2V4X3N0YS0+dW5kZXJfaXBzID8gIklQUyBPTiIgOiAiSVBTIE9GRiIpKSwKKwkJICAgKChjb2V4X3N0YS0+dW5kZXJfbHBzID8gIkxQUyBPTiIgOiAiTFBTIE9GRiIpKSwKKwkJICAgYnRjb2V4aXN0LT5idF9pbmZvLmxwc192YWwsCisJCSAgIGJ0Y29leGlzdC0+YnRfaW5mby5ycHdtX3ZhbCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCWJ0Y29leGlzdC0+YnRjX2Rpc3BfZGJnX21zZyhidGNvZXhpc3QsIEJUQ19EQkdfRElTUF9GV19QV1JfTU9ERV9DTUQpOworCisJaWYgKCFidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sKSB7CisJCS8qIFN3IG1lY2hhbmlzbQkqLworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMiLAorCQkJICAgIj09PT09PT09PT09PVtTdyBtZWNoYW5pc21dID09PT09PT09PT09PSIpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvIiwKKwkJCSAgICJTTVtMb3dQZW5hbHR5UkFdIiwgY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzLyAlcy8gJWQgIiwKKwkJCSAgICJEZWxCQS8gQnRDdHJsQWdnLyBBZ2dTaXplIiwKKwkJCSAgIChidGNvZXhpc3QtPmJ0X2luZm8ucmVqZWN0X2FnZ19wa3QgPyAiWWVzIiA6ICJObyIpLAorCQkJICAgKGJ0Y29leGlzdC0+YnRfaW5mby5iX2J0X2N0cmxfYnVmX3NpemUgPyAiWWVzIiA6ICJObyIpLAorCQkJICAgYnRjb2V4aXN0LT5idF9pbmZvLmFnZ19idWZfc2l6ZSk7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4ICIsCisJCQkgICAiUmF0ZSBNYXNrIiwgYnRjb2V4aXN0LT5idF9pbmZvLnJhX21hc2spOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkJLyogRncgbWVjaGFuaXNtCSovCisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyIsCisJCQkgICAiPT09PT09PT09PT09W0Z3IG1lY2hhbmlzbV0gPT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKworCQlzdGRtYWNhc2UgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXHJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCBjYXNlLSVkIChhdXRvOiVkKSIsCisJCQkgICAiUFMgVERNQSIsIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVswXSwKKwkJCSAgIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsxXSwgY29leF9kbS0+cHNfdGRtYV9wYXJhWzJdLAorCQkJICAgY29leF9kbS0+cHNfdGRtYV9wYXJhWzNdLCBjb2V4X2RtLT5wc190ZG1hX3BhcmFbNF0sCisJCQkgICBzdGRtYWNhc2UsIGNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQgIiwKKwkJCSAgICJJZ25XbGFuQWN0IiwgY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCk7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4ICIsCisJCQkgICAiTGF0ZXN0IGVycm9yIGNvbmRpdGlvbihzaG91bGQgYmUgMCkiLAorCQkJICAgY29leF9kbS0+ZXJyb3JfY29uZGl0aW9uKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCX0KKworCS8qIEh3IHNldHRpbmcgKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMiLAorCQkgICAiPT09PT09PT09PT09W0h3IHNldHRpbmddID09PT09PT09PT09PSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvMHgleC8weCV4LzB4JXgiLAorCQkgICAiYmFja3VwIEFSRlIxL0FSRlIyL1JML0FNYXhUaW1lIiwgY29leF9kbS0+YmFja3VwX2FyZnJfY250MSwKKwkJICAgY29leF9kbS0+YmFja3VwX2FyZnJfY250MiwgY29leF9kbS0+YmFja3VwX3JldHJ5X2xpbWl0LAorCQkgICBjb2V4X2RtLT5iYWNrdXBfYW1wZHVfbWF4X3RpbWUpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDQzMCk7CisJdTMydG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NDM0KTsKKwl1MTZ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEpOworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NDU2KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LzB4JXgvMHgleC8weCV4IiwKKwkJICAgIjB4NDMwLzB4NDM0LzB4NDJhLzB4NDU2IiwKKwkJICAgdTMydG1wWzBdLCB1MzJ0bXBbMV0sIHUxNnRtcFswXSwgdTh0bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4Nzc4KTsKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg2Y2MpOworCXUzMnRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDg4MCk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICIweDc3OC8weDZjYy8weDg4MFsyOToyNV0iLCB1OHRtcFswXSwgdTMydG1wWzBdLAorCQkgICAodTMydG1wWzFdICYgMHgzZTAwMDAwMCkgPj4gMjUpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDk0OCk7CisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg2Nyk7CisJdTh0bXBbMV0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg3NjUpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4IiwKKwkJICAgIjB4OTQ4LyAweDY3WzVdIC8gMHg3NjUiLAorCQkgICB1MzJ0bXBbMF0sICgodTh0bXBbMF0gJiAweDIwKSA+PiA1KSwgdTh0bXBbMV0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDkyYyk7CisJdTMydG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4OTMwKTsKKwl1MzJ0bXBbMl0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg5NDQpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgiLAorCQkgICAiMHg5MmNbMTowXS8gMHg5MzBbNzowXS8weDk0NFsxOjBdIiwKKwkJICAgdTMydG1wWzBdICYgMHgzLCB1MzJ0bXBbMV0gJiAweGZmLCB1MzJ0bXBbMl0gJiAweDMpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4MzkpOworCXU4dG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NDApOworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDRjKTsKKwl1OHRtcFsyXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDY0KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4LyAweCV4IiwKKwkJICAgIjB4MzhbMTFdLzB4NDAvMHg0Y1syNDoyM10vMHg2NFswXSIsCisJCSAgICgodTh0bXBbMF0gJiAweDgpPj4zKSwgdTh0bXBbMV0sCisJCSAgICgodTMydG1wWzBdICYgMHgwMTgwMDAwMCkgPj4gMjMpLCB1OHRtcFsyXSAmIDB4MSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTMydG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NTUwKTsKKwl1OHRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDUyMik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleCIsCisJCSAgICIweDU1MChiY24gY3RybCkvMHg1MjIiLCB1MzJ0bXBbMF0sIHU4dG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhjNTApOworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NDljKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4IiwKKwkJICAgIjB4YzUwKGRpZykvMHg0OWMobnVsbC1kcm9wKSIsIHUzMnRtcFswXSAmIDB4ZmYsIHU4dG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhkYTApOworCXUzMnRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweGRhNCk7CisJdTMydG1wWzJdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4ZGE4KTsKKwl1MzJ0bXBbM10gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhjZjApOworCisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHhhNWIpOworCXU4dG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4YTVjKTsKKworCWZhX29mZG0gPSAoKHUzMnRtcFswXSAmIDB4ZmZmZjAwMDApID4+IDE2KSArCisJCSAgKCh1MzJ0bXBbMV0gJiAweGZmZmYwMDAwKSA+PiAxNikgKworCQkgICAodTMydG1wWzFdICYgMHhmZmZmKSArCisJCSAgICh1MzJ0bXBbMl0gJiAweGZmZmYpICsKKwkJICAoKHUzMnRtcFszXSAmIDB4ZmZmZjAwMDApID4+IDE2KSArCisJCSAgICh1MzJ0bXBbM10gJiAweGZmZmYpOworCWZhX2NjayA9ICh1OHRtcFswXSA8PCA4KSArIHU4dG1wWzFdOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICJPRkRNLUNDQS9PRkRNLUZBL0NDSy1GQSIsCisJCSAgIHUzMnRtcFswXSAmIDB4ZmZmZiwgZmFfb2ZkbSwgZmFfY2NrKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg2YzApOworCXUzMnRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDZjNCk7CisJdTMydG1wWzJdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NmM4KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4IiwKKwkJICAgIjB4NmMwLzB4NmM0LzB4NmM4KGNvZXhUYWJsZSkiLAorCQkgICB1MzJ0bXBbMF0sIHUzMnRtcFsxXSwgdTMydG1wWzJdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQiLAorCQkgICAiMHg3NzAoaGlnaC1wcmkgcngvdHgpIiwgY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfcngsCisJCSAgIGNvZXhfc3RhLT5oaWdoX3ByaW9yaXR5X3R4KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvICVkIiwKKwkJICAgIjB4Nzc0KGxvdy1wcmkgcngvdHgpIiwgY29leF9zdGEtPmxvd19wcmlvcml0eV9yeCwKKwkJICAgY29leF9zdGEtPmxvd19wcmlvcml0eV90eCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzg3MjNCXzFBTlQgPT0gMSkKKwloYWxidGM4NzIzYjFhbnRfbW9uaXRvcl9idF9jdHIoYnRjb2V4aXN0KTsKKyNlbmRpZgorCWJ0Y29leGlzdC0+YnRjX2Rpc3BfZGJnX21zZyhidGNvZXhpc3QsIEJUQ19EQkdfRElTUF9DT0VYX1NUQVRJU1RJQ1MpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9pcHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sIHx8IGJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtKQorCQlyZXR1cm47CisKKwlpZiAoQlRDX0lQU19FTlRFUiA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgSVBTIEVOVEVSIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9pcHMgPSB0cnVlOworCisJCWhhbGJ0Yzg3MjNiMWFudF9zZXRhbnRwYXRoKGJ0Y29leGlzdCwgQlRDX0FOVF9QQVRIX0JULAorCQkJCQkgICBmYWxzZSwgdHJ1ZSk7CisJCS8qIHNldCBQVEEgY29udHJvbCAqLworCQloYWxidGM4NzIzYjFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMCk7CisJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwKKwkJCQkJCSAgICAgTk9STUFMX0VYRUMsIDApOworCQloYWxidGM4NzIzYjFhbnRfd2lmaV9vZmZfaHdfY2ZnKGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChCVENfSVBTX0xFQVZFID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBJUFMgTEVBVkUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2lwcyA9IGZhbHNlOworCisJCWluaXRfaHdfY29uZmlnKGJ0Y29leGlzdCwgZmFsc2UpOworCQloYWxidGM4NzIzYjFhbnRfaW5pdF9jb2V4X2RtKGJ0Y29leGlzdCk7CisJCWhhbGJ0Yzg3MjNiMWFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7CisJfQorfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9scHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sIHx8IGJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtKQorCQlyZXR1cm47CisKKwlpZiAoQlRDX0xQU19FTkFCTEUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIExQUyBFTkFCTEUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2xwcyA9IHRydWU7CisJfSBlbHNlIGlmIChCVENfTFBTX0RJU0FCTEUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIExQUyBESVNBQkxFIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9scHMgPSBmYWxzZTsKKwl9Cit9CisKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X3NjYW5fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWJvb2wgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZSwgYnRfaHNfb24gPSBmYWxzZTsKKwl1MzIgd2lmaV9saW5rX3N0YXR1cyA9IDA7CisJdTMyIG51bV9vZl93aWZpX2xpbmsgPSAwOworCWJvb2wgYnRfY3RybF9hZ2dfYnVmX3NpemUgPSBmYWxzZTsKKwl1OCBhZ2dfYnVmX3NpemUgPSA1OworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gfHwKKwkgICAgYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJICAgJndpZmlfY29ubmVjdGVkKTsKKworCWhhbGJ0Yzg3MjNiMWFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfTElOS19TVEFUVVMsCisJCQkgICAmd2lmaV9saW5rX3N0YXR1cyk7CisJbnVtX29mX3dpZmlfbGluayA9IHdpZmlfbGlua19zdGF0dXMgPj4gMTY7CisJaWYgKG51bV9vZl93aWZpX2xpbmsgPj0gMikgeworCQloYWxidGM4NzIzYjFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwLCAwLCAwLCAwKTsKKwkJaGFsYnRjODcyM2IxYW50X2xpbWl0ZWRfcngoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsCisJCQkJCSAgIGJ0X2N0cmxfYWdnX2J1Zl9zaXplLCBhZ2dfYnVmX3NpemUpOworCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfbXVsdGlwb3J0KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UpIHsKKwkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9idF9pbnF1aXJ5KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGJ0X2hzX29uKSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25faHMoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChCVENfU0NBTl9TVEFSVCA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgU0NBTiBTVEFSVCBub3RpZnlcbiIpOworCQlpZiAoIXdpZmlfY29ubmVjdGVkKQkvKiBub24tY29ubmVjdGVkIHNjYW4gKi8KKwkJCWFjdGlvbl93aWZpX25vdF9jb25uZWN0ZWRfc2NhbihidGNvZXhpc3QpOworCQllbHNlCS8qIHdpZmkgaXMgY29ubmVjdGVkICovCisJCQlhY3Rpb25fd2lmaV9jb25uZWN0ZWRfc2NhbihidGNvZXhpc3QpOworCX0gZWxzZSBpZiAoQlRDX1NDQU5fRklOSVNIID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBTQ0FOIEZJTklTSCBub3RpZnlcbiIpOworCQlpZiAoIXdpZmlfY29ubmVjdGVkKQkvKiBub24tY29ubmVjdGVkIHNjYW4gKi8KKwkJCWFjdGlvbl93aWZpX25vdF9jb25uZWN0ZWQoYnRjb2V4aXN0KTsKKwkJZWxzZQorCQkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZChidGNvZXhpc3QpOworCX0KK30KKwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfY29ubmVjdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCBidF9oc19vbiA9IGZhbHNlOworCXUzMiB3aWZpX2xpbmtfc3RhdHVzID0gMDsKKwl1MzIgbnVtX29mX3dpZmlfbGluayA9IDA7CisJYm9vbCBidF9jdHJsX2FnZ19idWZfc2l6ZSA9IGZhbHNlOworCXU4IGFnZ19idWZfc2l6ZSA9IDU7CisKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCB8fCBidGNvZXhpc3QtPnN0b3BfY29leF9kbSB8fAorCSAgICBidGNvZXhpc3QtPmJ0X2luZm8uYnRfZGlzYWJsZWQpCisJCXJldHVybjsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9MSU5LX1NUQVRVUywKKwkJCSAgICZ3aWZpX2xpbmtfc3RhdHVzKTsKKwludW1fb2Zfd2lmaV9saW5rID0gd2lmaV9saW5rX3N0YXR1cz4+MTY7CisJaWYgKG51bV9vZl93aWZpX2xpbmsgPj0gMikgeworCQloYWxidGM4NzIzYjFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwLCAwLCAwLCAwKTsKKwkJaGFsYnRjODcyM2IxYW50X2xpbWl0ZWRfcngoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsCisJCQkJCSAgIGJ0X2N0cmxfYWdnX2J1Zl9zaXplLCBhZ2dfYnVmX3NpemUpOworCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfbXVsdGlwb3J0KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UpIHsKKwkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9idF9pbnF1aXJ5KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGJ0X2hzX29uKSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25faHMoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChCVENfQVNTT0NJQVRFX1NUQVJUID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBDT05ORUNUIFNUQVJUIG5vdGlmeVxuIik7CisJCWFjdGlvbl93aWZpX25vdF9jb25uZWN0ZWRfYXNzb19hdXRoKGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChCVENfQVNTT0NJQVRFX0ZJTklTSCA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgQ09OTkVDVCBGSU5JU0ggbm90aWZ5XG4iKTsKKworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisJCWlmICghd2lmaV9jb25uZWN0ZWQpIC8qIG5vbi1jb25uZWN0ZWQgc2NhbiAqLworCQkJYWN0aW9uX3dpZmlfbm90X2Nvbm5lY3RlZChidGNvZXhpc3QpOworCQllbHNlCisJCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfY29ubmVjdGVkKGJ0Y29leGlzdCk7CisJfQorfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgdTggdHlwZSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzNdID0gezB9OworCXUzMiB3aWZpX2J3OworCXU4IHdpZmljZW50cmFsY2hubDsKKworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sIHx8IGJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtIHx8CisJICAgIGJ0Y29leGlzdC0+YnRfaW5mby5idF9kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKEJUQ19NRURJQV9DT05ORUNUID09IHR5cGUpCisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgTUVESUEgY29ubmVjdCBub3RpZnlcbiIpOworCWVsc2UKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBNRURJQSBkaXNjb25uZWN0IG5vdGlmeVxuIik7CisKKwkvKiBvbmx5IDIuNEcgd2UgbmVlZCB0byBpbmZvcm0gYnQgdGhlIGNobmwgbWFzayAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9DRU5UUkFMX0NITkwsCisJCQkgICAmd2lmaWNlbnRyYWxjaG5sKTsKKworCWlmICgoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkgJiYKKwkgICAgKHdpZmljZW50cmFsY2hubCA8PSAxNCkpIHsKKwkJaDJjX3BhcmFtZXRlclswXSA9IDB4MDsKKwkJaDJjX3BhcmFtZXRlclsxXSA9IHdpZmljZW50cmFsY2hubDsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisJCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpCisJCQloMmNfcGFyYW1ldGVyWzJdID0gMHgzMDsKKwkJZWxzZQorCQkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MjA7CisJfQorCisJY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMF0gPSBoMmNfcGFyYW1ldGVyWzBdOworCWNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzFdID0gaDJjX3BhcmFtZXRlclsxXTsKKwljb2V4X2RtLT53aWZpX2NobmxfaW5mb1syXSA9IGgyY19wYXJhbWV0ZXJbMl07CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIEZXIHdyaXRlIDB4NjYgPSAweCV4XG4iLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0gPDwgMTYgfCBoMmNfcGFyYW1ldGVyWzFdIDw8IDggfAorCQkgIGgyY19wYXJhbWV0ZXJbMl0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY2LCAzLCBoMmNfcGFyYW1ldGVyKTsKK30KKwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICB1OCB0eXBlKQoreworCWJvb2wgYnRfaHNfb24gPSBmYWxzZTsKKwl1MzIgd2lmaV9saW5rX3N0YXR1cyA9IDA7CisJdTMyIG51bV9vZl93aWZpX2xpbmsgPSAwOworCWJvb2wgYnRfY3RybF9hZ2dfYnVmX3NpemUgPSBmYWxzZTsKKwl1OCBhZ2dfYnVmX3NpemUgPSA1OworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gfHwKKwkgICAgYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfTElOS19TVEFUVVMsCisJCQkgICAmd2lmaV9saW5rX3N0YXR1cyk7CisJbnVtX29mX3dpZmlfbGluayA9IHdpZmlfbGlua19zdGF0dXMgPj4gMTY7CisJaWYgKG51bV9vZl93aWZpX2xpbmsgPj0gMikgeworCQloYWxidGM4NzIzYjFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwLCAwLCAwLCAwKTsKKwkJaGFsYnRjODcyM2IxYW50X2xpbWl0ZWRfcngoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsCisJCQkJCSAgIGJ0X2N0cmxfYWdnX2J1Zl9zaXplLCBhZ2dfYnVmX3NpemUpOworCQloYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfbXVsdGlwb3J0KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9CisKKwljb2V4X3N0YS0+c3BlY2lhbF9wa3RfcGVyaW9kX2NudCA9IDA7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UpIHsKKwkJaGFsYnRjODcyM2IxYW50X2FjdGlvbl9idF9pbnF1aXJ5KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGJ0X2hzX29uKSB7CisJCWhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25faHMoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChCVENfUEFDS0VUX0RIQ1AgPT0gdHlwZSB8fAorCSAgICBCVENfUEFDS0VUX0VBUE9MID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBzcGVjaWFsIFBhY2tldCglZCkgbm90aWZ5XG4iLCB0eXBlKTsKKwkJYWN0aW9uX3dpZmlfY29ubmVjdGVkX3NwZWNpYWxfcGFja2V0KGJ0Y29leGlzdCk7CisJfQorfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggKnRtcF9idWYsIHU4IGxlbmd0aCkKK3sKKwl1OCBidF9pbmZvID0gMDsKKwl1OCBpLCByc3Bfc291cmNlID0gMDsKKwlib29sIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CisJYm9vbCBidF9idXN5ID0gZmFsc2U7CisKKwljb2V4X3N0YS0+YzJoX2J0X2luZm9fcmVxX3NlbnQgPSBmYWxzZTsKKworCXJzcF9zb3VyY2UgPSB0bXBfYnVmWzBdICYgMHhmOworCWlmIChyc3Bfc291cmNlID49IEJUX0lORk9fU1JDXzg3MjNCXzFBTlRfTUFYKQorCQlyc3Bfc291cmNlID0gQlRfSU5GT19TUkNfODcyM0JfMUFOVF9XSUZJX0ZXOworCWNvZXhfc3RhLT5idF9pbmZvX2MyaF9jbnRbcnNwX3NvdXJjZV0rKzsKKworCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCSAgIltCVENvZXhdLCBCdCBpbmZvWyVkXSwgbGVuZ3RoID0lZCwgaGV4IGRhdGEgPVsiLAorCQkgIHJzcF9zb3VyY2UsIGxlbmd0aCk7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bfc291cmNlXVtpXSA9IHRtcF9idWZbaV07CisJCWlmIChpID09IDEpCisJCQlidF9pbmZvID0gdG1wX2J1ZltpXTsKKwkJaWYgKGkgPT0gbGVuZ3RoIC0gMSkKKwkJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkJICAiMHglMDJ4XVxuIiwgdG1wX2J1ZltpXSk7CisJCWVsc2UKKwkJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkJICAiMHglMDJ4LCAiLCB0bXBfYnVmW2ldKTsKKwl9CisKKwlpZiAoQlRfSU5GT19TUkNfODcyM0JfMUFOVF9XSUZJX0ZXICE9IHJzcF9zb3VyY2UpIHsKKwkJY29leF9zdGEtPmJ0X3JldHJ5X2NudCA9CS8qIFszOjBdICovCisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1bMl0gJiAweGY7CisKKwkJY29leF9zdGEtPmJ0X3Jzc2kgPQorCQkJY29leF9zdGEtPmJ0X2luZm9fYzJoW3JzcF9zb3VyY2VdWzNdICogMiArIDEwOworCisJCWNvZXhfc3RhLT5idF9pbmZvX2V4dCA9CisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1bNF07CisKKwkJLyogSGVyZSB3ZSBuZWVkIHRvIHJlc2VuZCBzb21lIHdpZmkgaW5mbyB0byBCVAorCQkgKiBiZWNhdXNlIGJ0IGlzIHJlc2V0IGFuZCBsb3NzIG9mIHRoZSBpbmZvLiovCisJCWlmIChjb2V4X3N0YS0+YnRfaW5mb19leHQgJiBCSVQoMSkpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQlQgZXh0IGluZm8gYml0MSBjaGVjaywgc2VuZCB3aWZpIEJXJkNobmwgdG8gQlQhIVxuIik7CisJCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCQkJaWYgKHdpZmlfY29ubmVjdGVkKQorCQkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkgICAgIEJUQ19NRURJQV9DT05ORUNUKTsKKwkJCWVsc2UKKwkJCQlleF9oYWxidGM4NzIzYjFhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJICBCVENfTUVESUFfRElTQ09OTkVDVCk7CisJCX0KKworCQlpZiAoY29leF9zdGEtPmJ0X2luZm9fZXh0ICYgQklUKDMpKSB7CisJCQlpZiAoIWJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgJiYKKwkJCSAgICAhYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0pIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBCVCBleHQgaW5mbyBiaXQzIGNoZWNrLCBzZXQgQlQgTk9UIGlnbm9yZSBXbGFuIGFjdGl2ZSEhXG4iKTsKKwkJCQloYWxidGM4NzIzYjFhbnRfaWdub3JlX3dsYW5fYWN0KGJ0Y29leGlzdCwKKwkJCQkJCQkJRk9SQ0VfRVhFQywKKwkJCQkJCQkJZmFsc2UpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQlQgYWxyZWFkeSBOT1QgaWdub3JlIFdsYW4gYWN0aXZlLCBkbyBub3RoaW5nIGhlcmUuKi8KKwkJfQorI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzg3MjNCXzFBTlQgPT0gMCkKKwkJaWYgKGNvZXhfc3RhLT5idF9pbmZvX2V4dCAmIEJJVCg0KSkgeworCQkJLyogQlQgYXV0byByZXBvcnQgYWxyZWFkeSBlbmFibGVkLCBkbyBub3RoaW5nICovCisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjFhbnRfYnRfYXV0b19yZXBvcnQoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLAorCQkJCQkJICAgICAgIHRydWUpOworCQl9CisjZW5kaWYKKwl9CisKKwkvKiBjaGVjayBCSVQoMikgZmlyc3QgPT0+IGNoZWNrIGlmIGJ0IGlzIHVuZGVyIGlucXVpcnkgb3IgcGFnZSBzY2FuICovCisJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg3MjNCXzFBTlRfQl9JTlFfUEFHRSkKKwkJY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UgPSB0cnVlOworCWVsc2UKKwkJY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UgPSBmYWxzZTsKKworCS8qIHNldCBsaW5rIGV4aXN0IHN0YXR1cyAqLworCWlmICghKGJ0X2luZm8gJiBCVF9JTkZPXzg3MjNCXzFBTlRfQl9DT05ORUNUSU9OKSkgeworCQljb2V4X3N0YS0+YnRfbGlua19leGlzdCA9IGZhbHNlOworCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5oaWRfZXhpc3QgPSBmYWxzZTsKKwkJY29leF9zdGEtPnNjb19leGlzdCA9IGZhbHNlOworCX0gZWxzZSB7IC8qIGNvbm5lY3Rpb24gZXhpc3RzICovCisJCWNvZXhfc3RhLT5idF9saW5rX2V4aXN0ID0gdHJ1ZTsKKwkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg3MjNCXzFBTlRfQl9GVFApCisJCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJY29leF9zdGEtPnBhbl9leGlzdCA9IGZhbHNlOworCQlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODcyM0JfMUFOVF9CX0EyRFApCisJCQljb2V4X3N0YS0+YTJkcF9leGlzdCA9IHRydWU7CisJCWVsc2UKKwkJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gZmFsc2U7CisJCWlmIChidF9pbmZvICYgQlRfSU5GT184NzIzQl8xQU5UX0JfSElEKQorCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IHRydWU7CisJCWVsc2UKKwkJCWNvZXhfc3RhLT5oaWRfZXhpc3QgPSBmYWxzZTsKKwkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg3MjNCXzFBTlRfQl9TQ09fRVNDTykKKwkJCWNvZXhfc3RhLT5zY29fZXhpc3QgPSB0cnVlOworCQllbHNlCisJCQljb2V4X3N0YS0+c2NvX2V4aXN0ID0gZmFsc2U7CisJfQorCisJaGFsYnRjODcyM2IxYW50X3VwZGF0ZV9idF9saW5rX2luZm8oYnRjb2V4aXN0KTsKKworCWlmICghKGJ0X2luZm8mQlRfSU5GT184NzIzQl8xQU5UX0JfQ09OTkVDVElPTikpIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIEJUIE5vbi1Db25uZWN0ZWQgaWRsZSFcbiIpOworCS8qIGNvbm5lY3Rpb24gZXhpc3RzIGJ1dCBubyBidXN5ICovCisJfSBlbHNlIGlmIChidF9pbmZvID09IEJUX0lORk9fODcyM0JfMUFOVF9CX0NPTk5FQ1RJT04pIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEU7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgQ29ubmVjdGVkLWlkbGUhISFcbiIpOworCX0gZWxzZSBpZiAoKGJ0X2luZm8gJiBCVF9JTkZPXzg3MjNCXzFBTlRfQl9TQ09fRVNDTykgfHwKKwkJKGJ0X2luZm8gJiBCVF9JTkZPXzg3MjNCXzFBTlRfQl9TQ09fQlVTWSkpIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfU0NPX0JVU1k7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgU0NPIGJ1c3khISFcbiIpOworCX0gZWxzZSBpZiAoYnRfaW5mbyAmIEJUX0lORk9fODcyM0JfMUFOVF9CX0FDTF9CVVNZKSB7CisJCWlmIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSAhPSBjb2V4X2RtLT5idF9zdGF0dXMpCisJCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfQUNMX0JVU1k7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgQUNMIGJ1c3khISFcbiIpOworCX0gZWxzZSB7CisJCWNvZXhfZG0tPmJ0X3N0YXR1cyA9CisJCQlCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19NQVg7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgTm9uLURlZmluZWQgc3RhdGUhIVxuIik7CisJfQorCisJaWYgKChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfU0NPX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSkKKwkJYnRfYnVzeSA9IHRydWU7CisJZWxzZQorCQlidF9idXN5ID0gZmFsc2U7CisJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9CTF9CVF9UUkFGRklDX0JVU1ksICZidF9idXN5KTsKKworCWhhbGJ0Yzg3MjNiMWFudF9ydW5fY29leGlzdF9tZWNoYW5pc20oYnRjb2V4aXN0KTsKK30KKwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfaGFsdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwgIltCVENvZXhdLCBIYWx0IG5vdGlmeVxuIik7CisKKwlidGNvZXhpc3QtPnN0b3BfY29leF9kbSA9IHRydWU7CisKKwloYWxidGM4NzIzYjFhbnRfc2V0YW50cGF0aChidGNvZXhpc3QsIEJUQ19BTlRfUEFUSF9CVCwgZmFsc2UsIHRydWUpOworCisJaGFsYnRjODcyM2IxYW50X3dpZmlfb2ZmX2h3X2NmZyhidGNvZXhpc3QpOworCWhhbGJ0Yzg3MjNiMWFudF9pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCB0cnVlKTsKKworCWhhbGJ0Yzg3MjNiMWFudF9wb3dlcl9zYXZlX3N0YXRlKGJ0Y29leGlzdCwgQlRDX1BTX1dJRklfTkFUSVZFLAorCQkJCQkgMHgwLCAweDApOworCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgZmFsc2UsIDApOworCisJZXhfaGFsYnRjODcyM2IxYW50X21lZGlhX3N0YXR1c19ub3RpZnkoYnRjb2V4aXN0LCBCVENfTUVESUFfRElTQ09OTkVDVCk7Cit9CisKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X3BucF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHBucF9zdGF0ZSkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLCAiW0JUQ29leF0sIFBucCBub3RpZnlcbiIpOworCisJaWYgKEJUQ19XSUZJX1BOUF9TTEVFUCA9PSBwbnBfc3RhdGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBQbnAgbm90aWZ5IHRvIFNMRUVQXG4iKTsKKwkJYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gPSB0cnVlOworCQloYWxidGM4NzIzYjFhbnRfc2V0YW50cGF0aChidGNvZXhpc3QsIEJUQ19BTlRfUEFUSF9CVCwgZmFsc2UsCisJCQkJCSAgIHRydWUpOworCQloYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwKKwkJCQkJCSAweDAsIDB4MCk7CisJCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCAwKTsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMik7CisJCWhhbGJ0Yzg3MjNiMWFudF93aWZpX29mZl9od19jZmcoYnRjb2V4aXN0KTsKKwl9IGVsc2UgaWYgKEJUQ19XSUZJX1BOUF9XQUtFX1VQID09IHBucF9zdGF0ZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIFBucCBub3RpZnkgdG8gV0FLRSBVUFxuIik7CisJCWJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtID0gZmFsc2U7CisJCWluaXRfaHdfY29uZmlnKGJ0Y29leGlzdCwgZmFsc2UpOworCQloYWxidGM4NzIzYjFhbnRfaW5pdF9jb2V4X2RtKGJ0Y29leGlzdCk7CisJCWhhbGJ0Yzg3MjNiMWFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7CisJfQorfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9jb2V4X2RtX3Jlc2V0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJICAiW0JUQ29leF0sICoqKioqKioqKioqKioqKioqQ29leCBETSBSZXNldCoqKioqKioqKioqKioqKipcbiIpOworCisJaW5pdF9od19jb25maWcoYnRjb2V4aXN0LCBmYWxzZSk7CisJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsIDB4ZmZmZmYsIDB4MCk7CisJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDIsIDB4ZmZmZmYsIDB4MCk7CisJaGFsYnRjODcyM2IxYW50X2luaXRfY29leF9kbShidGNvZXhpc3QpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9wZXJpb2RpY2FsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYm9hcmRfaW5mbyAqYnJkX2luZm8gPSAmYnRjb2V4aXN0LT5ib2FyZF9pbmZvOworCXN0cnVjdCBidGNfc3RhY2tfaW5mbyAqc3RhY2tfaW5mbyA9ICZidGNvZXhpc3QtPnN0YWNrX2luZm87CisJc3RhdGljIHU4IGRpc192ZXJfaW5mb19jbnQ7CisJdTMyIGZ3X3ZlciA9IDAsIGJ0X3BhdGNoX3ZlciA9IDA7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCA9PT09PT09PT09PT09PT09PT09PT09PT09PSBQZXJpb2RpY2FsID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisKKwlpZiAoZGlzX3Zlcl9pbmZvX2NudCA8PSA1KSB7CisJCWRpc192ZXJfaW5mb19jbnQgKz0gMTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJbQlRDb2V4XSwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIEFudCBQRyBOdW0vIEFudCBNZWNoLyBBbnQgUG9zID0gJWQvICVkLyAlZFxuIiwKKwkJCSAgYnJkX2luZm8tPnBnX2FudF9udW0sIGJyZF9pbmZvLT5idGRtX2FudF9udW0sCisJCQkgIGJyZF9pbmZvLT5idGRtX2FudF9wb3MpOworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwKKwkJCSAgIltCVENvZXhdLCBCVCBzdGFjay8gaGNpIGV4dCB2ZXIgPSAlcyAvICVkXG4iLAorCQkJICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJCSAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X0JUX1BBVENIX1ZFUiwKKwkJCQkgICAmYnRfcGF0Y2hfdmVyKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0ZXX1ZFUiwgJmZ3X3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIENvZXhWZXIvIEZ3VmVyLyBQYXRjaFZlciA9ICVkXyV4LyAweCV4LyAweCV4KCVkKVxuIiwKKwkJCSAgZ2xjb2V4X3Zlcl9kYXRlXzg3MjNiXzFhbnQsCisJCQkgIGdsY29leF92ZXJfODcyM2JfMWFudCwgZndfdmVyLAorCQkJICBidF9wYXRjaF92ZXIsIGJ0X3BhdGNoX3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCX0KKworI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzg3MjNCXzFBTlQgPT0gMCkKKwloYWxidGM4NzIzYjFhbnRfcXVlcnlfYnRfaW5mbyhidGNvZXhpc3QpOworCWhhbGJ0Yzg3MjNiMWFudF9tb25pdG9yX2J0X2N0cihidGNvZXhpc3QpOworCWhhbGJ0Yzg3MjNiMWFudF9tb25pdG9yX2J0X2VuYWJsZV9kaXNhYmxlKGJ0Y29leGlzdCk7CisjZWxzZQorCWlmIChpc193aWZpX3N0YXR1c19jaGFuZ2VkKGJ0Y29leGlzdCkgfHwKKwkgICAgY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCkgeworCQloYWxidGM4NzIzYjFhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKGJ0Y29leGlzdCk7CisJfQorCisJY29leF9zdGEtPnNwZWNpYWxfcGt0X3BlcmlvZF9jbnQrKzsKKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMWFudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZWQzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuaApAQCAtMCwwICsxLDE2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZSBmb2xsb3dpbmcgaXMgZm9yIDg3MjNCIDFBTlQgQlQgQ28tZXhpc3QgZGVmaW5pdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCUJUX0FVVE9fUkVQT1JUX09OTFlfODcyM0JfMUFOVAkJCTEKKworI2RlZmluZQlCVF9JTkZPXzg3MjNCXzFBTlRfQl9GVFAJCQlCSVQoNykKKyNkZWZpbmUJQlRfSU5GT184NzIzQl8xQU5UX0JfQTJEUAkJCUJJVCg2KQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzFBTlRfQl9ISUQJCQlCSVQoNSkKKyNkZWZpbmUJQlRfSU5GT184NzIzQl8xQU5UX0JfU0NPX0JVU1kJCQlCSVQoNCkKKyNkZWZpbmUJQlRfSU5GT184NzIzQl8xQU5UX0JfQUNMX0JVU1kJCQlCSVQoMykKKyNkZWZpbmUJQlRfSU5GT184NzIzQl8xQU5UX0JfSU5RX1BBR0UJCQlCSVQoMikKKyNkZWZpbmUJQlRfSU5GT184NzIzQl8xQU5UX0JfU0NPX0VTQ08JCQlCSVQoMSkKKyNkZWZpbmUJQlRfSU5GT184NzIzQl8xQU5UX0JfQ09OTkVDVElPTgkJCUJJVCgwKQorCisjZGVmaW5lCUJUX0lORk9fODcyM0JfMUFOVF9BMkRQX0JBU0lDX1JBVEUoX0JUX0lORk9fRVhUXykJXAorCQkoKChfQlRfSU5GT19FWFRfJkJJVCgwKSkpID8gdHJ1ZSA6IGZhbHNlKQorCisjZGVmaW5lCUJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84NzIzQl8xQU5UCQkyCisKK2VudW0gQlRfSU5GT19TUkNfODcyM0JfMUFOVCB7CisJQlRfSU5GT19TUkNfODcyM0JfMUFOVF9XSUZJX0ZXCQkJPSAweDAsCisJQlRfSU5GT19TUkNfODcyM0JfMUFOVF9CVF9SU1AJCQk9IDB4MSwKKwlCVF9JTkZPX1NSQ184NzIzQl8xQU5UX0JUX0FDVElWRV9TRU5ECQk9IDB4MiwKKwlCVF9JTkZPX1NSQ184NzIzQl8xQU5UX01BWAorfTsKKworZW51bSBCVF84NzIzQl8xQU5UX0JUX1NUQVRVUyB7CisJQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFCT0gMHgwLAorCUJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFCQk9IDB4MSwKKwlCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19JTlFfUEFHRQkJPSAweDIsCisJQlRfODcyM0JfMUFOVF9CVF9TVEFUVVNfQUNMX0JVU1kJCT0gMHgzLAorCUJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX1NDT19CVVNZCQk9IDB4NCwKKwlCVF84NzIzQl8xQU5UX0JUX1NUQVRVU19BQ0xfU0NPX0JVU1kJCT0gMHg1LAorCUJUXzg3MjNCXzFBTlRfQlRfU1RBVFVTX01BWAorfTsKKworZW51bSBCVF84NzIzQl8xQU5UX1dJRklfU1RBVFVTIHsKKwlCVF84NzIzQl8xQU5UX1dJRklfU1RBVFVTX05PTl9DT05ORUNURURfSURMRQkJCT0gMHgwLAorCUJUXzg3MjNCXzFBTlRfV0lGSV9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9BU1NPX0FVVEhfU0NBTgkJPSAweDEsCisJQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfU0NBTgkJCT0gMHgyLAorCUJUXzg3MjNCXzFBTlRfV0lGSV9TVEFUVVNfQ09OTkVDVEVEX1NQRUNJQUxfUEtUCQkJPSAweDMsCisJQlRfODcyM0JfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfSURMRQkJCT0gMHg0LAorCUJUXzg3MjNCXzFBTlRfV0lGSV9TVEFUVVNfQ09OTkVDVEVEX0JVU1kJCQk9IDB4NSwKKwlCVF84NzIzQl8xQU5UX1dJRklfU1RBVFVTX01BWAorfTsKKworZW51bSBCVF84NzIzQl8xQU5UX0NPRVhfQUxHTyB7CisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fVU5ERUZJTkVECQk9IDB4MCwKKwlCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19TQ08JCQk9IDB4MSwKKwlCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISUQJCQk9IDB4MiwKKwlCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19BMkRQCQkJPSAweDMsCisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fQTJEUF9QQU5IUwkJPSAweDQsCisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fUEFORURSCQkJPSAweDUsCisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fUEFOSFMJCQk9IDB4NiwKKwlCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19QQU5FRFJfQTJEUAkJPSAweDcsCisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRAkJPSAweDgsCisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSCQk9IDB4OSwKKwlCVF84NzIzQl8xQU5UX0NPRVhfQUxHT19ISURfQTJEUAkJPSAweGEsCisJQlRfODcyM0JfMUFOVF9DT0VYX0FMR09fTUFYCQkJPSAweGIsCit9OworCitzdHJ1Y3QgY29leF9kbV84NzIzYl8xYW50IHsKKwkvKiBmdyBtZWNoYW5pc20gKi8KKwlib29sIGN1cl9pZ25vcmVfd2xhbl9hY3Q7CisJYm9vbCBwcmVfaWdub3JlX3dsYW5fYWN0OworCXU4IHByZV9wc190ZG1hOworCXU4IGN1cl9wc190ZG1hOworCXU4IHBzX3RkbWFfcGFyYVs1XTsKKwl1OCBwc190ZG1hX2R1X2Fkal90eXBlOworCWJvb2wgYXV0b190ZG1hX2FkanVzdDsKKwlib29sIHByZV9wc190ZG1hX29uOworCWJvb2wgY3VyX3BzX3RkbWFfb247CisJYm9vbCBwcmVfYnRfYXV0b19yZXBvcnQ7CisJYm9vbCBjdXJfYnRfYXV0b19yZXBvcnQ7CisJdTggcHJlX2xwczsKKwl1OCBjdXJfbHBzOworCXU4IHByZV9ycHdtOworCXU4IGN1cl9ycHdtOworCisJLyogc3cgbWVjaGFuaXNtICovCisJYm9vbCBwcmVfbG93X3BlbmFsdHlfcmE7CisJYm9vbCBjdXJfbG93X3BlbmFsdHlfcmE7CisJdTMyIHByZV92YWwweDZjMDsKKwl1MzIgY3VyX3ZhbDB4NmMwOworCXUzMiBwcmVfdmFsMHg2YzQ7CisJdTMyIGN1cl92YWwweDZjNDsKKwl1MzIgcHJlX3ZhbDB4NmM4OworCXUzMiBjdXJfdmFsMHg2Yzg7CisJdTggcHJlX3ZhbDB4NmNjOworCXU4IGN1cl92YWwweDZjYzsKKwlib29sIGxpbWl0ZWRfZGlnOworCisJdTMyIGJhY2t1cF9hcmZyX2NudDE7CS8qIEF1dG8gUmF0ZSBGYWxsYmFjayBSZXRyeSBjbnQgKi8KKwl1MzIgYmFja3VwX2FyZnJfY250MjsJLyogQXV0byBSYXRlIEZhbGxiYWNrIFJldHJ5IGNudCAqLworCXUxNiBiYWNrdXBfcmV0cnlfbGltaXQ7CisJdTggYmFja3VwX2FtcGR1X21heF90aW1lOworCisJLyogYWxnb3JpdGhtIHJlbGF0ZWQgKi8KKwl1OCBwcmVfYWxnb3JpdGhtOworCXU4IGN1cl9hbGdvcml0aG07CisJdTggYnRfc3RhdHVzOworCXU4IHdpZmlfY2hubF9pbmZvWzNdOworCisJdTMyIHByZXJhX21hc2s7CisJdTMyIGN1cnJhX21hc2s7CisJdTggcHJlX2FyZnJfdHlwZTsKKwl1OCBjdXJfYXJmcl90eXBlOworCXU4IHByZV9yZXRyeV9saW1pdF90eXBlOworCXU4IGN1cl9yZXRyeV9saW1pdF90eXBlOworCXU4IHByZV9hbXBkdV90aW1lX3R5cGU7CisJdTggY3VyX2FtcGR1X3RpbWVfdHlwZTsKKworCXU4IGVycm9yX2NvbmRpdGlvbjsKK307CisKK3N0cnVjdCBjb2V4X3N0YV84NzIzYl8xYW50IHsKKwlib29sIGJ0X2xpbmtfZXhpc3Q7CisJYm9vbCBzY29fZXhpc3Q7CisJYm9vbCBhMmRwX2V4aXN0OworCWJvb2wgaGlkX2V4aXN0OworCWJvb2wgcGFuX2V4aXN0OworCisJYm9vbCB1bmRlcl9scHM7CisJYm9vbCB1bmRlcl9pcHM7CisJdTMyIHNwZWNpYWxfcGt0X3BlcmlvZF9jbnQ7CisJdTMyIGhpZ2hfcHJpb3JpdHlfdHg7CisJdTMyIGhpZ2hfcHJpb3JpdHlfcng7CisJdTMyIGxvd19wcmlvcml0eV90eDsKKwl1MzIgbG93X3ByaW9yaXR5X3J4OworCXU4IGJ0X3Jzc2k7CisJdTggcHJlX2J0X3Jzc2lfc3RhdGU7CisJdTggcHJlX3dpZmlfcnNzaV9zdGF0ZVs0XTsKKwlib29sIGMyaF9idF9pbmZvX3JlcV9zZW50OworCXU4IGJ0X2luZm9fYzJoW0JUX0lORk9fU1JDXzg3MjNCXzFBTlRfTUFYXVsxMF07CisJdTMyIGJ0X2luZm9fYzJoX2NudFtCVF9JTkZPX1NSQ184NzIzQl8xQU5UX01BWF07CisJYm9vbCBjMmhfYnRfaW5xdWlyeV9wYWdlOworCXU4IGJ0X3JldHJ5X2NudDsKKwl1OCBidF9pbmZvX2V4dDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgZm9sbG93aW5nIGlzIGludGVyZmFjZSB3aGljaCB3aWxsIG5vdGlmeSBjb2V4IG1vZHVsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfaW5pdF9od2NvbmZpZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSk7Cit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9scHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X3NjYW5fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X21lZGlhX3N0YXR1c19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X3NwZWNpYWxfcGFja2V0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgdTggdHlwZSk7Cit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggKnRtcGJ1ZiwgdTggbGVuZ3RoKTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X2hhbHRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X3BucF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHN0YXRlKTsKK3ZvaWQgZXhfaGFsYnRjODcyM2IxYW50X2NvZXhfZG1fcmVzZXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleF9oYWxidGM4NzIzYjFhbnRfcGVyaW9kaWNhbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4X2hhbGJ0Yzg3MjNiMWFudF9kaXNwbGF5X2NvZXhfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4NzIzYjJhbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMmFudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjIwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4NzIzYjJhbnQuYwpAQCAtMCwwICsxLDM5MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFRoaXMgZmlsZSBpcyBmb3IgUlRMODcyM0IgQ28tZXhpc3QgbWVjaGFuaXNtCisgKgorICogSGlzdG9yeQorICogMjAxMi8xMS8xNSBDb3NhIGZpcnN0IGNoZWNrIGluLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5jbHVkZSBmaWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImhhbGJ0X3ByZWNvbXAuaCIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2xvYmFsIHZhcmlhYmxlcywgdGhlc2UgYXJlIHN0YXRpYyB2YXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgY29leF9kbV84NzIzYl8yYW50IGdsY29leF9kbV84NzIzYl8yYW50Oworc3RhdGljIHN0cnVjdCBjb2V4X2RtXzg3MjNiXzJhbnQgKmNvZXhfZG0gPSAmZ2xjb2V4X2RtXzg3MjNiXzJhbnQ7CitzdGF0aWMgc3RydWN0IGNvZXhfc3RhXzg3MjNiXzJhbnQgZ2xjb2V4X3N0YV84NzIzYl8yYW50Oworc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84NzIzYl8yYW50ICpjb2V4X3N0YSA9ICZnbGNvZXhfc3RhXzg3MjNiXzJhbnQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBnbGJ0X2luZm9fc3JjXzg3MjNiXzJhbnRbXSA9IHsKKwkiQlQgSW5mb1t3aWZpIGZ3XSIsCisJIkJUIEluZm9bYnQgcnNwXSIsCisJIkJUIEluZm9bYnQgYXV0byByZXBvcnRdIiwKK307CisKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl9kYXRlXzg3MjNiXzJhbnQgPSAyMDEzMTExMzsKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl84NzIzYl8yYW50ID0gMHgzZjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsb2NhbCBmdW5jdGlvbiBwcm90byB0eXBlIGlmIG5lZWRlZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsb2NhbCBmdW5jdGlvbiBzdGFydCB3aXRoIGhhbGJ0Yzg3MjNiMmFudF8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1OCBoYWxidGM4NzIzYjJhbnRfYnRfcnNzaV9zdGF0ZSh1OCBsZXZlbF9udW0sIHU4IHJzc2lfdGhyZXNoLAorCQkJCQl1OCByc3NpX3RocmVzaDEpCit7CisJczMyIGJ0X3Jzc2kgPSAwOworCXU4IGJ0X3Jzc2lfc3RhdGUgPSBjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGU7CisKKwlidF9yc3NpID0gY29leF9zdGEtPmJ0X3Jzc2k7CisKKwlpZiAobGV2ZWxfbnVtID09IDIpIHsKKwkJaWYgKChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJCWlmIChidF9yc3NpID49IHJzc2lfdGhyZXNoICsKKwkJCQkgICAgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg3MjNCXzJBTlQpIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9yc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gTG93XG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3RheSBhdCBIaWdoXG4iKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobGV2ZWxfbnVtID09IDMpIHsKKwkJaWYgKHJzc2lfdGhyZXNoID4gcnNzaV90aHJlc2gxKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSB0aHJlc2ggZXJyb3IhIVxuIik7CisJCQlyZXR1cm4gY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlOworCQl9CisKKwkJaWYgKChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJCWlmIChidF9yc3NpID49IHJzc2lfdGhyZXNoICsKKwkJCQkgICAgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg3MjNCXzJBTlQpIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSBpZiAoKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PQorCQkJCQkJQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkJICAgKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PQorCQkJCQkJQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCQlpZiAoYnRfcnNzaSA+PSByc3NpX3RocmVzaDEgKworCQkJCSAgICAgICBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODcyM0JfMkFOVCkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgaWYgKGJ0X3Jzc2kgPCByc3NpX3RocmVzaCkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgTWVkaXVtXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9yc3NpIDwgcnNzaV90aHJlc2gxKSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIE1lZGl1bVxuIik7CisJCQl9IGVsc2UgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9CisKKwljb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPSBidF9yc3NpX3N0YXRlOworCisJcmV0dXJuIGJ0X3Jzc2lfc3RhdGU7Cit9CisKK3N0YXRpYyB1OCBoYWxidGM4NzIzYjJhbnRfd2lmaV9yc3NpX3N0YXRlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIHU4IGluZGV4LCB1OCBsZXZlbF9udW0sCisJCQkJCSAgdTggcnNzaV90aHJlc2gsIHU4IHJzc2lfdGhyZXNoMSkKK3sKKwlzMzIgd2lmaV9yc3NpID0gMDsKKwl1OCB3aWZpX3Jzc2lfc3RhdGUgPSBjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF07CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1M0X1dJRklfUlNTSSwgJndpZmlfcnNzaSk7CisKKwlpZiAobGV2ZWxfbnVtID09IDIpIHsKKwkJaWYgKChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJCQkJCUJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJCQkJCUJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKHdpZmlfcnNzaSA+PSByc3NpX3RocmVzaCArCisJCQkJCSBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODcyM0JfMkFOVCkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBIaWdoXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aWZpX3Jzc2kgPCByc3NpX3RocmVzaCkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIExvd1xuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3RheSBhdCBIaWdoXG4iKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobGV2ZWxfbnVtID09IDMpIHsKKwkJaWYgKHJzc2lfdGhyZXNoID4gcnNzaV90aHJlc2gxKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgdGhyZXNoIGVycm9yISFcbiIpOworCQkJcmV0dXJuIGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XTsKKwkJfQorCisJCWlmICgoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCQkJCQlCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJCSAgICAoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCQkJCQlCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJCWlmICh3aWZpX3Jzc2kgPj0gcnNzaV90aHJlc2ggKworCQkJCQlCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODcyM0JfMkFOVCkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIE1lZGl1bVxuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSBpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJCQkJQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkJICAgKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJCQkJQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCQlpZiAod2lmaV9yc3NpID49IHJzc2lfdGhyZXNoMSArCisJCQkJCSBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODcyM0JfMkFOVCkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBIaWdoXG4iKTsKKwkJCX0gZWxzZSBpZiAod2lmaV9yc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3RheSBhdCBNZWRpdW1cbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHdpZmlfcnNzaSA8IHJzc2lfdGhyZXNoMSkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIE1lZGl1bVxuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3RheSBhdCBIaWdoXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCWNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9IHdpZmlfcnNzaV9zdGF0ZTsKKworCXJldHVybiB3aWZpX3Jzc2lfc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9tb25pdG9yX2J0X2N0cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1MzIgcmVnX2hwX3R4cngsIHJlZ19scF90eHJ4LCB1MzJ0bXA7CisJdTMyIHJlZ19ocF90eCA9IDAsIHJlZ19ocF9yeCA9IDA7CisJdTMyIHJlZ19scF90eCA9IDAsIHJlZ19scF9yeCA9IDA7CisKKwlyZWdfaHBfdHhyeCA9IDB4NzcwOworCXJlZ19scF90eHJ4ID0gMHg3NzQ7CisKKwl1MzJ0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgcmVnX2hwX3R4cngpOworCXJlZ19ocF90eCA9IHUzMnRtcCAmIE1BU0tMV09SRDsKKwlyZWdfaHBfcnggPSAodTMydG1wICYgTUFTS0hXT1JEKSA+PiAxNjsKKworCXUzMnRtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCByZWdfbHBfdHhyeCk7CisJcmVnX2xwX3R4ID0gdTMydG1wICYgTUFTS0xXT1JEOworCXJlZ19scF9yeCA9ICh1MzJ0bXAgJiBNQVNLSFdPUkQpID4+IDE2OworCisJY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHggPSByZWdfaHBfdHg7CisJY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfcnggPSByZWdfaHBfcng7CisJY29leF9zdGEtPmxvd19wcmlvcml0eV90eCA9IHJlZ19scF90eDsKKwljb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4ID0gcmVnX2xwX3J4OworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCSAgIltCVENvZXhdLCBIaWdoIFByaW9yaXR5IFR4L1J4KHJlZyAweCV4KSA9IDB4JXgoJWQpLzB4JXgoJWQpXG4iLAorCQkgIHJlZ19ocF90eHJ4LCByZWdfaHBfdHgsIHJlZ19ocF90eCwgcmVnX2hwX3J4LCByZWdfaHBfcngpOworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9NT05JVE9SLAorCQkgICJbQlRDb2V4XSwgTG93IFByaW9yaXR5IFR4L1J4KHJlZyAweCV4KSA9IDB4JXgoJWQpLzB4JXgoJWQpXG4iLAorCQkgIHJlZ19scF90eHJ4LCByZWdfbHBfdHgsIHJlZ19scF90eCwgcmVnX2xwX3J4LCByZWdfbHBfcngpOworCisJLyogcmVzZXQgY291bnRlciAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9xdWVyeV9idF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwljb2V4X3N0YS0+YzJoX2J0X2luZm9fcmVxX3NlbnQgPSB0cnVlOworCisJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQoMCk7CS8qIHRyaWdnZXIgKi8KKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19FWEVDLAorCQkgICJbQlRDb2V4XSwgUXVlcnkgQnQgSW5mbywgRlcgd3JpdGUgMHg2MSA9IDB4JXhcbiIsCisJCSAgaDJjX3BhcmFtZXRlclswXSk7CisKKwlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjEsIDEsIGgyY19wYXJhbWV0ZXIpOworfQorCitzdGF0aWMgYm9vbCBpc193aWZpX3N0YXR1c19jaGFuZ2VkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0YXRpYyBib29sIHByZV93aWZpX2J1c3k7CisJc3RhdGljIGJvb2wgcHJlX3VuZGVyXzR3YXk7CisJc3RhdGljIGJvb2wgcHJlX2J0X2hzX29uOworCWJvb2wgd2lmaV9idXN5ID0gZmFsc2UsIHVuZGVyXzR3YXkgPSBmYWxzZSwgYnRfaHNfb24gPSBmYWxzZTsKKwlib29sIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJICAgJndpZmlfY29ubmVjdGVkKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc19vbik7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJXzRfV0FZX1BST0dSRVNTLAorCQkJICAgJnVuZGVyXzR3YXkpOworCisJaWYgKHdpZmlfY29ubmVjdGVkKSB7CisJCWlmICh3aWZpX2J1c3kgIT0gcHJlX3dpZmlfYnVzeSkgeworCQkJcHJlX3dpZmlfYnVzeSA9IHdpZmlfYnVzeTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKHVuZGVyXzR3YXkgIT0gcHJlX3VuZGVyXzR3YXkpIHsKKwkJCXByZV91bmRlcl80d2F5ID0gdW5kZXJfNHdheTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKGJ0X2hzX29uICE9IHByZV9idF9oc19vbikgeworCQkJcHJlX2J0X2hzX29uID0gYnRfaHNfb247CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3VwZGF0ZV9idF9saW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLypzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOyovCisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKwlib29sIGJ0X2hzX29uID0gZmFsc2U7CisKKyNpZiAoQlRfQVVUT19SRVBPUlRfT05MWV84NzIzQl8yQU5UID09IDEpIC8qIHByb2ZpbGUgZnJvbSBidCBwYXRjaCAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCisJYnRfbGlua19pbmZvLT5idF9saW5rX2V4aXN0ID0gY29leF9zdGEtPmJ0X2xpbmtfZXhpc3Q7CisJYnRfbGlua19pbmZvLT5zY29fZXhpc3QgPSBjb2V4X3N0YS0+c2NvX2V4aXN0OworCWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCA9IGNvZXhfc3RhLT5hMmRwX2V4aXN0OworCWJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ID0gY29leF9zdGEtPnBhbl9leGlzdDsKKwlidF9saW5rX2luZm8tPmhpZF9leGlzdCA9IGNvZXhfc3RhLT5oaWRfZXhpc3Q7CisKKwkvKiB3b3JrIGFyb3VuZCBmb3IgSFMgbW9kZS4gKi8KKwlpZiAoYnRfaHNfb24pIHsKKwkJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgPSB0cnVlOworCQlidF9saW5rX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSB0cnVlOworCX0KKyNlbHNlCS8qIHByb2ZpbGUgZnJvbSBidCBzdGFjayAqLworCWJ0X2xpbmtfaW5mby0+YnRfbGlua19leGlzdCA9IHN0YWNrX2luZm8tPmJ0X2xpbmtfZXhpc3Q7CisJYnRfbGlua19pbmZvLT5zY29fZXhpc3QgPSBzdGFja19pbmZvLT5zY29fZXhpc3Q7CisJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ID0gc3RhY2tfaW5mby0+YTJkcF9leGlzdDsKKwlidF9saW5rX2luZm8tPnBhbl9leGlzdCA9IHN0YWNrX2luZm8tPnBhbl9leGlzdDsKKwlidF9saW5rX2luZm8tPmhpZF9leGlzdCA9IHN0YWNrX2luZm8tPmhpZF9leGlzdDsKKworCS8qZm9yIHdpbi04IHN0YWNrIEhJRCByZXBvcnQgZXJyb3IqLworCWlmICghc3RhY2tfaW5mby0+aGlkX2V4aXN0KQorCQlzdGFja19pbmZvLT5oaWRfZXhpc3QgPSBjb2V4X3N0YS0+aGlkX2V4aXN0OworCS8qc3luYyAgQlRJbmZvIHdpdGggQlQgZmlybXdhcmUgYW5kIHN0YWNrKi8KKwkvKiB3aGVuIHN0YWNrIEhJRCByZXBvcnQgZXJyb3IsIGhlcmUgd2UgdXNlIHRoZSBpbmZvIGZyb20gYnQgZncuKi8KKwlpZiAoIXN0YWNrX2luZm8tPmJ0X2xpbmtfZXhpc3QpCisJCXN0YWNrX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSBjb2V4X3N0YS0+YnRfbGlua19leGlzdDsKKyNlbmRpZgorCS8qIGNoZWNrIGlmIFNjbyBvbmx5ICovCisJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0ICYmICFidF9saW5rX2luZm8tPmEyZHBfZXhpc3QgJiYKKwkgICAgIWJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmICFidF9saW5rX2luZm8tPmhpZF9leGlzdCkKKwkJYnRfbGlua19pbmZvLT5zY29fb25seSA9IHRydWU7CisJZWxzZQorCQlidF9saW5rX2luZm8tPnNjb19vbmx5ID0gZmFsc2U7CisKKwkvKiBjaGVjayBpZiBBMmRwIG9ubHkgKi8KKwlpZiAoIWJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCSAgICAhYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYgIWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQlidF9saW5rX2luZm8tPmEyZHBfb25seSA9IHRydWU7CisJZWxzZQorCQlidF9saW5rX2luZm8tPmEyZHBfb25seSA9IGZhbHNlOworCisJLyogY2hlY2sgaWYgUGFuIG9ubHkgKi8KKwlpZiAoIWJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0ICYmICFidF9saW5rX2luZm8tPmEyZHBfZXhpc3QgJiYKKwkgICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYgIWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQlidF9saW5rX2luZm8tPnBhbl9vbmx5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2xpbmtfaW5mby0+cGFuX29ubHkgPSBmYWxzZTsKKworCS8qIGNoZWNrIGlmIEhpZCBvbmx5ICovCisJaWYgKCFidF9saW5rX2luZm8tPnNjb19leGlzdCAmJiAhYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmCisJICAgICFidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJiBidF9saW5rX2luZm8tPmhpZF9leGlzdCkKKwkJYnRfbGlua19pbmZvLT5oaWRfb25seSA9IHRydWU7CisJZWxzZQorCQlidF9saW5rX2luZm8tPmhpZF9vbmx5ID0gZmFsc2U7Cit9CisKK3N0YXRpYyB1OCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX2FsZ29yaXRobShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOworCWJvb2wgYnRfaHNfb24gPSBmYWxzZTsKKwl1OCBhbGdvcml0aG0gPSBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19VTkRFRklORUQ7CisJdTggbnVtX29mX2RpZmZfcHJvZmlsZSA9IDA7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKworCWlmICghYnRfbGlua19pbmZvLT5idF9saW5rX2V4aXN0KSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBObyBCVCBsaW5rIGV4aXN0cyEhIVxuIik7CisJCXJldHVybiBhbGdvcml0aG07CisJfQorCisJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KQorCQludW1fb2ZfZGlmZl9wcm9maWxlKys7CisJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQludW1fb2ZfZGlmZl9wcm9maWxlKys7CisJaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KQorCQludW1fb2ZfZGlmZl9wcm9maWxlKys7CisJaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkKKwkJbnVtX29mX2RpZmZfcHJvZmlsZSsrOworCisJaWYgKG51bV9vZl9kaWZmX3Byb2ZpbGUgPT0gMSkgeworCQlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgU0NPIG9ubHlcbiIpOworCQkJYWxnb3JpdGhtID0gQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fU0NPOworCQl9IGVsc2UgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJbQlRDb2V4XSwgSElEIG9ubHlcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJbQlRDb2V4XSwgQTJEUCBvbmx5XG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19BMkRQOworCQkJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgUEFOKEhTKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1BBTkhTOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBQQU4oRURSKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1BBTkVEUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG51bV9vZl9kaWZmX3Byb2ZpbGUgPT0gMikgeworCQlpZiAoYnRfbGlua19pbmZvLT5zY29fZXhpc3QpIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIFNDTyArIEhJRFxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgQTJEUCA9PT4gU0NPXG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1NDTzsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBISUQgKyBBMkRQXG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19ISURfQTJEUDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCQkgICBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgSElEICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgSElEICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJCQkJICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19BMkRQX1BBTkhTOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBBMkRQICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0EyRFA7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChudW1fb2ZfZGlmZl9wcm9maWxlID09IDMpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB7CisJCQlpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBTQ08gKyBISUQgKyBBMkRQID09PiBISURcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIFNDTyArIEhJRCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgSElEICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPQorCQkJCQkgICAgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJCQkJICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBTQ08gKyBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBTQ08gKyBBMkRQICsgUEFOKEVEUikgPT0+IEhJRFxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCAmJgorCQkJICAgIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJCQkgICAgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBISUQgKyBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19ISURfQTJEUDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgSElEICsgQTJEUCArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0KKwkJCQkJQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX29mX2RpZmZfcHJvZmlsZSA+PSAzKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkgICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJCSAgICBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEVycm9yISEhIFNDTyArIEhJRCArIEEyRFAgKyBQQU4oSFMpXG4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgSElEICsgQTJEUCArIFBBTihFRFIpID09PlBBTihFRFIpK0hJRFxuIik7CisJCQkJCWFsZ29yaXRobSA9CisJCQkJCSAgICBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBhbGdvcml0aG07Cit9CisKK3N0YXRpYyBib29sIGhhbGJ0Yzg3MjNiMmFudF9uZWVkX3RvX2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJYm9vbCByZXQgPSBmYWxzZTsKKwlib29sIGJ0X2hzX29uID0gZmFsc2UsIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CisJczMyIGJ0X2hzX3Jzc2kgPSAwOworCXU4IGJ0X3Jzc2lfc3RhdGU7CisKKwlpZiAoIWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLAorCQkJCSZidF9oc19vbikpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9DT05ORUNURUQsCisJCQkJJndpZmlfY29ubmVjdGVkKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9TNF9IU19SU1NJLAorCQkJCSZidF9oc19yc3NpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMmFudF9idF9yc3NpX3N0YXRlKDIsIDI5LCAwKTsKKworCWlmICh3aWZpX2Nvbm5lY3RlZCkgeworCQlpZiAoYnRfaHNfb24pIHsKKwkJCWlmIChidF9oc19yc3NpID4gMzcpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCisJCQkJCSAgIltCVENvZXhdLCBOZWVkIHRvIGRlY3JlYXNlIGJ0IHBvd2VyIGZvciBIUyBtb2RlISFcbiIpOworCQkJCXJldCA9IHRydWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkJCQkgICJbQlRDb2V4XSwgTmVlZCB0byBkZWNyZWFzZSBidCBwb3dlciBmb3IgV2lmaSBpcyBjb25uZWN0ZWQhIVxuIik7CisJCQkJcmV0ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9md19kYWNfc3dpbmdfbGV2ZWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgdTggZGFjX3N3aW5nX2x2bCkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OworCisJLyogVGhlcmUgYXJlIHNldmVyYWwgdHlwZSBvZiBkYWNzd2luZworCSAqIDB4MTgvIDB4MTAvIDB4Yy8gMHg4LyAweDQvIDB4NiAqLworCWgyY19wYXJhbWV0ZXJbMF0gPSBkYWNfc3dpbmdfbHZsOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBTZXQgRGFjIFN3aW5nIExldmVsID0gMHgleFxuIiwgZGFjX3N3aW5nX2x2bCk7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBGVyB3cml0ZSAweDY0ID0gMHgleFxuIiwgaDJjX3BhcmFtZXRlclswXSk7CisKKwlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjQsIDEsIGgyY19wYXJhbWV0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2Z3X2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICAgIGJvb2wgZGVjX2J0X3B3cikKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OworCisJaDJjX3BhcmFtZXRlclswXSA9IDA7CisKKwlpZiAoZGVjX2J0X3B3cikKKwkJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQoMSk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIGRlY3JlYXNlIEJ0IFBvd2VyIDogJXMsIEZXIHdyaXRlIDB4NjIgPSAweCV4XG4iLAorCQkgIChkZWNfYnRfcHdyID8gIlllcyEhIiA6ICJObyEhIiksIGgyY19wYXJhbWV0ZXJbMF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYyLCAxLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBkZWNfYnRfcHdyKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIERlYyBCVCBwb3dlciA9ICVzXG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwgKGRlY19idF9wd3IgPyAiT04iIDogIk9GRiIpKTsKKwljb2V4X2RtLT5jdXJfZGVjX2J0X3B3ciA9IGRlY19idF9wd3I7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBiUHJlRGVjQnRQd3IgPSVkLCBiQ3VyRGVjQnRQd3IgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfZGVjX2J0X3B3ciwgY29leF9kbS0+Y3VyX2RlY19idF9wd3IpOworCisJCWlmIChjb2V4X2RtLT5wcmVfZGVjX2J0X3B3ciA9PSBjb2V4X2RtLT5jdXJfZGVjX2J0X3B3cikKKwkJCXJldHVybjsKKwl9CisJaGFsYnRjODcyM2IyYW50X3NldF9md19kZWNfYnRfcHdyKGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX2RlY19idF9wd3IpOworCisJY29leF9kbS0+cHJlX2RlY19idF9wd3IgPSBjb2V4X2RtLT5jdXJfZGVjX2J0X3B3cjsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICAgYm9vbCBmb3JjZV9leGVjLAorCQkJCQkgICAgIHU4IGZ3X2RhY19zd2luZ19sdmwpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkgICJbQlRDb2V4XSwgJXMgc2V0IEZXIERhYyBTd2luZyBsZXZlbCA9ICVkXG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwgZndfZGFjX3N3aW5nX2x2bCk7CisJY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmwgPSBmd19kYWNfc3dpbmdfbHZsOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlRndEYWNTd2luZ0x2bCA9JWQsIGN1ckZ3RGFjU3dpbmdMdmwgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfZndfZGFjX3N3aW5nX2x2bCwKKwkJCSAgY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmwpOworCisJCWlmIChjb2V4X2RtLT5wcmVfZndfZGFjX3N3aW5nX2x2bCA9PQorCQkgICBjb2V4X2RtLT5jdXJfZndfZGFjX3N3aW5nX2x2bCkKKwkJCXJldHVybjsKKwl9CisKKwlzZXRfZndfZGFjX3N3aW5nX2xldmVsKGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmwpOworCWNvZXhfZG0tPnByZV9md19kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zd19yZl9yeF9scGZfY29ybmVyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICBib29sIHJ4X3JmX3Nocmlua19vbikKK3sKKwlpZiAocnhfcmZfc2hyaW5rX29uKSB7CisJCS8qIFNocmluayBSRiBSeCBMUEYgY29ybmVyICovCisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJICAiW0JUQ29leF0sIFNocmluayBSRiBSeCBMUEYgY29ybmVyISFcbiIpOworCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MWUsCisJCQkJCSAgMHhmZmZmZiwgMHhmZmZmYyk7CisJfSBlbHNlIHsKKwkJLyogUmVzdW1lIFJGIFJ4IExQRiBjb3JuZXIgKi8KKwkJLyogQWZ0ZXIgaW5pdGlhbGl6ZWQsIHdlIGNhbiB1c2UgY29leF9kbS0+YnRSZjB4MWVCYWNrdXAgKi8KKwkJaWYgKGJ0Y29leGlzdC0+aW5pdGlsaXplZCkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCQkJICAiW0JUQ29leF0sIFJlc3VtZSBSRiBSeCBMUEYgY29ybmVyISFcbiIpOworCQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDFlLAorCQkJCQkJICAweGZmZmZmLAorCQkJCQkJICBjb2V4X2RtLT5idF9yZjB4MWVfYmFja3VwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3JmX3NocmluayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgcnhfcmZfc2hyaW5rX29uKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gUnggUkYgU2hyaW5rID0gJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgIChyeF9yZl9zaHJpbmtfb24gPyAiT04iIDogIk9GRiIpKTsKKwljb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3NocmluayA9IHJ4X3JmX3Nocmlua19vbjsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVSZlJ4THBmU2hyaW5rID0lZCwgYkN1clJmUnhMcGZTaHJpbmsgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfcmZfcnhfbHBmX3NocmluaywKKwkJCSAgY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmspOworCisJCWlmIChjb2V4X2RtLT5wcmVfcmZfcnhfbHBmX3NocmluayA9PQorCQkgICAgY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmspCisJCQlyZXR1cm47CisJfQorCXNldF9zd19yZl9yeF9scGZfY29ybmVyKGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmspOworCisJY29leF9kbS0+cHJlX3JmX3J4X2xwZl9zaHJpbmsgPSBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3NocmluazsKK30KKworc3RhdGljIHZvaWQgc2V0X3N3X3BlbmFsdHlfdHhyYXRlX2FkYXB0aXZlKAorCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQlib29sIGxvd19wZW5hbHR5X3JhKQoreworCXU4IGgyY19wYXJhbWV0ZXJbNl0gPSB7MH07CisKKwloMmNfcGFyYW1ldGVyWzBdID0gMHg2OwkvKiBvcENvZGUsIDB4NiA9IFJldHJ5X1BlbmFsdHkqLworCisJaWYgKGxvd19wZW5hbHR5X3JhKSB7CisJCWgyY19wYXJhbWV0ZXJbMV0gfD0gQklUKDApOworCQkvKm5vcm1hbCByYXRlIGV4Y2VwdCBNQ1M3LzYvNSwgT0ZETTU0LzQ4LzM2Ki8KKwkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MDA7CisJCWgyY19wYXJhbWV0ZXJbM10gPSAweGY3OyAgLypNQ1M3IG9yIE9GRE01NCovCisJCWgyY19wYXJhbWV0ZXJbNF0gPSAweGY4OyAgLypNQ1M2IG9yIE9GRE00OCovCisJCWgyY19wYXJhbWV0ZXJbNV0gPSAweGY5OyAgLypNQ1M1IG9yIE9GRE0zNiovCisJfQorCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgV2lGaSBMb3ctUGVuYWx0eSBSZXRyeTogJXMiLAorCQkgIChsb3dfcGVuYWx0eV9yYSA/ICJPTiEhIiA6ICJPRkYhISIpKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2OSwgNiwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9sb3dfcGVuYWx0eV9yYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGxvd19wZW5hbHR5X3JhKQoreworCS8qcmV0dXJuOyAqLworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gTG93UGVuYWx0eVJBID0gJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgIChsb3dfcGVuYWx0eV9yYSA/ICJPTiIgOiAiT0ZGIikpOworCWNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSA9IGxvd19wZW5hbHR5X3JhOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgYlByZUxvd1BlbmFsdHlSYSA9JWQsIGJDdXJMb3dQZW5hbHR5UmEgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEsCisJCQkgIGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9sb3dfcGVuYWx0eV9yYSA9PSBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEpCisJCQlyZXR1cm47CisJfQorCXNldF9zd19wZW5hbHR5X3R4cmF0ZV9hZGFwdGl2ZShidGNvZXhpc3QsIGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSk7CisKKwljb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEgPSBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmE7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfZGFjX3N3aW5nX3JlZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgdTMyIGxldmVsKQoreworCXU4IHZhbCA9ICh1OCkgbGV2ZWw7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBXcml0ZSBTd0RhY1N3aW5nID0gMHgleFxuIiwgbGV2ZWwpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDg4MywgMHgzZSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3N3X2Z1bGx0aW1lX2RhY19zd2luZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICBib29sIHN3X2RhY19zd2luZ19vbiwKKwkJCQkgICAgICB1MzIgc3dfZGFjX3N3aW5nX2x2bCkKK3sKKwlpZiAoc3dfZGFjX3N3aW5nX29uKQorCQloYWxidGM4NzIzYjJhbnRfc2V0X2RhY19zd2luZ19yZWcoYnRjb2V4aXN0LCBzd19kYWNfc3dpbmdfbHZsKTsKKwllbHNlCisJCWhhbGJ0Yzg3MjNiMmFudF9zZXRfZGFjX3N3aW5nX3JlZyhidGNvZXhpc3QsIDB4MTgpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfZGFjX3N3aW5nKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBkYWNfc3dpbmdfb24sCisJCQkgICAgICAgdTMyIGRhY19zd2luZ19sdmwpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAorCQkgICJbQlRDb2V4XSwgJXMgdHVybiBEYWNTd2luZyA9JXMsIGRhY19zd2luZ19sdmwgPSAweCV4XG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKKwkJICAoZGFjX3N3aW5nX29uID8gIk9OIiA6ICJPRkYiKSwgZGFjX3N3aW5nX2x2bCk7CisJY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbiA9IGRhY19zd2luZ19vbjsKKwljb2V4X2RtLT5jdXJfZGFjX3N3aW5nX2x2bCA9IGRhY19zd2luZ19sdmw7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBiUHJlRGFjU3dpbmdPbiA9JWQsIHByZURhY1N3aW5nTHZsID0gMHgleCwgYkN1ckRhY1N3aW5nT24gPSVkLCBjdXJEYWNTd2luZ0x2bCA9IDB4JXhcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9kYWNfc3dpbmdfb24sIGNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsLAorCQkJICBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX29uLAorCQkJICBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX2x2bCk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfZGFjX3N3aW5nX29uID09IGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24pICYmCisJCSAgICAoY29leF9kbS0+cHJlX2RhY19zd2luZ19sdmwgPT0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmwpKQorCQkJcmV0dXJuOworCX0KKwltZGVsYXkoMzApOworCXNldF9zd19mdWxsdGltZV9kYWNfc3dpbmcoYnRjb2V4aXN0LCBkYWNfc3dpbmdfb24sCisJCQkJICBkYWNfc3dpbmdfbHZsKTsKKworCWNvZXhfZG0tPnByZV9kYWNfc3dpbmdfb24gPSBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX29uOworCWNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmw7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfYWdjX3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIGJvb2wgYWdjX3RhYmxlX2VuKQoreworCXU4IHJzc2lfYWRqdXN0X3ZhbCA9IDA7CisKKwkvKiAgQkIgQUdDIEdhaW4gVGFibGUgKi8KKwlpZiAoYWdjX3RhYmxlX2VuKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJICAiW0JUQ29leF0sIEJCIEFnYyBUYWJsZSBPbiFcbiIpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweDZlMUEwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHg2ZDFCMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4NmMxQzAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweDZiMUQwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHg2YTFFMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4NjkxRjAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweDY4MjAwMDAxKTsKKwl9IGVsc2UgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJCSAgIltCVENvZXhdLCBCQiBBZ2MgVGFibGUgT2ZmIVxuIik7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4YWExQTAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweGE5MUIwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHhhODFDMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4YTcxRDAwMDEpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweGE2MUUwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHhhNTFGMDAwMSk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4YTQyMDAwMDEpOworCX0KKworCS8qIFJGIEdhaW4gKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4ZWYsIDB4ZmZmZmYsIDB4MDIwMDApOworCWlmIChhZ2NfdGFibGVfZW4pIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCQkgICJbQlRDb2V4XSwgQWdjIFRhYmxlIE9uIVxuIik7CisJCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgzYiwKKwkJCQkJICAweGZmZmZmLCAweDM4ZmZmKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDNiLAorCQkJCQkgIDB4ZmZmZmYsIDB4MzhmZmUpOworCX0gZWxzZSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJICAiW0JUQ29leF0sIEFnYyBUYWJsZSBPZmYhXG4iKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDNiLAorCQkJCQkgIDB4ZmZmZmYsIDB4MzgwYzMpOworCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4M2IsCisJCQkJCSAgMHhmZmZmZiwgMHgyOGNlNik7CisJfQorCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHhlZiwgMHhmZmZmZiwgMHgwKTsKKworCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHhlZCwgMHhmZmZmZiwgMHgxKTsKKworCWlmIChhZ2NfdGFibGVfZW4pIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCQkgICJbQlRDb2V4XSwgQWdjIFRhYmxlIE9uIVxuIik7CisJCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHg0MCwKKwkJCQkJICAweGZmZmZmLCAweDM4ZmZmKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDQwLAorCQkJCQkgIDB4ZmZmZmYsIDB4MzhmZmUpOworCX0gZWxzZSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJICAiW0JUQ29leF0sIEFnYyBUYWJsZSBPZmYhXG4iKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDQwLAorCQkJCQkgIDB4ZmZmZmYsIDB4MzgwYzMpOworCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4NDAsCisJCQkJCSAgMHhmZmZmZiwgMHgyOGNlNik7CisJfQorCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHhlZCwgMHhmZmZmZiwgMHgwKTsKKworCS8qIHNldCByc3NpQWRqdXN0VmFsIGZvciB3aWZpIG1vZHVsZS4gKi8KKwlpZiAoYWdjX3RhYmxlX2VuKQorCQlyc3NpX2FkanVzdF92YWwgPSA4OworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfVTFfUlNTSV9BREpfVkFMX0ZPUl9BR0NfVEFCTEVfT04sCisJCQkgICAmcnNzaV9hZGp1c3RfdmFsKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FnY190YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgYWdjX3RhYmxlX2VuKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzICVzIEFnYyBUYWJsZVxuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksCisJCSAgKGFnY190YWJsZV9lbiA/ICJFbmFibGUiIDogIkRpc2FibGUiKSk7CisJY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbiA9IGFnY190YWJsZV9lbjsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVBZ2NUYWJsZUVuID0lZCwgYkN1ckFnY1RhYmxlRW4gPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuLCBjb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuKTsKKworCQlpZiAoY29leF9kbS0+cHJlX2FnY190YWJsZV9lbiA9PSBjb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuKQorCQkJcmV0dXJuOworCX0KKwloYWxidGM4NzIzYjJhbnRfc2V0X2FnY190YWJsZShidGNvZXhpc3QsIGFnY190YWJsZV9lbik7CisKKwljb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuID0gY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbjsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICB1MzIgdmFsMHg2YzAsIHUzMiB2YWwweDZjNCwKKwkJCQkJICAgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzAgPSAweCV4XG4iLCB2YWwweDZjMCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDZjMCwgdmFsMHg2YzApOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgY29leCB0YWJsZSwgc2V0IDB4NmM0ID0gMHgleFxuIiwgdmFsMHg2YzQpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg2YzQsIHZhbDB4NmM0KTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IGNvZXggdGFibGUsIHNldCAweDZjOCA9IDB4JXhcbiIsIHZhbDB4NmM4KTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NmM4LCB2YWwweDZjOCk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2Y2MgPSAweCV4XG4iLCB2YWwweDZjYyk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDZjYywgdmFsMHg2Y2MpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCB1MzIgdmFsMHg2YzAsCisJCQkJICAgICAgIHUzMiB2YWwweDZjNCwgdTMyIHZhbDB4NmM4LAorCQkJCSAgICAgICB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCisJCSAgIltCVENvZXhdLCAlcyB3cml0ZSBDb2V4IFRhYmxlIDB4NmMwID0gMHgleCwgMHg2YzQgPSAweCV4LCAweDZjOCA9IDB4JXgsIDB4NmNjID0gMHgleFxuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksIHZhbDB4NmMwLAorCQkgIHZhbDB4NmM0LCB2YWwweDZjOCwgdmFsMHg2Y2MpOworCWNvZXhfZG0tPmN1cl92YWwweDZjMCA9IHZhbDB4NmMwOworCWNvZXhfZG0tPmN1cl92YWwweDZjNCA9IHZhbDB4NmM0OworCWNvZXhfZG0tPmN1cl92YWwweDZjOCA9IHZhbDB4NmM4OworCWNvZXhfZG0tPmN1cl92YWwweDZjYyA9IHZhbDB4NmNjOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlVmFsMHg2YzAgPSAweCV4LCBwcmVWYWwweDZjNCA9IDB4JXgsIHByZVZhbDB4NmM4ID0gMHgleCwgcHJlVmFsMHg2Y2MgPSAweCV4ICEhXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfdmFsMHg2YzAsIGNvZXhfZG0tPnByZV92YWwweDZjNCwKKwkJCSAgY29leF9kbS0+cHJlX3ZhbDB4NmM4LCBjb2V4X2RtLT5wcmVfdmFsMHg2Y2MpOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGN1clZhbDB4NmMwID0gMHgleCwgY3VyVmFsMHg2YzQgPSAweCV4LCBjdXJWYWwweDZjOCA9IDB4JXgsIGN1clZhbDB4NmNjID0gMHgleCAhIVxuIiwKKwkJCSAgY29leF9kbS0+Y3VyX3ZhbDB4NmMwLCBjb2V4X2RtLT5jdXJfdmFsMHg2YzQsCisJCQkgIGNvZXhfZG0tPmN1cl92YWwweDZjOCwgY29leF9kbS0+Y3VyX3ZhbDB4NmNjKTsKKworCQlpZiAoKGNvZXhfZG0tPnByZV92YWwweDZjMCA9PSBjb2V4X2RtLT5jdXJfdmFsMHg2YzApICYmCisJCSAgICAoY29leF9kbS0+cHJlX3ZhbDB4NmM0ID09IGNvZXhfZG0tPmN1cl92YWwweDZjNCkgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfdmFsMHg2YzggPT0gY29leF9kbS0+Y3VyX3ZhbDB4NmM4KSAmJgorCQkgICAgKGNvZXhfZG0tPnByZV92YWwweDZjYyA9PSBjb2V4X2RtLT5jdXJfdmFsMHg2Y2MpKQorCQkJcmV0dXJuOworCX0KKwloYWxidGM4NzIzYjJhbnRfc2V0X2NvZXhfdGFibGUoYnRjb2V4aXN0LCB2YWwweDZjMCwgdmFsMHg2YzQsCisJCQkJICAgICAgIHZhbDB4NmM4LCB2YWwweDZjYyk7CisKKwljb2V4X2RtLT5wcmVfdmFsMHg2YzAgPSBjb2V4X2RtLT5jdXJfdmFsMHg2YzA7CisJY29leF9kbS0+cHJlX3ZhbDB4NmM0ID0gY29leF9kbS0+Y3VyX3ZhbDB4NmM0OworCWNvZXhfZG0tPnByZV92YWwweDZjOCA9IGNvZXhfZG0tPmN1cl92YWwweDZjODsKKwljb2V4X2RtLT5wcmVfdmFsMHg2Y2MgPSBjb2V4X2RtLT5jdXJfdmFsMHg2Y2M7Cit9CisKK3N0YXRpYyB2b2lkIGNvZXhfdGFibGVfd2l0aF90eXBlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDA6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkJICAgMHg1NTU1NTU1NSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDE6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NTU1NTU1NSwKKwkJCQkJICAgMHg1YWZhNWFmYSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDI6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1YTVhNWE1YSwKKwkJCQkJICAgMHg1YTVhNWE1YSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDM6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHhhYWFhYWFhYSwKKwkJCQkJICAgMHhhYWFhYWFhYSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHhmZmZmZmZmZiwKKwkJCQkJICAgMHhmZmZmZmZmZiwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDU6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1ZmZmNWZmZiwKKwkJCQkJICAgMHg1ZmZmNWZmZiwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDY6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1YTVhNWE1YSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDc6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1YWZhNWFmYSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDg6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1YWVhNWFlYSwKKwkJCQkJICAgMHg1YWVhNWFlYSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDk6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1YWVhNWFlYSwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDEwOgorCQloYWxidGM4NzIzYjJhbnRfY29leF90YWJsZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsIDB4NTVmZjU1ZmYsCisJCQkJCSAgIDB4NWFmZjVhZmYsIDB4ZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJY2FzZSAxMToKKwkJaGFsYnRjODcyM2IyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweDU1ZmY1NWZmLAorCQkJCQkgICAweDVhNWY1YTVmLCAweGZmZmYsIDB4Myk7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1ZjVmNWY1ZiwgMHhmZmZmLCAweDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9md19pZ25vcmVfd2xhbl9hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgYm9vbCBlbmFibGUpCit7CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKKworCWlmIChlbmFibGUpCisJCWgyY19wYXJhbWV0ZXJbMF0gfD0gQklUKDApOy8qIGZ1bmN0aW9uIGVuYWJsZSovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBGVyBmb3IgQlQgSWdub3JlIFdsYW5fQWN0LCBGVyB3cml0ZSAweDYzID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MywgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9pZ25vcmVfd2xhbl9hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gSWdub3JlIFdsYW5BY3QgJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoZW5hYmxlID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCA9IGVuYWJsZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGJQcmVJZ25vcmVXbGFuQWN0ID0gJWQsIGJDdXJJZ25vcmVXbGFuQWN0ID0gJWQhIVxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCwKKwkJCSAgY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9pZ25vcmVfd2xhbl9hY3QgPT0KKwkJICAgIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpCisJCQlyZXR1cm47CisJfQorCXNldF9md19pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LCBlbmFibGUpOworCisJY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCA9IGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9md19wc190ZG1hKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCBieXRlMSwKKwkJCSAgIHU4IGJ5dGUyLCB1OCBieXRlMywgdTggYnl0ZTQsIHU4IGJ5dGU1KQoreworCXU4IGgyY19wYXJhbWV0ZXJbNV0gPSB7MH07CisKKwloMmNfcGFyYW1ldGVyWzBdID0gYnl0ZTE7CisJaDJjX3BhcmFtZXRlclsxXSA9IGJ5dGUyOworCWgyY19wYXJhbWV0ZXJbMl0gPSBieXRlMzsKKwloMmNfcGFyYW1ldGVyWzNdID0gYnl0ZTQ7CisJaDJjX3BhcmFtZXRlcls0XSA9IGJ5dGU1OworCisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzBdID0gYnl0ZTE7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzFdID0gYnl0ZTI7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzJdID0gYnl0ZTM7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzNdID0gYnl0ZTQ7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzRdID0gYnl0ZTU7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIEZXIHdyaXRlIDB4NjAoNWJ5dGVzKSA9IDB4JXglMDh4XG4iLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0sCisJCSAgaDJjX3BhcmFtZXRlclsxXSA8PCAyNCB8IGgyY19wYXJhbWV0ZXJbMl0gPDwgMTYgfAorCQkgIGgyY19wYXJhbWV0ZXJbM10gPDwgOCB8IGgyY19wYXJhbWV0ZXJbNF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYwLCA1LCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgYm9vbCBzaHJpbmtfcnhfbHBmLAorCQkJCQkgIGJvb2wgbG93X3BlbmFsdHlfcmEsCisJCQkJCSAgYm9vbCBsaW1pdGVkX2RpZywKKwkJCQkJICBib29sIGJ0X2xuYV9jb25zdHJhaW4pCit7CisJaGFsYnRjODcyM2IyYW50X3JmX3NocmluayhidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBzaHJpbmtfcnhfbHBmKTsKKwloYWxidGM4NzIzYjJhbnRfbG93X3BlbmFsdHlfcmEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgbG93X3BlbmFsdHlfcmEpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGFnY190YWJsZV9zaGlmdCwKKwkJCQkJICBib29sIGFkY19iYWNrb2ZmLAorCQkJCQkgIGJvb2wgc3dfZGFjX3N3aW5nLCB1MzIgZGFjX3N3aW5nX2x2bCkKK3sKKwloYWxidGM4NzIzYjJhbnRfYWdjX3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGFnY190YWJsZV9zaGlmdCk7CisJaGFsYnRjODcyM2IyYW50X2RhY19zd2luZyhidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBzd19kYWNfc3dpbmcsCisJCQkJICBkYWNfc3dpbmdfbHZsKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9hbnRfcGF0aChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJIHU4IGFudHBvc190eXBlLCBib29sIGluaXRfaHdjZmcsCisJCQkJCSBib29sIHdpZmlfb2ZmKQoreworCXN0cnVjdCBidGNfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICZidGNvZXhpc3QtPmJvYXJkX2luZm87CisJdTMyIGZ3X3ZlciA9IDAsIHUzMnRtcCA9IDA7CisJYm9vbCBwZ19leHRfc3dpdGNoID0gZmFsc2U7CisJYm9vbCB1c2VfZXh0X3N3aXRjaCA9IGZhbHNlOworCXU4IGgyY19wYXJhbWV0ZXJbMl0gPSB7MH07CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0VYVF9TV0lUQ0gsICZwZ19leHRfc3dpdGNoKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKworCWlmICgoZndfdmVyIDwgMHhjMDAwMCkgfHwgcGdfZXh0X3N3aXRjaCkKKwkJdXNlX2V4dF9zd2l0Y2ggPSB0cnVlOworCisJaWYgKGluaXRfaHdjZmcpIHsKKwkJLyogMHg0Y1syM10gPSAwLCAweDRjWzI0XSA9IDEgIEFudGVubmEgY29udHJvbCBieSBXTC9CVCAqLworCQl1MzJ0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg0Yyk7CisJCXUzMnRtcCAmPSB+QklUKDIzKTsKKwkJdTMydG1wIHw9IEJJVCgyNCk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0YywgdTMydG1wKTsKKworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4OTc0LCAweGZmKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4OTQ0LCAweDMsIDB4Myk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg5MzAsIDB4NzcpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg2NywgMHgyMCwgMHgxKTsKKworCQkvKiBGb3JjZSBHTlRfQlQgdG8gbG93ICovCisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDc2NSwgMHgxOCwgMHgwKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMmJ5dGUoYnRjb2V4aXN0LCAweDk0OCwgMHgwKTsKKworCQlpZiAoYm9hcmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkgeworCQkJLyogdGVsbCBmaXJtd2FyZSAibm8gYW50ZW5uYSBpbnZlcnNlIiAqLworCQkJaDJjX3BhcmFtZXRlclswXSA9IDA7CisJCQloMmNfcGFyYW1ldGVyWzFdID0gMTsgIC8qIGV4dCBzd2l0Y2ggdHlwZSAqLworCQkJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY1LCAyLAorCQkJCQkJaDJjX3BhcmFtZXRlcik7CisJCX0gZWxzZSB7CisJCQkvKiB0ZWxsIGZpcm13YXJlICJhbnRlbm5hIGludmVyc2UiICovCisJCQloMmNfcGFyYW1ldGVyWzBdID0gMTsKKwkJCWgyY19wYXJhbWV0ZXJbMV0gPSAxOyAgLyogZXh0IHN3aXRjaCB0eXBlICovCisJCQlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjUsIDIsCisJCQkJCQloMmNfcGFyYW1ldGVyKTsKKwkJfQorCX0KKworCS8qIGV4dCBzd2l0Y2ggc2V0dGluZyAqLworCWlmICh1c2VfZXh0X3N3aXRjaCkgeworCQkvKiBmaXhlZCBpbnRlcm5hbCBzd2l0Y2ggUzEtPldpRmksIFMwLT5CVCAqLworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4OTQ4LCAweDApOworCQlzd2l0Y2ggKGFudHBvc190eXBlKSB7CisJCWNhc2UgQlRDX0FOVF9XSUZJX0FUX01BSU46CisJCQkvKiBleHQgc3dpdGNoIG1haW4gYXQgd2lmaSAqLworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4OTJjLAorCQkJCQkJCSAgIDB4MywgMHgxKTsKKwkJCWJyZWFrOworCQljYXNlIEJUQ19BTlRfV0lGSV9BVF9BVVg6CisJCQkvKiBleHQgc3dpdGNoIGF1eCBhdCB3aWZpICovCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAweDkyYywgMHgzLCAweDIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgewkvKiBpbnRlcm5hbCBzd2l0Y2ggKi8KKwkJLyogZml4ZWQgZXh0IHN3aXRjaCAqLworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg5MmMsIDB4MywgMHgxKTsKKwkJc3dpdGNoIChhbnRwb3NfdHlwZSkgeworCQljYXNlIEJUQ19BTlRfV0lGSV9BVF9NQUlOOgorCQkJLyogZml4ZWQgaW50ZXJuYWwgc3dpdGNoIFMxLT5XaUZpLCBTMC0+QlQgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgsIDB4MCk7CisJCQlicmVhazsKKwkJY2FzZSBCVENfQU5UX1dJRklfQVRfQVVYOgorCQkJLyogZml4ZWQgaW50ZXJuYWwgc3dpdGNoIFMwLT5XaUZpLCBTMS0+QlQgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgsIDB4MjgwKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfcHNfdGRtYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHR1cm5fb24sIHU4IHR5cGUpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkgICJbQlRDb2V4XSwgJXMgdHVybiAlcyBQUyBURE1BLCB0eXBlID0lZFxuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksCisJCSAgKHR1cm5fb24gPyAiT04iIDogIk9GRiIpLCB0eXBlKTsKKwljb2V4X2RtLT5jdXJfcHNfdGRtYV9vbiA9IHR1cm5fb247CisJY29leF9kbS0+Y3VyX3BzX3RkbWEgPSB0eXBlOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgYlByZVBzVGRtYU9uID0gJWQsIGJDdXJQc1RkbWFPbiA9ICVkISFcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9wc190ZG1hX29uLCBjb2V4X2RtLT5jdXJfcHNfdGRtYV9vbik7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlUHNUZG1hID0gJWQsIGN1clBzVGRtYSA9ICVkISFcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9wc190ZG1hLCBjb2V4X2RtLT5jdXJfcHNfdGRtYSk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfcHNfdGRtYV9vbiA9PSBjb2V4X2RtLT5jdXJfcHNfdGRtYV9vbikgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfcHNfdGRtYSA9PSBjb2V4X2RtLT5jdXJfcHNfdGRtYSkpCisJCQlyZXR1cm47CisJfQorCWlmICh0dXJuX29uKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIDE6CisJCWRlZmF1bHQ6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsIDB4MWEsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxMiwgMHgxMiwgMHhlMSwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDFjLCAweDMsIDB4ZjEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxMCwgMHgwMywgMHhmMSwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDFhLCAweDFhLCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MTIsIDB4MTIsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYywgMHgzLCAweDcwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4YTMsIDB4MTAsIDB4MywgMHg3MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSA5OgorCQkJc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDFhLCAweDFhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDEwOgorCQkJc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEyLCAweDEyLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDExOgorCQkJc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweGEsIDB4YSwgMHhlMSwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAxMjoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHg1LCAweDUsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTM6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsIDB4MWEsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MTIsIDB4MTIsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTU6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4YSwgMHhhLCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJc2V0X2Z3X3BzX3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDUsIDB4NSwgMHg2MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAxNzoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhhMywgMHgyZiwgMHgyZiwgMHg2MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAxODoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHg1LCAweDUsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTk6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MjUsIDB4MjUsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMjA6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MjUsIDB4MjUsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMjE6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MTUsIDB4MDMsIDB4NzAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNzE6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsIDB4MWEsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQkvKiBkaXNhYmxlIFBTIHRkbWEgKi8KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgMDoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHgwLCAweDAsIDB4MCwgMHg0MCwgMHgwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4MCwgMHgwLCAweDAsIDB4NDgsIDB4MCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldF9md19wc190ZG1hKGJ0Y29leGlzdCwgMHgwLCAweDAsIDB4MCwgMHg0MCwgMHgwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogdXBkYXRlIHByZSBzdGF0ZSAqLworCWNvZXhfZG0tPnByZV9wc190ZG1hX29uID0gY29leF9kbS0+Y3VyX3BzX3RkbWFfb247CisJY29leF9kbS0+cHJlX3BzX3RkbWEgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2NvZXhfYWxsb2ZmKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCS8qIGZ3IGFsbCBvZmYgKi8KKwloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJLyogc3cgYWxsIG9mZiAqLworCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisKKwkvKiBodyBhbGwgb2ZmICovCisJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsIDB4ZmZmZmYsIDB4MCk7CisJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLyogZm9yY2UgdG8gcmVzZXQgY29leCBtZWNoYW5pc20qLworCisJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCBmYWxzZSwgMSk7CisJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCA2KTsKKwloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIEZPUkNFX0VYRUMsIGZhbHNlKTsKKworCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYnRfaW5xdWlyeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlib29sIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CisJYm9vbCBsb3dfcHdyX2Rpc2FibGUgPSB0cnVlOworCisJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsCisJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJICAgJndpZmlfY29ubmVjdGVkKTsKKworCWlmICh3aWZpX2Nvbm5lY3RlZCkgeworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA3KTsKKwkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMyk7CisJfSBlbHNlIHsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCAxKTsKKwl9CisJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCA2KTsKKwloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCisJY29leF9kbS0+bmVlZF9yZWNvdmVyXzB4OTQ4ID0gdHJ1ZTsKKwljb2V4X2RtLT5iYWNrdXBfMHg5NDggPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlKGJ0Y29leGlzdCwgMHg5NDgpOworCisJaGFsYnRjODcyM2IyYW50X3NldF9hbnRfcGF0aChidGNvZXhpc3QsIEJUQ19BTlRfV0lGSV9BVF9BVVgsCisJCQkJICAgICBmYWxzZSwgZmFsc2UpOworfQorCitzdGF0aWMgYm9vbCBoYWxidGM4NzIzYjJhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlib29sIGNvbW1vbiA9IGZhbHNlLCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOworCWJvb2wgd2lmaV9idXN5ID0gZmFsc2U7CisJYm9vbCBidF9oc19vbiA9IGZhbHNlLCBsb3dfcHdyX2Rpc2FibGUgPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9DT05ORUNURUQsCisJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9CVVNZLCAmd2lmaV9idXN5KTsKKworCWlmICghd2lmaV9jb25uZWN0ZWQpIHsKKwkJbG93X3B3cl9kaXNhYmxlID0gZmFsc2U7CisJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJCSAgICZsb3dfcHdyX2Rpc2FibGUpOworCisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBXaWZpIG5vbi1jb25uZWN0ZWQgaWRsZSEhXG4iKTsKKworCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwKKwkJCQkJICAweDApOworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKKwkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCQloYWxidGM4NzIzYjJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCQkJICAgICAgZmFsc2UpOworCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkJCSAgICAgIDB4MTgpOworCisJCWNvbW1vbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX05PTl9DT05ORUNURURfSURMRSA9PQorCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSB7CisJCQlsb3dfcHdyX2Rpc2FibGUgPSBmYWxzZTsKKwkJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsCisJCQkJCSAgIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBXaWZpIGNvbm5lY3RlZCArIEJUIG5vbiBjb25uZWN0ZWQtaWRsZSEhXG4iKTsKKworCQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsCisJCQkJCQkgIDB4ZmZmZmYsIDB4MCk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsCisJCQkJCQkJICAgICBOT1JNQUxfRVhFQywgMCk7CisJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwKKwkJCQkJCTEpOworCQkJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCQkgMHhiKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkgICBmYWxzZSk7CisKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCisJCQljb21tb24gPSB0cnVlOworCQl9IGVsc2UgaWYgKEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09CisJCQkgICBjb2V4X2RtLT5idF9zdGF0dXMpIHsKKwkJCWxvd19wd3JfZGlzYWJsZSA9IHRydWU7CisJCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LAorCQkJCQkgICBCVENfU0VUX0FDVF9ESVNBQkxFX0xPV19QT1dFUiwKKwkJCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwkJCWlmIChidF9oc19vbikKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIFdpZmkgY29ubmVjdGVkICsgQlQgY29ubmVjdGVkLWlkbGUhIVxuIik7CisKKwkJCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxLAorCQkJCQkJICAweGZmZmZmLCAweDApOworCQkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgICAgTk9STUFMX0VYRUMsIDApOworCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsCisJCQkJCQkxKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJIDB4Yik7CisJCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJICAgZmFsc2UpOworCisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCisJCQljb21tb24gPSB0cnVlOworCQl9IGVsc2UgeworCQkJbG93X3B3cl9kaXNhYmxlID0gdHJ1ZTsKKwkJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsCisJCQkJCSAgIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKworCQkJaWYgKHdpZmlfYnVzeSkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIFdpZmkgQ29ubmVjdGVkLUJ1c3kgKyBCVCBCdXN5ISFcbiIpOworCQkJCWNvbW1vbiA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoYnRfaHNfb24pCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIFdpZmkgQ29ubmVjdGVkLUlkbGUgKyBCVCBCdXN5ISFcbiIpOworCisJCQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLAorCQkJCQkJCSAgMHgxLCAweGZmZmZmLCAweDApOworCQkJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwKKwkJCQkJICAgIE5PUk1BTF9FWEVDLCA3KTsKKwkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJCXRydWUsIDIxKTsKKwkJCQloYWxidGM4NzIzYjJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsCisJCQkJCQkJCSBOT1JNQUxfRVhFQywKKwkJCQkJCQkJIDB4Yik7CisJCQkJaWYgKGhhbGJ0Yzg3MjNiMmFudF9uZWVkX3RvX2RlY19idF9wd3IoYnRjb2V4aXN0KSkKKwkJCQkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LAorCQkJCQkJCQkgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkJICAgdHJ1ZSk7CisJCQkJZWxzZQorCQkJCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsCisJCQkJCQkJCSAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCQkgICBmYWxzZSk7CisJCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwKKwkJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UsCisJCQkJCQkJICAgICAgZmFsc2UpOworCQkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsCisJCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlLAorCQkJCQkJCSAgICAgIDB4MTgpOworCQkJCWNvbW1vbiA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gY29tbW9uOworfQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJIGJvb2wgc2NvX2hpZCwgYm9vbCB0eF9wYXVzZSwKKwkJCQkJCSB1OCBtYXhfaW50ZXJ2YWwpCit7CisJc3RhdGljIHMzMiB1cCwgZG4sIG0sIG4sIHdhaXRfY291bnQ7CisJLyowOiBubyBjaGFuZ2UsICsxOiBpbmNyZWFzZSBXaUZpIGR1cmF0aW9uLCAtMTogZGVjcmVhc2UgV2lGaSBkdXJhdGlvbiovCisJczMyIHJlc3VsdDsKKwl1OCByZXRyeWNvdW50ID0gMDsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sIFRkbWFEdXJhdGlvbkFkanVzdCgpXG4iKTsKKworCWlmICghY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCkgeworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gdHJ1ZTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBmaXJzdCBydW4gVGRtYUR1cmF0aW9uQWRqdXN0KCkhIVxuIik7CisJCWlmIChzY29faGlkKSB7CisJCQlpZiAodHhfcGF1c2UpIHsKKwkJCQlpZiAobWF4X2ludGVydmFsID09IDEpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTM7CisJCQkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMikgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNDsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAzKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKG1heF9pbnRlcnZhbCA9PSAxKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDkpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gOTsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAyKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEwKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEwOworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDMpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfSBlbHNlIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHR4X3BhdXNlKSB7CisJCQkJaWYgKG1heF9pbnRlcnZhbCA9PSAxKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNTsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAyKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNjsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAzKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAobWF4X2ludGVydmFsID09IDEpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxOworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDIpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDMpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0gZWxzZSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9CisJCQl9CisJCX0KKworCQl1cCA9IDA7CisJCWRuID0gMDsKKwkJbSA9IDE7CisJCW4gPSAzOworCQlyZXN1bHQgPSAwOworCQl3YWl0X2NvdW50ID0gMDsKKwl9IGVsc2UgeworCQkvKmFjY3F1aXJlIHRoZSBCVCBUUnggcmV0cnkgY291bnQgZnJvbSBCVF9JbmZvIGJ5dGUyKi8KKwkJcmV0cnljb3VudCA9IGNvZXhfc3RhLT5idF9yZXRyeV9jbnQ7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcmV0cnljb3VudCA9ICVkXG4iLCByZXRyeWNvdW50KTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCB1cCA9JWQsIGRuID0lZCwgbSA9JWQsIG4gPSVkLCB3YWl0X2NvdW50ID0lZFxuIiwKKwkJCSAgdXAsIGRuLCBtLCBuLCB3YWl0X2NvdW50KTsKKwkJcmVzdWx0ID0gMDsKKwkJd2FpdF9jb3VudCsrOworCQkgLyogbm8gcmV0cnkgaW4gdGhlIGxhc3QgMi1zZWNvbmQgZHVyYXRpb24qLworCQlpZiAocmV0cnljb3VudCA9PSAwKSB7CisJCQl1cCsrOworCQkJZG4tLTsKKworCQkJaWYgKGRuIDw9IDApCisJCQkJZG4gPSAwOworCisJCQlpZiAodXAgPj0gbikgeworCQkJCXdhaXRfY291bnQgPSAwOworCQkJCW4gPSAzOworCQkJCXVwID0gMDsKKwkJCQlkbiA9IDA7CisJCQkJcmVzdWx0ID0gMTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBJbmNyZWFzZSB3aWZpIGR1cmF0aW9uISFcbiIpOworCQkJfSAvKiA8PSAzIHJldHJ5IGluIHRoZSBsYXN0IDItc2Vjb25kIGR1cmF0aW9uKi8KKwkJfSBlbHNlIGlmIChyZXRyeWNvdW50IDw9IDMpIHsKKwkJCXVwLS07CisJCQlkbisrOworCisJCQlpZiAodXAgPD0gMCkKKwkJCQl1cCA9IDA7CisKKwkJCWlmIChkbiA9PSAyKSB7CisJCQkJaWYgKHdhaXRfY291bnQgPD0gMikKKwkJCQkJbSsrOworCQkJCWVsc2UKKwkJCQkJbSA9IDE7CisKKwkJCQlpZiAobSA+PSAyMCkKKwkJCQkJbSA9IDIwOworCisJCQkJbiA9IDMgKiBtOworCQkJCXVwID0gMDsKKwkJCQlkbiA9IDA7CisJCQkJd2FpdF9jb3VudCA9IDA7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgRGVjcmVhc2Ugd2lmaSBkdXJhdGlvbiBmb3IgcmV0cnljb3VudGVyPDMhIVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2FpdF9jb3VudCA9PSAxKQorCQkJCW0rKzsKKwkJCWVsc2UKKwkJCQltID0gMTsKKworCQkJaWYgKG0gPj0gMjApCisJCQkJbSA9IDIwOworCisJCQluID0gMyAqIG07CisJCQl1cCA9IDA7CisJCQlkbiA9IDA7CisJCQl3YWl0X2NvdW50ID0gMDsKKwkJCXJlc3VsdCA9IC0xOworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkgICJbQlRDb2V4XSwgRGVjcmVhc2Ugd2lmaSBkdXJhdGlvbiBmb3IgcmV0cnljb3VudGVyPjMhIVxuIik7CisJCX0KKworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIG1heCBJbnRlcnZhbCA9ICVkXG4iLCBtYXhfaW50ZXJ2YWwpOworCQlpZiAobWF4X2ludGVydmFsID09IDEpIHsKKwkJCWlmICh0eF9wYXVzZSkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCQkJICAiW0JUQ29leF0sIFR4UGF1c2UgPSAxXG4iKTsKKworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3MSkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDgpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gODsKKwkJCQl9CisKKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOSkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNjsKKwkJCQl9CisKKwkJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA1KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDY7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA3OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA4KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgODsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNjsKKwkJCQkJfQorCQkJCX0gIGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA4KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxNDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMzsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDBcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA1KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcxKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDcxOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA0OworCQkJCX0KKworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA5KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJfQorCisJCQkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNzEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDI7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDMpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgNDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA5KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTApOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEwOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDEyOworCQkJCQl9CisJCQkJfSAgZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDQpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDI7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICAxOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3MSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgNzE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTA7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA5KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgOTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMikgeworCQkJaWYgKHR4X3BhdXNlKSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDFcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNjsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDgpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gODsKKwkJCQl9CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTQpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTQ7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTY7CisJCQkJfQorCQkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgNjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDgpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA4OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEzKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE2OworCQkJCQl9CisJCQkJfSAgZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDY7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE2KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE0OworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBUeFBhdXNlID0gMFxuIik7CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA0OworCQkJCX0KKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTMpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTApOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTA7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJfQorCQkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgMjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTA7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTI7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICAyOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgMjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEwKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDEwKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMykgeworCQkJaWYgKHR4X3BhdXNlKSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDFcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDgpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gODsKKwkJCQl9CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTY7CisJCQkJfQorCQkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDgpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA4OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEzKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTYpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE2OworCQkJCQl9CisJCQkJfSAgZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA3OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE2KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgIDE1OworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBUeFBhdXNlID0gMFxuIik7CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA0OworCQkJCX0KKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTMpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMTIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJfQorCQkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICA0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAxMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgMTI7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYSgKKwkJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KKwkJCQkJCQkJCSAgICAgIDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CisJCQkJCQkJCQkgICAgICAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKAorCQkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAgMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoCisJCQkJCQkJCWJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPQorCQkJCQkJCQkJICAgICAxMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qaWYgY3VycmVudCBQc1RkbWEgbm90IG1hdGNoIHdpdGggdGhlIHJlY29yZGVkIG9uZSAod2hlbiBzY2FuLCBkaGNwLi4pLAorCSAqdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCBpdCBiYWNrIHRvIHRoZSBwcmV2aW91cyByZWNvcmQgb25lLiovCisJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IGNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUpIHsKKwkJYm9vbCBzY2FuID0gZmFsc2UsIGxpbmsgPSBmYWxzZSwgcm9hbSA9IGZhbHNlOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIFBzVGRtYSB0eXBlIGRpc21hdGNoISEhLCBjdXJQc1RkbWEgPSVkLCByZWNvcmRQc1RkbWEgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5jdXJfcHNfdGRtYSwgY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSk7CisKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1NDQU4sICZzY2FuKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1JPQU0sICZyb2FtKTsKKworCQlpZiAoIXNjYW4gJiYgIWxpbmsgJiYgIXJvYW0pCisJCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLAorCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSk7CisJCWVsc2UKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJICAiW0JUQ29leF0sIHJvYW1pbmcvbGluay9zY2FuIGlzIHVuZGVyIHByb2dyZXNzLCB3aWxsIGFkanVzdCBuZXh0IHRpbWUhISFcbiIpOworCX0KK30KKworLyogU0NPIG9ubHkgb3IgU0NPK1BBTihIUykgKi8KK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fc2NvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlfcnNzaV9zdGF0ZTsKKwl1MzIgd2lmaV9idzsKKworCXdpZmlfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMmFudF93aWZpX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgMCwgMiwgMTUsIDApOworCisJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsIDB4ZmZmZmYsIDB4MCk7CisKKwloYWxidGM4NzIzYjJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA0KTsKKworCWlmIChoYWxidGM4NzIzYjJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwkvKmZvciBTQ08gcXVhbGl0eSBhdCAxMWIvZyBtb2RlKi8KKwlpZiAoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpCisJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCWVsc2UgIC8qZm9yIFNDTyBxdWFsaXR5ICYgd2lmaSBwZXJmb3JtYW5jZSBiYWxhbmNlIGF0IDExbiBtb2RlKi8KKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgOCk7CisKKwkvKmZvciB2b2ljZSBxdWFsaXR5ICovCisJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDApOworCisJLyogc3cgbWVjaGFuaXNtICovCisJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIHRydWUsIDB4NCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICB0cnVlLCAweDQpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgdHJ1ZSwgMHg0KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICB0cnVlLCAweDQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGU7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpX3Jzc2lfc3RhdGUgPSBoYWxidGM4NzIzYjJhbnRfd2lmaV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkgIDAsIDIsIDE1LCAwKTsKKwlidF9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X2J0X3Jzc2lfc3RhdGUoMiwgMjksIDApOworCisJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsIDB4ZmZmZmYsIDB4MCk7CisKKwloYWxidGM4NzIzYjJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKworCWlmIChoYWxidGM4NzIzYjJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpIC8qL2ZvciBISUQgYXQgMTFiL2cgbW9kZSovCisJCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDcpOworCWVsc2UgIC8qZm9yIEhJRCBxdWFsaXR5ICYgd2lmaSBwZXJmb3JtYW5jZSBiYWxhbmNlIGF0IDExbiBtb2RlKi8KKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgOSk7CisKKwlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMyk7CisKKwkvKiBzdyBtZWNoYW5pc20gKi8KKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworLypBMkRQIG9ubHkgLyBQQU4oRURSKSBvbmx5LyBBMkRQK1BBTihIUykqLworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlfcnNzaV9zdGF0ZSwgd2lmaV9yc3NpX3N0YXRlMSwgYnRfcnNzaV9zdGF0ZTsKKwl1MzIgd2lmaV9idzsKKwl1OCBhcF9udW0gPSAwOworCisJd2lmaV9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X3dpZmlfcnNzaV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJICAwLCAyLCAxNSwgMCk7CisJd2lmaV9yc3NpX3N0YXRlMSA9IGhhbGJ0Yzg3MjNiMmFudF93aWZpX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgIDEsIDIsIDQwLCAwKTsKKwlidF9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X2J0X3Jzc2lfc3RhdGUoMiwgMjksIDApOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9BUF9OVU0sICZhcF9udW0pOworCisJLyogZGVmaW5lIHRoZSBvZmZpY2UgZW52aXJvbm1lbnQgKi8KKwkvKiBkcml2ZXIgZG9uJ3Qga25vdyBBUCBudW0gaW4gTGludXgsIHNvIHdlIHdpbGwgbmV2ZXIgZW50ZXIgdGhpcyBpZiAqLworCWlmIChhcF9udW0gPj0gMTAgJiYgQlRDX1JTU0lfSElHSCh3aWZpX3Jzc2lfc3RhdGUxKSkgeworCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwKKwkJCQkJICAweDApOworCQloYWxidGM4NzIzYjJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKKwkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCisJCS8qIHN3IG1lY2hhbmlzbSAqLworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKwkJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgdHJ1ZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgdHJ1ZSwgMHgxOCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxLCAweGZmZmZmLCAweDApOworCisJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisKKwlpZiAoaGFsYnRjODcyM2IyYW50X25lZWRfdG9fZGVjX2J0X3B3cihidGNvZXhpc3QpKQorCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlKTsKKwllbHNlCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDcpOworCisJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpCisJCWhhbGJ0Yzg3MjNiMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgMSk7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwgMSk7CisKKwkvKiBzdyBtZWNoYW5pc20gKi8KKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYTJkcF9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlOworCXUzMiB3aWZpX2J3OworCisJd2lmaV9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X3dpZmlfcnNzaV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJICAwLCAyLCAxNSwgMCk7CisKKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwgMHgwKTsKKworCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaWYgKGhhbGJ0Yzg3MjNiMmFudF9uZWVkX3RvX2RlY19idF9wd3IoYnRjb2V4aXN0KSkKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSk7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA3KTsKKworCWhhbGJ0Yzg3MjNiMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCAyKTsKKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsCisJCUJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKKwl1MzIgd2lmaV9idzsKKworCXdpZmlfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMmFudF93aWZpX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4NzIzYjJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAyOSwgMCk7CisKKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwgMHgwKTsKKworCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaWYgKGhhbGJ0Yzg3MjNiMmFudF9uZWVkX3RvX2RlY19idF9wd3IoYnRjb2V4aXN0KSkKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSk7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxMCk7CisKKwlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMSk7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA1KTsKKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworLypQQU4oSFMpIG9ubHkqLworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlOworCXUzMiB3aWZpX2J3OworCisJd2lmaV9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X3dpZmlfcnNzaV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJICAwLCAyLCAxNSwgMCk7CisKKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwgMHgwKTsKKworCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlKTsKKwllbHNlCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDcpOworCisJaGFsYnRjODcyM2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCisvKlBBTihFRFIpK0EyRFAqLworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5fZWRyX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOworCXUzMiB3aWZpX2J3OworCisJd2lmaV9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X3dpZmlfcnNzaV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJICAwLCAyLCAxNSwgMCk7CisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMmFudF9idF9yc3NpX3N0YXRlKDIsIDI5LCAwKTsKKworCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxLCAweGZmZmZmLCAweDApOworCisJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisKKwlpZiAoaGFsYnRjODcyM2IyYW50X25lZWRfdG9fZGVjX2J0X3B3cihidGNvZXhpc3QpKQorCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlKTsKKwllbHNlCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCisJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMTIpOworCQlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KQorCQkJaGFsYnRjODcyM2IyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsCisJCQkJCQkJICAgICB0cnVlLCAzKTsKKwkJZWxzZQorCQkJaGFsYnRjODcyM2IyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsCisJCQkJCQkJICAgICBmYWxzZSwgMyk7CisJfSBlbHNlIHsKKwkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNyk7CisJCWhhbGJ0Yzg3MjNiMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCAzKTsKKwl9CisKKwkvKiBzdyBtZWNoYW5pc20JKi8KKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOworCXUzMiB3aWZpX2J3OworCisJd2lmaV9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X3dpZmlfcnNzaV9zdGF0ZShidGNvZXhpc3QsCisJCQkJCQkJICAwLCAyLCAxNSwgMCk7CisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMmFudF9idF9yc3NpX3N0YXRlKDIsIDI5LCAwKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWlmIChoYWxidGM4NzIzYjJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQkJaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCQkgMyk7CisJCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsCisJCQkJCQkJICAgICBOT1JNQUxfRVhFQywgMTEpOworCQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsCisJCQkJCQkgIDB4ZmZmZmYsIDB4NzgwKTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJIDYpOworCQkJY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgICAgTk9STUFMX0VYRUMsIDcpOworCQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsCisJCQkJCQkgIDB4ZmZmZmYsIDB4MCk7CisJCX0KKwkJaGFsYnRjODcyM2IyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIDIpOworCX0gZWxzZSB7CisJCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCQljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxMSk7CisJCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxLCAweGZmZmZmLAorCQkJCQkgIDB4MCk7CisJCWhhbGJ0Yzg3MjNiMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDIpOworCX0KKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCisvKiBISUQrQTJEUCtQQU4oRURSKSAqLworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9oaWRfYTJkcF9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKKwl1MzIgd2lmaV9idzsKKworCXdpZmlfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg3MjNiMmFudF93aWZpX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4NzIzYjJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAyOSwgMCk7CisKKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MSwgMHhmZmZmZiwgMHgwKTsKKworCWhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaWYgKGhhbGJ0Yzg3MjNiMmFudF9uZWVkX3RvX2RlY19idF9wd3IoYnRjb2V4aXN0KSkKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSk7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWNvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDcpOworCisJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykKKwkJCWhhbGJ0Yzg3MjNiMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsCisJCQkJCQkJICAgICB0cnVlLCAyKTsKKwkJZWxzZQorCQkJaGFsYnRjODcyM2IyYW50X3RkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwKKwkJCQkJCQkgICAgIGZhbHNlLCAzKTsKKwl9IGVsc2UgeworCQloYWxidGM4NzIzYjJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAzKTsKKwl9CisKKwkvKiBzdyBtZWNoYW5pc20gKi8KKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9oaWRfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGU7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpX3Jzc2lfc3RhdGUgPSBoYWxidGM4NzIzYjJhbnRfd2lmaV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkgIDAsIDIsIDE1LCAwKTsKKwlidF9yc3NpX3N0YXRlID0gaGFsYnRjODcyM2IyYW50X2J0X3Jzc2lfc3RhdGUoMiwgMjksIDApOworCisJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDEsIDB4ZmZmZmYsIDB4MCk7CisKKwloYWxidGM4NzIzYjJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKworCWlmIChoYWxidGM4NzIzYjJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA3KTsKKworCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQloYWxidGM4NzIzYjJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgMik7CisJZWxzZQorCQloYWxidGM4NzIzYjJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAyKTsKKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOworCQkJaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAorCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IGFsZ29yaXRobSA9IDA7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCBSdW5Db2V4aXN0TWVjaGFuaXNtKCkgPT09PlxuIik7CisKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgUnVuQ29leGlzdE1lY2hhbmlzbSgpLCByZXR1cm4gZm9yIE1hbnVhbCBDVFJMIDw9PT1cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvZXhfc3RhLT51bmRlcl9pcHMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIHdpZmkgaXMgdW5kZXIgSVBTICEhIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlhbGdvcml0aG0gPSBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX2FsZ29yaXRobShidGNvZXhpc3QpOworCWlmIChjb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSAmJgorCSAgICAoQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFOSFMgIT0gYWxnb3JpdGhtKSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQlQgaXMgdW5kZXIgaW5xdWlyeS9wYWdlIHNjYW4gISFcbiIpOworCQloYWxidGM4NzIzYjJhbnRfYWN0aW9uX2J0X2lucXVpcnkoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChjb2V4X2RtLT5uZWVkX3JlY292ZXJfMHg5NDgpIHsKKwkJCWNvZXhfZG0tPm5lZWRfcmVjb3Zlcl8weDk0OCA9IGZhbHNlOworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMmJ5dGUoYnRjb2V4aXN0LCAweDk0OCwKKwkJCQkJCSAgIGNvZXhfZG0tPmJhY2t1cF8weDk0OCk7CisJCX0KKwl9CisKKwljb2V4X2RtLT5jdXJfYWxnb3JpdGhtID0gYWxnb3JpdGhtOworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBBbGdvcml0aG0gPSAlZCBcbiIsCisJCSAgY29leF9kbS0+Y3VyX2FsZ29yaXRobSk7CisKKwlpZiAoaGFsYnRjODcyM2IyYW50X2lzX2NvbW1vbl9hY3Rpb24oYnRjb2V4aXN0KSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50IGNvbW1vbi5cbiIpOworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKGNvZXhfZG0tPmN1cl9hbGdvcml0aG0gIT0gY29leF9kbS0+cHJlX2FsZ29yaXRobSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBwcmVBbGdvcml0aG0gPSVkLCBjdXJBbGdvcml0aG0gPSVkXG4iLCBjb2V4X2RtLT5wcmVfYWxnb3JpdGhtLAorCQkJCSAgY29leF9kbS0+Y3VyX2FsZ29yaXRobSk7CisJCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJCX0KKwkJc3dpdGNoIChjb2V4X2RtLT5jdXJfYWxnb3JpdGhtKSB7CisJCWNhc2UgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fU0NPOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFNDTy5cbiIpOworCQkJaGFsYnRjODcyM2IyYW50X2FjdGlvbl9zY28oYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0hJRDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBISUQuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IEEyRFAuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYTJkcChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fQTJEUF9QQU5IUzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBBMkRQK1BBTihIUykuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYTJkcF9wYW5faHMoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1BBTkVEUjoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBQQU4oRURSKS5cbiIpOworCQkJaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5fZWRyKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5IUzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBIUyBtb2RlLlxuIik7CisJCQloYWxidGM4NzIzYjJhbnRfYWN0aW9uX3Bhbl9ocyhidGNvZXhpc3QpOworCQkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFBBTitBMkRQLlxuIik7CisJCQloYWxidGM4NzIzYjJhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBQQU4oRURSKStISUQuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0hJRF9BMkRQX1BBTkVEUjoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBISUQrQTJEUCtQQU4uXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkX2EyZHBfcGFuX2VkcihidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODcyM0JfMkFOVF9DT0VYX0FMR09fSElEX0EyRFA6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiAyLUFudCwgYWxnb3JpdGhtID0gSElEK0EyRFAuXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkX2EyZHAoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IGNvZXhpc3QgQWxsIE9mZiEhXG4iKTsKKwkJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X2FsbG9mZihidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCX0KKwkJY29leF9kbS0+cHJlX2FsZ29yaXRobSA9IGNvZXhfZG0tPmN1cl9hbGdvcml0aG07CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfd2lmaW9mZl9od2NmZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwkvKiBzZXQgd2xhbl9hY3QgdG8gbG93ICovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHg0KTsKKwkvKiBGb3JjZSBHTlRfQlQgdG8gSGlnaCAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDc2NSwgMHgxOCwgMHgzKTsKKwkvKiBCVCBzZWxlY3QgczAvczEgaXMgY29udHJvbGxlZCBieSBCVCAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDY3LCAweDIwLCAweDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgd29yayBhcm91bmQgZnVuY3Rpb24gc3RhcnQgd2l0aCB3YV9oYWxidGM4NzIzYjJhbnRfCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGV4dGVybiBmdW5jdGlvbiBzdGFydCB3aXRoIEVYaGFsYnRjODcyM2IyYW50XworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X2luaXRfaHdjb25maWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggdTh0bXAgPSAwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCSAgIltCVENvZXhdLCAyQW50IEluaXQgSFcgQ29uZmlnISFcbiIpOworCWNvZXhfZG0tPmJ0X3JmMHgxZV9iYWNrdXAgPQorCQlidGNvZXhpc3QtPmJ0Y19nZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4MWUsIDB4ZmZmZmYpOworCisJLyogMHg3OTBbNTowXSA9IDB4NSAqLworCXU4dG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NzkwKTsKKwl1OHRtcCAmPSAweGMwOworCXU4dG1wIHw9IDB4NTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NzkwLCB1OHRtcCk7CisKKwkvKkFudGVubmEgY29uZmlnCSovCisJaGFsYnRjODcyM2IyYW50X3NldF9hbnRfcGF0aChidGNvZXhpc3QsIEJUQ19BTlRfV0lGSV9BVF9NQUlOLAorCQkJCSAgICAgdHJ1ZSwgZmFsc2UpOworCisKKworCS8qIFBUQSBwYXJhbWV0ZXIgKi8KKwljb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIDApOworCisJLyogRW5hYmxlIGNvdW50ZXIgc3RhdGlzdGljcyAqLworCS8qMHg3NmVbM10gPSAxLCBXTEFOX0FjdCBjb250cm9sIGJ5IFBUQSovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHhjKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4Nzc4LCAweDMpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDQwLCAweDIwLCAweDEpOworfQorCit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCSAgIltCVENvZXhdLCBDb2V4IE1lY2hhbmlzbSBJbml0ISFcbiIpOworCWhhbGJ0Yzg3MjNiMmFudF9pbml0X2NvZXhfZG0oYnRjb2V4aXN0KTsKK30KKwordm9pZCBleF9oYWxidGM4NzIzYjJhbnQ5MmVfZGlzcGxheV9jb2V4X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19ib2FyZF9pbmZvICpib2FyZF9pbmZvID0gJmJ0Y29leGlzdC0+Ym9hcmRfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJdTggKmNsaV9idWYgPSBidGNvZXhpc3QtPmNsaV9idWY7CisJdTggdTh0bXBbNF0sIGksIGJ0X2luZm9fZXh0LCBwc190ZG1hX2Nhc2UgPSAwOworCXUzMiB1MzJ0bXBbNF07CisJYm9vbCByb2FtID0gZmFsc2UsIHNjYW4gPSBmYWxzZTsKKwlib29sIGxpbmsgPSBmYWxzZSwgd2lmaV91bmRlcl81ZyA9IGZhbHNlOworCWJvb2wgYnRfaHNfb24gPSBmYWxzZSwgd2lmaV9idXN5ID0gZmFsc2U7CisJczMyIHdpZmlfcnNzaSA9IDAsIGJ0X2hzX3Jzc2kgPSAwOworCXUzMiB3aWZpX2J3LCB3aWZpX3RyYWZmaWNfZGlyLCBmYV9vZmRtLCBmYV9jY2s7CisJdTggd2lmaV9kb3QxMV9jaG5sLCB3aWZpX2hzX2Nobmw7CisJdTMyIGZ3X3ZlciA9IDAsIGJ0X3BhdGNoX3ZlciA9IDA7CisJdTggYXBfbnVtID0gMDsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXHJcbiA9PT09PT09PT09PT1bQlQgQ29leGlzdCBpbmZvXSA9PT09PT09PT09PT0iKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkgeworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCSAgICJcclxuID09PT09PT09PT1bVW5kZXIgTWFudWFsIENvbnRyb2xdID09PT09PT09PT09PSIpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJICAgIlxyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwl9CisKKwlpZiAoIWJvYXJkX2luZm8tPmJ0X2V4aXN0KSB7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiBCVCBub3QgZXhpc3RzICEhISIpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisJCXJldHVybjsKKwl9CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQgIiwKKwkJICAgIkFudCBQRyBudW1iZXIvIEFudCBtZWNoYW5pc206ICIsCisJCSAgIGJvYXJkX2luZm8tPnBnX2FudF9udW0sIGJvYXJkX2luZm8tPmJ0ZG1fYW50X251bSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJXMgLyAlZCIsCisJCSAgICJCVCBzdGFjay8gaGNpIGV4dCB2ZXIiLAorCQkgICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJICAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfQlRfUEFUQ0hfVkVSLCAmYnRfcGF0Y2hfdmVyKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxyXG4gJS0zNXMgPSAlZF8leC8gMHgleC8gMHgleCglZCkiLAorCQkgICAiQ29leFZlci8gZndfdmVyLyBQYXRjaFZlciIsCisJCSAgIGdsY29leF92ZXJfZGF0ZV84NzIzYl8yYW50LCBnbGNvZXhfdmVyXzg3MjNiXzJhbnQsCisJCSAgIGZ3X3ZlciwgYnRfcGF0Y2hfdmVyLCBidF9wYXRjaF92ZXIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9ET1QxMV9DSE5MLAorCQkJICAgJndpZmlfZG90MTFfY2hubCk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9XSUZJX0hTX0NITkwsICZ3aWZpX2hzX2NobmwpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQgLyAlZCglZCkiLAorCQkgICAiRG90MTEgY2hhbm5lbCAvIEhzQ2hubChIc01vZGUpIiwKKwkJICAgd2lmaV9kb3QxMV9jaG5sLCB3aWZpX2hzX2NobmwsIGJ0X2hzX29uKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlMDJ4ICUwMnggJTAyeCAiLAorCQkgICAiSDJDIFdpZmkgaW5mb3JtIGJ0IGNobmwgSW5mbyIsIGNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzBdLAorCQkgICBjb2V4X2RtLT53aWZpX2NobmxfaW5mb1sxXSwgY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMl0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaV9yc3NpKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1M0X0hTX1JTU0ksICZidF9oc19yc3NpKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1UxX0FQX05VTSwgJmFwX251bSk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQvICVkLyAlZCIsCisJCSAgICJXaWZpIHJzc2kvIEhTIHJzc2kvIEFQIyIsIHdpZmlfcnNzaSwgYnRfaHNfcnNzaSwgYXBfbnVtKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfU0NBTiwgJnNjYW4pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9MSU5LLCAmbGluayk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1JPQU0sICZyb2FtKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQvICVkICIsCisJCSAgICJXaWZpIGxpbmsvIHJvYW0vIHNjYW4iLCBsaW5rLCByb2FtLCBzY2FuKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfVU5ERVJfNUcsICZ3aWZpX3VuZGVyXzVnKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX1RSQUZGSUNfRElSRUNUSU9OLAorCQkJICAgJndpZmlfdHJhZmZpY19kaXIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzIC8gJXMvICVzICIsCisJCSAgICJXaWZpIHN0YXR1cyIsICh3aWZpX3VuZGVyXzVnID8gIjVHIiA6ICIyLjRHIiksCisJCSAgICgoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpID8gIkxlZ2FjeSIgOgorCQkgICAoKChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpID8gIkhUNDAiIDogIkhUMjAiKSkpLAorCQkgICAoKCF3aWZpX2J1c3kpID8gImlkbGUiIDoKKwkJICAgKChCVENfV0lGSV9UUkFGRklDX1RYID09IHdpZmlfdHJhZmZpY19kaXIpID8KKwkJICAgInVwbGluayIgOiAiZG93bmxpbmsiKSkpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkIC8gJWQgLyAlZCAvICVkIiwKKwkJICAgIlNDTy9ISUQvUEFOL0EyRFAiLAorCQkgICBidF9saW5rX2luZm8tPnNjb19leGlzdCwgYnRfbGlua19pbmZvLT5oaWRfZXhpc3QsCisJCSAgIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0LCBidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKwlidGNvZXhpc3QtPmJ0Y19kaXNwX2RiZ19tc2coYnRjb2V4aXN0LCBCVENfREJHX0RJU1BfQlRfTElOS19JTkZPKTsKKworCWJ0X2luZm9fZXh0ID0gY29leF9zdGEtPmJ0X2luZm9fZXh0OworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzIiwKKwkJICAgIkJUIEluZm8gQTJEUCByYXRlIiwKKwkJICAgKGJ0X2luZm9fZXh0ICYgQklUKDApKSA/ICJCYXNpYyByYXRlIiA6ICJFRFIgcmF0ZSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWZvciAoaSA9IDA7IGkgPCBCVF9JTkZPX1NSQ184NzIzQl8yQU5UX01BWDsgaSsrKSB7CisJCWlmIChjb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W2ldKSB7CisJCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCQkgICAiXHJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngoJWQpIiwKKwkJCQkgICBnbGJ0X2luZm9fc3JjXzg3MjNiXzJhbnRbaV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzBdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVsxXSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bMl0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzNdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVs0XSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bNV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzZdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaF9jbnRbaV0pOworCQkJQ0xfUFJJTlRGKGNsaV9idWYpOworCQl9CisJfQorCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJXMvJXMiLAorCQkgICAiUFMgc3RhdGUsIElQUy9MUFMiLAorCQkgICAoKGNvZXhfc3RhLT51bmRlcl9pcHMgPyAiSVBTIE9OIiA6ICJJUFMgT0ZGIikpLAorCQkgICAoKGNvZXhfc3RhLT51bmRlcl9scHMgPyAiTFBTIE9OIiA6ICJMUFMgT0ZGIikpKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwgQlRDX0RCR19ESVNQX0ZXX1BXUl9NT0RFX0NNRCk7CisKKwkvKiBTdyBtZWNoYW5pc20JKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxyXG4gJS0zNXMiLCAiPT09PT09PT09PT09W1N3IG1lY2hhbmlzbV0gPT09PT09PT09PT09Iik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkLyAlZC8gJWQgIiwKKwkJICAgIlNNMVtTaFJmLyBMcFJBLyBMaW1EaWddIiwgY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmssCisJCSAgIGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSwgY29leF9kbS0+bGltaXRlZF9kaWcpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQvICVkKDB4JXgpICIsCisJCSAgICJTTTJbQWdjVC8gQWRjQi8gU3dEYWNTd2luZyhsdmwpXSIsCisJCSAgIGNvZXhfZG0tPmN1cl9hZ2NfdGFibGVfZW4sIGNvZXhfZG0tPmN1cl9hZGNfYmFja19vZmYsCisJCSAgIGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24sIGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkvKiBGdyBtZWNoYW5pc20JKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMiLAorCQkgICAiPT09PT09PT09PT09W0Z3IG1lY2hhbmlzbV0gPT09PT09PT09PT09Iik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJcHNfdGRtYV9jYXNlID0gY29leF9kbS0+Y3VyX3BzX3RkbWE7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcclxuICUtMzVzID0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IGNhc2UtJWQgKGF1dG86JWQpIiwKKwkJICAgIlBTIFRETUEiLCBjb2V4X2RtLT5wc190ZG1hX3BhcmFbMF0sCisJCSAgIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsxXSwgY29leF9kbS0+cHNfdGRtYV9wYXJhWzJdLAorCQkgICBjb2V4X2RtLT5wc190ZG1hX3BhcmFbM10sIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVs0XSwKKwkJICAgcHNfdGRtYV9jYXNlLCBjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQgIiwKKwkJICAgIkRlY0J0UHdyLyBJZ25XbGFuQWN0IiwgY29leF9kbS0+Y3VyX2RlY19idF9wd3IsCisJCSAgIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCS8qIEh3IHNldHRpbmcgKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMiLAorCQkgICAiPT09PT09PT09PT09W0h3IHNldHRpbmddID09PT09PT09PT09PSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgiLAorCQkgICAiUkYtQSwgMHgxZSBpbml0VmFsIiwgY29leF9kbS0+YnRfcmYweDFlX2JhY2t1cCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg3NzgpOworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDg4MCk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleCIsCisJCSAgICIweDc3OC8weDg4MFsyOToyNV0iLCB1OHRtcFswXSwKKwkJICAgKHUzMnRtcFswXSYweDNlMDAwMDAwKSA+PiAyNSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTMydG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4OTQ4KTsKKwl1OHRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDY3KTsKKwl1OHRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDc2NSk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICIweDk0OC8gMHg2N1s1XSAvIDB4NzY1IiwKKwkJICAgdTMydG1wWzBdLCAoKHU4dG1wWzBdJjB4MjApID4+IDUpLCB1OHRtcFsxXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTMydG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4OTJjKTsKKwl1MzJ0bXBbMV0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg5MzApOworCXUzMnRtcFsyXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDk0NCk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICIweDkyY1sxOjBdLyAweDkzMFs3OjBdLzB4OTQ0WzE6MF0iLAorCQkgICB1MzJ0bXBbMF0mMHgzLCB1MzJ0bXBbMV0mMHhmZiwgdTMydG1wWzJdJjB4Myk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHgzOSk7CisJdTh0bXBbMV0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg0MCk7CisJdTMydG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NGMpOworCXU4dG1wWzJdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NjQpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgvIDB4JXgiLAorCQkgICAiMHgzOFsxMV0vMHg0MC8weDRjWzI0OjIzXS8weDY0WzBdIiwKKwkJICAgKCh1OHRtcFswXSAmIDB4OCk+PjMpLCB1OHRtcFsxXSwKKwkJICAgKCh1MzJ0bXBbMF0mMHgwMTgwMDAwMCk+PjIzKSwgdTh0bXBbMl0mMHgxKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg1NTApOworCXU4dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NTIyKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4IiwKKwkJICAgIjB4NTUwKGJjbiBjdHJsKS8weDUyMiIsIHUzMnRtcFswXSwgdTh0bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUzMnRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweGM1MCk7CisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg0OWMpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLAorCQkgICAiMHhjNTAoZGlnKS8weDQ5YyhudWxsLWRyb3ApIiwgdTMydG1wWzBdJjB4ZmYsIHU4dG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MzJ0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhkYTApOworCXUzMnRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweGRhNCk7CisJdTMydG1wWzJdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4ZGE4KTsKKwl1MzJ0bXBbM10gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhjZjApOworCisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHhhNWIpOworCXU4dG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4YTVjKTsKKworCWZhX29mZG0gPSAoKHUzMnRtcFswXSYweGZmZmYwMDAwKSA+PiAxNikgKworCQkgICgodTMydG1wWzFdJjB4ZmZmZjAwMDApID4+IDE2KSArCisJCSAgICh1MzJ0bXBbMV0gJiAweGZmZmYpICsKKwkJICAgKHUzMnRtcFsyXSAmIDB4ZmZmZikgKworCQkgICgodTMydG1wWzNdJjB4ZmZmZjAwMDApID4+IDE2KSArCisJCSAgICh1MzJ0bXBbM10gJiAweGZmZmYpOworCWZhX2NjayA9ICh1OHRtcFswXSA8PCA4KSArIHU4dG1wWzFdOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICJPRkRNLUNDQS9PRkRNLUZBL0NDSy1GQSIsCisJCSAgIHUzMnRtcFswXSYweGZmZmYsIGZhX29mZG0sIGZhX2Njayk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTMydG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NmMwKTsKKwl1MzJ0bXBbMV0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg2YzQpOworCXUzMnRtcFsyXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDZjOCk7CisJdTh0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg2Y2MpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgvIDB4JXgiLAorCQkgICAiMHg2YzAvMHg2YzQvMHg2YzgvMHg2Y2MoY29leFRhYmxlKSIsIFwKKwkJICAgdTMydG1wWzBdLCB1MzJ0bXBbMV0sIHUzMnRtcFsyXSwgdTh0bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVkLyAlZCIsCisJCSAgICIweDc3MChoaWdoLXByaSByeC90eCkiLAorCQkgICBjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCwgY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHgpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZC8gJWQiLAorCQkgICAiMHg3NzQobG93LXByaSByeC90eCkiLCBjb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4LAorCQkgICBjb2V4X3N0YS0+bG93X3ByaW9yaXR5X3R4KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisjaWYgKEJUX0FVVE9fUkVQT1JUX09OTFlfODcyM0JfMkFOVCA9PSAxKQorCWhhbGJ0Yzg3MjNiMmFudF9tb25pdG9yX2J0X2N0cihidGNvZXhpc3QpOworI2VuZGlmCisJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwKKwlCVENfREJHX0RJU1BfQ09FWF9TVEFUSVNUSUNTKTsKK30KKwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0lQU19FTlRFUiA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgSVBTIEVOVEVSIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9pcHMgPSB0cnVlOworCQloYWxidGM4NzIzYjJhbnRfd2lmaW9mZl9od2NmZyhidGNvZXhpc3QpOworCQloYWxidGM4NzIzYjJhbnRfaWdub3JlX3dsYW5fYWN0KGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgdHJ1ZSk7CisJCWhhbGJ0Yzg3MjNiMmFudF9jb2V4X2FsbG9mZihidGNvZXhpc3QpOworCX0gZWxzZSBpZiAoQlRDX0lQU19MRUFWRSA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgSVBTIExFQVZFIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9pcHMgPSBmYWxzZTsKKwkJZXg5MmVfaGFsYnRjODcyM2IyYW50X2luaXRfaHdjb25maWcoYnRjb2V4aXN0KTsKKwkJaGFsYnRjODcyM2IyYW50X2luaXRfY29leF9kbShidGNvZXhpc3QpOworCQloYWxidGM4NzIzYjJhbnRfcXVlcnlfYnRfaW5mbyhidGNvZXhpc3QpOworCX0KK30KKwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfbHBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0xQU19FTkFCTEUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIExQUyBFTkFCTEUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2xwcyA9IHRydWU7CisJfSBlbHNlIGlmIChCVENfTFBTX0RJU0FCTEUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIExQUyBESVNBQkxFIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9scHMgPSBmYWxzZTsKKwl9Cit9CisKK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X3NjYW5fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWlmIChCVENfU0NBTl9TVEFSVCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIFNDQU4gU1RBUlQgbm90aWZ5XG4iKTsKKwllbHNlIGlmIChCVENfU0NBTl9GSU5JU0ggPT0gdHlwZSkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBTQ0FOIEZJTklTSCBub3RpZnlcbiIpOworfQorCit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9jb25uZWN0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0FTU09DSUFURV9TVEFSVCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIENPTk5FQ1QgU1RBUlQgbm90aWZ5XG4iKTsKKwllbHNlIGlmIChCVENfQVNTT0NJQVRFX0ZJTklTSCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIENPTk5FQ1QgRklOSVNIIG5vdGlmeVxuIik7Cit9CisKK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X21lZGlhX3N0YXR1c19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICB1OCB0eXBlKQoreworCXU4IGgyY19wYXJhbWV0ZXJbM10gPSB7MH07CisJdTMyIHdpZmlfYnc7CisJdTggd2lmaV9jZW50cmFsX2Nobmw7CisKKwlpZiAoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBNRURJQSBjb25uZWN0IG5vdGlmeVxuIik7CisJZWxzZQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIE1FRElBIGRpc2Nvbm5lY3Qgbm90aWZ5XG4iKTsKKworCS8qIG9ubHkgMi40RyB3ZSBuZWVkIHRvIGluZm9ybSBidCB0aGUgY2hubCBtYXNrICovCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwKKwkJQlRDX0dFVF9VMV9XSUZJX0NFTlRSQUxfQ0hOTCwgJndpZmlfY2VudHJhbF9jaG5sKTsKKwlpZiAoKEJUQ19NRURJQV9DT05ORUNUID09IHR5cGUpICYmCisJICAgICh3aWZpX2NlbnRyYWxfY2hubCA8PSAxNCkpIHsKKwkJaDJjX3BhcmFtZXRlclswXSA9IDB4MTsKKwkJaDJjX3BhcmFtZXRlclsxXSA9IHdpZmlfY2VudHJhbF9jaG5sOworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LAorCQkJQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisJCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpCisJCQloMmNfcGFyYW1ldGVyWzJdID0gMHgzMDsKKwkJZWxzZQorCQkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MjA7CisJfQorCisJY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMF0gPSBoMmNfcGFyYW1ldGVyWzBdOworCWNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzFdID0gaDJjX3BhcmFtZXRlclsxXTsKKwljb2V4X2RtLT53aWZpX2NobmxfaW5mb1syXSA9IGgyY19wYXJhbWV0ZXJbMl07CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIEZXIHdyaXRlIDB4NjYgPSAweCV4XG4iLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0gPDwgMTYgfCBoMmNfcGFyYW1ldGVyWzFdIDw8IDggfAorCQkgIGgyY19wYXJhbWV0ZXJbMl0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY2LCAzLCBoMmNfcGFyYW1ldGVyKTsKK30KKwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICB1OCB0eXBlKQoreworCWlmICh0eXBlID09IEJUQ19QQUNLRVRfREhDUCkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBESENQIFBhY2tldCBub3RpZnlcbiIpOworfQorCit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggKnRtcGJ1ZiwgdTggbGVuZ3RoKQoreworCXU4IGJ0SW5mbyA9IDA7CisJdTggaSwgcnNwX3NvdXJjZSA9IDA7CisJYm9vbCBidF9idXN5ID0gZmFsc2UsIGxpbWl0ZWRfZGlnID0gZmFsc2U7CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOworCisJY29leF9zdGEtPmMyaF9idF9pbmZvX3JlcV9zZW50ID0gZmFsc2U7CisKKwlyc3Bfc291cmNlID0gdG1wYnVmWzBdJjB4ZjsKKwlpZiAocnNwX3NvdXJjZSA+PSBCVF9JTkZPX1NSQ184NzIzQl8yQU5UX01BWCkKKwkJcnNwX3NvdXJjZSA9IEJUX0lORk9fU1JDXzg3MjNCXzJBTlRfV0lGSV9GVzsKKwljb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W3JzcF9zb3VyY2VdKys7CisKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkgICJbQlRDb2V4XSwgQnQgaW5mb1slZF0sIGxlbmd0aCA9JWQsIGhleCBkYXRhID1bIiwKKwkJICByc3Bfc291cmNlLCBsZW5ndGgpOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1baV0gPSB0bXBidWZbaV07CisJCWlmIChpID09IDEpCisJCQlidEluZm8gPSB0bXBidWZbaV07CisJCWlmIChpID09IGxlbmd0aC0xKQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCQkgICIweCUwMnhdXG4iLCB0bXBidWZbaV0pOworCQllbHNlCisJCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJCSAgIjB4JTAyeCwgIiwgdG1wYnVmW2ldKTsKKwl9CisKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIHJldHVybiBmb3IgTWFudWFsIENUUkw8PT09XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChCVF9JTkZPX1NSQ184NzIzQl8yQU5UX1dJRklfRlcgIT0gcnNwX3NvdXJjZSkgeworCQljb2V4X3N0YS0+YnRfcmV0cnlfY250ID0JLyogWzM6MF0qLworCQkJY29leF9zdGEtPmJ0X2luZm9fYzJoW3JzcF9zb3VyY2VdWzJdICYgMHhmOworCisJCWNvZXhfc3RhLT5idF9yc3NpID0KKwkJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bfc291cmNlXVszXSAqIDIgKyAxMDsKKworCQljb2V4X3N0YS0+YnRfaW5mb19leHQgPQorCQkJY29leF9zdGEtPmJ0X2luZm9fYzJoW3JzcF9zb3VyY2VdWzRdOworCisJCS8qIEhlcmUgd2UgbmVlZCB0byByZXNlbmQgc29tZSB3aWZpIGluZm8gdG8gQlQKKwkJICAgICBiZWNhdXNlIGJ0IGlzIHJlc2V0IGFuZCBsb3NzIG9mIHRoZSBpbmZvLiovCisJCWlmICgoY29leF9zdGEtPmJ0X2luZm9fZXh0ICYgQklUKDEpKSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBCVCBleHQgaW5mbyBiaXQxIGNoZWNrLCBzZW5kIHdpZmkgQlcmQ2hubCB0byBCVCEhXG4iKTsKKwkJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9DT05ORUNURUQsCisJCQkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisJCQlpZiAod2lmaV9jb25uZWN0ZWQpCisJCQkJZXg5MmVfaGFsYnRjODcyM2IyYW50X21lZGlhX3N0YXR1c19ub3RpZnkoCisJCQkJCQkJYnRjb2V4aXN0LAorCQkJCQkJCUJUQ19NRURJQV9DT05ORUNUKTsKKwkJCWVsc2UKKwkJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeSgKKwkJCQkJCQlidGNvZXhpc3QsCisJCQkJCQkJQlRDX01FRElBX0RJU0NPTk5FQ1QpOworCQl9CisKKwkJaWYgKChjb2V4X3N0YS0+YnRfaW5mb19leHQgJiBCSVQoMykpKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEJUIGV4dCBpbmZvIGJpdDMgY2hlY2ssIHNldCBCVCBOT1QgdG8gaWdub3JlIFdsYW4gYWN0aXZlISFcbiIpOworCQkJaGFsYnRjODcyM2IyYW50X2lnbm9yZV93bGFuX2FjdChidGNvZXhpc3QsIEZPUkNFX0VYRUMsCisJCQkJCQkJZmFsc2UpOworCQl9IGVsc2UgeworCQkJLyogQlQgYWxyZWFkeSBOT1QgaWdub3JlIFdsYW4gYWN0aXZlLCBkbyBub3RoaW5nIGhlcmUuKi8KKwkJfQorI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzg3MjNCXzJBTlQgPT0gMCkKKwkJaWYgKChjb2V4X3N0YS0+YnRfaW5mb19leHQgJiBCSVQoNCkpKSB7CisJCQkvKiBCVCBhdXRvIHJlcG9ydCBhbHJlYWR5IGVuYWJsZWQsIGRvIG5vdGhpbmcqLworCQl9IGVsc2UgeworCQkJaGFsYnRjODcyM2IyYW50X2J0X2F1dG9fcmVwb3J0KGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywKKwkJCQkJCSAgICAgICB0cnVlKTsKKwkJfQorI2VuZGlmCisJfQorCisJLyogY2hlY2sgQklUKDIpIGZpcnN0ID09PiBjaGVjayBpZiBidCBpcyB1bmRlciBpbnF1aXJ5IG9yIHBhZ2Ugc2NhbiovCisJaWYgKGJ0SW5mbyAmIEJUX0lORk9fODcyM0JfMkFOVF9CX0lOUV9QQUdFKQorCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IHRydWU7CisJZWxzZQorCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IGZhbHNlOworCisJLyogc2V0IGxpbmsgZXhpc3Qgc3RhdHVzKi8KKwlpZiAoIShidEluZm8gJiBCVF9JTkZPXzg3MjNCXzJBTlRfQl9DT05ORUNUSU9OKSkgeworCQljb2V4X3N0YS0+YnRfbGlua19leGlzdCA9IGZhbHNlOworCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5oaWRfZXhpc3QgPSBmYWxzZTsKKwkJY29leF9zdGEtPnNjb19leGlzdCA9IGZhbHNlOworCX0gZWxzZSB7LyogIGNvbm5lY3Rpb24gZXhpc3RzICovCisJCWNvZXhfc3RhLT5idF9saW5rX2V4aXN0ID0gdHJ1ZTsKKwkJaWYgKGJ0SW5mbyAmIEJUX0lORk9fODcyM0JfMkFOVF9CX0ZUUCkKKwkJCWNvZXhfc3RhLT5wYW5fZXhpc3QgPSB0cnVlOworCQllbHNlCisJCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCWlmIChidEluZm8gJiBCVF9JTkZPXzg3MjNCXzJBTlRfQl9BMkRQKQorCQkJY29leF9zdGEtPmEyZHBfZXhpc3QgPSB0cnVlOworCQllbHNlCisJCQljb2V4X3N0YS0+YTJkcF9leGlzdCA9IGZhbHNlOworCQlpZiAoYnRJbmZvICYgQlRfSU5GT184NzIzQl8yQU5UX0JfSElEKQorCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IHRydWU7CisJCWVsc2UKKwkJCWNvZXhfc3RhLT5oaWRfZXhpc3QgPSBmYWxzZTsKKwkJaWYgKGJ0SW5mbyAmIEJUX0lORk9fODcyM0JfMkFOVF9CX1NDT19FU0NPKQorCQkJY29leF9zdGEtPnNjb19leGlzdCA9IHRydWU7CisJCWVsc2UKKwkJCWNvZXhfc3RhLT5zY29fZXhpc3QgPSBmYWxzZTsKKwl9CisKKwloYWxidGM4NzIzYjJhbnRfdXBkYXRlX2J0X2xpbmtfaW5mbyhidGNvZXhpc3QpOworCisJaWYgKCEoYnRJbmZvICYgQlRfSU5GT184NzIzQl8yQU5UX0JfQ09OTkVDVElPTikpIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODcyM0JfMkFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIEJUIE5vbi1Db25uZWN0ZWQgaWRsZSEhIVxuIik7CisJLyogY29ubmVjdGlvbiBleGlzdHMgYnV0IG5vIGJ1c3kgKi8KKwl9IGVsc2UgaWYgKGJ0SW5mbyA9PSBCVF9JTkZPXzg3MjNCXzJBTlRfQl9DT05ORUNUSU9OKSB7CisJCWNvZXhfZG0tPmJ0X3N0YXR1cyA9IEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIEJUIENvbm5lY3RlZC1pZGxlISEhXG4iKTsKKwl9IGVsc2UgaWYgKChidEluZm8gJiBCVF9JTkZPXzg3MjNCXzJBTlRfQl9TQ09fRVNDTykgfHwKKwkJICAgKGJ0SW5mbyAmIEJUX0lORk9fODcyM0JfMkFOVF9CX1NDT19CVVNZKSkgeworCQljb2V4X2RtLT5idF9zdGF0dXMgPQorCQkJQlRfODcyM0JfMkFOVF9CVF9TVEFUVVNfU0NPX0JVU1k7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgU0NPIGJ1c3khISFcbiIpOworCX0gZWxzZSBpZiAoYnRJbmZvJkJUX0lORk9fODcyM0JfMkFOVF9CX0FDTF9CVVNZKSB7CisJCWNvZXhfZG0tPmJ0X3N0YXR1cyA9CisJCQlCVF84NzIzQl8yQU5UX0JUX1NUQVRVU19BQ0xfQlVTWTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIEJ0SW5mb05vdGlmeSgpLCBCVCBBQ0wgYnVzeSEhIVxuIik7CisJfSBlbHNlIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODcyM0JfMkFOVF9CVF9TVEFUVVNfTUFYOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIEJUIE5vbi1EZWZpbmVkIHN0YXRlISEhXG4iKTsKKwl9CisKKwlpZiAoKEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX0FDTF9CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkgICAgKEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX1NDT19CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkgICAgKEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCWJ0X2J1c3kgPSB0cnVlOworCQlsaW1pdGVkX2RpZyA9IHRydWU7CisJfSBlbHNlIHsKKwkJYnRfYnVzeSA9IGZhbHNlOworCQlsaW1pdGVkX2RpZyA9IGZhbHNlOworCX0KKworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfQlRfVFJBRkZJQ19CVVNZLCAmYnRfYnVzeSk7CisKKwljb2V4X2RtLT5saW1pdGVkX2RpZyA9IGxpbWl0ZWRfZGlnOworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfQlRfTElNSVRFRF9ESUcsICZsaW1pdGVkX2RpZyk7CisKKwloYWxidGM4NzIzYjJhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKGJ0Y29leGlzdCk7Cit9CisKK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X2hhbHRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksICJbQlRDb2V4XSwgSGFsdCBub3RpZnlcbiIpOworCisJaGFsYnRjODcyM2IyYW50X3dpZmlvZmZfaHdjZmcoYnRjb2V4aXN0KTsKKwloYWxidGM4NzIzYjJhbnRfaWdub3JlX3dsYW5fYWN0KGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgdHJ1ZSk7CisJZXg5MmVfaGFsYnRjODcyM2IyYW50X21lZGlhX3N0YXR1c19ub3RpZnkoYnRjb2V4aXN0LCBCVENfTUVESUFfRElTQ09OTkVDVCk7Cit9CisKK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X3BlcmlvZGljYWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19ib2FyZF9pbmZvICpib2FyZF9pbmZvID0gJmJ0Y29leGlzdC0+Ym9hcmRfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOworCXN0YXRpYyB1OCBkaXNfdmVyX2luZm9fY250OworCXUzMiBmd192ZXIgPSAwLCBidF9wYXRjaF92ZXIgPSAwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkgICJbQlRDb2V4XSwgPT09PT09PT09PT09PT09PT09PT09PT09PT0gUGVyaW9kaWNhbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCisJaWYgKGRpc192ZXJfaW5mb19jbnQgPD0gNSkgeworCQlkaXNfdmVyX2luZm9fY250ICs9IDE7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwKKwkJCSAgIltCVENvZXhdLCBBbnQgUEcgTnVtLyBBbnQgTWVjaC8gQW50IFBvcyA9ICVkLyVkLyVkXG4iLCBib2FyZF9pbmZvLT5wZ19hbnRfbnVtLAorCQkJICBib2FyZF9pbmZvLT5idGRtX2FudF9udW0sIGJvYXJkX2luZm8tPmJ0ZG1fYW50X3Bvcyk7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIEJUIHN0YWNrL2hjaSBleHQgdmVyID0gJXMvJWRcbiIsCisJCQkgICgoc3RhY2tfaW5mby0+cHJvZmlsZV9ub3RpZmllZCkgPyAiWWVzIiA6ICJObyIpLAorCQkJICBzdGFja19pbmZvLT5oY2lfdmVyc2lvbik7CisJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfQlRfUEFUQ0hfVkVSLAorCQkJCSAgICZidF9wYXRjaF92ZXIpOworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJbQlRDb2V4XSwgQ29leFZlci9md192ZXIvUGF0Y2hWZXIgPSAlZF8leC8weCV4LzB4JXgoJWQpXG4iLAorCQkJICBnbGNvZXhfdmVyX2RhdGVfODcyM2JfMmFudCwgZ2xjb2V4X3Zlcl84NzIzYl8yYW50LAorCQkJICBmd192ZXIsIGJ0X3BhdGNoX3ZlciwgYnRfcGF0Y2hfdmVyKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJbQlRDb2V4XSwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJfQorCisjaWYgKEJUX0FVVE9fUkVQT1JUX09OTFlfODcyM0JfMkFOVCA9PSAwKQorCWhhbGJ0Yzg3MjNiMmFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7CisJaGFsYnRjODcyM2IyYW50X21vbml0b3JfYnRfY3RyKGJ0Y29leGlzdCk7CisJaGFsYnRjODcyM2IyYW50X21vbml0b3JfYnRfZW5hYmxlX2Rpc2FibGUoYnRjb2V4aXN0KTsKKyNlbHNlCisJaWYgKGlzX3dpZmlfc3RhdHVzX2NoYW5nZWQoYnRjb2V4aXN0KSB8fAorCSAgICBjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KQorCQloYWxidGM4NzIzYjJhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKGJ0Y29leGlzdCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMmFudC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODcyM2IyYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzN2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg3MjNiMmFudC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgZm9sbG93aW5nIGlzIGZvciA4NzIzQiAyQW50IEJUIENvLWV4aXN0IGRlZmluaXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCUJUX0FVVE9fUkVQT1JUX09OTFlfODcyM0JfMkFOVAkJCTEKKworCisjZGVmaW5lCUJUX0lORk9fODcyM0JfMkFOVF9CX0ZUUAkJCUJJVCg3KQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzJBTlRfQl9BMkRQCQkJQklUKDYpCisjZGVmaW5lCUJUX0lORk9fODcyM0JfMkFOVF9CX0hJRAkJCUJJVCg1KQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzJBTlRfQl9TQ09fQlVTWQkJCUJJVCg0KQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzJBTlRfQl9BQ0xfQlVTWQkJCUJJVCgzKQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzJBTlRfQl9JTlFfUEFHRQkJCUJJVCgyKQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzJBTlRfQl9TQ09fRVNDTwkJCUJJVCgxKQorI2RlZmluZQlCVF9JTkZPXzg3MjNCXzJBTlRfQl9DT05ORUNUSU9OCQkJQklUKDApCisKKyNkZWZpbmUgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg3MjNCXzJBTlQJCTIKKworZW51bSBCVF9JTkZPX1NSQ184NzIzQl8yQU5UIHsKKwlCVF9JTkZPX1NSQ184NzIzQl8yQU5UX1dJRklfRlcJCQk9IDB4MCwKKwlCVF9JTkZPX1NSQ184NzIzQl8yQU5UX0JUX1JTUAkJCT0gMHgxLAorCUJUX0lORk9fU1JDXzg3MjNCXzJBTlRfQlRfQUNUSVZFX1NFTkQJCT0gMHgyLAorCUJUX0lORk9fU1JDXzg3MjNCXzJBTlRfTUFYCit9OworCitlbnVtIEJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTIHsKKwlCVF84NzIzQl8yQU5UX0JUX1NUQVRVU19OT05fQ09OTkVDVEVEX0lETEUJPSAweDAsCisJQlRfODcyM0JfMkFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEUJCT0gMHgxLAorCUJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX0lOUV9QQUdFCQk9IDB4MiwKKwlCVF84NzIzQl8yQU5UX0JUX1NUQVRVU19BQ0xfQlVTWQkJPSAweDMsCisJQlRfODcyM0JfMkFOVF9CVF9TVEFUVVNfU0NPX0JVU1kJCT0gMHg0LAorCUJUXzg3MjNCXzJBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWQkJPSAweDUsCisJQlRfODcyM0JfMkFOVF9CVF9TVEFUVVNfTUFYCit9OworCitlbnVtIEJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPIHsKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19VTkRFRklORUQJCT0gMHgwLAorCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1NDTwkJCT0gMHgxLAorCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0hJRAkJCT0gMHgyLAorCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0EyRFAJCQk9IDB4MywKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19BMkRQX1BBTkhTCQk9IDB4NCwKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5FRFIJCQk9IDB4NSwKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5IUwkJCT0gMHg2LAorCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9BMkRQCQk9IDB4NywKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElECQk9IDB4OCwKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19ISURfQTJEUF9QQU5FRFIJCT0gMHg5LAorCUJUXzg3MjNCXzJBTlRfQ09FWF9BTEdPX0hJRF9BMkRQCQk9IDB4YSwKKwlCVF84NzIzQl8yQU5UX0NPRVhfQUxHT19NQVgJCQk9IDB4YiwKK307CisKK3N0cnVjdCBjb2V4X2RtXzg3MjNiXzJhbnQgeworCS8qIGZ3IG1lY2hhbmlzbSAqLworCWJvb2wgcHJlX2RlY19idF9wd3I7CisJYm9vbCBjdXJfZGVjX2J0X3B3cjsKKwl1OCBwcmVfZndfZGFjX3N3aW5nX2x2bDsKKwl1OCBjdXJfZndfZGFjX3N3aW5nX2x2bDsKKwlib29sIGN1cl9pZ25vcmVfd2xhbl9hY3Q7CisJYm9vbCBwcmVfaWdub3JlX3dsYW5fYWN0OworCXU4IHByZV9wc190ZG1hOworCXU4IGN1cl9wc190ZG1hOworCXU4IHBzX3RkbWFfcGFyYVs1XTsKKwl1OCBwc190ZG1hX2R1X2Fkal90eXBlOworCWJvb2wgcmVzZXRfdGRtYV9hZGp1c3Q7CisJYm9vbCBhdXRvX3RkbWFfYWRqdXN0OworCWJvb2wgcHJlX3BzX3RkbWFfb247CisJYm9vbCBjdXJfcHNfdGRtYV9vbjsKKwlib29sIHByZV9idF9hdXRvX3JlcG9ydDsKKwlib29sIGN1cl9idF9hdXRvX3JlcG9ydDsKKworCS8qIHN3IG1lY2hhbmlzbSAqLworCWJvb2wgcHJlX3JmX3J4X2xwZl9zaHJpbms7CisJYm9vbCBjdXJfcmZfcnhfbHBmX3NocmluazsKKwl1MzIgYnRfcmYweDFlX2JhY2t1cDsKKwlib29sIHByZV9sb3dfcGVuYWx0eV9yYTsKKwlib29sIGN1cl9sb3dfcGVuYWx0eV9yYTsKKwlib29sIHByZV9kYWNfc3dpbmdfb247CisJdTMyIHByZV9kYWNfc3dpbmdfbHZsOworCWJvb2wgY3VyX2RhY19zd2luZ19vbjsKKwl1MzIgY3VyX2RhY19zd2luZ19sdmw7CisJYm9vbCBwcmVfYWRjX2JhY2tfb2ZmOworCWJvb2wgY3VyX2FkY19iYWNrX29mZjsKKwlib29sIHByZV9hZ2NfdGFibGVfZW47CisJYm9vbCBjdXJfYWdjX3RhYmxlX2VuOworCXUzMiBwcmVfdmFsMHg2YzA7CisJdTMyIGN1cl92YWwweDZjMDsKKwl1MzIgcHJlX3ZhbDB4NmM0OworCXUzMiBjdXJfdmFsMHg2YzQ7CisJdTMyIHByZV92YWwweDZjODsKKwl1MzIgY3VyX3ZhbDB4NmM4OworCXU4IHByZV92YWwweDZjYzsKKwl1OCBjdXJfdmFsMHg2Y2M7CisJYm9vbCBsaW1pdGVkX2RpZzsKKworCS8qIGFsZ29yaXRobSByZWxhdGVkICovCisJdTggcHJlX2FsZ29yaXRobTsKKwl1OCBjdXJfYWxnb3JpdGhtOworCXU4IGJ0X3N0YXR1czsKKwl1OCB3aWZpX2NobmxfaW5mb1szXTsKKworCWJvb2wgbmVlZF9yZWNvdmVyXzB4OTQ4OworCXUxNiBiYWNrdXBfMHg5NDg7Cit9OworCitzdHJ1Y3QgY29leF9zdGFfODcyM2JfMmFudCB7CisJYm9vbCBidF9saW5rX2V4aXN0OworCWJvb2wgc2NvX2V4aXN0OworCWJvb2wgYTJkcF9leGlzdDsKKwlib29sIGhpZF9leGlzdDsKKwlib29sIHBhbl9leGlzdDsKKworCWJvb2wgdW5kZXJfbHBzOworCWJvb2wgdW5kZXJfaXBzOworCXUzMiBoaWdoX3ByaW9yaXR5X3R4OworCXUzMiBoaWdoX3ByaW9yaXR5X3J4OworCXUzMiBsb3dfcHJpb3JpdHlfdHg7CisJdTMyIGxvd19wcmlvcml0eV9yeDsKKwl1OCBidF9yc3NpOworCXU4IHByZV9idF9yc3NpX3N0YXRlOworCXU4IHByZV93aWZpX3Jzc2lfc3RhdGVbNF07CisJYm9vbCBjMmhfYnRfaW5mb19yZXFfc2VudDsKKwl1OCBidF9pbmZvX2MyaFtCVF9JTkZPX1NSQ184NzIzQl8yQU5UX01BWF1bMTBdOworCXUzMiBidF9pbmZvX2MyaF9jbnRbQlRfSU5GT19TUkNfODcyM0JfMkFOVF9NQVhdOworCWJvb2wgYzJoX2J0X2lucXVpcnlfcGFnZTsKKwl1OCBidF9yZXRyeV9jbnQ7CisJdTggYnRfaW5mb19leHQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgZm9sbG93aW5nIGlzIGludGVyZmFjZSB3aGljaCB3aWxsIG5vdGlmeSBjb2V4IG1vZHVsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9pbml0X2h3Y29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X2luaXRfY29leF9kbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9pcHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXg5MmVfaGFsYnRjODcyM2IyYW50X2xwc19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpOwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfc2Nhbl9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpOwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfY29ubmVjdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgdTggdHlwZSk7Cit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICAgdTggdHlwZSk7Cit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9zcGVjaWFsX3BhY2tldF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQkgdTggdHlwZSk7Cit2b2lkIGV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICB1OCAqdG1wYnVmLCB1OCBsZW5ndGgpOwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfaGFsdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleDkyZV9oYWxidGM4NzIzYjJhbnRfcGVyaW9kaWNhbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4X2hhbGJ0Yzg3MjNiMmFudDkyZV9kaXNwbGF5X2NvZXhfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4ODIxYTFhbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg4MjFhMWFudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTI4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4ODIxYTFhbnQuYwpAQCAtMCwwICsxLDI3ODAgQEAKKy8qICAqLworLyogIERlc2NyaXB0aW9uOiAqLworLyogICovCisvKiAgVGhpcyBmaWxlIGlzIGZvciBSVEw4ODIxQSBDby1leGlzdCBtZWNoYW5pc20gKi8KKy8qICAqLworLyogIEhpc3RvcnkgKi8KKy8qICAyMDEyLzExLzE1IENvc2EgZmlyc3QgY2hlY2sgaW4uICovCisvKiAgKi8KKy8qICAqLworCisvKiAgKi8KKy8qICBpbmNsdWRlIGZpbGVzICovCisvKiAgKi8KKyNpbmNsdWRlICJoYWxidF9wcmVjb21wLmgiCisvKiAgKi8KKy8qICBHbG9iYWwgdmFyaWFibGVzLCB0aGVzZSBhcmUgc3RhdGljIHZhcmlhYmxlcyAqLworLyogICovCitzdGF0aWMgc3RydWN0IGNvZXhfZG1fODgyMWFfMWFudCBnbGNvZXhfZG1fODgyMWFfMWFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9kbV84ODIxYV8xYW50ICpjb2V4X2RtID0gJmdsY29leF9kbV84ODIxYV8xYW50Oworc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84ODIxYV8xYW50IGdsY29leF9zdGFfODgyMWFfMWFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9zdGFfODgyMWFfMWFudCAqY29leF9zdGEgPSAmZ2xjb2V4X3N0YV84ODIxYV8xYW50OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZ2xidF9pbmZvX3NyY184ODIxYV8xYW50W10gPSB7CisJIkJUIEluZm9bd2lmaSBmd10iLAorCSJCVCBJbmZvW2J0IHJzcF0iLAorCSJCVCBJbmZvW2J0IGF1dG8gcmVwb3J0XSIsCit9OworCitzdGF0aWMgdTMyIGdsY29leF92ZXJfZGF0ZV84ODIxYV8xYW50ID0gMjAxMzA4MTY7CitzdGF0aWMgdTMyIGdsY29leF92ZXJfODgyMWFfMWFudCA9IDB4NDE7CisKKy8qICBsb2NhbCBmdW5jdGlvbiBwcm90byB0eXBlIGlmIG5lZWRlZCAqLworLyogIGxvY2FsIGZ1bmN0aW9uIHN0YXJ0IHdpdGggaGFsYnRjODgyMWExYW50XyAqLworc3RhdGljIHU4IGhhbGJ0Yzg4MjFhMWFudF9idF9yc3NpX3N0YXRlKHU4IGxldmVsX251bSwgdTggcnNzaV90aHJlc2gsCisJCQkJCXU4IHJzc2lfdGhyZXNoMSkKK3sKKwlsb25nCQkJYnRfcnNzaSA9IDA7CisJdTggYnRfcnNzaV9zdGF0ZSA9IGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZTsKKworCWJ0X3Jzc2kgPSBjb2V4X3N0YS0+YnRfcnNzaTsKKworCWlmIChsZXZlbF9udW0gPT0gMikgeworCQlpZiAoKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJCSAgICAoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKGJ0X3Jzc2kgPj0gKHJzc2lfdGhyZXNoK0JUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84ODIxQV8xQU5UKSkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3RheSBhdCBMb3dcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJ0X3Jzc2kgPCByc3NpX3RocmVzaCkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IEhpZ2hcbiIpOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChsZXZlbF9udW0gPT0gMykgeworCQlpZiAocnNzaV90aHJlc2ggPiByc3NpX3RocmVzaDEpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHRocmVzaCBlcnJvciEhXG4iKTsKKwkJCXJldHVybiBjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGU7CisJCX0KKworCQlpZiAoKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJCSAgICAoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKGJ0X3Jzc2kgPj0gKHJzc2lfdGhyZXNoK0JUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84ODIxQV8xQU5UKSkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBNZWRpdW1cbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmICgoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJCSAgIChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSB7CisJCQlpZiAoYnRfcnNzaSA+PSAocnNzaV90aHJlc2gxK0JUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84ODIxQV8xQU5UKSkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgaWYgKGJ0X3Jzc2kgPCByc3NpX3RocmVzaCkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgTWVkaXVtXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9yc3NpIDwgcnNzaV90aHJlc2gxKSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIE1lZGl1bVxuIik7CisJCQl9IGVsc2UgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9CisKKwljb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPSBidF9yc3NpX3N0YXRlOworCisJcmV0dXJuIGJ0X3Jzc2lfc3RhdGU7Cit9CisKK3N0YXRpYyB1OCBXaWZpX3Jzc2lfc3RhdGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IGluZGV4LAorCQkJICB1OCBsZXZlbF9udW0sIHU4IHJzc2lfdGhyZXNoLAorCQkJICB1OCByc3NpX3RocmVzaDEpCit7CisJbG9uZwl3aWZpX3Jzc2kgPSAwOworCXU4IHdpZmlfcnNzaV9zdGF0ZSA9IGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaV9yc3NpKTsKKworCWlmIChsZXZlbF9udW0gPT0gMikgeworCQlpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJCSAgICAoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKHdpZmlfcnNzaSA+PSAocnNzaV90aHJlc2grQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg4MjFBXzFBTlQpKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3RheSBhdCBMb3dcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHdpZmlfcnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTG93XG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IEhpZ2hcbiIpOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChsZXZlbF9udW0gPT0gMykgeworCQlpZiAocnNzaV90aHJlc2ggPiByc3NpX3RocmVzaDEpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSB0aHJlc2ggZXJyb3IhIVxuIik7CisJCQlyZXR1cm4gY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdOworCQl9CisKKwkJaWYgKChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJICAgICBCVENfUlNTSV9TVEFURV9MT1cpIHx8CisJCSAgICAoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCSAgICAgQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlpZiAod2lmaV9yc3NpID49IChyc3NpX3RocmVzaCArCisJCQkgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg4MjFBXzFBTlQpKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmICgoY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdID09CisJCQkgICAgQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkJICAgKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJICAgIEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgeworCQkJaWYgKHdpZmlfcnNzaSA+PSAocnNzaV90aHJlc2gxICsKKwkJCSAgICBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODgyMUFfMUFOVCkpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgaWYgKHdpZmlfcnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTG93XG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTWVkaXVtXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aWZpX3Jzc2kgPCByc3NpX3RocmVzaDEpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBNZWRpdW1cbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9CisKKwljb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPSB3aWZpX3Jzc2lfc3RhdGU7CisKKwlyZXR1cm4gd2lmaV9yc3NpX3N0YXRlOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmFfbWFzayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCSAgIGJvb2wgZm9yY2VfZXhlYywgdTMyIGRpc19yYXRlX21hc2spCit7CisJY29leF9kbS0+Y3VyX3JhX21hc2sgPSBkaXNfcmF0ZV9tYXNrOworCisJaWYgKGZvcmNlX2V4ZWMgfHwgKGNvZXhfZG0tPnByZV9yYV9tYXNrICE9IGNvZXhfZG0tPmN1cl9yYV9tYXNrKSkgeworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9VUERBVEVfcmFfbWFzaywKKwkJCQkgICAmY29leF9kbS0+Y3VyX3JhX21hc2spOworCX0KKwljb2V4X2RtLT5wcmVfcmFfbWFzayA9IGNvZXhfZG0tPmN1cl9yYV9tYXNrOworfQorCitzdGF0aWMgdm9pZCBhdXRvX3JhdGVfZmFsbGJhY2tfcmV0cnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCit7CisJYm9vbCB3aWZpX3VuZGVyX2JfbW9kZSA9IGZhbHNlOworCisJY29leF9kbS0+Y3VyX2FyZnJfdHlwZSA9IHR5cGU7CisKKwlpZiAoZm9yY2VfZXhlYyB8fCAoY29leF9kbS0+cHJlX2FyZnJfdHlwZSAhPSBjb2V4X2RtLT5jdXJfYXJmcl90eXBlKSkgeworCQlzd2l0Y2ggKGNvZXhfZG0tPmN1cl9hcmZyX3R5cGUpIHsKKwkJY2FzZSAwOgkvKiAgbm9ybWFsIG1vZGUgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0MzAsCisJCQkJCQkgICBjb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQxKTsKKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0MzQsCisJCQkJCQkgICBjb2V4X2RtLT5iYWNrdXBfYXJmcl9jbnQyKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LAorCQkJCQkgICBCVENfR0VUX0JMX1dJRklfVU5ERVJfQl9NT0RFLAorCQkJCQkgICAmd2lmaV91bmRlcl9iX21vZGUpOworCQkJaWYgKHdpZmlfdW5kZXJfYl9tb2RlKSB7CisJCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgIDB4NDMwLCAweDApOworCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAweDQzNCwKKwkJCQkJCQkgICAweDAxMDEwMTAxKTsKKwkJCX0gZWxzZSB7CisJCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgIDB4NDMwLCAweDApOworCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAweDQzNCwKKwkJCQkJCQkgICAweDA0MDMwMjAxKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwljb2V4X2RtLT5wcmVfYXJmcl90eXBlID0gY29leF9kbS0+Y3VyX2FyZnJfdHlwZTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X3JldHJ5X2xpbWl0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQlib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCit7CisJY29leF9kbS0+Y3VyX3JldHJ5X2xpbWl0X3R5cGUgPSB0eXBlOworCisJaWYgKGZvcmNlX2V4ZWMgfHwgKGNvZXhfZG0tPnByZV9yZXRyeV9saW1pdF90eXBlICE9CisJICAgIGNvZXhfZG0tPmN1cl9yZXRyeV9saW1pdF90eXBlKSkgeworCQlzd2l0Y2ggKGNvZXhfZG0tPmN1cl9yZXRyeV9saW1pdF90eXBlKSB7CisJCWNhc2UgMDoJLyogIG5vcm1hbCBtb2RlICovCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4NDJhLCBjb2V4X2RtLT5iYWNrdXBfcmV0cnlfbGltaXQpOworCQkJYnJlYWs7CisJCWNhc2UgMToJLyogIHJldHJ5IGxpbWl0ID0gOCAqLworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMmJ5dGUoYnRjb2V4aXN0LCAweDQyYSwgMHgwODA4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwljb2V4X2RtLT5wcmVfcmV0cnlfbGltaXRfdHlwZSA9IGNvZXhfZG0tPmN1cl9yZXRyeV9saW1pdF90eXBlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfYW1wZHVfbWF4X3RpbWUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3sKKwljb2V4X2RtLT5jdXJfYW1wZHVfdGltZV90eXBlID0gdHlwZTsKKworCWlmIChmb3JjZV9leGVjIHx8CisJICAgIChjb2V4X2RtLT5wcmVfYW1wZHVfdGltZV90eXBlICE9IGNvZXhfZG0tPmN1cl9hbXBkdV90aW1lX3R5cGUpKSB7CisJCXN3aXRjaCAoY29leF9kbS0+Y3VyX2FtcGR1X3RpbWVfdHlwZSkgeworCQljYXNlIDA6CS8qICBub3JtYWwgbW9kZSAqLworCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDQ1NiwgY29leF9kbS0+YmFja3VwX2FtcGR1X21heF90aW1lKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CS8qICBBTVBEVSB0aW13ID0gMHgzOCAqIDMydXMgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg0NTYsIDB4MzgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWNvZXhfZG0tPnByZV9hbXBkdV90aW1lX3R5cGUgPSBjb2V4X2RtLT5jdXJfYW1wZHVfdGltZV90eXBlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfbGltaXRlZF90eChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCB1OCByYV9tYXNrX3R5cGUsCisJCQkJICAgICAgIHU4IGFyZnJfdHlwZSwgdTggcmV0cnlfbGltaXRfdHlwZSwKKwkJCQkgICAgICAgdTggYW1wZHVfdGltZV90eXBlKQoreworCXN3aXRjaCAocmFfbWFza190eXBlKSB7CisJY2FzZSAwOgkvKiAgbm9ybWFsIG1vZGUgKi8KKwkJdXBkYXRlX3JhX21hc2soYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweDApOworCQlicmVhazsKKwljYXNlIDE6CS8qICBkaXNhYmxlIGNjayAxLzIgKi8KKwkJdXBkYXRlX3JhX21hc2soYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweDAwMDAwMDAzKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkvKiAgZGlzYWJsZSBjY2sgMS8yLzUuNSwgb2ZkbSA2LzkvMTIvMTgvMjQsIG1jcyAwLzEvMi8zLzQgKi8KKwkJdXBkYXRlX3JhX21hc2soYnRjb2V4aXN0LCBmb3JjZV9leGVjLCAweDAwMDFmMWY3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYXV0b19yYXRlX2ZhbGxiYWNrX3JldHJ5KGJ0Y29leGlzdCwgZm9yY2VfZXhlYywgYXJmcl90eXBlKTsKKwloYWxidGM4ODIxYTFhbnRfcmV0cnlfbGltaXQoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCByZXRyeV9saW1pdF90eXBlKTsKKwloYWxidGM4ODIxYTFhbnRfYW1wZHVfbWF4X3RpbWUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCBhbXBkdV90aW1lX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfbGltaXRlZF9yeChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHJlal9hcF9hZ2dfcGt0LAorCQkJCSAgICAgICBib29sIGJ0X2N0cmxfYWdnX2J1Zl9zaXplLAorCQkJCSAgICAgICB1OCBhZ2dfYnVmX3NpemUpCit7CisJYm9vbCByZWplY3RfcnhfYWdnID0gcmVqX2FwX2FnZ19wa3Q7CisJYm9vbCBidF9jdHJsX3J4X2FnZ19zaXplID0gYnRfY3RybF9hZ2dfYnVmX3NpemU7CisJdTggcnhfYWdnX3NpemUgPSBhZ2dfYnVmX3NpemU7CisKKwkvKiAgKi8KKwkvKglSeCBBZ2dyZWdhdGlvbiByZWxhdGVkIHNldHRpbmcgKi8KKwkvKiAgKi8KKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX1RPX1JFSl9BUF9BR0dfUEtULCAmcmVqZWN0X3J4X2FnZyk7CisJLyogIGRlY2lkZSBCVCBjb250cm9sIGFnZ3JlZ2F0aW9uIGJ1ZiBzaXplIG9yIG5vdCAqLworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfQlRfQ1RSTF9BR0dfU0laRSwgJmJ0X2N0cmxfcnhfYWdnX3NpemUpOworCS8qICBhZ2dyZWdhdGlvbiBidWYgc2l6ZSwgb25seSB3b3JrIHdoZW4gQlQgY29udHJvbCBSeCBhZ2dyZWdhdGlvbiBzaXplLiAqLworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfVTFfQUdHX0JVRl9TSVpFLCAmcnhfYWdnX3NpemUpOworCS8qICByZWFsIHVwZGF0ZSBhZ2dyZWdhdGlvbiBzZXR0aW5nICovCisJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfQUdHUkVHQVRFX0NUUkwsIE5VTEwpOworCit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9tb25pdG9yX2J0X2N0cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1MzIgcmVnX2hwX3R4X3J4LCByZWdfbHBfdHhfcngsIHU0X3RtcDsKKwl1MzIgcmVnX2hwX3R4ID0gMCwgcmVnX2hwX3J4ID0gMCwgcmVnX2xwX3R4ID0gMCwgcmVnX2xwX3J4ID0gMDsKKworCXJlZ19ocF90eF9yeCA9IDB4NzcwOworCXJlZ19scF90eF9yeCA9IDB4Nzc0OworCisJdTRfdG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIHJlZ19ocF90eF9yeCk7CisJcmVnX2hwX3R4ID0gdTRfdG1wICYgTUFTS0xXT1JEOworCXJlZ19ocF9yeCA9ICh1NF90bXAgJiBNQVNLSFdPUkQpPj4xNjsKKworCXU0X3RtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCByZWdfbHBfdHhfcngpOworCXJlZ19scF90eCA9IHU0X3RtcCAmIE1BU0tMV09SRDsKKwlyZWdfbHBfcnggPSAodTRfdG1wICYgTUFTS0hXT1JEKT4+MTY7CisKKwljb2V4X3N0YS0+aGlnaF9wcmlvcml0eV90eCA9IHJlZ19ocF90eDsKKwljb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCA9IHJlZ19ocF9yeDsKKwljb2V4X3N0YS0+bG93X3ByaW9yaXR5X3R4ID0gcmVnX2xwX3R4OworCWNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfcnggPSByZWdfbHBfcng7CisKKwkvKiAgcmVzZXQgY291bnRlciAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9xdWVyeV9idF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwljb2V4X3N0YS0+YzJoX2J0X2luZm9fcmVxX3NlbnQgPSB0cnVlOworCisJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQoMCk7CS8qICB0cmlnZ2VyICovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIFF1ZXJ5IEJ0IEluZm8sIEZXIHdyaXRlIDB4NjEgPSAweCV4XG4iLAorCQloMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MSwgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF91cGRhdGVfYnRfbGlua19pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvCSpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCBidF9oc19vbiA9IGZhbHNlOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc19vbik7CisKKwlidF9saW5rX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSBjb2V4X3N0YS0+YnRfbGlua19leGlzdDsKKwlidF9saW5rX2luZm8tPnNjb19leGlzdCA9IGNvZXhfc3RhLT5zY29fZXhpc3Q7CisJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ID0gY29leF9zdGEtPmEyZHBfZXhpc3Q7CisJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgPSBjb2V4X3N0YS0+cGFuX2V4aXN0OworCWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ID0gY29leF9zdGEtPmhpZF9leGlzdDsKKworCS8qICB3b3JrIGFyb3VuZCBmb3IgSFMgbW9kZS4gKi8KKwlpZiAoYnRfaHNfb24pIHsKKwkJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgPSB0cnVlOworCQlidF9saW5rX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSB0cnVlOworCX0KKworCS8qICBjaGVjayBpZiBTY28gb25seSAqLworCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCAmJgorCQkhYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmCisJCSFidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCQkhYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+c2NvX29ubHkgPSB0cnVlOworCWVsc2UKKwkJYnRfbGlua19pbmZvLT5zY29fb25seSA9IGZhbHNlOworCisJLyogIGNoZWNrIGlmIEEyZHAgb25seSAqLworCWlmICghYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYKKwkJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmCisJCSFidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCQkhYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+YTJkcF9vbmx5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2xpbmtfaW5mby0+YTJkcF9vbmx5ID0gZmFsc2U7CisKKwkvKiAgY2hlY2sgaWYgUGFuIG9ubHkgKi8KKwlpZiAoIWJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0ICYmCisJCSFidF9saW5rX2luZm8tPmEyZHBfZXhpc3QgJiYKKwkJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJIWJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KQorCQlidF9saW5rX2luZm8tPnBhbl9vbmx5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2xpbmtfaW5mby0+cGFuX29ubHkgPSBmYWxzZTsKKworCS8qICBjaGVjayBpZiBIaWQgb25seSAqLworCWlmICghYnRfbGlua19pbmZvLT5zY29fZXhpc3QgJiYKKwkJIWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCQkhYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpCisJCWJ0X2xpbmtfaW5mby0+aGlkX29ubHkgPSB0cnVlOworCWVsc2UKKwkJYnRfbGlua19pbmZvLT5oaWRfb25seSA9IGZhbHNlOworfQorCitzdGF0aWMgdTggaGFsYnRjODgyMWExYW50X2FjdGlvbl9hbGdvcml0aG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKwlib29sIGJ0X2hzX29uID0gZmFsc2U7CisJdTggYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fVU5ERUZJTkVEOworCXU4IG51bV9vZl9kaWZmX3Byb2ZpbGUgPSAwOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc19vbik7CisKKwlpZiAoIWJ0X2xpbmtfaW5mby0+YnRfbGlua19leGlzdCkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgTm8gQlQgbGluayBleGlzdHMhISFcbiIpOworCQlyZXR1cm4gYWxnb3JpdGhtOworCX0KKworCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkKKwkJbnVtX29mX2RpZmZfcHJvZmlsZSsrOworCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCkKKwkJbnVtX29mX2RpZmZfcHJvZmlsZSsrOworCWlmIChidF9saW5rX2luZm8tPnBhbl9leGlzdCkKKwkJbnVtX29mX2RpZmZfcHJvZmlsZSsrOworCWlmIChidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpCisJCW51bV9vZl9kaWZmX3Byb2ZpbGUrKzsKKworCWlmIChudW1fb2ZfZGlmZl9wcm9maWxlID09IDEpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IFNDTyBvbmx5XG4iKTsKKwkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1NDTzsKKwkJfSBlbHNlIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBCVCBQcm9maWxlID0gSElEIG9ubHlcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBBMkRQIG9ubHlcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0EyRFA7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBCVCBQcm9maWxlID0gUEFOKEhTKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fUEFOSFM7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBQQU4oRURSKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fUEFORURSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX29mX2RpZmZfcHJvZmlsZSA9PSAyKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBISURcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBBMkRQID09PiBTQ09cbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1NDTzsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fU0NPOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBCVCBQcm9maWxlID0gU0NPICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChidF9saW5rX2luZm8tPmhpZF9leGlzdCAmJgorCQkJCWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBCVCBQcm9maWxlID0gSElEICsgQTJEUFxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBISUQgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBISUQgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQkJfQorCQkJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPnBhbl9leGlzdCAmJgorCQkJCWJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IEEyRFAgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fQTJEUF9QQU5IUzsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IEEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1BBTkVEUl9BMkRQOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX29mX2RpZmZfcHJvZmlsZSA9PSAzKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBISUQgKyBBMkRQID09PiBISURcbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QgJiYKKwkJCQlidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IFNDTyArIEhJRCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19ISURfQTJEUDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQlQgUHJvZmlsZSA9IFNDTyArIEhJRCArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0ICYmCisJCQkJYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBCVCBQcm9maWxlID0gU0NPICsgQTJEUCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19TQ087CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBBMkRQICsgUEFOKEVEUikgPT0+IEhJRFxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJCQlidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBISUQgKyBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRF9BMkRQOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBCVCBQcm9maWxlID0gSElEICsgQTJEUCArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX29mX2RpZmZfcHJvZmlsZSA+PSAzKSB7CisJCWlmIChidF9saW5rX2luZm8tPnNjb19leGlzdCkgeworCQkJaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmCisJCQkJYnRfbGlua19pbmZvLT5wYW5fZXhpc3QgJiYKKwkJCQlidF9saW5rX2luZm8tPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEVycm9yISEhIEJUIFByb2ZpbGUgPSBTQ08gKyBISUQgKyBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIEJUIFByb2ZpbGUgPSBTQ08gKyBISUQgKyBBMkRQICsgUEFOKEVEUikgPT0+UEFOKEVEUikrSElEXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gYWxnb3JpdGhtOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfc2V0X2J0X2F1dG9fcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICAgYm9vbCBlbmFibGVfYXV0b19yZXBvcnQpCit7CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKKworCWgyY19wYXJhbWV0ZXJbMF0gPSAwOworCisJaWYgKGVuYWJsZV9hdXRvX3JlcG9ydCkKKwkJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQoMCk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIEJUIEZXIGF1dG8gcmVwb3J0IDogJXMsIEZXIHdyaXRlIDB4NjggPSAweCV4XG4iLAorCQkgIChlbmFibGVfYXV0b19yZXBvcnQgPyAiRW5hYmxlZCEhIiA6ICJEaXNhYmxlZCEhIiksCisJCSAgaDJjX3BhcmFtZXRlclswXSk7CisKKwlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjgsIDEsIGgyY19wYXJhbWV0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfYnRfYXV0b19yZXBvcnQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgIGJvb2wgZm9yY2VfZXhlYywKKwkJCQkJICAgYm9vbCBlbmFibGVfYXV0b19yZXBvcnQpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLCAiW0JUQ29leF0sICVzIEJUIEF1dG8gcmVwb3J0ID0gJXNcbiIsCisJCShmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwgKChlbmFibGVfYXV0b19yZXBvcnQpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIikpOworCWNvZXhfZG0tPmN1cl9idF9hdXRvX3JlcG9ydCA9IGVuYWJsZV9hdXRvX3JlcG9ydDsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sIHByZV9idF9hdXRvX3JlcG9ydCA9JWQsIGN1cl9idF9hdXRvX3JlcG9ydCA9JWRcbiIsCisJCQljb2V4X2RtLT5wcmVfYnRfYXV0b19yZXBvcnQsIGNvZXhfZG0tPmN1cl9idF9hdXRvX3JlcG9ydCk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9idF9hdXRvX3JlcG9ydCA9PSBjb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQpCisJCQlyZXR1cm47CisJfQorCWhhbGJ0Yzg4MjFhMWFudF9zZXRfYnRfYXV0b19yZXBvcnQoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQpOworCisJY29leF9kbS0+cHJlX2J0X2F1dG9fcmVwb3J0ID0gY29leF9kbS0+Y3VyX2J0X2F1dG9fcmVwb3J0OworfQorCitzdGF0aWMgdm9pZCBzZXRfc3dfcGVuYWx0eV90eF9yYXRlX2FkYXB0aXZlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgYm9vbCBsb3dfcGVuYWx0eV9yYSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzZdID0gezB9OworCisJaDJjX3BhcmFtZXRlclswXSA9IDB4NjsJLyogIG9wQ29kZSwgMHg2ID0gUmV0cnlfUGVuYWx0eSAqLworCisJaWYgKGxvd19wZW5hbHR5X3JhKSB7CisJCWgyY19wYXJhbWV0ZXJbMV0gfD0gQklUKDApOworCQloMmNfcGFyYW1ldGVyWzJdID0gMHgwMDsgIC8qIG5vcm1hbCByYXRlIGV4Y2VwdCBNQ1M3LzYvNSwKKwkJCQkJICAgKiBPRkRNNTQvNDgvMzYgKi8KKwkJaDJjX3BhcmFtZXRlclszXSA9IDB4Zjc7ICAvKiBNQ1M3IG9yIE9GRE01NCAqLworCQloMmNfcGFyYW1ldGVyWzRdID0gMHhmODsgIC8qIE1DUzYgb3IgT0ZETTQ4ICovCisJCWgyY19wYXJhbWV0ZXJbNV0gPSAweGY5OyAgLyogTUNTNSBvciBPRkRNMzYgICovCisJfQorCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgV2lGaSBMb3ctUGVuYWx0eSBSZXRyeTogJXMiLAorCQkgIChsb3dfcGVuYWx0eV9yYSA/ICJPTiEhIiA6ICJPRkYhISIpKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2OSwgNiwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9sb3dfcGVuYWx0eV9yYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGxvd19wZW5hbHR5X3JhKQoreworCWNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSA9IGxvd19wZW5hbHR5X3JhOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCWlmIChjb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEgPT0gY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKQorCQkJcmV0dXJuOworCX0KKwlzZXRfc3dfcGVuYWx0eV90eF9yYXRlX2FkYXB0aXZlKGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKTsKKworCWNvZXhfZG0tPnByZV9sb3dfcGVuYWx0eV9yYSA9IGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X3NldF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICB1MzIgdmFsMHg2YzAsIHUzMiB2YWwweDZjNCwKKwkJCQkJICAgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzAgPSAweCV4XG4iLCB2YWwweDZjMCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDZjMCwgdmFsMHg2YzApOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgY29leCB0YWJsZSwgc2V0IDB4NmM0ID0gMHgleFxuIiwgdmFsMHg2YzQpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg2YzQsIHZhbDB4NmM0KTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IGNvZXggdGFibGUsIHNldCAweDZjOCA9IDB4JXhcbiIsIHZhbDB4NmM4KTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NmM4LCB2YWwweDZjOCk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2Y2MgPSAweCV4XG4iLCB2YWwweDZjYyk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDZjYywgdmFsMHg2Y2MpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCB1MzIgdmFsMHg2YzAsCisJCQkJICAgICAgIHUzMiB2YWwweDZjNCwgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCisJCSAgIltCVENvZXhdLCAlcyB3cml0ZSBDb2V4IFRhYmxlIDB4NmMwID0gMHgleCwgMHg2YzQgPSAweCV4LCAweDZjOCA9IDB4JXgsIDB4NmNjID0gMHgleFxuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksIHZhbDB4NmMwLCB2YWwweDZjNCwKKwkJICB2YWwweDZjOCwgdmFsMHg2Y2MpOworCWNvZXhfZG0tPmN1cl92YWxfMHg2YzAgPSB2YWwweDZjMDsKKwljb2V4X2RtLT5jdXJfdmFsXzB4NmM0ID0gdmFsMHg2YzQ7CisJY29leF9kbS0+Y3VyX3ZhbF8weDZjOCA9IHZhbDB4NmM4OworCWNvZXhfZG0tPmN1cl92YWxfMHg2Y2MgPSB2YWwweDZjYzsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlpZiAoKGNvZXhfZG0tPnByZV92YWxfMHg2YzAgPT0gY29leF9kbS0+Y3VyX3ZhbF8weDZjMCkgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfdmFsXzB4NmM0ID09IGNvZXhfZG0tPmN1cl92YWxfMHg2YzQpICYmCisJCSAgICAoY29leF9kbS0+cHJlX3ZhbF8weDZjOCA9PSBjb2V4X2RtLT5jdXJfdmFsXzB4NmM4KSAmJgorCQkgICAgKGNvZXhfZG0tPnByZV92YWxfMHg2Y2MgPT0gY29leF9kbS0+Y3VyX3ZhbF8weDZjYykpCisJCQlyZXR1cm47CisJfQorCWhhbGJ0Yzg4MjFhMWFudF9zZXRfY29leF90YWJsZShidGNvZXhpc3QsIHZhbDB4NmMwLCB2YWwweDZjNCwKKwkJCQkgICAgICAgdmFsMHg2YzgsIHZhbDB4NmNjKTsKKworCWNvZXhfZG0tPnByZV92YWxfMHg2YzAgPSBjb2V4X2RtLT5jdXJfdmFsXzB4NmMwOworCWNvZXhfZG0tPnByZV92YWxfMHg2YzQgPSBjb2V4X2RtLT5jdXJfdmFsXzB4NmM0OworCWNvZXhfZG0tPnByZV92YWxfMHg2YzggPSBjb2V4X2RtLT5jdXJfdmFsXzB4NmM4OworCWNvZXhfZG0tPnByZV92YWxfMHg2Y2MgPSBjb2V4X2RtLT5jdXJfdmFsXzB4NmNjOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQkgYm9vbCBmb3JjZV9leGVjLCB1OCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgMDoKKwkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLAorCQkJCQkgICAweDU1NTU1NTU1LCAweDU1NTU1NTU1LAorCQkJCQkgICAweGZmZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsCisJCQkJCSAgIDB4NTU1NTU1NTUsIDB4NWE1YTVhNWEsCisJCQkJCSAgIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDI6CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywKKwkJCQkJICAgMHg1YTVhNWE1YSwgMHg1YTVhNWE1YSwKKwkJCQkJICAgMHhmZmZmZmYsIDB4Myk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLAorCQkJCQkgICAweDU1NTU1NTU1LCAweGFhYWFhYWFhLAorCQkJCQkgICAweGZmZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsCisJCQkJCSAgIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJCQkJCSAgIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwljYXNlIDU6CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgZm9yY2VfZXhlYywKKwkJCQkJICAgMHg1ZmZmNWZmZiwgMHg1ZmZmNWZmZiwKKwkJCQkJICAgMHhmZmZmZmYsIDB4Myk7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLAorCQkJCQkgICAweDU1ZmY1NWZmLCAweDVhNWE1YTVhLAorCQkJCQkgICAweGZmZmZmZiwgMHgzKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZShidGNvZXhpc3QsIGZvcmNlX2V4ZWMsCisJCQkJCSAgIDB4NWFmYTVhZmEsIDB4NWFmYTVhZmEsCisJCQkJCSAgIDB4ZmZmZmZmLCAweDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfaWdub3JlX3dsYW5fYWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJICAgYm9vbCBlbmFibGUpCit7CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKKworCWlmIChlbmFibGUpCisJCWgyY19wYXJhbWV0ZXJbMF0gfD0gQklUKDApOwkvKiAgZnVuY3Rpb24gZW5hYmxlICovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBGVyBmb3IgQlQgSWdub3JlIFdsYW5fQWN0LCBGVyB3cml0ZSAweDYzID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MywgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9pZ25vcmVfd2xhbl9hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gSWdub3JlIFdsYW5BY3QgJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoZW5hYmxlID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCA9IGVuYWJsZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHByZV9pZ25vcmVfd2xhbl9hY3QgPSAlZCwgY3VyX2lnbm9yZV93bGFuX2FjdCA9ICVkISFcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9pZ25vcmVfd2xhbl9hY3QsCisJCQkgIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpOworCisJCWlmIChjb2V4X2RtLT5wcmVfaWdub3JlX3dsYW5fYWN0ID09CisJCSAgICBjb2V4X2RtLT5jdXJfaWdub3JlX3dsYW5fYWN0KQorCQkJcmV0dXJuOworCX0KKwloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X2lnbm9yZV93bGFuX2FjdChidGNvZXhpc3QsIGVuYWJsZSk7CisKKwljb2V4X2RtLT5wcmVfaWdub3JlX3dsYW5fYWN0ID0gY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdDsKK30KKworc3RhdGljIHZvaWQKK2hhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IGJ5dGUxLAorCXU4IGJ5dGUyLAorCXU4IGJ5dGUzLAorCXU4IGJ5dGU0LAorCXU4IGJ5dGU1CisJKQoreworCXU4IGgyY19wYXJhbWV0ZXJbNV0gPSB7MH07CisKKwloMmNfcGFyYW1ldGVyWzBdID0gYnl0ZTE7CisJaDJjX3BhcmFtZXRlclsxXSA9IGJ5dGUyOworCWgyY19wYXJhbWV0ZXJbMl0gPSBieXRlMzsKKwloMmNfcGFyYW1ldGVyWzNdID0gYnl0ZTQ7CisJaDJjX3BhcmFtZXRlcls0XSA9IGJ5dGU1OworCisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzBdID0gYnl0ZTE7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzFdID0gYnl0ZTI7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzJdID0gYnl0ZTM7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzNdID0gYnl0ZTQ7CisJY29leF9kbS0+cHNfdGRtYV9wYXJhWzRdID0gYnl0ZTU7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywgIltCVENvZXhdLCBQUy1URE1BIEgyQyBjbWQgPSAweCV4JTA4eFxuIiwKKwkJaDJjX3BhcmFtZXRlclswXSwKKwkJaDJjX3BhcmFtZXRlclsxXTw8MjR8aDJjX3BhcmFtZXRlclsyXTw8MTZ8aDJjX3BhcmFtZXRlclszXTw8OHxoMmNfcGFyYW1ldGVyWzRdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MCwgNSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkCitoYWxidGM4ODIxYTFhbnRfc2V0X2xwc19ycHdtKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IGxwc192YWwsCisJdTggcnB3bV92YWwKKwkpCit7CisJdTggbHBzID0gbHBzX3ZhbDsKKwl1OCBycHdtID0gcnB3bV92YWw7CisKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX1UxX0xQU19WQUwsICZscHMpOworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfVTFfUlBXTV9WQUwsICZycHdtKTsKK30KKworc3RhdGljIHZvaWQKK2hhbGJ0Yzg4MjFhMWFudF9scHNfcnB3bSgKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwlib29sIGZvcmNlX2V4ZWMsCisJdTggbHBzX3ZhbCwKKwl1OCBycHdtX3ZhbAorCSkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsICJbQlRDb2V4XSwgJXMgc2V0IGxwcy9ycHdtID0gMHgleC8weCV4XG4iLAorCQkoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksIGxwc192YWwsIHJwd21fdmFsKTsKKwljb2V4X2RtLT5jdXJfbHBzID0gbHBzX3ZhbDsKKwljb2V4X2RtLT5jdXJfcnB3bSA9IHJwd21fdmFsOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsICJbQlRDb2V4XSwgTFBTLVJ4QmVhY29uTW9kZSA9IDB4JXggLCBMUFMtUlBXTSA9IDB4JXghIVxuIiwKKwkJCSBjb2V4X2RtLT5jdXJfbHBzLCBjb2V4X2RtLT5jdXJfcnB3bSk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfbHBzID09IGNvZXhfZG0tPmN1cl9scHMpICYmCisJCQkoY29leF9kbS0+cHJlX3Jwd20gPT0gY29leF9kbS0+Y3VyX3Jwd20pKSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sIExQUy1SUFdNX0xhc3QgPSAweCV4ICwgTFBTLVJQV01fTm93ID0gMHgleCEhXG4iLAorCQkJCSBjb2V4X2RtLT5wcmVfcnB3bSwgY29leF9kbS0+Y3VyX3Jwd20pOworCisJCQlyZXR1cm47CisJCX0KKwl9CisJaGFsYnRjODgyMWExYW50X3NldF9scHNfcnB3bShidGNvZXhpc3QsIGxwc192YWwsIHJwd21fdmFsKTsKKworCWNvZXhfZG0tPnByZV9scHMgPSBjb2V4X2RtLT5jdXJfbHBzOworCWNvZXhfZG0tPnByZV9ycHdtID0gY29leF9kbS0+Y3VyX3Jwd207Cit9CisKK3N0YXRpYyB2b2lkCitoYWxidGM4ODIxYTFhbnRfc3dfbWVjaGFuaXNtKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCWJvb2wgbG93X3BlbmFsdHlfcmEKKwkpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsICJbQlRDb2V4XSwgU01bTHBSQV0gPSAlZFxuIiwgbG93X3BlbmFsdHlfcmEpOworCisJaGFsYnRjODgyMWExYW50X2xvd19wZW5hbHR5X3JhKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGxvd19wZW5hbHR5X3JhKTsKK30KKworc3RhdGljIHZvaWQKK2hhbGJ0Yzg4MjFhMWFudF9zZXRfYW50X3BhdGgoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJdTggYW50X3Bvc190eXBlLAorCWJvb2wgaW5pdF9od19jZmcsCisJYm9vbCB3aWZpX29mZgorCSkKK3sKKwlzdHJ1Y3QgYnRjX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmYnRjb2V4aXN0LT5ib2FyZF9pbmZvOworCXUzMiB1NF90bXAgPSAwOworCXU4IGgyY19wYXJhbWV0ZXJbMl0gPSB7MH07CisKKwlpZiAoaW5pdF9od19jZmcpIHsKKwkJLyogIDB4NGNbMjNdID0gMCwgMHg0Y1syNF0gPSAxICBBbnRlbm5hIGNvbnRyb2wgYnkgV0wvQlQgKi8KKwkJdTRfdG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NGMpOworCQl1NF90bXAgJj0gfkJJVCgyMyk7CisJCXU0X3RtcCB8PSBCSVQoMjQpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NGMsIHU0X3RtcCk7CisKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4OTc1LCAweDMsIDB4Myk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHhjYjQsIDB4NzcpOworCisJCWlmIChib2FyZF9pbmZvLT5idGRtX2FudF9wb3MgPT0gQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKSB7CisJCQkvKiB0ZWxsIGZpcm13YXJlICJhbnRlbm5hIGludmVyc2UiICA9PT4gV1JPTkcgZmlybXdhcmUgYW50ZW5uYSBjb250cm9sIGNvZGUuPT0+bmVlZCBmdyB0byBmaXggKi8KKwkJCWgyY19wYXJhbWV0ZXJbMF0gPSAxOworCQkJaDJjX3BhcmFtZXRlclsxXSA9IDE7CisJCQlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjUsIDIsIGgyY19wYXJhbWV0ZXIpOworCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg2NCwgMHgxLCAweDEpOyAvKiBNYWluIEFudCB0byAgQlQgZm9yIElQUyBjYXNlIDB4NGNbMjNdID0gMSAqLworCQl9IGVsc2UgeworCQkJLyogdGVsbCBmaXJtd2FyZSAibm8gYW50ZW5uYSBpbnZlcnNlIiA9PT4gV1JPTkcgZmlybXdhcmUgYW50ZW5uYSBjb250cm9sIGNvZGUuPT0+bmVlZCBmdyB0byBmaXggKi8KKwkJCWgyY19wYXJhbWV0ZXJbMF0gPSAwOworCQkJaDJjX3BhcmFtZXRlclsxXSA9IDE7CisJCQlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjUsIDIsIGgyY19wYXJhbWV0ZXIpOworCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg2NCwgMHgxLCAweDApOyAvKiBBdXggQW50IHRvICBCVCBmb3IgSVBTIGNhc2UgMHg0Y1syM10gPSAxICovCisJCX0KKwl9IGVsc2UgaWYgKHdpZmlfb2ZmKSB7CisJCS8qICAweDRjWzI0OjIzXSA9IDAwLCBTZXQgQW50ZW5uYSBjb250cm9sIGJ5IEJUX1JGRV9DVFJMCUJUIFZlbmRvciAweGFjID0gMHhmMDAyICovCisJCXU0X3RtcCA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDRjKTsKKwkJdTRfdG1wICY9IH5CSVQoMjMpOworCQl1NF90bXAgJj0gfkJJVCgyNCk7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg0YywgdTRfdG1wKTsKKwl9CisKKwkvKiAgZXh0IHN3aXRjaCBzZXR0aW5nICovCisJc3dpdGNoIChhbnRfcG9zX3R5cGUpIHsKKwljYXNlIEJUQ19BTlRfUEFUSF9XSUZJOgorCQlpZiAoYm9hcmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkKKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweGNiNywgMHgzMCwgMHgxKTsKKwkJZWxzZQorCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4Y2I3LCAweDMwLCAweDIpOworCQlicmVhazsKKwljYXNlIEJUQ19BTlRfUEFUSF9CVDoKKwkJaWYgKGJvYXJkX2luZm8tPmJ0ZG1fYW50X3BvcyA9PSBCVENfQU5URU5OQV9BVF9NQUlOX1BPUlQpCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHhjYjcsIDB4MzAsIDB4Mik7CisJCWVsc2UKKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweGNiNywgMHgzMCwgMHgxKTsKKwkJYnJlYWs7CisJY2FzZSBCVENfQU5UX1BBVEhfUFRBOgorCWRlZmF1bHQ6CisJCWlmIChib2FyZF9pbmZvLT5idGRtX2FudF9wb3MgPT0gQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUKQorCQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4Y2I3LCAweDMwLCAweDEpOworCQllbHNlCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHhjYjcsIDB4MzAsIDB4Mik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCWJvb2wgZm9yY2VfZXhlYywKKwlib29sIHR1cm5fb24sCisJdTggdHlwZQorCSkKK3sKKwl1OCByc3NpX2FkanVzdF92YWwgPSAwOworCisJY29leF9kbS0+Y3VyX3BzX3RkbWFfb24gPSB0dXJuX29uOworCWNvZXhfZG0tPmN1cl9wc190ZG1hID0gdHlwZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWFfb24pIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsICJbQlRDb2V4XSwgKioqKioqKioqKiBURE1BKG9uLCAlZCkgKioqKioqKioqKlxuIiwKKwkJCQljb2V4X2RtLT5jdXJfcHNfdGRtYSk7CisJCX0gZWxzZSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sICoqKioqKioqKiogVERNQShvZmYsICVkKSAqKioqKioqKioqXG4iLAorCQkJCWNvZXhfZG0tPmN1cl9wc190ZG1hKTsKKwkJfQorCisJCWlmICgoY29leF9kbS0+cHJlX3BzX3RkbWFfb24gPT0gY29leF9kbS0+Y3VyX3BzX3RkbWFfb24pICYmCisJCQkoY29leF9kbS0+cHJlX3BzX3RkbWEgPT0gY29leF9kbS0+Y3VyX3BzX3RkbWEpKQorCQkJcmV0dXJuOworCX0KKwlpZiAodHVybl9vbikgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJZGVmYXVsdDoKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgxYSwgMHgxYSwgMHgwLCAweDUwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4NTEsIDB4M2EsIDB4MDMsIDB4MTAsIDB4NTApOworCQkJcnNzaV9hZGp1c3RfdmFsID0gMTE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDUxLCAweDJiLCAweDAzLCAweDEwLCAweDUwKTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDE0OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgxZCwgMHgxZCwgMHgwLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4OTMsIDB4MTUsIDB4MywgMHgxNCwgMHgwKTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDE3OworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg2MSwgMHgxNSwgMHgzLCAweDExLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4MTMsIDB4YSwgMHgzLCAweDAsIDB4MCk7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDEzLCAweGMsIDB4NSwgMHgwLCAweDApOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg5MywgMHgyNSwgMHgzLCAweDEwLCAweDApOworCQkJYnJlYWs7CisJCWNhc2UgOToKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgyMSwgMHgzLCAweDEwLCAweDUwKTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDE4OworCQkJYnJlYWs7CisJCWNhc2UgMTA6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4MTMsIDB4YSwgMHhhLCAweDAsIDB4NDApOworCQkJYnJlYWs7CisJCWNhc2UgMTE6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4NTEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MTApOworCQkJcnNzaV9hZGp1c3RfdmFsID0gMjA7CisJCQlicmVhazsKKwkJY2FzZSAxMjoKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg1MSwgMHgwYSwgMHgwYSwgMHgwLCAweDUwKTsKKwkJCWJyZWFrOworCQljYXNlIDEzOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDUxLCAweDE4LCAweDE4LCAweDAsIDB4MTApOworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4NTEsIDB4MjEsIDB4MywgMHgxMCwgMHgxMCk7CisJCQlicmVhazsKKwkJY2FzZSAxNToKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHgxMywgMHhhLCAweDMsIDB4OCwgMHgwKTsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDkzLCAweDE1LCAweDMsIDB4MTAsIDB4MCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAxODsKKwkJCWJyZWFrOworCQljYXNlIDE4OgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDkzLCAweDI1LCAweDMsIDB4MTAsIDB4MCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAxNDsKKwkJCWJyZWFrOworCQljYXNlIDIwOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDYxLCAweDM1LCAweDAzLCAweDExLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDIxOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDYxLCAweDE1LCAweDAzLCAweDExLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDIyOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDYxLCAweDI1LCAweDAzLCAweDExLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDIzOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDI1LCAweDMsIDB4MzEsIDB4MTgpOworCQkJcnNzaV9hZGp1c3RfdmFsID0gMjI7CisJCQlicmVhazsKKwkJY2FzZSAyNDoKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxNSwgMHgzLCAweDMxLCAweDE4KTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDIyOworCQkJYnJlYWs7CisJCWNhc2UgMjU6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4YSwgMHgzLCAweDMxLCAweDE4KTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDIyOworCQkJYnJlYWs7CisJCWNhc2UgMjY6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4YSwgMHgzLCAweDMxLCAweDE4KTsKKwkJCXJzc2lfYWRqdXN0X3ZhbCA9IDIyOworCQkJYnJlYWs7CisJCWNhc2UgMjc6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MjUsIDB4MywgMHgzMSwgMHg5OCk7CisJCQlyc3NpX2FkanVzdF92YWwgPSAyMjsKKwkJCWJyZWFrOworCQljYXNlIDI4OgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDY5LCAweDI1LCAweDMsIDB4MzEsIDB4MCk7CisJCQlicmVhazsKKwkJY2FzZSAyOToKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhhYiwgMHgxYSwgMHgxYSwgMHgxLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDMwOgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDUxLCAweDE0LCAweDMsIDB4MTAsIDB4NTApOworCQkJYnJlYWs7CisJCWNhc2UgMzE6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZDMsIDB4MWEsIDB4MWEsIDAsIDB4NTgpOworCQkJYnJlYWs7CisJCWNhc2UgMzI6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4NjEsIDB4YSwgMHgzLCAweDEwLCAweDApOworCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4YTMsIDB4MjUsIDB4MywgMHgzMCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAzNDoKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHg1MywgMHgxYSwgMHgxYSwgMHgwLCAweDEwKTsKKwkJCWJyZWFrOworCQljYXNlIDM1OgorCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDYzLCAweDFhLCAweDFhLCAweDAsIDB4MTApOworCQkJYnJlYWs7CisJCWNhc2UgMzY6CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZDMsIDB4MTIsIDB4MywgMHgxNCwgMHg1MCk7CisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQkvKiAgZGlzYWJsZSBQUyB0ZG1hICovCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIDg6IC8qIFBUQSBDb250cm9sICovCisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4OCwgMHgwLCAweDAsIDB4MCwgMHgwKTsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfYW50X3BhdGgoYnRjb2V4aXN0LCBCVENfQU5UX1BBVEhfUFRBLCBmYWxzZSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDogIC8qIFNvZnR3YXJlIGNvbnRyb2wsIEFudGVubmEgYXQgQlQgc2lkZSAqLworCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCk7CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2FudF9wYXRoKGJ0Y29leGlzdCwgQlRDX0FOVF9QQVRIX0JULCBmYWxzZSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgOTogICAvKiBTb2Z0d2FyZSBjb250cm9sLCBBbnRlbm5hIGF0IFdpRmkgc2lkZSAqLworCQkJaGFsYnRjODgyMWExYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCk7CisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2FudF9wYXRoKGJ0Y29leGlzdCwgQlRDX0FOVF9QQVRIX1dJRkksIGZhbHNlLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSAxMDoJLyogIHVuZGVyIDVHICovCisJCQloYWxidGM4ODIxYTFhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4MCwgMHgwLCAweDAsIDB4OCwgMHgwKTsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfYW50X3BhdGgoYnRjb2V4aXN0LCBCVENfQU5UX1BBVEhfQlQsIGZhbHNlLCBmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyc3NpX2FkanVzdF92YWwgPSAwOworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfVTFfUlNTSV9BREpfVkFMX0ZPUl8xQU5UX0NPRVhfVFlQRSwgJnJzc2lfYWRqdXN0X3ZhbCk7CisKKwkvKiAgdXBkYXRlIHByZSBzdGF0ZSAqLworCWNvZXhfZG0tPnByZV9wc190ZG1hX29uID0gY29leF9kbS0+Y3VyX3BzX3RkbWFfb247CisJY29leF9kbS0+cHJlX3BzX3RkbWEgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKK30KKworc3RhdGljIGJvb2wKK2hhbGJ0Yzg4MjFhMWFudF9pc19jb21tb25fYWN0aW9uKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0CisJKQoreworCWJvb2wgYkNvbW1vbiA9IGZhbHNlLCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCB3aWZpX2J1c3kgPSBmYWxzZTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9DT05ORUNURUQsICZ3aWZpX2Nvbm5lY3RlZCk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0JVU1ksICZ3aWZpX2J1c3kpOworCisJaWYgKCF3aWZpX2Nvbm5lY3RlZCAmJgorCQlCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19OT05fQ09OTkVDVEVEX0lETEUgPT0gY29leF9kbS0+YnRfc3RhdHVzKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBXaWZpIG5vbiBjb25uZWN0ZWQtaWRsZSArIEJUIG5vbiBjb25uZWN0ZWQtaWRsZSEhXG4iKTsKKwkJaGFsYnRjODgyMWExYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKKworCQliQ29tbW9uID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKHdpZmlfY29ubmVjdGVkICYmCisJCQkoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFID09IGNvZXhfZG0tPmJ0X3N0YXR1cykpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIFdpZmkgY29ubmVjdGVkICsgQlQgbm9uIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCQloYWxidGM4ODIxYTFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworCisJCWJDb21tb24gPSB0cnVlOworCX0gZWxzZSBpZiAoIXdpZmlfY29ubmVjdGVkICYmCisJCShCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19DT05ORUNURURfSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCBXaWZpIG5vbiBjb25uZWN0ZWQtaWRsZSArIEJUIGNvbm5lY3RlZC1pZGxlISFcbiIpOworCQloYWxidGM4ODIxYTFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgZmFsc2UpOworCisJCWJDb21tb24gPSB0cnVlOworCX0gZWxzZSBpZiAod2lmaV9jb25uZWN0ZWQgJiYKKwkJKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09IGNvZXhfZG0tPmJ0X3N0YXR1cykpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIFdpZmkgY29ubmVjdGVkICsgQlQgY29ubmVjdGVkLWlkbGUhIVxuIik7CisJCWhhbGJ0Yzg4MjFhMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7CisKKwkJYkNvbW1vbiA9IHRydWU7CisJfSBlbHNlIGlmICghd2lmaV9jb25uZWN0ZWQgJiYKKwkJKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFICE9IGNvZXhfZG0tPmJ0X3N0YXR1cykpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIFdpZmkgbm9uIGNvbm5lY3RlZC1pZGxlICsgQlQgQnVzeSEhXG4iKTsKKwkJaGFsYnRjODgyMWExYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKKworCQliQ29tbW9uID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAod2lmaV9idXN5KSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgV2lmaSBDb25uZWN0ZWQtQnVzeSArIEJUIEJ1c3khIVxuIik7CisJCX0gZWxzZSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgV2lmaSBDb25uZWN0ZWQtSWRsZSArIEJUIEJ1c3khIVxuIik7CisJCX0KKworCQliQ29tbW9uID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGJDb21tb247Cit9CisKK3N0YXRpYyB2b2lkCitoYWxidGM4ODIxYTFhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3RfZm9yX2FjbCgKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwl1OCB3aWZpX3N0YXR1cworCSkKK3sKKwlzdGF0aWMgbG9uZwkJdXAsIGRuLCBtLCBuLCB3YWl0X2NvdW50OworCWxvbmcJCQlyZXN1bHQ7ICAgLyogMDogbm8gY2hhbmdlLCArMTogaW5jcmVhc2UgV2lGaSBkdXJhdGlvbiwgLTE6IGRlY3JlYXNlIFdpRmkgZHVyYXRpb24gKi8KKwl1OCByZXRyeV9jb3VudCA9IDAsIGJ0X2luZm9fZXh0OworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLCAiW0JUQ29leF0sIFRkbWFEdXJhdGlvbkFkanVzdEZvckFjbCgpXG4iKTsKKworCWlmICgoQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19OT05fQ09OTkVDVEVEX0FTU09fQVVUSF9TQ0FOID09IHdpZmlfc3RhdHVzKSB8fAorCQkoQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfU0NBTiA9PSB3aWZpX3N0YXR1cykgfHwKKwkJKEJUXzg4MjFBXzFBTlRfV0lGSV9TVEFUVVNfQ09OTkVDVEVEX1NQRUNJQUxfUEtUID09IHdpZmlfc3RhdHVzKSkgeworCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgIT0gMSAmJgorCQkJY29leF9kbS0+Y3VyX3BzX3RkbWEgIT0gMiAmJgorCQkJY29leF9kbS0+Y3VyX3BzX3RkbWEgIT0gMyAmJgorCQkJY29leF9kbS0+Y3VyX3BzX3RkbWEgIT0gOSkgeworCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gOTsKKworCQkJdXAgPSAwOworCQkJZG4gPSAwOworCQkJbSA9IDE7CisJCQluID0gMzsKKwkJCXJlc3VsdCA9IDA7CisJCQl3YWl0X2NvdW50ID0gMDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKCFjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KSB7CisJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSB0cnVlOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sIGZpcnN0IHJ1biBUZG1hRHVyYXRpb25BZGp1c3QoKSEhXG4iKTsKKworCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyKTsKKwkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCS8qICAqLworCQl1cCA9IDA7CisJCWRuID0gMDsKKwkJbSA9IDE7CisJCW4gPSAzOworCQlyZXN1bHQgPSAwOworCQl3YWl0X2NvdW50ID0gMDsKKwl9IGVsc2UgeworCQkvKiBhY2NxdWlyZSB0aGUgQlQgVFJ4IHJldHJ5IGNvdW50IGZyb20gQlRfSW5mbyBieXRlMiAqLworCQlyZXRyeV9jb3VudCA9IGNvZXhfc3RhLT5idF9yZXRyeV9jbnQ7CisJCWJ0X2luZm9fZXh0ID0gY29leF9zdGEtPmJ0X2luZm9fZXh0OworCQkvKiBCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sIHJldHJ5X2NvdW50ID0gJWRcbiIsIHJldHJ5X2NvdW50KSk7ICovCisJCS8qIEJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsICJbQlRDb2V4XSwgdXAgPSVkLCBkbiA9JWQsIG0gPSVkLCBuID0lZCwgd2FpdF9jb3VudCA9JWRcbiIsICAqLworCQkvKgl1cCwgZG4sIG0sIG4sIHdhaXRfY291bnQpKTsgKi8KKwkJcmVzdWx0ID0gMDsKKwkJd2FpdF9jb3VudCsrOworCisJCWlmIChyZXRyeV9jb3VudCA9PSAwKSB7CisJCQkvKiAgbm8gcmV0cnkgaW4gdGhlIGxhc3QgMi1zZWNvbmQgZHVyYXRpb24gKi8KKwkJCXVwKys7CisJCQlkbi0tOworCisJCQlpZiAoZG4gPD0gMCkKKwkJCQlkbiA9IDA7CisKKwkJCWlmICh1cCA+PSBuKSB7CisJCQkJd2FpdF9jb3VudCA9IDA7CisJCQkJbiA9IDM7CisJCQkJdXAgPSAwOworCQkJCWRuID0gMDsKKwkJCQlyZXN1bHQgPSAxOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsICJbQlRDb2V4XSwgSW5jcmVhc2Ugd2lmaSBkdXJhdGlvbiEhXG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXRyeV9jb3VudCA8PSAzKSB7CisJCQl1cC0tOworCQkJZG4rKzsKKworCQkJaWYgKHVwIDw9IDApCisJCQkJdXAgPSAwOworCisJCQlpZiAoZG4gPT0gMikgeworCQkJCWlmICh3YWl0X2NvdW50IDw9IDIpCisJCQkJCW0rKzsKKwkJCQllbHNlCisJCQkJCW0gPSAxOworCQkJCWlmIChtID49IDIwKQorCQkJCQltID0gMjA7CisKKwkJCQluID0gMyptOworCQkJCXVwID0gMDsKKwkJCQlkbiA9IDA7CisJCQkJd2FpdF9jb3VudCA9IDA7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwgIltCVENvZXhdLCBEZWNyZWFzZSB3aWZpIGR1cmF0aW9uIGZvciByZXRyeUNvdW50ZXI8MyEhXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3YWl0X2NvdW50ID09IDEpCisJCQkJbSsrOworCQkJZWxzZQorCQkJCW0gPSAxOworCQkJaWYgKG0gPj0gMjApCisJCQkJbSA9IDIwOworCisJCQluID0gMyptOworCQkJdXAgPSAwOworCQkJZG4gPSAwOworCQkJd2FpdF9jb3VudCA9IDA7CisJCQlyZXN1bHQgPSAtMTsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsICJbQlRDb2V4XSwgRGVjcmVhc2Ugd2lmaSBkdXJhdGlvbiBmb3IgcmV0cnlDb3VudGVyPjMhIVxuIik7CisJCX0KKworCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQlpZiAoKEJUX0lORk9fODgyMUFfMUFOVF9BMkRQX0JBU0lDX1JBVEUoYnRfaW5mb19leHQpKSAmJgorCQkJCSgoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMSkgfHwgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpKSkgeworCQkJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDkpOworCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA5OworCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA5KTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gOTsKKwkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOSkgeworCQkJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQl9CisJCX0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCWlmICgoQlRfSU5GT184ODIxQV8xQU5UX0EyRFBfQkFTSUNfUkFURShidF9pbmZvX2V4dCkpICYmCisJCQkJKChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB8fCAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikpKSB7CisJCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyKTsKKwkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEpOworCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogbm8gY2hhbmdlICovCisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sICoqKioqKioqKiogVERNQShvbiwgJWQpICoqKioqKioqKipcbiIsCisJCQkJY29leF9kbS0+Y3VyX3BzX3RkbWEpOworCQl9CisKKwkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDEgJiYKKwkJCWNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDIgJiYKKwkJCWNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDkgJiYKKwkJCWNvZXhfZG0tPmN1cl9wc190ZG1hICE9IDExKSB7CisJCQkvKiAgcmVjb3ZlciB0byBwcmV2aW91cyBhZGp1c3QgdHlwZSAqLworCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYWxidGM4ODIxYTFhbnRfcHNfdGRtYV9jaGVja19mb3JfcG93ZXJfc2F2ZV9zdGF0ZSgKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwlib29sIG5ld19wc19zdGF0ZQorCSkKK3sKKwl1OCBscHNfbW9kZSA9IDB4MDsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfTFBTX01PREUsICZscHNfbW9kZSk7CisKKwlpZiAobHBzX21vZGUpIHsKKwkJLyogIGFscmVhZHkgdW5kZXIgTFBTIHN0YXRlICovCisJCWlmICghbmV3X3BzX3N0YXRlKSB7CisJCQkvKiAgd2lsbCBsZWF2ZSBMUFMgc3RhdGUsIHR1cm4gb2ZmIHBzVGRtYSBmaXJzdCAqLworCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDApOworCQl9CisJfSBlbHNlIHsKKwkJLyogIE5PIFBTIHN0YXRlICovCisJCWlmIChuZXdfcHNfc3RhdGUpIHsKKwkJCS8qICB3aWxsIGVudGVyIExQUyBzdGF0ZSwgdHVybiBvZmYgcHNUZG1hIGZpcnN0ICovCisJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMCk7CisJCX0gZWxzZSB7CisJCQkvKiAga2VlcCBzdGF0ZSB1bmRlciBOTyBQUyBzdGF0ZSwgZG8gbm90aGluZy4gKi8KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2hhbGJ0Yzg4MjFhMWFudF9wb3dlcl9zYXZlX3N0YXRlKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IHBzX3R5cGUsCisJdTggbHBzX3ZhbCwKKwl1OCBycHdtX3ZhbAorCSkKK3sKKwlib29sIGxvd19wd3JfZGlzYWJsZSA9IGZhbHNlOworCisJc3dpdGNoIChwc190eXBlKSB7CisJY2FzZSBCVENfUFNfV0lGSV9OQVRJVkU6CisJCS8qICByZWNvdmVyIHRvIG9yaWdpbmFsIDMyayBsb3cgcG93ZXIgc2V0dGluZyAqLworCQlsb3dfcHdyX2Rpc2FibGUgPSBmYWxzZTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsICZsb3dfcHdyX2Rpc2FibGUpOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9OT1JNQUxfTFBTLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBCVENfUFNfTFBTX09OOgorCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYV9jaGVja19mb3JfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIHRydWUpOworCQloYWxidGM4ODIxYTFhbnRfbHBzX3Jwd20oYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgbHBzX3ZhbCwgcnB3bV92YWwpOworCQkvKiAgd2hlbiBjb2V4IGZvcmNlIHRvIGVudGVyIExQUywgZG8gbm90IGVudGVyIDMyayBsb3cgcG93ZXIuICovCisJCWxvd19wd3JfZGlzYWJsZSA9IHRydWU7CisJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLCAmbG93X3B3cl9kaXNhYmxlKTsKKwkJLyogIHBvd2VyIHNhdmUgbXVzdCBleGVjdXRlZCBiZWZvcmUgcHNUZG1hLiAqLworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9FTlRFUl9MUFMsIE5VTEwpOworCQlicmVhazsKKwljYXNlIEJUQ19QU19MUFNfT0ZGOgorCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYV9jaGVja19mb3JfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIGZhbHNlKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfTEVBVkVfTFBTLCBOVUxMKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsYnRjODgyMWExYW50X2NvZXhfdW5kZXJfNWcoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QKKwkpCit7CisJaGFsYnRjODgyMWExYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsIDB4MCwgMHgwKTsKKworCWhhbGJ0Yzg4MjFhMWFudF9pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSk7CisKKwloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMTApOworCisJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCisJaGFsYnRjODgyMWExYW50X2xpbWl0ZWRfdHgoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCwgMCwgMCwgMCk7CisKKwloYWxidGM4ODIxYTFhbnRfbGltaXRlZF9yeChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgZmFsc2UsIDUpOworfQorCitzdGF0aWMgdm9pZAoraGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX29ubHkoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QKKwkpCit7CisJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOworCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA5KTsKK30KKworc3RhdGljIHZvaWQKK2hhbGJ0Yzg4MjFhMWFudF9tb25pdG9yX2J0X2VuYWJsZV9kaXNhYmxlKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0CisJKQoreworCXN0YXRpYyBib29sIHByZV9idF9kaXNhYmxlZDsKKwlzdGF0aWMgdTMyIGJ0X2Rpc2FibGVfY250OworCWJvb2wgYnRfYWN0aXZlID0gdHJ1ZSwgYnRfZGlzYWJsZWQgPSBmYWxzZTsKKworCS8qICBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGJ0IGlzIGRpc2FibGVkICovCisKKwlpZiAoY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHggPT0gMCAmJgorCQljb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCA9PSAwICYmCisJCWNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfdHggPT0gMCAmJgorCQljb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4ID09IDApIHsKKwkJYnRfYWN0aXZlID0gZmFsc2U7CisJfQorCWlmIChjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV90eCA9PSAweGZmZmYgJiYKKwkgICAgY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfcnggPT0gMHhmZmZmICYmCisJICAgIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfdHggPT0gMHhmZmZmICYmCisJICAgIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfcnggPT0gMHhmZmZmKSB7CisJCWJ0X2FjdGl2ZSA9IGZhbHNlOworCX0KKwlpZiAoYnRfYWN0aXZlKSB7CisJCWJ0X2Rpc2FibGVfY250ID0gMDsKKwkJYnRfZGlzYWJsZWQgPSBmYWxzZTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9CTF9CVF9ESVNBQkxFLAorCQkJCSAgICZidF9kaXNhYmxlZCk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9NT05JVE9SLAorCQkJICAiW0JUQ29leF0sIEJUIGlzIGVuYWJsZWQgISFcbiIpOworCX0gZWxzZSB7CisJCWJ0X2Rpc2FibGVfY250Kys7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9NT05JVE9SLAorCQkJICAiW0JUQ29leF0sIGJ0IGFsbCBjb3VudGVycyA9IDAsICVkIHRpbWVzISFcbiIsCisJCQkgIGJ0X2Rpc2FibGVfY250KTsKKwkJaWYgKGJ0X2Rpc2FibGVfY250ID49IDIpIHsKKwkJCWJ0X2Rpc2FibGVkID0gdHJ1ZTsKKwkJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfQlRfRElTQUJMRSwKKwkJCQkJICAgJmJ0X2Rpc2FibGVkKTsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9NT05JVE9SLAorCQkJCSAgIltCVENvZXhdLCBCVCBpcyBkaXNhYmxlZCAhIVxuIik7CisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX3dpZmlfb25seShidGNvZXhpc3QpOworCQl9CisJfQorCWlmIChwcmVfYnRfZGlzYWJsZWQgIT0gYnRfZGlzYWJsZWQpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCQkgICJbQlRDb2V4XSwgQlQgaXMgZnJvbSAlcyB0byAlcyEhXG4iLAorCQkJICAocHJlX2J0X2Rpc2FibGVkID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiksCisJCQkgIChidF9kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpKTsKKwkJcHJlX2J0X2Rpc2FibGVkID0gYnRfZGlzYWJsZWQ7CisJCWlmIChidF9kaXNhYmxlZCkgeworCQkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwKKwkJCQkJICAgQlRDX1NFVF9BQ1RfTEVBVkVfTFBTLCBOVUxMKTsKKwkJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsCisJCQkJCSAgIEJUQ19TRVRfQUNUX05PUk1BTF9MUFMsIE5VTEwpOworCQl9CisJfQorfQorCisvKglTb2Z0d2FyZSBDb2V4IE1lY2hhbmlzbSBzdGFydCAqLworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9zY28oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODgyMWExYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfYWN0aW9uX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4ODIxYTFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgdHJ1ZSk7Cit9CisKKy8qIEEyRFAgb25seSAvIFBBTihFRFIpIG9ubHkvIEEyRFArUEFOKEhTKSAqLworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWhhbGJ0Yzg4MjFhMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fYTJkcF9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODgyMWExYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWhhbGJ0Yzg4MjFhMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7Cit9CisKKy8qIFBBTihIUykgb25seSAqLworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODgyMWExYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKK30KKworLyogUEFOKEVEUikrQTJEUCAqLworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9wYW5fZWRyX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJaGFsYnRjODgyMWExYW50X3N3X21lY2hhbmlzbShidGNvZXhpc3QsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9wYW5fZWRyX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4ODIxYTFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgdHJ1ZSk7Cit9CisKKy8qICBISUQrQTJEUCtQQU4oRURSKSAqLworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9oaWRfYTJkcF9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWhhbGJ0Yzg4MjFhMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9oaWRfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4ODIxYTFhbnRfc3dfbWVjaGFuaXNtKGJ0Y29leGlzdCwgdHJ1ZSk7Cit9CisKKy8qCU5vbi1Tb2Z0d2FyZSBDb2V4IE1lY2hhbmlzbSBzdGFydCAqLworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA1KTsKKwloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2FjdGlvbl9idF9pbnF1aXJ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwgJndpZmlfY29ubmVjdGVkKTsKKworCWlmICghd2lmaV9jb25uZWN0ZWQpIHsKKwkJaGFsYnRjODgyMWExYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsIDB4MCwgMHgwKTsKKwkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNSk7CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9IGVsc2UgaWYgKChidF9saW5rX2luZm8tPnNjb19leGlzdCkgfHwKKwkJCShidF9saW5rX2luZm8tPmhpZF9vbmx5KSkgeworCQkvKiAgU0NPL0hJRC1vbmx5IGJ1c3kgKi8KKwkJaGFsYnRjODgyMWExYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsIDB4MCwgMHgwKTsKKwkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMzIpOworCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJfSBlbHNlIHsKKwkJaGFsYnRjODgyMWExYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfTFBTX09OLCAweDUwLCAweDQpOworCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzMCk7CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYWxidGM4ODIxYTFhbnRfYWN0aW9uX2J0X3Njb19oaWRfb25seV9idXN5KAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IHdpZmlfc3RhdHVzCisJKQoreworCS8qICB0ZG1hIGFuZCBjb2V4IHRhYmxlICovCisJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNSk7CisKKwlpZiAoQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19OT05fQ09OTkVDVEVEX0FTU09fQVVUSF9TQ0FOID09IHdpZmlfc3RhdHVzKQorCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJZWxzZQorCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFjdGlvbl93aWZpX2Nvbm5lY3RlZF9idF9hY2xfYnVzeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggd2lmaV9zdGF0dXMpCit7CisJdTggYnRfcnNzaV9zdGF0ZTsKKworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg4MjFhMWFudF9idF9yc3NpX3N0YXRlKDIsIDI4LCAwKTsKKworCWlmIChidF9saW5rX2luZm8tPmhpZF9vbmx5KSAgeworCQkvKiBISUQgKi8KKwkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9idF9zY29faGlkX29ubHlfYnVzeShidGNvZXhpc3QsIHdpZmlfc3RhdHVzKTsKKwkJY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCA9IGZhbHNlOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPmEyZHBfb25seSkgeyAvKiBBMkRQICovCisJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkJKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJIGhhbGJ0Yzg4MjFhMWFudF90ZG1hX2R1cmF0aW9uX2FkanVzdF9mb3JfYWNsKGJ0Y29leGlzdCwgd2lmaV9zdGF0dXMpOworCQl9IGVsc2UgeyAvKiBmb3IgbG93IEJUIFJTU0kgKi8KKwkJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSBmYWxzZTsKKwkJfQorCisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9IGVsc2UgaWYgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgeworCQkvKiBISUQrQTJEUCAqLworCQlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE0KTsKKwkJCWNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QgPSBmYWxzZTsKKwkJfSBlbHNlIC8qIGZvciBsb3cgQlQgUlNTSSAqLyB7CisJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMSk7CisJCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJCX0KKworCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJfSBlbHNlIGlmICgoYnRfbGlua19pbmZvLT5wYW5fb25seSkgfHwgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSkgeworCQkvKiBQQU4oT1BQLCBGVFApLCBISUQrUEFOKE9QUCwgRlRQKSAqLworCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJfSBlbHNlIGlmICgoKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCkgJiYgKGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSkgfHwKKwkJICAgKGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJgorCQkgICAgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpKSB7CisJCS8qIEEyRFArUEFOKE9QUCwgRlRQKSwgSElEK0EyRFArUEFOKE9QUCwgRlRQKSAqLworCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMyk7CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwkJY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQljb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0ID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX25vdF9jb25uZWN0ZWQoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QKKwkpCit7CisJLyogIHBvd2VyIHNhdmUgc3RhdGUgKi8KKwloYWxidGM4ODIxYTFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwgMHgwLCAweDApOworCisJLyogIHRkbWEgYW5kIGNvZXggdGFibGUJICovCisJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDgpOworCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKK30KKworc3RhdGljIHZvaWQgd2lmaV9ub3RfY29ubmVjdGVkX2Fzc29fYXV0aF9zY2FuKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWhhbGJ0Yzg4MjFhMWFudF9wb3dlcl9zYXZlX3N0YXRlKGJ0Y29leGlzdCwgQlRDX1BTX1dJRklfTkFUSVZFLCAweDAsIDB4MCk7CisKKwloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyMik7CisJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworfQorCitzdGF0aWMgdm9pZAoraGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZF9zY2FuKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0CisJKQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisKKwkvKiAgcG93ZXIgc2F2ZSBzdGF0ZSAqLworCWhhbGJ0Yzg4MjFhMWFudF9wb3dlcl9zYXZlX3N0YXRlKGJ0Y29leGlzdCwgQlRDX1BTX1dJRklfTkFUSVZFLCAweDAsIDB4MCk7CisKKwkvKiAgdGRtYSBhbmQgY29leCB0YWJsZSAqLworCWlmIChCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHsKKwkJaWYgKGJ0X2xpbmtfaW5mby0+YTJkcF9leGlzdCAmJiBidF9saW5rX2luZm8tPnBhbl9leGlzdCkgeworCQkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMjIpOworCQkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDEpOworCQl9IGVsc2UgeworCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyMCk7CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9CisJfSBlbHNlIGlmICgoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfU0NPX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSB8fAorCQkJKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koYnRjb2V4aXN0LAorCQkJQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfU0NBTik7CisJfSBlbHNlIHsKKwkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMjApOworCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY3Rpb25fd2lmaV9jb25uZWN0ZWRfc3BlY2lhbF9wYWNrZXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJYm9vbCBoc19jb25uZWN0aW5nID0gZmFsc2U7CisJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfQ09OTkVDVElORywgJmhzX2Nvbm5lY3RpbmcpOworCisJaGFsYnRjODgyMWExYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsIDB4MCwgMHgwKTsKKworCS8qICB0ZG1hIGFuZCBjb2V4IHRhYmxlICovCisJaWYgKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgeworCQlpZiAoYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0ICYmIGJ0X2xpbmtfaW5mby0+cGFuX2V4aXN0KSB7CisJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyMik7CisJCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyMCk7CisJCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMSk7CisJCX0KKwl9IGVsc2UgeworCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyMCk7CisJCWhhbGJ0Yzg4MjFhMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fd2lmaV9jb25uZWN0ZWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJYm9vbCB3aWZpX2J1c3kgPSBmYWxzZTsKKwlib29sIHNjYW4gPSBmYWxzZSwgbGluayA9IGZhbHNlLCByb2FtID0gZmFsc2U7CisJYm9vbCB1bmRlcl80d2F5ID0gZmFsc2U7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQ29leEZvcldpZmlDb25uZWN0KCkgPT09PlxuIik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfNF9XQVlfUFJPR1JFU1MsICZ1bmRlcl80d2F5KTsKKwlpZiAodW5kZXJfNHdheSkgeworCQlhY3Rpb25fd2lmaV9jb25uZWN0ZWRfc3BlY2lhbF9wYWNrZXQoYnRjb2V4aXN0KTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIENvZXhGb3JXaWZpQ29ubmVjdCgpLCByZXR1cm4gZm9yIHdpZmkgaXMgdW5kZXIgNHdheTw9PT1cbiIpOworCQlyZXR1cm47CisJfQorCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1NDQU4sICZzY2FuKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfTElOSywgJmxpbmspOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9ST0FNLCAmcm9hbSk7CisJaWYgKHNjYW4gfHwgbGluayB8fCByb2FtKSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fd2lmaV9jb25uZWN0ZWRfc2NhbihidGNvZXhpc3QpOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsICJbQlRDb2V4XSwgQ29leEZvcldpZmlDb25uZWN0KCksIHJldHVybiBmb3Igd2lmaSBpcyB1bmRlciBzY2FuPD09PVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiAgcG93ZXIgc2F2ZSBzdGF0ZSAqLworCWlmIChCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMgJiYgIWJ0Y29leGlzdC0+YnRfbGlua19pbmZvLmhpZF9vbmx5KQorCQloYWxidGM4ODIxYTFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19MUFNfT04sIDB4NTAsIDB4NCk7CisJZWxzZQorCQloYWxidGM4ODIxYTFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwgMHgwLCAweDApOworCisJLyogIHRkbWEgYW5kIGNvZXggdGFibGUgKi8KKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisJaWYgKCF3aWZpX2J1c3kpIHsKKwkJaWYgKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgeworCQkJYWN0aW9uX3dpZmlfY29ubmVjdGVkX2J0X2FjbF9idXN5KGJ0Y29leGlzdCwKKwkJCQlCVF84ODIxQV8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9JRExFKTsKKwkJfSBlbHNlIGlmICgoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfU0NPX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSB8fAorCQkJKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX2J0X3Njb19oaWRfb25seV9idXN5KGJ0Y29leGlzdCwKKwkJCQlCVF84ODIxQV8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9JRExFKTsKKwkJfSBlbHNlIHsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDUpOworCQkJaGFsYnRjODgyMWExYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgeworCQkJYWN0aW9uX3dpZmlfY29ubmVjdGVkX2J0X2FjbF9idXN5KGJ0Y29leGlzdCwKKwkJCQlCVF84ODIxQV8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9CVVNZKTsKKwkJfSBlbHNlIGlmICgoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfU0NPX0JVU1kgPT0KKwkJCSAgICBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJCQkgICAoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfQUNMX1NDT19CVVNZID09CisJCQkgICAgY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9idF9zY29faGlkX29ubHlfYnVzeShidGNvZXhpc3QsCisJCQkJQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfQlVTWSk7CisJCX0gZWxzZSB7CisJCQloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJdHJ1ZSwgNSk7CisJCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LAorCQkJCQkJCSAgICAgTk9STUFMX0VYRUMsIDIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fc3dfY29leGlzdF9tZWNoYW5pc20oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggYWxnb3JpdGhtID0gMDsKKworCWFsZ29yaXRobSA9IGhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fYWxnb3JpdGhtKGJ0Y29leGlzdCk7CisJY29leF9kbS0+Y3VyX2FsZ29yaXRobSA9IGFsZ29yaXRobTsKKworCWlmICghaGFsYnRjODgyMWExYW50X2lzX2NvbW1vbl9hY3Rpb24oYnRjb2V4aXN0KSkgeworCQlzd2l0Y2ggKGNvZXhfZG0tPmN1cl9hbGdvcml0aG0pIHsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19TQ086CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiBhbGdvcml0aG0gPSBTQ08uXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fc2NvKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19ISUQ6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiBhbGdvcml0aG0gPSBISUQuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25faGlkKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gQTJEUC5cbiIpOworCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9hMmRwKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19BMkRQX1BBTkhTOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gQTJEUCtQQU4oSFMpLlxuIik7CisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX2EyZHBfcGFuX2hzKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5FRFI6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiBhbGdvcml0aG0gPSBQQU4oRURSKS5cbiIpOworCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9wYW5fZWRyKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5IUzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IEhTIG1vZGUuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fcGFuX2hzKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5FRFJfQTJEUDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IFBBTitBMkRQLlxuIik7CisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fUEFORURSX0hJRDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIGFsZ29yaXRobSA9IFBBTihFRFIpK0hJRC5cbiIpOworCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9wYW5fZWRyX2hpZChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODgyMUFfMUFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gSElEK0EyRFArUEFOLlxuIik7CisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRF9BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gSElEK0EyRFAuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25faGlkX2EyZHAoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gYWxnb3JpdGhtID0gY29leGlzdCBBbGwgT2ZmISFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJY29leF9kbS0+cHJlX2FsZ29yaXRobSA9IGNvZXhfZG0tPmN1cl9hbGdvcml0aG07CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTFhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCBidF9oc19vbiA9IGZhbHNlOworCWJvb2wgaW5jcmVhc2Vfc2Nhbl9kZXZfbnVtID0gZmFsc2U7CisJYm9vbCBidF9jdHJsX2FnZ19idWZfc2l6ZSA9IGZhbHNlOworCXU4IGFnZ19idWZfc2l6ZSA9IDU7CisJdTggd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKKwlib29sIHdpZmlfdW5kZXJfNWcgPSBmYWxzZTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJICAiW0JUQ29leF0sIFJ1bkNvZXhpc3RNZWNoYW5pc20oKSA9PT0+XG4iKTsKKworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBSdW5Db2V4aXN0TWVjaGFuaXNtKCksIHJldHVybiBmb3IgTWFudWFsIENUUkwgPD09PVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0pIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIFJ1bkNvZXhpc3RNZWNoYW5pc20oKSwgcmV0dXJuIGZvciBTdG9wIENvZXggRE0gPD09PVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29leF9zdGEtPnVuZGVyX2lwcykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgd2lmaSBpcyB1bmRlciBJUFMgISEhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9VTkRFUl81RywKKwkJCSAgICZ3aWZpX3VuZGVyXzVnKTsKKwlpZiAod2lmaV91bmRlcl81ZykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgUnVuQ29leGlzdE1lY2hhbmlzbSgpLCByZXR1cm4gZm9yIDVHIDw9PT1cbiIpOworCQloYWxidGM4ODIxYTFhbnRfY29leF91bmRlcl81ZyhidGNvZXhpc3QpOworCQlyZXR1cm47CisJfQorCisJaWYgKChCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpIHx8CisJICAgIChCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19BQ0xfU0NPX0JVU1kgPT0gY29leF9kbS0+YnRfc3RhdHVzKSkgeworCQlpbmNyZWFzZV9zY2FuX2Rldl9udW0gPSB0cnVlOworCX0KKworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfSU5DX1NDQU5fREVWX05VTSwKKwkJCSAgICZpbmNyZWFzZV9zY2FuX2Rldl9udW0pOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisKKwlpZiAoIWJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0ICYmICFidF9saW5rX2luZm8tPmhpZF9leGlzdCkgeworCQloYWxidGM4ODIxYTFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwLCAwLCAwLCAwKTsKKwl9IGVsc2UgeworCQlpZiAod2lmaV9jb25uZWN0ZWQpIHsKKwkJCXdpZmlfcnNzaV9zdGF0ZSA9IFdpZmlfcnNzaV9zdGF0ZShidGNvZXhpc3QsIDEsIDIsCisJCQkJCQkJICAzMCwgMCk7CisJCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJCQloYWxidGM4ODIxYTFhbnRfbGltaXRlZF90eChidGNvZXhpc3QsCisJCQkJCQkJICAgTk9STUFMX0VYRUMsIDEsIDEsCisJCQkJCQkJICAgMSwgMSk7CisJCQllbHNlCisJCQkJaGFsYnRjODgyMWExYW50X2xpbWl0ZWRfdHgoYnRjb2V4aXN0LAorCQkJCQkJCSAgIE5PUk1BTF9FWEVDLCAxLCAxLAorCQkJCQkJCSAgIDEsIDEpOworCQl9IGVsc2UgeworCQkJaGFsYnRjODgyMWExYW50X2xpbWl0ZWRfdHgoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCSAgIDAsIDAsIDAsIDApOworCQl9CisJfQorCisJaWYgKGJ0X2xpbmtfaW5mby0+c2NvX2V4aXN0KSB7CisJCWJ0X2N0cmxfYWdnX2J1Zl9zaXplID0gdHJ1ZTsKKwkJYWdnX2J1Zl9zaXplID0gMHgzOworCX0gZWxzZSBpZiAoYnRfbGlua19pbmZvLT5oaWRfZXhpc3QpIHsKKwkJYnRfY3RybF9hZ2dfYnVmX3NpemUgPSB0cnVlOworCQlhZ2dfYnVmX3NpemUgPSAweDU7CisJfSBlbHNlIGlmIChidF9saW5rX2luZm8tPmEyZHBfZXhpc3QgfHwgYnRfbGlua19pbmZvLT5wYW5fZXhpc3QpIHsKKwkJYnRfY3RybF9hZ2dfYnVmX3NpemUgPSB0cnVlOworCQlhZ2dfYnVmX3NpemUgPSAweDg7CisJfQorCWhhbGJ0Yzg4MjFhMWFudF9saW1pdGVkX3J4KGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLAorCQkJCSAgIGJ0X2N0cmxfYWdnX2J1Zl9zaXplLCBhZ2dfYnVmX3NpemUpOworCisJcnVuX3N3X2NvZXhpc3RfbWVjaGFuaXNtKGJ0Y29leGlzdCk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UpIHsKKwkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9idF9pbnF1aXJ5KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGJ0X2hzX29uKSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25faHMoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmICghd2lmaV9jb25uZWN0ZWQpIHsKKwkJYm9vbCBzY2FuID0gZmFsc2UsIGxpbmsgPSBmYWxzZSwgcm9hbSA9IGZhbHNlOworCisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwgIltCVENvZXhdLCB3aWZpIGlzIG5vbiBjb25uZWN0ZWQtaWRsZSAhISFcbiIpOworCisJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9TQ0FOLCAmc2Nhbik7CisJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9MSU5LLCAmbGluayk7CisJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9ST0FNLCAmcm9hbSk7CisKKwkJaWYgKHNjYW4gfHwgbGluayB8fCByb2FtKQorCQkJd2lmaV9ub3RfY29ubmVjdGVkX2Fzc29fYXV0aF9zY2FuKGJ0Y29leGlzdCk7CisJCWVsc2UKKwkJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fd2lmaV9ub3RfY29ubmVjdGVkKGJ0Y29leGlzdCk7CisJfSBlbHNlIHsKKwkJLyogIHdpZmkgTFBTL0J1c3kgKi8KKwkJaGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZChidGNvZXhpc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2luaXRfY29leF9kbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwkvKiAgZm9yY2UgdG8gcmVzZXQgY29leCBtZWNoYW5pc20gKi8KKwkvKiAgc3cgYWxsIG9mZiAqLworCWhhbGJ0Yzg4MjFhMWFudF9zd19tZWNoYW5pc20oYnRjb2V4aXN0LCBmYWxzZSk7CisKKwloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIGZhbHNlLCA4KTsKKwloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAwKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWExYW50X2luaXRfaHdfY29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICBib29sIGJhY2tfdXApCit7CisJdTggdTFfdG1wID0gMDsKKwlib29sIHdpZmlfdW5kZXJfNWcgPSBmYWxzZTsKKworCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkgICJbQlRDb2V4XSwgMUFudCBJbml0IEhXIENvbmZpZyEhXG4iKTsKKworCWlmIChiYWNrX3VwKSB7CisJCWNvZXhfZG0tPmJhY2t1cF9hcmZyX2NudDEgPQorCQkJYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NDMwKTsKKwkJY29leF9kbS0+YmFja3VwX2FyZnJfY250MiA9CisJCQlidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg0MzQpOworCQljb2V4X2RtLT5iYWNrdXBfcmV0cnlfbGltaXQgPQorCQkJYnRjb2V4aXN0LT5idGNfcmVhZF8yYnl0ZShidGNvZXhpc3QsIDB4NDJhKTsKKwkJY29leF9kbS0+YmFja3VwX2FtcGR1X21heF90aW1lID0KKwkJCWJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDQ1Nik7CisJfQorCisJLyogIDB4NzkwWzU6MF0gPSAweDUgKi8KKwl1MV90bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg3OTApOworCXUxX3RtcCAmPSAweGMwOworCXUxX3RtcCB8PSAweDU7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc5MCwgdTFfdG1wKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9VTkRFUl81RywgJndpZmlfdW5kZXJfNWcpOworCisJLyogQW50ZW5uYSBjb25maWcgKi8KKwlpZiAod2lmaV91bmRlcl81ZykKKwkJaGFsYnRjODgyMWExYW50X3NldF9hbnRfcGF0aChidGNvZXhpc3QsIEJUQ19BTlRfUEFUSF9CVCwKKwkJCQkJICAgICB0cnVlLCBmYWxzZSk7CisJZWxzZQorCQloYWxidGM4ODIxYTFhbnRfc2V0X2FudF9wYXRoKGJ0Y29leGlzdCwgQlRDX0FOVF9QQVRIX1BUQSwKKwkJCQkJICAgICB0cnVlLCBmYWxzZSk7CisJLyogIFBUQSBwYXJhbWV0ZXIgKi8KKwloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAwKTsKKworCS8qICBFbmFibGUgY291bnRlciBzdGF0aXN0aWNzICovCisJLyogMHg3NmVbM10gPSAxLCBXTEFOX0FjdCBjb250cm9sIGJ5IFBUQSAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc3OCwgMHgzKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg0MCwgMHgyMCwgMHgxKTsKK30KKworLyogICovCisvKiAgd29yayBhcm91bmQgZnVuY3Rpb24gc3RhcnQgd2l0aCB3YV9oYWxidGM4ODIxYTFhbnRfICovCisvKiAgKi8KKy8qICAqLworLyogIGV4dGVybiBmdW5jdGlvbiBzdGFydCB3aXRoIEVYaGFsYnRjODgyMWExYW50XyAqLworLyogICovCit2b2lkCitleF9oYWxidGM4ODIxYTFhbnRfaW5pdF9od2NvbmZpZygKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdAorCSkKK3sKKwloYWxidGM4ODIxYTFhbnRfaW5pdF9od19jb25maWcoYnRjb2V4aXN0LCB0cnVlKTsKK30KKwordm9pZAorZXhfaGFsYnRjODgyMWExYW50X2luaXRfY29leF9kbSgKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdAorCSkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwgIltCVENvZXhdLCBDb2V4IE1lY2hhbmlzbSBJbml0ISFcbiIpOworCisJYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gPSBmYWxzZTsKKworCWhhbGJ0Yzg4MjFhMWFudF9pbml0X2NvZXhfZG0oYnRjb2V4aXN0KTsKKworCWhhbGJ0Yzg4MjFhMWFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7Cit9CisKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X2Rpc3BsYXlfY29leF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICZidGNvZXhpc3QtPmJvYXJkX2luZm87CisJc3RydWN0IGJ0Y19zdGFja19pbmZvICpzdGFja19pbmZvID0gJmJ0Y29leGlzdC0+c3RhY2tfaW5mbzsKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOworCXU4ICpjbGlfYnVmID0gYnRjb2V4aXN0LT5jbGlfYnVmOworCXU4IHUxX3RtcFs0XSwgaSwgYnRfaW5mb19leHQsIHBzX3RkbWFfY2FzZSA9IDA7CisJdTE2IHUyX3RtcFs0XTsKKwl1MzIgdTRfdG1wWzRdOworCWJvb2wgcm9hbSA9IGZhbHNlLCBzY2FuID0gZmFsc2UsIGxpbmsgPSBmYWxzZSwgd2lmaV91bmRlcl81ZyA9IGZhbHNlOworCWJvb2wgYnRfaHNfb24gPSBmYWxzZSwgd2lmaV9idXN5ID0gZmFsc2U7CisJbG9uZyB3aWZpX3Jzc2kgPSAwLCBidF9oc19yc3NpID0gMDsKKwl1MzIgd2lmaV9idywgd2lmaV90cmFmZmljX2RpcjsKKwl1OCB3aWZpX2RvdDExX2NobmwsIHdpZmlfaHNfY2hubDsKKwl1MzIgZndfdmVyID0gMCwgYnRfcGF0Y2hfdmVyID0gMDsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXG4gPT09PT09PT09PT09W0JUIENvZXhpc3QgaW5mb10gPT09PT09PT09PT09Iik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpIHsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gPT09PT09PT09PT09W1VuZGVyIE1hbnVhbCBDb250cm9sXSA9PT09PT09PT09PT0iKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCSAgICJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCX0KKwlpZiAoYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0pIHsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gPT09PT09PT09PT09W0NvZXggaXMgU1RPUFBFRF0gPT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwl9CisKKwlpZiAoIWJvYXJkX2luZm8tPmJ0X2V4aXN0KSB7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gQlQgbm90IGV4aXN0cyAhISEiKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCQlyZXR1cm47CisJfQorCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9ICVkLyAlZC8gJWQiLAorCQkgICAiQW50IFBHIE51bS8gQW50IE1lY2gvIEFudCBQb3M6ICIsCisJCSAgIGJvYXJkX2luZm8tPnBnX2FudF9udW0sIGJvYXJkX2luZm8tPmJ0ZG1fYW50X251bSwKKwkJICAgYm9hcmRfaW5mby0+YnRkbV9hbnRfcG9zKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJXMgLyAlZCIsCisJCSAgICJCVCBzdGFjay8gaGNpIGV4dCB2ZXIiLAorCQkgICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJICAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfQlRfUEFUQ0hfVkVSLCAmYnRfcGF0Y2hfdmVyKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWRfJXgvIDB4JXgvIDB4JXgoJWQpIiwKKwkJICAgIkNvZXhWZXIvIEZ3VmVyLyBQYXRjaFZlciIsCisJCSAgIGdsY29leF92ZXJfZGF0ZV84ODIxYV8xYW50LCBnbGNvZXhfdmVyXzg4MjFhXzFhbnQsIGZ3X3ZlciwKKwkJICAgYnRfcGF0Y2hfdmVyLCBidF9wYXRjaF92ZXIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9ET1QxMV9DSE5MLAorCQkJICAgJndpZmlfZG90MTFfY2hubCk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VMV9XSUZJX0hTX0NITkwsICZ3aWZpX2hzX2NobmwpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZCAvICVkKCVkKSIsCisJCSAgICJEb3QxMSBjaGFubmVsIC8gSHNDaG5sKEhzTW9kZSkiLAorCQkgICB3aWZpX2RvdDExX2NobmwsIHdpZmlfaHNfY2hubCwgYnRfaHNfb24pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlMDJ4ICUwMnggJTAyeCAiLAorCQkgICAiSDJDIFdpZmkgaW5mb3JtIGJ0IGNobmwgSW5mbyIsCisJCSAgIGNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzBdLCBjb2V4X2RtLT53aWZpX2NobmxfaW5mb1sxXSwKKwkJICAgY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMl0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaV9yc3NpKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1M0X0hTX1JTU0ksICZidF9oc19yc3NpKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWQvICVkIiwKKwkJICAgIldpZmkgcnNzaS8gSFMgcnNzaSIsCisJCSAgIChpbnQpd2lmaV9yc3NpLCAoaW50KWJ0X2hzX3Jzc2kpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9TQ0FOLCAmc2Nhbik7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfUk9BTSwgJnJvYW0pOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZC8gJWQvICVkICIsCisJCSAgICJXaWZpIGxpbmsvIHJvYW0vIHNjYW4iLAorCQkgICBsaW5rLCByb2FtLCBzY2FuKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfVU5ERVJfNUcsICZ3aWZpX3VuZGVyXzVnKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX1RSQUZGSUNfRElSRUNUSU9OLAorCQkJICAgJndpZmlfdHJhZmZpY19kaXIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlcyAvICVzLyAlcyAiLAorCQkgICAiV2lmaSBzdGF0dXMiLAorCQkgICAod2lmaV91bmRlcl81ZyA/ICI1RyIgOiAiMi40RyIpLAorCQkgICAoKEJUQ19XSUZJX0JXX0xFR0FDWSA9PSB3aWZpX2J3KSA/ICJMZWdhY3kiIDoKKwkJICAgICgoKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgPyAiSFQ0MCIgOiAiSFQyMCIpKSksCisJCSAgICgoIXdpZmlfYnVzeSkgPyAiaWRsZSIgOgorCQkgICAgKChCVENfV0lGSV9UUkFGRklDX1RYID09IHdpZmlfdHJhZmZpY19kaXIpID8KKwkJICAgICAidXBsaW5rIiA6ICJkb3dubGluayIpKSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXG4gJS0zNXMgPSBbJXMvICVkLyAlZF0gIiwgIkJUIFtzdGF0dXMvIHJzc2kvIHJldHJ5Q250XSIsCisJCSAgICgoYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKSA/ICgiZGlzYWJsZWQiKSA6CisJCSAgICAoKGNvZXhfc3RhLT5jMmhfYnRfaW5xdWlyeV9wYWdlKSA/ICgiaW5xdWlyeS9wYWdlIHNjYW4iKSA6CisJCSAgICAgKChCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19OT05fQ09OTkVDVEVEX0lETEUgPT0KKwkJICAgICAgIGNvZXhfZG0tPmJ0X3N0YXR1cykgPyAibm9uLWNvbm5lY3RlZCBpZGxlIiA6CisJCSAgICAgICgoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEUgPT0KKwkJICAgICAgIGNvZXhfZG0tPmJ0X3N0YXR1cykgPyAiY29ubmVjdGVkLWlkbGUiIDogImJ1c3kiKSkpKSwKKwkJICAgY29leF9zdGEtPmJ0X3Jzc2ksIGNvZXhfc3RhLT5idF9yZXRyeV9jbnQpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZCAvICVkIC8gJWQgLyAlZCIsCisJCSAgICJTQ08vSElEL1BBTi9BMkRQIiwKKwkJICAgYnRfbGlua19pbmZvLT5zY29fZXhpc3QsIGJ0X2xpbmtfaW5mby0+aGlkX2V4aXN0LAorCQkgICBidF9saW5rX2luZm8tPnBhbl9leGlzdCwgYnRfbGlua19pbmZvLT5hMmRwX2V4aXN0KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwgQlRDX0RCR19ESVNQX0JUX0xJTktfSU5GTyk7CisKKwlidF9pbmZvX2V4dCA9IGNvZXhfc3RhLT5idF9pbmZvX2V4dDsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJXMiLAorCQkgICAiQlQgSW5mbyBBMkRQIHJhdGUiLAorCQkgICAoYnRfaW5mb19leHQgJiBCSVQoMCkpID8gIkJhc2ljIHJhdGUiIDogIkVEUiByYXRlIik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJZm9yIChpID0gMDsgaSA8IEJUX0lORk9fU1JDXzg4MjFBXzFBTlRfTUFYOyBpKyspIHsKKwkJaWYgKGNvZXhfc3RhLT5idF9pbmZvX2MyaF9jbnRbaV0pIHsKKwkJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJCSAgICJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngoJWQpIiwKKwkJCQkgICBnbGJ0X2luZm9fc3JjXzg4MjFhXzFhbnRbaV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzBdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVsxXSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bMl0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzNdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVs0XSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bNV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzZdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaF9jbnRbaV0pOworCQkJQ0xfUFJJTlRGKGNsaV9idWYpOworCQl9CisJfQorCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlcy8lcywgKDB4JXgvMHgleCkiLAorCQkgICAiUFMgc3RhdGUsIElQUy9MUFMsIChscHMvcnB3bSkiLAorCQkgICAoKGNvZXhfc3RhLT51bmRlcl9pcHMgPyAiSVBTIE9OIiA6ICJJUFMgT0ZGIikpLAorCQkgICAoKGNvZXhfc3RhLT51bmRlcl9scHMgPyAiTFBTIE9OIiA6ICJMUFMgT0ZGIikpLAorCQkgICBidGNvZXhpc3QtPmJ0X2luZm8ubHBzX3ZhbCwKKwkJICAgYnRjb2V4aXN0LT5idF9pbmZvLnJwd21fdmFsKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwgQlRDX0RCR19ESVNQX0ZXX1BXUl9NT0RFX0NNRCk7CisKKwlpZiAoIWJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpIHsKKwkJLyogIFN3IG1lY2hhbmlzbQkgKi8KKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gJS0zNXMiLCAiPT09PT09PT09PT09W1N3IG1lY2hhbmlzbV0gPT09PT09PT09PT09Iik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCSAgICJcbiAlLTM1cyA9ICVkIiwgIlNNW0xvd1BlbmFsdHlSQV0iLAorCQkJICAgY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJICAgIlxuICUtMzVzID0gJXMvICVzLyAlZCAiLCAiRGVsQkEvIEJ0Q3RybEFnZy8gQWdnU2l6ZSIsCisJCQkgICAoYnRjb2V4aXN0LT5idF9pbmZvLnJlamVjdF9hZ2dfcGt0ID8gIlllcyIgOiAiTm8iKSwKKwkJCSAgIChidGNvZXhpc3QtPmJ0X2luZm8uYl9idF9jdHJsX2J1Zl9zaXplID8KKwkJCSAgICAiWWVzIiA6ICJObyIpLAorCQkJICAgYnRjb2V4aXN0LT5idF9pbmZvLmFnZ19idWZfc2l6ZSk7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gJS0zNXMgPSAweCV4ICIsICJSYXRlIE1hc2siLAorCQkJICAgYnRjb2V4aXN0LT5idF9pbmZvLnJhX21hc2spOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkJLyogIEZ3IG1lY2hhbmlzbSAqLworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzIiwKKwkJCSAgICI9PT09PT09PT09PT1bRncgbWVjaGFuaXNtXSA9PT09PT09PT09PT0iKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJCXBzX3RkbWFfY2FzZSA9IGNvZXhfZG0tPmN1cl9wc190ZG1hOworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJCSAgICJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCBjYXNlLSVkIChhdXRvOiVkKSIsCisJCQkgICAiUFMgVERNQSIsCisJCQkgICBjb2V4X2RtLT5wc190ZG1hX3BhcmFbMF0sIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsxXSwKKwkJCSAgIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsyXSwgY29leF9kbS0+cHNfdGRtYV9wYXJhWzNdLAorCQkJICAgY29leF9kbS0+cHNfdGRtYV9wYXJhWzRdLCBwc190ZG1hX2Nhc2UsCisJCQkgICBjb2V4X2RtLT5hdXRvX3RkbWFfYWRqdXN0KTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4ICIsCisJCQkgICAiTGF0ZXN0IGVycm9yIGNvbmRpdGlvbihzaG91bGQgYmUgMCkiLAorCQkJICAgY29leF9kbS0+ZXJyb3JfY29uZGl0aW9uKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZCAiLAorCQkJICAgIklnbldsYW5BY3QiLAorCQkJICAgY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCk7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwl9CisKKwkvKiAgSHcgc2V0dGluZwkJICovCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyIsCisJCSAgICI9PT09PT09PT09PT1bSHcgc2V0dGluZ10gPT09PT09PT09PT09Iik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvMHgleC8weCV4LzB4JXgiLAorCQkgICAiYmFja3VwIEFSRlIxL0FSRlIyL1JML0FNYXhUaW1lIiwKKwkJICAgY29leF9kbS0+YmFja3VwX2FyZnJfY250MSwgY29leF9kbS0+YmFja3VwX2FyZnJfY250MiwKKwkJICAgY29leF9kbS0+YmFja3VwX3JldHJ5X2xpbWl0LCBjb2V4X2RtLT5iYWNrdXBfYW1wZHVfbWF4X3RpbWUpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXU0X3RtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDQzMCk7CisJdTRfdG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NDM0KTsKKwl1Ml90bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEpOworCXUxX3RtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDQ1Nik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvMHgleC8weCV4LzB4JXgiLAorCQkgICAiMHg0MzAvMHg0MzQvMHg0MmEvMHg0NTYiLAorCQkgICB1NF90bXBbMF0sIHU0X3RtcFsxXSwgdTJfdG1wWzBdLCB1MV90bXBbMF0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUxX3RtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDc3OCk7CisJdTRfdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4YzU4KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxuICUtMzVzID0gMHgleC8gMHgleCIsICIweDc3OC8gMHhjNThbMjk6MjVdIiwKKwkJICAgdTFfdG1wWzBdLCAodTRfdG1wWzBdJjB4M2UwMDAwMDApID4+IDI1KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MV90bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg4ZGIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4IiwgIjB4OGRiWzY6NV0iLAorCQkgICAoKHUxX3RtcFswXSYweDYwKT4+NSkpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUxX3RtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDk3NSk7CisJdTRfdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4Y2I0KTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICIweGNiNFsyOToyOF0vMHhjYjRbNzowXS8weDk3NFs5OjhdIiwKKwkJICAgKHU0X3RtcFswXSYweDMwMDAwMDAwKT4+MjgsIHU0X3RtcFswXSYweGZmLCB1MV90bXBbMF0gJiAweDMpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUxX3RtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDQwKTsKKwl1NF90bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg0Yyk7CisJdTFfdG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NjQpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4IiwKKwkJICAgIjB4NDAvMHg0Y1syNDoyM10vMHg2NFswXSIsCisJCSAgIHUxX3RtcFswXSwgKCh1NF90bXBbMF0mMHgwMTgwMDAwMCk+PjIzKSwgdTFfdG1wWzFdJjB4MSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTRfdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NTUwKTsKKwl1MV90bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg1MjIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4LyAweCV4IiwKKwkJICAgIjB4NTUwKGJjbiBjdHJsKS8weDUyMiIsCisJCSAgIHU0X3RtcFswXSwgdTFfdG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1NF90bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhjNTApOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4IiwgIjB4YzUwKGRpZykiLAorCQkgICB1NF90bXBbMF0mMHhmZik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTRfdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4ZjQ4KTsKKwl1MV90bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHhhNWQpOworCXUxX3RtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweGE1Yyk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLAorCQkgICAiT0ZETS1GQS8gQ0NLLUZBIiwKKwkJICAgdTRfdG1wWzBdLCAodTFfdG1wWzBdPDw4KSArIHUxX3RtcFsxXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTRfdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NmMwKTsKKwl1NF90bXBbMV0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg2YzQpOworCXU0X3RtcFsyXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDZjOCk7CisJdTFfdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NmNjKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKKwkJICAgIlxuICUtMzVzID0gMHgleC8gMHgleC8gMHgleC8gMHgleCIsCisJCSAgICIweDZjMC8weDZjNC8weDZjOC8weDZjYyhjb2V4VGFibGUpIiwKKwkJICAgdTRfdG1wWzBdLCB1NF90bXBbMV0sIHU0X3RtcFsyXSwgdTFfdG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWQvICVkIiwKKwkJICAgIjB4NzcwKGhpZ2gtcHJpIHJ4L3R4KSIsCisJCSAgIGNvZXhfc3RhLT5oaWdoX3ByaW9yaXR5X3J4LCBjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV90eCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZC8gJWQiLAorCQkgICAiMHg3NzQobG93LXByaSByeC90eCkiLAorCQkgICBjb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4LCBjb2V4X3N0YS0+bG93X3ByaW9yaXR5X3R4KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisjaWYgKEJUX0FVVE9fUkVQT1JUX09OTFlfODgyMUFfMUFOVCA9PSAxKQorCWhhbGJ0Yzg4MjFhMWFudF9tb25pdG9yX2J0X2N0cihidGNvZXhpc3QpOworI2VuZGlmCisJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwgQlRDX0RCR19ESVNQX0NPRVhfU1RBVElTVElDUyk7Cit9CisKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X2lwc19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0pCisJCXJldHVybjsKKworCWlmIChCVENfSVBTX0VOVEVSID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBJUFMgRU5URVIgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2lwcyA9IHRydWU7CisJCWhhbGJ0Yzg4MjFhMWFudF9zZXRfYW50X3BhdGgoYnRjb2V4aXN0LCBCVENfQU5UX1BBVEhfQlQsCisJCQkJCSAgICAgZmFsc2UsIHRydWUpOworCQkvKiBzZXQgUFRBIGNvbnRyb2wgKi8KKwkJaGFsYnRjODgyMWExYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDgpOworCQloYWxidGM4ODIxYTFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CisJfSBlbHNlIGlmIChCVENfSVBTX0xFQVZFID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBJUFMgTEVBVkUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2lwcyA9IGZhbHNlOworCisJCWhhbGJ0Yzg4MjFhMWFudF9ydW5fY29leGlzdF9tZWNoYW5pc20oYnRjb2V4aXN0KTsKKwl9Cit9CisKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X2xwc19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0pCisJCXJldHVybjsKKworCWlmIChCVENfTFBTX0VOQUJMRSA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgTFBTIEVOQUJMRSBub3RpZnlcbiIpOworCQljb2V4X3N0YS0+dW5kZXJfbHBzID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKEJUQ19MUFNfRElTQUJMRSA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgTFBTIERJU0FCTEUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2xwcyA9IGZhbHNlOworCX0KK30KKwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfc2Nhbl9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCBidF9oc19vbiA9IGZhbHNlOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwKKwkgICAgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gfHwKKwkgICAgYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJICAgJndpZmlfY29ubmVjdGVkKTsKKworCWhhbGJ0Yzg4MjFhMWFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7CisKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UpIHsKKwkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9idF9pbnF1aXJ5KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGJ0X2hzX29uKSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25faHMoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChCVENfU0NBTl9TVEFSVCA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgU0NBTiBTVEFSVCBub3RpZnlcbiIpOworCQlpZiAoIXdpZmlfY29ubmVjdGVkKSB7CisJCQkvKiAgbm9uLWNvbm5lY3RlZCBzY2FuICovCisJCQl3aWZpX25vdF9jb25uZWN0ZWRfYXNzb19hdXRoX3NjYW4oYnRjb2V4aXN0KTsKKwkJfSBlbHNlIHsKKwkJCS8qICB3aWZpIGlzIGNvbm5lY3RlZCAqLworCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZF9zY2FuKGJ0Y29leGlzdCk7CisJCX0KKwl9IGVsc2UgaWYgKEJUQ19TQ0FOX0ZJTklTSCA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgU0NBTiBGSU5JU0ggbm90aWZ5XG4iKTsKKwkJaWYgKCF3aWZpX2Nvbm5lY3RlZCkJLyogIG5vbi1jb25uZWN0ZWQgc2NhbiAqLworCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX25vdF9jb25uZWN0ZWQoYnRjb2V4aXN0KTsKKwkJZWxzZQorCQkJaGFsYnRjODgyMWExYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZChidGNvZXhpc3QpOworCX0KK30KKwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfY29ubmVjdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCBidF9oc19vbiA9IGZhbHNlOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwKKwkgICAgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gfHwKKwkgICAgYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UpIHsKKwkJaGFsYnRjODgyMWExYW50X2FjdGlvbl9idF9pbnF1aXJ5KGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGJ0X2hzX29uKSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25faHMoYnRjb2V4aXN0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChCVENfQVNTT0NJQVRFX1NUQVJUID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBDT05ORUNUIFNUQVJUIG5vdGlmeVxuIik7CisJCXdpZmlfbm90X2Nvbm5lY3RlZF9hc3NvX2F1dGhfc2NhbihidGNvZXhpc3QpOworCX0gZWxzZSBpZiAoQlRDX0FTU09DSUFURV9GSU5JU0ggPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIENPTk5FQ1QgRklOSVNIIG5vdGlmeVxuIik7CisKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCQlpZiAoIXdpZmlfY29ubmVjdGVkKSAvKiAgbm9uLWNvbm5lY3RlZCBzY2FuICovCisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX3dpZmlfbm90X2Nvbm5lY3RlZChidGNvZXhpc3QpOworCQllbHNlCisJCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX3dpZmlfY29ubmVjdGVkKGJ0Y29leGlzdCk7CisJfQorfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMWFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgdTggdHlwZSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzNdID0gezB9OworCXUzMiB3aWZpX2J3OworCXU4IHdpZmlfY2VudHJhbF9jaG5sOworCisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wgfHwKKwkgICAgYnRjb2V4aXN0LT5zdG9wX2NvZXhfZG0gfHwKKwkgICAgYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2Rpc2FibGVkKQorCQlyZXR1cm47CisKKwlpZiAoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBNRURJQSBjb25uZWN0IG5vdGlmeVxuIik7CisJZWxzZQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIE1FRElBIGRpc2Nvbm5lY3Qgbm90aWZ5XG4iKTsKKworCS8qICBvbmx5IDIuNEcgd2UgbmVlZCB0byBpbmZvcm0gYnQgdGhlIGNobmwgbWFzayAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9DRU5UUkFMX0NITkwsCisJCQkgICAmd2lmaV9jZW50cmFsX2NobmwpOworCWlmICgoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkgJiYKKwkgICAgKHdpZmlfY2VudHJhbF9jaG5sIDw9IDE0KSkgeworCQkvKiBoMmNfcGFyYW1ldGVyWzBdID0gMHgxOyAqLworCQloMmNfcGFyYW1ldGVyWzBdID0gMHgwOworCQloMmNfcGFyYW1ldGVyWzFdID0gd2lmaV9jZW50cmFsX2Nobmw7CisJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCQlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KQorCQkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MzA7CisJCWVsc2UKKwkJCWgyY19wYXJhbWV0ZXJbMl0gPSAweDIwOworCX0KKworCWNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzBdID0gaDJjX3BhcmFtZXRlclswXTsKKwljb2V4X2RtLT53aWZpX2NobmxfaW5mb1sxXSA9IGgyY19wYXJhbWV0ZXJbMV07CisJY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMl0gPSBoMmNfcGFyYW1ldGVyWzJdOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBGVyB3cml0ZSAweDY2ID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdPDwxNnxoMmNfcGFyYW1ldGVyWzFdPDw4fGgyY19wYXJhbWV0ZXJbMl0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY2LCAzLCBoMmNfcGFyYW1ldGVyKTsKK30KKwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICB1OCB0eXBlKQoreworCWJvb2wgYnRfaHNfb24gPSBmYWxzZTsKKworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sIHx8CisJICAgIGJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtIHx8CisJICAgIGJ0Y29leGlzdC0+YnRfaW5mby5idF9kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJY29leF9zdGEtPnNwZWNpYWxfcGt0X3BlcmlvZF9jbnQgPSAwOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9IU19PUEVSQVRJT04sICZidF9oc19vbik7CisJaWYgKGNvZXhfc3RhLT5jMmhfYnRfaW5xdWlyeV9wYWdlKSB7CisJCWhhbGJ0Yzg4MjFhMWFudF9hY3Rpb25fYnRfaW5xdWlyeShidGNvZXhpc3QpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChidF9oc19vbikgeworCQloYWxidGM4ODIxYTFhbnRfYWN0aW9uX2hzKGJ0Y29leGlzdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoQlRDX1BBQ0tFVF9ESENQID09IHR5cGUgfHwKKwkgICAgQlRDX1BBQ0tFVF9FQVBPTCA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgc3BlY2lhbCBQYWNrZXQoJWQpIG5vdGlmeVxuIiwgdHlwZSk7CisJCWFjdGlvbl93aWZpX2Nvbm5lY3RlZF9zcGVjaWFsX3BhY2tldChidGNvZXhpc3QpOworCX0KK30KKwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfYnRfaW5mb19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgIHU4ICp0bXBfYnVmLCB1OCBsZW5ndGgpCit7CisJdTggYnRfaW5mbyA9IDA7CisJdTggaSwgcnNwX3NvdXJjZSA9IDA7CisJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOworCWJvb2wgYnRfYnVzeSA9IGZhbHNlOworCWJvb2wgd2lmaV91bmRlcl81ZyA9IGZhbHNlOworCisJY29leF9zdGEtPmMyaF9idF9pbmZvX3JlcV9zZW50ID0gZmFsc2U7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfVU5ERVJfNUcsICZ3aWZpX3VuZGVyXzVnKTsKKworCXJzcF9zb3VyY2UgPSB0bXBfYnVmWzBdJjB4ZjsKKwlpZiAocnNwX3NvdXJjZSA+PSBCVF9JTkZPX1NSQ184ODIxQV8xQU5UX01BWCkKKwkJcnNwX3NvdXJjZSA9IEJUX0lORk9fU1JDXzg4MjFBXzFBTlRfV0lGSV9GVzsKKwljb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W3JzcF9zb3VyY2VdKys7CisKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkgICJbQlRDb2V4XSwgQnQgaW5mb1slZF0sIGxlbmd0aCA9JWQsIGhleCBkYXRhID1bIiwKKwkJICByc3Bfc291cmNlLCBsZW5ndGgpOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1baV0gPSB0bXBfYnVmW2ldOworCQlpZiAoaSA9PSAxKQorCQkJYnRfaW5mbyA9IHRtcF9idWZbaV07CisJCWlmIChpID09IGxlbmd0aC0xKQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCQkgICIweCUwMnhdXG4iLCB0bXBfYnVmW2ldKTsKKwkJZWxzZQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCQkgICIweCUwMngsICIsIHRtcF9idWZbaV0pOworCX0KKworCWlmIChCVF9JTkZPX1NSQ184ODIxQV8xQU5UX1dJRklfRlcgIT0gcnNwX3NvdXJjZSkgeworCQljb2V4X3N0YS0+YnRfcmV0cnlfY250ID0JLyogIFszOjBdICovCisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1bMl0mMHhmOworCisJCWNvZXhfc3RhLT5idF9yc3NpID0KKwkJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bfc291cmNlXVszXSoyKzEwOworCisJCWNvZXhfc3RhLT5idF9pbmZvX2V4dCA9CisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1bNF07CisKKwkJLyogIEhlcmUgd2UgbmVlZCB0byByZXNlbmQgc29tZSB3aWZpIGluZm8gdG8gQlQgKi8KKwkJLyogIGJlY2F1c2UgYnQgaXMgcmVzZXQgYW5kIGxvc3Mgb2YgdGhlIGluZm8uICovCisJCWlmIChjb2V4X3N0YS0+YnRfaW5mb19leHQgJiBCSVQoMSkpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQlQgZXh0IGluZm8gYml0MSBjaGVjaywgc2VuZCB3aWZpIEJXJkNobmwgdG8gQlQhIVxuIik7CisJCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCQkJaWYgKHdpZmlfY29ubmVjdGVkKQorCQkJCWV4X2hhbGJ0Yzg4MjFhMWFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgICAgIEJUQ19NRURJQV9DT05ORUNUKTsKKwkJCWVsc2UKKwkJCQlleF9oYWxidGM4ODIxYTFhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJCSAgICAgICBCVENfTUVESUFfRElTQ09OTkVDVCk7CisJCX0KKworCQlpZiAoKGNvZXhfc3RhLT5idF9pbmZvX2V4dCAmIEJJVCgzKSkgJiYgIXdpZmlfdW5kZXJfNWcpIHsKKwkJCWlmICghYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCAmJgorCQkJICAgICFidGNvZXhpc3QtPnN0b3BfY29leF9kbSkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIGV4dCBpbmZvIGJpdDMgY2hlY2ssIHNldCBCVCBOT1QgdG8gaWdub3JlIFdsYW4gYWN0aXZlISFcbiIpOworCQkJCWhhbGJ0Yzg4MjFhMWFudF9pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LAorCQkJCQkJCQlGT1JDRV9FWEVDLCBmYWxzZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiAgQlQgYWxyZWFkeSBOT1QgaWdub3JlIFdsYW4gYWN0aXZlLCBkbyBub3RoaW5nIGhlcmUuICovCisJCX0KKyNpZiAoQlRfQVVUT19SRVBPUlRfT05MWV84ODIxQV8xQU5UID09IDApCisJCWlmICgoY29leF9zdGEtPmJ0X2luZm9fZXh0ICYgQklUKDQpKSkgeworCQkJLyogIEJUIGF1dG8gcmVwb3J0IGFscmVhZHkgZW5hYmxlZCwgZG8gbm90aGluZyAqLworCQl9IGVsc2UgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBCVCBleHQgaW5mbyBiaXQ0IGNoZWNrLCBzZXQgQlQgdG8gZW5hYmxlIEF1dG8gUmVwb3J0ISFcbiIpOworCQkJaGFsYnRjODgyMWExYW50X2J0X2F1dG9fcmVwb3J0KGJ0Y29leGlzdCwKKwkJCQkJCSAgICAgICBGT1JDRV9FWEVDLCB0cnVlKTsKKwkJfQorI2VuZGlmCisJfQorCisJLyogIGNoZWNrIEJJVCgyKSBmaXJzdCA9PT4gY2hlY2sgaWYgYnQgaXMgdW5kZXIgaW5xdWlyeSBvciBwYWdlIHNjYW4gKi8KKwlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODgyMUFfMUFOVF9CX0lOUV9QQUdFKQorCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IHRydWU7CisJZWxzZQorCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IGZhbHNlOworCisJLyogIHNldCBsaW5rIGV4aXN0IHN0YXR1cyAqLworCWlmICghKGJ0X2luZm8mQlRfSU5GT184ODIxQV8xQU5UX0JfQ09OTkVDVElPTikpIHsKKwkJY29leF9zdGEtPmJ0X2xpbmtfZXhpc3QgPSBmYWxzZTsKKwkJY29leF9zdGEtPnBhbl9leGlzdCA9IGZhbHNlOworCQljb2V4X3N0YS0+YTJkcF9leGlzdCA9IGZhbHNlOworCQljb2V4X3N0YS0+aGlkX2V4aXN0ID0gZmFsc2U7CisJCWNvZXhfc3RhLT5zY29fZXhpc3QgPSBmYWxzZTsKKwl9IGVsc2UgeworCQkvKiAgY29ubmVjdGlvbiBleGlzdHMgKi8KKwkJY29leF9zdGEtPmJ0X2xpbmtfZXhpc3QgPSB0cnVlOworCQlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODgyMUFfMUFOVF9CX0ZUUCkKKwkJCWNvZXhfc3RhLT5wYW5fZXhpc3QgPSB0cnVlOworCQllbHNlCisJCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCWlmIChidF9pbmZvICYgQlRfSU5GT184ODIxQV8xQU5UX0JfQTJEUCkKKwkJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJY29leF9zdGEtPmEyZHBfZXhpc3QgPSBmYWxzZTsKKwkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg4MjFBXzFBTlRfQl9ISUQpCisJCQljb2V4X3N0YS0+aGlkX2V4aXN0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IGZhbHNlOworCQlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODgyMUFfMUFOVF9CX1NDT19FU0NPKQorCQkJY29leF9zdGEtPnNjb19leGlzdCA9IHRydWU7CisJCWVsc2UKKwkJCWNvZXhfc3RhLT5zY29fZXhpc3QgPSBmYWxzZTsKKwl9CisKKwloYWxidGM4ODIxYTFhbnRfdXBkYXRlX2J0X2xpbmtfaW5mbyhidGNvZXhpc3QpOworCisJaWYgKCEoYnRfaW5mbyZCVF9JTkZPXzg4MjFBXzFBTlRfQl9DT05ORUNUSU9OKSkgeworCQljb2V4X2RtLT5idF9zdGF0dXMgPSBCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19OT05fQ09OTkVDVEVEX0lETEU7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgTm9uLUNvbm5lY3RlZCBpZGxlISEhXG4iKTsKKwl9IGVsc2UgaWYgKGJ0X2luZm8gPT0gQlRfSU5GT184ODIxQV8xQU5UX0JfQ09OTkVDVElPTikgeworCQkvKiAgY29ubmVjdGlvbiBleGlzdHMgYnV0IG5vdCBidXN5ICovCisJCWNvZXhfZG0tPmJ0X3N0YXR1cyA9IEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIEJUIENvbm5lY3RlZC1pZGxlISEhXG4iKTsKKwl9IGVsc2UgaWYgKChidF9pbmZvJkJUX0lORk9fODgyMUFfMUFOVF9CX1NDT19FU0NPKSB8fAorCQkgICAoYnRfaW5mbyZCVF9JTkZPXzg4MjFBXzFBTlRfQl9TQ09fQlVTWSkpIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfU0NPX0JVU1k7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBCdEluZm9Ob3RpZnkoKSwgQlQgU0NPIGJ1c3khISFcbiIpOworCX0gZWxzZSBpZiAoYnRfaW5mbyZCVF9JTkZPXzg4MjFBXzFBTlRfQl9BQ0xfQlVTWSkgeworCQlpZiAoQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfQUNMX0JVU1kgIT0gY29leF9kbS0+YnRfc3RhdHVzKQorCQkJY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCA9IGZhbHNlOworCQljb2V4X2RtLT5idF9zdGF0dXMgPSBCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIEJ0SW5mb05vdGlmeSgpLCBCVCBBQ0wgYnVzeSEhIVxuIik7CisJfSBlbHNlIHsKKwkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfTUFYOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQnRJbmZvTm90aWZ5KCksIEJUIE5vbi1EZWZpbmVkIHN0YXRlISEhXG4iKTsKKwl9CisKKwlpZiAoKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkgICAgKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX1NDT19CVVNZID09IGNvZXhfZG0tPmJ0X3N0YXR1cykgfHwKKwkgICAgKEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpKQorCQlidF9idXN5ID0gdHJ1ZTsKKwllbHNlCisJCWJ0X2J1c3kgPSBmYWxzZTsKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX1RSQUZGSUNfQlVTWSwgJmJ0X2J1c3kpOworCisJaGFsYnRjODgyMWExYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShidGNvZXhpc3QpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMWFudF9oYWx0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLCAiW0JUQ29leF0sIEhhbHQgbm90aWZ5XG4iKTsKKworCWJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtID0gdHJ1ZTsKKworCWhhbGJ0Yzg4MjFhMWFudF9zZXRfYW50X3BhdGgoYnRjb2V4aXN0LCBCVENfQU5UX1BBVEhfQlQsIGZhbHNlLCB0cnVlKTsKKwloYWxidGM4ODIxYTFhbnRfaWdub3JlX3dsYW5fYWN0KGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywgdHJ1ZSk7CisKKwloYWxidGM4ODIxYTFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwKKwkJCQkJIDB4MCwgMHgwKTsKKwloYWxidGM4ODIxYTFhbnRfcHNfdGRtYShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIGZhbHNlLCAwKTsKKworCWV4X2hhbGJ0Yzg4MjFhMWFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KGJ0Y29leGlzdCwgQlRDX01FRElBX0RJU0NPTk5FQ1QpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMWFudF9wbnBfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCBwbnBfc3RhdGUpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwgIltCVENvZXhdLCBQbnAgbm90aWZ5XG4iKTsKKworCWlmIChCVENfV0lGSV9QTlBfU0xFRVAgPT0gcG5wX3N0YXRlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgUG5wIG5vdGlmeSB0byBTTEVFUFxuIik7CisJCWJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtID0gdHJ1ZTsKKwkJaGFsYnRjODgyMWExYW50X2lnbm9yZV93bGFuX2FjdChidGNvZXhpc3QsIEZPUkNFX0VYRUMsIHRydWUpOworCQloYWxidGM4ODIxYTFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShidGNvZXhpc3QsIEJUQ19QU19XSUZJX05BVElWRSwKKwkJCQkJCSAweDAsIDB4MCk7CisJCWhhbGJ0Yzg4MjFhMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCA5KTsKKwl9IGVsc2UgaWYgKEJUQ19XSUZJX1BOUF9XQUtFX1VQID09IHBucF9zdGF0ZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIFBucCBub3RpZnkgdG8gV0FLRSBVUFxuIik7CisJCWJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtID0gZmFsc2U7CisJCWhhbGJ0Yzg4MjFhMWFudF9pbml0X2h3X2NvbmZpZyhidGNvZXhpc3QsIGZhbHNlKTsKKwkJaGFsYnRjODgyMWExYW50X2luaXRfY29leF9kbShidGNvZXhpc3QpOworCQloYWxidGM4ODIxYTFhbnRfcXVlcnlfYnRfaW5mbyhidGNvZXhpc3QpOworCX0KK30KKwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfcGVyaW9kaWNhbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdGF0aWMgdTggZGlzX3Zlcl9pbmZvX2NudDsKKwl1MzIgZndfdmVyID0gMCwgYnRfcGF0Y2hfdmVyID0gMDsKKwlzdHJ1Y3QgYnRjX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmYnRjb2V4aXN0LT5ib2FyZF9pbmZvOworCXN0cnVjdCBidGNfc3RhY2tfaW5mbyAqc3RhY2tfaW5mbyA9ICZidGNvZXhpc3QtPnN0YWNrX2luZm87CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCA9PT09PT09PT09PT09PT09PT09PT09PT09PSBQZXJpb2RpY2FsID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisKKwlpZiAoZGlzX3Zlcl9pbmZvX2NudCA8PSA1KSB7CisJCWRpc192ZXJfaW5mb19jbnQgKz0gMTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJbQlRDb2V4XSwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIEFudCBQRyBOdW0vIEFudCBNZWNoLyBBbnQgUG9zID0gJWQvICVkLyAlZFxuIiwKKwkJCSAgYm9hcmRfaW5mby0+cGdfYW50X251bSwgYm9hcmRfaW5mby0+YnRkbV9hbnRfbnVtLAorCQkJICBib2FyZF9pbmZvLT5idGRtX2FudF9wb3MpOworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwKKwkJCSAgIltCVENvZXhdLCBCVCBzdGFjay8gaGNpIGV4dCB2ZXIgPSAlcyAvICVkXG4iLAorCQkJICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJCSAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X0JUX1BBVENIX1ZFUiwKKwkJCQkgICAmYnRfcGF0Y2hfdmVyKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0ZXX1ZFUiwgJmZ3X3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIENvZXhWZXIvIEZ3VmVyLyBQYXRjaFZlciA9ICVkXyV4LyAweCV4LyAweCV4KCVkKVxuIiwKKwkJCSAgZ2xjb2V4X3Zlcl9kYXRlXzg4MjFhXzFhbnQsIGdsY29leF92ZXJfODgyMWFfMWFudCwKKwkJCSAgZndfdmVyLCBidF9wYXRjaF92ZXIsIGJ0X3BhdGNoX3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCX0KKworI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzg4MjFBXzFBTlQgPT0gMCkKKwloYWxidGM4ODIxYTFhbnRfcXVlcnlfYnRfaW5mbyhidGNvZXhpc3QpOworCWhhbGJ0Yzg4MjFhMWFudF9tb25pdG9yX2J0X2N0cihidGNvZXhpc3QpOworCWhhbGJ0Yzg4MjFhMWFudF9tb25pdG9yX2J0X2VuYWJsZV9kaXNhYmxlKGJ0Y29leGlzdCk7CisjZWxzZQorCWlmIChoYWxidGM4ODIxYTFhbnRfSXNfd2lmaV9zdGF0dXNfY2hhbmdlZChidGNvZXhpc3QpIHx8CisJICAgIGNvZXhfZG0tPmF1dG9fdGRtYV9hZGp1c3QpIHsKKwkJaWYgKGNvZXhfc3RhLT5zcGVjaWFsX3BrdF9wZXJpb2RfY250ID4gMikKKwkJCWhhbGJ0Yzg4MjFhMWFudF9ydW5fY29leGlzdF9tZWNoYW5pc20oYnRjb2V4aXN0KTsKKwl9CisKKwljb2V4X3N0YS0+c3BlY2lhbF9wa3RfcGVyaW9kX2NudCsrOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4ODIxYTFhbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Yzg4MjFhMWFudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTkxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4ODIxYTFhbnQuaApAQCAtMCwwICsxLDE1OCBAQAorLyogICovCisvKiAgVGhlIGZvbGxvd2luZyBpcyBmb3IgODgyMUEgMUFOVCBCVCBDby1leGlzdCBkZWZpbml0aW9uICovCisvKiAgKi8KKyNkZWZpbmUJQlRfQVVUT19SRVBPUlRfT05MWV84ODIxQV8xQU5UCQkJCTAKKworI2RlZmluZQlCVF9JTkZPXzg4MjFBXzFBTlRfQl9GVFAJCQkJQklUKDcpCisjZGVmaW5lCUJUX0lORk9fODgyMUFfMUFOVF9CX0EyRFAJCQkJQklUKDYpCisjZGVmaW5lCUJUX0lORk9fODgyMUFfMUFOVF9CX0hJRAkJCQlCSVQoNSkKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8xQU5UX0JfU0NPX0JVU1kJCQkJQklUKDQpCisjZGVmaW5lCUJUX0lORk9fODgyMUFfMUFOVF9CX0FDTF9CVVNZCQkJCUJJVCgzKQorI2RlZmluZQlCVF9JTkZPXzg4MjFBXzFBTlRfQl9JTlFfUEFHRQkJCQlCSVQoMikKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8xQU5UX0JfU0NPX0VTQ08JCQkJQklUKDEpCisjZGVmaW5lCUJUX0lORk9fODgyMUFfMUFOVF9CX0NPTk5FQ1RJT04JCQkJQklUKDApCisKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8xQU5UX0EyRFBfQkFTSUNfUkFURShfQlRfSU5GT19FWFRfKQlcCisJCSgoKF9CVF9JTkZPX0VYVF8mQklUKDApKSkgPyB0cnVlIDogZmFsc2UpCisKKyNkZWZpbmUJQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg4MjFBXzFBTlQJCTIKKworZW51bSBCVF9JTkZPX1NSQ184ODIxQV8xQU5UIHsKKwlCVF9JTkZPX1NSQ184ODIxQV8xQU5UX1dJRklfRlcJCQk9IDB4MCwKKwlCVF9JTkZPX1NSQ184ODIxQV8xQU5UX0JUX1JTUAkJCT0gMHgxLAorCUJUX0lORk9fU1JDXzg4MjFBXzFBTlRfQlRfQUNUSVZFX1NFTkQJCT0gMHgyLAorCUJUX0lORk9fU1JDXzg4MjFBXzFBTlRfTUFYCit9OworCitlbnVtIEJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTIHsKKwlCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19OT05fQ09OTkVDVEVEX0lETEUJPSAweDAsCisJQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEUJCT0gMHgxLAorCUJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0lOUV9QQUdFCQk9IDB4MiwKKwlCVF84ODIxQV8xQU5UX0JUX1NUQVRVU19BQ0xfQlVTWQkJPSAweDMsCisJQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfU0NPX0JVU1kJCT0gMHg0LAorCUJUXzg4MjFBXzFBTlRfQlRfU1RBVFVTX0FDTF9TQ09fQlVTWQkJPSAweDUsCisJQlRfODgyMUFfMUFOVF9CVF9TVEFUVVNfTUFYCit9OworCitlbnVtIEJUXzg4MjFBXzFBTlRfV0lGSV9TVEFUVVMgeworCUJUXzg4MjFBXzFBTlRfV0lGSV9TVEFUVVNfTk9OX0NPTk5FQ1RFRF9JRExFCQkJPSAweDAsCisJQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19OT05fQ09OTkVDVEVEX0FTU09fQVVUSF9TQ0FOCQk9IDB4MSwKKwlCVF84ODIxQV8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9TQ0FOCQkJPSAweDIsCisJQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfU1BFQ0lBTF9QS1QJCQk9IDB4MywKKwlCVF84ODIxQV8xQU5UX1dJRklfU1RBVFVTX0NPTk5FQ1RFRF9JRExFCQkJPSAweDQsCisJQlRfODgyMUFfMUFOVF9XSUZJX1NUQVRVU19DT05ORUNURURfQlVTWQkJCT0gMHg1LAorCUJUXzg4MjFBXzFBTlRfV0lGSV9TVEFUVVNfTUFYCit9OworCitlbnVtIEJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPIHsKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19VTkRFRklORUQJCT0gMHgwLAorCUJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1NDTwkJCT0gMHgxLAorCUJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRAkJCT0gMHgyLAorCUJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0EyRFAJCQk9IDB4MywKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19BMkRQX1BBTkhTCQk9IDB4NCwKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5FRFIJCQk9IDB4NSwKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5IUwkJCT0gMHg2LAorCUJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX1BBTkVEUl9BMkRQCQk9IDB4NywKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19QQU5FRFJfSElECQk9IDB4OCwKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19ISURfQTJEUF9QQU5FRFIJCT0gMHg5LAorCUJUXzg4MjFBXzFBTlRfQ09FWF9BTEdPX0hJRF9BMkRQCQk9IDB4YSwKKwlCVF84ODIxQV8xQU5UX0NPRVhfQUxHT19NQVgJCQk9IDB4YiwKK307CisKK3N0cnVjdCBjb2V4X2RtXzg4MjFhXzFhbnQgeworCS8qICBmdyBtZWNoYW5pc20gKi8KKwlib29sCQljdXJfaWdub3JlX3dsYW5fYWN0OworCWJvb2wJCXByZV9pZ25vcmVfd2xhbl9hY3Q7CisJdTgJCXByZV9wc190ZG1hOworCXU4CQljdXJfcHNfdGRtYTsKKwl1OAkJcHNfdGRtYV9wYXJhWzVdOworCXU4CQlwc190ZG1hX2R1X2Fkal90eXBlOworCWJvb2wJCWF1dG9fdGRtYV9hZGp1c3Q7CisJYm9vbAkJcHJlX3BzX3RkbWFfb247CisJYm9vbAkJY3VyX3BzX3RkbWFfb247CisJYm9vbAkJcHJlX2J0X2F1dG9fcmVwb3J0OworCWJvb2wJCWN1cl9idF9hdXRvX3JlcG9ydDsKKwl1OAkJcHJlX2xwczsKKwl1OAkJY3VyX2xwczsKKwl1OAkJcHJlX3Jwd207CisJdTgJCWN1cl9ycHdtOworCisJLyogIHN3IG1lY2hhbmlzbSAqLworCWJvb2wJcHJlX2xvd19wZW5hbHR5X3JhOworCWJvb2wJCWN1cl9sb3dfcGVuYWx0eV9yYTsKKwl1MzIJCXByZV92YWxfMHg2YzA7CisJdTMyCQljdXJfdmFsXzB4NmMwOworCXUzMgkJcHJlX3ZhbF8weDZjNDsKKwl1MzIJCWN1cl92YWxfMHg2YzQ7CisJdTMyCQlwcmVfdmFsXzB4NmM4OworCXUzMgkJY3VyX3ZhbF8weDZjODsKKwl1OAkJcHJlX3ZhbF8weDZjYzsKKwl1OAkJY3VyX3ZhbF8weDZjYzsKKworCXUzMgkJYmFja3VwX2FyZnJfY250MTsgLyogIEF1dG8gUmF0ZSBGYWxsYmFjayBSZXRyeSBjbnQgKi8KKwl1MzIJCWJhY2t1cF9hcmZyX2NudDI7IC8qICBBdXRvIFJhdGUgRmFsbGJhY2sgUmV0cnkgY250ICovCisJdTE2CQliYWNrdXBfcmV0cnlfbGltaXQ7CisJdTgJCWJhY2t1cF9hbXBkdV9tYXhfdGltZTsKKworCS8qICBhbGdvcml0aG0gcmVsYXRlZCAqLworCXU4CQlwcmVfYWxnb3JpdGhtOworCXU4CQljdXJfYWxnb3JpdGhtOworCXU4CQlidF9zdGF0dXM7CisJdTgJCXdpZmlfY2hubF9pbmZvWzNdOworCisJdTMyCQlwcmVfcmFfbWFzazsKKwl1MzIJCWN1cl9yYV9tYXNrOworCXU4CQlwcmVfYXJmcl90eXBlOworCXU4CQljdXJfYXJmcl90eXBlOworCXU4CQlwcmVfcmV0cnlfbGltaXRfdHlwZTsKKwl1OAkJY3VyX3JldHJ5X2xpbWl0X3R5cGU7CisJdTgJCXByZV9hbXBkdV90aW1lX3R5cGU7CisJdTgJCWN1cl9hbXBkdV90aW1lX3R5cGU7CisKKwl1OAkJZXJyb3JfY29uZGl0aW9uOworfTsKKworc3RydWN0IGNvZXhfc3RhXzg4MjFhXzFhbnQgeworCWJvb2wJCWJ0X2xpbmtfZXhpc3Q7CisJYm9vbAkJc2NvX2V4aXN0OworCWJvb2wJCWEyZHBfZXhpc3Q7CisJYm9vbAkJaGlkX2V4aXN0OworCWJvb2wJCXBhbl9leGlzdDsKKworCWJvb2wJCXVuZGVyX2xwczsKKwlib29sCQl1bmRlcl9pcHM7CisJdTMyCQlzcGVjaWFsX3BrdF9wZXJpb2RfY250OworCXUzMgkJaGlnaF9wcmlvcml0eV90eDsKKwl1MzIJCWhpZ2hfcHJpb3JpdHlfcng7CisJdTMyCQlsb3dfcHJpb3JpdHlfdHg7CisJdTMyCQlsb3dfcHJpb3JpdHlfcng7CisJdTgJCWJ0X3Jzc2k7CisJdTgJCXByZV9idF9yc3NpX3N0YXRlOworCXU4CQlwcmVfd2lmaV9yc3NpX3N0YXRlWzRdOworCWJvb2wJCWMyaF9idF9pbmZvX3JlcV9zZW50OworCXU4CQlidF9pbmZvX2MyaFtCVF9JTkZPX1NSQ184ODIxQV8xQU5UX01BWF1bMTBdOworCXUzMgkJYnRfaW5mb19jMmhfY250W0JUX0lORk9fU1JDXzg4MjFBXzFBTlRfTUFYXTsKKwlib29sCQljMmhfYnRfaW5xdWlyeV9wYWdlOworCXU4CQlidF9yZXRyeV9jbnQ7CisJdTgJCWJ0X2luZm9fZXh0OworfTsKKworLyogIFRoZSBmb2xsb3dpbmcgaXMgaW50ZXJmYWNlIHdoaWNoIHdpbGwgbm90aWZ5IGNvZXggbW9kdWxlLiAqLwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfaW5pdF9od2NvbmZpZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCk7Cit2b2lkIGV4X2hhbGJ0Yzg4MjFhMWFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSk7Cit2b2lkIGV4X2hhbGJ0Yzg4MjFhMWFudF9scHNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X3NjYW5fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X21lZGlhX3N0YXR1c19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICB1OCB0eXBlKTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X3NwZWNpYWxfcGFja2V0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgdTggdHlwZSk7Cit2b2lkIGV4X2hhbGJ0Yzg4MjFhMWFudF9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggKnRtcGJ1ZiwgdTggbGVuZ3RoKTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X2hhbHRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X3BucF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHBucHN0YXRlKTsKK3ZvaWQgZXhfaGFsYnRjODgyMWExYW50X3BlcmlvZGljYWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfZGlzcGxheV9jb2V4X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleF9oYWxidGM4ODIxYTFhbnRfZGJnX2NvbnRyb2woc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IG9wX2NvZGUsCisJCQkJICAgIHU4IG9wX2xlbiwgdTggKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODgyMWEyYW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4ODIxYTJhbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmI1OTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODgyMWEyYW50LmMKQEAgLTAsMCArMSwzNDM4IEBACisvKiAgRGVzY3JpcHRpb246ICovCisvKiAgVGhpcyBmaWxlIGlzIGZvciBSVEw4ODIxQSBDby1leGlzdCBtZWNoYW5pc20gKi8KKy8qICBIaXN0b3J5ICovCisvKiAgMjAxMi8wOC8yMiBDb3NhIGZpcnN0IGNoZWNrIGluLiAqLworLyogIDIwMTIvMTEvMTQgQ29zYSBSZXZpc2UgZm9yIDg4MjFBIDJBbnQgb3V0IHNvdXJjaW5nLiAqLworCisvKiAgaW5jbHVkZSBmaWxlcyAqLworI2luY2x1ZGUgImhhbGJ0X3ByZWNvbXAuaCIKKy8qICBHbG9iYWwgdmFyaWFibGVzLCB0aGVzZSBhcmUgc3RhdGljIHZhcmlhYmxlcyAqLworc3RhdGljIHN0cnVjdCBjb2V4X2RtXzg4MjFhXzJhbnQJZ2xjb2V4X2RtXzg4MjFhXzJhbnQ7CitzdGF0aWMgc3RydWN0IGNvZXhfZG1fODgyMWFfMmFudAkqY29leF9kbSA9ICZnbGNvZXhfZG1fODgyMWFfMmFudDsKK3N0YXRpYyBzdHJ1Y3QgY29leF9zdGFfODgyMWFfMmFudAlnbGNvZXhfc3RhXzg4MjFhXzJhbnQ7CitzdGF0aWMgc3RydWN0IGNvZXhfc3RhXzg4MjFhXzJhbnQJKmNvZXhfc3RhID0gJmdsY29leF9zdGFfODgyMWFfMmFudDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGdsYnRfaW5mb19zcmNfODgyMWFfMmFudFtdID0geworCSJCVCBJbmZvW3dpZmkgZnddIiwKKwkiQlQgSW5mb1tidCByc3BdIiwKKwkiQlQgSW5mb1tidCBhdXRvIHJlcG9ydF0iLAorfTsKKworc3RhdGljIHUzMiBnbGNvZXhfdmVyX2RhdGVfODgyMWFfMmFudCA9IDIwMTMwNjE4Oworc3RhdGljIHUzMiBnbGNvZXhfdmVyXzg4MjFhXzJhbnQgPSAweDUwNTA7CisKKy8qICBsb2NhbCBmdW5jdGlvbiBwcm90byB0eXBlIGlmIG5lZWRlZCAqLworLyogIGxvY2FsIGZ1bmN0aW9uIHN0YXJ0IHdpdGggaGFsYnRjODgyMWEyYW50XyAqLworc3RhdGljIHU4IGhhbGJ0Yzg4MjFhMmFudF9idF9yc3NpX3N0YXRlKHU4IGxldmVsX251bSwgdTggcnNzaV90aHJlc2gsCisJCQkJCXU4IHJzc2lfdGhyZXNoMSkKK3sKKwlsb25nIGJ0X3Jzc2kgPSAwOworCXU4IGJ0X3Jzc2lfc3RhdGUgPSBjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGU7CisKKwlidF9yc3NpID0gY29leF9zdGEtPmJ0X3Jzc2k7CisKKwlpZiAobGV2ZWxfbnVtID09IDIpIHsKKwkJaWYgKChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJCWlmIChidF9yc3NpID49IChyc3NpX3RocmVzaCArCisJCQkgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg4MjFBXzJBTlQpKSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBIaWdoXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgQlQgUnNzaSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfcnNzaSA8IHJzc2lfdGhyZXNoKSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIExvd1xuIik7CisJCQl9IGVsc2UgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGxldmVsX251bSA9PSAzKSB7CisJCWlmIChyc3NpX3RocmVzaCA+IHJzc2lfdGhyZXNoMSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgdGhyZXNoIGVycm9yISFcbiIpOworCQkJcmV0dXJuIGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZTsKKwkJfQorCisJCWlmICgoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CisJCQlpZiAoYnRfcnNzaSA+PSAocnNzaV90aHJlc2ggKworCQkJICAgIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84ODIxQV8yQU5UKSkgeworCQkJCWJ0X3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBNZWRpdW1cbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmICgoY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlID09CisJCQkgICAgQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAorCQkJICAgKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PQorCQkJICAgIEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgeworCQkJaWYgKGJ0X3Jzc2kgPj0gKHJzc2lfdGhyZXNoMSArCisJCQkgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg4MjFBXzJBTlQpKSB7CisJCQkJYnRfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIGlmIChidF9yc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fQlRfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIEJUIFJzc2kgc3RhdGUgc3RheSBhdCBNZWRpdW1cbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJ0X3Jzc2kgPCByc3NpX3RocmVzaDEpIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTUVESVVNOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN3aXRjaCB0byBNZWRpdW1cbiIpOworCQkJfSBlbHNlIHsKKwkJCQlidF9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX0JUX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCBCVCBSc3NpIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9CisKKwljb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPSBidF9yc3NpX3N0YXRlOworCisJcmV0dXJuIGJ0X3Jzc2lfc3RhdGU7Cit9CisKK3N0YXRpYyB1OCB3aWZpMjFhX3Jzc2lfc3RhdGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkgICAgIHU4IGluZGV4LCB1OCBsZXZlbF9udW0sCisJCQkgICAgIHU4IHJzc2lfdGhyZXNoLCB1OCByc3NpX3RocmVzaDEpCit7CisJbG9uZwl3aWZpX3Jzc2kgPSAwOworCXU4IHdpZmlfcnNzaV9zdGF0ZSA9IGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfV0lGSV9SU1NJLCAmd2lmaV9yc3NpKTsKKworCWlmIChsZXZlbF9udW0gPT0gMikgeworCQlpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkgICAgIEJUQ19SU1NJX1NUQVRFX0xPVykgfHwKKwkJICAgIChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJICAgICBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKKwkJCWlmICh3aWZpX3Jzc2kgPj0gKHJzc2lfdGhyZXNoICsKKwkJCSAgICBCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODgyMUFfMkFOVCkpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gSGlnaFxuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2lmaV9yc3NpIDwgcnNzaV90aHJlc2gpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9MT1c7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0g7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgSGlnaFxuIik7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGxldmVsX251bSA9PSAzKSB7CisJCWlmIChyc3NpX3RocmVzaCA+IHJzc2lfdGhyZXNoMSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHRocmVzaCBlcnJvciEhXG4iKTsKKwkJCXJldHVybiBjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF07CisJCX0KKworCQlpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkgICAgQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAorCQkgICAgKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkgICAgIEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSkgeworCQkJaWYgKHdpZmlfcnNzaSA+PSAocnNzaV90aHJlc2ggKworCQkJICAgIEJUQ19SU1NJX0NPRVhfVEhSRVNIX1RPTF84ODIxQV8yQU5UKSkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIE1lZGl1bVxuIik7CisJCQl9IGVsc2UgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKKwkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzdGF5IGF0IExvd1xuIik7CisJCQl9CisJCX0gZWxzZSBpZiAoKGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9PQorCQkJICAgIEJUQ19SU1NJX1NUQVRFX01FRElVTSkgfHwKKwkJCSAgIChjb2V4X3N0YS0+cHJlX3dpZmlfcnNzaV9zdGF0ZVtpbmRleF0gPT0KKwkJCSAgICBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkpIHsKKwkJCWlmICh3aWZpX3Jzc2kgPj0gKHJzc2lfdGhyZXNoMStCVENfUlNTSV9DT0VYX1RIUkVTSF9UT0xfODgyMUFfMkFOVCkpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3dpdGNoIHRvIEhpZ2hcbiIpOworCQkJfSBlbHNlIGlmICh3aWZpX3Jzc2kgPCByc3NpX3RocmVzaCkgeworCQkJCXdpZmlfcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN3aXRjaCB0byBMb3dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTTsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fV0lGSV9SU1NJX1NUQVRFLAorCQkJCQkgICJbQlRDb2V4XSwgd2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTWVkaXVtXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aWZpX3Jzc2kgPCByc3NpX3RocmVzaDEpIHsKKwkJCQl3aWZpX3Jzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9NRURJVU07CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1dJRklfUlNTSV9TVEFURSwKKwkJCQkJICAiW0JUQ29leF0sIHdpZmkgUlNTSSBzdGF0ZSBzd2l0Y2ggdG8gTWVkaXVtXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJd2lmaV9yc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIOworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19XSUZJX1JTU0lfU1RBVEUsCisJCQkJCSAgIltCVENvZXhdLCB3aWZpIFJTU0kgc3RhdGUgc3RheSBhdCBIaWdoXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCWNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XSA9IHdpZmlfcnNzaV9zdGF0ZTsKKworCXJldHVybiB3aWZpX3Jzc2lfc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIG1vbml0b3JfYnRfZW5hYmxlX2Rpc2FibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RhdGljIGJvb2wgcHJlX2J0X2Rpc2FibGVkOworCXN0YXRpYyB1MzIgYnRfZGlzYWJsZV9jbnQ7CisJYm9vbCBidF9hY3RpdmUgPSB0cnVlLCBidF9kaXNhYmxlZCA9IGZhbHNlOworCisJLyogIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYnQgaXMgZGlzYWJsZWQgKi8KKworCWlmIChjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV90eCA9PSAwICYmCisJICAgIGNvZXhfc3RhLT5oaWdoX3ByaW9yaXR5X3J4ID09IDAgJiYKKwkgICAgY29leF9zdGEtPmxvd19wcmlvcml0eV90eCA9PSAwICYmCisJICAgIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfcnggPT0gMCkKKwkJYnRfYWN0aXZlID0gZmFsc2U7CisJaWYgKGNvZXhfc3RhLT5oaWdoX3ByaW9yaXR5X3R4ID09IDB4ZmZmZiAmJgorCSAgICBjb2V4X3N0YS0+aGlnaF9wcmlvcml0eV9yeCA9PSAweGZmZmYgJiYKKwkgICAgY29leF9zdGEtPmxvd19wcmlvcml0eV90eCA9PSAweGZmZmYgJiYKKwkgICAgY29leF9zdGEtPmxvd19wcmlvcml0eV9yeCA9PSAweGZmZmYpCisJCWJ0X2FjdGl2ZSA9IGZhbHNlOworCWlmIChidF9hY3RpdmUpIHsKKwkJYnRfZGlzYWJsZV9jbnQgPSAwOworCQlidF9kaXNhYmxlZCA9IGZhbHNlOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX0RJU0FCTEUsCisJCQkJICAgJmJ0X2Rpc2FibGVkKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCQkgICJbQlRDb2V4XSwgQlQgaXMgZW5hYmxlZCAhIVxuIik7CisJfSBlbHNlIHsKKwkJYnRfZGlzYWJsZV9jbnQrKzsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCQkgICJbQlRDb2V4XSwgYnQgYWxsIGNvdW50ZXJzID0gMCwgJWQgdGltZXMhIVxuIiwKKwkJCSAgYnRfZGlzYWJsZV9jbnQpOworCQlpZiAoYnRfZGlzYWJsZV9jbnQgPj0gMikgeworCQkJYnRfZGlzYWJsZWQgPSB0cnVlOworCQkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9CTF9CVF9ESVNBQkxFLAorCQkJCQkgICAmYnRfZGlzYWJsZWQpOworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCQkJICAiW0JUQ29leF0sIEJUIGlzIGRpc2FibGVkICEhXG4iKTsKKwkJfQorCX0KKwlpZiAocHJlX2J0X2Rpc2FibGVkICE9IGJ0X2Rpc2FibGVkKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9NT05JVE9SLAorCQkJICAiW0JUQ29leF0sIEJUIGlzIGZyb20gJXMgdG8gJXMhIVxuIiwKKwkJCSAgKHByZV9idF9kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpLAorCQkJICAoYnRfZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiKSk7CisJCXByZV9idF9kaXNhYmxlZCA9IGJ0X2Rpc2FibGVkOworCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X21vbml0b3JfYnRfY3RyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXUzMiByZWdfaHBfdHhyeCwgcmVnX2xwX3R4cngsIHU0dG1wOworCXUzMiByZWdfaHBfdHggPSAwLCByZWdfaHBfcnggPSAwLCByZWdfbHBfdHggPSAwLCByZWdfbHBfcnggPSAwOworCisJcmVnX2hwX3R4cnggPSAweDc3MDsKKwlyZWdfbHBfdHhyeCA9IDB4Nzc0OworCisJdTR0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgcmVnX2hwX3R4cngpOworCXJlZ19ocF90eCA9IHU0dG1wICYgTUFTS0xXT1JEOworCXJlZ19ocF9yeCA9ICh1NHRtcCAmIE1BU0tIV09SRCk+PjE2OworCisJdTR0bXAgPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgcmVnX2xwX3R4cngpOworCXJlZ19scF90eCA9IHU0dG1wICYgTUFTS0xXT1JEOworCXJlZ19scF9yeCA9ICh1NHRtcCAmIE1BU0tIV09SRCk+PjE2OworCisJY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfdHggPSByZWdfaHBfdHg7CisJY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfcnggPSByZWdfaHBfcng7CisJY29leF9zdGEtPmxvd19wcmlvcml0eV90eCA9IHJlZ19scF90eDsKKwljb2V4X3N0YS0+bG93X3ByaW9yaXR5X3J4ID0gcmVnX2xwX3J4OworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX0JUX01PTklUT1IsCisJCSAgIltCVENvZXhdLCBIaWdoIFByaW9yaXR5IFR4L1J4IChyZWcgMHgleCkgPSAweCV4KCVkKS8weCV4KCVkKVxuIiwKKwkJICByZWdfaHBfdHhyeCwgcmVnX2hwX3R4LCByZWdfaHBfdHgsIHJlZ19ocF9yeCwgcmVnX2hwX3J4KTsKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfTU9OSVRPUiwKKwkJICAiW0JUQ29leF0sIExvdyBQcmlvcml0eSBUeC9SeCAocmVnIDB4JXgpID0gMHgleCglZCkvMHgleCglZClcbiIsCisJCSAgcmVnX2xwX3R4cngsIHJlZ19scF90eCwgcmVnX2xwX3R4LCByZWdfbHBfcngsIHJlZ19scF9yeCk7CisKKwkvKiAgcmVzZXQgY291bnRlciAqLworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9xdWVyeV9idF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwljb2V4X3N0YS0+YzJoX2J0X2luZm9fcmVxX3NlbnQgPSB0cnVlOworCisJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQoMCk7CS8qICB0cmlnZ2VyICovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIFF1ZXJ5IEJ0IEluZm8sIEZXIHdyaXRlIDB4NjEgPSAweCV4XG4iLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYxLCAxLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHU4IGhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fYWxnb3JpdGhtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBidGNfc3RhY2tfaW5mbyAqc3RhY2tfaW5mbyA9ICZidGNvZXhpc3QtPnN0YWNrX2luZm87CisJYm9vbCBidF9oc19vbiA9IGZhbHNlOworCXU4IGFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1VOREVGSU5FRDsKKwl1OCBudW1fb2ZfZGlmZl9wcm9maWxlID0gMDsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCisJLyogZm9yIHdpbi04IHN0YWNrIEhJRCByZXBvcnQgZXJyb3IgKi8KKwlpZiAoIXN0YWNrX2luZm8tPmhpZF9leGlzdCkgeworCQkvKiBzeW5jICBCVEluZm8gd2l0aCBCVCBmaXJtd2FyZSBhbmQgc3RhY2sgKi8KKwkJc3RhY2tfaW5mby0+aGlkX2V4aXN0ID0gY29leF9zdGEtPmhpZF9leGlzdDsKKwl9CisJLyogIHdoZW4gc3RhY2sgSElEIHJlcG9ydCBlcnJvciwgaGVyZSB3ZSB1c2UgdGhlIGluZm8gZnJvbSBidCBmdy4gKi8KKwlpZiAoIXN0YWNrX2luZm8tPmJ0X2xpbmtfZXhpc3QpCisJCXN0YWNrX2luZm8tPmJ0X2xpbmtfZXhpc3QgPSBjb2V4X3N0YS0+YnRfbGlua19leGlzdDsKKworCWlmICghY29leF9zdGEtPmJ0X2xpbmtfZXhpc3QpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIE5vIHByb2ZpbGUgZXhpc3RzISEhXG4iKTsKKwkJcmV0dXJuIGFsZ29yaXRobTsKKwl9CisKKwlpZiAoY29leF9zdGEtPnNjb19leGlzdCkKKwkJbnVtX29mX2RpZmZfcHJvZmlsZSsrOworCWlmIChjb2V4X3N0YS0+aGlkX2V4aXN0KQorCQludW1fb2ZfZGlmZl9wcm9maWxlKys7CisJaWYgKGNvZXhfc3RhLT5wYW5fZXhpc3QpCisJCW51bV9vZl9kaWZmX3Byb2ZpbGUrKzsKKwlpZiAoY29leF9zdGEtPmEyZHBfZXhpc3QpCisJCW51bV9vZl9kaWZmX3Byb2ZpbGUrKzsKKworCWlmIChudW1fb2ZfZGlmZl9wcm9maWxlID09IDEpIHsKKwkJaWYgKGNvZXhfc3RhLT5zY29fZXhpc3QpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgU0NPIG9ubHlcbiIpOworCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fU0NPOworCQl9IGVsc2UgeworCQkJaWYgKGNvZXhfc3RhLT5oaWRfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBISUQgb25seVxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fSElEOworCQkJfSBlbHNlIGlmIChjb2V4X3N0YS0+YTJkcF9leGlzdCkgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJICAiW0JUQ29leF0sIEEyRFAgb25seVxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fQTJEUDsKKwkJCX0gZWxzZSBpZiAoY29leF9zdGEtPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgUEFOKEhTKSBvbmx5XG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFOSFM7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIFBBTihFRFIpIG9ubHlcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5FRFI7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChudW1fb2ZfZGlmZl9wcm9maWxlID09IDIpIHsKKwkJaWYgKGNvZXhfc3RhLT5zY29fZXhpc3QpIHsKKwkJCWlmIChjb2V4X3N0YS0+aGlkX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLCAiW0JUQ29leF0sIFNDTyArIEhJRFxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCX0gZWxzZSBpZiAoY29leF9zdGEtPmEyZHBfZXhpc3QpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCSAgIltCVENvZXhdLCBTQ08gKyBBMkRQID09PiBTQ09cbiIpOworCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQl9IGVsc2UgaWYgKGNvZXhfc3RhLT5wYW5fZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIFNDTyArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19TQ087CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIFNDTyArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY29leF9zdGEtPmhpZF9leGlzdCAmJgorCQkJICAgIGNvZXhfc3RhLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJbQlRDb2V4XSwgSElEICsgQTJEUFxuIik7CisJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQl9IGVsc2UgaWYgKGNvZXhfc3RhLT5oaWRfZXhpc3QgJiYKKwkJCQkgICBjb2V4X3N0YS0+cGFuX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBISUQgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gIEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0hJRDsKKwkJCQl9IGVsc2UgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgSElEICsgUEFOKEVEUilcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoY29leF9zdGEtPnBhbl9leGlzdCAmJgorCQkJCSAgIGNvZXhfc3RhLT5hMmRwX2V4aXN0KSB7CisJCQkJaWYgKGJ0X2hzX29uKSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBBMkRQICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0EyRFBfUEFOSFM7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9BMkRQOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX29mX2RpZmZfcHJvZmlsZSA9PSAzKSB7CisJCWlmIChjb2V4X3N0YS0+c2NvX2V4aXN0KSB7CisJCQlpZiAoY29leF9zdGEtPmhpZF9leGlzdCAmJgorCQkJICAgIGNvZXhfc3RhLT5hMmRwX2V4aXN0KSB7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgSElEICsgQTJEUCA9PT4gSElEXG4iKTsKKwkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJfSBlbHNlIGlmIChjb2V4X3N0YS0+aGlkX2V4aXN0ICYmCisJCQkJICAgY29leF9zdGEtPnBhbl9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgSElEICsgUEFOKEhTKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIFNDTyArIEhJRCArIFBBTihFRFIpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGNvZXhfc3RhLT5wYW5fZXhpc3QgJiYKKwkJCQkgICBjb2V4X3N0YS0+YTJkcF9leGlzdCkgeworCQkJCWlmIChidF9oc19vbikgeworCQkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJCQkgICJbQlRDb2V4XSwgU0NPICsgQTJEUCArIFBBTihIUylcbiIpOworCQkJCQlhbGdvcml0aG0gPSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBTQ08gKyBBMkRQICsgUEFOKEVEUikgPT0+IEhJRFxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1BBTkVEUl9ISUQ7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNvZXhfc3RhLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBjb2V4X3N0YS0+cGFuX2V4aXN0ICYmCisJCQkgICAgY29leF9zdGEtPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEhJRCArIEEyRFAgKyBQQU4oSFMpXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fSElEX0EyRFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEhJRCArIEEyRFAgKyBQQU4oRURSKVxuIik7CisJCQkJCWFsZ29yaXRobSA9IEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0hJRF9BMkRQX1BBTkVEUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG51bV9vZl9kaWZmX3Byb2ZpbGUgPj0gMykgeworCQlpZiAoY29leF9zdGEtPnNjb19leGlzdCkgeworCQkJaWYgKGNvZXhfc3RhLT5oaWRfZXhpc3QgJiYKKwkJCSAgICBjb2V4X3N0YS0+cGFuX2V4aXN0ICYmCisJCQkgICAgY29leF9zdGEtPmEyZHBfZXhpc3QpIHsKKwkJCQlpZiAoYnRfaHNfb24pIHsKKwkJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCQkJICAiW0JUQ29leF0sIEVycm9yISEhIFNDTyArIEhJRCArIEEyRFAgKyBQQU4oSFMpXG4iKTsKKworCQkJCX0gZWxzZSB7CisJCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkJCSAgIltCVENvZXhdLCBTQ08gKyBISUQgKyBBMkRQICsgUEFOKEVEUikgPT0+UEFOKEVEUikrSElEXG4iKTsKKwkJCQkJYWxnb3JpdGhtID0gQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGFsZ29yaXRobTsKK30KKworc3RhdGljIGJvb2wgaGFsYnRjODgyMWEyYW50X25lZWRfdG9fZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlib29sIHJldCA9IGZhbHNlOworCWJvb2wgYnRfaHNfb24gPSBmYWxzZSwgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZTsKKwlsb25nIGJ0X2hzX3Jzc2kgPSAwOworCXU4IGJ0X3Jzc2lfc3RhdGU7CisKKwlpZiAoIWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJCSZ3aWZpX2Nvbm5lY3RlZCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfSFNfUlNTSSwgJmJ0X2hzX3Jzc2kpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlidF9yc3NpX3N0YXRlID0gaGFsYnRjODgyMWEyYW50X2J0X3Jzc2lfc3RhdGUoMiwgMzUsIDApOworCisJaWYgKHdpZmlfY29ubmVjdGVkKSB7CisJCWlmIChidF9oc19vbikgeworCQkJaWYgKGJ0X2hzX3Jzc2kgPiAzNykgeworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJCQkJICAiW0JUQ29leF0sIE5lZWQgdG8gZGVjcmVhc2UgYnQgcG93ZXIgZm9yIEhTIG1vZGUhIVxuIik7CisJCQkJcmV0ID0gdHJ1ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCisJCQkJCSAgIltCVENvZXhdLCBOZWVkIHRvIGRlY3JlYXNlIGJ0IHBvd2VyIGZvciBXaWZpIGlzIGNvbm5lY3RlZCEhXG4iKTsKKwkJCQlyZXQgPSB0cnVlOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9md19kYWNfc3dpbmdfbGV2ZWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgdTggZGFjX3N3aW5nX2x2bCkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OworCisJLyogIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGUgb2YgZGFjc3dpbmcgKi8KKwkvKiAgMHgxOC8gMHgxMC8gMHhjLyAweDgvIDB4NC8gMHg2ICovCisJaDJjX3BhcmFtZXRlclswXSA9IGRhY19zd2luZ19sdmw7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIFNldCBEYWMgU3dpbmcgTGV2ZWwgPSAweCV4XG4iLCBkYWNfc3dpbmdfbHZsKTsKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIEZXIHdyaXRlIDB4NjQgPSAweCV4XG4iLCBoMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NCwgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgYm9vbCBkZWNfYnRfcHdyKQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwloMmNfcGFyYW1ldGVyWzBdID0gMDsKKworCWlmIChkZWNfYnRfcHdyKQorCQloMmNfcGFyYW1ldGVyWzBdIHw9IEJJVCgxKTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19FWEVDLAorCQkgICJbQlRDb2V4XSwgZGVjcmVhc2UgQnQgUG93ZXIgOiAlcywgRlcgd3JpdGUgMHg2MiA9IDB4JXhcbiIsCisJCSAgKGRlY19idF9wd3IgPyAiWWVzISEiIDogIk5vISEiKSwgaDJjX3BhcmFtZXRlclswXSk7CisKKwlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjIsIDEsIGgyY19wYXJhbWV0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGRlY19idF9wd3IpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkgICJbQlRDb2V4XSwgJXMgRGVjIEJUIHBvd2VyID0gJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgICgoZGVjX2J0X3B3cikgPyAiT04iIDogIk9GRiIpKTsKKwljb2V4X2RtLT5jdXJfZGVjX2J0X3B3ciA9IGRlY19idF9wd3I7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVfZGVjX2J0X3B3ciA9JWQsIGN1cl9kZWNfYnRfcHdyID0lZFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2RlY19idF9wd3IsIGNvZXhfZG0tPmN1cl9kZWNfYnRfcHdyKTsKKworCQlpZiAoY29leF9kbS0+cHJlX2RlY19idF9wd3IgPT0gY29leF9kbS0+Y3VyX2RlY19idF9wd3IpCisJCQlyZXR1cm47CisJfQorCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfZGVjX2J0X3B3cihidGNvZXhpc3QsIGNvZXhfZG0tPmN1cl9kZWNfYnRfcHdyKTsKKworCWNvZXhfZG0tPnByZV9kZWNfYnRfcHdyID0gY29leF9kbS0+Y3VyX2RlY19idF9wd3I7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9md19idF9sbmFfY29uc3RyYWluKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICBib29sIGJ0X2xuYV9jb25zX29uKQoreworCXU4IGgyY19wYXJhbWV0ZXJbMl0gPSB7MH07CisKKwloMmNfcGFyYW1ldGVyWzBdID0gMHgzOwkvKiAgb3BDb2RlLCAweDMgPSBCVF9TRVRfTE5BX0NPTlNUUkFJTiAqLworCisJaWYgKGJ0X2xuYV9jb25zX29uKQorCQloMmNfcGFyYW1ldGVyWzFdIHw9IEJJVCgwKTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IEJUIExOQSBDb25zdHJhaW46ICVzLCBGVyB3cml0ZSAweDY5ID0gMHgleFxuIiwKKwkJICAoYnRfbG5hX2NvbnNfb24gPyAiT04hISIgOiAiT0ZGISEiKSwKKwkJICBoMmNfcGFyYW1ldGVyWzBdPDw4fGgyY19wYXJhbWV0ZXJbMV0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY5LCAyLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2J0X2xuYV9jb25zdHJhaW4oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIGJvb2wgZm9yY2VfZXhlYywKKwkJCQkgYm9vbCBidF9sbmFfY29uc19vbikKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCisJCSAgIltCVENvZXhdLCAlcyBCVCBDb25zdHJhaW4gPSAlc1xuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSIgOiAiIiksCisJCSAgKChidF9sbmFfY29uc19vbikgPyAiT04iIDogIk9GRiIpKTsKKwljb2V4X2RtLT5jdXJfYnRfbG5hX2NvbnN0cmFpbiA9IGJ0X2xuYV9jb25zX29uOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlX2J0X2xuYV9jb25zdHJhaW4gPSVkLCBjdXJfYnRfbG5hX2NvbnN0cmFpbiA9JWRcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9idF9sbmFfY29uc3RyYWluLAorCQkJICBjb2V4X2RtLT5jdXJfYnRfbG5hX2NvbnN0cmFpbik7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9idF9sbmFfY29uc3RyYWluID09CisJCSAgICBjb2V4X2RtLT5jdXJfYnRfbG5hX2NvbnN0cmFpbikKKwkJCXJldHVybjsKKwl9CisJc2V0X2Z3X2J0X2xuYV9jb25zdHJhaW4oYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfYnRfbG5hX2NvbnN0cmFpbik7CisKKwljb2V4X2RtLT5wcmVfYnRfbG5hX2NvbnN0cmFpbiA9IGNvZXhfZG0tPmN1cl9idF9sbmFfY29uc3RyYWluOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfc2V0X2Z3X2J0X3BzZF9tb2RlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICAgdTggYnRfcHNkX21vZGUpCit7CisJdTggaDJjX3BhcmFtZXRlclsyXSA9IHswfTsKKworCWgyY19wYXJhbWV0ZXJbMF0gPSAweDI7CS8qICBvcENvZGUsIDB4MiA9IEJUX1NFVF9QU0RfTU9ERSAqLworCisJaDJjX3BhcmFtZXRlclsxXSA9IGJ0X3BzZF9tb2RlOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgQlQgUFNEIG1vZGUgPSAweCV4LCBGVyB3cml0ZSAweDY5ID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzFdLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0gPDwgOCB8IGgyY19wYXJhbWV0ZXJbMV0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY5LCAyLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X3NldF9idF9wc2RfbW9kZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgdTggYnRfcHNkX21vZGUpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAorCQkgICJbQlRDb2V4XSwgJXMgQlQgUFNEIG1vZGUgPSAweCV4XG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIiA6ICIiKSwgYnRfcHNkX21vZGUpOworCWNvZXhfZG0tPmN1cl9idF9wc2RfbW9kZSA9IGJ0X3BzZF9tb2RlOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlX2J0X3BzZF9tb2RlID0gMHgleCwgY3VyX2J0X3BzZF9tb2RlID0gMHgleFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2J0X3BzZF9tb2RlLCBjb2V4X2RtLT5jdXJfYnRfcHNkX21vZGUpOworCisJCWlmIChjb2V4X2RtLT5wcmVfYnRfcHNkX21vZGUgPT0gY29leF9kbS0+Y3VyX2J0X3BzZF9tb2RlKQorCQkJcmV0dXJuOworCX0KKwloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X2J0X3BzZF9tb2RlKGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX2J0X3BzZF9tb2RlKTsKKworCWNvZXhfZG0tPnByZV9idF9wc2RfbW9kZSA9IGNvZXhfZG0tPmN1cl9idF9wc2RfbW9kZTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X3NldF9idF9hdXRvX3JlcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgIGJvb2wgZW5hYmxlX2F1dG9fcmVwb3J0KQoreworCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CisKKwloMmNfcGFyYW1ldGVyWzBdID0gMDsKKworCWlmIChlbmFibGVfYXV0b19yZXBvcnQpCisJCWgyY19wYXJhbWV0ZXJbMF0gfD0gQklUKDApOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBCVCBGVyBhdXRvIHJlcG9ydCA6ICVzLCBGVyB3cml0ZSAweDY4ID0gMHgleFxuIiwKKwkJICAoZW5hYmxlX2F1dG9fcmVwb3J0ID8gIkVuYWJsZWQhISIgOiAiRGlzYWJsZWQhISIpLAorCQkgIGgyY19wYXJhbWV0ZXJbMF0pOworCisJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY4LCAxLCBoMmNfcGFyYW1ldGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X2J0X2F1dG9fcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICBib29sIGZvcmNlX2V4ZWMsCisJCQkJCSAgIGJvb2wgZW5hYmxlX2F1dG9fcmVwb3J0KQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIEJUIEF1dG8gcmVwb3J0ID0gJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgICgoZW5hYmxlX2F1dG9fcmVwb3J0KSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpKTsKKwljb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQgPSBlbmFibGVfYXV0b19yZXBvcnQ7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVfYnRfYXV0b19yZXBvcnQgPSVkLCBjdXJfYnRfYXV0b19yZXBvcnQgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfYnRfYXV0b19yZXBvcnQsCisJCQkgIGNvZXhfZG0tPmN1cl9idF9hdXRvX3JlcG9ydCk7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9idF9hdXRvX3JlcG9ydCA9PSBjb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQpCisJCQlyZXR1cm47CisJfQorCWhhbGJ0Yzg4MjFhMmFudF9zZXRfYnRfYXV0b19yZXBvcnQoYnRjb2V4aXN0LAorCQkJCQkgICBjb2V4X2RtLT5jdXJfYnRfYXV0b19yZXBvcnQpOworCisJY29leF9kbS0+cHJlX2J0X2F1dG9fcmVwb3J0ID0gY29leF9kbS0+Y3VyX2J0X2F1dG9fcmVwb3J0OworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICBib29sIGZvcmNlX2V4ZWMsCisJCQkJCSAgICAgdTggZndfZGFjX3N3aW5nX2x2bCkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCisJCSAgIltCVENvZXhdLCAlcyBzZXQgRlcgRGFjIFN3aW5nIGxldmVsID0gJWRcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCBmd19kYWNfc3dpbmdfbHZsKTsKKwljb2V4X2RtLT5jdXJfZndfZGFjX3N3aW5nX2x2bCA9IGZ3X2RhY19zd2luZ19sdmw7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVfZndfZGFjX3N3aW5nX2x2bCA9JWQsIGN1cl9md19kYWNfc3dpbmdfbHZsID0lZFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2Z3X2RhY19zd2luZ19sdmwsCisJCQkgIGNvZXhfZG0tPmN1cl9md19kYWNfc3dpbmdfbHZsKTsKKworCQlpZiAoY29leF9kbS0+cHJlX2Z3X2RhY19zd2luZ19sdmwgPT0KKwkJICAgIGNvZXhfZG0tPmN1cl9md19kYWNfc3dpbmdfbHZsKQorCQkJcmV0dXJuOworCX0KKworCXNldF9md19kYWNfc3dpbmdfbGV2ZWwoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfZndfZGFjX3N3aW5nX2x2bCk7CisKKwljb2V4X2RtLT5wcmVfZndfZGFjX3N3aW5nX2x2bCA9IGNvZXhfZG0tPmN1cl9md19kYWNfc3dpbmdfbHZsOworfQorCitzdGF0aWMgdm9pZCBzZXRfc3dfcmZfcnhfbHBmX2Nvcm5lcihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgYm9vbCByeF9yZl9zaHJpbmtfb24pCit7CisJaWYgKHJ4X3JmX3Nocmlua19vbikgeworCQkvKiBTaHJpbmsgUkYgUnggTFBGIGNvcm5lciAqLworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJCSAgIltCVENvZXhdLCBTaHJpbmsgUkYgUnggTFBGIGNvcm5lciEhXG4iKTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDFlLAorCQkJCQkgIDB4ZmZmZmYsIDB4ZmZmZmMpOworCX0gZWxzZSB7CisJCS8qIFJlc3VtZSBSRiBSeCBMUEYgY29ybmVyICovCisJCS8qICBBZnRlciBpbml0aWFsaXplZCwgd2UgY2FuIHVzZSBjb2V4X2RtLT5idF9yZjB4MWVfYmFja3VwICovCisJCWlmIChidGNvZXhpc3QtPmluaXRpbGl6ZWQpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJCSAgIltCVENvZXhdLCBSZXN1bWUgUkYgUnggTFBGIGNvcm5lciEhXG4iKTsKKwkJCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxZSwKKwkJCQkJCSAgMHhmZmZmZiwKKwkJCQkJCSAgY29leF9kbS0+YnRfcmYweDFlX2JhY2t1cCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9SZlNocmluayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCByeF9yZl9zaHJpbmtfb24pCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAorCQkgICJbQlRDb2V4XSwgJXMgdHVybiBSeCBSRiBTaHJpbmsgPSAlc1xuIiwKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byIgOiAiIiksCisJCSAgKChyeF9yZl9zaHJpbmtfb24pID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmsgPSByeF9yZl9zaHJpbmtfb247CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVfcmZfcnhfbHBmX3NocmluayA9JWQsIGN1cl9yZl9yeF9scGZfc2hyaW5rID0lZFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX3JmX3J4X2xwZl9zaHJpbmssCisJCQkgIGNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rKTsKKworCQlpZiAoY29leF9kbS0+cHJlX3JmX3J4X2xwZl9zaHJpbmsgPT0KKwkJICAgIGNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rKQorCQkJcmV0dXJuOworCX0KKwlzZXRfc3dfcmZfcnhfbHBmX2Nvcm5lcihidGNvZXhpc3QsIGNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rKTsKKworCWNvZXhfZG0tPnByZV9yZl9yeF9scGZfc2hyaW5rID0gY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbms7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zd19wZW5hbHR5X3R4X3JhdGVfYWRhcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJYm9vbCBsb3dfcGVuYWx0eV9yYSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzZdID0gezB9OworCisJaDJjX3BhcmFtZXRlclswXSA9IDB4NjsJLyogIG9wQ29kZSwgMHg2ID0gUmV0cnlfUGVuYWx0eSAqLworCisJaWYgKGxvd19wZW5hbHR5X3JhKSB7CisJCWgyY19wYXJhbWV0ZXJbMV0gfD0gQklUKDApOworCQkvKiBub3JtYWwgcmF0ZSBleGNlcHQgTUNTNy82LzUsIE9GRE01NC80OC8zNiAqLworCQloMmNfcGFyYW1ldGVyWzJdID0gMHgwMDsKKwkJaDJjX3BhcmFtZXRlclszXSA9IDB4Zjc7ICAvKiBNQ1M3IG9yIE9GRE01NCAqLworCQloMmNfcGFyYW1ldGVyWzRdID0gMHhmODsgIC8qIE1DUzYgb3IgT0ZETTQ4ICovCisJCWgyY19wYXJhbWV0ZXJbNV0gPSAweGY5OyAgLyogTUNTNSBvciBPRkRNMzYgICovCisJfQorCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgV2lGaSBMb3ctUGVuYWx0eSBSZXRyeTogJXMiLAorCQkgIChsb3dfcGVuYWx0eV9yYSA/ICJPTiEhIiA6ICJPRkYhISIpKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2OSwgNiwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9sb3dfcGVuYWx0eV9yYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGxvd19wZW5hbHR5X3JhKQoreworCS8qIHJldHVybjsgKi8KKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCisJCSAgIltCVENvZXhdLCAlcyB0dXJuIExvd1BlbmFsdHlSQSA9ICVzXG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKKwkJICAoKGxvd19wZW5hbHR5X3JhKSA/ICJPTiIgOiAiT0ZGIikpOworCWNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSA9IGxvd19wZW5hbHR5X3JhOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlX2xvd19wZW5hbHR5X3JhID0lZCwgY3VyX2xvd19wZW5hbHR5X3JhID0lZFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2xvd19wZW5hbHR5X3JhLAorCQkJICBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEpOworCisJCWlmIChjb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEgPT0gY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhKQorCQkJcmV0dXJuOworCX0KKwlzZXRfc3dfcGVuYWx0eV90eF9yYXRlX2FkYXAoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEpOworCisJY29leF9kbS0+cHJlX2xvd19wZW5hbHR5X3JhID0gY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfc2V0X2RhY19zd2luZ19yZWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICAgIHUzMiBsZXZlbCkKK3sKKwl1OCB2YWwgPSAodTgpbGV2ZWw7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIFdyaXRlIFN3RGFjU3dpbmcgPSAweCV4XG4iLCBsZXZlbCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4YzViLCAweDNlLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXRfc3dfZnVsbHRpbWVfZGFjX3N3aW5nKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgIGJvb2wgc3dfZGFjX3N3aW5nX29uLAorCQkJCSAgICAgIHUzMiBzd19kYWNfc3dpbmdfbHZsKQoreworCWlmIChzd19kYWNfc3dpbmdfb24pCisJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZGFjX3N3aW5nX3JlZyhidGNvZXhpc3QsIHN3X2RhY19zd2luZ19sdmwpOworCWVsc2UKKwkJaGFsYnRjODgyMWEyYW50X3NldF9kYWNfc3dpbmdfcmVnKGJ0Y29leGlzdCwgMHgxOCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9kYWNfc3dpbmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGRhY19zd2luZ19vbiwKKwkJCQkgICAgICB1MzIgZGFjX3N3aW5nX2x2bCkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCisJCSAgIltCVENvZXhdLCAlcyB0dXJuIERhY1N3aW5nID0lcywgZGFjX3N3aW5nX2x2bCA9IDB4JXhcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgICgoZGFjX3N3aW5nX29uKSA/ICJPTiIgOiAiT0ZGIiksIGRhY19zd2luZ19sdmwpOworCWNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24gPSBkYWNfc3dpbmdfb247CisJY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmwgPSBkYWNfc3dpbmdfbHZsOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlX2RhY19zd2luZ19vbiA9JWQsIHByZV9kYWNfc3dpbmdfbHZsID0gMHgleCwgY3VyX2RhY19zd2luZ19vbiA9JWQsIGN1cl9kYWNfc3dpbmdfbHZsID0gMHgleFxuIiwKKwkJCSAgY29leF9kbS0+cHJlX2RhY19zd2luZ19vbiwKKwkJCSAgY29leF9kbS0+cHJlX2RhY19zd2luZ19sdmwsCisJCQkgIGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24sCisJCQkgIGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsKTsKKworCQlpZiAoKGNvZXhfZG0tPnByZV9kYWNfc3dpbmdfb24gPT0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbikgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfZGFjX3N3aW5nX2x2bCA9PSBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX2x2bCkpCisJCQlyZXR1cm47CisJfQorCW1kZWxheSgzMCk7CisJc2V0X3N3X2Z1bGx0aW1lX2RhY19zd2luZyhidGNvZXhpc3QsIGRhY19zd2luZ19vbiwgZGFjX3N3aW5nX2x2bCk7CisKKwljb2V4X2RtLT5wcmVfZGFjX3N3aW5nX29uID0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbjsKKwljb2V4X2RtLT5wcmVfZGFjX3N3aW5nX2x2bCA9IGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfc2V0X2FkY19iYWNrX29mZihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICBib29sIGFkY19iYWNrX29mZikKK3sKKwlpZiAoYWRjX2JhY2tfb2ZmKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJICAiW0JUQ29leF0sIEJCIEJhY2tPZmYgTGV2ZWwgT24hXG4iKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4OGRiLCAweDYwLCAweDMpOworCX0gZWxzZSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkJICAiW0JUQ29leF0sIEJCIEJhY2tPZmYgTGV2ZWwgT2ZmIVxuIik7CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDhkYiwgMHg2MCwgMHgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9hZGNfYmFja19vZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSBib29sIGZvcmNlX2V4ZWMsIGJvb2wgYWRjX2JhY2tfb2ZmKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gQWRjQmFja09mZiA9ICVzXG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKKwkJICAoKGFkY19iYWNrX29mZikgPyAiT04iIDogIk9GRiIpKTsKKwljb2V4X2RtLT5jdXJfYWRjX2JhY2tfb2ZmID0gYWRjX2JhY2tfb2ZmOworCisJaWYgKCFmb3JjZV9leGVjKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgcHJlX2FkY19iYWNrX29mZiA9JWQsIGN1cl9hZGNfYmFja19vZmYgPSVkXG4iLAorCQkJY29leF9kbS0+cHJlX2FkY19iYWNrX29mZiwgY29leF9kbS0+Y3VyX2FkY19iYWNrX29mZik7CisKKwkJaWYgKGNvZXhfZG0tPnByZV9hZGNfYmFja19vZmYgPT0gY29leF9kbS0+Y3VyX2FkY19iYWNrX29mZikKKwkJCXJldHVybjsKKwl9CisJaGFsYnRjODgyMWEyYW50X3NldF9hZGNfYmFja19vZmYoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfYWRjX2JhY2tfb2ZmKTsKKworCWNvZXhfZG0tPnByZV9hZGNfYmFja19vZmYgPSBjb2V4X2RtLT5jdXJfYWRjX2JhY2tfb2ZmOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfc2V0X2NvZXhfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgIHUzMiB2YWwweDZjMCwgdTMyIHZhbDB4NmM0LAorCQkJCQkgICB1MzIgdmFsMHg2YzgsIHU4IHZhbDB4NmNjKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IGNvZXggdGFibGUsIHNldCAweDZjMCA9IDB4JXhcbiIsIHZhbDB4NmMwKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4NmMwLCB2YWwweDZjMCk7CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzQgPSAweCV4XG4iLCB2YWwweDZjNCk7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDZjNCwgdmFsMHg2YzQpOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCisJCSAgIltCVENvZXhdLCBzZXQgY29leCB0YWJsZSwgc2V0IDB4NmM4ID0gMHgleFxuIiwgdmFsMHg2YzgpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHg2YzgsIHZhbDB4NmM4KTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAorCQkgICJbQlRDb2V4XSwgc2V0IGNvZXggdGFibGUsIHNldCAweDZjYyA9IDB4JXhcbiIsIHZhbDB4NmNjKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NmNjLCB2YWwweDZjYyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgICBib29sIGZvcmNlX2V4ZWMsIHUzMiB2YWwweDZjMCwKKwkJCQkgICAgICAgdTMyIHZhbDB4NmM0LCB1MzIgdmFsMHg2YzgsIHU4IHZhbDB4NmNjKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKKwkJICAiW0JUQ29leF0sICVzIHdyaXRlIENvZXggVGFibGUgMHg2YzAgPSAweCV4LCAweDZjNCA9IDB4JXgsIDB4NmM4ID0gMHgleCwgMHg2Y2MgPSAweCV4XG4iLAorCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKKwkJICB2YWwweDZjMCwgdmFsMHg2YzQsIHZhbDB4NmM4LCB2YWwweDZjYyk7CisJY29leF9kbS0+Y3VyX3ZhbDB4NmMwID0gdmFsMHg2YzA7CisJY29leF9kbS0+Y3VyX3ZhbDB4NmM0ID0gdmFsMHg2YzQ7CisJY29leF9kbS0+Y3VyX3ZhbDB4NmM4ID0gdmFsMHg2Yzg7CisJY29leF9kbS0+Y3VyX3ZhbDB4NmNjID0gdmFsMHg2Y2M7CisKKwlpZiAoIWZvcmNlX2V4ZWMpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVfdmFsMHg2YzAgPSAweCV4LCBwcmVfdmFsMHg2YzQgPSAweCV4LCBwcmVfdmFsMHg2YzggPSAweCV4LCBwcmVfdmFsMHg2Y2MgPSAweCV4ICEhXG4iLAorCQkJICBjb2V4X2RtLT5wcmVfdmFsMHg2YzAsIGNvZXhfZG0tPnByZV92YWwweDZjNCwKKwkJCSAgY29leF9kbS0+cHJlX3ZhbDB4NmM4LCBjb2V4X2RtLT5wcmVfdmFsMHg2Y2MpOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGN1cl92YWwweDZjMCA9IDB4JXgsIGN1cl92YWwweDZjNCA9IDB4JXgsIGN1cl92YWwweDZjOCA9IDB4JXgsIGN1cl92YWwweDZjYyA9IDB4JXggISFcbiIsCisJCQkgIGNvZXhfZG0tPmN1cl92YWwweDZjMCwgY29leF9kbS0+Y3VyX3ZhbDB4NmM0LAorCQkJICBjb2V4X2RtLT5jdXJfdmFsMHg2YzgsIGNvZXhfZG0tPmN1cl92YWwweDZjYyk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfdmFsMHg2YzAgPT0gY29leF9kbS0+Y3VyX3ZhbDB4NmMwKSAmJgorCQkJKGNvZXhfZG0tPnByZV92YWwweDZjNCA9PSBjb2V4X2RtLT5jdXJfdmFsMHg2YzQpICYmCisJCQkoY29leF9kbS0+cHJlX3ZhbDB4NmM4ID09IGNvZXhfZG0tPmN1cl92YWwweDZjOCkgJiYKKwkJCShjb2V4X2RtLT5wcmVfdmFsMHg2Y2MgPT0gY29leF9kbS0+Y3VyX3ZhbDB4NmNjKSkKKwkJCXJldHVybjsKKwl9CisJaGFsYnRjODgyMWEyYW50X3NldF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgdmFsMHg2YzAsIHZhbDB4NmM0LAorCQkJCSAgICAgICB2YWwweDZjOCwgdmFsMHg2Y2MpOworCisJY29leF9kbS0+cHJlX3ZhbDB4NmMwID0gY29leF9kbS0+Y3VyX3ZhbDB4NmMwOworCWNvZXhfZG0tPnByZV92YWwweDZjNCA9IGNvZXhfZG0tPmN1cl92YWwweDZjNDsKKwljb2V4X2RtLT5wcmVfdmFsMHg2YzggPSBjb2V4X2RtLT5jdXJfdmFsMHg2Yzg7CisJY29leF9kbS0+cHJlX3ZhbDB4NmNjID0gY29leF9kbS0+Y3VyX3ZhbDB4NmNjOworfQorCitzdGF0aWMgdm9pZCBzZXRfZndfaWdub3JlX3dsYW5fYWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCBib29sIGVuYWJsZSkKK3sKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OworCisJaWYgKGVuYWJsZSkKKwkJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQoMCk7CQkvKiAgZnVuY3Rpb24gZW5hYmxlICovCisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKKwkJICAiW0JUQ29leF0sIHNldCBGVyBmb3IgQlQgSWdub3JlIFdsYW5fQWN0LCBGVyB3cml0ZSAweDYzID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MywgMSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9pZ25vcmVfd2xhbl9hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlKQoreworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gSWdub3JlIFdsYW5BY3QgJXNcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoZW5hYmxlID8gIk9OIiA6ICJPRkYiKSk7CisJY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCA9IGVuYWJsZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHByZV9pZ25vcmVfd2xhbl9hY3QgPSAlZCwgY3VyX2lnbm9yZV93bGFuX2FjdCA9ICVkISFcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9pZ25vcmVfd2xhbl9hY3QsCisJCQkgIGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3QpOworCQlpZiAoY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCA9PQorCQkgICAgY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCkKKwkJCXJldHVybjsKKwl9CisJc2V0X2Z3X2lnbm9yZV93bGFuX2FjdChidGNvZXhpc3QsIGVuYWJsZSk7CisKKwljb2V4X2RtLT5wcmVfaWdub3JlX3dsYW5fYWN0ID0gY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdDsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgdTggYnl0ZTEsIHU4IGJ5dGUyLCB1OCBieXRlMywKKwkJCQkJICB1OCBieXRlNCwgdTggYnl0ZTUpCit7CisJdTggaDJjX3BhcmFtZXRlcls1XSA9IHswfTsKKworCWgyY19wYXJhbWV0ZXJbMF0gPSBieXRlMTsKKwloMmNfcGFyYW1ldGVyWzFdID0gYnl0ZTI7CisJaDJjX3BhcmFtZXRlclsyXSA9IGJ5dGUzOworCWgyY19wYXJhbWV0ZXJbM10gPSBieXRlNDsKKwloMmNfcGFyYW1ldGVyWzRdID0gYnl0ZTU7CisKKwljb2V4X2RtLT5wc190ZG1hX3BhcmFbMF0gPSBieXRlMTsKKwljb2V4X2RtLT5wc190ZG1hX3BhcmFbMV0gPSBieXRlMjsKKwljb2V4X2RtLT5wc190ZG1hX3BhcmFbMl0gPSBieXRlMzsKKwljb2V4X2RtLT5wc190ZG1hX3BhcmFbM10gPSBieXRlNDsKKwljb2V4X2RtLT5wc190ZG1hX3BhcmFbNF0gPSBieXRlNTsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19FWEVDLAorCQkgICJbQlRDb2V4XSwgRlcgd3JpdGUgMHg2MCg1Ynl0ZXMpID0gMHgleCUwOHhcbiIsCisJCSAgaDJjX3BhcmFtZXRlclswXSwKKwkJICBoMmNfcGFyYW1ldGVyWzFdIDw8IDI0IHwgaDJjX3BhcmFtZXRlclsyXSA8PCAxNiB8CisJCSAgaDJjX3BhcmFtZXRlclszXTw8OHxoMmNfcGFyYW1ldGVyWzRdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MCwgNSwgaDJjX3BhcmFtZXRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHN3X21lY2hhbmlzbTEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIGJvb2wgc2hyaW5rX3J4X2xwZiwKKwkJCSAgYm9vbCBsb3dfcGVuYWx0eV9yYSwgYm9vbCBsaW1pdGVkX2RpZywKKwkJCSAgYm9vbCBidF9sbmFfY29uc3RyYWluKQoreworCXUzMiB3aWZpX2J3OworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCAhPSB3aWZpX2J3KSB7ICAvKiBvbmx5IHNocmluayBSRiBSeCBMUEYgZm9yIEhUNDAgKi8KKwkJaWYgKHNocmlua19yeF9scGYpCisJCQlzaHJpbmtfcnhfbHBmID0gZmFsc2U7CisJfQorCisJIGhhbGJ0Yzg4MjFhMmFudF9SZlNocmluayhidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBzaHJpbmtfcnhfbHBmKTsKKwloYWxidGM4ODIxYTJhbnRfbG93X3BlbmFsdHlfcmEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgbG93X3BlbmFsdHlfcmEpOworCisJLyogbm8gbGltaXRlZCBESUcgKi8KKwkvKiBzZXRfYnRfbG5hX2NvbnN0cmFpbihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBiQlRMTkFDb25zdHJhaW4pOyAqLworfQorCitzdGF0aWMgdm9pZCBzd19tZWNoYW5pc20yKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCBib29sIGFnY190YWJsZV9zaGlmdCwKKwkJCSAgYm9vbCBhZGNfYmFja19vZmYsIGJvb2wgc3dfZGFjX3N3aW5nLAorCQkJICB1MzIgZGFjX3N3aW5nX2x2bCkKK3sKKwkvKiBoYWxidGM4ODIxYTJhbnRfQWdjVGFibGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgYkFHQ1RhYmxlU2hpZnQpOyAqLworCWhhbGJ0Yzg4MjFhMmFudF9hZGNfYmFja19vZmYoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgYWRjX2JhY2tfb2ZmKTsKKwloYWxidGM4ODIxYTJhbnRfZGFjX3N3aW5nKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHN3X2RhY19zd2luZywKKwkJCQkgIHN3X2RhY19zd2luZyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9zZXRfYW50X3BhdGgoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSB1OCBhbnRfcG9zX3R5cGUsIGJvb2wgaW5pdF9od19jZmcsCisJCQkJCSBib29sIHdpZmlfb2ZmKQoreworCXN0cnVjdCBidGNfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICZidGNvZXhpc3QtPmJvYXJkX2luZm87CisJdTMyIHU0dG1wID0gMDsKKwl1OCBoMmNfcGFyYW1ldGVyWzJdID0gezB9OworCisJaWYgKGluaXRfaHdfY2ZnKSB7CisJCS8qICAweDRjWzIzXSA9IDAsIDB4NGNbMjRdID0gMSAgQW50ZW5uYSBjb250cm9sIGJ5IFdML0JUICovCisJCXU0dG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NGMpOworCQl1NHRtcCAmPSB+QklUKDIzKTsKKwkJdTR0bXAgfD0gQklUKDI0KTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDRjLCB1NHRtcCk7CisKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweDk3NCwgMHgzZmYpOworCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4Y2I0LCAweDc3KTsKKworCQlpZiAoYm9hcmRfaW5mby0+YnRkbV9hbnRfcG9zID09IEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCkgeworCQkJLyogdGVsbCBmaXJtd2FyZSAiYW50ZW5uYSBpbnZlcnNlIiAgPT0+IFdST05HIGZpcm13YXJlCisJCQkgKiBhbnRlbm5hIGNvbnRyb2wgY29kZS49PT5uZWVkIGZ3IHRvIGZpeCAqLworCQkJaDJjX3BhcmFtZXRlclswXSA9IDE7CisJCQloMmNfcGFyYW1ldGVyWzFdID0gMTsKKwkJCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NSwgMiwgaDJjX3BhcmFtZXRlcik7CisJCX0gZWxzZSB7CisJCQkvKiB0ZWxsIGZpcm13YXJlICJubyBhbnRlbm5hIGludmVyc2UiID09PiBXUk9ORyBmaXJtd2FyZQorCQkJICogYW50ZW5uYSBjb250cm9sIGNvZGUuPT0+bmVlZCBmdyB0byBmaXggKi8KKwkJCWgyY19wYXJhbWV0ZXJbMF0gPSAwOworCQkJaDJjX3BhcmFtZXRlclsxXSA9IDE7CisJCQlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjUsIDIsCisJCQkJCQloMmNfcGFyYW1ldGVyKTsKKwkJfQorCX0KKworCS8qICBleHQgc3dpdGNoIHNldHRpbmcgKi8KKwlzd2l0Y2ggKGFudF9wb3NfdHlwZSkgeworCWNhc2UgQlRDX0FOVF9XSUZJX0FUX01BSU46CisJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweGNiNywgMHgzMCwgMHgxKTsKKwkJYnJlYWs7CisJY2FzZSBCVENfQU5UX1dJRklfQVRfQVVYOgorCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHhjYjcsIDB4MzAsIDB4Mik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcHMyMWFfdGRtYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgYm9vbCBmb3JjZV9leGVjLAorCQkgICAgICAgYm9vbCB0dXJuX29uLCB1OCB0eXBlKQoreworCS8qIGJvb2wgdHVybl9vbl9ieV9jbnQgPSBmYWxzZTsgKi8KKwkvKiB1OCBwc190ZG1hX3R5cGVfYnlfY250ID0gMDsgKi8KKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sICVzIHR1cm4gJXMgUFMgVERNQSwgdHlwZSA9JWRcbiIsCisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLAorCQkgICh0dXJuX29uID8gIk9OIiA6ICJPRkYiKSwgdHlwZSk7CisJY29leF9kbS0+Y3VyX3BzX3RkbWFfb24gPSB0dXJuX29uOworCWNvZXhfZG0tPmN1cl9wc190ZG1hID0gdHlwZTsKKworCWlmICghZm9yY2VfZXhlYykgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIHByZV9wc190ZG1hX29uID0gJWQsIGN1cl9wc190ZG1hX29uID0gJWQhIVxuIiwKKwkJCSAgY29leF9kbS0+cHJlX3BzX3RkbWFfb24sIGNvZXhfZG0tPmN1cl9wc190ZG1hX29uKTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBwcmVfcHNfdGRtYSA9ICVkLCBjdXJfcHNfdGRtYSA9ICVkISFcbiIsCisJCQkgIGNvZXhfZG0tPnByZV9wc190ZG1hLCBjb2V4X2RtLT5jdXJfcHNfdGRtYSk7CisKKwkJaWYgKChjb2V4X2RtLT5wcmVfcHNfdGRtYV9vbiA9PSBjb2V4X2RtLT5jdXJfcHNfdGRtYV9vbikgJiYKKwkJICAgIChjb2V4X2RtLT5wcmVfcHNfdGRtYSA9PSBjb2V4X2RtLT5jdXJfcHNfdGRtYSkpCisJCQlyZXR1cm47CisJfQorCWlmICh0dXJuX29uKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIDE6CisJCWRlZmF1bHQ6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsCisJCQkJCQkgICAgICAweDFhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MTIsCisJCQkJCQkgICAgICAweDEyLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWMsCisJCQkJCQkgICAgICAweDMsIDB4ZjEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxMCwKKwkJCQkJCSAgICAgIDB4MDMsIDB4ZjEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYSwKKwkJCQkJCSAgICAgIDB4MWEsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxMiwKKwkJCQkJCSAgICAgIDB4MTIsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxYywKKwkJCQkJCSAgICAgIDB4MywgMHg3MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGEzLCAweDEwLAorCQkJCQkJICAgICAgMHgzLCAweDcwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDk6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsCisJCQkJCQkgICAgICAweDFhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDEwOgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEyLAorCQkJCQkJICAgICAgMHgxMiwgMHhlMSwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAxMToKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHhhLAorCQkJCQkJICAgICAgMHhhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDEyOgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDUsCisJCQkJCQkgICAgICAweDUsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTM6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsCisJCQkJCQkgICAgICAweDFhLCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDE0OgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDEyLAorCQkJCQkJICAgICAgMHgxMiwgMHg2MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAxNToKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHhhLAorCQkJCQkJICAgICAgMHhhLCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDUsCisJCQkJCQkgICAgICAweDUsIDB4NjAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTc6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4YTMsIDB4MmYsCisJCQkJCQkgICAgICAweDJmLCAweDYwLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDE4OgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDUsCisJCQkJCQkgICAgICAweDUsIDB4ZTEsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgMTk6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MjUsCisJCQkJCQkgICAgICAweDI1LCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQljYXNlIDIwOgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweGUzLCAweDI1LAorCQkJCQkJICAgICAgMHgyNSwgMHg2MCwgMHg5MCk7CisJCQlicmVhazsKKwkJY2FzZSAyMToKKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfZndfcHN0ZG1hKGJ0Y29leGlzdCwgMHhlMywgMHgxNSwKKwkJCQkJCSAgICAgIDB4MDMsIDB4NzAsIDB4OTApOworCQkJYnJlYWs7CisJCWNhc2UgNzE6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4MWEsCisJCQkJCQkgICAgICAweDFhLCAweGUxLCAweDkwKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogIGRpc2FibGUgUFMgdGRtYSAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSAwOgorCQkJaGFsYnRjODgyMWEyYW50X3NldF9md19wc3RkbWEoYnRjb2V4aXN0LCAweDAsIDB4MCwgMHgwLAorCQkJCQkJICAgICAgMHg0MCwgMHgwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4MCwgMHgwLCAweDAsCisJCQkJCQkgICAgICAweDQ4LCAweDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloYWxidGM4ODIxYTJhbnRfc2V0X2Z3X3BzdGRtYShidGNvZXhpc3QsIDB4MCwgMHgwLCAweDAsCisJCQkJCQkgICAgICAweDQwLCAweDApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiAgdXBkYXRlIHByZSBzdGF0ZSAqLworCWNvZXhfZG0tPnByZV9wc190ZG1hX29uID0gY29leF9kbS0+Y3VyX3BzX3RkbWFfb247CisJY29leF9kbS0+cHJlX3BzX3RkbWEgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X2NvZXhfYWxsX29mZihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwkvKiAgZncgYWxsIG9mZiAqLworCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCWhhbGJ0Yzg4MjFhMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCS8qICBzdyBhbGwgb2ZmICovCisJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisKKwkvKiAgaHcgYWxsIG9mZiAqLworCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NTU1NTU1NTUsCisJCQkJICAgMHg1NTU1NTU1NSwgMHhmZmZmLCAweDMpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfY29leF91bmRlcl81ZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwloYWxidGM4ODIxYTJhbnRfY29leF9hbGxfb2ZmKGJ0Y29leGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLyogIGZvcmNlIHRvIHJlc2V0IGNvZXggbWVjaGFuaXNtICovCisJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAweDU1NTU1NTU1LAorCQkJCSAgIDB4NTU1NTU1NTUsIDB4ZmZmZiwgMHgzKTsKKworCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCBmYWxzZSwgMSk7CisJaGFsYnRjODgyMWEyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCA2KTsKKwloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIEZPUkNFX0VYRUMsIGZhbHNlKTsKKworCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfYnRfaW5xdWlyeV9wYWdlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWJvb2wgbG93X3B3cl9kaXNhYmxlID0gdHJ1ZTsKKworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwloYWxidGM4ODIxYTJhbnRfY29leF90YWJsZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAweDU1ZmY1NWZmLAorCQkJCSAgIDB4NWFmYTVhZmEsIDB4ZmZmZiwgMHgzKTsKKwlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMpOworfQorCitzdGF0aWMgYm9vbCBoYWxidGM4ODIxYTJhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlib29sIGNvbW1vbiA9IGZhbHNlLCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCB3aWZpX2J1c3kgPSBmYWxzZTsKKwlib29sIGxvd19wd3JfZGlzYWJsZSA9IGZhbHNlOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKKwkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0JVU1ksICZ3aWZpX2J1c3kpOworCisJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMHg1NWZmNTVmZiwKKwkJCQkgICAweDVhZmE1YWZhLCAweGZmZmYsIDB4Myk7CisKKwlpZiAoIXdpZmlfY29ubmVjdGVkICYmCisJICAgIEJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTX0lETEUgPT0gY29leF9kbS0+YnRfc3RhdHVzKSB7CisJCWxvd19wd3JfZGlzYWJsZSA9IGZhbHNlOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9ESVNBQkxFX0xPV19QT1dFUiwKKwkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgV2lmaSBJUFMgKyBCVCBJUFMhIVxuIik7CisKKwkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisJCWhhbGJ0Yzg4MjFhMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCisJCWNvbW1vbiA9IHRydWU7CisJfSBlbHNlIGlmICh3aWZpX2Nvbm5lY3RlZCAmJgorCQkgICAoQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCWxvd19wd3JfZGlzYWJsZSA9IGZhbHNlOworCQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9ESVNBQkxFX0xPV19QT1dFUiwKKwkJCQkgICAmbG93X3B3cl9kaXNhYmxlKTsKKworCQlpZiAod2lmaV9idXN5KSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIFdpZmkgQnVzeSArIEJUIElQUyEhXG4iKTsKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCQl9IGVsc2UgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBXaWZpIExQUyArIEJUIElQUyEhXG4iKTsKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCQl9CisKKwkJaGFsYnRjODgyMWEyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisKKwkJY29tbW9uID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKCF3aWZpX2Nvbm5lY3RlZCAmJgorCQkgICAoQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEUgPT0KKwkJICAgIGNvZXhfZG0tPmJ0X3N0YXR1cykpIHsKKwkJbG93X3B3cl9kaXNhYmxlID0gdHJ1ZTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsCisJCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIFdpZmkgSVBTICsgQlQgTFBTISFcbiIpOworCisJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDEpOworCQloYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKworCQljb21tb24gPSB0cnVlOworCX0gZWxzZSBpZiAod2lmaV9jb25uZWN0ZWQgJiYKKwkJICAgKEJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFID09CisJCSAgICBjb2V4X2RtLT5idF9zdGF0dXMpKSB7CisJCWxvd19wd3JfZGlzYWJsZSA9IHRydWU7CisJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJCSAgICZsb3dfcHdyX2Rpc2FibGUpOworCisJCWlmICh3aWZpX2J1c3kpIHsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgV2lmaSBCdXN5ICsgQlQgTFBTISFcbiIpOworCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisJCX0gZWxzZSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIFdpZmkgTFBTICsgQlQgTFBTISFcbiIpOworCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisJCX0KKworCQloYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKwkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCisJCWNvbW1vbiA9IHRydWU7CisJfSBlbHNlIGlmICghd2lmaV9jb25uZWN0ZWQgJiYKKwkJICAgKEJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTX05PTl9JRExFID09IGNvZXhfZG0tPmJ0X3N0YXR1cykpIHsKKwkJbG93X3B3cl9kaXNhYmxlID0gZmFsc2U7CisJCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSLAorCQkJCSAgICZsb3dfcHdyX2Rpc2FibGUpOworCisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBXaWZpIElQUyArIEJUIEJ1c3khIVxuIik7CisKKwkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisJCWhhbGJ0Yzg4MjFhMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCisJCWNvbW1vbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJbG93X3B3cl9kaXNhYmxlID0gdHJ1ZTsKKwkJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsCisJCQkJICAgJmxvd19wd3JfZGlzYWJsZSk7CisKKwkJaWYgKHdpZmlfYnVzeSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBXaWZpIEJ1c3kgKyBCVCBCdXN5ISFcbiIpOworCQkJY29tbW9uID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIFdpZmkgTFBTICsgQlQgQnVzeSEhXG4iKTsKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMjEpOworCisJCQlpZiAoaGFsYnRjODgyMWEyYW50X25lZWRfdG9fZGVjX2J0X3B3cihidGNvZXhpc3QpKQorCQkJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwKKwkJCQkJCQkgICBOT1JNQUxfRVhFQywgdHJ1ZSk7CisJCQllbHNlCisJCQkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LAorCQkJCQkJCSAgIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwkJCWNvbW1vbiA9IHRydWU7CisJCX0KKwkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCX0KKwlyZXR1cm4gY29tbW9uOworfQorCitzdGF0aWMgdm9pZCB0ZG1hX2R1cmF0aW9uX2FkanVzdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgYm9vbCBzY29faGlkLCBib29sIHR4X3BhdXNlLCB1OCBtYXhfaW50ZXJ2YWwpCit7CisJc3RhdGljIGxvbmcgdXAsIGRuLCBtLCBuLCB3YWl0X2NvdW50OworCWxvbmcgcmVzdWx0OworCS8qIDA6IG5vIGNoYW5nZSwgKzE6IGluY3IgV2lGaSBkdXJhdGlvbiwgLTE6IGRlY3IgV2lGaSBkdXJhdGlvbiAqLworCXU4IHJldHJ5X2NvdW50ID0gMDsKKworCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKKwkJICAiW0JUQ29leF0sIFRkbWFEdXJhdGlvbkFkanVzdCgpXG4iKTsKKworCWlmIChjb2V4X2RtLT5yZXNldF90ZG1hX2FkanVzdCkgeworCQljb2V4X2RtLT5yZXNldF90ZG1hX2FkanVzdCA9IGZhbHNlOworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJICAiW0JUQ29leF0sIGZpcnN0IHJ1biBUZG1hRHVyYXRpb25BZGp1c3QoKSEhXG4iKTsKKwkJaWYgKHNjb19oaWQpIHsKKwkJCWlmICh0eF9wYXVzZSkgeworCQkJCWlmIChtYXhfaW50ZXJ2YWwgPT0gMSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEzOworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDIpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNDsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAzKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChtYXhfaW50ZXJ2YWwgPT0gMSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDkpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gOTsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAyKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTA7CisJCQkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHR4X3BhdXNlKSB7CisJCQkJaWYgKG1heF9pbnRlcnZhbCA9PSAxKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA1OworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDIpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDY7CisJCQkJfSBlbHNlIGlmIChtYXhfaW50ZXJ2YWwgPT0gMykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChtYXhfaW50ZXJ2YWwgPT0gMSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTsKKwkJCQl9IGVsc2UgaWYgKG1heF9pbnRlcnZhbCA9PSAyKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCQkJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDMpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJfQorCQkJfQorCQl9CisJCXVwID0gMDsKKwkJZG4gPSAwOworCQltID0gMTsKKwkJbiA9IDM7CisJCXJlc3VsdCA9IDA7CisJCXdhaXRfY291bnQgPSAwOworCX0gZWxzZSB7CisJCS8qIGFjY3F1aXJlIHRoZSBCVCBUUnggcmV0cnkgY291bnQgZnJvbSBCVF9JbmZvIGJ5dGUyICovCisJCXJldHJ5X2NvdW50ID0gY29leF9zdGEtPmJ0X3JldHJ5X2NudDsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCByZXRyeV9jb3VudCA9ICVkXG4iLCByZXRyeV9jb3VudCk7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkgICJbQlRDb2V4XSwgdXAgPSVkLCBkbiA9JWQsIG0gPSVkLCBuID0lZCwgd2FpdF9jb3VudCA9JWRcbiIsCisJCQkgIChpbnQpdXAsIChpbnQpZG4sIChpbnQpbSwgKGludCluLCAoaW50KXdhaXRfY291bnQpOworCQlyZXN1bHQgPSAwOworCQl3YWl0X2NvdW50Kys7CisKKwkJaWYgKHJldHJ5X2NvdW50ID09IDApIHsKKwkJCS8qICBubyByZXRyeSBpbiB0aGUgbGFzdCAyLXNlY29uZCBkdXJhdGlvbiAqLworCQkJdXArKzsKKwkJCWRuLS07CisKKwkJCWlmIChkbiA8PSAwKQorCQkJCWRuID0gMDsKKworCQkJaWYgKHVwID49IG4pIHsKKwkJCQl3YWl0X2NvdW50ID0gMDsKKwkJCQluID0gMzsKKwkJCQl1cCA9IDA7CisJCQkJZG4gPSAwOworCQkJCXJlc3VsdCA9IDE7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgSW5jcmVhc2Ugd2lmaSBkdXJhdGlvbiEhXG4iKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXRyeV9jb3VudCA8PSAzKSB7CisJCQkvKiAgPD0gMyByZXRyeSBpbiB0aGUgbGFzdCAyLXNlY29uZCBkdXJhdGlvbiAqLworCQkJdXAtLTsKKwkJCWRuKys7CisKKwkJCWlmICh1cCA8PSAwKQorCQkJCXVwID0gMDsKKworCQkJaWYgKGRuID09IDIpIHsKKwkJCQlpZiAod2FpdF9jb3VudCA8PSAyKQorCQkJCQltKys7CisJCQkJZWxzZQorCQkJCQltID0gMTsKKworCQkJCWlmIChtID49IDIwKQorCQkJCQltID0gMjA7CisKKwkJCQluID0gMyptOworCQkJCXVwID0gMDsKKwkJCQlkbiA9IDA7CisJCQkJd2FpdF9jb3VudCA9IDA7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgRGVjcmVhc2Ugd2lmaSBkdXJhdGlvbiBmb3IgcmV0cnlDb3VudGVyPDMhIVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAod2FpdF9jb3VudCA9PSAxKQorCQkJCW0rKzsKKwkJCWVsc2UKKwkJCQltID0gMTsKKworCQkJaWYgKG0gPj0gMjApCisJCQkJbSA9IDIwOworCisJCQluID0gMyptOworCQkJdXAgPSAwOworCQkJZG4gPSAwOworCQkJd2FpdF9jb3VudCA9IDA7CisJCQlyZXN1bHQgPSAtMTsKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJICAiW0JUQ29leF0sIERlY3JlYXNlIHdpZmkgZHVyYXRpb24gZm9yIHJldHJ5Q291bnRlcj4zISFcbiIpOworCQl9CisKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBtYXggSW50ZXJ2YWwgPSAlZFxuIiwgbWF4X2ludGVydmFsKTsKKwkJaWYgKG1heF9pbnRlcnZhbCA9PSAxKSB7CisJCQlpZiAodHhfcGF1c2UpIHsKKwkJCQkvKiBUT0RPOiByZWZhY3RvciBoZXJlICovCisJCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLAorCQkJCQkgIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDFcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3MSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJCU5PUk1BTF9FWEVDLAorCQkJCQkJCQl0cnVlLCA1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCQlOT1JNQUxfRVhFQywKKwkJCQkJCQkJdHJ1ZSwgNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkJTk9STUFMX0VYRUMsCisJCQkJCQkJCXRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDQpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA4KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDg7CisJCQkJfQorCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA5KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTM7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEyKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTY7CisJCQkJfQorCisJCQkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDgpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDg7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTMpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTY7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA4KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTUpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMzsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVE9ETzogcmVmYWN0b3IgaGVyZSAqLworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsICJbQlRDb2V4XSwgVHhQYXVzZSA9IDBcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA1KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNzEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDQ7CisJCQkJfQorCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDkpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gOTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTA7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMjsKKwkJCQl9CisKKwkJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3MSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEwOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcxKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3MTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEwOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDkpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDIpIHsKKwkJCWlmICh0eF9wYXVzZSkgeworCQkJCS8qIFRPRE86IHJlZmFjdG9yIGhlcmUgKi8KKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLCAiW0JUQ29leF0sIFR4UGF1c2UgPSAxXG4iKTsKKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDYpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNjsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDY7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNCkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDgpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gODsKKwkJCQl9CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTQ7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNjsKKwkJCQl9CisJCQkJaWYgKHJlc3VsdCA9PSAtMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDgpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDg7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTMpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTY7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA4KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA2OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDYpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTUpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE0KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNDsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVE9ETzogcmVmYWN0b3IgaGVyZSAqLworCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBUeFBhdXNlID0gMFxuIik7CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA2KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAyOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA0KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDQ7CisJCQkJfQorCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEwKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEwOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTQpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNikgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEyKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEyOworCQkJCX0KKwkJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDMpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA5KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEwKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTEpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDEyOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMSkgeworCQkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNCkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDMpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMjsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAyKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDIpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDI7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEwKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMDsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTA7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAobWF4X2ludGVydmFsID09IDMpIHsKKwkJCWlmICh0eF9wYXVzZSkgeworCQkJCS8qIFRPRE86IHJlZmFjdG9yIGhlcmUgKi8KKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAorCQkJCQkgICJbQlRDb2V4XSwgVHhQYXVzZSA9IDFcbiIpOworCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDMpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA3KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA4OworCQkJCX0KKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gOSkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE1KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTUpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMikgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE2KTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE2OworCQkJCX0KKwkJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA1KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDcpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOCk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gODsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMykgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTQpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE2KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNjsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgNyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gNzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDcpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDc7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA3KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA3OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE2KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE1KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxNTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNSk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTU7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTQpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTUpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDE1OworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCisJCQkJCSAgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJCSAgIltCVENvZXhdLCBUeFBhdXNlID0gMFxuIik7CisJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDUpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJICAgdHJ1ZSwgMyk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gNikgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkgICB0cnVlLCAzKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA3KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCSAgIHRydWUsIDMpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDgpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJICAgdHJ1ZSwgNCk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA0OworCQkJCX0KKwkJCQlpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTMpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJICAgdHJ1ZSwgMTEpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTE7CisJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxNCkgeworCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkgICB0cnVlLCAxMSk7CisJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDE1KSB7CisJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCSAgIHRydWUsIDExKTsKKwkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTYpIHsKKwkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCQkJICAgdHJ1ZSwgMTIpOworCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJfQorCQkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQkJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCSAgIE5PUk1BTF9FWEVDLAorCQkJCQkJCSAgIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMikgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsCisJCQkJCQkJICAgTk9STUFMX0VYRUMsCisJCQkJCQkJICAgdHJ1ZSwgMyk7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMzsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAzKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkgICBOT1JNQUxfRVhFQywKKwkJCQkJCQkgICB0cnVlLCA0KTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSA0OworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDkpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDExKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAxMTsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMik7CisJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0gMTI7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDMpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDM7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMykgeworCQkJCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDIpIHsKKwkJCQkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LAorCQkJCQkJCSAgIE5PUk1BTF9FWEVDLCB0cnVlLCAzKTsKKwkJCQkJCWNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUgPSAzOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEyKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkJICAgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkgICBOT1JNQUxfRVhFQywgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEwKSB7CisJCQkJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwKKwkJCQkJCQkgICBOT1JNQUxfRVhFQywgdHJ1ZSwgMTEpOworCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9IDExOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogIGlmIGN1cnJlbnQgUHNUZG1hIG5vdCBtYXRjaCB3aXRoIHRoZSByZWNvcmRlZCBvbmUKKwkgKiAod2hlbiBzY2FuLCBkaGNwLi4uKSwKKwkgKiAgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCBpdCBiYWNrIHRvIHRoZSBwcmV2aW91cyByZWNvcmQgb25lLiAqLworCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSAhPSBjb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlKSB7CisJCWJvb2wgc2NhbiA9IGZhbHNlLCBsaW5rID0gZmFsc2UsIHJvYW0gPSBmYWxzZTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0RFVEFJTCwKKwkJCSAgIltCVENvZXhdLCBQc1RkbWEgdHlwZSBkaXNtYXRjaCEhISwgY3VyX3BzX3RkbWEgPSVkLCByZWNvcmRQc1RkbWEgPSVkXG4iLAorCQkJICBjb2V4X2RtLT5jdXJfcHNfdGRtYSwgY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSk7CisKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1NDQU4sICZzY2FuKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX1JPQU0sICZyb2FtKTsKKworCQlpZiAoIXNjYW4gJiYgIWxpbmsgJiYgIXJvYW0pCisJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsCisJCQkJICAgY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSk7CisJCWVsc2UKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GV19ERVRBSUwsCisJCQkJICAiW0JUQ29leF0sIHJvYW1pbmcvbGluay9zY2FuIGlzIHVuZGVyIHByb2dyZXNzLCB3aWxsIGFkanVzdCBuZXh0IHRpbWUhISFcbiIpOworCX0KKworCS8qIHdoZW4gdGRtYV9kdXJhdGlvbl9hZGp1c3QoKSBpcyBjYWxsZWQsIGZ3IGRhYyBzd2luZyBpcworCSAqIGluY2x1ZGVkIGluIHRoZSBmdW5jdGlvbi4gKi8KKwloYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAweDYpOworfQorCisvKiAgU0NPIG9ubHkgb3IgU0NPK1BBTihIUykgKi8KK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fc2NvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKKwl1MzIgd2lmaV9idzsKKworCXdpZmlfcnNzaV9zdGF0ZSA9IHdpZmkyMWFfcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidF9yc3NpX3N0YXRlID0gaGFsYnRjODgyMWEyYW50X2J0X3Jzc2lfc3RhdGUoMiwgMzUsIDApOworCisJaGFsYnRjODgyMWEyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNCk7CisKKwlpZiAoaGFsYnRjODgyMWEyYW50X25lZWRfdG9fZGVjX2J0X3B3cihidGNvZXhpc3QpKQorCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlKTsKKwllbHNlCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCisJaWYgKEJUQ19XSUZJX0JXX0xFR0FDWSA9PSB3aWZpX2J3KSAvKiBmb3IgU0NPIHF1YWxpdHkgYXQgMTFiL2cgbW9kZSAqLworCQloYWxidGM4ODIxYTJhbnRfY29leF90YWJsZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAweDVhNWE1YTVhLAorCQkJCQkgICAweDVhNWE1YTVhLCAweGZmZmYsIDB4Myk7CisJZWxzZSAgLyogZm9yIFNDTyBxdWFsaXR5ICYgd2lmaSBwZXJmb3JtYW5jZSBiYWxhbmNlIGF0IDExbiBtb2RlICovCisJCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NWFlYTVhZWEsCisJCQkJCSAgIDB4NWFlYTVhZWEsIDB4ZmZmZiwgMHgzKTsKKworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJLyogIGZ3IG1lY2hhbmlzbSAqLworCQkvKiBwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDUpOyAqLworCisJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkgICBmYWxzZSwgMCk7IC8qIGZvciB2b2ljZSBxdWFsICovCisJCWVsc2UKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkgICBmYWxzZSwgMCk7IC8qIGZvciB2b2ljZSBxdWFsICovCisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiAgZncgbWVjaGFuaXNtICovCisKKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCSAgIGZhbHNlLCAwKTsgLyogZm9yIHZvaWNlIHF1YWwgKi8KKwkJZWxzZQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLAorCQkJCSAgIGZhbHNlLCAwKTsgLyogZm9yIHZvaWNlIHF1YWwgKi8KKworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfYWN0aW9uX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGU7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpX3Jzc2lfc3RhdGUgPSB3aWZpMjFhX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg4MjFhMmFudF9idF9yc3NpX3N0YXRlKDIsIDM1LCAwKTsKKworCWhhbGJ0Yzg4MjFhMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaWYgKGhhbGJ0Yzg4MjFhMmFudF9uZWVkX3RvX2RlY19idF9wd3IoYnRjb2V4aXN0KSkKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSk7CisJZWxzZQorCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWlmIChCVENfV0lGSV9CV19MRUdBQ1kgPT0gd2lmaV9idykgLyogZm9yIEhJRCBhdCAxMWIvZyBtb2RlICovCisJCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NTVmZjU1ZmYsCisJCQkJCSAgIDB4NWE1YTVhNWEsIDB4ZmZmZiwgMHgzKTsKKwllbHNlICAvKiBmb3IgSElEIHF1YWxpdHkgJiB3aWZpIHBlcmZvcm1hbmNlIGJhbGFuY2UgYXQgMTFuIG1vZGUgKi8KKwkJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1YWVhNWFlYSwgMHhmZmZmLCAweDMpOworCisJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQkvKiAgZncgbWVjaGFuaXNtICovCisJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgOSk7CisJCWVsc2UKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTMpOworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA5KTsKKwkJZWxzZQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMyk7CisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworLyogQTJEUCBvbmx5IC8gUEFOKEVEUikgb25seS8gQTJEUCtQQU4oSFMpICovCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfYWN0aW9uX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOworCXUzMiB3aWZpX2J3OworCisJd2lmaV9yc3NpX3N0YXRlID0gd2lmaTIxYV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4ODIxYTJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAzNSwgMCk7CisKKwkvKiBmdyBkYWMgc3dpbmcgaXMgY2FsbGVkIGluIHRkbWFfZHVyYXRpb25fYWRqdXN0KCkgKi8KKwkvKiBoYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsgKi8KKworCWlmIChoYWxidGM4ODIxYTJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIDEpOworCQllbHNlCisJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCAxKTsKKworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJLyogIGZ3IG1lY2hhbmlzbSAqLworCQlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpCisJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgMSk7CisJCWVsc2UKKwkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDEpOworCisJCS8qICBzdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X2FjdGlvbl9hMmRwX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGUsIGJ0X2luZm9fZXh0OworCXUzMiB3aWZpX2J3OworCisJYnRfaW5mb19leHQgPSBjb2V4X3N0YS0+YnRfaW5mb19leHQ7CisJd2lmaV9yc3NpX3N0YXRlID0gd2lmaTIxYV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4ODIxYTJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAzNSwgMCk7CisKKwkvKiBmdyBkYWMgc3dpbmcgaXMgY2FsbGVkIGluIHRkbWFfZHVyYXRpb25fYWRqdXN0KCkgKi8KKwkvKiBoYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsgKi8KKworCWlmIChoYWxidGM4ODIxYTJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKQkvKiBhMmRwIGJhc2ljIHJhdGUgKi8KKwkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDIpOworCQllbHNlCQkJCS8qIGEyZHAgZWRyIHJhdGUgKi8KKwkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDEpOworCisJCS8qICBzdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiAgZncgbWVjaGFuaXNtICovCisJCWlmIChidF9pbmZvX2V4dCAmIEJJVCgwKSkJLyogYTJkcCBiYXNpYyByYXRlICovCisJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCAyKTsKKwkJZWxzZQkJCQkvKiBhMmRwIGVkciByYXRlICovCisJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCAxKTsKKworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fcGFuX2VkcihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGU7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpX3Jzc2lfc3RhdGUgPSB3aWZpMjFhX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg4MjFhMmFudF9idF9yc3NpX3N0YXRlKDIsIDM1LCAwKTsKKworCWhhbGJ0Yzg4MjFhMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJaWYgKGhhbGJ0Yzg4MjFhMmFudF9uZWVkX3RvX2RlY19idF9wd3IoYnRjb2V4aXN0KSkKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSk7CisJZWxzZQorCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKworCWlmIChCVENfV0lGSV9CV19MRUdBQ1kgPT0gd2lmaV9idykgLyogZm9yIEhJRCBhdCAxMWIvZyBtb2RlICovCisJCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NTVmZjU1ZmYsCisJCQkJCSAgIDB4NWFmZjVhZmYsIDB4ZmZmZiwgMHgzKTsKKwllbHNlICAvKiBmb3IgSElEIHF1YWxpdHkgJiB3aWZpIHBlcmZvcm1hbmNlIGJhbGFuY2UgYXQgMTFuIG1vZGUgKi8KKwkJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1YWZmNWFmZiwgMHhmZmZmLCAweDMpOworCisJCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxKTsKKwkJZWxzZQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCA1KTsKKworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJLyogIGZ3IG1lY2hhbmlzbSAqLworCQlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpCisJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDEpOworCQllbHNlCisJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDUpOworCisJCS8qICBzdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworLyogUEFOKEhTKSBvbmx5ICovCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfYWN0aW9uX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGU7CisJdTMyIHdpZmlfYnc7CisKKwl3aWZpX3Jzc2lfc3RhdGUgPSB3aWZpMjFhX3Jzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CisJYnRfcnNzaV9zdGF0ZSA9IGhhbGJ0Yzg4MjFhMmFudF9idF9yc3NpX3N0YXRlKDIsIDM1LCAwKTsKKworCWhhbGJ0Yzg4MjFhMmFudF9md19kYWNfc3dpbmdfbHZsKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkgICB0cnVlKTsKKwkJZWxzZQorCQkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCSAgIGZhbHNlKTsKKwkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkKKwkJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsCisJCQkJCQkgICB0cnVlKTsKKwkJZWxzZQorCQkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKKwkJCQkJCSAgIGZhbHNlKTsKKworCQlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpCisJCQlwczIxYV90ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCAxKTsKKwkJZWxzZQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSwgMSk7CisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9CisJfQorfQorCisvKiBQQU4oRURSKStBMkRQICovCitzdGF0aWMgdm9pZCBoYWxidGM4ODIxYTJhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGUsIGJ0X2luZm9fZXh0OworCXUzMiB3aWZpX2J3OworCisJYnRfaW5mb19leHQgPSBjb2V4X3N0YS0+YnRfaW5mb19leHQ7CisJd2lmaV9yc3NpX3N0YXRlID0gd2lmaTIxYV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4ODIxYTJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAzNSwgMCk7CisKKwloYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKworCWlmIChoYWxidGM4ODIxYTJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpIC8qIGZvciBISUQgYXQgMTFiL2cgbW9kZSAqLworCQloYWxidGM4ODIxYTJhbnRfY29leF90YWJsZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAweDU1ZmY1NWZmLAorCQkJCQkgICAweDVhZmE1YWZhLCAweGZmZmYsIDB4Myk7CisJZWxzZSAgLyogZm9yIEhJRCBxdWFsaXR5ICYgd2lmaSBwZXJmb3JtYW5jZSBiYWxhbmNlIGF0IDExbiBtb2RlICovCisJCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NTVmZjU1ZmYsCisJCQkJCSAgIDB4NWFmYTVhZmEsIDB4ZmZmZiwgMHgzKTsKKworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJLyogIGZ3IG1lY2hhbmlzbSAqLworCQlpZiAoKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgIChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCWlmIChidF9pbmZvX2V4dCAmIEJJVCgwKSkJLyogYTJkcCBiYXNpYyByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwKKwkJCQkJCSAgICAgZmFsc2UsIDMpOworCQkJZWxzZQkJCQkvKiBhMmRwIGVkciByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwKKwkJCQkJCSAgICAgZmFsc2UsIDMpOworCQl9IGVsc2UgeworCQkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKQkvKiBhMmRwIGJhc2ljIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCAzKTsKKwkJCWVsc2UJCQkJLyogYTJkcCBlZHIgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDMpOworCQl9CisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfTsKKwl9IGVsc2UgeworCQkvKiAgZncgbWVjaGFuaXNtICovCisJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKQkvKiBhMmRwIGJhc2ljIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLAorCQkJCQkJICAgICBmYWxzZSwgMyk7CisJCQllbHNlCQkJCS8qIGEyZHAgZWRyIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIGZhbHNlLAorCQkJCQkJICAgICBmYWxzZSwgMyk7CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfaW5mb19leHQgJiBCSVQoMCkpCS8qIGEyZHAgYmFzaWMgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIDMpOworCQkJZWxzZQkJCQkvKiBhMmRwIGVkciByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwgMyk7CisJCX0KKworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOworCXUzMiB3aWZpX2J3OworCisJd2lmaV9yc3NpX3N0YXRlID0gd2lmaTIxYV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4ODIxYTJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAzNSwgMCk7CisKKwloYWxidGM4ODIxYTJhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKKworCWlmIChoYWxidGM4ODIxYTJhbnRfbmVlZF90b19kZWNfYnRfcHdyKGJ0Y29leGlzdCkpCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUpOworCWVsc2UKKwkJaGFsYnRjODgyMWEyYW50X2RlY19idF9wd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0JXLCAmd2lmaV9idyk7CisKKwlpZiAoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpIC8qIGZvciBISUQgYXQgMTFiL2cgbW9kZSAqLworCQloYWxidGM4ODIxYTJhbnRfY29leF90YWJsZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAweDU1ZmY1NWZmLAorCQkJCQkgICAweDVhNWY1YTVmLCAweGZmZmYsIDB4Myk7CisJZWxzZSAgLyogZm9yIEhJRCBxdWFsaXR5ICYgd2lmaSBwZXJmb3JtYW5jZSBiYWxhbmNlIGF0IDExbiBtb2RlICovCisJCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NTVmZjU1ZmYsCisJCQkJCSAgIDB4NWE1ZjVhNWYsIDB4ZmZmZiwgMHgzKTsKKworCWlmIChCVENfV0lGSV9CV19IVDQwID09IHdpZmlfYncpIHsKKwkJaGFsYnRjODgyMWEyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMyk7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CisJCWVsc2UKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCisJCS8qICBzdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9CisJfSBlbHNlIHsKKwkJaGFsYnRjODgyMWEyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKQorCQkJcHMyMWFfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CisJCWVsc2UKKwkJCXBzMjFhX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTQpOworCisJCS8qICBzdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKKy8qICBISUQrQTJEUCtQQU4oRURSKSAqLworc3RhdGljIHZvaWQgYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlLCBidF9pbmZvX2V4dDsKKwl1MzIgd2lmaV9idzsKKworCWJ0X2luZm9fZXh0ID0gY29leF9zdGEtPmJ0X2luZm9fZXh0OworCXdpZmlfcnNzaV9zdGF0ZSA9IHdpZmkyMWFfcnNzaV9zdGF0ZShidGNvZXhpc3QsIDAsIDIsIDE1LCAwKTsKKwlidF9yc3NpX3N0YXRlID0gaGFsYnRjODgyMWEyYW50X2J0X3Jzc2lfc3RhdGUoMiwgMzUsIDApOworCisJaGFsYnRjODgyMWEyYW50X2Z3X2RhY19zd2luZ19sdmwoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgNik7CisKKwlpZiAoaGFsYnRjODgyMWEyYW50X25lZWRfdG9fZGVjX2J0X3B3cihidGNvZXhpc3QpKQorCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlKTsKKwllbHNlCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCisJaWYgKEJUQ19XSUZJX0JXX0xFR0FDWSA9PSB3aWZpX2J3KSAvKiBmb3IgSElEIGF0IDExYi9nIG1vZGUgKi8KKwkJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1YTVhNWE1YSwgMHhmZmZmLCAweDMpOworCWVsc2UgIC8qIGZvciBISUQgcXVhbGl0eSAmIHdpZmkgcGVyZm9ybWFuY2UgYmFsYW5jZSBhdCAxMW4gbW9kZSAqLworCQloYWxidGM4ODIxYTJhbnRfY29leF90YWJsZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAweDU1ZmY1NWZmLAorCQkJCQkgICAweDVhNWE1YTVhLCAweGZmZmYsIDB4Myk7CisKKwlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlpZiAoYnRfaW5mb19leHQgJiBCSVQoMCkpIHsJLyogYTJkcCBiYXNpYyByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAzKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogYTJkcCBlZHIgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgMyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnRfaW5mb19leHQgJiBCSVQoMCkpCS8qIGEyZHAgYmFzaWMgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgMyk7CisJCQllbHNlCQkJCS8qIGEyZHAgZWRyIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDMpOworCQl9CisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOworCQl9IGVsc2UgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiAgZncgbWVjaGFuaXNtICovCisJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKQkvKiBhMmRwIGJhc2ljIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIGZhbHNlLCAzKTsKKwkJCWVsc2UJCQkJLyogYTJkcCBlZHIgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIDMpOworCQl9IGVsc2UgeworCQkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKSB7CisJCQkJLyogYTJkcCBiYXNpYyByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAzKTsKKwkJCX0gZWxzZQkJCQkvKiBhMmRwIGVkciByYXRlICovIHsKKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDMpOworCQkJfQorCQl9CisKKwkJLyogIHN3IG1lY2hhbmlzbSAqLworCQlpZiAoKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKHdpZmlfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfSBlbHNlIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFsYnRjODgyMWEyYW50X2FjdGlvbl9oaWRfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGUsIGJ0X2luZm9fZXh0OworCXUzMiB3aWZpX2J3OworCisJYnRfaW5mb19leHQgPSBjb2V4X3N0YS0+YnRfaW5mb19leHQ7CisJd2lmaV9yc3NpX3N0YXRlID0gd2lmaTIxYV9yc3NpX3N0YXRlKGJ0Y29leGlzdCwgMCwgMiwgMTUsIDApOworCWJ0X3Jzc2lfc3RhdGUgPSBoYWxidGM4ODIxYTJhbnRfYnRfcnNzaV9zdGF0ZSgyLCAzNSwgMCk7CisKKwlpZiAoaGFsYnRjODgyMWEyYW50X25lZWRfdG9fZGVjX2J0X3B3cihidGNvZXhpc3QpKQorCQloYWxidGM4ODIxYTJhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlKTsKKwllbHNlCisJCWhhbGJ0Yzg4MjFhMmFudF9kZWNfYnRfcHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCisJaWYgKEJUQ19XSUZJX0JXX0xFR0FDWSA9PSB3aWZpX2J3KSAvKiBmb3IgSElEIGF0IDExYi9nIG1vZGUgKi8KKwkJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMHg1NWZmNTVmZiwKKwkJCQkJICAgMHg1ZjViNWY1YiwgMHhmZmZmZmYsIDB4Myk7CisJZWxzZSAgLyogZm9yIEhJRCBxdWFsaXR5ICYgd2lmaSBwZXJmb3JtYW5jZSBiYWxhbmNlIGF0IDExbiBtb2RlICovCisJCWhhbGJ0Yzg4MjFhMmFudF9jb2V4X3RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDB4NTVmZjU1ZmYsCisJCQkJCSAgIDB4NWY1YjVmNWIsIDB4ZmZmZmZmLCAweDMpOworCisJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgeworCQkvKiAgZncgbWVjaGFuaXNtICovCisJCWlmICgoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9ISUdIKSB8fAorCQkgICAgKGJ0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKQkvKiBhMmRwIGJhc2ljIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDIpOworCQkJZWxzZQkJCQkvKiBhMmRwIGVkciByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAyKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChidF9pbmZvX2V4dCAmIEJJVCgwKSkJLyogYTJkcCBiYXNpYyByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAyKTsKKwkJCWVsc2UJCQkJLyogYTJkcCBlZHIgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgMik7CisJCX0KKworCQkvKiAgc3cgbWVjaGFuaXNtICovCisJCWlmICgod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAod2lmaV9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfSElHSCkpIHsKKwkJCXN3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKwkJCXN3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qICBmdyBtZWNoYW5pc20gKi8KKwkJaWYgKChidF9yc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CisJCSAgICAoYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpKSB7CisJCQlpZiAoYnRfaW5mb19leHQgJiBCSVQoMCkpCS8qIGEyZHAgYmFzaWMgcmF0ZSAqLworCQkJCXRkbWFfZHVyYXRpb25fYWRqdXN0KGJ0Y29leGlzdCwgdHJ1ZSwgdHJ1ZSwgMik7CisJCQllbHNlCQkJCS8qIGEyZHAgZWRyIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDIpOworCQl9IGVsc2UgeworCQkJaWYgKGJ0X2luZm9fZXh0ICYgQklUKDApKQkvKiBhMmRwIGJhc2ljIHJhdGUgKi8KKwkJCQl0ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDIpOworCQkJZWxzZQkJCQkvKiBhMmRwIGVkciByYXRlICovCisJCQkJdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCB0cnVlLCAyKTsKKwkJfQorCisJCS8qICBzdyBtZWNoYW5pc20gKi8KKwkJaWYgKCh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfSElHSCkgfHwKKwkJICAgICh3aWZpX3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgeworCQkJc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQkJc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIHRydWUsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0gZWxzZSB7CisJCQlzd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCQlzd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg4MjFhMmFudF9ydW5fY29leGlzdF9tZWNoYW5pc20oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJYm9vbCB3aWZpX3VuZGVyXzVnID0gZmFsc2U7CisJdTggYWxnb3JpdGhtID0gMDsKKworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBNYW51YWwgY29udHJvbCEhIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfVU5ERVJfNUcsICZ3aWZpX3VuZGVyXzVnKTsKKworCWlmICh3aWZpX3VuZGVyXzVnKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCSAgIltCVENvZXhdLCBSdW5Db2V4aXN0TWVjaGFuaXNtKCksIHJ1biA1RyBjb2V4IHNldHRpbmchITw9PT1cbiIpOworCQloYWxidGM4ODIxYTJhbnRfY29leF91bmRlcl81ZyhidGNvZXhpc3QpOworCQlyZXR1cm47CisJfQorCisJYWxnb3JpdGhtID0gaGFsYnRjODgyMWEyYW50X2FjdGlvbl9hbGdvcml0aG0oYnRjb2V4aXN0KTsKKwlpZiAoY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UgJiYKKwkgICAgKEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1BBTkhTICE9IGFsZ29yaXRobSkpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJICAiW0JUQ29leF0sIEJUIGlzIHVuZGVyIGlucXVpcnkvcGFnZSBzY2FuICEhXG4iKTsKKwkJaGFsYnRjODgyMWEyYW50X2J0X2lucXVpcnlfcGFnZShidGNvZXhpc3QpOworCQlyZXR1cm47CisJfQorCisJY29leF9kbS0+Y3VyX2FsZ29yaXRobSA9IGFsZ29yaXRobTsKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCBBbGdvcml0aG0gPSAlZFxuIiwgY29leF9kbS0+Y3VyX2FsZ29yaXRobSk7CisKKwlpZiAoaGFsYnRjODgyMWEyYW50X2lzX2NvbW1vbl9hY3Rpb24oYnRjb2V4aXN0KSkgeworCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50IGNvbW1vbi5cbiIpOworCQljb2V4X2RtLT5yZXNldF90ZG1hX2FkanVzdCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKGNvZXhfZG0tPmN1cl9hbGdvcml0aG0gIT0gY29leF9kbS0+cHJlX2FsZ29yaXRobSkgeworCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBwcmVfYWxnb3JpdGhtID0lZCwgY3VyX2FsZ29yaXRobSA9JWRcbiIsCisJCQkJICBjb2V4X2RtLT5wcmVfYWxnb3JpdGhtLAorCQkJCSAgY29leF9kbS0+Y3VyX2FsZ29yaXRobSk7CisJCQljb2V4X2RtLT5yZXNldF90ZG1hX2FkanVzdCA9IHRydWU7CisJCX0KKwkJc3dpdGNoIChjb2V4X2RtLT5jdXJfYWxnb3JpdGhtKSB7CisJCWNhc2UgQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fU0NPOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFNDTy5cbiIpOworCQkJaGFsYnRjODgyMWEyYW50X2FjdGlvbl9zY28oYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0hJRDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBISUQuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25faGlkKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IEEyRFAuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fYTJkcChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fQTJEUF9QQU5IUzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBBMkRQK1BBTihIUykuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fYTJkcF9wYW5faHMoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX1BBTkVEUjoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBQQU4oRURSKS5cbiIpOworCQkJaGFsYnRjODgyMWEyYW50X2FjdGlvbl9wYW5fZWRyKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5IUzoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBIUyBtb2RlLlxuIik7CisJCQloYWxidGM4ODIxYTJhbnRfYWN0aW9uX3Bhbl9ocyhidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSX0EyRFA6CisJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCQkJICAiW0JUQ29leF0sIEFjdGlvbiAyLUFudCwgYWxnb3JpdGhtID0gUEFOK0EyRFAuXG4iKTsKKwkJCWhhbGJ0Yzg4MjFhMmFudF9hY3Rpb25fcGFuX2Vkcl9hMmRwKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfSElEOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IFBBTihFRFIpK0hJRC5cbiIpOworCQkJaGFsYnRjODgyMWEyYW50X2FjdGlvbl9wYW5fZWRyX2hpZChidGNvZXhpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IEhJRCtBMkRQK1BBTi5cbiIpOworCQkJYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoYnRjb2V4aXN0KTsKKwkJCWJyZWFrOworCQljYXNlIEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0hJRF9BMkRQOgorCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAorCQkJCSAgIltCVENvZXhdLCBBY3Rpb24gMi1BbnQsIGFsZ29yaXRobSA9IEhJRCtBMkRQLlxuIik7CisJCQloYWxidGM4ODIxYTJhbnRfYWN0aW9uX2hpZF9hMmRwKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKKwkJCQkgICJbQlRDb2V4XSwgQWN0aW9uIDItQW50LCBhbGdvcml0aG0gPSBjb2V4aXN0IEFsbCBPZmYhIVxuIik7CisJCQloYWxidGM4ODIxYTJhbnRfY29leF9hbGxfb2ZmKGJ0Y29leGlzdCk7CisJCQlicmVhazsKKwkJfQorCQljb2V4X2RtLT5wcmVfYWxnb3JpdGhtID0gY29leF9kbS0+Y3VyX2FsZ29yaXRobTsKKwl9Cit9CisKKy8qICB3b3JrIGFyb3VuZCBmdW5jdGlvbiBzdGFydCB3aXRoIHdhX2hhbGJ0Yzg4MjFhMmFudF8gKi8KKy8qICBleHRlcm4gZnVuY3Rpb24gc3RhcnQgd2l0aCBFWGhhbGJ0Yzg4MjFhMmFudF8gKi8KK3ZvaWQgZXhfaGFsYnRjODgyMWEyYW50X2luaXRfaHdjb25maWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJdTggdTF0bXAgPSAwOworCisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCSAgIltCVENvZXhdLCAyQW50IEluaXQgSFcgQ29uZmlnISFcbiIpOworCisJLyogIGJhY2t1cCByZiAweDFlIHZhbHVlICovCisJY29leF9kbS0+YnRfcmYweDFlX2JhY2t1cCA9CisJCWJ0Y29leGlzdC0+YnRjX2dldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgxZSwgMHhmZmZmZik7CisKKwkvKiAgMHg3OTBbNTowXSA9IDB4NSAqLworCXUxdG1wID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NzkwKTsKKwl1MXRtcCAmPSAweGMwOworCXUxdG1wIHw9IDB4NTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NzkwLCB1MXRtcCk7CisKKwkvKiBBbnRlbm5hIGNvbmZpZyAqLworCWhhbGJ0Yzg4MjFhMmFudF9zZXRfYW50X3BhdGgoYnRjb2V4aXN0LCBCVENfQU5UX1dJRklfQVRfTUFJTiwKKwkJCQkgICAgIHRydWUsIGZhbHNlKTsKKworCS8qICBQVEEgcGFyYW1ldGVyICovCisJaGFsYnRjODgyMWEyYW50X2NvZXhfdGFibGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLAorCQkJCSAgIDB4NTU1NTU1NTUsIDB4NTU1NTU1NTUsCisJCQkJICAgMHhmZmZmLCAweDMpOworCisJLyogIEVuYWJsZSBjb3VudGVyIHN0YXRpc3RpY3MgKi8KKwkvKiAweDc2ZVszXSA9IDEsIFdMQU5fQWN0IGNvbnRyb2wgYnkgUFRBICovCisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHhjKTsKKwlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4Nzc4LCAweDMpOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDQwLCAweDIwLCAweDEpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCSAgIltCVENvZXhdLCBDb2V4IE1lY2hhbmlzbSBJbml0ISFcbiIpOworCisJaGFsYnRjODgyMWEyYW50X2luaXRfY29leF9kbShidGNvZXhpc3QpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMmFudF9kaXNwbGF5X2NvZXhfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgYnRjX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmYnRjb2V4aXN0LT5ib2FyZF9pbmZvOworCXN0cnVjdCBidGNfc3RhY2tfaW5mbyAqc3RhY2tfaW5mbyA9ICZidGNvZXhpc3QtPnN0YWNrX2luZm87CisJdTggKmNsaV9idWYgPSBidGNvZXhpc3QtPmNsaV9idWY7CisJdTggdTF0bXBbNF0sIGksIGJ0X2luZm9fZXh0LCBwc190ZG1hX2Nhc2UgPSAwOworCXUzMiB1NHRtcFs0XTsKKwlib29sIHJvYW0gPSBmYWxzZSwgc2NhbiA9IGZhbHNlLCBsaW5rID0gZmFsc2UsIHdpZmlfdW5kZXJfNWcgPSBmYWxzZTsKKwlib29sIGJ0X2hzX29uID0gZmFsc2UsIHdpZmlfYnVzeSA9IGZhbHNlOworCWxvbmcgd2lmaV9yc3NpID0gMCwgYnRfaHNfcnNzaSA9IDA7CisJdTMyIHdpZmlfYncsIHdpZmlfdHJhZmZpY19kaXI7CisJdTggd2lmaV9kb3RfMTFfY2hubCwgd2lmaV9oc19jaG5sOworCXUzMiBmd192ZXIgPSAwLCBidF9wYXRjaF92ZXIgPSAwOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcbiA9PT09PT09PT09PT1bQlQgQ29leGlzdCBpbmZvXSA9PT09PT09PT09PT0iKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlpZiAoIWJvYXJkX2luZm8tPmJ0X2V4aXN0KSB7CisJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gQlQgbm90IGV4aXN0cyAhISEiKTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCQlyZXR1cm47CisJfQorCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9ICVkLyAlZCAiLAorCQkgICAiQW50IFBHIG51bWJlci8gQW50IG1lY2hhbmlzbTogIiwKKwkJICAgYm9hcmRfaW5mby0+cGdfYW50X251bSwgYm9hcmRfaW5mby0+YnRkbV9hbnRfbnVtKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkgeworCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzIiwKKwkJCSAgICJbQWN0aW9uIE1hbnVhbCBjb250cm9sXSEhIik7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwl9CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJXMgLyAlZCIsCisJCSAgICJCVCBzdGFjay8gaGNpIGV4dCB2ZXIiLAorCQkgICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJICAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfQlRfUEFUQ0hfVkVSLCAmYnRfcGF0Y2hfdmVyKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfRldfVkVSLCAmZndfdmVyKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWRfJWQvIDB4JXgvIDB4JXgoJWQpIiwKKwkJICAgIkNvZXhWZXIvIEZ3VmVyLyBQYXRjaFZlciIsCisJCSAgIGdsY29leF92ZXJfZGF0ZV84ODIxYV8yYW50LCBnbGNvZXhfdmVyXzg4MjFhXzJhbnQsCisJCSAgIGZ3X3ZlciwgYnRfcGF0Y2hfdmVyLCBidF9wYXRjaF92ZXIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNfb24pOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9ET1QxMV9DSE5MLAorCQkJICAgJndpZmlfZG90XzExX2NobmwpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9IU19DSE5MLCAmd2lmaV9oc19jaG5sKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWQgLyAlZCglZCkiLAorCQkgICAiRG90MTEgY2hhbm5lbCAvIEhzTW9kZShIc0NobmwpIiwKKwkJICAgd2lmaV9kb3RfMTFfY2hubCwgYnRfaHNfb24sIHdpZmlfaHNfY2hubCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICIsICJIMkMgV2lmaSBpbmZvcm0gYnQgY2hubCBJbmZvIiwKKwkJICAgY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMF0sIGNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzFdLAorCQkgICBjb2V4X2RtLT53aWZpX2NobmxfaW5mb1syXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9TNF9XSUZJX1JTU0ksICZ3aWZpX3Jzc2kpOworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfUzRfSFNfUlNTSSwgJmJ0X2hzX3Jzc2kpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkgICAiXG4gJS0zNXMgPSAlbGQvICVsZCIsICJXaWZpIHJzc2kvIEhTIHJzc2kiLAorCQkgICB3aWZpX3Jzc2ksIGJ0X2hzX3Jzc2kpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9TQ0FOLCAmc2Nhbik7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0xJTkssICZsaW5rKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfUk9BTSwgJnJvYW0pOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZC8gJWQvICVkICIsCisJCSAgICJXaWZpIGxpbmsvIHJvYW0vIHNjYW4iLAorCQkgICBsaW5rLCByb2FtLCBzY2FuKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfVU5ERVJfNUcsICZ3aWZpX3VuZGVyXzVnKTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X1dJRklfQlcsICZ3aWZpX2J3KTsKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQlVTWSwgJndpZmlfYnVzeSk7CisJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX1RSQUZGSUNfRElSRUNUSU9OLAorCQkJICAgJndpZmlfdHJhZmZpY19kaXIpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlcyAvICVzLyAlcyAiLAorCQkgICAiV2lmaSBzdGF0dXMiLAorCQkgICAod2lmaV91bmRlcl81ZyA/ICI1RyIgOiAiMi40RyIpLAorCQkgICAoKEJUQ19XSUZJX0JXX0xFR0FDWSA9PSB3aWZpX2J3KSA/ICJMZWdhY3kiIDoKKwkJICAgICgoKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgPyAiSFQ0MCIgOiAiSFQyMCIpKSksCisJCSAgICgoIXdpZmlfYnVzeSkgPyAiaWRsZSIgOgorCQkgICAgKChCVENfV0lGSV9UUkFGRklDX1RYID09IHdpZmlfdHJhZmZpY19kaXIpID8gInVwbGluayIgOgorCQkgICAgImRvd25saW5rIikpKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gWyVzLyAlZC8gJWRdICIsCisJCSAgICJCVCBbc3RhdHVzLyByc3NpLyByZXRyeUNudF0iLAorCQkgICAoKGNvZXhfc3RhLT5jMmhfYnRfaW5xdWlyeV9wYWdlKSA/ICgiaW5xdWlyeS9wYWdlIHNjYW4iKSA6CisJCSAgICgoQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpID8KKwkJICAgICJpZGxlIiA6ICgoQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfQ09OTkVDVEVEX0lETEUgPT0KKwkJICAgIGNvZXhfZG0tPmJ0X3N0YXR1cykgPyAiY29ubmVjdGVkLWlkbGUiIDogImJ1c3kiKSkpLAorCQljb2V4X3N0YS0+YnRfcnNzaSwgY29leF9zdGEtPmJ0X3JldHJ5X2NudCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJaWYgKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpIHsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gJS0zNXMgPSAlZCAvICVkIC8gJWQgLyAlZCIsICJTQ08vSElEL1BBTi9BMkRQIiwKKwkJCSAgIHN0YWNrX2luZm8tPnNjb19leGlzdCwgc3RhY2tfaW5mby0+aGlkX2V4aXN0LAorCQkJICAgc3RhY2tfaW5mby0+cGFuX2V4aXN0LCBzdGFja19pbmZvLT5hMmRwX2V4aXN0KTsKKwkJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJCWJ0Y29leGlzdC0+YnRjX2Rpc3BfZGJnX21zZyhidGNvZXhpc3QsCisJCQkJCSAgICBCVENfREJHX0RJU1BfQlRfTElOS19JTkZPKTsKKwl9CisKKwlidF9pbmZvX2V4dCA9IGNvZXhfc3RhLT5idF9pbmZvX2V4dDsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJXMiLAorCQkgICAiQlQgSW5mbyBBMkRQIHJhdGUiLAorCQkgICAoYnRfaW5mb19leHQgJiBCSVQoMCkpID8gIkJhc2ljIHJhdGUiIDogIkVEUiByYXRlIik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJZm9yIChpID0gMDsgaSA8IEJUX0lORk9fU1JDXzg4MjFBXzJBTlRfTUFYOyBpKyspIHsKKwkJaWYgKGNvZXhfc3RhLT5idF9pbmZvX2MyaF9jbnRbaV0pIHsKKwkJCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLAorCQkJCSAgICJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngoJWQpIiwKKwkJCQkgICBnbGJ0X2luZm9fc3JjXzg4MjFhXzJhbnRbaV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzBdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVsxXSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bMl0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzNdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaFtpXVs0XSwKKwkJCQkgICBjb2V4X3N0YS0+YnRfaW5mb19jMmhbaV1bNV0sCisJCQkJICAgY29leF9zdGEtPmJ0X2luZm9fYzJoW2ldWzZdLAorCQkJCSAgIGNvZXhfc3RhLT5idF9pbmZvX2MyaF9jbnRbaV0pOworCQkJQ0xfUFJJTlRGKGNsaV9idWYpOworCQl9CisJfQorCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9ICVzLyVzIiwKKwkJICAgIlBTIHN0YXRlLCBJUFMvTFBTIiwKKwkJICAgKChjb2V4X3N0YS0+dW5kZXJfaXBzID8gIklQUyBPTiIgOiAiSVBTIE9GRiIpKSwKKwkJICAgKChjb2V4X3N0YS0+dW5kZXJfbHBzID8gIkxQUyBPTiIgOiAiTFBTIE9GRiIpKSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCWJ0Y29leGlzdC0+YnRjX2Rpc3BfZGJnX21zZyhidGNvZXhpc3QsIEJUQ19EQkdfRElTUF9GV19QV1JfTU9ERV9DTUQpOworCisJLyogIFN3IG1lY2hhbmlzbQkgKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzIiwKKwkJICAgIj09PT09PT09PT09PVtTdyBtZWNoYW5pc21dID09PT09PT09PT09PSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWQvICVkLyAlZC8gJWQgIiwKKwkJICAgIlNNMVtTaFJmLyBMcFJBLyBMaW1EaWcvIGJ0TG5hXSIsCisJCSAgIGNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rLCBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEsCisJCSAgIGNvZXhfZG0tPmxpbWl0ZWRfZGlnLCBjb2V4X2RtLT5jdXJfYnRfbG5hX2NvbnN0cmFpbik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAlZC8gJWQvICVkKDB4JXgpICIsCisJCSAgICJTTTJbQWdjVC8gQWRjQi8gU3dEYWNTd2luZyhsdmwpXSIsCisJCSAgIGNvZXhfZG0tPmN1cl9hZ2NfdGFibGVfZW4sIGNvZXhfZG0tPmN1cl9hZGNfYmFja19vZmYsCisJCSAgIGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24sIGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkvKiAgRncgbWVjaGFuaXNtCQkgKi8KKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzIiwKKwkJICAgIj09PT09PT09PT09PVtGdyBtZWNoYW5pc21dID09PT09PT09PT09PSIpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCWlmICghYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkgeworCQlwc190ZG1hX2Nhc2UgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCQkgICAiXG4gJS0zNXMgPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggY2FzZS0lZCIsCisJCQkgICAiUFMgVERNQSIsCisJCQkgICBjb2V4X2RtLT5wc190ZG1hX3BhcmFbMF0sIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsxXSwKKwkJCSAgIGNvZXhfZG0tPnBzX3RkbWFfcGFyYVsyXSwgY29leF9kbS0+cHNfdGRtYV9wYXJhWzNdLAorCQkJICAgY29leF9kbS0+cHNfdGRtYV9wYXJhWzRdLCBwc190ZG1hX2Nhc2UpOworCQlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwkJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9ICVkLyAlZCAiLAorCQkJICAgIkRlY0J0UHdyLyBJZ25XbGFuQWN0IiwKKwkJCSAgIGNvZXhfZG0tPmN1cl9kZWNfYnRfcHdyLAorCQkJICAgY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdCk7CisJCUNMX1BSSU5URihjbGlfYnVmKTsKKwl9CisKKwkvKiAgSHcgc2V0dGluZwkJICovCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcbiAlLTM1cyIsICI9PT09PT09PT09PT1bSHcgc2V0dGluZ10gPT09PT09PT09PT09Iik7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgiLAorCQkgICAiUkYtQSwgMHgxZSBpbml0VmFsIiwKKwkJICAgY29leF9kbS0+YnRfcmYweDFlX2JhY2t1cCk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTF0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHg3NzgpOworCXUxdG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NmNjKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gMHgleC8gMHgleCAiLAorCQkgICAiMHg3NzggKFdfQWN0KS8gMHg2Y2MgKENvVGFiIFNlbCkiLAorCQkgICB1MXRtcFswXSwgdTF0bXBbMV0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXUxdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4OGRiKTsKKwl1MXRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweGM1Yik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLAorCQkgICAiMHg4ZGIoQURDKS8weGM1YlsyOToyNV0oREFDKSIsCisJCSAgICgodTF0bXBbMF0mMHg2MCk+PjUpLCAoKHUxdG1wWzFdJjB4M2UpPj4xKSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTR0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhjYjQpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4LyAweCV4IiwKKwkJICAgIjB4Y2I0Wzc6MF0oY3RybCkvIDB4Y2I0WzI5OjI4XSh2YWwpIiwKKwkJICAgdTR0bXBbMF0mMHhmZiwgKCh1NHRtcFswXSYweDMwMDAwMDAwKT4+MjgpKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1MXRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDQwKTsKKwl1NHRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDRjKTsKKwl1NHRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDk3NCk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgiLAorCQkgICAiMHg0MC8gMHg0Y1syNDoyM10vIDB4OTc0IiwKKwkJICAgdTF0bXBbMF0sICgodTR0bXBbMF0mMHgwMTgwMDAwMCk+PjIzKSwgdTR0bXBbMV0pOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCXU0dG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NTUwKTsKKwl1MXRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweDUyMik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLAorCQkgICAiMHg1NTAoYmNuIGN0cmwpLzB4NTIyIiwKKwkJICAgdTR0bXBbMF0sIHUxdG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwl1NHRtcFswXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweGM1MCk7CisJdTF0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzFieXRlKGJ0Y29leGlzdCwgMHhhMGEpOworCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXG4gJS0zNXMgPSAweCV4LyAweCV4IiwKKwkJICAgIjB4YzUwKERJRykvMHhhMGEoQ0NLLVRIKSIsCisJCSAgIHU0dG1wWzBdLCB1MXRtcFswXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTR0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHhmNDgpOworCXUxdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4YTViKTsKKwl1MXRtcFsxXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfMWJ5dGUoYnRjb2V4aXN0LCAweGE1Yyk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsCisJCSAgICJcbiAlLTM1cyA9IDB4JXgvIDB4JXgiLCAiT0ZETS1GQS8gQ0NLLUZBIiwKKwkJICAgdTR0bXBbMF0sICh1MXRtcFswXTw8OCkgKyB1MXRtcFsxXSk7CisJQ0xfUFJJTlRGKGNsaV9idWYpOworCisJdTR0bXBbMF0gPSBidGNvZXhpc3QtPmJ0Y19yZWFkXzRieXRlKGJ0Y29leGlzdCwgMHg2YzApOworCXU0dG1wWzFdID0gYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZShidGNvZXhpc3QsIDB4NmM0KTsKKwl1NHRtcFsyXSA9IGJ0Y29leGlzdC0+YnRjX3JlYWRfNGJ5dGUoYnRjb2V4aXN0LCAweDZjOCk7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgiLAorCQkgICAiMHg2YzAvMHg2YzQvMHg2YzgiLAorCQkgICB1NHRtcFswXSwgdTR0bXBbMV0sIHU0dG1wWzJdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gJWQvICVkIiwKKwkJICAgIjB4NzcwIChoaS1wcmkgUngvVHgpIiwKKwkJICAgY29leF9zdGEtPmhpZ2hfcHJpb3JpdHlfcngsIGNvZXhfc3RhLT5oaWdoX3ByaW9yaXR5X3R4KTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisJQ0xfU1BSSU5URihjbGlfYnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcbiAlLTM1cyA9ICVkLyAlZCIsCisJCSAgICIweDc3NChsb3ctcHJpIFJ4L1R4KSIsCisJCSAgIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfcngsIGNvZXhfc3RhLT5sb3dfcHJpb3JpdHlfdHgpOworCUNMX1BSSU5URihjbGlfYnVmKTsKKworCS8qICBUeCBtZ250IHF1ZXVlIGhhbmcgb3Igbm90LCAweDQxYiBzaG91bGQgPSAweGYsIGV4OiAweGQgPT0+aGFuZyAqLworCXUxdG1wWzBdID0gYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZShidGNvZXhpc3QsIDB4NDFiKTsKKwlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwgIlxuICUtMzVzID0gMHgleCIsCisJCSAgICIweDQxYiAobWdudFEgaGFuZyBjaGsgPT0gMHhmKSIsCisJCSAgIHUxdG1wWzBdKTsKKwlDTF9QUklOVEYoY2xpX2J1Zik7CisKKwlidGNvZXhpc3QtPmJ0Y19kaXNwX2RiZ19tc2coYnRjb2V4aXN0LCBCVENfREJHX0RJU1BfQ09FWF9TVEFUSVNUSUNTKTsKK30KKwordm9pZCBleF9oYWxidGM4ODIxYTJhbnRfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0lQU19FTlRFUiA9PSB0eXBlKSB7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgSVBTIEVOVEVSIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9pcHMgPSB0cnVlOworCQloYWxidGM4ODIxYTJhbnRfY29leF9hbGxfb2ZmKGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChCVENfSVBTX0xFQVZFID09IHR5cGUpIHsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBJUFMgTEVBVkUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2lwcyA9IGZhbHNlOworCX0KK30KKwordm9pZCBleF9oYWxidGM4ODIxYTJhbnRfbHBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0xQU19FTkFCTEUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIExQUyBFTkFCTEUgbm90aWZ5XG4iKTsKKwkJY29leF9zdGEtPnVuZGVyX2xwcyA9IHRydWU7CisJfSBlbHNlIGlmIChCVENfTFBTX0RJU0FCTEUgPT0gdHlwZSkgeworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIExQUyBESVNBQkxFIG5vdGlmeVxuIik7CisJCWNvZXhfc3RhLT51bmRlcl9scHMgPSBmYWxzZTsKKwl9Cit9CisKK3ZvaWQgZXhfaGFsYnRjODgyMWEyYW50X3NjYW5fbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCB0eXBlKQoreworCWlmIChCVENfU0NBTl9TVEFSVCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIFNDQU4gU1RBUlQgbm90aWZ5XG4iKTsKKwllbHNlIGlmIChCVENfU0NBTl9GSU5JU0ggPT0gdHlwZSkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBTQ0FOIEZJTklTSCBub3RpZnlcbiIpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMmFudF9jb25uZWN0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlpZiAoQlRDX0FTU09DSUFURV9TVEFSVCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIENPTk5FQ1QgU1RBUlQgbm90aWZ5XG4iKTsKKwllbHNlIGlmIChCVENfQVNTT0NJQVRFX0ZJTklTSCA9PSB0eXBlKQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIENPTk5FQ1QgRklOSVNIIG5vdGlmeVxuIik7Cit9CisKK3ZvaWQgZXhfaGFsYnRjODgyMWEyYW50X21lZGlhX3N0YXR1c19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICB1OCB0eXBlKQoreworCXU4IGgyY19wYXJhbWV0ZXJbM10gPSB7MH07CisJdTMyIHdpZmlfYnc7CisJdTggd2lmaV9jZW50cmFsX2Nobmw7CisKKwlpZiAoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJCSAgIltCVENvZXhdLCBNRURJQSBjb25uZWN0IG5vdGlmeVxuIik7CisJZWxzZQorCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkJICAiW0JUQ29leF0sIE1FRElBIGRpc2Nvbm5lY3Qgbm90aWZ5XG4iKTsKKworCS8qICBvbmx5IDIuNEcgd2UgbmVlZCB0byBpbmZvcm0gYnQgdGhlIGNobmwgbWFzayAqLworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTFfV0lGSV9DRU5UUkFMX0NITkwsCisJCQkgICAmd2lmaV9jZW50cmFsX2NobmwpOworCWlmICgoQlRDX01FRElBX0NPTk5FQ1QgPT0gdHlwZSkgJiYKKwkgICAgKHdpZmlfY2VudHJhbF9jaG5sIDw9IDE0KSkgeworCQloMmNfcGFyYW1ldGVyWzBdID0gMHgxOworCQloMmNfcGFyYW1ldGVyWzFdID0gd2lmaV9jZW50cmFsX2Nobmw7CisJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfVTRfV0lGSV9CVywgJndpZmlfYncpOworCQlpZiAoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KQorCQkJaDJjX3BhcmFtZXRlclsyXSA9IDB4MzA7CisJCWVsc2UKKwkJCWgyY19wYXJhbWV0ZXJbMl0gPSAweDIwOworCX0KKworCWNvZXhfZG0tPndpZmlfY2hubF9pbmZvWzBdID0gaDJjX3BhcmFtZXRlclswXTsKKwljb2V4X2RtLT53aWZpX2NobmxfaW5mb1sxXSA9IGgyY19wYXJhbWV0ZXJbMV07CisJY29leF9kbS0+d2lmaV9jaG5sX2luZm9bMl0gPSBoMmNfcGFyYW1ldGVyWzJdOworCisJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXX0VYRUMsCisJCSAgIltCVENvZXhdLCBGVyB3cml0ZSAweDY2ID0gMHgleFxuIiwKKwkJICBoMmNfcGFyYW1ldGVyWzBdIDw8IDE2IHwKKwkJICBoMmNfcGFyYW1ldGVyWzFdIDw8IDggfCBoMmNfcGFyYW1ldGVyWzJdKTsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NiwgMywgaDJjX3BhcmFtZXRlcik7Cit9CisKK3ZvaWQgZXhfaGFsYnRjODgyMWEyYW50X3NwZWNpYWxfcGFja2V0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgdTggdHlwZSkKK3sKKwlpZiAodHlwZSA9PSBCVENfUEFDS0VUX0RIQ1ApCisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCisJCQkgICJbQlRDb2V4XSwgREhDUCBQYWNrZXQgbm90aWZ5XG4iKTsKK30KKwordm9pZCBleF9oYWxidGM4ODIxYTJhbnRfYnRfaW5mb19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgIHU4ICp0bXBfYnVmLCB1OCBsZW5ndGgpCit7CisJdTggYnRfaW5mbyA9IDA7CisJdTggaSwgcnNwX3NvdXJjZSA9IDA7CisJc3RhdGljIHUzMiBzZXRfYnRfbG5hX2NudCwgc2V0X2J0X3BzZF9tb2RlOworCWJvb2wgYnRfYnVzeSA9IGZhbHNlLCBsaW1pdGVkX2RpZyA9IGZhbHNlOworCWJvb2wgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZSwgYnRfaHNfb24gPSBmYWxzZTsKKworCWNvZXhfc3RhLT5jMmhfYnRfaW5mb19yZXFfc2VudCA9IGZhbHNlOworCXJzcF9zb3VyY2UgPSB0bXBfYnVmWzBdJjB4ZjsKKwlpZiAocnNwX3NvdXJjZSA+PSBCVF9JTkZPX1NSQ184ODIxQV8yQU5UX01BWCkKKwkJcnNwX3NvdXJjZSA9IEJUX0lORk9fU1JDXzg4MjFBXzJBTlRfV0lGSV9GVzsKKwljb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W3JzcF9zb3VyY2VdKys7CisKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAorCQkgICJbQlRDb2V4XSwgQnQgaW5mb1slZF0sIGxlbmd0aCA9JWQsIGhleCBkYXRhID1bIiwKKwkJICByc3Bfc291cmNlLCBsZW5ndGgpOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1baV0gPSB0bXBfYnVmW2ldOworCQlpZiAoaSA9PSAxKQorCQkJYnRfaW5mbyA9IHRtcF9idWZbaV07CisJCWlmIChpID09IGxlbmd0aC0xKQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwgIjB4JTAyeF1cbiIsCisJCQkJICB0bXBfYnVmW2ldKTsKKwkJZWxzZQorCQkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwgIjB4JTAyeCwgIiwKKwkJCQkgIHRtcF9idWZbaV0pOworCX0KKworCWlmIChCVF9JTkZPX1NSQ184ODIxQV8yQU5UX1dJRklfRlcgIT0gcnNwX3NvdXJjZSkgeworCQljb2V4X3N0YS0+YnRfcmV0cnlfY250ID0JLyogIFszOjBdICovCisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1bMl0mMHhmOworCQljb2V4X3N0YS0+YnRfcnNzaSA9CisJCQljb2V4X3N0YS0+YnRfaW5mb19jMmhbcnNwX3NvdXJjZV1bM10qMisxMDsKKwkJY29leF9zdGEtPmJ0X2luZm9fZXh0ID0KKwkJCWNvZXhfc3RhLT5idF9pbmZvX2MyaFtyc3Bfc291cmNlXVs0XTsKKworCQkvKiAgSGVyZSB3ZSBuZWVkIHRvIHJlc2VuZCBzb21lIHdpZmkgaW5mbyB0byBCVCAqLworCQkvKiAgYmVjYXVzZSBidCBpcyByZXNldCBhbmQgbG9zcyBvZiB0aGUgaW5mby4gKi8KKwkJaWYgKChjb2V4X3N0YS0+YnRfaW5mb19leHQgJiBCSVQoMSkpKSB7CisJCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCQkJCQkgICAmd2lmaV9jb25uZWN0ZWQpOworCQkJaWYgKHdpZmlfY29ubmVjdGVkKQorCQkJCWV4X2hhbGJ0Yzg4MjFhMmFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgICAgIEJUQ19NRURJQV9DT05ORUNUKTsKKwkJCWVsc2UKKwkJCQlleF9oYWxidGM4ODIxYTJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJCSAgICAgICBCVENfTUVESUFfRElTQ09OTkVDVCk7CisKKwkJCXNldF9idF9wc2RfbW9kZSA9IDA7CisJCX0KKwkJaWYgKHNldF9idF9wc2RfbW9kZSA8PSAzKSB7CisJCQkvKiBmaXggQ0gtQlcgbW9kZSAgKi8KKwkJCWhhbGJ0Yzg4MjFhMmFudF9zZXRfYnRfcHNkX21vZGUoYnRjb2V4aXN0LAorCQkJCQkJCUZPUkNFX0VYRUMsIDB4MCk7CisJCQlzZXRfYnRfcHNkX21vZGUrKzsKKwkJfQorCisJCWlmIChjb2V4X2RtLT5jdXJfYnRfbG5hX2NvbnN0cmFpbikgeworCQkJaWYgKCEoY29leF9zdGEtPmJ0X2luZm9fZXh0ICYgQklUKDIpKSkgeworCQkJCWlmIChzZXRfYnRfbG5hX2NudCA8PSAzKSB7CisJCQkJCXNldF9idF9sbmFfY29uc3RyYWluKGJ0Y29leGlzdCwKKwkJCQkJCQkgICAgIEZPUkNFX0VYRUMsIHRydWUpOworCQkJCQlzZXRfYnRfbG5hX2NudCsrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNldF9idF9sbmFfY250ID0gMDsKKwkJfQorCisJCWlmICgoY29leF9zdGEtPmJ0X2luZm9fZXh0ICYgQklUKDMpKSkKKwkJCWhhbGJ0Yzg4MjFhMmFudF9pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LAorCQkJCQkJCUZPUkNFX0VYRUMsIGZhbHNlKTsKKwkJZWxzZQorCQkJLyogQlQgYWxyZWFkeSBOT1QgaWdub3JlIFdsYW4gYWN0aXZlLCBkbyBub3RoaW5nIGhlcmUgKi8KKworCQlpZiAoIShjb2V4X3N0YS0+YnRfaW5mb19leHQgJiBCSVQoNCkpKQorCQkJaGFsYnRjODgyMWEyYW50X2J0X2F1dG9fcmVwb3J0KGJ0Y29leGlzdCwKKwkJCQkJCSAgICAgICBGT1JDRV9FWEVDLCB0cnVlKTsKKwl9CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX0hTX09QRVJBVElPTiwgJmJ0X2hzX29uKTsKKwkvKiAgY2hlY2sgQklUKDIpIGZpcnN0ID09PiBjaGVjayBpZiBidCBpcyB1bmRlciBpbnF1aXJ5IG9yIHBhZ2Ugc2NhbiAqLworCWlmIChidF9pbmZvICYgQlRfSU5GT184ODIxQV8yQU5UX0JfSU5RX1BBR0UpIHsKKwkJY29leF9zdGEtPmMyaF9idF9pbnF1aXJ5X3BhZ2UgPSB0cnVlOworCQljb2V4X2RtLT5idF9zdGF0dXMgPSBCVF84ODIxQV8yQU5UX0JUX1NUQVRVU19OT05fSURMRTsKKwl9IGVsc2UgeworCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IGZhbHNlOworCQlpZiAoYnRfaW5mbyA9PSAweDEpIHsJLyogIGNvbm5lY3Rpb24gZXhpc3RzIGJ1dCBub3QgYnVzeSAqLworCQkJY29leF9zdGEtPmJ0X2xpbmtfZXhpc3QgPSB0cnVlOworCQkJY29leF9kbS0+YnRfc3RhdHVzID0KKwkJCQlCVF84ODIxQV8yQU5UX0JUX1NUQVRVU19DT05ORUNURURfSURMRTsKKwkJfSBlbHNlIGlmIChidF9pbmZvICYgQlRfSU5GT184ODIxQV8yQU5UX0JfQ09OTkVDVElPTikgeworCQkJLyogIGNvbm5lY3Rpb24gZXhpc3RzIGFuZCBzb21lIGxpbmsgaXMgYnVzeSAqLworCQkJY29leF9zdGEtPmJ0X2xpbmtfZXhpc3QgPSB0cnVlOworCQkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg4MjFBXzJBTlRfQl9GVFApCisJCQkJY29leF9zdGEtPnBhbl9leGlzdCA9IHRydWU7CisJCQllbHNlCisJCQkJY29leF9zdGEtPnBhbl9leGlzdCA9IGZhbHNlOworCQkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg4MjFBXzJBTlRfQl9BMkRQKQorCQkJCWNvZXhfc3RhLT5hMmRwX2V4aXN0ID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQljb2V4X3N0YS0+YTJkcF9leGlzdCA9IGZhbHNlOworCQkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg4MjFBXzJBTlRfQl9ISUQpCisJCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IHRydWU7CisJCQllbHNlCisJCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IGZhbHNlOworCQkJaWYgKGJ0X2luZm8gJiBCVF9JTkZPXzg4MjFBXzJBTlRfQl9TQ09fRVNDTykKKwkJCQljb2V4X3N0YS0+c2NvX2V4aXN0ID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQljb2V4X3N0YS0+c2NvX2V4aXN0ID0gZmFsc2U7CisJCQljb2V4X2RtLT5idF9zdGF0dXMgPSBCVF84ODIxQV8yQU5UX0JUX1NUQVRVU19OT05fSURMRTsKKwkJfSBlbHNlIHsKKwkJCWNvZXhfc3RhLT5idF9saW5rX2V4aXN0ID0gZmFsc2U7CisJCQljb2V4X3N0YS0+cGFuX2V4aXN0ID0gZmFsc2U7CisJCQljb2V4X3N0YS0+YTJkcF9leGlzdCA9IGZhbHNlOworCQkJY29leF9zdGEtPmhpZF9leGlzdCA9IGZhbHNlOworCQkJY29leF9zdGEtPnNjb19leGlzdCA9IGZhbHNlOworCQkJY29leF9kbS0+YnRfc3RhdHVzID0gQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfSURMRTsKKwkJfQorCisJCWlmIChidF9oc19vbikKKwkJCWNvZXhfZG0tPmJ0X3N0YXR1cyA9IEJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTX05PTl9JRExFOworCX0KKworCWlmIChCVF84ODIxQV8yQU5UX0JUX1NUQVRVU19OT05fSURMRSA9PSBjb2V4X2RtLT5idF9zdGF0dXMpCisJCWJ0X2J1c3kgPSB0cnVlOworCWVsc2UKKwkJYnRfYnVzeSA9IGZhbHNlOworCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfQkxfQlRfVFJBRkZJQ19CVVNZLCAmYnRfYnVzeSk7CisKKwlpZiAoQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfSURMRSAhPSBjb2V4X2RtLT5idF9zdGF0dXMpCisJCWxpbWl0ZWRfZGlnID0gdHJ1ZTsKKwllbHNlCisJCWxpbWl0ZWRfZGlnID0gZmFsc2U7CisJY29leF9kbS0+bGltaXRlZF9kaWcgPSBsaW1pdGVkX2RpZzsKKwlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0JMX0JUX0xJTUlURURfRElHLCAmbGltaXRlZF9kaWcpOworCisJaGFsYnRjODgyMWEyYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShidGNvZXhpc3QpOworfQorCit2b2lkIGV4X2hhbGJ0Yzg4MjFhMmFudF9oYWx0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLCAiW0JUQ29leF0sIEhhbHQgbm90aWZ5XG4iKTsKKworCWhhbGJ0Yzg4MjFhMmFudF9pZ25vcmVfd2xhbl9hY3QoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCB0cnVlKTsKKwlleF9oYWxidGM4ODIxYTJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShidGNvZXhpc3QsIEJUQ19NRURJQV9ESVNDT05ORUNUKTsKK30KKwordm9pZCBleF9oYWxidGM4ODIxYTJhbnRfcGVyaW9kaWNhbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdGF0aWMgdTggZGlzX3Zlcl9pbmZvX2NudDsKKwl1MzIgZndfdmVyID0gMCwgYnRfcGF0Y2hfdmVyID0gMDsKKwlzdHJ1Y3QgYnRjX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmYnRjb2V4aXN0LT5ib2FyZF9pbmZvOworCXN0cnVjdCBidGNfc3RhY2tfaW5mbyAqc3RhY2tfaW5mbyA9ICZidGNvZXhpc3QtPnN0YWNrX2luZm87CisKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgIltCVENvZXhdLCA9PT09PT09PT09PT09PT09PT09PT09PT09PSBQZXJpb2RpY2FsID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisKKwlpZiAoZGlzX3Zlcl9pbmZvX2NudCA8PSA1KSB7CisJCWRpc192ZXJfaW5mb19jbnQgKz0gMTsKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX0lOSVQsCisJCQkgICJbQlRDb2V4XSwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIEFudCBQRyBOdW0vIEFudCBNZWNoLyBBbnQgUG9zID0gJWQvICVkLyAlZFxuIiwKKwkJCSAgYm9hcmRfaW5mby0+cGdfYW50X251bSwgYm9hcmRfaW5mby0+YnRkbV9hbnRfbnVtLAorCQkJICBib2FyZF9pbmZvLT5idGRtX2FudF9wb3MpOworCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfSU5JVCwKKwkJCSAgIltCVENvZXhdLCBCVCBzdGFjay8gaGNpIGV4dCB2ZXIgPSAlcyAvICVkXG4iLAorCQkJICAoKHN0YWNrX2luZm8tPnByb2ZpbGVfbm90aWZpZWQpID8gIlllcyIgOiAiTm8iKSwKKwkJCSAgc3RhY2tfaW5mby0+aGNpX3ZlcnNpb24pOworCQlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX1U0X0JUX1BBVENIX1ZFUiwKKwkJCQkgICAmYnRfcGF0Y2hfdmVyKTsKKwkJYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9VNF9XSUZJX0ZXX1ZFUiwgJmZ3X3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sIENvZXhWZXIvIEZ3VmVyLyBQYXRjaFZlciA9ICVkXyV4LyAweCV4LyAweCV4KCVkKVxuIiwKKwkJCSAgZ2xjb2V4X3Zlcl9kYXRlXzg4MjFhXzJhbnQsCisJCQkgIGdsY29leF92ZXJfODgyMWFfMmFudCwKKwkJCSAgZndfdmVyLCBidF9wYXRjaF92ZXIsIGJ0X3BhdGNoX3Zlcik7CisJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9JTklULAorCQkJICAiW0JUQ29leF0sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCX0KKworCWhhbGJ0Yzg4MjFhMmFudF9xdWVyeV9idF9pbmZvKGJ0Y29leGlzdCk7CisJaGFsYnRjODgyMWEyYW50X21vbml0b3JfYnRfY3RyKGJ0Y29leGlzdCk7CisJbW9uaXRvcl9idF9lbmFibGVfZGlzYWJsZShidGNvZXhpc3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODgyMWEyYW50LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGM4ODIxYTJhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDU1MDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjODgyMWEyYW50LmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qICAqLworLyogIFRoZSBmb2xsb3dpbmcgaXMgZm9yIDg4MjFBIDJBbnQgQlQgQ28tZXhpc3QgZGVmaW5pdGlvbiAqLworLyogICovCisjZGVmaW5lCUJUX0lORk9fODgyMUFfMkFOVF9CX0ZUUAkJCQlCSVQoNykKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8yQU5UX0JfQTJEUAkJCQlCSVQoNikKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8yQU5UX0JfSElECQkJCUJJVCg1KQorI2RlZmluZQlCVF9JTkZPXzg4MjFBXzJBTlRfQl9TQ09fQlVTWQkJCQlCSVQoNCkKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8yQU5UX0JfQUNMX0JVU1kJCQkJQklUKDMpCisjZGVmaW5lCUJUX0lORk9fODgyMUFfMkFOVF9CX0lOUV9QQUdFCQkJCUJJVCgyKQorI2RlZmluZQlCVF9JTkZPXzg4MjFBXzJBTlRfQl9TQ09fRVNDTwkJCQlCSVQoMSkKKyNkZWZpbmUJQlRfSU5GT184ODIxQV8yQU5UX0JfQ09OTkVDVElPTgkJCQlCSVQoMCkKKworI2RlZmluZQkJQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzg4MjFBXzJBTlQJCTIKKworZW51bSBCVF9JTkZPX1NSQ184ODIxQV8yQU5UIHsKKwlCVF9JTkZPX1NSQ184ODIxQV8yQU5UX1dJRklfRlcJCQk9IDB4MCwKKwlCVF9JTkZPX1NSQ184ODIxQV8yQU5UX0JUX1JTUAkJCT0gMHgxLAorCUJUX0lORk9fU1JDXzg4MjFBXzJBTlRfQlRfQUNUSVZFX1NFTkQJCT0gMHgyLAorCUJUX0lORk9fU1JDXzg4MjFBXzJBTlRfTUFYCit9OworCitlbnVtIEJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTIHsKKwlCVF84ODIxQV8yQU5UX0JUX1NUQVRVU19JRExFCQkJCT0gMHgwLAorCUJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTX0NPTk5FQ1RFRF9JRExFCT0gMHgxLAorCUJUXzg4MjFBXzJBTlRfQlRfU1RBVFVTX05PTl9JRExFCQkJPSAweDIsCisJQlRfODgyMUFfMkFOVF9CVF9TVEFUVVNfTUFYCit9OworCitlbnVtIEJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPIHsKKwlCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19VTkRFRklORUQJCQk9IDB4MCwKKwlCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19TQ08JCQkJPSAweDEsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fSElECQkJCT0gMHgyLAorCUJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0EyRFAJCQkJPSAweDMsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fQTJEUF9QQU5IUwkJPSAweDQsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSCQkJPSAweDUsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFOSFMJCQk9IDB4NiwKKwlCVF84ODIxQV8yQU5UX0NPRVhfQUxHT19QQU5FRFJfQTJEUAkJPSAweDcsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fUEFORURSX0hJRAkJPSAweDgsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fSElEX0EyRFBfUEFORURSCT0gMHg5LAorCUJUXzg4MjFBXzJBTlRfQ09FWF9BTEdPX0hJRF9BMkRQCQkJPSAweGEsCisJQlRfODgyMUFfMkFOVF9DT0VYX0FMR09fTUFYCQkJCT0gMHhiLAorfTsKKworc3RydWN0IGNvZXhfZG1fODgyMWFfMmFudCB7CisJLyogIGZ3IG1lY2hhbmlzbSAqLworCWJvb2wJCXByZV9kZWNfYnRfcHdyOworCWJvb2wJCWN1cl9kZWNfYnRfcHdyOworCWJvb2wJCXByZV9idF9sbmFfY29uc3RyYWluOworCWJvb2wJCWN1cl9idF9sbmFfY29uc3RyYWluOworCXU4CQlwcmVfYnRfcHNkX21vZGU7CisJdTgJCWN1cl9idF9wc2RfbW9kZTsKKwl1OAkJcHJlX2Z3X2RhY19zd2luZ19sdmw7CisJdTgJCWN1cl9md19kYWNfc3dpbmdfbHZsOworCWJvb2wJCWN1cl9pZ25vcmVfd2xhbl9hY3Q7CisJYm9vbAkJcHJlX2lnbm9yZV93bGFuX2FjdDsKKwl1OAkJcHJlX3BzX3RkbWE7CisJdTgJCWN1cl9wc190ZG1hOworCXU4CQlwc190ZG1hX3BhcmFbNV07CisJdTgJCXBzX3RkbWFfZHVfYWRqX3R5cGU7CisJYm9vbAkJcmVzZXRfdGRtYV9hZGp1c3Q7CisJYm9vbAkJcHJlX3BzX3RkbWFfb247CisJYm9vbAkJY3VyX3BzX3RkbWFfb247CisJYm9vbAkJcHJlX2J0X2F1dG9fcmVwb3J0OworCWJvb2wJCWN1cl9idF9hdXRvX3JlcG9ydDsKKworCS8qICBzdyBtZWNoYW5pc20gKi8KKwlib29sCQlwcmVfcmZfcnhfbHBmX3NocmluazsKKwlib29sCQljdXJfcmZfcnhfbHBmX3NocmluazsKKwl1MzIJCWJ0X3JmMHgxZV9iYWNrdXA7CisJYm9vbAlwcmVfbG93X3BlbmFsdHlfcmE7CisJYm9vbAkJY3VyX2xvd19wZW5hbHR5X3JhOworCWJvb2wJCXByZV9kYWNfc3dpbmdfb247CisJdTMyCQlwcmVfZGFjX3N3aW5nX2x2bDsKKwlib29sCQljdXJfZGFjX3N3aW5nX29uOworCXUzMgkJY3VyX2RhY19zd2luZ19sdmw7CisJYm9vbAkJcHJlX2FkY19iYWNrX29mZjsKKwlib29sCQljdXJfYWRjX2JhY2tfb2ZmOworCWJvb2wJcHJlX2FnY190YWJsZV9lbjsKKwlib29sCQljdXJfYWdjX3RhYmxlX2VuOworCXUzMgkJcHJlX3ZhbDB4NmMwOworCXUzMgkJY3VyX3ZhbDB4NmMwOworCXUzMgkJcHJlX3ZhbDB4NmM0OworCXUzMgkJY3VyX3ZhbDB4NmM0OworCXUzMgkJcHJlX3ZhbDB4NmM4OworCXUzMgkJY3VyX3ZhbDB4NmM4OworCXU4CQlwcmVfdmFsMHg2Y2M7CisJdTgJCWN1cl92YWwweDZjYzsKKwlib29sCQlsaW1pdGVkX2RpZzsKKworCS8qICBhbGdvcml0aG0gcmVsYXRlZCAqLworCXU4CQlwcmVfYWxnb3JpdGhtOworCXU4CQljdXJfYWxnb3JpdGhtOworCXU4CQlidF9zdGF0dXM7CisJdTgJCXdpZmlfY2hubF9pbmZvWzNdOworfTsKKworc3RydWN0IGNvZXhfc3RhXzg4MjFhXzJhbnQgeworCWJvb2wJCWJ0X2xpbmtfZXhpc3Q7CisJYm9vbAkJc2NvX2V4aXN0OworCWJvb2wJCWEyZHBfZXhpc3Q7CisJYm9vbAkJaGlkX2V4aXN0OworCWJvb2wJCXBhbl9leGlzdDsKKworCWJvb2wJCXVuZGVyX2xwczsKKwlib29sCQl1bmRlcl9pcHM7CisJdTMyCQloaWdoX3ByaW9yaXR5X3R4OworCXUzMgkJaGlnaF9wcmlvcml0eV9yeDsKKwl1MzIJCWxvd19wcmlvcml0eV90eDsKKwl1MzIJCWxvd19wcmlvcml0eV9yeDsKKwl1OAkJYnRfcnNzaTsKKwl1OAkJcHJlX2J0X3Jzc2lfc3RhdGU7CisJdTgJCXByZV93aWZpX3Jzc2lfc3RhdGVbNF07CisJYm9vbAkJYzJoX2J0X2luZm9fcmVxX3NlbnQ7CisJdTgJCWJ0X2luZm9fYzJoW0JUX0lORk9fU1JDXzg4MjFBXzJBTlRfTUFYXVsxMF07CisJdTMyCQlidF9pbmZvX2MyaF9jbnRbQlRfSU5GT19TUkNfODgyMUFfMkFOVF9NQVhdOworCWJvb2wJCWMyaF9idF9pbnF1aXJ5X3BhZ2U7CisJdTgJCWJ0X3JldHJ5X2NudDsKKwl1OAkJYnRfaW5mb19leHQ7Cit9OworCisvKiAgKi8KKy8qICBUaGUgZm9sbG93aW5nIGlzIGludGVyZmFjZSB3aGljaCB3aWxsIG5vdGlmeSBjb2V4IG1vZHVsZS4gKi8KKy8qICAqLwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X2luaXRfaHdjb25maWcoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X2luaXRfY29leF9kbSgKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdAorCSk7Cit2b2lkCitleF9oYWxidGM4ODIxYTJhbnRfaXBzX25vdGlmeSgKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwl1OCB0eXBlCisJKTsKK3ZvaWQKK2V4X2hhbGJ0Yzg4MjFhMmFudF9scHNfbm90aWZ5KAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IHR5cGUKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X3NjYW5fbm90aWZ5KAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IHR5cGUKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X2Nvbm5lY3Rfbm90aWZ5KAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IHR5cGUKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X21lZGlhX3N0YXR1c19ub3RpZnkoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJdTggdHlwZQorCSk7Cit2b2lkCitleF9oYWxidGM4ODIxYTJhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4IHR5cGUKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X2J0X2luZm9fbm90aWZ5KAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCXU4ICp0bXBfYnVmLAorCXU4IGxlbmd0aAorCSk7Cit2b2lkCitleF9oYWxidGM4ODIxYTJhbnRfaGFsdF9ub3RpZnkoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X3BlcmlvZGljYWwoCisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QKKwkpOwordm9pZAorZXhfaGFsYnRjODgyMWEyYW50X2Rpc3BsYXlfY29leF9pbmZvKAorCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0CisJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L2hhbGJ0Y291dHNyYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZmMyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGNvdXRzcmMuYwpAQCAtMCwwICsxLDEyOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTMgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImhhbGJ0X3ByZWNvbXAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJR2xvYmFsIHZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ0X3Byb2ZpbGVfc3RyaW5nW10gPSB7CisJIk5PTkUiLAorCSJBMkRQIiwKKwkiUEFOIiwKKwkiSElEIiwKKwkiU0NPIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidF9zcGVjX3N0cmluZ1tdID0geworCSIxLjBiIiwKKwkiMS4xIiwKKwkiMS4yIiwKKwkiMi4wK0VEUiIsCisJIjIuMStFRFIiLAorCSIzLjArSFMiLAorCSI0LjAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ0X2xpbmtfcm9sZV9zdHJpbmdbXSA9IHsKKwkiTWFzdGVyIiwKKwkiU2xhdmUiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGgyY19zdGF0ZV9zdHJpbmdbXSA9IHsKKwkic3VjY2Vzc2Z1bCIsCisJImgyYyBidXN5IiwKKwkicmYgb2ZmIiwKKwkiZncgbm90IHJlYWQiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlvX3N0YXRlX3N0cmluZ1tdID0geworCSJJT19TVEFUVVNfU1VDQ0VTUyIsCisJIklPX1NUQVRVU19GQUlMX0NBTk5PVF9JTyIsCisJIklPX1NUQVRVU19GQUlMX1JGX09GRiIsCisJIklPX1NUQVRVU19GQUlMX0ZXX1JFQURfQ0xFQVJfVElNRU9VVCIsCisJIklPX1NUQVRVU19GQUlMX1dBSVRfSU9fRVZFTlRfVElNRU9VVCIsCisJIklPX1NUQVRVU19JTlZBTElEX0xFTiIsCisJIklPX1NUQVRVU19JT19JRExFX1FVRVVFX0VNUFRZIiwKKwkiSU9fU1RBVFVTX0lPX0lOU0VSVF9XQUlUX1FVRVVFX0ZBSUwiLAorCSJJT19TVEFUVVNfVU5LTk9XTl9GQUlMIiwKKwkiSU9fU1RBVFVTX1dST05HX0xFVkVMIiwKKwkiSU9fU1RBVFVTX0gyQ19TVE9QUEVEIiwKK307CisKK3N0cnVjdCBidGNfY29leGlzdCBnbDkyZV9idF9jb2V4aXN0OworCit1MzIgYnRjXzkyZWRiZ190eXBlW0JUQ19NU0dfTUFYXTsKK3N0YXRpYyB1OCBidGNfZGJnX2J1ZlsxMDBdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJRGVidWcgcmVsYXRlZCBmdW5jdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBib29sIGlzX2FueV9jbGllbnRfY29ubmVjdF90b19hcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqZHJ2X3ByaXY7CisJdTggY250ID0gMDsKKworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UIHx8CisJICAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZW50cnlfbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnZfcHJpdiwgJnJ0bHByaXYtPmVudHJ5X2xpc3QsIGxpc3QpIHsKKwkJCWNudCsrOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5lbnRyeV9saXN0X2xvY2spOworCX0KKwlpZiAoY250ID4gMCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGhhbGJ0Y19pc19idF9jb2V4aXN0X2F2YWlsYWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlpZiAoIWJ0Y29leGlzdC0+YmluZGVkIHx8IE5VTEwgPT0gYnRjb2V4aXN0LT5hZGFwdGVyKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaGFsYnRjX2lzX3dpZmlfYnVzeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCit7CisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5iX2J1c3l0cmFmZmljKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworCitzdGF0aWMgdm9pZCBoYWxidGNfZGJnX2luaXQodm9pZCkKK3sKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IEJUQ19NU0dfTUFYOyBpKyspCisJCWJ0Y185MmVkYmdfdHlwZVtpXSA9IDA7CisKKwlidGNfOTJlZGJnX3R5cGVbQlRDX01TR19JTlRFUkZBQ0VdID0gMDsKKworCWJ0Y185MmVkYmdfdHlwZVtCVENfTVNHX0FMR09SSVRITV0gPSAwOworfQorCitzdGF0aWMgYm9vbCBoYWxidGNfaXNfYnQ0MChzdHJ1Y3QgcnRsX3ByaXYgKmFkYXB0ZXIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYWRhcHRlcjsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCWJvb2wgaXNfaHQ0MCA9IHRydWU7CisJZW51bSBodF9jaGFubmVsX3dpZHRoIGJ3ID0gcnRscGh5LT5jdXJyZW50X2NoYW5fYnc7CisKKworCWlmIChidyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwKQorCQlpc19odDQwID0gZmFsc2U7CisJZWxzZSBpZiAoYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkKKwkJaXNfaHQ0MCA9IHRydWU7CisKKwlyZXR1cm4gaXNfaHQ0MDsKK30KKworc3RhdGljIGJvb2wgaGFsYnRjX2xlZ2FjeShzdHJ1Y3QgcnRsX3ByaXYgKmFkYXB0ZXIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYWRhcHRlcjsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKworCWJvb2wgaXNfbGVnYWN5ID0gZmFsc2U7CisKKwlpZiAoKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX0IpIHx8IChtYWMtPm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9HKSkKKwkJaXNfbGVnYWN5ID0gdHJ1ZTsKKworCXJldHVybiBpc19sZWdhY3k7Cit9CisKK2Jvb2wgaGFsYnRjOTJlX2lzX3dpZmlfdXBsaW5rKHN0cnVjdCBydGxfcHJpdiAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBhZGFwdGVyOworCisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5iX3R4X2J1c3lfdHJhZmZpYykKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1MzIgaGFsYnRjX2dldF93aWZpX2J3KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9CisJCShzdHJ1Y3QgcnRsX3ByaXYgKilidGNvZXhpc3QtPmFkYXB0ZXI7CisJdTMyIHdpZmlfYncgPSBCVENfV0lGSV9CV19IVDIwOworCisJaWYgKGhhbGJ0Y19pc19idDQwKHJ0bHByaXYpKSB7CisJCXdpZmlfYncgPSBCVENfV0lGSV9CV19IVDQwOworCX0gZWxzZSB7CisJCWlmIChoYWxidGNfbGVnYWN5KHJ0bHByaXYpKQorCQkJd2lmaV9idyA9IEJUQ19XSUZJX0JXX0xFR0FDWTsKKwkJZWxzZQorCQkJd2lmaV9idyA9IEJUQ19XSUZJX0JXX0hUMjA7CisJfQorCXJldHVybiB3aWZpX2J3OworfQorCitzdGF0aWMgdTggaGFsYnRjX2dldF93aWZpX2NlbnRyYWxfY2hubChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9waHkJKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1OCBjaG5sID0gMTsKKworCisJaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsICE9IDApCisJCWNobmwgPSBydGxwaHktPmN1cnJlbnRfY2hhbm5lbDsKKwlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCisJCSAgImhhbGJ0Y19nZXRfd2lmaV9jZW50cmFsX2Nobmw6JWRcbiIsIGNobmwpOworCXJldHVybiBjaG5sOworfQorCitzdGF0aWMgdm9pZCBoYWxidGNfbGVhdmVfbHBzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdjsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYzsKKwlib29sIGFwX2VuYWJsZSA9IGZhbHNlOworCisJcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKwlwcHNjID0gcnRsX3BzYyhydGxwcml2KTsKKworCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9BUF9NT0RFX0VOQUJMRSwKKwkJCSAgICZhcF9lbmFibGUpOworCisJaWYgKGFwX2VuYWJsZSkgeworCQlwcl9kZWJ1ZygiaGFsYnRjX2xlYXZlX2xwcygpPC0tZG9udCBsZWF2ZSBscHMgdW5kZXIgQVAgbW9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlidGNvZXhpc3QtPmJ0X2luZm8uYnRfY3RybF9scHMgPSB0cnVlOworCWJ0Y29leGlzdC0+YnRfaW5mby5idF9scHNfb24gPSBmYWxzZTsKKwlydGw5MmVfbHBzX2xlYXZlKHJ0bHByaXYtPm1hYzgwMjExLmh3KTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjX2VudGVyX2xwcyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXY7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2M7CisJYm9vbCBhcF9lbmFibGUgPSBmYWxzZTsKKworCXJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJcHBzYyA9IHJ0bF9wc2MocnRscHJpdik7CisKKwlidGNvZXhpc3QtPmJ0Y19nZXQoYnRjb2V4aXN0LCBCVENfR0VUX0JMX1dJRklfQVBfTU9ERV9FTkFCTEUsCisJCQkgICAmYXBfZW5hYmxlKTsKKworCWlmIChhcF9lbmFibGUpIHsKKwkJcHJfZGVidWcoImhhbGJ0Y19lbnRlcl9scHMoKTwtLWRvbnQgZW50ZXIgbHBzIHVuZGVyIEFQIG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2N0cmxfbHBzID0gdHJ1ZTsKKwlidGNvZXhpc3QtPmJ0X2luZm8uYnRfbHBzX29uID0gZmFsc2U7CisJcnRsOTJlX2xwc19lbnRlcihydGxwcml2LT5tYWM4MDIxMS5odyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19ub3JtYWxfbHBzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCWlmIChidGNvZXhpc3QtPmJ0X2luZm8uYnRfY3RybF9scHMpIHsKKwkJYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2xwc19vbiA9IGZhbHNlOworCQlidGNvZXhpc3QtPmJ0X2luZm8uYnRfY3RybF9scHMgPSBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19hZ2dyZWdhdGlvbl9jaGVjayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKK30KKworc3RhdGljIHUzMiBoYWxidGNvdXRzcmNfZ2V0X3dpZmlfbGlua19zdGF0dXMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiByZXR1cm4gdmFsdWU6CisJICogWzMxOjE2XSA9PiBjb25uZWN0ZWQgcG9ydCBudW1iZXIKKwkgKiBbMTU6MF0gPT4gcG9ydCBjb25uZWN0ZWQgYml0IGRlZmluZQorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisJdTMyIHJldF92YWwgPSAwOworCXUzMiBwb3J0X2Nvbm5lY3RlZF9zdGF0dXMgPSAwLCBudW1fb2ZfY29ubmVjdGVkX3BvcnQgPSAwOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgbWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkgeworCQlwb3J0X2Nvbm5lY3RlZF9zdGF0dXMgfD0gV0lGSV9TVEFfQ09OTkVDVEVEOworCQludW1fb2ZfY29ubmVjdGVkX3BvcnQrKzsKKwl9CisJLyogQVAgJiBBREhPQyAmIE1FU0ggKi8KKwlpZiAoaXNfYW55X2NsaWVudF9jb25uZWN0X3RvX2FwKGJ0Y29leGlzdCkpIHsKKwkJcG9ydF9jb25uZWN0ZWRfc3RhdHVzIHw9IFdJRklfQVBfQ09OTkVDVEVEOworCQludW1fb2ZfY29ubmVjdGVkX3BvcnQrKzsKKwl9CisJLyppZiAoQlRfSHNDb25uZWN0aW9uRXN0YWJsaXNoZWQoQWRhcHRlcikpCisJeworCQlwb3J0X2Nvbm5lY3RlZF9zdGF0dXMgfD0gV0lGSV9IU19DT05ORUNURUQ7CisJCW51bV9vZl9jb25uZWN0ZWRfcG9ydCsrOworCX0qLworCS8qIFRPRE86CisJICogUDJQIENvbm5lY3RlZCBTdGF0dXMJKi8KKworCXJldF92YWwgPSAobnVtX29mX2Nvbm5lY3RlZF9wb3J0IDw8IDE2KSB8IHBvcnRfY29ubmVjdGVkX3N0YXR1czsKKworCXJldHVybiByZXRfdmFsOworfQorCisKK3N0YXRpYyB1MzIgaGFsYnRjX2dldF9idF9wYXRjaF92ZXJzaW9uKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgczMyIGhhbGJ0Y19nZXRfd2lmaV9yc3NpKHN0cnVjdCBydGxfcHJpdiAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBhZGFwdGVyOworCXMzMgl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gMDsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkKKwkJdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA9CisJCQlydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCWVsc2UgLyogYXNzb2NpYXRlZCBlbnRyeSBwd2RiICovCisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJcnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwlyZXR1cm4gdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKK30KKworc3RhdGljIGJvb2wgaGFsYnRjX2dldCh2b2lkICp2b2lkX2J0Y29leGlzdCwgdTggZ2V0X3R5cGUsIHZvaWQgKm91dF9idWYpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopdm9pZF9idGNvZXhpc3Q7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJYm9vbCAqYm9vbF90bXAgPSAoYm9vbCAqKW91dF9idWY7CisJaW50ICpzMzJfdG1wID0gKGludCAqKW91dF9idWY7CisJdTMyICp1MzJfdG1wID0gKHUzMiAqKW91dF9idWY7CisJdTggKnU4X3RtcCA9ICh1OCAqKW91dF9idWY7CisJYm9vbCB0bXAgPSBmYWxzZTsKKworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCisKKwlzd2l0Y2ggKGdldF90eXBlKSB7CisJY2FzZSBCVENfR0VUX0JMX0hTX09QRVJBVElPTjoKKwkJKmJvb2xfdG1wID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9CTF9IU19DT05ORUNUSU5HOgorCQkqYm9vbF90bXAgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVEOgorCQlpZiAocnRscHJpdi0+bWFjODAyMTEub3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKQorCQkJdG1wID0gdHJ1ZTsKKwkJaWYgKGlzX2FueV9jbGllbnRfY29ubmVjdF90b19hcChidGNvZXhpc3QpKQorCQkJdG1wID0gdHJ1ZTsKKwkJKmJvb2xfdG1wID0gdG1wOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfV0lGSV9CVVNZOgorCQlpZiAoaGFsYnRjX2lzX3dpZmlfYnVzeShydGxwcml2KSkKKwkJCSpib29sX3RtcCA9IHRydWU7CisJCWVsc2UKKwkJCSpib29sX3RtcCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfV0lGSV9TQ0FOOgorCQlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcpCisJCQkqYm9vbF90bXAgPSB0cnVlOworCQllbHNlCisJCQkqYm9vbF90bXAgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBCVENfR0VUX0JMX1dJRklfTElOSzoKKwkJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LSU5HKQorCQkJKmJvb2xfdG1wID0gdHJ1ZTsKKwkJZWxzZQorCQkJKmJvb2xfdG1wID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9CTF9XSUZJX1JPQU06CS8qVE9ETyovCisJCSpib29sX3RtcCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfV0lGSV80X1dBWV9QUk9HUkVTUzoJLypUT0RPKi8KKwkJKmJvb2xfdG1wID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9CTF9XSUZJX1VOREVSXzVHOgorCQkqYm9vbF90bXAgPSBmYWxzZTsgLypUT0RPKi8KKworCWNhc2UgQlRDX0dFVF9CTF9XSUZJX0RIQ1A6CS8qVE9ETyovCisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9CTF9XSUZJX1NPRlRBUF9JRExFOgorCQkqYm9vbF90bXAgPSB0cnVlOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfV0lGSV9TT0ZUQVBfTElOS0lORzoKKwkJKmJvb2xfdG1wID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9CTF9XSUZJX0lOX0VBUkxZX1NVU1BFTkQ6CisJCSpib29sX3RtcCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfV0lGSV9BUF9NT0RFX0VOQUJMRToKKwkJKmJvb2xfdG1wID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9CTF9XSUZJX0VOQUJMRV9FTkNSWVBUSU9OOgorCQlpZiAoTk9fRU5DUllQVElPTiA9PSBydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSkKKwkJCSpib29sX3RtcCA9IGZhbHNlOworCQllbHNlCisJCQkqYm9vbF90bXAgPSB0cnVlOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfV0lGSV9VTkRFUl9CX01PREU6CisJCWlmIChXSVJFTEVTU19NT0RFX0IgPT0gcnRscHJpdi0+bWFjODAyMTEubW9kZSkKKwkJCSpib29sX3RtcCA9IHRydWU7CisJCWVsc2UKKwkJCSpib29sX3RtcCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfQkxfRVhUX1NXSVRDSDoKKwkJKmJvb2xfdG1wID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9TNF9XSUZJX1JTU0k6CisJCSpzMzJfdG1wID0gaGFsYnRjX2dldF93aWZpX3Jzc2kocnRscHJpdik7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9TNF9IU19SU1NJOgkvKlRPRE8qLworCQkqczMyX3RtcCA9IGhhbGJ0Y19nZXRfd2lmaV9yc3NpKHJ0bHByaXYpOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfVTRfV0lGSV9CVzoKKwkJKnUzMl90bXAgPSBoYWxidGNfZ2V0X3dpZmlfYncoYnRjb2V4aXN0KTsKKwkJYnJlYWs7CisJY2FzZSBCVENfR0VUX1U0X1dJRklfVFJBRkZJQ19ESVJFQ1RJT046CisJCWlmIChoYWxidGM5MmVfaXNfd2lmaV91cGxpbmsocnRscHJpdikpCisJCQkqdTMyX3RtcCA9IEJUQ19XSUZJX1RSQUZGSUNfVFg7CisJCWVsc2UKKwkJCSp1MzJfdG1wID0gQlRDX1dJRklfVFJBRkZJQ19SWDsKKwkJYnJlYWs7CisJY2FzZSBCVENfR0VUX1U0X1dJRklfRldfVkVSOgorCQkqdTMyX3RtcCA9IChydGxoYWwtPmZ3X3ZlcnNpb24gPDwgMTYpIHwgcnRsaGFsLT5md19zdWJ2ZXJzaW9uOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfVTRfV0lGSV9MSU5LX1NUQVRVUzoKKwkJKnUzMl90bXAgPSBoYWxidGNvdXRzcmNfZ2V0X3dpZmlfbGlua19zdGF0dXMoYnRjb2V4aXN0KTsKKwkJYnJlYWs7CisJY2FzZSBCVENfR0VUX1U0X0JUX1BBVENIX1ZFUjoKKwkJKnUzMl90bXAgPSBoYWxidGNfZ2V0X2J0X3BhdGNoX3ZlcnNpb24oYnRjb2V4aXN0KTsKKwkJYnJlYWs7CisJY2FzZSBCVENfR0VUX1UxX1dJRklfRE9UMTFfQ0hOTDoKKwkJKnU4X3RtcCA9IHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsOworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfVTFfV0lGSV9DRU5UUkFMX0NITkw6CisJCSp1OF90bXAgPSBoYWxidGNfZ2V0X3dpZmlfY2VudHJhbF9jaG5sKGJ0Y29leGlzdCk7CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9VMV9XSUZJX0hTX0NITkw6CisJCSp1OF90bXAgPSAxOy8qIEJUX09wZXJhdGVDaG5sKHJ0bHByaXYpOyAqLworCQlicmVhazsKKwljYXNlIEJUQ19HRVRfVTFfTUFDX1BIWV9NT0RFOgorCQkqdThfdG1wID0gQlRDX01QX1VOS05PV047CisJCWJyZWFrOworCWNhc2UgQlRDX0dFVF9VMV9BUF9OVU06CisJCS8qIGRyaXZlciBkb24ndCBrbm93IEFQIG51bSBpbiBMaW51eCwKKwkJICogU28sIHRoZSByZXR1cm4gdmFsdWUgaGVyZSBpcyBub3QgcmlnaHQgKi8KKwkJKnU4X3RtcCA9IDE7LyogcERlZk1nbnRJbmZvLT5OdW1Cc3NEZXNjNFF1ZXJ5OyAqLworCQlicmVhazsKKworCS8qKioqKioqKioqKioqIDFBbnQgKioqKioqKioqKioqKiovCisJY2FzZSBCVENfR0VUX1UxX0xQU19NT0RFOgorCQkqdThfdG1wID0gYnRjb2V4aXN0LT5wd3JfbW9kZV92YWxbMF07CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGhhbGJ0Y19zZXQodm9pZCAqdm9pZF9idGNvZXhpc3QsIHU4IHNldF90eXBlLCB2b2lkICppbl9idWYpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopdm9pZF9idGNvZXhpc3Q7CisJYm9vbCAqYm9vbF90bXAgPSAoYm9vbCAqKWluX2J1ZjsKKwl1OCAqdThfdG1wID0gKHU4ICopaW5fYnVmOworCXUzMiAqdTMyX3RtcCA9ICh1MzIgKilpbl9idWY7CisKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoc2V0X3R5cGUpIHsKKwkvKiBzZXQgc29tZSBib29sIHR5cGUgdmFyaWFibGVzLiAqLworCWNhc2UgQlRDX1NFVF9CTF9CVF9ESVNBQkxFOgorCQlidGNvZXhpc3QtPmJ0X2luZm8uYnRfZGlzYWJsZWQgPSAqYm9vbF90bXA7CisJCWJyZWFrOworCWNhc2UgQlRDX1NFVF9CTF9CVF9UUkFGRklDX0JVU1k6CisJCWJ0Y29leGlzdC0+YnRfaW5mby5idF9idXN5ID0gKmJvb2xfdG1wOworCQlicmVhazsKKwljYXNlIEJUQ19TRVRfQkxfQlRfTElNSVRFRF9ESUc6CisJCWJ0Y29leGlzdC0+YnRfaW5mby5saW1pdGVkX2RpZyA9ICpib29sX3RtcDsKKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0JMX0ZPUkNFX1RPX1JPQU06CisJCWJ0Y29leGlzdC0+YnRfaW5mby5mb3JjZV90b19yb2FtID0gKmJvb2xfdG1wOworCQlicmVhazsKKwljYXNlIEJUQ19TRVRfQkxfVE9fUkVKX0FQX0FHR19QS1Q6CisJCWJ0Y29leGlzdC0+YnRfaW5mby5yZWplY3RfYWdnX3BrdCA9ICpib29sX3RtcDsKKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0JMX0JUX0NUUkxfQUdHX1NJWkU6CisJCWJ0Y29leGlzdC0+YnRfaW5mby5iX2J0X2N0cmxfYnVmX3NpemUgPSAqYm9vbF90bXA7CisJCWJyZWFrOworCWNhc2UgQlRDX1NFVF9CTF9JTkNfU0NBTl9ERVZfTlVNOgorCQlidGNvZXhpc3QtPmJ0X2luZm8uaW5jcmVhc2Vfc2Nhbl9kZXZfbnVtID0gKmJvb2xfdG1wOworCQlicmVhazsKKwkJLyogc2V0IHNvbWUgdTFCeXRlIHR5cGUgdmFyaWFibGVzLiAqLworCWNhc2UgQlRDX1NFVF9VMV9SU1NJX0FESl9WQUxfRk9SX0FHQ19UQUJMRV9PTjoKKwkJYnRjb2V4aXN0LT5idF9pbmZvLnJzc2lfYWRqdXN0X2Zvcl9hZ2NfdGFibGVfb24gPSAqdThfdG1wOworCQlicmVhazsKKwljYXNlIEJUQ19TRVRfVTFfQUdHX0JVRl9TSVpFOgorCQlidGNvZXhpc3QtPmJ0X2luZm8uYWdnX2J1Zl9zaXplID0gKnU4X3RtcDsKKwkJYnJlYWs7CisJCS8qIHRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgYWN0aW9uIHdoaWNoIHdpbGwgYmUgdHJpZ2dlcmVkICovCisJY2FzZSBCVENfU0VUX0FDVF9HRVRfQlRfUlNTSToKKwkJLypCVEhDSV9TZW5kR2V0QnRSc3NpRXZlbnQocnRscHJpdik7Ki8KKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0FDVF9BR0dSRUdBVEVfQ1RSTDoKKwkJaGFsYnRjX2FnZ3JlZ2F0aW9uX2NoZWNrKGJ0Y29leGlzdCk7CisJCWJyZWFrOworCisJCS8qIDFBbnQgKi8KKwljYXNlIEJUQ19TRVRfVTFfUlNTSV9BREpfVkFMX0ZPUl8xQU5UX0NPRVhfVFlQRToKKwkJYnRjb2V4aXN0LT5idF9pbmZvLnJzc2lfYWRqdXN0X2Zvcl8xYW50X2NvZXhfdHlwZSA9ICp1OF90bXA7CisJCWJyZWFrOworCWNhc2UgQlRDX1NFVF9VMV9MUFNfVkFMOgorCQlidGNvZXhpc3QtPmJ0X2luZm8ubHBzX3ZhbCA9ICp1OF90bXA7CisJCWJyZWFrOworCWNhc2UgQlRDX1NFVF9VMV9SUFdNX1ZBTDoKKwkJYnRjb2V4aXN0LT5idF9pbmZvLnJwd21fdmFsID0gKnU4X3RtcDsKKwkJYnJlYWs7CisJLyogdGhlIGZvbGxvd2luZyBhcmUgc29tZSBhY3Rpb24gd2hpY2ggd2lsbCBiZSB0cmlnZ2VyZWQgICovCisJY2FzZSBCVENfU0VUX0FDVF9MRUFWRV9MUFM6CisJCWhhbGJ0Y19sZWF2ZV9scHMoYnRjb2V4aXN0KTsKKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0FDVF9FTlRFUl9MUFM6CisJCWhhbGJ0Y19lbnRlcl9scHMoYnRjb2V4aXN0KTsKKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0FDVF9OT1JNQUxfTFBTOgorCQloYWxidGNfbm9ybWFsX2xwcyhidGNvZXhpc3QpOworCQlicmVhazsKKwljYXNlIEJUQ19TRVRfQUNUX0RJU0FCTEVfTE9XX1BPV0VSOgorCQlicmVhazsKKwljYXNlIEJUQ19TRVRfQUNUX1VQREFURV9yYV9tYXNrOgorCQlidGNvZXhpc3QtPmJ0X2luZm8ucmFfbWFzayA9ICp1MzJfdG1wOworCQlicmVhazsKKwljYXNlIEJUQ19TRVRfQUNUX1NFTkRfTUlNT19QUzoKKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0FDVF9JTkNfRk9SQ0VfRVhFQ19QV1JfQ01EX0NOVDoKKwkJYnRjb2V4aXN0LT5idF9pbmZvLmZvcmNlX2V4ZWNfcHdyX2NtZF9jbnQrKzsKKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0FDVF9DVFJMX0JUX0lORk86IC8qd2FpdCBmb3IgODgxMi84ODIxKi8KKwkJYnJlYWs7CisJY2FzZSBCVENfU0VUX0FDVF9DVFJMX0JUX0NPRVg6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBoYWxidGNfZGlzcGxheV9jb2V4X3N0YXRpc3RpY3Moc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19kaXNwbGF5X2J0X2xpbmtfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKK30KKworc3RhdGljIHZvaWQgaGFsYnRjX2Rpc3BsYXlfYnRfZndfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3sKK30KKworc3RhdGljIHZvaWQgaGFsYnRjX2Rpc3BsYXlfZndfcHdyX21vZGVfY21kKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJSU8gcmVsYXRlZCBmdW5jdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1OCBoYWxidGNfcmVhZF8xYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisKKwlyZXR1cm4JcnRsX3JlYWRfYnl0ZShydGxwcml2LCByZWdfYWRkcik7Cit9CisKKworc3RhdGljIHUxNiBoYWxidGNfcmVhZF8yYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisKKwlyZXR1cm4JcnRsX3JlYWRfd29yZChydGxwcml2LCByZWdfYWRkcik7Cit9CisKKworc3RhdGljIHUzMiBoYWxidGNfcmVhZF80Ynl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisKKwlyZXR1cm4JcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgcmVnX2FkZHIpOworfQorCisKK3N0YXRpYyB2b2lkIGhhbGJ0Y193cml0ZV8xYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCByZWdfYWRkciwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19iaXRtYXNrX3dyaXRlXzFieXRlKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwKKwkJCQkgICAgICAgdTggYml0X21hc2ssIHU4IGRhdGEpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJdTggb3JpZ2luYWxfdmFsdWUsIGJpdF9zaGlmdCA9IDA7CisJdTggaTsKKworCWlmIChiaXRfbWFzayAhPSBNQVNLQllURTApIHsvKmlmIG5vdCAiYnl0ZSIgd3JpdGUqLworCQlvcmlnaW5hbF92YWx1ZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgcmVnX2FkZHIpOworCQlmb3IgKGkgPSAwOyBpIDw9IDc7IGkrKykgeworCQkJaWYgKChiaXRfbWFzaz4+aSkmMHgxKQorCQkJCWJyZWFrOworCQl9CisJCWJpdF9zaGlmdCA9IGk7CisJCWRhdGEgPSAob3JpZ2luYWxfdmFsdWUgJiAofmJpdF9tYXNrKSkgfAorCQkJKChkYXRhIDw8IGJpdF9zaGlmdCkgJiBiaXRfbWFzayk7CisJfQorCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJlZ19hZGRyLCBkYXRhKTsKK30KKworCitzdGF0aWMgdm9pZCBoYWxidGNfd3JpdGVfMmJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyLCB1MTYgZGF0YSkKK3sKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIHJlZ19hZGRyLCBkYXRhKTsKK30KKworCitzdGF0aWMgdm9pZCBoYWxidGNfd3JpdGVfNGJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9CisJCShzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCByZWdfYWRkciwgZGF0YSk7Cit9CisKKworc3RhdGljIHZvaWQgaGFsYnRjX3NldF9iYnJlZyh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsCisJCQkgICAgIHUzMiBiaXRfbWFzaywgdTMyIGRhdGEpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisKKwlydGxfc2V0X2JicmVnKHJ0bHByaXYtPm1hYzgwMjExLmh3LCByZWdfYWRkciwgYml0X21hc2ssIGRhdGEpOworfQorCisKK3N0YXRpYyB1MzIgaGFsYnRjX2dldF9iYnJlZyh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHUzMiBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKworCXJldHVybiBydGxfZ2V0X2JicmVnKHJ0bHByaXYtPm1hYzgwMjExLmh3LCByZWdfYWRkciwgYml0X21hc2spOworfQorCisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19zZXRfcmZyZWcodm9pZCAqYnRfY29udGV4dCwgdTggcmZfcGF0aCwgdTMyIHJlZ19hZGRyLAorCQkJICAgICB1MzIgYml0X21hc2ssIHUzMiBkYXRhKQoreworCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKWJ0X2NvbnRleHQ7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCisJcnRsX3NldF9yZnJlZyhydGxwcml2LT5tYWM4MDIxMS5odywgcmZfcGF0aCwgcmVnX2FkZHIsIGJpdF9tYXNrLCBkYXRhKTsKK30KKworCitzdGF0aWMgdTMyIGhhbGJ0Y19nZXRfcmZyZWcodm9pZCAqYnRfY29udGV4dCwgdTggcmZfcGF0aCwgdTMyIHJlZ19hZGRyLAorCQkJICAgIHUzMiBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKworCXJldHVybiBydGxfZ2V0X3JmcmVnKHJ0bHByaXYtPm1hYzgwMjExLmh3LCByZl9wYXRoLCByZWdfYWRkciwgYml0X21hc2spOworfQorCisKK3N0YXRpYyB2b2lkIGhhbGJ0Y19maWxsX2gyY19jbWQodm9pZCAqYnRfY29udGV4dCwgdTggZWxlbWVudF9pZCwKKwkJCQl1MzIgY21kX2xlbiwgdTggKmNtZF9idWYpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisKKwlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF9oMmNfY21kKHJ0bHByaXYtPm1hYzgwMjExLmh3LCBlbGVtZW50X2lkLAorCQkJCQljbWRfbGVuLCBjbWRfYnVmKTsKK30KKworc3RhdGljIHZvaWQgaGFsYnRjX2Rpc3BsYXlfZGJnX21zZyh2b2lkICpidF9jb250ZXh0LCB1OCBkaXNwX3R5cGUpCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPQkoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKKwlzd2l0Y2ggKGRpc3BfdHlwZSkgeworCWNhc2UgQlRDX0RCR19ESVNQX0NPRVhfU1RBVElTVElDUzoKKwkJaGFsYnRjX2Rpc3BsYXlfY29leF9zdGF0aXN0aWNzKGJ0Y29leGlzdCk7CisJCWJyZWFrOworCWNhc2UgQlRDX0RCR19ESVNQX0JUX0xJTktfSU5GTzoKKwkJaGFsYnRjX2Rpc3BsYXlfYnRfbGlua19pbmZvKGJ0Y29leGlzdCk7CisJCWJyZWFrOworCWNhc2UgQlRDX0RCR19ESVNQX0JUX0ZXX1ZFUjoKKwkJaGFsYnRjX2Rpc3BsYXlfYnRfZndfaW5mbyhidGNvZXhpc3QpOworCQlicmVhazsKKwljYXNlIEJUQ19EQkdfRElTUF9GV19QV1JfTU9ERV9DTUQ6CisJCWhhbGJ0Y19kaXNwbGF5X2Z3X3B3cl9tb2RlX2NtZChidGNvZXhpc3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBib29sIGhhbGJ0Y191bmRlcl9pcHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxwcml2KTsKKwllbnVtIHJmX3B3cnN0YXRlIHJ0c3RhdGU7CisKKwlpZiAocHBzYy0+Yl9pbmFjdGl2ZXBzKSB7CisJCXJ0c3RhdGUgPSBwcHNjLT5yZnB3cl9zdGF0ZTsKKworCQlpZiAocnRzdGF0ZSAhPSBFUkZPTiAmJgorCQkgICAgcHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBFeHRlcm4gZnVuY3Rpb25zIGNhbGxlZCBieSBvdGhlciBtb2R1bGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2Jvb2wgZXhoYWxidGM5MmVfaW5pdGxpemVfdmFyaWFibGVzKHN0cnVjdCBydGxfcHJpdiAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9ICZnbDkyZV9idF9jb2V4aXN0OworCisJYnRjb2V4aXN0LT5zdGF0aXN0aWNzLmNudF9iaW5kKys7CisKKwloYWxidGNfZGJnX2luaXQoKTsKKworCWlmIChidGNvZXhpc3QtPmJpbmRlZCkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJYnRjb2V4aXN0LT5iaW5kZWQgPSB0cnVlOworCisJYnRjb2V4aXN0LT5jaGlwX2ludGVyZmFjZSA9IEJUQ19JTlRGX1VOS05PV047CisKKwlpZiAoTlVMTCA9PSBidGNvZXhpc3QtPmFkYXB0ZXIpCisJCWJ0Y29leGlzdC0+YWRhcHRlciA9IGFkYXB0ZXI7CisKKwlidGNvZXhpc3QtPnN0YWNrX2luZm8ucHJvZmlsZV9ub3RpZmllZCA9IGZhbHNlOworCisJYnRjb2V4aXN0LT5idGNfcmVhZF8xYnl0ZSA9IGhhbGJ0Y19yZWFkXzFieXRlOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlID0gaGFsYnRjX3dyaXRlXzFieXRlOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2sgPSBoYWxidGNfYml0bWFza193cml0ZV8xYnl0ZTsKKwlidGNvZXhpc3QtPmJ0Y19yZWFkXzJieXRlID0gaGFsYnRjX3JlYWRfMmJ5dGU7CisJYnRjb2V4aXN0LT5idGNfd3JpdGVfMmJ5dGUgPSBoYWxidGNfd3JpdGVfMmJ5dGU7CisJYnRjb2V4aXN0LT5idGNfcmVhZF80Ynl0ZSA9IGhhbGJ0Y19yZWFkXzRieXRlOworCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlID0gaGFsYnRjX3dyaXRlXzRieXRlOworCisJYnRjb2V4aXN0LT5idGNfc2V0X2JiX3JlZyA9IGhhbGJ0Y19zZXRfYmJyZWc7CisJYnRjb2V4aXN0LT5idGNfZ2V0X2JiX3JlZyA9IGhhbGJ0Y19nZXRfYmJyZWc7CisKKwlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnID0gaGFsYnRjX3NldF9yZnJlZzsKKwlidGNvZXhpc3QtPmJ0Y19nZXRfcmZfcmVnID0gaGFsYnRjX2dldF9yZnJlZzsKKworCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjID0gaGFsYnRjX2ZpbGxfaDJjX2NtZDsKKwlidGNvZXhpc3QtPmJ0Y19kaXNwX2RiZ19tc2cgPSBoYWxidGNfZGlzcGxheV9kYmdfbXNnOworCisJYnRjb2V4aXN0LT5idGNfZ2V0ID0gaGFsYnRjX2dldDsKKwlidGNvZXhpc3QtPmJ0Y19zZXQgPSBoYWxidGNfc2V0OworCisJYnRjb2V4aXN0LT5jbGlfYnVmID0gJmJ0Y19kYmdfYnVmWzBdOworCisJYnRjb2V4aXN0LT5idF9pbmZvLmJfYnRfY3RybF9idWZfc2l6ZSA9IGZhbHNlOworCWJ0Y29leGlzdC0+YnRfaW5mby5hZ2dfYnVmX3NpemUgPSA1OworCisJYnRjb2V4aXN0LT5idF9pbmZvLmluY3JlYXNlX3NjYW5fZGV2X251bSA9IGZhbHNlOworCXJldHVybiB0cnVlOworfQorCit2b2lkIGV4aGFsYnRjOTJlX2luaXRfaHdfY29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfaW5pdF9od19jb25maWcrKzsKKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4NzIzQkUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9pbml0X2h3Y29uZmlnKGJ0Y29leGlzdCk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9pbml0X2h3Y29uZmlnKGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpIHsKKwkJZXhfaGFsYnRjODE5MmUyYW50X2luaXRfaHdjb25maWcoYnRjb2V4aXN0KTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MjFBRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXhfaGFsYnRjODgyMWEyYW50X2luaXRfaHdjb25maWcoYnRjb2V4aXN0KTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODgyMWExYW50X2luaXRfaHdjb25maWcoYnRjb2V4aXN0KTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfaW5pdF9jb2V4X2RtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfaW5pdF9jb2V4X2RtKys7CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfaW5pdF9jb2V4X2RtKGJ0Y29leGlzdCk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9pbml0X2NvZXhfZG0oYnRjb2V4aXN0KTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJFRSkgeworCQlleF9oYWxidGM4MTkyZTJhbnRfaW5pdF9jb2V4X2RtKGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4ODIxQUUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4X2hhbGJ0Yzg4MjFhMmFudF9pbml0X2NvZXhfZG0oYnRjb2V4aXN0KTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODgyMWExYW50X2luaXRfY29leF9kbShidGNvZXhpc3QpOworCX0KKworCWJ0Y29leGlzdC0+aW5pdGlsaXplZCA9IHRydWU7Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJdTggaXBzX3R5cGU7CisKKwlpZiAoIWhhbGJ0Y19pc19idF9jb2V4aXN0X2F2YWlsYWJsZShidGNvZXhpc3QpKQorCQlyZXR1cm47CisJYnRjb2V4aXN0LT5zdGF0aXN0aWNzLmNudF9pcHNfbm90aWZ5Kys7CisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpCisJCXJldHVybjsKKworCWlmIChFUkZPRkYgPT0gdHlwZSkKKwkJaXBzX3R5cGUgPSBCVENfSVBTX0VOVEVSOworCWVsc2UKKwkJaXBzX3R5cGUgPSBCVENfSVBTX0xFQVZFOworCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg3MjNCRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXg5MmVfaGFsYnRjODcyM2IyYW50X2lwc19ub3RpZnkoYnRjb2V4aXN0LCBpcHNfdHlwZSk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9pcHNfbm90aWZ5KGJ0Y29leGlzdCwgaXBzX3R5cGUpOworCX0gZWxzZSBpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MkVFKSB7CisJCWV4X2hhbGJ0YzgxOTJlMmFudF9pcHNfbm90aWZ5KGJ0Y29leGlzdCwgaXBzX3R5cGUpOworCX0gZWxzZSBpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgyMUFFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleF9oYWxidGM4ODIxYTJhbnRfaXBzX25vdGlmeShidGNvZXhpc3QsIGlwc190eXBlKTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODgyMWExYW50X2lwc19ub3RpZnkoYnRjb2V4aXN0LCBpcHNfdHlwZSk7CisJfQorfQorCit2b2lkIGV4aGFsYnRjOTJlX2xwc19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXU4IGxwc190eXBlOworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfbHBzX25vdGlmeSsrOworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sKQorCQlyZXR1cm47CisKKwlpZiAoRUFDVElWRSA9PSB0eXBlKQorCQlscHNfdHlwZSA9IEJUQ19MUFNfRElTQUJMRTsKKwllbHNlCisJCWxwc190eXBlID0gQlRDX0xQU19FTkFCTEU7CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfbHBzX25vdGlmeShidGNvZXhpc3QsIGxwc190eXBlKTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODcyM2IxYW50X2xwc19ub3RpZnkoYnRjb2V4aXN0LCBscHNfdHlwZSk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpIHsKKwkJZXhfaGFsYnRjODE5MmUyYW50X2xwc19ub3RpZnkoYnRjb2V4aXN0LCBscHNfdHlwZSk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4ODIxQUUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4X2hhbGJ0Yzg4MjFhMmFudF9scHNfbm90aWZ5KGJ0Y29leGlzdCwgbHBzX3R5cGUpOworCQllbHNlIGlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpCisJCQlleF9oYWxidGM4ODIxYTFhbnRfbHBzX25vdGlmeShidGNvZXhpc3QsIGxwc190eXBlKTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfc2Nhbl9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXU4IHNjYW5fdHlwZTsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKwlidGNvZXhpc3QtPnN0YXRpc3RpY3MuY250X3NjYW5fbm90aWZ5Kys7CisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpCisJCXJldHVybjsKKworCWlmICh0eXBlKQorCQlzY2FuX3R5cGUgPSBCVENfU0NBTl9TVEFSVDsKKwllbHNlCisJCXNjYW5fdHlwZSA9IEJUQ19TQ0FOX0ZJTklTSDsKKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4NzIzQkUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9zY2FuX25vdGlmeShidGNvZXhpc3QsIHNjYW5fdHlwZSk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9zY2FuX25vdGlmeShidGNvZXhpc3QsIHNjYW5fdHlwZSk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpIHsKKwkJZXhfaGFsYnRjODE5MmUyYW50X3NjYW5fbm90aWZ5KGJ0Y29leGlzdCwgc2Nhbl90eXBlKTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MjFBRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXhfaGFsYnRjODgyMWEyYW50X3NjYW5fbm90aWZ5KGJ0Y29leGlzdCwgc2Nhbl90eXBlKTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODgyMWExYW50X3NjYW5fbm90aWZ5KGJ0Y29leGlzdCwgc2Nhbl90eXBlKTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfY29ubmVjdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IGFjdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJdTggYXNzb190eXBlOworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfY29ubmVjdF9ub3RpZnkrKzsKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkKKwkJcmV0dXJuOworCisJaWYgKGFjdGlvbikKKwkJYXNzb190eXBlID0gQlRDX0FTU09DSUFURV9TVEFSVDsKKwllbHNlCisJCWFzc29fdHlwZSA9IEJUQ19BU1NPQ0lBVEVfRklOSVNIOworCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg3MjNCRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXg5MmVfaGFsYnRjODcyM2IyYW50X2Nvbm5lY3Rfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkgICAgIGFzc29fdHlwZSk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9jb25uZWN0X25vdGlmeShidGNvZXhpc3QsIGFzc29fdHlwZSk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpIHsKKwkJZXhfaGFsYnRjODE5MmUyYW50X2Nvbm5lY3Rfbm90aWZ5KGJ0Y29leGlzdCwgYXNzb190eXBlKTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MjFBRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXhfaGFsYnRjODgyMWEyYW50X2Nvbm5lY3Rfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkgIGFzc29fdHlwZSk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg4MjFhMWFudF9jb25uZWN0X25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJICBhc3NvX3R5cGUpOworCX0KK30KKwordm9pZCBleGhhbGJ0YzkyZV9tZWRpYXN0YXR1c19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgIGVudW0gcnRfbWVkaWFfc3RhdHVzIG1lZGlhX3N0YXR1cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJdTggc3RhdHVzOworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfbWVkaWFfc3RhdHVzX25vdGlmeSsrOworCWlmIChidGNvZXhpc3QtPm1hbnVhbF9jb250cm9sKQorCQlyZXR1cm47CisKKwlpZiAoUlRfTUVESUFfQ09OTkVDVCA9PSBtZWRpYV9zdGF0dXMpCisJCXN0YXR1cyA9IEJUQ19NRURJQV9DT05ORUNUOworCWVsc2UKKwkJc3RhdHVzID0gQlRDX01FRElBX0RJU0NPTk5FQ1Q7CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJCSAgc3RhdHVzKTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODcyM2IxYW50X21lZGlhX3N0YXR1c19ub3RpZnkoYnRjb2V4aXN0LAorCQkJCQkJCSAgICAgICBzdGF0dXMpOworCX0gZWxzZSBpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MkVFKSB7CisJCWV4X2hhbGJ0YzgxOTJlMmFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KGJ0Y29leGlzdCwgc3RhdHVzKTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MjFBRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXhfaGFsYnRjODgyMWEyYW50X21lZGlhX3N0YXR1c19ub3RpZnkoYnRjb2V4aXN0LAorCQkJCQkJCSAgICAgICBzdGF0dXMpOworCQllbHNlIGlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpCisJCQlleF9oYWxidGM4ODIxYTFhbnRfbWVkaWFfc3RhdHVzX25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJICAgICAgIHN0YXR1cyk7CisJfQorfQorCit2b2lkIGV4aGFsYnRjOTJlX3NwZWNpYWxfcGFja2V0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggcGt0X3R5cGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXU4IHBhY2tldF90eXBlOworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5Kys7CisJaWYgKGJ0Y29leGlzdC0+bWFudWFsX2NvbnRyb2wpCisJCXJldHVybjsKKworCWlmIChQQUNLRVRfREhDUCA9PSBwa3RfdHlwZSkgeworCQlwYWNrZXRfdHlwZSA9IEJUQ19QQUNLRVRfREhDUDsKKwl9IGVsc2UgaWYgKFBBQ0tFVF9FQVBPTCA9PSBwa3RfdHlwZSkgeworCQlwYWNrZXRfdHlwZSA9IEJUQ19QQUNLRVRfRUFQT0w7CisJfSBlbHNlIGlmIChQQUNLRVRfQVJQID09IHBrdF90eXBlKSB7CisJCXBhY2tldF90eXBlID0gQlRDX1BBQ0tFVF9BUlA7CisJfSBlbHNlIHsKKwkJcGFja2V0X3R5cGUgPSBCVENfUEFDS0VUX1VOS05PV047CisJCXJldHVybjsKKwl9CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkJICAgIHBhY2tldF90eXBlKTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODcyM2IxYW50X3NwZWNpYWxfcGFja2V0X25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJCSBwYWNrZXRfdHlwZSk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4ODIxQUUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4X2hhbGJ0Yzg4MjFhMmFudF9zcGVjaWFsX3BhY2tldF9ub3RpZnkoYnRjb2V4aXN0LAorCQkJCQkJCQkgcGFja2V0X3R5cGUpOworCQllbHNlIGlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpCisJCQlleF9oYWxidGM4ODIxYTFhbnRfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkJIHBhY2tldF90eXBlKTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfYnRfaW5mb19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJdTggKnRtcF9idWYsIHU4IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfYnRfaW5mb19ub3RpZnkrKzsKKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4NzIzQkUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9idF9pbmZvX25vdGlmeShidGNvZXhpc3QsCisJCQkJCQkJICAgICB0bXBfYnVmLCBsZW5ndGgpOworCQllbHNlIGlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpCisJCQlleF9oYWxidGM4NzIzYjFhbnRfYnRfaW5mb19ub3RpZnkoYnRjb2V4aXN0LCB0bXBfYnVmLAorCQkJCQkJCSAgbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJFRSkgeworCQkvKiBleF9oYWxidGM4MTkyZTJhbnRfYnRfaW5mb19ub3RpZnkoYnRjb2V4aXN0LAorCQkJCQkJICAgICB0bXBfYnVmLCBsZW5ndGgpOyAqLworCX0gZWxzZSBpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgyMUFFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleF9oYWxidGM4ODIxYTJhbnRfYnRfaW5mb19ub3RpZnkoYnRjb2V4aXN0LAorCQkJCQkJCSAgdG1wX2J1ZiwgbGVuZ3RoKTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODgyMWExYW50X2J0X2luZm9fbm90aWZ5KGJ0Y29leGlzdCwKKwkJCQkJCQkgIHRtcF9idWYsIGxlbmd0aCk7CisJfQorfQorCit2b2lkIGV4aGFsYnRjOTJlX3N0YWNrX29wZXJhdGlvbl9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpCit7CisJdTggc3RhY2tfb3BfdHlwZTsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKwlidGNvZXhpc3QtPnN0YXRpc3RpY3MuY250X3N0YWNrX29wZXJhdGlvbl9ub3RpZnkrKzsKKwlpZiAoYnRjb2V4aXN0LT5tYW51YWxfY29udHJvbCkKKwkJcmV0dXJuOworCisJaWYgKChIQ0lfQlRfT1BfSU5RVUlSWV9TVEFSVCA9PSB0eXBlKSB8fAorCSAgICAoSENJX0JUX09QX1BBR0lOR19TVEFSVCA9PSB0eXBlKSB8fAorCSAgICAoSENJX0JUX09QX1BBSVJJTkdfU1RBUlQgPT0gdHlwZSkpCisJCXN0YWNrX29wX3R5cGUgPSBCVENfU1RBQ0tfT1BfSU5RX1BBR0VfUEFJUl9TVEFSVDsKKwllbHNlIGlmICgoSENJX0JUX09QX0lOUVVJUllfRklOSVNIID09IHR5cGUpIHx8CisJCSAoSENJX0JUX09QX1BBR0lOR19TVUNDRVNTID09IHR5cGUpIHx8CisJCSAoSENJX0JUX09QX1BBR0lOR19VTlNVQ0NFU1MgPT0gdHlwZSkgfHwKKwkJIChIQ0lfQlRfT1BfUEFJUklOR19GSU5JU0ggPT0gdHlwZSkpCisJCXN0YWNrX29wX3R5cGUgPSBCVENfU1RBQ0tfT1BfSU5RX1BBR0VfUEFJUl9GSU5JU0g7CisJZWxzZQorCQlzdGFja19vcF90eXBlID0gQlRDX1NUQUNLX09QX05PTkU7Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfaGFsdF9ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKworCWJ0Y29leGlzdC0+YmluZGVkID0gZmFsc2U7CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfaGFsdF9ub3RpZnkoYnRjb2V4aXN0KTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODcyM2IxYW50X2hhbHRfbm90aWZ5KGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpIHsKKwkJZXhfaGFsYnRjODE5MmUyYW50X2hhbHRfbm90aWZ5KGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4ODIxQUUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4X2hhbGJ0Yzg4MjFhMmFudF9oYWx0X25vdGlmeShidGNvZXhpc3QpOworCQllbHNlIGlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpCisJCQlleF9oYWxidGM4ODIxYTFhbnRfaGFsdF9ub3RpZnkoYnRjb2V4aXN0KTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfcG5wX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggcG5wX3N0YXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4NzIzQkUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9wbnBfbm90aWZ5KGJ0Y29leGlzdCwgcG5wX3N0YXRlKTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGNfY29leF9kbV9zd2l0Y2goc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKwlidGNvZXhpc3QtPnN0YXRpc3RpY3MuY250X2NvZXhfZG1fc3dpdGNoKys7CisKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpIHsKKwkJCWJ0Y29leGlzdC0+c3RvcF9jb2V4X2RtID0gdHJ1ZTsKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9jb2V4X2RtX3Jlc2V0KGJ0Y29leGlzdCk7CisJCQlleGhhbGJ0YzkyZV9zZXRfYW50X251bShCVF9DT0VYX0FOVF9UWVBFX0RFVEVDVEVELCAyKTsKKwkJCWV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9pbml0X2h3Y29uZmlnKGJ0Y29leGlzdCk7CisJCQlleDkyZV9oYWxidGM4NzIzYjJhbnRfaW5pdF9jb2V4X2RtKGJ0Y29leGlzdCk7CisJCQlidGNvZXhpc3QtPnN0b3BfY29leF9kbSA9IGZhbHNlOworCQl9CisJfQorfQorCit2b2lkIGV4aGFsYnRjOTJlX3BlcmlvZGljYWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKwlidGNvZXhpc3QtPnN0YXRpc3RpY3MuY250X3BlcmlvZGljYWwrKzsKKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4NzIzQkUpIHsKKwkJaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMikKKwkJCWV4OTJlX2hhbGJ0Yzg3MjNiMmFudF9wZXJpb2RpY2FsKGJ0Y29leGlzdCk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9wZXJpb2RpY2FsKGJ0Y29leGlzdCk7CisJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpIHsKKwkJZXhfaGFsYnRjODE5MmUyYW50X3BlcmlvZGljYWwoYnRjb2V4aXN0KTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MjFBRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXhfaGFsYnRjODgyMWEyYW50X3BlcmlvZGljYWwoYnRjb2V4aXN0KTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJaWYgKCFoYWxidGNfdW5kZXJfaXBzKGJ0Y29leGlzdCkpCisJCQkJZXhfaGFsYnRjODgyMWExYW50X3BlcmlvZGljYWwoYnRjb2V4aXN0KTsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfZGJnX2NvbnRyb2woc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkgICAgIHU4IGNvZGUsIHU4IGxlbiwgdTggKmRhdGEpCit7CisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCWJ0Y29leGlzdC0+c3RhdGlzdGljcy5jbnRfZGJnX2N0cmwrKzsKK30KKwordm9pZCBleGhhbGJ0YzkyZV9zdGFja191cGRhdGVfcHJvZmlsZV9pbmZvKHZvaWQpCit7Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfdXBkYXRlX21pbl9idF9yc3NpKGNoYXIgYnRfcnNzaSkKK3sKKwlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9ICZnbDkyZV9idF9jb2V4aXN0OworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCisJYnRjb2V4aXN0LT5zdGFja19pbmZvLm1pbl9idF9yc3NpID0gYnRfcnNzaTsKK30KKworCit2b2lkIGV4aGFsYnRjOTJlX3NldF9oY2lfdmVyc2lvbih1MTYgaGNpX3ZlcnNpb24pCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAmZ2w5MmVfYnRfY29leGlzdDsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKworCWJ0Y29leGlzdC0+c3RhY2tfaW5mby5oY2lfdmVyc2lvbiA9IGhjaV92ZXJzaW9uOworfQorCit2b2lkIGV4aGFsYnRjOTJlX3NldF9idF9wYXRjaF92ZXJzaW9uKHUxNiBidF9oY2lfdmVyc2lvbiwgdTE2IGJ0X3BhdGNoX3ZlcnNpb24pCit7CisJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAmZ2w5MmVfYnRfY29leGlzdDsKKworCWlmICghaGFsYnRjX2lzX2J0X2NvZXhpc3RfYXZhaWxhYmxlKGJ0Y29leGlzdCkpCisJCXJldHVybjsKKworCWJ0Y29leGlzdC0+YnRfaW5mby5idF9yZWFsX2Z3X3ZlciA9IGJ0X3BhdGNoX3ZlcnNpb247CisJYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2hjaV92ZXIgPSBidF9oY2lfdmVyc2lvbjsKK30KKwordm9pZCBleGhhbGJ0YzkyZV9zZXRfYnRfZXhpc3QoYm9vbCBidF9leGlzdCkKK3sKKwlnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRfZXhpc3QgPSBidF9leGlzdDsKK30KKwordm9pZCBleGhhbGJ0YzkyZV9zZXRfY2hpcF90eXBlKHU4IGNoaXBfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoaXBfdHlwZSkgeworCWRlZmF1bHQ6CisJY2FzZSBCVF8yV0lSRToKKwljYXNlIEJUX0lTU0NfM1dJUkU6CisJY2FzZSBCVF9BQ0NFTDoKKwljYXNlIEJUX1JUTDg3NTY6CisJCWdsOTJlX2J0X2NvZXhpc3QuYm9hcmRfaW5mby5idF9jaGlwX3R5cGUgPSBCVENfQ0hJUF9VTkRFRjsKKwkJYnJlYWs7CisJY2FzZSBCVF9DU1JfQkM0OgorCQlnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRfY2hpcF90eXBlID0gQlRDX0NISVBfQ1NSX0JDNDsKKwkJYnJlYWs7CisJY2FzZSBCVF9DU1JfQkM4OgorCQlnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRfY2hpcF90eXBlID0gQlRDX0NISVBfQ1NSX0JDODsKKwkJYnJlYWs7CisJY2FzZSBCVF9SVEw4NzIzQToKKwkJZ2w5MmVfYnRfY29leGlzdC5ib2FyZF9pbmZvLmJ0X2NoaXBfdHlwZSA9IEJUQ19DSElQX1JUTDg3MjNBOworCQlicmVhazsKKwljYXNlIEJUX1JUTDg4MjFBOgorCQlnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRfY2hpcF90eXBlID0gQlRDX0NISVBfUlRMODgyMTsKKwkJYnJlYWs7CisJY2FzZSBCVF9SVEw4NzIzQjoKKwkJZ2w5MmVfYnRfY29leGlzdC5ib2FyZF9pbmZvLmJ0X2NoaXBfdHlwZSA9IEJUQ19DSElQX1JUTDg3MjNCOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfc2V0X2FudF9udW0odTggdHlwZSwgdTggYW50X251bSkKK3sKKwlpZiAoQlRfQ09FWF9BTlRfVFlQRV9QRyA9PSB0eXBlKSB7CisJCWdsOTJlX2J0X2NvZXhpc3QuYm9hcmRfaW5mby5wZ19hbnRfbnVtID0gYW50X251bTsKKwkJZ2w5MmVfYnRfY29leGlzdC5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9IGFudF9udW07CisJCS8qIFRoZSBhbnRlbm5hIHBvc2l0aW9uOgorCQkgKiBNYWluIChkZWZhdWx0KSBvciBBdXggZm9yIHBnQW50TnVtID0gMiAmJiBidGRtQW50TnVtID0gMS4KKwkJICogVGhlIGFudGVubmEgcG9zaXRpb24gc2hvdWxkIGJlIGRldGVybWluZWQgYnkKKwkJICogYXV0by1kZXRlY3QgbWVjaGFuaXNtLgorCQkgKiBUaGUgZm9sbG93aW5nIGlzIGFzc3VtZWQgdG8gbWFpbiwKKwkJICogYW5kIHRob3NlIG11c3QgYmUgbW9kaWZpZWQKKwkJICogaWYgeSBhdXRvLWRldGVjdCBtZWNoYW5pc20gaXMgcmVhZHkKKwkJICovCisJCWlmICgoZ2w5MmVfYnRfY29leGlzdC5ib2FyZF9pbmZvLnBnX2FudF9udW0gPT0gMikgJiYKKwkJICAgIChnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDEpKQorCQkJZ2w5MmVfYnRfY29leGlzdC5ib2FyZF9pbmZvLmJ0ZG1fYW50X3BvcyA9CisJCQkJCQkgICAgICAgQlRDX0FOVEVOTkFfQVRfTUFJTl9QT1JUOworCQllbHNlCisJCQlnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRkbV9hbnRfcG9zID0KKwkJCQkJCSAgICAgICBCVENfQU5URU5OQV9BVF9NQUlOX1BPUlQ7CisJfSBlbHNlIGlmIChCVF9DT0VYX0FOVF9UWVBFX0FOVERJViA9PSB0eXBlKSB7CisJCWdsOTJlX2J0X2NvZXhpc3QuYm9hcmRfaW5mby5idGRtX2FudF9udW0gPSBhbnRfbnVtOworCQlnbDkyZV9idF9jb2V4aXN0LmJvYXJkX2luZm8uYnRkbV9hbnRfcG9zID0KKwkJCQkJCSAgICAgICBCVENfQU5URU5OQV9BVF9NQUlOX1BPUlQ7CisJfSBlbHNlIGlmIChCVF9DT0VYX0FOVF9UWVBFX0RFVEVDVEVEID09IHR5cGUpIHsKKwkJZ2w5MmVfYnRfY29leGlzdC5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9IGFudF9udW07CisJCWdsOTJlX2J0X2NvZXhpc3QuYm9hcmRfaW5mby5idGRtX2FudF9wb3MgPQorCQkJCQkJICAgICAgIEJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVDsKKwl9Cit9CisKK3ZvaWQgZXhoYWxidGM5MmVfZGlzcGxheV9idF9jb2V4X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCisJaWYgKCFoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoYnRjb2V4aXN0KSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg3MjNCRSkgeworCQlpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAyKQorCQkJZXhfaGFsYnRjODcyM2IyYW50OTJlX2Rpc3BsYXlfY29leF9pbmZvKGJ0Y29leGlzdCk7CisJCWVsc2UgaWYgKGJ0Y29leGlzdC0+Ym9hcmRfaW5mby5idGRtX2FudF9udW0gPT0gMSkKKwkJCWV4X2hhbGJ0Yzg3MjNiMWFudF9kaXNwbGF5X2NvZXhfaW5mbyhidGNvZXhpc3QpOworCX0gZWxzZSBpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgyMUFFKSB7CisJCWlmIChidGNvZXhpc3QtPmJvYXJkX2luZm8uYnRkbV9hbnRfbnVtID09IDIpCisJCQlleF9oYWxidGM4ODIxYTJhbnRfZGlzcGxheV9jb2V4X2luZm8oYnRjb2V4aXN0KTsKKwkJZWxzZSBpZiAoYnRjb2V4aXN0LT5ib2FyZF9pbmZvLmJ0ZG1fYW50X251bSA9PSAxKQorCQkJZXhfaGFsYnRjODgyMWExYW50X2Rpc3BsYXlfY29leF9pbmZvKGJ0Y29leGlzdCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9oYWxidGNvdXRzcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE0Mjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmgKQEAgLTAsMCArMSw1MzcgQEAKKyNpZm5kZWYJX19IQUxCVENfT1VUX1NSQ19IX18KKyNkZWZpbmUgX19IQUxCVENfT1VUX1NSQ19IX18KKworI2luY2x1ZGUJIi4uL3dpZmkuaCIKKworI2RlZmluZQkJTk9STUFMX0VYRUMJCQkJZmFsc2UKKyNkZWZpbmUJCUZPUkNFX0VYRUMJCQkJdHJ1ZQorCisjZGVmaW5lCQlCVENfUkZfQQkJCQlSRjkwX1BBVEhfQQorI2RlZmluZQkJQlRDX1JGX0IJCQkJUkY5MF9QQVRIX0IKKyNkZWZpbmUJCUJUQ19SRl9DCQkJCVJGOTBfUEFUSF9DCisjZGVmaW5lCQlCVENfUkZfRAkJCQlSRjkwX1BBVEhfRAorCisjZGVmaW5lCQlCVENfU01TUAkJCQlTSU5HTEVNQUNfU0lOR0xFUEhZCisjZGVmaW5lCQlCVENfRE1EUAkJCQlEVUFMTUFDX0RVQUxQSFkKKyNkZWZpbmUJCUJUQ19ETVNQCQkJCURVQUxNQUNfU0lOR0xFUEhZCisjZGVmaW5lCQlCVENfTVBfVU5LTk9XTgkJCQkweGZmCisKKyNkZWZpbmUJCUlOCisjZGVmaW5lCQlPVVQKKworI2RlZmluZQkJQlRfVE1QX0JVRl9TSVpFCQkJCTEwMAorCisjZGVmaW5lCQlCVF9DT0VYX0FOVF9UWVBFX1BHCQkJMAorI2RlZmluZQkJQlRfQ09FWF9BTlRfVFlQRV9BTlRESVYJCQkxCisjZGVmaW5lCQlCVF9DT0VYX0FOVF9UWVBFX0RFVEVDVEVECQkyCisKKyNkZWZpbmUJCUJUQ19NSU1PX1BTX1NUQVRJQwkJCTAKKyNkZWZpbmUJCUJUQ19NSU1PX1BTX0RZTkFNSUMJCQkxCisKKyNkZWZpbmUJCUJUQ19SQVRFX0RJU0FCTEUJCQkwCisjZGVmaW5lCQlCVENfUkFURV9FTkFCTEUJCQkJMQorCisvKiBzaW5nbGUgQW50ZW5uYSBkZWZpbml0aW9uICovCisjZGVmaW5lCQlCVENfQU5UX1BBVEhfV0lGSQkJCTAKKyNkZWZpbmUJCUJUQ19BTlRfUEFUSF9CVAkJCQkxCisjZGVmaW5lCQlCVENfQU5UX1BBVEhfUFRBCQkJMgorLyogZHVhbCBBbnRlbm5hIGRlZmluaXRpb24gKi8KKyNkZWZpbmUJCUJUQ19BTlRfV0lGSV9BVF9NQUlOCQkJMAorI2RlZmluZQkJQlRDX0FOVF9XSUZJX0FUX0FVWAkJCTEKKy8qIGNvdXBsZXIgQW50ZW5uYSBkZWZpbml0aW9uICovCisjZGVmaW5lCQlCVENfQU5UX1dJRklfQVRfQ1BMX01BSU4JCTAKKyNkZWZpbmUJCUJUQ19BTlRfV0lGSV9BVF9DUExfQVVYCQkJMQorCitlbnVtIGJ0Y19jaGlwX2ludGVyZmFjZSB7CisJQlRDX0lOVEZfVU5LTk9XTgk9IDAsCisJQlRDX0lOVEZfUENJCQk9IDEsCisJQlRDX0lOVEZfVVNCCQk9IDIsCisJQlRDX0lOVEZfU0RJTwkJPSAzLAorCUJUQ19JTlRGX0dTUEkJCT0gNCwKKwlCVENfSU5URl9NQVgKK307CisKK2VudW0gYnRjX2NoaXBfdHlwZSB7CisJQlRDX0NISVBfVU5ERUYJCT0gMCwKKwlCVENfQ0hJUF9DU1JfQkM0CT0gMSwKKwlCVENfQ0hJUF9DU1JfQkM4CT0gMiwKKwlCVENfQ0hJUF9SVEw4NzIzQQk9IDMsCisJQlRDX0NISVBfUlRMODgyMQk9IDQsCisJQlRDX0NISVBfUlRMODcyM0IJPSA1LAorCUJUQ19DSElQX01BWAorfTsKKworZW51bSBidGNfbXNnX3R5cGUgeworCUJUQ19NU0dfSU5URVJGQUNFCT0gMHgwLAorCUJUQ19NU0dfQUxHT1JJVEhNCT0gMHgxLAorCUJUQ19NU0dfTUFYCit9OworCitleHRlcm4gdTMyIGJ0Y185MmVkYmdfdHlwZVtdOworCisvKiBmb2xsb3dpbmcgaXMgZm9yIEJUQ19NU0dfSU5URVJGQUNFICovCisjZGVmaW5lCQlJTlRGX0lOSVQJCQkJQklUKDApCisjZGVmaW5lCQlJTlRGX05PVElGWQkJCQlCSVQoMikKKworLyogZm9sbG93aW5nIGlzIGZvciBCVENfQUxHT1JJVEhNICovCisjZGVmaW5lCQlBTEdPX0JUX1JTU0lfU1RBVEUJCQlCSVQoMCkKKyNkZWZpbmUJCUFMR09fV0lGSV9SU1NJX1NUQVRFCQkJQklUKDEpCisjZGVmaW5lCQlBTEdPX0JUX01PTklUT1IJCQkJQklUKDIpCisjZGVmaW5lCQlBTEdPX1RSQUNFCQkJCUJJVCgzKQorI2RlZmluZQkJQUxHT19UUkFDRV9GVwkJCQlCSVQoNCkKKyNkZWZpbmUJCUFMR09fVFJBQ0VfRldfREVUQUlMCQkJQklUKDUpCisjZGVmaW5lCQlBTEdPX1RSQUNFX0ZXX0VYRUMJCQlCSVQoNikKKyNkZWZpbmUJCUFMR09fVFJBQ0VfU1cJCQkJQklUKDcpCisjZGVmaW5lCQlBTEdPX1RSQUNFX1NXX0RFVEFJTAkJCUJJVCg4KQorI2RlZmluZQkJQUxHT19UUkFDRV9TV19FWEVDCQkJQklUKDkpCisKKy8qIGZvbGxvd2luZyBpcyBmb3Igd2lmaSBsaW5rIHN0YXR1cyAqLworI2RlZmluZQkJV0lGSV9TVEFfQ09OTkVDVEVECQkJQklUKDApCisjZGVmaW5lCQlXSUZJX0FQX0NPTk5FQ1RFRAkJCUJJVCgxKQorI2RlZmluZQkJV0lGSV9IU19DT05ORUNURUQJCQlCSVQoMikKKyNkZWZpbmUJCVdJRklfUDJQX0dPX0NPTk5FQ1RFRAkJCUJJVCgzKQorI2RlZmluZQkJV0lGSV9QMlBfR0NfQ09OTkVDVEVECQkJQklUKDQpCisKKworI2RlZmluZQlDTF9TUFJJTlRGCXNucHJpbnRmCisjZGVmaW5lCUNMX1BSSU5URglwcmludGsKKworI2RlZmluZQlCVENfUFJJTlQoZGJndHlwZSwgZGJnZmxhZywgcHJpbnRzdHIsIC4uLikJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KGJ0Y185MmVkYmdfdHlwZVtkYmd0eXBlXSAmIGRiZ2ZsYWcpKSB7XAorCQkJcHJfZGVidWcocHJpbnRzdHIsICMjX19WQV9BUkdTX18pOwlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZQlCVENfUFJJTlRfRihkYmd0eXBlLCBkYmdmbGFnLCBwcmludHN0ciwgLi4uKQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAodW5saWtlbHkoYnRjXzkyZWRiZ190eXBlW2RiZ3R5cGVdICYgZGJnZmxhZykpIHtcCisJCQlwcl9kZWJ1ZygiJXM6ICIsIF9fZnVuY19fKTsJXAorCQkJcHJfY29udChwcmludHN0ciwgIyNfX1ZBX0FSR1NfXyk7CVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lCUJUQ19QUklOVF9BRERSKGRiZ3R5cGUsIGRiZ2ZsYWcsIHByaW50c3RyLCBfcHRyKQlcCisJZG8gewkJCQkJCQlcCisJCWlmICh1bmxpa2VseShidGNfOTJlZGJnX3R5cGVbZGJndHlwZV0gJiBkYmdmbGFnKSkgewlcCisJCQlpbnQgX19pOwkJCQlcCisJCQl1OCAqX19wdHIgPSAodTggKilfcHRyOwkJCVwKKwkJCXByX2RlYnVnIHByaW50c3RyOwkJCVwKKwkJCWZvciAoX19pID0gMDsgX19pIDwgNjsgX19pKyspCQlcCisJCQkJcHJfY29udCgiJTAyWCVzIiwgX19wdHJbX19pXSwJXAorCQkJCQkoX19pID09IDUpID8gIiIgOiAiLSIpOwlcCisJCQlwcl9kZWJ1ZygiXG4iKTsJCQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQlRDX1BSSU5UX0RBVEEoZGJndHlwZSwgZGJnZmxhZywgX3RpdGxlc3RyaW5nLCBfaGV4ZGF0YSwgX2hleGRhdGFsZW4pIFwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh1bmxpa2VseShidGNfOTJlZGJnX3R5cGVbZGJndHlwZV0gJiBkYmdmbGFnKSkgewlcCisJCQlpbnQgX19pOwkJCQkJXAorCQkJdTggKl9fcHRyID0gKHU4ICopX2hleGRhdGE7CQkJXAorCQkJcHJfZGVidWcoX3RpdGxlc3RyaW5nKTsJCQkJXAorCQkJZm9yIChfX2kgPSAwOyBfX2kgPCAoaW50KV9oZXhkYXRhbGVuOyBfX2krKykgewlcCisJCQkJcHJfY29udCgiJTAyWCVzIiwgX19wdHJbX19pXSwgKCgoX19pICsgMSkgJSA0KSBcCisJCQkJCQkJPT0gMCkgPyAiICAiIDogIiAiKTtcCisJCQkJaWYgKCgoX19pICsgMSkgJSAxNikgPT0gMCkJCVwKKwkJCQkJcHJfY29udCgiXG4iKTsJCQlcCisJCQl9CQkJCQkJXAorCQkJcHJfZGVidWcoIlxuIik7CQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisKKyNkZWZpbmUJQlRDX1JTU0lfSElHSChfcnNzaV8pCVwKKwkoKF9yc3NpXyA9PSBCVENfUlNTSV9TVEFURV9ISUdIIHx8CVwKKwkgIF9yc3NpXyA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0hJR0gpID8gdHJ1ZSA6IGZhbHNlKQorI2RlZmluZQlCVENfUlNTSV9NRURJVU0oX3Jzc2lfKQlcCisJKChfcnNzaV8gPT0gQlRDX1JTU0lfU1RBVEVfTUVESVVNIHx8CVwKKwkgIF9yc3NpXyA9PSBCVENfUlNTSV9TVEFURV9TVEFZX01FRElVTSkgPyB0cnVlIDogZmFsc2UpCisjZGVmaW5lCUJUQ19SU1NJX0xPVyhfcnNzaV8pCVwKKwkoKF9yc3NpXyA9PSBCVENfUlNTSV9TVEFURV9MT1cgfHwJXAorCSAgX3Jzc2lfID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XKSA/IHRydWUgOiBmYWxzZSkKKworCitlbnVtIGJ0Y19wb3dlcl9zYXZlX3R5cGUgeworCUJUQ19QU19XSUZJX05BVElWRSA9IDAsCisJQlRDX1BTX0xQU19PTiA9IDEsCisJQlRDX1BTX0xQU19PRkYgPSAyLAorCUJUQ19QU19MUFNfTUFYCit9OworCitzdHJ1Y3QgYnRjX2JvYXJkX2luZm8geworCS8qIFRoZSBmb2xsb3dpbmcgaXMgc29tZSBib2FyZCBpbmZvcm1hdGlvbiAqLworCXU4IGJ0X2NoaXBfdHlwZTsKKwl1OCBwZ19hbnRfbnVtOwkvKiBwZyBhbnQgbnVtYmVyICovCisJdTggYnRkbV9hbnRfbnVtOwkvKiBhbnQgbnVtYmVyIGZvciBidGRtICovCisJdTggYnRkbV9hbnRfcG9zOworCWJvb2wgYnRfZXhpc3Q7Cit9OworCitlbnVtIGJ0Y19kYmdfb3Bjb2RlIHsKKwlCVENfREJHX1NFVF9DT0VYX05PUk1BTCA9IDB4MCwKKwlCVENfREJHX1NFVF9DT0VYX1dJRklfT05MWSA9IDB4MSwKKwlCVENfREJHX1NFVF9DT0VYX0JUX09OTFkgPSAweDIsCisJQlRDX0RCR19NQVgKK307CisKK2VudW0gYnRjX3Jzc2lfc3RhdGUgeworCUJUQ19SU1NJX1NUQVRFX0hJR0ggPSAweDAsCisJQlRDX1JTU0lfU1RBVEVfTUVESVVNID0gMHgxLAorCUJUQ19SU1NJX1NUQVRFX0xPVyA9IDB4MiwKKwlCVENfUlNTSV9TVEFURV9TVEFZX0hJR0ggPSAweDMsCisJQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0gPSAweDQsCisJQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cgPSAweDUsCisJQlRDX1JTU0lfTUFYCit9OworCitlbnVtIGJ0Y193aWZpX3JvbGUgeworCUJUQ19ST0xFX1NUQVRJT04gPSAweDAsCisJQlRDX1JPTEVfQVAgPSAweDEsCisJQlRDX1JPTEVfSUJTUyA9IDB4MiwKKwlCVENfUk9MRV9IU19NT0RFID0gMHgzLAorCUJUQ19ST0xFX01BWAorfTsKKworZW51bSBidGNfd2lmaV9id19tb2RlIHsKKwlCVENfV0lGSV9CV19MRUdBQ1kgPSAweDAsCisJQlRDX1dJRklfQldfSFQyMCA9IDB4MSwKKwlCVENfV0lGSV9CV19IVDQwID0gMHgyLAorCUJUQ19XSUZJX0JXX01BWAorfTsKKworZW51bSBidGNfd2lmaV90cmFmZmljX2RpciB7CisJQlRDX1dJRklfVFJBRkZJQ19UWCA9IDB4MCwKKwlCVENfV0lGSV9UUkFGRklDX1JYID0gMHgxLAorCUJUQ19XSUZJX1RSQUZGSUNfTUFYCit9OworCitlbnVtIGJ0Y193aWZpX3BucCB7CisJQlRDX1dJRklfUE5QX1dBS0VfVVAgPSAweDAsCisJQlRDX1dJRklfUE5QX1NMRUVQID0gMHgxLAorCUJUQ19XSUZJX1BOUF9NQVgKK307CisKKworZW51bSBidGNfZ2V0X3R5cGUgeworCS8qIHR5cGUgYm9vbCAqLworCUJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLAorCUJUQ19HRVRfQkxfSFNfQ09OTkVDVElORywKKwlCVENfR0VUX0JMX1dJRklfQ09OTkVDVEVELAorCUJUQ19HRVRfQkxfV0lGSV9CVVNZLAorCUJUQ19HRVRfQkxfV0lGSV9TQ0FOLAorCUJUQ19HRVRfQkxfV0lGSV9MSU5LLAorCUJUQ19HRVRfQkxfV0lGSV9ESENQLAorCUJUQ19HRVRfQkxfV0lGSV9TT0ZUQVBfSURMRSwKKwlCVENfR0VUX0JMX1dJRklfU09GVEFQX0xJTktJTkcsCisJQlRDX0dFVF9CTF9XSUZJX0lOX0VBUkxZX1NVU1BFTkQsCisJQlRDX0dFVF9CTF9XSUZJX1JPQU0sCisJQlRDX0dFVF9CTF9XSUZJXzRfV0FZX1BST0dSRVNTLAorCUJUQ19HRVRfQkxfV0lGSV9VTkRFUl81RywKKwlCVENfR0VUX0JMX1dJRklfQVBfTU9ERV9FTkFCTEUsCisJQlRDX0dFVF9CTF9XSUZJX0VOQUJMRV9FTkNSWVBUSU9OLAorCUJUQ19HRVRfQkxfV0lGSV9VTkRFUl9CX01PREUsCisJQlRDX0dFVF9CTF9FWFRfU1dJVENILAorCisJLyogdHlwZSBzNEJ5dGUgKi8KKwlCVENfR0VUX1M0X1dJRklfUlNTSSwKKwlCVENfR0VUX1M0X0hTX1JTU0ksCisKKwkvKiB0eXBlIHUzMiAqLworCUJUQ19HRVRfVTRfV0lGSV9CVywKKwlCVENfR0VUX1U0X1dJRklfVFJBRkZJQ19ESVJFQ1RJT04sCisJQlRDX0dFVF9VNF9XSUZJX0ZXX1ZFUiwKKwlCVENfR0VUX1U0X1dJRklfTElOS19TVEFUVVMsCisJQlRDX0dFVF9VNF9CVF9QQVRDSF9WRVIsCisKKwkvKiB0eXBlIHUxQnl0ZSAqLworCUJUQ19HRVRfVTFfV0lGSV9ET1QxMV9DSE5MLAorCUJUQ19HRVRfVTFfV0lGSV9DRU5UUkFMX0NITkwsCisJQlRDX0dFVF9VMV9XSUZJX0hTX0NITkwsCisJQlRDX0dFVF9VMV9NQUNfUEhZX01PREUsCisJQlRDX0dFVF9VMV9BUF9OVU0sCisKKwkvKiBmb3IgMUFudCAqLworCUJUQ19HRVRfVTFfTFBTX01PREUsCisJQlRDX0dFVF9CTF9CVF9TQ09fQlVTWSwKKworCS8qIGZvciB0ZXN0IG1vZGUgKi8KKwlCVENfR0VUX0RSSVZFUl9URVNUX0NGRywKKwlCVENfR0VUX01BWAorfTsKKworCitlbnVtIGJ0Y19zZXRfdHlwZSB7CisJLyogdHlwZSBib29sICovCisJQlRDX1NFVF9CTF9CVF9ESVNBQkxFLAorCUJUQ19TRVRfQkxfQlRfVFJBRkZJQ19CVVNZLAorCUJUQ19TRVRfQkxfQlRfTElNSVRFRF9ESUcsCisJQlRDX1NFVF9CTF9GT1JDRV9UT19ST0FNLAorCUJUQ19TRVRfQkxfVE9fUkVKX0FQX0FHR19QS1QsCisJQlRDX1NFVF9CTF9CVF9DVFJMX0FHR19TSVpFLAorCUJUQ19TRVRfQkxfSU5DX1NDQU5fREVWX05VTSwKKworCS8qIHR5cGUgdTFCeXRlICovCisJQlRDX1NFVF9VMV9SU1NJX0FESl9WQUxfRk9SX0FHQ19UQUJMRV9PTiwKKwlCVENfU0VUX1UxX0FHR19CVUZfU0laRSwKKworCS8qIHR5cGUgdHJpZ2dlciBzb21lIGFjdGlvbiAqLworCUJUQ19TRVRfQUNUX0dFVF9CVF9SU1NJLAorCUJUQ19TRVRfQUNUX0FHR1JFR0FURV9DVFJMLAorCisJLyoqKioqKioqKiBmb3IgMUFudCAqKioqKioqKioqLworCS8qIHR5cGUgYm9vbCAqLworCUJUQ19TRVRfQkxfQlRfU0NPX0JVU1ksCisJLyogdHlwZSB1MUJ5dGUgKi8KKwlCVENfU0VUX1UxX1JTU0lfQURKX1ZBTF9GT1JfMUFOVF9DT0VYX1RZUEUsCisJQlRDX1NFVF9VMV9MUFNfVkFMLAorCUJUQ19TRVRfVTFfUlBXTV9WQUwsCisJQlRDX1NFVF9VMV8xQU5UX0xQUywKKwlCVENfU0VUX1UxXzFBTlRfUlBXTSwKKwkvKiB0eXBlIHRyaWdnZXIgc29tZSBhY3Rpb24gKi8KKwlCVENfU0VUX0FDVF9MRUFWRV9MUFMsCisJQlRDX1NFVF9BQ1RfRU5URVJfTFBTLAorCUJUQ19TRVRfQUNUX05PUk1BTF9MUFMsCisJQlRDX1NFVF9BQ1RfSU5DX0ZPUkNFX0VYRUNfUFdSX0NNRF9DTlQsCisJQlRDX1NFVF9BQ1RfRElTQUJMRV9MT1dfUE9XRVIsCisJQlRDX1NFVF9BQ1RfVVBEQVRFX3JhX21hc2ssCisJQlRDX1NFVF9BQ1RfU0VORF9NSU1PX1BTLAorCS8qIEJUIENvZXggcmVsYXRlZCAqLworCUJUQ19TRVRfQUNUX0NUUkxfQlRfSU5GTywKKwlCVENfU0VUX0FDVF9DVFJMX0JUX0NPRVgsCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlCVENfU0VUX01BWAorfTsKKworZW51bSBidGNfZGJnX2Rpc3BfdHlwZSB7CisJQlRDX0RCR19ESVNQX0NPRVhfU1RBVElTVElDUyA9IDB4MCwKKwlCVENfREJHX0RJU1BfQlRfTElOS19JTkZPID0gMHgxLAorCUJUQ19EQkdfRElTUF9CVF9GV19WRVIgPSAweDIsCisJQlRDX0RCR19ESVNQX0ZXX1BXUl9NT0RFX0NNRCA9IDB4MywKKwlCVENfREJHX0RJU1BfTUFYCit9OworCitlbnVtIGJ0Y19ub3RpZnlfdHlwZV9pcHMgeworCUJUQ19JUFNfTEVBVkUgPSAweDAsCisJQlRDX0lQU19FTlRFUiA9IDB4MSwKKwlCVENfSVBTX01BWAorfTsKKworZW51bSBidGNfbm90aWZ5X3R5cGVfbHBzIHsKKwlCVENfTFBTX0RJU0FCTEUgPSAweDAsCisJQlRDX0xQU19FTkFCTEUgPSAweDEsCisJQlRDX0xQU19NQVgKK307CisKK2VudW0gYnRjX25vdGlmeV90eXBlX3NjYW4geworCUJUQ19TQ0FOX0ZJTklTSCA9IDB4MCwKKwlCVENfU0NBTl9TVEFSVCA9IDB4MSwKKwlCVENfU0NBTl9NQVgKK307CisKK2VudW0gYnRjX25vdGlmeV90eXBlX2Fzc29jaWF0ZSB7CisJQlRDX0FTU09DSUFURV9GSU5JU0ggPSAweDAsCisJQlRDX0FTU09DSUFURV9TVEFSVCA9IDB4MSwKKwlCVENfQVNTT0NJQVRFX01BWAorfTsKKworZW51bSBidGNfbm90aWZ5X3R5cGVfbWVkaWFfc3RhdHVzIHsKKwlCVENfTUVESUFfRElTQ09OTkVDVCA9IDB4MCwKKwlCVENfTUVESUFfQ09OTkVDVCA9IDB4MSwKKwlCVENfTUVESUFfTUFYCit9OworCitlbnVtIGJ0Y19ub3RpZnlfdHlwZV9zcGVjaWFsX3BhY2tldCB7CisJQlRDX1BBQ0tFVF9VTktOT1dOID0gMHgwLAorCUJUQ19QQUNLRVRfREhDUCA9IDB4MSwKKwlCVENfUEFDS0VUX0FSUCA9IDB4MiwKKwlCVENfUEFDS0VUX0VBUE9MID0gMHgzLAorCUJUQ19QQUNLRVRfTUFYCit9OworCitlbnVtIGhjaV9leHRfYnRfb3BlcmF0aW9uIHsKKwlIQ0lfQlRfT1BfTk9ORSA9IDB4MCwKKwlIQ0lfQlRfT1BfSU5RVUlSWV9TVEFSVCA9IDB4MSwKKwlIQ0lfQlRfT1BfSU5RVUlSWV9GSU5JU0ggPSAweDIsCisJSENJX0JUX09QX1BBR0lOR19TVEFSVCA9IDB4MywKKwlIQ0lfQlRfT1BfUEFHSU5HX1NVQ0NFU1MgPSAweDQsCisJSENJX0JUX09QX1BBR0lOR19VTlNVQ0NFU1MgPSAweDUsCisJSENJX0JUX09QX1BBSVJJTkdfU1RBUlQgPSAweDYsCisJSENJX0JUX09QX1BBSVJJTkdfRklOSVNIID0gMHg3LAorCUhDSV9CVF9PUF9CVF9ERVZfRU5BQkxFID0gMHg4LAorCUhDSV9CVF9PUF9CVF9ERVZfRElTQUJMRSA9IDB4OSwKKwlIQ0lfQlRfT1BfTUFYCit9OworCitlbnVtIGJ0Y19ub3RpZnlfdHlwZV9zdGFja19vcGVyYXRpb24geworCUJUQ19TVEFDS19PUF9OT05FID0gMHgwLAorCUJUQ19TVEFDS19PUF9JTlFfUEFHRV9QQUlSX1NUQVJUID0gMHgxLAorCUJUQ19TVEFDS19PUF9JTlFfUEFHRV9QQUlSX0ZJTklTSCA9IDB4MiwKKwlCVENfU1RBQ0tfT1BfTUFYCit9OworCisKK3N0cnVjdCBidGNfYnRfaW5mbyB7CisJYm9vbCBidF9kaXNhYmxlZDsKKwl1OCByc3NpX2FkanVzdF9mb3JfYWdjX3RhYmxlX29uOworCXU4IHJzc2lfYWRqdXN0X2Zvcl8xYW50X2NvZXhfdHlwZTsKKwlib29sIGJ0X2J1c3k7CisJdTggYWdnX2J1Zl9zaXplOworCWJvb2wgbGltaXRlZF9kaWc7CisJYm9vbCByZWplY3RfYWdnX3BrdDsKKwlib29sIGJfYnRfY3RybF9idWZfc2l6ZTsKKwlib29sIGluY3JlYXNlX3NjYW5fZGV2X251bTsKKwl1MTYgYnRfaGNpX3ZlcjsKKwl1MTYgYnRfcmVhbF9md192ZXI7CisJdTggYnRfZndfdmVyOworCisJYm9vbCBidF9kaXNhYmxlX2xvd19wd3I7CisKKwkvKiB0aGUgZm9sbG93aW5nIGlzIGZvciAxQW50IHNvbHV0aW9uICovCisJYm9vbCBidF9jdHJsX2xwczsKKwlib29sIGJ0X3B3cl9zYXZlX21vZGU7CisJYm9vbCBidF9scHNfb247CisJYm9vbCBmb3JjZV90b19yb2FtOworCXU4IGZvcmNlX2V4ZWNfcHdyX2NtZF9jbnQ7CisJdTggbHBzX3ZhbDsKKwl1OCBycHdtX3ZhbDsKKwl1MzIgcmFfbWFzazsKK307CisKK3N0cnVjdCBidGNfc3RhY2tfaW5mbyB7CisJYm9vbCBwcm9maWxlX25vdGlmaWVkOworCXUxNiBoY2lfdmVyc2lvbjsJLyogc3RhY2sgaGNpIHZlcnNpb24gKi8KKwl1OCBudW1fb2ZfbGluazsKKwlib29sIGJ0X2xpbmtfZXhpc3Q7CisJYm9vbCBzY29fZXhpc3Q7CisJYm9vbCBhY2xfZXhpc3Q7CisJYm9vbCBhMmRwX2V4aXN0OworCWJvb2wgaGlkX2V4aXN0OworCXU4IG51bV9vZl9oaWQ7CisJYm9vbCBwYW5fZXhpc3Q7CisJYm9vbCB1bmtub3duX2FjbF9leGlzdDsKKwljaGFyIG1pbl9idF9yc3NpOworfTsKKworc3RydWN0IGJ0Y19zdGF0aXN0aWNzIHsKKwl1MzIgY250X2JpbmQ7CisJdTMyIGNudF9pbml0X2h3X2NvbmZpZzsKKwl1MzIgY250X2luaXRfY29leF9kbTsKKwl1MzIgY250X2lwc19ub3RpZnk7CisJdTMyIGNudF9scHNfbm90aWZ5OworCXUzMiBjbnRfc2Nhbl9ub3RpZnk7CisJdTMyIGNudF9jb25uZWN0X25vdGlmeTsKKwl1MzIgY250X21lZGlhX3N0YXR1c19ub3RpZnk7CisJdTMyIGNudF9zcGVjaWFsX3BhY2tldF9ub3RpZnk7CisJdTMyIGNudF9idF9pbmZvX25vdGlmeTsKKwl1MzIgY250X3BlcmlvZGljYWw7CisJdTMyIGNudF9jb2V4X2RtX3N3aXRjaDsKKwl1MzIgY250X3N0YWNrX29wZXJhdGlvbl9ub3RpZnk7CisJdTMyIGNudF9kYmdfY3RybDsKK307CisKK3N0cnVjdCBidGNfYnRfbGlua19pbmZvIHsKKwlib29sIGJ0X2xpbmtfZXhpc3Q7CisJYm9vbCBzY29fZXhpc3Q7CisJYm9vbCBzY29fb25seTsKKwlib29sIGEyZHBfZXhpc3Q7CisJYm9vbCBhMmRwX29ubHk7CisJYm9vbCBoaWRfZXhpc3Q7CisJYm9vbCBoaWRfb25seTsKKwlib29sIHBhbl9leGlzdDsKKwlib29sIHBhbl9vbmx5OworfTsKKworZW51bSBidGNfYW50ZW5uYV9wb3MgeworCUJUQ19BTlRFTk5BX0FUX01BSU5fUE9SVCA9IDB4MSwKKwlCVENfQU5URU5OQV9BVF9BVVhfUE9SVCA9IDB4MiwKK307CisKK3N0cnVjdCBidGNfY29leGlzdCB7CisJLyogbWFrZSBzdXJlIG9ubHkgb25lIGFkYXB0ZXIgY2FuIGJpbmQgdGhlIGRhdGEgY29udGV4dCAgKi8KKwlib29sIGJpbmRlZDsKKwkvKiBkZWZhdWx0IGFkYXB0ZXIgKi8KKwl2b2lkICphZGFwdGVyOworCXN0cnVjdCBidGNfYm9hcmRfaW5mbyBib2FyZF9pbmZvOworCS8qIHNvbWUgYnQgaW5mbyByZWZlcmVuY2VkIGJ5IG5vbi1idCBtb2R1bGUgKi8KKwlzdHJ1Y3QgYnRjX2J0X2luZm8gYnRfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gc3RhY2tfaW5mbzsKKwllbnVtIGJ0Y19jaGlwX2ludGVyZmFjZQljaGlwX2ludGVyZmFjZTsKKwlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyBidF9saW5rX2luZm87CisKKwlib29sIGluaXRpbGl6ZWQ7CisJYm9vbCBzdG9wX2NvZXhfZG07CisJYm9vbCBtYW51YWxfY29udHJvbDsKKwl1OCAqY2xpX2J1ZjsKKwlzdHJ1Y3QgYnRjX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKKwl1OCBwd3JfbW9kZV92YWxbMTBdOworCisJLyogZnVuY3Rpb24gcG9pbnRlcnMgaW8gcmVsYXRlZCAqLworCXU4ICgqYnRjX3JlYWRfMWJ5dGUpKHZvaWQgKmJ0Y19jb250ZXh0LCB1MzIgcmVnX2FkZHIpOworCXZvaWQgKCpidGNfd3JpdGVfMWJ5dGUpKHZvaWQgKmJ0Y19jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHU4IGRhdGEpOworCXZvaWQgKCpidGNfd3JpdGVfMWJ5dGVfYml0bWFzaykodm9pZCAqYnRjX2NvbnRleHQsIHUzMiByZWdfYWRkciwKKwkJCQkJdTggYml0X21hc2ssIHU4IGRhdGExYik7CisJdTE2ICgqYnRjX3JlYWRfMmJ5dGUpKHZvaWQgKmJ0Y19jb250ZXh0LCB1MzIgcmVnX2FkZHIpOworCXZvaWQgKCpidGNfd3JpdGVfMmJ5dGUpKHZvaWQgKmJ0Y19jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHUxNiBkYXRhKTsKKwl1MzIgKCpidGNfcmVhZF80Ynl0ZSkodm9pZCAqYnRjX2NvbnRleHQsIHUzMiByZWdfYWRkcik7CisJdm9pZCAoKmJ0Y193cml0ZV80Ynl0ZSkodm9pZCAqYnRjX2NvbnRleHQsIHUzMiByZWdfYWRkciwgdTMyIGRhdGEpOworCisJdm9pZCAoKmJ0Y19zZXRfYmJfcmVnKSh2b2lkICpidGNfY29udGV4dCwgdTMyIHJlZ19hZGRyLAorCQkJICAgICAgIHUzMiBiaXRfbWFzaywgdTMyIGRhdGEpOworCXUzMiAoKmJ0Y19nZXRfYmJfcmVnKSh2b2lkICpidGNfY29udGV4dCwgdTMyIHJlZ19hZGRyLAorCQkJICAgICAgdTMyIGJpdF9tYXNrKTsKKworCXZvaWQgKCpidGNfc2V0X3JmX3JlZykodm9pZCAqYnRjX2NvbnRleHQsIHU4IHJmX3BhdGgsIHUzMiByZWdfYWRkciwKKwkJCSAgICAgICB1MzIgYml0X21hc2ssIHUzMiBkYXRhKTsKKwl1MzIgKCpidGNfZ2V0X3JmX3JlZykodm9pZCAqYnRjX2NvbnRleHQsIHU4IHJmX3BhdGgsCisJCQkgICAgICB1MzIgcmVnX2FkZHIsIHUzMiBiaXRfbWFzayk7CisKKworCXZvaWQgKCpidGNfZmlsbF9oMmMpKHZvaWQgKmJ0Y19jb250ZXh0LCB1OCBlbGVtZW50X2lkLAorCQkJICAgICB1MzIgY21kX2xlbiwgdTggKmNtZF9idWZmZXIpOworCisJdm9pZCAoKmJ0Y19kaXNwX2RiZ19tc2cpKHZvaWQgKmJ0Y29leGlzdCwgdTggZGlzcF90eXBlKTsKKworCWJvb2wgKCpidGNfZ2V0KSh2b2lkICpidGNvZXhpc3QsIHU4IGdldF90eXBlLCB2b2lkICpvdXRfYnVmKTsKKwlib29sICgqYnRjX3NldCkodm9pZCAqYnRjb2V4aXN0LCB1OCBzZXRfdHlwZSwgdm9pZCAqaW5fYnVmKTsKK307CisKKworYm9vbCBoYWxidGM5MmVfaXNfd2lmaV91cGxpbmsoc3RydWN0IHJ0bF9wcml2ICphZGFwdGVyKTsKKworCitleHRlcm4gc3RydWN0IGJ0Y19jb2V4aXN0IGdsOTJlX2J0X2NvZXhpc3Q7CisKK2Jvb2wgZXhoYWxidGM5MmVfaW5pdGxpemVfdmFyaWFibGVzKHN0cnVjdCBydGxfcHJpdiAqYWRhcHRlcik7Cit2b2lkIGV4aGFsYnRjOTJlX2luaXRfaHdfY29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhoYWxidGM5MmVfaW5pdF9jb2V4X2RtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhoYWxidGM5MmVfaXBzX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSk7Cit2b2lkIGV4aGFsYnRjOTJlX2xwc19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHR5cGUpOwordm9pZCBleGhhbGJ0YzkyZV9zY2FuX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSk7Cit2b2lkIGV4aGFsYnRjOTJlX2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCBhY3Rpb24pOwordm9pZCBleGhhbGJ0YzkyZV9tZWRpYXN0YXR1c19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgIGVudW0gcnRfbWVkaWFfc3RhdHVzIG1lZGlhX3N0YXR1cyk7Cit2b2lkIGV4aGFsYnRjOTJlX3NwZWNpYWxfcGFja2V0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgdTggcGt0X3R5cGUpOwordm9pZCBleGhhbGJ0YzkyZV9idF9pbmZvX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggKnRtcF9idWYsCisJCQkJdTggbGVuZ3RoKTsKK3ZvaWQgZXhoYWxidGM5MmVfc3RhY2tfb3BlcmF0aW9uX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggdHlwZSk7Cit2b2lkIGV4aGFsYnRjOTJlX2hhbHRfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhoYWxidGM5MmVfcG5wX25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggcG5wX3N0YXRlKTsKK3ZvaWQgZXhoYWxidGNfY29leF9kbV9zd2l0Y2goc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOwordm9pZCBleGhhbGJ0YzkyZV9wZXJpb2RpY2FsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhoYWxidGM5MmVfZGJnX2NvbnRyb2woc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IGNvZGUsIHU4IGxlbiwKKwkJCSAgICAgdTggKmRhdGEpOwordm9pZCBleGhhbGJ0YzkyZV9zdGFja191cGRhdGVfcHJvZmlsZV9pbmZvKHZvaWQpOwordm9pZCBleGhhbGJ0YzkyZV9zZXRfaGNpX3ZlcnNpb24odTE2IGhjaV92ZXJzaW9uKTsKK3ZvaWQgZXhoYWxidGM5MmVfc2V0X2J0X3BhdGNoX3ZlcnNpb24odTE2IGJ0X2hjaV92ZXJzaW9uLCB1MTYgYnRfcGF0Y2hfdmVyc2lvbik7Cit2b2lkIGV4aGFsYnRjOTJlX3VwZGF0ZV9taW5fYnRfcnNzaShjaGFyIGJ0X3Jzc2kpOwordm9pZCBleGhhbGJ0YzkyZV9zZXRfYnRfZXhpc3QoYm9vbCBidF9leGlzdCk7Cit2b2lkIGV4aGFsYnRjOTJlX3NldF9jaGlwX3R5cGUodTggY2hpcF90eXBlKTsKK3ZvaWQgZXhoYWxidGM5MmVfc2V0X2FudF9udW0odTggdHlwZSwgdTggYW50X251bSk7Cit2b2lkIGV4aGFsYnRjOTJlX2Rpc3BsYXlfYnRfY29leF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhoYWxidGNfc2lnbmFsX2NvbXBlbnNhdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgIHU4ICpyc3NpX3dpZmksIHU4ICpyc3NpX2J0KTsKK3ZvaWQgZXhoYWxidGNfbHBzX2xlYXZlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KTsKK3ZvaWQgZXhoYWxidGNfbG93X3dpZmlfdHJhZmZpY19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9ydGxfYnRjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9ydGxfYnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjMDEyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L3J0bF9idGMuYwpAQCAtMCwwICsxLDE5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgInJ0bF9idGMuaCIKKyNpbmNsdWRlICJoYWxidF9wcmVjb21wLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcnRsX2J0Y19vcHMgcnRsX2J0Y19vcGVyYXRpb24gPSB7CisJLmJ0Y19pbml0X3ZhcmlhYmxlcyA9IHJ0bDkyZV9idGNfaW5pdF92YXJpYWJsZXMsCisJLmJ0Y19pbml0X2hhbF92YXJzID0gcnRsOTJlX2J0Y19pbml0X2hhbF92YXJzLAorCS5idGNfaW5pdF9od19jb25maWcgPSBydGw5MmVfYnRjX2luaXRfaHdfY29uZmlnLAorCS5idGNfaXBzX25vdGlmeSA9IHJ0bDkyZV9idGNfaXBzX25vdGlmeSwKKwkuYnRjX2xwc19ub3RpZnkgPSBydGxfYnRjX2xwc19ub3RpZnksCisJLmJ0Y19zY2FuX25vdGlmeSA9IHJ0bDkyZV9idGNfc2Nhbl9ub3RpZnksCisJLmJ0Y19jb25uZWN0X25vdGlmeSA9IHJ0bDkyZV9idGNfY29ubmVjdF9ub3RpZnksCisJLmJ0Y19tZWRpYXN0YXR1c19ub3RpZnkgPSBydGw5MmVfYnRjX21lZGlhc3RhdHVzX25vdGlmeSwKKwkuYnRjX3BlcmlvZGljYWwgPSBydGw5MmVfYnRjX3BlcmlvZGljYWwsCisJLmJ0Y19oYWx0X25vdGlmeSA9IHJ0bDkyZV9idGNfaGFsdF9ub3RpZnksCisJLmJ0Y19idGluZm9fbm90aWZ5ID0gcnRsOTJlX2J0Y19idGluZm9fbm90aWZ5LAorCS5idGNfaXNfbGltaXRlZF9kaWcgPSBydGw5MmVfYnRjX2lzX2xpbWl0ZWRfZGlnLAorCS5idGNfaXNfZGlzYWJsZV9lZGNhX3R1cmJvID0gcnRsOTJlX2J0Y19pc19kaXNhYmxlX2VkY2FfdHVyYm8sCisJLmJ0Y19pc19idF9kaXNhYmxlZCA9IHJ0bDkyZV9idGNfaXNfYnRfZGlzYWJsZWQsCisJLmJ0Y19zcGVjaWFsX3BhY2tldF9ub3RpZnkgPSBydGxfYnRjX3NwZWNpYWxfcGFja2V0X25vdGlmeSwKK307CisKK3ZvaWQgcnRsOTJlX2J0Y19pbml0X3ZhcmlhYmxlcyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCit7CisJZXhoYWxidGM5MmVfaW5pdGxpemVfdmFyaWFibGVzKHJ0bHByaXYpOworfQorCit2b2lkIHJ0bDkyZV9idGNfaW5pdF9oYWxfdmFycyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCit7CisJdTggYW50X251bTsKKwl1OCBidF9leGlzdDsKKwl1OCBidF90eXBlOworCWFudF9udW0gPSBydGw5MmVfZ2V0X2h3cGdfYW50X251bShydGxwcml2KTsKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywKKwkJICgiJXMsIGFudE51bSBpcyAlZFxuIiwgX19mdW5jX18sIGFudF9udW0pKTsKKworCWJ0X2V4aXN0ID0gcnRsOTJlX2dldF9od3BnX2J0X2V4aXN0KHJ0bHByaXYpOworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkgKCIlcywgYnRfZXhpc3QgaXMgJWRcbiIsIF9fZnVuY19fLCBidF9leGlzdCkpOworCWV4aGFsYnRjOTJlX3NldF9idF9leGlzdChidF9leGlzdCk7CisKKwlidF90eXBlID0gcnRsOTJlX2dldF9od3BnX2J0X3R5cGUocnRscHJpdik7CisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csCisJCSAoIiVzLCBidF90eXBlIGlzICVkXG4iLCBfX2Z1bmNfXywgYnRfdHlwZSkpOworCWV4aGFsYnRjOTJlX3NldF9jaGlwX3R5cGUoYnRfdHlwZSk7CisKKwlleGhhbGJ0YzkyZV9zZXRfYW50X251bShCVF9DT0VYX0FOVF9UWVBFX1BHLCBhbnRfbnVtKTsKK30KKwordm9pZCBydGw5MmVfYnRjX2luaXRfaHdfY29uZmlnKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdikKK3sKKwlleGhhbGJ0YzkyZV9pbml0X2h3X2NvbmZpZygmZ2w5MmVfYnRfY29leGlzdCk7CisJZXhoYWxidGM5MmVfaW5pdF9jb2V4X2RtKCZnbDkyZV9idF9jb2V4aXN0KTsKK30KKwordm9pZCBydGw5MmVfYnRjX2lwc19ub3RpZnkoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1OCB0eXBlKQoreworCWV4aGFsYnRjOTJlX2lwc19ub3RpZnkoJmdsOTJlX2J0X2NvZXhpc3QsIHR5cGUpOworfQorCit2b2lkIHJ0bF9idGNfbHBzX25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IHR5cGUpCit7CisJZXhoYWxidGM5MmVfbHBzX25vdGlmeSgmZ2w5MmVfYnRfY29leGlzdCwgdHlwZSk7Cit9CisKK3ZvaWQgcnRsOTJlX2J0Y19zY2FuX25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IHNjYW50eXBlKQoreworCWV4aGFsYnRjOTJlX3NjYW5fbm90aWZ5KCZnbDkyZV9idF9jb2V4aXN0LCBzY2FudHlwZSk7Cit9CisKK3ZvaWQgcnRsOTJlX2J0Y19jb25uZWN0X25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IGFjdGlvbikKK3sKKwlleGhhbGJ0YzkyZV9jb25uZWN0X25vdGlmeSgmZ2w5MmVfYnRfY29leGlzdCwgYWN0aW9uKTsKK30KKwordm9pZCBydGw5MmVfYnRjX21lZGlhc3RhdHVzX25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJICAgZW51bSBydF9tZWRpYV9zdGF0dXMgbXN0YXR1cykKK3sKKwlleGhhbGJ0YzkyZV9tZWRpYXN0YXR1c19ub3RpZnkoJmdsOTJlX2J0X2NvZXhpc3QsIG1zdGF0dXMpOworfQorCit2b2lkIHJ0bDkyZV9idGNfcGVyaW9kaWNhbChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCit7CisJZXhoYWxidGM5MmVfcGVyaW9kaWNhbCgmZ2w5MmVfYnRfY29leGlzdCk7Cit9CisKK3ZvaWQgcnRsOTJlX2J0Y19oYWx0X25vdGlmeSh2b2lkKQoreworCWV4aGFsYnRjOTJlX2hhbHRfbm90aWZ5KCZnbDkyZV9idF9jb2V4aXN0KTsKK30KKwordm9pZCBydGw5MmVfYnRjX2J0aW5mb19ub3RpZnkoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1OCAqdG1wX2J1ZiwgdTggbGVuZ3RoKQoreworCWV4aGFsYnRjOTJlX2J0X2luZm9fbm90aWZ5KCZnbDkyZV9idF9jb2V4aXN0LCB0bXBfYnVmLCBsZW5ndGgpOworfQorCitib29sIHJ0bDkyZV9idGNfaXNfbGltaXRlZF9kaWcoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KQoreworCXJldHVybiBnbDkyZV9idF9jb2V4aXN0LmJ0X2luZm8ubGltaXRlZF9kaWc7Cit9CisKK2Jvb2wgcnRsOTJlX2J0Y19pc19kaXNhYmxlX2VkY2FfdHVyYm8oc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KQoreworCWJvb2wgYnRfY2hhbmdlX2VkY2EgPSBmYWxzZTsKKwl1MzIgY3VyX2VkY2FfdmFsOworCXUzMiBlZGNhX2J0X2hzX3VwbGluayA9IDB4NWVhNDJiLCBlZGNhX2J0X2hzX2Rvd25saW5rID0gMHg1ZWE0MmI7CisJdTMyIGVkY2FfaHM7CisJdTMyIGVkY2FfYWRkciA9IDB4NTA0OworCisJY3VyX2VkY2FfdmFsID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgZWRjYV9hZGRyKTsKKwlpZiAoaGFsYnRjOTJlX2lzX3dpZmlfdXBsaW5rKHJ0bHByaXYpKSB7CisJCWlmIChjdXJfZWRjYV92YWwgIT0gZWRjYV9idF9oc191cGxpbmspIHsKKwkJCWVkY2FfaHMgPSBlZGNhX2J0X2hzX3VwbGluazsKKwkJCWJ0X2NoYW5nZV9lZGNhID0gdHJ1ZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjdXJfZWRjYV92YWwgIT0gZWRjYV9idF9oc19kb3dubGluaykgeworCQkJZWRjYV9ocyA9IGVkY2FfYnRfaHNfZG93bmxpbms7CisJCQlidF9jaGFuZ2VfZWRjYSA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoYnRfY2hhbmdlX2VkY2EpCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBlZGNhX2FkZHIsIGVkY2FfaHMpOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcnRsOTJlX2J0Y19pc19idF9kaXNhYmxlZChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCit7CisJLyogSXQgc2VlbXMgJ2J0X2Rpc2FibGVkJyBpcyBuZXZlciBiZSBpbml0aWFsaXplZCBvciBzZXQuICovCisJaWYgKGdsOTJlX2J0X2NvZXhpc3QuYnRfaW5mby5idF9kaXNhYmxlZCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcnRsX2J0Y19zcGVjaWFsX3BhY2tldF9ub3RpZnkoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1OCBwa3RfdHlwZSkKK3sKKwlyZXR1cm4gZXhoYWxidGM5MmVfc3BlY2lhbF9wYWNrZXRfbm90aWZ5KCZnbDkyZV9idF9jb2V4aXN0LCBwa3RfdHlwZSk7Cit9CisKK3N0cnVjdCBydGxfYnRjX29wcyAqc3RnX3J0bF9idGNfZ2V0X29wc19wb2ludGVyKHZvaWQpCit7CisJcmV0dXJuICZydGxfYnRjX29wZXJhdGlvbjsKK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9idGNfZ2V0X29wc19wb2ludGVyKTsKKwordTggcnRsOTJlX2dldF9od3BnX2FudF9udW0oc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KQoreworCXU4IG51bTsKKworCWlmIChydGxwcml2LT5idGNvZXhpc3QuYnRjX2luZm8uYW50X251bSA9PSBBTlRfWDIpCisJCW51bSA9IDI7CisJZWxzZQorCQludW0gPSAxOworCisJcmV0dXJuIG51bTsKK30KK3U4IHJ0bDkyZV9nZXRfaHdwZ19idF9leGlzdChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCit7CisJcmV0dXJuIHJ0bHByaXYtPmJ0Y29leGlzdC5idGNfaW5mby5idGNvZXhpc3Q7Cit9CisKK3U4IHJ0bDkyZV9nZXRfaHdwZ19idF90eXBlKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdikKK3sKKwlyZXR1cm4gcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19pbmZvLmJ0X3R5cGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9ydGxfYnRjLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2J0Y29leGlzdC9ydGxfYnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzMGViMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvYnRjb2V4aXN0L3J0bF9idGMuaApAQCAtMCwwICsxLDYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9CVENfSF9fCisjZGVmaW5lIF9fUlRMX0JUQ19IX18KKworI2luY2x1ZGUgImhhbGJ0X3ByZWNvbXAuaCIKKwordm9pZCBydGw5MmVfYnRjX2luaXRfdmFyaWFibGVzKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7Cit2b2lkIHJ0bDkyZV9idGNfaW5pdF9oYWxfdmFycyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpOwordm9pZCBydGw5MmVfYnRjX2luaXRfaHdfY29uZmlnKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7Cit2b2lkIHJ0bDkyZV9idGNfaXBzX25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IHR5cGUpOwordm9pZCBydGxfYnRjX2xwc19ub3RpZnkoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1OCB0eXBlKTsKK3ZvaWQgcnRsOTJlX2J0Y19zY2FuX25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IHNjYW50eXBlKTsKK3ZvaWQgcnRsOTJlX2J0Y19jb25uZWN0X25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IGFjdGlvbik7Cit2b2lkIHJ0bDkyZV9idGNfbWVkaWFzdGF0dXNfbm90aWZ5KHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwKKwkJCQkgICBlbnVtIHJ0X21lZGlhX3N0YXR1cyBtc3RhdHVzKTsKK3ZvaWQgcnRsOTJlX2J0Y19wZXJpb2RpY2FsKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7Cit2b2lkIHJ0bDkyZV9idGNfaGFsdF9ub3RpZnkodm9pZCk7Cit2b2lkIHJ0bDkyZV9idGNfYnRpbmZvX25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4ICp0bXBidWYsIHU4IGxlbmd0aCk7Citib29sIHJ0bDkyZV9idGNfaXNfbGltaXRlZF9kaWcoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KTsKK2Jvb2wgcnRsOTJlX2J0Y19pc19kaXNhYmxlX2VkY2FfdHVyYm8oc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KTsKK2Jvb2wgcnRsOTJlX2J0Y19pc19idF9kaXNhYmxlZChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpOwordm9pZCBydGxfYnRjX3NwZWNpYWxfcGFja2V0X25vdGlmeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IHBrdF90eXBlKTsKKworCitzdHJ1Y3QgcnRsX2J0Y19vcHMgKnN0Z19ydGxfYnRjX2dldF9vcHNfcG9pbnRlcih2b2lkKTsKKwordTggcnRsOTJlX2dldF9od3BnX2FudF9udW0oc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KTsKK3U4IHJ0bDkyZV9nZXRfaHdwZ19idF9leGlzdChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpOwordTggcnRsOTJlX2dldF9od3BnX2J0X3R5cGUoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KTsKK2VudW0gcnRfbWVkaWFfc3RhdHVzIG1nbnRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisKKworCisKKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9jYW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyYzMyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY2FtLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ3aWZpLmgiCisjaW5jbHVkZSAiY2FtLmgiCisKK3ZvaWQgcnRsOTJlX2NhbV9yZXNldF9zZWNfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkgPSBmYWxzZTsKKwlydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9IE5PX0VOQ1JZUFRJT047CisJcnRscHJpdi0+c2VjLmdyb3VwX2VuY19hbGdvcml0aG0gPSBOT19FTkNSWVBUSU9OOworCW1lbXNldChydGxwcml2LT5zZWMua2V5X2J1ZiwgMCwgS0VZX0JVRl9TSVpFICogTUFYX0tFWV9MRU4pOworCW1lbXNldChydGxwcml2LT5zZWMua2V5X2xlbiwgMCwgS0VZX0JVRl9TSVpFKTsKKwlydGxwcml2LT5zZWMucGFpcndpc2Vfa2V5ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcnRsX2NhbV9wcm9ncmFtX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgZW50cnlfbm8sCisJCQkJICB1OCAqbWFjX2FkZHIsIHU4ICprZXlfY29udF8xMjgsIHUxNiB1c19jb25maWcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJdTMyIHRhcmdldF9jb21tYW5kOworCXUzMiB0YXJnZXRfY29udGVudCA9IDA7CisJdTggZW50cnlfaTsKKworCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywgIktleSBjb250ZW50OiIsCisJCSAgICAgIGtleV9jb250XzEyOCwgMTYpOworCisJZm9yIChlbnRyeV9pID0gMDsgZW50cnlfaSA8IENBTV9DT05URU5UX0NPVU5UOyBlbnRyeV9pKyspIHsKKwkJdGFyZ2V0X2NvbW1hbmQgPSBlbnRyeV9pICsgQ0FNX0NPTlRFTlRfQ09VTlQgKiBlbnRyeV9ubzsKKwkJdGFyZ2V0X2NvbW1hbmQgPSB0YXJnZXRfY29tbWFuZCB8IEJJVCgzMSkgfCBCSVQoMTYpOworCisJCWlmIChlbnRyeV9pID09IDApIHsKKwkJCXRhcmdldF9jb250ZW50ID0gKHUzMikgKCoobWFjX2FkZHIgKyAwKSkgPDwgMTYgfAorCQkJICAgICh1MzIpICgqKG1hY19hZGRyICsgMSkpIDw8IDI0IHwgKHUzMikgdXNfY29uZmlnOworCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwKKwkJCQkJdGFyZ2V0X2NvbnRlbnQpOworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sCisJCQkJCXRhcmdldF9jb21tYW5kKTsKKworCQkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIldSSVRFICV4OiAleFxuIiwKKwkJCQkgIHJ0bHByaXYtPmNmZy0+bWFwc1tXQ0FNSV0sIHRhcmdldF9jb250ZW50KSk7CisJCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiVGhlIEtleSBJRCBpcyAlZFxuIiwgZW50cnlfbm8pKTsKKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSAleDogJXhcbiIsCisJCQkJICBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLCB0YXJnZXRfY29tbWFuZCkpOworCQl9IGVsc2UgaWYgKGVudHJ5X2kgPT0gMSkgeworCQkJdGFyZ2V0X2NvbnRlbnQgPSAodTMyKSAoKihtYWNfYWRkciArIDUpKSA8PCAyNCB8CisJCQkgICAgKHUzMikgKCoobWFjX2FkZHIgKyA0KSkgPDwgMTYgfAorCQkJICAgICh1MzIpICgqKG1hY19hZGRyICsgMykpIDw8IDggfAorCQkJICAgICh1MzIpICgqKG1hY19hZGRyICsgMikpOworCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwKKwkJCQkJdGFyZ2V0X2NvbnRlbnQpOworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sCisJCQkJCXRhcmdldF9jb21tYW5kKTsKKworCQkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIldSSVRFIEE0OiAleFxuIiwgdGFyZ2V0X2NvbnRlbnQpKTsKKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSBBMDogJXhcbiIsIHRhcmdldF9jb21tYW5kKSk7CisJCX0gZWxzZSB7CisJCQl0YXJnZXRfY29udGVudCA9CisJCQkgICAgKHUzMikgKCooa2V5X2NvbnRfMTI4ICsgKGVudHJ5X2kgKiA0IC0gOCkgKyAzKSkgPDwKKwkJCSAgICAyNCB8ICh1MzIpICgqKGtleV9jb250XzEyOCArIChlbnRyeV9pICogNCAtIDgpICsgMikpCisJCQkgICAgPDwgMTYgfAorCQkJICAgICh1MzIpICgqKGtleV9jb250XzEyOCArIChlbnRyeV9pICogNCAtIDgpICsgMSkpIDw8IDgKKwkJCSAgICB8ICh1MzIpICgqKGtleV9jb250XzEyOCArIChlbnRyeV9pICogNCAtIDgpICsgMCkpOworCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwKKwkJCQkJdGFyZ2V0X2NvbnRlbnQpOworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sCisJCQkJCXRhcmdldF9jb21tYW5kKTsKKwkJCXVkZWxheSgxMDApOworCisJCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiV1JJVEUgQTQ6ICV4XG4iLCB0YXJnZXRfY29udGVudCkpOworCQkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIldSSVRFIEEwOiAleFxuIiwgdGFyZ2V0X2NvbW1hbmQpKTsKKwkJfQorCX0KKworCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJICgiYWZ0ZXIgc2V0IGtleSwgdXNjb25maWc6JXhcbiIsIHVzX2NvbmZpZykpOworfQorCit1OCBzdGdfcnRsX2NhbV9hZGRfb25lX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqbWFjX2FkZHIsCisJCQkgICAgIHUzMiB1bF9rZXlfaWQsIHUzMiB1bF9lbnRyeV9pZHgsIHUzMiB1bF9lbmNfYWxnLAorCQkJICAgICB1MzIgdWxfZGVmYXVsdF9rZXksIHU4ICprZXlfY29udGVudCkKK3sKKwl1MzIgdXNfY29uZmlnOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCisJCSAoIkVudHJ5Tm86JXgsIHVsS2V5SWQ9JXgsIHVsRW5jQWxnPSV4LCB1bFVzZURLPSV4IE1hY0FkZHIgJXBNXG4iLAorCQkgIHVsX2VudHJ5X2lkeCwgdWxfa2V5X2lkLCB1bF9lbmNfYWxnLAorCQkgIHVsX2RlZmF1bHRfa2V5LCBtYWNfYWRkcikpOworCisJaWYgKHVsX2tleV9pZCA9PSBUT1RBTF9DQU1fRU5UUlkpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgidWxLZXlJZCBleGNlZWQhXG4iKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1bF9kZWZhdWx0X2tleSA9PSAxKQorCQl1c19jb25maWcgPSBDRkdfVkFMSUQgfCAoKHUxNikgKHVsX2VuY19hbGcpIDw8IDIpOworCWVsc2UKKwkJdXNfY29uZmlnID0gQ0ZHX1ZBTElEIHwgKCh1bF9lbmNfYWxnKSA8PCAyKSB8IHVsX2tleV9pZDsKKworCXJ0bF9jYW1fcHJvZ3JhbV9lbnRyeShodywgdWxfZW50cnlfaWR4LCBtYWNfYWRkciwKKwkJCSAgICAgICh1OCAqKWtleV9jb250ZW50LCB1c19jb25maWcpOworCisJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywgKCJlbmRcbiIpKTsKKworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX2NhbV9hZGRfb25lX2VudHJ5KTsKKworaW50IHN0Z19ydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHU4ICptYWNfYWRkciwgdTMyIHVsX2tleV9pZCkKK3sKKwl1MzIgdWxfY29tbWFuZDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImtleV9pZHg6JWRcbiIsIHVsX2tleV9pZCkpOworCisJdWxfY29tbWFuZCA9IHVsX2tleV9pZCAqIENBTV9DT05URU5UX0NPVU5UOworCXVsX2NvbW1hbmQgPSB1bF9jb21tYW5kIHwgQklUKDMxKSB8IEJJVCgxNik7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwgMCk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sIHVsX2NvbW1hbmQpOworCisJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgic3RnX3J0bF9jYW1fZGVsZXRlX29uZV9lbnRyeSgpOiBXUklURSBBNDogJXhcbiIsIDApKTsKKwlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLAorCQkgKCJzdGdfcnRsX2NhbV9kZWxldGVfb25lX2VudHJ5KCk6IFdSSVRFIEEwOiAleFxuIiwKKwkJICB1bF9jb21tYW5kKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19ydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkpOworCit2b2lkIHN0Z19ydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwl1MzIgdWxfY29tbWFuZDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl1bF9jb21tYW5kID0gQklUKDMxKSB8IEJJVCgzMCk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sIHVsX2NvbW1hbmQpOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX2NhbV9yZXNldF9hbGxfZW50cnkpOworCit2b2lkIHN0Z19ydGxfY2FtX21hcmtfaW52YWxpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdWNfaW5kZXgpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJdTMyIHVsX2NvbW1hbmQ7CisJdTMyIHVsX2NvbnRlbnQ7CisJdTMyIHVsX2VuY19hbGdvID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1NFQ19DQU1fQUVTXTsKKworCXN3aXRjaCAocnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0pIHsKKwljYXNlIFdFUDQwX0VOQ1JZUFRJT046CisJCXVsX2VuY19hbGdvID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1NFQ19DQU1fV0VQNDBdOworCQlicmVhazsKKwljYXNlIFdFUDEwNF9FTkNSWVBUSU9OOgorCQl1bF9lbmNfYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX1dFUDEwNF07CisJCWJyZWFrOworCWNhc2UgVEtJUF9FTkNSWVBUSU9OOgorCQl1bF9lbmNfYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX1RLSVBdOworCQlicmVhazsKKwljYXNlIEFFU0NDTVBfRU5DUllQVElPTjoKKwkJdWxfZW5jX2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9BRVNdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1bF9lbmNfYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX0FFU107CisJfQorCisJdWxfY29udGVudCA9ICh1Y19pbmRleCAmIDMpIHwgKCh1MTYpICh1bF9lbmNfYWxnbykgPDwgMik7CisKKwl1bF9jb250ZW50IHw9IEJJVCgxNSk7CisJdWxfY29tbWFuZCA9IENBTV9DT05URU5UX0NPVU5UICogdWNfaW5kZXg7CisJdWxfY29tbWFuZCA9IHVsX2NvbW1hbmQgfCBCSVQoMzEpIHwgQklUKDE2KTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbV0NBTUldLCB1bF9jb250ZW50KTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwgdWxfY29tbWFuZCk7CisKKwlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLAorCQkgKCJzdGdfcnRsX2NhbV9tYXJrX2ludmFsaWQoKTogV1JJVEUgQTQ6ICV4XG4iLCB1bF9jb250ZW50KSk7CisJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgic3RnX3J0bF9jYW1fbWFya19pbnZhbGlkKCk6IFdSSVRFIEEwOiAleFxuIiwgdWxfY29tbWFuZCkpOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX2NhbV9tYXJrX2ludmFsaWQpOworCit2b2lkIHN0Z19ydGxfY2FtX2VtcHR5X2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB1Y19pbmRleCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl1MzIgdWxfY29tbWFuZDsKKwl1MzIgdWxfY29udGVudDsKKwl1MzIgdWxfZW5jYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX0FFU107CisJdTggZW50cnlfaTsKKworCXN3aXRjaCAocnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0pIHsKKwljYXNlIFdFUDQwX0VOQ1JZUFRJT046CisJCXVsX2VuY2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9XRVA0MF07CisJCWJyZWFrOworCWNhc2UgV0VQMTA0X0VOQ1JZUFRJT046CisJCXVsX2VuY2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9XRVAxMDRdOworCQlicmVhazsKKwljYXNlIFRLSVBfRU5DUllQVElPTjoKKwkJdWxfZW5jYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX1RLSVBdOworCQlicmVhazsKKwljYXNlIEFFU0NDTVBfRU5DUllQVElPTjoKKwkJdWxfZW5jYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX0FFU107CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVsX2VuY2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9BRVNdOworCX0KKworCWZvciAoZW50cnlfaSA9IDA7IGVudHJ5X2kgPCBDQU1fQ09OVEVOVF9DT1VOVDsgZW50cnlfaSsrKSB7CisJCWlmIChlbnRyeV9pID09IDApIHsKKwkJCXVsX2NvbnRlbnQgPQorCQkJICAgICh1Y19pbmRleCAmIDB4MDMpIHwgKCh1MTYpICh1bF9lbmNhbGdvKSA8PCAyKTsKKwkJCXVsX2NvbnRlbnQgfD0gQklUKDE1KTsKKworCQl9IGVsc2UgeworCQkJdWxfY29udGVudCA9IDA7CisJCX0KKworCQl1bF9jb21tYW5kID0gQ0FNX0NPTlRFTlRfQ09VTlQgKiB1Y19pbmRleCArIGVudHJ5X2k7CisJCXVsX2NvbW1hbmQgPSB1bF9jb21tYW5kIHwgQklUKDMxKSB8IEJJVCgxNik7CisKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tXQ0FNSV0sIHVsX2NvbnRlbnQpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwgdWxfY29tbWFuZCk7CisKKwkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19MT1VELAorCQkJICgic3RnX3J0bF9jYW1fZW1wdHlfZW50cnkoKTogV1JJVEUgQTQ6ICV4XG4iLAorCQkJICB1bF9jb250ZW50KSk7CisJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCSAoInN0Z19ydGxfY2FtX2VtcHR5X2VudHJ5KCk6IFdSSVRFIEEwOiAleFxuIiwKKwkJCSAgdWxfY29tbWFuZCkpOworCX0KK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9jYW1fZW1wdHlfZW50cnkpOworCit1OCBzdGdfcnRsX2NhbV9nZXRfZnJlZV9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnN0YV9hZGRyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgYml0bWFwID0gKHJ0bHByaXYtPnNlYy5od3NlY19jYW1fYml0bWFwKSA+PiA0OworCXU4IGVudHJ5X2lkeCA9IDA7CisJdTggaSwgKmFkZHI7CisKKwlpZiAoIXN0YV9hZGRyKSB7CisJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkgKCJzdGFfYWRkciBpcyBOVUxMXG4iKSk7CisJCXJldHVybiBUT1RBTF9DQU1fRU5UUlk7CisJfQorCS8qIERvZXMgU1RBIGFscmVhZHkgZXhpc3Q/ICovCisJZm9yIChpID0gNDsgaSA8IFRPVEFMX0NBTV9FTlRSWTsgaSsrKSB7CisJCWFkZHIgPSBydGxwcml2LT5zZWMuaHdzZWNfY2FtX3N0YV9hZGRyW2ldOworCQlpZiAobWVtY21wKGFkZHIsIHN0YV9hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJCXJldHVybiBpOworCX0KKwkvKiBHZXQgYSBmcmVlIENBTSBlbnRyeS4gKi8KKwlmb3IgKGVudHJ5X2lkeCA9IDQ7IGVudHJ5X2lkeCA8IFRPVEFMX0NBTV9FTlRSWTsgZW50cnlfaWR4KyspIHsKKwkJaWYgKChiaXRtYXAgJiBCSVQoMCkpID09IDApIHsKKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkJICgiLS0tLS1od3NlY19jYW1fYml0bWFwOiAweCV4IGVudHJ5X2lkeD0lZFxuIiwKKwkJCQkJICBydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCwgZW50cnlfaWR4KSk7CisJCQlydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCB8PSBCSVQoMCkgPDwgZW50cnlfaWR4OworCQkJbWVtY3B5KHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbZW50cnlfaWR4XSwKKwkJCSAgICAgICBzdGFfYWRkciwgRVRIX0FMRU4pOworCQkJcmV0dXJuIGVudHJ5X2lkeDsKKwkJfQorCQliaXRtYXAgPSBiaXRtYXAgPj4gMTsKKwl9CisJcmV0dXJuIFRPVEFMX0NBTV9FTlRSWTsKK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9jYW1fZ2V0X2ZyZWVfZW50cnkpOworCit2b2lkIHN0Z19ydGxfY2FtX2RlbF9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnN0YV9hZGRyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgYml0bWFwOworCXU4IGksICphZGRyOworCisJaWYgKE5VTEwgPT0gc3RhX2FkZHIpIHsKKwkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19FTUVSRywKKwkJCSAoInN0YV9hZGRyIGlzIE5VTEwuXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKHN0YV9hZGRyKSkgeworCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0VNRVJHLAorCQkJICgic3RhX2FkZHIgaXMgMDA6MDA6MDA6MDA6MDA6MDAuXG4iKSk7CisJCXJldHVybjsKKwl9CisJLyogRG9lcyBTVEEgYWxyZWFkeSBleGlzdD8gKi8KKwlmb3IgKGkgPSA0OyBpIDwgVE9UQUxfQ0FNX0VOVFJZOyBpKyspIHsKKwkJYWRkciA9IHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbaV07CisJCWJpdG1hcCA9IChydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCkgPj4gaTsKKwkJaWYgKCgoYml0bWFwICYgQklUKDApKSA9PSBCSVQoMCkpICYmCisJCSAgICAobWVtY21wKGFkZHIsIHN0YV9hZGRyLCBFVEhfQUxFTikgPT0gMCkpIHsKKwkJCS8qIFJlbW92ZSBmcm9tIEhXIFNlY3VyaXR5IENBTSAqLworCQkJbWVtc2V0KHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbaV0sIDAsIEVUSF9BTEVOKTsKKwkJCXJ0bHByaXYtPnNlYy5od3NlY19jYW1fYml0bWFwICY9IH4oQklUKDApIDw8IGkpOworCQkJcHJfaW5mbygiJiYmJiYmJiYmZGVsIGVudHJ5ICVkXG4iLCBpKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19ydGxfY2FtX2RlbF9lbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2NhbS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9jYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2E5NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9jYW0uaApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVExfQ0FNX0hfCisjZGVmaW5lIF9fUlRMX0NBTV9IXworCisjZGVmaW5lIENBTV9DT05URU5UX0NPVU5UCQkJCTgKKworI2RlZmluZSBDRkdfREVGQVVMVF9LRVkJCQkJCUJJVCg1KQorI2RlZmluZSBDRkdfVkFMSUQJCQkJCUJJVCgxNSkKKworI2RlZmluZSBQQUlSV0lTRV9LRVlJRFgJCQkJCTAKKyNkZWZpbmUgQ0FNX1BBSVJXSVNFX0tFWV9QT1NJVElPTgkJCTQKKworI2RlZmluZQlDQU1fQ09ORklHX1VTRURLCQkJCTEKKyNkZWZpbmUJQ0FNX0NPTkZJR19OT19VU0VESwkJCQkwCisKK3ZvaWQgc3RnX3J0bF9jYW1fcmVzZXRfYWxsX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3U4IHN0Z19ydGxfY2FtX2FkZF9vbmVfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICptYWNfYWRkciwKKwkJCSAgICAgdTMyIHVsX2tleV9pZCwgdTMyIHVsX2VudHJ5X2lkeCwgdTMyIHVsX2VuY19hbGcsCisJCQkgICAgIHUzMiB1bF9kZWZhdWx0X2tleSwgdTggKmtleV9jb250ZW50KTsKK2ludCBzdGdfcnRsX2NhbV9kZWxldGVfb25lX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqbWFjX2FkZHIsCisJCQkJIHUzMiB1bF9rZXlfaWQpOwordm9pZCBzdGdfcnRsX2NhbV9tYXJrX2ludmFsaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHVjX2luZGV4KTsKK3ZvaWQgc3RnX3J0bF9jYW1fZW1wdHlfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHVjX2luZGV4KTsKK3ZvaWQgcnRsOTJlX2NhbV9yZXNldF9zZWNfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1OCBzdGdfcnRsX2NhbV9nZXRfZnJlZV9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnN0YV9hZGRyKTsKK3ZvaWQgc3RnX3J0bF9jYW1fZGVsX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3RhX2FkZHIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY29tcGF0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTNjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2NvbXBhdC5oCkBAIC0wLDAgKzEsNzAgQEAKKyNpZm5kZWYgX19SVExfQ09NUEFUX0hfXworI2RlZmluZSBfX1JUTF9DT01QQVRfSF9fCisKKworI2RlZmluZSBSWF9GTEFHX01BQ1RJTUVfTVBEVSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQKKworI2RlZmluZSBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVCBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVF9UWAorCitzdHJ1Y3QgaWVlZTgwMjExX21nbXRfY29tcGF0IHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb247CisJdTggZGFbNl07CisJdTggc2FbNl07CisJdTggYnNzaWRbNl07CisJX19sZTE2IHNlcV9jdHJsOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGNhdGVnb3J5OworCQkJdW5pb24geworCQkJCXN0cnVjdCB7CisJCQkJCXU4IGFjdGlvbl9jb2RlOworCQkJCQl1OCBkaWFsb2dfdG9rZW47CisJCQkJCXU4IHN0YXR1c19jb2RlOworCQkJCQl1OCB2YXJpYWJsZVswXTsKKwkJCQl9IF9fcGFja2VkIHdtZV9hY3Rpb247CisJCQkJc3RydWN0IHsKKwkJCQkJdTggYWN0aW9uX2NvZGU7CisJCQkJCXU4IGRpYWxvZ190b2tlbjsKKwkJCQkJX19sZTE2IGNhcGFiOworCQkJCQlfX2xlMTYgdGltZW91dDsKKwkJCQkJX19sZTE2IHN0YXJ0X3NlcV9udW07CisJCQkJfSBfX3BhY2tlZCBhZGRiYV9yZXE7CisJCQkJc3RydWN0eworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggZGlhbG9nX3Rva2VuOworCQkJCQlfX2xlMTYgc3RhdHVzOworCQkJCQlfX2xlMTYgY2FwYWI7CisJCQkJCV9fbGUxNiB0aW1lb3V0OworCQkJCX0gX19wYWNrZWQgYWRkYmFfcmVzcDsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJX19sZTE2IHBhcmFtczsKKwkJCQkJX19sZTE2IHJlYXNvbl9jb2RlOworCQkJCX0gX19wYWNrZWQgZGVsYmE7CisJCQkJc3RydWN0IHsKKwkJCQkJdTggYWN0aW9uX2NvZGU7CisJCQkJCS8qIGNhcGFiX2luZm8gZm9yIG9wZW4gYW5kIGNvbmZpcm0sCisJCQkJCSAqIHJlYXNvbiBmb3IgY2xvc2UKKwkJCQkJICovCisJCQkJCV9fbGUxNiBhdXg7CisJCQkJCS8qIEZvbGxvd2VkIGluIHBsaW5rX2NvbmZpcm0gYnkgc3RhdHVzCisJCQkJCSAqIGNvZGUsIEFJRCBhbmQgc3VwcG9ydGVkIHJhdGVzLAorCQkJCQkgKiBhbmQgZGlyZWN0bHkgYnkgc3VwcG9ydGVkIHJhdGVzIGluCisJCQkJCSAqIHBsaW5rX29wZW4gYW5kIHBsaW5rX2Nsb3NlCisJCQkJCSAqLworCQkJCQl1OCB2YXJpYWJsZVswXTsKKwkJCQl9IF9fcGFja2VkIHBsaW5rX2FjdGlvbjsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggdmFyaWFibGVbMF07CisJCQkJfSBfX3BhY2tlZCBtZXNoX2FjdGlvbjsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHNtcHNfY29udHJvbDsKKwkJCQl9IF9fcGFja2VkIGh0X3NtcHM7CisJCQl9IHU7CisJCX0gX19wYWNrZWQgYWN0aW9uOworCX0gdTsKK30gX19wYWNrZWQ7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlYTM1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY29yZS5jCkBAIC0wLDAgKzEsMTYwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJjYW0uaCIKKyNpbmNsdWRlICJiYXNlLmgiCisjaW5jbHVkZSAicHMuaCIKKworI2luY2x1ZGUgImJ0Y29leGlzdC9ydGxfYnRjLmgiCisKKy8qbXV0ZXggZm9yIHN0YXJ0ICYgc3RvcCBpcyBtdXN0IGhlcmUuICovCitzdGF0aWMgaW50IHJ0bF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmICghaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuIDA7CisJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCisJCXJldHVybiAwOworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCWVyciA9IHJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3N0YXJ0KGh3KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlydGw5MmVfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nKWh3KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlib29sIGJfc3VwcG9ydF9yZW1vdGVfd2FrZXVwID0gZmFsc2U7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhBTF9ERUZfV09XTEFOLAorCQkJCSAgICAgICh1OCAqKSgmYl9zdXBwb3J0X3JlbW90ZV93YWtldXApKTsKKwkvKiBoZXJlIGlzIG11c3QsIGJlY2F1c2UgYWRob2MgZG8gc3RvcCBhbmQgc3RhcnQsCisJICogYnV0IHN0b3Agd2l0aCBSRk9GRiBtYXkgY2F1c2Ugc29tZXRoaW5nIHdyb25nLAorCSAqIGxpa2UgYWRob2MgVFAgKi8KKwlpZiAodW5saWtlbHkocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT0ZGKSkKKwkJcnRsOTJlX2lwc19uaWNfb24oaHcpOworCisJbXV0ZXhfbG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisJLyogaWYgd293bGFuIHN1cHBvcnRlZCwgRE9OJ1QgY2xlYXIgY29ubmVjdGVkIGluZm8gKi8KKwlpZiAoIShiX3N1cHBvcnRfcmVtb3RlX3dha2V1cCAmJgorCSAgICAgIHJ0bGhhbC0+Yl9lbnRlcl9wbnBfc2xlZXApKSB7CisJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKKwkJbWVtc2V0KG1hYy0+YnNzaWQsIDAsIDYpOworCQltYWMtPnZlbmRvciA9IFBFRVJfVU5LTk9XTjsKKworCQkvKiByZXNldCBzZWMgaW5mbyAqLworCQlydGw5MmVfY2FtX3Jlc2V0X3NlY19pbmZvKGh3KTsKKworCQlydGw5MmVfZGVpbml0X2RlZmVycmVkX3dvcmsoaHcpOworCX0KKwlydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl9zdG9wKGh3KTsKKworCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CisJbWVtc2V0KCZ0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKKworCWlmICh1bmxpa2VseShpc19oYWxfc3RvcChydGxoYWwpIHx8IHBwc2MtPnJmcHdyX3N0YXRlICE9IEVSRk9OKSkKKwkJZ290byBlcnJfZnJlZTsKKworCWlmICghdGVzdF9iaXQoUlRMX1NUQVRVU19JTlRFUkZBQ0VfU1RBUlQsICZydGxwcml2LT5zdGF0dXMpKQorCQlnb3RvIGVycl9mcmVlOworCisJaWYgKCFydGxwcml2LT5pbnRmX29wcy0+d2FpdHFfaW5zZXJ0KGh3LCBjb250cm9sLT5zdGEsIHNrYikpCisJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBjb250cm9sLT5zdGEsIHNrYiwgJnRjYl9kZXNjKTsKKwlyZXR1cm47CisKK2Vycl9mcmVlOgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHJ0bF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJaW50IGVyciA9IDA7CisKKwlpZiAobWFjLT52aWYpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgidmlmIGhhcyBiZWVuIHNldCEhIG1hYy0+dmlmID0gMHglcFxuIiwgbWFjLT52aWYpKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXZpZi0+ZHJpdmVyX2ZsYWdzIHw9IElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUjsKKworCXJ0bDkyZV9pcHNfbmljX29uKGh3KTsKKworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCXN3aXRjaCAoaWVlZTgwMjExX3ZpZl90eXBlX3AycCh2aWYpKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCQltYWMtPnAycCA9IFAyUF9ST0xFX0NMSUVOVDsKKwkJLypmYWxsIHRocm91Z2gqLworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKG1hYy0+YmVhY29uX2VuYWJsZWQgPT0gMSkgeworCQkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCisJCQkJICgiTkw4MDIxMV9JRlRZUEVfU1RBVElPTlxuIikpOworCQkJbWFjLT5iZWFjb25fZW5hYmxlZCA9IDA7CisJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX2ludGVycnVwdF9tYXNrKGh3LCAwLAorCQkJCQlydGxwcml2LT5jZmctPm1hcHNbUlRMX0lCU1NfSU5UX01BU0tTXSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCisJCQkgKCJOTDgwMjExX0lGVFlQRV9BREhPQ1xuIikpOworCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfYmNuX3JlZyhodyk7CisJCWlmIChydGxwcml2LT5ydGxoYWwuY3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpCisJCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZmY7CisJCWVsc2UKKwkJCW1hYy0+YmFzaWNfcmF0ZXMgPSAweGZmMDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9CQVNJQ19SQVRFLAorCQkJCSh1OCAqKSgmbWFjLT5iYXNpY19yYXRlcykpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKKwkJbWFjLT5wMnAgPSBQMlBfUk9MRV9HTzsKKwkJLypmYWxsIHRocm91Z2gqLworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiTkw4MDIxMV9JRlRZUEVfQVBcbiIpKTsKKworCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfYmNuX3JlZyhodyk7CisJCWlmIChydGxwcml2LT5ydGxoYWwuY3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpCisJCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZmY7CisJCWVsc2UKKwkJCW1hYy0+YmFzaWNfcmF0ZXMgPSAweGZmMDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9CQVNJQ19SQVRFLAorCQkJCQkgICAgICAodTggKikoJm1hYy0+YmFzaWNfcmF0ZXMpKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCSAoIk5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlRcbiIpKTsKKworCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfYmNuX3JlZyhodyk7CisJCWlmIChydGxwcml2LT5ydGxoYWwuY3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpCisJCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZmY7CisJCWVsc2UKKwkJCW1hYy0+YmFzaWNfcmF0ZXMgPSAweGZmMDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9CQVNJQ19SQVRFLAorCQkJCSh1OCAqKSgmbWFjLT5iYXNpY19yYXRlcykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgib3BlcmF0aW9uIG1vZGUgJWQgaXMgbm90IHN1cHBvcnQhXG4iLCB2aWYtPnR5cGUpKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworI2lmZGVmIFZJRl9UT0RPCisJaWYgKCFydGxfc2V0X3ZpZl9pbmZvKGh3LCB2aWYpKQorCQlnb3RvIG91dDsKKyNlbmRpZgorCisJaWYgKG1hYy0+cDJwKSB7CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgicDJwIHJvbGUgJXhcbiIsIHZpZi0+dHlwZSkpOworCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZjA7LypkaXNhYmxlIGNjayByYXRlIGZvciBwMnAqLworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0JBU0lDX1JBVEUsCisJCQkJKHU4ICopKCZtYWMtPmJhc2ljX3JhdGVzKSk7CisJfQorCW1hYy0+dmlmID0gdmlmOworCW1hYy0+b3Btb2RlID0gdmlmLT50eXBlOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCB2aWYtPnR5cGUpOworCWV0aGVyX2FkZHJfY29weShtYWMtPm1hY19hZGRyLCB2aWYtPmFkZHIpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRVRIRVJfQUREUiwgbWFjLT5tYWNfYWRkcik7CisKK291dDoKKwltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJbXV0ZXhfbG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisKKwkvKiBGcmVlIGJlYWNvbiByZXNvdXJjZXMgKi8KKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAobWFjLT5iZWFjb25fZW5hYmxlZCA9PSAxKSB7CisJCQltYWMtPmJlYWNvbl9lbmFibGVkID0gMDsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfaW50ZXJydXB0X21hc2soaHcsIDAsCisJCQkJCXJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSUJTU19JTlRfTUFTS1NdKTsKKwkJfQorCX0KKworCS8qCisJICpOb3RlOiBXZSBhc3N1bWUgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQgYXMKKwkgKk5PIExJTksgZm9yIG91ciBoYXJkd2FyZS4KKwkgKi8KKwltYWMtPnAycCA9IDA7CisJbWFjLT52aWYgPSBOVUxMOworCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKKwltZW1zZXQobWFjLT5ic3NpZCwgMCwgNik7CisJbWFjLT52ZW5kb3IgPSBQRUVSX1VOS05PV047CisJbWFjLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X25ldHdvcmtfdHlwZShodywgbWFjLT5vcG1vZGUpOworCisJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKK30KKy8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KK3N0YXRpYyBpbnQgcnRsX29wX2NoYW5nZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIG5ld190eXBlLCBib29sIHAycCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJaW50IHJldDsKKwlydGxfb3BfcmVtb3ZlX2ludGVyZmFjZShodywgdmlmKTsKKworCXZpZi0+dHlwZSA9IG5ld190eXBlOworCXZpZi0+cDJwID0gcDJwOworCXJldCA9IHJ0bF9vcF9hZGRfaW50ZXJmYWNlKGh3LCB2aWYpOworCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkgKCIgcDJwICAleFxuIiwgcDJwKSk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHUxNiBjcmMxNl9jY2l0dCh1OCBkYXRhLCB1MTYgY3JjKQoreworCXU4IHNoaWZ0X2luLCBkYXRhX2JpdCwgY3JjX2JpdDExLCBjcmNfYml0NCwgY3JjX2JpdDE1OworCXU4IGk7CisJdTE2IHJlc3VsdDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJY3JjX2JpdDE1ID0gKChjcmMgJiBCSVQoMTUpKSA/IDEgOiAwKTsKKwkJZGF0YV9iaXQgID0gKGRhdGEgJiAoQklUKDApIDw8IGkpID8gMSA6IDApOworCQlzaGlmdF9pbiA9IGNyY19iaXQxNSBeIGRhdGFfYml0OworCisJCXJlc3VsdCA9IGNyYyA8PCAxOworCQlpZiAoc2hpZnRfaW4gPT0gMCkKKwkJCXJlc3VsdCAmPSAofkJJVCgwKSk7CisJCWVsc2UKKwkJCXJlc3VsdCB8PSBCSVQoMCk7CisKKwkJY3JjX2JpdDExID0gKChjcmMgJiBCSVQoMTEpKSA/IDEgOiAwKSBeIHNoaWZ0X2luOworCQlpZiAoY3JjX2JpdDExID09IDApCisJCQlyZXN1bHQgJj0gKH5CSVQoMTIpKTsKKwkJZWxzZQorCQkJcmVzdWx0IHw9IEJJVCgxMik7CisKKwkJY3JjX2JpdDQgPSAoKGNyYyAmIEJJVCg0KSkgPyAxIDogMCkgXiBzaGlmdF9pbjsKKwkJaWYgKGNyY19iaXQ0ID09IDApCisJCQlyZXN1bHQgJj0gKH5CSVQoNSkpOworCQllbHNlCisJCQlyZXN1bHQgfD0gQklUKDUpOworCisJCWNyYyA9IHJlc3VsdDsKKwl9CisKKwlyZXR1cm4gY3JjOworfQorCitzdGF0aWMgdTE2IF9jYWxjdWxhdGVfd29sX3BhdHRlcm5fY3JjKHU4ICpwYXR0ZXJuLCB1MTYgbGVuKQoreworCXUxNiBjcmMgPSAweGZmZmY7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWNyYyA9IGNyYzE2X2NjaXR0KHBhdHRlcm5baV0sIGNyYyk7CisJY3JjID0gfmNyYzsKKworCXJldHVybiBjcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfYWRkX3dvd2xhbl9wYXR0ZXJucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvdykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9ICYocnRscHJpdi0+bWFjODAyMTEpOworCXN0cnVjdCBjZmc4MDIxMV9wa3RfcGF0dGVybiAqcGF0dGVybnMgPSB3b3ctPnBhdHRlcm5zOworCXN0cnVjdCBydGxfd293X3BhdHRlcm4gcnRsX3BhdHRlcm47CisJdTggKnBhdHRlcm5fb3MsICptYXNrX29zOworCXU4IG1hc2tbTUFYX1dPTF9CSVRfTUFTS19TSVpFXSA9IHswfTsKKwl1OCBjb250ZW50W01BWF9XT0xfUEFUVEVSTl9TSVpFXSA9IHswfTsKKwl1OCBicm9hZGNhc3RfYWRkcls2XSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKwl1OCBtdWx0aWNhc3RfYWRkcjFbMl0gPSB7MHgzMywgMHgzM307CisJdTggbXVsdGljYXN0X2FkZHIyWzNdID0gezB4MDEsIDB4MDAsIDB4NWV9OworCXU4IGksIG1hc2tfbGVuOworCXUxNiBqLCBsZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgd293LT5uX3BhdHRlcm5zOyBpKyspIHsKKwkJbWVtc2V0KCZydGxfcGF0dGVybiwgMCwgc2l6ZW9mKHN0cnVjdCBydGxfd293X3BhdHRlcm4pKTsKKwkJbWVtc2V0KG1hc2ssIDAsIE1BWF9XT0xfQklUX01BU0tfU0laRSk7CisJCWlmIChwYXR0ZXJuc1tpXS5wYXR0ZXJuX2xlbiA+IE1BWF9XT0xfUEFUVEVSTl9TSVpFKSB7CisJCQlSVF9UUkFDRShDT01QX1BPV0VSLCBEQkdfV0FSTklORywKKwkJCQkgKCJQYXR0ZXJuWyVkXSBpcyB0b28gbG9uZ1xuIiwgaSkpOworCQkJY29udGludWU7CisJCX0KKwkJcGF0dGVybl9vcyA9IHBhdHRlcm5zW2ldLnBhdHRlcm47CisJCW1hc2tfbGVuID0gRElWX1JPVU5EX1VQKHBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuLCA4KTsKKwkJbWFza19vcyA9IHBhdHRlcm5zW2ldLm1hc2s7CisJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICAgICAgInBhdHRlcm4gY29udGVudFxuIiwgcGF0dGVybl9vcywKKwkJCSAgICAgIHBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuKTsKKwkJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCisJCQkgICAgICAibWFzayBjb250ZW50XG4iLCBtYXNrX29zLCBtYXNrX2xlbik7CisJCS8qIDEuIHVuaWNhc3Q/IG11bHRpY2FzdD8gb3IgYnJvYWRjYXN0PyAqLworCQlpZiAobWVtY21wKHBhdHRlcm5fb3MsIGJyb2FkY2FzdF9hZGRyLCA2KSA9PSAwKQorCQkJcnRsX3BhdHRlcm4udHlwZSA9IEJST0FEQ0FTVF9QQVRURVJOOworCQllbHNlIGlmIChtZW1jbXAocGF0dGVybl9vcywgbXVsdGljYXN0X2FkZHIxLCAyKSA9PSAwIHx8CisJCQkgbWVtY21wKHBhdHRlcm5fb3MsIG11bHRpY2FzdF9hZGRyMiwgMykgPT0gMCkKKwkJCXJ0bF9wYXR0ZXJuLnR5cGUgPSBNVUxUSUNBU1RfUEFUVEVSTjsKKwkJZWxzZSBpZiAgKG1lbWNtcChwYXR0ZXJuX29zLCBtYWMtPm1hY19hZGRyLCA2KSA9PSAwKQorCQkJcnRsX3BhdHRlcm4udHlwZSA9IFVOSUNBU1RfUEFUVEVSTjsKKwkJZWxzZQorCQkJcnRsX3BhdHRlcm4udHlwZSA9IFVOS05PV05fVFlQRTsKKworCQkvKiAyLiB0cmFuc2xhdGUgbWFza19mcm9tX29zIHRvIG1hc2tfZm9yX2h3ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBhdHRlcm4gZnJvbSBPUyB1c2VzICdldGhlbmV0IGZyYW1lJywgbGlrZSB0aGlzOgorCisJCSAgIHwgICAgNiAgIHwgICAgNiAgIHwgICAyICB8ICAgICAyMCAgICB8ICBWYXJpYWJsZSAgfAk0ICB8CisJCSAgIHwtLS0tLS0tLSstLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tfAorCQkgICB8ICAgIDgwMi4zIE1hYyBIZWFkZXIgICAgfCBJUCBIZWFkZXIgfCBUQ1AgUGFja2V0IHwgRkNTIHwKKwkJICAgfCAgIERBICAgfCAgIFNBICAgfCBUeXBlIHwKKworICogQlVULCBwYWNrZXQgY2F0Y2hlZCBieSBvdXIgSFcgaXMgaW4gJzgwMi4xMSBmcmFtZScsIGJlZ2luIGZyb20gTExDLAorCisJfCAgICAgMjQgb3IgMzAgICAgICB8ICAgIDYgICB8ICAgMiAgfCAgICAgMjAgICAgfCAgVmFyaWFibGUgIHwgIDQgIHwKKwl8LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tfAorCXwgODAyLjExIE1BQyBIZWFkZXIgfCAgICAgICBMTEMgICAgIHwgSVAgSGVhZGVyIHwgVENQIFBhY2tldCB8IEZDUyB8CisJCQkgICAgfCBPdGhlcnMgfCBUcHllIHwKKworICogVGhlcmVmb3JlLCB3ZSBuZWVkIHRyYW5zbGF0ZSBtYXNrX2Zyb21fT1MgdG8gbWFza190b19ody4KKyAqIFdlIHNob3VsZCBsZWZ0LXNoaWZ0IG1hc2sgYnkgNiBiaXRzLCB0aGVuIHNldCB0aGUgbmV3IGJpdFswfjVdID0gMCwKKyAqIGJlY2F1c2UgbmV3IG1hc2tbMH41XSBtZWFucyAnU0EnLCBidXQgb3VyIEhXIHBhY2tldCBiZWdpbnMgZnJvbSBMTEMsCisgKiBiaXRbMH41XSBjb3JyZXNwb25kcyB0byBmaXJzdCA2IEJ5dGVzIGluIExMQywgdGhleSBqdXN0IGRvbid0IG1hdGNoLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBTaGlmdCA2IGJpdHMgKi8KKwkJZm9yIChqID0gMDsgaiA8IG1hc2tfbGVuIC0gMTsgaisrKSB7CisJCQltYXNrW2pdID0gbWFza19vc1tqXSA+PiA2OworCQkJbWFza1tqXSB8PSAobWFza19vc1tqICsgMV0gJiAweDNGKSA8PCAyOworCQl9CisJCW1hc2tbal0gPSAobWFza19vc1tqXSA+PiA2KSAmIDB4M0Y7CisJCS8qIFNldCBiaXQgMC01IHRvIHplcm8gKi8KKwkJbWFza1swXSAmPSAweEMwOworCisJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICAgICAgIm1hc2sgdG8gaHdcbiIsIG1hc2ssIG1hc2tfbGVuKTsKKwkJZm9yIChqID0gMDsgaiA8IChNQVhfV09MX0JJVF9NQVNLX1NJWkUgKyAxKSAvIDQ7IGorKykgeworCQkJcnRsX3BhdHRlcm4ubWFza1tqXSA9IG1hc2tbaiAqIDRdOworCQkJcnRsX3BhdHRlcm4ubWFza1tqXSB8PSAobWFza1tqICogNCArIDFdIDw8IDgpOworCQkJcnRsX3BhdHRlcm4ubWFza1tqXSB8PSAobWFza1tqICogNCArIDJdIDw8IDE2KTsKKwkJCXJ0bF9wYXR0ZXJuLm1hc2tbal0gfD0gKG1hc2tbaiAqIDQgKyAzXSA8PCAyNCk7CisJCX0KKworCQkvKiBUbyBnZXQgdGhlIHdha2UgdXAgcGF0dGVybiBmcm9tIHRoZSBtYXNrLgorCQkgKiBXZSBkbyBub3QgY291bnQgZmlyc3QgMTIgYml0cyB3aGljaCBtZWFucworCQkgKiBEQVs2XSBhbmQgU0FbNl0gaW4gdGhlIHBhdHRlcm4gdG8gbWF0Y2ggSFcgZGVzaWduLiAqLworCQlsZW4gPSAwOworCQlmb3IgKGogPSAxMjsgaiA8IHBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuOyBqKyspIHsKKwkJCWlmICgobWFza19vc1tqIC8gOF0gPj4gKGogJSA4KSkgJiAweDAxKSB7CisJCQkJY29udGVudFtsZW5dID0gcGF0dGVybl9vc1tqXTsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJfQorCisJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICAgICAgInBhdHRlcm4gdG8gaHdcbiIsIGNvbnRlbnQsIGxlbik7CisJCS8qIDMuIGNhbGN1bGF0ZSBjcmMgKi8KKwkJcnRsX3BhdHRlcm4uY3JjID0gX2NhbGN1bGF0ZV93b2xfcGF0dGVybl9jcmMoY29udGVudCwgbGVuKTsKKwkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICgiQ1JDX1JlbWFpbmRlciA9IDB4JXgiLCBydGxfcGF0dGVybi5jcmMpKTsKKworCQkvKiA0LiB3cml0ZSBjcmMgJiBtYXNrX2Zvcl9odyB0byBodyAqLworCQlydGxwcml2LT5jZmctPm9wcy0+YWRkX3dvd2xhbl9wYXR0ZXJuKGh3LCAmcnRsX3BhdHRlcm4sIGkpOworCX0KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDY5OCwgd293LT5uX3BhdHRlcm5zKTsKK30KKworc3RhdGljIGludCBydGxfb3Bfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgdGltZXZhbCB0czsKKworCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19ETUVTRywgKCJcbiIpKTsKKwlpZiAoV0FSTl9PTighd293KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB0byByZXNvbHZlIHM0IGNhbiBub3Qgd2FrZSB1cCovCisJZG9fZ2V0dGltZW9mZGF5KCZ0cyk7CisJcnRsaGFsLT5sYXN0X3N1c3BlbmRfc2VjID0gdHMudHZfc2VjOworCisJaWYgKChwcHNjLT53b193bGFuX21vZGUgJiBXQUtFX09OX1BBVFRFUk5fTUFUQ0gpICYmIHdvdy0+bl9wYXR0ZXJucykKKwkJX3J0bF9hZGRfd293bGFuX3BhdHRlcm5zKGh3LCB3b3cpOworCisJcnRsaGFsLT5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgPSB0cnVlOworCXJ0bGhhbC0+Yl9lbnRlcl9wbnBfc2xlZXAgPSB0cnVlOworCisJcnRsOTJlX2xwc19sZWF2ZShodyk7CisJcnRsX29wX3N0b3AoaHcpOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSh3aXBoeV9kZXYoaHctPndpcGh5KSwgdHJ1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsX29wX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgdGltZXZhbCB0czsKKworCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19ETUVTRywgKCJcbiIpKTsKKwlydGxoYWwtPmRyaXZlcl9pc19nb2luZ3RvX3VubG9hZCA9IGZhbHNlOworCXJ0bGhhbC0+Yl9lbnRlcl9wbnBfc2xlZXAgPSBmYWxzZTsKKwlydGxoYWwtPmJfd2FrZV9mcm9tX3BucF9zbGVlcCA9IHRydWU7CisKKwkvKiB0byByZXNvdmxlIHM0IGNhbiBub3Qgd2FrZSB1cCovCisJZG9fZ2V0dGltZW9mZGF5KCZ0cyk7CisJaWYgKHRzLnR2X3NlYyAtIHJ0bGhhbC0+bGFzdF9zdXNwZW5kX3NlYyA8IDUpCisJCXJldHVybiAtMTsKKworCXJ0bF9vcF9zdGFydChodyk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHdpcGh5X2Rldihody0+d2lwaHkpLCBmYWxzZSk7CisJaWVlZTgwMjExX3Jlc3VtZV9kaXNjb25uZWN0KG1hYy0+dmlmKTsKKwlydGxoYWwtPmJfd2FrZV9mcm9tX3BucF9zbGVlcCA9IGZhbHNlOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcnRsX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisKKwlpZiAobWFjLT5za2lwX3NjYW4pCisJCXJldHVybiAxOworCisKKwltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwpIHsJLyogQklUKDIpICovCisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTFxuIikpOworCX0KKworCS8qRm9yIElQUyAqLworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpIHsKKwkJaWYgKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkKKwkJCXJ0bDkyZV9pcHNfbmljX29mZihodyk7CisJCWVsc2UKKwkJCXJ0bDkyZV9pcHNfbmljX29uKGh3KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKmFsdGhvdWdoIHJmb2ZmIG1heSBub3QgY2F1c2UgYnkgaXBzLCBidXQgd2Ugd2lsbAorCQkgKmNoZWNrIHRoZSByZWFzb24gaW4gc2V0X3JmX3Bvd2VyX3N0YXRlIGZ1bmN0aW9uCisJCSAqLworCQlpZiAodW5saWtlbHkocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT0ZGKSkKKwkJCXJ0bDkyZV9pcHNfbmljX29uKGh3KTsKKwl9CisKKwkvKkZvciBMUFMgKi8KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy5wc193b3JrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcnRscHJpdi0+d29ya3MucHNfcmZvbl93cSk7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCA9IHRydWU7CisJCQkvKiBzbGVlcCBoZXJlIGlzIG11c3QsIG9yIHdlIG1heSByZWN2IHRoZSBiZWFjb24gYW5kCisJCQkgKiBjYXVzZSBtYWM4MDIxMSBpbnRvIHdyb25nIHBzIHN0YXRlLCB0aGlzIHdpbGwgY2F1c2UKKwkJCSAqIHBvd2VyIHNhdmUgbnVsbGZ1bmMgc2VuZCBmYWlsLCBhbmQgZnVydGhlciBjYXVzZQorCQkJICogcGt0IGxvc3MsIFNvIHNsZWVwIG11c3QgcXVpY2tseSBidXQgbm90IGltbWVkaWF0bHkKKwkJCSAqIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIG51bGxmdW5jIHNlbmQgYnkgbWFjODAyMTEKKwkJCSAqIGZhaWwsIGFuZCBjYXVzZSBwa3QgbG9zcywgd2UgaGF2ZSB0ZXN0ZWQgdGhhdCA1bUEKKwkJCSAqIGlzIHdvcmtlZCB2ZXJ5IHdlbGwgKi8KKwkJCWlmICghcnRscHJpdi0+cHNjLm11bHRpX2J1ZmZlcmVkKQorCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhydGxwcml2LT53b3Jrcy5ydGxfd3EsCisJCQkJCQkgICAmcnRscHJpdi0+d29ya3MucHNfd29yaywKKwkJCQkJCSAgIE1TRUNTKDUpKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bDkyZV9zd2xwc19yZl9hd2FrZShodyk7CisJCQlydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCA9IGZhbHNlOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTKSB7CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUyAleFxuIiwKKwkJCSAgaHctPmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQpKTsKKwkJbWFjLT5yZXRyeV9sb25nID0gaHctPmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQ7CisJCW1hYy0+cmV0cnlfc2hvcnQgPSBody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SRVRSWV9MSU1JVCwKKwkJCQkodTggKikoJmh3LT5jb25mLmxvbmdfZnJhbWVfbWF4X3R4X2NvdW50KSk7CisJfQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwgJiYKKwkgICAgIXJ0bHByaXYtPnByb3hpbWl0eS5wcm94aW1fb24pIHsKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gaHctPmNvbmYuY2hhbmRlZi5jaGFuOworCQllbnVtIG5sODAyMTFfY2hhbl93aWR0aCB3aWR0aCA9IGh3LT5jb25mLmNoYW5kZWYud2lkdGg7CisJCXU4IHdpZGVfY2hhbiA9ICh1OCkgY2hhbm5lbC0+aHdfdmFsdWU7CisJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOworCisJCS8qIGNoYW5uZWxfdHlwZSBpcyBmb3IgMjAmNDBNICovCisJCWlmICh3aWR0aCA8IE5MODAyMTFfQ0hBTl9XSURUSF84MCkKKwkJCWNoYW5uZWxfdHlwZSA9IGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoJihody0+Y29uZi5jaGFuZGVmKSk7CisJCWlmIChtYWMtPmFjdF9zY2FubmluZykKKwkJCW1hYy0+bl9jaGFubmVscysrOworCisJCWlmIChydGxwcml2LT5kbS5zdXBwX3BoeW1vZGVfc3dpdGNoICYmCisJCSAgICBtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQgJiYKKwkJICAgICFtYWMtPmFjdF9zY2FubmluZykgeworCQkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5jaGVja19zd2l0Y2hfdG9fZG1kcCkKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+Y2hlY2tfc3dpdGNoX3RvX2RtZHAoaHcpOworCQl9CisKKwkJLyoKKwkJICpiZWNhdXNlIHdlIHNob3VsZCBiYWNrIGNoYW5uZWwgdG8KKwkJICpjdXJyZW50X25ldHdvcmsuY2hhbiBpbiBpbiBzY2FubmluZywKKwkJICpTbyBpZiBzZXRfY2hhbiA9PSBjdXJyZW50X25ldHdvcmsuY2hhbgorCQkgKndlIHNob3VsZCBzZXQgaXQuCisJCSAqYmVjYXVzZSBtYWM4MDIxMSB0ZWxsIHVzIHdyb25nIGJ3NDAKKwkJICppbmZvIGZvciBjaXNjbzEyNTMgYncyMCwgc28gd2UgbW9kaWZ5CisJCSAqaXQgaGVyZSBiYXNlZCBvbiBVUFBFUiAmIExPV0VSCisJCSAqLworCisJCWlmICh3aWR0aCA+PSBOTDgwMjExX0NIQU5fV0lEVEhfODApIHsKKwkJCWlmICh3aWR0aCA9PSBOTDgwMjExX0NIQU5fV0lEVEhfODApIHsKKwkJCQl1MzIgY2VudGVyX2ZyZXEgPSBody0+Y29uZi5jaGFuZGVmLmNlbnRlcl9mcmVxMTsKKwkJCQl1MzIgcHJpbWFyeV9mcmVxID0KKwkJCQkodTMyKWh3LT5jb25mLmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7CisKKwkJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9CisJCQkJCUhUX0NIQU5ORUxfV0lEVEhfODA7CisJCQkJbWFjLT5id184MCA9IHRydWU7CisJCQkJbWFjLT5id180MCA9IHRydWU7CisJCQkJaWYgKGNlbnRlcl9mcmVxID4gcHJpbWFyeV9mcmVxKSB7CisJCQkJCW1hYy0+Y3VyXzgwX3ByaW1lX3NjID0KKwkJCQkJUFJJTUVfQ0hOTF9PRkZTRVRfTE9XRVI7CisJCQkJCWlmIChjZW50ZXJfZnJlcSAtIHByaW1hcnlfZnJlcSA9PSAxMCkgeworCQkJCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MgPQorCQkJCQkJUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVI7CisKKwkJCQkJCXdpZGVfY2hhbiArPSAyOworCQkJCQl9IGVsc2UgaWYgKGNlbnRlcl9mcmVxIC0gcHJpbWFyeV9mcmVxID09IDMwKSB7CisJCQkJCQltYWMtPmN1cl80MF9wcmltZV9zYyA9CisJCQkJCQlQUklNRV9DSE5MX09GRlNFVF9MT1dFUjsKKworCQkJCQkJd2lkZV9jaGFuICs9IDY7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQltYWMtPmN1cl84MF9wcmltZV9zYyA9CisJCQkJCVBSSU1FX0NITkxfT0ZGU0VUX1VQUEVSOworCQkJCQlpZiAocHJpbWFyeV9mcmVxIC0gY2VudGVyX2ZyZXEgPT0gMTApIHsKKwkJCQkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjID0KKwkJCQkJCVBSSU1FX0NITkxfT0ZGU0VUX0xPV0VSOworCisJCQkJCQl3aWRlX2NoYW4gLT0gMjsKKwkJCQkJfSBlbHNlIGlmIChwcmltYXJ5X2ZyZXEgLSBjZW50ZXJfZnJlcSA9PSAzMCkgeworCQkJCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MgPQorCQkJCQkJUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVI7CisKKwkJCQkJCXdpZGVfY2hhbiAtPSA2OworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6CisJCQljYXNlIE5MODAyMTFfQ0hBTl9OT19IVDoKKwkJCQkvKiBTQyAqLworCQkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjID0KKwkJCQkJUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOworCQkJCXJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID0KKwkJCQkJSFRfQ0hBTk5FTF9XSURUSF8yMDsKKwkJCQltYWMtPmJ3XzQwID0gZmFsc2U7CisJCQkJbWFjLT5id184MCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgorCQkJCS8qIFNDICovCisJCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MgPQorCQkJCQlQUklNRV9DSE5MX09GRlNFVF9VUFBFUjsKKwkJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9CisJCQkJCUhUX0NIQU5ORUxfV0lEVEhfMjBfNDA7CisJCQkJbWFjLT5id180MCA9IHRydWU7CisJCQkJbWFjLT5id184MCA9IGZhbHNlOworCisJCQkJLyp3aWRlIGNoYW5uZWwgKi8KKwkJCQl3aWRlX2NoYW4gLT0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgorCQkJCS8qIFNDICovCisJCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MgPQorCQkJCQlQUklNRV9DSE5MX09GRlNFVF9MT1dFUjsKKwkJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9CisJCQkJCUhUX0NIQU5ORUxfV0lEVEhfMjBfNDA7CisJCQkJbWFjLT5id180MCA9IHRydWU7CisJCQkJbWFjLT5id184MCA9IGZhbHNlOworCQkJCS8qd2lkZSBjaGFubmVsICovCisJCQkJd2lkZV9jaGFuICs9IDI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1hYy0+YndfNDAgPSBmYWxzZTsKKwkJCQltYWMtPmJ3XzgwID0gZmFsc2U7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NlZFxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHdpZGVfY2hhbiA8PSAwKQorCQkJd2lkZV9jaGFuID0gMTsKKworCQkvKiBpbiBzY2FubmluZywgd2hlbiBiZWZvcmUgd2Ugb2ZmY2hhbm5lbCB3ZSBtYXkgc2VuZCBhIHBzPTEKKwkJICogbnVsbCB0byBBUCwgYW5kIHRoZW4gd2UgbWF5IHNlbmQgYSBwcyA9IDAgbnVsbCB0byBBUCBxdWlja2x5LAorCQkgKiBidXQgZmlyc3QgbnVsbCBoYXZlIGNhdXNlIEFQJ3MgcHV0IGxvdHMgb2YgcGFja2V0IHRvIGh3IHR4CisJCSAqIGJ1ZmZlciwgdGhlc2UgcGFja2V0IG11c3QgYmUgdHggYmVmb3JlIG9mZiBjaGFubmVsIHNvIHdlIG11c3QKKwkJICogZGVsYXkgbW9yZSB0aW1lIHRvIGxldCBBUCBmbHVzaCB0aGVzZSBwYWNrZXRzIGJlZm9yZQorCQkgKiBvZmZjaGFubmVsLCBvciBkaXMtYXNzb2NpYXRpb24gb3IgZGVsZXRlIEJBIHdpbGwgaGFwcGVuIGJ5IEFQCisJCSAqLworCQlpZiAocnRscHJpdi0+bWFjODAyMTEub2ZmY2hhbl9kZWxleSkgeworCQkJcnRscHJpdi0+bWFjODAyMTEub2ZmY2hhbl9kZWxleSA9IGZhbHNlOworCQkJbWRlbGF5KDUwKTsKKwkJfQorCisJCXJ0bHBoeS0+Y3VycmVudF9jaGFubmVsID0gd2lkZV9jaGFuOworCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zd2l0Y2hfY2hhbm5lbChodyk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfY2hhbm5lbF9hY2Nlc3MoaHcpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2J3X21vZGUoaHcsCisJCQljaGFubmVsX3R5cGUpOworCX0KKworCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKm5ld19mbGFncywgdTY0IG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCSpuZXdfZmxhZ3MgJj0gUlRMX1NVUFBPUlRFRF9GSUxURVJTOworCWlmICgwID09IGNoYW5nZWRfZmxhZ3MpCisJCXJldHVybjsKKworCS8qVE9ETzogd2UgZGlzYWJsZSBicm9hZGNhc2Ugbm93LCBzbyBlbmFibGUgaGVyZSAqLworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCQltYWMtPnJ4X2NvbmYgfD0gcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQU1dIHwKKwkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BQl07CisJCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJFbmFibGUgcmVjZWl2ZSBtdWx0aWNhc3QgZnJhbWUuXG4iKSk7CisJCX0gZWxzZSB7CisJCQltYWMtPnJ4X2NvbmYgJj0gfihydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BTV0gfAorCQkJCQkgIHJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FCXSk7CisJCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJEaXNhYmxlIHJlY2VpdmUgbXVsdGljYXN0IGZyYW1lLlxuIikpOworCQl9CisJfQorCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfRkNTRkFJTCkgeworCQlpZiAoKm5ld19mbGFncyAmIEZJRl9GQ1NGQUlMKSB7CisJCQltYWMtPnJ4X2NvbmYgfD0gcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUNSQzMyXTsKKwkJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkVuYWJsZSByZWNlaXZlIEZDUyBlcnJvciBmcmFtZS5cbiIpKTsKKwkJfSBlbHNlIHsKKwkJCW1hYy0+cnhfY29uZiAmPSB+cnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUNSQzMyXTsKKwkJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkRpc2FibGUgcmVjZWl2ZSBGQ1MgZXJyb3IgZnJhbWUuXG4iKSk7CisJCX0KKwl9CisKKwkvKiBpZiBzc2lkIG5vdCBzZXQgdG8gaHcgZG9uJ3QgY2hlY2sgYnNzaWQKKwkgKiBoZXJlIGp1c3QgdXNlZCBmb3IgbGlua2VkIHNjYW5uaW5nLCAmIGxpbmtlZAorCSAqIGFuZCBub2xpbmsgY2hlY2sgYnNzaWQgaXMgc2V0IGluIHNldCBuZXR3b3JrX3R5cGUgKi8KKwlpZiAoKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgJiYKKwkgICAgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpKSB7CisJCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCQkgICAgbWFjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Noa19ic3NpZChodywgZmFsc2UpOworCQkJZWxzZQorCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfY2hrX2Jzc2lkKGh3LCB0cnVlKTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpIHsKKwkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgeworCQkJbWFjLT5yeF9jb25mIHw9IHJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FDRl07CisKKwkJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkVuYWJsZSByZWNlaXZlIGNvbnRyb2wgZnJhbWUuXG4iKSk7CisJCX0gZWxzZSB7CisJCQltYWMtPnJ4X2NvbmYgJj0gfnJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FDRl07CisJCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJEaXNhYmxlIHJlY2VpdmUgY29udHJvbCBmcmFtZS5cbiIpKTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX09USEVSX0JTUykgeworCQlpZiAoKm5ld19mbGFncyAmIEZJRl9PVEhFUl9CU1MpIHsKKwkJCW1hYy0+cnhfY29uZiB8PSBydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BQVBdOworCQkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCisJCQkJICgiRW5hYmxlIHJlY2VpdmUgb3RoZXIgQlNTJ3MgZnJhbWUuXG4iKSk7CisJCX0gZWxzZSB7CisJCQltYWMtPnJ4X2NvbmYgJj0gfnJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FBUF07CisJCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJEaXNhYmxlIHJlY2VpdmUgb3RoZXIgQlNTJ3MgZnJhbWUuXG4iKSk7CisJCX0KKwl9Cit9CitzdGF0aWMgaW50IHJ0bF9vcF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OworCisJaWYgKHN0YSkgeworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZW50cnlfbGlzdF9sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmc3RhX2VudHJ5LT5saXN0LCAmcnRscHJpdi0+ZW50cnlfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5lbnRyeV9saXN0X2xvY2spOworCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykgeworCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9HOworCQkJaWYgKHN0YS0+c3VwcF9yYXRlc1swXSA8PSAweGYpCisJCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9COworCQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX05fMjRHOworCisJCQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfRzsKKwkJfSBlbHNlIGlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykgeworCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9BOworCQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX05fNUc7CisJCQlpZiAoc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpCisJCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9BQ181RzsKKworCQkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX0E7CisJCX0KKwkJLypkaXNhYmxlIGNjayByYXRlIGZvciBwMnAqLworCQlpZiAobWFjLT5wMnApCisJCQlzdGEtPnN1cHBfcmF0ZXNbMF0gJj0gMHhmZmZmZmZmMDsKKworCQlldGhlcl9hZGRyX2NvcHkoc3RhX2VudHJ5LT5tYWNfYWRkciwgc3RhLT5hZGRyKTsKKwkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAorCQkJICgiQWRkIHN0YSBhZGRyIGlzICVwTVxuIiwgc3RhLT5hZGRyKSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfcmF0ZV90YmwoaHcsIHN0YSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsX29wX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeTsKKwlpZiAoc3RhKSB7CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKKwkJCSAoIlJlbW92ZSBzdGEgYWRkciBpcyAlcE1cbiIsIHN0YS0+YWRkcikpOworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IDA7CisJCXN0YV9lbnRyeS0+cmF0cl9pbmRleCA9IDA7CisJCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZW50cnlfbGlzdF9sb2NrKTsKKwkJbGlzdF9kZWwoJnN0YV9lbnRyeS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5lbnRyeV9saXN0X2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgX3J0bF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlKQoreworCWludCBxbnVtOworCisJc3dpdGNoIChxdWV1ZSkgeworCWNhc2UgMDoKKwkJcW51bSA9IEFDM19WTzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlxbnVtID0gQUMyX1ZJOworCQlicmVhazsKKwljYXNlIDI6CisJCXFudW0gPSBBQzBfQkU7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcW51bSA9IEFDMV9CSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcW51bSA9IEFDMF9CRTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBxbnVtOworfQorCisvKgorICpmb3IgbWFjODAyMTEgVk89MCwgVkk9MSwgQkU9MiwgQks9MworICpmb3IgcnRsODE5eCAgQkU9MCwgQks9MSwgVkk9MiwgVk89MworICovCitzdGF0aWMgaW50IHJ0bF9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1MTYgcXVldWUsCisJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlpbnQgYWNpOworCisJaWYgKHF1ZXVlID49IEFDX01BWCkgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJxdWV1ZSBudW1iZXIgJWQgaXMgaW5jb3JyZWN0IVxuIiwgcXVldWUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWNpID0gX3J0bF9nZXRfaGFsX3FudW0ocXVldWUpOworCW1hYy0+YWNbYWNpXS5haWZzID0gcGFyYW0tPmFpZnM7CisJbWFjLT5hY1thY2ldLmN3X21pbiA9IGNwdV90b19sZTE2KHBhcmFtLT5jd19taW4pOworCW1hYy0+YWNbYWNpXS5jd19tYXggPSBjcHVfdG9fbGUxNihwYXJhbS0+Y3dfbWF4KTsKKwltYWMtPmFjW2FjaV0udHhfb3AgPSBjcHVfdG9fbGUxNihwYXJhbS0+dHhvcCk7CisJbWVtY3B5KCZtYWMtPmVkY2FfcGFyYW1bYWNpXSwgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X3FvcyhodywgYWNpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAorCQkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCWlmICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fAorCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7CisJCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgfHwKKwkJICAgIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgJiYKKwkJICAgICBic3NfY29uZi0+ZW5hYmxlX2JlYWNvbikpIHsKKwkJCWlmIChtYWMtPmJlYWNvbl9lbmFibGVkID09IDApIHsKKwkJCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkJCSAoIkJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEXG4iKSk7CisKKwkJCQkvKnN0YXJ0IGh3IGJlYWNvbiBpbnRlcnJ1cHQuICovCisJCQkJLypydGxwcml2LT5jZmctPm9wcy0+c2V0X2Jjbl9yZWcoaHcpOyAqLworCQkJCW1hYy0+YmVhY29uX2VuYWJsZWQgPSAxOworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfaW50ZXJydXB0X21hc2soaHcsCisJCQkJCQlydGxwcml2LT5jZmctPm1hcHMKKwkJCQkJCVtSVExfSUJTU19JTlRfTUFTS1NdLCAwKTsKKworCQkJCWlmIChydGxwcml2LT5jZmctPm9wcy0+bGlua2VkX3NldF9yZWcpCisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5saW5rZWRfc2V0X3JlZyhodyk7CisJCQl9CisJCX0KKwkJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpICYmCisJCSAgICAhYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24pIHsKKwkJCWlmIChtYWMtPmJlYWNvbl9lbmFibGVkID09IDEpIHsKKwkJCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkJCSAoIkFESE9DIERJU0FCTEUgQkVBQ09OXG4iKSk7CisKKwkJCQltYWMtPmJlYWNvbl9lbmFibGVkID0gMDsKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX2ludGVycnVwdF9tYXNrKGh3LCAwLAorCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzCisJCQkJCQlbUlRMX0lCU1NfSU5UX01BU0tTXSk7CisJCQl9CisJCX0KKwkJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSB7CisJCQlSVF9UUkFDRShDT01QX0JFQUNPTiwgREJHX1RSQUNFLAorCQkJCSAoIkJTU19DSEFOR0VEX0JFQUNPTl9JTlRcbiIpKTsKKwkJCW1hYy0+YmVhY29uX2ludGVydmFsID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Jjbl9pbnR2KGh3KTsKKwkJfQorCX0KKworCS8qVE9ETzogcmVmZXJlbmNlIHRvIGVudW0gaWVlZTgwMjExX2Jzc19jaGFuZ2UgKi8KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CisJCXU4IG1zdGF0dXM7CisJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOworCQkJdTgga2VlcF9hbGl2ZSA9IDEwOworCisJCQltc3RhdHVzID0gUlRfTUVESUFfQ09OTkVDVDsKKwkJCS8qIHdlIHNob3VsZCByZXNldCBhbGwgc2VjIGluZm8gJiBjYW0KKwkJCSAqIGJlZm9yZSBzZXQgY2FtIGFmdGVyIGxpbmtlZCwgd2Ugc2hvdWxkIG5vdAorCQkJICogcmVzZXQgaW4gZGlzYXNzb2MsIHRoYXQgd2lsbCBjYXVzZSB0a2lwLT53ZXAKKwkJCSAqIGZhaWwgYmVjYXVzZSBzb21lIGZsYWcgd2lsbCBiZSB3cm9uZyAqLworCQkJLyogcmVzZXQgc2VjIGluZm8gKi8KKwkJCXJ0bDkyZV9jYW1fcmVzZXRfc2VjX2luZm8oaHcpOworCQkJLyogcmVzZXQgY2FtIHRvIGZpeCB3ZXAgZmFpbCBpc3N1ZQorCQkJICogd2hlbiBjaGFuZ2UgZnJvbSB3cGEgdG8gd2VwICovCisJCQlzdGdfcnRsX2NhbV9yZXNldF9hbGxfZW50cnkoaHcpOworCisJCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CisJCQltYWMtPmNudF9hZnRlcl9saW5rZWQgPSAwOworCQkJbWFjLT5hc3NvY19pZCA9IGJzc19jb25mLT5haWQ7CisJCQltZW1jcHkobWFjLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCA2KTsKKworCQkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5saW5rZWRfc2V0X3JlZykKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+bGlua2VkX3NldF9yZWcoaHcpOworCisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEodmlmLCAodTggKilic3NfY29uZi0+YnNzaWQpOworCQkJaWYgKCFzdGEpIHsKKwkJCQlwcl9lcnIoImllZWU4MDIxMV9maW5kX3N0YSByZXR1cm5lZCBOVUxMXG4iKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmIHN0YSkKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsIDApOworCQkJUlRfVFJBQ0UoQ09NUF9FQVNZX0NPTkNVUlJFTlQsIERCR19MT1VELAorCQkJCSAoInNlbmQgUFMgU1RBVElDIGZyYW1lXG4iKSk7CisJCQlpZiAocnRscHJpdi0+ZG0uc3VwcF9waHltb2RlX3N3aXRjaCkgeworCQkJCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJCQkJCXN0Z19ydGxfc2VuZF9zbXBzX2FjdGlvbihodywgc3RhLAorCQkJCQkJCUlFRUU4MDIxMV9TTVBTX1NUQVRJQyk7CisJCQl9CisKKwkJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykgeworCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfQTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHN0YS0+c3VwcF9yYXRlc1swXSA8PSAweGYpCisJCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfQjsKKwkJCQllbHNlCisJCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfRzsKKwkJCX0KKworCQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQkJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl8yXzRHKQorCQkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX05fMjRHOworCQkJCWVsc2UKKwkJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9OXzVHOworCQkJfQorCisJCQlpZiAoc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpIHsKKwkJCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpCisJCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfQUNfNUc7CisJCQkJZWxzZQorCQkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0FDXzI0RzsKKwkJCX0KKworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJCS8qIHRvIGF2b2lkIEFQIERpc2Fzc29jaWF0aW9uIGNhdXNlZCBieSBpbmFjdGl2aXR5ICovCisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCSAgICAgIEhXX1ZBUl9LRUVQX0FMSVZFLAorCQkJCQkJICAgICAgKHU4ICopKCZrZWVwX2FsaXZlKSk7CisKKwkJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKKwkJCQkgKCJCU1NfQ0hBTkdFRF9BU1NPQ1xuIikpOworCQl9IGVsc2UgeworCQkJbXN0YXR1cyA9IFJUX01FRElBX0RJU0NPTk5FQ1Q7CisKKwkJCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKQorCQkJCXJ0bDkyZV9scHNfbGVhdmUoaHcpOworCQkJaWYgKHBwc2MtPnAycF9wc19pbmZvLnAycF9wc19tb2RlID4gUDJQX1BTX05PTkUpCisJCQkJcnRsOTJlX3AycF9wc19jbWQoaHcsIFAyUF9QU19ESVNBQkxFKTsKKwkJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKKwkJCW1lbXNldChtYWMtPmJzc2lkLCAwLCA2KTsKKwkJCW1hYy0+dmVuZG9yID0gUEVFUl9VTktOT1dOOworCQkJbWFjLT5tb2RlID0gMDsKKworCQkJaWYgKHJ0bHByaXYtPmRtLnN1cHBfcGh5bW9kZV9zd2l0Y2gpIHsKKwkJCQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmNoZWNrX3N3aXRjaF90b19kbWRwKQorCQkJCQlydGxwcml2LT5jZmctPm9wcy0+Y2hlY2tfc3dpdGNoX3RvX2RtZHAoaHcpOworCQkJfQorCQkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAorCQkJCSAoIkJTU19DSEFOR0VEX1VOX0FTU09DXG4iKSk7CisJCX0KKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIHZpZi0+dHlwZSk7CisJCS8qIEZvciBGVyBMUFM6CisJCSAqIFRvIHRlbGwgZmlybXdhcmUgd2UgaGF2ZSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkKi8KKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCSAgICAgIEhXX1ZBUl9IMkNfRldfSk9JTkJTU1JQVCwKKwkJCQkJICAgICAgKHU4ICopKCZtc3RhdHVzKSk7CisJCXBwc2MtPnJlcG9ydF9saW5rZWQgPSAobXN0YXR1cyA9PSBSVF9NRURJQV9DT05ORUNUKSA/CisJCQkJICAgICAgdHJ1ZSA6IGZhbHNlOworCisJCWlmIChydGxwcml2LT5jZmctPm9wcy0+Z2V0X2J0Y19zdGF0dXMoKSkKKwkJCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfb3BzLT5idGNfbWVkaWFzdGF0dXNfbm90aWZ5KAorCQkJCQkJCXJ0bHByaXYsIG1zdGF0dXMpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIkJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVFxuIikpOworCQltYWMtPnVzZV9jdHNfcHJvdGVjdCA9IGJzc19jb25mLT51c2VfY3RzX3Byb3Q7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKKwkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCisJCQkgKCJCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUgdXNlIHNob3J0IHByZWFtYmxlOiV4XG4iLAorCQkJICBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKSk7CisKKwkJbWFjLT5zaG9ydF9wcmVhbWJsZSA9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQUNLX1BSRUFNQkxFLAorCQkJCQkgICAgICAodTggKikoJm1hYy0+c2hvcnRfcHJlYW1ibGUpKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIkJTU19DSEFOR0VEX0VSUF9TTE9UXG4iKSk7CisKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKKwkJCW1hYy0+c2xvdF90aW1lID0gUlRMX1NMT1RfVElNRV85OworCQllbHNlCisJCQltYWMtPnNsb3RfdGltZSA9IFJUTF9TTE9UX1RJTUVfMjA7CisKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TTE9UX1RJTUUsCisJCQkJCSAgICAgICh1OCAqKSgmbWFjLT5zbG90X3RpbWUpKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0hUKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOworCisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIkJTU19DSEFOR0VEX0hUXG4iKSk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEodmlmLCAodTggKilic3NfY29uZi0+YnNzaWQpOworCQlpZiAoc3RhKSB7CisJCQlpZiAoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA+CisJCQkgICAgbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkpCisJCQkJbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkgPQorCQkJCSAgICBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCQkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciA8CisJCQkgICAgbWFjLT5jdXJyZW50X2FtcGR1X2ZhY3RvcikKKwkJCQltYWMtPmN1cnJlbnRfYW1wZHVfZmFjdG9yID0KKwkJCQkgICAgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfU0hPUlRHSV9ERU5TSVRZLAorCQkJCQkgICAgICAodTggKikoJm1hYy0+bWF4X21zc19kZW5zaXR5KSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQU1QRFVfRkFDVE9SLAorCQkJCQkgICAgICAmbWFjLT5jdXJyZW50X2FtcGR1X2ZhY3Rvcik7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQU1QRFVfTUlOX1NQQUNFLAorCQkJCQkgICAgICAmbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKKwkJdTMyIGJhc2ljX3JhdGVzOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gTlVMTDsKKworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0JTU0lELAorCQkJCQkgICAgICAodTggKilic3NfY29uZi0+YnNzaWQpOworCisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKKwkJCSAoImJzc2lkOiAlcE1cbiIsIGJzc19jb25mLT5ic3NpZCkpOworCisJCW1hYy0+dmVuZG9yID0gUEVFUl9VTktOT1dOOworCQltZW1jcHkobWFjLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCA2KTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsICh1OCAqKWJzc19jb25mLT5ic3NpZCk7CisJCWlmICghc3RhKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKSB7CisJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0E7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhLT5zdXBwX3JhdGVzWzBdIDw9IDB4ZikKKwkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0I7CisJCQllbHNlCisJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9HOworCQl9CisKKwkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpCisJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9OXzI0RzsKKwkJCWVsc2UKKwkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX05fNUc7CisJCX0KKworCQlpZiAoc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpIHsKKwkJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykKKwkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0FDXzVHOworCQkJZWxzZQorCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfQUNfMjRHOworCQl9CisKKwkJLyoganVzdCBzdGF0aW9uIG5lZWQgaXQsIGJlY2F1c2UgaWJzcyAmIGFwIG1vZGUgd2lsbAorCQkgKiBzZXQgaW4gc3RhX2FkZCwgYW5kIHdpbGwgYmUgTlVMTCBoZXJlICovCisJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OworCQkJc3RhX2VudHJ5ID0gKHN0cnVjdCBydGxfc3RhX2luZm8gKilzdGEtPmRydl9wcml2OworCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gbWFjLT5tb2RlOworCQl9CisKKwkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQkJbWFjLT5odF9lbmFibGUgPSB0cnVlOworCisJCQkvKgorCQkJICogZm9yIGNpc2NvIDEyNTIgYncyMCBpdCdzIHdyb25nCisJCQkgKiBpZiAoaHRfY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApIHsKKwkJCSAqCW1hYy0+YndfNDAgPSB0cnVlOworCQkJICogfQorCQkJICogKi8KKwkJfQorCisJCWlmIChzdGEtPnZodF9jYXAudmh0X3N1cHBvcnRlZCkKKwkJCW1hYy0+dmh0X2VuYWJsZSA9IHRydWU7CisKKwkJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykgeworCQkJLyogZm9yIDVHIG11c3QgPDwgUkFURV82TV9JTkRFWD00LAorCQkJICogYmVjYXVzZSA1RyBoYXZlIG5vIGNjayByYXRlKi8KKwkJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykKKwkJCQliYXNpY19yYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1sxXSA8PCA0OworCQkJZWxzZQorCQkJCWJhc2ljX3JhdGVzID0gc3RhLT5zdXBwX3JhdGVzWzBdOworCisJCQltYWMtPmJhc2ljX3JhdGVzID0gYmFzaWNfcmF0ZXM7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0JBU0lDX1JBVEUsCisJCQkJCSh1OCAqKSgmYmFzaWNfcmF0ZXMpKTsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKK30KKworc3RhdGljIHU2NCBydGxfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTY0IHRzZjsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfQ09SUkVDVF9UU0YsICh1OCAqKSgmdHNmKSk7CisJcmV0dXJuIHRzZjsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1NjQgdHNmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXU4IGJpYnNzID0gKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSA/IDEgOiAwOworCisJbWFjLT50c2YgPSB0c2Y7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9DT1JSRUNUX1RTRiwgKHU4ICopKCZiaWJzcykpOworfQorCitzdGF0aWMgdm9pZCBydGxfb3BfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXAgPSAwOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9EVUFMX1RTRl9SU1QsICh1OCAqKSgmdG1wKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1RBX05PVElGWV9TTEVFUDoKKwkJYnJlYWs7CisJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnRsX29wX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKKwkJCSAgICAgICB1OCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgorCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCisJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6IFRJRDolZFxuIiwgdGlkKSk7CisJCXJldHVybiBydGw5MmVfdHhfYWdnX3N0YXJ0KGh3LCB2aWYsIHN0YSwgdGlkLCBzc24pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0NPTlQ6CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUF9GTFVTSDoKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIX0NPTlQ6CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIklFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOiBUSUQ6JWRcbiIsIHRpZCkpOworCQlyZXR1cm4gcnRsOTJlX3R4X2FnZ19zdG9wKGh3LCB2aWYsIHN0YSwgdGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIklFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDpUSUQ6JWRcbiIsIHRpZCkpOworCQlydGw5MmVfdHhfYWdnX29wZXIoaHcsIHN0YSwgdGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CisJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIklFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDpUSUQ6JWRcbiIsIHRpZCkpOworCQlyZXR1cm4gcnRsOTJlX3J4X2FnZ19zdGFydChodywgc3RhLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgorCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCisJCQkgKCJJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDpUSUQ6JWRcbiIsIHRpZCkpOworCQlyZXR1cm4gcnRsOTJlX3J4X2FnZ19zdG9wKGh3LCBzdGEsIHRpZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJJRUVFODAyMTFfQU1QRFVfRVJSISEhITpcbiIpKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfTE9VRCwgKCJcbiIpKTsKKwltYWMtPmFjdF9zY2FubmluZyA9IHRydWU7CisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5iX2hpZ2hlcl9idXN5dHJhZmZpYykgeworCQltYWMtPnNraXBfc2NhbiA9IHRydWU7CisJCXJldHVybjsKKwl9CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9idGNfc3RhdHVzKCkpCisJCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfb3BzLT5idGNfc2Nhbl9ub3RpZnkocnRscHJpdiwgMSk7CisKKwlpZiAocnRscHJpdi0+ZG0uc3VwcF9waHltb2RlX3N3aXRjaCkgeworCQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmNoZWNrX3N3aXRjaF90b19kbWRwKQorCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmNoZWNrX3N3aXRjaF90b19kbWRwKGh3KTsKKwl9CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkgeworCQlydGw5MmVfbHBzX2xlYXZlKGh3KTsKKwkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTElOS0VEX1NDQU5OSU5HOworCX0gZWxzZSB7CisJCXJ0bDkyZV9pcHNfbmljX29uKGh3KTsKKwl9CisKKwkvKiBEdWwgbWFjICovCisJcnRscHJpdi0+cnRsaGFsLmJfbG9hZF9pbXJhbmRpcWtfc2V0dGluZ19mb3IyZyA9IGZhbHNlOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1NJVEVfU1VSVkVZKTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9CQUNLVVBfQkFORDApOworfQorCitzdGF0aWMgdm9pZCBydGxfb3Bfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELCAoIlxuIikpOworCW1hYy0+YWN0X3NjYW5uaW5nID0gZmFsc2U7CisJbWFjLT5za2lwX3NjYW4gPSBmYWxzZTsKKwlpZiAocnRscHJpdi0+bGlua19pbmZvLmJfaGlnaGVyX2J1c3l0cmFmZmljKQorCQlyZXR1cm47CisKKwkvKiBwMnAgd2lsbCB1c2UgMS82LzExIHRvIHNjYW4gKi8KKwlpZiAobWFjLT5uX2NoYW5uZWxzID09IDMpCisJCW1hYy0+cDJwX2luX3VzZSA9IHRydWU7CisJZWxzZQorCQltYWMtPnAycF9pbl91c2UgPSBmYWxzZTsKKwltYWMtPm5fY2hhbm5lbHMgPSAwOworCS8qIER1bCBtYWMgKi8KKwlydGxwcml2LT5ydGxoYWwuYl9sb2FkX2ltcmFuZGlxa19zZXR0aW5nX2ZvcjJnID0gZmFsc2U7CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRF9TQ0FOTklORykgeworCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQkvKiBmaXggZndscHMgaXNzdWUgKi8KKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCBtYWMtPm9wbW9kZSk7CisJCX0KKwl9CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9SRVNUT1JFKTsKKwlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9idGNfc3RhdHVzKCkpCisJCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfb3BzLT5idGNfc2Nhbl9ub3RpZnkocnRscHJpdiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsX29wX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IGtleV90eXBlID0gTk9fRU5DUllQVElPTjsKKwl1OCBrZXlfaWR4OworCWJvb2wgZ3JvdXBfa2V5ID0gZmFsc2U7CisJYm9vbCB3ZXBfb25seSA9IGZhbHNlOworCWludCBlcnIgPSAwOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCisJaWYgKHJ0bHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvIHx8IHJ0bHByaXYtPnNlYy51c2Vfc3dfc2VjKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoIm5vdCBvcGVuIGh3IGVuY3J5cHRpb25cbiIpKTsKKwkJcmV0dXJuIC1FTk9TUEM7CS8qVXNlciBkaXNhYmxlZCBIVy1jcnlwdG8gKi8KKwl9CisJLyogVG8gc3VwcG9ydCBJQlNTLCB1c2Ugc3ctY3J5cHRvIGZvciBHVEsgKi8KKwlpZiAoKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSAmJgorCSAgICAgIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgiJXMgaGFyZHdhcmUgYmFzZWQgZW5jcnlwdGlvbiBmb3Iga2V5aWR4OiAlZCwgbWFjOiAlcE1cbiIsCisJCSAgY21kID09IFNFVF9LRVkgPyAiVXNpbmciIDogIkRpc2FibGluZyIsIGtleS0+a2V5aWR4LAorCQkgIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIpKTsKKwlydGxwcml2LT5zZWMuYmVpbmdfc2V0a2V5ID0gdHJ1ZTsKKwlydGw5MmVfaXBzX25pY19vbihodyk7CisJbXV0ZXhfbG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisJLyogPDE+IGdldCBlbmNyeXB0aW9uIGFsZyAqLworCisJc3dpdGNoIChrZXktPmNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCWtleV90eXBlID0gV0VQNDBfRU5DUllQVElPTjsKKwkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywgKCJhbGc6V0VQNDBcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csICgiYWxnOldFUDEwNFxuIikpOworCQlrZXlfdHlwZSA9IFdFUDEwNF9FTkNSWVBUSU9OOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCWtleV90eXBlID0gVEtJUF9FTkNSWVBUSU9OOworCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpUS0lQXG4iKSk7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJa2V5X3R5cGUgPSBBRVNDQ01QX0VOQ1JZUFRJT047CisJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csICgiYWxnOkNDTVBcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwkJLyogSFcgZG9uJ3Qgc3VwcG9ydCBDTUFDIGVuY3J5cHRpb24sCisJCSAqIHVzZSBzb2Z0d2FyZSBDTUFDIGVuY3J5cHRpb24gKi8KKwkJa2V5X3R5cGUgPSBBRVNDTUFDX0VOQ1JZUFRJT047CisJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csICgiYWxnOkNNQUNcbiIpKTsKKwkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCSAoIkhXIGRvbid0IHN1cHBvcnQgQ01BQyBlbmNyeXBpdG9uLCB1c2Ugc29mdHdhcmUgQ01BQyBlbmNyeXB0aW9uXG4iKSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dF91bmxvY2s7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoImFsZ19lcnI6JXghISEhOlxuIiwga2V5LT5jaXBoZXIpKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwlpZiAoa2V5X3R5cGUgPT0gV0VQNDBfRU5DUllQVElPTiB8fAorCSAgICBrZXlfdHlwZSA9PSBXRVAxMDRfRU5DUllQVElPTiB8fAorCSAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSA9IHRydWU7CisKKwkvKiA8Mj4gZ2V0IGtleV9pZHggKi8KKwlrZXlfaWR4ID0gKHU4KSAoa2V5LT5rZXlpZHgpOworCWlmIChrZXlfaWR4ID4gMykKKwkJZ290byBvdXRfdW5sb2NrOworCS8qIDwzPiBpZiBwYWlyd2lzZSBrZXkgZW5hYmxlX2h3X3NlYyAqLworCWdyb3VwX2tleSA9ICEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSk7CisKKwkvKiB3ZXAgYWx3YXlzIGJlIGdyb3VwIGtleSwgYnV0IHRoZXJlIGFyZSB0d28gY29uZGl0aW9uczoKKwkgKiAxKSB3ZXAgb25seTogaXMganVzdCBmb3Igd2VwIGVuYywgaW4gdGhpcyBjb25kaXRpb24KKwkgKiBydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9PSBOT19FTkNSWVBUSU9OCisJICogd2lsbCBiZSB0cnVlICYgZW5hYmxlX2h3X3NlYyB3aWxsIGJlIHNldCB3aGVuIHdlcAorCSAqIGtlIHNldHRpbmcuCisJICogMikgd2VwKGdyb3VwKSArIEFFUyhwYWlyd2lzZSk6IHNvbWUgQVAgbGlrZSBjaXNjbworCSAqIG1heSB1c2UgaXQsIGluIHRoaXMgY29uZGl0aW9uIGVuYWJsZV9od19zZWMgd2lsbCBub3QKKwkgKiBiZSBzZXQgd2hlbiB3ZXAga2V5IHNldHRpbmcgKi8KKwkvKiB3ZSBtdXN0IHJlc2V0IHNlY19pbmZvIGFmdGVyIGxpbmdrZWQgYmVmb3JlIHNldCBrZXksCisJICogb3Igc29tZSBmbGFnIHdpbGwgYmUgd3JvbmcqLworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJaWYgKCFncm91cF9rZXkgfHwga2V5X3R5cGUgPT0gV0VQNDBfRU5DUllQVElPTiB8fAorCQkgICAga2V5X3R5cGUgPT0gV0VQMTA0X0VOQ1JZUFRJT04pIHsKKwkJCWlmIChncm91cF9rZXkpCisJCQkJd2VwX29ubHkgPSB0cnVlOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmVuYWJsZV9od19zZWMoaHcpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCghZ3JvdXBfa2V5KSB8fCAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCQkgICAgcnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTikgeworCQkJaWYgKHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09CisJCQkgICAgTk9fRU5DUllQVElPTiAmJgorCQkJICAgKGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKKwkJCSAgICBrZXlfdHlwZSA9PSBXRVAxMDRfRU5DUllQVElPTikpCisJCQkJd2VwX29ubHkgPSB0cnVlOworCQkJcnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPSBrZXlfdHlwZTsKKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgic2V0IGVuYWJsZV9od19zZWMsIGtleV90eXBlOiV4KE9QRU46MCBXRVA0MDoxIFRLSVA6MiBBRVM6NCBXRVAxMDQ6NSlcbiIsCisJCQkJICBrZXlfdHlwZSkpOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmVuYWJsZV9od19zZWMoaHcpOworCQl9CisJfQorCS8qIDw0PiBzZXQga2V5IGJhc2VkIG9uIGNtZCAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTRVRfS0VZOgorCQlpZiAod2VwX29ubHkpIHsKKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgic2V0IFdFUChncm91cC9wYWlyd2lzZSkga2V5XG4iKSk7CisJCQkvKiBQYWlyd2lzZSBrZXkgd2l0aCBhbiBhc3NpZ25lZCBNQUMgYWRkcmVzcy4gKi8KKwkJCXJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID0ga2V5X3R5cGU7CisJCQlydGxwcml2LT5zZWMuZ3JvdXBfZW5jX2FsZ29yaXRobSA9IGtleV90eXBlOworCQkJLypzZXQgbG9jYWwgYnVmIGFib3V0IHdlcCBrZXkuICovCisJCQltZW1jcHkocnRscHJpdi0+c2VjLmtleV9idWZba2V5X2lkeF0sCisJCQkgICAgICAga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKKwkJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pZHhdID0ga2V5LT5rZXlsZW47CisJCQlldGhfemVyb19hZGRyKG1hY19hZGRyKTsKKwkJfSBlbHNlIGlmIChncm91cF9rZXkpIHsJLyogZ3JvdXAga2V5ICovCisJCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCSAoInNldCBncm91cCBrZXlcbiIpKTsKKwkJCS8qIGdyb3VwIGtleSAqLworCQkJcnRscHJpdi0+c2VjLmdyb3VwX2VuY19hbGdvcml0aG0gPSBrZXlfdHlwZTsKKwkJCS8qc2V0IGxvY2FsIGJ1ZiBhYm91dCBncm91cCBrZXkuICovCisJCQltZW1jcHkocnRscHJpdi0+c2VjLmtleV9idWZba2V5X2lkeF0sCisJCQkgICAgICAga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKKwkJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pZHhdID0ga2V5LT5rZXlsZW47CisJCQlldGhlcl9hZGRyX2NvcHkobWFjX2FkZHIsIGJjYXN0X2FkZHIpOworCQl9IGVsc2UgewkvKiBwYWlyd2lzZSBrZXkgKi8KKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgic2V0IHBhaXJ3aXNlIGtleVxuIikpOworCQkJaWYgKCFzdGEpIHsKKwkJCQlSVF9BU1NFUlQoZmFsc2UsCisJCQkJCSAgKCJwYWlyd2lzZSBrZXkgd2l0aG91dCBtYWNfYWRkclxuIikpOworCisJCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQkJLyogUGFpcndpc2Uga2V5IHdpdGggYW4gYXNzaWduZWQgTUFDIGFkZHJlc3MuICovCisJCQlydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9IGtleV90eXBlOworCQkJLypzZXQgbG9jYWwgYnVmIGFib3V0IHBhaXJ3aXNlIGtleS4gKi8KKwkJCW1lbWNweShydGxwcml2LT5zZWMua2V5X2J1ZltQQUlSV0lTRV9LRVlJRFhdLAorCQkJICAgICAgIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCQlydGxwcml2LT5zZWMua2V5X2xlbltQQUlSV0lTRV9LRVlJRFhdID0ga2V5LT5rZXlsZW47CisJCQlydGxwcml2LT5zZWMucGFpcndpc2Vfa2V5ID0KKwkJCSAgICBydGxwcml2LT5zZWMua2V5X2J1ZltQQUlSV0lTRV9LRVlJRFhdOworCQkJZXRoZXJfYWRkcl9jb3B5KG1hY19hZGRyLCBzdGEtPmFkZHIpOworCQl9CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfa2V5KGh3LCBrZXlfaWR4LCBtYWNfYWRkciwKKwkJCQkJICAgZ3JvdXBfa2V5LCBrZXlfdHlwZSwgd2VwX29ubHksCisJCQkJCSAgIGZhbHNlKTsKKwkJLyogPDU+IHRlbGwgbWFjODAyMTEgZG8gc29tZXRoaW5nOiAqLworCQkvKm11c3QgdXNlIHN3IGdlbmVyYXRlIElWLCBvciBjYW4gbm90IHdvcmsgISEhIS4gKi8KKwkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJCWtleS0+aHdfa2V5X2lkeCA9IGtleV9pZHg7CisJCWlmIChrZXlfdHlwZSA9PSBUS0lQX0VOQ1JZUFRJT04pCisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDOworCQkvKnVzZSBzb2Z0d2FyZSBDQ01QIGVuY3J5cHRpb24gZm9yIG1hbmFnZW1lbnQgZnJhbWVzIChNRlApICovCisJCWlmIChrZXlfdHlwZSA9PSBBRVNDQ01QX0VOQ1JZUFRJT04pCisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOworCQlicmVhazsKKwljYXNlIERJU0FCTEVfS0VZOgorCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLAorCQkJICgiZGlzYWJsZSBrZXkgZGVsZXRlIG9uZSBlbnRyeVxuIikpOworCQkvKnNldCBsb2NhbCBidWYgYWJvdXQgd2VwIGtleS4gKi8KKwkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJCWlmIChzdGEpCisJCQkJc3RnX3J0bF9jYW1fZGVsX2VudHJ5KGh3LCBzdGEtPmFkZHIpOworCQl9CisJCW1lbXNldChydGxwcml2LT5zZWMua2V5X2J1ZltrZXlfaWR4XSwgMCwga2V5LT5rZXlsZW4pOworCQlydGxwcml2LT5zZWMua2V5X2xlbltrZXlfaWR4XSA9IDA7CisJCWV0aF96ZXJvX2FkZHIobWFjX2FkZHIpOworCQkvKgorCQkgKm1hYzgwMjExIHdpbGwgZGVsZXRlIGVudHJ5cyBvbmUgYnkgb25lLAorCQkgKnNvIGRvbid0IHVzZSBzdGdfcnRsX2NhbV9yZXNldF9hbGxfZW50cnkKKwkJICpvciBjbGVhciBhbGwgZW50cnkgaGVyZS4KKwkJICovCisJCXN0Z19ydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoaHcsIG1hY19hZGRyLCBrZXlfaWR4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoImNtZF9lcnI6JXghISEhOlxuIiwgY21kKSk7CisJfQorb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCXJ0bHByaXYtPnNlYy5iZWluZ19zZXRrZXkgPSBmYWxzZTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBydGxfb3BfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJYm9vbCByYWRpb19zdGF0ZTsKKwlib29sIGJsb2NrZWQ7CisJdTggdmFsaWQgPSAwOworCisJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCisJLyppZiBSYWRpbyBPbiByZXR1cm4gdHJ1ZSBoZXJlICovCisJcmFkaW9fc3RhdGUgPSBydGxwcml2LT5jZmctPm9wcy0+cmFkaW9fb25vZmZfY2hlY2tpbmcoaHcsICZ2YWxpZCk7CisKKwlpZiAodmFsaWQpIHsKKwkJaWYgKHVubGlrZWx5KHJhZGlvX3N0YXRlICE9IHJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUpKSB7CisJCQlydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID0gcmFkaW9fc3RhdGU7CisKKwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19ETUVTRywKKwkJCQkgKEtFUk5fSU5GTyAid2lyZWxlc3MgcmFkaW8gc3dpdGNoIHR1cm5lZCAlc1xuIiwKKwkJCQkgIHJhZGlvX3N0YXRlID8gIm9uIiA6ICJvZmYiKSk7CisKKwkJCWJsb2NrZWQgPSAocnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA9PSAxKSA/IDAgOiAxOworCQkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksIGJsb2NrZWQpOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgbWFjODAyMTEgdG8gZmx1c2ggdHggYnVmZmVyCisgKiBiZWZvcmUgc3dpdGNoIGNoYW5ubGUgb3IgcG93ZXIgc2F2ZSwgb3IgdHggYnVmZmVyIHBhY2tldAorICogbWF5YmUgc2VuZCBhZnRlciBvZmZjaGFubmVsIG9yIHJmIHNsZWVwLCB0aGlzIG1heSBjYXVzZQorICogZGlzLWFzc29jaWF0aW9uIGJ5IEFQICovCitzdGF0aWMgdm9pZCBydGxfb3BfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5pbnRmX29wcy0+Zmx1c2gpCisJCXJ0bHByaXYtPmludGZfb3BzLT5mbHVzaChodywgcXVldWVzLCBkcm9wKTsKK30KKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsOTJlX29wcyA9IHsKKwkuc3RhcnQgPSBydGxfb3Bfc3RhcnQsCisJLnN0b3AgPSBydGxfb3Bfc3RvcCwKKwkudHggPSBydGxfb3BfdHgsCisJLmFkZF9pbnRlcmZhY2UgPSBydGxfb3BfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZSA9IHJ0bF9vcF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jaGFuZ2VfaW50ZXJmYWNlID0gcnRsX29wX2NoYW5nZV9pbnRlcmZhY2UsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBydGxfb3Bfc3VzcGVuZCwKKwkucmVzdW1lID0gcnRsX29wX3Jlc3VtZSwKKyNlbmRpZgorCS5jb25maWcgPSBydGxfb3BfY29uZmlnLAorCS5jb25maWd1cmVfZmlsdGVyID0gcnRsX29wX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF9rZXkgPSBydGxfb3Bfc2V0X2tleSwKKwkuY29uZl90eCA9IHJ0bF9vcF9jb25mX3R4LAorCS5ic3NfaW5mb19jaGFuZ2VkID0gcnRsX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLmdldF90c2YgPSBydGxfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZiA9IHJ0bF9vcF9zZXRfdHNmLAorCS5yZXNldF90c2YgPSBydGxfb3BfcmVzZXRfdHNmLAorCS5zdGFfbm90aWZ5ID0gcnRsX29wX3N0YV9ub3RpZnksCisJLmFtcGR1X2FjdGlvbiA9IHJ0bF9vcF9hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgPSBydGxfb3Bfc3dfc2Nhbl9zdGFydCwKKwkuc3dfc2Nhbl9jb21wbGV0ZSA9IHJ0bF9vcF9zd19zY2FuX2NvbXBsZXRlLAorCS5yZmtpbGxfcG9sbCA9IHJ0bF9vcF9yZmtpbGxfcG9sbCwKKwkuc3RhX2FkZCA9IHJ0bF9vcF9zdGFfYWRkLAorCS5zdGFfcmVtb3ZlID0gcnRsX29wX3N0YV9yZW1vdmUsCisJLmZsdXNoID0gcnRsX29wX2ZsdXNoLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY29yZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3NWFkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvY29yZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRtaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUbWUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9DT1JFX0hfXworI2RlZmluZSBfX1JUTF9DT1JFX0hfXworCisjZGVmaW5lIFJUTF9TVVBQT1JURURfRklMVEVSUwkJXAorCShGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCisJRklGX0FMTE1VTFRJIHwgRklGX0NPTlRST0wgfCBcCisJRklGX09USEVSX0JTUyB8IFwKKwlGSUZfRkNTRkFJTCB8IFwKKwlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKworI2RlZmluZSBSVExfU1VQUE9SVEVEX0NUUkxfRklMVEVSCTB4RkYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0bDkyZV9vcHM7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvZGVidWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWVjMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9kZWJ1Zy5jCkBAIC0wLDAgKzEsOTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRtaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ3aWZpLmgiCisjaW5jbHVkZSAiY2FtLmgiCisKKyNkZWZpbmUgR0VUX0lOT0RFX0RBVEEoX19ub2RlKQkJUERFX0RBVEEoX19ub2RlKQorCisKK3ZvaWQgcnRsOTJlX2RiZ3BfZmxhZ19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBpOworCisJcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2xldmVsID0gREJHX0RNRVNHOworCisJcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2NvbXBvbmVudHMgPQorCQlDT01QX0VSUiB8CisJCUNPTVBfRlcgfAorCQlDT01QX0lOSVQgfAorCQlDT01QX1JFQ1YgfAorCQlDT01QX1NFTkQgfAorCQlDT01QX01MTUUgfAorCQlDT01QX1NDQU4gfAorCQlDT01QX0lOVFIgfAorCQlDT01QX0xFRCB8CisJCUNPTVBfU0VDIHwKKwkJQ09NUF9CRUFDT04gfAorCQlDT01QX1JBVEUgfAorCQlDT01QX1JYREVTQyB8CisJCUNPTVBfRElHIHwKKwkJQ09NUF9UWEFHQyB8CisJCUNPTVBfUE9XRVIgfAorCQlDT01QX1BPV0VSX1RSQUNLSU5HIHwKKwkJQ09NUF9CQl9QT1dFUlNBVklORyB8CisJCUNPTVBfU1dBUyB8CisJCUNPTVBfUkYgfAorCQlDT01QX1RVUkJPIHwKKwkJQ09NUF9SQVRSIHwKKwkJQ09NUF9DTUQgfAorCQlDT01QX0VBU1lfQ09OQ1VSUkVOVCB8CisJCUNPTVBfRUZVU0UgfAorCQlDT01QX1FPUyB8IENPTVBfTUFDODAyMTEgfCBDT01QX1JFR0QgfAorCQlDT01QX0NIQU4gfAorCQlDT01QX0JUX0NPRVhJU1QgfAorCQlDT01QX0lRSyB8CisJCTA7CisKKwlmb3IgKGkgPSAwOyBpIDwgREJHUF9UWVBFX01BWDsgaSsrKQorCQlydGxwcml2LT5kYmcuZGJncF90eXBlW2ldID0gMDsKKworCS8qSW5pdCBEZWJ1ZyBmbGFnIGVuYWJsZSBjb25kaXRpb24gKi8KK30KKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY190b3BkaXI7CisKK3N0YXRpYyBpbnQgcnRsX3Byb2NfZ2V0X21hY18wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IG0tPnByaXZhdGU7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBpLCBuLCBwYWdlOworCWludCBtYXggPSAweGZmOworCXBhZ2UgPSAweDAwMDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbiArIHBhZ2UpOworCQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBuIDw9IG1heDsgaSsrLCBuICs9IDQpCisJCQlzZXFfcHJpbnRmKG0sICIlOC44eCAgICAiLAorCQkJCSAgIHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIChwYWdlIHwgbikpKTsKKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX21hY18wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfbWFjXzAsIEdFVF9JTk9ERV9EQVRBKGlub2RlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbGVfb3BzX21hY18wID0geworCS5vcGVuID0gZGxfcHJvY19vcGVuX21hY18wLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfbWFjXzEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJaW50IGksIG4sIHBhZ2U7CisJaW50IG1heCA9IDB4ZmY7CisJcGFnZSA9IDB4MTAwOworCisJZm9yIChuID0gMDsgbiA8PSBtYXg7ICkgeworCQlzZXFfcHJpbnRmKG0sICJcbiU4Ljh4ICAiLCBuICsgcGFnZSk7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBpKyssIG4gKz0gNCkKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKHBhZ2UgfCBuKSkpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fbWFjXzEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0bF9wcm9jX2dldF9tYWNfMSwgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfbWFjXzEgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fbWFjXzEsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9tYWNfMihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpbnQgaSwgbiwgcGFnZTsKKwlpbnQgbWF4ID0gMHhmZjsKKwlwYWdlID0gMHgyMDA7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG1heDsgKSB7CisJCXNlcV9wcmludGYobSwgIlxuJTguOHggICIsIG4gKyBwYWdlKTsKKwkJZm9yIChpID0gMDsgaSA8IDQgJiYgbiA8PSBtYXg7IGkrKywgbiArPSA0KQorCQkJc2VxX3ByaW50ZihtLCAiJTguOHggICAgIiwKKwkJCQkgICBydGxfcmVhZF9kd29yZChydGxwcml2LCAocGFnZSB8IG4pKSk7CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9tYWNfMihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X21hY18yLCBHRVRfSU5PREVfREFUQShpbm9kZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWxlX29wc19tYWNfMiA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9tYWNfMiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcnRsX3Byb2NfZ2V0X21hY18zKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IG0tPnByaXZhdGU7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBpLCBuLCBwYWdlOworCWludCBtYXggPSAweGZmOworCXBhZ2UgPSAweDMwMDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbiArIHBhZ2UpOworCQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBuIDw9IG1heDsgaSsrLCBuICs9IDQpCisJCQlzZXFfcHJpbnRmKG0sICIlOC44eCAgICAiLAorCQkJCSAgIHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIChwYWdlIHwgbikpKTsKKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX21hY18zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfbWFjXzMsIEdFVF9JTk9ERV9EQVRBKGlub2RlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbGVfb3BzX21hY18zID0geworCS5vcGVuID0gZGxfcHJvY19vcGVuX21hY18zLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfbWFjXzQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJaW50IGksIG4sIHBhZ2U7CisJaW50IG1heCA9IDB4ZmY7CisJcGFnZSA9IDB4NDAwOworCisJZm9yIChuID0gMDsgbiA8PSBtYXg7ICkgeworCQlzZXFfcHJpbnRmKG0sICJcbiU4Ljh4ICAiLCBuICsgcGFnZSk7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBpKyssIG4gKz0gNCkKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKHBhZ2UgfCBuKSkpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fbWFjXzQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0bF9wcm9jX2dldF9tYWNfNCwgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfbWFjXzQgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fbWFjXzQsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9tYWNfNShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpbnQgaSwgbiwgcGFnZTsKKwlpbnQgbWF4ID0gMHhmZjsKKwlwYWdlID0gMHg1MDA7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG1heDsgKSB7CisJCXNlcV9wcmludGYobSwgIlxuJTguOHggICIsIG4gKyBwYWdlKTsKKwkJZm9yIChpID0gMDsgaSA8IDQgJiYgbiA8PSBtYXg7IGkrKywgbiArPSA0KQorCQkJc2VxX3ByaW50ZihtLCAiJTguOHggICAgIiwKKwkJCQkgICBydGxfcmVhZF9kd29yZChydGxwcml2LCAocGFnZSB8IG4pKSk7CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9tYWNfNShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X21hY181LCBHRVRfSU5PREVfREFUQShpbm9kZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWxlX29wc19tYWNfNSA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9tYWNfNSwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcnRsX3Byb2NfZ2V0X21hY182KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IG0tPnByaXZhdGU7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBpLCBuLCBwYWdlOworCWludCBtYXggPSAweGZmOworCXBhZ2UgPSAweDYwMDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbiArIHBhZ2UpOworCQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBuIDw9IG1heDsgaSsrLCBuICs9IDQpCisJCQlzZXFfcHJpbnRmKG0sICIlOC44eCAgICAiLAorCQkJCSAgIHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIChwYWdlIHwgbikpKTsKKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX21hY182KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfbWFjXzYsIEdFVF9JTk9ERV9EQVRBKGlub2RlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbGVfb3BzX21hY182ID0geworCS5vcGVuID0gZGxfcHJvY19vcGVuX21hY182LAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfbWFjXzcoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJaW50IGksIG4sIHBhZ2U7CisJaW50IG1heCA9IDB4ZmY7CisJcGFnZSA9IDB4NzAwOworCisJZm9yIChuID0gMDsgbiA8PSBtYXg7ICkgeworCQlzZXFfcHJpbnRmKG0sICJcbiU4Ljh4ICAiLCBuICsgcGFnZSk7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBpKyssIG4gKz0gNCkKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKHBhZ2UgfCBuKSkpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fbWFjXzcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0bF9wcm9jX2dldF9tYWNfNywgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfbWFjXzcgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fbWFjXzcsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9iYl84KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IG0tPnByaXZhdGU7CisJaW50IGksIG4sIHBhZ2U7CisJaW50IG1heCA9IDB4ZmY7CisJcGFnZSA9IDB4ODAwOworCisJZm9yIChuID0gMDsgbiA8PSBtYXg7ICkgeworCQlzZXFfcHJpbnRmKG0sICJcbiU4Ljh4ICAiLCBuICsgcGFnZSk7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBpKyssIG4gKz0gNCkKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX2dldF9iYnJlZyhodywgKHBhZ2UgfCBuKSwgMHhmZmZmZmZmZikpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fYmJfOChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X2JiXzgsIEdFVF9JTk9ERV9EQVRBKGlub2RlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbGVfb3BzX2JiXzggPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fYmJfOCwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcnRsX3Byb2NfZ2V0X2JiXzkoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlpbnQgaSwgbiwgcGFnZTsKKwlpbnQgbWF4ID0gMHhmZjsKKwlwYWdlID0gMHg5MDA7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG1heDsgKSB7CisJCXNlcV9wcmludGYobSwgIlxuJTguOHggICIsIG4gKyBwYWdlKTsKKwkJZm9yIChpID0gMDsgaSA8IDQgJiYgbiA8PSBtYXg7IGkrKywgbiArPSA0KQorCQkJc2VxX3ByaW50ZihtLCAiJTguOHggICAgIiwKKwkJCQkgICBydGxfZ2V0X2JicmVnKGh3LCAocGFnZSB8IG4pLCAweGZmZmZmZmZmKSk7CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9iYl85KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfYmJfOSwgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfYmJfOSA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9iYl85LAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfYmJfYShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCWludCBpLCBuLCBwYWdlOworCWludCBtYXggPSAweGZmOworCXBhZ2UgPSAweGEwMDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbiArIHBhZ2UpOworCQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBuIDw9IG1heDsgaSsrLCBuICs9IDQpCisJCQlzZXFfcHJpbnRmKG0sICIlOC44eCAgICAiLAorCQkJCSAgIHJ0bF9nZXRfYmJyZWcoaHcsIChwYWdlIHwgbiksIDB4ZmZmZmZmZmYpKTsKKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX2JiX2Eoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0bF9wcm9jX2dldF9iYl9hLCBHRVRfSU5PREVfREFUQShpbm9kZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWxlX29wc19iYl9hID0geworCS5vcGVuID0gZGxfcHJvY19vcGVuX2JiX2EsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9iYl9iKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IG0tPnByaXZhdGU7CisJaW50IGksIG4sIHBhZ2U7CisJaW50IG1heCA9IDB4ZmY7CisJcGFnZSA9IDB4YjAwOworCisJZm9yIChuID0gMDsgbiA8PSBtYXg7ICkgeworCQlzZXFfcHJpbnRmKG0sICJcbiU4Ljh4ICAiLCBuICsgcGFnZSk7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBpKyssIG4gKz0gNCkKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX2dldF9iYnJlZyhodywgKHBhZ2UgfCBuKSwgMHhmZmZmZmZmZikpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fYmJfYihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X2JiX2IsIEdFVF9JTk9ERV9EQVRBKGlub2RlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbGVfb3BzX2JiX2IgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fYmJfYiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcnRsX3Byb2NfZ2V0X2JiX2Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlpbnQgaSwgbiwgcGFnZTsKKwlpbnQgbWF4ID0gMHhmZjsKKwlwYWdlID0gMHhjMDA7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG1heDsgKSB7CisJCXNlcV9wcmludGYobSwgIlxuJTguOHggICIsIG4gKyBwYWdlKTsKKwkJZm9yIChpID0gMDsgaSA8IDQgJiYgbiA8PSBtYXg7IGkrKywgbiArPSA0KQorCQkJc2VxX3ByaW50ZihtLCAiJTguOHggICAgIiwKKwkJCQkgICBydGxfZ2V0X2JicmVnKGh3LCAocGFnZSB8IG4pLCAweGZmZmZmZmZmKSk7CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9iYl9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfYmJfYywgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfYmJfYyA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9iYl9jLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfYmJfZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCWludCBpLCBuLCBwYWdlOworCWludCBtYXggPSAweGZmOworCXBhZ2UgPSAweGQwMDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbiArIHBhZ2UpOworCQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBuIDw9IG1heDsgaSsrLCBuICs9IDQpCisJCQlzZXFfcHJpbnRmKG0sICIlOC44eCAgICAiLAorCQkJCSAgIHJ0bF9nZXRfYmJyZWcoaHcsIChwYWdlIHwgbiksIDB4ZmZmZmZmZmYpKTsKKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX2JiX2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0bF9wcm9jX2dldF9iYl9kLCBHRVRfSU5PREVfREFUQShpbm9kZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWxlX29wc19iYl9kID0geworCS5vcGVuID0gZGxfcHJvY19vcGVuX2JiX2QsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9iYl9lKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IG0tPnByaXZhdGU7CisJaW50IGksIG4sIHBhZ2U7CisJaW50IG1heCA9IDB4ZmY7CisJcGFnZSA9IDB4ZTAwOworCisJZm9yIChuID0gMDsgbiA8PSBtYXg7ICkgeworCQlzZXFfcHJpbnRmKG0sICJcbiU4Ljh4ICAiLCBuICsgcGFnZSk7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBpKyssIG4gKz0gNCkKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX2dldF9iYnJlZyhodywgKHBhZ2UgfCBuKSwgMHhmZmZmZmZmZikpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fYmJfZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X2JiX2UsIEdFVF9JTk9ERV9EQVRBKGlub2RlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbGVfb3BzX2JiX2UgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fYmJfZSwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcnRsX3Byb2NfZ2V0X2JiX2Yoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlpbnQgaSwgbiwgcGFnZTsKKwlpbnQgbWF4ID0gMHhmZjsKKwlwYWdlID0gMHhmMDA7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG1heDsgKSB7CisJCXNlcV9wcmludGYobSwgIlxuJTguOHggICIsIG4gKyBwYWdlKTsKKwkJZm9yIChpID0gMDsgaSA8IDQgJiYgbiA8PSBtYXg7IGkrKywgbiArPSA0KQorCQkJc2VxX3ByaW50ZihtLCAiJTguOHggICAgIiwKKwkJCQkgICBydGxfZ2V0X2JicmVnKGh3LCAocGFnZSB8IG4pLCAweGZmZmZmZmZmKSk7CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9iYl9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfYmJfZiwgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfYmJfZiA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9iYl9mLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfcmVnX3JmX2Eoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlpbnQgaSwgbjsKKwlpbnQgbWF4ID0gMHg0MDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbik7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBuICs9IDEsIGkrKykKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIG4sIDB4ZmZmZmZmZmYpKTsKKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX3JmX2Eoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0bF9wcm9jX2dldF9yZWdfcmZfYSwgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfcmZfYSA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9yZl9hLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBydGxfcHJvY19nZXRfcmVnX3JmX2Ioc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbS0+cHJpdmF0ZTsKKwlpbnQgaSwgbjsKKwlpbnQgbWF4ID0gMHg0MDsKKworCWZvciAobiA9IDA7IG4gPD0gbWF4OyApIHsKKwkJc2VxX3ByaW50ZihtLCAiXG4lOC44eCAgIiwgbik7CisJCWZvciAoaSA9IDA7IGkgPCA0ICYmIG4gPD0gbWF4OyBuICs9IDEsIGkrKykKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICAgICIsCisJCQkJICAgcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIG4sCisJCQkJCQkgMHhmZmZmZmZmZikpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbF9wcm9jX29wZW5fcmZfYihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X3JlZ19yZl9iLCBHRVRfSU5PREVfREFUQShpbm9kZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWxlX29wc19yZl9iID0geworCS5vcGVuID0gZGxfcHJvY19vcGVuX3JmX2IsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9jYW1fcmVnaXN0ZXJfMShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgdGFyZ2V0X2NtZCA9IDA7CisJdTMyIHRhcmdldF92YWwgPSAwOworCXU4IGVudHJ5X2kgPSAwOworCXUzMiB1bHN0YXR1czsKKwlpbnQgaSA9IDEwMCwgaiA9IDA7CisKKwkvKiBUaGlzIGR1bXAgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgcGFnZSAqLworCXNlcV9wdXRzKG0sCisJICAgICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIFNFQ1VSSVRZIENBTSAoMC0xMCkgIyMjIyMjIyMjIyMjIyMjIyMjXG4gIik7CisKKwlmb3IgKGogPSAwOyBqIDwgMTE7IGorKykgeworCQlzZXFfcHJpbnRmKG0sICJcbkQ6ICAlMnggPiAiLCBqKTsKKwkJZm9yIChlbnRyeV9pID0gMDsgZW50cnlfaSA8IENBTV9DT05URU5UX0NPVU5UOyBlbnRyeV9pKyspIHsKKwkJCS8qIHBvbGxpbmcgYml0LCBhbmQgTm8gV3JpdGUgZW5hYmxlLCBhbmQgYWRkcmVzcyAgKi8KKwkJCXRhcmdldF9jbWQgPSBlbnRyeV9pICsgQ0FNX0NPTlRFTlRfQ09VTlQgKiBqOworCQkJdGFyZ2V0X2NtZCA9IHRhcmdldF9jbWQgfCBCSVQoMzEpOworCisJCQkvKiBDaGVjayBwb2xsaW5nIGJpdCBpcyBjbGVhciAqLworCQkJd2hpbGUgKChpLS0pID49IDApIHsKKwkJCQl1bHN0YXR1cyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsCisJCQkJCQlydGxwcml2LT5jZmctPm1hcHNbUldDQU1dKTsKKwkJCQlpZiAodWxzdGF0dXMgJiBCSVQoMzEpKQorCQkJCQljb250aW51ZTsKKwkJCQllbHNlCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwKKwkJCQkJdGFyZ2V0X2NtZCk7CisJCQl0YXJnZXRfdmFsID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwKKwkJCQkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUkNBTU9dKTsKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICIsIHRhcmdldF92YWwpOworCQl9CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9jYW1fMShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X2NhbV9yZWdpc3Rlcl8xLAorCQkJICAgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfY2FtXzEgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fY2FtXzEsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9jYW1fcmVnaXN0ZXJfMihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgdGFyZ2V0X2NtZCA9IDA7CisJdTMyIHRhcmdldF92YWwgPSAwOworCXU4IGVudHJ5X2kgPSAwOworCXUzMiB1bHN0YXR1czsKKwlpbnQgaSA9IDEwMCwgaiA9IDA7CisKKwkvKiBUaGlzIGR1bXAgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgcGFnZSAqLworCXNlcV9wdXRzKG0sCisJICAgICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMgU0VDVVJJVFkgQ0FNICgxMS0yMSkgIyMjIyMjIyMjIyMjIyMjIyMjXG4gIik7CisKKwlmb3IgKGogPSAxMTsgaiA8IDIyOyBqKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiXG5EOiAgJTJ4ID4gIiwgaik7CisJCWZvciAoZW50cnlfaSA9IDA7IGVudHJ5X2kgPCBDQU1fQ09OVEVOVF9DT1VOVDsgZW50cnlfaSsrKSB7CisJCQl0YXJnZXRfY21kID0gZW50cnlfaSArIENBTV9DT05URU5UX0NPVU5UICogajsKKwkJCXRhcmdldF9jbWQgPSB0YXJnZXRfY21kIHwgQklUKDMxKTsKKworCQkJd2hpbGUgKChpLS0pID49IDApIHsKKwkJCQl1bHN0YXR1cyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsCisJCQkJCQlydGxwcml2LT5jZmctPm1hcHNbUldDQU1dKTsKKwkJCQlpZiAodWxzdGF0dXMgJiBCSVQoMzEpKQorCQkJCQljb250aW51ZTsKKwkJCQllbHNlCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwKKwkJCQkJdGFyZ2V0X2NtZCk7CisJCQl0YXJnZXRfdmFsID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwKKwkJCQkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUkNBTU9dKTsKKwkJCXNlcV9wcmludGYobSwgIiU4Ljh4ICIsIHRhcmdldF92YWwpOworCQl9CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsX3Byb2Nfb3Blbl9jYW1fMihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRsX3Byb2NfZ2V0X2NhbV9yZWdpc3Rlcl8yLAorCQkJICAgR0VUX0lOT0RFX0RBVEEoaW5vZGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZV9vcHNfY2FtXzIgPSB7CisJLm9wZW4gPSBkbF9wcm9jX29wZW5fY2FtXzIsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJ0bF9wcm9jX2dldF9jYW1fcmVnaXN0ZXJfMyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtLT5wcml2YXRlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgdGFyZ2V0X2NtZCA9IDA7CisJdTMyIHRhcmdldF92YWwgPSAwOworCXU4IGVudHJ5X2kgPSAwOworCXUzMiB1bHN0YXR1czsKKwlpbnQgaSA9IDEwMCwgaiA9IDA7CisKKwkvKiBUaGlzIGR1bXAgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgcGFnZSAqLworCXNlcV9wdXRzKG0sCisJICAgICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMgU0VDVVJJVFkgQ0FNICgyMi0zMSkgIyMjIyMjIyMjIyMjIyMjIyMjXG4gIik7CisKKwlmb3IgKGogPSAyMjsgaiA8IFRPVEFMX0NBTV9FTlRSWTsgaisrKSB7CisJCXNlcV9wcmludGYobSwgIlxuRDogICUyeCA+ICIsIGopOworCQlmb3IgKGVudHJ5X2kgPSAwOyBlbnRyeV9pIDwgQ0FNX0NPTlRFTlRfQ09VTlQ7IGVudHJ5X2krKykgeworCQkJdGFyZ2V0X2NtZCA9IGVudHJ5X2krQ0FNX0NPTlRFTlRfQ09VTlQqajsKKwkJCXRhcmdldF9jbWQgPSB0YXJnZXRfY21kIHwgQklUKDMxKTsKKworCQkJd2hpbGUgKChpLS0pID49IDApIHsKKwkJCQl1bHN0YXR1cyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0pOworCQkJCWlmICh1bHN0YXR1cyAmIEJJVCgzMSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLAorCQkJCQl0YXJnZXRfY21kKTsKKwkJCXRhcmdldF92YWwgPSBydGxfcmVhZF9kd29yZChydGxwcml2LAorCQkJCQkJICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tSQ0FNT10pOworCQkJc2VxX3ByaW50ZihtLCAiJTguOHggIiwgdGFyZ2V0X3ZhbCk7CisJCX0KKwl9CisJc2VxX3B1dHMobSwgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxfcHJvY19vcGVuX2NhbV8zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGxfcHJvY19nZXRfY2FtX3JlZ2lzdGVyXzMsCisJCQkgICBHRVRfSU5PREVfREFUQShpbm9kZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWxlX29wc19jYW1fMyA9IHsKKwkub3BlbiA9IGRsX3Byb2Nfb3Blbl9jYW1fMywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3ZvaWQgcnRsX3Byb2NfYWRkX29uZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OworCisJc25wcmludGYocnRscHJpdi0+ZGJnLnByb2NfbmFtZSwgMTgsICIleC0leC0leC0leC0leC0leCIsCisJCSBydGxlZnVzZS0+ZGV2X2FkZHJbMF0sIHJ0bGVmdXNlLT5kZXZfYWRkclsxXSwKKwkJIHJ0bGVmdXNlLT5kZXZfYWRkclsyXSwgcnRsZWZ1c2UtPmRldl9hZGRyWzNdLAorCQkgcnRsZWZ1c2UtPmRldl9hZGRyWzRdLCBydGxlZnVzZS0+ZGV2X2FkZHJbNV0pOworCisJcnRscHJpdi0+ZGJnLnByb2NfZGlyID0gcHJvY19ta2RpcihydGxwcml2LT5kYmcucHJvY19uYW1lLCBwcm9jX3RvcGRpcik7CisJaWYgKCFydGxwcml2LT5kYmcucHJvY19kaXIpIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJVbmFibGUgdG8gaW5pdCAvcHJvYy9uZXQvJXMvJXNcbiIsCisJCQkgIHJ0bHByaXYtPmNmZy0+bmFtZSwKKwkJCSAgcnRscHJpdi0+ZGJnLnByb2NfbmFtZSkpOworCQlyZXR1cm47CisJfQorCisJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKCJtYWMtMCIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19tYWNfMCwgaHcpOworCWlmICghZW50cnkpCisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0VNRVJHLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy0wXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTEiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzEsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy0xXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTIiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzIsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy0yXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTMiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzMsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy0zXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTQiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzQsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy00XG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTUiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzUsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy01XG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTYiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzYsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy02XG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgibWFjLTciLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfbWFjXzcsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL21hYy03XG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItOCIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl84LCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi04XG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItOSIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl85LCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi05XG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItYSIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl9hLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi1hXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItYiIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl9iLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi1iXG4iLAorCQkgICAgICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItYyIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl9jLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi1jXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItZCIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl9kLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi1kXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItZSIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl9lLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi1lXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYmItZiIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19iYl9mLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9iYi1mXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgicmYtYSIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19yZl9hLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9yZi1hXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgicmYtYiIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSBydGxwcml2LT5kYmcucHJvY19kaXIsICZmaWxlX29wc19yZl9iLCBodyk7CisJaWYgKCFlbnRyeSkKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBDT01QX0VSUiwKKwkJCSAoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC8lcy8lcy9yZi1iXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiY2FtLTEiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfY2FtXzEsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL2NhbS0xXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiY2FtLTIiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfY2FtXzIsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL2NhbS0yXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiY2FtLTMiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgcnRscHJpdi0+ZGJnLnByb2NfZGlyLCAmZmlsZV9vcHNfY2FtXzMsIGh3KTsKKwlpZiAoIWVudHJ5KQorCQlSVF9UUkFDRShDT01QX0lOSVQsIENPTVBfRVJSLAorCQkJICgiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0LyVzLyVzL2NhbS0zXG4iLAorCQkJICBydGxwcml2LT5jZmctPm5hbWUsIHJ0bHByaXYtPmRiZy5wcm9jX25hbWUpKTsKK30KKwordm9pZCBydGxfcHJvY19yZW1vdmVfb25lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5kYmcucHJvY19kaXIpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy0wIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy0xIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy0yIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy0zIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy00IiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy01IiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy02IiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1hYy03IiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImJiLTgiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgiYmItOSIsIHJ0bHByaXYtPmRiZy5wcm9jX2Rpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJiYi1hIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImJiLWIiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgiYmItYyIsIHJ0bHByaXYtPmRiZy5wcm9jX2Rpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJiYi1kIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImJiLWUiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgiYmItZiIsIHJ0bHByaXYtPmRiZy5wcm9jX2Rpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJyZi1hIiwgcnRscHJpdi0+ZGJnLnByb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoInJmLWIiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgiY2FtLTEiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgiY2FtLTIiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgiY2FtLTMiLCBydGxwcml2LT5kYmcucHJvY19kaXIpOworCisJCXJlbW92ZV9wcm9jX2VudHJ5KHJ0bHByaXYtPmRiZy5wcm9jX25hbWUsIHByb2NfdG9wZGlyKTsKKworCQlydGxwcml2LT5kYmcucHJvY19kaXIgPSBOVUxMOworCX0KK30KKwordm9pZCBydGxfcHJvY19hZGRfdG9wZGlyKHZvaWQpCit7CisJcHJvY190b3BkaXIgPSBwcm9jX21rZGlyKCJydGx3aWZpIiwgaW5pdF9uZXQucHJvY19uZXQpOworfQorCit2b2lkIHJ0bF9wcm9jX3JlbW92ZV90b3BkaXIodm9pZCkKK3sKKwlpZiAocHJvY190b3BkaXIpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJydGx3aWZpIiwgaW5pdF9uZXQucHJvY19uZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzEyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2RlYnVnLmgKQEAgLTAsMCArMSwyMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRtaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVG1pcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUbWUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9ERUJVR19IX18KKyNkZWZpbmUgX19SVExfREVCVUdfSF9fCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCURlYnVnIGxldmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICpGYXRhbCBidWcuCisgKkZvciBleGFtcGxlLCBUeC9SeC9JTyBsb2NrZWQgdXAsCisgKm1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9uLAorICpyZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqdW5leHBlY3RlZCBIVyBiZWhhdmlvciwgSFcgQlVHCisgKmFuZCBzbyBvbi4KKyAqLworI2RlZmluZSBEQkdfRU1FUkcJCQkxCisKKy8qCisgKkFibm9ybWFsLCByYXJlLCBvciB1bmV4cGV0ZWQgY2FzZXMuCisgKkZvciBleGFtcGxlLCBQYWNrZXQvSU8gQ3RsIGNhbmNlbGVkLAorICpkZXZpY2Ugc3VwcmlzZWx5IHVucmVtb3ZlZCBhbmQgc28gb24uCisgKi8KKyNkZWZpbmUJREJHX1dBUk5JTkcJCQkyCisKKy8qCisgKk5vcm1hbCBjYXNlIGRyaXZlciBkZXZlbG9wZXIgc2hvdWxkCisgKm9wZW4sIHdlIGNhbiBzZWUgbGluayBzdGF0dXMgbGlrZQorICphc3NvYy9BZGRCQS9ESENQL2FkYXB0ZXIgc3RhcnQgYW5kCisgKnNvIG9uIGJhc2ljIGFuZCB1c2VmdWwgaW5mcm9tYXRpb25zLgorICovCisjZGVmaW5lIERCR19ETUVTRwkJCTMKKworLyoKKyAqTm9ybWFsIGNhc2Ugd2l0aCB1c2VmdWwgaW5mb3JtYXRpb24KKyAqYWJvdXQgY3VycmVudCBTVyBvciBIVyBzdGF0ZS4KKyAqRm9yIGV4YW1wbGUsIFR4L1J4IGRlc2NyaXB0b3IgdG8gZmlsbCwKKyAqVHgvUnggZGVzY3JpcHRvciBjb21wbGV0ZWQgc3RhdHVzLAorICpTVyBwcm90b2NvbCBzdGF0ZSBjaGFuZ2UsIGR5bmFtaWMKKyAqbWVjaGFuaXNtIHN0YXRlIGNoYW5nZSBhbmQgc28gb24uCisgKi8KKyNkZWZpbmUgREJHX0xPVUQJCQk0CisKKy8qCisgKk5vcm1hbCBjYXNlIHdpdGggZGV0YWlsIGV4ZWN1dGlvbgorICpmbG93IG9yIGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lCURCR19UUkFDRQkJCTUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlEZWZpbmUgdGhlIHJ0X3RyYWNlIGNvbXBvbmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ09NUF9FUlIJCQlCSVQoMCkKKyNkZWZpbmUgQ09NUF9GVwkJCQlCSVQoMSkKKyNkZWZpbmUgQ09NUF9JTklUCQkJQklUKDIpCS8qRm9yIGluaXQvZGVpbml0ICovCisjZGVmaW5lIENPTVBfUkVDVgkJCUJJVCgzKQkvKkZvciBSeC4gKi8KKyNkZWZpbmUgQ09NUF9TRU5ECQkJQklUKDQpCS8qRm9yIFR4LiAqLworI2RlZmluZSBDT01QX01MTUUJCQlCSVQoNSkJLypGb3IgTUxNRS4gKi8KKyNkZWZpbmUgQ09NUF9TQ0FOCQkJQklUKDYpCS8qRm9yIFNjYW4uICovCisjZGVmaW5lIENPTVBfSU5UUgkJCUJJVCg3KQkvKkZvciBpbnRlcnJ1cHQgUmVsYXRlZC4gKi8KKyNkZWZpbmUgQ09NUF9MRUQJCQlCSVQoOCkJLypGb3IgTEVELiAqLworI2RlZmluZSBDT01QX1NFQwkJCUJJVCg5KQkvKkZvciBzZWMuICovCisjZGVmaW5lIENPTVBfQkVBQ09OCQkJQklUKDEwKQkvKkZvciBiZWFjb24uICovCisjZGVmaW5lIENPTVBfUkFURQkJCUJJVCgxMSkJLypGb3IgcmF0ZS4gKi8KKyNkZWZpbmUgQ09NUF9SWERFU0MJCQlCSVQoMTIpCS8qRm9yIHJ4IGRlc2MuICovCisjZGVmaW5lIENPTVBfRElHCQkJQklUKDEzKQkvKkZvciBESUcgKi8KKyNkZWZpbmUgQ09NUF9UWEFHQwkJCUJJVCgxNCkJLypGb3IgVHggcG93ZXIgKi8KKyNkZWZpbmUgQ09NUF9ISVBXUgkJCUJJVCgxNSkJLypGb3IgSGlnaCBQb3dlciBNZWNoYW5pc20gKi8KKyNkZWZpbmUgQ09NUF9QT1dFUgkJCUJJVCgxNikJLypGb3IgbHBzL2lwcy9hc3BtLiAqLworI2RlZmluZSBDT01QX1BPV0VSX1RSQUNLSU5HCQlCSVQoMTcpCS8qRm9yIFRYIFBPV0VSIFRSQUNLSU5HICovCisjZGVmaW5lIENPTVBfQkJfUE9XRVJTQVZJTkcJCUJJVCgxOCkKKyNkZWZpbmUgQ09NUF9TV0FTCQkJQklUKDE5KQkvKkZvciBTVyBBbnRlbm5hIFN3aXRjaCAqLworI2RlZmluZSBDT01QX1JGCQkJCUJJVCgyMCkJLypGb3IgUkYuICovCisjZGVmaW5lIENPTVBfVFVSQk8JCQlCSVQoMjEpCS8qRm9yIEVEQ0EgVFVSQk8uICovCisjZGVmaW5lIENPTVBfUkFUUgkJCUJJVCgyMikKKyNkZWZpbmUgQ09NUF9DTUQJCQlCSVQoMjMpCisjZGVmaW5lIENPTVBfRUZVU0UJCQlCSVQoMjQpCisjZGVmaW5lIENPTVBfUU9TCQkJQklUKDI1KQorI2RlZmluZSBDT01QX01BQzgwMjExCQkJQklUKDI2KQorI2RlZmluZSBDT01QX1JFR0QJCQlCSVQoMjcpCisjZGVmaW5lIENPTVBfQ0hBTgkJCUJJVCgyOCkKKyNkZWZpbmUgQ09NUF9FQVNZX0NPTkNVUlJFTlQJCUJJVCgyOSkKKyNkZWZpbmUgQ09NUF9CVF9DT0VYSVNUCQkJQklUKDMwKQorI2RlZmluZSBDT01QX0lRSwkJCUJJVCgzMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlEZWZpbmUgdGhlIHJ0X3ByaW50IGNvbXBvbmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlZmluZSBFRVBST00gYW5kIEVGVVNFICBjaGVjayBtb2R1bGUgYml0Ki8KKyNkZWZpbmUgRUVQUk9NX1cJCQlCSVQoMCkKKyNkZWZpbmUgRUZVU0VfUEcJCQlCSVQoMSkKKyNkZWZpbmUgRUZVU0VfUkVBRF9BTEwJCQlCSVQoMikKKworLyogRGVmaW5lIGluaXQgY2hlY2sgZm9yIG1vZHVsZSBiaXQqLworI2RlZmluZQlJTklUX0VFUFJPTQkJCUJJVCgwKQorI2RlZmluZQlJTklUX1R4UG93ZXIJCQlCSVQoMSkKKyNkZWZpbmUJSU5JVF9JUUsJCQlCSVQoMikKKyNkZWZpbmUJSU5JVF9SRgkJCQlCSVQoMykKKworLyogRGVmaW5lIFBIWS1CQi9SRi9NQUMgY2hlY2sgbW9kdWxlIGJpdCAqLworI2RlZmluZQlQSFlfQkJSCQkJCUJJVCgwKQorI2RlZmluZQlQSFlfQkJXCQkJCUJJVCgxKQorI2RlZmluZQlQSFlfUkZSCQkJCUJJVCgyKQorI2RlZmluZQlQSFlfUkZXCQkJCUJJVCgzKQorI2RlZmluZQlQSFlfTUFDUgkJCUJJVCg0KQorI2RlZmluZQlQSFlfTUFDVwkJCUJJVCg1KQorI2RlZmluZQlQSFlfQUxMUgkJCUJJVCg2KQorI2RlZmluZQlQSFlfQUxMVwkJCUJJVCg3KQorI2RlZmluZQlQSFlfVFhQV1IJCQlCSVQoOCkKKyNkZWZpbmUJUEhZX1BXUkRJRkYJCQlCSVQoOSkKKworLyogRGVmaW5lIER5bmFtaWMgTWVjaGFuaXNtIGNoZWNrIG1vZHVsZSBiaXQgLS0+IEZETSAqLworI2RlZmluZSBXQV9JT1QJCQkJQklUKDApCisjZGVmaW5lIERNX1BXREIJCQkJQklUKDEpCisjZGVmaW5lIERNX01PTklUT1IJCQlCSVQoMikKKyNkZWZpbmUgRE1fRElHCQkJCUJJVCgzKQorI2RlZmluZSBETV9FRENBX1RVUkJPCQkJQklUKDQpCisKK2VudW0gZGJncF9mbGFnX2UgeworCUZRT1MgPSAwLAorCUZUWCA9IDEsCisJRlJYID0gMiwKKwlGU0VDID0gMywKKwlGTUdOVCA9IDQsCisJRk1MTUUgPSA1LAorCUZSRVNPVVJDRSA9IDYsCisJRkJFQUNPTiA9IDcsCisJRklTUiA9IDgsCisJRlBIWSA9IDksCisJRk1QID0gMTAsCisJRkVFUFJPTSA9IDExLAorCUZQV1IgPSAxMiwKKwlGRE0gPSAxMywKKwlGREJHQ3RybCA9IDE0LAorCUZDMkggPSAxNSwKKwlGQlQgPSAxNiwKKwlGSU5JVCA9IDE3LAorCUZJT0NUTCA9IDE4LAorCURCR1BfVFlQRV9NQVgKK307CisKKyNkZWZpbmUgUlRfQVNTRVJUKF9leHAgLCBmbXQpCQkJCVwKKwlkbyB7IFwKKwkJaWYgKCEoX2V4cCkpCXsJCQlcCisJCQlwcl9kZWJ1ZygiJXM6JXMoKTogIiwgS0JVSUxEX01PRE5BTUUsIFwKKwkJCV9fZnVuY19fKTsJXAorCQkJcHJfY29udCBmbXQ7CQkJXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJUX1RSQUNFKGNvbXAsIGxldmVsLCBmbXQpXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoKChjb21wKSAmIHJ0bHByaXYtPmRiZy5nbG9iYWxfZGVidWdjb21wb25lbnRzKSAmJiBcCisJCQkoKGxldmVsKSA8PSBydGxwcml2LT5kYmcuZ2xvYmFsX2RlYnVnbGV2ZWwpKSkge1wKKwkJCXByX2RlYnVnKCIlcy0lZDolcygpOjwlbHg+ICIsIFwKKwkJCUtCVUlMRF9NT0ROQU1FLCBcCisJCQlydGxwcml2LT5ydGxoYWwuaW50ZXJmYWNlaW5kZXgsIF9fZnVuY19fLCBcCisJCQlpbl9pbnRlcnJ1cHQoKSk7CVwKKwkJCXByX2NvbnQgZm10OwkJCVwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBSVFBSSU5UKHJ0bHByaXYsIGRiZ3R5cGUsIGRiZ2ZsYWcsIGZtdCwgLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KHJ0bHByaXYtPmRiZy5kYmdwX3R5cGVbZGJndHlwZV0gJiBkYmdmbGFnKSkgewlcCisJCXByX2RlYnVnKEtCVUlMRF9NT0ROQU1FICI6ICIgZm10LAkJXAorCQkgICAgICAgIyNfX1ZBX0FSR1NfXyk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBSVF9QUklOVF9EQVRBKHJ0bHByaXYsIF9jb21wLCBfbGV2ZWwsIF90aXRsZXN0cmluZywgX2hleGRhdGEsIFwKKwkJX2hleGRhdGFsZW4pIFwKKwlkbyB7XAorCQlpZiAodW5saWtlbHkoKChfY29tcCkgJiBydGxwcml2LT5kYmcuZ2xvYmFsX2RlYnVnY29tcG9uZW50cykgJiZcCisJCQkoX2xldmVsIDw9IHJ0bHByaXYtPmRiZy5nbG9iYWxfZGVidWdsZXZlbCkpKQl7IFwKKwkJCWludCBfX2k7CQkJCQlcCisJCQl1OCAqcHRyID0gKHU4ICopX2hleGRhdGE7CQkJXAorCQkJcHJfZGVidWcoIiVzOiAiLCBLQlVJTERfTU9ETkFNRSk7CVwKKwkJCXByX2NvbnQoIkluIHByb2Nlc3MgXCIlc1wiIChwaWQgJWkpOiIsIFwKKwkJCQkJY3VycmVudC0+Y29tbSwJXAorCQkJCQljdXJyZW50LT5waWQpOyBcCisJCQlwcl9jb250KF90aXRsZXN0cmluZyk7CQlcCisJCQlmb3IgKF9faSA9IDA7IF9faSA8IChpbnQpX2hleGRhdGFsZW47IF9faSsrKSB7CVwKKwkJCQlwcl9jb250KCIlMDJYJXMiLCBwdHJbX19pXSwgKCgoX19pICsgMSkgJSA0KSBcCisJCQkJCQkJPT0gMCkgPyAiICAiIDogIiAiKTtcCisJCQkJaWYgKCgoX19pICsgMSkgJSAxNikgPT0gMCkJXAorCQkJCQlwcl9jb250KCJcbiIpOwlcCisJCQl9CQkJCVwKKwkJCXByX2NvbnQoIlxuIik7CQkJXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCit2b2lkIHJ0bDkyZV9kYmdwX2ZsYWdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9wcm9jX2FkZF9vbmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGxfcHJvY19yZW1vdmVfb25lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsX3Byb2NfYWRkX3RvcGRpcih2b2lkKTsKK3ZvaWQgcnRsX3Byb2NfcmVtb3ZlX3RvcGRpcih2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9lZnVzZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9lZnVzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWUxODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2VmdXNlLmMKQEAgLTAsMCArMSwxMjMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUbWlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgImVmdXNlLmgiCisKK3N0YXRpYyBjb25zdCB1OCBNQVhfUEdQS1RfU0laRSA9IDk7CitzdGF0aWMgY29uc3QgdTggUEdQS1RfREFUQV9TSVpFID0gODsKK3N0YXRpYyBjb25zdCBpbnQgRUZVU0VfTUFYX1NJWkUgPSA1MTI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ1c2VfbWFwIFJUTDg3MTJfU0RJT19FRlVTRV9UQUJMRVtdID0geworCXswLCAwLCAwLCAyfSwKKwl7MCwgMSwgMCwgMn0sCisJezAsIDIsIDAsIDJ9LAorCXsxLCAwLCAwLCAxfSwKKwl7MSwgMCwgMSwgMX0sCisJezEsIDEsIDAsIDF9LAorCXsxLCAxLCAxLCAzfSwKKwl7MSwgMywgMCwgMTd9LAorCXszLCAzLCAxLCA0OH0sCisJezEwLCAwLCAwLCA2fSwKKwl7MTAsIDMsIDAsIDF9LAorCXsxMCwgMywgMSwgMX0sCisJezExLCAwLCAwLCAyOH0KK307CisKK3N0YXRpYyB2b2lkIGVmdXNlOTJlX3NoYWRvd19yZWFkXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgICAgICB1OCAqdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2U5MmVfc2hhZG93X3JlYWRfMmJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJICAgICAgIHUxNiAqdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2U5MmVfc2hhZG93X3JlYWRfNGJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJICAgICAgIHUzMiAqdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2U5MmVfc2hhZG93X3dyaXRlXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCQl1OCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBlZnVzZTkyZV9zaGFkb3dfd3JpdGVfMmJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJCXUxNiB2YWx1ZSk7CitzdGF0aWMgdm9pZCBlZnVzZTkyZV9zaGFkb3dfd3JpdGVfNGJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJCXUzMiB2YWx1ZSk7CitzdGF0aWMgaW50IGVmdXNlX29uZV9ieXRlX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkciwKKwkJCQl1OCBkYXRhKTsKK3N0YXRpYyB2b2lkIGVmdXNlX3JlYWRfYWxsX21hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmVmdXNlKTsKK3N0YXRpYyBpbnQgZWZ1c2VfcGdfcGFja2V0X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9mZnNldCwKKwkJCQl1OCAqZGF0YSk7CitzdGF0aWMgaW50IGVmdXNlX3BnX3BhY2tldF93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggb2Zmc2V0LAorCQkJCSB1OCB3b3JkX2VuLCB1OCAqZGF0YSk7CitzdGF0aWMgdm9pZCBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3JlYWQodTggd29yZF9lbiwgdTggKnNvdXJkYXRhLAorCQkJCQl1OCAqdGFyZ2V0ZGF0YSk7CitzdGF0aWMgdTggZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdTE2IGVmdXNlX2FkZHIsIHU4IHdvcmRfZW4sIHU4ICpkYXRhKTsKK3N0YXRpYyB2b2lkIGVmdXNlX3Bvd2VyX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYndyaXRlLAorCQkJICAgICAgIHU4IHB3cnN0YXRlKTsKK3N0YXRpYyB1MTYgZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgdTggZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh1OCB3b3JkX2VuKTsKKwordm9pZCBlZnVzZTkyZV9pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBieXRldGVtcDsKKwl1OCB0ZW1wOworCisJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0gKyAxKTsKKwl0ZW1wID0gYnl0ZXRlbXAgfCAweDIwOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0gKyAxLCB0ZW1wKTsKKworCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbU1lTX0lTT19DVFJMXSArIDEpOworCXRlbXAgPSBieXRldGVtcCAmIDB4RkU7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1NZU19JU09fQ1RSTF0gKyAxLCB0ZW1wKTsKKworCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfVEVTVF0gKyAzKTsKKwl0ZW1wID0gYnl0ZXRlbXAgfCAweDgwOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArIDMsIHRlbXApOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgyRjgsIDB4Myk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzLCAweDcyKTsKK30KKwordTggc3RnX2VmdXNlX3JlYWRfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyZXNzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBkYXRhOworCXU4IGJ5dGV0ZW1wOworCXU4IHRlbXA7CisJdTMyIGsgPSAwOworCWNvbnN0IHUzMiBlZnVzZV9yZWFsX2NvbnRlbnRfbGVuID0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXTsKKworCWlmIChhZGRyZXNzIDwgZWZ1c2VfcmVhbF9jb250ZW50X2xlbikgeworCQl0ZW1wID0gYWRkcmVzcyAmIDB4RkY7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDEsCisJCQkgICAgICAgdGVtcCk7CisJCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMik7CisJCXRlbXAgPSAoKGFkZHJlc3MgPj4gOCkgJiAweDAzKSB8IChieXRldGVtcCAmIDB4RkMpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAyLAorCQkJICAgICAgIHRlbXApOworCisJCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMyk7CisJCXRlbXAgPSBieXRldGVtcCAmIDB4N0Y7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDMsCisJCQkgICAgICAgdGVtcCk7CisKKwkJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKwkJd2hpbGUgKCEoYnl0ZXRlbXAgJiAweDgwKSkgeworCQkJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCQkgcnRscHJpdi0+Y2ZnLT4KKwkJCQkJCSBtYXBzW0VGVVNFX0NUUkxdICsgMyk7CisJCQlrKys7CisJCQlpZiAoayA9PSAxMDAwKSB7CisJCQkJayA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGF0YSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdKTsKKwkJcmV0dXJuIGRhdGE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDB4RkY7CisJfQorfQorRVhQT1JUX1NZTUJPTChzdGdfZWZ1c2VfcmVhZF8xYnl0ZSk7CisKK3ZvaWQgZWZ1c2U5MmVfd3JpdGVfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggYnl0ZXRlbXA7CisJdTggdGVtcDsKKwl1MzIgayA9IDA7CisJY29uc3QgdTMyIGVmdXNlX3JlYWxfY29udGVudF9sZW4gPQorCQlydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfUkVBTF9DT05URU5UX1NJWkVdOworCisJUlRfVFJBQ0UoQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCSAoIkFkZHI9JXggRGF0YSA9JXhcbiIsIGFkZHJlc3MsIHZhbHVlKSk7CisKKwlpZiAoYWRkcmVzcyA8IGVmdXNlX3JlYWxfY29udGVudF9sZW4pIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdLCB2YWx1ZSk7CisKKwkJdGVtcCA9IGFkZHJlc3MgJiAweEZGOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAxLAorCQkJICAgICAgIHRlbXApOworCQlieXRldGVtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCQkJIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIpOworCisJCXRlbXAgPSAoKGFkZHJlc3MgPj4gOCkgJiAweDAzKSB8IChieXRldGVtcCAmIDB4RkMpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LAorCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIsIHRlbXApOworCisJCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMyk7CisJCXRlbXAgPSBieXRldGVtcCB8IDB4ODA7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCisJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMywgdGVtcCk7CisKKwkJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKworCQl3aGlsZSAoYnl0ZXRlbXAgJiAweDgwKSB7CisJCQlieXRldGVtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCQkJCSBydGxwcml2LT5jZmctPgorCQkJCQkJIG1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKwkJCWsrKzsKKwkJCWlmIChrID09IDEwMCkgeworCQkJCWsgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIHJlYWQ5MmVfZWZ1c2VfYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsIHU4ICpwYnVmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgdmFsdWUzMjsKKwl1OCByZWFkYnl0ZTsKKwl1MTYgcmV0cnk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAxLAorCQkgICAgICAgKF9vZmZzZXQgJiAweGZmKSk7CisJcmVhZGJ5dGUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIsCisJCSAgICAgICAoKF9vZmZzZXQgPj4gOCkgJiAweDAzKSB8IChyZWFkYnl0ZSAmIDB4ZmMpKTsKKworCXJlYWRieXRlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzLAorCQkgICAgICAgKHJlYWRieXRlICYgMHg3ZikpOworCisJcmV0cnkgPSAwOworCXZhbHVlMzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0pOworCXdoaWxlICghKCgodmFsdWUzMiA+PiAyNCkgJiAweGZmKSAmIDB4ODApICYmIChyZXRyeSA8IDEwMDAwKSkgeworCQl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwKKwkJCQkJIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSk7CisJCXJldHJ5Kys7CisJfQorCisJdWRlbGF5KDUwKTsKKwl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdKTsKKworCSpwYnVmID0gKHU4KSAodmFsdWUzMiAmIDB4ZmYpOworfQorCit2b2lkIHJlYWQ5MmVfZWZ1c2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBfb2Zmc2V0LCB1MTYgX3NpemVfYnl0ZSwKKwkJICAgdTggKnBidWYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggKmVmdXNlX3RibDsKKwl1OCBydGVtcDhbMV07CisJdTE2IGVmdXNlX2FkZHIgPSAwOworCXU4IG9mZnNldCwgd3JlbjsKKwl1OCB1MXRlbXAgPSAwOworCXUxNiBpOworCXUxNiBqOworCWNvbnN0IHUxNiBlZnVzZV9tYXhfc2VjdGlvbiA9CisJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9NQVhfU0VDVElPTl9NQVBdOworCWNvbnN0IHUzMiBlZnVzZV9yZWFsX2NvbnRlbnRfbGVuID0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXTsKKwl1MTYgKiplZnVzZV93b3JkOworCXUxNiBlZnVzZV91dGlsaXplZCA9IDA7CisJdTggZWZ1c2VfdXNhZ2U7CisKKwlpZiAoKF9vZmZzZXQgKyBfc2l6ZV9ieXRlKSA+IHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pIHsKKwkJUlRfVFJBQ0UoQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCQkgKCJyZWFkOTJlX2VmdXNlKCk6IEludmFsaWQgb2Zmc2V0KCUjeCkgd2l0aCByZWFkIGJ5dGVzKCUjeCkhIVxuIiwKKwkJCSBfb2Zmc2V0LCBfc2l6ZV9ieXRlKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGVmdXNlX3RibCBhbmQgZWZ1c2Vfd29yZCAqLworCWVmdXNlX3RibCA9IGttYWxsb2MocnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSAqCisJCQkgICAgc2l6ZW9mKHU4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFlZnVzZV90YmwpCisJCXJldHVybjsKKwllZnVzZV93b3JkID0ga3phbGxvYyhFRlVTRV9NQVhfV09SRF9VTklUICogc2l6ZW9mKHUxNiAqKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFlZnVzZV93b3JkKQorCQlnb3RvIG91dDsKKwlmb3IgKGkgPSAwOyBpIDwgRUZVU0VfTUFYX1dPUkRfVU5JVDsgaSsrKSB7CisJCWVmdXNlX3dvcmRbaV0gPSBrbWFsbG9jKGVmdXNlX21heF9zZWN0aW9uICogc2l6ZW9mKHUxNiksCisJCQkJCUdGUF9BVE9NSUMpOworCQlpZiAoIWVmdXNlX3dvcmRbaV0pCisJCQlnb3RvIGRvbmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGVmdXNlX21heF9zZWN0aW9uOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBFRlVTRV9NQVhfV09SRF9VTklUOyBqKyspCisJCQllZnVzZV93b3JkW2pdW2pdID0gMHhGRkZGOworCisJcmVhZDkyZV9lZnVzZV9ieXRlKGh3LCBlZnVzZV9hZGRyLCBydGVtcDgpOworCWlmICgqcnRlbXA4ICE9IDB4RkYpIHsKKwkJZWZ1c2VfdXRpbGl6ZWQrKzsKKwkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9SRUFEX0FMTCwKKwkJCSJBZGRyPSVkXG4iLCBlZnVzZV9hZGRyKTsKKwkJZWZ1c2VfYWRkcisrOworCX0KKworCXdoaWxlICgoKnJ0ZW1wOCAhPSAweEZGKSAmJiAoZWZ1c2VfYWRkciA8IGVmdXNlX3JlYWxfY29udGVudF9sZW4pKSB7CisJCS8qICBDaGVjayBQRyBoZWFkZXIgZm9yIHNlY3Rpb24gbnVtLiAgKi8KKwkJaWYgKCgqcnRlbXA4ICYgMHgxRikgPT0gMHgwRikgey8qIGV4dGVuZGVkIGhlYWRlciAqLworCQkJdTF0ZW1wID0gKCgqcnRlbXA4ICYgMHhFMCkgPj4gNSk7CisJCQlyZWFkOTJlX2VmdXNlX2J5dGUoaHcsIGVmdXNlX2FkZHIsIHJ0ZW1wOCk7CisKKwkJCWlmICgoKnJ0ZW1wOCAmIDB4MEYpID09IDB4MEYpIHsKKwkJCQllZnVzZV9hZGRyKys7CisJCQkJcmVhZDkyZV9lZnVzZV9ieXRlKGh3LCBlZnVzZV9hZGRyLCBydGVtcDgpOworCisJCQkJaWYgKCpydGVtcDggIT0gMHhGRiAmJgorCQkJCSAgICAoZWZ1c2VfYWRkciA8IGVmdXNlX3JlYWxfY29udGVudF9sZW4pKSB7CisJCQkJCWVmdXNlX2FkZHIrKzsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCW9mZnNldCA9ICgoKnJ0ZW1wOCAmIDB4RjApID4+IDEpIHwgdTF0ZW1wOworCQkJCXdyZW4gPSAoKnJ0ZW1wOCAmIDB4MEYpOworCQkJCWVmdXNlX2FkZHIrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW9mZnNldCA9ICgoKnJ0ZW1wOCA+PiA0KSAmIDB4MGYpOworCQkJd3JlbiA9ICgqcnRlbXA4ICYgMHgwZik7CisJCX0KKworCQlpZiAob2Zmc2V0IDwgZWZ1c2VfbWF4X3NlY3Rpb24pIHsKKwkJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUkVBRF9BTEwsCisJCQkJIm9mZnNldC0lZCBXb3JkZW49JXhcbiIsIG9mZnNldCwgd3Jlbik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBFRlVTRV9NQVhfV09SRF9VTklUOyBpKyspIHsKKwkJCQlpZiAoISh3cmVuICYgMHgwMSkpIHsKKwkJCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLAorCQkJCQkJRUZVU0VfUkVBRF9BTEwsICJBZGRyPSVkXG4iLAorCQkJCQkJZWZ1c2VfYWRkcik7CisKKwkJCQkJcmVhZDkyZV9lZnVzZV9ieXRlKGh3LCBlZnVzZV9hZGRyLAorCQkJCQkJCSAgIHJ0ZW1wOCk7CisJCQkJCWVmdXNlX2FkZHIrKzsKKwkJCQkJZWZ1c2VfdXRpbGl6ZWQrKzsKKwkJCQkJZWZ1c2Vfd29yZFtpXVtvZmZzZXRdID0gKCpydGVtcDggJgorCQkJCQkJCQkgMHhmZik7CisKKwkJCQkJaWYgKGVmdXNlX2FkZHIgPj0KKwkJCQkJICAgIGVmdXNlX3JlYWxfY29udGVudF9sZW4pCisJCQkJCQlicmVhazsKKworCQkJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sCisJCQkJCQlFRlVTRV9SRUFEX0FMTCwgIkFkZHI9JWRcbiIsCisJCQkJCQllZnVzZV9hZGRyKTsKKworCQkJCQlyZWFkOTJlX2VmdXNlX2J5dGUoaHcsIGVmdXNlX2FkZHIsCisJCQkJCQkJICAgcnRlbXA4KTsKKwkJCQkJZWZ1c2VfYWRkcisrOworCQkJCQllZnVzZV91dGlsaXplZCsrOworCQkJCQllZnVzZV93b3JkW2ldW29mZnNldF0gfD0KKwkJCQkJICAgICgoKHUxNikgKnJ0ZW1wOCA8PCA4KSAmIDB4ZmYwMCk7CisKKwkJCQkJaWYgKGVmdXNlX2FkZHIgPj0KKwkJCQkJICAgIGVmdXNlX3JlYWxfY29udGVudF9sZW4pCisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQl3cmVuID4+PSAxOworCQkJfQorCQl9CisKKwkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9SRUFEX0FMTCwKKwkJCSJBZGRyPSVkXG4iLCBlZnVzZV9hZGRyKTsKKwkJcmVhZDkyZV9lZnVzZV9ieXRlKGh3LCBlZnVzZV9hZGRyLCBydGVtcDgpOworCQlpZiAoKnJ0ZW1wOCAhPSAweEZGICYmIChlZnVzZV9hZGRyIDwgZWZ1c2VfcmVhbF9jb250ZW50X2xlbikpIHsKKwkJCWVmdXNlX3V0aWxpemVkKys7CisJCQllZnVzZV9hZGRyKys7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZWZ1c2VfbWF4X3NlY3Rpb247IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgRUZVU0VfTUFYX1dPUkRfVU5JVDsgaisrKSB7CisJCQllZnVzZV90YmxbKGkgKiA4KSArIChqICogMildID0KKwkJCSAgICAoZWZ1c2Vfd29yZFtqXVtpXSAmIDB4ZmYpOworCQkJZWZ1c2VfdGJsWyhpICogOCkgKyAoKGogKiAyKSArIDEpXSA9CisJCQkgICAgKChlZnVzZV93b3JkW2pdW2ldID4+IDgpICYgMHhmZik7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgX3NpemVfYnl0ZTsgaSsrKQorCQlwYnVmW2ldID0gZWZ1c2VfdGJsW19vZmZzZXQgKyBpXTsKKworCXJ0bGVmdXNlLT5lZnVzZV91c2VkYnl0ZXMgPSBlZnVzZV91dGlsaXplZDsKKwllZnVzZV91c2FnZSA9ICh1OCkgKChlZnVzZV91dGlsaXplZCAqIDEwMCkgLyBlZnVzZV9yZWFsX2NvbnRlbnRfbGVuKTsKKwlydGxlZnVzZS0+ZWZ1c2VfdXNlZHBlcmNlbnRhZ2UgPSBlZnVzZV91c2FnZTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0VGVVNFX0JZVEVTLAorCQkJCSAgICAgICh1OCAqKSZlZnVzZV91dGlsaXplZCk7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9FRlVTRV9VU0FHRSwKKwkJCQkgICAgICAodTggKikmZWZ1c2VfdXNhZ2UpOworZG9uZToKKwlmb3IgKGkgPSAwOyBpIDwgRUZVU0VfTUFYX1dPUkRfVU5JVDsgaSsrKQorCQlrZnJlZShlZnVzZV93b3JkW2ldKTsKKwlrZnJlZShlZnVzZV93b3JkKTsKK291dDoKKwlrZnJlZShlZnVzZV90YmwpOworfQorCitib29sIGVmdXNlOTJlX3NoYWRvd191cGRhdGVfY2hrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4IHNlY3Rpb25faWR4LCBpLCBCYXNlOworCXUxNiB3b3Jkc19uZWVkID0gMCwgaGRyX251bSA9IDAsIHRvdGFsYnl0ZXMsIGVmdXNlX3VzZWQ7CisJYm9vbCBid29yZGNoYW5nZWQsIGJyZXN1bHQgPSB0cnVlOworCisJZm9yIChzZWN0aW9uX2lkeCA9IDA7IHNlY3Rpb25faWR4IDwgMTY7IHNlY3Rpb25faWR4KyspIHsKKwkJQmFzZSA9IHNlY3Rpb25faWR4ICogODsKKwkJYndvcmRjaGFuZ2VkID0gZmFsc2U7CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkgPSBpICsgMikgeworCQkJaWYgKChydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVtCYXNlICsgaV0gIT0KKwkJCSAgICAgcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtCYXNlICsgaV0pIHx8CisJCQkgICAgKHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdW0Jhc2UgKyBpICsgMV0gIT0KKwkJCSAgICAgcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtCYXNlICsgaSArCisJCQkJCQkJCSAgIDFdKSkgeworCQkJCXdvcmRzX25lZWQrKzsKKwkJCQlid29yZGNoYW5nZWQgPSB0cnVlOworCQkJfQorCQl9CisKKwkJaWYgKGJ3b3JkY2hhbmdlZCkKKwkJCWhkcl9udW0rKzsKKwl9CisKKwl0b3RhbGJ5dGVzID0gaGRyX251bSArIHdvcmRzX25lZWQgKiAyOworCWVmdXNlX3VzZWQgPSBydGxlZnVzZS0+ZWZ1c2VfdXNlZGJ5dGVzOworCisJaWYgKCh0b3RhbGJ5dGVzICsgZWZ1c2VfdXNlZCkgPj0KKwkgICAgKEVGVVNFX01BWF9TSVpFIC0gcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX09PQl9QUk9URUNUX0JZVEVTX0xFTl0pKQorCQlicmVzdWx0ID0gZmFsc2U7CisKKwlSVF9UUkFDRShDT01QX0VGVVNFLCBEQkdfTE9VRCwKKwkJICgiZWZ1c2U5MmVfc2hhZG93X3VwZGF0ZV9jaGsoKTogdG90YWxieXRlcyglI3gpLCBoZHJfbnVtKCUjeCksIHdvcmRzX25lZWQoJSN4KSwgZWZ1c2VfdXNlZCglZClcbiIsCisJCSAgdG90YWxieXRlcywgaGRyX251bSwgd29yZHNfbmVlZCwgZWZ1c2VfdXNlZCkpOworCisJcmV0dXJuIGJyZXN1bHQ7Cit9CisKK3ZvaWQgZWZ1c2U5MmVfc2hhZG93X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHR5cGUsCisJCSAgICAgICB1MTYgb2Zmc2V0LCB1MzIgKnZhbHVlKQoreworCWlmICh0eXBlID09IDEpCisJCWVmdXNlOTJlX3NoYWRvd19yZWFkXzFieXRlKGh3LCBvZmZzZXQsICh1OCAqKXZhbHVlKTsKKwllbHNlIGlmICh0eXBlID09IDIpCisJCWVmdXNlOTJlX3NoYWRvd19yZWFkXzJieXRlKGh3LCBvZmZzZXQsICh1MTYgKil2YWx1ZSk7CisJZWxzZSBpZiAodHlwZSA9PSA0KQorCQllZnVzZTkyZV9zaGFkb3dfcmVhZF80Ynl0ZShodywgb2Zmc2V0LCAodTMyICopdmFsdWUpOworfQorRVhQT1JUX1NZTUJPTChlZnVzZTkyZV9zaGFkb3dfcmVhZCk7CisKK3ZvaWQgZWZ1c2U5MmVfc2hhZG93X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB0eXBlLCB1MTYgb2Zmc2V0LAorCQkJICAgdTMyIHZhbHVlKQoreworCWlmICh0eXBlID09IDEpCisJCWVmdXNlOTJlX3NoYWRvd193cml0ZV8xYnl0ZShodywgb2Zmc2V0LCAodTgpdmFsdWUpOworCWVsc2UgaWYgKHR5cGUgPT0gMikKKwkJZWZ1c2U5MmVfc2hhZG93X3dyaXRlXzJieXRlKGh3LCBvZmZzZXQsICh1MTYpdmFsdWUpOworCWVsc2UgaWYgKHR5cGUgPT0gNCkKKwkJZWZ1c2U5MmVfc2hhZG93X3dyaXRlXzRieXRlKGh3LCBvZmZzZXQsICh1MzIpdmFsdWUpOworfQorCitib29sIGVmdXNlOTJlX3NoYWRvd191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTE2IGksIG9mZnNldCwgYmFzZTsKKwl1OCB3b3JkX2VuID0gMHgwRjsKKwl1OCBmaXJzdF9wZyA9IGZhbHNlOworCisJUlRfVFJBQ0UoQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiXG4iKSk7CisKKwlpZiAoIWVmdXNlOTJlX3NoYWRvd191cGRhdGVfY2hrKGh3KSkgeworCQllZnVzZV9yZWFkX2FsbF9tYXAoaHcsICZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSk7CisJCW1lbWNweSgmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkJICAgICAgICZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwKKwkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pOworCisJCVJUX1RSQUNFKENPTVBfRUZVU0UsIERCR19MT1VELAorCQkJICgiZWZ1c2Ugb3V0IG9mIGNhcGFjaXR5ISFcbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIHRydWUsIHRydWUpOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCAxNjsgb2Zmc2V0KyspIHsKKwkJd29yZF9lbiA9IDB4MEY7CisJCWJhc2UgPSBvZmZzZXQgKiA4OworCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCWlmIChmaXJzdF9wZykgeworCQkJCXdvcmRfZW4gJj0gfihCSVQoaSAvIDIpKTsKKworCQkJCXJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdW2Jhc2UgKyBpXSA9CisJCQkJICAgIHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bYmFzZSArIGldOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bYmFzZSArIGldICE9CisJCQkJICAgIHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bYmFzZSArIGldKSB7CisJCQkJCXdvcmRfZW4gJj0gfihCSVQoaSAvIDIpKTsKKworCQkJCQlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVtiYXNlICsgaV0gPQorCQkJCQkgICAgcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtiYXNlICsgaV07CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHdvcmRfZW4gIT0gMHgwRikgeworCQkJdTggdG1wZGF0YVs4XTsKKwkJCW1lbWNweSh0bXBkYXRhLAorCQkJICAgICAgICgmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtiYXNlXSksCisJCQkgICAgICAgOCk7CisJCQlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJICAgICAgIlUtZWZ1c2VcbiIsIHRtcGRhdGEsIDgpOworCisJCQlpZiAoIWVmdXNlX3BnX3BhY2tldF93cml0ZShodywgKHU4KSBvZmZzZXQsIHdvcmRfZW4sCisJCQkJCQkgICB0bXBkYXRhKSkgeworCQkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkJICgiUEcgc2VjdGlvbiglI3gpIGZhaWwhIVxuIiwgb2Zmc2V0KSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIHRydWUsIGZhbHNlKTsKKwllZnVzZV9yZWFkX2FsbF9tYXAoaHcsICZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSk7CisKKwltZW1jcHkoJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bMF0sCisJICAgICAgICZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwKKwkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSk7CisKKwlSVF9UUkFDRShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJcbiIpKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBzdGdfcnRsX2VmdXNlOTJlX3NoYWRvd19tYXBfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCisJaWYgKHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZykgeworCQltZW1zZXQoJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdLAorCQkgICAgICAgMHhGRiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSk7CisJfSBlbHNlIHsKKwkJZWZ1c2VfcmVhZF9hbGxfbWFwKGh3LCAmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bMF0pOworCX0KKworCW1lbWNweSgmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkgICAgICAgJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdLAorCSAgICAgICBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfSFdTRVRfTUFYX1NJWkVdKTsKK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9lZnVzZTkyZV9zaGFkb3dfbWFwX3VwZGF0ZSk7CisKK3ZvaWQgZWZ1c2U5MmVfZm9yY2Vfd3JpdGVfdmVuZG9yX0lkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXU4IHRtcGRhdGFbOF0gPSB7IDB4RkYsIDB4RkYsIDB4RUMsIDB4MTAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKKworCWVmdXNlX3Bvd2VyX3N3aXRjaChodywgdHJ1ZSwgdHJ1ZSk7CisJZWZ1c2VfcGdfcGFja2V0X3dyaXRlKGh3LCAxLCAweEQsIHRtcGRhdGEpOworCWVmdXNlX3Bvd2VyX3N3aXRjaChodywgdHJ1ZSwgZmFsc2UpOworfQorCit2b2lkIGVmdXNlOTJlX3JlX3BnX3NlY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHNlY3Rpb25faWR4KQoreworfQorCitzdGF0aWMgdm9pZCBlZnVzZTkyZV9zaGFkb3dfcmVhZF8xYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdTE2IG9mZnNldCwgdTggKnZhbHVlKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJKnZhbHVlID0gcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXRdOworfQorCitzdGF0aWMgdm9pZCBlZnVzZTkyZV9zaGFkb3dfcmVhZF8yYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdTE2IG9mZnNldCwgdTE2ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCisJKnZhbHVlID0gcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXRdOworCSp2YWx1ZSB8PSBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldCArIDFdIDw8IDg7Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlOTJlX3NoYWRvd19yZWFkXzRieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MTYgb2Zmc2V0LCB1MzIgKnZhbHVlKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwkqdmFsdWUgPSBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldF07CisJKnZhbHVlIHw9IHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bb2Zmc2V0ICsgMV0gPDwgODsKKwkqdmFsdWUgfD0gcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXQgKyAyXSA8PCAxNjsKKwkqdmFsdWUgfD0gcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXQgKyAzXSA8PCAyNDsKK30KKworc3RhdGljIHZvaWQgZWZ1c2U5MmVfc2hhZG93X3dyaXRlXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQl1MTYgb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCisJcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXRdID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlOTJlX3NoYWRvd193cml0ZV8yYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJdTE2IG9mZnNldCwgdTE2IHZhbHVlKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldF0gPSB2YWx1ZSAmIDB4MDBGRjsKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldCArIDFdID0gdmFsdWUgPj4gODsKK30KKworc3RhdGljIHZvaWQgZWZ1c2U5MmVfc2hhZG93X3dyaXRlXzRieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQl1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKworCXJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bb2Zmc2V0XSA9CisJICAgICh1OCkgKHZhbHVlICYgMHgwMDAwMDBGRik7CisJcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXQgKyAxXSA9CisJICAgICh1OCkgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMEZGKTsKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldCArIDJdID0KKwkgICAgKHU4KSAoKHZhbHVlID4+IDE2KSAmIDB4MDBGRik7CisJcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXQgKyAzXSA9CisJICAgICh1OCkgKCh2YWx1ZSA+PiAyNCkgJiAweEZGKTsKK30KKworaW50IHN0Z19lZnVzZV9vbmVfYnl0ZV9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkciwgdTggKmRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHRtcGlkeCA9IDA7CisJaW50IGJyZXN1bHQ7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAxLAorCQkgICAgICAgKHU4KSAoYWRkciAmIDB4ZmYpKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAyLAorCQkgICAgICAgKCh1OCkgKChhZGRyID4+IDgpICYgMHgwMykpIHwKKwkJICAgICAgIChydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMikgJgorCQkJMHhGQykpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMywgMHg3Mik7CisKKwl3aGlsZSAoISgweDgwICYgcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCSAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDMpKSAmJgorCSAgICAgICAodG1waWR4IDwgMTAwKSkgeworCQl0bXBpZHgrKzsKKwl9CisKKwlpZiAodG1waWR4IDwgMTAwKSB7CisJCSpkYXRhID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0pOworCQlicmVzdWx0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQkqZGF0YSA9IDB4ZmY7CisJCWJyZXN1bHQgPSBmYWxzZTsKKwl9CisJcmV0dXJuIGJyZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19lZnVzZV9vbmVfYnl0ZV9yZWFkKTsKKworc3RhdGljIGludCBlZnVzZV9vbmVfYnl0ZV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGFkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHRtcGlkeCA9IDA7CisJYm9vbCBicmVzdWx0OworCisJUlRfVFJBQ0UoQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCSAoIkFkZHIgPSAleCBEYXRhPSV4XG4iLCBhZGRyLCBkYXRhKSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LAorCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMSwgKHU4KSAoYWRkciAmIDB4ZmYpKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAyLAorCQkgICAgICAgKHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKworCQkJIDIpICYgMHhGQykgfCAodTgpICgoYWRkciA+PiA4KSAmIDB4MDMpKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSwgZGF0YSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMywgMHhGMik7CisKKwl3aGlsZSAoKDB4ODAgJiBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJICAgICBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKSkgJiYKKwkgICAgICAgKHRtcGlkeCA8IDEwMCkpIHsKKwkJdG1waWR4Kys7CisJfQorCisJaWYgKHRtcGlkeCA8IDEwMCkKKwkJYnJlc3VsdCA9IHRydWU7CisJZWxzZQorCQlicmVzdWx0ID0gZmFsc2U7CisKKwlyZXR1cm4gYnJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZWZ1c2VfcmVhZF9hbGxfbWFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqZWZ1c2UpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWVmdXNlX3Bvd2VyX3N3aXRjaChodywgZmFsc2UsIHRydWUpOworCXJlYWQ5MmVfZWZ1c2UoaHcsIDAsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0sIGVmdXNlKTsKKwllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3JlYWRfZGF0YV9jYXNlMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAorCQkJCXU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwgdTggKnRtcGRhdGEsCisJCQkJdTggKnJlYWRzdGF0ZSkKK3sKKwlib29sIGJkYXRhZW1wdHkgPSB0cnVlOworCXU4IGhvZmZzZXQ7CisJdTggdG1waWR4OworCXU4IGh3b3JkZW47CisJdTggd29yZF9jbnRzOworCisJaG9mZnNldCA9IChlZnVzZV9kYXRhID4+IDQpICYgMHgwRjsKKwlod29yZGVuID0gZWZ1c2VfZGF0YSAmIDB4MEY7CisJd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyhod29yZGVuKTsKKworCWlmIChob2Zmc2V0ID09IG9mZnNldCkgeworCQlmb3IgKHRtcGlkeCA9IDA7IHRtcGlkeCA8IHdvcmRfY250cyAqIDI7IHRtcGlkeCsrKSB7CisJCQlpZiAoc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsICplZnVzZV9hZGRyICsgMSArIHRtcGlkeCwKKwkJCQkJCSAgICAmZWZ1c2VfZGF0YSkpIHsKKwkJCQl0bXBkYXRhW3RtcGlkeF0gPSBlZnVzZV9kYXRhOworCQkJCWlmIChlZnVzZV9kYXRhICE9IDB4ZmYpCisJCQkJCWJkYXRhZW1wdHkgPSBmYWxzZTsKKwkJCX0KKwkJfQorCisJCWlmICghYmRhdGFlbXB0eSkgeworCQkJKnJlYWRzdGF0ZSA9IFBHX1NUQVRFX0RBVEE7CisJCX0gZWxzZSB7CisJCQkqZWZ1c2VfYWRkciA9ICplZnVzZV9hZGRyICsgKHdvcmRfY250cyAqIDIpICsgMTsKKwkJCSpyZWFkc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJCX0KKworCX0gZWxzZSB7CisJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAod29yZF9jbnRzICogMikgKyAxOworCQkqcmVhZHN0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCX0KK30KKworc3RhdGljIGludCBlZnVzZV9wZ19wYWNrZXRfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggb2Zmc2V0LCB1OCAqZGF0YSkKK3sKKwl1OCByZWFkc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisKKwlib29sIGJjb250aW51YWwgPSB0cnVlOworCisJdTggZWZ1c2VfZGF0YSwgd29yZF9jbnRzID0gMDsKKwl1MTYgZWZ1c2VfYWRkciA9IDA7CisJdTggaHdvcmRlbiA9IDA7CisJdTggdG1wZGF0YVs4XTsKKworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwlpZiAob2Zmc2V0ID4gMTUpCisJCXJldHVybiBmYWxzZTsKKworCW1lbXNldChkYXRhLCAweGZmLCBQR1BLVF9EQVRBX1NJWkUgKiBzaXplb2YodTgpKTsKKwltZW1zZXQodG1wZGF0YSwgMHhmZiwgUEdQS1RfREFUQV9TSVpFICogc2l6ZW9mKHU4KSk7CisKKwl3aGlsZSAoYmNvbnRpbnVhbCAmJiAoZWZ1c2VfYWRkciA8IEVGVVNFX01BWF9TSVpFKSkgeworCQlpZiAocmVhZHN0YXRlICYgUEdfU1RBVEVfSEVBREVSKSB7CisJCQlpZiAoc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsIGVmdXNlX2FkZHIsICZlZnVzZV9kYXRhKSAmJgorCQkJICAgIChlZnVzZV9kYXRhICE9IDB4RkYpKQorCQkJCWVmdXNlX3JlYWRfZGF0YV9jYXNlMShodywgJmVmdXNlX2FkZHIsCisJCQkJCQkgICAgICBlZnVzZV9kYXRhLCBvZmZzZXQsCisJCQkJCQkgICAgICB0bXBkYXRhLCAmcmVhZHN0YXRlKTsKKwkJCWVsc2UKKwkJCQliY29udGludWFsID0gZmFsc2U7CisJCX0gZWxzZSBpZiAocmVhZHN0YXRlICYgUEdfU1RBVEVfREFUQSkgeworCQkJZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV9yZWFkKGh3b3JkZW4sIHRtcGRhdGEsIGRhdGEpOworCQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAod29yZF9jbnRzICogMikgKyAxOworCQkJcmVhZHN0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQl9CisJfQorCisJaWYgKChkYXRhWzBdID09IDB4ZmYpICYmIChkYXRhWzFdID09IDB4ZmYpICYmCisJICAgIChkYXRhWzJdID09IDB4ZmYpICYmIChkYXRhWzNdID09IDB4ZmYpICYmCisJICAgIChkYXRhWzRdID09IDB4ZmYpICYmIChkYXRhWzVdID09IDB4ZmYpICYmCisJICAgIChkYXRhWzZdID09IDB4ZmYpICYmIChkYXRhWzddID09IDB4ZmYpKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAorCQkJCSAgIHU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwKKwkJCQkgICBpbnQgKmJjb250aW51YWwsIHU4ICp3cml0ZV9zdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgcGdwa3Rfc3RydWN0ICp0YXJnZXRfcGt0LAorCQkJCSAgIGludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQsIHU4IHdvcmRfZW4pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdG1wX3BrdDsKKwlpbnQgYmRhdGFlbXB0eSA9IHRydWU7CisJdTggb3JpZ2luYWxkYXRhWzggKiBzaXplb2YodTgpXTsKKwl1OCBiYWR3b3JkZW4gPSAweDBGOworCXU4IG1hdGNoX3dvcmRfZW4sIHRtcF93b3JkX2VuOworCXU4IHRtcGluZGV4OworCXU4IHRtcF9oZWFkZXIgPSBlZnVzZV9kYXRhOworCXU4IHRtcF93b3JkX2NudHM7CisKKwl0bXBfcGt0Lm9mZnNldCA9ICh0bXBfaGVhZGVyID4+IDQpICYgMHgwRjsKKwl0bXBfcGt0LndvcmRfZW4gPSB0bXBfaGVhZGVyICYgMHgwRjsKKwl0bXBfd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh0bXBfcGt0LndvcmRfZW4pOworCisJaWYgKHRtcF9wa3Qub2Zmc2V0ICE9IHRhcmdldF9wa3QtPm9mZnNldCkgeworCQkqZWZ1c2VfYWRkciA9ICplZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CisJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKKwl9IGVsc2UgeworCQlmb3IgKHRtcGluZGV4ID0gMDsgdG1waW5kZXggPCAodG1wX3dvcmRfY250cyAqIDIpOyB0bXBpbmRleCsrKSB7CisJCQlpZiAoc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsCisJCQkJCQkoKmVmdXNlX2FkZHIgKyAxICsgdG1waW5kZXgpLAorCQkJCQkJJmVmdXNlX2RhdGEpICYmCisJCQkgICAgKGVmdXNlX2RhdGEgIT0gMHhGRikpCisJCQkJYmRhdGFlbXB0eSA9IGZhbHNlOworCQl9CisKKwkJaWYgKCFiZGF0YWVtcHR5KSB7CisJCQkqZWZ1c2VfYWRkciA9ICplZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CisJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJCX0gZWxzZSB7CisJCQltYXRjaF93b3JkX2VuID0gMHgwRjsKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDApKSB8CisJCQkgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgwKSkpKQorCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMCkpOworCisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgxKSkgfAorCQkJICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMSkpKSkKKwkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDEpKTsKKworCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMikpIHwKKwkJCSAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDIpKSkpCisJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgyKSk7CisKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDMpKSB8CisJCQkgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgzKSkpKQorCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMykpOworCisJCQlpZiAoKG1hdGNoX3dvcmRfZW4gJiAweDBGKSAhPSAweDBGKSB7CisJCQkJYmFkd29yZGVuID0gZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV93cml0ZShodywKKwkJCQkJCQkqZWZ1c2VfYWRkciArIDEsCisJCQkJCQkJdG1wX3BrdC53b3JkX2VuLAorCQkJCQkJCXRhcmdldF9wa3QtPmRhdGEpOworCisJCQkJaWYgKDB4MEYgIT0gKGJhZHdvcmRlbiAmIDB4MEYpKQl7CisJCQkJCXU4IHJlb3JnX29mZnNldCA9IG9mZnNldDsKKwkJCQkJdTggcmVvcmdfd29yZGVuID0gYmFkd29yZGVuOworCQkJCQllZnVzZV9wZ19wYWNrZXRfd3JpdGUoaHcsIHJlb3JnX29mZnNldCwKKwkJCQkJCQkgICAgICByZW9yZ193b3JkZW4sCisJCQkJCQkJICAgICAgb3JpZ2luYWxkYXRhKTsKKwkJCQl9CisKKwkJCQl0bXBfd29yZF9lbiA9IDB4MEY7CisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDApKSBeCisJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDApKSkKKwkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMCkpOworCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDEpKSBeCisJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDEpKSkKKwkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMSkpOworCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDIpKSBeCisJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDIpKSkKKwkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMikpOworCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDMpKSBeCisJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDMpKSkKKwkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMykpOworCisJCQkJaWYgKCh0bXBfd29yZF9lbiAmIDB4MEYpICE9IDB4MEYpIHsKKwkJCQkJKmVmdXNlX2FkZHIgPSBlZnVzZV9nZXRfY3VycmVudF9zaXplKGh3KTsKKwkJCQkJdGFyZ2V0X3BrdC0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJCQl0YXJnZXRfcGt0LT53b3JkX2VuID0gdG1wX3dvcmRfZW47CisJCQkJfSBlbHNlIHsKKwkJCQkJKmJjb250aW51YWwgPSBmYWxzZTsKKwkJCQl9CisJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQkJCSpyZXBlYXRfdGltZXMgKz0gMTsKKwkJCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7CisJCQkJCSpiY29udGludWFsID0gZmFsc2U7CisJCQkJCSpicmVzdWx0ID0gZmFsc2U7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkqZWZ1c2VfYWRkciArPSAoMiAqIHRtcF93b3JkX2NudHMpICsgMTsKKwkJCQl0YXJnZXRfcGt0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHdvcmRfZW47CisJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQkJfQorCQl9CisJfQorCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsICJlZnVzZSBQR19TVEFURV9IRUFERVItMVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3dyaXRlX2RhdGFfY2FzZTIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiAqZWZ1c2VfYWRkciwKKwkJCQkgICBpbnQgKmJjb250aW51YWwsIHU4ICp3cml0ZV9zdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRhcmdldF9wa3QsCisJCQkJICAgaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHBncGt0X3N0cnVjdCB0bXBfcGt0OworCXU4IHBnX2hlYWRlcjsKKwl1OCB0bXBfaGVhZGVyOworCXU4IG9yaWdpbmFsZGF0YVs4ICogc2l6ZW9mKHU4KV07CisJdTggdG1wX3dvcmRfY250czsKKwl1OCBiYWR3b3JkZW4gPSAweDBGOworCisJcGdfaGVhZGVyID0gKCh0YXJnZXRfcGt0Lm9mZnNldCA8PCA0KSAmIDB4ZjApIHwgdGFyZ2V0X3BrdC53b3JkX2VuOworCWVmdXNlX29uZV9ieXRlX3dyaXRlKGh3LCAqZWZ1c2VfYWRkciwgcGdfaGVhZGVyKTsKKwlzdGdfZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgKmVmdXNlX2FkZHIsICZ0bXBfaGVhZGVyKTsKKworCWlmICh0bXBfaGVhZGVyID09IHBnX2hlYWRlcikgeworCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9EQVRBOworCX0gZWxzZSBpZiAodG1wX2hlYWRlciA9PSAweEZGKSB7CisJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKKwkJKnJlcGVhdF90aW1lcyArPSAxOworCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7CisJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCXRtcF9wa3Qub2Zmc2V0ID0gKHRtcF9oZWFkZXIgPj4gNCkgJiAweDBGOworCQl0bXBfcGt0LndvcmRfZW4gPSB0bXBfaGVhZGVyICYgMHgwRjsKKworCQl0bXBfd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh0bXBfcGt0LndvcmRfZW4pOworCisJCW1lbXNldChvcmlnaW5hbGRhdGEsIDB4ZmYsICA4ICogc2l6ZW9mKHU4KSk7CisKKwkJaWYgKGVmdXNlX3BnX3BhY2tldF9yZWFkKGh3LCB0bXBfcGt0Lm9mZnNldCwgb3JpZ2luYWxkYXRhKSkgeworCQkJYmFkd29yZGVuID0gZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV93cml0ZShodywKKwkJCQkJCQkJICplZnVzZV9hZGRyICsgMSwKKwkJCQkJCQkJIHRtcF9wa3Qud29yZF9lbiwKKwkJCQkJCQkJIG9yaWdpbmFsZGF0YSk7CisKKwkJCWlmICgweDBGICE9IChiYWR3b3JkZW4gJiAweDBGKSkgeworCQkJCXU4IHJlb3JnX29mZnNldCA9IHRtcF9wa3Qub2Zmc2V0OworCQkJCXU4IHJlb3JnX3dvcmRlbiA9IGJhZHdvcmRlbjsKKwkJCQllZnVzZV9wZ19wYWNrZXRfd3JpdGUoaHcsIHJlb3JnX29mZnNldCwKKwkJCQkJCSAgICAgIHJlb3JnX3dvcmRlbiwKKwkJCQkJCSAgICAgIG9yaWdpbmFsZGF0YSk7CisJCQkJKmVmdXNlX2FkZHIgPSBlZnVzZV9nZXRfY3VycmVudF9zaXplKGh3KTsKKwkJCX0gZWxzZSB7CisJCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArCisJCQkJCSAgICAgICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCQl9CisKKwkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQkqcmVwZWF0X3RpbWVzICs9IDE7CisJCWlmICgqcmVwZWF0X3RpbWVzID4gRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8pIHsKKwkJCSpiY29udGludWFsID0gZmFsc2U7CisJCQkqYnJlc3VsdCA9IGZhbHNlOworCQl9CisKKwkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKKwkJCSJlZnVzZSBQR19TVEFURV9IRUFERVItMlxuIik7CisJfQorfQorCitzdGF0aWMgaW50IGVmdXNlX3BnX3BhY2tldF93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggb2Zmc2V0LCB1OCB3b3JkX2VuLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0OworCXU4IHdyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCWludCBiY29udGludWFsID0gdHJ1ZSwgYmRhdGFlbXB0eSA9IHRydWUsIGJyZXN1bHQgPSB0cnVlOworCXUxNiBlZnVzZV9hZGRyID0gMDsKKwl1OCBlZnVzZV9kYXRhOworCXU4IHRhcmdldF93b3JkX2NudHMgPSAwOworCXU4IGJhZHdvcmRlbiA9IDB4MEY7CisJc3RhdGljIGludCByZXBlYXRfdGltZXM7CisKKwlpZiAoZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShodykgPj0gKEVGVVNFX01BWF9TSVpFIC0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX09PQl9QUk9URUNUX0JZVEVTX0xFTl0pKSB7CisJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsCisJCQkiZWZ1c2VfcGdfcGFja2V0X3dyaXRlIGVycm9yXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OworCXRhcmdldF9wa3Qud29yZF9lbiA9IHdvcmRfZW47CisKKwltZW1zZXQodGFyZ2V0X3BrdC5kYXRhLCAweEZGLCAgOCAqIHNpemVvZih1OCkpOworCisJZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV9yZWFkKHdvcmRfZW4sIGRhdGEsIHRhcmdldF9wa3QuZGF0YSk7CisJdGFyZ2V0X3dvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHModGFyZ2V0X3BrdC53b3JkX2VuKTsKKworCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsICJlZnVzZSBQb3dlciBPTlxuIik7CisKKwl3aGlsZSAoYmNvbnRpbnVhbCAmJiAoZWZ1c2VfYWRkciA8IChFRlVTRV9NQVhfU0laRSAtCisJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9PT0JfUFJPVEVDVF9CWVRFU19MRU5dKSkpIHsKKwkJaWYgKHdyaXRlX3N0YXRlID09IFBHX1NUQVRFX0hFQURFUikgeworCQkJYmRhdGFlbXB0eSA9IHRydWU7CisJCQliYWR3b3JkZW4gPSAweDBGOworCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKKwkJCQkiZWZ1c2UgUEdfU1RBVEVfSEVBREVSXG4iKTsKKworCQkJaWYgKHN0Z19lZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkgJiYKKwkJCSAgICAoZWZ1c2VfZGF0YSAhPSAweEZGKSkKKwkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UxKGh3LCAmZWZ1c2VfYWRkciwKKwkJCQkJCSAgICAgICBlZnVzZV9kYXRhLCBvZmZzZXQsCisJCQkJCQkgICAgICAgJmJjb250aW51YWwsCisJCQkJCQkgICAgICAgJndyaXRlX3N0YXRlLAorCQkJCQkJICAgICAgICZ0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsICZicmVzdWx0LAorCQkJCQkJICAgICAgIHdvcmRfZW4pOworCQkJZWxzZQorCQkJCWVmdXNlX3dyaXRlX2RhdGFfY2FzZTIoaHcsICZlZnVzZV9hZGRyLAorCQkJCQkJICAgICAgICZiY29udGludWFsLAorCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwKKwkJCQkJCSAgICAgICB0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsCisJCQkJCQkgICAgICAgJmJyZXN1bHQpOworCisJCX0gZWxzZSBpZiAod3JpdGVfc3RhdGUgPT0gUEdfU1RBVEVfREFUQSkgeworCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKKwkJCQkiZWZ1c2UgUEdfU1RBVEVfREFUQVxuIik7CisJCQliYWR3b3JkZW4gPSAweDBmOworCQkJYmFkd29yZGVuID0KKwkJCSAgICBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3dyaXRlKGh3LCBlZnVzZV9hZGRyICsgMSwKKwkJCQkJCQkgdGFyZ2V0X3BrdC53b3JkX2VuLAorCQkJCQkJCSB0YXJnZXRfcGt0LmRhdGEpOworCisJCQlpZiAoKGJhZHdvcmRlbiAmIDB4MEYpID09IDB4MEYpIHsKKwkJCQliY29udGludWFsID0gZmFsc2U7CisJCQl9IGVsc2UgeworCQkJCWVmdXNlX2FkZHIgPQorCQkJCSAgICBlZnVzZV9hZGRyICsgKDIgKiB0YXJnZXRfd29yZF9jbnRzKSArIDE7CisKKwkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKKwkJCQl0YXJnZXRfcGt0LndvcmRfZW4gPSBiYWR3b3JkZW47CisJCQkJdGFyZ2V0X3dvcmRfY250cyA9CisJCQkJICAgIGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHModGFyZ2V0X3BrdC4KKwkJCQkJCQkgICAgICB3b3JkX2VuKTsKKwkJCQl3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKKwkJCQlyZXBlYXRfdGltZXMrKzsKKwkJCQlpZiAocmVwZWF0X3RpbWVzID4gRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8pIHsKKwkJCQkJYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJCQlicmVzdWx0ID0gZmFsc2U7CisJCQkJfQorCQkJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsCisJCQkJCSJlZnVzZSBQR19TVEFURV9IRUFERVItM1xuIik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZWZ1c2VfYWRkciA+PSAoRUZVU0VfTUFYX1NJWkUgLQorCQlydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfT09CX1BST1RFQ1RfQllURVNfTEVOXSkpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCQkgKCJlZnVzZV9hZGRyKCUjeCkgT3V0IG9mIHNpemUhIVxuIiwgZWZ1c2VfYWRkcikpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3JlYWQodTggd29yZF9lbiwgdTggKnNvdXJkYXRhLAorCQkJCQl1OCAqdGFyZ2V0ZGF0YSkKK3sKKwlpZiAoISh3b3JkX2VuICYgQklUKDApKSkgeworCQl0YXJnZXRkYXRhWzBdID0gc291cmRhdGFbMF07CisJCXRhcmdldGRhdGFbMV0gPSBzb3VyZGF0YVsxXTsKKwl9CisKKwlpZiAoISh3b3JkX2VuICYgQklUKDEpKSkgeworCQl0YXJnZXRkYXRhWzJdID0gc291cmRhdGFbMl07CisJCXRhcmdldGRhdGFbM10gPSBzb3VyZGF0YVszXTsKKwl9CisKKwlpZiAoISh3b3JkX2VuICYgQklUKDIpKSkgeworCQl0YXJnZXRkYXRhWzRdID0gc291cmRhdGFbNF07CisJCXRhcmdldGRhdGFbNV0gPSBzb3VyZGF0YVs1XTsKKwl9CisKKwlpZiAoISh3b3JkX2VuICYgQklUKDMpKSkgeworCQl0YXJnZXRkYXRhWzZdID0gc291cmRhdGFbNl07CisJCXRhcmdldGRhdGFbN10gPSBzb3VyZGF0YVs3XTsKKwl9Cit9CisKK3N0YXRpYyB1OCBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MTYgZWZ1c2VfYWRkciwgdTggd29yZF9lbiwgdTggKmRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUxNiB0bXBhZGRyOworCXUxNiBzdGFydF9hZGRyID0gZWZ1c2VfYWRkcjsKKwl1OCBiYWR3b3JkZW4gPSAweDBGOworCXU4IHRtcGRhdGFbOF07CisKKwltZW1zZXQodG1wZGF0YSwgMHhmZiwgUEdQS1RfREFUQV9TSVpFKTsKKwlSVF9UUkFDRShDT01QX0VGVVNFLCBEQkdfTE9VRCwKKwkJICgid29yZF9lbiA9ICV4IGVmdXNlX2FkZHI9JXhcbiIsIHdvcmRfZW4sIGVmdXNlX2FkZHIpKTsKKworCWlmICghKHdvcmRfZW4gJiBCSVQoMCkpKSB7CisJCXRtcGFkZHIgPSBzdGFydF9hZGRyOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzBdKTsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVsxXSk7CisKKwkJc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsIHRtcGFkZHIsICZ0bXBkYXRhWzBdKTsKKwkJc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsIHRtcGFkZHIgKyAxLCAmdG1wZGF0YVsxXSk7CisJCWlmICgoZGF0YVswXSAhPSB0bXBkYXRhWzBdKSB8fCAoZGF0YVsxXSAhPSB0bXBkYXRhWzFdKSkKKwkJCWJhZHdvcmRlbiAmPSAofkJJVCgwKSk7CisJfQorCisJaWYgKCEod29yZF9lbiAmIEJJVCgxKSkpIHsKKwkJdG1wYWRkciA9IHN0YXJ0X2FkZHI7CisJCWVmdXNlX29uZV9ieXRlX3dyaXRlKGh3LCBzdGFydF9hZGRyKyssIGRhdGFbMl0pOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzNdKTsKKworCQlzdGdfZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgdG1wYWRkciwgJnRtcGRhdGFbMl0pOworCQlzdGdfZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgdG1wYWRkciArIDEsICZ0bXBkYXRhWzNdKTsKKwkJaWYgKChkYXRhWzJdICE9IHRtcGRhdGFbMl0pIHx8IChkYXRhWzNdICE9IHRtcGRhdGFbM10pKQorCQkJYmFkd29yZGVuICY9ICh+QklUKDEpKTsKKwl9CisKKwlpZiAoISh3b3JkX2VuICYgQklUKDIpKSkgeworCQl0bXBhZGRyID0gc3RhcnRfYWRkcjsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVs0XSk7CisJCWVmdXNlX29uZV9ieXRlX3dyaXRlKGh3LCBzdGFydF9hZGRyKyssIGRhdGFbNV0pOworCisJCXN0Z19lZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCB0bXBhZGRyLCAmdG1wZGF0YVs0XSk7CisJCXN0Z19lZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCB0bXBhZGRyICsgMSwgJnRtcGRhdGFbNV0pOworCQlpZiAoKGRhdGFbNF0gIT0gdG1wZGF0YVs0XSkgfHwgKGRhdGFbNV0gIT0gdG1wZGF0YVs1XSkpCisJCQliYWR3b3JkZW4gJj0gKH5CSVQoMikpOworCX0KKworCWlmICghKHdvcmRfZW4gJiBCSVQoMykpKSB7CisJCXRtcGFkZHIgPSBzdGFydF9hZGRyOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzZdKTsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVs3XSk7CisKKwkJc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsIHRtcGFkZHIsICZ0bXBkYXRhWzZdKTsKKwkJc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsIHRtcGFkZHIgKyAxLCAmdG1wZGF0YVs3XSk7CisJCWlmICgoZGF0YVs2XSAhPSB0bXBkYXRhWzZdKSB8fCAoZGF0YVs3XSAhPSB0bXBkYXRhWzddKSkKKwkJCWJhZHdvcmRlbiAmPSAofkJJVCgzKSk7CisJfQorCisJcmV0dXJuIGJhZHdvcmRlbjsKK30KKworc3RhdGljIHZvaWQgZWZ1c2VfcG93ZXJfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBid3JpdGUsIHU4IHB3cnN0YXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IHRlbXB2YWw7CisJdTE2IHRtcHYxNjsKKworCWlmIChwd3JzdGF0ZSAmJiAocnRsaGFsLT5od190eXBlICE9IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSkgeworCQlpZiAocnRsaGFsLT5od190eXBlICE9IEhBUkRXQVJFX1RZUEVfUlRMODE5MkNFICYmCisJCSAgICBydGxoYWwtPmh3X3R5cGUgIT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyREUpIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCisJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9BQ0NFU1NdLCAweDY5KTsKKwkJfSBlbHNlIHsKKwkJCXRtcHYxNiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwKKwkJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfSVNPX0NUUkxdKTsKKwkJCWlmICghKHRtcHYxNiAmIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9QV0NfRVYxMlZdKSkgeworCQkJCXRtcHYxNiB8PSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfUFdDX0VWMTJWXTsKKwkJCQlydGxfd3JpdGVfd29yZChydGxwcml2LAorCQkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1NZU19JU09fQ1RSTF0sCisJCQkJCSAgICAgICB0bXB2MTYpOworCQkJfQorCQl9CisJCXRtcHYxNiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwKKwkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1NZU19GVU5DX0VOXSk7CisJCWlmICghKHRtcHYxNiAmIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9GRU5fRUxEUl0pKSB7CisJCQl0bXB2MTYgfD0gcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0ZFTl9FTERSXTsKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsCisJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0sIHRtcHYxNik7CisJCX0KKworCQl0bXB2MTYgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfQ0xLXSk7CisJCWlmICgoISh0bXB2MTYgJiBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfTE9BREVSX0NMS19FTl0pKSB8fAorCQkgICAgKCEodG1wdjE2ICYgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0FOQThNXSkpKSB7CisJCQl0bXB2MTYgfD0gKHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9MT0FERVJfQ0xLX0VOXSB8CisJCQkJICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0FOQThNXSk7CisJCQlydGxfd3JpdGVfd29yZChydGxwcml2LAorCQkJCSAgICAgICBydGxwcml2LT5jZmctPm1hcHNbU1lTX0NMS10sIHRtcHYxNik7CisJCX0KKwl9CisKKwlpZiAocHdyc3RhdGUpIHsKKwkJaWYgKGJ3cml0ZSkgeworCQkJdGVtcHZhbCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCQkJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArCisJCQkJCQkzKTsKKworCQkJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MTJBRSkgeworCQkJCXRlbXB2YWwgJj0gfihCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikpOworCQkJCXRlbXB2YWwgfD0gKFZPTFRBR0VfVjI1IDw8IDMpOworCQkJfSBlbHNlIGlmIChydGxoYWwtPmh3X3R5cGUgIT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0UpIHsKKwkJCQl0ZW1wdmFsICY9IDB4MEY7CisJCQkJdGVtcHZhbCB8PSAoVk9MVEFHRV9WMjUgPDwgNCk7CisJCQl9CisKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCisJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArIDMsCisJCQkJICAgICAgICh0ZW1wdmFsIHwgMHg4MCkpOworCQl9CisKKwkJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NMS10sCisJCQkJICAgICAgIDB4MDMpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJ0bGhhbC0+aHdfdHlwZSAhPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJDRSAmJgorCQkgICAgcnRsaGFsLT5od190eXBlICE9IEhBUkRXQVJFX1RZUEVfUlRMODE5MkRFKQorCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0FDQ0VTU10sIDApOworCQlpZiAoYndyaXRlKSB7CisJCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsKKwkJCQkJCTMpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsgMywKKwkJCQkgICAgICAgKHRlbXB2YWwgJiAweDdGKSk7CisJCX0KKworCQlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ0xLXSwKKwkJCQkgICAgICAgMHgwMik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MTYgZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlpbnQgYmNvbnRpbnVhbCA9IHRydWU7CisJdTE2IGVmdXNlX2FkZHIgPSAwOworCXU4IGhvZmZzZXQsIGh3b3JkZW47CisJdTggZWZ1c2VfZGF0YSwgd29yZF9jbnRzOworCisJd2hpbGUgKGJjb250aW51YWwgJiYKKwkgICAgICAgc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoaHcsIGVmdXNlX2FkZHIsICZlZnVzZV9kYXRhKSAmJgorCSAgICAgICAoZWZ1c2VfYWRkciA8IEVGVVNFX01BWF9TSVpFKSkgeworCQlpZiAoZWZ1c2VfZGF0YSAhPSAweEZGKSB7CisJCQlob2Zmc2V0ID0gKGVmdXNlX2RhdGEgPj4gNCkgJiAweDBGOworCQkJaHdvcmRlbiA9IGVmdXNlX2RhdGEgJiAweDBGOworCQkJd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyhod29yZGVuKTsKKwkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHdvcmRfY250cyAqIDIpICsgMTsKKwkJfSBlbHNlIHsKKwkJCWJjb250aW51YWwgPSBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiBlZnVzZV9hZGRyOworfQorCitzdGF0aWMgdTggZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh1OCB3b3JkX2VuKQoreworCXU4IHdvcmRfY250cyA9IDA7CisJaWYgKCEod29yZF9lbiAmIEJJVCgwKSkpCisJCXdvcmRfY250cysrOworCWlmICghKHdvcmRfZW4gJiBCSVQoMSkpKQorCQl3b3JkX2NudHMrKzsKKwlpZiAoISh3b3JkX2VuICYgQklUKDIpKSkKKwkJd29yZF9jbnRzKys7CisJaWYgKCEod29yZF9lbiAmIEJJVCgzKSkpCisJCXdvcmRfY250cysrOworCXJldHVybiB3b3JkX2NudHM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2VmdXNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL2VmdXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzZTExMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvZWZ1c2UuaApAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMX0VGVVNFX0hfCisjZGVmaW5lIF9fUlRMX0VGVVNFX0hfCisKKyNkZWZpbmUgRUZVU0VfSUNfSURfT0ZGU0VUCQk1MDYKKworLyoKKyNkZWZpbmUgRUZVU0VfUkVBTF9DT05URU5UX0xFTgk1MTIKKyNkZWZpbmUgRUZVU0VfTUFQX0xFTgkJCTEyOAorI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJMTYKKyNkZWZpbmUgRUZVU0VfTUFYX1dPUkRfVU5JVAkJNAorI2RlZmluZSBFRlVTRV9JQ19JRF9PRkZTRVQJCTUwNgorKi8KKworI2RlZmluZSBFRlVTRV9NQVhfV09SRF9VTklUCQk0CisKKyNkZWZpbmUgRUZVU0VfSU5JVF9NQVAJCQkwCisjZGVmaW5lIEVGVVNFX01PRElGWV9NQVAJCTEKKworI2RlZmluZSBQR19TVEFURV9IRUFERVIJCQkweDAxCisjZGVmaW5lIFBHX1NUQVRFX1dPUkRfMAkJCTB4MDIKKyNkZWZpbmUgUEdfU1RBVEVfV09SRF8xCQkJMHgwNAorI2RlZmluZSBQR19TVEFURV9XT1JEXzIJCQkweDA4CisjZGVmaW5lIFBHX1NUQVRFX1dPUkRfMwkJCTB4MTAKKyNkZWZpbmUgUEdfU1RBVEVfREFUQQkJCTB4MjAKKworI2RlZmluZSBQR19TV0JZVEVfSAkJCTB4MDEKKyNkZWZpbmUgUEdfU1dCWVRFX0wJCQkweDAyCisKKyNkZWZpbmUgX1BPV0VST05fREVMQVlfCisjZGVmaW5lIF9QUkVfRVhFQ1VURV9SRUFEX0NNRF8KKworI2RlZmluZSBFRlVTRV9SRVBFQVRfVEhSRVNIT0xEXwkJMworI2RlZmluZSBFRlVTRV9FUlJPRV9IQU5ETEUJCTEKKworc3RydWN0IGVmdXNlX21hcCB7CisJdTggb2Zmc2V0OworCXU4IHdvcmRfc3RhcnQ7CisJdTggYnl0ZV9zdGFydDsKKwl1OCBieXRlX2NudHM7Cit9OworCitzdHJ1Y3QgcGdwa3Rfc3RydWN0IHsKKwl1OCBvZmZzZXQ7CisJdTggd29yZF9lbjsKKwl1OCBkYXRhWzhdOworfTsKKworZW51bSBlZnVzZV9kYXRhX2l0ZW0geworCUVGVVNFX0NISVBfSUQgPSAwLAorCUVGVVNFX0xET19TRVRUSU5HLAorCUVGVVNFX0NMS19TRVRUSU5HLAorCUVGVVNFX1NESU9fU0VUVElORywKKwlFRlVTRV9DQ0NSLAorCUVGVVNFX1NESU9fTU9ERSwKKwlFRlVTRV9PQ1IsCisJRUZVU0VfRjBDSVMsCisJRUZVU0VfRjFDSVMsCisJRUZVU0VfTUFDX0FERFIsCisJRUZVU0VfRUVQUk9NX1ZFUiwKKwlFRlVTRV9DSEFOX1BMQU4sCisJRUZVU0VfVFhQV19UQUIKK307CisKK2VudW0geworCVZPTFRBR0VfVjI1ID0gMHgwMywKKwlMRE9FMjVfU0hJRlQgPSAyOCwKK307CisKK3N0cnVjdCBlZnVzZV9wcml2IHsKKwl1OCBpZFsyXTsKKwl1OCBsZG9fc2V0dGluZ1syXTsKKwl1OCBjbGtfc2V0dGluZ1syXTsKKwl1OCBjY2NyOworCXU4IHNkaW9fbW9kZTsKKwl1OCBvY3JbM107CisJdTggY2lzMFsxN107CisJdTggY2lzMVs0OF07CisJdTggbWFjX2FkZHJbNl07CisJdTggZWVwcm9tX3Zlcm5vOworCXU4IGNoYW5uZWxfcGxhbjsKKwl1OCB0eF9wb3dlcl9iWzE0XTsKKwl1OCB0eF9wb3dlcl9nWzE0XTsKK307CisKK3ZvaWQgcmVhZDkyZV9lZnVzZV9ieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX29mZnNldCwgdTggKnBidWYpOwordm9pZCBlZnVzZTkyZV9pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3U4IHN0Z19lZnVzZV9yZWFkXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkcmVzcyk7CitpbnQgc3RnX2VmdXNlX29uZV9ieXRlX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyLCB1OCAqZGF0YSk7Cit2b2lkIGVmdXNlOTJlX3dyaXRlXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkcmVzcywgdTggdmFsdWUpOwordm9pZCByZWFkOTJlX2VmdXNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX29mZnNldCwKKwkJICAgdTE2IF9zaXplX2J5dGUsIHU4ICpwYnVmKTsKK3ZvaWQgZWZ1c2U5MmVfc2hhZG93X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHR5cGUsCisJCSAgICAgICAgICB1MTYgb2Zmc2V0LCB1MzIgKnZhbHVlKTsKK3ZvaWQgZWZ1c2U5MmVfc2hhZG93X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB0eXBlLAorCQkJICAgdTE2IG9mZnNldCwgdTMyIHZhbHVlKTsKK2Jvb2wgZWZ1c2U5MmVfc2hhZG93X3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIGVmdXNlOTJlX3NoYWRvd191cGRhdGVfY2hrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgc3RnX3J0bF9lZnVzZTkyZV9zaGFkb3dfbWFwX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGVmdXNlOTJlX2ZvcmNlX3dyaXRlX3ZlbmRvcl9JZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGVmdXNlOTJlX3JlX3BnX3NlY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHNlY3Rpb25faWR4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU5YjdiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9wY2kuYwpAQCAtMCwwICsxLDIzOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJ3aWZpLmgiCisjaW5jbHVkZSAicGNpLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorI2luY2x1ZGUgInBzLmgiCisjaW5jbHVkZSAiZWZ1c2UuaCIKKworc3RhdGljIGNvbnN0IHUxNiBwY2licmlkZ2VfdmVuZG9yc1tQQ0lfQlJJREdFX1ZFTkRPUl9NQVhdID0geworCUlOVEVMX1ZFTkRPUl9JRCwKKwlBVElfVkVORE9SX0lELAorCUFNRF9WRU5ET1JfSUQsCisJU0lTX1ZFTkRPUl9JRAorfTsKKworc3RhdGljIGNvbnN0IHU4IGFjX3RvX2h3cVtdID0geworCVZPX1FVRVVFLAorCVZJX1FVRVVFLAorCUJFX1FVRVVFLAorCUJLX1FVRVVFCit9OworCitzdGF0aWMgdTggX3J0bF9tYWNfdG9faHdxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisJdTggcXVldWVfaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKworCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkpCisJCXJldHVybiBCRUFDT05fUVVFVUU7CisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fCBpZWVlODAyMTFfaXNfY3RsKGZjKSkKKwkJcmV0dXJuIE1HTlRfUVVFVUU7CisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkKKwkJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykpCisJCQlyZXR1cm4gSElHSF9RVUVVRTsKKworCXJldHVybiBhY190b19od3FbcXVldWVfaW5kZXhdOworfQorCisvKiBVcGRhdGUgUENJIGRlcGVuZGVudCBkZWZhdWx0IHNldHRpbmdzKi8KK3N0YXRpYyB2b2lkIF9ydGxfcGNpX3VwZGF0ZV9kZWZhdWx0X3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1OCBwY2licmlkZ2VfdmVuZG9yID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3I7CisJdTggaW5pdF9hc3BtOworCisJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgPSAwOworCXBwc2MtPmJfc3VwcG9ydF9hc3BtID0gMDsKKworCS8qVXBkYXRlIFBDSSBBU1BNIHNldHRpbmcgKi8KKwlwcHNjLT5jb25zdF9hbWRwY2lfYXNwbSA9IHJ0bHBjaS0+Y29uc3RfYW1kcGNpX2FzcG07CisJc3dpdGNoIChydGxwY2ktPmNvbnN0X3BjaV9hc3BtKSB7CisJY2FzZSAwOgorCQkvKk5vIEFTUE0gKi8KKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCS8qQVNQTSBkeW5hbWljYWxseSBlbmFibGVkL2Rpc2FibGUuICovCisJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IFJUX1JGX0xQU19MRVZFTF9BU1BNOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJLypBU1BNIHdpdGggQ2xvY2sgUmVxIGR5bmFtaWNhbGx5IGVuYWJsZWQvZGlzYWJsZS4gKi8KKwkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gKFJUX1JGX0xQU19MRVZFTF9BU1BNIHwKKwkJCQkJIFJUX1JGX09GRl9MRVZMX0NMS19SRVEpOworCQlicmVhazsKKworCWNhc2UgMzoKKwkJLyoKKwkJICogQWx3YXlzIGVuYWJsZSBBU1BNIGFuZCBDbG9jayBSZXEKKwkJICogZnJvbSBpbml0aWFsaXphdGlvbiB0byBoYWx0LgorCQkgKiAqLworCQlwcHNjLT5yZWdfcmZwc19sZXZlbCAmPSB+KFJUX1JGX0xQU19MRVZFTF9BU1BNKTsKKwkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gKFJUX1JGX1BTX0xFVkVMX0FMV0FZU19BU1BNIHwKKwkJCQkJIFJUX1JGX09GRl9MRVZMX0NMS19SRVEpOworCQlicmVhazsKKworCWNhc2UgNDoKKwkJLyoKKwkJICogQWx3YXlzIGVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxCisJCSAqIGZyb20gaW5pdGlhbGl6YXRpb24gdG8gaGFsdC4KKwkJICogKi8KKwkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgJj0gfihSVF9SRl9MUFNfTEVWRUxfQVNQTSB8CisJCQkJCSAgUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUSk7CisJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IFJUX1JGX1BTX0xFVkVMX0FMV0FZU19BU1BNOworCQlicmVhazsKKwl9CisKKwlwcHNjLT5yZWdfcmZwc19sZXZlbCB8PSBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQzsKKworCS8qVXBkYXRlIFJhZGlvIE9GRiBzZXR0aW5nICovCisJc3dpdGNoIChydGxwY2ktPmNvbnN0X2h3c3dfcmZvZmZfZDMpIHsKKwljYXNlIDE6CisJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX0xQU19MRVZFTF9BU1BNKQorCQkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfQVNQTTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX0xQU19MRVZFTF9BU1BNKQorCQkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfQVNQTTsKKwkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUM7CisJCWJyZWFrOworCisJY2FzZSAzOgorCQlwcHNjLT5yZWdfcmZwc19sZXZlbCB8PSBSVF9SRl9PRkZfTEVWTF9QQ0lfRDM7CisJCWJyZWFrOworCX0KKworCS8qU2V0IEhXIGRlZmluaXRpb24gdG8gZGV0ZXJtaW5lIGlmIGl0IHN1cHBvcnRzIEFTUE0uICovCisJc3dpdGNoIChydGxwY2ktPmNvbnN0X3N1cHBvcnRfcGNpYXNwbSkgeworCWNhc2UgMDp7CisJCQkvKk5vdCBzdXBwb3J0IEFTUE0uICovCisJCQlib29sIGJfc3VwcG9ydF9hc3BtID0gZmFsc2U7CisJCQlwcHNjLT5iX3N1cHBvcnRfYXNwbSA9IGJfc3VwcG9ydF9hc3BtOworCQkJYnJlYWs7CisJCX0KKwljYXNlIDE6eworCQkJLypTdXBwb3J0IEFTUE0uICovCisJCQlib29sIGJfc3VwcG9ydF9hc3BtID0gdHJ1ZTsKKwkJCWJvb2wgYl9zdXBwb3J0X2JhY2tkb29yID0gdHJ1ZTsKKwkJCXBwc2MtPmJfc3VwcG9ydF9hc3BtID0gYl9zdXBwb3J0X2FzcG07CisKKwkJCS8qaWYgKHByaXYtPm9lbV9pZCA9PSBSVF9DSURfVE9TSElCQSAmJgorCQkJICAgIXByaXYtPm5kaXNfYWRhcHRlci5hbWRfbDFfcGF0Y2gpCisJCQkgICBiX3N1cHBvcnRfYmFja2Rvb3IgPSBmYWxzZTsgKi8KKworCQkJcHBzYy0+Yl9zdXBwb3J0X2JhY2tkb29yID0gYl9zdXBwb3J0X2JhY2tkb29yOworCisJCQlicmVhazsKKwkJfQorCWNhc2UgMjoKKwkJLypBU1BNIHZhbHVlIHNldCBieSBjaGlwc2V0LiAqLworCQlpZiAocGNpYnJpZGdlX3ZlbmRvciA9PSBQQ0lfQlJJREdFX1ZFTkRPUl9JTlRFTCkgeworCQkJYm9vbCBiX3N1cHBvcnRfYXNwbSA9IHRydWU7CisJCQlwcHNjLT5iX3N1cHBvcnRfYXNwbSA9IGJfc3VwcG9ydF9hc3BtOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisKKwkvKiB0b3NoaWJhIGFzcG0gaXNzdWUsIHRvc2hpYmEgd2lsbCBzZXQgYXNwbSBzZWxmbHkKKwkgKiBzbyB3ZSBzaG91bGQgbm90IHNldCBhc3BtIGluIGRyaXZlciAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgJmluaXRfYXNwbSk7CisJaWYgKHJ0bHByaXYtPnJ0bGhhbC5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFICYmCisJICAgIGluaXRfYXNwbSA9PSAweDQzKQorCQlwcHNjLT5iX3N1cHBvcnRfYXNwbSA9IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBfcnRsX3BjaV9wbGF0Zm9ybV9zd2l0Y2hfZGV2aWNlX3BjaV9hc3BtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkJICAgICB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBicmVzdWx0ID0gZmFsc2U7CisKKwlpZiAocnRsaGFsLT5od190eXBlICE9IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKQorCQl2YWx1ZSB8PSAweDQwOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgdmFsdWUpOworCisJcmV0dXJuIGJyZXN1bHQ7Cit9CisKKy8qV2hlbiB3ZSBzZXQgMHgwMSB0byBlbmFibGUgY2xrIHJlcXVlc3QuIFNldCAweDAgdG8gZGlzYWJsZSBjbGsgcmVxLiovCitzdGF0aWMgYm9vbCBfcnRsX3BjaV9zd2l0Y2hfY2xrX3JlcShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFsdWUpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWJvb2wgYnJlc3VsdCA9IGZhbHNlOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MSwgdmFsdWUpOworCWJyZXN1bHQgPSB0cnVlOworCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkKKwkJdWRlbGF5KDEwMCk7CisKKwlyZXR1cm4gYnJlc3VsdDsKK30KKworLypEaXNhYmxlIFJUTDgxOTJTRSBBU1BNICYgRGlzYWJsZSBQY2kgQnJpZGdlIEFTUE0qLworc3RhdGljIHZvaWQgcnRsX3BjaV9kaXNhYmxlX2FzcG0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1OCBwY2licmlkZ2VfdmVuZG9yID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3I7CisJdTMyIHBjaWNmZ19hZGRycG9ydCA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2ljZmdfYWRkcnBvcnQ7CisJdTggbnVtNGJ5dGVzID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLm51bTRieXRlczsKKwkvKlJldHJpZXZlIG9yaWdpbmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuICovCisJdTggbGlua2N0cmxfcmVnID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLmxpbmtjdHJsX3JlZzsKKwl1MTYgcGNpYnJpZGdlX2xpbmtjdHJscmVnID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLgorCQkJCXBjaWJyaWRnZV9saW5rY3RybHJlZzsKKwl1MTYgYXNwbWxldmVsID0gMDsKKworCWlmICghcHBzYy0+Yl9zdXBwb3J0X2FzcG0pCisJCXJldHVybjsKKworCWlmIChwY2licmlkZ2VfdmVuZG9yID09IFBDSV9CUklER0VfVkVORE9SX1VOS05PV04pIHsKKwkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICgiUENJKEJyaWRnZSkgVU5LTk9XTi5cbiIpKTsKKworCQlyZXR1cm47CisJfQorCisJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUSkgeworCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKTsKKwkJX3J0bF9wY2lfc3dpdGNoX2Nsa19yZXEoaHcsIDB4MCk7CisJfQorCisJaWYgKDEpIHsKKwkJLypmb3IgcHJvbWlzaW5nIGRldmljZSB3aWxsIGluIEwwIHN0YXRlIGFmdGVyIGFuIEkvTy4gKi8KKwkJdTggdG1wX3UxYjsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocnRscGNpLT5wZGV2LCAweDgwLCAmdG1wX3UxYik7CisJfQorCisJLypTZXQgY29ycmVzcG9uZGluZyB2YWx1ZS4gKi8KKwlhc3BtbGV2ZWwgfD0gQklUKDApIHwgQklUKDEpOworCWxpbmtjdHJsX3JlZyAmPSB+YXNwbWxldmVsOworCXBjaWJyaWRnZV9saW5rY3RybHJlZyAmPSB+KEJJVCgwKSB8IEJJVCgxKSk7CisKKwlfcnRsX3BjaV9wbGF0Zm9ybV9zd2l0Y2hfZGV2aWNlX3BjaV9hc3BtKGh3LCBsaW5rY3RybF9yZWcpOworCXVkZWxheSg1MCk7CisKKwkvKjQgRGlzYWJsZSBQY2kgQnJpZGdlIEFTUE0gKi8KKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsCisJCQkJICAgICBwY2ljZmdfYWRkcnBvcnQgKyAobnVtNGJ5dGVzIDw8IDIpKTsKKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3VjaGFyKFBDSV9DT05GX0RBVEEsIHBjaWJyaWRnZV9saW5rY3RybHJlZyk7CisKKwl1ZGVsYXkoNTApOworfQorCisvKgorICpFbmFibGUgUlRMODE5MlNFIEFTUE0gJiBFbmFibGUgUGNpIEJyaWRnZSBBU1BNIGZvcgorICpwb3dlciBzYXZpbmcgV2Ugc2hvdWxkIGZvbGxvdyB0aGUgc2VxdWVuY2UgdG8gZW5hYmxlCisgKlJUTDgxOTJTRSBmaXJzdCB0aGVuIGVuYWJsZSBQY2kgQnJpZGdlIEFTUE0KKyAqb3IgdGhlIHN5c3RlbSB3aWxsIHNob3cgYmx1ZXNjcmVlbi4KKyAqLworc3RhdGljIHZvaWQgcnRsX3BjaV9lbmFibGVfYXNwbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXU4IHBjaWJyaWRnZV92ZW5kb3IgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcjsKKwl1MzIgcGNpY2ZnX2FkZHJwb3J0ID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWNmZ19hZGRycG9ydDsKKwl1OCBudW00Ynl0ZXMgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIubnVtNGJ5dGVzOworCXUxNiBhc3BtbGV2ZWw7CisJdTggdV9wY2licmlkZ2VfYXNwbXNldHRpbmc7CisJdTggdV9kZXZpY2VfYXNwbXNldHRpbmc7CisKKwlpZiAoIXBwc2MtPmJfc3VwcG9ydF9hc3BtKQorCQlyZXR1cm47CisKKwlpZiAocGNpYnJpZGdlX3ZlbmRvciA9PSBQQ0lfQlJJREdFX1ZFTkRPUl9VTktOT1dOKSB7CisJCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19UUkFDRSwKKwkJCSAoIlBDSShCcmlkZ2UpIFVOS05PV04uXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvKjQgRW5hYmxlIFBjaSBCcmlkZ2UgQVNQTSAqLworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUywKKwkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00Ynl0ZXMgPDwgMikpOworCisJdV9wY2licmlkZ2VfYXNwbXNldHRpbmcgPQorCSAgICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2xpbmtjdHJscmVnIHwKKwkgICAgcnRscGNpLT5jb25zdF9ob3N0cGNpX2FzcG1fc2V0dGluZzsKKworCWlmIChwY2licmlkZ2VfdmVuZG9yID09IFBDSV9CUklER0VfVkVORE9SX0lOVEVMKQorCQl1X3BjaWJyaWRnZV9hc3Btc2V0dGluZyAmPSB+QklUKDApOworCisJcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91Y2hhcihQQ0lfQ09ORl9EQVRBLCB1X3BjaWJyaWRnZV9hc3Btc2V0dGluZyk7CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkgKCJQbGF0Zm9ybUVuYWJsZUFTUE0oKTogV3JpdGUgcmVnWyV4XSA9ICV4XG4iLAorCQkgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ICsgMHgxMCksCisJCSAgdV9wY2licmlkZ2VfYXNwbXNldHRpbmcpKTsKKworCXVkZWxheSg1MCk7CisKKwkvKkdldCBBU1BNIGxldmVsICh3aXRoL3dpdGhvdXQgQ2xvY2sgUmVxKSAqLworCWFzcG1sZXZlbCA9IHJ0bHBjaS0+Y29uc3RfZGV2aWNlcGNpX2FzcG1fc2V0dGluZzsKKwl1X2RldmljZV9hc3Btc2V0dGluZyA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5saW5rY3RybF9yZWc7CisKKwkvKl9ydGxfcGNpX3BsYXRmb3JtX3N3aXRjaF9kZXZpY2VfcGNpX2FzcG0oZGV2LCovCisJLyoocHJpdi0+bmRpc19hZGFwdGVyLmxpbmtjdHJsX3JlZyB8IEFTUE1MZXZlbCkpOyAqLworCisJdV9kZXZpY2VfYXNwbXNldHRpbmcgfD0gYXNwbWxldmVsOworCisJX3J0bF9wY2lfcGxhdGZvcm1fc3dpdGNoX2RldmljZV9wY2lfYXNwbShodywgdV9kZXZpY2VfYXNwbXNldHRpbmcpOworCisJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUSkgeworCQlfcnRsX3BjaV9zd2l0Y2hfY2xrX3JlcShodywgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYKKwkJCQkJICAgICBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKSA/IDEgOiAwKTsKKwkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0NMS19SRVEpOworCX0KKwl1ZGVsYXkoMTAwKTsKK30KKworc3RhdGljIGJvb2wgcnRsX3BjaV9nZXRfYW1kX2wxX3BhdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJdTMyIHBjaWNmZ19hZGRycG9ydCA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2ljZmdfYWRkcnBvcnQ7CisKKwlib29sIHN0YXR1cyA9IGZhbHNlOworCXU4IG9mZnNldF9lMDsKKwl1bnNpZ25lZCBvZmZzZXRfZTQ7CisKKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsIHBjaWNmZ19hZGRycG9ydCArIDB4RTApOworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWNoYXIoUENJX0NPTkZfREFUQSwgMHhBMCk7CisKKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsIHBjaWNmZ19hZGRycG9ydCArIDB4RTApOworCXJ0bF9wY2lfcmF3X3JlYWRfcG9ydF91Y2hhcihQQ0lfQ09ORl9EQVRBLCAmb2Zmc2V0X2UwKTsKKworCWlmIChvZmZzZXRfZTAgPT0gMHhBMCkgeworCQlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsCisJCQkJCSAgICAgcGNpY2ZnX2FkZHJwb3J0ICsgMHhFNCk7CisJCXJ0bF9wY2lfcmF3X3JlYWRfcG9ydF91bG9uZyhQQ0lfQ09ORl9EQVRBLCAmb2Zmc2V0X2U0KTsKKwkJaWYgKG9mZnNldF9lNCAmIEJJVCgyMykpCisJCQlzdGF0dXMgPSB0cnVlOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBib29sIHJ0bF9wY2lfY2hlY2tfYnVkZHlfcHJpdihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBydGxfcHJpdiAqKmJ1ZGR5X3ByaXYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJYm9vbCBmaW5kX2J1ZGR5X3ByaXYgPSBmYWxzZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnRwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICp0cGNpcHJpdiA9IE5VTEw7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJ0bHByaXYtPmdsYl92YXItPmdsYl9wcml2X2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHByaXYsICZydGxwcml2LT5nbGJfdmFyLT5nbGJfcHJpdl9saXN0LAorCQkJCSAgICBsaXN0KSB7CisJCQlpZiAodHByaXYgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJdHBjaXByaXYgPSAoc3RydWN0IHJ0bF9wY2lfcHJpdiAqKXRwcml2LT5wcml2OworCQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCQkgKCJwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZnVuY251bWJlciAleFxuIiwKKwkJCQkgIHBjaXByaXYtPm5kaXNfYWRhcHRlci5mdW5jbnVtYmVyKSk7CisJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJCSAoInRwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZnVuY251bWJlciAleFxuIiwKKwkJCQkgIHRwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZnVuY251bWJlcikpOworCisJCQlpZiAoKHBjaXByaXYtPm5kaXNfYWRhcHRlci5idXNudW1iZXIgPT0KKwkJCSAgICAgdHBjaXByaXYtPm5kaXNfYWRhcHRlci5idXNudW1iZXIpICYmCisJCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5kZXZudW1iZXIgPT0KKwkJCSAgICAgdHBjaXByaXYtPm5kaXNfYWRhcHRlci5kZXZudW1iZXIpICYmCisJCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5mdW5jbnVtYmVyICE9CisJCQkgICAgIHRwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZnVuY251bWJlcikpIHsKKwkJCQlmaW5kX2J1ZGR5X3ByaXYgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiZmluZF9idWRkeV9wcml2ICVkXG4iLCBmaW5kX2J1ZGR5X3ByaXYpKTsKKworCWlmIChmaW5kX2J1ZGR5X3ByaXYpCisJCSpidWRkeV9wcml2ID0gdHByaXY7CisKKwlyZXR1cm4gZmluZF9idWRkeV9wcml2OworfQorCitzdGF0aWMgdm9pZCBydGxfcGNpX2dldF9saW5rY29udHJvbF9maWVsZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXU4IGNhcGFiaWxpdHlvZmZzZXQgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0OworCXUzMiBwY2ljZmdfYWRkcnBvcnQgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpY2ZnX2FkZHJwb3J0OworCXU4IGxpbmtjdHJsX3JlZzsKKwl1OCBudW00YmJ5dGVzOworCisJbnVtNGJieXRlcyA9IChjYXBhYmlsaXR5b2Zmc2V0ICsgMHgxMCkgLyA0OworCisJLypSZWFkICBMaW5rIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsCisJCQkJICAgICBwY2ljZmdfYWRkcnBvcnQgKyAobnVtNGJieXRlcyA8PCAyKSk7CisJcnRsX3BjaV9yYXdfcmVhZF9wb3J0X3VjaGFyKFBDSV9DT05GX0RBVEEsICZsaW5rY3RybF9yZWcpOworCisJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9saW5rY3RybHJlZyA9IGxpbmtjdHJsX3JlZzsKK30KKworc3RhdGljIHZvaWQgcnRsX3BjaV9wYXJzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKworCXU4IHRtcDsKKwlpbnQgcG9zOworCXU4IGxpbmtjdHJsX3JlZzsKKworCS8qTGluayBDb250cm9sIFJlZ2lzdGVyICovCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwsICZsaW5rY3RybF9yZWcpOworCXBjaXByaXYtPm5kaXNfYWRhcHRlci5saW5rY3RybF9yZWcgPSBsaW5rY3RybF9yZWc7CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJICgiTGluayBDb250cm9sIFJlZ2lzdGVyID0leFxuIiwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIubGlua2N0cmxfcmVnKSk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDk4LCAmdG1wKTsKKwl0bXAgfD0gQklUKDQpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDk4LCB0bXApOworCisJdG1wID0gMHgxNzsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg3MGYsIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9wY2lfaW5pdF9hc3BtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJX3J0bF9wY2lfdXBkYXRlX2RlZmF1bHRfc2V0dGluZyhodyk7CisKKwlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9QU19MRVZFTF9BTFdBWVNfQVNQTSkgeworCQkvKkFsd2F5cyBlbmFibGUgQVNQTSAmIENsb2NrIFJlcS4gKi8KKwkJcnRsX3BjaV9lbmFibGVfYXNwbShodyk7CisJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9QU19MRVZFTF9BTFdBWVNfQVNQTSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsX3BjaV9pb19oYW5kbGVyX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+aW8uZGV2ID0gZGV2OworCisJcnRscHJpdi0+aW8ud3JpdGU4X2FzeW5jID0gcGNpX3dyaXRlOF9hc3luYzsKKwlydGxwcml2LT5pby53cml0ZTE2X2FzeW5jID0gcGNpX3dyaXRlMTZfYXN5bmM7CisJcnRscHJpdi0+aW8ud3JpdGUzMl9hc3luYyA9IHBjaV93cml0ZTMyX2FzeW5jOworCisJcnRscHJpdi0+aW8ucmVhZDhfc3luYyA9IHBjaV9yZWFkOF9zeW5jOworCXJ0bHByaXYtPmlvLnJlYWQxNl9zeW5jID0gcGNpX3JlYWQxNl9zeW5jOworCXJ0bHByaXYtPmlvLnJlYWQzMl9zeW5jID0gcGNpX3JlYWQzMl9zeW5jOworfQorCitzdGF0aWMgYm9vbCBfcnRsX3BjaV91cGRhdGVfZWFybHltb2RlX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjLAorCQkJCQkgICB1OCB0aWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpuZXh0X3NrYjsKKwl1OCBhZGRpdGlvbmxlbiA9IEZDU19MRU47CisKKwkvKiBoZXJlIG9wZW4gaXMgNCwgd2VwL3RraXAgaXMgOCwgYWVzIGlzIDEyKi8KKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCisJCWFkZGl0aW9ubGVuICs9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuOworCisJLyogVGhlIG1vc3Qgc2tiIG51bSBpcyA2ICovCisJdGNiX2Rlc2MtPmVtcGt0X251bSA9IDA7CisJc3Bpbl9sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy53YWl0cV9sb2NrKTsKKwlza2JfcXVldWVfd2FsaygmcnRscHJpdi0+bWFjODAyMTEuc2tiX3dhaXRxW3RpZF0sIG5leHRfc2tiKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmV4dF9pbmZvOworCisJCW5leHRfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IobmV4dF9za2IpOworCQlpZiAobmV4dF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJCXRjYl9kZXNjLT5lbXBrdF9sZW5bdGNiX2Rlc2MtPmVtcGt0X251bV0gPQorCQkJCW5leHRfc2tiLT5sZW4gKyBhZGRpdGlvbmxlbjsKKwkJCXRjYl9kZXNjLT5lbXBrdF9udW0rKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KCZydGxwcml2LT5tYWM4MDIxMS5za2Jfd2FpdHFbdGlkXSwKKwkJCQkgICAgICBuZXh0X3NrYikpCisJCQlicmVhazsKKworCQlpZiAodGNiX2Rlc2MtPmVtcGt0X251bSA+PSBydGxoYWwtPm1heF9lYXJseW1vZGVfbnVtKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy53YWl0cV9sb2NrKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoganVzdCBmb3IgZWFybHkgbW9kZSBub3cgKi8KK3N0YXRpYyB2b2lkIF9ydGxfcGNpX3R4X2Noa193YWl0cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gTlVMTDsKKwlpbnQgdGlkOyAvKiBzaG91bGQgYmUgaW50ICovCisKKwlpZiAoIXJ0bHByaXYtPnJ0bGhhbC5iX2Vhcmx5bW9kZV9lbmFibGUpCisJCXJldHVybjsKKwlpZiAocnRscHJpdi0+ZG0uc3VwcF9waHltb2RlX3N3aXRjaCAmJgorCSAgICAocnRscHJpdi0+ZWFzeV9jb25jdXJyZW50X2N0bC5ic3dpdGNoX2luX3Byb2Nlc3MgfHwKKwkgICAgKHJ0bHByaXYtPmJ1ZGR5X3ByaXYgJiYKKwkgICAgIHJ0bHByaXYtPmJ1ZGR5X3ByaXYtPmVhc3lfY29uY3VycmVudF9jdGwuYnN3aXRjaF9pbl9wcm9jZXNzKSkpCisJCXJldHVybjsKKwkvKiB3ZSBqdXNlIHVzZSBlbSBmb3IgQkUvQksvVkkvVk8gKi8KKwlmb3IgKHRpZCA9IDc7IHRpZCA+PSAwOyB0aWQtLSkgeworCQl1OCBod19xdWV1ZSA9IGFjX3RvX2h3cVtydGw5MmVfdGlkX3RvX2FjKGh3LCB0aWQpXTsKKwkJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbaHdfcXVldWVdOworCQl3aGlsZSAoIW1hYy0+YWN0X3NjYW5uaW5nICYmCisJCSAgICAgICBydGxwcml2LT5wc2MucmZwd3Jfc3RhdGUgPT0gRVJGT04pIHsKKwkJCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CisJCQltZW1zZXQoJnRjYl9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHJ0bF90Y2JfZGVzYykpOworCisJCQlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJm1hYy0+c2tiX3dhaXRxW3RpZF0pICYmCisJCQkgICAgKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPgorCQkJICAgICBydGxoYWwtPm1heF9lYXJseW1vZGVfbnVtKSkgeworCQkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZtYWMtPnNrYl93YWl0cVt0aWRdKTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCQkJCWJyZWFrOworCQkJfQorCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCisJCQkvKiBTb21lIG1hY2FkZHIgY2FuJ3QgZG8gZWFybHkgbW9kZS4gbGlrZQorCQkJICogbXVsdGljYXN0L2Jyb2FkY2FzdC9ub19xb3MgZGF0YSAqLworCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQkJX3J0bF9wY2lfdXBkYXRlX2Vhcmx5bW9kZV9pbmZvKGh3LCBza2IsCisJCQkJCQkJICAgICAgICZ0Y2JfZGVzYywgdGlkKTsKKworCQkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIE5VTEwsIHNrYiwgJnRjYl9kZXNjKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfdHhfaXNyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcHJpbykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1twcmlvXTsKKworCXdoaWxlIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCQlfX2xlMTYgZmM7CisJCXU4IHRpZDsKKwkJdTggKmVudHJ5OworCisKKwkJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpCisJCQllbnRyeSA9ICh1OCAqKSgmcmluZy0+YnVmZmVyX2Rlc2NbcmluZy0+aWR4XSk7CisJCWVsc2UKKwkJCWVudHJ5ID0gKHU4ICopKCZyaW5nLT5kZXNjW3JpbmctPmlkeF0pOworCisJCWlmIChydGxwcml2LT5jZmctPm9wcy0+aXNfdHhfZGVzY19jbG9zZWQgJiYKKwkJICAgICFydGxwcml2LT5jZmctPm9wcy0+aXNfdHhfZGVzY19jbG9zZWQoaHcsIHByaW8sIHJpbmctPmlkeCkpCisJCQlyZXR1cm47CisKKwkJcmluZy0+aWR4ID0gKHJpbmctPmlkeCArIDEpICUgcmluZy0+ZW50cmllczsKKworCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CisKKwkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCisJCQkJIHJ0bHByaXYtPmNmZy0+b3BzLT4KKwkJCQkJICAgICBnZXRfZGVzYygodTggKillbnRyeSwgdHJ1ZSwKKwkJCQkJCSAgICAgIEhXX0RFU0NfVFhCVUZGX0FERFIpLAorCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJLyogcmVtb3ZlIGVhcmx5IG1vZGUgaGVhZGVyICovCisJCWlmIChydGxwcml2LT5ydGxoYWwuYl9lYXJseW1vZGVfZW5hYmxlKQorCQkJc2tiX3B1bGwoc2tiLCBFTV9IRFJfTEVOKTsKKworCQlSVF9UUkFDRSgoQ09NUF9JTlRSIHwgQ09NUF9TRU5EKSwgREJHX1RSQUNFLAorCQkJICgibmV3IHJpbmctPmlkeDolZCwgZnJlZTogc2tiX3F1ZXVlX2xlbjolZCwgZnJlZTogc2VxOiVkXG4iLAorCQkJICByaW5nLT5pZHgsCisJCQkgIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSwKKwkJCSAgKih1MTYgKikoc2tiLT5kYXRhICsgMjIpKSk7CisKKwkJaWYgKHByaW8gPT0gVFhDTURfUVVFVUUpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gdHhfc3RhdHVzX29rOworCQl9CisKKwkJLyogZm9yIHN3IExQUywganVzdCBhZnRlciBOVUxMIHNrYiBzZW5kIG91dCwgd2UgY2FuCisJCSAqIHN1cmUgQVAga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcsIG91ciB3ZSBzaG91bGQgbm90IGxldAorCQkgKiByZiB0byBzbGVlcAorCQkgKi8KKwkJZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisJCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpKSB7CisJCQlpZiAoaWVlZTgwMjExX2hhc19wbShmYykpIHsKKwkJCQlydGxwcml2LT5tYWM4MDIxMS5vZmZjaGFuX2RlbGV5ID0gdHJ1ZTsKKwkJCQlydGxwcml2LT5wc2Muc3RhdGVfaW5hcCA9IDE7CisJCQl9IGVsc2UgeworCQkJCXJ0bHByaXYtPnBzYy5zdGF0ZV9pbmFwID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihmYykpIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdF9jb21wYXQgKmFjdGlvbl9mcmFtZSA9CisJCQkJKHN0cnVjdCBpZWVlODAyMTFfbWdtdF9jb21wYXQgKilza2ItPmRhdGE7CisJCQlpZiAoYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuYWN0aW9uID09CisJCQkJV0xBTl9IVF9BQ1RJT05fU01QUykgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlnb3RvIHR4X3N0YXR1c19vazsKKwkJCX0KKwkJfQorCisJCS8qIHVwZGF0ZSB0aWQgdHggcGt0IG51bSAqLworCQl0aWQgPSBydGxfZ2V0X3RpZChza2IpOworCQlpZiAodGlkIDw9IDcpCisJCQlydGxwcml2LT5saW5rX2luZm8udGlkdHhfaW5wZXJpb2RbdGlkXSsrOworCisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKKworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCS8qaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMTsgKi8KKworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisKKwkJaWYgKChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSA9PSAyKSB7CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0xPVUQsCisJCQkJICgibW9yZSBkZXNjIGxlZnQsIHdha2Ugc2tiX3F1ZXVlQCVkLHJpbmctPmlkeCA9ICVkLCBza2JfcXVldWVfbGVuID0gMHglZFxuIiwKKwkJCQkJIHByaW8sIHJpbmctPmlkeCwKKwkJCQkJIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOworCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nCisJCQkJCSAgICAgKHNrYikpOworCQl9Cit0eF9zdGF0dXNfb2s6CisJCXNrYiA9IE5VTEw7CisJfQorCisJaWYgKCgocnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCArCisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QpID4gOCkgfHwKKwkJKHJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW5wZXJpb2QgPiAyKSkgeworCQlydGw5MmVfbHBzX2xlYXZlKGh3KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1OCAqZW50cnksIGludCByeHJpbmdfaWR4LCBpbnQgZGVzY19pZHgpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgYnVmZmVyYWRkcmVzczsKKwl1OCB0bXBfb25lID0gMTsKKworCXNrYiA9IGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOworCWlmICghc2tiKQorCQlyZXR1cm4gMDsKKwlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0ucnhfYnVmW2Rlc2NfaWR4XSA9IHNrYjsKKworCS8qIGp1c3Qgc2V0IHNrYi0+Y2IgdG8gbWFwcGluZyBhZGRyCisJICogZm9yIHBjaV91bm1hcF9zaW5nbGUgdXNlCisJICovCisJKigoZG1hX2FkZHJfdCAqKXNrYi0+Y2IpID0gcGNpX21hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCXNrYl90YWlsX3BvaW50ZXIoc2tiKSwgcnRscGNpLT5yeGJ1ZmZlcnNpemUsCisJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwlidWZmZXJhZGRyZXNzID0gKigoZG1hX2FkZHJfdCAqKXNrYi0+Y2IpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocnRscGNpLT5wZGV2LCBidWZmZXJhZGRyZXNzKSkKKwkJcmV0dXJuIDA7CisJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKGh3LCAodTggKillbnRyeSwgZmFsc2UsCisJCQkJCSAgICBIV19ERVNDX1JYX1BSRVBBUkUsCisJCQkJCSAgICAodTggKikmYnVmZmVyYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKGh3LCAodTggKillbnRyeSwgZmFsc2UsCisJCQkJCSAgICBIV19ERVNDX1JYQlVGRl9BRERSLAorCQkJCQkgICAgKHU4ICopJmJ1ZmZlcmFkZHJlc3MpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoaHcsICh1OCAqKWVudHJ5LCBmYWxzZSwKKwkJCQkJICAgIEhXX0RFU0NfUlhQS1RfTEVOLAorCQkJCQkgICAgKHU4ICopJnJ0bHBjaS0+cnhidWZmZXJzaXplKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKGh3LCAodTggKillbnRyeSwgZmFsc2UsCisJCQkJCSAgICBIV19ERVNDX1JYT1dOLAorCQkJCQkgICAgKHU4ICopJnRtcF9vbmUpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyogaW5vcmRlciB0byByZWNlaXZlIDhLIEFNU0RVIHdlIGhhdmUgc2V0IHNrYiB0bworICogOTEwMGJ5dGVzIGluIGluaXQgcnggcmluZywgYnV0IGlmIHRoaXMgcGFja2V0IGlzCisgKiBub3QgYSBBTVNEVSwgdGhpcyBzbyBiaWcgcGFja2V0IHdpbGwgYmUgc2VudCB0bworICogVENQL0lQIGRpcmVjdGx5LCB0aGlzIGNhdXNlIGJpZyBwYWNrZXQgcGluZyBmYWlsCisgKiBsaWtlOiAicGluZyAtcyA2NTUwNyIsIHNvIGhlcmUgd2Ugd2lsbCByZWFsbG9jIHNrYgorICogYmFzZWQgb24gdGhlIHRydWUgc2l6ZSBvZiBwYWNrZXQsIEkgdGhpbmsgbWFjODAyMTEKKyAqIGRvIGl0IHdpbGwgYmUgYmV0dGVyLCBidXQgbm93IG1hYzgwMjExIGhhdmVuJ3QgKi8KKworLyogYnV0IHNvbWUgcGxhdGZvcm0gd2lsbCBmYWlsIHdoZW4gYWxsb2Mgc2tiIHNvbWV0aW1lcy4KKyAqIGluIHRoaXMgY29uZGl0aW9uLCB3ZSB3aWxsIHNlbmQgdGhlIG9sZCBza2IgdG8KKyAqIG1hYzgwMjExIGRpcmVjdGx5LCB0aGlzIHdpbGwgbm90IGNhdXNlIGFueSBvdGhlcgorICogaXNzdWVzLCBidXQgb25seSBiZSBsb3N0ZWQgYnkgVENQL0lQICovCitzdGF0aWMgdm9pZCBfcnRsX3BjaV9yeF90b19tYWM4MDIxMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzKQoreworCWlmICh1bmxpa2VseSghcnRsOTJlX2FjdGlvbl9wcm9jKGh3LCBza2IsIGZhbHNlKSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqdXNrYiA9IE5VTEw7CisJCXU4ICpwZGF0YTsKKworCQl1c2tiID0gZGV2X2FsbG9jX3NrYihza2ItPmxlbiArIDEyOCk7CisJCWlmIChsaWtlbHkodXNrYikpIHsKKwkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IodXNrYiksICZyeF9zdGF0dXMsCisJCQkgICAgICAgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQkJcGRhdGEgPSAodTggKilza2JfcHV0KHVza2IsIHNrYi0+bGVuKTsKKwkJCW1lbWNweShwZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgdXNrYik7CisJCX0gZWxzZSB7CisJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKKwkJfQorCX0KK30KKworLypoc2lzciBpbnRlcnJ1cHQgaGFuZGxlciovCitzdGF0aWMgdm9pZCBfcnRsX3BjaV9oc19pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbTUFDX0hTSVNSXSwKKwkJICAgICAgIHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19IU0lTUl0pIHwKKwkJICAgICAgIHJ0bHBjaS0+c3lzX2lycV9tYXNrKTsKK30KKworc3RhdGljIHZvaWQgX3J0bF9yZWNlaXZlX29uZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisJYm9vbCB1bmljYXN0ID0gZmFsc2U7CisKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgeworCQk7LypUT0RPKi8KKwl9IGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CisJCTsvKlRPRE8qLworCX0gZWxzZSB7CisJCXVuaWNhc3QgPSB0cnVlOworCQlydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdCArPSBza2ItPmxlbjsKKwl9CisKKwlydGw5MmVfaXNfc3BlY2lhbF9kYXRhKGh3LCBza2IsIGZhbHNlKTsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywgTEVEX0NUTF9SWCk7CisKKwkJaWYgKHVuaWNhc3QpCisJCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kKys7CisJfQorCisJLyogc3RhdGljIGJjbiBmb3Igcm9hbWluZyAqLworCXJ0bDkyZV9iZWFjb25fc3RhdGlzdGljKGh3LCBza2IpOworCXJ0bDkyZV9wMnBfaW5mbyhodywgKHZvaWQgKilza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCS8qIGZvciBzdyBscHMgKi8KKwlydGw5MmVfc3dscHNfYmVhY29uKGh3LCAodm9pZCAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXJ0bDkyZV9yZWNvZ25pemVfcGVlcihodywgKHZvaWQgKilza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlpZiAoKHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgJiYKKwkgICAgKHJ0bHByaXYtPnJ0bGhhbC5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykgJiYKKwkgICAgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpIHx8CisJICAgICBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpKQorCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWVsc2UKKwkJX3J0bF9wY2lfcnhfdG9fbWFjODAyMTEoaHcsIHNrYiwgcnhfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfcnhfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1cyA9IHsgMCB9OworCWludCByeHJpbmdfaWR4ID0gUlRMX1BDSV9SWF9NUERVX1FVRVVFOworCXVuc2lnbmVkIGludCBjb3VudCA9IHJ0bHBjaS0+cnhyaW5nY291bnQ7CisJdTggaHdfcXVldWUgPSAwOworCXVuc2lnbmVkIGludCByeF9yZW1haW5lZF9jbnQ7CisJdTggb3duOworCXU4IHRtcF9vbmU7CisJc3RhdGljIGludCBlcnJfY291bnQ7CisJc3RydWN0IHJ0bF9zdGF0cyBzdGF0cyA9IHsKKwkJLnNpZ25hbCA9IDAsCisJCS5yYXRlID0gMCwKKwl9OworCisJLypSWCBOT1JNQUwgUEtUICovCisJd2hpbGUgKGNvdW50LS0pIHsKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwkJX19sZTE2IGZjOworCQl1MTYgbGVuOworCQkvKnJ4IGJ1ZmZlciBkZXNjcmlwdG9yICovCisJCXN0cnVjdCBydGxfcnhfYnVmZmVyX2Rlc2MgKmJ1ZmZlcl9kZXNjID0gTlVMTDsKKwkJLyppZiB1c2UgbmV3IHRyeCBmbG93LCBpdCBtZWFucyB3aWZpIGluZm8gKi8KKwkJc3RydWN0IHJ0bF9yeF9kZXNjICpwZGVzYyA9IE5VTEw7CisJCS8qcnggcGt0ICovCisJCXN0cnVjdCBza19idWZmICpza2IgPSBydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0ucnhfYnVmWworCQkJCQlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uaWR4XTsKKworCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgeworCQkJcnhfcmVtYWluZWRfY250ID0KKwkJCQlydGxwcml2LT5jZmctPm9wcy0+cnhfZGVzY19idWZmX3JlbWFpbmVkX2NudChodywKKwkJCQkJCQkJICAgICAgaHdfcXVldWUpOworCQkJaWYgKHJ4X3JlbWFpbmVkX2NudCA8IDEpCisJCQkJcmV0dXJuOworCisJCX0gZWxzZSB7CS8qIHJ4IGRlc2NyaXB0b3IgKi8KKwkJCXBkZXNjID0gJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kZXNjWworCQkJCXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHhdOworCisJCQlvd24gPSAodTgpIHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfZGVzYygodTggKilwZGVzYywKKwkJCQkJCQkgICAgICAgZmFsc2UsCisJCQkJCQkJICAgICAgIEhXX0RFU0NfT1dOKTsKKwkJCWlmIChvd24pIC8qIHdhaXQgZGF0YSB0byBiZSBmaWxsZWQgYnkgaGFyZHdhcmUgKi8KKwkJCQlyZXR1cm47CisJCX0KKworCQkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIGRhdGEgaXMgZmlsbGVkIGFscmVhZHkKKwkJICogQXR0ZW50aW9uICEhIQorCQkgKiBXZSBjYW4gTk9UIGFjY2VzcyAnc2tiJyBiZWZvcmUgJ3BjaV91bm1hcF9zaW5nbGUnCisJCSAqLworCQlwY2lfdW5tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwgKigoZG1hX2FkZHJfdCAqKXNrYi0+Y2IpLAorCQkJCSBydGxwY2ktPnJ4YnVmZmVyc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgeworCQkJYnVmZmVyX2Rlc2MgPSAmcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmJ1ZmZlcl9kZXNjWworCQkJCXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHhdOworCQkJLyptZWFucyByeCB3aWZpIGluZm8qLworCQkJcGRlc2MgPSAoc3RydWN0IHJ0bF9yeF9kZXNjICopc2tiLT5kYXRhOworCQl9CisJCW1lbXNldCgmcnhfc3RhdHVzICwgMCAsIHNpemVvZihyeF9zdGF0dXMpKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnF1ZXJ5X3J4X2Rlc2MoaHcsICZzdGF0cywKKwkJCQkJCSAmcnhfc3RhdHVzLCAodTggKilwZGVzYywgc2tiKTsKKworCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5yeF9jaGVja19kbWFfb2soaHcsCisJCQkJCQkJICAgKHU4ICopYnVmZmVyX2Rlc2MsCisJCQkJCQkJICAgaHdfcXVldWUpOworCQlsZW4gPSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopcGRlc2MsIGZhbHNlLAorCQkJCQkJICBIV19ERVNDX1JYUEtUX0xFTik7CisKKwkJaWYgKHNrYi0+ZW5kIC0gc2tiLT50YWlsID4gbGVuKSB7CisJCQlza2JfcHV0KHNrYiwgbGVuKTsKKwkJCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KQorCQkJCXNrYl9yZXNlcnZlKHNrYiwgc3RhdHMucnhfZHJ2aW5mb19zaXplICsKKwkJCQkJCSBzdGF0cy5yeF9idWZzaGlmdCArIDI0KTsKKwkJCWVsc2UKKwkJCQlza2JfcmVzZXJ2ZShza2IsIHN0YXRzLnJ4X2RydmluZm9fc2l6ZSArCisJCQkJCQkgc3RhdHMucnhfYnVmc2hpZnQpOworCisJCX0gZWxzZSB7CisJCQlpZiAoZXJyX2NvdW50KysgPCAxMCkgeworCQkJCXByX2luZm8oInNrYi0+ZW5kICglZCkgLSBza2ItPnRhaWwgKCVkKSA+IGxlbiAoJWQpXG4iLAorCQkJCQlza2ItPmVuZCwgc2tiLT50YWlsLCBsZW4pOworCQkJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9DTUQsIERCR19FTUVSRywKKwkJCQkJICAgICAgIlJYIGRlc2NcbiIsCisJCQkJCSAgICAgICh1OCAqKXBkZXNjLCAzMik7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCS8qIGhhbmRsZSBjb21tYW5kIHBhY2tldCBoZXJlICovCisJCWlmIChydGxwcml2LT5jZmctPm9wcy0+cnhfY29tbWFuZF9wYWNrZXQoaHcsIHN0YXRzLCBza2IpKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlnb3RvIGVuZDsKKwkJfQorCisJCS8qIE5PVElDRSBUaGlzIGNhbiBub3QgYmUgdXNlIGZvciBtYWM4MDIxMSwKKwkJICp0aGlzIGlzIGRvbmUgaW4gbWFjODAyMTEgY29kZSwKKwkJICppZiB5b3UgZG9uZSBoZXJlIHNlYyBESENQIHdpbGwgZmFpbAorCQkgKnNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKKwkJICovCisKKwkJaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwkJZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisKKwkJaWYgKCFzdGF0cy5iX2NyYyAmJiAhc3RhdHMuYl9od2Vycm9yKQorCQkJX3J0bF9yZWNlaXZlX29uZShodywgc2tiLCByeF9zdGF0dXMpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgeworCQkJcnRscGNpLT5yeF9yaW5nW2h3X3F1ZXVlXS5uZXh0X3J4X3JwICs9IDE7CisJCQlydGxwY2ktPnJ4X3JpbmdbaHdfcXVldWVdLm5leHRfcnhfcnAgJT0KKwkJCQkJCQlSVExfUENJX01BWF9SWF9DT1VOVDsKKworCisJCQlyeF9yZW1haW5lZF9jbnQtLTsKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIDB4M0I0LAorCQkJCSAgICAgICBydGxwY2ktPnJ4X3JpbmdbaHdfcXVldWVdLm5leHRfcnhfcnApOworCQl9CisJCWlmICgoKHJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW5wZXJpb2QgKworCQkgICAgICBydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2lucGVyaW9kKSA+IDgpIHx8CisJCSAgICAocnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCA+IDIpKSB7CisJCQlydGw5MmVfbHBzX2xlYXZlKGh3KTsKKwkJfQorZW5kOgorCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgeworCQkJX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCAodTggKilidWZmZXJfZGVzYywKKwkJCQkJCSByeHJpbmdfaWR4LAorCQkJCQkgICAgICAgcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCk7CisJCX0gZWxzZSB7CisJCQlfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsICh1OCAqKXBkZXNjLCByeHJpbmdfaWR4LAorCQkJCQkJIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHgpOworCisJCQlpZiAocnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCA9PQorCQkJICAgIHJ0bHBjaS0+cnhyaW5nY291bnQgLSAxKQorCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopcGRlc2MsCisJCQkJCQkJICAgIGZhbHNlLAorCQkJCQkJCSAgICBIV19ERVNDX1JYRVJPLAorCQkJCQkJCSAgICAodTggKikmdG1wX29uZSk7CisJCX0KKwkJcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCA9CisJCQkJKHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHggKyAxKSAlCisJCQkJcnRscGNpLT5yeHJpbmdjb3VudDsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBfcnRsX3BjaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZGV2X2lkOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW50YSA9IDA7CisJdTMyIGludGIgPSAwOworCisJaWYgKHJ0bHBjaS0+aXJxX2VuYWJsZWQgPT0gMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrICwgZmxhZ3MpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbTUFDX0hJTVJdLCAweDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbTUFDX0hJTVJFXSwgMHgwKTsKKworCS8qcmVhZCBJU1I6IDQvOGJ5dGVzICovCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmludGVycnVwdF9yZWNvZ25pemVkKGh3LCAmaW50YSwgJmludGIpOworCisJLypTaGFyZWQgSVJRIG9yIEhXIGRpc2FwcGFyZWQgKi8KKwlpZiAoIWludGEgfHwgaW50YSA9PSAweGZmZmYpCisJCWdvdG8gZG9uZTsKKwkvKjwxPiBiZWFjb24gcmVsYXRlZCAqLworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVEJET0tdKQorCQlSVF9UUkFDRShDT01QX0lOVFIsIERCR19UUkFDRSwgKCJiZWFjb24gb2sgaW50ZXJydXB0IVxuIikpOworCisJaWYgKHVubGlrZWx5KGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9UQkRFUl0pKQorCQlSVF9UUkFDRShDT01QX0lOVFIsIERCR19UUkFDRSwgKCJiZWFjb24gZXJyIGludGVycnVwdCFcbiIpKTsKKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfQkRPS10pCisJCVJUX1RSQUNFKENPTVBfSU5UUiwgREJHX1RSQUNFLCAoImJlYWNvbiBpbnRlcnJ1cHQhXG4iKSk7CisKKwlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX0JjbkludF0pIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTlRSLCBEQkdfVFJBQ0UsCisJCQkgKCJwcmVwYXJlIGJlYWNvbiBmb3IgaW50ZXJydXB0IVxuIikpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZydGxwcml2LT53b3Jrcy5pcnFfcHJlcGFyZV9iY25fdGFza2xldCk7CisJfQorCisJLyo8Mj4gdHggcmVsYXRlZCAqLworCWlmICh1bmxpa2VseShpbnRiICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVFhGT1ZXXSkpCisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfVFJBQ0UsICgiSU1SX1RYRk9WVyFcbiIpKTsKKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfTUdOVERPS10pIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTlRSLCBEQkdfVFJBQ0UsICgiTWFuYWdlIG9rIGludGVycnVwdCFcbiIpKTsKKwkJX3J0bF9wY2lfdHhfaXNyKGh3LCBNR05UX1FVRVVFKTsKKwl9CisKKwlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX0hJR0hET0tdKSB7CisJCVJUX1RSQUNFKENPTVBfSU5UUiwgREJHX1RSQUNFLCAoIkhJR0hfUVVFVUUgb2sgaW50ZXJydXB0IVxuIikpOworCQlfcnRsX3BjaV90eF9pc3IoaHcsIEhJR0hfUVVFVUUpOworCX0KKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfQktET0tdKSB7CisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QrKzsKKworCQlSVF9UUkFDRShDT01QX0lOVFIsIERCR19UUkFDRSwgKCJCSyBUeCBPSyBpbnRlcnJ1cHQhXG4iKSk7CisJCV9ydGxfcGNpX3R4X2lzcihodywgQktfUVVFVUUpOworCX0KKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfQkVET0tdKSB7CisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QrKzsKKworCQlSVF9UUkFDRShDT01QX0lOVFIsIERCR19UUkFDRSwgKCJCRSBUWCBPSyBpbnRlcnJ1cHQhXG4iKSk7CisJCV9ydGxfcGNpX3R4X2lzcihodywgQkVfUVVFVUUpOworCX0KKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVklET0tdKSB7CisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QrKzsKKworCQlSVF9UUkFDRShDT01QX0lOVFIsIERCR19UUkFDRSwgKCJWSSBUWCBPSyBpbnRlcnJ1cHQhXG4iKSk7CisJCV9ydGxfcGNpX3R4X2lzcihodywgVklfUVVFVUUpOworCX0KKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVk9ET0tdKSB7CisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QrKzsKKworCQlSVF9UUkFDRShDT01QX0lOVFIsIERCR19UUkFDRSwgKCJWbyBUWCBPSyBpbnRlcnJ1cHQhXG4iKSk7CisJCV9ydGxfcGNpX3R4X2lzcihodywgVk9fUVVFVUUpOworCX0KKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0UpIHsKKwkJaWYgKGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9DT01ET0tdKSB7CisJCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2lucGVyaW9kKys7CisKKwkJCVJUX1RSQUNFKENPTVBfSU5UUiwgREJHX1RSQUNFLAorCQkJCSAoIkNNRCBUWCBPSyBpbnRlcnJ1cHQhXG4iKSk7CisJCQlfcnRsX3BjaV90eF9pc3IoaHcsIFRYQ01EX1FVRVVFKTsKKwkJfQorCX0KKworCS8qPDM+IHJ4IHJlbGF0ZWQgKi8KKwlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX1JPS10pIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTlRSLCBEQkdfVFJBQ0UsICgiUnggb2sgaW50ZXJydXB0IVxuIikpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOworCX0KKworCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfUkRVXSkpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgicnggZGVzY3JpcHRvciB1bmF2YWlsYWJsZSFcbiIpKTsKKwkJX3J0bF9wY2lfcnhfaW50ZXJydXB0KGh3KTsKKwl9CisKKwlpZiAodW5saWtlbHkoaW50YiAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX1JYRk9WV10pKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywgKCJyeCBvdmVyZmxvdyAhXG4iKSk7CisJCV9ydGxfcGNpX3J4X2ludGVycnVwdChodyk7CisJfQorCisJLyo8ND4gZncgcmVsYXRlZCovCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg3MjNBRSkgeworCQlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX0MySENNRF0pIHsKKwkJCVJUX1RSQUNFKENPTVBfSU5UUiwgREJHX1RSQUNFLAorCQkJCSAoImZpcm13YXJlIGludGVycnVwdCFcbiIpKTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhydGxwcml2LT53b3Jrcy5ydGxfd3EsCisJCQkJCSAgICZydGxwcml2LT53b3Jrcy5md2V2dF93cSwgMCk7CisJCX0KKwl9CisKKwkvKjw1PiBoc2lzciByZWxhdGVkKi8KKwkvKiBPbmx5IDgxODhFRSAmIDg3MjNCRSBTdXBwb3J0ZWQuCisJICogSWYgT3RoZXIgSUNzIENvbWUgaW4sIFN5c3RlbSB3aWxsIGNvcnJ1cHQsCisJICogYmVjYXVzZSBtYXBzW1JUTF9JTVJfSFNJU1JfSU5EXSAmIG1hcHNbTUFDX0hTSVNSXQorCSAqIGFyZSBub3QgaW5pdGlhbGl6ZWQqLworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTg4RUUgfHwKKwkgICAgcnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFKSB7CisJCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfSFNJU1JfSU5EXSkpIHsKKwkJCVJUX1RSQUNFKENPTVBfSU5UUiwgREJHX1RSQUNFLAorCQkJCSAoImhzaXNyIGludGVycnVwdCFcbiIpKTsKKwkJCV9ydGxfcGNpX2hzX2ludGVycnVwdChodyk7CisJCX0KKwl9CisKKworCWlmIChydGxwcml2LT5ydGxoYWwuYl9lYXJseW1vZGVfZW5hYmxlKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZydGxwcml2LT53b3Jrcy5pcnFfdGFza2xldCk7CisKK2RvbmU6CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfSElNUl0sCisJCQlydGxwY2ktPmlycV9tYXNrWzBdKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19ISU1SRV0sCisJCQlydGxwY2ktPmlycV9tYXNrWzFdKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfaXJxX3Rhc2tsZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJX3J0bF9wY2lfdHhfY2hrX3dhaXRxKGh3KTsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfcHJlcGFyZV9iY25fdGFza2xldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnBza2IgPSBOVUxMOworCXN0cnVjdCBydGxfdHhfZGVzYyAqcGRlc2MgPSBOVUxMOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CisJLypUaGlzIGlzIGZvciBuZXcgdHJ4IGZsb3cqLworCXN0cnVjdCBydGxfdHhfYnVmZmVyX2Rlc2MgKnBidWZmZXJfZGVzYyA9IE5VTEw7CisJdTggdGVtcF9vbmUgPSAxOworCisJbWVtc2V0KCZ0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKKwlyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1tCRUFDT05fUVVFVUVdOworCXBza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CisJaWYgKHBza2IpCisJCWtmcmVlX3NrYihwc2tiKTsKKworCS8qTkI6IHRoZSBiZWFjb24gZGF0YSBidWZmZXIgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4gKi8KKwlwc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIG1hYy0+dmlmKTsKKwlpZiAocHNrYiA9PSBOVUxMKQorCQlyZXR1cm47CisJaGRyID0gcnRsX2dldF9oZHIocHNrYik7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHNrYik7CisJcGRlc2MgPSAmcmluZy0+ZGVzY1swXTsKKwlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykKKwkJcGJ1ZmZlcl9kZXNjID0gJnJpbmctPmJ1ZmZlcl9kZXNjWzBdOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKilwZGVzYywKKwkJCQkJKHU4ICopcGJ1ZmZlcl9kZXNjLCBpbmZvLCBOVUxMLCBwc2tiLAorCQkJCQlCRUFDT05fUVVFVUUsICZ0Y2JfZGVzYyk7CisKKwlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgcHNrYik7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoaHcsICh1OCAqKXBkZXNjLCB0cnVlLCBIV19ERVNDX09XTiwKKwkJCQkgICAgKHU4ICopJnRlbXBfb25lKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfaW5pdF90cnhfdmFyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXU4IGk7CisJdTE2IGRlc2NfbnVtOworCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJFRSkKKwkJZGVzY19udW0gPSBUWF9ERVNDX05VTV85MkU7CisJZWxzZQorCQlkZXNjX251bSA9IFJUX1RYREVTQ19OVU07CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7IGkrKykKKwkJcnRscGNpLT50eHJpbmdjb3VudFtpXSA9IGRlc2NfbnVtOworCS8qCisJICp3ZSBqdXN0IGFsbG9jIDIgZGVzYyBmb3IgYmVhY29uIHF1ZXVlLAorCSAqYmVjYXVzZSB3ZSBqdXN0IG5lZWQgZmlyc3QgZGVzYyBpbiBodyBiZWFjb24uCisJICovCisJcnRscGNpLT50eHJpbmdjb3VudFtCRUFDT05fUVVFVUVdID0gMjsKKworCS8qCisJICpCRSBxdWV1ZSBuZWVkIG1vcmUgZGVzY3JpcHRvciBmb3IgcGVyZm9ybWFuY2UKKwkgKmNvbnNpZGVyYXRpb24gb3IsIE5vIG1vcmUgdHggZGVzYyB3aWxsIGhhcHBlbiwKKwkgKmFuZCBtYXkgY2F1c2UgbWFjODAyMTEgbWVtIGxlYWthZ2UuCisJICovCisJaWYgKCFydGxfcHJpdihodyktPnVzZV9uZXdfdHJ4X2Zsb3cpCisJCXJ0bHBjaS0+dHhyaW5nY291bnRbQkVfUVVFVUVdID0gUlRfVFhERVNDX05VTV9CRV9RVUVVRTsKKworCXJ0bHBjaS0+cnhidWZmZXJzaXplID0gOTEwMDsJLyoyMDQ4LzEwMjQ7ICovCisJcnRscGNpLT5yeHJpbmdjb3VudCA9IFJUTF9QQ0lfTUFYX1JYX0NPVU5UOwkvKjY0OyAqLworfQorCitzdGF0aWMgdm9pZCBfcnRsX3BjaV9pbml0X3N0cnVjdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCisJcnRscHJpdi0+cnRsaGFsLnVwX2ZpcnN0X3RpbWUgPSB0cnVlOworCXJ0bHByaXYtPnJ0bGhhbC5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKKworCXJ0bGhhbC0+aHcgPSBodzsKKwlydGxwY2ktPnBkZXYgPSBwZGV2OworCisJLypUeC9SeCByZWxhdGVkIHZhciAqLworCV9ydGxfcGNpX2luaXRfdHJ4X3Zhcihodyk7CisKKwkvKklCU1MqLyBtYWMtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKKworCS8qQU1QRFUqLworCW1hYy0+bWluX3NwYWNlX2NmZyA9IDA7CisJbWFjLT5tYXhfbXNzX2RlbnNpdHkgPSAwOworCS8qc2V0IHNhbmUgQU1QRFUgZGVmYXVsdHMgKi8KKwltYWMtPmN1cnJlbnRfYW1wZHVfZGVuc2l0eSA9IDc7CisJbWFjLT5jdXJyZW50X2FtcGR1X2ZhY3RvciA9IDM7CisKKwkvKlFPUyovCisJcnRscGNpLT5hY21fbWV0aG9kID0gZUFjbVdheTJfU1c7CisKKwkvKnRhc2sgKi8KKwl0YXNrbGV0X2luaXQoJnJ0bHByaXYtPndvcmtzLmlycV90YXNrbGV0LAorCQkgICAgICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlfcnRsX3BjaV9pcnFfdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9pbml0KCZydGxwcml2LT53b3Jrcy5pcnFfcHJlcGFyZV9iY25fdGFza2xldCwKKwkJICAgICAodm9pZCAoKikodW5zaWduZWQgbG9uZykpX3J0bF9wY2lfcHJlcGFyZV9iY25fdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZylodyk7Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9wY2lfaW5pdF90eF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSB1bnNpZ25lZCBpbnQgcHJpbywgdW5zaWduZWQgaW50IGVudHJpZXMpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF90eF9idWZmZXJfZGVzYyAqYnVmZmVyX2Rlc2M7CisJc3RydWN0IHJ0bF90eF9kZXNjICpkZXNjOworCWRtYV9hZGRyX3QgYnVmZmVyX2Rlc2NfZG1hLCBkZXNjX2RtYTsKKwl1MzIgbmV4dGRlc2NhZGRyZXNzOworCWludCBpOworCisJLyogYWxsb2MgdHggYnVmZmVyIGRlc2MgZm9yIG5ldyB0cnggZmxvdyovCisJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKKwkJYnVmZmVyX2Rlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChydGxwY2ktPnBkZXYsCisJCQkJCXNpemVvZigqYnVmZmVyX2Rlc2MpICogZW50cmllcywKKwkJCQkJJmJ1ZmZlcl9kZXNjX2RtYSk7CisKKwkJaWYgKCFidWZmZXJfZGVzYyB8fCAodW5zaWduZWQgbG9uZylidWZmZXJfZGVzYyAmIDB4RkYpIHsKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiQ2Fubm90IGFsbG9jYXRlIFRYIHJpbmcgKHByaW8gPSAlZClcbiIsCisJCQkJIHByaW8pKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJbWVtc2V0KGJ1ZmZlcl9kZXNjLCAwLCBzaXplb2YoKmJ1ZmZlcl9kZXNjKSAqIGVudHJpZXMpOworCQlydGxwY2ktPnR4X3JpbmdbcHJpb10uYnVmZmVyX2Rlc2MgPSBidWZmZXJfZGVzYzsKKwkJcnRscGNpLT50eF9yaW5nW3ByaW9dLmJ1ZmZlcl9kZXNjX2RtYSA9IGJ1ZmZlcl9kZXNjX2RtYTsKKworCQlydGxwY2ktPnR4X3JpbmdbcHJpb10uY3VyX3R4X3JwID0gMDsKKwkJcnRscGNpLT50eF9yaW5nW3ByaW9dLmN1cl90eF93cCA9IDA7CisJCXJ0bHBjaS0+dHhfcmluZ1twcmlvXS5hdmxfZGVzYyA9IGVudHJpZXM7CisJfQorCisJLyogYWxsb2MgZG1hIGZvciB0aGlzIHJpbmcgKi8KKwlkZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocnRscGNpLT5wZGV2LAorCQkJCSAgICBzaXplb2YoKmRlc2MpICogZW50cmllcywgJmRlc2NfZG1hKTsKKworCWlmICghZGVzYyB8fCAodW5zaWduZWQgbG9uZylkZXNjICYgMHhGRikgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiQ2Fubm90IGFsbG9jYXRlIFRYIHJpbmcgKHByaW8gPSAlZClcbiIsIHByaW8pKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykgKiBlbnRyaWVzKTsKKwlydGxwY2ktPnR4X3JpbmdbcHJpb10uZGVzYyA9IGRlc2M7CisJcnRscGNpLT50eF9yaW5nW3ByaW9dLmRtYSA9IGRlc2NfZG1hOworCisJcnRscGNpLT50eF9yaW5nW3ByaW9dLmlkeCA9IDA7CisJcnRscGNpLT50eF9yaW5nW3ByaW9dLmVudHJpZXMgPSBlbnRyaWVzOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJ0bHBjaS0+dHhfcmluZ1twcmlvXS5xdWV1ZSk7CisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgicXVldWU6JWQsIHJpbmdfYWRkcjolcFxuIiwgcHJpbywgZGVzYykpOworCisJLyogaW5pdCBldmVyeSBkZXNjIGluIHRoaXMgcmluZyAqLworCWlmICghcnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgeworCQlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCQluZXh0ZGVzY2FkZHJlc3MgPSAodTMyKSBkZXNjX2RtYSArCisJCQkJCQkgICAgICAoKGkgKwkxKSAlIGVudHJpZXMpICoKKwkJCQkJCSAgICAgIHNpemVvZigqZGVzYyk7CisKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopJihkZXNjW2ldKSwKKwkJCQkJCSAgICB0cnVlLAorCQkJCQkJICAgIEhXX0RFU0NfVFhfTkVYVERFU0NfQUREUiwKKwkJCQkJCSAgICAodTggKikmbmV4dGRlc2NhZGRyZXNzKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfcnRsX3BjaV9pbml0X3J4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCByeHJpbmdfaWR4KQoreworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBpOworCisJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKKwkJc3RydWN0IHJ0bF9yeF9idWZmZXJfZGVzYyAqZW50cnkgPSBOVUxMOworCQkvKiBhbGxvYyBkbWEgZm9yIHRoaXMgcmluZyAqLworCQlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uYnVmZmVyX2Rlc2MgPQorCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocnRscGNpLT5wZGV2LAorCQkJCQkgc2l6ZW9mKCpydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uCisJCQkJCQlidWZmZXJfZGVzYykgKgorCQkJCQkJcnRscGNpLT5yeHJpbmdjb3VudCwKKwkJCQkJICZydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uZG1hKTsKKwkJaWYgKCFydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uYnVmZmVyX2Rlc2MgfHwKKwkJICAgICh1bnNpZ25lZCBsb25nKXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzYyAmIDB4RkYpIHsKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiQ2Fubm90IGFsbG9jYXRlIFJYIHJpbmdcbiIpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJbWVtc2V0KHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzYywgMCwKKwkJICAgICAgIHNpemVvZigqcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmJ1ZmZlcl9kZXNjKSAqCisJCSAgICAgICBydGxwY2ktPnJ4cmluZ2NvdW50KTsKKworCQkvKiBpbml0IGV2ZXJ5IGRlc2MgaW4gdGhpcyByaW5nICovCisJCXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHggPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBydGxwY2ktPnJ4cmluZ2NvdW50OyBpKyspIHsKKwkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzY1tpXTsKKwkJCWlmICghX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCAodTggKillbnRyeSwKKwkJCQkJCSAgICAgIHJ4cmluZ19pZHgsIGkpKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHJ0bF9yeF9kZXNjICplbnRyeSA9IE5VTEw7CisJCXU4IHRtcF9vbmUgPSAxOworCQkvKiBhbGxvYyBkbWEgZm9yIHRoaXMgcmluZyAqLworCQlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uZGVzYyA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChydGxwY2ktPnBkZXYsCisJCQkJCSBzaXplb2YoKnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS4KKwkJCQkJZGVzYykgKiBydGxwY2ktPnJ4cmluZ2NvdW50LAorCQkJCQkgJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kbWEpOworCQlpZiAoIXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kZXNjIHx8CisJCSAgICAodW5zaWduZWQgbG9uZylydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uZGVzYyAmIDB4RkYpIHsKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiQ2Fubm90IGFsbG9jYXRlIFJYIHJpbmdcbiIpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uZGVzYywgMCwKKwkJICAgICAgIHNpemVvZigqcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmRlc2MpICoKKwkJICAgICAgIHJ0bHBjaS0+cnhyaW5nY291bnQpOworCisJCS8qIGluaXQgZXZlcnkgZGVzYyBpbiB0aGlzIHJpbmcgKi8KKwkJcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBydGxwY2ktPnJ4cmluZ2NvdW50OyBpKyspIHsKKwkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kZXNjW2ldOworCQkJaWYgKCFfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsICh1OCAqKWVudHJ5LAorCQkJCQkJICAgICAgcnhyaW5nX2lkeCwgaSkpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKGh3LCAodTggKillbnRyeSwgZmFsc2UsCisJCQkJCSAgICBIV19ERVNDX1JYRVJPLCAodTggKikgJnRtcF9vbmUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfZnJlZV90eF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgdW5zaWduZWQgaW50IHByaW8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbcHJpb107CisKKwkvKiBmcmVlIGV2ZXJ5IGRlc2MgaW4gdGhpcyByaW5nICovCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCQl1OCAqZW50cnk7CisKKwkJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpCisJCQllbnRyeSA9ICh1OCAqKSgmcmluZy0+YnVmZmVyX2Rlc2NbcmluZy0+aWR4XSk7CisJCWVsc2UKKwkJCWVudHJ5ID0gKHU4ICopKCZyaW5nLT5kZXNjW3JpbmctPmlkeF0pOworCisJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopZW50cnksIHRydWUsCisJCQkJIEhXX0RFU0NfVFhCVUZGX0FERFIpLAorCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWtmcmVlX3NrYihza2IpOworCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOworCX0KKworCS8qIGZyZWUgZG1hIG9mIHRoaXMgcmluZyAqLworCXBjaV9mcmVlX2NvbnNpc3RlbnQocnRscGNpLT5wZGV2LAorCQkJICAgIHNpemVvZigqcmluZy0+ZGVzYykgKiByaW5nLT5lbnRyaWVzLAorCQkJICAgIHJpbmctPmRlc2MsIHJpbmctPmRtYSk7CisJcmluZy0+ZGVzYyA9IE5VTEw7CisJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChydGxwY2ktPnBkZXYsCisJCQkJICAgIHNpemVvZigqcmluZy0+YnVmZmVyX2Rlc2MpICogcmluZy0+ZW50cmllcywKKwkJCQkgICAgcmluZy0+YnVmZmVyX2Rlc2MsIHJpbmctPmJ1ZmZlcl9kZXNjX2RtYSk7CisJCXJpbmctPmJ1ZmZlcl9kZXNjID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcGNpX2ZyZWVfcnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHJ4cmluZ19pZHgpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJaW50IGk7CisKKwkvKiBmcmVlIGV2ZXJ5IGRlc2MgaW4gdGhpcyByaW5nICovCisJZm9yIChpID0gMDsgaSA8IHJ0bHBjaS0+cnhyaW5nY291bnQ7IGkrKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLnJ4X2J1ZltpXTsKKworCQlpZiAoIXNrYikKKwkJCWNvbnRpbnVlOworCisJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LCAqKChkbWFfYWRkcl90ICopc2tiLT5jYiksCisJCQkJIHJ0bHBjaS0+cnhidWZmZXJzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlrZnJlZV9za2Ioc2tiKTsKKwl9CisKKwkvKiBmcmVlIGRtYSBvZiB0aGlzIHJpbmcgKi8KKwlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHJ0bHBjaS0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKCpydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uCisJCQkJICAgIGJ1ZmZlcl9kZXNjKSAqIHJ0bHBjaS0+cnhyaW5nY291bnQsCisJCQkJICAgIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzYywKKwkJCQkgICAgcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmRtYSk7CisJCXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzYyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChydGxwY2ktPnBkZXYsCisJCQkJICAgIHNpemVvZigqcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmRlc2MpICoKKwkJCQkgICAgcnRscGNpLT5yeHJpbmdjb3VudCwKKwkJCQkgICAgcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmRlc2MsCisJCQkJICAgIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kbWEpOworCQlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uZGVzYyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IF9ydGxfcGNpX2luaXRfdHJ4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlpbnQgcmV0OworCWludCBpLCByeHJpbmdfaWR4OworCisJLyogcnhyaW5nX2lkeCAwOlJYX01QRFVfUVVFVUUKKwkgKiByeHJpbmdfaWR4IDE6UlhfQ01EX1FVRVVFICovCisJZm9yIChyeHJpbmdfaWR4ID0gMDsgcnhyaW5nX2lkeCA8IFJUTF9QQ0lfTUFYX1JYX1FVRVVFOyByeHJpbmdfaWR4KyspIHsKKwkJcmV0ID0gX3J0bF9wY2lfaW5pdF9yeF9yaW5nKGh3LCByeHJpbmdfaWR4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOyBpKyspIHsKKwkJcmV0ID0gX3J0bF9wY2lfaW5pdF90eF9yaW5nKGh3LCBpLAorCQkJCQkgICAgcnRscGNpLT50eHJpbmdjb3VudFtpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlX3JpbmdzOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9yaW5nczoKKwlmb3IgKHJ4cmluZ19pZHggPSAwOyByeHJpbmdfaWR4IDwgUlRMX1BDSV9NQVhfUlhfUVVFVUU7IHJ4cmluZ19pZHgrKykKKwkJX3J0bF9wY2lfZnJlZV9yeF9yaW5nKGh3LCByeHJpbmdfaWR4KTsKKworCWZvciAoaSA9IDA7IGkgPCBSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVDsgaSsrKQorCQlpZiAocnRscGNpLT50eF9yaW5nW2ldLmRlc2MgfHwKKwkJICAgIHJ0bHBjaS0+dHhfcmluZ1tpXS5idWZmZXJfZGVzYykKKwkJCV9ydGxfcGNpX2ZyZWVfdHhfcmluZyhodywgaSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfcnRsX3BjaV9kZWluaXRfdHJ4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTMyIGksIHJ4cmluZ19pZHg7CisKKwkvKmZyZWUgcnggcmluZ3MgKi8KKwlmb3IgKHJ4cmluZ19pZHggPSAwOyByeHJpbmdfaWR4IDwgUlRMX1BDSV9NQVhfUlhfUVVFVUU7IHJ4cmluZ19pZHgrKykKKwkJX3J0bF9wY2lfZnJlZV9yeF9yaW5nKGh3LCByeHJpbmdfaWR4KTsKKworCS8qZnJlZSB0eCByaW5ncyAqLworCWZvciAoaSA9IDA7IGkgPCBSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVDsgaSsrKQorCQlfcnRsX3BjaV9mcmVlX3R4X3JpbmcoaHcsIGkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydGw5MmVfcGNpX3Jlc2V0X3RyeF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCWludCBpLCByeHJpbmdfaWR4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggdG1wX29uZSA9IDE7CisJLyogcnhyaW5nX2lkeCAwOlJYX01QRFVfUVVFVUUgKi8KKwkvKiByeHJpbmdfaWR4IDE6UlhfQ01EX1FVRVVFICovCisJZm9yIChyeHJpbmdfaWR4ID0gMDsgcnhyaW5nX2lkeCA8IFJUTF9QQ0lfTUFYX1JYX1FVRVVFOyByeHJpbmdfaWR4KyspIHsKKwkJLyogZm9yY2UgdGhlIHJ4X3JpbmdbUlhfTVBEVV9RVUVVRV0KKwkJICogUlhfQ01EX1FVRVVFXS5pZHggdG8gdGhlIGZpcnN0IG9uZQorCQkgKiBJZiB1c2luZyB0aGUgbmV3IHRyeCBmbG93LCBkbyBub3RoaW5nCisJCSAqLworCQlpZiAoIXJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cgJiYKKwkJICAgIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kZXNjKSB7CisJCQlzdHJ1Y3QgcnRsX3J4X2Rlc2MgKmVudHJ5ID0gTlVMTDsKKworCQkJZm9yIChpID0gMDsgaSA8IHJ0bHBjaS0+cnhyaW5nY291bnQ7IGkrKykgeworCQkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kZXNjW2ldOworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopZW50cnksCisJCQkJCQkJICAgIGZhbHNlLAorCQkJCQkJCSAgICBIV19ERVNDX1JYT1dOLAorCQkJCQkJCSAgICAmdG1wX29uZSk7CisJCQl9CisJCX0KKwkJcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCA9IDA7CisJfQorCisJLyogYWZ0ZXIgcmVzZXQsIHJlbGVhc2UgcHJldmlvdXMgcGVuZGluZyBwYWNrZXQsCisJICogYW5kIGZvcmNlIHRoZSAgdHggaWR4IHRvIHRoZSBmaXJzdCBvbmUKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7IGkrKykgeworCQlpZiAocnRscGNpLT50eF9yaW5nW2ldLmRlc2MgfHwKKwkJICAgIHJ0bHBjaS0+dHhfcmluZ1tpXS5idWZmZXJfZGVzYykgeworCQkJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbaV07CisKKwkJCXdoaWxlIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0KKwkJCQkJX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCQkJCXU4ICplbnRyeTsKKworCQkJCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KQorCQkJCQllbnRyeSA9ICh1OCAqKSgmcmluZy0+YnVmZmVyX2Rlc2MKKwkJCQkJCQkJW3JpbmctPmlkeF0pOworCQkJCWVsc2UKKwkJCQkJZW50cnkgPSAodTggKikoJnJpbmctPmRlc2NbcmluZy0+aWR4XSk7CisKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKKwkJCQkJCSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoCisJCQkJCQkgKHU4ICopZW50cnksIHRydWUsCisJCQkJCQkgSFdfREVTQ19UWEJVRkZfQUREUiksCisJCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOworCQkJfQorCQkJcmluZy0+aWR4ID0gMDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgcnRsX3BjaV90eF9jaGtfd2FpdHFfaW5zZXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CisJX19sZTE2IGZjID0gcnRsX2dldF9mYyhza2IpOworCisJaWYgKCFzdGEpCisJCXJldHVybiBmYWxzZTsKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisKKwlpZiAoIXJ0bHByaXYtPnJ0bGhhbC5iX2Vhcmx5bW9kZV9lbmFibGUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChpZWVlODAyMTFfaXNfcW9zX251bGxmdW5jKGZjKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChpZWVlODAyMTFfaXNfcHNwb2xsKGZjKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHN0YV9lbnRyeS0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgIT0gUlRMX0FHR19PUEVSQVRJT05BTCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChfcnRsX21hY190b19od3F1ZXVlKGh3LCBza2IpID4gVk9fUVVFVUUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAodGlkID4gNykKKwkJcmV0dXJuIGZhbHNlOworCS8qIG1heWJlIGV2ZXJ5IHRpZCBzaG91bGQgYmUgY2hlY2tlZCAqLworCWlmICghcnRscHJpdi0+bGlua19pbmZvLmhpZ2hlcl9idXN5dHh0cmFmZmljW3RpZF0pCisJCXJldHVybiBmYWxzZTsKKworCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisJc2tiX3F1ZXVlX3RhaWwoJnJ0bHByaXYtPm1hYzgwMjExLnNrYl93YWl0cVt0aWRdLCBza2IpOworCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy53YWl0cV9sb2NrKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHJ0bF9wY2lfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXN0cnVjdCBydGxfdHhfYnVmZmVyX2Rlc2MgKnB0eF9iZF9kZXNjID0gTlVMTDsKKwl1MTYgaWR4OworCXU4IG93bjsKKwl1OCB0ZW1wX29uZSA9IDE7CisJdTggaHdfcXVldWUgPSBfcnRsX21hY190b19od3F1ZXVlKGh3LCBza2IpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IHJ0bF9nZXRfaGRyKHNrYik7CisJX19sZTE2IGZjID0gcnRsX2dldF9mYyhza2IpOworCXU4ICpwZGFfYWRkciA9IGhkci0+YWRkcjE7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwkvKnNzbiAqLworCXU4IHRpZCA9IDA7CisJdTE2IHNlcV9udW1iZXIgPSAwOworCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKKwkJcnRsOTJlX3R4X21nbXRfcHJvYyhodywgc2tiKTsKKworCWlmIChydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmICFpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpICYmCisJCSAgICAhaWVlZTgwMjExX2hhc19wbShmYykpCisJCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCX0KKworCXJ0bDkyZV9hY3Rpb25fcHJvYyhodywgc2tiLCB0cnVlKTsKKworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwZGFfYWRkcikpCisJCXJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXNtdWx0aWNhc3QgKz0gc2tiLT5sZW47CisJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGRhX2FkZHIpKQorCQlydGxwcml2LT5zdGF0cy50eGJ5dGVzYnJvYWRjYXN0ICs9IHNrYi0+bGVuOworCWVsc2UKKwkJcnRscHJpdi0+c3RhdHMudHhieXRlc3VuaWNhc3QgKz0gc2tiLT5sZW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKKwlyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1tod19xdWV1ZV07CisJaWYgKGh3X3F1ZXVlICE9IEJFQUNPTl9RVUVVRSkgeworCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykKKwkJCWlkeCA9IHJpbmctPmN1cl90eF93cDsKKwkJZWxzZQorCQkJaWR4ID0gKHJpbmctPmlkeCArIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgJQorCQkJICAgICAgcmluZy0+ZW50cmllczsKKwl9IGVsc2UgeworCQlpZHggPSAwOworCX0KKworCXBkZXNjID0gJnJpbmctPmRlc2NbaWR4XTsKKworCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KSB7CisJCXB0eF9iZF9kZXNjID0gJnJpbmctPmJ1ZmZlcl9kZXNjW2lkeF07CisJfSBlbHNlIHsKKwkJb3duID0gKHU4KSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopcGRlc2MsCisJCQkJdHJ1ZSwgSFdfREVTQ19PV04pOworCisJCWlmICgob3duID09IDEpICYmIChod19xdWV1ZSAhPSBCRUFDT05fUVVFVUUpKSB7CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJICgiTm8gbW9yZSBUWCBkZXNjQCVkLCByaW5nLT5pZHggPSAlZCwgaWR4ID0gJWQsIHNrYl9xdWV1ZV9sZW4gPSAweCVkXG4iLAorCQkJCSAgaHdfcXVldWUsIHJpbmctPmlkeCwgaWR4LAorCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQkJcmV0dXJuIHNrYi0+bGVuOworCQl9CisJfQorCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJdGlkID0gcnRsX2dldF90aWQoc2tiKTsKKwkJaWYgKHN0YSkgeworCQkJc3RhX2VudHJ5ID0gKHN0cnVjdCBydGxfc3RhX2luZm8gKilzdGEtPmRydl9wcml2OworCQkJc2VxX251bWJlciA9IChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmCisJCQkJICAgICAgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OworCQkJc2VxX251bWJlciArPSAxOworCisJCQlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQkJc3RhX2VudHJ5LT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CisJCX0KKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKQorCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfVFgpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKilwZGVzYywKKwkJCQkJKHU4ICopcHR4X2JkX2Rlc2MsIGluZm8sIHN0YSwgc2tiLAorCQkJCQlod19xdWV1ZSwgcHRjYl9kZXNjKTsKKworCV9fc2tiX3F1ZXVlX3RhaWwoJnJpbmctPnF1ZXVlLCBza2IpOworCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KSB7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopcGRlc2MsIHRydWUsCisJCQkJCSAgICBIV19ERVNDX09XTiwgKHU4ICopJmh3X3F1ZXVlKTsKKwl9IGVsc2UgeworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoaHcsICh1OCAqKXBkZXNjLCB0cnVlLAorCQkJCQkgICAgSFdfREVTQ19PV04sICh1OCAqKSZ0ZW1wX29uZSk7CisJfQorCisJaWYgKChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSA8IDIgJiYKKwkgICAgaHdfcXVldWUgIT0gQkVBQ09OX1FVRVVFKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfTE9VRCwKKwkJCSAoImxlc3MgZGVzYyBsZWZ0LCBzdG9wIHNrYl9xdWV1ZUAlZCwgcmluZy0+aWR4ID0gJWQsIGlkeCA9ICVkLCBza2JfcXVldWVfbGVuID0gMHglZFxuIiwKKwkJCSAgaHdfcXVldWUsIHJpbmctPmlkeCwgaWR4LAorCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKKworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPnR4X3BvbGxpbmcpCisJCXJ0bHByaXYtPmNmZy0+b3BzLT50eF9wb2xsaW5nKGh3LCBod19xdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIHJ0bF9wY2lfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTE2IGkgPSAwOworCWludCBxdWV1ZV9pZDsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nOworCisJaWYgKG1hYy0+c2tpcF9zY2FuKQorCQlyZXR1cm47CisKKwlmb3IgKHF1ZXVlX2lkID0gUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQgLSAxOyBxdWV1ZV9pZCA+PSAwOykgeworCQl1MzIgcXVldWVfbGVuOworCQlpZiAoKChxdWV1ZXMgPj4gcXVldWVfaWQpICYgMHgxKSA9PSAwKSB7CisJCQlxdWV1ZV9pZC0tOworCQkJY29udGludWU7CisJCX0KKwkJcmluZyA9ICZwY2lwcml2LT5kZXYudHhfcmluZ1txdWV1ZV9pZF07CisJCXF1ZXVlX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKTsKKwkJaWYgKHF1ZXVlX2xlbiA9PSAwIHx8IHF1ZXVlX2lkID09IEJFQUNPTl9RVUVVRSB8fAorCQkgICAgcXVldWVfaWQgPT0gVFhDTURfUVVFVUUpIHsKKwkJCXF1ZXVlX2lkLS07CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCW1zbGVlcCg1KTsKKwkJCWkrKzsKKwkJfQorCisJCS8qIHdlIGp1c3Qgd2FpdCAxcyBmb3IgYWxsIHF1ZXVlcyAqLworCQlpZiAocnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlID09IEVSRk9GRiB8fAorCQkgICAgaXNfaGFsX3N0b3AocnRsaGFsKSB8fCBpID49IDIwMCkKKwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9wY2lfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJX3J0bF9wY2lfZGVpbml0X3RyeF9yaW5nKGh3KTsKKworCXN5bmNocm9uaXplX2lycShydGxwY2ktPnBkZXYtPmlycSk7CisJdGFza2xldF9raWxsKCZydGxwcml2LT53b3Jrcy5pcnFfdGFza2xldCk7CisKKwlmbHVzaF93b3JrcXVldWUocnRscHJpdi0+d29ya3MucnRsX3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShydGxwcml2LT53b3Jrcy5ydGxfd3EpOworfQorCitzdGF0aWMgaW50IHJ0bF9wY2lfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBlcnI7CisKKwlfcnRsX3BjaV9pbml0X3N0cnVjdChodywgcGRldik7CisKKwllcnIgPSBfcnRsX3BjaV9pbml0X3RyeF9yaW5nKGh3KTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJ0eCByaW5nIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBydGxfcGNpX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWludCBlcnIgPSAwOworCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csICgiIHJ0bF9wY2lfc3RhcnRcbiIpKTsKKwlydGw5MmVfcGNpX3Jlc2V0X3RyeF9yaW5nKGh3KTsKKworCXJ0bHByaXYtPnJ0bGhhbC5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgPSBmYWxzZTsKKwlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9idGNfc3RhdHVzKCkpIHsKKwkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19pbml0X3ZhcmlhYmxlcyhydGxwcml2KTsKKwkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19pbml0X2hhbF92YXJzKHJ0bHByaXYpOworCX0KKworCWVyciA9IHJ0bHByaXYtPmNmZy0+b3BzLT5od19pbml0KGh3KTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiRmFpbGVkIHRvIGNvbmZpZyBoYXJkd2FyZSBlcnIgJXghXG4iICwgZXJyKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmVuYWJsZV9pbnRlcnJ1cHQoaHcpOworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiZW5hYmxlX2ludGVycnVwdCBPS1xuIikpOworCisJcnRsOTJlX2luaXRfcnhfY29uZmlnKGh3KTsKKworCS8qc2hvdWxkIGFmdGVyIGFkYXB0ZXIgc3RhcnQgYW5kIGludGVycnVwdCBlbmFibGUuICovCisJc2V0X2hhbF9zdGFydChydGxoYWwpOworCisJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCisJcnRscHJpdi0+cnRsaGFsLnVwX2ZpcnN0X3RpbWUgPSBmYWxzZTsKKworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLCAoInJ0bF9wY2lfc3RhcnQgT0tcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsX3BjaV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IFJGSW5Qcm9ncmVzc1RpbWVPdXQgPSAwOworCisJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfYnRjX3N0YXR1cygpKQorCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX29wcy0+YnRjX2hhbHRfbm90aWZ5KCk7CisKKwkvKgorCSAqc2hvdWxkIGJlZm9yZSBkaXNhYmxlIGludGVycnJ1cHQmYWRhcHRlcgorCSAqYW5kIHdpbGwgZG8gaXQgaW1tZWRpYXRlbHkuCisJICovCisJc2V0X2hhbF9zdG9wKHJ0bGhhbCk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+ZGlzYWJsZV9pbnRlcnJ1cHQoaHcpOworCisJc3Bpbl9sb2NrKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrKTsKKwl3aGlsZSAocHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQlzcGluX3VubG9jaygmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jayk7CisJCWlmIChSRkluUHJvZ3Jlc3NUaW1lT3V0ID4gMTAwKSB7CisJCQlzcGluX2xvY2soJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCQkJYnJlYWs7CisJCX0KKwkJbWRlbGF5KDEpOworCQlSRkluUHJvZ3Jlc3NUaW1lT3V0Kys7CisJCXNwaW5fbG9jaygmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jayk7CisJfQorCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSB0cnVlOworCXNwaW5fdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrKTsKKworCXJ0bHByaXYtPnJ0bGhhbC5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgPSB0cnVlOworCXJ0bHByaXYtPmNmZy0+b3BzLT5od19kaXNhYmxlKGh3KTsKKwlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfUE9XRVJfT0ZGKTsKKworCXNwaW5fbG9jaygmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jayk7CisJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOworCXNwaW5fdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrKTsKKworCXJ0bF9wY2lfZW5hYmxlX2FzcG0oaHcpOworfQorCitzdGF0aWMgYm9vbCBfcnRsX3BjaV9maW5kX2FkYXB0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2VfcGRldiA9IHBkZXYtPmJ1cy0+c2VsZjsKKwl1MTYgdmVuZGVyaWQ7CisJdTE2IGRldmljZWlkOworCXU4IHJldmlzaW9uaWQ7CisJdTE2IGlycWxpbmU7CisJdTggdG1wOworCisJdmVuZGVyaWQgPSBwZGV2LT52ZW5kb3I7CisJZGV2aWNlaWQgPSBwZGV2LT5kZXZpY2U7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg4LCAmcmV2aXNpb25pZCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHgzQywgJmlycWxpbmUpOworCisJaWYgKGRldmljZWlkID09IFJUTF9QQ0lfODE5Ml9ESUQgfHwKKwkgICAgZGV2aWNlaWQgPT0gUlRMX1BDSV8wMDQ0X0RJRCB8fAorCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzAwNDdfRElEIHx8CisJICAgIGRldmljZWlkID09IFJUTF9QQ0lfODE5MlNFX0RJRCB8fAorCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxNzRfRElEIHx8CisJICAgIGRldmljZWlkID09IFJUTF9QQ0lfODE3M19ESUQgfHwKKwkgICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTcyX0RJRCB8fAorCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxNzFfRElEKSB7CisJCXN3aXRjaCAocmV2aXNpb25pZCkgeworCQljYXNlIFJUTF9QQ0lfUkVWSVNJT05fSURfODE5MlBDSUU6CisJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywKKwkJCQkgKCI4MTkyRSBpcyBmb3VuZCBidXQgbm90IHN1cHBvcnRlZCBub3ctdmlkL2RpZD0leC8leFxuIiwKKwkJCQkgIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCQkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRTsKKwkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlIFJUTF9QQ0lfUkVWSVNJT05fSURfODE5MlNFOgorCQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csCisJCQkJICgiODE5MlNFIGlzIGZvdW5kIC0gdmlkL2RpZD0leC8leFxuIiwKKwkJCQkgIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCQkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkgKCJFcnI6IFVua25vd24gZGV2aWNlIC0gdmlkL2RpZD0leC8leFxuIiwKKwkJCQkgIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCQkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0U7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84NzIzQUVfRElEKSB7CisJCXJ0bGhhbC0+aHdfdHlwZSA9IEhBUkRXQVJFX1RZUEVfUlRMODcyM0FFOworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywKKwkJCSAoIjg3MjNBRSBQQ0ktRSBpcyBmb3VuZCAtIHZpZC9kaWQ9JXgvJXhcbiIsCisJCQkgIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCX0gZWxzZSBpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyQ0VUX0RJRCB8fAorCQkgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxOTJDRV9ESUQgfHwKKwkJICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkxQ0VfRElEIHx8CisJCSAgIGRldmljZWlkID09IFJUTF9QQ0lfODE4OENFX0RJRCkgeworCQlydGxoYWwtPmh3X3R5cGUgPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJDRTsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csCisJCQkgKCI4MTkyQyBQQ0ktRSBpcyBmb3VuZCAtIHZpZC9kaWQ9JXgvJXhcbiIsCisJCQkgIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCX0gZWxzZSBpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyREVfRElEIHx8CisJCSAgIGRldmljZWlkID09IFJUTF9QQ0lfODE5MkRFX0RJRDIpIHsKKwkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyREU7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiODE5MkQgUENJLUUgaXMgZm91bmQgLSB2aWQvZGlkPSV4LyV4XG4iLAorCQkJICB2ZW5kZXJpZCwgZGV2aWNlaWQpKTsKKwl9IGVsc2UgaWYgKGRldmljZWlkID09IFJUTF9QQ0lfODE4OEVFX0RJRCkgeworCQkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTg4RUU7CisJCQlSVF9UUkFDRShDT01QX0lOSVQgLCBEQkdfTE9VRCwKKwkJCQkgKCJGaW5kIGFkYXB0ZXIsIEhhcmR3YXJlIHR5cGUgaXMgODE4OEVFXG4iKSk7CisJfSBlbHNlIGlmIChkZXZpY2VpZCA9PSBSVExfUENJXzg3MjNCRV9ESUQpIHsKKwkJCXJ0bGhhbC0+aHdfdHlwZSA9IEhBUkRXQVJFX1RZUEVfUlRMODcyM0JFOworCQkJUlRfVFJBQ0UoQ09NUF9JTklUICwgREJHX0xPVUQsCisJCQkJICgiRmluZCBhZGFwdGVyLCBIYXJkd2FyZSB0eXBlIGlzIDg3MjNCRVxuIikpOworCX0gZWxzZSBpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyRUVfRElEKSB7CisJCQlydGxoYWwtPmh3X3R5cGUgPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJFRTsKKwkJCVJUX1RSQUNFKENPTVBfSU5JVCAsIERCR19MT1VELAorCQkJCSAoIkZpbmQgYWRhcHRlciwgSGFyZHdhcmUgdHlwZSBpcyA4MTkyRUVcbiIpKTsKKwl9IGVsc2UgaWYgKGRldmljZWlkID09IFJUTF9QQ0lfODgyMUFFX0RJRCkgeworCQkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4ODIxQUU7CisJCQlSVF9UUkFDRShDT01QX0lOSVQgLCBEQkdfTE9VRCwKKwkJCQkgKCJGaW5kIGFkYXB0ZXIsIEhhcmR3YXJlIHR5cGUgaXMgODgyMUFFXG4iKSk7CisJfSBlbHNlIGlmIChkZXZpY2VpZCA9PSBSVExfUENJXzg4MTJBRV9ESUQpIHsKKwkJCXJ0bGhhbC0+aHdfdHlwZSA9IEhBUkRXQVJFX1RZUEVfUlRMODgxMkFFOworCQkJUlRfVFJBQ0UoQ09NUF9JTklUICwgREJHX0xPVUQsCisJCQkJICgiRmluZCBhZGFwdGVyLCBIYXJkd2FyZSB0eXBlIGlzIDg4MTJBRVxuIikpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoIkVycjogVW5rbm93biBkZXZpY2UgLSB2aWQvZGlkPSV4LyV4XG4iLAorCQkJICB2ZW5kZXJpZCwgZGV2aWNlaWQpKTsKKworCQlydGxoYWwtPmh3X3R5cGUgPSBSVExfREVGQVVMVF9IQVJEV0FSRV9UWVBFOworCX0KKworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyREUpIHsKKwkJaWYgKHJldmlzaW9uaWQgPT0gMCB8fCByZXZpc2lvbmlkID09IDEpIHsKKwkJCWlmIChyZXZpc2lvbmlkID09IDApIHsKKwkJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJCQkgKCJGaW5kIDkyREUgTUFDMC5cbiIpKTsKKwkJCQlydGxoYWwtPmludGVyZmFjZWluZGV4ID0gMDsKKwkJCX0gZWxzZSBpZiAocmV2aXNpb25pZCA9PSAxKSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCQkJICgiRmluZCA5MkRFIE1BQzEuXG4iKSk7CisJCQkJcnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJCSAoIlVua25vd24gZGV2aWNlIC0gVmVuZG9ySUQvRGV2aWNlSUQ9JXgvJXgsIFJldmlzaW9uPSV4XG4iLAorCQkJCSAgdmVuZGVyaWQsIGRldmljZWlkLCByZXZpc2lvbmlkKSk7CisJCQlydGxoYWwtPmludGVyZmFjZWluZGV4ID0gMDsKKwkJfQorCX0KKworCS8qIDkyZWUgdXNlIG5ldyB0cnggZmxvdyAqLworCWlmIChydGxoYWwtPmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRUUpCisJCXJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cgPSB0cnVlOworCWVsc2UKKwkJcnRscHJpdi0+dXNlX25ld190cnhfZmxvdyA9IGZhbHNlOworCisJLypmaW5kIGJ1cyBpbmZvICovCisJcGNpcHJpdi0+bmRpc19hZGFwdGVyLmJ1c251bWJlciA9IHBkZXYtPmJ1cy0+bnVtYmVyOworCXBjaXByaXYtPm5kaXNfYWRhcHRlci5kZXZudW1iZXIgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisJcGNpcHJpdi0+bmRpc19hZGFwdGVyLmZ1bmNudW1iZXIgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CisKKwkvKmZpbmQgYnJpZGdlIGluZm8gKi8KKwlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9IFBDSV9CUklER0VfVkVORE9SX1VOS05PV047CisJLyogc29tZSBBUk0gaGF2ZSBubyBicmlkZ2VfcGRldiBhbmQgd2lsbCBjcmFzaCBoZXJlCisJICogc28gd2Ugc2hvdWxkIGNoZWNrIGlmIGJyaWRnZV9wZGV2IGlzIE5VTEwgKi8KKwlpZiAoYnJpZGdlX3BkZXYpIHsKKwkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3JpZCA9IGJyaWRnZV9wZGV2LT52ZW5kb3I7CisJCWZvciAodG1wID0gMDsgdG1wIDwgUENJX0JSSURHRV9WRU5ET1JfTUFYOyB0bXArKykgeworCQkJaWYgKGJyaWRnZV9wZGV2LT52ZW5kb3IgPT0gcGNpYnJpZGdlX3ZlbmRvcnNbdG1wXSkgeworCQkJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfdmVuZG9yID0gdG1wOworCQkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJCQkgKCJQY2kgQnJpZGdlIFZlbmRvciBpcyBmb3VuZCBpbmRleDogJWRcbiIsCisJCQkJCSAgdG1wKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3IgIT0KKwkgICAgUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgeworCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2J1c251bSA9CisJCSAgICBicmlkZ2VfcGRldi0+YnVzLT5udW1iZXI7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZGV2bnVtID0KKwkJICAgIFBDSV9TTE9UKGJyaWRnZV9wZGV2LT5kZXZmbik7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZnVuY251bSA9CisJCSAgICBQQ0lfRlVOQyhicmlkZ2VfcGRldi0+ZGV2Zm4pOworCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpY2ZnX2FkZHJwb3J0ID0KKwkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2J1c251bSA8PCAxNikgfAorCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZGV2bnVtIDw8IDExKSB8CisJCSAgICAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9mdW5jbnVtIDw8IDgpIHwgKDEgPDwgMzEpOworCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ID0KKwkJICAgIHBjaV9wY2llX2NhcChicmlkZ2VfcGRldik7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5udW00Ynl0ZXMgPQorCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQgKyAweDEwKSAvIDQ7CisKKwkJcnRsX3BjaV9nZXRfbGlua2NvbnRyb2xfZmllbGQoaHcpOworCisJCWlmIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9PQorCQkgICAgUENJX0JSSURHRV9WRU5ET1JfQU1EKSB7CisJCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIuYW1kX2wxX3BhdGNoID0KKwkJCSAgICBydGxfcGNpX2dldF9hbWRfbDFfcGF0Y2goaHcpOworCQl9CisJfQorCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csCisJCSAoInBjaWRldiBidXNudW1iZXI6ZGV2bnVtYmVyOmZ1bmNudW1iZXI6dmVuZG9yOmxpbmtfY3RsICVkOiVkOiVkOiV4OiV4XG4iLAorCQkgIHBjaXByaXYtPm5kaXNfYWRhcHRlci5idXNudW1iZXIsCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLmRldm51bWJlciwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZnVuY251bWJlciwKKwkJICBwZGV2LT52ZW5kb3IsIHBjaXByaXYtPm5kaXNfYWRhcHRlci5saW5rY3RybF9yZWcpKTsKKworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkgKCJwY2lfYnJpZGdlIGJ1c251bWJlcjpkZXZudW1iZXI6ZnVuY251bWJlcjp2ZW5kb3I6cGNpZV9jYXA6bGlua19jdGxfcmVnOmFtZCAlZDolZDolZDoleDoleDoleDoleFxuIiwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2J1c251bSwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2Rldm51bSwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2Z1bmNudW0sCisJCSAgcGNpYnJpZGdlX3ZlbmRvcnNbcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3JdLAorCQkgIHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQsCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9saW5rY3RybHJlZywKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIuYW1kX2wxX3BhdGNoKSk7CisKKwlydGxfcGNpX3BhcnNlX2NvbmZpZ3VyYXRpb24ocGRldiwgaHcpOworCWxpc3RfYWRkX3RhaWwoJnJ0bHByaXYtPmxpc3QsICZydGxwcml2LT5nbGJfdmFyLT5nbGJfcHJpdl9saXN0KTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBydGxfcGNpX2ludHJfbW9kZV9tc2koc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocGNpcHJpdik7CisJaW50IHJldDsKKwlyZXQgPSBwY2lfZW5hYmxlX21zaShydGxwY2ktPnBkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEocnRscGNpLT5wZGV2LT5pcnEsICZfcnRsX3BjaV9pbnRlcnJ1cHQsCisJCQkgIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgaHcpOworCWlmIChyZXQgPCAwKSB7CisJCXBjaV9kaXNhYmxlX21zaShydGxwY2ktPnBkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJ0bHBjaS0+dXNpbmdfbXNpID0gdHJ1ZTsKKworCVJUX1RSQUNFKENPTVBfSU5JVHxDT01QX0lOVFIsIERCR19ETUVTRywgKCJNU0kgSW50ZXJydXB0IE1vZGUhXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsX3BjaV9pbnRyX21vZGVfbGVnYWN5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHBjaXByaXYpOworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShydGxwY2ktPnBkZXYtPmlycSwgJl9ydGxfcGNpX2ludGVycnVwdCwKKwkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBodyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlydGxwY2ktPnVzaW5nX21zaSA9IGZhbHNlOworCVJUX1RSQUNFKENPTVBfSU5JVHxDT01QX0lOVFIsIERCR19ETUVTRywKKwkJICgiUGluLWJhc2VkIEludGVycnVwdCBNb2RlIVxuIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bF9wY2lfaW50cl9tb2RlX2RlY2lkZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHBjaXByaXYpOworCWludCByZXQ7CisJaWYgKHJ0bHBjaS0+bXNpX3N1cHBvcnQpIHsKKwkJcmV0ID0gcnRsX3BjaV9pbnRyX21vZGVfbXNpKGh3KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXQgPSBydGxfcGNpX2ludHJfbW9kZV9sZWdhY3koaHcpOworCX0gZWxzZSB7CisJCXJldCA9IHJ0bF9wY2lfaW50cl9tb2RlX2xlZ2FjeShodyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIHRoaXMgaXMgdXNlZCBmb3Igb3RoZXIgbW9kdWxlcyBnZXQKKyAqIGh3IHBvaW50ZXIgaW4gcnRsX3BjaV9nZXRfaHdfcG9pbnRlciAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3X2V4cG9ydDsKKworaW50IHN0Z19ydGxfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBOVUxMOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IE5VTEw7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IE5VTEw7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaTsKKwl1bnNpZ25lZCBsb25nIHBtZW1fc3RhcnQsIHBtZW1fbGVuLCBwbWVtX2ZsYWdzOworCWludCBlcnI7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCVJUX0FTU0VSVChmYWxzZSwKKwkJCSAgKCIlcyA6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCisJCQkgICBwY2lfbmFtZShwZGV2KSkpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgeworCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CisJCQlSVF9BU1NFUlQoZmFsc2UsCisJCQkJICAoIlVuYWJsZSB0byBvYnRhaW4gMzJiaXQgRE1BIGZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKSk7CisJCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBydGxfcGNpX3ByaXYpICsKKwkJCQlzaXplb2Yoc3RydWN0IHJ0bF9wcml2KSwgJnJ0bDkyZV9vcHMpOworCWlmICghaHcpIHsKKwkJUlRfQVNTRVJUKGZhbHNlLAorCQkJICAoIiVzIDogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIiwgcGNpX25hbWUocGRldikpKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsMTsKKwl9CisJaHdfZXhwb3J0ID0gaHc7CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCXJ0bHByaXYgPSBody0+cHJpdjsKKwlwY2lwcml2ID0gKHZvaWQgKilydGxwcml2LT5wcml2OworCXBjaXByaXYtPmRldi5wZGV2ID0gcGRldjsKKworCS8qIGluaXQgY2ZnICYgaW50Zl9vcHMgKi8KKwlydGxwcml2LT5ydGxoYWwuaW50ZXJmYWNlID0gSU5URl9QQ0k7CisJcnRscHJpdi0+Y2ZnID0gKHN0cnVjdCBydGxfaGFsX2NmZyAqKShpZC0+ZHJpdmVyX2RhdGEpOworCXJ0bHByaXYtPmludGZfb3BzID0gJnJ0bDkyZV9wY2lfb3BzOworCXJ0bHByaXYtPmdsYl92YXIgPSAmZ2xvYmFsX3ZhcjsKKworCS8qCisJICppbml0IGRiZ3AgZmxhZ3MgYmVmb3JlIGFsbAorCSAqb3RoZXIgZnVuY3Rpb25zLCBiZWNhdXNlIHdlIHdpbGwKKwkgKnVzZSBpdCBpbiBvdGhlciBmdW50aW9ucyBsaWtlCisJICpSVF9UUkFDRS9SVF9QUklOVC9SVExfUFJJTlRfREFUQQorCSAqeW91IGNhbiBub3QgdXNlIHRoZXNlIG1hY3JvCisJICpiZWZvcmUgdGhpcworCSAqLworCXJ0bDkyZV9kYmdwX2ZsYWdfaW5pdChodyk7CisKKwkvKiBNRU0gbWFwICovCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBLQlVJTERfTU9ETkFNRSk7CisJaWYgKGVycikgeworCQlSVF9BU1NFUlQoZmFsc2UsICgiQ2FuJ3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHJ0bHByaXYtPmNmZy0+YmFyX2lkKTsKKwlwbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcnRscHJpdi0+Y2ZnLT5iYXJfaWQpOworCXBtZW1fZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgcnRscHJpdi0+Y2ZnLT5iYXJfaWQpOworCisJLypzaGFyZWQgbWVtIHN0YXJ0ICovCisJcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCA9CisJCQkodW5zaWduZWQgbG9uZylwY2lfaW9tYXAocGRldiwKKwkJCXJ0bHByaXYtPmNmZy0+YmFyX2lkLCBwbWVtX2xlbik7CisJaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgPT0gMCkgeworCQlSVF9BU1NFUlQoZmFsc2UsICgiQ2FuJ3QgbWFwIFBDSSBtZW1cbiIpKTsKKwkJZ290byBmYWlsMjsKKwl9CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywKKwkJICgibWVtIG1hcHBlZCBzcGFjZTogc3RhcnQ6IDB4JTA4bHggbGVuOiUwOGx4IGZsYWdzOiUwOGx4LCBhZnRlciBtYXA6MHglMDhseFxuIiwKKwkJICBwbWVtX3N0YXJ0LCBwbWVtX2xlbiwgcG1lbV9mbGFncywKKwkJICBydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0KSk7CisKKwkvKiBEaXNhYmxlIENsayBSZXF1ZXN0ICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODEsIDApOworCS8qIGxlYXZlIEQzIG1vZGUgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0NCwgMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4MDQsIDB4MDYpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDA0LCAweDA3KTsKKworCS8qIFRoZSBuZXh0IHN0YXRlbWVudCBpcyBuZWVkZWQgd2hlbiBidWlsdCBhcyBzaW5nbGUgbW9kdWxlICovCisJcnRsX2NvcmVfbW9kdWxlX2luaXQoKTsKKworCS8qIGZpbmQgYWRhcHRlciAqLworCS8qIGlmIGNoaXAgbm90IHN1cHBvcnQsIHdpbGwgcmV0dXJuIGZhbHNlICovCisJaWYgKCFfcnRsX3BjaV9maW5kX2FkYXB0ZXIocGRldiwgaHcpKQorCQlnb3RvIGZhaWwzOworCisJLyogSW5pdCBJTyBoYW5kbGVyICovCisJX3J0bF9wY2lfaW9faGFuZGxlcl9pbml0KCZwZGV2LT5kZXYsIGh3KTsKKworCS8qbGlrZSByZWFkIGVlcHJvbSBhbmQgc28gb24gKi8KKwlydGxwcml2LT5jZmctPm9wcy0+cmVhZF9lZXByb21faW5mbyhodyk7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmluaXRfc3dfdmFycyhodykpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywgKCJDYW4ndCBpbml0X3N3X3ZhcnMuXG4iKSk7CisJCWdvdG8gZmFpbDM7CisJfQorCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmluaXRfc3dfbGVkcyhodyk7CisKKwkvKmFzcG0gKi8KKwlydGxfcGNpX2luaXRfYXNwbShodyk7CisKKwkvKiBJbml0IG1hYzgwMjExIHN3ICovCisJZXJyID0gcnRsOTJlX2luaXRfY29yZShodyk7CisJaWYgKGVycikgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiQ2FuJ3QgYWxsb2NhdGUgc3cgZm9yIG1hYzgwMjExLlxuIikpOworCQlnb3RvIGZhaWwzOworCX0KKworCS8qIEluaXQgUENJIHN3ICovCisJZXJyID0gIXJ0bF9wY2lfaW5pdChodywgcGRldik7CisJaWYgKGVycikgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLCAoIkZhaWxlZCB0byBpbml0IFBDSS5cbiIpKTsKKwkJZ290byBmYWlsMzsKKwl9CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkNhbid0IHJlZ2lzdGVyIG1hYzgwMjExIGh3LlxuIikpOworCQlnb3RvIGZhaWwzOworCX0gZWxzZSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCX0KKwkvKiB0aGUgd2lwaHkgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZWQgdG8KKwkgKiBjZmc4MDIxMSBwcmlvciB0byByZWd1bGF0b3J5X2hpbnQgKi8KKwlpZiAocmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgcnRscHJpdi0+cmVnZC5hbHBoYTIpKQorCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX1dBUk5JTkcsICgicmVndWxhdG9yeV9oaW50IGZhaWxcbiIpKTsKKworCS8qIGFkZCBmb3IgcHJvdiAqLworCXJ0bF9wcm9jX2FkZF9vbmUoaHcpOworCisJLyppbml0IHJma2lsbCAqLworCXJ0bDkyZV9pbml0X3Jma2lsbChodyk7CisKKwlydGxwY2kgPSBydGxfcGNpZGV2KHBjaXByaXYpOworCWVyciA9IHJ0bF9wY2lfaW50cl9tb2RlX2RlY2lkZShodyk7CisJaWYgKGVycikgeworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywKKwkJCSAoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCisJCQkgIHdpcGh5X25hbWUoaHctPndpcGh5KSkpOworCQlnb3RvIGZhaWwzOworCX0gZWxzZSB7CisJCXJ0bHBjaS0+aXJxX2FsbG9jID0gMTsKKwl9CisKKwlzZXRfYml0KFJUTF9TVEFUVVNfSU5URVJGQUNFX1NUQVJULCAmcnRscHJpdi0+c3RhdHVzKTsKKwlyZXR1cm4gMDsKKworZmFpbDM6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJ0bDkyZV9kZWluaXRfY29yZShodyk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCisJaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgIT0gMCkKKwkJcGNpX2lvdW5tYXAocGRldiwgKHZvaWQgX19pb21lbSAqKXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQpOworCitmYWlsMjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCitmYWlsMToKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiAtRU5PREVWOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX3BjaV9wcm9iZSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaHcgKnJ0bF9wY2lfZ2V0X2h3X3BvaW50ZXIodm9pZCkKK3sKKwlyZXR1cm4gaHdfZXhwb3J0OworfQorRVhQT1JUX1NZTUJPTChydGxfcGNpX2dldF9od19wb2ludGVyKTsKKwordm9pZCBzdGdfcnRsX3BjaV9kaXNjb25uZWN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHBjaXByaXYpOworCXN0cnVjdCBydGxfbWFjICpydGxtYWMgPSBydGxfbWFjKHJ0bHByaXYpOworCisJY2xlYXJfYml0KFJUTF9TVEFUVVNfSU5URVJGQUNFX1NUQVJULCAmcnRscHJpdi0+c3RhdHVzKTsKKworCS8qIGFkZCBmb3IgcHJvdiAqLworCXJ0bF9wcm9jX3JlbW92ZV9vbmUoaHcpOworCisJLyppZWVlODAyMTFfdW5yZWdpc3Rlcl9odyB3aWxsIGNhbGwgb3BzX3N0b3AgKi8KKwlpZiAocnRsbWFjLT5tYWM4MDIxMV9yZWdpc3RlcmVkID09IDEpIHsKKwkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOworCQlydGxtYWMtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAwOworCX0gZWxzZSB7CisJCXJ0bDkyZV9kZWluaXRfZGVmZXJyZWRfd29yayhodyk7CisJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3N0b3AoaHcpOworCX0KKworCS8qZGVpbml0IHJma2lsbCAqLworCXJ0bDkyZV9kZWluaXRfcmZraWxsKGh3KTsKKworCXJ0bF9wY2lfZGVpbml0KGh3KTsKKwlydGw5MmVfZGVpbml0X2NvcmUoaHcpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5kZWluaXRfc3dfdmFycyhodyk7CisKKwlpZiAocnRscGNpLT5pcnFfYWxsb2MpIHsKKwkJc3luY2hyb25pemVfaXJxKHJ0bHBjaS0+cGRldi0+aXJxKTsKKwkJZnJlZV9pcnEocnRscGNpLT5wZGV2LT5pcnEsIGh3KTsKKwkJcnRscGNpLT5pcnFfYWxsb2MgPSAwOworCX0KKworCWlmIChydGxwY2ktPnVzaW5nX21zaSkKKwkJcGNpX2Rpc2FibGVfbXNpKHJ0bHBjaS0+cGRldik7CisKKwlsaXN0X2RlbCgmcnRscHJpdi0+bGlzdCk7CisJaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgIT0gMCkgeworCQlwY2lfaW91bm1hcChwZGV2LCAodm9pZCBfX2lvbWVtICopcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCk7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcnRsX3BjaV9kaXNhYmxlX2FzcG0oaHcpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX3BjaV9kaXNjb25uZWN0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgora2VybmVsIHBjaSBwb3dlciBzdGF0ZSBkZWZpbmU6CitQQ0lfRDAgICAgICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDApCitQQ0lfRDEgICAgICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDEpCitQQ0lfRDIgICAgICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDIpCitQQ0lfRDNob3QgICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDMpCitQQ0lfRDNjb2xkICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDQpCitQQ0lfVU5LTk9XTiAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDUpCisKK1RoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gc3lzdGVtCitnb2VzIGludG8gc3VzcGVuZCBzdGF0ZSBtYWM4MDIxMSB3aWxsCitjYWxsIHJ0bF9tYWNfc3RvcCgpIGZyb20gdGhlIG1hYzgwMjExCitzdXNwZW5kIGZ1bmN0aW9uIGZpcnN0LCBTbyB0aGVyZSBpcworbm8gbmVlZCB0byBjYWxsIGh3X2Rpc2FibGUgaGVyZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgc3RnX3J0bF9wY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmh3X3N1c3BlbmQoaHcpOworCXJ0bDkyZV9kZWluaXRfcmZraWxsKGh3KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX3BjaV9zdXNwZW5kKTsKKworaW50IHN0Z19ydGxfcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmh3X3Jlc3VtZShodyk7CisJcnRsOTJlX2luaXRfcmZraWxsKGh3KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX3BjaV9yZXN1bWUpOworCitzdHJ1Y3QgcnRsX2ludGZfb3BzIHJ0bDkyZV9wY2lfb3BzID0geworCS5yZWFkOTJlX2VmdXNlX2J5dGUgPSByZWFkOTJlX2VmdXNlX2J5dGUsCisJLmFkYXB0ZXJfc3RhcnQgPSBydGxfcGNpX3N0YXJ0LAorCS5hZGFwdGVyX3N0b3AgPSBydGxfcGNpX3N0b3AsCisJLmNoZWNrX2J1ZGR5X3ByaXYgPSBydGxfcGNpX2NoZWNrX2J1ZGR5X3ByaXYsCisJLmFkYXB0ZXJfdHggPSBydGxfcGNpX3R4LAorCS5mbHVzaCA9IHJ0bF9wY2lfZmx1c2gsCisJLnJlc2V0X3RyeF9yaW5nID0gcnRsOTJlX3BjaV9yZXNldF90cnhfcmluZywKKwkud2FpdHFfaW5zZXJ0ID0gcnRsX3BjaV90eF9jaGtfd2FpdHFfaW5zZXJ0LAorCisJLmRpc2FibGVfYXNwbSA9IHJ0bF9wY2lfZGlzYWJsZV9hc3BtLAorCS5lbmFibGVfYXNwbSA9IHJ0bF9wY2lfZW5hYmxlX2FzcG0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9wY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjMjNhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcGNpLmgKQEAgLTAsMCArMSwzNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9QQ0lfSF9fCisjZGVmaW5lIF9fUlRMX1BDSV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorLyoKKzE6IE1TRFUgcGFja2V0IHF1ZXVlLAorMjogUnggQ29tbWFuZCBRdWV1ZQorKi8KKyNkZWZpbmUgUlRMX1BDSV9SWF9NUERVX1FVRVVFCQkJMAorI2RlZmluZSBSVExfUENJX1JYX0NNRF9RVUVVRQkJCTEKKyNkZWZpbmUgUlRMX1BDSV9NQVhfUlhfUVVFVUUJCQkyCisKKyNkZWZpbmUgUlRMX1BDSV9NQVhfUlhfQ09VTlQJCQk1MTIvKjY0Ki8KKyNkZWZpbmUgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQJCTkKKworI2RlZmluZSBSVF9UWERFU0NfTlVNCQkJCTEyOAorI2RlZmluZSBUWF9ERVNDX05VTV85MkUJCQkJNTEyCisjZGVmaW5lIFJUX1RYREVTQ19OVU1fQkVfUVVFVUUJCQkyNTYKKworI2RlZmluZSBCS19RVUVVRQkJCQkwCisjZGVmaW5lIEJFX1FVRVVFCQkJCTEKKyNkZWZpbmUgVklfUVVFVUUJCQkJMgorI2RlZmluZSBWT19RVUVVRQkJCQkzCisjZGVmaW5lIEJFQUNPTl9RVUVVRQkJCQk0CisjZGVmaW5lIFRYQ01EX1FVRVVFCQkJCTUKKyNkZWZpbmUgTUdOVF9RVUVVRQkJCQk2CisjZGVmaW5lIEhJR0hfUVVFVUUJCQkJNworI2RlZmluZSBIQ0NBX1FVRVVFCQkJCTgKKworI2RlZmluZSBSVExfUENJX0RFVklDRSh2ZW5kLCBkZXYsIGNmZykgIFwKKwkudmVuZG9yID0gKHZlbmQpLCBcCisJLmRldmljZSA9IChkZXYpLCBcCisJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsIFwKKwkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCxcCisJLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQorCisjZGVmaW5lIElOVEVMX1ZFTkRPUl9JRAkJCQkweDgwODYKKyNkZWZpbmUgU0lTX1ZFTkRPUl9JRAkJCQkweDEwMzkKKyNkZWZpbmUgQVRJX1ZFTkRPUl9JRAkJCQkweDEwMDIKKyNkZWZpbmUgQVRJX0RFVklDRV9JRAkJCQkweDc5MTQKKyNkZWZpbmUgQU1EX1ZFTkRPUl9JRAkJCQkweDEwMjIKKworI2RlZmluZSBQQ0lfTUFYX0JSSURHRV9OVU1CRVIJCQkyNTUKKyNkZWZpbmUgUENJX01BWF9ERVZJQ0VTCQkJCTMyCisjZGVmaW5lIFBDSV9NQVhfRlVOQ1RJT04JCQk4CisKKyNkZWZpbmUgUENJX0NPTkZfQUREUkVTUwkweDBDRjgJLypQQ0kgQ29uZmlndXJhdGlvbiBTcGFjZSBBZGRyZXNzICovCisjZGVmaW5lIFBDSV9DT05GX0RBVEEJCTB4MENGQwkvKlBDSSBDb25maWd1cmF0aW9uIFNwYWNlIERhdGEgKi8KKworI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0RFVgkJMHgwNgorI2RlZmluZSBQQ0lfU1VCQ0xBU1NfQlJfUENJX1RPX1BDSQkweDA0CisjZGVmaW5lIFBDSV9DQVBBQklMSVRZX0lEX1BDSV9FWFBSRVNTCTB4MTAKKyNkZWZpbmUgUENJX0NBUF9JRF9FWFAJCQkweDEwCisKKyNkZWZpbmUgVTFET05UQ0FSRQkJCTB4RkYKKyNkZWZpbmUgVTJET05UQ0FSRQkJCTB4RkZGRgorI2RlZmluZSBVNERPTlRDQVJFCQkJMHhGRkZGRkZGRgorCisjZGVmaW5lIFJUTF9QQ0lfODE5Ml9ESUQJMHg4MTkyCS8qODE5MiBQQ0ktRSAqLworI2RlZmluZSBSVExfUENJXzgxOTJTRV9ESUQJMHg4MTkyCS8qODE5MiBTRSAqLworI2RlZmluZSBSVExfUENJXzgxNzRfRElECTB4ODE3NAkvKjgxOTIgU0UgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTczX0RJRAkweDgxNzMJLyo4MTkxIFNFIENyYWIgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTcyX0RJRAkweDgxNzIJLyo4MTkxIFNFIFJFICovCisjZGVmaW5lIFJUTF9QQ0lfODE3MV9ESUQJMHg4MTcxCS8qODE5MSBTRSBVbmljcm9uICovCisjZGVmaW5lIFJUTF9QQ0lfMDA0NV9ESUQJMHgwMDQ1CS8qODE5MCBQQ0kgZm9yIENlcmFnYSAqLworI2RlZmluZSBSVExfUENJXzAwNDZfRElECTB4MDA0NgkvKjgxOTAgQ2FyZGJ1cyBmb3IgQ2VyYWdhICovCisjZGVmaW5lIFJUTF9QQ0lfMDA0NF9ESUQJMHgwMDQ0CS8qODE5MmUgUENJRSBmb3IgQ2VyYWdhICovCisjZGVmaW5lIFJUTF9QQ0lfMDA0N19ESUQJMHgwMDQ3CS8qODE5MmUgRXhwcmVzcyBDYXJkIGZvciBDZXJhZ2EgKi8KKyNkZWZpbmUgUlRMX1BDSV83MDBGX0RJRAkweDcwMEYKKyNkZWZpbmUgUlRMX1BDSV83MDFGX0RJRAkweDcwMUYKKyNkZWZpbmUgUlRMX1BDSV9ETElOS19ESUQJMHgzMzA0CisjZGVmaW5lIFJUTF9QQ0lfODcyM0FFX0RJRAkweDg3MjMJLyo4NzIzZSAqLworI2RlZmluZSBSVExfUENJXzgxOTJDRVRfRElECTB4ODE5MQkvKjgxOTJjZSAqLworI2RlZmluZSBSVExfUENJXzgxOTJDRV9ESUQJMHg4MTc4CS8qODE5MmNlICovCisjZGVmaW5lIFJUTF9QQ0lfODE5MUNFX0RJRAkweDgxNzcJLyo4MTkyY2UgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTg4Q0VfRElECTB4ODE3NgkvKjgxOTJjZSAqLworI2RlZmluZSBSVExfUENJXzgxOTJDVV9ESUQJMHg4MTkxCS8qODE5MmNlICovCisjZGVmaW5lIFJUTF9QQ0lfODE5MkRFX0RJRAkweDgxOTMJLyo4MTkyZGUgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTkyREVfRElEMgkweDAwMkIJLyo5MkRFKi8KKyNkZWZpbmUgUlRMX1BDSV84MTg4RUVfRElECTB4ODE3OSAgLyo4MTg4ZWUqLworI2RlZmluZSBSVExfUENJXzg3MjNCRV9ESUQJMHhCNzIzICAvKjg3MjNiZSovCisjZGVmaW5lIFJUTF9QQ0lfODE5MkVFX0RJRAkweDgxOEIJLyo4MTkyZWUqLworI2RlZmluZSBSVExfUENJXzg4MjFBRV9ESUQJMHg4ODIxCS8qODgyMWFlKi8KKyNkZWZpbmUgUlRMX1BDSV84ODEyQUVfRElECTB4ODgxMgkvKjg4MTJhZSovCisKKy8qODE5MiBzdXBwb3J0IDE2IHBhZ2VzIG9mIElPIHJlZ2lzdGVycyovCisjZGVmaW5lIFJUTF9NRU1fTUFQUEVEX0lPX1JBTkdFXzgxOTBQQ0kJCTB4MTAwMAorI2RlZmluZSBSVExfTUVNX01BUFBFRF9JT19SQU5HRV84MTkyUENJRQkweDQwMDAKKyNkZWZpbmUgUlRMX01FTV9NQVBQRURfSU9fUkFOR0VfODE5MlNFCQkweDQwMDAKKyNkZWZpbmUgUlRMX01FTV9NQVBQRURfSU9fUkFOR0VfODE5MkNFCQkweDQwMDAKKyNkZWZpbmUgUlRMX01FTV9NQVBQRURfSU9fUkFOR0VfODE5MkRFCQkweDQwMDAKKworI2RlZmluZSBSVExfUENJX1JFVklTSU9OX0lEXzgxOTBQQ0kJCTB4MDAKKyNkZWZpbmUgUlRMX1BDSV9SRVZJU0lPTl9JRF84MTkyUENJRQkJMHgwMQorI2RlZmluZSBSVExfUENJX1JFVklTSU9OX0lEXzgxOTJTRQkJMHgxMAorI2RlZmluZSBSVExfUENJX1JFVklTSU9OX0lEXzgxOTJDRQkJMHgxCisjZGVmaW5lIFJUTF9QQ0lfUkVWSVNJT05fSURfODE5MkRFCQkweDAKKworI2RlZmluZSBSVExfREVGQVVMVF9IQVJEV0FSRV9UWVBFCUhBUkRXQVJFX1RZUEVfUlRMODE5MkNFCisKK2VudW0gcGNpX2JyaWRnZV92ZW5kb3IgeworCVBDSV9CUklER0VfVkVORE9SX0lOVEVMID0gMHgwLAkvKjBiJzAwMDAsMDAwMSAqLworCVBDSV9CUklER0VfVkVORE9SX0FUSSwJCS8qMGInMDAwMCwwMDEwKi8KKwlQQ0lfQlJJREdFX1ZFTkRPUl9BTUQsCQkvKjBiJzAwMDAsMDEwMCovCisJUENJX0JSSURHRV9WRU5ET1JfU0lTLAkJLyowYicwMDAwLDEwMDAqLworCVBDSV9CUklER0VfVkVORE9SX1VOS05PV04sCS8qMGInMDEwMCwwMDAwKi8KKwlQQ0lfQlJJREdFX1ZFTkRPUl9NQVgsCit9OworCitzdHJ1Y3QgcnRsX3BjaV9jYXBhYmlsaXRpZXNfaGVhZGVyIHsKKwl1OCBjYXBhYmlsaXR5X2lkOworCXU4IG5leHQ7Cit9OworCisvKiBJbiBuZXcgVFJYIGZsb3csIEJ1ZmZlcl9kZXNjIGlzIG5ldyBjb25jZXB0CisgICogQnV0IFRYIHdpZmkgaW5mbyA9PSBUWCBkZXNjcmlwdG9yIGluIG9sZCBmbG93CisgICogUlggd2lmaSBpbmZvID09IFJYIGRlc2NyaXB0b3IgaW4gb2xkIGZsb3cgKi8KK3N0cnVjdCBydGxfdHhfYnVmZmVyX2Rlc2MgeworI2lmIChSVEw4MTkyRUVfU0VHX05VTSA9PSAyKQorCXUzMiBkd29yZFsyKihETUFfSVNfNjRCSVQgKyAxKSo4XTsgLypzZWcgPSA4Ki8KKyNlbGlmIChSVEw4MTkyRUVfU0VHX05VTSA9PSAxKQorCXUzMiBkd29yZFsyKihETUFfSVNfNjRCSVQgKyAxKSo0XTsgLypzZWcgPSA0Ki8KKyNlbGlmIChSVEw4MTkyRUVfU0VHX05VTSA9PSAwKQorCXUzMiBkd29yZFsyKihETUFfSVNfNjRCSVQgKyAxKSoyXTsgLypzZWcgPSAyKi8KKyNlbmRpZgorfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF90eF9kZXNjIHsvKm9sZDogdHggZGVzYyBuZXc6IHR4IHdpZmkgaW5mbyovCisJdTMyIGR3b3JkWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBydGxfcnhfYnVmZmVyX2Rlc2MgeyAvKnJ4IGJ1ZmZlciBkZXNjKi8KKwl1MzIgZHdvcmRbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnRsX3J4X2Rlc2MgeyAvKm9sZDogcnggZGVzYyBuZXc6IHJ4IHdpZmkgaW5mbyovCisJdTMyIGR3b3JkWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF90eF9jbWRfZGVzYyB7CisJdTMyIGR3b3JkWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBydGw4MTkyX3R4X3JpbmcgeworCXN0cnVjdCBydGxfdHhfZGVzYyAqZGVzYzsgLyp0eCBkZXNjIC8gdHggd2lmaSBpbmZvKi8KKwlkbWFfYWRkcl90IGRtYTsgLyp0eCBkZXNjIGRtYSBtZW1vcnkgLyB0eCB3aWZpIGluZm8gZG1hIG1lbW9yeSovCisJdW5zaWduZWQgaW50IGlkeDsKKwl1bnNpZ25lZCBpbnQgZW50cmllczsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOworCS8qYWRkIGZvciBuZXcgdHJ4IGZsb3cqLworCXN0cnVjdCBydGxfdHhfYnVmZmVyX2Rlc2MgKmJ1ZmZlcl9kZXNjOyAvKnR4IGJ1ZmZlciBkZXNjcmlwdG9yKi8KKwlkbWFfYWRkcl90IGJ1ZmZlcl9kZXNjX2RtYTsgLyp0eCBidWZmZXJkIGRlc2MgZG1hIG1lbW9yeSovCisJdTE2IGF2bF9kZXNjOyAvKiBhdmFpbGFibGVfZGVzY190b193cml0ZSAqLworCXUxNiBjdXJfdHhfd3A7IC8qIGN1cnJlbnRfdHhfd3JpdGVfcG9pbnQgKi8KKwl1MTYgY3VyX3R4X3JwOyAvKiBjdXJyZW50X3R4X3JlYWRfcG9pbnQgKi8KK307CisKK3N0cnVjdCBydGw4MTkyX3J4X3JpbmcgeworCXN0cnVjdCBydGxfcnhfZGVzYyAqZGVzYzsvKmZvciBvbGQgdHJ4IGZsb3csIG5vdCB1ZXNkIGluIG5ldyB0cngqLworCS8qZG1hIG1hdGNoZXMgZWl0aGVyICdkZXNjJyBvciAnYnVmZmVyX2Rlc2MnKi8KKwlkbWFfYWRkcl90IGRtYTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXN0cnVjdCBza19idWZmICpyeF9idWZbUlRMX1BDSV9NQVhfUlhfQ09VTlRdOworCS8qYWRkIGZvciBuZXcgdHJ4IGZsb3cqLworCXN0cnVjdCBydGxfcnhfYnVmZmVyX2Rlc2MgKmJ1ZmZlcl9kZXNjOyAvKnJ4IGJ1ZmZlciBkZXNjcmlwdG9yKi8KKwl1MTYgbmV4dF9yeF9ycDsgLyogbmV4dF9yeF9yZWFkX3BvaW50ICovCit9OworCitzdHJ1Y3QgcnRsX3BjaSB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJYm9vbCBpcnFfZW5hYmxlZDsKKworCS8qVHggKi8KKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nIHR4X3JpbmdbUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlRdOworCWludCB0eHJpbmdjb3VudFtSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVF07CisJdTMyIHRyYW5zbWl0X2NvbmZpZzsKKworCS8qUnggKi8KKwlzdHJ1Y3QgcnRsODE5Ml9yeF9yaW5nIHJ4X3JpbmdbUlRMX1BDSV9NQVhfUlhfUVVFVUVdOworCWludCByeHJpbmdjb3VudDsKKwl1MTYgcnhidWZmZXJzaXplOworCXUzMiByZWNlaXZlX2NvbmZpZzsKKworCS8qaXJxICovCisJdTggaXJxX2FsbG9jOworCXUzMiBpcnFfbWFza1syXTsKKwl1MzIgc3lzX2lycV9tYXNrOworCisJLypCY24gY29udHJvbCByZWdpc3RlciBzZXR0aW5nICovCisJdTMyIHJlZ19iY25fY3RybF92YWw7CisKKwkgLypBU1BNKi8gdTggY29uc3RfcGNpX2FzcG07CisJdTggY29uc3RfYW1kcGNpX2FzcG07CisJdTggY29uc3RfaHdzd19yZm9mZl9kMzsKKwl1OCBjb25zdF9zdXBwb3J0X3BjaWFzcG07CisJLypwY2ktZSBicmlkZ2UgKi8KKwl1OCBjb25zdF9ob3N0cGNpX2FzcG1fc2V0dGluZzsKKwkvKnBjaS1lIGRldmljZSAqLworCXU4IGNvbnN0X2RldmljZXBjaV9hc3BtX3NldHRpbmc7CisJLypJZiBpdCBzdXBwb3J0cyBBU1BNLCBPZmZzZXRbNTYwaF0gPSAweDQwLAorCSAgIG90aGVyd2lzZSBPZmZzZXRbNTYwaF0gPSAweDAwLiAqLworCWJvb2wgYl9zdXBwb3J0X2FzcG07CisJYm9vbCBiX3N1cHBvcnRfYmFja2Rvb3I7CisKKwkvKlFPUyAmIEVEQ0EgKi8KKwllbnVtIGFjbV9tZXRob2QgYWNtX21ldGhvZDsKKworCXUxNiBzaG9ydHJldHJ5X2xpbWl0OworCXUxNiBsb25ncmV0cnlfbGltaXQ7CisKKwkvKiBNU0kgc3VwcG9ydCAqLworCWJvb2wgbXNpX3N1cHBvcnQ7CisJYm9vbCB1c2luZ19tc2k7Cit9OworCitzdHJ1Y3QgbXBfYWRhcHRlciB7CisJdTggbGlua2N0cmxfcmVnOworCisJdTggYnVzbnVtYmVyOworCXU4IGRldm51bWJlcjsKKwl1OCBmdW5jbnVtYmVyOworCisJdTggcGNpYnJpZGdlX2J1c251bTsKKwl1OCBwY2licmlkZ2VfZGV2bnVtOworCXU4IHBjaWJyaWRnZV9mdW5jbnVtOworCisJdTggcGNpYnJpZGdlX3ZlbmRvcjsKKwl1MTYgcGNpYnJpZGdlX3ZlbmRvcmlkOworCXUxNiBwY2licmlkZ2VfZGV2aWNlaWQ7CisKKwl1MzIgcGNpY2ZnX2FkZHJwb3J0OworCXU4IG51bTRieXRlczsKKworCXU4IHBjaWJyaWRnZV9wY2llaGRyX29mZnNldDsKKwl1OCBwY2licmlkZ2VfbGlua2N0cmxyZWc7CisKKwlib29sIGFtZF9sMV9wYXRjaDsKK307CisKK3N0cnVjdCBydGxfcGNpX3ByaXYgeworCXN0cnVjdCBydGxfcGNpIGRldjsKKwlzdHJ1Y3QgbXBfYWRhcHRlciBuZGlzX2FkYXB0ZXI7CisJc3RydWN0IHJ0bF9sZWRfY3RsIGxlZGN0bDsKKwlzdHJ1Y3QgYnRfY29leGlzdF9pbmZvIGJ0Y29leGlzdDsKK307CisKKyNkZWZpbmUgcnRsX3BjaXByaXYoaHcpCQkoKChzdHJ1Y3QgcnRsX3BjaV9wcml2ICopKHJ0bF9wcml2KGh3KSktPnByaXYpKQorI2RlZmluZSBydGxfcGNpZGV2KHBjaXByaXYpCSgmKChwY2lwcml2KS0+ZGV2KSkKKworaW50IHJ0bDkyZV9wY2lfcmVzZXRfdHJ4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCitleHRlcm4gc3RydWN0IHJ0bF9pbnRmX29wcyBydGw5MmVfcGNpX29wczsKKworaW50IHN0Z19ydGxfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwordm9pZCBzdGdfcnRsX3BjaV9kaXNjb25uZWN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2ludCBzdGdfcnRsX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgc3RnX3J0bF9wY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK3N0YXRpYyBpbmxpbmUgdTggcGNpX3JlYWQ4X3N5bmMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gMHhmZiAmIHJlYWRiKCh1OCBfX2lvbWVtICopcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBwY2lfcmVhZDE2X3N5bmMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoKHU4IF9faW9tZW0gKilydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBjaV9yZWFkMzJfc3luYyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKQoreworCXJldHVybiByZWFkbCgodTggX19pb21lbSAqKXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV93cml0ZThfYXN5bmMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTggdmFsKQoreworCXdyaXRlYih2YWwsICh1OCBfX2lvbWVtICopcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3dyaXRlMTZfYXN5bmMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgICAgdTMyIGFkZHIsIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgKHU4IF9faW9tZW0gKilydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfd3JpdGUzMl9hc3luYyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJICAgICB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCAodTggX19pb21lbSAqKXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcodTMyIHBvcnQsIHUzMiB2YWwpCit7CisJb3V0bCh2YWwsIHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91Y2hhcih1MzIgcG9ydCwgdTggdmFsKQoreworCW91dGIodmFsLCBwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF9wY2lfcmF3X3JlYWRfcG9ydF91Y2hhcih1MzIgcG9ydCwgdTggKnB2YWwpCit7CisJKnB2YWwgPSBpbmIocG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfcGNpX3Jhd19yZWFkX3BvcnRfdXNob3J0KHUzMiBwb3J0LCB1MTYgKnB2YWwpCit7CisJKnB2YWwgPSBpbncocG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfcGNpX3Jhd19yZWFkX3BvcnRfdWxvbmcodTMyIHBvcnQsIHUzMiAqcHZhbCkKK3sKKwkqcHZhbCA9IGlubChwb3J0KTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjM2ZjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcHMuYwpAQCAtMCwwICsxLDk4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgImJhc2UuaCIKKyNpbmNsdWRlICJwcy5oIgorI2luY2x1ZGUgImJ0Y29leGlzdC9ydGxfYnRjLmgiCisKK2Jvb2wgc3RnX3J0bF9wc19lbmFibGVfbmljKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWJvb2wgaW5pdF9zdGF0dXMgPSB0cnVlOworCisJLyo8MT4gcmVzZXQgdHJ4IHJpbmcgKi8KKwlpZiAocnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpCisJCXJ0bHByaXYtPmludGZfb3BzLT5yZXNldF90cnhfcmluZyhodyk7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLCAoIkRyaXZlciBpcyBhbHJlYWR5IGRvd24hXG4iKSk7CisKKwkvKjwyPiBFbmFibGUgQWRhcHRlciAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5od19pbml0KGh3KTsKKwlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisJLyppbml0X3N0YXR1cyA9IGZhbHNlOyAqLworCisJLyo8Mz4gRW5hYmxlIEludGVycnVwdCAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaW50ZXJydXB0KGh3KTsKKworCS8qPGVuYWJsZSB0aW1lcj4gKi8KKwlydGw5MmVfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nKWh3KTsKKworCXJldHVybiBpbml0X3N0YXR1czsKK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9wc19lbmFibGVfbmljKTsKKworYm9vbCBzdGdfcnRsX3BzX2Rpc2FibGVfbmljKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWJvb2wgc3RhdHVzID0gdHJ1ZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwkvKjwxPiBTdG9wIGFsbCB0aW1lciAqLworCXJ0bDkyZV9kZWluaXRfZGVmZXJyZWRfd29yayhodyk7CisKKwkvKjwyPiBEaXNhYmxlIEludGVycnVwdCAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5kaXNhYmxlX2ludGVycnVwdChodyk7CisKKwkvKjwzPiBEaXNhYmxlIEFkYXB0ZXIgKi8KKwlydGxwcml2LT5jZmctPm9wcy0+aHdfZGlzYWJsZShodyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTChzdGdfcnRsX3BzX2Rpc2FibGVfbmljKTsKKworYm9vbCBzdGdfcnRsX3BzX3NldF9yZl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgZW51bSByZl9wd3JzdGF0ZSBzdGF0ZV90b3NldCwKKwkJCSAgICAgdTMyIGNoYW5nZXNvdXJjZSwgYm9vbCBwcm90ZWN0X29yX25vdCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJZW51bSByZl9wd3JzdGF0ZSBydHN0YXRlOworCWJvb2wgYl9hY3Rpb25hbGxvd2VkID0gZmFsc2U7CisJdTE2IHJmd2FpdF9jbnQgPSAwOworCisJLypwcm90ZWN0X29yX25vdCA9IHRydWU7ICovCisKKwlpZiAocHJvdGVjdF9vcl9ub3QpCisJCWdvdG8gbm9fcHJvdGVjdDsKKworCS8qCisJICpPbmx5IG9uZSB0aHJlYWQgY2FuIGNoYW5nZQorCSAqdGhlIFJGIHN0YXRlIGF0IG9uZSB0aW1lLCBhbmQgb3RoZXJzCisJICpzaG91bGQgd2FpdCB0byBiZSBleGVjdXRlZC4KKwkgKi8KKwl3aGlsZSAodHJ1ZSkgeworCQlzcGluX2xvY2soJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCQlpZiAocHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQkJc3Bpbl91bmxvY2soJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJICgiUkYgQ2hhbmdlIGluIHByb2dyZXNzISBXYWl0IHRvIHNldC4uc3RhdGVfdG9zZXQoJWQpXG4iLAorCQkJCSAgc3RhdGVfdG9zZXQpKTsKKworCQkJLyogU2V0IFJGIGFmdGVyIHRoZSBwcmV2aW91cyBhY3Rpb24gaXMgZG9uZS4gICovCisJCQl3aGlsZSAocHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQkJCXJmd2FpdF9jbnQrKzsKKwkJCQltZGVsYXkoMSk7CisJCQkJLyoKKwkJCQkgKldhaXQgdG9vIGxvbmcsIHJldHVybiBmYWxzZSB0byBhdm9pZAorCQkJCSAqdG8gYmUgc3R1Y2sgaGVyZS4KKwkJCQkgKi8KKwkJCQlpZiAocmZ3YWl0X2NudCA+IDEwMCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9IGVsc2UgeworCQkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IHRydWU7CisJCQlzcGluX3VubG9jaygmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jayk7CisJCQlicmVhazsKKwkJfQorCX0KKworbm9fcHJvdGVjdDoKKwlydHN0YXRlID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisKKwlzd2l0Y2ggKHN0YXRlX3Rvc2V0KSB7CisJY2FzZSBFUkZPTjoKKwkJcHBzYy0+cmZvZmZfcmVhc29uICY9ICh+Y2hhbmdlc291cmNlKTsKKworCQlpZiAoKGNoYW5nZXNvdXJjZSA9PSBSRl9DSEFOR0VfQllfSFcpICYmCisJCSAgICAocHBzYy0+Yl9od3JhZGlvb2ZmKSkgeworCQkJcHBzYy0+Yl9od3JhZGlvb2ZmID0gZmFsc2U7CisJCX0KKwkJaWYgKCFwcHNjLT5yZm9mZl9yZWFzb24pIHsKKwkJCXBwc2MtPnJmb2ZmX3JlYXNvbiA9IDA7CisJCQliX2FjdGlvbmFsbG93ZWQgPSB0cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgRVJGT0ZGOgorCQlpZiAoKGNoYW5nZXNvdXJjZSA9PSBSRl9DSEFOR0VfQllfSFcpICYmCisJCSAgICAoIXBwc2MtPmJfaHdyYWRpb29mZikpIHsKKwkJCXBwc2MtPmJfaHdyYWRpb29mZiA9IHRydWU7CisJCX0KKwkJcHBzYy0+cmZvZmZfcmVhc29uIHw9IGNoYW5nZXNvdXJjZTsKKwkJYl9hY3Rpb25hbGxvd2VkID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBFUkZTTEVFUDoKKwkJcHBzYy0+cmZvZmZfcmVhc29uIHw9IGNoYW5nZXNvdXJjZTsKKwkJYl9hY3Rpb25hbGxvd2VkID0gdHJ1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisKKwlpZiAoYl9hY3Rpb25hbGxvd2VkKQorCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X3JmX3Bvd2VyX3N0YXRlKGh3LCBzdGF0ZV90b3NldCk7CisKKwlpZiAoIXByb3RlY3Rfb3Jfbm90KSB7CisJCXNwaW5fbG9jaygmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jayk7CisJCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2soJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCX0KKworCXJldHVybiBiX2FjdGlvbmFsbG93ZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19ydGxfcHNfc2V0X3JmX3N0YXRlKTsKKworc3RhdGljIHZvaWQgX3J0bF9wc19pbmFjdGl2ZV9wcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCXBwc2MtPmJfc3dyZl9wcm9jZXNzaW5nID0gdHJ1ZTsKKworCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPTiAmJiBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgeworCQlpZiAoKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgJiYKKwkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1BTX0xFVkVMX0FTUE0pICYmCisJCSAgICBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgeworCQkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7CisJCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKTsKKwkJfQorCX0KKworCXN0Z19ydGxfcHNfc2V0X3JmX3N0YXRlKGh3LCBwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSwKKwkJCQlSRl9DSEFOR0VfQllfSVBTLCBmYWxzZSk7CisKKwlpZiAocHBzYy0+aW5hY3RpdmVfcHdyc3RhdGUgPT0gRVJGT0ZGICYmCisJICAgIHJ0bGhhbC0+aW50ZXJmYWNlID09IElOVEZfUENJKSB7CisJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0gJiYKKwkJICAgICFSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKSkgeworCQkJcnRscHJpdi0+aW50Zl9vcHMtPmVuYWJsZV9hc3BtKGh3KTsKKwkJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKTsKKwkJfQorCX0KKworCXBwc2MtPmJfc3dyZl9wcm9jZXNzaW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgcnRsOTJlX2lwc19uaWNfb2ZmX3dxX2NhbGxiYWNrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJ0bF93b3JrcyAqcnRsd29ya3MgPQorCSAgICBjb250YWluZXJfb2ZfZHdvcmtfcnRsKGRhdGEsIHN0cnVjdCBydGxfd29ya3MsIGlwc19uaWNfb2ZmX3dxKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHJ0bHdvcmtzLT5odzsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWVudW0gcmZfcHdyc3RhdGUgcnRzdGF0ZTsKKworCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywgKCJub3Qgc3RhdGlvbiByZXR1cm5cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtYWMtPnAycF9pbl91c2UpCisJCXJldHVybjsKKworCWlmIChtYWMtPmxpbmtfc3RhdGUgPiBNQUM4MDIxMV9OT0xJTkspCisJCXJldHVybjsKKworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+c2VjLmJlaW5nX3NldGtleSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5idF90dXJuX29mZl9idF9jb2V4aXN0X2JlZm9yZV9lbnRlcl9scHMpCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5idF90dXJuX29mZl9idF9jb2V4aXN0X2JlZm9yZV9lbnRlcl9scHMoaHcpOworCisJaWYgKHBwc2MtPmJfaW5hY3RpdmVwcykgeworCQlydHN0YXRlID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisKKwkJLyoKKwkJICpEbyBub3QgZW50ZXIgSVBTIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkJICooMSkgUkYgaXMgYWxyZWFkeSBPRkYgb3IgU2xlZXAKKwkJICooMikgYl9zd3JmX3Byb2Nlc3NpbmcgKGluZGljYXRlcyB0aGUgSVBTIGlzIHN0aWxsIHVuZGVyIGdvaW5nKQorCQkgKigzKSBDb25uZWN0dGVkIChvbmx5IGRpc2Nvbm5lY3RlZCBjYW4gdHJpZ2dlciBJUFMpCisJCSAqKDQpIElCU1MgKHNlbmQgQmVhY29uKQorCQkgKig1KSBBUCBtb2RlIChzZW5kIEJlYWNvbikKKwkJICooNikgbW9uaXRvciBtb2RlIChyY3YgcGFja2V0KQorCQkgKi8KKworCQlpZiAocnRzdGF0ZSA9PSBFUkZPTiAmJgorCQkgICAgIXBwc2MtPmJfc3dyZl9wcm9jZXNzaW5nICYmCisJCSAgICAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX05PTElOSykgJiYKKwkJICAgICFtYWMtPmFjdF9zY2FubmluZykgeworCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsCisJCQkJICgiSVBTRW50ZXIoKTogVHVybiBvZmYgUkYuXG4iKSk7CisKKwkJCXBwc2MtPmluYWN0aXZlX3B3cnN0YXRlID0gRVJGT0ZGOworCQkJcHBzYy0+Yl9pbl9wb3dlcnNhdmVtb2RlID0gdHJ1ZTsKKworCQkJLyogY2FsbCBiZWZvcmUgUkYgb2ZmICovCisJCQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9idGNfc3RhdHVzKCkpCisJCQkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19pcHNfbm90aWZ5KHJ0bHByaXYsCisJCQkJCQkJCQlwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSk7CisKKwkJCS8qcnRsOTJlX3BjaV9yZXNldF90cnhfcmluZyhodyk7ICovCisJCQlfcnRsX3BzX2luYWN0aXZlX3BzKGh3KTsKKwkJfQorCX0KK30KKwordm9pZCBydGw5MmVfaXBzX25pY19vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJLyoKKwkgKmJlY2F1c2Ugd2hlbiBsaW5rIHdpdGggYXAsIG1hYzgwMjExIHdpbGwgYXNrIHVzCisJICp0byBkaXNhYmxlIG5pYyBxdWlja2x5IGFmdGVyIHNjYW4gYmVmb3JlIGxpbmtpbmcsCisJICp0aGlzIHdpbGwgY2F1c2UgbGluayBmYWlsZWQsIHNvIHdlIGRlbGF5IDEwMG1zIGhlcmUKKwkgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsocnRscHJpdi0+d29ya3MucnRsX3dxLAorCQkJICAgJnJ0bHByaXYtPndvcmtzLmlwc19uaWNfb2ZmX3dxLCBNU0VDUygxMDApKTsKK30KKworLyogTk9USUNFOiBhbnkgb3Btb2RlIHNob3VsZCBleGMgbmljX29uLCBvciBkaXNhYmxlIHdpdGhvdXQKKyAqIG5pY19vbiBtYXkgc29tZXRoaW5nIHdyb25nLCBsaWtlIGFkaG9jIFRQKi8KK3ZvaWQgcnRsOTJlX2lwc19uaWNfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWVudW0gcmZfcHdyc3RhdGUgcnRzdGF0ZTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLmlwc19uaWNfb2ZmX3dxKTsKKworCXNwaW5fbG9jaygmcnRscHJpdi0+bG9ja3MuaXBzX2xvY2spOworCWlmIChwcHNjLT5iX2luYWN0aXZlcHMpIHsKKwkJcnRzdGF0ZSA9IHBwc2MtPnJmcHdyX3N0YXRlOworCisJCWlmIChydHN0YXRlICE9IEVSRk9OICYmCisJCSAgICAhcHBzYy0+Yl9zd3JmX3Byb2Nlc3NpbmcgJiYKKwkJICAgIHBwc2MtPnJmb2ZmX3JlYXNvbiA8PSBSRl9DSEFOR0VfQllfSVBTKSB7CisJCQlwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9IEVSRk9OOworCQkJcHBzYy0+Yl9pbl9wb3dlcnNhdmVtb2RlID0gZmFsc2U7CisJCQlfcnRsX3BzX2luYWN0aXZlX3BzKGh3KTsKKwkJCS8qIGNhbGwgYWZ0ZXIgUkYgb24gKi8KKwkJCWlmIChydGxwcml2LT5jZmctPm9wcy0+Z2V0X2J0Y19zdGF0dXMoKSkKKwkJCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX29wcy0+YnRjX2lwc19ub3RpZnkocnRscHJpdiwKKwkJCQkJCQkJCXBwc2MtPmluYWN0aXZlX3B3cnN0YXRlKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcnRscHJpdi0+bG9ja3MuaXBzX2xvY2spOworfQorCisvKmZvciBGVyBMUFMqLworCisvKgorICpEZXRlcm1pbmUgaWYgd2UgY2FuIHNldCBGdyBpbnRvIFBTIG1vZGUKKyAqaW4gY3VycmVudCBjb25kaXRpb24uUmV0dXJuIHRydWUgaWYgaXQKKyAqY2FuIGVudGVyIFBTIG1vZGUuCisgKi8KK3N0YXRpYyBib29sIHJ0bF9nZXRfZndscHNfZG96ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwl1MzIgcHNfdGltZWRpZmY7CisKKwlwc190aW1lZGlmZiA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJICAgICAgIHBwc2MtPmxhc3RfZGVsYXlscHNfc3RhbXBfamlmZmllcyk7CisKKwlpZiAocHNfdGltZWRpZmYgPCAyMDAwKSB7CisJCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiRGVsYXkgZW50ZXIgRncgTFBTIGZvciBESENQLCBBUlAsIG9yIEVBUE9MIGV4Y2hhbmdpbmcgc3RhdGVcbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChtYWMtPmxpbmtfc3RhdGUgIT0gTUFDODAyMTFfTElOS0VEKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKiBDaGFuZ2UgY3VycmVudCBhbmQgZGVmYXVsdCBwcmVhbWJsZSBtb2RlLiovCit2b2lkIHJ0bF9scHNfc2V0X3BzbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcnRfcHNtb2RlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWJvb2wgZW50ZXJfZndscHM7CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybjsKKworCWlmIChtYWMtPmxpbmtfc3RhdGUgIT0gTUFDODAyMTFfTElOS0VEKQorCQlyZXR1cm47CisKKwlpZiAocHBzYy0+ZG90MTFfcHNtb2RlID09IHJ0X3BzbW9kZSkKKwkJcmV0dXJuOworCisJLyogVXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBjb25maWd1cmVkLiAqLworCXBwc2MtPmRvdDExX3BzbW9kZSA9IHJ0X3BzbW9kZTsKKworCS8qCisJICo8RlcgY29udHJvbCBMUFM+CisJICoxLiBFbnRlciBQUyBtb2RlCisJICogICBTZXQgUlBXTSB0byBGdyB0byB0dXJuIFJGIG9mZiBhbmQgc2VuZCBIMkMgZndfcHdybW9kZQorCSAqICAgY21kIHRvIHNldCBGdyBpbnRvIFBTIG1vZGUuCisJICoyLiBMZWF2ZSBQUyBtb2RlCisJICogICBTZW5kIEgyQyBmd19wd3Jtb2RlIGNtZCB0byBGdyB0byBzZXQgRncgaW50byBBY3RpdmUKKwkgKiAgIG1vZGUgYW5kIHNldCBSUFdNIHRvIHR1cm4gUkYgb24uCisJICovCisKKwlpZiAoKHBwc2MtPmJfZndjdHJsX2xwcykgJiYgcHBzYy0+cmVwb3J0X2xpbmtlZCkgeworCQlpZiAocHBzYy0+ZG90MTFfcHNtb2RlID09IEVBQ1RJVkUpIHsKKwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19ETUVTRywKKwkJCQkgKCJGVyBMUFMgbGVhdmUgcHNfbW9kZToleFxuIiwKKwkJCQkgIEZXX1BTX0FDVElWRV9NT0RFKSk7CisJCQllbnRlcl9md2xwcyA9IGZhbHNlOworCQkJcHBzYy0+cHdyX21vZGUgPSBGV19QU19BQ1RJVkVfTU9ERTsKKwkJCXBwc2MtPnNtYXJ0X3BzID0gMDsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRldfTFBTX0FDVElPTiwKKwkJCQkJCSAgICAgICh1OCAqKSgmZW50ZXJfZndscHMpKTsKKwkJCWlmIChwcHNjLT5wMnBfcHNfaW5mby5vcHBfcHMpCisJCQkJcnRsOTJlX3AycF9wc19jbWQoaHcgLCBQMlBfUFNfRU5BQkxFKTsKKworCQkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfYnRjX3N0YXR1cygpKQorCQkJCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfb3BzLT5idGNfbHBzX25vdGlmeShydGxwcml2LCBydF9wc21vZGUpOworCQl9IGVsc2UgeworCQkJaWYgKHJ0bF9nZXRfZndscHNfZG96ZShodykpIHsKKwkJCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJCSAoIkZXIExQUyBlbnRlciBwc19tb2RlOiV4XG4iLAorCQkJCQkgcHBzYy0+ZndjdHJsX3BzbW9kZSkpOworCQkJCWlmIChydGxwcml2LT5jZmctPm9wcy0+Z2V0X2J0Y19zdGF0dXMoKSkKKwkJCQkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19scHNfbm90aWZ5KHJ0bHByaXYsIHJ0X3BzbW9kZSk7CisJCQkJZW50ZXJfZndscHMgPSB0cnVlOworCQkJCXBwc2MtPnB3cl9tb2RlID0gcHBzYy0+ZndjdHJsX3BzbW9kZTsKKwkJCQlwcHNjLT5zbWFydF9wcyA9IDI7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCQkJSFdfVkFSX0ZXX0xQU19BQ1RJT04sCisJCQkJCQkJKHU4ICopKCZlbnRlcl9md2xwcykpOworCisJCQl9IGVsc2UgeworCQkJCS8qIFJlc2V0IHRoZSBwb3dlciBzYXZlIHJlbGF0ZWQgcGFyYW1ldGVycy4gKi8KKwkJCQlwcHNjLT5kb3QxMV9wc21vZGUgPSBFQUNUSVZFOworCQkJfQorCQl9CisJfQorfQorCisvKkVudGVyIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4qLwordm9pZCBydGw5MmVfbHBzX2VudGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWlmICghcHBzYy0+Yl9md2N0cmxfbHBzKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+c2VjLmJlaW5nX3NldGtleSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5iX2J1c3l0cmFmZmljKQorCQlyZXR1cm47CisKKwkvKnNsZWVwIGFmdGVyIGxpbmtlZCAxMHMsIHRvIGxldCBESENQIGFuZCA0LXdheSBoYW5kc2hha2Ugb2sgZW5vdWdoISEgKi8KKwlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkIDwgNSkKKwkJcmV0dXJuOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm47CisKKwlpZiAobWFjLT5saW5rX3N0YXRlICE9IE1BQzgwMjExX0xJTktFRCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKKworCS8qIElkbGUgZm9yIGEgd2hpbGUgaWYgd2UgY29ubmVjdCB0byBBUCBhIHdoaWxlIGFnby4gKi8KKwlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkID49IDIpIHsKKwkJaWYgKHBwc2MtPmRvdDExX3BzbW9kZSA9PSBFQUNUSVZFKSB7CisJCQlSVF9UUkFDRShDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJFbnRlciA4MDIuMTEgcG93ZXIgc2F2ZSBtb2RlLi4uXG4iKSk7CisKKwkJCXJ0bF9scHNfc2V0X3BzbW9kZShodywgRUFVVE9QUyk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bDkyZV9scHNfZW50ZXIpOworCisvKkxlYXZlIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4qLwordm9pZCBydGw5MmVfbHBzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisKKwlpZiAocHBzYy0+Yl9md2N0cmxfbHBzKSB7CisJCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgIT0gRUFDVElWRSkgeworCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfTFBTX0xFVkVMX0FTUE0gJiYKKwkJCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKSAmJgorCQkJICAgIHJ0bGhhbC0+aW50ZXJmYWNlID09IElOVEZfUENJKSB7CisJCQkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7CisJCQkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CisJCQl9CisKKwkJCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJCSAoIkJ1c3kgVHJhZmZpYyxMZWF2ZSA4MDIuMTEgcG93ZXIgc2F2ZS4uXG4iKSk7CisKKwkJCXJ0bF9scHNfc2V0X3BzbW9kZShodywgRUFDVElWRSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MubHBzX2xvY2ssIGZsYWcpOworfQorRVhQT1JUX1NZTUJPTChydGw5MmVfbHBzX2xlYXZlKTsKKworLyogRm9yIHN3IExQUyovCit2b2lkIHJ0bDkyZV9zd2xwc19iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltX2llOworCXU4ICp0aW07CisJdTggdGltX2xlbjsKKwlib29sIHVfYnVmZmVkOworCWJvb2wgbV9idWZmZWQ7CisKKwlpZiAobWFjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5wc2MuYl9zd2N0cmxfbHBzKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpCisJCXJldHVybjsKKworCWlmICghcnRscHJpdi0+cHNjLnN3X3BzX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChydGxwcml2LT5wc2MuYl9md2N0cmxfbHBzKQorCQlyZXR1cm47CisKKwlpZiAobGlrZWx5KCEoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpKQorCQlyZXR1cm47CisKKwkvKiBjaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIGJlYWNvbiAqLworCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm47CisKKwkvKiBtaW4uIGJlYWNvbiBsZW5ndGggKyBGQ1NfTEVOICovCisJaWYgKGxlbiA8PSA0MCArIEZDU19MRU4pCisJCXJldHVybjsKKworCS8qIGFuZCBvbmx5IGJlYWNvbnMgZnJvbSB0aGUgYXNzb2NpYXRlZCBCU1NJRCwgcGxlYXNlICovCisJaWYgKCFldGhlcl9hZGRyX2VxdWFsKGhkci0+YWRkcjMsIHJ0bHByaXYtPm1hYzgwMjExLmJzc2lkKSkKKwkJcmV0dXJuOworCisJcnRscHJpdi0+cHNjLmxhc3RfYmVhY29uID0gamlmZmllczsKKworCXRpbSA9IHJ0bDkyZV9maW5kX2llKGRhdGEsIGxlbiAtIEZDU19MRU4sIFdMQU5fRUlEX1RJTSk7CisJaWYgKCF0aW0pCisJCXJldHVybjsKKworCWlmICh0aW1bMV0gPCBzaXplb2YoKnRpbV9pZSkpCisJCXJldHVybjsKKworCXRpbV9sZW4gPSB0aW1bMV07CisJdGltX2llID0gKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopJnRpbVsyXTsKKworCWlmICghV0FSTl9PTl9PTkNFKCFody0+Y29uZi5wc19kdGltX3BlcmlvZCkpCisJCXJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgPSB0aW1faWUtPmR0aW1fY291bnQ7CisKKwkvKiBDaGVjayB3aGVuZXZlciB0aGUgUEhZIGNhbiBiZSB0dXJuZWQgb2ZmIGFnYWluLiAqLworCisJLyogMS4gV2hhdCBhYm91dCBidWZmZXJlZCB1bmljYXN0IHRyYWZmaWMgZm9yIG91ciBBSUQ/ICovCisJdV9idWZmZWQgPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwKKwkJCQkgICAgICAgcnRscHJpdi0+bWFjODAyMTEuYXNzb2NfaWQpOworCisJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLworCW1fYnVmZmVkID0gdGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDE7CisJcnRscHJpdi0+cHNjLm11bHRpX2J1ZmZlcmVkID0gbV9idWZmZWQ7CisKKwkvKiB1bmljYXN0IHdpbGwgcHJvY2VzcyBieSBtYWM4MDIxMSB0aHJvdWdoCisJICogc2V0IH5JRUVFODAyMTFfQ09ORl9QUywgU28gd2UganVzdCBjaGVjaworCSAqIG11bHRpY2FzdCBmcmFtZXMgaGVyZSAqLworCWlmICghbV9idWZmZWQpIHsvKiYmKSB7ICFydGxwcml2LT5wc2MudHhfZG9pbmcpIHsgKi8KKwkJLyogYmFjayB0byBsb3ctcG93ZXIgbGFuZC4gYW5kIGRlbGF5IGlzCisJCSAqIHByZXZlbnQgbnVsbCBwb3dlciBzYXZlIGZyYW1lIHR4IGZhaWwgKi8KKwkJcXVldWVfZGVsYXllZF93b3JrKHJ0bHByaXYtPndvcmtzLnJ0bF93cSwKKwkJCQkgICAmcnRscHJpdi0+d29ya3MucHNfd29yaywgTVNFQ1MoNSkpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCSAoInVfYnVmZmVyZDogJXgsIG1fYnVmZmVyZWQ6ICV4XG4iLAorCQkJICB1X2J1ZmZlZCwgbV9idWZmZWQpKTsKKwl9Cit9CisKK3ZvaWQgcnRsOTJlX3N3bHBzX3JmX2F3YWtlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWlmICghcnRscHJpdi0+cHNjLmJfc3djdHJsX2xwcykKKwkJcmV0dXJuOworCWlmIChtYWMtPmxpbmtfc3RhdGUgIT0gTUFDODAyMTFfTElOS0VEKQorCQlyZXR1cm47CisKKwlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9MUFNfTEVWRUxfQVNQTSAmJgorCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKSkgeworCQlydGxwcml2LT5pbnRmX29wcy0+ZGlzYWJsZV9hc3BtKGh3KTsKKwkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKKwlzdGdfcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGT04sIFJGX0NIQU5HRV9CWV9QUywgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKK30KKwordm9pZCBydGw5MmVfc3dscHNfcmZvbl93cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0KKwkgICAgY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLCBzdHJ1Y3QgcnRsX3dvcmtzLCBwc19yZm9uX3dxKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHJ0bHdvcmtzLT5odzsKKworCXJ0bDkyZV9zd2xwc19yZl9hd2FrZShodyk7Cit9CisKK3ZvaWQgcnRsOTJlX3N3bHBzX3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1OCBzbGVlcF9pbnR2OworCisJaWYgKCFydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKChydGxwcml2LT5zZWMuYmVpbmdfc2V0a2V5KSB8fAorCSAgICAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlyZXR1cm47CisKKwkvKnNsZWVwIGFmdGVyIGxpbmtlZCAxMHMsIHRvIGxldCBESENQIGFuZCA0LXdheSBoYW5kc2hha2Ugb2sgZW5vdWdoISEgKi8KKwlpZiAoKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHx8IChtYWMtPmNudF9hZnRlcl9saW5rZWQgPCA1KSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5iX2J1c3l0cmFmZmljKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCWlmIChydGxwcml2LT5wc2MucmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQlzcGluX3VubG9jaygmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2soJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKKwlzdGdfcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGU0xFRVAsIFJGX0NIQU5HRV9CWV9QUyAsIGZhbHNlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisKKwlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9BU1BNICYmCisJICAgICFSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKSkgeworCQlydGxwcml2LT5pbnRmX29wcy0+ZW5hYmxlX2FzcG0oaHcpOworCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CisJfQorCisJLyogaGVyZSBpcyBwb3dlciBzYXZlIGFsZywgd2hlbiB0aGlzIGJlYWNvbiBpcyBEVElNCisJICogd2Ugd2lsbCBzZXQgc2xlZXAgdGltZSB0byBkdGltX3BlcmlvZCAqIG47CisJICogd2hlbiB0aGlzIGJlYWNvbiBpcyBub3QgRFRJTSwgd2Ugd2lsbCBzZXQgc2xlZXAKKwkgKiB0aW1lIHRvIHNsZWVwX2ludHYgPSBydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyIG9yCisJICogTUFYX1NXX0xQU19TTEVFUF9JTlRWKGRlZmF1bHQgc2V0IHRvIDUpICovCisKKwlpZiAocnRscHJpdi0+cHNjLmR0aW1fY291bnRlciA9PSAwKSB7CisJCWlmIChody0+Y29uZi5wc19kdGltX3BlcmlvZCA9PSAxKQorCQkJc2xlZXBfaW50diA9IGh3LT5jb25mLnBzX2R0aW1fcGVyaW9kICogMjsKKwkJZWxzZQorCQkJc2xlZXBfaW50diA9IGh3LT5jb25mLnBzX2R0aW1fcGVyaW9kOworCX0gZWxzZSB7CisJCXNsZWVwX2ludHYgPSBydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyOworCX0KKworCWlmIChzbGVlcF9pbnR2ID4gTUFYX1NXX0xQU19TTEVFUF9JTlRWKQorCQlzbGVlcF9pbnR2ID0gTUFYX1NXX0xQU19TTEVFUF9JTlRWOworCisJLyogdGhpcyBwcmludCBzaG91bGQgYWx3YXlzIGJlIGR0aW1fY29udGVyID0gMCAmCisJICogc2xlZXAgID0gZHRpbV9wZXJpb2QsIHRoYXQgbWVhb25zLCB3ZSBzaG91bGQKKwkgKiBhd2FrZSBiZWZvcmUgZXZlcnkgZHRpbSAqLworCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJICgiZHRpbV9jb3VudGVyOiV4IHdpbGwgc2xlZXAgOiVkIGJlYWNvbl9pbnR2XG4iLAorCQkgIHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIsIHNsZWVwX2ludHYpKTsKKworCS8qIHdlIHRlc3RlZCB0aGF0IDQwbXMgaXMgZW5vdWdoIGZvciBzdyAmIGh3IHN3IGRlbGF5ICovCisJcXVldWVfZGVsYXllZF93b3JrKHJ0bHByaXYtPndvcmtzLnJ0bF93cSwgJnJ0bHByaXYtPndvcmtzLnBzX3Jmb25fd3EsCisJCQkgICBNU0VDUyhzbGVlcF9pbnR2Km1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50LTQwKSk7Cit9CisKKwordm9pZCBydGw5MmVfc3dscHNfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3dvcmtzICpydGx3b3JrcyA9CisJCWNvbnRhaW5lcl9vZl9kd29ya19ydGwoZGF0YSwgc3RydWN0IHJ0bF93b3JrcywgcHNfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBydGx3b3Jrcy0+aHc7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWJvb2wgcHMgPSBmYWxzZTsKKworCXBzID0gKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpOworCisJLyogd2UgY2FuIHNsZWVwIGFmdGVyIHBzIG51bGwgc2VuZCBvayAqLworCWlmIChydGxwcml2LT5wc2Muc3RhdGVfaW5hcCkgeworCQlydGw5MmVfc3dscHNfcmZfc2xlZXAoaHcpOworCisJCWlmIChydGxwcml2LT5wc2Muc3RhdGUgJiYgIXBzKSB7CisJCQlydGxwcml2LT5wc2Muc2xlZXBfbXMgPQorCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQkgcnRscHJpdi0+cHNjLmxhc3RfYWN0aW9uKTsKKwkJfQorCisJCWlmIChwcykKKwkJCXJ0bHByaXYtPnBzYy5sYXN0X3NsZXB0ID0gamlmZmllczsKKworCQlydGxwcml2LT5wc2MubGFzdF9hY3Rpb24gPSBqaWZmaWVzOworCQlydGxwcml2LT5wc2Muc3RhdGUgPSBwczsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9wMnBfbm9hX2llKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLAorCQkJICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBydGxfcDJwX3BzX2luZm8gKnAycGluZm8gPSAmKHJ0bHByaXYtPnBzYy5wMnBfcHNfaW5mbyk7CisJdTggKnBvcywgKmVuZCwgKmllOworCXUxNiBub2FfbGVuOworCXN0YXRpYyB1OCBwMnBfb3VpX2llX3R5cGVbNF0gPSB7MHg1MCwgMHg2ZiwgMHg5YSwgMHgwOX07CisJdTggbm9hX251bSwgaW5kZXggLCBpLCBub2FfaW5kZXggPSAwOworCWJvb2wgZmluZF9wMnBfaWUgPSBmYWxzZSAsIGZpbmRfcDJwX3BzX2llID0gZmFsc2U7CisJcG9zID0gKHU4ICopbWdtdC0+dS5iZWFjb24udmFyaWFibGU7CisJZW5kID0gZGF0YSArIGxlbjsKKwlpZSA9IE5VTEw7CisKKwl3aGlsZSAocG9zICsgMSA8IGVuZCkgeworCQlpZiAocG9zICsgMiArIHBvc1sxXSA+IGVuZCkKKwkJCXJldHVybjsKKworCQlpZiAocG9zWzBdID09IDIyMSAmJiBwb3NbMV0gPiA0KSB7CisJCQlpZiAobWVtY21wKCZwb3NbMl0sIHAycF9vdWlfaWVfdHlwZSwgNCkgPT0gMCkgeworCQkJCWllID0gcG9zICsgMis0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXBvcyArPSAyICsgcG9zWzFdOworCX0KKworCWlmIChpZSA9PSBOVUxMKQorCQlyZXR1cm47CisJZmluZF9wMnBfaWUgPSB0cnVlOworCS8qdG8gZmluZCBub2EgaWUqLworCXdoaWxlIChpZSArIDEgPCBlbmQpIHsKKwkJbm9hX2xlbiA9IFJFQURFRjJCWVRFKChfX2xlMTYgKikmaWVbMV0pOworCQlpZiAoaWUgKyAzICsgaWVbMV0gPiBlbmQpCisJCQlyZXR1cm47CisKKwkJaWYgKGllWzBdID09IDEyKSB7CisJCQlmaW5kX3AycF9wc19pZSA9IHRydWU7CisJCQlpZiAoKG5vYV9sZW4gLSAyKSAlIDEzICE9IDApIHsKKwkJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJCQkgKCJQMlAgbm90aWNlIG9mIGFic2VuY2U6IGludmFsaWQgbGVuZ3RoJWRcbiIsCisJCQkJCSBub2FfbGVuKSk7CisJCQkJcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJCQlub2FfbnVtID0gKG5vYV9sZW4gLSAyKSAvIDEzOworCQkJfQorCQkJbm9hX2luZGV4ID0gaWVbM107CisJCQlpZiAocnRscHJpdi0+cHNjLnAycF9wc19pbmZvLnAycF9wc19tb2RlID09CisJCQkgICAgUDJQX1BTX05PTkUgfHwgbm9hX2luZGV4ICE9IHAycGluZm8tPm5vYV9pbmRleCkgeworCQkJCVJUX1RSQUNFKENPTVBfRlcsIERCR19MT1VELAorCQkJCQkgKCJ1cGRhdGUgTk9BIGllLlxuIikpOworCQkJCXAycGluZm8tPm5vYV9pbmRleCA9IG5vYV9pbmRleDsKKwkJCQlwMnBpbmZvLT5vcHBfcHMgPSAoaWVbNF0gPj4gNyk7CisJCQkJcDJwaW5mby0+Y3R3aW5kb3cgPSBpZVs0XSAmIDB4N0Y7CisJCQkJcDJwaW5mby0+bm9hX251bSA9IG5vYV9udW07CisJCQkJaW5kZXggPSA1OworCQkJCWZvciAoaSA9IDA7IGkgPCBub2FfbnVtOyBpKyspIHsKKwkJCQkJcDJwaW5mby0+bm9hX2NvdW50X3R5cGVbaV0gPQorCQkJCQkJCVJFQURFRjFCWVRFKGllK2luZGV4KTsKKwkJCQkJaW5kZXggKz0gMTsKKwkJCQkJcDJwaW5mby0+bm9hX2R1cmF0aW9uW2ldID0KKwkJCQkJCSBSRUFERUY0QllURSgoX19sZTMyICopaWUraW5kZXgpOworCQkJCQlpbmRleCArPSA0OworCQkJCQlwMnBpbmZvLT5ub2FfaW50ZXJ2YWxbaV0gPQorCQkJCQkJIFJFQURFRjRCWVRFKChfX2xlMzIgKilpZStpbmRleCk7CisJCQkJCWluZGV4ICs9IDQ7CisJCQkJCXAycGluZm8tPm5vYV9zdGFydF90aW1lW2ldID0KKwkJCQkJCSBSRUFERUY0QllURSgoX19sZTMyICopaWUraW5kZXgpOworCQkJCQlpbmRleCArPSA0OworCQkJCX0KKworCQkJCWlmIChwMnBpbmZvLT5vcHBfcHMgPT0gMSkgeworCQkJCQlwMnBpbmZvLT5wMnBfcHNfbW9kZSA9IFAyUF9QU19DVFdJTkRPVzsKKwkJCQkJLyogRHJpdmVyIHNob3VsZCB3YWl0IExQUworCQkJCQkgKiBlbnRlcmluZyBDVFdpbmRvdyovCisJCQkJCWlmIChydGxwcml2LT5wc2MuYl9md19jdXJyZW50X2lucHNtb2RlKSB7CisJCQkJCQlydGw5MmVfcDJwX3BzX2NtZChodywKKwkJCQkJCQkgICAgICAgUDJQX1BTX0VOQUJMRSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHAycGluZm8tPm5vYV9udW0gPiAwKSB7CisJCQkJCXAycGluZm8tPnAycF9wc19tb2RlID0gUDJQX1BTX05PQTsKKwkJCQkJcnRsOTJlX3AycF9wc19jbWQoaHcsIFAyUF9QU19FTkFCTEUpOworCQkJCX0gZWxzZSBpZiAocDJwaW5mby0+cDJwX3BzX21vZGUgPiBQMlBfUFNfTk9ORSkgeworCQkJCQlydGw5MmVfcDJwX3BzX2NtZChodywgUDJQX1BTX0RJU0FCTEUpOworCQkJCX0KKwkJCX0KKworCQlicmVhazsKKwkJfQorCQlpZSArPSAzICsgbm9hX2xlbjsKKwl9CisKKwlpZiAoZmluZF9wMnBfaWUpIHsKKwkJaWYgKChwMnBpbmZvLT5wMnBfcHNfbW9kZSA+IFAyUF9QU19OT05FKSAmJgorCQkgICAgKCFmaW5kX3AycF9wc19pZSkpCisJCQlydGw5MmVfcDJwX3BzX2NtZChodywgUDJQX1BTX0RJU0FCTEUpOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsX3AycF9hY3Rpb25faWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IHJ0bF9wMnBfcHNfaW5mbyAqcDJwaW5mbyA9ICYocnRscHJpdi0+cHNjLnAycF9wc19pbmZvKTsKKwlib29sIGZpbmRfcDJwX2llID0gZmFsc2UsIGZpbmRfcDJwX3BzX2llID0gZmFsc2U7CisJdTggbm9hX251bSwgaW5kZXgsIGksIG5vYV9pbmRleCA9IDA7CisJdTggKnBvcywgKmVuZCwgKmllOworCXUxNiBub2FfbGVuOworCXN0YXRpYyB1OCBwMnBfb3VpX2llX3R5cGVbNF0gPSB7MHg1MCwgMHg2ZiwgMHg5YSwgMHgwOX07CisKKwlwb3MgPSAodTggKikmbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnk7CisJZW5kID0gZGF0YSArIGxlbjsKKwlpZSA9IE5VTEw7CisKKwlpZiAocG9zWzBdID09IDB4N2YpIHsKKwkJaWYgKG1lbWNtcCgmcG9zWzFdLCBwMnBfb3VpX2llX3R5cGUsIDQpID09IDApCisJCQlpZSA9IHBvcyArIDMrNDsKKwl9CisKKwlpZiAoaWUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWZpbmRfcDJwX2llID0gdHJ1ZTsKKworCVJUX1RSQUNFKENPTVBfRlcsIERCR19MT1VELCAoImFjdGlvbiBmcmFtZSBmaW5kIFAyUCBJRS5cbiIpKTsKKwkvKnRvIGZpbmQgbm9hIGllKi8KKwl3aGlsZSAoaWUgKyAxIDwgZW5kKSB7CisJCW5vYV9sZW4gPSBSRUFERUYyQllURSgoX19sZTE2ICopJmllWzFdKTsKKwkJaWYgKGllICsgMyArIGllWzFdID4gZW5kKQorCQkJcmV0dXJuOworCisJCWlmIChpZVswXSA9PSAxMikgeworCQkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX0xPVUQsICgiZmluZCBOT0EgSUVcbiIpKTsKKwkJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9GVywgREJHX0xPVUQsICJub2EgaWUgIiwKKwkJCQkgICAgICBpZSwgbm9hX2xlbik7CisJCQlmaW5kX3AycF9wc19pZSA9IHRydWU7CisJCQlpZiAoKG5vYV9sZW4gLSAyKSAlIDEzICE9IDApIHsKKwkJCQlSVF9UUkFDRShDT01QX0ZXLCBEQkdfTE9VRCwKKwkJCQkJICgiUDJQIG5vdGljZSBvZiBhYnNlbmNlOiBpbnZhbGlkIGxlbmd0aCVkXG4iLAorCQkJCQkgbm9hX2xlbikpOworCQkJCXJldHVybjsKKwkJCX0gZWxzZSB7CisJCQkJbm9hX251bSA9IChub2FfbGVuIC0gMikgLyAxMzsKKwkJCX0KKwkJCW5vYV9pbmRleCA9IGllWzNdOworCQkJaWYgKHJ0bHByaXYtPnBzYy5wMnBfcHNfaW5mby5wMnBfcHNfbW9kZSA9PQorCQkJICAgIFAyUF9QU19OT05FIHx8CisJCQkgICAgbm9hX2luZGV4ICE9IHAycGluZm8tPm5vYV9pbmRleCkgeworCQkJCXAycGluZm8tPm5vYV9pbmRleCA9IG5vYV9pbmRleDsKKwkJCQlwMnBpbmZvLT5vcHBfcHMgPSAoaWVbNF0gPj4gNyk7CisJCQkJcDJwaW5mby0+Y3R3aW5kb3cgPSBpZVs0XSAmIDB4N0Y7CisJCQkJcDJwaW5mby0+bm9hX251bSA9IG5vYV9udW07CisJCQkJaW5kZXggPSA1OworCQkJCWZvciAoaSA9IDA7IGkgPCBub2FfbnVtOyBpKyspIHsKKwkJCQkJcDJwaW5mby0+bm9hX2NvdW50X3R5cGVbaV0gPQorCQkJCQkJCVJFQURFRjFCWVRFKGllK2luZGV4KTsKKwkJCQkJaW5kZXggKz0gMTsKKwkJCQkJcDJwaW5mby0+bm9hX2R1cmF0aW9uW2ldID0KKwkJCQkJCSBSRUFERUY0QllURSgoX19sZTMyICopaWUraW5kZXgpOworCQkJCQlpbmRleCArPSA0OworCQkJCQlwMnBpbmZvLT5ub2FfaW50ZXJ2YWxbaV0gPQorCQkJCQkJIFJFQURFRjRCWVRFKChfX2xlMzIgKilpZStpbmRleCk7CisJCQkJCWluZGV4ICs9IDQ7CisJCQkJCXAycGluZm8tPm5vYV9zdGFydF90aW1lW2ldID0KKwkJCQkJCSBSRUFERUY0QllURSgoX19sZTMyICopaWUraW5kZXgpOworCQkJCQlpbmRleCArPSA0OworCQkJCX0KKworCQkJCWlmIChwMnBpbmZvLT5vcHBfcHMgPT0gMSkgeworCQkJCQlwMnBpbmZvLT5wMnBfcHNfbW9kZSA9IFAyUF9QU19DVFdJTkRPVzsKKwkJCQkJLyogRHJpdmVyIHNob3VsZCB3YWl0IExQUworCQkJCQkgKiBlbnRlcmluZyBDVFdpbmRvdyAqLworCQkJCQlpZiAocnRscHJpdi0+cHNjLmJfZndfY3VycmVudF9pbnBzbW9kZSkgeworCQkJCQkJcnRsOTJlX3AycF9wc19jbWQoaHcsCisJCQkJCQkJICAgICAgIFAyUF9QU19FTkFCTEUpOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChwMnBpbmZvLT5ub2FfbnVtID4gMCkgeworCQkJCQlwMnBpbmZvLT5wMnBfcHNfbW9kZSA9IFAyUF9QU19OT0E7CisJCQkJCXJ0bDkyZV9wMnBfcHNfY21kKGh3LCBQMlBfUFNfRU5BQkxFKTsKKwkJCQl9IGVsc2UgaWYgKHAycGluZm8tPnAycF9wc19tb2RlID4gUDJQX1BTX05PTkUpIHsKKwkJCQkJcnRsOTJlX3AycF9wc19jbWQoaHcsIFAyUF9QU19ESVNBQkxFKTsKKwkJCQl9CisJCQl9CisKKwkJYnJlYWs7CisJCX0KKwkJaWUgKz0gMyArIG5vYV9sZW47CisJfQorfQorCit2b2lkIHJ0bDkyZV9wMnBfcHNfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBwMnBfcHNfc3RhdGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpydGxwcyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3AycF9wc19pbmZvICAqcDJwaW5mbyA9ICYocnRscHJpdi0+cHNjLnAycF9wc19pbmZvKTsKKworCVJUX1RSQUNFKENPTVBfRlcsIERCR19MT1VELCAoInAycCBzdGF0ZSAleFxuIiwgcDJwX3BzX3N0YXRlKSk7CisJc3dpdGNoIChwMnBfcHNfc3RhdGUpIHsKKwljYXNlIFAyUF9QU19ESVNBQkxFOgorCQlwMnBpbmZvLT5wMnBfcHNfc3RhdGUgPSBwMnBfcHNfc3RhdGU7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkgICBIV19WQVJfSDJDX0ZXX1AyUF9QU19PRkZMT0FELAorCQkJCQkgICAodTggKikoJnAycF9wc19zdGF0ZSkpOworCisJCXAycGluZm8tPm5vYV9pbmRleCA9IDA7CisJCXAycGluZm8tPmN0d2luZG93ID0gMDsKKwkJcDJwaW5mby0+b3BwX3BzID0gMDsKKwkJcDJwaW5mby0+bm9hX251bSA9IDA7CisJCXAycGluZm8tPnAycF9wc19tb2RlID0gUDJQX1BTX05PTkU7CisJCWlmIChydGxwcy0+Yl9md19jdXJyZW50X2lucHNtb2RlKSB7CisJCQlpZiAocnRscHMtPnNtYXJ0X3BzID09IDApIHsKKwkJCQlydGxwcy0+c21hcnRfcHMgPSAyOworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkgICAgSFdfVkFSX0gyQ19GV19QV1JNT0RFLAorCQkJCQkgICAgKHU4ICopKCZydGxwcy0+cHdyX21vZGUpKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFAyUF9QU19FTkFCTEU6CisJCWlmIChwMnBpbmZvLT5wMnBfcHNfbW9kZSA+IFAyUF9QU19OT05FKSB7CisJCQlwMnBpbmZvLT5wMnBfcHNfc3RhdGUgPSBwMnBfcHNfc3RhdGU7CisKKwkJCWlmIChwMnBpbmZvLT5jdHdpbmRvdyA+IDApIHsKKwkJCQlpZiAocnRscHMtPnNtYXJ0X3BzICE9IDApIHsKKwkJCQkJcnRscHMtPnNtYXJ0X3BzID0gMDsKKwkJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoCisJCQkJCSAgICBodywgSFdfVkFSX0gyQ19GV19QV1JNT0RFLAorCQkJCQkgICAgKHU4ICopKCZydGxwcy0+cHdyX21vZGUpKTsKKwkJCQl9CisJCQl9CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCUhXX1ZBUl9IMkNfRldfUDJQX1BTX09GRkxPQUQsCisJCQkJCQkodTggKikoJnAycF9wc19zdGF0ZSkpOworCQkJfQorCQkJYnJlYWs7CisJY2FzZSBQMlBfUFNfU0NBTjoKKwljYXNlIFAyUF9QU19TQ0FOX0RPTkU6CisJY2FzZSBQMlBfUFNfQUxMU1RBU0xFRVA6CisJCWlmIChwMnBpbmZvLT5wMnBfcHNfbW9kZSA+IFAyUF9QU19OT05FKSB7CisJCQlwMnBpbmZvLT5wMnBfcHNfc3RhdGUgPSBwMnBfcHNfc3RhdGU7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCUhXX1ZBUl9IMkNfRldfUDJQX1BTX09GRkxPQUQsCisJCQkJCQkodTggKikoJnAycF9wc19zdGF0ZSkpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlSVF9UUkFDRShDT01QX0ZXLCBEQkdfTE9VRCwgKCIgY3R3aW5kb3cgJXggb3BwcHMgJXhcbiIsCisJCQkJICAgICBwMnBpbmZvLT5jdHdpbmRvdyAsIHAycGluZm8tPm9wcF9wcykpOworCVJUX1RSQUNFKENPTVBfRlcsIERCR19MT1VELAorCQkgKCJjb3VudCAleCBkdXJhdGlvbiAleCBpbmRleCAleCBpbnRlcnZhbCAleCBzdGFydCB0aW1lICV4IG5vYSBudW0gJXhcbiIsCisJCSBwMnBpbmZvLT5ub2FfY291bnRfdHlwZVswXSwKKwkJIHAycGluZm8tPm5vYV9kdXJhdGlvblswXSwKKwkJIHAycGluZm8tPm5vYV9pbmRleCwKKwkJIHAycGluZm8tPm5vYV9pbnRlcnZhbFswXSwKKwkJIHAycGluZm8tPm5vYV9zdGFydF90aW1lWzBdLAorCQkgcDJwaW5mby0+bm9hX251bSkpOworCVJUX1RSQUNFKENPTVBfRlcsIERCR19MT1VELCAoImVuZFxuIikpOworfQorCit2b2lkIHJ0bDkyZV9wMnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilkYXRhOworCisJaWYgKCFtYWMtPnAycCkKKwkJcmV0dXJuOworCWlmIChtYWMtPmxpbmtfc3RhdGUgIT0gTUFDODAyMTFfTElOS0VEKQorCQlyZXR1cm47CisJLyogbWluLiBiZWFjb24gbGVuZ3RoICsgRkNTX0xFTiAqLworCWlmIChsZW4gPD0gNDAgKyBGQ1NfTEVOKQorCQlyZXR1cm47CisKKwkvKiBhbmQgb25seSBiZWFjb25zIGZyb20gdGhlIGFzc29jaWF0ZWQgQlNTSUQsIHBsZWFzZSAqLworCWlmICghZXRoZXJfYWRkcl9lcXVhbChoZHItPmFkZHIzLCBydGxwcml2LT5tYWM4MDIxMS5ic3NpZCkpCisJCXJldHVybjsKKworCS8qIGNoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgYmVhY29uICovCisJaWYgKCEoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCSAgICAgIGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSkpCisJCXJldHVybjsKKworCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJ0bF9wMnBfYWN0aW9uX2llKGh3ICwgZGF0YSAsIGxlbiAtIEZDU19MRU4pOworCWVsc2UKKwkJcnRsX3AycF9ub2FfaWUoaHcgLCBkYXRhICwgbGVuIC0gRkNTX0xFTik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3BzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzMzY2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcHMuaApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SRUFMVEVLX1JUTF9QQ0lfUFNfSF9fCisjZGVmaW5lIF9fUkVBTFRFS19SVExfUENJX1BTX0hfXworCisjZGVmaW5lIE1BWF9TV19MUFNfU0xFRVBfSU5UVgk1CisKK2Jvb2wgc3RnX3J0bF9wc19zZXRfcmZfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIGVudW0gcmZfcHdyc3RhdGUgc3RhdGVfdG9zZXQsIHUzMiBjaGFuZ2Vzb3VyY2UsCisJCQkgICAgIGJvb2wgcHJvdGVjdF9vcl9ub3QpOworYm9vbCBzdGdfcnRsX3BzX2VuYWJsZV9uaWMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBzdGdfcnRsX3BzX2Rpc2FibGVfbmljKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlX2lwc19uaWNfb2ZmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlX2lwc19uaWNfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVfaXBzX25pY19vZmZfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSk7Cit2b2lkIHJ0bDkyZV9scHNfZW50ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVfbHBzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwordm9pZCBydGxfbHBzX3NldF9wc21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHJ0X3BzbW9kZSk7CisKK3ZvaWQgcnRsOTJlX3N3bHBzX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIHJ0bDkyZV9zd2xwc193cV9jYWxsYmFjayh2b2lkICpkYXRhKTsKK3ZvaWQgcnRsOTJlX3N3bHBzX3Jmb25fd3FfY2FsbGJhY2sodm9pZCAqZGF0YSk7Cit2b2lkIHJ0bDkyZV9zd2xwc19yZl9hd2FrZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZV9zd2xwc19yZl9zbGVlcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZV9wMnBfcHNfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ICwgdTggcDJwX3BzX3N0YXRlKTsKK3ZvaWQgcnRsOTJlX3AycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3JjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjMzRkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcmMuYwpAQCAtMCwwICsxLDI4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgImJhc2UuaCIKKyNpbmNsdWRlICJyYy5oIgorCisvKgorICpGaW5kcyB0aGUgaGlnaGVzdCByYXRlIGluZGV4IHdlIGNhbiB1c2UKKyAqaWYgc2tiIGlzIHNwZWNpYWwgZGF0YSBsaWtlIERIQ1AvRUFQT0wsIHdlIHNldCBzaG91bGQKKyAqaXQgdG8gbG93ZXN0IHJhdGUgQ0NLXzFNLCBvdGhlcndpc2Ugd2Ugc2V0IHJhdGUgdG8KKyAqaGlnaGVzdCByYXRlIGJhc2VkIG9uIHdpcmVsZXNzIG1vZGUgdXNlZCBmb3IgaXdjb25maWcKKyAqc2hvdyBUeCByYXRlLgorICovCitzdGF0aWMgdTggX3J0bF9yY19nZXRfaGlnaGVzdF9yaXgoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbm90X2RhdGEpCit7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCXU4IHdpcmVsZXNzX21vZGUgPSAwOworCisJLyoKKwkgKnRoaXMgcmF0ZSBpcyBubyB1c2UgZm9yIHRydWUgcmF0ZSwgZmlybXdhcmUKKwkgKndpbGwgY29udHJvbCByYXRlIGF0IGFsbCBpdCBqdXN0IHVzZWQgZm9yCisJICoxLnNob3cgaW4gaXdjb25maWcgaW4gQi9HIG1vZGUKKwkgKjIuaW4gc3RnX3J0bF9nZXRfdGNiX2Rlc2Mgd2hlbiB3ZSBjaGVjayByYXRlIGlzCisJICogICAgICAxTSB3ZSB3aWxsIG5vdCB1c2UgRlcgcmF0ZSBidXQgdXNlciByYXRlLgorCSAqLworCisJaWYgKHN0YSkgeworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCXdpcmVsZXNzX21vZGUgPSBzdGFfZW50cnktPndpcmVsZXNzX21vZGU7CisJfQorCisJaWYgKHJ0bDkyZV9pc19zcGVjaWFsX2RhdGEocnRscHJpdi0+bWFjODAyMTEuaHcsIHNrYiwgdHJ1ZSkgfHwKKwkgICAgbm90X2RhdGEpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpIHsKKwkJCWlmICh3aXJlbGVzc19tb2RlID09IFdJUkVMRVNTX01PREVfQikgeworCQkJCXJldHVybiBCX01PREVfTUFYX1JJWDsKKwkJCX0gZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBXSVJFTEVTU19NT0RFX0cpIHsKKwkJCQlyZXR1cm4gR19NT0RFX01BWF9SSVg7CisJCQl9IGVsc2UgaWYgKHdpcmVsZXNzX21vZGUgPT0gV0lSRUxFU1NfTU9ERV9OXzI0RykgeworCQkJCWlmIChnZXRfcmZfdHlwZShydGxwaHkpICE9IFJGXzJUMlIpCisJCQkJCXJldHVybiBOX01PREVfTUNTN19SSVg7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gTl9NT0RFX01DUzE1X1JJWDsKKwkJCX0gZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBXSVJFTEVTU19NT0RFX0FDXzI0RykgeworCQkJCXJldHVybiBBQ19NT0RFX01DUzlfUklYOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aXJlbGVzc19tb2RlID09IFdJUkVMRVNTX01PREVfQSkgeworCQkJCXJldHVybiBBX01PREVfTUFYX1JJWDsKKwkJCX0gZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBXSVJFTEVTU19NT0RFX05fNUcpIHsKKwkJCQlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSAhPSBSRl8yVDJSKQorCQkJCQlyZXR1cm4gTl9NT0RFX01DUzdfUklYOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIE5fTU9ERV9NQ1MxNV9SSVg7CisJCQl9IGVsc2UgaWYgKHdpcmVsZXNzX21vZGUgPT0gV0lSRUxFU1NfTU9ERV9BQ181RykgeworCQkJCXJldHVybiBBQ19NT0RFX01DUzlfUklYOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX3J0bF9yY19yYXRlX3NldF9zZXJpZXMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjLAorCQkJCSAgICB1OCB0cmllcywgY2hhciByaXgsIGludCBydHNjdHNlbmFibGUsCisJCQkJICAgIGJvb2wgbm90X2RhdGEpCit7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisJdTggc2dpXzIwID0gMCwgc2dpXzQwID0gMCwgc2dpXzgwID0gMDsKKworCWlmIChzdGEpIHsKKwkJc2dpXzIwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CisJCXNnaV80MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQlzZ2lfODAgPSBzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfU0hPUlRfR0lfODA7CisJfQorCXJhdGUtPmNvdW50ID0gdHJpZXM7CisJcmF0ZS0+aWR4ID0gcml4ID49IDB4MDAgPyByaXggOiAweDAwOworCisJaWYgKCFub3RfZGF0YSkgeworCQlpZiAodHhyYy0+c2hvcnRfcHJlYW1ibGUpCisJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOworCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQlpZiAoc3RhICYmIChzdGEtPmh0X2NhcC5jYXAgJgorCQkJCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkpCisJCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwkJCWlmIChzdGEgJiYgKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSkKKwkJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfODBfTUhaX1dJRFRIOworCQl9IGVsc2UgeworCQkJaWYgKG1hYy0+YndfNDApCisJCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwkJCWlmIChtYWMtPmJ3XzgwKQorCQkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ184MF9NSFpfV0lEVEg7CisJCX0KKworCQlpZiAoc2dpXzIwIHx8IHNnaV80MCB8fCBzZ2lfODApCisJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7CisJCWlmIChzdGEgJiYgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKKwkJaWYgKHN0YSAmJiBzdGEtPnZodF9jYXAudmh0X3N1cHBvcnRlZCkKKwkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19WSFRfTUNTOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsX2dldF9yYXRlKHZvaWQgKnBwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJIHZvaWQgKnByaXZfc3RhLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHBwcml2OworCXN0cnVjdCBza19idWZmICpza2IgPSB0eHJjLT5za2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKwl1OCB0cnlfcGVyX3JhdGUsIGksIHJpeDsKKwlib29sIG5vdF9kYXRhID0gIWllZWU4MDIxMV9pc19kYXRhKGZjKTsKKworCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCisJCXJldHVybjsKKworCXJpeCA9IF9ydGxfcmNfZ2V0X2hpZ2hlc3Rfcml4KHJ0bHByaXYsIHN0YSwgc2tiLCBub3RfZGF0YSk7CisJdHJ5X3Blcl9yYXRlID0gMTsKKwlfcnRsX3JjX3JhdGVfc2V0X3NlcmllcyhydGxwcml2LCBzdGEsICZyYXRlc1swXSwgdHhyYywKKwkJCQl0cnlfcGVyX3JhdGUsIHJpeCwgMSwgbm90X2RhdGEpOworCisJaWYgKCFub3RfZGF0YSkgeworCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKQorCQkJX3J0bF9yY19yYXRlX3NldF9zZXJpZXMocnRscHJpdiwgc3RhLCAmcmF0ZXNbaV0sCisJCQkJCQl0eHJjLCBpLCAocml4IC0gaSksIDEsCisJCQkJCQlub3RfZGF0YSk7CisJfQorfQorCitzdGF0aWMgYm9vbCBfcnRsX3R4X2FnZ3JfY2hlY2soc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJICAgICAgIHN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKworCWlmIChtYWMtPmFjdF9zY2FubmluZykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgbWFjLT5jbnRfYWZ0ZXJfbGlua2VkIDwgMykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHN0YV9lbnRyeS0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPT0gUlRMX0FHR19TVE9QKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyptYWM4MDIxMSBSYXRlIENvbnRyb2wgY2FsbGJhY2tzKi8KK3N0YXRpYyB2b2lkIHJ0bF90eF9zdGF0dXModm9pZCAqcHByaXYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBwcHJpdjsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OworCisJaWYgKCFwcml2X3N0YSB8fCAhaWVlZTgwMjExX2lzX2RhdGEoZmMpKQorCQlyZXR1cm47CisKKwlpZiAocnRsOTJlX2lzX3NwZWNpYWxfZGF0YShtYWMtPmh3LCBza2IsIHRydWUpKQorCQlyZXR1cm47CisKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpKSB8fAorCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKQorCQlyZXR1cm47CisKKwlpZiAoc3RhKSB7CisJCS8qIENoZWNrIGlmIGFnZ3JlZ2F0aW9uIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRpZCAqLworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCWlmICgoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSAmJgorCQkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQkJCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CisJCQkJaWYgKF9ydGxfdHhfYWdncl9jaGVjayhydGxwcml2LCBzdGFfZW50cnksCisJCQkJCQkgICAgICAgdGlkKSkgeworCQkJCQlzdGFfZW50cnktPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlID0KKwkJCQkJCVJUTF9BR0dfUFJPR1JFU1M7CisJCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLAorCQkJCQkJCQkgICAgICA1MDAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9yYXRlX2luaXQodm9pZCAqcHByaXYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhKQoreworfQorCitzdGF0aWMgdm9pZCAqcnRsX3JhdGVfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNkaXIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXJldHVybiBydGxwcml2OworfQorCitzdGF0aWMgdm9pZCBydGxfcmF0ZV9mcmVlKHZvaWQgKnJ0bHByaXYpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCAqcnRsX3JhdGVfYWxsb2Nfc3RhKHZvaWQgKnBwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBwcHJpdjsKKwlzdHJ1Y3QgcnRsX3JhdGVfcHJpdiAqcmF0ZV9wcml2OworCisJcmF0ZV9wcml2ID0ga3phbGxvYyhzaXplb2YoKnJhdGVfcHJpdiksIGdmcCk7CisJaWYgKCFyYXRlX3ByaXYpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIlVuYWJsZSB0byBhbGxvY2F0ZSBwcml2YXRlIHJjIHN0cnVjdHVyZVxuIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlydGxwcml2LT5yYXRlX3ByaXYgPSByYXRlX3ByaXY7CisKKwlyZXR1cm4gcmF0ZV9wcml2OworfQorCitzdGF0aWMgdm9pZCBydGxfcmF0ZV9mcmVlX3N0YSh2b2lkICpydGxwcml2LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCit7CisJc3RydWN0IHJ0bF9yYXRlX3ByaXYgKnJhdGVfcHJpdiA9IHByaXZfc3RhOworCWtmcmVlKHJhdGVfcHJpdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyBydGxfcmF0ZV9vcHMgPSB7CisJLm5hbWUgPSAicnRsX3JjXzkyZSIsCisJLmFsbG9jID0gcnRsX3JhdGVfYWxsb2MsCisJLmZyZWUgPSBydGxfcmF0ZV9mcmVlLAorCS5hbGxvY19zdGEgPSBydGxfcmF0ZV9hbGxvY19zdGEsCisJLmZyZWVfc3RhID0gcnRsX3JhdGVfZnJlZV9zdGEsCisJLnJhdGVfaW5pdCA9IHJ0bF9yYXRlX2luaXQsCisJLnR4X3N0YXR1cyA9IHJ0bF90eF9zdGF0dXMsCisJLmdldF9yYXRlID0gcnRsX2dldF9yYXRlLAorfTsKKworaW50IHJ0bDkyZV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnRsX3JhdGVfb3BzKTsKK30KKwordm9pZCBydGw5MmVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoJnJ0bF9yYXRlX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3JjLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4ZjU3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcmMuaApAQCAtMCwwICsxLDQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVExfUkNfSF9fCisjZGVmaW5lIF9fUlRMX1JDX0hfXworCisjZGVmaW5lIEJfTU9ERV9NQVhfUklYIDMKKyNkZWZpbmUgR19NT0RFX01BWF9SSVggMTEKKyNkZWZpbmUgQV9NT0RFX01BWF9SSVggNworCisvKiBpbiBtYWM4MDIxMSBtY3MwLW1jczE1IGlzIGlkeDAtaWR4MTUqLworI2RlZmluZSBOX01PREVfTUNTN19SSVggNworI2RlZmluZSBOX01PREVfTUNTMTVfUklYIDE1CisKKyNkZWZpbmUgQUNfTU9ERV9NQ1M3X1JJWCA3CisjZGVmaW5lIEFDX01PREVfTUNTOF9SSVggOAorI2RlZmluZSBBQ19NT0RFX01DUzlfUklYIDkKKworc3RydWN0IHJ0bF9yYXRlX3ByaXYgeworCXU4IGh0X2NhcDsKK307CisKK2ludCBydGw5MmVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwordm9pZCBydGw5MmVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcmVnZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9yZWdkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3MmZhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcmVnZC5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ3aWZpLmgiCisjaW5jbHVkZSAicmVnZC5oIgorCitzdGF0aWMgc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkIGFsbGNvdW50cmllc1tdID0geworCXtDT1VOVFJZX0NPREVfRkNDLCAiVVMifSwKKwl7Q09VTlRSWV9DT0RFX0lDLCAiVVMifSwKKwl7Q09VTlRSWV9DT0RFX0VUU0ksICJFQyJ9LAorCXtDT1VOVFJZX0NPREVfU1BBSU4sICJFQyJ9LAorCXtDT1VOVFJZX0NPREVfRlJBTkNFLCAiRUMifSwKKwl7Q09VTlRSWV9DT0RFX01LSywgIkpQIn0sCisJe0NPVU5UUllfQ09ERV9NS0sxLCAiSlAifSwKKwl7Q09VTlRSWV9DT0RFX0lTUkFFTCwgIkVDIn0sCisJe0NPVU5UUllfQ09ERV9URUxFQywgIkpQIn0sCisJe0NPVU5UUllfQ09ERV9NSUMsICJKUCJ9LAorCXtDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTiwgIkpQIn0sCisJe0NPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzLCAiRUMifSwKKwl7Q09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVIsICJFQyJ9LAorfTsKKworLyoKKyAqT25seSB0aGVzZSBjaGFubmVscyBhbGwgYWxsb3cgYWN0aXZlCisgKnNjYW4gb24gYWxsIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucworICovCisjZGVmaW5lIFJUTDgxOXhfMkdIWl9DSDAxXzExCVwKKwlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApCisKKy8qCisgKldlIGVuYWJsZSBhY3RpdmUgc2NhbiBvbiB0aGVzZSBhIGNhc2UKKyAqYnkgY2FzZSBiYXNpcyBieSByZWd1bGF0b3J5IGRvbWFpbgorICovCisjZGVmaW5lIFJUTDgxOXhfMkdIWl9DSDEyXzEzCVwKKwlSRUdfUlVMRSgyNDY3LTEwLCAyNDcyKzEwLCA0MCwgMCwgMjAsXAorCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTikKKworI2RlZmluZSBSVEw4MTl4XzJHSFpfQ0gxNAlcCisJUkVHX1JVTEUoMjQ4NC0xMCwgMjQ4NCsxMCwgNDAsIDAsIDIwLCBcCisJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgXAorCU5MODAyMTFfUlJGX05PX09GRE0pCisKKy8qIDVHIGNoYW4gMzYgLSBjaGFuIDY0Ki8KKyNkZWZpbmUgUlRMODE5eF81R0haXzUxNTBfNTM1MAlcCisJUkVHX1JVTEUoNTE1MC0xMCwgNTM1MCsxMCwgODAsIDAsIDMwLCBcCisJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgXAorCU5MODAyMTFfUlJGX05PX0lCU1MpCisKKy8qIDVHIGNoYW4gMTAwIC0gY2hhbiAxNjUqLworI2RlZmluZSBSVEw4MTl4XzVHSFpfNTQ3MF81ODUwCVwKKwlSRUdfUlVMRSg1NDcwLTEwLCA1ODUwKzEwLCA4MCwgMCwgMzAsIFwKKwlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBcCisJTkw4MDIxMV9SUkZfTk9fSUJTUykKKworLyogNUcgY2hhbiAxNDkgLSBjaGFuIDE2NSovCisjZGVmaW5lIFJUTDgxOXhfNUdIWl81NzI1XzU4NTAJXAorCVJFR19SVUxFKDU3MjUtMTAsIDU4NTArMTAsIDgwLCAwLCAzMCwgXAorCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IFwKKwlOTDgwMjExX1JSRl9OT19JQlNTKQorCisjZGVmaW5lIFJUTDgxOXhfNUdIWl9BTEwJXAorCShSVEw4MTl4XzVHSFpfNTE1MF81MzUwLCBSVEw4MTl4XzVHSFpfNTQ3MF81ODUwKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV8xMSA9IHsKKwkubl9yZWdfcnVsZXMgPSAxLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCQkgICAgICB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV8xMl8xMyA9IHsKKwkubl9yZWdfcnVsZXMgPSAyLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCQkJICBSVEw4MTl4XzJHSFpfQ0gxMl8xMywKKwkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fbm9fbWlkYmFuZCA9IHsKKwkubl9yZWdfcnVsZXMgPSAzLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCQkJICBSVEw4MTl4XzVHSFpfNTE1MF81MzUwLAorCQkJICBSVEw4MTl4XzVHSFpfNTcyNV81ODUwLAorCQkgICAgICB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV82MF82NCA9IHsKKwkubl9yZWdfcnVsZXMgPSAzLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCQkJICBSVEw4MTl4XzJHSFpfQ0gxMl8xMywKKwkJCSAgUlRMODE5eF81R0haXzU3MjVfNTg1MCwKKwkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fMTRfNjBfNjQgPSB7CisJLm5fcmVnX3J1bGVzID0gNCwKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCQkgIFJUTDgxOXhfMkdIWl9DSDE0LAorCQkJICBSVEw4MTl4XzVHSFpfNTcyNV81ODUwLAorCQkgICAgICB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV8xNCA9IHsKKwkubl9yZWdfcnVsZXMgPSAzLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCQkJICBSVEw4MTl4XzJHSFpfQ0gxMl8xMywKKwkJCSAgUlRMODE5eF8yR0haX0NIMTQsCisJCSAgICAgIH0KK307CisKK3N0YXRpYyBib29sIF9ydGxfaXNfcmFkYXJfZnJlcSh1MTYgY2VudGVyX2ZyZXEpCit7CisJcmV0dXJuIGNlbnRlcl9mcmVxID49IDUyNjAgJiYgY2VudGVyX2ZyZXEgPD0gNTcwMDsKK30KKworc3RhdGljIHZvaWQgX3J0bF9yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCSAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJaWYgKCF3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKworCQlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQkJaWYgKF9ydGxfaXNfcmFkYXJfZnJlcShjaC0+Y2VudGVyX2ZyZXEpIHx8CisJCQkgICAgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyZWdfcnVsZSA9IGZyZXFfcmVnX2luZm8od2lwaHksCisJCQkJCQkJIGNoLT5jZW50ZXJfZnJlcSk7CisJCQkJaWYgKElTX0VSUihyZWdfcnVsZSkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKklmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICp3ZSBlbmFibGUgYWRob2MvYmVhY29uaW5nIGlmIGl0IGFsbG93cyB1cyB0bworCQkJCSAqdXNlIGl0LiBOb3RlIHRoYXQgd2Ugd291bGQgaGF2ZSBkaXNhYmxlZCBpdAorCQkJCSAqYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKmRlZmF1bHQgZHVyaW5nIGluaXQsIHByaW9yIHRvIGNhbGxpbmcgb3VyCisJCQkJICpyZWd1bGF0b3J5X2hpbnQoKS4KKwkJCQkgKi8KKworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX05PX0lCU1M7CisJCQkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYKKwkJCQkgICAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICAgIH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCQl9IGVsc2UgeworCQkJCWlmIChjaC0+YmVhY29uX2ZvdW5kKQorCQkJCQljaC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfQ0hBTl9OT19JQlNTIHwKKwkJCQkJCSAgIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTik7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qIEFsbG93cyBhY3RpdmUgc2NhbiBzY2FuIG9uIENoIDEyIGFuZCAxMyAqLworc3RhdGljIHZvaWQgX3J0bF9yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvcgorCQkJCQkgICAgIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCisJaWYgKCF3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0pCisJCXJldHVybjsKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKworCS8qCisJICpJZiBubyBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkIGFsd2F5cyBlbmFibGUgYWN0aXZlIHNjYW4KKwkgKm9uIHRoZXNlIGNoYW5uZWxzLiBUaGlzIGlzIG9ubHkgZG9uZSBmb3Igc3BlY2lmaWMgcmVndWxhdG9yeSBTS1VzCisJICovCisJaWYgKGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOwkvKiBDSCAxMiAqLworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07CS8qIENIIDEzICovCisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICpJZiBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjaWV2ZWQgY2hlY2sgaXRzIHJ1bGUgZm9yIHRoaXMKKwkgKmNoYW5uZWwgZmlyc3QgYmVmb3JlIGVuYWJsaW5nIGFjdGl2ZSBzY2FuLiBUaGUgcGFzc2l2ZSBzY2FuCisJICp3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKKwkgKmN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbi4KKwkgKi8KKworCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMV07CS8qIENIIDEyICovCisJcmVnX3J1bGUgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEpOworCWlmICghSVNfRVJSKHJlZ19ydWxlKSkgeworCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJiBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJaWYgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKKwkJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwl9CisKKwljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTJdOwkvKiBDSCAxMyAqLworCXJlZ19ydWxlID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxKTsKKwlpZiAoIUlTX0VSUihyZWdfcnVsZSkpIHsKKwkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJfQorfQorCisvKgorICpBbHdheXMgYXBwbHkgUmFkYXIvREZTIHJ1bGVzIG9uCisgKmZyZXEgcmFuZ2UgNTI2MCBNSHogLSA1NzAwIE1IegorICovCitzdGF0aWMgdm9pZCBfcnRsX3JlZ19hcHBseV9yYWRhcl9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSkKKwkJcmV0dXJuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07CisJCWlmICghX3J0bF9pc19yYWRhcl9mcmVxKGNoLT5jZW50ZXJfZnJlcSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKldlIGFsd2F5cyBlbmFibGUgcmFkYXIgZGV0ZWN0aW9uL0RGUyBvbiB0aGlzCisJCSAqZnJlcXVlbmN5IHJhbmdlLiBBZGRpdGlvbmFsbHkgd2UgYWxzbyBhcHBseSBvbgorCQkgKnRoaXMgZnJlcXVlbmN5IHJhbmdlOgorCQkgKi0gSWYgU1RBIG1vZGUgZG9lcyBub3QgeWV0IGhhdmUgREZTIHN1cHBvcnRzIGRpc2FibGUKKwkJICogYWN0aXZlIHNjYW5uaW5nCisJCSAqLSBJZiBhZGhvYyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgREZTIHlldCB0aGVuIGRpc2FibGUKKwkJICogYWRob2MgaW4gdGhlIGZyZXF1ZW5jeS4KKwkJICotIElmIEFQIG1vZGUgZG9lcyBub3QgeWV0IHN1cHBvcnQgcmFkYXIgZGV0ZWN0aW9uL0RGUworCQkgKmRvIG5vdCBhbGxvdyBBUCBtb2RlCisJCSAqLworCQlpZiAoIShjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpCisJCQljaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUkFEQVIgfAorCQkJICAgIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJICAgIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvciwKKwkJCQkgICAgICAgc3RydWN0IHJ0bF9yZWd1bGF0b3J5ICpyZWcpCit7CisJX3J0bF9yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCV9ydGxfcmVnX2FwcGx5X2FjdGl2ZV9zY2FuX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX3J0bF9kdW1wX2NoYW5uZWxfbWFwKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX3J0bDkyZV9yZWdfbm90aWZpZXJfYXBwbHkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCSAgICAgIHN0cnVjdCBydGxfcmVndWxhdG9yeSAqcmVnKQoreworCS8qIFdlIGFsd2F5cyBhcHBseSB0aGlzICovCisJX3J0bF9yZWdfYXBwbHlfcmFkYXJfZmxhZ3Mod2lwaHkpOworCisJc3dpdGNoIChyZXF1ZXN0LT5pbml0aWF0b3IpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRToKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOgorCQlicmVhazsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgorCQlfcnRsX3JlZ19hcHBseV93b3JsZF9mbGFncyh3aXBoeSwgcmVxdWVzdC0+aW5pdGlhdG9yLCByZWcpOworCQlicmVhazsKKwl9CisKKwlfcnRsX2R1bXBfY2hhbm5lbF9tYXAod2lwaHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqX3J0bF9yZWdkb21haW5fc2VsZWN0KAorCQkJCQkJc3RydWN0IHJ0bF9yZWd1bGF0b3J5ICpyZWcpCit7CisJc3dpdGNoIChyZWctPmNvdW50cnlfY29kZSkgeworCWNhc2UgQ09VTlRSWV9DT0RFX0ZDQzoKKwkJcmV0dXJuICZydGxfcmVnZG9tX25vX21pZGJhbmQ7CisJY2FzZSBDT1VOVFJZX0NPREVfSUM6CisJCXJldHVybiAmcnRsX3JlZ2RvbV8xMTsKKwljYXNlIENPVU5UUllfQ09ERV9FVFNJOgorCWNhc2UgQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVI6CisJCXJldHVybiAmcnRsX3JlZ2RvbV82MF82NDsKKwljYXNlIENPVU5UUllfQ09ERV9TUEFJTjoKKwljYXNlIENPVU5UUllfQ09ERV9GUkFOQ0U6CisJY2FzZSBDT1VOVFJZX0NPREVfSVNSQUVMOgorCWNhc2UgQ09VTlRSWV9DT0RFX1dPUkxEX1dJREVfMTM6CisJCXJldHVybiAmcnRsX3JlZ2RvbV8xMl8xMzsKKwljYXNlIENPVU5UUllfQ09ERV9NS0s6CisJY2FzZSBDT1VOVFJZX0NPREVfTUtLMToKKwljYXNlIENPVU5UUllfQ09ERV9URUxFQzoKKwljYXNlIENPVU5UUllfQ09ERV9NSUM6CisJCXJldHVybiAmcnRsX3JlZ2RvbV8xNF82MF82NDsKKwljYXNlIENPVU5UUllfQ09ERV9HTE9CQUxfRE9NQUlOOgorCQlyZXR1cm4gJnJ0bF9yZWdkb21fMTQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuICZydGxfcmVnZG9tX25vX21pZGJhbmQ7CisJfQorfQorCitzdGF0aWMgaW50IF9ydGw5MmVfcmVnZF9pbml0X3dpcGh5KHN0cnVjdCBydGxfcmVndWxhdG9yeSAqcmVnLAorCQkJCSAgIHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgdm9pZCAoKnJlZ19ub3RpZmllcikoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJCSAgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqCisJCQkJCQkgICAgICAgIHJlcXVlc3QpKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCisJd2lwaHktPnJlZ19ub3RpZmllciA9IHJlZ19ub3RpZmllcjsKKworCXdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzIHw9IFJFR1VMQVRPUllfQ1VTVE9NX1JFRzsKKwl3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmPSB+UkVHVUxBVE9SWV9TVFJJQ1RfUkVHOworCXdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzICY9IH5SRUdVTEFUT1JZX0RJU0FCTEVfQkVBQ09OX0hJTlRTOworCisJcmVnZCA9IF9ydGxfcmVnZG9tYWluX3NlbGVjdChyZWcpOworCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHdpcGh5LCByZWdkKTsKKwlfcnRsX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CisJX3J0bF9yZWdfYXBwbHlfd29ybGRfZmxhZ3Mod2lwaHksIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgKl9ydGxfcmVnZF9maW5kX2NvdW50cnkodTE2IGNvdW50cnljb2RlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsY291bnRyaWVzKTsgaSsrKSB7CisJCWlmIChhbGxjb3VudHJpZXNbaV0uY291bnRyeWNvZGUgPT0gY291bnRyeWNvZGUpCisJCQlyZXR1cm4gJmFsbGNvdW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBydGw5MmVfcmVnZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHZvaWQgKCpyZWdfbm90aWZpZXIpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCSAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBody0+d2lwaHk7CisJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKKworCWlmICh3aXBoeSA9PSBOVUxMIHx8ICZydGxwcml2LT5yZWdkID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaW5pdCBjb3VudHJ5X2NvZGUgZnJvbSBlZnVzZSBjaGFubmVsIHBsYW4gKi8KKwlydGxwcml2LT5yZWdkLmNvdW50cnlfY29kZSA9IHJ0bHByaXYtPmVmdXNlLmNoYW5uZWxfcGxhbjsKKworCVJUX1RSQUNFKENPTVBfUkVHRCwgREJHX1RSQUNFLAorCQkgKEtFUk5fREVCVUcgInJ0bDogRUVQUk9NIHJlZ2RvbWFpbjogMHglMHhcbiIsCisJCSAgcnRscHJpdi0+cmVnZC5jb3VudHJ5X2NvZGUpKTsKKworCWlmIChydGxwcml2LT5yZWdkLmNvdW50cnlfY29kZSA+PSBDT1VOVFJZX0NPREVfTUFYKSB7CisJCVJUX1RSQUNFKENPTVBfUkVHRCwgREJHX0RNRVNHLAorCQkJICgicnRsOiBFRVBST00gaW5kaWNhdGVzIGludmFsaWQgY29udHJ5IGNvZGUgd29ybGQgd2lkZSAxMyBzaG91bGQgYmUgdXNlZFxuIikpOworCisJCXJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlID0gQ09VTlRSWV9DT0RFX1dPUkxEX1dJREVfMTM7CisJfQorCisJY291bnRyeSA9IF9ydGxfcmVnZF9maW5kX2NvdW50cnkocnRscHJpdi0+cmVnZC5jb3VudHJ5X2NvZGUpOworCisJaWYgKGNvdW50cnkpIHsKKwkJcnRscHJpdi0+cmVnZC5hbHBoYTJbMF0gPSBjb3VudHJ5LT5pc29fbmFtZVswXTsKKwkJcnRscHJpdi0+cmVnZC5hbHBoYTJbMV0gPSBjb3VudHJ5LT5pc29fbmFtZVsxXTsKKwl9IGVsc2UgeworCQlydGxwcml2LT5yZWdkLmFscGhhMlswXSA9ICcwJzsKKwkJcnRscHJpdi0+cmVnZC5hbHBoYTJbMV0gPSAnMCc7CisJfQorCisJUlRfVFJBQ0UoQ09NUF9SRUdELCBEQkdfVFJBQ0UsCisJCSAoS0VSTl9ERUJVRyAicnRsOiBDb3VudHJ5IGFscGhhMiBiZWluZyB1c2VkOiAlYyVjXG4iLAorCQkgIHJ0bHByaXYtPnJlZ2QuYWxwaGEyWzBdLCBydGxwcml2LT5yZWdkLmFscGhhMlsxXSkpOworCisJX3J0bDkyZV9yZWdkX2luaXRfd2lwaHkoJnJ0bHByaXYtPnJlZ2QsIHdpcGh5LCByZWdfbm90aWZpZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnRsOTJlX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKENPTVBfUkVHRCwgREJHX0xPVUQsICgiXG4iKSk7CisKKwlfcnRsOTJlX3JlZ19ub3RpZmllcl9hcHBseSh3aXBoeSwgcmVxdWVzdCwgJnJ0bHByaXYtPnJlZ2QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9yZWdkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3JlZ2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI2ZjBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9yZWdkLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMX1JFR0RfSF9fCisjZGVmaW5lIF9fUlRMX1JFR0RfSF9fCisKKy8qIGZvciBrZXJuZWwgMy4xNCAsIGJvdGggdmFsdWUgYXJlIGNoYW5nZWQgdG8gSUVFRTgwMjExX0NIQU5fTk9fSVIqLworI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9OT19JQlNTIElFRUU4MDIxMV9DSEFOX05PX0lSCisjZGVmaW5lIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTiBJRUVFODAyMTFfQ0hBTl9OT19JUgorCitzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgeworCXUxNiBjb3VudHJ5Y29kZTsKKwljb25zdCBjaGFyICppc29fbmFtZTsKK307CisKK2VudW0gY291bnRyeV9jb2RlX3R5cGVfdCB7CisJQ09VTlRSWV9DT0RFX0ZDQyA9IDAsCisJQ09VTlRSWV9DT0RFX0lDID0gMSwKKwlDT1VOVFJZX0NPREVfRVRTSSA9IDIsCisJQ09VTlRSWV9DT0RFX1NQQUlOID0gMywKKwlDT1VOVFJZX0NPREVfRlJBTkNFID0gNCwKKwlDT1VOVFJZX0NPREVfTUtLID0gNSwKKwlDT1VOVFJZX0NPREVfTUtLMSA9IDYsCisJQ09VTlRSWV9DT0RFX0lTUkFFTCA9IDcsCisJQ09VTlRSWV9DT0RFX1RFTEVDID0gOCwKKwlDT1VOVFJZX0NPREVfTUlDID0gOSwKKwlDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTiA9IDEwLAorCUNPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzID0gMTEsCisJQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVIgPSAxMiwKKworCS8qYWRkIG5ldyBjaGFubmVsIHBsYW4gYWJvdmUgdGhpcyBsaW5lICovCisJQ09VTlRSWV9DT0RFX01BWAorfTsKKworaW50IHJ0bDkyZV9yZWdkX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgdm9pZCAoKnJlZ19ub3RpZmllcikoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KSk7Cit2b2lkIHJ0bDkyZV9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjZjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9kZWYuaApAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVEw5MkVfREVGX0hfXworI2RlZmluZSBfX1JUTDkyRV9ERUZfSF9fCisKKyNkZWZpbmUgUlhfREVTQ19OVU1fOTJFCQkJCQk1MTIKKworI2RlZmluZSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFCQkJMAorI2RlZmluZSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfTE9XRVIJCQkxCisjZGVmaW5lIEhBTF9QUklNRV9DSE5MX09GRlNFVF9VUFBFUgkJCTIKKworI2RlZmluZSBSWF9NUERVX1FVRVVFCQkJCQkwCisKKyNkZWZpbmUgSVNfSFRfUkFURShfcmF0ZSkJXAorCShfcmF0ZSA+PSBERVNDOTJDX1JBVEVNQ1MwKQorI2RlZmluZSBJU19DQ0tfUkFURShfcmF0ZSkJXAorCShfcmF0ZSA+PSBERVNDOTJDX1JBVEUxTSAmJiBfcmF0ZSA8PSBERVNDOTJDX1JBVEUxMU0pCisjZGVmaW5lIElTX09GRE1fUkFURShfcmF0ZSkJXAorCShfcmF0ZSA+PSBERVNDOTJDX1JBVEU2TSAmJiBfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pCisKKworZW51bSB2ZXJzaW9uXzgxOTJlIHsKKwlWRVJTSU9OX1RFU1RfQ0hJUF8yVDJSXzgxOTJFID0gMHgwMDI0LAorCVZFUlNJT05fTk9STUFMX0NISVBfMlQyUl84MTkyRSA9IDB4MTAyQywKKwlWRVJTSU9OX1VOS05PV04gPSAweEZGLAorfTsKKworZW51bSByeF9wYWNrZXRfdHlwZSB7CisJTk9STUFMX1JYLAorCVRYX1JFUE9SVDEsCisJVFhfUkVQT1JUMiwKKwlISVNfUkVQT1JULAorCUMySF9QQUNLRVQsCit9OworCitlbnVtIHJ0bF9kZXNjX3FzZWwgeworCVFTTFRfQksgPSAweDIsCisJUVNMVF9CRSA9IDB4MCwKKwlRU0xUX1ZJID0gMHg1LAorCVFTTFRfVk8gPSAweDcsCisJUVNMVF9CRUFDT04gPSAweDEwLAorCVFTTFRfSElHSCA9IDB4MTEsCisJUVNMVF9NR05UID0gMHgxMiwKKwlRU0xUX0NNRCA9IDB4MTMsCit9OworCitlbnVtIHJ0bF9kZXNjOTJjX3JhdGUgeworCURFU0M5MkNfUkFURTFNID0gMHgwMCwKKwlERVNDOTJDX1JBVEUyTSA9IDB4MDEsCisJREVTQzkyQ19SQVRFNV81TSA9IDB4MDIsCisJREVTQzkyQ19SQVRFMTFNID0gMHgwMywKKworCURFU0M5MkNfUkFURTZNID0gMHgwNCwKKwlERVNDOTJDX1JBVEU5TSA9IDB4MDUsCisJREVTQzkyQ19SQVRFMTJNID0gMHgwNiwKKwlERVNDOTJDX1JBVEUxOE0gPSAweDA3LAorCURFU0M5MkNfUkFURTI0TSA9IDB4MDgsCisJREVTQzkyQ19SQVRFMzZNID0gMHgwOSwKKwlERVNDOTJDX1JBVEU0OE0gPSAweDBhLAorCURFU0M5MkNfUkFURTU0TSA9IDB4MGIsCisKKwlERVNDOTJDX1JBVEVNQ1MwID0gMHgwYywKKwlERVNDOTJDX1JBVEVNQ1MxID0gMHgwZCwKKwlERVNDOTJDX1JBVEVNQ1MyID0gMHgwZSwKKwlERVNDOTJDX1JBVEVNQ1MzID0gMHgwZiwKKwlERVNDOTJDX1JBVEVNQ1M0ID0gMHgxMCwKKwlERVNDOTJDX1JBVEVNQ1M1ID0gMHgxMSwKKwlERVNDOTJDX1JBVEVNQ1M2ID0gMHgxMiwKKwlERVNDOTJDX1JBVEVNQ1M3ID0gMHgxMywKKwlERVNDOTJDX1JBVEVNQ1M4ID0gMHgxNCwKKwlERVNDOTJDX1JBVEVNQ1M5ID0gMHgxNSwKKwlERVNDOTJDX1JBVEVNQ1MxMCA9IDB4MTYsCisJREVTQzkyQ19SQVRFTUNTMTEgPSAweDE3LAorCURFU0M5MkNfUkFURU1DUzEyID0gMHgxOCwKKwlERVNDOTJDX1JBVEVNQ1MxMyA9IDB4MTksCisJREVTQzkyQ19SQVRFTUNTMTQgPSAweDFhLAorCURFU0M5MkNfUkFURU1DUzE1ID0gMHgxYiwKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9kbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzJkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9kbS5jCkBAIC0wLDAgKzEsMTI1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAidHJ4LmgiCisKK3N0cnVjdCBkaWdfdCBkbV9kaWc7CisKK3N0YXRpYyBjb25zdCB1MzIgb2ZkbXN3aW5nX3RhYmxlW09GRE1fVEFCTEVfU0laRV0gPSB7CisJMHg3ZjgwMDFmZSwJCS8qIDAsICs2LjBkQiAqLworCTB4Nzg4MDAxZTIsCQkvKiAxLCArNS41ZEIgKi8KKwkweDcxYzAwMWM3LAkJLyogMiwgKzUuMGRCICovCisJMHg2YjgwMDFhZSwJCS8qIDMsICs0LjVkQiAqLworCTB4NjU0MDAxOTUsCQkvKiA0LCArNC4wZEIgKi8KKwkweDVmYzAwMTdmLAkJLyogNSwgKzMuNWRCICovCisJMHg1YTQwMDE2OSwJCS8qIDYsICszLjBkQiAqLworCTB4NTU0MDAxNTUsCQkvKiA3LCArMi41ZEIgKi8KKwkweDUwODAwMTQyLAkJLyogOCwgKzIuMGRCICovCisJMHg0YzAwMDEzMCwJCS8qIDksICsxLjVkQiAqLworCTB4NDdjMDAxMWYsCQkvKiAxMCwgKzEuMGRCICovCisJMHg0M2MwMDEwZiwJCS8qIDExLCArMC41ZEIgKi8KKwkweDQwMDAwMTAwLAkJLyogMTIsICswZEIgKi8KKwkweDNjODAwMGYyLAkJLyogMTMsIC0wLjVkQiAqLworCTB4MzkwMDAwZTQsCQkvKiAxNCwgLTEuMGRCICovCisJMHgzNWMwMDBkNywJCS8qIDE1LCAtMS41ZEIgKi8KKwkweDMyYzAwMGNiLAkJLyogMTYsIC0yLjBkQiAqLworCTB4MzAwMDAwYzAsCQkvKiAxNywgLTIuNWRCICovCisJMHgyZDQwMDBiNSwJCS8qIDE4LCAtMy4wZEIgKi8KKwkweDJhYzAwMGFiLAkJLyogMTksIC0zLjVkQiAqLworCTB4Mjg4MDAwYTIsCQkvKiAyMCwgLTQuMGRCICovCisJMHgyNjAwMDA5OCwJCS8qIDIxLCAtNC41ZEIgKi8KKwkweDI0MDAwMDkwLAkJLyogMjIsIC01LjBkQiAqLworCTB4MjIwMDAwODgsCQkvKiAyMywgLTUuNWRCICovCisJMHgyMDAwMDA4MCwJCS8qIDI0LCAtNi4wZEIgKi8KKwkweDFlNDAwMDc5LAkJLyogMjUsIC02LjVkQiAqLworCTB4MWM4MDAwNzIsCQkvKiAyNiwgLTcuMGRCICovCisJMHgxYjAwMDA2YywJCS8qIDI3LiAtNy41ZEIgKi8KKwkweDE5ODAwMDY2LAkJLyogMjgsIC04LjBkQiAqLworCTB4MTgwMDAwNjAsCQkvKiAyOSwgLTguNWRCICovCisJMHgxNmMwMDA1YiwJCS8qIDMwLCAtOS4wZEIgKi8KKwkweDE1ODAwMDU2LAkJLyogMzEsIC05LjVkQiAqLworCTB4MTQ0MDAwNTEsCQkvKiAzMiwgLTEwLjBkQiAqLworCTB4MTMwMDAwNGMsCQkvKiAzMywgLTEwLjVkQiAqLworCTB4MTIwMDAwNDgsCQkvKiAzNCwgLTExLjBkQiAqLworCTB4MTEwMDAwNDQsCQkvKiAzNSwgLTExLjVkQiAqLworCTB4MTAwMDAwNDAsCQkvKiAzNiwgLTEyLjBkQiAqLworCTB4MGYwMDAwM2MsCQkvKiAzNywgLTEyLjVkQiAqLworCTB4MGU0MDAwMzksCQkvKiAzOCwgLTEzLjBkQiAqLworCTB4MGQ4MDAwMzYsCQkvKiAzOSwgLTEzLjVkQiAqLworCTB4MGNjMDAwMzMsCQkvKiA0MCwgLTE0LjBkQiAqLworCTB4MGMwMDAwMzAsCQkvKiA0MSwgLTE0LjVkQiAqLworCTB4MGI0MDAwMmQsCQkvKiA0MiwgLTE1LjBkQiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IGNja3N3aW5nX3RhYmxlX2NoMWNoMTNbQ0NLX1RBQkxFX1NJWkVdWzhdID0geworCXsweDM2LCAweDM1LCAweDJlLCAweDI1LCAweDFjLCAweDEyLCAweDA5LCAweDA0fSwgLyogMCwgKzBkQiAqLworCXsweDMzLCAweDMyLCAweDJiLCAweDIzLCAweDFhLCAweDExLCAweDA4LCAweDA0fSwgLyogMSwgLTAuNWRCICovCisJezB4MzAsIDB4MmYsIDB4MjksIDB4MjEsIDB4MTksIDB4MTAsIDB4MDgsIDB4MDN9LCAvKiAyLCAtMS4wZEIgKi8KKwl7MHgyZCwgMHgyZCwgMHgyNywgMHgxZiwgMHgxOCwgMHgwZiwgMHgwOCwgMHgwM30sIC8qIDMsIC0xLjVkQiAqLworCXsweDJiLCAweDJhLCAweDI1LCAweDFlLCAweDE2LCAweDBlLCAweDA3LCAweDAzfSwgLyogNCwgLTIuMGRCICovCisJezB4MjgsIDB4MjgsIDB4MjIsIDB4MWMsIDB4MTUsIDB4MGQsIDB4MDcsIDB4MDN9LCAvKiA1LCAtMi41ZEIgKi8KKwl7MHgyNiwgMHgyNSwgMHgyMSwgMHgxYiwgMHgxNCwgMHgwZCwgMHgwNiwgMHgwM30sIC8qIDYsIC0zLjBkQiAqLworCXsweDI0LCAweDIzLCAweDFmLCAweDE5LCAweDEzLCAweDBjLCAweDA2LCAweDAzfSwgLyogNywgLTMuNWRCICovCisJezB4MjIsIDB4MjEsIDB4MWQsIDB4MTgsIDB4MTEsIDB4MGIsIDB4MDYsIDB4MDJ9LCAvKiA4LCAtNC4wZEIgKi8KKwl7MHgyMCwgMHgyMCwgMHgxYiwgMHgxNiwgMHgxMSwgMHgwOCwgMHgwNSwgMHgwMn0sIC8qIDksIC00LjVkQiAqLworCXsweDFmLCAweDFlLCAweDFhLCAweDE1LCAweDEwLCAweDBhLCAweDA1LCAweDAyfSwgLyogMTAsIC01LjBkQiAqLworCXsweDFkLCAweDFjLCAweDE4LCAweDE0LCAweDBmLCAweDBhLCAweDA1LCAweDAyfSwgLyogMTEsIC01LjVkQiAqLworCXsweDFiLCAweDFhLCAweDE3LCAweDEzLCAweDBlLCAweDA5LCAweDA0LCAweDAyfSwgLyogMTIsIC02LjBkQiAqLworCXsweDFhLCAweDE5LCAweDE2LCAweDEyLCAweDBkLCAweDA5LCAweDA0LCAweDAyfSwgLyogMTMsIC02LjVkQiAqLworCXsweDE4LCAweDE3LCAweDE1LCAweDExLCAweDBjLCAweDA4LCAweDA0LCAweDAyfSwgLyogMTQsIC03LjBkQiAqLworCXsweDE3LCAweDE2LCAweDEzLCAweDEwLCAweDBjLCAweDA4LCAweDA0LCAweDAyfSwgLyogMTUsIC03LjVkQiAqLworCXsweDE2LCAweDE1LCAweDEyLCAweDBmLCAweDBiLCAweDA3LCAweDA0LCAweDAxfSwgLyogMTYsIC04LjBkQiAqLworCXsweDE0LCAweDE0LCAweDExLCAweDBlLCAweDBiLCAweDA3LCAweDAzLCAweDAyfSwgLyogMTcsIC04LjVkQiAqLworCXsweDEzLCAweDEzLCAweDEwLCAweDBkLCAweDBhLCAweDA2LCAweDAzLCAweDAxfSwgLyogMTgsIC05LjBkQiAqLworCXsweDEyLCAweDEyLCAweDBmLCAweDBjLCAweDA5LCAweDA2LCAweDAzLCAweDAxfSwgLyogMTksIC05LjVkQiAqLworCXsweDExLCAweDExLCAweDBmLCAweDBjLCAweDA5LCAweDA2LCAweDAzLCAweDAxfSwgLyogMjAsIC0xMC4wZEIgKi8KKwl7MHgxMCwgMHgxMCwgMHgwZSwgMHgwYiwgMHgwOCwgMHgwNSwgMHgwMywgMHgwMX0sIC8qIDIxLCAtMTAuNWRCICovCisJezB4MGYsIDB4MGYsIDB4MGQsIDB4MGIsIDB4MDgsIDB4MDUsIDB4MDMsIDB4MDF9LCAvKiAyMiwgLTExLjBkQiAqLworCXsweDBlLCAweDBlLCAweDBjLCAweDBhLCAweDA4LCAweDA1LCAweDAyLCAweDAxfSwgLyogMjMsIC0xMS41ZEIgKi8KKwl7MHgwZCwgMHgwZCwgMHgwYywgMHgwYSwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMX0sIC8qIDI0LCAtMTIuMGRCICovCisJezB4MGQsIDB4MGMsIDB4MGIsIDB4MDksIDB4MDcsIDB4MDQsIDB4MDIsIDB4MDF9LCAvKiAyNSwgLTEyLjVkQiAqLworCXsweDBjLCAweDBjLCAweDBhLCAweDA5LCAweDA2LCAweDA0LCAweDAyLCAweDAxfSwgLyogMjYsIC0xMy4wZEIgKi8KKwl7MHgwYiwgMHgwYiwgMHgwYSwgMHgwOCwgMHgwNiwgMHgwNCwgMHgwMiwgMHgwMX0sIC8qIDI3LCAtMTMuNWRCICovCisJezB4MGIsIDB4MGEsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDF9LCAvKiAyOCwgLTE0LjBkQiAqLworCXsweDBhLCAweDBhLCAweDA5LCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDAxfSwgLyogMjksIC0xNC41ZEIgKi8KKwl7MHgwYSwgMHgwOSwgMHgwOCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHgwMX0sIC8qIDMwLCAtMTUuMGRCICovCisJezB4MDksIDB4MDksIDB4MDgsIDB4MDYsIDB4MDUsIDB4MDMsIDB4MDEsIDB4MDF9LCAvKiAzMSwgLTE1LjVkQiAqLworCXsweDA5LCAweDA4LCAweDA3LCAweDA2LCAweDA0LCAweDAzLCAweDAxLCAweDAxfSAgLyogMzIsIC0xNi4wZEIgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBjY2tzd2luZ190YWJsZV9jaDE0W0NDS19UQUJMRV9TSVpFXVs4XSA9IHsKKwl7MHgzNiwgMHgzNSwgMHgyZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDAsICswZEIgKi8KKwl7MHgzMywgMHgzMiwgMHgyYiwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEsIC0wLjVkQiAqLworCXsweDMwLCAweDJmLCAweDI5LCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMiwgLTEuMGRCICovCisJezB4MmQsIDB4MmQsIDB4MTcsIDB4MTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAzLCAtMS41ZEIgKi8KKwl7MHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDQsIC0yLjBkQiAqLworCXsweDI4LCAweDI4LCAweDI0LCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogNSwgLTIuNWRCICovCisJezB4MjYsIDB4MjUsIDB4MjEsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiA2LCAtMy4wZEIgKi8KKwl7MHgyNCwgMHgyMywgMHgxZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDcsIC0zLjVkQiAqLworCXsweDIyLCAweDIxLCAweDFkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogOCwgLTQuMGRCICovCisJezB4MjAsIDB4MjAsIDB4MWIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiA5LCAtNC41ZEIgKi8KKwl7MHgxZiwgMHgxZSwgMHgxYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEwLCAtNS4wZEIgKi8KKwl7MHgxZCwgMHgxYywgMHgxOCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDExLCAtNS41ZEIgKi8KKwl7MHgxYiwgMHgxYSwgMHgxNywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEyLCAtNi4wZEIgKi8KKwl7MHgxYSwgMHgxOSwgMHgxNiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEzLCAtNi41ZEIgKi8KKwl7MHgxOCwgMHgxNywgMHgxNSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE0LCAtNy4wZEIgKi8KKwl7MHgxNywgMHgxNiwgMHgxMywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE1LCAtNy41ZEIgKi8KKwl7MHgxNiwgMHgxNSwgMHgxMiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE2LCAtOC4wZEIgKi8KKwl7MHgxNCwgMHgxNCwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE3LCAtOC41ZEIgKi8KKwl7MHgxMywgMHgxMywgMHgxMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE4LCAtOS4wZEIgKi8KKwl7MHgxMiwgMHgxMiwgMHgwZiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE5LCAtOS41ZEIgKi8KKwl7MHgxMSwgMHgxMSwgMHgwZiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDIwLCAtMTAuMGRCICovCisJezB4MTAsIDB4MTAsIDB4MGUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAyMSwgLTEwLjVkQiAqLworCXsweDBmLCAweDBmLCAweDBkLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMjIsIC0xMS4wZEIgKi8KKwl7MHgwZSwgMHgwZSwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDIzLCAtMTEuNWRCICovCisJezB4MGQsIDB4MGQsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAyNCwgLTEyLjBkQiAqLworCXsweDBkLCAweDBjLCAweDBiLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMjUsIC0xMi41ZEIgKi8KKwl7MHgwYywgMHgwYywgMHgwYSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDI2LCAtMTMuMGRCICovCisJezB4MGIsIDB4MGIsIDB4MGEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAyNywgLTEzLjVkQiAqLworCXsweDBiLCAweDBhLCAweDA5LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMjgsIC0xNC4wZEIgKi8KKwl7MHgwYSwgMHgwYSwgMHgwOSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDI5LCAtMTQuNWRCICovCisJezB4MGEsIDB4MDksIDB4MDgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAzMCwgLTE1LjBkQiAqLworCXsweDA5LCAweDA5LCAweDA4LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMzEsIC0xNS41ZEIgKi8KKwl7MHgwOSwgMHgwOCwgMHgwNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0gIC8qIDMyLCAtMTYuMGRCICovCit9OworCitzdGF0aWMgdm9pZCBydGw5MmVlX2RtX2RpZ2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWRtX2RpZy5jdXJfaWd2YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIERNX1JFR19JR0lfQV8xMU4sCisJCQkJCQlETV9CSVRfSUdJXzExTik7CisJZG1fZGlnLnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7CisJZG1fZGlnLnJzc2lfaGlnaHRocmVzaCA9IERNX0RJR19USFJFU0hfSElHSDsKKwlkbV9kaWcuZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOworCWRtX2RpZy5mYV9oaWdodGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSDsKKwlkbV9kaWcucnhfZ2Fpbl9yYW5nZV9tYXggPSBETV9ESUdfTUFYOworCWRtX2RpZy5yeF9nYWluX3JhbmdlX21pbiA9IERNX0RJR19NSU47CisJZG1fZGlnLmJhY2tvZmZfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKKwlkbV9kaWcuYmFja29mZl92YWxfcmFuZ2VfbWF4ID0gRE1fRElHX0JBQ0tPRkZfTUFYOworCWRtX2RpZy5iYWNrb2ZmX3ZhbF9yYW5nZV9taW4gPSBETV9ESUdfQkFDS09GRl9NSU47CisJZG1fZGlnLnByZV9jY2tfY2NhX3RocmVzID0gMHhmZjsKKwlkbV9kaWcuY3VyX2Nja19jY2FfdGhyZXMgPSAweDgzOworCWRtX2RpZy5mb3JiaWRkZW5faWdpID0gRE1fRElHX01JTjsKKwlkbV9kaWcubGFyZ2VfZmFfaGl0ID0gMDsKKwlkbV9kaWcucmVjb3Zlcl9jbnQgPSAwOworCWRtX2RpZy5kaWdfZHluYW1pY19taW5fMCA9IERNX0RJR19NSU47CisJZG1fZGlnLmRpZ19keW5hbWljX21pbl8xID0gRE1fRElHX01JTjsKKwlkbV9kaWcuYl9tZWRpYV9jb25uZWN0XzAgPSBmYWxzZTsKKwlkbV9kaWcuYl9tZWRpYV9jb25uZWN0XzEgPSBmYWxzZTsKKwlydGxwcml2LT5kbS5iX2RtX2luaXRpYWxnYWluX2VuYWJsZSA9IHRydWU7CisJZG1fZGlnLmJ0MzBfY3VyX2lnaSA9IDB4MzI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fZmFsc2VfYWxhcm1fY291bnRlcl9zdGF0aXN0aWNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXUzMiByZXRfdmFsdWU7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBmYWxzZV9hbGFybV9zdGF0aXN0aWNzICpmYWxzZWFsbV9jbnQgPSAmKHJ0bHByaXYtPmZhbHNlYWxtX2NudCk7CisKKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfT0ZETV9GQV9IT0xEQ18xMU4sIEJJVCgzMSksIDEpOworCXJ0bF9zZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX1JTVERfMTFOLCBCSVQoMzEpLCAxKTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX1RZUEUxXzExTiwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9mYXN0X2ZzeW5jX2ZhaWwgPSAocmV0X3ZhbHVlICYgMHhmZmZmKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9zYl9zZWFyY2hfZmFpbCA9ICgocmV0X3ZhbHVlICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgRE1fUkVHX09GRE1fRkFfVFlQRTJfMTFOLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X29mZG1fY2NhID0gKHJldF92YWx1ZSAmIDB4ZmZmZik7CisJZmFsc2VhbG1fY250LT5jbnRfcGFyaXR5X2ZhaWwgPSAoKHJldF92YWx1ZSAmIDB4ZmZmZjAwMDApID4+IDE2KTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX1RZUEUzXzExTiwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9yYXRlX2lsbGVnYWwgPSAocmV0X3ZhbHVlICYgMHhmZmZmKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9jcmM4X2ZhaWwgPSAoKHJldF92YWx1ZSAmIDB4ZmZmZjAwMDApID4+IDE2KTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX1RZUEU0XzExTiwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9tY3NfZmFpbCA9IChyZXRfdmFsdWUgJiAweGZmZmYpOworCisJZmFsc2VhbG1fY250LT5jbnRfb2ZkbV9mYWlsID0gZmFsc2VhbG1fY250LT5jbnRfcGFyaXR5X2ZhaWwgKworCQkJCSAgICAgIGZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCArCisJCQkJICAgICAgZmFsc2VhbG1fY250LT5jbnRfY3JjOF9mYWlsICsKKwkJCQkgICAgICBmYWxzZWFsbV9jbnQtPmNudF9tY3NfZmFpbCArCisJCQkJICAgICAgZmFsc2VhbG1fY250LT5jbnRfZmFzdF9mc3luY19mYWlsICsKKwkJCQkgICAgICBmYWxzZWFsbV9jbnQtPmNudF9zYl9zZWFyY2hfZmFpbDsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIERNX1JFR19TQ19DTlRfMTFOLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X2J3X2xzYyA9IChyZXRfdmFsdWUgJiAweGZmZmYpOworCWZhbHNlYWxtX2NudC0+Y250X2J3X3VzYyA9ICgocmV0X3ZhbHVlICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCisJcnRsX3NldF9iYnJlZyhodywgRE1fUkVHX0NDS19GQV9SU1RfMTFOLCBCSVQoMTIpLCAxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVCgxNCksIDEpOworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgRE1fUkVHX0NDS19GQV9MU0JfMTFOLCBNQVNLQllURTApOworCWZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsID0gcmV0X3ZhbHVlOworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgRE1fUkVHX0NDS19GQV9NU0JfMTFOLCBNQVNLQllURTMpOworCWZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsICs9IChyZXRfdmFsdWUgJiAweGZmKSA8PCA4OworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgRE1fUkVHX0NDS19DQ0FfQ05UXzExTiwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9jY2tfY2NhID0gKChyZXRfdmFsdWUgJiAweGZmKSA8PCA4KSB8CisJCQkJICAgICgocmV0X3ZhbHVlICYgMHhGRjAwKSA+PiA4KTsKKworCWZhbHNlYWxtX2NudC0+Y250X2FsbCA9IGZhbHNlYWxtX2NudC0+Y250X2Zhc3RfZnN5bmNfZmFpbCArCisJCQkJZmFsc2VhbG1fY250LT5jbnRfc2Jfc2VhcmNoX2ZhaWwgKworCQkJCWZhbHNlYWxtX2NudC0+Y250X3Bhcml0eV9mYWlsICsKKwkJCQlmYWxzZWFsbV9jbnQtPmNudF9yYXRlX2lsbGVnYWwgKworCQkJCWZhbHNlYWxtX2NudC0+Y250X2NyYzhfZmFpbCArCisJCQkJZmFsc2VhbG1fY250LT5jbnRfbWNzX2ZhaWwgKworCQkJCWZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsOworCisJZmFsc2VhbG1fY250LT5jbnRfY2NhX2FsbCA9IGZhbHNlYWxtX2NudC0+Y250X29mZG1fY2NhICsKKwkJCQkgICAgZmFsc2VhbG1fY250LT5jbnRfY2NrX2NjYTsKKworCS8qcmVzZXQgZmFsc2UgYWxhcm0gY291bnRlciByZWdpc3RlcnMqLworCXJ0bF9zZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX1JTVENfMTFOLCBCSVQoMzEpLCAxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfT0ZETV9GQV9SU1RDXzExTiwgQklUKDMxKSwgMCk7CisJcnRsX3NldF9iYnJlZyhodywgRE1fUkVHX09GRE1fRkFfUlNURF8xMU4sIEJJVCgyNyksIDEpOworCXJ0bF9zZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX1JTVERfMTFOLCBCSVQoMjcpLCAwKTsKKwkvKnVwZGF0ZSBvZmRtIGNvdW50ZXIqLworCXJ0bF9zZXRfYmJyZWcoaHcsIERNX1JFR19PRkRNX0ZBX0hPTERDXzExTiwgQklUKDMxKSwgMCk7CisJcnRsX3NldF9iYnJlZyhodywgRE1fUkVHX09GRE1fRkFfUlNURF8xMU4sIEJJVCgzMSksIDApOworCS8qcmVzZXQgQ0NLIENDQSBjb3VudGVyKi8KKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVCgxMykgfCBCSVQoMTIpLCAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVCgxMykgfCBCSVQoMTIpLCAyKTsKKwkvKnJlc2V0IENDSyBGQSBjb3VudGVyKi8KKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVCgxNSkgfCBCSVQoMTQpLCAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVCgxNSkgfCBCSVQoMTQpLCAyKTsKKworCisJUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19UUkFDRSwKKwkJICgiY250X3Bhcml0eV9mYWlsID0gJWQsIGNudF9yYXRlX2lsbGVnYWwgPSAlZCwgIgorCQkgICJjbnRfY3JjOF9mYWlsID0gJWQsIGNudF9tY3NfZmFpbCA9ICVkXG4iLAorCQkgIGZhbHNlYWxtX2NudC0+Y250X3Bhcml0eV9mYWlsLAorCQkgIGZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCwKKwkJICBmYWxzZWFsbV9jbnQtPmNudF9jcmM4X2ZhaWwsIGZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsKSk7CisKKwlSVF9UUkFDRShDT01QX0RJRywgREJHX1RSQUNFLAorCQkgKCJjbnRfb2ZkbV9mYWlsID0gJXgsIGNudF9jY2tfZmFpbCA9ICV4LCBjbnRfYWxsID0gJXhcbiIsCisJCSAgZmFsc2VhbG1fY250LT5jbnRfb2ZkbV9mYWlsLAorCQkgIGZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsLCBmYWxzZWFsbV9jbnQtPmNudF9hbGwpKTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJlZV9kbV9jY2tfcGFja2V0X2RldGVjdGlvbl90aHJlc2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IGN1cl9jY2tfY2NhX3RocmVzaDsKKwlpZiAocnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKGRtX2RpZy5yc3NpX3ZhbF9taW4gPiAyNSkgeworCQkJY3VyX2Nja19jY2FfdGhyZXNoID0gMHhjZDsKKwkJfSBlbHNlIGlmICgoZG1fZGlnLnJzc2lfdmFsX21pbiA8PSAyNSkgJiYKKwkJCSAgIChkbV9kaWcucnNzaV92YWxfbWluID4gMTApKSB7CisJCQljdXJfY2NrX2NjYV90aHJlc2ggPSAweDgzOworCQl9IGVsc2UgeworCQkJaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfY2NrX2ZhaWwgPiAxMDAwKQorCQkJCWN1cl9jY2tfY2NhX3RocmVzaCA9IDB4ODM7CisJCQllbHNlCisJCQkJY3VyX2Nja19jY2FfdGhyZXNoID0gMHg0MDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChydGxwcml2LT5mYWxzZWFsbV9jbnQuY250X2Nja19mYWlsID4gMTAwMCkKKwkJCWN1cl9jY2tfY2NhX3RocmVzaCA9IDB4ODM7CisJCWVsc2UKKwkJCWN1cl9jY2tfY2NhX3RocmVzaCA9IDB4NDA7CisJfQorCXJ0bDkyZWVfZG1fd3JpdGVfY2NrX2NjYV90aHJlcyhodywgY3VyX2Nja19jY2FfdGhyZXNoKTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJlZV9kbV9kaWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTggZGlnX2R5bmFtaWNfbWluICwgZGlnX21heG9mbWluOworCWJvb2wgYmZpcnN0Y29ubmVjdCAsIGJmaXJzdGRpc2Nvbm5lY3Q7CisJdTggZG1fZGlnX21heCwgZG1fZGlnX21pbjsKKwl1OCBjdXJyZW50X2lnaSA9IGRtX2RpZy5jdXJfaWd2YWx1ZTsKKwl1OCBvZmZzZXQ7CisKKwkvKiBBUCwgQlQgKi8KKwlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkKKwkJcmV0dXJuOworCisJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnLmRpZ19keW5hbWljX21pbl8wOworCWJmaXJzdGNvbm5lY3QgPSAobWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkgJiYKKwkJCShkbV9kaWcuYl9tZWRpYV9jb25uZWN0XzAgPT0gZmFsc2UpOworCWJmaXJzdGRpc2Nvbm5lY3QgPSAobWFjLT5saW5rX3N0YXRlIDwgTUFDODAyMTFfTElOS0VEKSAmJgorCQkJICAgKGRtX2RpZy5iX21lZGlhX2Nvbm5lY3RfMCA9PSB0cnVlKTsKKworCWRtX2RpZ19tYXggPSAweDVhOworCWRtX2RpZ19taW4gPSBETV9ESUdfTUlOOworCWRpZ19tYXhvZm1pbiA9IERNX0RJR19NQVhfQVA7CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkgeworCQlpZiAoKGRtX2RpZy5yc3NpX3ZhbF9taW4gKyAxMCkgPiBkbV9kaWdfbWF4KQorCQkJZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWF4ID0gZG1fZGlnX21heDsKKwkJZWxzZSBpZiAoKGRtX2RpZy5yc3NpX3ZhbF9taW4gKyAxMCkgPCBkbV9kaWdfbWluKQorCQkJZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWF4ID0gZG1fZGlnX21pbjsKKwkJZWxzZQorCQkJZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWF4ID0gZG1fZGlnLnJzc2lfdmFsX21pbiArIDEwOworCisJCWlmIChydGxwcml2LT5kbS5iX29uZV9lbnRyeV9vbmx5KSB7CisJCQlvZmZzZXQgPSAwOworCQkJaWYgKGRtX2RpZy5yc3NpX3ZhbF9taW4gLSBvZmZzZXQgPCBkbV9kaWdfbWluKQorCQkJCWRpZ19keW5hbWljX21pbiA9IGRtX2RpZ19taW47CisJCQllbHNlIGlmIChkbV9kaWcucnNzaV92YWxfbWluIC0gb2Zmc2V0ID4KKwkJCQkgZGlnX21heG9mbWluKQorCQkJCWRpZ19keW5hbWljX21pbiA9IGRpZ19tYXhvZm1pbjsKKwkJCWVsc2UKKwkJCQlkaWdfZHluYW1pY19taW4gPSBkbV9kaWcucnNzaV92YWxfbWluIC0gb2Zmc2V0OworCQl9IGVsc2UgeworCQkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnX21pbjsKKwkJfQorCisJfSBlbHNlIHsKKwkJZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWF4ID0gZG1fZGlnX21heDsKKwkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnX21pbjsKKwkJUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19MT1VELCAoIm5vIGxpbmtcbiIpKTsKKwl9CisKKwlpZiAocnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9hbGwgPiAxMDAwMCkgeworCQlpZiAoZG1fZGlnLmxhcmdlX2ZhX2hpdCAhPSAzKQorCQkJZG1fZGlnLmxhcmdlX2ZhX2hpdCsrOworCQlpZiAoZG1fZGlnLmZvcmJpZGRlbl9pZ2kgPCBjdXJyZW50X2lnaSkgeworCQkJZG1fZGlnLmZvcmJpZGRlbl9pZ2kgPSBjdXJyZW50X2lnaTsKKwkJCWRtX2RpZy5sYXJnZV9mYV9oaXQgPSAxOworCQl9CisKKwkJaWYgKGRtX2RpZy5sYXJnZV9mYV9oaXQgPj0gMykgeworCQkJaWYgKGRtX2RpZy5mb3JiaWRkZW5faWdpICsgMSA+IGRtX2RpZy5yeF9nYWluX3JhbmdlX21heCkKKwkJCQlkbV9kaWcucnhfZ2Fpbl9yYW5nZV9taW4gPQorCQkJCQkJZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWF4OworCQkJZWxzZQorCQkJCWRtX2RpZy5yeF9nYWluX3JhbmdlX21pbiA9CisJCQkJCQlkbV9kaWcuZm9yYmlkZGVuX2lnaSArIDE7CisJCQlkbV9kaWcucmVjb3Zlcl9jbnQgPSAzNjAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGRtX2RpZy5yZWNvdmVyX2NudCAhPSAwKSB7CisJCQlkbV9kaWcucmVjb3Zlcl9jbnQtLTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkbV9kaWcubGFyZ2VfZmFfaGl0IDwgMykgeworCQkJCWlmICgoZG1fZGlnLmZvcmJpZGRlbl9pZ2kgLSAxKSA8CisJCQkJICAgIGRpZ19keW5hbWljX21pbikgeworCQkJCQlkbV9kaWcuZm9yYmlkZGVuX2lnaSA9IGRpZ19keW5hbWljX21pbjsKKwkJCQkJZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWluID0KKwkJCQkJCQkJZGlnX2R5bmFtaWNfbWluOworCQkJCX0gZWxzZSB7CisJCQkJCWRtX2RpZy5mb3JiaWRkZW5faWdpLS07CisJCQkJCWRtX2RpZy5yeF9nYWluX3JhbmdlX21pbiA9CisJCQkJCQlkbV9kaWcuZm9yYmlkZGVuX2lnaSArIDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkbV9kaWcubGFyZ2VfZmFfaGl0ID0gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChydGxwcml2LT5kbS5kYmdpbmZvLm51bV9xcnlfYmVhY29uX3BrdCA8IDUpCisJCWRtX2RpZy5yeF9nYWluX3JhbmdlX21pbiA9IGRtX2RpZ19taW47CisKKwlpZiAoZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWluID4gZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWF4KQorCQlkbV9kaWcucnhfZ2Fpbl9yYW5nZV9taW4gPSBkbV9kaWcucnhfZ2Fpbl9yYW5nZV9tYXg7CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkgeworCQlpZiAoYmZpcnN0Y29ubmVjdCkgeworCQkJaWYgKGRtX2RpZy5yc3NpX3ZhbF9taW4gPD0gZGlnX21heG9mbWluKQorCQkJCWN1cnJlbnRfaWdpID0gZG1fZGlnLnJzc2lfdmFsX21pbjsKKwkJCWVsc2UKKwkJCQljdXJyZW50X2lnaSA9IGRpZ19tYXhvZm1pbjsKKworCQkJZG1fZGlnLmxhcmdlX2ZhX2hpdCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAocnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9hbGwgPiBETV9ESUdfRkFfVEgyKQorCQkJCWN1cnJlbnRfaWdpICs9IDQ7CisJCQllbHNlIGlmIChydGxwcml2LT5mYWxzZWFsbV9jbnQuY250X2FsbCA+IERNX0RJR19GQV9USDEpCisJCQkJY3VycmVudF9pZ2kgKz0gMjsKKwkJCWVsc2UgaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfYWxsIDwgRE1fRElHX0ZBX1RIMCkKKwkJCQljdXJyZW50X2lnaSAtPSAyOworCisJCQlpZiAocnRscHJpdi0+ZG0uZGJnaW5mby5udW1fcXJ5X2JlYWNvbl9wa3QgPCA1ICYmCisJCQkgICAgcnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9hbGwgPCBETV9ESUdfRkFfVEgxKQorCQkJCWN1cnJlbnRfaWdpID0gZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWluOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGJmaXJzdGRpc2Nvbm5lY3QpIHsKKwkJCWN1cnJlbnRfaWdpID0gZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWluOworCQl9IGVsc2UgeworCQkJaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfYWxsID4gMTAwMDApCisJCQkJY3VycmVudF9pZ2kgKz0gNDsKKwkJCWVsc2UgaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfYWxsID4gODAwMCkKKwkJCQljdXJyZW50X2lnaSArPSAyOworCQkJZWxzZSBpZiAocnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9hbGwgPCA1MDApCisJCQkJY3VycmVudF9pZ2kgLT0gMjsKKwkJfQorCX0KKworCWlmIChjdXJyZW50X2lnaSA+IGRtX2RpZy5yeF9nYWluX3JhbmdlX21heCkKKwkJY3VycmVudF9pZ2kgPSBkbV9kaWcucnhfZ2Fpbl9yYW5nZV9tYXg7CisJaWYgKGN1cnJlbnRfaWdpIDwgZG1fZGlnLnJ4X2dhaW5fcmFuZ2VfbWluKQorCQljdXJyZW50X2lnaSA9IGRtX2RpZy5yeF9nYWluX3JhbmdlX21pbjsKKworCXJ0bDkyZWVfZG1fd3JpdGVfZGlnKGh3ICwgY3VycmVudF9pZ2kpOworCWRtX2RpZy5iX21lZGlhX2Nvbm5lY3RfMCA9ICgobWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkgPworCQkJCSAgIHRydWUgOiBmYWxzZSk7CisJZG1fZGlnLmRpZ19keW5hbWljX21pbl8wID0gZGlnX2R5bmFtaWNfbWluOworfQorCit2b2lkIHJ0bDkyZWVfZG1fd3JpdGVfY2NrX2NjYV90aHJlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY3VyX3RocmVzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpZiAoZG1fZGlnLmN1cl9jY2tfY2NhX3RocmVzICE9IGN1cl90aHJlcykKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgRE1fUkVHX0NDS19DQ0FfMTFOLCBjdXJfdGhyZXMpOworCisJZG1fZGlnLnByZV9jY2tfY2NhX3RocmVzID0gZG1fZGlnLmN1cl9jY2tfY2NhX3RocmVzOworCWRtX2RpZy5jdXJfY2NrX2NjYV90aHJlcyA9IGN1cl90aHJlczsKK30KKwordm9pZCBydGw5MmVlX2RtX3dyaXRlX2RpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY3VycmVudF9pZ2kpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWlmIChkbV9kaWcuc3RvcF9kaWcpCisJCXJldHVybjsKKworCWlmIChkbV9kaWcuY3VyX2lndmFsdWUgIT0gY3VycmVudF9pZ2kpIHsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIDB4N2YsIGN1cnJlbnRfaWdpKTsKKwkJaWYgKHJ0bHByaXYtPnBoeS5yZl90eXBlICE9IFJGXzFUMVIpCisJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEJBR0NDT1JFMSwgMHg3ZiwgY3VycmVudF9pZ2kpOworCX0KKwlkbV9kaWcucHJlX2lndmFsdWUgPSBkbV9kaWcuY3VyX2lndmFsdWU7CisJZG1fZGlnLmN1cl9pZ3ZhbHVlID0gY3VycmVudF9pZ2k7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfcnNzaV9kdW1wX3RvX3JlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSQV9SU1NJRFVNUCwKKwkJICAgICAgIHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVswXSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkJfUlNTSURVTVAsCisJCSAgICAgICBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbMV0pOworCS8qSXQgc2VlbXMgdGhlIGZvbGxvd2luZyB2YWx1ZXMgaXMgbm90IGluaXRpYWxpemVkLgorCSAgKkFjY29yZGluZyB0byBXaW5kb3dzIGNvZGUsCisJICAqdGhlc2UgdmFsdWUgd2lsbCBvbmx5IGJlIHZhbGlkIHdoZW4gSkFHVUFSIGNoaXBzKi8KKwkvKiBSeCBFVk0gKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSUzFfUlhFVk1EVU1QLCBydGxwcml2LT5zdGF0cy5yeF9ldm1fZGJtWzBdKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSUzJfUlhFVk1EVU1QLCBydGxwcml2LT5zdGF0cy5yeF9ldm1fZGJtWzFdKTsKKwkvKiBSeCBTTlIgKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSQV9SWFNOUkRVTVAsCisJCSAgICAgICAodTgpKHJ0bHByaXYtPnN0YXRzLnJ4X3Nucl9kYlswXSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJCX1JYU05SRFVNUCwKKwkJICAgICAgICh1OCkocnRscHJpdi0+c3RhdHMucnhfc25yX2RiWzFdKSk7CisJLyogUnggQ2ZvX1Nob3J0ICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkFfQ0ZPU0hPUlREVU1QLAorCQkgICAgICAgcnRscHJpdi0+c3RhdHMucnhfY2ZvX3Nob3J0WzBdKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSQl9DRk9TSE9SVERVTVAsCisJCSAgICAgICBydGxwcml2LT5zdGF0cy5yeF9jZm9fc2hvcnRbMV0pOworCS8qIFJ4IENmb19UYWlsICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkFfQ0ZPTE9OR0RVTVAsIHJ0bHByaXYtPnN0YXRzLnJ4X2Nmb190YWlsWzBdKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSQl9DRk9MT05HRFVNUCwgcnRscHJpdi0+c3RhdHMucnhfY2ZvX3RhaWxbMV0pOworfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX2RtX2ZpbmRfbWluaW11bV9yc3NpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2RpZyAqcnRsX2RtX2RpZyA9ICYocnRscHJpdi0+ZG0uZG1fZGlndGFibGUpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bHByaXYpOworCisJLyogRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIFJTU0kgICovCisJaWYgKChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpICYmCisJICAgIChydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID09IDApKSB7CisJCXJ0bF9kbV9kaWctPm1pbl91bmRlY29yYXRlZF9wd2RiX2Zvcl9kbSA9IDA7CisJCVJUX1RSQUNFKENPTVBfQkJfUE9XRVJTQVZJTkcsIERCR19MT1VELAorCQkJICgiTm90IGNvbm5lY3RlZCB0byBhbnlcbiIpKTsKKwl9CisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJcnRsX2RtX2RpZy0+bWluX3VuZGVjb3JhdGVkX3B3ZGJfZm9yX2RtID0KKwkJCQlydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UoQ09NUF9CQl9QT1dFUlNBVklORywgREJHX0xPVUQsCisJCQkgICAgICAoIkFQIENsaWVudCBQV0RCID0gMHglbHhcbiIsCisJCQkgICAgICAgcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYikpOworCQl9IGVsc2UgeworCQkJcnRsX2RtX2RpZy0+bWluX3VuZGVjb3JhdGVkX3B3ZGJfZm9yX2RtID0KKwkJCSAgICBydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UoQ09NUF9CQl9QT1dFUlNBVklORywgREJHX0xPVUQsCisJCQkJKCJTVEEgRGVmYXVsdCBQb3J0IFBXREIgPSAweCV4XG4iLAorCQkJCXJ0bF9kbV9kaWctPm1pbl91bmRlY29yYXRlZF9wd2RiX2Zvcl9kbSkpOworCQl9CisJfSBlbHNlIHsKKwkJcnRsX2RtX2RpZy0+bWluX3VuZGVjb3JhdGVkX3B3ZGJfZm9yX2RtID0KKwkJCXJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGI7CisJCVJUX1RSQUNFKENPTVBfQkJfUE9XRVJTQVZJTkcsIERCR19MT1VELAorCQkJKCJBUCBFeHQgUG9ydCBvciBkaXNjb25uZXQgUFdEQiA9IDB4JXhcbiIsCisJCQlydGxfZG1fZGlnLT5taW5fdW5kZWNvcmF0ZWRfcHdkYl9mb3JfZG0pKTsKKwl9CisJUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19MT1VELCAoIk1pblVuZGVjb3JhdGVkUFdEQkZvckRNID0lZFxuIiwKKwkJcnRsX2RtX2RpZy0+bWluX3VuZGVjb3JhdGVkX3B3ZGJfZm9yX2RtKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fY2hlY2tfcnNzaV9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKwlzdHJ1Y3QgcnRsX2RtICpkbSA9IHJ0bF9kbShydGxwcml2KTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpkcnZfcHJpdjsKKwl1OCBoMmNbNF0gPSB7IDAgfTsKKwlsb25nIG1heCA9IDAsIG1pbiA9IDB4ZmY7CisJdTggaSA9IDA7CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkgICAgbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQkvKiBBUCAmIEFESE9DICYgTUVTSCAqLworCQlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmVudHJ5X2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2X3ByaXYsICZydGxwcml2LT5lbnRyeV9saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3QgcnNzaV9zdGEgKnN0YXQgPSAmKGRydl9wcml2LT5yc3NpX3N0YXQpOworCQkJaWYgKHN0YXQtPnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCBtaW4pCisJCQkJbWluID0gc3RhdC0+dW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwkJCWlmIChzdGF0LT51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID4gbWF4KQorCQkJCW1heCA9IHN0YXQtPnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisKKwkJCWgyY1szXSA9IDA7CisJCQloMmNbMl0gPSAodTgpIChkbS0+dW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiAmIDB4RkYpOworCQkJaDJjWzFdID0gMHgyMDsKKwkJCWgyY1swXSA9ICsraTsKKwkJCXJ0bDkyZWVfZmlsbF9oMmNfY21kKGh3LCBIMkNfOTJFX1JTU0lfUkVQT1JULCA0LCBoMmMpOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5lbnRyeV9saXN0X2xvY2spOworCisJCS8qIElmIGFzc29jaWF0ZWQgZW50cnkgaXMgZm91bmQgKi8KKwkJaWYgKG1heCAhPSAwKSB7CisJCQlkbS0+ZW50cnlfbWF4X3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYiA9IG1heDsKKwkJCVJUUFJJTlQocnRscHJpdiwgRkRNLCBETV9QV0RCLAorCQkJCSJFbnRyeU1heFBXREIgPSAweCVseCglbGQpXG4iLCBtYXgsIG1heCk7CisJCX0gZWxzZSB7CisJCQlkbS0+ZW50cnlfbWF4X3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYiA9IDA7CisJCX0KKwkJLyogSWYgYXNzb2NpYXRlZCBlbnRyeSBpcyBmb3VuZCAqLworCQlpZiAobWluICE9IDB4ZmYpIHsKKwkJCWRtLT5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID0gbWluOworCQkJUlRQUklOVChydGxwcml2LCBGRE0sIERNX1BXREIsCisJCQkJIkVudHJ5TWluUFdEQiA9IDB4JWx4KCVsZClcbiIsIG1pbiwgbWluKTsKKwkJfSBlbHNlIHsKKwkJCWRtLT5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID0gMDsKKwkJfQorCX0KKworCS8qIEluZGljYXRlIFJ4IHNpZ25hbCBzdHJlbmd0aCB0byBGVy4gKi8KKwlpZiAoZG0tPmJfdXNlcmFtYXNrKSB7CisJCWgyY1szXSA9IDA7CisJCWgyY1syXSA9ICh1OCkgKGRtLT51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiICYgMHhGRik7CisJCWgyY1sxXSA9IDB4MjA7CisJCWgyY1swXSA9IDA7CisJCXJ0bDkyZWVfZmlsbF9oMmNfY21kKGh3LCBIMkNfOTJFX1JTU0lfUkVQT1JULCA0LCBoMmMpOworCX0gZWxzZSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NGZlLCBkbS0+dW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYik7CisJfQorCXJ0bDkyZWVfcnNzaV9kdW1wX3RvX3JlZ2lzdGVyKGh3KTsKKwlydGw5MmVlX2RtX2ZpbmRfbWluaW11bV9yc3NpKGh3KTsKKwlkbV9kaWcucnNzaV92YWxfbWluID0gZG0tPmRtX2RpZ3RhYmxlLm1pbl91bmRlY29yYXRlZF9wd2RiX2Zvcl9kbTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJlZV9kbV9pbml0X3ByaW1hcnlfY2NhX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKKwlzdHJ1Y3QgZHluYW1pY19wcmltYXJ5X2NjYSAqcHJpbWFyeWNjYSA9ICYocnRscHJpdi0+cHJpbWFyeWNjYSk7CisKKwlydGxoYWwtPnJ0c19lbiA9IDA7CisJcHJpbWFyeWNjYS0+ZHVwX3J0c19mbGFnID0gMDsKKwlwcmltYXJ5Y2NhLT5pbnRmX2ZsYWcgPSAwOworCXByaW1hcnljY2EtPmludGZfdHlwZSA9IDA7CisJcHJpbWFyeWNjYS0+bW9uaXRvcl9mbGFnID0gMDsKKwlwcmltYXJ5Y2NhLT5jaF9vZmZzZXQgPSAwOworCXByaW1hcnljY2EtPm1mX3N0YXRlID0gMDsKK30KKworc3RhdGljIGJvb2wgcnRsOTJlZV9kbV9pc19lZGNhX3R1cmJvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9CKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBydGw5MmVlX2RtX2luaXRfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwcml2LT5kbS5iY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CisJcnRscHJpdi0+ZG0uYmlzX2N1cl9yZGxzdGF0ZSA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmJpc19hbnlfbm9uYmVwa3RzID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fY2hlY2tfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlzdGF0aWMgdTY0IGxhc3RfdHhva19jbnQ7CisJc3RhdGljIHU2NCBsYXN0X3J4b2tfY250OworCXU2NCBjdXJfdHhva19jbnQgPSAwOworCXU2NCBjdXJfcnhva19jbnQgPSAwOworCXUzMiBlZGNhX2JlX3VsID0gMHg1ZWE0MmI7CisJdTMyIGVkY2FfYmVfZGwgPSAweDVlYTQyYjsgLypub3Qgc3VyZSovCisJdTMyIGVkY2FfYmUgPSAweDVlYTQyYjsKKwlib29sIGJfaXNfY3VyX3JkbHN0YXRlOworCWJvb2wgYl9lZGNhX3R1cmJvX29uID0gZmFsc2U7CisKKwlpZiAocnRscHJpdi0+ZG0uZGJnaW5mby5udW1fbm9uX2JlX3BrdCA+IDB4MTAwKQorCQlydGxwcml2LT5kbS5iaXNfYW55X25vbmJlcGt0cyA9IHRydWU7CisJcnRscHJpdi0+ZG0uZGJnaW5mby5udW1fbm9uX2JlX3BrdCA9IDA7CisKKwljdXJfdHhva19jbnQgPSBydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdCAtIGxhc3RfdHhva19jbnQ7CisJY3VyX3J4b2tfY250ID0gcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3QgLSBsYXN0X3J4b2tfY250OworCisJLypiX2JpYXNfb25fcnggPSBmYWxzZTsqLworCWJfZWRjYV90dXJib19vbiA9ICgoIXJ0bHByaXYtPmRtLmJpc19hbnlfbm9uYmVwa3RzKSAmJgorCQkJICAgKCFydGxwcml2LT5kbS5iX2Rpc2FibGVfZnJhbWVidXJzdGluZykpID8KKwkJCSAgdHJ1ZSA6IGZhbHNlOworCisJaWYgKHJ0bDkyZWVfZG1faXNfZWRjYV90dXJib19kaXNhYmxlKGh3KSkKKwkJZ290byBkbV9DaGVja0VkY2FUdXJib19FWElUOworCisJaWYgKGJfZWRjYV90dXJib19vbikgeworCQliX2lzX2N1cl9yZGxzdGF0ZSA9IChjdXJfcnhva19jbnQgPiBjdXJfdHhva19jbnQgKiA0KSA/CisJCQkJICAgIHRydWUgOiBmYWxzZTsKKworCQllZGNhX2JlID0gYl9pc19jdXJfcmRsc3RhdGUgPyBlZGNhX2JlX2RsIDogZWRjYV9iZV91bDsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYgLCBSRUdfRURDQV9CRV9QQVJBTSAsIGVkY2FfYmUpOworCQlydGxwcml2LT5kbS5iaXNfY3VyX3JkbHN0YXRlID0gYl9pc19jdXJfcmRsc3RhdGU7CisJCXJ0bHByaXYtPmRtLmJjdXJyZW50X3R1cmJvX2VkY2EgPSB0cnVlOworCX0gZWxzZSB7CisJCWlmIChydGxwcml2LT5kbS5iY3VycmVudF90dXJib19lZGNhKSB7CisJCQl1OCB0bXAgPSBBQzBfQkU7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0FDX1BBUkFNLAorCQkJCQkJICAgICAgKHU4ICopICgmdG1wKSk7CisJCX0KKwkJcnRscHJpdi0+ZG0uYmN1cnJlbnRfdHVyYm9fZWRjYSA9IGZhbHNlOworCX0KKworZG1fQ2hlY2tFZGNhVHVyYm9fRVhJVDoKKwlydGxwcml2LT5kbS5iaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOworCWxhc3RfdHhva19jbnQgPSBydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdDsKKwlsYXN0X3J4b2tfY250ID0gcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fZHluYW1pY19lZGNjYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggcmVnX2M1MCAsIHJlZ19jNTg7CisJYm9vbCBiX2Z3X2N1cnJlbnRfaW5fcHNfbW9kZSA9IGZhbHNlOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhXX1ZBUl9GV19QU01PREVfU1RBVFVTLAorCQkJCSAgICAgICh1OCAqKSgmYl9md19jdXJyZW50X2luX3BzX21vZGUpKTsKKwlpZiAoYl9md19jdXJyZW50X2luX3BzX21vZGUpCisJCXJldHVybjsKKworCXJlZ19jNTAgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwgTUFTS0JZVEUwKTsKKwlyZWdfYzU4ID0gcnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hCQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisKKwlpZiAocmVnX2M1MCA+IDB4MjggJiYgcmVnX2M1OCA+IDB4MjgpIHsKKwkJaWYgKCFydGxwcml2LT5ydGxoYWwuYl9wcmVfZWRjY2FfZW5hYmxlKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwgMHgwMyk7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBST0ZETTBfRUNDQVRIUkVTSE9MRCArIDIsIDB4MDApOworCQkJcnRscHJpdi0+cnRsaGFsLmJfcHJlX2VkY2NhX2VuYWJsZSA9IHRydWU7CisJCX0KKwl9IGVsc2UgaWYgKHJlZ19jNTAgPCAweDI1ICYmIHJlZ19jNTggPCAweDI1KSB7CisJCWlmIChydGxwcml2LT5ydGxoYWwuYl9wcmVfZWRjY2FfZW5hYmxlKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwgMHg3Zik7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBST0ZETTBfRUNDQVRIUkVTSE9MRCArIDIsIDB4N2YpOworCQkJcnRscHJpdi0+cnRsaGFsLmJfcHJlX2VkY2NhX2VuYWJsZSA9IGZhbHNlOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX2RtX2FkYXB0aXZpdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcnRsOTJlZV9kbV9keW5hbWljX2VkY2NhKGh3KTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJlZV9kbV93cml0ZV9keW5hbWljX2NjYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY3VyX21mX3N0YXRlKQoreworCXN0cnVjdCBkeW5hbWljX3ByaW1hcnlfY2NhICpwcmltYXJ5Y2NhID0gJihydGxfcHJpdihodyktPnByaW1hcnljY2EpOworCisJaWYgKHByaW1hcnljY2EtPm1mX3N0YXRlICE9IGN1cl9tZl9zdGF0ZSkKKwkJcnRsX3NldF9iYnJlZyhodywgRE1fUkVHX0wxU0JEX1BEX0NIXzExTiwgQklUKDgpIHwgQklUKDcpLAorCQkJICAgICAgY3VyX21mX3N0YXRlKTsKKworCXByaW1hcnljY2EtPm1mX3N0YXRlID0gY3VyX21mX3N0YXRlOworfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX2RtX2R5bmFtaWNfcHJpbWFyeV9jY2FfY2tlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBmYWxzZV9hbGFybV9zdGF0aXN0aWNzICpmYWxzZWFsbV9jbnQgPSAmKHJ0bHByaXYtPmZhbHNlYWxtX2NudCk7CisJc3RydWN0IGR5bmFtaWNfcHJpbWFyeV9jY2EgKnByaW1hcnljY2EgPSAmKHJ0bHByaXYtPnByaW1hcnljY2EpOworCWJvb2wgaXM0MG1oeiA9IGZhbHNlOworCXU2NCBvZmRtX2NjYSwgb2ZkbV9mYSwgYndfdXNjX2NudCwgYndfbHNjX2NudDsKKwl1OCBzZWNfY2hfb2Zmc2V0OworCXU4IGN1cl9tZl9zdGF0ZTsKKwlzdGF0aWMgdTggY291bnRfZG93biA9IE1PTklUT1JfVElNRTsKKworCW9mZG1fY2NhID0gZmFsc2VhbG1fY250LT5jbnRfb2ZkbV9jY2E7CisJb2ZkbV9mYSA9IGZhbHNlYWxtX2NudC0+Y250X29mZG1fZmFpbDsKKwlid191c2NfY250ID0gZmFsc2VhbG1fY250LT5jbnRfYndfdXNjOworCWJ3X2xzY19jbnQgPSBmYWxzZWFsbV9jbnQtPmNudF9id19sc2M7CisJaXM0MG1oeiA9IHJ0bHByaXYtPm1hYzgwMjExLmJ3XzQwOworCXNlY19jaF9vZmZzZXQgPSBydGxwcml2LT5tYWM4MDIxMS5jdXJfNDBfcHJpbWVfc2M7CisJLyogTklDOiAyOiBzZWMgaXMgYmVsb3csICAxOiBzZWMgaXMgYWJvdmUgKi8KKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJY3VyX21mX3N0YXRlID0gTUZfVVNDX0xTQzsKKwkJcnRsOTJlZV9kbV93cml0ZV9keW5hbWljX2NjYShodywgY3VyX21mX3N0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5saW5rX3N0YXRlIDwgTUFDODAyMTFfTElOS0VEKQorCQlyZXR1cm47CisKKwlpZiAoaXM0MG1oeikKKwkJcmV0dXJuOworCisJaWYgKHByaW1hcnljY2EtPnByaWNjYV9mbGFnID09IDApIHsKKwkJLyogUHJpbWFyeSBjaGFubmVsIGlzIGFib3ZlCisJCSAqIE5PVEU6IGR1cGxpY2F0ZSBDVFMgY2FuIHJlbW92ZSB0aGlzIGNvbmRpdGlvbiovCisJCWlmIChzZWNfY2hfb2Zmc2V0ID09IDIpIHsKKwkJCWlmICgob2ZkbV9jY2EgPiBPRkRNQ0NBX1RIKSAmJgorCQkJICAgIChid19sc2NfY250ID4gKGJ3X3VzY19jbnQgKyBCV19JTkRfQklBUykpICYmCisJCQkgICAgKG9mZG1fZmEgPiAob2ZkbV9jY2EgPj4gMSkpKSB7CisJCQkJcHJpbWFyeWNjYS0+aW50Zl90eXBlID0gMTsKKwkJCQlwcmltYXJ5Y2NhLT5pbnRmX2ZsYWcgPSAxOworCQkJCWN1cl9tZl9zdGF0ZSA9IE1GX1VTQzsKKwkJCQlydGw5MmVlX2RtX3dyaXRlX2R5bmFtaWNfY2NhKGh3LCBjdXJfbWZfc3RhdGUpOworCQkJCXByaW1hcnljY2EtPnByaWNjYV9mbGFnID0gMTsKKwkJCX0gZWxzZSBpZiAoKG9mZG1fY2NhID4gT0ZETUNDQV9USCkgJiYKKwkJCQkgICAoYndfbHNjX2NudCA+IChid191c2NfY250ICsgQldfSU5EX0JJQVMpKSAmJgorCQkJCSAgIChvZmRtX2ZhIDwgKG9mZG1fY2NhID4+IDEpKSkgeworCQkJCXByaW1hcnljY2EtPmludGZfdHlwZSA9IDI7CisJCQkJcHJpbWFyeWNjYS0+aW50Zl9mbGFnID0gMTsKKwkJCQljdXJfbWZfc3RhdGUgPSBNRl9VU0M7CisJCQkJcnRsOTJlZV9kbV93cml0ZV9keW5hbWljX2NjYShodywgY3VyX21mX3N0YXRlKTsKKwkJCQlwcmltYXJ5Y2NhLT5wcmljY2FfZmxhZyA9IDE7CisJCQkJcHJpbWFyeWNjYS0+ZHVwX3J0c19mbGFnID0gMTsKKwkJCQlydGxwcml2LT5ydGxoYWwucnRzX2VuID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbWFyeWNjYS0+aW50Zl90eXBlID0gMDsKKwkJCQlwcmltYXJ5Y2NhLT5pbnRmX2ZsYWcgPSAwOworCQkJCWN1cl9tZl9zdGF0ZSA9IE1GX1VTQ19MU0M7CisJCQkJcnRsOTJlZV9kbV93cml0ZV9keW5hbWljX2NjYShodywgY3VyX21mX3N0YXRlKTsKKwkJCQlydGxwcml2LT5ydGxoYWwucnRzX2VuID0gMDsKKwkJCQlwcmltYXJ5Y2NhLT5kdXBfcnRzX2ZsYWcgPSAwOworCQkJfQorCQl9IGVsc2UgaWYgKHNlY19jaF9vZmZzZXQgPT0gMSkgeworCQkJaWYgKChvZmRtX2NjYSA+IE9GRE1DQ0FfVEgpICYmCisJCQkgICAgKGJ3X3VzY19jbnQgPiAoYndfbHNjX2NudCArIEJXX0lORF9CSUFTKSkgJiYKKwkJCSAgICAob2ZkbV9mYSA+IChvZmRtX2NjYSA+PiAxKSkpIHsKKwkJCQlwcmltYXJ5Y2NhLT5pbnRmX3R5cGUgPSAxOworCQkJCXByaW1hcnljY2EtPmludGZfZmxhZyA9IDE7CisJCQkJY3VyX21mX3N0YXRlID0gTUZfTFNDOworCQkJCXJ0bDkyZWVfZG1fd3JpdGVfZHluYW1pY19jY2EoaHcsIGN1cl9tZl9zdGF0ZSk7CisJCQkJcHJpbWFyeWNjYS0+cHJpY2NhX2ZsYWcgPSAxOworCQkJfSBlbHNlIGlmICgob2ZkbV9jY2EgPiBPRkRNQ0NBX1RIKSAmJgorCQkJCSAgIChid191c2NfY250ID4gKGJ3X2xzY19jbnQgKyBCV19JTkRfQklBUykpICYmCisJCQkJICAgKG9mZG1fZmEgPCAob2ZkbV9jY2EgPj4gMSkpKSB7CisJCQkJcHJpbWFyeWNjYS0+aW50Zl90eXBlID0gMjsKKwkJCQlwcmltYXJ5Y2NhLT5pbnRmX2ZsYWcgPSAxOworCQkJCWN1cl9tZl9zdGF0ZSA9IE1GX0xTQzsKKwkJCQlydGw5MmVlX2RtX3dyaXRlX2R5bmFtaWNfY2NhKGh3LCBjdXJfbWZfc3RhdGUpOworCQkJCXByaW1hcnljY2EtPnByaWNjYV9mbGFnID0gMTsKKwkJCQlwcmltYXJ5Y2NhLT5kdXBfcnRzX2ZsYWcgPSAxOworCQkJCXJ0bHByaXYtPnJ0bGhhbC5ydHNfZW4gPSAxOworCQkJfSBlbHNlIHsKKwkJCQlwcmltYXJ5Y2NhLT5pbnRmX3R5cGUgPSAwOworCQkJCXByaW1hcnljY2EtPmludGZfZmxhZyA9IDA7CisJCQkJY3VyX21mX3N0YXRlID0gTUZfVVNDX0xTQzsKKwkJCQlydGw5MmVlX2RtX3dyaXRlX2R5bmFtaWNfY2NhKGh3LCBjdXJfbWZfc3RhdGUpOworCQkJCXJ0bHByaXYtPnJ0bGhhbC5ydHNfZW4gPSAwOworCQkJCXByaW1hcnljY2EtPmR1cF9ydHNfZmxhZyA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2Ugey8qIFByaW1hcnlDQ0EtPlByaUNDQV9mbGFnID09IDEgKi8KKwkJY291bnRfZG93bi0tOworCQlpZiAoY291bnRfZG93biA9PSAwKSB7CisJCQljb3VudF9kb3duID0gTU9OSVRPUl9USU1FOworCQkJcHJpbWFyeWNjYS0+cHJpY2NhX2ZsYWcgPSAwOworCQkJY3VyX21mX3N0YXRlID0gTUZfVVNDX0xTQzsKKwkJCS8qIGRlZmF1bHQgKi8KKwkJCXJ0bDkyZWVfZG1fd3JpdGVfZHluYW1pY19jY2EoaHcsIGN1cl9tZl9zdGF0ZSk7CisJCQlydGxwcml2LT5ydGxoYWwucnRzX2VuID0gMDsKKwkJCXByaW1hcnljY2EtPmR1cF9ydHNfZmxhZyA9IDA7CisJCQlwcmltYXJ5Y2NhLT5pbnRmX3R5cGUgPSAwOworCQkJcHJpbWFyeWNjYS0+aW50Zl9mbGFnID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcnRsOTJlZV9kbV9keW5hbWljX2F0Y19zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZG0gKnJ0bGRtID0gcnRsX2RtKHJ0bF9wcml2KGh3KSk7CisJdTggY3J5c3RhbF9jYXA7CisJdTMyIHBhY2tldF9jb3VudDsKKwlpbnQgY2ZvX2toel9hICwgY2ZvX2toel9iICwgY2ZvX2F2ZSA9IDAsIGFkanVzdF94dGFsID0gMDsKKwlpbnQgY2ZvX2F2ZV9kaWZmOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKHJ0bGRtLT5hdGNfc3RhdHVzID09IEFUQ19TVEFUVVNfT0ZGKSB7CisJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfQ0ZPVFJBQ0tJTkcsIEJJVCgxMSksCisJCQkJICAgICAgQVRDX1NUQVRVU19PTik7CisJCQlydGxkbS0+YXRjX3N0YXR1cyA9IEFUQ19TVEFUVVNfT047CisJCX0KKwkJLyogRGlzYWJsZSBDRk8gdHJhY2tpbmcgZm9yIEJUICovCisJCWlmIChydGxwcml2LT5jZmctPm9wcy0+Z2V0X2J0Y19zdGF0dXMoKSkgeworCQkJaWYgKCFydGxwcml2LT5idGNvZXhpc3QuYnRjX29wcy0+YnRjX2lzX2J0X2Rpc2FibGVkKHJ0bHByaXYpKSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9CVF9DT0VYSVNULCBEQkdfTE9VRCwKKwkJCQkJKCJvZG1fRHluYW1pY0FUQ1N3aXRjaCgpOiAiCisJCQkJCSJEaXNhYmxlIENGTyB0cmFja2luZyBmb3IgQlQhIVxuIikpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQkvKiBSZXNldCBDcnlzdGFsIENhcCAqLworCQlpZiAocnRsZG0tPmNyeXN0YWxfY2FwICE9IHJ0bHByaXYtPmVmdXNlLmNyeXN0YWxjYXApIHsKKwkJCXJ0bGRtLT5jcnlzdGFsX2NhcCA9IHJ0bHByaXYtPmVmdXNlLmNyeXN0YWxjYXA7CisJCQljcnlzdGFsX2NhcCA9IHJ0bGRtLT5jcnlzdGFsX2NhcCAmIDB4M2Y7CisJCQlydGxfc2V0X2JicmVnKGh3LCBSRUdfTUFDX1BIWV9DVFJMLCAweEZGRjAwMCwKKwkJCQkgICAgICAoY3J5c3RhbF9jYXAgfCAoY3J5c3RhbF9jYXAgPDwgNikpKTsKKwkJfQorCX0gZWxzZSB7CisJCWNmb19raHpfYSA9IChpbnQpKHJ0bGRtLT5jZm9fdGFpbFswXSAqIDMxMjUpIC8gMTI4MDsKKwkJY2ZvX2toel9iID0gKGludCkocnRsZG0tPmNmb190YWlsWzFdICogMzEyNSkgLyAxMjgwOworCQlwYWNrZXRfY291bnQgPSBydGxkbS0+cGFja2V0X2NvdW50OworCisJCWlmIChwYWNrZXRfY291bnQgPT0gcnRsZG0tPnBhY2tldF9jb3VudF9wcmUpCisJCQlyZXR1cm47CisKKwkJcnRsZG0tPnBhY2tldF9jb3VudF9wcmUgPSBwYWNrZXRfY291bnQ7CisKKwkJaWYgKHJ0bHByaXYtPnBoeS5yZl90eXBlID09IFJGXzFUMVIpCisJCQljZm9fYXZlID0gY2ZvX2toel9hOworCQllbHNlCisJCQljZm9fYXZlID0gKGludCkoY2ZvX2toel9hICsgY2ZvX2toel9iKSA+PiAxOworCisJCWNmb19hdmVfZGlmZiA9IChydGxkbS0+Y2ZvX2F2ZV9wcmUgPj0gY2ZvX2F2ZSkgPworCQkJICAgICAgIChydGxkbS0+Y2ZvX2F2ZV9wcmUgLSBjZm9fYXZlKSA6CisJCQkgICAgICAgKGNmb19hdmUgLSBydGxkbS0+Y2ZvX2F2ZV9wcmUpOworCisJCWlmIChjZm9fYXZlX2RpZmYgPiAyMCAmJiBydGxkbS0+bGFyZ2VfY2ZvX2hpdCA9PSAwKSB7CisJCQlydGxkbS0+bGFyZ2VfY2ZvX2hpdCA9IDE7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlydGxkbS0+bGFyZ2VfY2ZvX2hpdCA9IDA7CisJCX0KKworCQlydGxkbS0+Y2ZvX2F2ZV9wcmUgPSBjZm9fYXZlOworCisJCWlmIChjZm9fYXZlID49IC1ydGxkbS0+Y2ZvX3RocmVzaG9sZCAmJgorCQkgICAgY2ZvX2F2ZSA8PSBydGxkbS0+Y2ZvX3RocmVzaG9sZCAmJiBydGxkbS0+aXNfZnJlZXplID09IDApIHsKKwkJCWlmIChydGxkbS0+Y2ZvX3RocmVzaG9sZCA9PSBDRk9fVEhSRVNIT0xEX1hUQUwpIHsKKwkJCQlydGxkbS0+Y2ZvX3RocmVzaG9sZCA9IENGT19USFJFU0hPTERfWFRBTCArIDEwOworCQkJCXJ0bGRtLT5pc19mcmVlemUgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlydGxkbS0+Y2ZvX3RocmVzaG9sZCA9IENGT19USFJFU0hPTERfWFRBTDsKKwkJCX0KKwkJfQorCisJCWlmIChjZm9fYXZlID4gcnRsZG0tPmNmb190aHJlc2hvbGQgJiYgcnRsZG0tPmNyeXN0YWxfY2FwIDwgMHgzZikKKwkJCWFkanVzdF94dGFsID0gKChjZm9fYXZlIC0gQ0ZPX1RIUkVTSE9MRF9YVEFMKSA+PiAyKSArIDE7CisJCWVsc2UgaWYgKChjZm9fYXZlIDwgLXJ0bHByaXYtPmRtLmNmb190aHJlc2hvbGQpICYmCisJCQkgcnRscHJpdi0+ZG0uY3J5c3RhbF9jYXAgPiAwKQorCQkJYWRqdXN0X3h0YWwgPSAoKGNmb19hdmUgKyBDRk9fVEhSRVNIT0xEX1hUQUwpID4+IDIpIC0gMTsKKworCQlpZiAoYWRqdXN0X3h0YWwgIT0gMCkgeworCQkJcnRsZG0tPmlzX2ZyZWV6ZSA9IDA7CisJCQlydGxkbS0+Y3J5c3RhbF9jYXAgKz0gYWRqdXN0X3h0YWw7CisKKwkJCWlmIChydGxkbS0+Y3J5c3RhbF9jYXAgPiAweDNmKQorCQkJCXJ0bGRtLT5jcnlzdGFsX2NhcCA9IDB4M2Y7CisJCQllbHNlIGlmIChydGxkbS0+Y3J5c3RhbF9jYXAgPCAwKQorCQkJCXJ0bGRtLT5jcnlzdGFsX2NhcCA9IDA7CisKKwkJCWNyeXN0YWxfY2FwID0gcnRsZG0tPmNyeXN0YWxfY2FwICYgMHgzZjsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJFR19NQUNfUEhZX0NUUkwsIDB4RkZGMDAwLAorCQkJCSAgICAgIChjcnlzdGFsX2NhcCB8IChjcnlzdGFsX2NhcCA8PCA2KSkpOworCQl9CisKKwkJaWYgKGNmb19hdmUgPCBDRk9fVEhSRVNIT0xEX0FUQyAmJgorCQkgICAgY2ZvX2F2ZSA+IC1DRk9fVEhSRVNIT0xEX0FUQykgeworCQkJaWYgKHJ0bGRtLT5hdGNfc3RhdHVzID09IEFUQ19TVEFUVVNfT04pIHsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfQ0ZPVFJBQ0tJTkcsIEJJVCgxMSksCisJCQkJCSAgICAgIEFUQ19TVEFUVVNfT0ZGKTsKKwkJCQlydGxkbS0+YXRjX3N0YXR1cyA9IEFUQ19TVEFUVVNfT0ZGOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHJ0bGRtLT5hdGNfc3RhdHVzID09IEFUQ19TVEFUVVNfT0ZGKSB7CisJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0xX0NGT1RSQUNLSU5HLCBCSVQoMTEpLAorCQkJCQkgICAgICBBVENfU1RBVFVTX09OKTsKKwkJCQlydGxkbS0+YXRjX3N0YXR1cyA9IEFUQ19TVEFUVVNfT047CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1faW5pdF90eHBvd2VyX3RyYWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2RtICpkbSA9IHJ0bF9kbShydGxwcml2KTsKKwl1OCBwYXRoOworCisJZG0tPmJ0eHBvd2VyX3RyYWNraW5nID0gdHJ1ZTsKKwlkbS0+ZGVmYXVsdF9vZmRtX2luZGV4ID0gMzA7CisJZG0tPmRlZmF1bHRfY2NrX2luZGV4ID0gMjA7CisKKwlkbS0+YmJfc3dpbmdfaWR4X2Nja19iYXNlID0gZG0tPmRlZmF1bHRfY2NrX2luZGV4OworCWRtLT5jY2tfaW5kZXggPSBkbS0+ZGVmYXVsdF9jY2tfaW5kZXg7CisKKwlmb3IgKHBhdGggPSBSRjkwX1BBVEhfQTsgcGF0aCA8IE1BWF9SRl9QQVRIOyBwYXRoKyspIHsKKwkJZG0tPmJiX3N3aW5nX2lkeF9vZmRtX2Jhc2VbcGF0aF0gPSBkbS0+ZGVmYXVsdF9vZmRtX2luZGV4OworCQlkbS0+b2ZkbV9pbmRleFtwYXRoXSA9IGRtLT5kZWZhdWx0X29mZG1faW5kZXg7CisJCWRtLT5kZWx0YV9wb3dlcl9pbmRleFtwYXRoXSA9IDA7CisJCWRtLT5kZWx0YV9wb3dlcl9pbmRleF9sYXN0W3BhdGhdID0gMDsKKwkJZG0tPnBvd2VyX2luZGV4X29mZnNldFtwYXRoXSA9IDA7CisJfQorfQorCit2b2lkIHJ0bDkyZWVfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCByYXRlX2FkYXB0aXZlICpwX3JhID0gJihydGxwcml2LT5yYSk7CisKKwlwX3JhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfSU5JVDsKKwlwX3JhLT5wcmVfcmF0cl9zdGF0ZSA9IERNX1JBVFJfU1RBX0lOSVQ7CisKKwlpZiAocnRscHJpdi0+ZG0uZG1fdHlwZSA9PSBETV9UWVBFX0JZRFJJVkVSKQorCQlydGxwcml2LT5kbS5iX3VzZXJhbWFzayA9IHRydWU7CisJZWxzZQorCQlydGxwcml2LT5kbS5iX3VzZXJhbWFzayA9IGZhbHNlOworCisJcF9yYS0+bGRwY190aHJlcyA9IDM1OworCXBfcmEtPnVzZV9sZHBjID0gZmFsc2U7CisJcF9yYS0+aGlnaF9yc3NpX3RocmVzaF9mb3JfcmEgPSA1MDsKKwlwX3JhLT5sb3dfcnNzaV90aHJlc2hfZm9yX3JhID0gMjA7CisKK30KKworc3RhdGljIGJvb2wgX3J0bDkyZWVfZG1fcmFfc3RhdGVfY2hlY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgczMyIHJzc2ksIHU4ICpyYXRyX3N0YXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSAqcF9yYSA9ICYocnRscHJpdi0+cmEpOworCWNvbnN0IHU4IGdvX3VwX2dhcCA9IDU7CisJdTMyIGhpZ2hfcnNzaXRocmVzaF9mb3JfcmEgPSBwX3JhLT5oaWdoX3Jzc2lfdGhyZXNoX2Zvcl9yYTsKKwl1MzIgbG93X3Jzc2l0aHJlc2hfZm9yX3JhID0gcF9yYS0+bG93X3Jzc2lfdGhyZXNoX2Zvcl9yYTsKKwl1OCBzdGF0ZTsKKworCS8qIFRocmVzaG9sZCBBZGp1c3RtZW50OgorCSAqIHdoZW4gUlNTSSBzdGF0ZSB0cmVuZHMgdG8gZ28gdXAgb25lIG9yIHR3byBsZXZlbHMsCisJICogbWFrZSBzdXJlIFJTU0kgaXMgaGlnaCBlbm91Z2guCisJICogSGVyZSBHb1VwR2FwIGlzIGFkZGVkIHRvIHNvbHZlCisJICogdGhlIGJvdW5kYXJ5J3MgbGV2ZWwgYWx0ZXJuYXRpb24gaXNzdWUuCisJICovCisJc3dpdGNoICgqcmF0cl9zdGF0ZSkgeworCWNhc2UgRE1fUkFUUl9TVEFfSU5JVDoKKwljYXNlIERNX1JBVFJfU1RBX0hJR0g6CisJCQlicmVhazsKKworCWNhc2UgRE1fUkFUUl9TVEFfTUlERExFOgorCQkJaGlnaF9yc3NpdGhyZXNoX2Zvcl9yYSArPSBnb191cF9nYXA7CisJCQlicmVhazsKKworCWNhc2UgRE1fUkFUUl9TVEFfTE9XOgorCQkJaGlnaF9yc3NpdGhyZXNoX2Zvcl9yYSArPSBnb191cF9nYXA7CisJCQlsb3dfcnNzaXRocmVzaF9mb3JfcmEgKz0gZ29fdXBfZ2FwOworCQkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkJUlRfVFJBQ0UoQ09NUF9SQVRSLCBEQkdfRE1FU0csCisJCQkJKCJ3cm9uZyByc3NpIGxldmVsIHNldHRpbmcgJWQgISIsICpyYXRyX3N0YXRlKSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBEZWNpZGUgUkFUUlN0YXRlIGJ5IFJTU0kuICovCisJaWYgKHJzc2kgPiBoaWdoX3Jzc2l0aHJlc2hfZm9yX3JhKQorCQlzdGF0ZSA9IERNX1JBVFJfU1RBX0hJR0g7CisJZWxzZSBpZiAocnNzaSA+IGxvd19yc3NpdGhyZXNoX2Zvcl9yYSkKKwkJc3RhdGUgPSBETV9SQVRSX1NUQV9NSURETEU7CisJZWxzZQorCQlzdGF0ZSA9IERNX1JBVFJfU1RBX0xPVzsKKworCWlmICgqcmF0cl9zdGF0ZSAhPSBzdGF0ZSkgeworCQkqcmF0cl9zdGF0ZSA9IHN0YXRlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fcmVmcmVzaF9yYXRlX2FkYXB0aXZlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSAqcF9yYSA9ICYocnRscHJpdi0+cmEpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOworCisJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpIHsKKwkJUlRfVFJBQ0UoQ09NUF9SQVRFLCBEQkdfTE9VRCwKKwkJCSAoImRyaXZlciBpcyBnb2luZyB0byB1bmxvYWRcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcnRscHJpdi0+ZG0uYl91c2VyYW1hc2spIHsKKwkJUlRfVFJBQ0UoQ09NUF9SQVRFLCBEQkdfTE9VRCwKKwkJCSAoImRyaXZlciBkb2VzIG5vdCBjb250cm9sIHJhdGUgYWRhcHRpdmUgbWFza1xuIikpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQgJiYKKwkJbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCisJCWlmIChydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDwgcF9yYS0+bGRwY190aHJlcykgeworCQkJcF9yYS0+dXNlX2xkcGMgPSB0cnVlOworCQkJcF9yYS0+bG93ZXJfcnRzX3JhdGUgPSB0cnVlOworCQl9IGVsc2UgaWYgKHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPgorCQkJICAgKHBfcmEtPmxkcGNfdGhyZXMgLSA1KSkgeworCQkJcF9yYS0+dXNlX2xkcGMgPSBmYWxzZTsKKwkJCXBfcmEtPmxvd2VyX3J0c19yYXRlID0gZmFsc2U7CisJCX0KKwkJaWYgKF9ydGw5MmVlX2RtX3JhX3N0YXRlX2NoZWNrKGh3LAorCQkJCQlydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiLAorCQkJCQkmKHBfcmEtPnJhdHJfc3RhdGUpKSkgeworCisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlzdGEgPSBydGxfZmluZF9zdGEoaHcsIG1hYy0+YnNzaWQpOworCQkJaWYgKHN0YSkKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsCisJCQkJCQkJICAgICAgcF9yYS0+cmF0cl9zdGF0ZSk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQkJcF9yYS0+cHJlX3JhdHJfc3RhdGUgPSBwX3JhLT5yYXRyX3N0YXRlOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX2RtX2luaXRfZHluYW1pY19hdGNfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bHByaXYtPmRtLmNyeXN0YWxfY2FwID0gcnRscHJpdi0+ZWZ1c2UuY3J5c3RhbGNhcDsKKworCXJ0bHByaXYtPmRtLmF0Y19zdGF0dXMgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTFfQ0ZPVFJBQ0tJTkcsIEJJVCgxMSkpOworCXJ0bHByaXYtPmRtLmNmb190aHJlc2hvbGQgPSBDRk9fVEhSRVNIT0xEX1hUQUw7Cit9CisKK3ZvaWQgcnRsOTJlZV9kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bHByaXYtPmRtLmRtX3R5cGUgPSBETV9UWVBFX0JZRFJJVkVSOworCisJcnRsOTJlZV9kbV9kaWdpbml0KGh3KTsKKwlydGw5MmVlX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKGh3KTsKKwlydGw5MmVlX2RtX2luaXRfcHJpbWFyeV9jY2FfY2hlY2soaHcpOworCXJ0bDkyZWVfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKwlydGw5MmVlX2RtX2luaXRfdHhwb3dlcl90cmFja2luZyhodyk7CisJcnRsOTJlZV9kbV9pbml0X2R5bmFtaWNfYXRjX3N3aXRjaChodyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fY29tbW9uX2luZm9fc2VsZl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IGNudCA9IDA7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqZHJ2X3ByaXY7CisKKwlydGxwcml2LT5kbS5iX29uZV9lbnRyeV9vbmx5ID0gZmFsc2U7CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEub3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJcnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJcnRscHJpdi0+ZG0uYl9vbmVfZW50cnlfb25seSA9IHRydWU7CisJCXJldHVybjsKKwl9CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEub3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCSAgICBydGxwcml2LT5tYWM4MDIxMS5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmVudHJ5X2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2X3ByaXYsICZydGxwcml2LT5lbnRyeV9saXN0LCBsaXN0KSB7CisJCQljbnQrKzsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZW50cnlfbGlzdF9sb2NrKTsKKworCQlpZiAoY250ID09IDEpCisJCQlydGxwcml2LT5kbS5iX29uZV9lbnRyeV9vbmx5ID0gdHJ1ZTsKKwl9Cit9CisKK3ZvaWQgcnRsOTJlZV9kbV9keW5hbWljX2FyZmJfc2VsZWN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1OCByYXRlLCBib29sIGNvbGxpc2lvbl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocmF0ZSA+PSBERVNDOTJDX1JBVEVNQ1M4ICAmJiByYXRlIDw9IERFU0M5MkNfUkFURU1DUzEyKSB7CisJCWlmIChjb2xsaXNpb25fc3RhdGUgPT0gMSkgeworCQkJaWYgKHJhdGUgPT0gREVTQzkyQ19SQVRFTUNTMTIpIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywgMHgwKTsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQyArIDQsCisJCQkJCQkweDA3MDYwNTAxKTsKKwkJCX0gZWxzZSBpZiAocmF0ZSA9PSBERVNDOTJDX1JBVEVNQ1MxMSkgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLCAweDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDcwNzA2MDUpOworCQkJfSBlbHNlIGlmIChyYXRlID09IERFU0M5MkNfUkFURU1DUzEwKSB7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMsIDB4MCk7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMgKyA0LAorCQkJCQkJMHgwODA4MDcwNik7CisJCQl9IGVsc2UgaWYgKHJhdGUgPT0gREVTQzkyQ19SQVRFTUNTOSkgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLCAweDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDgwODA3MDcpOworCQkJfSBlbHNlIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywgMHgwKTsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQyArIDQsCisJCQkJCQkweDA5MDkwODA4KTsKKwkJCX0KKwkJfSBlbHNlIHsgICAvKiBjb2xsaXNpb25fc3RhdGUgPT0gMCAqLworCQkJaWYgKHJhdGUgPT0gREVTQzkyQ19SQVRFTUNTMTIpIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywKKwkJCQkJCTB4MDUwMTAwMDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDkwODA3MDYpOworCQkJfSBlbHNlIGlmIChyYXRlID09IERFU0M5MkNfUkFURU1DUzExKSB7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMsCisJCQkJCQkweDA2MDUwMDAwKTsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQyArIDQsCisJCQkJCQkweDA5MDgwODA3KTsKKwkJCX0gZWxzZSBpZiAocmF0ZSA9PSBERVNDOTJDX1JBVEVNQ1MxMCkgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLAorCQkJCQkJMHgwNzA2MDAwMCk7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMgKyA0LAorCQkJCQkJMHgwYTA5MDkwOCk7CisJCQl9IGVsc2UgaWYgKHJhdGUgPT0gREVTQzkyQ19SQVRFTUNTOSkgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLAorCQkJCQkJMHgwNzA3MDAwMCk7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMgKyA0LAorCQkJCQkJMHgwYTA5MDgwOCk7CisJCQl9IGVsc2UgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLAorCQkJCQkJMHgwODA4MDAwMCk7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMgKyA0LAorCQkJCQkJMHgwYjBhMDkwOSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeyAgLyogTUNTMTN+TUNTMTUsICAxU1MsIEctbW9kZSAqLworCQlpZiAoY29sbGlzaW9uX3N0YXRlID09IDEpIHsKKwkJCWlmIChyYXRlID09IERFU0M5MkNfUkFURU1DUzE1KSB7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMsCisJCQkJCQkweDAwMDAwMDAwKTsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQyArIDQsCisJCQkJCQkweDA1MDQwMzAyKTsKKwkJCX0gZWxzZSBpZiAocmF0ZSA9PSBERVNDOTJDX1JBVEVNQ1MxNCkgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLAorCQkJCQkJMHgwMDAwMDAwMCk7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMgKyA0LAorCQkJCQkJMHgwNjA1MDMwMik7CisJCQl9IGVsc2UgaWYgKHJhdGUgPT0gREVTQzkyQ19SQVRFTUNTMTMpIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywKKwkJCQkJCTB4MDAwMDAwMDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDcwNjA1MDIpOworCQkJfSBlbHNlIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywKKwkJCQkJCTB4MDAwMDAwMDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDYwNTA0MDIpOworCQkJfQorCQl9IGVsc2V7ICAgLyogY29sbGlzaW9uX3N0YXRlID09IDAgKi8KKwkJCWlmIChyYXRlID09IERFU0M5MkNfUkFURU1DUzE1KSB7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMsCisJCQkJCQkweDAzMDIwMDAwKTsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQyArIDQsCisJCQkJCQkweDA3MDYwNTA0KTsKKwkJCX0gZWxzZSBpZiAocmF0ZSA9PSBERVNDOTJDX1JBVEVNQ1MxNCkgeworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDLAorCQkJCQkJMHgwMzAyMDAwMCk7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMgKyA0LAorCQkJCQkJMHgwODA3MDYwNSk7CisJCQl9IGVsc2UgaWYgKHJhdGUgPT0gREVTQzkyQ19SQVRFTUNTMTMpIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywKKwkJCQkJCTB4MDUwMjAwMDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDkwODA3MDYpOworCQkJfSBlbHNlIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0RBUkZSQywKKwkJCQkJCTB4MDQwMjAwMDApOworCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwKKwkJCQkJCTB4MDgwNzA2MDUpOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIHJ0bDkyZWVfZG1fd2F0Y2hkb2coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWJvb2wgYl9md19jdXJyZW50X2lucHNtb2RlID0gZmFsc2U7CisJYm9vbCBiX2Z3X3BzX2F3YWtlID0gdHJ1ZTsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfRldfUFNNT0RFX1NUQVRVUywKKwkJCQkgICAgICAodTggKikgKCZiX2Z3X2N1cnJlbnRfaW5wc21vZGUpKTsKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX0ZXTFBTX1JGX09OLAorCQkJCSAgICAgICh1OCAqKSAoJmJfZndfcHNfYXdha2UpKTsKKwlpZiAocHBzYy0+cDJwX3BzX2luZm8ucDJwX3BzX21vZGUpCisJCWJfZndfcHNfYXdha2UgPSBmYWxzZTsKKworCWlmICgocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT04pICYmCisJICAgICgoIWJfZndfY3VycmVudF9pbnBzbW9kZSkgJiYgYl9md19wc19hd2FrZSkgJiYKKwkgICAgKCFwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzKSkgeworCQlydGw5MmVlX2RtX2NvbW1vbl9pbmZvX3NlbGZfdXBkYXRlKGh3KTsKKwkJcnRsOTJlZV9kbV9mYWxzZV9hbGFybV9jb3VudGVyX3N0YXRpc3RpY3MoaHcpOworCQlydGw5MmVlX2RtX2NoZWNrX3Jzc2lfbW9uaXRvcihodyk7CisJCXJ0bDkyZWVfZG1fZGlnKGh3KTsKKwkJcnRsOTJlZV9kbV9hZGFwdGl2aXR5KGh3KTsKKwkJcnRsOTJlZV9kbV9jY2tfcGFja2V0X2RldGVjdGlvbl90aHJlc2goaHcpOworCQlydGw5MmVlX2RtX3JlZnJlc2hfcmF0ZV9hZGFwdGl2ZV9tYXNrKGh3KTsKKwkJcnRsOTJlZV9kbV9jaGVja19lZGNhX3R1cmJvKGh3KTsKKwkJcnRsOTJlZV9kbV9keW5hbWljX2F0Y19zd2l0Y2goaHcpOworCQlydGw5MmVlX2RtX2R5bmFtaWNfcHJpbWFyeV9jY2FfY2tlY2soaHcpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2RtLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9kbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYjhmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9kbS5oCkBAIC0wLDAgKzEsMzQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZglfX1JUTDkyRV9ETV9IX18KKyNkZWZpbmUgX19SVEw5MkVfRE1fSF9fCisKKyNkZWZpbmUJT0ZETUNDQV9USAkJCQk1MDAKKyNkZWZpbmUJQldfSU5EX0JJQVMJCQkJNTAwCisjZGVmaW5lCU1GX1VTQwkJCQkJMgorI2RlZmluZQlNRl9MU0MJCQkJCTEKKyNkZWZpbmUJTUZfVVNDX0xTQwkJCQkwCisjZGVmaW5lCU1PTklUT1JfVElNRQkJCQkzMAorCisjZGVmaW5lCU1BSU5fQU5UCQkJCTAKKyNkZWZpbmUJQVVYX0FOVAkJCQkJMQorI2RlZmluZQlNQUlOX0FOVF9DR19UUlgJCQkJMQorI2RlZmluZQlBVVhfQU5UX0NHX1RSWAkJCQkwCisjZGVmaW5lCU1BSU5fQU5UX0NHQ1NfUlgJCQkwCisjZGVmaW5lCUFVWF9BTlRfQ0dDU19SWAkJCQkxCisKKy8qUkYgUkVHIExJU1QqLworI2RlZmluZQlETV9SRUdfUkZfTU9ERV8xMU4JCQkweDAwCisjZGVmaW5lCURNX1JFR19SRl8wQl8xMU4JCQkweDBCCisjZGVmaW5lCURNX1JFR19DSE5CV18xMU4JCQkweDE4CisjZGVmaW5lCURNX1JFR19UX01FVEVSXzExTgkJCTB4MjQKKyNkZWZpbmUJRE1fUkVHX1JGXzI1XzExTgkJCTB4MjUKKyNkZWZpbmUJRE1fUkVHX1JGXzI2XzExTgkJCTB4MjYKKyNkZWZpbmUJRE1fUkVHX1JGXzI3XzExTgkJCTB4MjcKKyNkZWZpbmUJRE1fUkVHX1JGXzJCXzExTgkJCTB4MkIKKyNkZWZpbmUJRE1fUkVHX1JGXzJDXzExTgkJCTB4MkMKKyNkZWZpbmUJRE1fUkVHX1JYUkZfQTNfMTFOCQkJMHgzQworI2RlZmluZQlETV9SRUdfVF9NRVRFUl85MkRfMTFOCQkJMHg0MgorI2RlZmluZQlETV9SRUdfVF9NRVRFUl85MkVfMTFOCQkJMHg0MgorCisKKworLypCQiBSRUcgTElTVCovCisvKlBBR0UgOCAqLworI2RlZmluZQlETV9SRUdfQkJfQ1RSTF8xMU4JCQkweDgwMAorI2RlZmluZQlETV9SRUdfUkZfUElOXzExTgkJCTB4ODA0CisjZGVmaW5lCURNX1JFR19QU0RfQ1RSTF8xMU4JCQkweDgwOAorI2RlZmluZQlETV9SRUdfVFhfQU5UX0NUUkxfMTFOCQkJMHg4MEMKKyNkZWZpbmUJRE1fUkVHX0JCX1BXUl9TQVY1XzExTgkJCTB4ODE4CisjZGVmaW5lCURNX1JFR19DQ0tfUlBUX0ZPUk1BVF8xMU4JCTB4ODI0CisjZGVmaW5lCURNX1JFR19SWF9ERUZVQUxUX0FfMTFOCQkJMHg4NTgKKyNkZWZpbmUJRE1fUkVHX1JYX0RFRlVBTFRfQl8xMU4JCQkweDg1QQorI2RlZmluZQlETV9SRUdfQkJfUFdSX1NBVjNfMTFOCQkJMHg4NUMKKyNkZWZpbmUJRE1fUkVHX0FOVFNFTF9DVFJMXzExTgkJCTB4ODYwCisjZGVmaW5lCURNX1JFR19SWF9BTlRfQ1RSTF8xMU4JCQkweDg2NAorI2RlZmluZQlETV9SRUdfUElOX0NUUkxfMTFOCQkJMHg4NzAKKyNkZWZpbmUJRE1fUkVHX0JCX1BXUl9TQVYxXzExTgkJCTB4ODc0CisjZGVmaW5lCURNX1JFR19BTlRTRUxfUEFUSF8xMU4JCQkweDg3OAorI2RlZmluZQlETV9SRUdfQkJfM1dJUkVfMTFOCQkJMHg4OEMKKyNkZWZpbmUJRE1fUkVHX1NDX0NOVF8xMU4JCQkweDhDNAorI2RlZmluZQlETV9SRUdfUFNEX0RBVEFfMTFOCQkJMHg4QjQKKy8qUEFHRSA5Ki8KKyNkZWZpbmUJRE1fUkVHX0FOVF9NQVBQSU5HMV8xMU4JCQkweDkxNAorI2RlZmluZQlETV9SRUdfQU5UX01BUFBJTkcyXzExTgkJCTB4OTE4CisvKlBBR0UgQSovCisjZGVmaW5lCURNX1JFR19DQ0tfQU5URElWX1BBUkExXzExTgkJMHhBMDAKKyNkZWZpbmUJRE1fUkVHX0NDS19DQ0FfMTFOCQkJMHhBMEEKKyNkZWZpbmUJRE1fUkVHX0NDS19BTlRESVZfUEFSQTJfMTFOCQkweEEwQworI2RlZmluZQlETV9SRUdfQ0NLX0FOVERJVl9QQVJBM18xMU4JCTB4QTEwCisjZGVmaW5lCURNX1JFR19DQ0tfQU5URElWX1BBUkE0XzExTgkJMHhBMTQKKyNkZWZpbmUJRE1fUkVHX0NDS19GSUxURVJfUEFSQTFfMTFOCQkweEEyMgorI2RlZmluZQlETV9SRUdfQ0NLX0ZJTFRFUl9QQVJBMl8xMU4JCTB4QTIzCisjZGVmaW5lCURNX1JFR19DQ0tfRklMVEVSX1BBUkEzXzExTgkJMHhBMjQKKyNkZWZpbmUJRE1fUkVHX0NDS19GSUxURVJfUEFSQTRfMTFOCQkweEEyNQorI2RlZmluZQlETV9SRUdfQ0NLX0ZJTFRFUl9QQVJBNV8xMU4JCTB4QTI2CisjZGVmaW5lCURNX1JFR19DQ0tfRklMVEVSX1BBUkE2XzExTgkJMHhBMjcKKyNkZWZpbmUJRE1fUkVHX0NDS19GSUxURVJfUEFSQTdfMTFOCQkweEEyOAorI2RlZmluZQlETV9SRUdfQ0NLX0ZJTFRFUl9QQVJBOF8xMU4JCTB4QTI5CisjZGVmaW5lCURNX1JFR19DQ0tfRkFfUlNUXzExTgkJCTB4QTJDCisjZGVmaW5lCURNX1JFR19DQ0tfRkFfTVNCXzExTgkJCTB4QTU4CisjZGVmaW5lCURNX1JFR19DQ0tfRkFfTFNCXzExTgkJCTB4QTVDCisjZGVmaW5lCURNX1JFR19DQ0tfQ0NBX0NOVF8xMU4JCQkweEE2MAorI2RlZmluZQlETV9SRUdfQkJfUFdSX1NBVjRfMTFOCQkJMHhBNzQKKy8qUEFHRSBCICovCisjZGVmaW5lCURNX1JFR19MTkFfU1dJVENIXzExTgkJCTB4QjJDCisjZGVmaW5lCURNX1JFR19QQVRIX1NXSVRDSF8xMU4JCQkweEIzMAorI2RlZmluZQlETV9SRUdfUlNTSV9DVFJMXzExTgkJCTB4QjM4CisjZGVmaW5lCURNX1JFR19DT05GSUdfQU5UQV8xMU4JCQkweEI2OAorI2RlZmluZQlETV9SRUdfUlNTSV9CVF8xMU4JCQkweEI5QworLypQQUdFIEMgKi8KKyNkZWZpbmUJRE1fUkVHX09GRE1fRkFfSE9MRENfMTFOCQkweEMwMAorI2RlZmluZQlETV9SRUdfUlhfUEFUSF8xMU4JCQkweEMwNAorI2RlZmluZQlETV9SRUdfVFJNVVhfMTFOCQkJMHhDMDgKKyNkZWZpbmUJRE1fUkVHX09GRE1fRkFfUlNUQ18xMU4JCQkweEMwQworI2RlZmluZQlETV9SRUdfUlhJUUlfTUFUUklYXzExTgkJCTB4QzE0CisjZGVmaW5lCURNX1JFR19UWElRS19NQVRSSVhfTFNCMV8xMU4JCTB4QzRDCisjZGVmaW5lCURNX1JFR19JR0lfQV8xMU4JCQkweEM1MAorI2RlZmluZQlETV9SRUdfQU5URElWX1BBUkEyXzExTgkJCTB4QzU0CisjZGVmaW5lCURNX1JFR19JR0lfQl8xMU4JCQkweEM1OAorI2RlZmluZQlETV9SRUdfQU5URElWX1BBUkEzXzExTgkJCTB4QzVDCisjZGVmaW5lIERNX1JFR19MMVNCRF9QRF9DSF8xMU4JCQkwWEM2QworI2RlZmluZQlETV9SRUdfQkJfUFdSX1NBVjJfMTFOCQkJMHhDNzAKKyNkZWZpbmUJRE1fUkVHX1JYX09GRl8xMU4JCQkweEM3QworI2RlZmluZQlETV9SRUdfVFhJUUtfTUFUUklYQV8xMU4JCTB4QzgwCisjZGVmaW5lCURNX1JFR19UWElRS19NQVRSSVhCXzExTgkJMHhDODgKKyNkZWZpbmUJRE1fUkVHX1RYSVFLX01BVFJJWEFfTFNCMl8xMU4JCTB4Qzk0CisjZGVmaW5lCURNX1JFR19UWElRS19NQVRSSVhCX0xTQjJfMTFOCQkweEM5QworI2RlZmluZQlETV9SRUdfUlhJUUtfTUFUUklYX0xTQl8xMU4JCTB4Q0EwCisjZGVmaW5lCURNX1JFR19BTlRESVZfUEFSQTFfMTFOCQkJMHhDQTQKKyNkZWZpbmUJRE1fUkVHX09GRE1fRkFfVFlQRTFfMTFOCQkweENGMAorLypQQUdFIEQgKi8KKyNkZWZpbmUJRE1fUkVHX09GRE1fRkFfUlNURF8xMU4JCQkweEQwMAorI2RlZmluZQlETV9SRUdfT0ZETV9GQV9UWVBFMl8xMU4JCTB4REEwCisjZGVmaW5lCURNX1JFR19PRkRNX0ZBX1RZUEUzXzExTgkJMHhEQTQKKyNkZWZpbmUJRE1fUkVHX09GRE1fRkFfVFlQRTRfMTFOCQkweERBOAorLypQQUdFIEUgKi8KKyNkZWZpbmUJRE1fUkVHX1RYQUdDX0FfNl8xOF8xMU4JCQkweEUwMAorI2RlZmluZQlETV9SRUdfVFhBR0NfQV8yNF81NF8xMU4JCTB4RTA0CisjZGVmaW5lCURNX1JFR19UWEFHQ19BXzFfTUNTMzJfMTFOCQkweEUwOAorI2RlZmluZQlETV9SRUdfVFhBR0NfQV9NQ1MwXzNfMTFOCQkweEUxMAorI2RlZmluZQlETV9SRUdfVFhBR0NfQV9NQ1M0XzdfMTFOCQkweEUxNAorI2RlZmluZQlETV9SRUdfVFhBR0NfQV9NQ1M4XzExXzExTgkJMHhFMTgKKyNkZWZpbmUJRE1fUkVHX1RYQUdDX0FfTUNTMTJfMTVfMTFOCQkweEUxQworI2RlZmluZQlETV9SRUdfRlBHQTBfSVFLXzExTgkJCTB4RTI4CisjZGVmaW5lCURNX1JFR19UWElRS19UT05FX0FfMTFOCQkJMHhFMzAKKyNkZWZpbmUJRE1fUkVHX1JYSVFLX1RPTkVfQV8xMU4JCQkweEUzNAorI2RlZmluZQlETV9SRUdfVFhJUUtfUElfQV8xMU4JCQkweEUzOAorI2RlZmluZQlETV9SRUdfUlhJUUtfUElfQV8xMU4JCQkweEUzQworI2RlZmluZQlETV9SRUdfVFhJUUtfMTFOCQkJMHhFNDAKKyNkZWZpbmUJRE1fUkVHX1JYSVFLXzExTgkJCTB4RTQ0CisjZGVmaW5lCURNX1JFR19JUUtfQUdDX1BUU18xMU4JCQkweEU0OAorI2RlZmluZQlETV9SRUdfSVFLX0FHQ19SU1BfMTFOCQkJMHhFNEMKKyNkZWZpbmUJRE1fUkVHX0JMVUVUT09USF8xMU4JCQkweEU2QworI2RlZmluZQlETV9SRUdfUlhfV0FJVF9DQ0FfMTFOCQkJMHhFNzAKKyNkZWZpbmUJRE1fUkVHX1RYX0NDS19SRk9OXzExTgkJCTB4RTc0CisjZGVmaW5lCURNX1JFR19UWF9DQ0tfQkJPTl8xMU4JCQkweEU3OAorI2RlZmluZQlETV9SRUdfT0ZETV9SRk9OXzExTgkJCTB4RTdDCisjZGVmaW5lCURNX1JFR19PRkRNX0JCT05fMTFOCQkJMHhFODAKKyNkZWZpbmUJCURNX1JFR19UWDJSWF8xMU4JCTB4RTg0CisjZGVmaW5lCURNX1JFR19UWDJUWF8xMU4JCQkweEU4OAorI2RlZmluZQlETV9SRUdfUlhfQ0NLXzExTgkJCTB4RThDCisjZGVmaW5lCURNX1JFR19SWF9PRkRNXzExTgkJCTB4RUQwCisjZGVmaW5lCURNX1JFR19SWF9XQUlUX1JJRlNfMTFOCQkJMHhFRDQKKyNkZWZpbmUJRE1fUkVHX1JYMlJYXzExTgkJCTB4RUQ4CisjZGVmaW5lCURNX1JFR19TVEFOREJZXzExTgkJCTB4RURDCisjZGVmaW5lCURNX1JFR19TTEVFUF8xMU4JCQkweEVFMAorI2RlZmluZQlETV9SRUdfUE1QRF9BTkFFTl8xMU4JCQkweEVFQworCisKKy8qTUFDIFJFRyBMSVNUKi8KKyNkZWZpbmUJRE1fUkVHX0JCX1JTVF8xMU4JCQkweDAyCisjZGVmaW5lCURNX1JFR19BTlRTRUxfUElOXzExTgkJCTB4NEMKKyNkZWZpbmUJRE1fUkVHX0VBUkxZX01PREVfMTFOCQkJMHg0RDAKKyNkZWZpbmUJRE1fUkVHX1JTU0lfTU9OSVRPUl8xMU4JCQkweDRGRQorI2RlZmluZQlETV9SRUdfRURDQV9WT18xMU4JCQkweDUwMAorI2RlZmluZQlETV9SRUdfRURDQV9WSV8xMU4JCQkweDUwNAorI2RlZmluZQlETV9SRUdfRURDQV9CRV8xMU4JCQkweDUwOAorI2RlZmluZQlETV9SRUdfRURDQV9CS18xMU4JCQkweDUwQworI2RlZmluZQlETV9SRUdfVFhQQVVTRV8xMU4JCQkweDUyMgorI2RlZmluZQlETV9SRUdfUkVTUF9UWF8xMU4JCQkweDZEOAorI2RlZmluZQlETV9SRUdfQU5UX1RSQUlOX1BBUkExXzExTgkJMHg3YjAKKyNkZWZpbmUJRE1fUkVHX0FOVF9UUkFJTl9QQVJBMl8xMU4JCTB4N2I0CisKKworLypESUcgUmVsYXRlZCovCisjZGVmaW5lCURNX0JJVF9JR0lfMTFOCQkJCTB4MDAwMDAwN0YKKworCisKKyNkZWZpbmUgSEFMX0RNX0RJR19ESVNBQkxFCQkJQklUKDApCisjZGVmaW5lIEhBTF9ETV9ISVBXUl9ESVNBQkxFCQkJQklUKDEpCisKKyNkZWZpbmUgT0ZETV9UQUJMRV9MRU5HVEgJCQk0MworI2RlZmluZSBDQ0tfVEFCTEVfTEVOR1RICQkJMzMKKworI2RlZmluZSBPRkRNX1RBQkxFX1NJWkUJCQkJNDMKKyNkZWZpbmUgQ0NLX1RBQkxFX1NJWkUJCQkJMzMKKworI2RlZmluZSBCV19BVVRPX1NXSVRDSF9ISUdIX0xPVwkJCTI1CisjZGVmaW5lIEJXX0FVVE9fU1dJVENIX0xPV19ISUdICQkJMzAKKworI2RlZmluZSBETV9ESUdfVEhSRVNIX0hJR0gJCQk0MAorI2RlZmluZSBETV9ESUdfVEhSRVNIX0xPVwkJCTM1CisKKyNkZWZpbmUgRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XCQk0MDAKKyNkZWZpbmUgRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSAkJMTAwMAorCisjZGVmaW5lIERNX0RJR19NQVgJCQkJMHgzZQorI2RlZmluZSBETV9ESUdfTUlOCQkJCTB4MWUKKworI2RlZmluZSBETV9ESUdfTUFYX0FQCQkJCTB4MzIKKyNkZWZpbmUgRE1fRElHX01JTl9BUAkJCQkweDIwCisKKyNkZWZpbmUgRE1fRElHX0ZBX1VQUEVSCQkJCTB4M2UKKyNkZWZpbmUgRE1fRElHX0ZBX0xPV0VSCQkJCTB4MWUKKyNkZWZpbmUgRE1fRElHX0ZBX1RIMAkJCQkweDIwMAorI2RlZmluZSBETV9ESUdfRkFfVEgxCQkJCTB4MzAwCisjZGVmaW5lIERNX0RJR19GQV9USDIJCQkJMHg0MDAKKworI2RlZmluZSBETV9ESUdfQkFDS09GRl9NQVgJCQkxMgorI2RlZmluZSBETV9ESUdfQkFDS09GRl9NSU4JCQktNAorI2RlZmluZSBETV9ESUdfQkFDS09GRl9ERUZBVUxUCQkJMTAKKworI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fU1NfVEhfbE9XCQkzMAorI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fRElGRl9USAkJCTE4CisKKyNkZWZpbmUgRE1fUkFUUl9TVEFfSU5JVAkJCTAKKyNkZWZpbmUgRE1fUkFUUl9TVEFfSElHSAkJCTEKKyNkZWZpbmUgRE1fUkFUUl9TVEFfTUlERExFCQkJMgorI2RlZmluZSBETV9SQVRSX1NUQV9MT1cJCQkJMworCisjZGVmaW5lIENUUzJTRUxGX1RIVkFMCQkJCTMwCisjZGVmaW5lIFJFR0MzOF9USAkJCQkyMAorCisjZGVmaW5lIFdBSU9UVEhWYWwJCQkJMjUKKworI2RlZmluZSBUWEhJR0hQV1JMRVZFTF9OT1JNQUwJCQkwCisjZGVmaW5lIFRYSElHSFBXUkxFVkVMX0xFVkVMMQkJCTEKKyNkZWZpbmUgVFhISUdIUFdSTEVWRUxfTEVWRUwyCQkJMgorI2RlZmluZSBUWEhJR0hQV1JMRVZFTF9CVDEJCQkzCisjZGVmaW5lIFRYSElHSFBXUkxFVkVMX0JUMgkJCTQKKworI2RlZmluZSBETV9UWVBFX0JZRlcJCQkJMAorI2RlZmluZSBETV9UWVBFX0JZRFJJVkVSCQkJMQorCisjZGVmaW5lIFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJCTc0CisjZGVmaW5lIFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEJCTY3CisjZGVmaW5lIFRYUFdSVFJBQ0tfTUFYX0lEWAkJCTYKKworLyogRHluYW1pYyBBVEMgc3dpdGNoICovCisjZGVmaW5lIEFUQ19TVEFUVVNfT0ZGCQkJCTB4MAkvKiBlbmFibGUgKi8KKyNkZWZpbmUJQVRDX1NUQVRVU19PTgkJCQkweDEJLyogZGlzYWJsZSAqLworI2RlZmluZQlDRk9fVEhSRVNIT0xEX1hUQUwJCQkxMAkvKiBrSHogKi8KKyNkZWZpbmUJQ0ZPX1RIUkVTSE9MRF9BVEMJCQk4MAkvKiBrSHogKi8KKworLyogUlNTSSBEdW1wIE1lc3NhZ2UgKi8KKyNkZWZpbmUgUkFfUlNTSURVTVAJCQkJMHhjYjAKKyNkZWZpbmUgUkJfUlNTSURVTVAJCQkJMHhjYjEKKyNkZWZpbmUgUlMxX1JYRVZNRFVNUAkJCQkweGNiMgorI2RlZmluZSBSUzJfUlhFVk1EVU1QCQkJCTB4Y2IzCisjZGVmaW5lIFJBX1JYU05SRFVNUAkJCQkweGNiNAorI2RlZmluZSBSQl9SWFNOUkRVTVAJCQkJMHhjYjUKKyNkZWZpbmUgUkFfQ0ZPU0hPUlREVU1QCQkJCTB4Y2I2CisjZGVmaW5lIFJCX0NGT1NIT1JURFVNUAkJCQkweGNiOAorI2RlZmluZSBSQV9DRk9MT05HRFVNUAkJCQkweGNiYQorI2RlZmluZSBSQl9DRk9MT05HRFVNUAkJCQkweGNiYworCitzdHJ1Y3QgcHNfdCB7CisJdTggcHJlX2NjYXN0YXRlOworCXU4IGN1cl9jY2FzYXRlOworCXU4IHByZV9yZnN0YXRlOworCXU4IGN1cl9yZnN0YXRlOworCWxvbmcgcnNzaV92YWxfbWluOworCit9OworCitzdHJ1Y3QgZGlnX3QgeworCXU4IGRpZ19lbmFibGVfZmxhZzsKKwl1OCBkaWdfZXh0X3BvcnRfc3RhZ2U7CisJdTMyIHJzc2lfbG93dGhyZXNoOworCXUzMiByc3NpX2hpZ2h0aHJlc2g7CisKKwl1MzIgZmFfbG93dGhyZXNoOworCXUzMiBmYV9oaWdodGhyZXNoOworCisJdTggY3Vyc3RhX2Nvbm5lY3RjdGF0ZTsKKwl1OCBwcmVzdGFfY29ubmVjdHN0YXRlOworCXU4IGN1cm11bHRpc3RhX2Nvbm5lY3RzdGF0ZTsKKworCXU4IHByZV9pZ3ZhbHVlOworCXU4IGN1cl9pZ3ZhbHVlOworCXU4IGJhY2t1cF9pZ3ZhbHVlOworCXU4IGJ0MzBfY3VyX2lnaTsKKwl1OCBzdG9wX2RpZzsKKworCWNoYXIgYmFja29mZl92YWw7CisJY2hhciBiYWNrb2ZmX3ZhbF9yYW5nZV9tYXg7CisJY2hhciBiYWNrb2ZmX3ZhbF9yYW5nZV9taW47CisJdTggcnhfZ2Fpbl9yYW5nZV9tYXg7CisJdTggcnhfZ2Fpbl9yYW5nZV9taW47CisJdTggcnNzaV92YWxfbWluOworCisJdTggcHJlX2Nja19jY2FfdGhyZXM7CisJdTggY3VyX2Nja19jY2FfdGhyZXM7CisJdTggcHJlX2Nja19wZF9zdGF0ZTsKKwl1OCBjdXJfY2NrX3BkX3N0YXRlOworCisJdTggbGFyZ2VfZmFfaGl0OworCXU4IGZvcmJpZGRlbl9pZ2k7CisJdTMyIHJlY292ZXJfY250OworCisJY2hhciB0aF9sMmhfaW5pOworCWNoYXIgdGhfZWRjY2FfaGxfZGlmZjsKKwljaGFyIGlnaV9iYXNlOworCXU4IGlnaV90YXJnZXQ7CisJYm9vbCBmb3JjZV9lZGNjYTsKKwl1OCBhZGFwZW5fcnNzaTsKKworCXU4IGRpZ19keW5hbWljX21pbl8wOworCXU4IGRpZ19keW5hbWljX21pbl8xOworCWJvb2wgYl9tZWRpYV9jb25uZWN0XzA7CisJYm9vbCBiX21lZGlhX2Nvbm5lY3RfMTsKKworCXUzMiBhbnRkaXZfcnNzaV9tYXg7CisJdTMyIHJzc2lfbWF4OworfTsKKworZW51bSBwd3JfdHJhY2tfY29udHJvbF9tZXRob2QgeworCUJCU1dJTkcsCisJVFhBR0MKK307CisKK2V4dGVybiBzdHJ1Y3QgZGlnX3QgZG1fZGlnOwordm9pZCBydGw5MmVlX2RtX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVlX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9kbV93cml0ZV9jY2tfY2NhX3RocmVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1OCBjdXJfdGhyZXMpOwordm9pZCBydGw5MmVlX2RtX3dyaXRlX2RpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY3VycmVudF9pZ2kpOwordm9pZCBydGw5MmVlX2RtX2luaXRfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVlX2RtX2R5bmFtaWNfYXJmYl9zZWxlY3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHU4IHJhdGUsIGJvb2wgY29sbGlzaW9uX3N0YXRlKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvZncuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2Y2FmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2Z3LmMKQEAgLTAsMCArMSw5NDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJkbS5oIgorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9lbmFibGVfZndfZG93bmxvYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXA7CisKKwlpZiAoZW5hYmxlKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMLCAweDA1KTsKKworCQl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMICsgMik7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMICsgMiwgdG1wICYgMHhmNyk7CisJfSBlbHNlIHsKKworCQl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwsIHRtcCAmIDB4ZmUpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZndfYmxvY2tfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGNvbnN0IHU4ICpidWZmZXIsIHUzMiBzaXplKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgYmxvY2tTaXplID0gc2l6ZW9mKHUzMik7CisJdTggKmJ1ZmZlclB0ciA9ICh1OCAqKSBidWZmZXI7CisJdTMyICpwdTRCeXRlUHRyID0gKHUzMiAqKSBidWZmZXI7CisJdTMyIGksIG9mZnNldCwgYmxvY2tDb3VudCwgcmVtYWluU2l6ZTsKKworCWJsb2NrQ291bnQgPSBzaXplIC8gYmxvY2tTaXplOworCXJlbWFpblNpemUgPSBzaXplICUgYmxvY2tTaXplOworCisJZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQ7IGkrKykgeworCQlvZmZzZXQgPSBpICogYmxvY2tTaXplOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgKEZXXzgxOTJDX1NUQVJUX0FERFJFU1MgKyBvZmZzZXQpLAorCQkJCSoocHU0Qnl0ZVB0ciArIGkpKTsKKwl9CisKKwlpZiAocmVtYWluU2l6ZSkgeworCQlvZmZzZXQgPSBibG9ja0NvdW50ICogYmxvY2tTaXplOworCQlidWZmZXJQdHIgKz0gb2Zmc2V0OworCQlmb3IgKGkgPSAwOyBpIDwgcmVtYWluU2l6ZTsgaSsrKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LAorCQkJCSAgICAgICAoRldfODE5MkNfU1RBUlRfQUREUkVTUyArIG9mZnNldCArIGkpLAorCQkJCSAgICAgICAqKGJ1ZmZlclB0ciArIGkpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZndfcGFnZV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHBhZ2UsCisJCQkJICAgY29uc3QgdTggKmJ1ZmZlciwgdTMyIHNpemUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHZhbHVlODsKKwl1OCB1OHBhZ2UgPSAodTgpIChwYWdlICYgMHgwNyk7CisKKwl2YWx1ZTggPSAocnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUNVRldETCArIDIpICYgMHhGOCkgfCB1OHBhZ2U7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgKFJFR19NQ1VGV0RMICsgMiksIHZhbHVlOCk7CisKKwlfcnRsOTJlZV9md19ibG9ja193cml0ZShodywgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZmlsbF9kdW1teSh1OCAqcGZ3YnVmLCB1MzIgKnBmd2xlbikKK3sKKwl1MzIgZndsZW4gPSAqcGZ3bGVuOworCXU4IHJlbWFpbiA9ICh1OCkgKGZ3bGVuICUgNCk7CisKKwlyZW1haW4gPSAocmVtYWluID09IDApID8gMCA6ICg0IC0gcmVtYWluKTsKKworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCXBmd2J1Zltmd2xlbl0gPSAwOworCQlmd2xlbisrOworCQlyZW1haW4tLTsKKwl9CisKKwkqcGZ3bGVuID0gZndsZW47Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3dyaXRlX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgZW51bSB2ZXJzaW9uXzgxOTJlIHZlcnNpb24sCisJCQkgICAgICB1OCAqYnVmZmVyLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggKmJ1ZmZlclB0ciA9ICh1OCAqKSBidWZmZXI7CisJdTMyIHBhZ2VOdW1zLCByZW1haW5TaXplOworCXUzMiBwYWdlLCBvZmZzZXQ7CisKKwlSVF9UUkFDRShDT01QX0ZXLCBEQkdfTE9VRCAsICgiRlcgc2l6ZSBpcyAlZCBieXRlcyxcbiIsIHNpemUpKTsKKworCV9ydGw5MmVlX2ZpbGxfZHVtbXkoYnVmZmVyUHRyLCAmc2l6ZSk7CisKKwlwYWdlTnVtcyA9IHNpemUgLyBGV184MTkyQ19QQUdFX1NJWkU7CisJcmVtYWluU2l6ZSA9IHNpemUgJSBGV184MTkyQ19QQUdFX1NJWkU7CisKKwlpZiAocGFnZU51bXMgPiA4KSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJQYWdlIG51bWJlcnMgc2hvdWxkIG5vdCBncmVhdGVyIHRoZW4gOFxuIikpOworCX0KKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBwYWdlTnVtczsgcGFnZSsrKSB7CisJCW9mZnNldCA9IHBhZ2UgKiBGV184MTkyQ19QQUdFX1NJWkU7CisJCV9ydGw5MmVlX2Z3X3BhZ2Vfd3JpdGUoaHcsIHBhZ2UsIChidWZmZXJQdHIgKyBvZmZzZXQpLAorCQkJCSAgICAgIEZXXzgxOTJDX1BBR0VfU0laRSk7CisJCXVkZWxheSgyKTsKKwl9CisKKwlpZiAocmVtYWluU2l6ZSkgeworCQlvZmZzZXQgPSBwYWdlTnVtcyAqIEZXXzgxOTJDX1BBR0VfU0laRTsKKwkJcGFnZSA9IHBhZ2VOdW1zOworCQlfcnRsOTJlZV9md19wYWdlX3dyaXRlKGh3LCBwYWdlLCAoYnVmZmVyUHRyICsgb2Zmc2V0KSwKKwkJCQkgICAgICAgcmVtYWluU2l6ZSk7CisJfQorCit9CisKK3N0YXRpYyBpbnQgX3J0bDkyZWVfZndfZnJlZV90b19nbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJaW50IGVyciA9IC1FSU87CisJdTMyIGNvdW50ZXIgPSAwOworCXUzMiB2YWx1ZTMyOworCisJZG8geworCQl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX01DVUZXREwpOworCX0gd2hpbGUgKChjb3VudGVyKysgPCBGV184MTkyQ19QT0xMSU5HX1RJTUVPVVRfQ09VTlQpICYmCisJCSAoISh2YWx1ZTMyICYgRldETF9DaGtTdW1fcnB0KSkpOworCisJaWYgKGNvdW50ZXIgPj0gRldfODE5MkNfUE9MTElOR19USU1FT1VUX0NPVU5UKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJjaGtzdW0gcmVwb3J0IGZhaWxsICEgUkVHX01DVUZXREw6MHglMDh4IC5cbiIsCisJCQkgIHZhbHVlMzIpKTsKKwkJZ290byBleGl0OworCX0KKworCVJUX1RSQUNFKENPTVBfRlcsIERCR19UUkFDRSwKKwkJICgiQ2hlY2tzdW0gcmVwb3J0IE9LICEgUkVHX01DVUZXREw6MHglMDh4IC5cbiIsIHZhbHVlMzIpKTsKKworCXZhbHVlMzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfTUNVRldETCk7CisJdmFsdWUzMiB8PSBNQ1VGV0RMX1JEWTsKKwl2YWx1ZTMyICY9IH5XSU5USU5JX1JEWTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX01DVUZXREwsIHZhbHVlMzIpOworCisJcnRsOTJlZV9maXJtd2FyZV9zZWxmcmVzZXQoaHcpOworCWNvdW50ZXIgPSAwOworCisJZG8geworCQl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX01DVUZXREwpOworCQlpZiAodmFsdWUzMiAmIFdJTlRJTklfUkRZKSB7CisJCQlSVF9UUkFDRShDT01QX0ZXLCBEQkdfTE9VRCAsCisJCQkJKCJQb2xsaW5nIEZXIHJlYWR5IHN1Y2Nlc3MhISBSRUdfTUNVRldETDoiCisJCQkJIjB4JTA4eC4gY291bnQgPSAlZFxuIiwgdmFsdWUzMiwgY291bnRlcikpOworCQkJZXJyID0gMDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVkZWxheShGV184MTkyQ19QT0xMSU5HX0RFTEFZKjEwKTsKKworCX0gd2hpbGUgKGNvdW50ZXIrKyA8IEZXXzgxOTJDX1BPTExJTkdfVElNRU9VVF9DT1VOVCk7CisKKwlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkgKCJQb2xsaW5nIEZXIHJlYWR5IGZhaWwhISBSRUdfTUNVRldETDoweCUwOHguIGNvdW50ID0gJWRcbiIsCisJCSB2YWx1ZTMyLCBjb3VudGVyKSk7CisKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IHJ0bDkyZWVfZG93bmxvYWRfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYnVzZV93YWtlX29uX3dsYW5fZncpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIgKnBmd2hlYWRlcjsKKwl1OCAqcGZ3ZGF0YTsKKwl1MzIgZndzaXplOworCWludCBlcnI7CisJZW51bSB2ZXJzaW9uXzgxOTJlIHZlcnNpb24gPSBydGxoYWwtPnZlcnNpb247CisKKwlpZiAoIXJ0bGhhbC0+cGZpcm13YXJlKQorCQlyZXR1cm4gMTsKKworCXBmd2hlYWRlciA9IChzdHJ1Y3QgcnRsOTJjX2Zpcm13YXJlX2hlYWRlciAqKXJ0bGhhbC0+cGZpcm13YXJlOworCXJ0bGhhbC0+ZndfdmVyc2lvbiA9IHBmd2hlYWRlci0+dmVyc2lvbjsKKwlydGxoYWwtPmZ3X3N1YnZlcnNpb24gPSBwZndoZWFkZXItPnN1YnZlcnNpb247CisJcGZ3ZGF0YSA9ICh1OCAqKSBydGxoYWwtPnBmaXJtd2FyZTsKKwlmd3NpemUgPSBydGxoYWwtPmZ3c2l6ZTsKKwlSVF9UUkFDRShDT01QX0ZXLCBEQkdfRE1FU0csCisJCSAoIm5vcm1hbCBGaXJtd2FyZSBTSVpFICVkXG4iICwgZndzaXplKSk7CisKKwlpZiAoSVNfRldfSEVBREVSX0VYSVNUKHBmd2hlYWRlcikpIHsKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX0RNRVNHLAorCQkJICgiRmlybXdhcmUgVmVyc2lvbiglZCksIFNpZ25hdHVyZSglI3gpLCBTaXplKCVkKVxuIiwKKwkJCSAgcGZ3aGVhZGVyLT52ZXJzaW9uLCBwZndoZWFkZXItPnNpZ25hdHVyZSwKKwkJCSAgKGludClzaXplb2Yoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIpKSk7CisKKwkJcGZ3ZGF0YSA9IHBmd2RhdGEgKyBzaXplb2Yoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIpOworCQlmd3NpemUgPSBmd3NpemUgLSBzaXplb2Yoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfRlcsIERCR19ETUVTRywKKwkJCSAoIkZpcm13YXJlIG5vIEhlYWRlciwgU2lnbmF0dXJlKCUjeClcbiIsCisJCQkgIHBmd2hlYWRlci0+c2lnbmF0dXJlKSk7CisJfQorCisJaWYgKHJ0bGhhbC0+Yl9tYWNfZnVuY19lbmFibGUpIHsKKwkJaWYgKHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwpICYgQklUKDcpKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUNVRldETCwgMCk7CisJCQlydGw5MmVlX2Zpcm13YXJlX3NlbGZyZXNldChodyk7CisJCX0KKwl9CisJX3J0bDkyZWVfZW5hYmxlX2Z3X2Rvd25sb2FkKGh3LCB0cnVlKTsKKwlfcnRsOTJlZV93cml0ZV9mdyhodywgdmVyc2lvbiwgcGZ3ZGF0YSwgZndzaXplKTsKKwlfcnRsOTJlZV9lbmFibGVfZndfZG93bmxvYWQoaHcsIGZhbHNlKTsKKworCWVyciA9IF9ydGw5MmVlX2Z3X2ZyZWVfdG9fZ28oaHcpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZpcm13YXJlIGlzIG5vdCByZWFkeSB0byBydW4hXG4iKSk7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX0xPVUQgLAorCQkJICgiRmlybXdhcmUgaXMgcmVhZHkgdG8gcnVuIVxuIikpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJlZV9jaGVja19md19yZWFkX2xhc3RfaDJjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBib3hudW0pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHZhbF9obWV0ZnI7CisJYm9vbCByZXN1bHQgPSBmYWxzZTsKKworCXZhbF9obWV0ZnIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19ITUVURlIpOworCWlmICgoKHZhbF9obWV0ZnIgPj4gYm94bnVtKSAmIEJJVCgwKSkgPT0gMCkKKwkJcmVzdWx0ID0gdHJ1ZTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9maWxsX2gyY19jb21tYW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBlbGVtZW50X2lkLAorCQkJCSAgICAgIHUzMiBjbWRfbGVuLCB1OCAqcF9jbWRidWZmZXIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJdTggYm94bnVtOworCXUxNiBib3hfcmVnID0gMCwgYm94X2V4dHJlZyA9IDA7CisJdTggdTFiX3RtcDsKKwlib29sIGlzZndfcmVhZCA9IGZhbHNlOworCXU4IGJ1Zl9pbmRleCA9IDA7CisJYm9vbCBid3JpdGVfc3VjZXNzID0gZmFsc2U7CisJdTggd2FpdF9oMmNfbGltbWl0ID0gMTAwOworCXU4IGJveGNvbnRlbnRbNF0sIGJveGV4dGNvbnRlbnRbNF07CisJdTMyIGgyY193YWl0Y291bnRlciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCXU4IGlkeDsKKworCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgIT0gRUFDVElWRSB8fAorCQlwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPRkYpIHsKKwkJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19MT1VEICwKKwkJCSgiRmlsbEgyQ0NvbW1hbmQ4MTkyRSgpOiAiCisJCQkiUmV0dXJuIGJlY2F1c2UgUkYgaXMgb2ZmISEhXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlSVF9UUkFDRShDT01QX0NNRCwgREJHX0xPVUQgLCAoImNvbWUgaW5cbiIpKTsKKworCS8qIDEuIFByZXZlbnQgcmFjZSBjb25kaXRpb24gaW4gc2V0dGluZyBIMkMgY21kLgorCSAqIChjb3B5IGZyb20gTWdudEFjdFNldF9SRl9TdGF0ZSgpLikKKwkgKi8KKwl3aGlsZSAodHJ1ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2ssIGZsYWcpOworCQlpZiAocnRsaGFsLT5iX2gyY19zZXRpbnByb2dyZXNzKSB7CisJCQlSVF9UUkFDRShDT01QX0NNRCwgREJHX0xPVUQgLAorCQkJCSAoIkgyQyBzZXQgaW4gcHJvZ3Jlc3MhIFdhaXQgdG8gc2V0Li4iCisJCQkJICAiZWxlbWVudF9pZCglZCkuXG4iLCBlbGVtZW50X2lkKSk7CisKKwkJCXdoaWxlIChydGxoYWwtPmJfaDJjX3NldGlucHJvZ3Jlc3MpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5oMmNfbG9jaywKKwkJCQkJCSAgICAgICBmbGFnKTsKKwkJCQloMmNfd2FpdGNvdW50ZXIrKzsKKwkJCQlSVF9UUkFDRShDT01QX0NNRCwgREJHX0xPVUQgLAorCQkJCQkgKCJXYWl0IDEwMCB1cyAoJWQgdGltZXMpLi4uXG4iLAorCQkJCQkgIGgyY193YWl0Y291bnRlcikpOworCQkJCXVkZWxheSgxMDApOworCisJCQkJaWYgKGgyY193YWl0Y291bnRlciA+IDEwMDApCisJCQkJCXJldHVybjsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2ssCisJCQkJCQkgIGZsYWcpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2ssIGZsYWcpOworCQl9IGVsc2UgeworCQkJcnRsaGFsLT5iX2gyY19zZXRpbnByb2dyZXNzID0gdHJ1ZTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmgyY19sb2NrLCBmbGFnKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJd2hpbGUgKCFid3JpdGVfc3VjZXNzKSB7CisJCS8qCWNvc2EgcmVtb3ZlIHRoaXMgYmVjYXVzZSBuZXZlciByZWFjaCB0aGlzLiAqLworCQkvKndhaXRfd3JpdGVoMmNfbGltbWl0LS07CisJCWlmICh3YWl0X3dyaXRlaDJjX2xpbW1pdCA9PSAwKSB7CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIldyaXRlIEgyQyBmYWlsIGJlY2F1c2Ugbm8gdHJpZ2dlciAiCisJCQkJICAiZm9yIEZXIElOVCFcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJCSovCisJCS8qIDIuIEZpbmQgdGhlIGxhc3QgQk9YIG51bWJlciB3aGljaCBoYXMgYmVlbiB3cml0ZW4uICovCisJCWJveG51bSA9IHJ0bGhhbC0+bGFzdF9obWVib3hudW07CisJCXN3aXRjaCAoYm94bnVtKSB7CisJCWNhc2UgMDoKKwkJCWJveF9yZWcgPSBSRUdfSE1FQk9YXzA7CisJCQlib3hfZXh0cmVnID0gUkVHX0hNRUJPWF9FWFRfMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlib3hfcmVnID0gUkVHX0hNRUJPWF8xOworCQkJYm94X2V4dHJlZyA9IFJFR19ITUVCT1hfRVhUXzE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYm94X3JlZyA9IFJFR19ITUVCT1hfMjsKKwkJCWJveF9leHRyZWcgPSBSRUdfSE1FQk9YX0VYVF8yOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWJveF9yZWcgPSBSRUdfSE1FQk9YXzM7CisJCQlib3hfZXh0cmVnID0gUkVHX0hNRUJPWF9FWFRfMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiAzLiBDaGVjayBpZiB0aGUgYm94IGNvbnRlbnQgaXMgZW1wdHkuICovCisJCWlzZndfcmVhZCA9IGZhbHNlOworCQl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQ1IpOworCisJCWlmICh1MWJfdG1wICE9IDB4ZWEpIHsKKwkJCWlzZndfcmVhZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlpZiAocnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfVFhETUFfU1RBVFVTKSA9PSAweGVhIHx8CisJCQkgICAgcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfVFhQS1RfRU1QVFkpID09IDB4ZWEpCisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19DRkcxICsgMywgMHhmZik7CisJCX0KKworCQlpZiAoaXNmd19yZWFkID09IHRydWUpIHsKKwkJCXdhaXRfaDJjX2xpbW1pdCA9IDEwMDsKKwkJCWlzZndfcmVhZCA9IF9ydGw5MmVlX2NoZWNrX2Z3X3JlYWRfbGFzdF9oMmMoaHcsIGJveG51bSk7CisJCQl3aGlsZSAoIWlzZndfcmVhZCkgeworCQkJCXdhaXRfaDJjX2xpbW1pdC0tOworCQkJCWlmICh3YWl0X2gyY19saW1taXQgPT0gMCkgeworCQkJCQlSVF9UUkFDRShDT01QX0NNRCwgREJHX0xPVUQgLAorCQkJCQkJKCJXYXRpbmcgdG9vIGxvbmcgZm9yIEZXIgorCQkJCQkJInJlYWQgY2xlYXIgSE1FQm94KCVkKSEhIVxuIiwKKwkJCQkJCWJveG51bSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdWRlbGF5KDEwKTsKKwkJCQlpc2Z3X3JlYWQgPSBfcnRsOTJlZV9jaGVja19md19yZWFkX2xhc3RfaDJjKGh3LAorCQkJCQkJCQkJYm94bnVtKTsKKwkJCQl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDEzMCk7CisJCQkJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19MT1VEICwKKwkJCQkJICgiV2F0aW5nIGZvciBGVyByZWFkIGNsZWFyIEhNRUJveCglZCkhISEgMHgxMzAgPSAlMnhcbiIsCisJCQkJCSBib3hudW0sIHUxYl90bXApKTsKKwkJCX0KKwkJfQorCisJCS8qIElmIEZ3IGhhcyBub3QgcmVhZCB0aGUgbGFzdAorCQkgSDJDIGNtZCwgYnJlYWsgYW5kIGdpdmUgdXAgdGhpcyBIMkMuICovCisJCWlmICghaXNmd19yZWFkKSB7CisJCQlSVF9UUkFDRShDT01QX0NNRCwgREJHX0xPVUQgLAorCQkJCSAoIldyaXRlIEgyQyByZWcgQk9YWyVkXSBmYWlsLCBGdyBkb24ndCByZWFkLlxuIiwKKwkJCQkgYm94bnVtKSk7CisJCQlicmVhazsKKwkJfQorCQkvKiA0LiBGaWxsIHRoZSBIMkMgY21kIGludG8gYm94ICovCisJCW1lbXNldChib3hjb250ZW50LCAwLCBzaXplb2YoYm94Y29udGVudCkpOworCQltZW1zZXQoYm94ZXh0Y29udGVudCwgMCwgc2l6ZW9mKGJveGV4dGNvbnRlbnQpKTsKKwkJYm94Y29udGVudFswXSA9IGVsZW1lbnRfaWQ7CisJCVJUX1RSQUNFKENPTVBfQ01ELCBEQkdfTE9VRCAsCisJCQkgKCJXcml0ZSBlbGVtZW50X2lkIGJveF9yZWcoJTR4KSA9ICUyeFxuIiwKKwkJCSAgYm94X3JlZywgZWxlbWVudF9pZCkpOworCisJCXN3aXRjaCAoY21kX2xlbikgeworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJLypib3hjb250ZW50WzBdICY9IH4oQklUKDcpKTsqLworCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAorCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCBjbWRfbGVuKTsKKworCQkJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGJveF9yZWcgKyBpZHgsCisJCQkJCSAgICAgICBib3hjb250ZW50W2lkeF0pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQljYXNlIDY6CisJCWNhc2UgNzoKKwkJCS8qYm94Y29udGVudFswXSB8PSAoQklUKDcpKTsqLworCQkJbWVtY3B5KCh1OCAqKSAoYm94ZXh0Y29udGVudCksCisJCQkgICAgICAgcF9jbWRidWZmZXIgKyBidWZfaW5kZXgrMywgY21kX2xlbi0zKTsKKwkJCW1lbWNweSgodTggKikgKGJveGNvbnRlbnQpICsgMSwKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMyk7CisKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKKwkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfZXh0cmVnICsgaWR4LAorCQkJCQkgICAgICAgYm94ZXh0Y29udGVudFtpZHhdKTsKKwkJCX0KKworCQkJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGJveF9yZWcgKyBpZHgsCisJCQkJCSAgICAgICBib3hjb250ZW50W2lkeF0pOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCWJ3cml0ZV9zdWNlc3MgPSB0cnVlOworCisJCXJ0bGhhbC0+bGFzdF9obWVib3hudW0gPSBib3hudW0gKyAxOworCQlpZiAocnRsaGFsLT5sYXN0X2htZWJveG51bSA9PSA0KQorCQkJcnRsaGFsLT5sYXN0X2htZWJveG51bSA9IDA7CisKKwkJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19MT1VEICwKKwkJCSAoInBIYWxEYXRhLT5sYXN0X2htZWJveG51bSAgPSAlZFxuIiwKKwkJCSAgcnRsaGFsLT5sYXN0X2htZWJveG51bSkpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5oMmNfbG9jaywgZmxhZyk7CisJcnRsaGFsLT5iX2gyY19zZXRpbnByb2dyZXNzID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2ssIGZsYWcpOworCisJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19MT1VEICwgKCJnbyBvdXRcbiIpKTsKK30KKwordm9pZCBydGw5MmVlX2ZpbGxfaDJjX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSB1OCBlbGVtZW50X2lkLCB1MzIgY21kX2xlbiwgdTggKnBfY21kYnVmZmVyKQoreworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTMyIHRtcF9jbWRidWZbMl07CisKKwlpZiAocnRsaGFsLT5iZndfcmVhZHkgPT0gZmFsc2UpIHsKKwkJUlRfQVNTRVJUKGZhbHNlLCAoInJldHVybiBIMkMgY21kIGJlY2F1c2Ugb2YgRncgIgorCQkJCSAgImRvd25sb2FkIGZhaWwhISFcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCh0bXBfY21kYnVmLCAwLCA4KTsKKwltZW1jcHkodG1wX2NtZGJ1ZiwgcF9jbWRidWZmZXIsIGNtZF9sZW4pOworCV9ydGw5MmVlX2ZpbGxfaDJjX2NvbW1hbmQoaHcsIGVsZW1lbnRfaWQsIGNtZF9sZW4sICh1OCAqKSZ0bXBfY21kYnVmKTsKKworCXJldHVybjsKK30KKwordm9pZCBydGw5MmVlX2Zpcm13YXJlX3NlbGZyZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwl1OCB1MWJfdG1wOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXUxYl90bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCArIDEsICh1MWJfdG1wICYgKH5CSVQoMCkpKSk7CisKKwl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCAodTFiX3RtcCAmICh+QklUKDIpKSkpOworCisJdWRlbGF5KDUwKTsKKworCXUxYl90bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCArIDEsICh1MWJfdG1wIHwgQklUKDApKSk7CisKKwl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCAodTFiX3RtcCB8IEJJVCgyKSkpOworCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCAsCisJCSAoIiAgXzgwNTFSZXNldDkyRSgpOiA4MDUxIHJlc2V0IHN1Y2Nlc3MgLlxuIikpOworfQorCit2b2lkIHJ0bDkyZWVfc2V0X2Z3X3B3cm1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBtb2RlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB1MV9oMmNfc2V0X3B3cm1vZGVbSDJDXzkyRV9QV0VNT0RFX0xFTkdUSF0gPSB7IDAgfTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwl1OCBybGJtICwgcG93ZXJfc3RhdGUgPSAwOworCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19MT1VEICwgKCJGVyBMUFMgbW9kZSA9ICVkXG4iLCBtb2RlKSk7CisKKwlTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9NT0RFKHUxX2gyY19zZXRfcHdybW9kZSwgKChtb2RlKSA/IDEgOiAwKSk7CisJcmxibSA9IDA7LypZSiwgdGVtcCwgMTIwMzE2LiBGVyBub3cgbm90IHN1cHBvcnQgUkxCTSA9IDIuKi8KKwlTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9STEJNKHUxX2gyY19zZXRfcHdybW9kZSwgcmxibSk7CisJU0VUX0gyQ0NNRF9QV1JNT0RFX1BBUk1fU01BUlRfUFModTFfaDJjX3NldF9wd3Jtb2RlLAorCQkJCQkgKHJ0bHByaXYtPm1hYzgwMjExLnAycCkgPworCQkJCQkgcHBzYy0+c21hcnRfcHMgOiAxKTsKKwlTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9BV0FLRV9JTlRFUlZBTCh1MV9oMmNfc2V0X3B3cm1vZGUsCisJCQkJCSAgICAgICBwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsKTsKKwlTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9BTExfUVVFVUVfVUFQU0QodTFfaDJjX3NldF9wd3Jtb2RlLCAwKTsKKwlpZiAobW9kZSA9PSBGV19QU19BQ1RJVkVfTU9ERSkKKwkJcG93ZXJfc3RhdGUgfD0gRldfUFdSX1NUQVRFX0FDVElWRTsKKwllbHNlCisJCXBvd2VyX3N0YXRlIHw9IEZXX1BXUl9TVEFURV9SRl9PRkY7CisJU0VUX0gyQ0NNRF9QV1JNT0RFX1BBUk1fUFdSX1NUQVRFKHUxX2gyY19zZXRfcHdybW9kZSwgcG93ZXJfc3RhdGUpOworCisJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkgICAgICAicnRsOTJjX3NldF9md19wd3Jtb2RlKCk6IHUxX2gyY19zZXRfcHdybW9kZVxuIiwKKwkJICAgICAgdTFfaDJjX3NldF9wd3Jtb2RlLCBIMkNfOTJFX1BXRU1PREVfTEVOR1RIKTsKKwlydGw5MmVlX2ZpbGxfaDJjX2NtZChodywgSDJDXzkyRV9TRVRQV1JNT0RFLCBIMkNfOTJFX1BXRU1PREVfTEVOR1RILAorCQkJICAgICB1MV9oMmNfc2V0X3B3cm1vZGUpOworCit9CisKK3ZvaWQgcnRsOTJlZV9zZXRfZndfbWVkaWFfc3RhdHVzX3JwdF9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1zdGF0dXMpCit7CisJdTggcGFybVszXSA9IHsgMCAsIDAgLCAwIH07CisJLyogcGFybVswXTogYml0MCA9IDAtLT5EaXNjb25uZWN0LCBiaXQwID0gMS0tPkNvbm5lY3QKKwkgKiAgICAgICAgICBiaXQxID0gMC0tPnVwZGF0ZSBNZWRpYSBTdGF0dXMgdG8gTUFDSUQKKwkgKiAgICAgICAgICBiaXQxID0gMS0tPnVwZGF0ZSBNZWRpYSBTdGF0dXMgZnJvbSBNQUNJRCB0byBNQUNJRF9FbmQKKwkgKiBwYXJtWzFdOiBNQUNJRCwgaWYgdGhpcyBpcyBJTkZSQV9TVEEsIE1hY0lEID0gMAorCSAqIHBhcm1bMl06IE1BQ0lEX0VuZCovCisKKwlTRVRfSDJDQ01EX01TUlJQVF9QQVJNX09QTU9ERShwYXJtLCBtc3RhdHVzKTsKKwlTRVRfSDJDQ01EX01TUlJQVF9QQVJNX01BQ0lEX0lORChwYXJtLCAwKTsKKworCXJ0bDkyZWVfZmlsbF9oMmNfY21kKGh3LCBIMkNfOTJFX01TUlJQVCwgMywgcGFybSk7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmVlX2NtZF9zZW5kX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnBza2IgPSBOVUxMOworCisJcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXTsKKworCXBza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CisJaWYgKHBza2IpCisJCWtmcmVlX3NrYihwc2tiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCS8qdGhpcyBpcyB3cm9uZywgZmlsbF90eF9jbWRkZXNjIG5lZWRzIHVwZGF0ZSovCisJcGRlc2MgPSAmcmluZy0+ZGVzY1swXTsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5maWxsX3R4X2NtZGRlc2MoaHcsICh1OCAqKSBwZGVzYywgMSwgMSwgc2tiKTsKKworCV9fc2tiX3F1ZXVlX3RhaWwoJnJpbmctPnF1ZXVlLCBza2IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIEJFQUNPTl9QRwkJMCAvKiAtPjEgKi8KKyNkZWZpbmUgUFNQT0xMX1BHCQkyCisjZGVmaW5lIE5VTExfUEcJCQkzCisjZGVmaW5lIFBST0JFUlNQX1BHCQk0IC8qIC0+NSAqLworCisjZGVmaW5lIFRPVEFMX1JFU0VSVkVEX1BLVF9MRU4JNzY4CisKKworCitzdGF0aWMgdTggcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbVE9UQUxfUkVTRVJWRURfUEtUX0xFTl0gPSB7CisJLyogcGFnZSAwIGJlYWNvbiAqLworCTB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHhGRiwgMHhGRiwgMHgwMCwgMHhFMCwgMHg0QywgMHgwMiwgMHhCMSwgMHg3OCwKKwkweEVDLCAweDFBLCAweDU5LCAweDBCLCAweEFELCAweEQ0LCAweDIwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwNSwgMHg1NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMyLCAweDAxLCAweDA4LCAweDgyLCAweDg0LCAweDBCLAorCTB4MTYsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkMsIDB4MDMsIDB4MDEsIDB4MDYsCisJMHgwNiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyQSwgMHgwMSwgMHgwMiwgMHgzMiwKKwkweDA0LCAweDBDLCAweDEyLCAweDE4LCAweDYwLCAweDJELCAweDFBLCAweDZDLAorCTB4MDksIDB4MDMsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4M0QsIDB4MDAsIDB4REQsIDB4MDcsIDB4MDAsIDB4RTAsIDB4NEMsCisJMHgwMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHhERCwgMHgxOCwgMHgwMCwgMHg1MCwKKwkweEYyLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDUwLCAweEYyLCAweDA0LAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NTAsIDB4RjIsIDB4MDQsIDB4MDEsIDB4MDAsCisKKwkvKiBwYWdlIDEgYmVhY29uICovCisJMHgwMCwgMHg1MCwgMHhGMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MjgsIDB4OEMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKworCS8qIHBhZ2UgMiAgcHMtcG9sbCAqLworCTB4QTQsIDB4MTAsIDB4MDEsIDB4QzAsIDB4RUMsIDB4MUEsIDB4NTksIDB4MEIsCisJMHhBRCwgMHhENCwgMHgwMCwgMHhFMCwgMHg0QywgMHgwMiwgMHhCMSwgMHg3OCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDE4LCAweDAwLCAweDI4LCAweDhDLCAweDAwLCAweDEyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisKKwkvKiBwYWdlIDMgIG51bGwgKi8KKwkweDQ4LCAweDAxLCAweDAwLCAweDAwLCAweEVDLCAweDFBLCAweDU5LCAweDBCLAorCTB4QUQsIDB4RDQsIDB4MDAsIDB4RTAsIDB4NEMsIDB4MDIsIDB4QjEsIDB4NzgsCisJMHhFQywgMHgxQSwgMHg1OSwgMHgwQiwgMHhBRCwgMHhENCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg3MiwgMHgwMCwgMHgyOCwgMHg4QywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCisJLyogcGFnZSA0ICBwcm9iZV9yZXNwICovCisJMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHgxMCwKKwkweDAwLCAweDAzLCAweDAwLCAweEUwLCAweDRDLCAweDc2LCAweDAwLCAweDQyLAorCTB4MDAsIDB4NDAsIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsCisJMHg5RSwgMHg0NiwgMHgxNSwgMHgzMiwgMHgyNywgMHhGMiwgMHgyRCwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDBDLCAweDZDLCAweDY5LAorCTB4NkUsIDB4NkIsIDB4NzMsIDB4NzksIDB4NzMsIDB4NUYsIDB4NzcsIDB4NkMsCisJMHg2MSwgMHg2RSwgMHgwMSwgMHgwNCwgMHg4MiwgMHg4NCwgMHg4QiwgMHg5NiwKKwkweDAzLCAweDAxLCAweDAxLCAweDA2LCAweDAyLCAweDAwLCAweDAwLCAweDJBLAorCTB4MDEsIDB4MDAsIDB4MzIsIDB4MDgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkMsCisJMHgwQywgMHgxMiwgMHgxOCwgMHg2MCwgMHgyRCwgMHgxQSwgMHg2QywgMHgxOCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDNELCAweDAwLCAweERELCAweDA2LCAweDAwLCAweEUwLCAweDRDLCAweDAyLAorCTB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKworCS8qIHBhZ2UgNSAgcHJvYmVfcmVzcCAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworCisKKwordm9pZCBydGw5MmVlX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX2RsX2ZpbmlzaGVkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCisJdTMyIHRvdGFscGFja2V0bGVuOworCWJvb2wgcnRzdGF0dXM7CisJdTggdTFSc3ZkUGFnZUxvY1s1XSA9IHsgMCB9OworCWJvb2wgYl9kbG9rID0gZmFsc2U7CisKKwl1OCAqYmVhY29uOworCXU4ICpwX3BzcG9sbDsKKwl1OCAqbnVsbGZ1bmM7CisJdTggKnBfcHJvYmVyc3A7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQkoMSkgYmVhY29uCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwliZWFjb24gPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbQkVBQ09OX1BHICogMTI4XTsKKwlTRVRfODAyMTFfSERSX0FERFJFU1MyKGJlYWNvbiwgbWFjLT5tYWNfYWRkcik7CisJU0VUXzgwMjExX0hEUl9BRERSRVNTMyhiZWFjb24sIG1hYy0+YnNzaWQpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJKDIpIHBzLXBvbGwKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJcF9wc3BvbGwgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFNQT0xMX1BHICogMTI4XTsKKwlTRVRfODAyMTFfUFNfUE9MTF9BSUQocF9wc3BvbGwsIChtYWMtPmFzc29jX2lkIHwgMHhjMDAwKSk7CisJU0VUXzgwMjExX1BTX1BPTExfQlNTSUQocF9wc3BvbGwsIG1hYy0+YnNzaWQpOworCVNFVF84MDIxMV9QU19QT0xMX1RBKHBfcHNwb2xsLCBtYWMtPm1hY19hZGRyKTsKKworCVNFVF9IMkNDTURfUlNWRFBBR0VfTE9DX1BTUE9MTCh1MVJzdmRQYWdlTG9jLCBQU1BPTExfUEcpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCSgzKSBudWxsIGRhdGEKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW51bGxmdW5jID0gJnJlc2VydmVkX3BhZ2VfcGFja2V0W05VTExfUEcgKiAxMjhdOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzEobnVsbGZ1bmMsIG1hYy0+YnNzaWQpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzIobnVsbGZ1bmMsIG1hYy0+bWFjX2FkZHIpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzMobnVsbGZ1bmMsIG1hYy0+YnNzaWQpOworCisJU0VUX0gyQ0NNRF9SU1ZEUEFHRV9MT0NfTlVMTF9EQVRBKHUxUnN2ZFBhZ2VMb2MsIE5VTExfUEcpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQkoNCkgcHJvYmUgcmVzcG9uc2UKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlwX3Byb2JlcnNwID0gJnJlc2VydmVkX3BhZ2VfcGFja2V0W1BST0JFUlNQX1BHICogMTI4XTsKKwlTRVRfODAyMTFfSERSX0FERFJFU1MxKHBfcHJvYmVyc3AsIG1hYy0+YnNzaWQpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzIocF9wcm9iZXJzcCwgbWFjLT5tYWNfYWRkcik7CisJU0VUXzgwMjExX0hEUl9BRERSRVNTMyhwX3Byb2JlcnNwLCBtYWMtPmJzc2lkKTsKKworCVNFVF9IMkNDTURfUlNWRFBBR0VfTE9DX1BST0JFX1JTUCh1MVJzdmRQYWdlTG9jLCBQUk9CRVJTUF9QRyk7CisKKwl0b3RhbHBhY2tldGxlbiA9IFRPVEFMX1JFU0VSVkVEX1BLVF9MRU47CisKKwlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCAsCisJCSAgICAgICJydGw5MmVlX3NldF9md19yc3ZkcGFnZXBrdCgpOiBIV19WQVJfU0VUX1RYX0NNRDogQUxMXG4iLAorCQkgICAgICAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbMF0sIHRvdGFscGFja2V0bGVuKTsKKwlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCAsCisJCSAgICAgICJydGw5MmVlX3NldF9md19yc3ZkcGFnZXBrdCgpOiBIV19WQVJfU0VUX1RYX0NNRDogQUxMXG4iLAorCQkgICAgICB1MVJzdmRQYWdlTG9jLCAzKTsKKworCisJc2tiID0gZGV2X2FsbG9jX3NrYih0b3RhbHBhY2tldGxlbik7CisJbWVtY3B5KCh1OCAqKSBza2JfcHV0KHNrYiwgdG90YWxwYWNrZXRsZW4pLAorCSAgICAgICAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXQsIHRvdGFscGFja2V0bGVuKTsKKworCXJ0c3RhdHVzID0gX3J0bDkyZWVfY21kX3NlbmRfcGFja2V0KGh3LCBza2IpOworCisJaWYgKHJ0c3RhdHVzKQorCQliX2Rsb2sgPSB0cnVlOworCisJaWYgKGJfZGxvaykgeworCQlSVF9UUkFDRShDT01QX1BPV0VSLCBEQkdfTE9VRCAsCisJCQkgKCJTZXQgUlNWRCBwYWdlIGxvY2F0aW9uIHRvIEZ3LlxuIikpOworCQlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCAsCisJCQkgICAgICAiSDJDX1JTVkRQQUdFOlxuIiwgdTFSc3ZkUGFnZUxvYywgMyk7CisJCXJ0bDkyZWVfZmlsbF9oMmNfY21kKGh3LCBIMkNfOTJFX1JTVkRQQUdFLAorCQkJCSAgICAgc2l6ZW9mKHUxUnN2ZFBhZ2VMb2MpLCB1MVJzdmRQYWdlTG9jKTsKKwl9IGVsc2UKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiU2V0IFJTVkQgcGFnZSBsb2NhdGlvbiB0byBGdyBGQUlMISEhISEhLlxuIikpOworfQorCisvKlNob3VkIGNoZWNrIEZXIHN1cHBvcnQgcDJwIG9yIG5vdC4qLworc3RhdGljIHZvaWQgcnRsOTJlZV9zZXRfcDJwX2N0d19wZXJpb2RfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjdHdpbmRvdykKK3sKKwl1OCB1MV9jdHdpbmRvd19wZXJpb2RbMV0gPSB7Y3R3aW5kb3d9OworCisJcnRsOTJlZV9maWxsX2gyY19jbWQoaHcsIEgyQ185MkVfUDJQX1BTX0NUV19DTUQsIDEsIHUxX2N0d2luZG93X3BlcmlvZCk7CisKK30KKwordm9pZCBydGw5MmVlX3NldF9wMnBfcHNfb2ZmbG9hZF9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHAycF9wc19zdGF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnJ0bHBzID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wMnBfcHNfaW5mbyAqcDJwaW5mbyA9ICYocnRscHMtPnAycF9wc19pbmZvKTsKKwlzdHJ1Y3QgcDJwX3BzX29mZmxvYWRfdCAqcDJwX3BzX29mZmxvYWQgPSAmcnRsaGFsLT5wMnBfcHNfb2ZmbG9hZDsKKwl1OCBpOworCXUxNiBjdHdpbmRvdzsKKwl1MzIgc3RhcnRfdGltZSwgdHNmX2xvdzsKKworCXN3aXRjaCAocDJwX3BzX3N0YXRlKSB7CisJY2FzZSBQMlBfUFNfRElTQUJMRToKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX0xPVUQgLCAoIlAyUF9QU19ESVNBQkxFXG4iKSk7CisJCW1lbXNldChwMnBfcHNfb2ZmbG9hZCwgMCwgMSk7CisJCWJyZWFrOworCWNhc2UgUDJQX1BTX0VOQUJMRToKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX0xPVUQgLCAoIlAyUF9QU19FTkFCTEVcbiIpKTsKKwkJLyogdXBkYXRlIENUV2luZG93IHZhbHVlLiAqLworCQlpZiAocDJwaW5mby0+Y3R3aW5kb3cgPiAwKSB7CisJCQlwMnBfcHNfb2ZmbG9hZC0+Q1RXaW5kb3dfRW4gPSAxOworCQkJY3R3aW5kb3cgPSBwMnBpbmZvLT5jdHdpbmRvdzsKKwkJCXJ0bDkyZWVfc2V0X3AycF9jdHdfcGVyaW9kX2NtZChodywgY3R3aW5kb3cpOworCQl9CisJCS8qIGh3IG9ubHkgc3VwcG9ydCAyIHNldCBvZiBOb0EgKi8KKwkJZm9yIChpID0gMCA7IGkgPCBwMnBpbmZvLT5ub2FfbnVtIDsgaSsrKSB7CisJCQkvKiBUbyBjb250cm9sIHRoZSByZWdpc3RlciBzZXR0aW5nIGZvciB3aGljaCBOT0EqLworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1Y2YsIChpIDw8IDQpKTsKKwkJCWlmIChpID09IDApCisJCQkJcDJwX3BzX29mZmxvYWQtPk5vQTBfRW4gPSAxOworCQkJZWxzZQorCQkJCXAycF9wc19vZmZsb2FkLT5Ob0ExX0VuID0gMTsKKwkJCS8qIGNvbmZpZyBQMlAgTm9BIERlc2NyaXB0b3IgUmVnaXN0ZXIgKi8KKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDVFMCwKKwkJCQkJcDJwaW5mby0+bm9hX2R1cmF0aW9uW2ldKTsKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDVFNCwKKwkJCQkJcDJwaW5mby0+bm9hX2ludGVydmFsW2ldKTsKKworCQkJLypHZXQgQ3VycmVudCAUVFNGIHZhbHVlICovCisJCQl0c2ZfbG93ID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX1RTRlRSKTsKKworCQkJc3RhcnRfdGltZSA9IHAycGluZm8tPm5vYV9zdGFydF90aW1lW2ldOworCQkJaWYgKHAycGluZm8tPm5vYV9jb3VudF90eXBlW2ldICE9IDEpIHsKKwkJCQl3aGlsZSAoc3RhcnRfdGltZSA8PSAodHNmX2xvdyArICg1MCAqIDEwMjQpKSkgeworCQkJCQlzdGFydF90aW1lICs9IHAycGluZm8tPm5vYV9pbnRlcnZhbFtpXTsKKwkJCQkJaWYgKHAycGluZm8tPm5vYV9jb3VudF90eXBlW2ldICE9IDI1NSkKKwkJCQkJCXAycGluZm8tPm5vYV9jb3VudF90eXBlW2ldLS07CisJCQkJfQorCQkJfQorCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIDB4NUU4LCBzdGFydF90aW1lKTsKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDVFQywKKwkJCQkJcDJwaW5mby0+bm9hX2NvdW50X3R5cGVbaV0pOworCQl9CisJCWlmICgocDJwaW5mby0+b3BwX3BzID09IDEpIHx8IChwMnBpbmZvLT5ub2FfbnVtID4gMCkpIHsKKwkJCS8qIHJzdCBwMnAgY2lyY3VpdCAqLworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0RVQUxfVFNGX1JTVCwgQklUKDQpKTsKKwkJCXAycF9wc19vZmZsb2FkLT5PZmZsb2FkX0VuID0gMTsKKworCQkJaWYgKFAyUF9ST0xFX0dPID09IHJ0bHByaXYtPm1hYzgwMjExLnAycCkgeworCQkJCXAycF9wc19vZmZsb2FkLT5yb2xlID0gMTsKKwkJCQlwMnBfcHNfb2ZmbG9hZC0+QWxsU3RhU2xlZXAgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlwMnBfcHNfb2ZmbG9hZC0+cm9sZSA9IDA7CisJCQl9CisJCQlwMnBfcHNfb2ZmbG9hZC0+ZGlzY292ZXJ5ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIFAyUF9QU19TQ0FOOgorCQlSVF9UUkFDRShDT01QX0ZXLCBEQkdfTE9VRCAsICgiUDJQX1BTX1NDQU5cbiIpKTsKKwkJcDJwX3BzX29mZmxvYWQtPmRpc2NvdmVyeSA9IDE7CisJCWJyZWFrOworCWNhc2UgUDJQX1BTX1NDQU5fRE9ORToKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX0xPVUQgLCAoIlAyUF9QU19TQ0FOX0RPTkVcbiIpKTsKKwkJcDJwX3BzX29mZmxvYWQtPmRpc2NvdmVyeSA9IDA7CisJCXAycGluZm8tPnAycF9wc19zdGF0ZSA9IFAyUF9QU19FTkFCTEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJ0bDkyZWVfZmlsbF9oMmNfY21kKGh3LCBIMkNfOTJFX1AyUF9QU19PRkZMT0FELCAxLAorCQkJICAgICAodTggKilwMnBfcHNfb2ZmbG9hZCk7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfYzJoX3JhX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICB1OCAqY21kX2J1ZiwgdTggY21kX2xlbikKK3sKKwl1OCByYXRlID0gY21kX2J1ZlswXSAmIDB4M0Y7CisJYm9vbCBjb2xsaXNpb25fc3RhdGUgPSBjbWRfYnVmWzNdICYgQklUKDApOworCisJcnRsOTJlZV9kbV9keW5hbWljX2FyZmJfc2VsZWN0KGh3LCByYXRlLCBjb2xsaXNpb25fc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9jMmhfY29udGVudF9wYXJzaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjMmhfY21kX2lkLAorCQkJCQkgdTggYzJoX2NtZF9sZW4sIHU4ICp0bXBfYnVmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXN3aXRjaCAoYzJoX2NtZF9pZCkgeworCWNhc2UgQzJIXzgxOTJFX0RCRzoKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX1RSQUNFICwgKCJbQzJIXSwgQzJIXzg3MjNCRV9EQkchIVxuIikpOworCQlicmVhazsKKwljYXNlIEMySF84MTkyRV9UWEJGOgorCQlSVF9UUkFDRShDT01QX0ZXLCBEQkdfVFJBQ0UgLCAoIltDMkhdLCBDMkhfODE5MkVfVFhCRiEhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgQzJIXzgxOTJFX1RYX1JFUE9SVDoKKwkJUlRfVFJBQ0UoQ09NUF9GVywgREJHX1RSQUNFICwgKCJbQzJIXSwgQzJIXzg3MjNCRV9UWF9SRVBPUlQhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgQzJIXzgxOTJFX0JUX0lORk86CisJCVJUX1RSQUNFKENPTVBfRlcsIERCR19UUkFDRSAsICgiW0MySF0sIEMySF84NzIzQkVfQlRfSU5GTyEhXG4iKSk7CisJCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfb3BzLT5idGNfYnRpbmZvX25vdGlmeShydGxwcml2LCB0bXBfYnVmLAorCQkJCQkJCSAgICAgIGMyaF9jbWRfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBDMkhfODE5MkVfQlRfTVA6CisJCVJUX1RSQUNFKENPTVBfRlcsIERCR19UUkFDRSwgKCJbQzJIXSwgQzJIXzg3MjNCRV9CVF9NUCEhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgQzJIXzgxOTJFX1JBX1JQVDoKKwkJX3J0bDkyZWVfYzJoX3JhX3JlcG9ydF9oYW5kbGVyKGh3LCB0bXBfYnVmLCBjMmhfY21kX2xlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKENPTVBfRlcsIERCR19UUkFDRSwKKwkJCSAoIltDMkhdLCBVbmtvd24gcGFja2V0ISEgQ21kSWQoJSNYKSFcbiIsIGMyaF9jbWRfaWQpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHJ0bDkyZWVfYzJoX3BhY2tldF9oYW5kbGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqYnVmZmVyLCB1OCBsZW4pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IGMyaF9jbWRfaWQgPSAwLCBjMmhfY21kX3NlcSA9IDAsIGMyaF9jbWRfbGVuID0gMDsKKwl1OCAqdG1wX2J1ZiA9IE5VTEw7CisKKwljMmhfY21kX2lkID0gYnVmZmVyWzBdOworCWMyaF9jbWRfc2VxID0gYnVmZmVyWzFdOworCWMyaF9jbWRfbGVuID0gbGVuIC0gMjsKKwl0bXBfYnVmID0gYnVmZmVyICsgMjsKKworCVJUX1RSQUNFKENPTVBfRlcsIERCR19UUkFDRSwKKwkJKCJbQzJIIHBhY2tldF0sIGMyaENtZElkID0gMHgleCwgYzJoQ21kU2VxID0gMHgleCwgYzJoQ21kTGVuID0lZFxuIiwKKwkJYzJoX2NtZF9pZCwgYzJoX2NtZF9zZXEsIGMyaF9jbWRfbGVuKSk7CisKKwlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfRlcsIERCR19UUkFDRSwKKwkJICAgICAgIltDMkggcGFja2V0XSwgQ29udGVudCBIZXg6XG4iLCB0bXBfYnVmLCBjMmhfY21kX2xlbik7CisKKwlfcnRsOTJlZV9jMmhfY29udGVudF9wYXJzaW5nKGh3LCBjMmhfY21kX2lkLCBjMmhfY21kX2xlbiwgdG1wX2J1Zik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9mdy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDM5OTJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvZncuaApAQCAtMCwwICsxLDIxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyRV9fRldfX0hfXworI2RlZmluZSBfX1JUTDkyRV9fRldfX0hfXworCisjZGVmaW5lIEZXXzgxOTJDX1NJWkUJCQkJMHg4MDAwCisjZGVmaW5lIEZXXzgxOTJDX1NUQVJUX0FERFJFU1MJCQkweDEwMDAKKyNkZWZpbmUgRldfODE5MkNfRU5EX0FERFJFU1MJCQkweDVGRkYKKyNkZWZpbmUgRldfODE5MkNfUEFHRV9TSVpFCQkJNDA5NgorI2RlZmluZSBGV184MTkyQ19QT0xMSU5HX0RFTEFZCQkJNQorI2RlZmluZSBGV184MTkyQ19QT0xMSU5HX1RJTUVPVVRfQ09VTlQJCTMwMDAKKworI2RlZmluZSBJU19GV19IRUFERVJfRVhJU1QoX3Bmd2hkcikJXAorCSgoX3Bmd2hkci0+c2lnbmF0dXJlJjB4RkZGMCkgPT0gMHg5MkUwKQorI2RlZmluZSBVU0VfT0xEX1dPV0xBTl9ERUJVR19GVyAwCisKKyNkZWZpbmUgSDJDXzkyRV9SU1ZEUEFHRV9MT0NfTEVOCQk1CisjZGVmaW5lIEgyQ185MkVfUFdFTU9ERV9MRU5HVEgJCQk1CisjZGVmaW5lIEgyQ185MkVfSk9JTkJTU1JQVF9MRU5HVEgJCTEKKyNkZWZpbmUgSDJDXzkyRV9BUF9PRkZMT0FEX0xFTkdUSAkJMworI2RlZmluZSBIMkNfOTJFX1dPV0xBTl9MRU5HVEgJCQkzCisjZGVmaW5lIEgyQ185MkVfS0VFUF9BTElWRV9DVFJMX0xFTkdUSAkJMworI2lmIChVU0VfT0xEX1dPV0xBTl9ERUJVR19GVyA9PSAwKQorI2RlZmluZSBIMkNfOTJFX1JFTU9URV9XQUtFX0NUUkxfTEVOCQkxCisjZWxzZQorI2RlZmluZSBIMkNfOTJFX1JFTU9URV9XQUtFX0NUUkxfTEVOCQkzCisjZW5kaWYKKyNkZWZpbmUgSDJDXzkyRV9BT0FDX0dMT0JBTF9JTkZPX0xFTgkJMgorI2RlZmluZSBIMkNfOTJFX0FPQUNfUlNWRFBBR0VfTE9DX0xFTgkJNworCisKKy8qIEZ3IFBTIHN0YXRlIGZvciBSUFdNLgorKkJJVFsyOjBdID0gSFcgc3RhdGUKKypCSVRbM10gPSBQcm90b2NvbCBQUyBzdGF0ZSwgIDE6IHJlZ2lzdGVyIGFjdGl2ZSBzdGF0ZSwgMDogcmVnaXN0ZXIgc2xlZXAgc3RhdGUKKypCSVRbNF0gPSBzdWItc3RhdGUKKyovCisjZGVmaW5lCUZXX1BTX1JGX09OCQlCSVQoMikKKyNkZWZpbmUJRldfUFNfUkVHSVNURVJfQUNUSVZFCUJJVCgzKQorCisjZGVmaW5lCUZXX1BTX0FDSwkJQklUKDYpCisjZGVmaW5lCUZXX1BTX1RPR0dMRQkJQklUKDcpCisKKyAvKiA5MkUgUlBXTSB2YWx1ZSovCisgLyogQklUWzBdID0gMTogMzJrLCAwOiA0ME0qLworI2RlZmluZQlGV19QU19DTE9DS19PRkYJCUJJVCgwKQkJLyogMzJrICovCisjZGVmaW5lCUZXX1BTX0NMT0NLX09OCQkwCQkvKiA0ME0gKi8KKworI2RlZmluZQlGV19QU19TVEFURV9NQVNLCQkoMHgwRikKKyNkZWZpbmUJRldfUFNfU1RBVEVfSFdfTUFTSwkJKDB4MDcpCisjZGVmaW5lCUZXX1BTX1NUQVRFX0lOVF9NQVNLCQkoMHgzRikKKworI2RlZmluZQlGV19QU19TVEFURSh4KQkJCShGV19QU19TVEFURV9NQVNLICYgKHgpKQorCisjZGVmaW5lCUZXX1BTX1NUQVRFX0FMTF9PTl85MkUJCShGV19QU19DTE9DS19PTikKKyNkZWZpbmUJRldfUFNfU1RBVEVfUkZfT05fOTJFCQkoRldfUFNfQ0xPQ0tfT04pCisjZGVmaW5lCUZXX1BTX1NUQVRFX1JGX09GRl85MkUJCShGV19QU19DTE9DS19PTikKKyNkZWZpbmUJRldfUFNfU1RBVEVfUkZfT0ZGX0xPV19QV1IJKEZXX1BTX0NMT0NLX09GRikKKworLyogRm9yIDkyRSBIMkMgUHdyTW9kZSBDbWQgSUQgNS4qLworI2RlZmluZQlGV19QV1JfU1RBVEVfQUNUSVZFCSgoRldfUFNfUkZfT04pIHwgKEZXX1BTX1JFR0lTVEVSX0FDVElWRSkpCisjZGVmaW5lCUZXX1BXUl9TVEFURV9SRl9PRkYJMAorCisjZGVmaW5lCUZXX1BTX0lTX0FDSyh4KQkJKCh4KSAmIEZXX1BTX0FDSykKKworI2RlZmluZQlJU19JTl9MT1dfUE9XRVJfU1RBVEVfOTJFKEZ3UFNTdGF0ZSkJCVwKKwkoRldfUFNfU1RBVEUoRndQU1N0YXRlKSA9PSBGV19QU19DTE9DS19PRkYpCisKKyNkZWZpbmUJRldfUFdSX1NUQVRFX0FDVElWRQkoKEZXX1BTX1JGX09OKSB8IChGV19QU19SRUdJU1RFUl9BQ1RJVkUpKQorI2RlZmluZQlGV19QV1JfU1RBVEVfUkZfT0ZGCTAKKworc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIgeworCXUxNiBzaWduYXR1cmU7CisJdTggY2F0ZWdvcnk7CisJdTggZnVuY3Rpb247CisJdTE2IHZlcnNpb247CisJdTggc3VidmVyc2lvbjsKKwl1OCByc3ZkMTsKKwl1OCBtb250aDsKKwl1OCBkYXRlOworCXU4IGhvdXI7CisJdTggbWludXRlOworCXUxNiByYW1jb2RlU2l6ZTsKKwl1MTYgcnN2ZDI7CisJdTMyIHN2bmluZGV4OworCXUzMiByc3ZkMzsKKwl1MzIgcnN2ZDQ7CisJdTMyIHJzdmQ1OworfTsKKworZW51bSBydGw4MTkyY19oMmNfY21kIHsKKwlIMkNfOTJFX1JTVkRQQUdFID0gMCwKKwlIMkNfOTJFX01TUlJQVCA9IDEsCisJSDJDXzkyRV9TQ0FOID0gMiwKKwlIMkNfOTJFX0tFRVBfQUxJVkVfQ1RSTCA9IDMsCisJSDJDXzkyRV9ESVNDT05ORUNUX0RFQ0lTSU9OID0gNCwKKyNpZiAoVVNFX09MRF9XT1dMQU5fREVCVUdfRlcgPT0gMSkKKwlIMkNfOTJFX1dPX1dMQU4gPSA1LAorI2VuZGlmCisJSDJDXzkyRV9JTklUX09GRkxPQUQgPSA2LAorI2lmIChVU0VfT0xEX1dPV0xBTl9ERUJVR19GVyA9PSAxKQorCUgyQ185MkVfUkVNT1RFX1dBS0VfQ1RSTCA9IDcsCisjZW5kaWYKKwlIMkNfOTJFX0FQX09GRkxPQUQgPSA4LAorCUgyQ185MkVfQkNOX1JTVkRQQUdFID0gOSwKKwlIMkNfOTJFX1BST0JFUlNQX1JTVkRQQUdFID0gMTAsCisKKwlIMkNfOTJFX1NFVFBXUk1PREUgPSAweDIwLAorCUgyQ185MkVfUFNfVFVOSU5HX1BBUkEgPSAweDIxLAorCUgyQ185MkVfUFNfVFVOSU5HX1BBUkEyID0gMHgyMiwKKwlIMkNfOTJFX1BTX0xQU19QQVJBID0gMHgyMywKKwlIMkNfOTJFX1AyUF9QU19PRkZMT0FEID0gMDI0LAorCisjaWYgKFVTRV9PTERfV09XTEFOX0RFQlVHX0ZXID09IDApCisJSDJDXzkyRV9XT19XTEFOID0gMHg4MCwKKwlIMkNfOTJFX1JFTU9URV9XQUtFX0NUUkwgPSAweDgxLAorCUgyQ185MkVfQU9BQ19HTE9CQUxfSU5GTyA9IDB4ODIsCisJSDJDXzkyRV9BT0FDX1JTVkRQQUdFID0gMHg4MywKKyNlbmRpZgorCUgyQ185MkVfUkFfTUFTSyA9IDB4NDAsCisJSDJDXzkyRV9SU1NJX1JFUE9SVCA9IDB4NDIsCisJSDJDXzkyRV9TRUxFQ1RJVkVfU1VTUEVORF9ST0ZfQ01ELAorCUgyQ185MkVfUDJQX1BTX01PREUsCisJSDJDXzkyRV9QU0RfUkVTVUxULAorCS8qTm90IGRlZmluZWQgQ1RXIENNRCBmb3IgUDJQIHlldCovCisJSDJDXzkyRV9QMlBfUFNfQ1RXX0NNRCwKKwlNQVhfOTJFX0gyQ0NNRAorfTsKKworZW51bSBydGw4MTkyZV9jMmhfZXZ0IHsKKwlDMkhfODE5MkVfREJHID0gMCwKKwlDMkhfODE5MkVfTEIgPSAxLAorCUMySF84MTkyRV9UWEJGID0gMiwKKwlDMkhfODE5MkVfVFhfUkVQT1JUID0gMywKKwlDMkhfODE5MkVfQlRfSU5GTyA9IDksCisJQzJIXzgxOTJFX0JUX01QID0gMTEsCisJQzJIXzgxOTJFX1JBX1JQVCA9IDEyLAorCU1BWF84MTkyRV9DMkhFVkVOVAorfTsKKworI2RlZmluZSBwYWdlbnVtXzEyOChfbGVuKQlcCisJKHUzMikoKChfbGVuKSA+PiA3KSArICgoX2xlbikgJiAweDdGID8gMSA6IDApKQorCisjZGVmaW5lIFNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX01PREUoX19waDJjY21kLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfMUJZVEUoX19waDJjY21kLCAwLCA4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0gyQ0NNRF9QV1JNT0RFX1BBUk1fUkxCTShfX3BIMkNDbWQsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURSgoX19wSDJDQ21kKSsxLCAwLCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0gyQ0NNRF9QV1JNT0RFX1BBUk1fU01BUlRfUFMoX19wSDJDQ21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURSgoX19wSDJDQ21kKSsxLCA0LCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0gyQ0NNRF9QV1JNT0RFX1BBUk1fQVdBS0VfSU5URVJWQUwoX19wSDJDQ21kLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzFCWVRFKChfX3BIMkNDbWQpKzIsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9BTExfUVVFVUVfVUFQU0QoX19wSDJDQ21kLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzFCWVRFKChfX3BIMkNDbWQpKzMsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9QV1JfU1RBVEUoX19wSDJDQ21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURSgoX19wSDJDQ21kKSs0LCAwLCA4LCBfX3ZhbCkKKyNkZWZpbmUgR0VUXzkyRV9IMkNDTURfUFdSTU9ERV9QQVJNX01PREUoX19wSDJDQ21kKQkJCVwKKwlMRV9CSVRTX1RPXzFCWVRFKF9fcEgyQ0NtZCwgMCwgOCkKKworI2RlZmluZSBTRVRfSDJDQ01EX0pPSU5CU1NSUFRfUEFSTV9PUE1PREUoX19waDJjY21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURShfX3BoMmNjbWQsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX1JTVkRQQUdFX0xPQ19QUk9CRV9SU1AoX19waDJjY21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURShfX3BoMmNjbWQsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX1JTVkRQQUdFX0xPQ19QU1BPTEwoX19waDJjY21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURSgoX19waDJjY21kKSsxLCAwLCA4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0gyQ0NNRF9SU1ZEUEFHRV9MT0NfTlVMTF9EQVRBKF9fcGgyY2NtZCwgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfMUJZVEUoKF9fcGgyY2NtZCkrMiwgMCwgOCwgX192YWwpCisKKy8qIF9NRURJQV9TVEFUVVNfUlBUX1BBUk1fQ01EMSAqLworI2RlZmluZSBTRVRfSDJDQ01EX01TUlJQVF9QQVJNX09QTU9ERShfX3BIMkNDbWQsIF9fVmFsdWUpCQlcCisJU0VUX0JJVFNfVE9fTEVfMUJZVEUoX19wSDJDQ21kLCAwLCAxLCBfX1ZhbHVlKQorI2RlZmluZSBTRVRfSDJDQ01EX01TUlJQVF9QQVJNX01BQ0lEX0lORChfX3BIMkNDbWQsIF9fVmFsdWUpCQlcCisJU0VUX0JJVFNfVE9fTEVfMUJZVEUoX19wSDJDQ21kLCAxLCAxLCBfX1ZhbHVlKQorI2RlZmluZSBTRVRfSDJDQ01EX01TUlJQVF9QQVJNX01BQ0lEKF9fcEgyQ0NtZCwgX19WYWx1ZSkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURShfX3BIMkNDbWQrMSwgMCwgOCwgX19WYWx1ZSkKKyNkZWZpbmUgU0VUX0gyQ0NNRF9NU1JSUFRfUEFSTV9NQUNJRF9FTkQoX19wSDJDQ21kLCBfX1ZhbHVlKQkJXAorCVNFVF9CSVRTX1RPX0xFXzFCWVRFKF9fcEgyQ0NtZCsyLCAwLCA4LCBfX1ZhbHVlKQorCisKK2ludCBydGw5MmVlX2Rvd25sb2FkX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJ1c2Vfd2FrZV9vbl93bGFuX2Z3KTsKK3ZvaWQgcnRsOTJlZV9maWxsX2gyY19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGVsZW1lbnRfaWQsCisJCQkgIHUzMiBjbWRfbGVuLCB1OCAqcF9jbWRidWZmZXIpOwordm9pZCBydGw5MmVlX2Zpcm13YXJlX3NlbGZyZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfc2V0X2Z3X3B3cm1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBtb2RlKTsKK3ZvaWQgcnRsOTJlZV9zZXRfZndfbWVkaWFfc3RhdHVzX3JwdF9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1zdGF0dXMpOwordm9pZCBydGw5MmVlX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX2RsX2ZpbmlzaGVkKTsKK3ZvaWQgcnRsOTJlZV9zZXRfcDJwX3BzX29mZmxvYWRfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBwMnBfcHNfc3RhdGUpOwordm9pZCBydGw5MmVlX2MyaF9wYWNrZXRfaGFuZGxlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmJ1ZmZlciwgdTggbGVuKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhZjExOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2h3LmMKQEAgLTAsMCArMSwyNTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vZWZ1c2UuaCIKKyNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAiLi4vcmVnZC5oIgorI2luY2x1ZGUgIi4uL2NhbS5oIgorI2luY2x1ZGUgIi4uL3BzLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAicHdyc2VxY21kLmgiCisjaW5jbHVkZSAicHdyc2VxLmgiCisKKyNkZWZpbmUgTExUX0NPTkZJRwk1CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3NldF9iY25fY3RybF9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgdTggc2V0X2JpdHMsIHU4IGNsZWFyX2JpdHMpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwY2ktPnJlZ19iY25fY3RybF92YWwgfD0gc2V0X2JpdHM7CisJcnRscGNpLT5yZWdfYmNuX2N0cmxfdmFsICY9IH5jbGVhcl9iaXRzOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JDTl9DVFJMLCAodTgpIHJ0bHBjaS0+cmVnX2Jjbl9jdHJsX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3N0b3BfdHhfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXA7CisKKwl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCB0bXAgJiAofkJJVCg2KSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHg2NCk7CisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDIpOworCXRtcCAmPSB+KEJJVCgwKSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RCVFRfUFJPSElCSVQgKyAyLCB0bXApOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9yZXN1bWVfdHhfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXA7CisKKwl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCB0bXAgfCBCSVQoNikpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHhmZik7CisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDIpOworCXRtcCB8PSBCSVQoMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RCVFRfUFJPSElCSVQgKyAyLCB0bXApOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9lbmFibGVfYmNuX3N1Yl9mdW5jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCV9ydGw5MmVlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCgxKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3JldHVybl9iZWFjb25fcXVldWVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CisKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSB7CisJCXN0cnVjdCBydGxfdHhfYnVmZmVyX2Rlc2MgKmVudHJ5ID0KKwkJCQkJCSZyaW5nLT5idWZmZXJfZGVzY1tyaW5nLT5pZHhdOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCisJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoCisJCQkJICh1OCAqKSBlbnRyeSwgdHJ1ZSwgSFdfREVTQ19UWEJVRkZfQUREUiksCisJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJpbmctPmlkeCA9IChyaW5nLT5pZHggKyAxKSAlIHJpbmctPmVudHJpZXM7CisJfQorCit9CitzdGF0aWMgdm9pZCBfcnRsOTJlZV9kaXNhYmxlX2Jjbl9zdWJfZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlfcnRsOTJlZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCBCSVQoMSksIDApOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9zZXRfZndfY2xvY2tfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJdTggcnB3bV92YWwsIGJvb2wgYl9uZWVkX3R1cm5fb2ZmX2NraykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlib29sIGJfc3VwcG9ydF9yZW1vdGVfd2FrZV91cDsKKwl1MzIgY291bnQgPSAwICwgaXNyX3JlZ2FkZHIgLCBjb250ZW50OworCWJvb2wgYl9zY2hlZHVsZV90aW1lciA9IGJfbmVlZF90dXJuX29mZl9ja2s7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhBTF9ERUZfV09XTEFOLAorCQkJCSAgICAgICh1OCAqKSAoJmJfc3VwcG9ydF9yZW1vdGVfd2FrZV91cCkpOworCisJaWYgKCFydGxoYWwtPmJmd19yZWFkeSkKKwkJcmV0dXJuOworCWlmICghcnRscHJpdi0+cHNjLmJfZndfY3VycmVudF9pbnBzbW9kZSkKKwkJcmV0dXJuOworCisJd2hpbGUgKDEpIHsKKwkJc3Bpbl9sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5md19wc19sb2NrKTsKKwkJaWYgKHJ0bGhhbC0+YmZ3X2Nsa19jaGFuZ2VfaW5fcHJvZ3Jlc3MpIHsKKwkJCXdoaWxlIChydGxoYWwtPmJmd19jbGtfY2hhbmdlX2luX3Byb2dyZXNzKSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQkJCWNvdW50Kys7CisJCQkJdWRlbGF5KDEwMCk7CisJCQkJaWYgKGNvdW50ID4gMTAwMCkKKwkJCQkJcmV0dXJuOworCQkJCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZndfcHNfbG9jayk7CisJCQl9CisJCQlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZndfcHNfbG9jayk7CisJCX0gZWxzZSB7CisJCQlydGxoYWwtPmJmd19jbGtfY2hhbmdlX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCQlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZndfcHNfbG9jayk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChJU19JTl9MT1dfUE9XRVJfU1RBVEVfOTJFKHJ0bGhhbC0+ZndfcHNfc3RhdGUpKSB7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfU0VUX1JQV00sCisJCQkJCSAgICAgICh1OCAqKSAoJnJwd21fdmFsKSk7CisJCWlmIChGV19QU19JU19BQ0socnB3bV92YWwpKSB7CisJCQlpc3JfcmVnYWRkciA9IFJFR19ISVNSOworCQkJY29udGVudCA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIGlzcl9yZWdhZGRyKTsKKwkJCXdoaWxlICghKGNvbnRlbnQgJiBJTVJfQ1BXTSkgJiYgKGNvdW50IDwgNTAwKSkgeworCQkJCXVkZWxheSg1MCk7CisJCQkJY291bnQrKzsKKwkJCQljb250ZW50ID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgaXNyX3JlZ2FkZHIpOworCQkJfQorCisJCQlpZiAoY29udGVudCAmIElNUl9DUFdNKSB7CisJCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiAsIGlzcl9yZWdhZGRyLCAweDAxMDApOworCQkJCXJ0bGhhbC0+ZndfcHNfc3RhdGUgPSBGV19QU19TVEFURV9SRl9PTl85MkU7CisJCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJCSAoIlJlY2VpdmUgQ1BXTSBJTlQhISEgUFNTdGF0ZSA9ICVYXG4iLAorCQkJCQkgcnRsaGFsLT5md19wc19zdGF0ZSkpOworCQkJfQorCQl9CisKKwkJc3Bpbl9sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5md19wc19sb2NrKTsKKwkJcnRsaGFsLT5iZndfY2xrX2NoYW5nZV9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3MuZndfcHNfbG9jayk7CisJCWlmIChiX3NjaGVkdWxlX3RpbWVyKSB7CisJCQltb2RfdGltZXIoJnJ0bHByaXYtPndvcmtzLmZ3X2Nsb2Nrb2ZmX3RpbWVyLAorCQkJCSAgamlmZmllcyArIE1TRUNTKDEwKSk7CisJCX0KKworCX0gZWxzZSAgeworCQlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQlydGxoYWwtPmJmd19jbGtfY2hhbmdlX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy5md19wc19sb2NrKTsKKwl9CisKKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9zZXRfZndfY2xvY2tfb2ZmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBycHdtX3ZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmc7CisJZW51bSByZl9wd3JzdGF0ZSBydHN0YXRlOworCWJvb2wgYl9zY2hlZHVsZV90aW1lciA9IGZhbHNlOworCXU4IHF1ZXVlOworCisJaWYgKCFydGxoYWwtPmJmd19yZWFkeSkKKwkJcmV0dXJuOworCWlmICghcnRscHJpdi0+cHNjLmJfZndfY3VycmVudF9pbnBzbW9kZSkKKwkJcmV0dXJuOworCWlmICghcnRsaGFsLT5iYWxsb3dfc3dfdG9fY2hhbmdlX2h3Y2xjKQorCQlyZXR1cm47CisKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodyAsIEhXX1ZBUl9SRl9TVEFURSAsICh1OCAqKSgmcnRzdGF0ZSkpOworCWlmIChydHN0YXRlID09IEVSRk9GRiB8fCBydGxwcml2LT5wc2MuaW5hY3RpdmVfcHdyc3RhdGUgPT0gRVJGT0ZGKQorCQlyZXR1cm47CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVDsgcXVldWUrKykgeworCQlyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1txdWV1ZV07CisJCWlmIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKKwkJCWJfc2NoZWR1bGVfdGltZXIgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYl9zY2hlZHVsZV90aW1lcikgeworCQltb2RfdGltZXIoJnJ0bHByaXYtPndvcmtzLmZ3X2Nsb2Nrb2ZmX3RpbWVyLAorCQkJICBqaWZmaWVzICsgTVNFQ1MoMTApKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChGV19QU19TVEFURShydGxoYWwtPmZ3X3BzX3N0YXRlKSAhPSBGV19QU19TVEFURV9SRl9PRkZfTE9XX1BXUikgeworCQlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQlpZiAoIXJ0bGhhbC0+YmZ3X2Nsa19jaGFuZ2VfaW5fcHJvZ3Jlc3MpIHsKKwkJCXJ0bGhhbC0+YmZ3X2Nsa19jaGFuZ2VfaW5fcHJvZ3Jlc3MgPSB0cnVlOworCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQkJcnRsaGFsLT5md19wc19zdGF0ZSA9IEZXX1BTX1NUQVRFKHJwd21fdmFsKTsKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19ISVNSLCAweDAxMDApOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TRVRfUlBXTSwKKwkJCQkJCSAgICAgICh1OCAqKSAoJnJwd21fdmFsKSk7CisJCQlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQkJcnRsaGFsLT5iZndfY2xrX2NoYW5nZV9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLmZ3X3BzX2xvY2spOworCQkJbW9kX3RpbWVyKCZydGxwcml2LT53b3Jrcy5md19jbG9ja29mZl90aW1lciwKKwkJCQkgIGppZmZpZXMgKyBNU0VDUygxMCkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9zZXRfZndfcHNfcmZfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTggcnB3bV92YWwgPSAwOworCXJwd21fdmFsIHw9IChGV19QU19TVEFURV9SRl9PRkZfOTJFIHwgRldfUFNfQUNLKTsKKwlfcnRsOTJlZV9zZXRfZndfY2xvY2tfb24oaHcsIHJwd21fdmFsLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfc2V0X2Z3X3BzX3JmX29mZl9sb3dfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTggcnB3bV92YWwgPSAwOworCXJwd21fdmFsIHw9IEZXX1BTX1NUQVRFX1JGX09GRl9MT1dfUFdSOworCV9ydGw5MmVlX3NldF9md19jbG9ja19vZmYoaHcsIHJwd21fdmFsKTsKK30KK3ZvaWQgcnRsOTJlZV9md19jbGtfb2ZmX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h3ICopZGF0YTsKKworCV9ydGw5MmVlX3NldF9md19wc19yZl9vZmZfbG93X3Bvd2VyKGh3KTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZndscHNfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBiX2Z3X2N1cnJlbnRfaW5wcyA9IGZhbHNlOworCXU4IHJwd21fdmFsID0gMCwgZndfcHdybW9kZSA9IEZXX1BTX0FDVElWRV9NT0RFOworCisJaWYgKHBwc2MtPmJfbG93X3Bvd2VyX2VuYWJsZSkgeworCQlycHdtX3ZhbCA9IChGV19QU19TVEFURV9BTExfT05fOTJFIHwgRldfUFNfQUNLKTsvKiBSRiBvbiAqLworCQlfcnRsOTJlZV9zZXRfZndfY2xvY2tfb24oaHcsIHJwd21fdmFsLCBmYWxzZSk7CisJCXJ0bGhhbC0+YmFsbG93X3N3X3RvX2NoYW5nZV9od2NsYyA9IGZhbHNlOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0gyQ19GV19QV1JNT0RFLAorCQkJCQkgICAgICAodTggKikgKCZmd19wd3Jtb2RlKSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRldfUFNNT0RFX1NUQVRVUywKKwkJCQkJICAgICAgKHU4ICopICgmYl9md19jdXJyZW50X2lucHMpKTsKKwl9IGVsc2UgeworCQlycHdtX3ZhbCA9IEZXX1BTX1NUQVRFX0FMTF9PTl85MkU7CS8qIFJGIG9uICovCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfU0VUX1JQV00sCisJCQkJCSAgICAgICh1OCAqKSAoJnJwd21fdmFsKSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfSDJDX0ZXX1BXUk1PREUsCisJCQkJCSAgICAgICh1OCAqKSAoJmZ3X3B3cm1vZGUpKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9GV19QU01PREVfU1RBVFVTLAorCQkJCQkgICAgICAodTggKikgKCZiX2Z3X2N1cnJlbnRfaW5wcykpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZndscHNfZW50ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBiX2Z3X2N1cnJlbnRfaW5wcyA9IHRydWU7CisJdTggcnB3bV92YWw7CisKKwlpZiAocHBzYy0+Yl9sb3dfcG93ZXJfZW5hYmxlKSB7CisJCXJwd21fdmFsID0gRldfUFNfU1RBVEVfUkZfT0ZGX0xPV19QV1I7CS8qIFJGIG9mZiAqLworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVMsCisJCQkJCSAgICAgICh1OCAqKSAoJmJfZndfY3VycmVudF9pbnBzKSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfSDJDX0ZXX1BXUk1PREUsCisJCQkJCSAgICAgICh1OCAqKSAoJnBwc2MtPmZ3Y3RybF9wc21vZGUpKTsKKwkJcnRsaGFsLT5iYWxsb3dfc3dfdG9fY2hhbmdlX2h3Y2xjID0gdHJ1ZTsKKwkJX3J0bDkyZWVfc2V0X2Z3X2Nsb2NrX29mZihodywgcnB3bV92YWwpOworCX0gZWxzZSB7CisJCXJwd21fdmFsID0gRldfUFNfU1RBVEVfUkZfT0ZGXzkyRTsJLyogUkYgb2ZmICovCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRldfUFNNT0RFX1NUQVRVUywKKwkJCQkJICAgICAgKHU4ICopICgmYl9md19jdXJyZW50X2lucHMpKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9IMkNfRldfUFdSTU9ERSwKKwkJCQkJICAgICAgKHU4ICopICgmcHBzYy0+ZndjdHJsX3BzbW9kZSkpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1NFVF9SUFdNLAorCQkJCQkgICAgICAodTggKikgKCZycHdtX3ZhbCkpOworCX0KK30KKwordm9pZCBydGw5MmVlX2dldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJc3dpdGNoICh2YXJpYWJsZSkgeworCWNhc2UgSFdfVkFSX1JDUjoKKwkJKigodTMyICopICh2YWwpKSA9IHJ0bHBjaS0+cmVjZWl2ZV9jb25maWc7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX1JGX1NUQVRFOgorCQkqKChlbnVtIHJmX3B3cnN0YXRlICopKHZhbCkpID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX0ZXTFBTX1JGX09OOnsKKwkJZW51bSByZl9wd3JzdGF0ZSByZlN0YXRlOworCQl1MzIgdmFsX3JjcjsKKworCQlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX1JGX1NUQVRFLAorCQkJCQkgICAgICAodTggKikgKCZyZlN0YXRlKSk7CisJCWlmIChyZlN0YXRlID09IEVSRk9GRikgeworCQkJKigoYm9vbCAqKSAodmFsKSkgPSB0cnVlOworCQl9IGVsc2UgeworCQkJdmFsX3JjciA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19SQ1IpOworCQkJdmFsX3JjciAmPSAweDAwMDcwMDAwOworCQkJaWYgKHZhbF9yY3IpCisJCQkJKigoYm9vbCAqKSAodmFsKSkgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQkqKChib29sICopICh2YWwpKSA9IHRydWU7CisJCX0KKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9GV19QU01PREVfU1RBVFVTOgorCQkqKChib29sICopICh2YWwpKSA9IHBwc2MtPmJfZndfY3VycmVudF9pbnBzbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6eworCQl1NjQgdHNmOworCQl1MzIgKnB0c2ZfbG93ID0gKHUzMiAqKSAmdHNmOworCQl1MzIgKnB0c2ZfaGlnaCA9ICgodTMyICopICZ0c2YpICsgMTsKKworCQkqcHRzZl9oaWdoID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKFJFR19UU0ZUUiArIDQpKTsKKwkJKnB0c2ZfbG93ID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX1RTRlRSKTsKKworCQkqKCh1NjQgKikgKHZhbCkpID0gdHNmOworCisJCWJyZWFrOyB9CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19MT1VELAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3MgJXhcbiIsIHZhcmlhYmxlKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZG93bmxvYWRfcnN2ZF9wYWdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXBfcmVnY3IsIHRtcF9yZWc0MjI7CisJdTggYmNudmFsaWRfcmVnLCB0eGJjX3JlZzsKKwl1OCBjb3VudCA9IDAsIGRsYmNuX2NvdW50ID0gMDsKKwlib29sIGJfcmVjb3ZlciA9IGZhbHNlOworCisJLypTZXQgUkVHX0NSIGJpdCA4LiBETUEgYmVhY29uIGJ5IFNXLiovCisJdG1wX3JlZ2NyID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQ1IgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQ1IgKyAxLCB0bXBfcmVnY3IgfCBCSVQoMCkpOworCisJLyogRGlzYWJsZSBIdyBwcm90ZWN0aW9uIGZvciBhIHRpbWUgd2hpY2ggcmV2c2VyZCBmb3IgSHcgc2VuZGluZyBiZWFjb24uCisJICogRml4IGRvd25sb2FkIHJlc2VydmVkIHBhZ2UgcGFja2V0IGZhaWwKKwkgKiB0aGF0IGFjY2VzcyBjb2xsaXNpb24gd2l0aCB0aGUgcHJvdGVjdGlvbiB0aW1lLgorCSAqIDIwMTAuMDUuMTEuIEFkZGVkIGJ5IHR5bmxpLiAqLworCV9ydGw5MmVlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCgzKSk7CisJX3J0bDkyZWVfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDQpLCAwKTsKKworCS8qIFNldCBGV0hXX1RYUV9DVFJMIDB4NDIyWzZdPSAwIHRvCisJICogdGVsbCBIdyB0aGUgcGFja2V0IGlzIG5vdCBhIHJlYWwgYmVhY29uIGZyYW1lLgorCSAqLworCXRtcF9yZWc0MjIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCB0bXBfcmVnNDIyICYgKH5CSVQoNikpKTsKKworCWlmICh0bXBfcmVnNDIyICYgQklUKDYpKQorCQliX3JlY292ZXIgPSB0cnVlOworCisJZG8geworCQkvKiBDbGVhciBiZWFjb24gdmFsaWQgY2hlY2sgYml0ICovCisJCWJjbnZhbGlkX3JlZyA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0RXQkNOMF9DVFJMICsgMik7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19EV0JDTjBfQ1RSTCArIDIsCisJCQkgICAgICAgYmNudmFsaWRfcmVnIHwgQklUKDApKTsKKworCQkvKiBSZXR1cm4gQmVhY29uIFRDQiAqLworCQlfcnRsOTJlZV9yZXR1cm5fYmVhY29uX3F1ZXVlX3NrYihodyk7CisKKwkJLyogZG93bmxvYWQgcnN2ZCBwYWdlICovCisJCXJ0bDkyZWVfc2V0X2Z3X3JzdmRwYWdlcGt0KGh3LCBmYWxzZSk7CisKKwkJdHhiY19yZWcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NR1FfVFhCRF9OVU0gKyAzKTsKKwkJY291bnQgPSAwOworCQl3aGlsZSAoKHR4YmNfcmVnICYgQklUKDQpKSAmJiBjb3VudCA8IDIwKSB7CisJCQljb3VudCsrOworCQkJdWRlbGF5KDEwKTsKKwkJCXR4YmNfcmVnID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUdRX1RYQkRfTlVNICsgMyk7CisJCX0KKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01HUV9UWEJEX05VTSArIDMsCisJCQkgICAgICAgdHhiY19yZWcgfCBCSVQoNCkpOworCisJCS8qIGNoZWNrIHJzdmQgcGFnZSBkb3dubG9hZCBPSy4gKi8KKwkJYmNudmFsaWRfcmVnID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfRFdCQ04wX0NUUkwgKyAyKTsKKwkJY291bnQgPSAwOworCQl3aGlsZSAoIShiY252YWxpZF9yZWcgJiBCSVQoMCkpICYmIGNvdW50IDwgMjApIHsKKwkJCWNvdW50Kys7CisJCQl1ZGVsYXkoNTApOworCQkJYmNudmFsaWRfcmVnID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkJICAgICBSRUdfRFdCQ04wX0NUUkwgKyAyKTsKKwkJfQorCisJCWlmIChiY252YWxpZF9yZWcgJiBCSVQoMCkpCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfRFdCQ04wX0NUUkwgKyAyLCBCSVQoMCkpOworCisJCWRsYmNuX2NvdW50Kys7CisJfSB3aGlsZSAoIShiY252YWxpZF9yZWcgJiBCSVQoMCkpICYmIGRsYmNuX2NvdW50IDwgNSk7CisKKwlpZiAoIShiY252YWxpZF9yZWcgJiBCSVQoMCkpKQorCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIkRvd25sb2FkIFJTVkQgcGFnZSBmYWlsZWQhXG4iKSk7CisKKwkvKiBFbmFibGUgQmNuICovCisJX3J0bDkyZWVfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDMpLCAwKTsKKwlfcnRsOTJlZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCAwLCBCSVQoNCkpOworCisJaWYgKGJfcmVjb3ZlcikKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCB0bXBfcmVnNDIyKTsKKworCXRtcF9yZWdjciA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0NSICsgMSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0NSICsgMSwgdG1wX3JlZ2NyICYgKH5CSVQoMCkpKTsKKworfQorCit2b2lkIHJ0bDkyZWVfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICplZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXU4IGlkeDsKKworCXN3aXRjaCAodmFyaWFibGUpIHsKKwljYXNlIEhXX1ZBUl9FVEhFUl9BRERSOnsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBFVEhfQUxFTjsgaWR4KyspIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIChSRUdfTUFDSUQgKyBpZHgpLCB2YWxbaWR4XSk7CisJCX0KKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9CQVNJQ19SQVRFOnsKKwkJdTE2IGJfcmF0ZV9jZmcgPSAoKHUxNiAqKSB2YWwpWzBdOworCQliX3JhdGVfY2ZnID0gYl9yYXRlX2NmZyAmIDB4MTVmOworCQliX3JhdGVfY2ZnIHw9IDB4MDE7CisJCWJfcmF0ZV9jZmcgPSAoYl9yYXRlX2NmZyB8IDB4ZCkgJiAofkJJVCgxKSk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SUlNSLCBiX3JhdGVfY2ZnICYgMHhmZik7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SUlNSICsgMSwgKGJfcmF0ZV9jZmcgPj4gOCkgJiAweGZmKTsKKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9CU1NJRDoKKwkJZm9yIChpZHggPSAwOyBpZHggPCBFVEhfQUxFTjsgaWR4KyspIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIChSRUdfQlNTSUQgKyBpZHgpLCB2YWxbaWR4XSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfU0lGUzoKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NJRlNfQ1RYICsgMSwgdmFsWzBdKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NJRlNfVFJYICsgMSwgdmFsWzFdKTsKKworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1BFQ19TSUZTICsgMSwgdmFsWzBdKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01BQ19TUEVDX1NJRlMgKyAxLCB2YWxbMF0pOworCisJCWlmICghbWFjLT5odF9lbmFibGUpCisJCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUkVTUF9TSUZTX09GRE0sIDB4MGUwZSk7CisJCWVsc2UKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19SRVNQX1NJRlNfT0ZETSwKKwkJCQkgICAgICAgKigodTE2ICopIHZhbCkpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9TTE9UX1RJTUU6eworCQl1OCBlX2FjaTsKKworCQlSVF9UUkFDRShDT01QX01MTUUsIERCR19UUkFDRSwKKwkJCSAoIkhXX1ZBUl9TTE9UX1RJTUUgJXhcbiIsIHZhbFswXSkpOworCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TTE9ULCB2YWxbMF0pOworCisJCWZvciAoZV9hY2kgPSAwOyBlX2FjaSA8IEFDX01BWDsgZV9hY2krKykgeworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9BQ19QQVJBTSwKKwkJCQkJCSAgICAgICh1OCAqKSAoJmVfYWNpKSk7CisJCX0KKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9BQ0tfUFJFQU1CTEU6eworCQl1OCByZWdfdG1wOworCQl1OCBzaG9ydF9wcmVhbWJsZSA9IChib29sKSAoKih1OCAqKSB2YWwpOworCQlyZWdfdG1wID0gKHJ0bHByaXYtPm1hYzgwMjExLmN1cl80MF9wcmltZV9zYykgPDwgNTsKKwkJaWYgKHNob3J0X3ByZWFtYmxlKQorCQkJcmVnX3RtcCB8PSAweDgwOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlJTUiArIDIsIHJlZ190bXApOworCQlydGxwcml2LT5tYWM4MDIxMS5zaG9ydF9wcmVhbWJsZSA9IHNob3J0X3ByZWFtYmxlOworCQlicmVhazsgfQorCWNhc2UgSFdfVkFSX1dQQV9DT05GSUc6CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TRUNDRkcsICooKHU4ICopIHZhbCkpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9BTVBEVV9GQUNUT1I6eworCQl1OCByZWd0b3NldF9ub3JtYWxbNF0gPSB7IDB4NDEsIDB4YTgsIDB4NzIsIDB4YjkgfTsKKwkJdTggZmFjOworCQl1OCAqcmVnID0gTlVMTDsKKwkJdTggaSA9IDA7CisKKwkJcmVnID0gcmVndG9zZXRfbm9ybWFsOworCisJCWZhYyA9ICooKHU4ICopIHZhbCk7CisJCWlmIChmYWMgPD0gMykgeworCQkJZmFjID0gKDEgPDwgKGZhYyArIDIpKTsKKwkJCWlmIChmYWMgPiAweGYpCisJCQkJZmFjID0gMHhmOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQlpZiAoKHJlZ1tpXSAmIDB4ZjApID4gKGZhYyA8PCA0KSkKKwkJCQkJcmVnW2ldID0gKHJlZ1tpXSAmIDB4MGYpIHwgKGZhYyA8PCA0KTsKKwkJCQlpZiAoKHJlZ1tpXSAmIDB4MGYpID4gZmFjKQorCQkJCQlyZWdbaV0gPSAocmVnW2ldICYgMHhmMCkgfCBmYWM7CisJCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCisJCQkJCQkgICAgICAgKFJFR19BR0dMRU5fTE1UICsgaSksCisJCQkJCQkgICAgICAgcmVnW2ldKTsKKwkJCQl9CisJCQkJUlRfVFJBQ0UoQ09NUF9NTE1FLCBEQkdfTE9VRCwKKwkJCQkJKCJTZXQgSFdfVkFSX0FNUERVX0ZBQ1RPUjolI3hcbiIsIGZhYykpOworCQl9CisJCWJyZWFrOyB9CisJY2FzZSBIV19WQVJfQUNfUEFSQU06eworCQl1OCBlX2FjaSA9ICooKHU4ICopIHZhbCk7CisKKwkJaWYgKHJ0bHBjaS0+YWNtX21ldGhvZCAhPSBlQWNtV2F5Ml9TVykKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQUNNX0NUUkwsCisJCQkJCQkgICAgICAodTggKikgKCZlX2FjaSkpOworCQlicmVhazsgfQorCWNhc2UgSFdfVkFSX0FDTV9DVFJMOnsKKwkJdTggZV9hY2kgPSAqKCh1OCAqKSB2YWwpOworCQl1bmlvbiBhY2lfYWlmc24gKmFpZnMgPSAodW5pb24gYWNpX2FpZnNuICopKCYobWFjLT5hY1swXS5haWZzKSk7CisKKwkJdTggYWNtID0gYWlmcy0+Zi5hY207CisJCXU4IGFjbV9jdHJsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQUNNSFdDVFJMKTsKKworCQlhY21fY3RybCA9IGFjbV9jdHJsIHwgKChydGxwY2ktPmFjbV9tZXRob2QgPT0gMikgPyAweDAgOiAweDEpOworCisJCWlmIChhY20pIHsKKwkJCXN3aXRjaCAoZV9hY2kpIHsKKwkJCWNhc2UgQUMwX0JFOgorCQkJCWFjbV9jdHJsIHw9IEFjbUh3X0JlcUVuOworCQkJCWJyZWFrOworCQkJY2FzZSBBQzJfVkk6CisJCQkJYWNtX2N0cmwgfD0gQWNtSHdfVmlxRW47CisJCQkJYnJlYWs7CisJCQljYXNlIEFDM19WTzoKKwkJCQlhY21fY3RybCB8PSBBY21Id19Wb3FFbjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkgKCJIV19WQVJfQUNNX0NUUkwgYWNtIHNldCAiCisJCQkJCSAgImZhaWxlZDogZUFDSSBpcyAlZFxuIiwgYWNtKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGVfYWNpKSB7CisJCQljYXNlIEFDMF9CRToKKwkJCQlhY21fY3RybCAmPSAofkFjbUh3X0JlcUVuKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUMyX1ZJOgorCQkJCWFjbV9jdHJsICY9ICh+QWNtSHdfVmlxRW4pOworCQkJCWJyZWFrOworCQkJY2FzZSBBQzNfVk86CisJCQkJYWNtX2N0cmwgJj0gKH5BY21Id19CZXFFbik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfTE9VRCwKKwkJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3MgXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlSVF9UUkFDRShDT01QX1FPUywgREJHX1RSQUNFLAorCQkJICgiU2V0SHdSZWc4MTkwcGNpKCk6IFtIV19WQVJfQUNNX0NUUkxdIFdyaXRlIDB4JVhcbiIsCisJCQkgIGFjbV9jdHJsKSk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BQ01IV0NUUkwsIGFjbV9jdHJsKTsKKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9SQ1I6eworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JDUiwgKCh1MzIgKikgKHZhbCkpWzBdKTsKKwkJcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9ICgodTMyICopICh2YWwpKVswXTsKKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9SRVRSWV9MSU1JVDp7CisJCXU4IHJldHJ5X2xpbWl0ID0gKCh1OCAqKSAodmFsKSlbMF07CisKKwkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1JFVFJZX0xJTUlULAorCQkJICAgICAgIHJldHJ5X2xpbWl0IDw8IFJFVFJZX0xJTUlUX1NIT1JUX1NISUZUIHwKKwkJCSAgICAgICByZXRyeV9saW1pdCA8PCBSRVRSWV9MSU1JVF9MT05HX1NISUZUKTsKKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9EVUFMX1RTRl9SU1Q6CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19EVUFMX1RTRl9SU1QsIChCSVQoMCkgfCBCSVQoMSkpKTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfRUZVU0VfQllURVM6CisJCWVmdXNlLT5lZnVzZV91c2VkYnl0ZXMgPSAqKCh1MTYgKikgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfRUZVU0VfVVNBR0U6CisJCWVmdXNlLT5lZnVzZV91c2VkcGVyY2VudGFnZSA9ICooKHU4ICopIHZhbCk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX0lPX0NNRDoKKwkJcnRsOTJlZV9waHlfc2V0X2lvX2NtZChodywgKCooZW51bSBpb190eXBlICopdmFsKSk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX1NFVF9SUFdNOnsKKwkJdTggcnB3bV92YWw7CisKKwkJcnB3bV92YWwgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0hSUFdNKTsKKwkJdWRlbGF5KDEpOworCisJCWlmIChycHdtX3ZhbCAmIEJJVCg3KSkgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1BDSUVfSFJQV00sICgqKHU4ICopIHZhbCkpOworCQl9IGVsc2UgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1BDSUVfSFJQV00sCisJCQkJICAgICAgICgoKih1OCAqKSB2YWwpIHwgQklUKDcpKSk7CisJCX0KKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9IMkNfRldfUFdSTU9ERToKKwkJcnRsOTJlZV9zZXRfZndfcHdybW9kZV9jbWQoaHcsICgqKHU4ICopIHZhbCkpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9GV19QU01PREVfU1RBVFVTOgorCQlwcHNjLT5iX2Z3X2N1cnJlbnRfaW5wc21vZGUgPSAqKChib29sICopIHZhbCk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX1JFU1VNRV9DTEtfT046CisJCV9ydGw5MmVlX3NldF9md19wc19yZl9vbihodyk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX0ZXX0xQU19BQ1RJT046eworCQlib29sIGJfZW50ZXJfZndscHMgPSAqKChib29sICopIHZhbCk7CisKKwkJaWYgKGJfZW50ZXJfZndscHMpCisJCQlfcnRsOTJlZV9md2xwc19lbnRlcihodyk7CisJCWVsc2UKKwkJCV9ydGw5MmVlX2Z3bHBzX2xlYXZlKGh3KTsKKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9IMkNfRldfSk9JTkJTU1JQVDp7CisJCXU4IG1zdGF0dXMgPSAoKih1OCAqKSB2YWwpOworCisJCWlmIChtc3RhdHVzID09IFJUX01FRElBX0NPTk5FQ1QpIHsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQUlELCBOVUxMKTsKKwkJCV9ydGw5MmVlX2Rvd25sb2FkX3JzdmRfcGFnZShodyk7CisJCX0KKwkJcnRsOTJlZV9zZXRfZndfbWVkaWFfc3RhdHVzX3JwdF9jbWQoaHcsIG1zdGF0dXMpOworCQlicmVhazsgfQorCWNhc2UgSFdfVkFSX0gyQ19GV19QMlBfUFNfT0ZGTE9BRDoKKwkJcnRsOTJlZV9zZXRfcDJwX3BzX29mZmxvYWRfY21kKGh3ICwgKCoodTggKikgdmFsKSk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX0FJRDp7CisJCXUxNiB1MmJ0bXA7CisJCXUyYnRtcCA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX0JDTl9QU1JfUlBUKTsKKwkJdTJidG1wICY9IDB4QzAwMDsKKwkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0JDTl9QU1JfUlBULAorCQkJICAgICAgICh1MmJ0bXAgfCBtYWMtPmFzc29jX2lkKSk7CisJCWJyZWFrOyB9CisJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6eworCQl1OCBidHlwZV9pYnNzID0gKCh1OCAqKSAodmFsKSlbMF07CisKKwkJaWYgKGJ0eXBlX2lic3MgPT0gdHJ1ZSkKKwkJCV9ydGw5MmVlX3N0b3BfdHhfYmVhY29uKGh3KTsKKworCQlfcnRsOTJlZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCAwLCBCSVQoMykpOworCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVFNGVFIsCisJCQkJKHUzMikgKG1hYy0+dHNmICYgMHhmZmZmZmZmZikpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1RTRlRSICsgNCwKKwkJCQkodTMyKSAoKG1hYy0+dHNmID4+IDMyKSAmIDB4ZmZmZmZmZmYpKTsKKworCQlfcnRsOTJlZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCBCSVQoMyksIDApOworCisJCWlmIChidHlwZV9pYnNzID09IHRydWUpCisJCQlfcnRsOTJlZV9yZXN1bWVfdHhfYmVhY29uKGh3KTsKKwkJYnJlYWs7IH0KKwljYXNlIEhXX1ZBUl9LRUVQX0FMSVZFOiB7CisJCXU4IGFycmF5WzJdOworCQlhcnJheVswXSA9IDB4ZmY7CisJCWFycmF5WzFdID0gKigodTggKil2YWwpOworCQlydGw5MmVlX2ZpbGxfaDJjX2NtZChodywgSDJDXzkyRV9LRUVQX0FMSVZFX0NUUkwsIDIsIGFycmF5KTsKKwkJYnJlYWs7IH0KKwlkZWZhdWx0OgorCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0xPVUQsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2VzcyAleFxuIiwgdmFyaWFibGUpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgYm9vbCBfcnRsOTJlZV9sbHRfdGFibGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdHhwa3RidWZfYm5keTsKKwl1OCB1OHRtcCwgdGVzdGNudCA9IDA7CisKKwl0eHBrdGJ1Zl9ibmR5ID0gMHhGQTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUlFQTiwgMHg4MEU5MDgwOCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFJYRkZfQk5EWSwgdHhwa3RidWZfYm5keSk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1RSWEZGX0JORFkgKyAyLCAweDNkMDAgLSAxKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19EV0JDTjBfQ1RSTCArIDEsIHR4cGt0YnVmX2JuZHkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19EV0JDTjFfQ1RSTCArIDEsIHR4cGt0YnVmX2JuZHkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JDTlFfQkROWSwgdHhwa3RidWZfYm5keSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JDTlExX0JETlksIHR4cGt0YnVmX2JuZHkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01HUV9CRE5ZLCB0eHBrdGJ1Zl9ibmR5KTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDQ1RCwgdHhwa3RidWZfYm5keSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUEJQLCAweDMxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlhfRFJWSU5GT19TWiwgMHg0KTsKKworCXU4dG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQVVUT19MTFQgKyAyKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVVUT19MTFQgKyAyLCB1OHRtcCB8IEJJVCgwKSk7CisKKwl3aGlsZSAodTh0bXAgJiBCSVQoMCkpIHsKKwkJdTh0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19BVVRPX0xMVCArIDIpOworCQl1ZGVsYXkoMTApOworCQl0ZXN0Y250Kys7CisJCWlmICh0ZXN0Y250ID4gMTApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZ2VuX3JlZnJlc2hfbGVkX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfbGVkICpwTGVkMCA9ICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApOworCisJaWYgKHJ0bHByaXYtPnJ0bGhhbC51cF9maXJzdF90aW1lKQorCQlyZXR1cm47CisKKwlpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpCisJCXJ0bDkyZWVfc3dfbGVkX29uKGh3LCBwTGVkMCk7CisJZWxzZSBpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JTklUKQorCQlydGw5MmVlX3N3X2xlZF9vbihodywgcExlZDApOworCWVsc2UKKwkJcnRsOTJlZV9zd19sZWRfb2ZmKGh3LCBwTGVkMCk7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmVlX2luaXRfbWFjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwl1OCBieXRldG1wOworCXUxNiB3b3JkdG1wOworCXUzMiBkd29yZHRtcDsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCwgMHgwKTsKKworCWR3b3JkdG1wID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX1NZU19DRkcxKTsKKwlpZiAoZHdvcmR0bXAgJiBCSVQoMjQpKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4N2MsIDB4YzMpOworCX0gZWxzZSB7CisJCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIDB4MTYpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDE2LCBieXRldG1wIHwgQklUKDQpIHwgQklUKDYpKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg3YywgMHg4Myk7CisJfQorCS8qIDEuIDQwTWh6IGNyeXN0YWwgc291cmNlKi8KKwlieXRldG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQUZFX0NUUkwyKTsKKwlieXRldG1wICY9IDB4ZmI7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9DVFJMMiwgYnl0ZXRtcCk7CisKKwlkd29yZHRtcCA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfQ1RSTDQpOworCWR3b3JkdG1wICY9IDB4ZmZmZmZjN2Y7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfQ1RSTDQsIGR3b3JkdG1wKTsKKworCS8qIDIuIDkyRSBBRkUgcGFyYW1ldGVyCisJICAqTVAgY2hpcCB0aGVuIGNoZWNrIHZlcnNpb24gKi8KKwlieXRldG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQUZFX0NUUkwyKTsKKwlieXRldG1wICY9IDB4YmY7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9DVFJMMiwgYnl0ZXRtcCk7CisKKwlkd29yZHRtcCA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfQ1RSTDQpOworCWR3b3JkdG1wICY9IDB4ZmZkZmZmZmY7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfQ1RSTDQsIGR3b3JkdG1wKTsKKworCS8qIEhXIFBvd2VyIG9uIHNlcXVlbmNlICovCisJaWYgKCFydGw5MmVfaGFsX3B3cnNlcWNtZHBhcnNpbmcocnRscHJpdiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssCisJCVBXUl9JTlRGX1BDSV9NU0ssIFJ0bDgxOTJFX05JQ19FTkFCTEVfRkxPVykpIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSAoImluaXQgTUFDIEZhaWwgYXMgcnRsOTJlX2hhbF9wd3JzZXFjbWRwYXJzaW5nXG4iKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBSZWxlYXNlIE1BQyBJTyByZWdpc3RlciByZXNldCAqLworCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19DUik7CisJYnl0ZXRtcCA9IDB4ZmY7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0NSLCBieXRldG1wKTsKKwltZGVsYXkoMik7CisJYnl0ZXRtcCA9IDB4N2Y7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0hXU0VRX0NUUkwsIGJ5dGV0bXApOworCW1kZWxheSgyKTsKKworCS8qIEFkZCBmb3Igd2FrZXVwIG9ubGluZSAqLworCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfQ0xLUik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19DTEtSLCBieXRldG1wIHwgQklUKDMpKTsKKwlieXRldG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfR1BJT19NVVhDRkcgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfR1BJT19NVVhDRkcgKyAxLCBieXRldG1wICYgKH5CSVQoNCkpKTsKKwkvKiBSZWxlYXNlIE1BQyBJTyByZWdpc3RlciByZXNldCAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19DUiwgMHgyZmYpOworCisJaWYgKCFydGxoYWwtPmJfbWFjX2Z1bmNfZW5hYmxlKSB7CisJCWlmIChfcnRsOTJlZV9sbHRfdGFibGVfaW5pdChodykgPT0gZmFsc2UpIHsKKwkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJICgiTExUIHRhYmxlIGluaXQgZmFpbCBcbiIpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSElTUiwgMHhmZmZmZmZmZik7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19ISVNSRSwgMHhmZmZmZmZmZik7CisKKwl3b3JkdG1wID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfVFJYRE1BX0NUUkwpOworCXdvcmR0bXAgJj0gMHhmOworCXdvcmR0bXAgfD0gMHhGNUIxOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19UUlhETUFfQ1RSTCwgd29yZHRtcCk7CisJLyogUmVwb3J0ZWQgVHggc3RhdHVzIGZyb20gSFcgZm9yIHJhdGUgYWRhcHRpdmUuKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfRldIV19UWFFfQ1RSTCArIDEsIDB4MUYpOworCisJLyogU2V0IFJDUiByZWdpc3RlciAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUkNSLCBydGxwY2ktPnJlY2VpdmVfY29uZmlnKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAyLCAweGZmZmYpOworCisJLyogU2V0IFRDUiByZWdpc3RlciAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVENSLCBydGxwY2ktPnRyYW5zbWl0X2NvbmZpZyk7CisKKwkvKiBTZXQgVFgvUlggZGVzY3JpcHRvciBwaHlzaWNhbCBhZGRyZXNzKGZyb20gT1MgQVBJKS4gKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JDTlFfREVTQSwKKwkJCSgodTY0KSBydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXS5idWZmZXJfZGVzY19kbWEpICYKKwkJCURNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfTUdRX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbTUdOVF9RVUVVRV0uYnVmZmVyX2Rlc2NfZG1hICYKKwkJCURNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVk9RX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbVk9fUVVFVUVdLmJ1ZmZlcl9kZXNjX2RtYSAmCisJCQlETUFfQklUX01BU0soMzIpKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1ZJUV9ERVNBLAorCQkJKHU2NCkgcnRscGNpLT50eF9yaW5nW1ZJX1FVRVVFXS5idWZmZXJfZGVzY19kbWEgJgorCQkJRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JFUV9ERVNBLAorCQkJKHU2NCkgcnRscGNpLT50eF9yaW5nW0JFX1FVRVVFXS5idWZmZXJfZGVzY19kbWEgJgorCQkJRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlkd29yZHRtcCA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19CRVFfREVTQSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JLUV9ERVNBLAorCQkJKHU2NCkgcnRscGNpLT50eF9yaW5nW0JLX1FVRVVFXS5idWZmZXJfZGVzY19kbWEgJgorCQkJRE1BX0JJVF9NQVNLKDMyKSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19IUTBfREVTQSwKKwkJCSh1NjQpIHJ0bHBjaS0+dHhfcmluZ1tISUdIX1FVRVVFXS5idWZmZXJfZGVzY19kbWEgJgorCQkJRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JYX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnJ4X3JpbmdbUlhfTVBEVV9RVUVVRV0uZG1hICYKKwkJCURNQV9CSVRfTUFTSygzMikpOworCisJLyogaWYgd2Ugd2FudCB0byBzdXBwb3J0IDY0IGJpdCBETUEsIHdlIHNob3VsZCBzZXQgaXQgaGVyZSwKKwkgKiBidXQgbm93IHdlIGRvIG5vdCBzdXBwb3J0IDY0IGJpdCBETUEqLworCisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1RTRlRJTUVSX0hDSSwgMHgzZmZmZmZmZik7CisKKwlieXRldG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUENJRV9DVFJMX1JFRyArIDMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0NUUkxfUkVHICsgMywgYnl0ZXRtcCB8IDB4RjcpOworCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19JTlRfTUlHLCAwKTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfTUNVVFNUXzEsIDB4MCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTUdRX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfVk9RX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfVklRX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkVRX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfVk9RX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQktRX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfSEkwUV9UWEJEX05VTSwKKwkJICAgICAgIFRYX0RFU0NfTlVNXzkyRSB8ICgoUlRMODE5MkVFX1NFR19OVU0gPDwgMTIpICYgMHgzMDAwKSk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0hJMVFfVFhCRF9OVU0sCisJCSAgICAgICBUWF9ERVNDX05VTV85MkUgfCAoKFJUTDgxOTJFRV9TRUdfTlVNIDw8IDEyKSAmIDB4MzAwMCkpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19ISTJRX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfSEkzUV9UWEJEX05VTSwKKwkJICAgICAgIFRYX0RFU0NfTlVNXzkyRSB8ICgoUlRMODE5MkVFX1NFR19OVU0gPDwgMTIpICYgMHgzMDAwKSk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0hJNFFfVFhCRF9OVU0sCisJCSAgICAgICBUWF9ERVNDX05VTV85MkUgfCAoKFJUTDgxOTJFRV9TRUdfTlVNIDw8IDEyKSAmIDB4MzAwMCkpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19ISTVRX1RYQkRfTlVNLAorCQkgICAgICAgVFhfREVTQ19OVU1fOTJFIHwgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMikgJiAweDMwMDApKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfSEk2UV9UWEJEX05VTSwKKwkJICAgICAgIFRYX0RFU0NfTlVNXzkyRSB8ICgoUlRMODE5MkVFX1NFR19OVU0gPDwgMTIpICYgMHgzMDAwKSk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0hJN1FfVFhCRF9OVU0sCisJCSAgICAgICBUWF9ERVNDX05VTV85MkUgfCAoKFJUTDgxOTJFRV9TRUdfTlVNIDw8IDEyKSAmIDB4MzAwMCkpOworCS8qUngqLworI2lmIChETUFfSVNfNjRCSVQgPT0gMSkKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUlhfUlhCRF9OVU0sCisJCSAgICAgICBSWF9ERVNDX05VTV85MkUgfAorCQkgICAgICAgKChSVEw4MTkyRUVfU0VHX05VTSA8PCAxMykgJiAweDYwMDApIHwgMHg4MDAwKTsKKyNlbHNlCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1JYX1JYQkRfTlVNLAorCQkgICAgICAgUlhfREVTQ19OVU1fOTJFIHwKKwkJICAgICAgICgoUlRMODE5MkVFX1NFR19OVU0gPDwgMTMpICYgMHg2MDAwKSB8IDB4MDAwMCk7CisjZW5kaWYKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVFNGVElNRVJfSENJLCAwWEZGRkZGRkZGKTsKKworCV9ydGw5MmVlX2dlbl9yZWZyZXNoX2xlZF9zdGF0ZShodyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX2h3X2NvbmZpZ3VyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1MzIgcmVnX3Jyc3I7CisKKwlyZWdfcnJzciA9IFJBVEVfQUxMX0NDSyB8IFJBVEVfQUxMX09GRE1fQUc7CisJLyogSW5pdCB2YWx1ZSBmb3IgUlJTUi4gKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JSU1IsIHJlZ19ycnNyKTsKKworCS8qIEFSRkIgdGFibGUgOSBmb3IgMTFhYyA1RyAyU1MgKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0FSRlIwLCAweDAwMDAwMDEwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0FSRlIwICsgNCwgMHgzZTBmZjAwMCk7CisKKwkvKiBBUkZCIHRhYmxlIDEwIGZvciAxMWFjIDVHIDFTUyAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQVJGUjEsIDB4MDAwMDAwMTApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQVJGUjEgKyA0LCAweDAwMGZmMDAwKTsKKworCS8qIFNldCBTTE9UIHRpbWUgKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU0xPVCwgMHgwOSk7CisKKwkvKiBDRi1FbmQgc2V0dGluZy4gKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfRldIV19UWFFfQ1RSTCwgMHgxRjgwKTsKKworCS8qIFNldCByZXRyeSBsaW1pdCAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19SRVRSWV9MSU1JVCwgMHgwNzA3KTsKKworCS8qIEJBUiBzZXR0aW5ncyAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQkFSX01PREVfQ1RSTCwgMHgwMjAxZmZmZik7CisKKwkvKiBTZXQgRGF0YSAvIFJlc3BvbnNlIGF1dG8gcmF0ZSBmYWxsYWNrIHJldHJ5IGNvdW50ICovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMsIDB4MDEwMDAwMDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwgMHgwNzA2MDUwNCk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19SQVJGUkMsIDB4MDEwMDAwMDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUkFSRlJDICsgNCwgMHgwNzA2MDUwNCk7CisKKwkvKiBCZWFjb24gcmVsYXRlZCwgZm9yIHJhdGUgYWRhcHRpdmUgKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVRJTVdORCwgMHgyKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOX01BWF9FUlIsIDB4ZmYpOworCisJcnRscGNpLT5yZWdfYmNuX2N0cmxfdmFsID0gMHgxZDsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOX0NUUkwsIHJ0bHBjaS0+cmVnX2Jjbl9jdHJsX3ZhbCk7CisKKwkvKiBNYXJrZWQgb3V0IGJ5IEJydWNlLCAyMDEwLTA5LTA5LgorCSAqIFRoaXMgcmVnaXN0ZXIgaXMgY29uZmlndXJlZCBmb3IgdGhlIDJuZCBCZWFjb24gKG11bHRpcGxlIEJTU0lEKS4KKwkgKiBXZSBzaGFsbCBkaXNhYmxlIHRoaXMgcmVnaXN0ZXIgaWYgd2Ugb25seSBzdXBwb3J0IDEgQlNTSUQuCisJICogdml2aSBndWVzcyA5MmQgYWxzbyBuZWVkIHRoaXMsIGFsc28gOTJkIG5vdyBkb2Vzbm90IHNldCB0aGlzIHJlZworCSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CQ05fQ1RSTF8xLCAwKTsKKworCS8qIFRCVFQgcHJvaGliaXQgaG9sZCB0aW1lLiBTdWdnZXN0ZWQgYnkgZGVzaWduZXIgVGltQ2hlbi4gKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDEgLCAweGZmKTsgLyogOCBtcyAqLworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1BJRlMsIDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BR0dSX0JSRUFLX1RJTUUsIDB4MTYpOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX05BVl9QUk9UX0xFTiwgMHgwMDQwKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUFJPVF9NT0RFX0NUUkwsIDB4MDhmZik7CisKKwkvKiBGb3IgUnggVFAuIFN1Z2dlc3RlZCBieSBTRDEgUmljaGFyZC4gQWRkZWQgYnkgdHlubGkuIDIwMTAuMDQuMTIuKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0ZBU1RfRURDQV9DVFJMLCAweDAzMDg2NjY2KTsKKworCS8qIEFDS1RPIGZvciBJT1QgaXNzdWUuICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FDS1RPLCAweDQwKTsKKworCS8qIFNldCBTcGVjIFNJRlMgKHVzZWQgaW4gTkFWKSAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TUEVDX1NJRlMsIDB4MTAwYSk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX01BQ19TUEVDX1NJRlMsIDB4MTAwYSk7CisKKwkvKiBTZXQgU0lGUyBmb3IgQ0NLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1NJRlNfQ1RYLCAweDEwMGEpOworCisJLyogU2V0IFNJRlMgZm9yIE9GRE0gKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU0lGU19UUlgsIDB4MTAwYSk7CisKKwkvKiBOb3RlIERhdGEgc2hlZXQgZG9uJ3QgZGVmaW5lICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg0QzcsIDB4ODApOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JYX1BLVF9MSU1JVCwgMHgyMCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTUFYX0FHR1JfTlVNLCAweDE3MTcpOworCisJLyogU2V0IE11bHRpY2FzdCBBZGRyZXNzLiAyMDA5LjAxLjA3LiBieSB0eW5saS4gKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX01BUiwgMHhmZmZmZmZmZik7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19NQVIgKyA0LCAweGZmZmZmZmZmKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfZW5hYmxlX2FzcG1fYmFja19kb29yKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwl1MzIgdG1wMzIgPSAwLCBjb3VudCA9IDA7CisJdTggdG1wOCA9IDA7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX0RBVEEsIDB4NzgpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDIsIDB4Mik7CisJdG1wOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMik7CisJY291bnQgPSAwOworCXdoaWxlICh0bXA4ICYmIGNvdW50IDwgMjApIHsKKwkJdWRlbGF5KDEwKTsKKwkJdG1wOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMik7CisJCWNvdW50Kys7CisJfQorCisJaWYgKDAgPT0gdG1wOCkgeworCQl0bXAzMiA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfUkRBVEEpOworCQlpZiAoKHRtcDMyICYgMHhmZjAwKSAhPSAweDIwMDApIHsKKwkJCXRtcDMyICY9IDB4ZmZmZjAwZmY7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9XREFUQSwKKwkJCQkJdG1wMzIgfCBCSVQoMTMpKTsKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSwgMHhmMDc4KTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDIsIDB4MSk7CisKKwkJCXRtcDggPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYgLCBSRUdfQkFDS0RPT1JfREJJX0RBVEEgKyAyKTsKKwkJCWNvdW50ID0gMDsKKwkJCXdoaWxlICh0bXA4ICYmIGNvdW50IDwgMjApIHsKKwkJCQl1ZGVsYXkoMTApOworCQkJCXRtcDggPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCQkgICAgIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDIpOworCQkJCWNvdW50Kys7CisJCQl9CisJCX0KKwl9CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX0RBVEEsIDB4NzBjKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX0RBVEEgKyAyLCAweDIpOworCXRtcDggPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDIpOworCWNvdW50ID0gMDsKKwl3aGlsZSAodG1wOCAmJiBjb3VudCA8IDIwKSB7CisJCXVkZWxheSgxMCk7CisJCXRtcDggPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDIpOworCQljb3VudCsrOworCX0KKwlpZiAoMCA9PSB0bXA4KSB7CisJCXRtcDMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9SREFUQSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX1dEQVRBLAorCQkJCXRtcDMyIHwgQklUKDMxKSk7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSwgMHhmNzBjKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMiwgMHgxKTsKKwl9CisKKwl0bXA4ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX0RBVEEgKyAyKTsKKwljb3VudCA9IDA7CisJd2hpbGUgKHRtcDggJiYgY291bnQgPCAyMCkgeworCQl1ZGVsYXkoMTApOworCQl0bXA4ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX0RBVEEgKyAyKTsKKwkJY291bnQrKzsKKwl9CisKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSwgMHg3MTgpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDIsIDB4Mik7CisJdG1wOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMik7CisJY291bnQgPSAwOworCXdoaWxlICh0bXA4ICYmIGNvdW50IDwgMjApIHsKKwkJdWRlbGF5KDEwKTsKKwkJdG1wOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMik7CisJCWNvdW50Kys7CisJfQorCWlmIChwcHNjLT5iX3N1cHBvcnRfYmFja2Rvb3IgfHwgKDAgPT0gdG1wOCkpIHsKKwkJdG1wMzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX1JEQVRBKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfV0RBVEEsCisJCQkJdG1wMzIgfCBCSVQoMTEpIHwgQklUKDEyKSk7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSwgMHhmNzE4KTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMiwgMHgxKTsKKwl9CisJdG1wOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMik7CisJY291bnQgPSAwOworCXdoaWxlICh0bXA4ICYmIGNvdW50IDwgMjApIHsKKwkJdWRlbGF5KDEwKTsKKwkJdG1wOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMik7CisJCWNvdW50Kys7CisJfQorfQorCit2b2lkIHJ0bDkyZWVfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggc2VjX3JlZ192YWx1ZTsKKwl1OCB0bXA7CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywKKwkJICgiUGFpcndpc2VFbmNBbGdvcml0aG0gPSAlZCBHcm91cEVuY0FsZ29yaXRobSA9ICVkXG4iLAorCQkgIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtLAorCQkgIHJ0bHByaXYtPnNlYy5ncm91cF9lbmNfYWxnb3JpdGhtKSk7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8gfHwgcnRscHJpdi0+c2VjLnVzZV9zd19zZWMpIHsKKwkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywgKCJub3Qgb3BlbiBodyBlbmNyeXB0aW9uXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlzZWNfcmVnX3ZhbHVlID0gU0NSX1R4RW5jRW5hYmxlIHwgU0NSX1J4RGVjRW5hYmxlOworCisJaWYgKHJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSkgeworCQlzZWNfcmVnX3ZhbHVlIHw9IFNDUl9UeFVzZURLOworCQlzZWNfcmVnX3ZhbHVlIHw9IFNDUl9SeFVzZURLOworCX0KKworCXNlY19yZWdfdmFsdWUgfD0gKFNDUl9SWEJDVVNFREsgfCBTQ1JfVFhCQ1VTRURLKTsKKworCXRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0NSICsgMSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0NSICsgMSwgdG1wIHwgQklUKDEpKTsKKworCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCisJCSAoIlRoZSBTRUNSLXZhbHVlICV4IFxuIiwgc2VjX3JlZ192YWx1ZSkpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9XUEFfQ09ORklHLCAmc2VjX3JlZ192YWx1ZSk7CisKK30KKworaW50IHJ0bDkyZWVfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBydHN0YXR1cyA9IHRydWU7CisJaW50IGVyciA9IDA7CisJdTggdG1wX3UxYiAsIHUxYnl0ZTsKKwl1MzIgdG1wX3U0YjsKKworCVJUX1RSQUNFKENPTVBfSU5JVCAsIERCR19MT1VEICwgKCIgUnRsODE5MkVFIGh3IGluaXRcbiIpKTsKKwlydGxwcml2LT5ydGxoYWwuYmVpbmdfaW5pdF9hZGFwdGVyID0gdHJ1ZTsKKwlydGxwcml2LT5pbnRmX29wcy0+ZGlzYWJsZV9hc3BtKGh3KTsKKworCXRtcF91MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfQ0xLUisxKTsKKwl1MWJ5dGUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19DUik7CisJaWYgKCh0bXBfdTFiICYgQklUKDMpKSAmJiAodTFieXRlICE9IDAgJiYgdTFieXRlICE9IDB4RUEpKSB7CisJCXJ0bGhhbC0+Yl9tYWNfZnVuY19lbmFibGUgPSB0cnVlOworCX0gZWxzZSB7CisJCXJ0bGhhbC0+Yl9tYWNfZnVuY19lbmFibGUgPSBmYWxzZTsKKwkJcnRsaGFsLT5md19wc19zdGF0ZSA9IEZXX1BTX1NUQVRFX0FMTF9PTl85MkU7CisJfQorCisJcnRzdGF0dXMgPSBfcnRsOTJlZV9pbml0X21hYyhodyk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDU3NywgMHgwMyk7CisKKwkvKmZvciBDcnlzdGFsIDQwIE1oeiBzZXR0aW5nICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9DVFJMNCwgMHgyQSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9DVFJMNCArIDEsIDB4MDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfQ1RSTDIsIDB4ODMpOworCisJLypGb3JjZWQgdGhlIGFudGVubmEgYiB0byB3aWZpICovCisJaWYgKHJ0bHByaXYtPmJ0Y29leGlzdC5idGNfaW5mby5idGNvZXhpc3QgPT0gMSkgeworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDY0LCAwKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg2NSwgMSk7CisJfQorCWlmIChydHN0YXR1cyAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgiSW5pdCBNQUMgZmFpbGVkXG4iKSk7CisJCWVyciA9IDE7CisJCXJldHVybiBlcnI7CisJfQorCXJ0bGhhbC0+cnhfdGFnID0gMDsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUENJRV9DVFJMX1JFRywgMHg4MDAwKTsKKwllcnIgPSBydGw5MmVlX2Rvd25sb2FkX2Z3KGh3ICwgZmFsc2UpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiRmFpbGVkIHRvIGRvd25sb2FkIEZXLiBJbml0IEhXIHdpdGhvdXQgRlcgbm93Li5cbiIpKTsKKwkJZXJyID0gMTsKKwkJcnRsaGFsLT5iZndfcmVhZHkgPSBmYWxzZTsKKwkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQlydGxoYWwtPmJmd19yZWFkeSA9IHRydWU7CisJfQorCS8qZncgcmVsYXRlZCB2YXJpYWJsZSBpbml0aWFsaXplICovCisJcHBzYy0+Yl9md19jdXJyZW50X2lucHNtb2RlID0gZmFsc2U7CisJcnRsaGFsLT5md19wc19zdGF0ZSA9IEZXX1BTX1NUQVRFX0FMTF9PTl85MkU7CisJcnRsaGFsLT5iZndfY2xrX2NoYW5nZV9pbl9wcm9ncmVzcyA9IGZhbHNlOworCXJ0bGhhbC0+YmFsbG93X3N3X3RvX2NoYW5nZV9od2NsYyA9IGZhbHNlOworCXJ0bGhhbC0+bGFzdF9obWVib3hudW0gPSAwOworCisKKwlydGw5MmVlX3BoeV9tYWNfY29uZmlnKGh3KTsKKworCXJ0bDkyZWVfcGh5X2JiX2NvbmZpZyhodyk7CisKKwlydGw5MmVlX3BoeV9yZl9jb25maWcoaHcpOworCisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsCisJCQkJCQkgUkZfQ0hOTEJXLCBSRlJFR19PRkZTRVRfTUFTSyk7CisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzFdID0gcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsCisJCQkJCQkgUkZfQ0hOTEJXLCBSRlJFR19PRkZTRVRfTUFTSyk7CisJcnRscGh5LT5iYWNrdXBfcmZfMHgxYSA9ICh1MzIpIHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9SWF9HMSwKKwkJCQkJCSAgICAgUkZSRUdfT0ZGU0VUX01BU0spOworCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSA9IChydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0gJiAweGZmZmZmM2ZmKSB8CisJCQkJICAgQklUKDEwKSB8IEJJVCgxMSk7CisKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfQ0hOTEJXLCBSRlJFR19PRkZTRVRfTUFTSywKKwkJICAgICAgcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQiwgUkZfQ0hOTEJXLCBSRlJFR19PRkZTRVRfTUFTSywKKwkJICAgICAgcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdKTsKKworCS8qLS0tLSBTZXQgQ0NLIGFuZCBPRkRNIEJsb2NrICJPTiItLS0tKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJDQ0tFTiwgMHgxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJPRkRNRU4sIDB4MSk7CisKKwkvKiBNdXN0IHNldCB0aGlzLAorCSAqIG90aGVyd2lzZSB0aGUgcnggc2Vuc2l0aXZpdHkgd2lsbCBiZSB2ZXJ5IHBvb2wuIE1hZGRlc3QKKwkgKi8KKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHhCMSwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4NTQ0MTgpOworCisJLypTZXQgSGFyZHdhcmUoTUFDIGRlZmF1bHQgc2V0dGluZy4pKi8KKwlfcnRsOTJlZV9od19jb25maWd1cmUoaHcpOworCisJcnRsaGFsLT5iX21hY19mdW5jX2VuYWJsZSA9IHRydWU7CisKKwlzdGdfcnRsX2NhbV9yZXNldF9hbGxfZW50cnkoaHcpOworCXJ0bDkyZWVfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhodyk7CisKKwlwcHNjLT5yZnB3cl9zdGF0ZSA9IEVSRk9OOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9FVEhFUl9BRERSLCBtYWMtPm1hY19hZGRyKTsKKwlfcnRsOTJlZV9lbmFibGVfYXNwbV9iYWNrX2Rvb3IoaHcpOworCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisKKwlydGw5MmVlX2J0X2h3X2luaXQoaHcpOworCisJcnRscHJpdi0+cnRsaGFsLmJlaW5nX2luaXRfYWRhcHRlciA9IGZhbHNlOworCisJaWYgKHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9OKSB7CisJCWlmIChydGxwaHktPmlxa19pbml0aWFsaXplZCkgeworCQkJcnRsOTJlZV9waHlfaXFfY2FsaWJyYXRlKGh3LCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bDkyZWVfcGh5X2lxX2NhbGlicmF0ZShodywgZmFsc2UpOworCQkJcnRscGh5LT5pcWtfaW5pdGlhbGl6ZWQgPSB0cnVlOworCQl9CisJfQorCisJcnRscGh5LT5yZnBhdGhfcnhfZW5hYmxlWzBdID0gdHJ1ZTsKKwlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIpCisJCXJ0bHBoeS0+cmZwYXRoX3J4X2VuYWJsZVsxXSA9IHRydWU7CisKKwlzdGdfZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgMHgxRkEsICZ0bXBfdTFiKTsKKwlpZiAoISh0bXBfdTFiICYgQklUKDApKSkgeworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgxNSwgMHgwRiwgMHgwNSk7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiUEEgQklBUyBwYXRoIEFcbiIpKTsKKwl9CisKKwlpZiAoKCEodG1wX3UxYiAmIEJJVCgxKSkpICYmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikpIHsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIDB4MTUsIDB4MEYsIDB4MDUpOworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIlBBIEJJQVMgcGF0aCBCXG4iKSk7CisJfQorCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX05BVl9VUFBFUiwgKCgzMDAwMCArIDEyNykgLyAxMjgpKTsKKworCS8qRml4ZWQgTERQQyByeCBoYW5nIGlzc3VlLiAqLworCXRtcF91NGIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfU1lTX1NXUl9DVFJMMSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19TV1JfQ1RSTDIsIDB4NzUpOworCXRtcF91NGIgPSAgKHRtcF91NGIgJiAweGZmZjAwZmZmKSB8ICgweDdFIDw8IDEyKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1NZU19TV1JfQ1RSTDEsIHRtcF91NGIpOworCisJcnRsOTJlZV9kbV9pbml0KGh3KTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDRmYywgMCk7CisKKwlSVF9UUkFDRShDT01QX0lOSVQgLCBEQkdfTE9VRCAsICgiZW5kIG9mIFJ0bDgxOTJFRSBodyBpbml0ICV4XG4iICwgZXJyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHZlcnNpb25fODE5MmUgX3J0bDkyZWVfcmVhZF9jaGlwX3ZlcnNpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJZW51bSB2ZXJzaW9uXzgxOTJlIHZlcnNpb24gPSBWRVJTSU9OX1VOS05PV047CisJdTMyIHZhbHVlMzI7CisKKwlydGxwaHktPnJmX3R5cGUgPSBSRl8yVDJSOworCisJdmFsdWUzMiA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19TWVNfQ0ZHMSk7CisJaWYgKHZhbHVlMzIgJiBUUlBfVkFVWF9FTikKKwkJdmVyc2lvbiA9IChlbnVtIHZlcnNpb25fODE5MmUpIFZFUlNJT05fVEVTVF9DSElQXzJUMlJfODE5MkU7CisJZWxzZQorCQl2ZXJzaW9uID0gKGVudW0gdmVyc2lvbl84MTkyZSkgVkVSU0lPTl9OT1JNQUxfQ0hJUF8yVDJSXzgxOTJFOworCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiQ2hpcCBSRiBUeXBlOiAlc1xuIiwgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSKSA/CisJCSAgIlJGXzJUMlIiIDogIlJGXzFUMVIiKSk7CisKKwlyZXR1cm4gdmVyc2lvbjsKK30KKworc3RhdGljIGludCBfcnRsOTJlZV9zZXRfbWVkaWFfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBidF9tc3IgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIE1TUik7CisJZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uID0gTEVEX0NUTF9OT19MSU5LOworCXU4IG1vZGUgPSBNU1JfTk9MSU5LOworCWJ0X21zciAmPSAweGZjOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKKwkJbW9kZSA9IE1TUl9OT0xJTks7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBOTyBMSU5LIVxuIikpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJbW9kZSA9IE1TUl9BREhPQzsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFkIEhvYyFcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQltb2RlID0gTVNSX0lORlJBOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBTVEEhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCW1vZGUgPSBNU1JfQVA7CisJCWxlZGFjdGlvbiA9IExFRF9DVExfTElOSzsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFQIVxuIikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiTmV0d29yayB0eXBlICVkIG5vdCBzdXBwb3J0IVxuIiwgdHlwZSkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCisJLyogTVNSX0lORlJBID09IExpbmsgaW4gaW5mcmFzdHJ1Y3R1cmUgbmV0d29yazsKKwkgKiBNU1JfQURIT0MgPT0gTGluayBpbiBhZCBob2MgbmV0d29yazsKKwkgKiBUaGVyZWZvcmUsIGNoZWNrIGxpbmsgc3RhdGUgaXMgbmVjZXNzYXJ5LgorCSAqCisJICogTVNSX0FQID09IEFQIG1vZGU7IGxpbmsgc3RhdGUgaXMgbm90IGNhcmVkIGhlcmUuCisJICovCisJaWYgKG1vZGUgIT0gTVNSX0FQICYmIHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJbW9kZSA9IE1TUl9OT0xJTks7CisJCWxlZGFjdGlvbiA9IExFRF9DVExfTk9fTElOSzsKKwl9CisKKwlpZiAobW9kZSA9PSBNU1JfTk9MSU5LIHx8IG1vZGUgPT0gTVNSX0lORlJBKSB7CisJCV9ydGw5MmVlX3N0b3BfdHhfYmVhY29uKGh3KTsKKwkJX3J0bDkyZWVfZW5hYmxlX2Jjbl9zdWJfZnVuYyhodyk7CisJfSBlbHNlIGlmIChtb2RlID09IE1TUl9BREhPQyB8fCBtb2RlID09IE1TUl9BUCkgeworCQlfcnRsOTJlZV9yZXN1bWVfdHhfYmVhY29uKGh3KTsKKwkJX3J0bDkyZWVfZGlzYWJsZV9iY25fc3ViX2Z1bmMoaHcpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoIlNldCBIV19WQVJfTUVESUFfU1RBVFVTOiAiCisJCQkgICJObyBzdWNoIG1lZGlhIHN0YXR1cygleCkuXG4iLCBtb2RlKSk7CisJfQorCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgKE1TUiksIGJ0X21zciB8IG1vZGUpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywgbGVkYWN0aW9uKTsKKwlpZiAobW9kZSA9PSBNU1JfQVApCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CQ05UQ0ZHICsgMSwgMHgwMCk7CisJZWxzZQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOVENGRyArIDEsIDB4NjYpOworCXJldHVybiAwOworfQorCit2b2lkIHJ0bDkyZWVfc2V0X2NoZWNrX2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGNoZWNrX2Jzc2lkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXUzMiByZWdfcmNyID0gcnRscGNpLT5yZWNlaXZlX2NvbmZpZzsKKworCWlmIChydGxwcml2LT5wc2MucmZwd3Jfc3RhdGUgIT0gRVJGT04pCisJCXJldHVybjsKKworCWlmIChjaGVja19ic3NpZCA9PSB0cnVlKSB7CisJCXJlZ19yY3IgfD0gKFJDUl9DQlNTSURfREFUQSB8IFJDUl9DQlNTSURfQkNOKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsCisJCQkJCSAgICAgICh1OCAqKSAoJnJlZ19yY3IpKTsKKwkJX3J0bDkyZWVfc2V0X2Jjbl9jdHJsX3JlZyhodywgMCwgQklUKDQpKTsKKwl9IGVsc2UgaWYgKGNoZWNrX2Jzc2lkID09IGZhbHNlKSB7CisJCXJlZ19yY3IgJj0gKH4oUkNSX0NCU1NJRF9EQVRBIHwgUkNSX0NCU1NJRF9CQ04pKTsKKwkJX3J0bDkyZWVfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDQpLCAwKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsCisJCQkJCSAgICAgICh1OCAqKSAoJnJlZ19yY3IpKTsKKwl9Cit9CisKK2ludCBydGw5MmVlX3NldF9uZXR3b3JrX3R5cGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAoX3J0bDkyZWVfc2V0X21lZGlhX3N0YXR1cyhodywgdHlwZSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkgeworCQlpZiAodHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCQkgICAgdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQkJcnRsOTJlZV9zZXRfY2hlY2tfYnNzaWQoaHcsIHRydWUpOworCX0gZWxzZSB7CisJCXJ0bDkyZWVfc2V0X2NoZWNrX2Jzc2lkKGh3LCBmYWxzZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGRvbid0IHNldCBSRUdfRURDQV9CRV9QQVJBTSBoZXJlIGJlY2F1c2UgbWFjODAyMTEgd2lsbCBzZW5kIHBrdCB3aGVuIHNjYW4gKi8KK3ZvaWQgcnRsOTJlZV9zZXRfcW9zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgYWNpKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlydGw5MmVlX2RtX2luaXRfZWRjYV90dXJibyhodyk7CisJc3dpdGNoIChhY2kpIHsKKwljYXNlIEFDMV9CSzoKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX0JLX1BBUkFNLCAweGE0NGYpOworCQlicmVhazsKKwljYXNlIEFDMF9CRToKKwkJLyogcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX0JFX1BBUkFNLCB1NGJfYWNfcGFyYW0pOyAqLworCQlicmVhazsKKwljYXNlIEFDMl9WSToKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZJX1BBUkFNLCAweDVlNDMyMik7CisJCWJyZWFrOworCWNhc2UgQUMzX1ZPOgorCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfVk9fUEFSQU0sIDB4MmYzMjIyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfQVNTRVJUKGZhbHNlLCAoImludmFsaWQgYWNpOiAlZCAhXG4iLCBhY2kpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX2NsZWFyX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIHRtcDsKKworCXRtcCA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19ISVNSKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJU1IsIHRtcCk7CisKKwl0bXAgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfSElTUkUpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSElTUkUsIHRtcCk7CisKKwl0bXAgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfSFNJU1IpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSFNJU1IsIHRtcCk7Cit9CisKK3ZvaWQgcnRsOTJlZV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJcnRsOTJlZV9jbGVhcl9pbnRlcnJ1cHQoaHcpOy8qY2xlYXIgaXQgaGVyZSBmaXJzdCovCisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJTVIsIHJ0bHBjaS0+aXJxX21hc2tbMF0gJiAweEZGRkZGRkZGKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJTVJFLCBydGxwY2ktPmlycV9tYXNrWzFdICYgMHhGRkZGRkZGRik7CisJcnRscGNpLT5pcnFfZW5hYmxlZCA9IHRydWU7Cit9CisKK3ZvaWQgcnRsOTJlZV9kaXNhYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSElNUiwgSU1SX0RJU0FCTEVEKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJTVJFLCBJTVJfRElTQUJMRUQpOworCXJ0bHBjaS0+aXJxX2VuYWJsZWQgPSBmYWxzZTsKKwkvKnN5bmNocm9uaXplX2lycShydGxwY2ktPnBkZXYtPmlycSk7Ki8KK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfcG93ZXJvZmZfYWRhcHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwl1OCB1MWJfdG1wOworCXJ0bGhhbC0+Yl9tYWNfZnVuY19lbmFibGUgPSBmYWxzZTsKKworCVJUX1RSQUNFKENPTVBfSU5JVCAsIERCR19MT1VEICwgKCJQT1dFUiBPRkYgYWRhcHRlciBcbiIpKTsKKworCS8qIFJ1biBMUFMgV0wgUkZPRkYgZmxvdyAqLworCXJ0bDkyZV9oYWxfcHdyc2VxY21kcGFyc2luZyhydGxwcml2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywKKwkJCQkgUFdSX0lOVEZfUENJX01TSywgUnRsODE5MkVfTklDX0xQU19FTlRFUl9GTE9XKTsKKwkvKiB0dXJuIG9mZiBSRiAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SRl9DVFJMLCAweDAwKTsKKworCS8qID09PT0gUmVzZXQgZGlnaXRhbCBzZXF1ZW5jZSAgID09PT09PSAgKi8KKwlpZiAoKHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwpICYgQklUKDcpKSAmJiBydGxoYWwtPmJmd19yZWFkeSkKKwkJcnRsOTJlZV9maXJtd2FyZV9zZWxmcmVzZXQoaHcpOworCisJLyogUmVzZXQgTUNVICAqLworCXUxYl90bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEsICh1MWJfdG1wICYgKH5CSVQoMikpKSk7CisKKwkvKiByZXNldCBNQ1UgcmVhZHkgc3RhdHVzICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwsIDB4MDApOworCisJLyogSFcgY2FyZCBkaXNhYmxlIGNvbmZpZ3VyYXRpb24uICovCisJcnRsOTJlX2hhbF9wd3JzZXFjbWRwYXJzaW5nKHJ0bHByaXYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLAorCQkJCSBQV1JfSU5URl9QQ0lfTVNLLCBSdGw4MTkyRV9OSUNfRElTQUJMRV9GTE9XKTsKKworCS8qIFJlc2V0IE1DVSBJTyBXcmFwcGVyICovCisJdTFiX3RtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1JTVl9DVFJMICsgMSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JTVl9DVFJMICsgMSwgKHUxYl90bXAgJiAofkJJVCgwKSkpKTsKKwl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwgKyAxLCAodTFiX3RtcCB8IEJJVCgwKSkpOworCisJLyogbG9jayBJU08vQ0xLL1Bvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIDB4MEUpOworfQorCit2b2lkIHJ0bDkyZWVfY2FyZF9kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOworCisJUlRfVFJBQ0UoQ09NUF9JTklUICwgREJHX0xPVUQgLCAoIlJUTDgxOTJlZSBjYXJkIGRpc2FibGVcbiIpKTsKKworCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisKKwltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9OT0xJTks7CisJb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisKKwlfcnRsOTJlZV9zZXRfbWVkaWFfc3RhdHVzKGh3LCBvcG1vZGUpOworCisJaWYgKHJ0bHByaXYtPnJ0bGhhbC5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgfHwKKwkgICAgcHBzYy0+cmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKQorCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfUE9XRVJfT0ZGKTsKKworCV9ydGw5MmVlX3Bvd2Vyb2ZmX2FkYXB0ZXIoaHcpOworCisJLyogYWZ0ZXIgcG93ZXIgb2ZmIHdlIHNob3VsZCBkbyBpcWsgYWdhaW4gKi8KKwlydGxwcml2LT5waHkuaXFrX2luaXRpYWxpemVkID0gZmFsc2U7Cit9CisKK3ZvaWQgcnRsOTJlZV9pbnRlcnJ1cHRfcmVjb2duaXplZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHUzMiAqcF9pbnRhLCB1MzIgKnBfaW50YikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCSpwX2ludGEgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBJU1IpICYgcnRscGNpLT5pcnFfbWFza1swXTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSVNSLCAqcF9pbnRhKTsKKworCSpwX2ludGIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfSElTUkUpICYgcnRscGNpLT5pcnFfbWFza1sxXTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJU1JFLCAqcF9pbnRiKTsKK30KKwordm9pZCBydGw5MmVlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXUxNiBiY25faW50ZXJ2YWwsIGF0aW1fd2luZG93OworCisJYmNuX2ludGVydmFsID0gbWFjLT5iZWFjb25faW50ZXJ2YWw7CisJYXRpbV93aW5kb3cgPSAyOwkvKkZJWCBNRVJHRSAqLworCXJ0bDkyZWVfZGlzYWJsZV9pbnRlcnJ1cHQoaHcpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19BVElNV05ELCBhdGltX3dpbmRvdyk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0JDTl9JTlRFUlZBTCwgYmNuX2ludGVydmFsKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkNOVENGRywgMHg2NjBmKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlhUU0ZfT0ZGU0VUX0NDSywgMHgxOCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JYVFNGX09GRlNFVF9PRkRNLCAweDE4KTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDYwNiwgMHgzMCk7CisJcnRscGNpLT5yZWdfYmNuX2N0cmxfdmFsIHw9IEJJVCgzKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOX0NUUkwsICh1OCkgcnRscGNpLT5yZWdfYmNuX2N0cmxfdmFsKTsKK30KKwordm9pZCBydGw5MmVlX3NldF9iZWFjb25faW50ZXJ2YWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTE2IGJjbl9pbnRlcnZhbCA9IG1hYy0+YmVhY29uX2ludGVydmFsOworCisJUlRfVFJBQ0UoQ09NUF9CRUFDT04sIERCR19ETUVTRywKKwkJICgiYmVhY29uX2ludGVydmFsOiVkXG4iLCBiY25faW50ZXJ2YWwpKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkNOX0lOVEVSVkFMLCBiY25faW50ZXJ2YWwpOworfQorCit2b2lkIHJ0bDkyZWVfdXBkYXRlX2ludGVycnVwdF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJUlRfVFJBQ0UoQ09NUF9JTlRSLCBEQkdfTE9VRCwKKwkJICgiYWRkX21zcjoleCwgcm1fbXNyOiV4XG4iLCBhZGRfbXNyLCBybV9tc3IpKTsKKworCWlmIChhZGRfbXNyKQorCQlydGxwY2ktPmlycV9tYXNrWzBdIHw9IGFkZF9tc3I7CisJaWYgKHJtX21zcikKKwkJcnRscGNpLT5pcnFfbWFza1swXSAmPSAofnJtX21zcik7CisJcnRsOTJlZV9kaXNhYmxlX2ludGVycnVwdChodyk7CisJcnRsOTJlZV9lbmFibGVfaW50ZXJydXB0KGh3KTsKK30KKworc3RhdGljIHU4IF9ydGw5MmVlX2dldF9jaG5sX2dyb3VwKHU4IGNobmwpCit7CisJdTggZ3JvdXAgPSAwOworCisJaWYgKGNobmwgPD0gMTQpIHsKKwkJaWYgKDEgPD0gY2hubCAmJiBjaG5sIDw9IDIpCisJCQlncm91cCA9IDA7CisJCWVsc2UgaWYgKDMgPD0gY2hubCAmJiBjaG5sIDw9IDUpCisJCQlncm91cCA9IDE7CisJCWVsc2UgaWYgKDYgPD0gY2hubCAmJiBjaG5sIDw9IDgpCisJCQlncm91cCA9IDI7CisJCWVsc2UgaWYgKDkgPD0gY2hubCAmJiBjaG5sIDw9IDExKQorCQkJZ3JvdXAgPSAzOworCQllbHNlIGlmICgxMiA8PSBjaG5sICYmIGNobmwgPD0gMTQpCisJCQlncm91cCA9IDQ7CisJfSBlbHNlIHsKKwkJaWYgKDM2IDw9IGNobmwgJiYgY2hubCA8PSA0MikKKwkJCWdyb3VwID0gMDsKKwkJZWxzZSBpZiAoNDQgPD0gY2hubCAmJiBjaG5sIDw9IDQ4KQorCQkJZ3JvdXAgPSAxOworCQllbHNlIGlmICg1MCA8PSBjaG5sICYmIGNobmwgPD0gNTgpCisJCQlncm91cCA9IDI7CisJCWVsc2UgaWYgKDYwIDw9IGNobmwgJiYgY2hubCA8PSA2NCkKKwkJCWdyb3VwID0gMzsKKwkJZWxzZSBpZiAoMTAwIDw9IGNobmwgJiYgY2hubCA8PSAxMDYpCisJCQlncm91cCA9IDQ7CisJCWVsc2UgaWYgKDEwOCA8PSBjaG5sICYmIGNobmwgPD0gMTE0KQorCQkJZ3JvdXAgPSA1OworCQllbHNlIGlmICgxMTYgPD0gY2hubCAmJiBjaG5sIDw9IDEyMikKKwkJCWdyb3VwID0gNjsKKwkJZWxzZSBpZiAoMTI0IDw9IGNobmwgJiYgY2hubCA8PSAxMzApCisJCQlncm91cCA9IDc7CisJCWVsc2UgaWYgKDEzMiA8PSBjaG5sICYmIGNobmwgPD0gMTM4KQorCQkJZ3JvdXAgPSA4OworCQllbHNlIGlmICgxNDAgPD0gY2hubCAmJiBjaG5sIDw9IDE0NCkKKwkJCWdyb3VwID0gOTsKKwkJZWxzZSBpZiAoMTQ5IDw9IGNobmwgJiYgY2hubCA8PSAxNTUpCisJCQlncm91cCA9IDEwOworCQllbHNlIGlmICgxNTcgPD0gY2hubCAmJiBjaG5sIDw9IDE2MSkKKwkJCWdyb3VwID0gMTE7CisJCWVsc2UgaWYgKDE2NSA8PSBjaG5sICYmIGNobmwgPD0gMTcxKQorCQkJZ3JvdXAgPSAxMjsKKwkJZWxzZSBpZiAoMTczIDw9IGNobmwgJiYgY2hubCA8PSAxNzcpCisJCQlncm91cCA9IDEzOworCX0KKwlyZXR1cm4gZ3JvdXA7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw4MTkyZWVfcmVhZF9wb3dlcl92YWx1ZV9mcm9tcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSBzdHJ1Y3QgdHhwb3dlcl9pbmZvXzJnICpwd3IyZywKKwkJCQkJCSBzdHJ1Y3QgdHhwb3dlcl9pbmZvXzVnICpwd3I1ZywKKwkJCQkJCSBib29sIGF1dG9sb2FkX2ZhaWwsIHU4ICpod2luZm8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiByZiwgYWRkciA9IEVFUFJPTV9UWF9QV1JfSU5YLCBncm91cCwgaSA9IDA7CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkgKCJoYWxfUmVhZFBvd2VyVmFsdWVGcm9tUFJPTTkyRSgpOiBQUk9NQ29udGVudFsweCV4XT0gMHgleFxuIiwKKwkJIChhZGRyICsgMSksIGh3aW5mb1thZGRyICsgMV0pKTsKKwlpZiAoMHhGRiA9PSBod2luZm9bYWRkcisxXSkgIC8qWUosIGFkZCwgMTIwMzE2Ki8KKwkJYXV0b2xvYWRfZmFpbCA9IHRydWU7CisKKwlpZiAoYXV0b2xvYWRfZmFpbCkgeworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJICgiYXV0byBsb2FkIGZhaWwgOiBVc2UgRGVmYXVsdCB2YWx1ZSFcbiIpKTsKKwkJZm9yIChyZiA9IDAgOyByZiA8IE1BWF9SRl9QQVRIIDsgcmYrKykgeworCQkJLyogMi40RyBkZWZhdWx0IHZhbHVlICovCisJCQlmb3IgKGdyb3VwID0gMCA7IGdyb3VwIDwgTUFYX0NITkxfR1JPVVBfMjRHOyBncm91cCsrKSB7CisJCQkJcHdyMmctPmluZGV4X2Nja19iYXNlW3JmXVtncm91cF0gPSAweDJEOworCQkJCXB3cjJnLT5pbmRleF9idzQwX2Jhc2VbcmZdW2dyb3VwXSA9IDB4MkQ7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX0NPVU5UOyBpKyspIHsKKwkJCQlpZiAoaSA9PSAwKSB7CisJCQkJCXB3cjJnLT5idzIwX2RpZmZbcmZdWzBdID0gMHgwMjsKKwkJCQkJcHdyMmctPm9mZG1fZGlmZltyZl1bMF0gPSAweDA0OworCQkJCX0gZWxzZSB7CisJCQkJCXB3cjJnLT5idzIwX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCQkJcHdyMmctPmJ3NDBfZGlmZltyZl1baV0gPSAweEZFOworCQkJCQlwd3IyZy0+Y2NrX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCQkJcHdyMmctPm9mZG1fZGlmZltyZl1baV0gPSAweEZFOworCQkJCX0KKwkJCX0KKworCQkJLyo1RyBkZWZhdWx0IHZhbHVlKi8KKwkJCWZvciAoZ3JvdXAgPSAwIDsgZ3JvdXAgPCBNQVhfQ0hOTF9HUk9VUF81RzsgZ3JvdXArKykKKwkJCQlwd3I1Zy0+aW5kZXhfYnc0MF9iYXNlW3JmXVtncm91cF0gPSAweDJBOworCisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX0NPVU5UOyBpKyspIHsKKwkJCQlpZiAoaSA9PSAwKSB7CisJCQkJCXB3cjVnLT5vZmRtX2RpZmZbcmZdWzBdID0gMHgwNDsKKwkJCQkJcHdyNWctPmJ3MjBfZGlmZltyZl1bMF0gPSAweDAwOworCQkJCQlwd3I1Zy0+Ync4MF9kaWZmW3JmXVswXSA9IDB4RkU7CisJCQkJCXB3cjVnLT5idzE2MF9kaWZmW3JmXVswXSA9IDB4RkU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHdyNWctPm9mZG1fZGlmZltyZl1bMF0gPSAweEZFOworCQkJCQlwd3I1Zy0+YncyMF9kaWZmW3JmXVswXSA9IDB4RkU7CisJCQkJCXB3cjVnLT5idzQwX2RpZmZbcmZdWzBdID0gMHhGRTsKKwkJCQkJcHdyNWctPmJ3ODBfZGlmZltyZl1bMF0gPSAweEZFOworCQkJCQlwd3I1Zy0+YncxNjBfZGlmZltyZl1bMF0gPSAweEZFOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfQorCisJcnRsX3ByaXYoaHcpLT5lZnVzZS5iX3R4cHdyX2Zyb21lcHJvbSA9IHRydWU7CisKKwlmb3IgKHJmID0gMCA7IHJmIDwgTUFYX1JGX1BBVEggOyByZisrKSB7CisJCS8qMi40RyBkZWZhdWx0IHZhbHVlKi8KKwkJZm9yIChncm91cCA9IDAgOyBncm91cCA8IE1BWF9DSE5MX0dST1VQXzI0RzsgZ3JvdXArKykgeworCQkJcHdyMmctPmluZGV4X2Nja19iYXNlW3JmXVtncm91cF0gPSBod2luZm9bYWRkcisrXTsKKwkJCWlmIChwd3IyZy0+aW5kZXhfY2NrX2Jhc2VbcmZdW2dyb3VwXSA9PSAweEZGKQorCQkJCXB3cjJnLT5pbmRleF9jY2tfYmFzZVtyZl1bZ3JvdXBdID0gMHgyRDsKKworCQl9CisJCWZvciAoZ3JvdXAgPSAwIDsgZ3JvdXAgPCBNQVhfQ0hOTF9HUk9VUF8yNEcgLSAxOyBncm91cCsrKSB7CisJCQlwd3IyZy0+aW5kZXhfYnc0MF9iYXNlW3JmXVtncm91cF0gPSBod2luZm9bYWRkcisrXTsKKwkJCWlmIChwd3IyZy0+aW5kZXhfYnc0MF9iYXNlW3JmXVtncm91cF0gPT0gMHhGRikKKwkJCQlwd3IyZy0+aW5kZXhfYnc0MF9iYXNlW3JmXVtncm91cF0gPSAweDJEOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfQ09VTlQ7IGkrKykgeworCQkJaWYgKGkgPT0gMCkgeworCQkJCXB3cjJnLT5idzQwX2RpZmZbcmZdW2ldID0gMDsKKwkJCQlpZiAoaHdpbmZvW2FkZHJdID09IDB4RkYpIHsKKwkJCQkJcHdyMmctPmJ3MjBfZGlmZltyZl1baV0gPSAweDAyOworCQkJCX0gZWxzZSB7CisJCQkJCXB3cjJnLT5idzIwX2RpZmZbcmZdW2ldID0gKGh3aW5mb1thZGRyXQorCQkJCQkJCQkgICAmIDB4ZjApID4+IDQ7CisJCQkJCWlmIChwd3IyZy0+YncyMF9kaWZmW3JmXVtpXSAmIEJJVCgzKSkKKwkJCQkJCXB3cjJnLT5idzIwX2RpZmZbcmZdW2ldIHw9IDB4RjA7CisJCQkJfQorCisJCQkJaWYgKGh3aW5mb1thZGRyXSA9PSAweEZGKSB7CisJCQkJCXB3cjJnLT5vZmRtX2RpZmZbcmZdW2ldID0gMHgwNDsKKwkJCQl9IGVsc2UgeworCQkJCQlwd3IyZy0+b2ZkbV9kaWZmW3JmXVtpXSA9IChod2luZm9bYWRkcl0KKwkJCQkJCQkJICAgJiAweDBmKTsKKwkJCQkJaWYgKHB3cjJnLT5vZmRtX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCQkJcHdyMmctPm9mZG1fZGlmZltyZl1baV0gfD0gMHhGMDsKKwkJCQl9CisJCQkJcHdyMmctPmNja19kaWZmW3JmXVtpXSA9IDA7CisJCQkJYWRkcisrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaHdpbmZvW2FkZHJdID09IDB4RkYpIHsKKwkJCQkJcHdyMmctPmJ3NDBfZGlmZltyZl1baV0gPSAweEZFOworCQkJCX0gZWxzZSB7CisJCQkJCXB3cjJnLT5idzQwX2RpZmZbcmZdW2ldID0gKGh3aW5mb1thZGRyXQorCQkJCQkJCQkgICAmIDB4ZjApID4+IDQ7CisJCQkJCWlmIChwd3IyZy0+Ync0MF9kaWZmW3JmXVtpXSAmIEJJVCgzKSkKKwkJCQkJCXB3cjJnLT5idzQwX2RpZmZbcmZdW2ldIHw9IDB4RjA7CisJCQkJfQorCisJCQkJaWYgKGh3aW5mb1thZGRyXSA9PSAweEZGKSB7CisJCQkJCXB3cjJnLT5idzIwX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCQl9IGVsc2UgeworCQkJCQlwd3IyZy0+YncyMF9kaWZmW3JmXVtpXSA9IChod2luZm9bYWRkcl0KKwkJCQkJCQkJICAgJiAweDBmKTsKKwkJCQkJaWYgKHB3cjJnLT5idzIwX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCQkJcHdyMmctPmJ3MjBfZGlmZltyZl1baV0gfD0gMHhGMDsKKwkJCQl9CisJCQkJYWRkcisrOworCisJCQkJaWYgKGh3aW5mb1thZGRyXSA9PSAweEZGKSB7CisJCQkJCXB3cjJnLT5vZmRtX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCQl9IGVsc2UgeworCQkJCQlwd3IyZy0+b2ZkbV9kaWZmW3JmXVtpXSA9IChod2luZm9bYWRkcl0KKwkJCQkJCQkJICAgJiAweGYwKSA+PiA0OworCQkJCQlpZiAocHdyMmctPm9mZG1fZGlmZltyZl1baV0gJiBCSVQoMykpCisJCQkJCQlwd3IyZy0+b2ZkbV9kaWZmW3JmXVtpXSB8PSAweEYwOworCQkJCX0KKworCQkJCWlmIChod2luZm9bYWRkcl0gPT0gMHhGRikgeworCQkJCQlwd3IyZy0+Y2NrX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCQl9IGVsc2UgeworCQkJCQlwd3IyZy0+Y2NrX2RpZmZbcmZdW2ldID0gKGh3aW5mb1thZGRyXQorCQkJCQkJCQkgICYgMHgwZik7CisJCQkJCWlmIChwd3IyZy0+Y2NrX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCQkJcHdyMmctPmNja19kaWZmW3JmXVtpXSB8PSAweEYwOworCQkJCX0KKwkJCQlhZGRyKys7CisJCQl9CisJCX0KKworCQkvKjVHIGRlZmF1bHQgdmFsdWUqLworCQlmb3IgKGdyb3VwID0gMCA7IGdyb3VwIDwgTUFYX0NITkxfR1JPVVBfNUc7IGdyb3VwKyspIHsKKwkJCXB3cjVnLT5pbmRleF9idzQwX2Jhc2VbcmZdW2dyb3VwXSA9IGh3aW5mb1thZGRyKytdOworCQkJaWYgKHB3cjVnLT5pbmRleF9idzQwX2Jhc2VbcmZdW2dyb3VwXSA9PSAweEZGKQorCQkJCXB3cjVnLT5pbmRleF9idzQwX2Jhc2VbcmZdW2dyb3VwXSA9IDB4RkU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX0NPVU5UOyBpKyspIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQlwd3I1Zy0+Ync0MF9kaWZmW3JmXVtpXSA9IDA7CisKKwkJCQlpZiAoaHdpbmZvW2FkZHJdID09IDB4RkYpIHsKKwkJCQkJcHdyNWctPmJ3MjBfZGlmZltyZl1baV0gPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXB3cjVnLT5idzIwX2RpZmZbcmZdWzBdID0gKGh3aW5mb1thZGRyXQorCQkJCQkJCQkgICAmIDB4ZjApID4+IDQ7CisJCQkJCWlmIChwd3I1Zy0+YncyMF9kaWZmW3JmXVtpXSAmIEJJVCgzKSkKKwkJCQkJCXB3cjVnLT5idzIwX2RpZmZbcmZdW2ldIHw9IDB4RjA7CisJCQkJfQorCisJCQkJaWYgKGh3aW5mb1thZGRyXSA9PSAweEZGKSB7CisJCQkJCXB3cjVnLT5vZmRtX2RpZmZbcmZdW2ldID0gMHgwNDsKKwkJCQl9IGVsc2UgeworCQkJCQlwd3I1Zy0+b2ZkbV9kaWZmW3JmXVswXSA9IChod2luZm9bYWRkcl0KKwkJCQkJCQkJICAgJiAweDBmKTsKKwkJCQkJaWYgKHB3cjVnLT5vZmRtX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCQkJcHdyNWctPm9mZG1fZGlmZltyZl1baV0gfD0gMHhGMDsKKwkJCQl9CisJCQkJYWRkcisrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaHdpbmZvW2FkZHJdID09IDB4RkYpIHsKKwkJCQkJcHdyNWctPmJ3NDBfZGlmZltyZl1baV0gPSAweEZFOworCQkJCX0gZWxzZSB7CisJCQkJCXB3cjVnLT5idzQwX2RpZmZbcmZdW2ldID0gKGh3aW5mb1thZGRyXQorCQkJCQkJCQkgICYgMHhmMCkgPj4gNDsKKwkJCQkJaWYgKHB3cjVnLT5idzQwX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCQlwd3I1Zy0+Ync0MF9kaWZmW3JmXVtpXSB8PSAweEYwOworCQkJCX0KKworCQkJCWlmIChod2luZm9bYWRkcl0gPT0gMHhGRikgeworCQkJCQlwd3I1Zy0+YncyMF9kaWZmW3JmXVtpXSA9IDB4RkU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHdyNWctPmJ3MjBfZGlmZltyZl1baV0gPSAoaHdpbmZvW2FkZHJdCisJCQkJCQkJCSAgICYgMHgwZik7CisJCQkJCWlmIChwd3I1Zy0+YncyMF9kaWZmW3JmXVtpXSAmIEJJVCgzKSkKKwkJCQkJcHdyNWctPmJ3MjBfZGlmZltyZl1baV0gfD0gMHhGMDsKKwkJCQl9CisJCQkJYWRkcisrOworCQkJfQorCQl9CisKKwkJaWYgKGh3aW5mb1thZGRyXSA9PSAweEZGKSB7CisJCQlwd3I1Zy0+b2ZkbV9kaWZmW3JmXVsxXSA9IDB4RkU7CisJCQlwd3I1Zy0+b2ZkbV9kaWZmW3JmXVsyXSA9IDB4RkU7CisJCX0gZWxzZSB7CisJCQlwd3I1Zy0+b2ZkbV9kaWZmW3JmXVsxXSA9IChod2luZm9bYWRkcl0gJiAweGYwKSA+PiA0OworCQkJcHdyNWctPm9mZG1fZGlmZltyZl1bMl0gPSAoaHdpbmZvW2FkZHJdICYgMHgwZik7CisJCX0KKwkJYWRkcisrOworCisJCWlmIChod2luZm9bYWRkcl0gPT0gMHhGRikKKwkJCXB3cjVnLT5vZmRtX2RpZmZbcmZdWzNdID0gMHhGRTsKKwkJZWxzZQorCQkJcHdyNWctPm9mZG1fZGlmZltyZl1bM10gPSAoaHdpbmZvW2FkZHJdICYgMHgwZik7CisJCWFkZHIrKzsKKworCQlmb3IgKGkgPSAxOyBpIDwgTUFYX1RYX0NPVU5UOyBpKyspIHsKKwkJCWlmIChwd3I1Zy0+b2ZkbV9kaWZmW3JmXVtpXSA9PSAweEZGKQorCQkJCXB3cjVnLT5vZmRtX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCWVsc2UgaWYgKHB3cjVnLT5vZmRtX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCXB3cjVnLT5vZmRtX2RpZmZbcmZdW2ldIHw9IDB4RjA7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX0NPVU5UOyBpKyspIHsKKwkJCWlmIChod2luZm9bYWRkcl0gPT0gMHhGRikgeworCQkJCXB3cjVnLT5idzgwX2RpZmZbcmZdW2ldID0gMHhGRTsKKwkJCX0gZWxzZSB7CisJCQkJcHdyNWctPmJ3ODBfZGlmZltyZl1baV0gPSAoaHdpbmZvW2FkZHJdICYgMHhmMCkKKwkJCQkJCQkgID4+IDQ7CisJCQkJaWYgKHB3cjVnLT5idzgwX2RpZmZbcmZdW2ldICYgQklUKDMpKQorCQkJCQlwd3I1Zy0+Ync4MF9kaWZmW3JmXVtpXSB8PSAweEYwOworCQkJfQorCisJCQlpZiAoaHdpbmZvW2FkZHJdID09IDB4RkYpIHsKKwkJCQlwd3I1Zy0+YncxNjBfZGlmZltyZl1baV0gPSAweEZFOworCQkJfSBlbHNlIHsKKwkJCQlwd3I1Zy0+YncxNjBfZGlmZltyZl1baV0gPSAoaHdpbmZvW2FkZHJdICYgMHgwZik7CisJCQkJaWYgKHB3cjVnLT5idzE2MF9kaWZmW3JmXVtpXSAmIEJJVCgzKSkKKwkJCQkJcHdyNWctPmJ3MTYwX2RpZmZbcmZdW2ldIHw9IDB4RjA7CisJCQl9CisJCQlhZGRyKys7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCBfcnRsOTJlZV9yZWFkX3R4cG93ZXJfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgYm9vbCBhdXRvbG9hZF9mYWlsLCB1OCAqaHdpbmZvKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICplZnUgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgdHhwb3dlcl9pbmZvXzJnIHB3cjJnOworCXN0cnVjdCB0eHBvd2VyX2luZm9fNWcgcHdyNWc7CisJdTggY2hhbm5lbDVnW0NIQU5ORUxfTUFYX05VTUJFUl81R10gPSB7CisJCTM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDU0LAorCQk1NiwgNTgsIDYwLCA2MiwgNjQsIDEwMCwgMTAyLCAxMDQsIDEwNiwKKwkJMTA4LCAxMTAsIDExMiwgMTE0LCAxMTYsIDExOCwgMTIwLCAxMjIsCisJCTEyNCwgMTI2LCAxMjgsIDEzMCwgMTMyLCAxMzQsIDEzNiwgMTM4LAorCQkxNDAsIDE0MiwgMTQ0LCAxNDksIDE1MSwgMTUzLCAxNTUsIDE1NywKKwkJMTU5LCAxNjEsIDE2MywgMTY1LCAxNjcsIDE2OCwgMTY5LCAxNzEsCisJCTE3MywgMTc1LCAxNzd9OworCXU4IGNoYW5uZWw1Z184MG1bQ0hBTk5FTF9NQVhfTlVNQkVSXzVHXzgwTV0gPSB7CisJCTQyLCA1OCwgMTA2LCAxMjIsIDEzOCwgMTU1LCAxNzF9OworCXU4IHJmLCBpZHg7CisJdTggaTsKKworCV9ydGw4MTkyZWVfcmVhZF9wb3dlcl92YWx1ZV9mcm9tcHJvbShodywgJnB3cjJnLCAmcHdyNWcsCisJCQkJCSAgICAgYXV0b2xvYWRfZmFpbCwgaHdpbmZvKTsKKworCWZvciAocmYgPSAwOyByZiA8IE1BWF9SRl9QQVRIOyByZisrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlpZHggPSBfcnRsOTJlZV9nZXRfY2hubF9ncm91cChpICsgMSk7CisKKwkJCWlmIChpID09IENIQU5ORUxfTUFYX05VTUJFUl8yRyAtIDEpIHsKKwkJCQllZnUtPnR4cHdybGV2ZWxfY2NrW3JmXVtpXSA9CisJCQkJCQlwd3IyZy5pbmRleF9jY2tfYmFzZVtyZl1bNV07CisJCQkJZWZ1LT50eHB3cmxldmVsX2h0NDBfMXNbcmZdW2ldID0KKwkJCQkJCXB3cjJnLmluZGV4X2J3NDBfYmFzZVtyZl1baWR4XTsKKwkJCX0gZWxzZSB7CisJCQkJZWZ1LT50eHB3cmxldmVsX2Nja1tyZl1baV0gPQorCQkJCQkJcHdyMmcuaW5kZXhfY2NrX2Jhc2VbcmZdW2lkeF07CisJCQkJZWZ1LT50eHB3cmxldmVsX2h0NDBfMXNbcmZdW2ldID0KKwkJCQkJCXB3cjJnLmluZGV4X2J3NDBfYmFzZVtyZl1baWR4XTsKKwkJCX0KKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQ0hBTk5FTF9NQVhfTlVNQkVSXzVHOyBpKyspIHsKKwkJCWlkeCA9IF9ydGw5MmVlX2dldF9jaG5sX2dyb3VwKGNoYW5uZWw1Z1tpXSk7CisJCQllZnUtPnR4cHdyXzVnX2J3NDBiYXNlW3JmXVtpXSA9CisJCQkJCXB3cjVnLmluZGV4X2J3NDBfYmFzZVtyZl1baWR4XTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQ0hBTk5FTF9NQVhfTlVNQkVSXzVHXzgwTTsgaSsrKSB7CisJCQl1OCB1cHBlciwgbG93ZXI7CisJCQlpZHggPSBfcnRsOTJlZV9nZXRfY2hubF9ncm91cChjaGFubmVsNWdfODBtW2ldKTsKKwkJCXVwcGVyID0gcHdyNWcuaW5kZXhfYnc0MF9iYXNlW3JmXVtpZHhdOworCQkJbG93ZXIgPSBwd3I1Zy5pbmRleF9idzQwX2Jhc2VbcmZdW2lkeCArIDFdOworCisJCQllZnUtPnR4cHdyXzVnX2J3ODBiYXNlW3JmXVtpXSA9ICh1cHBlciArIGxvd2VyKSAvIDI7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9UWF9DT1VOVDsgaSsrKSB7CisJCQllZnUtPnR4cHdyX2Nja2RpZmZbcmZdW2ldID0gcHdyMmcuY2NrX2RpZmZbcmZdW2ldOworCQkJZWZ1LT50eHB3cl9sZWdhY3lodGRpZmZbcmZdW2ldID0gcHdyMmcub2ZkbV9kaWZmW3JmXVtpXTsKKwkJCWVmdS0+dHhwd3JfaHQyMGRpZmZbcmZdW2ldID0gcHdyMmcuYncyMF9kaWZmW3JmXVtpXTsKKwkJCWVmdS0+dHhwd3JfaHQ0MGRpZmZbcmZdW2ldID0gcHdyMmcuYnc0MF9kaWZmW3JmXVtpXTsKKworCQkJZWZ1LT50eHB3cl81Z19vZmRtZGlmZltyZl1baV0gPSBwd3I1Zy5vZmRtX2RpZmZbcmZdW2ldOworCQkJZWZ1LT50eHB3cl81Z19idzIwZGlmZltyZl1baV0gPSBwd3I1Zy5idzIwX2RpZmZbcmZdW2ldOworCQkJZWZ1LT50eHB3cl81Z19idzQwZGlmZltyZl1baV0gPSBwd3I1Zy5idzQwX2RpZmZbcmZdW2ldOworCQkJZWZ1LT50eHB3cl81Z19idzgwZGlmZltyZl1baV0gPSBwd3I1Zy5idzgwX2RpZmZbcmZdW2ldOworCQl9CisJfQorCisJaWYgKCFhdXRvbG9hZF9mYWlsKQorCQllZnUtPmVlcHJvbV90aGVybWFsbWV0ZXIgPSBod2luZm9bRUVQUk9NX1RIRVJNQUxfTUVURVJfOTJFXTsKKwllbHNlCisJCWVmdS0+ZWVwcm9tX3RoZXJtYWxtZXRlciA9IEVFUFJPTV9ERUZBVUxUX1RIRVJNQUxNRVRFUjsKKworCWlmIChlZnUtPmVlcHJvbV90aGVybWFsbWV0ZXIgPT0gMHhmZiB8fCBhdXRvbG9hZF9mYWlsKSB7CisJCWVmdS0+Yl9hcGtfdGhlcm1hbG1ldGVyaWdub3JlID0gdHJ1ZTsKKwkJZWZ1LT5lZXByb21fdGhlcm1hbG1ldGVyID0gRUVQUk9NX0RFRkFVTFRfVEhFUk1BTE1FVEVSOworCX0KKworCWVmdS0+dGhlcm1hbG1ldGVyWzBdID0gZWZ1LT5lZXByb21fdGhlcm1hbG1ldGVyOworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJInRoZXJtYWxtZXRlciA9IDB4JXhcbiIsIGVmdS0+ZWVwcm9tX3RoZXJtYWxtZXRlcik7CisKKwlpZiAoIWF1dG9sb2FkX2ZhaWwpIHsKKwkJZWZ1LT5lZXByb21fcmVndWxhdG9yeSA9IGh3aW5mb1tFRVBST01fUkZfQk9BUkRfT1BUSU9OXzkyRV0KKwkJCQkJICYgMHgwNzsKKwkJaWYgKGh3aW5mb1tFRVBST01fUkZfQk9BUkRfT1BUSU9OXzkyRV0gPT0gMHhGRikKKwkJCWVmdS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPSAwOworCX0gZWxzZSB7CisJCWVmdS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPSAwOworCX0KKwlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsCisJCSJlZXByb21fcmVndWxhdG9yeSA9IDB4JXhcbiIsIGVmdS0+ZWVwcm9tX3JlZ3VsYXRvcnkpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9yZWFkX2FkYXB0ZXJfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXUxNiBpLCB1c3ZhbHVlOworCXU4IGh3aW5mb1tIV1NFVF9NQVhfU0laRV07CisJdTE2IGVlcHJvbV9pZDsKKworCWlmIChydGxlZnVzZS0+ZXByb210eXBlID09IEVFUFJPTV9CT09UX0VGVVNFKSB7CisJCXN0Z19ydGxfZWZ1c2U5MmVfc2hhZG93X21hcF91cGRhdGUoaHcpOworCisJCW1lbWNweShod2luZm8sICZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwKKwkJICAgICAgIEhXU0VUX01BWF9TSVpFKTsKKwl9IGVsc2UgaWYgKHJ0bGVmdXNlLT5lcHJvbXR5cGUgPT0gRUVQUk9NXzkzQzQ2KSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJSVEw4MTlYIE5vdCBib290IGZyb20gZWVwcm9tLCBjaGVjayBpdCAhISIpKTsKKwkJcmV0dXJuOworCX0gIGVsc2UgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiYm9vdCBmcm9tIG5laXRoZXIgZWVwcm9tIG5vciBlZnVzZSwgY2hlY2sgaXQgISEiKSk7CisJCXJldHVybjsKKwl9CisKKwlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsICJNQVAgXG4iLAorCQkgICAgICBod2luZm8sIEhXU0VUX01BWF9TSVpFKTsKKworCWVlcHJvbV9pZCA9ICooKHUxNiAqKSAmaHdpbmZvWzBdKTsKKwlpZiAoZWVwcm9tX2lkICE9IFJUTDgxOTJFX0VFUFJPTV9JRCkgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJFRVBST00gSUQoJSN4KSBpcyBpbnZhbGlkISFcbiIsIGVlcHJvbV9pZCkpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSB0cnVlOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiQXV0b2xvYWQgT0tcbiIpKTsKKwkJcnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID0gZmFsc2U7CisJfQorCisJaWYgKHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9PSB0cnVlKQorCQlyZXR1cm47CisJLypWSUQgRElEIFNWSUQgU0RJRCovCisJcnRsZWZ1c2UtPmVlcHJvbV92aWQgPSAqKHUxNiAqKSAmaHdpbmZvW0VFUFJPTV9WSURdOworCXJ0bGVmdXNlLT5lZXByb21fZGlkID0gKih1MTYgKikgJmh3aW5mb1tFRVBST01fRElEXTsKKwlydGxlZnVzZS0+ZWVwcm9tX3N2aWQgPSAqKHUxNiAqKSAmaHdpbmZvW0VFUFJPTV9TVklEXTsKKwlydGxlZnVzZS0+ZWVwcm9tX3NtaWQgPSAqKHUxNiAqKSAmaHdpbmZvW0VFUFJPTV9TTUlEXTsKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIkVFUFJPTUlkID0gMHglNHhcbiIsIGVlcHJvbV9pZCkpOworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsCisJCSAoIkVFUFJPTSBWSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV92aWQpKTsKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkgKCJFRVBST00gRElEID0gMHglNHhcbiIsIHJ0bGVmdXNlLT5lZXByb21fZGlkKSk7CisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiRUVQUk9NIFNWSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9zdmlkKSk7CisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiRUVQUk9NIFNNSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9zbWlkKSk7CisJLypjdXN0b21lciBJRCovCisJcnRsZWZ1c2UtPmVlcHJvbV9vZW1pZCA9ICoodTggKikgJmh3aW5mb1tFRVBST01fQ1VTVE9NRVJfSURdOworCWlmIChydGxlZnVzZS0+ZWVwcm9tX29lbWlkID09IDB4RkYpCisJCXJ0bGVmdXNlLT5lZXByb21fb2VtaWQgPSAwOworCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiRUVQUk9NIEN1c3RvbWVyIElEOiAweCUyeFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9vZW1pZCkpOworCS8qRUVQUk9NIHZlcnNpb24qLworCXJ0bGVmdXNlLT5lZXByb21fdmVyc2lvbiA9ICoodTggKikgJmh3aW5mb1tFRVBST01fVkVSU0lPTl07CisJLyptYWMgYWRkcmVzcyovCisJZm9yIChpID0gMDsgaSA8IDY7IGkgKz0gMikgeworCQl1c3ZhbHVlID0gKih1MTYgKikgJmh3aW5mb1tFRVBST01fTUFDX0FERFIgKyBpXTsKKwkJKigodTE2ICopICgmcnRsZWZ1c2UtPmRldl9hZGRyW2ldKSkgPSB1c3ZhbHVlOworCX0KKworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkgKCJkZXZfYWRkcjogJXBNXG4iLCBydGxlZnVzZS0+ZGV2X2FkZHIpKTsKKwkvKmNoYW5uZWwgcGxhbiAqLworCXJ0bGVmdXNlLT5lZXByb21fY2hhbm5lbHBsYW4gPSAqKHU4ICopICZod2luZm9bRUVQUk9NX0NIQU5ORUxQTEFOXTsKKwkvKiBzZXQgY2hhbm5lbCBwYWxuIHRvIHdvcmxkIHdpZGUgMTMgKi8KKwlydGxlZnVzZS0+Y2hhbm5lbF9wbGFuID0gQ09VTlRSWV9DT0RFX1dPUkxEX1dJREVfMTM7CisJLyp0eCBwb3dlciovCisJX3J0bDkyZWVfcmVhZF90eHBvd2VyX2luZm9fZnJvbV9od3BnKGh3LCBydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcsCisJCQkJCSAgICAgaHdpbmZvKTsKKworCXJ0bDkyZWVfcmVhZF9idF9jb2V4aXN0X2luZm9fZnJvbV9od3BnKGh3LCBydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcsCisJCQkJCSAgICAgICBod2luZm8pOworCisJLypib2FyZCB0eXBlKi8KKwlydGxlZnVzZS0+Ym9hcmRfdHlwZSA9ICgoKCoodTggKikgJmh3aW5mb1tFRVBST01fUkZfQk9BUkRfT1BUSU9OXzkyRV0pCisJCQkJJiAweEUwKSA+PiA1KTsKKwlpZiAoKCoodTggKikgJmh3aW5mb1tFRVBST01fUkZfQk9BUkRfT1BUSU9OXzkyRV0pID09IDB4RkYpCisJCXJ0bGVmdXNlLT5ib2FyZF90eXBlID0gMDsKKworCXJ0bGhhbC0+Ym9hZF90eXBlID0gcnRsZWZ1c2UtPmJvYXJkX3R5cGU7CisJLypwYXJzZSB4dGFsKi8KKwlydGxlZnVzZS0+Y3J5c3RhbGNhcCA9IGh3aW5mb1tFRVBST01fWFRBTF85MkVdOworCWlmIChod2luZm9bRUVQUk9NX1hUQUxfOTJFXSA9PSAweEZGKQorCQlydGxlZnVzZS0+Y3J5c3RhbGNhcCA9IDB4MjA7CisKKwkvKmFudGVubmEgZGl2ZXJzaXR5Ki8KKwlydGxlZnVzZS0+YW50ZW5uYV9kaXZfdHlwZSA9IE5PX0FOVERJVjsKKwlydGxlZnVzZS0+YW50ZW5uYV9kaXZfY2ZnID0gMDsKKworCWlmIChydGxoYWwtPm9lbV9pZCA9PSBSVF9DSURfREVGQVVMVCkgeworCQlzd2l0Y2ggKHJ0bGVmdXNlLT5lZXByb21fb2VtaWQpIHsKKwkJY2FzZSBFRVBST01fQ0lEX0RFRkFVTFQ6CisJCQlpZiAocnRsZWZ1c2UtPmVlcHJvbV9kaWQgPT0gMHg4MThCKSB7CisJCQkJaWYgKChydGxlZnVzZS0+ZWVwcm9tX3N2aWQgPT0gMHgxMEVDKSAmJgorCQkJCSAgICAocnRsZWZ1c2UtPmVlcHJvbV9zbWlkID09IDB4MDAxQikpCisJCQkJCXJ0bGhhbC0+b2VtX2lkID0gUlRfQ0lEXzgxOXhfTGVub3ZvOworCQkJfSBlbHNlIHsKKwkJCQlydGxoYWwtPm9lbV9pZCA9IFJUX0NJRF9ERUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydGxoYWwtPm9lbV9pZCA9IFJUX0NJRF9ERUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX2hhbF9jdXN0b21pemVkX2JlaGF2aW9yKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwlwY2lwcml2LT5sZWRjdGwuYmxlZF9vcGVuZHJhaW4gPSB0cnVlOworCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csCisJCSAoIlJUIEN1c3RvbWl6ZWQgSUQ6IDB4JTAyWFxuIiwgcnRsaGFsLT5vZW1faWQpKTsKK30KKwordm9pZCBydGw5MmVlX3JlYWRfZWVwcm9tX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IHRtcF91MWI7CisKKwlydGxoYWwtPnZlcnNpb24gPSBfcnRsOTJlZV9yZWFkX2NoaXBfdmVyc2lvbihodyk7CisJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQxUikKKwkJcnRscHJpdi0+ZG0uYnJmcGF0aF9yeGVuYWJsZVswXSA9IHRydWU7CisJZWxzZQorCQlydGxwcml2LT5kbS5icmZwYXRoX3J4ZW5hYmxlWzBdID0KKwkJICAgIHJ0bHByaXYtPmRtLmJyZnBhdGhfcnhlbmFibGVbMV0gPSB0cnVlOworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiVmVyc2lvbklEID0gMHglNHhcbiIsCisJCQkJCQlydGxoYWwtPnZlcnNpb24pKTsKKwl0bXBfdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfOTM0NkNSKTsKKwlpZiAodG1wX3UxYiAmIEJJVCg0KSkgeworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19ETUVTRywgKCJCb290IGZyb20gRUVQUk9NXG4iKSk7CisJCXJ0bGVmdXNlLT5lcHJvbXR5cGUgPSBFRVBST01fOTNDNDY7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csICgiQm9vdCBmcm9tIEVGVVNFXG4iKSk7CisJCXJ0bGVmdXNlLT5lcHJvbXR5cGUgPSBFRVBST01fQk9PVF9FRlVTRTsKKwl9CisJaWYgKHRtcF91MWIgJiBCSVQoNSkpIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwgKCJBdXRvbG9hZCBPS1xuIikpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSBmYWxzZTsKKwkJX3J0bDkyZWVfcmVhZF9hZGFwdGVyX2luZm8oaHcpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgiQXV0b2xvYWQgRVJSISFcbiIpKTsKKwl9CisJX3J0bDkyZWVfaGFsX2N1c3RvbWl6ZWRfYmVoYXZpb3IoaHcpOworCisJcnRscGh5LT5yZnBhdGhfcnhfZW5hYmxlWzBdID0gdHJ1ZTsKKwlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIpCisJCXJ0bHBoeS0+cmZwYXRoX3J4X2VuYWJsZVsxXSA9IHRydWU7Cit9CisKK3N0YXRpYyB1OCBfcnRsOTJlZV9tcmF0ZV9pZHhfdG9fYXJmcl9pZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcmF0ZV9pbmRleCkKK3sKKwl1OCByZXQgPSAwOworCisJc3dpdGNoIChyYXRlX2luZGV4KSB7CisJY2FzZSBSQVRSX0lOWF9XSVJFTEVTU19OR0I6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgUkFUUl9JTlhfV0lSRUxFU1NfTjoKKwljYXNlIFJBVFJfSU5YX1dJUkVMRVNTX05HOgorCQlyZXQgPSA0OworCQlicmVhazsKKwljYXNlIFJBVFJfSU5YX1dJUkVMRVNTX05COgorCQlyZXQgPSAyOworCQlicmVhazsKKwljYXNlIFJBVFJfSU5YX1dJUkVMRVNTX0dCOgorCQlyZXQgPSA2OworCQlicmVhazsKKwljYXNlIFJBVFJfSU5YX1dJUkVMRVNTX0c6CisJCXJldCA9IDc7CisJCWJyZWFrOworCWNhc2UgUkFUUl9JTlhfV0lSRUxFU1NfQjoKKwkJcmV0ID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCQkgdTggcnNzaV9sZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisJdTMyIHJhdHJfYml0bWFwOworCXU4IHJhdHJfaW5kZXg7CisJdTggYl9jdXJ0eGJ3XzQwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKQorCQkJICAgICA/IDEgOiAwOworCXU4IGJfY3Vyc2hvcnRnaV80MG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkgPworCQkJCTEgOiAwOworCXU4IGJfY3Vyc2hvcnRnaV8yMG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkgPworCQkJCTEgOiAwOworCWVudW0gd2lyZWxlc3NfbW9kZSB3aXJlbGVzc21vZGUgPSAwOworCWJvb2wgYl9zaG9ydGdpID0gZmFsc2U7CisJdTggcmF0ZV9tYXNrWzddID0gezB9OworCXU4IG1hY2lkID0gMDsKKwkvKnU4IG1pbW9fcHMgPSBJRUVFODAyMTFfU01QU19PRkY7Ki8KKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OworCXdpcmVsZXNzbW9kZSA9IHN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZTsKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAorCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQliX2N1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOworCWVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJbWFjaWQgPSBzdGEtPmFpZCArIDE7CisKKwlyYXRyX2JpdG1hcCA9IHN0YS0+c3VwcF9yYXRlc1swXTsKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJhdHJfYml0bWFwID0gMHhmZmY7CisKKwlyYXRyX2JpdG1hcCB8PSAoc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPDwgMjAgfAorCQkJc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPDwgMTIpOworCisJc3dpdGNoICh3aXJlbGVzc21vZGUpIHsKKwljYXNlIFdJUkVMRVNTX01PREVfQjoKKwkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0I7CisJCWlmIChyYXRyX2JpdG1hcCAmIDB4MDAwMDAwMGMpCisJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDAwMDBkOworCQllbHNlCisJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDAwMDBmOworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfRzoKKwkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0dCOworCisJCWlmIChyc3NpX2xldmVsID09IDEpCisJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDAwZjAwOworCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDAwZmYwOworCQllbHNlCisJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDAwZmY1OworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6CisJCWlmIChiX2N1cnR4YndfNDBtaHopCisJCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkdCOworCQllbHNlCisJCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkI7CisKKwkJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSKSB7CisJCQlpZiAoYl9jdXJ0eGJ3XzQwbWh6KSB7CisJCQkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmMDAwMDsKKwkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMDA7CisJCQkJZWxzZQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDE1OworCQkJfSBlbHNlIHsKKwkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOworCQkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjAwMDsKKwkJCQllbHNlCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMDU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYl9jdXJ0eGJ3XzQwbWh6KSB7CisJCQkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmMDAwMDsKKwkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MGZmZmYwMDA7CisJCQkJZWxzZQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmZmZmMDE1OworCQkJfSBlbHNlIHsKKwkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmOGYwMDAwOworCQkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZmZmZjAwMDsKKwkJCQllbHNlCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MGZmZmYwMDU7CisJCQl9CisJCX0KKworCQlpZiAoKGJfY3VydHhid180MG1oeiAmJiBiX2N1cnNob3J0Z2lfNDBtaHopIHx8CisJCSAgICAoIWJfY3VydHhid180MG1oeiAmJiBiX2N1cnNob3J0Z2lfMjBtaHopKSB7CisKKwkJCWlmIChtYWNpZCA9PSAwKQorCQkJCWJfc2hvcnRnaSA9IHRydWU7CisJCQllbHNlIGlmIChtYWNpZCA9PSAxKQorCQkJCWJfc2hvcnRnaSA9IGZhbHNlOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisKKwkJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSKQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjBmZjsKKwkJZWxzZQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmZjBmZjsKKwkJYnJlYWs7CisJfQorCXJhdHJfaW5kZXggPSBfcnRsOTJlZV9tcmF0ZV9pZHhfdG9fYXJmcl9pZChodywgcmF0cl9pbmRleCk7CisJc3RhX2VudHJ5LT5yYXRyX2luZGV4ID0gcmF0cl9pbmRleDsKKworCVJUX1RSQUNFKENPTVBfUkFUUiwgREJHX0RNRVNHLAorCQkgKCJyYXRyX2JpdG1hcCA6JXhcbiIsIHJhdHJfYml0bWFwKSk7CisJKih1MzIgKikgJnJhdGVfbWFzayA9IChyYXRyX2JpdG1hcCAmIDB4MGZmZmZmZmYpIHwKKwkJCQkgICAgICAgKHJhdHJfaW5kZXggPDwgMjgpOworCXJhdGVfbWFza1swXSA9IG1hY2lkOworCXJhdGVfbWFza1sxXSA9IHJhdHJfaW5kZXggfCAoYl9zaG9ydGdpID8gMHg4MCA6IDB4MDApOworCXJhdGVfbWFza1syXSA9IGJfY3VydHhid180MG1oejsKKwlyYXRlX21hc2tbM10gPSAodTgpKHJhdHJfYml0bWFwICYgMHgwMDAwMDBmZik7CisJcmF0ZV9tYXNrWzRdID0gKHU4KSgocmF0cl9iaXRtYXAgJiAweDAwMDBmZjAwKSA+PiA4KTsKKwlyYXRlX21hc2tbNV0gPSAodTgpKChyYXRyX2JpdG1hcCAmIDB4MDBmZjAwMDApID4+IDE2KTsKKwlyYXRlX21hc2tbNl0gPSAodTgpKChyYXRyX2JpdG1hcCAmIDB4ZmYwMDAwMDApID4+IDI0KTsKKwlSVF9UUkFDRShDT01QX1JBVFIsIERCR19ETUVTRywKKwkJICgiUmF0ZV9pbmRleDoleCwgcmF0cl92YWw6JXgsICV4OiV4OiV4OiV4OiV4OiV4OiV4XG4iLAorCQkgIHJhdHJfaW5kZXgsIHJhdHJfYml0bWFwLCByYXRlX21hc2tbMF0sIHJhdGVfbWFza1sxXSwKKwkJICByYXRlX21hc2tbMl0sIHJhdGVfbWFza1szXSwgcmF0ZV9tYXNrWzRdLAorCQkgIHJhdGVfbWFza1s1XSwgcmF0ZV9tYXNrWzZdKSk7CisJcnRsOTJlZV9maWxsX2gyY19jbWQoaHcsIEgyQ185MkVfUkFfTUFTSywgNywgcmF0ZV9tYXNrKTsKKwlfcnRsOTJlZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCBCSVQoMyksIDApOworfQorCisKK3ZvaWQgcnRsOTJlZV91cGRhdGVfaGFsX3JhdGVfdGJsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCByc3NpX2xldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5kbS5iX3VzZXJhbWFzaykKKwkJcnRsOTJlZV91cGRhdGVfaGFsX3JhdGVfbWFzayhodywgc3RhLCByc3NpX2xldmVsKTsKK30KKwordm9pZCBydGw5MmVlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBzaWZzX3RpbWVyOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TTE9UX1RJTUUsCisJCQkJICAgICAgKHU4ICopICZtYWMtPnNsb3RfdGltZSk7CisJaWYgKCFtYWMtPmh0X2VuYWJsZSkKKwkJc2lmc190aW1lciA9IDB4MGEwYTsKKwllbHNlCisJCXNpZnNfdGltZXIgPSAweDBlMGU7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TSUZTLCAodTggKikgJnNpZnNfdGltZXIpOworfQorCitib29sIHJ0bDkyZWVfZ3Bpb19yYWRpb19vbl9vZmZfY2hlY2tpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICp2YWxpZCkKK3sKKwkqdmFsaWQgPSAxOworCXJldHVybiB0cnVlOworfQorCit2b2lkIHJ0bDkyZWVfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGtleV9pbmRleCwKKwkJICAgICB1OCAqcF9tYWNhZGRyLCBib29sIGlzX2dyb3VwLCB1OCBlbmNfYWxnbywKKwkJICAgICBib29sIGlzX3dlcGtleSwgYm9vbCBjbGVhcl9hbGwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCAqbWFjYWRkciA9IHBfbWFjYWRkcjsKKwl1MzIgZW50cnlfaWQgPSAwOworCWJvb2wgaXNfcGFpcndpc2UgPSBmYWxzZTsKKworCXN0YXRpYyB1OCBjYW1fY29uc3RfYWRkcls0XVs2XSA9IHsKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDN9CisJfTsKKwlzdGF0aWMgdTggY2FtX2NvbnN0X2Jyb2FkW10gPSB7CisJCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKwl9OworCisJaWYgKGNsZWFyX2FsbCkgeworCQl1OCBpZHggPSAwOworCQl1OCBjYW1fb2Zmc2V0ID0gMDsKKwkJdTggY2xlYXJfbnVtYmVyID0gNTsKKworCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImNsZWFyX2FsbFxuIikpOworCisJCWZvciAoaWR4ID0gMDsgaWR4IDwgY2xlYXJfbnVtYmVyOyBpZHgrKykgeworCQkJc3RnX3J0bF9jYW1fbWFya19pbnZhbGlkKGh3LCBjYW1fb2Zmc2V0ICsgaWR4KTsKKwkJCXN0Z19ydGxfY2FtX2VtcHR5X2VudHJ5KGh3LCBjYW1fb2Zmc2V0ICsgaWR4KTsKKworCQkJaWYgKGlkeCA8IDUpIHsKKwkJCQltZW1zZXQocnRscHJpdi0+c2VjLmtleV9idWZbaWR4XSwgMCwKKwkJCQkgICAgICAgTUFYX0tFWV9MRU4pOworCQkJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2lkeF0gPSAwOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGVuY19hbGdvKSB7CisJCWNhc2UgV0VQNDBfRU5DUllQVElPTjoKKwkJCWVuY19hbGdvID0gQ0FNX1dFUDQwOworCQkJYnJlYWs7CisJCWNhc2UgV0VQMTA0X0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9XRVAxMDQ7CisJCQlicmVhazsKKwkJY2FzZSBUS0lQX0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCWNhc2UgQUVTQ0NNUF9FTkNSWVBUSU9OOgorCQkJZW5jX2FsZ28gPSBDQU1fQUVTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0xPVUQsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3MgXG4iKSk7CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXNfd2Vwa2V5IHx8IHJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSkgeworCQkJbWFjYWRkciA9IGNhbV9jb25zdF9hZGRyW2tleV9pbmRleF07CisJCQllbnRyeV9pZCA9IGtleV9pbmRleDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc19ncm91cCkgeworCQkJCW1hY2FkZHIgPSBjYW1fY29uc3RfYnJvYWQ7CisJCQkJZW50cnlfaWQgPSBrZXlfaW5kZXg7CisJCQl9IGVsc2UgeworCQkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkJCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCQkJCWVudHJ5X2lkID0gc3RnX3J0bF9jYW1fZ2V0X2ZyZWVfZW50cnkoaHcsCisJCQkJCQkJCSAgICAgcF9tYWNhZGRyKTsKKwkJCQkJaWYgKGVudHJ5X2lkID49ICBUT1RBTF9DQU1fRU5UUlkpIHsKKwkJCQkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkJCQkJICgiQ2FuIG5vdCBmaW5kIGZyZWUgaHcgc2VjdXJpdHkgY2FtIGVudHJ5XG4iKSk7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQllbnRyeV9pZCA9IENBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT047CisJCQkJfQorCisJCQkJa2V5X2luZGV4ID0gUEFJUldJU0VfS0VZSURYOworCQkJCWlzX3BhaXJ3aXNlID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCWlmIChydGxwcml2LT5zZWMua2V5X2xlbltrZXlfaW5kZXhdID09IDApIHsKKwkJCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgiZGVsZXRlIG9uZSBlbnRyeSwgZW50cnlfaWQgaXMgJWRcbiIsCisJCQkJIGVudHJ5X2lkKSk7CisJCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQkJCXN0Z19ydGxfY2FtX2RlbF9lbnRyeShodywgcF9tYWNhZGRyKTsKKwkJCXN0Z19ydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoaHcsIHBfbWFjYWRkciwgZW50cnlfaWQpOworCQl9IGVsc2UgeworCQkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywgKCJhZGQgb25lIGVudHJ5XG4iKSk7CisJCQlpZiAoaXNfcGFpcndpc2UpIHsKKwkJCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCQkgKCJzZXQgUGFpcndpYXNlIGtleVxuIikpOworCisJCQkJc3RnX3J0bF9jYW1fYWRkX29uZV9lbnRyeShodywgbWFjYWRkciwga2V5X2luZGV4LAorCQkJCQkgICAgICAgZW50cnlfaWQsIGVuY19hbGdvLAorCQkJCQkgICAgICAgQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJICAgICAgIHJ0bHByaXYtPnNlYy5rZXlfYnVmW2tleV9pbmRleF0pOworCQkJfSBlbHNlIHsKKwkJCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCQkgKCJzZXQgZ3JvdXAga2V5XG4iKSk7CisKKwkJCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJCQkJc3RnX3J0bF9jYW1fYWRkX29uZV9lbnRyeShodywKKwkJCQkJCXJ0bGVmdXNlLT5kZXZfYWRkciwKKwkJCQkJCVBBSVJXSVNFX0tFWUlEWCwKKwkJCQkJCUNBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT04sCisJCQkJCQllbmNfYWxnbywgQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJCXJ0bHByaXYtPnNlYy5rZXlfYnVmW2VudHJ5X2lkXSk7CisJCQkJfQorCisJCQkJc3RnX3J0bF9jYW1fYWRkX29uZV9lbnRyeShodywgbWFjYWRkciwga2V5X2luZGV4LAorCQkJCQkJZW50cnlfaWQsIGVuY19hbGdvLAorCQkJCQkJQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJCXJ0bHByaXYtPnNlYy5rZXlfYnVmW2VudHJ5X2lkXSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgcnRsOTJlZV9yZWFkX2J0X2NvZXhpc3RfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICBib29sIGF1dG9fbG9hZF9mYWlsLCB1OCAqaHdpbmZvKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB2YWx1ZTsKKworCWlmICghYXV0b19sb2FkX2ZhaWwpIHsKKwkJdmFsdWUgPSBod2luZm9bRUVQUk9NX1JGX0JPQVJEX09QVElPTl85MkVdOworCQlpZiAoKCh2YWx1ZSAmIDB4ZTApID4+IDUpID09IDB4MSkKKwkJCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfaW5mby5idGNvZXhpc3QgPSAxOworCQllbHNlCisJCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX2luZm8uYnRjb2V4aXN0ID0gMDsKKworCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX2luZm8uYnRfdHlwZSA9IEJUX1JUTDgxOTJFOworCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX2luZm8uYW50X251bSA9IEFOVF9UT1RBTF9YMjsKKwl9IGVsc2UgeworCQlydGxwcml2LT5idGNvZXhpc3QuYnRjX2luZm8uYnRjb2V4aXN0ID0gMTsKKwkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19pbmZvLmJ0X3R5cGUgPSBCVF9SVEw4MTkyRTsKKwkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19pbmZvLmFudF9udW0gPSBBTlRfVE9UQUxfWDE7CisJfQorfQorCit2b2lkIHJ0bDkyZWVfYnRfcmVnX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKworCS8qIDA6TG93LCAxOkhpZ2gsIDI6RnJvbSBFZnVzZS4gKi8KKwlydGxwY2lwcml2LT5idGNvZXhpc3QuYl9yZWdfYnRfaXNvID0gMjsKKwkvKiAwOklkbGUsIDE6Tm9uZS1TQ08sIDI6U0NPLCAzOkZyb20gQ291bnRlci4gKi8KKwlydGxwY2lwcml2LT5idGNvZXhpc3QuYl9yZWdfYnRfc2NvID0gMzsKKwkvKiAwOkRpc2FibGUgQlQgY29udHJvbCBBLU1QRFUsIDE6RW5hYmxlIEJUIGNvbnRyb2wgQS1NUERVLiAqLworCXJ0bHBjaXByaXYtPmJ0Y29leGlzdC5iX3JlZ19idF9zY28gPSAwOworfQorCit2b2lkIHJ0bDkyZWVfYnRfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9idGNfc3RhdHVzKCkpIHsKKwkJcnRscHJpdi0+YnRjb2V4aXN0LmJ0Y19vcHMtPmJ0Y19pbml0X2h3X2NvbmZpZyhydGxwcml2KTsKKwl9Cit9CisKK3ZvaWQgcnRsOTJlZV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQorCit2b2lkIHJ0bDkyZWVfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQorCisvKiBUdXJuIG9uIEFBUCAoUkNSOmJpdCAwKSBmb3IgcHJvbWljdW91cyBtb2RlLiAqLwordm9pZCBydGw5MmVlX2FsbG93X2FsbF9kZXN0YWRkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlib29sIGFsbG93X2FsbF9kYSwgYm9vbCB3cml0ZV9pbnRvX3JlZykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCWlmIChhbGxvd19hbGxfZGEpCS8qIFNldCBCSVQwICovCisJCXJ0bHBjaS0+cmVjZWl2ZV9jb25maWcgfD0gUkNSX0FBUDsKKwllbHNlCQkJLyogQ2xlYXIgQklUMCAqLworCQlydGxwY2ktPnJlY2VpdmVfY29uZmlnICY9IH5SQ1JfQUFQOworCisJaWYgKHdyaXRlX2ludG9fcmVnKQorCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JDUiwgcnRscGNpLT5yZWNlaXZlX2NvbmZpZyk7CisKKwlSVF9UUkFDRShDT01QX1RVUkJPIHwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgicmVjZWl2ZV9jb25maWcgPSAweCUwOFgsIHdyaXRlX2ludG9fcmVnID0lZFxuIiwKKwkJICBydGxwY2ktPnJlY2VpdmVfY29uZmlnLCB3cml0ZV9pbnRvX3JlZykpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5ZDdiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2h3LmgKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVEw5MkVfSFdfSF9fCisjZGVmaW5lIF9fUlRMOTJFX0hXX0hfXworCisKK3ZvaWQgcnRsOTJlZV9nZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7Cit2b2lkIHJ0bDkyZWVfcmVhZF9lZXByb21faW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfaW50ZXJydXB0X3JlY29nbml6ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICB1MzIgKnBfaW50YSwgdTMyICpwX2ludGIpOworaW50IHJ0bDkyZWVfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfY2FyZF9kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9kaXNhYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgcnRsOTJlZV9zZXRfbmV0d29ya190eXBlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpOwordm9pZCBydGw5MmVlX3NldF9jaGVja19ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBjaGVja19ic3NpZCk7Cit2b2lkIHJ0bDkyZWVfc2V0X3FvcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGFjaSk7Cit2b2lkIHJ0bDkyZWVfc2V0X2JlYWNvbl9yZWxhdGVkX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfc2V0X2JlYWNvbl9pbnRlcnZhbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfdXBkYXRlX2ludGVycnVwdF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKK3ZvaWQgcnRsOTJlZV9zZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7Cit2b2lkIHJ0bDkyZWVfdXBkYXRlX2hhbF9yYXRlX3RibChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggcnNzaV9sZXZlbCk7Cit2b2lkIHJ0bDkyZWVfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmVlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqdmFsaWQpOwordm9pZCBydGw5MmVlX2VuYWJsZV9od19zZWN1cml0eV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVlX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBrZXlfaW5kZXgsCisJCSAgICAgdTggKnBfbWFjYWRkciwgYm9vbCBpc19ncm91cCwgdTggZW5jX2FsZ28sCisJCSAgICAgYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKK3ZvaWQgcnRsOTJlZV9yZWFkX2J0X2NvZXhpc3RfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICBib29sIGF1dG9sb2FkX2ZhaWwsIHU4ICpod2luZm8pOwordm9pZCBydGw5MmVlX2J0X3JlZ19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9idF9od19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmVlX2FsbG93X2FsbF9kZXN0YWRkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhbGxvd19hbGxfZGEsCisJCQkJYm9vbCB3cml0ZV9pbnRvX3JlZyk7Cit2b2lkIHJ0bDkyZWVfZndfY2xrX29mZl90aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9sZWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9sZWQuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgInJlZy5oIgorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9pbml0X2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBydGxfbGVkICpwbGVkLCBlbnVtIHJ0bF9sZWRfcGluIGxlZHBpbikKK3sKKwlwbGVkLT5odyA9IGh3OworCXBsZWQtPmxlZHBpbiA9IGxlZHBpbjsKKwlwbGVkLT5iX2xlZG9uID0gZmFsc2U7Cit9CisKK3ZvaWQgcnRsOTJlZV9zd19sZWRfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKQoreworCXUzMiBsZWRjZmc7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJUlRfVFJBQ0UoQ09NUF9MRUQsIERCR19MT1VELAorCQkgKCJMZWRBZGRyOiVYIGxlZHBpbiA9JWRcbiIsIFJFR19MRURDRkcyLCBwbGVkLT5sZWRwaW4pKTsKKworCXN3aXRjaCAocGxlZC0+bGVkcGluKSB7CisJY2FzZSBMRURfUElOX0dQSU8wOgorCQlicmVhazsKKwljYXNlIExFRF9QSU5fTEVEMDoKKwkJbGVkY2ZnID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwpIHwgQklUKDIxKTsKKwkJbGVkY2ZnICY9IH5CSVQoMTMpICYgfkJJVCgyOSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgbGVkY2ZnKTsKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDE6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisJcGxlZC0+Yl9sZWRvbiA9IHRydWU7Cit9CisKK3ZvaWQgcnRsOTJlZV9zd19sZWRfb2ZmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX2xlZCAqcGxlZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGxlZGNmZzsKKworCVJUX1RSQUNFKENPTVBfTEVELCBEQkdfTE9VRCwKKwkJICgiTGVkQWRkcjolWCBsZWRwaW4gPSVkXG4iLCBSRUdfTEVEQ0ZHMiwgcGxlZC0+bGVkcGluKSk7CisKKwlzd2l0Y2ggKHBsZWQtPmxlZHBpbikgeworCWNhc2UgTEVEX1BJTl9HUElPMDoKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDA6CisJCWxlZGNmZyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYgLCBSRUdfR1BJT19QSU5fQ1RSTCkgfCB+QklUKDIxKTsKKwkJbGVkY2ZnICY9IH5CSVQoMjkpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwsIGxlZGNmZyk7CisJCWJyZWFrOworCWNhc2UgTEVEX1BJTl9MRUQxOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0xPVUQsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisJcGxlZC0+Yl9sZWRvbiA9IGZhbHNlOworfQorCit2b2lkIHJ0bDkyZWVfaW5pdF9zd19sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJX3J0bDkyZWVfaW5pdF9sZWQoaHcsICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApLCBMRURfUElOX0xFRDApOworCV9ydGw5MmVlX2luaXRfbGVkKGh3LCAmKHBjaXByaXYtPmxlZGN0bC5zd19sZWQxKSwgTEVEX1BJTl9MRUQxKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfc3dfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbGVkICpwTGVkMCA9ICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApOworCXN3aXRjaCAobGVkYWN0aW9uKSB7CisJY2FzZSBMRURfQ1RMX1BPV0VSX09OOgorCWNhc2UgTEVEX0NUTF9MSU5LOgorCWNhc2UgTEVEX0NUTF9OT19MSU5LOgorCQlydGw5MmVlX3N3X2xlZF9vbihodywgcExlZDApOworCQlicmVhazsKKwljYXNlIExFRF9DVExfUE9XRVJfT0ZGOgorCQlydGw5MmVlX3N3X2xlZF9vZmYoaHcsIHBMZWQwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHJ0bDkyZWVfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAoKHBwc2MtPnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykgJiYKKwkgICAgKGxlZGFjdGlvbiA9PSBMRURfQ1RMX1RYIHx8CisJICAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9SWCB8fAorCSAgICAgbGVkYWN0aW9uID09IExFRF9DVExfU0lURV9TVVJWRVkgfHwKKwkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX0xJTksgfHwKKwkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX05PX0xJTksgfHwKKwkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1NUQVJUX1RPX0xJTksgfHwKKwkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1BPV0VSX09OKSkgeworCQlyZXR1cm47CisJfQorCVJUX1RSQUNFKENPTVBfTEVELCBEQkdfVFJBQ0UsICgibGVkYWN0aW9uICVkLFxuIiwgbGVkYWN0aW9uKSk7CisJX3J0bDkyZWVfc3dfbGVkX2NvbnRyb2woaHcsIGxlZGFjdGlvbik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9sZWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMDJlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9sZWQuaApAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyRV9MRURfSF9fCisjZGVmaW5lIF9fUlRMOTJFX0xFRF9IX18KKwordm9pZCBydGw5MmVlX2luaXRfc3dfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyZWVfc3dfbGVkX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX2xlZCAqcGxlZCk7Cit2b2lkIHJ0bDkyZWVfc3dfbGVkX29mZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9sZWQgKnBsZWQpOwordm9pZCBydGw5MmVlX2xlZF9jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIGxlZF9jdGxfbW9kZSBsZWRhY3Rpb24pOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWYyODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9waHkuYwpAQCAtMCwwICsxLDMyODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICIuLi9wcy5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgInJmLmgiCisjaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlICJ0YWJsZS5oIgorCitzdGF0aWMgdTMyIF9ydGw5MmVlX3BoeV9yZl9zZXJpYWxfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCk7CitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKKwkJCQkJIHUzMiBkYXRhKTsKK3N0YXRpYyB1MzIgX3J0bDkyZWVfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQodTMyIGJpdG1hc2spOworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X2JiODE5MmVlX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgYm9vbCBfcnRsOTJlZV9waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgICB1OCBjb25maWd0eXBlKTsKK3N0YXRpYyBib29sIF9ydGw5MmVlX3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgICAgIHU4IGNvbmZpZ3R5cGUpOworc3RhdGljIHZvaWQgX3J0bDkyZWVfcGh5X2luaXRfYmJfcmZfcmVnaXN0ZXJfZGVmaW5pdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgYm9vbCBfcnRsOTJlZV9waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCisJCQkJCSAgICAgIHUzMiBjbWR0YWJsZWlkeCwgdTMyIGNtZHRhYmxlc3osCisJCQkJCSAgICAgIGVudW0gc3djaG5sY21kX2lkIGNtZGlkLAorCQkJCQkgICAgICB1MzIgcGFyYTEsIHUzMiBwYXJhMiwKKwkJCQkJICAgICAgdTMyIG1zZGVsYXkpOworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X3N3X2Nobmxfc3RlcF9ieV9zdGVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1OCBjaGFubmVsLCB1OCAqc3RhZ2UsCisJCQkJCSAgICAgIHU4ICpzdGVwLCB1MzIgKmRlbGF5KTsKK3N0YXRpYyBsb25nIF9ydGw5MmVlX3BoeV90eHB3cl9pZHhfdG9fZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIGVudW0gd2lyZWxlc3NfbW9kZSB3aXJlbGVzc21vZGUsCisJCQkJCSAgdTggdHhwd3JpZHgpOworc3RhdGljIHZvaWQgcnRsOTJlZV9waHlfc2V0X3JmX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfcGh5X3NldF9pbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKK3UzMiBydGw5MmVlX3BoeV9xdWVyeV9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIHJldHVybnZhbHVlLCBvcmlnaW5hbHZhbHVlLCBiaXRzaGlmdDsKKworCVJUX1RSQUNFKENPTVBfUkYsIERCR19UUkFDRSwKKwkJICgicmVnYWRkciglI3gpLCBiaXRtYXNrKCUjeClcbiIsIHJlZ2FkZHIsIGJpdG1hc2spKTsKKwlvcmlnaW5hbHZhbHVlID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgcmVnYWRkcik7CisJYml0c2hpZnQgPSBfcnRsOTJlZV9waHlfY2FsY3VsYXRlX2JpdF9zaGlmdChiaXRtYXNrKTsKKwlyZXR1cm52YWx1ZSA9IChvcmlnaW5hbHZhbHVlICYgYml0bWFzaykgPj4gYml0c2hpZnQ7CisKKwlSVF9UUkFDRShDT01QX1JGLCBEQkdfVFJBQ0UsCisJCSAoIkJCUiBNQVNLID0gMHgleCBBZGRyWzB4JXhdPSAweCV4XG4iLAorCQkgIGJpdG1hc2ssIHJlZ2FkZHIsIG9yaWdpbmFsdmFsdWUpKTsKKworCXJldHVybiByZXR1cm52YWx1ZTsKK30KKwordm9pZCBydGw5MmVlX3BoeV9zZXRfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcmVnYWRkciwKKwkJCSAgICB1MzIgYml0bWFzaywgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBvcmlnaW5hbHZhbHVlLCBiaXRzaGlmdDsKKworCVJUX1RSQUNFKENPTVBfUkYsIERCR19UUkFDRSwKKwkJICgicmVnYWRkciglI3gpLCBiaXRtYXNrKCUjeCksIGRhdGEoJSN4KVxuIiwKKwkJICByZWdhZGRyLCBiaXRtYXNrLCBkYXRhKSk7CisKKwlpZiAoYml0bWFzayAhPSBNQVNLRFdPUkQpIHsKKwkJb3JpZ2luYWx2YWx1ZSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIHJlZ2FkZHIpOworCQliaXRzaGlmdCA9IF9ydGw5MmVlX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCQlkYXRhID0gKChvcmlnaW5hbHZhbHVlICYgKH5iaXRtYXNrKSkgfCAoZGF0YSA8PCBiaXRzaGlmdCkpOworCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCByZWdhZGRyLCBkYXRhKTsKKworCVJUX1RSQUNFKENPTVBfUkYsIERCR19UUkFDRSwKKwkJICgicmVnYWRkciglI3gpLCBiaXRtYXNrKCUjeCksIGRhdGEoJSN4KVxuIiwKKwkJICByZWdhZGRyLCBiaXRtYXNrLCBkYXRhKSk7Cit9CisKK3UzMiBydGw5MmVlX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIG9yaWdpbmFsX3ZhbHVlLCByZWFkYmFja192YWx1ZSwgYml0c2hpZnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVJUX1RSQUNFKENPTVBfUkYsIERCR19UUkFDRSwKKwkJICgicmVnYWRkciglI3gpLCByZnBhdGgoJSN4KSwgYml0bWFzayglI3gpXG4iLAorCQkgIHJlZ2FkZHIsIHJmcGF0aCwgYml0bWFzaykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCisJb3JpZ2luYWxfdmFsdWUgPSBfcnRsOTJlZV9waHlfcmZfc2VyaWFsX3JlYWQoaHcgLCByZnBhdGgsIHJlZ2FkZHIpOworCWJpdHNoaWZ0ID0gX3J0bDkyZWVfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQoYml0bWFzayk7CisJcmVhZGJhY2tfdmFsdWUgPSAob3JpZ2luYWxfdmFsdWUgJiBiaXRtYXNrKSA+PiBiaXRzaGlmdDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCVJUX1RSQUNFKENPTVBfUkYsIERCR19UUkFDRSwKKwkJICgicmVnYWRkciglI3gpLCByZnBhdGgoJSN4KSwgYml0bWFzayglI3gpLCBvcmlnaW5hbF92YWx1ZSglI3gpXG4iLAorCQkgIHJlZ2FkZHIsIHJmcGF0aCwgYml0bWFzaywgb3JpZ2luYWxfdmFsdWUpKTsKKworCXJldHVybiByZWFkYmFja192YWx1ZTsKK30KKwordm9pZCBydGw5MmVlX3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIGFkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIG9yaWdpbmFsX3ZhbHVlLCBiaXRzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX1RSQUNFLAorCQkgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwgZGF0YSglI3gpLCByZnBhdGgoJSN4KVxuIiwKKwkJICBhZGRyLCBiaXRtYXNrLCBkYXRhLCByZnBhdGgpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrLCBmbGFncyk7CisKKwlpZiAoYml0bWFzayAhPSBSRlJFR19PRkZTRVRfTUFTSykgeworCQlvcmlnaW5hbF92YWx1ZSA9IF9ydGw5MmVlX3BoeV9yZl9zZXJpYWxfcmVhZChodywgcmZwYXRoLCBhZGRyKTsKKwkJYml0c2hpZnQgPSBfcnRsOTJlZV9waHlfY2FsY3VsYXRlX2JpdF9zaGlmdChiaXRtYXNrKTsKKwkJZGF0YSA9IChvcmlnaW5hbF92YWx1ZSAmICh+Yml0bWFzaykpIHwgKGRhdGEgPDwgYml0c2hpZnQpOworCX0KKworCV9ydGw5MmVlX3BoeV9yZl9zZXJpYWxfd3JpdGUoaHcsIHJmcGF0aCwgYWRkciwgZGF0YSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrLCBmbGFncyk7CisKKwlSVF9UUkFDRShDT01QX1JGLCBEQkdfVFJBQ0UsCisJCSAoInJlZ2FkZHIoJSN4KSwgYml0bWFzayglI3gpLCBkYXRhKCUjeCksIHJmcGF0aCglI3gpXG4iLAorCQkgIGFkZHIsIGJpdG1hc2ssIGRhdGEsIHJmcGF0aCkpOworfQorCitzdGF0aWMgdTMyIF9ydGw5MmVlX3BoeV9yZl9zZXJpYWxfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZyA9ICZydGxwaHktPnBoeXJlZ19kZWZbcmZwYXRoXTsKKwl1MzIgbmV3b2Zmc2V0OworCXUzMiB0bXBsb25nLCB0bXBsb25nMjsKKwl1OCByZnBpX2VuYWJsZSA9IDA7CisJdTMyIHJldHZhbHVlOworCisJb2Zmc2V0ICY9IDB4ZmY7CisJbmV3b2Zmc2V0ID0gb2Zmc2V0OworCWlmIChSVF9DQU5OT1RfSU8oaHcpKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgicmV0dXJuIGFsbCBvbmVcbiIpKTsKKwkJcmV0dXJuIDB4RkZGRkZGRkY7CisJfQorCXRtcGxvbmcgPSBydGxfZ2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsIE1BU0tEV09SRCk7CisJaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQSkKKwkJdG1wbG9uZzIgPSB0bXBsb25nOworCWVsc2UKKwkJdG1wbG9uZzIgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmhzc2lfcGFyYTIsIE1BU0tEV09SRCk7CisJdG1wbG9uZzIgPSAodG1wbG9uZzIgJiAofkJMU1NJUkVBREFERFJFU1MpKSB8CisJCSAgIChuZXdvZmZzZXQgPDwgMjMpIHwgQkxTU0lSRUFERURHRTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsIE1BU0tEV09SRCwKKwkJICAgICAgdG1wbG9uZyAmICh+QkxTU0lSRUFERURHRSkpOworCW1kZWxheSgxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmhzc2lfcGFyYTIsIE1BU0tEV09SRCwgdG1wbG9uZzIpOworCW1kZWxheSgxKTsKKwltZGVsYXkoMSk7CisJaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQSkKKwkJcmZwaV9lbmFibGUgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMSwKKwkJCQkJCSBCSVQoOCkpOworCWVsc2UgaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQikKKwkJcmZwaV9lbmFibGUgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQl9IU1NJUEFSQU1FVEVSMSwKKwkJCQkJCSBCSVQoOCkpOworCWlmIChyZnBpX2VuYWJsZSkKKwkJcmV0dmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2twaSwKKwkJCQkJIEJMU1NJUkVBREJBQ0tEQVRBKTsKKwllbHNlCisJCXJldHZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZsc3NpX3JlYWRiYWNrLAorCQkJCQkgQkxTU0lSRUFEQkFDS0RBVEEpOworCVJUX1RSQUNFKENPTVBfUkYsIERCR19UUkFDRSwKKwkJICgiUkZSLSVkIEFkZHJbMHgleF09IDB4JXhcbiIsCisJCSAgcmZwYXRoLCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2ssIHJldHZhbHVlKSk7CisJcmV0dXJuIHJldHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKKwkJCQkJIHUzMiBkYXRhKQoreworCXUzMiBkYXRhX2FuZF9hZGRyOworCXUzMiBuZXdvZmZzZXQ7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IGJiX3JlZ19kZWYgKnBwaHlyZWcgPSAmcnRscGh5LT5waHlyZWdfZGVmW3JmcGF0aF07CisKKwlpZiAoUlRfQ0FOTk9UX0lPKGh3KSkgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLCAoInN0b3BcbiIpKTsKKwkJcmV0dXJuOworCX0KKwlvZmZzZXQgJj0gMHhmZjsKKwluZXdvZmZzZXQgPSBvZmZzZXQ7CisJZGF0YV9hbmRfYWRkciA9ICgobmV3b2Zmc2V0IDw8IDIwKSB8IChkYXRhICYgMHgwMDBmZmZmZikpICYgMHgwZmZmZmZmZjsKKwlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZjN3aXJlX29mZnNldCwgTUFTS0RXT1JELCBkYXRhX2FuZF9hZGRyKTsKKwlSVF9UUkFDRShDT01QX1JGLCBEQkdfVFJBQ0UsCisJCSAoIlJGVy0lZCBBZGRyWzB4JXhdPSAweCV4XG4iLCByZnBhdGgsCisJCSAgcHBoeXJlZy0+cmYzd2lyZV9vZmZzZXQsIGRhdGFfYW5kX2FkZHIpKTsKK30KKworc3RhdGljIHUzMiBfcnRsOTJlZV9waHlfY2FsY3VsYXRlX2JpdF9zaGlmdCh1MzIgYml0bWFzaykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgeworCQlpZiAoKChiaXRtYXNrID4+IGkpICYgMHgxKSA9PSAxKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBpOworfQorCitib29sIHJ0bDkyZWVfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJYm9vbCBydHN0YXR1cyA9IF9ydGw5MmVlX3BoeV9jb25maWdfbWFjX3dpdGhfaGVhZGVyZmlsZShodyk7CisKKwlyZXR1cm4gcnRzdGF0dXM7Cit9CisKK2Jvb2wgcnRsOTJlZV9waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWJvb2wgcnRzdGF0dXMgPSB0cnVlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MTYgcmVndmFsOworCXUzMiB0bXA7CisJdTggY3J5c3RhbF9jYXA7CisKKwlfcnRsOTJlZV9waHlfaW5pdF9iYl9yZl9yZWdpc3Rlcl9kZWZpbml0aW9uKGh3KTsKKwlyZWd2YWwgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLAorCQkgICAgICAgcmVndmFsIHwgQklUKDEzKSB8IEJJVCgwKSB8IEJJVCgxKSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUkZfQ1RSTCwgUkZfRU4gfCBSRl9SU1RCIHwgUkZfU0RNUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLAorCQkgICAgICAgRkVOX1BQTEwgfCBGRU5fUENJRUEgfCBGRU5fRElPX1BDSUUgfAorCQkgICAgICAgRkVOX0JCX0dMQl9SU1RuIHwgRkVOX0JCUlNUQik7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUZFX1hUQUxfQ1RSTCArIDEsIDB4ODApOworCisJdG1wID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgMHg0Yyk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIDB4NGMsIHRtcCB8IEJJVCgyMykpOworCisJcnRzdGF0dXMgPSBfcnRsOTJlZV9waHlfYmI4MTkyZWVfY29uZmlnX3BhcmFmaWxlKGh3KTsKKworCWNyeXN0YWxfY2FwID0gcnRscHJpdi0+ZWZ1c2UuZWVwcm9tX2NyeXN0YWxjYXAgJiAweDNGOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJFR19NQUNfUEhZX0NUUkwsIDB4RkZGMDAwLAorCQkgICAgICAoY3J5c3RhbF9jYXAgfCAoY3J5c3RhbF9jYXAgPDwgNikpKTsKKwlyZXR1cm4gcnRzdGF0dXM7Cit9CisKK2Jvb2wgcnRsOTJlZV9waHlfcmZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiBydGw5MmVlX3BoeV9yZjYwNTJfY29uZmlnKGh3KTsKK30KKworc3RhdGljIGJvb2wgX2NoZWNrX2NvbmRpdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGNvbnN0IHUzMiAgY29uZGl0aW9uKQoreworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1MzIgX2JvYXJkID0gcnRsZWZ1c2UtPmJvYXJkX3R5cGU7IC8qbmVlZCBlZnVzZSBkZWZpbmUqLworCXUzMiBfaW50ZXJmYWNlID0gcnRsaGFsLT5pbnRlcmZhY2U7CisJdTMyIF9wbGF0Zm9ybSA9IDB4MDg7LypTdXBwb3J0UGxhdGZvcm0gKi8KKwl1MzIgY29uZCA9IGNvbmRpdGlvbjsKKworCWlmIChjb25kaXRpb24gPT0gMHhDRENEQ0RDRCkKKwkJcmV0dXJuIHRydWU7CisJY29uZCA9IGNvbmRpdGlvbiAmIDB4RkY7CisJaWYgKChfYm9hcmQgIT0gY29uZCkgJiYgKGNvbmQgIT0gMHhGRikpCisJCXJldHVybiBmYWxzZTsKKwljb25kID0gY29uZGl0aW9uICYgMHhGRjAwOworCWNvbmQgPSBjb25kID4+IDg7CisJaWYgKChfaW50ZXJmYWNlICYgY29uZCkgPT0gMCAmJiBjb25kICE9IDB4MDcpCisJCXJldHVybiBmYWxzZTsKKwljb25kID0gY29uZGl0aW9uICYgMHhGRjAwMDA7CisJY29uZCA9IGNvbmQgPj4gMTY7CisJaWYgKChfcGxhdGZvcm0gJiBjb25kKSA9PSAwICYmIGNvbmQgIT0gMHgwRikKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9jb25maWdfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgYWRkciwgdTMyIGRhdGEsCisJCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIHJlZ2FkZHIpCit7CisJaWYgKGFkZHIgPT0gMHhmZSB8fCBhZGRyID09IDB4ZmZlKSB7CisJCW1kZWxheSg1MCk7CisJfSBlbHNlIHsKKwkJcnRsX3NldF9yZnJlZyhodywgcmZwYXRoLCByZWdhZGRyLCBSRlJFR19PRkZTRVRfTUFTSywgZGF0YSk7CisJCXVkZWxheSgxKTsKKworCQlpZiAoYWRkciA9PSAweGI2KSB7CisJCQl1MzIgZ2V0dmFsdWU7CisJCQl1OCBjb3VudCA9IDA7CisJCQlnZXR2YWx1ZSA9IHJ0bF9nZXRfcmZyZWcoaHcsIHJmcGF0aCwgYWRkciwgTUFTS0RXT1JEKTsKKwkJCXVkZWxheSgxKTsKKworCQkJd2hpbGUgKChnZXR2YWx1ZSA+PiA4KSAhPSAoZGF0YSA+PiA4KSkgeworCQkJCWNvdW50Kys7CisJCQkJcnRsX3NldF9yZnJlZyhodywgcmZwYXRoLCByZWdhZGRyLAorCQkJCQkgICAgICBSRlJFR19PRkZTRVRfTUFTSywgZGF0YSk7CisJCQkJdWRlbGF5KDEpOworCQkJCWdldHZhbHVlID0gcnRsX2dldF9yZnJlZyhodywgcmZwYXRoLCBhZGRyLAorCQkJCQkJCSBNQVNLRFdPUkQpOworCQkJCWlmIChjb3VudCA+IDUpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGFkZHIgPT0gMHhiMikgeworCQkJdTMyIGdldHZhbHVlOworCQkJdTggY291bnQgPSAwOworCQkJZ2V0dmFsdWUgPSBydGxfZ2V0X3JmcmVnKGh3LCByZnBhdGgsIGFkZHIsIE1BU0tEV09SRCk7CisKKwkJCXVkZWxheSgxKTsKKworCQkJd2hpbGUgKGdldHZhbHVlICE9IGRhdGEpIHsKKwkJCQljb3VudCsrOworCQkJCXJ0bF9zZXRfcmZyZWcoaHcsIHJmcGF0aCwgcmVnYWRkciwKKwkJCQkJICAgICAgUkZSRUdfT0ZGU0VUX01BU0ssIGRhdGEpOworCQkJCXVkZWxheSgxKTsKKwkJCQlydGxfc2V0X3JmcmVnKGh3LCByZnBhdGgsIDB4MTgsCisJCQkJCSAgICAgIFJGUkVHX09GRlNFVF9NQVNLLCAweDBmYzA3KTsKKwkJCQl1ZGVsYXkoMSk7CisJCQkJZ2V0dmFsdWUgPSBydGxfZ2V0X3JmcmVnKGh3LCByZnBhdGgsIGFkZHIsCisJCQkJCQkJIE1BU0tEV09SRCk7CisJCQkJaWYgKGNvdW50ID4gNSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX2NvbmZpZ19yZl9yYWRpb19hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJdTMyIGNvbnRlbnQgPSAweDEwMDA7IC8qUkYgQ29udGVudDogcmFkaW9fYV90eHQqLworCXUzMiBtYXNrZm9ycGh5c2V0ID0gKHUzMikoY29udGVudCAmIDB4RTAwMCk7CisKKwlfcnRsOTJlZV9jb25maWdfcmZfcmVnKGh3LCBhZGRyLCBkYXRhLCBSRjkwX1BBVEhfQSwKKwkJCSAgICAgICBhZGRyIHwgbWFza2ZvcnBoeXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX2NvbmZpZ19yZl9yYWRpb19iKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJdTMyIGNvbnRlbnQgPSAweDEwMDE7IC8qUkYgQ29udGVudDogcmFkaW9fYl90eHQqLworCXUzMiBtYXNrZm9ycGh5c2V0ID0gKHUzMikoY29udGVudCAmIDB4RTAwMCk7CisKKwlfcnRsOTJlZV9jb25maWdfcmZfcmVnKGh3LCBhZGRyLCBkYXRhLCBSRjkwX1BBVEhfQiwKKwkJCSAgICAgICBhZGRyIHwgbWFza2ZvcnBoeXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX2NvbmZpZ19iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdTMyIGFkZHIsIHUzMiBkYXRhKQoreworCWlmIChhZGRyID09IDB4ZmUpCisJCW1kZWxheSg1MCk7CisJZWxzZSBpZiAoYWRkciA9PSAweGZkKQorCQltZGVsYXkoNSk7CisJZWxzZSBpZiAoYWRkciA9PSAweGZjKQorCQltZGVsYXkoMSk7CisJZWxzZSBpZiAoYWRkciA9PSAweGZiKQorCQl1ZGVsYXkoNTApOworCWVsc2UgaWYgKGFkZHIgPT0gMHhmYSkKKwkJdWRlbGF5KDUpOworCWVsc2UgaWYgKGFkZHIgPT0gMHhmOSkKKwkJdWRlbGF5KDEpOworCWVsc2UKKwkJcnRsX3NldF9iYnJlZyhodywgYWRkciwgTUFTS0RXT1JEICwgZGF0YSk7CisKKwl1ZGVsYXkoMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9pbml0X3R4X3Bvd2VyX2J5X3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwl1OCBiYW5kID0gQkFORF9PTl8yXzRHLCByZiA9IDAsIHR4bnVtID0gMCwgc2VjID0gMDsKKworCWZvciAoOyBiYW5kIDw9IEJBTkRfT05fNUc7ICsrYmFuZCkKKwkJZm9yICg7IHJmIDwgVFhfUFdSX0JZX1JBVEVfTlVNX1JGOyArK3JmKQorCQkJZm9yICg7IHR4bnVtIDwgVFhfUFdSX0JZX1JBVEVfTlVNX1JGOyArK3R4bnVtKQorCQkJCWZvciAoOyBzZWMgPCBUWF9QV1JfQllfUkFURV9OVU1fU0VDVElPTjsgKytzZWMpCisJCQkJCXJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXQKKwkJCQkJCSAgICAgW2JhbmRdW3JmXVt0eG51bV1bc2VjXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9zZXRfdHhwb3dlcl9ieV9yYXRlX2Jhc2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgIHU4IGJhbmQsIHU4IHBhdGgsCisJCQkJCQkgIHU4IHJhdGVfc2VjdGlvbiwgdTggdHhudW0sIHU4IHZhbHVlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJaWYgKHBhdGggPiBSRjkwX1BBVEhfRCkgeworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIkludmFsaWQgUmYgUGF0aCAlZFxuIiwgcGF0aCkpOworCQlyZXR1cm47CisJfQorCWlmIChiYW5kID09IEJBTkRfT05fMl80RykgeworCQlzd2l0Y2ggKHJhdGVfc2VjdGlvbikgeworCQljYXNlIENDSzoKKwkJCXJ0bHBoeS0+dHhwd3JfYnlfcmF0ZV9iYXNlXzI0Z1twYXRoXVt0eG51bV1bMF0gPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIE9GRE06CisJCQlydGxwaHktPnR4cHdyX2J5X3JhdGVfYmFzZV8yNGdbcGF0aF1bdHhudW1dWzFdID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBIVF9NQ1MwX01DUzc6CisJCQlydGxwaHktPnR4cHdyX2J5X3JhdGVfYmFzZV8yNGdbcGF0aF1bdHhudW1dWzJdID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBIVF9NQ1M4X01DUzE1OgorCQkJcnRscGh5LT50eHB3cl9ieV9yYXRlX2Jhc2VfMjRnW3BhdGhdW3R4bnVtXVszXSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJCSAoIkludmFsaWQgUmF0ZVNlY3Rpb24gJWQgaW4gMi40RywgUmYgJWQsJWRUeFxuIiwKKwkJCQkgIHJhdGVfc2VjdGlvbiwgcGF0aCwgdHhudW0pKTsKKwkJCWJyZWFrOworCQl9OworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiSW52YWxpZCBCYW5kICVkXG4iLCBiYW5kKSk7CisJfQorfQorCitzdGF0aWMgdTggX3J0bDkyZWVfcGh5X2dldF90eHBvd2VyX2J5X3JhdGVfYmFzZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmFuZCwKKwkJCQkJCXU4IHBhdGgsIHU4IHR4bnVtLCB1OCByYXRlX3NlY3Rpb24pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTggdmFsdWUgPSAwOworCWlmIChwYXRoID4gUkY5MF9QQVRIX0QpIHsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwgKCJJbnZhbGlkIFJmIFBhdGggJWRcbiIsIHBhdGgpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChiYW5kID09IEJBTkRfT05fMl80RykgeworCQlzd2l0Y2ggKHJhdGVfc2VjdGlvbikgeworCQljYXNlIENDSzoKKwkJCXZhbHVlID0gcnRscGh5LT50eHB3cl9ieV9yYXRlX2Jhc2VfMjRnW3BhdGhdW3R4bnVtXVswXTsKKwkJCWJyZWFrOworCQljYXNlIE9GRE06CisJCQl2YWx1ZSA9IHJ0bHBoeS0+dHhwd3JfYnlfcmF0ZV9iYXNlXzI0Z1twYXRoXVt0eG51bV1bMV07CisJCQlicmVhazsKKwkJY2FzZSBIVF9NQ1MwX01DUzc6CisJCQl2YWx1ZSA9IHJ0bHBoeS0+dHhwd3JfYnlfcmF0ZV9iYXNlXzI0Z1twYXRoXVt0eG51bV1bMl07CisJCQlicmVhazsKKwkJY2FzZSBIVF9NQ1M4X01DUzE1OgorCQkJdmFsdWUgPSBydGxwaHktPnR4cHdyX2J5X3JhdGVfYmFzZV8yNGdbcGF0aF1bdHhudW1dWzNdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAorCQkJCSAoIkludmFsaWQgUmF0ZVNlY3Rpb24gJWQgaW4gMi40RywgUmYgJWQsJWRUeFxuIiwKKwkJCQkgIHJhdGVfc2VjdGlvbiwgcGF0aCwgdHhudW0pKTsKKwkJCWJyZWFrOworCQl9OworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiSW52YWxpZCBCYW5kICVkKClcbiIsIGJhbmQpKTsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfc3RvcmVfdHhwb3dlcl9ieV9yYXRlX2Jhc2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTE2IHJhdyA9IDA7CisJdTggYmFzZSA9IDAsIHBhdGggPSAwOworCisJZm9yIChwYXRoID0gUkY5MF9QQVRIX0E7IHBhdGggPD0gUkY5MF9QQVRIX0I7ICsrcGF0aCkgeworCQlpZiAocGF0aCA9PSBSRjkwX1BBVEhfQSkgeworCQkJcmF3ID0gKHUxNikgKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbQkFORF9PTl8yXzRHXVtwYXRoXVtSRl8xVFhdWzNdID4+IDI0KSAmIDB4RkY7CisJCQliYXNlID0gKHJhdyA+PiA0KSAqIDEwICsgKHJhdyAmIDB4Rik7CisJCQlfcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfYnlfcmF0ZV9iYXNlKGh3LCBCQU5EX09OXzJfNEcsCisJCQkJCQkJICAgICAgcGF0aCwgQ0NLLCBSRl8xVFgsCisJCQkJCQkJICAgICAgYmFzZSk7CisJCX0gZWxzZSBpZiAocGF0aCA9PSBSRjkwX1BBVEhfQikgeworCQkJcmF3ID0gKHUxNikgKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbQkFORF9PTl8yXzRHXVtwYXRoXVtSRl8xVFhdWzNdID4+IDApICYgMHhGRjsKKwkJCWJhc2UgPSAocmF3ID4+IDQpICogMTAgKyAocmF3ICYgMHhGKTsKKwkJCV9ydGw5MmVlX3BoeV9zZXRfdHhwb3dlcl9ieV9yYXRlX2Jhc2UoaHcsIEJBTkRfT05fMl80RywKKwkJCQkJCQkgICAgICBwYXRoLCBDQ0ssIFJGXzFUWCwKKwkJCQkJCQkgICAgICBiYXNlKTsKKwkJfQorCQlyYXcgPSAodTE2KSAocnRscGh5LT50eF9wb3dlcl9ieV9yYXRlX29mZnNldFtCQU5EX09OXzJfNEddW3BhdGhdW1JGXzFUWF1bMV0gPj4gMjQpICYgMHhGRjsKKwkJYmFzZSA9IChyYXcgPj4gNCkgKiAxMCArIChyYXcgJiAweEYpOworCQlfcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfYnlfcmF0ZV9iYXNlKGh3LCBCQU5EX09OXzJfNEcsIHBhdGgsCisJCQkJCQkgICAgICBPRkRNLCBSRl8xVFgsIGJhc2UpOworCisJCXJhdyA9ICh1MTYpIChydGxwaHktPnR4X3Bvd2VyX2J5X3JhdGVfb2Zmc2V0W0JBTkRfT05fMl80R11bcGF0aF1bUkZfMVRYXVs1XSA+PiAyNCkgJiAweEZGOworCQliYXNlID0gKHJhdyA+PiA0KSAqIDEwICsgKHJhdyAmIDB4Rik7CisJCV9ydGw5MmVlX3BoeV9zZXRfdHhwb3dlcl9ieV9yYXRlX2Jhc2UoaHcsIEJBTkRfT05fMl80RywgcGF0aCwKKwkJCQkJCSAgICAgIEhUX01DUzBfTUNTNywgUkZfMVRYLAorCQkJCQkJICAgICAgYmFzZSk7CisKKwkJcmF3ID0gKHUxNikgKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbQkFORF9PTl8yXzRHXVtwYXRoXVtSRl8yVFhdWzddID4+IDI0KSAmIDB4RkY7CisJCWJhc2UgPSAocmF3ID4+IDQpICogMTAgKyAocmF3ICYgMHhGKTsKKwkJX3J0bDkyZWVfcGh5X3NldF90eHBvd2VyX2J5X3JhdGVfYmFzZShodywgQkFORF9PTl8yXzRHLCBwYXRoLAorCQkJCQkJICAgICAgSFRfTUNTOF9NQ1MxNSwgUkZfMlRYLAorCQkJCQkJICAgICAgYmFzZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcGh5X2NvbnZlcnRfdHhwb3dlcl9kYm1fdG9fcmVsYXRpdmVfdmFsdWUodTMyICpkYXRhLCB1OCBzdGFydCwKKwkJCQkJCSAgICAgICB1OCBlbmQsIHU4IGJhc2UpCit7CisJY2hhciBpID0gMDsKKwl1OCB0bXAgPSAwOworCXUzMiB0ZW1wX2RhdGEgPSAwOworCisJZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHsKKwkJaWYgKGkgPj0gc3RhcnQgJiYgaSA8PSBlbmQpIHsKKwkJCS8qIEdldCB0aGUgZXhhY3QgdmFsdWUgKi8KKwkJCXRtcCA9ICh1OCkgKCpkYXRhID4+IChpICogOCkpICYgMHhGOworCQkJdG1wICs9ICgodTgpICgoKmRhdGEgPj4gKGkgKiA4ICsgNCkpICYgMHhGKSkgKiAxMDsKKworCQkJLyogQ2hhbmdlIHRoZSB2YWx1ZSB0byBhIHJlbGF0aXZlIHZhbHVlICovCisJCQl0bXAgPSAodG1wID4gYmFzZSkgPyB0bXAgLSBiYXNlIDogYmFzZSAtIHRtcDsKKwkJfSBlbHNlIHsKKwkJCXRtcCA9ICh1OCkgKCpkYXRhID4+IChpICogOCkpICYgMHhGRjsKKwkJfQorCQl0ZW1wX2RhdGEgPDw9IDg7CisJCXRlbXBfZGF0YSB8PSB0bXA7CisJfQorCSpkYXRhID0gdGVtcF9kYXRhOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfY29udmVydF90eHBvd2VyX2RibV90b19yZWxhdGl2ZV92YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1OCBiYXNlID0gMCwgcmYgPSAwLCBiYW5kID0gQkFORF9PTl8yXzRHOworCisJZm9yIChyZiA9IFJGOTBfUEFUSF9BOyByZiA8PSBSRjkwX1BBVEhfQjsgKytyZikgeworCQlpZiAocmYgPT0gUkY5MF9QQVRIX0EpIHsKKwkJCWJhc2UgPSBfcnRsOTJlZV9waHlfZ2V0X3R4cG93ZXJfYnlfcmF0ZV9iYXNlKGh3LCBiYW5kLAorCQkJCQkJCQkgICAgIHJmLCBSRl8xVFgsCisJCQkJCQkJCSAgICAgQ0NLKTsKKwkJCV9waHlfY29udmVydF90eHBvd2VyX2RibV90b19yZWxhdGl2ZV92YWx1ZSgKKwkJCQkmKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbYmFuZF1bcmZdW1JGXzFUWF1bMl0pLAorCQkJCTEsIDEsIGJhc2UpOworCQkJX3BoeV9jb252ZXJ0X3R4cG93ZXJfZGJtX3RvX3JlbGF0aXZlX3ZhbHVlKAorCQkJCSYocnRscGh5LT50eF9wb3dlcl9ieV9yYXRlX29mZnNldFtiYW5kXVtyZl1bUkZfMVRYXVszXSksCisJCQkJMSwgMywgYmFzZSk7CisJCX0gZWxzZSBpZiAocmYgPT0gUkY5MF9QQVRIX0IpIHsKKwkJCWJhc2UgPSBfcnRsOTJlZV9waHlfZ2V0X3R4cG93ZXJfYnlfcmF0ZV9iYXNlKGh3LCBiYW5kLAorCQkJCQkJCQkgICAgIHJmLCBSRl8xVFgsCisJCQkJCQkJCSAgICAgQ0NLKTsKKwkJCV9waHlfY29udmVydF90eHBvd2VyX2RibV90b19yZWxhdGl2ZV92YWx1ZSgKKwkJCQkmKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbYmFuZF1bcmZdW1JGXzFUWF1bM10pLAorCQkJCTAsIDAsIGJhc2UpOworCQkJX3BoeV9jb252ZXJ0X3R4cG93ZXJfZGJtX3RvX3JlbGF0aXZlX3ZhbHVlKAorCQkJCSYocnRscGh5LT50eF9wb3dlcl9ieV9yYXRlX29mZnNldFtiYW5kXVtyZl1bUkZfMVRYXVsyXSksCisJCQkJMSwgMywgYmFzZSk7CisJCX0KKwkJYmFzZSA9IF9ydGw5MmVlX3BoeV9nZXRfdHhwb3dlcl9ieV9yYXRlX2Jhc2UoaHcsIGJhbmQsIHJmLAorCQkJCQkJCSAgICAgUkZfMVRYLCBPRkRNKTsKKwkJX3BoeV9jb252ZXJ0X3R4cG93ZXJfZGJtX3RvX3JlbGF0aXZlX3ZhbHVlKAorCQkJJihydGxwaHktPnR4X3Bvd2VyX2J5X3JhdGVfb2Zmc2V0W2JhbmRdW3JmXVtSRl8xVFhdWzBdKSwKKwkJCTAsIDMsIGJhc2UpOworCQlfcGh5X2NvbnZlcnRfdHhwb3dlcl9kYm1fdG9fcmVsYXRpdmVfdmFsdWUoCisJCQkmKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbYmFuZF1bcmZdW1JGXzFUWF1bMV0pLAorCQkJMCwgMywgYmFzZSk7CisKKwkJYmFzZSA9IF9ydGw5MmVlX3BoeV9nZXRfdHhwb3dlcl9ieV9yYXRlX2Jhc2UoaHcsIGJhbmQsIHJmLAorCQkJCQkJCSAgICAgUkZfMVRYLAorCQkJCQkJCSAgICAgSFRfTUNTMF9NQ1M3KTsKKwkJX3BoeV9jb252ZXJ0X3R4cG93ZXJfZGJtX3RvX3JlbGF0aXZlX3ZhbHVlKAorCQkJJihydGxwaHktPnR4X3Bvd2VyX2J5X3JhdGVfb2Zmc2V0W2JhbmRdW3JmXVtSRl8xVFhdWzRdKSwKKwkJCTAsIDMsIGJhc2UpOworCQlfcGh5X2NvbnZlcnRfdHhwb3dlcl9kYm1fdG9fcmVsYXRpdmVfdmFsdWUoCisJCQkmKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbYmFuZF1bcmZdW1JGXzFUWF1bNV0pLAorCQkJMCwgMywgYmFzZSk7CisJCWJhc2UgPSBfcnRsOTJlZV9waHlfZ2V0X3R4cG93ZXJfYnlfcmF0ZV9iYXNlKGh3LCBiYW5kLCByZiwKKwkJCQkJCQkgICAgIFJGXzJUWCwKKwkJCQkJCQkgICAgIEhUX01DUzhfTUNTMTUpOworCQlfcGh5X2NvbnZlcnRfdHhwb3dlcl9kYm1fdG9fcmVsYXRpdmVfdmFsdWUoCisJCQkmKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbYmFuZF1bcmZdW1JGXzJUWF1bNl0pLAorCQkJMCwgMywgYmFzZSk7CisJCV9waHlfY29udmVydF90eHBvd2VyX2RibV90b19yZWxhdGl2ZV92YWx1ZSgKKwkJCSYocnRscGh5LT50eF9wb3dlcl9ieV9yYXRlX29mZnNldFtiYW5kXVtyZl1bUkZfMlRYXVs3XSksCisJCQkwLCAzLCBiYXNlKTsKKwl9CisJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkgKCI8PT0gX3J0bDkyZWVfcGh5X2NvbnZlcnRfdHhwb3dlcl9kYm1fdG9fcmVsYXRpdmVfdmFsdWUoKVxuIikpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfdHhwb3dlcl9ieV9yYXRlX2NvbmZpZ3VyYXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJX3J0bDkyZWVfcGh5X3N0b3JlX3R4cG93ZXJfYnlfcmF0ZV9iYXNlKGh3KTsKKwlfcnRsOTJlZV9waHlfY29udmVydF90eHBvd2VyX2RibV90b19yZWxhdGl2ZV92YWx1ZShodyk7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmVlX3BoeV9iYjgxOTJlZV9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlib29sIHJ0c3RhdHVzOworCisJcnRzdGF0dXMgPSBfcnRsOTJlZV9waHlfY29uZmlnX2JiX3dpdGhfaGVhZGVyZmlsZShodywKKwkJCQkJCSAgICAgICBCQVNFQkFORF9DT05GSUdfUEhZX1JFRyk7CisJaWYgKCFydHN0YXR1cykgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLCAoIldyaXRlIEJCIFJlZyBGYWlsISEiKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlfcnRsOTJlZV9waHlfaW5pdF90eF9wb3dlcl9ieV9yYXRlKGh3KTsKKwlpZiAocnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID09IGZhbHNlKSB7CisJCXJ0bHBoeS0+cHdyZ3JvdXBfY250ID0gMDsKKwkJcnRzdGF0dXMgPSBfcnRsOTJlZV9waHlfY29uZmlnX2JiX3dpdGhfcGdoZWFkZXJmaWxlKGh3LAorCQkJCQkJICAgICAgIEJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKTsKKwl9CisJX3J0bDkyZWVfcGh5X3R4cG93ZXJfYnlfcmF0ZV9jb25maWd1cmF0aW9uKGh3KTsKKwlpZiAoIXJ0c3RhdHVzKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgiQkJfUEcgUmVnIEZhaWwhISIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlydHN0YXR1cyA9IF9ydGw5MmVlX3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkJICAgICAgIEJBU0VCQU5EX0NPTkZJR19BR0NfVEFCKTsKKwlpZiAoIXJ0c3RhdHVzKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsICgiQUdDIFRhYmxlIEZhaWxcbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlydGxwaHktPmJjY2tfaGlnaF9wb3dlciA9IChib29sKSAocnRsX2dldF9iYnJlZyhodywKKwkJCQkJCSAgICAgICBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsCisJCQkJCQkgICAgICAgMHgyMDApKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJlZV9waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBpOworCXUzMiBhcnJheWxlbmd0aDsKKwl1MzIgKnB0cmFycmF5OworCisJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfVFJBQ0UsICgiUmVhZCBSdGw4MTkyRU1BQ1BIWV9BcnJheVxuIikpOworCWFycmF5bGVuZ3RoID0gUlRMODE5MkVFX01BQ19BUlJBWV9MRU47CisJcHRyYXJyYXkgPSBSVEw4MTkyRUVfTUFDX0FSUkFZOworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsCisJCSAoIkltZzpSVEw4MTkyRUVfTUFDX0FSUkFZIExFTiAlZFxuIiAsIGFycmF5bGVuZ3RoKSk7CisJZm9yIChpID0gMDsgaSA8IGFycmF5bGVuZ3RoOyBpID0gaSArIDIpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHB0cmFycmF5W2ldLCAodTgpIHB0cmFycmF5W2kgKyAxXSk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmVlX3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkJICAgdTggY29uZmlndHlwZSkKK3sKKwkjZGVmaW5lIFJFQURfTkVYVF9QQUlSKHYxLCB2MiwgaSkgXAorCQlkbyB7IFwKKwkJCWkgKz0gMjsgXAorCQkJdjEgPSBhcnJheVtpXTsgXAorCQkJdjIgPSBhcnJheVtpKzFdOyBcCisJCX0gd2hpbGUgKDApCisKKwlpbnQgaTsKKwl1MzIgKmFycmF5OworCXUxNiBsZW47CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiB2MSA9IDAsIHYyID0gMDsKKworCWlmIChjb25maWd0eXBlID09IEJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKSB7CisJCWxlbiA9IFJUTDgxOTJFRV9QSFlfUkVHX0FSUkFZX0xFTjsKKwkJYXJyYXkgPSBSVEw4MTkyRUVfUEhZX1JFR19BUlJBWTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpID0gaSArIDIpIHsKKwkJCXYxID0gYXJyYXlbaV07CisJCQl2MiA9IGFycmF5W2krMV07CisJCQlpZiAodjEgPCAweGNkY2RjZGNkKSB7CisJCQkJX3J0bDkyZWVfY29uZmlnX2JiX3JlZyhodywgdjEsIHYyKTsKKwkJCX0gZWxzZSB7LypUaGlzIGxpbmUgaXMgdGhlIHN0YXJ0IGxpbmUgb2YgYnJhbmNoLiovCisJCQkJLyogdG8gcHJvdGVjdCBSRUFEX05FWFRfUEFJUiBub3Qgb3ZlcnJ1biAqLworCQkJCWlmIChpID49IGxlbiAtIDIpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKCFfY2hlY2tfY29uZGl0aW9uKGh3ICwgYXJyYXlbaV0pKSB7CisJCQkJCS8qRGlzY2FyZCB0aGUgZm9sbG93aW5nIHBhaXJzKi8KKwkJCQkJUkVBRF9ORVhUX1BBSVIodjEsIHYyLCBpKTsKKwkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJgorCQkJCQkgICAgICAgdjIgIT0gMHhDREVGICYmCisJCQkJCSAgICAgICB2MiAhPSAweENEQ0QgJiYgaSA8IGxlbiAtIDIpCisJCQkJCSAgICBSRUFEX05FWFRfUEFJUih2MSwgdjIsIGkpOworCQkJCQlpIC09IDI7IC8qIHByZXZlbnQgZnJvbSBmb3ItbG9vcCArPSAyKi8KKwkJCQl9IGVsc2V7LyogQ29uZmlndXJlIG1hdGNoZWQgcGFpcnMgYW5kCisJCQkJICAgICAgICogc2tpcCB0byBlbmQgb2YgaWYtZWxzZS4gKi8KKwkJCQkJUkVBRF9ORVhUX1BBSVIodjEsIHYyLCBpKTsKKwkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJgorCQkJCQkgICAgICAgdjIgIT0gMHhDREVGICYmCisJCQkJCSAgICAgICB2MiAhPSAweENEQ0QgJiYgaSA8IGxlbiAtIDIpIHsKKwkJCQkJCV9ydGw5MmVlX2NvbmZpZ19iYl9yZWcoaHcsIHYxLAorCQkJCQkJCQkgICAgICAgdjIpOworCQkJCQkJUkVBRF9ORVhUX1BBSVIodjEsIHYyLCBpKTsKKwkJCQkJfQorCisJCQkJCXdoaWxlICh2MiAhPSAweERFQUQgJiYgaSA8IGxlbiAtIDIpCisJCQkJCQlSRUFEX05FWFRfUEFJUih2MSwgdjIsIGkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoY29uZmlndHlwZSA9PSBCQVNFQkFORF9DT05GSUdfQUdDX1RBQikgeworCQkJbGVuID0gUlRMODE5MkVFX0FHQ19UQUJfQVJSQVlfTEVOOworCQkJYXJyYXkgPSBSVEw4MTkyRUVfQUdDX1RBQl9BUlJBWTsKKworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAyKSB7CisJCQkJdjEgPSBhcnJheVtpXTsKKwkJCQl2MiA9IGFycmF5W2krMV07CisJCQkJaWYgKHYxIDwgMHhDRENEQ0RDRCkgeworCQkJCQlydGxfc2V0X2JicmVnKGh3LCBhcnJheVtpXSwgTUFTS0RXT1JELAorCQkJCQkJICAgICAgYXJyYXlbaSArIDFdKTsKKwkJCQkJdWRlbGF5KDEpOworCQkJCQljb250aW51ZTsKKwkJCSAgICB9IGVsc2V7LypUaGlzIGxpbmUgaXMgdGhlIHN0YXJ0IGxpbmUgb2YgYnJhbmNoLiovCisJCQkJICAvKiB0byBwcm90ZWN0IFJFQURfTkVYVF9QQUlSIG5vdCBvdmVycnVuICovCisJCQkJCWlmIChpID49IGxlbiAtIDIpCisJCQkJCQlicmVhazsKKworCQkJCQlpZiAoIV9jaGVja19jb25kaXRpb24oaHcgLCBhcnJheVtpXSkpIHsKKwkJCQkJCS8qRGlzY2FyZCB0aGUgZm9sbG93aW5nIHBhaXJzKi8KKwkJCQkJCVJFQURfTkVYVF9QQUlSKHYxLCB2MiwgaSk7CisJCQkJCQl3aGlsZSAodjIgIT0gMHhERUFEICYmCisJCQkJCQkgICAgICAgdjIgIT0gMHhDREVGICYmCisJCQkJCQkgICAgICAgdjIgIT0gMHhDRENEICYmCisJCQkJCQkgICAgICAgaSA8IGxlbiAtIDIpCisJCQkJCQkgICAgUkVBRF9ORVhUX1BBSVIodjEsIHYyLCBpKTsKKwkJCQkJCWkgLT0gMjsgLyogcHJldmVudCBmcm9tIGZvci1sb29wICs9IDIqLworCQkJCQl9IGVsc2Ugey8qIENvbmZpZ3VyZSBtYXRjaGVkIHBhaXJzIGFuZAorCQkJCQkgICAgICAgKiBza2lwIHRvIGVuZCBvZiBpZi1lbHNlLiovCisJCQkJCQlSRUFEX05FWFRfUEFJUih2MSwgdjIsIGkpOworCQkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJgorCQkJCQkJICAgICAgIHYyICE9IDB4Q0RFRiAmJgorCQkJCQkJICAgICAgIHYyICE9IDB4Q0RDRCAmJgorCQkJCQkJICAgICAgIGkgPCBsZW4gLSAyKSB7CisJCQkJCQkJcnRsX3NldF9iYnJlZyhodywKKwkJCQkJCQkJICAgICAgYXJyYXlbaV0sCisJCQkJCQkJCSAgICAgIE1BU0tEV09SRCwKKwkJCQkJCQkJICAgICAgYXJyYXlbaSArIDFdKTsKKwkJCQkJCQl1ZGVsYXkoMSk7CisJCQkJCQkJUkVBRF9ORVhUX1BBSVIodjEgLCB2MiAsIGkpOworCQkJCQkJfQorCisJCQkJCQl3aGlsZSAodjIgIT0gMHhERUFEICYmCisJCQkJCQkgICAgICAgaSA8IGxlbiAtIDIpCisJCQkJCQkJUkVBRF9ORVhUX1BBSVIodjEgLCB2MiAsIGkpOworCQkJCQl9CisJCQkJfQorCQkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJCQkgKCJUaGUgYWdjdGFiX2FycmF5X3RhYmxlWzBdIGlzICV4IFJ0bDgxOEVFUEhZX1JFR0FycmF5WzFdIGlzICV4XG4iLAorCQkJCQkgIGFycmF5W2ldLAorCQkJCQkgIGFycmF5W2kgKyAxXSkpOworCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdTggX3J0bDkyZWVfZ2V0X3JhdGVfc2VjdGlvbl9pbmRleCh1MzIgcmVnYWRkcikKK3sKKwl1OCBpbmRleCA9IDA7CisKKwlzd2l0Y2ggKHJlZ2FkZHIpIHsKKwljYXNlIFJUWEFHQ19BX1JBVEUxOF8wNjoKKwkJaW5kZXggPSAwOworCQlicmVhazsKKwljYXNlIFJUWEFHQ19BX1JBVEU1NF8yNDoKKwkJaW5kZXggPSAxOworCQlicmVhazsKKwljYXNlIFJUWEFHQ19BX0NDSzFfTUNTMzI6CisJCWluZGV4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTE6CisJCWluZGV4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBSVFhBR0NfQV9NQ1MwM19NQ1MwMDoKKwkJaW5kZXggPSA0OworCQlicmVhazsKKwljYXNlIFJUWEFHQ19BX01DUzA3X01DUzA0OgorCQlpbmRleCA9IDU7CisJCWJyZWFrOworCWNhc2UgUlRYQUdDX0FfTUNTMTFfTUNTMDg6CisJCWluZGV4ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBSVFhBR0NfQV9NQ1MxNV9NQ1MxMjoKKwkJaW5kZXggPSA3OworCQlicmVhazsKKwljYXNlIFJUWEFHQ19CX1JBVEUxOF8wNjoKKwkJaW5kZXggPSAwOworCQlicmVhazsKKwljYXNlIFJUWEFHQ19CX1JBVEU1NF8yNDoKKwkJaW5kZXggPSAxOworCQlicmVhazsKKwljYXNlIFJUWEFHQ19CX0NDSzFfNTVfTUNTMzI6CisJCWluZGV4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBSVFhBR0NfQl9NQ1MwM19NQ1MwMDoKKwkJaW5kZXggPSA0OworCQlicmVhazsKKwljYXNlIFJUWEFHQ19CX01DUzA3X01DUzA0OgorCQlpbmRleCA9IDU7CisJCWJyZWFrOworCWNhc2UgUlRYQUdDX0JfTUNTMTFfTUNTMDg6CisJCWluZGV4ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBSVFhBR0NfQl9NQ1MxNV9NQ1MxMjoKKwkJaW5kZXggPSA3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWdhZGRyICY9IDB4RkZGOworCQlpZiAocmVnYWRkciA+PSAweEMyMCAmJiByZWdhZGRyIDw9IDB4QzRDKQorCQkJaW5kZXggPSAodTgpICgocmVnYWRkciAtIDB4QzIwKSAvIDQpOworCQllbHNlIGlmIChyZWdhZGRyID49IDB4RTIwICYmIHJlZ2FkZHIgPD0gMHhFNEMpCisJCQlpbmRleCA9ICh1OCkgKChyZWdhZGRyIC0gMHhFMjApIC8gNCk7CisJCWJyZWFrOworCX07CisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9zdG9yZV90eF9wb3dlcl9ieV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgZW51bSBiYW5kX3R5cGUgYmFuZCwKKwkJCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkJCSAgICB1MzIgdHhudW0sIHUzMiByZWdhZGRyLAorCQkJCQkgICAgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXU4IHNlY3Rpb24gPSBfcnRsOTJlZV9nZXRfcmF0ZV9zZWN0aW9uX2luZGV4KHJlZ2FkZHIpOworCisJaWYgKGJhbmQgIT0gQkFORF9PTl8yXzRHICYmIGJhbmQgIT0gQkFORF9PTl81RykgeworCQlSVF9UUkFDRShGUEhZLCBQSFlfVFhQV1IsICgiSW52YWxpZCBCYW5kICVkXG4iLCBiYW5kKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocmZwYXRoID4gTUFYX1JGX1BBVEggLSAxKSB7CisJCVJUX1RSQUNFKEZQSFksIFBIWV9UWFBXUiwgKCJJbnZhbGlkIFJmUGF0aCAlZFxuIiwgcmZwYXRoKSk7CisJCXJldHVybjsKKwl9CisJaWYgKHR4bnVtID4gTUFYX1JGX1BBVEggLSAxKSB7CisJCVJUX1RSQUNFKEZQSFksIFBIWV9UWFBXUiwgKCJJbnZhbGlkIFR4TnVtICVkXG4iLCB0eG51bSkpOworCQlyZXR1cm47CisJfQorCisJcnRscGh5LT50eF9wb3dlcl9ieV9yYXRlX29mZnNldFtiYW5kXVtyZnBhdGhdW3R4bnVtXVtzZWN0aW9uXSA9IGRhdGE7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmVlX3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgICAgIHU4IGNvbmZpZ3R5cGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBpOworCXUzMiAqcGh5X3JlZ2FycmF5X3RhYmxlX3BnOworCXUxNiBwaHlfcmVnYXJyYXlfcGdfbGVuOworCXUzMiB2MSA9IDAsIHYyID0gMCwgdjMgPSAwLCB2NCA9IDAsIHY1ID0gMCwgdjYgPSAwOworCisJcGh5X3JlZ2FycmF5X3BnX2xlbiA9IFJUTDgxOTJFRV9QSFlfUkVHX0FSUkFZX1BHX0xFTjsKKwlwaHlfcmVnYXJyYXlfdGFibGVfcGcgPSBSVEw4MTkyRUVfUEhZX1JFR19BUlJBWV9QRzsKKworCWlmIChjb25maWd0eXBlID09IEJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwaHlfcmVnYXJyYXlfcGdfbGVuOyBpID0gaSArIDYpIHsKKwkJCXYxID0gcGh5X3JlZ2FycmF5X3RhYmxlX3BnW2ldOworCQkJdjIgPSBwaHlfcmVnYXJyYXlfdGFibGVfcGdbaSsxXTsKKwkJCXYzID0gcGh5X3JlZ2FycmF5X3RhYmxlX3BnW2krMl07CisJCQl2NCA9IHBoeV9yZWdhcnJheV90YWJsZV9wZ1tpKzNdOworCQkJdjUgPSBwaHlfcmVnYXJyYXlfdGFibGVfcGdbaSs0XTsKKwkJCXY2ID0gcGh5X3JlZ2FycmF5X3RhYmxlX3BnW2krNV07CisKKwkJCWlmICh2MSA8IDB4Y2RjZGNkY2QpIHsKKwkJCQlfcnRsOTJlZV9zdG9yZV90eF9wb3dlcl9ieV9yYXRlKGh3LCB2MSwgdjIsIHYzLAorCQkJCQkJCQl2NCwgdjUsIHY2KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfU0VORCwgREJHX1RSQUNFLAorCQkJICgiY29uZmlndHlwZSAhPSBCYXNlQmFuZF9Db25maWdfUEhZX1JFR1xuIikpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBydGw5MmVlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgICpodywKKwkJCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKwkjZGVmaW5lIFJFQURfTkVYVF9SRl9QQUlSKHYxLCB2MiwgaSkgXAorCQlkbyB7IFwKKwkJCWkgKz0gMjsgXAorCQkJdjEgPSBhcnJheVtpXTsgXAorCQkJdjIgPSBhcnJheVtpKzFdOyBcCisJCX0gd2hpbGUgKDApCisKKwlpbnQgaTsKKwl1MzIgKmFycmF5OworCXUxNiBsZW47CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiB2MSA9IDAsIHYyID0gMDsKKworCXN3aXRjaCAocmZwYXRoKSB7CisJY2FzZSBSRjkwX1BBVEhfQToKKwkJbGVuID0gUlRMODE5MkVFX1JBRElPQV9BUlJBWV9MRU47CisJCWFycmF5ID0gUlRMODE5MkVFX1JBRElPQV9BUlJBWTsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSAoIlJhZGlvX0E6UlRMODE5MkVFX1JBRElPQV9BUlJBWSAlZFxuIiAsIGxlbikpOworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIlJhZGlvIE5vICV4XG4iLCByZnBhdGgpKTsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAyKSB7CisJCQl2MSA9IGFycmF5W2ldOworCQkJdjIgPSBhcnJheVtpKzFdOworCQkJaWYgKHYxIDwgMHhjZGNkY2RjZCkgeworCQkJCV9ydGw5MmVlX2NvbmZpZ19yZl9yYWRpb19hKGh3LCB2MSwgdjIpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsvKlRoaXMgbGluZSBpcyB0aGUgc3RhcnQgbGluZSBvZiBicmFuY2guKi8KKwkJCQkvKiB0byBwcm90ZWN0IFJFQURfTkVYVF9QQUlSIG5vdCBvdmVycnVuICovCisJCQkJaWYgKGkgPj0gbGVuIC0gMikKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAoIV9jaGVja19jb25kaXRpb24oaHcgLCBhcnJheVtpXSkpIHsKKwkJCQkJLypEaXNjYXJkIHRoZSBmb2xsb3dpbmcgcGFpcnMqLworCQkJCQlSRUFEX05FWFRfUkZfUEFJUih2MSwgdjIsIGkpOworCQkJCQl3aGlsZSAodjIgIT0gMHhERUFEICYmCisJCQkJCSAgICAgICB2MiAhPSAweENERUYgJiYKKwkJCQkJICAgICAgIHYyICE9IDB4Q0RDRCAmJiBpIDwgbGVuIC0gMikKKwkJCQkJCVJFQURfTkVYVF9SRl9QQUlSKHYxLCB2MiwgaSk7CisJCQkJCWkgLT0gMjsgLyogcHJldmVudCBmcm9tIGZvci1sb29wICs9IDIqLworCQkJCX0gZWxzZSB7LyogQ29uZmlndXJlIG1hdGNoZWQgcGFpcnMgYW5kCisJCQkJCSAqIHNraXAgdG8gZW5kIG9mIGlmLWVsc2UuKi8KKwkJCQkJUkVBRF9ORVhUX1JGX1BBSVIodjEsIHYyLCBpKTsKKwkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJgorCQkJCQkgICAgICAgdjIgIT0gMHhDREVGICYmCisJCQkJCSAgICAgICB2MiAhPSAweENEQ0QgJiYgaSA8IGxlbiAtIDIpIHsKKwkJCQkJCV9ydGw5MmVlX2NvbmZpZ19yZl9yYWRpb19hKGh3LAorCQkJCQkJCQkJICAgdjEsCisJCQkJCQkJCQkgICB2Mik7CisJCQkJCQlSRUFEX05FWFRfUkZfUEFJUih2MSwgdjIsIGkpOworCQkJCQl9CisKKwkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJiBpIDwgbGVuIC0gMikKKwkJCQkJCVJFQURfTkVYVF9SRl9QQUlSKHYxLCB2MiwgaSk7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBSRjkwX1BBVEhfQjoKKwkJbGVuID0gUlRMODE5MkVFX1JBRElPQl9BUlJBWV9MRU47CisJCWFycmF5ID0gUlRMODE5MkVFX1JBRElPQl9BUlJBWTsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSAoIlJhZGlvX0E6UlRMODE5MkVFX1JBRElPQl9BUlJBWSAlZFxuIiAsIGxlbikpOworCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIlJhZGlvIE5vICV4XG4iLCByZnBhdGgpKTsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAyKSB7CisJCQl2MSA9IGFycmF5W2ldOworCQkJdjIgPSBhcnJheVtpKzFdOworCQkJaWYgKHYxIDwgMHhjZGNkY2RjZCkgeworCQkJCV9ydGw5MmVlX2NvbmZpZ19yZl9yYWRpb19iKGh3LCB2MSwgdjIpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsvKlRoaXMgbGluZSBpcyB0aGUgc3RhcnQgbGluZSBvZiBicmFuY2guKi8KKwkJCQkvKiB0byBwcm90ZWN0IFJFQURfTkVYVF9QQUlSIG5vdCBvdmVycnVuICovCisJCQkJaWYgKGkgPj0gbGVuIC0gMikKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAoIV9jaGVja19jb25kaXRpb24oaHcgLCBhcnJheVtpXSkpIHsKKwkJCQkJLypEaXNjYXJkIHRoZSBmb2xsb3dpbmcgcGFpcnMqLworCQkJCQlSRUFEX05FWFRfUkZfUEFJUih2MSwgdjIsIGkpOworCQkJCQl3aGlsZSAodjIgIT0gMHhERUFEICYmCisJCQkJCSAgICAgICB2MiAhPSAweENERUYgJiYKKwkJCQkJICAgICAgIHYyICE9IDB4Q0RDRCAmJiBpIDwgbGVuIC0gMikKKwkJCQkJCVJFQURfTkVYVF9SRl9QQUlSKHYxLCB2MiwgaSk7CisJCQkJCWkgLT0gMjsgLyogcHJldmVudCBmcm9tIGZvci1sb29wICs9IDIqLworCQkJCX0gZWxzZSB7LyogQ29uZmlndXJlIG1hdGNoZWQgcGFpcnMgYW5kCisJCQkJCSAqIHNraXAgdG8gZW5kIG9mIGlmLWVsc2UuKi8KKwkJCQkJUkVBRF9ORVhUX1JGX1BBSVIodjEsIHYyLCBpKTsKKwkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJgorCQkJCQkgICAgICAgdjIgIT0gMHhDREVGICYmCisJCQkJCSAgICAgICB2MiAhPSAweENEQ0QgJiYgaSA8IGxlbiAtIDIpIHsKKwkJCQkJCV9ydGw5MmVlX2NvbmZpZ19yZl9yYWRpb19iKGh3LAorCQkJCQkJCQkJICAgdjEsCisJCQkJCQkJCQkgICB2Mik7CisJCQkJCQlSRUFEX05FWFRfUkZfUEFJUih2MSwgdjIsIGkpOworCQkJCQl9CisKKwkJCQkJd2hpbGUgKHYyICE9IDB4REVBRCAmJiBpIDwgbGVuIC0gMikKKwkJCQkJCVJFQURfTkVYVF9SRl9QQUlSKHYxLCB2MiwgaSk7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUkY5MF9QQVRIX0M6CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwljYXNlIFJGOTBfUEFUSF9EOgorCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0cnVlOworfQorCit2b2lkIHJ0bDkyZWVfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCXJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblswXSA9CisJCSh1OCkgcnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisJcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzFdID0KKwkJKHU4KSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEJBR0NDT1JFMSwgTUFTS0JZVEUwKTsKKwlydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bMl0gPQorCQkodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQ0FHQ0NPUkUxLCBNQVNLQllURTApOworCXJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblszXSA9CisJCSh1OCkgcnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hEQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJICgiRGVmYXVsdCBpbml0aWFsIGdhaW4gKGM1MCA9IDB4JXgsIGM1OCA9IDB4JXgsIGM2MCA9IDB4JXgsIGM2OCA9IDB4JXhcbiIsCisJCSAgcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzBdLAorCQkgIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsxXSwKKwkJICBydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bMl0sCisJCSAgcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzNdKSk7CisKKwlydGxwaHktPmZyYW1lc3luYyA9ICh1OCkgcnRsX2dldF9iYnJlZyhodywKKwkJCQkJICAgICAgIFJPRkRNMF9SWERFVEVDVE9SMywgTUFTS0JZVEUwKTsKKwlydGxwaHktPmZyYW1lc3luY19jMzQgPSBydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkgICAgICBST0ZETTBfUlhERVRFQ1RPUjIsIE1BU0tEV09SRCk7CisKKwlSVF9UUkFDRShDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJICgiRGVmYXVsdCBmcmFtZXN5bmMgKDB4JXgpID0gMHgleFxuIiwKKwkJICBST0ZETTBfUlhERVRFQ1RPUjMsIHJ0bHBoeS0+ZnJhbWVzeW5jKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9pbml0X2JiX3JmX3JlZ2lzdGVyX2RlZmluaXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZnMgPSBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1c7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZzID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVNXOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmludGZvID0gUkZQR0EwX1hBX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZvID0gUkZQR0EwX1hCX1JGSU5URVJGQUNFT0U7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZmUgPSBSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmaW50ZmUgPSBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRTsKKworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJCVJGUEdBMF9YQV9MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJCVJGUEdBMF9YQl9MU1NJUEFSQU1FVEVSOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmhzc2lfcGFyYTIgPSBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmhzc2lfcGFyYTIgPSBSRlBHQTBfWEJfSFNTSVBBUkFNRVRFUjI7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkJCQkJIFJGUEdBMF9YQV9MU1NJUkVBREJBQ0s7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmxzc2lfcmVhZGJhY2sgPQorCQkJCQkJCSBSRlBHQTBfWEJfTFNTSVJFQURCQUNLOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmxzc2lfcmVhZGJhY2twaSA9CisJCQkJCQkgICAgICBUUkFOU0NFSVZFQV9IU1BJX1JFQURCQUNLOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZsc3NpX3JlYWRiYWNrcGkgPQorCQkJCQkJICAgICAgVFJBTlNDRUlWRUJfSFNQSV9SRUFEQkFDSzsKK30KKwordm9pZCBydGw5MmVlX3BoeV9nZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgbG9uZyAqcG93ZXJsZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1OCB0eHB3cl9sZXZlbDsKKwlsb25nIHR4cHdyX2RibTsKKworCXR4cHdyX2xldmVsID0gcnRscGh5LT5jdXJfY2NrX3R4cHdyaWR4OworCXR4cHdyX2RibSA9IF9ydGw5MmVlX3BoeV90eHB3cl9pZHhfdG9fZGJtKGh3LCBXSVJFTEVTU19NT0RFX0IsCisJCQkJCQkgIHR4cHdyX2xldmVsKTsKKwl0eHB3cl9sZXZlbCA9IHJ0bHBoeS0+Y3VyX29mZG0yNGdfdHhwd3JpZHg7CisJaWYgKF9ydGw5MmVlX3BoeV90eHB3cl9pZHhfdG9fZGJtKGh3LCBXSVJFTEVTU19NT0RFX0csIHR4cHdyX2xldmVsKSA+CisJICAgIHR4cHdyX2RibSkKKwkJdHhwd3JfZGJtID0gX3J0bDkyZWVfcGh5X3R4cHdyX2lkeF90b19kYm0oaHcsIFdJUkVMRVNTX01PREVfRywKKwkJCQkJCQkgIHR4cHdyX2xldmVsKTsKKwl0eHB3cl9sZXZlbCA9IHJ0bHBoeS0+Y3VyX29mZG0yNGdfdHhwd3JpZHg7CisJaWYgKF9ydGw5MmVlX3BoeV90eHB3cl9pZHhfdG9fZGJtKGh3LCBXSVJFTEVTU19NT0RFX05fMjRHLAorCQkJCQkgIHR4cHdyX2xldmVsKSA+IHR4cHdyX2RibSkKKwkJdHhwd3JfZGJtID0gX3J0bDkyZWVfcGh5X3R4cHdyX2lkeF90b19kYm0oaHcsCisJCQkJCQkJICBXSVJFTEVTU19NT0RFX05fMjRHLAorCQkJCQkJCSAgdHhwd3JfbGV2ZWwpOworCSpwb3dlcmxldmVsID0gdHhwd3JfZGJtOworfQorCitzdGF0aWMgdTggX3J0bDkyZWVfcGh5X2dldF9yYXRlc2VjdGlvbl9pbnR4cG93ZXJfYnlyYXRlKGVudW0gcmFkaW9fcGF0aCBwYXRoLAorCQkJCQkJCXU4IHJhdGUpCit7CisJdTggcmF0ZV9zZWN0aW9uID0gMDsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgREVTQzkyQ19SQVRFMU06CisJCXJhdGVfc2VjdGlvbiA9IDI7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEUyTToKKwljYXNlIERFU0M5MkNfUkFURTVfNU06CisJCWlmIChwYXRoID09IFJGOTBfUEFUSF9BKQorCQkJcmF0ZV9zZWN0aW9uID0gMzsKKwkJZWxzZSBpZiAocGF0aCA9PSBSRjkwX1BBVEhfQikKKwkJCXJhdGVfc2VjdGlvbiA9IDI7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEUxMU06CisJCXJhdGVfc2VjdGlvbiA9IDM7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEU2TToKKwljYXNlIERFU0M5MkNfUkFURTlNOgorCWNhc2UgREVTQzkyQ19SQVRFMTJNOgorCWNhc2UgREVTQzkyQ19SQVRFMThNOgorCQlyYXRlX3NlY3Rpb24gPSAwOworCQlicmVhazsKKworCWNhc2UgREVTQzkyQ19SQVRFMjRNOgorCWNhc2UgREVTQzkyQ19SQVRFMzZNOgorCWNhc2UgREVTQzkyQ19SQVRFNDhNOgorCWNhc2UgREVTQzkyQ19SQVRFNTRNOgorCQlyYXRlX3NlY3Rpb24gPSAxOworCQlicmVhazsKKworCWNhc2UgREVTQzkyQ19SQVRFTUNTMDoKKwljYXNlIERFU0M5MkNfUkFURU1DUzE6CisJY2FzZSBERVNDOTJDX1JBVEVNQ1MyOgorCWNhc2UgREVTQzkyQ19SQVRFTUNTMzoKKwkJcmF0ZV9zZWN0aW9uID0gNDsKKwkJYnJlYWs7CisKKwljYXNlIERFU0M5MkNfUkFURU1DUzQ6CisJY2FzZSBERVNDOTJDX1JBVEVNQ1M1OgorCWNhc2UgREVTQzkyQ19SQVRFTUNTNjoKKwljYXNlIERFU0M5MkNfUkFURU1DUzc6CisJCXJhdGVfc2VjdGlvbiA9IDU7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEVNQ1M4OgorCWNhc2UgREVTQzkyQ19SQVRFTUNTOToKKwljYXNlIERFU0M5MkNfUkFURU1DUzEwOgorCWNhc2UgREVTQzkyQ19SQVRFTUNTMTE6CisJCXJhdGVfc2VjdGlvbiA9IDY7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMjoKKwljYXNlIERFU0M5MkNfUkFURU1DUzEzOgorCWNhc2UgREVTQzkyQ19SQVRFTUNTMTQ6CisJY2FzZSBERVNDOTJDX1JBVEVNQ1MxNToKKwkJcmF0ZV9zZWN0aW9uID0gNzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlSVF9BU1NFUlQodHJ1ZSwgKCJSYXRlX1NlY3Rpb24gaXMgSWxsZWdhbFxuIikpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmF0ZV9zZWN0aW9uOworfQorCitzdGF0aWMgdTggX3J0bDkyZWVfZ2V0X3R4cG93ZXJfYnlfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgZW51bSBiYW5kX3R5cGUgYmFuZCwKKwkJCQkgICAgICAgZW51bSByYWRpb19wYXRoIHJmLCB1OCByYXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXU4IHNoaWZ0ID0gMCwgc2VjLCB0eF9udW07CisJY2hhciBkaWZmID0gMDsKKworCXNlYyA9IF9ydGw5MmVlX3BoeV9nZXRfcmF0ZXNlY3Rpb25faW50eHBvd2VyX2J5cmF0ZShyZiwgcmF0ZSk7CisJdHhfbnVtID0gUkZfVFhfTlVNX05PTklNUExFTUVOVDsKKworCWlmICh0eF9udW0gPT0gUkZfVFhfTlVNX05PTklNUExFTUVOVCkgeworCQlpZiAoKHJhdGUgPj0gREVTQzkyQ19SQVRFTUNTOCAmJiByYXRlIDw9IERFU0M5MkNfUkFURU1DUzE1KSkKKwkJCXR4X251bSA9IFJGXzJUWDsKKwkJZWxzZQorCQkJdHhfbnVtID0gUkZfMVRYOworCX0KKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgREVTQzkyQ19SQVRFMU06CisJCXNoaWZ0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEUyTToKKwkJc2hpZnQgPSA4OworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURTVfNU06CisJCXNoaWZ0ID0gMTY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFMTFNOgorCQlzaGlmdCA9IDI0OworCQlicmVhazsKKworCWNhc2UgREVTQzkyQ19SQVRFNk06CisJCXNoaWZ0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEU5TToKKwkJc2hpZnQgPSA4OworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURTEyTToKKwkJc2hpZnQgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEUxOE06CisJCXNoaWZ0ID0gMjQ7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEUyNE06CisJCXNoaWZ0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEUzNk06CisJCXNoaWZ0ID0gODsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEU0OE06CisJCXNoaWZ0ID0gMTY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFNTRNOgorCQlzaGlmdCA9IDI0OworCQlicmVhazsKKworCWNhc2UgREVTQzkyQ19SQVRFTUNTMDoKKwkJc2hpZnQgPSAwOworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURU1DUzE6CisJCXNoaWZ0ID0gODsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEVNQ1MyOgorCQlzaGlmdCA9IDE2OworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURU1DUzM6CisJCXNoaWZ0ID0gMjQ7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEVNQ1M0OgorCQlzaGlmdCA9IDA7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFTUNTNToKKwkJc2hpZnQgPSA4OworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURU1DUzY6CisJCXNoaWZ0ID0gMTY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFTUNTNzoKKwkJc2hpZnQgPSAyNDsKKwkJYnJlYWs7CisKKwljYXNlIERFU0M5MkNfUkFURU1DUzg6CisJCXNoaWZ0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEVNQ1M5OgorCQlzaGlmdCA9IDg7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFTUNTMTA6CisJCXNoaWZ0ID0gMTY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFTUNTMTE6CisJCXNoaWZ0ID0gMjQ7CisJCWJyZWFrOworCisJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMjoKKwkJc2hpZnQgPSAwOworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURU1DUzEzOgorCQlzaGlmdCA9IDg7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFTUNTMTQ6CisJCXNoaWZ0ID0gMTY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFTUNTMTU6CisJCXNoaWZ0ID0gMjQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJUlRfQVNTRVJUKHRydWUsICgiUmF0ZV9TZWN0aW9uIGlzIElsbGVnYWxcbiIpKTsKKwkJYnJlYWs7CisJfQorCisJZGlmZiA9ICh1OCkgKHJ0bHBoeS0+dHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbYmFuZF1bcmZdW3R4X251bV1bc2VjXSA+PgorCQkgICAgIHNoaWZ0KSAmIDB4ZmY7CisKKwlyZXR1cm4JZGlmZjsKK30KKworc3RhdGljIHU4IF9ydGw5MmVlX2dldF90eHBvd2VyX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTggcmF0ZSwKKwkJCQkgICAgIHU4IGJ3LCB1OCBjaGFubmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxwcml2KTsKKwl1OCBpbmRleCA9IChjaGFubmVsIC0gMSk7CisJdTggdHhfcG93ZXIgPSAwOworCXU4IGRpZmYgPSAwOworCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiAxNCkgeworCQlpbmRleCA9IDA7CisJCVJUX1RSQUNFKENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19ETUVTRywKKwkJCSAoIklsbGVnYWwgY2hhbm5lbCEhXG4iKSk7CisJfQorCisJaWYgKElTX0NDS19SQVRFKHJhdGUpKQorCQl0eF9wb3dlciA9IHJ0bGVmdXNlLT50eHB3cmxldmVsX2Nja1tyZnBhdGhdW2luZGV4XTsKKwllbHNlIGlmIChERVNDOTJDX1JBVEU2TSA8PSByYXRlKQorCQl0eF9wb3dlciA9IHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbcmZwYXRoXVtpbmRleF07CisKKwkvKiBPRkRNLTFUKi8KKwlpZiAoREVTQzkyQ19SQVRFNk0gPD0gcmF0ZSAmJiByYXRlIDw9IERFU0M5MkNfUkFURTU0TSAmJgorCSAgICAhSVNfQ0NLX1JBVEUocmF0ZSkpCisJCXR4X3Bvd2VyICs9IHJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmZbcmZwYXRoXVtUWF8xU107CisKKwkvKiBCVzIwLTFTLCBCVzIwLTJTICovCisJaWYgKGJ3ID09IEhUX0NIQU5ORUxfV0lEVEhfMjApIHsKKwkJaWYgKERFU0M5MkNfUkFURU1DUzAgPD0gcmF0ZSAmJiByYXRlIDw9IERFU0M5MkNfUkFURU1DUzE1KQorCQkJdHhfcG93ZXIgKz0gcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW3JmcGF0aF1bVFhfMVNdOworCQlpZiAoREVTQzkyQ19SQVRFTUNTOCA8PSByYXRlICYmIHJhdGUgPD0gREVTQzkyQ19SQVRFTUNTMTUpCisJCQl0eF9wb3dlciArPSBydGxlZnVzZS0+dHhwd3JfaHQyMGRpZmZbcmZwYXRoXVtUWF8yU107CisJfSBlbHNlIGlmIChidyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7LyogQlc0MC0xUywgQlc0MC0yUyAqLworCQlpZiAoREVTQzkyQ19SQVRFTUNTMCA8PSByYXRlICYmIHJhdGUgPD0gREVTQzkyQ19SQVRFTUNTMTUpCisJCQl0eF9wb3dlciArPSBydGxlZnVzZS0+dHhwd3JfaHQ0MGRpZmZbcmZwYXRoXVtUWF8xU107CisJCWlmIChERVNDOTJDX1JBVEVNQ1M4IDw9IHJhdGUgJiYgcmF0ZSA8PSBERVNDOTJDX1JBVEVNQ1MxNSkKKwkJCXR4X3Bvd2VyICs9IHJ0bGVmdXNlLT50eHB3cl9odDQwZGlmZltyZnBhdGhdW1RYXzJTXTsKKwl9CisKKwlpZiAocnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5ICE9IDIpCisJCWRpZmYgPSBfcnRsOTJlZV9nZXRfdHhwb3dlcl9ieV9yYXRlKGh3LCBCQU5EX09OXzJfNEcsCisJCQkJCQkgICAgcmZwYXRoLCByYXRlKTsKKworCXR4X3Bvd2VyICs9IGRpZmY7CisKKwlpZiAodHhfcG93ZXIgPiBNQVhfUE9XRVJfSU5ERVgpCisJCXR4X3Bvd2VyID0gTUFYX1BPV0VSX0lOREVYOworCisJcmV0dXJuIHR4X3Bvd2VyOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9zZXRfdHhwb3dlcl9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcHdyX2lkeCwKKwkJCQkgICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTggcmF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocmZwYXRoID09IFJGOTBfUEFUSF9BKSB7CisJCXN3aXRjaCAocmF0ZSkgeworCQljYXNlIERFU0M5MkNfUkFURTFNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfQ0NLMV9NQ1MzMiwKKwkJCQkgICAgICBNQVNLQllURTEsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFMk06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTEsCisJCQkJICAgICAgTUFTS0JZVEUxLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTVfNU06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTEsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTExTToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX0NDSzExX0FfQ0NLMl8xMSwKKwkJCQkgICAgICBNQVNLQllURTMsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFNk06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQV9SQVRFMThfMDYsCisJCQkJICAgICAgTUFTS0JZVEUwLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTlNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfUkFURTE4XzA2LAorCQkJCSAgICAgIE1BU0tCWVRFMSwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEUxMk06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQV9SQVRFMThfMDYsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTE4TToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19BX1JBVEUxOF8wNiwKKwkJCQkgICAgICBNQVNLQllURTMsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFMjRNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfUkFURTU0XzI0LAorCQkJCSAgICAgIE1BU0tCWVRFMCwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEUzNk06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQV9SQVRFNTRfMjQsCisJCQkJICAgICAgTUFTS0JZVEUxLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTQ4TToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19BX1JBVEU1NF8yNCwKKwkJCQkgICAgICBNQVNLQllURTIsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFNTRNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfUkFURTU0XzI0LAorCQkJCSAgICAgIE1BU0tCWVRFMywgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MwOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMDNfTUNTMDAsCisJCQkJICAgICAgTUFTS0JZVEUwLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzE6CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQV9NQ1MwM19NQ1MwMCwKKwkJCQkgICAgICBNQVNLQllURTEsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTMjoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19BX01DUzAzX01DUzAwLAorCQkJCSAgICAgIE1BU0tCWVRFMiwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MzOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMDNfTUNTMDAsCisJCQkJICAgICAgTUFTS0JZVEUzLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzQ6CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQV9NQ1MwN19NQ1MwNCwKKwkJCQkgICAgICBNQVNLQllURTAsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTNToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19BX01DUzA3X01DUzA0LAorCQkJCSAgICAgIE1BU0tCWVRFMSwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1M2OgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMDdfTUNTMDQsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzc6CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQV9NQ1MwN19NQ1MwNCwKKwkJCQkgICAgICBNQVNLQllURTMsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTODoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19BX01DUzExX01DUzA4LAorCQkJCSAgICAgIE1BU0tCWVRFMCwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1M5OgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTFfTUNTMDgsCisJCQkJICAgICAgTUFTS0JZVEUxLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzEwOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTFfTUNTMDgsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzExOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTFfTUNTMDgsCisJCQkJICAgICAgTUFTS0JZVEUzLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzEyOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTVfTUNTMTIsCisJCQkJICAgICAgTUFTS0JZVEUwLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzEzOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTVfTUNTMTIsCisJCQkJICAgICAgTUFTS0JZVEUxLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzE0OgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTVfTUNTMTIsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzE1OgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfTUNTMTVfTUNTMTIsCisJCQkJICAgICAgTUFTS0JZVEUzLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgREJHX0xPVUQsICgiSW52YWxpZCBSYXRlISFcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChyZnBhdGggPT0gUkY5MF9QQVRIX0IpIHsKKwkJc3dpdGNoIChyYXRlKSB7CisJCWNhc2UgREVTQzkyQ19SQVRFMU06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyLAorCQkJCSAgICAgIE1BU0tCWVRFMSwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEUyTToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX0NDSzFfNTVfTUNTMzIsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTVfNU06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyLAorCQkJCSAgICAgIE1BU0tCWVRFMywgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEUxMU06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTEsCisJCQkJICAgICAgTUFTS0JZVEUwLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTZNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfUkFURTE4XzA2LAorCQkJCSAgICAgIE1BU0tCWVRFMCwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEU5TToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX1JBVEUxOF8wNiwKKwkJCQkgICAgICBNQVNLQllURTEsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFMTJNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfUkFURTE4XzA2LAorCQkJCSAgICAgIE1BU0tCWVRFMiwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEUxOE06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9SQVRFMThfMDYsCisJCQkJICAgICAgTUFTS0JZVEUzLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTI0TToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX1JBVEU1NF8yNCwKKwkJCQkgICAgICBNQVNLQllURTAsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFMzZNOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfUkFURTU0XzI0LAorCQkJCSAgICAgIE1BU0tCWVRFMSwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEU0OE06CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9SQVRFNTRfMjQsCisJCQkJICAgICAgTUFTS0JZVEUyLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURTU0TToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX1JBVEU1NF8yNCwKKwkJCQkgICAgICBNQVNLQllURTMsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTMDoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzAzX01DUzAwLAorCQkJCSAgICAgIE1BU0tCWVRFMCwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxOgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfTUNTMDNfTUNTMDAsCisJCQkJICAgICAgTUFTS0JZVEUxLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzI6CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9NQ1MwM19NQ1MwMCwKKwkJCQkgICAgICBNQVNLQllURTIsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTMzoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzAzX01DUzAwLAorCQkJCSAgICAgIE1BU0tCWVRFMywgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1M0OgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfTUNTMDdfTUNTMDQsCisJCQkJICAgICAgTUFTS0JZVEUwLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzU6CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9NQ1MwN19NQ1MwNCwKKwkJCQkgICAgICBNQVNLQllURTEsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTNjoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzA3X01DUzA0LAorCQkJCSAgICAgIE1BU0tCWVRFMiwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1M3OgorCQkJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfTUNTMDdfTUNTMDQsCisJCQkJICAgICAgTUFTS0JZVEUzLCBwd3JfaWR4KTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzg6CisJCQlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9NQ1MxMV9NQ1MwOCwKKwkJCQkgICAgICBNQVNLQllURTAsIHB3cl9pZHgpOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTOToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzExX01DUzA4LAorCQkJCSAgICAgIE1BU0tCWVRFMSwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMDoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzExX01DUzA4LAorCQkJCSAgICAgIE1BU0tCWVRFMiwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzExX01DUzA4LAorCQkJCSAgICAgIE1BU0tCWVRFMywgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMjoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzE1X01DUzEyLAorCQkJCSAgICAgIE1BU0tCWVRFMCwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMzoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzE1X01DUzEyLAorCQkJCSAgICAgIE1BU0tCWVRFMSwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxNDoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzE1X01DUzEyLAorCQkJCSAgICAgIE1BU0tCWVRFMiwgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxNToKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJUWEFHQ19CX01DUzE1X01DUzEyLAorCQkJCSAgICAgIE1BU0tCWVRFMywgcHdyX2lkeCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19MT1VELCAoIkludmFsaWQgUmF0ZSEhXG4iKSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfUE9XRVIsIERCR19MT1VELCAoIkludmFsaWQgUkZQYXRoISFcbiIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfcGh5X3NldF90eHBvd2VyX2luZGV4X2J5X3JhdGVfYXJyYXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkJZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTggYncsCisJCQkJCQkJdTggY2hhbm5lbCwgdTggKnJhdGVzLCB1OCBzaXplKQoreworCXU4IGk7CisJdTggcG93ZXJfaW5kZXg7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlwb3dlcl9pbmRleCA9IF9ydGw5MmVlX2dldF90eHBvd2VyX2luZGV4KGh3LCByZnBhdGgsIHJhdGVzW2ldLAorCQkJCQkJCSBidywgY2hhbm5lbCk7CisJCV9ydGw5MmVlX3NldF90eHBvd2VyX2luZGV4KGh3LCBwb3dlcl9pbmRleCwgcmZwYXRoLCByYXRlc1tpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX3BoeV9zZXRfdHhwb3dlcl9pbmRleF9ieV9yYXRlX3NlY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLAorCQkJCQkJCSAgdTggY2hhbm5lbCwKKwkJCQkJCQkgIGVudW0gcmF0ZV9zZWN0aW9uIHNlY3Rpb24pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlpZiAoc2VjdGlvbiA9PSBDQ0spIHsKKwkJdTggY2NrX3JhdGVzW10gPSB7REVTQzkyQ19SQVRFMU0sIERFU0M5MkNfUkFURTJNLAorCQkJCSAgREVTQzkyQ19SQVRFNV81TSwgREVTQzkyQ19SQVRFMTFNfTsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpCisJCQlydGw5MmVlX3BoeV9zZXRfdHhwb3dlcl9pbmRleF9ieV9yYXRlX2FycmF5KGh3LCByZnBhdGgsCisJCQkJCQkJcnRscGh5LT5jdXJyZW50X2NoYW5fYncsCisJCQkJCQkJY2hhbm5lbCwgY2NrX3JhdGVzLCA0KTsKKwl9IGVsc2UgaWYgKHNlY3Rpb24gPT0gT0ZETSkgeworCQl1OCBvZmRtX3JhdGVzW10gPSB7REVTQzkyQ19SQVRFNk0sIERFU0M5MkNfUkFURTlNLAorCQkJCSAgIERFU0M5MkNfUkFURTEyTSwgREVTQzkyQ19SQVRFMThNLAorCQkJCSAgIERFU0M5MkNfUkFURTI0TSwgREVTQzkyQ19SQVRFMzZNLAorCQkJCSAgIERFU0M5MkNfUkFURTQ4TSwgREVTQzkyQ19SQVRFNTRNfTsKKwkJcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfaW5kZXhfYnlfcmF0ZV9hcnJheShodywgcmZwYXRoLAorCQkJCQkJCXJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3LAorCQkJCQkJCWNoYW5uZWwsIG9mZG1fcmF0ZXMsIDgpOworCX0gZWxzZSBpZiAoc2VjdGlvbiA9PSBIVF9NQ1MwX01DUzcpIHsKKwkJdTggaHRfcmF0ZXMxdFtdICA9IHtERVNDOTJDX1JBVEVNQ1MwLCBERVNDOTJDX1JBVEVNQ1MxLAorCQkJCSAgICBERVNDOTJDX1JBVEVNQ1MyLCBERVNDOTJDX1JBVEVNQ1MzLAorCQkJCSAgICBERVNDOTJDX1JBVEVNQ1M0LCBERVNDOTJDX1JBVEVNQ1M1LAorCQkJCSAgICBERVNDOTJDX1JBVEVNQ1M2LCBERVNDOTJDX1JBVEVNQ1M3fTsKKwkJcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfaW5kZXhfYnlfcmF0ZV9hcnJheShodywgcmZwYXRoLAorCQkJCQkJCXJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3LAorCQkJCQkJCWNoYW5uZWwsIGh0X3JhdGVzMXQsIDgpOworCX0gZWxzZSBpZiAoc2VjdGlvbiA9PSBIVF9NQ1M4X01DUzE1KSB7CisJCXU4IGh0X3JhdGVzMnRbXSAgPSB7REVTQzkyQ19SQVRFTUNTOCwgREVTQzkyQ19SQVRFTUNTOSwKKwkJCQkgICAgREVTQzkyQ19SQVRFTUNTMTAsIERFU0M5MkNfUkFURU1DUzExLAorCQkJCSAgICBERVNDOTJDX1JBVEVNQ1MxMiwgREVTQzkyQ19SQVRFTUNTMTMsCisJCQkJICAgIERFU0M5MkNfUkFURU1DUzE0LCBERVNDOTJDX1JBVEVNQ1MxNX07CisJCXJ0bDkyZWVfcGh5X3NldF90eHBvd2VyX2luZGV4X2J5X3JhdGVfYXJyYXkoaHcsIHJmcGF0aCwKKwkJCQkJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idywKKwkJCQkJCQljaGFubmVsLCBodF9yYXRlczJ0LCA4KTsKKwl9IGVsc2UKKwkJUlRfVFJBQ0UoRlBIWSwgUEhZX1RYUFdSLAorCQkJICgiSW52YWxpZCBSYXRlU2VjdGlvbiAlZFxuIiwgc2VjdGlvbikpOworfQorCit2b2lkIHJ0bDkyZWVfcGh5X3NldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRsX3ByaXYoaHcpLT5waHkpOworCWVudW0gcmFkaW9fcGF0aCByZnBhdGg7CisKKwlpZiAocnRsZWZ1c2UtPmJfdHhwd3JfZnJvbWVwcm9tID09IGZhbHNlKQorCQlyZXR1cm47CisJZm9yIChyZnBhdGggPSBSRjkwX1BBVEhfQTsgcmZwYXRoIDwgcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOworCSAgICAgcmZwYXRoKyspIHsKKwkJcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfaW5kZXhfYnlfcmF0ZV9zZWN0aW9uKGh3LCByZnBhdGgsCisJCQkJCQkJICAgICAgY2hhbm5lbCwgQ0NLKTsKKwkJcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfaW5kZXhfYnlfcmF0ZV9zZWN0aW9uKGh3LCByZnBhdGgsCisJCQkJCQkJICAgICAgY2hhbm5lbCwgT0ZETSk7CisJCXJ0bDkyZWVfcGh5X3NldF90eHBvd2VyX2luZGV4X2J5X3JhdGVfc2VjdGlvbihodywgcmZwYXRoLAorCQkJCQkJCSAgICAgIGNoYW5uZWwsCisJCQkJCQkJICAgICAgSFRfTUNTMF9NQ1M3KTsKKwkJaWYgKHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aCA+PSAyKQorCQkJcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfaW5kZXhfYnlfcmF0ZV9zZWN0aW9uKGh3LAorCQkJCQkJCQlyZnBhdGgsIGNoYW5uZWwsCisJCQkJCQkJCUhUX01DUzhfTUNTMTUpOworCX0KK30KKworc3RhdGljIGxvbmcgX3J0bDkyZWVfcGh5X3R4cHdyX2lkeF90b19kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSwKKwkJCQkJICB1OCB0eHB3cmlkeCkKK3sKKwlsb25nIG9mZnNldDsKKwlsb25nIHB3cm91dF9kYm07CisKKwlzd2l0Y2ggKHdpcmVsZXNzbW9kZSkgeworCWNhc2UgV0lSRUxFU1NfTU9ERV9COgorCQlvZmZzZXQgPSAtNzsKKwkJYnJlYWs7CisJY2FzZSBXSVJFTEVTU19NT0RFX0c6CisJY2FzZSBXSVJFTEVTU19NT0RFX05fMjRHOgorCQlvZmZzZXQgPSAtODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJb2Zmc2V0ID0gLTg7CisJCWJyZWFrOworCX0KKwlwd3JvdXRfZGJtID0gdHhwd3JpZHggLyAyICsgb2Zmc2V0OworCXJldHVybiBwd3JvdXRfZGJtOworfQorCit2b2lkIHJ0bDkyZWVfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggb3BlcmF0aW9uKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWVudW0gaW9fdHlwZSBpb3R5cGU7CisKKwlpZiAoIWlzX2hhbF9zdG9wKHJ0bGhhbCkpIHsKKwkJc3dpdGNoIChvcGVyYXRpb24pIHsKKwkJY2FzZSBTQ0FOX09QVF9CQUNLVVBfQkFORDA6CisJCQlpb3R5cGUgPSBJT19DTURfUEFVU0VfQkFORDBfRE1fQllfU0NBTjsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfSU9fQ01ELAorCQkJCQkJICAgICAgKHU4ICopJmlvdHlwZSk7CisKKwkJCWJyZWFrOworCQljYXNlIFNDQU5fT1BUX1JFU1RPUkU6CisJCQlpb3R5cGUgPSBJT19DTURfUkVTVU1FX0RNX0JZX1NDQU47CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0lPX0NNRCwKKwkJCQkJCSAgICAgICh1OCAqKSZpb3R5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIlVua25vd24gU2NhbiBCYWNrdXAgb3BlcmF0aW9uLlxuIikpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcnRsOTJlZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXU4IHJlZ19id19vcG1vZGU7CisJdTggcmVnX3Byc3JfcnNjOworCisJUlRfVFJBQ0UoQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsCisJCSAoIlN3aXRjaCB0byAlcyBiYW5kd2lkdGhcbiIsCisJCSAgcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCA/CisJCSAgIjIwTUh6IiA6ICI0ME1IeiIpKTsKKworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKSB7CisJCXJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzID0gZmFsc2U7CisJCXJldHVybjsKKwl9CisKKwlyZWdfYndfb3Btb2RlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUpOworCXJlZ19wcnNyX3JzYyA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1JSU1IgKyAyKTsKKworCXN3aXRjaCAocnRscGh5LT5jdXJyZW50X2NoYW5fYncpIHsKKwljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6CisJCXJlZ19id19vcG1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUsIHJlZ19id19vcG1vZGUpOworCQlicmVhazsKKwljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6CisJCXJlZ19id19vcG1vZGUgJj0gfkJXX09QTU9ERV8yME1IWjsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JXT1BNT0RFLCByZWdfYndfb3Btb2RlKTsKKwkJcmVnX3Byc3JfcnNjID0gKHJlZ19wcnNyX3JzYyAmIDB4OTApIHwKKwkJCSAgICAgICAobWFjLT5jdXJfNDBfcHJpbWVfc2MgPDwgNSk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SUlNSICsgMiwgcmVnX3Byc3JfcnNjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInVua25vd24gYmFuZHdpZHRoOiAlI1hcbiIsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocnRscGh5LT5jdXJyZW50X2NoYW5fYncpIHsKKwljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9SRk1PRCwgQlJGTU9ELCAweDApOworCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTFfUkZNT0QsIEJSRk1PRCwgMHgwKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RYUFNFVURPTk9JU0VXR1QsCisJCQkgICAgICAoQklUKDMxKSB8IEJJVCgzMCkpLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOgorCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJSRk1PRCwgMHgxKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0ExX1JGTU9ELCBCUkZNT0QsIDB4MSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX1NZU1RFTSwgQkNDS19TSURFQkFORCwKKwkJCSAgICAgIChtYWMtPmN1cl80MF9wcmltZV9zYyA+PiAxKSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9MU1RGLCAweEMwMCwKKwkJCSAgICAgIG1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKKworCQlydGxfc2V0X2JicmVnKGh3LCAweDgxOCwgKEJJVCgyNikgfCBCSVQoMjcpKSwKKwkJCSAgICAgIChtYWMtPmN1cl80MF9wcmltZV9zYyA9PQorCQkJICAgICAgIEhBTF9QUklNRV9DSE5MX09GRlNFVF9MT1dFUikgPyAyIDogMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJ1bmtub3duIGJhbmR3aWR0aDogJSNYXG4iLCBydGxwaHktPmN1cnJlbnRfY2hhbl9idykpOworCQlicmVhazsKKwl9CisJcnRsOTJlZV9waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KTsKKwlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IGZhbHNlOworCVJUX1RSQUNFKENPTVBfU0NBTiwgREJHX0xPVUQsICgiXG4iKSk7Cit9CisKK3ZvaWQgcnRsOTJlZV9waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hfdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IHRtcF9idyA9IHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3OworCisJaWYgKHJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzKQorCQlyZXR1cm47CisJcnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MgPSB0cnVlOworCWlmICgoIWlzX2hhbF9zdG9wKHJ0bGhhbCkpICYmICEoUlRfQ0FOTk9UX0lPKGh3KSkpIHsKKwkJcnRsOTJlZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soaHcpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoImZhbHNlIGRyaXZlciBzbGVlcCBvciB1bmxvYWRcbiIpKTsKKwkJcnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwkJcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPSB0bXBfYnc7CisJfQorfQorCit2b2lkIHJ0bDkyZWVfcGh5X3N3X2NobmxfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1MzIgZGVsYXk7CisKKwlSVF9UUkFDRShDT01QX1NDQU4sIERCR19UUkFDRSwKKwkJICgic3dpdGNoIHRvIGNoYW5uZWwlZFxuIiwgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwpKTsKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCWRvIHsKKwkJaWYgKCFydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcykKKwkJCWJyZWFrOworCQlpZiAoIV9ydGw5MmVlX3BoeV9zd19jaG5sX3N0ZXBfYnlfc3RlcAorCQkgICAgKGh3LCBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCwgJnJ0bHBoeS0+c3dfY2hubF9zdGFnZSwKKwkJICAgICAmcnRscGh5LT5zd19jaG5sX3N0ZXAsICZkZWxheSkpIHsKKwkJCWlmIChkZWxheSA+IDApCisJCQkJbWRlbGF5KGRlbGF5KTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCXJ0bHBoeS0+c3dfY2hubF9pbnByb2dyZXNzID0gZmFsc2U7CisJCX0KKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisJUlRfVFJBQ0UoQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsICgiXG4iKSk7Cit9CisKK3U4IHJ0bDkyZWVfcGh5X3N3X2Nobmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmIChydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcykKKwkJcmV0dXJuIDA7CisJaWYgKHJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzKQorCQlyZXR1cm4gMDsKKwlSVF9BU1NFUlQoKHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsIDw9IDE0KSwKKwkJICAoIldJUkVMRVNTX01PREVfRyBidXQgY2hhbm5lbD4xNCIpKTsKKwlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IHRydWU7CisJcnRscGh5LT5zd19jaG5sX3N0YWdlID0gMDsKKwlydGxwaHktPnN3X2Nobmxfc3RlcCA9IDA7CisJaWYgKCEoaXNfaGFsX3N0b3AocnRsaGFsKSkgJiYgIShSVF9DQU5OT1RfSU8oaHcpKSkgeworCQlydGw5MmVlX3BoeV9zd19jaG5sX2NhbGxiYWNrKGh3KTsKKwkJUlRfVFJBQ0UoQ09NUF9DSEFOLCBEQkdfTE9VRCwKKwkJCSAoInN3X2NobmxfaW5wcm9ncmVzcyBmYWxzZSBzY2hkdWxlIHdvcmtpdGVtIGN1cnJlbnQgY2hhbm5lbCAlZFxuIiwKKwkJCSBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCkpOworCQlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IGZhbHNlOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKENPTVBfQ0hBTiwgREJHX0xPVUQsCisJCQkgKCJzd19jaG5sX2lucHJvZ3Jlc3MgZmFsc2UgZHJpdmVyIHNsZWVwIG9yIHVubG9hZFxuIikpOworCQlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X3N3X2Nobmxfc3RlcF9ieV9zdGVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1OCBjaGFubmVsLCB1OCAqc3RhZ2UsIHU4ICpzdGVwLAorCQkJCQkgICAgICB1MzIgKmRlbGF5KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBzd2NobmxjbWQgcHJlY29tbW9uY21kW01BWF9QUkVDTURfQ05UXTsKKwl1MzIgcHJlY29tbW9uY21kY250OworCXN0cnVjdCBzd2NobmxjbWQgcG9zdGNvbW1vbmNtZFtNQVhfUE9TVENNRF9DTlRdOworCXUzMiBwb3N0Y29tbW9uY21kY250OworCXN0cnVjdCBzd2NobmxjbWQgcmZkZXBlbmRjbWRbTUFYX1JGREVQRU5EQ01EX0NOVF07CisJdTMyIHJmZGVwZW5kY21kY250OworCXN0cnVjdCBzd2NobmxjbWQgKmN1cnJlbnRjbWQgPSBOVUxMOworCXU4IHJmcGF0aDsKKwl1OCBudW1fdG90YWxfcmZwYXRoID0gcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOworCisJcHJlY29tbW9uY21kY250ID0gMDsKKwlfcnRsOTJlZV9waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocHJlY29tbW9uY21kLCBwcmVjb21tb25jbWRjbnQrKywKKwkJCQkJICBNQVhfUFJFQ01EX0NOVCwKKwkJCQkJICBDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsIDAsIDAsIDApOworCV9ydGw5MmVlX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShwcmVjb21tb25jbWQsIHByZWNvbW1vbmNtZGNudCsrLAorCQkJCQkgIE1BWF9QUkVDTURfQ05ULCBDTURJRF9FTkQsIDAsIDAsIDApOworCisJcG9zdGNvbW1vbmNtZGNudCA9IDA7CisKKwlfcnRsOTJlZV9waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocG9zdGNvbW1vbmNtZCwgcG9zdGNvbW1vbmNtZGNudCsrLAorCQkJCQkgIE1BWF9QT1NUQ01EX0NOVCwgQ01ESURfRU5ELCAwLCAwLCAwKTsKKworCXJmZGVwZW5kY21kY250ID0gMDsKKworCVJUX0FTU0VSVCgoY2hhbm5lbCA+PSAxICYmIGNoYW5uZWwgPD0gMTQpLAorCQkgICgiaWxsZWdhbCBjaGFubmVsIGZvciBaZWJyYTogJWRcbiIsIGNoYW5uZWwpKTsKKworCV9ydGw5MmVlX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShyZmRlcGVuZGNtZCwgcmZkZXBlbmRjbWRjbnQrKywKKwkJCQkJICBNQVhfUkZERVBFTkRDTURfQ05ULAorCQkJCQkgIENNRElEX1JGX1dSSVRFUkVHLAorCQkJCQkgIFJGX0NITkxCVywgY2hhbm5lbCwgMTApOworCisJX3J0bDkyZWVfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHJmZGVwZW5kY21kLCByZmRlcGVuZGNtZGNudCsrLAorCQkJCQkgIE1BWF9SRkRFUEVORENNRF9DTlQsIENNRElEX0VORCwKKwkJCQkJICAwLCAwLCAwKTsKKworCWRvIHsKKwkJc3dpdGNoICgqc3RhZ2UpIHsKKwkJY2FzZSAwOgorCQkJY3VycmVudGNtZCA9ICZwcmVjb21tb25jbWRbKnN0ZXBdOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWN1cnJlbnRjbWQgPSAmcmZkZXBlbmRjbWRbKnN0ZXBdOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWN1cnJlbnRjbWQgPSAmcG9zdGNvbW1vbmNtZFsqc3RlcF07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiSW52YWxpZCAnc3RhZ2UnID0gJWQsIENoZWNrIGl0IVxuIiAsCisJCQkJICAqc3RhZ2UpKTsKKwkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY3VycmVudGNtZC0+Y21kaWQgPT0gQ01ESURfRU5EKSB7CisJCQlpZiAoKCpzdGFnZSkgPT0gMikgeworCQkJCXJldHVybiB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQkoKnN0YWdlKSsrOworCQkJCSgqc3RlcCkgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJc3dpdGNoIChjdXJyZW50Y21kLT5jbWRpZCkgeworCQljYXNlIENNRElEX1NFVF9UWFBPV0VST1dFUl9MRVZFTDoKKwkJCXJ0bDkyZWVfcGh5X3NldF90eHBvd2VyX2xldmVsKGh3LCBjaGFubmVsKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1dSSVRFUE9SVF9VTE9ORzoKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBjdXJyZW50Y21kLT5wYXJhMSwKKwkJCQkJY3VycmVudGNtZC0+cGFyYTIpOworCQkJYnJlYWs7CisJCWNhc2UgQ01ESURfV1JJVEVQT1JUX1VTSE9SVDoKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCSAgICAgICAodTE2KSBjdXJyZW50Y21kLT5wYXJhMik7CisJCQlicmVhazsKKwkJY2FzZSBDTURJRF9XUklURVBPUlRfVUNIQVI6CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBjdXJyZW50Y21kLT5wYXJhMSwKKwkJCQkgICAgICAgKHU4KSBjdXJyZW50Y21kLT5wYXJhMik7CisJCQlicmVhazsKKwkJY2FzZSBDTURJRF9SRl9XUklURVJFRzoKKwkJCWZvciAocmZwYXRoID0gMDsgcmZwYXRoIDwgbnVtX3RvdGFsX3JmcGF0aDsgcmZwYXRoKyspIHsKKwkJCQlydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSA9CisJCQkJCSgocnRscGh5LT5yZnJlZ19jaG5sdmFsW3JmcGF0aF0gJgorCQkJCQkgIDB4ZmZmZmYwMCkgfCBjdXJyZW50Y21kLT5wYXJhMik7CisKKwkJCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXJmcGF0aCwKKwkJCQkJICAgICAgY3VycmVudGNtZC0+cGFyYTEsCisJCQkJCSAgICAgIDB4M2ZmLAorCQkJCQkgICAgICBydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwkoKmRlbGF5KSA9IGN1cnJlbnRjbWQtPm1zZGVsYXk7CisJKCpzdGVwKSsrOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHN0cnVjdCBzd2NobmxjbWQgKmNtZHRhYmxlLAorCQkJCQkgICAgICB1MzIgY21kdGFibGVpZHgsIHUzMiBjbWR0YWJsZXN6LAorCQkJCQkgICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwKKwkJCQkJICAgICAgdTMyIHBhcmExLCB1MzIgcGFyYTIsIHUzMiBtc2RlbGF5KQoreworCXN0cnVjdCBzd2NobmxjbWQgKnBjbWQ7CisKKwlpZiAoY21kdGFibGUgPT0gTlVMTCkgeworCQlSVF9BU1NFUlQoZmFsc2UsICgiY21kdGFibGUgY2Fubm90IGJlIE5VTEwuXG4iKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoY21kdGFibGVpZHggPj0gY21kdGFibGVzeikKKwkJcmV0dXJuIGZhbHNlOworCisJcGNtZCA9IGNtZHRhYmxlICsgY21kdGFibGVpZHg7CisJcGNtZC0+Y21kaWQgPSBjbWRpZDsKKwlwY21kLT5wYXJhMSA9IHBhcmExOworCXBjbWQtPnBhcmEyID0gcGFyYTI7CisJcGNtZC0+bXNkZWxheSA9IG1zZGVsYXk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1OCBfcnRsOTJlZV9waHlfcGF0aF9hX2lxayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBjb25maWdfcGF0aGIpCit7CisJdTMyIHJlZ19lYWMsIHJlZ19lOTQsIHJlZ19lOWM7CisJdTggcmVzdWx0ID0gMHgwMDsKKwkvKiBwYXRoLUEgSVFLIHNldHRpbmcgKi8KKwkvKiBQQS9QQUQgY29udHJvbGxlZCBieSAweDAgKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4MDAwMDAwMDApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweGRmLCBSRlJFR19PRkZTRVRfTUFTSywgMHgxODApOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9JUUssIE1BU0tEV09SRCwgMHg4MDgwMDAwMCk7CisKKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDE4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfUElfQSwgTUFTS0RXT1JELCAweDgyMTQwMzAzKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1BJX0EsIE1BU0tEV09SRCwgMHg2ODE2MDAwMCk7CisKKwkvKkxPIGNhbGlicmF0aW9uIHNldHRpbmcqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1JzcCwgTUFTS0RXT1JELCAweDAwNDYyOTExKTsKKworCS8qT25lIHNob3QsIHBhdGggQSBMT0sgJiBJUUsqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1B0cywgTUFTS0RXT1JELCAweGY5MDAwMDAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSSVFLX0FHQ19QdHMsIE1BU0tEV09SRCwgMHhmODAwMDAwMCk7CisKKwltZGVsYXkoSVFLX0RFTEFZX1RJTUUpOworCisJcmVnX2VhYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZWFjLCBNQVNLRFdPUkQpOworCXJlZ19lOTQgPSBydGxfZ2V0X2JicmVnKGh3LCAweGU5NCwgTUFTS0RXT1JEKTsKKwlyZWdfZTljID0gcnRsX2dldF9iYnJlZyhodywgMHhlOWMsIE1BU0tEV09SRCk7CisKKwlpZiAoIShyZWdfZWFjICYgQklUKDI4KSkgJiYKKwkgICAgKCgocmVnX2U5NCAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDE0MikgJiYKKwkgICAgKCgocmVnX2U5YyAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDQyKSkKKwkJcmVzdWx0IHw9IDB4MDE7CisJZWxzZQorCQlyZXR1cm4gcmVzdWx0OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHU4IF9ydGw5MmVlX3BoeV9wYXRoX2JfaXFrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXUzMiByZWdfZWFjLCByZWdfZWI0LCByZWdfZWJjOworCXU4IHJlc3VsdCA9IDB4MDA7CisKKwkvKiBQQS9QQUQgY29udHJvbGxlZCBieSAweDAgKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4MDAwMDAwMDApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweGRmLCBSRlJFR19PRkZTRVRfTUFTSywgMHgxODApOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9JUUssIE1BU0tEV09SRCwgMHg4MDgwMDAwMCk7CisKKwlydGxfc2V0X2JicmVnKGh3LCAweGUyOCwgTUFTS0RXT1JELCAweDAwMDAwMDAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGUyOCwgTUFTS0RXT1JELCAweDgwODAwMDAwKTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfVG9uZV9BLCBNQVNLRFdPUkQsIDB4MzgwMDhjMWMpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfVG9uZV9BLCBNQVNLRFdPUkQsIDB4MzgwMDhjMWMpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfVG9uZV9CLCBNQVNLRFdPUkQsIDB4MTgwMDhjMWMpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfVG9uZV9CLCBNQVNLRFdPUkQsIDB4MzgwMDhjMWMpOworCisJcnRsX3NldF9iYnJlZyhodywgUlR4X0lRS19QSV9CLCBNQVNLRFdPUkQsIDB4ODIxNDAzZTIpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfUElfQiwgTUFTS0RXT1JELCAweDY4MTYwMDAwKTsKKworCS8qIExPIGNhbGlicmF0aW9uIHNldHRpbmcgKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSSVFLX0FHQ19Sc3AsIE1BU0tEV09SRCwgMHgwMDQ2MjkxMSk7CisKKwkvKk9uZSBzaG90LCBwYXRoIEIgTE9LICYgSVFLKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSSVFLX0FHQ19QdHMsIE1BU0tEV09SRCwgMHhmYTAwMDAwMCk7CisJcnRsX3NldF9iYnJlZyhodywgUklRS19BR0NfUHRzLCBNQVNLRFdPUkQsIDB4ZjgwMDAwMDApOworCisJbWRlbGF5KElRS19ERUxBWV9USU1FKTsKKworCXJlZ19lYWMgPSBydGxfZ2V0X2JicmVnKGh3LCAweGVhYywgTUFTS0RXT1JEKTsKKwlyZWdfZWI0ID0gcnRsX2dldF9iYnJlZyhodywgMHhlYjQsIE1BU0tEV09SRCk7CisJcmVnX2ViYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZWJjLCBNQVNLRFdPUkQpOworCisJaWYgKCEocmVnX2VhYyAmIEJJVCgzMSkpICYmCisJICAgICgoKHJlZ19lYjQgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHgxNDIpICYmCisJICAgICgoKHJlZ19lYmMgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHg0MikpCisJCXJlc3VsdCB8PSAweDAxOworCWVsc2UKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB1OCBfcnRsOTJlZV9waHlfcGF0aF9hX3J4X2lxayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBjb25maWdfcGF0aGIpCit7CisJdTMyIHJlZ19lYWMsIHJlZ19lOTQsIHJlZ19lOWMsIHJlZ19lYTQgLCB1MzJ0ZW1wOworCXU4IHJlc3VsdCA9IDB4MDA7CisKKwkvKkdldCBUWElNUiBTZXR0aW5nKi8KKwkvKk1vZGlmeSBSWCBJUUsgbW9kZSB0YWJsZSovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0lRSywgTUFTS0RXT1JELCAweDAwMDAwMDAwKTsKKworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9XRV9MVVQsIFJGUkVHX09GRlNFVF9NQVNLLCAweDgwMGEwKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfUkNLX09TLCBSRlJFR19PRkZTRVRfTUFTSywgMHgzMDAwMCk7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIFJGX1RYUEFfRzEsIFJGUkVHX09GRlNFVF9NQVNLLCAweDAwMDBmKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfVFhQQV9HMiwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4ZjExN2IpOworCisJLypQQS9QQUQgY29udHJvbCBieSAweDU2LCBhbmQgc2V0ID0gMHgwKi8KKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHhkZiwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4OTgwKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHg1NiwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4NTEwMDApOworCisJLyplbnRlciBJUUsgbW9kZSovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0lRSywgTUFTS0RXT1JELCAweDgwODAwMDAwKTsKKworCS8qSVFLIFNldHRpbmcqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUssIE1BU0tEV09SRCwgMHgwMTAwN2MwMCk7CisJcnRsX3NldF9iYnJlZyhodywgUlJ4X0lRSywgTUFTS0RXT1JELCAweDAxMDA0ODAwKTsKKworCS8qcGF0aCBhIElRSyBzZXR0aW5nKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDE4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfUElfQSwgTUFTS0RXT1JELCAweDgyMTYwYzFmKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1BJX0EsIE1BU0tEV09SRCwgMHg2ODE2MGMxZik7CisKKwkvKkxPIGNhbGlicmF0aW9uIFNldHRpbmcqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1JzcCwgTUFTS0RXT1JELCAweDAwNDZhOTExKTsKKworCS8qb25lIHNob3QsIHBhdGggQSBMT0sgJiBpcWsqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1B0cywgTUFTS0RXT1JELCAweGZhMDAwMDAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSSVFLX0FHQ19QdHMsIE1BU0tEV09SRCwgMHhmODAwMDAwMCk7CisKKwltZGVsYXkoSVFLX0RFTEFZX1RJTUUpOworCisJLyogQ2hlY2sgZmFpbGVkICovCisJcmVnX2VhYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJSeF9Qb3dlcl9BZnRlcl9JUUtfQV8yLCBNQVNLRFdPUkQpOworCXJlZ19lOTQgPSBydGxfZ2V0X2JicmVnKGh3LCBSVHhfUG93ZXJfQmVmb3JlX0lRS19BLCBNQVNLRFdPUkQpOworCXJlZ19lOWMgPSBydGxfZ2V0X2JicmVnKGh3LCBSVHhfUG93ZXJfQWZ0ZXJfSVFLX0EsIE1BU0tEV09SRCk7CisKKwlpZiAoIShyZWdfZWFjICYgQklUKDI4KSkgJiYKKwkgICAgKCgocmVnX2U5NCAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDE0MikgJiYKKwkgICAgKCgocmVnX2U5YyAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDQyKSkgeworCQlyZXN1bHQgfD0gMHgwMTsKKwl9IGVsc2UgeworCQkvKglQQS9QQUQgY29udHJvbGxlZCBieSAweDAgKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0lRSywgTUFTS0RXT1JELCAweDAwMDAwMDAwKTsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4ZGYsIFJGUkVHX09GRlNFVF9NQVNLLCAweDE4MCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJdTMydGVtcCA9IDB4ODAwMDdDMDAgfCAocmVnX2U5NCAmIDB4M0ZGMDAwMCkgIHwKKwkJICAoKHJlZ19lOWMgJiAweDNGRjAwMDApID4+IDE2KTsKKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLLCBNQVNLRFdPUkQsIHUzMnRlbXApOworCS8qUlggSVFLKi8KKwkvKk1vZGlmeSBSWCBJUUsgbW9kZSB0YWJsZSovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0lRSywgTUFTS0RXT1JELCAweDAwMDAwMDAwKTsKKworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9XRV9MVVQsIFJGUkVHX09GRlNFVF9NQVNLLCAweDgwMGEwKTsKKworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9SQ0tfT1MsIFJGUkVHX09GRlNFVF9NQVNLLCAweDMwMDAwKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfVFhQQV9HMSwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MDAwMGYpOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9UWFBBX0cyLCBSRlJFR19PRkZTRVRfTUFTSywgMHhmN2ZmYSk7CisKKwkvKlBBL1BBRCBjb250cm9sIGJ5IDB4NTYsIGFuZCBzZXQgPSAweDAqLworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweGRmLCBSRlJFR19PRkZTRVRfTUFTSywgMHg5ODApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDU2LCBSRlJFR19PRkZTRVRfTUFTSywgMHg1MTAwMCk7CisKKwkvKmVudGVyIElRSyBtb2RlKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4ODA4MDAwMDApOworCisJLypJUUsgU2V0dGluZyovCisJcnRsX3NldF9iYnJlZyhodywgUlJ4X0lRSywgTUFTS0RXT1JELCAweDAxMDA0ODAwKTsKKworCS8qcGF0aCBhIElRSyBzZXR0aW5nKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDE4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfUElfQSwgTUFTS0RXT1JELCAweDgyMTYwYzFmKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1BJX0EsIE1BU0tEV09SRCwgMHgyODE2MGMxZik7CisKKwkvKkxPIGNhbGlicmF0aW9uIFNldHRpbmcqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1JzcCwgTUFTS0RXT1JELCAweDAwNDZhODkxKTsKKwkvKm9uZSBzaG90LCBwYXRoIEEgTE9LICYgaXFrKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSSVFLX0FHQ19QdHMsIE1BU0tEV09SRCwgMHhmYTAwMDAwMCk7CisJcnRsX3NldF9iYnJlZyhodywgUklRS19BR0NfUHRzLCBNQVNLRFdPUkQsIDB4ZjgwMDAwMDApOworCisJbWRlbGF5KElRS19ERUxBWV9USU1FKTsKKwkvKkNoZWNrIGZhaWxlZCovCisJcmVnX2VhYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJSeF9Qb3dlcl9BZnRlcl9JUUtfQV8yLCBNQVNLRFdPUkQpOworCXJlZ19lYTQgPSBydGxfZ2V0X2JicmVnKGh3LCBSUnhfUG93ZXJfQmVmb3JlX0lRS19BXzIsIE1BU0tEV09SRCk7CisKKwkvKlBBL1BBRCBjb250cm9sbGVkIGJ5IDB4MCovCisJLypsZWF2ZSBJUUsgbW9kZSovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0lRSywgTUFTS0RXT1JELCAweDAwMDAwMDAwKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHhkZiwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MTgwKTsKKwkvKmlmIFR4IGlzIE9LLCBjaGVjayB3aGV0aGVyIFJ4IGlzIE9LKi8KKwlpZiAoIShyZWdfZWFjICYgQklUKDI3KSkgJiYKKwkgICAgKCgocmVnX2VhNCAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDEzMikgJiYKKwkgICAgKCgocmVnX2VhYyAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDM2KSkKKwkJcmVzdWx0IHw9IDB4MDI7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdTggX3J0bDkyZWVfcGh5X3BhdGhfYl9yeF9pcWsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY29uZmlnX3BhdGhiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgcmVnX2VhYywgcmVnX2ViNCwgcmVnX2ViYywgcmVnX2VjYywgcmVnX2VjNCwgdTMydGVtcDsKKwl1OCByZXN1bHQgPSAweDAwOworCisJLypHZXQgVFhJTVIgU2V0dGluZyovCisJLypNb2RpZnkgUlggSVFLIG1vZGUgdGFibGUqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9JUUssIE1BU0tEV09SRCwgMHgwMDAwMDAwMCk7CisKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQiwgUkZfV0VfTFVULCBSRlJFR19PRkZTRVRfTUFTSywgMHg4MDBhMCk7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIFJGX1JDS19PUywgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MzAwMDApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCBSRl9UWFBBX0cxLCBSRlJFR19PRkZTRVRfTUFTSywgMHgwMDAwZik7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIFJGX1RYUEFfRzIsIFJGUkVHX09GRlNFVF9NQVNLLCAweGYxMTdiKTsKKworCS8qUEEvUEFEIGFsbCBvZmYqLworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweGRmLCBSRlJFR19PRkZTRVRfTUFTSywgMHg5ODApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweDU2LCBSRlJFR19PRkZTRVRfTUFTSywgMHg1MTAwMCk7CisKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4ODA4MDAwMDApOworCisJLypJUUsgU2V0dGluZyovCisJcnRsX3NldF9iYnJlZyhodywgUlR4X0lRSywgTUFTS0RXT1JELCAweDAxMDA3YzAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLLCBNQVNLRFdPUkQsIDB4MDEwMDQ4MDApOworCisJLypwYXRoIGEgSVFLIHNldHRpbmcqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfVG9uZV9BLCBNQVNLRFdPUkQsIDB4MzgwMDhjMWMpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfVG9uZV9BLCBNQVNLRFdPUkQsIDB4MzgwMDhjMWMpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfVG9uZV9CLCBNQVNLRFdPUkQsIDB4MTgwMDhjMWMpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfVG9uZV9CLCBNQVNLRFdPUkQsIDB4MzgwMDhjMWMpOworCisJcnRsX3NldF9iYnJlZyhodywgUlR4X0lRS19QSV9CLCBNQVNLRFdPUkQsIDB4ODIxNjBjMWYpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfUElfQiwgTUFTS0RXT1JELCAweDY4MTYwYzFmKTsKKworCS8qTE8gY2FsaWJyYXRpb24gU2V0dGluZyovCisJcnRsX3NldF9iYnJlZyhodywgUklRS19BR0NfUnNwLCBNQVNLRFdPUkQsIDB4MDA0NmE5MTEpOworCisJLypvbmUgc2hvdCwgcGF0aCBBIExPSyAmIGlxayovCisJcnRsX3NldF9iYnJlZyhodywgUklRS19BR0NfUHRzLCBNQVNLRFdPUkQsIDB4ZmEwMDAwMDApOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1B0cywgTUFTS0RXT1JELCAweGY4MDAwMDAwKTsKKworCW1kZWxheShJUUtfREVMQVlfVElNRSk7CisKKwkvKiBDaGVjayBmYWlsZWQgKi8KKwlyZWdfZWFjID0gcnRsX2dldF9iYnJlZyhodywgUlJ4X1Bvd2VyX0FmdGVyX0lRS19BXzIsIE1BU0tEV09SRCk7CisJcmVnX2ViNCA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJUeF9Qb3dlcl9CZWZvcmVfSVFLX0IsIE1BU0tEV09SRCk7CisJcmVnX2ViYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJUeF9Qb3dlcl9BZnRlcl9JUUtfQiwgTUFTS0RXT1JEKTsKKworCWlmICghKHJlZ19lYWMgJiBCSVQoMzEpKSAmJgorCSAgICAoKChyZWdfZWI0ICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MTQyKSAmJgorCSAgICAoKChyZWdfZWJjICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4NDIpKSB7CisJCXJlc3VsdCB8PSAweDAxOworCX0gZWxzZSB7CisJCS8qCVBBL1BBRCBjb250cm9sbGVkIGJ5IDB4MCAqLworCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4MDAwMDAwMDApOworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQiwgMHhkZiwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MTgwKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwl1MzJ0ZW1wID0gMHg4MDAwN0MwMCB8IChyZWdfZWI0ICYgMHgzRkYwMDAwKSB8CisJCSAgKChyZWdfZWJjICYgMHgzRkYwMDAwKSA+PiAxNik7CisJcnRsX3NldF9iYnJlZyhodywgUlR4X0lRSywgTUFTS0RXT1JELCB1MzJ0ZW1wKTsKKwkvKlJYIElRSyovCisJLypNb2RpZnkgUlggSVFLIG1vZGUgdGFibGUqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9JUUssIE1BU0tEV09SRCwgMHgwMDAwMDAwMCk7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIFJGX1dFX0xVVCwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4ODAwYTApOworCisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIFJGX1JDS19PUywgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MzAwMDApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCBSRl9UWFBBX0cxLCBSRlJFR19PRkZTRVRfTUFTSywgMHgwMDAwZik7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIFJGX1RYUEFfRzIsIFJGUkVHX09GRlNFVF9NQVNLLCAweGY3ZmZhKTsKKworCS8qUEEvUEFEIGFsbCBvZmYqLworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweGRmLCBSRlJFR19PRkZTRVRfTUFTSywgMHg5ODApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweDU2LCBSRlJFR19PRkZTRVRfTUFTSywgMHg1MTAwMCk7CisKKwkvKmVudGVyIElRSyBtb2RlKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4ODA4MDAwMDApOworCisJLypJUUsgU2V0dGluZyovCisJcnRsX3NldF9iYnJlZyhodywgUlJ4X0lRSywgTUFTS0RXT1JELCAweDAxMDA0ODAwKTsKKworCS8qcGF0aCBiIElRSyBzZXR0aW5nKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQSwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDM4MDA4YzFjKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1RvbmVfQiwgTUFTS0RXT1JELCAweDE4MDA4YzFjKTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUtfUElfQiwgTUFTS0RXT1JELCAweDgyMTYwYzFmKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLX1BJX0IsIE1BU0tEV09SRCwgMHgyODE2MGMxZik7CisKKwkvKkxPIGNhbGlicmF0aW9uIFNldHRpbmcqLworCXJ0bF9zZXRfYmJyZWcoaHcsIFJJUUtfQUdDX1JzcCwgTUFTS0RXT1JELCAweDAwNDZhODkxKTsKKwkvKm9uZSBzaG90LCBwYXRoIEEgTE9LICYgaXFrKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSSVFLX0FHQ19QdHMsIE1BU0tEV09SRCwgMHhmYTAwMDAwMCk7CisJcnRsX3NldF9iYnJlZyhodywgUklRS19BR0NfUHRzLCBNQVNLRFdPUkQsIDB4ZjgwMDAwMDApOworCisJbWRlbGF5KElRS19ERUxBWV9USU1FKTsKKwkvKkNoZWNrIGZhaWxlZCovCisJcmVnX2VhYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJSeF9Qb3dlcl9BZnRlcl9JUUtfQV8yLCBNQVNLRFdPUkQpOworCXJlZ19lYzQgPSBydGxfZ2V0X2JicmVnKGh3LCBSUnhfUG93ZXJfQmVmb3JlX0lRS19CXzIsIE1BU0tEV09SRCk7CisJcmVnX2VjYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJSeF9Qb3dlcl9BZnRlcl9JUUtfQl8yLCBNQVNLRFdPUkQpOworCS8qUEEvUEFEIGNvbnRyb2xsZWQgYnkgMHgwKi8KKwkvKmxlYXZlIElRSyBtb2RlKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4MDAwMDAwMDApOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweGRmLCBSRlJFR19PRkZTRVRfTUFTSywgMHgxODApOworCS8qaWYgVHggaXMgT0ssIGNoZWNrIHdoZXRoZXIgUnggaXMgT0sqLworCWlmICghKHJlZ19lYWMgJiBCSVQoMzApKSAmJgorCSAgICAoKChyZWdfZWM0ICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MTMyKSAmJgorCSAgICAoKChyZWdfZWNjICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MzYpKQorCQlyZXN1bHQgfD0gMHgwMjsKKwllbHNlCisJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELCAoIlBhdGggQiBSeCBJUUsgZmFpbCEhXG4iKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfcGF0aF9hX2ZpbGxfaXFrX21hdHJpeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCWJvb2wgYl9pcWtfb2ssIGxvbmcgcmVzdWx0W11bOF0sCisJCQkJCQl1OCBmaW5hbF9jYW5kaWRhdGUsCisJCQkJCQlib29sIGJ0eG9ubHkpCit7CisJdTMyIG9sZHZhbF8wLCB4LCB0eDBfYSwgcmVnOworCWxvbmcgeSwgdHgwX2M7CisKKwlpZiAoZmluYWxfY2FuZGlkYXRlID09IDB4RkYpIHsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoYl9pcWtfb2spIHsKKwkJb2xkdmFsXzAgPSAocnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwKKwkJCQkJICBNQVNLRFdPUkQpID4+IDIyKSAmIDB4M0ZGOworCQl4ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMF07CisJCWlmICgoeCAmIDB4MDAwMDAyMDApICE9IDApCisJCQl4ID0geCB8IDB4RkZGRkZDMDA7CisJCXR4MF9hID0gKHggKiBvbGR2YWxfMCkgPj4gODsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwgMHgzRkYsIHR4MF9hKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0VDQ0FUSFJFU0hPTEQsIEJJVCgzMSksCisJCQkgICAgICAoKHggKiBvbGR2YWxfMCA+PiA3KSAmIDB4MSkpOworCQl5ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMV07CisJCWlmICgoeSAmIDB4MDAwMDAyMDApICE9IDApCisJCQl5ID0geSB8IDB4RkZGRkZDMDA7CisJCXR4MF9jID0gKHkgKiBvbGR2YWxfMCkgPj4gODsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hDVFhBRkUsIDB4RjAwMDAwMDAsCisJCQkgICAgICAoKHR4MF9jICYgMHgzQzApID4+IDYpKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwgMHgwMDNGMDAwMCwKKwkJCSAgICAgICh0eDBfYyAmIDB4M0YpKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0VDQ0FUSFJFU0hPTEQsIEJJVCgyOSksCisJCQkgICAgICAoKHkgKiBvbGR2YWxfMCA+PiA3KSAmIDB4MSkpOworCisJCWlmIChidHhvbmx5KQorCQkJcmV0dXJuOworCisJCXJlZyA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzJdOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEFSWElRSU1CQUxBTkNFLCAweDNGRiwgcmVnKTsKKworCQlyZWcgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVszXSAmIDB4M0Y7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVJYSVFJTUJBTEFOQ0UsIDB4RkMwMCwgcmVnKTsKKworCQlyZWcgPSAocmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bM10gPj4gNikgJiAweEY7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9SWElRRVhUQU5UQSwgMHhGMDAwMDAwMCwgcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9wYXRoX2JfZmlsbF9pcWtfbWF0cml4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkJYm9vbCBiX2lxa19vaywgbG9uZyByZXN1bHRbXVs4XSwKKwkJCQkJCXU4IGZpbmFsX2NhbmRpZGF0ZSwKKwkJCQkJCWJvb2wgYnR4b25seSkKK3sKKwl1MzIgb2xkdmFsXzEsIHgsIHR4MV9hLCByZWc7CisJbG9uZyB5LCB0eDFfYzsKKworCWlmIChmaW5hbF9jYW5kaWRhdGUgPT0gMHhGRikgeworCQlyZXR1cm47CisJfSBlbHNlIGlmIChiX2lxa19vaykgeworCQlvbGR2YWxfMSA9IChydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFUWElRSU1CQUxBTkNFLAorCQkJCQkgIE1BU0tEV09SRCkgPj4gMjIpICYgMHgzRkY7CisJCXggPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs0XTsKKwkJaWYgKCh4ICYgMHgwMDAwMDIwMCkgIT0gMCkKKwkJCXggPSB4IHwgMHhGRkZGRkMwMDsKKwkJdHgxX2EgPSAoeCAqIG9sZHZhbF8xKSA+PiA4OworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEFUWElRSU1CQUxBTkNFLCAweDNGRiwgdHgxX2EpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwgQklUKDI3KSwKKwkJCSAgICAgICgoeCAqIG9sZHZhbF8xID4+IDcpICYgMHgxKSk7CisJCXkgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs1XTsKKwkJaWYgKCh5ICYgMHgwMDAwMDIwMCkgIT0gMCkKKwkJCXkgPSB5IHwgMHhGRkZGRkMwMDsKKwkJdHgxX2MgPSAoeSAqIG9sZHZhbF8xKSA+PiA4OworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWERUWEFGRSwgMHhGMDAwMDAwMCwKKwkJCSAgICAgICgodHgxX2MgJiAweDNDMCkgPj4gNikpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEJUWElRSU1CQUxBTkNFLCAweDAwM0YwMDAwLAorCQkJICAgICAgKHR4MV9jICYgMHgzRikpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwgQklUKDI1KSwKKwkJCSAgICAgICgoeSAqIG9sZHZhbF8xID4+IDcpICYgMHgxKSk7CisKKwkJaWYgKGJ0eG9ubHkpCisJCQlyZXR1cm47CisKKwkJcmVnID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bNl07CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQlJYSVFJTUJBTEFOQ0UsIDB4M0ZGLCByZWcpOworCisJCXJlZyA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzddICYgMHgzRjsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hCUlhJUUlNQkFMQU5DRSwgMHhGQzAwLCByZWcpOworCisJCXJlZyA9IChyZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs3XSA+PiA2KSAmIDB4RjsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0FHQ1JTU0lUQUJMRSwgMHhGMDAwMDAwMCwgcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9zYXZlX2FkZGFfcmVnaXN0ZXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgIHUzMiAqYWRkYXJlZywgdTMyICphZGRhYmFja3VwLAorCQkJCQkgICAgIHUzMiByZWdpc3Rlcm51bSkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZWdpc3Rlcm51bTsgaSsrKQorCQlhZGRhYmFja3VwW2ldID0gcnRsX2dldF9iYnJlZyhodywgYWRkYXJlZ1tpXSwgTUFTS0RXT1JEKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfcGh5X3NhdmVfbWFjX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgIHUzMiAqbWFjcmVnLCB1MzIgKm1hY2JhY2t1cCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKElRS19NQUNfUkVHX05VTSAtIDEpOyBpKyspCisJCW1hY2JhY2t1cFtpXSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgbWFjcmVnW2ldKTsKKworCW1hY2JhY2t1cFtpXSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIG1hY3JlZ1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9yZWxvYWRfYWRkYV9yZWdpc3RlcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgICB1MzIgKmFkZGFyZWcsIHUzMiAqYWRkYWJhY2t1cCwKKwkJCQkJICAgICAgIHUzMiByZWdpZXN0ZXJudW0pCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVnaWVzdGVybnVtOyBpKyspCisJCXJ0bF9zZXRfYmJyZWcoaHcsIGFkZGFyZWdbaV0sIE1BU0tEV09SRCwgYWRkYWJhY2t1cFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9yZWxvYWRfbWFjX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgdTMyICptYWNyZWcsIHUzMiAqbWFjYmFja3VwKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCAoSVFLX01BQ19SRUdfTlVNIC0gMSk7IGkrKykKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgbWFjcmVnW2ldLCAodTgpIG1hY2JhY2t1cFtpXSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIG1hY3JlZ1tpXSwgbWFjYmFja3VwW2ldKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfcGh5X3BhdGhfYWRkYV9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyICphZGRhcmVnLAorCQkJCSAgICAgIGJvb2wgaXNfcGF0aGFfb24sIGJvb2wgaXMydCkKK3sKKwl1MzIgcGF0aG9uOworCXUzMiBpOworCisJcGF0aG9uID0gaXNfcGF0aGFfb24gPyAweDBmYzAxNjE2IDogMHgwZmMwMTYxNjsKKwlpZiAoIWlzMnQpIHsKKwkJcGF0aG9uID0gMHgwZmMwMTYxNjsKKwkJcnRsX3NldF9iYnJlZyhodywgYWRkYXJlZ1swXSwgTUFTS0RXT1JELCAweDBmYzAxNjE2KTsKKwl9IGVsc2UgeworCQlydGxfc2V0X2JicmVnKGh3LCBhZGRhcmVnWzBdLCBNQVNLRFdPUkQsIHBhdGhvbik7CisJfQorCisJZm9yIChpID0gMTsgaSA8IElRS19BRERBX1JFR19OVU07IGkrKykKKwkJcnRsX3NldF9iYnJlZyhodywgYWRkYXJlZ1tpXSwgTUFTS0RXT1JELCBwYXRob24pOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9waHlfbWFjX3NldHRpbmdfY2FsaWJyYXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgdTMyICptYWNyZWcsIHUzMiAqbWFjYmFja3VwKQoreworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4NTIwLCAweDAwZmYwMDAwLCAweGZmKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfcGh5X3BhdGhfYV9zdGFuZGJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTI4LCBNQVNLRFdPUkQsIDB4MCk7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDAsIFJGUkVHX09GRlNFVF9NQVNLLCAweDEwMDAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGUyOCwgTUFTS0RXT1JELCAweDgwODAwMDAwKTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X3NpbXVsYXJpdHlfY29tcGFyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgIGxvbmcgcmVzdWx0W11bOF0sIHU4IGMxLCB1OCBjMikKK3sKKwl1MzIgaSwgaiwgZGlmZiwgc2ltdWxhcml0eV9iaXRtYXAsIGJvdW5kOworCisJdTggZmluYWxfY2FuZGlkYXRlWzJdID0geyAweEZGLCAweEZGIH07CisJYm9vbCBicmVzdWx0ID0gdHJ1ZS8qLCBpczJ0ID0gdHJ1ZSovOworCXMzMiB0bXAxLCB0bXAyOworCisJYm91bmQgPSA4OworCisJc2ltdWxhcml0eV9iaXRtYXAgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGJvdW5kOyBpKyspIHsKKwkJaWYgKChpID09IDEpIHx8IChpID09IDMpIHx8IChpID09IDUpIHx8IChpID09IDcpKSB7CisJCQlpZiAoKHJlc3VsdFtjMV1baV0gJiAweDAwMDAwMjAwKSAhPSAwKQorCQkJCXRtcDEgPSByZXN1bHRbYzFdW2ldIHwgMHhGRkZGRkMwMDsKKwkJCWVsc2UKKwkJCQl0bXAxID0gcmVzdWx0W2MxXVtpXTsKKworCQkJaWYgKChyZXN1bHRbYzJdW2ldICYgMHgwMDAwMDIwMCkgIT0gMCkKKwkJCQl0bXAyID0gcmVzdWx0W2MyXVtpXSB8IDB4RkZGRkZDMDA7CisJCQllbHNlCisJCQkJdG1wMiA9IHJlc3VsdFtjMl1baV07CisJCX0gZWxzZSB7CisJCQl0bXAxID0gcmVzdWx0W2MxXVtpXTsKKwkJCXRtcDIgPSByZXN1bHRbYzJdW2ldOworCQl9CisKKwkJZGlmZiA9ICh0bXAxID4gdG1wMikgPyAodG1wMSAtIHRtcDIpIDogKHRtcDIgLSB0bXAxKTsKKworCQlpZiAoZGlmZiA+IE1BWF9UT0xFUkFOQ0UpIHsKKwkJCWlmICgoaSA9PSAyIHx8IGkgPT0gNikgJiYgIXNpbXVsYXJpdHlfYml0bWFwKSB7CisJCQkJaWYgKHJlc3VsdFtjMV1baV0gKyByZXN1bHRbYzFdW2kgKyAxXSA9PSAwKQorCQkJCQlmaW5hbF9jYW5kaWRhdGVbKGkgLyA0KV0gPSBjMjsKKwkJCQllbHNlIGlmIChyZXN1bHRbYzJdW2ldICsgcmVzdWx0W2MyXVtpICsgMV0gPT0gMCkKKwkJCQkJZmluYWxfY2FuZGlkYXRlWyhpIC8gNCldID0gYzE7CisJCQkJZWxzZQorCQkJCQlzaW11bGFyaXR5X2JpdG1hcCB8PSAoMSA8PCBpKTsKKwkJCX0gZWxzZSB7CisJCQkJc2ltdWxhcml0eV9iaXRtYXAgfD0gKDEgPDwgaSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc2ltdWxhcml0eV9iaXRtYXAgPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgKGJvdW5kIC8gNCk7IGkrKykgeworCQkJaWYgKGZpbmFsX2NhbmRpZGF0ZVtpXSAhPSAweEZGKSB7CisJCQkJZm9yIChqID0gaSAqIDQ7IGogPCAoaSArIDEpICogNCAtIDI7IGorKykKKwkJCQkJcmVzdWx0WzNdW2pdID0KKwkJCQkJCXJlc3VsdFtmaW5hbF9jYW5kaWRhdGVbaV1dW2pdOworCQkJCWJyZXN1bHQgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYnJlc3VsdDsKKwl9IGVsc2UgeworCQlpZiAoIShzaW11bGFyaXR5X2JpdG1hcCAmIDB4MDMpKSB7LypwYXRoIEEgVFggT0sqLworCQkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJCQlyZXN1bHRbM11baV0gPSByZXN1bHRbYzFdW2ldOworCQl9CisJCWlmICghKHNpbXVsYXJpdHlfYml0bWFwICYgMHgwYykpIHsvKnBhdGggQSBSWCBPSyovCisJCQlmb3IgKGkgPSAyOyBpIDwgNDsgaSsrKQorCQkJCXJlc3VsdFszXVtpXSA9IHJlc3VsdFtjMV1baV07CisJCX0KKwkJaWYgKCEoc2ltdWxhcml0eV9iaXRtYXAgJiAweDMwKSkgey8qcGF0aCBCIFRYIE9LKi8KKwkJCWZvciAoaSA9IDQ7IGkgPCA2OyBpKyspCisJCQkJcmVzdWx0WzNdW2ldID0gcmVzdWx0W2MxXVtpXTsKKwkJfQorCQlpZiAoIShzaW11bGFyaXR5X2JpdG1hcCAmIDB4YzApKSB7LypwYXRoIEIgUlggT0sqLworCQkJZm9yIChpID0gNjsgaSA8IDg7IGkrKykKKwkJCQlyZXN1bHRbM11baV0gPSByZXN1bHRbYzFdW2ldOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgbG9uZyByZXN1bHRbXVs4XSwgdTggdCwgYm9vbCBpczJ0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXUzMiBpOworCXU4IHBhdGhhX29rLCBwYXRoYl9vazsKKwl1OCB0bXBfMHhjNTAgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIDB4YzUwLCBNQVNLQllURTApOworCXU4IHRtcF8weGM1OCA9ICh1OCkgcnRsX2dldF9iYnJlZyhodywgMHhjNTgsIE1BU0tCWVRFMCk7CisJdTMyIGFkZGFfcmVnW0lRS19BRERBX1JFR19OVU1dID0geworCQkweDg1YywgMHhlNmMsIDB4ZTcwLCAweGU3NCwKKwkJMHhlNzgsIDB4ZTdjLCAweGU4MCwgMHhlODQsCisJCTB4ZTg4LCAweGU4YywgMHhlZDAsIDB4ZWQ0LAorCQkweGVkOCwgMHhlZGMsIDB4ZWUwLCAweGVlYworCX07CisKKwl1MzIgaXFrX21hY19yZWdbSVFLX01BQ19SRUdfTlVNXSA9IHsKKwkJMHg1MjIsIDB4NTUwLCAweDU1MSwgMHgwNDAKKwl9OworCisJdTMyIGlxa19iYl9yZWdbSVFLX0JCX1JFR19OVU1dID0geworCQlST0ZETTBfVFJYUEFUSEVOQUJMRSwgUk9GRE0wX1RSTVVYUEFSLAorCQlSRlBHQTBfWENEX1JGSU5URVJGQUNFU1csIDB4YjY4LCAweGI2YywKKwkJMHg4NzAsIDB4ODYwLAorCQkweDg2NCwgMHg4MDAKKwl9OworCisJY29uc3QgdTMyIHJldHJ5Y291bnQgPSAyOworCisKKwlpZiAodCA9PSAwKSB7CisJCV9ydGw5MmVlX3BoeV9zYXZlX2FkZGFfcmVnaXN0ZXJzKGh3LCBhZGRhX3JlZywKKwkJCQkJCSBydGxwaHktPmFkZGFfYmFja3VwLAorCQkJCQkJIElRS19BRERBX1JFR19OVU0pOworCQlfcnRsOTJlZV9waHlfc2F2ZV9tYWNfcmVnaXN0ZXJzKGh3LCBpcWtfbWFjX3JlZywKKwkJCQkJCXJ0bHBoeS0+aXFrX21hY19iYWNrdXApOworCQlfcnRsOTJlZV9waHlfc2F2ZV9hZGRhX3JlZ2lzdGVycyhodywgaXFrX2JiX3JlZywKKwkJCQkJCSBydGxwaHktPmlxa19iYl9iYWNrdXAsCisJCQkJCQkgSVFLX0JCX1JFR19OVU0pOworCX0KKworCV9ydGw5MmVlX3BoeV9wYXRoX2FkZGFfb24oaHcsIGFkZGFfcmVnLCB0cnVlLCBpczJ0KTsKKworCS8qQkIgc2V0dGluZyovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCSVQoMjQpLCAweDAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwgTUFTS0RXT1JELCAweDAzYTA1NjAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJNVVhQQVIsIE1BU0tEV09SRCwgMHgwMDA4MDBlNCk7CisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hDRF9SRklOVEVSRkFDRVNXLCBNQVNLRFdPUkQsIDB4MjIyMDgyMDApOworCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBQl9SRklOVEVSRkFDRVNXLCBCSVQoMTApLCAweDAxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1csIEJJVCgyNiksIDB4MDEpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9SRklOVEVSRkFDRU9FLCBCSVQoMTApLCAweDAxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRSwgQklUKDEwKSwgMHgwMSk7CisKKwlfcnRsOTJlZV9waHlfbWFjX3NldHRpbmdfY2FsaWJyYXRpb24oaHcsIGlxa19tYWNfcmVnLAorCQkJCQkgICAgIHJ0bHBoeS0+aXFrX21hY19iYWNrdXApOworCS8qIFBhZ2UgQiBpbml0Ki8KKwkvKiBJUSBjYWxpYnJhdGlvbiBzZXR0aW5nKi8KKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4ODA4MDAwMDApOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJUeF9JUUssIE1BU0tEV09SRCwgMHgwMTAwN2MwMCk7CisJcnRsX3NldF9iYnJlZyhodywgUlJ4X0lRSywgTUFTS0RXT1JELCAweDAxMDA0ODAwKTsKKworCWZvciAoaSA9IDA7IGkgPCByZXRyeWNvdW50OyBpKyspIHsKKwkJcGF0aGFfb2sgPSBfcnRsOTJlZV9waHlfcGF0aF9hX2lxayhodywgaXMydCk7CisKKwkJaWYgKHBhdGhhX29rID09IDB4MDEpIHsKKwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELAorCQkJCSAoIlBhdGggQSBUeCBJUUsgU3VjY2VzcyEhXG4iKSk7CisJCQlyZXN1bHRbdF1bMF0gPSAocnRsX2dldF9iYnJlZyhodywKKwkJCQkJCSAgICAgIFJUeF9Qb3dlcl9CZWZvcmVfSVFLX0EsCisJCQkJCQkgICAgICBNQVNLRFdPUkQpICYgMHgzRkYwMDAwKQorCQkJCQkJICAgICAgPj4gMTY7CisJCQlyZXN1bHRbdF1bMV0gPSAocnRsX2dldF9iYnJlZyhodywgUlR4X1Bvd2VyX0FmdGVyX0lRS19BLAorCQkJCQkJICAgICAgTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkKKwkJCQkJCSAgICAgID4+IDE2OworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwKKwkJCQkgKCJQYXRoIEEgVHggSVFLIEZhaWwhISwgcmV0ID0gMHgleFxuIiwKKwkJCQkgIHBhdGhhX29rKSk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwIDsgaSA8IHJldHJ5Y291bnQgOyBpKyspIHsKKwkJcGF0aGFfb2sgPSBfcnRsOTJlZV9waHlfcGF0aF9hX3J4X2lxayhodywgaXMydCk7CisKKwkJaWYgKHBhdGhhX29rID09IDB4MDMpIHsKKwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELAorCQkJCSAoIlBhdGggQSBSeCBJUUsgU3VjY2VzcyEhXG4iKSk7CisJCQlyZXN1bHRbdF1bMl0gPSAocnRsX2dldF9iYnJlZyhodywKKwkJCQkJCSAgICAgIFJSeF9Qb3dlcl9CZWZvcmVfSVFLX0FfMiwKKwkJCQkJCSAgICAgIE1BU0tEV09SRCkgJiAweDNGRjAwMDApCisJCQkJCQkgICAgICA+PiAxNjsKKwkJCXJlc3VsdFt0XVszXSA9IChydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJICAgICAgUlJ4X1Bvd2VyX0FmdGVyX0lRS19BXzIsCisJCQkJCQkgICAgICBNQVNLRFdPUkQpICYgMHgzRkYwMDAwKQorCQkJCQkJICAgICAgPj4gMTY7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELAorCQkJCSAoIlBhdGggQSBSeCBJUUsgRmFpbCEhLCByZXQgPSAweCV4XG4iLAorCQkJCSAgcGF0aGFfb2spKTsKKwkJfQorCX0KKworCWlmICgweDAwID09IHBhdGhhX29rKQorCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwgKCJQYXRoIEEgSVFLIGZhaWxlZCEhLCByZXQgPSAwXG4iKSk7CisKKwlpZiAoaXMydCkgeworCQlfcnRsOTJlZV9waHlfcGF0aF9hX3N0YW5kYnkoaHcpOworCQkvKiBUdXJuIFBhdGggQiBBRERBIG9uICovCisJCV9ydGw5MmVlX3BoeV9wYXRoX2FkZGFfb24oaHcsIGFkZGFfcmVnLCBmYWxzZSwgaXMydCk7CisKKwkJLyogSVEgY2FsaWJyYXRpb24gc2V0dGluZyAqLworCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDB4ODA4MDAwMDApOworCQlydGxfc2V0X2JicmVnKGh3LCBSVHhfSVFLLCBNQVNLRFdPUkQsIDB4MDEwMDdjMDApOworCQlydGxfc2V0X2JicmVnKGh3LCBSUnhfSVFLLCBNQVNLRFdPUkQsIDB4MDEwMDQ4MDApOworCisJCWZvciAoaSA9IDAgOyBpIDwgcmV0cnljb3VudCA7IGkrKykgeworCQkJcGF0aGJfb2sgPSBfcnRsOTJlZV9waHlfcGF0aF9iX2lxayhodyk7CisJCQlpZiAocGF0aGJfb2sgPT0gMHgwMSkgeworCQkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELAorCQkJCQkgKCJQYXRoIEIgVHggSVFLIFN1Y2Nlc3MhIVxuIikpOworCQkJCXJlc3VsdFt0XVs0XSA9IChydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJCVJUeF9Qb3dlcl9CZWZvcmVfSVFLX0IsCisJCQkJCQkJTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkKKwkJCQkJCQk+PiAxNjsKKwkJCQlyZXN1bHRbdF1bNV0gPSAocnRsX2dldF9iYnJlZyhodywKKwkJCQkJCQlSVHhfUG93ZXJfQWZ0ZXJfSVFLX0IsCisJCQkJCQkJTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkKKwkJCQkJCQk+PiAxNjsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsCisJCQkJCSAoIlBhdGggQiBUeCBJUUsgRmFpbCEhLCByZXQgPSAweCV4XG4iLAorCQkJCQkgICBwYXRoYl9vaykpOworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMCA7IGkgPCByZXRyeWNvdW50IDsgaSsrKSB7CisJCQlwYXRoYl9vayA9IF9ydGw5MmVlX3BoeV9wYXRoX2JfcnhfaXFrKGh3LCBpczJ0KTsKKwkJCWlmIChwYXRoYl9vayA9PSAweDAzKSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsCisJCQkJCSAoIlBhdGggQiBSeCBJUUsgU3VjY2VzcyEhXG4iKSk7CisJCQkJcmVzdWx0W3RdWzZdID0gKHJ0bF9nZXRfYmJyZWcoaHcsCisJCQkJCQkgICAgICAgUlJ4X1Bvd2VyX0JlZm9yZV9JUUtfQl8yLAorCQkJCQkJICAgICAgIE1BU0tEV09SRCkgJiAweDNGRjAwMDApCisJCQkJCQkgICAgICAgPj4gMTY7CisJCQkJcmVzdWx0W3RdWzddID0gKHJ0bF9nZXRfYmJyZWcoaHcsCisJCQkJCQkgICAgICAgUlJ4X1Bvd2VyX0FmdGVyX0lRS19CXzIsCisJCQkJCQkgICAgICAgTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkKKwkJCQkJCSAgICAgICA+PiAxNjsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsCisJCQkJCSAoIlBhdGggQiBSeCBJUUsgRmFpbCEhLCByZXQgPSAweCV4XG4iLAorCQkJCQkgcGF0aGJfb2spKTsKKwkJCX0KKwkJfQorCisJCWlmICgweDAwID09IHBhdGhiX29rKQorCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsCisJCQkJICgiUGF0aCBCIElRSyBmYWlsZWQhISwgcmV0ID0gMFxuIikpOworCX0KKwkvKiBCYWNrIHRvIEJCIG1vZGUsIGxvYWQgb3JpZ2luYWwgdmFsdWUgKi8KKwlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwKKwkJICgiSVFLOkJhY2sgdG8gQkIgbW9kZSwgbG9hZCBvcmlnaW5hbCB2YWx1ZSFcbiIpKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfSVFLLCBNQVNLRFdPUkQsIDApOworCisJaWYgKHQgIT0gMCkgeworCQkvKiBSZWxvYWQgQUREQSBwb3dlciBzYXZpbmcgcGFyYW1ldGVycyAqLworCQlfcnRsOTJlZV9waHlfcmVsb2FkX2FkZGFfcmVnaXN0ZXJzKGh3LCBhZGRhX3JlZywKKwkJCQkJCSAgIHJ0bHBoeS0+YWRkYV9iYWNrdXAsCisJCQkJCQkgICBJUUtfQUREQV9SRUdfTlVNKTsKKworCQkvKiBSZWxvYWQgTUFDIHBhcmFtZXRlcnMgKi8KKwkJX3J0bDkyZWVfcGh5X3JlbG9hZF9tYWNfcmVnaXN0ZXJzKGh3LCBpcWtfbWFjX3JlZywKKwkJCQkJCSAgcnRscGh5LT5pcWtfbWFjX2JhY2t1cCk7CisKKwkJX3J0bDkyZWVfcGh5X3JlbG9hZF9hZGRhX3JlZ2lzdGVycyhodywgaXFrX2JiX3JlZywKKwkJCQkJCSAgIHJ0bHBoeS0+aXFrX2JiX2JhY2t1cCwKKwkJCQkJCSAgIElRS19CQl9SRUdfTlVNKTsKKworCQkvKiBSZXN0b3JlIFJYIGluaXRpYWwgZ2FpbiAqLworCQlydGxfc2V0X2JicmVnKGh3LCAweGM1MCwgTUFTS0JZVEUwLCAweDUwKTsKKwkJcnRsX3NldF9iYnJlZyhodywgMHhjNTAsIE1BU0tCWVRFMCwgdG1wXzB4YzUwKTsKKwkJaWYgKGlzMnQpIHsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4YzUwLCBNQVNLQllURTAsIDB4NTApOworCQkJcnRsX3NldF9iYnJlZyhodywgMHhjNTgsIE1BU0tCWVRFMCwgdG1wXzB4YzU4KTsKKwkJfQorCisJCS8qIGxvYWQgMHhlMzAgSVFDIGRlZmF1bHQgdmFsdWUgKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUlR4X0lRS19Ub25lX0EsIE1BU0tEV09SRCwgMHgwMTAwOGMwMCk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJSeF9JUUtfVG9uZV9BLCBNQVNLRFdPUkQsIDB4MDEwMDhjMDApOworCX0KKwlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwgKCJfcnRsOTJlZV9waHlfaXFfY2FsaWJyYXRlKCkgPD09XG4iKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgaXMydCkKK3sKKwl1OCB0bXByZWc7CisJdTMyIHJmX2FfbW9kZSA9IDAsIHJmX2JfbW9kZSA9IDAsIGxjX2NhbDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl0bXByZWcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIDB4ZDAzKTsKKworCWlmICgodG1wcmVnICYgMHg3MCkgIT0gMCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkMDMsIHRtcHJlZyAmIDB4OEYpOworCWVsc2UKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4RkYpOworCisJaWYgKCh0bXByZWcgJiAweDcwKSAhPSAwKSB7CisJCXJmX2FfbW9kZSA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBNQVNLMTJCSVRTKTsKKworCQlpZiAoaXMydCkKKwkJCXJmX2JfbW9kZSA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweDAwLAorCQkJCQkJICBNQVNLMTJCSVRTKTsKKworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgTUFTSzEyQklUUywKKwkJCSAgICAgIChyZl9hX21vZGUgJiAweDhGRkZGKSB8IDB4MTAwMDApOworCisJCWlmIChpczJ0KQorCQkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIDB4MDAsIE1BU0sxMkJJVFMsCisJCQkJICAgICAgKHJmX2JfbW9kZSAmIDB4OEZGRkYpIHwgMHgxMDAwMCk7CisJfQorCWxjX2NhbCA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDE4LCBNQVNLMTJCSVRTKTsKKworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDE4LCBNQVNLMTJCSVRTLCBsY19jYWwgfCAweDA4MDAwKTsKKworCW1kZWxheSgxMDApOworCisJaWYgKCh0bXByZWcgJiAweDcwKSAhPSAwKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4ZDAzLCB0bXByZWcpOworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgTUFTSzEyQklUUywgcmZfYV9tb2RlKTsKKworCQlpZiAoaXMydCkKKwkJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweDAwLCBNQVNLMTJCSVRTLAorCQkJCSAgICAgIHJmX2JfbW9kZSk7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4MDApOworCX0KKwlSVF9UUkFDRShDT01QX0lOSVQgLCBEQkdfTE9VRCAsICgiXG4iKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3BoeV9zZXRfcmZwYXRoX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgYm9vbCBibWFpbiwgYm9vbCBpczJ0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJUlRfVFJBQ0UoQ09NUF9JTklUICwgREJHX0xPVUQgLCAoIlxuIikpOworCisJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpIHsKKwkJdTggdTFidG1wOworCQl1MWJ0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19MRURDRkcwKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0xFRENGRzAsIHUxYnRtcCB8IEJJVCg3KSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIHJGUEdBMF9YQUJfUkZQQVJBTUVURVIsIEJJVCgxMyksIDB4MDEpOworCX0KKwlpZiAoaXMydCkgeworCQlpZiAoYm1haW4pCisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRSwKKwkJCQkgICAgICBCSVQoNSkgfCBCSVQoNiksIDB4MSk7CisJCWVsc2UKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQl9SRklOVEVSRkFDRU9FLAorCQkJCSAgICAgIEJJVCg1KSB8IEJJVCg2KSwgMHgyKTsKKwl9IGVsc2UgeworCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1csIEJJVCg4KSB8IEJJVCg5KSwgMCk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4OTE0LCBNQVNLTFdPUkQsIDB4MDIwMSk7CisKKwkJLyogV2UgdXNlIHRoZSBSRiBkZWZpbml0aW9uIG9mIE1BSU4gYW5kIEFVWCwKKwkJICogbGVmdCBhbnRlbm5hIGFuZCByaWdodCBhbnRlbm5hIHJlcGVjdGl2ZWx5LgorCQkgKiBEZWZhdWx0IG91dHB1dCBhdCBBVVguKi8KKwkJaWYgKGJtYWluKSB7CisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRSwKKwkJCQkgICAgICBCSVQoMTQpIHwgQklUKDEzKSB8IEJJVCgxMiksIDApOworCQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hCX1JGSU5URVJGQUNFT0UsCisJCQkJICAgICAgQklUKDUpIHwgQklUKDQpIHwgQklUKDMpLCAwKTsKKwkJCWlmIChydGxlZnVzZS0+YW50ZW5uYV9kaXZfdHlwZSA9PSBDR0NTX1JYX0hXX0FOVERJVikKKwkJCQlydGxfc2V0X2JicmVnKGh3LCByQ29uZmlnX3JhbTY0eDE2LCBCSVQoMzEpLCAwKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9SRklOVEVSRkFDRU9FLAorCQkJCSAgICAgIEJJVCgxNCkgfCBCSVQoMTMpIHwgQklUKDEyKSwgMSk7CisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRSwKKwkJCQkgICAgICBCSVQoNSkgfCBCSVQoNCkgfCBCSVQoMyksIDEpOworCQkJaWYgKHJ0bGVmdXNlLT5hbnRlbm5hX2Rpdl90eXBlID09IENHQ1NfUlhfSFdfQU5URElWKQorCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIHJDb25maWdfcmFtNjR4MTYsIEJJVCgzMSksIDEpOworCQl9CisJfQorfQorCisjdW5kZWYgSVFLX0FEREFfUkVHX05VTQorI3VuZGVmIElRS19ERUxBWV9USU1FCisKK3N0YXRpYyB1OCBydGw5MmVlX2dldF9yaWdodGNobmxwbGFjZV9mb3JfaXFrKHU4IGNobmwpCit7CisJdTggY2hhbm5lbF9hbGxbNTldID0geworCQkxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsCisJCTM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDU0LCA1NiwgNTgsCisJCTYwLCA2MiwgNjQsIDEwMCwgMTAyLCAxMDQsIDEwNiwgMTA4LCAxMTAsIDExMiwKKwkJMTE0LCAxMTYsIDExOCwgMTIwLCAxMjIsIDEyNCwgMTI2LCAxMjgsCTEzMCwKKwkJMTMyLCAxMzQsIDEzNiwgMTM4LCAxNDAsIDE0OSwgMTUxLCAxNTMsIDE1NSwKKwkJMTU3LCAxNTksIDE2MSwgMTYzLCAxNjUKKwl9OworCXU4IHBsYWNlID0gY2hubDsKKworCWlmIChjaG5sID4gMTQpIHsKKwkJZm9yIChwbGFjZSA9IDE0OyBwbGFjZSA8IHNpemVvZihjaGFubmVsX2FsbCk7IHBsYWNlKyspIHsKKwkJCWlmIChjaGFubmVsX2FsbFtwbGFjZV0gPT0gY2hubCkKKwkJCQlyZXR1cm4gcGxhY2UgLSAxMzsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHJ0bDkyZWVfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX3JlY292ZXJ5KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCWxvbmcgcmVzdWx0WzRdWzhdOworCXU4IGksIGZpbmFsX2NhbmRpZGF0ZTsKKwlib29sIGJfcGF0aGFfb2ssIGJfcGF0aGJfb2s7CisJbG9uZyByZWdfZTk0LCByZWdfZTljLCByZWdfZWE0LCByZWdfZWFjOworCWxvbmcgcmVnX2ViNCwgcmVnX2ViYywgcmVnX2VjNCwgcmVnX2VjYzsKKwlib29sIGlzMTJzaW11bGFyLCBpczEzc2ltdWxhciwgaXMyM3NpbXVsYXI7CisJdTggaWR4OworCXUzMiBpcWtfYmJfcmVnW0lRS19CQl9SRUdfTlVNXSA9IHsKKwkJUk9GRE0wX1hBUlhJUUlNQkFMQU5DRSwKKwkJUk9GRE0wX1hCUlhJUUlNQkFMQU5DRSwKKwkJUk9GRE0wX0VDQ0FUSFJFU0hPTEQsCisJCVJPRkRNMF9BR0NSU1NJVEFCTEUsCisJCVJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UsCisJCVJPRkRNMF9YQlRYSVFJTUJBTEFOQ0UsCisJCVJPRkRNMF9YQ1RYQUZFLAorCQlST0ZETTBfWERUWEFGRSwKKwkJUk9GRE0wX1JYSVFFWFRBTlRBCisJfTsKKworCWlmIChiX3JlY292ZXJ5KSB7CisJCV9ydGw5MmVlX3BoeV9yZWxvYWRfYWRkYV9yZWdpc3RlcnMoaHcsIGlxa19iYl9yZWcsCisJCQkJCQkgICBydGxwaHktPmlxa19iYl9iYWNrdXAsIDkpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlyZXN1bHRbMF1baV0gPSAwOworCQlyZXN1bHRbMV1baV0gPSAwOworCQlyZXN1bHRbMl1baV0gPSAwOworCisJCWlmICgoaSA9PSAwKSB8fCAoaSA9PSAyKSB8fCAoaSA9PSA0KSAgfHwgKGkgPT0gNikpCisJCQlyZXN1bHRbM11baV0gPSAweDEwMDsKKwkJZWxzZQorCQkJcmVzdWx0WzNdW2ldID0gMDsKKwl9CisJZmluYWxfY2FuZGlkYXRlID0gMHhmZjsKKwliX3BhdGhhX29rID0gZmFsc2U7CisJYl9wYXRoYl9vayA9IGZhbHNlOworCWlzMTJzaW11bGFyID0gZmFsc2U7CisJaXMyM3NpbXVsYXIgPSBmYWxzZTsKKwlpczEzc2ltdWxhciA9IGZhbHNlOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJX3J0bDkyZWVfcGh5X2lxX2NhbGlicmF0ZShodywgcmVzdWx0LCBpLCB0cnVlKTsKKwkJaWYgKGkgPT0gMSkgeworCQkJaXMxMnNpbXVsYXIgPSBfcnRsOTJlZV9waHlfc2ltdWxhcml0eV9jb21wYXJlKGh3LAorCQkJCQkJCQkgICAgICByZXN1bHQsCisJCQkJCQkJCSAgICAgIDAsIDEpOworCQkJaWYgKGlzMTJzaW11bGFyKSB7CisJCQkJZmluYWxfY2FuZGlkYXRlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID09IDIpIHsKKwkJCWlzMTNzaW11bGFyID0gX3J0bDkyZWVfcGh5X3NpbXVsYXJpdHlfY29tcGFyZShodywKKwkJCQkJCQkJICAgICAgcmVzdWx0LAorCQkJCQkJCQkgICAgICAwLCAyKTsKKwkJCWlmIChpczEzc2ltdWxhcikgeworCQkJCWZpbmFsX2NhbmRpZGF0ZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpczIzc2ltdWxhciA9IF9ydGw5MmVlX3BoeV9zaW11bGFyaXR5X2NvbXBhcmUoaHcsCisJCQkJCQkJCSAgICAgIHJlc3VsdCwKKwkJCQkJCQkJICAgICAgMSwgMik7CisJCQlpZiAoaXMyM3NpbXVsYXIpCisJCQkJZmluYWxfY2FuZGlkYXRlID0gMTsKKwkJCWVsc2UKKwkJCQlmaW5hbF9jYW5kaWRhdGUgPSAzOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmVnX2U5NCA9IHJlc3VsdFtpXVswXTsKKwkJcmVnX2U5YyA9IHJlc3VsdFtpXVsxXTsKKwkJcmVnX2VhNCA9IHJlc3VsdFtpXVsyXTsKKwkJcmVnX2VhYyA9IHJlc3VsdFtpXVszXTsKKwkJcmVnX2ViNCA9IHJlc3VsdFtpXVs0XTsKKwkJcmVnX2ViYyA9IHJlc3VsdFtpXVs1XTsKKwkJcmVnX2VjNCA9IHJlc3VsdFtpXVs2XTsKKwkJcmVnX2VjYyA9IHJlc3VsdFtpXVs3XTsKKwl9CisJaWYgKGZpbmFsX2NhbmRpZGF0ZSAhPSAweGZmKSB7CisJCXJlZ19lOTQgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVswXTsKKwkJcnRscGh5LT5yZWdfZTk0ID0gcmVnX2U5NDsKKwkJcmVnX2U5YyA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzFdOworCQlydGxwaHktPnJlZ19lOWMgPSByZWdfZTljOworCQlyZWdfZWE0ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMl07CisJCXJlZ19lYWMgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVszXTsKKwkJcmVnX2ViNCA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzRdOworCQlydGxwaHktPnJlZ19lYjQgPSByZWdfZWI0OworCQlyZWdfZWJjID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bNV07CisJCXJ0bHBoeS0+cmVnX2ViYyA9IHJlZ19lYmM7CisJCXJlZ19lYzQgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs2XTsKKwkJcmVnX2VjYyA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzddOworCQliX3BhdGhhX29rID0gdHJ1ZTsKKwkJYl9wYXRoYl9vayA9IHRydWU7CisJfSBlbHNlIHsKKwkJcnRscGh5LT5yZWdfZTk0ID0gMHgxMDA7CisJCXJ0bHBoeS0+cmVnX2ViNCA9IDB4MTAwOworCQlydGxwaHktPnJlZ19lOWMgPSAweDA7CisJCXJ0bHBoeS0+cmVnX2ViYyA9IDB4MDsKKwl9CisKKwlpZiAocmVnX2U5NCAhPSAwKSAvKiYmKHJlZ19lYTQgIT0gMCkgKi8KKwkJX3J0bDkyZWVfcGh5X3BhdGhfYV9maWxsX2lxa19tYXRyaXgoaHcsIGJfcGF0aGFfb2ssIHJlc3VsdCwKKwkJCQkJCSAgICBmaW5hbF9jYW5kaWRhdGUsCisJCQkJCQkgICAgKHJlZ19lYTQgPT0gMCkpOworCisJX3J0bDkyZWVfcGh5X3BhdGhfYl9maWxsX2lxa19tYXRyaXgoaHcsIGJfcGF0aGJfb2ssIHJlc3VsdCwKKwkJCQkJICAgIGZpbmFsX2NhbmRpZGF0ZSwKKwkJCQkJICAgIChyZWdfZWM0ID09IDApKTsKKworCWlkeCA9IHJ0bDkyZWVfZ2V0X3JpZ2h0Y2hubHBsYWNlX2Zvcl9pcWsocnRscGh5LT5jdXJyZW50X2NoYW5uZWwpOworCisJLyogVG8gRml4IEJTT0Qgd2hlbiBmaW5hbF9jYW5kaWRhdGUgaXMgMHhmZgorCSAqIGJ5IHNoZXJyeSAyMDEyMDMyMSAqLworCWlmIChmaW5hbF9jYW5kaWRhdGUgPCA0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBJUUtfTUFUUklYX1JFR19OVU07IGkrKykKKwkJCXJ0bHBoeS0+aXFrX21hdHJpeF9yZWdzZXR0aW5nW2lkeF0udmFsdWVbMF1baV0gPQorCQkJCXJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdW2ldOworCisJCXJ0bHBoeS0+aXFrX21hdHJpeF9yZWdzZXR0aW5nW2lkeF0uYl9pcWtfZG9uZSA9IHRydWU7CisJfQorCV9ydGw5MmVlX3BoeV9zYXZlX2FkZGFfcmVnaXN0ZXJzKGh3LCBpcWtfYmJfcmVnLAorCQkJCQkgcnRscGh5LT5pcWtfYmJfYmFja3VwLCA5KTsKK30KKwordm9pZCBydGw5MmVlX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9ICYocnRscHJpdi0+cnRsaGFsKTsKKwl1MzIgdGltZW91dCA9IDIwMDAsIHRpbWVjb3VudCA9IDA7CisKKwl3aGlsZSAocnRscHJpdi0+bWFjODAyMTEuYWN0X3NjYW5uaW5nICYmIHRpbWVjb3VudCA8IHRpbWVvdXQpIHsKKwkJdWRlbGF5KDUwKTsKKwkJdGltZWNvdW50ICs9IDUwOworCX0KKworCXJ0bHBoeS0+bGNrX2lucHJvZ3Jlc3MgPSB0cnVlOworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfSVFLLAorCQkiTENLOlN0YXJ0ISEhIGN1cnJlbnRiYW5kICV4IGRlbGF5ICVkIG1zXG4iLAorCQkgcnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlLCB0aW1lY291bnQpOworCisJX3J0bDkyZWVfcGh5X2xjX2NhbGlicmF0ZShodywgZmFsc2UpOworCisJcnRscGh5LT5sY2tfaW5wcm9ncmVzcyA9IGZhbHNlOworfQorCit2b2lkIHJ0bDkyZWVfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY2hhciBkZWx0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCWlmIChydGxwaHktPmJfYXBrX2RvbmUpCisJCXJldHVybjsKKworCXJldHVybjsKK30KKwordm9pZCBydGw5MmVlX3BoeV9zZXRfcmZwYXRoX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBibWFpbikKK3sKKwlfcnRsOTJlZV9waHlfc2V0X3JmcGF0aF9zd2l0Y2goaHcsIGJtYWluLCBmYWxzZSk7Cit9CisKK2Jvb2wgcnRsOTJlZV9waHlfc2V0X2lvX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBpb190eXBlIGlvdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlib29sIGJfcG9zdHByb2Nlc3NpbmcgPSBmYWxzZTsKKworCVJUX1RSQUNFKENPTVBfQ01ELCBEQkdfVFJBQ0UsCisJCSAoIi0tPklPIENtZCglI3gpLCBzZXRfaW9faW5wcm9ncmVzcyglZClcbiIsCisJCSAgaW90eXBlLCBydGxwaHktPnNldF9pb19pbnByb2dyZXNzKSk7CisJZG8geworCQlzd2l0Y2ggKGlvdHlwZSkgeworCQljYXNlIElPX0NNRF9SRVNVTUVfRE1fQllfU0NBTjoKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCBEQkdfVFJBQ0UsCisJCQkJICgiW0lPIENNRF0gUmVzdW1lIERNIGFmdGVyIHNjYW4uXG4iKSk7CisJCQliX3Bvc3Rwcm9jZXNzaW5nID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIElPX0NNRF9QQVVTRV9CQU5EMF9ETV9CWV9TQ0FOOgorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19UUkFDRSwKKwkJCQkgKCJbSU8gQ01EXSBQYXVzZSBETSBiZWZvcmUgc2Nhbi5cbiIpKTsKKwkJCWJfcG9zdHByb2Nlc3NpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKGZhbHNlKTsKKwlpZiAoYl9wb3N0cHJvY2Vzc2luZyAmJiAhcnRscGh5LT5zZXRfaW9faW5wcm9ncmVzcykgeworCQlydGxwaHktPnNldF9pb19pbnByb2dyZXNzID0gdHJ1ZTsKKwkJcnRscGh5LT5jdXJyZW50X2lvX3R5cGUgPSBpb3R5cGU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlydGw5MmVlX3BoeV9zZXRfaW8oaHcpOworCVJUX1RSQUNFKENPTVBfQ01ELCBEQkdfVFJBQ0UsICgiSU8gVHlwZSglI3gpXG4iLCBpb3R5cGUpKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJlZV9waHlfc2V0X2lvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19UUkFDRSwKKwkJICgiLS0tPkNtZCglI3gpLCBzZXRfaW9faW5wcm9ncmVzcyglZClcbiIsCisJCSAgcnRscGh5LT5jdXJyZW50X2lvX3R5cGUsIHJ0bHBoeS0+c2V0X2lvX2lucHJvZ3Jlc3MpKTsKKwlzd2l0Y2ggKHJ0bHBoeS0+Y3VycmVudF9pb190eXBlKSB7CisJY2FzZSBJT19DTURfUkVTVU1FX0RNX0JZX1NDQU46CisJCXJ0bDkyZWVfZG1fd3JpdGVfZGlnKGh3ICwgcnRscGh5LT5pbml0Z2Fpbl9iYWNrdXAueGFhZ2Njb3JlMSk7CisJCXJ0bDkyZWVfZG1fd3JpdGVfY2NrX2NjYV90aHJlcyhodywgcnRscGh5LT5pbml0Z2Fpbl9iYWNrdXAuY2NhKTsKKwkJUlRfVFJBQ0UoQ09NUF9DTUQsIERCR19UUkFDRSAsICgibm8gc2V0IHR4cG93ZXJcbiIpKTsKKwkJcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfbGV2ZWwoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKTsKKwkJYnJlYWs7CisJY2FzZSBJT19DTURfUEFVU0VfQkFORDBfRE1fQllfU0NBTjoKKwkJLyogODE5MmVlYnQgKi8KKwkJcnRscGh5LT5pbml0Z2Fpbl9iYWNrdXAueGFhZ2Njb3JlMSA9IGRtX2RpZy5jdXJfaWd2YWx1ZTsKKwkJcnRsOTJlZV9kbV93cml0ZV9kaWcoaHcsIDB4MTcpOworCQlydGxwaHktPmluaXRnYWluX2JhY2t1cC5jY2EgPSBkbV9kaWcuY3VyX2Nja19jY2FfdGhyZXM7CisJCXJ0bDkyZWVfZG1fd3JpdGVfY2NrX2NjYV90aHJlcyhodywgMHg0MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisJcnRscGh5LT5zZXRfaW9faW5wcm9ncmVzcyA9IGZhbHNlOworCVJUX1RSQUNFKENPTVBfQ01ELCBEQkdfVFJBQ0UsCisJCSAoIiglI3gpXG4iLCBydGxwaHktPmN1cnJlbnRfaW9fdHlwZSkpOworfQorCitzdGF0aWMgdm9pZCBydGw5MmVlX3BoeV9zZXRfcmZfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NQUzBfQ1RSTCwgMHgyYik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAweEUzKTsKKwkvKnJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4MDApOyovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAweEUyKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4RTMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UWFBBVVNFLCAweDAwKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyZWVfcGh5X3NldF9yZl9zbGVlcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQQVVTRSwgMHhGRik7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4MDAsIFJGUkVHX09GRlNFVF9NQVNLLCAweDAwKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NQUzBfQ1RSTCwgMHgyMik7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmVlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBicmVzdWx0ID0gdHJ1ZTsKKwl1OCBpLCBxdWV1ZV9pZDsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gTlVMTDsKKworCXN3aXRjaCAocmZwd3Jfc3RhdGUpIHsKKwljYXNlIEVSRk9OOgorCQlpZiAoKHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9GRikgJiYKKwkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSkgeworCQkJYm9vbCBydHN0YXR1czsKKwkJCXUzMiBpbml0X2NvdW50ID0gMDsKKwkJCWRvIHsKKwkJCQlpbml0X2NvdW50Kys7CisJCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJCQkgKCJJUFMgU2V0IGVSZiBuaWMgZW5hYmxlXG4iKSk7CisJCQkJcnRzdGF0dXMgPSBzdGdfcnRsX3BzX2VuYWJsZV9uaWMoaHcpOworCQkJfSB3aGlsZSAoIXJ0c3RhdHVzICYmIChpbml0X2NvdW50IDwgMTApKTsKKwkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwkJfSBlbHNlIHsKKwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19ETUVTRywKKwkJCQkgKCJTZXQgRVJGT04gc2xlZXBlZDolZCBtc1xuIiwKKwkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQkgICBwcHNjLT5sYXN0X3NsZWVwX2ppZmZpZXMpKSk7CisJCQlwcHNjLT5sYXN0X2F3YWtlX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJcnRsOTJlZV9waHlfc2V0X3JmX29uKGh3KTsKKwkJfQorCQlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywgTEVEX0NUTF9MSU5LKTsKKwkJZWxzZQorCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX05PX0xJTkspOworCQlicmVhazsKKwljYXNlIEVSRk9GRjoKKwkJZm9yIChxdWV1ZV9pZCA9IDAsIGkgPSAwOworCQkgICAgIHF1ZXVlX2lkIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7KSB7CisJCQlyaW5nID0gJnBjaXByaXYtPmRldi50eF9yaW5nW3F1ZXVlX2lkXTsKKwkJCWlmIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMCkgeworCQkJCXF1ZXVlX2lkKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkJICgiZVJmIE9mZi9TbGVlcDogJWQgdGltZXMgVGNiQnVzeVF1ZXVlWyVkXSA9JWQgYmVmb3JlICIKKwkJCQkJICAiZG96ZSFcbiIsIChpICsgMSksIHF1ZXVlX2lkLAorCQkJCQkgIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOworCisJCQkJdWRlbGF5KDEwKTsKKwkJCQlpKys7CisJCQl9CisJCQlpZiAoaSA+PSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4KSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkgKCJcbiBFUkZTTEVFUDogJWQgdGltZXMgVGNiQnVzeVF1ZXVlWyVkXSA9ICVkICFcbiIsCisJCQkJCSAgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCwKKwkJCQkJICBxdWV1ZV9pZCwKKwkJCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSB7CisJCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJICgiSVBTIFNldCBlUmYgbmljIGRpc2FibGVcbiIpKTsKKwkJCXN0Z19ydGxfcHNfZGlzYWJsZV9uaWMoaHcpOworCQkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwcHNjLT5yZm9mZl9yZWFzb24gPT0gUkZfQ0hBTkdFX0JZX0lQUykgeworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgICAgICAgTEVEX0NUTF9OT19MSU5LKTsKKwkJCX0gZWxzZSB7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LAorCQkJCQkJCSAgICAgTEVEX0NUTF9QT1dFUl9PRkYpOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgRVJGU0xFRVA6CisJCWlmIChwcHNjLT5yZnB3cl9zdGF0ZSA9PSBFUkZPRkYpCisJCQlicmVhazsKKwkJZm9yIChxdWV1ZV9pZCA9IDAsIGkgPSAwOworCQkgICAgIHF1ZXVlX2lkIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7KSB7CisJCQlyaW5nID0gJnBjaXByaXYtPmRldi50eF9yaW5nW3F1ZXVlX2lkXTsKKwkJCWlmIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMCkgeworCQkJCXF1ZXVlX2lkKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkJICgiZVJmIE9mZi9TbGVlcDogJWQgdGltZXMgVGNiQnVzeVF1ZXVlWyVkXSA9JWQgYmVmb3JlIGRvemUhXG4iLAorCQkJCQkgIChpICsgMSksIHF1ZXVlX2lkLAorCQkJCQkgIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOworCQkJCXVkZWxheSgxMCk7CisJCQkJaSsrOworCQkJfQorCQkJaWYgKGkgPj0gTUFYX0RPWkVfV0FJVElOR19USU1FU185eCkgeworCQkJCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkJICgiXG4gRVJGU0xFRVA6ICVkIHRpbWVzIFRjYkJ1c3lRdWV1ZVslZF0gPSAlZCAhXG4iLAorCQkJCQkgIE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgsCisJCQkJCSAgcXVldWVfaWQsCisJCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJICgiU2V0IEVSRlNMRUVQIGF3YWtlZDolZCBtc1xuIiwKKwkJCSAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJICAgcHBzYy0+bGFzdF9hd2FrZV9qaWZmaWVzKSkpOworCQlwcHNjLT5sYXN0X3NsZWVwX2ppZmZpZXMgPSBqaWZmaWVzOworCQlfcnRsOTJlZV9waHlfc2V0X3JmX3NsZWVwKGh3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZXN1bHQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChicmVzdWx0KQorCQlwcHNjLT5yZnB3cl9zdGF0ZSA9IHJmcHdyX3N0YXRlOworCXJldHVybiBicmVzdWx0OworfQorCitib29sIHJ0bDkyZWVfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCWJvb2wgYnJlc3VsdCA9IGZhbHNlOworCisJaWYgKHJmcHdyX3N0YXRlID09IHBwc2MtPnJmcHdyX3N0YXRlKQorCQlyZXR1cm4gYnJlc3VsdDsKKwlicmVzdWx0ID0gX3J0bDkyZWVfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShodywgcmZwd3Jfc3RhdGUpOworCXJldHVybiBicmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmU2YzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvcGh5LmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJFX1BIWV9IX18KKyNkZWZpbmUgX19SVEw5MkVfUEhZX0hfXworCisvKkl0IG11c3QgYWx3YXlzIHNldCB0byA0LCBvdGhlcndpc2UgcmVhZCBlZnVzZSB0YWJsZSBzZWNxdWVuY2Ugd2lsbCBiZSB3cm9uZy4qLworI2RlZmluZSBNQVhfVFhfQ09VTlQJCQkJNAorI2RlZmluZSBUWF8xUwkJCQkJMAorI2RlZmluZSBUWF8yUwkJCQkJMQorI2RlZmluZSBUWF8zUwkJCQkJMgorI2RlZmluZSBUWF80UwkJCQkJMworCisjZGVmaW5lIE1BWF9QT1dFUl9JTkRFWAkJCQkweDNmCisKKyNkZWZpbmUgTUFYX1BSRUNNRF9DTlQJCQkJMTYKKyNkZWZpbmUgTUFYX1JGREVQRU5EQ01EX0NOVAkJCTE2CisjZGVmaW5lIE1BWF9QT1NUQ01EX0NOVAkJCQkxNgorCisjZGVmaW5lIE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgJCTY0CisKKyNkZWZpbmUgUlRfQ0FOTk9UX0lPKGh3KQkJCWZhbHNlCisjZGVmaW5lIEhJR0hQT1dFUl9SQURJT0FfQVJSQVlMRU4JCTIyCisKKyNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJCTE2CisjZGVmaW5lIElRS19NQUNfUkVHX05VTQkJCQk0CisjZGVmaW5lIElRS19CQl9SRUdfTlVNCQkJCTkKKyNkZWZpbmUgTUFYX1RPTEVSQU5DRQkJCQk1CisjZGVmaW5lCUlRS19ERUxBWV9USU1FCQkJCTEwCisjZGVmaW5lCWluZGV4X21hcHBpbmdfTlVNCQkJMTUKKworI2RlZmluZQlBUEtfQkJfUkVHX05VTQkJCQk1CisjZGVmaW5lCUFQS19BRkVfUkVHX05VTQkJCQkxNgorI2RlZmluZQlBUEtfQ1VSVkVfUkVHX05VTQkJCTQKKyNkZWZpbmUJUEFUSF9OVU0JCQkJMgorCisjZGVmaW5lIExPT1BfTElNSVQJCQkJNQorI2RlZmluZSBNQVhfU1RBTExfVElNRQkJCQk1MAorI2RlZmluZSBBbnRlbm5hRGl2ZXJzaXR5VmFsdWUJCQkweDgwCisjZGVmaW5lIE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTCQkJNjMKKyNkZWZpbmUgUmVzZXRfQ250X0xpbWl0CQkJCTMKKworI2RlZmluZSBSRjYwNTJfTUFYX1BBVEgJCQkJMgorCisjZGVmaW5lIENUX09GRlNFVF9NQUNfQUREUgkJCTBYMTYKKworI2RlZmluZSBDVF9PRkZTRVRfQ0NLX1RYX1BXUl9JRFgJCTB4NUEKKyNkZWZpbmUgQ1RfT0ZGU0VUX0hUNDAxU19UWF9QV1JfSURYCQkweDYwCisjZGVmaW5lIENUX09GRlNFVF9IVDQwMlNfVFhfUFdSX0lEWF9ESUZGCTB4NjYKKyNkZWZpbmUgQ1RfT0ZGU0VUX0hUMjBfVFhfUFdSX0lEWF9ESUZGCQkweDY5CisjZGVmaW5lIENUX09GRlNFVF9PRkRNX1RYX1BXUl9JRFhfRElGRgkJMHg2QworCisjZGVmaW5lIENUX09GRlNFVF9IVDQwX01BWF9QV1JfT0ZGU0VUCQkweDZGCisjZGVmaW5lIENUX09GRlNFVF9IVDIwX01BWF9QV1JfT0ZGU0VUCQkweDcyCisKKyNkZWZpbmUgQ1RfT0ZGU0VUX0NIQU5ORUxfUExBSAkJCTB4NzUKKyNkZWZpbmUgQ1RfT0ZGU0VUX1RIRVJNQUxfTUVURVIJCQkweDc4CisjZGVmaW5lIENUX09GRlNFVF9SRl9PUFRJT04JCQkweDc5CisjZGVmaW5lIENUX09GRlNFVF9WRVJTSU9OCQkJMHg3RQorI2RlZmluZSBDVF9PRkZTRVRfQ1VTVE9NRVJfSUQJCQkweDdGCisKKyNkZWZpbmUgUlRMOTJDX01BWF9QQVRIX05VTQkJCTIKKworZW51bSBzd2NobmxjbWRfaWQgeworCUNNRElEX0VORCwKKwlDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsCisJQ01ESURfQkJSRUdXUklURTEwLAorCUNNRElEX1dSSVRFUE9SVF9VTE9ORywKKwlDTURJRF9XUklURVBPUlRfVVNIT1JULAorCUNNRElEX1dSSVRFUE9SVF9VQ0hBUiwKKwlDTURJRF9SRl9XUklURVJFRywKK307CisKK3N0cnVjdCBzd2NobmxjbWQgeworCWVudW0gc3djaG5sY21kX2lkIGNtZGlkOworCXUzMiBwYXJhMTsKKwl1MzIgcGFyYTI7CisJdTMyIG1zZGVsYXk7Cit9OworCitlbnVtIGJhc2ViYW5kX2NvbmZpZ190eXBlIHsKKwlCQVNFQkFORF9DT05GSUdfUEhZX1JFRyA9IDAsCisJQkFTRUJBTkRfQ09ORklHX0FHQ19UQUIgPSAxLAorfTsKKworZW51bSBhbnRfZGl2X3R5cGUgeworCU5PX0FOVERJViA9IDB4RkYsCisJQ0dfVFJYX0hXX0FOVERJViA9IDB4MDEsCisJQ0dDU19SWF9IV19BTlRESVYgPSAweDAyLAorCUZJWEVEX0hXX0FOVERJViA9IDB4MDMsCisJQ0dfVFJYX1NNQVJUX0FOVERJViA9IDB4MDQsCisJQ0dDU19SWF9TV19BTlRESVYgPSAweDA1LAorCit9OworZXh0ZXJuIHUzMiBydGw5MmVlX3BoeV9xdWVyeV9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzayk7CitleHRlcm4gdm9pZCBydGw5MmVlX3BoeV9zZXRfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpOworZXh0ZXJuIHUzMiBydGw5MmVlX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLAorCQkJCSAgICB1MzIgYml0bWFzayk7CitleHRlcm4gdm9pZCBydGw5MmVlX3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLAorCQkJCSAgIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7CitleHRlcm4gYm9vbCBydGw5MmVlX3BoeV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiBib29sIHJ0bDkyZWVfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gYm9vbCBydGw5MmVlX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIHZvaWQgcnRsOTJlZV9waHlfZ2V0X2h3X3JlZ19vcmlnaW5hbHZhbHVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB2b2lkIHJ0bDkyZWVfcGh5X2dldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIGxvbmcgKnBvd2VybGV2ZWwpOworZXh0ZXJuIHZvaWQgcnRsOTJlZV9waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpOworZXh0ZXJuIHZvaWQgcnRsOTJlZV9waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1OCBvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgcnRsOTJlZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIHZvaWQgcnRsOTJlZV9waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hfdHlwZSk7CitleHRlcm4gdm9pZCBydGw5MmVlX3BoeV9zd19jaG5sX2NhbGxiYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB1OCBydGw5MmVlX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB2b2lkIHJ0bDkyZWVfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX3JlY292ZXJ5KTsKK3ZvaWQgcnRsOTJlZV9waHlfYXBfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjaGFyIGRlbHRhKTsKK3ZvaWQgcnRsOTJlZV9waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9waHlfc2V0X3JmcGF0aF9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYm1haW4pOworYm9vbCBydGw5MmVlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoKTsKK2Jvb2wgcnRsOTJlZV9waHlfc2V0X2lvX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBpb190eXBlIGlvdHlwZSk7CitleHRlcm4gYm9vbCBydGw5MmVlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9wd3JzZXEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3B3cnNlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTJkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9wd3JzZXEuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAicHdyc2VxY21kLmgiCisjaW5jbHVkZSAicHdyc2VxLmgiCisKKworLyoKKyAgICBkcml2ZXJzIHNob3VsZCBwYXJzZSBiZWxvdyBhcnJheXMgYW5kIGRvIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbnMKKyovCisvKjMgUG93ZXIgb24gIEFycmF5Ki8KK3N0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfcG93ZXJfb25fZmxvd1tSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX0FDVF9TVEVQUyArCisJCQkJCSAgIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU10gPSB7CisJUlRMODE5MkVfVFJBTlNfQ0FSREVNVV9UT19BQ1QKKwlSVEw4MTkyRV9UUkFOU19FTkQKK307CisKKy8qM1JhZGlvIG9mZiBHUElPIEFycmF5ICovCitzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHJ0bDgxOTJFX3JhZGlvX29mZl9mbG93W1JUTDgxOTJFX1RSQU5TX0FDVF9UT19DQVJERU1VX1NURVBTCisJCQkJCSAgICArIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU10gPSB7CisJUlRMODE5MkVfVFJBTlNfQUNUX1RPX0NBUkRFTVUKKwlSVEw4MTkyRV9UUkFOU19FTkQKK307CisKKy8qM0NhcmQgRGlzYWJsZSBBcnJheSovCitzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHJ0bDgxOTJFX2NhcmRfZGlzYWJsZV9mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVV9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1BETl9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19FTkRfU1RFUFNdID0geworCVJUTDgxOTJFX1RSQU5TX0FDVF9UT19DQVJERU1VCisJUlRMODE5MkVfVFJBTlNfQ0FSREVNVV9UT19DQVJERElTCisJUlRMODE5MkVfVFJBTlNfRU5ECit9OworCisvKjMgQ2FyZCBFbmFibGUgQXJyYXkqLworc3RydWN0IHdsYW5fcHdyX2NmZyBydGw4MTkyRV9jYXJkX2VuYWJsZV9mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVV9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1BETl9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19FTkRfU1RFUFNdID0geworCVJUTDgxOTJFX1RSQU5TX0NBUkRESVNfVE9fQ0FSREVNVQorCVJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fQUNUCisJUlRMODE5MkVfVFJBTlNfRU5ECit9OworCisvKjNTdXNwZW5kIEFycmF5Ki8KK3N0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfc3VzcGVuZF9mbG93W1JUTDgxOTJFX1RSQU5TX0FDVF9UT19DQVJERU1VX1NURVBTICsKKwkJCQkJICBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1NVU19TVEVQUyArCisJCQkJCSAgUlRMODE5MkVfVFJBTlNfRU5EX1NURVBTXSA9IHsKKwlSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVQorCVJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fU1VTCisJUlRMODE5MkVfVFJBTlNfRU5ECit9OworCisvKjMgUmVzdW1lIEFycmF5Ki8KK3N0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfcmVzdW1lX2Zsb3dbUlRMODE5MkVfVFJBTlNfQUNUX1RPX0NBUkRFTVVfU1RFUFMgKworCQkJCQkgUlRMODE5MkVfVFJBTlNfQ0FSREVNVV9UT19TVVNfU1RFUFMgKworCQkJCQkgUlRMODE5MkVfVFJBTlNfRU5EX1NURVBTXSA9IHsKKwlSVEw4MTkyRV9UUkFOU19TVVNfVE9fQ0FSREVNVQorCVJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fQUNUCisJUlRMODE5MkVfVFJBTlNfRU5ECit9OworCisvKjNIV1BETiBBcnJheSovCitzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHJ0bDgxOTJFX2h3cGRuX2Zsb3dbUlRMODE5MkVfVFJBTlNfQUNUX1RPX0NBUkRFTVVfU1RFUFMgKworCQkJCQlSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1BETl9TVEVQUyArCisJCQkJCVJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU10gPSB7CisJUlRMODE5MkVfVFJBTlNfQUNUX1RPX0NBUkRFTVUKKwlSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1BETgorCVJUTDgxOTJFX1RSQU5TX0VORAorfTsKKworLyozIEVudGVyIExQUyAqLworc3RydWN0IHdsYW5fcHdyX2NmZyBydGw4MTkyRV9lbnRlcl9scHNfZmxvd1tSVEw4MTkyRV9UUkFOU19BQ1RfVE9fTFBTX1NURVBTICsKKwkJCQkJICAgIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU10gPSB7CisJLypGVyBiZWhhdmlvciovCisJUlRMODE5MkVfVFJBTlNfQUNUX1RPX0xQUworCVJUTDgxOTJFX1RSQU5TX0VORAorfTsKKworLyozIExlYXZlIExQUyAqLworc3RydWN0IHdsYW5fcHdyX2NmZyBydGw4MTkyRV9sZWF2ZV9scHNfZmxvd1tSVEw4MTkyRV9UUkFOU19MUFNfVE9fQUNUX1NURVBTICsKKwkJCQkJICAgIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU10gPSB7CisJLypGVyBiZWhhdmlvciovCisJUlRMODE5MkVfVFJBTlNfTFBTX1RPX0FDVAorCVJUTDgxOTJFX1RSQU5TX0VORAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3B3cnNlcS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvcHdyc2VxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4ODk3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3B3cnNlcS5oCkBAIC0wLDAgKzEsMzU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyRV9QV1JTRVFfSF9fCisjZGVmaW5lIF9fUlRMOTJFX1BXUlNFUV9IX18KKworI2luY2x1ZGUgInB3cnNlcWNtZC5oIgorLyoKKwlDaGVjayBkb2N1bWVudCBXTS0yMDExMDYwNy1QYXVsLVJUTDgxOTJFX1Bvd2VyX0FyY2hpdGVjdHVyZS1SMDIudnNkCisJVGhlcmUgYXJlIDYgSFcgUG93ZXIgU3RhdGVzOgorCTA6IFBPRkYtLVBvd2VyIE9mZgorCTE6IFBETi0tUG93ZXIgRG93bgorCTI6IENBUkRFTVUtLUNhcmQgRW11bGF0aW9uCisJMzogQUNULS1BY3RpdmUgTW9kZQorCTQ6IExQUy0tTG93IFBvd2VyIFN0YXRlCisJNTogU1VTLS1TdXNwZW5kCisKKwlUaGUgdHJhbnNpc2lvbiBmcm9tIGRpZmZlcmVudCBzdGF0ZXMgYXJlIGRlZmluZWQgYmVsb3cKKwlUUkFOU19DQVJERU1VX1RPX0FDVAorCVRSQU5TX0FDVF9UT19DQVJERU1VCisJVFJBTlNfQ0FSREVNVV9UT19TVVMKKwlUUkFOU19TVVNfVE9fQ0FSREVNVQorCVRSQU5TX0NBUkRFTVVfVE9fUEROCisJVFJBTlNfQUNUX1RPX0xQUworCVRSQU5TX0xQU19UT19BQ1QKKworCVRSQU5TX0VORAorCVBXUiBTRVEgVmVyc2lvbjogcnRsODE5MkVfUHdyU2VxX1YwOS5oCisqLworCisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fQUNUX1NURVBTCTE4CisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0FDVF9UT19DQVJERU1VX1NURVBTCTE4CisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fU1VTX1NURVBTCTE4CisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX1NVU19UT19DQVJERU1VX1NURVBTCTE4CisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fUEROX1NURVBTCTE4CisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX1BETl9UT19DQVJERU1VX1NURVBTCTE4CisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0FDVF9UT19MUFNfU1RFUFMJCTIzCisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0xQU19UT19BQ1RfU1RFUFMJCTIzCisjZGVmaW5lCVJUTDgxOTJFX1RSQU5TX0VORF9TVEVQUwkJMQorCisKKyNkZWZpbmUgUlRMODE5MkVfVFJBTlNfQ0FSREVNVV9UT19BQ1QJCQkJCVwKKwkvKiBmb3JtYXQgKi8JCQkJCQkJXAorCS8qIGNvbW1lbnRzIGhlcmUgKi8JCQkJCQlcCisJLyogeyBvZmZzZXQsIGN1dF9tc2ssIGZhYl9tc2t8aW50ZXJmYWNlX21zaywgYmFzZXxjbWQsIG1zaywgdmFsdWUgfSwqL1wKKwkvKiBkaXNhYmxlIEhXUEROIDB4MDRbMTVdPTAqLwkJCQkJXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoNyksIDB9LAkJCVwKKwkvKiBkaXNhYmxlIFNXIExQUyAweDA0WzEwXT0wKi8JCQkJCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDIpLCAwfSwJCQlcCisJLyogZGlzYWJsZSBXTCBzdXNwZW5kKi8JCQkJCQlcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIChCSVQoNCl8QklUKDMpKSwgMH0sCQlcCisJLyogd2FpdCB0aWxsIDB4MDRbMTddID0gMSAgICBwb3dlciByZWFkeSovCQkJXAorCXsweDAwMDYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1BPTExJTkcsIEJJVCgxKSwgQklUKDEpfSwJCVwKKwkvKiByZWxlYXNlIFdMT04gcmVzZXQgIDB4MDRbMTZdPTEqLwkJCQlcCisJezB4MDAwNiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgQklUKDApfSwJCVwKKwkvKiBwb2xsaW5nIHVudGlsIHJldHVybiAwKi8JCQkJCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDApLCBCSVQoMCl9LAkJXAorCS8qKi8JCQkJCQkJCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9QT0xMSU5HLCBCSVQoMCksIDB9LAorCisKKyNkZWZpbmUgUlRMODE5MkVfVFJBTlNfQUNUX1RPX0NBUkRFTVUJCQkJCVwKKwkvKiBmb3JtYXQgKi8JCQkJCQkJXAorCS8qIGNvbW1lbnRzIGhlcmUgKi8JCQkJCQlcCisJLyogeyBvZmZzZXQsIGN1dF9tc2ssIGZhYl9tc2t8aW50ZXJmYWNlX21zaywgYmFzZXxjbWQsIG1zaywgdmFsdWUgfSwqL1wKKwkvKjB4MUZbNzowXSA9IDAgdHVybiBvZmYgUkYqLwkJCQkJXAorCXsweDAwMUYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAwfSwJCQlcCisJLyoweDRDWzIzXT0weDRFWzddPTAsIHN3aXRjaCBEUERUX1NFTF9QIG91dHB1dCBmcm9tIHJlZ2lzdGVyIDB4NjVbMl0gKi9cCisJezB4MDA0RSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCg3KSwgMH0sCQkJXAorCS8qMHgwNFs5XSA9IDEgdHVybiBvZmYgTUFDIGJ5IEhXIHN0YXRlIG1hY2hpbmUqLwkJXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoMSksIEJJVCgxKX0sCQlcCisJLyp3YWl0IHRpbGwgMHgwNFs5XSA9IDAgcG9sbGluZyB1bnRpbCByZXR1cm4gMCB0byBkaXNhYmxlKi8JXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1BPTExJTkcsIEJJVCgxKSwgMH0sCisKKworI2RlZmluZSBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1NVUwkJCQkJXAorCS8qIGZvcm1hdCAqLwkJCQkJCQlcCisJLyogY29tbWVudHMgaGVyZSAqLwkJCQkJCVwKKwkvKiB7IG9mZnNldCwgY3V0X21zaywgZmFiX21za3xpbnRlcmZhY2VfbXNrLCBiYXNlfGNtZCwgbXNrLCB2YWx1ZSB9LCovXAorCS8qMHgwNFsxMjoxMV0gPSAyYicxMSBlbmFibGUgV0wgc3VzcGVuZCBmb3IgUENJZSovCQlcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCg0KSB8IEJJVCgzKSwgKEJJVCg0KSB8IEJJVCgzKSl9LFwKKwkvKjB4MDRbMTI6MTFdID0gMmInMDEgZW5hYmxlIFdMIHN1c3BlbmQqLwkJCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywJCQlcCisJIFBXUl9JTlRGX1VTQl9NU0sgfCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywJXAorCSBQV1JfQ01EX1dSSVRFLCBCSVQoMyl8QklUKDQpLCBCSVQoMyl9LAkJCQlcCisJLyoweDA0WzEyOjExXSA9IDJiJzExIGVuYWJsZSBXTCBzdXNwZW5kIGZvciBQQ0llKi8JCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfUENJX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDMpIHwgQklUKDQpLCBCSVQoMykgfCBCSVQoNCl9LFwKKwkvKlNldCBTRElPIHN1c3BlbmQgbG9jYWwgcmVnaXN0ZXIqLwkJCQlcCisJezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLAlcCisJIFBXUl9CQVNFQUREUl9TRElPICwgUFdSX0NNRF9XUklURSwgQklUKDApLCBCSVQoMCl9LAkJXAorCSAvKndhaXQgcG93ZXIgc3RhdGUgdG8gc3VzcGVuZCovCQkJCVwKKwl7MHgwMDg2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssCVwKKwkgUFdSX0JBU0VBRERSX1NESU8gLCBQV1JfQ01EX1BPTExJTkcsIEJJVCgxKSwgMH0sCisKKworI2RlZmluZSBSVEw4MTkyRV9UUkFOU19TVVNfVE9fQ0FSREVNVQkJCQkJXAorCS8qIGZvcm1hdCAqLwkJCQkJCQlcCisJLyogY29tbWVudHMgaGVyZSAqLwkJCQkJCVwKKwkvKiB7IG9mZnNldCwgY3V0X21zaywgZmFiX21za3xpbnRlcmZhY2VfbXNrLCBiYXNlfGNtZCwgbXNrLCB2YWx1ZSB9LCovXAorCS8qU2V0IFNESU8gc3VzcGVuZCBsb2NhbCByZWdpc3RlciovCQkJCVwKKwl7MHgwMDg2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssCVwKKwkgUFdSX0JBU0VBRERSX1NESU8gLCBQV1JfQ01EX1dSSVRFLCBCSVQoMCksIDB9LAkJCVwKKwkvKndhaXQgcG93ZXIgc3RhdGUgdG8gc3VzcGVuZCovCQkJCQlcCisJezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLAlcCisJIFBXUl9CQVNFQUREUl9TRElPICwgUFdSX0NNRF9QT0xMSU5HLCBCSVQoMSksIEJJVCgxKX0sCQlcCisJLyoweDA0WzEyOjExXSA9IDJiJzAxZW5hYmxlIFdMIHN1c3BlbmQqLwkJCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDMpIHwgQklUKDQpLCAwfSwKKworCisjZGVmaW5lIFJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fQ0FSRERJUwkJCQlcCisJLyogZm9ybWF0ICovCQkJCQkJCVwKKwkvKiBjb21tZW50cyBoZXJlICovCQkJCQkJXAorCS8qIHsgb2Zmc2V0LCBjdXRfbXNrLCBmYWJfbXNrfGludGVyZmFjZV9tc2ssIGJhc2V8Y21kLCBtc2ssIHZhbHVlIH0sKi9cCisJLyoweDA3PTB4MjAgLCBTT1Agb3B0aW9uIHRvIGRpc2FibGUgQkcvTUIqLwkJCVwKKwl7MHgwMDA3LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB4MjB9LAkJCVwKKwkvKlVubG9jayBzbWFsbCBMRE8gUmVnaXN0ZXIqLwkJCQkJXAorCXsweDAwQ0MsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDIpLCBCSVQoMil9LAkJXAorCS8qRGlzYWJsZSBzbWFsbCBMRE8qLwkJCQkJCVwKKwl7MHgwMDExLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgMH0sCQkJXAorCS8qMHgwNFsxMjoxMV0gPSAyYicwMSBlbmFibGUgV0wgc3VzcGVuZCovCQkJXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLAkJCVwKKwkgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSyxQV1JfQkFTRUFERFJfTUFDLAkJXAorCSBQV1JfQ01EX1dSSVRFLCBCSVQoMyl8QklUKDQpLCBCSVQoMyl9LAkJCQlcCisJLyoweDA0WzEwXSA9IDEsIGVuYWJsZSBTVyBMUFMqLwkJCQkJXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9QQ0lfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoMiksIEJJVCgyKX0sCQlcCisJLypTZXQgU0RJTyBzdXNwZW5kIGxvY2FsIHJlZ2lzdGVyKi8JCQkJXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywJXAorCSBQV1JfQkFTRUFERFJfU0RJTyAsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgQklUKDApfSwJCVwKKwkvKndhaXQgcG93ZXIgc3RhdGUgdG8gc3VzcGVuZCovCQkJCQlcCisJezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLAlcCisJIFBXUl9CQVNFQUREUl9TRElPICwgUFdSX0NNRF9QT0xMSU5HLCBCSVQoMSksIDB9LAorCisKKyNkZWZpbmUgUlRMODE5MkVfVFJBTlNfQ0FSRERJU19UT19DQVJERU1VCQkJCVwKKwkvKiBmb3JtYXQgKi8JCQkJCQkJXAorCS8qIGNvbW1lbnRzIGhlcmUgKi8JCQkJCQlcCisJLyogeyBvZmZzZXQsIGN1dF9tc2ssIGZhYl9tc2t8aW50ZXJmYWNlX21zaywgYmFzZXxjbWQsIG1zaywgdmFsdWUgfSwqL1wKKwkvKlNldCBTRElPIHN1c3BlbmQgbG9jYWwgcmVnaXN0ZXIqLwkJCQlcCisJezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLAlcCisJIFBXUl9CQVNFQUREUl9TRElPICwgUFdSX0NNRF9XUklURSwgQklUKDApLCAwfSwJCQlcCisJLyp3YWl0IHBvd2VyIHN0YXRlIHRvIHN1c3BlbmQqLwkJCQkJXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywJXAorCSBQV1JfQkFTRUFERFJfU0RJTyAsIFBXUl9DTURfUE9MTElORywgQklUKDEpLCBCSVQoMSl9LAkJXAorCS8qRW5hYmxlIHNtYWxsIExETyovCQkJCQkJXAorCXsweDAwMTEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDApLCBCSVQoMCl9LAkJXAorCS8qTG9jayBzbWFsbCBMRE8gUmVnaXN0ZXIqLwkJCQkJXAorCXsweDAwQ0MsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDIpLCAwfSwJCQlcCisJLyoweDA0WzEyOjExXSA9IDJiJzAxZW5hYmxlIFdMIHN1c3BlbmQqLwkJCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDMpIHwgQklUKDQpLCAwfSwKKworCisjZGVmaW5lIFJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fUEROCQkJCQlcCisJLyogZm9ybWF0ICovCQkJCQkJCVwKKwkvKiBjb21tZW50cyBoZXJlICovCQkJCQkJXAorCS8qIHsgb2Zmc2V0LCBjdXRfbXNrLCBmYWJfbXNrfGludGVyZmFjZV9tc2ssIGJhc2V8Y21kLCBtc2ssIHZhbHVlIH0sKi9cCisJLyogMHgwNFsxNl0gPSAwKi8JCQkJCQlcCisJezB4MDAwNiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgMH0sCQkJXAorCS8qIDB4MDRbMTVdID0gMSovCQkJCQkJXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoNyksIEJJVCg3KX0sCisKKworI2RlZmluZSBSVEw4MTkyRV9UUkFOU19QRE5fVE9fQ0FSREVNVQkJCQkJXAorCS8qIGZvcm1hdCAqLwkJCQkJCQlcCisJLyogY29tbWVudHMgaGVyZSAqLwkJCQkJCVwKKwkvKiB7IG9mZnNldCwgY3V0X21zaywgZmFiX21za3xpbnRlcmZhY2VfbXNrLCBiYXNlfGNtZCwgbXNrLCB2YWx1ZSB9LCovXAorCS8qIDB4MDRbMTVdID0gMCovCQkJCQkJXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoNyksIDB9LAorCisKKyNkZWZpbmUgUlRMODE5MkVfVFJBTlNfQUNUX1RPX0xQUwkJCQkJXAorCS8qIGZvcm1hdCAqLwkJCQkJCQlcCisJLyogY29tbWVudHMgaGVyZSAqLwkJCQkJCVwKKwkvKiB7IG9mZnNldCwgY3V0X21zaywgZmFiX21za3xpbnRlcmZhY2VfbXNrLCBiYXNlfGNtZCwgbXNrLCB2YWx1ZSB9LCovXAorCS8qUENJZSBETUEgc3RvcCovCQkJCQkJXAorCXsweDAzMDEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9QQ0lfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAweEZGfSwJCQlcCisJLypUeCBQYXVzZSovCQkJCQkJCVwKKwl7MHgwNTIyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgMHhGRiwgMHhGRn0sCQkJXAorCS8qU2hvdWxkIGJlIHplcm8gaWYgbm8gcGFja2V0IGlzIHRyYW5zbWl0dGluZyovCQkJXAorCXsweDA1RjgsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1BPTExJTkcsIDB4RkYsIDB9LAkJCVwKKwkvKlNob3VsZCBiZSB6ZXJvIGlmIG5vIHBhY2tldCBpcyB0cmFuc21pdHRpbmcqLwkJCVwKKwl7MHgwNUY5LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9QT0xMSU5HLCAweEZGLCAwfSwJCQlcCisJLypTaG91bGQgYmUgemVybyBpZiBubyBwYWNrZXQgaXMgdHJhbnNtaXR0aW5nKi8JCQlcCisJezB4MDVGQSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfUE9MTElORywgMHhGRiwgMH0sCQkJXAorCS8qU2hvdWxkIGJlIHplcm8gaWYgbm8gcGFja2V0IGlzIHRyYW5zbWl0dGluZyovCQkJXAorCXsweDA1RkIsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1BPTExJTkcsIDB4RkYsIDB9LAkJCVwKKwkvKkNDSyBhbmQgT0ZETSBhcmUgZGlzYWJsZWQsYW5kIGNsb2NrIGFyZSBnYXRlZCovCQlcCisJezB4MDAwMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgMH0sCQkJXAorCS8qRGVsYXkgMXVzKi8JCQkJCQkJXAorCXsweDAwMDIsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX0RFTEFZLCAwLCBQV1JTRVFfREVMQVlfVVN9LAkJXAorCS8qV2hvbGUgQkIgaXMgcmVzZXQqLwkJCQkJCVwKKwl7MHgwMDAyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgQklUKDEpLCAwfSwJCQlcCisJLypSZXNldCBNQUMgVFJYKi8JCQkJCQlcCisJezB4MDEwMCwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB4MDN9LAkJCVwKKwkvKmNoZWNrIGlmIHJlbW92ZWQgbGF0ZXIqLwkJCQkJXAorCXsweDAxMDEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoMSksIDB9LAkJCVwKKwkvKldoZW4gZHJpdmVyIGVudGVyIFN1cy8gRGlzYWJsZSwgZW5hYmxlIExPUCBmb3IgQlQqLwkJXAorCXsweDAwOTMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgMHhGRiwgMHgwMH0sCQkJXAorCS8qUmVzcG9uZCBUeE9LIHRvIHNjaGVkdWxlciovCQkJCQlcCisJezB4MDU1MywgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIEJJVCg1KSwgQklUKDUpfSwKKworCisjZGVmaW5lIFJUTDgxOTJFX1RSQU5TX0xQU19UT19BQ1QJCQkJCVwKKwkvKiBmb3JtYXQgKi8JCQkJCQkJXAorCS8qIGNvbW1lbnRzIGhlcmUgKi8JCQkJCQlcCisJLyogeyBvZmZzZXQsIGN1dF9tc2ssIGZhYl9tc2t8aW50ZXJmYWNlX21zaywgYmFzZXxjbWQsIG1zaywgdmFsdWUgfSwqL1wKKwkvKlNESU8gUlBXTSwgRm9yIFJlcGVhdGx5IEluIGFuZCBvdXQsIFRhZ2dsZSBiaXQgc2hvdWxkIGJlIGNoYW5nZWQqL1wKKwl7MHgwMDgwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssCVwKKwkgUFdSX0JBU0VBRERSX1NESU8gLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAweDg0fSwJCQlcCisJLypVU0IgUlBXTSovCQkJCQkJCVwKKwl7MHhGRTU4LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9XUklURSwgMHhGRiwgMHg4NH0sCQkJXAorCS8qUENJZSBSUFdNKi8JCQkJCQkJXAorCXsweDAzNjEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9QQ0lfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAweDg0fSwJCQlcCisJLypEZWxheSovCQkJCQkJCVwKKwl7MHgwMDAyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9ERUxBWSwgMCwgUFdSU0VRX0RFTEFZX01TfSwJCVwKKwkvKjB4MDhbNF0gPSAwIHN3aXRjaCBUU0YgdG8gNDBNKi8JCQkJXAorCXsweDAwMDgsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoNCksIDB9LAkJCVwKKwkvKlBvbGxpbmcgMHgxMDlbN109MCAgVFNGIGluIDQwTSovCQkJCVwKKwl7MHgwMTA5LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywJXAorCSBQV1JfQkFTRUFERFJfTUFDICwgUFdSX0NNRF9QT0xMSU5HLCBCSVQoNyksIDB9LAkJCVwKKwkvKjB4MTAxWzFdID0gMSovCQkJCQkJXAorCXsweDAxMDEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoMSksIEJJVCgxKX0sCQlcCisJLyoweDEwMFs3OjBdID0gMHhGRiAgZW5hYmxlIFdNQUMgVFJYKi8JCQkJXAorCXsweDAxMDAsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAweEZGfSwJCQlcCisJLyogMHgwMlsxOjBdID0gMmInMTEgZW5hYmxlIEJCIG1hY3JvKi8JCQkJXAorCXsweDAwMDIsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCBCSVQoMSkgfCBCSVQoMCksIEJJVCgxKSB8IEJJVCgwKX0sXAorCS8qMHg1MjIgPSAwKi8JCQkJCQkJXAorCXsweDA1MjIsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIFBXUl9CQVNFQUREUl9NQUMgLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAwfSwJCQlcCisJLypDbGVhciBJU1IqLwkJCQkJCQlcCisJezB4MDEzRCwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssCVwKKwkgUFdSX0JBU0VBRERSX01BQyAsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB4RkZ9LAorCisKKyNkZWZpbmUgUlRMODE5MkVfVFJBTlNfRU5ECQkJCQkJXAorCS8qIGZvcm1hdCAqLwkJCQkJCQlcCisJLyogY29tbWVudHMgaGVyZSAqLwkJCQkJCVwKKwkvKiB7IG9mZnNldCwgY3V0X21zaywgZmFiX21za3xpbnRlcmZhY2VfbXNrLCBiYXNlfGNtZCwgbXNrLCB2YWx1ZSB9LCovXAorCXsweEZGRkYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLAlcCisJIDAsIFBXUl9DTURfRU5ELCAwLCAwfSwKKworZXh0ZXJuIHN0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfcG93ZXJfb25fZmxvdworCQkJCQlbUlRMODE5MkVfVFJBTlNfQ0FSREVNVV9UT19BQ1RfU1RFUFMgKworCQkJCQkgUlRMODE5MkVfVFJBTlNfRU5EX1NURVBTXTsKK2V4dGVybiBzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHJ0bDgxOTJFX3JhZGlvX29mZl9mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVV9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19FTkRfU1RFUFNdOworZXh0ZXJuIHN0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfY2FyZF9kaXNhYmxlX2Zsb3cKKwkJCQkJW1JUTDgxOTJFX1RSQU5TX0FDVF9UT19DQVJERU1VX1NURVBTICsKKwkJCQkJIFJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fUEROX1NURVBTICsKKwkJCQkJIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU107CitleHRlcm4gc3RydWN0IHdsYW5fcHdyX2NmZyBydGw4MTkyRV9jYXJkX2VuYWJsZV9mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVV9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1BETl9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19FTkRfU1RFUFNdOworZXh0ZXJuIHN0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfc3VzcGVuZF9mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVV9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1NVU19TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19FTkRfU1RFUFNdOworZXh0ZXJuIHN0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfcmVzdW1lX2Zsb3cKKwkJCQkJW1JUTDgxOTJFX1RSQU5TX0FDVF9UT19DQVJERU1VX1NURVBTICsKKwkJCQkJIFJUTDgxOTJFX1RSQU5TX0NBUkRFTVVfVE9fU1VTX1NURVBTICsKKwkJCQkJIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU107CitleHRlcm4gc3RydWN0IHdsYW5fcHdyX2NmZyBydGw4MTkyRV9od3Bkbl9mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19BQ1RfVE9fQ0FSREVNVV9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19DQVJERU1VX1RPX1BETl9TVEVQUyArCisJCQkJCSBSVEw4MTkyRV9UUkFOU19FTkRfU1RFUFNdOworZXh0ZXJuIHN0cnVjdCB3bGFuX3B3cl9jZmcgcnRsODE5MkVfZW50ZXJfbHBzX2Zsb3cKKwkJCQkJW1JUTDgxOTJFX1RSQU5TX0FDVF9UT19MUFNfU1RFUFMgKworCQkJCQkgUlRMODE5MkVfVFJBTlNfRU5EX1NURVBTXTsKK2V4dGVybiBzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHJ0bDgxOTJFX2xlYXZlX2xwc19mbG93CisJCQkJCVtSVEw4MTkyRV9UUkFOU19MUFNfVE9fQUNUX1NURVBTICsKKwkJCQkJIFJUTDgxOTJFX1RSQU5TX0VORF9TVEVQU107CisKKworLyogUlRMODE5MkVFIFBvd2VyIENvbmZpZ3VyYXRpb24gQ01EcyBmb3IgUENJZSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUnRsODE5MkVfTklDX1BXUl9PTl9GTE9XCXJ0bDgxOTJFX3Bvd2VyX29uX2Zsb3cKKyNkZWZpbmUgUnRsODE5MkVfTklDX1JGX09GRl9GTE9XCXJ0bDgxOTJFX3JhZGlvX29mZl9mbG93CisjZGVmaW5lIFJ0bDgxOTJFX05JQ19ESVNBQkxFX0ZMT1cJcnRsODE5MkVfY2FyZF9kaXNhYmxlX2Zsb3cKKyNkZWZpbmUgUnRsODE5MkVfTklDX0VOQUJMRV9GTE9XCXJ0bDgxOTJFX2NhcmRfZW5hYmxlX2Zsb3cKKyNkZWZpbmUgUnRsODE5MkVfTklDX1NVU1BFTkRfRkxPVwlydGw4MTkyRV9zdXNwZW5kX2Zsb3cKKyNkZWZpbmUgUnRsODE5MkVfTklDX1JFU1VNRV9GTE9XCXJ0bDgxOTJFX3Jlc3VtZV9mbG93CisjZGVmaW5lIFJ0bDgxOTJFX05JQ19QRE5fRkxPVwkJcnRsODE5MkVfaHdwZG5fZmxvdworI2RlZmluZSBSdGw4MTkyRV9OSUNfTFBTX0VOVEVSX0ZMT1cJcnRsODE5MkVfZW50ZXJfbHBzX2Zsb3cKKyNkZWZpbmUgUnRsODE5MkVfTklDX0xQU19MRUFWRV9GTE9XCXJ0bDgxOTJFX2xlYXZlX2xwc19mbG93CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3B3cnNlcWNtZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvcHdyc2VxY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiMDBmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3B3cnNlcWNtZC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJwd3JzZXEuaCIKKworCisvKgorKglEZXNjcmlwdGlvbjoKKyoJCVRoaXMgcm91dGluZSBkZWFsIHdpdGggdGhlIFBvd2VyIENvbmZpZ3VyYXRpb24gQ01EcworKgkJIHBhcnNpbmcgZm9yIFJUTDg3MjMvUlRMODE4OEUgU2VyaWVzIElDLgorKglBc3N1bXB0aW9uOgorKgkJV2Ugc2hvdWxkIGZvbGxvdyBzcGVjaWZpYyBmb3JtYXQgd2hpY2ggd2FzIHJlbGVhc2VkIGZyb20gSFcgU0QuCisqCisqCTIwMTEuMDcuMDcsIGFkZGVkIGJ5IFJvZ2VyLgorKi8KK2Jvb2wgcnRsOTJlX2hhbF9wd3JzZXFjbWRwYXJzaW5nKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTggY3V0X3ZlcnNpb24sCisJCQkgICAgICAgdTggZmFiX3ZlcnNpb24sIHU4IGludGVyZmFjZV90eXBlLAorCQkJICAgICAgIHN0cnVjdCB3bGFuX3B3cl9jZmcgcHdyY2ZnY21kW10pCisKK3sKKwlzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHB3cl9jZmdfY21kID0gezB9OworCWJvb2wgYl9wb2xsaW5nX2JpdCA9IGZhbHNlOworCXUzMiBhcnlfaWR4ID0gMDsKKwl1OCB2YWx1ZSA9IDA7CisJdTMyIG9mZnNldCA9IDA7CisJdTMyIHBvbGxpbmdfY291bnQgPSAwOworCXUzMiBtYXhfcG9sbGluZ19jbnQgPSA1MDAwOworCisJZG8geworCQlwd3JfY2ZnX2NtZCA9IHB3cmNmZ2NtZFthcnlfaWR4XTsKKwkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJvZmZzZXQoJSN4KSwgY3V0X21zayglI3gpLCBmYWJfbXNrKCUjeCksIGludGVyZmFjZV9tc2soJSN4KSwgYmFzZSglI3gpLCBjbWQoJSN4KSwgbXNrKCUjeCksIHZhbHVlKCUjeClcbiIsCisJCQkgIEdFVF9QV1JfQ0ZHX09GRlNFVChwd3JfY2ZnX2NtZCksCisJCQkgIEdFVF9QV1JfQ0ZHX0NVVF9NQVNLKHB3cl9jZmdfY21kKSwKKwkJCSAgR0VUX1BXUl9DRkdfRkFCX01BU0socHdyX2NmZ19jbWQpLAorCQkJICBHRVRfUFdSX0NGR19JTlRGX01BU0socHdyX2NmZ19jbWQpLAorCQkJICBHRVRfUFdSX0NGR19CQVNFKHB3cl9jZmdfY21kKSwKKwkJCSAgR0VUX1BXUl9DRkdfQ01EKHB3cl9jZmdfY21kKSwKKwkJCSAgR0VUX1BXUl9DRkdfTUFTSyhwd3JfY2ZnX2NtZCksCisJCQkgIEdFVF9QV1JfQ0ZHX1ZBTFVFKHB3cl9jZmdfY21kKSkpOworCisJCWlmICgoR0VUX1BXUl9DRkdfRkFCX01BU0socHdyX2NmZ19jbWQpJmZhYl92ZXJzaW9uKSAmJgorCQkgICAgKEdFVF9QV1JfQ0ZHX0NVVF9NQVNLKHB3cl9jZmdfY21kKSZjdXRfdmVyc2lvbikgJiYKKwkJICAgIChHRVRfUFdSX0NGR19JTlRGX01BU0socHdyX2NmZ19jbWQpJmludGVyZmFjZV90eXBlKSkgeworCQkJc3dpdGNoIChHRVRfUFdSX0NGR19DTUQocHdyX2NmZ19jbWQpKSB7CisJCQljYXNlIFBXUl9DTURfUkVBRDoKKwkJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCQkJICgiUFdSX0NNRF9SRUFEXG4iKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUFdSX0NNRF9XUklURToKKwkJCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCQkJICgiUFdSX0NNRF9XUklURVxuIikpOworCQkJCW9mZnNldCA9IEdFVF9QV1JfQ0ZHX09GRlNFVChwd3JfY2ZnX2NtZCk7CisKKwkJCQkvKlJlYWQgdGhlIHZhbHVlIGZyb20gc3lzdGVtIHJlZ2lzdGVyKi8KKwkJCQl2YWx1ZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgb2Zmc2V0KTsKKwkJCQl2YWx1ZSAmPSAofihHRVRfUFdSX0NGR19NQVNLKHB3cl9jZmdfY21kKSkpOworCQkJCXZhbHVlIHw9IChHRVRfUFdSX0NGR19WQUxVRShwd3JfY2ZnX2NtZCkgJgorCQkJCQkgIEdFVF9QV1JfQ0ZHX01BU0socHdyX2NmZ19jbWQpKTsKKworCQkJCS8qV3JpdGUgdmFsdWUgYmFjayB0byBzeXRlbSByZWdpc3RlciovCisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgb2Zmc2V0LCB2YWx1ZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUFdSX0NNRF9QT0xMSU5HOgorCQkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJCQkgKCJQV1JfQ01EX1BPTExJTkdcbiIpKTsKKwkJCQliX3BvbGxpbmdfYml0ID0gZmFsc2U7CisJCQkJb2Zmc2V0ID0gR0VUX1BXUl9DRkdfT0ZGU0VUKHB3cl9jZmdfY21kKTsKKworCQkJCWRvIHsKKwkJCQkJdmFsdWUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIG9mZnNldCk7CisKKwkJCQkJdmFsdWUgJj0gR0VUX1BXUl9DRkdfTUFTSyhwd3JfY2ZnX2NtZCk7CisJCQkJCWlmICh2YWx1ZSA9PQorCQkJCQkgICAgKEdFVF9QV1JfQ0ZHX1ZBTFVFKHB3cl9jZmdfY21kKSAmCisJCQkJCSAgICAgR0VUX1BXUl9DRkdfTUFTSyhwd3JfY2ZnX2NtZCkpKQorCQkJCQkJYl9wb2xsaW5nX2JpdCA9IHRydWU7CisJCQkJCWVsc2UKKwkJCQkJCXVkZWxheSgxMCk7CisKKwkJCQkJaWYgKHBvbGxpbmdfY291bnQrKyA+IG1heF9wb2xsaW5nX2NudCkgeworCQkJCQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCQkJCQkgKCJwb2xsaW5nIGZhaWxcbiIpKTsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCX0gd2hpbGUgKCFiX3BvbGxpbmdfYml0KTsKKworCQkJCWJyZWFrOworCisJCQljYXNlIFBXUl9DTURfREVMQVk6CisJCQkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkJCSAoIlBXUl9DTURfREVMQVlcbiIpKTsKKwkJCQlpZiAoR0VUX1BXUl9DRkdfVkFMVUUocHdyX2NmZ19jbWQpID09CisJCQkJICAgIFBXUlNFUV9ERUxBWV9VUykKKwkJCQkJdWRlbGF5KEdFVF9QV1JfQ0ZHX09GRlNFVChwd3JfY2ZnX2NtZCkpOworCQkJCWVsc2UKKwkJCQkJbWRlbGF5KEdFVF9QV1JfQ0ZHX09GRlNFVChwd3JfY2ZnX2NtZCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBXUl9DTURfRU5EOgorCQkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJCQkgKCJQV1JfQ01EX0VORFxuIikpOworCQkJCXJldHVybiB0cnVlOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCVJUX0FTU0VSVChmYWxzZSwgKCJVbmtub3duIENNRCEhXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlhcnlfaWR4Kys7CisJfSB3aGlsZSAoMSk7CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9wd3JzZXFjbWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3B3cnNlcWNtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDBlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9wd3JzZXFjbWQuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9fUlRMOTJFX1BXUlNFUUNNRF9IX18KKyNkZWZpbmUgX19SVEw5MkVfUFdSU0VRQ01EX0hfXworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIHZhbHVlIG9mIGNtZDogNCBiaXRzICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCVBXUl9DTURfUkVBRAkJMHgwMAorI2RlZmluZSBQV1JfQ01EX1dSSVRFCQkweDAxCisjZGVmaW5lIFBXUl9DTURfUE9MTElORwkJMHgwMgorI2RlZmluZSBQV1JfQ01EX0RFTEFZCQkweDAzCisjZGVmaW5lIFBXUl9DTURfRU5ECQkweDA0CisKKy8qIGRlZmluZSB0aGUgYmFzZSBhZGRyZXNzIG9mIGVhY2ggYmxvY2sgKi8KKyNkZWZpbmUgUFdSX0JBU0VBRERSX01BQwkweDAwCisjZGVmaW5lIFBXUl9CQVNFQUREUl9VU0IJMHgwMQorI2RlZmluZSBQV1JfQkFTRUFERFJfUENJRQkweDAyCisjZGVmaW5lIFBXUl9CQVNFQUREUl9TRElPCTB4MDMKKworI2RlZmluZQlQV1JfSU5URl9TRElPX01TSwlCSVQoMCkKKyNkZWZpbmUJUFdSX0lOVEZfVVNCX01TSwlCSVQoMSkKKyNkZWZpbmUJUFdSX0lOVEZfUENJX01TSwlCSVQoMikKKyNkZWZpbmUJUFdSX0lOVEZfQUxMX01TSwkoQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpKQorCisjZGVmaW5lCVBXUl9GQUJfVFNNQ19NU0sJQklUKDApCisjZGVmaW5lCVBXUl9GQUJfVU1DX01TSwkJQklUKDEpCisjZGVmaW5lCVBXUl9GQUJfQUxMX01TSwkJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSkKKworI2RlZmluZQlQV1JfQ1VUX1RFU1RDSElQX01TSwlCSVQoMCkKKyNkZWZpbmUJUFdSX0NVVF9BX01TSwkJQklUKDEpCisjZGVmaW5lCVBXUl9DVVRfQl9NU0sJCUJJVCgyKQorI2RlZmluZQlQV1JfQ1VUX0NfTVNLCQlCSVQoMykKKyNkZWZpbmUJUFdSX0NVVF9EX01TSwkJQklUKDQpCisjZGVmaW5lCVBXUl9DVVRfRV9NU0sJCUJJVCg1KQorI2RlZmluZQlQV1JfQ1VUX0ZfTVNLCQlCSVQoNikKKyNkZWZpbmUJUFdSX0NVVF9HX01TSwkJQklUKDcpCisjZGVmaW5lCVBXUl9DVVRfQUxMX01TSwkJMHhGRgorCisKK2VudW0gcHdyc2VxX2RlbGF5X3VuaXQgeworCVBXUlNFUV9ERUxBWV9VUywKKwlQV1JTRVFfREVMQVlfTVMsCit9OworCitzdHJ1Y3Qgd2xhbl9wd3JfY2ZnIHsKKwl1MTYgb2Zmc2V0OworCXU4IGN1dF9tc2s7CisJdTggZmFiX21zazo0OworCXU4IGludGVyZmFjZV9tc2s6NDsKKwl1OCBiYXNlOjQ7CisJdTggY21kOjQ7CisJdTggbXNrOworCXU4IHZhbHVlOworfTsKKworI2RlZmluZQlHRVRfUFdSX0NGR19PRkZTRVQoX19QV1JfQ01EKQkJX19QV1JfQ01ELm9mZnNldAorI2RlZmluZQlHRVRfUFdSX0NGR19DVVRfTUFTSyhfX1BXUl9DTUQpCQlfX1BXUl9DTUQuY3V0X21zaworI2RlZmluZQlHRVRfUFdSX0NGR19GQUJfTUFTSyhfX1BXUl9DTUQpCQlfX1BXUl9DTUQuZmFiX21zaworI2RlZmluZQlHRVRfUFdSX0NGR19JTlRGX01BU0soX19QV1JfQ01EKQlfX1BXUl9DTUQuaW50ZXJmYWNlX21zaworI2RlZmluZQlHRVRfUFdSX0NGR19CQVNFKF9fUFdSX0NNRCkJCV9fUFdSX0NNRC5iYXNlCisjZGVmaW5lCUdFVF9QV1JfQ0ZHX0NNRChfX1BXUl9DTUQpCQlfX1BXUl9DTUQuY21kCisjZGVmaW5lCUdFVF9QV1JfQ0ZHX01BU0soX19QV1JfQ01EKQkJX19QV1JfQ01ELm1zaworI2RlZmluZQlHRVRfUFdSX0NGR19WQUxVRShfX1BXUl9DTUQpCQlfX1BXUl9DTUQudmFsdWUKKworYm9vbCBydGw5MmVfaGFsX3B3cnNlcWNtZHBhcnNpbmcoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1OCBjdXRfdmVyc2lvbiwKKwkJCSAgICAgIHU4IGZhYl92ZXJzaW9uLCB1OCBpbnRlcmZhY2VfdHlwZSwKKwkJCSAgICAgIHN0cnVjdCB3bGFuX3B3cl9jZmcgcHdyY2ZnY21kW10pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjMDc1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3JlZy5oCkBAIC0wLDAgKzEsMjI0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVEw5MkVfUkVHX0hfXworI2RlZmluZSBfX1JUTDkyRV9SRUdfSF9fCisKKyNkZWZpbmUgVFhQS1RfQlVGX1NFTEVDVAkJCTB4NjkKKyNkZWZpbmUgUlhQS1RfQlVGX1NFTEVDVAkJCTB4QTUKKyNkZWZpbmUgRElTQUJMRV9UUlhQS1RfQlVGX0FDQ0VTUwkJMHgwCisKKyNkZWZpbmUgUkVHX1NZU19JU09fQ1RSTAkJCTB4MDAwMAorI2RlZmluZSBSRUdfU1lTX0ZVTkNfRU4JCQkJMHgwMDAyCisjZGVmaW5lIFJFR19BUFNfRlNNQ08JCQkJMHgwMDA0CisjZGVmaW5lIFJFR19TWVNfQ0xLUgkJCQkweDAwMDgKKyNkZWZpbmUgUkVHXzkzNDZDUgkJCQkweDAwMEEKKyNkZWZpbmUgUkVHX0VFX1ZQRAkJCQkweDAwMEMKKyNkZWZpbmUgUkVHX1NZU19TV1JfQ1RSTDEJCQkweDAwMTAKKyNkZWZpbmUgUkVHX1NQUzBfQ1RSTAkJCQkweDAwMTEKKyNkZWZpbmUgUkVHX1NZU19TV1JfQ1RSTDIJCQkweDAwMTQKKyNkZWZpbmUgUkVHX1NZU19TV1JfQ1RSTDMJCQkweDAwMTgKKyNkZWZpbmUgUkVHX1JTVl9DVFJMCQkJCTB4MDAxQworI2RlZmluZSBSRUdfUkZfQ1RSTAkJCQkweDAwMUYKKyNkZWZpbmUgUkVHX0xQTERPX0NUUkwJCQkJMHgwMDIzCisjZGVmaW5lIFJFR19BRkVfQ1RSTDEJCQkJMHgwMDI0CisjZGVmaW5lIFJFR19BRkVfWFRBTF9DVFJMCQkJMHgwMDI0CisjZGVmaW5lIFJFR19BRkVfQ1RSTDIJCQkJMHgwMDI4CisjZGVmaW5lIFJFR19NQUNfUEhZX0NUUkwJCQkweDAwMmMKKyNkZWZpbmUgUkVHX0FGRV9DVFJMMwkJCQkweDAwMmMKKyNkZWZpbmUgUkVHX0VGVVNFX0NUUkwJCQkJMHgwMDMwCisjZGVmaW5lIFJFR19FRlVTRV9URVNUCQkJCTB4MDAzNAorI2RlZmluZSBSRUdfUFdSX0RBVEEJCQkJMHgwMDM4CisjZGVmaW5lIFJFR19DQUxfVElNRVIJCQkJMHgwMDNDCisjZGVmaW5lIFJFR19BQ0xLX01PTgkJCQkweDAwM0UKKyNkZWZpbmUgUkVHX0dQSU9fTVVYQ0ZHCQkJCTB4MDA0MAorI2RlZmluZSBSRUdfR1BJT19JT19TRUwJCQkJMHgwMDQyCisjZGVmaW5lIFJFR19NQUNfUElOTVVYX0NGRwkJCTB4MDA0MworI2RlZmluZSBSRUdfR1BJT19QSU5fQ1RSTAkJCTB4MDA0NAorI2RlZmluZSBSRUdfR1BJT19JTlRNCQkJCTB4MDA0OAorI2RlZmluZSBSRUdfTEVEQ0ZHMAkJCQkweDAwNEMKKyNkZWZpbmUgUkVHX0xFRENGRzEJCQkJMHgwMDRECisjZGVmaW5lIFJFR19MRURDRkcyCQkJCTB4MDA0RQorI2RlZmluZSBSRUdfTEVEQ0ZHMwkJCQkweDAwNEYKKyNkZWZpbmUgUkVHX0ZTSU1SCQkJCTB4MDA1MAorI2RlZmluZSBSRUdfRlNJU1IJCQkJMHgwMDU0CisjZGVmaW5lIFJFR19IU0lNUgkJCQkweDAwNTgKKyNkZWZpbmUgUkVHX0hTSVNSCQkJCTB4MDA1YworI2RlZmluZSBSRUdfU0RJT19DVFJMCQkJCTB4MDA3MAorI2RlZmluZSBSRUdfT1BUX0NUUkwJCQkJMHgwMDc0CisjZGVmaW5lIFJFR19HUElPX09VVFBVVAkJCQkweDAwNmMKKyNkZWZpbmUgUkVHX0FGRV9DVFJMNAkJCQkweDAwNzgKKyNkZWZpbmUgUkVHX01DVUZXREwJCQkJMHgwMDgwCisKKyNkZWZpbmUgUkVHX0hJTVIJCQkJMHgwMEIwCisjZGVmaW5lIFJFR19ISVNSCQkJCTB4MDBCNAorI2RlZmluZSBSRUdfSElNUkUJCQkJMHgwMEI4CisjZGVmaW5lIFJFR19ISVNSRQkJCQkweDAwQkMKKworI2RlZmluZSBSRUdfRUZVU0VfQUNDRVNTCQkJMHgwMENGCisjZGVmaW5lIFJFR19IUE9OX0ZTTQkJCQkweDAwRUMKKyNkZWZpbmUgUkVHX1NZU19DRkcxCQkJCTB4MDBGMAorI2RlZmluZSBSRUdfU1lTX0NGRzIJCQkJMHgwMEZDCisKKworI2RlZmluZSBSRUdfQ1IJCQkJCTB4MDEwMAorI2RlZmluZSBSRUdfUEJQCQkJCQkweDAxMDQKKyNkZWZpbmUgUkVHX1BLVF9CVUZGX0FDQ0VTU19DVFJMCQkweDAxMDYKKyNkZWZpbmUgUkVHX1RSWERNQV9DVFJMCQkJCTB4MDEwQworI2RlZmluZSBSRUdfVFJYRkZfQk5EWQkJCQkweDAxMTQKKyNkZWZpbmUgUkVHX1RSWEZGX1NUQVRVUwkJCTB4MDExOAorI2RlZmluZSBSRUdfUlhGRl9QVFIJCQkJMHgwMTFDCisKKyNkZWZpbmUgUkVHX0NQV00JCQkJMHgwMTJGCisjZGVmaW5lIFJFR19GV0lNUgkJCQkweDAxMzAKKyNkZWZpbmUgUkVHX0ZXSVNSCQkJCTB4MDEzNAorI2RlZmluZSBSRUdfUEtUQlVGX0RCR19DVFJMCQkJMHgwMTQwCisjZGVmaW5lIFJFR19SWFBLVEJVRl9DVFJMCQkJMHgwMTQyCisjZGVmaW5lIFJFR19QS1RCVUZfREJHX0RBVEFfTAkJCTB4MDE0NAorI2RlZmluZSBSRUdfUEtUQlVGX0RCR19EQVRBX0gJCQkweDAxNDgKKworI2RlZmluZSBSRUdfVEMwX0NUUkwJCQkJMHgwMTUwCisjZGVmaW5lIFJFR19UQzFfQ1RSTAkJCQkweDAxNTQKKyNkZWZpbmUgUkVHX1RDMl9DVFJMCQkJCTB4MDE1OAorI2RlZmluZSBSRUdfVEMzX0NUUkwJCQkJMHgwMTVDCisjZGVmaW5lIFJFR19UQzRfQ1RSTAkJCQkweDAxNjAKKyNkZWZpbmUgUkVHX1RDVU5JVF9CQVNFCQkJCTB4MDE2NAorI2RlZmluZSBSRUdfUlNWRDMJCQkJMHgwMTY4CisjZGVmaW5lIFJFR19DMkhFVlRfTVNHX05PUk1BTAkJCTB4MDFBMAorI2RlZmluZSBSRUdfQzJIRVZUX0NMRUFSCQkJMHgwMUFGCisjZGVmaW5lIFJFR19NQ1VUU1RfMQkJCQkweDAxYzAKKyNkZWZpbmUgUkVHX01DVVRTVF9XT1dMQU4JCQkweDAxQzcKKyNkZWZpbmUgUkVHX0ZNRVRIUgkJCQkweDAxQzgKKyNkZWZpbmUgUkVHX0hNRVRGUgkJCQkweDAxQ0MKKyNkZWZpbmUgUkVHX0hNRUJPWF8wCQkJCTB4MDFEMAorI2RlZmluZSBSRUdfSE1FQk9YXzEJCQkJMHgwMUQ0CisjZGVmaW5lIFJFR19ITUVCT1hfMgkJCQkweDAxRDgKKyNkZWZpbmUgUkVHX0hNRUJPWF8zCQkJCTB4MDFEQworCisjZGVmaW5lIFJFR19MTFRfSU5JVAkJCQkweDAxRTAKKworI2RlZmluZSBSRUdfSE1FQk9YX0VYVF8wCQkJMHgwMUYwCisjZGVmaW5lIFJFR19ITUVCT1hfRVhUXzEJCQkweDAxRjQKKyNkZWZpbmUgUkVHX0hNRUJPWF9FWFRfMgkJCTB4MDFGOAorI2RlZmluZSBSRUdfSE1FQk9YX0VYVF8zCQkJMHgwMUZDCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgkweDAyMDBoIH4gMHgwMjdGaAlUWERNQSBDb25maWd1cmF0aW9uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJFR19SUVBOCQkJCTB4MDIwMAorI2RlZmluZSBSRUdfRklGT1BBR0UJCQkJMHgwMjA0CisjZGVmaW5lIFJFR19EV0JDTjBfQ1RSTAkJCQkweDAyMDgKKyNkZWZpbmUgUkVHX1RYRE1BX09GRlNFVF9DSEsJCQkweDAyMEMKKyNkZWZpbmUgUkVHX1RYRE1BX1NUQVRVUwkJCTB4MDIxMAorI2RlZmluZSBSRUdfUlFQTl9OUFEJCQkJMHgwMjE0CisjZGVmaW5lIFJFR19BVVRPX0xMVAkJCQkweDAyMjQKKyNkZWZpbmUgUkVHX0RXQkNOMV9DVFJMCQkJCTB4MDIyOAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoJMHgwMjgwaCB+IDB4MDJGRmgJUlhETUEgQ29uZmlndXJhdGlvbgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBSRUdfUlhETUFfQUdHX1BHX1RICQkJMHgwMjgwCisjZGVmaW5lIFJFR19GV19VUERfUkRQVFIJCQkweDAyODQKKyNkZWZpbmUgUkVHX1JYRE1BX0NPTlRST0wJCQkweDAyODYKKyNkZWZpbmUgUkVHX1JYUEtUX05VTQkJCQkweDAyODcKKyNkZWZpbmUgUkVHX1JYRE1BX1NUQVRVUwkJCTB4MDI4OAorI2RlZmluZSBSRUdfUlhETUFfUFJPCQkJCTB4MDI5MAorI2RlZmluZSBSRUdfRUFSTFlfTU9ERV9DT05UUk9MCQkJMHgwMkJDCisjZGVmaW5lIFJFR19SU1ZENQkJCQkweDAyRjAKKyNkZWZpbmUgUkVHX1JTVkQ2CQkJCTB4MDJGNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoJMHgwMzAwaCB+IDB4MDNGRmgJUENJZQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQlSRUdfUENJRV9DVFJMX1JFRwkJCTB4MDMwMAorI2RlZmluZQlSRUdfSU5UX01JRwkJCQkweDAzMDQKKyNkZWZpbmUJUkVHX0JDTlFfREVTQQkJCQkweDAzMDgKKyNkZWZpbmUJUkVHX01HUV9ERVNBCQkJCTB4MDMxMAorI2RlZmluZQlSRUdfVk9RX0RFU0EJCQkJMHgwMzE4CisjZGVmaW5lCVJFR19WSVFfREVTQQkJCQkweDAzMjAKKyNkZWZpbmUJUkVHX0JFUV9ERVNBCQkJCTB4MDMyOAorI2RlZmluZQlSRUdfQktRX0RFU0EJCQkJMHgwMzMwCisjZGVmaW5lCVJFR19SWF9ERVNBCQkJCTB4MDMzOAorI2RlZmluZQlSRUdfSFEwX0RFU0EJCQkJMHgwMzQwCisjZGVmaW5lCVJFR19IUTFfREVTQQkJCQkweDAzNDgKKyNkZWZpbmUJUkVHX0hRMl9ERVNBCQkJCTB4MDM1MAorI2RlZmluZQlSRUdfSFEzX0RFU0EJCQkJMHgwMzU4CisjZGVmaW5lCVJFR19IUTRfREVTQQkJCQkweDAzNjAKKyNkZWZpbmUJUkVHX0hRNV9ERVNBCQkJCTB4MDM2OAorI2RlZmluZQlSRUdfSFE2X0RFU0EJCQkJMHgwMzcwCisjZGVmaW5lCVJFR19IUTdfREVTQQkJCQkweDAzNzgKKyNkZWZpbmUJUkVHX01HUV9UWEJEX05VTQkJCTB4MDM4MAorI2RlZmluZQlSRUdfUlhfUlhCRF9OVU0JCQkJMHgwMzgyCisjZGVmaW5lCVJFR19WT1FfVFhCRF9OVU0JCQkweDAzODQKKyNkZWZpbmUJUkVHX1ZJUV9UWEJEX05VTQkJCTB4MDM4NgorI2RlZmluZQlSRUdfQkVRX1RYQkRfTlVNCQkJMHgwMzg4CisjZGVmaW5lCVJFR19CS1FfVFhCRF9OVU0JCQkweDAzOEEKKyNkZWZpbmUJUkVHX0hJMFFfVFhCRF9OVU0JCQkweDAzOEMKKyNkZWZpbmUJUkVHX0hJMVFfVFhCRF9OVU0JCQkweDAzOEUKKyNkZWZpbmUJUkVHX0hJMlFfVFhCRF9OVU0JCQkweDAzOTAKKyNkZWZpbmUJUkVHX0hJM1FfVFhCRF9OVU0JCQkweDAzOTIKKyNkZWZpbmUJUkVHX0hJNFFfVFhCRF9OVU0JCQkweDAzOTQKKyNkZWZpbmUJUkVHX0hJNVFfVFhCRF9OVU0JCQkweDAzOTYKKyNkZWZpbmUJUkVHX0hJNlFfVFhCRF9OVU0JCQkweDAzOTgKKyNkZWZpbmUJUkVHX0hJN1FfVFhCRF9OVU0JCQkweDAzOUEKKyNkZWZpbmUJUkVHX1RTRlRJTUVSX0hDSQkJCTB4MDM5QworLypSZWFkIFdyaXRlIFBvaW50Ki8KKyNkZWZpbmUJUkVHX1ZPUV9UWEJEX0lEWAkJCTB4MDNBMAorI2RlZmluZQlSRUdfVklRX1RYQkRfSURYCQkJMHgwM0E0CisjZGVmaW5lCVJFR19CRVFfVFhCRF9JRFgJCQkweDAzQTgKKyNkZWZpbmUJUkVHX0JLUV9UWEJEX0lEWAkJCTB4MDNBQworI2RlZmluZQlSRUdfTUdRX1RYQkRfSURYCQkJMHgwM0IwCisjZGVmaW5lCVJFR19SWFFfVFhCRF9JRFgJCQkweDAzQjQKKworI2RlZmluZQlSRUdfSEkwUV9UWEJEX0lEWAkJCTB4MDNCOAorI2RlZmluZQlSRUdfSEkxUV9UWEJEX0lEWAkJCTB4MDNCQworI2RlZmluZQlSRUdfSEkyUV9UWEJEX0lEWAkJCTB4MDNDMAorI2RlZmluZQlSRUdfSEkzUV9UWEJEX0lEWAkJCTB4MDNDNAorCisjZGVmaW5lCVJFR19ISTRRX1RYQkRfSURYCQkJMHgwM0M4CisjZGVmaW5lCVJFR19ISTVRX1RYQkRfSURYCQkJMHgwM0NDCisjZGVmaW5lCVJFR19ISTZRX1RYQkRfSURYCQkJMHgwM0QwCisjZGVmaW5lCVJFR19ISTdRX1RYQkRfSURYCQkJMHgwM0Q0CisjZGVmaW5lCVJFR19QQ0lFX0hDUFdNCQkJCTB4MDNEOAorI2RlZmluZQlSRUdfUENJRV9DVFJMMgkJCQkweDAzREIKKyNkZWZpbmUJUkVHX1BDSUVfSFJQV00JCQkJMHgwM0RDCisjZGVmaW5lCVJFR19IMkNfTVNHX0RSVjJGV19JTkZPCQkJMHgwM0UwCisjZGVmaW5lCVJFR19QQ0lFX0MySF9NU0dfUkVRVUVTVAkJMHgwM0U0CisjZGVmaW5lCVJFR19CQUNLRE9PUl9EQklfV0RBVEEJCQkweDAzRTgKKyNkZWZpbmUJUkVHX0JBQ0tET09SX0RCSV9SREFUQQkJCTB4MDNFQworI2RlZmluZQlSRUdfQkFDS0RPT1JfREJJX0RBVEEJCQkweDAzRjAKKyNkZWZpbmUJUkVHX01ESU8JCQkJMHgwM0Y0CisjZGVmaW5lCVJFR19NRElPX0RBVEEJCQkJMHgwM0Y4CisKKyNkZWZpbmUJUkVHX0hEQVFfREVTQV9OT0RFRgkJCTB4MDAwMAorI2RlZmluZQlSRUdfQ01EUV9ERVNBX05PREVGCQkJMHgwMDAwCisvKiBzcGVjIHZlcnNpb24gMTEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgkweDA0MDBoIH4gMHgwNDdGaAlQcm90b2NvbCBDb25maWd1cmF0aW9uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJFR19WT1FfSU5GT1JNQVRJT04JCQkweDA0MDAKKyNkZWZpbmUgUkVHX1ZJUV9JTkZPUk1BVElPTgkJCTB4MDQwNAorI2RlZmluZSBSRUdfQkVRX0lORk9STUFUSU9OCQkJMHgwNDA4CisjZGVmaW5lIFJFR19CS1FfSU5GT1JNQVRJT04JCQkweDA0MEMKKyNkZWZpbmUgUkVHX01HUV9JTkZPUk1BVElPTgkJCTB4MDQxMAorI2RlZmluZSBSRUdfSEdRX0lORk9STUFUSU9OCQkJMHgwNDE0CisjZGVmaW5lIFJFR19CQ05RX0lORk9STUFUSU9OCQkJMHgwNDE4CisjZGVmaW5lIFJFR19UWFBLVF9FTVBUWQkJCQkweDA0MUEKKworCisjZGVmaW5lIFJFR19GV0hXX1RYUV9DVFJMCQkJMHgwNDIwCisjZGVmaW5lIFJFR19IV1NFUV9DVFJMCQkJCTB4MDQyMworI2RlZmluZSBSRUdfQkNOUV9CRE5ZCQkJCTB4MDQyNAorI2RlZmluZSBSRUdfTUdRX0JETlkJCQkJMHgwNDI1CisjZGVmaW5lIFJFR19MSUZFQ1RSTF9DVFJMCQkJMHgwNDI2CisjZGVmaW5lIFJFR19NVUxUSV9CQ05RX09GRlNFVAkJCTB4MDQyNworI2RlZmluZSBSRUdfU1BFQ19TSUZTCQkJCTB4MDQyOAorI2RlZmluZSBSRUdfUkVUUllfTElNSVQJCQkJMHgwNDJBCisjZGVmaW5lIFJFR19UWEJGX0NUUkwJCQkJMHgwNDJDCisjZGVmaW5lIFJFR19EQVJGUkMJCQkJMHgwNDMwCisjZGVmaW5lIFJFR19SQVJGUkMJCQkJMHgwNDM4CisjZGVmaW5lIFJFR19SUlNSCQkJCTB4MDQ0MAorI2RlZmluZSBSRUdfQVJGUjAJCQkJMHgwNDQ0CisjZGVmaW5lIFJFR19BUkZSMQkJCQkweDA0NEMKKyNkZWZpbmUgUkVHX0FNUERVX01BWF9USU1FCQkJMHgwNDU2CisjZGVmaW5lIFJFR19CQ05RMV9CRE5ZCQkJCTB4MDQ1NworI2RlZmluZSBSRUdfQUdHTEVOX0xNVAkJCQkweDA0NTgKKyNkZWZpbmUgUkVHX0FNUERVX01JTl9TUEFDRQkJCTB4MDQ1QworI2RlZmluZSBSRUdfVFhQS1RCVUZfV01BQ19MQktfQkZfSEQJCTB4MDQ1RAorI2RlZmluZSBSRUdfTkRQQV9PUFRfQ1RSTAkJCTB4MDQ1RgorI2RlZmluZSBSRUdfRkFTVF9FRENBX0NUUkwJCQkweDA0NjAKKyNkZWZpbmUgUkVHX1JEX1JFU1BfUEtUX1RICQkJMHgwNDYzCisjZGVmaW5lIFJFR19QT1dFUl9TVEFHRTEJCQkweDA0QjQKKyNkZWZpbmUgUkVHX1BPV0VSX1NUQUdFMgkJCTB4MDRCOAorI2RlZmluZSBSRUdfQU1QRFVfQlVSU1RfTU9ERQkJCTB4MDRCQworI2RlZmluZSBSRUdfUEtUX1ZPX1ZJX0xJRkVfVElNRQkJCTB4MDRDMAorI2RlZmluZSBSRUdfUEtUX0JFX0JLX0xJRkVfVElNRQkJCTB4MDRDMgorI2RlZmluZSBSRUdfU1RCQ19TRVRUSU5HCQkJMHgwNEM0CisjZGVmaW5lIFJFR19QUk9UX01PREVfQ1RSTAkJCTB4MDRDOAorI2RlZmluZSBSRUdfTUFYX0FHR1JfTlVNCQkJMHgwNENBCisjZGVmaW5lIFJFR19SVFNfTUFYX0FHR1JfTlVNCQkJMHgwNENCCisjZGVmaW5lIFJFR19CQVJfTU9ERV9DVFJMCQkJMHgwNENDCisjZGVmaW5lIFJFR19SQV9UUllfUkFURV9BR0dfTE1UCQkJMHgwNENGCisjZGVmaW5lIFJFR19NQUNJRF9QS1RfRFJPUDAJCQkweDA0RDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqCTB4MDUwMGggfiAweDA1RkZoCUVEQ0EgQ29uZmlndXJhdGlvbgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBSRUdfRURDQV9WT19QQVJBTQkJCTB4MDUwMAorI2RlZmluZSBSRUdfRURDQV9WSV9QQVJBTQkJCTB4MDUwNAorI2RlZmluZSBSRUdfRURDQV9CRV9QQVJBTQkJCTB4MDUwOAorI2RlZmluZSBSRUdfRURDQV9CS19QQVJBTQkJCTB4MDUwQworI2RlZmluZSBSRUdfQkNOVENGRwkJCQkweDA1MTAKKyNkZWZpbmUgUkVHX1BJRlMJCQkJMHgwNTEyCisjZGVmaW5lIFJFR19SREdfUElGUwkJCQkweDA1MTMKKyNkZWZpbmUgUkVHX1NJRlNfQ1RYCQkJCTB4MDUxNAorI2RlZmluZSBSRUdfU0lGU19UUlgJCQkJMHgwNTE2CisjZGVmaW5lIFJFR19BR0dSX0JSRUFLX1RJTUUJCQkweDA1MUEKKyNkZWZpbmUgUkVHX1NMT1QJCQkJMHgwNTFCCisjZGVmaW5lIFJFR19UWF9QVENMX0NUUkwJCQkweDA1MjAKKyNkZWZpbmUgUkVHX1RYUEFVU0UJCQkJMHgwNTIyCisjZGVmaW5lIFJFR19ESVNfVFhSRVFfQ0xSCQkJMHgwNTIzCisjZGVmaW5lIFJFR19SRF9DVFJMCQkJCTB4MDUyNAorCisjZGVmaW5lIFJFR19UQlRUX1BST0hJQklUCQkJMHgwNTQwCisjZGVmaW5lIFJFR19SRF9OQVZfTlhUCQkJCTB4MDU0NAorI2RlZmluZSBSRUdfTkFWX1BST1RfTEVOCQkJMHgwNTQ2CisjZGVmaW5lIFJFR19CQ05fQ1RSTAkJCQkweDA1NTAKKyNkZWZpbmUgUkVHX0JDTl9DVFJMXzEJCQkJMHgwNTUxCisjZGVmaW5lIFJFR19NQklEX05VTQkJCQkweDA1NTIKKyNkZWZpbmUgUkVHX0RVQUxfVFNGX1JTVAkJCTB4MDU1MworI2RlZmluZSBSRUdfQkNOX0lOVEVSVkFMCQkJMHgwNTU0CisjZGVmaW5lIFJFR19EUlZFUkxZSU5UCQkJCTB4MDU1OAorI2RlZmluZSBSRUdfQkNORE1BVElNCQkJCTB4MDU1OQorI2RlZmluZSBSRUdfQVRJTVdORAkJCQkweDA1NUEKKyNkZWZpbmUgUkVHX0JDTl9NQVhfRVJSCQkJCTB4MDU1RAorI2RlZmluZSBSRUdfUlhUU0ZfT0ZGU0VUX0NDSwkJCTB4MDU1RQorI2RlZmluZSBSRUdfUlhUU0ZfT0ZGU0VUX09GRE0JCQkweDA1NUYKKyNkZWZpbmUgUkVHX1RTRlRSCQkJCTB4MDU2MAorI2RlZmluZSBSRUdfQ1RXTkQJCQkJMHgwNTcyCisjZGVmaW5lIFJFR19QU1RJTUVSCQkJCTB4MDU4MAorI2RlZmluZSBSRUdfVElNRVIwCQkJCTB4MDU4NAorI2RlZmluZSBSRUdfVElNRVIxCQkJCTB4MDU4OAorI2RlZmluZSBSRUdfQkNOX1BSRURMX0lUVgkJCTB4MDU4RgorI2RlZmluZSBSRUdfQUNNSFdDVFJMCQkJCTB4MDVDMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoJMHgwNjAwaCB+IDB4MDdGRmgJV01BQyBDb25maWd1cmF0aW9uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJFR19NQUNfQ1IJCQkJMHgwNjAwCisjZGVmaW5lIFJFR19CV09QTU9ERQkJCQkweDA2MDMKKyNkZWZpbmUgUkVHX1RDUgkJCQkJMHgwNjA0CisjZGVmaW5lIFJFR19SQ1IJCQkJCTB4MDYwOAorI2RlZmluZSBSRUdfUlhfUEtUX0xJTUlUCQkJMHgwNjBDCisjZGVmaW5lIFJFR19SWF9ETEtfVElNRQkJCQkweDA2MEQKKyNkZWZpbmUgUkVHX1JYX0RSVklORk9fU1oJCQkweDA2MEYKKworI2RlZmluZSBSRUdfTUFDSUQJCQkJMHgwNjEwCisjZGVmaW5lIFJFR19CU1NJRAkJCQkweDA2MTgKKyNkZWZpbmUgUkVHX01BUgkJCQkJMHgwNjIwCisjZGVmaW5lIFJFR19NQklEQ0FNQ0ZHCQkJCTB4MDYyOAorCisjZGVmaW5lIFJFR19VU1RJTUVfRURDQQkJCQkweDA2MzgKKyNkZWZpbmUgUkVHX01BQ19TUEVDX1NJRlMJCQkweDA2M0EKKyNkZWZpbmUgUkVHX1JFU1BfU0lGU19DQ0sJCQkweDA2M0MKKyNkZWZpbmUgUkVHX1JFU1BfU0lGU19PRkRNCQkJMHgwNjNFCisjZGVmaW5lIFJFR19BQ0tUTwkJCQkweDA2NDAKKyNkZWZpbmUgUkVHX0NUUzJUTwkJCQkweDA2NDEKKyNkZWZpbmUgUkVHX0VJRlMJCQkJMHgwNjQyCisKKyNkZWZpbmUJUkVHX05BVl9VUFBFUgkJCQkweDA2NTIKKworLyogU2VjdXJpdHkqLworI2RlZmluZSBSRUdfQ0FNQ01ECQkJCTB4MDY3MAorI2RlZmluZSBSRUdfQ0FNV1JJVEUJCQkJMHgwNjc0CisjZGVmaW5lIFJFR19DQU1SRUFECQkJCTB4MDY3OAorI2RlZmluZSBSRUdfQ0FNREJHCQkJCTB4MDY3QworI2RlZmluZSBSRUdfU0VDQ0ZHCQkJCTB4MDY4MAorCisvKiBQb3dlciovCisjZGVmaW5lIFJFR19XT1dfQ1RSTAkJCQkweDA2OTAKKyNkZWZpbmUgUkVHX1BTX1JYX0lORk8JCQkJMHgwNjkyCisjZGVmaW5lIFJFR19VQVBTRF9USUQJCQkJMHgwNjkzCisjZGVmaW5lIFJFR19XS0ZNQ0FNX05VTQkJCQkweDA2OTgKKyNkZWZpbmUgUkVHX1dLRk1DQU1fUldECQkJCTB4MDY5QworI2RlZmluZSBSRUdfUlhGTFRNQVAwCQkJCTB4MDZBMAorI2RlZmluZSBSRUdfUlhGTFRNQVAxCQkJCTB4MDZBMgorI2RlZmluZSBSRUdfUlhGTFRNQVAyCQkJCTB4MDZBNAorI2RlZmluZSBSRUdfQkNOX1BTUl9SUFQJCQkJMHgwNkE4CisjZGVmaW5lIFJFR19CVF9DT0VYX1RBQkxFCQkJMHgwNkMwCisjZGVmaW5lIFJFR19CRk1FUjBfSU5GTwkJCQkweDA2RTQKKyNkZWZpbmUgUkVHX0JGTUVSMV9JTkZPCQkJCTB4MDZFQworI2RlZmluZSBSRUdfQ1NJX1JQVF9QQVJBTV9CVzIwCQkJMHgwNkY0CisjZGVmaW5lIFJFR19DU0lfUlBUX1BBUkFNX0JXNDAJCQkweDA2RjgKKyNkZWZpbmUgUkVHX0NTSV9SUFRfUEFSQU1fQlc4MAkJCTB4MDZGQworLyogSGFyZHdhcmUgUG9ydCAyKi8KKyNkZWZpbmUgUkVHX01BQ0lEMQkJCQkweDA3MDAKKyNkZWZpbmUgUkVHX0JTU0lEMQkJCQkweDA3MDgKKyNkZWZpbmUgUkVHX0JGTUVFX1NFTAkJCQkweDA3MTQKKyNkZWZpbmUgUkVHX1NORF9QVENMX0NUUkwJCQkweDA3MTgKKworCisjZGVmaW5lCUNSOTM0NgkJCQkJUkVHXzkzNDZDUgorI2RlZmluZQlNU1IJCQkJCShSRUdfQ1IgKyAyKQorI2RlZmluZQlJU1IJCQkJCVJFR19ISVNSCisjZGVmaW5lCVRTRlIJCQkJCVJFR19UU0ZUUgorCisjZGVmaW5lCU1BQ0lEUjAJCQkJCVJFR19NQUNJRAorI2RlZmluZQlNQUNJRFI0CQkJCQkoUkVHX01BQ0lEICsgNCkKKworI2RlZmluZSBQQlAJCQkJCVJFR19QQlAKKworI2RlZmluZQlJRFIwCQkJCQlNQUNJRFIwCisjZGVmaW5lCUlEUjQJCQkJCU1BQ0lEUjQKKworI2RlZmluZQlVTlVTRURfUkVHSVNURVIJCQkJMHgxQkYKKyNkZWZpbmUJRENBTQkJCQkJVU5VU0VEX1JFR0lTVEVSCisjZGVmaW5lCVBTUgkJCQkJVU5VU0VEX1JFR0lTVEVSCisjZGVmaW5lIEJCQUREUgkJCQkJVU5VU0VEX1JFR0lTVEVSCisjZGVmaW5lCVBIWURBVEFSCQkJCVVOVVNFRF9SRUdJU1RFUgorCisjZGVmaW5lCUlOVkFMSURfQkJSRl9WQUxVRQkJCTB4MTIzNDU2NzgKKworI2RlZmluZQlNQVhfTVNTX0RFTlNJVFlfMlQJCQkweDEzCisjZGVmaW5lCU1BWF9NU1NfREVOU0lUWV8xVAkJCTB4MEEKKworI2RlZmluZQlDTURFRVBST01fRU4JCQkJQklUKDUpCisjZGVmaW5lCUNNREVFUFJPTV9TRUwJCQkJQklUKDQpCisjZGVmaW5lCUNNRDkzNDZDUl85MzU2U0VMCQkJQklUKDQpCisjZGVmaW5lCUFVVE9MT0FEX0VFUFJPTQkJCQkoQ01ERUVQUk9NX0VOIHwgQ01ERUVQUk9NX1NFTCkKKyNkZWZpbmUJQVVUT0xPQURfRUZVU0UJCQkJQ01ERUVQUk9NX0VOCisKKyNkZWZpbmUJR1BJT1NFTF9HUElPCQkJCTAKKyNkZWZpbmUJR1BJT1NFTF9FTkJUCQkJCUJJVCg1KQorCisjZGVmaW5lCUdQSU9fSU4JCQkJCVJFR19HUElPX1BJTl9DVFJMCisjZGVmaW5lCUdQSU9fT1VUCQkJCShSRUdfR1BJT19QSU5fQ1RSTCArIDEpCisjZGVmaW5lCUdQSU9fSU9fU0VMCQkJCShSRUdfR1BJT19QSU5fQ1RSTCArIDIpCisjZGVmaW5lCUdQSU9fTU9ECQkJCShSRUdfR1BJT19QSU5fQ1RSTCArIDMpCisKKyNkZWZpbmUJTVNSX05PTElOSwkJCQkweDAwCisjZGVmaW5lCU1TUl9BREhPQwkJCQkweDAxCisjZGVmaW5lCU1TUl9JTkZSQQkJCQkweDAyCisjZGVmaW5lCU1TUl9BUAkJCQkJMHgwMworCisjZGVmaW5lCVJSU1JfUlNDX09GRlNFVAkJCQkyMQorI2RlZmluZQlSUlNSX1NIT1JUX09GRlNFVAkJCTIzCisjZGVmaW5lCVJSU1JfUlNDX0JXXzQwTQkJCQkweDYwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19VUFNVQkNITkwJCQkweDQwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19MT1dTVUJDSE5MCQkJMHgyMDAwMDAKKyNkZWZpbmUJUlJTUl9TSE9SVAkJCQkweDgwMDAwMAorI2RlZmluZQlSUlNSXzFNCQkJCQlCSVQoMCkKKyNkZWZpbmUJUlJTUl8yTQkJCQkJQklUKDEpCisjZGVmaW5lCVJSU1JfNV81TQkJCQlCSVQoMikKKyNkZWZpbmUJUlJTUl8xMU0JCQkJQklUKDMpCisjZGVmaW5lCVJSU1JfNk0JCQkJCUJJVCg0KQorI2RlZmluZQlSUlNSXzlNCQkJCQlCSVQoNSkKKyNkZWZpbmUJUlJTUl8xMk0JCQkJQklUKDYpCisjZGVmaW5lCVJSU1JfMThNCQkJCUJJVCg3KQorI2RlZmluZQlSUlNSXzI0TQkJCQlCSVQoOCkKKyNkZWZpbmUJUlJTUl8zNk0JCQkJQklUKDkpCisjZGVmaW5lCVJSU1JfNDhNCQkJCUJJVCgxMCkKKyNkZWZpbmUJUlJTUl81NE0JCQkJQklUKDExKQorI2RlZmluZQlSUlNSX01DUzAJCQkJQklUKDEyKQorI2RlZmluZQlSUlNSX01DUzEJCQkJQklUKDEzKQorI2RlZmluZQlSUlNSX01DUzIJCQkJQklUKDE0KQorI2RlZmluZQlSUlNSX01DUzMJCQkJQklUKDE1KQorI2RlZmluZQlSUlNSX01DUzQJCQkJQklUKDE2KQorI2RlZmluZQlSUlNSX01DUzUJCQkJQklUKDE3KQorI2RlZmluZQlSUlNSX01DUzYJCQkJQklUKDE4KQorI2RlZmluZQlSUlNSX01DUzcJCQkJQklUKDE5KQorI2RlZmluZQlCUlNSX0FDS1NIT1JUUE1CCQkJQklUKDIzKQorCisjZGVmaW5lCVJBVFJfMU0JCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUkFUUl8yTQkJCQkJMHgwMDAwMDAwMgorI2RlZmluZQlSQVRSXzU1TQkJCQkweDAwMDAwMDA0CisjZGVmaW5lCVJBVFJfMTFNCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUJUkFUUl82TQkJCQkJMHgwMDAwMDAxMAorI2RlZmluZQlSQVRSXzlNCQkJCQkweDAwMDAwMDIwCisjZGVmaW5lCVJBVFJfMTJNCQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUkFUUl8xOE0JCQkJMHgwMDAwMDA4MAorI2RlZmluZQlSQVRSXzI0TQkJCQkweDAwMDAwMTAwCisjZGVmaW5lCVJBVFJfMzZNCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJUkFUUl80OE0JCQkJMHgwMDAwMDQwMAorI2RlZmluZQlSQVRSXzU0TQkJCQkweDAwMDAwODAwCisjZGVmaW5lCVJBVFJfTUNTMAkJCQkweDAwMDAxMDAwCisjZGVmaW5lCVJBVFJfTUNTMQkJCQkweDAwMDAyMDAwCisjZGVmaW5lCVJBVFJfTUNTMgkJCQkweDAwMDA0MDAwCisjZGVmaW5lCVJBVFJfTUNTMwkJCQkweDAwMDA4MDAwCisjZGVmaW5lCVJBVFJfTUNTNAkJCQkweDAwMDEwMDAwCisjZGVmaW5lCVJBVFJfTUNTNQkJCQkweDAwMDIwMDAwCisjZGVmaW5lCVJBVFJfTUNTNgkJCQkweDAwMDQwMDAwCisjZGVmaW5lCVJBVFJfTUNTNwkJCQkweDAwMDgwMDAwCisjZGVmaW5lCVJBVFJfTUNTOAkJCQkweDAwMTAwMDAwCisjZGVmaW5lCVJBVFJfTUNTOQkJCQkweDAwMjAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTAJCQkJMHgwMDQwMDAwMAorI2RlZmluZQlSQVRSX01DUzExCQkJCTB4MDA4MDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxMgkJCQkweDAxMDAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTMJCQkJMHgwMjAwMDAwMAorI2RlZmluZQlSQVRSX01DUzE0CQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxNQkJCQkweDA4MDAwMDAwCisKKyNkZWZpbmUgUkFURV8xTQkJCQkJQklUKDApCisjZGVmaW5lIFJBVEVfMk0JCQkJCUJJVCgxKQorI2RlZmluZSBSQVRFXzVfNU0JCQkJQklUKDIpCisjZGVmaW5lIFJBVEVfMTFNCQkJCUJJVCgzKQorI2RlZmluZSBSQVRFXzZNCQkJCQlCSVQoNCkKKyNkZWZpbmUgUkFURV85TQkJCQkJQklUKDUpCisjZGVmaW5lIFJBVEVfMTJNCQkJCUJJVCg2KQorI2RlZmluZSBSQVRFXzE4TQkJCQlCSVQoNykKKyNkZWZpbmUgUkFURV8yNE0JCQkJQklUKDgpCisjZGVmaW5lIFJBVEVfMzZNCQkJCUJJVCg5KQorI2RlZmluZSBSQVRFXzQ4TQkJCQlCSVQoMTApCisjZGVmaW5lIFJBVEVfNTRNCQkJCUJJVCgxMSkKKyNkZWZpbmUgUkFURV9NQ1MwCQkJCUJJVCgxMikKKyNkZWZpbmUgUkFURV9NQ1MxCQkJCUJJVCgxMykKKyNkZWZpbmUgUkFURV9NQ1MyCQkJCUJJVCgxNCkKKyNkZWZpbmUgUkFURV9NQ1MzCQkJCUJJVCgxNSkKKyNkZWZpbmUgUkFURV9NQ1M0CQkJCUJJVCgxNikKKyNkZWZpbmUgUkFURV9NQ1M1CQkJCUJJVCgxNykKKyNkZWZpbmUgUkFURV9NQ1M2CQkJCUJJVCgxOCkKKyNkZWZpbmUgUkFURV9NQ1M3CQkJCUJJVCgxOSkKKyNkZWZpbmUgUkFURV9NQ1M4CQkJCUJJVCgyMCkKKyNkZWZpbmUgUkFURV9NQ1M5CQkJCUJJVCgyMSkKKyNkZWZpbmUgUkFURV9NQ1MxMAkJCQlCSVQoMjIpCisjZGVmaW5lIFJBVEVfTUNTMTEJCQkJQklUKDIzKQorI2RlZmluZSBSQVRFX01DUzEyCQkJCUJJVCgyNCkKKyNkZWZpbmUgUkFURV9NQ1MxMwkJCQlCSVQoMjUpCisjZGVmaW5lIFJBVEVfTUNTMTQJCQkJQklUKDI2KQorI2RlZmluZSBSQVRFX01DUzE1CQkJCUJJVCgyNykKKworI2RlZmluZQlSQVRFX0FMTF9DQ0sJCShSQVRSXzFNIHwgUkFUUl8yTSB8IFJBVFJfNTVNIHwgUkFUUl8xMU0pCisjZGVmaW5lCVJBVEVfQUxMX09GRE1fQUcJKFJBVFJfNk0gfCBSQVRSXzlNIHwgUkFUUl8xMk0gfCBSQVRSXzE4TSB8XAorCQkJCSBSQVRSXzI0TSB8IFJBVFJfMzZNIHwgUkFUUl80OE0gfCBSQVRSXzU0TSkKKyNkZWZpbmUJUkFURV9BTExfT0ZETV8xU1MJKFJBVFJfTUNTMCB8IFJBVFJfTUNTMSB8IFJBVFJfTUNTMiB8XAorCQkJCSBSQVRSX01DUzMgfCBSQVRSX01DUzQgfCBSQVRSX01DUzUgfFwKKwkJCQkgUkFUUl9NQ1M2IHwgUkFUUl9NQ1M3KQorI2RlZmluZQlSQVRFX0FMTF9PRkRNXzJTUwkoUkFUUl9NQ1M4IHwgUkFUUl9NQ1M5IHwgUkFUUl9NQ1MxMCB8XAorCQkJCSBSQVRSX01DUzExIHwgUkFUUl9NQ1MxMiB8IFJBVFJfTUNTMTMgfFwKKwkJCQkgUkFUUl9NQ1MxNCB8IFJBVFJfTUNTMTUpCisKKyNkZWZpbmUJQldfT1BNT0RFXzIwTUhaCQkJCUJJVCgyKQorI2RlZmluZQlCV19PUE1PREVfNUcJCQkJQklUKDEpCisjZGVmaW5lCUNBTV9WQUxJRAkJCQlCSVQoMTUpCisjZGVmaW5lCUNBTV9OT1RWQUxJRAkJCQkweDAwMDAKKyNkZWZpbmUJQ0FNX1VTRURLCQkJCUJJVCg1KQorCisjZGVmaW5lCUNBTV9OT05FCQkJCTB4MAorI2RlZmluZQlDQU1fV0VQNDAJCQkJMHgwMQorI2RlZmluZQlDQU1fVEtJUAkJCQkweDAyCisjZGVmaW5lCUNBTV9BRVMJCQkJCTB4MDQKKyNkZWZpbmUJQ0FNX1dFUDEwNAkJCQkweDA1CisKKyNkZWZpbmUJVE9UQUxfQ0FNX0VOVFJZCQkJCTMyCisjZGVmaW5lCUhBTEZfQ0FNX0VOVFJZCQkJCTE2CisKKyNkZWZpbmUJQ0FNX1dSSVRFCQkJCUJJVCgxNikKKyNkZWZpbmUJQ0FNX1JFQUQJCQkJMHgwMDAwMDAwMAorI2RlZmluZQlDQU1fUE9MTElOSUcJCQkJQklUKDMxKQorCisjZGVmaW5lCVNDUl9VU0VESwkJCQkweDAxCisjZGVmaW5lCVNDUl9UWFNFQ19FTkFCTEUJCQkweDAyCisjZGVmaW5lCVNDUl9SWFNFQ19FTkFCTEUJCQkweDA0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICA4MTkyRUUgSU1SL0lTUiBiaXRzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZQlJTVJfRElTQUJMRUQJCQkJMHgwCisvKiBJTVIgRFcwKDB4MDA2MC0wMDYzKSBCaXQgMC0zMSAqLworI2RlZmluZQlJTVJfVElNRVIyCQkJCUJJVCgzMSkKKyNkZWZpbmUJSU1SX1RJTUVSMQkJCQlCSVQoMzApCisjZGVmaW5lCUlNUl9QU1RJTUVPVVQJCQkJQklUKDI5KQorI2RlZmluZQlJTVJfR1RJTlQ0CQkJCUJJVCgyOCkKKyNkZWZpbmUJSU1SX0dUSU5UMwkJCQlCSVQoMjcpCisjZGVmaW5lCUlNUl9UQkRFUgkJCQlCSVQoMjYpCisjZGVmaW5lCUlNUl9UQkRPSwkJCQlCSVQoMjUpCisjZGVmaW5lCUlNUl9UU0ZfQklUMzJfVE9HR0xFCQkJQklUKDI0KQorI2RlZmluZQlJTVJfQkNORE1BSU5UMAkJCQlCSVQoMjApCisjZGVmaW5lCUlNUl9CQ05ET0swCQkJCUJJVCgxNikKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVF9FCQkJCUJJVCgxNCkKKyNkZWZpbmUJSU1SX0FUSU1FTkQJCQkJQklUKDEyKQorI2RlZmluZQlJTVJfSElTUjFfSU5EX0lOVAkJCUJJVCgxMSkKKyNkZWZpbmUJSU1SX0MySENNRAkJCQlCSVQoMTApCisjZGVmaW5lCUlNUl9DUFdNMgkJCQlCSVQoOSkKKyNkZWZpbmUJSU1SX0NQV00JCQkJQklUKDgpCisjZGVmaW5lCUlNUl9ISUdIRE9LCQkJCUJJVCg3KQorI2RlZmluZQlJTVJfTUdOVERPSwkJCQlCSVQoNikKKyNkZWZpbmUJSU1SX0JLRE9LCQkJCUJJVCg1KQorI2RlZmluZQlJTVJfQkVET0sJCQkJQklUKDQpCisjZGVmaW5lCUlNUl9WSURPSwkJCQlCSVQoMykKKyNkZWZpbmUJSU1SX1ZPRE9LCQkJCUJJVCgyKQorI2RlZmluZQlJTVJfUkRVCQkJCQlCSVQoMSkKKyNkZWZpbmUJSU1SX1JPSwkJCQkJQklUKDApCisKKy8qIElNUiBEVzEoMHgwMEI0LTAwQjcpIEJpdCAwLTMxICovCisjZGVmaW5lCUlNUl9NQ1VFUlIJCQkJQklUKDI4KQorI2RlZmluZQlJTVJfQkNORE1BSU5UNwkJCQlCSVQoMjcpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ2CQkJCUJJVCgyNikKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDUJCQkJQklUKDI1KQorI2RlZmluZQlJTVJfQkNORE1BSU5UNAkJCQlCSVQoMjQpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQzCQkJCUJJVCgyMykKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDIJCQkJQklUKDIyKQorI2RlZmluZQlJTVJfQkNORE1BSU5UMQkJCQlCSVQoMjEpCisjZGVmaW5lCUlNUl9CQ05ET0s3CQkJCUJJVCgyMCkKKyNkZWZpbmUJSU1SX0JDTkRPSzYJCQkJQklUKDE5KQorI2RlZmluZQlJTVJfQkNORE9LNQkJCQlCSVQoMTgpCisjZGVmaW5lCUlNUl9CQ05ET0s0CQkJCUJJVCgxNykKKyNkZWZpbmUJSU1SX0JDTkRPSzMJCQkJQklUKDE2KQorI2RlZmluZQlJTVJfQkNORE9LMgkJCQlCSVQoMTUpCisjZGVmaW5lCUlNUl9CQ05ET0sxCQkJCUJJVCgxNCkKKyNkZWZpbmUJSU1SX0FUSU1FTkRfRQkJCQlCSVQoMTMpCisjZGVmaW5lCUlNUl9UWEVSUgkJCQlCSVQoMTEpCisjZGVmaW5lCUlNUl9SWEVSUgkJCQlCSVQoMTApCisjZGVmaW5lCUlNUl9UWEZPVlcJCQkJQklUKDkpCisjZGVmaW5lCUlNUl9SWEZPVlcJCQkJQklUKDgpCisKKworI2RlZmluZQlIV1NFVF9NQVhfU0laRQkJCQk1MTIKKyNkZWZpbmUgRUZVU0VfTUFYX1NFQ1RJT04JCQk2NAorI2RlZmluZSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOCQkJMjU2CisjZGVmaW5lIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTCQkJMTgKKworCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RTU0kJCQkweDAKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfVFhQT1dFUkRJRkYJCTB4MAorI2RlZmluZSBFRVBST01fREVGQVVMVF9DUllTVEFMQ0FQCQkweDUKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfQk9BUkRUWVBFCQkweDAyCisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX1RYUE9XRVIJCQkweDEwMTAKKyNkZWZpbmUJRUVQUk9NX0RFRkFVTFRfSFQyVF9UWFBXUgkJMHgxMAorCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX0xFR0FDWUhUVFhQT1dFUkRJRkYJMHgzCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RIRVJNQUxNRVRFUgkJMHgxQQorI2RlZmluZQlFRVBST01fREVGQVVMVF9BTlRUWFBPV0VSRElGRgkJMHgwCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RYUFdESUZGX0NSWVNUQUxDQVAJMHg1CisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RYUE9XRVJMRVZFTAkJMHgyMgorI2RlZmluZQlFRVBST01fREVGQVVMVF9IVDQwXzJTRElGRgkJMHgwCisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX0hUMjBfRElGRgkJMgorI2RlZmluZQlFRVBST01fREVGQVVMVF9MRUdBQ1lIVFRYUE9XRVJESUZGCTB4MworI2RlZmluZSBFRVBST01fREVGQVVMVF9IVDQwX1BXUk1BWE9GRlNFVAkwCisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX0hUMjBfUFdSTUFYT0ZGU0VUCTAKKworI2RlZmluZSBSRl9PUFRJT04xCQkJCTB4NzkKKyNkZWZpbmUgUkZfT1BUSU9OMgkJCQkweDdBCisjZGVmaW5lIFJGX09QVElPTjMJCQkJMHg3QgorI2RlZmluZSBSRl9PUFRJT040CQkJCTB4N0MKKworI2RlZmluZSBFRVBST01fREVGQVVMVF9QSUQJCQkweDEyMzQKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfVklECQkJMHg1Njc4CisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX0NVU1RPTUVSSUQJCTB4QUIKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfU1VCQ1VTVE9NRVJJRAkJMHhDRAorI2RlZmluZSBFRVBST01fREVGQVVMVF9WRVJTSU9OCQkJMAorCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fRkNDCQkJMHgwCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fSUMJCQkweDEKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9FVFNJCQkweDIKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9TUEFJTgkJMHgzCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fRlJBTkNFCQkweDQKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9NS0sJCQkweDUKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9NS0sxCQkweDYKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9JU1JBRUwJCTB4NworI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX1RFTEVDCQkweDgKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9HTE9CQUxfRE9NQUlOCTB4OQorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX1dPUkxEX1dJREVfMTMJMHhBCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fTkNDCQkJMHhCCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fQllfSFdfTUFTSwkJMHg4MAorCisjZGVmaW5lIEVFUFJPTV9DSURfREVGQVVMVAkJCTB4MAorI2RlZmluZSBFRVBST01fQ0lEX1RPU0hJQkEJCQkweDQKKyNkZWZpbmUJRUVQUk9NX0NJRF9DQ1gJCQkJMHgxMAorI2RlZmluZQlFRVBST01fQ0lEX1FNSQkJCQkweDBECisjZGVmaW5lIEVFUFJPTV9DSURfV0hRTAkJCQkweEZFCisKKyNkZWZpbmUJUlRMODE5MkVfRUVQUk9NX0lECQkJMHg4MTI5CisKKyNkZWZpbmUgRUVQUk9NX0hQT04JCQkJMHgwMgorI2RlZmluZSBFRVBST01fQ0xLCQkJCTB4MDYKKyNkZWZpbmUgRUVQUk9NX1RFU1RSCQkJCTB4MDgKKworCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSQ0NLCQkJMHgxMAorI2RlZmluZQlFRVBST01fVFhQT1dFUkhUNDBfMVMJCQkweDE2CisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSSFQyMERJRkYJCQkweDFCCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX09GRE1ESUZGCQkJMHgxQgorCisKKworI2RlZmluZQlFRVBST01fVFhfUFdSX0lOWAkJCTB4MTAKKworI2RlZmluZQlFRVBST01fQ0hBTk5FTFBMQU4JCQkweEI4CisjZGVmaW5lCUVFUFJPTV9YVEFMXzkyRQkJCQkweEI5CisjZGVmaW5lCUVFUFJPTV9USEVSTUFMX01FVEVSXzkyRQkJMHhCQQorI2RlZmluZQlFRVBST01fSVFLX0xDS185MkUJCQkweEJCCisKKyNkZWZpbmUJRUVQUk9NX1JGX0JPQVJEX09QVElPTl85MkUJCTB4QzEKKyNkZWZpbmUJRUVQUk9NX1JGX0ZFQVRVUkVfT1BUSU9OXzkyRQkJMHhDMgorI2RlZmluZQlFRVBST01fUkZfQlRfU0VUVElOR185MkUJCTB4QzMKKyNkZWZpbmUJRUVQUk9NX1ZFUlNJT04JCQkJMHhDNAorI2RlZmluZQlFRVBST01fQ1VTVE9NRVJfSUQJCQkweEM1CisjZGVmaW5lCUVFUFJPTV9SRl9BTlRFTk5BX09QVF85MkUJCTB4QzkKKworI2RlZmluZQlFRVBST01fTUFDX0FERFIJCQkJMHhEMAorI2RlZmluZSBFRVBST01fVklECQkJCTB4RDYKKyNkZWZpbmUgRUVQUk9NX0RJRAkJCQkweEQ4CisjZGVmaW5lIEVFUFJPTV9TVklECQkJCTB4REEKKyNkZWZpbmUgRUVQUk9NX1NNSUQJCQkJMHhEQworCisjZGVmaW5lCVNUT1BCRUNPTgkJCQlCSVQoNikKKyNkZWZpbmUJU1RPUEhJR0hUCQkJCUJJVCg1KQorI2RlZmluZQlTVE9QTUdUCQkJCQlCSVQoNCkKKyNkZWZpbmUJU1RPUFZPCQkJCQlCSVQoMykKKyNkZWZpbmUJU1RPUFZJCQkJCQlCSVQoMikKKyNkZWZpbmUJU1RPUEJFCQkJCQlCSVQoMSkKKyNkZWZpbmUJU1RPUEJLCQkJCQlCSVQoMCkKKworI2RlZmluZQlSQ1JfQVBQRkNTCQkJCUJJVCgzMSkKKyNkZWZpbmUJUkNSX0FQUF9NSUMJCQkJQklUKDMwKQorI2RlZmluZQlSQ1JfQVBQX0lDVgkJCQlCSVQoMjkpCisjZGVmaW5lCVJDUl9BUFBfUEhZU1RfUlhGRgkJCUJJVCgyOCkKKyNkZWZpbmUJUkNSX0FQUF9CQV9TU04JCQkJQklUKDI3KQorI2RlZmluZQlSQ1JfRU5NQklECQkJCUJJVCgyNCkKKyNkZWZpbmUJUkNSX0xTSUdFTgkJCQlCSVQoMjMpCisjZGVmaW5lCVJDUl9NRkJFTgkJCQlCSVQoMjIpCisjZGVmaW5lCVJDUl9IVENfTE9DX0NUUkwJCQlCSVQoMTQpCisjZGVmaW5lCVJDUl9BTUYJCQkJCUJJVCgxMykKKyNkZWZpbmUJUkNSX0FDRgkJCQkJQklUKDEyKQorI2RlZmluZQlSQ1JfQURGCQkJCQlCSVQoMTEpCisjZGVmaW5lCVJDUl9BSUNWCQkJCUJJVCg5KQorI2RlZmluZQlSQ1JfQUNSQzMyCQkJCUJJVCg4KQorI2RlZmluZQlSQ1JfQ0JTU0lEX0JDTgkJCQlCSVQoNykKKyNkZWZpbmUJUkNSX0NCU1NJRF9EQVRBCQkJCUJJVCg2KQorI2RlZmluZQlSQ1JfQ0JTU0lECQkJCVJDUl9DQlNTSURfREFUQQorI2RlZmluZQlSQ1JfQVBXUk1HVAkJCQlCSVQoNSkKKyNkZWZpbmUJUkNSX0FERDMJCQkJQklUKDQpCisjZGVmaW5lCVJDUl9BQgkJCQkJQklUKDMpCisjZGVmaW5lCVJDUl9BTQkJCQkJQklUKDIpCisjZGVmaW5lCVJDUl9BUE0JCQkJCUJJVCgxKQorI2RlZmluZQlSQ1JfQUFQCQkJCQlCSVQoMCkKKyNkZWZpbmUJUkNSX01YRE1BX09GRlNFVAkJCTgKKyNkZWZpbmUJUkNSX0ZJRk9fT0ZGU0VUCQkJCTEzCisKKyNkZWZpbmUgUlNWX0NUUkwJCQkJMHgwMDFDCisjZGVmaW5lIFJEX0NUUkwJCQkJCTB4MDUyNAorCisjZGVmaW5lIFJFR19VU0JfSU5GTwkJCQkweEZFMTcKKyNkZWZpbmUgUkVHX1VTQl9TUEVDSUFMX09QVElPTgkJCTB4RkU1NQorI2RlZmluZSBSRUdfVVNCX0RNQV9BR0dfVE8JCQkweEZFNUIKKyNkZWZpbmUgUkVHX1VTQl9BR0dfVE8JCQkJMHhGRTVDCisjZGVmaW5lIFJFR19VU0JfQUdHX1RICQkJCTB4RkU1RAorCisjZGVmaW5lIFJFR19VU0JfVklECQkJCTB4RkU2MAorI2RlZmluZSBSRUdfVVNCX1BJRAkJCQkweEZFNjIKKyNkZWZpbmUgUkVHX1VTQl9PUFRJT05BTAkJCTB4RkU2NAorI2RlZmluZSBSRUdfVVNCX0NISVJQX0sJCQkJMHhGRTY1CisjZGVmaW5lIFJFR19VU0JfUEhZCQkJCTB4RkU2NgorI2RlZmluZSBSRUdfVVNCX01BQ19BRERSCQkJMHhGRTcwCisjZGVmaW5lIFJFR19VU0JfSFJQV00JCQkJMHhGRTU4CisjZGVmaW5lIFJFR19VU0JfSENQV00JCQkJMHhGRTU3CisKKyNkZWZpbmUgU1cxOF9GUFdNCQkJCUJJVCgzKQorCisjZGVmaW5lIElTT19NRDJQUAkJCQlCSVQoMCkKKyNkZWZpbmUgSVNPX1VBMlVTQgkJCQlCSVQoMSkKKyNkZWZpbmUgSVNPX1VEMkNPUkUJCQkJQklUKDIpCisjZGVmaW5lIElTT19QQTJQQ0lFCQkJCUJJVCgzKQorI2RlZmluZSBJU09fUEQyQ09SRQkJCQlCSVQoNCkKKyNkZWZpbmUgSVNPX0lQMk1BQwkJCQlCSVQoNSkKKyNkZWZpbmUgSVNPX0RJT1AJCQkJQklUKDYpCisjZGVmaW5lIElTT19ESU9FCQkJCUJJVCg3KQorI2RlZmluZSBJU09fRUIyQ09SRQkJCQlCSVQoOCkKKyNkZWZpbmUgSVNPX0RJT1IJCQkJQklUKDkpCisKKyNkZWZpbmUgUFdDX0VWMjVWCQkJCUJJVCgxNCkKKyNkZWZpbmUgUFdDX0VWMTJWCQkJCUJJVCgxNSkKKworI2RlZmluZSBGRU5fQkJSU1RCCQkJCUJJVCgwKQorI2RlZmluZSBGRU5fQkJfR0xCX1JTVG4JCQkJQklUKDEpCisjZGVmaW5lIEZFTl9VU0JBCQkJCUJJVCgyKQorI2RlZmluZSBGRU5fVVBMTAkJCQlCSVQoMykKKyNkZWZpbmUgRkVOX1VTQkQJCQkJQklUKDQpCisjZGVmaW5lIEZFTl9ESU9fUENJRQkJCQlCSVQoNSkKKyNkZWZpbmUgRkVOX1BDSUVBCQkJCUJJVCg2KQorI2RlZmluZSBGRU5fUFBMTAkJCQlCSVQoNykKKyNkZWZpbmUgRkVOX1BDSUVECQkJCUJJVCg4KQorI2RlZmluZSBGRU5fRElPRQkJCQlCSVQoOSkKKyNkZWZpbmUgRkVOX0NQVUVOCQkJCUJJVCgxMCkKKyNkZWZpbmUgRkVOX0RDT1JFCQkJCUJJVCgxMSkKKyNkZWZpbmUgRkVOX0VMRFIJCQkJQklUKDEyKQorI2RlZmluZSBGRU5fRElPX1JGCQkJCUJJVCgxMykKKyNkZWZpbmUgRkVOX0hXUEROCQkJCUJJVCgxNCkKKyNkZWZpbmUgRkVOX01SRUdFTgkJCQlCSVQoMTUpCisKKyNkZWZpbmUgUEZNX0xEQUxMCQkJCUJJVCgwKQorI2RlZmluZSBQRk1fQUxETgkJCQlCSVQoMSkKKyNkZWZpbmUgUEZNX0xES1AJCQkJQklUKDIpCisjZGVmaW5lIFBGTV9XT1dMCQkJCUJJVCgzKQorI2RlZmluZSBFblBETgkJCQkJQklUKDQpCisjZGVmaW5lIFBETl9QTAkJCQkJQklUKDUpCisjZGVmaW5lIEFQRk1fT05NQUMJCQkJQklUKDgpCisjZGVmaW5lIEFQRk1fT0ZGCQkJCUJJVCg5KQorI2RlZmluZSBBUEZNX1JTTQkJCQlCSVQoMTApCisjZGVmaW5lIEFGU01fSFNVUwkJCQlCSVQoMTEpCisjZGVmaW5lIEFGU01fUENJRQkJCQlCSVQoMTIpCisjZGVmaW5lIEFQRE1fTUFDCQkJCUJJVCgxMykKKyNkZWZpbmUgQVBETV9IT1NUCQkJCUJJVCgxNCkKKyNkZWZpbmUgQVBETV9IUEROCQkJCUJJVCgxNSkKKyNkZWZpbmUgUkRZX01BQ09OCQkJCUJJVCgxNikKKyNkZWZpbmUgU1VTX0hPU1QJCQkJQklUKDE3KQorI2RlZmluZSBST1BfQUxECQkJCQlCSVQoMjApCisjZGVmaW5lIFJPUF9QV1IJCQkJCUJJVCgyMSkKKyNkZWZpbmUgUk9QX1NQUwkJCQkJQklUKDIyKQorI2RlZmluZSBTT1BfTVJTVAkJCQlCSVQoMjUpCisjZGVmaW5lIFNPUF9GVVNFCQkJCUJJVCgyNikKKyNkZWZpbmUgU09QX0FCRwkJCQkJQklUKDI3KQorI2RlZmluZSBTT1BfQU1CCQkJCQlCSVQoMjgpCisjZGVmaW5lIFNPUF9SQ0sJCQkJCUJJVCgyOSkKKyNkZWZpbmUgU09QX0E4TQkJCQkJQklUKDMwKQorI2RlZmluZSBYT1BfQlRDSwkJCQlCSVQoMzEpCisKKyNkZWZpbmUgQU5BRDE2Vl9FTgkJCQlCSVQoMCkKKyNkZWZpbmUgQU5BOE0JCQkJCUJJVCgxKQorI2RlZmluZSBNQUNTTFAJCQkJCUJJVCg0KQorI2RlZmluZSBMT0FERVJfQ0xLX0VOCQkJCUJJVCg1KQorI2RlZmluZSBfODBNX1NTQ19ESVMJCQkJQklUKDcpCisjZGVmaW5lIF84ME1fU1NDX0VOX0hPCQkJCUJJVCg4KQorI2RlZmluZSBQSFlfU1NDX1JTVEIJCQkJQklUKDkpCisjZGVmaW5lIFNFQ19DTEtfRU4JCQkJQklUKDEwKQorI2RlZmluZSBNQUNfQ0xLX0VOCQkJCUJJVCgxMSkKKyNkZWZpbmUgU1lTX0NMS19FTgkJCQlCSVQoMTIpCisjZGVmaW5lIFJJTkdfQ0xLX0VOCQkJCUJJVCgxMykKKworI2RlZmluZQlCT09UX0ZST01fRUVQUk9NCQkJQklUKDQpCisjZGVmaW5lCUVFUFJPTV9FTgkJCQlCSVQoNSkKKworI2RlZmluZSBBRkVfQkdFTgkJCQlCSVQoMCkKKyNkZWZpbmUgQUZFX01CRU4JCQkJQklUKDEpCisjZGVmaW5lIE1BQ19JRF9FTgkJCQlCSVQoNykKKworI2RlZmluZSBXTE9DS19BTEwJCQkJQklUKDApCisjZGVmaW5lIFdMT0NLXzAwCQkJCUJJVCgxKQorI2RlZmluZSBXTE9DS18wNAkJCQlCSVQoMikKKyNkZWZpbmUgV0xPQ0tfMDgJCQkJQklUKDMpCisjZGVmaW5lIFdMT0NLXzQwCQkJCUJJVCg0KQorI2RlZmluZSBSX0RJU19QUlNUXzAJCQkJQklUKDUpCisjZGVmaW5lIFJfRElTX1BSU1RfMQkJCQlCSVQoNikKKyNkZWZpbmUgTE9DS19BTExfRU4JCQkJQklUKDcpCisKKyNkZWZpbmUgUkZfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBSRl9SU1RCCQkJCQlCSVQoMSkKKyNkZWZpbmUgUkZfU0RNUlNUQgkJCQlCSVQoMikKKworI2RlZmluZSBMREExNV9FTgkJCQlCSVQoMCkKKyNkZWZpbmUgTERBMTVfU1RCWQkJCQlCSVQoMSkKKyNkZWZpbmUgTERBMTVfT0JVRgkJCQlCSVQoMikKKyNkZWZpbmUgTERBMTVfUkVHX1ZPUwkJCQlCSVQoMykKKyNkZWZpbmUgX0xEQTE1X1ZPQURKKHgpCQkJCSgoKHgpICYgMHg3KSA8PCA0KQorCisjZGVmaW5lIExEVjEyX0VOCQkJCUJJVCgwKQorI2RlZmluZSBMRFYxMl9TREJZCQkJCUJJVCgxKQorI2RlZmluZSBMUExET19IU00JCQkJQklUKDIpCisjZGVmaW5lIExQTERPX0xTTV9ESVMJCQkJQklUKDMpCisjZGVmaW5lIF9MRFYxMl9WQURKKHgpCQkJCSgoKHgpICYgMHhGKSA8PCA0KQorCisjZGVmaW5lIFhUQUxfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBYVEFMX0JTRUwJCQkJQklUKDEpCisjZGVmaW5lIF9YVEFMX0JPU0MoeCkJCQkJKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lIF9YVEFMX0NBREooeCkJCQkJKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lIFhUQUxfR0FURV9VU0IJCQkJQklUKDgpCisjZGVmaW5lIF9YVEFMX1VTQl9EUlYoeCkJCQkoKCh4KSAmIDB4MykgPDwgOSkKKyNkZWZpbmUgWFRBTF9HQVRFX0FGRQkJCQlCSVQoMTEpCisjZGVmaW5lIF9YVEFMX0FGRV9EUlYoeCkJCQkoKCh4KSAmIDB4MykgPDwgMTIpCisjZGVmaW5lIFhUQUxfUkZfR0FURQkJCQlCSVQoMTQpCisjZGVmaW5lIF9YVEFMX1JGX0RSVih4KQkJCQkoKCh4KSAmIDB4MykgPDwgMTUpCisjZGVmaW5lIFhUQUxfR0FURV9ESUcJCQkJQklUKDE3KQorI2RlZmluZSBfWFRBTF9ESUdfRFJWKHgpCQkJKCgoeCkgJiAweDMpIDw8IDE4KQorI2RlZmluZSBYVEFMX0JUX0dBVEUJCQkJQklUKDIwKQorI2RlZmluZSBfWFRBTF9CVF9EUlYoeCkJCQkJKCgoeCkgJiAweDMpIDw8IDIxKQorI2RlZmluZSBfWFRBTF9HUElPKHgpCQkJCSgoKHgpICYgMHg3KSA8PCAyMykKKworI2RlZmluZSBDS0RMWV9BRkUJCQkJQklUKDI2KQorI2RlZmluZSBDS0RMWV9VU0IJCQkJQklUKDI3KQorI2RlZmluZSBDS0RMWV9ESUcJCQkJQklUKDI4KQorI2RlZmluZSBDS0RMWV9CVAkJCQlCSVQoMjkpCisKKyNkZWZpbmUgQVBMTF9FTgkJCQkJQklUKDApCisjZGVmaW5lIEFQTExfMzIwX0VOCQkJCUJJVCgxKQorI2RlZmluZSBBUExMX0ZSRUZfU0VMCQkJCUJJVCgyKQorI2RlZmluZSBBUExMX0VER0VfU0VMCQkJCUJJVCgzKQorI2RlZmluZSBBUExMX1dET0dCCQkJCUJJVCg0KQorI2RlZmluZSBBUExMX0xQRkVOCQkJCUJJVCg1KQorCisjZGVmaW5lIEFQTExfUkVGX0NMS18xM01IWgkJCTB4MQorI2RlZmluZSBBUExMX1JFRl9DTEtfMTlfMk1IWgkJCTB4MgorI2RlZmluZSBBUExMX1JFRl9DTEtfMjBNSFoJCQkweDMKKyNkZWZpbmUgQVBMTF9SRUZfQ0xLXzI1TUhaCQkJMHg0CisjZGVmaW5lIEFQTExfUkVGX0NMS18yNk1IWgkJCTB4NQorI2RlZmluZSBBUExMX1JFRl9DTEtfMzhfNE1IWgkJCTB4NgorI2RlZmluZSBBUExMX1JFRl9DTEtfNDBNSFoJCQkweDcKKworI2RlZmluZSBBUExMXzMyMEVOCQkJCUJJVCgxNCkKKyNkZWZpbmUgQVBMTF84MEVOCQkJCUJJVCgxNSkKKyNkZWZpbmUgQVBMTF8xTUVOCQkJCUJJVCgyNCkKKworI2RlZmluZSBBTERfRU4JCQkJCUJJVCgxOCkKKyNkZWZpbmUgRUZfUEQJCQkJCUJJVCgxOSkKKyNkZWZpbmUgRUZfRkxBRwkJCQkJQklUKDMxKQorCisjZGVmaW5lIEVGX1RSUFQJCQkJCUJJVCg3KQorI2RlZmluZSBMRE9FMjVfRU4JCQkJQklUKDMxKQorCisjZGVmaW5lIFJTTV9FTgkJCQkJQklUKDApCisjZGVmaW5lIFRpbWVyX0VOCQkJCUJJVCg0KQorCisjZGVmaW5lIFRSU1cwRU4JCQkJCUJJVCgyKQorI2RlZmluZSBUUlNXMUVOCQkJCQlCSVQoMykKKyNkZWZpbmUgRVJPTV9FTgkJCQkJQklUKDQpCisjZGVmaW5lIEVuQlQJCQkJCUJJVCg1KQorI2RlZmluZSBFblVhcnQJCQkJCUJJVCg4KQorI2RlZmluZSBVYXJ0XzkxMAkJCQlCSVQoOSkKKyNkZWZpbmUgRW5QTUFDCQkJCQlCSVQoMTApCisjZGVmaW5lIFNJQ19TV1JTVAkJCQlCSVQoMTEpCisjZGVmaW5lIEVuU0lDCQkJCQlCSVQoMTIpCisjZGVmaW5lIFNJQ18yMwkJCQkJQklUKDEzKQorI2RlZmluZSBFbkhEUAkJCQkJQklUKDE0KQorI2RlZmluZSBTSUNfTEJLCQkJCQlCSVQoMTUpCisKKyNkZWZpbmUgTEVEMFBMCQkJCQlCSVQoNCkKKyNkZWZpbmUgTEVEMVBMCQkJCQlCSVQoMTIpCisjZGVmaW5lIExFRDBESVMJCQkJCUJJVCg3KQorCisjZGVmaW5lIE1DVUZXRExfRU4JCQkJQklUKDApCisjZGVmaW5lIE1DVUZXRExfUkRZCQkJCUJJVCgxKQorI2RlZmluZSBGV0RMX0Noa1N1bV9ycHQJCQkJQklUKDIpCisjZGVmaW5lIE1BQ0lOSV9SRFkJCQkJQklUKDMpCisjZGVmaW5lIEJCSU5JX1JEWQkJCQlCSVQoNCkKKyNkZWZpbmUgUkZJTklfUkRZCQkJCUJJVCg1KQorI2RlZmluZSBXSU5USU5JX1JEWQkJCQlCSVQoNikKKyNkZWZpbmUgQ1BSU1QJCQkJCUJJVCgyMykKKworI2RlZmluZSBYQ0xLX1ZMRAkJCQlCSVQoMCkKKyNkZWZpbmUgQUNMS19WTEQJCQkJQklUKDEpCisjZGVmaW5lIFVDTEtfVkxECQkJCUJJVCgyKQorI2RlZmluZSBQQ0xLX1ZMRAkJCQlCSVQoMykKKyNkZWZpbmUgUENJUlNUQgkJCQkJQklUKDQpCisjZGVmaW5lIFYxNV9WTEQJCQkJCUJJVCg1KQorI2RlZmluZSBUUlBfQjE1Vl9FTgkJCQlCSVQoNykKKyNkZWZpbmUgU0lDX0lETEUJCQkJQklUKDgpCisjZGVmaW5lIEJEX01BQzIJCQkJCUJJVCg5KQorI2RlZmluZSBCRF9NQUMxCQkJCQlCSVQoMTApCisjZGVmaW5lIElDX01BQ1BIWV9NT0RFCQkJCUJJVCgxMSkKKyNkZWZpbmUgVkVORE9SX0lECQkJCUJJVCgxOSkKKyNkZWZpbmUgUEFEX0hXUERfSUROCQkJCUJJVCgyMikKKyNkZWZpbmUgVFJQX1ZBVVhfRU4JCQkJQklUKDIzKQorI2RlZmluZSBUUlBfQlRfRU4JCQkJQklUKDI0KQorI2RlZmluZSBCRF9QS0dfU0VMCQkJCUJJVCgyNSkKKyNkZWZpbmUgQkRfSENJX1NFTAkJCQlCSVQoMjYpCisjZGVmaW5lIFRZUEVfSUQJCQkJCUJJVCgyNykKKworI2RlZmluZSBDSElQX1ZFUl9SVExfTUFTSwkJCTB4RjAwMAorI2RlZmluZSBDSElQX1ZFUl9SVExfU0hJRlQJCQkxMgorCisjZGVmaW5lIFJFR19MQk1PREUJCQkJKFJFR19DUiArIDMpCisKKyNkZWZpbmUgSENJX1RYRE1BX0VOCQkJCUJJVCgwKQorI2RlZmluZSBIQ0lfUlhETUFfRU4JCQkJQklUKDEpCisjZGVmaW5lIFRYRE1BX0VOCQkJCUJJVCgyKQorI2RlZmluZSBSWERNQV9FTgkJCQlCSVQoMykKKyNkZWZpbmUgUFJPVE9DT0xfRU4JCQkJQklUKDQpCisjZGVmaW5lIFNDSEVEVUxFX0VOCQkJCUJJVCg1KQorI2RlZmluZSBNQUNUWEVOCQkJCQlCSVQoNikKKyNkZWZpbmUgTUFDUlhFTgkJCQkJQklUKDcpCisjZGVmaW5lIEVOU1dCQ04JCQkJCUJJVCg4KQorI2RlZmluZSBFTlNFQwkJCQkJQklUKDkpCisKKyNkZWZpbmUgX05FVFRZUEUoeCkJCQkJKCgoeCkgJiAweDMpIDw8IDE2KQorI2RlZmluZSBNQVNLX05FVFRZUEUJCQkJMHgzMDAwMAorI2RlZmluZSBOVF9OT19MSU5LCQkJCTB4MAorI2RlZmluZSBOVF9MSU5LX0FEX0hPQwkJCQkweDEKKyNkZWZpbmUgTlRfTElOS19BUAkJCQkweDIKKyNkZWZpbmUgTlRfQVNfQVAJCQkJMHgzCisKKyNkZWZpbmUgX0xCTU9ERSh4KQkJCQkoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lIE1BU0tfTEJNT0RFCQkJCTB4RjAwMDAwMAorI2RlZmluZSBMT09QQkFDS19OT1JNQUwJCQkJMHgwCisjZGVmaW5lIExPT1BCQUNLX0lNTUVESUFURUxZCQkJMHhCCisjZGVmaW5lIExPT1BCQUNLX01BQ19ERUxBWQkJCTB4MworI2RlZmluZSBMT09QQkFDS19QSFkJCQkJMHgxCisjZGVmaW5lIExPT1BCQUNLX0RNQQkJCQkweDcKKworI2RlZmluZSBHRVRfUlhfUEFHRV9TSVpFKHZhbHVlKQkJCSgodmFsdWUpICYgMHhGKQorI2RlZmluZSBHRVRfVFhfUEFHRV9TSVpFKHZhbHVlKQkJCSgoKHZhbHVlKSAmIDB4RjApID4+IDQpCisjZGVmaW5lIF9QU1JYX01BU0sJCQkJMHhGCisjZGVmaW5lIF9QU1RYX01BU0sJCQkJMHhGMAorI2RlZmluZSBfUFNSWCh4KQkJCQkoeCkKKyNkZWZpbmUgX1BTVFgoeCkJCQkJKCh4KSA8PCA0KQorCisjZGVmaW5lIFBCUF82NAkJCQkJMHgwCisjZGVmaW5lIFBCUF8xMjgJCQkJCTB4MQorI2RlZmluZSBQQlBfMjU2CQkJCQkweDIKKyNkZWZpbmUgUEJQXzUxMgkJCQkJMHgzCisjZGVmaW5lIFBCUF8xMDI0CQkJCTB4NAorCisjZGVmaW5lIFJYRE1BX0FSQkJXX0VOCQkJCUJJVCgwKQorI2RlZmluZSBSWFNIRlRfRU4JCQkJQklUKDEpCisjZGVmaW5lIFJYRE1BX0FHR19FTgkJCQlCSVQoMikKKyNkZWZpbmUgUVNfVk9fUVVFVUUJCQkJQklUKDgpCisjZGVmaW5lIFFTX1ZJX1FVRVVFCQkJCUJJVCg5KQorI2RlZmluZSBRU19CRV9RVUVVRQkJCQlCSVQoMTApCisjZGVmaW5lIFFTX0JLX1FVRVVFCQkJCUJJVCgxMSkKKyNkZWZpbmUgUVNfTUFOQUdFUl9RVUVVRQkJCUJJVCgxMikKKyNkZWZpbmUgUVNfSElHSF9RVUVVRQkJCQlCSVQoMTMpCisKKyNkZWZpbmUgSFFTRUxfVk9RCQkJCUJJVCgwKQorI2RlZmluZSBIUVNFTF9WSVEJCQkJQklUKDEpCisjZGVmaW5lIEhRU0VMX0JFUQkJCQlCSVQoMikKKyNkZWZpbmUgSFFTRUxfQktRCQkJCUJJVCgzKQorI2RlZmluZSBIUVNFTF9NR1RRCQkJCUJJVCg0KQorI2RlZmluZSBIUVNFTF9ISVEJCQkJQklUKDUpCisKKyNkZWZpbmUgX1RYRE1BX0hJUV9NQVAoeCkJCQkoKCh4KSYweDMpIDw8IDE0KQorI2RlZmluZSBfVFhETUFfTUdRX01BUCh4KQkJCSgoKHgpJjB4MykgPDwgMTIpCisjZGVmaW5lIF9UWERNQV9CS1FfTUFQKHgpCQkJKCgoeCkmMHgzKSA8PCAxMCkKKyNkZWZpbmUgX1RYRE1BX0JFUV9NQVAoeCkJCQkoKCh4KSYweDMpIDw8IDgpCisjZGVmaW5lIF9UWERNQV9WSVFfTUFQKHgpCQkJKCgoeCkmMHgzKSA8PCA2KQorI2RlZmluZSBfVFhETUFfVk9RX01BUCh4KQkJCSgoKHgpJjB4MykgPDwgNCkKKworI2RlZmluZSBRVUVVRV9MT1cJCQkJMQorI2RlZmluZSBRVUVVRV9OT1JNQUwJCQkJMgorI2RlZmluZSBRVUVVRV9ISUdICQkJCTMKKworI2RlZmluZSBfTExUX05PX0FDVElWRQkJCQkweDAKKyNkZWZpbmUgX0xMVF9XUklURV9BQ0NFU1MJCQkweDEKKyNkZWZpbmUgX0xMVF9SRUFEX0FDQ0VTUwkJCTB4MgorCisjZGVmaW5lIF9MTFRfSU5JVF9EQVRBKHgpCQkJKCh4KSAmIDB4RkYpCisjZGVmaW5lIF9MTFRfSU5JVF9BRERSKHgpCQkJKCgoeCkgJiAweEZGKSA8PCA4KQorI2RlZmluZSBfTExUX09QKHgpCQkJCQkoKCh4KSAmIDB4MykgPDwgMzApCisjZGVmaW5lIF9MTFRfT1BfVkFMVUUoeCkJCQkoKCh4KSA+PiAzMCkgJiAweDMpCisKKyNkZWZpbmUgQkJfV1JJVEVfUkVBRF9NQVNLCQkJKEJJVCgzMSkgfCBCSVQoMzApKQorI2RlZmluZSBCQl9XUklURV9FTgkJCQlCSVQoMzApCisjZGVmaW5lIEJCX1JFQURfRU4JCQkJQklUKDMxKQorCisjZGVmaW5lIF9IUFEoeCkJCQkJCSgoeCkgJiAweEZGKQorI2RlZmluZSBfTFBRKHgpCQkJCQkoKCh4KSAmIDB4RkYpIDw8IDgpCisjZGVmaW5lIF9QVUJRKHgpCQkJCSgoKHgpICYgMHhGRikgPDwgMTYpCisjZGVmaW5lIF9OUFEoeCkJCQkJCSgoeCkgJiAweEZGKQorCisjZGVmaW5lIEhQUV9QVUJMSUNfRElTCQkJCUJJVCgyNCkKKyNkZWZpbmUgTFBRX1BVQkxJQ19ESVMJCQkJQklUKDI1KQorI2RlZmluZSBMRF9SUVBOCQkJCQlCSVQoMzEpCisKKyNkZWZpbmUgQkNOX1ZBTElECQkJCUJJVCgxNikKKyNkZWZpbmUgQkNOX0hFQUQoeCkJCQkJKCgoeCkgJiAweEZGKSA8PCA4KQorI2RlZmluZQlCQ05fSEVBRF9NQVNLCQkJCTB4RkYwMAorCisjZGVmaW5lIEJMS19ERVNDX05VTV9TSElGVAkJCTQKKyNkZWZpbmUgQkxLX0RFU0NfTlVNX01BU0sJCQkweEYKKworI2RlZmluZSBEUk9QX0RBVEFfRU4JCQkJQklUKDkpCisKKyNkZWZpbmUgRU5fQU1QRFVfUlRZX05FVwkJCUJJVCg3KQorCisjZGVmaW5lIF9JTklSVFNNQ1NfU0VMKHgpCQkJKCh4KSAmIDB4M0YpCisKKyNkZWZpbmUgX1NQRUNfU0lGU19DQ0soeCkJCQkoKHgpICYgMHhGRikKKyNkZWZpbmUgX1NQRUNfU0lGU19PRkRNKHgpCQkJKCgoeCkgJiAweEZGKSA8PCA4KQorCisjZGVmaW5lIFJBVEVfUkVHX0JJVE1BUF9BTEwJCQkweEZGRkZGCisKKyNkZWZpbmUgX1JSU0NfQklUTUFQKHgpCQkJCSgoeCkgJiAweEZGRkZGKQorCisjZGVmaW5lIF9SUlNSX1JTQyh4KQkJCQkoKCh4KSAmIDB4MykgPDwgMjEpCisjZGVmaW5lIFJSU1JfUlNDX1JFU0VSVkVECQkJMHgwCisjZGVmaW5lIFJSU1JfUlNDX1VQUEVSX1NVQkNIQU5ORUwJCTB4MQorI2RlZmluZSBSUlNSX1JTQ19MT1dFUl9TVUJDSEFOTkVMCQkweDIKKyNkZWZpbmUgUlJTUl9SU0NfRFVQTElDQVRFX01PREUJCQkweDMKKworI2RlZmluZSBVU0VfU0hPUlRfRzEJCQkJQklUKDIwKQorCisjZGVmaW5lIF9BR0dMTVRfTUNTMCh4KQkJCQkoKHgpICYgMHhGKQorI2RlZmluZSBfQUdHTE1UX01DUzEoeCkJCQkJKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lIF9BR0dMTVRfTUNTMih4KQkJCQkoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgX0FHR0xNVF9NQ1MzKHgpCQkJCSgoKHgpICYgMHhGKSA8PCAxMikKKyNkZWZpbmUgX0FHR0xNVF9NQ1M0KHgpCQkJCSgoKHgpICYgMHhGKSA8PCAxNikKKyNkZWZpbmUgX0FHR0xNVF9NQ1M1KHgpCQkJCSgoKHgpICYgMHhGKSA8PCAyMCkKKyNkZWZpbmUgX0FHR0xNVF9NQ1M2KHgpCQkJCSgoKHgpICYgMHhGKSA8PCAyNCkKKyNkZWZpbmUgX0FHR0xNVF9NQ1M3KHgpCQkJCSgoKHgpICYgMHhGKSA8PCAyOCkKKworI2RlZmluZQlSRVRSWV9MSU1JVF9TSE9SVF9TSElGVAkJCTgKKyNkZWZpbmUJUkVUUllfTElNSVRfTE9OR19TSElGVAkJCTAKKworI2RlZmluZSBfREFSRl9SQzEoeCkJCQkJKCh4KSAmIDB4MUYpCisjZGVmaW5lIF9EQVJGX1JDMih4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDgpCisjZGVmaW5lIF9EQVJGX1JDMyh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDE2KQorI2RlZmluZSBfREFSRl9SQzQoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCAyNCkKKyNkZWZpbmUgX0RBUkZfUkM1KHgpCQkJCSgoeCkgJiAweDFGKQorI2RlZmluZSBfREFSRl9SQzYoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCA4KQorI2RlZmluZSBfREFSRl9SQzcoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCAxNikKKyNkZWZpbmUgX0RBUkZfUkM4KHgpCQkJCSgoKHgpICYgMHgxRikgPDwgMjQpCisKKyNkZWZpbmUgX1JBUkZfUkMxKHgpCQkJCSgoeCkgJiAweDFGKQorI2RlZmluZSBfUkFSRl9SQzIoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCA4KQorI2RlZmluZSBfUkFSRl9SQzMoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCAxNikKKyNkZWZpbmUgX1JBUkZfUkM0KHgpCQkJCSgoKHgpICYgMHgxRikgPDwgMjQpCisjZGVmaW5lIF9SQVJGX1JDNSh4KQkJCQkoKHgpICYgMHgxRikKKyNkZWZpbmUgX1JBUkZfUkM2KHgpCQkJCSgoKHgpICYgMHgxRikgPDwgOCkKKyNkZWZpbmUgX1JBUkZfUkM3KHgpCQkJCSgoKHgpICYgMHgxRikgPDwgMTYpCisjZGVmaW5lIF9SQVJGX1JDOCh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDI0KQorCisjZGVmaW5lIEFDX1BBUkFNX1RYT1BfTElNSVRfT0ZGU0VUCQkxNgorI2RlZmluZSBBQ19QQVJBTV9FQ1dfTUFYX09GRlNFVAkJCTEyCisjZGVmaW5lIEFDX1BBUkFNX0VDV19NSU5fT0ZGU0VUCQkJOAorI2RlZmluZSBBQ19QQVJBTV9BSUZTX09GRlNFVAkJCTAKKworI2RlZmluZSBfQUlGUyh4KQkJCQkoeCkKKyNkZWZpbmUgX0VDV19NQVhfTUlOKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgX1RYT1BfTElNSVQoeCkJCQkJKCh4KSA8PCAxNikKKworI2RlZmluZSBfQkNOSUZTKHgpCQkJCSgoeCkgJiAweEZGKQorI2RlZmluZSBfQkNORUNXKHgpCQkJCSgoKCh4KSAmIDB4RikpIDw8IDgpCisKKyNkZWZpbmUgX0xSTCh4KQkJCQkJKCh4KSAmIDB4M0YpCisjZGVmaW5lIF9TUkwoeCkJCQkJCSgoKHgpICYgMHgzRikgPDwgOCkKKworI2RlZmluZSBfU0lGU19DQ0tfQ1RYKHgpCQkJKCh4KSAmIDB4RkYpCisjZGVmaW5lIF9TSUZTX0NDS19UUlgoeCkJCQkoKCh4KSAmIDB4RkYpIDw8IDgpOworCisjZGVmaW5lIF9TSUZTX09GRE1fQ1RYKHgpCQkJKCh4KSAmIDB4RkYpCisjZGVmaW5lIF9TSUZTX09GRE1fVFJYKHgpCQkJKCgoeCkgJiAweEZGKSA8PCA4KTsKKworI2RlZmluZSBfVEJUVF9QUk9ISUJJVF9IT0xEKHgpCQkJKCgoeCkgJiAweEZGKSA8PCA4KQorCisjZGVmaW5lIERJU19FRENBX0NOVF9EV04JCQlCSVQoMTEpCisKKyNkZWZpbmUgRU5fTUJTU0lECQkJCUJJVCgxKQorI2RlZmluZSBFTl9UWEJDTl9SUFQJCQkJQklUKDIpCisjZGVmaW5lCUVOX0JDTl9GVU5DVElPTgkJCQlCSVQoMykKKworI2RlZmluZSBUU0ZUUl9SU1QJCQkJQklUKDApCisjZGVmaW5lIFRTRlRSMV9SU1QJCQkJQklUKDEpCisKKyNkZWZpbmUgU1RPUF9CQ05RCQkJCUJJVCg2KQorCisjZGVmaW5lCURJU19UU0ZfVURUMF9OT1JNQUxfQ0hJUAkJQklUKDQpCisjZGVmaW5lCURJU19UU0ZfVURUMF9URVNUX0NISVAJCQlCSVQoNSkKKworI2RlZmluZQlBY21Id19Id0VuCQkJCUJJVCgwKQorI2RlZmluZQlBY21Id19CZXFFbgkJCQlCSVQoMSkKKyNkZWZpbmUJQWNtSHdfVmlxRW4JCQkJQklUKDIpCisjZGVmaW5lCUFjbUh3X1ZvcUVuCQkJCUJJVCgzKQorI2RlZmluZQlBY21Id19CZXFTdGF0dXMJCQkJQklUKDQpCisjZGVmaW5lCUFjbUh3X1ZpcVN0YXR1cwkJCQlCSVQoNSkKKyNkZWZpbmUJQWNtSHdfVm9xU3RhdHVzCQkJCUJJVCg2KQorCisjZGVmaW5lIEFQU0RPRkYJCQkJCUJJVCg2KQorI2RlZmluZSBBUFNET0ZGX1NUQVRVUwkJCQlCSVQoNykKKworI2RlZmluZSBCV18yME1IWgkJCQlCSVQoMikKKworI2RlZmluZSBSQVRFX0JJVE1BUF9BTEwJCQkJMHhGRkZGRgorCisjZGVmaW5lIFJBVEVfUlJTUl9DQ0tfT05MWV8xTQkJCTB4RkZGRjEKKworI2RlZmluZSBUU0ZSU1QJCQkJCUJJVCgwKQorI2RlZmluZSBESVNfR0NMSwkJCQlCSVQoMSkKKyNkZWZpbmUgUEFEX1NFTAkJCQkJQklUKDIpCisjZGVmaW5lIFBXUl9TVAkJCQkJQklUKDYpCisjZGVmaW5lIFBXUkJJVF9PV19FTgkJCQlCSVQoNykKKyNkZWZpbmUgQUNSQwkJCQkJQklUKDgpCisjZGVmaW5lIENGRU5ERk9STQkJCQlCSVQoOSkKKyNkZWZpbmUgSUNWCQkJCQlCSVQoMTApCisKKyNkZWZpbmUgQUFQCQkJCQlCSVQoMCkKKyNkZWZpbmUgQVBNCQkJCQlCSVQoMSkKKyNkZWZpbmUgQU0JCQkJCUJJVCgyKQorI2RlZmluZSBBQgkJCQkJQklUKDMpCisjZGVmaW5lIEFERDMJCQkJCUJJVCg0KQorI2RlZmluZSBBUFdSTUdUCQkJCQlCSVQoNSkKKyNkZWZpbmUgQ0JTU0lECQkJCQlCSVQoNikKKyNkZWZpbmUgQ0JTU0lEX0RBVEEJCQkJQklUKDYpCisjZGVmaW5lIENCU1NJRF9CQ04JCQkJQklUKDcpCisjZGVmaW5lIEFDUkMzMgkJCQkJQklUKDgpCisjZGVmaW5lIEFJQ1YJCQkJCUJJVCg5KQorI2RlZmluZSBBREYJCQkJCUJJVCgxMSkKKyNkZWZpbmUgQUNGCQkJCQlCSVQoMTIpCisjZGVmaW5lIEFNRgkJCQkJQklUKDEzKQorI2RlZmluZSBIVENfTE9DX0NUUkwJCQkJQklUKDE0KQorI2RlZmluZSBVQ19EQVRBX0VOCQkJCUJJVCgxNikKKyNkZWZpbmUgQk1fREFUQV9FTgkJCQlCSVQoMTcpCisjZGVmaW5lIE1GQkVOCQkJCQlCSVQoMjIpCisjZGVmaW5lIExTSUdFTgkJCQkJQklUKDIzKQorI2RlZmluZSBFbk1CSUQJCQkJCUJJVCgyNCkKKyNkZWZpbmUgQVBQX0JBU1NOCQkJCUJJVCgyNykKKyNkZWZpbmUgQVBQX1BIWVNUUwkJCQlCSVQoMjgpCisjZGVmaW5lIEFQUF9JQ1YJCQkJCUJJVCgyOSkKKyNkZWZpbmUgQVBQX01JQwkJCQkJQklUKDMwKQorI2RlZmluZSBBUFBfRkNTCQkJCQlCSVQoMzEpCisKKyNkZWZpbmUgX01JTl9TUEFDRSh4KQkJCQkoKHgpICYgMHg3KQorI2RlZmluZSBfU0hPUlRfR0lfUEFERElORyh4KQkJCSgoKHgpICYgMHgxRikgPDwgMykKKworI2RlZmluZSBSWEVSUl9UWVBFX09GRE1fUFBEVQkJCTAKKyNkZWZpbmUgUlhFUlJfVFlQRV9PRkRNX0ZBTFNFX0FMQVJNCQkxCisjZGVmaW5lCVJYRVJSX1RZUEVfT0ZETV9NUERVX09LCQkJMgorI2RlZmluZSBSWEVSUl9UWVBFX09GRE1fTVBEVV9GQUlMCQkzCisjZGVmaW5lIFJYRVJSX1RZUEVfQ0NLX1BQRFUJCQk0CisjZGVmaW5lIFJYRVJSX1RZUEVfQ0NLX0ZBTFNFX0FMQVJNCQk1CisjZGVmaW5lIFJYRVJSX1RZUEVfQ0NLX01QRFVfT0sJCQk2CisjZGVmaW5lIFJYRVJSX1RZUEVfQ0NLX01QRFVfRkFJTAkJNworI2RlZmluZSBSWEVSUl9UWVBFX0hUX1BQRFUJCQk4CisjZGVmaW5lIFJYRVJSX1RZUEVfSFRfRkFMU0VfQUxBUk0JCTkKKyNkZWZpbmUgUlhFUlJfVFlQRV9IVF9NUERVX1RPVEFMCQkxMAorI2RlZmluZSBSWEVSUl9UWVBFX0hUX01QRFVfT0sJCQkxMQorI2RlZmluZSBSWEVSUl9UWVBFX0hUX01QRFVfRkFJTAkJCTEyCisjZGVmaW5lIFJYRVJSX1RZUEVfUlhfRlVMTF9EUk9QCQkJMTUKKworI2RlZmluZSBSWEVSUl9DT1VOVEVSX01BU0sJCQkweEZGRkZGCisjZGVmaW5lIFJYRVJSX1JQVF9SU1QJCQkJQklUKDI3KQorI2RlZmluZSBfUlhFUlJfUlBUX1NFTCh0eXBlKQkJCSgodHlwZSkgPDwgMjgpCisKKyNkZWZpbmUJU0NSX1R4VXNlREsJCQkJQklUKDApCisjZGVmaW5lCVNDUl9SeFVzZURLCQkJCUJJVCgxKQorI2RlZmluZQlTQ1JfVHhFbmNFbmFibGUJCQkJQklUKDIpCisjZGVmaW5lCVNDUl9SeERlY0VuYWJsZQkJCQlCSVQoMykKKyNkZWZpbmUJU0NSX1NLQnlBMgkJCQlCSVQoNCkKKyNkZWZpbmUJU0NSX05vU0tNQwkJCQlCSVQoNSkKKyNkZWZpbmUgU0NSX1RYQkNVU0VESwkJCQlCSVQoNikKKyNkZWZpbmUgU0NSX1JYQkNVU0VESwkJCQlCSVQoNykKKworI2RlZmluZSBVU0JfSVNfSElHSF9TUEVFRAkJCTAKKyNkZWZpbmUgVVNCX0lTX0ZVTExfU1BFRUQJCQkxCisjZGVmaW5lIFVTQl9TUEVFRF9NQVNLCQkJCUJJVCg1KQorCisjZGVmaW5lIFVTQl9OT1JNQUxfU0lFX0VQX01BU0sJCQkweEYKKyNkZWZpbmUgVVNCX05PUk1BTF9TSUVfRVBfU0hJRlQJCQk0CisKKyNkZWZpbmUgVVNCX1RFU1RfRVBfTUFTSwkJCTB4MzAKKyNkZWZpbmUgVVNCX1RFU1RfRVBfU0hJRlQJCQk0CisKKyNkZWZpbmUgVVNCX0FHR19FTgkJCQlCSVQoMykKKworI2RlZmluZSBNQUNfQUREUl9MRU4JCQkJNgorI2RlZmluZSBMQVNUX0VOVFJZX09GX1RYX1BLVF9CVUZGRVIJCTE3NQorCisjZGVmaW5lIFBPTExJTkdfTExUX1RIUkVTSE9MRAkJCTIwCisjZGVmaW5lIFBPTExJTkdfUkVBRFlfVElNRU9VVF9DT1VOVAkJMzAwMAorCisjZGVmaW5lCU1BWF9NU1NfREVOU0lUWV8yVAkJCTB4MTMKKyNkZWZpbmUJTUFYX01TU19ERU5TSVRZXzFUCQkJMHgwQQorCisjZGVmaW5lIEVQUk9NX0NNRF9PUEVSQVRJTkdfTU9ERV9NQVNLCQkoKDEgPDwgNykgfCAoMSA8PCA2KSkKKyNkZWZpbmUgRVBST01fQ01EX0NPTkZJRwkJCTB4MworI2RlZmluZSBFUFJPTV9DTURfTE9BRAkJCQkxCisKKyNkZWZpbmUJSFdTRVRfTUFYX1NJWkVfOTJTCQkJSFdTRVRfTUFYX1NJWkUKKworI2RlZmluZQlIQUxfODE5MkNfSFdfR1BJT19XUFNfQklUCQlCSVQoMikKKworI2RlZmluZQlSUE1BQ19SRVNFVAkJCQkweDEwMAorI2RlZmluZQlSUE1BQ19UWFNUQVJUCQkJCTB4MTA0CisjZGVmaW5lCVJQTUFDX1RYTEVHQUNZU0lHCQkJMHgxMDgKKyNkZWZpbmUJUlBNQUNfVFhIVFNJRzEJCQkJMHgxMGMKKyNkZWZpbmUJUlBNQUNfVFhIVFNJRzIJCQkJMHgxMTAKKyNkZWZpbmUJUlBNQUNfUEhZREVCVUcJCQkJMHgxMTQKKyNkZWZpbmUJUlBNQUNfVFhQQUNLRVROVU0JCQkweDExOAorI2RlZmluZQlSUE1BQ19UWElETEUJCQkJMHgxMWMKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIwCQkJMHgxMjAKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIxCQkJMHgxMjQKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIyCQkJMHgxMjgKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIzCQkJMHgxMmMKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVI0CQkJMHgxMzAKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVI1CQkJMHgxMzQKKyNkZWZpbmUJUlBNQUNfVFhEQURBVFlQRQkJCTB4MTM4CisjZGVmaW5lCVJQTUFDX1RYUkFORE9NU0VFRAkJCTB4MTNjCisjZGVmaW5lCVJQTUFDX0NDS1BMQ1BQUkVBTUJMRQkJCTB4MTQwCisjZGVmaW5lCVJQTUFDX0NDS1BMQ1BIRUFERVIJCQkweDE0NAorI2RlZmluZQlSUE1BQ19DQ0tDUkMxNgkJCQkweDE0OAorI2RlZmluZQlSUE1BQ19PRkRNUlhDUkMzMk9LCQkJMHgxNzAKKyNkZWZpbmUJUlBNQUNfT0ZETVJYQ1JDMzJFcgkJCTB4MTc0CisjZGVmaW5lCVJQTUFDX09GRE1SWFBBUklUWUVSCQkJMHgxNzgKKyNkZWZpbmUJUlBNQUNfT0ZETVJYQ1JDOEVSCQkJMHgxN2MKKyNkZWZpbmUJUlBNQUNfQ0NLQ1JYUkMxNkVSCQkJMHgxODAKKyNkZWZpbmUJUlBNQUNfQ0NLQ1JYUkMzMkVSCQkJMHgxODQKKyNkZWZpbmUJUlBNQUNfQ0NLQ1JYUkMzMk9LCQkJMHgxODgKKyNkZWZpbmUJUlBNQUNfVFhTVEFUVVMJCQkJMHgxOGMKKworI2RlZmluZQlSRlBHQTBfUkZNT0QJCQkJMHg4MDAKKworI2RlZmluZQlSRlBHQTBfVFhJTkZPCQkJCTB4ODA0CisjZGVmaW5lCVJGUEdBMF9QU0RGVU5DVElPTgkJCTB4ODA4CisKKyNkZWZpbmUJUkZQR0EwX1RYR0FJTlNUQUdFCQkJMHg4MGMKKworI2RlZmluZQlSRlBHQTBfUkZUSU1JTkcxCQkJMHg4MTAKKyNkZWZpbmUJUkZQR0EwX1JGVElNSU5HMgkJCTB4ODE0CisKKyNkZWZpbmUJUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIxCQkweDgyMAorI2RlZmluZQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIJCTB4ODI0CisjZGVmaW5lCVJGUEdBMF9YQl9IU1NJUEFSQU1FVEVSMQkJMHg4MjgKKyNkZWZpbmUJUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIyCQkweDgyYworCisjZGVmaW5lCVJGUEdBMF9YQV9MU1NJUEFSQU1FVEVSCQkJMHg4NDAKKyNkZWZpbmUJUkZQR0EwX1hCX0xTU0lQQVJBTUVURVIJCQkweDg0NAorCisjZGVmaW5lCVJGUEdBMF9SRldBS0VVUFBBUkFNRVRFUgkJMHg4NTAKKyNkZWZpbmUJUkZQR0EwX1JGU0xFRVBVUFBBUkFNRVRFUgkJMHg4NTQKKworI2RlZmluZQlSRlBHQTBfWEFCX1NXSVRDSENPTlRST0wJCTB4ODU4CisjZGVmaW5lCVJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTAkJMHg4NWMKKworI2RlZmluZQlSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRQkJCTB4ODYwCisjZGVmaW5lCVJGUEdBMF9YQl9SRklOVEVSRkFDRU9FCQkJMHg4NjQKKworI2RlZmluZQlSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1cJCTB4ODcwCisjZGVmaW5lCVJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VTVwkJMHg4NzQKKworI2RlZmluZQlyRlBHQTBfWEFCX1JGUEFSQU1FVEVSCQkJMHg4NzgKKyNkZWZpbmUJckZQR0EwX1hDRF9SRlBBUkFNRVRFUgkJCTB4ODdjCisKKyNkZWZpbmUJUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjEJCQkweDg4MAorI2RlZmluZQlSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMgkJCTB4ODg0CisjZGVmaW5lCVJGUEdBMF9BTkFMT0dQQVJBTUVURVIzCQkJMHg4ODgKKyNkZWZpbmUJUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjQJCQkweDg4YworCisjZGVmaW5lCVJGUEdBMF9YQV9MU1NJUkVBREJBQ0sJCQkweDhhMAorI2RlZmluZQlSRlBHQTBfWEJfTFNTSVJFQURCQUNLCQkJMHg4YTQKKyNkZWZpbmUJUkZQR0EwX1hDX0xTU0lSRUFEQkFDSwkJCTB4OGE4CisjZGVmaW5lCVJGUEdBMF9YRF9MU1NJUkVBREJBQ0sJCQkweDhhYworCisjZGVmaW5lCVJGUEdBMF9QU0RSRVBPUlQJCQkweDhiNAorI2RlZmluZQlUUkFOU0NFSVZFQV9IU1BJX1JFQURCQUNLCQkweDhiOAorI2RlZmluZQlUUkFOU0NFSVZFQl9IU1BJX1JFQURCQUNLCQkweDhiYworI2RlZmluZQlSRUdfU0NfQ05UCQkJCTB4OGM0CisjZGVmaW5lCVJGUEdBMF9YQUJfUkZJTlRFUkZBQ0VSQgkJMHg4ZTAKKyNkZWZpbmUJUkZQR0EwX1hDRF9SRklOVEVSRkFDRVJCCQkweDhlNAorCisjZGVmaW5lCVJGUEdBMV9SRk1PRAkJCQkweDkwMAorCisjZGVmaW5lCVJGUEdBMV9UWEJMT0NLCQkJCTB4OTA0CisjZGVmaW5lCVJGUEdBMV9ERUJVR1NFTEVDVAkJCTB4OTA4CisjZGVmaW5lCVJGUEdBMV9UWElORk8JCQkJMHg5MGMKKworI2RlZmluZQlSQ0NLMF9TWVNURU0JCQkJMHhhMDAKKworI2RlZmluZQlSQ0NLMF9BRkVTRVRUSU5HCQkJMHhhMDQKKyNkZWZpbmUJUkNDSzBfQ0NBCQkJCTB4YTA4CisKKyNkZWZpbmUJUkNDSzBfUlhBR0MxCQkJCTB4YTBjCisjZGVmaW5lCVJDQ0swX1JYQUdDMgkJCQkweGExMAorCisjZGVmaW5lCVJDQ0swX1JYSFAJCQkJMHhhMTQKKworI2RlZmluZQlSQ0NLMF9EU1BQQVJBTUVURVIxCQkJMHhhMTgKKyNkZWZpbmUJUkNDSzBfRFNQUEFSQU1FVEVSMgkJCTB4YTFjCisKKyNkZWZpbmUJUkNDSzBfVFhGSUxURVIxCQkJCTB4YTIwCisjZGVmaW5lCVJDQ0swX1RYRklMVEVSMgkJCQkweGEyNAorI2RlZmluZQlSQ0NLMF9ERUJVR1BPUlQJCQkJMHhhMjgKKyNkZWZpbmUJUkNDSzBfRkFMU0VBTEFSTVJFUE9SVAkJCTB4YTJjCisjZGVmaW5lCVJDQ0swX1RSU1NJUkVQT1JUCQkJMHhhNTAKKyNkZWZpbmUJUkNDSzBfUlhSRVBPUlQJCQkJMHhhNTQKKyNkZWZpbmUJUkNDSzBfRkFDT1VOVEVSTE9XRVIJCQkweGE1YworI2RlZmluZQlSQ0NLMF9GQUNPVU5URVJVUFBFUgkJCTB4YTU4CisjZGVmaW5lCVJDQ0swX0NDQV9DTlQJCQkJMHhhNjAKKworCisvKiBQYWdlQigweEIwMCkgKi8KKyNkZWZpbmUJclBkcF9BbnRBCQkJCTB4YjAwCisjZGVmaW5lCXJQZHBfQW50QV80CQkJCTB4YjA0CisjZGVmaW5lCXJQZHBfQW50QV84CQkJCTB4YjA4CisjZGVmaW5lCXJQZHBfQW50QV9DCQkJCTB4YjBjCisjZGVmaW5lCXJQZHBfQW50QV8xMAkJCQkweGIxMAorI2RlZmluZQlyUGRwX0FudEFfMTQJCQkJMHhiMTQKKyNkZWZpbmUJclBkcF9BbnRBXzE4CQkJCTB4YjE4CisjZGVmaW5lCXJQZHBfQW50QV8xQwkJCQkweGIxYworI2RlZmluZQlyUGRwX0FudEFfMjAJCQkJMHhiMjAKKyNkZWZpbmUJclBkcF9BbnRBXzI0CQkJCTB4YjI0CisKKyNkZWZpbmUJckNvbmZpZ19QbXBkX0FudEEJCQkweGIyOAorI2RlZmluZQlyQ29uZmlnX3JhbTY0eDE2CQkJMHhiMmMKKworI2RlZmluZQlyQm5kQQkJCQkJMHhiMzAKKyNkZWZpbmUJckhzc2lQYXIJCQkJMHhiMzQKKworI2RlZmluZQlyQ29uZmlnX0FudEEJCQkJMHhiNjgKKyNkZWZpbmUJckNvbmZpZ19BbnRCCQkJCTB4YjZjCisKKyNkZWZpbmUJclBkcF9BbnRCCQkJCTB4YjcwCisjZGVmaW5lCXJQZHBfQW50Ql80CQkJCTB4Yjc0CisjZGVmaW5lCXJQZHBfQW50Ql84CQkJCTB4Yjc4CisjZGVmaW5lCXJQZHBfQW50Ql9DCQkJCTB4YjdjCisjZGVmaW5lCXJQZHBfQW50Ql8xMAkJCQkweGI4MAorI2RlZmluZQlyUGRwX0FudEJfMTQJCQkJMHhiODQKKyNkZWZpbmUJclBkcF9BbnRCXzE4CQkJCTB4Yjg4CisjZGVmaW5lCXJQZHBfQW50Ql8xQwkJCQkweGI4YworI2RlZmluZQlyUGRwX0FudEJfMjAJCQkJMHhiOTAKKyNkZWZpbmUJclBkcF9BbnRCXzI0CQkJCTB4Yjk0CisKKyNkZWZpbmUJckNvbmZpZ19QbXBkX0FudEIJCQkweGI5OAorCisjZGVmaW5lCXJCbmRCCQkJCQkweGJhMAorCisjZGVmaW5lCXJBUEsJCQkJCTB4YmQ4CisjZGVmaW5lCXJQbV9SeDBfQW50QQkJCQkweGJkYworI2RlZmluZQlyUG1fUngxX0FudEEJCQkJMHhiZTAKKyNkZWZpbmUJclBtX1J4Ml9BbnRBCQkJCTB4YmU0CisjZGVmaW5lCXJQbV9SeDNfQW50QQkJCQkweGJlOAorI2RlZmluZQlyUG1fUngwX0FudEIJCQkJMHhiZWMKKyNkZWZpbmUJclBtX1J4MV9BbnRCCQkJCTB4YmYwCisjZGVmaW5lCXJQbV9SeDJfQW50QgkJCQkweGJmNAorI2RlZmluZQlyUG1fUngzX0FudEIJCQkJMHhiZjgKKworLypQYWdlIEMqLworI2RlZmluZQlST0ZETTBfTFNURgkJCQkweGMwMAorCisjZGVmaW5lCVJPRkRNMF9UUlhQQVRIRU5BQkxFCQkJMHhjMDQKKyNkZWZpbmUJUk9GRE0wX1RSTVVYUEFSCQkJCTB4YzA4CisjZGVmaW5lCVJPRkRNMF9UUlNXSVNPTEFUSU9OCQkJMHhjMGMKKworI2RlZmluZQlST0ZETTBfWEFSWEFGRQkJCQkweGMxMAorI2RlZmluZQlST0ZETTBfWEFSWElRSU1CQUxBTkNFCQkJMHhjMTQKKyNkZWZpbmUJUk9GRE0wX1hCUlhBRkUJCQkJMHhjMTgKKyNkZWZpbmUJUk9GRE0wX1hCUlhJUUlNQkFMQU5DRQkJCTB4YzFjCisjZGVmaW5lCVJPRkRNMF9YQ1JYQUZFCQkJCTB4YzIwCisjZGVmaW5lCVJPRkRNMF9YQ1JYSVFJTUJBTkxBTkNFCQkJMHhjMjQKKyNkZWZpbmUJUk9GRE0wX1hEUlhBRkUJCQkJMHhjMjgKKyNkZWZpbmUJUk9GRE0wX1hEUlhJUUlNQkFMQU5DRQkJCTB4YzJjCisKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IxCQkJMHhjMzAKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IyCQkJMHhjMzQKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IzCQkJMHhjMzgKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1I0CQkJMHhjM2MKKworI2RlZmluZQlST0ZETTBfUlhEU1AJCQkJMHhjNDAKKyNkZWZpbmUJUk9GRE0wX0NGT0FORERBR0MJCQkweGM0NAorI2RlZmluZQlST0ZETTBfQ0NBRFJPUFRIUkVTSE9MRAkJCTB4YzQ4CisjZGVmaW5lCVJPRkRNMF9FQ0NBVEhSRVNIT0xECQkJMHhjNGMKKworI2RlZmluZQlST0ZETTBfWEFBR0NDT1JFMQkJCTB4YzUwCisjZGVmaW5lCVJPRkRNMF9YQUFHQ0NPUkUyCQkJMHhjNTQKKyNkZWZpbmUJUk9GRE0wX1hCQUdDQ09SRTEJCQkweGM1OAorI2RlZmluZQlST0ZETTBfWEJBR0NDT1JFMgkJCTB4YzVjCisjZGVmaW5lCVJPRkRNMF9YQ0FHQ0NPUkUxCQkJMHhjNjAKKyNkZWZpbmUJUk9GRE0wX1hDQUdDQ09SRTIJCQkweGM2NAorI2RlZmluZQlST0ZETTBfWERBR0NDT1JFMQkJCTB4YzY4CisjZGVmaW5lCVJPRkRNMF9YREFHQ0NPUkUyCQkJMHhjNmMKKworI2RlZmluZQlST0ZETTBfQUdDUEFSQU1FVEVSMQkJCTB4YzcwCisjZGVmaW5lCVJPRkRNMF9BR0NQQVJBTUVURVIyCQkJMHhjNzQKKyNkZWZpbmUJUk9GRE0wX0FHQ1JTU0lUQUJMRQkJCTB4Yzc4CisjZGVmaW5lCVJPRkRNMF9IVFNURkFHQwkJCQkweGM3YworCisjZGVmaW5lCVJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UJCQkweGM4MAorI2RlZmluZQlST0ZETTBfWEFUWEFGRQkJCQkweGM4NAorI2RlZmluZQlST0ZETTBfWEJUWElRSU1CQUxBTkNFCQkJMHhjODgKKyNkZWZpbmUJUk9GRE0wX1hCVFhBRkUJCQkJMHhjOGMKKyNkZWZpbmUJUk9GRE0wX1hDVFhJUUlNQkFMQU5DRQkJCTB4YzkwCisjZGVmaW5lCVJPRkRNMF9YQ1RYQUZFCQkJCTB4Yzk0CisjZGVmaW5lCVJPRkRNMF9YRFRYSVFJTUJBTEFOQ0UJCQkweGM5OAorI2RlZmluZQlST0ZETTBfWERUWEFGRQkJCQkweGM5YworCisjZGVmaW5lIFJPRkRNMF9SWElRRVhUQU5UQQkJCTB4Y2EwCisjZGVmaW5lCVJPRkRNMF9UWENPRUZGMQkJCQkweGNhNAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjIJCQkJMHhjYTgKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkYzCQkJCTB4Y2FjCisjZGVmaW5lCVJPRkRNMF9UWENPRUZGNAkJCQkweGNiMAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjUJCQkJMHhjYjQKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkY2CQkJCTB4Y2I4CisKKyNkZWZpbmUJUk9GRE0wX1JYSFBQQVJBTUVURVIJCQkweGNlMAorI2RlZmluZQlST0ZETTBfVFhQU0VVRE9OT0lTRVdHVAkJCTB4Y2U0CisjZGVmaW5lCVJPRkRNMF9GUkFNRVNZTkMJCQkweGNmMAorI2RlZmluZQlST0ZETTBfREZTUkVQT1JUCQkJMHhjZjQKKworCisjZGVmaW5lCVJPRkRNMV9MU1RGCQkJCTB4ZDAwCisjZGVmaW5lCVJPRkRNMV9UUlhQQVRIRU5BQkxFCQkJMHhkMDQKKworI2RlZmluZQlST0ZETTFfQ0YwCQkJCTB4ZDA4CisjZGVmaW5lCVJPRkRNMV9DU0kxCQkJCTB4ZDEwCisjZGVmaW5lCVJPRkRNMV9TQkQJCQkJMHhkMTQKKyNkZWZpbmUJUk9GRE0xX0NTSTIJCQkJMHhkMTgKKyNkZWZpbmUJUk9GRE0xX0NGT1RSQUNLSU5HCQkJMHhkMmMKKyNkZWZpbmUJUk9GRE0xX1RSWE1FU0FVUkUxCQkJMHhkMzQKKyNkZWZpbmUJUk9GRE0xX0lOVEZERVQJCQkJMHhkM2MKKyNkZWZpbmUJUk9GRE0xX1BTRVVET05PSVNFU1RBVEVBQgkJMHhkNTAKKyNkZWZpbmUJUk9GRE0xX1BTRVVET05PSVNFU1RBVEVDRAkJMHhkNTQKKyNkZWZpbmUJUk9GRE0xX1JYUFNFVURPTk9JU0VXR1QJCQkweGQ1OAorCisjZGVmaW5lCVJPRkRNX1BIWUNPVU5URVIxCQkJMHhkYTAKKyNkZWZpbmUJUk9GRE1fUEhZQ09VTlRFUjIJCQkweGRhNAorI2RlZmluZQlST0ZETV9QSFlDT1VOVEVSMwkJCTB4ZGE4CisKKyNkZWZpbmUJUk9GRE1fU0hPUlRDRk9BQgkJCTB4ZGFjCisjZGVmaW5lCVJPRkRNX1NIT1JUQ0ZPQ0QJCQkweGRiMAorI2RlZmluZQlST0ZETV9MT05HQ0ZPQUIJCQkJMHhkYjQKKyNkZWZpbmUJUk9GRE1fTE9OR0NGT0NECQkJCTB4ZGI4CisjZGVmaW5lCVJPRkRNX1RBSUxDRjBBQgkJCQkweGRiYworI2RlZmluZQlST0ZETV9UQUlMQ0YwQ0QJCQkJMHhkYzAKKyNkZWZpbmUJUk9GRE1fUFdNRUFTVVJFMQkJCTB4ZGM0CisjZGVmaW5lCVJPRkRNX1BXTUVBU1VSRTIJCQkweGRjOAorI2RlZmluZQlST0ZETV9CV1JFUE9SVAkJCQkweGRjYworI2RlZmluZQlST0ZETV9BR0NSRVBPUlQJCQkJMHhkZDAKKyNkZWZpbmUJUk9GRE1fUlhTTlIJCQkJMHhkZDQKKyNkZWZpbmUJUk9GRE1fUlhFVk1DU0kJCQkJMHhkZDgKKyNkZWZpbmUJUk9GRE1fU0lHUkVQT1JUCQkJCTB4ZGRjCisKKyNkZWZpbmUJUlRYQUdDX0FfUkFURTE4XzA2CQkJMHhlMDAKKyNkZWZpbmUJUlRYQUdDX0FfUkFURTU0XzI0CQkJMHhlMDQKKyNkZWZpbmUJUlRYQUdDX0FfQ0NLMV9NQ1MzMgkJCTB4ZTA4CisjZGVmaW5lCVJUWEFHQ19BX01DUzAzX01DUzAwCQkJMHhlMTAKKyNkZWZpbmUJUlRYQUdDX0FfTUNTMDdfTUNTMDQJCQkweGUxNAorI2RlZmluZQlSVFhBR0NfQV9NQ1MxMV9NQ1MwOAkJCTB4ZTE4CisjZGVmaW5lCVJUWEFHQ19BX01DUzE1X01DUzEyCQkJMHhlMWMKKworI2RlZmluZQlSVFhBR0NfQl9SQVRFMThfMDYJCQkweDgzMAorI2RlZmluZQlSVFhBR0NfQl9SQVRFNTRfMjQJCQkweDgzNAorI2RlZmluZQlSVFhBR0NfQl9DQ0sxXzU1X01DUzMyCQkJMHg4MzgKKyNkZWZpbmUJUlRYQUdDX0JfTUNTMDNfTUNTMDAJCQkweDgzYworI2RlZmluZQlSVFhBR0NfQl9NQ1MwN19NQ1MwNAkJCTB4ODQ4CisjZGVmaW5lCVJUWEFHQ19CX01DUzExX01DUzA4CQkJMHg4NGMKKyNkZWZpbmUJUlRYQUdDX0JfTUNTMTVfTUNTMTIJCQkweDg2OAorI2RlZmluZQlSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTEJCTB4ODZjCisKKyNkZWZpbmUJUkZQR0EwX0lRSwkJCQkweGUyOAorI2RlZmluZQlSVHhfSVFLX1RvbmVfQQkJCQkweGUzMAorI2RlZmluZQlSUnhfSVFLX1RvbmVfQQkJCQkweGUzNAorI2RlZmluZQlSVHhfSVFLX1BJX0EJCQkJMHhlMzgKKyNkZWZpbmUJUlJ4X0lRS19QSV9BCQkJCTB4ZTNjCisKKyNkZWZpbmUJUlR4X0lRSwkJCQkJMHhlNDAKKyNkZWZpbmUJUlJ4X0lRSwkJCQkJMHhlNDQKKyNkZWZpbmUJUklRS19BR0NfUHRzCQkJCTB4ZTQ4CisjZGVmaW5lCVJJUUtfQUdDX1JzcAkJCQkweGU0YworI2RlZmluZQlSVHhfSVFLX1RvbmVfQgkJCQkweGU1MAorI2RlZmluZQlSUnhfSVFLX1RvbmVfQgkJCQkweGU1NAorI2RlZmluZQlSVHhfSVFLX1BJX0IJCQkJMHhlNTgKKyNkZWZpbmUJUlJ4X0lRS19QSV9CCQkJCTB4ZTVjCisjZGVmaW5lCVJJUUtfQUdDX0NvbnQJCQkJMHhlNjAKKworI2RlZmluZQlSQmx1ZV9Ub290aAkJCQkweGU2YworI2RlZmluZQlSUnhfV2FpdF9DQ0EJCQkJMHhlNzAKKyNkZWZpbmUJUlR4X0NDS19SRk9OCQkJCTB4ZTc0CisjZGVmaW5lCVJUeF9DQ0tfQkJPTgkJCQkweGU3OAorI2RlZmluZQlSVHhfT0ZETV9SRk9OCQkJCTB4ZTdjCisjZGVmaW5lCVJUeF9PRkRNX0JCT04JCQkJMHhlODAKKyNkZWZpbmUJUlR4X1RvX1J4CQkJCTB4ZTg0CisjZGVmaW5lCVJUeF9Ub19UeAkJCQkweGU4OAorI2RlZmluZQlSUnhfQ0NLCQkJCQkweGU4YworCisjZGVmaW5lCVJUeF9Qb3dlcl9CZWZvcmVfSVFLX0EJCQkweGU5NAorI2RlZmluZQlSVHhfUG93ZXJfQWZ0ZXJfSVFLX0EJCQkweGU5YworCisjZGVmaW5lCVJSeF9Qb3dlcl9CZWZvcmVfSVFLX0EJCQkweGVhMAorI2RlZmluZQlSUnhfUG93ZXJfQmVmb3JlX0lRS19BXzIJCTB4ZWE0CisjZGVmaW5lCVJSeF9Qb3dlcl9BZnRlcl9JUUtfQQkJCTB4ZWE4CisjZGVmaW5lCVJSeF9Qb3dlcl9BZnRlcl9JUUtfQV8yCQkJMHhlYWMKKworI2RlZmluZQlSVHhfUG93ZXJfQmVmb3JlX0lRS19CCQkJMHhlYjQKKyNkZWZpbmUJUlR4X1Bvd2VyX0FmdGVyX0lRS19CCQkJMHhlYmMKKworI2RlZmluZQlSUnhfUG93ZXJfQmVmb3JlX0lRS19CCQkJMHhlYzAKKyNkZWZpbmUJUlJ4X1Bvd2VyX0JlZm9yZV9JUUtfQl8yCQkweGVjNAorI2RlZmluZQlSUnhfUG93ZXJfQWZ0ZXJfSVFLX0IJCQkweGVjOAorI2RlZmluZQlSUnhfUG93ZXJfQWZ0ZXJfSVFLX0JfMgkJCTB4ZWNjCisKKyNkZWZpbmUJUlJ4X09GRE0JCQkJMHhlZDAKKyNkZWZpbmUJUlJ4X1dhaXRfUklGUwkJCQkweGVkNAorI2RlZmluZQlSUnhfVE9fUngJCQkJMHhlZDgKKyNkZWZpbmUJUlN0YW5kYnkJCQkJMHhlZGMKKyNkZWZpbmUJUlNsZWVwCQkJCQkweGVlMAorI2RlZmluZQlSUE1QRF9BTkFFTgkJCQkweGVlYworCisjZGVmaW5lCVJaRUJSQTFfSFNTSUVOQUJMRQkJCTB4MAorI2RlZmluZQlSWkVCUkExX1RSWEVOQUJMRTEJCQkweDEKKyNkZWZpbmUJUlpFQlJBMV9UUlhFTkFCTEUyCQkJMHgyCisjZGVmaW5lCVJaRUJSQTFfQUdDCQkJCTB4NAorI2RlZmluZQlSWkVCUkExX0NIQVJHRVBVTVAJCQkweDUKKyNkZWZpbmUJUlpFQlJBMV9DSEFOTkVMCQkJCTB4NworCisjZGVmaW5lCVJaRUJSQTFfVFhHQUlOCQkJCTB4OAorI2RlZmluZQlSWkVCUkExX1RYTFBGCQkJCTB4OQorI2RlZmluZQlSWkVCUkExX1JYTFBGCQkJCTB4YgorI2RlZmluZQlSWkVCUkExX1JYSFBGQ09STkVSCQkJMHhjCisKKyNkZWZpbmUJUkdMT0JBTENUUkwJCQkJMAorI2RlZmluZQlSUlRMODI1Nl9UWExQRgkJCQkxOQorI2RlZmluZQlSUlRMODI1Nl9SWExQRgkJCQkxMQorI2RlZmluZQlSUlRMODI1OF9UWExQRgkJCQkweDExCisjZGVmaW5lCVJSVEw4MjU4X1JYTFBGCQkJCTB4MTMKKyNkZWZpbmUJUlJUTDgyNThfUlNTSUxQRgkJCTB4YQorCisjZGVmaW5lCVJGX0FDCQkJCQkweDAwCisKKyNkZWZpbmUJUkZfSVFBREpfRzEJCQkJMHgwMQorI2RlZmluZQlSRl9JUUFESl9HMgkJCQkweDAyCisjZGVmaW5lCVJGX1BPV19UUlNXCQkJCTB4MDUKKworI2RlZmluZQlSRl9HQUlOX1JYCQkJCTB4MDYKKyNkZWZpbmUJUkZfR0FJTl9UWAkJCQkweDA3CisKKyNkZWZpbmUJUkZfVFhNX0lEQUMJCQkJMHgwOAorI2RlZmluZQlSRl9CU19JUUdFTgkJCQkweDBGCisKKyNkZWZpbmUJUkZfTU9ERTEJCQkJMHgxMAorI2RlZmluZQlSRl9NT0RFMgkJCQkweDExCisKKyNkZWZpbmUJUkZfUlhfQUdDX0hQCQkJCTB4MTIKKyNkZWZpbmUJUkZfVFhfQUdDCQkJCTB4MTMKKyNkZWZpbmUJUkZfQklBUwkJCQkJMHgxNAorI2RlZmluZQlSRl9JUEEJCQkJCTB4MTUKKyNkZWZpbmUJUkZfUE9XX0FCSUxJVFkJCQkJMHgxNworI2RlZmluZQlSRl9NT0RFX0FHCQkJCTB4MTgKKyNkZWZpbmUJUlJGQ0hBTk5FTAkJCQkweDE4CisjZGVmaW5lCVJGX0NITkxCVwkJCQkweDE4CisjZGVmaW5lCVJGX1RPUAkJCQkJMHgxOQorCisjZGVmaW5lCVJGX1JYX0cxCQkJCTB4MUEKKyNkZWZpbmUJUkZfUlhfRzIJCQkJMHgxQgorCisjZGVmaW5lCVJGX1JYX0JCMgkJCQkweDFDCisjZGVmaW5lCVJGX1JYX0JCMQkJCQkweDFECisKKyNkZWZpbmUJUkZfUkNLMQkJCQkJMHgxRQorI2RlZmluZQlSRl9SQ0syCQkJCQkweDFGCisKKyNkZWZpbmUJUkZfVFhfRzEJCQkJMHgyMAorI2RlZmluZQlSRl9UWF9HMgkJCQkweDIxCisjZGVmaW5lCVJGX1RYX0czCQkJCTB4MjIKKworI2RlZmluZQlSRl9UWF9CQjEJCQkJMHgyMworI2RlZmluZQlSRl9UX01FVEVSCQkJCTB4NDIKKworI2RlZmluZQlSRl9TWU5fRzEJCQkJMHgyNQorI2RlZmluZQlSRl9TWU5fRzIJCQkJMHgyNgorI2RlZmluZQlSRl9TWU5fRzMJCQkJMHgyNworI2RlZmluZQlSRl9TWU5fRzQJCQkJMHgyOAorI2RlZmluZQlSRl9TWU5fRzUJCQkJMHgyOQorI2RlZmluZQlSRl9TWU5fRzYJCQkJMHgyQQorI2RlZmluZQlSRl9TWU5fRzcJCQkJMHgyQgorI2RlZmluZQlSRl9TWU5fRzgJCQkJMHgyQworCisjZGVmaW5lCVJGX1JDS19PUwkJCQkweDMwCisjZGVmaW5lCVJGX1RYUEFfRzEJCQkJMHgzMQorI2RlZmluZQlSRl9UWFBBX0cyCQkJCTB4MzIKKyNkZWZpbmUJUkZfVFhQQV9HMwkJCQkweDMzCisKKyNkZWZpbmUJUkZfVFhfQklBU19BCQkJCTB4MzUKKyNkZWZpbmUJUkZfVFhfQklBU19ECQkJCTB4MzYKKyNkZWZpbmUJUkZfTE9CRl85CQkJCTB4MzgKKyNkZWZpbmUJUkZfUlhSRl9BMwkJCQkweDNDCisjZGVmaW5lCVJGX1RSU1cJCQkJCTB4M0YKKworI2RlZmluZQlSRl9UWFJGX0EyCQkJCTB4NDEKKyNkZWZpbmUJUkZfVFhQQV9HNAkJCQkweDQ2CisjZGVmaW5lCVJGX1RYUEFfQTQJCQkJMHg0QgorCisjZGVmaW5lCVJGX1dFX0xVVAkJCQkweEVGCisKKyNkZWZpbmUJQkJCUkVTRVRCCQkJCTB4MTAwCisjZGVmaW5lCUJHTE9CQUxSRVNFVEIJCQkJMHgyMDAKKyNkZWZpbmUJQk9GRE1UWFNUQVJUCQkJCTB4NAorI2RlZmluZQlCQ0NLVFhTVEFSVAkJCQkweDgKKyNkZWZpbmUJQkNSQzMyREVCVUcJCQkJMHgxMDAKKyNkZWZpbmUJQlBNQUNMT09QQkFDSwkJCQkweDEwCisjZGVmaW5lCUJUWExTSUcJCQkJCTB4ZmZmZmZmCisjZGVmaW5lCUJPRkRNVFhSQVRFCQkJCTB4ZgorI2RlZmluZQlCT0ZETVRYUkVTRVJWRUQJCQkJMHgxMAorI2RlZmluZQlCT0ZETVRYTEVOR1RICQkJCTB4MWZmZTAKKyNkZWZpbmUJQk9GRE1UWFBBUklUWQkJCQkweDIwMDAwCisjZGVmaW5lCUJUWEhUU0lHMQkJCQkweGZmZmZmZgorI2RlZmluZQlCVFhIVE1DU1JBVEUJCQkJMHg3ZgorI2RlZmluZQlCVFhIVEJXCQkJCQkweDgwCisjZGVmaW5lCUJUWEhUTEVOR1RICQkJCTB4ZmZmZjAwCisjZGVmaW5lCUJUWEhUU0lHMgkJCQkweGZmZmZmZgorI2RlZmluZQlCVFhIVFNNT09USElORwkJCQkweDEKKyNkZWZpbmUJQlRYSFRTT1VORElORwkJCQkweDIKKyNkZWZpbmUJQlRYSFRSRVNFUlZFRAkJCQkweDQKKyNkZWZpbmUJQlRYSFRBR0dSRUFUSU9OCQkJCTB4OAorI2RlZmluZQlCVFhIVFNUQkMJCQkJMHgzMAorI2RlZmluZQlCVFhIVEFEVkFOQ0VDT0RJTkcJCQkweDQwCisjZGVmaW5lCUJUWEhUU0hPUlRHSQkJCQkweDgwCisjZGVmaW5lCUJUWEhUTlVNQkVSSFRfTFRGCQkJMHgzMDAKKyNkZWZpbmUJQlRYSFRDUkM4CQkJCTB4M2ZjMDAKKyNkZWZpbmUJQkNPVU5URVJSRVNFVAkJCQkweDEwMDAwCisjZGVmaW5lCUJOVU1PRk9GRE1UWAkJCQkweGZmZmYKKyNkZWZpbmUJQk5VTU9GQ0NLVFgJCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCVFhJRExFSU5URVJWQUwJCQkJMHhmZmZmCisjZGVmaW5lCUJPRkRNU0VSVklDRQkJCQkweGZmZmYwMDAwCisjZGVmaW5lCUJUWE1BQ0hFQURFUgkJCQkweGZmZmZmZmZmCisjZGVmaW5lCUJUWERBVEFJTklUCQkJCTB4ZmYKKyNkZWZpbmUJQlRYSFRNT0RFCQkJCTB4MTAwCisjZGVmaW5lCUJUWERBVEFUWVBFCQkJCTB4MzAwMDAKKyNkZWZpbmUJQlRYUkFORE9NU0VFRAkJCQkweGZmZmZmZmZmCisjZGVmaW5lCUJDQ0tUWFBSRUFNQkxFCQkJCTB4MQorI2RlZmluZQlCQ0NLVFhTRkQJCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCQ0NLVFhTSUcJCQkJMHhmZgorI2RlZmluZQlCQ0NLVFhTRVJWSUNFCQkJCTB4ZmYwMAorI2RlZmluZQlCQ0NLTEVOR1RIRVhUCQkJCTB4ODAwMAorI2RlZmluZQlCQ0NLVFhMRU5HSFQJCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCQ0NLVFhDUkMxNgkJCQkweGZmZmYKKyNkZWZpbmUJQkNDS1RYU1RBVFVTCQkJCTB4MQorI2RlZmluZQlCT0ZETVRYU1RBVFVTCQkJCTB4MgorI2RlZmluZSBJU19CQl9SRUdfT0ZGU0VUXzkyUyhfT2Zmc2V0KQlcCisJKChfT2Zmc2V0ID49IDB4ODAwKSAmJiAoX09mZnNldCA8PSAweGZmZikpCisKKyNkZWZpbmUJQlJGTU9ECQkJCQkweDEKKyNkZWZpbmUJQkpBUEFOTU9ERQkJCQkweDIKKyNkZWZpbmUJQkNDS1RYU0MJCQkJMHgzMAorI2RlZmluZQlCQ0NLRU4JCQkJCTB4MTAwMDAwMAorI2RlZmluZQlCT0ZETUVOCQkJCQkweDIwMDAwMDAKKworI2RlZmluZQlCT0ZETVJYQURDUEhBU0UJCQkJMHgxMDAwMAorI2RlZmluZQlCT0ZETVRYREFDUEhBU0UJCQkJMHg0MDAwMAorI2RlZmluZQlCWEFUWEFHQwkJCQkweDNmCisKKyNkZWZpbmUJQlhCVFhBR0MJCQkJMHhmMDAKKyNkZWZpbmUJQlhDVFhBR0MJCQkJMHhmMDAwCisjZGVmaW5lCUJYRFRYQUdDCQkJCTB4ZjAwMDAKKworI2RlZmluZQlCUEFTVEFSVAkJCQkweGYwMDAwMDAwCisjZGVmaW5lCUJUUlNUQVJUCQkJCTB4MDBmMDAwMDAKKyNkZWZpbmUJQlJGU1RBUlQJCQkJMHgwMDAwZjAwMAorI2RlZmluZQlCQkJTVEFSVAkJCQkweDAwMDAwMGYwCisjZGVmaW5lCUJCQkNDS1NUQVJUCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUJQlBBRU5ECQkJCQkweGYKKyNkZWZpbmUJQlRSRU5ECQkJCQkweDBmMDAwMDAwCisjZGVmaW5lCUJSRkVORAkJCQkJMHgwMDBmMDAwMAorI2RlZmluZQlCQ0NBTUFTSwkJCQkweDAwMDAwMGYwCisjZGVmaW5lCUJSMlJDQ0FNQVNLCQkJCTB4MDAwMDBmMDAKKyNkZWZpbmUJQkhTU0lfUjJUREVMQVkJCQkJMHhmODAwMDAwMAorI2RlZmluZQlCSFNTSV9UMlJERUxBWQkJCQkweGY4MDAwMAorI2RlZmluZQlCQ09OVFhIU1NJCQkJCTB4NDAwCisjZGVmaW5lCUJJR0ZST01DQ0sJCQkJMHgyMDAKKyNkZWZpbmUJQkFHQ0FERFJFU1MJCQkJMHgzZgorI2RlZmluZQlCUlhIUFRYCQkJCQkweDcwMDAKKyNkZWZpbmUJQlJYSFAyUlgJCQkJMHgzODAwMAorI2RlZmluZQlCUlhIUENDS0lOSQkJCQkweGMwMDAwCisjZGVmaW5lCUJBR0NUWENPREUJCQkJMHhjMDAwMDAKKyNkZWZpbmUJQkFHQ1JYQ09ERQkJCQkweDMwMDAwMAorCisjZGVmaW5lCUIzV0lSRURBVEFMRU5HVEgJCQkweDgwMAorI2RlZmluZQlCM1dJUkVBRERSRUFBTEVOR1RICQkJMHg0MDAKKworI2RlZmluZQlCM1dJUkVSRlBPV0VSRE9XTgkJCTB4MQorI2RlZmluZQlCNUdQQVBFUE9MQVJJVFkJCQkJMHg0MDAwMDAwMAorI2RlZmluZQlCMkdQQVBFUE9MQVJJVFkJCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCUkZTV19UWERFRkFVTFRBTlQJCQkweDMKKyNkZWZpbmUJQlJGU1dfVFhPUFRJT05BTlQJCQkweDMwCisjZGVmaW5lCUJSRlNXX1JYREVGQVVMVEFOVAkJCTB4MzAwCisjZGVmaW5lCUJSRlNXX1JYT1BUSU9OQU5UCQkJMHgzMDAwCisjZGVmaW5lCUJSRlNJXzNXSVJFREFUQQkJCQkweDEKKyNkZWZpbmUJQlJGU0lfM1dJUkVDTE9DSwkJCTB4MgorI2RlZmluZQlCUkZTSV8zV0lSRUxPQUQJCQkJMHg0CisjZGVmaW5lCUJSRlNJXzNXSVJFUlcJCQkJMHg4CisjZGVmaW5lCUJSRlNJXzNXSVJFCQkJCTB4ZgorCisjZGVmaW5lCUJSRlNJX1JGRU5WCQkJCTB4MTAKKworI2RlZmluZQlCUkZTSV9UUlNXCQkJCTB4MjAKKyNkZWZpbmUJQlJGU0lfVFJTV0IJCQkJMHg0MAorI2RlZmluZQlCUkZTSV9BTlRTVwkJCQkweDEwMAorI2RlZmluZQlCUkZTSV9BTlRTV0IJCQkJMHgyMDAKKyNkZWZpbmUJQlJGU0lfUEFQRQkJCQkweDQwMAorI2RlZmluZQlCUkZTSV9QQVBFNUcJCQkJMHg4MDAKKyNkZWZpbmUJQkJBTkRTRUxFQ1QJCQkJMHgxCisjZGVmaW5lCUJIVFNJRzJfR0kJCQkJMHg4MAorI2RlZmluZQlCSFRTSUcyX1NNT09USElORwkJCTB4MDEKKyNkZWZpbmUJQkhUU0lHMl9TT1VORElORwkJCTB4MDIKKyNkZWZpbmUJQkhUU0lHMl9BR0dSRUFUT04JCQkweDA4CisjZGVmaW5lCUJIVFNJRzJfU1RCQwkJCQkweDMwCisjZGVmaW5lCUJIVFNJRzJfQURWQ09ESU5HCQkJMHg0MAorI2RlZmluZQlCSFRTSUcyX05VTU9GSFRMVEYJCQkweDMwMAorI2RlZmluZQlCSFRTSUcyX0NSQzgJCQkJMHgzZmMKKyNkZWZpbmUJQkhUU0lHMV9NQ1MJCQkJMHg3ZgorI2RlZmluZQlCSFRTSUcxX0JBTkRXSURUSAkJCTB4ODAKKyNkZWZpbmUJQkhUU0lHMV9IVExFTkdUSAkJCTB4ZmZmZgorI2RlZmluZQlCTFNJR19SQVRFCQkJCTB4ZgorI2RlZmluZQlCTFNJR19SRVNFUlZFRAkJCQkweDEwCisjZGVmaW5lCUJMU0lHX0xFTkdUSAkJCQkweDFmZmZlCisjZGVmaW5lCUJMU0lHX1BBUklUWQkJCQkweDIwCisjZGVmaW5lCUJDQ0tSWFBIQVNFCQkJCTB4NAorCisjZGVmaW5lCUJMU1NJUkVBREFERFJFU1MJCQkweDdmODAwMDAwCisjZGVmaW5lCUJMU1NJUkVBREVER0UJCQkJMHg4MDAwMDAwMAorCisjZGVmaW5lCUJMU1NJUkVBREJBQ0tEQVRBCQkJMHhmZmZmZgorCisjZGVmaW5lCUJMU1NJUkVBRE9LRkxBRwkJCQkweDEwMDAKKyNkZWZpbmUJQkNDS1NBTVBMRVJBVEUJCQkJMHg4CisjZGVmaW5lCUJSRUdVTEFUT1IwU1RBTkRCWQkJCTB4MQorI2RlZmluZQlCUkVHVUxBVE9SUExMU1RBTkRCWQkJCTB4MgorI2RlZmluZQlCUkVHVUxBVE9SMVNUQU5EQlkJCQkweDQKKyNkZWZpbmUJQlBMTFBPV0VSVVAJCQkJMHg4CisjZGVmaW5lCUJEUExMUE9XRVJVUAkJCQkweDEwCisjZGVmaW5lCUJEQTEwUE9XRVJVUAkJCQkweDIwCisjZGVmaW5lCUJBRDdQT1dFUlVQCQkJCTB4MjAwCisjZGVmaW5lCUJEQTZQT1dFUlVQCQkJCTB4MjAwMAorI2RlZmluZQlCWFRBTFBPV0VSVVAJCQkJMHg0MDAwCisjZGVmaW5lCUI0ME1EQ0xLUE9XRVJVUAkJCQkweDgwMDAKKyNkZWZpbmUJQkRBNkRFQlVHTU9ERQkJCQkweDIwMDAwCisjZGVmaW5lCUJEQTZTV0lORwkJCQkweDM4MDAwMAorCisjZGVmaW5lCUJBRENMS1BIQVNFCQkJCTB4NDAwMDAwMAorI2RlZmluZQlCODBNQ0xLREVMQVkJCQkJMHgxODAwMDAwMAorI2RlZmluZQlCQUZFV0FUQ0hET0dFTkFCTEUJCQkweDIwMDAwMDAwCisKKyNkZWZpbmUJQlhUQUxDQVAwMQkJCQkweGMwMDAwMDAwCisjZGVmaW5lCUJYVEFMQ0FQMjMJCQkJMHgzCisjZGVmaW5lCUJYVEFMQ0FQOTJYCQkJCTB4MGYwMDAwMDAKKyNkZWZpbmUgQlhUQUxDQVAJCQkJMHgwZjAwMDAwMAorCisjZGVmaW5lCUJJTlRESUZDTEtFTkFCTEUJCQkweDQwMAorI2RlZmluZQlCRVhUU0lHQ0xLRU5BQkxFCQkJMHg4MDAKKyNkZWZpbmUJQkJBTkRHQVBfTUJJQVNfUE9XRVJVUAkJCTB4MTAwMDAKKyNkZWZpbmUJQkFEMTFTSF9HQUlOCQkJCTB4YzAwMDAKKyNkZWZpbmUJQkFEMTFOUFVUX1JBTkdFCQkJCTB4NzAwMDAwCisjZGVmaW5lCUJBRDExMFBfQ1VSUkVOVAkJCQkweDM4MDAwMDAKKyNkZWZpbmUJQkxQQVRIX0xPT1BCQUNLCQkJCTB4NDAwMDAwMAorI2RlZmluZQlCUVBBVEhfTE9PUEJBQ0sJCQkJMHg4MDAwMDAwCisjZGVmaW5lCUJBRkVfTE9PUEJBQ0sJCQkJMHgxMDAwMDAwMAorI2RlZmluZQlCREExMF9TV0lORwkJCQkweDdlMAorI2RlZmluZQlCREExMF9SRVZFUlNFCQkJCTB4ODAwCisjZGVmaW5lCUJEQV9DTEtfU09VUkNFCQkJCTB4MTAwMAorI2RlZmluZQlCREE3SU5QVVRfUkFOR0UJCQkJMHg2MDAwCisjZGVmaW5lCUJEQTdfR0FJTgkJCQkweDM4MDAwCisjZGVmaW5lCUJEQTdPVVRQVVRfQ01fTU9ERQkJCTB4NDAwMDAKKyNkZWZpbmUJQkRBN0lOUFVUX0NNX01PREUJCQkweDM4MDAwMAorI2RlZmluZQlCREE3Q1VSUkVOVAkJCQkweGMwMDAwMAorI2RlZmluZQlCUkVHVUxBVE9SX0FESlVTVAkJCTB4NzAwMDAwMAorI2RlZmluZQlCQUQxMVBPV0VSVVBfQVRUWAkJCTB4MQorI2RlZmluZQlCREExMFBTX0FUVFgJCQkJMHgxMAorI2RlZmluZQlCQUQxMVBPV0VSVVBfQVRSWAkJCTB4MTAwCisjZGVmaW5lCUJEQTEwUFNfQVRSWAkJCQkweDEwMDAKKyNkZWZpbmUJQkNDS1JYX0FHQ19GT1JNQVQJCQkweDIwMAorI2RlZmluZQlCUFNERkZUX1NBTVBMRV9QT0lOVAkJCTB4YzAwMAorI2RlZmluZQlCUFNEX0FWRVJBR0VfTlVNCQkJMHgzMDAwCisjZGVmaW5lCUJJUVBBVEhfQ09OVFJPTAkJCQkweGMwMAorI2RlZmluZQlCUFNEX0ZSRVEJCQkJMHgzZmYKKyNkZWZpbmUJQlBTRF9BTlRFTk5BX1BBVEgJCQkweDMwCisjZGVmaW5lCUJQU0RfSVFfU1dJVENICQkJCTB4NDAKKyNkZWZpbmUJQlBTRF9SWF9UUklHR0VSCQkJCTB4NDAwMDAwCisjZGVmaW5lCUJQU0RfVFhfVFJJR0dFUgkJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJQU0RfU0lORV9UT05FX1NDQUxFCQkJMHg3ZjAwMDAwMAorI2RlZmluZQlCUFNEX1JFUE9SVAkJCQkweGZmZmYKKworI2RlZmluZQlCT0ZETV9UWFNDCQkJCTB4MzAwMDAwMDAKKyNkZWZpbmUJQkNDS19UWE9OCQkJCTB4MQorI2RlZmluZQlCT0ZETV9UWE9OCQkJCTB4MgorI2RlZmluZQlCREVCVUdfUEFHRQkJCQkweGZmZgorI2RlZmluZQlCREVCVUdfSVRFTQkJCQkweGZmCisjZGVmaW5lCUJBTlRMCQkJCQkweDEwCisjZGVmaW5lCUJBTlRfTk9OSFQJCQkJMHgxMDAKKyNkZWZpbmUJQkFOVF9IVDEJCQkJMHgxMDAwCisjZGVmaW5lCUJBTlRfSFQyCQkJCTB4MTAwMDAKKyNkZWZpbmUJQkFOVF9IVDFTMQkJCQkweDEwMDAwMAorI2RlZmluZQlCQU5UX05PTkhUUzEJCQkJMHgxMDAwMDAwCisKKyNkZWZpbmUJQkNDS19CQk1PREUJCQkJMHgzCisjZGVmaW5lCUJDQ0tfVFhQT1dFUlNBVklORwkJCTB4ODAKKyNkZWZpbmUJQkNDS19SWFBPV0VSU0FWSU5HCQkJMHg0MAorCisjZGVmaW5lCUJDQ0tfU0lERUJBTkQJCQkJMHgxMAorCisjZGVmaW5lCUJDQ0tfU0NSQU1CTEUJCQkJMHg4CisjZGVmaW5lCUJDQ0tfQU5URElWRVJTSVRZCQkJMHg4MDAwCisjZGVmaW5lCUJDQ0tfQ0FSUklFUl9SRUNPVkVSWQkJCTB4NDAwMAorI2RlZmluZQlCQ0NLX1RYUkFURQkJCQkweDMwMDAKKyNkZWZpbmUJQkNDS19EQ0NBTkNFTAkJCQkweDA4MDAKKyNkZWZpbmUJQkNDS19JU0lDQU5DRUwJCQkJMHgwNDAwCisjZGVmaW5lCUJDQ0tfTUFUQ0hfRklMVEVSCQkJMHgwMjAwCisjZGVmaW5lCUJDQ0tfRVFVQUxJWkVSCQkJCTB4MDEwMAorI2RlZmluZQlCQ0NLX1BSRUFNQkxFX0RFVEVDVAkJCTB4ODAwMDAwCisjZGVmaW5lCUJDQ0tfRkFTVF9GQUxTRUNDQQkJCTB4NDAwMDAwCisjZGVmaW5lCUJDQ0tfQ0hfRVNUU1RBUlQJCQkweDMwMDAwMAorI2RlZmluZQlCQ0NLX0NDQV9DT1VOVAkJCQkweDA4MDAwMAorI2RlZmluZQlCQ0NLX0NTX0xJTQkJCQkweDA3MDAwMAorI2RlZmluZQlCQ0NLX0JJU1RfTU9ERQkJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJDQ0tfQ0NBTUFTSwkJCQkweDQwMDAwMDAwCisjZGVmaW5lCUJDQ0tfVFhfREFDX1BIQVNFCQkJMHg0CisjZGVmaW5lCUJDQ0tfUlhfQURDX1BIQVNFCQkJMHgyMDAwMDAwMAorI2RlZmluZQlCQ0NLUl9DUF9NT0RFCQkJCTB4MDEwMAorI2RlZmluZQlCQ0NLX1RYRENfT0ZGU0VUCQkJMHhmMAorI2RlZmluZQlCQ0NLX1JYRENfT0ZGU0VUCQkJMHhmCisjZGVmaW5lCUJDQ0tfQ0NBX01PREUJCQkJMHhjMDAwCisjZGVmaW5lCUJDQ0tfRkFMU0VDU19MSU0JCQkweDNmMDAKKyNkZWZpbmUJQkNDS19DU19SQVRJTwkJCQkweGMwMDAwMAorI2RlZmluZQlCQ0NLX0NPUkdCSVRfU0VMCQkJMHgzMDAwMDAKKyNkZWZpbmUJQkNDS19QRF9MSU0JCQkJMHgwZjAwMDAKKyNkZWZpbmUJQkNDS19ORVdDQ0EJCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYSFBfT0ZfSUcJCQkJMHg4MDAwCisjZGVmaW5lCUJDQ0tfUlhJRwkJCQkweDdmMDAKKyNkZWZpbmUJQkNDS19MTkFfUE9MQVJJVFkJCQkweDgwMDAwMAorI2RlZmluZQlCQ0NLX1JYMVNUX0JBSU4JCQkJMHg3ZjAwMDAKKyNkZWZpbmUJQkNDS19SRl9FWFRFTkQJCQkJMHgyMDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYQUdDX1NBVExFVkVMCQkJMHgxZjAwMDAwMAorI2RlZmluZQlCQ0NLX1JYQUdDX1NBVENPVU5UCQkJMHhlMAorI2RlZmluZQliQ0NLUnhSRlNldHRsZQkJCQkweDFmCisjZGVmaW5lCUJDQ0tfRklYRURfUlhBR0MJCQkweDgwMDAKKyNkZWZpbmUJQkNDS19BTlRFTk5BX1BPTEFSSVRZCQkJMHgyMDAwCisjZGVmaW5lCUJDQ0tfVFhGSUxURVJfVFlQRQkJCTB4MGMwMAorI2RlZmluZQlCQ0NLX1JYQUdDX1JFUE9SVFRZUEUJCQkweDAzMDAKKyNkZWZpbmUJQkNDS19SWERBR0NfRU4JCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYREFHQ19QRVJJT0QJCQkweDIwMDAwMDAwCisjZGVmaW5lCUJDQ0tfUlhEQUdDX1NBVExFVkVMCQkJMHgxZjAwMDAwMAorI2RlZmluZQlCQ0NLX1RJTUlOR19SRUNPVkVSWQkJCTB4ODAwMDAwCisjZGVmaW5lCUJDQ0tfVFhDMAkJCQkweDNmMDAwMAorI2RlZmluZQlCQ0NLX1RYQzEJCQkJMHgzZjAwMDAwMAorI2RlZmluZQlCQ0NLX1RYQzIJCQkJMHgzZgorI2RlZmluZQlCQ0NLX1RYQzMJCQkJMHgzZjAwCisjZGVmaW5lCUJDQ0tfVFhDNAkJCQkweDNmMDAwMAorI2RlZmluZQlCQ0NLX1RYQzUJCQkJMHgzZjAwMDAwMAorI2RlZmluZQlCQ0NLX1RYQzYJCQkJMHgzZgorI2RlZmluZQlCQ0NLX1RYQzcJCQkJMHgzZjAwCisjZGVmaW5lCUJDQ0tfREVCVUdQT1JUCQkJCTB4ZmYwMDAwCisjZGVmaW5lCUJDQ0tfREFDX0RFQlVHCQkJCTB4MGYwMDAwMDAKKyNkZWZpbmUJQkNDS19GQUxTRUFMQVJNX0VOQUJMRQkJCTB4ODAwMAorI2RlZmluZQlCQ0NLX0ZBTFNFQUxBUk1fUkVBRAkJCTB4NDAwMAorI2RlZmluZQlCQ0NLX1RSU1NJCQkJCTB4N2YKKyNkZWZpbmUJQkNDS19SWEFHQ19SRVBPUlQJCQkweGZlCisjZGVmaW5lCUJDQ0tfUlhSRVBPUlRfQU5UU0VMCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYUkVQT1JUX01GT0ZGCQkJMHg0MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYUkVQT1JUX1NRTE9TUwkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJQkNDS19SWFJFUE9SVF9QS1RMT1NTCQkJMHgxMDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYUkVQT1JUX0xPQ0tFREJJVAkJCTB4MDgwMDAwMDAKKyNkZWZpbmUJQkNDS19SWFJFUE9SVF9SQVRFRVJST1IJCQkweDA0MDAwMDAwCisjZGVmaW5lCUJDQ0tfUlhSRVBPUlRfUlhSQVRFCQkJMHgwMzAwMDAwMAorI2RlZmluZQlCQ0NLX1JYRkFfQ09VTlRFUl9MT1dFUgkJCTB4ZmYKKyNkZWZpbmUJQkNDS19SWEZBX0NPVU5URVJfVVBQRVIJCQkweGZmMDAwMDAwCisjZGVmaW5lCUJDQ0tfUlhIUEFHQ19TVEFSVAkJCTB4ZTAwMAorI2RlZmluZQlCQ0NLX1JYSFBBR0NfRklOQUwJCQkweDFjMDAKKyNkZWZpbmUJQkNDS19SWEZBTFNFQUxBUk1fRU5BQkxFCQkweDgwMDAKKyNkZWZpbmUJQkNDS19GQUNPVU5URVJfRlJFRVpFCQkJMHg0MDAwCisjZGVmaW5lCUJDQ0tfVFhQQVRIX1NFTAkJCQkweDEwMDAwMDAwCisjZGVmaW5lCUJDQ0tfREVGQVVMVF9SWFBBVEgJCQkweGMwMDAwMDAKKyNkZWZpbmUJQkNDS19PUFRJT05fUlhQQVRICQkJMHgzMDAwMDAwCisKKyNkZWZpbmUJQk5VTV9PRlNURgkJCQkweDMKKyNkZWZpbmUJQlNISUZUX0wJCQkJMHhjMAorI2RlZmluZQlCR0lfVEgJCQkJCTB4YworI2RlZmluZQlCUlhQQVRIX0EJCQkJMHgxCisjZGVmaW5lCUJSWFBBVEhfQgkJCQkweDIKKyNkZWZpbmUJQlJYUEFUSF9DCQkJCTB4NAorI2RlZmluZQlCUlhQQVRIX0QJCQkJMHg4CisjZGVmaW5lCUJUWFBBVEhfQQkJCQkweDEKKyNkZWZpbmUJQlRYUEFUSF9CCQkJCTB4MgorI2RlZmluZQlCVFhQQVRIX0MJCQkJMHg0CisjZGVmaW5lCUJUWFBBVEhfRAkJCQkweDgKKyNkZWZpbmUJQlRSU1NJX0ZSRVEJCQkJMHgyMDAKKyNkZWZpbmUJQkFEQ19CQUNLT0ZGCQkJCTB4MzAwMAorI2RlZmluZQlCREZJUl9CQUNLT0ZGCQkJCTB4YzAwMAorI2RlZmluZQlCVFJTU0lfTEFUQ0hfUEhBU0UJCQkweDEwMDAwCisjZGVmaW5lCUJSWF9MRENfT0ZGU0VUCQkJCTB4ZmYKKyNkZWZpbmUJQlJYX1FEQ19PRkZTRVQJCQkJMHhmZjAwCisjZGVmaW5lCUJSWF9ERklSX01PREUJCQkJMHgxODAwMDAwCisjZGVmaW5lCUJSWF9EQ05GX1RZUEUJCQkJMHhlMDAwMDAwCisjZGVmaW5lCUJSWElRSU1CX0EJCQkJMHgzZmYKKyNkZWZpbmUJQlJYSVFJTUJfQgkJCQkweGZjMDAKKyNkZWZpbmUJQlJYSVFJTUJfQwkJCQkweDNmMDAwMAorI2RlZmluZQlCUlhJUUlNQl9ECQkJCTB4ZmZjMDAwMDAKKyNkZWZpbmUJQkRDX0RDX05PVENICQkJCTB4NjAwMDAKKyNkZWZpbmUJQlJYTkJfTk9UQ0gJCQkJMHgxZjAwMDAwMAorI2RlZmluZQlCUERfVEgJCQkJCTB4ZgorI2RlZmluZQlCUERfVEhfT1BUMgkJCQkweGMwMDAKKyNkZWZpbmUJQlBXRURfVEgJCQkJMHg3MDAKKyNkZWZpbmUJQklGTUZfV0lOX0wJCQkJMHg4MDAKKyNkZWZpbmUJQlBEX09QVElPTgkJCQkweDEwMDAKKyNkZWZpbmUJQk1GX1dJTl9MCQkJCTB4ZTAwMAorI2RlZmluZQlCQldfU0VBUkNIX0wJCQkJMHgzMDAwMAorI2RlZmluZQlCV0lOX0VOSF9MCQkJCTB4YzAwMDAKKyNkZWZpbmUJQkJXX1RICQkJCQkweDcwMDAwMAorI2RlZmluZQlCRURfVEgyCQkJCQkweDM4MDAwMDAKKyNkZWZpbmUJQkJXX09QVElPTgkJCQkweDQwMDAwMDAKKyNkZWZpbmUJQlJBRElPX1RICQkJCTB4MTgwMDAwMDAKKyNkZWZpbmUJQldJTkRPV19MCQkJCTB4ZTAwMDAwMDAKKyNkZWZpbmUJQlNCRF9PUFRJT04JCQkJMHgxCisjZGVmaW5lCUJGUkFNRV9USAkJCQkweDFjCisjZGVmaW5lCUJGU19PUFRJT04JCQkJMHg2MAorI2RlZmluZQlCRENfU0xPUEVfQ0hFQ0sJCQkJMHg4MAorI2RlZmluZQlCRkdVQVJEX0NPVU5URVJfRENfTAkJCTB4ZTAwCisjZGVmaW5lCUJGUkFNRV9XRUlHSFRfU0hPUlQJCQkweDcwMDAKKyNkZWZpbmUJQlNVQl9UVU5FCQkJCTB4ZTAwMDAwCisjZGVmaW5lCUJGUkFNRV9EQ19MRU5HVEgJCQkweGUwMDAwMDAKKyNkZWZpbmUJQlNCRF9TVEFSVF9PRkZTRVQJCQkweDMwMDAwMDAwCisjZGVmaW5lCUJGUkFNRV9USF8yCQkJCTB4NworI2RlZmluZQlCRlJBTUVfR0kyX1RICQkJCTB4MzgKKyNkZWZpbmUJQkdJMl9TWU5DX0VOCQkJCTB4NDAKKyNkZWZpbmUJQlNBUkNIX1NIT1JUX0VBUkxZCQkJMHgzMDAKKyNkZWZpbmUJQlNBUkNIX1NIT1JUX0xBVEUJCQkweGMwMAorI2RlZmluZQlCU0FSQ0hfR0kyX0xBVEUJCQkJMHg3MDAwMAorI2RlZmluZQlCQ0ZPQU5UU1VNCQkJCTB4MQorI2RlZmluZQlCQ0ZPQUNDCQkJCQkweDIKKyNkZWZpbmUJQkNGT1NUQVJUT0ZGU0VUCQkJCTB4YworI2RlZmluZQlCQ0ZPTE9PUEJBQ0sJCQkJMHg3MAorI2RlZmluZQlCQ0ZPU1VNV0VJR0hUCQkJCTB4ODAKKyNkZWZpbmUJQkRBR0NFTkFCTEUJCQkJMHgxMDAwMAorI2RlZmluZQlCVFhJUUlNQl9BCQkJCTB4M2ZmCisjZGVmaW5lCUJUWElRSU1CX2IJCQkJMHhmYzAwCisjZGVmaW5lCUJUWElRSU1CX0MJCQkJMHgzZjAwMDAKKyNkZWZpbmUJQlRYSVFJTUJfRAkJCQkweGZmYzAwMDAwCisjZGVmaW5lCUJUWElEQ09GRlNFVAkJCQkweGZmCisjZGVmaW5lCUJUWElRRENPRkZTRVQJCQkJMHhmZjAwCisjZGVmaW5lCUJUWERGSVJNT0RFCQkJCTB4MTAwMDAKKyNkZWZpbmUJQlRYUEVTVURPX05PSVNFT04JCQkweDQwMDAwMDAKKyNkZWZpbmUJQlRYUEVTVURPX05PSVNFX0EJCQkweGZmCisjZGVmaW5lCUJUWFBFU1VET19OT0lTRV9CCQkJMHhmZjAwCisjZGVmaW5lCUJUWFBFU1VET19OT0lTRV9DCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlRYUEVTVURPX05PSVNFX0QJCQkweGZmMDAwMDAwCisjZGVmaW5lCUJDQ0FfRFJPUE9QVElPTgkJCQkweDIwMDAwCisjZGVmaW5lCUJDQ0FfRFJPUFRIUkVTCQkJCTB4ZmZmMDAwMDAKKyNkZWZpbmUJQkVEQ0NBX0gJCQkJMHhmCisjZGVmaW5lCUJFRENDQV9MCQkJCTB4ZjAKKyNkZWZpbmUJQkxBTUJEQV9FRAkJCQkweDMwMAorI2RlZmluZQlCUlhfSU5JVElBTEdBSU4JCQkJMHg3ZgorI2RlZmluZQlCUlhfQU5URElWX0VOCQkJCTB4ODAKKyNkZWZpbmUJQlJYX0FHQ19BRERSRVNTX0ZPUl9MTkEJCQkweDdmMDAKKyNkZWZpbmUJQlJYX0hJR0hQT1dFUl9GTE9XCQkJMHg4MDAwCisjZGVmaW5lCUJSWF9BR0NfRlJFRVpFX1RIUkVTCQkJMHhjMDAwMAorI2RlZmluZQlCUlhfRlJFRVpFU1RFUF9BR0MxCQkJMHgzMDAwMDAKKyNkZWZpbmUJQlJYX0ZSRUVaRVNURVBfQUdDMgkJCTB4YzAwMDAwCisjZGVmaW5lCUJSWF9GUkVFWkVTVEVQX0FHQzMJCQkweDMwMDAwMDAKKyNkZWZpbmUJQlJYX0ZSRUVaRVNURVBfQUdDMAkJCTB4YzAwMDAwMAorI2RlZmluZQlCUlhSU1NJX0NNUF9FTgkJCQkweDEwMDAwMDAwCisjZGVmaW5lCUJSWFFVSUNLX0FHQ0VOCQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJQlJYQUdDX0ZSRUVaRV9USFJFU19NT0RFCQkweDQwMDAwMDAwCisjZGVmaW5lCUJSWF9PVkVSRkxPV19DSEVDS1RZUEUJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJSWF9BR0NTSElGVAkJCQkweDdmCisjZGVmaW5lCUJUUlNXX1RSSV9PTkxZCQkJCTB4ODAKKyNkZWZpbmUJQlBPV0VSX1RIUkVTCQkJCTB4MzAwCisjZGVmaW5lCUJSWEFHQ19FTgkJCQkweDEKKyNkZWZpbmUJQlJYQUdDX1RPR0VUSEVSX0VOCQkJMHgyCisjZGVmaW5lCUJSWEFHQ19NSU4JCQkJMHg0CisjZGVmaW5lCUJSWEhQX0lOSQkJCQkweDcKKyNkZWZpbmUJQlJYSFBfVFJMTkEJCQkJMHg3MAorI2RlZmluZQlCUlhIUF9SU1NJCQkJCTB4NzAwCisjZGVmaW5lCUJSWEhQX0JCUDEJCQkJMHg3MDAwCisjZGVmaW5lCUJSWEhQX0JCUDIJCQkJMHg3MDAwMAorI2RlZmluZQlCUlhIUF9CQlAzCQkJCTB4NzAwMDAwCisjZGVmaW5lCUJSU1NJX0gJCQkJCTB4N2YwMDAwCisjZGVmaW5lCUJSU1NJX0dFTgkJCQkweDdmMDAwMDAwCisjZGVmaW5lCUJSWFNFVFRMRV9UUlNXCQkJCTB4NworI2RlZmluZQlCUlhTRVRUTEVfTE5BCQkJCTB4MzgKKyNkZWZpbmUJQlJYU0VUVExFX1JTU0kJCQkJMHgxYzAKKyNkZWZpbmUJQlJYU0VUVExFX0JCUAkJCQkweGUwMAorI2RlZmluZQlCUlhTRVRUTEVfUlhIUAkJCQkweDcwMDAKKyNkZWZpbmUJQlJYU0VUVExFX0FOVFNXX1JTU0kJCQkweDM4MDAwCisjZGVmaW5lCUJSWFNFVFRMRV9BTlRTVwkJCQkweGMwMDAwCisjZGVmaW5lCUJSWFBST0NFU1NfVElNRV9EQUdDCQkJMHgzMDAwMDAKKyNkZWZpbmUJQlJYU0VUVExFX0hTU0kJCQkJMHg0MDAwMDAKKyNkZWZpbmUJQlJYUFJPQ0VTU19USU1FX0JCUFBXCQkJMHg4MDAwMDAKKyNkZWZpbmUJQlJYQU5URU5OQV9QT1dFUl9TSElGVAkJCTB4MzAwMDAwMAorI2RlZmluZQlCUlNTSV9UQUJMRV9TRUxFQ1QJCQkweGMwMDAwMDAKKyNkZWZpbmUJQlJYSFBfRklOQUwJCQkJMHg3MDAwMDAwCisjZGVmaW5lCUJSWEhQU0VUVExFX0JCUAkJCQkweDcKKyNkZWZpbmUJQlJYSFRTRVRUTEVfSFNTSQkJCTB4OAorI2RlZmluZQlCUlhIVFNFVFRMRV9SWEhQCQkJMHg3MAorI2RlZmluZQlCUlhIVFNFVFRMRV9CQlBQVwkJCTB4ODAKKyNkZWZpbmUJQlJYSFRTRVRUTEVfSURMRQkJCTB4MzAwCisjZGVmaW5lCUJSWEhUU0VUVExFX1JFU0VSVkVECQkJMHgxYzAwCisjZGVmaW5lCUJSWEhUX1JYSFBfRU4JCQkJMHg4MDAwCisjZGVmaW5lCUJSWEFHQ19GUkVFWkVfVEhSRVMJCQkweDMwMDAwCisjZGVmaW5lCUJSWEFHQ19UT0dFVEhFUkVOCQkJMHg0MDAwMAorI2RlZmluZQlCUlhIVEFHQ19NSU4JCQkJMHg4MDAwMAorI2RlZmluZQlCUlhIVEFHQ19FTgkJCQkweDEwMDAwMAorI2RlZmluZQlCUlhIVERBR0NfRU4JCQkJMHgyMDAwMDAKKyNkZWZpbmUJQlJYSFRfUlhIUF9CQlAJCQkJMHgxYzAwMDAwCisjZGVmaW5lCUJSWEhUX1JYSFBfRklOQUwJCQkweGUwMDAwMDAwCisjZGVmaW5lCUJSWFBXX1JBRElPX1RICQkJCTB4MworI2RlZmluZQlCUlhQV19SQURJT19FTgkJCQkweDQKKyNkZWZpbmUJQlJYTUZfSE9MRAkJCQkweDM4MDAKKyNkZWZpbmUJQlJYUERfREVMQVlfVEgxCQkJCTB4MzgKKyNkZWZpbmUJQlJYUERfREVMQVlfVEgyCQkJCTB4MWMwCisjZGVmaW5lCUJSWFBEX0RDX0NPVU5UX01BWAkJCTB4NjAwCisjZGVmaW5lCUJSWFBEX0RFTEFZX1RICQkJCTB4ODAwMAorI2RlZmluZQlCUlhQUk9DRVNTX0RFTEFZCQkJMHhmMDAwMAorI2RlZmluZQlCUlhTRUFSQ0hSQU5HRV9HSTJfRUFSTFkJCTB4NzAwMDAwCisjZGVmaW5lCUJSWEZSQU1FX0ZVQVJEX0NPVU5URVJfTAkJMHgzODAwMDAwCisjZGVmaW5lCUJSWFNHSV9HVUFSRF9MCQkJCTB4YzAwMDAwMAorI2RlZmluZQlCUlhTR0lfU0VBUkNIX0wJCQkJMHgzMDAwMDAwMAorI2RlZmluZQlCUlhTR0lfVEgJCQkJMHhjMDAwMDAwMAorI2RlZmluZQlCREZTQ05UMAkJCQkweGZmCisjZGVmaW5lCUJERlNDTlQxCQkJCTB4ZmYwMAorI2RlZmluZQlCREZTRkxBRwkJCQkweGYwMDAwCisjZGVmaW5lCUJNRl9XRUlHSFRfU1VNCQkJCTB4MzAwMDAwCisjZGVmaW5lCUJNSU5JRFhfVEgJCQkJMHg3ZjAwMDAwMAorI2RlZmluZQlCREFGT1JNQVQJCQkJMHg0MDAwMAorI2RlZmluZQlCVFhDSF9FTVVfRU5BQkxFCQkJMHgwMTAwMDAwMAorI2RlZmluZQlCVFJTV19JU09MQVRJT05fQQkJCTB4N2YKKyNkZWZpbmUJQlRSU1dfSVNPTEFUSU9OX0IJCQkweDdmMDAKKyNkZWZpbmUJQlRSU1dfSVNPTEFUSU9OX0MJCQkweDdmMDAwMAorI2RlZmluZQlCVFJTV19JU09MQVRJT05fRAkJCTB4N2YwMDAwMDAKKyNkZWZpbmUJQkVYVF9MTkFfR0FJTgkJCQkweDdjMDAKKworI2RlZmluZQlCU1RCQ19FTgkJCQkweDQKKyNkZWZpbmUJQkFOVEVOTkFfTUFQUElORwkJCTB4MTAKKyNkZWZpbmUJQk5TUwkJCQkJMHgyMAorI2RlZmluZQlCQ0ZPX0FOVFNVTV9JRAkJCQkweDIwMAorI2RlZmluZQlCUEhZX0NPVU5URVJfUkVTRVQJCQkweDgwMDAwMDAKKyNkZWZpbmUJQkNGT19SRVBPUlRfR0VUCQkJCTB4NDAwMDAwMAorI2RlZmluZQlCT0ZETV9DT05USU5VRV9UWAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUJQk9GRE1fU0lOR0xFX0NBUlJJRVIJCQkweDIwMDAwMDAwCisjZGVmaW5lCUJPRkRNX1NJTkdMRV9UT05FCQkJMHg0MDAwMDAwMAorI2RlZmluZQlCSFRfREVURUNUCQkJCTB4MTAwCisjZGVmaW5lCUJDRk9FTgkJCQkJMHgxMDAwMAorI2RlZmluZQlCQ0ZPVkFMVUUJCQkJMHhmZmYwMDAwMAorI2RlZmluZQlCU0lHVE9ORV9SRQkJCQkweDNmCisjZGVmaW5lCUJTSUdUT05FX0lNCQkJCTB4N2YwMAorI2RlZmluZQlCQ09VTlRFUl9DQ0EJCQkJMHhmZmZmCisjZGVmaW5lCUJDT1VOVEVSX1BBUklUWUZBSUwJCQkweGZmZmYwMDAwCisjZGVmaW5lCUJDT1VOVEVSX1JBVEVJTExFR0FMCQkJMHhmZmZmCisjZGVmaW5lCUJDT1VOVEVSX0NSQzhGQUlMCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCQ09VTlRFUl9NQ1NOT1NVUFBPUlQJCQkweGZmZmYKKyNkZWZpbmUJQkNPVU5URVJfRkFTVFNZTkMJCQkweGZmZmYKKyNkZWZpbmUJQlNIT1JUQ0ZPCQkJCTB4ZmZmCisjZGVmaW5lCUJTSE9SVENGT1RfTEVOR1RICQkJMTIKKyNkZWZpbmUJQlNIT1JUQ0ZPRl9MRU5HVEgJCQkxMQorI2RlZmluZQlCTE9OR0NGTwkJCQkweDdmZgorI2RlZmluZQlCTE9OR0NGT1RfTEVOR1RICQkJMTEKKyNkZWZpbmUJQkxPTkdDRk9GX0xFTkdUSAkJCTExCisjZGVmaW5lCUJUQUlMQ0ZPCQkJCTB4MWZmZgorI2RlZmluZQlCVEFJTENGT1RfTEVOR1RICQkJMTMKKyNkZWZpbmUJQlRBSUxDRk9GX0xFTkdUSAkJCTEyCisjZGVmaW5lCUJOT0lTRV9FTl9QV0RCCQkJCTB4ZmZmZgorI2RlZmluZQlCQ0NfUE9XRVJfREIJCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCTU9JU0VfUFdEQgkJCQkweGZmZmYKKyNkZWZpbmUJQlBPV0VSTUVBU1RfTEVOR1RICQkJMTAKKyNkZWZpbmUJQlBPV0VSTUVBU0ZfTEVOR1RICQkJMworI2RlZmluZQlCUlhfSFRfQlcJCQkJMHgxCisjZGVmaW5lCUJSWFNDCQkJCQkweDYKKyNkZWZpbmUJQlJYX0hUCQkJCQkweDgKKyNkZWZpbmUJQk5CX0lOVEZfREVUX09OCQkJCTB4MQorI2RlZmluZQlCSU5URl9XSU5fTEVOX0NGRwkJCTB4MzAKKyNkZWZpbmUJQk5CX0lOVEZfVEhfQ0ZHCQkJCTB4MWMwCisjZGVmaW5lCUJSRkdBSU4JCQkJCTB4M2YKKyNkZWZpbmUJQlRBQkxFU0VMCQkJCTB4NDAKKyNkZWZpbmUJQlRSU1cJCQkJCTB4ODAKKyNkZWZpbmUJQlJYU05SX0EJCQkJMHhmZgorI2RlZmluZQlCUlhTTlJfQgkJCQkweGZmMDAKKyNkZWZpbmUJQlJYU05SX0MJCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlJYU05SX0QJCQkJMHhmZjAwMDAwMAorI2RlZmluZQlCU05SX0VWTVRfTEVOR1RICQkJOAorI2RlZmluZQlCU05SX0VWTUZfTEVOR1RICQkJMQorI2RlZmluZQlCQ1NJMVNUCQkJCQkweGZmCisjZGVmaW5lCUJDU0kyTkQJCQkJCTB4ZmYwMAorI2RlZmluZQlCUlhFVk0xU1QJCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlJYRVZNMk5ECQkJCTB4ZmYwMDAwMDAKKyNkZWZpbmUJQlNJR0VWTQkJCQkJMHhmZgorI2RlZmluZQlCUFdEQgkJCQkJMHhmZjAwCisjZGVmaW5lCUJTR0lFTgkJCQkJMHgxMDAwMAorCisjZGVmaW5lCUJTRkFDVE9SX1FNQTEJCQkJMHhmCisjZGVmaW5lCUJTRkFDVE9SX1FNQTIJCQkJMHhmMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUEzCQkJCTB4ZjAwCisjZGVmaW5lCUJTRkFDVE9SX1FNQTQJCQkJMHhmMDAwCisjZGVmaW5lCUJTRkFDVE9SX1FNQTUJCQkJMHhmMDAwMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUE2CQkJCTB4ZjAwMDAKKyNkZWZpbmUJQlNGQUNUT1JfUU1BNwkJCQkweGYwMDAwMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUE4CQkJCTB4ZjAwMDAwMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUE5CQkJCTB4ZjAwMDAwMDAKKyNkZWZpbmUJQkNTSV9TQ0hFTUUJCQkJMHgxMDAwMDAKKworI2RlZmluZQlCTk9JU0VfTFZMX1RPUF9TRVQJCQkweDMKKyNkZWZpbmUJQkNIU01PT1RICQkJCTB4NAorI2RlZmluZQlCQ0hTTU9PVEhfQ0ZHMQkJCQkweDM4CisjZGVmaW5lCUJDSFNNT09USF9DRkcyCQkJCTB4MWMwCisjZGVmaW5lCUJDSFNNT09USF9DRkczCQkJCTB4ZTAwCisjZGVmaW5lCUJDSFNNT09USF9DRkc0CQkJCTB4NzAwMAorI2RlZmluZQlCTVJDTU9ERQkJCQkweDgwMDAwMAorI2RlZmluZQlCVEhFVk1DRkcJCQkJMHg3MDAwMDAwCisKKyNkZWZpbmUJQkxPT1BfRklUX1RZUEUJCQkJMHgxCisjZGVmaW5lCUJVUERfQ0ZPCQkJCTB4NDAKKyNkZWZpbmUJQlVQRF9DRk9fT0ZGREFUQQkJCTB4ODAKKyNkZWZpbmUJQkFEVl9VUERfQ0ZPCQkJCTB4MTAwCisjZGVmaW5lCUJBRFZfVElNRV9DVFJMCQkJCTB4ODAwCisjZGVmaW5lCUJVUERfQ0xLTwkJCQkweDEwMDAKKyNkZWZpbmUJQkZDCQkJCQkweDYwMDAKKyNkZWZpbmUJQlRSQUNLSU5HX01PREUJCQkJMHg4MDAwCisjZGVmaW5lCUJQSENNUF9FTkFCTEUJCQkJMHgxMDAwMAorI2RlZmluZQlCVVBEX0NMS09fTFRGCQkJCTB4MjAwMDAKKyNkZWZpbmUJQkNPTV9DSF9DRk8JCQkJMHg0MDAwMAorI2RlZmluZQlCQ1NJX0VTVElfTU9ERQkJCQkweDgwMDAwCisjZGVmaW5lCUJBRFZfVVBEX0VRWgkJCQkweDEwMDAwMAorI2RlZmluZQlCVUNIQ0ZHCQkJCQkweDcwMDAwMDAKKyNkZWZpbmUJQlVQREVRWgkJCQkJMHg4MDAwMDAwCisKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9PTgkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9BCQkJMHhmZgorI2RlZmluZQlCUlhfUEVTVURPX05PSVNFX0IJCQkweGZmMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9DCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9ECQkJMHhmZjAwMDAwMAorI2RlZmluZQlCUlhfUEVTVURPX05PSVNFU1RBVEVfQQkJCTB4ZmZmZgorI2RlZmluZQlCUlhfUEVTVURPX05PSVNFU1RBVEVfQgkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRVNUQVRFX0MJCQkweGZmZmYKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRVNUQVRFX0QJCQkweGZmZmYwMDAwCisKKyNkZWZpbmUJQlpFQlJBMV9IU1NJRU5BQkxFCQkJMHg4CisjZGVmaW5lCUJaRUJSQTFfVFJYQ09OVFJPTAkJCTB4YzAwCisjZGVmaW5lCUJaRUJSQTFfVFJYR0FJTlNFVFRJTkcJCQkweDA3ZgorI2RlZmluZQlCWkVCUkExX1JYQ09VTlRFUgkJCTB4YzAwCisjZGVmaW5lCUJaRUJSQTFfVFhDSEFOR0VQVU1QCQkJMHgzOAorI2RlZmluZQlCWkVCUkExX1JYQ0hBTkdFUFVNUAkJCTB4NworI2RlZmluZQlCWkVCUkExX0NIQU5ORUxfTlVNCQkJMHhmODAKKyNkZWZpbmUJQlpFQlJBMV9UWExQRkJXCQkJCTB4NDAwCisjZGVmaW5lCUJaRUJSQTFfUlhMUEZCVwkJCQkweDYwMAorCisjZGVmaW5lCUJSVEw4MjU2UkVHX01PREVfQ1RSTDEJCQkweDEwMAorI2RlZmluZQlCUlRMODI1NlJFR19NT0RFX0NUUkwwCQkJMHg0MAorI2RlZmluZQlCUlRMODI1NlJFR19UWExQRkJXCQkJMHgxOAorI2RlZmluZQlCUlRMODI1NlJFR19SWExQRkJXCQkJMHg2MDAKKworI2RlZmluZQlCUlRMODI1OF9UWExQRkJXCQkJMHhjCisjZGVmaW5lCUJSVEw4MjU4X1JYTFBGQlcJCQkweGMwMAorI2RlZmluZQlCUlRMODI1OF9SU1NJTFBGQlcJCQkweGMwCisKKyNkZWZpbmUJQkJZVEUwCQkJCQkweDEKKyNkZWZpbmUJQkJZVEUxCQkJCQkweDIKKyNkZWZpbmUJQkJZVEUyCQkJCQkweDQKKyNkZWZpbmUJQkJZVEUzCQkJCQkweDgKKyNkZWZpbmUJQldPUkQwCQkJCQkweDMKKyNkZWZpbmUJQldPUkQxCQkJCQkweGMKKyNkZWZpbmUJQldPUkQJCQkJCTB4ZgorCisjZGVmaW5lCU1BU0tCWVRFMAkJCQkweGZmCisjZGVmaW5lCU1BU0tCWVRFMQkJCQkweGZmMDAKKyNkZWZpbmUJTUFTS0JZVEUyCQkJCTB4ZmYwMDAwCisjZGVmaW5lCU1BU0tCWVRFMwkJCQkweGZmMDAwMDAwCisjZGVmaW5lCU1BU0tIV09SRAkJCQkweGZmZmYwMDAwCisjZGVmaW5lCU1BU0tMV09SRAkJCQkweDAwMDBmZmZmCisjZGVmaW5lCU1BU0tEV09SRAkJCQkweGZmZmZmZmZmCisjZGVmaW5lCU1BU0sxMkJJVFMJCQkJMHhmZmYKKyNkZWZpbmUJTUFTS0g0QklUUwkJCQkweGYwMDAwMDAwCisjZGVmaW5lIE1BU0tPRkRNX0QJCQkJMHhmZmMwMDAwMAorI2RlZmluZQlNQVNLQ0NLCQkJCQkweDNmM2YzZjNmCisKKyNkZWZpbmUJTUFTSzRCSVRTCQkJCTB4MGYKKyNkZWZpbmUJTUFTSzIwQklUUwkJCQkweGZmZmZmCisjZGVmaW5lIFJGUkVHX09GRlNFVF9NQVNLCQkJMHhmZmZmZgorCisjZGVmaW5lCUJFTkFCTEUJCQkJCTB4MQorI2RlZmluZQlCRElTQUJMRQkJCQkweDAKKworI2RlZmluZQlMRUZUX0FOVEVOTkEJCQkJMHgwCisjZGVmaW5lCVJJR0hUX0FOVEVOTkEJCQkJMHgxCisKKyNkZWZpbmUJVENIRUNLX1RYU1RBVFVTCQkJCTUwMAorI2RlZmluZQlUVVBEQVRFX1JYQ09VTlRFUgkJCTEwMAorCisjZGVmaW5lCVJFR19VTl91c2VkX3JlZ2lzdGVyCQkJMHgwMWJmCisKKy8qIFdPTCBiaXQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUJSEFMOTJDX1dPTF9QVEtfVVBEQVRFX0VWRU5UCQlCSVQoMCkKKyNkZWZpbmUJSEFMOTJDX1dPTF9HVEtfVVBEQVRFX0VWRU5UCQlCSVQoMSkKKyNkZWZpbmUJSEFMOTJDX1dPTF9ESVNBU1NPQ19FVkVOVAkJQklUKDIpCisjZGVmaW5lCUhBTDkyQ19XT0xfREVBVVRIX0VWRU5UCQkJQklUKDMpCisjZGVmaW5lCUhBTDkyQ19XT0xfRldfRElTQ09OTkVDVF9FVkVOVAkJQklUKDQpCisKKyNkZWZpbmUgV09MX1JFQVNPTl9QVEtfVVBEQVRFCQkJQklUKDApCisjZGVmaW5lIFdPTF9SRUFTT05fR1RLX1VQREFURQkJCUJJVCgxKQorI2RlZmluZSBXT0xfUkVBU09OX0RJU0FTU09DCQkJQklUKDIpCisjZGVmaW5lIFdPTF9SRUFTT05fREVBVVRICQkJQklUKDMpCisjZGVmaW5lIFdPTF9SRUFTT05fRldfRElTQ09OTkVDVAkJQklUKDQpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3JmLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9yZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWE0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9yZi5jCkBAIC0wLDAgKzEsMTUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAicmYuaCIKKyNpbmNsdWRlICJkbS5oIgorCitzdGF0aWMgYm9vbCBfcnRsOTJlZV9waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKK3ZvaWQgcnRsOTJlZV9waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCXN3aXRjaCAoYmFuZHdpZHRoKSB7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgorCQlydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0gPSAoKHJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSAmCisJCQkJCSAgICAgMHhmZmZmZjNmZikgfCBCSVQoMTApIHwgQklUKDExKSk7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9DSE5MQlcsIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJICAgICAgcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdKTsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIFJGX0NITkxCVywgUkZSRUdfT0ZGU0VUX01BU0ssCisJCQkgICAgICBydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0pOworCQlicmVhazsKKwljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6CisJCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSA9ICgocnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdICYKKwkJCQkJICAgICAweGZmZmZmM2ZmKSB8IEJJVCgxMCkpOworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfQ0hOTEJXLCBSRlJFR19PRkZTRVRfTUFTSywKKwkJCSAgICAgIHJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSk7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCBSRl9DSE5MQlcsIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJICAgICAgcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInVua25vd24gYmFuZHdpZHRoOiAlI1hcbiIsIGJhbmR3aWR0aCkpOworCQlicmVhazsKKwl9Cit9CisKK2Jvb2wgcnRsOTJlZV9waHlfcmY2MDUyX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikKKwkJcnRscGh5LT5udW1fdG90YWxfcmZwYXRoID0gMTsKKwllbHNlCisJCXJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aCA9IDI7CisJcmV0dXJuIF9ydGw5MmVlX3BoeV9yZjYwNTJfY29uZmlnX3BhcmFmaWxlKGh3KTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyZWVfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIHU0X3JlZ3ZhbHVlID0gMDsKKwl1OCByZnBhdGg7CisJYm9vbCBydHN0YXR1cyA9IHRydWU7CisJc3RydWN0IGJiX3JlZ19kZWYgKnBwaHlyZWc7CisKKwlmb3IgKHJmcGF0aCA9IDA7IHJmcGF0aCA8IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsgcmZwYXRoKyspIHsKKwkJcHBoeXJlZyA9ICZydGxwaHktPnBoeXJlZ19kZWZbcmZwYXRoXTsKKworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJdTRfcmVndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZzLAorCQkJCQkJICAgIEJSRlNJX1JGRU5WKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQljYXNlIFJGOTBfUEFUSF9EOgorCQkJdTRfcmVndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZzLAorCQkJCQkJICAgIEJSRlNJX1JGRU5WIDw8IDE2KTsKKwkJCWJyZWFrOworCQl9CisKKwkJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmZpbnRmZSwgQlJGU0lfUkZFTlYgPDwgMTYsIDB4MSk7CisJCXVkZWxheSgxKTsKKworCQlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZvLCBCUkZTSV9SRkVOViwgMHgxKTsKKwkJdWRlbGF5KDEpOworCisJCXJ0bF9zZXRfYmJyZWcoaHcsIHBwaHlyZWctPnJmaHNzaV9wYXJhMiwKKwkJCSAgICAgIEIzV0lSRUFERFJFQUFMRU5HVEgsIDB4MCk7CisJCXVkZWxheSgxKTsKKworCQlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmhzc2lfcGFyYTIsIEIzV0lSRURBVEFMRU5HVEgsIDB4MCk7CisJCXVkZWxheSgxKTsKKworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQkJcnRzdGF0dXMgPSBydGw5MmVlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkJICAgICAgIChlbnVtIHJhZGlvX3BhdGgpcmZwYXRoKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQkJcnRzdGF0dXMgPSBydGw5MmVlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkJICAgICAgIChlbnVtIHJhZGlvX3BhdGgpcmZwYXRoKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJYnJlYWs7CisJCWNhc2UgUkY5MF9QQVRIX0Q6CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocmZwYXRoKSB7CisJCWNhc2UgUkY5MF9QQVRIX0E6CisJCWNhc2UgUkY5MF9QQVRIX0M6CisJCQlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZzLAorCQkJCSAgICAgIEJSRlNJX1JGRU5WLCB1NF9yZWd2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBSRjkwX1BBVEhfQjoKKwkJY2FzZSBSRjkwX1BBVEhfRDoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJICAgICAgQlJGU0lfUkZFTlYgPDwgMTYsIHU0X3JlZ3ZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICghcnRzdGF0dXMpIHsKKwkJCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJCSAoIlJhZGlvWyVkXSBGYWlsISEiLCByZnBhdGgpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLCAoIlxuIikpOworCXJldHVybiBydHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3JmLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9yZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzM5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9yZi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJFX1JGX0hfXworI2RlZmluZSBfX1JUTDkyRV9SRl9IX18KKworI2RlZmluZSBSRjYwNTJfTUFYX1RYX1BXUgkJMHgzRgorI2RlZmluZSBSRjYwNTJfTUFYX1JFRwkJCTB4M0YKKworZXh0ZXJuIHZvaWQgcnRsOTJlZV9waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgdTggYmFuZHdpZHRoKTsKK2V4dGVybiBib29sIHJ0bDkyZWVfcGh5X3JmNjA1Ml9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9zdy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvc3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWM1NzI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvc3cuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL2NvcmUuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAic3cuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgInRyeC5oIgorI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgInRhYmxlLmgiCisKKyNpbmNsdWRlICIuLi9idGNvZXhpc3QvcnRsX2J0Yy5oIgorCisKK3N0YXRpYyB2b2lkIHJ0bDkyZWVfaW5pdF9hc3BtX3ZhcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCS8qY2xvc2UgQVNQTSBmb3IgQU1EIGRlZmF1bHRseSAqLworCXJ0bHBjaS0+Y29uc3RfYW1kcGNpX2FzcG0gPSAwOworCisJLyoKKwkgKiBBU1BNIFBTIG1vZGUuCisJICogMCAtIERpc2FibGUgQVNQTSwKKwkgKiAxIC0gRW5hYmxlIEFTUE0gd2l0aG91dCBDbG9jayBSZXEsCisJICogMiAtIEVuYWJsZSBBU1BNIHdpdGggQ2xvY2sgUmVxLAorCSAqIDMgLSBBbHd5YXMgRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCisJICogNCAtIEFsd2F5cyBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcS4KKwkgKiBzZXQgZGVmdWx0IHRvIFJUTDgxOTJDRTozIFJUTDgxOTJFOjIKKwkgKiAqLworCXJ0bHBjaS0+Y29uc3RfcGNpX2FzcG0gPSAzOworCisJLypTZXR0aW5nIGZvciBQQ0ktRSBkZXZpY2UgKi8KKwlydGxwY2ktPmNvbnN0X2RldmljZXBjaV9hc3BtX3NldHRpbmcgPSAweDAzOworCisJLypTZXR0aW5nIGZvciBQQ0ktRSBicmlkZ2UgKi8KKwlydGxwY2ktPmNvbnN0X2hvc3RwY2lfYXNwbV9zZXR0aW5nID0gMHgwMjsKKworCS8qCisJICogSW4gSHcvU3cgUmFkaW8gT2ZmIHNpdHVhdGlvbi4KKwkgKiAwIC0gRGVmYXVsdCwKKwkgKiAxIC0gRnJvbSBBU1BNIHNldHRpbmcgd2l0aG91dCBsb3cgTWFjIFB3ciwKKwkgKiAyIC0gRnJvbSBBU1BNIHNldHRpbmcgd2l0aCBsb3cgTWFjIFB3ciwKKwkgKiAzIC0gQnVzIEQzCisJICogc2V0IGRlZmF1bHQgdG8gUlRMODE5MkNFOjAgUlRMODE5MlNFOjIKKwkgKi8KKwlydGxwY2ktPmNvbnN0X2h3c3dfcmZvZmZfZDMgPSAwOworCisJLyoKKwkgKiBUaGlzIHNldHRpbmcgd29ya3MgZm9yIHRob3NlIGRldmljZSB3aXRoCisJICogYmFja2Rvb3IgQVNQTSBzZXR0aW5nIHN1Y2ggYXMgRVBIWSBzZXR0aW5nLgorCSAqIDAgLSBOb3Qgc3VwcG9ydCBBU1BNLAorCSAqIDEgLSBTdXBwb3J0IEFTUE0sCisJICogMiAtIEFjY29yZGluZyB0byBjaGlwc2V0LgorCSAqLworCXJ0bHBjaS0+Y29uc3Rfc3VwcG9ydF9wY2lhc3BtID0gMTsKK30KKworaW50IHJ0bDkyZWVfaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CisJY2hhciAqZndfbmFtZSA9IE5VTEw7CisKKwlydGw5MmVlX2J0X3JlZ19pbml0KGh3KTsKKworCXJ0bHBjaS0+bXNpX3N1cHBvcnQgPSB0cnVlOworCXJ0bHByaXYtPmJ0Y29leGlzdC5idGNfb3BzID0gc3RnX3J0bF9idGNfZ2V0X29wc19wb2ludGVyKCk7CisKKwlydGxwcml2LT5kbS5iX2RtX2luaXRpYWxnYWluX2VuYWJsZSA9IDE7CisJcnRscHJpdi0+ZG0uZG1fZmxhZyA9IDA7CisJcnRscHJpdi0+ZG0uYl9kaXNhYmxlX2ZyYW1lYnVyc3RpbmcgPSAwOworCS8qcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlID0gMDsqLworCXJ0bHBjaS0+dHJhbnNtaXRfY29uZmlnID0gQ0ZFTkRGT1JNIHwgQklUKDE1KTsKKworCS8qanVzdCAyLjRHIGJhbmQqLworCXJ0bHByaXYtPnJ0bGhhbC5jdXJyZW50X2JhbmR0eXBlID0gQkFORF9PTl8yXzRHOworCXJ0bHByaXYtPnJ0bGhhbC5iYW5kc2V0ID0gQkFORF9PTl8yXzRHOworCXJ0bHByaXYtPnJ0bGhhbC5tYWNwaHltb2RlID0gU0lOR0xFTUFDX1NJTkdMRVBIWTsKKworCXJ0bHBjaS0+cmVjZWl2ZV9jb25maWcgPSAoUkNSX0FQUEZDUwkJCXwKKwkJCQkgIFJDUl9BUFBfTUlDCQkJfAorCQkJCSAgUkNSX0FQUF9JQ1YJCQl8CisJCQkJICBSQ1JfQVBQX1BIWVNUX1JYRkYJCXwKKwkJCQkgIFJDUl9IVENfTE9DX0NUUkwJCXwKKwkJCQkgIFJDUl9BTUYJCQl8CisJCQkJICBSQ1JfQUNGCQkJfAorCQkJCSAgUkNSX0FERgkJCXwKKwkJCQkgIFJDUl9BSUNWCQkJfAorCQkJCSAgUkNSX0FDUkMzMgkJCXwKKwkJCQkgIFJDUl9BQgkJCXwKKwkJCQkgIFJDUl9BTQkJCXwKKwkJCQkgIFJDUl9BUE0JCQl8CisJCQkJICAwKTsKKworCXJ0bHBjaS0+aXJxX21hc2tbMF0gPSAodTMyKSAoSU1SX1BTVElNRU9VVAkJfAorCQkJCS8qICAgSU1SX1RCREVSCQkJfAorCQkJCSAgICAgSU1SX1RCRE9LCQkJfAorCQkJCSAgICAgSU1SX0JDTkRNQUlOVDAJCXwqLworCQkJCSAgICAgSU1SX0MySENNRAkJCXwKKwkJCQkgICAgIElNUl9ISUdIRE9LCQl8CisJCQkJICAgICBJTVJfTUdOVERPSwkJfAorCQkJCSAgICAgSU1SX0JLRE9LCQkJfAorCQkJCSAgICAgSU1SX0JFRE9LCQkJfAorCQkJCSAgICAgSU1SX1ZJRE9LCQkJfAorCQkJCSAgICAgSU1SX1ZPRE9LCQkJfAorCQkJCSAgICAgSU1SX1JEVQkJCXwKKwkJCQkgICAgIElNUl9ST0sJCQl8CisJCQkJICAgICAwKTsKKwlydGxwY2ktPmlycV9tYXNrWzFdID0gKHUzMikgKElNUl9SWEZPVlcgfCAwKTsKKworCS8qIGZvciBkZWJ1ZyBsZXZlbCAqLworCXJ0bHByaXYtPmRiZy5nbG9iYWxfZGVidWdsZXZlbCA9IHJ0bHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGVidWc7CisJLyogZm9yIExQUyAmIElQUyAqLworCXJ0bHByaXYtPnBzYy5iX2luYWN0aXZlcHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPmJfaW5hY3RpdmVwczsKKwlydGxwcml2LT5wc2MuYl9zd2N0cmxfbHBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5iX3N3Y3RybF9scHM7CisJcnRscHJpdi0+cHNjLmJfZndjdHJsX2xwcyA9IHJ0bHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+Yl9md2N0cmxfbHBzOworCXJ0bHByaXYtPnBzYy5iX3JlZ19md2N0cmxfbHBzID0gMzsKKwlydGxwcml2LT5wc2MucmVnX21heF9scHNfYXdha2VpbnR2bCA9IDU7CisJLyogZm9yIEFTUE0sIHlvdSBjYW4gY2xvc2UgYXNwbSB0aHJvdWdoCisJICogc2V0IGNvbnN0X3N1cHBvcnRfcGNpYXNwbSA9IDAgKi8KKwlydGw5MmVlX2luaXRfYXNwbV92YXJzKGh3KTsKKworCWlmIChydGxwcml2LT5wc2MuYl9yZWdfZndjdHJsX2xwcyA9PSAxKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX01JTl9NT0RFOworCWVsc2UgaWYgKHJ0bHByaXYtPnBzYy5iX3JlZ19md2N0cmxfbHBzID09IDIpCisJCXJ0bHByaXYtPnBzYy5md2N0cmxfcHNtb2RlID0gRldfUFNfTUFYX01PREU7CisJZWxzZSBpZiAocnRscHJpdi0+cHNjLmJfcmVnX2Z3Y3RybF9scHMgPT0gMykKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19EVElNX01PREU7CisKKwkvKiBmb3IgZWFybHkgbW9kZSAqLworCXJ0bHByaXYtPnJ0bGhhbC5iX2Vhcmx5bW9kZV9lbmFibGUgPSBmYWxzZTsKKworCS8qbG93IHBvd2VyICovCisJcnRscHJpdi0+cHNjLmJfbG93X3Bvd2VyX2VuYWJsZSA9IGZhbHNlOworCisKKwkvKiBmb3IgZmlybXdhcmUgYnVmICovCisJcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9IHZtYWxsb2MoMHg4MDAwKTsKKwlpZiAoIXJ0bHByaXYtPnJ0bGhhbC5wZmlybXdhcmUpIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkNhbid0IGFsbG9jIGJ1ZmZlciBmb3IgZncuXG4iKSk7CisJCXJldHVybiAxOworCX0KKworCWZ3X25hbWUgPSAicnRsd2lmaS9ydGw4MTkyZWVmdy5iaW4iOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBmd19uYW1lLCBydGxwcml2LT5pby5kZXYpOworCisJaWYgKGVycikgeworCQlSVF9UUkFDRShDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiRmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmUhXG4iKSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoZmlybXdhcmUtPnNpemUgPiAweDgwMDApIHsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZpcm13YXJlIGlzIHRvbyBiaWchXG4iKSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCQlyZXR1cm4gMTsKKwl9CisJbWVtY3B5KHJ0bHByaXYtPnJ0bGhhbC5wZmlybXdhcmUsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CisJcnRscHJpdi0+cnRsaGFsLmZ3c2l6ZSA9IGZpcm13YXJlLT5zaXplOworCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBydGw5MmVlX2RlaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKSB7CisJCXZmcmVlKHJ0bHByaXYtPnJ0bGhhbC5wZmlybXdhcmUpOworCQlydGxwcml2LT5ydGxoYWwucGZpcm13YXJlID0gTlVMTDsKKwl9Cit9CisKKy8qIGdldCBidCBjb2V4aXN0IHN0YXR1cyAqLworYm9vbCBydGw5MmVlX2dldF9idGNfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHN0cnVjdCBydGxfaGFsX29wcyBydGw4MTkyZWVfaGFsX29wcyA9IHsKKwkuaW5pdF9zd192YXJzID0gcnRsOTJlZV9pbml0X3N3X3ZhcnMsCisJLmRlaW5pdF9zd192YXJzID0gcnRsOTJlZV9kZWluaXRfc3dfdmFycywKKwkucmVhZF9lZXByb21faW5mbyA9IHJ0bDkyZWVfcmVhZF9lZXByb21faW5mbywKKwkuaW50ZXJydXB0X3JlY29nbml6ZWQgPSBydGw5MmVlX2ludGVycnVwdF9yZWNvZ25pemVkLC8qbmVlZCBjaGVjayovCisJLmh3X2luaXQgPSBydGw5MmVlX2h3X2luaXQsCisJLmh3X2Rpc2FibGUgPSBydGw5MmVlX2NhcmRfZGlzYWJsZSwKKwkuaHdfc3VzcGVuZCA9IHJ0bDkyZWVfc3VzcGVuZCwKKwkuaHdfcmVzdW1lID0gcnRsOTJlZV9yZXN1bWUsCisJLmVuYWJsZV9pbnRlcnJ1cHQgPSBydGw5MmVlX2VuYWJsZV9pbnRlcnJ1cHQsCisJLmRpc2FibGVfaW50ZXJydXB0ID0gcnRsOTJlZV9kaXNhYmxlX2ludGVycnVwdCwKKwkuc2V0X25ldHdvcmtfdHlwZSA9IHJ0bDkyZWVfc2V0X25ldHdvcmtfdHlwZSwKKwkuc2V0X2Noa19ic3NpZCA9IHJ0bDkyZWVfc2V0X2NoZWNrX2Jzc2lkLAorCS5zZXRfcW9zID0gcnRsOTJlZV9zZXRfcW9zLAorCS5zZXRfYmNuX3JlZyA9IHJ0bDkyZWVfc2V0X2JlYWNvbl9yZWxhdGVkX3JlZ2lzdGVycywKKwkuc2V0X2Jjbl9pbnR2ID0gcnRsOTJlZV9zZXRfYmVhY29uX2ludGVydmFsLAorCS51cGRhdGVfaW50ZXJydXB0X21hc2sgPSBydGw5MmVlX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzaywKKwkuZ2V0X2h3X3JlZyA9IHJ0bDkyZWVfZ2V0X2h3X3JlZywKKwkuc2V0X2h3X3JlZyA9IHJ0bDkyZWVfc2V0X2h3X3JlZywKKwkudXBkYXRlX3JhdGVfdGJsID0gcnRsOTJlZV91cGRhdGVfaGFsX3JhdGVfdGJsLAorCS5wcmVfZmlsbF90eF9iZF9kZXNjID0gcnRsOTJlZV9wcmVfZmlsbF90eF9iZF9kZXNjLAorCS5yeF9kZXNjX2J1ZmZfcmVtYWluZWRfY250ID0gcnRsOTJlZV9yeF9kZXNjX2J1ZmZfcmVtYWluZWRfY250LAorCS5yeF9jaGVja19kbWFfb2sgPSBydGw5MmVlX3J4X2NoZWNrX2RtYV9vaywKKwkuZmlsbF90eF9kZXNjID0gcnRsOTJlZV90eF9maWxsX2Rlc2MsCisJLmZpbGxfdHhfY21kZGVzYyA9IHJ0bDkyZWVfdHhfZmlsbF9jbWRkZXNjLAorCS5xdWVyeV9yeF9kZXNjID0gcnRsOTJlZV9yeF9xdWVyeV9kZXNjLAorCS5zZXRfY2hhbm5lbF9hY2Nlc3MgPSBydGw5MmVlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nLAorCS5yYWRpb19vbm9mZl9jaGVja2luZyA9IHJ0bDkyZWVfZ3Bpb19yYWRpb19vbl9vZmZfY2hlY2tpbmcsCisJLnNldF9id19tb2RlID0gcnRsOTJlZV9waHlfc2V0X2J3X21vZGUsCisJLnN3aXRjaF9jaGFubmVsID0gcnRsOTJlZV9waHlfc3dfY2hubCwKKwkuZG1fd2F0Y2hkb2cgPSBydGw5MmVlX2RtX3dhdGNoZG9nLAorCS5zY2FuX29wZXJhdGlvbl9iYWNrdXAgPSBydGw5MmVlX3BoeV9zY2FuX29wZXJhdGlvbl9iYWNrdXAsCisJLnNldF9yZl9wb3dlcl9zdGF0ZSA9IHJ0bDkyZWVfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZSwKKwkubGVkX2NvbnRyb2wgPSBydGw5MmVlX2xlZF9jb250cm9sLAorCS5zZXRfZGVzYyA9IHJ0bDkyZWVfc2V0X2Rlc2MsCisJLmdldF9kZXNjID0gcnRsOTJlZV9nZXRfZGVzYywKKwkuaXNfdHhfZGVzY19jbG9zZWQgPSBydGw5MmVlX2lzX3R4X2Rlc2NfY2xvc2VkLAorCS5lbmFibGVfaHdfc2VjID0gcnRsOTJlZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnLAorCS5zZXRfa2V5ID0gcnRsOTJlZV9zZXRfa2V5LAorCS5pbml0X3N3X2xlZHMgPSBydGw5MmVlX2luaXRfc3dfbGVkcywKKwkuYWxsb3dfYWxsX2Rlc3RhZGRyID0gcnRsOTJlZV9hbGxvd19hbGxfZGVzdGFkZHIsCisJLmdldF9iYnJlZyA9IHJ0bDkyZWVfcGh5X3F1ZXJ5X2JiX3JlZywKKwkuc2V0X2JicmVnID0gcnRsOTJlZV9waHlfc2V0X2JiX3JlZywKKwkuZ2V0X3JmcmVnID0gcnRsOTJlZV9waHlfcXVlcnlfcmZfcmVnLAorCS5zZXRfcmZyZWcgPSBydGw5MmVlX3BoeV9zZXRfcmZfcmVnLAorCS5maWxsX2gyY19jbWQgPSBydGw5MmVlX2ZpbGxfaDJjX2NtZCwKKwkuZ2V0X2J0Y19zdGF0dXMgPSBydGw5MmVlX2dldF9idGNfc3RhdHVzLAorCS5yeF9jb21tYW5kX3BhY2tldCA9IHJ0bDkyZWVfcnhfY29tbWFuZF9wYWNrZXQsCit9OworCitzdGF0aWMgc3RydWN0IHJ0bF9tb2RfcGFyYW1zIHJ0bDkyZWVfbW9kX3BhcmFtcyA9IHsKKwkuc3dfY3J5cHRvID0gZmFsc2UsCisJLmJfaW5hY3RpdmVwcyA9IHRydWUsCisJLmJfc3djdHJsX2xwcyA9IGZhbHNlLAorCS5iX2Z3Y3RybF9scHMgPSB0cnVlLAorCS5kZWJ1ZyA9IERCR19FTUVSRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcnRsX2hhbF9jZmcgcnRsOTJlZV9oYWxfY2ZnID0geworCS5iYXJfaWQgPSAyLAorCS53cml0ZV9yZWFkYmFjayA9IHRydWUsCisJLm5hbWUgPSAicnRsOTJlZV9wY2kiLAorCS5md19uYW1lID0gInJ0bHdpZmkvcnRsODE5MmVlZncuYmluIiwKKwkub3BzID0gJnJ0bDgxOTJlZV9oYWxfb3BzLAorCS5tb2RfcGFyYW1zID0gJnJ0bDkyZWVfbW9kX3BhcmFtcywKKworCS5tYXBzW1NZU19JU09fQ1RSTF0gPSBSRUdfU1lTX0lTT19DVFJMLAorCS5tYXBzW1NZU19GVU5DX0VOXSA9IFJFR19TWVNfRlVOQ19FTiwKKwkubWFwc1tTWVNfQ0xLXSA9IFJFR19TWVNfQ0xLUiwKKwkubWFwc1tNQUNfUkNSX0FNXSA9IEFNLAorCS5tYXBzW01BQ19SQ1JfQUJdID0gQUIsCisJLm1hcHNbTUFDX1JDUl9BQ1JDMzJdID0gQUNSQzMyLAorCS5tYXBzW01BQ19SQ1JfQUNGXSA9IEFDRiwKKwkubWFwc1tNQUNfUkNSX0FBUF0gPSBBQVAsCisJLm1hcHNbTUFDX0hJTVJdID0gUkVHX0hJTVIsCisJLm1hcHNbTUFDX0hJTVJFXSA9IFJFR19ISU1SRSwKKworCS5tYXBzW0VGVVNFX0FDQ0VTU10gPSBSRUdfRUZVU0VfQUNDRVNTLAorCisJLm1hcHNbRUZVU0VfVEVTVF0gPSBSRUdfRUZVU0VfVEVTVCwKKwkubWFwc1tFRlVTRV9DVFJMXSA9IFJFR19FRlVTRV9DVFJMLAorCS5tYXBzW0VGVVNFX0NMS10gPSAwLAorCS5tYXBzW0VGVVNFX0NMS19DVFJMXSA9IFJFR19FRlVTRV9DVFJMLAorCS5tYXBzW0VGVVNFX1BXQ19FVjEyVl0gPSBQV0NfRVYxMlYsCisJLm1hcHNbRUZVU0VfRkVOX0VMRFJdID0gRkVOX0VMRFIsCisJLm1hcHNbRUZVU0VfTE9BREVSX0NMS19FTl0gPSBMT0FERVJfQ0xLX0VOLAorCS5tYXBzW0VGVVNFX0FOQThNXSA9IEFOQThNLAorCS5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSA9IEhXU0VUX01BWF9TSVpFLAorCS5tYXBzW0VGVVNFX01BWF9TRUNUSU9OX01BUF0gPSBFRlVTRV9NQVhfU0VDVElPTiwKKwkubWFwc1tFRlVTRV9SRUFMX0NPTlRFTlRfU0laRV0gPSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOLAorCS5tYXBzW0VGVVNFX09PQl9QUk9URUNUX0JZVEVTX0xFTl0gPSBFRlVTRV9PT0JfUFJPVEVDVF9CWVRFUywKKworCS5tYXBzW1JXQ0FNXSA9IFJFR19DQU1DTUQsCisJLm1hcHNbV0NBTUldID0gUkVHX0NBTVdSSVRFLAorCS5tYXBzW1JDQU1PXSA9IFJFR19DQU1SRUFELAorCS5tYXBzW0NBTURCR10gPSBSRUdfQ0FNREJHLAorCS5tYXBzW1NFQ1JdID0gUkVHX1NFQ0NGRywKKwkubWFwc1tTRUNfQ0FNX05PTkVdID0gQ0FNX05PTkUsCisJLm1hcHNbU0VDX0NBTV9XRVA0MF0gPSBDQU1fV0VQNDAsCisJLm1hcHNbU0VDX0NBTV9US0lQXSA9IENBTV9US0lQLAorCS5tYXBzW1NFQ19DQU1fQUVTXSA9IENBTV9BRVMsCisJLm1hcHNbU0VDX0NBTV9XRVAxMDRdID0gQ0FNX1dFUDEwNCwKKworCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UNl0gPSBJTVJfQkNORE1BSU5UNiwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDVdID0gSU1SX0JDTkRNQUlOVDUsCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQ0XSA9IElNUl9CQ05ETUFJTlQ0LAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UM10gPSBJTVJfQkNORE1BSU5UMywKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDJdID0gSU1SX0JDTkRNQUlOVDIsCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQxXSA9IElNUl9CQ05ETUFJTlQxLAorLyoJLm1hcHNbUlRMX0lNUl9CQ05ET0s4XSA9IElNUl9CQ05ET0s4LCAgICAgKi8gICAvKm5lZWQgY2hlY2sqLworCS5tYXBzW1JUTF9JTVJfQkNORE9LN10gPSBJTVJfQkNORE9LNywKKwkubWFwc1tSVExfSU1SX0JDTkRPSzZdID0gSU1SX0JDTkRPSzYsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s1XSA9IElNUl9CQ05ET0s1LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LNF0gPSBJTVJfQkNORE9LNCwKKwkubWFwc1tSVExfSU1SX0JDTkRPSzNdID0gSU1SX0JDTkRPSzMsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0syXSA9IElNUl9CQ05ET0syLAorCS5tYXBzW1JUTF9JTVJfQkNORE9LMV0gPSBJTVJfQkNORE9LMSwKKy8qCS5tYXBzW1JUTF9JTVJfVElNRU9VVDJdID0gSU1SX1RJTUVPVVQyLCovCisvKgkubWFwc1tSVExfSU1SX1RJTUVPVVQxXSA9IElNUl9USU1FT1VUMSwqLworCisJLm1hcHNbUlRMX0lNUl9UWEZPVlddID0gSU1SX1RYRk9WVywKKwkubWFwc1tSVExfSU1SX1BTVElNRU9VVF0gPSBJTVJfUFNUSU1FT1VULAorCS5tYXBzW1JUTF9JTVJfQmNuSW50XSA9IElNUl9CQ05ETUFJTlQwLAorCS5tYXBzW1JUTF9JTVJfUlhGT1ZXXSA9IElNUl9SWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9SRFVdID0gSU1SX1JEVSwKKwkubWFwc1tSVExfSU1SX0FUSU1FTkRdID0gSU1SX0FUSU1FTkQsCisJLm1hcHNbUlRMX0lNUl9CRE9LXSA9IElNUl9CQ05ET0swLAorCS5tYXBzW1JUTF9JTVJfTUdOVERPS10gPSBJTVJfTUdOVERPSywKKwkubWFwc1tSVExfSU1SX1RCREVSXSA9IElNUl9UQkRFUiwKKwkubWFwc1tSVExfSU1SX0hJR0hET0tdID0gSU1SX0hJR0hET0ssCisJLm1hcHNbUlRMX0lNUl9UQkRPS10gPSBJTVJfVEJET0ssCisJLm1hcHNbUlRMX0lNUl9CS0RPS10gPSBJTVJfQktET0ssCisJLm1hcHNbUlRMX0lNUl9CRURPS10gPSBJTVJfQkVET0ssCisJLm1hcHNbUlRMX0lNUl9WSURPS10gPSBJTVJfVklET0ssCisJLm1hcHNbUlRMX0lNUl9WT0RPS10gPSBJTVJfVk9ET0ssCisJLm1hcHNbUlRMX0lNUl9ST0tdID0gSU1SX1JPSywKKwkubWFwc1tSVExfSUJTU19JTlRfTUFTS1NdID0gKElNUl9CQ05ETUFJTlQwIHwgSU1SX1RCRE9LIHwgSU1SX1RCREVSKSwKKworCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTFNXSA9IERFU0M5MkNfUkFURTFNLAorCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTJNXSA9IERFU0M5MkNfUkFURTJNLAorCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTVfNU1dID0gREVTQzkyQ19SQVRFNV81TSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUxMU1dID0gREVTQzkyQ19SQVRFMTFNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU2TV0gPSBERVNDOTJDX1JBVEU2TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFOU1dID0gREVTQzkyQ19SQVRFOU0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTEyTV0gPSBERVNDOTJDX1JBVEUxMk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTE4TV0gPSBERVNDOTJDX1JBVEUxOE0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTI0TV0gPSBERVNDOTJDX1JBVEUyNE0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTM2TV0gPSBERVNDOTJDX1JBVEUzNk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTQ4TV0gPSBERVNDOTJDX1JBVEU0OE0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTU0TV0gPSBERVNDOTJDX1JBVEU1NE0sCisKKwkubWFwc1tSVExfUkNfSFRfUkFURU1DUzddID0gREVTQzkyQ19SQVRFTUNTNywKKwkubWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XSA9IERFU0M5MkNfUkFURU1DUzE1LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDkyZWVfcGNpX2lkc1tdID0geworCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE4QiwgcnRsOTJlZV9oYWxfY2ZnKX0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnRsOTJlZV9wY2lfaWRzKTsKKworTU9EVUxFX0FVVEhPUigiUmVhbHRlayBXbGFuRkFFCTx3bGFuZmFlQHJlYWx0ZWsuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTGFycnkgRmluZ2VyCTxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWFsdGVrIDgxOTJFIDgwMi4xMW4gUENJIHdpcmVsZXNzIik7CitNT0RVTEVfRklSTVdBUkUoInJ0bHdpZmkvcnRsODE5MmVlZncuYmluIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChzd2VuYywgcnRsOTJlZV9tb2RfcGFyYW1zLnN3X2NyeXB0bywgYm9vbCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHJ0bDkyZWVfbW9kX3BhcmFtcy5kZWJ1ZywgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChpcHMsIHJ0bDkyZWVfbW9kX3BhcmFtcy5iX2luYWN0aXZlcHMsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3bHBzLCBydGw5MmVlX21vZF9wYXJhbXMuYl9zd2N0cmxfbHBzLCBib29sLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChmd2xwcywgcnRsOTJlZV9tb2RfcGFyYW1zLmJfZndjdHJsX2xwcywgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN3ZW5jLCAidXNpbmcgaGFyZHdhcmUgY3J5cHRvIChkZWZhdWx0IDAgW2hhcmR3YXJlXSlcbiIpOworTU9EVUxFX1BBUk1fREVTQyhpcHMsICJ1c2luZyBubyBsaW5rIHBvd2VyIHNhdmUgKGRlZmF1bHQgMSBpcyBvcGVuKVxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZ3bHBzLCAidXNpbmcgbGlua2VkIGZ3IGNvbnRyb2wgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTZXQgZGVidWcgbGV2ZWwgKDAtNSkgKGRlZmF1bHQgMCkiKTsKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHJ0bHdpZmlfcG1fb3BzLCBzdGdfcnRsX3BjaV9zdXNwZW5kLAorCQkJIHN0Z19ydGxfcGNpX3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw5MmVlX2RyaXZlciA9IHsKKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCS5pZF90YWJsZSA9IHJ0bDkyZWVfcGNpX2lkcywKKwkucHJvYmUgPSBzdGdfcnRsX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gc3RnX3J0bF9wY2lfZGlzY29ubmVjdCwKKworCS5kcml2ZXIucG0gPSAmcnRsd2lmaV9wbV9vcHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBydGw5MmVlX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSBydGxfY29yZV9tb2R1bGVfaW5pdCgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZydGw5MmVlX2RyaXZlcik7CisJaWYgKHJldCkKKwkJUlRfQVNTRVJUKGZhbHNlLCAoIjogTm8gZGV2aWNlIGZvdW5kXG4iKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRsOTJlZV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcnRsOTJlZV9kcml2ZXIpOworCXJ0bF9jb3JlX21vZHVsZV9leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KHJ0bDkyZWVfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQocnRsOTJlZV9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9zdy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvc3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcwMjU3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS9zdy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJFX1NXX0hfXworI2RlZmluZSBfX1JUTDkyRV9TV19IX18KKworaW50IHJ0bDkyZWVfaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJlZV9kZWluaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bDkyZWVfZ2V0X2J0Y19zdGF0dXModm9pZCk7CitpbnQgcnRsX2NvcmVfbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkIHJ0bF9jb3JlX21vZHVsZV9leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3RhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZWI5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS90YWJsZS5jCkBAIC0wLDAgKzEsODgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIENyZWF0ZWQgb24gIDIwMTAvIDUvMTgsICAxOjQxCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInRhYmxlLmgiCit1MzIgUlRMODE5MkVFX1BIWV9SRUdfQVJSQVlbXSA9IHsKKwkJMHg4MDAsIDB4ODAwNDAwMDAsCisJCTB4ODA0LCAweDAwMDAwMDAzLAorCQkweDgwOCwgMHgwMDAwRkMwMCwKKwkJMHg4MEMsIDB4MDAwMDAwMEEsCisJCTB4ODEwLCAweDEwMDAxMzMxLAorCQkweDgxNCwgMHgwMjBDM0QxMCwKKwkJMHg4MTgsIDB4MDIyMjAzODUsCisJCTB4ODFDLCAweDAwMDAwMDAwLAorCQkweDgyMCwgMHgwMTAwMDEwMCwKKwkJMHg4MjQsIDB4MDAzOTAyMDQsCisJCTB4ODI4LCAweDAxMDAwMTAwLAorCQkweDgyQywgMHgwMDM5MDIwNCwKKwkJMHg4MzAsIDB4MzIzMjMyMzIsCisJCTB4ODM0LCAweDMwMzAzMDMwLAorCQkweDgzOCwgMHgzMDMwMzAzMCwKKwkJMHg4M0MsIDB4MzAzMDMwMzAsCisJCTB4ODQwLCAweDAwMDEwMDAwLAorCQkweDg0NCwgMHgwMDAxMDAwMCwKKwkJMHg4NDgsIDB4MjgyODI4MjgsCisJCTB4ODRDLCAweDI4MjgyODI4LAorCQkweDg1MCwgMHgwMDAwMDAwMCwKKwkJMHg4NTQsIDB4MDAwMDAwMDAsCisJCTB4ODU4LCAweDAwOUEwMDlBLAorCQkweDg1QywgMHgwMTAwMDAxNCwKKwkJMHg4NjAsIDB4NjZGNjAwMDAsCisJCTB4ODY0LCAweDA2MUYwMDAwLAorCQkweDg2OCwgMHgzMDMwMzAzMCwKKwkJMHg4NkMsIDB4MzAzMDMwMzAsCisJCTB4ODcwLCAweDAwMDAwMDAwLAorCQkweDg3NCwgMHg1NTAwNDIwMCwKKwkJMHg4NzgsIDB4MDgwODA4MDgsCisJCTB4ODdDLCAweDAwMDAwMDAwLAorCQkweDg4MCwgMHhCMDAwMEMxQywKKwkJMHg4ODQsIDB4MDAwMDAwMDEsCisJCTB4ODg4LCAweDAwMDAwMDAwLAorCQkweDg4QywgMHhDQzAwMDBDMCwKKwkJMHg4OTAsIDB4MDAwMDA4MDAsCisJCTB4ODk0LCAweEZGRkZGRkZFLAorCQkweDg5OCwgMHg0MDMwMjAxMCwKKwkJMHg5MDAsIDB4MDAwMDAwMDAsCisJCTB4OTA0LCAweDAwMDAwMDIzLAorCQkweDkwOCwgMHgwMDAwMDAwMCwKKwkJMHg5MEMsIDB4ODExMjEzMTMsCisJCTB4OTEwLCAweDgwNkMwMDAxLAorCQkweDkxNCwgMHgwMDAwMDAwMSwKKwkJMHg5MTgsIDB4MDAwMDAwMDAsCisJCTB4OTFDLCAweDAwMDEwMDAwLAorCQkweDkyNCwgMHgwMDAwMDAwMSwKKwkJMHg5MjgsIDB4MDAwMDAwMDAsCisJCTB4OTJDLCAweDAwMDAwMDAwLAorCQkweDkzMCwgMHgwMDAwMDAwMCwKKwkJMHg5MzQsIDB4MDAwMDAwMDAsCisJCTB4OTM4LCAweDAwMDAwMDAwLAorCQkweDkzQywgMHgwMDAwMDAwMCwKKwkJMHg5NDAsIDB4MDAwMDAwMDAsCisJCTB4OTQ0LCAweDAwMDAwMDAwLAorCQkweDk0QywgMHgwMDAwMDAwOCwKKwkJMHhBMDAsIDB4MDBEMEM3QzgsCisJCTB4QTA0LCAweDgxRkYwMDBDLAorCQkweEEwOCwgMHg4QzgzODMwMCwKKwkJMHhBMEMsIDB4MkU2ODEyMEYsCisJCTB4QTEwLCAweDk1MDA5Qjc4LAorCQkweEExNCwgMHgxMTE0RDAyOCwKKwkJMHhBMTgsIDB4MDA4ODExMTcsCisJCTB4QTFDLCAweDg5MTQwRjAwLAorCQkweEEyMCwgMHgxQTFCMDAwMCwKKwkJMHhBMjQsIDB4MDkwRTEzMTcsCisJCTB4QTI4LCAweDAwMDAwMjA0LAorCQkweEEyQywgMHgwMEQzMDAwMCwKKwkJMHhBNzAsIDB4MTAxRkJGMDAsCisJCTB4QTc0LCAweDAwMDAwMDA3LAorCQkweEE3OCwgMHgwMDAwMDkwMCwKKwkJMHhBN0MsIDB4MjI1QjA2MDYsCisJCTB4QTgwLCAweDIxODA3NUIxLAorCQkweEIzOCwgMHgwMDAwMDAwMCwKKwkJMHhDMDAsIDB4NDgwNzFENDAsCisJCTB4QzA0LCAweDAzQTA1NjMzLAorCQkweEMwOCwgMHgwMDAwMDBFNCwKKwkJMHhDMEMsIDB4NkM2QzZDNkMsCisJCTB4QzEwLCAweDA4ODAwMDAwLAorCQkweEMxNCwgMHg0MDAwMDEwMCwKKwkJMHhDMTgsIDB4MDg4MDAwMDAsCisJCTB4QzFDLCAweDQwMDAwMTAwLAorCQkweEMyMCwgMHgwMDAwMDAwMCwKKwkJMHhDMjQsIDB4MDAwMDAwMDAsCisJCTB4QzI4LCAweDAwMDAwMDAwLAorCQkweEMyQywgMHgwMDAwMDAwMCwKKwkJMHhDMzAsIDB4NjlFOUFDNDcsCisJCTB4QzM0LCAweDQ2OTY1MkFGLAorCQkweEMzOCwgMHg0OTc5NTk5NCwKKwkJMHhDM0MsIDB4MEE5Nzk3MUMsCisJCTB4QzQwLCAweDFGN0M0MDNGLAorCQkweEM0NCwgMHgwMDAxMDBCNywKKwkJMHhDNDgsIDB4RUMwMjAxMDcsCisJCTB4QzRDLCAweDAwN0YwMzdGLAorCTB4RkYwMTA3MTgsIDB4QUJDRCwKKwkJMHhDNTAsIDB4MDAzNDAyMjAsCisJMHhDRENEQ0RDRCwgMHhDRENELAorCQkweEM1MCwgMHgwMDM0MDAyMCwKKwkweEZGMDEwNzE4LCAweERFQUQsCisJCTB4QzU0LCAweDAwODA4MDFGLAorCTB4RkYwMTA3MTgsIDB4QUJDRCwKKwkJMHhDNTgsIDB4MDAwMDAyMjAsCisJMHhDRENEQ0RDRCwgMHhDRENELAorCQkweEM1OCwgMHgwMDAwMDAyMCwKKwkweEZGMDEwNzE4LCAweERFQUQsCisJCTB4QzVDLCAweDAwMjQ4NDkyLAorCQkweEM2MCwgMHgwMDAwMDAwMCwKKwkJMHhDNjQsIDB4NzExMjg0OEIsCisJCTB4QzY4LCAweDQ3QzAwQkZGLAorCQkweEM2QywgMHgwMDAwMDAzNiwKKwkJMHhDNzAsIDB4MDAwMDA2MDAsCisJCTB4Qzc0LCAweDAyMDEzMTY5LAorCQkweEM3OCwgMHgwMDAwMDAxRiwKKwkJMHhDN0MsIDB4MDBCOTE2MTIsCisJMHhGRjAxMDcxOCwgMHhBQkNELAorCQkweEM4MCwgMHgyRDQwMDBCNSwKKwkweENEQ0RDRENELCAweENEQ0QsCisJCTB4QzgwLCAweDQwMDAwMTAwLAorCTB4RkYwMTA3MTgsIDB4REVBRCwKKwkJMHhDODQsIDB4MjFGNjAwMDAsCisJMHhGRjAxMDcxOCwgMHhBQkNELAorCQkweEM4OCwgMHgyRDQwMDBCNSwKKwkweENEQ0RDRENELCAweENEQ0QsCisJCTB4Qzg4LCAweDQwMDAwMTAwLAorCTB4RkYwMTA3MTgsIDB4REVBRCwKKwkJMHhDOEMsIDB4QTBFNDAwMDAsCisJCTB4QzkwLCAweDAwMTIxODIwLAorCQkweEM5NCwgMHgwMDAwMDAwMCwKKwkJMHhDOTgsIDB4MDAxMjE4MjAsCisJCTB4QzlDLCAweDAwMDA3RjdGLAorCQkweENBMCwgMHgwMDAwMDAwMCwKKwkJMHhDQTQsIDB4MDAwMzAwQTAsCisJCTB4Q0E4LCAweDAwMDAwMDAwLAorCQkweENBQywgMHgwMDAwMDAwMCwKKwkJMHhDQjAsIDB4MDAwMDAwMDAsCisJCTB4Q0I0LCAweDAwMDAwMDAwLAorCQkweENCOCwgMHgwMDAwMDAwMCwKKwkJMHhDQkMsIDB4MjgwMDAwMDAsCisJCTB4Q0MwLCAweDAwMDAwMDAwLAorCQkweENDNCwgMHgwMDAwMDAwMCwKKwkJMHhDQzgsIDB4MDAwMDAwMDAsCisJCTB4Q0NDLCAweDAwMDAwMDAwLAorCQkweENEMCwgMHgwMDAwMDAwMCwKKwkJMHhDRDQsIDB4MDAwMDAwMDAsCisJCTB4Q0Q4LCAweDY0QjIyNDI3LAorCQkweENEQywgMHgwMDc2NjkzMiwKKwkJMHhDRTAsIDB4MDAyMjIyMjIsCisJCTB4Q0U0LCAweDAwMDQwMDAwLAorCQkweENFOCwgMHg3NzY0NDMwMiwKKwkJMHhDRUMsIDB4MkY5N0Q0MEMsCisJCTB4RDAwLCAweDAwMDgwNzQwLAorCQkweEQwNCwgMHgwMDAyMDQwMywKKwkJMHhEMDgsIDB4MDAwMDkwN0YsCisJCTB4RDBDLCAweDIwMDEwMjAxLAorCQkweEQxMCwgMHhBMDYzMzMzMywKKwkJMHhEMTQsIDB4MzMzM0JDNDMsCisJCTB4RDE4LCAweDdBOEY1QjZCLAorCQkweEQxQywgMHgwMDAwMDA3RiwKKwkJMHhEMkMsIDB4Q0M5Nzk5NzUsCisJCTB4RDMwLCAweDAwMDAwMDAwLAorCQkweEQzNCwgMHg4MDYwODAwMCwKKwkJMHhEMzgsIDB4MDAwMDAwMDAsCisJCTB4RDNDLCAweDAwMTI3MzUzLAorCQkweEQ0MCwgMHgwMDAwMDAwMCwKKwkJMHhENDQsIDB4MDAwMDAwMDAsCisJCTB4RDQ4LCAweDAwMDAwMDAwLAorCQkweEQ0QywgMHgwMDAwMDAwMCwKKwkJMHhENTAsIDB4NjQzNzE0MEEsCisJCTB4RDU0LCAweDAwMDAwMDAwLAorCQkweEQ1OCwgMHgwMDAwMDI4MiwKKwkJMHhENUMsIDB4MzAwMzIwNjQsCisJCTB4RDYwLCAweDQ2NTNERTY4LAorCQkweEQ2NCwgMHgwNDUxOEEzQywKKwkJMHhENjgsIDB4MDAwMDIxMDEsCisJCTB4RDZDLCAweDJBMjAxQzE2LAorCQkweEQ3MCwgMHgxODEyMzYyRSwKKwkJMHhENzQsIDB4MzIyQzIyMjAsCisJCTB4RDc4LCAweDAwMEUzQzI0LAorCQkweEQ4MCwgMHgwMTA4MTAwOCwKKwkJMHhEODQsIDB4MDAwMDA4MDAsCisJCTB4RDg4LCAweEYwQjUwMDAwLAorCQkweEUwMCwgMHgzMDMwMzAzMCwKKwkJMHhFMDQsIDB4MzAzMDMwMzAsCisJCTB4RTA4LCAweDAzOTAzMDMwLAorCQkweEUxMCwgMHgzMDMwMzAzMCwKKwkJMHhFMTQsIDB4MzAzMDMwMzAsCisJCTB4RTE4LCAweDMwMzAzMDMwLAorCQkweEUxQywgMHgzMDMwMzAzMCwKKwkJMHhFMjgsIDB4MDAwMDAwMDAsCisJCTB4RTMwLCAweDEwMDBEQzFGLAorCQkweEUzNCwgMHgxMDAwOEMxRiwKKwkJMHhFMzgsIDB4MDIxNDAxMDIsCisJCTB4RTNDLCAweDY4MTYwNEMyLAorCQkweEU0MCwgMHgwMTAwN0MwMCwKKwkJMHhFNDQsIDB4MDEwMDQ4MDAsCisJCTB4RTQ4LCAweEZCMDAwMDAwLAorCQkweEU0QywgMHgwMDAwMjhEMSwKKwkJMHhFNTAsIDB4MTAwMERDMUYsCisJCTB4RTU0LCAweDEwMDA4QzFGLAorCQkweEU1OCwgMHgwMjE0MDEwMiwKKwkJMHhFNUMsIDB4MjgxNjBEMDUsCisJCTB4RTYwLCAweDAwMDAwMDA4LAorCQkweEU2OCwgMHgwRkMwNTY1NiwKKwkJMHhFNkMsIDB4MDNDMDk2OTYsCisJCTB4RTcwLCAweDAzQzA5Njk2LAorCQkweEU3NCwgMHgwQzAwNTY1NiwKKwkJMHhFNzgsIDB4MEMwMDU2NTYsCisJCTB4RTdDLCAweDBDMDA1NjU2LAorCQkweEU4MCwgMHgwQzAwNTY1NiwKKwkJMHhFODQsIDB4MDNDMDk2OTYsCisJCTB4RTg4LCAweDBDMDA1NjU2LAorCQkweEU4QywgMHgwM0MwOTY5NiwKKwkJMHhFRDAsIDB4MDNDMDk2OTYsCisJCTB4RUQ0LCAweDAzQzA5Njk2LAorCQkweEVEOCwgMHgwM0MwOTY5NiwKKwkJMHhFREMsIDB4MDAwMEQ2RDYsCisJCTB4RUUwLCAweDAwMDBENkQ2LAorCQkweEVFQywgMHgwRkMwMTYxNiwKKwkJMHhFRTQsIDB4QjAwMDBDMUMsCisJCTB4RUU4LCAweDAwMDAwMDAxLAorCQkweEYxNCwgMHgwMDAwMDAwMywKKwkJMHhGNEMsIDB4MDAwMDAwMDAsCisJCTB4RjAwLCAweDAwMDAwMzAwLAorfTsKKwordTMyIFJUTDgxOTJFRV9QSFlfUkVHX0FSUkFZX1BHW10gPSB7CisJMCwgMCwgMCwgMHgwMDAwMGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMzIwMCwKKwkwLCAwLCAxLCAweDAwMDAwZTA4LCAweDAwMDBmZjAwLCAweDAwMDAzMjAwLAorCTAsIDAsIDAsIDB4MDAwMDA4NmMsIDB4ZmZmZmZmMDAsIDB4MzIzMjMyMDAsCisJMCwgMCwgMSwgMHgwMDAwMDg2YywgMHhmZmZmZmYwMCwgMHgzMjMyMzIwMCwKKwkwLCAwLCAwLCAweDAwMDAwZTAwLCAweGZmZmZmZmZmLCAweDM0MzQzNjM2LAorCTAsIDAsIDEsIDB4MDAwMDBlMDAsIDB4ZmZmZmZmZmYsIDB4MzQzNDM2MzYsCisJMCwgMCwgMCwgMHgwMDAwMGUwNCwgMHhmZmZmZmZmZiwgMHgyODI4MzAzMiwKKwkwLCAwLCAxLCAweDAwMDAwZTA0LCAweGZmZmZmZmZmLCAweDI4MjgzMDMyLAorCTAsIDAsIDAsIDB4MDAwMDBlMTAsIDB4ZmZmZmZmZmYsIDB4MzQzNjM4NDAsCisJMCwgMCwgMSwgMHgwMDAwMGUxMCwgMHhmZmZmZmZmZiwgMHgzNDM2Mzg0MCwKKwkwLCAwLCAwLCAweDAwMDAwZTE0LCAweGZmZmZmZmZmLCAweDI2MjgzMDMyLAorCTAsIDAsIDEsIDB4MDAwMDBlMTQsIDB4ZmZmZmZmZmYsIDB4MjYyODMwMzIsCisJMCwgMCwgMSwgMHgwMDAwMGUxOCwgMHhmZmZmZmZmZiwgMHgzNjM4NDA0MCwKKwkwLCAwLCAxLCAweDAwMDAwZTFjLCAweGZmZmZmZmZmLCAweDI0MjYyODMyLAorCTAsIDEsIDAsIDB4MDAwMDA4MzgsIDB4ZmZmZmZmMDAsIDB4MzIzMjMyMDAsCisJMCwgMSwgMSwgMHgwMDAwMDgzOCwgMHhmZmZmZmYwMCwgMHgzMjMyMzIwMCwKKwkwLCAxLCAwLCAweDAwMDAwODZjLCAweDAwMDAwMGZmLCAweDAwMDAwMDMyLAorCTAsIDEsIDEsIDB4MDAwMDA4NmMsIDB4MDAwMDAwZmYsIDB4MDAwMDAwMzIsCisJMCwgMSwgMCwgMHgwMDAwMDgzMCwgMHhmZmZmZmZmZiwgMHgzNDM0MzYzNiwKKwkwLCAxLCAxLCAweDAwMDAwODMwLCAweGZmZmZmZmZmLCAweDM0MzQzNjM2LAorCTAsIDEsIDAsIDB4MDAwMDA4MzQsIDB4ZmZmZmZmZmYsIDB4MjgyODMwMzIsCisJMCwgMSwgMSwgMHgwMDAwMDgzNCwgMHhmZmZmZmZmZiwgMHgyODI4MzAzMiwKKwkwLCAxLCAwLCAweDAwMDAwODNjLCAweGZmZmZmZmZmLCAweDM0MzYzODQwLAorCTAsIDEsIDEsIDB4MDAwMDA4M2MsIDB4ZmZmZmZmZmYsIDB4MzQzNjM4NDAsCisJMCwgMSwgMCwgMHgwMDAwMDg0OCwgMHhmZmZmZmZmZiwgMHgyNjI4MzAzMiwKKwkwLCAxLCAxLCAweDAwMDAwODQ4LCAweGZmZmZmZmZmLCAweDI2MjgzMDMyLAorCTAsIDEsIDEsIDB4MDAwMDA4NGMsIDB4ZmZmZmZmZmYsIDB4MzYzODQwNDAsCisJMCwgMSwgMSwgMHgwMDAwMDg2OCwgMHhmZmZmZmZmZiwgMHgyNDI2MjgzMgorfTsKKwordTMyIFJUTDgxOTJFRV9SQURJT0FfQVJSQVlbXSA9IHsKKwkJMHgwN0YsIDB4MDAwMDAwODIsCisJCTB4MDgxLCAweDAwMDNGQzAwLAorCQkweDAwMCwgMHgwMDAzMDAwMCwKKwkJMHgwMDgsIDB4MDAwMDg0MDAsCisJCTB4MDE4LCAweDAwMDAwNDA3LAorCQkweDAxOSwgMHgwMDAwMDAxMiwKKwkJMHgwMUIsIDB4MDAwMDAwNjQsCisJCTB4MDFFLCAweDAwMDgwMDA5LAorCQkweDAxRiwgMHgwMDAwMDg4MCwKKwkJMHgwMkYsIDB4MDAwMUEwNjAsCisJCTB4MDNGLCAweDAwMDAwMDAwLAorCQkweDA0MiwgMHgwMDAwNjBDMCwKKwkJMHgwNTcsIDB4MDAwRDAwMDAsCisJCTB4MDU4LCAweDAwMEJFMTgwLAorCQkweDA2NywgMHgwMDAwMTU1MiwKKwkJMHgwODMsIDB4MDAwMDAwMDAsCisJCTB4MEIwLCAweDAwMEZGOUYxLAorCQkweDBCMSwgMHgwMDA1NTQxOCwKKwkJMHgwQjIsIDB4MDAwOENDMDAsCisJCTB4MEI0LCAweDAwMDQzMDgzLAorCQkweDBCNSwgMHgwMDAwODE2NiwKKwkJMHgwQjYsIDB4MDAwMDgwM0UsCisJCTB4MEI3LCAweDAwMDFDNjlGLAorCQkweDBCOCwgMHgwMDAwNDA3RiwKKwkJMHgwQjksIDB4MDAwODAwMDEsCisJCTB4MEJBLCAweDAwMDQwMDAxLAorCQkweDBCQiwgMHgwMDAwMDQwMCwKKwkJMHgwQkYsIDB4MDAwQzAwMDAsCisJCTB4MEMyLCAweDAwMDAyNDAwLAorCQkweDBDMywgMHgwMDAwMDAwOSwKKwkJMHgwQzQsIDB4MDAwNDBDOTEsCisJCTB4MEM1LCAweDAwMDk5OTk5LAorCQkweDBDNiwgMHgwMDAwMDBBMywKKwkJMHgwQzcsIDB4MDAwODg4MjAsCisJCTB4MEM4LCAweDAwMDc2QzA2LAorCQkweDBDOSwgMHgwMDAwMDAwMCwKKwkJMHgwQ0EsIDB4MDAwODAwMDAsCisJCTB4MERGLCAweDAwMDAwMTgwLAorCQkweDBFRiwgMHgwMDAwMDFBMCwKKwkJMHgwNTEsIDB4MDAwNjk1NDUsCisJCTB4MDUyLCAweDAwMDdFNDVFLAorCQkweDA1MywgMHgwMDAwMDA3MSwKKwkJMHgwNTYsIDB4MDAwNTFGRjMsCisJCTB4MDM1LCAweDAwMDAwMEE4LAorCQkweDAzNSwgMHgwMDAwMDFFMiwKKwkJMHgwMzUsIDB4MDAwMDAyQTgsCisJCTB4MDM2LCAweDAwMDAxQzI0LAorCQkweDAzNiwgMHgwMDAwOUMyNCwKKwkJMHgwMzYsIDB4MDAwMTFDMjQsCisJCTB4MDM2LCAweDAwMDE5QzI0LAorCQkweDAxOCwgMHgwMDAwMEMwNywKKwkJMHgwNUEsIDB4MDAwNDgwMDAsCisJCTB4MDE5LCAweDAwMDczOUQwLAorCTB4RkYwMTA3MTgsIDB4QUJDRCwKKwkJMHgwMzQsIDB4MDAwMEEwOTMsCisJCTB4MDM0LCAweDAwMDA5MDhGLAorCQkweDAzNCwgMHgwMDAwODA4QywKKwkJMHgwMzQsIDB4MDAwMDcwNEQsCisJCTB4MDM0LCAweDAwMDA2MDRBLAorCQkweDAzNCwgMHgwMDAwNTA0NywKKwkJMHgwMzQsIDB4MDAwMDQwMEEsCisJCTB4MDM0LCAweDAwMDAzMDA3LAorCQkweDAzNCwgMHgwMDAwMjAwNCwKKwkJMHgwMzQsIDB4MDAwMDEwMDEsCisJCTB4MDM0LCAweDAwMDAwMDAwLAorCTB4Q0RDRENEQ0QsIDB4Q0RDRCwKKwkJMHgwMzQsIDB4MDAwMEFERDcsCisJCTB4MDM0LCAweDAwMDA5REQ0LAorCQkweDAzNCwgMHgwMDAwOEREMSwKKwkJMHgwMzQsIDB4MDAwMDdEQ0UsCisJCTB4MDM0LCAweDAwMDA2RENCLAorCQkweDAzNCwgMHgwMDAwNURDOCwKKwkJMHgwMzQsIDB4MDAwMDREQzUsCisJCTB4MDM0LCAweDAwMDAzNENDLAorCQkweDAzNCwgMHgwMDAwMjQ0RiwKKwkJMHgwMzQsIDB4MDAwMDE0NEMsCisJCTB4MDM0LCAweDAwMDAwMDE0LAorCTB4RkYwMTA3MTgsIDB4REVBRCwKKwkJMHgwMDAsIDB4MDAwMzAxNTksCisJCTB4MDg0LCAweDAwMDY4MTgwLAorCQkweDA4NiwgMHgwMDAwMDE0RSwKKwkJMHgwODcsIDB4MDAwNDhFMDAsCisJCTB4MDhFLCAweDAwMDY1NTQwLAorCQkweDA4RiwgMHgwMDA4ODAwMCwKKwkJMHgwRUYsIDB4MDAwMDIwQTAsCisJMHhGRjAxMDcxOCwgMHhBQkNELAorCQkweDAzQiwgMHgwMDBGMDdCMCwKKwkweENEQ0RDRENELCAweENEQ0QsCisJCTB4MDNCLCAweDAwMEYwMkIwLAorCTB4RkYwMTA3MTgsIDB4REVBRCwKKwkJMHgwM0IsIDB4MDAwRUY3QjAsCisJCTB4MDNCLCAweDAwMEQ0RkIwLAorCQkweDAzQiwgMHgwMDBDRjA2MCwKKwkJMHgwM0IsIDB4MDAwQjAwOTAsCisJCTB4MDNCLCAweDAwMEEwMDgwLAorCQkweDAzQiwgMHgwMDA5MDA4MCwKKwkJMHgwM0IsIDB4MDAwOEY3ODAsCisJMHhGRjAxMDcxOCwgMHhBQkNELAorCQkweDAzQiwgMHgwMDA3ODdCMCwKKwkweENEQ0RDRENELCAweENEQ0QsCisJCTB4MDNCLCAweDAwMDc4NzMwLAorCTB4RkYwMTA3MTgsIDB4REVBRCwKKwkJMHgwM0IsIDB4MDAwNjBGQjAsCisJCTB4MDNCLCAweDAwMDVGRkEwLAorCQkweDAzQiwgMHgwMDA0MDYyMCwKKwkJMHgwM0IsIDB4MDAwMzcwOTAsCisJCTB4MDNCLCAweDAwMDIwMDgwLAorCQkweDAzQiwgMHgwMDAxRjA2MCwKKwkJMHgwM0IsIDB4MDAwMEZGQjAsCisJCTB4MEVGLCAweDAwMDAwMEEwLAorCQkweDBGRSwgMHgwMDAwMDAwMCwKKwkJMHgwMTgsIDB4MDAwMEZDMDcsCisJCTB4MEZFLCAweDAwMDAwMDAwLAorCQkweDBGRSwgMHgwMDAwMDAwMCwKKwkJMHgwRkUsIDB4MDAwMDAwMDAsCisJCTB4MEZFLCAweDAwMDAwMDAwLAorCQkweDAxRSwgMHgwMDAwMDAwMSwKKwkJMHgwMUYsIDB4MDAwODAwMDAsCisJCTB4MDAwLCAweDAwMDMzRTcwLAorfTsKKwordTMyIFJUTDgxOTJFRV9SQURJT0JfQVJSQVlbXSA9IHsKKwkJMHgwN0YsIDB4MDAwMDAwODIsCisJCTB4MDgxLCAweDAwMDNGQzAwLAorCQkweDAwMCwgMHgwMDAzMDAwMCwKKwkJMHgwMDgsIDB4MDAwMDg0MDAsCisJCTB4MDE4LCAweDAwMDAwNDA3LAorCQkweDAxOSwgMHgwMDAwMDAxMiwKKwkJMHgwMUIsIDB4MDAwMDAwNjQsCisJCTB4MDFFLCAweDAwMDgwMDA5LAorCQkweDAxRiwgMHgwMDAwMDg4MCwKKwkJMHgwMkYsIDB4MDAwMUEwNjAsCisJCTB4MDNGLCAweDAwMDAwMDAwLAorCQkweDA0MiwgMHgwMDAwNjBDMCwKKwkJMHgwNTcsIDB4MDAwRDAwMDAsCisJCTB4MDU4LCAweDAwMEJFMTgwLAorCQkweDA2NywgMHgwMDAwMTU1MiwKKwkJMHgwN0YsIDB4MDAwMDAwODIsCisJCTB4MDgxLCAweDAwMDNGMDAwLAorCQkweDA4MywgMHgwMDAwMDAwMCwKKwkJMHgwREYsIDB4MDAwMDAxODAsCisJCTB4MEVGLCAweDAwMDAwMUEwLAorCQkweDA1MSwgMHgwMDA2OTU0NSwKKwkJMHgwNTIsIDB4MDAwN0U0MkUsCisJCTB4MDUzLCAweDAwMDAwMDcxLAorCQkweDA1NiwgMHgwMDA1MUZGMywKKwkJMHgwMzUsIDB4MDAwMDAwQTgsCisJCTB4MDM1LCAweDAwMDAwMUUwLAorCQkweDAzNSwgMHgwMDAwMDJBOCwKKwkJMHgwMzYsIDB4MDAwMDFDQTgsCisJCTB4MDM2LCAweDAwMDA5QzI0LAorCQkweDAzNiwgMHgwMDAxMUMyNCwKKwkJMHgwMzYsIDB4MDAwMTlDMjQsCisJCTB4MDE4LCAweDAwMDAwQzA3LAorCQkweDA1QSwgMHgwMDA0ODAwMCwKKwkJMHgwMTksIDB4MDAwNzM5RDAsCisJMHhGRjAxMDcxOCwgMHhBQkNELAorCQkweDAzNCwgMHgwMDAwQTA5MywKKwkJMHgwMzQsIDB4MDAwMDkwOEYsCisJCTB4MDM0LCAweDAwMDA4MDhDLAorCQkweDAzNCwgMHgwMDAwNzA0RCwKKwkJMHgwMzQsIDB4MDAwMDYwNEEsCisJCTB4MDM0LCAweDAwMDA1MDQ3LAorCQkweDAzNCwgMHgwMDAwNDAwQSwKKwkJMHgwMzQsIDB4MDAwMDMwMDcsCisJCTB4MDM0LCAweDAwMDAyMDA0LAorCQkweDAzNCwgMHgwMDAwMTAwMSwKKwkJMHgwMzQsIDB4MDAwMDAwMDAsCisJMHhDRENEQ0RDRCwgMHhDRENELAorCQkweDAzNCwgMHgwMDAwQURENywKKwkJMHgwMzQsIDB4MDAwMDlERDQsCisJCTB4MDM0LCAweDAwMDA4REQxLAorCQkweDAzNCwgMHgwMDAwN0RDRSwKKwkJMHgwMzQsIDB4MDAwMDZEQ0IsCisJCTB4MDM0LCAweDAwMDA1REM4LAorCQkweDAzNCwgMHgwMDAwNERDNSwKKwkJMHgwMzQsIDB4MDAwMDM0Q0MsCisJCTB4MDM0LCAweDAwMDAyNDRGLAorCQkweDAzNCwgMHgwMDAwMTQ0QywKKwkJMHgwMzQsIDB4MDAwMDAwMTQsCisJMHhGRjAxMDcxOCwgMHhERUFELAorCQkweDAwMCwgMHgwMDAzMDE1OSwKKwkJMHgwODQsIDB4MDAwNjgxODAsCisJCTB4MDg2LCAweDAwMDAwMENFLAorCQkweDA4NywgMHgwMDA0OEEwMCwKKwkJMHgwOEUsIDB4MDAwNjU1NDAsCisJCTB4MDhGLCAweDAwMDg4MDAwLAorCQkweDBFRiwgMHgwMDAwMjBBMCwKKwkweEZGMDEwNzE4LCAweEFCQ0QsCisJCTB4MDNCLCAweDAwMEYwN0IwLAorCTB4Q0RDRENEQ0QsIDB4Q0RDRCwKKwkJMHgwM0IsIDB4MDAwRjAyQjAsCisJMHhGRjAxMDcxOCwgMHhERUFELAorCQkweDAzQiwgMHgwMDBFRjdCMCwKKwkJMHgwM0IsIDB4MDAwRDRGQjAsCisJCTB4MDNCLCAweDAwMENGMDYwLAorCQkweDAzQiwgMHgwMDBCMDA5MCwKKwkJMHgwM0IsIDB4MDAwQTAwODAsCisJCTB4MDNCLCAweDAwMDkwMDgwLAorCQkweDAzQiwgMHgwMDA4Rjc4MCwKKwkweEZGMDEwNzE4LCAweEFCQ0QsCisJCTB4MDNCLCAweDAwMDc4N0IwLAorCTB4Q0RDRENEQ0QsIDB4Q0RDRCwKKwkJMHgwM0IsIDB4MDAwNzg3MzAsCisJMHhGRjAxMDcxOCwgMHhERUFELAorCQkweDAzQiwgMHgwMDA2MEZCMCwKKwkJMHgwM0IsIDB4MDAwNUZGQTAsCisJCTB4MDNCLCAweDAwMDQwNjIwLAorCQkweDAzQiwgMHgwMDAzNzA5MCwKKwkJMHgwM0IsIDB4MDAwMjAwODAsCisJCTB4MDNCLCAweDAwMDFGMDYwLAorCQkweDAzQiwgMHgwMDAwRkZCMCwKKwkJMHgwRUYsIDB4MDAwMDAwQTAsCisJCTB4MDAwLCAweDAwMDEwMTU5LAorCQkweDBGRSwgMHgwMDAwMDAwMCwKKwkJMHgwRkUsIDB4MDAwMDAwMDAsCisJCTB4MEZFLCAweDAwMDAwMDAwLAorCQkweDBGRSwgMHgwMDAwMDAwMCwKKwkJMHgwMUUsIDB4MDAwMDAwMDEsCisJCTB4MDFGLCAweDAwMDgwMDAwLAorCQkweDAwMCwgMHgwMDAzM0U3MCwKK307CisKK3UzMiBSVEw4MTkyRUVfTUFDX0FSUkFZW10gPSB7CisJCTB4MDExLCAweDAwMDAwMEVCLAorCQkweDAxMiwgMHgwMDAwMDAwNywKKwkJMHgwMTQsIDB4MDAwMDAwNzUsCisJCTB4MzAzLCAweDAwMDAwMEE3LAorCQkweDQyOCwgMHgwMDAwMDAwQSwKKwkJMHg0MjksIDB4MDAwMDAwMTAsCisJCTB4NDMwLCAweDAwMDAwMDAwLAorCQkweDQzMSwgMHgwMDAwMDAwMCwKKwkJMHg0MzIsIDB4MDAwMDAwMDAsCisJCTB4NDMzLCAweDAwMDAwMDAxLAorCQkweDQzNCwgMHgwMDAwMDAwNCwKKwkJMHg0MzUsIDB4MDAwMDAwMDUsCisJCTB4NDM2LCAweDAwMDAwMDA3LAorCQkweDQzNywgMHgwMDAwMDAwOCwKKwkJMHg0M0MsIDB4MDAwMDAwMDQsCisJCTB4NDNELCAweDAwMDAwMDA1LAorCQkweDQzRSwgMHgwMDAwMDAwNywKKwkJMHg0M0YsIDB4MDAwMDAwMDgsCisJCTB4NDQwLCAweDAwMDAwMDVELAorCQkweDQ0MSwgMHgwMDAwMDAwMSwKKwkJMHg0NDIsIDB4MDAwMDAwMDAsCisJCTB4NDQ0LCAweDAwMDAwMDEwLAorCQkweDQ0NSwgMHgwMDAwMDAwMCwKKwkJMHg0NDYsIDB4MDAwMDAwMDAsCisJCTB4NDQ3LCAweDAwMDAwMDAwLAorCQkweDQ0OCwgMHgwMDAwMDAwMCwKKwkJMHg0NDksIDB4MDAwMDAwRjAsCisJCTB4NDRBLCAweDAwMDAwMDBGLAorCQkweDQ0QiwgMHgwMDAwMDAzRSwKKwkJMHg0NEMsIDB4MDAwMDAwMTAsCisJCTB4NDRELCAweDAwMDAwMDAwLAorCQkweDQ0RSwgMHgwMDAwMDAwMCwKKwkJMHg0NEYsIDB4MDAwMDAwMDAsCisJCTB4NDUwLCAweDAwMDAwMDAwLAorCQkweDQ1MSwgMHgwMDAwMDBGMCwKKwkJMHg0NTIsIDB4MDAwMDAwMEYsCisJCTB4NDUzLCAweDAwMDAwMDAwLAorCQkweDQ1NiwgMHgwMDAwMDA1RSwKKwkJMHg0NjAsIDB4MDAwMDAwNjYsCisJCTB4NDYxLCAweDAwMDAwMDY2LAorCQkweDRDOCwgMHgwMDAwMDBGRiwKKwkJMHg0QzksIDB4MDAwMDAwMDgsCisJCTB4NENDLCAweDAwMDAwMEZGLAorCQkweDRDRCwgMHgwMDAwMDBGRiwKKwkJMHg0Q0UsIDB4MDAwMDAwMDEsCisJCTB4NTAwLCAweDAwMDAwMDI2LAorCQkweDUwMSwgMHgwMDAwMDBBMiwKKwkJMHg1MDIsIDB4MDAwMDAwMkYsCisJCTB4NTAzLCAweDAwMDAwMDAwLAorCQkweDUwNCwgMHgwMDAwMDAyOCwKKwkJMHg1MDUsIDB4MDAwMDAwQTMsCisJCTB4NTA2LCAweDAwMDAwMDVFLAorCQkweDUwNywgMHgwMDAwMDAwMCwKKwkJMHg1MDgsIDB4MDAwMDAwMkIsCisJCTB4NTA5LCAweDAwMDAwMEE0LAorCQkweDUwQSwgMHgwMDAwMDA1RSwKKwkJMHg1MEIsIDB4MDAwMDAwMDAsCisJCTB4NTBDLCAweDAwMDAwMDRGLAorCQkweDUwRCwgMHgwMDAwMDBBNCwKKwkJMHg1MEUsIDB4MDAwMDAwMDAsCisJCTB4NTBGLCAweDAwMDAwMDAwLAorCQkweDUxMiwgMHgwMDAwMDAxQywKKwkJMHg1MTQsIDB4MDAwMDAwMEEsCisJCTB4NTE2LCAweDAwMDAwMDBBLAorCQkweDUyNSwgMHgwMDAwMDA0RiwKKwkJMHg1NDAsIDB4MDAwMDAwMTIsCisJCTB4NTQxLCAweDAwMDAwMDY0LAorCQkweDU1MCwgMHgwMDAwMDAxMCwKKwkJMHg1NTEsIDB4MDAwMDAwMTAsCisJCTB4NTU5LCAweDAwMDAwMDAyLAorCQkweDU1QywgMHgwMDAwMDA1MCwKKwkJMHg1NUQsIDB4MDAwMDAwRkYsCisJCTB4NjA1LCAweDAwMDAwMDMwLAorCQkweDYwOCwgMHgwMDAwMDAwRSwKKwkJMHg2MDksIDB4MDAwMDAwMkEsCisJCTB4NjIwLCAweDAwMDAwMEZGLAorCQkweDYyMSwgMHgwMDAwMDBGRiwKKwkJMHg2MjIsIDB4MDAwMDAwRkYsCisJCTB4NjIzLCAweDAwMDAwMEZGLAorCQkweDYyNCwgMHgwMDAwMDBGRiwKKwkJMHg2MjUsIDB4MDAwMDAwRkYsCisJCTB4NjI2LCAweDAwMDAwMEZGLAorCQkweDYyNywgMHgwMDAwMDBGRiwKKwkJMHg2MzgsIDB4MDAwMDAwNTAsCisJCTB4NjNDLCAweDAwMDAwMDBBLAorCQkweDYzRCwgMHgwMDAwMDAwQSwKKwkJMHg2M0UsIDB4MDAwMDAwMEUsCisJCTB4NjNGLCAweDAwMDAwMDBFLAorCQkweDY0MCwgMHgwMDAwMDA0MCwKKwkJMHg2NDIsIDB4MDAwMDAwNDAsCisJCTB4NjQzLCAweDAwMDAwMDAwLAorCQkweDY1MiwgMHgwMDAwMDBDOCwKKwkJMHg2NkUsIDB4MDAwMDAwMDUsCisJCTB4NzAwLCAweDAwMDAwMDIxLAorCQkweDcwMSwgMHgwMDAwMDA0MywKKwkJMHg3MDIsIDB4MDAwMDAwNjUsCisJCTB4NzAzLCAweDAwMDAwMDg3LAorCQkweDcwOCwgMHgwMDAwMDAyMSwKKwkJMHg3MDksIDB4MDAwMDAwNDMsCisJCTB4NzBBLCAweDAwMDAwMDY1LAorCQkweDcwQiwgMHgwMDAwMDA4NywKK307CisKK3UzMiBSVEw4MTkyRUVfQUdDX1RBQl9BUlJBWVtdID0geworCTB4RkYwMTA3MTgsIDB4QUJDRCwKKwkJMHhDNzgsIDB4RkEwMDAwMDEsCisJCTB4Qzc4LCAweEY5MDEwMDAxLAorCQkweEM3OCwgMHhGODAyMDAwMSwKKwkJMHhDNzgsIDB4RjcwMzAwMDEsCisJCTB4Qzc4LCAweEY2MDQwMDAxLAorCQkweEM3OCwgMHhGNTA1MDAwMSwKKwkJMHhDNzgsIDB4RjQwNjAwMDEsCisJCTB4Qzc4LCAweEYzMDcwMDAxLAorCQkweEM3OCwgMHhGMjA4MDAwMSwKKwkJMHhDNzgsIDB4RjEwOTAwMDEsCisJCTB4Qzc4LCAweEYwMEEwMDAxLAorCQkweEM3OCwgMHhFRjBCMDAwMSwKKwkJMHhDNzgsIDB4RUUwQzAwMDEsCisJCTB4Qzc4LCAweEVEMEQwMDAxLAorCQkweEM3OCwgMHhFQzBFMDAwMSwKKwkJMHhDNzgsIDB4RUIwRjAwMDEsCisJCTB4Qzc4LCAweEVBMTAwMDAxLAorCQkweEM3OCwgMHhFOTExMDAwMSwKKwkJMHhDNzgsIDB4RTgxMjAwMDEsCisJCTB4Qzc4LCAweEU3MTMwMDAxLAorCQkweEM3OCwgMHhFNjE0MDAwMSwKKwkJMHhDNzgsIDB4RTUxNTAwMDEsCisJCTB4Qzc4LCAweEU0MTYwMDAxLAorCQkweEM3OCwgMHhFMzE3MDAwMSwKKwkJMHhDNzgsIDB4RTIxODAwMDEsCisJCTB4Qzc4LCAweEUxMTkwMDAxLAorCQkweEM3OCwgMHg4QTFBMDAwMSwKKwkJMHhDNzgsIDB4ODkxQjAwMDEsCisJCTB4Qzc4LCAweDg4MUMwMDAxLAorCQkweEM3OCwgMHg4NzFEMDAwMSwKKwkJMHhDNzgsIDB4ODYxRTAwMDEsCisJCTB4Qzc4LCAweDg1MUYwMDAxLAorCQkweEM3OCwgMHg4NDIwMDAwMSwKKwkJMHhDNzgsIDB4ODMyMTAwMDEsCisJCTB4Qzc4LCAweDgyMjIwMDAxLAorCQkweEM3OCwgMHg2QTIzMDAwMSwKKwkJMHhDNzgsIDB4NjkyNDAwMDEsCisJCTB4Qzc4LCAweDY4MjUwMDAxLAorCQkweEM3OCwgMHg2NzI2MDAwMSwKKwkJMHhDNzgsIDB4NjYyNzAwMDEsCisJCTB4Qzc4LCAweDY1MjgwMDAxLAorCQkweEM3OCwgMHg2NDI5MDAwMSwKKwkJMHhDNzgsIDB4NjMyQTAwMDEsCisJCTB4Qzc4LCAweDYyMkIwMDAxLAorCQkweEM3OCwgMHg2MTJDMDAwMSwKKwkJMHhDNzgsIDB4NjAyRDAwMDEsCisJCTB4Qzc4LCAweDQ3MkUwMDAxLAorCQkweEM3OCwgMHg0NjJGMDAwMSwKKwkJMHhDNzgsIDB4NDUzMDAwMDEsCisJCTB4Qzc4LCAweDQ0MzEwMDAxLAorCQkweEM3OCwgMHg0MzMyMDAwMSwKKwkJMHhDNzgsIDB4NDIzMzAwMDEsCisJCTB4Qzc4LCAweDQxMzQwMDAxLAorCQkweEM3OCwgMHg0MDM1MDAwMSwKKwkJMHhDNzgsIDB4NDAzNjAwMDEsCisJCTB4Qzc4LCAweDQwMzcwMDAxLAorCQkweEM3OCwgMHg0MDM4MDAwMSwKKwkJMHhDNzgsIDB4NDAzOTAwMDEsCisJCTB4Qzc4LCAweDQwM0EwMDAxLAorCQkweEM3OCwgMHg0MDNCMDAwMSwKKwkJMHhDNzgsIDB4NDAzQzAwMDEsCisJCTB4Qzc4LCAweDQwM0QwMDAxLAorCQkweEM3OCwgMHg0MDNFMDAwMSwKKwkJMHhDNzgsIDB4NDAzRjAwMDEsCisJMHhDRENEQ0RDRCwgMHhDRENELAorCQkweEM3OCwgMHhGQjAwMDAwMSwKKwkJMHhDNzgsIDB4RkIwMTAwMDEsCisJCTB4Qzc4LCAweEZCMDIwMDAxLAorCQkweEM3OCwgMHhGQjAzMDAwMSwKKwkJMHhDNzgsIDB4RkIwNDAwMDEsCisJCTB4Qzc4LCAweEZCMDUwMDAxLAorCQkweEM3OCwgMHhGQTA2MDAwMSwKKwkJMHhDNzgsIDB4RjkwNzAwMDEsCisJCTB4Qzc4LCAweEY4MDgwMDAxLAorCQkweEM3OCwgMHhGNzA5MDAwMSwKKwkJMHhDNzgsIDB4RjYwQTAwMDEsCisJCTB4Qzc4LCAweEY1MEIwMDAxLAorCQkweEM3OCwgMHhGNDBDMDAwMSwKKwkJMHhDNzgsIDB4RjMwRDAwMDEsCisJCTB4Qzc4LCAweEYyMEUwMDAxLAorCQkweEM3OCwgMHhGMTBGMDAwMSwKKwkJMHhDNzgsIDB4RjAxMDAwMDEsCisJCTB4Qzc4LCAweEVGMTEwMDAxLAorCQkweEM3OCwgMHhFRTEyMDAwMSwKKwkJMHhDNzgsIDB4RUQxMzAwMDEsCisJCTB4Qzc4LCAweEVDMTQwMDAxLAorCQkweEM3OCwgMHhFQjE1MDAwMSwKKwkJMHhDNzgsIDB4RUExNjAwMDEsCisJCTB4Qzc4LCAweEU5MTcwMDAxLAorCQkweEM3OCwgMHhFODE4MDAwMSwKKwkJMHhDNzgsIDB4RTcxOTAwMDEsCisJCTB4Qzc4LCAweEM4MUEwMDAxLAorCQkweEM3OCwgMHhDNzFCMDAwMSwKKwkJMHhDNzgsIDB4QzYxQzAwMDEsCisJCTB4Qzc4LCAweDA3MUQwMDAxLAorCQkweEM3OCwgMHgwNjFFMDAwMSwKKwkJMHhDNzgsIDB4MDUxRjAwMDEsCisJCTB4Qzc4LCAweDA0MjAwMDAxLAorCQkweEM3OCwgMHgwMzIxMDAwMSwKKwkJMHhDNzgsIDB4QUEyMjAwMDEsCisJCTB4Qzc4LCAweEE5MjMwMDAxLAorCQkweEM3OCwgMHhBODI0MDAwMSwKKwkJMHhDNzgsIDB4QTcyNTAwMDEsCisJCTB4Qzc4LCAweEE2MjYwMDAxLAorCQkweEM3OCwgMHg4NTI3MDAwMSwKKwkJMHhDNzgsIDB4ODQyODAwMDEsCisJCTB4Qzc4LCAweDgzMjkwMDAxLAorCQkweEM3OCwgMHgyNTJBMDAwMSwKKwkJMHhDNzgsIDB4MjQyQjAwMDEsCisJCTB4Qzc4LCAweDIzMkMwMDAxLAorCQkweEM3OCwgMHgyMjJEMDAwMSwKKwkJMHhDNzgsIDB4NjcyRTAwMDEsCisJCTB4Qzc4LCAweDY2MkYwMDAxLAorCQkweEM3OCwgMHg2NTMwMDAwMSwKKwkJMHhDNzgsIDB4NjQzMTAwMDEsCisJCTB4Qzc4LCAweDYzMzIwMDAxLAorCQkweEM3OCwgMHg2MjMzMDAwMSwKKwkJMHhDNzgsIDB4NjEzNDAwMDEsCisJCTB4Qzc4LCAweDQ1MzUwMDAxLAorCQkweEM3OCwgMHg0NDM2MDAwMSwKKwkJMHhDNzgsIDB4NDMzNzAwMDEsCisJCTB4Qzc4LCAweDQyMzgwMDAxLAorCQkweEM3OCwgMHg0MTM5MDAwMSwKKwkJMHhDNzgsIDB4NDAzQTAwMDEsCisJCTB4Qzc4LCAweDQwM0IwMDAxLAorCQkweEM3OCwgMHg0MDNDMDAwMSwKKwkJMHhDNzgsIDB4NDAzRDAwMDEsCisJCTB4Qzc4LCAweDQwM0UwMDAxLAorCQkweEM3OCwgMHg0MDNGMDAwMSwKKwkweEZGMDEwNzE4LCAweERFQUQsCisJMHhGRjAxMDcxOCwgMHhBQkNELAorCQkweEM3OCwgMHhGQTQwMDAwMSwKKwkJMHhDNzgsIDB4Rjk0MTAwMDEsCisJCTB4Qzc4LCAweEY4NDIwMDAxLAorCQkweEM3OCwgMHhGNzQzMDAwMSwKKwkJMHhDNzgsIDB4RjY0NDAwMDEsCisJCTB4Qzc4LCAweEY1NDUwMDAxLAorCQkweEM3OCwgMHhGNDQ2MDAwMSwKKwkJMHhDNzgsIDB4RjM0NzAwMDEsCisJCTB4Qzc4LCAweEYyNDgwMDAxLAorCQkweEM3OCwgMHhGMTQ5MDAwMSwKKwkJMHhDNzgsIDB4RjA0QTAwMDEsCisJCTB4Qzc4LCAweEVGNEIwMDAxLAorCQkweEM3OCwgMHhFRTRDMDAwMSwKKwkJMHhDNzgsIDB4RUQ0RDAwMDEsCisJCTB4Qzc4LCAweEVDNEUwMDAxLAorCQkweEM3OCwgMHhFQjRGMDAwMSwKKwkJMHhDNzgsIDB4RUE1MDAwMDEsCisJCTB4Qzc4LCAweEU5NTEwMDAxLAorCQkweEM3OCwgMHhFODUyMDAwMSwKKwkJMHhDNzgsIDB4RTc1MzAwMDEsCisJCTB4Qzc4LCAweEU2NTQwMDAxLAorCQkweEM3OCwgMHhFNTU1MDAwMSwKKwkJMHhDNzgsIDB4RTQ1NjAwMDEsCisJCTB4Qzc4LCAweEUzNTcwMDAxLAorCQkweEM3OCwgMHhFMjU4MDAwMSwKKwkJMHhDNzgsIDB4RTE1OTAwMDEsCisJCTB4Qzc4LCAweDhBNUEwMDAxLAorCQkweEM3OCwgMHg4OTVCMDAwMSwKKwkJMHhDNzgsIDB4ODg1QzAwMDEsCisJCTB4Qzc4LCAweDg3NUQwMDAxLAorCQkweEM3OCwgMHg4NjVFMDAwMSwKKwkJMHhDNzgsIDB4ODU1RjAwMDEsCisJCTB4Qzc4LCAweDg0NjAwMDAxLAorCQkweEM3OCwgMHg4MzYxMDAwMSwKKwkJMHhDNzgsIDB4ODI2MjAwMDEsCisJCTB4Qzc4LCAweDZBNjMwMDAxLAorCQkweEM3OCwgMHg2OTY0MDAwMSwKKwkJMHhDNzgsIDB4Njg2NTAwMDEsCisJCTB4Qzc4LCAweDY3NjYwMDAxLAorCQkweEM3OCwgMHg2NjY3MDAwMSwKKwkJMHhDNzgsIDB4NjU2ODAwMDEsCisJCTB4Qzc4LCAweDY0NjkwMDAxLAorCQkweEM3OCwgMHg2MzZBMDAwMSwKKwkJMHhDNzgsIDB4NjI2QjAwMDEsCisJCTB4Qzc4LCAweDYxNkMwMDAxLAorCQkweEM3OCwgMHg2MDZEMDAwMSwKKwkJMHhDNzgsIDB4NDc2RTAwMDEsCisJCTB4Qzc4LCAweDQ2NkYwMDAxLAorCQkweEM3OCwgMHg0NTcwMDAwMSwKKwkJMHhDNzgsIDB4NDQ3MTAwMDEsCisJCTB4Qzc4LCAweDQzNzIwMDAxLAorCQkweEM3OCwgMHg0MjczMDAwMSwKKwkJMHhDNzgsIDB4NDE3NDAwMDEsCisJCTB4Qzc4LCAweDQwNzUwMDAxLAorCQkweEM3OCwgMHg0MDc2MDAwMSwKKwkJMHhDNzgsIDB4NDA3NzAwMDEsCisJCTB4Qzc4LCAweDQwNzgwMDAxLAorCQkweEM3OCwgMHg0MDc5MDAwMSwKKwkJMHhDNzgsIDB4NDA3QTAwMDEsCisJCTB4Qzc4LCAweDQwN0IwMDAxLAorCQkweEM3OCwgMHg0MDdDMDAwMSwKKwkJMHhDNzgsIDB4NDA3RDAwMDEsCisJCTB4Qzc4LCAweDQwN0UwMDAxLAorCQkweEM3OCwgMHg0MDdGMDAwMSwKKwkJMHhDNTAsIDB4MDAwNDAyMjIsCisJCTB4QzUwLCAweDAwMDQwMjIwLAorCTB4Q0RDRENEQ0QsIDB4Q0RDRCwKKwkJMHhDNzgsIDB4RkI0MDAwMDEsCisJCTB4Qzc4LCAweEZCNDEwMDAxLAorCQkweEM3OCwgMHhGQjQyMDAwMSwKKwkJMHhDNzgsIDB4RkI0MzAwMDEsCisJCTB4Qzc4LCAweEZCNDQwMDAxLAorCQkweEM3OCwgMHhGQjQ1MDAwMSwKKwkJMHhDNzgsIDB4RkE0NjAwMDEsCisJCTB4Qzc4LCAweEY5NDcwMDAxLAorCQkweEM3OCwgMHhGODQ4MDAwMSwKKwkJMHhDNzgsIDB4Rjc0OTAwMDEsCisJCTB4Qzc4LCAweEY2NEEwMDAxLAorCQkweEM3OCwgMHhGNTRCMDAwMSwKKwkJMHhDNzgsIDB4RjQ0QzAwMDEsCisJCTB4Qzc4LCAweEYzNEQwMDAxLAorCQkweEM3OCwgMHhGMjRFMDAwMSwKKwkJMHhDNzgsIDB4RjE0RjAwMDEsCisJCTB4Qzc4LCAweEYwNTAwMDAxLAorCQkweEM3OCwgMHhFRjUxMDAwMSwKKwkJMHhDNzgsIDB4RUU1MjAwMDEsCisJCTB4Qzc4LCAweEVENTMwMDAxLAorCQkweEM3OCwgMHhFQzU0MDAwMSwKKwkJMHhDNzgsIDB4RUI1NTAwMDEsCisJCTB4Qzc4LCAweEVBNTYwMDAxLAorCQkweEM3OCwgMHhFOTU3MDAwMSwKKwkJMHhDNzgsIDB4RTg1ODAwMDEsCisJCTB4Qzc4LCAweEU3NTkwMDAxLAorCQkweEM3OCwgMHhFNjVBMDAwMSwKKwkJMHhDNzgsIDB4RTU1QjAwMDEsCisJCTB4Qzc4LCAweEU0NUMwMDAxLAorCQkweEM3OCwgMHhFMzVEMDAwMSwKKwkJMHhDNzgsIDB4RTI1RTAwMDEsCisJCTB4Qzc4LCAweEUxNUYwMDAxLAorCQkweEM3OCwgMHg4QTYwMDAwMSwKKwkJMHhDNzgsIDB4ODk2MTAwMDEsCisJCTB4Qzc4LCAweDg4NjIwMDAxLAorCQkweEM3OCwgMHg4NzYzMDAwMSwKKwkJMHhDNzgsIDB4ODY2NDAwMDEsCisJCTB4Qzc4LCAweDg1NjUwMDAxLAorCQkweEM3OCwgMHg4NDY2MDAwMSwKKwkJMHhDNzgsIDB4ODM2NzAwMDEsCisJCTB4Qzc4LCAweDgyNjgwMDAxLAorCQkweEM3OCwgMHg2QjY5MDAwMSwKKwkJMHhDNzgsIDB4NkE2QTAwMDEsCisJCTB4Qzc4LCAweDY5NkIwMDAxLAorCQkweEM3OCwgMHg2ODZDMDAwMSwKKwkJMHhDNzgsIDB4Njc2RDAwMDEsCisJCTB4Qzc4LCAweDY2NkUwMDAxLAorCQkweEM3OCwgMHg2NTZGMDAwMSwKKwkJMHhDNzgsIDB4NjQ3MDAwMDEsCisJCTB4Qzc4LCAweDYzNzEwMDAxLAorCQkweEM3OCwgMHg2MjcyMDAwMSwKKwkJMHhDNzgsIDB4NjE3MzAwMDEsCisJCTB4Qzc4LCAweDQ5NzQwMDAxLAorCQkweEM3OCwgMHg0ODc1MDAwMSwKKwkJMHhDNzgsIDB4NDc3NjAwMDEsCisJCTB4Qzc4LCAweDQ2NzcwMDAxLAorCQkweEM3OCwgMHg0NTc4MDAwMSwKKwkJMHhDNzgsIDB4NDQ3OTAwMDEsCisJCTB4Qzc4LCAweDQzN0EwMDAxLAorCQkweEM3OCwgMHg0MjdCMDAwMSwKKwkJMHhDNzgsIDB4NDE3QzAwMDEsCisJCTB4Qzc4LCAweDQwN0QwMDAxLAorCQkweEM3OCwgMHg0MDdFMDAwMSwKKwkJMHhDNzgsIDB4NDA3RjAwMDEsCisJCTB4QzUwLCAweDAwMDQwMDIyLAorCQkweEM1MCwgMHgwMDA0MDAyMCwKKwkweEZGMDEwNzE4LCAweERFQUQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmNDE5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3RhYmxlLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIENyZWF0ZWQgb24gIDIwMTAvIDUvMTgsICAxOjQxCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyRV9UQUJMRV9fSF8KKyNkZWZpbmUgX19SVEw5MkVfVEFCTEVfX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2RlZmluZSBSVEw4MTkyRUVfUEhZX1JFR19BUlJBWV9MRU4JNDQ4CitleHRlcm4gdTMyIFJUTDgxOTJFRV9QSFlfUkVHX0FSUkFZW107CisjZGVmaW5lIFJUTDgxOTJFRV9QSFlfUkVHX0FSUkFZX1BHX0xFTgkxNjgKK2V4dGVybiB1MzIgUlRMODE5MkVFX1BIWV9SRUdfQVJSQVlfUEdbXTsKKyNkZWZpbmUJUlRMODE5MkVFX1JBRElPQV9BUlJBWV9MRU4JMjM4CitleHRlcm4gdTMyIFJUTDgxOTJFRV9SQURJT0FfQVJSQVlbXTsKKyNkZWZpbmUJUlRMODE5MkVFX1JBRElPQl9BUlJBWV9MRU4JMTk4CitleHRlcm4gdTMyIFJUTDgxOTJFRV9SQURJT0JfQVJSQVlbXTsKKyNkZWZpbmUgUlRMODE5MkVFX01BQ19BUlJBWV9MRU4JCTIwMgorZXh0ZXJuIHUzMiBSVEw4MTkyRUVfTUFDX0FSUkFZW107CisjZGVmaW5lIFJUTDgxOTJFRV9BR0NfVEFCX0FSUkFZX0xFTgk1MzIKK2V4dGVybiB1MzIgUlRMODE5MkVFX0FHQ19UQUJfQVJSQVlbXTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvdHJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3J0bDgxOTJlZS90cnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTMwZjUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvdHJ4LmMKQEAgLTAsMCArMSwxMjg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vYmFzZS5oIgorI2luY2x1ZGUgIi4uL3N0YXRzLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAidHJ4LmgiCisjaW5jbHVkZSAibGVkLmgiCisjaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlICJmdy5oIgorCitzdGF0aWMgdTggX3J0bDkyZWVfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBod19xdWV1ZSkKK3sKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisKKwlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpKQorCQlyZXR1cm4gUVNMVF9CRUFDT047CisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fCBpZWVlODAyMTFfaXNfY3RsKGZjKSkKKwkJcmV0dXJuIFFTTFRfTUdOVDsKKworCXJldHVybiBza2ItPnByaW9yaXR5OworfQorCisvKiBtYWM4MDIxMSdzIHJhdGVfaWR4IGlzIGxpa2UgdGhpczoKKyAqCisgKiAyLjRHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFoKKyAqCisgKiBCL0cgcmF0ZToKKyAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCisgKiBERVNDOTJDX1JBVEUxTS0tPkRFU0M5MkNfUkFURTU0TSA9PT4gaWR4IGlzIDAtLT4xMSwKKyAqCisgKiBOIHJhdGU6CisgKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAxLAorICogREVTQzkyQ19SQVRFTUNTMC0tPkRFU0M5MkNfUkFURU1DUzE1ID09PiBpZHggaXMgMC0tPjE1CisgKgorICogNUcgYmFuZDpyeF9zdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWgorICogQSByYXRlOgorICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMCwKKyAqIERFU0M5MkNfUkFURTZNLS0+REVTQzkyQ19SQVRFNTRNID09PiBpZHggaXMgMC0tPjcsCisgKgorICogTiByYXRlOgorICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKKyAqIERFU0M5MkNfUkFURU1DUzAtLT5ERVNDOTJDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQorICovCitzdGF0aWMgaW50IF9ydGw5MmVlX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgYm9vbCBpc2h0LCB1OCBkZXNjX3JhdGUpCit7CisJaW50IHJhdGVfaWR4OworCisJaWYgKCFmYWxzZSkgeworCQlpZiAoSUVFRTgwMjExX0JBTkRfMkdIWiA9PSBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQpIHsKKwkJCXN3aXRjaCAoZGVzY19yYXRlKSB7CisJCQljYXNlIERFU0M5MkNfUkFURTFNOgorCQkJCXJhdGVfaWR4ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyQ19SQVRFMk06CisJCQkJcmF0ZV9pZHggPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU1XzVNOgorCQkJCXJhdGVfaWR4ID0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyQ19SQVRFMTFNOgorCQkJCXJhdGVfaWR4ID0gMzsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyQ19SQVRFNk06CisJCQkJcmF0ZV9pZHggPSA0OworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU5TToKKwkJCQlyYXRlX2lkeCA9IDU7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTEyTToKKwkJCQlyYXRlX2lkeCA9IDY7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTE4TToKKwkJCQlyYXRlX2lkeCA9IDc7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTI0TToKKwkJCQlyYXRlX2lkeCA9IDg7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTM2TToKKwkJCQlyYXRlX2lkeCA9IDk7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTQ4TToKKwkJCQlyYXRlX2lkeCA9IDEwOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU1NE06CisJCQkJcmF0ZV9pZHggPSAxMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmF0ZV9pZHggPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKKwkJCWNhc2UgREVTQzkyQ19SQVRFNk06CisJCQkJcmF0ZV9pZHggPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU5TToKKwkJCQlyYXRlX2lkeCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTEyTToKKwkJCQlyYXRlX2lkeCA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTE4TToKKwkJCQlyYXRlX2lkeCA9IDM7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTI0TToKKwkJCQlyYXRlX2lkeCA9IDQ7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTM2TToKKwkJCQlyYXRlX2lkeCA9IDU7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTQ4TToKKwkJCQlyYXRlX2lkeCA9IDY7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTU0TToKKwkJCQlyYXRlX2lkeCA9IDc7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJhdGVfaWR4ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZGVzY19yYXRlKSB7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTMDoKKwkJCXJhdGVfaWR4ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzE6CisJCQlyYXRlX2lkeCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1MyOgorCQkJcmF0ZV9pZHggPSAyOworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTMzoKKwkJCXJhdGVfaWR4ID0gMzsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzQ6CisJCQlyYXRlX2lkeCA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1M1OgorCQkJcmF0ZV9pZHggPSA1OworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTNjoKKwkJCXJhdGVfaWR4ID0gNjsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzc6CisJCQlyYXRlX2lkeCA9IDc7CisJCQlicmVhazsKKwkJY2FzZSBERVNDOTJDX1JBVEVNQ1M4OgorCQkJcmF0ZV9pZHggPSA4OworCQkJYnJlYWs7CisJCWNhc2UgREVTQzkyQ19SQVRFTUNTOToKKwkJCXJhdGVfaWR4ID0gOTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzEwOgorCQkJcmF0ZV9pZHggPSAxMDsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzExOgorCQkJcmF0ZV9pZHggPSAxMTsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzEyOgorCQkJcmF0ZV9pZHggPSAxMjsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzEzOgorCQkJcmF0ZV9pZHggPSAxMzsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzE0OgorCQkJcmF0ZV9pZHggPSAxNDsKKwkJCWJyZWFrOworCQljYXNlIERFU0M5MkNfUkFURU1DUzE1OgorCQkJcmF0ZV9pZHggPSAxNTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmF0ZV9pZHggPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJhdGVfaWR4OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9xdWVyeV9yeHBoeXN0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cywgdTggKnBkZXNjLAorCQkJCSAgICAgICBzdHJ1Y3QgcnhfZndpbmZvICpwX2RydmluZm8sCisJCQkJICAgICAgIGJvb2wgYnBhY2tldF9tYXRjaF9ic3NpZCwKKwkJCQkgICAgICAgYm9vbCBicGFja2V0X3Rvc2VsZiwKKwkJCQkgICAgICAgYm9vbCBiX3BhY2tldF9iZWFjb24pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBwaHlfc3RhdHVzX3JwdCAqcF9waHlzdHJwdCA9IChzdHJ1Y3QgcGh5X3N0YXR1c19ycHQgKilwX2RydmluZm87CisJY2hhciByeF9wd3JfYWxsID0gMCwgcnhfcHdyWzRdOworCXU4IHJmX3J4X251bSA9IDAsIGV2bSwgcHdkYl9hbGw7CisJdTggaSwgbWF4X3NwYXRpYWxfc3RyZWFtOworCXUzMiByc3NpLCB0b3RhbF9yc3NpID0gMDsKKwlib29sIGJfaXNfY2NrID0gcHN0YXR1cy0+Yl9pc19jY2s7CisJdTggbGFuX2lkeCAsIHZnYV9pZHg7CisKKwkvKiBSZWNvcmQgaXQgZm9yIG5leHQgcGFja2V0IHByb2Nlc3NpbmcgKi8KKwlwc3RhdHVzLT5iX3BhY2tldF9tYXRjaGJzc2lkID0gYnBhY2tldF9tYXRjaF9ic3NpZDsKKwlwc3RhdHVzLT5iX3BhY2tldF90b3NlbGYgPSBicGFja2V0X3Rvc2VsZjsKKwlwc3RhdHVzLT5iX3BhY2tldF9iZWFjb24gPSBiX3BhY2tldF9iZWFjb247CisJcHN0YXR1cy0+cnhfbWltb19zaWduYWxxdWFsaXR5WzBdID0gLTE7CisJcHN0YXR1cy0+cnhfbWltb19zaWduYWxxdWFsaXR5WzFdID0gLTE7CisKKwlpZiAoYl9pc19jY2spIHsKKwkJdTggY2NrX2hpZ2hwd3I7CisJCXU4IGNja19hZ2NfcnB0OworCQkvKiBDQ0sgRHJpdmVyIGluZm8gU3RydWN0dXJlIGlzIG5vdCB0aGUgc2FtZSBhcyBPRkRNIHBhY2tldC4gKi8KKwkJY2NrX2FnY19ycHQgPSBwX3BoeXN0cnB0LT5jY2tfYWdjX3JwdF9vZmRtX2Nmb3Nob19hOworCisJCS8qICgxKUhhcmR3YXJlIGRvZXMgbm90IHByb3ZpZGUgUlNTSSBmb3IgQ0NLICovCisJCS8qICgyKVBXREIsIEF2ZXJhZ2UgUFdEQiBjYWNsdWF0ZWQgYnkKKwkJICogaGFyZHdhcmUgKGZvciByYXRlIGFkYXB0aXZlKSAqLworCQljY2tfaGlnaHB3ciA9ICh1OCkgcnRsX2dldF9iYnJlZyhodywgUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyLAorCQkJCQkJIEJJVCg5KSk7CisKKwkJbGFuX2lkeCA9ICgoY2NrX2FnY19ycHQgJiAweEUwKSA+PiA1KTsKKwkJdmdhX2lkeCA9IChjY2tfYWdjX3JwdCAmIDB4MWYpOworCQlzd2l0Y2ggKGxhbl9pZHgpIHsKKwkJY2FzZSA3OiAvKlZHQV9pZHggPSAyN34yKi8KKwkJCQlpZiAodmdhX2lkeCA8PSAyNykKKwkJCQkJcnhfcHdyX2FsbCA9IC0xMDAgKyAyICogKDI3IC0gdmdhX2lkeCk7CisJCQkJZWxzZQorCQkJCQlyeF9wd3JfYWxsID0gLTEwMDsKKwkJCQlicmVhazsKKwkJY2FzZSA2OiAvKlZHQV9pZHggPSAyfjAqLworCQkJCXJ4X3B3cl9hbGwgPSAtNDggKyAyICogKDIgLSB2Z2FfaWR4KTsKKwkJCQlicmVhazsKKwkJY2FzZSA1OiAvKlZHQV9pZHggPSA3fjUqLworCQkJCXJ4X3B3cl9hbGwgPSAtNDIgKyAyICogKDcgLSB2Z2FfaWR4KTsKKwkJCQlicmVhazsKKwkJY2FzZSA0OiAvKlZHQV9pZHggPSA3fjQqLworCQkJCXJ4X3B3cl9hbGwgPSAtMzYgKyAyICogKDcgLSB2Z2FfaWR4KTsKKwkJCQlicmVhazsKKwkJY2FzZSAzOiAvKlZHQV9pZHggPSA3fjAqLworCQkJCXJ4X3B3cl9hbGwgPSAtMjQgKyAyICogKDcgLSB2Z2FfaWR4KTsKKwkJCQlicmVhazsKKwkJY2FzZSAyOiAvKlZHQV9pZHggPSA1fjAqLworCQkJCWlmIChjY2tfaGlnaHB3cikKKwkJCQkJcnhfcHdyX2FsbCA9IC0xMiArIDIgKiAoNSAtIHZnYV9pZHgpOworCQkJCWVsc2UKKwkJCQkJcnhfcHdyX2FsbCA9IC02ICsgMiAqICg1IC0gdmdhX2lkeCk7CisJCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCQlyeF9wd3JfYWxsID0gOCAtIDIgKiB2Z2FfaWR4OworCQkJCWJyZWFrOworCQljYXNlIDA6CisJCQkJcnhfcHdyX2FsbCA9IDE0IC0gMiAqIHZnYV9pZHg7CisJCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJcnhfcHdyX2FsbCArPSAxNjsKKwkJcHdkYl9hbGwgPSBzdGdfcnRsX3F1ZXJ5X3J4cHdycGVyY2VudGFnZShyeF9wd3JfYWxsKTsKKworCQlpZiAoIWNja19oaWdocHdyKSB7CisJCQlpZiAocHdkYl9hbGwgPj0gODApCisJCQkJcHdkYl9hbGwgPSAoKHB3ZGJfYWxsIC0gODApIDw8IDEpICsKKwkJCQkJICAgKChwd2RiX2FsbCAtIDgwKSA+PiAxKSArIDgwOworCQkJZWxzZSBpZiAoKHB3ZGJfYWxsIDw9IDc4KSAmJiAocHdkYl9hbGwgPj0gMjApKQorCQkJCXB3ZGJfYWxsICs9IDM7CisJCQlpZiAocHdkYl9hbGwgPiAxMDApCisJCQkJcHdkYl9hbGwgPSAxMDA7CisJCX0KKworCQlwc3RhdHVzLT5yeF9wd2RiX2FsbCA9IHB3ZGJfYWxsOworCQlwc3RhdHVzLT5idF9yeF9yc3NpX3BlcmNlbnRhZ2UgPSBwd2RiX2FsbDsKKwkJcHN0YXR1cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKKworCQkvKiAoMykgR2V0IFNpZ25hbCBRdWFsaXR5IChFVk0pICovCisJCWlmIChicGFja2V0X21hdGNoX2Jzc2lkKSB7CisJCQl1OCBzcSwgc3FfcnB0OworCisJCQlpZiAocHN0YXR1cy0+cnhfcHdkYl9hbGwgPiA0MCkgeworCQkJCXNxID0gMTAwOworCQkJfSBlbHNlIHsKKwkJCQlzcV9ycHQgPSBwX3BoeXN0cnB0LT5jY2tfc2lnX3F1YWxfb2ZkbV9wd2RiX2FsbDsKKwkJCQlpZiAoc3FfcnB0ID4gNjQpCisJCQkJCXNxID0gMDsKKwkJCQllbHNlIGlmIChzcV9ycHQgPCAyMCkKKwkJCQkJc3EgPSAxMDA7CisJCQkJZWxzZQorCQkJCQlzcSA9ICgoNjQgLSBzcV9ycHQpICogMTAwKSAvIDQ0OworCQkJfQorCisJCQlwc3RhdHVzLT5zaWduYWxxdWFsaXR5ID0gc3E7CisJCQlwc3RhdHVzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbMF0gPSBzcTsKKwkJCXBzdGF0dXMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVsxXSA9IC0xOworCQl9CisJfSBlbHNlIHsKKwkJLyogKDEpR2V0IFJTU0kgZm9yIEhUIHJhdGUgKi8KKwkJZm9yIChpID0gUkY5MF9QQVRIX0E7IGkgPCBSRjYwNTJfTUFYX1BBVEg7IGkrKykgeworCQkJLyogd2Ugd2lsbCBqdWRnZSBSRiBSWCBwYXRoIG5vdy4gKi8KKwkJCWlmIChydGxwcml2LT5kbS5icmZwYXRoX3J4ZW5hYmxlW2ldKQorCQkJCXJmX3J4X251bSsrOworCisJCQlyeF9wd3JbaV0gPSAoKHBfcGh5c3RycHQtPnBhdGhfYWdjW2ldLmdhaW4gJiAweDNmKSAqIDIpCisJCQkJICAgIC0gMTEwOworCisJCQlwc3RhdHVzLT5yeF9wd3JbaV0gPSByeF9wd3JbaV07CisJCQkvKiBUcmFuc2xhdGUgREJNIHRvIHBlcmNlbnRhZ2UuICovCisJCQlyc3NpID0gc3RnX3J0bF9xdWVyeV9yeHB3cnBlcmNlbnRhZ2UocnhfcHdyW2ldKTsKKwkJCXRvdGFsX3Jzc2kgKz0gcnNzaTsKKworCQkJcHN0YXR1cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtpXSA9ICh1OClyc3NpOworCQl9CisKKwkJLyogKDIpUFdEQiwgQXZlcmFnZSBQV0RCIGNhY2x1YXRlZCBieQorCQkgKiBoYXJkd2FyZSAoZm9yIHJhdGUgYWRhcHRpdmUpICovCisJCXJ4X3B3cl9hbGwgPSAoKHBfcGh5c3RycHQtPmNja19zaWdfcXVhbF9vZmRtX3B3ZGJfYWxsID4+IDEpCisJCQkgICAgICAmIDB4N2YpIC0gMTEwOworCisJCXB3ZGJfYWxsID0gc3RnX3J0bF9xdWVyeV9yeHB3cnBlcmNlbnRhZ2UocnhfcHdyX2FsbCk7CisJCXBzdGF0dXMtPnJ4X3B3ZGJfYWxsID0gcHdkYl9hbGw7CisJCXBzdGF0dXMtPmJ0X3J4X3Jzc2lfcGVyY2VudGFnZSA9IHB3ZGJfYWxsOworCQlwc3RhdHVzLT5yeHBvd2VyID0gcnhfcHdyX2FsbDsKKwkJcHN0YXR1cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKKworCQkvKiAoMylFVk0gb2YgSFQgcmF0ZSAqLworCQlpZiAocHN0YXR1cy0+cmF0ZSA+PSBERVNDOTJDX1JBVEVNQ1M4ICYmCisJCSAgICBwc3RhdHVzLT5yYXRlIDw9IERFU0M5MkNfUkFURU1DUzE1KQorCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMjsKKwkJZWxzZQorCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NwYXRpYWxfc3RyZWFtOyBpKyspIHsKKwkJCWV2bSA9IHN0Z19ydGxfZXZtX2RiX3RvX3BlcmNlbnRhZ2UoCisJCQkJCQlwX3BoeXN0cnB0LT5zdHJlYW1fcnhldm1baV0pOworCisJCQlpZiAoYnBhY2tldF9tYXRjaF9ic3NpZCkgeworCQkJCS8qIEZpbGwgdmFsdWUgaW4gUkZELCBHZXQgdGhlIGZpcnN0CisJCQkJICogc3BhdGlhbCBzdHJlYW0gb25seSAqLworCQkJCWlmIChpID09IDApCisJCQkJCXBzdGF0dXMtPnNpZ25hbHF1YWxpdHkgPSAodTgpKGV2bSAmCisJCQkJCQkJCSAgICAgIDB4ZmYpOworCQkJCXBzdGF0dXMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtpXSA9ICh1OCkoZXZtICYKKwkJCQkJCQkJCSAweGZmKTsKKwkJCX0KKwkJfQorCisJCWlmIChicGFja2V0X21hdGNoX2Jzc2lkKSB7CisJCQlmb3IgKGkgPSBSRjkwX1BBVEhfQTsgaSA8PSBSRjkwX1BBVEhfQjsgaSsrKQorCQkJCXJ0bF9wcml2KGh3KS0+ZG0uY2ZvX3RhaWxbaV0gPQorCQkJCQkoaW50KXBfcGh5c3RycHQtPnBhdGhfY2ZvdGFpbFtpXTsKKworCQkJaWYgKHJ0bF9wcml2KGh3KS0+ZG0ucGFja2V0X2NvdW50ID09IDB4ZmZmZmZmZmYpCisJCQkJcnRsX3ByaXYoaHcpLT5kbS5wYWNrZXRfY291bnQgPSAwOworCQkJZWxzZQorCQkJCXJ0bF9wcml2KGh3KS0+ZG0ucGFja2V0X2NvdW50Kys7CisJCX0KKwl9CisKKwkvKiBVSSBCU1MgTGlzdCBzaWduYWwgc3RyZW5ndGgoaW4gcGVyY2VudGFnZSksCisJICogbWFrZSBpdCBnb29kIGxvb2tpbmcsIGZyb20gMH4xMDAuICovCisJaWYgKGJfaXNfY2NrKQorCQlwc3RhdHVzLT5zaWduYWxzdHJlbmd0aCA9ICh1OCkoc3RnX3J0bF9zaWduYWxfc2NhbGVfbWFwcGluZyhodywKKwkJCQkJCQkJICAgICBwd2RiX2FsbCkpOworCWVsc2UgaWYgKHJmX3J4X251bSAhPSAwKQorCQlwc3RhdHVzLT5zaWduYWxzdHJlbmd0aCA9ICh1OCkoc3RnX3J0bF9zaWduYWxfc2NhbGVfbWFwcGluZyhodywKKwkJCQkJCSAgICAgIHRvdGFsX3Jzc2kgLz0gcmZfcnhfbnVtKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmVlX3RyYW5zbGF0ZV9yeF9zaWduYWxfc3R1ZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cywKKwkJCQkJICAgICAgIHU4ICpwZGVzYywKKwkJCQkJICAgICAgIHN0cnVjdCByeF9md2luZm8gKnBfZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1OCAqdG1wX2J1ZjsKKwl1OCAqcHJhZGRyOworCXU4ICpwc2FkZHI7CisJX19sZTE2IGZjOworCXUxNiBjcHVfZmMsIHR5cGU7CisJYm9vbCBiX3BhY2tldF9tYXRjaGJzc2lkLCBiX3BhY2tldF90b3NlbGYsIGJfcGFja2V0X2JlYWNvbjsKKworCXRtcF9idWYgPSBza2ItPmRhdGEgKyBwc3RhdHVzLT5yeF9kcnZpbmZvX3NpemUgKworCQkgIHBzdGF0dXMtPnJ4X2J1ZnNoaWZ0ICsgMjQ7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0bXBfYnVmOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCWNwdV9mYyA9IGxlMTZfdG9fY3B1KGZjKTsKKwl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7CisJcHJhZGRyID0gaGRyLT5hZGRyMTsKKwlwc2FkZHIgPSBpZWVlODAyMTFfZ2V0X1NBKGhkcik7CisJZXRoZXJfYWRkcl9jb3B5KHBzdGF0dXMtPnBzYWRkciwgcHNhZGRyKTsKKworCWJfcGFja2V0X21hdGNoYnNzaWQgPSAoKElFRUU4MDIxMV9GVFlQRV9DVEwgIT0gdHlwZSkgJiYKKwkJCSAgICAgICAoZXRoZXJfYWRkcl9lcXVhbChtYWMtPmJzc2lkLAorCQkJCQkJKGNwdV9mYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpID8KKwkJCQkJCWhkci0+YWRkcjEgOgorCQkJCQkJKGNwdV9mYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgPworCQkJCQkJaGRyLT5hZGRyMiA6IGhkci0+YWRkcjMpKSAmJgorCQkJCSghcHN0YXR1cy0+Yl9od2Vycm9yKSAmJiAoIXBzdGF0dXMtPmJfY3JjKSAmJgorCQkJCSghcHN0YXR1cy0+Yl9pY3YpKTsKKworCWJfcGFja2V0X3Rvc2VsZiA9IGJfcGFja2V0X21hdGNoYnNzaWQgJiYKKwkJCSAoZXRoZXJfYWRkcl9lcXVhbChwcmFkZHIsIHJ0bGVmdXNlLT5kZXZfYWRkcikpOworCisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKQorCQliX3BhY2tldF9iZWFjb24gPSB0cnVlOworCWVsc2UKKwkJYl9wYWNrZXRfYmVhY29uID0gZmFsc2U7CisKKwlpZiAoYl9wYWNrZXRfYmVhY29uICYmIGJfcGFja2V0X21hdGNoYnNzaWQpCisJCXJ0bF9wcml2KGh3KS0+ZG0uZGJnaW5mby5udW1fcXJ5X2JlYWNvbl9wa3QrKzsKKworCWlmIChiX3BhY2tldF9tYXRjaGJzc2lkICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgJiYKKwkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyICpoZHJfcW9zID0KKwkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19oZHIgKil0bXBfYnVmOworCQl1MTYgdGlkID0gbGUxNl90b19jcHUoaGRyX3Fvcy0+cW9zX2N0cmwpICYgMHhmOworCQlpZiAodGlkICE9IDAgJiYgdGlkICE9IDMpCisJCQlydGxfcHJpdihodyktPmRtLmRiZ2luZm8ubnVtX25vbl9iZV9wa3QrKzsKKwl9CisJX3J0bDkyZWVfcXVlcnlfcnhwaHlzdGF0dXMoaHcsIHBzdGF0dXMsIHBkZXNjLCBwX2RydmluZm8sCisJCQkJICAgYl9wYWNrZXRfbWF0Y2hic3NpZCwgYl9wYWNrZXRfdG9zZWxmLAorCQkJCSAgIGJfcGFja2V0X2JlYWNvbik7CisJc3RnX3J0bF9wcm9jZXNzX3BoeWluZm8oaHcsIHRtcF9idWYsIHBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJlZV9pbnNlcnRfZW1jb250ZW50KHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYywKKwkJCQkgICAgICB1OCAqdmlydHVhbGFkZHJlc3MpCit7CisJdTMyIGR3dG1wID0gMDsKKwltZW1zZXQodmlydHVhbGFkZHJlc3MsIDAsIDgpOworCisJU0VUX0VBUkxZTU9ERV9QS1ROVU0odmlydHVhbGFkZHJlc3MsIHB0Y2JfZGVzYy0+ZW1wa3RfbnVtKTsKKwlpZiAocHRjYl9kZXNjLT5lbXBrdF9udW0gPT0gMSkgeworCQlkd3RtcCA9IHB0Y2JfZGVzYy0+ZW1wa3RfbGVuWzBdOworCX0gZWxzZSB7CisJCWR3dG1wID0gcHRjYl9kZXNjLT5lbXBrdF9sZW5bMF07CisJCWR3dG1wICs9ICgoZHd0bXAgJSA0KSA/ICg0IC0gZHd0bXAgJSA0KSA6IDApICsgNDsKKwkJZHd0bXAgKz0gcHRjYl9kZXNjLT5lbXBrdF9sZW5bMV07CisJfQorCVNFVF9FQVJMWU1PREVfTEVOMCh2aXJ0dWFsYWRkcmVzcywgZHd0bXApOworCisJaWYgKHB0Y2JfZGVzYy0+ZW1wa3RfbnVtIDw9IDMpIHsKKwkJZHd0bXAgPSBwdGNiX2Rlc2MtPmVtcGt0X2xlblsyXTsKKwl9IGVsc2UgeworCQlkd3RtcCA9IHB0Y2JfZGVzYy0+ZW1wa3RfbGVuWzJdOworCQlkd3RtcCArPSAoKGR3dG1wICUgNCkgPyAoNCAtIGR3dG1wICUgNCkgOiAwKSArIDQ7CisJCWR3dG1wICs9IHB0Y2JfZGVzYy0+ZW1wa3RfbGVuWzNdOworCX0KKwlTRVRfRUFSTFlNT0RFX0xFTjEodmlydHVhbGFkZHJlc3MsIGR3dG1wKTsKKwlpZiAocHRjYl9kZXNjLT5lbXBrdF9udW0gPD0gNSkgeworCQlkd3RtcCA9IHB0Y2JfZGVzYy0+ZW1wa3RfbGVuWzRdOworCX0gZWxzZSB7CisJCWR3dG1wID0gcHRjYl9kZXNjLT5lbXBrdF9sZW5bNF07CisJCWR3dG1wICs9ICgoZHd0bXAgJSA0KSA/ICg0IC0gZHd0bXAgJSA0KSA6IDApICsgNDsKKwkJZHd0bXAgKz0gcHRjYl9kZXNjLT5lbXBrdF9sZW5bNV07CisJfQorCVNFVF9FQVJMWU1PREVfTEVOMl8xKHZpcnR1YWxhZGRyZXNzLCBkd3RtcCAmIDB4Rik7CisJU0VUX0VBUkxZTU9ERV9MRU4yXzIodmlydHVhbGFkZHJlc3MsIGR3dG1wID4+IDQpOworCWlmIChwdGNiX2Rlc2MtPmVtcGt0X251bSA8PSA3KSB7CisJCWR3dG1wID0gcHRjYl9kZXNjLT5lbXBrdF9sZW5bNl07CisJfSBlbHNlIHsKKwkJZHd0bXAgPSBwdGNiX2Rlc2MtPmVtcGt0X2xlbls2XTsKKwkJZHd0bXAgKz0gKChkd3RtcCAlIDQpID8gKDQgLSBkd3RtcCAlIDQpIDogMCkgKyA0OworCQlkd3RtcCArPSBwdGNiX2Rlc2MtPmVtcGt0X2xlbls3XTsKKwl9CisJU0VUX0VBUkxZTU9ERV9MRU4zKHZpcnR1YWxhZGRyZXNzLCBkd3RtcCk7CisJaWYgKHB0Y2JfZGVzYy0+ZW1wa3RfbnVtIDw9IDkpIHsKKwkJZHd0bXAgPSBwdGNiX2Rlc2MtPmVtcGt0X2xlbls4XTsKKwl9IGVsc2UgeworCQlkd3RtcCA9IHB0Y2JfZGVzYy0+ZW1wa3RfbGVuWzhdOworCQlkd3RtcCArPSAoKGR3dG1wICUgNCkgPyAoNCAtIGR3dG1wICUgNCkgOiAwKSArIDQ7CisJCWR3dG1wICs9IHB0Y2JfZGVzYy0+ZW1wa3RfbGVuWzldOworCX0KKwlTRVRfRUFSTFlNT0RFX0xFTjQodmlydHVhbGFkZHJlc3MsIGR3dG1wKTsKK30KKworYm9vbCBydGw5MmVlX3J4X3F1ZXJ5X2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgcnRsX3N0YXRzICpzdGF0dXMsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAorCQkJICAgdTggKnBkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnhfZndpbmZvICpwX2RydmluZm87CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKworCXUzMiBwaHlzdGF0dXMgPSBHRVRfUlhfREVTQ19QSFlTVChwZGVzYyk7CisJc3RhdHVzLT5sZW5ndGggPSAodTE2KSBHRVRfUlhfREVTQ19QS1RfTEVOKHBkZXNjKTsKKwlzdGF0dXMtPnJ4X2RydmluZm9fc2l6ZSA9ICh1OCkgR0VUX1JYX0RFU0NfRFJWX0lORk9fU0laRShwZGVzYykgKgorCQkJCSAgUlhfRFJWX0lORk9fU0laRV9VTklUOworCXN0YXR1cy0+cnhfYnVmc2hpZnQgPSAodTgpKEdFVF9SWF9ERVNDX1NISUZUKHBkZXNjKSAmIDB4MDMpOworCXN0YXR1cy0+Yl9pY3YgPSAodTE2KSBHRVRfUlhfREVTQ19JQ1YocGRlc2MpOworCXN0YXR1cy0+Yl9jcmMgPSAodTE2KSBHRVRfUlhfREVTQ19DUkMzMihwZGVzYyk7CisJc3RhdHVzLT5iX2h3ZXJyb3IgPSAoc3RhdHVzLT5iX2NyYyB8IHN0YXR1cy0+Yl9pY3YpOworCXN0YXR1cy0+ZGVjcnlwdGVkID0gIUdFVF9SWF9ERVNDX1NXREVDKHBkZXNjKTsKKwlzdGF0dXMtPnJhdGUgPSAodTgpIEdFVF9SWF9ERVNDX1JYTUNTKHBkZXNjKTsKKwlzdGF0dXMtPmJfaXNhbXBkdSA9IChib29sKShHRVRfUlhfREVTQ19QQUdHUihwZGVzYykgPT0gMSk7CisJCXN0YXR1cy0+dGltZXN0YW1wX2xvdyA9IEdFVF9SWF9ERVNDX1RTRkwocGRlc2MpOworCXN0YXR1cy0+Yl9pc19jY2sgPSBSWF9IQUxfSVNfQ0NLX1JBVEUoc3RhdHVzLT5yYXRlKTsKKworCXN0YXR1cy0+bWFjaWQgPSBHRVRfUlhfREVTQ19NQUNJRChwZGVzYyk7CisJaWYgKEdFVF9SWF9TVEFUVVNfREVTQ19NQUdJQ19NQVRDSChwZGVzYykpCisJCXN0YXR1cy0+d2FrZV9tYXRjaCA9IEJJVCgyKTsKKwllbHNlIGlmIChHRVRfUlhfU1RBVFVTX0RFU0NfTUFHSUNfTUFUQ0gocGRlc2MpKQorCQlzdGF0dXMtPndha2VfbWF0Y2ggPSBCSVQoMSk7CisJZWxzZSBpZiAoR0VUX1JYX1NUQVRVU19ERVNDX1VOSUNBU1RfTUFUQ0gocGRlc2MpKQorCQlzdGF0dXMtPndha2VfbWF0Y2ggPSBCSVQoMCk7CisJZWxzZQorCQlzdGF0dXMtPndha2VfbWF0Y2ggPSAwOworCWlmIChzdGF0dXMtPndha2VfbWF0Y2gpCisJCVJUX1RSQUNFKENPTVBfUlhERVNDICwgREJHX0xPVUQsCisJCQkgKCJHR0dHR0dHR0dHR0dHZXQgV2FrZXVwIFBhY2tldCEhIFdha2VNYXRjaCA9JWRcbiIsCisJCQkgc3RhdHVzLT53YWtlX21hdGNoKSk7CisJcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5jZW50ZXJfZnJlcTsKKwlyeF9zdGF0dXMtPmJhbmQgPSBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQ7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhICsgc3RhdHVzLT5yeF9kcnZpbmZvX3NpemUgKworCQkJCSAgICAgICBzdGF0dXMtPnJ4X2J1ZnNoaWZ0ICsgMjQpOworCisJaWYgKHN0YXR1cy0+Yl9jcmMpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCisJaWYgKHN0YXR1cy0+cnhfaXM0ME1oenBhY2tldCkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7CisKKwlpZiAoc3RhdHVzLT5iX2lzX2h0KQorCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19IVDsKKworCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfTVBEVTsKKworCS8qIGh3IHdpbGwgc2V0IHN0YXR1cy0+ZGVjcnlwdGVkIHRydWUsIGlmIGl0IGZpbmRzIHRoZQorCSAqIGZyYW1lIGlzIG9wZW4gZGF0YSBmcmFtZSBvciBtZ210IGZyYW1lLiAqLworCS8qIFNvIGh3IHdpbGwgbm90IGRlY3J5cHRpb24gcm9idXN0IG1hbmFnbWVudCBmcmFtZQorCSAqIGZvciBJRUVFODAyMTF3IGJ1dCBzdGlsbCBzZXQgc3RhdHVzLT5kZWNyeXB0ZWQKKwkgKiB0cnVlLCBzbyBoZXJlIHdlIHNob3VsZCBzZXQgaXQgYmFjayB0byB1bmRlY3J5cHRlZAorCSAqIGZvciBJRUVFODAyMTF3IGZyYW1lLCBhbmQgbWFjODAyMTEgc3cgd2lsbCBoZWxwCisJICogdG8gZGVjcnlwdCBpdCAqLworCWlmIChzdGF0dXMtPmRlY3J5cHRlZCkgeworCQlpZiAoIWhkcikgeworCQkJV0FSTl9PTl9PTkNFKHRydWUpOworCQkJcHJfZXJyKCJkZWNyeXB0ZWQgaXMgdHJ1ZSBidXQgaGRyIE5VTEwsIGZyb20gc2tiICVwXG4iLAorCQkJICAgICAgIHJ0bF9nZXRfaGRyKHNrYikpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKCghX2llZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpKSAmJgorCQkgICAgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpKQorCQkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCQllbHNlCisJCQlyeF9zdGF0dXMtPmZsYWcgJj0gflJYX0ZMQUdfREVDUllQVEVEOworCX0KKworCS8qIHJhdGVfaWR4OiBpbmRleCBvZiBkYXRhIHJhdGUgaW50byBiYW5kJ3MKKwkgKiBzdXBwb3J0ZWQgcmF0ZXMgb3IgTUNTIGluZGV4IGlmIEhUIHJhdGVzCisJICogYXJlIHVzZSAoUlhfRkxBR19IVCkqLworCS8qIE5vdGljZTogdGhpcyBpcyBkaWZmIHdpdGggd2luZG93cyBkZWZpbmUgKi8KKwlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gX3J0bDkyZWVfcmF0ZV9tYXBwaW5nKGh3LAorCQkJCQkJICAgIHN0YXR1cy0+Yl9pc19odCwKKwkJCQkJCSAgICBzdGF0dXMtPnJhdGUpOworCisJcnhfc3RhdHVzLT5tYWN0aW1lID0gc3RhdHVzLT50aW1lc3RhbXBfbG93OworCWlmIChwaHlzdGF0dXMpIHsKKwkJcF9kcnZpbmZvID0gKHN0cnVjdCByeF9md2luZm8gKikoc2tiLT5kYXRhICsKKwkJCQkJCSBzdGF0dXMtPnJ4X2J1ZnNoaWZ0ICsgMjQpOworCisJCV9ydGw5MmVlX3RyYW5zbGF0ZV9yeF9zaWduYWxfc3R1ZmYoaHcsIHNrYiwgc3RhdHVzLCBwZGVzYywKKwkJCQkJCSAgIHBfZHJ2aW5mbyk7CisJfQorCisJLypyeF9zdGF0dXMtPnF1YWwgPSBzdGF0dXMtPnNpZ25hbDsgKi8KKwlyeF9zdGF0dXMtPnNpZ25hbCA9IHN0YXR1cy0+cmVjdnNpZ25hbHBvd2VyICsgMTA7CisJLypyeF9zdGF0dXMtPm5vaXNlID0gLXN0YXR1cy0+bm9pc2U7ICovCisJaWYgKHN0YXR1cy0+cGFja2V0X3JlcG9ydF90eXBlID09IFRYX1JFUE9SVDIpIHsKKwkJc3RhdHVzLT5tYWNpZF92YWxpZF9lbnRyeVswXSA9CisJCQlHRVRfUlhfUlBUMl9ERVNDX01BQ0lEX1ZBTElEXzEocGRlc2MpOworCQlzdGF0dXMtPm1hY2lkX3ZhbGlkX2VudHJ5WzFdID0KKwkJCUdFVF9SWF9SUFQyX0RFU0NfTUFDSURfVkFMSURfMihwZGVzYyk7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKmluIFdpbmRvd3MsIHRoaXMgPT0gUnhfOTJFRV9JbnRlcnJ1cHQqLwordm9pZCBydGw5MmVlX3J4X2NoZWNrX2RtYV9vayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmhlYWRlcl9kZXNjLAorCQkJICAgICB1OCBxdWV1ZV9pbmRleCkKK3sKKwl1OCBmaXJzdF9zZWc7CisJdTggbGFzdF9zZWc7CisJdTE2IHRvdGFsX2xlbjsKKwl1MTYgcmVhZF9jbnQgPSAwOworCWlmIChoZWFkZXJfZGVzYyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0b3RhbF9sZW4gPSAodTE2KUdFVF9SWF9CVUZGRVJfREVTQ19UT1RBTF9MRU5HVEgoaGVhZGVyX2Rlc2MpOworCisJZmlyc3Rfc2VnID0gKHU4KUdFVF9SWF9CVUZGRVJfREVTQ19GUyhoZWFkZXJfZGVzYyk7CisKKwlsYXN0X3NlZyA9ICh1OClHRVRfUlhfQlVGRkVSX0RFU0NfTFMoaGVhZGVyX2Rlc2MpOworCisJd2hpbGUgKHRvdGFsX2xlbiA9PSAwICYmIGZpcnN0X3NlZyA9PSAwICYmIGxhc3Rfc2VnID09IDApIHsKKwkJcmVhZF9jbnQrKzsKKwkJdG90YWxfbGVuID0gKHUxNilHRVRfUlhfQlVGRkVSX0RFU0NfVE9UQUxfTEVOR1RIKGhlYWRlcl9kZXNjKTsKKwkJZmlyc3Rfc2VnID0gKHU4KUdFVF9SWF9CVUZGRVJfREVTQ19GUyhoZWFkZXJfZGVzYyk7CisJCWxhc3Rfc2VnID0gKHU4KUdFVF9SWF9CVUZGRVJfREVTQ19MUyhoZWFkZXJfZGVzYyk7CisKKwkJaWYgKHJlYWRfY250ID4gMjApCisJCQlicmVhazsKKwl9Cit9CisKK3UxNiBydGw5MmVlX3J4X2Rlc2NfYnVmZl9yZW1haW5lZF9jbnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcgLCB1OCBxdWV1ZV9pbmRleCkKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MTYgcmVhZF9wb2ludCA9IDAgLCB3cml0ZV9wb2ludCA9IDAgLCByZW1pbmRfY250ID0gMDsKKwl1MzIgdG1wXzRieXRlID0gMDsKKwlzdGF0aWMgdTE2IGxhc3RfcmVhZF9wb2ludDsKKwlzdGF0aWMgYm9vbCBzdGFydF9yeDsKKworCXRtcF80Ynl0ZSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19SWFFfVFhCRF9JRFgpOworCXJlYWRfcG9pbnQgPSAodTE2KSgodG1wXzRieXRlPj4xNikgJiAweDdmZik7CisJd3JpdGVfcG9pbnQgPSAodTE2KSh0bXBfNGJ5dGUgJiAweDdmZik7CisKKwlpZiAod3JpdGVfcG9pbnQgIT0gcnRscGNpLT5yeF9yaW5nW3F1ZXVlX2luZGV4XS5uZXh0X3J4X3JwKSB7CisJCVJUX1RSQUNFKENPTVBfUlhERVNDLCBEQkdfRE1FU0csCisJCQkgKCIhISF3cml0ZSBwb2ludCBpcyAweCV4LCByZWcgMHgzQjQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCSAgd3JpdGVfcG9pbnQsIHRtcF80Ynl0ZSkpOworCQl0bXBfNGJ5dGUgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfUlhRX1RYQkRfSURYKTsKKwkJcmVhZF9wb2ludCA9ICh1MTYpKCh0bXBfNGJ5dGU+PjE2KSAmIDB4N2ZmKTsKKwkJd3JpdGVfcG9pbnQgPSAodTE2KSh0bXBfNGJ5dGUgJiAweDdmZik7CisJfQorCisJaWYgKHJlYWRfcG9pbnQgPiAwKQorCQlzdGFydF9yeCA9IHRydWU7CisJaWYgKCFzdGFydF9yeCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGxhc3RfcmVhZF9wb2ludCA+IChSWF9ERVNDX05VTV85MkUgLyAyKSkgJiYKKwkgICAgKHJlYWRfcG9pbnQgPD0gKFJYX0RFU0NfTlVNXzkyRSAvIDIpKSkgeworCQlyZW1pbmRfY250ID0gUlhfREVTQ19OVU1fOTJFIC0gd3JpdGVfcG9pbnQ7CisJfSBlbHNlIHsKKwkJcmVtaW5kX2NudCA9IChyZWFkX3BvaW50ID49IHdyaXRlX3BvaW50KSA/CisJCQkgICAgIChyZWFkX3BvaW50IC0gd3JpdGVfcG9pbnQpIDoKKwkJCSAgICAgKFJYX0RFU0NfTlVNXzkyRSAtIHdyaXRlX3BvaW50ICsgcmVhZF9wb2ludCk7CisJfQorCisJaWYgKHJlbWluZF9jbnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlydGxwY2ktPnJ4X3JpbmdbcXVldWVfaW5kZXhdLm5leHRfcnhfcnAgPSB3cml0ZV9wb2ludDsKKworCWxhc3RfcmVhZF9wb2ludCA9IHJlYWRfcG9pbnQ7CisJcmV0dXJuIHJlbWluZF9jbnQ7Cit9CisKK3N0YXRpYyB1MTYgZ2V0X2Rlc2NfYWRkcl9mcl9xKHUxNiBxdWV1ZV9pbmRleCkKK3sKKwl1MTYgZGVzY19hZGRyZXNzID0gUkVHX0JFUV9UWEJEX0lEWDsKKworCXN3aXRjaCAocXVldWVfaW5kZXgpIHsKKwljYXNlIEJLX1FVRVVFOgorCQkJZGVzY19hZGRyZXNzID0gUkVHX0JLUV9UWEJEX0lEWDsKKwkJCWJyZWFrOworCWNhc2UgQkVfUVVFVUU6CisJCQlkZXNjX2FkZHJlc3MgPSBSRUdfQkVRX1RYQkRfSURYOworCQkJYnJlYWs7CisJY2FzZSBWSV9RVUVVRToKKwkJCWRlc2NfYWRkcmVzcyA9IFJFR19WSVFfVFhCRF9JRFg7CisJCQlicmVhazsKKwljYXNlIFZPX1FVRVVFOgorCQkJZGVzY19hZGRyZXNzID0gUkVHX1ZPUV9UWEJEX0lEWDsKKwkJCWJyZWFrOworCWNhc2UgQkVBQ09OX1FVRVVFOgorCQkJZGVzY19hZGRyZXNzID0gUkVHX0JFUV9UWEJEX0lEWDsKKwkJCWJyZWFrOworCWNhc2UgVFhDTURfUVVFVUU6CisJCQlkZXNjX2FkZHJlc3MgPSBSRUdfQkVRX1RYQkRfSURYOworCQkJYnJlYWs7CisJY2FzZSBNR05UX1FVRVVFOgorCQkJZGVzY19hZGRyZXNzID0gUkVHX01HUV9UWEJEX0lEWDsKKwkJCWJyZWFrOworCWNhc2UgSElHSF9RVUVVRToKKwkJCWRlc2NfYWRkcmVzcyA9IFJFR19ISTBRX1RYQkRfSURYOworCQkJYnJlYWs7CisJY2FzZSBIQ0NBX1FVRVVFOgorCQkJZGVzY19hZGRyZXNzID0gUkVHX0JFUV9UWEJEX0lEWDsKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJcmV0dXJuIGRlc2NfYWRkcmVzczsKK30KKwordm9pZCBydGw5MmVlX2dldF9hdmFpbGFibGVfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyAsIHU4IHFfaWR4KQoreworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUxNiBwb2ludF9kaWZmID0gMDsKKwl1MTYgY3VycmVudF90eF9yZWFkX3BvaW50ID0gMCwgY3VycmVudF90eF93cml0ZV9wb2ludCA9IDA7CisJdTMyIHRtcF80Ynl0ZTsKKwl0bXBfNGJ5dGUgPSBydGxfcmVhZF9kd29yZChydGxwcml2LAorCQkJCSAgIGdldF9kZXNjX2FkZHJfZnJfcShxX2lkeCkpOworCWN1cnJlbnRfdHhfcmVhZF9wb2ludCA9ICh1MTYpKCh0bXBfNGJ5dGUgPj4gMTYpICYgMHgwZmZmKTsKKwljdXJyZW50X3R4X3dyaXRlX3BvaW50ID0gKHUxNikoKHRtcF80Ynl0ZSkgJiAweDBmZmYpOworCisJcG9pbnRfZGlmZiA9ICgoY3VycmVudF90eF9yZWFkX3BvaW50ID4gY3VycmVudF90eF93cml0ZV9wb2ludCkgPworCQkgICAgICAoY3VycmVudF90eF9yZWFkX3BvaW50IC0gY3VycmVudF90eF93cml0ZV9wb2ludCkgOgorCQkgICAgICAoVFhfREVTQ19OVU1fOTJFIC0gY3VycmVudF90eF93cml0ZV9wb2ludCArCisJCSAgICAgICBjdXJyZW50X3R4X3JlYWRfcG9pbnQpKTsKKworCXJ0bHBjaS0+dHhfcmluZ1txX2lkeF0uYXZsX2Rlc2MgPSBwb2ludF9kaWZmOworfQorCit2b2lkIHJ0bDkyZWVfcHJlX2ZpbGxfdHhfYmRfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggKnR4X2JkX2Rlc2MsIHU4ICpkZXNjLCB1OCBxdWV1ZV9pbmRleCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZG1hX2FkZHJfdCBhZGRyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXUzMiBwa3RfbGVuID0gc2tiLT5sZW47CisJdTE2IGRlc2Nfc2l6ZSA9IDQwOyAvKnR4IGRlc2Mgc2l6ZSovCisJdTMyIHBzYmxlbiA9IDA7CisJdTE2IHR4X3BhZ2Vfc2l6ZSA9IDA7CisJdTMyIHRvdGFsX3BhY2tldF9zaXplID0gMDsKKwl1MTYgY3VycmVudF9iZF9kZXNjOworCXU4IGkgPSAwOworCXUxNiByZWFsX2Rlc2Nfc2l6ZSA9IDB4Mjg7CisJdTE2CWFwcGVuZF9lYXJseV9tb2RlX3NpemUgPSAwOworI2lmIChSVEw4MTkyRUVfU0VHX05VTSA9PSAwKQorCXU4IHNlZ21lbnRudW0gPSAyOworI2VsaWYgKFJUTDgxOTJFRV9TRUdfTlVNID09IDEpCisJdTggc2VnbWVudG51bSA9IDQ7CisjZWxpZiAoUlRMODE5MkVFX1NFR19OVU0gPT0gMikKKwl1OCBzZWdtZW50bnVtID0gODsKKyNlbmRpZgorCisJdHhfcGFnZV9zaXplID0gMjsKKwljdXJyZW50X2JkX2Rlc2MgPSBydGxwY2ktPnR4X3JpbmdbcXVldWVfaW5kZXhdLmN1cl90eF93cDsKKworCisJdG90YWxfcGFja2V0X3NpemUgPSBkZXNjX3NpemUrcGt0X2xlbjsKKworCWlmIChydGxwcml2LT5ydGxoYWwuYl9lYXJseW1vZGVfZW5hYmxlKQl7CisJCWlmIChxdWV1ZV9pbmRleCA8IEJFQUNPTl9RVUVVRSkgeworCQkJYXBwZW5kX2Vhcmx5X21vZGVfc2l6ZSA9IDg7CisJCQl0b3RhbF9wYWNrZXRfc2l6ZSArPSBhcHBlbmRfZWFybHlfbW9kZV9zaXplOworCQl9CisJfQorCisJaWYgKHR4X3BhZ2Vfc2l6ZSA+IDApIHsKKwkJcHNibGVuID0gKHBrdF9sZW4gKyByZWFsX2Rlc2Nfc2l6ZSArIGFwcGVuZF9lYXJseV9tb2RlX3NpemUpIC8KKwkJCSAodHhfcGFnZV9zaXplICogMTI4KTsKKworCQlpZiAocHNibGVuICogKHR4X3BhZ2Vfc2l6ZSAqIDEyOCkgPCB0b3RhbF9wYWNrZXRfc2l6ZSkKKwkJCXBzYmxlbiArPSAxOworCX0KKworCS8qIFJlc2V0ICovCisJU0VUX1RYX0JVRkZfREVTQ19MRU5fMCh0eF9iZF9kZXNjICwgMCk7CisJU0VUX1RYX0JVRkZfREVTQ19QU0IodHhfYmRfZGVzYyAsIDApOworCVNFVF9UWF9CVUZGX0RFU0NfT1dOKHR4X2JkX2Rlc2MgLCAwKTsKKworCWZvciAoaSA9IDE7IGkgPCBzZWdtZW50bnVtOyBpKyspIHsKKwkJU0VUX1RYQlVGRkVSX0RFU0NfTEVOX1dJVEhfT0ZGU0VUKHR4X2JkX2Rlc2MsIGksIDApOworCQlTRVRfVFhCVUZGRVJfREVTQ19BTVNEVV9XSVRIX09GRlNFVCh0eF9iZF9kZXNjLCBpLCAwKTsKKwkJU0VUX1RYQlVGRkVSX0RFU0NfQUREX0xPV19XSVRIX09GRlNFVCh0eF9iZF9kZXNjLCBpLCAwKTsKKyNpZiAoRE1BX0lTXzY0QklUID09IDEpCisJCVNFVF9UWEJVRkZFUl9ERVNDX0FERF9ISUdUX1dJVEhfT0ZGU0VUKHR4X2JkX2Rlc2MsIGksIDApOworI2VuZGlmCisJfQorCVNFVF9UWF9CVUZGX0RFU0NfTEVOXzEodHhfYmRfZGVzYywgMCk7CisJU0VUX1RYX0JVRkZfREVTQ19BTVNEVV8xKHR4X2JkX2Rlc2MsIDApOworCisJU0VUX1RYX0JVRkZfREVTQ19MRU5fMih0eF9iZF9kZXNjLCAwKTsKKwlTRVRfVFhfQlVGRl9ERVNDX0FNU0RVXzIodHhfYmRfZGVzYywgMCk7CisJU0VUX1RYX0JVRkZfREVTQ19MRU5fMyh0eF9iZF9kZXNjLCAwKTsKKwlTRVRfVFhfQlVGRl9ERVNDX0FNU0RVXzModHhfYmRfZGVzYywgMCk7CisJLyogQ2xlYXIgYWxsIHN0YXR1cyAqLworCUNMRUFSX1BDSV9UWF9ERVNDX0NPTlRFTlQoZGVzYywgVFhfREVTQ19TSVpFKTsKKworCWlmIChydGxwcml2LT5ydGxoYWwuYl9lYXJseW1vZGVfZW5hYmxlKSB7CisJCWlmIChxdWV1ZV9pbmRleCA8IEJFQUNPTl9RVUVVRSkgeworCQkJLyogVGhlc2UgbWFjcm9zIG5lZWQgYnJhY2VzICovCisJCQlTRVRfVFhfQlVGRl9ERVNDX0xFTl8wKHR4X2JkX2Rlc2MgLCBkZXNjX3NpemUgKyA4KTsKKwkJfSBlbHNlIHsKKwkJCVNFVF9UWF9CVUZGX0RFU0NfTEVOXzAodHhfYmRfZGVzYyAsIGRlc2Nfc2l6ZSk7CisJCX0KKwl9IGVsc2UgeworCQlTRVRfVFhfQlVGRl9ERVNDX0xFTl8wKHR4X2JkX2Rlc2MgLCBkZXNjX3NpemUpOworCX0KKwlTRVRfVFhfQlVGRl9ERVNDX1BTQih0eF9iZF9kZXNjICwgcHNibGVuKTsKKwlTRVRfVFhfQlVGRl9ERVNDX0FERFJfTE9XXzAodHhfYmRfZGVzYywKKwkJCQkgICAgcnRscGNpLT50eF9yaW5nW3F1ZXVlX2luZGV4XS5kbWEgKworCQkJCSAgICAoY3VycmVudF9iZF9kZXNjICogVFhfREVTQ19TSVpFKSk7CisKKwlTRVRfVFhCVUZGRVJfREVTQ19MRU5fV0lUSF9PRkZTRVQodHhfYmRfZGVzYywgMSwgcGt0X2xlbik7CisJLyogZG9uJ3QgdXNpbmcgZXh0ZW5kc2lvbiBtb2RlLiAqLworCVNFVF9UWEJVRkZFUl9ERVNDX0FNU0RVX1dJVEhfT0ZGU0VUKHR4X2JkX2Rlc2MsIDEsIDApOworCVNFVF9UWEJVRkZFUl9ERVNDX0FERF9MT1dfV0lUSF9PRkZTRVQodHhfYmRfZGVzYywgMSwgYWRkcik7CisKKwlTRVRfVFhfREVTQ19QS1RfU0laRShkZXNjLCAodTE2KShwa3RfbGVuKSk7CisJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUoZGVzYywgKHUxNikocGt0X2xlbikpOworfQorCit2b2lkIHJ0bDkyZWVfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsCisJCQkgIHU4ICpwYmRfZGVzY190eCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1OCBod19xdWV1ZSwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqcHRjYl9kZXNjKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJdTggKnBkZXNjID0gKHU4ICopcGRlc2NfdHg7CisJdTE2IHNlcV9udW1iZXI7CisJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXVuc2lnbmVkIGludCBidWZfbGVuID0gMDsKKwl1OCBmd19xc2VsID0gX3J0bDkyZWVfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShza2IsIGh3X3F1ZXVlKTsKKwlib29sIGJfZmlyc3RzZWcgPSAoKGhkci0+c2VxX2N0cmwgJgorCQkJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSA9PSAwKTsKKwlib29sIGJfbGFzdHNlZyA9ICgoaGRyLT5mcmFtZV9jb250cm9sICYKKwkJCSAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpID09IDApOworCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1OCBid180MCA9IDA7CisJdTggc2hvcnRfZ2kgPSAwOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJYndfNDAgPSBtYWMtPmJ3XzQwOworCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKHN0YSkKKwkJCWJ3XzQwID0gc3RhLT5odF9jYXAuY2FwICYKKwkJCQlJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwl9CisJc2VxX251bWJlciA9IChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKKwlzdGdfcnRsX2dldF90Y2JfZGVzYyhodywgaW5mbywgc3RhLCBza2IsIHB0Y2JfZGVzYyk7CisJLyogcmVzZXJ2ZSA4IGJ5dGUgZm9yIEFNUERVIGVhcmx5IG1vZGUgKi8KKwlpZiAocnRsaGFsLT5iX2Vhcmx5bW9kZV9lbmFibGUpIHsKKwkJc2tiX3B1c2goc2tiLCBFTV9IRFJfTEVOKTsKKwkJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgRU1fSERSX0xFTik7CisJfQorCWJ1Zl9sZW4gPSBza2ItPmxlbjsKKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocnRscGNpLT5wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHJ0bHBjaS0+cGRldiwgbWFwcGluZykpIHsKKwkJUlRfVFJBQ0UoQ09NUF9TRU5ELCBEQkdfVFJBQ0UsCisJCQkgKCJETUEgbWFwcGluZyBlcnJvciIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGJkX2Rlc2NfdHggIT0gTlVMTCkKKwkJcnRsOTJlZV9wcmVfZmlsbF90eF9iZF9kZXNjKGh3LCBwYmRfZGVzY190eCwgcGRlc2MsIGh3X3F1ZXVlLAorCQkJCQkgICAgc2tiLCBtYXBwaW5nKTsKKworCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpIHx8IGllZWU4MDIxMV9pc19jdGwoZmMpKSB7CisJCWJfZmlyc3RzZWcgPSB0cnVlOworCQliX2xhc3RzZWcgPSB0cnVlOworCX0KKwlpZiAoYl9maXJzdHNlZykgeworCQlpZiAocnRsaGFsLT5iX2Vhcmx5bW9kZV9lbmFibGUpIHsKKwkJCVNFVF9UWF9ERVNDX1BLVF9PRkZTRVQocGRlc2MsIDEpOworCQkJU0VUX1RYX0RFU0NfT0ZGU0VUKHBkZXNjLAorCQkJCQkgICBVU0JfSFdERVNDX0hFQURFUl9MRU4gKyBFTV9IRFJfTEVOKTsKKwkJCWlmIChwdGNiX2Rlc2MtPmVtcGt0X251bSkgeworCQkJCVJUX1RSQUNFKENPTVBfU0VORCwgREJHX1RSQUNFLAorCQkJCQkgKCJJbnNlcnQgOCBieXRlLnBUY2ItPkVNUGt0TnVtOiVkXG4iLAorCQkJCQkgIHB0Y2JfZGVzYy0+ZW1wa3RfbnVtKSk7CisJCQkJX3J0bDkyZWVfaW5zZXJ0X2VtY29udGVudChwdGNiX2Rlc2MsCisJCQkJCQkJICAodTggKikoc2tiLT5kYXRhKSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlTRVRfVFhfREVTQ19PRkZTRVQocGRlc2MsIFVTQl9IV0RFU0NfSEVBREVSX0xFTik7CisJCX0KKworCQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBwdGNiX2Rlc2MtPmh3X3JhdGUpOworCisJCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpIHsKKwkJCXB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChydGxwcml2LT5yYS5pc19zcGVjaWFsX2RhdGEpIHsKKwkJCQlwdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IHRydWU7CisJCQkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgREVTQzkyQ19SQVRFMTFNKTsKKwkJCX0gZWxzZSB7CisJCQkJcHRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUgPSBmYWxzZTsKKwkJCX0KKwkJfQorCisJCWlmIChwdGNiX2Rlc2MtPmh3X3JhdGUgPiBERVNDOTJDX1JBVEVNQ1MwKQorCQkJc2hvcnRfZ2kgPSAocHRjYl9kZXNjLT51c2Vfc2hvcnRnaSkgPyAxIDogMDsKKwkJZWxzZQorCQkJc2hvcnRfZ2kgPSAocHRjYl9kZXNjLT51c2Vfc2hvcnRwcmVhbWJsZSkgPyAxIDogMDsKKworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQlTRVRfVFhfREVTQ19BR0dfRU5BQkxFKHBkZXNjLCAxKTsKKwkJCVNFVF9UWF9ERVNDX01BWF9BR0dfTlVNKHBkZXNjLCAweDE0KTsKKwkJfQorCQlTRVRfVFhfREVTQ19TRVEocGRlc2MsIHNlcV9udW1iZXIpOworCQlTRVRfVFhfREVTQ19SVFNfRU5BQkxFKHBkZXNjLAorCQkJCSAgICAgICAoKHB0Y2JfZGVzYy0+Yl9ydHNfZW5hYmxlICYmCisJCQkJCSAhcHRjYl9kZXNjLT5iX2N0c19lbmFibGUpID8gMSA6IDApKTsKKwkJU0VUX1RYX0RFU0NfSFdfUlRTX0VOQUJMRShwZGVzYyAsIDApOworCQlTRVRfVFhfREVTQ19DVFMyU0VMRihwZGVzYywKKwkJCQkgICAgICgocHRjYl9kZXNjLT5iX2N0c19lbmFibGUpID8gMSA6IDApKTsKKworCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgcHRjYl9kZXNjLT5ydHNfcmF0ZSk7CisJCVNFVF9UWF9ERVNDX1JUU19TQyhwZGVzYywgcHRjYl9kZXNjLT5ydHNfc2MpOworCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsCisJCQkJKChwdGNiX2Rlc2MtPnJ0c19yYXRlIDw9IERFU0M5MkNfUkFURTU0TSkgPworCQkJCSAocHRjYl9kZXNjLT5iX3J0c191c2Vfc2hvcnRwcmVhbWJsZSA/IDEgOiAwKSA6CisJCQkJIChwdGNiX2Rlc2MtPmJfcnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisKKwkJaWYgKHB0Y2JfZGVzYy0+YnR4X2VuYWJsZV9zd19jYWxjX2R1cmF0aW9uKQorCQkJU0VUX1RYX0RFU0NfTkFWX1VTRV9IRFIocGRlc2MsIDEpOworCisJCWlmIChid180MCkgeworCQkJaWYgKHB0Y2JfZGVzYy0+cGFja2V0X2J3ID09IEhUX0NIQU5ORUxfV0lEVEhfMjBfNDApIHsKKwkJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHBkZXNjLCAxKTsKKwkJCQlTRVRfVFhfREVTQ19UWF9TVUJfQ0FSUklFUihwZGVzYywgMyk7CisJCQl9IGVsc2UgeworCQkJCVNFVF9UWF9ERVNDX0RBVEFfQlcocGRlc2MsIDApOworCQkJCVNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKHBkZXNjLAorCQkJCQkJCSAgIG1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVNFVF9UWF9ERVNDX0RBVEFfQlcocGRlc2MsIDApOworCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsIDApOworCQl9CisKKwkJU0VUX1RYX0RFU0NfTElOSVAocGRlc2MsIDApOworCQlpZiAoc3RhKSB7CisJCQl1OCBhbXBkdV9kZW5zaXR5ID0gc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsKKwkJCVNFVF9UWF9ERVNDX0FNUERVX0RFTlNJVFkocGRlc2MsIGFtcGR1X2RlbnNpdHkpOworCQl9CisJCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5ID0gaW5mby0+Y29udHJvbC5od19rZXk7CisJCQlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgorCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCQkJU0VUX1RYX0RFU0NfU0VDX1RZUEUocGRlc2MsIDB4MSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCQkJU0VUX1RYX0RFU0NfU0VDX1RZUEUocGRlc2MsIDB4Myk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVNFVF9UWF9ERVNDX1NFQ19UWVBFKHBkZXNjLCAweDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCBmd19xc2VsKTsKKwkJU0VUX1RYX0RFU0NfREFUQV9SQVRFX0ZCX0xJTUlUKHBkZXNjLCAweDFGKTsKKwkJU0VUX1RYX0RFU0NfUlRTX1JBVEVfRkJfTElNSVQocGRlc2MsIDB4Rik7CisJCVNFVF9UWF9ERVNDX0RJU0FCTEVfRkIocGRlc2MsCisJCQkJICAgICAgIHB0Y2JfZGVzYy0+ZGlzYWJsZV9yYXRlZmFsbGJhY2sgPyAxIDogMCk7CisJCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCBwdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA/IDEgOiAwKTsKKworCQkvKlNFVF9UWF9ERVNDX1BXUl9TVEFUVVMocGRlc2MsIHB3cl9zdGF0dXMpOyovCisJCS8qIFNldCBUeFJhdGUgYW5kIFJUU1JhdGUgaW4gVHhEZXNjICAqLworCQkvKiBUaGlzIHByZXZlbnQgVHggaW5pdGlhbCByYXRlIG9mIG5ldy1jb21pbmcgcGFja2V0cyAqLworCQkvKiBmcm9tIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHJldHJpZWQgIHBhY2tldCByYXRlLiovCisJCWlmICghcHRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUpIHsKKwkJCS8qU0VUX1RYX0RFU0NfUlRTX1JBVEUocGRlc2MsIDB4MDgpOyAqLworCQkJLyogU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgMHgwYik7ICovCisJCX0KKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJCWlmIChtYWMtPnJkZ19lbikgeworCQkJCVJUX1RSQUNFKENPTVBfU0VORCwgREJHX1RSQUNFLAorCQkJCQkgKCJFbmFibGUgUkRHIGZ1bmN0aW9uLlxuIikpOworCQkJCVNFVF9UWF9ERVNDX1JER19FTkFCTEUocGRlc2MsIDEpOworCQkJCVNFVF9UWF9ERVNDX0hUQyhwZGVzYywgMSk7CisJCQl9CisJCX0KKwl9CisKKwlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIChiX2ZpcnN0c2VnID8gMSA6IDApKTsKKwlTRVRfVFhfREVTQ19MQVNUX1NFRyhwZGVzYywgKGJfbGFzdHNlZyA/IDEgOiAwKSk7CisJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1MocGRlc2MsIG1hcHBpbmcpOworCWlmIChydGxwcml2LT5kbS5iX3VzZXJhbWFzaykgeworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCBwdGNiX2Rlc2MtPnJhdHJfaW5kZXgpOworCQlTRVRfVFhfREVTQ19NQUNJRChwZGVzYywgcHRjYl9kZXNjLT5tYWNfaWQpOworCX0gZWxzZSB7CisJCVNFVF9UWF9ERVNDX1JBVEVfSUQocGRlc2MsIDB4QyArIHB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CisJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCBwdGNiX2Rlc2MtPnJhdHJfaW5kZXgpOworCX0KKworCVNFVF9UWF9ERVNDX01PUkVfRlJBRyhwZGVzYywgKGJfbGFzdHNlZyA/IDAgOiAxKSk7CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkgfHwKKwkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpKSkgeworCQlTRVRfVFhfREVTQ19CTUMocGRlc2MsIDEpOworCX0KKwlSVF9UUkFDRShDT01QX1NFTkQsIERCR19UUkFDRSwgKCJcbiIpKTsKK30KKwordm9pZCBydGw5MmVlX3R4X2ZpbGxfY21kZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgdTggKnBkZXNjLCBib29sIGJfZmlyc3RzZWcsCisJCQkgICAgIGJvb2wgYl9sYXN0c2VnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXU4IGZ3X3F1ZXVlID0gUVNMVF9CRUFDT047CisKKwlkbWFfYWRkcl90IG1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCisJCQkJCSAgICBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkgICAgUENJX0RNQV9UT0RFVklDRSk7CisKKworCXU4IHR4ZGVzY19sZW4gPSA0MDsKKworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocnRscGNpLT5wZGV2LCBtYXBwaW5nKSkgeworCQlSVF9UUkFDRShDT01QX1NFTkQsIERCR19UUkFDRSwKKwkJCSAoIkRNQSBtYXBwaW5nIGVycm9yIikpOworCQlyZXR1cm47CisJfQorCUNMRUFSX1BDSV9UWF9ERVNDX0NPTlRFTlQocGRlc2MsIHR4ZGVzY19sZW4pOworCisJaWYgKGJfZmlyc3RzZWcpCisJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgdHhkZXNjX2xlbik7CisKKwlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDOTJDX1JBVEUxTSk7CisKKwlTRVRfVFhfREVTQ19TRVEocGRlc2MsIDApOworCisJU0VUX1RYX0RFU0NfTElOSVAocGRlc2MsIDApOworCisJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCBmd19xdWV1ZSk7CisKKwlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIDEpOworCVNFVF9UWF9ERVNDX0xBU1RfU0VHKHBkZXNjLCAxKTsKKworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKHBkZXNjLCAodTE2KShza2ItPmxlbikpOworCisJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1MocGRlc2MsIG1hcHBpbmcpOworCisJU0VUX1RYX0RFU0NfUkFURV9JRChwZGVzYywgNyk7CisJU0VUX1RYX0RFU0NfTUFDSUQocGRlc2MsIDApOworCisJU0VUX1RYX0RFU0NfT1dOKHBkZXNjLCAxKTsKKworCVNFVF9UWF9ERVNDX1BLVF9TSVpFKCh1OCAqKXBkZXNjLCAodTE2KShza2ItPmxlbikpOworCisJU0VUX1RYX0RFU0NfRklSU1RfU0VHKHBkZXNjLCAxKTsKKwlTRVRfVFhfREVTQ19MQVNUX1NFRyhwZGVzYywgMSk7CisKKwlTRVRfVFhfREVTQ19PRkZTRVQocGRlc2MsIDQwKTsKKworCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCAxKTsKKworCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELAorCQkgICAgICAiSDJDIFR4IENtZCBDb250ZW50XG4iLCBwZGVzYywgdHhkZXNjX2xlbik7Cit9CisKKwordm9pZCBydGw5MmVlX3NldF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcGRlc2MsIGJvb2wgaXN0eCwKKwkJICAgICAgdTggZGVzY19uYW1lLCB1OCAqdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MTYgY3VyX3R4X3JwID0gMDsKKwl1MTYgY3VyX3R4X3dwID0gMDsKKwlzdGF0aWMgdTE2IGxhc3RfdHh3X3BvaW50OworCXN0YXRpYyBib29sIG92ZXJfcnVuOworCXUzMiB0bXAgPSAwOworCXU4IHFfaWR4ID0gKnZhbDsKKworCWlmIChpc3R4KSB7CisJCXN3aXRjaCAoZGVzY19uYW1lKSB7CisJCWNhc2UgSFdfREVTQ19UWF9ORVhUREVTQ19BRERSOgorCQkJU0VUX1RYX0RFU0NfTkVYVF9ERVNDX0FERFJFU1MocGRlc2MsICoodTMyICopdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfT1dOOnsKKwkJCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJCQlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1txX2lkeF07CisJCQl1MTYgbWF4X3R4X2Rlc2MgPSByaW5nLT5lbnRyaWVzOworCQkJaWYgKHFfaWR4ID09IEJFQUNPTl9RVUVVRSkgeworCQkJCXJpbmctPmN1cl90eF93cCA9IDA7CisJCQkJcmluZy0+Y3VyX3R4X3JwID0gMDsKKwkJCQlTRVRfVFhfQlVGRl9ERVNDX09XTihwZGVzYywgMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcmluZy0+Y3VyX3R4X3dwID0gKChyaW5nLT5jdXJfdHhfd3AgKyAxKSAlIG1heF90eF9kZXNjKTsKKworCQkJaWYgKG92ZXJfcnVuKSB7CisJCQkJcmluZy0+Y3VyX3R4X3dwID0gMDsKKwkJCQlvdmVyX3J1biA9IGZhbHNlOworCQkJfQorCQkJaWYgKHJpbmctPmF2bF9kZXNjID4gMSkgeworCQkJCXJpbmctPmF2bF9kZXNjLS07CisKKwkJCQlydGxfd3JpdGVfd29yZChydGxwcml2LAorCQkJCQkgICAgICAgZ2V0X2Rlc2NfYWRkcl9mcl9xKHFfaWR4KSwKKwkJCQkgICAgICAgcmluZy0+Y3VyX3R4X3dwKTsKKworCQkJCWlmIChxX2lkeCA9PSAxKQorCQkJCQlsYXN0X3R4d19wb2ludCA9IGN1cl90eF93cDsKKwkJCX0KKworCQkJaWYgKHJpbmctPmF2bF9kZXNjIDwgKG1heF90eF9kZXNjIC0gMTUpKSB7CisJCQkJdTE2IHBvaW50X2RpZmYgPSAwOworCQkJCXRtcCA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsCisJCQkJCQkgICAgIGdldF9kZXNjX2FkZHJfZnJfcShxX2lkeCkpOworCQkJCWN1cl90eF9ycCA9ICh1MTYpKCh0bXAgPj4gMTYpICYgMHgwZmZmKTsKKwkJCQljdXJfdHhfd3AgPSAodTE2KSh0bXAgJiAweDBmZmYpOworCisJCQkJcmluZy0+Y3VyX3R4X3dwID0gY3VyX3R4X3dwOworCQkJCXJpbmctPmN1cl90eF9ycCA9IGN1cl90eF9ycDsKKwkJCQlwb2ludF9kaWZmID0gKChjdXJfdHhfcnAgPiBjdXJfdHhfd3ApID8KKwkJCQkJICAgICAgKGN1cl90eF9ycCAtIGN1cl90eF93cCkgOgorCQkJCQkgICAgICAoVFhfREVTQ19OVU1fOTJFIC0gMSAtCisJCQkJCSAgICAgICBjdXJfdHhfd3AgKyBjdXJfdHhfcnApKTsKKworCQkJCXJpbmctPmF2bF9kZXNjID0gcG9pbnRfZGlmZjsKKwkJCX0KKwkJfQorCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZGVzY19uYW1lKSB7CisJCWNhc2UgSFdfREVTQ19SWF9QUkVQQVJFOgorCQkJU0VUX1JYX0JVRkZFUl9ERVNDX0xTKHBkZXNjICwgMCk7CisJCQlTRVRfUlhfQlVGRkVSX0RFU0NfRlMocGRlc2MgLCAwKTsKKwkJCVNFVF9SWF9CVUZGRVJfREVTQ19UT1RBTF9MRU5HVEgocGRlc2MgLCAwKTsKKworCQkJU0VUX1JYX0JVRkZFUl9ERVNDX0RBVEFfTEVOR1RIKHBkZXNjLAorCQkJCQkJICAgICAgIE1BWF9SRUNFSVZFX0JVRkZFUl9TSVpFICsKKwkJCQkJCSAgICAgICBSWF9ERVNDX1NJWkUpOworCisJCQlTRVRfUlhfQlVGRkVSX1BIWVNJQ0FMX0xPVyhwZGVzYywgKih1MzIgKil2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19SWEVSTzoKKwkJCVNFVF9SWF9ERVNDX0VPUihwZGVzYywgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX0FTU0VSVChmYWxzZSwKKwkJCQkgICgiRVJSIHJ4ZGVzYyA6JWQgbm90IHByb2Nlc3NcbiIsIGRlc2NfbmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3UzMiBydGw5MmVlX2dldF9kZXNjKHU4ICpwZGVzYywgYm9vbCBpc3R4LCB1OCBkZXNjX25hbWUpCit7CisJdTMyIHJldCA9IDA7CisKKwlpZiAoaXN0eCkgeworCQlzd2l0Y2ggKGRlc2NfbmFtZSkgeworCQljYXNlIEhXX0RFU0NfT1dOOgorCQkJcmV0ID0gR0VUX1RYX0RFU0NfT1dOKHBkZXNjKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfVFhCVUZGX0FERFI6CisJCQlyZXQgPSBHRVRfVFhCVUZGRVJfREVTQ19BRERSX0xPVyhwZGVzYywgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX0FTU0VSVChmYWxzZSwKKwkJCQkgICgiRVJSIHR4ZGVzYyA6JWQgbm90IHByb2Nlc3NcbiIsIGRlc2NfbmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGRlc2NfbmFtZSkgeworCQljYXNlIEhXX0RFU0NfT1dOOgorCQkJcmV0ID0gR0VUX1JYX0RFU0NfT1dOKHBkZXNjKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfUlhQS1RfTEVOOgorCQkJcmV0ID0gR0VUX1JYX0RFU0NfUEtUX0xFTihwZGVzYyk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1JYQlVGRl9BRERSOgorCQkJcmV0ID0gR0VUX1JYX0RFU0NfQlVGRl9BRERSKHBkZXNjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLAorCQkJCSAgKCJFUlIgcnhkZXNjIDolZCBub3QgcHJvY2Vzc1xuIiwgZGVzY19uYW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitib29sIHJ0bDkyZWVfaXNfdHhfZGVzY19jbG9zZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTE2IHJlYWRfcG9pbnQsIHdyaXRlX3BvaW50LCBhdmFpbGFibGVfZGVzY19udW07CisJYm9vbCByZXQgPSBmYWxzZTsKKwlzdGF0aWMgdTggc3RvcF9yZXBvcnRfY250OworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW2h3X3F1ZXVlXTsKKworCS8qY2hlY2tpbmcgUmVhZC9Xcml0ZSBQb2ludCBlYWNoIGludGVycnVwdCB3YXN0ZXMgQ1BVIHV0aWxpemF0aW9uLiovCisJaWYgKHN0b3BfcmVwb3J0X2NudCA+IDE1IHx8ICFydGxwcml2LT5saW5rX2luZm8uYl9idXN5dHJhZmZpYykgeworCQl1MTYgcG9pbnRfZGlmZiA9IDA7CisJCXUxNiBjdXJfdHhfcnAsIGN1cl90eF93cDsKKwkJdTMyIHRtcHUzMjsKKworCQl0bXB1MzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBnZXRfZGVzY19hZGRyX2ZyX3EoaHdfcXVldWUpKTsKKwkJY3VyX3R4X3JwID0gKHUxNikoKHRtcHUzMiA+PiAxNikgJiAweDBmZmYpOworCQljdXJfdHhfd3AgPSAodTE2KSh0bXB1MzIgJiAweDBmZmYpOworCisJCXJpbmctPmN1cl90eF93cCA9IGN1cl90eF93cDsKKwkJcmluZy0+Y3VyX3R4X3JwID0gY3VyX3R4X3JwOworCQlwb2ludF9kaWZmID0gKChjdXJfdHhfcnAgPiBjdXJfdHhfd3ApID8KKwkJCSAgICAgIChjdXJfdHhfcnAgLSBjdXJfdHhfd3ApIDoKKwkJCSAgICAgIChUWF9ERVNDX05VTV85MkUgLSBjdXJfdHhfd3AgKyBjdXJfdHhfcnApKTsKKworCQlyaW5nLT5hdmxfZGVzYyA9IHBvaW50X2RpZmY7CisJfQorCisJcmVhZF9wb2ludCA9IHJpbmctPmN1cl90eF9ycDsKKwl3cml0ZV9wb2ludCA9IHJpbmctPmN1cl90eF93cDsKKwlhdmFpbGFibGVfZGVzY19udW0gPSByaW5nLT5hdmxfZGVzYzsKKworCWlmICh3cml0ZV9wb2ludCA+IHJlYWRfcG9pbnQpIHsKKwkJaWYgKGluZGV4IDwgd3JpdGVfcG9pbnQgJiYgaW5kZXggPj0gcmVhZF9wb2ludCkKKwkJCXJldCA9IGZhbHNlOworCQllbHNlCisJCQlyZXQgPSB0cnVlOworCX0gZWxzZSBpZiAod3JpdGVfcG9pbnQgPCByZWFkX3BvaW50KSB7CisJCWlmIChpbmRleCA+IHdyaXRlX3BvaW50ICYmIGluZGV4IDwgcmVhZF9wb2ludCkKKwkJCXJldCA9IHRydWU7CisJCWVsc2UKKwkJCXJldCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWlmIChpbmRleCAhPSByZWFkX3BvaW50KQorCQkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlpZiAoaHdfcXVldWUgPT0gQkVBQ09OX1FVRVVFKQorCQlyZXQgPSB0cnVlOworCisJaWYgKHJ0bHByaXYtPnJ0bGhhbC5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgfHwKKwkgICAgcnRscHJpdi0+cHNjLnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykKKwkJcmV0ID0gdHJ1ZTsKKworCWlmIChod19xdWV1ZSA8IEJFQUNPTl9RVUVVRSkgeworCQlpZiAoIXJldCkKKwkJCXN0b3BfcmVwb3J0X2NudCsrOworCQllbHNlCisJCQlzdG9wX3JlcG9ydF9jbnQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3UzMiBydGw5MmVlX3J4X2NvbW1hbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IHJ0bF9zdGF0cyBzdGF0dXMsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXUzMiByZXN1bHQgPSAwOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXN3aXRjaCAoc3RhdHVzLnBhY2tldF9yZXBvcnRfdHlwZSkgeworCWNhc2UgTk9STUFMX1JYOgorCQlyZXN1bHQgPSAwOworCQlicmVhazsKKwljYXNlIEMySF9QQUNLRVQ6CisJCXJ0bDkyZWVfYzJoX3BhY2tldF9oYW5kbGVyKGh3LCBza2ItPmRhdGEsICh1OCkgc2tiLT5sZW4pOworCQlyZXN1bHQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShDT01QX1JFQ1YsIERCR19UUkFDRSwgKCJObyB0aGlzIHBhY2tldCB0eXBlISFcbiIpKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3RyeC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9ydGw4MTkyZWUvdHJ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjZDU4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvcnRsODE5MmVlL3RyeC5oCkBAIC0wLDAgKzEsODc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyRV9UUlhfSF9fCisjZGVmaW5lIF9fUlRMOTJFX1RSWF9IX18KKworCisKKyNpZiAoRE1BX0lTXzY0QklUID09IDEpCisjaWYgKFJUTDgxOTJFRV9TRUdfTlVNID09IDIpCisjZGVmaW5lIFRYX0JEX0RFU0NfU0laRQkJCQkJMTI4CisjZWxpZiAoUlRMODE5MkVFX1NFR19OVU0gPT0gMSkKKyNkZWZpbmUgVFhfQkRfREVTQ19TSVpFCQkJCQk2NAorI2VsaWYgKFJUTDgxOTJFRV9TRUdfTlVNID09IDApCisjZGVmaW5lIFRYX0JEX0RFU0NfU0laRQkJCQkJMzIKKyNlbmRpZgorI2Vsc2UKKyNpZiAoUlRMODE5MkVFX1NFR19OVU0gPT0gMikKKyNkZWZpbmUgVFhfQkRfREVTQ19TSVpFCQkJCQk2NAorI2VsaWYgKFJUTDgxOTJFRV9TRUdfTlVNID09IDEpCisjZGVmaW5lIFRYX0JEX0RFU0NfU0laRQkJCQkJMzIKKyNlbGlmIChSVEw4MTkyRUVfU0VHX05VTSA9PSAwKQorI2RlZmluZSBUWF9CRF9ERVNDX1NJWkUJCQkJCTE2CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFRYX0RFU0NfU0laRQkJCQkJNjQKKworI2RlZmluZSBSWF9EUlZfSU5GT19TSVpFX1VOSVQJCQkJOAorCisjZGVmaW5lCVRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVAkJCTQwCisjZGVmaW5lIFVTQl9IV0RFU0NfSEVBREVSX0xFTgkJCQk0MAorCisjZGVmaW5lIFJYX0RFU0NfU0laRQkJCQkJMjQKKyNkZWZpbmUgTUFYX1JFQ0VJVkVfQlVGRkVSX1NJWkUJCQkJODE5MgorCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BLVF9TSVpFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfT0ZGU0VUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDE2LCA4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQk1DKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAyNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0hUQyhfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMjUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19MQVNUX1NFRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAyNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0ZJUlNUX1NFRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAyNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xJTklQKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDI4LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTk9fQUNNKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfR0YoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDMwLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfT1dOKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAzMSwgMSwgX192YWwpCisKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUEtUX1NJWkUoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAwLCAxNikKKyNkZWZpbmUgR0VUX1RYX0RFU0NfT0ZGU0VUKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMTYsIDgpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0JNQyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI0LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19IVEMoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAyNSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTEFTVF9TRUcoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAyNiwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfRklSU1RfU0VHKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjcsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0xJTklQKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjgsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX05PX0FDTShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI5LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19HRihfX3BkZXNjKQkJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAzMCwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfT1dOKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMzEsIDEpCisKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTUFDSUQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCAwLCA3LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUVVFVUVfU0VMKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgOCwgNSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JER19OQVZfRVhUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMTMsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19MU0lHX1RYT1BfRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDE0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUElGUyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDE1LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUkFURV9JRChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDE2LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfRU5fREVTQ19JRChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDIxLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfU0VDX1RZUEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCAyMiwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BLVF9PRkZTRVQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCAyNCwgNSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01PUkVfREFUQShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhPUF9QU19DQVAoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYT1BfUFNfTU9ERShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMzEsIDEsIF9fdmFsKQorCisKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTUFDSUQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDAsIDUpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0FHR19FTkFCTEUoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDUsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0FHR19CUkVBSyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgNiwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUkRHX0VOQUJMRShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgNywgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUVVFVUVfU0VMKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCA4LCA1KQorI2RlZmluZSBHRVRfVFhfREVTQ19SREdfTkFWX0VYVChfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAxMywgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTFNJR19UWE9QX0VOKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDE0LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19QSUZTKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAxNSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUkFURV9JRChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMTYsIDQpCisjZGVmaW5lIEdFVF9UWF9ERVNDX05BVl9VU0VfSERSKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDIwLCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19FTl9ERVNDX0lEKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyMSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfU0VDX1RZUEUoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDIyLCAyKQorI2RlZmluZSBHRVRfVFhfREVTQ19QS1RfT0ZGU0VUKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyNCwgNSkKKworI2RlZmluZSBTRVRfVFhfREVTQ19QQUlEKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMCwgOSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0NDQV9SVFMoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAxMCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0FHR19FTkFCTEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAxMiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JER19FTkFCTEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAxMywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX05VTExfMChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTlVMTF8xKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMTUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19CSyhfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAxNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01PUkVfRlJBRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUkFXKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE4LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfU1BFX1JQVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQU1QRFVfREVOU0lUWShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMjAsIDMsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19CVF9OVUxMKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMjMsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19HSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMjQsIDYsIF9fdmFsKQorCisjZGVmaW5lIFNFVF9UWF9ERVNDX1dIRUFERVJfTEVOKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTIsIDAsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19DSEtfRU4oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0VBUkxZX1JBVEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0hXU0VRX1NFTChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCA2LCAyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVVNFX1JBVEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgOCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RJU0FCTEVfUlRTX0ZCKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgOSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RJU0FCTEVfRkIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMTAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19DVFMyU0VMRihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCAxMSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19FTkFCTEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMTIsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19IV19SVFNfRU5BQkxFKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMTMsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19IV19QT1JUX0lEKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTIsIDE0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTkFWX1VTRV9IRFIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMTUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19VU0VfTUFYX0xFTihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCAxNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01BWF9BR0dfTlVNKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTIsIDE3LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTkRQQShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCAyMiwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0FNUERVX01BWF9USU1FKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMjQsIDgsIF9fdmFsKQorCisKKy8qIER3b3JkIDQgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfUkFURShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAwLCA3LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFJZX1JBVEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfUkFURV9GQl9MSU1JVChfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDgsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfUkFURV9GQl9MSU1JVChfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDEzLCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUkVUUllfTElNSVRfRU5BQkxFKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMTcsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1JFVFJZX0xJTUlUKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMTgsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfUkFURShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAyNCwgNSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BDVFNfRU5BQkxFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUENUU19NQVNLX0lEWChfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDMwLCAyLCBfX3ZhbCkKKworCisvKiBEd29yZCA1ICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgMCwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfU0hPUlQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfQlcoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgNSwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfTERQQyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCA3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfREFUQV9TVEJDKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjAsIDgsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19WQ1NfU1RCQyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCAxMCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19TSE9SVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCAxMiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19TQyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCAxMywgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0FOVChfX3BkZXNjICwgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgMjQsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9QT1dFUl8wX1BTRVQoX19wZGVzYyAsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgMjgsIDMsIF9fdmFsKQorCisvKiBEd29yZCA2ICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX1NXX0RFRklORShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAwLCAxMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0FOVFNFTF9BKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjQsIDE2LCAzLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQU5UU0VMX0IoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyNCwgMTksIDMsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19BTlRTRUxfQyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAyMiwgMywgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0FOVFNFTF9EKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjQsIDI1LCAzLCBfX3ZhbCkKKworLyogRHdvcmQgNyAqLworI2RlZmluZSBTRVRfVFhfREVTQ19UWF9CVUZGRVJfU0laRShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjgsIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVVNCX1RYQUdHX05VTShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjgsIDI0LCA4LCBfX3ZhbCkKKworLyogRHdvcmQgOCAqLworI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfUkMoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszMiAsIDAgLCA2ICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0JBUl9SVFlfVEgoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszMiAsIDYgLCAyICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfUkMoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszMiAsIDggLCA2ICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0VOQUJMRV9IV19TRUxFQ1QoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzMyICwgMTUgLCAxICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX05FWFRfSEVBRF9QQUdFKF9fcGRlc2MgLCBfX3ZhbCkoX19wZGVzYywgX192YWwpIFwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzMyICwgMTYgLCA4ICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RBSUxfUEFHRShfX3BkZXNjICwgX192YWwpKF9fcGRlc2MsIF9fdmFsKVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzMyICwgMjQgLCA4ICwgX192YWwpCisKKy8qIER3b3JkIDkgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfUEFERElOR19MRU5HVEgoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzM2ICwgMCAsIDExICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYQkZfUEFUSChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzM2ICwgMTEgLCAxICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1NFUShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszNiAsIDEyICwgMTIgLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfRklOQUxfREFUQV9SQVRFKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszNiAsIDI0ICwgOCAsIF9fdmFsKQorCisvKiBEd29yZCAxMCAqLworI2RlZmluZSBTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNDAgLCAwICwgMzIgLCBfX3ZhbCkKKworCisvKiBEd29yZCAxMSovCisjZGVmaW5lIFNFVF9UWF9ERVNDX05FWFRfREVTQ19BRERSRVNTKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0OCAsIDAgLCAzMiAsIF9fdmFsKQorCisKKyNkZWZpbmUgU0VUX0VBUkxZTU9ERV9QS1ROVU0oX19wYWRkciAsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGFkZHIgLCAwICwgNCAsIF9fdmFsKQorI2RlZmluZSBTRVRfRUFSTFlNT0RFX0xFTjAoX19wYWRkciAsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGFkZHIgLCA0ICwgMTUgLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0VBUkxZTU9ERV9MRU4xKF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyICwgMTYgLCAyICwgX192YWwpCisjZGVmaW5lIFNFVF9FQVJMWU1PREVfTEVOMV8xKF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyICwgMTkgLCAxMyAsIF9fdmFsKQorI2RlZmluZSBTRVRfRUFSTFlNT0RFX0xFTjFfMihfX3BhZGRyICwgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wYWRkcis0ICwgMCAsIDIgLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0VBUkxZTU9ERV9MRU4yKF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyKzQgLCAyICwgMTUgLCAgX192YWwpCisjZGVmaW5lIFNFVF9FQVJMWU1PREVfTEVOMl8xKF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyICwgMiAsIDQgLCAgX192YWwpCisjZGVmaW5lIFNFVF9FQVJMWU1PREVfTEVOMl8yKF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyKzQgLCAwICwgOCAsICBfX3ZhbCkKKyNkZWZpbmUgU0VUX0VBUkxZTU9ERV9MRU4zKF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyKzQgLCAxNyAsIDE1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0VBUkxZTU9ERV9MRU40KF9fcGFkZHIgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BhZGRyKzQgLCAyMCAsIDEyICwgX192YWwpCisKKworLyogVFgvUlggYnVmZmVyIGRlc2NyaXB0b3IgKi8KKworI2RlZmluZSBTRVRfVFhfRVhUQlVGRl9ERVNDX0xFTihfX3BkZXNjLCBfX3ZhbCwgX19zZXQpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKyhfX3NldCoxNikgLCAwICwgMTYgLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0VYVEJVRkZfREVTQ19BRERSX0xPVyhfX3BkZXNjLCBfX3ZhbCwgX19zZXQpXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrKF9fc2V0KjE2KSs0ICwgMCAsIDMyICwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9FWFRCVUZGX0RFU0NfQUREUl9ISUdIKF9fcGRlc2MsIF9fdmFsICwgX19zZXQpXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrKF9fc2V0KjE2KSs4ICwgMCAsIDMyICwgX192YWwpCisKKworCisvKiBmb3IgVHhmaWxsZGVzY3JvcHRvcjkyZWUsIGZpbGwgdGhlIGRlc2MgY29udGVudC4gKi8KKyNpZiAoRE1BX0lTXzY0QklUID09IDEpCisjZGVmaW5lIFNFVF9UWEJVRkZFUl9ERVNDX0xFTl9XSVRIX09GRlNFVChfX3BkZXNjLCBfX29mZnNldCwgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKyhfX29mZnNldCoxNiksIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYQlVGRkVSX0RFU0NfQU1TRFVfV0lUSF9PRkZTRVQoX19wZGVzYywgX19vZmZzZXQsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysoX19vZmZzZXQqMTYpLCAzMSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWEJVRkZFUl9ERVNDX0FERF9MT1dfV0lUSF9PRkZTRVQoX19wZGVzYywgX19vZmZzZXQsIF9fdmFsKSBcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysoX19vZmZzZXQqMTYpKzQsIDAsIDMyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYQlVGRkVSX0RFU0NfQUREX0hJR1RfV0lUSF9PRkZTRVQoX19wZGVzYywgX19vZmZzZXQsIF9fdmFsKVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKyhfX29mZnNldCoxNikrOCwgMCwgMzIsIF9fdmFsKQorI2RlZmluZSBHRVRfVFhCVUZGRVJfREVTQ19BRERSX0xPVyhfX3BkZXNjLCBfX29mZnNldCkJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKyhfX29mZnNldCoxNikrNCwgMCwgMzIpCisjZWxzZQorI2RlZmluZSBTRVRfVFhCVUZGRVJfREVTQ19MRU5fV0lUSF9PRkZTRVQoX19wZGVzYywgX19vZmZzZXQsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysoX19vZmZzZXQqOCksIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYQlVGRkVSX0RFU0NfQU1TRFVfV0lUSF9PRkZTRVQoX19wZGVzYywgX19vZmZzZXQsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysoX19vZmZzZXQqOCksIDMxLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYQlVGRkVSX0RFU0NfQUREX0xPV19XSVRIX09GRlNFVChfX3BkZXNjLCBfX29mZnNldCwgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKyhfX29mZnNldCo4KSs0LCAwLCAzMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWEJVRkZFUl9ERVNDX0FERF9ISUdUX1dJVEhfT0ZGU0VUKF9fcGRlc2MsIF9fb2Zmc2V0LCBfX3ZhbCkKKyNkZWZpbmUgR0VUX1RYQlVGRkVSX0RFU0NfQUREUl9MT1coX19wZGVzYywgX19vZmZzZXQpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysoX19vZmZzZXQqOCkrNCwgMCwgMzIpCisjZW5kaWYKKworLyogRHdvcmQgMCAqLworI2RlZmluZSBTRVRfVFhfQlVGRl9ERVNDX0xFTl8wKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDAsIDE0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19QU0IoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMTYsIDE1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19PV04oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMzEsIDEsIF9fdmFsKQorCisvKiBEd29yZCAxICovCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQUREUl9MT1dfMChfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMCwgMzIsIF9fdmFsKQorI2lmIChETUFfSVNfNjRCSVQgPT0gMSkKKy8qIER3b3JkIDIgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19BRERSX0hJR0hfMChfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMCwgMzIsIF9fdmFsKQorLyogRHdvcmQgMyAvIFJFU0VSVkVEIDAgKi8KKy8qIER3b3JkIDQgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19MRU5fMShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAwLCAxNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQU1TRFVfMShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDMxLCAxLCBfX3ZhbCkKKy8qIER3b3JkIDUgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19BRERSX0xPV18xKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgMCwgMzIsIF9fdmFsKQorLyogRHdvcmQgNiAqLworI2RlZmluZSBTRVRfVFhfQlVGRl9ERVNDX0FERFJfSElHSF8xKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyNCwgMCwgMzIsIF9fdmFsKQorLyogRHdvcmQgNyAvIFJFU0VSVkVEIDAgKi8KKy8qIER3b3JkIDggKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19MRU5fMihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzMyLCAwLCAxNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQU1TRFVfMihfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMzIsIDMxLCAxLCBfX3ZhbCkKKy8qIER3b3JkIDkgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19BRERSX0xPV18yKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszNiwgMCwgMzIsIF9fdmFsKQorLyogRHdvcmQgMTAgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19BRERSX0hJR0hfMihfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNDAsIDAsIDMyLCBfX3ZhbCkKKy8qIER3b3JkIDExIC8gUkVTRVJWRUQgMCAqLworLyogRHdvcmQgMTIgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19MRU5fMyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQ4LCAwLCAxNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQU1TRFVfMyhfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNDgsIDMxLCAxLCBfX3ZhbCkKKy8qIER3b3JkIDEzICovCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQUREUl9MT1dfMyhfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNTIsIDAsIDMyLCBfX3ZhbCkKKy8qIER3b3JkIDE0ICovCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQUREUl9ISUdIXzMoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzU2LCAwLCAzMiwgX192YWwpCisvKiBEd29yZCAxNSAvIFJFU0VSVkVEIDAgKi8KKyNlbHNlCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQUREUl9ISUdIXzAoX19wZGVzYywgX192YWwpCisvKiBEd29yZCAyICovCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfTEVOXzEoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAwLCAxNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQU1TRFVfMShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMzEsIDEsIF9fdmFsKQorLyogRHdvcmQgMyAqLworI2RlZmluZSBTRVRfVFhfQlVGRl9ERVNDX0FERFJfTE9XXzEoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCAwLCAzMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQUREUl9ISUdIXzEoX19wZGVzYywgX192YWwpCisvKiBEd29yZCA0ICovCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfTEVOXzIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMCwgMTYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfQlVGRl9ERVNDX0FNU0RVXzIoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAzMSwgMSwgX192YWwpCisvKiBEd29yZCA1ICovCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQUREUl9MT1dfMihfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjAsIDAsIDMyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19BRERSX0hJR0hfMihfX3BkZXNjLCBfX3ZhbCkKKy8qIER3b3JkIDYgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19MRU5fMyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAwLCAxNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9CVUZGX0RFU0NfQU1TRFVfMyhfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjQsIDMxLCAxLCBfX3ZhbCkKKy8qIER3b3JkIDcgKi8KKyNkZWZpbmUgU0VUX1RYX0JVRkZfREVTQ19BRERSX0xPV18zKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyOCwgMCwgMzIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfQlVGRl9ERVNDX0FERFJfSElHSF8zKF9fcGRlc2MsIF9fdmFsKQorI2VuZGlmCisKKy8qIFJYIGJ1ZmZlciAgKi8KKworLyogRFdPUkQgMCAqLworI2RlZmluZSBTRVRfUlhfQlVGRkVSX0RFU0NfREFUQV9MRU5HVEgoX19wUnhTdGF0dXNEZXNjICwgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BSeFN0YXR1c0Rlc2MgLCAwLCAxNCwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9CVUZGRVJfREVTQ19MUyhfX3BSeFN0YXR1c0Rlc2MgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BSeFN0YXR1c0Rlc2MgLCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9CVUZGRVJfREVTQ19GUyhfX3BSeFN0YXR1c0Rlc2MgLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BSeFN0YXR1c0Rlc2MgLCAxNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9CVUZGRVJfREVTQ19UT1RBTF9MRU5HVEgoX19wUnhTdGF0dXNEZXNjICwgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BSeFN0YXR1c0Rlc2MgLCAxNiwgMTUsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9SWF9CVUZGRVJfREVTQ19PV04oX19wUnhTdGF0dXNEZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcFJ4U3RhdHVzRGVzYyAsIDMxLCAxKQorI2RlZmluZSBHRVRfUlhfQlVGRkVSX0RFU0NfTFMoX19wUnhTdGF0dXNEZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcFJ4U3RhdHVzRGVzYyAsIDE1LCAxKQorI2RlZmluZSBHRVRfUlhfQlVGRkVSX0RFU0NfRlMoX19wUnhTdGF0dXNEZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcFJ4U3RhdHVzRGVzYyAsIDE2LCAxKQorI2RlZmluZSBHRVRfUlhfQlVGRkVSX0RFU0NfVE9UQUxfTEVOR1RIKF9fcFJ4U3RhdHVzRGVzYykJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wUnhTdGF0dXNEZXNjICwgMTYsIDE1KQorCisKKy8qIERXT1JEIDEgKi8KKyNkZWZpbmUgU0VUX1JYX0JVRkZFUl9QSFlTSUNBTF9MT1coX19wUnhTdGF0dXNEZXNjICwgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BSeFN0YXR1c0Rlc2MrNCwgMCwgMzIsIF9fdmFsKQorCisvKiBEV09SRCAyICovCisjZGVmaW5lIFNFVF9SWF9CVUZGRVJfUEhZU0lDQUxfSElHSChfX3BSeFN0YXR1c0Rlc2MgLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcFJ4U3RhdHVzRGVzYys4LCAwLCAzMiwgX192YWwpCisKKyNkZWZpbmUgR0VUX1JYX0RFU0NfUEtUX0xFTihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDAsIDE0KQorI2RlZmluZSBHRVRfUlhfREVTQ19DUkMzMihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDE0LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19JQ1YoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfRFJWX0lORk9fU0laRShfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMTYsIDQpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1NFQ1VSSVRZKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjAsIDMpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1FPUyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDIzLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19TSElGVChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI0LCAyKQorI2RlZmluZSBHRVRfUlhfREVTQ19QSFlTVChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI2LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19TV0RFQyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI3LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19MUyhfX3BkZXNjKQkJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAyOCwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfRlMoX19wZGVzYykJCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjksIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0VPUihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDMwLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19PV04oX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAzMSwgMSkKKworI2RlZmluZSBTRVRfUlhfREVTQ19QS1RfTEVOKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDAsIDE0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX0RFU0NfRU9SKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9ERVNDX09XTihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMzEsIDEsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9SWF9ERVNDX01BQ0lEKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAwLCA3KQorI2RlZmluZSBHRVRfUlhfREVTQ19USUQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDgsIDQpCisjZGVmaW5lIEdFVF9SWF9ERVNDX01BQ0lEX1ZMRChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMTIsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0FNU0RVKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAxMywgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfUlhJRF9NQVRDSChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMTQsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1BBR0dSKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfQTFfRklUKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAxNiwgNCkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfVENQT0ZGTE9BRF9DSEtFUlIoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjAsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1RDUE9GRkxPQURfSVBWRVIoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjEsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1RDUE9GRkxPQURfSVNfVENQVURQKF9fcGRlc2MpCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjIsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1RDUE9GRkxPQURfQ0hLX1ZMRChfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyMywgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfUEFNKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyNCwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfUFdSKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyNSwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfTUQoX19wZGVzYykJCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyNiwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfTUYoX19wZGVzYykJCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAyNywgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfVFlQRShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjgsIDIpCisjZGVmaW5lIEdFVF9SWF9ERVNDX01DKF9fcGRlc2MpCQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMzAsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0JDKF9fcGRlc2MpCQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMzEsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1NFUShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrOCwgMCwgMTIpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0ZSQUcoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDEyLCA0KQorI2RlZmluZSBHRVRfUlhfREVTQ19SWF9JU19RT1MoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDE2LCAxKQorCisjZGVmaW5lIEdFVF9SWF9ERVNDX1JYTUNTKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxMiwgMCwgNykKKyNkZWZpbmUgR0VUX1JYX0RFU0NfSFRDKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxMiwgMTAsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19FT1NQKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAxMSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0JTU0lEX0ZJVChfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxMiwgMTIsIDIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19ETUFfQUdHX05VTShfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxMiwgMTYsIDgpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19QQVRURVJOX01BVENIKF9fcGRlc2MpCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDI5LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVU5JQ0FTVF9NQVRDSChfX3BkZXNjKQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAzMCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX01BR0lDX01BVENIKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAzMSwgMSkKKworCisjZGVmaW5lIEdFVF9SWF9ERVNDX1RTRkwoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzIwLCAwLCAzMikKKworI2RlZmluZSBHRVRfUlhfREVTQ19CVUZGX0FERFIoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI0LCAwLCAzMikKKyNkZWZpbmUgR0VUX1JYX0RFU0NfQlVGRl9BRERSNjQoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjgsIDAsIDMyKQorCisjZGVmaW5lIFNFVF9SWF9ERVNDX0JVRkZfQUREUihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAwLCAzMiwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9ERVNDX0JVRkZfQUREUjY0KF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjgsIDAsIDMyLCBfX3ZhbCkKKworCisvKiBUWCByZXBvcnQgMiBmb3JtYXQgaW4gUnggZGVzYyovCisKKyNkZWZpbmUgR0VUX1JYX1JQVDJfREVTQ19QS1RfTEVOKF9fcFJ4U3RhdHVzRGVzYykJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wUnhTdGF0dXNEZXNjICwgMCwgOSkKKyNkZWZpbmUgR0VUX1JYX1JQVDJfREVTQ19NQUNJRF9WQUxJRF8xKF9fcFJ4U3RhdHVzRGVzYykJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wUnhTdGF0dXNEZXNjKzE2LCAwLCAzMikKKyNkZWZpbmUgR0VUX1JYX1JQVDJfREVTQ19NQUNJRF9WQUxJRF8yKF9fcFJ4U3RhdHVzRGVzYykJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wUnhTdGF0dXNEZXNjKzIwLCAwLCAzMikKKworCisjZGVmaW5lIENMRUFSX1BDSV9UWF9ERVNDX0NPTlRFTlQoX19wZGVzYywgX3NpemUpCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKF9zaXplID4gVFhfREVTQ19ORVhUX0RFU0NfT0ZGU0VUKQkJCVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKKwllbHNlCQkJCQkJCVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIF9zaXplKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFJYX0hBTF9JU19DQ0tfUkFURShyeG1jcylcCisJKHJ4bWNzID09IERFU0M5MkNfUkFURTFNIHx8XAorCSByeG1jcyA9PSBERVNDOTJDX1JBVEUyTSB8fFwKKwkgcnhtY3MgPT0gREVTQzkyQ19SQVRFNV81TSB8fFwKKwkgcnhtY3MgPT0gREVTQzkyQ19SQVRFMTFNKQorCisjZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4JMQorCitzdHJ1Y3QgcGh5X3J4X2FnY19pbmZvX3QgeworCSNpZiBJU19MSVRUTEVfRU5ESUFOCisJCXU4IGdhaW46NyAsIHRyc3c6MTsKKwkjZWxzZQorCQl1OCB0cnN3OjEgLCBnYWluOjc7CisJI2VuZGlmCit9Oworc3RydWN0IHBoeV9zdGF0dXNfcnB0IHsKKwlzdHJ1Y3QgcGh5X3J4X2FnY19pbmZvX3QgcGF0aF9hZ2NbMl07CisJdTggY2hfY29yclsyXTsKKwl1OCBjY2tfc2lnX3F1YWxfb2ZkbV9wd2RiX2FsbDsKKwl1OCBjY2tfYWdjX3JwdF9vZmRtX2Nmb3Nob19hOworCXU4IGNja19ycHRfYl9vZmRtX2Nmb3Nob19iOworCXU4IHJzdmRfMTsKKwl1OCBub2lzZV9wb3dlcl9kYl9tc2I7CisJdTggcGF0aF9jZm90YWlsWzJdOworCXU4IHBjdHNfbWFza1syXTsKKwl1OCBzdHJlYW1fcnhldm1bMl07CisJdTggcGF0aF9yeHNuclsyXTsKKwl1OCBub2lzZV9wb3dlcl9kYl9sc2I7CisJdTggcnN2ZF8yWzNdOworCXU4IHN0cmVhbV9jc2lbMl07CisJdTggc3RyZWFtX3RhcmdldF9jc2lbMl07CisJdTggc2lnX2V2bTsKKwl1OCByc3ZkXzM7CisjaWYgSVNfTElUVExFX0VORElBTgorCXU4IGFudHNlbF9yeF9rZWVwXzI6MTsJLypleF9pbnRmX2ZsZzoxOyovCisJdTggc2dpX2VuOjE7CisJdTggcnhzYzoyOworCXU4IGlkbGVfbG9uZzoxOworCXU4IHJfYW50X3RyYWluX2VuOjE7CisJdTggYW50X3NlbF9iOjE7CisJdTggYW50X3NlbDoxOworI2Vsc2UJLyogX0JJR19FTkRJQU5fCSovCisJdTggYW50X3NlbDoxOworCXU4IGFudF9zZWxfYjoxOworCXU4IHJfYW50X3RyYWluX2VuOjE7CisJdTggaWRsZV9sb25nOjE7CisJdTggcnhzYzoyOworCXU4IHNnaV9lbjoxOworCXU4IGFudHNlbF9yeF9rZWVwXzI6MTsJLypleF9pbnRmX2ZsZzoxOyovCisjZW5kaWYKK30gX19wYWNrZWQ7CisKK3N0cnVjdCByeF9md2luZm8geworCXU4IGdhaW5fdHJzd1s0XTsKKwl1OCBwd2RiX2FsbDsKKwl1OCBjZm9zaG9bNF07CisJdTggY2ZvdGFpbFs0XTsKKwljaGFyIHJ4ZXZtWzJdOworCWNoYXIgcnhzbnJbNF07CisJdTggcGRzbnJbMl07CisJdTggY3NpX2N1cnJlbnRbMl07CisJdTggY3NpX3RhcmdldFsyXTsKKwl1OCBzaWdldm07CisJdTggbWF4X2V4X3B3cjsKKwl1OCBleF9pbnRmX2ZsYWc6MTsKKwl1OCBzZ2lfZW46MTsKKwl1OCByeHNjOjI7CisJdTggcmVzZXJ2ZTo0OworfSBfX3BhY2tlZDsKKworc3RydWN0IHR4X2Rlc2MgeworCXUzMiBwa3RzaXplOjE2OworCXUzMiBvZmZzZXQ6ODsKKwl1MzIgYm1jOjE7CisJdTMyIGh0YzoxOworCXUzMiBsYXN0c2VnOjE7CisJdTMyIGZpcnN0c2VnOjE7CisJdTMyIGxpbmlwOjE7CisJdTMyIG5vYWNtOjE7CisJdTMyIGdmOjE7CisJdTMyIG93bjoxOworCisJdTMyIG1hY2lkOjY7CisJdTMyIHJzdmQwOjI7CisJdTMyIHF1ZXVlc2VsOjU7CisJdTMyIHJkX25hdl9leHQ6MTsKKwl1MzIgbHNpZ190eG9wX2VuOjE7CisJdTMyIHBpZnM6MTsKKwl1MzIgcmF0ZWlkOjQ7CisJdTMyIG5hdl91c2VoZHI6MTsKKwl1MzIgZW5fZGVzY2lkOjE7CisJdTMyIHNlY3R5cGU6MjsKKwl1MzIgcGt0b2Zmc2V0Ojg7CisKKwl1MzIgcnRzX3JjOjY7CisJdTMyIGRhdGFfcmM6NjsKKwl1MzIgYWdnX2VuOjE7CisJdTMyIHJkZ19lbjoxOworCXUzMiBiYXJfcmV0cnlodDoyOworCXUzMiBhZ2dfYnJlYWs6MTsKKwl1MzIgbW9yZWZyYWc6MTsKKwl1MzIgcmF3OjE7CisJdTMyIGNjeDoxOworCXUzMiBhbXBkdWRlbnNpdHk6MzsKKwl1MzIgYnRfaW50OjE7CisJdTMyIGFudF9zZWxhOjE7CisJdTMyIGFudF9zZWxiOjE7CisJdTMyIHR4YW50X2NjazoyOworCXUzMiB0eGFudF9sOjI7CisJdTMyIHR4YW50X2h0OjI7CisKKwl1MzIgbmV4dGhlYWRwYWdlOjg7CisJdTMyIHRhaWxwYWdlOjg7CisJdTMyIHNlcToxMjsKKwl1MzIgY3B1X2hhbmRsZToxOworCXUzMiB0YWcxOjE7CisJdTMyIHRyaWdnZXJfaW50OjE7CisJdTMyIGh3c2VxX2VuOjE7CisKKwl1MzIgcnRzcmF0ZTo1OworCXUzMiBhcGRjZmU6MTsKKwl1MzIgcW9zOjE7CisJdTMyIGh3c2VxX3NzbjoxOworCXUzMiB1c2VycmF0ZToxOworCXUzMiBkaXNfcnRzZmI6MTsKKwl1MzIgZGlzX2RhdGFmYjoxOworCXUzMiBjdHMyc2VsZjoxOworCXUzMiBydHNfZW46MTsKKwl1MzIgaHdydHNfZW46MTsKKwl1MzIgcG9ydGlkOjE7CisJdTMyIHB3cl9zdGF0dXM6MzsKKwl1MzIgd2FpdGRjdHM6MTsKKwl1MzIgY3RzMmFwX2VuOjE7CisJdTMyIHR4c2M6MjsKKwl1MzIgc3RiYzoyOworCXUzMiB0eHNob3J0OjE7CisJdTMyIHR4Ync6MTsKKwl1MzIgcnRzc2hvcnQ6MTsKKwl1MzIgcnRzYnc6MTsKKwl1MzIgcnRzc2M6MjsKKwl1MzIgcnRzc3RiYzoyOworCisJdTMyIHR4cmF0ZTo2OworCXUzMiBzaG9ydGdpOjE7CisJdTMyIGNjeHQ6MTsKKwl1MzIgdHhyYXRlX2ZiX2xtdDo1OworCXUzMiBydHNyYXRlX2ZiX2xtdDo0OworCXUzMiByZXRyeWxtdF9lbjoxOworCXUzMiB0eHJldHJ5bG10OjY7CisJdTMyIHVzYl90eGFnZ251bTo4OworCisJdTMyIHR4YWdjYTo1OworCXUzMiB0eGFnY2I6NTsKKwl1MzIgdXNlbWF4bGVuOjE7CisJdTMyIG1heGFnZ251bTo1OworCXUzMiBtY3NnMW1heGxlbjo0OworCXUzMiBtY3NnMm1heGxlbjo0OworCXUzMiBtY3NnM21heGxlbjo0OworCXUzMiBtY3M3c2dpbWF4bGVuOjQ7CisKKwl1MzIgdHhidWZmZXJzaXplOjE2OworCXUzMiBzd19vZmZzZXQzMDo4OworCXUzMiBzd19vZmZzZXQzMTo0OworCXUzMiByc3ZkMToxOworCXUzMiBhbnRzZWxfYzoxOworCXUzMiBudWxsXzA6MTsKKwl1MzIgbnVsbF8xOjE7CisKKwl1MzIgdHhidWZmYWRkcjsKKwl1MzIgdHhidWZmZXJhZGRyNjQ7CisJdTMyIG5leHRkZXNjYWRkcmVzczsKKwl1MzIgbmV4dGRlc2NhZGRyZXNzNjQ7CisKKwl1MzIgcmVzZXJ2ZV9wYXNzX3BjaWVfbW1fbGltaXRbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnhfZGVzYyB7CisJdTMyIGxlbmd0aDoxNDsKKwl1MzIgY3JjMzI6MTsKKwl1MzIgaWN2ZXJyb3I6MTsKKwl1MzIgZHJ2X2luZm9zaXplOjQ7CisJdTMyIHNlY3VyaXR5OjM7CisJdTMyIHFvczoxOworCXUzMiBzaGlmdDoyOworCXUzMiBwaHlzdGF0dXM6MTsKKwl1MzIgc3dkZWM6MTsKKwl1MzIgbGFzdHNlZzoxOworCXUzMiBmaXJzdHNlZzoxOworCXUzMiBlb3I6MTsKKwl1MzIgb3duOjE7CisKKwl1MzIgbWFjaWQ6NjsKKwl1MzIgdGlkOjQ7CisJdTMyIGh3cnN2ZDo1OworCXUzMiBwYWdncjoxOworCXUzMiBmYWdncjoxOworCXUzMiBhMV9maXQ6NDsKKwl1MzIgYTJfZml0OjQ7CisJdTMyIHBhbToxOworCXUzMiBwd3I6MTsKKwl1MzIgbW9yZWRhdGE6MTsKKwl1MzIgbW9yZWZyYWc6MTsKKwl1MzIgdHlwZToyOworCXUzMiBtYzoxOworCXUzMiBiYzoxOworCisJdTMyIHNlcToxMjsKKwl1MzIgZnJhZzo0OworCXUzMiBuZXh0cGt0bGVuOjE0OworCXUzMiBuZXh0aW5kOjE7CisJdTMyIHJzdmQ6MTsKKworCXUzMiByeG1jczo2OworCXUzMiByeGh0OjE7CisJdTMyIGFtc2R1OjE7CisJdTMyIHNwbGNwOjE7CisJdTMyIGJhbmR3aWR0aDoxOworCXUzMiBodGM6MTsKKwl1MzIgdGNwY2hrX3JwdDoxOworCXUzMiBpcGNjaGtfcnB0OjE7CisJdTMyIHRjcGNoa192YWxpZDoxOworCXUzMiBod3BjZXJyOjE7CisJdTMyIGh3cGNpbmQ6MTsKKwl1MzIgaXYwOjE2OworCisJdTMyIGl2MTsKKworCXUzMiB0c2ZsOworCisJdTMyIGJ1ZmZlcmFkZHJlc3M7CisJdTMyIGJ1ZmZlcmFkZHJlc3M2NDsKKworfSBfX3BhY2tlZDsKKwordm9pZCBydGw5MmVlX3J4X2NoZWNrX2RtYV9vayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmhlYWRlcl9kZXNjLAorCQkJICAgICB1OCBxdWV1ZV9pbmRleCk7Cit1MTYJcnRsOTJlZV9yeF9kZXNjX2J1ZmZfcmVtYWluZWRfY250KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHU4IHF1ZXVlX2luZGV4KTsKK3ZvaWQgcnRsOTJlZV9nZXRfYXZhaWxhYmxlX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcgLCB1OCBxdWV1ZV9pbmRleCk7Cit2b2lkIHJ0bDkyZWVfcHJlX2ZpbGxfdHhfYmRfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggKnR4X2JkX2Rlc2MsIHU4ICpkZXNjLCB1OCBxdWV1ZV9pbmRleCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZG1hX2FkZHJfdCBhZGRyKTsKKworCit2b2lkIHJ0bDkyZWVfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsCisJCQkgIHU4ICpwYmRfZGVzY190eCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1OCBod19xdWV1ZSwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqcHRjYl9kZXNjKTsKK2Jvb2wgcnRsOTJlZV9yeF9xdWVyeV9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgc3RydWN0IHJ0bF9zdGF0cyAqc3RhdHVzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCSAgIHU4ICpwZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHJ0bDkyZWVfc2V0X2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywgYm9vbCBpc3R4LAorCQkgICAgICB1OCBkZXNjX25hbWUsIHU4ICp2YWwpOworCit1MzIgcnRsOTJlZV9nZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKK2Jvb2wgcnRsOTJlZV9pc190eF9kZXNjX2Nsb3NlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaHdfcXVldWUsIHUxNiBpbmRleCk7Cit2b2lkIHJ0bDkyZWVfdHhfZmlsbF9jbWRkZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcGRlc2MsCisJCQkgICAgIGJvb2wgYl9maXJzdHNlZywgYm9vbCBiX2xhc3RzZWcsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwordTMyIHJ0bDkyZWVfcnhfY29tbWFuZF9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgcnRsX3N0YXRzIHN0YXR1cywKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3N0YXRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmVlL3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMzAyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvc3RhdHMuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIndpZmkuaCIKKyNpbmNsdWRlICJzdGF0cy5oIgorCit1OCBzdGdfcnRsX3F1ZXJ5X3J4cHdycGVyY2VudGFnZShjaGFyIGFudHBvd2VyKQoreworCWlmICgoYW50cG93ZXIgPD0gLTEwMCkgfHwgKGFudHBvd2VyID49IDIwKSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoYW50cG93ZXIgPj0gMCkKKwkJcmV0dXJuIDEwMDsKKwllbHNlCisJCXJldHVybiAxMDAgKyBhbnRwb3dlcjsKK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9xdWVyeV9yeHB3cnBlcmNlbnRhZ2UpOworCit1OCBzdGdfcnRsX2V2bV9kYl90b19wZXJjZW50YWdlKGNoYXIgdmFsdWUpCit7CisJY2hhciByZXRfdmFsOworCXJldF92YWwgPSB2YWx1ZTsKKworCWlmIChyZXRfdmFsID49IDApCisJCXJldF92YWwgPSAwOworCWlmIChyZXRfdmFsIDw9IC0zMykKKwkJcmV0X3ZhbCA9IC0zMzsKKwlyZXRfdmFsID0gMCAtIHJldF92YWw7CisJcmV0X3ZhbCAqPSAzOworCWlmIChyZXRfdmFsID09IDk5KQorCQlyZXRfdmFsID0gMTAwOworCisJcmV0dXJuIHJldF92YWw7Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19ydGxfZXZtX2RiX3RvX3BlcmNlbnRhZ2UpOworCit1OCBydGxfZXZtX2RibV9qYWd1YXIoY2hhciB2YWx1ZSkKK3sKKwljaGFyIHJldF92YWw7CisJcmV0X3ZhbCA9IHZhbHVlOworCisJLyogLTMzZEJ+MGRCIHRvIDMzZEIgfiAwZEIqLworCWlmIChyZXRfdmFsID09IC0xMjgpCisJCXJldF92YWwgPSAxMjc7CisJZWxzZSBpZiAocmV0X3ZhbCA8IDApCisJCXJldF92YWwgPSAwIC0gcmV0X3ZhbDsKKworCXJldF92YWwgID0gcmV0X3ZhbCA+PiAxOworCXJldHVybiByZXRfdmFsOworfQorRVhQT1JUX1NZTUJPTChydGxfZXZtX2RibV9qYWd1YXIpOworCitzdGF0aWMgbG9uZyBydGxfdHJhbnNsYXRlX3RvZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXU4IHNpZ25hbF9zdHJlbmd0aF9pbmRleCkKK3sKKwlsb25nIHNpZ25hbF9wb3dlcjsKKworCXNpZ25hbF9wb3dlciA9IChsb25nKSgoc2lnbmFsX3N0cmVuZ3RoX2luZGV4ICsgMSkgPj4gMSk7CisJc2lnbmFsX3Bvd2VyIC09IDk1OworCXJldHVybiBzaWduYWxfcG93ZXI7Cit9CisKK2xvbmcgc3RnX3J0bF9zaWduYWxfc2NhbGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgbG9uZyBjdXJyc2lnKQoreworCWxvbmcgcmV0c2lnOworCisJaWYgKGN1cnJzaWcgPj0gNjEgJiYgY3VycnNpZyA8PSAxMDApCisJCXJldHNpZyA9IDkwICsgKChjdXJyc2lnIC0gNjApIC8gNCk7CisJZWxzZSBpZiAoY3VycnNpZyA+PSA0MSAmJiBjdXJyc2lnIDw9IDYwKQorCQlyZXRzaWcgPSA3OCArICgoY3VycnNpZyAtIDQwKSAvIDIpOworCWVsc2UgaWYgKGN1cnJzaWcgPj0gMzEgJiYgY3VycnNpZyA8PSA0MCkKKwkJcmV0c2lnID0gNjYgKyAoY3VycnNpZyAtIDMwKTsKKwllbHNlIGlmIChjdXJyc2lnID49IDIxICYmIGN1cnJzaWcgPD0gMzApCisJCXJldHNpZyA9IDU0ICsgKGN1cnJzaWcgLSAyMCk7CisJZWxzZSBpZiAoY3VycnNpZyA+PSA1ICYmIGN1cnJzaWcgPD0gMjApCisJCXJldHNpZyA9IDQyICsgKCgoY3VycnNpZyAtIDUpICogMikgLyAzKTsKKwllbHNlIGlmIChjdXJyc2lnID09IDQpCisJCXJldHNpZyA9IDM2OworCWVsc2UgaWYgKGN1cnJzaWcgPT0gMykKKwkJcmV0c2lnID0gMjc7CisJZWxzZSBpZiAoY3VycnNpZyA9PSAyKQorCQlyZXRzaWcgPSAxODsKKwllbHNlIGlmIChjdXJyc2lnID09IDEpCisJCXJldHNpZyA9IDk7CisJZWxzZQorCQlyZXRzaWcgPSBjdXJyc2lnOworCisJcmV0dXJuIHJldHNpZzsKK30KK0VYUE9SVF9TWU1CT0woc3RnX3J0bF9zaWduYWxfc2NhbGVfbWFwcGluZyk7CisKK3N0YXRpYyB2b2lkIHJ0bF9wcm9jZXNzX3VpX3Jzc2koc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0dXMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTggcmZwYXRoOworCXUzMiBsYXN0X3Jzc2ksIHRtcHZhbDsKKworCWlmICghcHN0YXR1cy0+Yl9wYWNrZXRfdG9zZWxmICYmICFwc3RhdHVzLT5iX3BhY2tldF9iZWFjb24pCisJCXJldHVybjsKKworCXJ0bHByaXYtPnN0YXRzLnB3ZGJfYWxsX2NudCArPSBwc3RhdHVzLT5yeF9wd2RiX2FsbDsKKwlydGxwcml2LT5zdGF0cy5yc3NpX2NhbGN1bGF0ZV9jbnQrKzsKKworCWlmIChydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX251bSsrID49IFBIWV9SU1NJX1NMSURfV0lOX01BWCkgeworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX251bSA9IFBIWV9SU1NJX1NMSURfV0lOX01BWDsKKwkJbGFzdF9yc3NpID0gcnRscHJpdi0+c3RhdHMudWlfcnNzaS5lbGVtZW50c1sKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuaW5kZXhdOworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX3ZhbCAtPSBsYXN0X3Jzc2k7CisJfQorCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfdmFsICs9IHBzdGF0dXMtPnNpZ25hbHN0cmVuZ3RoOworCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuZWxlbWVudHNbcnRscHJpdi0+c3RhdHMudWlfcnNzaS5pbmRleCsrXSA9CisJICAgIHBzdGF0dXMtPnNpZ25hbHN0cmVuZ3RoOworCWlmIChydGxwcml2LT5zdGF0cy51aV9yc3NpLmluZGV4ID49IFBIWV9SU1NJX1NMSURfV0lOX01BWCkKKwkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS5pbmRleCA9IDA7CisJdG1wdmFsID0gcnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF92YWwgLworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX251bTsKKwlydGxwcml2LT5zdGF0cy5zaWduYWxfc3RyZW5ndGggPSBydGxfdHJhbnNsYXRlX3RvZGJtKGh3LAorCQkodTgpIHRtcHZhbCk7CisJcHN0YXR1cy0+cnNzaSA9IHJ0bHByaXYtPnN0YXRzLnNpZ25hbF9zdHJlbmd0aDsKKworCWlmIChwc3RhdHVzLT5iX2lzX2NjaykKKwkJcmV0dXJuOworCisJZm9yIChyZnBhdGggPSBSRjkwX1BBVEhfQTsgcmZwYXRoIDwgcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOworCSAgICAgcmZwYXRoKyspIHsKKwkJaWYgKHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID09IDApIHsKKwkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCSAgICBwc3RhdHVzLT5yeF9taW1vX3NpZ25hbHN0cmVuZ3RoW3JmcGF0aF07CisJCX0KKwkJaWYgKHBzdGF0dXMtPnJ4X21pbW9fc2lnbmFsc3RyZW5ndGhbcmZwYXRoXSA+CisJCSAgICBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSkgeworCQkJcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gPQorCQkJICAgICgocnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gKgorCQkJICAgICAgKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKworCQkJICAgICAocHN0YXR1cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdKSkgLworCQkJICAgIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCSAgICBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSArIDE7CisJCX0gZWxzZSB7CisJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CisJCQkgICAgKChydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSAqCisJCQkgICAgICAoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArCisJCQkgICAgIChwc3RhdHVzLT5yeF9taW1vX3NpZ25hbHN0cmVuZ3RoW3JmcGF0aF0pKSAvCisJCQkgICAgKFJYX1NNT09USF9GQUNUT1IpOworCQl9CisJCXJ0bHByaXYtPnN0YXRzLnJ4X3Nucl9kYltyZnBhdGhdID0gcHN0YXR1cy0+cnhfc25yW3JmcGF0aF07CisJCXJ0bHByaXYtPnN0YXRzLnJ4X2V2bV9kYm1bcmZwYXRoXSA9CisJCQkJCXBzdGF0dXMtPnJ4X21pbW9fZXZtX2RibVtyZnBhdGhdOworCQlydGxwcml2LT5zdGF0cy5yeF9jZm9fc2hvcnRbcmZwYXRoXSA9CisJCQkJCXBzdGF0dXMtPmNmb19zaG9ydFtyZnBhdGhdOworCQlydGxwcml2LT5zdGF0cy5yeF9jZm9fdGFpbFtyZnBhdGhdID0gcHN0YXR1cy0+Y2ZvX3RhaWxbcmZwYXRoXTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF91cGRhdGVfcnhzaWduYWxzdGF0aXN0aWNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0dXMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCB3ZWlnaHRpbmcgPSAwOworCisJaWYgKHJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyID09IDApCisJCXJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyID0gcHN0YXR1cy0+cmVjdnNpZ25hbHBvd2VyOworCWlmIChwc3RhdHVzLT5yZWN2c2lnbmFscG93ZXIgPiBydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlcikKKwkJd2VpZ2h0aW5nID0gNTsKKwllbHNlIGlmIChwc3RhdHVzLT5yZWN2c2lnbmFscG93ZXIgPCBydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlcikKKwkJd2VpZ2h0aW5nID0gKC01KTsKKwlydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciA9IChydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciAqCisJCTUgKyBwc3RhdHVzLT5yZWN2c2lnbmFscG93ZXIgKyB3ZWlnaHRpbmcpIC8gNjsKK30KKworc3RhdGljIHZvaWQgcnRsX3Byb2Nlc3NfcHdkYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqZHJ2X3ByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOworCWxvbmcgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAocnRscHJpdi0+bWFjODAyMTEub3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXN0YSA9IHJ0bF9maW5kX3N0YShodywgcHN0YXR1cy0+cHNhZGRyKTsKKworCS8qIGFkaG9jIG9yIGFwIG1vZGUgKi8KKwlpZiAoc3RhKSB7CisJCWRydl9wcml2ID0gKHN0cnVjdCBydGxfc3RhX2luZm8gKilzdGEtPmRydl9wcml2OworCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCWRydl9wcml2LT5yc3NpX3N0YXQudW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwl9IGVsc2UgeworCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCXJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJfQorCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAwKQorCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gcHN0YXR1cy0+cnhfcHdkYl9hbGw7CisJaWYgKHBzdGF0dXMtPnJ4X3B3ZGJfYWxsID4gKHUzMikgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikgeworCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gKCgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikgKgorCQkgICAgICAoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArCisJCSAgICAgKHBzdGF0dXMtPnJ4X3B3ZGJfYWxsKSkgLyAoUlhfU01PT1RIX0ZBQ1RPUik7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPSB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiICsgMTsKKwl9IGVsc2UgeworCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gKCgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikgKgorCQkgICAgICAoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArCisJCSAgICAgKHBzdGF0dXMtPnJ4X3B3ZGJfYWxsKSkgLyAoUlhfU01PT1RIX0ZBQ1RPUik7CisJfQorCisJaWYgKHN0YSkgeworCQlkcnZfcHJpdi0+cnNzaV9zdGF0LnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwl9IGVsc2UgeworCQlydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlydGxfdXBkYXRlX3J4c2lnbmFsc3RhdGlzdGljcyhodywgcHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9wcm9jZXNzX3VpX2xpbmtfcXVhbGl0eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGxhc3RfZXZtLCBuX3N0cmVhbSwgdG1wdmFsOworCisJaWYgKHBzdGF0dXMtPnNpZ25hbHF1YWxpdHkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF9udW0rKyA+PQorCSAgICBQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYKSB7CisJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF9udW0gPQorCQkgICAgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWDsKKwkJbGFzdF9ldm0gPSBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuZWxlbWVudHNbCisJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXhdOworCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfdmFsIC09IGxhc3RfZXZtOworCX0KKwlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfdmFsICs9IHBzdGF0dXMtPnNpZ25hbHF1YWxpdHk7CisJcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmVsZW1lbnRzWworCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXgrK10gPQorCQkJCQkJCXBzdGF0dXMtPnNpZ25hbHF1YWxpdHk7CisJaWYgKHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS5pbmRleCA+PQorCSAgICBQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYKQorCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXggPSAwOworCXRtcHZhbCA9IHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF92YWwgLworCSAgICBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfbnVtOworCXJ0bHByaXYtPnN0YXRzLnNpZ25hbF9xdWFsaXR5ID0gdG1wdmFsOworCXJ0bHByaXYtPnN0YXRzLmxhc3Rfc2lnc3RyZW5ndGhfaW5wZXJjZW50ID0gdG1wdmFsOworCWZvciAobl9zdHJlYW0gPSAwOyBuX3N0cmVhbSA8IDI7IG5fc3RyZWFtKyspIHsKKwkJaWYgKHBzdGF0dXMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtuX3N0cmVhbV0gIT0gLTEpIHsKKwkJCWlmIChydGxwcml2LT5zdGF0cy5yeF9ldm1fcGVyY2VudGFnZVtuX3N0cmVhbV0gPT0gMCkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X2V2bV9wZXJjZW50YWdlW25fc3RyZWFtXSA9CisJCQkJICAgIHBzdGF0dXMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtuX3N0cmVhbV07CisJCQl9CisJCQlydGxwcml2LT5zdGF0cy5yeF9ldm1fcGVyY2VudGFnZVtuX3N0cmVhbV0gPQorCQkJICAgICgocnRscHJpdi0+c3RhdHMucnhfZXZtX3BlcmNlbnRhZ2Vbbl9zdHJlYW1dCisJCQkgICAgICAqIChSWF9TTU9PVEhfRkFDVE9SIC0gMSkpICsKKwkJCSAgICAgKHBzdGF0dXMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtuX3N0cmVhbV0gKiAxKSkgLworCQkJICAgIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJfQorCX0KK30KKwordm9pZCBzdGdfcnRsX3Byb2Nlc3NfcGh5aW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmJ1ZmZlciwKKwkJCSAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cykKK3sKKwlpZiAoIXBzdGF0dXMtPmJfcGFja2V0X21hdGNoYnNzaWQpCisJCXJldHVybjsKKworCXJ0bF9wcm9jZXNzX3VpX3Jzc2koaHcsIHBzdGF0dXMpOworCXJ0bF9wcm9jZXNzX3B3ZGIoaHcsIHBzdGF0dXMpOworCXJ0bF9wcm9jZXNzX3VpX2xpbmtfcXVhbGl0eShodywgcHN0YXR1cyk7Cit9CitFWFBPUlRfU1lNQk9MKHN0Z19ydGxfcHJvY2Vzc19waHlpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvc3RhdHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzI4NDI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS9zdGF0cy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9TVEFUU19IX18KKyNkZWZpbmUgX19SVExfU1RBVFNfSF9fCisKKyNkZWZpbmUJUEhZX1JTU0lfU0xJRF9XSU5fTUFYCQkJMTAwCisjZGVmaW5lCVBIWV9MSU5LUVVBTElUWV9TTElEX1dJTl9NQVgJCTIwCisjZGVmaW5lCVBIWV9CRUFDT05fUlNTSV9TTElEX1dJTl9NQVgJCTEwCisKKy8qIFJ4IHNtb290aCBmYWN0b3IgKi8KKyNkZWZpbmUJUlhfU01PT1RIX0ZBQ1RPUgkJCTIwCisKK3U4IHN0Z19ydGxfcXVlcnlfcnhwd3JwZXJjZW50YWdlKGNoYXIgYW50cG93ZXIpOwordTggc3RnX3J0bF9ldm1fZGJfdG9fcGVyY2VudGFnZShjaGFyIHZhbHVlKTsKK3U4IHJ0bF9ldm1fZGJtX2phZ3VhcihjaGFyIHZhbHVlKTsKK2xvbmcgc3RnX3J0bF9zaWduYWxfc2NhbGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgbG9uZyBjdXJyc2lnKTsKK3ZvaWQgc3RnX3J0bF9wcm9jZXNzX3BoeWluZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpidWZmZXIsCisJCQkgICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0dXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvd2lmaS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlZS93aWZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmYTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZWUvd2lmaS5oCkBAIC0wLDAgKzEsMjY0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMX1dJRklfSF9fCisjZGVmaW5lIF9fUlRMX1dJRklfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisKKyNkZWZpbmUgUkZfQ0hBTkdFX0JZX0lOSVQJCTAKKyNkZWZpbmUgUkZfQ0hBTkdFX0JZX0lQUwkJQklUKDI4KQorI2RlZmluZSBSRl9DSEFOR0VfQllfUFMJCQlCSVQoMjkpCisjZGVmaW5lIFJGX0NIQU5HRV9CWV9IVwkJCUJJVCgzMCkKKyNkZWZpbmUgUkZfQ0hBTkdFX0JZX1NXCQkJQklUKDMxKQorCisjZGVmaW5lIElRS19BRERBX1JFR19OVU0JCTE2CisjZGVmaW5lIElRS19NQUNfUkVHX05VTQkJCTQKKyNkZWZpbmUgSVFLX1RIUkVTSE9MRAkJCTgKKworI2RlZmluZSBNQVhfS0VZX0xFTgkJCTYxCisjZGVmaW5lIEtFWV9CVUZfU0laRQkJCTUKKworLyogUW9TIHJlbGF0ZWQuICovCisvKmFjaTogMHgwMAlCZXN0IEVmZm9ydCovCisvKmFjaTogMHgwMQlCYWNrZ3JvdW5kKi8KKy8qYWNpOiAweDEwCVZpZGVvKi8KKy8qYWNpOiAweDExCVZvaWNlKi8KKy8qTWF4OiBkZWZpbmUgdG90YWwgbnVtYmVyLiovCisjZGVmaW5lIEFDMF9CRQkJCQkwCisjZGVmaW5lIEFDMV9CSwkJCQkxCisjZGVmaW5lIEFDMl9WSQkJCQkyCisjZGVmaW5lIEFDM19WTwkJCQkzCisjZGVmaW5lIEFDX01BWAkJCQk0CisjZGVmaW5lIFFPU19RVUVVRV9OVU0JCQk0CisjZGVmaW5lIFJUTF9NQUM4MDIxMV9OVU1fUVVFVUUJCTUKKworI2RlZmluZSBRQlNTX0xPQURfU0laRQkJCTUKKyNkZWZpbmUgTUFYX1dNTUVMRV9MRU5HVEgJCTY0CisKKyNkZWZpbmUgVE9UQUxfQ0FNX0VOVFJZCQkJMzIKKworLypzbG90IHRpbWUgZm9yIDExZy4gKi8KKyNkZWZpbmUgUlRMX1NMT1RfVElNRV85CQkJOQorI2RlZmluZSBSVExfU0xPVF9USU1FXzIwCQkyMAorCisvKnJlbGF0ZWQgd2l0aCB0Y3AvaXAuICovCisvKmlmX2VodGhlci5oKi8KKyNkZWZpbmUgRVRIX1BfUEFFCQkJMHg4ODhFCS8qUG9ydCBBY2Nlc3MgRW50aXR5CisJCQkJCQkgKihJRUVFIDgwMi4xWCkgKi8KKyNkZWZpbmUgRVRIX1BfSVAJCQkweDA4MDAJLypJbnRlcm5ldCBQcm90b2NvbCBwYWNrZXQgKi8KKyNkZWZpbmUgRVRIX1BfQVJQCQkJMHgwODA2CS8qQWRkcmVzcyBSZXNvbHV0aW9uIHBhY2tldCAqLworI2RlZmluZSBTTkFQX1NJWkUJCQk2CisjZGVmaW5lIFBST1RPQ19UWVBFX1NJWkUJCTIKKworLypyZWxhdGVkIHdpdGggODAyLjExIGZyYW1lKi8KKyNkZWZpbmUgTUFDODAyMTFfM0FERFJfTEVOCQkyNAorI2RlZmluZSBNQUM4MDIxMV80QUREUl9MRU4JCTMwCisKKyNkZWZpbmUgQ0hBTk5FTF9NQVhfTlVNQkVSCQkoMTQgKyAyNCArIDIxKQkvKiAxNCBpcyB0aGUgbWF4CisJCQkJCQkJICogY2hhbm5lbCBudW1iZXIgKi8KKyNkZWZpbmUgQ0hBTk5FTF9NQVhfTlVNQkVSXzJHCQkxNAorI2RlZmluZSBDSEFOTkVMX01BWF9OVU1CRVJfNUcJCTU0IC8qIFBsZWFzZSByZWZlciB0bworCQkJCQkgICAgKiJwaHlfR2V0Q2hubEdyb3VwODgxMkEiIGFuZAorCQkJCQkgICAgKiAiSGFsX1JlYWRUeFBvd2VySW5mbzg4MTJBIiovCisKKyNkZWZpbmUgTUFYX1JFR1VMQVRJT05fTlVNCQkJNAorI2RlZmluZSBNQVhfUkZfUEFUSF9OVU0JMgorI2RlZmluZSBNQVhfUkFURV9TRUNUSU9OX05VTQkJNgorI2RlZmluZSBNQVhfMl80R19CQU5EV0lUSF9OVU0JCTIKKyNkZWZpbmUgTUFYXzVHX0JBTkRXSVRIX05VTQkJNAorCisKKworCisjZGVmaW5lIENIQU5ORUxfTUFYX05VTUJFUl81R184ME0JNworI2RlZmluZSBDSEFOTkVMX0dST1VQX01BWAkJKDMgKyA5KQkvKiBjaDF+MywgY2g0fjksIGNoMTB+MTQKKwkJCQkJCSAqIHRvdGFsIHRocmVlIGdyb3VwcyAqLworI2RlZmluZSBNQVhfUEdfR1JPVVAJCQkxMworI2RlZmluZQlDSEFOTkVMX0dST1VQX01BWF8yRwkJMworI2RlZmluZQlDSEFOTkVMX0dST1VQX0lEWF81R0wJCTMKKyNkZWZpbmUJQ0hBTk5FTF9HUk9VUF9JRFhfNUdNCQk2CisjZGVmaW5lCUNIQU5ORUxfR1JPVVBfSURYXzVHSAkJOQorI2RlZmluZQlDSEFOTkVMX0dST1VQX01BWF81RwkJOQorI2RlZmluZSBDSEFOTkVMX01BWF9OVU1CRVJfMkcJCTE0CisjZGVmaW5lIEFWR19USEVSTUFMX05VTQkJCTgKKyNkZWZpbmUgQVZHX1RIRVJNQUxfTlVNXzkyRQkJNAorI2RlZmluZSBBVkdfVEhFUk1BTF9OVU1fODhFCQk0CisjZGVmaW5lIEFWR19USEVSTUFMX05VTV84NzIzQkUJCTQKKyNkZWZpbmUgTUFYX1RJRF9DT1VOVAkJCTkKKyNkZWZpbmUgTUFYX05VTV9SQVRFUwkJCTI2NAorCisvKmZvciA4OEUgdXNlKi8KKy8qSXQgbXVzdCBhbHdheXMgc2V0IHRvIDQsIG90aGVyd2lzZSByZWFkIGVmdXNlIHRhYmxlIHNlY3F1ZW5jZSB3aWxsIGJlIHdyb25nLiovCisjZGVmaW5lIE1BWF9UWF9DT1VOVAkJCTQKKyNkZWZpbmUJTUFYX1JGX1BBVEgJCQk0CisjZGVmaW5lCU1BWF9DSE5MX0dST1VQXzI0RwkJNgorI2RlZmluZQlNQVhfQ0hOTF9HUk9VUF81RwkJMTQKKworLyogQkssIEJFLCBWSSwgVk8sIEhDQ0EsIE1BTkFHRU1FTlQsIENPTU1BTkQsIEhJR0gsIEJFQUNPTi4gKi8KKyNkZWZpbmUgTUFYX1RYX1FVRVVFCQkJOQorCisjZGVmaW5lIFRYX1BXUl9CWV9SQVRFX05VTV9CQU5ECQkyCisjZGVmaW5lIFRYX1BXUl9CWV9SQVRFX05VTV9SRgkJNAorI2RlZmluZSBUWF9QV1JfQllfUkFURV9OVU1fU0VDVElPTgkxMgorI2RlZmluZSBNQVhfQkFTRV9OVU1fSU5fUEhZX1JFR19QR18yNEcgIDYKKyNkZWZpbmUgTUFYX0JBU0VfTlVNX0lOX1BIWV9SRUdfUEdfNUcJNQorCisjZGVmaW5lIERFTFRBX1NXSU5HSURYX1NJWkUJMzAKKyNkZWZpbmUgQkFORF9OVU0JCQkJMworLypOb3csIGl0J3MganVzdCBmb3IgODE5MmVlCisgKm5vdCBPSyB5ZXQsIGtlZXAgaXQgMCovCisjZGVmaW5lIERNQV9JU182NEJJVCAwCisjZGVmaW5lIFJUTDgxOTJFRV9TRUdfTlVNCQkxIC8qIDA6MiBzZWcsIDE6IDQgc2VnLCAyOiA4IHNlZyAqLworCisKKyNkZWZpbmUgUEFDS0VUX05PUk1BTAkJCTAKKyNkZWZpbmUgUEFDS0VUX0RIQ1AJCQkxCisjZGVmaW5lIFBBQ0tFVF9BUlAJCQkyCisjZGVmaW5lIFBBQ0tFVF9FQVBPTAkJCTMKKworI2RlZmluZQlNQVhfU1VQUE9SVF9XT0xfUEFUVEVSTl9OVU0JMTYKKyNkZWZpbmUJUlNWRF9XT0xfUEFUVEVSTl9OVU0JCTEKKyNkZWZpbmUJV0tGTUNBTV9BRERSX05VTQkJNgorI2RlZmluZQlXS0ZNQ0FNX1NJWkUJCQkyNAorCisjZGVmaW5lCU1BWF9XT0xfQklUX01BU0tfU0laRQkJMTYKKy8qIE1JTiBMRU4ga2VlcHMgMTMgaGVyZSAqLworI2RlZmluZQlNSU5fV09MX1BBVFRFUk5fU0laRQkJMTMKKyNkZWZpbmUJTUFYX1dPTF9QQVRURVJOX1NJWkUJCTEyOAorCisjZGVmaW5lCVdBS0VfT05fTUFHSUNfUEFDS0VUCQlCSVQoMCkKKyNkZWZpbmUJV0FLRV9PTl9QQVRURVJOX01BVENICQlCSVQoMSkKKworI2RlZmluZQlXT0xfUkVBU09OX1BUS19VUERBVEUJCUJJVCgwKQorI2RlZmluZQlXT0xfUkVBU09OX0dUS19VUERBVEUJCUJJVCgxKQorI2RlZmluZQlXT0xfUkVBU09OX0RJU0FTU09DCQlCSVQoMikKKyNkZWZpbmUJV09MX1JFQVNPTl9ERUFVVEgJCUJJVCgzKQorI2RlZmluZQlXT0xfUkVBU09OX0FQX0xPU1QJCUJJVCg0KQorI2RlZmluZQlXT0xfUkVBU09OX01BR0lDX1BLVAkJQklUKDUpCisjZGVmaW5lCVdPTF9SRUFTT05fVU5JQ0FTVF9QS1QJCUJJVCg2KQorI2RlZmluZQlXT0xfUkVBU09OX1BBVFRFUk5fUEtUCQlCSVQoNykKKyNkZWZpbmUJV09MX1JFQVNPTl9SVEQzX1NTSURfTUFUQ0gJQklUKDgpCisjZGVmaW5lCVdPTF9SRUFTT05fUkVBTFdPV19WMl9XQUtFVVBQS1QJQklUKDkpCisjZGVmaW5lCVdPTF9SRUFTT05fUkVBTFdPV19WMl9BQ0tMT1NUCUJJVCgxMCkKKworc3RydWN0IHR4cG93ZXJfaW5mb18yZyB7CisJdTggaW5kZXhfY2NrX2Jhc2VbTUFYX1JGX1BBVEhdW01BWF9DSE5MX0dST1VQXzI0R107CisJdTggaW5kZXhfYnc0MF9iYXNlW01BWF9SRl9QQVRIXVtNQVhfQ0hOTF9HUk9VUF8yNEddOworCS8qSWYgb25seSBvbmUgdHgsIG9ubHkgQlcyMCBhbmQgT0ZETSBhcmUgdXNlZC4qLworCXU4IGNja19kaWZmW01BWF9SRl9QQVRIXVtNQVhfVFhfQ09VTlRdOworCXU4IG9mZG1fZGlmZltNQVhfUkZfUEFUSF1bTUFYX1RYX0NPVU5UXTsKKwl1OCBidzIwX2RpZmZbTUFYX1JGX1BBVEhdW01BWF9UWF9DT1VOVF07CisJdTggYnc0MF9kaWZmW01BWF9SRl9QQVRIXVtNQVhfVFhfQ09VTlRdOworfTsKKworc3RydWN0IHR4cG93ZXJfaW5mb181ZyB7CisJdTggaW5kZXhfYnc0MF9iYXNlW01BWF9SRl9QQVRIXVtNQVhfQ0hOTF9HUk9VUF81R107CisJLypJZiBvbmx5IG9uZSB0eCwgb25seSBCVzIwLCBPRkRNLCBCVzgwIGFuZCBCVzE2MCBhcmUgdXNlZC4qLworCXU4IG9mZG1fZGlmZltNQVhfUkZfUEFUSF1bTUFYX1RYX0NPVU5UXTsKKwl1OCBidzIwX2RpZmZbTUFYX1JGX1BBVEhdW01BWF9UWF9DT1VOVF07CisJdTggYnc0MF9kaWZmW01BWF9SRl9QQVRIXVtNQVhfVFhfQ09VTlRdOworCXU4IGJ3ODBfZGlmZltNQVhfUkZfUEFUSF1bTUFYX1RYX0NPVU5UXTsKKwl1OCBidzE2MF9kaWZmW01BWF9SRl9QQVRIXVtNQVhfVFhfQ09VTlRdOworfTsKKworCisvKiBmb3IgZWFybHkgbW9kZSAqLworI2RlZmluZSBFTV9IRFJfTEVOCQkJOAorI2RlZmluZSBGQ1NfTEVOCQkJCTQKKworI2RlZmluZSBNQVhfVklSVFVBTF9NQUMJCQkxCisKK2VudW0gcmZfdHhfbnVtIHsKKwlSRl8xVFggPSAwLAorCVJGXzJUWCwKKwlSRl9NQVhfVFhfTlVNLAorCVJGX1RYX05VTV9OT05JTVBMRU1FTlQsCit9OworCitlbnVtIHJhdGVfc2VjdGlvbiB7CisJQ0NLID0gMCwKKwlPRkRNLAorCUhUX01DUzBfTUNTNywKKwlIVF9NQ1M4X01DUzE1LAorCVZIVF8xU1NNQ1MwXzFTU01DUzksCisJVkhUXzJTU01DUzBfMlNTTUNTOSwKK307CisKK2VudW0gaW50Zl90eXBlIHsKKwlJTlRGX1BDSSA9IDAsCisJSU5URl9VU0IgPSAxLAorfTsKKworZW51bSByYWRpb19wYXRoIHsKKwlSRjkwX1BBVEhfQSA9IDAsCisJUkY5MF9QQVRIX0IgPSAxLAorCVJGOTBfUEFUSF9DID0gMiwKKwlSRjkwX1BBVEhfRCA9IDMsCit9OworCitlbnVtIHJlZ3VsYXRpb25fdHhwd3JfbG10IHsKKwlUWFBXUl9MTVRfRkNDID0gMCwKKwlUWFBXUl9MTVRfTUtLID0gMSwKKwlUWFBXUl9MTVRfRVRTSSA9IDIsCisJVFhQV1JfTE1UX1dXID0gMywKKworCVRYUFdSX0xNVF9NQVhfUkVHVUxBVElPTl9OVU0gPSA0Cit9OworCisKK2VudW0gcnRfZWVwcm9tX3R5cGUgeworCUVFUFJPTV85M0M0NiwKKwlFRVBST01fOTNDNTYsCisJRUVQUk9NX0JPT1RfRUZVU0UsCit9OworCitlbnVtIHJ0bF9zdGF0dXMgeworCVJUTF9TVEFUVVNfSU5URVJGQUNFX1NUQVJUID0gMCwKK307CisKK2VudW0gaGFyZHdhcmVfdHlwZSB7CisJSEFSRFdBUkVfVFlQRV9SVEw4MTkyRSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJVLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MlNFLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MlNVLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MkNFLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MkNVLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MkRFLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MkRVLAorCUhBUkRXQVJFX1RZUEVfUlRMODcyM0FFLAorCUhBUkRXQVJFX1RZUEVfUlRMODE4OEVFLAorCUhBUkRXQVJFX1RZUEVfUlRMODcyM0JFLAorCUhBUkRXQVJFX1RZUEVfUlRMODE5MkVFLAorCUhBUkRXQVJFX1RZUEVfUlRMODgyMUFFLAorCUhBUkRXQVJFX1RZUEVfUlRMODgxMkFFLAorCS8qIGtlZXAgaXQgbGFzdCAqLworCUhBUkRXQVJFX1RZUEVfTlVNCit9OworCitlbnVtIHNjYW5fb3BlcmF0aW9uX2JhY2t1cF9vcHQgeworCVNDQU5fT1BUX0JBQ0tVUF9CQU5EMCA9IDAsCisJU0NBTl9PUFRfQkFDS1VQX0JBTkQxLAorCVNDQU5fT1BUX1JFU1RPUkUsCisJU0NBTl9PUFRfTUFYCit9OworCisvKlJGIHN0YXRlLiovCitlbnVtIHJmX3B3cnN0YXRlIHsKKwlFUkZPTiwKKwlFUkZTTEVFUCwKKwlFUkZPRkYKK307CisKK3N0cnVjdCBiYl9yZWdfZGVmIHsKKwl1MzIgcmZpbnRmczsKKwl1MzIgcmZpbnRmaTsKKwl1MzIgcmZpbnRmbzsKKwl1MzIgcmZpbnRmZTsKKwl1MzIgcmYzd2lyZV9vZmZzZXQ7CisJdTMyIHJmbHNzaV9zZWxlY3Q7CisJdTMyIHJmdHhnYWluX3N0YWdlOworCXUzMiByZmhzc2lfcGFyYTE7CisJdTMyIHJmaHNzaV9wYXJhMjsKKwl1MzIgcmZzd2l0Y2hfY29udHJvbDsKKwl1MzIgcmZhZ2NfY29udHJvbDE7CisJdTMyIHJmYWdjX2NvbnRyb2wyOworCXUzMiByZnJ4aXFfaW1iYWxhbmNlOworCXUzMiByZnJ4X2FmZTsKKwl1MzIgcmZ0eGlxX2ltYmFsYW5jZTsKKwl1MzIgcmZ0eF9hZmU7CisJdTMyIHJmbHNzaV9yZWFkYmFjazsKKwl1MzIgcmZsc3NpX3JlYWRiYWNrcGk7Cit9OworCitlbnVtIGlvX3R5cGUgeworCUlPX0NNRF9QQVVTRV9CQU5EMF9ETV9CWV9TQ0FOID0gMCwKKwlJT19DTURfUEFVU0VfQkFORDFfRE1fQllfU0NBTiA9IDEsCisJSU9fQ01EX1JFU1VNRV9ETV9CWV9TQ0FOID0gMiwKK307CisKK2VudW0gaHdfdmFyaWFibGVzIHsKKwlIV19WQVJfRVRIRVJfQUREUiwKKwlIV19WQVJfTVVMVElDQVNUX1JFRywKKwlIV19WQVJfQkFTSUNfUkFURSwKKwlIV19WQVJfQlNTSUQsCisJSFdfVkFSX01FRElBX1NUQVRVUywKKwlIV19WQVJfU0VDVVJJVFlfQ09ORiwKKwlIV19WQVJfQkVBQ09OX0lOVEVSVkFMLAorCUhXX1ZBUl9BVElNX1dJTkRPVywKKwlIV19WQVJfTElTVEVOX0lOVEVSVkFMLAorCUhXX1ZBUl9DU19DT1VOVEVSLAorCUhXX1ZBUl9ERUZBVUxUS0VZMCwKKwlIV19WQVJfREVGQVVMVEtFWTEsCisJSFdfVkFSX0RFRkFVTFRLRVkyLAorCUhXX1ZBUl9ERUZBVUxUS0VZMywKKwlIV19WQVJfU0lGUywKKwlIV19WQVJfUjJUX1NJRlMsCisJSFdfVkFSX0RJRlMsCisJSFdfVkFSX0VJRlMsCisJSFdfVkFSX1NMT1RfVElNRSwKKwlIV19WQVJfQUNLX1BSRUFNQkxFLAorCUhXX1ZBUl9DV19DT05GSUcsCisJSFdfVkFSX0NXX1ZBTFVFUywKKwlIV19WQVJfUkFURV9GQUxMQkFDS19DT05UUk9MLAorCUhXX1ZBUl9DT05URU5USU9OX1dJTkRPVywKKwlIV19WQVJfUkVUUllfQ09VTlQsCisJSFdfVkFSX1RSX1NXSVRDSCwKKwlIV19WQVJfQ09NTUFORCwKKwlIV19WQVJfV1BBX0NPTkZJRywKKwlIV19WQVJfQU1QRFVfTUlOX1NQQUNFLAorCUhXX1ZBUl9TSE9SVEdJX0RFTlNJVFksCisJSFdfVkFSX0FNUERVX0ZBQ1RPUiwKKwlIV19WQVJfTUNTX1JBVEVfQVZBSUxBQkxFLAorCUhXX1ZBUl9BQ19QQVJBTSwKKwlIV19WQVJfQUNNX0NUUkwsCisJSFdfVkFSX0RJU19SZXFfUXNpemUsCisJSFdfVkFSX0NDWF9DSE5MX0xPQUQsCisJSFdfVkFSX0NDWF9OT0lTRV9ISVNUT0dSQU0sCisJSFdfVkFSX0NDWF9DTE1fTkhNLAorCUhXX1ZBUl9UeE9QTGltaXQsCisJSFdfVkFSX1RVUkJPX01PREUsCisJSFdfVkFSX1JGX1NUQVRFLAorCUhXX1ZBUl9SRl9PRkZfQllfSFcsCisJSFdfVkFSX0JVU19TUEVFRCwKKwlIV19WQVJfU0VUX0RFVl9QT1dFUiwKKworCUhXX1ZBUl9SQ1IsCisJSFdfVkFSX1JBVFJfMCwKKwlIV19WQVJfUlJTUiwKKwlIV19WQVJfQ1BVX1JTVCwKKwlIV19WQVJfQ0VDSEtfQlNTSUQsCisJSFdfVkFSX0xCS19NT0RFLAorCUhXX1ZBUl9BRVNfMTFOX0ZJWCwKKwlIV19WQVJfVVNCX1JYX0FHR1IsCisJSFdfVkFSX1VTRVJfQ09OVFJPTF9UVVJCT19NT0RFLAorCUhXX1ZBUl9SRVRSWV9MSU1JVCwKKwlIV19WQVJfSU5JVF9UWF9SQVRFLAorCUhXX1ZBUl9UWF9SQVRFX1JFRywKKwlIV19WQVJfRUZVU0VfVVNBR0UsCisJSFdfVkFSX0VGVVNFX0JZVEVTLAorCUhXX1ZBUl9BVVRPTE9BRF9TVEFUVVMsCisJSFdfVkFSX1JGXzJSX0RJU0FCTEUsCisJSFdfVkFSX1NFVF9SUFdNLAorCUhXX1ZBUl9IMkNfRldfUFdSTU9ERSwKKwlIV19WQVJfSDJDX0ZXX0pPSU5CU1NSUFQsCisJSFdfVkFSX0gyQ19GV19NRURJQVNUQVRVU1JQVCwKKwlIV19WQVJfSDJDX0ZXX1AyUF9QU19PRkZMT0FELAorCUhXX1ZBUl9GV19QU01PREVfU1RBVFVTLAorCUhXX1ZBUl9JTklUX1JUU19SQVRFLAorCUhXX1ZBUl9SRVNVTUVfQ0xLX09OLAorCUhXX1ZBUl9GV19MUFNfQUNUSU9OLAorCUhXX1ZBUl8xWDFfUkVDVl9DT01CSU5FLAorCUhXX1ZBUl9TVE9QX1NFTkRfQkVBQ09OLAorCUhXX1ZBUl9UU0ZfVElNRVIsCisJSFdfVkFSX0lPX0NNRCwKKworCUhXX1ZBUl9SRl9SRUNPVkVSWSwKKwlIV19WQVJfSDJDX0ZXX1VQREFURV9HVEssCisJSFdfVkFSX1dGX01BU0ssCisJSFdfVkFSX1dGX0NSQywKKwlIV19WQVJfV0ZfSVNfTUFDX0FERFIsCisJSFdfVkFSX0gyQ19GV19PRkZMT0FELAorCUhXX1ZBUl9SRVNFVF9XRkNSQywKKworCUhXX1ZBUl9IQU5ETEVfRldfQzJILAorCUhXX1ZBUl9ETF9GV19SU1ZEX1BBR0UsCisJSFdfVkFSX0FJRCwKKwlIV19WQVJfSFdfU0VRX0VOQUJMRSwKKwlIV19WQVJfQ09SUkVDVF9UU0YsCisJSFdfVkFSX0JDTl9WQUxJRCwKKwlIV19WQVJfRldMUFNfUkZfT04sCisJSFdfVkFSX0RVQUxfVFNGX1JTVCwKKwlIV19WQVJfU1dJVENIX0VQSFlfV29XTEFOLAorCUhXX1ZBUl9JTlRfTUlHUkFUSU9OLAorCUhXX1ZBUl9JTlRfQUMsCisJSFdfVkFSX1JGX1RJTUlORywKKworCUhBTF9ERUZfV09XTEFOLAorCUhXX1ZBUl9NUkMsCisJSFdfVkFSX0tFRVBfQUxJVkUsCisJSFdfVkFSX05BVl9VUFBFUiwKK307CisKK2VudW0gcnRfbWVkaWFfc3RhdHVzIHsKKwlSVF9NRURJQV9ESVNDT05ORUNUID0gMCwKKwlSVF9NRURJQV9DT05ORUNUID0gMQorfTsKKworZW51bSBydF9vZW1faWQgeworCVJUX0NJRF9ERUZBVUxUID0gMCwKKwlSVF9DSURfODE4N19BTFBIQTAgPSAxLAorCVJUX0NJRF84MTg3X1NFUkNPTU1fUFMgPSAyLAorCVJUX0NJRF84MTg3X0hXX0xFRCA9IDMsCisJUlRfQ0lEXzgxODdfTkVUR0VBUiA9IDQsCisJUlRfQ0lEX1dIUUwgPSA1LAorCVJUX0NJRF84MTl4X0NBTUVPID0gNiwKKwlSVF9DSURfODE5eF9SVU5UT1AgPSA3LAorCVJUX0NJRF84MTl4X1NlbmFvID0gOCwKKwlSVF9DSURfVE9TSElCQSA9IDksCisJUlRfQ0lEXzgxOXhfTmV0Y29yZSA9IDEwLAorCVJUX0NJRF9OZXR0cm9uaXggPSAxMSwKKwlSVF9DSURfRExJTksgPSAxMiwKKwlSVF9DSURfUFJPTkVUID0gMTMsCisJUlRfQ0lEX0NPUkVHQSA9IDE0LAorCVJUX0NJRF84MTl4X0FMUEhBID0gMTUsCisJUlRfQ0lEXzgxOXhfU2l0ZWNvbSA9IDE2LAorCVJUX0NJRF9DQ1ggPSAxNywKKwlSVF9DSURfODE5eF9MZW5vdm8gPSAxOCwKKwlSVF9DSURfODE5eF9RTUkgPSAxOSwKKwlSVF9DSURfODE5eF9FZGltYXhfQmVsa2luID0gMjAsCisJUlRfQ0lEXzgxOXhfU2VyY29tbV9CZWxraW4gPSAyMSwKKwlSVF9DSURfODE5eF9DQU1FTzEgPSAyMiwKKwlSVF9DSURfODE5eF9NU0kgPSAyMywKKwlSVF9DSURfODE5eF9BY2VyID0gMjQsCisJUlRfQ0lEXzgxOXhfSFAgPSAyNywKKwlSVF9DSURfODE5eF9DTEVWTyA9IDI4LAorCVJUX0NJRF84MTl4X0FyY2FkeWFuX0JlbGtpbiA9IDI5LAorCVJUX0NJRF84MTl4X1NBTVNVTkcgPSAzMCwKKwlSVF9DSURfODE5eF9XTkNfQ09SRUdBID0gMzEsCisJUlRfQ0lEXzgxOXhfRm94Y29vbiA9IDMyLAorCVJUX0NJRF84MTl4X0RFTEwgPSAzMywKKwlSVF9DSURfODE5eF9QUk9ORVRTID0gMzQsCisJUlRfQ0lEXzgxOXhfRWRpbWF4X0FTVVMgPSAzNSwKKwlSVF9DSURfTkVUR0VBUiA9IDM2LAorCVJUX0NJRF9QTEFORVggPSAzNywKKwlSVF9DSURfQ0NfQyA9IDM4LAorfTsKKworZW51bSBod19kZXNjcyB7CisJSFdfREVTQ19PV04sCisJSFdfREVTQ19SWE9XTiwKKwlIV19ERVNDX1RYX05FWFRERVNDX0FERFIsCisJSFdfREVTQ19UWEJVRkZfQUREUiwKKwlIV19ERVNDX1JYQlVGRl9BRERSLAorCUhXX0RFU0NfUlhQS1RfTEVOLAorCUhXX0RFU0NfUlhFUk8sCisJSFdfREVTQ19SWF9QUkVQQVJFLAorfTsKKworZW51bSBwcmltZV9zYyB7CisJUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFID0gMCwKKwlQUklNRV9DSE5MX09GRlNFVF9MT1dFUiA9IDEsCisJUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVIgPSAyLAorfTsKKworZW51bSByZl90eXBlIHsKKwlSRl8xVDFSID0gMCwKKwlSRl8xVDJSID0gMSwKKwlSRl8yVDJSID0gMiwKKwlSRl8yVDJSX0dSRUVOID0gMywKK307CisKK2VudW0gaHRfY2hhbm5lbF93aWR0aCB7CisJSFRfQ0hBTk5FTF9XSURUSF8yMCA9IDAsCisJSFRfQ0hBTk5FTF9XSURUSF8yMF80MCA9IDEsCisJSFRfQ0hBTk5FTF9XSURUSF84MCA9IDIsCit9OworCisvKiBSZWY6IDgwMi4xMWkgc2VwYyBEMTAuMCA3LjMuMi4yNS4xCitDaXBoZXIgU3VpdGVzIEVuY3J5cHRpb24gQWxnb3JpdGhtcyAqLworZW51bSBydF9lbmNfYWxnIHsKKwlOT19FTkNSWVBUSU9OID0gMCwKKwlXRVA0MF9FTkNSWVBUSU9OID0gMSwKKwlUS0lQX0VOQ1JZUFRJT04gPSAyLAorCVJTRVJWRURfRU5DUllQVElPTiA9IDMsCisJQUVTQ0NNUF9FTkNSWVBUSU9OID0gNCwKKwlXRVAxMDRfRU5DUllQVElPTiA9IDUsCisJQUVTQ01BQ19FTkNSWVBUSU9OID0gNiwJLypJRUVFODAyLjExdyAqLworfTsKKworZW51bSBydGxfaGFsX3N0YXRlIHsKKwlfSEFMX1NUQVRFX1NUT1AgPSAwLAorCV9IQUxfU1RBVEVfU1RBUlQgPSAxLAorfTsKKworZW51bSBydGxfdmFyX21hcCB7CisJLypyZWcgbWFwICovCisJU1lTX0lTT19DVFJMID0gMCwKKwlTWVNfRlVOQ19FTiwKKwlTWVNfQ0xLLAorCU1BQ19SQ1JfQU0sCisJTUFDX1JDUl9BQiwKKwlNQUNfUkNSX0FDUkMzMiwKKwlNQUNfUkNSX0FDRiwKKwlNQUNfUkNSX0FBUCwKKwlNQUNfSElNUiwKKwlNQUNfSElNUkUsCisJTUFDX0hTSVNSLAorCisJLyplZnVzZSBtYXAgKi8KKwlFRlVTRV9URVNULAorCUVGVVNFX0NUUkwsCisJRUZVU0VfQ0xLLAorCUVGVVNFX0NMS19DVFJMLAorCUVGVVNFX1BXQ19FVjEyViwKKwlFRlVTRV9GRU5fRUxEUiwKKwlFRlVTRV9MT0FERVJfQ0xLX0VOLAorCUVGVVNFX0FOQThNLAorCUVGVVNFX0hXU0VUX01BWF9TSVpFLAorCUVGVVNFX01BWF9TRUNUSU9OX01BUCwKKwlFRlVTRV9SRUFMX0NPTlRFTlRfU0laRSwKKwlFRlVTRV9PT0JfUFJPVEVDVF9CWVRFU19MRU4sCisJRUZVU0VfQUNDRVNTLAorCS8qQ0FNIG1hcCAqLworCVJXQ0FNLAorCVdDQU1JLAorCVJDQU1PLAorCUNBTURCRywKKwlTRUNSLAorCVNFQ19DQU1fTk9ORSwKKwlTRUNfQ0FNX1dFUDQwLAorCVNFQ19DQU1fVEtJUCwKKwlTRUNfQ0FNX0FFUywKKwlTRUNfQ0FNX1dFUDEwNCwKKworCS8qSU1SIG1hcCAqLworCVJUTF9JTVJfQkNORE1BSU5UNiwJLypCZWFjb24gRE1BIEludGVycnVwdCA2ICovCisJUlRMX0lNUl9CQ05ETUFJTlQ1LAkvKkJlYWNvbiBETUEgSW50ZXJydXB0IDUgKi8KKwlSVExfSU1SX0JDTkRNQUlOVDQsCS8qQmVhY29uIERNQSBJbnRlcnJ1cHQgNCAqLworCVJUTF9JTVJfQkNORE1BSU5UMywJLypCZWFjb24gRE1BIEludGVycnVwdCAzICovCisJUlRMX0lNUl9CQ05ETUFJTlQyLAkvKkJlYWNvbiBETUEgSW50ZXJydXB0IDIgKi8KKwlSVExfSU1SX0JDTkRNQUlOVDEsCS8qQmVhY29uIERNQSBJbnRlcnJ1cHQgMSAqLworCVJUTF9JTVJfQkNORE9LOCwJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwIDggKi8KKwlSVExfSU1SX0JDTkRPSzcsCS8qQmVhY29uIFF1ZXVlIERNQSBPSyBJbnRlcnJ1cCA3ICovCisJUlRMX0lNUl9CQ05ET0s2LAkvKkJlYWNvbiBRdWV1ZSBETUEgT0sgSW50ZXJydXAgNiAqLworCVJUTF9JTVJfQkNORE9LNSwJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwIDUgKi8KKwlSVExfSU1SX0JDTkRPSzQsCS8qQmVhY29uIFF1ZXVlIERNQSBPSyBJbnRlcnJ1cCA0ICovCisJUlRMX0lNUl9CQ05ET0szLAkvKkJlYWNvbiBRdWV1ZSBETUEgT0sgSW50ZXJydXAgMyAqLworCVJUTF9JTVJfQkNORE9LMiwJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwIDIgKi8KKwlSVExfSU1SX0JDTkRPSzEsCS8qQmVhY29uIFF1ZXVlIERNQSBPSyBJbnRlcnJ1cCAxICovCisJUlRMX0lNUl9USU1FT1VUMiwJLypUaW1lb3V0IGludGVycnVwdCAyICovCisJUlRMX0lNUl9USU1FT1VUMSwJLypUaW1lb3V0IGludGVycnVwdCAxICovCisJUlRMX0lNUl9UWEZPVlcsCQkvKlRyYW5zbWl0IEZJRk8gT3ZlcmZsb3cgKi8KKwlSVExfSU1SX1BTVElNRU9VVCwJLypQb3dlciBzYXZlIHRpbWUgb3V0IGludGVycnVwdCAqLworCVJUTF9JTVJfQmNuSW50LAkJLypCZWFjb24gRE1BIEludGVycnVwdCAwICovCisJUlRMX0lNUl9SWEZPVlcsCQkvKlJlY2VpdmUgRklGTyBPdmVyZmxvdyAqLworCVJUTF9JTVJfUkRVLAkJLypSZWNlaXZlIERlc2NyaXB0b3IgVW5hdmFpbGFibGUgKi8KKwlSVExfSU1SX0FUSU1FTkQsCS8qRm9yIDkyQyxBVElNIFdpbmRvdyBFbmQgSW50ZXJydXB0ICovCisJUlRMX0lNUl9CRE9LLAkJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwICovCisJUlRMX0lNUl9ISUdIRE9LLAkvKkhpZ2ggUXVldWUgRE1BIE9LIEludGVycnVwdCAqLworCVJUTF9JTVJfQ09NRE9LLAkJLypDb21tYW5kIFF1ZXVlIERNQSBPSyBJbnRlcnJ1cHQqLworCVJUTF9JTVJfVEJET0ssCQkvKlRyYW5zbWl0IEJlYWNvbiBPSyBpbnRlcnJ1cCAqLworCVJUTF9JTVJfTUdOVERPSywJLypNYW5hZ2VtZW50IFF1ZXVlIERNQSBPSyBJbnRlcnJ1cHQgKi8KKwlSVExfSU1SX1RCREVSLAkJLypGb3IgOTJDLFRyYW5zbWl0IEJlYWNvbiBFcnJvciBJbnRlcnJ1cHQgKi8KKwlSVExfSU1SX0JLRE9LLAkJLypBQ19CSyBETUEgT0sgSW50ZXJydXB0ICovCisJUlRMX0lNUl9CRURPSywJCS8qQUNfQkUgRE1BIE9LIEludGVycnVwdCAqLworCVJUTF9JTVJfVklET0ssCQkvKkFDX1ZJIERNQSBPSyBJbnRlcnJ1cHQgKi8KKwlSVExfSU1SX1ZPRE9LLAkJLypBQ19WTyBETUEgSW50ZXJydXB0ICovCisJUlRMX0lNUl9ST0ssCQkvKlJlY2VpdmUgRE1BIE9LIEludGVycnVwdCAqLworCVJUTF9JTVJfSFNJU1JfSU5ELCAgLypIU0lTUiBJbnRlcnJ1cHQqLworCVJUTF9JQlNTX0lOVF9NQVNLUywJLyooUlRMX0lNUl9CY25JbnQgfCBSVExfSU1SX1RCRE9LIHwKKwkJCQkgKiBSVExfSU1SX1RCREVSKSAqLworCVJUTF9JTVJfQzJIQ01ELAkJLypmdyBpbnRlcnJ1cHQqLworCisJLypDQ0sgUmF0ZXMsIFR4SFQgPSAwICovCisJUlRMX1JDX0NDS19SQVRFMU0sCisJUlRMX1JDX0NDS19SQVRFMk0sCisJUlRMX1JDX0NDS19SQVRFNV81TSwKKwlSVExfUkNfQ0NLX1JBVEUxMU0sCisKKwkvKk9GRE0gUmF0ZXMsIFR4SFQgPSAwICovCisJUlRMX1JDX09GRE1fUkFURTZNLAorCVJUTF9SQ19PRkRNX1JBVEU5TSwKKwlSVExfUkNfT0ZETV9SQVRFMTJNLAorCVJUTF9SQ19PRkRNX1JBVEUxOE0sCisJUlRMX1JDX09GRE1fUkFURTI0TSwKKwlSVExfUkNfT0ZETV9SQVRFMzZNLAorCVJUTF9SQ19PRkRNX1JBVEU0OE0sCisJUlRMX1JDX09GRE1fUkFURTU0TSwKKworCVJUTF9SQ19IVF9SQVRFTUNTNywKKwlSVExfUkNfSFRfUkFURU1DUzE1LAorCisJUlRMX1JDX1ZIVF9SQVRFXzFTU19NQ1M3LAorCVJUTF9SQ19WSFRfUkFURV8xU1NfTUNTOCwKKwlSVExfUkNfVkhUX1JBVEVfMVNTX01DUzksCisJUlRMX1JDX1ZIVF9SQVRFXzJTU19NQ1M3LAorCVJUTF9SQ19WSFRfUkFURV8yU1NfTUNTOCwKKwlSVExfUkNfVkhUX1JBVEVfMlNTX01DUzksCisKKwkvKmtlZXAgaXQgbGFzdCAqLworCVJUTF9WQVJfTUFQX01BWCwKK307CisKKy8qRmlybXdhcmUgUFMgbW9kZSBmb3IgY29udHJvbCBMUFMuKi8KK2VudW0gX2Z3X3BzX21vZGUgeworCUZXX1BTX0FDVElWRV9NT0RFID0gMCwKKwlGV19QU19NSU5fTU9ERSA9IDEsCisJRldfUFNfTUFYX01PREUgPSAyLAorCUZXX1BTX0RUSU1fTU9ERSA9IDMsCisJRldfUFNfVk9JUF9NT0RFID0gNCwKKwlGV19QU19VQVBTRF9XTU1fTU9ERSA9IDUsCisJRldfUFNfVUFQU0RfTU9ERSA9IDYsCisJRldfUFNfSUJTU19NT0RFID0gNywKKwlGV19QU19XV0xBTl9NT0RFID0gOCwKKwlGV19QU19QTV9SYWRpb19PZmYgPSA5LAorCUZXX1BTX1BNX0NhcmRfRGlzYWJsZSA9IDEwLAorfTsKKworZW51bSBydF9wc21vZGUgeworCUVBQ1RJVkUsCQkvKkFjdGl2ZS9Db250aW51b3VzIGFjY2Vzcy4gKi8KKwlFTUFYUFMsCQkJLypNYXggcG93ZXIgc2F2ZSBtb2RlLiAqLworCUVGQVNUUFMsCQkvKkZhc3QgcG93ZXIgc2F2ZSBtb2RlLiAqLworCUVBVVRPUFMsCQkvKkF1dG8gcG93ZXIgc2F2ZSBtb2RlLiAqLworfTsKKworLypMRUQgcmVsYXRlZC4qLworZW51bSBsZWRfY3RsX21vZGUgeworCUxFRF9DVExfUE9XRVJfT04gPSAxLAorCUxFRF9DVExfTElOSyA9IDIsCisJTEVEX0NUTF9OT19MSU5LID0gMywKKwlMRURfQ1RMX1RYID0gNCwKKwlMRURfQ1RMX1JYID0gNSwKKwlMRURfQ1RMX1NJVEVfU1VSVkVZID0gNiwKKwlMRURfQ1RMX1BPV0VSX09GRiA9IDcsCisJTEVEX0NUTF9TVEFSVF9UT19MSU5LID0gOCwKKwlMRURfQ1RMX1NUQVJUX1dQUyA9IDksCisJTEVEX0NUTF9TVE9QX1dQUyA9IDEwLAorfTsKKworZW51bSBydGxfbGVkX3BpbiB7CisJTEVEX1BJTl9HUElPMCwKKwlMRURfUElOX0xFRDAsCisJTEVEX1BJTl9MRUQxLAorCUxFRF9QSU5fTEVEMgorfTsKKworLypRb1MgcmVsYXRlZC4qLworLyphY20gaW1wbGVtZW50YXRpb24gbWV0aG9kLiovCitlbnVtIGFjbV9tZXRob2QgeworCWVBY21XYXkwX1N3QW5kSHcgPSAwLAorCWVBY21XYXkxX0hXID0gMSwKKwllQWNtV2F5Ml9TVyA9IDIsCit9OworCitlbnVtIG1hY3BoeV9tb2RlIHsKKwlTSU5HTEVNQUNfU0lOR0xFUEhZID0gMCwKKwlEVUFMTUFDX0RVQUxQSFksCisJRFVBTE1BQ19TSU5HTEVQSFksCit9OworCitlbnVtIGJhbmRfdHlwZSB7CisJQkFORF9PTl8yXzRHID0gMCwKKwlCQU5EX09OXzVHLAorCUJBTkRfT05fQk9USCwKKwlCQU5ETUFYCit9OworCisvKmFjaS9haWZzbiBGaWVsZC4KK1JlZjogV01NIHNwZWMgMi4yLjI6IFdNRSBQYXJhbWV0ZXIgRWxlbWVudCwgcC4xMi4qLwordW5pb24gYWNpX2FpZnNuIHsKKwl1OCBjaGFyX2RhdGE7CisKKwlzdHJ1Y3QgeworCQl1OCBhaWZzbjo0OworCQl1OCBhY206MTsKKwkJdTggYWNpOjI7CisJCXU4IHJlc2VydmVkOjE7CisJfSBmOwkJCS8qIEZpZWxkICovCit9OworCisvKm1sbWUgcmVsYXRlZC4qLworZW51bSB3aXJlbGVzc19tb2RlIHsKKwlXSVJFTEVTU19NT0RFX1VOS05PV04gPSAweDAwLAorCVdJUkVMRVNTX01PREVfQSA9IDB4MDEsCisJV0lSRUxFU1NfTU9ERV9CID0gMHgwMiwKKwlXSVJFTEVTU19NT0RFX0cgPSAweDA0LAorCVdJUkVMRVNTX01PREVfQVVUTyA9IDB4MDgsCisJV0lSRUxFU1NfTU9ERV9OXzI0RyA9IDB4MTAsCisJV0lSRUxFU1NfTU9ERV9OXzVHID0gMHgyMCwKKwlXSVJFTEVTU19NT0RFX0FDXzVHID0gMHg0MCwKKwlXSVJFTEVTU19NT0RFX0FDXzI0RyA9IDB4ODAsCisJV0lSRUxFU1NfTU9ERV9BQ19PTkxZID0gMHgxMDAsCisJV0lSRUxFU1NfTU9ERV9NQVggPSAweDgwMAorfTsKKworZW51bSByYXRyX3RhYmxlX21vZGUgeworCVJBVFJfSU5YX1dJUkVMRVNTX05HQiA9IDAsCisJUkFUUl9JTlhfV0lSRUxFU1NfTkcgPSAxLAorCVJBVFJfSU5YX1dJUkVMRVNTX05CID0gMiwKKwlSQVRSX0lOWF9XSVJFTEVTU19OID0gMywKKwlSQVRSX0lOWF9XSVJFTEVTU19HQiA9IDQsCisJUkFUUl9JTlhfV0lSRUxFU1NfRyA9IDUsCisJUkFUUl9JTlhfV0lSRUxFU1NfQiA9IDYsCisJUkFUUl9JTlhfV0lSRUxFU1NfTUMgPSA3LAorCVJBVFJfSU5YX1dJUkVMRVNTX0FDXzVOID0gOCwKKwlSQVRSX0lOWF9XSVJFTEVTU19BQ18yNE4gPSA5LAorfTsKKworZW51bSBydGxfbGlua19zdGF0ZSB7CisJTUFDODAyMTFfTk9MSU5LID0gMCwKKwlNQUM4MDIxMV9MSU5LSU5HID0gMSwKKwlNQUM4MDIxMV9MSU5LRUQgPSAyLAorCU1BQzgwMjExX0xJTktFRF9TQ0FOTklORyA9IDMsCit9OworCitlbnVtIGFjdF9jYXRlZ29yeSB7CisJQUNUX0NBVF9RT1MgPSAxLAorCUFDVF9DQVRfRExTID0gMiwKKwlBQ1RfQ0FUX0JBID0gMywKKwlBQ1RfQ0FUX0hUID0gNywKKwlBQ1RfQ0FUX1dNTSA9IDE3LAorfTsKKworZW51bSBiYV9hY3Rpb24geworCUFDVF9BRERCQVJFUSA9IDAsCisJQUNUX0FEREJBUlNQID0gMSwKKwlBQ1RfREVMQkEgPSAyLAorfTsKKworZW51bSBydF9wb2xhcml0eV9jdGwgeworCVJUX1BPTEFSSVRZX0xPV19BQ1QgPSAwLAorCVJUX1BPTEFSSVRZX0hJR0hfQUNUID0gMSwKK307CisKKy8qIEFmdGVyIDgxODhFLCB3ZSB1c2UgVjIgcmVhc29uIGRlZmluZS4gODhDLzg3MjNBIHVzZSBWMSByZWFzb24uICovCitlbnVtIGZ3X3dvd19yZWFzb25fdjIgeworCUZXX1dPV19WMl9QVEtfVVBEQVRFX0VWRU5UID0gMHgwMSwKKwlGV19XT1dfVjJfR1RLX1VQREFURV9FVkVOVCA9IDB4MDIsCisJRldfV09XX1YyX0RJU0FTU09DX0VWRU5UID0gMHgwNCwKKwlGV19XT1dfVjJfREVBVVRIX0VWRU5UID0gMHgwOCwKKwlGV19XT1dfVjJfRldfRElTQ09OTkVDVF9FVkVOVCA9IDB4MTAsCisJRldfV09XX1YyX01BR0lDX1BLVF9FVkVOVCA9IDB4MjEsCisJRldfV09XX1YyX1VOSUNBU1RfUEtUX0VWRU5UID0gMHgyMiwKKwlGV19XT1dfVjJfUEFUVEVSTl9QS1RfRVZFTlQgPSAweDIzLAorCUZXX1dPV19WMl9SVEQzX1NTSURfTUFUQ0hfRVZFTlQgPSAweDI0LAorCUZXX1dPV19WMl9SRUFMV09XX1YyX1dBS0VVUFBLVCA9IDB4MzAsCisJRldfV09XX1YyX1JFQUxXT1dfVjJfQUNLTE9TVCA9IDB4MzEsCisJRldfV09XX1YyX1JFQVNPTl9NQVggPSAweGZmLAorfTsKKworZW51bSB3b2xwYXR0ZXJuX3R5cGUgeworCVVOSUNBU1RfUEFUVEVSTiA9IDAsCisJTVVMVElDQVNUX1BBVFRFUk4gPSAxLAorCUJST0FEQ0FTVF9QQVRURVJOID0gMiwKKwlET05UX0NBUkVfREEgPSAzLAorCVVOS05PV05fVFlQRSA9IDQsCit9OworCitzdHJ1Y3Qgb2N0ZXRfc3RyaW5nIHsKKwl1OCAqb2N0ZXQ7CisJdTE2IGxlbmd0aDsKK307CisKK3N0cnVjdCBydGxfaGRyXzNhZGRyIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBwYXlsb2FkWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF9pbmZvX2VsZW1lbnQgeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF9wcm9iZV9yc3AgeworCXN0cnVjdCBydGxfaGRyXzNhZGRyIGhlYWRlcjsKKwl1MzIgdGltZV9zdGFtcFsyXTsKKwlfX2xlMTYgYmVhY29uX2ludGVydmFsOworCV9fbGUxNiBjYXBhYmlsaXR5OworCS8qU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKKwkgICBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLworCXN0cnVjdCBydGxfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19wYWNrZWQ7CisKKy8qTEVEIHJlbGF0ZWQuKi8KKy8qbGVkcGluIElkZW50aWZ5IGhvdyB0byBpbXBsZW1lbnQgdGhpcyBTVyBsZWQuKi8KK3N0cnVjdCBydGxfbGVkIHsKKwl2b2lkICpodzsKKwllbnVtIHJ0bF9sZWRfcGluIGxlZHBpbjsKKwlib29sIGJfbGVkb247Cit9OworCitzdHJ1Y3QgcnRsX2xlZF9jdGwgeworCWJvb2wgYmxlZF9vcGVuZHJhaW47CisJc3RydWN0IHJ0bF9sZWQgc3dfbGVkMDsKKwlzdHJ1Y3QgcnRsX2xlZCBzd19sZWQxOworfTsKKworc3RydWN0IHJ0bF9xb3NfcGFyYW1ldGVycyB7CisJX19sZTE2IGN3X21pbjsKKwlfX2xlMTYgY3dfbWF4OworCXU4IGFpZnM7CisJdTggZmxhZzsKKwlfX2xlMTYgdHhfb3A7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnRfc21vb3RoX2RhdGEgeworCXUzMiBlbGVtZW50c1sxMDBdOwkvKmFycmF5IHRvIHN0b3JlIHZhbHVlcyAqLworCXUzMiBpbmRleDsJCS8qaW5kZXggdG8gY3VycmVudCBhcnJheSB0byBzdG9yZSAqLworCXUzMiB0b3RhbF9udW07CQkvKm51bSBvZiB2YWxpZCBlbGVtZW50cyAqLworCXUzMiB0b3RhbF92YWw7CQkvKnN1bSBvZiB2YWxpZCBlbGVtZW50cyAqLworfTsKKworc3RydWN0IHJ0bF9odF9hZ2cgeworCXUxNiB0eHFfaWQ7CisJdTE2IHdhaXRfZm9yX2JhOworCXUxNiBzdGFydF9pZHg7CisJdTY0IGJpdG1hcDsKKwl1MzIgcmF0ZV9uX2ZsYWdzOworCXU4IGFnZ19zdGF0ZTsKKwl1OCByeF9hZ2dfc3RhdGU7Cit9OworCitzdHJ1Y3QgcnRsX3RpZF9kYXRhIHsKKwl1MTYgc2VxX251bWJlcjsKKwlzdHJ1Y3QgcnRsX2h0X2FnZyBhZ2c7Cit9OworCitzdHJ1Y3QgcnNzaV9zdGEgeworCWxvbmcgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKK307CisKK3N0cnVjdCBydGxfc3RhX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1OCByYXRyX2luZGV4OworCXU4IHdpcmVsZXNzX21vZGU7CisJdTggbWltb19wczsKKwl1OCBtYWNfYWRkcls2XTsKKwlzdHJ1Y3QgcnRsX3RpZF9kYXRhIHRpZHNbTUFYX1RJRF9DT1VOVF07CisKKwkvKiBqdXN0IHVzZWQgZm9yIGFwIGFkaG9jIG9yIG1lc2gqLworCXN0cnVjdCByc3NpX3N0YSByc3NpX3N0YXQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdGlzdGljcyB7CisJdTMyIGNudF9wYXJpdHlfZmFpbDsKKwl1MzIgY250X3JhdGVfaWxsZWdhbDsKKwl1MzIgY250X2NyYzhfZmFpbDsKKwl1MzIgY250X21jc19mYWlsOworCXUzMiBjbnRfZmFzdF9mc3luY19mYWlsOworCXUzMiBjbnRfc2Jfc2VhcmNoX2ZhaWw7CisJdTMyIGNudF9vZmRtX2ZhaWw7CisJdTMyIGNudF9jY2tfZmFpbDsKKwl1MzIgY250X2FsbDsKKwl1MzIgY250X29mZG1fY2NhOworCXUzMiBjbnRfY2NrX2NjYTsKKwl1MzIgY250X2NjYV9hbGw7CisJdTMyIGNudF9id191c2M7CisJdTMyIGNudF9id19sc2M7Cit9OworCitzdHJ1Y3QgaW5pdF9nYWluIHsKKwl1OCB4YWFnY2NvcmUxOworCXU4IHhiYWdjY29yZTE7CisJdTggeGNhZ2Njb3JlMTsKKwl1OCB4ZGFnY2NvcmUxOworCXU4IGNjYTsKKworfTsKKworc3RydWN0IHdpcmVsZXNzX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIHR4Ynl0ZXN1bmljYXN0OworCXVuc2lnbmVkIGxvbmcgdHhieXRlc211bHRpY2FzdDsKKwl1bnNpZ25lZCBsb25nIHR4Ynl0ZXNicm9hZGNhc3Q7CisJdW5zaWduZWQgbG9uZyByeGJ5dGVzdW5pY2FzdDsKKworCWxvbmcgcnhfc25yX2RiWzRdOworCS8qQ29ycmVjdCBzbW9vdGhlZCBzcyBpbiBEYm0sIG9ubHkgdXNlZAorCSAgIGluIGRyaXZlciB0byByZXBvcnQgcmVhbCBwb3dlciBub3cuICovCisJbG9uZyByZWN2X3NpZ25hbF9wb3dlcjsKKwlsb25nIHNpZ25hbF9xdWFsaXR5OworCWxvbmcgbGFzdF9zaWdzdHJlbmd0aF9pbnBlcmNlbnQ7CisKKwl1MzIgcnNzaV9jYWxjdWxhdGVfY250OworCXUzMiBwd2RiX2FsbF9jbnQ7CisKKwkvKlRyYW5zZm9ybWVkLCBpbiBkYm0uIEJlYXV0aWZpZWQgc2lnbmFsCisJICAgc3RyZW5ndGggZm9yIFVJLCBub3QgY29ycmVjdC4gKi8KKwlsb25nIHNpZ25hbF9zdHJlbmd0aDsKKworCXU4IHJ4X3Jzc2lfcGVyY2VudGFnZVs0XTsKKwl1OCByeF9ldm1fZGJtWzRdOworCXU4IHJ4X2V2bV9wZXJjZW50YWdlWzJdOworCisJdTE2IHJ4X2Nmb19zaG9ydFs0XTsKKwl1MTYgcnhfY2ZvX3RhaWxbNF07CisKKwlzdHJ1Y3QgcnRfc21vb3RoX2RhdGEgdWlfcnNzaTsKKwlzdHJ1Y3QgcnRfc21vb3RoX2RhdGEgdWlfbGlua19xdWFsaXR5OworfTsKKworc3RydWN0IHJhdGVfYWRhcHRpdmUgeworCXU4IHJhdGVfYWRhcHRpdmVfZGlzYWJsZWQ7CisJdTggcmF0cl9zdGF0ZTsKKwl1MTYgcmVzZXJ2ZTsKKworCXUzMiBoaWdoX3Jzc2lfdGhyZXNoX2Zvcl9yYTsKKwl1MzIgaGlnaDJsb3dfcnNzaV90aHJlc2hfZm9yX3JhOworCXU4IGxvdzJoaWdoX3Jzc2lfdGhyZXNoX2Zvcl9yYTsKKwl1MzIgbG93X3Jzc2lfdGhyZXNoX2Zvcl9yYTsKKwl1MzIgdXBwZXJfcnNzaV90aHJlc2hvbGRfcmF0cjsKKwl1MzIgbWlkZGxldXBwZXJfcnNzaV90aHJlc2hvbGRfcmF0cjsKKwl1MzIgbWlkZGxlX3Jzc2lfdGhyZXNob2xkX3JhdHI7CisJdTMyIG1pZGRsZWxvd19yc3NpX3RocmVzaG9sZF9yYXRyOworCXUzMiBsb3dfcnNzaV90aHJlc2hvbGRfcmF0cjsKKwl1MzIgdWx0cmFsb3dfcnNzaV90aHJlc2hvbGRfcmF0cjsKKwl1MzIgbG93X3Jzc2lfdGhyZXNob2xkX3JhdHJfNDBtOworCXUzMiBsb3dfcnNzaV90aHJlc2hvbGRfcmF0cl8yMG07CisJdTggcGluZ19yc3NpX2VuYWJsZTsKKwl1MzIgcGluZ19yc3NpX3JhdHI7CisJdTMyIHBpbmdfcnNzaV90aHJlc2hfZm9yX3JhOworCXUzMiBsYXN0X3JhdHI7CisJdTggcHJlX3JhdHJfc3RhdGU7CisJdTggbGRwY190aHJlczsKKwlib29sIHVzZV9sZHBjOworCWJvb2wgbG93ZXJfcnRzX3JhdGU7CisJYm9vbCBpc19zcGVjaWFsX2RhdGE7Cit9OworCitzdHJ1Y3QgcmVnZF9wYWlyX21hcHBpbmcgeworCXUxNiByZWdfZG1uZW51bTsKKwl1MTYgcmVnXzVnaHpfY3RsOworCXUxNiByZWdfMmdoel9jdGw7Cit9OworCitzdHJ1Y3QgZHluYW1pY19wcmltYXJ5X2NjYSB7CisJdTggcHJpY2NhX2ZsYWc7CisJdTggaW50Zl9mbGFnOworCXU4IGludGZfdHlwZTsKKwl1OCBkdXBfcnRzX2ZsYWc7CisJdTggbW9uaXRvcl9mbGFnOworCXU4IGNoX29mZnNldDsKKwl1OCBtZl9zdGF0ZTsKK307CisKK3N0cnVjdCBydGxfcmVndWxhdG9yeSB7CisJY2hhciBhbHBoYTJbMl07CisJdTE2IGNvdW50cnlfY29kZTsKKwl1MTYgbWF4X3Bvd2VyX2xldmVsOworCXUzMiB0cF9zY2FsZTsKKwl1MTYgY3VycmVudF9yZDsKKwl1MTYgY3VycmVudF9yZF9leHQ7CisJaW50MTZfdCBwb3dlcl9saW1pdDsKKwlzdHJ1Y3QgcmVnZF9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7Cit9OworCitzdHJ1Y3QgcnRsX3Jma2lsbCB7CisJYm9vbCByZmtpbGxfc3RhdGU7CS8qMCBpcyBvZmYsIDEgaXMgb24gKi8KK307CisKKy8qZm9yIFAyUCBQUyoqLworI2RlZmluZQlQMlBfTUFYX05PQV9OVU0JCTIKKworZW51bSBwMnBfcm9sZSB7CisJUDJQX1JPTEVfRElTQUJMRSA9IDAsCisJUDJQX1JPTEVfREVWSUNFID0gMSwKKwlQMlBfUk9MRV9DTElFTlQgPSAyLAorCVAyUF9ST0xFX0dPID0gMworfTsKKworZW51bSBwMnBfcHNfc3RhdGUgeworCVAyUF9QU19ESVNBQkxFID0gMCwKKwlQMlBfUFNfRU5BQkxFID0gMSwKKwlQMlBfUFNfU0NBTiA9IDIsCisJUDJQX1BTX1NDQU5fRE9ORSA9IDMsCisJUDJQX1BTX0FMTFNUQVNMRUVQID0gNCwgLyogZm9yIFAyUCBHTyAqLworfTsKKworZW51bSBwMnBfcHNfbW9kZSB7CisJUDJQX1BTX05PTkUgPSAwLAorCVAyUF9QU19DVFdJTkRPVyA9IDEsCisJUDJQX1BTX05PQSA9IDIsCisJUDJQX1BTX01JWCA9IDMsIC8qIENUV2luZG93IGFuZCBOb0EqLworfTsKKworc3RydWN0IHJ0bF9wMnBfcHNfaW5mbyB7CisJZW51bSBwMnBfcHNfbW9kZSBwMnBfcHNfbW9kZTsgLyogaW5kaWNhdGUgcDJwIHBzIG1vZGUgKi8KKwllbnVtIHAycF9wc19zdGF0ZSBwMnBfcHNfc3RhdGU7IC8qIGluZGljYXRlIHAycCBwcyBzdGF0ZSAqLworCXU4IG5vYV9pbmRleDsgLyogSWRlbnRpZmllcyBhbmQgaW5zdGFuY2Ugb2YgTm90aWNlIG9mIEFic2VuY2UgdGltaW5nLiAqLworCS8qIENsaWVudCB0cmFmZmljIHdpbmRvdy4gQSBwZXJpb2Qgb2YgdGltZSBpbiBUVSBhZnRlciBUQlRULiAqLworCXU4IGN0d2luZG93OworCXU4IG9wcF9wczsgLyogb3Bwb3J0dW5pc3RpYyBwb3dlciBzYXZlLiAqLworCXU4IG5vYV9udW07IC8qIG51bWJlciBvZiBOb0EgZGVzY3JpcHRvciBpbiBQMlAgSUUuICovCisJLyogQ291bnQgZm9yIG93bmVyLCBUeXBlIG9mIGNsaWVudC4gKi8KKwl1OCBub2FfY291bnRfdHlwZVtQMlBfTUFYX05PQV9OVU1dOworCS8qIE1heCBkdXJhdGlvbiBmb3Igb3duZXIsIHByZWZlcnJlZCBvcgorCSAqIG1pbiBhY2NlcHRhYmxlIGR1cmF0aW9uIGZvciBjbGllbnQuICovCisJdTMyIG5vYV9kdXJhdGlvbltQMlBfTUFYX05PQV9OVU1dOworCS8qIExlbmd0aCBvZiBpbnRlcnZhbCBmb3Igb3duZXIsIHByZWZlcnJlZCBvcgorCSAqIG1heCBhY2NlcHRhYmxlIGludGVydmFsIG9mIGNsaWVudC4gKi8KKwl1MzIgbm9hX2ludGVydmFsW1AyUF9NQVhfTk9BX05VTV07CisJLyogc2NoZWR1bGUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHRoZSBUU0YgdGltZXIuICovCisJdTMyIG5vYV9zdGFydF90aW1lW1AyUF9NQVhfTk9BX05VTV07Cit9OworCitzdHJ1Y3QgcDJwX3BzX29mZmxvYWRfdCB7CisJdTggT2ZmbG9hZF9FbjoxOworCXU4IHJvbGU6MTsgLyogMTogT3duZXIsIDA6IENsaWVudCAqLworCXU4IENUV2luZG93X0VuOjE7CisJdTggTm9BMF9FbjoxOworCXU4IE5vQTFfRW46MTsKKwl1OCBBbGxTdGFTbGVlcDoxOworCXU4IGRpc2NvdmVyeToxOworCXU4IHJlc2VydmVkOjE7Cit9OworCisjZGVmaW5lIElRS19NQVRSSVhfUkVHX05VTQk4CisvKiBDaGFubmVsc18yXzRHX05VTSArIENoYW5uZWxzXzVHXzIwTV9OVU0gKyBDaGFubmVsc181RyAqLworI2RlZmluZSBJUUtfTUFUUklYX1NFVFRJTkdTX05VTQkoMTQgKyAyNCArIDIxKQorc3RydWN0IGlxa19tYXRyaXhfcmVncyB7CisJYm9vbCBiX2lxa19kb25lOworCWxvbmcgdmFsdWVbMV1bSVFLX01BVFJJWF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBydGxfcGh5IHsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiBwaHlyZWdfZGVmWzRdOwkvKlJhZGlvIEEvQi9DL0QgKi8KKwlzdHJ1Y3QgaW5pdF9nYWluIGluaXRnYWluX2JhY2t1cDsKKwllbnVtIGlvX3R5cGUgY3VycmVudF9pb190eXBlOworCisJdTggcmZfbW9kZTsKKwl1OCByZl90eXBlOworCXU4IGN1cnJlbnRfY2hhbl9idzsKKwl1OCBzZXRfYndtb2RlX2lucHJvZ3Jlc3M7CisJdTggc3dfY2hubF9pbnByb2dyZXNzOworCXU4IHN3X2Nobmxfc3RhZ2U7CisJdTggc3dfY2hubF9zdGVwOworCXU4IGN1cnJlbnRfY2hhbm5lbDsKKwl1OCBoMmNfYm94X251bTsKKwl1OCBzZXRfaW9faW5wcm9ncmVzczsKKwl1OCBsY2tfaW5wcm9ncmVzczsKKwlib29sIGlxa19pbnByb2dyZXNzOworCisJLyogcmVjb3JkIGZvciBwb3dlciB0cmFja2luZyAqLworCXMzMiByZWdfZTk0OworCXMzMiByZWdfZTljOworCXMzMiByZWdfZWE0OworCXMzMiByZWdfZWFjOworCXMzMiByZWdfZWI0OworCXMzMiByZWdfZWJjOworCXMzMiByZWdfZWM0OworCXMzMiByZWdfZWNjOworCXU4IHJmcGllbmFibGU7CisJdTggcmVzZXJ2ZV8wOworCXUxNiByZXNlcnZlXzE7CisJdTMyIHJlZ19jMDQsIHJlZ19jMDgsIHJlZ184NzQ7CisJdTMyIGFkZGFfYmFja3VwWzE2XTsKKwl1MzIgaXFrX21hY19iYWNrdXBbSVFLX01BQ19SRUdfTlVNXTsKKwl1MzIgaXFrX2JiX2JhY2t1cFsxMF07CisJYm9vbCBpcWtfaW5pdGlhbGl6ZWQ7CisKKwlib29sIHJmcGF0aF9yeF9lbmFibGVbTUFYX1JGX1BBVEhdOworCS8qSmFndWFyKi8KKwl1OCByZWdfODM3OworCS8qIER1bCBtYWMgKi8KKwlib29sIGJfbmVlZF9pcWs7CisJc3RydWN0IGlxa19tYXRyaXhfcmVncyBpcWtfbWF0cml4X3JlZ3NldHRpbmdbSVFLX01BVFJJWF9TRVRUSU5HU19OVU1dOworCisJYm9vbCBiX3JmcGlfZW5hYmxlOworCisJdTggcHdyZ3JvdXBfY250OworCXU4IGJjY2tfaGlnaF9wb3dlcjsKKwkvKiB0aGlzIGlzIGZvciA4OEUgJiA4NzIzQSAqLworCXUzMiBtY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W01BWF9QR19HUk9VUF1bMTZdOworCS8qIHRoaXMgaXMgZm9yIDkyRUUgKi8KKwl1MzIgdHhfcG93ZXJfYnlfcmF0ZV9vZmZzZXRbVFhfUFdSX0JZX1JBVEVfTlVNX0JBTkRdCisJCQkJICAgW1RYX1BXUl9CWV9SQVRFX05VTV9SRl0KKwkJCQkgICBbVFhfUFdSX0JZX1JBVEVfTlVNX1JGXQorCQkJCSAgIFtUWF9QV1JfQllfUkFURV9OVU1fU0VDVElPTl07CisJdTggdHhwd3JfYnlfcmF0ZV9iYXNlXzI0Z1tUWF9QV1JfQllfUkFURV9OVU1fUkZdCisJCQkJIFtUWF9QV1JfQllfUkFURV9OVU1fUkZdCisJCQkJIFtNQVhfQkFTRV9OVU1fSU5fUEhZX1JFR19QR18yNEddOworCisJdTggdHhwd3JfYnlfcmF0ZV9iYXNlXzVnW1RYX1BXUl9CWV9SQVRFX05VTV9SRl0KKwkJCQlbVFhfUFdSX0JZX1JBVEVfTlVNX1JGXQorCQkJCVtNQVhfQkFTRV9OVU1fSU5fUEhZX1JFR19QR181R107CisJdTggZGVmYXVsdF9pbml0aWFsZ2Fpbls0XTsKKworCS8qIHRoZSBjdXJyZW50IFR4IHBvd2VyIGxldmVsICovCisJdTggY3VyX2Nja190eHB3cmlkeDsKKwl1OCBjdXJfb2ZkbTI0Z190eHB3cmlkeDsKKwl1OCBjdXJfYncyMF90eHB3cmlkeDsKKwl1OCBjdXJfYnc0MF90eHB3cmlkeDsKKworCWNoYXIgdHhwd3JfbGltaXRfMl80Z1tNQVhfUkVHVUxBVElPTl9OVU1dCisJCQkJW01BWF8yXzRHX0JBTkRXSVRIX05VTV0KKwkJCQlbTUFYX1JBVEVfU0VDVElPTl9OVU1dCisJCQkJW0NIQU5ORUxfTUFYX05VTUJFUl8yR10KKwkJCQlbTUFYX1JGX1BBVEhfTlVNXTsKKwljaGFyIHR4cHdyX2xpbWl0XzVnW01BWF9SRUdVTEFUSU9OX05VTV0KKwkJCSAgIFtNQVhfNUdfQkFORFdJVEhfTlVNXQorCQkJICAgW01BWF9SQVRFX1NFQ1RJT05fTlVNXQorCQkJICAgW0NIQU5ORUxfTUFYX05VTUJFUl81R10KKwkJCSAgIFtNQVhfUkZfUEFUSF9OVU1dOworCisJdTMyIHJmcmVnX2Nobmx2YWxbMl07CisJYm9vbCBiX2Fwa19kb25lOworCXUzMiByZWdfcmYzY1syXTsJLyogcGF0aEEgLyBwYXRoQiAgKi8KKworCXUzMiBiYWNrdXBfcmZfMHgxYTsvKjkyZWUqLworCS8qIGJmc3luYyAqLworCXU4IGZyYW1lc3luYzsKKwl1MzIgZnJhbWVzeW5jX2MzNDsKKworCXU4IG51bV90b3RhbF9yZnBhdGg7CisJdTE2IHJmX3BhdGhtYXA7CisKKwllbnVtIHJ0X3BvbGFyaXR5X2N0bCBwb2xhcml0eV9jdGw7Cit9OworCisjZGVmaW5lIFJUTF9BR0dfU1RPUAkJCQkJCTAKKyNkZWZpbmUgUlRMX0FHR19QUk9HUkVTUwkJCQkJMQorI2RlZmluZSBSVExfQUdHX1NUQVJUCQkJCQkJMgorI2RlZmluZSBSVExfQUdHX09QRVJBVElPTkFMCQkJCQkzCisjZGVmaW5lIFJUTF9SWF9BR0dfU1RBUlQJCQkJCTEKKyNkZWZpbmUgUlRMX1JYX0FHR19TVE9QCQkJCQkJMAorCitzdHJ1Y3QgcnRsX3ByaXY7CitzdHJ1Y3QgcnRsX2lvIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKlBDSSBNRU0gbWFwICovCisJdW5zaWduZWQgbG9uZyBwY2lfbWVtX2VuZDsJLypzaGFyZWQgbWVtIGVuZCAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIHBjaV9tZW1fc3RhcnQ7CS8qc2hhcmVkIG1lbSBzdGFydCAqLworCisJLypQQ0kgSU8gbWFwICovCisJdW5zaWduZWQgbG9uZyBwY2lfYmFzZV9hZGRyOwkvKmRldmljZSBJL08gYWRkcmVzcyAqLworCisJdm9pZCAoKndyaXRlOF9hc3luYykoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTggdmFsKTsKKwl2b2lkICgqd3JpdGUxNl9hc3luYykoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7CisJdm9pZCAoKndyaXRlMzJfYXN5bmMpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpOworCisJdTggKCpyZWFkOF9zeW5jKShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKTsKKwl1MTYgKCpyZWFkMTZfc3luYykoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcik7CisJdTMyICgqcmVhZDMyX3N5bmMpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIpOworCit9OworCitzdHJ1Y3QgcnRsX21hYyB7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IG1hYzgwMjExX3JlZ2lzdGVyZWQ7CisJdTggYmVhY29uX2VuYWJsZWQ7CisKKwl1MzIgdHhfc3NfbnVtOworCXUzMiByeF9zc19udW07CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGU7CisKKwkvKlByb2JlIEJlYWNvbiBtYW5hZ2VtZW50ICovCisJZW51bSBydGxfbGlua19zdGF0ZSBsaW5rX3N0YXRlOworCisJaW50IG5fY2hhbm5lbHM7CisJaW50IG5fYml0cmF0ZXM7CisKKwlib29sIG9mZmNoYW5fZGVsZXk7CisJdTggcDJwOwkvKnVzaW5nIHAycCByb2xlKi8KKwlib29sIHAycF9pbl91c2U7CisKKwkvKmZpbHRlcnMgKi8KKwl1MzIgcnhfY29uZjsKKworCWJvb2wgYWN0X3NjYW5uaW5nOworCXU4IGNudF9hZnRlcl9saW5rZWQ7CisJYm9vbCBza2lwX3NjYW47CisKKwkvKiBlYXJseSBtb2RlICovCisJLyogc2tiIHdhaXQgcXVldWUgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl93YWl0cVtNQVhfVElEX0NPVU5UXTsKKworCS8qUkRHKi8KKwlib29sIHJkZ19lbjsKKworCXU4IGh0X3N0YmNfY2FwOworCXU4IGh0X2N1cl9zdGJjOworCisJLyp2aHQgc3VwcG9ydCovCisJdTggdmh0X2VuYWJsZTsKKwl1OCBid184MDsKKwl1OCB2aHRfY3VyX2xkcGM7CisJdTggdmh0X2N1cl9zdGJjOworCXU4IHZodF9zdGJjX2NhcDsKKwl1OCB2aHRfbGRwY19jYXA7CisKKwkvKkFQKi8KKwl1OCBic3NpZFs2XTsKKwl1MzIgdmVuZG9yOworCXUzMiBiYXNpY19yYXRlczsgLyogYi9nIHJhdGVzICovCisJdTggaHRfZW5hYmxlOworCXU4IGJ3XzQwOworCXU4IG1vZGU7CQkvKiB3aXJlbGVzcyBtb2RlICovCisJdTggc2xvdF90aW1lOworCXU4IHNob3J0X3ByZWFtYmxlOworCXU4IHVzZV9jdHNfcHJvdGVjdDsKKwl1OCBjdXJfNDBfcHJpbWVfc2M7CisJdTggY3VyXzQwX3ByaW1lX3NjX2JrOworCXU4IGN1cl84MF9wcmltZV9zYzsKKwl1NjQgdHNmOworCXU4IHJldHJ5X3Nob3J0OworCXU4IHJldHJ5X2xvbmc7CisJdTE2IGFzc29jX2lkOworCWJvb2wgYmhpZGRlbnNzaWQ7CisKKwkvKklCU1MqLworCWludCBiZWFjb25faW50ZXJ2YWw7CisKKwkvKkFNUERVKi8KKwl1OCBtaW5fc3BhY2VfY2ZnOwkvKkZvciBNaW4gc3BhY2luZyBjb25maWd1cmF0aW9ucyAqLworCXU4IG1heF9tc3NfZGVuc2l0eTsKKwl1OCBjdXJyZW50X2FtcGR1X2ZhY3RvcjsKKwl1OCBjdXJyZW50X2FtcGR1X2RlbnNpdHk7CisKKwkvKlFPUyAmIEVEQ0EgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNhX3BhcmFtW1JUTF9NQUM4MDIxMV9OVU1fUVVFVUVdOworCXN0cnVjdCBydGxfcW9zX3BhcmFtZXRlcnMgYWNbQUNfTUFYXTsKK307CisKK3N0cnVjdCBydGxfaGFsIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCWJvb2wgZHJpdmVyX2lzX2dvaW5ndG9fdW5sb2FkOworCWJvb2wgdXBfZmlyc3RfdGltZTsKKwlib29sIGJmaXJzdF9pbml0OworCWJvb2wgYmVpbmdfaW5pdF9hZGFwdGVyOworCWJvb2wgYl9iYnJmX3JlYWR5OworCWJvb2wgYl9tYWNfZnVuY19lbmFibGU7CisJYm9vbCBiX3ByZV9lZGNjYV9lbmFibGU7CisKKwllbnVtIGludGZfdHlwZSBpbnRlcmZhY2U7CisJdTE2IGh3X3R5cGU7CQkvKjkyYyBvciA5MmQgb3IgOTJzIGFuZCBzbyBvbiAqLworCXU4IGljX2NsYXNzOworCXU4IG9lbV9pZDsKKwl1MzIgdmVyc2lvbjsJCS8qdmVyc2lvbiBvZiBjaGlwICovCisJdTggc3RhdGU7CQkvKnN0b3AgMCwgc3RhcnQgMSAqLworCXU4IGJvYWRfdHlwZTsKKworCXU4IHBhX21vZGU7CisJdTggcGFfdHlwZV8yZzsKKwl1OCBwYV90eXBlXzVnOworCXU4IGxuYV90eXBlXzJnOworCXU4IGxuYV90eXBlXzVnOworCXU4IGV4dGVybmFsX3BhXzJnOworCXU4IGV4dGVybmFsX2xuYV8yZzsKKwl1OCBleHRlcm5hbF9wYV81ZzsKKwl1OCBleHRlcm5hbF9sbmFfNWc7CisJdTggcmZlX3R5cGU7CisKKwkvKmZpcm13YXJlICovCisJdTMyIGZ3c2l6ZTsKKwl1OCAqcGZpcm13YXJlOworCXUxNiBmd192ZXJzaW9uOworCXUxNiBmd19zdWJ2ZXJzaW9uOworCWJvb2wgYl9oMmNfc2V0aW5wcm9ncmVzczsKKwl1OCBsYXN0X2htZWJveG51bTsKKwlib29sIGJmd19yZWFkeTsKKworCS8qUmVzZXJ2ZSBwYWdlIHN0YXJ0IG9mZnNldCBleGNlcHQgYmVhY29uIGluIFR4US4gKi8KKwl1OCBmd19yc3ZkcGFnZV9zdGFydG9mZnNldDsKKwl1OCBoMmNfdHhjbWRfc2VxOworCXU4IGN1cnJlbnRfcmFfcmF0ZTsKKworCS8qIEZXIENtZCBJTyByZWxhdGVkICovCisJdTE2IGZ3Y21kX2lvbWFwOworCXUzMiBmd2NtZF9pb3BhcmFtOworCWJvb2wgc2V0X2Z3Y21kX2lucHJvZ3Jlc3M7CisJdTggY3VycmVudF9md2NtZF9pbzsKKworCWJvb2wgYmZ3X2Nsa19jaGFuZ2VfaW5fcHJvZ3Jlc3M7CisJYm9vbCBiYWxsb3dfc3dfdG9fY2hhbmdlX2h3Y2xjOworCXU4IGZ3X3BzX3N0YXRlOworCSBzdHJ1Y3QgcDJwX3BzX29mZmxvYWRfdCBwMnBfcHNfb2ZmbG9hZDsKKwkvKiovCisJYm9vbCBkcml2ZXJfZ29pbmcydW5sb2FkOworCisJLypBTVBEVSBpbml0IG1pbiBzcGFjZSovCisJdTggbWluc3BhY2VfY2ZnOwkvKkZvciBNaW4gc3BhY2luZyBjb25maWd1cmF0aW9ucyAqLworCisJLyogRHVsIG1hYyAqLworCWVudW0gbWFjcGh5X21vZGUgbWFjcGh5bW9kZTsKKwllbnVtIGJhbmRfdHlwZSBjdXJyZW50X2JhbmR0eXBlOwkvKiAwOjIuNEcsIDE6NUcgKi8KKwllbnVtIGJhbmRfdHlwZSBjdXJyZW50X2JhbmR0eXBlYmFja3VwOworCWVudW0gYmFuZF90eXBlIGJhbmRzZXQ7CisJLyogZHVhbCBNQUMgMC0tTWFjMCAxLS1NYWMxICovCisJdTMyIGludGVyZmFjZWluZGV4OworCS8qIGp1c3QgZm9yIER1bE1hYyBTM1M0ICovCisJdTggbWFjcGh5Y3RsX3JlZzsKKwlib29sIGJfZWFybHltb2RlX2VuYWJsZTsKKwl1OCBtYXhfZWFybHltb2RlX251bTsKKwkvKiBEdWwgbWFjKi8KKwlib29sIGR1cmluZ19tYWMwaW5pdF9yYWRpb2I7CisJYm9vbCBkdXJpbmdfbWFjMWluaXRfcmFkaW9hOworCWJvb2wgcmVsb2FkdHhwb3dlcmluZGV4OworCS8qIFRydWUgaWYgSU1SIG9yIElRSyAgaGF2ZSBkb25lCisJZm9yIDIuNEcgaW4gc2NhbiBwcm9ncmVzcyAqLworCWJvb2wgYl9sb2FkX2ltcmFuZGlxa19zZXR0aW5nX2ZvcjJnOworCisJYm9vbCBkaXNhYmxlX2Ftc2R1XzhrOworCWJvb2wgYm1hc3Rlcl9vZl9kbXNwOworCWJvb2wgYnNsYXZlX29mX2Rtc3A7CisKKwl1MTYgcnhfdGFnOy8qZm9yIDkyZWUqLworCXU4IHJ0c19lbjsKKworCS8qZm9yIHdvd2xhbiovCisJYm9vbCB3b3dfZW5hYmxlOworCWJvb2wgYl9lbnRlcl9wbnBfc2xlZXA7CisJYm9vbCBiX3dha2VfZnJvbV9wbnBfc2xlZXA7CisJYm9vbCB3b3dfZW5hYmxlZDsKKwlfX2tlcm5lbF90aW1lX3QgbGFzdF9zdXNwZW5kX3NlYzsKKwl1MzIgd293bGFuX2Z3c2l6ZTsKKwl1OCAqcF93b3dsYW5fZmlybXdhcmU7CisKKwl1OCBod19yb2ZfZW5hYmxlOyAvKkVuYWJsZSBHUElPWzldIGFzIFdMIFJGIEhXIFBEbiBzb3VyY2UqLworCisJYm9vbCByZWFsX3dvd192Ml9lbmFibGU7CisJYm9vbCByZV9pbml0X2xsdF90YWJsZTsKK307CisKK3N0cnVjdCBydGxfc2VjdXJpdHkgeworCS8qZGVmYXVsdCAwICovCisJYm9vbCB1c2Vfc3dfc2VjOworCisJYm9vbCBiZWluZ19zZXRrZXk7CisJYm9vbCB1c2VfZGVmYXVsdGtleTsKKwkvKkVuY3J5cHRpb24gQWxnb3JpdGhtIGZvciBVbmljYXN0IFBhY2tldCAqLworCWVudW0gcnRfZW5jX2FsZyBwYWlyd2lzZV9lbmNfYWxnb3JpdGhtOworCS8qRW5jcnlwdGlvbiBBbGdvcml0aG0gZm9yIEJyb2Nhc3QvTXVsdGljYXN0ICovCisJZW51bSBydF9lbmNfYWxnIGdyb3VwX2VuY19hbGdvcml0aG07CisJLypDYW0gRW50cnkgQml0bWFwICovCisJdTMyIGh3c2VjX2NhbV9iaXRtYXA7CisJdTggaHdzZWNfY2FtX3N0YV9hZGRyW1RPVEFMX0NBTV9FTlRSWV1bRVRIX0FMRU5dOworCS8qbG9jYWwgS2V5IGJ1ZmZlciwgaW5keCAwIGlzIGZvcgorCSAgIHBhaXJ3aXNlIGtleSAxLTQgaXMgZm9yIGFnb3VwIGtleS4gKi8KKwl1OCBrZXlfYnVmW0tFWV9CVUZfU0laRV1bTUFYX0tFWV9MRU5dOworCXU4IGtleV9sZW5bS0VZX0JVRl9TSVpFXTsKKworCS8qVGhlIHBvaW50ZXIgb2YgUGFpcndpc2UgS2V5LAorCSAgIGl0IGFsd2F5cyBwb2ludHMgdG8gS2V5QnVmWzRdICovCisJdTggKnBhaXJ3aXNlX2tleTsKK307CisKK3N0cnVjdCBydGxfZGlnIHsKKwl1OCBkaWdfZW5hYmxlX2ZsYWc7CisJdTggZGlnX2V4dF9wb3J0X3N0YWdlOworCisJdTMyIHJzc2lfbG93dGhyZXNoOworCXUzMiByc3NpX2hpZ2h0aHJlc2g7CisKKwl1MzIgZmFfbG93dGhyZXNoOworCXUzMiBmYV9oaWdodGhyZXNoOworCisJdTggY3Vyc3RhX2Nvbm5lY3RzdGF0ZTsKKwl1OCBwcmVzdGFfY29ubmVjdHN0YXRlOworCXU4IGN1cm11bHRpc3RhX2Nvbm5lY3RzdGF0ZTsKKworCXU4IHByZV9pZ3ZhbHVlOworCXU4IGN1cl9pZ3ZhbHVlOworCisJY2hhciBiYWNrb2ZmX3ZhbDsKKwljaGFyIGJhY2tvZmZfdmFsX3JhbmdlX21heDsKKwljaGFyIGJhY2tvZmZfdmFsX3JhbmdlX21pbjsKKwl1OCByeF9nYWluX3JhbmdlX21heDsKKwl1OCByeF9nYWluX3JhbmdlX21pbjsKKwl1OCByc3NpX3ZhbF9taW47CisJdTggbWluX3VuZGVjb3JhdGVkX3B3ZGJfZm9yX2RtOworCWxvbmcgbGFzdF9taW5fdW5kZWNvcmF0ZWRfcHdkYl9mb3JfZG07CisKKwl1OCBwcmVfY2NrX3BkX3N0YXRlOworCXU4IGN1cl9jY2tfcGRfc3RhdGU7CisKKwl1OCBsYXJnZV9mYV9oaXQ7CisJdTggZm9yYmlkZGVuX2lnaTsKKwl1MzIgcmVjb3Zlcl9jbnQ7CisKK307CisKK3N0cnVjdCBydGxfcHN0YmwgeworCXU4IHByZV9jY2FzdGF0ZTsKKwl1OCBjdXJfY2Nhc2F0ZTsKKworCXU4IHByZV9yZnN0YXRlOworCXU4IGN1cl9yZnN0YXRlOworCisJbG9uZyByc3NpX3ZhbF9taW47CisKK307CisKKyNkZWZpbmUgQVNTT0NJQVRFX0VOVFJZX05VTQkoMzIgKyAxKQorCitzdHJ1Y3QgZmFzdF9hbnRfdHJhaW5uaW5nIHsKKwl1OCBic3NpZFs2XTsKKwl1OCBhbnRzZWxfcnhfa2VlcF8wOworCXU4IGFudHNlbF9yeF9rZWVwXzE7CisJdTggYW50c2VsX3J4X2tlZXBfMjsKKwl1MzIgYW50X3N1bV9yc3NpWzddOworCXUzMiBhbnRfcnNzaV9jbnRbN107CisJdTMyIGFudF9hdmVfcnNzaVs3XTsKKwl1OCBmYXRfc3RhdGU7CisJdTMyIHRyYWluX2lkeDsKKwl1OCBhbnRzZWxfYVtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKKwl1OCBhbnRzZWxfYltBU1NPQ0lBVEVfRU5UUllfTlVNXTsKKwl1OCBhbnRzZWxfY1tBU1NPQ0lBVEVfRU5UUllfTlVNXTsKKwl1MzIgbWFpbl9hbnRfc3VtW0FTU09DSUFURV9FTlRSWV9OVU1dOworCXUzMiBhdXhfYW50X3N1bVtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKKwl1MzIgbWFpbl9hbnRfY250W0FTU09DSUFURV9FTlRSWV9OVU1dOworCXUzMiBhdXhfYW50X2NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKKwl1OCByeF9pZGxlX2FudDsKKwlib29sIGJfYmVjb21lbGlua2VkOworfTsKKworc3RydWN0IGRtX3BoeV9kYmdfaW5mbyB7CisJY2hhciByeF9zbnJkYls0XTsKKwl1NjQgbnVtX3FyeV9waHlfc3RhdHVzOworCXU2NCBudW1fcXJ5X3BoeV9zdGF0dXNfY2NrOworCXU2NCBudW1fcXJ5X3BoeV9zdGF0dXNfb2ZkbTsKKwl1MTYgbnVtX3FyeV9iZWFjb25fcGt0OworCXUxNiBudW1fbm9uX2JlX3BrdDsKKwlzMzIgcnhfZXZtWzRdOworfTsKKworc3RydWN0IHJ0bF9kbSB7CisJLypQSFkgc3RhdHVzIGZvciBETSAqLworCWxvbmcgZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKwlsb25nIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CS8qb3V0IGRtICovCisJbG9uZyBlbnRyeV9tYXhfdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCWJvb2wgYl9kbV9pbml0aWFsZ2Fpbl9lbmFibGU7CisJYm9vbCBiZHluYW1pY190eHBvd2VyX2VuYWJsZTsKKwlib29sIGJjdXJyZW50X3R1cmJvX2VkY2E7CisJYm9vbCBiaXNfYW55X25vbmJlcGt0czsJLypvdXQgZG0gKi8KKwlib29sIGJpc19jdXJfcmRsc3RhdGU7CisJYm9vbCBidHhwb3dlcl90cmFja2luZ2luaXQ7CisJYm9vbCBiX2Rpc2FibGVfZnJhbWVidXJzdGluZzsKKwlib29sIGJfY2NrX2luY2gxNDsKKwlib29sIGJ0eHBvd2VyX3RyYWNraW5nOworCWJvb2wgYl91c2VyYW1hc2s7CisJYm9vbCBicmZwYXRoX3J4ZW5hYmxlWzRdOworCWJvb2wgYmluZm9ybV9md19kcml2ZXJjdHJsZG07CisJYm9vbCBiY3VycmVudF9tcmNfc3dpdGNoOworCXU4IHR4cG93ZXJjb3VudDsKKworCXU4IHRoZXJtYWx2YWx1ZV9yeGdhaW47CisJdTggdGhlcm1hbHZhbHVlX2lxazsKKwl1OCB0aGVybWFsdmFsdWVfbGNrOworCXU4IHRoZXJtYWx2YWx1ZTsKKwl1OCB0aGVybWFsdmFsdWVfYXZnW0FWR19USEVSTUFMX05VTV07CisJdTggdGhlcm1hbHZhbHVlX2F2Z19pbmRleDsKKwlib29sIGJkb25lX3R4cG93ZXI7CisJdTggbGFzdF9kdHBfbHZsOworCXU4IGR5bmFtaWNfdHhoaWdocG93ZXJfbHZsOwkvKlR4IGhpZ2ggcG93ZXIgbGV2ZWwgKi8KKwl1OCBkbV9mbGFnOwkvKkluZGljYXRlIGlmIGVhY2ggZHluYW1pYyBtZWNoYW5pc20ncyBzdGF0dXMuICovCisJdTggZG1fdHlwZTsKKwl1OCB0eHBvd2VyX3RyYWNrX2NvbnRyb2w7CisJYm9vbCBiaW50ZXJydXB0X21pZ3JhdGlvbjsKKwlib29sIGJkaXNhYmxlX3R4X2ludDsKKwljaGFyIG9mZG1faW5kZXhbTUFYX1JGX1BBVEhdOworCWNoYXIgY2NrX2luZGV4OworCXU4IGRlZmF1bHRfb2ZkbV9pbmRleDsKKwl1OCBkZWZhdWx0X2Nja19pbmRleDsKKwljaGFyIGRlbHRhX3Bvd2VyX2luZGV4W01BWF9SRl9QQVRIXTsKKwljaGFyIGRlbHRhX3Bvd2VyX2luZGV4X2xhc3RbTUFYX1JGX1BBVEhdOworCWNoYXIgcG93ZXJfaW5kZXhfb2Zmc2V0W01BWF9SRl9QQVRIXTsKKwljaGFyIGFib3NsdXRlX29mZG1fc3dpbmdfaWR4W01BWF9SRl9QQVRIXTsKKwljaGFyIHJlbW5hbnRfb2ZkbV9zd2luZ19pZHhbTUFYX1JGX1BBVEhdOworCWNoYXIgcmVtbmFudF9jY2tfaWR4OworCWJvb2wgbW9kaWZ5X3R4YWdjX2ZsYWdfcGF0aF9hOworCWJvb2wgbW9kaWZ5X3R4YWdjX2ZsYWdfcGF0aF9iOworCisJYm9vbCBiX29uZV9lbnRyeV9vbmx5OworCXN0cnVjdCBkbV9waHlfZGJnX2luZm8gZGJnaW5mbzsKKwkvKiBEeW5hbWljIEFUQyBzd2l0Y2ggKi8KKworCWJvb2wgYXRjX3N0YXR1czsKKwlib29sIGxhcmdlX2Nmb19oaXQ7CisJYm9vbCBpc19mcmVlemU7CisJaW50IGNmb190YWlsWzJdOworCWludCBjZm9fYXZlX3ByZTsKKwlpbnQgY3J5c3RhbF9jYXA7CisJdTggY2ZvX3RocmVzaG9sZDsKKwl1MzIgcGFja2V0X2NvdW50OworCXUzMiBwYWNrZXRfY291bnRfcHJlOworCXU4IHR4X3JhdGU7CisKKworCS8qODhlIHR4IHBvd2VyIHRyYWNraW5nKi8KKwl1OCBiYl9zd2luZ19pZHhfb2ZkbVsyXTsKKwl1OCBiYl9zd2luZ19pZHhfb2ZkbV9jdXJyZW50OworCXU4IGJiX3N3aW5nX2lkeF9vZmRtX2Jhc2VbTUFYX1JGX1BBVEhdOworCWJvb2wgYmJfc3dpbmdfZmxhZ19PZmRtOworCXU4IGJiX3N3aW5nX2lkeF9jY2s7CisJdTggYmJfc3dpbmdfaWR4X2Nja19jdXJyZW50OworCXU4IGJiX3N3aW5nX2lkeF9jY2tfYmFzZTsKKwlib29sIGJiX3N3aW5nX2ZsYWdfY2NrOworCisJY2hhciBiYl9zd2luZ19kaWZmXzJnOworCWNoYXIgYmJfc3dpbmdfZGlmZl81ZzsKKworCS8qIERNU1AgKi8KKwlib29sIHN1cHBfcGh5bW9kZV9zd2l0Y2g7CisKKwkvKiBEdWxNYWMgKi8KKwlzdHJ1Y3QgcnRsX2RpZyBkbV9kaWd0YWJsZTsKKwlzdHJ1Y3QgcnRsX3BzdGJsIGRtX3BzdGFibGU7CisJc3RydWN0IGZhc3RfYW50X3RyYWlubmluZyBmYXRfdGFibGU7CisKKwl1OCBsaW5rZWRfaW50ZXJ2YWw7CisKKwl1NjQgbGFzdF90eF9va19jbnQ7CisJdTY0IGxhc3Rfcnhfb2tfY250OworCisJYm9vbCBjY2tfaGlnaF9wb3dlcjsKK307CisKKyNkZWZpbmUJRUZVU0VfTUFYX0xPR0lDQUxfU0laRQkJMjU2CisKK3N0cnVjdCBydGxfZWZ1c2UgeworCWJvb2wgYmF1dG9Mb2FkX29rOworCWJvb2wgYm9vdGZyb21lZnVzZTsKKwl1MTYgbWF4X3BoeXNpY2FsX3NpemU7CisKKwl1OCBlZnVzZV9tYXBbMl1bRUZVU0VfTUFYX0xPR0lDQUxfU0laRV07CisJdTE2IGVmdXNlX3VzZWRieXRlczsKKwl1OCBlZnVzZV91c2VkcGVyY2VudGFnZTsKKwl1OCBhdXRvbG9hZF9mYWlsZmxhZzsKKwl1OCBhdXRvbG9hZF9zdGF0dXM7CisKKwlzaG9ydCBlcHJvbXR5cGU7CisJdTE2IGVlcHJvbV92aWQ7CisJdTE2IGVlcHJvbV9kaWQ7CisJdTE2IGVlcHJvbV9zdmlkOworCXUxNiBlZXByb21fc21pZDsKKwl1OCBlZXByb21fb2VtaWQ7CisJdTE2IGVlcHJvbV9jaGFubmVscGxhbjsKKwl1OCBlZXByb21fdmVyc2lvbjsKKworCXU4IGRldl9hZGRyWzZdOworCXU4IGJvYXJkX3R5cGU7CisJdTggd293bGFuX2VuYWJsZTsKKwl1OCBhbnRlbm5hX2Rpdl9jZmc7CisJdTggYW50ZW5uYV9kaXZfdHlwZTsKKworCWJvb2wgYl90eHB3cl9mcm9tZXByb207CisJdTggZWVwcm9tX2NyeXN0YWxjYXA7CisJdTggZWVwcm9tX3Rzc2lbMl07CisJdTggZWVwcm9tX3Rzc2lfNWdbM11bMl07IC8qIGZvciA1R0wvNUdNLzVHSCBiYW5kLiAqLworCXU4IGVlcHJvbV9wd3JsaW1pdF9odDIwW0NIQU5ORUxfR1JPVVBfTUFYXTsKKwl1OCBlZXByb21fcHdybGltaXRfaHQ0MFtDSEFOTkVMX0dST1VQX01BWF07CisJdTggZWVwcm9tX2NobmxhcmVhX3R4cHdyX2Nja1syXVtDSEFOTkVMX0dST1VQX01BWF8yR107CisJdTggZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMXNbMl1bQ0hBTk5FTF9HUk9VUF9NQVhdOworCXU4IGVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzJzZGlpZlsyXVtDSEFOTkVMX0dST1VQX01BWF07CisKKworCXU4IGludGVybmFsX3BhXzVnWzJdOwkvKiBwYXRoQSAvIHBhdGhCICovCisJdTggZWVwcm9tX2M5OworCXU4IGVlcHJvbV9jYzsKKworCS8qRm9yIHBvd2VyIGdyb3VwICovCisJdTggZWVwcm9tX3B3cmdyb3VwWzJdWzNdOworCXU4IHB3cmdyb3VwX2h0MjBbMl1bQ0hBTk5FTF9NQVhfTlVNQkVSXTsKKwl1OCBwd3Jncm91cF9odDQwWzJdW0NIQU5ORUxfTUFYX05VTUJFUl07CisKKwl1OCB0eHB3cmxldmVsX2Nja1tNQVhfUkZfUEFUSF1bQ0hBTk5FTF9NQVhfTlVNQkVSXzJHXTsKKwkvKkZvciBIVCA0ME1IWiBwd3IgKi8KKwl1OCB0eHB3cmxldmVsX2h0NDBfMXNbTUFYX1JGX1BBVEhdW0NIQU5ORUxfTUFYX05VTUJFUl07CisJLypGb3IgSFQgNDBNSFogcHdyICovCisJdTggdHhwd3JsZXZlbF9odDQwXzJzW01BWF9SRl9QQVRIXVtDSEFOTkVMX01BWF9OVU1CRVJdOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKwkgKiA4MTkyQ0VcODE5MlNFXDgxOTJERVw4NzIzQUUgdXNlIHRoZSBmb2xsb3dpbmcgNCBhcnJheXMsCisJICogb3RoZXIgSUNzICg4MTg4RUVcODcyM0JFXDgxOTJFRVw4ODEyQUUuLi4pCisJICogZGVmaW5lIG5ldyBhcnJheXMgaW4gV2luZG93cyBjb2RlLgorCSAqIEJVVCwgaW4gbGludXggY29kZSwgd2UgdXNlIHRoZSBzYW1lIGFycmF5IGZvciBhbGwgSUNzLgorCSAqCisJICogVGhlIENvcnJlc3BvbmRhbmNlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGFycmF5cyBpczoKKwkgKiB0eHB3cl9jY2tkaWZmW11bXSA9PSBDQ0tfMjRHX0RpZmZbXVtdCisJICogdHhwd3JfaHQyMGRpZmZbXVtdID09IEJXMjBfMjRHX0RpZmZbXVtdCisJICogdHhwd3JfaHQ0MGRpZmZbXVtdID09IEJXNDBfMjRHX0RpZmZbXVtdCisJICogdHhwd3JfbGVnYWN5aHRkaWZmW11bXSA9PSBPRkRNXzI0R19EaWZmW11bXQorCSAqCisJICogU2l6ZXMgb2YgdGhlc2UgYXJyYXlzIGFyZSBkZWNpZGVkIGJ5IHRoZSBsYXJnZXIgb25lcy4KKwkgKi8KKwljaGFyIHR4cHdyX2Nja2RpZmZbTUFYX1JGX1BBVEhdW0NIQU5ORUxfTUFYX05VTUJFUl07CisJY2hhciB0eHB3cl9odDIwZGlmZltNQVhfUkZfUEFUSF1bQ0hBTk5FTF9NQVhfTlVNQkVSXTsKKwljaGFyIHR4cHdyX2h0NDBkaWZmW01BWF9SRl9QQVRIXVtDSEFOTkVMX01BWF9OVU1CRVJdOworCWNoYXIgdHhwd3JfbGVnYWN5aHRkaWZmW01BWF9SRl9QQVRIXVtDSEFOTkVMX01BWF9OVU1CRVJdOworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJdTggdHhwd3JfNWdfYnc0MGJhc2VbTUFYX1JGX1BBVEhdW0NIQU5ORUxfTUFYX05VTUJFUl07CisJdTggdHhwd3JfNWdfYnc4MGJhc2VbTUFYX1JGX1BBVEhdW0NIQU5ORUxfTUFYX05VTUJFUl81R184ME1dOworCWNoYXIgdHhwd3JfNWdfb2ZkbWRpZmZbTUFYX1JGX1BBVEhdW01BWF9UWF9DT1VOVF07CisJY2hhciB0eHB3cl81Z19idzIwZGlmZltNQVhfUkZfUEFUSF1bTUFYX1RYX0NPVU5UXTsKKwljaGFyIHR4cHdyXzVnX2J3NDBkaWZmW01BWF9SRl9QQVRIXVtNQVhfVFhfQ09VTlRdOworCWNoYXIgdHhwd3JfNWdfYnc4MGRpZmZbTUFYX1JGX1BBVEhdW01BWF9UWF9DT1VOVF07CisKKwl1OCB0eHB3cl9zYWZldHlmbGFnOwkJLyogQmFuZCBlZGdlIGVuYWJsZSBmbGFnICovCisJdTE2IGVlcHJvbV90eHBvd2VyZGlmZjsKKwl1OCBsZWdhY3lfaHR0eHBvd2VyZGlmZjsJLyogTGVnYWN5IHRvIEhUIHJhdGUgcG93ZXIgZGlmZiAqLworCXU4IGFudGVubmFfdHhwd2RpZmZbM107CisKKwl1OCBlZXByb21fcmVndWxhdG9yeTsKKwl1OCBlZXByb21fdGhlcm1hbG1ldGVyOworCXU4IHRoZXJtYWxtZXRlclsyXTsvKlRoZXJtYWxNZXRlciwgaW5kZXggMCBmb3IgUkZJQzAsIGFuZCAxIGZvciBSRklDMSAqLworCXUxNiB0c3NpXzEzZGJtOworCXU4IGNyeXN0YWxjYXA7CQkvKiBDcnlzdGFsQ2FwLiAqLworCXU4IGRlbHRhX2lxazsKKwl1OCBkZWx0YV9sY2s7CisKKwl1OCBsZWdhY3lfaHRfdHhwb3dlcmRpZmY7CS8qTGVnYWN5IHRvIEhUIHJhdGUgcG93ZXIgZGlmZiAqLworCWJvb2wgYl9hcGtfdGhlcm1hbG1ldGVyaWdub3JlOworCisJYm9vbCBiMXgxX3JlY3Zjb21iaW5lOworCWJvb2wgYjFzc19zdXBwb3J0OworCisJLypjaGFubmVsIHBsYW4gKi8KKwl1OCBjaGFubmVsX3BsYW47Cit9OworCitzdHJ1Y3QgcnRsX3BzX2N0bCB7CisJYm9vbCBwd3Jkb21haW5fcHJvdGVjdDsKKwlib29sIGJfaW5fcG93ZXJzYXZlbW9kZTsKKwlib29sIHJmY2hhbmdlX2lucHJvZ3Jlc3M7CisJYm9vbCBiX3N3cmZfcHJvY2Vzc2luZzsKKwlib29sIGJfaHdyYWRpb29mZjsKKwkvKgorCSAqIGp1c3QgZm9yIFBDSUUgQVNQTQorCSAqIElmIGl0IHN1cHBvcnRzIEFTUE0sIE9mZnNldFs1NjBoXSA9IDB4NDAsCisJICogb3RoZXJ3aXNlIE9mZnNldFs1NjBoXSA9IDB4MDAuCisJICogKi8KKwlib29sIGJfc3VwcG9ydF9hc3BtOworCWJvb2wgYl9zdXBwb3J0X2JhY2tkb29yOworCisJLypmb3IgTFBTICovCisJZW51bSBydF9wc21vZGUgZG90MTFfcHNtb2RlOwkvKlBvd2VyIHNhdmUgbW9kZSBjb25maWd1cmVkLiAqLworCWJvb2wgYl9zd2N0cmxfbHBzOworCWJvb2wgYl9md2N0cmxfbHBzOworCXU4IGZ3Y3RybF9wc21vZGU7CisJLypGb3IgRncgY29udHJvbCBMUFMgbW9kZSAqLworCXU4IGJfcmVnX2Z3Y3RybF9scHM7CisJLypSZWNvcmQgRncgUFMgbW9kZSBzdGF0dXMuICovCisJYm9vbCBiX2Z3X2N1cnJlbnRfaW5wc21vZGU7CisJdTggcmVnX21heF9scHNfYXdha2VpbnR2bDsKKwlib29sIHJlcG9ydF9saW5rZWQ7CisJYm9vbCBiX2xvd19wb3dlcl9lbmFibGU7Lypmb3IgMzJrKi8KKworCS8qZm9yIElQUyAqLworCWJvb2wgYl9pbmFjdGl2ZXBzOworCisJdTMyIHJmb2ZmX3JlYXNvbjsKKworCS8qUkYgT0ZGIExldmVsICovCisJdTMyIGN1cl9wc19sZXZlbDsKKwl1MzIgcmVnX3JmcHNfbGV2ZWw7CisKKwkvKmp1c3QgZm9yIFBDSUUgQVNQTSAqLworCXU4IGNvbnN0X2FtZHBjaV9hc3BtOworCisJZW51bSByZl9wd3JzdGF0ZSBpbmFjdGl2ZV9wd3JzdGF0ZTsKKwllbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlOwkvKmN1ciBwb3dlciBzdGF0ZSAqLworCisJLyogZm9yIFNXIExQUyovCisJYm9vbCBzd19wc19lbmFibGVkOworCWJvb2wgc3RhdGU7CisJYm9vbCBzdGF0ZV9pbmFwOworCWJvb2wgbXVsdGlfYnVmZmVyZWQ7CisJdTE2IG51bGxmdW5jX3NlcTsKKwl1bnNpZ25lZCBpbnQgZHRpbV9jb3VudGVyOworCXVuc2lnbmVkIGludCBzbGVlcF9tczsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfc2xlZXBfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYXdha2VfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZGVsYXlscHNfc3RhbXBfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZHRpbTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYmVhY29uOworCXVuc2lnbmVkIGxvbmcgbGFzdF9hY3Rpb247CisJdW5zaWduZWQgbG9uZyBsYXN0X3NsZXB0OworCisJLypGb3IgUDJQIFBTICovCisJc3RydWN0IHJ0bF9wMnBfcHNfaW5mbyBwMnBfcHNfaW5mbzsKKwl1OCBwd3JfbW9kZTsKKwl1OCBzbWFydF9wczsKKworCS8qIHdha2UgdXAgb24gbGluZSAqLworCXU4IHdvX3dsYW5fbW9kZTsKKwl1OCBhcnBfb2ZmbG9hZF9lbmFibGU7CisJdTggZ3RrX29mZmxvYWRfZW5hYmxlOworCS8qIFVzZWQgZm9yIFdPTCwgaW5kaWNhdGVzIHRoZSByZWFzb24gZm9yIHdha2luZyBldmVudC4qLworCXUzMiB3YWtldXBfcmVhc29uOworCS8qIFJlY29yZCB0aGUgbGFzdCB3YWtpbmcgdGltZSBmb3IgY29tcGFyaXNvbiB3aXRoIHNldHRpbmcga2V5LiAqLworCXU2NCBsYXN0X3dha2V1cF90aW1lOworfTsKKworc3RydWN0IHJ0bF9zdGF0cyB7CisJdTggcHNhZGRyW0VUSF9BTEVOXTsKKwl1MzIgbWFjX3RpbWVbMl07CisJczggcnNzaTsKKwl1OCBzaWduYWw7CisJdTggbm9pc2U7CisJdTggcmF0ZTsJCS8qIGh3IGRlc2MgcmF0ZSAqLworCXU4IHJhd2RhdGE7CisJdTggcmVjZWl2ZWRfY2hhbm5lbDsKKwl1OCBjb250cm9sOworCXU4IG1hc2s7CisJdTggZnJlcTsKKwl1MTYgbGVuOworCXU2NCB0c2Y7CisJdTMyIGJlYWNvbl90aW1lOworCXU4IG5pY190eXBlOworCXUxNiBsZW5ndGg7CisJdTggc2lnbmFscXVhbGl0eTsJLyppbiAwLTEwMCBpbmRleC4gKi8KKwkvKgorCSAqIFJlYWwgcG93ZXIgaW4gZEJtIGZvciB0aGlzIHBhY2tldCwKKwkgKiBubyBiZWF1dGlmaWNhdGlvbiBhbmQgYWdncmVnYXRpb24uCisJICogKi8KKwlzMzIgcmVjdnNpZ25hbHBvd2VyOworCXM4IHJ4cG93ZXI7CQkvKmluIGRCbSBUcmFuc2xhdGUgZnJvbSBQV2RCICovCisJdTggc2lnbmFsc3RyZW5ndGg7CS8qaW4gMC0xMDAgaW5kZXguICovCisJdTE2IGJfaHdlcnJvcjoxOworCXUxNiBiX2NyYzoxOworCXUxNiBiX2ljdjoxOworCXUxNiBiX3Nob3J0cHJlYW1ibGU6MTsKKwl1MTYgYW50ZW5uYToxOworCXUxNiBkZWNyeXB0ZWQ6MTsKKwl1MTYgd2FrZXVwOjE7CisJdTMyIHRpbWVzdGFtcF9sb3c7CisJdTMyIHRpbWVzdGFtcF9oaWdoOworCWJvb2wgYl9zaGlmdDsKKworCXU4IHJ4X2RydmluZm9fc2l6ZTsKKwl1OCByeF9idWZzaGlmdDsKKwlib29sIGJfaXNhbXBkdTsKKwlib29sIGJfaXNmaXJzdF9hbXBkdTsKKwlib29sIHJ4X2lzNDBNaHpwYWNrZXQ7CisJdTggcnhfcGFja2V0X2J3OworCXUzMiByeF9wd2RiX2FsbDsKKwl1OCByeF9taW1vX3NpZ25hbHN0cmVuZ3RoWzRdOwkvKmluIDB+MTAwIGluZGV4ICovCisJczggcnhfbWltb19zaWduYWxxdWFsaXR5WzRdOworCXU4IHJ4X21pbW9fZXZtX2RibVs0XTsKKwl1MTYgY2ZvX3Nob3J0WzRdOwkJLyogcGVyLXBhdGgncyBDZm9fc2hvcnQgKi8KKwl1MTYgY2ZvX3RhaWxbNF07CisKKwl1OCByeF9wd3JbNF07IC8qIHBlci1wYXRoJ3MgcHdkYiAqLworCXU4IHJ4X3Nucls0XTsgLyogcGVyLXBhdGgncyBTTlIgKi8KKwl1OCBiYW5kd2lkdGg7CisJdTggYnRfY29leF9wd3JfYWRqdXN0OworCWJvb2wgYl9wYWNrZXRfbWF0Y2hic3NpZDsKKwlib29sIGJfaXNfY2NrOworCWJvb2wgYl9pc19odDsKKwlib29sIGJfcGFja2V0X3Rvc2VsZjsKKwlib29sIGJfcGFja2V0X2JlYWNvbjsJLypmb3IgcnNzaSAqLworCWNoYXIgY2NrX2FkY19wd2RiWzRdOwkvKmZvciByeCBwYXRoIHNlbGVjdGlvbiAqLworCisJYm9vbCBiX2lzX3ZodDsKKwlib29sIGJfaXNfc2hvcnRfZ2k7CisJdTggdmh0X25zczsKKworCXU4IHBhY2tldF9yZXBvcnRfdHlwZTsKKworCXUzMiBtYWNpZDsKKwl1OCB3YWtlX21hdGNoOworCXUzMiBidF9yeF9yc3NpX3BlcmNlbnRhZ2U7CisJdTMyIG1hY2lkX3ZhbGlkX2VudHJ5WzJdOworfTsKKworc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IHsKKwkvKiBjb3VudCBmb3IgcmFvbWluZyAqLworCXUzMiBiY25fcnhfaW5wZXJpb2Q7CisJdTMyIHJvYW1fdGltZXM7CisKKwl1MzIgbnVtX3R4X2luNHBlcmlvZFs0XTsKKwl1MzIgbnVtX3J4X2luNHBlcmlvZFs0XTsKKworCXUzMiBudW1fdHhfaW5wZXJpb2Q7CisJdTMyIG51bV9yeF9pbnBlcmlvZDsKKworCWJvb2wgYl9idXN5dHJhZmZpYzsKKwlib29sIGJfdHhfYnVzeV90cmFmZmljOworCWJvb2wgYl9yeF9idXN5X3RyYWZmaWM7CisJYm9vbCBiX2hpZ2hlcl9idXN5dHJhZmZpYzsKKwlib29sIGJfaGlnaGVyX2J1c3lyeHRyYWZmaWM7CisKKwl1MzIgdGlkdHhfaW40cGVyaW9kW01BWF9USURfQ09VTlRdWzRdOworCXUzMiB0aWR0eF9pbnBlcmlvZFtNQVhfVElEX0NPVU5UXTsKKwlib29sIGhpZ2hlcl9idXN5dHh0cmFmZmljW01BWF9USURfQ09VTlRdOworfTsKKworc3RydWN0IHJ0bF90Y2JfZGVzYyB7CisJdTggcGFja2V0X2J3OjI7CisJdTggYl9tdWx0aWNhc3Q6MTsKKwl1OCBiX2Jyb2FkY2FzdDoxOworCisJdTggYl9ydHNfc3RiYzoxOworCXU4IGJfcnRzX2VuYWJsZToxOworCXU4IGJfY3RzX2VuYWJsZToxOworCXU4IGJfcnRzX3VzZV9zaG9ydHByZWFtYmxlOjE7CisJdTggYl9ydHNfdXNlX3Nob3J0Z2k6MTsKKwl1OCBydHNfc2M6MTsKKwl1OCBiX3J0c19idzoxOworCXU4IHJ0c19yYXRlOworCisJdTggdXNlX3Nob3J0Z2k6MTsKKwl1OCB1c2Vfc2hvcnRwcmVhbWJsZToxOworCXU4IHVzZV9kcml2ZXJfcmF0ZToxOworCXU4IGRpc2FibGVfcmF0ZWZhbGxiYWNrOjE7CisKKwl1OCByYXRyX2luZGV4OworCXU4IG1hY19pZDsKKwl1OCBod19yYXRlOworCisJdTggYl9sYXN0X2luaXBrdDoxOworCXU4IGJfY21kX29yX2luaXQ6MTsKKwl1OCBxdWV1ZV9pbmRleDsKKworCS8qIGVhcmx5IG1vZGUgKi8KKwl1OCBlbXBrdF9udW07CisJLyogVGhlIG1heCB2YWx1ZSBieSBIVyAqLworCXUzMiBlbXBrdF9sZW5bMTBdOworCWJvb2wgYnR4X2VuYWJsZV9zd19jYWxjX2R1cmF0aW9uOworCS8qIHVzZWQgZm9yIGhhbCBjb25zdHJ1Y3QgcGt0LAorCSAqIHdlIG1heSBzZXQgZGVzYyB3aGVuIHR4ICovCisJdTggc2VsZl9kZXNjOworfTsKKworc3RydWN0IHJ0bF93b3dfcGF0dGVybiB7CisJdTggdHlwZTsKKwl1MTYgY3JjOworCXUzMiBtYXNrWzRdOworfTsKKworc3RydWN0IHByb3hpbSB7CisJYm9vbCBwcm94aW1fb247CisKKwl2b2lkICpwcm94aW1pdHlfcHJpdjsKKwlpbnQgKCpwcm94aW1fcngpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX3N0YXRzICpzdGF0dXMsCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdTggICgqcHJveGltX2dldF92YXIpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB0eXBlKTsKK307CisKK3N0cnVjdCBydGxfaGFsX29wcyB7CisJaW50ICgqaW5pdF9zd192YXJzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmRlaW5pdF9zd192YXJzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnJlYWRfZWVwcm9tX2luZm8pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqaW50ZXJydXB0X3JlY29nbml6ZWQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgdTMyICpwX2ludGEsIHUzMiAqcF9pbnRiKTsKKwlpbnQgKCpod19pbml0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmh3X2Rpc2FibGUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqaHdfc3VzcGVuZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpod19yZXN1bWUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqZW5hYmxlX2ludGVycnVwdCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpkaXNhYmxlX2ludGVycnVwdCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCWludCAoKnNldF9uZXR3b3JrX3R5cGUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7CisJdm9pZCAoKnNldF9jaGtfYnNzaWQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgYm9vbCBjaGVja19ic3NpZCk7CisJdm9pZCAoKnNldF9id19tb2RlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoX3R5cGUpOworCXU4ICgqc3dpdGNoX2NoYW5uZWwpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqc2V0X3Fvcykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBhY2kpOworCXZvaWQgKCpzZXRfYmNuX3JlZykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzZXRfYmNuX2ludHYpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqdXBkYXRlX2ludGVycnVwdF9tYXNrKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1MzIgYWRkX21zciwgdTMyIHJtX21zcik7CisJdm9pZCAoKmdldF9od19yZWcpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7CisJdm9pZCAoKnNldF9od19yZWcpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7CisJdm9pZCAoKnVwZGF0ZV9yYXRlX3RibCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggcnNzaV9sZXZlbCk7CisJdm9pZCAoKnByZV9maWxsX3R4X2JkX2Rlc2MpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqdHhfYmRfZGVzYywKKwkJCQkgICAgdTggKmRlc2MsIHU4IHF1ZXVlX2luZGV4LAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBkbWFfYWRkcl90IGFkZHIpOworCXUxNiAoKnJ4X2Rlc2NfYnVmZl9yZW1haW5lZF9jbnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgdTggcXVldWVfaW5kZXgpOworCXZvaWQgKCpyeF9jaGVja19kbWFfb2spKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqaGVhZGVyX2Rlc2MsCisJCQkJdTggcXVldWVfaW5kZXgpOworCXZvaWQgKCpmaWxsX3R4X2Rlc2MpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJICAgICB1OCAqcGRlc2NfdHgsIHU4ICpwYmRfZGVzYywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBod19xdWV1ZSwKKwkJCSAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqcHRjYl9kZXNjKTsKKwl2b2lkICgqZmlsbF90eF9jbWRkZXNjKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnBkZXNjLAorCQkJCWJvb2wgYl9maXJzdHNlZywgYm9vbCBiX2xhc3RzZWcsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJYm9vbCAoKnF1ZXJ5X3J4X2Rlc2MpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IHJ0bF9zdGF0cyAqc3RhdHVzLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCSAgICAgIHU4ICpwZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKnNldF9jaGFubmVsX2FjY2Vzcykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCWJvb2wgKCpyYWRpb19vbm9mZl9jaGVja2luZykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICp2YWxpZCk7CisJdm9pZCAoKmRtX3dhdGNoZG9nKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnNjYW5fb3BlcmF0aW9uX2JhY2t1cCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9wZXJhdGlvbik7CisJYm9vbCAoKnNldF9yZl9wb3dlcl9zdGF0ZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSk7CisJdm9pZCAoKmxlZF9jb250cm9sKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBlbnVtIGxlZF9jdGxfbW9kZSBsZWRhY3Rpb24pOworCXZvaWQgKCpzZXRfZGVzYykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywgYm9vbCBpc3R4LAorCQkJIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7CisJdTMyICgqZ2V0X2Rlc2MpKHU4ICpwZGVzYywgYm9vbCBpc3R4LCB1OCBkZXNjX25hbWUpOworCWJvb2wgKCppc190eF9kZXNjX2Nsb3NlZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICB1OCBod19xdWV1ZSwgdTE2IGluZGV4KTsKKwl2b2lkICgqdHhfcG9sbGluZykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlKTsKKwl2b2lkICgqZW5hYmxlX2h3X3NlYykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzZXRfa2V5KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGtleV9pbmRleCwKKwkJCXU4ICpwX21hY2FkZHIsIGJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLAorCQkJYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKKwl2b2lkICgqaW5pdF9zd19sZWRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdTMyICgqZ2V0X2JicmVnKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKKwl2b2lkICgqc2V0X2JicmVnKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJICB1MzIgZGF0YSk7CisJdTMyICgqZ2V0X3JmcmVnKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKKwkJCSB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOworCXZvaWQgKCpzZXRfcmZyZWcpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLAorCQkJICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKKwl2b2lkICgqYWxsb3dfYWxsX2Rlc3RhZGRyKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBib29sIGFsbG93X2FsbF9kYSwgYm9vbCB3cml0ZV9pbnRvX3JlZyk7CisJdm9pZCAoKmxpbmtlZF9zZXRfcmVnKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmNoZWNrX3N3aXRjaF90b19kbWRwKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmR1YWxtYWNfZWFzeV9jb25jdXJyZW50KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmR1YWxtYWNfc3dpdGNoX3RvX2RtZHApKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqYzJoX2NvbW1hbmRfaGFuZGxlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmJ0X3dpZmlfbWVkaWFfc3RhdHVzX25vdGlmeSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICBib29sIG1zdGF0ZSk7CisJdm9pZCAoKmJ0X3R1cm5fb2ZmX2J0X2NvZXhpc3RfYmVmb3JlX2VudGVyX2xwcykoc3RydWN0IGllZWU4MDIxMV9odyAqdyk7CisJdm9pZCAoKmZpbGxfaDJjX2NtZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGVsZW1lbnRfaWQsCisJCQkgICAgIHUzMiBjbWRfbGVuLCB1OCAqcF9jbWRidWZmZXIpOworCWJvb2wgKCpnZXRfYnRjX3N0YXR1cykodm9pZCk7CisJdTMyICgqcnhfY29tbWFuZF9wYWNrZXQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgcnRsX3N0YXRzIHN0YXR1cywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmFkZF93b3dsYW5fcGF0dGVybikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IHJ0bF93b3dfcGF0dGVybiAqcnRsX3BhdHRlcm4sCisJCQkJICAgdTggaW5kZXgpOworfTsKKworc3RydWN0IHJ0bF9pbnRmX29wcyB7CisJLypjb20gKi8KKwl2b2lkICgqcmVhZDkyZV9lZnVzZV9ieXRlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsCisJCQkJICAgdTggKnBidWYpOworCWludCAoKmFkYXB0ZXJfc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqYWRhcHRlcl9zdG9wKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJYm9vbCAoKmNoZWNrX2J1ZGR5X3ByaXYpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgcnRsX3ByaXYgKipidWRkeV9wcml2KTsKKworCWludCAoKmFkYXB0ZXJfdHgpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpOworCXZvaWQgKCpmbHVzaCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7CisJaW50ICgqcmVzZXRfdHJ4X3JpbmcpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwlib29sICgqd2FpdHFfaW5zZXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKnBjaSAqLworCXZvaWQgKCpkaXNhYmxlX2FzcG0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqZW5hYmxlX2FzcG0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworCS8qdXNiICovCit9OworCitzdHJ1Y3QgcnRsX21vZF9wYXJhbXMgeworCS8qIGRlZmF1bHQ6IDAgPSB1c2luZyBoYXJkd2FyZSBlbmNyeXB0aW9uICovCisJYm9vbCBzd19jcnlwdG87CisKKwkvKiBkZWZhdWx0OiAwID0gREJHX0VNRVJHICgwKSovCisJaW50IGRlYnVnOworCisJLyogZGVmYXVsdDogMSA9IHVzaW5nIG5vIGxpbmtlZCBwb3dlciBzYXZlICovCisJYm9vbCBiX2luYWN0aXZlcHM7CisKKwkvKiBkZWZhdWx0OiAxID0gdXNpbmcgbGlua2VkIHN3IHBvd2VyIHNhdmUgKi8KKwlib29sIGJfc3djdHJsX2xwczsKKworCS8qIGRlZmF1bHQ6IDEgPSB1c2luZyBsaW5rZWQgZncgcG93ZXIgc2F2ZSAqLworCWJvb2wgYl9md2N0cmxfbHBzOworfTsKKworc3RydWN0IHJ0bF9oYWxfY2ZnIHsKKwl1OCBiYXJfaWQ7CisJYm9vbCB3cml0ZV9yZWFkYmFjazsKKwljaGFyICpuYW1lOworCWNoYXIgKmZ3X25hbWU7CisJc3RydWN0IHJ0bF9oYWxfb3BzICpvcHM7CisJc3RydWN0IHJ0bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zOworCisJLyp0aGlzIG1hcCB1c2VkIGZvciBzb21lIHJlZ2lzdGVycyBvciB2YXJzCisJICAgZGVmaW5lZCBpbnQgSEFMIGJ1dCB1c2VkIGluIE1BSU4gKi8KKwl1MzIgbWFwc1tSVExfVkFSX01BUF9NQVhdOworCit9OworCitzdHJ1Y3QgcnRsX2xvY2tzIHsKKwkvKiBtdXRleCAqLworCXN0cnVjdCBtdXRleCBjb25mX211dGV4OworCisJLypzcGluIGxvY2sgKi8KKwlzcGlubG9ja190IGlwc19sb2NrOworCXNwaW5sb2NrX3QgaXJxX3RoX2xvY2s7CisJc3BpbmxvY2tfdCBoMmNfbG9jazsKKwlzcGlubG9ja190IHJmX3BzX2xvY2s7CisJc3BpbmxvY2tfdCByZl9sb2NrOworCXNwaW5sb2NrX3QgbHBzX2xvY2s7CisJc3BpbmxvY2tfdCB3YWl0cV9sb2NrOworCXNwaW5sb2NrX3QgZW50cnlfbGlzdF9sb2NrOworCisJLypGVyBjbG9jayBjaGFuZ2UgKi8KKwlzcGlubG9ja190IGZ3X3BzX2xvY2s7CisKKwkvKkR1bCBtYWMqLworCXNwaW5sb2NrX3QgY2NrX2FuZF9yd19wYWdlYV9sb2NrOworCisJLypFYXN5IGNvbmN1cnJlbnQqLworCXNwaW5sb2NrX3QgY2hlY2tfc2VuZHBrdF9sb2NrOworCisJc3BpbmxvY2tfdCBpcWtfbG9jazsKK307CisKK3N0cnVjdCBydGxfd29ya3MgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJLyp0aW1lciAqLworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGR1YWxtYWNfZWFzeWNvbmN1cnJlbnRfcmV0cnl0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBmd19jbG9ja29mZl90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBmYXN0X2FudGVubmFfdHJhaW5uaW5nX3RpbWVyOworCS8qdGFzayAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3ByZXBhcmVfYmNuX3Rhc2tsZXQ7CisKKwkvKndvcmsgcXVldWUgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnRsX3dxOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd2F0Y2hkb2dfd3E7CisJc3RydWN0IGRlbGF5ZWRfd29yayBpcHNfbmljX29mZl93cTsKKworCS8qIEZvciBTVyBMUFMgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHBzX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBwc19yZm9uX3dxOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZndldnRfd3E7Cit9OworCitzdHJ1Y3QgcnRsX2RlYnVnIHsKKwl1MzIgZGJncF90eXBlW0RCR1BfVFlQRV9NQVhdOworCXUzMiBnbG9iYWxfZGVidWdsZXZlbDsKKwl1NjQgZ2xvYmFsX2RlYnVnY29tcG9uZW50czsKKworCS8qIGFkZCBmb3IgcHJvYyBkZWJ1ZyAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19kaXI7CisJY2hhciBwcm9jX25hbWVbMjBdOworfTsKKworI2RlZmluZSBNSU1PX1BTX1NUQVRJQwkJCTAKKyNkZWZpbmUgTUlNT19QU19EWU5BTUlDCQkJMQorI2RlZmluZSBNSU1PX1BTX05PTElNSVQJCQkzCisKK3N0cnVjdCBydGxfZHVhbG1hY19lYXN5X2NvbmN1cnJlbnRfY3RsIHsKKwllbnVtIGJhbmRfdHlwZSBjdXJyZW50YmFuZHR5cGVfYmFja2ZvcmRtZHA7CisJYm9vbCBiY2xvc2VfYmJhbmRyZl9mb3JfZG1zcDsKKwlib29sIGJjaGFuZ2VfdG9fZG1kcDsKKwlib29sIGJjaGFuZ2VfdG9fZG1zcDsKKwlib29sIGJzd2l0Y2hfaW5fcHJvY2VzczsKK307CisKK3N0cnVjdCBydGxfZG1zcF9jdGwgeworCWJvb2wgYmFjdGl2ZXNjYW5fZm9yX3NsYXZlb2ZkbXNwOworCWJvb2wgYnNjYW5fZm9yX2Fub3RoZXJtYWNfZm9yZG1zcDsKKwlib29sIGJzY2FuX2Zvcl9pdHNlbGZfZm9yZG1zcDsKKwlib29sIGJ3cml0ZWRpZ19mb3JfYW5vdGhlcm1hY29mZG1zcDsKKwl1MzIgY3VyZGlndmFsdWVfZm9yX2Fub3RoZXJtYWNvZmRtc3A7CisJYm9vbCBiY2hhbmdlY2NrcGRzdGF0ZV9mb3JfYW5vdGhlcm1hY29mZG1zcDsKKwl1OCBjdXJjY2twZHN0YXRlX2Zvcl9hbm90aGVybWFjb2ZkbXNwOworCWJvb2wgYmNoYW5nZXR4aGlnaHBvd2VybHZsX2Zvcl9hbm90aGVybWFjb2ZkbXNwOworCXU4IGN1cnR4aGlnaGx2bF9mb3JfYW5vdGhlcm1hY29mZG1zcDsKKwlsb25nIHJzc2l2YWxtaW5fZm9yX2Fub3RoZXJtYWNvZmRtc3A7Cit9OworCitzdHJ1Y3QgcnRsX2dsb2JhbF92YXIgeworCS8qIGZyb20gdGhpcyBsaXN0IHdlIGNhbiBnZXQKKwkgKiBvdGhlciBhZGFwdGVyJ3MgcnRsX3ByaXYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGdsYl9wcml2X2xpc3Q7CisJc3BpbmxvY2tfdCBnbGJfbGlzdF9sb2NrOworfTsKKworc3RydWN0IHJ0bF9idGNfaW5mbyB7CisJdTggYnRfdHlwZTsKKwl1OCBidGNvZXhpc3Q7CisJdTggYW50X251bTsKK307CisKK3N0cnVjdCBydGxfYnRjX29wcyB7CisJdm9pZCAoKmJ0Y19pbml0X3ZhcmlhYmxlcykoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KTsKKwl2b2lkICgqYnRjX2luaXRfaGFsX3ZhcnMpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7CisJdm9pZCAoKmJ0Y19pbml0X2h3X2NvbmZpZykoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KTsKKwl2b2lkICgqYnRjX2lwc19ub3RpZnkpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTggdHlwZSk7CisJdm9pZCAoKmJ0Y19scHNfbm90aWZ5KShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHU4IHR5cGUpOworCXZvaWQgKCpidGNfc2Nhbl9ub3RpZnkpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTggc2NhbnR5cGUpOworCXZvaWQgKCpidGNfY29ubmVjdF9ub3RpZnkpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTggYWN0aW9uKTsKKwl2b2lkICgqYnRjX21lZGlhc3RhdHVzX25vdGlmeSkoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgICAgICBlbnVtIHJ0X21lZGlhX3N0YXR1cyBtc3RhdHVzKTsKKwl2b2lkICgqYnRjX3BlcmlvZGljYWwpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7CisJdm9pZCAoKmJ0Y19oYWx0X25vdGlmeSkodm9pZCk7CisJdm9pZCAoKmJ0Y19idGluZm9fbm90aWZ5KShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJICB1OCAqdG1wX2J1ZiwgdTggbGVuZ3RoKTsKKwlib29sICgqYnRjX2lzX2xpbWl0ZWRfZGlnKShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpOworCWJvb2wgKCpidGNfaXNfZGlzYWJsZV9lZGNhX3R1cmJvKShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpOworCWJvb2wgKCpidGNfaXNfYnRfZGlzYWJsZWQpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7CisJdm9pZCAoKmJ0Y19zcGVjaWFsX3BhY2tldF9ub3RpZnkpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwKKwkJCQkJICB1OCBwa3RfdHlwZSk7Cit9OworCitzdHJ1Y3QgcnRsX2J0X2NvZXhpc3QgeworCXN0cnVjdCBydGxfYnRjX29wcyAqYnRjX29wczsKKwlzdHJ1Y3QgcnRsX2J0Y19pbmZvIGJ0Y19pbmZvOworfTsKKworCitzdHJ1Y3QgcnRsX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKmJ1ZGR5X3ByaXY7CisJc3RydWN0IHJ0bF9nbG9iYWxfdmFyICpnbGJfdmFyOworCXN0cnVjdCBydGxfZHVhbG1hY19lYXN5X2NvbmN1cnJlbnRfY3RsIGVhc3lfY29uY3VycmVudF9jdGw7CisJc3RydWN0IHJ0bF9kbXNwX2N0bCBkbXNwX2N0bDsKKwlzdHJ1Y3QgcnRsX2xvY2tzIGxvY2tzOworCXN0cnVjdCBydGxfd29ya3Mgd29ya3M7CisJc3RydWN0IHJ0bF9tYWMgbWFjODAyMTE7CisJc3RydWN0IHJ0bF9oYWwgcnRsaGFsOworCXN0cnVjdCBydGxfcmVndWxhdG9yeSByZWdkOworCXN0cnVjdCBydGxfcmZraWxsIHJma2lsbDsKKwlzdHJ1Y3QgcnRsX2lvIGlvOworCXN0cnVjdCBydGxfcGh5IHBoeTsKKwlzdHJ1Y3QgcnRsX2RtIGRtOworCXN0cnVjdCBydGxfc2VjdXJpdHkgc2VjOworCXN0cnVjdCBydGxfZWZ1c2UgZWZ1c2U7CisKKwlzdHJ1Y3QgcnRsX3BzX2N0bCBwc2M7CisJc3RydWN0IHJhdGVfYWRhcHRpdmUgcmE7CisJc3RydWN0IGR5bmFtaWNfcHJpbWFyeV9jY2EgcHJpbWFyeWNjYTsKKwlzdHJ1Y3Qgd2lyZWxlc3Nfc3RhdHMgc3RhdHM7CisJc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IGxpbmtfaW5mbzsKKwlzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdGlzdGljcyBmYWxzZWFsbV9jbnQ7CisKKwlzdHJ1Y3QgcnRsX3JhdGVfcHJpdiAqcmF0ZV9wcml2OworCisJc3RydWN0IHJ0bF9kZWJ1ZyBkYmc7CisKKwkvKiBzdGEgZW50cnkgbGlzdCBmb3IgYXAgYWRob2Mgb3IgbWVzaCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnlfbGlzdDsKKworCS8qCisJICpoYWxfY2ZnIDogZm9yIGRpZmYgY2FyZHMKKwkgKmludGZfb3BzIDogZm9yIGRpZmYgaW50ZXJyZmFjZSB1c2IvcGNpZQorCSAqLworCXN0cnVjdCBydGxfaGFsX2NmZyAqY2ZnOworCXN0cnVjdCBydGxfaW50Zl9vcHMgKmludGZfb3BzOworCisJLyp0aGlzIHZhciB3aWxsIGJlIHNldCBieSBzZXRfYml0LAorCSAgIGFuZCB3YXMgdXNlZCB0byBpbmRpY2F0ZSBzdGF0dXMgb2YKKwkgICBpbnRlcmZhY2Ugb3IgaGFyZHdhcmUgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKworCS8qIGludGVsIFByb3hpbWl0eSwgc2hvdWxkIGJlIGFsbG9jIG1lbQorCSAqIGluIGludGVsIFByb3hpbWl0eSBtb2R1bGUgYW5kIGNhbiBvbmx5CisJICogYmUgdXNlZCBpbiBpbnRlbCBQcm94aW1pdHkgbW9kZSAqLworCXN0cnVjdCBwcm94aW0gcHJveGltaXR5OworCisJLypmb3IgYnQgY29leGlzdCB1c2UqLworCXN0cnVjdCBydGxfYnRfY29leGlzdCBidGNvZXhpc3Q7CisKKwkvKiBzZXBlcmF0ZSA5MmVlIGZyb20gb3RoZXIgSUNzLAorCSAgKiA5MmVlIHVzZSBuZXcgdHJ4IGZsb3cuICovCisJYm9vbCB1c2VfbmV3X3RyeF9mbG93OworCisjaWZkZWYgQ09ORklHX1BNCisJc3RydWN0IHdpcGh5X3dvd2xhbl9zdXBwb3J0IHdvd2xhbjsKKyNlbmRpZgorCS8qVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGl0ZW0gc28KKwkgICB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YSBhbGxvY2F0ZWQKKwkgICBiZXlvbmQgIHRoaXMgc3RydWN0dXJlIGxpa2U6CisJICAgcnRsX3BjaV9wcml2IG9yIHJ0bF91c2JfcHJpdiAqLworCXU4IHByaXZbMF07Cit9OworCisjZGVmaW5lIHJ0bF9wcml2KGh3KQkJKCgoc3RydWN0IHJ0bF9wcml2ICopKGh3KS0+cHJpdikpCisjZGVmaW5lIHJ0bF9tYWMocnRscHJpdikJKCYoKHJ0bHByaXYpLT5tYWM4MDIxMSkpCisjZGVmaW5lIHJ0bF9oYWwocnRscHJpdikJKCYoKHJ0bHByaXYpLT5ydGxoYWwpKQorI2RlZmluZSBydGxfZWZ1c2UocnRscHJpdikJKCYoKHJ0bHByaXYpLT5lZnVzZSkpCisjZGVmaW5lIHJ0bF9wc2MocnRscHJpdikJKCYoKHJ0bHByaXYpLT5wc2MpKQorI2RlZmluZSBydGxfc2VjKHJ0bHByaXYpCSgmKChydGxwcml2KS0+c2VjKSkKKyNkZWZpbmUgcnRsX2RtKHJ0bHByaXYpCSgmKChydGxwcml2KS0+ZG0pKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEJsdWV0b290aCBDby1leGlzdGFuY2UgUmVsYXRlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZW51bSBidF9hbnRfbnVtIHsKKwlBTlRfWDIgPSAwLAorCUFOVF9YMSA9IDEsCit9OworCitlbnVtIGJ0X2NvX3R5cGUgeworCUJUXzJXSVJFID0gMCwKKwlCVF9JU1NDXzNXSVJFID0gMSwKKwlCVF9BQ0NFTCA9IDIsCisJQlRfQ1NSX0JDNCA9IDMsCisJQlRfQ1NSX0JDOCA9IDQsCisJQlRfUlRMODc1NiA9IDUsCisJQlRfUlRMODcyM0EgPSA2LAorCUJUX1JUTDg4MjFBID0gNywKKwlCVF9SVEw4NzIzQiA9IDgsCisJQlRfUlRMODE5MkUgPSA5LAorCUJUX1JUTDg4MTJBID0gMTEsCit9OworCitlbnVtIGJ0X3RvdGFsX2FudF9udW0geworCUFOVF9UT1RBTF9YMiA9IDAsCisJQU5UX1RPVEFMX1gxID0gMQorfTsKKworZW51bSBidF9jdXJfc3RhdGUgeworCUJUX09GRiA9IDAsCisJQlRfT04gPSAxLAorfTsKKworZW51bSBidF9zZXJ2aWNlX3R5cGUgeworCUJUX1NDTyA9IDAsCisJQlRfQTJEUCA9IDEsCisJQlRfSElEID0gMiwKKwlCVF9ISURfSURMRSA9IDMsCisJQlRfU0NBTiA9IDQsCisJQlRfSURMRSA9IDUsCisJQlRfT1RIRVJfQUNUSU9OID0gNiwKKwlCVF9CVVNZID0gNywKKwlCVF9PVEhFUkJVU1kgPSA4LAorCUJUX1BBTiA9IDksCit9OworCitlbnVtIGJ0X3JhZGlvX3NoYXJlZCB7CisJQlRfUkFESU9fU0hBUkVEID0gMCwKKwlCVF9SQURJT19JTkRJVklEVUFMID0gMSwKK307CisKK3N0cnVjdCBidF9jb2V4aXN0X2luZm8geworCS8qIEVFUFJPTSBCVCBpbmZvLiAqLworCXU4IGVlcHJvbV9idF9jb2V4aXN0OworCXU4IGVlcHJvbV9idF90eXBlOworCXU4IGVlcHJvbV9idF9hbnRfbnVtOworCXU4IGVlcHJvbV9idF9hbnRfaXNvbGF0aW9uOworCXU4IGVlcHJvbV9idF9yYWRpb19zaGFyZWQ7CisKKwl1OCBidF9jb2V4aXN0ZW5jZTsKKwl1OCBidF9hbnRfbnVtOworCXU4IGJ0X2NvZXhpc3RfdHlwZTsKKwl1OCBidF9zdGF0ZTsKKwl1OCBidF9jdXJfc3RhdGU7CS8qIDA6b24sIDE6b2ZmICovCisJdTggYnRfYW50X2lzb2xhdGlvbjsJLyogMDpnb29kLCAxOmJhZCAqLworCXU4IGJ0X3BhcGVfY3RybDsJLyogMDpTVywgMTpTVy9IVyBkeW5hbWljICovCisJdTggYnRfc2VydmljZTsKKwl1OCBidF9yYWRpb19zaGFyZWRfdHlwZTsKKwl1OCBidF9yZnJlZ19vcmlnaW5fMWU7CisJdTggYnRfcmZyZWdfb3JpZ2luXzFmOworCXU4IGJ0X3Jzc2lfc3RhdGU7CisJdTMyIHJhdGlvX3R4OworCXUzMiByYXRpb19wcmk7CisJdTMyIGJ0X2VkY2FfdWw7CisJdTMyIGJ0X2VkY2FfZGw7CisKKwlib29sIGJfaW5pdF9zZXQ7CisJYm9vbCBiX2J0X2J1c3lfdHJhZmZpYzsKKwlib29sIGJfYnRfdHJhZmZpY19tb2RlX3NldDsKKwlib29sIGJfYnRfbm9uX3RyYWZmaWNfbW9kZV9zZXQ7CisKKwlib29sIGJfZndfY29leGlzdF9hbGxfb2ZmOworCWJvb2wgYl9zd19jb2V4aXN0X2FsbF9vZmY7CisJYm9vbCBiX2h3X2NvZXhpc3RfYWxsX29mZjsKKwl1MzIgY3VycmVudF9zdGF0ZTsKKwl1MzIgcHJldmlvdXNfc3RhdGU7CisJdTMyIGN1cnJlbnRfc3RhdGVfaDsKKwl1MzIgcHJldmlvdXNfc3RhdGVfaDsKKworCXU4IGJ0X3ByZV9yc3NpX3N0YXRlOworCXU4IGJ0X3ByZV9yc3NpX3N0YXRlMTsKKworCXU4IGJfcmVnX2J0X2lzbzsKKwl1OCBiX3JlZ19idF9zY287CisJYm9vbCBiX2JhbGFuY2Vfb247CisJdTggYnRfYWN0aXZlX3plcm9fY250OworCWJvb2wgYl9jdXJfYnRfZGlzYWJsZWQ7CisJYm9vbCBiX3ByZV9idF9kaXNhYmxlZDsKKworCXU4IGJ0X3Byb2ZpbGVfY2FzZTsKKwl1OCBidF9wcm9maWxlX2FjdGlvbjsKKwlib29sIGJfYnRfYnVzeTsKKwlib29sIGJfaG9sZF9mb3JfYnRfb3BlcmF0aW9uOworCXU4IGxwc19jb3VudGVyOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwltZW0gYWNjZXNzIG1hY3JvIGRlZmluZSBzdGFydAorCUNhbGwgZW5kaWFuIGZyZWUgZnVuY3Rpb24gd2hlbgorCTEuIFJlYWQvd3JpdGUgcGFja2V0IGNvbnRlbnQuCisJMi4gQmVmb3JlIHdyaXRlIGludGVnZXIgdG8gSU8uCisJMy4gQWZ0ZXIgcmVhZCBpbnRlZ2VyIGZyb20gSU8uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29udmVydCBsaXR0bGUgZGF0YSBlbmRpYW4gdG8gaG9zdCBvcmRlcmluZyAqLworI2RlZmluZSBFRjFCWVRFKF92YWwpCQlcCisJKCh1OCkoX3ZhbCkpCisjZGVmaW5lIEVGMkJZVEUoX3ZhbCkJCVwKKwkobGUxNl90b19jcHUoX3ZhbCkpCisjZGVmaW5lIEVGNEJZVEUoX3ZhbCkJCVwKKwkobGUzMl90b19jcHUoX3ZhbCkpCisKKy8qIFJlYWQgZGF0YSBmcm9tIG1lbW9yeSAqLworI2RlZmluZSBSRUFERUYxQllURShfcHRyKQlcCisJRUYxQllURSgqKCh1OCAqKShfcHRyKSkpCisvKiBSZWFkIGxlMTYgZGF0YSBmcm9tIG1lbW9yeSBhbmQgY29udmVydCB0byBob3N0IG9yZGVyaW5nICovCisjZGVmaW5lIFJFQURFRjJCWVRFKF9wdHIpCVwKKwlFRjJCWVRFKCooX3B0cikpCisjZGVmaW5lIFJFQURFRjRCWVRFKF9wdHIpCVwKKwlFRjRCWVRFKCooX3B0cikpCisKKy8qIFdyaXRlIGRhdGEgdG8gbWVtb3J5ICovCisjZGVmaW5lIFdSSVRFRUYxQllURShfcHRyLCBfdmFsKQlcCisJKCooKHU4ICopKF9wdHIpKSkgPSBFRjFCWVRFKF92YWwpCisvKiBXcml0ZSBsZTE2IGRhdGEgdG8gbWVtb3J5IGluIGhvc3Qgb3JkZXJpbmcgKi8KKyNkZWZpbmUgV1JJVEVFRjJCWVRFKF9wdHIsIF92YWwpCVwKKwkoKigodTE2ICopKF9wdHIpKSkgPSBFRjJCWVRFKF92YWwpCisjZGVmaW5lIFdSSVRFRUY0QllURShfcHRyLCBfdmFsKQlcCisJKCooKHUzMiAqKShfcHRyKSkpID0gRUYyQllURShfdmFsKQorCisvKiBDcmVhdGUgYSBiaXQgbWFzaworICogRXhhbXBsZXM6CisgKiBCSVRfTEVOX01BU0tfMzIoMCkgPT4gMHgwMDAwMDAwMAorICogQklUX0xFTl9NQVNLXzMyKDEpID0+IDB4MDAwMDAwMDEKKyAqIEJJVF9MRU5fTUFTS18zMigyKSA9PiAweDAwMDAwMDAzCisgKiBCSVRfTEVOX01BU0tfMzIoMzIpID0+IDB4RkZGRkZGRkYKKyAqLworI2RlZmluZSBCSVRfTEVOX01BU0tfMzIoX19iaXRsZW4pCSBcCisJKDB4RkZGRkZGRkYgPj4gKDMyIC0gKF9fYml0bGVuKSkpCisjZGVmaW5lIEJJVF9MRU5fTUFTS18xNihfX2JpdGxlbikJIFwKKwkoMHhGRkZGID4+ICgxNiAtIChfX2JpdGxlbikpKQorI2RlZmluZSBCSVRfTEVOX01BU0tfOChfX2JpdGxlbikgXAorCSgweEZGID4+ICg4IC0gKF9fYml0bGVuKSkpCisKKy8qIENyZWF0ZSBhbiBvZmZzZXQgYml0IG1hc2sKKyAqIEV4YW1wbGVzOgorICogQklUX09GRlNFVF9MRU5fTUFTS18zMigwLCAyKSA9PiAweDAwMDAwMDAzCisgKiBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDE2LCAyKSA9PiAweDAwMDMwMDAwCisgKi8KKyNkZWZpbmUgQklUX09GRlNFVF9MRU5fTUFTS18zMihfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKSA8PCAoX19iaXRvZmZzZXQpKQorI2RlZmluZSBCSVRfT0ZGU0VUX0xFTl9NQVNLXzE2KF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCShCSVRfTEVOX01BU0tfMTYoX19iaXRsZW4pIDw8IChfX2JpdG9mZnNldCkpCisjZGVmaW5lIEJJVF9PRkZTRVRfTEVOX01BU0tfOChfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoQklUX0xFTl9NQVNLXzgoX19iaXRsZW4pIDw8IChfX2JpdG9mZnNldCkpCisKKy8qRGVzY3JpcHRpb246CisgKiBSZXR1cm4gNC1ieXRlIHZhbHVlIGluIGhvc3QgYnl0ZSBvcmRlcmluZyBmcm9tCisgKiA0LWJ5dGUgcG9pbnRlciBpbiBsaXR0bGUtZW5kaWFuIHN5c3RlbS4KKyAqLworI2RlZmluZSBMRV9QNEJZVEVfVE9fSE9TVF80QllURShfX3BzdGFydCkgXAorCShFRjRCWVRFKCooKF9fbGUzMiAqKShfX3BzdGFydCkpKSkKKyNkZWZpbmUgTEVfUDJCWVRFX1RPX0hPU1RfMkJZVEUoX19wc3RhcnQpIFwKKwkoRUYyQllURSgqKChfX2xlMTYgKikoX19wc3RhcnQpKSkpCisjZGVmaW5lIExFX1AxQllURV9UT19IT1NUXzFCWVRFKF9fcHN0YXJ0KSBcCisJKEVGMUJZVEUoKigodTggKikoX19wc3RhcnQpKSkpCisKKy8qRGVzY3JpcHRpb246CitUcmFuc2xhdGUgc3ViZmllbGQgKGNvbnRpbnVvdXMgYml0cyBpbiBsaXR0bGUtZW5kaWFuKSBvZiA0LWJ5dGUKK3ZhbHVlIHRvIGhvc3QgYnl0ZSBvcmRlcmluZy4qLworI2RlZmluZSBMRV9CSVRTX1RPXzRCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJKExFX1A0QllURV9UT19IT1NUXzRCWVRFKF9fcHN0YXJ0KSA+PiAoX19iaXRvZmZzZXQpKSAgJiBcCisJCUJJVF9MRU5fTUFTS18zMihfX2JpdGxlbikgXAorCSkKKyNkZWZpbmUgTEVfQklUU19UT18yQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSBcCisJKCBcCisJCShMRV9QMkJZVEVfVE9fSE9TVF8yQllURShfX3BzdGFydCkgPj4gKF9fYml0b2Zmc2V0KSkgJiBcCisJCUJJVF9MRU5fTUFTS18xNihfX2JpdGxlbikgXAorCSkKKyNkZWZpbmUgTEVfQklUU19UT18xQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSBcCisJKCBcCisJCShMRV9QMUJZVEVfVE9fSE9TVF8xQllURShfX3BzdGFydCkgPj4gKF9fYml0b2Zmc2V0KSkgJiBcCisJCUJJVF9MRU5fTUFTS184KF9fYml0bGVuKSBcCisJKQorCisvKiBEZXNjcmlwdGlvbjoKKyAqIE1hc2sgc3ViZmllbGQgKGNvbnRpbnVvdXMgYml0cyBpbiBsaXR0bGUtZW5kaWFuKSBvZiA0LWJ5dGUgdmFsdWUKKyAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiA0LWJ5dGUgdmFsdWUgaW4gaG9zdCBieXRlIG9yZGVyaW5nLgorICovCisjZGVmaW5lIExFX0JJVFNfQ0xFQVJFRF9UT180QllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSBcCisJKCBcCisJCUxFX1A0QllURV9UT19IT1NUXzRCWVRFKF9fcHN0YXJ0KSAgJiBcCisJCSh+QklUX09GRlNFVF9MRU5fTUFTS18zMihfX2JpdG9mZnNldCwgX19iaXRsZW4pKSBcCisJKQorI2RlZmluZSBMRV9CSVRTX0NMRUFSRURfVE9fMkJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCSggXAorCQlMRV9QMkJZVEVfVE9fSE9TVF8yQllURShfX3BzdGFydCkgJiBcCisJCSh+QklUX09GRlNFVF9MRU5fTUFTS18xNihfX2JpdG9mZnNldCwgX19iaXRsZW4pKSBcCisJKQorI2RlZmluZSBMRV9CSVRTX0NMRUFSRURfVE9fMUJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCSggXAorCQlMRV9QMUJZVEVfVE9fSE9TVF8xQllURShfX3BzdGFydCkgJiBcCisJCSh+QklUX09GRlNFVF9MRU5fTUFTS184KF9fYml0b2Zmc2V0LCBfX2JpdGxlbikpIFwKKwkpCisKKy8qIERlc2NyaXB0aW9uOgorICogU2V0IHN1YmZpZWxkIG9mIGxpdHRsZS1lbmRpYW4gNC1ieXRlIHZhbHVlIHRvIHNwZWNpZmllZCB2YWx1ZS4KKyAqLworI2RlZmluZSBTRVRfQklUU19UT19MRV80QllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuLCBfX3ZhbCkgXAorCSooKHUzMiAqKShfX3BzdGFydCkpID0gXAorCSggXAorCQlMRV9CSVRTX0NMRUFSRURfVE9fNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgfCBcCisJCSgoKCh1MzIpX192YWwpICYgQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKSkgPDwgKF9fYml0b2Zmc2V0KSkgXAorCSk7CisjZGVmaW5lIFNFVF9CSVRTX1RPX0xFXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4sIF9fdmFsKSBcCisJKigodTE2ICopKF9fcHN0YXJ0KSkgPSBcCisJKCBcCisJCUxFX0JJVFNfQ0xFQVJFRF9UT18yQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSB8IFwKKwkJKCgoKHUxNilfX3ZhbCkgJiBCSVRfTEVOX01BU0tfMTYoX19iaXRsZW4pKSA8PCAoX19iaXRvZmZzZXQpKSBcCisJKTsKKyNkZWZpbmUgU0VUX0JJVFNfVE9fTEVfMUJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbiwgX192YWwpIFwKKwkqKCh1OCAqKShfX3BzdGFydCkpID0gRUYxQllURSBcCisJKCBcCisJCUxFX0JJVFNfQ0xFQVJFRF9UT18xQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSB8IFwKKwkJKCgoKHU4KV9fdmFsKSAmIEJJVF9MRU5fTUFTS184KF9fYml0bGVuKSkgPDwgKF9fYml0b2Zmc2V0KSkgXAorCSk7CisKKyNkZWZpbmUJTl9CWVRFX0FMSUdNRU5UKF9fdmFsdWUsIF9fYWxpZ21lbnQpICgoX19hbGlnbWVudCA9PSAxKSA/IFwKKwkoX192YWx1ZSkgOiAoKChfX3ZhbHVlICsgX19hbGlnbWVudCAtIDEpIC8gX19hbGlnbWVudCkgKiBfX2FsaWdtZW50KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwltZW0gYWNjZXNzIG1hY3JvIGRlZmluZSBlbmQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgYnl0ZSh4ICwgbikgKCh4ID4+ICg4ICogbikpICYgMHhmZikKKworI2RlZmluZSBwYWNrZXRfZ2V0X3R5cGUoX3BhY2tldCkgKEVGMUJZVEUoKF9wYWNrZXQpLm9jdGV0WzBdKSAmIDB4RkMpCisjZGVmaW5lIFJUTF9XQVRDSF9ET0dfVElNRQkyMDAwCisjZGVmaW5lIE1TRUNTKHQpCQltc2Vjc190b19qaWZmaWVzKHQpCisjZGVmaW5lIFdMQU5fRkNfR0VUX1ZFUlMoZmMpCShsZTE2X3RvX2NwdShmYykgJiBJRUVFODAyMTFfRkNUTF9WRVJTKQorI2RlZmluZSBXTEFOX0ZDX0dFVF9UWVBFKGZjKQkobGUxNl90b19jcHUoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpCisjZGVmaW5lIFdMQU5fRkNfR0VUX1NUWVBFKGZjKQkobGUxNl90b19jb3UoZmMpICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpCisjZGVmaW5lIFdMQU5fRkNfTU9SRV9EQVRBKGZjKQkobGUxNl90b19jcHUoZmMpICYgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpCisjZGVmaW5lIFNFUV9UT19TTihzZXEpCQkoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQorI2RlZmluZSBTTl9UT19TRVEoc3NuKQkJKCgoc3NuKSA8PCA0KSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkKKyNkZWZpbmUgTUFYX1NOCQkJKChJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCisKKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfQVNQTQkJQklUKDApCS8qUENJIEFTUE0gKi8KKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUQkJQklUKDEpCS8qUENJIGNsb2NrIHJlcXVlc3QgKi8KKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfUENJX0QzCQlCSVQoMikJLypQQ0kgRDMgbW9kZSAqLworLypOSUMgaGFsdCwgcmUtaW5pdGlhbGl6ZSBodyBwYXJhbWV0ZXJzKi8KKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMJCUJJVCgzKQorI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9GUkVFX0ZXCQlCSVQoNCkJLypGVyBmcmVlLCByZS1kb3dubG9hZCB0aGUgRlcgKi8KKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfRldfMzJLCQlCSVQoNSkJLypGVyBpbiAzMmsgKi8KKy8qQWx3YXlzIGVuYWJsZSBBU1BNIGFuZCBDbG9jayBSZXEgaW4gaW5pdGlhbGl6YXRpb24uKi8KKyNkZWZpbmUJUlRfUkZfUFNfTEVWRUxfQUxXQVlTX0FTUE0JQklUKDYpCisvKiBubyBtYXR0ZXIgUkZPRkYgb3IgU0xFRVAgd2Ugc2V0IFBTX0FTUE1fTEVWTCovCisjZGVmaW5lCVJUX1BTX0xFVkVMX0FTUE0JCUJJVCg3KQorLypXaGVuIExQUyBpcyBvbiwgZGlzYWJsZSAyUiBpZiBubyBwYWNrZXQgaXMgcmVjZWl2ZWQgb3IgdHJhbnNtaXR0ZC4qLworI2RlZmluZQlSVF9SRl9MUFNfRElTQUxCRV8yUgkJQklUKDMwKQorI2RlZmluZQlSVF9SRl9MUFNfTEVWRUxfQVNQTQkJQklUKDMxKQkvKkxQUyB3aXRoIEFTUE0gKi8KKyNkZWZpbmUJUlRfSU5fUFNfTEVWRUwocHBzYywgX3BzX2ZsZykJCVwKKwkoKHBwc2MtPmN1cl9wc19sZXZlbCAmIF9wc19mbGcpID8gdHJ1ZSA6IGZhbHNlKQorI2RlZmluZQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBfcHNfZmxnKQlcCisJKHBwc2MtPmN1cl9wc19sZXZlbCAmPSAofihfcHNfZmxnKSkpCisjZGVmaW5lCVJUX1NFVF9QU19MRVZFTChwcHNjLCBfcHNfZmxnKQkJXAorCShwcHNjLT5jdXJfcHNfbGV2ZWwgfD0gX3BzX2ZsZykKKworI2RlZmluZSBjb250YWluZXJfb2ZfZHdvcmtfcnRsKHggLCB5ICwgeikgXAorCWNvbnRhaW5lcl9vZihjb250YWluZXJfb2YoeCwgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayksIHksIHopCisKKyNkZWZpbmUgRklMTF9PQ1RFVF9TVFJJTkcoX29zICwgX29jdGV0ICwgX2xlbikJXAorCQkoX29zKS5vY3RldCA9ICh1OCAqKShfb2N0ZXQpOwkJXAorCQkoX29zKS5sZW5ndGggPSAoX2xlbik7CisKKyNkZWZpbmUgQ1BfTUFDQUREUihkZXMgLCBzcmMpCVwKKwkoKGRlcylbMF0gPSAoc3JjKVswXSAsIChkZXMpWzFdID0gKHNyYylbMV0sXAorCShkZXMpWzJdID0gKHNyYylbMl0gLCAoZGVzKVszXSA9IChzcmMpWzNdLFwKKwkoZGVzKVs0XSA9IChzcmMpWzRdICwgKGRlcylbNV0gPSAoc3JjKVs1XSkKKworI2RlZmluZQlMRFBDX0hUX0VOQUJMRV9SWAkJCUJJVCgwKQorI2RlZmluZQlMRFBDX0hUX0VOQUJMRV9UWAkJCUJJVCgxKQorI2RlZmluZQlMRFBDX0hUX1RFU1RfVFhfRU5BQkxFCQkJQklUKDIpCisjZGVmaW5lCUxEUENfSFRfQ0FQX1RYCQkJCUJJVCgzKQorCisjZGVmaW5lCVNUQkNfSFRfRU5BQkxFX1JYCQkJQklUKDApCisjZGVmaW5lCVNUQkNfSFRfRU5BQkxFX1RYCQkJQklUKDEpCisjZGVmaW5lCVNUQkNfSFRfVEVTVF9UWF9FTkFCTEUJCQlCSVQoMikKKyNkZWZpbmUJU1RCQ19IVF9DQVBfVFgJCQkJQklUKDMpCisKKworI2RlZmluZQlMRFBDX1ZIVF9FTkFCTEVfUlgJCQlCSVQoMCkKKyNkZWZpbmUJTERQQ19WSFRfRU5BQkxFX1RYCQkJQklUKDEpCisjZGVmaW5lCUxEUENfVkhUX1RFU1RfVFhfRU5BQkxFCQkJQklUKDIpCisjZGVmaW5lCUxEUENfVkhUX0NBUF9UWAkJCQlCSVQoMykKKworI2RlZmluZQlTVEJDX1ZIVF9FTkFCTEVfUlgJCQlCSVQoMCkKKyNkZWZpbmUJU1RCQ19WSFRfRU5BQkxFX1RYCQkJQklUKDEpCisjZGVmaW5lCVNUQkNfVkhUX1RFU1RfVFhfRU5BQkxFCQkJQklUKDIpCisjZGVmaW5lCVNUQkNfVkhUX0NBUF9UWAkJCQlCSVQoMykKKworCitzdGF0aWMgaW5saW5lIHU4IHJ0bF9yZWFkX2J5dGUoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gcnRscHJpdi0+aW8ucmVhZDhfc3luYyhydGxwcml2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgcnRsX3JlYWRfd29yZChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKQoreworCXJldHVybiBydGxwcml2LT5pby5yZWFkMTZfc3luYyhydGxwcml2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRsX3JlYWRfZHdvcmQoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gcnRscHJpdi0+aW8ucmVhZDMyX3N5bmMocnRscHJpdiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfd3JpdGVfYnl0ZShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyLCB1OCB2YWw4KQoreworCXJ0bHByaXYtPmlvLndyaXRlOF9hc3luYyhydGxwcml2LCBhZGRyLCB2YWw4KTsKKworCWlmIChydGxwcml2LT5jZmctPndyaXRlX3JlYWRiYWNrKQorCQlydGxwcml2LT5pby5yZWFkOF9zeW5jKHJ0bHByaXYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3dyaXRlX3dvcmQoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTE2IHZhbDE2KQoreworCXJ0bHByaXYtPmlvLndyaXRlMTZfYXN5bmMocnRscHJpdiwgYWRkciwgdmFsMTYpOworCisJaWYgKHJ0bHByaXYtPmNmZy0+d3JpdGVfcmVhZGJhY2spCisJCXJ0bHByaXYtPmlvLnJlYWQxNl9zeW5jKHJ0bHByaXYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3dyaXRlX2R3b3JkKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwKKwkJCQkgICB1MzIgYWRkciwgdTMyIHZhbDMyKQoreworCXJ0bHByaXYtPmlvLndyaXRlMzJfYXN5bmMocnRscHJpdiwgYWRkciwgdmFsMzIpOworCisJaWYgKHJ0bHByaXYtPmNmZy0+d3JpdGVfcmVhZGJhY2spCisJCXJ0bHByaXYtPmlvLnJlYWQzMl9zeW5jKHJ0bHByaXYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBydGxfZ2V0X2JicmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgcnRsX3ByaXYgKikoaHcpLT5wcml2KS0+Y2ZnLT5vcHMtPmdldF9iYnJlZyhodywKKwkJCQkJCQkJICAgIHJlZ2FkZHIsCisJCQkJCQkJCSAgICBiaXRtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF9zZXRfYmJyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByZWdhZGRyLAorCQkJCSB1MzIgYml0bWFzaywgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gaHctPnByaXY7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2JicmVnKGh3LCByZWdhZGRyLCBiaXRtYXNrLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRsX2dldF9yZnJlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKKwkJCQl1MzIgYml0bWFzaykKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgcnRsX3ByaXYgKikoaHcpLT5wcml2KS0+Y2ZnLT5vcHMtPmdldF9yZnJlZyhodywKKwkJCQkJCQkJICAgIHJmcGF0aCwKKwkJCQkJCQkJICAgIHJlZ2FkZHIsCisJCQkJCQkJCSAgICBiaXRtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF9zZXRfcmZyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLAorCQkJCSB1MzIgYml0bWFzaywgdTMyIGRhdGEpCit7CisJKChzdHJ1Y3QgcnRsX3ByaXYgKikoaHcpLT5wcml2KS0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywKKwkJCQkJCQkgICAgIHJmcGF0aCwgcmVnYWRkciwKKwkJCQkJCQkgICAgIGJpdG1hc2ssIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfaGFsX3N0b3Aoc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCkKK3sKKwlyZXR1cm4gX0hBTF9TVEFURV9TVE9QID09IHJ0bGhhbC0+c3RhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGFsX3N0YXJ0KHN0cnVjdCBydGxfaGFsICpydGxoYWwpCit7CisJcnRsaGFsLT5zdGF0ZSA9IF9IQUxfU1RBVEVfU1RBUlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGFsX3N0b3Aoc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCkKK3sKKwlydGxoYWwtPnN0YXRlID0gX0hBTF9TVEFURV9TVE9QOworfQorCitzdGF0aWMgaW5saW5lIHU4IGdldF9yZl90eXBlKHN0cnVjdCBydGxfcGh5ICpydGxwaHkpCit7CisJcmV0dXJuIHJ0bHBoeS0+cmZfdHlwZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnRsX2dldF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19sZTE2IHJ0bF9nZXRfZmMoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gcnRsX2dldF9oZHIoc2tiKS0+ZnJhbWVfY29udHJvbDsKK30KKworc3RhdGljIGlubGluZSB1MTYgcnRsX2dldF90aWRfaChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXJldHVybiAoaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikpWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0bF9nZXRfdGlkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHJ0bF9nZXRfdGlkX2gocnRsX2dldF9oZHIoc2tiKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9zdGEgKnJ0bF9maW5kX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSB1OCAqbWFjX2FkZHIpCit7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlyZXR1cm4gaWVlZTgwMjExX2ZpbmRfc3RhKG1hYy0+dmlmLCBtYWNfYWRkcik7Cit9CisKK3N0cnVjdCBpZWVlODAyMTFfaHcgKnJ0bF9wY2lfZ2V0X2h3X3BvaW50ZXIodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IGNhYzIwNTYuLmUwYWEwNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMzU0LDEyICszNTQsMTAgQEAKICNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9zY2FuCQlpZWVlODAyMTFfd3hfZ2V0X3NjYW5fcnNsCiAjZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlCQlpZWVlODAyMTFfd3hfc2V0X2VuY29kZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUJCWllZWU4MDIxMV93eF9nZXRfZW5jb2RlX3JzbAotI2lmIFdJUkVMRVNTX0VYVCA+PSAxOAogI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X21sbWUJCWllZWU4MDIxMV93eF9zZXRfbWxtZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9hdXRoCQlpZWVlODAyMTFfd3hfc2V0X2F1dGhfcnNsCiAjZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dAlpZWVlODAyMTFfd3hfc2V0X2VuY29kZV9leHRfcnNsCiAjZGVmaW5lIGllZWU4MDIxMV93eF9nZXRfZW5jb2RlX2V4dAlpZWVlODAyMTFfd3hfZ2V0X2VuY29kZV9leHRfcnNsCi0jZW5kaWYKIAogCiB0eXBlZGVmIHN0cnVjdCBpZWVlX3BhcmFtIHsKQEAgLTM5MiwxNiArMzkwLDYgQEAKIH1pZWVlX3BhcmFtOwogCiAKLSNpZiBXSVJFTEVTU19FWFQgPCAxNwotI2RlZmluZSBJV19RVUFMX1FVQUxfSU5WQUxJRCAgIDB4MTAKLSNkZWZpbmUgSVdfUVVBTF9MRVZFTF9JTlZBTElEICAweDIwCi0jZGVmaW5lIElXX1FVQUxfTk9JU0VfSU5WQUxJRCAgMHg0MAotI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRCAgIDB4MQotI2RlZmluZSBJV19RVUFMX0xFVkVMX1VQREFURUQgIDB4MgotI2RlZmluZSBJV19RVUFMX05PSVNFX1VQREFURUQgIDB4NAotI2VuZGlmCi0KLQogLy8gbGludXggdW5kZXIgMi42LjkgcmVsZWFzZSBtYXkgbm90IHN1cHBvcnQgaXQsIHNvIG1vZGlmeSBpdCBmb3IgY29tbW9uIHVzZQogI2RlZmluZSBNU0VDUyh0KSBtc2Vjc190b19qaWZmaWVzKHQpCiAjZGVmaW5lIG1zbGVlcF9pbnRlcnJ1cHRpYmxlX3JzbCAgbXNsZWVwX2ludGVycnVwdGlibGUKQEAgLTUzOSw3ICs1MjcsNyBAQAogCQl7CVwKIAkJCWludCBpOwkJCQkJXAogCQkJdTggKnBkYXRhID0gKHU4ICopIGRhdGE7CQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMTogJXMoKVxuIiwgX19GVU5DVElPTl9fKTsJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMTogJXMoKVxuIiwgX19mdW5jX18pOwlcCiAJCQlmb3IoaT0wOyBpPChpbnQpKGRhdGFsZW4pOyBpKyspCQkJXAogCQkJewkJCQkJCVwKIAkJCQlwcmludGsoIiUyeCAiLCBwZGF0YVtpXSk7CQlcCkBAIC0yMzk4LDcgKzIzODYsNiBAQAogZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci0jaWYgV0lSRUxFU1NfRVhUID49IDE4CiBleHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlX2V4dChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKQEAgLTI0MTEsNyArMjM5OCw2IEBACiBleHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfbWxtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLSNlbmRpZgogZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmllLCBzaXplX3QgbGVuKTsKIAogLyogaWVlZTgwMjExX3NvZnRtYWMuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCmluZGV4IGYyYjE2NzcuLmFmMjEyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCiB2b2lkIGllZWU4MDIxMV9jY21wX251bGwodm9pZCkKIHsKLS8vICAgIHByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisvLyAgICBwcmludGsoIj09PT09PT09PT09PT4lcygpXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggOTMxMjFiNC4uZmNjOTBhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtNzczLDYgKzc3Myw2IEBACiAKIHZvaWQgaWVlZTgwMjExX3RraXBfbnVsbCh2b2lkKQogewotLy8gICAgcHJpbnRrKCI9PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKy8vICAgIHByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCmluZGV4IGYyMDIyMzYuLjhjMWJmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCkBAIC0yOTAsNiArMjkwLDYgQEAKIAogdm9pZCBpZWVlODAyMTFfd2VwX251bGwodm9pZCkKIHsKLS8vCXByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisvLwlwcmludGsoIj09PT09PT09PT09PT4lcygpXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggYTk4NDE0YS4uZDlhODI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC01NDksNyArNTQ5LDcgQEAKIAl1OCBpID0gMCAsIGo9MDsKIAl1MTYgZXRoZXJ0eXBlOwogLy8JaWYoaW5kZXggPiAxKQotLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogaGFoYWhhaGhoaCwgV2UgaW5kaWNhdGUgcGFja2V0IGZyb20gcmVvcmRlciBsaXN0LCBpbmRleCBpcyAldVxuIixfX0ZVTkNUSU9OX18saW5kZXgpOworLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogaGFoYWhhaGhoaCwgV2UgaW5kaWNhdGUgcGFja2V0IGZyb20gcmVvcmRlciBsaXN0LCBpbmRleCBpcyAldVxuIixfX2Z1bmNfXyxpbmRleCk7CiAJZm9yKGogPSAwOyBqPGluZGV4OyBqKyspCiAJewogLy9hZGRlZCBieSBhbXkgZm9yIHJlb3JkZXIKQEAgLTYwOSw3ICs2MDksNyBAQAogCXUxNgkJCVdpbkVuZCA9IChwVFMtPlJ4SW5kaWNhdGVTZXEgKyBXaW5TaXplIC0xKSU0MDk2OwogCXU4CQkJaW5kZXggPSAwOwogCWJvb2wJCQliTWF0Y2hXaW5TdGFydCA9IGZhbHNlLCBiUGt0SW5CdWYgPSBmYWxzZTsKLQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JFT1JERVIsIiVzKCk6IFNlcSBpcyAlZCxwVFMtPlJ4SW5kaWNhdGVTZXEgaXMgJWQsIFdpblNpemUgaXMgJWRcbiIsX19GVU5DVElPTl9fLFNlcU51bSxwVFMtPlJ4SW5kaWNhdGVTZXEsV2luU2l6ZSk7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCIlcygpOiBTZXEgaXMgJWQscFRTLT5SeEluZGljYXRlU2VxIGlzICVkLCBXaW5TaXplIGlzICVkXG4iLF9fZnVuY19fLFNlcU51bSxwVFMtPlJ4SW5kaWNhdGVTZXEsV2luU2l6ZSk7CiAJLyogUnggUmVvcmRlciBpbml0aWFsaXplIGNvbmRpdGlvbi4qLwogCWlmKHBUUy0+UnhJbmRpY2F0ZVNlcSA9PSAweGZmZmYpIHsKIAkJcFRTLT5SeEluZGljYXRlU2VxID0gU2VxTnVtOwpAQCAtNjYyLDExICs2NjIsMTEgQEAKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCAiUGFja2V0cyBpbmRpY2F0aW9uISEgSW5kaWNhdGVTZXE6ICVkLCBOZXdTZXE6ICVkXG4iLFwKIAkJCQlwVFMtPlJ4SW5kaWNhdGVTZXEsIFNlcU51bSk7CiAJCXByeGJJbmRpY2F0ZUFycmF5WzBdID0gcHJ4YjsKLS8vCQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PT09PT4lcygpOiBTZXFOdW0gaXMgJWRcbiIsX19GVU5DVElPTl9fLFNlcU51bSk7CisvLwkJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT0+JXMoKTogU2VxTnVtIGlzICVkXG4iLF9fZnVuY19fLFNlcU51bSk7CiAJCWluZGV4ID0gMTsKIAl9IGVsc2UgewogCQkvKiBDdXJyZW50IHBhY2tldCBpcyBnb2luZyB0byBiZSBpbnNlcnRlZCBpbnRvIHBlbmRpbmcgbGlzdC4qLwotCQkvL0lFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogV2UgUlggbm8gb3JkZXJlZCBwYWNrZWQsIGluc2VydCB0byBvcmRlcmVkIGxpc3RcbiIsX19GVU5DVElPTl9fKTsKKwkJLy9JRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JFT1JERVIsIiVzKCk6IFdlIFJYIG5vIG9yZGVyZWQgcGFja2VkLCBpbnNlcnQgdG8gb3JkZXJlZCBsaXN0XG4iLF9fZnVuY19fKTsKIAkJaWYoIWxpc3RfZW1wdHkoJmllZWUtPlJ4UmVvcmRlcl9VbnVzZWRfTGlzdCkpIHsKIAkJCXBSZW9yZGVyRW50cnkgPSAoUFJYX1JFT1JERVJfRU5UUlkpbGlzdF9lbnRyeShpZWVlLT5SeFJlb3JkZXJfVW51c2VkX0xpc3QubmV4dCxSWF9SRU9SREVSX0VOVFJZLExpc3QpOwogCQkJbGlzdF9kZWxfaW5pdCgmcFJlb3JkZXJFbnRyeS0+TGlzdCk7CkBAIC02NzQsMTEgKzY3NCwxMSBAQAogCQkJLyogTWFrZSBhIHJlb3JkZXIgZW50cnkgYW5kIGluc2VydCBpbnRvIGEgdGhlIHBhY2tldCBsaXN0LiovCiAJCQlwUmVvcmRlckVudHJ5LT5TZXFOdW0gPSBTZXFOdW07CiAJCQlwUmVvcmRlckVudHJ5LT5wcnhiID0gcHJ4YjsKLQkvLwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCIlcygpOiBwUkVvcmRlckVudHJ5LT5TZXFOdW0gaXMgJWRcbiIsX19GVU5DVElPTl9fLHBSZW9yZGVyRW50cnktPlNlcU51bSk7CisJLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogcFJFb3JkZXJFbnRyeS0+U2VxTnVtIGlzICVkXG4iLF9fZnVuY19fLHBSZW9yZGVyRW50cnktPlNlcU51bSk7CiAKIAkJCWlmKCFBZGRSZW9yZGVyRW50cnkocFRTLCBwUmVvcmRlckVudHJ5KSkgewogCQkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwgIiVzKCk6IER1cGxpY2F0ZSBwYWNrZXQgaXMgZHJvcHBlZCEhIEluZGljYXRlU2VxOiAlZCwgTmV3U2VxOiAlZFxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBwVFMtPlJ4SW5kaWNhdGVTZXEsIFNlcU51bSk7CisJCQkJCV9fZnVuY19fLCBwVFMtPlJ4SW5kaWNhdGVTZXEsIFNlcU51bSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmcFJlb3JkZXJFbnRyeS0+TGlzdCwmaWVlZS0+UnhSZW9yZGVyX1VudXNlZF9MaXN0KTsKIAkJCQl7CiAJCQkJCWludCBpOwpAQCAtNzEzLDcgKzcxMyw3IEBACiAKIAkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcGFja2V0IG5lZWQgaW5kaWNhdGUuKi8KIAl3aGlsZSghbGlzdF9lbXB0eSgmcFRTLT5SeFBlbmRpbmdQa3RMaXN0KSkgewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JFT1JERVIsIiVzKCk6IHN0YXJ0IFJSRU9SREVSIGluZGljYXRlXG4iLF9fRlVOQ1RJT05fXyk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogc3RhcnQgUlJFT1JERVIgaW5kaWNhdGVcbiIsX19mdW5jX18pOwogCQlwUmVvcmRlckVudHJ5ID0gKFBSWF9SRU9SREVSX0VOVFJZKWxpc3RfZW50cnkocFRTLT5SeFBlbmRpbmdQa3RMaXN0LnByZXYsUlhfUkVPUkRFUl9FTlRSWSxMaXN0KTsKIAkJaWYoIFNOX0xFU1MocFJlb3JkZXJFbnRyeS0+U2VxTnVtLCBwVFMtPlJ4SW5kaWNhdGVTZXEpIHx8CiAJCQkJU05fRVFVQUwocFJlb3JkZXJFbnRyeS0+U2VxTnVtLCBwVFMtPlJ4SW5kaWNhdGVTZXEpKQpAQCAtNzMyLDcgKzczMiw3IEBACiAKIAkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiUGFja2V0cyBpbmRpY2F0aW9uISEgSW5kaWNhdGVTZXE6ICVkLCBOZXdTZXE6ICVkXG4iLHBUUy0+UnhJbmRpY2F0ZVNlcSwgU2VxTnVtKTsKIAkJCXByeGJJbmRpY2F0ZUFycmF5W2luZGV4XSA9IHBSZW9yZGVyRW50cnktPnByeGI7Ci0JCS8vCXByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PiVzKCk6IHBSZW9yZGVyRW50cnktPlNlcU51bSBpcyAlZFxuIixfX0ZVTkNUSU9OX18scFJlb3JkZXJFbnRyeS0+U2VxTnVtKTsKKwkJLy8JcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT0+JXMoKTogcFJlb3JkZXJFbnRyeS0+U2VxTnVtIGlzICVkXG4iLF9fZnVuY19fLHBSZW9yZGVyRW50cnktPlNlcU51bSk7CiAJCQlpbmRleCsrOwogCiAJCQlsaXN0X2FkZF90YWlsKCZwUmVvcmRlckVudHJ5LT5MaXN0LCZpZWVlLT5SeFJlb3JkZXJfVW51c2VkX0xpc3QpOwpAQCAtNzU4LDcgKzc1OCw3IEBACiAKIAlpZihiUGt0SW5CdWYgJiYgcFRTLT5SeFRpbWVvdXRJbmRpY2F0ZVNlcT09MHhmZmZmKSB7CiAJCS8vIFNldCBuZXcgcGVuZGluZyB0aW1lci4KLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCIlcygpOiBTRVQgcnggdGltZW91dCB0aW1lclxuIiwgX19GVU5DVElPTl9fKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCIlcygpOiBTRVQgcnggdGltZW91dCB0aW1lclxuIiwgX19mdW5jX18pOwogCQlwVFMtPlJ4VGltZW91dEluZGljYXRlU2VxID0gcFRTLT5SeEluZGljYXRlU2VxOwogCQlpZih0aW1lcl9wZW5kaW5nKCZwVFMtPlJ4UGt0UGVuZGluZ1RpbWVyKSkKIAkJCWRlbF90aW1lcl9zeW5jKCZwVFMtPlJ4UGt0UGVuZGluZ1RpbWVyKTsKQEAgLTgzMiw4ICs4MzIsOCBAQAogCiAJCQlpZihza2ItPmxlbjwoRVRIRVJORVRfSEVBREVSX1NJWkUgKyBuU3ViZnJhbWVfTGVuZ3RoKSkgewogCQkJCXByaW50aygiJXM6IEEtTVNEVSBwYXJzZSBlcnJvciEhIHBSZmQtPm5Ub3RhbFN1YmZyYW1lIDogJWRcbiIsXAotCQkJCQkJX19GVU5DVElPTl9fLHJ4Yi0+bnJfc3ViZnJhbWVzKTsKLQkJCQlwcmludGsoIiVzOiBBLU1TRFUgcGFyc2UgZXJyb3IhISBTdWJmcmFtZSBMZW5ndGg6ICVkXG4iLF9fRlVOQ1RJT05fXywgblN1YmZyYW1lX0xlbmd0aCk7CisJCQkJCQlfX2Z1bmNfXyxyeGItPm5yX3N1YmZyYW1lcyk7CisJCQkJcHJpbnRrKCIlczogQS1NU0RVIHBhcnNlIGVycm9yISEgU3ViZnJhbWUgTGVuZ3RoOiAlZFxuIixfX2Z1bmNfXywgblN1YmZyYW1lX0xlbmd0aCk7CiAJCQkJcHJpbnRrKCJuUmVtYWluX0xlbmd0aCBpcyAlZCBhbmQgblN1YmZyYW1lX0xlbmd0aCBpcyA6ICVkXG4iLHNrYi0+bGVuLG5TdWJmcmFtZV9MZW5ndGgpOwogCQkJCXByaW50aygiVGhlIFBhY2tldCBTZXFOdW0gaXMgJWRcbiIsU2VxTnVtKTsKIAkJCQlyZXR1cm4gMDsKQEAgLTk1MCw3ICs5NTAsNiBAQAogCiAJLy9JRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAjaWZkZWYgTk9UX1lFVAotI2lmIFdJUkVMRVNTX0VYVCA+IDE1CiAJLyogUHV0IHRoaXMgY29kZSBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgZHVwbGljYXRpbmcgaXQgaW4gYWxsCiAJICogUnggcGF0aHMuIC0gSmVhbiBJSSAqLwogI2lmZGVmIElXX1dJUkVMRVNTX1NQWQkJLyogZGVmaW5lZCBpbiBpd19oYW5kbGVyLmggKi8KQEAgLTk2NCwxOCArOTYzLDE2IEBACiAJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBoZHItPmFkZHIyLCAmd3N0YXRzKTsKIAl9CiAjZW5kaWYgLyogSVdfV0lSRUxFU1NfU1BZICovCi0jZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTUgKi8KIAlob3N0YXBfdXBkYXRlX3J4X3N0YXRzKGxvY2FsLT5hcCwgaGRyLCByeF9zdGF0cyk7CiAjZW5kaWYKIAotI2lmIFdJUkVMRVNTX0VYVCA+IDE1CiAJaWYgKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CiAJCWllZWU4MDIxMV9tb25pdG9yX3J4KGllZWUsIHNrYiwgcnhfc3RhdHMpOwogCQlzdGF0cy0+cnhfcGFja2V0cysrOwogCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXJldHVybiAxOwogCX0KLSNlbmRpZgorCiAJaWYgKGllZWUtPmhvc3RfZGVjcnlwdCkgewogCQlpbnQgaWR4ID0gMDsKIAkJaWYgKHNrYi0+bGVuID49IGhkcmxlbiArIDMpCkBAIC0xMDI3LDcgKzEwMjQsNyBAQAogCWVsc2UKIAl7CiAJCVBSWF9UU19SRUNPUkQgcFJ4VFMgPSBOVUxMOwotCQkJLy9JRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JFT1JERVIsIiVzKCk6IFFPUyBFTkFCTEUgQU5EIFJFQ0VJVkUgUU9TIERBVEEgLCB3ZSB3aWxsIGdldCBUcywgdGlkOiVkXG4iLF9fRlVOQ1RJT05fXywgdGlkKTsKKwkJCS8vSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCIlcygpOiBRT1MgRU5BQkxFIEFORCBSRUNFSVZFIFFPUyBEQVRBICwgd2Ugd2lsbCBnZXQgVHMsIHRpZDolZFxuIixfX2Z1bmNfXywgdGlkKTsKIAkJaWYoR2V0VHMoCiAJCQkJaWVlZSwKIAkJCQkoUFRTX0NPTU1PTl9JTkZPICopICZwUnhUUywKQEAgLTEwMzcsNyArMTAzNCw3IEBACiAJCQkJdHJ1ZSkpCiAJCXsKIAotCQkvLwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JFT1JERVIsIiVzKCk6IHBSeFRTLT5SeExhc3RGcmFnTnVtIGlzICVkLGZyYWcgaXMgJWQscFJ4VFMtPlJ4TGFzdFNlcU51bSBpcyAlZCxzZXEgaXMgJWRcbiIsX19GVU5DVElPTl9fLHBSeFRTLT5SeExhc3RGcmFnTnVtLGZyYWcscFJ4VFMtPlJ4TGFzdFNlcU51bSxXTEFOX0dFVF9TRVFfU0VRKHNjKSk7CisJCS8vCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogcFJ4VFMtPlJ4TGFzdEZyYWdOdW0gaXMgJWQsZnJhZyBpcyAlZCxwUnhUUy0+UnhMYXN0U2VxTnVtIGlzICVkLHNlcSBpcyAlZFxuIixfX2Z1bmNfXyxwUnhUUy0+UnhMYXN0RnJhZ051bSxmcmFnLHBSeFRTLT5SeExhc3RTZXFOdW0sV0xBTl9HRVRfU0VRX1NFUShzYykpOwogCQkJaWYoCShmYyAmICgxPDwxMSkpICAmJgogCQkJCQkoZnJhZyA9PSBwUnhUUy0+UnhMYXN0RnJhZ051bSkgJiYKIAkJCQkJKFdMQU5fR0VUX1NFUV9TRVEoc2MpID09IHBSeFRTLT5SeExhc3RTZXFOdW0pCSkKQEAgLTEwNTIsNyArMTA0OSw3IEBACiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiVzKCk6IE5vIFRTISEgU2tpcCB0aGUgY2hlY2shIVxuIixfX0ZVTkNUSU9OX18pOworCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIlcygpOiBObyBUUyEhIFNraXAgdGhlIGNoZWNrISFcbiIsX19mdW5jX18pOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAJfQpAQCAtMTI5Nyw3ICsxMjk0LDcgQEAKIAlyeGIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4YiksIEdGUF9BVE9NSUMpOwogCWlmKHJ4YiA9PSBOVUxMKQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsIiVzKCk6IGttYWxsb2MgcnhiIGVycm9yXG4iLF9fRlVOQ1RJT05fXyk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCIlcygpOiBrbWFsbG9jIHJ4YiBlcnJvclxuIixfX2Z1bmNfXyk7CiAJCWdvdG8gcnhfZHJvcHBlZDsKIAl9CiAJLyogdG8gcGFyc2UgYW1zZHUgcGFja2V0cyAqLwpAQCAtMTM2Myw3ICsxMzYwLDcgQEAKIAl9CiAJZWxzZQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCIlcygpOiBSRU9SREVSIEVOQUJMRSBBTkQgUFRTIG5vdCBOVUxMLCBhbmQgd2Ugd2lsbCBlbnRlciBSeFJlb3JkZXJJbmRpY2F0ZVBhY2tldCgpXG4iLF9fRlVOQ1RJT05fXyk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiJXMoKTogUkVPUkRFUiBFTkFCTEUgQU5EIFBUUyBub3QgTlVMTCwgYW5kIHdlIHdpbGwgZW50ZXIgUnhSZW9yZGVySW5kaWNhdGVQYWNrZXQoKVxuIixfX2Z1bmNfXyk7CiAJCVJ4UmVvcmRlckluZGljYXRlUGFja2V0KGllZWUsIHJ4YiwgcFRTLCBTZXFOdW0pOwogCX0KICNpZm5kZWYgSk9ITl9OT0NQWQpAQCAtMTM4Nyw2ICsxMzg0LDcgQEAKIAkgKiBoYXJkd2FyZSBhcyBhIERNQSB0YXJnZXQgKi8KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4KTsKIAogI2RlZmluZSBNR01UX0ZSQU1FX0ZJWEVEX1BBUlRfTEVOR1RIICAgICAgICAgICAgMHgyNAogCkBAIC0xNDc5LDcgKzE0NzcsNiBAQAogCQkJCQkJICBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKIAkJCQkJCSAgKnFvc19wYXJhbSkKIHsKLQlpbnQgcmMgPSAwOwogCWludCBpOwogCXN0cnVjdCBpZWVlODAyMTFfcW9zX2FjX3BhcmFtZXRlciAqYWNfcGFyYW1zOwogCXU4IGFjaTsKQEAgLTE1MDYsNyArMTUwMyw3IEBACiAJCSAgICAoYWNfcGFyYW1zLT5hY2lfYWlmc24gJiAweDEwKSA/IDB4MDEgOiAweDAwOwogCQlxb3NfcGFyYW0tPnR4X29wX2xpbWl0W2FjaV0gPSBsZTE2X3RvX2NwdShhY19wYXJhbXMtPnR4X29wX2xpbWl0KTsKIAl9Ci0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTkyOSw3ICsxOTI2LDcgQEAKIAkJCQlpbmZvX2VsZW1lbnQtPmRhdGFbMV0gPT0gMHgxMyAmJgogCQkJCWluZm9fZWxlbWVudC0+ZGF0YVsyXSA9PSAweDc0KSkKIAkJCXsKLQkJCQlwcmludGsoIj09PT09PT09PiVzKCk6IGF0aHJvcyBBUCBpcyBleGlzdFxuIixfX0ZVTkNUSU9OX18pOworCQkJCXByaW50aygiPT09PT09PT0+JXMoKTogYXRocm9zIEFQIGlzIGV4aXN0XG4iLF9fZnVuY19fKTsKIAkJCQluZXR3b3JrLT5hdGhlcm9zX2NhcF9leGlzdCA9IHRydWU7CiAJCQl9CiAJCQllbHNlCkBAIC0yNjQzLDYgKzI2NDAsNCBAQAogCiAJfQogfQotCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9tZ3QpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDIxMzE5MTIuLmM1YTBhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTI4LDExICsyOCwxMyBAQAogewogCXJldHVybiAobmV0LT5yYXRlc19leF9sZW4gPiAwKSB8fCAobmV0LT5yYXRlc19sZW4gPiA0KTsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2lzXzU0Zyk7CiAKIHNob3J0IGllZWU4MDIxMV9pc19zaG9ydHNsb3QoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXQpCiB7CiAJcmV0dXJuIG5ldC0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfc2hvcnRzbG90KTsKIAogLyogcmV0dXJucyB0aGUgdG90YWwgbGVuZ3RoIG5lZWRlZCBmb3IgcGxlYWNpbmcgdGhlIFJBVEUgTUZJRQogICogdGFnIGFuZCB0aGUgRVhURU5ERUQgUkFURSBNRklFIHRhZyBpZiBuZWVkZWQuCkBAIC0yNzEsNyArMjczLDcgQEAKIAkJCS8qIGFzIGZvciB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgaXQgZG9lcyBub3QgbmVlZAogCQkJICogdG8gY2hlY2sgaXQgYW55IG1vcmUuCiAJCQkgKiAqLwotCQkJcHJpbnRrKCIlcygpOmluc2VydCB0byB3YWl0cXVldWUhXG4iLF9fRlVOQ1RJT05fXyk7CisJCQlwcmludGsoIiVzKCk6aW5zZXJ0IHRvIHdhaXRxdWV1ZSFcbiIsX19mdW5jX18pOwogCQkJc2tiX3F1ZXVlX3RhaWwoJmllZWUtPnNrYl93YWl0UVt0Y2JfZGVzYy0+cXVldWVfaW5kZXhdLCBza2IpOwogCQl9IGVsc2UgewogCQkJLy9wcmludGsoIlRYIHBhY2tldCFcbiIpOwpAQCAtNDE1LDYgKzQxNyw3IEBACiAJCWllZWU4MDIxMV9zZW5kX3Byb2JlKGllZWUpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxdWVzdHMpOwogCiAvKiB0aGlzIHBlcmZvcm1zIHN5bmNybyBzY2FuIGJsb2NraW5nIHRoZSBjYWxsZXIgdW50aWwgYWxsIGNoYW5uZWxzCiAgKiBpbiB0aGUgYWxsb3dlZCBjaGFubmVsIG1hcCBoYXMgYmVlbiBjaGVja2VkLgpAQCAtNDg1LDcgKzQ4OCw3IEBACiAJdXAoJmllZWUtPnNjYW5fc2VtKTsKIH0KIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNybyk7CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewpAQCAtNTYzLDcgKzU2Niw3IEBACiAJaWYgKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfQkVBQ09OUykKIAkJaWVlZTgwMjExX2JlYWNvbnNfc3RvcChpZWVlKTsKIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnMpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CkBAIC01NzIsNyArNTc1LDcgQEAKIAlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0JFQUNPTlMpCiAJCWllZWU4MDIxMV9iZWFjb25zX3N0YXJ0KGllZWUpOwogfQotCitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMpOwogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdG9wX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CkBAIC02MDAsNiArNjAzLDcgQEAKIAllbHNlCiAJCWllZWUtPnN0b3Bfc2NhbihpZWVlLT5kZXYpOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF9zY2FuKTsKIAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBoZWxkICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTYzOCw2ICs2NDIsNyBAQAogCQlpZWVlLT5zY2FuX3N5bmNybyhpZWVlLT5kZXYpOwogCiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybyk7CiAKIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2F1dGhlbnRpY2F0aW9uX3JlcShzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKmJlYWNvbiwKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgaW50IGNoYWxsZW5nZWxlbikKQEAgLTY3MCw3ICs2NzUsNyBAQAogCQlhdXRoLT5hbGdvcml0aG0gPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKIAllbHNlIGlmKGllZWUtPmF1dGhfbW9kZSA9PSAyKQogCQlhdXRoLT5hbGdvcml0aG0gPSBXTEFOX0FVVEhfT1BFTjsvLzB4ODA7Ci0JcHJpbnRrKCI9PT09PT09PT09PT09PT09PT4lcygpOmF1dGgtPmFsZ29yaXRobSBpcyAlZFxuIixfX0ZVTkNUSU9OX18sYXV0aC0+YWxnb3JpdGhtKTsKKwlwcmludGsoIj09PT09PT09PT09PT09PT09PiVzKCk6YXV0aC0+YWxnb3JpdGhtIGlzICVkXG4iLF9fZnVuY19fLGF1dGgtPmFsZ29yaXRobSk7CiAJYXV0aC0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNihpZWVlLT5hc3NvY2lhdGVfc2VxKTsKIAlpZWVlLT5hc3NvY2lhdGVfc2VxKys7CiAKQEAgLTEyMTIsNyArMTIxNyw3IEBACiAJCQltZW1jcHkodGFnLCByZWFsdGVrX2llX2J1ZixyZWFsdGVrX2llX2xlbiAtMiApOwogCQl9CiAJfQotLy8JcHJpbnRrKCI8PT09PT0lcygpLCAlcCwgJXBcbiIsIF9fRlVOQ1RJT05fXywgaWVlZS0+ZGV2LCBpZWVlLT5kZXYtPmRldl9hZGRyKTsKKy8vCXByaW50aygiPD09PT09JXMoKSwgJXAsICVwXG4iLCBfX2Z1bmNfXywgaWVlZS0+ZGV2LCBpZWVlLT5kZXYtPmRldl9hZGRyKTsKIC8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlyZXR1cm4gc2tiOwogfQpAQCAtMTM5OCw3ICsxNDAzLDcgQEAKIAkJaWVlZS0+ZGF0YV9oYXJkX3N0b3AoaWVlZS0+ZGV2KTsKIAogCWllZWU4MDIxMV9zdG9wX3NjYW4oaWVlZSk7Ci0JcHJpbnRrKCI9PT0+JXMoKSwgY2hhbjolZFxuIiwgX19GVU5DVElPTl9fLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7CisJcHJpbnRrKCI9PT0+JXMoKSwgY2hhbjolZFxuIiwgX19mdW5jX18sIGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKIAkvL2llZWUtPnNldF9jaGFuKGllZWUtPmRldiwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwpOwogCUhUU2V0Q29ubmVjdEJ3TW9kZShpZWVlLCBIVF9DSEFOTkVMX1dJRFRIXzIwLCBIVF9FWFRDSE5MX09GRlNFVF9OT19FWFQpOwogCkBAIC0xNzA5LDggKzE3MTQsNiBAQAogCS8vRklYTUUKIH0KIAotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCQkgICAgIHNob3J0IHB3cikKIHsKQEAgLTE3MjEsNyArMTcyNCw3IEBACiAJCXNvZnRtYWNfcHNfbWdtdF94bWl0KGJ1ZiwgaWVlZSk7CiAKIH0KLQorLyogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZSk7ICovCiAKIHN0YXRpYyBzaG9ydCBpZWVlODAyMTFfc3RhX3BzX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1MzIgKnRpbWVfaCwKIAkJCQkgICAgdTMyICp0aW1lX2wpCkBAIC0xODg5LDYgKzE4OTIsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9wc190eF9hY2spOworCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTkwMywyMCArMTkwOCwxNyBAQAogCX0KIAl0bXAgPSAqYWN0OwogCWFjdCArKzsKLQlzd2l0Y2ggKHRtcCkKLQl7Ci0JCWNhc2UgQUNUX0NBVF9CQToKLQkJCWlmICgqYWN0ID09IEFDVF9BRERCQVJFUSkKKwlzd2l0Y2ggKHRtcCkgeworCWNhc2UgQUNUX0NBVF9CQToKKwkJaWYgKCphY3QgPT0gQUNUX0FEREJBUkVRKQogCQkJaWVlZTgwMjExX3J4X0FEREJBUmVxKGllZWUsIHNrYik7Ci0JCQllbHNlIGlmICgqYWN0ID09IEFDVF9BRERCQVJTUCkKKwkJZWxzZSBpZiAoKmFjdCA9PSBBQ1RfQUREQkFSU1ApCiAJCQlpZWVlODAyMTFfcnhfQUREQkFSc3AoaWVlZSwgc2tiKTsKLQkJCWVsc2UgaWYgKCphY3QgPT0gQUNUX0RFTEJBKQorCQllbHNlIGlmICgqYWN0ID09IEFDVF9ERUxCQSkKIAkJCWllZWU4MDIxMV9yeF9ERUxCQShpZWVlLCBza2IpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0vLwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0vLwkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfQkEsICJ1bmtub3duIGFjdGlvbiBmcmFtZSglZClcbiIsIHRtcCk7Ci0JCQlicmVhazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCXJldHVybjsKIApAQCAtMjE5MSw2ICsyMTkzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLGZsYWdzKTsKIAogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY194bWl0KTsKIAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBhY3F1aXJlZCAqLwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3Jlc3VtZV90eChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTIyMzIsNiArMjIzNSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jayxmbGFncyk7CiAKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKTsKIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKQEAgLTIyNzIsNyArMjI3Niw3IEBACiBleGl0IDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLGZsYWdzKTsKIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd2FrZV9xdWV1ZSk7CiAKIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CkBAIC0yMjg3LDcgKzIyOTEsNyBAQAogCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jayxmbGFncyk7CiAKIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF9xdWV1ZSk7CiAKIGlubGluZSB2b2lkIGllZWU4MDIxMV9yYW5kb21pemVfY2VsbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKQEAgLTI1MDUsNiArMjUwOSw4IEBACiAJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KGllZWUpOwogCiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9kaXNhc3NvY2lhdGUpOworCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKQEAgLTI1ODQsNiArMjU5MCw3IEBACiAKIAlyZXR1cm4gc2tiOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2JlYWNvbik7CiAKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKQEAgLTI1OTIsNyArMjU5OSw3IEBACiAJaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSk7CiAJdXAoJmllZWUtPnd4X3NlbSk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbCk7CiAKIHZvaWQgaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CkBAIC0yNjE4LDYgKzI2MjUsNyBAQAogCWllZWU4MDIxMV9zdGFydF9wcm90b2NvbChpZWVlKTsKIAl1cCgmaWVlZS0+d3hfc2VtKTsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2wpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKQEAgLTI2MzksNyArMjY0Nyw3IEBACiAKIAlpZiAoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJlYWNvbl9pbnRlcnZhbCA9PSAwKQogCQlpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsID0gMTAwOwotLy8JcHJpbnRrKCI9PT0+JXMoKSwgY2hhbjolZFxuIiwgX19GVU5DVElPTl9fLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7CisvLwlwcmludGsoIj09PT4lcygpLCBjaGFuOiVkXG4iLCBfX2Z1bmNfXywgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwpOwogLy8JaWVlZS0+c2V0X2NoYW4oaWVlZS0+ZGV2LGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKIAogCWZvcihpID0gMDsgaSA8IDE3OyBpKyspIHsKQEAgLTI4NDYsNyArMjg1NCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CiAJCS5mbGFncyA9IFNFQ19BVVRIX01PREUsCiAJfTsKLQlpbnQgcmV0ID0gMDsKIAogCWlmICh2YWx1ZSAmIEFVVEhfQUxHX1NIQVJFRF9LRVkpIHsKIAkJc2VjLmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwpAQCAtMjg2OSw3ICsyODc2LDcgQEAKIAkvL2Vsc2UKIAkvLwlyZXQgPSAtRU9QTk9UU1VQUDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3dwYV9zZXRfcGFyYW0oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IG5hbWUsIHUzMiB2YWx1ZSkKQEAgLTMxNDEsNiArMzE0OCw3IEBACiAJCQkJLy9kZXZfa2ZyZWVfc2tiX2FueShza2IpOy8vZWRpdCBieSB0aG9tYXMKIAkJfQogfQorRVhQT1JUX1NZTUJPTChTZW5kRGlzYXNzb2NpYXRpb24pOwogCiBpbnQgaWVlZTgwMjExX3dwYV9zdXBwbGljYW50X2lvY3RsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaXdfcG9pbnQgKnApCiB7CkBAIC0zMTk2LDYgKzMyMDQsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3dwYV9zdXBwbGljYW50X2lvY3RsKTsKIAogdm9pZCBub3RpZnlfd3hfYXNzb2NfZXZlbnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CkBAIC0zMjA3LDI1ICszMjE2LDQgQEAKIAkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CiAJd2lyZWxlc3Nfc2VuZF9ldmVudChpZWVlLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwogfQotCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfYmVhY29uKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3dha2VfcXVldWUpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF9xdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZXNldF9xdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9pc19zaG9ydHNsb3QpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfNTRnKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3dwYV9zdXBwbGljYW50X2lvY3RsKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3BzX3R4X2Fjayk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3htaXQpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnMpOwogRVhQT1JUX1NZTUJPTChub3RpZnlfd3hfYXNzb2NfZXZlbnQpOwotRVhQT1JUX1NZTUJPTChTZW5kRGlzYXNzb2NpYXRpb24pOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZGlzYXNzb2NpYXRlKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3NjYW4pOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXF1ZXN0cyk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fc3luY3JvKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKaW5kZXggN2I3ZDkyOS4uOTM1YThmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYwpAQCAtMjYsNyArMjYsNyBAQAogCTI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsCiAJMjQ3MiwgMjQ4NAogfTsKLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd2xhbl9mcmVxdWVuY2llcyk7CiAKIGludCBpZWVlODAyMTFfd3hfc2V0X2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpCkBAIC04Myw3ICs4Myw3IEBACiAJdXAoJmllZWUtPnd4X3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2ZyZXEpOwogCiBpbnQgaWVlZTgwMjExX3d4X2dldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICphLApAQCAtMTAxLDYgKzEwMSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9mcmVxKTsKIAogaW50IGllZWU4MDIxMV93eF9nZXRfd2FwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0xMjksNyArMTMwLDcgQEAKIAogCXJldHVybiAwOwogfQotCitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfd2FwKTsKIAogaW50IGllZWU4MDIxMV93eF9zZXRfd2FwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0xNzYsNiArMTc3LDcgQEAKIAl1cCgmaWVlZS0+d3hfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3dhcCk7CiAKICBpbnQgaWVlZTgwMjExX3d4X2dldF9lc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSx1bmlvbiBpd3JlcV9kYXRhICp3cnF1LGNoYXIgKmIpCiB7CkBAIC0yMTEsNiArMjEzLDcgQEAKIAlyZXR1cm4gcmV0OwogCiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZXNzaWQpOwogCiBpbnQgaWVlZTgwMjExX3d4X3NldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMjIzLDggKzIyNiw3IEBACiAJLy9GSVhNRTogd2UgbWlnaHQgd2FudCB0byBsaW1pdCByYXRlIGFsc28gaW4gbWFuYWdlbWVudCBwcm90b2NvbHMuCiAJcmV0dXJuIDA7CiB9Ci0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3JhdGUpOwogCiBpbnQgaWVlZTgwMjExX3d4X2dldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMjM3LDcgKzIzOSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3JhdGUpOwogCiBpbnQgaWVlZTgwMjExX3d4X3NldF9ydHMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0yNTQsNiArMjU2LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcnRzKTsKIAogaW50IGllZWU4MDIxMV93eF9nZXRfcnRzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMjY0LDYgKzI2Nyw4IEBACiAJd3JxdS0+cnRzLmRpc2FibGVkID0gKHdycXUtPnJ0cy52YWx1ZSA9PSBERUZBVUxUX1JUU19USFJFU0hPTEQpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3J0cyk7CisKIGludCBpZWVlODAyMTFfd3hfc2V0X21vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpCiB7CkBAIC0yOTQsNiArMjk5LDcgQEAKIAl1cCgmaWVlZS0+d3hfc2VtKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9tb2RlKTsKIAogdm9pZCBpZWVlODAyMTFfd3hfc3luY19zY2FuX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTM3OCw2ICszODQsNyBAQAogCXVwKCZpZWVlLT53eF9zZW0pOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfc2Nhbik7CiAKIGludCBpZWVlODAyMTFfd3hfc2V0X2Vzc2lkKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKQEAgLTQzMiw2ICs0MzksNyBAQAogCXVwKCZpZWVlLT53eF9zZW0pOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZXNzaWQpOwogCiAgaW50IGllZWU4MDIxMV93eF9nZXRfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKIAkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqYikKQEAgLTQ0MCw2ICs0NDgsNyBAQAogCXdycXUtPm1vZGUgPSBpZWVlLT5pd19tb2RlOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X21vZGUpOwogCiAgaW50IGllZWU4MDIxMV93eF9zZXRfcmF3dHgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTQ3Nyw2ICs0ODYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcmF3dHgpOwogCiBpbnQgaWVlZTgwMjExX3d4X2dldF9uYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtNTAyLDcgKzUxMiw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X25hbWUpOwogCiAvKiB0aGlzIGlzIG1vc3RseSBzdG9sZW4gZnJvbSBob3N0YXAgKi8KIGludCBpZWVlODAyMTFfd3hfc2V0X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLApAQCAtNTUzLDE0ICs1NjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogCiB9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcG93ZXIpOwogCiAvKiB0aGlzIGlzIHN0b2xlbiBmcm9tIGhvc3RhcCAqLwogaW50IGllZWU4MDIxMV93eF9nZXRfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCWludCByZXQgPTA7Ci0KIAlkb3duKCZpZWVlLT53eF9zZW0pOwogCiAJaWYoaWVlZS0+cHMgPT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEKXsKQEAgLTU5MCwyNCArNTk5LDcgQEAKIAogZXhpdDoKIAl1cCgmaWVlZS0+d3hfc2VtKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZXNzaWQpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2Vzc2lkKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9yYXRlKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9yYXRlKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF93YXApOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3dhcCk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfc2Nhbik7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZnJlcSk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZnJlcSk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcmF3dHgpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X25hbWUpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3Bvd2VyKTsKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9wb3dlcik7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93bGFuX2ZyZXF1ZW5jaWVzKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9ydHMpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3J0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCA2Nzc5YmRkLi4wMjlhOTc2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAogCWlmICghKGNyeXB0ICYmIGNyeXB0LT5vcHMpKQogCXsKLQkJcHJpbnRrKCI9PT09PT09PT0+JXMoKSwgY3J5cHQgaXMgbnVsbFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKCI9PT09PT09PT0+JXMoKSwgY3J5cHQgaXMgbnVsbFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogI2lmZGVmIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUApAQCAtMjM2LDYgKzIzNiw3IEBACiAJCXJldHVybjsKIAlrZnJlZSh0eGIpOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhiX2ZyZWUpOwogCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV90eGIgKmllZWU4MDIxMV9hbGxvY190eGIoaW50IG5yX2ZyYWdzLCBpbnQgdHhiX3NpemUsCiAJCQkJCQkgZ2ZwX3QgZ2ZwX21hc2spCkBAIC05MTMsNSArOTE0LDMgQEAKIAlyZXR1cm4gMTsKIAogfQotCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eGJfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCBiZGY2N2VjLi42OTg1MDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCiAJICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7Ci0jaWYgKFdJUkVMRVNTX0VYVCA8IDE4KQorCiAJaWYgKGllZWUtPndwYV9lbmFibGVkICYmIG5ldHdvcmstPndwYV9pZV9sZW4pewogCQljaGFyIGJ1ZltNQVhfV1BBX0lFX0xFTiAqIDIgKyAzMF07CiAJLy8JcHJpbnRrKCJXUEEgSUVcbiIpOwpAQCAtMjI0LDI2ICsyMjQsNiBAQAogCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwogCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwogCX0KLSNlbHNlCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpZiAobmV0d29yay0+d3BhX2llX2xlbikKLQl7Ci0JCWNoYXIgYnVmW01BWF9XUEFfSUVfTEVOXTsKLQkJbWVtY3B5KGJ1ZiwgbmV0d29yay0+d3BhX2llLCBuZXR3b3JrLT53cGFfaWVfbGVuKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXR3b3JrLT53cGFfaWVfbGVuOwotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotCX0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWlmIChuZXR3b3JrLT5yc25faWVfbGVuKQotCXsKLQkJY2hhciBidWZbTUFYX1dQQV9JRV9MRU5dOwotCQltZW1jcHkoYnVmLCBuZXR3b3JrLT5yc25faWUsIG5ldHdvcmstPnJzbl9pZV9sZW4pOwotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IG5ldHdvcmstPnJzbl9pZV9sZW47Ci0JCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGJ1Zik7Ci0JfQotI2VuZGlmCiAKIAogCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQpAQCAtMzA1LDYgKzI4NSw3IEBACiAKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3NjYW4pOwogCiBpbnQgaWVlZTgwMjExX3d4X3NldF9lbmNvZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTQ3OSw2ICs0NjAsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9lbmNvZGUpOwogCiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTUyMSw3ICs1MDMsOCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jaWYgKFdJUkVMRVNTX0VYVCA+PSAxOCkKK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGUpOworCiBpbnQgaWVlZTgwMjExX3d4X3NldF9lbmNvZGVfZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCkBAIC02OTUsNiArNjc4LDcgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9lbmNvZGVfZXh0KTsKIAogaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlX2V4dChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtNzUwLDYgKzczNCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGVfZXh0KTsKIAogaW50IGllZWU4MDIxMV93eF9zZXRfbWxtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtNzY2LDYgKzc1MSw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X21sbWUpOwogCiBpbnQgaWVlZTgwMjExX3d4X3NldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC03OTIsNyArNzc4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCS8vcHJpbnRrKCI9PT09PT0+JXMoKTpkYXRhLT52YWx1ZSBpcyAlZFxuIixfX0ZVTkNUSU9OX18sZGF0YS0+dmFsdWUpOworCQkvL3ByaW50aygiPT09PT09PiVzKCk6ZGF0YS0+dmFsdWUgaXMgJWRcbiIsX19mdW5jX18sZGF0YS0+dmFsdWUpOwogCS8vCWllZWUtPm9wZW5fd2VwID0gKGRhdGEtPnZhbHVlJklXX0FVVEhfQUxHX09QRU5fU1lTVEVNKT8xOjA7CiAJCWlmKGRhdGEtPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSl7CiAJCQlpZWVlLT5vcGVuX3dlcCA9IDA7CkBAIC04MjgsNyArODE0LDggQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9hdXRoKTsKKwogaW50IGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqaWUsIHNpemVfdCBsZW4pCiB7CiAJdTggKmJ1ZjsKQEAgLTg2MiwxNCArODQ5LDQgQEAKIAlyZXR1cm4gMDsKIAogfQotCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKTsKLSNpZiAoV0lSRUxFU1NfRVhUID49IDE4KQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X21sbWUpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2F1dGgpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2VuY29kZV9leHQpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X2VuY29kZV9leHQpOwotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfc2Nhbik7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IDdiZjU1ZTMuLmI4Y2M2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXUxNiB0bXAgPSAwOwogCXUxNiBsZW4gPSBpZWVlLT50eF9oZWFkcm9vbSArIDk7CiAJLy9jYXRlZ29yeSgxKSArIGFjdGlvbiBmaWVsZCgxKSArIERpYWxvZyBUb2tlbigxKSArIEJBIFBhcmFtZXRlciBTZXQoMikgKyAgQkEgVGltZW91dCBWYWx1ZSgyKSArICBCQSBTdGFydCBTZXFDdHJsKDIpKG9yIFN0YXR1c0NvZGUoMikpCi0JSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIGZyYW1lKCVkKSBzZW50ZCB0bzolcE0sIGllZWUtPmRldjolcFxuIiwgX19GVU5DVElPTl9fLCB0eXBlLCBEc3QsIGllZWUtPmRldik7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIGZyYW1lKCVkKSBzZW50ZCB0bzolcE0sIGllZWUtPmRldjolcFxuIiwgX19mdW5jX18sIHR5cGUsIERzdCwgaWVlZS0+ZGV2KTsKIAlpZiAocEJBID09IE5VTEx8fGllZWUgPT0gTlVMTCkKIAl7CiAJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAicEJBKCVwKSBpcyBOVUxMIG9yIGllZWUoJXApIGlzIE5VTExcbiIsIHBCQSwgaWVlZSk7CkBAIC0yMDEsNyArMjAxLDcgQEAKIAl1MTYgbGVuID0gNiArIGllZWUtPnR4X2hlYWRyb29tOwogCiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgUmVhc29uQ29kZSglZCkgc2VudGQgdG86JXBNXG4iLCBfX0ZVTkNUSU9OX18sIFJlYXNvbkNvZGUsIGRzdCk7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIFJlYXNvbkNvZGUoJWQpIHNlbnRkIHRvOiVwTVxuIiwgX19mdW5jX18sIFJlYXNvbkNvZGUsIGRzdCk7CiAKIAltZW1zZXQoJkRlbGJhUGFyYW1TZXQsIDAsIDIpOwogCkBAIC0yNDAsNyArMjQwLDcgQEAKIAogCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBfElFRUU4MDIxMV9ETF9CQSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPD09PT09JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPD09PT09JXMoKVxuIiwgX19mdW5jX18pOwogCXJldHVybiBza2I7CiB9CiAKQEAgLTI2Niw3ICsyNjYsNyBAQAogCX0KIAllbHNlCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImFsbG9jIHNrYiBlcnJvciBpbiBmdW5jdGlvbiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImFsbG9jIHNrYiBlcnJvciBpbiBmdW5jdGlvbiAlcygpXG4iLCBfX2Z1bmNfXyk7CiAJfQogCXJldHVybjsKIH0KQEAgLTI5MSw3ICsyOTEsNyBAQAogCX0KIAllbHNlCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImFsbG9jIHNrYiBlcnJvciBpbiBmdW5jdGlvbiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImFsbG9jIHNrYiBlcnJvciBpbiBmdW5jdGlvbiAlcygpXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuOwpAQCAtMzIwLDcgKzMyMCw3IEBACiAJfQogCWVsc2UKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiYWxsb2Mgc2tiIGVycm9yIGluIGZ1bmN0aW9uICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiYWxsb2Mgc2tiIGVycm9yIGluIGZ1bmN0aW9uICVzKClcbiIsIF9fZnVuY19fKTsKIAl9CiAJcmV0dXJuIDsKIH0KQEAgLTM4MCw3ICszODAsNyBAQAogCQkJdHJ1ZSkJKQogCXsKIAkJcmMgPSBBRERCQV9TVEFUVVNfUkVGVVNFRDsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJjYW4ndCBnZXQgVFMgaW4gJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJjYW4ndCBnZXQgVFMgaW4gJXMoKVxuIiwgX19mdW5jX18pOwogCQlnb3RvIE9uQUREQkFSZXFfRmFpbDsKIAl9CiAJcEJBID0gJnBUUy0+UnhBZG1pdHRlZEJBUmVjb3JkOwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJaWYocEJhUGFyYW1TZXQtPmZpZWxkLkJBUG9saWN5ID09IEJBX1BPTElDWV9ERUxBWUVEKQogCXsKIAkJcmMgPSBBRERCQV9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJCQSBQb2xpY3kgaXMgbm90IGNvcnJlY3QgaW4gJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJCQSBQb2xpY3kgaXMgbm90IGNvcnJlY3QgaW4gJXMoKVxuIiwgX19mdW5jX18pOwogCQlnb3RvIE9uQUREQkFSZXFfRmFpbDsKIAl9CiAJCS8vIEFkbWl0IHRoZSBBRERCQSBSZXF1ZXN0CkBAIC00NzksNyArNDc5LDcgQEAKIAkJCVRYX0RJUiwKIAkJCWZhbHNlKQkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImNhbid0IGdldCBUUyBpbiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImNhbid0IGdldCBUUyBpbiAlcygpXG4iLCBfX2Z1bmNfXyk7CiAJCVJlYXNvbkNvZGUgPSBERUxCQV9SRUFTT05fVU5LTk9XTl9CQTsKIAkJZ290byBPbkFEREJBUnNwX1JlamVjdDsKIAl9CkBAIC02MDMsNyArNjAzLDcgQEAKIAkJCQlSWF9ESVIsCiAJCQkJZmFsc2UpCSkKIAkJewotCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICAiY2FuJ3QgZ2V0IFRTIGZvciBSWFRTIGluICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgICJjYW4ndCBnZXQgVFMgZm9yIFJYVFMgaW4gJXMoKVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTYyMSw3ICs2MjEsNyBAQAogCQkJVFhfRElSLAogCQkJZmFsc2UpCSkKIAkJewotCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICAiY2FuJ3QgZ2V0IFRTIGZvciBUWFRTIGluICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgICJjYW4ndCBnZXQgVFMgZm9yIFRYVFMgaW4gJXMoKVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCA1M2VjMmQ0Li4yNjk0YTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlpZighbWVtY21wKENhcElFLCBFV0MxMU5IVENhcCwgc2l6ZW9mKEVXQzExTkhUQ2FwKSkpCiAJewogCQkvL0VXQyBJRQotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0hULCAiRVdDIElFIGluICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfSFQsICJFV0MgSUUgaW4gJXMoKVxuIiwgX19mdW5jX18pOwogCQlwQ2FwRUxFID0gKFBIVF9DQVBBQklMSVRZX0VMRSkoJkNhcElFWzRdKTsKIAl9ZWxzZQogCQlwQ2FwRUxFID0gKFBIVF9DQVBBQklMSVRZX0VMRSkoJkNhcElFWzBdKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCWlmKCFtZW1jbXAoSW5mb0lFLCBFV0MxMU5IVEluZm8sIHNpemVvZihFV0MxMU5IVEluZm8pKSkKIAl7CiAJCS8vIE5vdCBFV0MgSUUKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9IVCwgIkVXQyBJRSBpbiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0hULCAiRVdDIElFIGluICVzKClcbiIsIF9fZnVuY19fKTsKIAkJcEhUSW5mb0VsZSA9IChQSFRfSU5GT1JNQVRJT05fRUxFKSgmSW5mb0lFWzRdKTsKIAl9ZWxzZQogCQlwSFRJbmZvRWxlID0gKFBIVF9JTkZPUk1BVElPTl9FTEUpKCZJbmZvSUVbMF0pOwpAQCAtNDE1LDggKzQxNSw3IEBACiAgICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdTggSFRJT1RBY3RJc0Rpc2FibGVNQ1MxNChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKlBlZXJNYWNBZGRyKQogewotCXU4IHJldCA9IDA7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKICB9CiAKIApAQCAtMTEzNCw3ICsxMTMzLDcgQEAKIAkvLwogCS8vIFRoZXNlIHBhcmFtZXRlcnMgd2lsbCBiZSByZXNldCB3aGVuIHJlY2VpdmluZyBkZWF1dGhlbnRpY2F0aW9uIHBhY2tldAogCS8vCi0JSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9IVCwgIj09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9IVCwgIj09PT09PT09PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAlwSFRJbmZvLT5iQ3VycmVudEhUU3VwcG9ydCA9IGZhbHNlOwogCiAJLy8gNDBNSHogY2hhbm5lbCBzdXBwb3J0CkBAIC0xMjI5LDcgKzEyMjgsNyBAQAogCS8vCiAJLy8gIFNhdmUgUGVlciBTZXR0aW5nIGJlZm9yZSBBc3NvY2lhdGlvbgogCS8vCi0JSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9IVCwgIj09PT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9IVCwgIj09PT09PT09PT09PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAkvKnVubWFyayBiRW5hYmxlSFQgZmxhZyBoZXJlIGlzIHRoZSBzYW1lIHJlYXNvbiB3aHkgdW5tYXJrZWQgaW4gZnVuY3Rpb24gaWVlZTgwMjExX3NvZnRtYWNfbmV3X25ldC4gV0IgMjAwOC4wOS4xMCovCiAvLwlpZiggcEhUSW5mby0+YkVuYWJsZUhUICYmICBwTmV0d29yay0+YnNzaHQuYmRTdXBwb3J0SFQpCiAJaWYgKHBOZXR3b3JrLT5ic3NodC5iZFN1cHBvcnRIVCkKQEAgLTEzMTksNiArMTMxOCw3IEBACiAJCS8vCiAJfQogfQorRVhQT1JUX1NZTUJPTChIVFVwZGF0ZVNlbGZBbmRQZWVyU2V0dGluZyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICpmdW5jdGlvbjogIGNoZWNrIHdoZXRoZXIgSFQgY29udHJvbCBmaWVsZCBleGlzdHMKQEAgLTEzOTcsNyArMTM5Nyw3IEBACiB7CiAJUFJUX0hJR0hfVEhST1VHSFBVVCBwSFRJbmZvID0gaWVlZS0+cEhUSW5mbzsKIAotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfSFQsICI9PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0hULCAiPT09PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmKHBIVEluZm8tPmJDdXJCVzQwTUh6KQogCXsKQEAgLTE0MTYsNSArMTQxNiwzIEBACiAKIAlwSFRJbmZvLT5iU3dCd0luUHJvZ3Jlc3MgPSBmYWxzZTsKIH0KLQotRVhQT1JUX1NZTUJPTChIVFVwZGF0ZVNlbGZBbmRQZWVyU2V0dGluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKaW5kZXggNDI2ZjIyMy4uYzQ1MTQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJihpZWVlLT5yZW9yZGVyX3NwaW5sb2NrKSwgZmxhZ3MpOwogCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfUlhfU1BJTkxPQ0spOwotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUkVPUkRFUiwiPT09PT09PT09PT09PT09PT09PiVzKClcbiIsX19GVU5DVElPTl9fKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JFT1JERVIsIj09PT09PT09PT09PT09PT09PT4lcygpXG4iLF9fZnVuY19fKTsKIAlpZihwUnhUcy0+UnhUaW1lb3V0SW5kaWNhdGVTZXEgIT0gMHhmZmZmKQogCXsKIAkJLy8gSW5kaWNhdGUgdGhlIHBlbmRpbmcgcGFja2V0cyBzZXF1ZW50aWFsbHkgYWNjb3JkaW5nIHRvIFNlcU51bSB1bnRpbCBtZWV0IHRoZSBnYXAuCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlQUlhfVFNfUkVDT1JECQlwUnhUUyAgPSBpZWVlLT5SeFRzUmVjb3JkOwogCVBSWF9SRU9SREVSX0VOVFJZCXBSeFJlb3JkZXJFbnRyeSA9IGllZWUtPlJ4UmVvcmRlckVudHJ5OwogCXU4CQkJCWNvdW50ID0gMDsKLQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiPT09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICI9PT09PT09PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAkvLyBJbml0aWFsaXplIFR4IFRTIHJlbGF0ZWQgaW5mby4KIAlJTklUX0xJU1RfSEVBRCgmaWVlZS0+VHhfVFNfQWRtaXRfTGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmllZWUtPlR4X1RTX1BlbmRpbmdfTGlzdCk7CkBAIC0zNjEsNyArMzYxLDcgQEAKIAkJLy8gSW4gV01NIGNhc2U6IHdlIHVzZSA0IFRJRCBvbmx5CiAJCWlmICghSXNBQ1ZhbGlkKFRJRCkpCiAJCXsKLQkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIGluICVzKCksIFRJRCglZCkgaXMgbm90IHZhbGlkXG4iLCBfX0ZVTkNUSU9OX18sIFRJRCk7CisJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBpbiAlcygpLCBUSUQoJWQpIGlzIG5vdCB2YWxpZFxuIiwgX19mdW5jX18sIFRJRCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtNDYzLDcgKzQ2Myw3IEBACiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJpbiBmdW5jdGlvbiAlcygpIFRoZXJlIGlzIG5vdCBlbm91Z2ggVFMgcmVjb3JkIHRvIGJlIHVzZWQhISIsIF9fRlVOQ1RJT05fXyk7CisJCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJpbiBmdW5jdGlvbiAlcygpIFRoZXJlIGlzIG5vdCBlbm91Z2ggVFMgcmVjb3JkIHRvIGJlIHVzZWQhISIsIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KQEAgLTYxOSw1ICs2MTksNSBAQAogCQl9CiAJfQogCWVsc2UKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIlcygpPT0+QkEgdGltZXIgaXMgYWxyZWFkeSBhZGRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIlcygpPT0+QkEgdGltZXIgaXMgYWxyZWFkeSBhZGRlZFxuIiwgX19mdW5jX18pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTgwXzkzY3g2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxODBfOTNjeDYuYwppbmRleCBjZDA2MDU0Li5mYjhhN2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxODBfOTNjeDYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxODBfOTNjeDYuYwpAQCAtNTMsNyArNTMsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGVwcm9tX3coc3RydWN0IG5ldF9kZXZpY2UgKmRldixzaG9ydCBiaXQpCitzdGF0aWMgdm9pZCBlcHJvbV93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNob3J0IGJpdCkKIHsKIAl1OCBjbWRyZWc7CiAKQEAgLTg2LDcgKzg2LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcihpPTA7IGk8bGVuOyBpKyspeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQllcHJvbV93KGRldiwgYltpXSk7CiAJCWVwcm9tX2NrX2N5Y2xlKGRldik7CiAJfQpAQCAtOTYsMzcgKzk2LDM3IEBACiB1MzIgZXByb21fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWRkcikKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc2hvcnQgcmVhZF9jbWRbXT17MSwxLDB9OworCXNob3J0IHJlYWRfY21kW10gPSB7MSwgMSwgMH07CiAJc2hvcnQgYWRkcl9zdHJbOF07CiAJaW50IGk7CiAJaW50IGFkZHJfbGVuOwogCXUzMiByZXQ7CiAKLQlyZXQ9MDsKKwlyZXQgPSAwOwogCS8vZW5hYmxlIEVQUk9NIHByb2dyYW1taW5nCiAJd3JpdGVfbmljX2J5dGVfRShkZXYsIEVQUk9NX0NNRCwKIAkJICAgICAgIChFUFJPTV9DTURfUFJPR1JBTTw8RVBST01fQ01EX09QRVJBVElOR19NT0RFX1NISUZUKSk7CiAJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKIAl1ZGVsYXkoRVBST01fREVMQVkpOwogCi0JaWYgKHByaXYtPmVwcm9tdHlwZT09RVBST01fOTNjNTYpewotCQlhZGRyX3N0cls3XT1hZGRyICYgMTsKLQkJYWRkcl9zdHJbNl09YWRkciAmICgxPDwxKTsKLQkJYWRkcl9zdHJbNV09YWRkciAmICgxPDwyKTsKLQkJYWRkcl9zdHJbNF09YWRkciAmICgxPDwzKTsKLQkJYWRkcl9zdHJbM109YWRkciAmICgxPDw0KTsKLQkJYWRkcl9zdHJbMl09YWRkciAmICgxPDw1KTsKLQkJYWRkcl9zdHJbMV09YWRkciAmICgxPDw2KTsKLQkJYWRkcl9zdHJbMF09YWRkciAmICgxPDw3KTsKLQkJYWRkcl9sZW49ODsKLQl9ZWxzZXsKLQkJYWRkcl9zdHJbNV09YWRkciAmIDE7Ci0JCWFkZHJfc3RyWzRdPWFkZHIgJiAoMTw8MSk7Ci0JCWFkZHJfc3RyWzNdPWFkZHIgJiAoMTw8Mik7Ci0JCWFkZHJfc3RyWzJdPWFkZHIgJiAoMTw8Myk7Ci0JCWFkZHJfc3RyWzFdPWFkZHIgJiAoMTw8NCk7Ci0JCWFkZHJfc3RyWzBdPWFkZHIgJiAoMTw8NSk7Ci0JCWFkZHJfbGVuPTY7CisJaWYgKHByaXYtPmVwcm9tdHlwZSA9PSBFUFJPTV85M2M1NikgeworCQlhZGRyX3N0cls3XSA9IGFkZHIgJiAxOworCQlhZGRyX3N0cls2XSA9IGFkZHIgJiAoMTw8MSk7CisJCWFkZHJfc3RyWzVdID0gYWRkciAmICgxPDwyKTsKKwkJYWRkcl9zdHJbNF0gPSBhZGRyICYgKDE8PDMpOworCQlhZGRyX3N0clszXSA9IGFkZHIgJiAoMTw8NCk7CisJCWFkZHJfc3RyWzJdID0gYWRkciAmICgxPDw1KTsKKwkJYWRkcl9zdHJbMV0gPSBhZGRyICYgKDE8PDYpOworCQlhZGRyX3N0clswXSA9IGFkZHIgJiAoMTw8Nyk7CisJCWFkZHJfbGVuID0gODsKKwl9IGVsc2UgeworCQlhZGRyX3N0cls1XSA9IGFkZHIgJiAxOworCQlhZGRyX3N0cls0XSA9IGFkZHIgJiAoMTw8MSk7CisJCWFkZHJfc3RyWzNdID0gYWRkciAmICgxPDwyKTsKKwkJYWRkcl9zdHJbMl0gPSBhZGRyICYgKDE8PDMpOworCQlhZGRyX3N0clsxXSA9IGFkZHIgJiAoMTw8NCk7CisJCWFkZHJfc3RyWzBdID0gYWRkciAmICgxPDw1KTsKKwkJYWRkcl9sZW4gPSA2OwogCX0KIAllcHJvbV9jcyhkZXYsIDEpOwogCWVwcm9tX2NrX2N5Y2xlKGRldik7CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkvL0knbSB1bnN1cmUgaWYgaXQgaXMgbmVjZXNzYXJ5LCBidXQgYW55d2F5IHNob3VsZG4ndCBodXJ0CiAJZXByb21fdyhkZXYsIDApOwogCi0JZm9yKGk9MDtpPDE2O2krKyl7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJLy9lZXByb20gbmVlZHMgYSBjbGsgY3ljbGUgYmV0d2VlbiB3cml0aW5nIG9wY29kZSZhZHIKIAkJLy9hbmQgcmVhZGluZyBkYXRhLiAoZWVwcm9tIG91dHMgYSBkdW1teSAwKQogCQllcHJvbV9ja19jeWNsZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkwX3J0bDgyNTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MF9ydGw4MjU2LmMKaW5kZXggNDBiMTRhMi4uMDhlMWJjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkwX3J0bDgyNTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTBfcnRsODI1Ni5jCkBAIC0zMiw3ICszMiw3IEBACiAJZm9yKGVSRlBhdGggPSAwOyBlUkZQYXRoIDxSRjkwX1BBVEhfTUFYOyBlUkZQYXRoKyspCiAJewogCQlpZiAoIXJ0bDgxOTJfcGh5X0NoZWNrSXNMZWdhbFJGUGF0aChkZXYsIGVSRlBhdGgpKQotCQkJCWNvbnRpbnVlOworCQkJY29udGludWU7CiAKIAkJc3dpdGNoIChCYW5kd2lkdGgpCiAJCXsKQEAgLTEyNSw3ICsxMjUsNyBAQAogCWZvcihlUkZQYXRoID0gKFJGOTBfUkFESU9fUEFUSF9FKVJGOTBfUEFUSF9BOyBlUkZQYXRoIDxwcml2LT5OdW1Ub3RhbFJGUGF0aDsgZVJGUGF0aCsrKQogCXsKIAkJaWYgKCFydGw4MTkyX3BoeV9DaGVja0lzTGVnYWxSRlBhdGgoZGV2LCBlUkZQYXRoKSkKLQkJCQljb250aW51ZTsKKwkJCWNvbnRpbnVlOwogCiAJCXBQaHlSZWcgPSAmcHJpdi0+UEhZUmVnRGVmW2VSRlBhdGhdOwogCkBAIC0yNDksNyArMjQ5LDcgQEAKIAkJaWYocHJpdi0+Q3VzdG9tZXJJRCA9PSBSVF9DSURfODE5eF9OZXRjb3JlKQogCQkJVHhBR0MgPSAweDIyOwogCQllbHNlCi0JCVR4QUdDICs9IHByaXYtPkNja1B3RW5sOworCQkJVHhBR0MgKz0gcHJpdi0+Q2NrUHdFbmw7CiAJfQogCiAJaWYoVHhBR0MgPiAweDI0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwppbmRleCAxYmI2MTQzLi4yNDI3MmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwpAQCAtOTcsMTAgKzk3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogLy8gRklYTUU6IGNoZWNrIGlmIDIuNi43IGlzIG9rCiAKLSNpZmRlZiBDT05GSUdfUlRMODE5Ml9QTQotI2luY2x1ZGUgInI4MTkyX3BtLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgImRvdDExZC5oIgogLy9zZXQgaGVyZSB0byBvcGVuIHlvdXIgdHJhY2UgY29kZS4gLy9XQgogdTMyIHJ0X2dsb2JhbF9kZWJ1Z19jb21wb25lbnQgPSBDT01QX0RPV04JfApAQCAtMTU5LDEzICsxNTUsOCBAQAogCS5pZF90YWJsZQk9IHJ0bDgxOTJfdXNiX2lkX3RibCwJCSAgLyogUENJX0lEIHRhYmxlICAqLwogCS5wcm9iZQkJPSBydGw4MTkyX3VzYl9wcm9iZSwJCSAgLyogcHJvYmUgZm4gICAgICAqLwogCS5kaXNjb25uZWN0CT0gcnRsODE5Ml91c2JfZGlzY29ubmVjdCwJICAvKiByZW1vdmUgZm4gICAgICovCi0jaWZkZWYgQ09ORklHX1JUTDgxOTJfUE0KLQkuc3VzcGVuZAk9IHJ0bDgxOTJfc3VzcGVuZCwJCSAgLyogUE0gc3VzcGVuZCBmbiAqLwotCS5yZXN1bWUJCT0gcnRsODE5Ml9yZXN1bWUsICAgICAgICAgICAgICAgICAvKiBQTSByZXN1bWUgZm4gICovCi0jZWxzZQogCS5zdXNwZW5kCT0gTlVMTCwJCQkJICAvKiBQTSBzdXNwZW5kIGZuICovCiAJLnJlc3VtZQkJPSBOVUxMLAkJCQkgIC8qIFBNIHJlc3VtZSBmbiAgKi8KLSNlbmRpZgogfTsKIAogCkBAIC0yMDQ1LDkgKzIwMzYsNiBAQAogCXUzMiB1NGJBY1BhcmFtOwogCWludCBpOwogCi0JaWYgKHByaXYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpCiAJCWdvdG8gc3VjY2VzczsKQEAgLTQ5ODEsMTIgKzQ5NjksOCBAQAogCiAJZGV2LT5uZXRkZXZfb3BzID0gJnJ0bDgxOTJfbmV0ZGV2X29wczsKIAotI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgotI2lmIFdJUkVMRVNTX0VYVCA8IDE3Ci0JZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSByODE5Ml9nZXRfd2lyZWxlc3Nfc3RhdHM7Ci0jZW5kaWYKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSAmcjgxOTJfd3hfaGFuZGxlcnNfZGVmOwotI2VuZGlmCisKIAlkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CiAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFoqMzsJLy9tb2RpZmllZCBieSBqb2huLCAwODA1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2RtLmMKaW5kZXggZDk3YWQ3Yi4uYjQyNjRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfZG0uYwpAQCAtMTgzLDkgKzE4Myw4IEBACiAJY3VyVHhPa0NudCA9IHByaXYtPnN0YXRzLnR4Ynl0ZXN1bmljYXN0IC0gbGFzdFR4T2tDbnQ7CiAJY3VyUnhPa0NudCA9IHByaXYtPnN0YXRzLnJ4Ynl0ZXN1bmljYXN0IC0gbGFzdFJ4T2tDbnQ7CiAKLQlpZigoY3VyVHhPa0NudCArIGN1clJ4T2tDbnQpIDwgMTUwMDAwMDApIHsKKwlpZiAoKGN1clR4T2tDbnQgKyBjdXJSeE9rQ250KSA8IDE1MDAwMDAwKQogCQlyZXR1cm47Ci0JfQogCiAJaWYoY3VyVHhPa0NudCA+IDQqY3VyUnhPa0NudCkgewogCQlpZiAocHJpdi0+YkN1cnJlbnRSeEFnZ3JFbmFibGUpIHsKQEAgLTE2NDYsOSArMTY0NSw4IEBACiAJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFVGV1AsIDEpOwogCX0KIAkvL1Jlc3RvcmUgVFggUG93ZXIgVHJhY2tpbmcgSW5kZXgKLQlpZihwcml2LT5idHhwb3dlcl90cmFja2luZ0luaXQgJiYgcHJpdi0+YnR4cG93ZXJfdHJhY2tpbmcpeworCWlmIChwcml2LT5idHhwb3dlcl90cmFja2luZ0luaXQgJiYgcHJpdi0+YnR4cG93ZXJfdHJhY2tpbmcpCiAJCWRtX3R4cG93ZXJfcmVzZXRfcmVjb3ZlcnkoZGV2KTsKLQl9CiAKIAkvLwogCS8vUmVzdG9yZSBCQiBJbml0aWFsIEdhaW4KQEAgLTI1MjUsNyArMjUyMyw3IEBACiAJaWYocHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX0RJU0FCTEVfRURDQV9UVVJCTykKIAkJZ290byBkbV9DaGVja0VkY2FUdXJib19FWElUOwogCi0vLwlwcmludGsoIj09PT09PT09PiVzKCk6YmlzX2FueV9ub25iZXBrdHMgaXMgJWRcbiIsX19GVU5DVElPTl9fLHByaXYtPmJpc19hbnlfbm9uYmVwa3RzKTsKKy8vCXByaW50aygiPT09PT09PT0+JXMoKTpiaXNfYW55X25vbmJlcGt0cyBpcyAlZFxuIixfX2Z1bmNfXyxwcml2LT5iaXNfYW55X25vbmJlcGt0cyk7CiAJLy8gQ2hlY2sgdGhlIHN0YXR1cyBmb3IgY3VycmVudCBjb25kaXRpb24uCiAJaWYoIXByaXYtPmllZWU4MDIxMS0+YmlzX2FueV9ub25iZXBrdHMpCiAJewpAQCAtMzE4NSw3ICszMTgzLDcgQEAKIAogc3RhdGljIHZvaWQgZG1fU3RhcnRIV0ZzeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JUlRfVFJBQ0UoQ09NUF9IQUxETSwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCVJUX1RSQUNFKENPTVBfSEFMRE0sICIlc1xuIiwgX19mdW5jX18pOwogCXdyaXRlX25pY19kd29yZChkZXYsIHJPRkRNMF9SeERldGVjdG9yMiwgMHg0NjVjMTJjZik7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCAweGMzYiwgMHg0MSk7CiB9CkBAIC0zMTk0LDcgKzMxOTIsNyBAQAogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCVJUX1RSQUNFKENPTVBfSEFMRE0sICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlSVF9UUkFDRShDT01QX0hBTERNLCAiJXNcbiIsIF9fZnVuY19fKTsKIAlkZWxfdGltZXJfc3luYygmKHByaXYtPmZzeW5jX3RpbWVyKSk7CiAKIAkvLyBMZXQgUmVnaXN0ZXIgcmV0dXJuIHRvIGRlZmF1bHQgdmFsdWU7CkBAIC0zMjE4LDcgKzMyMTYsNyBAQAogCXUzMgkJCXJhdGVJbmRleDsKIAl1MzIJCQlyYXRlQml0bWFwOwogCi0JUlRfVFJBQ0UoQ09NUF9IQUxETSwiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJUlRfVFJBQ0UoQ09NUF9IQUxETSwiJXNcbiIsIF9fZnVuY19fKTsKIAkvLyBJbml0aWFsIHJhdGUgcmVjb3JkIHRvIHplcm8sIHN0YXJ0IHRvIHJlY29yZC4KIAlwcml2LT5yYXRlX3JlY29yZCA9IDA7CiAJLy8gSW5pdGlhbGl6ZSBjb250aW51ZSBkaWZmIGNvdW50IHRvIHplcm8sIHN0YXJ0IHRvIHJlY29yZC4KQEAgLTMyNTMsNyArMzI1MSw3IEBACiAKIHN0YXRpYyB2b2lkIGRtX0VuZEhXRnN5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlSVF9UUkFDRShDT01QX0hBTERNLCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlSVF9UUkFDRShDT01QX0hBTERNLCIlc1xuIiwgX19mdW5jX18pOwogCXdyaXRlX25pY19kd29yZChkZXYsIHJPRkRNMF9SeERldGVjdG9yMiwgMHg0NjVjNTJjZCk7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCAweGMzYiwgMHg0OSk7CiAKQEAgLTM0ODUsNyArMzQ4Myw3IEBACiAJCXR4bG93cG93ZXJfdGhyZXNob2xkID0gVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTE9XOwogCX0KIAotLy8JcHJpbnRrKCI9PT09PT09PiVzKCk6IHR4aGlwb3dlcl90aHJlc2hob2xkIGlzICVkLHR4bG93cG93ZXJfdGhyZXNob2xkIGlzICVkXG4iLF9fRlVOQ1RJT05fXyx0eGhpcG93ZXJfdGhyZXNoaG9sZCx0eGxvd3Bvd2VyX3RocmVzaG9sZCk7CisvLwlwcmludGsoIj09PT09PT0+JXMoKTogdHhoaXBvd2VyX3RocmVzaGhvbGQgaXMgJWQsdHhsb3dwb3dlcl90aHJlc2hvbGQgaXMgJWRcbiIsX19mdW5jX18sdHhoaXBvd2VyX3RocmVzaGhvbGQsdHhsb3dwb3dlcl90aHJlc2hvbGQpOwogCVJUX1RSQUNFKENPTVBfVFhBR0MsInByaXYtPnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPSAlbGQgXG4iICwgcHJpdi0+dW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYik7CiAKIAlpZihwcml2LT5pZWVlODAyMTEtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX3d4LmMKaW5kZXggYzcwYWYwMS4uNjc1YTEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfd3guYwpAQCAtMjQsOCArMjQsOCBAQAogI2luY2x1ZGUgImRvdDExZC5oIgogCiAjZGVmaW5lIFJBVEVfQ09VTlQgMTIKLXUzMiBydGw4MTgwX3JhdGVzW10gPSB7MTAwMDAwMCwyMDAwMDAwLDU1MDAwMDAsMTEwMDAwMDAsCi0JNjAwMDAwMCw5MDAwMDAwLDEyMDAwMDAwLDE4MDAwMDAwLDI0MDAwMDAwLDM2MDAwMDAwLDQ4MDAwMDAwLDU0MDAwMDAwfTsKK3UzMiBydGw4MTgwX3JhdGVzW10gPSB7MTAwMDAwMCwgMjAwMDAwMCwgNTUwMDAwMCwgMTEwMDAwMDAsCisJNjAwMDAwMCwgOTAwMDAwMCwgMTIwMDAwMDAsIDE4MDAwMDAwLCAyNDAwMDAwMCwgMzYwMDAwMDAsIDQ4MDAwMDAwLCA1NDAwMDAwMH07CiAKIAogI2lmbmRlZiBFTkVURE9XTgpAQCAtMzgsMTYgKzM4LDE2IEBACiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCi0JcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfZnJlcShwcml2LT5pZWVlODAyMTEsYSx3cnF1LGIpOworCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2ZyZXEocHJpdi0+aWVlZTgwMjExLCBhLCB3cnF1LCBiKTsKIH0KIAogCiBzdGF0aWMgaW50IHI4MTkyX3d4X2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpCiB7Ci0Jc3RydWN0IHI4MTkyX3ByaXYgKnByaXY9aWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9tb2RlKHByaXYtPmllZWU4MDIxMSxhLHdycXUsYik7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfbW9kZShwcml2LT5pZWVlODAyMTEsIGEsIHdycXUsIGIpOwogfQogCiAKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X3JhdGUocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfcmF0ZShwcml2LT5pZWVlODAyMTEsIGluZm8sIHdycXUsIGV4dHJhKTsKIH0KIAogCkBAIC03MSw3ICs3MSw3IEBACiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCi0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9yYXRlKHByaXYtPmllZWU4MDIxMSxpbmZvLHdycXUsZXh0cmEpOworCXJldCA9IGllZWU4MDIxMV93eF9zZXRfcmF0ZShwcml2LT5pZWVlODAyMTEsIGluZm8sIHdycXUsIGV4dHJhKTsKIAogCXVwKCZwcml2LT53eF9zZW0pOwogCkBAIC04OCw3ICs4OCw3IEBACiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCi0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9ydHMocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CisJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9ydHMocHJpdi0+aWVlZTgwMjExLCBpbmZvLCB3cnF1LCBleHRyYSk7CiAKIAl1cCgmcHJpdi0+d3hfc2VtKTsKIApAQCAtMTAwLDcgKzEwMCw3IEBACiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9ydHMocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfcnRzKHByaXYtPmllZWU4MDIxMSwgaW5mbywgd3JxdSwgZXh0cmEpOwogfQogCiBzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTEyLDcgKzExMiw3IEBACiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCi0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9wb3dlcihwcml2LT5pZWVlODAyMTEsaW5mbyx3cnF1LGV4dHJhKTsKKwlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X3Bvd2VyKHByaXYtPmllZWU4MDIxMSwgaW5mbywgd3JxdSwgZXh0cmEpOwogCiAJdXAoJnByaXYtPnd4X3NlbSk7CiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfcG93ZXIocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfcG93ZXIocHJpdi0+aWVlZTgwMjExLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIHN0YXRpYyBpbnQgcjgxOTJfd3hfZm9yY2VfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAotCXByaW50aygiJXMoKTogZm9yY2UgcmVzZXQgISBleHRyYSBpcyAlZFxuIixfX0ZVTkNUSU9OX18sICpleHRyYSk7CisJcHJpbnRrKCIlcygpOiBmb3JjZSByZXNldCAhIGV4dHJhIGlzICVkXG4iLCBfX2Z1bmNfXywgKmV4dHJhKTsKIAlwcml2LT5mb3JjZV9yZXNldCA9ICpleHRyYTsKIAl1cCgmcHJpdi0+d3hfc2VtKTsKIAlyZXR1cm4gMDsKQEAgLTE3MSwxNSArMTcxLDE1IEBACiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCi0JaWYoZW5hYmxlKQotCQlwcml2LT5jcmNtb249MTsKKwlpZiAoZW5hYmxlKQorCQlwcml2LT5jcmNtb24gPSAxOwogCWVsc2UKLQkJcHJpdi0+Y3JjbW9uPTA7CisJCXByaXYtPmNyY21vbiA9IDA7CiAKIAlETUVTRygiYmFkIENSQyBpbiBtb25pdG9yIG1vZGUgYXJlICVzIiwKIAkgICAgICBwcml2LT5jcmNtb24gPyAiYWNjZXB0ZWQiIDogInJlamVjdGVkIik7CiAKLQlpZihwcmV2ICE9IHByaXYtPmNyY21vbiAmJiBwcml2LT51cCl7CisJaWYgKHByZXYgIT0gcHJpdi0+Y3JjbW9uICYmIHByaXYtPnVwKSB7CiAJCS8vcnRsODE4MF9kb3duKGRldik7CiAJCS8vcnRsODE4MF91cChkZXYpOwogCX0KQEAgLTE5Niw3ICsxOTYsNyBAQAogCWludCByZXQ7CiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAotCXJldCA9IGllZWU4MDIxMV93eF9zZXRfbW9kZShwcml2LT5pZWVlODAyMTEsYSx3cnF1LGIpOworCXJldCA9IGllZWU4MDIxMV93eF9zZXRfbW9kZShwcml2LT5pZWVlODAyMTEsIGEsIHdycXUsIGIpOwogCiAJcnRsODE5Ml9zZXRfcnhjb25mKGRldik7CiAKQEAgLTI1OCw3ICsyNTgsNyBAQAogLy8JcmFuZ2UtPm9sZF9udW1fY2hhbm5lbHM7CiAvLwlyYW5nZS0+b2xkX251bV9mcmVxdWVuY3k7CiAvLwlyYW5nZS0+b2xkX2ZyZXFbNl07IC8qIEZpbGxlciB0byBrZWVwICJ2ZXJzaW9uIiBhdCB0aGUgc2FtZSBvZmZzZXQgKi8KLQlpZihwcml2LT5yZl9zZXRfc2VucyAhPSBOVUxMKQorCWlmIChwcml2LT5yZl9zZXRfc2VucyAhPSBOVUxMKQogCQlyYW5nZS0+c2Vuc2l0aXZpdHkgPSBwcml2LT5tYXhfc2VuczsJLyogc2lnbmFsIGxldmVsIHRocmVzaG9sZCByYW5nZSAqLwogCiAJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CkBAIC0yNzUsMTQgKzI3NSwxMyBAQAogCiAJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IFJBVEVfQ09VTlQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUkFURV9DT1VOVCAmJiBpIDwgSVdfTUFYX0JJVFJBVEVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgUkFURV9DT1VOVCAmJiBpIDwgSVdfTUFYX0JJVFJBVEVTOyBpKyspCiAJCXJhbmdlLT5iaXRyYXRlW2ldID0gcnRsODE4MF9yYXRlc1tpXTsKLQl9CiAKIAlyYW5nZS0+bWluX2ZyYWcgPSBNSU5fRlJBR19USFJFU0hPTEQ7CiAJcmFuZ2UtPm1heF9mcmFnID0gTUFYX0ZSQUdfVEhSRVNIT0xEOwogCi0JcmFuZ2UtPm1pbl9wbXA9MDsKKwlyYW5nZS0+bWluX3BtcCA9IDA7CiAJcmFuZ2UtPm1heF9wbXAgPSA1MDAwMDAwOwogCXJhbmdlLT5taW5fcG10ID0gMDsKIAlyYW5nZS0+bWF4X3BtdCA9IDY1NTM1KjEwMDA7CkBAIC0zMTYsMTQgKzMxNSwxMiBAQAogCQl9CiAKIAkJaWYgKHZhbCA9PSBJV19NQVhfRlJFUVVFTkNJRVMpCi0JCWJyZWFrOworCQkJYnJlYWs7CiAJfQogCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOwogCXJhbmdlLT5udW1fY2hhbm5lbHMgPSB2YWw7Ci0jaWYgV0lSRUxFU1NfRVhUID4gMTcKIAlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEF8SVdfRU5DX0NBUEFfV1BBMnwKIAkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVB8SVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7Ci0jZW5kaWYKIAl0bXAtPnNjYW5fY2FwYSA9IDB4MDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMzYsMTUgKzMzMywxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwogCWludCByZXQgPSAwOwogCi0JaWYoIXByaXYtPnVwKSByZXR1cm4gLUVORVRET1dOOworCWlmICghcHJpdi0+dXApCisJCXJldHVybiAtRU5FVERPV047CiAKIAlpZiAocHJpdi0+aWVlZTgwMjExLT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMgPT0gdHJ1ZSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpCi0JeworCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7CiAJCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWI7Ci0JCWlmIChyZXEtPmVzc2lkX2xlbikKLQkJeworCQlpZiAocmVxLT5lc3NpZF9sZW4pIHsKIAkJCS8vcHJpbnRrKCI9PSoqJiomKiYqKj09PT5zY2FuIHNldCBzc2lkOiVzXG4iLCByZXEtPmVzc2lkKTsKIAkJCWllZWUtPmN1cnJlbnRfbmV0d29yay5zc2lkX2xlbiA9IHJlcS0+ZXNzaWRfbGVuOwogCQkJbWVtY3B5KGllZWUtPmN1cnJlbnRfbmV0d29yay5zc2lkLCByZXEtPmVzc2lkLCByZXEtPmVzc2lkX2xlbik7CkBAIC0zNTMsMTMgKzM0OSwxMyBAQAogCX0KIAogCWRvd24oJnByaXYtPnd4X3NlbSk7Ci0JaWYocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKXsKKwlpZiAocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKSB7CiAJCXByaXYtPmllZWU4MDIxMS0+c2Nhbm5pbmcgPSAwOwogCQlpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNybyhwcml2LT5pZWVlODAyMTEpOwogCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IGllZWU4MDIxMV93eF9zZXRfc2Nhbihwcml2LT5pZWVlODAyMTEsIGEsIHdycXUsIGIpOwogCX0KLQllbHNlCi0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9zY2FuKHByaXYtPmllZWU4MDIxMSxhLHdycXUsYik7CiAJdXAoJnByaXYtPnd4X3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3MiwxMSArMzY4LDEyIEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQlpZighcHJpdi0+dXApIHJldHVybiAtRU5FVERPV047CisJaWYgKCFwcml2LT51cCkKKwkJcmV0dXJuIC1FTkVURE9XTjsKIAogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKLQlyZXQgPSBpZWVlODAyMTFfd3hfZ2V0X3NjYW4ocHJpdi0+aWVlZTgwMjExLGEsd3JxdSxiKTsKKwlyZXQgPSBpZWVlODAyMTFfd3hfZ2V0X3NjYW4ocHJpdi0+aWVlZTgwMjExLCBhLCB3cnF1LCBiKTsKIAogCXVwKCZwcml2LT53eF9zZW0pOwogCkBAIC0zOTEsNyArMzg4LDcgQEAKIAlpbnQgcmV0OwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKLQlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2Vzc2lkKHByaXYtPmllZWU4MDIxMSxhLHdycXUsYik7CisJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9lc3NpZChwcml2LT5pZWVlODAyMTEsIGEsIHdycXUsIGIpOwogCiAJdXAoJnByaXYtPnd4X3NlbSk7CiAKQEAgLTQ4Niw3ICs0ODMsNyBAQAogLy8gICAgICAgIHN0cnVjdCBzb2NrYWRkciAqdGVtcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhd3JxOwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKLQlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X3dhcChwcml2LT5pZWVlODAyMTEsaW5mbyxhd3JxLGV4dHJhKTsKKwlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X3dhcChwcml2LT5pZWVlODAyMTEsIGluZm8sIGF3cnEsIGV4dHJhKTsKIAogCXVwKCZwcml2LT53eF9zZW0pOwogCkBAIC01MDEsNyArNDk4LDcgQEAKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF93YXAocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CisJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfd2FwKHByaXYtPmllZWU4MDIxMSwgaW5mbywgd3JxdSwgZXh0cmEpOwogfQogCiAKQEAgLTUyMywzNCArNTIwLDM3IEBACiAJaW50IHJldDsKIAogCS8vdTMyIFRhcmdldENvbnRlbnQ7Ci0JdTMyIGh3a2V5WzRdPXswLDAsMCwwfTsKLQl1OCBtYXNrPTB4ZmY7Ci0JdTMyIGtleV9pZHg9MDsKKwl1MzIgaHdrZXlbNF0gPSB7MCwgMCwgMCwgMH07CisJdTggbWFzayA9IDB4ZmY7CisJdTMyIGtleV9pZHggPSAwOwogCS8vdTggYnJvYWRjYXN0X2FkZHJbNl0gPXsJMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9OwotCXU4IHplcm9fYWRkcls0XVs2XSA9ewl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotCQkJCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMX0sCi0JCQkJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyfSwKLQkJCQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDN9IH07CisJdTggemVyb19hZGRyWzRdWzZdID0gewl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCQkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDF9LAorCQkJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyfSwKKwkJCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwM30gfTsKIAlpbnQgaTsKIAotICAgICAgIGlmKCFwcml2LT51cCkgcmV0dXJuIC1FTkVURE9XTjsKKwlpZiAoIXByaXYtPnVwKQorCQlyZXR1cm4gLUVORVRET1dOOwogCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAogCVJUX1RSQUNFKENPTVBfU0VDLCAiU2V0dGluZyBTVyB3ZXAga2V5Iik7Ci0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9lbmNvZGUocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxrZXkpOworCXJldCA9IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHByaXYtPmllZWU4MDIxMSwgaW5mbywgd3JxdSwga2V5KTsKIAogCXVwKCZwcml2LT53eF9zZW0pOwogCiAKIAogCS8vc29tZXRpbWVzLCB0aGUgbGVuZ3RoIGlzIHplcm8gd2hpbGUgd2UgZG8gbm90IHR5cGUga2V5IHZhbHVlCi0JaWYod3JxdS0+ZW5jb2RpbmcubGVuZ3RoIT0wKXsKKwlpZiAod3JxdS0+ZW5jb2RpbmcubGVuZ3RoICE9IDApIHsKIAotCQlmb3IoaT0wIDsgaTw0IDsgaSsrKXsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJaHdrZXlbaV0gfD0gIGtleVs0KmkrMF0mbWFzazsKLQkJCWlmKGk9PTEmJig0KmkrMSk9PXdycXUtPmVuY29kaW5nLmxlbmd0aCkgbWFzaz0weDAwOwotCQkJaWYoaT09MyYmKDQqaSsxKT09d3JxdS0+ZW5jb2RpbmcubGVuZ3RoKSBtYXNrPTB4MDA7CisJCQlpZiAoaSA9PSAxICYmICg0KmkrMSkgPT0gd3JxdS0+ZW5jb2RpbmcubGVuZ3RoKQorCQkJCW1hc2sgPSAweDAwOworCQkJaWYgKGkgPT0gMyAmJiAoNCppKzEpID09IHdycXUtPmVuY29kaW5nLmxlbmd0aCkKKwkJCQltYXNrID0gMHgwMDsKIAkJCWh3a2V5W2ldIHw9IChrZXlbNCppKzFdJm1hc2spPDw4OwogCQkJaHdrZXlbaV0gfD0gKGtleVs0KmkrMl0mbWFzayk8PDE2OwogCQkJaHdrZXlbaV0gfD0gKGtleVs0KmkrM10mbWFzayk8PDI0OwpAQCAtNTU5LDIwICs1NTksMzEgQEAKIAkJI2RlZmluZSBDT05GX1dFUDQwICAweDQKIAkJI2RlZmluZSBDT05GX1dFUDEwNCAweDE0CiAKLQkJc3dpdGNoICh3cnF1LT5lbmNvZGluZy5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCl7Ci0JCWNhc2UgMDoga2V5X2lkeCA9IGllZWUtPnR4X2tleWlkeDsgYnJlYWs7Ci0JCWNhc2UgMToJa2V5X2lkeCA9IDA7IGJyZWFrOwotCQljYXNlIDI6CWtleV9pZHggPSAxOyBicmVhazsKLQkJY2FzZSAzOglrZXlfaWR4ID0gMjsgYnJlYWs7Ci0JCWNhc2UgNDoJa2V5X2lkeAk9IDM7IGJyZWFrOwotCQlkZWZhdWx0OiBicmVhazsKKwkJc3dpdGNoICh3cnF1LT5lbmNvZGluZy5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgeworCQljYXNlIDA6CisJCQlrZXlfaWR4ID0gaWVlZS0+dHhfa2V5aWR4OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWtleV9pZHggPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWtleV9pZHggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWtleV9pZHggPSAyOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWtleV9pZHgJPSAzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCi0JCWlmKHdycXUtPmVuY29kaW5nLmxlbmd0aD09MHg1KXsKKwkJaWYgKHdycXUtPmVuY29kaW5nLmxlbmd0aCA9PSAweDUpIHsKIAkJCQlpZWVlLT5wYWlyd2lzZV9rZXlfdHlwZSA9IEtFWV9UWVBFX1dFUDQwOwogCQkJRW5hYmxlSFdTZWN1cml0eUNvbmZpZzgxOTIoZGV2KTsKIAotCQkJc2V0S2V5KCBkZXYsCisJCQlzZXRLZXkoZGV2LAogCQkJCWtleV9pZHgsICAgICAgICAgICAgICAgIC8vRW50cnlObwogCQkJCWtleV9pZHgsICAgICAgICAgICAgICAgIC8vS2V5SW5kZXgKIAkJCQlLRVlfVFlQRV9XRVA0MCwgICAgICAgICAvL0tleVR5cGUKQEAgLTU4MiwxMSArNTkzLDExIEBACiAKIAkJfQogCi0JCWVsc2UgaWYod3JxdS0+ZW5jb2RpbmcubGVuZ3RoPT0weGQpeworCQllbHNlIGlmICh3cnF1LT5lbmNvZGluZy5sZW5ndGggPT0gMHhkKSB7CiAJCQkJaWVlZS0+cGFpcndpc2Vfa2V5X3R5cGUgPSBLRVlfVFlQRV9XRVAxMDQ7CiAJCQkJRW5hYmxlSFdTZWN1cml0eUNvbmZpZzgxOTIoZGV2KTsKIAotCQkJc2V0S2V5KCBkZXYsCisJCQlzZXRLZXkoZGV2LAogCQkJCWtleV9pZHgsICAgICAgICAgICAgICAgIC8vRW50cnlObwogCQkJCWtleV9pZHgsICAgICAgICAgICAgICAgIC8vS2V5SW5kZXgKIAkJCQlLRVlfVFlQRV9XRVAxMDQsICAgICAgICAvL0tleVR5cGUKQEAgLTU5NCw4ICs2MDUsOSBAQAogCQkJCTAsICAgICAgICAgICAgICAgICAgICAgIC8vRGVmYXVsdEtleQogCQkJCWh3a2V5KTsgICAgICAgICAgICAgICAgIC8vS2V5Q29udGVudAogCisJCX0gZWxzZSB7CisJCQlwcmludGsoIndyb25nIHR5cGUgaW4gV0VQLCBub3QgV0VQNDAgYW5kIFdFUDEwNFxuIik7CiAJCX0KLQkJZWxzZSBwcmludGsoIndyb25nIHR5cGUgaW4gV0VQLCBub3QgV0VQNDAgYW5kIFdFUDEwNFxuIik7CiAKIAl9CiAKQEAgLTYwMywxMiArNjE1LDEzIEBACiB9CiAKIAotc3RhdGljIGludCByODE5Ml93eF9zZXRfc2Nhbl90eXBlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmFhLCB1bmlvbgotIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKnApeworc3RhdGljIGludCByODE5Ml93eF9zZXRfc2Nhbl90eXBlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmFhLAorCQkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpwKQorewogCiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWludCAqcGFybXM9KGludCAqKXA7Ci0JaW50IG1vZGU9cGFybXNbMF07CisJaW50ICpwYXJtcyA9IChpbnQgKilwOworCWludCBtb2RlID0gcGFybXNbMF07CiAKIAlwcml2LT5pZWVlODAyMTEtPmFjdGl2ZV9zY2FuID0gbW9kZTsKIApAQCAtNjMxLDIwICs2NDQsMjAgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KLQlpZiAoISh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX0xJTUlUKSl7CisJaWYgKCEod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KIAotCWlmKHdycXUtPnJldHJ5LnZhbHVlID4gUjgxODBfTUFYX1JFVFJZKXsKLQkJZXJyPSAtRUlOVkFMOworCWlmICh3cnF1LT5yZXRyeS52YWx1ZSA+IFI4MTgwX01BWF9SRVRSWSkgeworCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQogCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01BWCkgewogCQlwcml2LT5yZXRyeV9ydHMgPSB3cnF1LT5yZXRyeS52YWx1ZTsKIAkJRE1FU0coIlNldHRpbmcgcmV0cnkgZm9yIFJUUy9DVFMgZGF0YSB0byAlZCIsIHdycXUtPnJldHJ5LnZhbHVlKTsKIAotCX1lbHNlIHsKKwl9IGVsc2UgewogCQlwcml2LT5yZXRyeV9kYXRhID0gd3JxdS0+cmV0cnkudmFsdWU7CiAJCURNRVNHKCJTZXR0aW5nIHJldHJ5IGZvciBub24gUlRTL0NUUyBkYXRhIHRvICVkIiwgd3JxdS0+cmV0cnkudmFsdWUpOwogCX0KQEAgLTcwMSw3ICs3MTQsNyBAQAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlpZihwcml2LT5yZl9zZXRfc2VucyA9PSBOVUxMKQorCWlmIChwcml2LT5yZl9zZXRfc2VucyA9PSBOVUxMKQogCQlyZXR1cm4gLTE7IC8qIHdlIGhhdmUgbm90IHRoaXMgc3VwcG9ydCBmb3IgdGhpcyByYWRpbyAqLwogCXdycXUtPnNlbnMudmFsdWUgPSBwcml2LT5zZW5zOwogCXJldHVybiAwOwpAQCAtNzE4LDE0ICs3MzEsMTQgQEAKIAlzaG9ydCBlcnIgPSAwOwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAJLy9ETUVTRygiYXR0ZW1wdCB0byBzZXQgc2Vuc2l2aXR5IHRvICVkZGIiLHdycXUtPnNlbnMudmFsdWUpOwotCWlmKHByaXYtPnJmX3NldF9zZW5zID09IE5VTEwpIHsKLQkJZXJyPSAtMTsgLyogd2UgaGF2ZSBub3QgdGhpcyBzdXBwb3J0IGZvciB0aGlzIHJhZGlvICovCisJaWYgKHByaXYtPnJmX3NldF9zZW5zID09IE5VTEwpIHsKKwkJZXJyID0gLTE7IC8qIHdlIGhhdmUgbm90IHRoaXMgc3VwcG9ydCBmb3IgdGhpcyByYWRpbyAqLwogCQlnb3RvIGV4aXQ7CiAJfQotCWlmKHByaXYtPnJmX3NldF9zZW5zKGRldiwgd3JxdS0+c2Vucy52YWx1ZSkgPT0gMCkKKwlpZiAocHJpdi0+cmZfc2V0X3NlbnMoZGV2LCB3cnF1LT5zZW5zLnZhbHVlKSA9PSAwKQogCQlwcml2LT5zZW5zID0gd3JxdS0+c2Vucy52YWx1ZTsKIAllbHNlCi0JCWVycj0gLUVJTlZBTDsKKwkJZXJyID0gLUVJTlZBTDsKIAogZXhpdDoKIAl1cCgmcHJpdi0+d3hfc2VtKTsKQEAgLTczMyw3MiArNzQ2LDY2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmIChXSVJFTEVTU19FWFQgPj0gMTgpCiAvL2h3IHNlY3VyaXR5IG5lZWQgdG8gcmVvcmdhbml6ZWQuCiBzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9lbmNfZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCWludCByZXQ9MDsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7Ci0JLy9wcmludGsoIj09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCS8vcHJpbnRrKCI9PT0+JXMoKVxuIiwgX19mdW5jX18pOwogCiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dChwcml2LT5pZWVlODAyMTEsIGluZm8sIHdycXUsIGV4dHJhKTsKIAogCXsKLQkJdTggYnJvYWRjYXN0X2FkZHJbNl0gPSB7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9OworCQl1OCBicm9hZGNhc3RfYWRkcls2XSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKIAkJdTggemVyb1s2XSA9IHswfTsKIAkJdTMyIGtleVs0XSA9IHswfTsKIAkJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogCQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCQl1OCBpZHggPSAwLCBhbGcgPSAwLCBncm91cCA9IDA7Ci0JCWlmICgoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB8fAotCQlleHQtPmFsZyA9PSBJV19FTkNPREVfQUxHX05PTkUpIC8vbm9uZSBpcyBub3QgYWxsb3dlZCB0byB1c2UgaHdzZWMgV0IgMjAwOC4wNy4wMQorCQlpZiAoKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgfHwgZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19OT05FKQorCQkJLy9ub25lIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBod3NlYyBXQiAyMDA4LjA3LjAxCiAJCQlnb3RvIGVuZF9od19zZWM7CiAKLQkJYWxnID0gIChleHQtPmFsZyA9PSBJV19FTkNPREVfQUxHX0NDTVApP0tFWV9UWVBFX0NDTVA6ZXh0LT5hbGc7IC8vIGFzIElXX0VOQ09ERV9BTEdfQ0NNUCBpcyBkZWZpbmVkIHRvIGJlIDMgYW5kIEtFWV9UWVBFX0NDTVAgaXMgZGVmaW5lZCB0byA0OworCQkvLyBhcyBJV19FTkNPREVfQUxHX0NDTVAgaXMgZGVmaW5lZCB0byBiZSAzIGFuZCBLRVlfVFlQRV9DQ01QIGlzIGRlZmluZWQgdG8gNDsKKwkJYWxnID0gIChleHQtPmFsZyA9PSBJV19FTkNPREVfQUxHX0NDTVApP0tFWV9UWVBFX0NDTVA6ZXh0LT5hbGc7CiAJCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAkJaWYgKGlkeCkKLQkJCWlkeCAtLTsKKwkJCWlkeC0tOwogCQlncm91cCA9IGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVk7CiAKLQkJaWYgKCghZ3JvdXApIHx8IChJV19NT0RFX0FESE9DID09IGllZWUtPml3X21vZGUpIHx8IChhbGcgPT0gIEtFWV9UWVBFX1dFUDQwKSkKLQkJewotCQkJaWYgKChleHQtPmtleV9sZW4gPT0gMTMpICYmIChhbGcgPT0gS0VZX1RZUEVfV0VQNDApICkKKwkJaWYgKCghZ3JvdXApIHx8IChJV19NT0RFX0FESE9DID09IGllZWUtPml3X21vZGUpIHx8IChhbGcgPT0gIEtFWV9UWVBFX1dFUDQwKSkgeworCQkJaWYgKChleHQtPmtleV9sZW4gPT0gMTMpICYmIChhbGcgPT0gS0VZX1RZUEVfV0VQNDApKQogCQkJCWFsZyA9IEtFWV9UWVBFX1dFUDEwNDsKIAkJCWllZWUtPnBhaXJ3aXNlX2tleV90eXBlID0gYWxnOwogCQkJRW5hYmxlSFdTZWN1cml0eUNvbmZpZzgxOTIoZGV2KTsKIAkJfQogCQltZW1jcHkoKHU4ICopa2V5LCBleHQtPmtleSwgMTYpOyAvL3dlIG9ubHkgZ2V0IDE2IGJ5dGVzIGtleS53aHk/IFdCIDIwMDguNy4xCiAKLQkJaWYgKChhbGcgJiBLRVlfVFlQRV9XRVA0MCkgJiYgKGllZWUtPmF1dGhfbW9kZSAhPTIpICkKLQkJeworCQlpZiAoKGFsZyAmIEtFWV9UWVBFX1dFUDQwKSAmJiAoaWVlZS0+YXV0aF9tb2RlICE9IDIpKSB7CiAKLQkJCXNldEtleSggZGV2LAorCQkJc2V0S2V5KGRldiwKIAkJCQkJaWR4LC8vRW50cnlObwogCQkJCQlpZHgsIC8vS2V5SW5kZXgKIAkJCQkJYWxnLCAgLy9LZXlUeXBlCiAJCQkJCXplcm8sIC8vTWFjQWRkcgogCQkJCQkwLCAgICAgICAgICAgICAgLy9EZWZhdWx0S2V5CiAJCQkJCWtleSk7ICAgICAgICAgICAvL0tleUNvbnRlbnQKLQkJfQotCQllbHNlIGlmIChncm91cCkKLQkJeworCQl9IGVsc2UgaWYgKGdyb3VwKSB7CiAJCQlpZWVlLT5ncm91cF9rZXlfdHlwZSA9IGFsZzsKLQkJCXNldEtleSggZGV2LAorCQkJc2V0S2V5KGRldiwKIAkJCQkJaWR4LC8vRW50cnlObwogCQkJCQlpZHgsIC8vS2V5SW5kZXgKIAkJCQkJYWxnLCAgLy9LZXlUeXBlCiAJCQkJCWJyb2FkY2FzdF9hZGRyLCAvL01hY0FkZHIKIAkJCQkJMCwgICAgICAgICAgICAgIC8vRGVmYXVsdEtleQogCQkJCQlrZXkpOyAgICAgICAgICAgLy9LZXlDb250ZW50Ci0JCX0KLQkJZWxzZSAvL3BhaXJ3aXNlIGtleQotCQl7Ci0JCQlzZXRLZXkoIGRldiwKKwkJfSBlbHNlIHsvL3BhaXJ3aXNlIGtleQorCQkJc2V0S2V5KGRldiwKIAkJCQkJNCwvL0VudHJ5Tm8KIAkJCQkJaWR4LCAvL0tleUluZGV4CiAJCQkJCWFsZywgIC8vS2V5VHlwZQpAQCAtODIwLDggKzgyNyw4IEBACiAJCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJCXVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsIGNoYXIgKmV4dHJhKQogewotCWludCByZXQ9MDsKLQkvL3ByaW50aygiPT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCWludCByZXQgPSAwOworCS8vcHJpbnRrKCI9PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2F1dGgocHJpdi0+aWVlZTgwMjExLCBpbmZvLCAmKGRhdGEtPnBhcmFtKSwgZXh0cmEpOwpAQCAtODMzLDkgKzg0MCw5IEBACiAJCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCS8vcHJpbnRrKCI9PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJLy9wcmludGsoIj09PT0+JXMoKVxuIiwgX19mdW5jX18pOwogCi0JaW50IHJldD0wOworCWludCByZXQgPSAwOwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfbWxtZShwcml2LT5pZWVlODAyMTEsIGluZm8sIHdycXUsIGV4dHJhKTsKQEAgLTg0MywzMiArODUwLDMxIEBACiAJdXAoJnByaXYtPnd4X3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KLSNlbmRpZgorCiBzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9nZW5faWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkJdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqZXh0cmEpCiB7Ci0JICAgLy9wcmludGsoIj09PT0+JXMoKSwgbGVuOiVkXG4iLCBfX0ZVTkNUSU9OX18sIGRhdGEtPmxlbmd0aCk7Ci0JaW50IHJldD0wOworCSAgIC8vcHJpbnRrKCI9PT09PiVzKCksIGxlbjolZFxuIiwgX19mdW5jX18sIGRhdGEtPmxlbmd0aCk7CisJaW50IHJldCA9IDA7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9nZW5faWUocHJpdi0+aWVlZTgwMjExLCBleHRyYSwgZGF0YS0+ZGF0YS5sZW5ndGgpOwogCXVwKCZwcml2LT53eF9zZW0pOwotCS8vcHJpbnRrKCI8PT09PT09JXMoKSwgcmV0OiVkXG4iLCBfX0ZVTkNUSU9OX18sIHJldCk7CisJLy9wcmludGsoIjw9PT09PT0lcygpLCByZXQ6JWRcbiIsIF9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiAKIAogfQogCiBzdGF0aWMgaW50IGR1bW15KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCi0JCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LGNoYXIgKmIpCisJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpiKQogewogCXJldHVybiAtMTsKIH0KIAogCi1zdGF0aWMgaXdfaGFuZGxlciByODE5Ml93eF9oYW5kbGVyc1tdID0KLXsKK3N0YXRpYyBpd19oYW5kbGVyIHI4MTkyX3d4X2hhbmRsZXJzW10gPSB7CiAJTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXQ09NTUlUICovCiAJcjgxOTJfd3hfZ2V0X25hbWUsCSAgLyogU0lPQ0dJV05BTUUgKi8KIAlkdW1teSwgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdOV0lEICovCkBAIC04OTEsMTEgKzg5Nyw3IEBACiAJTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DV0lXVEhSU1BZICovCiAJcjgxOTJfd3hfc2V0X3dhcCwJICAvKiBTSU9DU0lXQVAgKi8KIAlyODE5Ml93eF9nZXRfd2FwLCAgICAgICAgIC8qIFNJT0NHSVdBUCAqLwotI2lmIChXSVJFTEVTU19FWFQgPj0gMTgpCiAJcjgxOTJfd3hfc2V0X21sbWUsICAgICAgICAgICAgICAgICAgICAgLyogTUxNRS0tICovCi0jZWxzZQotCSBOVUxMLAotI2VuZGlmCiAJZHVtbXksICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV0FQTElTVCAtLSBkZXByZWNhdGVkICovCiAJcjgxOTJfd3hfc2V0X3NjYW4sICAgICAgICAvKiBTSU9DU0lXU0NBTiAqLwogCXI4MTkyX3d4X2dldF9zY2FuLCAgICAgICAgLyogU0lPQ0dJV1NDQU4gKi8KQEAgLTkyNCwxNyArOTI2LDEwIEBACiAJcjgxOTJfd3hfc2V0X2dlbl9pZSwvL05VTEwsCQkJLyogU0lPQ1NJV0dFTklFICovCiAJTlVMTCwJCQkvKiBTSU9DU0lXR0VOSUUgKi8KIAotI2lmIChXSVJFTEVTU19FWFQgPj0gMTgpCiAJcjgxOTJfd3hfc2V0X2F1dGgsLy9OVUxMLAkJCS8qIFNJT0NTSVdBVVRIICovCiAJTlVMTCwvL3I4MTkyX3d4X2dldF9hdXRoLC8vTlVMTCwJCQkvKiBTSU9DU0lXQVVUSCAqLwogCXI4MTkyX3d4X3NldF9lbmNfZXh0LAkJCS8qIFNJT0NTSVdFTkNPREVFWFQgKi8KIAlOVUxMLC8vcjgxOTJfd3hfZ2V0X2VuY19leHQsLy9OVUxMLAkJCS8qIFNJT0NTSVdFTkNPREVFWFQgKi8KLSNlbHNlCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0JTlVMTCwKLSNlbmRpZgogCU5VTEwsCQkJLyogU0lPQ1NJV1BNS1NBICovCiAJTlVMTCwJCQkgLyotLS1ob2xlLS0tKi8KIApAQCAtOTc4LDE3ICs5NzMsMTUgQEAKIAlyODE5Ml93eF9mb3JjZV9yZXNldCwKIH07CiAKLS8vI2lmIFdJUkVMRVNTX0VYVCA+PSAxNwogc3RydWN0IGl3X3N0YXRpc3RpY3MgKnI4MTkyX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CiAJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CiAJaW50IHRtcF9sZXZlbCA9IDA7CiAJaW50IHRtcF9xdWFsID0gMDsKIAlpbnQgdG1wX25vaXNlID0gMDsKLQlpZihpZWVlLT5zdGF0ZSA8IElFRUU4MDIxMV9MSU5LRUQpCi0JeworCWlmIChpZWVlLT5zdGF0ZSA8IElFRUU4MDIxMV9MSU5LRUQpIHsKIAkJd3N0YXRzLT5xdWFsLnF1YWwgPSAwOwogCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAwOwogCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwpAQCAtOTk2LDcgKzk4OSw3IEBACiAJCXJldHVybiB3c3RhdHM7CiAJfQogCi0gICAgICAgdG1wX2xldmVsID0gKCZpZWVlLT5jdXJyZW50X25ldHdvcmspLT5zdGF0cy5yc3NpOworCXRtcF9sZXZlbCA9ICgmaWVlZS0+Y3VycmVudF9uZXR3b3JrKS0+c3RhdHMucnNzaTsKIAl0bXBfcXVhbCA9ICgmaWVlZS0+Y3VycmVudF9uZXR3b3JrKS0+c3RhdHMuc2lnbmFsOwogCXRtcF9ub2lzZSA9ICgmaWVlZS0+Y3VycmVudF9uZXR3b3JrKS0+c3RhdHMubm9pc2U7CiAJLy9wcmludGsoImxldmVsOiVkLCBxdWFsOiVkLCBub2lzZTolZFxuIiwgdG1wX2xldmVsLCB0bXBfcXVhbCwgdG1wX25vaXNlKTsKQEAgLTEwMDcsMTcgKzEwMDAsMTQgQEAKIAl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUR8IElXX1FVQUxfREJNOwogCXJldHVybiB3c3RhdHM7CiB9Ci0vLyNlbmRpZgogCiAKLXN0cnVjdCBpd19oYW5kbGVyX2RlZiAgcjgxOTJfd3hfaGFuZGxlcnNfZGVmPXsKK3N0cnVjdCBpd19oYW5kbGVyX2RlZiAgcjgxOTJfd3hfaGFuZGxlcnNfZGVmID0gewogCS5zdGFuZGFyZCA9IHI4MTkyX3d4X2hhbmRsZXJzLAogCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKHI4MTkyX3d4X2hhbmRsZXJzKSwKIAkucHJpdmF0ZSA9IHI4MTkyX3ByaXZhdGVfaGFuZGxlciwKIAkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKHI4MTkyX3ByaXZhdGVfaGFuZGxlciksCiAJLm51bV9wcml2YXRlX2FyZ3MgPSBzaXplb2YocjgxOTJfcHJpdmF0ZV9hcmdzKSAvIHNpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKLSNpZiBXSVJFTEVTU19FWFQgPj0gMTcKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcjgxOTJfZ2V0X3dpcmVsZXNzX3N0YXRzLAotI2VuZGlmCiAJLnByaXZhdGVfYXJncyA9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopcjgxOTJfcHJpdmF0ZV9hcmdzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfY21kcGt0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2NtZHBrdC5jCmluZGV4IDcyM2M4NjMuLjU0NWY0OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfY21kcGt0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9jbWRwa3QuYwpAQCAtMjgsNyArMjgsNiBAQAogCiBydF9zdGF0dXMgU2VuZFR4Q29tbWFuZFBhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwRGF0YSwgdTMyIERhdGFMZW4pCiB7Ci0JcnRfc3RhdHVzCXJ0U3RhdHVzID0gUlRfU1RBVFVTX1NVQ0NFU1M7CiAJc3RydWN0IHI4MTkyX3ByaXYgICAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYJICAgICpza2I7CiAJY2JfZGVzYwkJICAgICp0Y2JfZGVzYzsKQEAgLTU4LDcgKzU3LDcgQEAKIAkJcHJpdi0+aWVlZTgwMjExLT5zb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdChza2IsIGRldik7CiAJfQogCi0JcmV0dXJuIHJ0U3RhdHVzOworCXJldHVybiBSVF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZS5jCmluZGV4IGVjZmI2NjUuLjA0YjhmNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfZmlybXdhcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiBydF9zdGF0dXM7CiAKIENQVUNoZWNrTWFpbkNvZGVPS0FuZFR1cm5PbkNQVV9GYWlsOgotCVJUX1RSQUNFKENPTVBfRVJSLCAiRVJSIGluICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJUlRfVFJBQ0UoQ09NUF9FUlIsICJFUlIgaW4gJXMoKVxuIiwgX19mdW5jX18pOwogCXJ0X3N0YXR1cyA9IEZBTFNFOwogCXJldHVybiBydF9zdGF0dXM7CiB9CkBAIC0xOTEsNyArMTkxLDcgQEAKIAlyZXR1cm4gcnRfc3RhdHVzOwogCiBDUFVDaGVja0Zpcm13YXJlUmVhZHlfRmFpbDoKLQlSVF9UUkFDRShDT01QX0VSUiwgIkVSUiBpbiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCVJUX1RSQUNFKENPTVBfRVJSLCAiRVJSIGluICVzKClcbiIsIF9fZnVuY19fKTsKIAlydF9zdGF0dXMgPSBmYWxzZTsKIAlyZXR1cm4gcnRfc3RhdHVzOwogCkBAIC0yNzcsMTMgKzI3NywxMSBAQAogCQkgKiAgIGFuZCBUeCBkZXNjcmlwdG9yIGluZm8KIAkJICogKi8KIAkJcnRfc3RhdHVzID0gZndfZG93bmxvYWRfY29kZShkZXYsbWFwcGVkX2ZpbGUsZmlsZV9sZW5ndGgpOwotCQlpZiAocnN0X29wdCA9PSBPUFRfU1lTVEVNX1JFU0VUKSB7CisJCWlmIChyc3Rfb3B0ID09IE9QVF9TWVNURU1fUkVTRVQpCiAJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQkJfQogCi0JCWlmIChydF9zdGF0dXMgIT0gVFJVRSkgeworCQlpZiAocnRfc3RhdHVzICE9IFRSVUUpCiAJCQlnb3RvIGRvd25sb2FkX2Zpcm13YXJlX2ZhaWw7Ci0JCX0KIAogCQlzd2l0Y2ggKGluaXRfc3RlcCkgewogCQljYXNlIEZXX0lOSVRfU1RFUDBfQk9PVDoKQEAgLTMzNiw3ICszMzQsNyBAQAogCXJldHVybiBydF9zdGF0dXM7CiAKIGRvd25sb2FkX2Zpcm13YXJlX2ZhaWw6Ci0JUlRfVFJBQ0UoQ09NUF9FUlIsICJFUlIgaW4gJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlSVF9UUkFDRShDT01QX0VSUiwgIkVSUiBpbiAlcygpXG4iLCBfX2Z1bmNfXyk7CiAJcnRfc3RhdHVzID0gRkFMU0U7CiAJcmV0dXJuIHJ0X3N0YXR1czsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZV9pbWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfZmlybXdhcmVfaW1nLmMKaW5kZXggMDc4NWRlNy4uNGViNDNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZV9pbWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlX2ltZy5jCkBAIC0zLDU0NiArMyw1NDYgQEAKICNpbmNsdWRlICJyODE5eFVfZmlybXdhcmVfaW1nLmgiCiAKIHUzMiBSdGw4MTkyVXNiUEhZX1JFR0FycmF5W10gPSB7Ci0weDAsIH07CisJMHgwLCB9OwogCiB1MzIgUnRsODE5MlVzYlBIWV9SRUdfMVQyUkFycmF5W10gPSB7Ci0weDgwMCwweDAwMDAwMDAwLAotMHg4MDQsMHgwMDAwMDAwMSwKLTB4ODA4LDB4MDAwMGZjMDAsCi0weDgwYywweDAwMDAwMDFjLAotMHg4MTAsMHg4MDEwMTBhYSwKLTB4ODE0LDB4MDA4NTE0ZDAsCi0weDgxOCwweDAwMDAwMDQwLAotMHg4MWMsMHgwMDAwMDAwMCwKLTB4ODIwLDB4MDAwMDAwMDQsCi0weDgyNCwweDAwNjkwMDAwLAotMHg4MjgsMHgwMDAwMDAwNCwKLTB4ODJjLDB4MDBlOTAwMDAsCi0weDgzMCwweDAwMDAwMDA0LAotMHg4MzQsMHgwMDY5MDAwMCwKLTB4ODM4LDB4MDAwMDAwMDQsCi0weDgzYywweDAwZTkwMDAwLAotMHg4NDAsMHgwMDAwMDAwMCwKLTB4ODQ0LDB4MDAwMDAwMDAsCi0weDg0OCwweDAwMDAwMDAwLAotMHg4NGMsMHgwMDAwMDAwMCwKLTB4ODUwLDB4MDAwMDAwMDAsCi0weDg1NCwweDAwMDAwMDAwLAotMHg4NTgsMHg2NWE5NjVhOSwKLTB4ODVjLDB4NjVhOTY1YTksCi0weDg2MCwweDAwMWYwMDEwLAotMHg4NjQsMHgwMDdmMDAxMCwKLTB4ODY4LDB4MDAxZjAwMTAsCi0weDg2YywweDAwN2YwMDEwLAotMHg4NzAsMHgwZjEwMGY3MCwKLTB4ODc0LDB4MGYxMDBmNzAsCi0weDg3OCwweDAwMDAwMDAwLAotMHg4N2MsMHgwMDAwMDAwMCwKLTB4ODgwLDB4Njg3MGUzNmMsCi0weDg4NCwweGUzNTczNjAwLAotMHg4ODgsMHg0MjYwYzM0MCwKLTB4ODhjLDB4MDAwMGZmMDAsCi0weDg5MCwweDAwMDAwMDAwLAotMHg4OTQsMHhmZmZmZmZmZSwKLTB4ODk4LDB4NGM0MjM4MmYsCi0weDg5YywweDAwNjU2MDU2LAotMHg4YjAsMHgwMDAwMDAwMCwKLTB4OGUwLDB4MDAwMDAwMDAsCi0weDhlNCwweDAwMDAwMDAwLAotMHg5MDAsMHgwMDAwMDAwMCwKLTB4OTA0LDB4MDAwMDAwMjMsCi0weDkwOCwweDAwMDAwMDAwLAotMHg5MGMsMHgzMTEyMTMxMSwKLTB4YTAwLDB4MDBkMGM3ZDgsCi0weGEwNCwweDgxMWYwMDA4LAotMHhhMDgsMHg4MGNkODMwMCwKLTB4YTBjLDB4MmU2Mjc0MGYsCi0weGExMCwweDk1MDA5Yjc4LAotMHhhMTQsMHgxMTE0NTAwOCwKLTB4YTE4LDB4MDA4ODExMTcsCi0weGExYywweDg5MTQwZmEwLAotMHhhMjAsMHgxYTFiMDAwMCwKLTB4YTI0LDB4MDkwZTEzMTcsCi0weGEyOCwweDAwMDAwMjA0LAotMHhhMmMsMHgwMDAwMDAwMCwKLTB4YzAwLDB4MDAwMDAwNDAsCi0weGMwNCwweDAwMDA1NDMzLAotMHhjMDgsMHgwMDAwMDBlNCwKLTB4YzBjLDB4NmM2YzZjNmMsCi0weGMxMCwweDA4ODAwMDAwLAotMHhjMTQsMHg0MDAwMDEwMCwKLTB4YzE4LDB4MDgwMDAwMDAsCi0weGMxYywweDQwMDAwMTAwLAotMHhjMjAsMHgwODAwMDAwMCwKLTB4YzI0LDB4NDAwMDAxMDAsCi0weGMyOCwweDA4MDAwMDAwLAotMHhjMmMsMHg0MDAwMDEwMCwKLTB4YzMwLDB4NmRlOWFjNDQsCi0weGMzNCwweDQ2NWM1MmNkLAotMHhjMzgsMHg0OTdmNTk5NCwKLTB4YzNjLDB4MGE5Njk3NjQsCi0weGM0MCwweDFmN2M0MDNmLAotMHhjNDQsMHgwMDAxMDBiNywKLTB4YzQ4LDB4ZWMwMjAwMDAsCi0weGM0YywweDAwMDAwMzAwLAotMHhjNTAsMHg2OTU0MzQyMCwKLTB4YzU0LDB4NDMzYzAwOTQsCi0weGM1OCwweDY5NTQzNDIwLAotMHhjNWMsMHg0MzNjMDA5NCwKLTB4YzYwLDB4Njk1NDM0MjAsCi0weGM2NCwweDQzM2MwMDk0LAotMHhjNjgsMHg2OTU0MzQyMCwKLTB4YzZjLDB4NDMzYzAwOTQsCi0weGM3MCwweDJjN2YwMDBkLAotMHhjNzQsMHgwMTg2MTc1YiwKLTB4Yzc4LDB4MDAwMDAwMWYsCi0weGM3YywweDAwYjkxNjEyLAotMHhjODAsMHg0MDAwMDEwMCwKLTB4Yzg0LDB4MjAwMDAwMDAsCi0weGM4OCwweDQwMDAwMTAwLAotMHhjOGMsMHgyMDIwMDAwMCwKLTB4YzkwLDB4NDAwMDAxMDAsCi0weGM5NCwweDAwMDAwMDAwLAotMHhjOTgsMHg0MDAwMDEwMCwKLTB4YzljLDB4MDAwMDAwMDAsCi0weGNhMCwweDAwNDkyNDkyLAotMHhjYTQsMHgwMDAwMDAwMCwKLTB4Y2E4LDB4MDAwMDAwMDAsCi0weGNhYywweDAwMDAwMDAwLAotMHhjYjAsMHgwMDAwMDAwMCwKLTB4Y2I0LDB4MDAwMDAwMDAsCi0weGNiOCwweDAwMDAwMDAwLAotMHhjYmMsMHgwMDQ5MjQ5MiwKLTB4Y2MwLDB4MDAwMDAwMDAsCi0weGNjNCwweDAwMDAwMDAwLAotMHhjYzgsMHgwMDAwMDAwMCwKLTB4Y2NjLDB4MDAwMDAwMDAsCi0weGNkMCwweDAwMDAwMDAwLAotMHhjZDQsMHgwMDAwMDAwMCwKLTB4Y2Q4LDB4NjRiMjI0MjcsCi0weGNkYywweDAwNzY2OTMyLAotMHhjZTAsMHgwMDIyMjIyMiwKLTB4ZDAwLDB4MDAwMDA3NTAsCi0weGQwNCwweDAwMDAwNDAzLAotMHhkMDgsMHgwMDAwOTA3ZiwKLTB4ZDBjLDB4MDAwMDAwMDEsCi0weGQxMCwweGEwNjMzMzMzLAotMHhkMTQsMHgzMzMzM2M2MywKLTB4ZDE4LDB4NmE4ZjViNmIsCi0weGQxYywweDAwMDAwMDAwLAotMHhkMjAsMHgwMDAwMDAwMCwKLTB4ZDI0LDB4MDAwMDAwMDAsCi0weGQyOCwweDAwMDAwMDAwLAotMHhkMmMsMHhjYzk3OTk3NSwKLTB4ZDMwLDB4MDAwMDAwMDAsCi0weGQzNCwweDAwMDAwMDAwLAotMHhkMzgsMHgwMDAwMDAwMCwKLTB4ZDNjLDB4MDAwMjcyOTMsCi0weGQ0MCwweDAwMDAwMDAwLAotMHhkNDQsMHgwMDAwMDAwMCwKLTB4ZDQ4LDB4MDAwMDAwMDAsCi0weGQ0YywweDAwMDAwMDAwLAotMHhkNTAsMHg2NDM3MTQwYSwKLTB4ZDU0LDB4MDI0ZGJkMDIsCi0weGQ1OCwweDAwMDAwMDAwLAotMHhkNWMsMHgwNDAzMjA2NCwKLTB4ZTAwLDB4MTYxYTFhMWEsCi0weGUwNCwweDEyMTIxNDE2LAotMHhlMDgsMHgwMDAwMTgwMCwKLTB4ZTBjLDB4MDAwMDAwMDAsCi0weGUxMCwweDE2MWExYTFhLAotMHhlMTQsMHgxMjEyMTQxNiwKLTB4ZTE4LDB4MTYxYTFhMWEsCi0weGUxYywweDEyMTIxNDE2LAorCTB4ODAwLCAweDAwMDAwMDAwLAorCTB4ODA0LCAweDAwMDAwMDAxLAorCTB4ODA4LCAweDAwMDBmYzAwLAorCTB4ODBjLCAweDAwMDAwMDFjLAorCTB4ODEwLCAweDgwMTAxMGFhLAorCTB4ODE0LCAweDAwODUxNGQwLAorCTB4ODE4LCAweDAwMDAwMDQwLAorCTB4ODFjLCAweDAwMDAwMDAwLAorCTB4ODIwLCAweDAwMDAwMDA0LAorCTB4ODI0LCAweDAwNjkwMDAwLAorCTB4ODI4LCAweDAwMDAwMDA0LAorCTB4ODJjLCAweDAwZTkwMDAwLAorCTB4ODMwLCAweDAwMDAwMDA0LAorCTB4ODM0LCAweDAwNjkwMDAwLAorCTB4ODM4LCAweDAwMDAwMDA0LAorCTB4ODNjLCAweDAwZTkwMDAwLAorCTB4ODQwLCAweDAwMDAwMDAwLAorCTB4ODQ0LCAweDAwMDAwMDAwLAorCTB4ODQ4LCAweDAwMDAwMDAwLAorCTB4ODRjLCAweDAwMDAwMDAwLAorCTB4ODUwLCAweDAwMDAwMDAwLAorCTB4ODU0LCAweDAwMDAwMDAwLAorCTB4ODU4LCAweDY1YTk2NWE5LAorCTB4ODVjLCAweDY1YTk2NWE5LAorCTB4ODYwLCAweDAwMWYwMDEwLAorCTB4ODY0LCAweDAwN2YwMDEwLAorCTB4ODY4LCAweDAwMWYwMDEwLAorCTB4ODZjLCAweDAwN2YwMDEwLAorCTB4ODcwLCAweDBmMTAwZjcwLAorCTB4ODc0LCAweDBmMTAwZjcwLAorCTB4ODc4LCAweDAwMDAwMDAwLAorCTB4ODdjLCAweDAwMDAwMDAwLAorCTB4ODgwLCAweDY4NzBlMzZjLAorCTB4ODg0LCAweGUzNTczNjAwLAorCTB4ODg4LCAweDQyNjBjMzQwLAorCTB4ODhjLCAweDAwMDBmZjAwLAorCTB4ODkwLCAweDAwMDAwMDAwLAorCTB4ODk0LCAweGZmZmZmZmZlLAorCTB4ODk4LCAweDRjNDIzODJmLAorCTB4ODljLCAweDAwNjU2MDU2LAorCTB4OGIwLCAweDAwMDAwMDAwLAorCTB4OGUwLCAweDAwMDAwMDAwLAorCTB4OGU0LCAweDAwMDAwMDAwLAorCTB4OTAwLCAweDAwMDAwMDAwLAorCTB4OTA0LCAweDAwMDAwMDIzLAorCTB4OTA4LCAweDAwMDAwMDAwLAorCTB4OTBjLCAweDMxMTIxMzExLAorCTB4YTAwLCAweDAwZDBjN2Q4LAorCTB4YTA0LCAweDgxMWYwMDA4LAorCTB4YTA4LCAweDgwY2Q4MzAwLAorCTB4YTBjLCAweDJlNjI3NDBmLAorCTB4YTEwLCAweDk1MDA5Yjc4LAorCTB4YTE0LCAweDExMTQ1MDA4LAorCTB4YTE4LCAweDAwODgxMTE3LAorCTB4YTFjLCAweDg5MTQwZmEwLAorCTB4YTIwLCAweDFhMWIwMDAwLAorCTB4YTI0LCAweDA5MGUxMzE3LAorCTB4YTI4LCAweDAwMDAwMjA0LAorCTB4YTJjLCAweDAwMDAwMDAwLAorCTB4YzAwLCAweDAwMDAwMDQwLAorCTB4YzA0LCAweDAwMDA1NDMzLAorCTB4YzA4LCAweDAwMDAwMGU0LAorCTB4YzBjLCAweDZjNmM2YzZjLAorCTB4YzEwLCAweDA4ODAwMDAwLAorCTB4YzE0LCAweDQwMDAwMTAwLAorCTB4YzE4LCAweDA4MDAwMDAwLAorCTB4YzFjLCAweDQwMDAwMTAwLAorCTB4YzIwLCAweDA4MDAwMDAwLAorCTB4YzI0LCAweDQwMDAwMTAwLAorCTB4YzI4LCAweDA4MDAwMDAwLAorCTB4YzJjLCAweDQwMDAwMTAwLAorCTB4YzMwLCAweDZkZTlhYzQ0LAorCTB4YzM0LCAweDQ2NWM1MmNkLAorCTB4YzM4LCAweDQ5N2Y1OTk0LAorCTB4YzNjLCAweDBhOTY5NzY0LAorCTB4YzQwLCAweDFmN2M0MDNmLAorCTB4YzQ0LCAweDAwMDEwMGI3LAorCTB4YzQ4LCAweGVjMDIwMDAwLAorCTB4YzRjLCAweDAwMDAwMzAwLAorCTB4YzUwLCAweDY5NTQzNDIwLAorCTB4YzU0LCAweDQzM2MwMDk0LAorCTB4YzU4LCAweDY5NTQzNDIwLAorCTB4YzVjLCAweDQzM2MwMDk0LAorCTB4YzYwLCAweDY5NTQzNDIwLAorCTB4YzY0LCAweDQzM2MwMDk0LAorCTB4YzY4LCAweDY5NTQzNDIwLAorCTB4YzZjLCAweDQzM2MwMDk0LAorCTB4YzcwLCAweDJjN2YwMDBkLAorCTB4Yzc0LCAweDAxODYxNzViLAorCTB4Yzc4LCAweDAwMDAwMDFmLAorCTB4YzdjLCAweDAwYjkxNjEyLAorCTB4YzgwLCAweDQwMDAwMTAwLAorCTB4Yzg0LCAweDIwMDAwMDAwLAorCTB4Yzg4LCAweDQwMDAwMTAwLAorCTB4YzhjLCAweDIwMjAwMDAwLAorCTB4YzkwLCAweDQwMDAwMTAwLAorCTB4Yzk0LCAweDAwMDAwMDAwLAorCTB4Yzk4LCAweDQwMDAwMTAwLAorCTB4YzljLCAweDAwMDAwMDAwLAorCTB4Y2EwLCAweDAwNDkyNDkyLAorCTB4Y2E0LCAweDAwMDAwMDAwLAorCTB4Y2E4LCAweDAwMDAwMDAwLAorCTB4Y2FjLCAweDAwMDAwMDAwLAorCTB4Y2IwLCAweDAwMDAwMDAwLAorCTB4Y2I0LCAweDAwMDAwMDAwLAorCTB4Y2I4LCAweDAwMDAwMDAwLAorCTB4Y2JjLCAweDAwNDkyNDkyLAorCTB4Y2MwLCAweDAwMDAwMDAwLAorCTB4Y2M0LCAweDAwMDAwMDAwLAorCTB4Y2M4LCAweDAwMDAwMDAwLAorCTB4Y2NjLCAweDAwMDAwMDAwLAorCTB4Y2QwLCAweDAwMDAwMDAwLAorCTB4Y2Q0LCAweDAwMDAwMDAwLAorCTB4Y2Q4LCAweDY0YjIyNDI3LAorCTB4Y2RjLCAweDAwNzY2OTMyLAorCTB4Y2UwLCAweDAwMjIyMjIyLAorCTB4ZDAwLCAweDAwMDAwNzUwLAorCTB4ZDA0LCAweDAwMDAwNDAzLAorCTB4ZDA4LCAweDAwMDA5MDdmLAorCTB4ZDBjLCAweDAwMDAwMDAxLAorCTB4ZDEwLCAweGEwNjMzMzMzLAorCTB4ZDE0LCAweDMzMzMzYzYzLAorCTB4ZDE4LCAweDZhOGY1YjZiLAorCTB4ZDFjLCAweDAwMDAwMDAwLAorCTB4ZDIwLCAweDAwMDAwMDAwLAorCTB4ZDI0LCAweDAwMDAwMDAwLAorCTB4ZDI4LCAweDAwMDAwMDAwLAorCTB4ZDJjLCAweGNjOTc5OTc1LAorCTB4ZDMwLCAweDAwMDAwMDAwLAorCTB4ZDM0LCAweDAwMDAwMDAwLAorCTB4ZDM4LCAweDAwMDAwMDAwLAorCTB4ZDNjLCAweDAwMDI3MjkzLAorCTB4ZDQwLCAweDAwMDAwMDAwLAorCTB4ZDQ0LCAweDAwMDAwMDAwLAorCTB4ZDQ4LCAweDAwMDAwMDAwLAorCTB4ZDRjLCAweDAwMDAwMDAwLAorCTB4ZDUwLCAweDY0MzcxNDBhLAorCTB4ZDU0LCAweDAyNGRiZDAyLAorCTB4ZDU4LCAweDAwMDAwMDAwLAorCTB4ZDVjLCAweDA0MDMyMDY0LAorCTB4ZTAwLCAweDE2MWExYTFhLAorCTB4ZTA0LCAweDEyMTIxNDE2LAorCTB4ZTA4LCAweDAwMDAxODAwLAorCTB4ZTBjLCAweDAwMDAwMDAwLAorCTB4ZTEwLCAweDE2MWExYTFhLAorCTB4ZTE0LCAweDEyMTIxNDE2LAorCTB4ZTE4LCAweDE2MWExYTFhLAorCTB4ZTFjLCAweDEyMTIxNDE2LAogfTsKIAogdTMyIFJ0bDgxOTJVc2JSYWRpb0FfQXJyYXlbXSA9IHsKLTB4MDE5LDB4MDAwMDAwMDMsCi0weDAwMCwweDAwMDAwMGJmLAotMHgwMDEsMHgwMDAwMGVlMCwKLTB4MDAyLDB4MDAwMDAwNGMsCi0weDAwMywweDAwMDAwN2YxLAotMHgwMDQsMHgwMDAwMDk3NSwKLTB4MDA1LDB4MDAwMDBjNTgsCi0weDAwNiwweDAwMDAwYWU2LAotMHgwMDcsMHgwMDAwMDBjYSwKLTB4MDA4LDB4MDAwMDBlMWMsCi0weDAwOSwweDAwMDAwN2YwLAotMHgwMGEsMHgwMDAwMDlkMCwKLTB4MDBiLDB4MDAwMDAxYmEsCi0weDAwYywweDAwMDAwMjQwLAotMHgwMGUsMHgwMDAwMDAyMCwKLTB4MDBmLDB4MDAwMDA5OTAsCi0weDAxMiwweDAwMDAwODA2LAotMHgwMTQsMHgwMDAwMDVhYiwKLTB4MDE1LDB4MDAwMDBmODAsCi0weDAxNiwweDAwMDAwMDIwLAotMHgwMTcsMHgwMDAwMDU5NywKLTB4MDE4LDB4MDAwMDA1MGEsCi0weDAxYSwweDAwMDAwZjgwLAotMHgwMWIsMHgwMDAwMGY1ZSwKLTB4MDFjLDB4MDAwMDAwMDgsCi0weDAxZCwweDAwMDAwNjA3LAotMHgwMWUsMHgwMDAwMDZjYywKLTB4MDFmLDB4MDAwMDAwMDAsCi0weDAyMCwweDAwMDAwMWE1LAotMHgwMWYsMHgwMDAwMDAwMSwKLTB4MDIwLDB4MDAwMDAxNjUsCi0weDAxZiwweDAwMDAwMDAyLAotMHgwMjAsMHgwMDAwMDBjNiwKLTB4MDFmLDB4MDAwMDAwMDMsCi0weDAyMCwweDAwMDAwMDg2LAotMHgwMWYsMHgwMDAwMDAwNCwKLTB4MDIwLDB4MDAwMDAwNDYsCi0weDAxZiwweDAwMDAwMDA1LAotMHgwMjAsMHgwMDAwMDFlNiwKLTB4MDFmLDB4MDAwMDAwMDYsCi0weDAyMCwweDAwMDAwMWE2LAotMHgwMWYsMHgwMDAwMDAwNywKLTB4MDIwLDB4MDAwMDAxNjYsCi0weDAxZiwweDAwMDAwMDA4LAotMHgwMjAsMHgwMDAwMDBjNywKLTB4MDFmLDB4MDAwMDAwMDksCi0weDAyMCwweDAwMDAwMDg3LAotMHgwMWYsMHgwMDAwMDAwYSwKLTB4MDIwLDB4MDAwMDAwZjcsCi0weDAxZiwweDAwMDAwMDBiLAotMHgwMjAsMHgwMDAwMDBkNywKLTB4MDFmLDB4MDAwMDAwMGMsCi0weDAyMCwweDAwMDAwMGI3LAotMHgwMWYsMHgwMDAwMDAwZCwKLTB4MDIwLDB4MDAwMDAwOTcsCi0weDAxZiwweDAwMDAwMDBlLAotMHgwMjAsMHgwMDAwMDA3NywKLTB4MDFmLDB4MDAwMDAwMGYsCi0weDAyMCwweDAwMDAwMDU3LAotMHgwMWYsMHgwMDAwMDAxMCwKLTB4MDIwLDB4MDAwMDAwMzcsCi0weDAxZiwweDAwMDAwMDExLAotMHgwMjAsMHgwMDAwMDBmYiwKLTB4MDFmLDB4MDAwMDAwMTIsCi0weDAyMCwweDAwMDAwMGRiLAotMHgwMWYsMHgwMDAwMDAxMywKLTB4MDIwLDB4MDAwMDAwYmIsCi0weDAxZiwweDAwMDAwMDE0LAotMHgwMjAsMHgwMDAwMDBmZiwKLTB4MDFmLDB4MDAwMDAwMTUsCi0weDAyMCwweDAwMDAwMGUzLAotMHgwMWYsMHgwMDAwMDAxNiwKLTB4MDIwLDB4MDAwMDAwYzMsCi0weDAxZiwweDAwMDAwMDE3LAotMHgwMjAsMHgwMDAwMDBhMywKLTB4MDFmLDB4MDAwMDAwMTgsCi0weDAyMCwweDAwMDAwMDgzLAotMHgwMWYsMHgwMDAwMDAxOSwKLTB4MDIwLDB4MDAwMDAwNjMsCi0weDAxZiwweDAwMDAwMDFhLAotMHgwMjAsMHgwMDAwMDA0MywKLTB4MDFmLDB4MDAwMDAwMWIsCi0weDAyMCwweDAwMDAwMDIzLAotMHgwMWYsMHgwMDAwMDAxYywKLTB4MDIwLDB4MDAwMDAwMDMsCi0weDAxZiwweDAwMDAwMDFkLAotMHgwMjAsMHgwMDAwMDFlMywKLTB4MDFmLDB4MDAwMDAwMWUsCi0weDAyMCwweDAwMDAwMWMzLAotMHgwMWYsMHgwMDAwMDAxZiwKLTB4MDIwLDB4MDAwMDAxYTMsCi0weDAxZiwweDAwMDAwMDIwLAotMHgwMjAsMHgwMDAwMDE4MywKLTB4MDFmLDB4MDAwMDAwMjEsCi0weDAyMCwweDAwMDAwMTYzLAotMHgwMWYsMHgwMDAwMDAyMiwKLTB4MDIwLDB4MDAwMDAxNDMsCi0weDAxZiwweDAwMDAwMDIzLAotMHgwMjAsMHgwMDAwMDEyMywKLTB4MDFmLDB4MDAwMDAwMjQsCi0weDAyMCwweDAwMDAwMTAzLAotMHgwMjMsMHgwMDAwMDIwMywKLTB4MDI0LDB4MDAwMDAyMDAsCi0weDAwYiwweDAwMDAwMWJhLAotMHgwMmMsMHgwMDAwMDNkNywKLTB4MDJkLDB4MDAwMDBmZjAsCi0weDAwMCwweDAwMDAwMDM3LAotMHgwMDQsMHgwMDAwMDE2MCwKLTB4MDA3LDB4MDAwMDAwODAsCi0weDAwMiwweDAwMDAwODhkLAotMHgwZmUsMHgwMDAwMDAwMCwKLTB4MGZlLDB4MDAwMDAwMDAsCi0weDAxNiwweDAwMDAwMjAwLAotMHgwMTYsMHgwMDAwMDM4MCwKLTB4MDE2LDB4MDAwMDAwMjAsCi0weDAxNiwweDAwMDAwMWEwLAotMHgwMDAsMHgwMDAwMDBiZiwKLTB4MDBkLDB4MDAwMDAwMWYsCi0weDAwZCwweDAwMDAwYzlmLAotMHgwMDIsMHgwMDAwMDA0ZCwKLTB4MDAwLDB4MDAwMDBjYmYsCi0weDAwNCwweDAwMDAwOTc1LAotMHgwMDcsMHgwMDAwMDcwMCwKKwkweDAxOSwgMHgwMDAwMDAwMywKKwkweDAwMCwgMHgwMDAwMDBiZiwKKwkweDAwMSwgMHgwMDAwMGVlMCwKKwkweDAwMiwgMHgwMDAwMDA0YywKKwkweDAwMywgMHgwMDAwMDdmMSwKKwkweDAwNCwgMHgwMDAwMDk3NSwKKwkweDAwNSwgMHgwMDAwMGM1OCwKKwkweDAwNiwgMHgwMDAwMGFlNiwKKwkweDAwNywgMHgwMDAwMDBjYSwKKwkweDAwOCwgMHgwMDAwMGUxYywKKwkweDAwOSwgMHgwMDAwMDdmMCwKKwkweDAwYSwgMHgwMDAwMDlkMCwKKwkweDAwYiwgMHgwMDAwMDFiYSwKKwkweDAwYywgMHgwMDAwMDI0MCwKKwkweDAwZSwgMHgwMDAwMDAyMCwKKwkweDAwZiwgMHgwMDAwMDk5MCwKKwkweDAxMiwgMHgwMDAwMDgwNiwKKwkweDAxNCwgMHgwMDAwMDVhYiwKKwkweDAxNSwgMHgwMDAwMGY4MCwKKwkweDAxNiwgMHgwMDAwMDAyMCwKKwkweDAxNywgMHgwMDAwMDU5NywKKwkweDAxOCwgMHgwMDAwMDUwYSwKKwkweDAxYSwgMHgwMDAwMGY4MCwKKwkweDAxYiwgMHgwMDAwMGY1ZSwKKwkweDAxYywgMHgwMDAwMDAwOCwKKwkweDAxZCwgMHgwMDAwMDYwNywKKwkweDAxZSwgMHgwMDAwMDZjYywKKwkweDAxZiwgMHgwMDAwMDAwMCwKKwkweDAyMCwgMHgwMDAwMDFhNSwKKwkweDAxZiwgMHgwMDAwMDAwMSwKKwkweDAyMCwgMHgwMDAwMDE2NSwKKwkweDAxZiwgMHgwMDAwMDAwMiwKKwkweDAyMCwgMHgwMDAwMDBjNiwKKwkweDAxZiwgMHgwMDAwMDAwMywKKwkweDAyMCwgMHgwMDAwMDA4NiwKKwkweDAxZiwgMHgwMDAwMDAwNCwKKwkweDAyMCwgMHgwMDAwMDA0NiwKKwkweDAxZiwgMHgwMDAwMDAwNSwKKwkweDAyMCwgMHgwMDAwMDFlNiwKKwkweDAxZiwgMHgwMDAwMDAwNiwKKwkweDAyMCwgMHgwMDAwMDFhNiwKKwkweDAxZiwgMHgwMDAwMDAwNywKKwkweDAyMCwgMHgwMDAwMDE2NiwKKwkweDAxZiwgMHgwMDAwMDAwOCwKKwkweDAyMCwgMHgwMDAwMDBjNywKKwkweDAxZiwgMHgwMDAwMDAwOSwKKwkweDAyMCwgMHgwMDAwMDA4NywKKwkweDAxZiwgMHgwMDAwMDAwYSwKKwkweDAyMCwgMHgwMDAwMDBmNywKKwkweDAxZiwgMHgwMDAwMDAwYiwKKwkweDAyMCwgMHgwMDAwMDBkNywKKwkweDAxZiwgMHgwMDAwMDAwYywKKwkweDAyMCwgMHgwMDAwMDBiNywKKwkweDAxZiwgMHgwMDAwMDAwZCwKKwkweDAyMCwgMHgwMDAwMDA5NywKKwkweDAxZiwgMHgwMDAwMDAwZSwKKwkweDAyMCwgMHgwMDAwMDA3NywKKwkweDAxZiwgMHgwMDAwMDAwZiwKKwkweDAyMCwgMHgwMDAwMDA1NywKKwkweDAxZiwgMHgwMDAwMDAxMCwKKwkweDAyMCwgMHgwMDAwMDAzNywKKwkweDAxZiwgMHgwMDAwMDAxMSwKKwkweDAyMCwgMHgwMDAwMDBmYiwKKwkweDAxZiwgMHgwMDAwMDAxMiwKKwkweDAyMCwgMHgwMDAwMDBkYiwKKwkweDAxZiwgMHgwMDAwMDAxMywKKwkweDAyMCwgMHgwMDAwMDBiYiwKKwkweDAxZiwgMHgwMDAwMDAxNCwKKwkweDAyMCwgMHgwMDAwMDBmZiwKKwkweDAxZiwgMHgwMDAwMDAxNSwKKwkweDAyMCwgMHgwMDAwMDBlMywKKwkweDAxZiwgMHgwMDAwMDAxNiwKKwkweDAyMCwgMHgwMDAwMDBjMywKKwkweDAxZiwgMHgwMDAwMDAxNywKKwkweDAyMCwgMHgwMDAwMDBhMywKKwkweDAxZiwgMHgwMDAwMDAxOCwKKwkweDAyMCwgMHgwMDAwMDA4MywKKwkweDAxZiwgMHgwMDAwMDAxOSwKKwkweDAyMCwgMHgwMDAwMDA2MywKKwkweDAxZiwgMHgwMDAwMDAxYSwKKwkweDAyMCwgMHgwMDAwMDA0MywKKwkweDAxZiwgMHgwMDAwMDAxYiwKKwkweDAyMCwgMHgwMDAwMDAyMywKKwkweDAxZiwgMHgwMDAwMDAxYywKKwkweDAyMCwgMHgwMDAwMDAwMywKKwkweDAxZiwgMHgwMDAwMDAxZCwKKwkweDAyMCwgMHgwMDAwMDFlMywKKwkweDAxZiwgMHgwMDAwMDAxZSwKKwkweDAyMCwgMHgwMDAwMDFjMywKKwkweDAxZiwgMHgwMDAwMDAxZiwKKwkweDAyMCwgMHgwMDAwMDFhMywKKwkweDAxZiwgMHgwMDAwMDAyMCwKKwkweDAyMCwgMHgwMDAwMDE4MywKKwkweDAxZiwgMHgwMDAwMDAyMSwKKwkweDAyMCwgMHgwMDAwMDE2MywKKwkweDAxZiwgMHgwMDAwMDAyMiwKKwkweDAyMCwgMHgwMDAwMDE0MywKKwkweDAxZiwgMHgwMDAwMDAyMywKKwkweDAyMCwgMHgwMDAwMDEyMywKKwkweDAxZiwgMHgwMDAwMDAyNCwKKwkweDAyMCwgMHgwMDAwMDEwMywKKwkweDAyMywgMHgwMDAwMDIwMywKKwkweDAyNCwgMHgwMDAwMDIwMCwKKwkweDAwYiwgMHgwMDAwMDFiYSwKKwkweDAyYywgMHgwMDAwMDNkNywKKwkweDAyZCwgMHgwMDAwMGZmMCwKKwkweDAwMCwgMHgwMDAwMDAzNywKKwkweDAwNCwgMHgwMDAwMDE2MCwKKwkweDAwNywgMHgwMDAwMDA4MCwKKwkweDAwMiwgMHgwMDAwMDg4ZCwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAxNiwgMHgwMDAwMDIwMCwKKwkweDAxNiwgMHgwMDAwMDM4MCwKKwkweDAxNiwgMHgwMDAwMDAyMCwKKwkweDAxNiwgMHgwMDAwMDFhMCwKKwkweDAwMCwgMHgwMDAwMDBiZiwKKwkweDAwZCwgMHgwMDAwMDAxZiwKKwkweDAwZCwgMHgwMDAwMGM5ZiwKKwkweDAwMiwgMHgwMDAwMDA0ZCwKKwkweDAwMCwgMHgwMDAwMGNiZiwKKwkweDAwNCwgMHgwMDAwMDk3NSwKKwkweDAwNywgMHgwMDAwMDcwMCwKIH07CiAKIHUzMiBSdGw4MTkyVXNiUmFkaW9CX0FycmF5W10gPSB7Ci0weDAxOSwweDAwMDAwMDAzLAotMHgwMDAsMHgwMDAwMDBiZiwKLTB4MDAxLDB4MDAwMDA2ZTAsCi0weDAwMiwweDAwMDAwMDRjLAotMHgwMDMsMHgwMDAwMDdmMSwKLTB4MDA0LDB4MDAwMDA5NzUsCi0weDAwNSwweDAwMDAwYzU4LAotMHgwMDYsMHgwMDAwMGFlNiwKLTB4MDA3LDB4MDAwMDAwY2EsCi0weDAwOCwweDAwMDAwZTFjLAotMHgwMDAsMHgwMDAwMDBiNywKLTB4MDBhLDB4MDAwMDA4NTAsCi0weDAwMCwweDAwMDAwMGJmLAotMHgwMGIsMHgwMDAwMDFiYSwKLTB4MDBjLDB4MDAwMDAyNDAsCi0weDAwZSwweDAwMDAwMDIwLAotMHgwMTUsMHgwMDAwMGY4MCwKLTB4MDE2LDB4MDAwMDAwMjAsCi0weDAxNywweDAwMDAwNTk3LAotMHgwMTgsMHgwMDAwMDUwYSwKLTB4MDFhLDB4MDAwMDBlMDAsCi0weDAxYiwweDAwMDAwZjVlLAotMHgwMWQsMHgwMDAwMDYwNywKLTB4MDFlLDB4MDAwMDA2Y2MsCi0weDAwYiwweDAwMDAwMWJhLAotMHgwMjMsMHgwMDAwMDIwMywKLTB4MDI0LDB4MDAwMDAyMDAsCi0weDAwMCwweDAwMDAwMDM3LAotMHgwMDQsMHgwMDAwMDE2MCwKLTB4MDE2LDB4MDAwMDAyMDAsCi0weDAxNiwweDAwMDAwMzgwLAotMHgwMTYsMHgwMDAwMDAyMCwKLTB4MDE2LDB4MDAwMDAxYTAsCi0weDAwZCwweDAwMDAwY2NjLAotMHgwMDAsMHgwMDAwMDBiZiwKLTB4MDAyLDB4MDAwMDAwNGQsCi0weDAwMCwweDAwMDAwY2JmLAotMHgwMDQsMHgwMDAwMDk3NSwKLTB4MDA3LDB4MDAwMDA3MDAsCisJMHgwMTksIDB4MDAwMDAwMDMsCisJMHgwMDAsIDB4MDAwMDAwYmYsCisJMHgwMDEsIDB4MDAwMDA2ZTAsCisJMHgwMDIsIDB4MDAwMDAwNGMsCisJMHgwMDMsIDB4MDAwMDA3ZjEsCisJMHgwMDQsIDB4MDAwMDA5NzUsCisJMHgwMDUsIDB4MDAwMDBjNTgsCisJMHgwMDYsIDB4MDAwMDBhZTYsCisJMHgwMDcsIDB4MDAwMDAwY2EsCisJMHgwMDgsIDB4MDAwMDBlMWMsCisJMHgwMDAsIDB4MDAwMDAwYjcsCisJMHgwMGEsIDB4MDAwMDA4NTAsCisJMHgwMDAsIDB4MDAwMDAwYmYsCisJMHgwMGIsIDB4MDAwMDAxYmEsCisJMHgwMGMsIDB4MDAwMDAyNDAsCisJMHgwMGUsIDB4MDAwMDAwMjAsCisJMHgwMTUsIDB4MDAwMDBmODAsCisJMHgwMTYsIDB4MDAwMDAwMjAsCisJMHgwMTcsIDB4MDAwMDA1OTcsCisJMHgwMTgsIDB4MDAwMDA1MGEsCisJMHgwMWEsIDB4MDAwMDBlMDAsCisJMHgwMWIsIDB4MDAwMDBmNWUsCisJMHgwMWQsIDB4MDAwMDA2MDcsCisJMHgwMWUsIDB4MDAwMDA2Y2MsCisJMHgwMGIsIDB4MDAwMDAxYmEsCisJMHgwMjMsIDB4MDAwMDAyMDMsCisJMHgwMjQsIDB4MDAwMDAyMDAsCisJMHgwMDAsIDB4MDAwMDAwMzcsCisJMHgwMDQsIDB4MDAwMDAxNjAsCisJMHgwMTYsIDB4MDAwMDAyMDAsCisJMHgwMTYsIDB4MDAwMDAzODAsCisJMHgwMTYsIDB4MDAwMDAwMjAsCisJMHgwMTYsIDB4MDAwMDAxYTAsCisJMHgwMGQsIDB4MDAwMDBjY2MsCisJMHgwMDAsIDB4MDAwMDAwYmYsCisJMHgwMDIsIDB4MDAwMDAwNGQsCisJMHgwMDAsIDB4MDAwMDBjYmYsCisJMHgwMDQsIDB4MDAwMDA5NzUsCisJMHgwMDcsIDB4MDAwMDA3MDAsCiB9OwogCiB1MzIgUnRsODE5MlVzYlJhZGlvQ19BcnJheVtdID0gewotMHgwLCB9OworCTB4MCwgfTsKIAogdTMyIFJ0bDgxOTJVc2JSYWRpb0RfQXJyYXlbXSA9IHsKLTB4MCwgfTsKKwkweDAsIH07CiAKIHUzMiBSdGw4MTkyVXNiTUFDUEhZX0FycmF5W10gPSB7Ci0weDAzYywweGZmZmYwMDAwLDB4MDAwMDBmMGYsCi0weDM0MCwweGZmZmZmZmZmLDB4MTYxYTFhMWEsCi0weDM0NCwweGZmZmZmZmZmLDB4MTIxMjE0MTYsCi0weDM0OCwweDAwMDBmZmZmLDB4MDAwMDE4MTgsCi0weDEyYywweGZmZmZmZmZmLDB4MDQwMDA4MDIsCi0weDMxOCwweDAwMDAwZmZmLDB4MDAwMDAxMDAsCisJMHgwM2MsIDB4ZmZmZjAwMDAsIDB4MDAwMDBmMGYsCisJMHgzNDAsIDB4ZmZmZmZmZmYsIDB4MTYxYTFhMWEsCisJMHgzNDQsIDB4ZmZmZmZmZmYsIDB4MTIxMjE0MTYsCisJMHgzNDgsIDB4MDAwMGZmZmYsIDB4MDAwMDE4MTgsCisJMHgxMmMsIDB4ZmZmZmZmZmYsIDB4MDQwMDA4MDIsCisJMHgzMTgsIDB4MDAwMDBmZmYsIDB4MDAwMDAxMDAsCiB9OwogCiB1MzIgUnRsODE5MlVzYk1BQ1BIWV9BcnJheV9QR1tdID0gewotMHgwM2MsMHhmZmZmMDAwMCwweDAwMDAwZjBmLAotMHhlMDAsMHhmZmZmZmZmZiwweDA2MDkwOTA5LAotMHhlMDQsMHhmZmZmZmZmZiwweDAwMDMwMzA2LAotMHhlMDgsMHgwMDAwZmYwMCwweDAwMDAwMDAwLAotMHhlMTAsMHhmZmZmZmZmZiwweDBhMGMwZDBmLAotMHhlMTQsMHhmZmZmZmZmZiwweDA2MDcwODA5LAotMHhlMTgsMHhmZmZmZmZmZiwweDBhMGMwZDBmLAotMHhlMWMsMHhmZmZmZmZmZiwweDA2MDcwODA5LAotMHgxMmMsMHhmZmZmZmZmZiwweDA0MDAwODAyLAotMHgzMTgsMHgwMDAwMGZmZiwweDAwMDAwODAwLAorCTB4MDNjLCAweGZmZmYwMDAwLCAweDAwMDAwZjBmLAorCTB4ZTAwLCAweGZmZmZmZmZmLCAweDA2MDkwOTA5LAorCTB4ZTA0LCAweGZmZmZmZmZmLCAweDAwMDMwMzA2LAorCTB4ZTA4LCAweDAwMDBmZjAwLCAweDAwMDAwMDAwLAorCTB4ZTEwLCAweGZmZmZmZmZmLCAweDBhMGMwZDBmLAorCTB4ZTE0LCAweGZmZmZmZmZmLCAweDA2MDcwODA5LAorCTB4ZTE4LCAweGZmZmZmZmZmLCAweDBhMGMwZDBmLAorCTB4ZTFjLCAweGZmZmZmZmZmLCAweDA2MDcwODA5LAorCTB4MTJjLCAweGZmZmZmZmZmLCAweDA0MDAwODAyLAorCTB4MzE4LCAweDAwMDAwZmZmLCAweDAwMDAwODAwLAogfTsKIAogdTMyIFJ0bDgxOTJVc2JBR0NUQUJfQXJyYXlbXSA9IHsKLTB4Yzc4LDB4N2QwMDAwMDEsCi0weGM3OCwweDdkMDEwMDAxLAotMHhjNzgsMHg3ZDAyMDAwMSwKLTB4Yzc4LDB4N2QwMzAwMDEsCi0weGM3OCwweDdkMDQwMDAxLAotMHhjNzgsMHg3ZDA1MDAwMSwKLTB4Yzc4LDB4N2MwNjAwMDEsCi0weGM3OCwweDdiMDcwMDAxLAotMHhjNzgsMHg3YTA4MDAwMSwKLTB4Yzc4LDB4NzkwOTAwMDEsCi0weGM3OCwweDc4MGEwMDAxLAotMHhjNzgsMHg3NzBiMDAwMSwKLTB4Yzc4LDB4NzYwYzAwMDEsCi0weGM3OCwweDc1MGQwMDAxLAotMHhjNzgsMHg3NDBlMDAwMSwKLTB4Yzc4LDB4NzMwZjAwMDEsCi0weGM3OCwweDcyMTAwMDAxLAotMHhjNzgsMHg3MTExMDAwMSwKLTB4Yzc4LDB4NzAxMjAwMDEsCi0weGM3OCwweDZmMTMwMDAxLAotMHhjNzgsMHg2ZTE0MDAwMSwKLTB4Yzc4LDB4NmQxNTAwMDEsCi0weGM3OCwweDZjMTYwMDAxLAotMHhjNzgsMHg2YjE3MDAwMSwKLTB4Yzc4LDB4NmExODAwMDEsCi0weGM3OCwweDY5MTkwMDAxLAotMHhjNzgsMHg2ODFhMDAwMSwKLTB4Yzc4LDB4NjcxYjAwMDEsCi0weGM3OCwweDY2MWMwMDAxLAotMHhjNzgsMHg2NTFkMDAwMSwKLTB4Yzc4LDB4NjQxZTAwMDEsCi0weGM3OCwweDQ5MWYwMDAxLAotMHhjNzgsMHg0ODIwMDAwMSwKLTB4Yzc4LDB4NDcyMTAwMDEsCi0weGM3OCwweDQ2MjIwMDAxLAotMHhjNzgsMHg0NTIzMDAwMSwKLTB4Yzc4LDB4NDQyNDAwMDEsCi0weGM3OCwweDQzMjUwMDAxLAotMHhjNzgsMHgyODI2MDAwMSwKLTB4Yzc4LDB4MjcyNzAwMDEsCi0weGM3OCwweDI2MjgwMDAxLAotMHhjNzgsMHgyNTI5MDAwMSwKLTB4Yzc4LDB4MjQyYTAwMDEsCi0weGM3OCwweDIzMmIwMDAxLAotMHhjNzgsMHgyMjJjMDAwMSwKLTB4Yzc4LDB4MjEyZDAwMDEsCi0weGM3OCwweDIwMmUwMDAxLAotMHhjNzgsMHgwYTJmMDAwMSwKLTB4Yzc4LDB4MDgzMDAwMDEsCi0weGM3OCwweDA2MzEwMDAxLAotMHhjNzgsMHgwNTMyMDAwMSwKLTB4Yzc4LDB4MDQzMzAwMDEsCi0weGM3OCwweDAzMzQwMDAxLAotMHhjNzgsMHgwMjM1MDAwMSwKLTB4Yzc4LDB4MDEzNjAwMDEsCi0weGM3OCwweDAwMzcwMDAxLAotMHhjNzgsMHgwMDM4MDAwMSwKLTB4Yzc4LDB4MDAzOTAwMDEsCi0weGM3OCwweDAwM2EwMDAxLAotMHhjNzgsMHgwMDNiMDAwMSwKLTB4Yzc4LDB4MDAzYzAwMDEsCi0weGM3OCwweDAwM2QwMDAxLAotMHhjNzgsMHgwMDNlMDAwMSwKLTB4Yzc4LDB4MDAzZjAwMDEsCi0weGM3OCwweDdkNDAwMDAxLAotMHhjNzgsMHg3ZDQxMDAwMSwKLTB4Yzc4LDB4N2Q0MjAwMDEsCi0weGM3OCwweDdkNDMwMDAxLAotMHhjNzgsMHg3ZDQ0MDAwMSwKLTB4Yzc4LDB4N2Q0NTAwMDEsCi0weGM3OCwweDdjNDYwMDAxLAotMHhjNzgsMHg3YjQ3MDAwMSwKLTB4Yzc4LDB4N2E0ODAwMDEsCi0weGM3OCwweDc5NDkwMDAxLAotMHhjNzgsMHg3ODRhMDAwMSwKLTB4Yzc4LDB4Nzc0YjAwMDEsCi0weGM3OCwweDc2NGMwMDAxLAotMHhjNzgsMHg3NTRkMDAwMSwKLTB4Yzc4LDB4NzQ0ZTAwMDEsCi0weGM3OCwweDczNGYwMDAxLAotMHhjNzgsMHg3MjUwMDAwMSwKLTB4Yzc4LDB4NzE1MTAwMDEsCi0weGM3OCwweDcwNTIwMDAxLAotMHhjNzgsMHg2ZjUzMDAwMSwKLTB4Yzc4LDB4NmU1NDAwMDEsCi0weGM3OCwweDZkNTUwMDAxLAotMHhjNzgsMHg2YzU2MDAwMSwKLTB4Yzc4LDB4NmI1NzAwMDEsCi0weGM3OCwweDZhNTgwMDAxLAotMHhjNzgsMHg2OTU5MDAwMSwKLTB4Yzc4LDB4Njg1YTAwMDEsCi0weGM3OCwweDY3NWIwMDAxLAotMHhjNzgsMHg2NjVjMDAwMSwKLTB4Yzc4LDB4NjU1ZDAwMDEsCi0weGM3OCwweDY0NWUwMDAxLAotMHhjNzgsMHg0OTVmMDAwMSwKLTB4Yzc4LDB4NDg2MDAwMDEsCi0weGM3OCwweDQ3NjEwMDAxLAotMHhjNzgsMHg0NjYyMDAwMSwKLTB4Yzc4LDB4NDU2MzAwMDEsCi0weGM3OCwweDQ0NjQwMDAxLAotMHhjNzgsMHg0MzY1MDAwMSwKLTB4Yzc4LDB4Mjg2NjAwMDEsCi0weGM3OCwweDI3NjcwMDAxLAotMHhjNzgsMHgyNjY4MDAwMSwKLTB4Yzc4LDB4MjU2OTAwMDEsCi0weGM3OCwweDI0NmEwMDAxLAotMHhjNzgsMHgyMzZiMDAwMSwKLTB4Yzc4LDB4MjI2YzAwMDEsCi0weGM3OCwweDIxNmQwMDAxLAotMHhjNzgsMHgyMDZlMDAwMSwKLTB4Yzc4LDB4MGE2ZjAwMDEsCi0weGM3OCwweDA4NzAwMDAxLAotMHhjNzgsMHgwNjcxMDAwMSwKLTB4Yzc4LDB4MDU3MjAwMDEsCi0weGM3OCwweDA0NzMwMDAxLAotMHhjNzgsMHgwMzc0MDAwMSwKLTB4Yzc4LDB4MDI3NTAwMDEsCi0weGM3OCwweDAxNzYwMDAxLAotMHhjNzgsMHgwMDc3MDAwMSwKLTB4Yzc4LDB4MDA3ODAwMDEsCi0weGM3OCwweDAwNzkwMDAxLAotMHhjNzgsMHgwMDdhMDAwMSwKLTB4Yzc4LDB4MDA3YjAwMDEsCi0weGM3OCwweDAwN2MwMDAxLAotMHhjNzgsMHgwMDdkMDAwMSwKLTB4Yzc4LDB4MDA3ZTAwMDEsCi0weGM3OCwweDAwN2YwMDAxLAotMHhjNzgsMHgyZTAwMDAxZSwKLTB4Yzc4LDB4MmUwMTAwMWUsCi0weGM3OCwweDJlMDIwMDFlLAotMHhjNzgsMHgyZTAzMDAxZSwKLTB4Yzc4LDB4MmUwNDAwMWUsCi0weGM3OCwweDJlMDUwMDFlLAotMHhjNzgsMHgzMDA2MDAxZSwKLTB4Yzc4LDB4MzQwNzAwMWUsCi0weGM3OCwweDM5MDgwMDFlLAotMHhjNzgsMHgzYzA5MDAxZSwKLTB4Yzc4LDB4M2YwYTAwMWUsCi0weGM3OCwweDQyMGIwMDFlLAotMHhjNzgsMHg0NDBjMDAxZSwKLTB4Yzc4LDB4NDUwZDAwMWUsCi0weGM3OCwweDQ2MGUwMDFlLAotMHhjNzgsMHg0NjBmMDAxZSwKLTB4Yzc4LDB4NDcxMDAwMWUsCi0weGM3OCwweDQ4MTEwMDFlLAotMHhjNzgsMHg0OTEyMDAxZSwKLTB4Yzc4LDB4NGExMzAwMWUsCi0weGM3OCwweDRiMTQwMDFlLAotMHhjNzgsMHg0YjE1MDAxZSwKLTB4Yzc4LDB4NGMxNjAwMWUsCi0weGM3OCwweDRkMTcwMDFlLAotMHhjNzgsMHg0ZTE4MDAxZSwKLTB4Yzc4LDB4NGYxOTAwMWUsCi0weGM3OCwweDRmMWEwMDFlLAotMHhjNzgsMHg1MDFiMDAxZSwKLTB4Yzc4LDB4NTExYzAwMWUsCi0weGM3OCwweDUyMWQwMDFlLAotMHhjNzgsMHg1MjFlMDAxZSwKLTB4Yzc4LDB4NTMxZjAwMWUsCi0weGM3OCwweDUzMjAwMDFlLAotMHhjNzgsMHg1NDIxMDAxZSwKLTB4Yzc4LDB4NTUyMjAwMWUsCi0weGM3OCwweDU1MjMwMDFlLAotMHhjNzgsMHg1NjI0MDAxZSwKLTB4Yzc4LDB4NTcyNTAwMWUsCi0weGM3OCwweDU3MjYwMDFlLAotMHhjNzgsMHg1ODI3MDAxZSwKLTB4Yzc4LDB4NTgyODAwMWUsCi0weGM3OCwweDU5MjkwMDFlLAotMHhjNzgsMHg1OTJhMDAxZSwKLTB4Yzc4LDB4NWEyYjAwMWUsCi0weGM3OCwweDViMmMwMDFlLAotMHhjNzgsMHg1YzJkMDAxZSwKLTB4Yzc4LDB4NWMyZTAwMWUsCi0weGM3OCwweDVkMmYwMDFlLAotMHhjNzgsMHg1ZTMwMDAxZSwKLTB4Yzc4LDB4NWYzMTAwMWUsCi0weGM3OCwweDYwMzIwMDFlLAotMHhjNzgsMHg2MDMzMDAxZSwKLTB4Yzc4LDB4NjEzNDAwMWUsCi0weGM3OCwweDYyMzUwMDFlLAotMHhjNzgsMHg2MzM2MDAxZSwKLTB4Yzc4LDB4NjQzNzAwMWUsCi0weGM3OCwweDY0MzgwMDFlLAotMHhjNzgsMHg2NTM5MDAxZSwKLTB4Yzc4LDB4NjYzYTAwMWUsCi0weGM3OCwweDY3M2IwMDFlLAotMHhjNzgsMHg2NzNjMDAxZSwKLTB4Yzc4LDB4NjgzZDAwMWUsCi0weGM3OCwweDY5M2UwMDFlLAotMHhjNzgsMHg2YTNmMDAxZSwKKwkweGM3OCwgMHg3ZDAwMDAwMSwKKwkweGM3OCwgMHg3ZDAxMDAwMSwKKwkweGM3OCwgMHg3ZDAyMDAwMSwKKwkweGM3OCwgMHg3ZDAzMDAwMSwKKwkweGM3OCwgMHg3ZDA0MDAwMSwKKwkweGM3OCwgMHg3ZDA1MDAwMSwKKwkweGM3OCwgMHg3YzA2MDAwMSwKKwkweGM3OCwgMHg3YjA3MDAwMSwKKwkweGM3OCwgMHg3YTA4MDAwMSwKKwkweGM3OCwgMHg3OTA5MDAwMSwKKwkweGM3OCwgMHg3ODBhMDAwMSwKKwkweGM3OCwgMHg3NzBiMDAwMSwKKwkweGM3OCwgMHg3NjBjMDAwMSwKKwkweGM3OCwgMHg3NTBkMDAwMSwKKwkweGM3OCwgMHg3NDBlMDAwMSwKKwkweGM3OCwgMHg3MzBmMDAwMSwKKwkweGM3OCwgMHg3MjEwMDAwMSwKKwkweGM3OCwgMHg3MTExMDAwMSwKKwkweGM3OCwgMHg3MDEyMDAwMSwKKwkweGM3OCwgMHg2ZjEzMDAwMSwKKwkweGM3OCwgMHg2ZTE0MDAwMSwKKwkweGM3OCwgMHg2ZDE1MDAwMSwKKwkweGM3OCwgMHg2YzE2MDAwMSwKKwkweGM3OCwgMHg2YjE3MDAwMSwKKwkweGM3OCwgMHg2YTE4MDAwMSwKKwkweGM3OCwgMHg2OTE5MDAwMSwKKwkweGM3OCwgMHg2ODFhMDAwMSwKKwkweGM3OCwgMHg2NzFiMDAwMSwKKwkweGM3OCwgMHg2NjFjMDAwMSwKKwkweGM3OCwgMHg2NTFkMDAwMSwKKwkweGM3OCwgMHg2NDFlMDAwMSwKKwkweGM3OCwgMHg0OTFmMDAwMSwKKwkweGM3OCwgMHg0ODIwMDAwMSwKKwkweGM3OCwgMHg0NzIxMDAwMSwKKwkweGM3OCwgMHg0NjIyMDAwMSwKKwkweGM3OCwgMHg0NTIzMDAwMSwKKwkweGM3OCwgMHg0NDI0MDAwMSwKKwkweGM3OCwgMHg0MzI1MDAwMSwKKwkweGM3OCwgMHgyODI2MDAwMSwKKwkweGM3OCwgMHgyNzI3MDAwMSwKKwkweGM3OCwgMHgyNjI4MDAwMSwKKwkweGM3OCwgMHgyNTI5MDAwMSwKKwkweGM3OCwgMHgyNDJhMDAwMSwKKwkweGM3OCwgMHgyMzJiMDAwMSwKKwkweGM3OCwgMHgyMjJjMDAwMSwKKwkweGM3OCwgMHgyMTJkMDAwMSwKKwkweGM3OCwgMHgyMDJlMDAwMSwKKwkweGM3OCwgMHgwYTJmMDAwMSwKKwkweGM3OCwgMHgwODMwMDAwMSwKKwkweGM3OCwgMHgwNjMxMDAwMSwKKwkweGM3OCwgMHgwNTMyMDAwMSwKKwkweGM3OCwgMHgwNDMzMDAwMSwKKwkweGM3OCwgMHgwMzM0MDAwMSwKKwkweGM3OCwgMHgwMjM1MDAwMSwKKwkweGM3OCwgMHgwMTM2MDAwMSwKKwkweGM3OCwgMHgwMDM3MDAwMSwKKwkweGM3OCwgMHgwMDM4MDAwMSwKKwkweGM3OCwgMHgwMDM5MDAwMSwKKwkweGM3OCwgMHgwMDNhMDAwMSwKKwkweGM3OCwgMHgwMDNiMDAwMSwKKwkweGM3OCwgMHgwMDNjMDAwMSwKKwkweGM3OCwgMHgwMDNkMDAwMSwKKwkweGM3OCwgMHgwMDNlMDAwMSwKKwkweGM3OCwgMHgwMDNmMDAwMSwKKwkweGM3OCwgMHg3ZDQwMDAwMSwKKwkweGM3OCwgMHg3ZDQxMDAwMSwKKwkweGM3OCwgMHg3ZDQyMDAwMSwKKwkweGM3OCwgMHg3ZDQzMDAwMSwKKwkweGM3OCwgMHg3ZDQ0MDAwMSwKKwkweGM3OCwgMHg3ZDQ1MDAwMSwKKwkweGM3OCwgMHg3YzQ2MDAwMSwKKwkweGM3OCwgMHg3YjQ3MDAwMSwKKwkweGM3OCwgMHg3YTQ4MDAwMSwKKwkweGM3OCwgMHg3OTQ5MDAwMSwKKwkweGM3OCwgMHg3ODRhMDAwMSwKKwkweGM3OCwgMHg3NzRiMDAwMSwKKwkweGM3OCwgMHg3NjRjMDAwMSwKKwkweGM3OCwgMHg3NTRkMDAwMSwKKwkweGM3OCwgMHg3NDRlMDAwMSwKKwkweGM3OCwgMHg3MzRmMDAwMSwKKwkweGM3OCwgMHg3MjUwMDAwMSwKKwkweGM3OCwgMHg3MTUxMDAwMSwKKwkweGM3OCwgMHg3MDUyMDAwMSwKKwkweGM3OCwgMHg2ZjUzMDAwMSwKKwkweGM3OCwgMHg2ZTU0MDAwMSwKKwkweGM3OCwgMHg2ZDU1MDAwMSwKKwkweGM3OCwgMHg2YzU2MDAwMSwKKwkweGM3OCwgMHg2YjU3MDAwMSwKKwkweGM3OCwgMHg2YTU4MDAwMSwKKwkweGM3OCwgMHg2OTU5MDAwMSwKKwkweGM3OCwgMHg2ODVhMDAwMSwKKwkweGM3OCwgMHg2NzViMDAwMSwKKwkweGM3OCwgMHg2NjVjMDAwMSwKKwkweGM3OCwgMHg2NTVkMDAwMSwKKwkweGM3OCwgMHg2NDVlMDAwMSwKKwkweGM3OCwgMHg0OTVmMDAwMSwKKwkweGM3OCwgMHg0ODYwMDAwMSwKKwkweGM3OCwgMHg0NzYxMDAwMSwKKwkweGM3OCwgMHg0NjYyMDAwMSwKKwkweGM3OCwgMHg0NTYzMDAwMSwKKwkweGM3OCwgMHg0NDY0MDAwMSwKKwkweGM3OCwgMHg0MzY1MDAwMSwKKwkweGM3OCwgMHgyODY2MDAwMSwKKwkweGM3OCwgMHgyNzY3MDAwMSwKKwkweGM3OCwgMHgyNjY4MDAwMSwKKwkweGM3OCwgMHgyNTY5MDAwMSwKKwkweGM3OCwgMHgyNDZhMDAwMSwKKwkweGM3OCwgMHgyMzZiMDAwMSwKKwkweGM3OCwgMHgyMjZjMDAwMSwKKwkweGM3OCwgMHgyMTZkMDAwMSwKKwkweGM3OCwgMHgyMDZlMDAwMSwKKwkweGM3OCwgMHgwYTZmMDAwMSwKKwkweGM3OCwgMHgwODcwMDAwMSwKKwkweGM3OCwgMHgwNjcxMDAwMSwKKwkweGM3OCwgMHgwNTcyMDAwMSwKKwkweGM3OCwgMHgwNDczMDAwMSwKKwkweGM3OCwgMHgwMzc0MDAwMSwKKwkweGM3OCwgMHgwMjc1MDAwMSwKKwkweGM3OCwgMHgwMTc2MDAwMSwKKwkweGM3OCwgMHgwMDc3MDAwMSwKKwkweGM3OCwgMHgwMDc4MDAwMSwKKwkweGM3OCwgMHgwMDc5MDAwMSwKKwkweGM3OCwgMHgwMDdhMDAwMSwKKwkweGM3OCwgMHgwMDdiMDAwMSwKKwkweGM3OCwgMHgwMDdjMDAwMSwKKwkweGM3OCwgMHgwMDdkMDAwMSwKKwkweGM3OCwgMHgwMDdlMDAwMSwKKwkweGM3OCwgMHgwMDdmMDAwMSwKKwkweGM3OCwgMHgyZTAwMDAxZSwKKwkweGM3OCwgMHgyZTAxMDAxZSwKKwkweGM3OCwgMHgyZTAyMDAxZSwKKwkweGM3OCwgMHgyZTAzMDAxZSwKKwkweGM3OCwgMHgyZTA0MDAxZSwKKwkweGM3OCwgMHgyZTA1MDAxZSwKKwkweGM3OCwgMHgzMDA2MDAxZSwKKwkweGM3OCwgMHgzNDA3MDAxZSwKKwkweGM3OCwgMHgzOTA4MDAxZSwKKwkweGM3OCwgMHgzYzA5MDAxZSwKKwkweGM3OCwgMHgzZjBhMDAxZSwKKwkweGM3OCwgMHg0MjBiMDAxZSwKKwkweGM3OCwgMHg0NDBjMDAxZSwKKwkweGM3OCwgMHg0NTBkMDAxZSwKKwkweGM3OCwgMHg0NjBlMDAxZSwKKwkweGM3OCwgMHg0NjBmMDAxZSwKKwkweGM3OCwgMHg0NzEwMDAxZSwKKwkweGM3OCwgMHg0ODExMDAxZSwKKwkweGM3OCwgMHg0OTEyMDAxZSwKKwkweGM3OCwgMHg0YTEzMDAxZSwKKwkweGM3OCwgMHg0YjE0MDAxZSwKKwkweGM3OCwgMHg0YjE1MDAxZSwKKwkweGM3OCwgMHg0YzE2MDAxZSwKKwkweGM3OCwgMHg0ZDE3MDAxZSwKKwkweGM3OCwgMHg0ZTE4MDAxZSwKKwkweGM3OCwgMHg0ZjE5MDAxZSwKKwkweGM3OCwgMHg0ZjFhMDAxZSwKKwkweGM3OCwgMHg1MDFiMDAxZSwKKwkweGM3OCwgMHg1MTFjMDAxZSwKKwkweGM3OCwgMHg1MjFkMDAxZSwKKwkweGM3OCwgMHg1MjFlMDAxZSwKKwkweGM3OCwgMHg1MzFmMDAxZSwKKwkweGM3OCwgMHg1MzIwMDAxZSwKKwkweGM3OCwgMHg1NDIxMDAxZSwKKwkweGM3OCwgMHg1NTIyMDAxZSwKKwkweGM3OCwgMHg1NTIzMDAxZSwKKwkweGM3OCwgMHg1NjI0MDAxZSwKKwkweGM3OCwgMHg1NzI1MDAxZSwKKwkweGM3OCwgMHg1NzI2MDAxZSwKKwkweGM3OCwgMHg1ODI3MDAxZSwKKwkweGM3OCwgMHg1ODI4MDAxZSwKKwkweGM3OCwgMHg1OTI5MDAxZSwKKwkweGM3OCwgMHg1OTJhMDAxZSwKKwkweGM3OCwgMHg1YTJiMDAxZSwKKwkweGM3OCwgMHg1YjJjMDAxZSwKKwkweGM3OCwgMHg1YzJkMDAxZSwKKwkweGM3OCwgMHg1YzJlMDAxZSwKKwkweGM3OCwgMHg1ZDJmMDAxZSwKKwkweGM3OCwgMHg1ZTMwMDAxZSwKKwkweGM3OCwgMHg1ZjMxMDAxZSwKKwkweGM3OCwgMHg2MDMyMDAxZSwKKwkweGM3OCwgMHg2MDMzMDAxZSwKKwkweGM3OCwgMHg2MTM0MDAxZSwKKwkweGM3OCwgMHg2MjM1MDAxZSwKKwkweGM3OCwgMHg2MzM2MDAxZSwKKwkweGM3OCwgMHg2NDM3MDAxZSwKKwkweGM3OCwgMHg2NDM4MDAxZSwKKwkweGM3OCwgMHg2NTM5MDAxZSwKKwkweGM3OCwgMHg2NjNhMDAxZSwKKwkweGM3OCwgMHg2NzNiMDAxZSwKKwkweGM3OCwgMHg2NzNjMDAxZSwKKwkweGM3OCwgMHg2ODNkMDAxZSwKKwkweGM3OCwgMHg2OTNlMDAxZSwKKwkweGM3OCwgMHg2YTNmMDAxZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9waHkuYwppbmRleCBiOWYzNTMxLi4wMjU1NGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfcGh5LmMKQEAgLTUwNCw5ICs1MDQsOCBAQAogCQlwZHdBcnJheSA9IHJ0bDgxOVhNQUNQSFlfQXJyYXk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBkd0FycmF5TGVuOyBpID0gaSszKSB7Ci0JCWlmIChwZHdBcnJheVtpXSA9PSAweDMxOCkgeworCQlpZiAocGR3QXJyYXlbaV0gPT0gMHgzMTgpCiAJCQlwZHdBcnJheVtpKzJdID0gMHgwMDAwMDgwMDsKLQkJfQogCiAJCVJUX1RSQUNFKENPTVBfREJHLAogCQkJICJSdGw4MTkwTUFDUEhZX0FycmF5WzBdPSV4IFJ0bDgxOTBNQUNQSFlfQXJyYXlbMV09JXggUnRsODE5ME1BQ1BIWV9BcnJheVsyXT0leFxuIiwKQEAgLTk5Miw3ICs5OTEsNiBAQAogewogCiAJaW50IGk7Ci0JdTggcmV0ID0gMDsKIAogCXN3aXRjaCAoZVJGUGF0aCkgewogCWNhc2UgUkY5MF9QQVRIX0E6CkBAIC0xMDU5LDcgKzEwNTcsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9oYWxfaW5pdC5jCmluZGV4IGQ4MDFjNWEuLjM2ZGU3ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCW1heGxlbiA9IChmd2hkci5pbWdfSU1FTV9zaXplID4gZndoZHIuaW1nX1NSQU1fc2l6ZSkgPwogCQkJICBmd2hkci5pbWdfSU1FTV9zaXplIDogZndoZHIuaW1nX1NSQU1fc2l6ZTsKIAkJbWF4bGVuICs9IHR4ZHNjcF9zejsKLQkJcHRtcGNoYXIgPSBfbWFsbG9jKG1heGxlbiArIEZXQlVGRl9BTElHTl9TWik7CisJCXB0bXBjaGFyID0ga21hbGxvYyhtYXhsZW4gKyBGV0JVRkZfQUxJR05fU1osIEdGUF9BVE9NSUMpOwogCQlpZiAocHRtcGNoYXIgPT0gTlVMTCkKIAkJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2llZWU4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaWVlZTgwMjExLmMKaW5kZXggNTdmZWY3MC4uZmU5NDU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaWVlZTgwMjExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaWVlZTgwMjExLmMKQEAgLTI4OSw3ICsyODksNyBAQAogaW50IHI4NzEyX3BhcnNlX3dwYV9pZSh1OCAqd3BhX2llLCBpbnQgd3BhX2llX2xlbiwgaW50ICpncm91cF9jaXBoZXIsCiAJCSBpbnQgKnBhaXJ3aXNlX2NpcGhlcikKIHsKLQlpbnQgaSwgcmV0ID0gX1NVQ0NFU1M7CisJaW50IGk7CiAJaW50IGxlZnQsIGNvdW50OwogCXU4ICpwb3M7CiAKQEAgLTMyNCwxMyArMzI0LDEzIEBACiAJCX0KIAl9IGVsc2UgaWYgKGxlZnQgPT0gMSkKIAkJcmV0dXJuIF9GQUlMOwotCXJldHVybiByZXQ7CisJcmV0dXJuIF9TVUNDRVNTOwogfQogCiBpbnQgcjg3MTJfcGFyc2Vfd3BhMl9pZSh1OCAqcnNuX2llLCBpbnQgcnNuX2llX2xlbiwgaW50ICpncm91cF9jaXBoZXIsCiAJCSAgaW50ICpwYWlyd2lzZV9jaXBoZXIpCiB7Ci0JaW50IGksIHJldCA9IF9TVUNDRVNTOworCWludCBpOwogCWludCBsZWZ0LCBjb3VudDsKIAl1OCAqcG9zOwogCkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJfQogCX0gZWxzZSBpZiAobGVmdCA9PSAxKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKIGludCByODcxMl9nZXRfc2VjX2llKHU4ICppbl9pZSwgdWludCBpbl9sZW4sIHU4ICpyc25faWUsIHUxNiAqcnNuX2xlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL21sbWVfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL21sbWVfbGludXguYwppbmRleCBmNTY5YTcwLi4zNzdlZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9tbG1lX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvbWxtZV9saW51eC5jCkBAIC0xNDcsMTAgKzE0Nyw5IEBACiAKIAlidWZmID0gTlVMTDsKIAlpZiAoYXV0aG1vZGUgPT0gX1dQQV9JRV9JRF8pIHsKLQkJYnVmZiA9IF9tYWxsb2MoSVdfQ1VTVE9NX01BWCk7CisJCWJ1ZmYgPSBremFsbG9jKElXX0NVU1RPTV9NQVgsIEdGUF9BVE9NSUMpOwogCQlpZiAoYnVmZiA9PSBOVUxMKQogCQkJcmV0dXJuOwotCQltZW1zZXQoYnVmZiwgMCwgSVdfQ1VTVE9NX01BWCk7CiAJCXAgPSBidWZmOwogCQlwICs9IHNwcmludGYocCwgIkFTU09DSU5GTyhSZXFJRXM9Iik7CiAJCWxlbiA9IHNlY19pZVsxXSArIDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9vc2RlcF9zZXJ2aWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9vc2RlcF9zZXJ2aWNlLmgKaW5kZXggNTY2MjM1YS4uMDllMTU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvb3NkZXBfc2VydmljZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL29zZGVwX3NlcnZpY2UuaApAQCAtMTY4LDExICsxNjgsNiBAQAogCQlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggKl9tYWxsb2ModTMyIHN6KQotewotCXJldHVybglrbWFsbG9jKHN6LCBHRlBfQVRPTUlDKTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF9jYW5jZWxfdGltZXJfZXgoc3RydWN0IHRpbWVyX2xpc3QgKnB0aW1lcikKIHsKIAlyZXR1cm4gZGVsX3RpbWVyKHB0aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9jbWQuYwppbmRleCAxYTRiN2E2Li44Y2E3ZDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfY21kLmMKQEAgLTI5MCw4ICsyOTAsNyBAQAogCiBzdGF0aWMgdTggY2hlY2tfY21kX2ZpZm8oc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwgdWludCBzeikKIHsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKLQlyZXR1cm4gcmVzOworCXJldHVybiBfU1VDQ0VTUzsKIH0KIAogdTggcjg3MTJfZndfY21kKHN0cnVjdCBfYWRhcHRlciAqcEFkYXB0ZXIsIHUzMiBjbWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX3JlY3YuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5jCmluZGV4IDA3MjNiMmYuLjFmNzAwMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5jCkBAIC01OCwxMiArNTgsMTAgQEAKIAogCS8qaW5pdCByZWN2X2J1ZiovCiAJX2luaXRfcXVldWUoJnByZWN2cHJpdi0+ZnJlZV9yZWN2X2J1Zl9xdWV1ZSk7Ci0JcHJlY3Zwcml2LT5wYWxsb2NhdGVkX3JlY3ZfYnVmID0gX21hbGxvYyhOUl9SRUNWQlVGRiAqCi0JCQkJCSBzaXplb2Yoc3RydWN0IHJlY3ZfYnVmKSArIDQpOworCXByZWN2cHJpdi0+cGFsbG9jYXRlZF9yZWN2X2J1ZiA9IGt6YWxsb2MoTlJfUkVDVkJVRkYgKiBzaXplb2Yoc3RydWN0IHJlY3ZfYnVmKSArIDQsCisJCQkJCQkgR0ZQX0FUT01JQyk7CiAJaWYgKHByZWN2cHJpdi0+cGFsbG9jYXRlZF9yZWN2X2J1ZiA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JbWVtc2V0KHByZWN2cHJpdi0+cGFsbG9jYXRlZF9yZWN2X2J1ZiwgMCwgTlJfUkVDVkJVRkYgKgotCQlzaXplb2Yoc3RydWN0IHJlY3ZfYnVmKSArIDQpOwogCXByZWN2cHJpdi0+cHJlY3ZfYnVmID0gcHJlY3Zwcml2LT5wYWxsb2NhdGVkX3JlY3ZfYnVmICsgNCAtCiAJCQkgICAgICAoKGFkZHJfdCkgKHByZWN2cHJpdi0+cGFsbG9jYXRlZF9yZWN2X2J1ZikgJiAzKTsKIAlwcmVjdmJ1ZiA9IChzdHJ1Y3QgcmVjdl9idWYgKilwcmVjdnByaXYtPnByZWN2X2J1ZjsKQEAgLTEyMyw4ICsxMjEsNiBAQAogCiBpbnQgcjg3MTJfaW5pdF9yZWN2YnVmKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYpCiB7Ci0JaW50IHJlcyA9IF9TVUNDRVNTOwotCiAJcHJlY3ZidWYtPnRyYW5zZmVyX2xlbiA9IDA7CiAJcHJlY3ZidWYtPmxlbiA9IDA7CiAJcHJlY3ZidWYtPnJlZl9jbnQgPSAwOwpAQCAtMTM0LDcgKzEzMCw3IEBACiAJCXByZWN2YnVmLT5wdGFpbCA9IHByZWN2YnVmLT5wYnVmOwogCQlwcmVjdmJ1Zi0+cGVuZCA9IHByZWN2YnVmLT5wZGF0YSArIE1BWF9SRUNWQlVGX1NaOwogCX0KLQlyZXR1cm4gcmVzOworCXJldHVybiBfU1VDQ0VTUzsKIH0KIAogaW50IHI4NzEyX2ZyZWVfcmVjdmZyYW1lKHVuaW9uIHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsCkBAIC0zNDcsNyArMzQzLDYgQEAKIAlfcGt0ICpzdWJfc2tiLCAqc3ViZnJhbWVzW01BWF9TVUJGUkFNRV9DT1VOVF07CiAJc3RydWN0IHJlY3ZfcHJpdiAqcHJlY3Zwcml2ID0gJnBhZGFwdGVyLT5yZWN2cHJpdjsKIAlzdHJ1Y3QgIF9fcXVldWUgKnBmcmVlX3JlY3ZfcXVldWUgPSAmKHByZWN2cHJpdi0+ZnJlZV9yZWN2X3F1ZXVlKTsKLQlpbnQJcmV0ID0gX1NVQ0NFU1M7CiAKIAlucl9zdWJmcmFtZXMgPSAwOwogCXBhdHRyaWIgPSAmcHJmcmFtZS0+dS5oZHIuYXR0cmliOwpAQCAtNDM1LDcgKzQzMCw3IEBACiBleGl0OgogCXByZnJhbWUtPnUuaGRyLmxlbiA9IDA7CiAJcjg3MTJfZnJlZV9yZWN2ZnJhbWUocHJmcmFtZSwgcGZyZWVfcmVjdl9xdWV1ZSk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKIHZvaWQgcjg3MTJfcnhjbWRfZXZlbnRfaGRsKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIsIHZvaWQgKnByeGNtZGJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5jCmluZGV4IGE2NzE4NWQuLjdhMjUyMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9jbWQuYwpAQCAtNjQsMTMgKzY0LDE0IEBACiAKIAkvKiBhbGxvY2F0ZSBETUEtYWJsZS9Ob24tUGFnZSBtZW1vcnkgZm9yIGNtZF9idWYgYW5kIHJzcF9idWYgKi8KIAlwY21kcHJpdi0+Y21kX3NlcSA9IDE7Ci0JcGNtZHByaXYtPmNtZF9hbGxvY2F0ZWRfYnVmID0gX21hbGxvYyhNQVhfQ01EU1ogKyBDTURCVUZGX0FMSUdOX1NaKTsKKwlwY21kcHJpdi0+Y21kX2FsbG9jYXRlZF9idWYgPSBrbWFsbG9jKE1BWF9DTURTWiArIENNREJVRkZfQUxJR05fU1osCisJCQkJCSAgICAgIEdGUF9BVE9NSUMpOwogCWlmIChwY21kcHJpdi0+Y21kX2FsbG9jYXRlZF9idWYgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwogCXBjbWRwcml2LT5jbWRfYnVmID0gcGNtZHByaXYtPmNtZF9hbGxvY2F0ZWRfYnVmICArICBDTURCVUZGX0FMSUdOX1NaIC0KIAkJCSAgICAoKGFkZHJfdCkocGNtZHByaXYtPmNtZF9hbGxvY2F0ZWRfYnVmKSAmCiAJCQkgICAgKENNREJVRkZfQUxJR05fU1otMSkpOwotCXBjbWRwcml2LT5yc3BfYWxsb2NhdGVkX2J1ZiA9IF9tYWxsb2MoTUFYX1JTUFNaICsgNCk7CisJcGNtZHByaXYtPnJzcF9hbGxvY2F0ZWRfYnVmID0ga21hbGxvYyhNQVhfUlNQU1ogKyA0LCBHRlBfQVRPTUlDKTsKIAlpZiAocGNtZHByaXYtPnJzcF9hbGxvY2F0ZWRfYnVmID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKIAlwY21kcHJpdi0+cnNwX2J1ZiA9IHBjbWRwcml2LT5yc3BfYWxsb2NhdGVkX2J1ZiAgKyAgNCAtCkBAIC04NSw3ICs4Niw3IEBACiB7CiAJLyogYWxsb2NhdGUgRE1BLWFibGUvTm9uLVBhZ2UgbWVtb3J5IGZvciBjbWRfYnVmIGFuZCByc3BfYnVmICovCiAJcGV2dHByaXYtPmV2ZW50X3NlcSA9IDA7Ci0JcGV2dHByaXYtPmV2dF9hbGxvY2F0ZWRfYnVmID0gX21hbGxvYyhNQVhfRVZUU1ogKyA0KTsKKwlwZXZ0cHJpdi0+ZXZ0X2FsbG9jYXRlZF9idWYgPSBrbWFsbG9jKE1BWF9FVlRTWiArIDQsIEdGUF9BVE9NSUMpOwogCiAJaWYgKHBldnRwcml2LT5ldnRfYWxsb2NhdGVkX2J1ZiA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7CkBAIC0yMjYsMTEgKzIyNywxMCBAQAogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAotCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBoMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKLQlwc3VydmV5UGFyYSA9IChzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtICopX21hbGxvYygKLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtKSk7CisJcHN1cnZleVBhcmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBzdXJ2ZXlQYXJhID09IE5VTEwpIHsKIAkJa2ZyZWUoKHVuc2lnbmVkIGNoYXIgKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTI1OSwxMSArMjU5LDExIEBACiAJc3RydWN0IHNldGRhdGFyYXRlX3Bhcm0JKnBic2V0ZGF0YXJhdGVwYXJhOwogCXN0cnVjdCBjbWRfcHJpdgkJKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCi0JcGgyYyA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGgyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXBic2V0ZGF0YXJhdGVwYXJhID0gKHN0cnVjdCBzZXRkYXRhcmF0ZV9wYXJtICopX21hbGxvYygKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzZXRkYXRhcmF0ZV9wYXJtKSk7CisJcGJzZXRkYXRhcmF0ZXBhcmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0ZGF0YXJhdGVfcGFybSksCisJCQkJICAgIEdGUF9BVE9NSUMpOwogCWlmIChwYnNldGRhdGFyYXRlcGFyYSA9PSBOVUxMKSB7CiAJCWtmcmVlKCh1OCAqKSBwaDJjKTsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtMjgyLDExICsyODIsMTEgQEAKIAlzdHJ1Y3QgU2V0Q2hhbm5lbFBsYW5fcGFyYW0gKnBzZXRjaHBsYW5wYXJhOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcHNldGNocGxhbnBhcmEgPSAoc3RydWN0IFNldENoYW5uZWxQbGFuX3BhcmFtICopCi0JCV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBTZXRDaGFubmVsUGxhbl9wYXJhbSkpOworCXBzZXRjaHBsYW5wYXJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IFNldENoYW5uZWxQbGFuX3BhcmFtKSwKKwkJCQkgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRjaHBsYW5wYXJhID09IE5VTEwpIHsKIAkJa2ZyZWUoKHU4ICopIHBoMmMpOwogCQlyZXR1cm4gX0ZBSUw7CkBAIC0zMDQsMTEgKzMwNCwxMSBAQAogCXN0cnVjdCBzZXRiYXNpY3JhdGVfcGFybSAqcHNzZXRiYXNpY3JhdGVwYXJhOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcHNzZXRiYXNpY3JhdGVwYXJhID0gKHN0cnVjdCBzZXRiYXNpY3JhdGVfcGFybSAqKV9tYWxsb2MoCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IHNldGJhc2ljcmF0ZV9wYXJtKSk7CisJcHNzZXRiYXNpY3JhdGVwYXJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNldGJhc2ljcmF0ZV9wYXJtKSwKKwkJCQkgICAgIEdGUF9BVE9NSUMpOwogCWlmIChwc3NldGJhc2ljcmF0ZXBhcmEgPT0gTlVMTCkgewogCQlrZnJlZSgodTggKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTMyNywxMSArMzI3LDEwIEBACiAJc3RydWN0IHdyaXRlUFRNX3Bhcm0JKnB3cml0ZXB0bXBhcm07CiAJc3RydWN0IGNtZF9wcml2CQkqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcHdyaXRlcHRtcGFybSA9IChzdHJ1Y3Qgd3JpdGVQVE1fcGFybSAqKQotCQlfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd3JpdGVQVE1fcGFybSkpOworCXB3cml0ZXB0bXBhcm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd3JpdGVQVE1fcGFybSksIEdGUF9BVE9NSUMpOwogCWlmIChwd3JpdGVwdG1wYXJtID09IE5VTEwpIHsKIAkJa2ZyZWUoKHU4ICopIHBoMmMpOwogCQlyZXR1cm4gX0ZBSUw7CkBAIC0zNDgsMTEgKzM0NywxMCBAQAogCXN0cnVjdCB3cml0ZVBUTV9wYXJtICpwd3JpdGVwdG1wYXJtOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcHdyaXRlcHRtcGFybSA9IChzdHJ1Y3Qgd3JpdGVQVE1fcGFybSAqKQotCQlfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0ZGlnX3Bhcm0pKTsKKwlwd3JpdGVwdG1wYXJtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdyaXRlUFRNX3Bhcm0pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHdyaXRlcHRtcGFybSA9PSBOVUxMKSB7CiAJCWtmcmVlKCh1OCAqKSBwaDJjKTsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtMzY5LDExICszNjcsMTAgQEAKIAlzdHJ1Y3Qgd3JpdGVQVE1fcGFybSAqcHdyaXRlcHRtcGFybTsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCi0JcGgyYyA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGgyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXB3cml0ZXB0bXBhcm0gPSAoc3RydWN0IHdyaXRlUFRNX3Bhcm0gKikKLQkJX21hbGxvYyhzaXplb2Yoc3RydWN0IHNldHJhX3Bhcm0pKTsKKwlwd3JpdGVwdG1wYXJtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdyaXRlUFRNX3Bhcm0pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHdyaXRlcHRtcGFybSA9PSBOVUxMKSB7CiAJCWtmcmVlKCh1OCAqKSBwaDJjKTsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtMzkwLDExICszODcsMTAgQEAKIAlzdHJ1Y3Qgd3JpdGVSRl9wYXJtICpwd3JpdGVyZnBhcm07CiAJc3RydWN0IGNtZF9wcml2CSpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKIAotCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBoMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKLQlwd3JpdGVyZnBhcm0gPSAoc3RydWN0IHdyaXRlUkZfcGFybSAqKV9tYWxsb2MoCi0JCQlzaXplb2Yoc3RydWN0IHdyaXRlUkZfcGFybSkpOworCXB3cml0ZXJmcGFybSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3cml0ZVJGX3Bhcm0pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHdyaXRlcmZwYXJtID09IE5VTEwpIHsKIAkJa2ZyZWUoKHU4ICopIHBoMmMpOwogCQlyZXR1cm4gX0ZBSUw7CkBAIC00MTIsMTAgKzQwOCwxMCBAQAogCXN0cnVjdCByZWFkUkZfcGFybSAqcHJkcmZwYXJtOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcHJkcmZwYXJtID0gKHN0cnVjdCByZWFkUkZfcGFybSAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWFkUkZfcGFybSkpOworCXByZHJmcGFybSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWFkUkZfcGFybSksIEdGUF9BVE9NSUMpOwogCWlmIChwcmRyZnBhcm0gPT0gTlVMTCkgewogCQlrZnJlZSgodTggKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTQ1Niw3ICs0NTIsNyBAQAogCQkJCSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5kZXZfbmV0d29yazsKIAogCXBhZGFwdGVyLT5sZWRwcml2LkxlZENvbnRyb2xIYW5kbGVyKHBhZGFwdGVyLCBMRURfQ1RMX1NUQVJUX1RPX0xJTkspOwotCXBjbWQgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBjbWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwY21kID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKIAlfaW5pdF9saXN0aGVhZCgmcGNtZC0+bGlzdCk7CkBAIC00OTAsNyArNDg2LDcgQEAKIAkJCQkJCW5ldHdvcmsuSW5mcmFzdHJ1Y3R1cmVNb2RlOwogCiAJcGFkYXB0ZXItPmxlZHByaXYuTGVkQ29udHJvbEhhbmRsZXIocGFkYXB0ZXIsIExFRF9DVExfU1RBUlRfVE9fTElOSyk7Ci0JcGNtZCA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGNtZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwogCXRfbGVuID0gc2l6ZW9mKHUzMikgKyA2ICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICsgMiArCkBAIC02MjgsMTEgKzYyNCwxMCBAQAogCXN0cnVjdCBkaXNjb25uZWN0X3Bhcm0gKnBkaXNjb25uZWN0OwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwZGlzY29ubmVjdF9jbWQgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBkaXNjb25uZWN0X2NtZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBkaXNjb25uZWN0X2NtZCA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcGRpc2Nvbm5lY3QgPSAoc3RydWN0IGRpc2Nvbm5lY3RfcGFybSAqKV9tYWxsb2MoCi0JCSAgICAgIHNpemVvZihzdHJ1Y3QgZGlzY29ubmVjdF9wYXJtKSk7CisJcGRpc2Nvbm5lY3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlzY29ubmVjdF9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBkaXNjb25uZWN0ID09IE5VTEwpIHsKIAkJa2ZyZWUoKHU4ICopcGRpc2Nvbm5lY3RfY21kKTsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtNjUxLDExICs2NDYsMTAgQEAKIAogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcHNldG9wID0gKHN0cnVjdCBzZXRvcG1vZGVfcGFybSAqKV9tYWxsb2MoCi0JCSAgc2l6ZW9mKHN0cnVjdCBzZXRvcG1vZGVfcGFybSkpOworCXBzZXRvcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXRvcG1vZGVfcGFybSksIEdGUF9BVE9NSUMpOwogCWlmIChwc2V0b3AgPT0gTlVMTCkgewogCQlrZnJlZSgodTggKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTY3NiwxNyArNjcwLDE1IEBACiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IChzdHJ1Y3Qgc3RhX2luZm8gKilwc3RhOwogCi0JcGgyYyA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGgyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXBzZXRzdGFrZXlfcGFyYSA9IChzdHJ1Y3Qgc2V0X3N0YWtleV9wYXJtICopX21hbGxvYygKLQkJCSAgc2l6ZW9mKHN0cnVjdCBzZXRfc3Rha2V5X3Bhcm0pKTsKKwlwc2V0c3Rha2V5X3BhcmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0X3N0YWtleV9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRzdGFrZXlfcGFyYSA9PSBOVUxMKSB7CiAJCWtmcmVlKCh1OCAqKSBwaDJjKTsKIAkJcmV0dXJuIF9GQUlMOwogCX0KLQlwc2V0c3Rha2V5X3JzcCA9IChzdHJ1Y3Qgc2V0X3N0YWtleV9yc3AgKilfbWFsbG9jKAotCQkJICBzaXplb2Yoc3RydWN0IHNldF9zdGFrZXlfcnNwKSk7CisJcHNldHN0YWtleV9yc3AgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0X3N0YWtleV9yc3ApLCBHRlBfQVRPTUlDKTsKIAlpZiAocHNldHN0YWtleV9yc3AgPT0gTlVMTCkgewogCQlrZnJlZSgodTggKikgcGgyYyk7CiAJCWtmcmVlKCh1OCAqKSBwc2V0c3Rha2V5X3BhcmEpOwpAQCAtNzE4LDExICs3MTAsMTAgQEAKIAlzdHJ1Y3Qgc2V0cmZpbnRmc19wYXJtICpwc2V0cmZpbnRmc3Bhcm07CiAJc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKIAotCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBoMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKLQlwc2V0cmZpbnRmc3Bhcm0gPSAoc3RydWN0IHNldHJmaW50ZnNfcGFybSAqKV9tYWxsb2MoCi0JCQkgICBzaXplb2Yoc3RydWN0IHNldHJmaW50ZnNfcGFybSkpOworCXBzZXRyZmludGZzcGFybSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXRyZmludGZzX3Bhcm0pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHNldHJmaW50ZnNwYXJtID09IE5VTEwpIHsKIAkJa2ZyZWUoKHVuc2lnbmVkIGNoYXIgKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTc0MSwxMSArNzMyLDEwIEBACiAJc3RydWN0IHNldHJhdGFibGVfcGFybSAqcHNldHJ0dGJscGFybTsKIAlzdHJ1Y3QgY21kX3ByaXYJKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCi0JcGgyYyA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGgyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXBzZXRydHRibHBhcm0gPSAoc3RydWN0IHNldHJhdGFibGVfcGFybSAqKV9tYWxsb2MoCi0JCQlzaXplb2Yoc3RydWN0IHNldHJhdGFibGVfcGFybSkpOworCXBzZXRydHRibHBhcm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0cmF0YWJsZV9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRydHRibHBhcm0gPT0gTlVMTCkgewogCQlrZnJlZSgodW5zaWduZWQgY2hhciAqKXBoMmMpOwogCQlyZXR1cm4gX0ZBSUw7CkBAIC03NjMsMTEgKzc1MywxMCBAQAogCXN0cnVjdCBjbWRfb2JqICpwaDJjOwogCXN0cnVjdCByZWFkVFNTSV9wYXJtICpwcmR0c3NpcGFybTsKIAotCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBoMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKLQlwcmR0c3NpcGFybSA9IChzdHJ1Y3QgcmVhZFRTU0lfcGFybSAqKQotCQlfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVhZFRTU0lfcGFybSkpOworCXByZHRzc2lwYXJtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlYWRUU1NJX3Bhcm0pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHJkdHNzaXBhcm0gPT0gTlVMTCkgewogCQlrZnJlZSgodW5zaWduZWQgY2hhciAqKSBwaDJjKTsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtNzkwLDExICs3NzksMTEgQEAKIAlzdHJ1Y3QgY21kX29iaiAqcGgyYzsKIAlzdHJ1Y3QgU2V0TWFjQWRkcl9wYXJhbQkqcHNldE1hY0FkZHJfcGFyYTsKIAotCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBoMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKLQlwc2V0TWFjQWRkcl9wYXJhID0gKHN0cnVjdCBTZXRNYWNBZGRyX3BhcmFtICopX21hbGxvYygKLQkJCSAgIHNpemVvZihzdHJ1Y3QgU2V0TWFjQWRkcl9wYXJhbSkpOworCXBzZXRNYWNBZGRyX3BhcmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgU2V0TWFjQWRkcl9wYXJhbSksCisJCQkJICAgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRNYWNBZGRyX3BhcmEgPT0gTlVMTCkgewogCQlrZnJlZSgodTggKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTgxMywxNyArODAyLDE3IEBACiAJc3RydWN0IHNldF9hc3NvY3N0YV9wYXJtCSpwc2V0YXNzb2NzdGFfcGFyYTsKIAlzdHJ1Y3Qgc2V0X2Fzc29jc3RhX3JzcAkJKnBzZXRhc3NvY3N0YV9yc3AgPSBOVUxMOwogCi0JcGgyYyA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGgyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXBzZXRhc3NvY3N0YV9wYXJhID0gKHN0cnVjdCBzZXRfYXNzb2NzdGFfcGFybSAqKQotCQkJICAgIF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXRfYXNzb2NzdGFfcGFybSkpOworCXBzZXRhc3NvY3N0YV9wYXJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNldF9hc3NvY3N0YV9wYXJtKSwKKwkJCQkgICAgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRhc3NvY3N0YV9wYXJhID09IE5VTEwpIHsKIAkJa2ZyZWUoKHU4ICopIHBoMmMpOwogCQlyZXR1cm4gX0ZBSUw7CiAJfQotCXBzZXRhc3NvY3N0YV9yc3AgPSAoc3RydWN0IHNldF9hc3NvY3N0YV9yc3AgKilfbWFsbG9jKAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2V0X2Fzc29jc3RhX3JzcCkpOworCXBzZXRhc3NvY3N0YV9yc3AgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0X2Fzc29jc3RhX3JzcCksCisJCQkJICAgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRhc3NvY3N0YV9yc3AgPT0gTlVMTCkgewogCQlrZnJlZSgodTggKilwaDJjKTsKIAkJa2ZyZWUoKHU4ICopcHNldGFzc29jc3RhX3BhcmEpOwpAQCAtODQzLDExICs4MzIsMTAgQEAKIAlzdHJ1Y3QgY21kX29iagkJKnBoMmM7CiAJc3RydWN0IGFkZEJhUmVxX3Bhcm0JKnBhZGRiYXJlcV9wYXJtOwogCi0JcGgyYyA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGgyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBoMmMgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXBhZGRiYXJlcV9wYXJtID0gKHN0cnVjdCBhZGRCYVJlcV9wYXJtICopX21hbGxvYygKLQkJCSAgc2l6ZW9mKHN0cnVjdCBhZGRCYVJlcV9wYXJtKSk7CisJcGFkZGJhcmVxX3Bhcm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkQmFSZXFfcGFybSksIEdGUF9BVE9NSUMpOwogCWlmIChwYWRkYmFyZXFfcGFybSA9PSBOVUxMKSB7CiAJCWtmcmVlKCh1bnNpZ25lZCBjaGFyICopcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKQEAgLTg2NSwxMSArODUzLDEwIEBACiAJc3RydWN0IGRydmludF9jbWRfcGFybSAgKnBkcnZpbnRjbWRfcGFyYW07CiAJc3RydWN0IGNtZF9wcml2CSpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKIAotCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaikpOworCXBoMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmIChwaDJjID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKLQlwZHJ2aW50Y21kX3BhcmFtID0gKHN0cnVjdCBkcnZpbnRfY21kX3Bhcm0gKilfbWFsbG9jKAotCQkJICAgc2l6ZW9mKHN0cnVjdCBkcnZpbnRfY21kX3Bhcm0pKTsKKwlwZHJ2aW50Y21kX3BhcmFtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRydmludF9jbWRfcGFybSksIEdGUF9BVE9NSUMpOwogCWlmIChwZHJ2aW50Y21kX3BhcmFtID09IE5VTEwpIHsKIAkJa2ZyZWUoKHVuc2lnbmVkIGNoYXIgKilwaDJjKTsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtMTA0MCwxNiArMTAyNywxNCBAQAogCXN0cnVjdCBEaXNjb25uZWN0Q3RybEV4X3BhcmFtICpwYXJhbTsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJmFkYXB0ZXItPmNtZHByaXY7CiAKLQlwaDJjID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwaDJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGgyYyA9PSBOVUxMKQogCQlyZXR1cm4gX0ZBSUw7Ci0JcGFyYW0gPSAoc3RydWN0IERpc2Nvbm5lY3RDdHJsRXhfcGFyYW0gKikKLQkJX21hbGxvYyhzaXplb2Yoc3RydWN0IERpc2Nvbm5lY3RDdHJsRXhfcGFyYW0pKTsKKwlwYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBEaXNjb25uZWN0Q3RybEV4X3BhcmFtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBhcmFtID09IE5VTEwpIHsKIAkJa2ZyZWUoKHVuc2lnbmVkIGNoYXIgKikgcGgyYyk7CiAJCXJldHVybiBfRkFJTDsKIAl9Ci0JbWVtc2V0KHBhcmFtLCAwLCBzaXplb2Yoc3RydWN0IERpc2Nvbm5lY3RDdHJsRXhfcGFyYW0pKTsKIAogCXBhcmFtLT5FbmFibGVEcnZDdHJsID0gKHVuc2lnbmVkIGNoYXIpZW5hYmxlRHJ2Q3RybDsKIAlwYXJhbS0+VHJ5UGt0Q250ID0gKHVuc2lnbmVkIGNoYXIpdHJ5UGt0Q250OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pby5jCmluZGV4IGFiYzFjOTcuLjM3YTg0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvLmMKQEAgLTYwLDggKzYwLDggQEAKIAlzZXRfaW50Zl9mdW5zID0gJihyODcxMl91c2Jfc2V0X2ludGZfZnVucyk7CiAJc2V0X2ludGZfb3BzID0gJnI4NzEyX3VzYl9zZXRfaW50Zl9vcHM7CiAJaW5pdF9pbnRmX3ByaXYgPSAmcjg3MTJfdXNiX2luaXRfaW50Zl9wcml2OwotCXBpbnRmX3ByaXYgPSBwaW50Zl9oZGwtPnBpbnRmcHJpdiA9IChzdHJ1Y3QgaW50Zl9wcml2ICopCi0JCSAgICAgX21hbGxvYyhzaXplb2Yoc3RydWN0IGludGZfcHJpdikpOworCXBpbnRmX3ByaXYgPSBwaW50Zl9oZGwtPnBpbnRmcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRmX3ByaXYpLAorCQkJCQkJICAgIEdGUF9BVE9NSUMpOwogCWlmIChwaW50Zl9wcml2ID09IE5VTEwpCiAJCWdvdG8gX2luaXRfaW50Zl9oZGxfZmFpbDsKIAlwaW50Zl9oZGwtPmFkYXB0ZXIgPSAodTggKilwYWRhcHRlcjsKQEAgLTExMiwxNSArMTEyLDE2IEBACiAJc3RydWN0IGlvX3F1ZXVlICpwaW9fcXVldWU7CiAJc3RydWN0IGlvX3JlcSAqcGlvX3JlcTsKIAotCXBpb19xdWV1ZSA9IChzdHJ1Y3QgaW9fcXVldWUgKilfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9fcXVldWUpKTsKKwlwaW9fcXVldWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9fcXVldWUpLCBHRlBfQVRPTUlDKTsKIAlpZiAocGlvX3F1ZXVlID09IE5VTEwpCiAJCWdvdG8gYWxsb2NfaW9fcXVldWVfZmFpbDsKIAlfaW5pdF9saXN0aGVhZCgmcGlvX3F1ZXVlLT5mcmVlX2lvcmVxcyk7CiAJX2luaXRfbGlzdGhlYWQoJnBpb19xdWV1ZS0+cHJvY2Vzc2luZyk7CiAJX2luaXRfbGlzdGhlYWQoJnBpb19xdWV1ZS0+cGVuZGluZyk7CiAJc3Bpbl9sb2NrX2luaXQoJnBpb19xdWV1ZS0+bG9jayk7Ci0JcGlvX3F1ZXVlLT5wYWxsb2NhdGVkX2ZyZWVfaW9yZXFzX2J1ZiA9ICh1OCAqKV9tYWxsb2MoTlVNX0lPUkVRICoKLQkJCQkJCShzaXplb2Yoc3RydWN0IGlvX3JlcSkpICsgNCk7CisJcGlvX3F1ZXVlLT5wYWxsb2NhdGVkX2ZyZWVfaW9yZXFzX2J1ZiA9IGttYWxsb2MoTlVNX0lPUkVRICoKKwkJCQkJCQkoc2l6ZW9mKHN0cnVjdCBpb19yZXEpKSArIDQsCisJCQkJCQkJR0ZQX0FUT01JQyk7CiAJaWYgKChwaW9fcXVldWUtPnBhbGxvY2F0ZWRfZnJlZV9pb3JlcXNfYnVmKSA9PSBOVUxMKQogCQlnb3RvIGFsbG9jX2lvX3F1ZXVlX2ZhaWw7CiAJbWVtc2V0KHBpb19xdWV1ZS0+cGFsbG9jYXRlZF9mcmVlX2lvcmVxc19idWYsIDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX2xpbnV4LmMKaW5kZXggMjNkNTM5ZC4uZTE0N2M0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pb2N0bF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW9jdGxfbGludXguYwpAQCAtNDI0LDEwICs0MjQsOSBAQAogCQkJd2VwX2tleV9pZHggPSAwOwogCQlpZiAod2VwX2tleV9sZW4gPiAwKSB7CiAJCQl3ZXBfa2V5X2xlbiA9IHdlcF9rZXlfbGVuIDw9IDUgPyA1IDogMTM7Ci0JCQlwd2VwID0gKHN0cnVjdCBORElTXzgwMl8xMV9XRVAgKilfbWFsbG9jKCh1MzIpCi0JCQkgICAgICAgKHdlcF9rZXlfbGVuICsKLQkJCSAgICAgICBGSUVMRF9PRkZTRVQoc3RydWN0IE5ESVNfODAyXzExX1dFUCwKLQkJCSAgICAgICBLZXlNYXRlcmlhbCkpKTsKKwkJCXB3ZXAgPSBrbWFsbG9jKCh1MzIpKHdlcF9rZXlfbGVuICsKKwkJCQkgICAgICAgRklFTERfT0ZGU0VUKHN0cnVjdCBORElTXzgwMl8xMV9XRVAsIEtleU1hdGVyaWFsKSksCisJCQkJICAgICAgIEdGUF9BVE9NSUMpOwogCQkJaWYgKHB3ZXAgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCW1lbXNldChwd2VwLCAwLCBzaXplb2Yoc3RydWN0IE5ESVNfODAyXzExX1dFUCkpOwpAQCAtNTE4LDEwICs1MTcsOSBAQAogCWlmICgoaWVsZW4gPiBNQVhfV1BBX0lFX0xFTikgfHwgKHBpZSA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGllbGVuKSB7Ci0JCWJ1ZiA9IF9tYWxsb2MoaWVsZW4pOworCQlidWYgPSBrbWVtZHVwKHBpZSwgaWVsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoYnVmID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KGJ1ZiwgcGllICwgaWVsZW4pOwogCQlwb3MgPSBidWY7CiAJCWlmIChpZWxlbiA8IFJTTl9IRUFERVJfTEVOKSB7CiAJCQlyZXQgID0gLUVJTlZBTDsKQEAgLTk1OSwxMyArOTU3LDkgQEAKIAlzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEgPSAoc3RydWN0IGl3X3BvaW50ICopYXdycTsKIAogCWxlbiA9IGR3cnEtPmxlbmd0aDsKLQlleHQgPSBfbWFsbG9jKGxlbik7Ci0JaWYgKCFleHQpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChjb3B5X2Zyb21fdXNlcihleHQsIGR3cnEtPnBvaW50ZXIsIGxlbikpIHsKLQkJa2ZyZWUoZXh0KTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQorCWV4dCA9IG1lbWR1cF91c2VyKGR3cnEtPnBvaW50ZXIsIGxlbik7CisJaWYgKElTX0VSUihleHQpKQorCQlyZXR1cm4gUFRSX0VSUihleHQpOwogCiAJaWYgKDAgPT0gc3RyY2FzZWNtcChleHQsICJSU1NJIikpIHsKIAkJLypSZXR1cm4gcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvciBpbiAtZGIgZm9yICovCkBAIC0xODAxLDEzICsxNzk1LDYgQEAKIAl1MzIgcGFyYW1fbGVuOwogCWludCByZXQgPSAwOwogCi0JcGFyYW1fbGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlX3BhcmFtKSArIHBleHQtPmtleV9sZW47Ci0JcGFyYW0gPSAoc3RydWN0IGllZWVfcGFyYW0gKilfbWFsbG9jKHBhcmFtX2xlbik7Ci0JaWYgKHBhcmFtID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwYXJhbSwgMCwgcGFyYW1fbGVuKTsKLQlwYXJhbS0+Y21kID0gSUVFRV9DTURfU0VUX0VOQ1JZUFRJT047Ci0JbWVtc2V0KHBhcmFtLT5zdGFfYWRkciwgMHhmZiwgRVRIX0FMRU4pOwogCXN3aXRjaCAocGV4dC0+YWxnKSB7CiAJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CiAJCWFsZ19uYW1lID0gIm5vbmUiOwpAQCAtMTgyNCw2ICsxODExLDE0IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJcGFyYW1fbGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlX3BhcmFtKSArIHBleHQtPmtleV9sZW47CisJcGFyYW0gPSBremFsbG9jKHBhcmFtX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKHBhcmFtID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXBhcmFtLT5jbWQgPSBJRUVFX0NNRF9TRVRfRU5DUllQVElPTjsKKwltZW1zZXQocGFyYW0tPnN0YV9hZGRyLCAweGZmLCBFVEhfQUxFTik7CisKIAlzdHJuY3B5KChjaGFyICopcGFyYW0tPnUuY3J5cHQuYWxnLCBhbGdfbmFtZSwgSUVFRV9DUllQVF9BTEdfTkFNRV9MRU4pOwogCWlmIChwZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkKIAkJcGFyYW0tPnUuY3J5cHQuc2V0X3R4ID0gMDsKQEAgLTE5MjAsNyArMTkxNSw3IEBACiAJYnNldCA9ICh1OCkocC0+ZmxhZ3MgJiAweEZGRkYpOwogCWxlbiA9IHAtPmxlbmd0aDsKIAlwcGFybWJ1ZiA9IE5VTEw7Ci0JcHBhcm1idWYgPSAodTggKilfbWFsbG9jKGxlbik7CisJcHBhcm1idWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKHBwYXJtYnVmID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBfcjg3MXhfbXBfaW9jdGxfaGRsX2V4aXQ7CkBAIC0yMTkzLDEzICsyMTg4LDkgQEAKIAogCWlmIChwLT5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGllZWVfcGFyYW0pIHx8ICFwLT5wb2ludGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlwYXJhbSA9IChzdHJ1Y3QgaWVlZV9wYXJhbSAqKV9tYWxsb2MocC0+bGVuZ3RoKTsKLQlpZiAocGFyYW0gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHBhcmFtLCBwLT5wb2ludGVyLCBwLT5sZW5ndGgpKSB7Ci0JCWtmcmVlKCh1OCAqKXBhcmFtKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQorCXBhcmFtID0gbWVtZHVwX3VzZXIocC0+cG9pbnRlciwgcC0+bGVuZ3RoKTsKKwlpZiAoSVNfRVJSKHBhcmFtKSkKKwkJcmV0dXJuIFBUUl9FUlIocGFyYW0pOwogCXN3aXRjaCAocGFyYW0tPmNtZCkgewogCWNhc2UgSUVFRV9DTURfU0VUX1dQQV9QQVJBTToKIAkJcmV0ID0gd3BhX3NldF9wYXJhbShkZXYsIHBhcmFtLT51LndwYV9wYXJhbS5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tbG1lLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYwppbmRleCAzZWE5OWFlLi4wMjMzOWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYwpAQCAtNjIsNyArNjIsOCBAQAogCV9pbml0X3F1ZXVlKCYocG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlKSk7CiAJc2V0X3NjYW5uZWRfbmV0d29ya192YWwocG1sbWVwcml2LCAwKTsKIAltZW1zZXQoJnBtbG1lcHJpdi0+YXNzb2Nfc3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMl8xMV9zc2lkKSk7Ci0JcGJ1ZiA9IF9tYWxsb2MoTUFYX0JTU19DTlQgKiAoc2l6ZW9mKHN0cnVjdCB3bGFuX25ldHdvcmspKSk7CisJcGJ1ZiA9IGttYWxsb2MoTUFYX0JTU19DTlQgKiAoc2l6ZW9mKHN0cnVjdCB3bGFuX25ldHdvcmspKSwKKwkJICAgICAgIEdGUF9BVE9NSUMpOwogCWlmIChwYnVmID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKIAlwbWxtZXByaXYtPmZyZWVfYnNzX2J1ZiA9IHBidWY7CkBAIC03MjUsOCArNzI2LDcgQEAKIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yazsKIAogCWlmIChzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkgPT0gNCAqIHNpemVvZih1MzIpKSB7Ci0JCXBuZXR3b3JrID0gKHN0cnVjdCB3bGFuX25ldHdvcmsgKikKLQkJCV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGFuX25ldHdvcmspKTsKKwkJcG5ldHdvcmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xhbl9uZXR3b3JrKSwgR0ZQX0FUT01JQyk7CiAJCW1lbWNweSgodTggKilwbmV0d29yaysxNiwgKHU4ICopcGJ1ZiArIDgsCiAJCQlzaXplb2Yoc3RydWN0IHdsYW5fbmV0d29yaykgLSAxNik7CiAJfSBlbHNlCkBAIC0xMjExLDE5ICsxMjExLDE2IEBACiAJc3RydWN0IGNtZF9wcml2CSpwY21kcHJpdiA9ICZhZGFwdGVyLT5jbWRwcml2OwogCXN0cnVjdCBjbWRfb2JqICpwY21kOwogCXN0cnVjdCBzZXRhdXRoX3Bhcm0gKnBzZXRhdXRocGFybTsKLQlzaW50IHJldCA9IF9TVUNDRVNTOwogCi0JcGNtZCA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGNtZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwogCi0JcHNldGF1dGhwYXJtID0gKHN0cnVjdCBzZXRhdXRoX3Bhcm0gKilfbWFsbG9jKAotCQkJc2l6ZW9mKHN0cnVjdCBzZXRhdXRoX3Bhcm0pKTsKKwlwc2V0YXV0aHBhcm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0YXV0aF9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRhdXRocGFybSA9PSBOVUxMKSB7CiAJCWtmcmVlKCh1bnNpZ25lZCBjaGFyICopcGNtZCk7CiAJCXJldHVybiBfRkFJTDsKIAl9Ci0JbWVtc2V0KHBzZXRhdXRocGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBzZXRhdXRoX3Bhcm0pKTsKIAlwc2V0YXV0aHBhcm0tPm1vZGUgPSAodTgpcHNlY3VyaXR5cHJpdi0+QXV0aEFsZ3J0aG07CiAJcGNtZC0+Y21kY29kZSA9IF9TZXRBdXRoX0NNRF87CiAJcGNtZC0+cGFybWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcHNldGF1dGhwYXJtOwpAQCAtMTIzMiw3ICsxMjI5LDcgQEAKIAlwY21kLT5yc3BzeiA9IDA7CiAJX2luaXRfbGlzdGhlYWQoJnBjbWQtPmxpc3QpOwogCXI4NzEyX2VucXVldWVfY21kKHBjbWRwcml2LCBwY21kKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBfU1VDQ0VTUzsKIH0KIAogc2ludCByODcxMl9zZXRfa2V5KHN0cnVjdCBfYWRhcHRlciAqYWRhcHRlciwKQEAgLTEyNDMsMTYgKzEyNDAsMTYgQEAKIAlzdHJ1Y3QgY21kX29iaiAqcGNtZDsKIAlzdHJ1Y3Qgc2V0a2V5X3Bhcm0gKnBzZXRrZXlwYXJtOwogCXU4IGtleWxlbjsKKwlzaW50IHJldCA9IF9TVUNDRVNTOwogCi0JcGNtZCA9IChzdHJ1Y3QgY21kX29iaiAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSk7CisJcGNtZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwotCXBzZXRrZXlwYXJtID0gKHN0cnVjdCBzZXRrZXlfcGFybSAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXRrZXlfcGFybSkpOworCXBzZXRrZXlwYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNldGtleV9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBzZXRrZXlwYXJtID09IE5VTEwpIHsKLQkJa2ZyZWUoKHVuc2lnbmVkIGNoYXIgKilwY21kKTsKLQkJcmV0dXJuIF9GQUlMOworCQlyZXQgPSBfRkFJTDsKKwkJZ290byBlcnJfZnJlZV9jbWQ7CiAJfQotCW1lbXNldChwc2V0a2V5cGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBzZXRrZXlfcGFybSkpOwogCWlmIChwc2VjdXJpdHlwcml2LT5BdXRoQWxncnRobSA9PSAyKSB7IC8qIDgwMi4xWCAqLwogCQlwc2V0a2V5cGFybS0+YWxnb3JpdGhtID0KIAkJCSAodTgpcHNlY3VyaXR5cHJpdi0+WEdycFByaXZhY3k7CkBAIC0xMjc0LDIzICsxMjcxLDI4IEBACiAJCQlwc2VjdXJpdHlwcml2LT5EZWZLZXlba2V5aWRdLnNrZXksIGtleWxlbik7CiAJCWJyZWFrOwogCWNhc2UgX1RLSVBfOgotCQlpZiAoa2V5aWQgPCAxIHx8IGtleWlkID4gMikKLQkJCXJldHVybiBfRkFJTDsKKwkJaWYgKGtleWlkIDwgMSB8fCBrZXlpZCA+IDIpIHsKKwkJCXJldCA9IF9GQUlMOworCQkJZ290byBlcnJfZnJlZV9wYXJtOworCQl9CiAJCWtleWxlbiA9IDE2OwogCQltZW1jcHkocHNldGtleXBhcm0tPmtleSwKIAkJCSZwc2VjdXJpdHlwcml2LT5YR3JwS2V5W2tleWlkIC0gMV0sIGtleWxlbik7CiAJCXBzZXRrZXlwYXJtLT5ncnBrZXkgPSAxOwogCQlicmVhazsKIAljYXNlIF9BRVNfOgotCQlpZiAoa2V5aWQgPCAxIHx8IGtleWlkID4gMikKLQkJCXJldHVybiBfRkFJTDsKKwkJaWYgKGtleWlkIDwgMSB8fCBrZXlpZCA+IDIpIHsKKwkJCXJldCA9IF9GQUlMOworCQkJZ290byBlcnJfZnJlZV9wYXJtOworCQl9CiAJCWtleWxlbiA9IDE2OwogCQltZW1jcHkocHNldGtleXBhcm0tPmtleSwKIAkJCSZwc2VjdXJpdHlwcml2LT5YR3JwS2V5W2tleWlkIC0gMV0sIGtleWxlbik7CiAJCXBzZXRrZXlwYXJtLT5ncnBrZXkgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gX0ZBSUw7CisJCXJldCA9IF9GQUlMOworCQlnb3RvIGVycl9mcmVlX3Bhcm07CiAJfQogCXBjbWQtPmNtZGNvZGUgPSBfU2V0S2V5X0NNRF87CiAJcGNtZC0+cGFybWJ1ZiA9ICh1OCAqKXBzZXRrZXlwYXJtOwpAQCAtMTI5OSw3ICsxMzAxLDEzIEBACiAJcGNtZC0+cnNwc3ogPSAwOwogCV9pbml0X2xpc3RoZWFkKCZwY21kLT5saXN0KTsKIAlyODcxMl9lbnF1ZXVlX2NtZChwY21kcHJpdiwgcGNtZCk7Ci0JcmV0dXJuIF9TVUNDRVNTOworCXJldHVybiByZXQ7CisKK2Vycl9mcmVlX3Bhcm06CisJa2ZyZWUocHNldGtleXBhcm0pOworZXJyX2ZyZWVfY21kOgorCWtmcmVlKHBjbWQpOworCXJldHVybiByZXQ7CiB9CiAKIC8qIGFkanVzdCBJRXMgZm9yIHI4NzEyX2pvaW5ic3NfY21kIGluIFdNTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcC5jCmluZGV4IDA1NjMzMTguLjM4OTA2MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21wLmMKQEAgLTUzLDggKzUzLDkgQEAKIAlfaW5pdF9tcF9wcml2XyhwbXBfcHJpdik7CiAJX2luaXRfcXVldWUoJnBtcF9wcml2LT5mcmVlX21wX3htaXRxdWV1ZSk7CiAJcG1wX3ByaXYtPnBhbGxvY2F0ZWRfbXBfeG1pdGZyYW1lX2J1ZiA9IE5VTEw7Ci0JcG1wX3ByaXYtPnBhbGxvY2F0ZWRfbXBfeG1pdGZyYW1lX2J1ZiA9IF9tYWxsb2MoTlJfTVBfWE1JVEZSQU1FICoKLQkJCQkJIHNpemVvZihzdHJ1Y3QgbXBfeG1pdF9mcmFtZSkgKyA0KTsKKwlwbXBfcHJpdi0+cGFsbG9jYXRlZF9tcF94bWl0ZnJhbWVfYnVmID0ga21hbGxvYyhOUl9NUF9YTUlURlJBTUUgKgorCQkJCQkJCXNpemVvZihzdHJ1Y3QgbXBfeG1pdF9mcmFtZSkgKyA0LAorCQkJCQkJCUdGUF9BVE9NSUMpOwogCWlmIChwbXBfcHJpdi0+cGFsbG9jYXRlZF9tcF94bWl0ZnJhbWVfYnVmID09IE5VTEwpIHsKIAkJcmVzID0gX0ZBSUw7CiAJCWdvdG8gX2V4aXRfaW5pdF9tcF9wcml2OwpAQCAtODAsOSArODEsOCBAQAogCiBzdGF0aWMgaW50IGZyZWVfbXBfcHJpdihzdHJ1Y3QgbXBfcHJpdiAqcG1wX3ByaXYpCiB7Ci0JaW50IHJlcyA9IDA7CiAJa2ZyZWUocG1wX3ByaXYtPnBhbGxvY2F0ZWRfbXBfeG1pdGZyYW1lX2J1Zik7Ci0JcmV0dXJuIHJlczsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBtcDg3MXhpbml0KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpCkBAIC0yODEsMTEgKzI4MSwxMCBAQAogCXN0cnVjdCBTZXRDaGFubmVsX3Bhcm0gKnBwYXJtID0gTlVMTDsKIAl1MTYgY29kZSA9IEdFTl9DTURfQ09ERShfU2V0Q2hhbm5lbCk7CiAKLQlwY21kID0gKHN0cnVjdCBjbWRfb2JqICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopKTsKKwlwY21kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAocGNtZCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JcHBhcm0gPSAoc3RydWN0IFNldENoYW5uZWxfcGFybSAqKV9tYWxsb2Moc2l6ZW9mKHN0cnVjdAotCQkJCQkgU2V0Q2hhbm5lbF9wYXJtKSk7CisJcHBhcm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgU2V0Q2hhbm5lbF9wYXJtKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBwYXJtID09IE5VTEwpIHsKIAkJa2ZyZWUocGNtZCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfaW9jdGwuYwppbmRleCA1YmQ0Mjk2Li45ODI3ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21wX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcF9pb2N0bC5jCkBAIC02Niw3ICs2Niw2IEBACiAKIHVpbnQgb2lkX3J0X3Byb193cml0ZV9iYl9yZWdfaGRsKHN0cnVjdCBvaWRfcGFyX3ByaXYgKnBvaWRfcGFyX3ByaXYpCiB7Ci0JdWludCBzdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAlzdHJ1Y3QgX2FkYXB0ZXIgKkFkYXB0ZXIgPSAoc3RydWN0IF9hZGFwdGVyICopCiAJCQkJICAgKHBvaWRfcGFyX3ByaXYtPmFkYXB0ZXJfY29udGV4dCk7CiAJc3RydWN0IGJiX3JlZ19wYXJhbSAqcGJicmVnOwpAQCAtODMsMTIgKzgyLDExIEBACiAJCW9mZnNldCB8PSBCQl9SRUdfQkFTRV9BRERSOwogCXZhbHVlID0gcGJicmVnLT52YWx1ZTsKIAlyODcxMl9iYl9yZWdfd3JpdGUoQWRhcHRlciwgb2Zmc2V0LCB2YWx1ZSk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHVpbnQgb2lkX3J0X3Byb19yZWFkX2JiX3JlZ19oZGwoc3RydWN0IG9pZF9wYXJfcHJpdiAqcG9pZF9wYXJfcHJpdikKIHsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKIAlzdHJ1Y3QgYmJfcmVnX3BhcmFtICpwYmJyZWc7CkBAIC0xMDYsMTIgKzEwNCwxMSBAQAogCXZhbHVlID0gcjg3MTJfYmJfcmVnX3JlYWQoQWRhcHRlciwgb2Zmc2V0KTsKIAlwYmJyZWctPnZhbHVlID0gdmFsdWU7CiAJKnBvaWRfcGFyX3ByaXYtPmJ5dGVzX3J3ID0gcG9pZF9wYXJfcHJpdi0+aW5mb3JtYXRpb25fYnVmX2xlbjsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIH0KIAogdWludCBvaWRfcnRfcHJvX3dyaXRlX3JmX3JlZ19oZGwoc3RydWN0IG9pZF9wYXJfcHJpdiAqcG9pZF9wYXJfcHJpdikKIHsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKIAlzdHJ1Y3QgcmZfcmVnX3BhcmFtICpwYmJyZWc7CkBAIC0xMzAsMTQgKzEyNywxMyBAQAogCW9mZnNldCA9ICh1OClwYmJyZWctPm9mZnNldDsKIAl2YWx1ZSA9IHBiYnJlZy0+dmFsdWU7CiAJcjg3MTJfcmZfcmVnX3dyaXRlKEFkYXB0ZXIsIHBhdGgsIG9mZnNldCwgdmFsdWUpOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIFJORElTX1NUQVRVU19TVUNDRVNTOwogfQogCiB1aW50IG9pZF9ydF9wcm9fcmVhZF9yZl9yZWdfaGRsKHN0cnVjdCBvaWRfcGFyX3ByaXYgKnBvaWRfcGFyX3ByaXYpCiB7CiAJc3RydWN0IF9hZGFwdGVyICpBZGFwdGVyID0gKHN0cnVjdCBfYWRhcHRlciAqKQogCQkJCSAgIChwb2lkX3Bhcl9wcml2LT5hZGFwdGVyX2NvbnRleHQpOwotCXVpbnQgc3RhdHVzID0gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAJc3RydWN0IHJmX3JlZ19wYXJhbSAqcGJicmVnOwogCXU4IHBhdGg7CiAJdTggb2Zmc2V0OwpAQCAtMTU1LDcgKzE1MSw3IEBACiAJdmFsdWUgPSByODcxMl9yZl9yZWdfcmVhZChBZGFwdGVyLCBwYXRoLCBvZmZzZXQpOwogCXBiYnJlZy0+dmFsdWUgPSB2YWx1ZTsKIAkqcG9pZF9wYXJfcHJpdi0+Ynl0ZXNfcncgPSBwb2lkX3Bhcl9wcml2LT5pbmZvcm1hdGlvbl9idWZfbGVuOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIFJORElTX1NUQVRVU19TVUNDRVNTOwogfQogCiAvKlRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERVVCB0byB0aGUgTVAgdGVzdCBtb2RlKi8KQEAgLTI2Niw3ICsyNjIsNiBAQAogewogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCXUzMiByYXRldmFsdWU7CiAKIAlpZiAocG9pZF9wYXJfcHJpdi0+dHlwZV9vZl9vaWQgIT0gU0VUX09JRCkKQEAgLTI3OCw3ICsyNzMsNyBAQAogCQlyZXR1cm4gUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQTsKIAlBZGFwdGVyLT5tcHByaXYuY3Vycl9yYXRlaWR4ID0gcmF0ZXZhbHVlOwogCXI4NzEyX1NldERhdGFSYXRlKEFkYXB0ZXIpOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIFJORElTX1NUQVRVU19TVUNDRVNTOwogfQogCiB1aW50IG9pZF9ydF9wcm9fc3RhcnRfdGVzdF9oZGwoc3RydWN0IG9pZF9wYXJfcHJpdiAqcG9pZF9wYXJfcHJpdikKQEAgLTMyOCw3ICszMjMsNiBAQAogewogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCXUzMgkJQ2hhbm5lbDsKIAogCWlmIChwb2lkX3Bhcl9wcml2LT50eXBlX29mX29pZCAhPSBTRVRfT0lEKQpAQCAtMzQwLDE0ICszMzQsMTMgQEAKIAkJcmV0dXJuIFJORElTX1NUQVRVU19OT1RfQUNDRVBURUQ7CiAJQWRhcHRlci0+bXBwcml2LmN1cnJfY2ggPSBDaGFubmVsOwogCXI4NzEyX1NldENoYW5uZWwoQWRhcHRlcik7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHVpbnQgb2lkX3J0X3Byb19zZXRfYW50ZW5uYV9iYl9oZGwoc3RydWN0IG9pZF9wYXJfcHJpdiAqcG9pZF9wYXJfcHJpdikKIHsKIAlzdHJ1Y3QgX2FkYXB0ZXIgKkFkYXB0ZXIgPSAoc3RydWN0IF9hZGFwdGVyICopCiAJCQkJICAgKHBvaWRfcGFyX3ByaXYtPmFkYXB0ZXJfY29udGV4dCk7Ci0JdWludCBzdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAl1MzIgYW50ZW5uYTsKIAogCWlmIChwb2lkX3Bhcl9wcml2LT50eXBlX29mX29pZCAhPSBTRVRfT0lEKQpAQCAtMzU4LDcgKzM1MSw3IEBACiAJQWRhcHRlci0+bXBwcml2LmFudGVubmFfdHggPSAodTE2KSgoYW50ZW5uYSAmIDB4RkZGRjAwMDApID4+IDE2KTsKIAlBZGFwdGVyLT5tcHByaXYuYW50ZW5uYV9yeCA9ICh1MTYpKGFudGVubmEgJiAweDAwMDBGRkZGKTsKIAlyODcxMl9Td2l0Y2hBbnRlbm5hKEFkYXB0ZXIpOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIFJORElTX1NUQVRVU19TVUNDRVNTOwogfQogCiB1aW50IG9pZF9ydF9wcm9fc2V0X3R4X3Bvd2VyX2NvbnRyb2xfaGRsKApAQCAtMzY2LDcgKzM1OSw2IEBACiB7CiAJc3RydWN0IF9hZGFwdGVyICpBZGFwdGVyID0gKHN0cnVjdCBfYWRhcHRlciAqKQogCQkJCSAgIChwb2lkX3Bhcl9wcml2LT5hZGFwdGVyX2NvbnRleHQpOwotCXVpbnQgc3RhdHVzID0gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAJdTMyIHR4X3B3cl9pZHg7CiAKIAlpZiAocG9pZF9wYXJfcHJpdi0+dHlwZV9vZl9vaWQgIT0gU0VUX09JRCkKQEAgLTM3OCw3ICszNzAsNyBAQAogCQlyZXR1cm4gUk5ESVNfU1RBVFVTX05PVF9BQ0NFUFRFRDsKIAlBZGFwdGVyLT5tcHByaXYuY3Vycl90eHBvd2VyaWR4ID0gKHU4KXR4X3B3cl9pZHg7CiAJcjg3MTJfU2V0VHhQb3dlcihBZGFwdGVyKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIH0KIAogdWludCBvaWRfcnRfcHJvX3F1ZXJ5X3R4X3BhY2tldF9zZW50X2hkbCgKQEAgLTgzOSw3ICs4MzEsNiBAQAogewogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCiAJaWYgKHBvaWRfcGFyX3ByaXYtPnR5cGVfb2Zfb2lkICE9IFFVRVJZX09JRCkKIAkJcmV0dXJuIFJORElTX1NUQVRVU19OT1RfQUNDRVBURUQ7CkBAIC04NDcsNyArODM4LDcgQEAKIAkJKHVuc2lnbmVkIGNoYXIgKikmQWRhcHRlci0+bXBwcml2LnJ4c3RhdCwKIAkJc2l6ZW9mKHN0cnVjdCByZWN2X3N0YXQpKTsKIAkqcG9pZF9wYXJfcHJpdi0+Ynl0ZXNfcncgPSBwb2lkX3Bhcl9wcml2LT5pbmZvcm1hdGlvbl9idWZfbGVuOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIFJORElTX1NUQVRVU19TVUNDRVNTOwogfQogCiB1aW50IG9pZF9ydF9wcm9fY2ZnX2RlYnVnX21lc3NhZ2VfaGRsKHN0cnVjdCBvaWRfcGFyX3ByaXYKQEAgLTg3NSw3ICs4NjYsNiBAQAogewogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCiAJaWYgKHBvaWRfcGFyX3ByaXYtPnR5cGVfb2Zfb2lkICE9IFFVRVJZX09JRCkKIAkJcmV0dXJuIFJORElTX1NUQVRVU19OT1RfQUNDRVBURUQ7CkBAIC04OTcsNyArODg3LDcgQEAKIAkqKHUzMiAqKXBvaWRfcGFyX3ByaXYtPmluZm9ybWF0aW9uX2J1ZiA9CiAJCQkJIEFkYXB0ZXItPm1wcHJpdi53b3JrcGFyYW0uaW9fdmFsdWU7CiAJKnBvaWRfcGFyX3ByaXYtPmJ5dGVzX3J3ID0gc2l6ZW9mKHUzMik7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHVpbnQgb2lkX3J0X3Byb19zZXRfcG93ZXJfdHJhY2tpbmdfaGRsKHN0cnVjdCBvaWRfcGFyX3ByaXYKQEAgLTEwOTEsNyArMTA4MSw2IEBACiAJCQkJICAgKHBvaWRfcGFyX3ByaXYtPmFkYXB0ZXJfY29udGV4dCk7CiAKIAl1bnNpZ25lZCBsb25nCQkJaXJxTDsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCiAJc3RydWN0IHN0YV9pbmZvCQkqcHN0YSA9IE5VTEw7CiAJdTgJCQkqbWFjYWRkcjsKQEAgLTExMTMsNyArMTEwMiw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihBZGFwdGVyLT5zdGFwcml2LnN0YV9oYXNoX2xvY2spLCBpcnFMKTsKIAl9CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHUzMiBtcF9xdWVyeV9kcnZfdmFyKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IG9mZnNldCwgdTMyIHZhcikKQEAgLTExMjYsOCArMTExNSw2IEBACiAJc3RydWN0IF9hZGFwdGVyICpBZGFwdGVyID0gKHN0cnVjdCBfYWRhcHRlciAqKQogCQkJCSAgIChwb2lkX3Bhcl9wcml2LT5hZGFwdGVyX2NvbnRleHQpOwogCi0JdWludCBzdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQogCXN0cnVjdCBEUl9WQVJJQUJMRV9TVFJVQ1QgKnBkcnZfdmFyOwogCiAJaWYgKHBvaWRfcGFyX3ByaXYtPnR5cGVfb2Zfb2lkICE9IFFVRVJZX09JRCkKQEAgLTExMzksNyArMTEyNiw3IEBACiAJcGRydl92YXItPnZhcmlhYmxlID0gbXBfcXVlcnlfZHJ2X3ZhcihBZGFwdGVyLCBwZHJ2X3Zhci0+b2Zmc2V0LAogCQkJCQkgICAgICBwZHJ2X3Zhci0+dmFyaWFibGUpOwogCSpwb2lkX3Bhcl9wcml2LT5ieXRlc19ydyA9IHBvaWRfcGFyX3ByaXYtPmluZm9ybWF0aW9uX2J1Zl9sZW47Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTI0Myw3ICsxMjMwLDYgQEAKIHsKIAlzdHJ1Y3QgX2FkYXB0ZXIgKkFkYXB0ZXIgPSAoc3RydWN0IF9hZGFwdGVyICopCiAJCQkJICAgKHBvaWRfcGFyX3ByaXYtPmFkYXB0ZXJfY29udGV4dCk7Ci0JdWludCBzdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAogCWlmIChwb2lkX3Bhcl9wcml2LT50eXBlX29mX29pZCAhPSBRVUVSWV9PSUQpCiAJCXJldHVybiBSTkRJU19TVEFUVVNfTk9UX0FDQ0VQVEVEOwpAQCAtMTI1NCwxNCArMTI0MCwxMyBAQAogCQkJCSByODcxMl9lZnVzZV9nZXRfY3VycmVudF9zaXplKEFkYXB0ZXIpOwogCXI4NzEyX2VmdXNlX3JlZ191bmluaXQoQWRhcHRlcik7CiAJKnBvaWRfcGFyX3ByaXYtPmJ5dGVzX3J3ID0gcG9pZF9wYXJfcHJpdi0+aW5mb3JtYXRpb25fYnVmX2xlbjsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIH0KIAogdWludCBvaWRfcnRfZ2V0X2VmdXNlX21heF9zaXplX2hkbChzdHJ1Y3Qgb2lkX3Bhcl9wcml2ICpwb2lkX3Bhcl9wcml2KQogewogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCiAJaWYgKHBvaWRfcGFyX3ByaXYtPnR5cGVfb2Zfb2lkICE9IFFVRVJZX09JRCkKIAkJcmV0dXJuIFJORElTX1NUQVRVU19OT1RfQUNDRVBURUQ7CkBAIC0xMjcwLDcgKzEyNTUsNyBAQAogCSooaW50ICopcG9pZF9wYXJfcHJpdi0+aW5mb3JtYXRpb25fYnVmID0KIAkJCQkJIHI4NzEyX2VmdXNlX2dldF9tYXhfc2l6ZShBZGFwdGVyKTsKIAkqcG9pZF9wYXJfcHJpdi0+Ynl0ZXNfcncgPSBwb2lkX3Bhcl9wcml2LT5pbmZvcm1hdGlvbl9idWZfbGVuOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIFJORElTX1NUQVRVU19TVUNDRVNTOwogfQogCiB1aW50IG9pZF9ydF9wcm9fZWZ1c2VfaGRsKHN0cnVjdCBvaWRfcGFyX3ByaXYgKnBvaWRfcGFyX3ByaXYpCkBAIC0xMzIwLDcgKzEzMDUsNiBAQAogewogCXN0cnVjdCBfYWRhcHRlciAqQWRhcHRlciA9IChzdHJ1Y3QgX2FkYXB0ZXIgKikKIAkJCQkgICAocG9pZF9wYXJfcHJpdi0+YWRhcHRlcl9jb250ZXh0KTsKLQl1aW50IHN0YXR1cyA9IFJORElTX1NUQVRVU19TVUNDRVNTOwogCXUzMgkJYmFuZHdpZHRoOwogCiAJaWYgKHBvaWRfcGFyX3ByaXYtPnR5cGVfb2Zfb2lkICE9IFNFVF9PSUQpCkBAIC0xMzMyLDE0ICsxMzE2LDEzIEBACiAJCWJhbmR3aWR0aCA9IEhUX0NIQU5ORUxfV0lEVEhfNDA7CiAJQWRhcHRlci0+bXBwcml2LmN1cnJfYmFuZHdpZHRoID0gKHU4KWJhbmR3aWR0aDsKIAlyODcxMl9Td2l0Y2hCYW5kd2lkdGgoQWRhcHRlcik7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHVpbnQgb2lkX3J0X3NldF9jcnlzdGFsX2NhcF9oZGwoc3RydWN0IG9pZF9wYXJfcHJpdiAqcG9pZF9wYXJfcHJpdikKIHsKIAlzdHJ1Y3QgX2FkYXB0ZXIgKkFkYXB0ZXIgPSAoc3RydWN0IF9hZGFwdGVyICopCiAJCQkJICAgKHBvaWRfcGFyX3ByaXYtPmFkYXB0ZXJfY29udGV4dCk7Ci0JdWludCBzdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAl1MzIJCWNyeXN0YWxfY2FwID0gMDsKIAogCWlmIChwb2lkX3Bhcl9wcml2LT50eXBlX29mX29pZCAhPSBTRVRfT0lEKQpAQCAtMTM1MSw3ICsxMzM0LDcgQEAKIAkJcmV0dXJuIFJORElTX1NUQVRVU19OT1RfQUNDRVBURUQ7CiAJQWRhcHRlci0+bXBwcml2LmN1cnJfY3J5c3RhbGNhcCA9IGNyeXN0YWxfY2FwOwogCXI4NzEyX1NldENyeXN0YWxDYXAoQWRhcHRlcik7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHVpbnQgb2lkX3J0X3NldF9yeF9wYWNrZXRfdHlwZV9oZGwoc3RydWN0IG9pZF9wYXJfcHJpdgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9yZWN2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuYwppbmRleCAyNzRjMzU5Li5lYjc3NTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuYwpAQCAtNzIsOSArNzIsOSBAQAogCV9pbml0X3F1ZXVlKCZwcmVjdnByaXYtPnJlY3ZfcGVuZGluZ19xdWV1ZSk7CiAJcHJlY3Zwcml2LT5hZGFwdGVyID0gcGFkYXB0ZXI7CiAJcHJlY3Zwcml2LT5mcmVlX3JlY3ZmcmFtZV9jbnQgPSBOUl9SRUNWRlJBTUU7Ci0JcHJlY3Zwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZiA9IF9tYWxsb2MoTlJfUkVDVkZSQU1FICoKLQkJCQkJICAgc2l6ZW9mKHVuaW9uIHJlY3ZfZnJhbWUpICsKLQkJCQkJICAgUlhGUkFNRV9BTElHTl9TWik7CisJcHJlY3Zwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZiA9IGttYWxsb2MoTlJfUkVDVkZSQU1FICoKKwkJCQkJCSAgc2l6ZW9mKHVuaW9uIHJlY3ZfZnJhbWUpICsgUlhGUkFNRV9BTElHTl9TWiwKKwkJCQkJCSAgR0ZQX0FUT01JQyk7CiAJaWYgKHByZWN2cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwogCWttZW1sZWFrX25vdF9sZWFrKHByZWN2cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYpOwpAQCAtNjA1LDggKzYwNSw2IEBACiAJdTgJYnNuYXBoZHI7CiAJdTgJKnBzbmFwX3R5cGU7CiAJc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkciAqcHNuYXA7Ci0KLQlzaW50IHJldCA9IF9TVUNDRVNTOwogCXN0cnVjdCBfYWRhcHRlcgkqYWRhcHRlciA9IHByZWN2ZnJhbWUtPnUuaGRyLmFkYXB0ZXI7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJmFkYXB0ZXItPm1sbWVwcml2OwogCkBAIC02NTMsNyArNjUxLDcgQEAKIAkJbGVuID0gaHRvbnMobGVuKTsKIAkJbWVtY3B5KHB0ciArIDEyLCAmbGVuLCAyKTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKIHMzMiByODcxMl9yZWN2X2VudHJ5KHVuaW9uIHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3NlY3VyaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3NlY3VyaXR5LmMKaW5kZXggNWZmYzQ4OS4uMDkxMmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9zZWN1cml0eS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfc2VjdXJpdHkuYwpAQCAtMjcyLDYgKzI3Miw3IEBACiAvKiBDb252ZXJ0IGZyb20gVXM0Qnl0ZTMyIHRvIEJ5dGVbXSBpbiBhIHBvcnRhYmxlIHdheSAqLwogewogCWxvbmcgaTsKKwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJKnArKyA9ICh1OCkgKHZhbCAmIDB4ZmYpOwogCQl2YWwgPj49IDg7CkBAIC03NjUsNiArNzY2LDcgQEAKIHN0YXRpYyB2b2lkIHhvcl8zMih1OCAqYSwgdTggKmIsIHU4ICpvdXQpCiB7CiAJc2ludCBpOworCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJb3V0W2ldID0gYVtpXSBeIGJbaV07CiB9CkBAIC03OTgsNiArODAwLDcgQEAKIHN0YXRpYyB2b2lkIGJ5dGVfc3ViKHU4ICppbiwgdTggKm91dCkKIHsKIAlzaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJb3V0W2ldID0gc2JveChpbltpXSk7CiB9CkBAIC0xMTY0LDcgKzExNjcsNyBAQAogCQlyZXR1cm4gX0ZBSUw7CiAJcGZyYW1lID0gKChzdHJ1Y3QgeG1pdF9mcmFtZSAqKXB4bWl0ZnJhbWUpLT5idWZfYWRkciArIFRYREVTQ19PRkZTRVQ7CiAJLyogNCBzdGFydCB0byBlbmNyeXB0IGVhY2ggZnJhZ21lbnQgKi8KLQlpZiAoKHBhdHRyaWItPmVuY3J5cHQgPT0gX0FFU18pKSB7CisJaWYgKHBhdHRyaWItPmVuY3J5cHQgPT0gX0FFU18pIHsKIAkJaWYgKHBhdHRyaWItPnBzdGEpCiAJCQlzdGFpbmZvID0gcGF0dHJpYi0+cHN0YTsKIAkJZWxzZQpAQCAtMTE3NSw3ICsxMTc4LDcgQEAKIAkJCXByd3NrZXlsZW4gPSAxNjsKIAkJCWZvciAoY3VyZnJhZ251bSA9IDA7IGN1cmZyYWdudW0gPCBwYXR0cmliLT5ucl9mcmFnczsKIAkJCSAgICAgY3VyZnJhZ251bSsrKSB7Ci0JCQkJaWYgKChjdXJmcmFnbnVtICsgMSkgPT0gcGF0dHJpYi0+bnJfZnJhZ3MpIHtcCisJCQkJaWYgKChjdXJmcmFnbnVtICsgMSkgPT0gcGF0dHJpYi0+bnJfZnJhZ3MpIHsKIAkJCQkJbGVuZ3RoID0gcGF0dHJpYi0+bGFzdF90eGNtZHN6IC0KIAkJCQkJCSBwYXR0cmliLT5oZHJsZW4gLQogCQkJCQkJIHBhdHRyaWItPml2X2xlbiAtCkBAIC0xMzcxLDcgKzEzNzQsNyBAQAogCXBmcmFtZSA9ICh1bnNpZ25lZCBjaGFyICopKCh1bmlvbiByZWN2X2ZyYW1lICopcHJlY3ZmcmFtZSktPgogCQkgdS5oZHIucnhfZGF0YTsKIAkvKiA0IHN0YXJ0IHRvIGVuY3J5cHQgZWFjaCBmcmFnbWVudCAqLwotCWlmICgocHJ4YXR0cmliLT5lbmNyeXB0ID09IF9BRVNfKSkgeworCWlmIChwcnhhdHRyaWItPmVuY3J5cHQgPT0gX0FFU18pIHsKIAkJc3RhaW5mbyA9IHI4NzEyX2dldF9zdGFpbmZvKCZwYWRhcHRlci0+c3RhcHJpdiwKIAkJCQkJICAgICZwcnhhdHRyaWItPnRhWzBdKTsKIAkJaWYgKHN0YWluZm8gIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9zdGFfbWd0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3N0YV9tZ3QuYwppbmRleCA4ZGI2ODQ5Li42YzY0OTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3N0YV9tZ3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3N0YV9tZ3QuYwpAQCAtNTEsOCArNTEsOCBAQAogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAlzMzIgaTsKIAotCXBzdGFwcml2LT5wYWxsb2NhdGVkX3N0YWluZm9fYnVmID0gX21hbGxvYyhzaXplb2Yoc3RydWN0IHN0YV9pbmZvKSAqCi0JCQkJCQkgICBOVU1fU1RBICsgNCk7CisJcHN0YXByaXYtPnBhbGxvY2F0ZWRfc3RhaW5mb19idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RhX2luZm8pICoKKwkJCQkJCSAgIE5VTV9TVEEgKyA0LCBHRlBfQVRPTUlDKTsKIAlpZiAocHN0YXByaXYtPnBhbGxvY2F0ZWRfc3RhaW5mb19idWYgPT0gTlVMTCkKIAkJcmV0dXJuIF9GQUlMOwogCXBzdGFwcml2LT5wc3RhaW5mb19idWYgPSBwc3RhcHJpdi0+cGFsbG9jYXRlZF9zdGFpbmZvX2J1ZiArIDQgLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF94bWl0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3htaXQuYwppbmRleCA3OGY1NzBiLi4yMzA2ODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3htaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3htaXQuYwpAQCAtODcsOCArODcsOCBAQAogCWFuZCBpbml0aWFsaXplIGZyZWVfeG1pdF9mcmFtZSBiZWxvdy4KIAlQbGVhc2UgYWxzbyBhcHBseSAgZnJlZV90eG9iaiB0byBsaW5rX3VwIGFsbCB0aGUgeG1pdF9mcmFtZXMuLi4KIAkqLwotCXB4bWl0cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgPSBfbWFsbG9jKE5SX1hNSVRGUkFNRSAqCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCB4bWl0X2ZyYW1lKSArIDQpOworCXB4bWl0cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgPSBrbWFsbG9jKE5SX1hNSVRGUkFNRSAqIHNpemVvZihzdHJ1Y3QgeG1pdF9mcmFtZSkgKyA0LAorCQkJCQkJICBHRlBfQVRPTUlDKTsKIAlpZiAocHhtaXRwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZiA9PSBOVUxMKSB7CiAJCXB4bWl0cHJpdi0+cHhtaXRfZnJhbWVfYnVmID0gTlVMTDsKIAkJcmV0dXJuIF9GQUlMOwpAQCAtMTI2LDggKzEyNiw4IEBACiAJLyppbml0IHhtaXRfYnVmKi8KIAlfaW5pdF9xdWV1ZSgmcHhtaXRwcml2LT5mcmVlX3htaXRidWZfcXVldWUpOwogCV9pbml0X3F1ZXVlKCZweG1pdHByaXYtPnBlbmRpbmdfeG1pdGJ1Zl9xdWV1ZSk7Ci0JcHhtaXRwcml2LT5wYWxsb2NhdGVkX3htaXRidWYgPSBfbWFsbG9jKE5SX1hNSVRCVUZGICoKLQkJCQkJc2l6ZW9mKHN0cnVjdCB4bWl0X2J1ZikgKyA0KTsKKwlweG1pdHByaXYtPnBhbGxvY2F0ZWRfeG1pdGJ1ZiA9IGttYWxsb2MoTlJfWE1JVEJVRkYgKiBzaXplb2Yoc3RydWN0IHhtaXRfYnVmKSArIDQsCisJCQkJCQlHRlBfQVRPTUlDKTsKIAlpZiAocHhtaXRwcml2LT5wYWxsb2NhdGVkX3htaXRidWYgID09IE5VTEwpCiAJCXJldHVybiBfRkFJTDsKIAlweG1pdHByaXYtPnB4bWl0YnVmID0gcHhtaXRwcml2LT5wYWxsb2NhdGVkX3htaXRidWYgKyA0IC0KQEAgLTEzNSw4ICsxMzUsOCBAQAogCXB4bWl0YnVmID0gKHN0cnVjdCB4bWl0X2J1ZiAqKXB4bWl0cHJpdi0+cHhtaXRidWY7CiAJZm9yIChpID0gMDsgaSA8IE5SX1hNSVRCVUZGOyBpKyspIHsKIAkJX2luaXRfbGlzdGhlYWQoJnB4bWl0YnVmLT5saXN0KTsKLQkJcHhtaXRidWYtPnBhbGxvY2F0ZWRfYnVmID0gX21hbGxvYyhNQVhfWE1JVEJVRl9TWiArCi0JCQkJCSAgIFhNSVRCVUZfQUxJR05fU1opOworCQlweG1pdGJ1Zi0+cGFsbG9jYXRlZF9idWYgPSBrbWFsbG9jKE1BWF9YTUlUQlVGX1NaICsgWE1JVEJVRl9BTElHTl9TWiwKKwkJCQkJCSAgIEdGUF9BVE9NSUMpOwogCQlpZiAocHhtaXRidWYtPnBhbGxvY2F0ZWRfYnVmID09IE5VTEwpCiAJCQlyZXR1cm4gX0ZBSUw7CiAJCXB4bWl0YnVmLT5wYnVmID0gcHhtaXRidWYtPnBhbGxvY2F0ZWRfYnVmICsgWE1JVEJVRl9BTElHTl9TWiAtCkBAIC05NTUsOCArOTU1LDggQEAKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCiAJcHhtaXRwcml2LT5od3htaXRfZW50cnkgPSBIV1hNSVRfRU5UUlk7Ci0JcHhtaXRwcml2LT5od3htaXRzID0gKHN0cnVjdCBod194bWl0ICopX21hbGxvYyhzaXplb2Yoc3RydWN0IGh3X3htaXQpICoKLQkJCSAgICAgcHhtaXRwcml2LT5od3htaXRfZW50cnkpOworCXB4bWl0cHJpdi0+aHd4bWl0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBod194bWl0KSAqIHB4bWl0cHJpdi0+aHd4bWl0X2VudHJ5LAorCQkJCSAgICAgR0ZQX0FUT01JQyk7CiAJaWYgKHB4bWl0cHJpdi0+aHd4bWl0cyA9PSBOVUxMKQogCQlyZXR1cm47CiAJaHd4bWl0cyA9IHB4bWl0cHJpdi0+aHd4bWl0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jCmluZGV4IGJiZDU4ODguLmJhNzQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiBlcnJvcjoKIAl1c2JfcHV0X2Rldih1ZGV2KTsKIAl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZiwgTlVMTCk7Ci0JaWYgKHBhZGFwdGVyLT5kdm9ial9kZWluaXQgIT0gTlVMTCkKKwlpZiAocGFkYXB0ZXIgJiYgcGFkYXB0ZXItPmR2b2JqX2RlaW5pdCAhPSBOVUxMKQogCQlwYWRhcHRlci0+ZHZvYmpfZGVpbml0KHBhZGFwdGVyKTsKIAlpZiAocG5ldGRldikKIAkJZnJlZV9uZXRkZXYocG5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2Jfb3BzX2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2Jfb3BzX2xpbnV4LmMKaW5kZXggZGNhMzk4YS4uYTZjMmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX29wc19saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9vcHNfbGludXguYwpAQCAtNDk1LDExICs0OTUsMTEgQEAKIAkgKi8KIAl1OCAqcGFsbG9jX2J1ZiwgKnBJb19idWY7CiAKLQlwYWxsb2NfYnVmID0gX21hbGxvYygodTMyKSBsZW4gKyAxNik7CisJcGFsbG9jX2J1ZiA9IGttYWxsb2MoKHUzMilsZW4gKyAxNiwgR0ZQX0FUT01JQyk7CiAJaWYgKHBhbGxvY19idWYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICIlczogQ2FuJ3QgYWxsb2MgbWVtb3J5IGZvciB2ZW5kb3IgcmVxdWVzdFxuIiwKIAkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcElvX2J1ZiA9IHBhbGxvY19idWYgKyAxNiAtICgoYWRkcl90KShwYWxsb2NfYnVmKSAmIDB4MGYpOwogCWlmIChyZXF1ZXN0dHlwZSA9PSAweDAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L0tjb25maWcKaW5kZXggMDdmYjVlNC4uNDM1ZjM1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvS2NvbmZpZwpAQCAtMTksMTQgKzE5LDYgQEAKIAl3aWxsIG5ldmVyIGJlIHVzZWQgYXMgYW4gQVAsIG9yIHRoZSB0YXJnZXQgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSwKIAkiWSIgc2hvdWxkIGJlIHNlbGVjdGVkLgogCi1jb25maWcgODcyM0FVX1AyUAotCWJvb2wgIlJlYWx0ZWsgUlRMODcyM0FVIFBlZXItdG8tcGVlciBtb2RlIgotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiBlbmFibGVzIHBlZXItdG8tcGVlciBtb2RlIGZvciB0aGUgcjg3MjNhdSBkcml2ZXIuIFVubGVzcyB5b3UKLQlrbm93IHRoYXQgcGVlci10by1wZWVyIChQMlApIG1vZGUgd2lsbCBuZXZlciBiZSB1c2VkLCBvciB0aGUgdGFyZ2V0IHN5c3RlbSBoYXMKLQlsaW1pdGVkIG1lbW9yeSwgIlkiIHNob3VsZCBiZSBzZWxlY3RlZC4KLQogY29uZmlnIDg3MjNBVV9CVF9DT0VYSVNUCiAJYm9vbCAiUmVhbHRlayBSVEw4NzIzQVUgQmx1ZVRvb3RoIENvZXhpc3RlbmNlIgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvTWFrZWZpbGUKaW5kZXggMTFjNmRkNC4uYTYzMTZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L01ha2VmaWxlCkBAIC0xLDE0ICsxLDExIEBACiByODcyM2F1LXkgOj0JCQkJXAotCQljb3JlL3J0d19hcC5vCQlcCiAJCWNvcmUvcnR3X2NtZC5vCQlcCiAJCWNvcmUvcnR3X2VmdXNlLm8JXAotCQljb3JlL3J0d19pby5vCQlcCiAJCWNvcmUvcnR3X2lvY3RsX3NldC5vCVwKIAkJY29yZS9ydHdfaWVlZTgwMjExLm8JXAogCQljb3JlL3J0d19sZWQubwkJXAogCQljb3JlL3J0d19tbG1lLm8JCVwKIAkJY29yZS9ydHdfbWxtZV9leHQubwlcCi0JCWNvcmUvcnR3X3AycC5vCQlcCiAJCWNvcmUvcnR3X3B3cmN0cmwubwlcCiAJCWNvcmUvcnR3X3JlY3YubwkJXAogCQljb3JlL3J0d19zZWN1cml0eS5vCVwKQEAgLTI2LDcgKzIzLDYgQEAKIAkJaGFsL0hhbEhXSW1nODcyM0FfUkYubwlcCiAJCWhhbC9IYWxQd3JTZXFDbWQubwlcCiAJCWhhbC9vZG1fUmVnQ29uZmlnODcyM0EubyBcCi0JCWhhbC9ydGw4NzIzYV9idC1jb2V4aXN0Lm8gXAogCQloYWwvb2RtX2RlYnVnLm8JCVwKIAkJaGFsL29kbV9pbnRlcmZhY2UubwlcCiAJCWhhbC9vZG1fSFdDb25maWcubwlcCkBAIC00NiwxMyArNDIsMTUgQEAKIAkJaGFsL3VzYl9vcHNfbGludXgubwlcCiAJCW9zX2RlcC9pb2N0bF9jZmc4MDIxMS5vCVwKIAkJb3NfZGVwL21sbWVfbGludXgubwlcCi0JCW9zX2RlcC9vc2RlcF9zZXJ2aWNlLm8JXAogCQlvc19kZXAvb3NfaW50ZnMubwlcCiAJCW9zX2RlcC9yZWN2X2xpbnV4Lm8JXAogCQlvc19kZXAvdXNiX2ludGYubwlcCiAJCW9zX2RlcC91c2Jfb3BzX2xpbnV4Lm8JXAogCQlvc19kZXAveG1pdF9saW51eC5vCiAKK3I4NzIzYXUtJChDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QpICs9IGhhbC9ydGw4NzIzYV9idC1jb2V4aXN0Lm8KK3I4NzIzYXUtJChDT05GSUdfODcyM0FVX0FQX01PREUpICs9IGNvcmUvcnR3X2FwLm8KKwogb2JqLSQoQ09ORklHX1I4NzIzQVUpCTo9IHI4NzIzYXUubwogCi1jY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fIC1JJChzcmMpL2luY2x1ZGUKK2NjZmxhZ3MteSArPSAtV3R5cGUtbGltaXRzIC1EX19DSEVDS19FTkRJQU5fXyAtSSQoc3JjKS9pbmNsdWRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2FwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2FwLmMKaW5kZXggYTM1N2U5OC4uYzg3MDBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19hcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfYXAuYwpAQCAtMTgsMTAgKzE4LDkgQEAKICNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDx3aWZpLmg+CisjaW5jbHVkZSA8cnRsODcyM2FfY21kLmg+CisjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgUlRXX1dQQV9PVUkyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIFdNTV9PVUkyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIFdQU19PVUkyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIFAyUF9PVUkyM0FbXTsKQEAgLTc0LDEyICs3MywxMyBAQAogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwbmV0d29ya19tbG1lZXh0ID0gJnBtbG1laW5mby0+bmV0d29yazsKIAl1bnNpZ25lZCBjaGFyICpwaWUgPSBwbmV0d29ya19tbG1lZXh0LT5JRXM7CiAJdTggKnAsICpkc3RfaWUsICpwcmVtYWluZGVyX2llID0gTlVMTCwgKnBiYWNrdXBfcmVtYWluZGVyX2llID0gTlVMTDsKLQl1MTYgdGltX2JpdG1hcF9sZTsKKwlfX2xlMTYgdGltX2JpdG1hcF9sZTsKIAl1aW50IG9mZnNldCwgdG1wX2xlbiwgdGltX2llbGVuLCB0aW1faWVfb2Zmc2V0LCByZW1haW5kZXJfaWVsZW47CiAKIAl0aW1fYml0bWFwX2xlID0gY3B1X3RvX2xlMTYocHN0YXByaXYtPnRpbV9iaXRtYXApOwogCi0JcCA9IHJ0d19nZXRfaWUyM2EocGllICsgX0ZJWEVEX0lFX0xFTkdUSF8sIF9USU1fSUVfLCAmdGltX2llbGVuLCBwbmV0d29ya19tbG1lZXh0LT5JRUxlbmd0aCAtIF9GSVhFRF9JRV9MRU5HVEhfKTsKKwlwID0gcnR3X2dldF9pZTIzYShwaWUgKyBfRklYRURfSUVfTEVOR1RIXywgV0xBTl9FSURfVElNLCAmdGltX2llbGVuLAorCQkJICBwbmV0d29ya19tbG1lZXh0LT5JRUxlbmd0aCAtIF9GSVhFRF9JRV9MRU5HVEhfKTsKIAlpZiAocCAhPSBOVUxMICYmIHRpbV9pZWxlbj4wKSB7CiAJCXRpbV9pZWxlbiArPSAyOwogCkBAIC05OCwxMiArOTgsMTYgQEAKIAkJb2Zmc2V0ID0gX0ZJWEVEX0lFX0xFTkdUSF87CiAKIAkJLyogZ2V0IHNzaWRfaWUgbGVuICovCi0JCXAgPSBydHdfZ2V0X2llMjNhKHBpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX1NTSURfSUVfLCAmdG1wX2xlbiwgKHBuZXR3b3JrX21sbWVleHQtPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfKSk7CisJCXAgPSBydHdfZ2V0X2llMjNhKHBpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgV0xBTl9FSURfU1NJRCwKKwkJCQkgICZ0bXBfbGVuLCAocG5ldHdvcmtfbWxtZWV4dC0+SUVMZW5ndGggLQorCQkJCQkgICAgIF9CRUFDT05fSUVfT0ZGU0VUXykpOwogCQlpZiAocCAhPSBOVUxMKQogCQkJb2Zmc2V0ICs9IHRtcF9sZW4rMjsKIAogCQkvKiAgZ2V0IHN1cHBvcnRlZCByYXRlcyBsZW4gKi8KLQkJcCA9IHJ0d19nZXRfaWUyM2EocGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLCBfU1VQUE9SVEVEUkFURVNfSUVfLCAmdG1wX2xlbiwgKHBuZXR3b3JrX21sbWVleHQtPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfKSk7CisJCXAgPSBydHdfZ2V0X2llMjNhKHBpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgV0xBTl9FSURfU1VQUF9SQVRFUywKKwkJCQkgICZ0bXBfbGVuLCAocG5ldHdvcmtfbWxtZWV4dC0+SUVMZW5ndGggLQorCQkJCQkgICAgIF9CRUFDT05fSUVfT0ZGU0VUXykpOwogCQlpZiAocCAhPSAgTlVMTCkKIAkJCW9mZnNldCArPSB0bXBfbGVuKzI7CiAKQEAgLTEyNCw3ICsxMjgsNyBAQAogCQkJbWVtY3B5KHBiYWNrdXBfcmVtYWluZGVyX2llLCBwcmVtYWluZGVyX2llLCByZW1haW5kZXJfaWVsZW4pOwogCX0KIAotCSpkc3RfaWUrKz0gX1RJTV9JRV87CisJKmRzdF9pZSsrPSBXTEFOX0VJRF9USU07CiAKIAlpZiAoKHBzdGFwcml2LT50aW1fYml0bWFwJjB4ZmYwMCkgJiYgKHBzdGFwcml2LT50aW1fYml0bWFwJjB4MDBmYykpCiAJCXRpbV9pZWxlbiA9IDU7CkBAIC0xODIsNyArMTg2LDcgQEAKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKIAl1OCBjaGtfYWxpdmVfbnVtID0gMDsKLQljaGFyIGNoa19hbGl2ZV9saXN0W05VTV9TVEFdOworCXN0cnVjdCBzdGFfaW5mbyAqY2hrX2FsaXZlX2xpc3RbTlVNX1NUQV07CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfYmgoJnBzdGFwcml2LT5hdXRoX2xpc3RfbG9jayk7CkBAIC0yNDgsNyArMjUyLDcgQEAKIAogCQkJCQkvKiB0byB1cGRhdGUgYmNuIHdpdGggdGltX2JpdG1hcCBmb3IgdGhpcyBzdGF0aW9uICovCiAJCQkJCXBzdGFwcml2LT50aW1fYml0bWFwIHw9IENIS0JJVChwc3RhLT5haWQpOwotCQkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBfVElNX0lFXywgTlVMTCwgZmFsc2UpOworCQkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9USU0sIE5VTEwsIGZhbHNlKTsKIAogCQkJCQlpZiAoIXBtbG1lZXh0LT5hY3RpdmVfa2VlcF9hbGl2ZV9jaGVjaykKIAkJCQkJCWNvbnRpbnVlOwpAQCAtMjU2LDEzICsyNjAsNyBAQAogCQkJfQogCiAJCQlpZiAocG1sbWVleHQtPmFjdGl2ZV9rZWVwX2FsaXZlX2NoZWNrKSB7Ci0JCQkJaW50IHN0YWluZm9fb2Zmc2V0OwotCi0JCQkJc3RhaW5mb19vZmZzZXQgPSBydHdfc3RhaW5mb19vZmZzZXQyM2EocHN0YXByaXYsIHBzdGEpOwotCQkJCWlmIChzdGFpbmZvX29mZnNldF92YWxpZChzdGFpbmZvX29mZnNldCkpIHsKLQkJCQkJY2hrX2FsaXZlX2xpc3RbY2hrX2FsaXZlX251bSsrXSA9IHN0YWluZm9fb2Zmc2V0OwotCQkJCX0KLQorCQkJCWNoa19hbGl2ZV9saXN0W2Noa19hbGl2ZV9udW0rK10gPSBwc3RhOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCkBAIC0yOTYsMTQgKzI5NCwxNCBAQAogCQlpZiAocnR3X2dldF9vcGVyX2NoMjNhKHBhZGFwdGVyKSAhPSBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpIHsKIAkJCWJhY2t1cF9vcGVyX2NoYW5uZWwgPSBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpOwogCQkJU2VsZWN0Q2hhbm5lbDIzYShwYWRhcHRlciwgcG1sbWVleHQtPmN1cl9jaGFubmVsKTsKLQl9CisJCX0KIAogCS8qIGlzc3VlIG51bGwgZGF0YSB0byBjaGVjayBzdGEgYWxpdmUqLwogCWZvciAoaSA9IDA7IGkgPCBjaGtfYWxpdmVfbnVtOyBpKyspIHsKIAogCQlpbnQgcmV0ID0gX0ZBSUw7CiAKLQkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYV9ieV9vZmZzZXQyM2EocHN0YXByaXYsIGNoa19hbGl2ZV9saXN0W2ldKTsKKwkJcHN0YSA9IGNoa19hbGl2ZV9saXN0W2ldOwogCQlpZiAoIShwc3RhLT5zdGF0ZSAmX0ZXX0xJTktFRCkpCiAJCQljb250aW51ZTsKIApAQCAtMzU3LDcgKzM1NSw3IEBACiAJdW5zaWduZWQgaW50IHR4X3JhX2JpdG1hcCA9IDA7CiAJc3RydWN0IGh0X3ByaXYgKnBzdGFfaHQgPSBOVUxMOwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHdsYW5fYnNzaWRfZXggKnBjdXJfbmV0d29yayA9IChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKSZwbWxtZXByaXYtPmN1cl9uZXR3b3JrLm5ldHdvcms7CisJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrLm5ldHdvcms7CiAKIAlpZiAocHN0YSkKIAkJcHN0YV9odCA9ICZwc3RhLT5odHByaXY7CkBAIC0zNzQsMjQgKzM3MiwyNCBAQAogCQkJdHhfcmFfYml0bWFwIHw9IHJ0d19nZXRfYml0X3ZhbHVlX2Zyb21faWVlZV92YWx1ZTIzYShwc3RhLT5ic3NyYXRlc2V0W2ldJjB4N2YpOwogCX0KIAkvKiBuIG1vZGUgcmFfYml0bWFwICovCi0JaWYgKHBzdGFfaHQtPmh0X29wdGlvbikKLQl7Ci0JCXJ0dzIzYV9oYWxfZ2V0X2h3cmVnKHBhZGFwdGVyLCBIV19WQVJfUkZfVFlQRSwgKHU4ICopKCZyZl90eXBlKSk7CisJaWYgKHBzdGFfaHQtPmh0X29wdGlvbikgeworCQlyZl90eXBlID0gcnRsODcyM2FfZ2V0X3JmX3R5cGUocGFkYXB0ZXIpOworCiAJCWlmIChyZl90eXBlID09IFJGXzJUMlIpCiAJCQlsaW1pdCA9IDE2Oy8qICAyUiAqLwogCQllbHNlCiAJCQlsaW1pdCA9IDg7LyogICAxUiAqLwogCi0JCWZvciAoaSA9IDA7IGk8bGltaXQ7IGkrKykgewotCQkJaWYgKHBzdGFfaHQtPmh0X2NhcC5tY3MucnhfbWFza1tpLzhdICYgQklUKGklOCkpCi0JCQkJdHhfcmFfYml0bWFwIHw9IENIS0JJVChpKzEyKTsKKwkJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwkJCWlmIChwc3RhX2h0LT5odF9jYXAubWNzLnJ4X21hc2tbaSAvIDhdICYgQklUKGkgJSA4KSkKKwkJCQl0eF9yYV9iaXRtYXAgfD0gQklUKGkgKyAxMik7CiAJCX0KIAogCQkvKiBtYXggc2hvcnQgR0kgcmF0ZSAqLwogCQlzaG9ydEdJcmF0ZSA9IHBzdGFfaHQtPnNnaTsKIAl9CiAKLQlpZiAocGN1cl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnID4gMTQpIHsKKwlpZiAocGN1cl9uZXR3b3JrLT5EU0NvbmZpZyA+IDE0KSB7CiAJCS8qICA1RyBiYW5kICovCiAJCWlmICh0eF9yYV9iaXRtYXAgJiAweGZmZmYwMDApCiAJCQlzdGFfYmFuZCB8PSBXSVJFTEVTU18xMV81TiB8IFdJUkVMRVNTXzExQTsKQEAgLTQzMiw3ICs0MzAsNyBAQAogCQkvKiBiaXRtYXBbMjg6MzFdPSBSYXRlIEFkYXB0aXZlIGlkICovCiAJCS8qIGFyZ1swOjRdID0gbWFjaWQgKi8KIAkJLyogYXJnWzVdID0gU2hvcnQgR0kgKi8KLQkJcnR3X2hhbF9hZGRfcmFfdGlkMjNhKHBhZGFwdGVyLCB0eF9yYV9iaXRtYXAsIGFyZywgcnNzaV9sZXZlbCk7CisJCXJ0bDg3MjNhX2FkZF9yYXRlYXRpZChwYWRhcHRlciwgdHhfcmFfYml0bWFwLCBhcmcsIHJzc2lfbGV2ZWwpOwogCiAJCWlmIChzaG9ydEdJcmF0ZSA9PSB0cnVlKQogCQkJaW5pdF9yYXRlIHw9IEJJVCg2KTsKQEAgLTQ1NSw3ICs0NTMsNyBAQAogCWludCBpLCBzdXBwb3J0UmF0ZU51bSA9IDA7CiAJdW5zaWduZWQgaW50IHR4X3JhX2JpdG1hcCA9IDA7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcGN1cl9uZXR3b3JrID0gKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopJnBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yazsKKwlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcGN1cl9uZXR3b3JrID0gJnBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yazsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEgPSBydHdfZ2V0X2JjbWNfc3RhaW5mbzIzYShwYWRhcHRlcik7CiAKIAlpZiAocHN0YSkKQEAgLTQ4NCw3ICs0ODIsNyBAQAogCQkJCXR4X3JhX2JpdG1hcCB8PSBydHdfZ2V0X2JpdF92YWx1ZV9mcm9tX2llZWVfdmFsdWUyM2EocHN0YS0+YnNzcmF0ZXNldFtpXSYweDdmKTsKIAkJfQogCi0JCWlmIChwY3VyX25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWcgPiAxNCkgeworCQlpZiAocGN1cl9uZXR3b3JrLT5EU0NvbmZpZyA+IDE0KSB7CiAJCQkvKiBmb3JjZSB0byBBIG1vZGUuIDVHIGRvZXNuJ3Qgc3VwcG9ydCBDQ0sgcmF0ZXMgKi8KIAkJCW5ldHdvcmtfdHlwZSA9IFdJUkVMRVNTXzExQTsKIAkJCXR4X3JhX2JpdG1hcCA9IDB4MTUwOyAvKiAgNiwgMTIsIDI0IE1icHMgKi8KQEAgLTQ5OCw3ICs0OTYsNyBAQAogCQlpbml0X3JhdGUgPSBnZXRfaGlnaGVzdF9yYXRlX2lkeDIzYSh0eF9yYV9iaXRtYXAmMHgwZmZmZmZmZikmMHgzZjsKIAogCQkvKiBhcCBtb2RlICovCi0JCXJ0d19oYWxfc2V0X29kbV92YXIyM2EocGFkYXB0ZXIsIEhBTF9PRE1fU1RBX0lORk8sIHBzdGEsIHRydWUpOworCQlydGw4NzIzYV9TZXRIYWxPRE1WYXIocGFkYXB0ZXIsIEhBTF9PRE1fU1RBX0lORk8sIHBzdGEsIHRydWUpOwogCiAJCXsKIAkJCXU4IGFyZyA9IDA7CkBAIC01MTUsMTYgKzUxMywxMyBAQAogCQkJLyogYml0bWFwWzI4OjMxXT0gUmF0ZSBBZGFwdGl2ZSBpZCAqLwogCQkJLyogYXJnWzA6NF0gPSBtYWNpZCAqLwogCQkJLyogYXJnWzVdID0gU2hvcnQgR0kgKi8KLQkJCXJ0d19oYWxfYWRkX3JhX3RpZDIzYShwYWRhcHRlciwgdHhfcmFfYml0bWFwLCBhcmcsIDApOwotCisJCQlydGw4NzIzYV9hZGRfcmF0ZWF0aWQocGFkYXB0ZXIsIHR4X3JhX2JpdG1hcCwgYXJnLCAwKTsKIAkJfQogCiAJCS8qIHNldCByYV9pZCwgaW5pdF9yYXRlICovCiAJCXBzdGEtPnJhaWQgPSByYWlkOwogCQlwc3RhLT5pbml0X3JhdGUgPSBpbml0X3JhdGU7CiAKLQkJcnR3X3N0YXNzb2NfaHdfcnB0MjNhKHBhZGFwdGVyLCBwc3RhKTsKLQogCQlzcGluX2xvY2tfYmgoJnBzdGEtPmxvY2spOwogCQlwc3RhLT5zdGF0ZSA9IF9GV19MSU5LRUQ7CiAJCXNwaW5fdW5sb2NrX2JoKCZwc3RhLT5sb2NrKTsKQEAgLTU1Niw3ICs1NTEsNyBAQAogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGFwIG1vZGUgKi8KLQlydHdfaGFsX3NldF9vZG1fdmFyMjNhKHBhZGFwdGVyLCBIQUxfT0RNX1NUQV9JTkZPLCBwc3RhLCB0cnVlKTsKKwlydGw4NzIzYV9TZXRIYWxPRE1WYXIocGFkYXB0ZXIsIEhBTF9PRE1fU1RBX0lORk8sIHBzdGEsIHRydWUpOwogCiAJaWYgKHBzZWN1cml0eXByaXYtPmRvdDExQXV0aEFsZ3J0aG0gPT0gZG90MTFBdXRoQWxncnRobV84MDIxWCkKIAkJcHN0YS0+aWVlZTgwMjF4X2Jsb2NrZWQgPSB0cnVlOwpAQCAtNjMyLDkgKzYyNyw4IEBACiAKIAltaW5fTVBEVV9zcGFjaW5nID0gKHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkFNUERVX3BhcmEgJiAweDFjKSA+PiAyOwogCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0UsICh1OCAqKSgmbWluX01QRFVfc3BhY2luZykpOwotCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BTVBEVV9GQUNUT1IsICh1OCAqKSgmbWF4X0FNUERVX2xlbikpOworCXJ0bDg3MjNhX3NldF9hbXBkdV9taW5fc3BhY2UocGFkYXB0ZXIsIG1pbl9NUERVX3NwYWNpbmcpOworCXJ0bDg3MjNhX3NldF9hbXBkdV9mYWN0b3IocGFkYXB0ZXIsIG1heF9BTVBEVV9sZW4pOwogCiAJLyogIENvbmZpZyBTTSBQb3dlciBTYXZlIHNldHRpbmcgKi8KIAlwbWxtZWluZm8tPlNNX1BTID0gKHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkhUX2NhcHNfaW5mbyAmIDB4MEMpID4+IDI7CkBAIC02NDQsMjUgKzYzOCwyMiBAQAogCiBzdGF0aWMgdm9pZCBzdGFydF9ic3NfbmV0d29yayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1ZikKIHsKLQl1OCAqcDsKKwljb25zdCB1OCAqcDsKIAl1OCB2YWw4LCBjdXJfY2hhbm5lbCwgY3VyX2J3bW9kZSwgY3VyX2NoX29mZnNldDsKIAl1MTYgYmNuX2ludGVydmFsOwogCXUzMiBhY3Bhcm07Ci0JaW50IGllX2xlbjsKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ3ByaXYgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBzZWN1cml0eV9wcml2KiBwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7Ci0Jc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrID0gKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopJnBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yazsKKwlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcG5ldHdvcmsgPSAmcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrOwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrX21sbWVleHQgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOwogCXN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKnBodF9pbmZvID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLworCWludCBiY25fZml4ZWRfc2l6ZTsKIAotCWJjbl9pbnRlcnZhbCA9ICh1MTYpcG5ldHdvcmstPkNvbmZpZ3VyYXRpb24uQmVhY29uUGVyaW9kOwotCWN1cl9jaGFubmVsID0gcG5ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWc7CisJYmNuX2ludGVydmFsID0gKHUxNilwbmV0d29yay0+QmVhY29uUGVyaW9kOworCWN1cl9jaGFubmVsID0gcG5ldHdvcmstPkRTQ29uZmlnOwogCWN1cl9id21vZGUgPSBIVF9DSEFOTkVMX1dJRFRIXzIwOzsKIAljdXJfY2hfb2Zmc2V0ID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKIApAQCAtNjc1LDcgKzY2Niw3IEBACiAJLyogdG9kbzogdXBkYXRlIHdtbSwgaHQgY2FwICovCiAJLyogcG1sbWVpbmZvLT5XTU1fZW5hYmxlOyAqLwogCS8qIHBtbG1laW5mby0+SFRfZW5hYmxlOyAqLwotCWlmIChwbWxtZXByaXYtPnFvc3ByaXYucW9zX29wdGlvbikKKwlpZiAocG1sbWVwcml2LT5xb3Nfb3B0aW9uKQogCQlwbWxtZWluZm8tPldNTV9lbmFibGUgPSB0cnVlOwogCWlmIChwbWxtZXByaXYtPmh0cHJpdi5odF9vcHRpb24pIHsKIAkJcG1sbWVpbmZvLT5XTU1fZW5hYmxlID0gdHJ1ZTsKQEAgLTY4Nyw3ICs2NzgsMTAgQEAKIAlpZiAocG1sbWVwcml2LT5jdXJfbmV0d29yay5qb2luX3JlcyAhPSB0cnVlKSB7CiAJCS8qIHNldHRpbmcgb25seSBhdCAgZmlyc3QgdGltZSAqLwogCQkvKiBXRVAgS2V5IHdpbGwgYmUgc2V0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uLCBkbyBub3QgY2xlYXIgQ0FNLiAqLwotCQlpZiAoKHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDQwXykgJiYgKHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDEwNF8pKQorCQlpZiAocHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSAhPQorCQkgICAgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgJiYKKwkJICAgIHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0KKwkJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkKIAkJCWZsdXNoX2FsbF9jYW1fZW50cnkyM2EocGFkYXB0ZXIpOwkvKiBjbGVhciBDQU0gKi8KIAl9CiAKQEAgLTY5NSwyNyArNjg5LDI4IEBACiAJU2V0X01TUjIzYShwYWRhcHRlciwgX0hXX1NUQVRFX0FQXyk7CiAKIAkvKiBTZXQgQlNTSUQgUkVHICovCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9CU1NJRCwgcG5ldHdvcmstPk1hY0FkZHJlc3MpOworCWh3X3Zhcl9zZXRfYnNzaWQocGFkYXB0ZXIsIHBuZXR3b3JrLT5NYWNBZGRyZXNzKTsKIAogCS8qIFNldCBFRENBIHBhcmFtIHJlZyAqLwogCWFjcGFybSA9IDB4MDAyRjMyMTc7IC8qICBWTyAqLwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQUNfUEFSQU1fVk8sICh1OCAqKSgmYWNwYXJtKSk7CisJcnRsODcyM2Ffc2V0X2FjX3BhcmFtX3ZvKHBhZGFwdGVyLCBhY3Bhcm0pOwogCWFjcGFybSA9IDB4MDA1RTQzMTc7IC8qICBWSSAqLwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQUNfUEFSQU1fVkksICh1OCAqKSgmYWNwYXJtKSk7CisJcnRsODcyM2Ffc2V0X2FjX3BhcmFtX3ZpKHBhZGFwdGVyLCBhY3Bhcm0pOwogCWFjcGFybSA9IDB4MDA1ZWE0MmI7Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BQ19QQVJBTV9CRSwgKHU4ICopKCZhY3Bhcm0pKTsKKwlydGw4NzIzYV9zZXRfYWNfcGFyYW1fYmUocGFkYXB0ZXIsIGFjcGFybSk7CiAJYWNwYXJtID0gMHgwMDAwQTQ0NDsgLyogIEJLICovCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BQ19QQVJBTV9CSywgKHU4ICopKCZhY3Bhcm0pKTsKKwlydGw4NzIzYV9zZXRfYWNfcGFyYW1fYmsocGFkYXB0ZXIsIGFjcGFybSk7CiAKIAkvKiBTZXQgU2VjdXJpdHkgKi8KLQl2YWw4ID0gKHBzZWN1cml0eXByaXYtPmRvdDExQXV0aEFsZ3J0aG0gPT0gZG90MTFBdXRoQWxncnRobV84MDIxWCk/IDB4Y2M6IDB4Y2Y7Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9TRUNfQ0ZHLCAodTggKikoJnZhbDgpKTsKKwl2YWw4ID0gKHBzZWN1cml0eXByaXYtPmRvdDExQXV0aEFsZ3J0aG0gPT0gZG90MTFBdXRoQWxncnRobV84MDIxWCkgPworCQkweGNjOiAweGNmOworCXJ0bDg3MjNhX3NldF9zZWNfY2ZnKHBhZGFwdGVyLCB2YWw4KTsKIAogCS8qIEJlYWNvbiBDb250cm9sIHJlbGF0ZWQgcmVnaXN0ZXIgKi8KLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JFQUNPTl9JTlRFUlZBTCwgKHU4ICopKCZiY25faW50ZXJ2YWwpKTsKKwlydGw4NzIzYV9zZXRfYmVhY29uX2ludGVydmFsKHBhZGFwdGVyLCBiY25faW50ZXJ2YWwpOwogCiAJVXBkYXRlQnJhdGVUYmwyM2EocGFkYXB0ZXIsIHBuZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9CQVNJQ19SQVRFLCBwbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMpOworCUhhbFNldEJyYXRlQ2ZnMjNhKHBhZGFwdGVyLCBwbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMpOwogCiAJaWYgKCFwbWxtZXByaXYtPmN1cl9uZXR3b3JrLmpvaW5fcmVzKSB7CiAJCS8qIHNldHRpbmcgb25seSBhdCAgZmlyc3QgdGltZSAqLwpAQCAtNzIzLDIxICs3MTgsMjYgQEAKIAkJLyogZGlzYWJsZSBkeW5hbWljIGZ1bmN0aW9ucywgc3VjaCBhcyBoaWdoIHBvd2VyLCBESUcgKi8KIAogCQkvKiB0dXJuIG9uIGFsbCBkeW5hbWljIGZ1bmN0aW9ucyAqLwotCQlTd2l0Y2hfRE1fRnVuYzIzYShwYWRhcHRlciwgRFlOQU1JQ19BTExfRlVOQ19FTkFCTEUsIHRydWUpOworCQlydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X3NldChwYWRhcHRlciwKKwkJCQkJCSBEWU5BTUlDX0FMTF9GVU5DX0VOQUJMRSk7CiAJfQogCS8qIHNldCBjaGFubmVsLCBid21vZGUgKi8KLQlwID0gcnR3X2dldF9pZTIzYSgocG5ldHdvcmstPklFcyArIHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKSksCi0JCQkgIF9IVF9BRERfSU5GT19JRV8sICZpZV9sZW4sIChwbmV0d29yay0+SUVMZW5ndGggLQotCQkJICBzaXplb2Yoc3RydWN0IG5kaXNfODAyXzExX2ZpeGVkX2llcykpKTsKLQlpZiAocCAmJiBpZV9sZW4pIHsKLQkJcGh0X2luZm8gPSAoc3RydWN0IEhUX2luZm9fZWxlbWVudCAqKShwKzIpOworCWJjbl9maXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKIAotCQlpZiAoKHByZWdwcml2LT5jYnc0MF9lbmFibGUpICYmCShwaHRfaW5mby0+aW5mb3NbMF0gJiBCSVQoMikpKSB7CisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfT1BFUkFUSU9OLAorCQkJICAgICBwbmV0d29yay0+SUVzICsgYmNuX2ZpeGVkX3NpemUsCisJCQkgICAgIHBuZXR3b3JrLT5JRUxlbmd0aCAtIGJjbl9maXhlZF9zaXplKTsKKwlpZiAocCAmJiBwWzFdKSB7CisJCXBodF9pbmZvID0gKHN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKikocCArIDIpOworCisJCWlmIChwcmVncHJpdi0+Y2J3NDBfZW5hYmxlICYmIHBodF9pbmZvLT5pbmZvc1swXSAmIEJJVCgyKSkgewogCQkJLyogc3dpdGNoIHRvIHRoZSA0ME0gSHogbW9kZSAqLwogCQkJY3VyX2J3bW9kZSA9IEhUX0NIQU5ORUxfV0lEVEhfNDA7CiAJCQlzd2l0Y2ggKHBodF9pbmZvLT5pbmZvc1swXSAmIDB4MykgewogCQkJY2FzZSAxOgotCQkJCS8qIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0ID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0xPV0VSOyAqLworCQkJCS8qIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0ID0KKwkJCQkgICBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfTE9XRVI7ICovCiAJCQkJY3VyX2NoX29mZnNldCA9IEhBTF9QUklNRV9DSE5MX09GRlNFVF9MT1dFUjsKIAkJCQlicmVhazsKIAkJCWNhc2UgMzoKQEAgLTc2NCwxOSArNzY0LDEzIEBACiAJdXBkYXRlX3dpcmVsZXNzX21vZGUyM2EocGFkYXB0ZXIpOwogCiAJLyogdWRwYXRlIGNhcGFiaWxpdHkgYWZ0ZXIgY3VyX3dpcmVsZXNzX21vZGUgdXBkYXRlZCAqLwotCXVwZGF0ZV9jYXBpbmZvMjNhKHBhZGFwdGVyLCBydHdfZ2V0X2NhcGFiaWxpdHkyM2EoKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopcG5ldHdvcmspKTsKKwl1cGRhdGVfY2FwaW5mbzIzYShwYWRhcHRlciwgcnR3X2dldF9jYXBhYmlsaXR5MjNhKHBuZXR3b3JrKSk7CiAKIAkvKiBsZXQgcG5ldHdvcmtfbWxtZWV4dCA9PSBwbmV0d29ya19tbG1lLiAqLwogCW1lbWNweShwbmV0d29ya19tbG1lZXh0LCBwbmV0d29yaywgcG5ldHdvcmstPkxlbmd0aCk7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCW1lbWNweShwd2RpbmZvLT5wMnBfZ3JvdXBfc3NpZCwgcG5ldHdvcmstPlNzaWQuc3NpZCwKLQkgICAgICAgcG5ldHdvcmstPlNzaWQuc3NpZF9sZW4pOwotCXB3ZGluZm8tPnAycF9ncm91cF9zc2lkX2xlbiA9IHBuZXR3b3JrLT5Tc2lkLnNzaWRfbGVuOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KIAlpZiAocG1sbWVleHQtPmJzdGFydF9ic3MpIHsKLQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgX1RJTV9JRV8sIE5VTEwsIGZhbHNlKTsKKwkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgV0xBTl9FSURfVElNLCBOVUxMLCBmYWxzZSk7CiAKIAkJLyogaXNzdWUgYmVhY29uIGZyYW1lICovCiAJCWlmIChzZW5kX2JlYWNvbjIzYShwYWRhcHRlcikgPT0gX0ZBSUwpCkBAIC03ODcsMTkgKzc4MSwyMCBAQAogCXVwZGF0ZV9ibWNfc3RhKHBhZGFwdGVyKTsKIH0KIAotaW50IHJ0d19jaGVja19iZWFjb25fZGF0YTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1ZiwgIGludCBsZW4pCitpbnQgcnR3X2NoZWNrX2JlYWNvbl9kYXRhMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSBfU1VDQ0VTUzsKIAl1OCAqcDsKIAl1OCAqcEhUX2NhcHNfaWUgPSBOVUxMOwogCXU4ICpwSFRfaW5mb19pZSA9IE5VTEw7CiAJc3RydWN0IHN0YV9pbmZvICpwc3RhID0gTlVMTDsKKwlfX2xlMTYgKnBiZWFjb247CiAJdTE2IGNhcCwgaHRfY2FwID0gZmFsc2U7CiAJdWludCBpZV9sZW4gPSAwOwogCWludCBncm91cF9jaXBoZXIsIHBhaXJ3aXNlX2NpcGhlcjsKIAl1OCBjaGFubmVsLCBuZXR3b3JrX3R5cGUsIHN1cHBvcnRSYXRlW05ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWF07CiAJaW50IHN1cHBvcnRSYXRlTnVtID0gMDsKLQl1OCBPVUkxW10gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwMX07CiAJdTggV01NX1BBUkFfSUVbXSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAxLCAweDAxfTsKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7CkBAIC04MjMsNyArODE4LDcgQEAKIAlpZiAoIWNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSkKIAkJcmV0dXJuIF9GQUlMOwogCi0JaWYgKGxlbj5NQVhfSUVfU1opCisJaWYgKGxlbiA+IE1BWF9JRV9TWikKIAkJcmV0dXJuIF9GQUlMOwogCiAJcGJzc19uZXR3b3JrLT5JRUxlbmd0aCA9IGxlbjsKQEAgLTgzMiw3ICs4MjcsOCBAQAogCiAJbWVtY3B5KGllLCBwYnVmLCBwYnNzX25ldHdvcmstPklFTGVuZ3RoKTsKIAotCWlmIChwYnNzX25ldHdvcmstPkluZnJhc3RydWN0dXJlTW9kZSE9IE5kaXM4MDJfMTFBUE1vZGUpCisJaWYgKHBic3NfbmV0d29yay0+aWZtb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIHBic3NfbmV0d29yay0+aWZtb2RlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykKIAkJcmV0dXJuIF9GQUlMOwogCiAJcGJzc19uZXR3b3JrLT5Sc3NpID0gMDsKQEAgLTg0MSwxNCArODM3LDE0IEBACiAKIAkvKiBiZWFjb24gaW50ZXJ2YWwgKi8KIAkvKiBpZSArIDg7ICA4OiBUaW1lU3RhbXAsIDI6IEJlYWNvbiBJbnRlcnZhbCAyOkNhcGFiaWxpdHkgKi8KLQlwID0gcnR3X2dldF9iZWFjb25faW50ZXJ2YWwyM2FfZnJvbV9pZShpZSk7Ci0JcGJzc19uZXR3b3JrLT5Db25maWd1cmF0aW9uLkJlYWNvblBlcmlvZCA9IGdldF91bmFsaWduZWRfbGUxNihwKTsKKwlwYmVhY29uID0gcnR3X2dldF9iZWFjb25faW50ZXJ2YWwyM2FfZnJvbV9pZShpZSk7CisJcGJzc19uZXR3b3JrLT5CZWFjb25QZXJpb2QgPSBnZXRfdW5hbGlnbmVkX2xlMTYocGJlYWNvbik7CiAKIAkvKiBjYXBhYmlsaXR5ICovCiAJY2FwID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGllKTsKIAogCS8qIFNTSUQgKi8KLQlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX1NTSURfSUVfLCAmaWVfbGVuLAorCXAgPSBydHdfZ2V0X2llMjNhKGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLCBXTEFOX0VJRF9TU0lELCAmaWVfbGVuLAogCQkJICAocGJzc19uZXR3b3JrLT5JRUxlbmd0aCAtX0JFQUNPTl9JRV9PRkZTRVRfKSk7CiAJaWYgKHAgJiYgaWVfbGVuID4gMCkgewogCQltZW1zZXQoJnBic3NfbmV0d29yay0+U3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSk7CkBAIC04NTgsMTcgKzg1NCwxNiBAQAogCiAJLyogY2hubmVsICovCiAJY2hhbm5lbCA9IDA7Ci0JcGJzc19uZXR3b3JrLT5Db25maWd1cmF0aW9uLkxlbmd0aCA9IDA7Ci0JcCA9IHJ0d19nZXRfaWUyM2EoaWUgKyBfQkVBQ09OX0lFX09GRlNFVF8sIF9EU1NFVF9JRV8sICZpZV9sZW4sCisJcCA9IHJ0d19nZXRfaWUyM2EoaWUgKyBfQkVBQ09OX0lFX09GRlNFVF8sIFdMQU5fRUlEX0RTX1BBUkFNUywgJmllX2xlbiwKIAkJCSAgKHBic3NfbmV0d29yay0+SUVMZW5ndGggLSBfQkVBQ09OX0lFX09GRlNFVF8pKTsKIAlpZiAocCAmJiBpZV9sZW4gPiAwKQogCQljaGFubmVsID0gKihwICsgMik7CiAKLQlwYnNzX25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWcgPSBjaGFubmVsOworCXBic3NfbmV0d29yay0+RFNDb25maWcgPSBjaGFubmVsOwogCiAJbWVtc2V0KHN1cHBvcnRSYXRlLCAwLCBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVgpOwogCS8qICBnZXQgc3VwcG9ydGVkIHJhdGVzICovCi0JcCA9IHJ0d19nZXRfaWUyM2EoaWUgKyBfQkVBQ09OX0lFX09GRlNFVF8sIF9TVVBQT1JURURSQVRFU19JRV8sICZpZV9sZW4sCisJcCA9IHJ0d19nZXRfaWUyM2EoaWUgKyBfQkVBQ09OX0lFX09GRlNFVF8sIFdMQU5fRUlEX1NVUFBfUkFURVMsICZpZV9sZW4sCiAJCQkgIChwYnNzX25ldHdvcmstPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfKSk7CiAJaWYgKHApIHsKIAkJbWVtY3B5KHN1cHBvcnRSYXRlLCBwKzIsIGllX2xlbik7CkBAIC04NzYsNyArODcxLDcgQEAKIAl9CiAKIAkvKiBnZXQgZXh0X3N1cHBvcnRlZCByYXRlcyAqLwotCXAgPSBydHdfZ2V0X2llMjNhKGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywKKwlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsCiAJCQkgICZpZV9sZW4sIHBic3NfbmV0d29yay0+SUVMZW5ndGggLSBfQkVBQ09OX0lFX09GRlNFVF8pOwogCWlmIChwKSB7CiAJCW1lbWNweShzdXBwb3J0UmF0ZStzdXBwb3J0UmF0ZU51bSwgcCsyLCBpZV9sZW4pOwpAQCAtODg5LDEwICs4ODQsMTAgQEAKIAlydHdfc2V0X3N1cHBvcnRlZF9yYXRlMjNhKHBic3NfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMsIG5ldHdvcmtfdHlwZSk7CiAKIAkvKiBwYXJzaW5nIEVSUF9JRSAqLwotCXAgPSBydHdfZ2V0X2llMjNhKGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLCBfRVJQSU5GT19JRV8sICZpZV9sZW4sCisJcCA9IHJ0d19nZXRfaWUyM2EoaWUgKyBfQkVBQ09OX0lFX09GRlNFVF8sIFdMQU5fRUlEX0VSUF9JTkZPLCAmaWVfbGVuLAogCQkJICAocGJzc19uZXR3b3JrLT5JRUxlbmd0aCAtIF9CRUFDT05fSUVfT0ZGU0VUXykpOwogCWlmIChwICYmIGllX2xlbiA+IDApCi0JCUVSUF9JRV9oYW5kbGVyMjNhKHBhZGFwdGVyLCAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKilwKTsKKwkJRVJQX0lFX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHApOwogCiAJLyogdXBkYXRlIHByaXZhY3kvc2VjdXJpdHkgKi8KIAlpZiAoY2FwICYgQklUKDQpKQpAQCAtOTA0LDkgKzg5OSw5IEBACiAKIAkvKiB3cGEyICovCiAJZ3JvdXBfY2lwaGVyID0gMDsgcGFpcndpc2VfY2lwaGVyID0gMDsKLQlwc2VjdXJpdHlwcml2LT53cGEyX2dyb3VwX2NpcGhlciA9IF9OT19QUklWQUNZXzsKLQlwc2VjdXJpdHlwcml2LT53cGEyX3BhaXJ3aXNlX2NpcGhlciA9IF9OT19QUklWQUNZXzsKLQlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX1JTTl9JRV8yXywgJmllX2xlbiwKKwlwc2VjdXJpdHlwcml2LT53cGEyX2dyb3VwX2NpcGhlciA9IDA7CisJcHNlY3VyaXR5cHJpdi0+d3BhMl9wYWlyd2lzZV9jaXBoZXIgPSAwOworCXAgPSBydHdfZ2V0X2llMjNhKGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLCBXTEFOX0VJRF9SU04sICZpZV9sZW4sCiAJCQkgIChwYnNzX25ldHdvcmstPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfKSk7CiAJaWYgKHAgJiYgaWVfbGVuID4gMCkgewogCQlpZiAocnR3X3BhcnNlX3dwYTJfaWUyM2EocCwgaWVfbGVuKzIsICZncm91cF9jaXBoZXIsCkBAIC05MjUsMTMgKzkyMCwxMyBAQAogCWllX2xlbiA9IDA7CiAJZ3JvdXBfY2lwaGVyID0gMDsKIAlwYWlyd2lzZV9jaXBoZXIgPSAwOwotCXBzZWN1cml0eXByaXYtPndwYV9ncm91cF9jaXBoZXIgPSBfTk9fUFJJVkFDWV87Ci0JcHNlY3VyaXR5cHJpdi0+d3BhX3BhaXJ3aXNlX2NpcGhlciA9IF9OT19QUklWQUNZXzsKKwlwc2VjdXJpdHlwcml2LT53cGFfZ3JvdXBfY2lwaGVyID0gMDsKKwlwc2VjdXJpdHlwcml2LT53cGFfcGFpcndpc2VfY2lwaGVyID0gMDsKIAlmb3IgKHAgPSBpZSArIF9CRUFDT05fSUVfT0ZGU0VUXzsgO3AgKz0gKGllX2xlbiArIDIpKSB7Ci0JCXAgPSBydHdfZ2V0X2llMjNhKHAsIF9TU05fSUVfMV8sICZpZV9sZW4sCisJCXAgPSBydHdfZ2V0X2llMjNhKHAsIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywgJmllX2xlbiwKIAkJCQkgIChwYnNzX25ldHdvcmstPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfIC0KIAkJCQkgIChpZV9sZW4gKyAyKSkpOwotCQlpZiAoKHApICYmICghbWVtY21wKHArMiwgT1VJMSwgNCkpKSB7CisJCWlmICgocCkgJiYgKCFtZW1jbXAocCsyLCBSVFdfV1BBX09VSTIzQV9UWVBFLCA0KSkpIHsKIAkJCWlmIChydHdfcGFyc2Vfd3BhX2llMjNhKHAsIGllX2xlbisyLCAmZ3JvdXBfY2lwaGVyLAogCQkJCQkJJnBhaXJ3aXNlX2NpcGhlciwgTlVMTCkgPT0gX1NVQ0NFU1MpIHsKIAkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMUF1dGhBbGdydGhtID0gZG90MTFBdXRoQWxncnRobV84MDIxWDsKQEAgLTk1MywxNCArOTQ4LDE0IEBACiAKIAkvKiB3bW0gKi8KIAlpZV9sZW4gPSAwOwotCXBtbG1lcHJpdi0+cW9zcHJpdi5xb3Nfb3B0aW9uID0gMDsKKwlwbWxtZXByaXYtPnFvc19vcHRpb24gPSAwOwogCWlmIChwcmVnaXN0cnlwcml2LT53bW1fZW5hYmxlKSB7CiAJCWZvciAocCA9IGllICsgX0JFQUNPTl9JRV9PRkZTRVRfOyA7cCArPSAoaWVfbGVuICsgMikpIHsKLQkJCXAgPSBydHdfZ2V0X2llMjNhKHAsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCAmaWVfbGVuLAorCQkJcCA9IHJ0d19nZXRfaWUyM2EocCwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLCAmaWVfbGVuLAogCQkJCQkgIChwYnNzX25ldHdvcmstPklFTGVuZ3RoIC0KIAkJCQkJICBfQkVBQ09OX0lFX09GRlNFVF8gLSAoaWVfbGVuICsgMikpKTsKIAkJCWlmICgocCkgJiYgIW1lbWNtcChwKzIsIFdNTV9QQVJBX0lFLCA2KSkgewotCQkJCXBtbG1lcHJpdi0+cW9zcHJpdi5xb3Nfb3B0aW9uID0gMTsKKwkJCQlwbWxtZXByaXYtPnFvc19vcHRpb24gPSAxOwogCiAJCQkJKihwKzgpIHw9IEJJVCg3KTsvKiBRb1MgSW5mbywgc3VwcG9ydCBVLUFQU0QgKi8KIApAQCAtOTc4LDcgKzk3Myw3IEBACiAJCX0KIAl9CiAJLyogcGFyc2luZyBIVF9DQVBfSUUgKi8KLQlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX0hUX0NBUEFCSUxJVFlfSUVfLCAmaWVfbGVuLAorCXAgPSBydHdfZ2V0X2llMjNhKGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLCBXTEFOX0VJRF9IVF9DQVBBQklMSVRZLCAmaWVfbGVuLAogCQkJICAocGJzc19uZXR3b3JrLT5JRUxlbmd0aCAtIF9CRUFDT05fSUVfT0ZGU0VUXykpOwogCWlmIChwICYmIGllX2xlbiA+IDApIHsKIAkJdTggcmZfdHlwZTsKQEAgLTk5MCw3ICs5ODUsNyBAQAogCQlodF9jYXAgPSB0cnVlOwogCQluZXR3b3JrX3R5cGUgfD0gV0lSRUxFU1NfMTFfMjROOwogCi0JCXJ0dzIzYV9oYWxfZ2V0X2h3cmVnKHBhZGFwdGVyLCBIV19WQVJfUkZfVFlQRSwgKHU4ICopKCZyZl90eXBlKSk7CisJCXJmX3R5cGUgPSBydGw4NzIzYV9nZXRfcmZfdHlwZShwYWRhcHRlcik7CiAKIAkJaWYgKChwc2VjdXJpdHlwcml2LT53cGFfcGFpcndpc2VfY2lwaGVyICYgV1BBX0NJUEhFUl9DQ01QKSB8fAogCQkgICAgKHBzZWN1cml0eXByaXYtPndwYTJfcGFpcndpc2VfY2lwaGVyICYgV1BBX0NJUEhFUl9DQ01QKSkKQEAgLTEwMTAsMjkgKzEwMDUsMTEgQEAKIAl9CiAKIAkvKiBwYXJzaW5nIEhUX0lORk9fSUUgKi8KLQlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX0hUX0FERF9JTkZPX0lFXywgJmllX2xlbiwKKwlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgV0xBTl9FSURfSFRfT1BFUkFUSU9OLCAmaWVfbGVuLAogCQkJICAocGJzc19uZXR3b3JrLT5JRUxlbmd0aCAtIF9CRUFDT05fSUVfT0ZGU0VUXykpOwogCWlmIChwICYmIGllX2xlbiA+IDApCiAJCXBIVF9pbmZvX2llID0gcDsKIAotCXN3aXRjaCAobmV0d29ya190eXBlKSB7Ci0JY2FzZSBXSVJFTEVTU18xMUI6Ci0JCXBic3NfbmV0d29yay0+TmV0d29ya1R5cGVJblVzZSA9IE5kaXM4MDJfMTFEUzsKLQkJYnJlYWs7Ci0JY2FzZSBXSVJFTEVTU18xMUc6Ci0JY2FzZSBXSVJFTEVTU18xMUJHOgotICAgICAgICAgICAgY2FzZSBXSVJFTEVTU18xMUdfMjROOgotCWNhc2UgV0lSRUxFU1NfMTFCR18yNE46Ci0JCXBic3NfbmV0d29yay0+TmV0d29ya1R5cGVJblVzZSA9IE5kaXM4MDJfMTFPRkRNMjQ7Ci0JCWJyZWFrOwotCWNhc2UgV0lSRUxFU1NfMTFBOgotCQlwYnNzX25ldHdvcmstPk5ldHdvcmtUeXBlSW5Vc2UgPSBOZGlzODAyXzExT0ZETTU7Ci0JCWJyZWFrOwotCWRlZmF1bHQgOgotCQlwYnNzX25ldHdvcmstPk5ldHdvcmtUeXBlSW5Vc2UgPSBOZGlzODAyXzExT0ZETTI0OwotCQlicmVhazsKLQl9Ci0KIAlwbWxtZXByaXYtPmN1cl9uZXR3b3JrLm5ldHdvcmtfdHlwZSA9IG5ldHdvcmtfdHlwZTsKIAogCXBtbG1lcHJpdi0+aHRwcml2Lmh0X29wdGlvbiA9IGZhbHNlOwpAQCAtMTA0MCwxNyArMTAxNywxNyBAQAogCS8qIGh0X2NhcCAqLwogCWlmIChwcmVnaXN0cnlwcml2LT5odF9lbmFibGUgJiYgaHRfY2FwKSB7CiAJCXBtbG1lcHJpdi0+aHRwcml2Lmh0X29wdGlvbiA9IHRydWU7Ci0JCXBtbG1lcHJpdi0+cW9zcHJpdi5xb3Nfb3B0aW9uID0gMTsKKwkJcG1sbWVwcml2LT5xb3Nfb3B0aW9uID0gMTsKIAogCQlpZiAocHJlZ2lzdHJ5cHJpdi0+YW1wZHVfZW5hYmxlID09IDEpCiAJCQlwbWxtZXByaXYtPmh0cHJpdi5hbXBkdV9lbmFibGUgPSB0cnVlOwogCi0JCUhUX2NhcHNfaGFuZGxlcjIzYShwYWRhcHRlciwgKHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICopcEhUX2NhcHNfaWUpOworCQlIVF9jYXBzX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHBIVF9jYXBzX2llKTsKIAotCQlIVF9pbmZvX2hhbmRsZXIyM2EocGFkYXB0ZXIsIChzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqKXBIVF9pbmZvX2llKTsKKwkJSFRfaW5mb19oYW5kbGVyMjNhKHBhZGFwdGVyLCBwSFRfaW5mb19pZSk7CiAJfQogCi0JcGJzc19uZXR3b3JrLT5MZW5ndGggPSBnZXRfd2xhbl9ic3NpZF9leF9zeigoc3RydWN0IHdsYW5fYnNzaWRfZXggICopcGJzc19uZXR3b3JrKTsKKwlwYnNzX25ldHdvcmstPkxlbmd0aCA9IGdldF93bGFuX2Jzc2lkX2V4X3N6KHBic3NfbmV0d29yayk7CiAKIAkvKiBpc3N1ZSBiZWFjb24gdG8gc3RhcnQgYnNzIG5ldHdvcmsgKi8KIAlzdGFydF9ic3NfbmV0d29yayhwYWRhcHRlciwgKHU4KilwYnNzX25ldHdvcmspOwpAQCAtMTA1OCw3ICsxMDM1LDkgQEAKIAkvKiBhbGxvYyBzdGFfaW5mbyBmb3IgYXAgaXRzZWxmICovCiAJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsIHBic3NfbmV0d29yay0+TWFjQWRkcmVzcyk7CiAJaWYgKCFwc3RhKSB7Ci0JCXBzdGEgPSBydHdfYWxsb2Nfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsIHBic3NfbmV0d29yay0+TWFjQWRkcmVzcyk7CisJCXBzdGEgPSBydHdfYWxsb2Nfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsCisJCQkJCSAgICBwYnNzX25ldHdvcmstPk1hY0FkZHJlc3MsCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwc3RhKQogCQkJcmV0dXJuIF9GQUlMOwogCX0KQEAgLTEyMDAsMjQgKzExNzksMjEgQEAKIAkJcmV0dXJuOwogCiAJLyogcGFyc2luZyBFUlBfSUUgKi8KLQlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX0VSUElORk9fSUVfLCAmbGVuLCAocG5ldHdvcmstPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfKSk7Ci0JaWYgKHAgJiYgbGVuPjApCi0JewotCQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqIHBJRSA9IChzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqKXA7Ci0KKwlwID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgV0xBTl9FSURfRVJQX0lORk8sICZsZW4sIChwbmV0d29yay0+SUVMZW5ndGggLSBfQkVBQ09OX0lFX09GRlNFVF8pKTsKKwlpZiAocCAmJiBsZW4gPiAwKSB7CiAJCWlmIChwbWxtZXByaXYtPm51bV9zdGFfbm9uX2VycCA9PSAxKQotCQkJcElFLT5kYXRhWzBdIHw9IFdMQU5fRVJQX05PTl9FUlBfUFJFU0VOVCB8CisJCQlwWzJdIHw9IFdMQU5fRVJQX05PTl9FUlBfUFJFU0VOVCB8CiAJCQkJV0xBTl9FUlBfVVNFX1BST1RFQ1RJT047CiAJCWVsc2UKLQkJCXBJRS0+ZGF0YVswXSAmPSB+KFdMQU5fRVJQX05PTl9FUlBfUFJFU0VOVCB8Ci0JCQkJCSAgV0xBTl9FUlBfVVNFX1BST1RFQ1RJT04pOworCQkJcFsyXSAmPSB+KFdMQU5fRVJQX05PTl9FUlBfUFJFU0VOVCB8CisJCQkJICBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTik7CiAKIAkJaWYgKHBtbG1lcHJpdi0+bnVtX3N0YV9ub19zaG9ydF9wcmVhbWJsZSA+IDApCi0JCQlwSUUtPmRhdGFbMF0gfD0gV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFOworCQkJcFsyXSB8PSBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEU7CiAJCWVsc2UKLQkJCXBJRS0+ZGF0YVswXSAmPSB+KFdMQU5fRVJQX0JBUktFUl9QUkVBTUJMRSk7CisJCQlwWzJdICY9IH4oV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFKTsKIAotCQlFUlBfSUVfaGFuZGxlcjIzYShwYWRhcHRlciwgcElFKTsKKwkJRVJQX0lFX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHApOwogCX0KIH0KIApAQCAtMTI1OSw2ICsxMjM1LDEwIEBACiAKIAlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlwd3BzX2llX3NyYyA9IHBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZTsKKwlpZiAocHdwc19pZV9zcmMgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJcHdwc19pZSA9IHJ0d19nZXRfd3BzX2llMjNhKGllK19GSVhFRF9JRV9MRU5HVEhfLCBpZWxlbi1fRklYRURfSUVfTEVOR1RIXywgTlVMTCwgJndwc19pZWxlbik7CiAKIAlpZiAocHdwc19pZSA9PSBOVUxMIHx8IHdwc19pZWxlbiA9PSAwKQpAQCAtMTI3NywxMCArMTI1Nyw2IEBACiAJCQkgICAgICAgcmVtYWluZGVyX2llbGVuKTsKIAl9CiAKLQlwd3BzX2llX3NyYyA9IHBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZTsKLQlpZiAocHdwc19pZV9zcmMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCiAJd3BzX2llbGVuID0gKHVpbnQpcHdwc19pZV9zcmNbMV07LyogdG8gZ2V0IGllIGRhdGEgbGVuICovCiAJaWYgKCh3cHNfb2Zmc2V0K3dwc19pZWxlbisyK3JlbWFpbmRlcl9pZWxlbik8PSBNQVhfSUVfU1opCiAJewpAQCAtMTMwNiwyNiArMTI4MiwxNiBAQAogewogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICghbWVtY21wKFJUV19XUEFfT1VJMjNBLCBvdWksIDQpKQotCXsKKwlpZiAoIW1lbWNtcChSVFdfV1BBX09VSTIzQV9UWVBFLCBvdWksIDQpKQogCQl1cGRhdGVfYmNuX3dwYV9pZShwYWRhcHRlcik7Ci0JfQogCWVsc2UgaWYgKCFtZW1jbXAoV01NX09VSTIzQSwgb3VpLCA0KSkKLQl7CiAJCXVwZGF0ZV9iY25fd21tX2llKHBhZGFwdGVyKTsKLQl9CiAJZWxzZSBpZiAoIW1lbWNtcChXUFNfT1VJMjNBLCBvdWksIDQpKQotCXsKIAkJdXBkYXRlX2Jjbl93cHNfaWUocGFkYXB0ZXIpOwotCX0KIAllbHNlIGlmICghbWVtY21wKFAyUF9PVUkyM0EsIG91aSwgNCkpCi0JewogCQl1cGRhdGVfYmNuX3AycF9pZShwYWRhcHRlcik7Ci0JfQogCWVsc2UKLQl7CiAJCURCR184NzIzQSgidW5rbm93biBPVUkgdHlwZSFcbiIpOwotCX0KIH0KIAogdm9pZCB1cGRhdGVfYmVhY29uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGllX2lkLCB1OCAqb3VpLCB1OCB0eCkKQEAgLTEzNTAsNTAgKzEzMTYsMzcgQEAKIAogCXN3aXRjaCAoaWVfaWQpCiAJewotCQljYXNlIDB4RkY6CisJY2FzZSAweEZGOgorCQkvKiA4OiBUaW1lU3RhbXAsIDI6IEJlYWNvbiBJbnRlcnZhbCAyOkNhcGFiaWxpdHkgKi8KKwkJdXBkYXRlX2Jjbl9maXhlZF9pZShwYWRhcHRlcik7CisJCWJyZWFrOwogCi0JCQl1cGRhdGVfYmNuX2ZpeGVkX2llKHBhZGFwdGVyKTsvKiA4OiBUaW1lU3RhbXAsIDI6IEJlYWNvbiBJbnRlcnZhbCAyOkNhcGFiaWxpdHkgKi8KKwljYXNlIFdMQU5fRUlEX1RJTToKKwkJdXBkYXRlX0JDTlRJTShwYWRhcHRlcik7CisJCWJyZWFrOwogCi0JCQlicmVhazsKKwljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgorCQl1cGRhdGVfYmNuX2VycGluZm9faWUocGFkYXB0ZXIpOworCQlicmVhazsKIAotCQljYXNlIF9USU1fSUVfOgorCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToKKwkJdXBkYXRlX2Jjbl9odGNhcF9pZShwYWRhcHRlcik7CisJCWJyZWFrOwogCi0JCQl1cGRhdGVfQkNOVElNKHBhZGFwdGVyKTsKKwljYXNlIFdMQU5fRUlEX1JTTjoKKwkJdXBkYXRlX2Jjbl9yc25faWUocGFkYXB0ZXIpOworCQlicmVhazsKIAotCQkJYnJlYWs7CisJY2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046CisJCXVwZGF0ZV9iY25faHRpbmZvX2llKHBhZGFwdGVyKTsKKwkJYnJlYWs7CiAKLQkJY2FzZSBfRVJQSU5GT19JRV86CisJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6CisJCXVwZGF0ZV9iY25fdmVuZG9yX3NwZWNfaWUocGFkYXB0ZXIsIG91aSk7CisJCWJyZWFrOwogCi0JCQl1cGRhdGVfYmNuX2VycGluZm9faWUocGFkYXB0ZXIpOwotCi0JCQlicmVhazsKLQotCQljYXNlIF9IVF9DQVBBQklMSVRZX0lFXzoKLQotCQkJdXBkYXRlX2Jjbl9odGNhcF9pZShwYWRhcHRlcik7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgX1JTTl9JRV8yXzoKLQotCQkJdXBkYXRlX2Jjbl9yc25faWUocGFkYXB0ZXIpOwotCi0JCQlicmVhazsKLQotCQljYXNlIF9IVF9BRERfSU5GT19JRV86Ci0KLQkJCXVwZGF0ZV9iY25faHRpbmZvX2llKHBhZGFwdGVyKTsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBfVkVORE9SX1NQRUNJRklDX0lFXzoKLQotCQkJdXBkYXRlX2Jjbl92ZW5kb3Jfc3BlY19pZShwYWRhcHRlciwgb3VpKTsKLQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXBtbG1lcHJpdi0+dXBkYXRlX2JjbiA9IHRydWU7CkBAIC0xNDMyLDI4ICsxMzg1LDI4IEBACiAJREJHXzg3MjNBKCIlcyBjdXJyZW50IG9wZXJhdGlvbiBtb2RlID0gMHglWFxuIiwKIAkJICAgX19mdW5jX18sIHBtbG1lcHJpdi0+aHRfb3BfbW9kZSk7CiAKLQlpZiAoIShwbWxtZXByaXYtPmh0X29wX21vZGUgJiBIVF9JTkZPX09QRVJBVElPTl9NT0RFX05PTl9HRl9ERVZTX1BSRVNFTlQpCisJaWYgKCEocG1sbWVwcml2LT5odF9vcF9tb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCkKIAkgICAgJiYgcG1sbWVwcml2LT5udW1fc3RhX2h0X25vX2dmKSB7CiAJCXBtbG1lcHJpdi0+aHRfb3BfbW9kZSB8PQotCQkJSFRfSU5GT19PUEVSQVRJT05fTU9ERV9OT05fR0ZfREVWU19QUkVTRU5UOworCQkJSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVDsKIAkJb3BfbW9kZV9jaGFuZ2VzKys7CiAJfSBlbHNlIGlmICgocG1sbWVwcml2LT5odF9vcF9tb2RlICYKLQkJICAgIEhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0dGX0RFVlNfUFJFU0VOVCkgJiYKKwkJICAgIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpICYmCiAJCSAgIHBtbG1lcHJpdi0+bnVtX3N0YV9odF9ub19nZiA9PSAwKSB7CiAJCXBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmPQotCQkJfkhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0dGX0RFVlNfUFJFU0VOVDsKKwkJCX5JRUVFODAyMTFfSFRfT1BfTU9ERV9OT05fR0ZfU1RBX1BSU05UOwogCQlvcF9tb2RlX2NoYW5nZXMrKzsKIAl9CiAKLQlpZiAoIShwbWxtZXByaXYtPmh0X29wX21vZGUgJiBIVF9JTkZPX09QRVJBVElPTl9NT0RFX05PTl9IVF9TVEFfUFJFU0VOVCkgJiYKKwlpZiAoIShwbWxtZXByaXYtPmh0X29wX21vZGUgJiBJRUVFODAyMTFfSFRfT1BfTU9ERV9OT05fSFRfU1RBX1BSU05UKSAmJgogCSAgICAocG1sbWVwcml2LT5udW1fc3RhX25vX2h0IHx8IHBtbG1lcHJpdi0+b2xiY19odCkpIHsKLQkJcG1sbWVwcml2LT5odF9vcF9tb2RlIHw9IEhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0hUX1NUQV9QUkVTRU5UOworCQlwbWxtZXByaXYtPmh0X29wX21vZGUgfD0gSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0hUX1NUQV9QUlNOVDsKIAkJb3BfbW9kZV9jaGFuZ2VzKys7CiAJfSBlbHNlIGlmICgocG1sbWVwcml2LT5odF9vcF9tb2RlICYKLQkJICAgIEhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0hUX1NUQV9QUkVTRU5UKSAmJgorCQkgICAgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0hUX1NUQV9QUlNOVCkgJiYKIAkJICAgKHBtbG1lcHJpdi0+bnVtX3N0YV9ub19odCA9PSAwICYmICFwbWxtZXByaXYtPm9sYmNfaHQpKSB7CiAJCXBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmPQotCQkJfkhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0hUX1NUQV9QUkVTRU5UOworCQkJfklFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9IVF9TVEFfUFJTTlQ7CiAJCW9wX21vZGVfY2hhbmdlcysrOwogCX0KIApAQCAtMTQ2MSwyMSArMTQxNCwyMSBAQAogCSAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gUHJvYmFibHkgaXQncyBhIHRoZW9yZXRpY2FsIGNhc2UsIHNpbmNlCiAJICogaXQgbG9va3MgbGlrZSBhbGwga25vd24gSFQgU1RBcyBzdXBwb3J0IGdyZWVuZmllbGQuCiAJICovCi0JbmV3X29wX21vZGUgPSAwOwogCWlmIChwbWxtZXByaXYtPm51bV9zdGFfbm9faHQgfHwKLQkgICAgKHBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmIEhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0dGX0RFVlNfUFJFU0VOVCkpCi0JCW5ld19vcF9tb2RlID0gT1BfTU9ERV9NSVhFRDsKLQllbHNlIGlmICgocGh0cHJpdl9hcC0+aHRfY2FwLmNhcF9pbmZvICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCi0JCSAmJiBwbWxtZXByaXYtPm51bV9zdGFfaHRfMjBtaHopCi0JCW5ld19vcF9tb2RlID0gT1BfTU9ERV8yME1IWl9IVF9TVEFfQVNTT0NFRDsKKwkgICAgKHBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpKQorCQluZXdfb3BfbW9kZSA9IElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OSFRfTUlYRUQ7CisJZWxzZSBpZiAoKGxlMTZfdG9fY3B1KHBodHByaXZfYXAtPmh0X2NhcC5jYXBfaW5mbykgJgorCQkgIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSAmJgorCQkgcG1sbWVwcml2LT5udW1fc3RhX2h0XzIwbWh6KQorCQluZXdfb3BfbW9kZSA9IElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fMjBNSFo7CiAJZWxzZSBpZiAocG1sbWVwcml2LT5vbGJjX2h0KQotCQluZXdfb3BfbW9kZSA9IE9QX01PREVfTUFZX0JFX0xFR0FDWV9TVEFTOworCQluZXdfb3BfbW9kZSA9IElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OTUVNQkVSOwogCWVsc2UKLQkJbmV3X29wX21vZGUgPSBPUF9NT0RFX1BVUkU7CisJCW5ld19vcF9tb2RlID0gSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05FOwogCi0JY3VyX29wX21vZGUgPSBwbWxtZXByaXYtPmh0X29wX21vZGUgJiBIVF9JTkZPX09QRVJBVElPTl9NT0RFX09QX01PREVfTUFTSzsKKwljdXJfb3BfbW9kZSA9IHBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT047CiAJaWYgKGN1cl9vcF9tb2RlICE9IG5ld19vcF9tb2RlKSB7Ci0JCXBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmPSB+SFRfSU5GT19PUEVSQVRJT05fTU9ERV9PUF9NT0RFX01BU0s7CisJCXBtbG1lcHJpdi0+aHRfb3BfbW9kZSAmPSB+SUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTjsKIAkJcG1sbWVwcml2LT5odF9vcF9tb2RlIHw9IG5ld19vcF9tb2RlOwogCQlvcF9tb2RlX2NoYW5nZXMrKzsKIAl9CkBAIC0xNTYyLDcgKzE1MTUsNyBAQAogCQkJaWYgKHBtbG1lcHJpdi0+bnVtX3N0YV9ub25fZXJwID09IDEpCiAJCQl7CiAJCQkJYmVhY29uX3VwZGF0ZWQgPSB0cnVlOwotCQkJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9FUlBJTkZPX0lFXywgTlVMTCwgdHJ1ZSk7CisJCQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgV0xBTl9FSURfRVJQX0lORk8sIE5VTEwsIHRydWUpOwogCQkJfQogCQl9CiAKQEAgLTE1NzgsNyArMTUzMSw3IEBACiAJCQlpZiAocG1sbWVwcml2LT5udW1fc3RhX25vbl9lcnAgPT0gMCkKIAkJCXsKIAkJCQliZWFjb25fdXBkYXRlZCA9IHRydWU7Ci0JCQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgX0VSUElORk9fSUVfLCBOVUxMLCB0cnVlKTsKKwkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9FUlBfSU5GTywgTlVMTCwgdHJ1ZSk7CiAJCQl9CiAJCX0KIApAQCAtMTY2OSw4ICsxNjIyLDggQEAKIAogCWlmIChydHdfaHRfb3BlcmF0aW9uX3VwZGF0ZShwYWRhcHRlcikgPiAwKQogCXsKLQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgX0hUX0NBUEFCSUxJVFlfSUVfLCBOVUxMLCBmYWxzZSk7Ci0JCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9IVF9BRERfSU5GT19JRV8sIE5VTEwsIHRydWUpOworCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9IVF9DQVBBQklMSVRZLCBOVUxMLCBmYWxzZSk7CisJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIFdMQU5fRUlEX0hUX09QRVJBVElPTiwgTlVMTCwgdHJ1ZSk7CiAJfQogCiAJLyogdXBkYXRlIGFzc29jaWNhdGVkIHN0YXRpb25zIGNhcC4gKi8KQEAgLTE3MDUsNyArMTY1OCw4IEBACiAJCWlmIChwbWxtZXByaXYtPm51bV9zdGFfbm9uX2VycCA9PSAwKQogCQl7CiAJCQliZWFjb25fdXBkYXRlZCA9IHRydWU7Ci0JCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBfRVJQSU5GT19JRV8sIE5VTEwsIHRydWUpOworCQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgV0xBTl9FSURfRVJQX0lORk8sCisJCQkJCSBOVUxMLCB0cnVlKTsKIAkJfQogCX0KIApAQCAtMTczNyw4ICsxNjkxLDggQEAKIAogCWlmIChydHdfaHRfb3BlcmF0aW9uX3VwZGF0ZShwYWRhcHRlcikgPiAwKQogCXsKLQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgX0hUX0NBUEFCSUxJVFlfSUVfLCBOVUxMLCBmYWxzZSk7Ci0JCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9IVF9BRERfSU5GT19JRV8sIE5VTEwsIHRydWUpOworCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9IVF9DQVBBQklMSVRZLCBOVUxMLCBmYWxzZSk7CisJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIFdMQU5fRUlEX0hUX09QRVJBVElPTiwgTlVMTCwgdHJ1ZSk7CiAJfQogCiAJLyogdXBkYXRlIGFzc29jaWNhdGVkIHN0YXRpb25zIGNhcC4gKi8KQEAgLTE4MDYsOCArMTc2MCw4IEBACiAJaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpICE9IFdJRklfRldfQVBfU1RBVEUpCiAJCXJldHVybiByZXQ7CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCIgd2l0aCBjaDoldSwgb2Zmc2V0OiV1XG4iLAotCQlGVU5DX05ERVZfQVJHKHBhZGFwdGVyLT5wbmV0ZGV2KSwgbmV3X2NoLCBjaF9vZmZzZXQpOworCURCR184NzIzQSgiJXMoJXMpOiB3aXRoIGNoOiV1LCBvZmZzZXQ6JXVcbiIsIF9fZnVuY19fLAorCQkgIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lLCBuZXdfY2gsIGNoX29mZnNldCk7CiAKIAlzcGluX2xvY2tfYmgoJnBzdGFwcml2LT5hc29jX2xpc3RfbG9jayk7CiAJcGhlYWQgPSAmcHN0YXByaXYtPmFzb2NfbGlzdDsKQEAgLTE4MzUsMTAgKzE3ODksMTAgQEAKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAl1OCBiY19hZGRyW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKIAl1OCBjaGtfYWxpdmVfbnVtID0gMDsKLQljaGFyIGNoa19hbGl2ZV9saXN0W05VTV9TVEFdOworCXN0cnVjdCBzdGFfaW5mbyAqY2hrX2FsaXZlX2xpc3RbTlVNX1NUQV07CiAJaW50IGk7CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCJcbiIsIEZVTkNfTkRFVl9BUkcocGFkYXB0ZXItPnBuZXRkZXYpKTsKKwlEQkdfODcyM0EoIiVzKCVzKVxuIiwgX19mdW5jX18sIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lKTsKIAogCWlmICgocG1sbWVpbmZvLT5zdGF0ZSYweDAzKSAhPSBXSUZJX0ZXX0FQX1NUQVRFKQogCQlyZXR1cm4gcmV0OwpAQCAtMTg0Nyw4ICsxODAxLDYgQEAKIAlwaGVhZCA9ICZwc3RhcHJpdi0+YXNvY19saXN0OwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCBwaGVhZCkgewotCQlpbnQgc3RhaW5mb19vZmZzZXQ7Ci0KIAkJcHN0YSA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHN0YV9pbmZvLCBhc29jX2xpc3QpOwogCiAJCS8qIFJlbW92ZSBzdGEgZnJvbSBhc29jX2xpc3QgKi8KQEAgLTE4NTYsMTggKzE4MDgsMTQgQEAKIAkJcHN0YXByaXYtPmFzb2NfbGlzdF9jbnQtLTsKIAogCQkvKiBLZWVwIHN0YSBmb3IgYXBfZnJlZV9zdGEyM2EoKSBiZXlvbmQgdGhpcyBhc29jX2xpc3QgbG9vcCAqLwotCQlzdGFpbmZvX29mZnNldCA9IHJ0d19zdGFpbmZvX29mZnNldDIzYShwc3RhcHJpdiwgcHN0YSk7Ci0JCWlmIChzdGFpbmZvX29mZnNldF92YWxpZChzdGFpbmZvX29mZnNldCkpIHsKLQkJCWNoa19hbGl2ZV9saXN0W2Noa19hbGl2ZV9udW0rK10gPSBzdGFpbmZvX29mZnNldDsKLQkJfQorCQljaGtfYWxpdmVfbGlzdFtjaGtfYWxpdmVfbnVtKytdID0gcHN0YTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnBzdGFwcml2LT5hc29jX2xpc3RfbG9jayk7CiAKIAkvKiBGb3IgZWFjaCBzdGEgaW4gY2hrX2FsaXZlX2xpc3QsIGNhbGwgYXBfZnJlZV9zdGEyM2EgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2hrX2FsaXZlX251bTsgaSsrKSB7Ci0JCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2FfYnlfb2Zmc2V0MjNhKHBzdGFwcml2LCBjaGtfYWxpdmVfbGlzdFtpXSk7Ci0JCWFwX2ZyZWVfc3RhMjNhKHBhZGFwdGVyLCBwc3RhLCB0cnVlLCBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjaGtfYWxpdmVfbnVtOyBpKyspCisJCWFwX2ZyZWVfc3RhMjNhKHBhZGFwdGVyLCBjaGtfYWxpdmVfbGlzdFtpXSwgdHJ1ZSwKKwkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CiAKIAlpc3N1ZV9kZWF1dGgyM2EocGFkYXB0ZXIsIGJjX2FkZHIsIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKIApAQCAtMTg4OCw3ICsxODM2LDcgQEAKIAllbHNlCiAJCXBzdGEtPnFvc19vcHRpb24gPSAwOwogCi0JaWYgKHBtbG1lcHJpdi0+cW9zcHJpdi5xb3Nfb3B0aW9uID09IDApCisJaWYgKHBtbG1lcHJpdi0+cW9zX29wdGlvbiA9PSAwKQogCQlwc3RhLT5xb3Nfb3B0aW9uID0gMDsKIAogCS8qIHVwZGF0ZSA4MDIuMTFuIGh0IGNhcC4gKi8KQEAgLTE5MjgsMjUgKzE4NzYsMjkgQEAKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCXN0cnVjdCBsaXN0X2hlYWQgKnBoZWFkLCAqcGxpc3QsICpwdG1wOwogCXU4IGNoa19hbGl2ZV9udW0gPSAwOwotCWNoYXIgY2hrX2FsaXZlX2xpc3RbTlVNX1NUQV07CisJc3RydWN0IHN0YV9pbmZvICpjaGtfYWxpdmVfbGlzdFtOVU1fU1RBXTsKIAlpbnQgaTsKIAotCXJ0d19zZXRvcG1vZGVfY21kMjNhKHBhZGFwdGVyLCBOZGlzODAyXzExQVBNb2RlKTsKKwlydHdfc2V0b3Btb2RlX2NtZDIzYShwYWRhcHRlciwgTkw4MDIxMV9JRlRZUEVfQVApOwogCiAJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7CiAKIAlzdGFydF9ic3NfbmV0d29yayhwYWRhcHRlciwgKHU4KikmbWxtZXByaXYtPmN1cl9uZXR3b3JrLm5ldHdvcmspOwogCi0JaWYgKChwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPT0gX1RLSVBfKSB8fAotCQkocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09IF9BRVNfKSkKLQl7CisJaWYgKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9PQorCSAgICBXTEFOX0NJUEhFUl9TVUlURV9US0lQIHx8CisJICAgIHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9PQorCSAgICBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKSB7CiAJCS8qIHJlc3RvcmUgZ3JvdXAga2V5LCBXRVAga2V5cyBpcyByZXN0b3JlZCBpbiBpcHNfbGVhdmUyM2EoKSAqLwotCQlydHdfc2V0X2tleTIzYShwYWRhcHRlciwgcHNlY3VyaXR5cHJpdiwgcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycEtleWlkLCAwKTsKKwkJcnR3X3NldF9rZXkyM2EocGFkYXB0ZXIsIHBzZWN1cml0eXByaXYsCisJCQkgICAgICAgcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycEtleWlkLCAwKTsKIAl9CiAKIAkvKiBwZXIgc3RhIHBhaXJ3aXNlIGtleSBhbmQgc2V0dGluZ3MgKi8KLQlpZiAoKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSAhPSBfVEtJUF8pICYmCi0JCShwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gX0FFU18pKSB7CisJaWYgKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSAhPQorCSAgICBXTEFOX0NJUEhFUl9TVUlURV9US0lQICYmCisJICAgIHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSAhPQorCSAgICBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKSB7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE5NTUsMjYgKzE5MDcsMTcgQEAKIAlwaGVhZCA9ICZwc3RhcHJpdi0+YXNvY19saXN0OwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCBwaGVhZCkgewotCQlpbnQgc3RhaW5mb19vZmZzZXQ7Ci0KIAkJcHN0YSA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHN0YV9pbmZvLCBhc29jX2xpc3QpOwogCi0JCXN0YWluZm9fb2Zmc2V0ID0gcnR3X3N0YWluZm9fb2Zmc2V0MjNhKHBzdGFwcml2LCBwc3RhKTsKLQkJaWYgKHN0YWluZm9fb2Zmc2V0X3ZhbGlkKHN0YWluZm9fb2Zmc2V0KSkgewotCQkJY2hrX2FsaXZlX2xpc3RbY2hrX2FsaXZlX251bSsrXSA9IHN0YWluZm9fb2Zmc2V0OwotCQl9CisJCWNoa19hbGl2ZV9saXN0W2Noa19hbGl2ZV9udW0rK10gPSBwc3RhOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZwc3RhcHJpdi0+YXNvY19saXN0X2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IGNoa19hbGl2ZV9udW07IGkrKykgewotCQlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhX2J5X29mZnNldDIzYShwc3RhcHJpdiwgY2hrX2FsaXZlX2xpc3RbaV0pOworCQlwc3RhID0gY2hrX2FsaXZlX2xpc3RbaV07CiAKLQkJaWYgKHBzdGEgPT0gTlVMTCkgewotCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHN0YV9pbmZvIGlzIG51bGxcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKLQkJfQotCQllbHNlIGlmIChwc3RhLT5zdGF0ZSAmX0ZXX0xJTktFRCkKLQkJeworCQlpZiAocHN0YS0+c3RhdGUgJl9GV19MSU5LRUQpIHsKIAkJCVVwZGF0ZV9SQV9FbnRyeTIzYShwYWRhcHRlciwgcHN0YSk7CiAJCQkvKiBwYWlyd2lzZSBrZXkgKi8KIAkJCXJ0d19zZXRzdGFrZXlfY21kMjNhKHBhZGFwdGVyLCAodW5zaWduZWQgY2hhciAqKXBzdGEsIHRydWUpOwpAQCAtMjA4Myw1ICsyMDI2LDMgQEAKIAogCXJ0dzIzYV9mcmVlX21sbWVfcHJpdl9pZV9kYXRhKHBtbG1lcHJpdik7CiB9Ci0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX0FQX01PREUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2NtZC5jCmluZGV4IDVlMzA4OGEuLjE2OTZjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfY21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19jbWQuYwpAQCAtMTcsMTIgKzE3LDkgQEAKICNpbmNsdWRlIDxvc2RlcF9zZXJ2aWNlLmg+CiAjaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+CiAjaW5jbHVkZSA8cmVjdl9vc2RlcC5oPgotI2luY2x1ZGUgPGNtZF9vc2RlcC5oPgogI2luY2x1ZGUgPG1sbWVfb3NkZXAuaD4KLQotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAotI2luY2x1ZGUgPHJ0bDg3MjNhX2hhbC5oPgotI2VuZGlmIC8qICBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QgKi8KKyNpbmNsdWRlIDxydGw4NzIzYV9jbWQuaD4KKyNpbmNsdWRlIDxydHdfc3Jlc2V0Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY21kX2hkbCB3bGFuY21kc1tdID0gewogCUdFTl9EUlZfQ01EX0hBTkRMRVIoMCwgTlVMTCkgLyowKi8KQEAgLTE3NSwxMzcgKzE3MiwzMyBAQAogewogCWludCByZXMgPSBfU1VDQ0VTUzsKIAotCXNlbWFfaW5pdCgmcGNtZHByaXYtPmNtZF9xdWV1ZV9zZW1hLCAwKTsKLQlzZW1hX2luaXQoJnBjbWRwcml2LT50ZXJtaW5hdGVfY21kdGhyZWFkX3NlbWEsIDApOwotCi0JX3J0d19pbml0X3F1ZXVlMjNhKCZwY21kcHJpdi0+Y21kX3F1ZXVlKTsKLQotCXBjbWRwcml2LT5jbWRfc2VxID0gMTsKLQotCXBjbWRwcml2LT5jbWRfYWxsb2NhdGVkX2J1ZiA9IGt6YWxsb2MoTUFYX0NNRFNaICsgQ01EQlVGRl9BTElHTl9TWiwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAocGNtZHByaXYtPmNtZF9hbGxvY2F0ZWRfYnVmID09IE5VTEwpIHsKLQkJcmVzID0gX0ZBSUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlwY21kcHJpdi0+Y21kX2J1ZiA9IHBjbWRwcml2LT5jbWRfYWxsb2NhdGVkX2J1ZiArIENNREJVRkZfQUxJR05fU1ogLQotCQkJICAgICgodW5zaWduZWQgbG9uZykocGNtZHByaXYtPmNtZF9hbGxvY2F0ZWRfYnVmKSAmCi0JCQkgICAgKENNREJVRkZfQUxJR05fU1ogLSAxKSk7Ci0KLQlwY21kcHJpdi0+cnNwX2FsbG9jYXRlZF9idWYgPSBremFsbG9jKE1BWF9SU1BTWiArIDQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFwY21kcHJpdi0+cnNwX2FsbG9jYXRlZF9idWYpIHsKLQkJcmVzID0gX0ZBSUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlwY21kcHJpdi0+cnNwX2J1ZiA9IHBjbWRwcml2LT5yc3BfYWxsb2NhdGVkX2J1ZiArIDQgLQotCQkJICAgICgodW5zaWduZWQgbG9uZykocGNtZHByaXYtPnJzcF9hbGxvY2F0ZWRfYnVmKSAmIDMpOwotCiAJcGNtZHByaXYtPmNtZF9pc3N1ZWRfY250ID0gMDsKIAlwY21kcHJpdi0+Y21kX2RvbmVfY250ID0gMDsKIAlwY21kcHJpdi0+cnNwX2NudCA9IDA7CiAKLWV4aXQ6CisJcGNtZHByaXYtPndxID0gYWxsb2Nfd29ya3F1ZXVlKCJydGw4NzIzYXVfY21kIiwgMCwgMSk7CisJaWYgKCFwY21kcHJpdi0+d3EpCisJCXJlcyA9IF9GQUlMOwogCiAJcmV0dXJuIHJlczsKIH0KIAogLyogZm9yd2FyZCBkZWZpbml0aW9uICovCiAKLXN0YXRpYyB2b2lkIGMyaF93a19jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotaW50IF9ydHdfaW5pdF9ldnRfcHJpdjIzYShzdHJ1Y3QgZXZ0X3ByaXYgKnBldnRwcml2KQorc3RhdGljIHZvaWQgcnR3X2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3UzMiBydHdfaW5pdF9ldnRfcHJpdjIzYShzdHJ1Y3QgZXZ0X3ByaXYgKnBldnRwcml2KQogewotCWludCByZXMgPSBfU1VDQ0VTUzsKKwlwZXZ0cHJpdi0+d3EgPSBhbGxvY193b3JrcXVldWUoInJ0bDg3MjNhdV9ldnQiLCAwLCAxKTsKIAotCS8qIGFsbG9jYXRlIERNQS1hYmxlL05vbi1QYWdlIG1lbW9yeSBmb3IgY21kX2J1ZiBhbmQgcnNwX2J1ZiAqLwotCWF0b21pY19zZXQoJnBldnRwcml2LT5ldmVudF9zZXEsIDApOwotCXBldnRwcml2LT5ldnRfZG9uZV9jbnQgPSAwOwotCi0JSU5JVF9XT1JLKCZwZXZ0cHJpdi0+YzJoX3drLCBjMmhfd2tfY2FsbGJhY2spOwotCXBldnRwcml2LT5jMmhfd2tfYWxpdmUgPSBmYWxzZTsKLQlwZXZ0cHJpdi0+YzJoX3F1ZXVlID0gcnR3X2NidWZfYWxsb2MyM2EoQzJIX1FVRVVFX01BWF9MRU4gKyAxKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLXZvaWQgX3J0d19mcmVlX2V2dF9wcml2MjNhIChzdHJ1Y3QgZXZ0X3ByaXYgKnBldnRwcml2KQotewotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfaW5mb18sCi0JCSAoIitfcnR3X2ZyZWVfZXZ0X3ByaXYyM2FcbiIpKTsKLQljYW5jZWxfd29ya19zeW5jKCZwZXZ0cHJpdi0+YzJoX3drKTsKLQl3aGlsZShwZXZ0cHJpdi0+YzJoX3drX2FsaXZlKQotCQltc2xlZXAoMTApOwotCi0Jd2hpbGUgKCFydHdfY2J1Zl9lbXB0eTIzYShwZXZ0cHJpdi0+YzJoX3F1ZXVlKSkgewotCQl2b2lkICpjMmg7Ci0JCWlmICgoYzJoID0gcnR3X2NidWZfcG9wMjNhKHBldnRwcml2LT5jMmhfcXVldWUpKSAhPSBOVUxMICYmCi0JCSAgICBjMmggIT0gKHZvaWQgKilwZXZ0cHJpdikgewotCQkJa2ZyZWUoYzJoKTsKLQkJfQotCX0KLQotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfaW5mb18sCi0JCSAoIi1fcnR3X2ZyZWVfZXZ0X3ByaXYyM2FcbiIpKTsKLX0KLQotdm9pZCBfcnR3X2ZyZWVfY21kX3ByaXYyM2Eoc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdikKLXsKLQlpZiAocGNtZHByaXYpIHsKLQkJa2ZyZWUocGNtZHByaXYtPmNtZF9hbGxvY2F0ZWRfYnVmKTsKLQkJa2ZyZWUocGNtZHByaXYtPnJzcF9hbGxvY2F0ZWRfYnVmKTsKLQl9Ci19Ci0KLS8qCi1DYWxsaW5nIENvbnRleHQ6Ci1ydHdfZW5xdWV1ZV9jbWQyM2EgY2FuIG9ubHkgYmUgY2FsbGVkIGJldHdlZW4ga2VybmVsIHRocmVhZCwKLXNpbmNlIG9ubHkgc3Bpbl9sb2NrIGlzIHVzZWQuCi0KLUlTUi9DYWxsLUJhY2sgZnVuY3Rpb25zIGNhbid0IGNhbGwgdGhpcyBzdWItZnVuY3Rpb24uCi0qLwotCi1pbnQgX3J0d19lbnF1ZXVlX2NtZDIzYShzdHJ1Y3QgcnR3X3F1ZXVlICpxdWV1ZSwgc3RydWN0IGNtZF9vYmogKm9iaikKLXsKLQl1bnNpZ25lZCBsb25nIGlycUw7Ci0KLQlpZiAob2JqID09IE5VTEwpCi0JCWdvdG8gZXhpdDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxTCk7Ci0KLQlsaXN0X2FkZF90YWlsKCZvYmotPmxpc3QsICZxdWV1ZS0+cXVldWUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycUwpOwotCi1leGl0OgorCUlOSVRfV09SSygmcGV2dHByaXYtPmlycV93aywgcnR3X2lycV93b3JrKTsKIAogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdTMyIHJ0d19pbml0X2V2dF9wcml2MjNhKHN0cnVjdCBldnRfcHJpdiAqcGV2dHByaXYpCi17Ci0JaW50IHJlczsKLQotCXJlcyA9IF9ydHdfaW5pdF9ldnRfcHJpdjIzYShwZXZ0cHJpdik7Ci0KLQlyZXR1cm4gcmVzOwotfQotCiB2b2lkIHJ0d19mcmVlX2V2dF9wcml2MjNhKHN0cnVjdCBldnRfcHJpdiAqcGV2dHByaXYpCiB7Ci0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9pbmZvXywKLQkJICgicnR3X2ZyZWVfZXZ0X3ByaXYyM2FcbiIpKTsKLQlfcnR3X2ZyZWVfZXZ0X3ByaXYyM2EocGV2dHByaXYpOwotfQotCi12b2lkIHJ0d19mcmVlX2NtZF9wcml2MjNhKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYpCi17Ci0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9pbmZvXywKLQkJICgicnR3X2ZyZWVfY21kX3ByaXYyM2FcbiIpKTsKLQlfcnR3X2ZyZWVfY21kX3ByaXYyM2EocGNtZHByaXYpOworCWNhbmNlbF93b3JrX3N5bmMoJnBldnRwcml2LT5pcnFfd2spOwogfQogCiBzdGF0aWMgaW50IHJ0d19jbWRfZmlsdGVyKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYsIHN0cnVjdCBjbWRfb2JqICpjbWRfb2JqKQpAQCAtMzI5LDIxICsyMjIsMjEgQEAKIAlpZiAoY21kX29iai0+Y21kY29kZSA9PSBHRU5fQ01EX0NPREUoX1NldENoYW5uZWxQbGFuKSkKIAkJYkFsbG93ID0gdHJ1ZTsKIAotCWlmICgocGNtZHByaXYtPnBhZGFwdGVyLT5od19pbml0X2NvbXBsZXRlZCA9PSBmYWxzZSAmJgotCSAgICAgYkFsbG93ID09IGZhbHNlKSB8fCBwY21kcHJpdi0+Y21kdGhkX3J1bm5pbmcgPT0gZmFsc2UpCisJaWYgKHBjbWRwcml2LT5wYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQgPT0gZmFsc2UgJiYgYkFsbG93ID09IGZhbHNlKQogCQlyZXR1cm4gX0ZBSUw7CiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11MzIgcnR3X2VucXVldWVfY21kMjNhKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYsIHN0cnVjdCBjbWRfb2JqICpjbWRfb2JqKQorc3RhdGljIHZvaWQgcnR3X2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK2ludCBydHdfZW5xdWV1ZV9jbWQyM2Eoc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdiwgc3RydWN0IGNtZF9vYmogKmNtZF9vYmopCiB7CiAJaW50IHJlcyA9IF9GQUlMOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwY21kcHJpdi0+cGFkYXB0ZXI7CiAKIAlpZiAoIWNtZF9vYmopCiAJCWdvdG8gZXhpdDsKIAotCWNtZF9vYmotPnBhZGFwdGVyID0gcGFkYXB0ZXI7CisJY21kX29iai0+cGFkYXB0ZXIgPSBwY21kcHJpdi0+cGFkYXB0ZXI7CiAKIAlyZXMgPSBydHdfY21kX2ZpbHRlcihwY21kcHJpdiwgY21kX29iaik7CiAJaWYgKHJlcyA9PSBfRkFJTCkgewpAQCAtMzUxLDM0ICsyNDQsMjAgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXJlcyA9IF9ydHdfZW5xdWV1ZV9jbWQyM2EoJnBjbWRwcml2LT5jbWRfcXVldWUsIGNtZF9vYmopOworCUlOSVRfV09SSygmY21kX29iai0+d29yaywgcnR3X2NtZF93b3JrKTsKIAotCWlmIChyZXMgPT0gX1NVQ0NFU1MpCi0JCXVwKCZwY21kcHJpdi0+Y21kX3F1ZXVlX3NlbWEpOworCXJlcyA9IHF1ZXVlX3dvcmsocGNtZHByaXYtPndxLCAmY21kX29iai0+d29yayk7CiAKKwlpZiAoIXJlcykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYWxsIHRvIHF1ZXVlX3dvcmsoKSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmVzID0gX0ZBSUw7CisJfSBlbHNlCisJCXJlcyA9IF9TVUNDRVNTOwogZXhpdDoKKwogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY21kX29iaiAqcnR3X2RlcXVldWVfY21kKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYpCi17Ci0Jc3RydWN0IGNtZF9vYmogKm9iajsKLQlzdHJ1Y3QgcnR3X3F1ZXVlICpxdWV1ZSA9ICZwY21kcHJpdi0+Y21kX3F1ZXVlOwotCXVuc2lnbmVkIGxvbmcgaXJxTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxTCk7Ci0JaWYgKGxpc3RfZW1wdHkoJnF1ZXVlLT5xdWV1ZSkpCi0JCW9iaiA9IE5VTEw7Ci0JZWxzZSB7Ci0JCW9iaiA9IGNvbnRhaW5lcl9vZigoJnF1ZXVlLT5xdWV1ZSktPm5leHQsIHN0cnVjdCBjbWRfb2JqLCBsaXN0KTsKLQkJbGlzdF9kZWxfaW5pdCgmb2JqLT5saXN0KTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxTCk7Ci0KLQlyZXR1cm4gb2JqOwotfQotCiB2b2lkIHJ0d19jbWRfY2xyX2lzcjIzYShzdHJ1Y3QJY21kX3ByaXYgKnBjbWRwcml2KQogewogCXBjbWRwcml2LT5jbWRfZG9uZV9jbnQrKzsKQEAgLTQwMywxMzUgKzI4Miw3MiBAQAogCWtmcmVlKHBjbWQpOwogfQogCi1pbnQgcnR3X2NtZF90aHJlYWQyM2Eodm9pZCAqY29udGV4dCkKK3N0YXRpYyB2b2lkIHJ0d19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JdTggcmV0OwotCXN0cnVjdCBjbWRfb2JqICpwY21kOwotCXU4ICpwY21kYnVmLCAqcHJzcGJ1ZjsKLQl1OCAoKmNtZF9oZGwpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4KiBwYnVmKTsKKwlpbnQgKCpjbWRfaGRsKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1Zik7CiAJdm9pZCAoKnBjbWRfY2FsbGJhY2spKHN0cnVjdCBydHdfYWRhcHRlciAqZGV2LCBzdHJ1Y3QgY21kX29iaiAqcGNtZCk7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiljb250ZXh0OwotCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CisJc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdjsKKwlzdHJ1Y3QgY21kX29iaiAqcGNtZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY21kX29iaiwgd29yayk7CiAKLQlhbGxvd19zaWduYWwoU0lHVEVSTSk7CisJcGNtZHByaXYgPSAmcGNtZC0+cGFkYXB0ZXItPmNtZHByaXY7CiAKLQlwY21kYnVmID0gcGNtZHByaXYtPmNtZF9idWY7Ci0JcHJzcGJ1ZiA9IHBjbWRwcml2LT5yc3BfYnVmOworCWlmIChydHdfY21kX2ZpbHRlcihwY21kcHJpdiwgcGNtZCkgPT0gX0ZBSUwpIHsKKwkJcGNtZC0+cmVzID0gSDJDX0RST1BQRUQ7CisJCWdvdG8gcG9zdF9wcm9jZXNzOworCX0KIAotCXBjbWRwcml2LT5jbWR0aGRfcnVubmluZyA9IHRydWU7Ci0JdXAoJnBjbWRwcml2LT50ZXJtaW5hdGVfY21kdGhyZWFkX3NlbWEpOworCXBjbWRwcml2LT5jbWRfaXNzdWVkX2NudCsrOwogCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9pbmZvXywKLQkJICgic3RhcnQgcjg3MXggcnR3X2NtZF90aHJlYWQyM2EgISEhIVxuIikpOworCXBjbWQtPmNtZHN6ID0gQUxJR04ocGNtZC0+Y21kc3osIDQpOwogCi0Jd2hpbGUoMSkgewotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZwY21kcHJpdi0+Y21kX3F1ZXVlX3NlbWEpKQotCQkJYnJlYWs7Ci1fbmV4dDoKLQkJaWYgKChwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgPT0gdHJ1ZSkgfHwKLQkJICAgIChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKSkgewotCQkJREJHXzg3MjNBKCIlczogRHJpdmVyU3RvcHBlZCglZCkgU3VycHJpc2VSZW1vdmVkKCVkKSAiCi0JCQkJICAiYnJlYWsgYXQgbGluZSAlZFxuIiwJX19mdW5jX18sCi0JCQkJICBwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQsCi0JCQkJICBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCwgX19MSU5FX18pOwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAocGNtZC0+Y21kY29kZSA8IChzaXplb2Yod2xhbmNtZHMpL3NpemVvZihzdHJ1Y3QgY21kX2hkbCkpKSB7CisJCWNtZF9oZGwgPSB3bGFuY21kc1twY21kLT5jbWRjb2RlXS5oMmNmdW5zOwogCi0JCWlmICghKHBjbWQgPSBydHdfZGVxdWV1ZV9jbWQocGNtZHByaXYpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChydHdfY21kX2ZpbHRlcihwY21kcHJpdiwgcGNtZCkgPT0gX0ZBSUwpIHsKKwkJaWYgKGNtZF9oZGwpCisJCQlwY21kLT5yZXMgPSBjbWRfaGRsKHBjbWQtPnBhZGFwdGVyLCBwY21kLT5wYXJtYnVmKTsKKwkJZWxzZQogCQkJcGNtZC0+cmVzID0gSDJDX0RST1BQRUQ7Ci0JCQlnb3RvIHBvc3RfcHJvY2VzczsKLQkJfQotCi0JCXBjbWRwcml2LT5jbWRfaXNzdWVkX2NudCsrOwotCi0JCXBjbWQtPmNtZHN6ID0gQUxJR04ocGNtZC0+Y21kc3osIDQpOwotCi0JCW1lbWNweShwY21kYnVmLCBwY21kLT5wYXJtYnVmLCBwY21kLT5jbWRzeik7Ci0KLQkJaWYgKHBjbWQtPmNtZGNvZGUgPCAoc2l6ZW9mKHdsYW5jbWRzKS9zaXplb2Yoc3RydWN0IGNtZF9oZGwpKSkgewotCQkJY21kX2hkbCA9IHdsYW5jbWRzW3BjbWQtPmNtZGNvZGVdLmgyY2Z1bnM7Ci0KLQkJCWlmIChjbWRfaGRsKSB7Ci0JCQkJcmV0ID0gY21kX2hkbChwY21kLT5wYWRhcHRlciwgcGNtZGJ1Zik7Ci0JCQkJcGNtZC0+cmVzID0gcmV0OwotCQkJfQotCi0JCQlwY21kcHJpdi0+Y21kX3NlcSsrOwotCQl9IGVsc2UKLQkJCXBjbWQtPnJlcyA9IEgyQ19QQVJBTUVURVJTX0VSUk9SOwotCi0JCWNtZF9oZGwgPSBOVUxMOworCX0gZWxzZQorCQlwY21kLT5yZXMgPSBIMkNfUEFSQU1FVEVSU19FUlJPUjsKIAogcG9zdF9wcm9jZXNzOgotCQkvKiBjYWxsIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBwb3N0LXByb2Nlc3NlZCAqLwotCQlpZiAocGNtZC0+Y21kY29kZSA8IChzaXplb2YocnR3X2NtZF9jYWxsYmFjaykgLwotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBfY21kX2NhbGxiYWNrKSkpIHsKLQkJCXBjbWRfY2FsbGJhY2sgPQotCQkJCXJ0d19jbWRfY2FsbGJhY2tbcGNtZC0+Y21kY29kZV0uY2FsbGJhY2s7Ci0JCQlpZiAoIXBjbWRfY2FsbGJhY2spIHsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfY21kX2NfLCBfZHJ2X2luZm9fLAotCQkJCQkgKCJtbG1lX2NtZF9oZGwoKTogcGNtZF9jYWxsYmFjayA9ICIKLQkJCQkJICAiMHglcCwgY21kY29kZSA9IDB4JXhcbiIsCi0JCQkJCSAgcGNtZF9jYWxsYmFjaywgcGNtZC0+Y21kY29kZSkpOwotCQkJCXJ0d19mcmVlX2NtZF9vYmoyM2EocGNtZCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIHRvZG86ICEhISBmaWxsIHJzcF9idWYgdG8gcGNtZC0+cnNwCi0JCQkJICAgaWYgKHBjbWQtPnJzcCE9IE5VTEwpICovCi0JCQkJLyogbmVlZCBjb25pZGVyIHRoYXQgZnJlZSBjbWRfb2JqIGluCi0JCQkJICAgcnR3X2NtZF9jYWxsYmFjayAqLwotCQkJCXBjbWRfY2FsbGJhY2socGNtZC0+cGFkYXB0ZXIsIHBjbWQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9lcnJfLAotCQkJCSAoIiVzOiBjbWRjb2RlID0gMHgleCBjYWxsYmFjayBub3QgZGVmaW5lZCFcbiIsCi0JCQkJICBfX2Z1bmNfXywgcGNtZC0+Y21kY29kZSkpOworCS8qIGNhbGwgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBvc3QtcHJvY2Vzc2VkICovCisJaWYgKHBjbWQtPmNtZGNvZGUgPCAoc2l6ZW9mKHJ0d19jbWRfY2FsbGJhY2spIC8KKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBfY21kX2NhbGxiYWNrKSkpIHsKKwkJcGNtZF9jYWxsYmFjayA9CXJ0d19jbWRfY2FsbGJhY2tbcGNtZC0+Y21kY29kZV0uY2FsbGJhY2s7CisJCWlmICghcGNtZF9jYWxsYmFjaykgeworCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9pbmZvXywKKwkJCQkgKCJtbG1lX2NtZF9oZGwoKTogcGNtZF9jYWxsYmFjayA9IDB4JXAsICIKKwkJCQkgICJjbWRjb2RlID0gMHgleFxuIiwKKwkJCQkgIHBjbWRfY2FsbGJhY2ssIHBjbWQtPmNtZGNvZGUpKTsKIAkJCXJ0d19mcmVlX2NtZF9vYmoyM2EocGNtZCk7CisJCX0gZWxzZSB7CisJCQkvKiBuZWVkIGNvbmlkZXIgdGhhdCBmcmVlIGNtZF9vYmogaW4KKwkJCSAgIHJ0d19jbWRfY2FsbGJhY2sgKi8KKwkJCXBjbWRfY2FsbGJhY2socGNtZC0+cGFkYXB0ZXIsIHBjbWQpOwogCQl9Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkKLQkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7Ci0KLQkJZ290byBfbmV4dDsKLQotCX0KLQlwY21kcHJpdi0+Y21kdGhkX3J1bm5pbmcgPSBmYWxzZTsKLQotCS8qICBmcmVlIGFsbCBjbWRfb2JqIHJlc291cmNlcyAqLwotCWRvIHsKLQkJcGNtZCA9IHJ0d19kZXF1ZXVlX2NtZChwY21kcHJpdik7Ci0JCWlmICghcGNtZCkKLQkJCWJyZWFrOwotCisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9lcnJfLAorCQkJICgiJXM6IGNtZGNvZGUgPSAweCV4IGNhbGxiYWNrIG5vdCBkZWZpbmVkIVxuIiwKKwkJCSAgX19mdW5jX18sIHBjbWQtPmNtZGNvZGUpKTsKIAkJcnR3X2ZyZWVfY21kX29iajIzYShwY21kKTsKLQl9IHdoaWxlKDEpOwotCi0JdXAoJnBjbWRwcml2LT50ZXJtaW5hdGVfY21kdGhyZWFkX3NlbWEpOwotCi0JY29tcGxldGVfYW5kX2V4aXQoTlVMTCwgMCk7CisJfQogfQogCi11OCBydHdfc2l0ZXN1cnZleV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCwgaW50IHNzaWRfbnVtLAotCQkJIHN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgKmNoLCBpbnQgY2hfbnVtKQorCitpbnQgcnR3X3NpdGVzdXJ2ZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkLCBpbnQgc3NpZF9udW0sCisJCQkgIHN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgKmNoLCBpbnQgY2hfbnVtKQogewotCXU4IHJlcyA9IF9GQUlMOworCWludCByZXMgPSBfRkFJTDsKIAlzdHJ1Y3QgY21kX29iaiAqcGgyYzsKIAlzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtICpwc3VydmV5UGFyYTsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAKLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpCisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkKIAkJcnR3X2xwc19jdHJsX3drX2NtZDIzYShwYWRhcHRlciwgTFBTX0NUUkxfU0NBTiwgMSk7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkgewotCQlwMnBfcHNfd2tfY21kMjNhKHBhZGFwdGVyLCBQMlBfUFNfU0NBTiwgMSk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KIAlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXBoMmMpCiAJCXJldHVybiBfRkFJTDsKQEAgLTU0Miw3ICszNTgsNyBAQAogCQlyZXR1cm4gX0ZBSUw7CiAJfQogCi0JcnR3X2ZyZWVfbmV0d29ya19xdWV1ZTIzYShwYWRhcHRlciwgZmFsc2UpOworCXJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2EocGFkYXB0ZXIpOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9pbmZvXywKIAkJICgiJXM6IGZsdXNoIG5ldHdvcmsgcXVldWVcbiIsIF9fZnVuY19fKSk7CkBAIC01NjEsMTEgKzM3Nyw2IEBACiAJCQkJbWVtY3B5KCZwc3VydmV5UGFyYS0+c3NpZFtpXSwgJnNzaWRbaV0sCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkpOwogCQkJCXBzdXJ2ZXlQYXJhLT5zc2lkX251bSsrOwotCQkJCWlmICgwKQotCQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiBzc2lkOiglcywgJWQpXG4iLAotCQkJCQkgIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLAotCQkJCQkgIHBzdXJ2ZXlQYXJhLT5zc2lkW2ldLnNzaWQsCi0JCQkJCSAgcHN1cnZleVBhcmEtPnNzaWRbaV0uc3NpZF9sZW4pOwogCQkJfQogCQl9CiAJfQpAQCAtNTc5LDEwICszOTAsNiBAQAogCQkJCW1lbWNweSgmcHN1cnZleVBhcmEtPmNoW2ldLCAmY2hbaV0sCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnR3X2llZWU4MDIxMV9jaGFubmVsKSk7CiAJCQkJcHN1cnZleVBhcmEtPmNoX251bSsrOwotCQkJCWlmICgwKQotCQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiBjaDoldVxuIiwKLQkJCQkJICBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKLQkJCQkJICBwc3VydmV5UGFyYS0+Y2hbaV0uaHdfdmFsdWUpOwogCQkJfQogCQl9CiAJfQpAQCAtNjExLDcgKzQxOCw3IEBACiAJa2ZyZWUocGNtZCk7CiB9CiAKLXU4IHJ0d19jcmVhdGVic3NfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyKQoraW50IHJ0d19jcmVhdGVic3NfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyKQogewogCXN0cnVjdCBjbWRfb2JqICpwY21kOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CkBAIC02MzksMTAgKzQ0Niw5IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlJTklUX0xJU1RfSEVBRCgmcGNtZC0+bGlzdCk7CiAJcGNtZC0+Y21kY29kZSA9IF9DcmVhdGVCc3NfQ01EXzsKIAlwY21kLT5wYXJtYnVmID0gKHVuc2lnbmVkIGNoYXIgKilwZGV2X25ldHdvcms7Ci0JcGNtZC0+Y21kc3ogPSBnZXRfd2xhbl9ic3NpZF9leF9zeigoc3RydWN0IHdsYW5fYnNzaWRfZXgqKXBkZXZfbmV0d29yayk7CisJcGNtZC0+Y21kc3ogPSBnZXRfd2xhbl9ic3NpZF9leF9zeihwZGV2X25ldHdvcmspOwogCXBjbWQtPnJzcCA9IE5VTEw7CiAJcGNtZC0+cnNwc3ogPSAwOwogCkBAIC02NTUsMjQgKzQ2MSwyMyBAQAogCXJldHVybiByZXM7CiB9CiAKLXU4IHJ0d19qb2luYnNzX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkgICAgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICogcG5ldHdvcmspCitpbnQgcnR3X2pvaW5ic3NfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCSAgICAgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yaykKIHsKLQl1OCAqYXV0aCwgcmVzID0gX1NVQ0NFU1M7Ci0JdWludCB0X2xlbiA9IDA7CisJdTggKmF1dGg7CisJaW50IHJlcyA9IF9TVUNDRVNTOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwc2VjbmV0d29yazsKIAlzdHJ1Y3QgY21kX29iaiAqcGNtZDsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHFvc19wcml2ICpwcW9zcHJpdiA9ICZwbWxtZXByaXYtPnFvc3ByaXY7CiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OwogCXN0cnVjdCBodF9wcml2ICpwaHRwcml2ID0gJnBtbG1lcHJpdi0+aHRwcml2OwotCWVudW0gbmRpc184MDJfMTFfbmV0X2luZnJhIG5kaXNfbmV0d29ya19tb2RlOworCWVudW0gbmw4MDIxMV9pZnR5cGUgaWZtb2RlOwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKLQluZGlzX25ldHdvcmtfbW9kZSA9IHBuZXR3b3JrLT5uZXR3b3JrLkluZnJhc3RydWN0dXJlTW9kZTsKKwlpZm1vZGUgPSBwbmV0d29yay0+bmV0d29yay5pZm1vZGU7CiAKIAlydHdfbGVkX2NvbnRyb2wocGFkYXB0ZXIsIExFRF9DVExfU1RBUlRfVE9fTElOSyk7CiAKQEAgLTY5MywyNiArNDk4LDIzIEBACiAJCQkgICJmYWlsISEhXG4iKSk7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JLyogZm9yIElFcyBpcyBmaXggYnVmIHNpemUgKi8KLQl0X2xlbiA9IHNpemVvZihzdHJ1Y3Qgd2xhbl9ic3NpZF9leCk7CiAKIAkvKiBmb3IgaGlkZGVuIGFwIHRvIHNldCBmd19zdGF0ZSBoZXJlICovCiAJaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFfFdJRklfQURIT0NfU1RBVEUpKSB7Ci0JCXN3aXRjaCAobmRpc19uZXR3b3JrX21vZGUpIHsKLQkJY2FzZSBOZGlzODAyXzExSUJTUzoKKwkJc3dpdGNoIChpZm1vZGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJCXNldF9md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSk7CiAJCQlicmVhazsKLQkJY2FzZSBOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmU6CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQkJc2V0X2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTmRpczgwMl8xMUFQTW9kZToKLQkJY2FzZSBOZGlzODAyXzExQXV0b1Vua25vd246Ci0JCWNhc2UgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlTWF4OgorCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlwc2VjbmV0d29yayA9IChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKSZwc2VjdXJpdHlwcml2LT5zZWNfYnNzOworCXBzZWNuZXR3b3JrID0gJnBzZWN1cml0eXByaXYtPnNlY19ic3M7CiAJaWYgKCFwc2VjbmV0d29yaykgewogCQlpZiAocGNtZCkKIAkJCWtmcmVlKHBjbWQpOwpAQCAtNzI1LDcgKzUyNyw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQltZW1zZXQocHNlY25ldHdvcmssIDAsIHRfbGVuKTsKKwltZW1zZXQocHNlY25ldHdvcmssIDAsIHNpemVvZihzdHJ1Y3Qgd2xhbl9ic3NpZF9leCkpOwogCiAJbWVtY3B5KHBzZWNuZXR3b3JrLCAmcG5ldHdvcmstPm5ldHdvcmssCiAJICAgICAgIGdldF93bGFuX2Jzc2lkX2V4X3N6KCZwbmV0d29yay0+bmV0d29yaykpOwpAQCAtNzU4LDcgKzU2MCw3IEBACiAJCQkJICAgICAgICZwc2VjbmV0d29yay0+SUVzWzBdLAogCQkJCSAgICAgICBwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCk7CiAKLQlwcW9zcHJpdi0+cW9zX29wdGlvbiA9IDA7CisJcG1sbWVwcml2LT5xb3Nfb3B0aW9uID0gMDsKIAogCWlmIChwcmVnaXN0cnlwcml2LT53bW1fZW5hYmxlKSB7CiAJCXUzMiB0bXBfbGVuOwpAQCAtNzcyLDIyICs1NzQsMjMgQEAKIAkJaWYgKHBzZWNuZXR3b3JrLT5JRUxlbmd0aCAhPSB0bXBfbGVuKSB7CiAJCQlwc2VjbmV0d29yay0+SUVMZW5ndGggPSB0bXBfbGVuOwogCQkJLyogVGhlcmUgaXMgV01NIElFIGluIHRoaXMgY29ycmVzcC4gYmVhY29uICovCi0JCQlwcW9zcHJpdi0+cW9zX29wdGlvbiA9IDE7CisJCQlwbWxtZXByaXYtPnFvc19vcHRpb24gPSAxOwogCQl9IGVsc2UgewogCQkJLyogVGhlcmUgaXMgbm8gV01NIElFIGluIHRoaXMgY29ycmVzcC4gYmVhY29uICovCi0JCQlwcW9zcHJpdi0+cW9zX29wdGlvbiA9IDA7CisJCQlwbWxtZXByaXYtPnFvc19vcHRpb24gPSAwOwogCQl9CiAJfQogCiAJcGh0cHJpdi0+aHRfb3B0aW9uID0gZmFsc2U7CiAJaWYgKHByZWdpc3RyeXByaXYtPmh0X2VuYWJsZSkgeworCQl1MzIgYWxnbyA9IHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobTsKIAkJLyoJQWRkZWQgYnkgQWxiZXJ0IDIwMTAvMDYvMjMgKi8KIAkJLyoJRm9yIHRoZSBXRVAgbW9kZSwgd2Ugd2lsbCB1c2UgdGhlIGJnIG1vZGUgdG8gZG8KIAkJCXRoZSBjb25uZWN0aW9uIHRvIGF2b2lkIHNvbWUgSU9UIGlzc3VlLiAqLwogCQkvKglFc3BlY2lhbGx5IGZvciBSZWFsdGVrIDgxOTJ1IFNvZnRBUC4gKi8KLQkJaWYgKChwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDQwXykgJiYKLQkJICAgIChwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDEwNF8pICYmCi0JCSAgICAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtICE9IF9US0lQXykpIHsKKwkJaWYgKGFsZ28gIT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgJiYKKwkJICAgIGFsZ28gIT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0ICYmCisJCSAgICBhbGdvICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKIAkJCS8qIHJ0d19yZXN0cnVjdHVyZV9odF9pZTIzYSAqLwogCQkJcnR3X3Jlc3RydWN0dXJlX2h0X2llMjNhKHBhZGFwdGVyLAogCQkJCQkJICZwbmV0d29yay0+bmV0d29yay5JRXNbMF0sCkBAIC04MTMsNyArNjE2LDYgQEAKIAkvKiBnZXQgY21kc3ogYmVmb3JlIGVuZGlhbiBjb252ZXJzaW9uICovCiAJcGNtZC0+Y21kc3ogPSBnZXRfd2xhbl9ic3NpZF9leF9zeihwc2VjbmV0d29yayk7CiAKLQlJTklUX0xJU1RfSEVBRCgmcGNtZC0+bGlzdCk7CiAJcGNtZC0+Y21kY29kZSA9IF9Kb2luQnNzX0NNRF87LyogR0VOX0NNRF9DT0RFKF9Kb2luQnNzKSAqLwogCXBjbWQtPnBhcm1idWYgPSAodW5zaWduZWQgY2hhciAqKXBzZWNuZXR3b3JrOwogCXBjbWQtPnJzcCA9IE5VTEw7CkBAIC04MjUsMTMgKzYyNywxMyBAQAogCXJldHVybiByZXM7CiB9CiAKLXU4IHJ0d19kaXNhc3NvY19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1MzIgZGVhdXRoX3RpbWVvdXRfbXMsCi0JCSAgICAgICBib29sIGVucXVldWUpCitpbnQgcnR3X2Rpc2Fzc29jX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIHUzMiBkZWF1dGhfdGltZW91dF9tcywKKwkJCWJvb2wgZW5xdWV1ZSkKIHsKIAlzdHJ1Y3QgY21kX29iaiAqY21kb2JqID0gTlVMTDsKIAlzdHJ1Y3QgZGlzY29ubmVjdF9wYXJtICpwYXJhbSA9IE5VTEw7CiAJc3RydWN0IGNtZF9wcml2ICpjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwotCXU4IHJlcyA9IF9TVUNDRVNTOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfbm90aWNlXywKIAkJICgiK3J0d19kaXNhc3NvY19jbWQyM2FcbiIpKTsKQEAgLTg2NiwxMyArNjY4LDEzIEBACiAJcmV0dXJuIHJlczsKIH0KIAotdTggcnR3X3NldG9wbW9kZV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCWVudW0gbmRpc184MDJfMTFfbmV0X2luZnJhIG5ldHdvcmt0eXBlKQoraW50IHJ0d19zZXRvcG1vZGVfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgZW51bSBubDgwMjExX2lmdHlwZSBpZm1vZGUpCiB7CiAJc3RydWN0CWNtZF9vYmogKnBoMmM7CiAJc3RydWN0CXNldG9wbW9kZV9wYXJtICpwc2V0b3A7CiAJc3RydWN0CWNtZF9wcml2ICAgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwotCXU4IHJlcyA9IF9TVUNDRVNTOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAogCXBoMmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOwogCWlmICghcGgyYykgewpAQCAtODg4LDE0ICs2OTAsMTQgQEAKIAl9CiAKIAlpbml0X2gyZndjbWRfd19wYXJtX25vX3JzcChwaDJjLCBwc2V0b3AsIF9TZXRPcE1vZGVfQ01EXyk7Ci0JcHNldG9wLT5tb2RlID0gKHU4KW5ldHdvcmt0eXBlOworCXBzZXRvcC0+bW9kZSA9IGlmbW9kZTsKIAogCXJlcyA9IHJ0d19lbnF1ZXVlX2NtZDIzYShwY21kcHJpdiwgcGgyYyk7CiBleGl0OgogCXJldHVybiByZXM7CiB9CiAKLXU4IHJ0d19zZXRzdGFrZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwc3RhLCB1OCB1bmljYXN0X2tleSkKK2ludCBydHdfc2V0c3Rha2V5X2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcHN0YSwgdTggdW5pY2FzdF9rZXkpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBoMmM7CiAJc3RydWN0IHNldF9zdGFrZXlfcGFybSAqcHNldHN0YWtleV9wYXJhOwpAQCAtOTA0LDcgKzcwNiw3IEBACiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gKHN0cnVjdCBzdGFfaW5mbyopcHN0YTsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoMmMpIHsKQEAgLTk1MCw3ICs3NTIsNyBAQAogICAgICAgICB9CiAKIAkvKiBqZWZmOiBzZXQgdGhpcyBiZWNhc3VlIGF0IGxlYXN0IHN3IGtleSBpcyByZWFkeSAqLwotCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuYnVzZXRraXBrZXkgPSB0cnVlOworCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuYnVzZXRraXBrZXkgPSAxOwogCiAJcmVzID0gcnR3X2VucXVldWVfY21kMjNhKHBjbWRwcml2LCBwaDJjKTsKIApAQCAtOTU5LDE1ICs3NjEsMTUgQEAKIAlyZXR1cm4gcmVzOwogfQogCi11OCBydHdfY2xlYXJzdGFrZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwc3RhLCB1OCBlbnRyeSwKLQkJCSAgdTggZW5xdWV1ZSkKK2ludCBydHdfY2xlYXJzdGFrZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwc3RhLCB1OCBlbnRyeSwKKwkJCSAgIHU4IGVucXVldWUpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBoMmM7CiAJc3RydWN0IHNldF9zdGFrZXlfcGFybSAqcHNldHN0YWtleV9wYXJhOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAJc3RydWN0IHNldF9zdGFrZXlfcnNwICpwc2V0c3Rha2V5X3JzcCA9IE5VTEw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSAoc3RydWN0IHN0YV9pbmZvICopcHN0YTsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlpZiAoIWVucXVldWUpIHsKIAkJY2xlYXJfY2FtX2VudHJ5MjNhKHBhZGFwdGVyLCBlbnRyeSk7CkBAIC0xMDAyLDcgKzgwNCw3IEBACiAKIAkJZXRoZXJfYWRkcl9jb3B5KHBzZXRzdGFrZXlfcGFyYS0+YWRkciwgc3RhLT5od2FkZHIpOwogCi0JCXBzZXRzdGFrZXlfcGFyYS0+YWxnb3JpdGhtID0gX05PX1BSSVZBQ1lfOworCQlwc2V0c3Rha2V5X3BhcmEtPmFsZ29yaXRobSA9IDA7CiAKIAkJcHNldHN0YWtleV9wYXJhLT5pZCA9IGVudHJ5OwogCkBAIC0xMDEyLDEyICs4MTQsMTcgQEAKIAlyZXR1cm4gcmVzOwogfQogCi11OCBydHdfYWRkYmFyZXFfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggdGlkLCB1OCAqYWRkcikKK2ludCBydHdfYWRkYmFyZXFfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggdGlkLCB1OCAqYWRkcikKIHsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCXN0cnVjdCBjbWRfb2JqICpwaDJjOwogCXN0cnVjdCBhZGRCYVJlcV9wYXJtICpwYWRkYmFyZXFfcGFybTsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CisKKwlpZiAodGlkID49IE1BWFRJRCkgeworCQlyZXMgPSBfRkFJTDsKKwkJZ290byBleGl0OworCX0KIAogCXBoMmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmICghcGgyYykgewpAQCAtMTA0MywxMiArODUwLDEyIEBACiAJcmV0dXJuIHJlczsKIH0KIAotdTggcnR3X2R5bmFtaWNfY2hrX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIpCitpbnQgcnR3X2R5bmFtaWNfY2hrX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBoMmM7CiAJc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtICpwZHJ2ZXh0cmFfY21kX3Bhcm07CiAJc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXBoMmMpIHsKQEAgLTEwODAsMTcgKzg4NywxNiBAQAogICogVGhpcyBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gb25fYWN0aW9uX3NwY3QyM2FfY2hfc3dpdGNoICgpIHdoaWNoIGlzbid0CiAgKiBjYWxsZWQgZnJvbSBhbnl3aGVyZSBpdHNlbGYKICAqLwotdTggcnR3X3NldF9jaF9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCBjaCwgdTggYncsIHU4IGNoX29mZnNldCwKLQkJICAgICB1OCBlbnF1ZXVlKQoraW50IHJ0d19zZXRfY2hfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggY2gsIHU4IGJ3LCB1OCBjaF9vZmZzZXQsCisJCSAgICAgIHU4IGVucXVldWUpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBjbWRvYmo7CiAJc3RydWN0IHNldF9jaF9wYXJtICpzZXRfY2hfcGFybTsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OworCWludCByZXMgPSBfU1VDQ0VTUzsKIAotCXU4IHJlcyA9IF9TVUNDRVNTOwotCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQiIGNoOiV1LCBidzoldSwgY2hfb2Zmc2V0OiV1XG4iLAotCQkgIEZVTkNfTkRFVl9BUkcocGFkYXB0ZXItPnBuZXRkZXYpLCBjaCwgYncsIGNoX29mZnNldCk7CisJREJHXzg3MjNBKCIlcyglcyk6IGNoOiV1LCBidzoldSwgY2hfb2Zmc2V0OiV1XG4iLCBfX2Z1bmNfXywKKwkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwgY2gsIGJ3LCBjaF9vZmZzZXQpOwogCiAJLyogY2hlY2sgaW5wdXQgcGFyYW1ldGVyICovCiAKQEAgLTExMjgsOCArOTM0LDcgQEAKIAkvKiBkbyBzb21ldGhpbmcgYmFzZWQgb24gcmVzLi4uICovCiBleGl0OgogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQiIHJlczoldVxuIiwgRlVOQ19OREVWX0FSRyhwYWRhcHRlci0+cG5ldGRldiksCi0JCSAgcmVzKTsKKwlEQkdfODcyM0EoIiVzKCVzKTogcmVzOiV1XG4iLCBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsIHJlcyk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTE0MSwyNSArOTQ2LDE5IEBACiAJdTggYkhpZ2hlckJ1c3lUcmFmZmljID0gZmFsc2UsIGJIaWdoZXJCdXN5UnhUcmFmZmljID0gZmFsc2U7CiAJdTggYkhpZ2hlckJ1c3lUeFRyYWZmaWMgPSBmYWxzZTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotI2lmbmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKIAlpbnQgQnVzeVRocmVzaG9sZCA9IDEwMDsKLSNlbmRpZgogCS8qICAqLwogCS8qICBEZXRlcm1pbmUgaWYgb3VyIHRyYWZmaWMgaXMgYnVzeSBub3cgKi8KIAkvKiAgKi8KIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCi0JCWlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVJ4T2tJblBlcmlvZCA+IDUwIHx8Ci0JCSAgICBwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCA+IDUwKQotI2Vsc2UgLyogICFDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QgKi8KKwkJaWYgKHJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpKQorCQkJQnVzeVRocmVzaG9sZCA9IDUwOworCQllbHNlIGlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYykKKwkJCUJ1c3lUaHJlc2hvbGQgPSA3NTsKIAkJLyogIGlmIHdlIHJhaXNlIGJCdXN5VHJhZmZpYyBpbiBsYXN0IHdhdGNoZG9nLCB1c2luZwogCQkgICAgbG93ZXIgdGhyZXNob2xkLiAqLwotCQlpZiAocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMpCi0JCQlCdXN5VGhyZXNob2xkID0gNzU7CiAJCWlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVJ4T2tJblBlcmlvZCA+IEJ1c3lUaHJlc2hvbGQgfHwKLQkJICAgIHBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uTnVtVHhPa0luUGVyaW9kID4gQnVzeVRocmVzaG9sZCkKLSNlbmRpZiAvKiAgIUNPTkZJR184NzIzQVVfQlRfQ09FWElTVCAqLwotCQl7CisJCSAgICBwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCA+IEJ1c3lUaHJlc2hvbGQpIHsKIAkJCWJCdXN5VHJhZmZpYyA9IHRydWU7CiAKIAkJCWlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVJ4T2tJblBlcmlvZCA+CkBAIC0xMTgxLDIzICs5ODAsMjEgQEAKIAkJCQliSGlnaGVyQnVzeVR4VHJhZmZpYyA9IHRydWU7CiAJCX0KIAotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAotCQlpZiAoQlRfMUFudChwYWRhcHRlcikgPT0gZmFsc2UpCi0jZW5kaWYKLQkJeworCQlpZiAoIXJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpIHx8CisJCSAgICAhcnRsODcyM2FfQlRfdXNpbmdfYW50ZW5uYV8xKHBhZGFwdGVyKSkgewogCQkvKiAgY2hlY2sgdHJhZmZpYyBmb3IgIHBvd2Vyc2F2aW5nLiAqLwotCQlpZiAoKChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVJ4VW5pY2FzdE9rSW5QZXJpb2QgKwotCQkgICAgICBwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCkgPiA4KSB8fAotCQkgICAgKHBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCA+IDIpKQotCQkJYkVudGVyUFMgPSBmYWxzZTsKLQkJZWxzZQotCQkJYkVudGVyUFMgPSB0cnVlOworCQkJaWYgKCgocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kICsKKwkJCSAgICAgIHBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uTnVtVHhPa0luUGVyaW9kKSA+IDgpIHx8CisJCQkgICAgcG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kID4yKQorCQkJCWJFbnRlclBTID0gZmFsc2U7CisJCQllbHNlCisJCQkJYkVudGVyUFMgPSB0cnVlOwogCi0JCS8qICBMZWlzdXJlUFMgb25seSB3b3JrIGluIGluZnJhIG1vZGUuICovCi0JCWlmIChiRW50ZXJQUykKLQkJCUxQU19FbnRlcjIzYShwYWRhcHRlcik7Ci0JCWVsc2UKLQkJCUxQU19MZWF2ZTIzYShwYWRhcHRlcik7CisJCQkvKiAgTGVpc3VyZVBTIG9ubHkgd29yayBpbiBpbmZyYSBtb2RlLiAqLworCQkJaWYgKGJFbnRlclBTKQorCQkJCUxQU19FbnRlcjIzYShwYWRhcHRlcik7CisJCQllbHNlCisJCQkJTFBTX0xlYXZlMjNhKHBhZGFwdGVyKTsKIAkJfQogCX0gZWxzZQogCQlMUFNfTGVhdmUyM2EocGFkYXB0ZXIpOwpAQCAtMTIxMyw3ICsxMDEwLDcgQEAKIAlwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLmJIaWdoZXJCdXN5VHhUcmFmZmljID0gYkhpZ2hlckJ1c3lUeFRyYWZmaWM7CiB9CiAKLXZvaWQgZHluYW1pY19jaGtfd2tfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmLCBpbnQgc3opCitzdGF0aWMgdm9pZCBkeW5hbWljX2Noa193a19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYsIGludCBzeikKIHsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXY7CiAKQEAgLTEyMjEsNDMgKzEwMTgsMzggQEAKIAlwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSA9PSB0cnVlKQorCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpCiAJCWV4cGlyZV90aW1lb3V0X2NoazIzYShwYWRhcHRlcik7CiAjZW5kaWYKIAotCXJ0d19oYWxfc3Jlc2V0X3htaXRfc3RhdHVzX2NoZWNrMjNhKHBhZGFwdGVyKTsKKwlydGw4NzIzYV9zcmVzZXRfeG1pdF9zdGF0dXNfY2hlY2socGFkYXB0ZXIpOwogCiAJbGlua2VkX3N0YXR1c19jaGsyM2EocGFkYXB0ZXIpOwogCXRyYWZmaWNfc3RhdHVzX3dhdGNoZG9nKHBhZGFwdGVyKTsKIAotCXJ0d19oYWxfZG1fd2F0Y2hkb2cyM2EocGFkYXB0ZXIpOworCXJ0bDg3MjNhX0hhbERtV2F0Y2hEb2cocGFkYXB0ZXIpOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCiAJLyogICovCiAJLyogIEJULUNvZXhpc3QgKi8KIAkvKiAgKi8KLQlCVF9Db2V4aXN0TWVjaGFuaXNtKHBhZGFwdGVyKTsKLSNlbmRpZgorCXJ0bDg3MjNhX0JUX2RvX2NvZXhpc3QocGFkYXB0ZXIpOwogfQogCi12b2lkIGxwc19jdHJsX3drX2hkbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBscHNfY3RybF90eXBlKQorc3RhdGljIHZvaWQgbHBzX2N0cmxfd2tfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGxwc19jdHJsX3R5cGUpCiB7CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAl1OCBtc3RhdHVzOwogCi0JaWYgKChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpID09IHRydWUpIHx8Ci0JICAgIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSkgPT0gdHJ1ZSkpCisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkgfHwKKwkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGxwc19jdHJsX3R5cGUpCiAJewogCQljYXNlIExQU19DVFJMX1NDQU46Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCi0JCQlCVF9XaWZpU2Nhbk5vdGlmeShwYWRhcHRlciwgdHJ1ZSk7Ci0JCQlpZiAoQlRfMUFudChwYWRhcHRlcikgPT0gZmFsc2UpCi0jZW5kaWYKLQkJCXsKKwkJCXJ0bDg3MjNhX0JUX3dpZmlzY2FuX25vdGlmeShwYWRhcHRlciwgdHJ1ZSk7CisJCQlpZiAoIXJ0bDg3MjNhX0JUX3VzaW5nX2FudGVubmFfMShwYWRhcHRlcikpIHsKIAkJCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKQogCQkJCQlMUFNfTGVhdmUyM2EocGFkYXB0ZXIpOwogCQkJfQpAQCAtMTI2OSw0MiArMTA2MSwyNiBAQAogCQkJbXN0YXR1cyA9IDE7LyogY29ubmVjdCAqLwogCQkJLyogIFJlc2V0IExQUyBTZXR0aW5nICovCiAJCQlwYWRhcHRlci0+cHdyY3RybHByaXYuTHBzSWRsZUNvdW50ID0gMDsKLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfSDJDX0ZXX0pPSU5CU1NSUFQsCi0JCQkJCSAgICAgKHU4ICopJm1zdGF0dXMpOwotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAotCQkJQlRfV2lmaU1lZGlhU3RhdHVzTm90aWZ5KHBhZGFwdGVyLCBtc3RhdHVzKTsKLSNlbmRpZgorCQkJcnRsODcyM2Ffc2V0X0Z3Sm9pbkJzc1JlcG9ydF9jbWQocGFkYXB0ZXIsIDEpOworCQkJcnRsODcyM2FfQlRfbWVkaWFzdGF0dXNfbm90aWZ5KHBhZGFwdGVyLCBtc3RhdHVzKTsKIAkJCWJyZWFrOwogCQljYXNlIExQU19DVFJMX0RJU0NPTk5FQ1Q6CiAJCQltc3RhdHVzID0gMDsvKiBkaXNjb25uZWN0ICovCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCi0JCQlCVF9XaWZpTWVkaWFTdGF0dXNOb3RpZnkocGFkYXB0ZXIsIG1zdGF0dXMpOwotCQkJaWYgKEJUXzFBbnQocGFkYXB0ZXIpID09IGZhbHNlKQotI2VuZGlmCi0JCQl7CisJCQlydGw4NzIzYV9CVF9tZWRpYXN0YXR1c19ub3RpZnkocGFkYXB0ZXIsIG1zdGF0dXMpOworCQkJaWYgKCFydGw4NzIzYV9CVF91c2luZ19hbnRlbm5hXzEocGFkYXB0ZXIpKQogCQkJCUxQU19MZWF2ZTIzYShwYWRhcHRlcik7Ci0JCQl9Ci0JCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBULAotCQkJCQkgICAgICh1OCAqKSZtc3RhdHVzKTsKKwkJCXJ0bDg3MjNhX3NldF9Gd0pvaW5Cc3NSZXBvcnRfY21kKHBhZGFwdGVyLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIExQU19DVFJMX1NQRUNJQUxfUEFDS0VUOgogCQkJcHdycHJpdi0+RGVsYXlMUFNMYXN0VGltZVN0YW1wID0gamlmZmllczsKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQkJCUJUX1NwZWNpYWxQYWNrZXROb3RpZnkocGFkYXB0ZXIpOwotCQkJaWYgKEJUXzFBbnQocGFkYXB0ZXIpID09IGZhbHNlKQotI2VuZGlmCi0JCQl7CisJCQlydGw4NzIzYV9CVF9zcGVjaWFscGFja2V0X25vdGlmeShwYWRhcHRlcik7CisJCQlpZiAoIXJ0bDg3MjNhX0JUX3VzaW5nX2FudGVubmFfMShwYWRhcHRlcikpCiAJCQkJTFBTX0xlYXZlMjNhKHBhZGFwdGVyKTsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIExQU19DVFJMX0xFQVZFOgotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAotCQkJQlRfTHBzTGVhdmUocGFkYXB0ZXIpOwotCQkJaWYgKEJUXzFBbnQocGFkYXB0ZXIpID09IGZhbHNlKQotI2VuZGlmCi0JCQl7CisJCQlydGw4NzIzYV9CVF9scHNfbGVhdmUocGFkYXB0ZXIpOworCQkJaWYgKCFydGw4NzIzYV9CVF91c2luZ19hbnRlbm5hXzEocGFkYXB0ZXIpKQogCQkJCUxQU19MZWF2ZTIzYShwYWRhcHRlcik7Ci0JCQl9CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTMxMiwxMyArMTA4OCwxMyBAQAogCX0KIH0KIAotdTggcnR3X2xwc19jdHJsX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJICB1OCBscHNfY3RybF90eXBlLCB1OCBlbnF1ZXVlKQoraW50IHJ0d19scHNfY3RybF93a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgIHU4IGxwc19jdHJsX3R5cGUsIHU4IGVucXVldWUpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBoMmM7CiAJc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtICpwZHJ2ZXh0cmFfY21kX3Bhcm07CiAJc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlpZiAoZW5xdWV1ZSkgewogCQlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKQEAgLTEzNTUsNTUgKzExMzEsMTIgQEAKIAkgcnR3X3BzX3Byb2Nlc3NvcjIzYShwYWRhcHRlcik7CiB9CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotdTggcDJwX3Byb3RvY29sX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIGludCBpbnRDbWRUeXBlKQotewotCXN0cnVjdCBjbWRfb2JqICpwaDJjOwotCXN0cnVjdCBkcnZleHRyYV9jbWRfcGFybSAqcGRydmV4dHJhX2NtZF9wYXJtOwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwotCXU4IHJlcyA9IF9TVUNDRVNTOwotCi0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQl7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFwaDJjKSB7Ci0JCXJlcyA9IF9GQUlMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcGRydmV4dHJhX2NtZF9wYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtKSwKLQkJCQkgICAgIEdGUF9BVE9NSUMpOwotCWlmICghcGRydmV4dHJhX2NtZF9wYXJtKSB7Ci0JCWtmcmVlKHBoMmMpOwotCQlyZXMgPSBfRkFJTDsKLQkJZ290byBleGl0OwotCX0KLQotCXBkcnZleHRyYV9jbWRfcGFybS0+ZWNfaWQgPSBQMlBfUFJPVE9fV0tfQ0lEOwotCXBkcnZleHRyYV9jbWRfcGFybS0+dHlwZV9zaXplID0gaW50Q21kVHlwZTsgLyogQXMgdGhlIGNvbW1hbmQgdHBwZS4gKi8KLQlwZHJ2ZXh0cmFfY21kX3Bhcm0tPnBidWYgPSBOVUxMOwkgICAgLyogTXVzdCBiZSBOVUxMIGhlcmUgKi8KLQotCWluaXRfaDJmd2NtZF93X3Bhcm1fbm9fcnNwKHBoMmMsIHBkcnZleHRyYV9jbWRfcGFybSwKLQkJCQkgICBHRU5fQ01EX0NPREUoX1NldF9EcnZfRXh0cmEpKTsKLQotCXJlcyA9IHJ0d19lbnF1ZXVlX2NtZDIzYShwY21kcHJpdiwgcGgyYyk7Ci1leGl0OgotCi0JcmV0dXJuIHJlczsKLX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi11OCBydHdfcHNfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlcikKK2ludCBydHdfcHNfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlcikKIHsKIAlzdHJ1Y3QgY21kX29iaiAqcHBzY21kOwogCXN0cnVjdCBkcnZleHRyYV9jbWRfcGFybSAqcGRydmV4dHJhX2NtZF9wYXJtOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7Ci0KLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlwcHNjbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmICghcHBzY21kKSB7CkBAIC0xNDQzLDExICsxMTc2LDExIEBACiAJCXJldHVybjsKIAogCWlmIChwc3RhX2JtYy0+c2xlZXBxX2xlbiA9PSAwKSB7Ci0JCXU4IHZhbCA9IDA7CisJCWJvb2wgdmFsOwogCi0JCXJ0dzIzYV9oYWxfZ2V0X2h3cmVnKHBhZGFwdGVyLCBIV19WQVJfQ0hLX0hJX1FVRVVFX0VNUFRZLCAmdmFsKTsKKwkJdmFsID0gcnRsODcyM2FfY2hrX2hpX3F1ZXVlX2VtcHR5KHBhZGFwdGVyKTsKIAotCQl3aGlsZSh2YWwgPT0gZmFsc2UpIHsKKwkJd2hpbGUgKHZhbCA9PSBmYWxzZSkgewogCQkJbXNsZWVwKDEwMCk7CiAKIAkJCWNudCsrOwpAQCAtMTQ1NSwyNiArMTE4OCwyNSBAQAogCQkJaWYgKGNudD4xMCkKIAkJCQlicmVhazsKIAotCQkJcnR3MjNhX2hhbF9nZXRfaHdyZWcocGFkYXB0ZXIsCi0JCQkJCSAgICAgSFdfVkFSX0NIS19ISV9RVUVVRV9FTVBUWSwgJnZhbCk7CisJCQl2YWwgPSBydGw4NzIzYV9jaGtfaGlfcXVldWVfZW1wdHkocGFkYXB0ZXIpOwogCQl9CiAKIAkJaWYgKGNudCA8PSAxMCkgewogCQkJcHN0YXByaXYtPnRpbV9iaXRtYXAgJj0gfkJJVCgwKTsKIAkJCXBzdGFwcml2LT5zdGFfZHpfYml0bWFwICY9IH5CSVQoMCk7CiAKLQkJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9USU1fSUVfLCBOVUxMLCBmYWxzZSk7CisJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9USU0sIE5VTEwsIGZhbHNlKTsKIAkJfSBlbHNlIC8qIHJlIGNoZWNrIGFnYWluICovCiAJCQlydHdfY2hrX2hpX3F1ZXVlX2NtZDIzYShwYWRhcHRlcik7CiAJfQogfQogCi11OCBydHdfY2hrX2hpX3F1ZXVlX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIpCitpbnQgcnR3X2Noa19oaV9xdWV1ZV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyKQogewogCXN0cnVjdCBjbWRfb2JqICpwaDJjOwogCXN0cnVjdCBkcnZleHRyYV9jbWRfcGFybSAqcGRydmV4dHJhX2NtZF9wYXJtOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7Ci0JdTggcmVzID0gX1NVQ0NFU1M7CisJaW50IHJlcyA9IF9TVUNDRVNTOwogCiAJcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwaDJjKSB7CkBAIC0xNTA0LDEyICsxMjM2LDEyIEBACiB9CiAjZW5kaWYKIAotdTggcnR3X2MyaF93a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmMyaF9ldnQpCitpbnQgcnR3X2MyaF93a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmMyaF9ldnQpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBoMmM7CiAJc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtICpwZHJ2ZXh0cmFfY21kX3Bhcm07CiAJc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdiA9ICZwYWRhcHRlci0+Y21kcHJpdjsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlwaDJjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXBoMmMpIHsKQEAgLTE1MzksMTAgKzEyNzEsOSBAQAogCXJldHVybiByZXM7CiB9CiAKLXMzMiBjMmhfZXZ0X2hkbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBjMmhfZXZ0X2hkciAqYzJoX2V2dCwKLQkJYzJoX2lkX2ZpbHRlciBmaWx0ZXIpCitzdGF0aWMgaW50IGMyaF9ldnRfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGMyaF9ldnRfaGRyICpjMmhfZXZ0KQogewotCXMzMiByZXQgPSBfRkFJTDsKKwlpbnQgcmV0ID0gX0ZBSUw7CiAJdTggYnVmWzE2XTsKIAogCWlmICghYzJoX2V2dCkgewpAQCAtMTU1MCw3MyArMTI4MSw1NyBAQAogCQlpZiAoYzJoX2V2dF9yZWFkMjNhKGFkYXB0ZXIsIGJ1ZikgPT0gX1NVQ0NFU1MpIHsKIAkJCWMyaF9ldnQgPSAoc3RydWN0IGMyaF9ldnRfaGRyICopYnVmOwogCi0JCQlpZiAoZmlsdGVyICYmIGZpbHRlcihjMmhfZXZ0LT5pZCkgPT0gZmFsc2UpCi0JCQkJZ290byBleGl0OwotCi0JCQlyZXQgPSBydHdfaGFsX2MyaF9oYW5kbGVyMjNhKGFkYXB0ZXIsIGMyaF9ldnQpOworCQkJcmV0ID0gYzJoX2hhbmRsZXJfODcyM2EoYWRhcHRlciwgYzJoX2V2dCk7CiAJCX0KLQl9IGVsc2UgeworCX0gZWxzZQorCQlyZXQgPSBjMmhfaGFuZGxlcl84NzIzYShhZGFwdGVyLCBjMmhfZXZ0KTsKIAotCQlpZiAoZmlsdGVyICYmIGZpbHRlcihjMmhfZXZ0LT5pZCkgPT0gZmFsc2UpCi0JCQlnb3RvIGV4aXQ7Ci0KLQkJcmV0ID0gcnR3X2hhbF9jMmhfaGFuZGxlcjIzYShhZGFwdGVyLCBjMmhfZXZ0KTsKLQl9Ci1leGl0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGMyaF93a19jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBydHdfaXJxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBldnRfcHJpdiAqZXZ0cHJpdjsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGMyaF9ldnRfaGRyICpjMmhfZXZ0OwotCWMyaF9pZF9maWx0ZXIgY2N4X2lkX2ZpbHRlcjsKIAotCWV2dHByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGV2dF9wcml2LCBjMmhfd2spOworCWV2dHByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGV2dF9wcml2LCBpcnFfd2spOwogCWFkYXB0ZXIgPSBjb250YWluZXJfb2YoZXZ0cHJpdiwgc3RydWN0IHJ0d19hZGFwdGVyLCBldnRwcml2KTsKLQljY3hfaWRfZmlsdGVyID0gcnR3X2hhbF9jMmhfaWRfZmlsdGVyX2NjeDIzYShhZGFwdGVyKTsKIAotCWV2dHByaXYtPmMyaF93a19hbGl2ZSA9IHRydWU7Ci0KLQl3aGlsZSAoIXJ0d19jYnVmX2VtcHR5MjNhKGV2dHByaXYtPmMyaF9xdWV1ZSkpIHsKLQkJYzJoX2V2dCA9IChzdHJ1Y3QgYzJoX2V2dF9oZHIgKikKLQkJCXJ0d19jYnVmX3BvcDIzYShldnRwcml2LT5jMmhfcXVldWUpOwotCQlpZiAoYzJoX2V2dCkgewotCQkJLyogVGhpcyBDMkggZXZlbnQgaXMgcmVhZCwgY2xlYXIgaXQgKi8KLQkJCWMyaF9ldnRfY2xlYXIyM2EoYWRhcHRlcik7Ci0JCX0gZWxzZSBpZiAoKGMyaF9ldnQgPSAoc3RydWN0IGMyaF9ldnRfaGRyICopCi0JCQkgICAga21hbGxvYygxNiwgR0ZQX0FUT01JQykpKSB7Ci0JCQkvKiBUaGlzIEMySCBldmVudCBpcyBub3QgcmVhZCwgcmVhZCAmIGNsZWFyIG5vdyAqLwotCQkJaWYgKGMyaF9ldnRfcmVhZDIzYShhZGFwdGVyLCAodTgqKWMyaF9ldnQpICE9IF9TVUNDRVNTKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogU3BlY2lhbCBwb2ludGVyIHRvIHRyaWdnZXIgYzJoX2V2dF9jbGVhcjIzYSBvbmx5ICovCi0JCWlmICgodm9pZCAqKWMyaF9ldnQgPT0gKHZvaWQgKilldnRwcml2KQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFjMmhfZXZ0X2V4aXN0KGMyaF9ldnQpKSB7Ci0JCQlrZnJlZShjMmhfZXZ0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGNjeF9pZF9maWx0ZXIoYzJoX2V2dC0+aWQpID09IHRydWUpIHsKLQkJCS8qIEhhbmRsZSBDQ1ggcmVwb3J0IGhlcmUgKi8KLQkJCXJ0d19oYWxfYzJoX2hhbmRsZXIyM2EoYWRhcHRlciwgYzJoX2V2dCk7Ci0JCQlrZnJlZShjMmhfZXZ0KTsKLQkJfSBlbHNlIHsKLQkJCS8qIEVucXVldWUgaW50byBjbWRfdGhyZWFkIGZvciBvdGhlcnMgKi8KLQkJCXJ0d19jMmhfd2tfY21kMjNhKGFkYXB0ZXIsICh1OCAqKWMyaF9ldnQpOwotCQl9Ci0JfQotCi0JZXZ0cHJpdi0+YzJoX3drX2FsaXZlID0gZmFsc2U7CisJYzJoX2V2dF9jbGVhcjIzYShhZGFwdGVyKTsKIH0KIAotdTggcnR3X2RydmV4dHJhX2NtZF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJ1ZikKK3ZvaWQgcnR3X2V2dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZHJ2ZXh0cmFfY21kX3Bhcm0gKnBkcnZleHRyYV9jbWQ7CisJc3RydWN0IGV2dF93b3JrICpld29yazsKKwlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlld29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZXZ0X3dvcmssIHdvcmspOworCWFkYXB0ZXIgPSBld29yay0+YWRhcHRlcjsKKworCWMyaF9ldnRfY2xlYXIyM2EoYWRhcHRlcik7CisKKwlpZiAoIWMyaF9ldnRfZXhpc3QoJmV3b3JrLT51LmMyaF9ldnQpKSB7CisJCWtmcmVlKGV3b3JrKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjMmhfaWRfZmlsdGVyX2NjeF84NzIzYShld29yay0+dS5jMmhfZXZ0LmlkKSA9PSB0cnVlKSB7CisJCS8qIEhhbmRsZSBDQ1ggcmVwb3J0IGhlcmUgKi8KKwkJYzJoX2hhbmRsZXJfODcyM2EoYWRhcHRlciwgJmV3b3JrLT51LmMyaF9ldnQpOworCQlrZnJlZShld29yayk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRW5xdWV1ZSBpbnRvIGNtZF90aHJlYWQgZm9yIG90aGVycy4KKwkJICogZXdvcmsgd2lsbCBiZSB0dXJuZWQgaW50byBhIGMyaF9ldnQgYW5kIGZyZWVkIG9uY2UgaXQKKwkJICogaGFzIGJlZW4gY29uc3VtZWQuCisJCSAqLworCQlydHdfYzJoX3drX2NtZDIzYShhZGFwdGVyLCAodTggKikmZXdvcmstPnUuYzJoX2V2dCk7CisJfQorfQorCitpbnQgcnR3X2RydmV4dHJhX2NtZF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpCit7CisJY29uc3Qgc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtICpwZHJ2ZXh0cmFfY21kOwogCiAJaWYgKCFwYnVmKQogCQlyZXR1cm4gSDJDX1BBUkFNRVRFUlNfRVJST1I7CkBAIC0xNjM2LDE2ICsxMzUxLDYgQEAKIAljYXNlIExQU19DVFJMX1dLX0NJRDoKIAkJbHBzX2N0cmxfd2tfaGRsKHBhZGFwdGVyLCAodTgpcGRydmV4dHJhX2NtZC0+dHlwZV9zaXplKTsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQljYXNlIFAyUF9QU19XS19DSUQ6Ci0JCXAycF9wc193a19oZGwyM2EocGFkYXB0ZXIsIHBkcnZleHRyYV9jbWQtPnR5cGVfc2l6ZSk7Ci0JCWJyZWFrOwotCWNhc2UgUDJQX1BST1RPX1dLX0NJRDoKLQkJLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExLzA3LzAxICovCi0JCS8qCUkgdXNlZCB0aGUgdHlwZV9zaXplIGFzIHRoZSB0eXBlIGNvbW1hbmQgKi8KLQkJcDJwX3Byb3RvY29sX3drX2hkbDIzYShwYWRhcHRlciwgcGRydmV4dHJhX2NtZC0+dHlwZV9zaXplKTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogIENPTkZJR184NzIzQVVfUDJQICovCiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJY2FzZSBDSEVDS19ISVFfV0tfQ0lEOgogCQlydHdfY2hrX2hpX3F1ZXVlX2hkbChwYWRhcHRlcik7CkBAIC0xNjUzLDcgKzEzNTgsNyBAQAogI2VuZGlmIC8qIENPTkZJR184NzIzQVVfQVBfTU9ERSAqLwogCWNhc2UgQzJIX1dLX0NJRDoKIAkJYzJoX2V2dF9oZGwocGFkYXB0ZXIsCi0JCQkgICAgKHN0cnVjdCBjMmhfZXZ0X2hkciAqKXBkcnZleHRyYV9jbWQtPnBidWYsIE5VTEwpOworCQkJICAgIChzdHJ1Y3QgYzJoX2V2dF9oZHIgKilwZHJ2ZXh0cmFfY21kLT5wYnVmKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTY2MiwxNCArMTM2NywxOCBAQAogCiAJaWYgKHBkcnZleHRyYV9jbWQtPnBidWYgJiYgKHBkcnZleHRyYV9jbWQtPnR5cGVfc2l6ZSA+IDApKSB7CiAJCWtmcmVlKHBkcnZleHRyYV9jbWQtPnBidWYpOwotCQlwZHJ2ZXh0cmFfY21kLT5wYnVmID0gTlVMTDsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBzZXQgcGRydmV4dHJhX2NtZC0+cGJ1ZiA9IE5VTEwgYXMgd2Ugd2VyZQorCQkgKiBvcGVyYXRpbmcgb24gYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBwY21kLT5wYXJtYnVmCisJCSAqIGNyZWF0ZWQgaW4gcnR3X2NtZF93b3JrKCkuCisJCSAqLwogCX0KIAogCXJldHVybiBIMkNfU1VDQ0VTUzsKIH0KIAogdm9pZCBydHdfc3VydmV5X2NtZF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJICAgICBzdHJ1Y3QgY21kX29iaiAqcGNtZCkKKwkJCQlzdHJ1Y3QgY21kX29iaiAqcGNtZCkKIHsKIAlzdHJ1Y3QJbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCkBAIC0xNzQ4LDE0ICsxNDU3LDEzIEBACiAKIAlkZWxfdGltZXJfc3luYygmcG1sbWVwcml2LT5hc3NvY190aW1lcik7CiAKLQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci0KIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7CiAJCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJnBhZGFwdGVyLT5zdGFwcml2LAogCQkJCQkgIHBuZXR3b3JrLT5NYWNBZGRyZXNzKTsKIAkJaWYgKCFwc3RhKSB7CiAJCQlwc3RhID0gcnR3X2FsbG9jX3N0YWluZm8yM2EoJnBhZGFwdGVyLT5zdGFwcml2LAotCQkJCQkJIHBuZXR3b3JrLT5NYWNBZGRyZXNzKTsKKwkJCQkJCSAgICBwbmV0d29yay0+TWFjQWRkcmVzcywKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJCWlmICghcHN0YSkgewogCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfZXJyXywKIAkJCQkJICgiXG5DYW4ndCBhbGxvYyBzdGFfaW5mbyB3aGVuICIKQEAgLTE3NjQsOSArMTQ3MiwxMSBAQAogCQkJfQogCQl9CiAKKwkJc3Bpbl9sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwogCQlydHdfaW5kaWNhdGVfY29ubmVjdDIzYShwYWRhcHRlcik7CisJCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwogCX0gZWxzZSB7Ci0JCXB3bGFuID0gcnR3X2FsbG9jX25ldHdvcmsocG1sbWVwcml2KTsKKwkJcHdsYW4gPSBydHdfYWxsb2NfbmV0d29yayhwbWxtZXByaXYsIEdGUF9LRVJORUwpOwogCQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZS5sb2NrKTsKIAkJaWYgKCFwd2xhbikgewogCQkJcHdsYW4gPSBydHdfZ2V0X29sZGVzdF93bGFuX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSk7CkBAIC0xNzk3LDcgKzE1MDcsNyBAQAogCiAJCS8qICByZXNldCBEU0NvbmZpZyAqLwogCi0JCV9jbHJfZndzdGF0ZV8ocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORyk7CisJCWNscl9md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkcpOwogCiAJCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAJCS8qICB3ZSB3aWxsIHNldCBfRldfTElOS0VEIHdoZW4gdGhlcmUgaXMgb25lIG1vcmUgc2F0IHRvCkBAIC0xODA2LDggKzE1MTYsNiBAQAogCiBjcmVhdGVic3NfY21kX2ZhaWw6CiAKLQlzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKLQogCXJ0d19mcmVlX2NtZF9vYmoyM2EocGNtZCk7CiB9CiAKQEAgLTE4NTgsOCArMTU2Niw4IEBACiAKIAlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CiAKLQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX01QX1NUQVRFKSA9PSB0cnVlKSAmJgotCSAgICAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKSA9PSB0cnVlKSkKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfTVBfU1RBVEUpICYmCisJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORykpCiAJCV9jbHJfZndzdGF0ZV8ocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORyk7CiAKIAlzZXRfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpOwpAQCAtMTg2OCw5ICsxNTc2LDMgQEAKIGV4aXQ6CiAJcnR3X2ZyZWVfY21kX29iajIzYShwY21kKTsKIH0KLQotdm9pZCBydHdfZ2V0cnR0YmxfY21kX2NtZHJzcF9jYWxsYmFjayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgICAgIHN0cnVjdCBjbWRfb2JqICpwY21kKQotewotCXJ0d19mcmVlX2NtZF9vYmoyM2EocGNtZCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2VmdXNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2VmdXNlLmMKaW5kZXggMzViMTc3Zi4uY2MwNjNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19lZnVzZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfZWZ1c2UuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogCiAjaW5jbHVkZSA8cnR3X2VmdXNlLmg+CisjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CisjaW5jbHVkZSA8dXNiX29wc19saW51eC5oPgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBsb2NhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTI2LDggKzI4LDExIEBACiAjZGVmaW5lIEVGVVNFX0NUUkwJCQlSRUdfRUZVU0VfQ1RSTAkJLyogIEUtRnVzZSBDb250cm9sLiAqLwogLyogICovCiAKKyNkZWZpbmUgVk9MVEFHRV9WMjUJCTB4MDMKKyNkZWZpbmUgTERPRTI1X1NISUZUCQkyOAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjoJRWZ1c2VfUG93ZXJTd2l0Y2gyM2EKKyAqIEZ1bmN0aW9uOglFZnVzZV9Qb3dlclN3aXRjaAogICoKICAqIE92ZXJ2aWV3OglXaGVuIHdlIHdhbnQgdG8gZW5hYmxlIHdyaXRlIG9wZXJhdGlvbiwgd2Ugc2hvdWxkIGNoYW5nZSB0bwogICoJCQkJcHdyIG9uIHN0YXRlLiBXaGVuIHdlIHN0b3Agd3JpdGUsIHdlIHNob3VsZCBzd2l0Y2ggdG8gNTAwayBtb2RlCkBAIC00NCwxMyArNDksNTUgQEAKICAqIDExLzE3LzIwMDgJTUhDCQlDcmVhdGUgVmVyc2lvbiAwLgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLUVmdXNlX1Bvd2VyU3dpdGNoMjNhKAotCXN0cnVjdCBydHdfYWRhcHRlciAqCXBBZGFwdGVyLAotCXU4CQliV3JpdGUsCi0JdTgJCVB3clN0YXRlKQorc3RhdGljIHZvaWQgRWZ1c2VfUG93ZXJTd2l0Y2goc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgICAgIHU4IGJXcml0ZSwgdTggUHdyU3RhdGUpCiB7Ci0JcEFkYXB0ZXItPkhhbEZ1bmMuRWZ1c2VQb3dlclN3aXRjaChwQWRhcHRlciwgYldyaXRlLCBQd3JTdGF0ZSk7CisJdTggdGVtcHZhbDsKKwl1MTYgdG1wVjE2OworCisJaWYgKFB3clN0YXRlID09IHRydWUpIHsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0VGVVNFX0FDQ0VTUywgRUZVU0VfQUNDRVNTX09OKTsKKworCQkvKiAgMS4yViBQb3dlcjogRnJvbSBWRERPTiB3aXRoIFBvd2VyCisJCSAgICBDdXQoMHgwMDAwaFsxNV0pLCBkZWZ1YWx0IHZhbGlkICovCisJCXRtcFYxNiA9IHJ0bDg3MjNhdV9yZWFkMTYocGFkYXB0ZXIsIFJFR19TWVNfSVNPX0NUUkwpOworCQlpZiAoISh0bXBWMTYgJiBQV0NfRVYxMlYpKSB7CisJCQl0bXBWMTYgfD0gUFdDX0VWMTJWOworCQkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19TWVNfSVNPX0NUUkwsIHRtcFYxNik7CisJCX0KKwkJLyogIFJlc2V0OiAweDAwMDBoWzI4XSwgZGVmYXVsdCB2YWxpZCAqLworCQl0bXBWMTYgPSBydGw4NzIzYXVfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pOworCQlpZiAoISh0bXBWMTYgJiBGRU5fRUxEUikpIHsKKwkJCXRtcFYxNiB8PSBGRU5fRUxEUjsKKwkJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sIHRtcFYxNik7CisJCX0KKworCQkvKiAgQ2xvY2s6IEdhdGVkKDB4MDAwOGhbNV0pIDhNKDB4MDAwOGhbMV0pIGNsb2NrCisJCSAgICBmcm9tIEFOQSwgZGVmYXVsdCB2YWxpZCAqLworCQl0bXBWMTYgPSBydGw4NzIzYXVfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0NMS1IpOworCQlpZiAoKCEodG1wVjE2ICYgTE9BREVSX0NMS19FTikpIHx8ICghKHRtcFYxNiAmIEFOQThNKSkpIHsKKwkJCXRtcFYxNiB8PSAoTE9BREVSX0NMS19FTiB8IEFOQThNKTsKKwkJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0NMS1IsIHRtcFYxNik7CisJCX0KKworCQlpZiAoYldyaXRlID09IHRydWUpIHsKKwkJCS8qICBFbmFibGUgTERPIDIuNVYgYmVmb3JlIHJlYWQvd3JpdGUgYWN0aW9uICovCisJCQl0ZW1wdmFsID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBFRlVTRV9URVNUICsgMyk7CisJCQl0ZW1wdmFsICY9IDB4MEY7CisJCQl0ZW1wdmFsIHw9IChWT0xUQUdFX1YyNSA8PCA0KTsKKwkJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIEVGVVNFX1RFU1QgKyAzLAorCQkJCQkgdGVtcHZhbCB8IDB4ODApOworCQl9CisJfSBlbHNlIHsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0VGVVNFX0FDQ0VTUywgRUZVU0VfQUNDRVNTX09GRik7CisKKwkJaWYgKGJXcml0ZSA9PSB0cnVlKSB7CisJCQkvKiAgRGlzYWJsZSBMRE8gMi41ViBhZnRlciByZWFkL3dyaXRlIGFjdGlvbiAqLworCQkJdGVtcHZhbCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgRUZVU0VfVEVTVCArIDMpOworCQkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgRUZVU0VfVEVTVCArIDMsCisJCQkJCSB0ZW1wdmFsICYgMHg3Rik7CisJCX0KKwl9CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc0LDcgKzEyMSwxMCBAQAogewogCXUxNiByZXQgPSAwOwogCi0JcmV0ID0gcEFkYXB0ZXItPkhhbEZ1bmMuRWZ1c2VHZXRDdXJyZW50U2l6ZShwQWRhcHRlciwgZWZ1c2VUeXBlKTsKKwlpZiAoZWZ1c2VUeXBlID09IEVGVVNFX1dJRkkpCisJCXJldCA9IHJ0bDg3MjNhX0VmdXNlR2V0Q3VycmVudFNpemVfV2lGaShwQWRhcHRlcik7CisJZWxzZQorCQlyZXQgPSBydGw4NzIzYV9FZnVzZUdldEN1cnJlbnRTaXplX0JUKHBBZGFwdGVyKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTAsMjEgKzE2MCwyMiBAQAogCXUxNglyZXRyeTsKIAogCS8qIFdyaXRlIEFkZHJlc3MgKi8KLQlydHdfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMSwgKF9vZmZzZXQgJiAweGZmKSk7Ci0JcmVhZGJ5dGUgPSBydHdfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCsyKTsKLQlydHdfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMiwgKChfb2Zmc2V0ID4+IDgpICYgMHgwMykgfCAocmVhZGJ5dGUgJiAweGZjKSk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzEsIChfb2Zmc2V0ICYgMHhmZikpOworCXJlYWRieXRlID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMik7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzIsCisJCQkgKChfb2Zmc2V0ID4+IDgpICYgMHgwMykgfCAocmVhZGJ5dGUgJiAweGZjKSk7CiAKIAkvKiBXcml0ZSBiaXQgMzIgMCAqLwotCXJlYWRieXRlID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMyk7Ci0JcnR3X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzMsIChyZWFkYnl0ZSAmIDB4N2YpKTsKKwlyZWFkYnl0ZSA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKzMpOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgRUZVU0VfQ1RSTCszLCByZWFkYnl0ZSAmIDB4N2YpOwogCiAJLyogQ2hlY2sgYml0IDMyIHJlYWQtcmVhZHkgKi8KIAlyZXRyeSA9IDA7Ci0JdmFsdWUzMiA9IHJ0d19yZWFkMzIoQWRhcHRlciwgRUZVU0VfQ1RSTCk7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIoQWRhcHRlciwgRUZVU0VfQ1RSTCk7CiAJLyogd2hpbGUoISgoKHZhbHVlMzIgPj4gMjQpICYgMHhmZikgJiAweDgwKSAgJiYgKHJldHJ5PDEwKSkgKi8KIAl3aGlsZSghKCgodmFsdWUzMiA+PiAyNCkgJiAweGZmKSAmIDB4ODApICAmJiAocmV0cnk8MTAwMDApKQogCXsKLQkJdmFsdWUzMiA9IHJ0d19yZWFkMzIoQWRhcHRlciwgRUZVU0VfQ1RSTCk7CisJCXZhbHVlMzIgPSBydGw4NzIzYXVfcmVhZDMyKEFkYXB0ZXIsIEVGVVNFX0NUUkwpOwogCQlyZXRyeSsrOwogCX0KIApAQCAtMTMzLDQ2ICsxODQsOTIgQEAKIAkvKiAgRGVzaWduZXIgc2F5cyB0aGF0IHRoZXJlIHNoYWxsIGJlIHNvbWUgZGVsYXkgYWZ0ZXIgcmVhZHkgYml0IGlzIHNldCwgb3IgdGhlICovCiAJLyogIHJlc3VsdCB3aWxsIGFsd2F5cyBzdGF5IG9uIGxhc3QgZGF0YSB3ZSByZWFkLiAqLwogCXVkZWxheSg1MCk7Ci0JdmFsdWUzMiA9IHJ0d19yZWFkMzIoQWRhcHRlciwgRUZVU0VfQ1RSTCk7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIoQWRhcHRlciwgRUZVU0VfQ1RSTCk7CiAKIAkqcGJ1ZiA9ICh1OCkodmFsdWUzMiAmIDB4ZmYpOwogfQogCi0vKiAgKi8KLS8qCURlc2NyaXB0aW9uOiAqLwotLyoJCTEuIEV4ZWN1dGUgRS1GdXNlIHJlYWQgYnl0ZSBvcGVyYXRpb24gYWNjb3JkaW5nIGFzIG1hcCBvZmZzZXQgYW5kICovCi0vKgkJICAgIHNhdmUgdG8gRS1GdXNlIHRhYmxlLiAqLwotLyoJCTIuIFJlZmVyZWQgZnJvbSBTRDEgUmljaGFyZC4gKi8KLS8qICAqLwotLyoJQXNzdW1wdGlvbjogKi8KLS8qCQkxLiBCb290IGZyb20gRS1GdXNlIGFuZCBzdWNjZXNzZnVsbHkgYXV0by1sb2FkLiAqLwotLyoJCTIuIFBBU1NJVkVfTEVWRUwgKFVTQiBpbnRlcmZhY2UpICovCi0vKiAgKi8KLS8qCUNyZWF0ZWQgYnkgUm9nZXIsIDIwMDguMTAuMjEuICovCi0vKiAgKi8KLS8qCTIwMDgvMTIvMTIgTUgJMS4gUmVvcmdhbml6ZSBjb2RlIGZsb3cgYW5kIHJlc2VydmUgYnl0ZXMuIGFuZCBhZGQgZGVzY3JpcHRpb24uICovCi0vKgkJCQkJMi4gQWRkIGVmdXNlIHV0aWxpemF0aW9uIGNvbGxlY3QuICovCi0vKgkyMDA4LzEyLzIyIE1ICVJlYWQgRWZ1c2UgbXVzdCBjaGVjayBpZiB3ZSB3cml0ZSBzZWN0aW9uIDEgZGF0YSBhZ2FpbiEhISBTZWMxICovCi0vKgkJCQkJd3JpdGUgYWRkciBtdXN0IGJlIGFmdGVyIHNlYzUuICovCi0vKiAgKi8KLQotdm9pZAotZWZ1c2VfUmVhZEVGdXNlKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwgdTggZWZ1c2VUeXBlLAotCQl1MTYgX29mZnNldCwgdTE2IF9zaXplX2J5dGUsIHU4ICpwYnVmKTsKLXZvaWQKLWVmdXNlX1JlYWRFRnVzZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsIHU4IGVmdXNlVHlwZSwKLQkJdTE2IF9vZmZzZXQsIHUxNiBfc2l6ZV9ieXRlLCB1OCAqcGJ1ZikKLXsKLQlBZGFwdGVyLT5IYWxGdW5jLlJlYWRFRnVzZShBZGFwdGVyLCBlZnVzZVR5cGUsIF9vZmZzZXQsCi0JCQkJICAgX3NpemVfYnl0ZSwgcGJ1Zik7Ci19Ci0KIHZvaWQKIEVGVVNFX0dldEVmdXNlRGVmaW5pdGlvbjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1OCBlZnVzZVR5cGUsCi0JCQkgdTggdHlwZSwgdm9pZCAqcE91dCkKKwkJCSAgICB1OCB0eXBlLCB2b2lkICpwT3V0KQogewotCXBBZGFwdGVyLT5IYWxGdW5jLkVGVVNFR2V0RWZ1c2VEZWZpbml0aW9uKHBBZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJCQkgIHR5cGUsIHBPdXQpOworCXU4ICpwdTFUbXA7CisJdTE2ICpwdTJUbXA7CisJdTggKnBNYXhfc2VjdGlvbjsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVFlQRV9FRlVTRV9NQVhfU0VDVElPTjoKKwkJcE1heF9zZWN0aW9uID0gKHU4ICopIHBPdXQ7CisKKwkJaWYgKGVmdXNlVHlwZSA9PSBFRlVTRV9XSUZJKQorCQkJKnBNYXhfc2VjdGlvbiA9IEVGVVNFX01BWF9TRUNUSU9OXzg3MjNBOworCQllbHNlCisJCQkqcE1heF9zZWN0aW9uID0gRUZVU0VfQlRfTUFYX1NFQ1RJT047CisJCWJyZWFrOworCisJY2FzZSBUWVBFX0VGVVNFX1JFQUxfQ09OVEVOVF9MRU46CisJCXB1MlRtcCA9ICh1MTYgKikgcE91dDsKKworCQlpZiAoZWZ1c2VUeXBlID09IEVGVVNFX1dJRkkpCisJCQkqcHUyVG1wID0gRUZVU0VfUkVBTF9DT05URU5UX0xFTl84NzIzQTsKKwkJZWxzZQorCQkJKnB1MlRtcCA9IEVGVVNFX0JUX1JFQUxfQ09OVEVOVF9MRU47CisJCWJyZWFrOworCisJY2FzZSBUWVBFX0FWQUlMQUJMRV9FRlVTRV9CWVRFU19CQU5LOgorCQlwdTJUbXAgPSAodTE2ICopIHBPdXQ7CisKKwkJaWYgKGVmdXNlVHlwZSA9PSBFRlVTRV9XSUZJKQorCQkJKnB1MlRtcCA9IChFRlVTRV9SRUFMX0NPTlRFTlRfTEVOXzg3MjNBIC0KKwkJCQkgICBFRlVTRV9PT0JfUFJPVEVDVF9CWVRFUyk7CisJCWVsc2UKKwkJCSpwdTJUbXAgPSAoRUZVU0VfQlRfUkVBTF9CQU5LX0NPTlRFTlRfTEVOIC0KKwkJCQkgICBFRlVTRV9QUk9URUNUX0JZVEVTX0JBTkspOworCQlicmVhazsKKworCWNhc2UgVFlQRV9BVkFJTEFCTEVfRUZVU0VfQllURVNfVE9UQUw6CisJCXB1MlRtcCA9ICh1MTYgKikgcE91dDsKKworCQlpZiAoZWZ1c2VUeXBlID09IEVGVVNFX1dJRkkpCisJCQkqcHUyVG1wID0gKEVGVVNFX1JFQUxfQ09OVEVOVF9MRU5fODcyM0EgLQorCQkJCSAgIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTKTsKKwkJZWxzZQorCQkJKnB1MlRtcCA9IChFRlVTRV9CVF9SRUFMX0NPTlRFTlRfTEVOIC0KKwkJCQkgICAoRUZVU0VfUFJPVEVDVF9CWVRFU19CQU5LICogMykpOworCQlicmVhazsKKworCWNhc2UgVFlQRV9FRlVTRV9NQVBfTEVOOgorCQlwdTJUbXAgPSAodTE2ICopIHBPdXQ7CisKKwkJaWYgKGVmdXNlVHlwZSA9PSBFRlVTRV9XSUZJKQorCQkJKnB1MlRtcCA9IEVGVVNFX01BUF9MRU5fODcyM0E7CisJCWVsc2UKKwkJCSpwdTJUbXAgPSBFRlVTRV9CVF9NQVBfTEVOOworCQlicmVhazsKKworCWNhc2UgVFlQRV9FRlVTRV9QUk9URUNUX0JZVEVTX0JBTks6CisJCXB1MVRtcCA9ICh1OCAqKSBwT3V0OworCisJCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKKwkJCSpwdTFUbXAgPSBFRlVTRV9PT0JfUFJPVEVDVF9CWVRFUzsKKwkJZWxzZQorCQkJKnB1MVRtcCA9IEVGVVNFX1BST1RFQ1RfQllURVNfQkFOSzsKKwkJYnJlYWs7CisKKwljYXNlIFRZUEVfRUZVU0VfQ09OVEVOVF9MRU5fQkFOSzoKKwkJcHUyVG1wID0gKHUxNiAqKSBwT3V0OworCisJCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKKwkJCSpwdTJUbXAgPSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOXzg3MjNBOworCQllbHNlCisJCQkqcHUyVG1wID0gRUZVU0VfQlRfUkVBTF9CQU5LX0NPTlRFTlRfTEVOOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXB1MVRtcCA9ICh1OCAqKSBwT3V0OworCQkqcHUxVG1wID0gMDsKKwkJYnJlYWs7CisJfQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDgsMjIgKzMwNSwyMiBAQAogCXsKIAkJLyogV3JpdGUgRS1mdXNlIFJlZ2lzdGVyIGFkZHJlc3MgYml0MH43ICovCiAJCXRlbXAgPSBBZGRyZXNzICYgMHhGRjsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzEsIHRlbXApOwotCQlCeXRldGVtcCA9IHJ0d19yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKzIpOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMSwgdGVtcCk7CisJCUJ5dGV0ZW1wID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMik7CiAJCS8qIFdyaXRlIEUtZnVzZSBSZWdpc3RlciBhZGRyZXNzIGJpdDh+OSAqLwogCQl0ZW1wID0gKChBZGRyZXNzID4+IDgpICYgMHgwMykgfCAoQnl0ZXRlbXAgJiAweEZDKTsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzIsIHRlbXApOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMiwgdGVtcCk7CiAKIAkJLyogV3JpdGUgMHgzMFszMV09IDAgKi8KLQkJQnl0ZXRlbXAgPSBydHdfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCszKTsKKwkJQnl0ZXRlbXAgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCszKTsKIAkJdGVtcCA9IEJ5dGV0ZW1wICYgMHg3RjsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzMsIHRlbXApOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMywgdGVtcCk7CiAKIAkJLyogV2FpdCBXcml0ZS1yZWFkeSAoMHgzMFszMV09IDEpICovCi0JCUJ5dGV0ZW1wID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMyk7CisJCUJ5dGV0ZW1wID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMyk7CiAJCXdoaWxlKCEoQnl0ZXRlbXAgJiAweDgwKSkKIAkJewotCQkJQnl0ZXRlbXAgPSBydHdfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCszKTsKKwkJCUJ5dGV0ZW1wID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMyk7CiAJCQlrKys7CiAJCQlpZiAoayA9PSAxMDAwKQogCQkJewpAQCAtMjMxLDcgKzMyOCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJZGF0YSA9IHJ0d19yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKTsKKwkJZGF0YSA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKTsKIAkJcmV0dXJuIGRhdGE7CiAJfQogCWVsc2UKQEAgLTI3OCwyNyArMzc1LDI3IEBACiAKIAlpZiAoQWRkcmVzcyA8IGNvbnRlbnRMZW4pCS8qIEUtZnVzZSA1MTJCeXRlICovCiAJewotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwsIFZhbHVlKTsKKwkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMLCBWYWx1ZSk7CiAKIAkJLyogV3JpdGUgRS1mdXNlIFJlZ2lzdGVyIGFkZHJlc3MgYml0MH43ICovCiAJCXRlbXAgPSBBZGRyZXNzICYgMHhGRjsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCBFRlVTRV9DVFJMKzEsIHRlbXApOwotCQlCeXRldGVtcCA9IHJ0d19yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKzIpOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMSwgdGVtcCk7CisJCUJ5dGV0ZW1wID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMik7CiAKIAkJLyogV3JpdGUgRS1mdXNlIFJlZ2lzdGVyIGFkZHJlc3MgYml0OH45ICovCiAJCXRlbXAgPSAoKEFkZHJlc3MgPj4gOCkgJiAweDAzKSB8IChCeXRldGVtcCAmIDB4RkMpOwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMiwgdGVtcCk7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgRUZVU0VfQ1RSTCsyLCB0ZW1wKTsKIAogCQkvKiBXcml0ZSAweDMwWzMxXT0gMSAqLwotCQlCeXRldGVtcCA9IHJ0d19yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKzMpOworCQlCeXRldGVtcCA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKzMpOwogCQl0ZW1wID0gQnl0ZXRlbXAgfCAweDgwOwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIEVGVVNFX0NUUkwrMywgdGVtcCk7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgRUZVU0VfQ1RSTCszLCB0ZW1wKTsKIAogCQkvKiBXYWl0IFdyaXRlLXJlYWR5ICgweDMwWzMxXT0gMCkgKi8KLQkJQnl0ZXRlbXAgPSBydHdfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCszKTsKKwkJQnl0ZXRlbXAgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCszKTsKIAkJd2hpbGUoQnl0ZXRlbXAgJiAweDgwKQogCQl7Ci0JCQlCeXRldGVtcCA9IHJ0d19yZWFkOChBZGFwdGVyLCBFRlVTRV9DVFJMKzMpOworCQkJQnl0ZXRlbXAgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgRUZVU0VfQ1RSTCszKTsKIAkJCWsrKzsKIAkJCWlmIChrID09IDEwMCkKIAkJCXsKQEAgLTMxMCwzOCArNDA3LDM4IEBACiB9LyogRUZVU0VfV3JpdGUxQnl0ZSAqLwogCiAvKiAgMTEvMTYvMjAwOCBNSCBSZWFkIG9uZSBieXRlIGZyb20gcmVhbCBFZnVzZS4gKi8KLXU4CitpbnQKIGVmdXNlX09uZUJ5dGVSZWFkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHUxNiBhZGRyLCB1OCAqZGF0YSkKIHsKIAl1OAl0bXBpZHggPSAwOwotCXU4CWJSZXN1bHQ7CisJaW50CWJSZXN1bHQ7CiAKIAkvKiAgLS0tLS0tLS0tLS0tLS0tLS1lLWZ1c2UgcmVnIGN0cmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJLyogYWRkcmVzcyAqLwotCXJ0d193cml0ZTgocEFkYXB0ZXIsIEVGVVNFX0NUUkwrMSwgKHU4KShhZGRyJjB4ZmYpKTsKLQlydHdfd3JpdGU4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzIsICgodTgpKChhZGRyPj44KSAmMHgwMykpIHwKLQkocnR3X3JlYWQ4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzIpJjB4RkMpKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzEsICh1OCkoYWRkciYweGZmKSk7CisJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgRUZVU0VfQ1RSTCsyLCAoKHU4KSgoYWRkcj4+OCkgJjB4MDMpKSB8CisJKHJ0bDg3MjNhdV9yZWFkOChwQWRhcHRlciwgRUZVU0VfQ1RSTCsyKSYweEZDKSk7CiAKLQlydHdfd3JpdGU4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzMsICAweDcyKTsvKiByZWFkIGNtZCAqLworCXJ0bDg3MjNhdV93cml0ZTgocEFkYXB0ZXIsIEVGVVNFX0NUUkwrMywgIDB4NzIpOy8qIHJlYWQgY21kICovCiAKLQl3aGlsZSghKDB4ODAgJnJ0d19yZWFkOChwQWRhcHRlciwgRUZVU0VfQ1RSTCszKSkgJiYgKHRtcGlkeDwxMDApKQorCXdoaWxlKCEoMHg4MCAmcnRsODcyM2F1X3JlYWQ4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzMpKSAmJiAodG1waWR4PDEwMCkpCiAJCXRtcGlkeCsrOwogCWlmICh0bXBpZHggPCAxMDApIHsKLQkJKmRhdGEgPSBydHdfcmVhZDgocEFkYXB0ZXIsIEVGVVNFX0NUUkwpOwotCQliUmVzdWx0ID0gdHJ1ZTsKKwkJKmRhdGEgPSBydGw4NzIzYXVfcmVhZDgocEFkYXB0ZXIsIEVGVVNFX0NUUkwpOworCQliUmVzdWx0ID0gX1NVQ0NFU1M7CiAJfSBlbHNlIHsKIAkJKmRhdGEgPSAweGZmOwotCQliUmVzdWx0ID0gZmFsc2U7CisJCWJSZXN1bHQgPSBfRkFJTDsKIAl9CiAJcmV0dXJuIGJSZXN1bHQ7CiB9CiAKIC8qICAxMS8xNi8yMDA4IE1IIFdyaXRlIG9uZSBieXRlIHRvIHJlYWxkIEVmdXNlLiAqLwotdTgKK2ludAogZWZ1c2VfT25lQnl0ZVdyaXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHUxNiBhZGRyLCB1OCBkYXRhKQogewogCXU4CXRtcGlkeCA9IDA7Ci0JdTgJYlJlc3VsdDsKKwlpbnQJYlJlc3VsdDsKIAogCS8qIFJUX1RSQUNFKENPTVBfRUZVU0UsIERCR19MT1VELCAoIkFkZHIgPSAleCBEYXRhID0leFxuIiwgYWRkciwgZGF0YSkpOyAqLwogCkBAIC0zNDksNTEgKzQ0NiwyNiBAQAogCiAJLyogIC0tLS0tLS0tLS0tLS0tLS0tZS1mdXNlIHJlZyBjdHJsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIGFkZHJlc3MgKi8KLQlydHdfd3JpdGU4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzEsICh1OCkoYWRkciYweGZmKSk7Ci0JcnR3X3dyaXRlOChwQWRhcHRlciwgRUZVU0VfQ1RSTCsyLAotCShydHdfcmVhZDgocEFkYXB0ZXIsIEVGVVNFX0NUUkwrMikmMHhGQyl8KHU4KSgoYWRkcj4+OCkmMHgwMykpOwotCXJ0d193cml0ZTgocEFkYXB0ZXIsIEVGVVNFX0NUUkwsIGRhdGEpOy8qIGRhdGEgKi8KKwlydGw4NzIzYXVfd3JpdGU4KHBBZGFwdGVyLCBFRlVTRV9DVFJMKzEsICh1OCkoYWRkciYweGZmKSk7CisJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgRUZVU0VfQ1RSTCsyLAorCShydGw4NzIzYXVfcmVhZDgocEFkYXB0ZXIsIEVGVVNFX0NUUkwrMikmMHhGQyl8KHU4KSgoYWRkcj4+OCkmMHgwMykpOworCXJ0bDg3MjNhdV93cml0ZTgocEFkYXB0ZXIsIEVGVVNFX0NUUkwsIGRhdGEpOy8qIGRhdGEgKi8KIAotCXJ0d193cml0ZTgocEFkYXB0ZXIsIEVGVVNFX0NUUkwrMywgMHhGMik7Lyogd3JpdGUgY21kICovCisJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgRUZVU0VfQ1RSTCszLCAweEYyKTsvKiB3cml0ZSBjbWQgKi8KIAotCXdoaWxlKCgweDgwICYgIHJ0d19yZWFkOChwQWRhcHRlciwgRUZVU0VfQ1RSTCszKSkgJiYgKHRtcGlkeDwxMDApKSB7CisJd2hpbGUoKDB4ODAgJiBydGw4NzIzYXVfcmVhZDgocEFkYXB0ZXIsIEVGVVNFX0NUUkwrMykpICYmCisJICAgICAgKHRtcGlkeDwxMDApKSB7CiAJCXRtcGlkeCsrOwogCX0KIAotCWlmICh0bXBpZHg8MTAwKQotCXsKLQkJYlJlc3VsdCA9IHRydWU7Ci0JfQorCWlmICh0bXBpZHggPCAxMDApCisJCWJSZXN1bHQgPSBfU1VDQ0VTUzsKIAllbHNlCi0JewotCQliUmVzdWx0ID0gZmFsc2U7Ci0JfQorCQliUmVzdWx0ID0gX0ZBSUw7CiAKIAlyZXR1cm4gYlJlc3VsdDsKIH0KIAotaW50Ci1FZnVzZV9QZ1BhY2tldFJlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlciwgdTggb2Zmc2V0LCB1OCAqZGF0YSkKLXsKLQlpbnQJcmV0ID0gMDsKLQotCXJldCA9ICBwQWRhcHRlci0+SGFsRnVuYy5FZnVzZV9QZ1BhY2tldFJlYWQyM2EocEFkYXB0ZXIsIG9mZnNldCwgZGF0YSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLUVmdXNlX1BnUGFja2V0V3JpdGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlciwgdTggb2Zmc2V0LAotCQkgICAgdTggd29yZF9lbiwgdTggKmRhdGEpCi17Ci0JaW50IHJldDsKLQotCXJldCA9ICBwQWRhcHRlci0+SGFsRnVuYy5FZnVzZV9QZ1BhY2tldFdyaXRlMjNhKHBBZGFwdGVyLCBvZmZzZXQsCi0JCQkJCQkgICAgIHdvcmRfZW4sIGRhdGEpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZDIzYQogICoKQEAgLTQzOCwyNCArNTEwLDEyIEBACiAJfQogfQogCi11OAotRWZ1c2VfV29yZEVuYWJsZURhdGFXcml0ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1MTYgZWZ1c2VfYWRkciwKLQkJCSAgdTggd29yZF9lbiwgdTggKmRhdGEpCi17Ci0JdTggcmV0ID0gMDsKLQotCXJldCA9IHBBZGFwdGVyLT5IYWxGdW5jLkVmdXNlX1dvcmRFbmFibGVEYXRhV3JpdGUyM2EocEFkYXB0ZXIsIGVmdXNlX2FkZHIsCi0JCQkJCQkJICB3b3JkX2VuLCBkYXRhKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1OCBlZnVzZV9yZWFkOChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MTYgYWRkcmVzcywgdTggKnZhbHVlKQorc3RhdGljIGludCBlZnVzZV9yZWFkOChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MTYgYWRkcmVzcywgdTggKnZhbHVlKQogewogCXJldHVybiBlZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgYWRkcmVzcywgdmFsdWUpOwogfQogCi1zdGF0aWMgdTggZWZ1c2Vfd3JpdGU4KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUxNiBhZGRyZXNzLCB1OCAqdmFsdWUpCitzdGF0aWMgaW50IGVmdXNlX3dyaXRlOChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MTYgYWRkcmVzcywgdTggKnZhbHVlKQogewogCXJldHVybiBlZnVzZV9PbmVCeXRlV3JpdGUyM2EocGFkYXB0ZXIsIGFkZHJlc3MsICp2YWx1ZSk7CiB9CkBAIC00NjMsMTMgKzUyMywxMyBAQAogLyoKICAqIHJlYWQvd2lydGUgcmF3IGVmdXNlIGRhdGEKICAqLwotdTggcnR3X2VmdXNlX2FjY2VzczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiV3JpdGUsIHUxNiBzdGFydF9hZGRyLAotCQkgICAgdTE2IGNudHMsIHU4ICpkYXRhKQoraW50IHJ0d19lZnVzZV9hY2Nlc3MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggYldyaXRlLCB1MTYgc3RhcnRfYWRkciwKKwkJCXUxNiBjbnRzLCB1OCAqZGF0YSkKIHsKIAlpbnQgaSA9IDA7Ci0JdTE2CXJlYWxfY29udGVudF9sZW4gPSAwLCBtYXhfYXZhaWxhYmxlX3NpemUgPSAwOwotCXU4IHJlcyA9IF9GQUlMIDsKLQl1OCAoKnJ3OCkoc3RydWN0IHJ0d19hZGFwdGVyICosIHUxNiwgdTgqKTsKKwl1MTYgcmVhbF9jb250ZW50X2xlbiA9IDAsIG1heF9hdmFpbGFibGVfc2l6ZSA9IDA7CisJaW50IHJlcyA9IF9GQUlMIDsKKwlpbnQgKCpydzgpKHN0cnVjdCBydHdfYWRhcHRlciAqLCB1MTYsIHU4Kik7CiAKIAlFRlVTRV9HZXRFZnVzZURlZmluaXRpb24yM2EocGFkYXB0ZXIsIEVGVVNFX1dJRkksCiAJCQkJIFRZUEVfRUZVU0VfUkVBTF9DT05URU5UX0xFTiwKQEAgLTQ4OCw3ICs1NDgsNyBAQAogCX0gZWxzZQogCQlydzggPSAmZWZ1c2VfcmVhZDg7CiAKLQlFZnVzZV9Qb3dlclN3aXRjaDIzYShwYWRhcHRlciwgYldyaXRlLCB0cnVlKTsKKwlFZnVzZV9Qb3dlclN3aXRjaChwYWRhcHRlciwgYldyaXRlLCB0cnVlKTsKIAogCS8qICBlLWZ1c2Ugb25lIGJ5dGUgcmVhZCAvIHdyaXRlICovCiAJZm9yIChpID0gMDsgaSA8IGNudHM7IGkrKykgewpAQCAtNDk4LDM1ICs1NTgsMzcgQEAKIAkJfQogCiAJCXJlcyA9IHJ3OChwYWRhcHRlciwgc3RhcnRfYWRkcisrLCBkYXRhKyspOwotCQlpZiAoX0ZBSUwgPT0gcmVzKSBicmVhazsKKwkJaWYgKHJlcyA9PSBfRkFJTCkKKwkJCWJyZWFrOwogCX0KIAotCUVmdXNlX1Bvd2VyU3dpdGNoMjNhKHBhZGFwdGVyLCBiV3JpdGUsIGZhbHNlKTsKKwlFZnVzZV9Qb3dlclN3aXRjaChwYWRhcHRlciwgYldyaXRlLCBmYWxzZSk7CiAKIAlyZXR1cm4gcmVzOwogfQogLyogICovCiB1MTYgZWZ1c2VfR2V0TWF4U2l6ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXUxNgltYXhfc2l6ZTsKKwl1MTYgbWF4X3NpemU7CiAJRUZVU0VfR2V0RWZ1c2VEZWZpbml0aW9uMjNhKHBhZGFwdGVyLCBFRlVTRV9XSUZJLAogCQkJCSBUWVBFX0FWQUlMQUJMRV9FRlVTRV9CWVRFU19UT1RBTCwKIAkJCQkgKHZvaWQgKikmbWF4X3NpemUpOwogCXJldHVybiBtYXhfc2l6ZTsKIH0KIC8qICAqLwotdTggZWZ1c2VfR2V0Q3VycmVudFNpemUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTE2ICpzaXplKQoraW50IGVmdXNlX0dldEN1cnJlbnRTaXplMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUxNiAqc2l6ZSkKIHsKLQlFZnVzZV9Qb3dlclN3aXRjaDIzYShwYWRhcHRlciwgZmFsc2UsIHRydWUpOworCUVmdXNlX1Bvd2VyU3dpdGNoKHBhZGFwdGVyLCBmYWxzZSwgdHJ1ZSk7CiAJKnNpemUgPSBFZnVzZV9HZXRDdXJyZW50U2l6ZTIzYShwYWRhcHRlciwgRUZVU0VfV0lGSSk7Ci0JRWZ1c2VfUG93ZXJTd2l0Y2gyM2EocGFkYXB0ZXIsIGZhbHNlLCBmYWxzZSk7CisJRWZ1c2VfUG93ZXJTd2l0Y2gocGFkYXB0ZXIsIGZhbHNlLCBmYWxzZSk7CiAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAvKiAgKi8KLXU4IHJ0d19lZnVzZV9tYXBfcmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MTYgYWRkciwgdTE2IGNudHMsIHU4ICpkYXRhKQoraW50IHJ0d19lZnVzZV9tYXBfcmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJICB1MTYgYWRkciwgdTE2IGNudHMsIHU4ICpkYXRhKQogewotCXUxNgltYXBMZW4gPSAwOworCXUxNiBtYXBMZW4gPSAwOwogCiAJRUZVU0VfR2V0RWZ1c2VEZWZpbml0aW9uMjNhKHBhZGFwdGVyLCBFRlVTRV9XSUZJLAogCQkJCSBUWVBFX0VGVVNFX01BUF9MRU4sICh2b2lkICopJm1hcExlbik7CkBAIC01MzQsMTggKzU5NiwxOSBAQAogCWlmICgoYWRkciArIGNudHMpID4gbWFwTGVuKQogCQlyZXR1cm4gX0ZBSUw7CiAKLQlFZnVzZV9Qb3dlclN3aXRjaDIzYShwYWRhcHRlciwgZmFsc2UsIHRydWUpOworCUVmdXNlX1Bvd2VyU3dpdGNoKHBhZGFwdGVyLCBmYWxzZSwgdHJ1ZSk7CiAKLQllZnVzZV9SZWFkRUZ1c2UocGFkYXB0ZXIsIEVGVVNFX1dJRkksIGFkZHIsIGNudHMsIGRhdGEpOworCXJ0bDg3MjNhX3JlYWRlZnVzZShwYWRhcHRlciwgRUZVU0VfV0lGSSwgYWRkciwgY250cywgZGF0YSk7CiAKLQlFZnVzZV9Qb3dlclN3aXRjaDIzYShwYWRhcHRlciwgZmFsc2UsIGZhbHNlKTsKKwlFZnVzZV9Qb3dlclN3aXRjaChwYWRhcHRlciwgZmFsc2UsIGZhbHNlKTsKIAogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdTggcnR3X0JUX2VmdXNlX21hcF9yZWFkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUxNiBhZGRyLCB1MTYgY250cywgdTggKmRhdGEpCitpbnQgcnR3X0JUX2VmdXNlX21hcF9yZWFkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICAgIHUxNiBhZGRyLCB1MTYgY250cywgdTggKmRhdGEpCiB7Ci0JdTE2CW1hcExlbiA9IDA7CisJdTE2IG1hcExlbiA9IDA7CiAKIAlFRlVTRV9HZXRFZnVzZURlZmluaXRpb24yM2EocGFkYXB0ZXIsIEVGVVNFX0JULAogCQkJCSBUWVBFX0VGVVNFX01BUF9MRU4sICh2b2lkICopJm1hcExlbik7CkBAIC01NTMsMTEgKzYxNiwxMSBAQAogCWlmICgoYWRkciArIGNudHMpID4gbWFwTGVuKQogCQlyZXR1cm4gX0ZBSUw7CiAKLQlFZnVzZV9Qb3dlclN3aXRjaDIzYShwYWRhcHRlciwgZmFsc2UsIHRydWUpOworCUVmdXNlX1Bvd2VyU3dpdGNoKHBhZGFwdGVyLCBmYWxzZSwgdHJ1ZSk7CiAKLQllZnVzZV9SZWFkRUZ1c2UocGFkYXB0ZXIsIEVGVVNFX0JULCBhZGRyLCBjbnRzLCBkYXRhKTsKKwlydGw4NzIzYV9yZWFkZWZ1c2UocGFkYXB0ZXIsIEVGVVNFX0JULCBhZGRyLCBjbnRzLCBkYXRhKTsKIAotCUVmdXNlX1Bvd2VyU3dpdGNoMjNhKHBhZGFwdGVyLCBmYWxzZSwgZmFsc2UpOworCUVmdXNlX1Bvd2VyU3dpdGNoKHBhZGFwdGVyLCBmYWxzZSwgZmFsc2UpOwogCiAJcmV0dXJuIF9TVUNDRVNTOwogfQpAQCAtNTg1LDE0ICs2NDgsMTQgQEAKIHsKIAl1MTYJbWFwTGVuID0gMDsKIAotCUVmdXNlX1Bvd2VyU3dpdGNoMjNhKHBBZGFwdGVyLCBmYWxzZSwgdHJ1ZSk7CisJRWZ1c2VfUG93ZXJTd2l0Y2gocEFkYXB0ZXIsIGZhbHNlLCB0cnVlKTsKIAogCUVGVVNFX0dldEVmdXNlRGVmaW5pdGlvbjIzYShwQWRhcHRlciwgZWZ1c2VUeXBlLCBUWVBFX0VGVVNFX01BUF9MRU4sCiAJCQkJICh2b2lkICopJm1hcExlbik7CiAKLQllZnVzZV9SZWFkRUZ1c2UocEFkYXB0ZXIsIGVmdXNlVHlwZSwgMCwgbWFwTGVuLCBFZnVzZSk7CisJcnRsODcyM2FfcmVhZGVmdXNlKHBBZGFwdGVyLCBlZnVzZVR5cGUsIDAsIG1hcExlbiwgRWZ1c2UpOwogCi0JRWZ1c2VfUG93ZXJTd2l0Y2gyM2EocEFkYXB0ZXIsIGZhbHNlLCBmYWxzZSk7CisJRWZ1c2VfUG93ZXJTd2l0Y2gocEFkYXB0ZXIsIGZhbHNlLCBmYWxzZSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfaWVlZTgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2llZWU4MDIxMS5jCmluZGV4IGE0OGFiMjUuLmFkYjg2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfaWVlZTgwMjExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19pZWVlODAyMTEuYwpAQCAtNDYsMjEgKzQ2LDIzIEBACiAvKiAgZm9yIGFkaG9jLW1hc3RlciB0byBnZW5lcmF0ZSBpZSBhbmQgcHJvdmlkZSBzdXBwb3J0ZWQtcmF0ZSB0byBmdyAqLwogLyogICovCiAKLXN0YXRpYyB1OAlXSUZJX0NDS1JBVEVTW10gPQoteyhJRUVFODAyMTFfQ0NLX1JBVEVfMU1CIHwgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyksCi0gKElFRUU4MDIxMV9DQ0tfUkFURV8yTUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSwKLSAoSUVFRTgwMjExX0NDS19SQVRFXzVNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spLAotIChJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spfTsKK3N0YXRpYyB1OCBXSUZJX0NDS1JBVEVTW10gPSB7CisJSUVFRTgwMjExX0NDS19SQVRFXzFNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0ssCisJSUVFRTgwMjExX0NDS19SQVRFXzJNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0ssCisJSUVFRTgwMjExX0NDS19SQVRFXzVNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0ssCisJSUVFRTgwMjExX0NDS19SQVRFXzExTUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLCit9OwogCi1zdGF0aWMgdTgJV0lGSV9PRkRNUkFURVNbXSA9Ci17KElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CKSwKLSAoSUVFRTgwMjExX09GRE1fUkFURV85TUIpLAotIChJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUIpLAotIChJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIpLAotIChJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIpLAotIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQiwKLSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIsCi0gSUVFRTgwMjExX09GRE1fUkFURV81NE1CfTsKK3N0YXRpYyB1OCBXSUZJX09GRE1SQVRFU1tdID0geworCUlFRUU4MDIxMV9PRkRNX1JBVEVfNk1CLAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfOU1CLAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQiwKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIsCisJSUVFRTgwMjExX09GRE1fUkFURV8yNE1CLAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQiwKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIsCisJSUVFRTgwMjExX09GRE1fUkFURV81NE1CCit9OwogCiBpbnQgcnR3X2dldF9iaXRfdmFsdWVfZnJvbV9pZWVlX3ZhbHVlMjNhKHU4IHZhbCkKIHsKQEAgLTc2LDEzICs3OCwxMyBAQAogCXJldHVybiAwOwogfQogCi11aW50IHJ0d19pc19jY2tyYXRlc19pbmNsdWRlZDIzYSh1OCAqcmF0ZSkKK3N0YXRpYyBib29sIHJ0d19pc19jY2tyYXRlc19pbmNsdWRlZCh1OCAqcmF0ZSkKIHsKIAl1MzIgaSA9IDA7CiAKLQl3aGlsZSAocmF0ZVtpXSAhPSAwKSB7Ci0JCWlmICgoKChyYXRlW2ldKSAmIDB4N2YpID09IDIpIHx8ICgoKHJhdGVbaV0pICYgMHg3ZikgPT0gNCkgfHwKLQkJICAgICgoKHJhdGVbaV0pICYgMHg3ZikgPT0gMTEpIHx8ICgoKHJhdGVbaV0pICYgMHg3ZikgPT0gMjIpKQorCXdoaWxlIChyYXRlW2ldKSB7CisJCWlmICgocmF0ZVtpXSAmIDB4N2YpID09IDIgfHwgKHJhdGVbaV0gJiAweDdmKSA9PSA0IHx8CisJCSAgICAocmF0ZVtpXSAmIDB4N2YpID09IDExIHx8IChyYXRlW2ldICYgMHg3ZikgPT0gMjIpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJaSsrOwogCX0KQEAgLTkwLDEzICs5MiwxMyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdWludCBydHdfaXNfY2NrcmF0ZXNvbmx5X2luY2x1ZGVkMjNhKHU4ICpyYXRlKQorc3RhdGljIGJvb2wgcnR3X2lzX2Nja3JhdGVzb25seV9pbmNsdWRlZCh1OCAqcmF0ZSkKIHsKIAl1MzIgaSA9IDA7CiAKLQl3aGlsZSAocmF0ZVtpXSAhPSAwKSB7Ci0JCWlmICgoKChyYXRlW2ldKSAmIDB4N2YpICE9IDIpICYmICgoKHJhdGVbaV0pICYgMHg3ZikgIT0gNCkgJiYKLQkJICAgICgoKHJhdGVbaV0pICYgMHg3ZikgIT0gMTEpICYmICgoKHJhdGVbaV0pICYgMHg3ZikgIT0gMjIpKQorCXdoaWxlIChyYXRlW2ldKSB7CisJCWlmICgocmF0ZVtpXSAmIDB4N2YpICE9IDIgJiYgKHJhdGVbaV0gJiAweDdmKSAhPSA0ICYmCisJCSAgICAocmF0ZVtpXSAmIDB4N2YpICE9IDExICYmIChyYXRlW2ldICYgMHg3ZikgIT0gMjIpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJaSsrOwpAQCAtMTA4LDE0ICsxMTAsMTQgQEAKIGludCBydHdfY2hlY2tfbmV0d29ya190eXBlMjNhKHVuc2lnbmVkIGNoYXIgKnJhdGUsIGludCByYXRlbGVuLCBpbnQgY2hhbm5lbCkKIHsKIAlpZiAoY2hhbm5lbCA+IDE0KSB7Ci0JCWlmICgocnR3X2lzX2Nja3JhdGVzX2luY2x1ZGVkMjNhKHJhdGUpKSA9PSB0cnVlKQorCQlpZiAocnR3X2lzX2Nja3JhdGVzX2luY2x1ZGVkKHJhdGUpKQogCQkJcmV0dXJuIFdJUkVMRVNTX0lOVkFMSUQ7CiAJCWVsc2UKIAkJCXJldHVybiBXSVJFTEVTU18xMUE7CiAJfSBlbHNlIHsgIC8qICBjb3VsZCBiZSBwdXJlIEIsIHB1cmUgRywgb3IgQi9HICovCi0JCWlmICgocnR3X2lzX2Nja3JhdGVzb25seV9pbmNsdWRlZDIzYShyYXRlKSkgPT0gdHJ1ZSkKKwkJaWYgKHJ0d19pc19jY2tyYXRlc29ubHlfaW5jbHVkZWQocmF0ZSkpCiAJCQlyZXR1cm4gV0lSRUxFU1NfMTFCOwotCQllbHNlIGlmICgocnR3X2lzX2Nja3JhdGVzX2luY2x1ZGVkMjNhKHJhdGUpKSA9PSB0cnVlKQorCQllbHNlIGlmIChydHdfaXNfY2NrcmF0ZXNfaW5jbHVkZWQocmF0ZSkpCiAJCQlyZXR1cm4JV0lSRUxFU1NfMTFCRzsKIAkJZWxzZQogCQkJcmV0dXJuIFdJUkVMRVNTXzExRzsKQEAgLTEzMSw3ICsxMzMsNyBAQAogfQogCiAvKiAgcnR3X3NldF9pZTIzYSB3aWxsIHVwZGF0ZSBmcmFtZSBsZW5ndGggKi8KLXU4ICpydHdfc2V0X2llMjNhKHU4ICpwYnVmLCBpbnQgaW5kZXgsIHVpbnQgbGVuLCB1OCAqc291cmNlLCB1aW50ICpmcmxlbikKK3U4ICpydHdfc2V0X2llMjNhKHU4ICpwYnVmLCBpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCB1OCAqc291cmNlLCB1aW50ICpmcmxlbikKIHsKIAogCSpwYnVmID0gKHU4KWluZGV4OwpAQCAtMTQzLDcgKzE0NSw2IEBACiAKIAkqZnJsZW4gPSAqZnJsZW4gKyAobGVuICsgMik7CiAKLQogCXJldHVybiBwYnVmICsgbGVuICsgMjsKIH0KIApAQCAtMTU4LDE4ICsxNTksNiBAQAogCXJldHVybiBydHdfc2V0X2llMjNhKGJ1ZiwgV0xBTl9FSURfQ0hBTk5FTF9TV0lUQ0gsICAzLCBpZV9kYXRhLCBidWZfbGVuKTsKIH0KIAotaW5saW5lIHU4IHNlY29uZGFyeV9jaF9vZmZzZXRfdG9faGFsX2NoX29mZnNldDIzYSh1OCBjaF9vZmZzZXQpCi17Ci0JaWYgKGNoX29mZnNldCA9PSBTQ04pCi0JCXJldHVybiBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOwotCWVsc2UgaWYgKGNoX29mZnNldCA9PSBTQ0EpCi0JCXJldHVybiBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVI7Ci0JZWxzZSBpZiAoY2hfb2Zmc2V0ID09IFNDQikKLQkJcmV0dXJuIEhBTF9QUklNRV9DSE5MX09GRlNFVF9MT1dFUjsKLQotCXJldHVybiBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOwotfQotCiBpbmxpbmUgdTggaGFsX2NoX29mZnNldF90b19zZWNvbmRhcnlfY2hfb2Zmc2V0MjNhKHU4IGNoX29mZnNldCkKIHsKIAlpZiAoY2hfb2Zmc2V0ID09IEhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkUpCkBAIC0xODksMTkgKzE3OCw2IEBACiAJCQkgIDEsICZzZWNvbmRhcnlfY2hfb2Zmc2V0LCBidWZfbGVuKTsKIH0KIAotaW5saW5lIHU4ICpydHdfc2V0X2llMjNhX21lc2hfY2hfc3dpdGNoX3Bhcm0odTggKmJ1ZiwgdTMyICpidWZfbGVuLCB1OCB0dGwsCi0JCQkJCSAgdTggZmxhZ3MsIHUxNiByZWFzb24sIHUxNiBwcmVjZWRlbmNlKQotewotCXU4IGllX2RhdGFbNl07Ci0KLQlpZV9kYXRhWzBdID0gdHRsOwotCWllX2RhdGFbMV0gPSBmbGFnczsKLQlwdXRfdW5hbGlnbmVkX2xlMTYocmVhc29uLCAodTgqKSZpZV9kYXRhWzJdKTsKLQlwdXRfdW5hbGlnbmVkX2xlMTYocHJlY2VkZW5jZSwgKHU4KikmaWVfZGF0YVs0XSk7Ci0KLQlyZXR1cm4gcnR3X3NldF9pZTIzYShidWYsIDB4MTE4LCAgNiwgaWVfZGF0YSwgYnVmX2xlbik7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW5kZXg6IHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IGlkIGluZGV4LCBsaW1pdCBpcyB0aGUgbGltaXQgZm9yIHNlYXJjaAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzY3LDcgKzM0Myw3IEBACiAJdWludCBpID0gMDsKIAogCXdoaWxlKDEpIHsKLQkJaWYgKChyYXRlc2V0W2ldKSA9PSAwKQorCQlpZiAocmF0ZXNldFtpXSA9PSAwKQogCQkJYnJlYWs7CiAKIAkJaWYgKGkgPiAxMikKQEAgLTM5NCwzMSArMzcwLDMxIEBACiAKIAkvKiBiZWFjb24gaW50ZXJ2YWwgOiAyYnl0ZXMgKi8KIAkvKiBCQ05fSU5URVJWQUw7ICovCi0JKih1MTYqKWllID0gY3B1X3RvX2xlMTYoKHUxNilwZGV2X25ldHdvcmstPkNvbmZpZ3VyYXRpb24uQmVhY29uUGVyaW9kKTsKKwkqKHUxNiopaWUgPSBjcHVfdG9fbGUxNihwZGV2X25ldHdvcmstPkJlYWNvblBlcmlvZCk7CiAJc3ogKz0gMjsKIAlpZSArPSAyOwogCiAJLyogY2FwYWJpbGl0eSBpbmZvICovCiAJKih1MTYqKWllID0gMDsKIAotCSoodTE2KilpZSB8PSBjcHVfdG9fbGUxNihjYXBfSUJTUyk7CisJKih1MTYqKWllIHw9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKIAogCWlmIChwcmVnaXN0cnlwcml2LT5wcmVhbWJsZSA9PSBQUkVBTUJMRV9TSE9SVCkKLQkJKih1MTYqKWllIHw9IGNwdV90b19sZTE2KGNhcF9TaG9ydFByZW1ibGUpOworCQkqKHUxNiopaWUgfD0gY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKTsKIAogCWlmIChwZGV2X25ldHdvcmstPlByaXZhY3kpCi0JCSoodTE2KilpZSB8PSBjcHVfdG9fbGUxNihjYXBfUHJpdmFjeSk7CisJCSoodTE2KilpZSB8PSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CiAKIAlzeiArPSAyOwogCWllICs9IDI7CiAKIAkvKiBTU0lEICovCi0JaWUgPSBydHdfc2V0X2llMjNhKGllLCBfU1NJRF9JRV8sIHBkZXZfbmV0d29yay0+U3NpZC5zc2lkX2xlbiwKKwlpZSA9IHJ0d19zZXRfaWUyM2EoaWUsIFdMQU5fRUlEX1NTSUQsIHBkZXZfbmV0d29yay0+U3NpZC5zc2lkX2xlbiwKIAkJCXBkZXZfbmV0d29yay0+U3NpZC5zc2lkLCAmc3opOwogCiAJLyogc3VwcG9ydGVkIHJhdGVzICovCiAJaWYgKHByZWdpc3RyeXByaXYtPndpcmVsZXNzX21vZGUgPT0gV0lSRUxFU1NfMTFBQkdOKSB7Ci0JCWlmIChwZGV2X25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWcgPiAxNCkKKwkJaWYgKHBkZXZfbmV0d29yay0+RFNDb25maWcgPiAxNCkKIAkJCXdpcmVsZXNzX21vZGUgPSBXSVJFTEVTU18xMUFfNU47CiAJCWVsc2UKIAkJCXdpcmVsZXNzX21vZGUgPSBXSVJFTEVTU18xMUJHXzI0TjsKQEAgLTQzMSwyNSArNDA3LDI1IEBACiAJcmF0ZUxlbiA9IHJ0d19nZXRfcmF0ZXNldF9sZW4yM2EocGRldl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7CiAKIAlpZiAocmF0ZUxlbiA+IDgpIHsKLQkJaWUgPSBydHdfc2V0X2llMjNhKGllLCBfU1VQUE9SVEVEUkFURVNfSUVfLCA4LAorCQlpZSA9IHJ0d19zZXRfaWUyM2EoaWUsIFdMQU5fRUlEX1NVUFBfUkFURVMsIDgsCiAJCQkJcGRldl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcywgJnN6KTsKIAkJLyogaWUgPSBydHdfc2V0X2llMjNhKGllLCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywgKHJhdGVMZW4gLSA4KSwgKHBkZXZfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMgKyA4KSwgJnN6KTsgKi8KIAl9IGVsc2UgewotCQlpZSA9IHJ0d19zZXRfaWUyM2EoaWUsIF9TVVBQT1JURURSQVRFU19JRV8sIHJhdGVMZW4sCisJCWllID0gcnR3X3NldF9pZTIzYShpZSwgV0xBTl9FSURfU1VQUF9SQVRFUywgcmF0ZUxlbiwKIAkJCQlwZGV2X25ldHdvcmstPlN1cHBvcnRlZFJhdGVzLCAmc3opOwogCX0KIAogCS8qIERTIHBhcmFtZXRlciBzZXQgKi8KLQlpZSA9IHJ0d19zZXRfaWUyM2EoaWUsIF9EU1NFVF9JRV8sIDEsCi0JCQkgICAodTggKikmcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnLCAmc3opOworCWllID0gcnR3X3NldF9pZTIzYShpZSwgV0xBTl9FSURfRFNfUEFSQU1TLCAxLAorCQkJICAgKHU4ICopJnBkZXZfbmV0d29yay0+RFNDb25maWcsICZzeik7CiAKIAkvKiBJQlNTIFBhcmFtZXRlciBTZXQgKi8KIAotCWllID0gcnR3X3NldF9pZTIzYShpZSwgX0lCU1NfUEFSQV9JRV8sIDIsCi0JCQkgICAodTggKikmcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkFUSU1XaW5kb3csICZzeik7CisJaWUgPSBydHdfc2V0X2llMjNhKGllLCBXTEFOX0VJRF9JQlNTX1BBUkFNUywgMiwKKwkJCSAgICh1OCAqKSZwZGV2X25ldHdvcmstPkFUSU1XaW5kb3csICZzeik7CiAKIAlpZiAocmF0ZUxlbiA+IDgpIHsKLQkJaWUgPSBydHdfc2V0X2llMjNhKGllLCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywgKHJhdGVMZW4gLSA4KSwKKwkJaWUgPSBydHdfc2V0X2llMjNhKGllLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUywgKHJhdGVMZW4gLSA4KSwKIAkJCQkocGRldl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyArIDgpLCAmc3opOwogCX0KIApAQCAtNDYwLDYwICs0MzYsNyBAQAogCXJldHVybiBzejsKIH0KIAotdW5zaWduZWQgY2hhciAqcnR3X2dldF93cGFfaWUyM2EodW5zaWduZWQgY2hhciAqcGllLCBpbnQgKndwYV9pZV9sZW4sIGludCBsaW1pdCkKLXsKLQlpbnQgbGVuOwotCXUxNiB2YWwxNjsKLQl1bnNpZ25lZCBjaGFyIHdwYV9vdWlfdHlwZVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDF9OwotCXU4ICpwYnVmID0gcGllOwotCWludCBsaW1pdF9uZXcgPSBsaW1pdDsKLQotCXdoaWxlKDEpIHsKLQkJcGJ1ZiA9IHJ0d19nZXRfaWUyM2EocGJ1ZiwgX1dQQV9JRV9JRF8sICZsZW4sIGxpbWl0X25ldyk7Ci0KLQkJaWYgKHBidWYpIHsKLQkJCS8qIGNoZWNrIGlmIG91aSBtYXRjaGVzLi4uICovCi0JCQlpZiAobWVtY21wKChwYnVmICsgMiksIHdwYV9vdWlfdHlwZSwKLQkJCQkgICBzaXplb2Yod3BhX291aV90eXBlKSkpIHsKLQkJCQlnb3RvIGNoZWNrX25leHRfaWU7Ci0JCQl9Ci0KLQkJCS8qIGNoZWNrIHZlcnNpb24uLi4gKi8KLQkJCW1lbWNweSgodTggKikmdmFsMTYsIChwYnVmICsgNiksIHNpemVvZih2YWwxNikpOwotCi0JCQl2YWwxNiA9IGxlMTZfdG9fY3B1KHZhbDE2KTsKLQkJCWlmICh2YWwxNiAhPSAweDAwMDEpCi0JCQkJZ290byBjaGVja19uZXh0X2llOwotCi0JCQkqd3BhX2llX2xlbiA9ICoocGJ1ZiArIDEpOwotCi0JCQlyZXR1cm4gcGJ1ZjsKLQkJfSBlbHNlIHsKLQkJCSp3cGFfaWVfbGVuID0gMDsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLWNoZWNrX25leHRfaWU6Ci0KLQkJbGltaXRfbmV3ID0gbGltaXQgLSAocGJ1ZiAtIHBpZSkgLSAyIC0gbGVuOwotCi0JCWlmIChsaW1pdF9uZXcgPD0gMCkKLQkJCWJyZWFrOwotCi0JCXBidWYgKz0gKDIgKyBsZW4pOwotCX0KLQotCSp3cGFfaWVfbGVuID0gMDsKLQotCXJldHVybiBOVUxMOwotfQotCi11bnNpZ25lZCBjaGFyICpydHdfZ2V0X3dwYTJfaWUyM2EodW5zaWduZWQgY2hhciAqcGllLCBpbnQgKnJzbl9pZV9sZW4sIGludCBsaW1pdCkKLXsKLQlyZXR1cm4gcnR3X2dldF9pZTIzYShwaWUsIF9XUEEyX0lFX0lEXywgcnNuX2llX2xlbiwgbGltaXQpOwotfQotCi1pbnQgcnR3X2dldF93cGFfY2lwaGVyX3N1aXRlMjNhKHU4ICpzKQoraW50IHJ0d19nZXRfd3BhX2NpcGhlcl9zdWl0ZTIzYShjb25zdCB1OCAqcykKIHsKIAlpZiAoIW1lbWNtcChzLCBXUEFfQ0lQSEVSX1NVSVRFX05PTkUyM0EsIFdQQV9TRUxFQ1RPUl9MRU4pKQogCQlyZXR1cm4gV1BBX0NJUEhFUl9OT05FOwpAQCAtNTI5LDcgKzQ1Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBydHdfZ2V0X3dwYTJfY2lwaGVyX3N1aXRlMjNhKHU4ICpzKQoraW50IHJ0d19nZXRfd3BhMl9jaXBoZXJfc3VpdGUyM2EoY29uc3QgdTggKnMpCiB7CiAJaWYgKCFtZW1jbXAocywgUlNOX0NJUEhFUl9TVUlURV9OT05FMjNBLCBSU05fU0VMRUNUT1JfTEVOKSkKIAkJcmV0dXJuIFdQQV9DSVBIRVJfTk9ORTsKQEAgLTU0NSwyMiArNDY4LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBydHdfcGFyc2Vfd3BhX2llMjNhKHU4KiB3cGFfaWUsIGludCB3cGFfaWVfbGVuLCBpbnQgKmdyb3VwX2NpcGhlciwgaW50ICpwYWlyd2lzZV9jaXBoZXIsIGludCAqaXNfODAyMXgpCitpbnQgcnR3X3BhcnNlX3dwYV9pZTIzYShjb25zdCB1OCogd3BhX2llLCBpbnQgd3BhX2llX2xlbiwgaW50ICpncm91cF9jaXBoZXIsIGludCAqcGFpcndpc2VfY2lwaGVyLCBpbnQgKmlzXzgwMjF4KQogewogCWludCBpLCByZXQgPSBfU1VDQ0VTUzsKIAlpbnQgbGVmdCwgY291bnQ7Ci0JdTggKnBvczsKLQl1OCBTVUlURV8xWFs0XSA9IHsweDAwLCAweDUwLCAweGYyLCAxfTsKKwljb25zdCB1OCAqcG9zOwogCiAJaWYgKHdwYV9pZV9sZW4gPD0gMCkgewogCQkvKiBObyBXUEEgSUUgLSBmYWlsIHNpbGVudGx5ICovCiAJCXJldHVybiBfRkFJTDsKIAl9CiAKLQlpZiAoKCp3cGFfaWUgIT0gX1dQQV9JRV9JRF8pIHx8ICgqKHdwYV9pZSsxKSAhPSAodTgpKHdwYV9pZV9sZW4gLSAyKSkgfHwKLQkgICAgbWVtY21wKHdwYV9pZSArIDIsIFJUV19XUEFfT1VJMjNBX1RZUEUsIFdQQV9TRUxFQ1RPUl9MRU4pKSB7CisJaWYgKHdwYV9pZVsxXSAhPSAodTgpKHdwYV9pZV9sZW4gLSAyKSkKIAkJcmV0dXJuIF9GQUlMOwotCX0KIAogCXBvcyA9IHdwYV9pZTsKIApAQCAtNjEyLDcgKzUzMiw3IEBACiAJaWYgKGlzXzgwMjF4KSB7CiAJCWlmIChsZWZ0ID49IDYpIHsKIAkJCXBvcyArPSAyOwotCQkJaWYgKCFtZW1jbXAocG9zLCBTVUlURV8xWCwgNCkpIHsKKwkJCWlmICghbWVtY21wKHBvcywgUlRXX1dQQV9PVUkyM0FfVFlQRSwgNCkpIHsKIAkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKIAkJCQkJICgiJXMgOiB0aGVyZSBoYXMgODAyLjF4IGF1dGhcbiIsCiAJCQkJCSAgX19mdW5jX18pKTsKQEAgLTYyNCwxMiArNTQ0LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHJ0d19wYXJzZV93cGEyX2llMjNhKHU4KiByc25faWUsIGludCByc25faWVfbGVuLCBpbnQgKmdyb3VwX2NpcGhlciwKK2ludCBydHdfcGFyc2Vfd3BhMl9pZTIzYShjb25zdCB1OCogcnNuX2llLCBpbnQgcnNuX2llX2xlbiwgaW50ICpncm91cF9jaXBoZXIsCiAJCSAgICAgIGludCAqcGFpcndpc2VfY2lwaGVyLCBpbnQgKmlzXzgwMjF4KQogewogCWludCBpLCByZXQgPSBfU1VDQ0VTUzsKIAlpbnQgbGVmdCwgY291bnQ7Ci0JdTggKnBvczsKKwljb25zdCB1OCAqcG9zOwogCXU4IFNVSVRFXzFYWzRdID0gezB4MDAsIDB4MGYsIDB4YWMsIDB4MDF9OwogCiAJaWYgKHJzbl9pZV9sZW4gPD0gMCkgewpAQCAtNjM3LDcgKzU1Nyw3IEBACiAJCXJldHVybiBfRkFJTDsKIAl9CiAKLQlpZiAoKCpyc25faWUhPSBfV1BBMl9JRV9JRF8pIHx8ICgqKHJzbl9pZSsxKSAhPSAodTgpKHJzbl9pZV9sZW4gLSAyKSkpIHsKKwlpZiAoKnJzbl9pZSAhPSBfV1BBMl9JRV9JRF8gfHwgKihyc25faWUrMSkgIT0gKHU4KShyc25faWVfbGVuIC0gMikpIHsKIAkJcmV0dXJuIF9GQUlMOwogCX0KIApAQCAtNzA1LDExICs2MjUsOSBAQAogCQkgICB1OCAqd3BhX2llLCB1MTYgKndwYV9sZW4pCiB7CiAJdTggYXV0aG1vZGUsIHNlY19pZHgsIGk7Ci0JdTggd3BhX291aVs0XSA9IHsweDAsIDB4NTAsIDB4ZjIsIDB4MDF9OwogCXVpbnQgY250OwogCiAKLQogCS8qIFNlYXJjaCByZXF1aXJlZCBXUEEgb3IgV1BBMiBJRSBhbmQgY29weSB0byBzZWNfaWVbIF0gKi8KIAogCWNudCA9IChfVElNRVNUQU1QXyArIF9CRUFDT05fSVRFUlZBTF8gKyBfQ0FQQUJJTElUWV8pOwpAQCAtNzE5LDggKzYzNyw4IEBACiAJd2hpbGUoY250IDwgaW5fbGVuKSB7CiAJCWF1dGhtb2RlID0gaW5faWVbY250XTsKIAotCQlpZiAoKGF1dGhtb2RlID09IF9XUEFfSUVfSURfKSAmJgotCQkgICAgIW1lbWNtcCgmaW5faWVbY250KzJdLCAmd3BhX291aVswXSwgNCkpIHsKKwkJaWYgKChhdXRobW9kZSA9PSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpICYmCisJCSAgICAhbWVtY21wKCZpbl9pZVtjbnQrMl0sIFJUV19XUEFfT1VJMjNBX1RZUEUsIDQpKSB7CiAJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfaW5mb18sCiAJCQkJCSAoIlxuIHJ0d19nZXRfd3BhX2llMjNhOiBzZWNfaWR4ID0lZCAiCiAJCQkJCSAgImluX2llW2NudCsxXSsyID0lZFxuIiwKQEAgLTc3OCwyNCArNjk2LDYgQEAKIAlyZXR1cm4gKnJzbl9sZW4gKyAqd3BhX2xlbjsKIH0KIAotdTggcnR3X2lzX3dwc19pZTIzYSh1OCAqaWVfcHRyLCB1aW50ICp3cHNfaWVsZW4pCi17Ci0JdTggbWF0Y2ggPSBmYWxzZTsKLQl1OCBlaWQsIHdwc19vdWlbNF09IHsweDAsIDB4NTAsIDB4ZjIsIDB4MDR9OwotCi0JaWYgKCFpZV9wdHIpCi0JCXJldHVybiBtYXRjaDsKLQotCWVpZCA9IGllX3B0clswXTsKLQotCWlmICgoZWlkID09IF9XUEFfSUVfSURfKSAmJiAhbWVtY21wKCZpZV9wdHJbMl0sIHdwc19vdWksIDQpKSB7Ci0JCS8qIERCR184NzIzQSgiPT0+IGZvdW5kIFdQU19JRS4uLi4uXG4iKTsgKi8KLQkJKndwc19pZWxlbiA9IGllX3B0clsxXSArIDI7Ci0JCW1hdGNoID0gdHJ1ZTsKLQl9Ci0JcmV0dXJuIG1hdGNoOwotfQotCiAvKioKICAqIHJ0d19nZXRfd3BzX2llMjNhIC0gU2VhcmNoIFdQUyBJRSBmcm9tIGEgc2VyaWVzIG9mIElFcwogICogQGluX2llOiBBZGRyZXNzIG9mIElFcyB0byBzZWFyY2gKQEAgLTgyNCw3ICs3MjQsOCBAQAogCXdoaWxlIChjbnQgPCBpbl9sZW4pIHsKIAkJZWlkID0gaW5faWVbY250XTsKIAotCQlpZiAoKGVpZCA9PSBfV1BBX0lFX0lEXykgJiYgIW1lbWNtcCgmaW5faWVbY250KzJdLCB3cHNfb3VpLCA0KSkgeworCQlpZiAoZWlkID09IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQyAmJgorCQkgICAgIW1lbWNtcCgmaW5faWVbY250KzJdLCB3cHNfb3VpLCA0KSkgewogCQkJd3BzaWVfcHRyID0gJmluX2llW2NudF07CiAKIAkJCWlmICh3cHNfaWUpCkBAIC04NjYsNyArNzY3LDcgQEAKIAlpZiAobGVuX2F0dHIpCiAJCSpsZW5fYXR0ciA9IDA7CiAKLQlpZiAoKHdwc19pZVswXSAhPSBfVkVORE9SX1NQRUNJRklDX0lFXykgfHwKKwlpZiAod3BzX2llWzBdICE9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQyB8fAogCSAgICBtZW1jbXAod3BzX2llICsgMiwgd3BzX291aSwgNCkpIHsKIAkJcmV0dXJuIGF0dHJfcHRyOwogCX0KQEAgLTkzNyw2NjQgKzgzOCwyNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50Ci1ydHdfaWVlZTgwMl8xMV9wYXJzZV92ZW5kb3Jfc3BlY2lmaWModTggKnBvcywgdWludCBlbGVuLAotCQkJCSAgICAgc3RydWN0IHJ0d19pZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCQkgICAgIGludCBzaG93X2Vycm9ycykKLXsKLQl1bnNpZ25lZCBpbnQgb3VpOwotCi0JLyogZmlyc3QgMyBieXRlcyBpbiB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gZWxlbWVudCBhcmUgdGhlIElFRUUKLQkgKiBPVUkgb2YgdGhlIHZlbmRvci4gVGhlIGZvbGxvd2luZyBieXRlIGlzIHVzZWQgYSB2ZW5kb3Igc3BlY2lmaWMKLQkgKiBzdWItdHlwZS4gKi8KLQlpZiAoZWxlbiA8IDQpIHsKLQkJaWYgKHNob3dfZXJyb3JzKSB7Ci0JCQlEQkdfODcyM0EoInNob3J0IHZlbmRvciBzcGVjaWZpYyAiCi0JCQkJICAgImluZm9ybWF0aW9uIGVsZW1lbnQgaWdub3JlZCAobGVuID0lbHUpXG4iLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKSBlbGVuKTsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jb3VpID0gUlRXX0dFVF9CRTI0KHBvcyk7Ci0Jc3dpdGNoIChvdWkpIHsKLQljYXNlIFdMQU5fT1VJX01JQ1JPU09GVDoKLQkJLyogTWljcm9zb2Z0L1dpLUZpIGluZm9ybWF0aW9uIGVsZW1lbnRzIGFyZSBmdXJ0aGVyIHR5cGVkIGFuZAotCQkgKiBzdWJ0eXBlZCAqLwotCQlzd2l0Y2ggKHBvc1szXSkgewotCQljYXNlIDE6Ci0JCQkvKiBNaWNyb3NvZnQgT1VJICgwMDo1MDpGMikgd2l0aCBPVUkgVHlwZSAxOgotCQkJICogcmVhbCBXUEEgaW5mb3JtYXRpb24gZWxlbWVudCAqLwotCQkJZWxlbXMtPndwYV9pZSA9IHBvczsKLQkJCWVsZW1zLT53cGFfaWVfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9PVUlfVFlQRTogLyogdGhpcyBpcyBhIFdpLUZpIFdNRSBpbmZvLiBlbGVtZW50ICovCi0JCQlpZiAoZWxlbiA8IDUpIHsKLQkJCQlEQkdfODcyM0EoInNob3J0IFdNRSAiCi0JCQkJCSAgICJpbmZvcm1hdGlvbiBlbGVtZW50IGlnbm9yZWQgIgotCQkJCQkgICAiKGxlbiA9JWx1KVxuIiwKLQkJCQkJICAgKHVuc2lnbmVkIGxvbmcpIGVsZW4pOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCXN3aXRjaCAocG9zWzRdKSB7Ci0JCQljYXNlIFdNRV9PVUlfU1VCVFlQRV9JTkZPUk1BVElPTl9FTEVNRU5UOgotCQkJY2FzZSBXTUVfT1VJX1NVQlRZUEVfUEFSQU1FVEVSX0VMRU1FTlQ6Ci0JCQkJZWxlbXMtPndtZSA9IHBvczsKLQkJCQllbGVtcy0+d21lX2xlbiA9IGVsZW47Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdNRV9PVUlfU1VCVFlQRV9UU1BFQ19FTEVNRU5UOgotCQkJCWVsZW1zLT53bWVfdHNwZWMgPSBwb3M7Ci0JCQkJZWxlbXMtPndtZV90c3BlY19sZW4gPSBlbGVuOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlEQkdfODcyM0EoInVua25vd24gV01FICIKLQkJCQkJICAgImluZm9ybWF0aW9uIGVsZW1lbnQgaWdub3JlZCAiCi0JCQkJCSAgICIoc3VidHlwZSA9JWQgbGVuID0lbHUpXG4iLAotCQkJCQkgICBwb3NbNF0sICh1bnNpZ25lZCBsb25nKSBlbGVuKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJLyogV2ktRmkgUHJvdGVjdGVkIFNldHVwIChXUFMpIElFICovCi0JCQllbGVtcy0+d3BzX2llID0gcG9zOwotCQkJZWxlbXMtPndwc19pZV9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEQkdfODcyM0EoIlVua25vd24gTWljcm9zb2Z0ICIKLQkJCQkgICAiaW5mb3JtYXRpb24gZWxlbWVudCBpZ25vcmVkICIKLQkJCQkgICAiKHR5cGUgPSVkIGxlbiA9JWx1KVxuIiwKLQkJCQkgICBwb3NbM10sICh1bnNpZ25lZCBsb25nKSBlbGVuKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgT1VJX0JST0FEQ09NOgotCQlzd2l0Y2ggKHBvc1szXSkgewotCQljYXNlIFZFTkRPUl9IVF9DQVBBQl9PVUlfVFlQRToKLQkJCWVsZW1zLT52ZW5kb3JfaHRfY2FwID0gcG9zOwotCQkJZWxlbXMtPnZlbmRvcl9odF9jYXBfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHXzg3MjNBKCJVbmtub3duIEJyb2FkY29tICIKLQkJCQkgICAiaW5mb3JtYXRpb24gZWxlbWVudCBpZ25vcmVkICIKLQkJCQkgICAiKHR5cGUgPSVkIGxlbiA9JWx1KVxuIiwKLQkJCQkgICBwb3NbM10sICh1bnNpZ25lZCBsb25nKSBlbGVuKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCURCR184NzIzQSgidW5rbm93biB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gIgotCQkJICAgImVsZW1lbnQgaWdub3JlZCAodmVuZG9yIE9VSSAlMDJ4OiUwMng6JTAyeCAiCi0JCQkgICAibGVuID0lbHUpXG4iLAotCQkJICAgcG9zWzBdLCBwb3NbMV0sIHBvc1syXSwgKHVuc2lnbmVkIGxvbmcpIGVsZW4pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyAtIFBhcnNlIGluZm9ybWF0aW9uIGVsZW1lbnRzIGluIG1hbmFnZW1lbnQgZnJhbWVzCi0gKiBAc3RhcnQ6IFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIElFcwotICogQGxlbjogTGVuZ3RoIG9mIElFIGJ1ZmZlciBpbiBvY3RldHMKLSAqIEBlbGVtczogRGF0YSBzdHJ1Y3R1cmUgZm9yIHBhcnNlZCBlbGVtZW50cwotICogQHNob3dfZXJyb3JzOiBXaGV0aGVyIHRvIHNob3cgcGFyc2luZyBlcnJvcnMgaW4gZGVidWcgbG9nCi0gKiBSZXR1cm5zOiBQYXJzaW5nIHJlc3VsdAotICovCi1lbnVtIHBhcnNlX3JlcyBydHdfaWVlZTgwMl8xMV9wYXJzZV9lbGVtczIzYSh1OCAqc3RhcnQsIHVpbnQgbGVuLAotCQkJCXN0cnVjdCBydHdfaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkJaW50IHNob3dfZXJyb3JzKQotewotCXVpbnQgbGVmdCA9IGxlbjsKLQl1OCAqcG9zID0gc3RhcnQ7Ci0JaW50IHVua25vd24gPSAwOwotCi0JbWVtc2V0KGVsZW1zLCAwLCBzaXplb2YoKmVsZW1zKSk7Ci0KLQl3aGlsZSAobGVmdCA+PSAyKSB7Ci0JCXU4IGlkLCBlbGVuOwotCi0JCWlkID0gKnBvcysrOwotCQllbGVuID0gKnBvcysrOwotCQlsZWZ0IC09IDI7Ci0KLQkJaWYgKGVsZW4gPiBsZWZ0KSB7Ci0JCQlpZiAoc2hvd19lcnJvcnMpIHsKLQkJCQlEQkdfODcyM0EoIklFRUUgODAyLjExIGVsZW1lbnQgIgotCQkJCQkgICAicGFyc2UgZmFpbGVkIChpZCA9JWQgZWxlbiA9JWQgIgotCQkJCQkgICAibGVmdCA9JWx1KVxuIiwKLQkJCQkJICAgaWQsIGVsZW4sICh1bnNpZ25lZCBsb25nKSBsZWZ0KTsKLQkJCX0KLQkJCXJldHVybiBQYXJzZUZhaWxlZDsKLQkJfQotCi0JCXN3aXRjaCAoaWQpIHsKLQkJY2FzZSBXTEFOX0VJRF9TU0lEOgotCQkJZWxlbXMtPnNzaWQgPSBwb3M7Ci0JCQllbGVtcy0+c3NpZF9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKLQkJCWVsZW1zLT5zdXBwX3JhdGVzID0gcG9zOwotCQkJZWxlbXMtPnN1cHBfcmF0ZXNfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0ZIX1BBUkFNUzoKLQkJCWVsZW1zLT5maF9wYXJhbXMgPSBwb3M7Ci0JCQllbGVtcy0+ZmhfcGFyYW1zX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9EU19QQVJBTVM6Ci0JCQllbGVtcy0+ZHNfcGFyYW1zID0gcG9zOwotCQkJZWxlbXMtPmRzX3BhcmFtc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfQ0ZfUEFSQU1TOgotCQkJZWxlbXMtPmNmX3BhcmFtcyA9IHBvczsKLQkJCWVsZW1zLT5jZl9wYXJhbXNfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX1RJTToKLQkJCWVsZW1zLT50aW0gPSBwb3M7Ci0JCQllbGVtcy0+dGltX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9JQlNTX1BBUkFNUzoKLQkJCWVsZW1zLT5pYnNzX3BhcmFtcyA9IHBvczsKLQkJCWVsZW1zLT5pYnNzX3BhcmFtc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgotCQkJZWxlbXMtPmNoYWxsZW5nZSA9IHBvczsKLQkJCWVsZW1zLT5jaGFsbGVuZ2VfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgotCQkJZWxlbXMtPmVycF9pbmZvID0gcG9zOwotCQkJZWxlbXMtPmVycF9pbmZvX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzoKLQkJCWVsZW1zLT5leHRfc3VwcF9yYXRlcyA9IHBvczsKLQkJCWVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOgotCQkJaWYgKHJ0d19pZWVlODAyXzExX3BhcnNlX3ZlbmRvcl9zcGVjaWZpYyhwb3MsIGVsZW4sCi0JCQkJCQkJCSBlbGVtcywKLQkJCQkJCQkJIHNob3dfZXJyb3JzKSkKLQkJCQl1bmtub3duKys7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9SU046Ci0JCQllbGVtcy0+cnNuX2llID0gcG9zOwotCQkJZWxlbXMtPnJzbl9pZV9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfUFdSX0NBUEFCSUxJVFk6Ci0JCQllbGVtcy0+cG93ZXJfY2FwID0gcG9zOwotCQkJZWxlbXMtPnBvd2VyX2NhcF9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfU1VQUE9SVEVEX0NIQU5ORUxTOgotCQkJZWxlbXMtPnN1cHBfY2hhbm5lbHMgPSBwb3M7Ci0JCQllbGVtcy0+c3VwcF9jaGFubmVsc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfTU9CSUxJVFlfRE9NQUlOOgotCQkJZWxlbXMtPm1kaWUgPSBwb3M7Ci0JCQllbGVtcy0+bWRpZV9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfRkFTVF9CU1NfVFJBTlNJVElPTjoKLQkJCWVsZW1zLT5mdGllID0gcG9zOwotCQkJZWxlbXMtPmZ0aWVfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUw6Ci0JCQllbGVtcy0+dGltZW91dF9pbnQgPSBwb3M7Ci0JCQllbGVtcy0+dGltZW91dF9pbnRfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6Ci0JCQllbGVtcy0+aHRfY2FwYWJpbGl0aWVzID0gcG9zOwotCQkJZWxlbXMtPmh0X2NhcGFiaWxpdGllc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOgotCQkJZWxlbXMtPmh0X29wZXJhdGlvbiA9IHBvczsKLQkJCWVsZW1zLT5odF9vcGVyYXRpb25fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdW5rbm93bisrOwotCQkJaWYgKCFzaG93X2Vycm9ycykKLQkJCQlicmVhazsKLQkJCURCR184NzIzQSgiSUVFRSA4MDIuMTEgZWxlbWVudCBwYXJzZSAiCi0JCQkJICAgImlnbm9yZWQgdW5rbm93biBlbGVtZW50IChpZCA9JWQgZWxlbiA9JWQpXG4iLAotCQkJCSAgIGlkLCBlbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJbGVmdCAtPSBlbGVuOwotCQlwb3MgKz0gZWxlbjsKLQl9Ci0KLQlpZiAobGVmdCkKLQkJcmV0dXJuIFBhcnNlRmFpbGVkOwotCi0JcmV0dXJuIHVua25vd24gPyBQYXJzZVVua25vd24gOiBQYXJzZU9LOwotfQotCi1zdGF0aWMgdTgga2V5X2NoYXIybnVtKHU4IGNoKQotewotCWlmICgoY2ggPj0gJzAnKSAmJiAoY2ggPD0gJzknKSkKLQkJcmV0dXJuIGNoIC0gJzAnOwotCWVsc2UgaWYgKChjaCA+PSAnYScpICYmIChjaCA8PSAnZicpKQotCQlyZXR1cm4gY2ggLSAnYScgKyAxMDsKLQllbHNlIGlmICgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ0YnKSkKLQkJcmV0dXJuIGNoIC0gJ0EnICsgMTA7Ci0JZWxzZQotCQlyZXR1cm4gMHhmZjsKLX0KLQotdTggc3RyXzJjaGFyMm51bTIzYSh1OCBoY2gsIHU4IGxjaCkKLXsKLQlyZXR1cm4gKGtleV9jaGFyMm51bShoY2gpICogMTApICsga2V5X2NoYXIybnVtKGxjaCk7Ci19Ci0KLXU4IGtleV8yY2hhcjJudW0yM2EodTggaGNoLCB1OCBsY2gpCi17Ci0JcmV0dXJuIChrZXlfY2hhcjJudW0oaGNoKSA8PCA0KSB8IGtleV9jaGFyMm51bShsY2gpOwotfQotCi12b2lkIHJ0d19tYWNhZGRyX2NmZzIzYSh1OCAqbWFjX2FkZHIpCi17Ci0JdTggbWFjW0VUSF9BTEVOXTsKLQlpZiAoIW1hY19hZGRyKQotCQlyZXR1cm47Ci0KLQltZW1jcHkobWFjLCBtYWNfYWRkciwgRVRIX0FMRU4pOwotCi0JaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKG1hYykgfHwgaXNfemVyb19ldGhlcl9hZGRyKG1hYykpIHsKLQkJbWFjWzBdID0gMHgwMDsKLQkJbWFjWzFdID0gMHhlMDsKLQkJbWFjWzJdID0gMHg0YzsKLQkJbWFjWzNdID0gMHg4NzsKLQkJbWFjWzRdID0gMHgwMDsKLQkJbWFjWzVdID0gMHgwMDsKLQkJLyogIHVzZSBkZWZhdWx0IG1hYyBhZGRyZXNzcyAqLwotCQltZW1jcHkobWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOwotCQlEQkdfODcyM0EoIk1BQyBBZGRyZXNzIGZyb20gZWZ1c2UgZXJyb3IsIGFzc2lnbiBkZWZhdWx0ICIKLQkJCSAgIm9uZSAhISFcbiIpOwotCX0KLQlEQkdfODcyM0EoInJ0d19tYWNhZGRyX2NmZzIzYSBNQUMgQWRkcmVzcyAgPSAiTUFDX0ZNVCJcbiIsCi0JCSAgTUFDX0FSRyhtYWNfYWRkcikpOwotfQotCi12b2lkIGR1bXBfaWVzMjNhKHU4ICpidWYsIHUzMiBidWZfbGVuKSB7Ci0JdTgqIHBvcyA9ICh1OCopYnVmOwotCXU4IGlkLCBsZW47Ci0KLQl3aGlsZSAocG9zLWJ1ZiA8PSBidWZfbGVuKSB7Ci0JCWlkID0gKnBvczsKLQkJbGVuID0gKihwb3MgKyAxKTsKLQotCQlEQkdfODcyM0EoIiVzIElEOiV1LCBMRU46JXVcbiIsIF9fZnVuY19fLCBpZCwgbGVuKTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQlkdW1wX3AycF9pZTIzYShwb3MsIGxlbik7Ci0jZW5kaWYKLQkJZHVtcF93cHNfaWUyM2EocG9zLCBsZW4pOwotCi0JCXBvcyArPSAoMiArIGxlbik7Ci0JfQotfQotCi12b2lkIGR1bXBfd3BzX2llMjNhKHU4ICppZSwgdTMyIGllX2xlbikgewotCXU4KiBwb3MgPSAodTgqKWllOwotCXUxNiBpZDsKLQl1MTYgbGVuOwotCi0JdTggKndwc19pZTsKLQl1aW50IHdwc19pZWxlbjsKLQotCXdwc19pZSA9IHJ0d19nZXRfd3BzX2llMjNhKGllLCBpZV9sZW4sIE5VTEwsICZ3cHNfaWVsZW4pOwotCWlmICh3cHNfaWUgIT0gaWUgfHwgd3BzX2llbGVuID09IDApCi0JCXJldHVybjsKLQotCXBvcys9IDY7Ci0Jd2hpbGUgKHBvcy1pZSA8IGllX2xlbikgewotCQlpZCA9IGdldF91bmFsaWduZWRfYmUxNihwb3MpOwotCQlsZW4gPSBnZXRfdW5hbGlnbmVkX2JlMTYocG9zICsgMik7Ci0KLQkJREJHXzg3MjNBKCIlcyBJRDoweCUwNHgsIExFTjoldVxuIiwgX19mdW5jX18sIGlkLCBsZW4pOwotCi0JCXBvcyArPSAoNCArIGxlbik7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLXZvaWQgZHVtcF9wMnBfaWUyM2EodTggKmllLCB1MzIgaWVfbGVuKSB7Ci0JdTgqIHBvcyA9ICh1OCopaWU7Ci0JdTggaWQ7Ci0JdTE2IGxlbjsKLQotCXU4ICpwMnBfaWU7Ci0JdWludCBwMnBfaWVsZW47Ci0KLQlwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShpZSwgaWVfbGVuLCBOVUxMLCAmcDJwX2llbGVuKTsKLQlpZiAocDJwX2llICE9IGllIHx8IHAycF9pZWxlbiA9PSAwKQotCQlyZXR1cm47Ci0KLQlwb3MgKz0gNjsKLQl3aGlsZSAocG9zLWllIDwgaWVfbGVuKSB7Ci0JCWlkID0gKnBvczsKLQkJbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHBvcysxKTsKLQotCQlEQkdfODcyM0EoIiVzIElEOiV1LCBMRU46JXVcbiIsIF9fZnVuY19fLCBpZCwgbGVuKTsKLQotCQlwb3MrPSAoMytsZW4pOwotCX0KLX0KLQotLyoqCi0gKiBydHdfZ2V0X3AycF9pZTIzYSAtIFNlYXJjaCBQMlAgSUUgZnJvbSBhIHNlcmllcyBvZiBJRXMKLSAqIEBpbl9pZTogQWRkcmVzcyBvZiBJRXMgdG8gc2VhcmNoCi0gKiBAaW5fbGVuOiBMZW5ndGggbGltaXQgZnJvbSBpbl9pZQotICogQHAycF9pZTogSWYgbm90IE5VTEwgYW5kIFAyUCBJRSBpcyBmb3VuZCwgUDJQIElFIHdpbGwgYmUgY29waWVkIHRvIHRoZQotICogICAgICAgICAgYnVmIHN0YXJ0aW5nIGZyb20gcDJwX2llCi0gKiBAcDJwX2llbGVuOiBJZiBub3QgTlVMTCBhbmQgUDJQIElFIGlzIGZvdW5kLCB3aWxsIHNldCB0byB0aGUgbGVuZ3RoIG9mCi0gKiAgICAgICAgICAgICB0aGUgZW50aXJlIFAyUCBJRQotICoKLSAqIFJldHVybnM6IFRoZSBhZGRyZXNzIG9mIHRoZSBQMlAgSUUgZm91bmQsIG9yIE5VTEwKLSAqLwotdTggKnJ0d19nZXRfcDJwX2llMjNhKHU4ICppbl9pZSwgaW50IGluX2xlbiwgdTggKnAycF9pZSwgdWludCAqcDJwX2llbGVuKQotewotCXVpbnQgY250ID0gMDsKLQl1OCAqcDJwX2llX3B0cjsKLQl1OCBlaWQsIHAycF9vdWlbNF09ezB4NTAsIDB4NkYsIDB4OUEsIDB4MDl9OwotCi0JaWYgKHAycF9pZWxlbikKLQkJKnAycF9pZWxlbiA9IDA7Ci0KLQl3aGlsZSAoY250PGluX2xlbikgewotCQllaWQgPSBpbl9pZVtjbnRdOwotCQlpZiAoKGluX2xlbiA8IDApIHx8IChjbnQgPiBNQVhfSUVfU1opKSB7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoKGVpZCA9PSBfVkVORE9SX1NQRUNJRklDX0lFXykgJiYKLQkJICAgICFtZW1jbXAoJmluX2llW2NudCArIDJdLCBwMnBfb3VpLCA0KSkgewotCQkJcDJwX2llX3B0ciA9IGluX2llICsgY250OwotCi0JCQlpZiAocDJwX2llICE9IE5VTEwpIHsKLQkJCQltZW1jcHkocDJwX2llLCAmaW5faWVbY250XSwKLQkJCQkgICAgICAgaW5faWVbY250ICsgMV0gKyAyKTsKLQkJCX0KLQotCQkJaWYgKHAycF9pZWxlbiAhPSBOVUxMKSB7Ci0JCQkJKnAycF9pZWxlbiA9IGluX2llW2NudCArIDFdICsgMjsKLQkJCX0KLQotCQkJcmV0dXJuIHAycF9pZV9wdHI7Ci0KLQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJY250ICs9IGluX2llW2NudCArIDFdICsgMjsgLyogZ290byBuZXh0ICovCi0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBydHdfZ2V0X3AycF9hdHRyMjNhIC0gU2VhcmNoIGEgc3BlY2lmaWMgUDJQIGF0dHJpYnV0ZSBmcm9tIGEgZ2l2ZW4gUDJQIElFCi0gKiBAcDJwX2llOiBBZGRyZXNzIG9mIFAyUCBJRSB0byBzZWFyY2gKLSAqIEBwMnBfaWVsZW46IExlbmd0aCBsaW1pdCBmcm9tIHAycF9pZQotICogQHRhcmdldF9hdHRyX2lkOiBUaGUgYXR0cmlidXRlIElEIG9mIFAyUCBhdHRyaWJ1dGUgdG8gc2VhcmNoCi0gKiBAYnVmX2F0dHI6IElmIG5vdCBOVUxMIGFuZCB0aGUgUDJQIGF0dHJpYnV0ZSBpcyBmb3VuZCwgUDJQIGF0dHJpYnV0ZSB3aWxsCi0gKiAgICAgICAgICAgIGJlIGNvcGllZCB0byB0aGUgYnVmIHN0YXJ0aW5nIGZyb20gYnVmX2F0dHIKLSAqIEBsZW5fYXR0cjogSWYgbm90IE5VTEwgYW5kIHRoZSBQMlAgYXR0cmlidXRlIGlzIGZvdW5kLCB3aWxsIHNldCB0byB0aGUKLSAqICAgICAgICAgICAgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgUDJQIGF0dHJpYnV0ZQotICoKLSAqIFJldHVybnM6IHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpYyBXUFMgYXR0cmlidXRlIGZvdW5kLCBvciBOVUxMCi0gKi8KLXU4ICpydHdfZ2V0X3AycF9hdHRyMjNhKHU4ICpwMnBfaWUsIHVpbnQgcDJwX2llbGVuLCB1OCB0YXJnZXRfYXR0cl9pZCwKLQkJICAgICB1OCAqYnVmX2F0dHIsIHUzMiAqbGVuX2F0dHIpCi17Ci0JdTggKmF0dHJfcHRyID0gTlVMTDsKLQl1OCAqdGFyZ2V0X2F0dHJfcHRyID0gTlVMTDsKLQl1OCBwMnBfb3VpWzRdPXsweDUwLCAweDZGLCAweDlBLCAweDA5fTsKLQotCWlmIChsZW5fYXR0cikKLQkJKmxlbl9hdHRyID0gMDsKLQotCWlmICghcDJwX2llIHx8IChwMnBfaWVbMF0gIT0gX1ZFTkRPUl9TUEVDSUZJQ19JRV8pIHx8Ci0JICAgIG1lbWNtcChwMnBfaWUgKyAyLCBwMnBfb3VpLCA0KSkgewotCQlyZXR1cm4gYXR0cl9wdHI7Ci0JfQotCi0JLyogIDYgPSAxKEVsZW1lbnQgSUQpICsgMShMZW5ndGgpICsgMyAoT1VJKSArIDEoT1VJIFR5cGUpICovCi0JYXR0cl9wdHIgPSBwMnBfaWUgKyA2OyAvKiBnb3RvIGZpcnN0IGF0dHIgKi8KLQotCXdoaWxlIChhdHRyX3B0ciAtIHAycF9pZSA8IHAycF9pZWxlbikgewotCQkvKiAgMyA9IDEoQXR0cmlidXRlIElEKSArIDIoTGVuZ3RoKSAqLwotCQl1OCBhdHRyX2lkID0gKmF0dHJfcHRyOwotCQl1MTYgYXR0cl9kYXRhX2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihhdHRyX3B0ciArIDEpOwotCQl1MTYgYXR0cl9sZW4gPSBhdHRyX2RhdGFfbGVuICsgMzsKLQotCQkvKiBEQkdfODcyM0EoIiVzIGF0dHJfcHRyOiVwLCBpZDoldSwgbGVuZ3RoOiV1XG4iLCBfX2Z1bmNfXywgYXR0cl9wdHIsIGF0dHJfaWQsIGF0dHJfZGF0YV9sZW4pOyAqLwotCQlpZiAoYXR0cl9pZCA9PSB0YXJnZXRfYXR0cl9pZCkgewotCQkJdGFyZ2V0X2F0dHJfcHRyID0gYXR0cl9wdHI7Ci0KLQkJCWlmIChidWZfYXR0cikKLQkJCQltZW1jcHkoYnVmX2F0dHIsIGF0dHJfcHRyLCBhdHRyX2xlbik7Ci0KLQkJCWlmIChsZW5fYXR0cikKLQkJCQkqbGVuX2F0dHIgPSBhdHRyX2xlbjsKLQotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlhdHRyX3B0ciArPSBhdHRyX2xlbjsgLyogZ290byBuZXh0ICovCi0JCX0KLQl9Ci0KLQlyZXR1cm4gdGFyZ2V0X2F0dHJfcHRyOwotfQotCi0vKioKLSAqIHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudCAtIFNlYXJjaCBhIHNwZWNpZmljIFAyUCBhdHRyaWJ1dGUgY29udGVudCBmcm9tCi0gKiBhIGdpdmVuIFAyUCBJRQotICogQHAycF9pZTogQWRkcmVzcyBvZiBQMlAgSUUgdG8gc2VhcmNoCi0gKiBAcDJwX2llbGVuOiBMZW5ndGggbGltaXQgZnJvbSBwMnBfaWUKLSAqIEB0YXJnZXRfYXR0cl9pZDogVGhlIGF0dHJpYnV0ZSBJRCBvZiBQMlAgYXR0cmlidXRlIHRvIHNlYXJjaAotICogQGJ1Zl9jb250ZW50OiBJZiBub3QgTlVMTCBhbmQgdGhlIFAyUCBhdHRyaWJ1dGUgaXMgZm91bmQsIFAyUCBhdHRyaWJ1dGUKLSAqICAgICAgICAgICAgICAgY29udGVudCB3aWxsIGJlIGNvcGllZCB0byB0aGUgYnVmIHN0YXJ0aW5nIGZyb20gYnVmX2NvbnRlbnQKLSAqIEBsZW5fY29udGVudDogSWYgbm90IE5VTEwgYW5kIHRoZSBQMlAgYXR0cmlidXRlIGlzIGZvdW5kLCB3aWxsIHNldCB0byB0aGUKLSAqICAgICAgICAgICAgICAgbGVuZ3RoIG9mIHRoZSBQMlAgYXR0cmlidXRlIGNvbnRlbnQKLSAqCi0gKiBSZXR1cm5zOiB0aGUgYWRkcmVzcyBvZiB0aGUgc3BlY2lmaWMgUDJQIGF0dHJpYnV0ZSBjb250ZW50IGZvdW5kLCBvciBOVUxMCi0gKi8KLXU4ICpydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQodTggKnAycF9pZSwgdWludCBwMnBfaWVsZW4sIHU4IHRhcmdldF9hdHRyX2lkLAotCQkJICAgICB1OCAqYnVmX2NvbnRlbnQsIHVpbnQgKmxlbl9jb250ZW50KQotewotCXU4ICphdHRyX3B0cjsKLQl1MzIgYXR0cl9sZW47Ci0KLQlpZiAobGVuX2NvbnRlbnQpCi0JCSpsZW5fY29udGVudCA9IDA7Ci0KLQlhdHRyX3B0ciA9IHJ0d19nZXRfcDJwX2F0dHIyM2EocDJwX2llLCBwMnBfaWVsZW4sIHRhcmdldF9hdHRyX2lkLAotCQkJCSAgICBOVUxMLCAmYXR0cl9sZW4pOwotCi0JaWYgKGF0dHJfcHRyICYmIGF0dHJfbGVuKSB7Ci0JCWlmIChidWZfY29udGVudCkKLQkJCW1lbWNweShidWZfY29udGVudCwgYXR0cl9wdHIgKyAzLCBhdHRyX2xlbiAtIDMpOwotCi0JCWlmIChsZW5fY29udGVudCkKLQkJCSpsZW5fY29udGVudCA9IGF0dHJfbGVuIC0gMzsKLQotCQlyZXR1cm4gYXR0cl9wdHIrMzsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotdTMyIHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSh1OCAqcGJ1ZiwgdTggYXR0cl9pZCwgdTE2IGF0dHJfbGVuLCB1OCAqcGRhdGFfYXR0cikKLXsKLQl1MzIgYV9sZW47Ci0KLQkqcGJ1ZiA9IGF0dHJfaWQ7Ci0KLQkvKiB1MTYqKShwYnVmICsgMSkgPSBjcHVfdG9fbGUxNihhdHRyX2xlbik7ICovCi0JcHV0X3VuYWxpZ25lZF9sZTE2KGF0dHJfbGVuLCBwYnVmICsgMSk7Ci0KLQlpZiAocGRhdGFfYXR0cikKLQkJbWVtY3B5KHBidWYgKyAzLCBwZGF0YV9hdHRyLCBhdHRyX2xlbik7Ci0KLQlhX2xlbiA9IGF0dHJfbGVuICsgMzsKLQotCXJldHVybiBhX2xlbjsKLX0KLQotc3RhdGljIHVpbnQgcnR3X3AycF9hdHRyX3JlbW92ZSh1OCAqaWUsIHVpbnQgaWVsZW5fb3JpLCB1OCBhdHRyX2lkKQotewotCXU4ICp0YXJnZXRfYXR0cjsKLQl1MzIgdGFyZ2V0X2F0dHJfbGVuOwotCXVpbnQgaWVsZW4gPSBpZWxlbl9vcmk7Ci0KLQl3aGlsZSgxKSB7Ci0JCXRhcmdldF9hdHRyID0gcnR3X2dldF9wMnBfYXR0cjIzYShpZSwgaWVsZW4sIGF0dHJfaWQsIE5VTEwsCi0JCQkJCSAgICAgJnRhcmdldF9hdHRyX2xlbik7Ci0JCWlmICh0YXJnZXRfYXR0ciAmJiB0YXJnZXRfYXR0cl9sZW4pIHsKLQkJCXU4ICpuZXh0X2F0dHIgPSB0YXJnZXRfYXR0cit0YXJnZXRfYXR0cl9sZW47Ci0JCQl1aW50IHJlbWFpbl9sZW4gPSBpZWxlbi0obmV4dF9hdHRyLWllKTsKLQkJCS8qIGR1bXBfaWVzMjNhKGllLCBpZWxlbik7ICovCi0KLQkJCW1lbXNldCh0YXJnZXRfYXR0ciwgMCwgdGFyZ2V0X2F0dHJfbGVuKTsKLQkJCW1lbWNweSh0YXJnZXRfYXR0ciwgbmV4dF9hdHRyLCByZW1haW5fbGVuKTsKLQkJCW1lbXNldCh0YXJnZXRfYXR0cityZW1haW5fbGVuLCAwLCB0YXJnZXRfYXR0cl9sZW4pOwotCQkJKihpZSArIDEpIC09IHRhcmdldF9hdHRyX2xlbjsKLQkJCWllbGVuIC09IHRhcmdldF9hdHRyX2xlbjsKLQkJfSBlbHNlIHsKLQkJCS8qIGlmIChpbmRleD4wKSAqLwotCQkJLyoJZHVtcF9pZXMyM2EoaWUsIGllbGVuKTsgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGllbGVuOwotfQotCi12b2lkIHJ0d193bGFuX2Jzc2lkX2V4X3JlbW92ZV9wMnBfYXR0cjIzYShzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqYnNzX2V4LCB1OCBhdHRyX2lkKQotewotCXU4ICpwMnBfaWU7Ci0JdWludCBwMnBfaWVsZW4sIHAycF9pZWxlbl9vcmk7Ci0KLQlpZiAoKHAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKGJzc19leC0+SUVzICsgX0ZJWEVEX0lFX0xFTkdUSF8sCi0JCQkJICAgICBic3NfZXgtPklFTGVuZ3RoIC0gX0ZJWEVEX0lFX0xFTkdUSF8sCi0JCQkJICAgICBOVUxMLCAmcDJwX2llbGVuX29yaSkpKSB7Ci0JCXAycF9pZWxlbiA9IHJ0d19wMnBfYXR0cl9yZW1vdmUocDJwX2llLCBwMnBfaWVsZW5fb3JpLCBhdHRyX2lkKTsKLQkJaWYgKHAycF9pZWxlbiAhPSBwMnBfaWVsZW5fb3JpKSB7Ci0JCQl1OCAqbmV4dF9pZV9vcmkgPSBwMnBfaWUrcDJwX2llbGVuX29yaTsKLQkJCXU4ICpuZXh0X2llID0gcDJwX2llK3AycF9pZWxlbjsKLQkJCXVpbnQgcmVtYWluX2xlbjsKLQkJCXJlbWFpbl9sZW4gPSBic3NfZXgtPklFTGVuZ3RoLShuZXh0X2llX29yaS1ic3NfZXgtPklFcyk7Ci0KLQkJCW1lbWNweShuZXh0X2llLCBuZXh0X2llX29yaSwgcmVtYWluX2xlbik7Ci0JCQltZW1zZXQobmV4dF9pZStyZW1haW5fbGVuLCAwLCBwMnBfaWVsZW5fb3JpLXAycF9pZWxlbik7Ci0JCQlic3NfZXgtPklFTGVuZ3RoIC09IHAycF9pZWxlbl9vcmktcDJwX2llbGVuOwotCQl9Ci0JfQotfQotCi0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi1pbnQgcnR3X2dldF93ZmRfaWUodTggKmluX2llLCBpbnQgaW5fbGVuLCB1OCAqd2ZkX2llLCB1aW50ICp3ZmRfaWVsZW4pCi17Ci0JaW50IG1hdGNoOwotCWNvbnN0IHU4ICppZTsKLQotCW1hdGNoID0gMDsKLQotCWlmIChpbl9sZW4gPCAwKQotCQlyZXR1cm4gbWF0Y2g7Ci0KLQlpZSA9IGNmZzgwMjExX2ZpbmRfdmVuZG9yX2llKDB4NTA2RjlBLCAweDBBLCBpbl9pZSwgaW5fbGVuKTsKLQlpZiAoaWUgJiYgKGllWzFdIDw9IChNQVhfV0ZEX0lFX0xFTiAtIDIpKSkgewotCQlpZiAod2ZkX2llKSB7Ci0JCQkqd2ZkX2llbGVuID0gaWVbMV0gKyAyOwotCQkJbWVtY3B5KHdmZF9pZSwgaWUsIGllWzFdICsgMik7Ci0JCX0gZWxzZQotCQkJaWYgKHdmZF9pZWxlbikKLQkJCQkqd2ZkX2llbGVuID0gMDsKLQotCQltYXRjaCA9IDE7Ci0JfQotCi0JcmV0dXJuIG1hdGNoOwotfQotCi0vKglhdHRyX2NvbnRlbnQ6IFRoZSBvdXRwdXQgYnVmZmVyLCBjb250YWlucyB0aGUgImJvZHkgZmllbGQiIG9mCi0JV0ZEIGF0dHJpYnV0ZS4gKi8KLS8qCWF0dHJfY29udGVudGxlbjogVGhlIGRhdGEgbGVuZ3RoIG9mIHRoZSAiYm9keSBmaWVsZCIgb2YgV0ZECi0JYXR0cmlidXRlLiAqLwotaW50IHJ0d19nZXRfd2ZkX2F0dHJfY29udGVudCh1OCAqd2ZkX2llLCB1aW50IHdmZF9pZWxlbiwgdTggdGFyZ2V0X2F0dHJfaWQsCi0JCQkgICAgIHU4ICphdHRyX2NvbnRlbnQsIHVpbnQgKmF0dHJfY29udGVudGxlbikKLXsKLQlpbnQgbWF0Y2g7Ci0JdWludCBjbnQgPSAwOwotCXU4IGF0dHJfaWQsIHdmZF9vdWlbNF0gPSB7MHg1MCwgMHg2RiwgMHg5QSwgMHgwQX07Ci0KLQltYXRjaCA9IGZhbHNlOwotCi0JaWYgKCh3ZmRfaWVbMF0gIT0gX1ZFTkRPUl9TUEVDSUZJQ19JRV8pIHx8Ci0JICAgIG1lbWNtcCh3ZmRfaWUgKyAyLCB3ZmRfb3VpLCA0KSkgewotCQlyZXR1cm4gbWF0Y2g7Ci0JfQotCi0JLyoJMSAoV0ZEIElFKSArIDEgKExlbmd0aCkgKyAzIChPVUkpICsgMSAoT1VJIFR5cGUpICovCi0JY250ID0gNjsKLQl3aGlsZSAoY250IDwgd2ZkX2llbGVuKSB7Ci0JCXUxNiBhdHRybGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KHdmZF9pZSArIGNudCArIDEpOwotCi0JCWF0dHJfaWQgPSB3ZmRfaWVbY250XTsKLQkJaWYgKGF0dHJfaWQgPT0gdGFyZ2V0X2F0dHJfaWQpIHsKLQkJCS8qCTMgLT4gMSBieXRlIGZvciBhdHRyaWJ1dGUgSUQgZmllbGQsIDIKLQkJCQlieXRlcyBmb3IgbGVuZ3RoIGZpZWxkICovCi0JCQlpZiAoYXR0cl9jb250ZW50KQotCQkJCW1lbWNweShhdHRyX2NvbnRlbnQsICZ3ZmRfaWVbY250ICsgM10sIGF0dHJsZW4pOwotCi0JCQlpZiAoYXR0cl9jb250ZW50bGVuKQotCQkJCSphdHRyX2NvbnRlbnRsZW4gPSBhdHRybGVuOwotCi0JCQljbnQgKz0gYXR0cmxlbiArIDM7Ci0KLQkJCW1hdGNoID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJY250ICs9IGF0dHJsZW4gKyAzOyAvKiBnb3RvIG5leHQgKi8KLQkJfQotCX0KLQotCXJldHVybiBtYXRjaDsKLX0KLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotLyogQmFyb24gYWRkcyB0byBhdm9pZCBGcmVlQlNEIHdhcm5pbmcgKi8KLWludCBpZWVlODAyMTFfaXNfZW1wdHlfZXNzaWQyM2EoY29uc3QgY2hhciAqZXNzaWQsIGludCBlc3NpZF9sZW4pCi17Ci0JLyogU2luZ2xlIHdoaXRlIHNwYWNlIGlzIGZvciBMaW5rc3lzIEFQcyAqLwotCWlmIChlc3NpZF9sZW4gPT0gMSAmJiBlc3NpZFswXSA9PSAnICcpCi0JCXJldHVybiAxOwotCi0JLyogT3RoZXJ3aXNlLCBpZiB0aGUgZW50aXJlIGVzc2lkIGlzIDAsIHdlIGFzc3VtZSBpdCBpcyBoaWRkZW4gKi8KLQl3aGlsZSAoZXNzaWRfbGVuKSB7Ci0JCWVzc2lkX2xlbi0tOwotCQlpZiAoZXNzaWRbZXNzaWRfbGVuXSAhPSAnXDAnKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgcnR3X2dldF9jaXBoZXJfaW5mbyhzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yaykKIHsKLQl1MzIgd3BhX2llbGVuOwotCXVuc2lnbmVkIGNoYXIgKnBidWY7CisJY29uc3QgdTggKnBidWY7CiAJaW50IGdyb3VwX2NpcGhlciA9IDAsIHBhaXJ3aXNlX2NpcGhlciA9IDAsIGlzODAyMXggPSAwOwogCWludCByZXQgPSBfRkFJTDsKLQlpbnQgcjsKLQlwYnVmID0gcnR3X2dldF93cGFfaWUyM2EoJnBuZXR3b3JrLT5uZXR3b3JrLklFc1sxMl0sICZ3cGFfaWVsZW4sCi0JCQkgICAgICBwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCAtIDEyKTsKKwlpbnQgciwgb2Zmc2V0LCBwbGVuOworCWNoYXIgKnBpZTsKIAotCWlmIChwYnVmICYmICh3cGFfaWVsZW4gPiAwKSkgeworCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1KTsKKwlwaWUgPSAmcG5ldHdvcmstPm5ldHdvcmsuSUVzW29mZnNldF07CisJcGxlbiA9IHBuZXR3b3JrLT5uZXR3b3JrLklFTGVuZ3RoIC0gb2Zmc2V0OworCisJcGJ1ZiA9IGNmZzgwMjExX2ZpbmRfdmVuZG9yX2llKFdMQU5fT1VJX01JQ1JPU09GVCwKKwkJCQkgICAgICAgV0xBTl9PVUlfVFlQRV9NSUNST1NPRlRfV1BBLCBwaWUsIHBsZW4pOworCisJaWYgKHBidWYgJiYgcGJ1ZlsxXSA+IDApIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfaW5mb18sCi0JCQkgKCJydHdfZ2V0X2NpcGhlcl9pbmZvOiB3cGFfaWVsZW46ICVkIiwgd3BhX2llbGVuKSk7Ci0JCXIgPSBydHdfcGFyc2Vfd3BhX2llMjNhKHBidWYsIHdwYV9pZWxlbiArIDIsICZncm91cF9jaXBoZXIsCisJCQkgKCJydHdfZ2V0X2NpcGhlcl9pbmZvOiB3cGFfaWVsZW46ICVkIiwgcGJ1ZlsxXSkpOworCQlyID0gcnR3X3BhcnNlX3dwYV9pZTIzYShwYnVmLCBwYnVmWzFdICsgMiwgJmdyb3VwX2NpcGhlciwKIAkJCQkgICAgICZwYWlyd2lzZV9jaXBoZXIsICZpczgwMjF4KTsKIAkJaWYgKHIgPT0gX1NVQ0NFU1MpIHsKIAkJCXBuZXR3b3JrLT5CY25JbmZvLnBhaXJ3aXNlX2NpcGhlciA9IHBhaXJ3aXNlX2NpcGhlcjsKQEAgLTE2MDgsMTMgKzg3MSwxMiBAQAogCQkJcmV0ID0gX1NVQ0NFU1M7CiAJCX0KIAl9IGVsc2UgewotCQlwYnVmID0gcnR3X2dldF93cGEyX2llMjNhKCZwbmV0d29yay0+bmV0d29yay5JRXNbMTJdLCAmd3BhX2llbGVuLAotCQkJCSAgICAgICBwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCAtIDEyKTsKKwkJcGJ1ZiA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfUlNOLCBwaWUsIHBsZW4pOwogCi0JCWlmIChwYnVmICYmICh3cGFfaWVsZW4gPiAwKSkgeworCQlpZiAocGJ1ZiAmJiBwYnVmWzFdID4gMCkgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfaW5mb18sCiAJCQkJICgiZ2V0IFJTTiBJRVxuIikpOwotCQkJciA9IHJ0d19wYXJzZV93cGEyX2llMjNhKHBidWYsIHdwYV9pZWxlbiArIDIsCisJCQlyID0gcnR3X3BhcnNlX3dwYTJfaWUyM2EocGJ1ZiwgcGJ1ZlsxXSArIDIsCiAJCQkJCSAgICAgICZncm91cF9jaXBoZXIsICZwYWlyd2lzZV9jaXBoZXIsCiAJCQkJCSAgICAgICZpczgwMjF4KTsKIAkJCWlmIChyID09IF9TVUNDRVNTKSB7CkBAIC0xNjQxLDIzICs5MDMsMjIgQEAKIAogdm9pZCBydHdfZ2V0X2Jjbl9pbmZvMjNhKHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQogewotCXVuc2lnbmVkIHNob3J0IGNhcCA9IDA7CisJdW5zaWduZWQgc2hvcnQgY2FwOwogCXU4IGJlbmNyeXB0ID0gMDsKIAkvKiB1OCB3cGFfaWVbMjU1XSwgcnNuX2llWzI1NV07ICovCiAJdTE2IHdwYV9sZW4gPSAwLCByc25fbGVuID0gMDsKLQlzdHJ1Y3QgSFRfaW5mb19lbGVtZW50ICpwaHRfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKnBodF9jYXAgPSBOVUxMOwotCXVuc2lnbmVkIGludAkJbGVuOwotCXVuc2lnbmVkIGNoYXIJCSpwOworCXN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKnBodF9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpwaHRfY2FwOworCWNvbnN0IHU4ICpwOwogCi0JbWVtY3B5KCZjYXAsIHJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKHBuZXR3b3JrLT5uZXR3b3JrLklFcyksIDIpOwotCWNhcCA9IGxlMTZfdG9fY3B1KGNhcCk7CisJY2FwID0gZ2V0X3VuYWxpZ25lZF9sZTE2KAorCQlydHdfZ2V0X2NhcGFiaWxpdHkyM2FfZnJvbV9pZShwbmV0d29yay0+bmV0d29yay5JRXMpKTsKIAlpZiAoY2FwICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIHsKIAkJYmVuY3J5cHQgPSAxOwogCQlwbmV0d29yay0+bmV0d29yay5Qcml2YWN5ID0gMTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlwbmV0d29yay0+QmNuSW5mby5lbmNyeXBfcHJvdG9jb2wgPSBFTkNSWVBfUFJPVE9DT0xfT1BFTlNZUzsKLQl9CisKIAlydHdfZ2V0X3NlY19pZTIzYShwbmV0d29yay0+bmV0d29yay5JRXMsIHBuZXR3b3JrLT5uZXR3b3JrLklFTGVuZ3RoLAogCQkgICAgICAgTlVMTCwgJnJzbl9sZW4sIE5VTEwsICZ3cGFfbGVuKTsKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKQEAgLTE2NzEsMTEgKzkzMiwxMSBAQAogCQkgKCJydHdfZ2V0X2Jjbl9pbmZvMjNhOiB3cGFfbGVuID0lZCByc25fbGVuID0lZFxuIiwKIAkJICB3cGFfbGVuLCByc25fbGVuKSk7CiAKLQlpZiAocnNuX2xlbiA+IDApIHsKKwlpZiAocnNuX2xlbiA+IDApCiAJCXBuZXR3b3JrLT5CY25JbmZvLmVuY3J5cF9wcm90b2NvbCA9IEVOQ1JZUF9QUk9UT0NPTF9XUEEyOwotCX0gZWxzZSBpZiAod3BhX2xlbiA+IDApIHsKKwllbHNlIGlmICh3cGFfbGVuID4gMCkKIAkJcG5ldHdvcmstPkJjbkluZm8uZW5jcnlwX3Byb3RvY29sID0gRU5DUllQX1BST1RPQ09MX1dQQTsKLQl9IGVsc2UgeworCWVsc2UgewogCQlpZiAoYmVuY3J5cHQpCiAJCQlwbmV0d29yay0+QmNuSW5mby5lbmNyeXBfcHJvdG9jb2wgPSBFTkNSWVBfUFJPVE9DT0xfV0VQOwogCX0KQEAgLTE2ODksMjUgKzk1MCwyNCBAQAogCiAJLyogZ2V0IGJ3bW9kZSBhbmQgY2hfb2Zmc2V0ICovCiAJLyogcGFyc2luZyBIVF9DQVBfSUUgKi8KLQlwID0gcnR3X2dldF9pZTIzYShwbmV0d29yay0+bmV0d29yay5JRXMgKyBfRklYRURfSUVfTEVOR1RIXywKLQkJICAgICAgIF9IVF9DQVBBQklMSVRZX0lFXywgJmxlbiwKLQkJICAgICAgIHBuZXR3b3JrLT5uZXR3b3JrLklFTGVuZ3RoIC0gX0ZJWEVEX0lFX0xFTkdUSF8pOwotCWlmIChwICYmIGxlbiA+IDApIHsKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9DQVBBQklMSVRZLAorCQkJICAgICBwbmV0d29yay0+bmV0d29yay5JRXMgKyBfRklYRURfSUVfTEVOR1RIXywKKwkJCSAgICAgcG5ldHdvcmstPm5ldHdvcmsuSUVMZW5ndGggLSBfRklYRURfSUVfTEVOR1RIXyk7CisJaWYgKHAgJiYgcFsxXSA+IDApIHsKIAkJcGh0X2NhcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKShwICsgMik7CiAJCXBuZXR3b3JrLT5CY25JbmZvLmh0X2NhcF9pbmZvID0gcGh0X2NhcC0+Y2FwX2luZm87Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJcG5ldHdvcmstPkJjbkluZm8uaHRfY2FwX2luZm8gPSAwOwotCX0KKwogCS8qIHBhcnNpbmcgSFRfSU5GT19JRSAqLwotCXAgPSBydHdfZ2V0X2llMjNhKHBuZXR3b3JrLT5uZXR3b3JrLklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLAotCQkgICAgICAgX0hUX0FERF9JTkZPX0lFXywgJmxlbiwKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9PUEVSQVRJT04sCisJCQkgICAgIHBuZXR3b3JrLT5uZXR3b3JrLklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLAogCQkgICAgICAgcG5ldHdvcmstPm5ldHdvcmsuSUVMZW5ndGggLSBfRklYRURfSUVfTEVOR1RIXyk7Ci0JaWYgKHAgJiYgbGVuID4gMCkgeworCWlmIChwICYmIHBbMV0gPiAwKSB7CiAJCXBodF9pbmZvID0gKHN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKikocCArIDIpOwogCQlwbmV0d29yay0+QmNuSW5mby5odF9pbmZvX2luZm9zXzAgPSBwaHRfaW5mby0+aW5mb3NbMF07Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJcG5ldHdvcmstPkJjbkluZm8uaHRfaW5mb19pbmZvc18wID0gMDsKLQl9CiB9CiAKIC8qIHNob3cgTUNTIHJhdGUsIHVuaXQ6IDEwMEticHMgKi8KQEAgLTE3ODEsMzcgKzEwNDEsNiBAQAogCXJldHVybiBtYXhfcmF0ZTsKIH0KIAotaW50IHJ0d19hY3Rpb25fZnJhbWVfcGFyc2UyM2EoY29uc3QgdTggKmZyYW1lLCB1MzIgZnJhbWVfbGVuLCB1OCogY2F0ZWdvcnksCi0JCQkgICB1OCAqYWN0aW9uKQotewotCWNvbnN0IHU4ICpmcmFtZV9ib2R5ID0gZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXUxNiBmYzsKLQl1OCBjLCBhID0gMDsKLQotCWZjID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWZyYW1lKS0+ZnJhbWVfY29udHJvbCk7Ci0KLQlpZiAoKGZjICYgKElFRUU4MDIxMV9GQ1RMX0ZUWVBFfElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgIT0KLQkgICAgKElFRUU4MDIxMV9GVFlQRV9NR01UfElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQljID0gZnJhbWVfYm9keVswXTsKLQotCXN3aXRjaCAoYykgewotCWNhc2UgV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUM6IC8qIHZlbmRvci1zcGVjaWZpYyAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhID0gZnJhbWVfYm9keVsxXTsKLQl9Ci0KLQlpZiAoY2F0ZWdvcnkpCi0JCSpjYXRlZ29yeSA9IGM7Ci0JaWYgKGFjdGlvbikKLQkJKmFjdGlvbiA9IGE7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKl9hY3Rpb25fcHVibGljX3N0cjIzYVtdID0gewogCSJBQ1RfUFVCX0JTU0NPRVhJU1QiLAogCSJBQ1RfUFVCX0RTRV9FTkFCTEUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2FlOGQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDExIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0KLVRoZSBwdXJwb3NlIG9mIHJ0d19pby5jCi0KLWEuIHByb3ZpZGVzIHRoZSBBUEkKLQotYi4gcHJvdmlkZXMgdGhlIHByb3RvY29sIGVuZ2luZQotCi1jLiBwcm92aWRlcyB0aGUgc29mdHdhcmUgaW50ZXJmYWNlIGJldHdlZW4gY2FsbGVyIGFuZCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlCi0KLUNvbXBpbGVyIEZsYWcgT3B0aW9uOgotCi0xLiBGb3IgVVNCOgotICAgYS4gVVNFX0FTWU5DX0lSUDogQm90aCBzeW5jL2FzeW5jIG9wZXJhdGlvbnMgYXJlIHByb3ZpZGVkLgotCi1Pbmx5IHN5bmMgcmVhZC9ydHdfd3JpdGVfbWVtIG9wZXJhdGlvbnMgYXJlIHByb3ZpZGVkLgotCi1qYWNrc29uQHJlYWx0ZWsuY29tLnR3Ci0KLSovCi0KLSNkZWZpbmUgX1JUV19JT19DXwotI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KLSNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KLSNpbmNsdWRlIDxydHdfaW8uaD4KLSNpbmNsdWRlIDxvc2RlcF9pbnRmLmg+Ci0KLSNpbmNsdWRlIDx1c2Jfb3BzLmg+Ci0KLXU4IF9ydHdfcmVhZDgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkcikKLXsKLQl1OCByX3ZhbDsKLQlzdHJ1Y3QgaW9fcHJpdiAqcGlvX3ByaXYgPSAmYWRhcHRlci0+aW9wcml2OwotCXN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwgPSAmcGlvX3ByaXYtPmludGY7Ci0KLQlyX3ZhbCA9IHBpbnRmaGRsLT5pb19vcHMuX3JlYWQ4KHBpbnRmaGRsLCBhZGRyKTsKLQotCXJldHVybiByX3ZhbDsKLX0KLQotdTE2IF9ydHdfcmVhZDE2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIpCi17Ci0JdTE2IHJfdmFsOwotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCA9ICZwaW9fcHJpdi0+aW50ZjsKLQotCXJfdmFsID0gcGludGZoZGwtPmlvX29wcy5fcmVhZDE2KHBpbnRmaGRsLCBhZGRyKTsKLQotCXJldHVybiBsZTE2X3RvX2NwdShyX3ZhbCk7Ci19Ci0KLXUzMiBfcnR3X3JlYWQzMjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyKQotewotCXUzMiByX3ZhbDsKLQlzdHJ1Y3QgaW9fcHJpdiAqcGlvX3ByaXYgPSAmYWRhcHRlci0+aW9wcml2OwotCXN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwgPSAmcGlvX3ByaXYtPmludGY7Ci0KLQlyX3ZhbCA9IHBpbnRmaGRsLT5pb19vcHMuX3JlYWQzMihwaW50ZmhkbCwgYWRkcik7Ci0KLQlyZXR1cm4gbGUzMl90b19jcHUocl92YWwpOwotfQotCi1pbnQgX3J0d193cml0ZTgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggdmFsKQotewotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsCQkqcGludGZoZGwgPSAmcGlvX3ByaXYtPmludGY7Ci0JaW50IHJldDsKLQotCXJldCA9IHBpbnRmaGRsLT5pb19vcHMuX3dyaXRlOChwaW50ZmhkbCwgYWRkciwgdmFsKTsKLQotCXJldHVybiBSVFdfU1RBVFVTX0NPREUyM2EocmV0KTsKLX0KLQotaW50IF9ydHdfd3JpdGUxNjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MTYgdmFsKQotewotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsCQkqcGludGZoZGwgPSAmcGlvX3ByaXYtPmludGY7Ci0JaW50IHJldDsKLQotCXZhbCA9IGNwdV90b19sZTE2KHZhbCk7Ci0JcmV0ID0gcGludGZoZGwtPmlvX29wcy5fd3JpdGUxNihwaW50ZmhkbCwgYWRkciwgdmFsKTsKLQotCXJldHVybiBSVFdfU1RBVFVTX0NPREUyM2EocmV0KTsKLX0KLWludCBfcnR3X3dyaXRlMzIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3QgaW9fcHJpdiAqcGlvX3ByaXYgPSAmYWRhcHRlci0+aW9wcml2OwotCXN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwgPSAmcGlvX3ByaXYtPmludGY7Ci0JaW50IHJldDsKLQotCXZhbCA9IGNwdV90b19sZTMyKHZhbCk7Ci0JcmV0ID0gcGludGZoZGwtPmlvX29wcy5fd3JpdGUzMihwaW50ZmhkbCwgYWRkciwgdmFsKTsKLQotCXJldHVybiBSVFdfU1RBVFVTX0NPREUyM2EocmV0KTsKLX0KLQotaW50IF9ydHdfd3JpdGVOMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIgLCB1MzIgbGVuZ3RoICwgdTggKnBkYXRhKQotewotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0gICAgICAgIHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwgPSAoc3RydWN0IGludGZfaGRsKikmcGlvX3ByaXYtPmludGY7Ci0JaW50IHJldDsKLQotCXJldCA9IHBpbnRmaGRsLT5pb19vcHMuX3dyaXRlTihwaW50ZmhkbCwgYWRkciwgbGVuZ3RoLCBwZGF0YSk7Ci0KLQlyZXR1cm4gUlRXX1NUQVRVU19DT0RFMjNhKHJldCk7Ci19Ci1pbnQgX3J0d193cml0ZTgyM2FfYXN5bmMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggdmFsKQotewotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCA9ICZwaW9fcHJpdi0+aW50ZjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGludGZoZGwtPmlvX29wcy5fd3JpdGU4X2FzeW5jKHBpbnRmaGRsLCBhZGRyLCB2YWwpOwotCi0JcmV0dXJuIFJUV19TVEFUVVNfQ09ERTIzYShyZXQpOwotfQotaW50IF9ydHdfd3JpdGUxNjIzYV9hc3luYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MTYgdmFsKQotewotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCA9ICZwaW9fcHJpdi0+aW50ZjsKLQlpbnQgcmV0OwotCi0JdmFsID0gY3B1X3RvX2xlMTYodmFsKTsKLQlyZXQgPSBwaW50ZmhkbC0+aW9fb3BzLl93cml0ZTE2X2FzeW5jKHBpbnRmaGRsLCBhZGRyLCB2YWwpOwotCi0JcmV0dXJuIFJUV19TVEFUVVNfQ09ERTIzYShyZXQpOwotfQotaW50IF9ydHdfd3JpdGUzMjIzYV9hc3luYzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCA9ICZwaW9fcHJpdi0+aW50ZjsKLQlpbnQgcmV0OwotCi0JdmFsID0gY3B1X3RvX2xlMzIodmFsKTsKLQlyZXQgPSBwaW50ZmhkbC0+aW9fb3BzLl93cml0ZTMyX2FzeW5jKHBpbnRmaGRsLCBhZGRyLCB2YWwpOwotCi0JcmV0dXJuIFJUV19TVEFUVVNfQ09ERTIzYShyZXQpOwotfQotCi12b2lkIF9ydHdfcmVhZF9tZW0yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwgdTggKnBtZW0pCi17Ci0Jc3RydWN0IGlvX3ByaXYgKnBpb19wcml2ID0gJmFkYXB0ZXItPmlvcHJpdjsKLQlzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsID0gJnBpb19wcml2LT5pbnRmOwotCi0JaWYgKChhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9PSB0cnVlKSB8fAotCSAgICAoYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKSkgewotCSAgICAgUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvX2NfLCBfZHJ2X2luZm9fLAotCQkgICAgICAoInJ0d19yZWFkX21lbTpiRHJpdmVyU3RvcHBlZCglZCkgT1IgIgotCQkgICAgICAgImJTdXJwcmlzZVJlbW92ZWQoJWQpIiwgYWRhcHRlci0+YkRyaXZlclN0b3BwZWQsCi0JCSAgICAgICBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKSk7Ci0JICAgICByZXR1cm47Ci0JfQotCi0JcGludGZoZGwtPmlvX29wcy5fcmVhZF9tZW0ocGludGZoZGwsIGFkZHIsIGNudCwgcG1lbSk7Ci19Ci0KLXZvaWQgX3J0d193cml0ZV9tZW0yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwgdTggKnBtZW0pCi17Ci0Jc3RydWN0IGlvX3ByaXYgKnBpb19wcml2ID0gJmFkYXB0ZXItPmlvcHJpdjsKLQlzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsID0gJnBpb19wcml2LT5pbnRmOwotCi0JcGludGZoZGwtPmlvX29wcy5fd3JpdGVfbWVtKHBpbnRmaGRsLCBhZGRyLCBjbnQsIHBtZW0pOwotfQotCi12b2lkIF9ydHdfcmVhZF9wb3J0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiBjbnQsCi0JCSAgICBzdHJ1Y3QgcmVjdl9idWYgKnJidWYpCi17Ci0Jc3RydWN0IGlvX3ByaXYgKnBpb19wcml2ID0gJmFkYXB0ZXItPmlvcHJpdjsKLQlzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsID0gJnBpb19wcml2LT5pbnRmOwotCi0JaWYgKChhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9PSB0cnVlKSB8fAotCSAgICAoYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKSkgewotCSAgICAgUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvX2NfLCBfZHJ2X2luZm9fLAotCQkgICAgICAoInJ0d19yZWFkX3BvcnQ6YkRyaXZlclN0b3BwZWQoJWQpIE9SICIKLQkJICAgICAgICJiU3VycHJpc2VSZW1vdmVkKCVkKSIsIGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLAotCQkgICAgICAgYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCkpOwotCSAgICAgcmV0dXJuOwotCX0KLQotCXBpbnRmaGRsLT5pb19vcHMuX3JlYWRfcG9ydChwaW50ZmhkbCwgYWRkciwgY250LCByYnVmKTsKLX0KLQotdm9pZCBfcnR3X3JlYWRfcG9ydDIzYV9jYW5jZWwoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQotewotCXZvaWQgKCpfcmVhZF9wb3J0X2NhbmNlbCkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCk7Ci0Jc3RydWN0IGlvX3ByaXYgKnBpb19wcml2ID0gJmFkYXB0ZXItPmlvcHJpdjsKLQlzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsID0gJnBpb19wcml2LT5pbnRmOwotCi0JX3JlYWRfcG9ydF9jYW5jZWwgPSBwaW50ZmhkbC0+aW9fb3BzLl9yZWFkX3BvcnRfY2FuY2VsOwotCi0JaWYgKF9yZWFkX3BvcnRfY2FuY2VsKQotCQlfcmVhZF9wb3J0X2NhbmNlbChwaW50ZmhkbCk7Ci19Ci0KLXUzMiBfcnR3X3dyaXRlX3BvcnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwKLQkJICAgIHN0cnVjdCB4bWl0X2J1ZiAqeGJ1ZikKLXsKLQlzdHJ1Y3QgaW9fcHJpdiAqcGlvX3ByaXYgPSAmYWRhcHRlci0+aW9wcml2OwotCXN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwgPSAmcGlvX3ByaXYtPmludGY7Ci0JdTMyIHJldCA9IF9TVUNDRVNTOwotCi0JcmV0ID0gcGludGZoZGwtPmlvX29wcy5fd3JpdGVfcG9ydChwaW50ZmhkbCwgYWRkciwgY250LCB4YnVmKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXUzMiBfcnR3X3dyaXRlX3BvcnQyM2FfYW5kX3dhaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwKLQkJCSAgICAgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZiwgaW50IHRpbWVvdXRfbXMpCi17Ci0JaW50IHJldCA9IF9TVUNDRVNTOwotCXN0cnVjdCBzdWJtaXRfY3R4IHNjdHg7Ci0KLQlydHdfc2N0eF9pbml0MjNhKCZzY3R4LCB0aW1lb3V0X21zKTsKLQlweG1pdGJ1Zi0+c2N0eCA9ICZzY3R4OwotCi0JcmV0ID0gX3J0d193cml0ZV9wb3J0MjNhKGFkYXB0ZXIsIGFkZHIsIGNudCwgcHhtaXRidWYpOwotCi0JaWYgKHJldCA9PSBfU1VDQ0VTUykKLQkJcmV0ID0gcnR3X3NjdHhfd2FpdDIzYSgmc2N0eCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIF9ydHdfd3JpdGVfcG9ydDIzYV9jYW5jZWwoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQotewotCXZvaWQgKCpfd3JpdGVfcG9ydF9jYW5jZWwpKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwpOwotCXN0cnVjdCBpb19wcml2ICpwaW9fcHJpdiA9ICZhZGFwdGVyLT5pb3ByaXY7Ci0Jc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCA9ICZwaW9fcHJpdi0+aW50ZjsKLQotCV93cml0ZV9wb3J0X2NhbmNlbCA9IHBpbnRmaGRsLT5pb19vcHMuX3dyaXRlX3BvcnRfY2FuY2VsOwotCi0JaWYgKF93cml0ZV9wb3J0X2NhbmNlbCkKLQkJX3dyaXRlX3BvcnRfY2FuY2VsKHBpbnRmaGRsKTsKLX0KLQotaW50IHJ0d19pbml0X2lvX3ByaXYyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgICB2b2lkICgqc2V0X2ludGZfb3BzKShzdHJ1Y3QgX2lvX29wcyAqcG9wcykpCi17Ci0Jc3RydWN0IGlvX3ByaXYJKnBpb3ByaXYgPSAmcGFkYXB0ZXItPmlvcHJpdjsKLQlzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmID0gJnBpb3ByaXYtPmludGY7Ci0KLQlpZiAoc2V0X2ludGZfb3BzID09IE5VTEwpCi0JCXJldHVybiBfRkFJTDsKLQotCXBpb3ByaXYtPnBhZGFwdGVyID0gcGFkYXB0ZXI7Ci0JcGludGYtPnBhZGFwdGVyID0gcGFkYXB0ZXI7Ci0JcGludGYtPnBpbnRmX2RldiA9IGFkYXB0ZXJfdG9fZHZvYmoocGFkYXB0ZXIpOwotCi0Jc2V0X2ludGZfb3BzKCZwaW50Zi0+aW9fb3BzKTsKLQotCXJldHVybiBfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfaW9jdGxfc2V0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2lvY3RsX3NldC5jCmluZGV4IDMwZDcxODUuLmNmODk3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfaW9jdGxfc2V0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19pb2N0bF9zZXQuYwpAQCAtMTksMTcgKzE5LDE2IEBACiAjaW5jbHVkZSA8cnR3X2lvY3RsX3NldC5oPgogI2luY2x1ZGUgPGhhbF9pbnRmLmg+CiAKLSNpbmNsdWRlIDx1c2Jfb3NpbnRmLmg+CiAjaW5jbHVkZSA8dXNiX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogCi11OCBydHdfZG9fam9pbjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoraW50IHJ0d19kb19qb2luMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsICpwaGVhZDsKIAl1OCogcGlic3MgPSBOVUxMOwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAJc3RydWN0IHJ0d19xdWV1ZSAqcXVldWUgPSAmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlOwotCXU4IHJldCA9IF9TVUNDRVNTOworCWludCByZXQgPSBfU1VDQ0VTUzsKIAogCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwogCXBoZWFkID0gZ2V0X2xpc3RfaGVhZChxdWV1ZSk7CkBAIC00NSw3ICs0NCw3IEBACiAKIAlwbWxtZXByaXYtPnRvX2pvaW4gPSB0cnVlOwogCi0JaWYgKF9ydHdfcXVldWVfZW1wdHkyM2EocXVldWUpID09IHRydWUpIHsKKwlpZiAobGlzdF9lbXB0eSgmcXVldWUtPnF1ZXVlKSkgewogCQlzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwogCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkcpOwogCkBAIC01NCw3ICs1Myw3IEBACiAJCS8qIHdlIHRyeSB0byBpc3N1ZSBzaXRlc3VydmV5IGZpcnN0bHkgKi8KIAogCQlpZiAocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMgPT0gZmFsc2UgfHwKLQkJICAgIHJ0d190b19yb2FtaW5nKHBhZGFwdGVyKSA+IDApIHsKKwkJICAgIHBhZGFwdGVyLT5tbG1lcHJpdi50b19yb2FtaW5nID4gMCkgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKIAkJCQkgKCJydHdfZG9fam9pbjIzYSgpOiBzaXRlIHN1cnZleSBpZiBzY2FubmVkX3F1ZXVlICIKIAkJCQkgICJpcyBlbXB0eVxuLiIpKTsKQEAgLTgzLDcgKzgyLDcgQEAKIAkJCW1vZF90aW1lcigmcG1sbWVwcml2LT5hc3NvY190aW1lciwKIAkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1BWF9KT0lOX1RJTUVPVVQpKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSkgPT0gdHJ1ZSkgeworCQkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSkgewogCQkJCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwZGV2X25ldHdvcms7CiAJCQkJLyogIHN1Ym1pdCBjcmVhdGVic3NfY21kIHRvIGNoYW5nZSB0byBhCiAJCQkJICAgIEFESE9DX01BU1RFUiAqLwpAQCAtMTMwLDcgKzEyOSw3IEBACiAJCQkJICAgcXVldWUgKi8KIAkJCQkvKiB3ZSB0cnkgdG8gaXNzdWUgc2l0ZXN1cnZleSBmaXJzdGx5ICovCiAJCQkJaWYgKHBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uYkJ1c3lUcmFmZmljID09Ci0JCQkJICAgIGZhbHNlIHx8IHJ0d190b19yb2FtaW5nKHBhZGFwdGVyKSA+IDApIHsKKwkJCQkgICAgZmFsc2UgfHwgcGFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcgPiAwKXsKIAkJCQkJLyogREJHXzg3MjNBKCJydHdfZG9fam9pbjIzYSgpIHdoZW4gICBubyAiCiAJCQkJCSAgICJkZXNpcmVkIGJzcyBpbiBzY2FubmluZyBxdWV1ZVxuIik7CiAJCQkJCSovCkBAIC0xNTIsOSArMTUxLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdTggcnR3X3NldF84MDJfMTFfc3NpZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyLCBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCkKK2ludCBydHdfc2V0XzgwMl8xMV9zc2lkMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCkKIHsKLQl1OCBzdGF0dXMgPSBfU1VDQ0VTUzsKKwlpbnQgc3RhdHVzID0gX1NVQ0NFU1M7CiAJdTMyIGN1cl90aW1lID0gMDsKIAogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CkBAIC0xNzUsMjIgKzE3NSwxOSBAQAogCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKIAogCURCR184NzIzQSgiU2V0IFNTSUQgdW5kZXIgZndfc3RhdGUgPSAweCUwOHhcbiIsIGdldF9md3N0YXRlKHBtbG1lcHJpdikpOwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkgPT0gdHJ1ZSkgeworCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkpCiAJCWdvdG8gaGFuZGxlX3RraXBfY291bnRlcm1lYXN1cmU7Ci0JfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkcpID09IHRydWUpIHsKKwllbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkcpKQogCQlnb3RvIHJlbGVhc2VfbWxtZV9sb2NrOwotCX0KIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRHxXSUZJX0FESE9DX01BU1RFUl9TVEFURSkgPT0gdHJ1ZSkKLQl7CisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEfFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSkgewogCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfc2V0X2NfLCBfZHJ2X2luZm9fLAogCQkJICgic2V0X3NzaWQ6IF9GV19MSU5LRUR8fFdJRklfQURIT0NfTUFTVEVSX1NUQVRFXG4iKSk7CiAKIAkJaWYgKChwbWxtZXByaXYtPmFzc29jX3NzaWQuc3NpZF9sZW4gPT0gc3NpZC0+c3NpZF9sZW4pICYmCiAJCSAgICAhbWVtY21wKCZwbWxtZXByaXYtPmFzc29jX3NzaWQuc3NpZCwgc3NpZC0+c3NpZCwKIAkJCSAgICBzc2lkLT5zc2lkX2xlbikpIHsKLQkJCWlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSkgPT0gZmFsc2UpKQotCQkJeworCQkJaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgewogCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9pb2N0bF9zZXRfY18sIF9kcnZfZXJyXywKIAkJCQkJICgiU2V0IFNTSUQgaXMgdGhlIHNhbWUgc3NpZCwgZndfc3RhdGUgPSAweCUwOHhcbiIsCiAJCQkJCSAgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOwpAQCAtMjAwLDEyICsxOTcsMTIgQEAKIAkJCQkJLyogaWYgaW4gV0lGSV9BREhPQ19NQVNURVJfU1RBVEUgfCBXSUZJX0FESE9DX1NUQVRFLCBjcmVhdGUgYnNzIG9yIHJlam9pbiBhZ2FpbiAqLwogCQkJCQlydHdfZGlzYXNzb2NfY21kMjNhKHBhZGFwdGVyLCAwLCB0cnVlKTsKIAotCQkJCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpCisJCQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpCiAJCQkJCQlydHdfaW5kaWNhdGVfZGlzY29ubmVjdDIzYShwYWRhcHRlcik7CiAKIAkJCQkJcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhKHBhZGFwdGVyLCAxKTsKIAotCQkJCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSA9PSB0cnVlKSB7CisJCQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKSB7CiAJCQkJCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpOwogCQkJCQkJc2V0X2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKTsKIAkJCQkJfQpAQCAtMjI4LDEyICsyMjUsMTIgQEAKIAogCQkJcnR3X2Rpc2Fzc29jX2NtZDIzYShwYWRhcHRlciwgMCwgdHJ1ZSk7CiAKLQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKKwkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpCiAJCQkJcnR3X2luZGljYXRlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIpOwogCiAJCQlydHdfZnJlZV9hc3NvY19yZXNvdXJjZXMyM2EocGFkYXB0ZXIsIDEpOwogCi0JCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSA9PSB0cnVlKSB7CisJCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSkgewogCQkJCV9jbHJfZndzdGF0ZV8ocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSk7CiAJCQkJc2V0X2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKTsKIAkJCX0KQEAgLTI2MCwxMiArMjU3LDEwIEBACiAJbWVtY3B5KCZwbWxtZXByaXYtPmFzc29jX3NzaWQsIHNzaWQsIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkpOwogCXBtbG1lcHJpdi0+YXNzb2NfYnlfYnNzaWQgPSBmYWxzZTsKIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkgPT0gdHJ1ZSkgeworCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkpCiAJCXBtbG1lcHJpdi0+dG9fam9pbiA9IHRydWU7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJc3RhdHVzID0gcnR3X2RvX2pvaW4yM2EocGFkYXB0ZXIpOwotCX0KIAogcmVsZWFzZV9tbG1lX2xvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CkBAIC0yNzksMTA4ICsyNzQsMjMgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi11OCBydHdfc2V0XzgwMl8xMV9pbmZyYXN0cnVjdHVyZV9tb2RlMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIsCi0JZW51bSBuZGlzXzgwMl8xMV9uZXRfaW5mcmEgbmV0d29ya3R5cGUpCi17Ci0Jc3RydWN0CW1sbWVfcHJpdgkqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3QJd2xhbl9uZXR3b3JrCSpjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOwotCWVudW0gbmRpc184MDJfMTFfbmV0X2luZnJhKiBwb2xkX3N0YXRlID0gJmN1cl9uZXR3b3JrLT5uZXR3b3JrLkluZnJhc3RydWN0dXJlTW9kZTsKLQotCi0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfc2V0X2NfLCBfZHJ2X25vdGljZV8sCi0JCSAoIitydHdfc2V0XzgwMl8xMV9pbmZyYXN0cnVjdHVyZV9tb2RlMjNhOiBvbGQgPSVkIG5ldyA9JWQgZndfc3RhdGUgPSAweCUwOHhcbiIsCi0JCSAgKnBvbGRfc3RhdGUsIG5ldHdvcmt0eXBlLCBnZXRfZndzdGF0ZShwbWxtZXByaXYpKSk7Ci0KLQlpZiAoKnBvbGRfc3RhdGUgIT0gbmV0d29ya3R5cGUpCi0JewotCQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci0KLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywgKCIgY2hhbmdlIG1vZGUhIikpOwotCQkvKiBEQkdfODcyM0EoImNoYW5nZSBtb2RlLCBvbGRfbW9kZSA9JWQsIG5ld19tb2RlID0lZCwgZndfc3RhdGUgPSAweCV4XG4iLCAqcG9sZF9zdGF0ZSwgbmV0d29ya3R5cGUsIGdldF9md3N0YXRlKHBtbG1lcHJpdikpOyAqLwotCi0JCWlmICgqcG9sZF9zdGF0ZSA9PSBOZGlzODAyXzExQVBNb2RlKQotCQl7Ci0JCQkvKiBjaGFuZ2UgdG8gb3RoZXIgbW9kZSBmcm9tIE5kaXM4MDJfMTFBUE1vZGUgKi8KLQkJCWN1cl9uZXR3b3JrLT5qb2luX3JlcyA9IC0xOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCi0JCQlzdG9wX2FwX21vZGUyM2EocGFkYXB0ZXIpOwotI2VuZGlmCi0JCX0KLQotCQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKSB8fCgqcG9sZF9zdGF0ZSA9PSBOZGlzODAyXzExSUJTUykpCi0JCQlydHdfZGlzYXNzb2NfY21kMjNhKHBhZGFwdGVyLCAwLCB0cnVlKTsKLQotCQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKSB8fAotCQkJKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkgPT0gdHJ1ZSkpCi0JCQlydHdfZnJlZV9hc3NvY19yZXNvdXJjZXMyM2EocGFkYXB0ZXIsIDEpOwotCi0JCWlmICgoKnBvbGRfc3RhdGUgPT0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlKSB8fCgqcG9sZF9zdGF0ZSA9PSBOZGlzODAyXzExSUJTUykpCi0JICAgICAgIHsKLQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQkJCXsKLQkJCQlydHdfaW5kaWNhdGVfZGlzY29ubmVjdDIzYShwYWRhcHRlcik7IC8qIHdpbGwgY2xyIExpbmtlZF9zdGF0ZTsgYmVmb3JlIHRoaXMgZnVuY3Rpb24sIHdlIG11c3QgaGF2ZSBjaGtlZCB3aGV0aGVyICBpc3N1ZSBkaXMtYXNzb2NfY21kIG9yIG5vdCAqLwotCQkJfQotCSAgICAgICB9Ci0KLQkJKnBvbGRfc3RhdGUgPSBuZXR3b3JrdHlwZTsKLQotCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgfldJRklfTlVMTF9TVEFURSk7Ci0KLQkJc3dpdGNoIChuZXR3b3JrdHlwZSkKLQkJewotCQkJY2FzZSBOZGlzODAyXzExSUJTUzoKLQkJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZToKLQkJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTmRpczgwMl8xMUFQTW9kZToKLQkJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpOwotI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotCQkJCXN0YXJ0X2FwX21vZGUyM2EocGFkYXB0ZXIpOwotCQkJCS8qIHJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKHBhZGFwdGVyKTsgKi8KLSNlbmRpZgotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTmRpczgwMl8xMUF1dG9Vbmtub3duOgotCQkJY2FzZSBOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmVNYXg6Ci0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBTZWNDbGVhckFsbEtleXMoYWRhcHRlcik7ICovCi0KLQkJLyogUlRfVFJBQ0UoQ09NUF9PSURfU0VULCBEQkdfTE9VRCwgKCJzZXRfaW5mcmFzdHJ1Y3R1cmU6IGZ3X3N0YXRlOiV4IGFmdGVyIGNoYW5naW5nIG1vZGVcbiIsICovCi0JCS8qCQkJCQkJCQkJZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOyAqLwotCi0JCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwotCX0KLQotCi0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotdTggcnR3X3NldF84MDJfMTFfYnNzaWQyM2FfbGlzdF9zY2FuKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcHNzaWQsIGludCBzc2lkX21heF9udW0pCitpbnQgcnR3X3NldF84MDJfMTFfYnNzaWQyM2FfbGlzdF9zY2FuKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkJICAgICAgc3RydWN0IGNmZzgwMjExX3NzaWQgKnBzc2lkLAorCQkJCSAgICAgIGludCBzc2lkX21heF9udW0pCiB7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQl1OCByZXMgPSB0cnVlOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9pb2N0bF9zZXRfY18sIF9kcnZfZXJyXywKIAkJICgiK3J0d19zZXRfODAyXzExX2Jzc2lkMjNhX2xpc3Rfc2NhbigpLCBmd19zdGF0ZSA9JXhcbiIsCiAJCSAgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOwogCiAJaWYgKCFwYWRhcHRlcikgewotCQlyZXMgPSBmYWxzZTsKKwkJcmVzID0gX0ZBSUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAJaWYgKHBhZGFwdGVyLT5od19pbml0X2NvbXBsZXRlZCA9PSBmYWxzZSkgewotCQlyZXMgPSBmYWxzZTsKKwkJcmVzID0gX0ZBSUw7CiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9pb2N0bF9zZXRfY18sIF9kcnZfZXJyXywKIAkJCSAoIlxuID09PSBydHdfc2V0XzgwMl8xMV9ic3NpZDIzYV9saXN0X3NjYW46IgogCQkJICAiaHdfaW5pdF9jb21wbGV0ZWQgPT0gZmFsc2UgPT09XG4iKSk7CkBAIC0zOTMsNyArMzAzLDYgQEAKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9lcnJfLAogCQkJICgicnR3X3NldF84MDJfMTFfYnNzaWQyM2FfbGlzdF9zY2FuIGZhaWwgc2luY2UgZndfc3RhdGUgIgogCQkJICAiPSAleFxuIiwgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOwotCQlyZXMgPSB0cnVlOwogCiAJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwKIAkJCQkgIChfRldfVU5ERVJfU1VSVkVZfF9GV19VTkRFUl9MSU5LSU5HKSkpIHsKQEAgLTQwNiw4ICszMTUsOCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHJ0d19pc19zY2FuX2RlbnkocGFkYXB0ZXIpKSB7Ci0JCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCI6IHNjYW4gZGVueVxuIiwKLQkJCQkgIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKKwkJCURCR184NzIzQSgiJXMoJXMpOiBzY2FuIGRlbnlcbiIsCisJCQkJICBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOwogCQkJcmV0dXJuIF9TVUNDRVNTOwogCQl9CiAKQEAgLTQyMiwxMiArMzMxLDExIEBACiAJcmV0dXJuIHJlczsKIH0KIAotdTggcnR3X3NldF84MDJfMTFfYXV0aGVudGljYXRpb25fbW9kZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyLAotCQkJCSAgICAgIGVudW0gbmRpc184MDJfMTFfYXV0aF9tb2RlIGF1dGhtb2RlKQoraW50IHJ0d19zZXRfODAyXzExX2F1dGhlbnRpY2F0aW9uX21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKiBwYWRhcHRlciwKKwkJCQkJICBlbnVtIG5kaXNfODAyXzExX2F1dGhfbW9kZSBhdXRobW9kZSkKIHsKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCWludCByZXM7Ci0JdTggcmV0OwogCiAJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKIAkJICgic2V0XzgwMl8xMV9hdXRoLm1vZGUoKTogbW9kZSA9JXhcbiIsIGF1dGhtb2RlKSk7CkBAIC00NDQsOTAgKzM1Miw3IEBACiAKIAlyZXMgPSBydHdfc2V0X2F1dGgyM2EocGFkYXB0ZXIsIHBzZWN1cml0eXByaXYpOwogCi0JaWYgKHJlcyA9PSBfU1VDQ0VTUykKLQkJcmV0ID0gdHJ1ZTsKLQllbHNlCi0JCXJldCA9IGZhbHNlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdTggcnR3X3NldF84MDJfMTFfYWRkX3dlcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyLAotCQkJICBzdHJ1Y3QgbmRpc184MDJfMTFfd2VwICp3ZXApCi17Ci0JdTggYmRlZmF1bHRrZXk7Ci0JdTggYnRyYW5zbWl0a2V5OwotCWludCBrZXlpZCwgcmVzOwotCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7Ci0JdTggcmV0ID0gX1NVQ0NFU1M7Ci0KLQliZGVmYXVsdGtleSA9ICh3ZXAtPktleUluZGV4ICYgMHg0MDAwMDAwMCkgPiAwID8gZmFsc2UgOiB0cnVlOwotCWJ0cmFuc21pdGtleSA9ICh3ZXAtPktleUluZGV4ICYgMHg4MDAwMDAwMCkgPiAwID8gdHJ1ZSAgOiBmYWxzZTsKLQlrZXlpZCA9IHdlcC0+S2V5SW5kZXggJiAweDNmZmZmZmZmOwotCi0JaWYgKGtleWlkID49IDQpIHsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9lcnJfLAotCQkJICgiTWdudEFjdHJ0d19zZXRfODAyXzExX2FkZF93ZXAyM2E6a2V5aWQ+NCA9PmZhaWxcbiIpKTsKLQkJcmV0ID0gZmFsc2U7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlzd2l0Y2ggKHdlcC0+S2V5TGVuZ3RoKQotCXsKLQljYXNlIDU6Ci0JCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfV0VQNDBfOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfc2V0X2NfLCBfZHJ2X2luZm9fLAotCQkJICgiTWdudEFjdHJ0d19zZXRfODAyXzExX2FkZF93ZXAyM2E6d2VwLT5LZXlMZW5ndGggPSA1XG4iKSk7Ci0JCWJyZWFrOwotCWNhc2UgMTM6Ci0JCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfV0VQMTA0XzsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKLQkJCSAoIk1nbnRBY3RydHdfc2V0XzgwMl8xMV9hZGRfd2VwMjNhOndlcC0+S2V5TGVuZ3RoID0gMTNcbiIpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9IF9OT19QUklWQUNZXzsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKLQkJCSAoIk1nbnRBY3RydHdfc2V0XzgwMl8xMV9hZGRfd2VwMjNhOndlcC0+S2V5TGVuZ3RoIT0gNSAiCi0JCQkgICJvciAxM1xuIikpOwotCQkJYnJlYWs7Ci0JfQotCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKLQkJICgicnR3X3NldF84MDJfMTFfYWRkX3dlcDIzYTpiZWZvciBtZW1jcHksIHdlcC0+S2V5TGVuZ3RoID0gMHgleCAiCi0JCSAgIndlcC0+S2V5SW5kZXggPSAweCV4ICBrZXlpZCA9JXhcbiIsCi0JCSAgd2VwLT5LZXlMZW5ndGgsIHdlcC0+S2V5SW5kZXgsIGtleWlkKSk7Ci0KLQltZW1jcHkoJnBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzBdLAotCSAgICAgICAmd2VwLT5LZXlNYXRlcmlhbCwgd2VwLT5LZXlMZW5ndGgpOwotCi0JcHNlY3VyaXR5cHJpdi0+ZG90MTFEZWZLZXlsZW5ba2V5aWRdID0gd2VwLT5LZXlMZW5ndGg7Ci0KLQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lLZXlJbmRleCA9IGtleWlkOwotCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKLQkJICgicnR3X3NldF84MDJfMTFfYWRkX3dlcDIzYTpzZWN1cml0eSBrZXkgbWF0ZXJpYWwgOiAleCAleCAleCAleCAiCi0JCSAgIiV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4XG4iLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzBdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzFdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzJdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzNdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzRdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzVdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzZdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzddLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzhdLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzldLAotCQkgIHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzEwXSwKLQkJICBwc2VjdXJpdHlwcml2LT5kb3QxMURlZktleVtrZXlpZF0uc2tleVsxMV0sCi0JCSAgcHNlY3VyaXR5cHJpdi0+ZG90MTFEZWZLZXlba2V5aWRdLnNrZXlbMTJdKSk7Ci0KLQlyZXMgPSBydHdfc2V0X2tleTIzYShwYWRhcHRlciwgcHNlY3VyaXR5cHJpdiwga2V5aWQsIDEpOwotCi0JaWYgKHJlcyA9PSBfRkFJTCkKLQkJcmV0ID0gZmFsc2U7Ci1leGl0OgotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcmVzOwogfQogCiAvKgpAQCAtNTM5LDcgKzM2NCw3IEBACiB1MTYgcnR3X2dldF9jdXJfbWF4X3JhdGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpID0gMDsKLQl1OCAqcDsKKwljb25zdCB1OCAqcDsKIAl1MTYgcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CkBAIC01NTAsMTYgKzM3NSwxNiBAQAogCXU4IHJmX3R5cGUgPSAwOwogCXU4IGJ3XzQwTUh6ID0gMCwgc2hvcnRfR0lfMjAgPSAwLCBzaG9ydF9HSV80MCA9IDA7CiAJdTE2IG1jc19yYXRlID0gMDsKLQl1MzIgaHRfaWVsZW4gPSAwOwogCiAJaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgJiYKIAkgICAgIWNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkpCiAJCXJldHVybiAwOwogCiAJaWYgKHBtbG1lZXh0LT5jdXJfd2lyZWxlc3NfbW9kZSAmIChXSVJFTEVTU18xMV8yNE58V0lSRUxFU1NfMTFfNU4pKSB7Ci0JCXAgPSBydHdfZ2V0X2llMjNhKCZwY3VyX2Jzcy0+SUVzWzEyXSwgX0hUX0NBUEFCSUxJVFlfSUVfLAotCQkJICAgICAgICZodF9pZWxlbiwgcGN1cl9ic3MtPklFTGVuZ3RoIC0gMTIpOwotCQlpZiAocCAmJiBodF9pZWxlbiA+IDApIHsKKwkJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwKKwkJCQkgICAgICZwY3VyX2Jzcy0+SUVzWzEyXSwKKwkJCQkgICAgIHBjdXJfYnNzLT5JRUxlbmd0aCAtIDEyKTsKKwkJaWYgKHAgJiYgcFsxXSA+IDApIHsKIAkJCXBodF9jYXBpZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKShwICsgMik7CiAKIAkJCW1lbWNweSgmbWNzX3JhdGUsICZwaHRfY2FwaWUtPm1jcywgMik7CkBAIC01NjksNyArMzk0LDcgQEAKIAkJCS8qIGN1cl9id21vZCBpcyB1cGRhdGVkIGJ5IGJlYWNvbiwgcG1sbWVpbmZvIGlzCiAJCQkgICB1cGRhdGVkIGJ5IGFzc29jaWF0aW9uIHJlc3BvbnNlICovCiAJCQlid180ME1IeiA9IChwbWxtZWV4dC0+Y3VyX2J3bW9kZSAmJgotCQkJCSAgICAoSFRfSU5GT19IVF9QQVJBTV9SRUNfVFJBTlNfQ0hOTF9XSURUSCAmCisJCQkJICAgIChJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlkgJgogCQkJCSAgICAgcG1sbWVpbmZvLT5IVF9pbmZvLmluZm9zWzBdKSkgPyAxOjA7CiAKIAkJCS8qIHNob3J0X0dJID0gKHBodF9jYXBpZS0+Y2FwX2luZm8gJiAoSUVFRTgwMjExX0hUX0NBUApAQCAtNTc3LDggKzQwMiw3IEBACiAJCQlzaG9ydF9HSV8yMCA9IChwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8mSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApID8gMTowOwogCQkJc2hvcnRfR0lfNDAgPSAocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfY2Fwc19pbmZvJklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/IDE6MDsKIAotCQkJcnR3MjNhX2hhbF9nZXRfaHdyZWcoYWRhcHRlciwgSFdfVkFSX1JGX1RZUEUsCi0JCQkJCSAgKHU4ICopKCZyZl90eXBlKSk7CisJCQlyZl90eXBlID0gcnRsODcyM2FfZ2V0X3JmX3R5cGUoYWRhcHRlcik7CiAJCQltYXhfcmF0ZSA9IHJ0d19tY3NfcmF0ZTIzYShyZl90eXBlLCBid180ME1IeiAmCiAJCQkJCQlwcmVnaXN0cnlwcml2LT5jYnc0MF9lbmFibGUsCiAJCQkJCQlzaG9ydF9HSV8yMCwgc2hvcnRfR0lfNDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2xlZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19sZWQuYwppbmRleCA2ODUzMmEzLi5lMjFhNDJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19sZWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X2xlZC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkJaWYgKHBMZWQtPkJsaW5rVGltZXMgPT0gMCkKIAkJCWJTdG9wQmxpbmtpbmcgPSB0cnVlOwogCQlpZiAoYlN0b3BCbGlua2luZykgewotCQkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKSB7CisJCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CiAJCQkJcExlZC0+YkxlZExpbmtCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwogCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IExFRF9CTElOS19OT1JNQUw7CiAJCQkJaWYgKHBMZWQtPmJMZWRPbikKQEAgLTIzNCw3ICsyMzQsNyBAQAogCQkJCQlwTGVkLT5CbGlua2luZ0xlZFN0YXRlID0gUlRXX0xFRF9PTjsKIAkJCQlkZWxheSA9IExFRF9CTElOS19MSU5LX0lOVEVSVkFMX0FMUEhBOwogCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKLQkJCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IGZhbHNlKSB7CisJCQl9IGVsc2UgewogCQkJCXBMZWQtPmJMZWROb0xpbmtCbGlua0luUHJvZ3Jlc3MgPSB0cnVlOwogCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IExFRF9CTElOS19TTE9XTFk7CiAJCQkJaWYgKHBMZWQtPmJMZWRPbikKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQlpZiAocExlZC0+QmxpbmtUaW1lcyA9PSAwKQogCQkJYlN0b3BCbGlua2luZyA9IHRydWU7CiAJCWlmIChiU3RvcEJsaW5raW5nKSB7Ci0JCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpIHsKKwkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKIAkJCQlwTGVkLT5iTGVkTGlua0JsaW5rSW5Qcm9ncmVzcyA9IHRydWU7CiAJCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gTEVEX0JMSU5LX05PUk1BTDsKIAkJCQlpZiAocExlZC0+YkxlZE9uKQpAQCAtMjY3LDggKzI2Nyw3IEBACiAJCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwogCQkJCWRlbGF5ID0gTEVEX0JMSU5LX0xJTktfSU5URVJWQUxfQUxQSEE7CiAJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzEyX2xlZF9jXywgX2Rydl9pbmZvXywgKCJDdXJyTGVkU3RhdGUgJWRcbiIsIHBMZWQtPkN1cnJMZWRTdGF0ZSkpOwotCQkJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwKLQkJCQkJCSBfRldfTElOS0VEKSA9PSBmYWxzZSkgeworCQkJfSBlbHNlIHsKIAkJCQlwTGVkLT5iTGVkTm9MaW5rQmxpbmtJblByb2dyZXNzID0gdHJ1ZTsKIAkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBMRURfQkxJTktfU0xPV0xZOwogCQkJCWlmIChwTGVkLT5iTGVkT24pCkBAIC0zNTQsNyArMzUzLDcgQEAKIAkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MTJfbGVkX2NfLCBfZHJ2X2luZm9fLAogCQkJCQkgKCJzdG9wIHNjYW4gYmxpbmsgQ3VyckxlZFN0YXRlICVkXG4iLAogCQkJCQkgcExlZC0+Q3VyckxlZFN0YXRlKSk7Ci0JCQl9IGVsc2UgaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKKwkJCX0gZWxzZSB7CiAJCQkJcExlZC0+Q3VyckxlZFN0YXRlID0gUlRXX0xFRF9PRkY7CiAJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwogCQkJCVN3TGVkT2ZmMjNhKHBhZGFwdGVyLCBwTGVkKTsKQEAgLTM5MCw3ICszODksNyBAQAogCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sCiAJCQkJCSAoInN0b3AgQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKIAotCQkJfSBlbHNlIGlmICghY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CisJCQl9IGVsc2UgewogCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwogCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKIAkJCQlTd0xlZE9mZjIzYShwYWRhcHRlciwgcExlZCk7CkBAIC00NTAsMTcgKzQ0OSwxNCBAQAogCQkJCXsKIAkJCQkJU3dMZWRPZmYyM2EocGFkYXB0ZXIsIHBMZWQpOwogCQkJCX0KLQkJCQllbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQkJCQl7CisJCQkJZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CiAJCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT047CiAJCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwogCQkJCQlpZiAoIXBMZWQtPmJMZWRPbikKIAkJCQkJCVN3TGVkT24yM2EocGFkYXB0ZXIsIHBMZWQpOwogCiAJCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IGZhbHNlKQotCQkJCXsKKwkJCQl9IGVsc2UgewogCQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKIAkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwogCQkJCQlpZiAocExlZC0+YkxlZE9uKQpAQCAtNDk5LDkgKzQ5NSw4IEBACiAJCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSAhPSByZl9vbikKIAkJCQl7CiAJCQkJCVN3TGVkT2ZmMjNhKHBhZGFwdGVyLCBwTGVkKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpCi0JCQkJeworCQkJCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsCisJCQkJCQkJIF9GV19MSU5LRUQpKSB7CiAJCQkJCXBMZWQtPkN1cnJMZWRTdGF0ZSA9IFJUV19MRURfT047CiAJCQkJCXBMZWQtPkJsaW5raW5nTGVkU3RhdGUgPSBSVFdfTEVEX09OOwogCkBAIC01MDksOSArNTA0LDcgQEAKIAkJCQkJCVN3TGVkT24yM2EocGFkYXB0ZXIsIHBMZWQpOwogCiAJCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxMl9sZWRfY18sIF9kcnZfaW5mb18sICgiQ3VyckxlZFN0YXRlICVkXG4iLCBwTGVkLT5DdXJyTGVkU3RhdGUpKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IGZhbHNlKQotCQkJCXsKKwkJCQl9IGVsc2UgewogCQkJCQlwTGVkLT5DdXJyTGVkU3RhdGUgPSBSVFdfTEVEX09GRjsKIAkJCQkJcExlZC0+QmxpbmtpbmdMZWRTdGF0ZSA9IFJUV19MRURfT0ZGOwogCkBAIC05MTQsOCArOTA3LDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTEVEX0NUTF9TSVRFX1NVUlZFWToKLQkJCSBpZiAoKHBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uYkJ1c3lUcmFmZmljKSAmJgotCQkJICAgICAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpKQorCQkJIGlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYyAmJgorCQkJICAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpCiAJCQkJOwogCQkJIGVsc2UgaWYgKHBMZWQtPmJMZWRTY2FuQmxpbmtJblByb2dyZXNzID09IGZhbHNlKSB7CiAJCQkJaWYgKElTX0xFRF9XUFNfQkxJTktJTkcocExlZCkpCkBAIC0xMTE4LDggKzExMTEsOCBAQAogCQkgYnJlYWs7CiAJY2FzZSBMRURfQ1RMX1RYOgogCWNhc2UgTEVEX0NUTF9SWDoKLQkJaWYgKChwTGVkLT5iTGVkQmxpbmtJblByb2dyZXNzID09IGZhbHNlKSAmJgotCQkgICAgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKSkgeworCQlpZiAocExlZC0+YkxlZEJsaW5rSW5Qcm9ncmVzcyA9PSBmYWxzZSAmJgorCQkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CiAJCQlpZiAocExlZC0+Q3VyckxlZFN0YXRlID09IExFRF9CTElOS19TQ0FOIHx8CiAJCQkgICAgSVNfTEVEX1dQU19CTElOS0lORyhwTGVkKSkgewogCQkJCXJldHVybjsKQEAgLTEyNjEsOCArMTI1NCw4IEBACiAKIAkJY2FzZSBMRURfQ1RMX1RYOgogCQljYXNlIExFRF9DVExfUlg6Ci0JCQlpZiAoKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPT0gZmFsc2UpICYmCi0JCQkgICAgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKSkgeworCQkJaWYgKHBMZWQtPmJMZWRCbGlua0luUHJvZ3Jlc3MgPT0gZmFsc2UgJiYKKwkJCSAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKIAkJCQlpZiAocExlZC0+Q3VyckxlZFN0YXRlID09IExFRF9CTElOS19TQ0FOIHx8CiAJCQkJICAgIElTX0xFRF9XUFNfQkxJTktJTkcocExlZCkpIHsKIAkJCQkJcmV0dXJuOwpAQCAtMTQ3Nyw4ICsxNDcwLDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTEVEX0NUTF9TSVRFX1NVUlZFWToKLQkJCWlmICgocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMpICYmCi0JCQkgICAgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKSkKKwkJCWlmIChwbWxtZXByaXYtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYyAmJgorCQkJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkKIAkJCQk7CiAJCQllbHNlIGlmIChwTGVkLT5iTGVkU2NhbkJsaW5rSW5Qcm9ncmVzcyA9PSBmYWxzZSkgewogCQkJCWlmIChJU19MRURfV1BTX0JMSU5LSU5HKHBMZWQpKQpAQCAtMTcxNCw3ICsxNzA3LDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTEVEX0NUTF9TSVRFX1NVUlZFWToKLQkJCWlmICgocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMpICYmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkpCisJCQlpZiAocG1sbWVwcml2LT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMgJiYKKwkJCSAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpCiAJCQkJOwogCQkJZWxzZSBpZiAocExlZC0+YkxlZFNjYW5CbGlua0luUHJvZ3Jlc3MgPT0gZmFsc2UpCiAJCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X21sbWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfbWxtZS5jCmluZGV4IDZjZWU3ODcuLjcxNzAyNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfbWxtZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfbWxtZS5jCkBAIC0yNSw4ICsyNSw3IEBACiAjaW5jbHVkZSA8d2lmaS5oPgogI2luY2x1ZGUgPHdsYW5fYnNzZGVmLmg+CiAjaW5jbHVkZSA8cnR3X2lvY3RsX3NldC5oPgotCi1leHRlcm4gdTggcnR3X2RvX2pvaW4yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOworI2luY2x1ZGUgPHJ0d19zcmVzZXQuaD4KIAogc3RhdGljIHZvaWQgcnR3X2luaXRfbWxtZV90aW1lcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewpAQCAtNDUsNyArNDQsNyBAQAogCQkgICAgcnR3X3NldF9zY2FuX2RlbnlfdGltZXJfaGRsLCAodW5zaWduZWQgbG9uZylwYWRhcHRlcik7CiB9CiAKLWludCBfcnR3X2luaXRfbWxtZV9wcml2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitpbnQgcnR3X2luaXRfbWxtZV9wcml2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAlpbnQgcmVzID0gX1NVQ0NFU1M7CkBAIC01MywxNiArNTIsMTYgQEAKIAlwbWxtZXByaXYtPm5pY19oZGwgPSBwYWRhcHRlcjsKIAogCXBtbG1lcHJpdi0+Zndfc3RhdGUgPSAwOwotCXBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yay5JbmZyYXN0cnVjdHVyZU1vZGUgPSBOZGlzODAyXzExQXV0b1Vua25vd247Ci0JcG1sbWVwcml2LT5zY2FuX21vZGU9U0NBTl9BQ1RJVkU7LyogIDE6IGFjdGl2ZSwgMDogcGFzaXZlLiBNYXliZSBzb21lZGF5IHdlIHNob3VsZCByZW5hbWUgdGhpcyB2YXJhYmxlIHRvICJhY3RpdmVfbW9kZSIgKEplZmYpICovCisJcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLmlmbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCS8qICAxOiBhY3RpdmUsIDA6IHBhc2l2ZS4gTWF5YmUgc29tZWRheSB3ZSBzaG91bGQgcmVuYW1lIHRoaXMKKwkgICAgdmFyYWJsZSB0byAiYWN0aXZlX21vZGUiIChKZWZmKSAqLworCXBtbG1lcHJpdi0+c2Nhbl9tb2RlID0gU0NBTl9BQ1RJVkU7CiAKIAlzcGluX2xvY2tfaW5pdCgmcG1sbWVwcml2LT5sb2NrKTsKIAlfcnR3X2luaXRfcXVldWUyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSk7CiAKIAltZW1zZXQoJnBtbG1lcHJpdi0+YXNzb2Nfc3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSk7CiAKLQkvKiBhbGxvY2F0ZSBETUEtYWJsZS9Ob24tUGFnZSBtZW1vcnkgZm9yIGNtZF9idWYgYW5kIHJzcF9idWYgKi8KLQogCXJ0d19jbGVhcl9zY2FuX2RlbnkocGFkYXB0ZXIpOwogCiAJcnR3X2luaXRfbWxtZV90aW1lcihwYWRhcHRlcik7CkBAIC03MiwxMSArNzEsMTAgQEAKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKIHN0YXRpYyB2b2lkIHJ0d19mcmVlX21sbWVfaWVfZGF0YSh1OCAqKnBwaWUsIHUzMiAqcGxlbikKIHsKLQlpZigqcHBpZSkKLQl7CisJaWYgKCpwcGllKSB7CiAJCWtmcmVlKCpwcGllKTsKIAkJKnBsZW4gPSAwOwotCQkqcHBpZT1OVUxMOworCQkqcHBpZSA9IE5VTEw7CiAJfQogfQogI2VuZGlmCkBAIC04NiwzNyArODQsNTIgQEAKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKIAlrZnJlZShwbWxtZXByaXYtPmFzc29jX3JlcSk7CiAJa2ZyZWUocG1sbWVwcml2LT5hc3NvY19yc3ApOwotCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT53cHNfYmVhY29uX2llLCAmcG1sbWVwcml2LT53cHNfYmVhY29uX2llX2xlbik7Ci0JcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWUsICZwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWVfbGVuKTsKLQlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+d3BzX3Byb2JlX3Jlc3BfaWUsICZwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llX2xlbik7Ci0JcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPndwc19hc3NvY19yZXNwX2llLCAmcG1sbWVwcml2LT53cHNfYXNzb2NfcmVzcF9pZV9sZW4pOworCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT53cHNfYmVhY29uX2llLAorCQkJICAgICAgJnBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZV9sZW4pOworCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT53cHNfcHJvYmVfcmVxX2llLAorCQkJICAgICAgJnBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZV9sZW4pOworCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZSwKKwkJCSAgICAgICZwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llX2xlbik7CisJcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPndwc19hc3NvY19yZXNwX2llLAorCQkJICAgICAgJnBtbG1lcHJpdi0+d3BzX2Fzc29jX3Jlc3BfaWVfbGVuKTsKIAotCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT5wMnBfYmVhY29uX2llLCAmcG1sbWVwcml2LT5wMnBfYmVhY29uX2llX2xlbik7Ci0JcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWUsICZwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWVfbGVuKTsKLQlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWUsICZwbWxtZXByaXYtPnAycF9wcm9iZV9yZXNwX2llX2xlbik7Ci0JcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPnAycF9nb19wcm9iZV9yZXNwX2llLCAmcG1sbWVwcml2LT5wMnBfZ29fcHJvYmVfcmVzcF9pZV9sZW4pOwotCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT5wMnBfYXNzb2NfcmVxX2llLCAmcG1sbWVwcml2LT5wMnBfYXNzb2NfcmVxX2llX2xlbik7CisJcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPnAycF9iZWFjb25faWUsCisJCQkgICAgICAmcG1sbWVwcml2LT5wMnBfYmVhY29uX2llX2xlbik7CisJcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWUsCisJCQkgICAgICAmcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVxX2llX2xlbik7CisJcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPnAycF9wcm9iZV9yZXNwX2llLAorCQkJICAgICAgJnBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWVfbGVuKTsKKwlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+cDJwX2dvX3Byb2JlX3Jlc3BfaWUsCisJCQkgICAgICAmcG1sbWVwcml2LT5wMnBfZ29fcHJvYmVfcmVzcF9pZV9sZW4pOworCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT5wMnBfYXNzb2NfcmVxX2llLAorCQkJICAgICAgJnBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZV9sZW4pOwogCi0JcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPndmZF9iZWFjb25faWUsICZwbWxtZXByaXYtPndmZF9iZWFjb25faWVfbGVuKTsKLQlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZSwgJnBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZV9sZW4pOwotCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT53ZmRfcHJvYmVfcmVzcF9pZSwgJnBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWVfbGVuKTsKLQlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+d2ZkX2dvX3Byb2JlX3Jlc3BfaWUsICZwbWxtZXByaXYtPndmZF9nb19wcm9iZV9yZXNwX2llX2xlbik7Ci0JcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPndmZF9hc3NvY19yZXFfaWUsICZwbWxtZXByaXYtPndmZF9hc3NvY19yZXFfaWVfbGVuKTsKKwlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+d2ZkX2JlYWNvbl9pZSwKKwkJCSAgICAgICZwbWxtZXByaXYtPndmZF9iZWFjb25faWVfbGVuKTsKKwlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZSwKKwkJCSAgICAgICZwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWVfbGVuKTsKKwlydHdfZnJlZV9tbG1lX2llX2RhdGEoJnBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWUsCisJCQkgICAgICAmcG1sbWVwcml2LT53ZmRfcHJvYmVfcmVzcF9pZV9sZW4pOworCXJ0d19mcmVlX21sbWVfaWVfZGF0YSgmcG1sbWVwcml2LT53ZmRfZ29fcHJvYmVfcmVzcF9pZSwKKwkJCSAgICAgICZwbWxtZXByaXYtPndmZF9nb19wcm9iZV9yZXNwX2llX2xlbik7CisJcnR3X2ZyZWVfbWxtZV9pZV9kYXRhKCZwbWxtZXByaXYtPndmZF9hc3NvY19yZXFfaWUsCisJCQkgICAgICAmcG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llX2xlbik7CiAjZW5kaWYKIH0KIAotdm9pZCBfcnR3X2ZyZWVfbWxtZV9wcml2MjNhKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdikKK3ZvaWQgcnR3X2ZyZWVfbWxtZV9wcml2MjNhKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdikKIHsKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLAorCQkgKCJydHdfZnJlZV9tbG1lX3ByaXYyM2FcbiIpKTsKIAogCXJ0dzIzYV9mcmVlX21sbWVfcHJpdl9pZV9kYXRhKHBtbG1lcHJpdik7Ci0KIH0KIAotc3RydWN0IHdsYW5fbmV0d29yayAqcnR3X2FsbG9jX25ldHdvcmsoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2KQorc3RydWN0IHdsYW5fbmV0d29yayAqcnR3X2FsbG9jX25ldHdvcmsoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2LCBpbnQgZ2ZwKQogewogCXN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrOwogCi0JcG5ldHdvcmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xhbl9uZXR3b3JrKSwgR0ZQX0FUT01JQyk7CisJcG5ldHdvcmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xhbl9uZXR3b3JrKSwgZ2ZwKTsKIAlpZiAocG5ldHdvcmspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnBuZXR3b3JrLT5saXN0KTsKIAkJcG5ldHdvcmstPm5ldHdvcmtfdHlwZSA9IDA7CkBAIC0xMjksNDggKzE0MiwyNyBAQAogCXJldHVybiBwbmV0d29yazsKIH0KIAotdm9pZCBfcnR3X2ZyZWVfbmV0d29yazIzYShzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsCi0JCSAgICAgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yaywgdTggaXNmcmVlYWxsKQorc3RhdGljIHZvaWQgX3J0d19mcmVlX25ldHdvcmsyM2Eoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2LAorCQkJCSBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yaykKIHsKLQl1MzIgbGlmZXRpbWUgPSBTQ0FOUVVFVUVfTElGRVRJTUU7Ci0KIAlpZiAoIXBuZXR3b3JrKQogCQlyZXR1cm47CiAKIAlpZiAocG5ldHdvcmstPmZpeGVkID09IHRydWUpCiAJCXJldHVybjsKIAotCWlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSA9PSB0cnVlKSB8fAotCSAgICAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpID09IHRydWUpKQotCQlsaWZldGltZSA9IDE7Ci0KLQlsaXN0X2RlbF9pbml0KCZwbmV0d29yay0+bGlzdCk7Ci0KLQlrZnJlZShwbmV0d29yayk7Ci19Ci0KLXZvaWQgX3J0d19mcmVlX25ldHdvcmsyM2Ffbm9sb2NrMjNhKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiwKLQkJCSAgICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQotewotCi0JaWYgKHBuZXR3b3JrID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChwbmV0d29yay0+Zml4ZWQgPT0gdHJ1ZSkKLQkJcmV0dXJuOwotCiAJbGlzdF9kZWxfaW5pdCgmcG5ldHdvcmstPmxpc3QpOwogCiAJa2ZyZWUocG5ldHdvcmspOwogfQogCiAvKgotCXJldHVybiB0aGUgd2xhbl9uZXR3b3JrIHdpdGggdGhlIG1hdGNoaW5nIGFkZHIKKyByZXR1cm4gdGhlIHdsYW5fbmV0d29yayB3aXRoIHRoZSBtYXRjaGluZyBhZGRyCiAKLQlTaGFsbCBiZSBjYWxsZSB1bmRlciBhdG9taWMgY29udGV4dC4uLiB0byBhdm9pZCBwb3NzaWJsZSByYWNpbmcgY29uZGl0aW9uLi4uCisgU2hhbGwgYmUgY2FsbGUgdW5kZXIgYXRvbWljIGNvbnRleHQuLi4gdG8gYXZvaWQgcG9zc2libGUgcmFjaW5nIGNvbmRpdGlvbi4uLgogKi8KIHN0cnVjdCB3bGFuX25ldHdvcmsgKgotX3J0d19maW5kX25ldHdvcmsyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqc2Nhbm5lZF9xdWV1ZSwgdTggKmFkZHIpCitydHdfZmluZF9uZXR3b3JrMjNhKHN0cnVjdCBydHdfcXVldWUgKnNjYW5uZWRfcXVldWUsIHU4ICphZGRyKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBoZWFkLCAqcGxpc3Q7CiAJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcmsgPSBOVUxMOwpAQCAtMTk0LDcgKzE4Niw3IEBACiAJCXBsaXN0ID0gcGxpc3QtPm5leHQ7CiAgICAgICAgIH0KIAotCWlmKHBsaXN0ID09IHBoZWFkKQorCWlmIChwbGlzdCA9PSBwaGVhZCkKIAkJcG5ldHdvcmsgPSBOVUxMOwogCiAJLyogc3Bpbl91bmxvY2tfYmgoJnNjYW5uZWRfcXVldWUtPmxvY2spOyAqLwpAQCAtMjA0LDExICsxOTYsMTEgQEAKIAlyZXR1cm4gcG5ldHdvcms7CiB9CiAKLXZvaWQgX3J0d19mcmVlX25ldHdvcmsyM2FfcXVldWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggaXNmcmVlYWxsKQordm9pZCBydHdfZnJlZV9uZXR3b3JrX3F1ZXVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcGhlYWQsICpwbGlzdCwgKnB0bXA7CiAJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcms7Ci0Jc3RydWN0IG1sbWVfcHJpdiogcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKKwlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBydHdfcXVldWUgKnNjYW5uZWRfcXVldWUgPSAmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlOwogCiAJc3Bpbl9sb2NrX2JoKCZzY2FubmVkX3F1ZXVlLT5sb2NrKTsKQEAgLTIxOCwyNCArMjEwLDI1IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCBwaGVhZCkgewogCQlwbmV0d29yayA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHdsYW5fbmV0d29yaywgbGlzdCk7CiAKLQkJX3J0d19mcmVlX25ldHdvcmsyM2EocG1sbWVwcml2LHBuZXR3b3JrLCBpc2ZyZWVhbGwpOworCQlfcnR3X2ZyZWVfbmV0d29yazIzYShwbWxtZXByaXYsIHBuZXR3b3JrKTsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmc2Nhbm5lZF9xdWV1ZS0+bG9jayk7Ci0KIH0KIAotaW50IHJ0d19pZl91cDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQl7Ci0KK2ludCBydHdfaWZfdXAyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3sKIAlpbnQgcmVzOwogCi0JaWYocGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkIHx8IHBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkIHx8Ci0JCShjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIF9GV19MSU5LRUQpPT0gZmFsc2UpKSB7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2luZm9fLCAoInJ0d19pZl91cDIzYTpiRHJpdmVyU3RvcHBlZCglZCkgT1IgYlN1cnByaXNlUmVtb3ZlZCglZCkiLCBwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQsIHBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKSk7Ci0JCXJlcz1mYWxzZTsKLQl9Ci0JZWxzZQotCQlyZXM9ICB0cnVlOworCWlmIChwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgfHwgcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgfHwKKwkgICAgIWNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfaW5mb18sCisJCQkgKCJydHdfaWZfdXAyM2E6YkRyaXZlclN0b3BwZWQoJWQpIE9SICIKKwkJCSAgImJTdXJwcmlzZVJlbW92ZWQoJWQpIiwgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLAorCQkJICBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCkpOworCQlyZXMgPSBmYWxzZTsKKwl9IGVsc2UKKwkJcmVzID0gIHRydWU7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMjQ3LDExNSArMjQwLDExNCBAQAogCXBpYnNzWzBdID0gMHgwMjsgIC8qIGluIGFkLWhvYyBtb2RlIGJpdDEgbXVzdCBzZXQgdG8gMSAqLwogCXBpYnNzWzFdID0gMHgxMTsKIAlwaWJzc1syXSA9IDB4ODc7Ci0JcGlic3NbM10gPSAodTgpKGN1cnRpbWUgJiAweGZmKSA7LyogcFswXTsgKi8KLQlwaWJzc1s0XSA9ICh1OCkoKGN1cnRpbWU+PjgpICYgMHhmZikgOy8qIHBbMV07ICovCi0JcGlic3NbNV0gPSAodTgpKChjdXJ0aW1lPj4xNikgJiAweGZmKSA7LyogcFsyXTsgKi8KKwlwaWJzc1szXSA9IGN1cnRpbWUgJiAweGZmOy8qIHBbMF07ICovCisJcGlic3NbNF0gPSAoY3VydGltZSA+PiA4KSAmIDB4ZmY7LyogcFsxXTsgKi8KKwlwaWJzc1s1XSA9IChjdXJ0aW1lID4+IDE2KSAmIDB4ZmY7LyogcFsyXTsgKi8KIAogCXJldHVybjsKIH0KIAotdTggKnJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKHU4ICppZSkKK3ZvaWQgcnR3X3NldF9yb2FtaW5nKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggdG9fcm9hbWluZykKIHsKLQlyZXR1cm4gaWUgKyA4ICsgMjsKKwlpZiAodG9fcm9hbWluZyA9PSAwKQorCQlhZGFwdGVyLT5tbG1lcHJpdi50b19qb2luID0gZmFsc2U7CisJYWRhcHRlci0+bWxtZXByaXYudG9fcm9hbWluZyA9IHRvX3JvYW1pbmc7Cit9CisKK3N0YXRpYyB2b2lkIF9ydHdfcm9hbWluZyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJIHN0cnVjdCB3bGFuX25ldHdvcmsgKnRndF9uZXR3b3JrKQoreworCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CisJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcms7CisJaW50IGRvX2pvaW5fcjsKKworCWlmICh0Z3RfbmV0d29yaykKKwkJcG5ldHdvcmsgPSB0Z3RfbmV0d29yazsKKwllbHNlCisJCXBuZXR3b3JrID0gJnBtbG1lcHJpdi0+Y3VyX25ldHdvcms7CisKKwlpZiAocGFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcgPiAwKSB7CisJCURCR184NzIzQSgicm9hbWluZyBmcm9tICVzKCJNQUNfRk1UIiksIGxlbmd0aDolZFxuIiwKKwkJCSAgcG5ldHdvcmstPm5ldHdvcmsuU3NpZC5zc2lkLAorCQkJICBNQUNfQVJHKHBuZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpLAorCQkJICBwbmV0d29yay0+bmV0d29yay5Tc2lkLnNzaWRfbGVuKTsKKwkJbWVtY3B5KCZwbWxtZXByaXYtPmFzc29jX3NzaWQsICZwbmV0d29yay0+bmV0d29yay5Tc2lkLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSk7CisKKwkJcG1sbWVwcml2LT5hc3NvY19ieV9ic3NpZCA9IGZhbHNlOworCisJCXdoaWxlICgxKSB7CisJCQlkb19qb2luX3IgPSBydHdfZG9fam9pbjIzYShwYWRhcHRlcik7CisJCQlpZiAoZG9fam9pbl9yID09IF9TVUNDRVNTKQorCQkJCWJyZWFrOworCQkJZWxzZSB7CisJCQkJREJHXzg3MjNBKCJyb2FtaW5nIGRvX2pvaW4gcmV0dXJuICVkXG4iLAorCQkJCQkgIGRvX2pvaW5fcik7CisJCQkJcG1sbWVwcml2LT50b19yb2FtaW5nLS07CisKKwkJCQlpZiAocGFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcgPiAwKQorCQkJCQljb250aW51ZTsKKwkJCQllbHNlIHsKKwkJCQkJREJHXzg3MjNBKCIlcyglZCkgLXRvIHJvYW1pbmcgZmFpbCwgIgorCQkJCQkJICAiaW5kaWNhdGVfZGlzY29ubmVjdFxuIiwKKwkJCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQkJcnR3X2luZGljYXRlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgcnR3MjNhX3JvYW1pbmcoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKnRndF9uZXR3b3JrKQoreworCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CisKKwlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CisJX3J0d19yb2FtaW5nKHBhZGFwdGVyLCB0Z3RfbmV0d29yayk7CisJc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Cit9CisKK19fbGUxNiAqcnR3X2dldF9jYXBhYmlsaXR5MjNhX2Zyb21faWUodTggKmllKQoreworCXJldHVybiAoX19sZTE2ICopKGllICsgOCArIDIpOwogfQogCiB1MTYgcnR3X2dldF9jYXBhYmlsaXR5MjNhKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpic3MpCiB7Ci0JdTE2CXZhbDsKKwl1MTYgdmFsOwogCi0JbWVtY3B5KCh1OCAqKSZ2YWwsIHJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKGJzcy0+SUVzKSwgMik7CisJbWVtY3B5KCZ2YWwsIHJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKGJzcy0+SUVzKSwgMik7CiAKIAlyZXR1cm4gbGUxNl90b19jcHUodmFsKTsKIH0KIAotdTggKnJ0d19nZXRfdGltZXN0YW1wZV9mcm9tX2llMjNhKHU4ICppZSkKK19fbGUxNiAqcnR3X2dldF9iZWFjb25faW50ZXJ2YWwyM2FfZnJvbV9pZSh1OCAqaWUpCiB7Ci0JcmV0dXJuIGllICsgMDsKKwlyZXR1cm4gKF9fbGUxNiAqKShpZSArIDgpOwogfQogCi11OCAqcnR3X2dldF9iZWFjb25faW50ZXJ2YWwyM2FfZnJvbV9pZSh1OCAqaWUpCitzdGF0aWMgdm9pZCBydHdfZnJlZV9uZXR3b3JrX25vbG9jayhzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsCisJCQkJICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQogewotCXJldHVybiBpZSArIDg7CisJX3J0d19mcmVlX25ldHdvcmsyM2EocG1sbWVwcml2LCBwbmV0d29yayk7CiB9CiAKLWludAlydHdfaW5pdF9tbG1lX3ByaXYyM2EgKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpLyogc3RydWN0CW1sbWVfcHJpdiAqcG1sbWVwcml2KSAqLwotewotCWludAlyZXM7Ci0KLQlyZXMgPSBfcnR3X2luaXRfbWxtZV9wcml2MjNhKHBhZGFwdGVyKTsvKiAgKHBtbG1lcHJpdik7ICovCi0KLQlyZXR1cm4gcmVzOwotfQotCi12b2lkIHJ0d19mcmVlX21sbWVfcHJpdjIzYSAoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2KQotewotCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywgKCJydHdfZnJlZV9tbG1lX3ByaXYyM2FcbiIpKTsKLQlfcnR3X2ZyZWVfbWxtZV9wcml2MjNhKHBtbG1lcHJpdik7Ci0KLX0KLQotdm9pZCBydHdfZnJlZV9uZXR3b3JrKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiwgc3RydWN0CXdsYW5fbmV0d29yayAqcG5ldHdvcmssIHU4IGlzX2ZyZWVhbGwpOwotdm9pZCBydHdfZnJlZV9uZXR3b3JrKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiwgc3RydWN0CXdsYW5fbmV0d29yayAqcG5ldHdvcmssIHU4IGlzX2ZyZWVhbGwpLyogc3RydWN0CXdsYW5fbmV0d29yayAqcG5ldHdvcmssIF9xdWV1ZQkqZnJlZV9xdWV1ZSkgKi8KLXsKLQotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sCi0JCSAoInJ0d19mcmVlX25ldHdvcmsgPT0+IHNzaWQgPSAlc1xuXG4iICwKLQkJICBwbmV0d29yay0+bmV0d29yay5Tc2lkLnNzaWQpKTsKLQlfcnR3X2ZyZWVfbmV0d29yazIzYShwbWxtZXByaXYsIHBuZXR3b3JrLCBpc19mcmVlYWxsKTsKLQotfQotCi12b2lkIHJ0d19mcmVlX25ldHdvcmtfbm9sb2NrKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiwgc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcmspOwotdm9pZCBydHdfZnJlZV9uZXR3b3JrX25vbG9jayhzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQotewotCi0JLyogUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywgKCJydHdfZnJlZV9uZXR3b3JrID09PiBzc2lkID0gJXNcblxuIiAsIHBuZXR3b3JrLT5uZXR3b3JrLlNzaWQuc3NpZCkpOyAqLwotCV9ydHdfZnJlZV9uZXR3b3JrMjNhX25vbG9jazIzYShwbWxtZXByaXYsIHBuZXR3b3JrKTsKLQotfQotCi12b2lkIHJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKiBkZXYsIHU4IGlzZnJlZWFsbCkKLXsKLQotCV9ydHdfZnJlZV9uZXR3b3JrMjNhX3F1ZXVlMjNhKGRldiwgaXNmcmVlYWxsKTsKLQotfQotCi0vKgotCXJldHVybiB0aGUgd2xhbl9uZXR3b3JrIHdpdGggdGhlIG1hdGNoaW5nIGFkZHIKLQotCVNoYWxsIGJlIGNhbGxlIHVuZGVyIGF0b21pYyBjb250ZXh0Li4uIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2luZyBjb25kaXRpb24uLi4KLSovCi1zdHJ1Y3QJd2xhbl9uZXR3b3JrICoKLXJ0d19maW5kX25ldHdvcmsyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqc2Nhbm5lZF9xdWV1ZSwgdTggKmFkZHIpCi17Ci0Jc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcms7Ci0KLQlwbmV0d29yayA9IF9ydHdfZmluZF9uZXR3b3JrMjNhKHNjYW5uZWRfcXVldWUsIGFkZHIpOwotCi0JcmV0dXJuIHBuZXR3b3JrOwotfQotCi1pbnQgcnR3X2lzX3NhbWVfaWJzczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQoraW50IHJ0d19pc19zYW1lX2lic3MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcmspCiB7CiAJaW50IHJldCA9IHRydWU7CiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCi0JaWYgKChwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtICE9IF9OT19QUklWQUNZXykgJiYKLQkJICAgIChwbmV0d29yay0+bmV0d29yay5Qcml2YWN5ID09IDApKQotCXsKKwlpZiAocHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSAhPSAwICYmCisJICAgIHBuZXR3b3JrLT5uZXR3b3JrLlByaXZhY3kgPT0gMCkKIAkJcmV0ID0gZmFsc2U7Ci0JfQotCWVsc2UgaWYgKChwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID09IF9OT19QUklWQUNZXykgJiYKLQkJIChwbmV0d29yay0+bmV0d29yay5Qcml2YWN5ID09IDEpKQotCXsKKwllbHNlIGlmIChwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID09IDAgJiYKKwkJIHBuZXR3b3JrLT5uZXR3b3JrLlByaXZhY3kgPT0gMSkKIAkJcmV0ID0gZmFsc2U7Ci0JfQogCWVsc2UKLQl7CiAJCXJldCA9IHRydWU7Ci0JfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM2MywyNCArMzU1LDE5IEBACiBpbmxpbmUgaW50IGlzX3NhbWVfZXNzKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICphLCBzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqYik7CiBpbmxpbmUgaW50IGlzX3NhbWVfZXNzKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICphLCBzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqYikKIHsKLQkvKiBSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLCAoIiglcywlZCkoJXMsJWQpXG4iLCAqLwotCS8qCQlhLT5Tc2lkLlNzaWQsIGEtPlNzaWQuU3NpZExlbmd0aCwgYi0+U3NpZC5Tc2lkLCBiLT5Tc2lkLlNzaWRMZW5ndGgpKTsgKi8KIAlyZXR1cm4gKGEtPlNzaWQuc3NpZF9sZW4gPT0gYi0+U3NpZC5zc2lkX2xlbikgJiYKIAkJIW1lbWNtcChhLT5Tc2lkLnNzaWQsIGItPlNzaWQuc3NpZCwgYS0+U3NpZC5zc2lkX2xlbik7CiB9CiAKIGludCBpc19zYW1lX25ldHdvcmsyM2Eoc3RydWN0IHdsYW5fYnNzaWRfZXggKnNyYywgc3RydWN0IHdsYW5fYnNzaWRfZXggKmRzdCkKIHsKLQkgdTE2IHNfY2FwLCBkX2NhcDsKKwl1MTYgc19jYXAsIGRfY2FwOwogCi0JbWVtY3B5KCh1OCAqKSZzX2NhcCwgcnR3X2dldF9jYXBhYmlsaXR5MjNhX2Zyb21faWUoc3JjLT5JRXMpLCAyKTsKLQltZW1jcHkoKHU4ICopJmRfY2FwLCBydHdfZ2V0X2NhcGFiaWxpdHkyM2FfZnJvbV9pZShkc3QtPklFcyksIDIpOwotCi0Jc19jYXAgPSBsZTE2X3RvX2NwdShzX2NhcCk7Ci0JZF9jYXAgPSBsZTE2X3RvX2NwdShkX2NhcCk7CisJc19jYXAgPSBnZXRfdW5hbGlnbmVkX2xlMTYocnR3X2dldF9jYXBhYmlsaXR5MjNhX2Zyb21faWUoc3JjLT5JRXMpKTsKKwlkX2NhcCA9IGdldF91bmFsaWduZWRfbGUxNihydHdfZ2V0X2NhcGFiaWxpdHkyM2FfZnJvbV9pZShkc3QtPklFcykpOwogCiAJcmV0dXJuICgoc3JjLT5Tc2lkLnNzaWRfbGVuID09IGRzdC0+U3NpZC5zc2lkX2xlbikgJiYKLQkJLyoJKHNyYy0+Q29uZmlndXJhdGlvbi5EU0NvbmZpZyA9PSBkc3QtPkNvbmZpZ3VyYXRpb24uRFNDb25maWcpICYmICovCisJCS8qCShzcmMtPkRTQ29uZmlnID09IGRzdC0+RFNDb25maWcpICYmICovCiAJCWV0aGVyX2FkZHJfZXF1YWwoc3JjLT5NYWNBZGRyZXNzLCBkc3QtPk1hY0FkZHJlc3MpICYmCiAJCSgoIW1lbWNtcChzcmMtPlNzaWQuc3NpZCwgZHN0LT5Tc2lkLnNzaWQsIHNyYy0+U3NpZC5zc2lkX2xlbikpKSAmJgogCQkoKHNfY2FwICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpID09CkBAIC0zODksMTAgKzM3NiwxMCBAQAogCQkgKGRfY2FwICYgV0xBTl9DQVBBQklMSVRZX0VTUykpKTsKIH0KIAotc3RydWN0IHdsYW5fbmV0d29yayAqcnR3X2dldF9vbGRlc3Rfd2xhbl9uZXR3b3JrMjNhKHN0cnVjdCBydHdfcXVldWUgKnNjYW5uZWRfcXVldWUpCitzdHJ1Y3Qgd2xhbl9uZXR3b3JrICoKK3J0d19nZXRfb2xkZXN0X3dsYW5fbmV0d29yazIzYShzdHJ1Y3QgcnR3X3F1ZXVlICpzY2FubmVkX3F1ZXVlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0LCAqcGhlYWQ7Ci0KIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwd2xhbjsKIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpvbGRlc3QgPSBOVUxMOwogCkBAIC00MTIsNyArMzk5LDcgQEAKIH0KIAogdm9pZCB1cGRhdGVfbmV0d29yazIzYShzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqZHN0LCBzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqc3JjLAotCXN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCBib29sIHVwZGF0ZV9pZSkKKwkJICAgICAgIHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGJvb2wgdXBkYXRlX2llKQogewogCXU4IHNzX29yaSA9IGRzdC0+UGh5SW5mby5TaWduYWxTdHJlbmd0aDsKIAl1OCBzcV9vcmkgPSBkc3QtPlBoeUluZm8uU2lnbmFsUXVhbGl0eTsKQEAgLTQyNiwzMCArNDEzLDM1IEBACiAJdTggc3FfZmluYWw7CiAJbG9uZyByc3NpX2ZpbmFsOwogCi0JREJHXzg3MjNBKCIlcyAlcyglcE0sIGNoJXUpIHNzX29yaTolM3UsIHNxX29yaTolM3UsIHJzc2lfb3JpOiUzbGQsIHNzX3NtcDolM3UsIHNxX3NtcDolM3UsIHJzc2lfc21wOiUzbGRcbiIsCisJREJHXzg3MjNBKCIlcyAlcyglcE0sIGNoJXUpIHNzX29yaTolM3UsIHNxX29yaTolM3UsIHJzc2lfb3JpOiUzbGQsICIKKwkJICAic3Nfc21wOiUzdSwgc3Ffc21wOiUzdSwgcnNzaV9zbXA6JTNsZFxuIiwKIAkJICBfX2Z1bmNfXywgc3JjLT5Tc2lkLnNzaWQsIHNyYy0+TWFjQWRkcmVzcywKLQkJICBzcmMtPkNvbmZpZ3VyYXRpb24uRFNDb25maWcsIHNzX29yaSwgc3Ffb3JpLCByc3NpX29yaSwKKwkJICBzcmMtPkRTQ29uZmlnLCBzc19vcmksIHNxX29yaSwgcnNzaV9vcmksCiAJCSAgc3Nfc21wLCBzcV9zbXAsIHJzc2lfc21wCiAJKTsKIAogCS8qIFRoZSBydWxlIGJlbG93IGlzIDEvNSBmb3Igc2FtcGxlIHZhbHVlLCA0LzUgZm9yIGhpc3RvcnkgdmFsdWUgKi8KLQlpZiAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBfRldfTElOS0VEKSAmJiBpc19zYW1lX25ldHdvcmsyM2EoJnBhZGFwdGVyLT5tbG1lcHJpdi5jdXJfbmV0d29yay5uZXR3b3JrLCBzcmMpKSB7CisJaWYgKGNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwgX0ZXX0xJTktFRCkgJiYKKwkgICAgaXNfc2FtZV9uZXR3b3JrMjNhKCZwYWRhcHRlci0+bWxtZXByaXYuY3VyX25ldHdvcmsubmV0d29yaywgc3JjKSkgewogCQkvKiBUYWtlIHRoZSByZWN2cHJpdidzIHZhbHVlIGZvciB0aGUgY29ubmVjdGVkIEFQKi8KIAkJc3NfZmluYWwgPSBwYWRhcHRlci0+cmVjdnByaXYuc2lnbmFsX3N0cmVuZ3RoOwogCQlzcV9maW5hbCA9IHBhZGFwdGVyLT5yZWN2cHJpdi5zaWduYWxfcXVhbDsKLQkJLyogdGhlIHJzc2kgdmFsdWUgaGVyZSBpcyB1bmRlY29yYXRlZCwgYW5kIHdpbGwgYmUgdXNlZCBmb3IgYW50ZW5uYSBkaXZlcnNpdHkgKi8KKwkJLyogdGhlIHJzc2kgdmFsdWUgaGVyZSBpcyB1bmRlY29yYXRlZCwgYW5kIHdpbGwgYmUKKwkJICAgdXNlZCBmb3IgYW50ZW5uYSBkaXZlcnNpdHkgKi8KIAkJaWYgKHNxX3NtcCAhPSAxMDEpIC8qIGZyb20gdGhlIHJpZ2h0IGNoYW5uZWwgKi8KIAkJCXJzc2lfZmluYWwgPSAoc3JjLT5Sc3NpK2RzdC0+UnNzaSo0KS81OwogCQllbHNlCiAJCQlyc3NpX2ZpbmFsID0gcnNzaV9vcmk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWlmIChzcV9zbXAgIT0gMTAxKSB7IC8qIGZyb20gdGhlIHJpZ2h0IGNoYW5uZWwgKi8KLQkJCXNzX2ZpbmFsID0gKCh1MzIpKHNyYy0+UGh5SW5mby5TaWduYWxTdHJlbmd0aCkrKHUzMikoZHN0LT5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoKSo0KS81OwotCQkJc3FfZmluYWwgPSAoKHUzMikoc3JjLT5QaHlJbmZvLlNpZ25hbFF1YWxpdHkpKyh1MzIpKGRzdC0+UGh5SW5mby5TaWduYWxRdWFsaXR5KSo0KS81OwotCQkJcnNzaV9maW5hbCA9IChzcmMtPlJzc2krZHN0LT5Sc3NpKjQpLzU7CisJCQlzc19maW5hbCA9ICgodTMyKXNyYy0+UGh5SW5mby5TaWduYWxTdHJlbmd0aCArCisJCQkJICAgICh1MzIpZHN0LT5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoICogNCkgLyA1OworCQkJc3FfZmluYWwgPSAoKHUzMilzcmMtPlBoeUluZm8uU2lnbmFsUXVhbGl0eSArCisJCQkJICAgICh1MzIpZHN0LT5QaHlJbmZvLlNpZ25hbFF1YWxpdHkgKiA0KSAvIDU7CisJCQlyc3NpX2ZpbmFsID0gc3JjLT5Sc3NpK2RzdC0+UnNzaSAqIDQgLyA1OwogCQl9IGVsc2UgewotCQkJLyogYnNzIGluZm8gbm90IHJlY2V2aW5nIGZyb20gdGhlIHJpZ2h0IGNoYW5uZWwsIHVzZSB0aGUgb3JpZ2luYWwgUlggc2lnbmFsIGluZm9zICovCisJCQkvKiBic3MgaW5mbyBub3QgcmVjZXZpbmcgZnJvbSB0aGUgcmlnaHQgY2hhbm5lbCwgdXNlCisJCQkgICB0aGUgb3JpZ2luYWwgUlggc2lnbmFsIGluZm9zICovCiAJCQlzc19maW5hbCA9IGRzdC0+UGh5SW5mby5TaWduYWxTdHJlbmd0aDsKIAkJCXNxX2ZpbmFsID0gZHN0LT5QaHlJbmZvLlNpZ25hbFF1YWxpdHk7CiAJCQlyc3NpX2ZpbmFsID0gZHN0LT5Sc3NpOwpAQCAtNDU4LDM1ICs0NTAsMzcgQEAKIAl9CiAKIAlpZiAodXBkYXRlX2llKQotCQltZW1jcHkoKHU4ICopZHN0LCAodTggKilzcmMsIGdldF93bGFuX2Jzc2lkX2V4X3N6KHNyYykpOworCQltZW1jcHkoZHN0LCBzcmMsIGdldF93bGFuX2Jzc2lkX2V4X3N6KHNyYykpOwogCiAJZHN0LT5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoID0gc3NfZmluYWw7CiAJZHN0LT5QaHlJbmZvLlNpZ25hbFF1YWxpdHkgPSBzcV9maW5hbDsKIAlkc3QtPlJzc2kgPSByc3NpX2ZpbmFsOwogCi0JREJHXzg3MjNBKCIlcyAlcyglcE0pLCBTaWduYWxTdHJlbmd0aDoldSwgU2lnbmFsUXVhbGl0eToldSwgUmF3UlNTSTolbGRcbiIsCi0JCSAgX19mdW5jX18sIGRzdC0+U3NpZC5zc2lkLCBkc3QtPk1hY0FkZHJlc3MsCisJREJHXzg3MjNBKCIlcyAlcyglcE0pLCBTaWduYWxTdHJlbmd0aDoldSwgU2lnbmFsUXVhbGl0eToldSwgIgorCQkgICJSYXdSU1NJOiVsZFxuIiwgIF9fZnVuY19fLCBkc3QtPlNzaWQuc3NpZCwgZHN0LT5NYWNBZGRyZXNzLAogCQkgIGRzdC0+UGh5SW5mby5TaWduYWxTdHJlbmd0aCwKIAkJICBkc3QtPlBoeUluZm8uU2lnbmFsUXVhbGl0eSwgZHN0LT5Sc3NpKTsKLQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfY3VycmVudF9uZXR3b3JrKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrKQorc3RhdGljIHZvaWQgdXBkYXRlX2N1cnJlbnRfbmV0d29yayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrKQogewotCXN0cnVjdAltbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZhZGFwdGVyLT5tbG1lcHJpdjsKKwlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CiAKLQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKT09IHRydWUpICYmIChpc19zYW1lX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yaywgcG5ldHdvcmspKSkKLQl7Ci0JCS8qIFJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfZXJyXywiU2FtZSBOZXR3b3JrXG4iKTsgKi8KKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpICYmCisJICAgIGlzX3NhbWVfbmV0d29yazIzYSgmcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLCBwbmV0d29yaykpIHsKKwkJaW50IGJjbl9zaXplOworCQl1cGRhdGVfbmV0d29yazIzYSgmcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLAorCQkJCSAgcG5ldHdvcmssYWRhcHRlciwgdHJ1ZSk7CiAKLQkJLyogaWYocG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLklFTGVuZ3RoPD0gcG5ldHdvcmstPklFTGVuZ3RoKSAqLwotCQl7Ci0JCQl1cGRhdGVfbmV0d29yazIzYSgmcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLCBwbmV0d29yayxhZGFwdGVyLCB0cnVlKTsKLQkJCXJ0d191cGRhdGVfcHJvdGVjdGlvbjIzYShhZGFwdGVyLCAocG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLklFcykgKyBzaXplb2YgKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpLAotCQkJCQkJCQkJcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLklFTGVuZ3RoKTsKLQkJfQorCQliY25fc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24pOworCisJCXJ0d191cGRhdGVfcHJvdGVjdGlvbjIzYShhZGFwdGVyLAorCQkJCQkgcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLklFcyArCisJCQkJCSBiY25fc2l6ZSwKKwkJCQkJIHBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yay5JRUxlbmd0aCk7CiAJfQotCiB9CiAKIC8qCkBAIC00OTQsNyArNDg4LDggQEAKIENhbGxlciBtdXN0IGhvbGQgcG1sbWVwcml2LT5sb2NrIGZpcnN0LgogCiAqLwotdm9pZCBydHdfdXBkYXRlX3NjYW5uZWRfbmV0d29yazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICp0YXJnZXQpCit2b2lkIHJ0d191cGRhdGVfc2Nhbm5lZF9uZXR3b3JrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICBzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqdGFyZ2V0KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0LCAqcGhlYWQ7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJmFkYXB0ZXItPm1sbWVwcml2OwpAQCAtNTIyLDcgKzUxNyw3IEBACiAJLyogSWYgd2UgZGlkbid0IGZpbmQgYSBtYXRjaCwgdGhlbiBnZXQgYSBuZXcgbmV0d29yayBzbG90IHRvIGluaXRpYWxpemUKIAkgKiB3aXRoIHRoaXMgYmVhY29uJ3MgaW5mb3JtYXRpb24gKi8KIAlpZiAoIWZvdW5kKSB7Ci0JCXBuZXR3b3JrID0gcnR3X2FsbG9jX25ldHdvcmsocG1sbWVwcml2KTsKKwkJcG5ldHdvcmsgPSBydHdfYWxsb2NfbmV0d29yayhwbWxtZXByaXYsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXBuZXR3b3JrKSB7CiAJCQlpZiAoIW9sZGVzdCkgewogCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sCkBAIC01NjEsMTkgKzU1NiwyMCBAQAogCiAJCS8qIHRhcmdldC5yZXNlcnZlZCA9PSAxLCBtZWFucyB0aGF0IHNjYW5uZWQgbmV0d29yayBpcwogCQkgKiBhIGJjbiBmcmFtZS4gKi8KLQkJaWYgKChwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aD50YXJnZXQtPklFTGVuZ3RoKSAmJgotCQkgICAgKHRhcmdldC0+cmVzZXJ2ZWQgPT0gMSkpCisJCWlmIChwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCA+IHRhcmdldC0+SUVMZW5ndGggJiYKKwkJICAgIHRhcmdldC0+cmVzZXJ2ZWQgPT0gMSkKIAkJCXVwZGF0ZV9pZSA9IGZhbHNlOwogCi0JCXVwZGF0ZV9uZXR3b3JrMjNhKCZwbmV0d29yay0+bmV0d29yaywgdGFyZ2V0LGFkYXB0ZXIsIHVwZGF0ZV9pZSk7CisJCXVwZGF0ZV9uZXR3b3JrMjNhKCZwbmV0d29yay0+bmV0d29yaywgdGFyZ2V0LGFkYXB0ZXIsCisJCQkJICB1cGRhdGVfaWUpOwogCX0KIAogZXhpdDoKIAlzcGluX3VubG9ja19iaCgmcXVldWUtPmxvY2spOwotCiB9CiAKLXZvaWQgcnR3X2FkZF9uZXR3b3JrKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrKQorc3RhdGljIHZvaWQgcnR3X2FkZF9uZXR3b3JrKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICBzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcG5ldHdvcmspCiB7CiAJdXBkYXRlX2N1cnJlbnRfbmV0d29yayhhZGFwdGVyLCBwbmV0d29yayk7CiAJcnR3X3VwZGF0ZV9zY2FubmVkX25ldHdvcmsyM2EoYWRhcHRlciwgcG5ldHdvcmspOwpAQCAtNTg1LDcgKzU4MSw4IEBACiAvKgkJCSAgICgzKSBXTU0gKi8KIC8qCQkJICAgKDQpIEhUICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAoNSkgb3RoZXJzICovCi1pbnQgcnR3X2lzX2Rlc2lyZWRfbmV0d29yayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQorc3RhdGljIGludCBydHdfaXNfZGVzaXJlZF9uZXR3b3JrKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKQogewogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJmFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CkBAIC02MDAsMzEgKzU5NywzMSBAQAogCWRlc2lyZWRfZW5jbW9kZSA9IHBzZWN1cml0eXByaXYtPm5kaXNlbmNyeXB0c3RhdHVzOwogCXByaXZhY3kgPSBwbmV0d29yay0+bmV0d29yay5Qcml2YWN5OwogCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1VOREVSX1dQUykpCi0JewotCQlpZiAocnR3X2dldF93cHNfaWUyM2EocG5ldHdvcmstPm5ldHdvcmsuSUVzK19GSVhFRF9JRV9MRU5HVEhfLCBwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aC1fRklYRURfSUVfTEVOR1RIXywgTlVMTCwgJndwc19pZWxlbikhPSBOVUxMKQotCQl7CisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1VOREVSX1dQUykpIHsKKwkJaWYgKHJ0d19nZXRfd3BzX2llMjNhKHBuZXR3b3JrLT5uZXR3b3JrLklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLAorCQkJCSAgICAgIHBuZXR3b3JrLT5uZXR3b3JrLklFTGVuZ3RoIC0KKwkJCQkgICAgICBfRklYRURfSUVfTEVOR1RIXywgTlVMTCwgJndwc19pZWxlbikpCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJfQogCQllbHNlCi0JCXsKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KLQlpZiAoYWRhcHRlci0+cmVnaXN0cnlwcml2LndpZmlfc3BlYyA9PSAxKSAvKiBmb3IgIGNvcnJlY3QgZmxvdyBvZiA4MDIxWCAgdG8gZG8uLi4uICovCi0JewotCQlpZiAoKGRlc2lyZWRfZW5jbW9kZSA9PSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKSAmJiAocHJpdmFjeSAhPSAwKSkKKwlpZiAoYWRhcHRlci0+cmVnaXN0cnlwcml2LndpZmlfc3BlYyA9PSAxKSB7CisJCS8qIGZvciAgY29ycmVjdCBmbG93IG9mIDgwMjFYICB0byBkby4uLi4gKi8KKwkJaWYgKGRlc2lyZWRfZW5jbW9kZSA9PSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkICYmCisJCSAgICBwcml2YWN5ICE9IDApCiAJICAgICAgICAgICAgYnNlbGVjdGVkID0gZmFsc2U7CiAJfQogCi0JaWYgKChkZXNpcmVkX2VuY21vZGUgIT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkgJiYgKHByaXZhY3kgPT0gMCkpIHsKLQkJREJHXzg3MjNBKCJkZXNpcmVkX2VuY21vZGU6ICVkLCBwcml2YWN5OiAlZFxuIiwgZGVzaXJlZF9lbmNtb2RlLCBwcml2YWN5KTsKKwlpZiAoZGVzaXJlZF9lbmNtb2RlICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQgJiYKKwkgICAgcHJpdmFjeSA9PSAwKSB7CisJCURCR184NzIzQSgiZGVzaXJlZF9lbmNtb2RlOiAlZCwgcHJpdmFjeTogJWRcbiIsCisJCQkgIGRlc2lyZWRfZW5jbW9kZSwgcHJpdmFjeSk7CiAJCWJzZWxlY3RlZCA9IGZhbHNlOwogCX0KIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSkgPT0gdHJ1ZSkKLQl7Ci0JCWlmIChwbmV0d29yay0+bmV0d29yay5JbmZyYXN0cnVjdHVyZU1vZGUgIT0gcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLkluZnJhc3RydWN0dXJlTW9kZSkKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpKSB7CisJCWlmIChwbmV0d29yay0+bmV0d29yay5pZm1vZGUgIT0KKwkJICAgIHBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yay5pZm1vZGUpCiAJCQlic2VsZWN0ZWQgPSBmYWxzZTsKIAl9CiAKQEAgLTYzMiwxNSArNjI5LDE0IEBACiB9CiAKIC8qIFRPRE86IFBlcnJ5IDogRm9yIFBvd2VyIE1hbmFnZW1lbnQgKi8KLXZvaWQgcnR3X2F0aW1kb25lX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlcgkqYWRhcHRlciAsIHU4ICpwYnVmKQordm9pZCBydHdfYXRpbWRvbmVfZXZlbnRfY2FsbGJhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKLQogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfZXJyXywoInJlY2VpdmUgYXRpbWRvbmVfZXZldFxuIikpOwogCiAJcmV0dXJuOwogfQogCi12b2lkIHJ0d19zdXJ2ZXlfZXZlbnRfY2IyM2Eoc3RydWN0IHJ0d19hZGFwdGVyCSphZGFwdGVyLCB1OCAqcGJ1ZikKK3ZvaWQgcnR3X3N1cnZleV9ldmVudF9jYjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXUzMiBsZW47CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrOwpAQCAtNjQ4LDMxICs2NDQsMzYgQEAKIAogCXBuZXR3b3JrID0gKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopcGJ1ZjsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfaW5mb18sKCJydHdfc3VydmV5X2V2ZW50X2NiMjNhLCBzc2lkPSVzXG4iLCAgcG5ldHdvcmstPlNzaWQuc3NpZCkpOworCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfaW5mb18sCisJCSAoInJ0d19zdXJ2ZXlfZXZlbnRfY2IyM2EsIHNzaWQ9JXNcbiIsIHBuZXR3b3JrLT5Tc2lkLnNzaWQpKTsKIAogCWxlbiA9IGdldF93bGFuX2Jzc2lkX2V4X3N6KHBuZXR3b3JrKTsKLQlpZihsZW4gPiAoc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSkpCi0JewotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2Vycl8sKCJcbiAqKioqcnR3X3N1cnZleV9ldmVudF9jYjIzYTogcmV0dXJuIGEgd3JvbmcgYnNzICoqKlxuIikpOworCWlmIChsZW4gPiAoc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSkpIHsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAorCQkJICgiXG4gKioqKnJ0d19zdXJ2ZXlfZXZlbnRfY2IyM2E6IHJldHVybiBhIHdyb25nICIKKwkJCSAgImJzcyAqKipcbiIpKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKIAogCS8qICB1cGRhdGUgSUJTU19uZXR3b3JrICdzIHRpbWVzdGFtcCAqLwotCWlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSkgPT0gdHJ1ZSkKLQl7Ci0JCS8qIFJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sInJ0d19zdXJ2ZXlfZXZlbnRfY2IyM2EgOiBXSUZJX0FESE9DX01BU1RFUl9TVEFURVxuXG4iKTsgKi8KKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSkgeworCQkvKiBSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLAorCQkgICAicnR3X3N1cnZleV9ldmVudF9jYjIzYSA6IFdJRklfQURIT0NfTUFTVEVSX1NUQVRFXG5cbiIpOyAqLwogCQlpZiAoZXRoZXJfYWRkcl9lcXVhbChwbWxtZXByaXYtPmN1cl9uZXR3b3JrLm5ldHdvcmsuTWFjQWRkcmVzcywKIAkJCQkgICAgIHBuZXR3b3JrLT5NYWNBZGRyZXNzKSkgewotCQkJc3RydWN0IHdsYW5fbmV0d29yayogaWJzc193bGFuID0gTlVMTDsKKwkJCXN0cnVjdCB3bGFuX25ldHdvcmsqIGlic3Nfd2xhbjsKIAotCQkJbWVtY3B5KHBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yay5JRXMsIHBuZXR3b3JrLT5JRXMsIDgpOworCQkJbWVtY3B5KHBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yay5JRXMsCisJCQkgICAgICAgcG5ldHdvcmstPklFcywgOCk7CiAJCQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZS5sb2NrKTsKLQkJCWlic3Nfd2xhbiA9IHJ0d19maW5kX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwgIHBuZXR3b3JrLT5NYWNBZGRyZXNzKTsKLQkJCWlmIChpYnNzX3dsYW4pCi0JCQl7Ci0JCQkJbWVtY3B5KGlic3Nfd2xhbi0+bmV0d29yay5JRXMgLCBwbmV0d29yay0+SUVzLCA4KTsKKwkJCWlic3Nfd2xhbiA9IHJ0d19maW5kX25ldHdvcmsyM2EoCisJCQkJJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwKKwkJCQlwbmV0d29yay0+TWFjQWRkcmVzcyk7CisJCQlpZiAoaWJzc193bGFuKSB7CisJCQkJbWVtY3B5KGlic3Nfd2xhbi0+bmV0d29yay5JRXMsCisJCQkJICAgICAgIHBuZXR3b3JrLT5JRXMsIDgpOwogCQkJCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAJCQkJZ290byBleGl0OwogCQkJfQpAQCAtNjgxLDggKzY4Miw3IEBACiAJfQogCiAJLyogIGxvY2sgcG1sbWVwcml2LT5sb2NrIHdoZW4geW91IGFjY2Vzc2luZyBuZXR3b3JrX3EgKi8KLQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORykpID09IGZhbHNlKQotCXsKKwlpZiAoIWNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORykpIHsKIAkgICAgICAgIGlmIChwbmV0d29yay0+U3NpZC5zc2lkWzBdID09IDApCiAJCQlwbmV0d29yay0+U3NpZC5zc2lkX2xlbiA9IDA7CiAKQEAgLTY5NiwxMCArNjk2LDEzIEBACiAJcmV0dXJuOwogfQogCi12b2lkIHJ0d19zdXJ2ZXlkb25lX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlcgkqYWRhcHRlciwgdTggKnBidWYpCit2b2lkCitydHdfc3VydmV5ZG9uZV9ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXN0cnVjdAltbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZhZGFwdGVyLT5tbG1lcHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBkZXZfbmV0d29yazsKKwl1OCAqcGlic3M7CiAKIAlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CiAKQEAgLTcwOSw0NyArNzEyLDYyIEBACiAJCXBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSA9IE5VTEw7CiAJfQogCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfaW5mb18sICgicnR3X3N1cnZleWRvbmVfZXZlbnRfY2FsbGJhY2syM2E6IGZ3X3N0YXRlOiV4XG5cbiIsIGdldF9md3N0YXRlKHBtbG1lcHJpdikpKTsKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKKwkJICgicnR3X3N1cnZleWRvbmVfZXZlbnRfY2FsbGJhY2syM2E6IGZ3X3N0YXRlOiV4XG5cbiIsCisJCSAgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOwogCiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfU1VSVkVZKSkgewogCQlkZWxfdGltZXJfc3luYygmcG1sbWVwcml2LT5zY2FuX3RvX3RpbWVyKTsKIAogCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSk7CiAJfSBlbHNlIHsKLQotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLCAoIm5pYyBzdGF0dXMgPSV4LCBzdXJ2ZXkgZG9uZSBldmVudCBjb21lcyB0b28gbGF0ZSFcbiIsIGdldF9md3N0YXRlKHBtbG1lcHJpdikpKTsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKKwkJCSAoIm5pYyBzdGF0dXMgPSV4LCBzdXJ2ZXkgZG9uZSBldmVudCBjb21lcyB0b28gbGF0ZSFcbiIsCisJCQkgIGdldF9md3N0YXRlKHBtbG1lcHJpdikpKTsKIAl9CiAKIAlydHdfc2V0X3NpZ25hbF9zdGF0X3RpbWVyKCZhZGFwdGVyLT5yZWN2cHJpdik7CiAKIAlpZiAocG1sbWVwcml2LT50b19qb2luID09IHRydWUpIHsKLQkJaWYgKChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSkgPT0gdHJ1ZSkpIHsKLQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gZmFsc2UpIHsKKwkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSkgeworCQkJaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKIAkJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKTsKIAotCQkJCWlmIChydHdfc2VsZWN0X2FuZF9qb2luX2Zyb21fc2Nhbm5lZF9xdWV1ZTIzYShwbWxtZXByaXYpID09IF9TVUNDRVNTKSB7CisJCQkJaWYgKHJ0d19zZWxlY3RfYW5kX2pvaW5fZnJvbV9zY2FubmVkX3F1ZXVlMjNhKAorCQkJCQkgICAgcG1sbWVwcml2KSA9PSBfU1VDQ0VTUykgewogCQkJCQltb2RfdGltZXIoJnBtbG1lcHJpdi0+YXNzb2NfdGltZXIsCiAJCQkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1BWF9KT0lOX1RJTUVPVVQpKTsKIAkJCQl9IGVsc2UgewotCQkJCQlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcGRldl9uZXR3b3JrID0gJmFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5kZXZfbmV0d29yazsKLQkJCQkJdTggKnBpYnNzID0gYWRhcHRlci0+cmVnaXN0cnlwcml2LmRldl9uZXR3b3JrLk1hY0FkZHJlc3M7CisJCQkJCXBkZXZfbmV0d29yayA9ICZhZGFwdGVyLT5yZWdpc3RyeXByaXYuZGV2X25ldHdvcms7CisJCQkJCXBpYnNzID0gYWRhcHRlci0+cmVnaXN0cnlwcml2LmRldl9uZXR3b3JrLk1hY0FkZHJlc3M7CiAKLQkJCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIF9GV19VTkRFUl9TVVJWRVkpOworCQkJCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwKKwkJCQkJCSAgICAgIF9GV19VTkRFUl9TVVJWRVkpOwogCi0JCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sICgic3dpdGNoaW5nIHRvIGFkaG9jIG1hc3RlclxuIikpOworCQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywKKwkJCQkJCSBfZHJ2X2Vycl8sCisJCQkJCQkgKCJzd2l0Y2hpbmcgdG8gYWRob2MgIgorCQkJCQkJICAibWFzdGVyXG4iKSk7CiAKLQkJCQkJbWVtc2V0KCZwZGV2X25ldHdvcmstPlNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkpOwotCQkJCQltZW1jcHkoJnBkZXZfbmV0d29yay0+U3NpZCwgJnBtbG1lcHJpdi0+YXNzb2Nfc3NpZCwgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSk7CisJCQkJCW1lbXNldCgmcGRldl9uZXR3b3JrLT5Tc2lkLCAwLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSk7CisJCQkJCW1lbWNweSgmcGRldl9uZXR3b3JrLT5Tc2lkLAorCQkJCQkgICAgICAgJnBtbG1lcHJpdi0+YXNzb2Nfc3NpZCwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkpOwogCi0JCQkJCXJ0d191cGRhdGVfcmVnaXN0cnlwcml2X2Rldl9uZXR3b3JrMjNhKGFkYXB0ZXIpOworCQkJCQlydHdfdXBkYXRlX3JlZ2lzdHJ5cHJpdl9kZXZfbmV0d29yazIzYSgKKwkJCQkJCWFkYXB0ZXIpOwogCQkJCQlydHdfZ2VuZXJhdGVfcmFuZG9tX2lic3MyM2EocGlic3MpOwogCi0JCQkJCXBtbG1lcHJpdi0+Zndfc3RhdGUgPSBXSUZJX0FESE9DX01BU1RFUl9TVEFURTsKKwkJCQkJcG1sbWVwcml2LT5md19zdGF0ZSA9CisJCQkJCQlXSUZJX0FESE9DX01BU1RFUl9TVEFURTsKIAotCQkJCQlpZiAocnR3X2NyZWF0ZWJzc19jbWQyM2EoYWRhcHRlcikhPSBfU1VDQ0VTUykKLQkJCQkJewotCQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLCAoIkVycm9yID0+cnR3X2NyZWF0ZWJzc19jbWQyM2Egc3RhdHVzIEZBSUxcbiIpKTsKLQkJCQkJfQorCQkJCQlpZiAocnR3X2NyZWF0ZWJzc19jbWQyM2EoYWRhcHRlcikgIT0KKwkJCQkJICAgIF9TVUNDRVNTKQorCQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywKKwkJCQkJCSBfZHJ2X2Vycl8sCisJCQkJCQkgKCJFcnJvciA9PnJ0d19jcmVhdGVic3NfY21kMjNhIgorCQkJCQkJICAiIHN0YXR1cyBGQUlMXG4iKSk7CiAKIAkJCQkJcG1sbWVwcml2LT50b19qb2luID0gZmFsc2U7CiAJCQkJfQpAQCAtNzU4LDI3ICs3NzYsMzIgQEAKIAkJCWludCByZXQ7CiAJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKTsKIAkJCXBtbG1lcHJpdi0+dG9fam9pbiA9IGZhbHNlOwotCQkJcmV0ID0gcnR3X3NlbGVjdF9hbmRfam9pbl9mcm9tX3NjYW5uZWRfcXVldWUyM2EocG1sbWVwcml2KTsKKwkJCXJldCA9IHJ0d19zZWxlY3RfYW5kX2pvaW5fZnJvbV9zY2FubmVkX3F1ZXVlMjNhKAorCQkJCXBtbG1lcHJpdik7CiAJCQlpZiAocmV0ID09IF9TVUNDRVNTKSB7CiAJCQkJdW5zaWduZWQgbG9uZyBlOwogCQkJCWUgPSBtc2Vjc190b19qaWZmaWVzKE1BWF9KT0lOX1RJTUVPVVQpOwogCQkJCW1vZF90aW1lcigmcG1sbWVwcml2LT5hc3NvY190aW1lciwgamlmZmllcyArIGUpOwotCQkJfSBlbHNlIGlmIChyZXQgPT0gMikvKiB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgZm9yIGpvaW4gKi8KLQkJCXsKKwkJCX0gZWxzZSBpZiAocmV0ID09IDIpIHsvKiB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgKi8KIAkJCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkcpOwogCQkJCXJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKGFkYXB0ZXIpOwogCQkJfSBlbHNlIHsKLQkJCQlEQkdfODcyM0EoInRyeV90b19qb2luLCBidXQgc2VsZWN0IHNjYW5uaW5nIHF1ZXVlIGZhaWwsIHRvX3JvYW1pbmc6JWRcbiIsIHJ0d190b19yb2FtaW5nKGFkYXB0ZXIpKTsKLQkJCQlpZiAocnR3X3RvX3JvYW1pbmcoYWRhcHRlcikgIT0gMCkgewotCQkJCQlpZiAoLS1wbWxtZXByaXYtPnRvX3JvYW1pbmcgPT0gMAotCQkJCQkJfHwgX1NVQ0NFU1MgIT0gcnR3X3NpdGVzdXJ2ZXlfY21kMjNhKGFkYXB0ZXIsICZwbWxtZXByaXYtPmFzc29jX3NzaWQsIDEsIE5VTEwsIDApCi0JCQkJCSkgeworCQkJCURCR184NzIzQSgidHJ5X3RvX2pvaW4sIGJ1dCBzZWxlY3Qgc2Nhbm5pbmcgIgorCQkJCQkgICJxdWV1ZSBmYWlsLCB0b19yb2FtaW5nOiVkXG4iLAorCQkJCQkgIGFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcpOworCQkJCWlmIChhZGFwdGVyLT5tbG1lcHJpdi50b19yb2FtaW5nKSB7CisJCQkJCWlmICgtLXBtbG1lcHJpdi0+dG9fcm9hbWluZyA9PSAwIHx8CisJCQkJCSAgICBydHdfc2l0ZXN1cnZleV9jbWQyM2EoCisJCQkJCQkgICAgYWRhcHRlciwKKwkJCQkJCSAgICAmcG1sbWVwcml2LT5hc3NvY19zc2lkLCAxLAorCQkJCQkJICAgIE5VTEwsIDApICE9IF9TVUNDRVNTKSB7CiAJCQkJCQlydHdfc2V0X3JvYW1pbmcoYWRhcHRlciwgMCk7Ci0JCQkJCQlydHdfZnJlZV9hc3NvY19yZXNvdXJjZXMyM2EoYWRhcHRlciwgMSk7Ci0JCQkJCQlydHdfaW5kaWNhdGVfZGlzY29ubmVjdDIzYShhZGFwdGVyKTsKLQkJCQkJfSBlbHNlIHsKKwkJCQkJCXJ0d19mcmVlX2Fzc29jX3Jlc291cmNlczIzYSgKKwkJCQkJCQlhZGFwdGVyLCAxKTsKKwkJCQkJCXJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKAorCQkJCQkJCWFkYXB0ZXIpOworCQkJCQl9IGVsc2UKIAkJCQkJCXBtbG1lcHJpdi0+dG9fam9pbiA9IHRydWU7Ci0JCQkJCX0KIAkJCQl9CiAJCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKTsKIAkJCX0KQEAgLTc4NywyOSArODEwLDE1IEBACiAKIAlzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCQlwMnBfcHNfd2tfY21kMjNhKGFkYXB0ZXIsIFAyUF9QU19TQ0FOX0RPTkUsIDApOwotI2VuZGlmIC8qICBDT05GSUdfODcyM0FVX1AyUCAqLwotCiAJcnR3X29zX3htaXRfc2NoZWR1bGUyM2EoYWRhcHRlcik7CiAKLQlpZihwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuYnNzX2NudCA9PSAwKQotCQlydHdfaGFsX3NyZXNldF9yZXNldDIzYShhZGFwdGVyKTsKKwlpZiAocG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmJzc19jbnQgPT0gMCkKKwkJcnR3X3NyZXNldF9yZXNldChhZGFwdGVyKTsKIAogCXJ0d19jZmc4MDIxMV9zdXJ2ZXlkb25lX2V2ZW50X2NhbGxiYWNrKGFkYXB0ZXIpOwotCiB9CiAKLXZvaWQgcnR3X2R1bW15X2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciAsIHU4ICpwYnVmKQotewotfQotCi12b2lkIHJ0dzIzYV9md2RiZ19ldmVudF9jYWxsYmFjayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgLCB1OCAqcGJ1ZikKLXsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9zY2FucXVldWUoc3RydWN0CW1sbWVfcHJpdiAqcG1sbWVwcml2KQorc3RhdGljIHZvaWQgZnJlZV9zY2FucXVldWUoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2KQogewogCXN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrOwogCXN0cnVjdCBydHdfcXVldWUgKnNjYW5fcXVldWUgPSAmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlOwpAQCAtODI3LDQyICs4MzYsMzggQEAKICAgICAgICAgfQogCiAJc3Bpbl91bmxvY2tfYmgoJnNjYW5fcXVldWUtPmxvY2spOwotCiB9CiAKIC8qCi0qcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhOiB0aGUgY2FsbGVyIGhhcyB0byBsb2NrIHBtbG1lcHJpdi0+bG9jawotKi8KLXZvaWQgcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgaW50IGxvY2tfc2Nhbm5lZF9xdWV1ZSkKKyAqcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhOiB0aGUgY2FsbGVyIGhhcyB0byBsb2NrIHBtbG1lcHJpdi0+bG9jaworICovCit2b2lkIHJ0d19mcmVlX2Fzc29jX3Jlc291cmNlczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIGludCBsb2NrX3NjYW5uZWRfcXVldWUpCiB7Ci0Jc3RydWN0IHdsYW5fbmV0d29yayogcHdsYW4gPSBOVUxMOwotCXN0cnVjdAltbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3QJc3RhX3ByaXYgKnBzdGFwcml2ID0gJmFkYXB0ZXItPnN0YXByaXY7CisJc3RydWN0IHdsYW5fbmV0d29yayogcHdsYW47CisJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJmFkYXB0ZXItPm1sbWVwcml2OworCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmYWRhcHRlci0+c3RhcHJpdjsKIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICp0Z3RfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOworCXN0cnVjdCBzdGFfaW5mbyogcHN0YTsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X25vdGljZV8sICgiK3J0d19mcmVlX2Fzc29jX3Jlc291cmNlczIzYVxuIikpOwotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2luZm9fLCAoInRndF9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3M9Ik1BQ19GTVQiIHNzaWQ9JXNcbiIsCi0JCU1BQ19BUkcodGd0X25ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcyksIHRndF9uZXR3b3JrLT5uZXR3b3JrLlNzaWQuc3NpZCkpOworCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X25vdGljZV8sCisJCSAoIitydHdfZnJlZV9hc3NvY19yZXNvdXJjZXMyM2FcbiIpKTsKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKKwkJICgidGd0X25ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcz0iTUFDX0ZNVCIgc3NpZD0lc1xuIiwKKwkJICBNQUNfQVJHKHRndF9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpLAorCQkgIHRndF9uZXR3b3JrLT5uZXR3b3JrLlNzaWQuc3NpZCkpOwogCi0JaWYoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURXxXSUZJX0FQX1NUQVRFKSkKLQl7Ci0JCXN0cnVjdCBzdGFfaW5mbyogcHN0YTsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURXxXSUZJX0FQX1NUQVRFKSkgeworCQlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKCZhZGFwdGVyLT5zdGFwcml2LAorCQkJCQkgIHRndF9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwogCi0JCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJmFkYXB0ZXItPnN0YXByaXYsIHRndF9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwotCi0JCXsKLQkJCXNwaW5fbG9ja19iaCgmcHN0YXByaXYtPnN0YV9oYXNoX2xvY2spOwotCQkJcnR3X2ZyZWVfc3RhaW5mbzIzYShhZGFwdGVyLCAgcHN0YSk7Ci0JCX0KLQorCQlzcGluX2xvY2tfYmgoJnBzdGFwcml2LT5zdGFfaGFzaF9sb2NrKTsKKwkJcnR3X2ZyZWVfc3RhaW5mbzIzYShhZGFwdGVyLCAgcHN0YSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZwc3RhcHJpdi0+c3RhX2hhc2hfbG9jayk7Ci0KIAl9CiAKLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEV8V0lGSV9BREhPQ19NQVNURVJfU1RBVEV8V0lGSV9BUF9TVEFURSkpCi0JewotCQlzdHJ1Y3Qgc3RhX2luZm8qIHBzdGE7Ci0KKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUgfAorCQkJICBXSUZJX0FESE9DX01BU1RFUl9TVEFURXxXSUZJX0FQX1NUQVRFKSkgewogCQlydHdfZnJlZV9hbGxfc3RhaW5mbzIzYShhZGFwdGVyKTsKIAogCQlwc3RhID0gcnR3X2dldF9iY21jX3N0YWluZm8yM2EoYWRhcHRlcik7CkBAIC04NzMsMjMgKzg3OCwyNSBAQAogCQlydHdfaW5pdF9iY21jX3N0YWluZm8yM2EoYWRhcHRlcik7CiAJfQogCi0JaWYobG9ja19zY2FubmVkX3F1ZXVlKQorCWlmIChsb2NrX3NjYW5uZWRfcXVldWUpCiAJCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwogCi0JcHdsYW4gPSBydHdfZmluZF9uZXR3b3JrMjNhKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUsIHRndF9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwotCWlmKHB3bGFuKQorCXB3bGFuID0gcnR3X2ZpbmRfbmV0d29yazIzYSgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLAorCQkJCSAgICB0Z3RfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKKwlpZiAocHdsYW4pCiAJCXB3bGFuLT5maXhlZCA9IGZhbHNlOwogCWVsc2UKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLCgicnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhIDogcHdsYW49PSBOVUxMXG5cbiIpKTsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAorCQkJICgicnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhIDogcHdsYW49PSBOVUxMXG4iKSk7CiAKLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSAmJiAoYWRhcHRlci0+c3RhcHJpdi5hc29jX3N0YV9jb3VudCA9PSAxKSkKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSAmJgorCSAgICBhZGFwdGVyLT5zdGFwcml2LmFzb2Nfc3RhX2NvdW50ID09IDEpCiAJCXJ0d19mcmVlX25ldHdvcmtfbm9sb2NrKHBtbG1lcHJpdiwgcHdsYW4pOwogCi0JaWYobG9ja19zY2FubmVkX3F1ZXVlKQorCWlmIChsb2NrX3NjYW5uZWRfcXVldWUpCiAJCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAKIAlwbWxtZXByaXYtPmtleV9tYXNrID0gMDsKLQogfQogCiAvKgpAQCAtODk3LDQ2ICs5MDQsNTQgQEAKICovCiB2b2lkIHJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0Jc3RydWN0IG1sbWVfcHJpdgkqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKKwlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCi0JUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywgKCIrcnR3X2luZGljYXRlX2Nvbm5lY3QyM2FcbiIpKTsKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLAorCQkgKCIrcnR3X2luZGljYXRlX2Nvbm5lY3QyM2FcbiIpKTsKIAogCXBtbG1lcHJpdi0+dG9fam9pbiA9IGZhbHNlOwogCi0JaWYoIWNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKKwlpZiAoIWNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKIAkJc2V0X2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKTsKIAogCQlydHdfbGVkX2NvbnRyb2wocGFkYXB0ZXIsIExFRF9DVExfTElOSyk7CiAKLQkJcnR3X29zX2luZGljYXRlX2Nvbm5lY3QyM2EocGFkYXB0ZXIpOworCQlydHdfY2ZnODAyMTFfaW5kaWNhdGVfY29ubmVjdChwYWRhcHRlcik7CisKKwkJbmV0aWZfY2Fycmllcl9vbihwYWRhcHRlci0+cG5ldGRldik7CisKKwkJaWYgKHBhZGFwdGVyLT5waWRbMl0gIT0gMCkKKwkJCWtpbGxfcGlkKGZpbmRfdnBpZChwYWRhcHRlci0+cGlkWzJdKSwgU0lHQUxSTSwgMSk7CiAJfQogCiAJcnR3X3NldF9yb2FtaW5nKHBhZGFwdGVyLCAwKTsKIAogCXJ0d19zZXRfc2Nhbl9kZW55KHBhZGFwdGVyLCAzMDAwKTsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sICgiLXJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhOiBmd19zdGF0ZT0weCUwOHhcbiIsIGdldF9md3N0YXRlKHBtbG1lcHJpdikpKTsKLQorCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sCisJCSAoIi1ydHdfaW5kaWNhdGVfY29ubmVjdDIzYTogZndfc3RhdGU9MHglMDh4XG4iLAorCQkgIGdldF9md3N0YXRlKHBtbG1lcHJpdikpKTsKIH0KIAogLyoKLSpydHdfaW5kaWNhdGVfZGlzY29ubmVjdDIzYTogdGhlIGNhbGxlciBoYXMgdG8gbG9jayBwbWxtZXByaXYtPmxvY2sKLSovCisgKnJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhOiB0aGUgY2FsbGVyIGhhcyB0byBsb2NrIHBtbG1lcHJpdi0+bG9jaworICovCiB2b2lkIHJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0CW1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sICgiK3J0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhXG4iKSk7CisJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKKwkJICgiK3J0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhXG4iKSk7CiAKIAlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkd8V0lGSV9VTkRFUl9XUFMpOwogCiAgICAgICAgIC8qIERCR184NzIzQSgiY2xlYXIgd3BzIHdoZW4gJXNcbiIsIF9fZnVuY19fKTsgKi8KIAotCWlmIChydHdfdG9fcm9hbWluZyhwYWRhcHRlcikgPiAwKQorCWlmIChwYWRhcHRlci0+bWxtZXByaXYudG9fcm9hbWluZyA+IDApCiAJCV9jbHJfZndzdGF0ZV8ocG1sbWVwcml2LCBfRldfTElOS0VEKTsKIAogCWlmIChjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIF9GV19MSU5LRUQpIHx8Ci0JICAgIChydHdfdG9fcm9hbWluZyhwYWRhcHRlcikgPD0gMCkpIHsKKwkgICAgcGFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcgPD0gMCkgewogCQlydHdfb3NfaW5kaWNhdGVfZGlzY29ubmVjdDIzYShwYWRhcHRlcik7CiAKIAkJLyogc2V0IGlwc19kZW55X3RpbWUgdG8gYXZvaWQgZW50ZXIgSVBTIGJlZm9yZSBMUFMgbGVhdmUgKi8KQEAgLTk1MSwxNyArOTY2LDcgQEAKIAogCX0KIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JcDJwX3BzX3drX2NtZDIzYShwYWRhcHRlciwgUDJQX1BTX0RJU0FCTEUsIDEpOwotI2VuZGlmIC8qICBDT05GSUdfODcyM0FVX1AyUCAqLwotCiAJcnR3X2xwc19jdHJsX3drX2NtZDIzYShwYWRhcHRlciwgTFBTX0NUUkxfRElTQ09OTkVDVCwgMSk7Ci0KLX0KLQotaW5saW5lIHZvaWQgcnR3X2luZGljYXRlX3NjYW5fZG9uZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBib29sIGFib3J0ZWQpCi17Ci0JcnR3X29zX2luZGljYXRlX3NjYW5fZG9uZTIzYShwYWRhcHRlciwgYWJvcnRlZCk7CiB9CiAKIHZvaWQgcnR3X3NjYW5fYWJvcnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQpAQCAtOTc0LDk2ICs5NzksMTA1IEBACiAJcG1sbWVleHQtPnNjYW5fYWJvcnQgPSB0cnVlOwogCXdoaWxlIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkgJiYKIAkgICAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnQpIDw9IDIwMCkgewotCiAJCWlmIChhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCB8fCBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKQogCQkJYnJlYWs7CiAKLQkJREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQiZndfc3RhdGUgPSBfRldfVU5ERVJfU1VSVkVZIVxuIiwgRlVOQ19OREVWX0FSRyhhZGFwdGVyLT5wbmV0ZGV2KSk7CisJCURCR184NzIzQSgiJXMoJXMpOiBmd19zdGF0ZSA9IF9GV19VTkRFUl9TVVJWRVkhXG4iLAorCQkJICBfX2Z1bmNfXywgYWRhcHRlci0+cG5ldGRldi0+bmFtZSk7CiAJCW1zbGVlcCgyMCk7CiAJfQogCiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfU1VSVkVZKSkgewogCQlpZiAoIWFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkICYmICFhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKQotCQkJREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQid2FpdGluZyBmb3Igc2Nhbl9hYm9ydCB0aW1lIG91dCFcbiIsIEZVTkNfTkRFVl9BUkcoYWRhcHRlci0+cG5ldGRldikpOwotCQlydHdfaW5kaWNhdGVfc2Nhbl9kb25lMjNhKGFkYXB0ZXIsIHRydWUpOworCQkJREJHXzg3MjNBKCIlcyglcyk6IHdhaXRpbmcgZm9yIHNjYW5fYWJvcnQgdGltZSBvdXQhXG4iLAorCQkJCSAgX19mdW5jX18sIGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOworCQlydHdfY2ZnODAyMTFfaW5kaWNhdGVfc2Nhbl9kb25lKHdkZXZfdG9fcHJpdihhZGFwdGVyLT5ydHdfd2RldiksCisJCQkJCQl0cnVlKTsKIAl9CiAJcG1sbWVleHQtPnNjYW5fYWJvcnQgPSBmYWxzZTsKIH0KIAotc3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqcnR3X2pvaW5ic3NfdXBkYXRlX3N0YWluZm8oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcmspCitzdGF0aWMgc3RydWN0IHN0YV9pbmZvICoKK3J0d19qb2luYnNzX3VwZGF0ZV9zdGFpbmZvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yaykKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKmJtY19zdGEsICpwc3RhID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKmJtY19zdGEsICpwc3RhOwogCXN0cnVjdCByZWN2X3Jlb3JkZXJfY3RybCAqcHJlb3JkZXJfY3RybDsKIAlzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2ID0gJnBhZGFwdGVyLT5zdGFwcml2OwogCiAJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgcG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0JaWYgKHBzdGEgPT0gTlVMTCkgewotCQlwc3RhID0gcnR3X2FsbG9jX3N0YWluZm8yM2EocHN0YXByaXYsIHBuZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwotCX0KKwlpZiAoIXBzdGEpCisJCXBzdGEgPSBydHdfYWxsb2Nfc3RhaW5mbzIzYShwc3RhcHJpdiwKKwkJCQkJICAgIHBuZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MsCisJCQkJCSAgICBHRlBfQVRPTUlDKTsKIAotCWlmIChwc3RhKSAvKiB1cGRhdGUgcHRhcmdldF9zdGEgKi8KLQl7CisJaWYgKHBzdGEpIHsgLyogdXBkYXRlIHB0YXJnZXRfc3RhICovCiAJCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAogCQlwc3RhLT5haWQgID0gcG5ldHdvcmstPmpvaW5fcmVzOwotCQkJcHN0YS0+bWFjX2lkID0gMDsKKwkJcHN0YS0+bWFjX2lkID0gMDsKIAogCQkvKiBzdGEgbW9kZSAqLwotCQlydHdfaGFsX3NldF9vZG1fdmFyMjNhKHBhZGFwdGVyLCBIQUxfT0RNX1NUQV9JTkZPLCBwc3RhLCB0cnVlKTsKKwkJcnRsODcyM2FfU2V0SGFsT0RNVmFyKHBhZGFwdGVyLCBIQUxfT0RNX1NUQV9JTkZPLCBwc3RhLCB0cnVlKTsKIAogCQkvKiBzZWN1cml0eSByZWxhdGVkICovCi0JCWlmIChwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExQXV0aEFsZ3J0aG0gPT0gZG90MTFBdXRoQWxncnRobV84MDIxWCkKLQkJewotCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5iaW5zdGFsbEdycGtleSA9IGZhbHNlOwotCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5idXNldGtpcGtleSA9IGZhbHNlOwotCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5iZ3Jwa2V5X2hhbmRzaGFrZSA9IGZhbHNlOworCQlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMUF1dGhBbGdydGhtID09CisJCSAgICBkb3QxMUF1dGhBbGdydGhtXzgwMjFYKSB7CisJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJpbnN0YWxsR3Jwa2V5ID0gMDsKKwkJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuYnVzZXRraXBrZXkgPSAwOwogCiAJCQlwc3RhLT5pZWVlODAyMXhfYmxvY2tlZCA9IHRydWU7Ci0JCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9IHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobTsKKwkJCXBzdGEtPmRvdDExODAyMVhQcml2YWN5ID0KKwkJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG07CiAKLQkJCW1lbXNldCgodTggKikmcHN0YS0+ZG90MTE4MDIxeF9VbmNzdEtleSwgMCwgc2l6ZW9mICh1bmlvbiBLZXl0eXBlKSk7CisJCQltZW1zZXQoJnBzdGEtPmRvdDExODAyMXhfVW5jc3RLZXksIDAsCisJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBLZXl0eXBlKSk7CiAKLQkJCW1lbXNldCgodTggKikmcHN0YS0+ZG90MTF0a2lwcnhtaWNrZXksIDAsIHNpemVvZiAodW5pb24gS2V5dHlwZSkpOwotCQkJbWVtc2V0KCh1OCAqKSZwc3RhLT5kb3QxMXRraXB0eG1pY2tleSwgMCwgc2l6ZW9mICh1bmlvbiBLZXl0eXBlKSk7CisJCQltZW1zZXQoJnBzdGEtPmRvdDExdGtpcHJ4bWlja2V5LCAwLAorCQkJICAgICAgIHNpemVvZiAodW5pb24gS2V5dHlwZSkpOworCQkJbWVtc2V0KCZwc3RhLT5kb3QxMXRraXB0eG1pY2tleSwgMCwKKwkJCSAgICAgICBzaXplb2YgKHVuaW9uIEtleXR5cGUpKTsKIAotCQkJbWVtc2V0KCh1OCAqKSZwc3RhLT5kb3QxMXR4cG4sIDAsIHNpemVvZiAodW5pb24gcG40OCkpOwotCQkJbWVtc2V0KCh1OCAqKSZwc3RhLT5kb3QxMXJ4cG4sIDAsIHNpemVvZiAodW5pb24gcG40OCkpOworCQkJbWVtc2V0KCZwc3RhLT5kb3QxMXR4cG4sIDAsIHNpemVvZiAodW5pb24gcG40OCkpOworCQkJbWVtc2V0KCZwc3RhLT5kb3QxMXJ4cG4sIDAsIHNpemVvZiAodW5pb24gcG40OCkpOwogCQl9CiAKIAkJLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDEyLzA3LzIxICovCiAJCS8qCVdoZW4gZG9pbmcgdGhlIFdQUywgdGhlIHdwc19pZV9sZW4gd29uJ3QgZXF1YWwgdG8gMCAqLwotCQkvKglBbmQgdGhlIFdpLUZpIGRyaXZlciBzaG91bGRuJ3QgYWxsb3cgdGhlIGRhdGEgcGFja2V0IHRvIGJlIHRyYW1zbWl0dGVkLiAqLwotCQlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi53cHNfaWVfbGVuICE9IDApCi0JCXsKKwkJLyoJQW5kIHRoZSBXaS1GaSBkcml2ZXIgc2hvdWxkbid0IGFsbG93IHRoZSBkYXRhIHBhY2tldAorCQkJdG8gYmUgdHJhbXNtaXR0ZWQuICovCisJCWlmIChwYWRhcHRlci0+c2VjdXJpdHlwcml2Lndwc19pZV9sZW4gIT0gMCkgewogCQkJcHN0YS0+aWVlZTgwMjF4X2Jsb2NrZWQgPSB0cnVlOwogCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi53cHNfaWVfbGVuID0gMDsKIAkJfQogCi0JCS8qIGZvciBBLU1QRFUgUnggcmVvcmRlcmluZyBidWZmZXIgY29udHJvbCBmb3IgYm1jX3N0YSAmIHN0YV9pbmZvICovCi0JCS8qIGlmIEEtTVBEVSBSeCBpcyBlbmFibGVkLCByZXNldGluZyAgcnhfb3JkZXJpbmdfY3RybCB3c3RhcnRfYihpbmRpY2F0ZV9zZXEpIHRvIGRlZmF1bHQgdmFsdWUgPSAweGZmZmYgKi8KKwkJLyogZm9yIEEtTVBEVSBSeCByZW9yZGVyaW5nIGJ1ZmZlciBjb250cm9sIGZvciBibWNfc3RhICYKKwkJICogc3RhX2luZm8gKi8KKwkJLyogaWYgQS1NUERVIFJ4IGlzIGVuYWJsZWQsIHJlc2V0aW5nCisJCSAgIHJ4X29yZGVyaW5nX2N0cmwgd3N0YXJ0X2IoaW5kaWNhdGVfc2VxKSB0byBkZWZhdWx0CisJCSAgIHZhbHVlID0gMHhmZmZmICovCiAJCS8qIHRvZG86IGNoZWNrIGlmIEFQIGNhbiBzZW5kIEEtTVBEVSBwYWNrZXRzICovCi0JCWZvciAoaSA9IDA7IGkgPCAxNiA7IGkrKykKLQkJeworCQlmb3IgKGkgPSAwOyBpIDwgMTYgOyBpKyspIHsKIAkJCS8qIHByZW9yZGVyX2N0cmwgPSAmcHJlY3Zwcml2LT5yZWN2cmVvcmRlcl9jdHJsW2ldOyAqLwogCQkJcHJlb3JkZXJfY3RybCA9ICZwc3RhLT5yZWN2cmVvcmRlcl9jdHJsW2ldOwogCQkJcHJlb3JkZXJfY3RybC0+ZW5hYmxlID0gZmFsc2U7CiAJCQlwcmVvcmRlcl9jdHJsLT5pbmRpY2F0ZV9zZXEgPSAweGZmZmY7CiAJCQlwcmVvcmRlcl9jdHJsLT53ZW5kX2IgPSAweGZmZmY7Ci0JCQlwcmVvcmRlcl9jdHJsLT53c2l6ZV9iID0gNjQ7LyogbWF4X2FtcGR1X3N6OyBleC4gMzIoa2J5dGVzKSAtPiB3c2l6ZV9iID0gMzIgKi8KKwkJCS8qIG1heF9hbXBkdV9zejsgZXguIDMyKGtieXRlcykgLT4gd3NpemVfYiA9IDMyICovCisJCQlwcmVvcmRlcl9jdHJsLT53c2l6ZV9iID0gNjQ7CiAJCX0KIAogCQlibWNfc3RhID0gcnR3X2dldF9iY21jX3N0YWluZm8yM2EocGFkYXB0ZXIpOwotCQlpZiAoYm1jX3N0YSkKLQkJewotCQkJZm9yIChpID0gMDsgaSA8IDE2IDsgaSsrKQotCQkJewotCQkJCS8qIHByZW9yZGVyX2N0cmwgPSAmcHJlY3Zwcml2LT5yZWN2cmVvcmRlcl9jdHJsW2ldOyAqLworCQlpZiAoYm1jX3N0YSkgeworCQkJZm9yIChpID0gMDsgaSA8IDE2IDsgaSsrKSB7CiAJCQkJcHJlb3JkZXJfY3RybCA9ICZibWNfc3RhLT5yZWN2cmVvcmRlcl9jdHJsW2ldOwogCQkJCXByZW9yZGVyX2N0cmwtPmVuYWJsZSA9IGZhbHNlOwogCQkJCXByZW9yZGVyX2N0cmwtPmluZGljYXRlX3NlcSA9IDB4ZmZmZjsKIAkJCQlwcmVvcmRlcl9jdHJsLT53ZW5kX2IgPSAweGZmZmY7Ci0JCQkJcHJlb3JkZXJfY3RybC0+d3NpemVfYiA9IDY0Oy8qIG1heF9hbXBkdV9zejsgZXguIDMyKGtieXRlcykgLT4gd3NpemVfYiA9IDMyICovCisJCQkJLyogbWF4X2FtcGR1X3N6OyBleC4gMzIoa2J5dGVzKSAtPgorCQkJCSAgIHdzaXplX2IgPSAzMiAqLworCQkJCXByZW9yZGVyX2N0cmwtPndzaXplX2IgPSA2NDsKIAkJCX0KIAkJfQogCkBAIC0xMDc3LDgxICsxMDkxLDEwOCBAQAogCiAvKiBwbmV0d29yayA6IHJldHVybnMgZnJvbSBydHcyM2Ffam9pbmJzc19ldmVudF9jYiAqLwogLyogcHRhcmdldF93bGFuOiBmb3VuZCBmcm9tIHNjYW5uZWRfcXVldWUgKi8KLXN0YXRpYyB2b2lkIHJ0d19qb2luYnNzX3VwZGF0ZV9uZXR3b3JrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB3bGFuX25ldHdvcmsgKnB0YXJnZXRfd2xhbiwgc3RydWN0IHdsYW5fbmV0d29yayAgKnBuZXR3b3JrKQorc3RhdGljIHZvaWQKK3J0d19qb2luYnNzX3VwZGF0ZV9uZXR3b3JrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICAgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwdGFyZ2V0X3dsYW4sCisJCQkgICAgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICAqcG5ldHdvcmspCiB7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOworCWludCBiY25fc2l6ZTsKIAogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2luZm9fLCAoIlxuZndfc3RhdGU6JXgsIEJTU0lEOiJNQUNfRk1UIlxuIgotCQksIGdldF9md3N0YXRlKHBtbG1lcHJpdiksIE1BQ19BUkcocG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcykpKTsKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKKwkJICgiXG5md19zdGF0ZToleCwgQlNTSUQ6Ik1BQ19GTVQiXG4iLCBnZXRfZndzdGF0ZShwbWxtZXByaXYpLAorCQkgIE1BQ19BUkcocG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcykpKTsKIAogCS8qICB3aHkgbm90IHVzZSBwdGFyZ2V0X3dsYW4/PyAqLwotCW1lbWNweSgmY3VyX25ldHdvcmstPm5ldHdvcmssICZwbmV0d29yay0+bmV0d29yaywgcG5ldHdvcmstPm5ldHdvcmsuTGVuZ3RoKTsKKwltZW1jcHkoJmN1cl9uZXR3b3JrLT5uZXR3b3JrLCAmcG5ldHdvcmstPm5ldHdvcmssCisJICAgICAgIHBuZXR3b3JrLT5uZXR3b3JrLkxlbmd0aCk7CiAJLyogIHNvbWUgSUVzIGluIHBuZXR3b3JrIGlzIHdyb25nLCBzbyB3ZSBzaG91bGQgdXNlIHB0YXJnZXRfd2xhbiBJRXMgKi8KIAljdXJfbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCA9IHB0YXJnZXRfd2xhbi0+bmV0d29yay5JRUxlbmd0aDsKLQltZW1jcHkoJmN1cl9uZXR3b3JrLT5uZXR3b3JrLklFc1swXSwgJnB0YXJnZXRfd2xhbi0+bmV0d29yay5JRXNbMF0sIE1BWF9JRV9TWik7CisJbWVtY3B5KCZjdXJfbmV0d29yay0+bmV0d29yay5JRXNbMF0sICZwdGFyZ2V0X3dsYW4tPm5ldHdvcmsuSUVzWzBdLAorCSAgICAgICBNQVhfSUVfU1opOwogCiAJY3VyX25ldHdvcmstPmFpZCA9IHBuZXR3b3JrLT5qb2luX3JlczsKIAogCXJ0d19zZXRfc2lnbmFsX3N0YXRfdGltZXIoJnBhZGFwdGVyLT5yZWN2cHJpdik7Ci0JcGFkYXB0ZXItPnJlY3Zwcml2LnNpZ25hbF9zdHJlbmd0aCA9IHB0YXJnZXRfd2xhbi0+bmV0d29yay5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoOwotCXBhZGFwdGVyLT5yZWN2cHJpdi5zaWduYWxfcXVhbCA9IHB0YXJnZXRfd2xhbi0+bmV0d29yay5QaHlJbmZvLlNpZ25hbFF1YWxpdHk7Ci0JLyogdGhlIHB0YXJnZXRfd2xhbi0+bmV0d29yay5Sc3NpIGlzIHJhdyBkYXRhLCB3ZSB1c2UgcHRhcmdldF93bGFuLT5uZXR3b3JrLlBoeUluZm8uU2lnbmFsU3RyZW5ndGggaW5zdGVhZCAoaGFzIHNjYWxlZCkgKi8KLQlwYWRhcHRlci0+cmVjdnByaXYucnNzaSA9IHRyYW5zbGF0ZV9wZXJjZW50YWdlX3RvX2RibShwdGFyZ2V0X3dsYW4tPm5ldHdvcmsuUGh5SW5mby5TaWduYWxTdHJlbmd0aCk7CisJcGFkYXB0ZXItPnJlY3Zwcml2LnNpZ25hbF9zdHJlbmd0aCA9CisJCXB0YXJnZXRfd2xhbi0+bmV0d29yay5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoOworCXBhZGFwdGVyLT5yZWN2cHJpdi5zaWduYWxfcXVhbCA9CisJCXB0YXJnZXRfd2xhbi0+bmV0d29yay5QaHlJbmZvLlNpZ25hbFF1YWxpdHk7CisJLyoKKwkgKiB0aGUgcHRhcmdldF93bGFuLT5uZXR3b3JrLlJzc2kgaXMgcmF3IGRhdGEsIHdlIHVzZQorCSAqIHB0YXJnZXRfd2xhbi0+bmV0d29yay5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoIGluc3RlYWQgKGhhcyBzY2FsZWQpCisJICovCisJcGFkYXB0ZXItPnJlY3Zwcml2LnJzc2kgPSB0cmFuc2xhdGVfcGVyY2VudGFnZV90b19kYm0oCisJCXB0YXJnZXRfd2xhbi0+bmV0d29yay5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoKTsKIAlEQkdfODcyM0EoIiVzIHNpZ25hbF9zdHJlbmd0aDolM3UsIHJzc2k6JTNkLCBzaWduYWxfcXVhbDolM3VcbiIsCiAJCSAgX19mdW5jX18sIHBhZGFwdGVyLT5yZWN2cHJpdi5zaWduYWxfc3RyZW5ndGgsCiAJCSAgcGFkYXB0ZXItPnJlY3Zwcml2LnJzc2ksIHBhZGFwdGVyLT5yZWN2cHJpdi5zaWduYWxfcXVhbCk7CiAJcnR3X3NldF9zaWduYWxfc3RhdF90aW1lcigmcGFkYXB0ZXItPnJlY3Zwcml2KTsKIAogCS8qIHVwZGF0ZSBmd19zdGF0ZSB3aWxsIGNsciBfRldfVU5ERVJfTElOS0lORyBoZXJlIGluZGlyZWN0bHkgKi8KLQlzd2l0Y2ggKHBuZXR3b3JrLT5uZXR3b3JrLkluZnJhc3RydWN0dXJlTW9kZSkgewotCWNhc2UgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOgotCQlpZiAocG1sbWVwcml2LT5md19zdGF0ZSZXSUZJX1VOREVSX1dQUykKKwlzd2l0Y2ggKHBuZXR3b3JrLT5uZXR3b3JrLmlmbW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmIChwbWxtZXByaXYtPmZ3X3N0YXRlICYgV0lGSV9VTkRFUl9XUFMpCiAJCQlwbWxtZXByaXYtPmZ3X3N0YXRlID0gV0lGSV9TVEFUSU9OX1NUQVRFfFdJRklfVU5ERVJfV1BTOwogCQllbHNlCiAJCQlwbWxtZXByaXYtPmZ3X3N0YXRlID0gV0lGSV9TVEFUSU9OX1NUQVRFOwogCQlicmVhazsKLQljYXNlIE5kaXM4MDJfMTFJQlNTOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCXBtbG1lcHJpdi0+Zndfc3RhdGUgPSBXSUZJX0FESE9DX1NUQVRFOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwbWxtZXByaXYtPmZ3X3N0YXRlID0gV0lGSV9OVUxMX1NUQVRFOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9lcnJfLCAoIkludmFsaWQgbmV0d29ya19tb2RlXG4iKSk7CisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2Vycl8sCisJCQkgKCJJbnZhbGlkIG5ldHdvcmtfbW9kZVxuIikpOwogCQlicmVhazsKIAl9CiAKLQlydHdfdXBkYXRlX3Byb3RlY3Rpb24yM2EocGFkYXB0ZXIsIChjdXJfbmV0d29yay0+bmV0d29yay5JRXMpICsgc2l6ZW9mIChzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKSwKLQkJCQkJCQkJCShjdXJfbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCkpOworCWJjbl9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKIAotCXJ0d191cGRhdGVfaHRfY2FwMjNhKHBhZGFwdGVyLCBjdXJfbmV0d29yay0+bmV0d29yay5JRXMsIGN1cl9uZXR3b3JrLT5uZXR3b3JrLklFTGVuZ3RoKTsKKwlydHdfdXBkYXRlX3Byb3RlY3Rpb24yM2EocGFkYXB0ZXIsIGN1cl9uZXR3b3JrLT5uZXR3b3JrLklFcyArCisJCQkJIGJjbl9zaXplLCBjdXJfbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCk7CisKKwlydHdfdXBkYXRlX2h0X2NhcDIzYShwYWRhcHRlciwgY3VyX25ldHdvcmstPm5ldHdvcmsuSUVzLAorCQkJICAgICBjdXJfbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCk7CiB9CiAKLS8qIE5vdGVzOiB0aGUgZnVjbnRpb24gY291bGQgYmUgPiBwYXNzaXZlX2xldmVsICh0aGUgc2FtZSBjb250ZXh0IGFzIFJ4IHRhc2tsZXQpICovCi0vKiBwbmV0d29yayA6IHJldHVybnMgZnJvbSBydHcyM2Ffam9pbmJzc19ldmVudF9jYiAqLwotLyogcHRhcmdldF93bGFuOiBmb3VuZCBmcm9tIHNjYW5uZWRfcXVldWUgKi8KLS8qIGlmIGpvaW5fcmVzID4gMCwgZm9yIChmd19zdGF0ZT09V0lGSV9TVEFUSU9OX1NUQVRFKSwgd2UgY2hlY2sgaWYgICJwdGFyZ2V0X3N0YSIgJiAicHRhcmdldF93bGFuIiBleGlzdC4gKi8KLS8qIGlmIGpvaW5fcmVzID4gMCwgZm9yIChmd19zdGF0ZT09V0lGSV9BREhPQ19TVEFURSksIHdlIG9ubHkgY2hlY2sgaWYgInB0YXJnZXRfd2xhbiIgZXhpc3QuICovCi0vKiBpZiBqb2luX3JlcyA+IDAsIHVwZGF0ZSAiY3VyX25ldHdvcmstPm5ldHdvcmsiIGZyb20gInBuZXR3b3JrLT5uZXR3b3JrIiBpZiAocHRhcmdldF93bGFuICE9TlVMTCkuICovCisvKgorICogTm90ZXM6CisgKiB0aGUgZnVjbnRpb24gY291bGQgYmUgPiBwYXNzaXZlX2xldmVsICh0aGUgc2FtZSBjb250ZXh0IGFzIFJ4IHRhc2tsZXQpCisgKiBwbmV0d29yayA6IHJldHVybnMgZnJvbSBydHcyM2Ffam9pbmJzc19ldmVudF9jYgorICogcHRhcmdldF93bGFuOiBmb3VuZCBmcm9tIHNjYW5uZWRfcXVldWUKKyAqIGlmIGpvaW5fcmVzID4gMCwgZm9yIChmd19zdGF0ZT09V0lGSV9TVEFUSU9OX1NUQVRFKSwKKyAqIHdlIGNoZWNrIGlmICAicHRhcmdldF9zdGEiICYgInB0YXJnZXRfd2xhbiIgZXhpc3QuCisgKiBpZiBqb2luX3JlcyA+IDAsIGZvciAoZndfc3RhdGU9PVdJRklfQURIT0NfU1RBVEUpLAorICogd2Ugb25seSBjaGVjayBpZiAicHRhcmdldF93bGFuIiBleGlzdC4KKyAqIGlmIGpvaW5fcmVzID4gMCwgdXBkYXRlICJjdXJfbmV0d29yay0+bmV0d29yayIgZnJvbSAicG5ldHdvcmstPm5ldHdvcmsiCisgKiBpZiAocHRhcmdldF93bGFuICE9TlVMTCkuCisgKi8KIAogdm9pZCBydHdfam9pbmJzc19ldmVudF9wcmVoYW5kbGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqcGJ1ZikKIHsKLQlzdGF0aWMgdTggcmV0cnk9MDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnB0YXJnZXRfc3RhPSBOVUxMLCAqcGN1cl9zdGEgPSBOVUxMOwotCXN0cnVjdAlzdGFfcHJpdiAqcHN0YXByaXYgPSAmYWRhcHRlci0+c3RhcHJpdjsKLQlzdHJ1Y3QJbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHdsYW5fbmV0d29yawkqcG5ldHdvcmsJPSAoc3RydWN0IHdsYW5fbmV0d29yayAqKXBidWY7CisJc3RydWN0IHN0YV9pbmZvICpwdGFyZ2V0X3N0YSwgKnBjdXJfc3RhOworCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmYWRhcHRlci0+c3RhcHJpdjsKKwlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CisJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcmsgPSAoc3RydWN0IHdsYW5fbmV0d29yayAqKXBidWY7CiAJc3RydWN0IHdsYW5fbmV0d29yayAqY3VyX25ldHdvcmsgPSAmcG1sbWVwcml2LT5jdXJfbmV0d29yazsKLQlzdHJ1Y3Qgd2xhbl9uZXR3b3JrCSpwY3VyX3dsYW4gPSBOVUxMLCAqcHRhcmdldF93bGFuID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQJCXRoZV9zYW1lX21hY2FkZHIgPSBmYWxzZTsKKwlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwY3VyX3dsYW4sICpwdGFyZ2V0X3dsYW4gPSBOVUxMOworCWJvb2wgdGhlX3NhbWVfbWFjYWRkcjsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfaW5mb18sKCJqb2luYnNzIGV2ZW50IGNhbGwgYmFjayByZWNlaXZlZCB3aXRoIHJlcz0lZFxuIiwgcG5ldHdvcmstPmpvaW5fcmVzKSk7CisJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9pbmZvXywKKwkJICgiam9pbmJzcyBldmVudCBjYWxsIGJhY2sgcmVjZWl2ZWQgd2l0aCByZXM9JWRcbiIsCisJCSAgcG5ldHdvcmstPmpvaW5fcmVzKSk7CiAKIAlydHdfZ2V0X2VuY3J5cHRfZGVjcnlwdF9mcm9tX3JlZ2lzdHJ5cHJpdjIzYShhZGFwdGVyKTsKIAogCWlmIChwbWxtZXByaXYtPmFzc29jX3NzaWQuc3NpZF9sZW4gPT0gMCkgewotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2Vycl8sKCJAQEBAQCAgIGpvaW5ic3MgZXZlbnQgY2FsbCBiYWNrICBmb3IgQW55IFNTaWRcbiIpKTsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAorCQkJICgiQEBAQEAgICBqb2luYnNzIGV2ZW50IGNhbGwgYmFjayAgZm9yIEFueSBTU2lkXG4iKSk7CiAJfSBlbHNlIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAogCQkJICgiQEBAQEAgICBydHcyM2Ffam9pbmJzc19ldmVudF9jYiBmb3IgU1NpZDolc1xuIiwKQEAgLTExNjUsOTMgKzEyMDYsMTAyIEBACiAJCXRoZV9zYW1lX21hY2FkZHIgPSBmYWxzZTsKIAogCXBuZXR3b3JrLT5uZXR3b3JrLkxlbmd0aCA9IGdldF93bGFuX2Jzc2lkX2V4X3N6KCZwbmV0d29yay0+bmV0d29yayk7Ci0JaWYocG5ldHdvcmstPm5ldHdvcmsuTGVuZ3RoID4gc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSkKLQl7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfZXJyXywoIlxuXG4gKioqam9pbmJzc19ldnRfY2FsbGJhY2sgcmV0dXJuIGEgd3JvbmcgYnNzICoqKlxuXG4iKSk7CisJaWYgKHBuZXR3b3JrLT5uZXR3b3JrLkxlbmd0aCA+IHNpemVvZihzdHJ1Y3Qgd2xhbl9ic3NpZF9leCkpIHsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAorCQkJICgiXG5cbiAqKipqb2luYnNzX2V2dF9jYWxsYmFjayByZXR1cm4gYSB3cm9uZyBic3MgIgorCQkJICAiKioqXG5cbiIpKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKIAotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfaW5mb18sKCJcbiBydHcyM2Ffam9pbmJzc19ldmVudF9jYiAhISBfZW50ZXJfY3JpdGljYWxcbiIpKTsKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2luZm9fLAorCQkgKCJcbiBydHcyM2Ffam9pbmJzc19ldmVudF9jYiAhISBfZW50ZXJfY3JpdGljYWxcbiIpKTsKIAotCWlmKHBuZXR3b3JrLT5qb2luX3JlcyA+IDApCi0JeworCWlmIChwbmV0d29yay0+am9pbl9yZXMgPiAwKSB7CiAJCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwotCQlyZXRyeSA9IDA7Ci0JCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdixfRldfVU5ERVJfTElOS0lORykpCi0JCXsKKwkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LF9GV19VTkRFUl9MSU5LSU5HKSkgewogCQkJLyogczEuIGZpbmQgcHRhcmdldF93bGFuICovCi0JCQlpZihjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpCi0JCQl7Ci0JCQkJaWYodGhlX3NhbWVfbWFjYWRkciA9PSB0cnVlKQotCQkJCXsKKwkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKKwkJCQlpZiAodGhlX3NhbWVfbWFjYWRkciA9PSB0cnVlKSB7CiAJCQkJCXB0YXJnZXRfd2xhbiA9IHJ0d19maW5kX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwgY3VyX25ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7CisJCQkJfSBlbHNlIHsKIAkJCQkJcGN1cl93bGFuID0gcnR3X2ZpbmRfbmV0d29yazIzYSgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLCBjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKLQkJCQkJaWYocGN1cl93bGFuKQlwY3VyX3dsYW4tPmZpeGVkID0gZmFsc2U7CisJCQkJCWlmIChwY3VyX3dsYW4pCisJCQkJCQlwY3VyX3dsYW4tPmZpeGVkID0gZmFsc2U7CiAKIAkJCQkJcGN1cl9zdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIGN1cl9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwotCQkJCQlpZihwY3VyX3N0YSkgeworCQkJCQlpZiAocGN1cl9zdGEpIHsKIAkJCQkJCXNwaW5fbG9ja19iaCgmcHN0YXByaXYtPnN0YV9oYXNoX2xvY2spOwotCQkJCQkJcnR3X2ZyZWVfc3RhaW5mbzIzYShhZGFwdGVyLCAgcGN1cl9zdGEpOworCQkJCQkJcnR3X2ZyZWVfc3RhaW5mbzIzYShhZGFwdGVyLAorCQkJCQkJCQkgICAgcGN1cl9zdGEpOwogCQkJCQkJc3Bpbl91bmxvY2tfYmgoJnBzdGFwcml2LT5zdGFfaGFzaF9sb2NrKTsKIAkJCQkJfQogCiAJCQkJCXB0YXJnZXRfd2xhbiA9IHJ0d19maW5kX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwgcG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0JCQkJCWlmKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpID09IHRydWUpIHsKLQkJCQkJCWlmKHB0YXJnZXRfd2xhbikJcHRhcmdldF93bGFuLT5maXhlZCA9IHRydWU7CisJCQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwKKwkJCQkJCQkgIFdJRklfU1RBVElPTl9TVEFURSkpIHsKKwkJCQkJCWlmIChwdGFyZ2V0X3dsYW4pCisJCQkJCQkJcHRhcmdldF93bGFuLT5maXhlZCA9CisJCQkJCQkJCXRydWU7CiAJCQkJCX0KIAkJCQl9CiAKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlwdGFyZ2V0X3dsYW4gPSBydHdfZmluZF9uZXR3b3JrMjNhKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUsIHBuZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwotCQkJCWlmKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpID09IHRydWUpIHsKLQkJCQkJaWYocHRhcmdldF93bGFuKQlwdGFyZ2V0X3dsYW4tPmZpeGVkID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJcHRhcmdldF93bGFuID0gcnR3X2ZpbmRfbmV0d29yazIzYSgKKwkJCQkJJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwKKwkJCQkJcG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJCQkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LAorCQkJCQkJICBXSUZJX1NUQVRJT05fU1RBVEUpKSB7CisJCQkJCWlmIChwdGFyZ2V0X3dsYW4pCisJCQkJCQlwdGFyZ2V0X3dsYW4tPmZpeGVkID0gdHJ1ZTsKIAkJCQl9CiAJCQl9CiAKIAkJCS8qIHMyLiB1cGRhdGUgY3VyX25ldHdvcmsgKi8KLQkJCWlmKHB0YXJnZXRfd2xhbikKLQkJCXsKLQkJCQlydHdfam9pbmJzc191cGRhdGVfbmV0d29yazIzYShhZGFwdGVyLCBwdGFyZ2V0X3dsYW4sIHBuZXR3b3JrKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2Vycl8sKCJDYW4ndCBmaW5kIHB0YXJnZXRfd2xhbiB3aGVuIGpvaW5ic3NfZXZlbnQgY2FsbGJhY2tcbiIpKTsKKwkJCWlmIChwdGFyZ2V0X3dsYW4pCisJCQkJcnR3X2pvaW5ic3NfdXBkYXRlX25ldHdvcmsyM2EoYWRhcHRlciwKKwkJCQkJCQkgICAgICBwdGFyZ2V0X3dsYW4sCisJCQkJCQkJICAgICAgcG5ldHdvcmspOworCQkJZWxzZSB7CisJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAorCQkJCQkgKCJDYW4ndCBmaW5kIHB0YXJnZXRfd2xhbiB3aGVuICIKKwkJCQkJICAiam9pbmJzc19ldmVudCBjYWxsYmFja1xuIikpOwogCQkJCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAJCQkJZ290byBpZ25vcmVfam9pbmJzc19jYWxsYmFjazsKIAkJCX0KIAotCQkJLyogczMuIGZpbmQgcHRhcmdldF9zdGEgJiB1cGRhdGUgcHRhcmdldF9zdGEgYWZ0ZXIgdXBkYXRlIGN1cl9uZXR3b3JrIG9ubHkgZm9yIHN0YXRpb24gbW9kZSAqLwotCQkJaWYoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSkgPT0gdHJ1ZSkKLQkJCXsKLQkJCQlwdGFyZ2V0X3N0YSA9IHJ0d19qb2luYnNzX3VwZGF0ZV9zdGFpbmZvKGFkYXB0ZXIsIHBuZXR3b3JrKTsKLQkJCQlpZihwdGFyZ2V0X3N0YT09TlVMTCkKLQkJCQl7Ci0JCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfZXJyXywoIkNhbid0IHVwZGF0ZSBzdGFpbmZvIHdoZW4gam9pbmJzc19ldmVudCBjYWxsYmFja1xuIikpOworCQkJLyogczMuIGZpbmQgcHRhcmdldF9zdGEgJiB1cGRhdGUgcHRhcmdldF9zdGEgYWZ0ZXIKKwkJCSAgIHVwZGF0ZSBjdXJfbmV0d29yayBvbmx5IGZvciBzdGF0aW9uIG1vZGUgKi8KKwkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgeworCQkJCXB0YXJnZXRfc3RhID0gcnR3X2pvaW5ic3NfdXBkYXRlX3N0YWluZm8oCisJCQkJCWFkYXB0ZXIsIHBuZXR3b3JrKTsKKwkJCQlpZiAoIXB0YXJnZXRfc3RhKSB7CisJCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLAorCQkJCQkJIF9kcnZfZXJyXywKKwkJCQkJCSAoIkNhbid0IHVwZGF0ZSBzdGFpbmZvIHdoZW4gIgorCQkJCQkJICAiam9pbmJzc19ldmVudCBjYWxsYmFja1xuIikpOwogCQkJCQlzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwogCQkJCQlnb3RvIGlnbm9yZV9qb2luYnNzX2NhbGxiYWNrOwogCQkJCX0KIAkJCX0KIAogCQkJLyogczQuIGluZGljYXRlIGNvbm5lY3QgKi8KLQkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSA9PSB0cnVlKQotCQkJeworCQkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpKQogCQkJCXJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKGFkYXB0ZXIpOwotCQkJfSBlbHNlIHsKLQkJCQkJLyogYWRob2MgbW9kZSB3aWxsIHJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhIHdoZW4gcnR3X3N0YXNzb2NfZXZlbnRfY2FsbGJhY2syM2EgKi8KLQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2luZm9fLCgiYWRob2MgbW9kZSwgZndfc3RhdGU6JXgiLCBnZXRfZndzdGF0ZShwbWxtZXByaXYpKSk7CisJCQllbHNlIHsKKwkJCQkvKiBhZGhvYyBtb2RlIHdpbGwgcnR3X2luZGljYXRlX2Nvbm5lY3QyM2EKKwkJCQkgICB3aGVuIHJ0d19zdGFzc29jX2V2ZW50X2NhbGxiYWNrMjNhICovCisJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9pbmZvXywKKwkJCQkJICgiYWRob2MgbW9kZSwgZndfc3RhdGU6JXgiLAorCQkJCQkgIGdldF9md3N0YXRlKHBtbG1lcHJpdikpKTsKIAkJCX0KIAogCQkJLyogczUuIENhbmNsZSBhc3NvY190aW1lciAqLwogCQkJZGVsX3RpbWVyX3N5bmMoJnBtbG1lcHJpdi0+YXNzb2NfdGltZXIpOwogCi0JCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2luZm9fLCgiQ2FuY2xlIGFzc29jX3RpbWVyXG4iKSk7CisJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2luZm9fLAorCQkJCSAoIkNhbmNsZSBhc3NvY190aW1lclxuIikpOwogCQl9IGVsc2UgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKIAkJCQkgKCJydHcyM2Ffam9pbmJzc19ldmVudF9jYiBlcnI6IGZ3X3N0YXRlOiV4IiwKQEAgLTEyNjAsMjAgKzEzMTAsMTkgQEAKIAkJCWdvdG8gaWdub3JlX2pvaW5ic3NfY2FsbGJhY2s7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZS5sb2NrKTsKLQl9IGVsc2UgaWYocG5ldHdvcmstPmpvaW5fcmVzID09IC00KSB7CisJfSBlbHNlIGlmIChwbmV0d29yay0+am9pbl9yZXMgPT0gLTQpIHsKIAkJcnR3X3Jlc2V0X3NlY3VyaXR5cHJpdjIzYShhZGFwdGVyKTsKIAkJbW9kX3RpbWVyKCZwbWxtZXByaXYtPmFzc29jX3RpbWVyLAogCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxKSk7CiAKIAkJLyogcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhKGFkYXB0ZXIsIDEpOyAqLwogCi0JCWlmKChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX0xJTktJTkcpKSkgeworCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKSkgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKLQkJCQkgKCJmYWlsISBjbGVhciBfRldfVU5ERVJfTElOS0lORyBeXl5md19zdGF0ZT0leFxuIiwKLQkJCQkgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOworCQkJCSAoImZhaWwhIGNsZWFyIF9GV19VTkRFUl9MSU5LSU5HIF5eXmZ3X3N0YXRlPSIKKwkJCQkgICIleFxuIiwgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSkpOwogCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKTsKIAkJfQotCiAJfSBlbHNlIHsKIAkJLyogaWYgam9pbl9yZXMgPCAwIChqb2luIGZhaWxzKSwgdGhlbiB0cnkgYWdhaW4gKi8KIAkJbW9kX3RpbWVyKCZwbWxtZXByaXYtPmFzc29jX3RpbWVyLApAQCAtMTI4Niw0OCArMTMzNSwzMyBAQAogCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwogfQogCi12b2lkIHJ0dzIzYV9qb2luYnNzX2V2ZW50X2NiKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKnBidWYpCit2b2lkIHJ0dzIzYV9qb2luYnNzX2V2ZW50X2NiKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKnBidWYpCiB7Ci0Jc3RydWN0IHdsYW5fbmV0d29yawkqcG5ldHdvcmsJPSAoc3RydWN0IHdsYW5fbmV0d29yayAqKXBidWY7CisJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcmsgPSAoc3RydWN0IHdsYW5fbmV0d29yayAqKXBidWY7CiAKIAltbG1lZXh0X2pvaW5ic3NfZXZlbnRfY2FsbGJhY2syM2EoYWRhcHRlciwgcG5ldHdvcmstPmpvaW5fcmVzKTsKIAogCXJ0d19vc194bWl0X3NjaGVkdWxlMjNhKGFkYXB0ZXIpOwotCiB9CiAKLS8qIEZPUiBBUCAsIEFELUhPQyBtb2RlICovCi12b2lkIHJ0d19zdGFzc29jX2h3X3JwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSkKLXsKLQl1MTYgbWVkaWFfc3RhdHVzOwotCi0JaWYgKHBzdGEgPT0gTlVMTCkJcmV0dXJuOwotCi0JbWVkaWFfc3RhdHVzID0gKHBzdGEtPm1hY19pZDw8OCl8MTsgLyogICBNQUNJRHxPUE1PREU6MSBjb25uZWN0ICovCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EoYWRhcHRlciwgSFdfVkFSX0gyQ19NRURJQV9TVEFUVVNfUlBULCAodTggKikmbWVkaWFfc3RhdHVzKTsKLX0KLQotdm9pZCBydHdfc3Rhc3NvY19ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwYnVmKQordm9pZCBydHdfc3Rhc3NvY19ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHN0YXNzb2NfZXZlbnQJKnBzdGFzc29jCT0gKHN0cnVjdCBzdGFzc29jX2V2ZW50KilwYnVmOworCXN0cnVjdCBzdGFzc29jX2V2ZW50ICpwc3Rhc3NvYyA9IChzdHJ1Y3Qgc3Rhc3NvY19ldmVudCopcGJ1ZjsKIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOwotCXN0cnVjdCB3bGFuX25ldHdvcmsJKnB0YXJnZXRfd2xhbiA9IE5VTEw7CisJc3RydWN0IHdsYW5fbmV0d29yayAqcHRhcmdldF93bGFuOwogCi0JaWYocnR3X2FjY2Vzc19jdHJsMjNhKGFkYXB0ZXIsIHBzdGFzc29jLT5tYWNhZGRyKSA9PSBmYWxzZSkKKwlpZiAocnR3X2FjY2Vzc19jdHJsMjNhKGFkYXB0ZXIsIHBzdGFzc29jLT5tYWNhZGRyKSA9PSBmYWxzZSkKIAkJcmV0dXJuOwogCiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCi0JaWYoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKQotCXsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7CiAJCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJmFkYXB0ZXItPnN0YXByaXYsIHBzdGFzc29jLT5tYWNhZGRyKTsKIAkJaWYgKHBzdGEpIHsKIAkJCS8qIGJzc19jYXBfdXBkYXRlX29uX3N0YV9qb2luMjNhKGFkYXB0ZXIsIHBzdGEpOyAqLwogCQkJLyogc3RhX2luZm9fdXBkYXRlMjNhKGFkYXB0ZXIsIHBzdGEpOyAqLwogCQkJYXBfc3RhX2luZm9fZGVmZXJfdXBkYXRlMjNhKGFkYXB0ZXIsIHBzdGEpOwotCi0JCQlydHdfc3Rhc3NvY19od19ycHQyM2EoYWRhcHRlcixwc3RhKTsKIAkJfQogCQlyZXR1cm47CiAJfQpAQCAtMTMzNiwxMyArMTM3MCwyMCBAQAogCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJmFkYXB0ZXItPnN0YXByaXYsIHBzdGFzc29jLT5tYWNhZGRyKTsKIAlpZiAocHN0YSAhPSBOVUxMKSB7CiAJCS8qIHRoZSBzdGEgaGF2ZSBiZWVuIGluIHN0YV9pbmZvX3F1ZXVlID0+IGRvIG5vdGhpbmcgKi8KLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLCgiRXJyb3I6IHJ0d19zdGFzc29jX2V2ZW50X2NhbGxiYWNrMjNhOiBzdGEgaGFzIGJlZW4gaW4gc3RhX2hhc2hfcXVldWVcbiIpKTsKLQkJcmV0dXJuOyAvKiBiZXR3ZWVuIGRydiBoYXMgcmVjZWl2ZWQgdGhpcyBldmVudCBiZWZvcmUgYW5kICBmdyBoYXZlIG5vdCB5ZXQgdG8gc2V0IGtleSB0byBDQU1fRU5UUlkpICovCisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfZXJyXywKKwkJCSAoIkVycm9yOiBydHdfc3Rhc3NvY19ldmVudF9jYWxsYmFjazIzYTogc3RhIGhhcyAiCisJCQkgICJiZWVuIGluIHN0YV9oYXNoX3F1ZXVlXG4iKSk7CisJCS8qIGJldHdlZW4gZHJ2IGhhcyByZWNlaXZlZCB0aGlzIGV2ZW50IGJlZm9yZSBhbmQKKwkJICAgZncgaGF2ZSBub3QgeWV0IHRvIHNldCBrZXkgdG8gQ0FNX0VOVFJZKSAqLworCQlyZXR1cm47CiAJfQogCi0JcHN0YSA9IHJ0d19hbGxvY19zdGFpbmZvMjNhKCZhZGFwdGVyLT5zdGFwcml2LCBwc3Rhc3NvYy0+bWFjYWRkcik7Ci0JaWYgKHBzdGEgPT0gTlVMTCkgewotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2Vycl8sKCJDYW4ndCBhbGxvYyBzdGFfaW5mbyB3aGVuIHJ0d19zdGFzc29jX2V2ZW50X2NhbGxiYWNrMjNhXG4iKSk7CisJcHN0YSA9IHJ0d19hbGxvY19zdGFpbmZvMjNhKCZhZGFwdGVyLT5zdGFwcml2LCBwc3Rhc3NvYy0+bWFjYWRkciwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFwc3RhKSB7CisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLF9kcnZfZXJyXywKKwkJCSAoIkNhbid0IGFsbG9jIHN0YV9pbmZvIHdoZW4gIgorCQkJICAicnR3X3N0YXNzb2NfZXZlbnRfY2FsbGJhY2syM2FcbiIpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTM1MiwyNSArMTM5MywyNSBAQAogCS8qIHBzdGEtPmFpZCA9ICh1aW50KXBzdGFzc29jLT5jYW1faWQ7ICovCiAJREJHXzg3MjNBKCIlc1xuIixfX2Z1bmNfXyk7CiAJLyogZm9yIGFkLWhvYyBtb2RlICovCi0JcnR3X2hhbF9zZXRfb2RtX3ZhcjIzYShhZGFwdGVyLEhBTF9PRE1fU1RBX0lORk8scHN0YSx0cnVlKTsKKwlydGw4NzIzYV9TZXRIYWxPRE1WYXIoYWRhcHRlciwgSEFMX09ETV9TVEFfSU5GTywgcHN0YSwgdHJ1ZSk7CiAKLQlydHdfc3Rhc3NvY19od19ycHQyM2EoYWRhcHRlcixwc3RhKTsKLQotCWlmKGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMUF1dGhBbGdydGhtPT1kb3QxMUF1dGhBbGdydGhtXzgwMjFYKQotCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9IGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtOworCWlmIChhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFBdXRoQWxncnRobSA9PSBkb3QxMUF1dGhBbGdydGhtXzgwMjFYKQorCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9CisJCQlhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobTsKIAogCXBzdGEtPmllZWU4MDIxeF9ibG9ja2VkID0gZmFsc2U7CiAKIAlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CiAKLQlpZiAoIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpPT10cnVlICkgfHwKLQkJKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKT09dHJ1ZSApICkKLQl7Ci0JCWlmKGFkYXB0ZXItPnN0YXByaXYuYXNvY19zdGFfY291bnQ9PSAyKQotCQl7CisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkgfHwKKwkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpKSB7CisJCWlmIChhZGFwdGVyLT5zdGFwcml2LmFzb2Nfc3RhX2NvdW50ID09IDIpIHsKIAkJCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwotCQkJcHRhcmdldF93bGFuID0gcnR3X2ZpbmRfbmV0d29yazIzYSgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLCBjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKLQkJCWlmKHB0YXJnZXRfd2xhbikJcHRhcmdldF93bGFuLT5maXhlZCA9IHRydWU7CisJCQlwdGFyZ2V0X3dsYW4gPQorCQkJCXJ0d19maW5kX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwKKwkJCQkJCSAgICBjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKKwkJCWlmIChwdGFyZ2V0X3dsYW4pCisJCQkJcHRhcmdldF93bGFuLT5maXhlZCA9IHRydWU7CiAJCQlzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwogCQkJLyogIGEgc3RhICsgYmMvbWNfc3RhaW5mbyAobm90IElic3Nfc3RhaW5mbykgKi8KIAkJCXJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKGFkYXB0ZXIpOwpAQCAtMTM4Miw0OSArMTQyMyw0MiBAQAogCW1sbWVleHRfc3RhX2FkZF9ldmVudF9jYWxsYmFjazIzYShhZGFwdGVyLCBwc3RhKTsKIH0KIAotdm9pZCBydHdfc3RhZGVsX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKnBidWYpCit2b2lkIHJ0d19zdGFkZWxfZXZlbnRfY2FsbGJhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKLQlpbnQgbWFjX2lkPS0xOworCWludCBtYWNfaWQ7CiAJc3RydWN0IHN0YV9pbmZvICpwc3RhOwotCXN0cnVjdCB3bGFuX25ldHdvcmsqIHB3bGFuID0gTlVMTDsKLQlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAgICAqcGRldl9uZXR3b3JrPU5VTEw7Ci0JdTgqIHBpYnNzID0gTlVMTDsKLQlzdHJ1Y3QJbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0CXN0YWRlbF9ldmVudCAqcHN0YWRlbAk9IChzdHJ1Y3Qgc3RhZGVsX2V2ZW50KilwYnVmOwotCXN0cnVjdAlzdGFfcHJpdiAqcHN0YXByaXYgPSAmYWRhcHRlci0+c3RhcHJpdjsKKwlzdHJ1Y3Qgd2xhbl9uZXR3b3JrKiBwd2xhbjsKKwlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcGRldl9uZXR3b3JrOworCXU4ICpwaWJzczsKKwlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CisJc3RydWN0IHN0YWRlbF9ldmVudCAqcHN0YWRlbCA9IChzdHJ1Y3Qgc3RhZGVsX2V2ZW50ICopcGJ1ZjsKKwlzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2ID0gJmFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHdsYW5fbmV0d29yayAqdGd0X25ldHdvcmsgPSAmcG1sbWVwcml2LT5jdXJfbmV0d29yazsKIAogCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJmFkYXB0ZXItPnN0YXByaXYsIHBzdGFkZWwtPm1hY2FkZHIpOwotCWlmKHBzdGEpCisJaWYgKHBzdGEpCiAJCW1hY19pZCA9IHBzdGEtPm1hY19pZDsKIAllbHNlCiAJCW1hY19pZCA9IHBzdGFkZWwtPm1hY19pZDsKIAotCURCR184NzIzQSgiJXMobWFjX2lkPSVkKT0iIE1BQ19GTVQgIlxuIiwgX19mdW5jX18sIG1hY19pZCwgTUFDX0FSRyhwc3RhZGVsLT5tYWNhZGRyKSk7Ci0KLQlpZihtYWNfaWQ+PTApIHsKLQkJdTE2IG1lZGlhX3N0YXR1czsKLQkJbWVkaWFfc3RhdHVzID0gKG1hY19pZDw8OCl8MDsgLyogICBNQUNJRHxPUE1PREU6MCBtZWFucyBkaXNjb25uZWN0ICovCi0JCS8qIGZvciBTVEEsQVAsQURIT0MgbW9kZSwgcmVwb3J0IGRpc2Nvbm5lY3Qgc3RhdXRzIHRvIEZXICovCi0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKGFkYXB0ZXIsIEhXX1ZBUl9IMkNfTUVESUFfU1RBVFVTX1JQVCwgKHU4ICopJm1lZGlhX3N0YXR1cyk7Ci0JfQorCURCR184NzIzQSgiJXMobWFjX2lkPSVkKT0iIE1BQ19GTVQgIlxuIiwgX19mdW5jX18sIG1hY19pZCwKKwkJICBNQUNfQVJHKHBzdGFkZWwtPm1hY2FkZHIpKTsKIAogICAgICAgICBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKQotICAgICAgICB7CiAJCXJldHVybjsKLSAgICAgICAgfQogCiAJbWxtZWV4dF9zdGFfZGVsX2V2ZW50X2NhbGxiYWNrMjNhKGFkYXB0ZXIpOwogCiAJc3Bpbl9sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwogCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpKQotCXsKLQkJaWYgKHJ0d190b19yb2FtaW5nKGFkYXB0ZXIpID4gMCkKLQkJCXBtbG1lcHJpdi0+dG9fcm9hbWluZy0tOyAvKiB0aGlzIHN0YWRlbF9ldmVudCBpcyBjYXVzZWQgYnkgcm9hbWluZywgZGVjcmVhc2UgdG9fcm9hbWluZyAqLwotCQllbHNlIGlmIChydHdfdG9fcm9hbWluZyhhZGFwdGVyKSA9PSAwKQorCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgeworCQlpZiAoYWRhcHRlci0+bWxtZXByaXYudG9fcm9hbWluZyA+IDApIHsKKwkJCS8qIHRoaXMgc3RhZGVsX2V2ZW50IGlzIGNhdXNlZCBieSByb2FtaW5nLAorCQkJICAgZGVjcmVhc2UgdG9fcm9hbWluZyAqLworCQkJcG1sbWVwcml2LT50b19yb2FtaW5nLS07CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+bWxtZXByaXYudG9fcm9hbWluZyA9PSAwKQogCQkJcnR3X3NldF9yb2FtaW5nKGFkYXB0ZXIsIGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5tYXhfcm9hbWluZ190aW1lcyk7Ci0JCWlmICgqKCh1bnNpZ25lZCBzaG9ydCAqKShwc3RhZGVsLT5yc3ZkKSkgIT0gV0xBTl9SRUFTT05fRVhQSVJBVElPTl9DSEspCisJCWlmICgqKCh1MTYgKilwc3RhZGVsLT5yc3ZkKSAhPSBXTEFOX1JFQVNPTl9FWFBJUkFUSU9OX0NISykKIAkJCXJ0d19zZXRfcm9hbWluZyhhZGFwdGVyLCAwKTsgLyogZG9uJ3Qgcm9hbSAqLwogCiAJCXJ0d19mcmVlX3VjX3N3ZGVjX3BlbmRpbmdfcXVldWUyM2EoYWRhcHRlcik7CkBAIC0xNDMzLDMyICsxNDY3LDMzIEBACiAJCXJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKGFkYXB0ZXIpOwogCQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZS5sb2NrKTsKIAkJLyogIHJlbW92ZSB0aGUgbmV0d29yayBlbnRyeSBpbiBzY2FubmVkX3F1ZXVlICovCi0JCXB3bGFuID0gcnR3X2ZpbmRfbmV0d29yazIzYSgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLCB0Z3RfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKKwkJcHdsYW4gPSBydHdfZmluZF9uZXR3b3JrMjNhKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUsCisJCQkJCSAgICB0Z3RfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKIAkJaWYgKHB3bGFuKSB7CiAJCQlwd2xhbi0+Zml4ZWQgPSBmYWxzZTsKIAkJCXJ0d19mcmVlX25ldHdvcmtfbm9sb2NrKHBtbG1lcHJpdiwgcHdsYW4pOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAKLQkJX3J0dzIzYV9yb2FtaW5nKGFkYXB0ZXIsIHRndF9uZXR3b3JrKTsKKwkJX3J0d19yb2FtaW5nKGFkYXB0ZXIsIHRndF9uZXR3b3JrKTsKIAl9CiAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSB8fAotCSAgICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSkKLQl7CisJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSkgewogCiAJCXNwaW5fbG9ja19iaCgmcHN0YXByaXYtPnN0YV9oYXNoX2xvY2spOwogCQlydHdfZnJlZV9zdGFpbmZvMjNhKGFkYXB0ZXIsICBwc3RhKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnBzdGFwcml2LT5zdGFfaGFzaF9sb2NrKTsKIAotCQlpZiAoYWRhcHRlci0+c3RhcHJpdi5hc29jX3N0YV9jb3VudCA9PSAxKSAvKiBhIHN0YSArIGJjL21jX3N0YWluZm8gKG5vdCBJYnNzX3N0YWluZm8pICovCi0JCXsKKwkJLyogYSBzdGEgKyBiYy9tY19zdGFpbmZvIChub3QgSWJzc19zdGFpbmZvKSAqLworCQlpZiAoYWRhcHRlci0+c3RhcHJpdi5hc29jX3N0YV9jb3VudCA9PSAxKSB7CiAJCQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZS5sb2NrKTsKIAkJCS8qIGZyZWUgb2xkIGlic3MgbmV0d29yayAqLwotCQkJLyogcHdsYW4gPSBydHdfZmluZF9uZXR3b3JrMjNhKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUsIHBzdGFkZWwtPm1hY2FkZHIpOyAqLwotCQkJcHdsYW4gPSBydHdfZmluZF9uZXR3b3JrMjNhKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUsIHRndF9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpOwotCQkJaWYgKHB3bGFuKQotCQkJeworCQkJLyogcHdsYW4gPSBydHdfZmluZF9uZXR3b3JrMjNhKAorCQkJICAgJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwgcHN0YWRlbC0+bWFjYWRkcik7ICovCisJCQlwd2xhbiA9IHJ0d19maW5kX25ldHdvcmsyM2EoJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZSwKKwkJCQkJCSAgICB0Z3RfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKKwkJCWlmIChwd2xhbikgewogCQkJCXB3bGFuLT5maXhlZCA9IGZhbHNlOwogCQkJCXJ0d19mcmVlX25ldHdvcmtfbm9sb2NrKHBtbG1lcHJpdiwgcHdsYW4pOwogCQkJfQpAQCAtMTQ2Nyw3ICsxNTAyLDggQEAKIAkJCXBkZXZfbmV0d29yayA9ICZhZGFwdGVyLT5yZWdpc3RyeXByaXYuZGV2X25ldHdvcms7CiAJCQlwaWJzcyA9IGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5kZXZfbmV0d29yay5NYWNBZGRyZXNzOwogCi0JCQltZW1jcHkocGRldl9uZXR3b3JrLCAmdGd0X25ldHdvcmstPm5ldHdvcmssIGdldF93bGFuX2Jzc2lkX2V4X3N6KCZ0Z3RfbmV0d29yay0+bmV0d29yaykpOworCQkJbWVtY3B5KHBkZXZfbmV0d29yaywgJnRndF9uZXR3b3JrLT5uZXR3b3JrLAorCQkJICAgICAgIGdldF93bGFuX2Jzc2lkX2V4X3N6KCZ0Z3RfbmV0d29yay0+bmV0d29yaykpOwogCiAJCQltZW1zZXQoJnBkZXZfbmV0d29yay0+U3NpZCwgMCwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGNmZzgwMjExX3NzaWQpKTsKQEAgLTE0NzgsMzIgKzE1MTQsMjIgQEAKIAogCQkJcnR3X2dlbmVyYXRlX3JhbmRvbV9pYnNzMjNhKHBpYnNzKTsKIAotCQkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSkKLQkJCXsKKwkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSkpIHsKIAkJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKTsKIAkJCQlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSk7CiAJCQl9CiAKLQkJCWlmIChydHdfY3JlYXRlYnNzX2NtZDIzYShhZGFwdGVyKSE9IF9TVUNDRVNTKQotCQkJewotCi0JCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9lcnJfLCAoIioqKkVycm9yID0+c3RhZGVsX2V2ZW50X2NhbGxiYWNrOiBydHdfY3JlYXRlYnNzX2NtZDIzYSBzdGF0dXMgRkFJTCoqKlxuICIpKTsKLQorCQkJaWYgKHJ0d19jcmVhdGVic3NfY21kMjNhKGFkYXB0ZXIpICE9IF9TVUNDRVNTKSB7CisJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywKKwkJCQkJIF9kcnZfZXJyXywKKwkJCQkJICgiKioqRXJyb3IgPT5zdGFkZWxfZXZlbnRfY2FsbGJhY2s6ICIKKwkJCQkJICAicnR3X2NyZWF0ZWJzc19jbWQyM2Egc3RhdHVzICIKKwkJCQkJICAiRkFJTCoqKlxuIikpOwogCQkJfQotCiAJCX0KLQogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwotCi19Ci0KLXZvaWQgcnR3X2Nwd21fZXZlbnRfY2FsbGJhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpCi17Ci0KLQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXyxfZHJ2X2Vycl8sKCIrcnR3X2Nwd21fZXZlbnRfY2FsbGJhY2syM2EgISEhXG4iKSk7Ci0KIH0KIAogLyoKQEAgLTE1MTgsMjMgKzE1NDQsMjggQEAKIAogCURCR184NzIzQSgiJXMsIGZ3X3N0YXRlPSV4XG4iLCBfX2Z1bmNfXywgZ2V0X2Z3c3RhdGUocG1sbWVwcml2KSk7CiAKLQlpZihhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCB8fGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQpCisJaWYgKGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkIHx8YWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwogCi0JaWYgKHJ0d190b19yb2FtaW5nKGFkYXB0ZXIpID4gMCkgeyAvKiBqb2luIHRpbWVvdXQgY2F1c2VkIGJ5IHJvYW1pbmcgKi8KLQkJd2hpbGUoMSkgeworCWlmIChhZGFwdGVyLT5tbG1lcHJpdi50b19yb2FtaW5nID4gMCkgeworCQkvKiBqb2luIHRpbWVvdXQgY2F1c2VkIGJ5IHJvYW1pbmcgKi8KKwkJd2hpbGUgKDEpIHsKIAkJCXBtbG1lcHJpdi0+dG9fcm9hbWluZy0tOwotCQkJaWYgKHJ0d190b19yb2FtaW5nKGFkYXB0ZXIpICE9IDApIHsgLyogdHJ5IGFub3RoZXIgKi8KKwkJCWlmIChhZGFwdGVyLT5tbG1lcHJpdi50b19yb2FtaW5nICE9IDApIHsKKwkJCQkvKiB0cnkgYW5vdGhlciAqLwogCQkJCURCR184NzIzQSgiJXMgdHJ5IGFub3RoZXIgcm9hbWluZ1xuIiwgX19mdW5jX18pOwotCQkJCWlmIChfU1VDQ0VTUyE9IChkb19qb2luX3IgPSBydHdfZG9fam9pbjIzYShhZGFwdGVyKSkpIHsKLQkJCQkJREJHXzg3MjNBKCIlcyByb2FtaW5nIGRvX2pvaW4gcmV0dXJuICVkXG4iLCBfX2Z1bmNfXyAsIGRvX2pvaW5fcik7CisJCQkJZG9fam9pbl9yID0gcnR3X2RvX2pvaW4yM2EoYWRhcHRlcik7CisJCQkJaWYgKGRvX2pvaW5fciAhPSBfU1VDQ0VTUykgeworCQkJCQlEQkdfODcyM0EoIiVzIHJvYW1pbmcgZG9fam9pbiByZXR1cm4gIgorCQkJCQkJICAiJWRcbiIsIF9fZnVuY19fICwgZG9fam9pbl9yKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKLQkJCQlEQkdfODcyM0EoIiVzIFdlJ3ZlIHRyeSByb2FtaW5nIGJ1dCBmYWlsXG4iLCBfX2Z1bmNfXyk7CisJCQkJREJHXzg3MjNBKCIlcyBXZSd2ZSB0cnkgcm9hbWluZyBidXQgZmFpbFxuIiwKKwkJCQkJICBfX2Z1bmNfXyk7CiAJCQkJcnR3X2luZGljYXRlX2Rpc2Nvbm5lY3QyM2EoYWRhcHRlcik7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNTQzLDcgKzE1NzQsOCBAQAogCQlydHdfaW5kaWNhdGVfZGlzY29ubmVjdDIzYShhZGFwdGVyKTsKIAkJZnJlZV9zY2FucXVldWUocG1sbWVwcml2KTsvKiAgKi8KIAotCQkvKiBpbmRpY2F0ZSBkaXNjb25uZWN0IGZvciB0aGUgY2FzZSB0aGF0IGpvaW5fdGltZW91dCBhbmQgY2hlY2tfZndzdGF0ZSAhPSBGV19MSU5LRUQgKi8KKwkJLyogaW5kaWNhdGUgZGlzY29ubmVjdCBmb3IgdGhlIGNhc2UgdGhhdCBqb2luX3RpbWVvdXQgYW5kCisJCSAgIGNoZWNrX2Z3c3RhdGUgIT0gRldfTElOS0VEICovCiAJCXJ0d19jZmc4MDIxMV9pbmRpY2F0ZV9kaXNjb25uZWN0KGFkYXB0ZXIpOwogCX0KIApAQCAtMTU2MCw3ICsxNTkyLDggQEAKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHJ0d19hZGFwdGVyICopZGF0YTsKIAlzdHJ1Y3QJbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CiAKLQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCIgZndfc3RhdGUgPSV4XG4iLCBGVU5DX0FEUFRfQVJHKGFkYXB0ZXIpLCBnZXRfZndzdGF0ZShwbWxtZXByaXYpKTsKKwlEQkdfODcyM0EoIiVzKCVzKTogZndfc3RhdGUgPSV4XG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKKwkJICBnZXRfZndzdGF0ZShwbWxtZXByaXYpKTsKIAogCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKIApAQCAtMTU2OCw3ICsxNjAxLDcgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwogCi0JcnR3X2luZGljYXRlX3NjYW5fZG9uZTIzYShhZGFwdGVyLCB0cnVlKTsKKwlydHdfY2ZnODAyMTFfaW5kaWNhdGVfc2Nhbl9kb25lKHdkZXZfdG9fcHJpdihhZGFwdGVyLT5ydHdfd2RldiksIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBydHdfYXV0b19zY2FuX2hhbmRsZXIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKQEAgLTE1ODEsNyArMTYxNCw4IEBACiAJCWlmIChwbWxtZXByaXYtPnNjYW5faW50ZXJ2YWwgPT0gMCkgewogCQkJREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOwogCQkJcnR3X3NldF84MDJfMTFfYnNzaWQyM2FfbGlzdF9zY2FuKHBhZGFwdGVyLCBOVUxMLCAwKTsKLQkJCXBtbG1lcHJpdi0+c2Nhbl9pbnRlcnZhbCA9IFNDQU5fSU5URVJWQUw7LyogIDMwKjIgc2VjID0gNjBzZWMgKi8KKwkJCS8qICAzMCoyIHNlYyA9IDYwc2VjICovCisJCQlwbWxtZXByaXYtPnNjYW5faW50ZXJ2YWwgPSBTQ0FOX0lOVEVSVkFMOwogCQl9CiAJfQogfQpAQCAtMTU5NCw3ICsxNjI4LDggQEAKIAlpZiAoYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQgPT0gZmFsc2UpCiAJCWdvdG8gb3V0OwogCi0JaWYgKChhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9PSB0cnVlKXx8KGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgPT0gdHJ1ZSkpCisJaWYgKGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkID09IHRydWUgfHwKKwkgICAgYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKQogCQlnb3RvIG91dDsKIAogCWlmIChhZGFwdGVyLT5uZXRfY2xvc2VkID09IHRydWUpCkBAIC0xNjAyLDE2ICsxNjM3LDkgQEAKIAogCXJ0d19keW5hbWljX2Noa193a19jbWQyM2EoYWRhcHRlcik7CiAKLQlpZiAocHJlZ2lzdHJ5cHJpdi0+d2lmaV9zcGVjID09IDEpCi0JewotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmYWRhcHRlci0+d2RpbmZvOwotCQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKQotI2VuZGlmCi0JCXsKLQkJCS8qIGF1dG8gc2l0ZSBzdXJ2ZXkgKi8KLQkJCXJ0d19hdXRvX3NjYW5faGFuZGxlcihhZGFwdGVyKTsKLQkJfQorCWlmIChwcmVnaXN0cnlwcml2LT53aWZpX3NwZWMgPT0gMSkgeworCQkvKiBhdXRvIHNpdGUgc3VydmV5ICovCisJCXJ0d19hdXRvX3NjYW5faGFuZGxlcihhZGFwdGVyKTsKIAl9CiBvdXQ6CiAJbW9kX3RpbWVyKCZhZGFwdGVyLT5tbG1lcHJpdi5keW5hbWljX2Noa190aW1lciwKQEAgLTE2MjgsOCArMTY1Niw2IEBACiB7CiAJc3RydWN0IG1sbWVfcHJpdiAqbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CiAJYXRvbWljX3NldCgmbWxtZXByaXYtPnNldF9zY2FuX2RlbnksIDApOwotCWlmICgwKQotCURCR184NzIzQShGVU5DX0FEUFRfRk1UIlxuIiwgRlVOQ19BRFBUX0FSRyhhZGFwdGVyKSk7CiB9CiAKIHZvaWQgcnR3X3NldF9zY2FuX2RlbnlfdGltZXJfaGRsKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTE2NDIsMTIgKzE2NjgsOSBAQAogewogCXN0cnVjdCBtbG1lX3ByaXYgKm1sbWVwcml2ID0gJmFkYXB0ZXItPm1sbWVwcml2OwogCi0JaWYgKDApCi0JREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiXG4iLCBGVU5DX0FEUFRfQVJHKGFkYXB0ZXIpKTsKIAlhdG9taWNfc2V0KCZtbG1lcHJpdi0+c2V0X3NjYW5fZGVueSwgMSk7CiAJbW9kX3RpbWVyKCZtbG1lcHJpdi0+c2V0X3NjYW5fZGVueV90aW1lciwKIAkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOwotCiB9CiAKICNpZiBkZWZpbmVkKElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpCkBAIC0xNjU3LDE1ICsxNjgwLDE5IEBACiAjZW5kaWYKIAogLyoKLSogU2VsZWN0IGEgbmV3IGpvaW4gY2FuZGlkYXRlIGZyb20gdGhlIG9yaWdpbmFsIEBwYXJhbSBjYW5kaWRhdGUgYW5kIEBwYXJhbSBjb21wZXRpdG9yCisqIFNlbGVjdCBhIG5ldyBqb2luIGNhbmRpZGF0ZSBmcm9tIHRoZSBvcmlnaW5hbCBAcGFyYW0gY2FuZGlkYXRlIGFuZAorKiAgICAgQHBhcmFtIGNvbXBldGl0b3IKICogQHJldHVybiB0cnVlOiBjYW5kaWRhdGUgaXMgdXBkYXRlZAogKiBAcmV0dXJuIGZhbHNlOiBjYW5kaWRhdGUgaXMgbm90IHVwZGF0ZWQKICovCi1zdGF0aWMgaW50IHJ0d19jaGVja19qb2luX2NhbmRpZGF0ZShzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYKLQksIHN0cnVjdCB3bGFuX25ldHdvcmsgKipjYW5kaWRhdGUsIHN0cnVjdCB3bGFuX25ldHdvcmsgKmNvbXBldGl0b3IpCitzdGF0aWMgaW50IHJ0d19jaGVja19qb2luX2NhbmRpZGF0ZShzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsCisJCQkJICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKipjYW5kaWRhdGUsCisJCQkJICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKmNvbXBldGl0b3IpCiB7CiAJaW50IHVwZGF0ZWQgPSBmYWxzZTsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2YocG1sbWVwcml2LCBzdHJ1Y3QgcnR3X2FkYXB0ZXIsIG1sbWVwcml2KTsKKwlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlhZGFwdGVyID0gY29udGFpbmVyX29mKHBtbG1lcHJpdiwgc3RydWN0IHJ0d19hZGFwdGVyLCBtbG1lcHJpdik7CiAKIAkvKiBjaGVjayBic3NpZCwgaWYgbmVlZGVkICovCiAJaWYgKHBtbG1lcHJpdi0+YXNzb2NfYnlfYnNzaWQgPT0gdHJ1ZSkgewpAQCAtMTY4NCwxMCArMTcxMSwxMCBAQAogCQkJZ290byBleGl0OwogCX0KIAotCWlmIChydHdfaXNfZGVzaXJlZF9uZXR3b3JrKGFkYXB0ZXIsIGNvbXBldGl0b3IpICA9PSBmYWxzZSkKKwlpZiAocnR3X2lzX2Rlc2lyZWRfbmV0d29yayhhZGFwdGVyLCBjb21wZXRpdG9yKSA9PSBmYWxzZSkKIAkJZ290byBleGl0OwogCi0JaWYgKHJ0d190b19yb2FtaW5nKGFkYXB0ZXIpID4gMCkgeworCWlmIChhZGFwdGVyLT5tbG1lcHJpdi50b19yb2FtaW5nID4gMCkgewogCQl1bnNpZ25lZCBpbnQgcGFzc2VkOwogCiAJCXBhc3NlZCA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGNvbXBldGl0b3ItPmxhc3Rfc2Nhbm5lZCk7CkBAIC0xNjk3LDE5ICsxNzI0LDIxIEBACiAJCQlnb3RvIGV4aXQ7CiAJfQogCi0JaWYgKCpjYW5kaWRhdGUgPT0gTlVMTCB8fCgqY2FuZGlkYXRlKS0+bmV0d29yay5Sc3NpPGNvbXBldGl0b3ItPm5ldHdvcmsuUnNzaSkgeworCWlmICghKmNhbmRpZGF0ZSB8fAorCSAgICAoKmNhbmRpZGF0ZSktPm5ldHdvcmsuUnNzaTxjb21wZXRpdG9yLT5uZXR3b3JrLlJzc2kpIHsKIAkJKmNhbmRpZGF0ZSA9IGNvbXBldGl0b3I7CiAJCXVwZGF0ZWQgPSB0cnVlOwogCX0KIAogCWlmICh1cGRhdGVkKSB7Ci0JCURCR184NzIzQSgiW2J5X2Jzc2lkOiV1XVthc3NvY19zc2lkOiVzXVt0b19yb2FtaW5nOiV1XSBuZXcgY2FuZGlkYXRlOiAlcygiTUFDX0ZNVCIpIHJzc2k6JWRcbiIsCi0JCQlwbWxtZXByaXYtPmFzc29jX2J5X2Jzc2lkLAotCQkJcG1sbWVwcml2LT5hc3NvY19zc2lkLnNzaWQsCi0JCQlydHdfdG9fcm9hbWluZyhhZGFwdGVyKSwKLQkJCSgqY2FuZGlkYXRlKS0+bmV0d29yay5Tc2lkLnNzaWQsCi0JCQlNQUNfQVJHKCgqY2FuZGlkYXRlKS0+bmV0d29yay5NYWNBZGRyZXNzKSwKLQkJCShpbnQpKCpjYW5kaWRhdGUpLT5uZXR3b3JrLlJzc2kpOworCQlEQkdfODcyM0EoIltieV9ic3NpZDoldV1bYXNzb2Nfc3NpZDolc11bdG9fcm9hbWluZzoldV0gIgorCQkJICAibmV3IGNhbmRpZGF0ZTogJXMoIk1BQ19GTVQiKSByc3NpOiVkXG4iLAorCQkJICBwbWxtZXByaXYtPmFzc29jX2J5X2Jzc2lkLAorCQkJICBwbWxtZXByaXYtPmFzc29jX3NzaWQuc3NpZCwKKwkJCSAgYWRhcHRlci0+bWxtZXByaXYudG9fcm9hbWluZywKKwkJCSAgKCpjYW5kaWRhdGUpLT5uZXR3b3JrLlNzaWQuc3NpZCwKKwkJCSAgTUFDX0FSRygoKmNhbmRpZGF0ZSktPm5ldHdvcmsuTWFjQWRkcmVzcyksCisJCQkgIChpbnQpKCpjYW5kaWRhdGUpLT5uZXR3b3JrLlJzc2kpOwogCX0KIAogZXhpdDoKQEAgLTE3MzIsOCArMTc2MSw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcGhlYWQsICpwbGlzdCwgKnB0bXA7CiAJc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCBydHdfcXVldWUgKnF1ZXVlID0gJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZTsKLQlzdHJ1Y3QJd2xhbl9uZXR3b3JrCSpwbmV0d29yayA9IE5VTEw7Ci0Jc3RydWN0CXdsYW5fbmV0d29yawkqY2FuZGlkYXRlID0gTlVMTDsKKwlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yazsKKwlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpjYW5kaWRhdGUgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHF1ZXVlKTsKQEAgLTE3NjAsMTEgKzE3ODksMTEgQEAKIAkJREJHXzg3MjNBKCIlczogY2FuZGlkYXRlOiAlcygiTUFDX0ZNVCIsIGNoOiV1KVxuIiwgX19mdW5jX18sCiAJCQkgIGNhbmRpZGF0ZS0+bmV0d29yay5Tc2lkLnNzaWQsCiAJCQkgIE1BQ19BUkcoY2FuZGlkYXRlLT5uZXR3b3JrLk1hY0FkZHJlc3MpLAotCQkJICBjYW5kaWRhdGUtPm5ldHdvcmsuQ29uZmlndXJhdGlvbi5EU0NvbmZpZyk7CisJCQkgIGNhbmRpZGF0ZS0+bmV0d29yay5EU0NvbmZpZyk7CiAJfQogCiAJLyogIGNoZWNrIGZvciBzaXR1YXRpb24gb2YgIF9GV19MSU5LRUQgKi8KLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpIHsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CiAJCURCR184NzIzQSgiJXM6IF9GV19MSU5LRUQgd2hpbGUgYXNrX2Zvcl9qb2luYnNzISEhXG4iLAogCQkJICBfX2Z1bmNfXyk7CiAKQEAgLTE3ODIsNyArMTgxMSw3IEBACiB9CiAKIGludCBydHdfc2V0X2F1dGgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICogYWRhcHRlciwKLQkJIHN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2KQorCQkgICAgc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYpCiB7CiAJc3RydWN0IGNtZF9vYmoqIHBjbWQ7CiAJc3RydWN0IHNldGF1dGhfcGFybSAqcHNldGF1dGhwYXJtOwpAQCAtMTc5NSw4ICsxODI0LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXBzZXRhdXRocGFybSA9IChzdHJ1Y3Qgc2V0YXV0aF9wYXJtKikKLQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHNldGF1dGhfcGFybSksIEdGUF9LRVJORUwpOworCXBzZXRhdXRocGFybSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXRhdXRoX3Bhcm0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBzZXRhdXRocGFybSkgewogCQlrZnJlZShwY21kKTsKIAkJcmVzID0gX0ZBSUw7CkBAIC0xODExLDggKzE4MzksNiBAQAogCXBjbWQtPnJzcCA9IE5VTEw7CiAJcGNtZC0+cnNwc3ogPSAwOwogCi0JSU5JVF9MSVNUX0hFQUQoJnBjbWQtPmxpc3QpOwotCiAJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sX2Rydl9lcnJfLAogCQkgKCJhZnRlciBlbnF1ZXVlIHNldF9hdXRoX2NtZCwgYXV0aF9tb2RlPSV4XG4iLAogCQkgIHBzZWN1cml0eXByaXYtPmRvdDExQXV0aEFsZ3J0aG0pKTsKQEAgLTE4MjUsNyArMTg1MSw3IEBACiB9CiAKIGludCBydHdfc2V0X2tleTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2LCBpbnQga2V5aWQsIHU4IHNldF90eCkKKwkJICAgc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYsIGludCBrZXlpZCwgdTggc2V0X3R4KQogewogCXU4IGtleWxlbjsKIAlzdHJ1Y3QgY21kX29iaiAqcGNtZDsKQEAgLTE4MzQsNyArMTg2MCwxMiBAQAogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZhZGFwdGVyLT5tbG1lcHJpdjsKIAlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKLQlwY21kID0gKHN0cnVjdCBjbWRfb2JqICopa3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAoa2V5aWQgPj0gNCkgeworCQlyZXMgPSBfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCXBjbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9LRVJORUwpOwogCWlmICghcGNtZCkgewogCQlyZXMgPSBfRkFJTDsgIC8qIHRyeSBhZ2FpbiAqLwogCQlnb3RvIGV4aXQ7CkBAIC0xODUwLDkgKzE4ODEsOSBAQAogCQlwc2V0a2V5cGFybS0+YWxnb3JpdGhtID0gKHVuc2lnbmVkIGNoYXIpCiAJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeTsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKLQkJCSAoIlxuIHJ0d19zZXRfa2V5MjNhOiBwc2V0a2V5cGFybS0+YWxnb3JpdGhtID0gKHVuc2lnbmVkICIKLQkJCSAgImNoYXIpcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSVkXG4iLAotCQkJICBwc2V0a2V5cGFybS0+YWxnb3JpdGhtKSk7CisJCQkgKCJcbiBydHdfc2V0X2tleTIzYTogcHNldGtleXBhcm0tPmFsZ29yaXRobSA9ICIKKwkJCSAgIih1bnNpZ25lZCBjaGFyKXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ICIKKwkJCSAgIj0lZFxuIiwgcHNldGtleXBhcm0tPmFsZ29yaXRobSkpOwogCX0gZWxzZSB7CiAJCXBzZXRrZXlwYXJtLT5hbGdvcml0aG0gPSAodTgpcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobTsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKQEAgLTE4NjAsMTAgKzE4OTEsMTAgQEAKIAkJCSAgInBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSVkXG4iLAogCQkJICBwc2V0a2V5cGFybS0+YWxnb3JpdGhtKSk7CiAJfQotCXBzZXRrZXlwYXJtLT5rZXlpZCA9ICh1OClrZXlpZDsvKiAwfjMgKi8KKwlwc2V0a2V5cGFybS0+a2V5aWQgPSBrZXlpZDsvKiAwfjMgKi8KIAlwc2V0a2V5cGFybS0+c2V0X3R4ID0gc2V0X3R4OwogCWlmIChpc193ZXBfZW5jKHBzZXRrZXlwYXJtLT5hbGdvcml0aG0pKQotCQlwbWxtZXByaXYtPmtleV9tYXNrIHw9IENIS0JJVChwc2V0a2V5cGFybS0+a2V5aWQpOworCQlwbWxtZXByaXYtPmtleV9tYXNrIHw9IEJJVChwc2V0a2V5cGFybS0+a2V5aWQpOwogCiAJREJHXzg3MjNBKCI9PT4gcnR3X3NldF9rZXkyM2EgYWxnb3JpdGhtKCV4KSwga2V5aWQoJXgpLCBrZXlfbWFzaygleClcbiIsCiAJCSAgcHNldGtleXBhcm0tPmFsZ29yaXRobSwgcHNldGtleXBhcm0tPmtleWlkLApAQCAtMTg3MywyMyArMTkwNCwyMyBAQAogCQkgICJrZXlpZCA9ICh1OClrZXlpZCA9JWRcbiIsIHBzZXRrZXlwYXJtLT5hbGdvcml0aG0sIGtleWlkKSk7CiAKIAlzd2l0Y2ggKHBzZXRrZXlwYXJtLT5hbGdvcml0aG0pIHsKLQljYXNlIF9XRVA0MF86CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJa2V5bGVuID0gNTsKIAkJbWVtY3B5KCZwc2V0a2V5cGFybS0+a2V5WzBdLAotCQkgICAgICAgJnBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W2tleWlkXS5za2V5WzBdLCBrZXlsZW4pOworCQkgICAgICAgJnBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aWRdLmtleSwga2V5bGVuKTsKIAkJYnJlYWs7Ci0JY2FzZSBfV0VQMTA0XzoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAkJa2V5bGVuID0gMTM7CiAJCW1lbWNweSgmcHNldGtleXBhcm0tPmtleVswXSwKLQkJICAgICAgICZwc2VjdXJpdHlwcml2LT5kb3QxMURlZktleVtrZXlpZF0uc2tleVswXSwga2V5bGVuKTsKKwkJICAgICAgICZwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleWlkXS5rZXksIGtleWxlbik7CiAJCWJyZWFrOwotCWNhc2UgX1RLSVBfOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKIAkJa2V5bGVuID0gMTY7CiAJCW1lbWNweSgmcHNldGtleXBhcm0tPmtleSwKIAkJICAgICAgICZwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwS2V5W2tleWlkXSwga2V5bGVuKTsKIAkJcHNldGtleXBhcm0tPmdycGtleSA9IDE7CiAJCWJyZWFrOwotCWNhc2UgX0FFU186CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQlrZXlsZW4gPSAxNjsKIAkJbWVtY3B5KCZwc2V0a2V5cGFybS0+a2V5LAogCQkgICAgICAgJnBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBLZXlba2V5aWRdLCBrZXlsZW4pOwpAQCAtMTg5Nyw4ICsxOTI4LDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKLQkJCSAoIlxuIHJ0d19zZXRfa2V5MjNhOnBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSAiCi0JCQkgICIleCAobXVzdCBiZSAxIG9yIDIgb3IgNCBvciA1KVxuIiwKKwkJCSAoIlxuIHJ0d19zZXRfa2V5MjNhOnBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0iCisJCQkgICIgPSAleCAobXVzdCBiZSAxIG9yIDIgb3IgNCBvciA1KVxuIiwKIAkJCSAgcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSkpOwogCQlyZXMgPSBfRkFJTDsKIAkJa2ZyZWUocGNtZCk7CkBAIC0xOTEyLDggKzE5NDMsNiBAQAogCXBjbWQtPnJzcCA9IE5VTEw7CiAJcGNtZC0+cnNwc3ogPSAwOwogCi0JSU5JVF9MSVNUX0hFQUQoJnBjbWQtPmxpc3QpOwotCiAJLyogc2VtYV9pbml0KCZwY21kLT5jbWRfc2VtLCAwKTsgKi8KIAogCXJlcyA9IHJ0d19lbnF1ZXVlX2NtZDIzYShwY21kcHJpdiwgcGNtZCk7CkBAIC0xOTMxLDcgKzE5NjAsNyBAQAogCXVuc2lnbmVkIGludCBpLCBqOwogCiAJaSA9IDEyOyAvKiBhZnRlciB0aGUgZml4ZWQgSUUgKi8KLQl3aGlsZShpIDwgaW5fbGVuKSB7CisJd2hpbGUgKGkgPCBpbl9sZW4pIHsKIAkJaWVsZW5ndGggPSBpbml0aWFsX291dF9sZW47CiAKIAkJLyogV01NIGVsZW1lbnQgSUQgYW5kIE9VSSAqLwpAQCAtMTk4MiwxMSArMjAxMSwxMSBAQAogCQkJaSsrOwogCQkJLyogY29udGludWU7ICovCiAJCX0KLQl9IHdoaWxlKGkgPCBOVU1fUE1LSURfQ0FDSEUpOworCX0gd2hpbGUgKGkgPCBOVU1fUE1LSURfQ0FDSEUpOwogCi0JaWYgKGkgPT0gTlVNX1BNS0lEX0NBQ0hFKSB7CisJaWYgKGkgPT0gTlVNX1BNS0lEX0NBQ0hFKQogCQlpID0gLTE7LyogIENvdWxkIG5vdCBmaW5kLiAqLwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCS8qICBUaGVyZSBpcyBvbmUgUHJlLUF1dGhlbnRpY2F0aW9uIEtleSBmb3IKIAkJICAgIHRoZSBzcGVjaWZpYyBCU1NJRC4gKi8KIAl9CkBAIC0yMDIzLDggKzIwNTIsOSBAQAogCX0KIAlyZXR1cm4gaWVfbGVuOwogfQorCiBpbnQgcnR3X3Jlc3RydWN0X3NlY19pZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICppbl9pZSwgdTggKm91dF9pZSwKLQkJCXVpbnQgaW5fbGVuKQorCQkJICAgdWludCBpbl9sZW4pCiB7CiAJdTggYXV0aG1vZGU7CiAJdWludCBpZWxlbmd0aDsKQEAgLTIwMzUsNDEgKzIwNjUsMzkgQEAKIAl1aW50IG5kaXNzZWN1cml0eXR5cGUgPSBwc2VjdXJpdHlwcml2LT5uZGlzZW5jcnlwdHN0YXR1czsKIAogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X25vdGljZV8sCi0JCSAoIitydHdfcmVzdHJ1Y3Rfc2VjX2llMjNhOiBuZGlzYXV0aG1vZGU9JWQgbmRpc3NlY3VyaXR5dHlwZT0lZFxuIiwKLQkJICBuZGlzYXV0aG1vZGUsIG5kaXNzZWN1cml0eXR5cGUpKTsKKwkJICgiK3J0d19yZXN0cnVjdF9zZWNfaWUyM2E6IG5kaXNhdXRobW9kZT0lZCAiCisJCSAgIm5kaXNzZWN1cml0eXR5cGU9JWRcbiIsIG5kaXNhdXRobW9kZSwgbmRpc3NlY3VyaXR5dHlwZSkpOwogCiAJLyogY29weSBmaXhlZCBpZSBvbmx5ICovCiAJbWVtY3B5KG91dF9pZSwgaW5faWUsIDEyKTsKIAlpZWxlbmd0aCA9IDEyOwotCWlmICgobmRpc2F1dGhtb2RlPT1OZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8Ci0JICAgIChuZGlzYXV0aG1vZGU9PU5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCi0JCWF1dGhtb2RlPV9XUEFfSUVfSURfOwotCWlmICgobmRpc2F1dGhtb2RlPT1OZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fAotCSAgICAobmRpc2F1dGhtb2RlPT1OZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKLQkJYXV0aG1vZGU9X1dQQTJfSUVfSURfOworCWlmIChuZGlzYXV0aG1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBIHx8CisJICAgIG5kaXNhdXRobW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCisJCWF1dGhtb2RlID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOworCWlmIChuZGlzYXV0aG1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMiB8fAorCSAgICBuZGlzYXV0aG1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKwkJYXV0aG1vZGUgPSBfV1BBMl9JRV9JRF87CiAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfVU5ERVJfV1BTKSkgewogCQltZW1jcHkob3V0X2llICsgaWVsZW5ndGgsIHBzZWN1cml0eXByaXYtPndwc19pZSwKIAkJICAgICAgIHBzZWN1cml0eXByaXYtPndwc19pZV9sZW4pOwogCiAJCWllbGVuZ3RoICs9IHBzZWN1cml0eXByaXYtPndwc19pZV9sZW47Ci0JfSBlbHNlIGlmICgoYXV0aG1vZGU9PV9XUEFfSUVfSURfKSB8fCAoYXV0aG1vZGU9PV9XUEEyX0lFX0lEXykpIHsKKwl9IGVsc2UgaWYgKGF1dGhtb2RlID09IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQyB8fAorCQkgICBhdXRobW9kZSA9PSBfV1BBMl9JRV9JRF8pIHsKIAkJLyogY29weSBSU04gb3IgU1NOICovCiAJCW1lbWNweSgmb3V0X2llW2llbGVuZ3RoXSwgJnBzZWN1cml0eXByaXYtPnN1cHBsaWNhbnRfaWVbMF0sCiAJCSAgICAgICBwc2VjdXJpdHlwcml2LT5zdXBwbGljYW50X2llWzFdICsgMik7CiAJCWllbGVuZ3RoICs9IHBzZWN1cml0eXByaXYtPnN1cHBsaWNhbnRfaWVbMV0gKyAyOwotCQlydHdfcmVwb3J0X3NlY19pZTIzYShhZGFwdGVyLCBhdXRobW9kZSwKLQkJCQkgIHBzZWN1cml0eXByaXYtPnN1cHBsaWNhbnRfaWUpOwogCX0KIAogCWlFbnRyeSA9IFNlY0lzSW5QTUtJRExpc3QoYWRhcHRlciwgcG1sbWVwcml2LT5hc3NvY19ic3NpZCk7Ci0JaWYgKGlFbnRyeSA8IDApCXsKKwlpZiAoaUVudHJ5IDwgMCkKIAkJcmV0dXJuIGllbGVuZ3RoOwotCX0gZWxzZSB7Ci0JCWlmIChhdXRobW9kZSA9PSBfV1BBMl9JRV9JRF8pIHsKLQkJCWllbGVuZ3RoPXJ0d19hcHBlbmRfcG1raWQoYWRhcHRlciwgaUVudHJ5LAotCQkJCQkJICBvdXRfaWUsIGllbGVuZ3RoKTsKLQkJfQorCWVsc2UgeworCQlpZiAoYXV0aG1vZGUgPT0gX1dQQTJfSUVfSURfKQorCQkJaWVsZW5ndGggPSBydHdfYXBwZW5kX3Bta2lkKGFkYXB0ZXIsIGlFbnRyeSwKKwkJCQkJCSAgICBvdXRfaWUsIGllbGVuZ3RoKTsKIAl9CiAKIAlyZXR1cm4gaWVsZW5ndGg7CkBAIC0yMDg3LDEzICsyMTE1LDcgQEAKIAltZW1jcHkoJnBkZXZfbmV0d29yay0+U3NpZCwgJnByZWdpc3RyeXByaXYtPnNzaWQsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkpOwogCi0JcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkxlbmd0aD1zaXplb2Yoc3RydWN0IG5kaXNfODAyXzExX2NvbmZpZyk7Ci0JcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkJlYWNvblBlcmlvZCA9IDEwMDsKLQlwZGV2X25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRkhDb25maWcuTGVuZ3RoID0gMDsKLQlwZGV2X25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRkhDb25maWcuSG9wUGF0dGVybiA9IDA7Ci0JcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkZIQ29uZmlnLkhvcFNldCA9IDA7Ci0JcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkZIQ29uZmlnLkR3ZWxsVGltZSA9IDA7Ci0KKwlwZGV2X25ldHdvcmstPkJlYWNvblBlcmlvZCA9IDEwMDsKIH0KIAogdm9pZCBydHdfdXBkYXRlX3JlZ2lzdHJ5cHJpdl9kZXZfbmV0d29yazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIGFkYXB0ZXIpCkBAIC0yMTEwLDQ0ICsyMTMyLDE1IEBACiAKIAlwZGV2X25ldHdvcmstPlJzc2kgPSAwOwogCi0Jc3dpdGNoIChwcmVnaXN0cnlwcml2LT53aXJlbGVzc19tb2RlKQotCXsKLQljYXNlIFdJUkVMRVNTXzExQjoKLQkJcGRldl9uZXR3b3JrLT5OZXR3b3JrVHlwZUluVXNlID0gTmRpczgwMl8xMURTOwotCQlicmVhazsKLQljYXNlIFdJUkVMRVNTXzExRzoKLQljYXNlIFdJUkVMRVNTXzExQkc6Ci0JY2FzZSBXSVJFTEVTU18xMV8yNE46Ci0JY2FzZSBXSVJFTEVTU18xMUdfMjROOgotCWNhc2UgV0lSRUxFU1NfMTFCR18yNE46Ci0JCXBkZXZfbmV0d29yay0+TmV0d29ya1R5cGVJblVzZSA9IE5kaXM4MDJfMTFPRkRNMjQ7Ci0JCWJyZWFrOwotCWNhc2UgV0lSRUxFU1NfMTFBOgotCWNhc2UgV0lSRUxFU1NfMTFBXzVOOgotCQlwZGV2X25ldHdvcmstPk5ldHdvcmtUeXBlSW5Vc2UgPSBOZGlzODAyXzExT0ZETTU7Ci0JCWJyZWFrOwotCWNhc2UgV0lSRUxFU1NfMTFBQkdOOgotCQlpZiAocHJlZ2lzdHJ5cHJpdi0+Y2hhbm5lbCA+IDE0KQotCQkJcGRldl9uZXR3b3JrLT5OZXR3b3JrVHlwZUluVXNlID0gTmRpczgwMl8xMU9GRE01OwotCQllbHNlCi0JCQlwZGV2X25ldHdvcmstPk5ldHdvcmtUeXBlSW5Vc2UgPSBOZGlzODAyXzExT0ZETTI0OwotCQlicmVhazsKLQlkZWZhdWx0IDoKLQkJLyogIFRPRE8gKi8KLQkJYnJlYWs7Ci0JfQotCi0JcGRldl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnID0gcHJlZ2lzdHJ5cHJpdi0+Y2hhbm5lbDsKKwlwZGV2X25ldHdvcmstPkRTQ29uZmlnID0gcHJlZ2lzdHJ5cHJpdi0+Y2hhbm5lbDsKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKLQkJICgicHJlZ2lzdHJ5cHJpdi0+Y2hhbm5lbCA9JWQsIHBkZXZfbmV0d29yay0+Q29uZmlndXJhdGlvbi4iCi0JCSAgIkRTQ29uZmlnID0gMHgleFxuIiwgcHJlZ2lzdHJ5cHJpdi0+Y2hhbm5lbCwKLQkJICBwZGV2X25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWcpKTsKKwkJICgicHJlZ2lzdHJ5cHJpdi0+Y2hhbm5lbCA9JWQsIHBkZXZfbmV0d29yay0+RFNDb25maWcgPSAweCV4XG4iLAorCQkgIHByZWdpc3RyeXByaXYtPmNoYW5uZWwsIHBkZXZfbmV0d29yay0+RFNDb25maWcpKTsKIAotCWlmIChjdXJfbmV0d29yay0+bmV0d29yay5JbmZyYXN0cnVjdHVyZU1vZGUgPT0gTmRpczgwMl8xMUlCU1MpCi0JCXBkZXZfbmV0d29yay0+Q29uZmlndXJhdGlvbi5BVElNV2luZG93ID0gMDsKKwlpZiAoY3VyX25ldHdvcmstPm5ldHdvcmsuaWZtb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlwZGV2X25ldHdvcmstPkFUSU1XaW5kb3cgPSAwOwogCi0JcGRldl9uZXR3b3JrLT5JbmZyYXN0cnVjdHVyZU1vZGUgPQotCQljdXJfbmV0d29yay0+bmV0d29yay5JbmZyYXN0cnVjdHVyZU1vZGU7CisJcGRldl9uZXR3b3JrLT5pZm1vZGUgPSBjdXJfbmV0d29yay0+bmV0d29yay5pZm1vZGU7CiAKIAkvKiAgMS4gU3VwcG9ydGVkIHJhdGVzICovCiAJLyogIDIuIElFICovCkBAIC0yMTU3LDEyICsyMTUwLDExIEBACiAJcGRldl9uZXR3b3JrLT5JRUxlbmd0aCA9IHN6OwogCiAJcGRldl9uZXR3b3JrLT5MZW5ndGggPQotCQlnZXRfd2xhbl9ic3NpZF9leF9zeigoc3RydWN0IHdsYW5fYnNzaWRfZXggKilwZGV2X25ldHdvcmspOworCQlnZXRfd2xhbl9ic3NpZF9leF9zeihwZGV2X25ldHdvcmspOwogCiAJLyogbm90ZXM6IHRyYW5zbGF0ZSBJRUxlbmd0aCAmIExlbmd0aCBhZnRlciBhc3NpZ24gdGhlCiAJICAgTGVuZ3RoIHRvIGNtZHN6IGluIGNyZWF0ZWJzc19jbWQoKTsgKi8KIAkvKiBwZGV2X25ldHdvcmstPklFTGVuZ3RoID0gY3B1X3RvX2xlMzIoc3opOyAqLwotCiB9CiAKIHZvaWQgcnR3X2dldF9lbmNyeXB0X2RlY3J5cHRfZnJvbV9yZWdpc3RyeXByaXYyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKiBhZGFwdGVyKQpAQCAtMjE5Myw0MSArMjE4NSwzOCBAQAogCQkJdGhyZXNob2xkID0gMTsKIAkJZWxzZQogCQkJdGhyZXNob2xkID0gMDsKLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9SWERNQV9BR0dfUEdfVEgsCi0JCQkJICAodTggKikoJnRocmVzaG9sZCkpOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXRocmVzaG9sZCA9IDE7Ci0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfUlhETUFfQUdHX1BHX1RILAotCQkJCSAgKHU4ICopKCZ0aHJlc2hvbGQpKTsKLQl9CisKKwlydGw4NzIzYV9zZXRfcnhkbWFfYWdnX3BnX3RoKHBhZGFwdGVyLCB0aHJlc2hvbGQpOwogfQogCiAvKiB0aGUgZnVjbnRpb24gaXMgPj0gcGFzc2l2ZV9sZXZlbCAqLwogdW5zaWduZWQgaW50IHJ0d19yZXN0cnVjdHVyZV9odF9pZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqaW5faWUsCi0JCQkJICAgdTggKm91dF9pZSwgdWludCBpbl9sZW4sIHVpbnQgKnBvdXRfbGVuKQorCQkJCSAgICAgIHU4ICpvdXRfaWUsIHVpbnQgaW5fbGVuLCB1aW50ICpwb3V0X2xlbikKIHsKLQl1MzIgaWVsZW4sIG91dF9sZW47CisJdTMyIG91dF9sZW47CiAJaW50IG1heF9yeF9hbXBkdV9mYWN0b3I7Ci0JdW5zaWduZWQgY2hhciAqcCwgKnBmcmFtZTsKKwl1bnNpZ25lZCBjaGFyICpwZnJhbWU7CisJY29uc3QgdTggKnA7CiAJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgaHRfY2FwaWU7CiAJdW5zaWduZWQgY2hhciBXTU1fSUVbXSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAwLCAweDAxLCAweDAwfTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCBxb3NfcHJpdiAqcHFvc3ByaXYgPSAmcG1sbWVwcml2LT5xb3Nwcml2OwogCXN0cnVjdCBodF9wcml2ICpwaHRwcml2ID0gJnBtbG1lcHJpdi0+aHRwcml2OwogCiAJcGh0cHJpdi0+aHRfb3B0aW9uID0gZmFsc2U7CiAKLQlwID0gcnR3X2dldF9pZTIzYShpbl9pZSArIDEyLCBfSFRfQ0FQQUJJTElUWV9JRV8sICZpZWxlbiwgaW5fbGVuIC0gMTIpOworCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksIGluX2llICsgMTIsIGluX2xlbiAtMTIpOwogCi0JaWYgKHAgJiYgaWVsZW4gPiAwKSB7CisJaWYgKHAgJiYgcFsxXSA+IDApIHsKIAkJdTMyIHJ4X3BhY2tldF9vZmZzZXQsIG1heF9yZWN2YnVmX3N6OwotCQlpZiAocHFvc3ByaXYtPnFvc19vcHRpb24gPT0gMCkgeworCQlpZiAocG1sbWVwcml2LT5xb3Nfb3B0aW9uID09IDApIHsKIAkJCW91dF9sZW4gPSAqcG91dF9sZW47CiAJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKG91dF9pZSArIG91dF9sZW4sCi0JCQkJCSAgICBfVkVORE9SX1NQRUNJRklDX0lFXywKKwkJCQkJICAgIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywKIAkJCQkJICAgIF9XTU1fSUVfTGVuZ3RoXywgV01NX0lFLCBwb3V0X2xlbik7CiAKLQkJCXBxb3Nwcml2LT5xb3Nfb3B0aW9uID0gMTsKKwkJCXBtbG1lcHJpdi0+cW9zX29wdGlvbiA9IDE7CiAJCX0KIAogCQlvdXRfbGVuID0gKnBvdXRfbGVuOwpAQCAtMjIzOCwzMyArMjIyNywzNiBAQAogCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfCBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8CiAJCQlJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkMgfCBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKIAotCQlydHdfaGFsX2dldF9kZWZfdmFyMjNhKHBhZGFwdGVyLCBIQUxfREVGX1JYX1BBQ0tFVF9PRkZTRVQsCi0JCQkJICAgICZyeF9wYWNrZXRfb2Zmc2V0KTsKLQkJcnR3X2hhbF9nZXRfZGVmX3ZhcjIzYShwYWRhcHRlciwgSEFMX0RFRl9NQVhfUkVDVkJVRl9TWiwKLQkJCQkgICAgJm1heF9yZWN2YnVmX3N6KTsKKwkJR2V0SGFsRGVmVmFyODE5MkNVc2IocGFkYXB0ZXIsIEhBTF9ERUZfUlhfUEFDS0VUX09GRlNFVCwKKwkJCQkgICAgICZyeF9wYWNrZXRfb2Zmc2V0KTsKKwkJR2V0SGFsRGVmVmFyODE5MkNVc2IocGFkYXB0ZXIsIEhBTF9ERUZfTUFYX1JFQ1ZCVUZfU1osCisJCQkJICAgICAmbWF4X3JlY3ZidWZfc3opOwogCi0JCXJ0d19oYWxfZ2V0X2RlZl92YXIyM2EocGFkYXB0ZXIsIEhXX1ZBUl9NQVhfUlhfQU1QRFVfRkFDVE9SLAotCQkJCSAgICAmbWF4X3J4X2FtcGR1X2ZhY3Rvcik7CisJCUdldEhhbERlZlZhcjgxOTJDVXNiKHBhZGFwdGVyLCBIV19WQVJfTUFYX1JYX0FNUERVX0ZBQ1RPUiwKKwkJCQkgICAgICZtYXhfcnhfYW1wZHVfZmFjdG9yKTsKIAkJaHRfY2FwaWUuYW1wZHVfcGFyYW1zX2luZm8gPSBtYXhfcnhfYW1wZHVfZmFjdG9yICYgMHgwMzsKIAotCQlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09IF9BRVNfKQorCQlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09CisJCSAgICBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKQogCQkJaHRfY2FwaWUuYW1wZHVfcGFyYW1zX2luZm8gfD0KIAkJCQkoSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWSYgKDB4MDcgPDwgMikpOwogCQllbHNlCiAJCQlodF9jYXBpZS5hbXBkdV9wYXJhbXNfaW5mbyB8PQogCQkJCShJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZICYgMHgwMCk7CiAKLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShvdXRfaWUgKyBvdXRfbGVuLCBfSFRfQ0FQQUJJTElUWV9JRV8sCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2Eob3V0X2llICsgb3V0X2xlbiwgV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSwKIAkJCQkgICAgKHVuc2lnbmVkIGNoYXIqKSZodF9jYXBpZSwgcG91dF9sZW4pOwogCiAJCXBodHByaXYtPmh0X29wdGlvbiA9IHRydWU7CiAKLQkJcCA9IHJ0d19nZXRfaWUyM2EoaW5faWUgKyAxMiwgX0hUX0FERF9JTkZPX0lFXywgJmllbGVuLCBpbl9sZW4tMTIpOwotCQlpZiAocCAmJiAoaWVsZW4gPT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvKSkpIHsKKwkJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfT1BFUkFUSU9OLCBpbl9pZSArIDEyLAorCQkJCSAgICAgaW5fbGVuIC0xMik7CisJCWlmIChwICYmIChwWzFdID09IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbykpKSB7CiAJCQlvdXRfbGVuID0gKnBvdXRfbGVuOwotCQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShvdXRfaWUgKyBvdXRfbGVuLCBfSFRfQUREX0lORk9fSUVfLAotCQkJCQkgICAgaWVsZW4sIHAgKyAyICwgcG91dF9sZW4pOworCQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShvdXRfaWUgKyBvdXRfbGVuLAorCQkJCQkgICAgICAgV0xBTl9FSURfSFRfT1BFUkFUSU9OLAorCQkJCQkgICAgICAgcFsxXSwgcCArIDIgLCBwb3V0X2xlbik7CiAJCX0KIAl9CiAKQEAgLTIyNzQsMTkgKzIyNjYsMTYgQEAKIC8qIHRoZSBmdWNudGlvbiBpcyA+IHBhc3NpdmVfbGV2ZWwgKGluIGNyaXRpY2FsX3NlY3Rpb24pICovCiB2b2lkIHJ0d191cGRhdGVfaHRfY2FwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwaWUsIHVpbnQgaWVfbGVuKQogewotCXU4ICpwLCBtYXhfYW1wZHVfc3o7Ci0JaW50IGxlbjsKLQkvKiBzdHJ1Y3Qgc3RhX2luZm8gKmJtY19zdGEsICpwc3RhOyAqLworCXU4IG1heF9hbXBkdV9zejsKKwljb25zdCB1OCAqcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqcGh0X2NhcGllOwogCXN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICpwaHRfYWRkdGluZm87Ci0JLyogc3RydWN0IHJlY3ZfcmVvcmRlcl9jdHJsICpwcmVvcmRlcl9jdHJsOyAqLwotCXN0cnVjdCBtbG1lX3ByaXYJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IGh0X3ByaXYJCSpwaHRwcml2ID0gJnBtbG1lcHJpdi0+aHRwcml2OwotCS8qIHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdiA9ICZwYWRhcHRlci0+cmVjdnByaXY7ICovCisJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKKwlzdHJ1Y3QgaHRfcHJpdiAqcGh0cHJpdiA9ICZwbWxtZXByaXYtPmh0cHJpdjsKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OwotCS8qIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOzsgKi8KLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CisJaW50IGJjbl9maXhlZF9zaXplOwogCiAJaWYgKCFwaHRwcml2LT5odF9vcHRpb24pCiAJCXJldHVybjsKQEAgLTIyOTYsNTEgKzIyODUsNTQgQEAKIAogCURCR184NzIzQSgiK3J0d191cGRhdGVfaHRfY2FwMjNhKClcbiIpOwogCisJYmNuX2ZpeGVkX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKSAtCisJCW9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24pOworCisJLyogQWRqdXN0IHBpZSArIGllX2xlbiBmb3Igb3VyIHNlYXJjaGVzICovCisJcGllICs9IGJjbl9maXhlZF9zaXplOworCWllX2xlbiAtPSBiY25fZml4ZWRfc2l6ZTsKKwogCS8qIG1heWJlIG5lZWRzIGNoZWNrIGlmIGFwIHN1cHBvcnRzIHJ4IGFtcGR1LiAqLwotCWlmICgocGh0cHJpdi0+YW1wZHVfZW5hYmxlID09IGZhbHNlKSAmJiAocHJlZ2lzdHJ5cHJpdi0+YW1wZHVfZW5hYmxlID09IDEpKSB7CisJaWYgKHBodHByaXYtPmFtcGR1X2VuYWJsZSA9PSBmYWxzZSAmJgorCSAgICBwcmVnaXN0cnlwcml2LT5hbXBkdV9lbmFibGUgPT0gMSkgewogCQlpZiAocHJlZ2lzdHJ5cHJpdi0+d2lmaV9zcGVjID09IDEpCiAJCQlwaHRwcml2LT5hbXBkdV9lbmFibGUgPSBmYWxzZTsKIAkJZWxzZQogCQkJcGh0cHJpdi0+YW1wZHVfZW5hYmxlID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKHByZWdpc3RyeXByaXYtPmFtcGR1X2VuYWJsZSA9PSAyKSB7CisJfSBlbHNlIGlmIChwcmVnaXN0cnlwcml2LT5hbXBkdV9lbmFibGUgPT0gMikKIAkJcGh0cHJpdi0+YW1wZHVfZW5hYmxlID0gdHJ1ZTsKLQl9CiAKIAkvKiBjaGVjayBNYXggUnggQS1NUERVIFNpemUgKi8KLQlsZW4gPSAwOwotCXAgPSBydHdfZ2V0X2llMjNhKHBpZStzaXplb2YgKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpLCBfSFRfQ0FQQUJJTElUWV9JRV8sICZsZW4sIGllX2xlbi1zaXplb2YgKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpKTsKLQlpZiAocCAmJiBsZW4gPiAwKSB7Ci0JCXBodF9jYXBpZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKShwKzIpOwotCQltYXhfYW1wZHVfc3ogPSAocGh0X2NhcGllLT5hbXBkdV9wYXJhbXNfaW5mbyAmIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0ZBQ1RPUik7Ci0JCW1heF9hbXBkdV9zeiA9IDEgPDwgKG1heF9hbXBkdV9zeiszKTsgLyogIG1heF9hbXBkdV9zeiAoa2J5dGVzKTsgKi8KKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9DQVBBQklMSVRZLCBwaWUsIGllX2xlbik7CiAKLQkJLyogREJHXzg3MjNBKCJydHdfdXBkYXRlX2h0X2NhcDIzYSgpOiBtYXhfYW1wZHVfc3ogPSVkXG4iLCBtYXhfYW1wZHVfc3opOyAqLworCWlmIChwICYmIHBbMV0gPiAwKSB7CisJCXBodF9jYXBpZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKShwICsgMik7CisJCW1heF9hbXBkdV9zeiA9IHBodF9jYXBpZS0+YW1wZHVfcGFyYW1zX2luZm8gJgorCQkJSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fRkFDVE9SOworCQkvKiAgbWF4X2FtcGR1X3N6IChrYnl0ZXMpOyAqLworCQltYXhfYW1wZHVfc3ogPSAxIDw8IChtYXhfYW1wZHVfc3ogKyAzKTsKKwogCQlwaHRwcml2LT5yeF9hbXBkdV9tYXhsZW4gPSBtYXhfYW1wZHVfc3o7Ci0KIAl9CiAKLQlsZW4gPSAwOwotCXAgPSBydHdfZ2V0X2llMjNhKHBpZStzaXplb2YgKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpLCBfSFRfQUREX0lORk9fSUVfLCAmbGVuLCBpZV9sZW4tc2l6ZW9mIChzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKSk7Ci0JaWYgKHAgJiYgbGVuPjApCi0JewotCQlwaHRfYWRkdGluZm8gPSAoc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKikocCsyKTsKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9PUEVSQVRJT04sIHBpZSwgaWVfbGVuKTsKKwlpZiAocCAmJiBwWzFdID4gMCkgeworCQlwaHRfYWRkdGluZm8gPSAoc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKikocCArIDIpOwogCQkvKiB0b2RvOiAqLwogCX0KIAogCS8qIHVwZGF0ZSBjdXJfYndtb2RlICYgY3VyX2NoX29mZnNldCAqLwotCWlmICgocHJlZ2lzdHJ5cHJpdi0+Y2J3NDBfZW5hYmxlKSAmJgotCQkocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfY2Fwc19pbmZvICYgQklUKDEpKSAmJgotCQkocG1sbWVpbmZvLT5IVF9pbmZvLmluZm9zWzBdICYgQklUKDIpKSkKLQl7CisJaWYgKHByZWdpc3RyeXByaXYtPmNidzQwX2VuYWJsZSAmJgorCSAgICBwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8gJiBCSVQoMSkgJiYKKwkgICAgcG1sbWVpbmZvLT5IVF9pbmZvLmluZm9zWzBdICYgQklUKDIpKSB7CiAJCWludCBpOwotCQl1OAlyZl90eXBlOworCQl1OCByZl90eXBlOwogCi0JCXBhZGFwdGVyLT5IYWxGdW5jLkdldEh3UmVnSGFuZGxlcihwYWRhcHRlciwgSFdfVkFSX1JGX1RZUEUsICh1OCAqKSgmcmZfdHlwZSkpOworCQlyZl90eXBlID0gcnRsODcyM2FfZ2V0X3JmX3R5cGUocGFkYXB0ZXIpOwogCiAJCS8qIHVwZGF0ZSB0aGUgTUNTIHJhdGVzICovCi0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQl7Ci0JCQlpZiAoKHJmX3R5cGUgPT0gUkZfMVQxUikgfHwgKHJmX3R5cGUgPT0gUkZfMVQyUikpCisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQlpZiAocmZfdHlwZSA9PSBSRl8xVDFSIHx8IHJmX3R5cGUgPT0gUkZfMVQyUikKIAkJCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVtpXSAmPSBNQ1NfcmF0ZV8xUjIzQVtpXTsKIAkJCWVsc2UKIAkJCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVtpXSAmPSBNQ1NfcmF0ZV8yUjIzQVtpXTsKQEAgLTIzNDksMjQgKzIzNDEsMjYgQEAKIAkJcG1sbWVleHQtPmN1cl9id21vZGUgPSBIVF9DSEFOTkVMX1dJRFRIXzQwOwogCQlzd2l0Y2ggKChwbWxtZWluZm8tPkhUX2luZm8uaW5mb3NbMF0gJiAweDMpKQogCQl7Ci0JCQljYXNlIEhUX0VYVENITkxfT0ZGU0VUX1VQUEVSOgotCQkJCXBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0ID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0xPV0VSOwotCQkJCWJyZWFrOworCQljYXNlIEhUX0VYVENITkxfT0ZGU0VUX1VQUEVSOgorCQkJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfTE9XRVI7CisJCQlicmVhazsKIAotCQkJY2FzZSBIVF9FWFRDSE5MX09GRlNFVF9MT1dFUjoKLQkJCQlwbWxtZWV4dC0+Y3VyX2NoX29mZnNldCA9IEhBTF9QUklNRV9DSE5MX09GRlNFVF9VUFBFUjsKLQkJCQlicmVhazsKKwkJY2FzZSBIVF9FWFRDSE5MX09GRlNFVF9MT1dFUjoKKwkJCXBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0ID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX1VQUEVSOworCQkJYnJlYWs7CiAKLQkJCWRlZmF1bHQ6Ci0JCQkJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOwotCQkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPQorCQkJCUhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkU7CisJCQlicmVhazsKIAkJfQogCX0KIAogCS8qICAqLwogCS8qICBDb25maWcgU00gUG93ZXIgU2F2ZSBzZXR0aW5nICovCiAJLyogICovCi0JcG1sbWVpbmZvLT5TTV9QUyA9IChwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8gJiAweDBDKSA+PiAyOworCXBtbG1laW5mby0+U01fUFMgPSAocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfY2Fwc19pbmZvICYKKwkJCSAgICAweDBDKSA+PiAyOwogCWlmIChwbWxtZWluZm8tPlNNX1BTID09IFdMQU5fSFRfQ0FQX1NNX1BTX1NUQVRJQykKIAkJREJHXzg3MjNBKCIlcygpOiBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUNcbiIsIF9fZnVuY19fKTsKIApAQCAtMjM3NiwxMjQgKzIzNzAsNjQgQEAKIAlwbWxtZWluZm8tPkhUX3Byb3RlY3Rpb24gPSBwbWxtZWluZm8tPkhUX2luZm8uaW5mb3NbMV0gJiAweDM7CiB9CiAKLXZvaWQgcnR3X2lzc3VlX2FkZGJhcmVxX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKK3ZvaWQgcnR3X2lzc3VlX2FkZGJhcmVxX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQogewogCXU4IGlzc3VlZDsKIAlpbnQgcHJpb3JpdHk7Ci0Jc3RydWN0IHN0YV9pbmZvICpwc3RhID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJc3RydWN0IGh0X3ByaXYJKnBodHByaXY7CiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWIgPSAmcHhtaXRmcmFtZS0+YXR0cmliOwogCXMzMiBibWNzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBhdHRyaWItPnJhKTsKIAotCWlmIChibWNzdCB8fCAocGFkYXB0ZXItPm1sbWVwcml2LkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZDwxMDApKQorCWlmIChibWNzdCB8fCBwYWRhcHRlci0+bWxtZXByaXYuTGlua0RldGVjdEluZm8uTnVtVHhPa0luUGVyaW9kIDwgMTAwKQogCQlyZXR1cm47CiAKIAlwcmlvcml0eSA9IHBhdHRyaWItPnByaW9yaXR5OwogCiAJaWYgKHBhdHRyaWItPnBzdGEpCiAJCXBzdGEgPSBwYXR0cmliLT5wc3RhOwotCWVsc2UKLQl7CisJZWxzZSB7CiAJCURCR184NzIzQSgiJXMsIGNhbGwgcnR3X2dldF9zdGFpbmZvMjNhKClcbiIsIF9fZnVuY19fKTsKIAkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsIHBhdHRyaWItPnJhKTsKIAl9CiAKLQlpZiAocHN0YSA9PSBOVUxMKQotCXsKKwlpZiAoIXBzdGEpIHsKIAkJREJHXzg3MjNBKCIlcywgcHN0YSA9PSBOVUxcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICghKHBzdGEtPnN0YXRlICZfRldfTElOS0VEKSkKLQl7Ci0JCURCR184NzIzQSgiJXMsIHBzdGEtPnN0YXRlKDB4JXgpICE9IF9GV19MSU5LRURcbiIsIF9fZnVuY19fLCBwc3RhLT5zdGF0ZSk7CisJaWYgKCEocHN0YS0+c3RhdGUgJl9GV19MSU5LRUQpKSB7CisJCURCR184NzIzQSgiJXMsIHBzdGEtPnN0YXRlKDB4JXgpICE9IF9GV19MSU5LRURcbiIsCisJCQkgIF9fZnVuY19fLCBwc3RhLT5zdGF0ZSk7CiAJCXJldHVybjsKIAl9CiAKIAlwaHRwcml2ID0gJnBzdGEtPmh0cHJpdjsKIAotCWlmICgocGh0cHJpdi0+aHRfb3B0aW9uID09IHRydWUpICYmIChwaHRwcml2LT5hbXBkdV9lbmFibGUgPT0gdHJ1ZSkpCi0JeworCWlmIChwaHRwcml2LT5odF9vcHRpb24gPT0gdHJ1ZSAmJiBwaHRwcml2LT5hbXBkdV9lbmFibGUgPT0gdHJ1ZSkgewogCQlpc3N1ZWQgPSAocGh0cHJpdi0+YWdnX2VuYWJsZV9iaXRtYXA+PnByaW9yaXR5KSYweDE7CiAJCWlzc3VlZCB8PSAocGh0cHJpdi0+Y2FuZGlkYXRlX3RpZF9iaXRtYXA+PnByaW9yaXR5KSYweDE7CiAKLQkJaWYgKDAgPT0gaXNzdWVkKQotCQl7Ci0JCQlEQkdfODcyM0EoInJ0d19pc3N1ZV9hZGRiYXJlcV9jbWQyM2EsIHAgPSVkXG4iLCBwcmlvcml0eSk7Ci0JCQlwc3RhLT5odHByaXYuY2FuZGlkYXRlX3RpZF9iaXRtYXAgfD0gQ0hLQklUKCh1OClwcmlvcml0eSk7Ci0JCQlydHdfYWRkYmFyZXFfY21kMjNhKHBhZGFwdGVyLCAodTgpIHByaW9yaXR5LCBwYXR0cmliLT5yYSk7Ci0JCX0KLQl9Ci19Ci0KLWlubGluZSB2b2lkIHJ0d19zZXRfcm9hbWluZyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHRvX3JvYW1pbmcpCi17Ci0JaWYgKHRvX3JvYW1pbmcgPT0gMCkKLQkJYWRhcHRlci0+bWxtZXByaXYudG9fam9pbiA9IGZhbHNlOwotCWFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcgPSB0b19yb2FtaW5nOwotfQotCi1pbmxpbmUgdTggcnR3X3RvX3JvYW1pbmcoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5tbG1lcHJpdi50b19yb2FtaW5nOwotfQotCi12b2lkIHJ0dzIzYV9yb2FtaW5nKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB3bGFuX25ldHdvcmsgKnRndF9uZXR3b3JrKQotewotCXN0cnVjdCBtbG1lX3ByaXYJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0KLQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci0JX3J0dzIzYV9yb2FtaW5nKHBhZGFwdGVyLCB0Z3RfbmV0d29yayk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci19Ci12b2lkIF9ydHcyM2Ffcm9hbWluZyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICp0Z3RfbmV0d29yaykKLXsKLQlzdHJ1Y3QgbWxtZV9wcml2CSpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrOwotCWludCBkb19qb2luX3I7Ci0KLQlpZiAodGd0X25ldHdvcmsgIT0gTlVMTCkKLQkJcG5ldHdvcmsgPSB0Z3RfbmV0d29yazsKLQllbHNlCi0JCXBuZXR3b3JrID0gJnBtbG1lcHJpdi0+Y3VyX25ldHdvcms7Ci0KLQlpZiAoMCA8IHJ0d190b19yb2FtaW5nKHBhZGFwdGVyKSkgewotCQlEQkdfODcyM0EoInJvYW1pbmcgZnJvbSAlcygiTUFDX0ZNVCIpLCBsZW5ndGg6JWRcbiIsCi0JCQkgIHBuZXR3b3JrLT5uZXR3b3JrLlNzaWQuc3NpZCwKLQkJCSAgTUFDX0FSRyhwbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKSwKLQkJCSAgcG5ldHdvcmstPm5ldHdvcmsuU3NpZC5zc2lkX2xlbik7Ci0JCW1lbWNweSgmcG1sbWVwcml2LT5hc3NvY19zc2lkLCAmcG5ldHdvcmstPm5ldHdvcmsuU3NpZCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkpOwotCi0JCXBtbG1lcHJpdi0+YXNzb2NfYnlfYnNzaWQgPSBmYWxzZTsKLQotCQl3aGlsZSgxKSB7Ci0JCQlpZiAoX1NVQ0NFU1MgPT0gKGRvX2pvaW5fciA9IHJ0d19kb19qb2luMjNhKHBhZGFwdGVyKSkpIHsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHXzg3MjNBKCJyb2FtaW5nIGRvX2pvaW4gcmV0dXJuICVkXG4iLCBkb19qb2luX3IpOwotCQkJCXBtbG1lcHJpdi0+dG9fcm9hbWluZy0tOwotCi0JCQkJaWYgKDAgPCBydHdfdG9fcm9hbWluZyhwYWRhcHRlcikpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJREJHXzg3MjNBKCIlcyglZCkgLXRvIHJvYW1pbmcgZmFpbCwgaW5kaWNhdGVfZGlzY29ubmVjdFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKLQkJCQkJcnR3X2luZGljYXRlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CisJCWlmIChpc3N1ZWQgPT0gMCkgeworCQkJREJHXzg3MjNBKCJydHdfaXNzdWVfYWRkYmFyZXFfY21kMjNhLCBwID0lZFxuIiwKKwkJCQkgIHByaW9yaXR5KTsKKwkJCXBzdGEtPmh0cHJpdi5jYW5kaWRhdGVfdGlkX2JpdG1hcCB8PSBCSVQocHJpb3JpdHkpOworCQkJcnR3X2FkZGJhcmVxX2NtZDIzYShwYWRhcHRlciwgKHU4KSBwcmlvcml0eSwKKwkJCQkJICAgIHBhdHRyaWItPnJhKTsKIAkJfQogCX0KIH0KIAogaW50IHJ0d19saW5rZWRfY2hlY2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlpZiAoKGNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpIHx8Ci0JICAgIChjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEV8V0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKSkgeworCWlmIChjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIFdJRklfQVBfU1RBVEUpIHx8CisJICAgIGNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwKKwkJCSAgV0lGSV9BREhPQ19TVEFURXxXSUZJX0FESE9DX01BU1RFUl9TVEFURSkpIHsKIAkJaWYgKHBhZGFwdGVyLT5zdGFwcml2LmFzb2Nfc3RhX2NvdW50ID4gMikKIAkJCXJldHVybiB0cnVlOwogCX0gZWxzZSB7CS8qIFN0YXRpb24gbW9kZSAqLwotCQlpZiAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQorCQlpZiAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBfRldfTElOS0VEKSkKIAkJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X21sbWVfZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X21sbWVfZXh0LmMKaW5kZXggMWYzZThhMC4uZTFiMjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19tbG1lX2V4dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfbWxtZV9leHQuYwpAQCAtMjEsMTEgKzIxLDUxIEBACiAjaW5jbHVkZSA8d2xhbl9ic3NkZWYuaD4KICNpbmNsdWRlIDxtbG1lX29zZGVwLmg+CiAjaW5jbHVkZSA8cmVjdl9vc2RlcC5oPgotI2luY2x1ZGUgPGV0aGVybmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KKworc3RhdGljIGludCBPbkFzc29jUmVxMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IE9uQXNzb2NSc3AyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25Qcm9iZVJlcTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOworc3RhdGljIGludCBPblByb2JlUnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IERvUmVzZXJ2ZWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25CZWFjb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25BdGltMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IE9uRGlzYXNzb2MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25BdXRoMjNhQ2xpZW50MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IE9uRGVBdXRoMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IE9uQWN0aW9uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CisKK3N0YXRpYyBpbnQgb25fYWN0aW9uX3NwY3QyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25BY3Rpb24yM2FfcW9zKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IE9uQWN0aW9uMjNhX2RscyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOworc3RhdGljIGludCBPbkFjdGlvbjIzYV9iYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IG9uX2FjdGlvbl9wdWJsaWMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25BY3Rpb24yM2FfaHQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKK3N0YXRpYyBpbnQgT25BY3Rpb24yM2Ffd21tKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CitzdGF0aWMgaW50IE9uQWN0aW9uMjNhX3AycChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOworCitzdGF0aWMgdm9pZCBpc3N1ZV9hc3NvY3JlcShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIGlzc3VlX3Byb2JlcmVxKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcHNzaWQsIHU4ICpkYSk7CitzdGF0aWMgaW50IGlzc3VlX3Byb2JlcmVxX2V4KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpwc3NpZCwKKwkJCSAgICAgdTggKmRhLCBpbnQgdHJ5X2NudCwgaW50IHdhaXRfbXMpOworc3RhdGljIHZvaWQgaXNzdWVfcHJvYmVyc3Aoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqZGEsCisJCQkgICB1OCBpc192YWxpZF9wMnBfcHJvYmVyZXEpOworc3RhdGljIHZvaWQgaXNzdWVfYXV0aChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEsCisJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXMpOworc3RhdGljIGludCBpc3N1ZV9kZWF1dGhfZXgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmRhLAorCQkJICAgdW5zaWduZWQgc2hvcnQgcmVhc29uLCBpbnQgdHJ5X2NudCwgaW50IHdhaXRfbXMpOworc3RhdGljIHZvaWQgc3RhcnRfY2xudF9hc3NvYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X2NsbnRfYXV0aChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X2NsbnRfam9pbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X2NyZWF0ZV9pYnNzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworCisjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCitzdGF0aWMgaW50IE9uQXV0aDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOworc3RhdGljIHZvaWQgaXNzdWVfYXNzb2Nyc3Aoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCQkJICAgc3RydWN0IHN0YV9pbmZvICpwc3RhdCwgdTE2IHBrdF90eXBlKTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG1sbWVfaGFuZGxlciBtbG1lX3N0YV90YmxbXT17CkBAIC02Niw3ICsxMDYsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBPVUkgZGVmaW5pdGlvbnMgZm9yIHRoZSB2ZW5kb3Igc3BlY2lmaWMgSUUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVuc2lnbmVkIGNoYXIJUlRXX1dQQV9PVUkyM0FbXSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAxfTsKIHVuc2lnbmVkIGNoYXIgV01NX09VSTIzQVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDJ9OwogdW5zaWduZWQgY2hhcglXUFNfT1VJMjNBW10gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwNH07CiB1bnNpZ25lZCBjaGFyCVAyUF9PVUkyM0FbXSA9IHsweDUwLCAweDZGLCAweDlBLCAweDA5fTsKQEAgLTc1LDkgKzExNCw3IEBACiB1bnNpZ25lZCBjaGFyCVdNTV9JTkZPX09VSTIzQVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDF9OwogdW5zaWduZWQgY2hhcglXTU1fUEFSQV9PVUkyM0FbXSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAxLCAweDAxfTsKIAotdW5zaWduZWQgY2hhciBXUEFfVEtJUF9DSVBIRVIyM0FbNF0gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwMn07Ci11bnNpZ25lZCBjaGFyIFJTTl9US0lQX0NJUEhFUjIzQVs0XSA9IHsweDAwLCAweDBmLCAweGFjLCAweDAyfTsKLQorc3RhdGljIHVuc2lnbmVkIGNoYXIgUkVBTFRFS185NkJfSUVbXSA9IHsweDAwLCAweGUwLCAweDRjLCAweDAyLCAweDAxLCAweDIwfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBNQ1MgcmF0ZSBkZWZpbml0aW9ucwpAQCAtMTk4LDkgKzIzNSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHJ0X2NoYW5uZWxfcGxhbl9tYXAJUlRXX0NIQU5ORUxfUExBTl9NQVBfUkVBTFRFS19ERUZJTkUgPSB7MHgwMywgMHgwMn07IC8qIHVzZSB0aGUgY29uYmluYXRpb24gZm9yIG1heCBjaGFubmVsIG51bWJlcnMgKi8KIAorc3RhdGljIHZvaWQgZHVtbXlfZXZlbnRfY2FsbGJhY2soc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKK3sKK30KKwogc3RhdGljIHN0cnVjdCBmd2V2ZW50IHdsYW5ldmVudHNbXSA9CiB7Ci0JezAsIHJ0d19kdW1teV9ldmVudF9jYWxsYmFjazIzYX0sCS8qMCovCisJezAsICZkdW1teV9ldmVudF9jYWxsYmFja30sCS8qMCovCiAJezAsIE5VTEx9LAogCXswLCBOVUxMfSwKIAl7MCwgTlVMTH0sCkBAIC0yMTQsMjEgKzI1NSwzMiBAQAogCXswLCAmcnR3MjNhX2pvaW5ic3NfZXZlbnRfY2J9LAkJLyoxMCovCiAJe3NpemVvZihzdHJ1Y3Qgc3Rhc3NvY19ldmVudCksICZydHdfc3Rhc3NvY19ldmVudF9jYWxsYmFjazIzYX0sCiAJe3NpemVvZihzdHJ1Y3Qgc3RhZGVsX2V2ZW50KSwgJnJ0d19zdGFkZWxfZXZlbnRfY2FsbGJhY2syM2F9LAotCXswLCAmcnR3X2F0aW1kb25lX2V2ZW50X2NhbGxiYWNrMjNhfSwKLQl7MCwgcnR3X2R1bW15X2V2ZW50X2NhbGxiYWNrMjNhfSwKKwl7MCwgJmR1bW15X2V2ZW50X2NhbGxiYWNrfSwKKwl7MCwgJmR1bW15X2V2ZW50X2NhbGxiYWNrfSwKIAl7MCwgTlVMTH0sCS8qMTUqLwogCXswLCBOVUxMfSwKIAl7MCwgTlVMTH0sCiAJezAsIE5VTEx9LAotCXswLCBydHcyM2FfZndkYmdfZXZlbnRfY2FsbGJhY2t9LAorCXswLCAmZHVtbXlfZXZlbnRfY2FsbGJhY2t9LAogCXswLCBOVUxMfSwJIC8qMjAqLwogCXswLCBOVUxMfSwKIAl7MCwgTlVMTH0sCi0JezAsICZydHdfY3B3bV9ldmVudF9jYWxsYmFjazIzYX0sCisJezAsICZkdW1teV9ldmVudF9jYWxsYmFja30sCiAJezAsIE5VTEx9LAogfTsKIAogCitzdGF0aWMgdm9pZCBydHdfY29ycmVjdF9UU0Yoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3sKKwlod192YXJfc2V0X2NvcnJlY3RfdHNmKHBhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQKK3J0d191cGRhdGVfVFNGKHN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KQoreworCXBtbG1lZXh0LT5UU0ZWYWx1ZSA9IGdldF91bmFsaWduZWRfbGU2NCgmbWdtdC0+dS5iZWFjb24udGltZXN0YW1wKTsKK30KKwogLyoKICAqIFNlYXJjaCB0aGUgQHBhcmFtIGNoYW5uZWxfbnVtIGluIGdpdmVuIEBwYXJhbSBjaGFubmVsX3NldAogICogQGNoX3NldDogdGhlIGdpdmVuIGNoYW5uZWwgc2V0CkBAIC0zMTAsNyArMzYyLDcgQEAKIAlwbWxtZWluZm8tPmtleV9pbmRleCA9IDA7CiAJcG1sbWVpbmZvLT5pdiA9IDA7CiAKLQlwbWxtZWluZm8tPmVuY19hbGdvID0gX05PX1BSSVZBQ1lfOworCXBtbG1laW5mby0+ZW5jX2FsZ28gPSAwOwogCXBtbG1laW5mby0+YXV0aE1vZGVUb2dnbGUgPSAwOwogCiAJbWVtc2V0KHBtbG1laW5mby0+Y2hnX3R4dCwgMCwgMTI4KTsKQEAgLTM4OCw5NiArNDQwLDg4IEBACiAJY2hhbm5lbF9saXN0LT5yZWdfY2xhc3NlcyA9IGNsYTsKIH0KIAotc3RhdGljIHU4IGluaXRfY2hhbm5lbF9zZXQoc3RydWN0IHJ0d19hZGFwdGVyKiBwYWRhcHRlciwgdTggQ2hhbm5lbFBsYW4sCi0JCQkgICBzdHJ1Y3QgcnRfY2hhbm5lbF9pbmZvICpjaGFubmVsX3NldCkKK3N0YXRpYyB1OCBpbml0X2NoYW5uZWxfc2V0KHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIsIHU4IGNwbGFuLAorCQkJICAgc3RydWN0IHJ0X2NoYW5uZWxfaW5mbyAqY19zZXQpCiB7Ci0JdTgJaW5kZXgsIGNoYW5zZXRfc2l6ZSA9IDA7Ci0JdTgJYjVHQmFuZCA9IGZhbHNlLCBiMl80R0JhbmQgPSBmYWxzZTsKLQl1OAlJbmRleDJHID0gMCwgSW5kZXg1RyA9IDA7CisJdTggaSwgY2hfc2l6ZSA9IDA7CisJdTggYjVHQmFuZCA9IGZhbHNlLCBiMl80R0JhbmQgPSBmYWxzZTsKKwl1OCBJbmRleDJHID0gMCwgSW5kZXg1RyA9IDA7CiAKLQltZW1zZXQoY2hhbm5lbF9zZXQsIDAsIHNpemVvZihzdHJ1Y3QgcnRfY2hhbm5lbF9pbmZvKSpNQVhfQ0hBTk5FTF9OVU0pOworCW1lbXNldChjX3NldCwgMCwgc2l6ZW9mKHN0cnVjdCBydF9jaGFubmVsX2luZm8pICogTUFYX0NIQU5ORUxfTlVNKTsKIAotCWlmIChDaGFubmVsUGxhbiA+PSBSVF9DSEFOTkVMX0RPTUFJTl9NQVggJiYKLQkgICAgQ2hhbm5lbFBsYW4gIT0gUlRfQ0hBTk5FTF9ET01BSU5fUkVBTFRFS19ERUZJTkUpIHsKLQkJREJHXzg3MjNBKCJDaGFubmVsUGxhbiBJRCAleCBlcnJvciAhISEhIVxuIiwgQ2hhbm5lbFBsYW4pOwotCQlyZXR1cm4gY2hhbnNldF9zaXplOworCWlmIChjcGxhbiA+PSBSVF9DSEFOTkVMX0RPTUFJTl9NQVggJiYKKwkgICAgY3BsYW4gIT0gUlRfQ0hBTk5FTF9ET01BSU5fUkVBTFRFS19ERUZJTkUpIHsKKwkJREJHXzg3MjNBKCJDaGFubmVsUGxhbiBJRCAleCBlcnJvciAhISEhIVxuIiwgY3BsYW4pOworCQlyZXR1cm4gY2hfc2l6ZTsKIAl9CiAKIAlpZiAocGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi53aXJlbGVzc19tb2RlICYgV0lSRUxFU1NfMTFHKSB7CiAJCWIyXzRHQmFuZCA9IHRydWU7Ci0JCWlmIChSVF9DSEFOTkVMX0RPTUFJTl9SRUFMVEVLX0RFRklORSA9PSBDaGFubmVsUGxhbikKKwkJaWYgKFJUX0NIQU5ORUxfRE9NQUlOX1JFQUxURUtfREVGSU5FID09IGNwbGFuKQogCQkJSW5kZXgyRyA9IFJUV19DSEFOTkVMX1BMQU5fTUFQX1JFQUxURUtfREVGSU5FLkluZGV4Mkc7CiAJCWVsc2UKLQkJCUluZGV4MkcgPSBSVFdfQ2hhbm5lbFBsYW5NYXBbQ2hhbm5lbFBsYW5dLkluZGV4Mkc7CisJCQlJbmRleDJHID0gUlRXX0NoYW5uZWxQbGFuTWFwW2NwbGFuXS5JbmRleDJHOwogCX0KIAogCWlmIChwYWRhcHRlci0+cmVnaXN0cnlwcml2LndpcmVsZXNzX21vZGUgJiBXSVJFTEVTU18xMUEpIHsKIAkJYjVHQmFuZCA9IHRydWU7Ci0JCWlmIChSVF9DSEFOTkVMX0RPTUFJTl9SRUFMVEVLX0RFRklORSA9PSBDaGFubmVsUGxhbikKKwkJaWYgKFJUX0NIQU5ORUxfRE9NQUlOX1JFQUxURUtfREVGSU5FID09IGNwbGFuKQogCQkJSW5kZXg1RyA9IFJUV19DSEFOTkVMX1BMQU5fTUFQX1JFQUxURUtfREVGSU5FLkluZGV4NUc7CiAJCWVsc2UKLQkJCUluZGV4NUcgPSBSVFdfQ2hhbm5lbFBsYW5NYXBbQ2hhbm5lbFBsYW5dLkluZGV4NUc7CisJCQlJbmRleDVHID0gUlRXX0NoYW5uZWxQbGFuTWFwW2NwbGFuXS5JbmRleDVHOwogCX0KIAogCWlmIChiMl80R0JhbmQpIHsKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4PFJUV19DaGFubmVsUGxhbjJHW0luZGV4MkddLkxlbjsgaW5kZXgrKykgewotCQkJY2hhbm5lbF9zZXRbY2hhbnNldF9zaXplXS5DaGFubmVsTnVtID0KLQkJCQlSVFdfQ2hhbm5lbFBsYW4yR1tJbmRleDJHXS5DaGFubmVsW2luZGV4XTsKKwkJZm9yIChpID0gMDsgaSA8IFJUV19DaGFubmVsUGxhbjJHW0luZGV4MkddLkxlbjsgaSsrKSB7CisJCQljX3NldFtjaF9zaXplXS5DaGFubmVsTnVtID0KKwkJCQlSVFdfQ2hhbm5lbFBsYW4yR1tJbmRleDJHXS5DaGFubmVsW2ldOwogCi0JCQlpZiAoKFJUX0NIQU5ORUxfRE9NQUlOX0dMT0JBTF9ET0FNSU4gPT0gQ2hhbm5lbFBsYW4pIHx8CisJCQlpZiAoKFJUX0NIQU5ORUxfRE9NQUlOX0dMT0JBTF9ET0FNSU4gPT0gY3BsYW4pIHx8CiAJCQkgICAgLyogQ2hhbm5lbCAxfjExIGlzIGFjdGl2ZSwgYW5kIDEyfjE0IGlzIHBhc3NpdmUgKi8KLQkJCSAgICAoUlRfQ0hBTk5FTF9ET01BSU5fR0xPQkFMX0RPQU1JTl8yRyA9PSBDaGFubmVsUGxhbikpewotCQkJCWlmIChjaGFubmVsX3NldFtjaGFuc2V0X3NpemVdLkNoYW5uZWxOdW0gPj0gMSAmJgotCQkJCSAgICBjaGFubmVsX3NldFtjaGFuc2V0X3NpemVdLkNoYW5uZWxOdW0gPD0gMTEpCi0JCQkJCWNoYW5uZWxfc2V0W2NoYW5zZXRfc2l6ZV0uU2NhblR5cGUgPQotCQkJCQkJU0NBTl9BQ1RJVkU7Ci0JCQkJZWxzZSBpZiAoKGNoYW5uZWxfc2V0W2NoYW5zZXRfc2l6ZV0uQ2hhbm5lbE51bSA+PSAxMiAmJgotCQkJCQkgIGNoYW5uZWxfc2V0W2NoYW5zZXRfc2l6ZV0uQ2hhbm5lbE51bSAgPD0gMTQpKQotCQkJCQljaGFubmVsX3NldFtjaGFuc2V0X3NpemVdLlNjYW5UeXBlID0KLQkJCQkJCVNDQU5fUEFTU0lWRTsKLQkJCX0gZWxzZSBpZiAoUlRfQ0hBTk5FTF9ET01BSU5fV09STERfV0lERV8xMyA9PQotCQkJCSAgIENoYW5uZWxQbGFuIHx8Ci0JCQkJICAgUlRfQ0hBTk5FTF9ET01BSU5fV09STERfV0lERV81RyA9PQotCQkJCSAgIENoYW5uZWxQbGFuIHx8CisJCQkgICAgUlRfQ0hBTk5FTF9ET01BSU5fR0xPQkFMX0RPQU1JTl8yRyA9PSBjcGxhbikgeworCQkJCWlmIChjX3NldFtjaF9zaXplXS5DaGFubmVsTnVtID49IDEgJiYKKwkJCQkgICAgY19zZXRbY2hfc2l6ZV0uQ2hhbm5lbE51bSA8PSAxMSkKKwkJCQkJY19zZXRbY2hfc2l6ZV0uU2NhblR5cGUgPSBTQ0FOX0FDVElWRTsKKwkJCQllbHNlIGlmIChjX3NldFtjaF9zaXplXS5DaGFubmVsTnVtID49IDEyICYmCisJCQkJCSBjX3NldFtjaF9zaXplXS5DaGFubmVsTnVtICA8PSAxNCkKKwkJCQkJY19zZXRbY2hfc2l6ZV0uU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCQl9IGVsc2UgaWYgKFJUX0NIQU5ORUxfRE9NQUlOX1dPUkxEX1dJREVfMTMgPT0gY3BsYW4gfHwKKwkJCQkgICBSVF9DSEFOTkVMX0RPTUFJTl9XT1JMRF9XSURFXzVHID09IGNwbGFuIHx8CiAJCQkJICAgUlRfQ0hBTk5FTF9ET01BSU5fMkdfV09STEQgPT0gSW5kZXgyRykgewogCQkJCS8qICBjaGFubmVsIDEyfjEzLCBwYXNzaXZlIHNjYW4gKi8KLQkJCQlpZiAoY2hhbm5lbF9zZXRbY2hhbnNldF9zaXplXS5DaGFubmVsTnVtIDw9IDExKQotCQkJCQljaGFubmVsX3NldFtjaGFuc2V0X3NpemVdLlNjYW5UeXBlID0KLQkJCQkJCVNDQU5fQUNUSVZFOworCQkJCWlmIChjX3NldFtjaF9zaXplXS5DaGFubmVsTnVtIDw9IDExKQorCQkJCQljX3NldFtjaF9zaXplXS5TY2FuVHlwZSA9IFNDQU5fQUNUSVZFOwogCQkJCWVsc2UKLQkJCQkJY2hhbm5lbF9zZXRbY2hhbnNldF9zaXplXS5TY2FuVHlwZSA9Ci0JCQkJCQlTQ0FOX1BBU1NJVkU7CisJCQkJCWNfc2V0W2NoX3NpemVdLlNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOwogCQkJfSBlbHNlCi0JCQkJY2hhbm5lbF9zZXRbY2hhbnNldF9zaXplXS5TY2FuVHlwZSA9Ci0JCQkJCVNDQU5fQUNUSVZFOworCQkJCWNfc2V0W2NoX3NpemVdLlNjYW5UeXBlID0gU0NBTl9BQ1RJVkU7CiAKLQkJCWNoYW5zZXRfc2l6ZSsrOworCQkJY2hfc2l6ZSsrOwogCQl9CiAJfQogCiAJaWYgKGI1R0JhbmQpIHsKLQkJZm9yIChpbmRleCA9IDA7aW5kZXg8UlRXX0NoYW5uZWxQbGFuNUdbSW5kZXg1R10uTGVuO2luZGV4KyspIHsKLQkJCWlmIChSVFdfQ2hhbm5lbFBsYW41R1tJbmRleDVHXS5DaGFubmVsW2luZGV4XSA8PSA0OCB8fAotCQkJICAgIFJUV19DaGFubmVsUGxhbjVHW0luZGV4NUddLkNoYW5uZWxbaW5kZXhdID49IDE0OSkgewotCQkJCWNoYW5uZWxfc2V0W2NoYW5zZXRfc2l6ZV0uQ2hhbm5lbE51bSA9Ci0JCQkJCVJUV19DaGFubmVsUGxhbjVHW0luZGV4NUddLkNoYW5uZWxbaW5kZXhdOwotCQkJCWlmIChSVF9DSEFOTkVMX0RPTUFJTl9XT1JMRF9XSURFXzVHID09Ci0JCQkJICAgIENoYW5uZWxQbGFuKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSVFdfQ2hhbm5lbFBsYW41R1tJbmRleDVHXS5MZW47IGkrKykgeworCQkJaWYgKFJUV19DaGFubmVsUGxhbjVHW0luZGV4NUddLkNoYW5uZWxbaV0gPD0gNDggfHwKKwkJCSAgICBSVFdfQ2hhbm5lbFBsYW41R1tJbmRleDVHXS5DaGFubmVsW2ldID49IDE0OSkgeworCQkJCWNfc2V0W2NoX3NpemVdLkNoYW5uZWxOdW0gPQorCQkJCQlSVFdfQ2hhbm5lbFBsYW41R1tJbmRleDVHXS5DaGFubmVsW2ldOworCQkJCWlmIChSVF9DSEFOTkVMX0RPTUFJTl9XT1JMRF9XSURFXzVHID09IGNwbGFuKSB7CiAJCQkJCS8qIHBhc3NpdmUgc2NhbiBmb3IgYWxsIDVHIGNoYW5uZWxzICovCi0JCQkJCWNoYW5uZWxfc2V0W2NoYW5zZXRfc2l6ZV0uU2NhblR5cGUgPQorCQkJCQljX3NldFtjaF9zaXplXS5TY2FuVHlwZSA9CiAJCQkJCQlTQ0FOX1BBU1NJVkU7CiAJCQkJfSBlbHNlCi0JCQkJCWNoYW5uZWxfc2V0W2NoYW5zZXRfc2l6ZV0uU2NhblR5cGUgPQorCQkJCQljX3NldFtjaF9zaXplXS5TY2FuVHlwZSA9CiAJCQkJCQlTQ0FOX0FDVElWRTsKIAkJCQlEQkdfODcyM0EoIiVzKCk6IGNoYW5uZWxfc2V0WyVkXS5DaGFubmVsTnVtID0gIgotCQkJCQkgICIlZFxuIiwgX19mdW5jX18sIGNoYW5zZXRfc2l6ZSwKLQkJCQkJICBjaGFubmVsX3NldFtjaGFuc2V0X3NpemVdLkNoYW5uZWxOdW0pOwotCQkJCWNoYW5zZXRfc2l6ZSsrOworCQkJCQkgICIlZFxuIiwgX19mdW5jX18sIGNoX3NpemUsCisJCQkJCSAgY19zZXRbY2hfc2l6ZV0uQ2hhbm5lbE51bSk7CisJCQkJY2hfc2l6ZSsrOwogCQkJfQogCQl9CiAJfQogCi0JcmV0dXJuIGNoYW5zZXRfc2l6ZTsKKwlyZXR1cm4gY2hfc2l6ZTsKIH0KIAogaW50IGluaXRfbWxtZV9leHRfcHJpdjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyKQpAQCAtNTQ3LDI4ICs1OTEsMjggQEAKIHZvaWQgbWd0X2Rpc3BhdGNoZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKLQlpbnQgaW5kZXg7CiAJc3RydWN0IG1sbWVfaGFuZGxlciAqcHRhYmxlOwogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAjZW5kaWYgLyogQ09ORklHXzg3MjNBVV9BUF9NT0RFICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JdTE2IHN0eXBlOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKKwl1MTYgc3R5cGU7CisJaW50IGluZGV4OwogCi0JaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCWlmICghaWVlZTgwMjExX2lzX21nbXQobWdtdC0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybjsKIAogCS8qIHJlY2VpdmUgdGhlIGZyYW1lcyB0aGF0IHJhKGExKSBpcyBteSBhZGRyZXNzIG9yIHJhKGExKSBpcwogCSAgIGJjIGFkZHJlc3MuICovCi0JaWYgKCFldGhlcl9hZGRyX2VxdWFsKGhkci0+YWRkcjEsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSkgJiYKLQkgICAgIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCWlmICghZXRoZXJfYWRkcl9lcXVhbChtZ210LT5kYSwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKSAmJgorCSAgICAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIobWdtdC0+ZGEpKQogCQlyZXR1cm47CiAKIAlwdGFibGUgPSBtbG1lX3N0YV90Ymw7CiAKLQlzdHlwZSA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKKwlzdHlwZSA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAJaW5kZXggPSBzdHlwZSA+PiA0OwogCiAJaWYgKGluZGV4ID4gMTMpIHsKQEAgLTU3OSwxMCArNjIzLDEwIEBACiAJfQogCXB0YWJsZSArPSBpbmRleDsKIAotCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJnBhZGFwdGVyLT5zdGFwcml2LCBoZHItPmFkZHIyKTsKKwlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKCZwYWRhcHRlci0+c3RhcHJpdiwgbWdtdC0+c2EpOwogCiAJaWYgKHBzdGEpIHsKLQkJaWYgKGllZWU4MDIxMV9oYXNfcmV0cnkoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlpZiAoaWVlZTgwMjExX2hhc19yZXRyeShtZ210LT5mcmFtZV9jb250cm9sKSkgewogCQkJaWYgKHByZWN2X2ZyYW1lLT5hdHRyaWIuc2VxX251bSA9PQogCQkJICAgIHBzdGEtPlJ4TWdtdEZyYW1lU2VxTnVtKSB7CiAJCQkJLyogZHJvcCB0aGUgZHVwbGljYXRlIG1hbmFnZW1lbnQgZnJhbWUgKi8KQEAgLTU5OSw3ICs2NDMsNyBAQAogCXN3aXRjaCAoc3R5cGUpCiAJewogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkgPT0gdHJ1ZSkKKwkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSkKIAkJCXB0YWJsZS0+ZnVuYyA9ICZPbkF1dGgyM2E7CiAJCWVsc2UKIAkJCXB0YWJsZS0+ZnVuYyA9ICZPbkF1dGgyM2FDbGllbnQyM2E7CkBAIC02MDksNyArNjUzLDcgQEAKIAkJX21ndF9kaXNwYXRjaGVyMjNhKHBhZGFwdGVyLCBwdGFibGUsIHByZWN2X2ZyYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpID09IHRydWUpCisJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpCiAJCQlfbWd0X2Rpc3BhdGNoZXIyM2EocGFkYXB0ZXIsIHB0YWJsZSwgcHJlY3ZfZnJhbWUpOwogCQllbHNlCiAJCQlfbWd0X2Rpc3BhdGNoZXIyM2EocGFkYXB0ZXIsIHB0YWJsZSwgcHJlY3ZfZnJhbWUpOwpAQCAtNjE4LDEzICs2NjIsMTEgQEAKIAkJX21ndF9kaXNwYXRjaGVyMjNhKHBhZGFwdGVyLCBwdGFibGUsIHByZWN2X2ZyYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgotCQkvKiBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpID09IHRydWUpICovCisJCS8qIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpICovCiAJCV9tZ3RfZGlzcGF0Y2hlcjIzYShwYWRhcHRlciwgcHRhYmxlLCBwcmVjdl9mcmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCV9tZ3RfZGlzcGF0Y2hlcjIzYShwYWRhcHRlciwgcHRhYmxlLCBwcmVjdl9mcmFtZSk7Ci0JCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkgPT0gdHJ1ZSkKLQkJCXJ0d19ob3N0YXBkX21sbWVfcngyM2EocGFkYXB0ZXIsIHByZWN2X2ZyYW1lKTsKIAkJYnJlYWs7CiAJfQogI2Vsc2UKQEAgLTYzMiwxODYgKzY3NCw2MyBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotc3RhdGljIHUzMiBwMnBfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgICAgdW5zaWduZWQgY2hhciAqZGEpCi17Ci0JYm9vbCByZXNwb25zZSA9IHRydWU7Ci0KLQlpZiAod2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiktPnAycF9lbmFibGVkID09IGZhbHNlIHx8Ci0JICAgIHBhZGFwdGVyLT5tbG1lcHJpdi53cHNfcHJvYmVfcmVzcF9pZSA9PSBOVUxMIHx8Ci0JICAgIHBhZGFwdGVyLT5tbG1lcHJpdi5wMnBfcHJvYmVfcmVzcF9pZSA9PSBOVUxMKSB7Ci0JCURCR184NzIzQSgiRE9OJ1QgaXNzdWVfcHJvYmVyc3AyM2FfcDJwMjNhOiBwMnBfZW5hYmxlZDolZCwgIgotCQkJICAid3BzX3Byb2JlX3Jlc3BfaWU6JXAsIHAycF9wcm9iZV9yZXNwX2llOiVwXG4iLAotCQkJICB3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQsCi0JCQkgIHBhZGFwdGVyLT5tbG1lcHJpdi53cHNfcHJvYmVfcmVzcF9pZSwKLQkJCSAgcGFkYXB0ZXItPm1sbWVwcml2LnAycF9wcm9iZV9yZXNwX2llKTsKLQkJcmVzcG9uc2UgPSBmYWxzZTsKLQl9Ci0KLQlpZiAocmVzcG9uc2UgPT0gdHJ1ZSkKLQkJaXNzdWVfcHJvYmVyc3AyM2FfcDJwMjNhKHBhZGFwdGVyLCBkYSk7Ci0KLQlyZXR1cm4gX1NVQ0NFU1M7Ci19Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogRm9sbG93aW5nIGFyZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBlYWNoIHN1YnR5cGUgb2YgdGhlIG1hbmFnZW1lbnQgZnJhbWVzCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11bnNpZ25lZCBpbnQgT25Qcm9iZVJlcTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludAorT25Qcm9iZVJlcTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7Ci0JdW5zaWduZWQgaW50CWllbGVuOwotCXVuc2lnbmVkIGNoYXIJKnA7CisJY29uc3QgdTggKmllOwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqY3VyID0gJnBtbG1laW5mby0+bmV0d29yazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOwotCXVpbnQgbGVuID0gc2tiLT5sZW47Ci0JdTggaXNfdmFsaWRfcDJwX3Byb2JlcmVxID0gZmFsc2U7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJaW50IGxlbiA9IHNrYi0+bGVuOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JdTggd2lmaV90ZXN0X2Noa19yYXRlID0gMTsKLQotCWlmICghcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpICYmCi0JICAgICFydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfSURMRSkgJiYKLQkgICAgIXJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfQ0xJRU5UKSAmJgotCSAgICAhcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0ZJTkRfUEhBU0VfU0VBUkNIKSAmJgotCSAgICAhcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1NDQU4pKSB7Ci0JCS8qCW1jc19yYXRlID0gMCAtPiBDQ0sgMU0gcmF0ZSAqLwotCQkvKgltY3NfcmF0ZSA9IDEgLT4gQ0NLIDJNIHJhdGUgKi8KLQkJLyoJbWNzX3JhdGUgPSAyIC0+IENDSyA1LjVNIHJhdGUgKi8KLQkJLyoJbWNzX3JhdGUgPSAzIC0+IENDSyAxMU0gcmF0ZSAqLwotCQkvKglJbiB0aGUgUDJQIG1vZGUsIHRoZSBkcml2ZXIgc2hvdWxkIG5vdCBzdXBwb3J0Ci0JCQl0aGUgQ0NLIHJhdGUgKi8KLQotCQkvKglJT1QgaXNzdWU6IEdvb2dsZSBOZXh1czcgdXNlIDFNIHJhdGUgdG8gc2VuZAotCQkJcDJwX3Byb2JlX3JlcSBhZnRlciBHTyBuZWdvIGNvbXBsZXRlZCBhbmQgTmV4dXM3Ci0JCQlpcyBjbGllbnQgKi8KLQkJaWYgKHdpZmlfdGVzdF9jaGtfcmF0ZSA9PSAxKSB7Ci0JCQlpZiAoKGlzX3ZhbGlkX3AycF9wcm9iZXJlcSA9Ci0JCQkgICAgIHByb2Nlc3NfcHJvYmVfcmVxX3AycF9pZTIzYShwd2RpbmZvLCBwZnJhbWUsCi0JCQkJCQkJIGxlbikpID09IHRydWUpIHsKLQkJCQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLAotCQkJCQkJICAgICBQMlBfUk9MRV9ERVZJQ0UpKSB7Ci0JCQkJCXU4ICpzYSA9IGllZWU4MDIxMV9nZXRfU0EoaGRyKTsKLQkJCQkJcDJwX2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHBhZGFwdGVyLCBzYSk7Ci0JCQkJCXJldHVybiBfU1VDQ0VTUzsKLQkJCQl9Ci0KLQkJCQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpIHsKLQkJCQkJZ290byBfY29udGludWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi1fY29udGludWU6Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgeworCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkKIAkJcmV0dXJuIF9TVUNDRVNTOwotCX0KIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gZmFsc2UgJiYKLQkJY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsCi0JCQkgICAgICBXSUZJX0FESE9DX01BU1RFUl9TVEFURXxXSUZJX0FQX1NUQVRFKSA9PSBmYWxzZSkgeworCWlmICghY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpICYmCisJICAgICFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwKKwkJCSAgIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFIHwgV0lGSV9BUF9TVEFURSkpCiAJCXJldHVybiBfU1VDQ0VTUzsKKworCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2lzX3Byb2JlX3JlcShtZ210LT5mcmFtZV9jb250cm9sKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlY2VpdmVkIG5vbiBwcm9iZSByZXF1ZXN0IGZyYW1lXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gX0ZBSUw7CiAJfQogCi0JcCA9IHJ0d19nZXRfaWUyM2EocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArCi0JCQkgIF9QUk9CRVJFUV9JRV9PRkZTRVRfLCBfU1NJRF9JRV8sIChpbnQgKikmaWVsZW4sCi0JCQkgIGxlbiAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgLQotCQkJICBfUFJPQkVSRVFfSUVfT0ZGU0VUXyk7CisJbGVuIC09IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5wcm9iZV9yZXEudmFyaWFibGUpOworCisJaWUgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1NTSUQsIG1nbXQtPnUucHJvYmVfcmVxLnZhcmlhYmxlLCBsZW4pOwogCiAJLyogY2hlY2sgKHdpbGRjYXJkKSBTU0lEICovCi0JaWYgKHApIHsKLQkJaWYgKGlzX3ZhbGlkX3AycF9wcm9iZXJlcSA9PSB0cnVlKSB7Ci0JCQlnb3RvIF9pc3N1ZV9wcm9iZXJzcDIzYTsKLQkJfQorCWlmICghaWUpCisJCWdvdG8gb3V0OwogCi0JCWlmICgoaWVsZW4gIT0gMCAmJgotCQkgICAgIG1lbWNtcCgodm9pZCAqKShwKzIpLCBjdXItPlNzaWQuc3NpZCwKLQkJCSAgICBjdXItPlNzaWQuc3NpZF9sZW4pKSB8fAotCQkgICAgKGllbGVuID09IDAgJiYgcG1sbWVpbmZvLT5oaWRkZW5fc3NpZF9tb2RlKSkgewotCQkJcmV0dXJuIF9TVUNDRVNTOwotCQl9Ci0KLV9pc3N1ZV9wcm9iZXJzcDIzYToKLQotCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUgJiYKLQkJICAgIHBtbG1lcHJpdi0+Y3VyX25ldHdvcmsuam9pbl9yZXMgPT0gdHJ1ZSkgewotCQkJLyogREJHXzg3MjNBKCIraXNzdWVfcHJvYmVyc3AyM2EgZHVyaW5nIGFwIG1vZGVcbiIpOyAqLwotCQkJaXNzdWVfcHJvYmVyc3AyM2EocGFkYXB0ZXIsIGllZWU4MDIxMV9nZXRfU0EoaGRyKSwKLQkJCQkJICBpc192YWxpZF9wMnBfcHJvYmVyZXEpOwotCQl9CisJaWYgKChpZVsxXSAmJiBtZW1jbXAoaWUgKyAyLCBjdXItPlNzaWQuc3NpZCwgY3VyLT5Tc2lkLnNzaWRfbGVuKSkgfHwKKwkgICAgKGllWzFdID09IDAgJiYgcG1sbWVpbmZvLT5oaWRkZW5fc3NpZF9tb2RlKSkgeworCQlyZXR1cm4gX1NVQ0NFU1M7CiAJfQogCisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSAmJgorCSAgICBwbWxtZXByaXYtPmN1cl9uZXR3b3JrLmpvaW5fcmVzKQorCQlpc3N1ZV9wcm9iZXJzcChwYWRhcHRlciwgbWdtdC0+c2EsIGZhbHNlKTsKKworb3V0OgogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdW5zaWduZWQgaW50IE9uUHJvYmVSc3AyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQKK09uUHJvYmVSc3AyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvCSpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9UWF9QUk9WSVNJT05fRElTX1JFUSkpCXsKLQkJaWYgKHB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLmJlbmFibGUgPT0gdHJ1ZSkgewotCQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwocHdkaW5mby0+dHhfcHJvdl9kaXNjX2luZm8ucGVlcklGQWRkciwKLQkJCQkgICAgaGRyLT5hZGRyMikpIHsKLQkJCQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9DTElFTlQpKSB7Ci0JCQkJCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLmJlbmFibGUgPSBmYWxzZTsKLQkJCQkJaXNzdWVfcDJwX3Byb3Zpc2lvbl9yZXF1ZXN0MjNhKHBhZGFwdGVyLAotCQkJCQkJCQkgICAgCQkJCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLnNzaWQuc3NpZCwKLQkJCQkJCQkJCQkJCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLnNzaWQuc3NpZF9sZW4sCi0JCQkJCQkJCQkJCQlwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby5wZWVyRGV2QWRkcik7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKSB8fCBydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkKLQkJCQl7Ci0JCQkJCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLmJlbmFibGUgPSBmYWxzZTsKLQkJCQkJaXNzdWVfcDJwX3Byb3Zpc2lvbl9yZXF1ZXN0MjNhKHBhZGFwdGVyLAotCQkJCQkJCQkJCQkJTlVMTCwKLQkJCQkJCQkJCQkJCTAsCi0JCQkJCQkJCQkJCQlwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby5wZWVyRGV2QWRkcik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBfU1VDQ0VTUzsKLQl9IGVsc2UgaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fSU5HKSkgewotCQlpZiAocHdkaW5mby0+bmVnb19yZXFfaW5mby5iZW5hYmxlID09IHRydWUpIHsKLQkJCURCR184NzIzQSgiWyVzXSBQMlAgU3RhdGUgaXMgR09ORUdPIElORyFcbiIsIF9fZnVuY19fKTsKLQkJCWlmIChldGhlcl9hZGRyX2VxdWFsKHB3ZGluZm8tPm5lZ29fcmVxX2luZm8ucGVlckRldkFkZHIsCi0JCQkJCSAgICAgaGRyLT5hZGRyMikpIHsKLQkJCQlwd2RpbmZvLT5uZWdvX3JlcV9pbmZvLmJlbmFibGUgPSBmYWxzZTsKLQkJCQlpc3N1ZV9wMnBfR09fcmVxdWVzdDIzYShwYWRhcHRlciwgcHdkaW5mby0+bmVnb19yZXFfaW5mby5wZWVyRGV2QWRkcik7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9UWF9JTlZJVEVfUkVRKSkgewotCQlpZiAocHdkaW5mby0+aW52aXRlcmVxX2luZm8uYmVuYWJsZSA9PSB0cnVlKSB7Ci0JCQlEQkdfODcyM0EoIlslc10gUDJQX1NUQVRFX1RYX0lOVklURV9SRVEhXG4iLCBfX2Z1bmNfXyk7Ci0JCQlpZiAoZXRoZXJfYWRkcl9lcXVhbCgKLQkJCQkgICAgcHdkaW5mby0+aW52aXRlcmVxX2luZm8ucGVlcl9tYWNhZGRyLAotCQkJCSAgICBoZHItPmFkZHIyKSkgewotCQkJCXB3ZGluZm8tPmludml0ZXJlcV9pbmZvLmJlbmFibGUgPSBmYWxzZTsKLQkJCQlpc3N1ZV9wMnBfaW52aXRhdGlvbl9yZXF1ZXN0MjNhKHBhZGFwdGVyLCBwd2RpbmZvLT5pbnZpdGVyZXFfaW5mby5wZWVyX21hY2FkZHIpOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmCiAKIAlpZiAocG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnN0YXRlID09IFNDQU5fUFJPQ0VTUykgewogCQlyZXBvcnRfc3VydmV5X2V2ZW50MjNhKHBhZGFwdGVyLCBwcmVjdl9mcmFtZSk7CkBAIC04MjEsMzAgKzc0MCwzMCBAQAogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdW5zaWduZWQgaW50IE9uQmVhY29uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludAorT25CZWFjb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogCWludCBjYW1faWR4OwogCXN0cnVjdCBzdGFfaW5mbwkqcHN0YTsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAlzdHJ1Y3Qgc3RhX3ByaXYJKnBzdGFwcml2ID0gJnBhZGFwdGVyLT5zdGFwcml2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBwcmVjdl9mcmFtZS0+cGt0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCXU4ICpwZnJhbWUgPSBza2ItPmRhdGE7Ci0JdWludCBsZW4gPSBza2ItPmxlbjsKKwlpbnQgcGt0X2xlbiA9IHNrYi0+bGVuOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwYnNzOwogCWludCByZXQgPSBfU1VDQ0VTUzsKLQl1OCAqcCA9IE5VTEw7CisJdTggKnAsICpwaWU7CisJaW50IHBpZV9sZW47CiAJdTMyIGllbGVuID0gMDsKIAotCXAgPSBydHdfZ2V0X2llMjNhKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKwotCQkJICBfQkVBQ09OX0lFX09GRlNFVF8sIF9FWFRfU1VQUE9SVEVEUkFURVNfSUVfLCAmaWVsZW4sCi0JCQkgIGxlbiAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgLQotCQkJICBfQkVBQ09OX0lFX09GRlNFVF8pOwotCWlmICgocCAhPSBOVUxMKSAmJiAoaWVsZW4gPiAwKSkgewotCQlpZiAoKCoocCArIDEgKyBpZWxlbikgPT0gMHgyRCkgJiYgKCoocCArIDIgKyBpZWxlbikgIT0gMHgyRCkpIHsKKwlwaWUgPSBtZ210LT51LmJlYWNvbi52YXJpYWJsZTsKKwlwaWVfbGVuID0gcGt0X2xlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOworCXAgPSBydHdfZ2V0X2llMjNhKHBpZSwgV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsICZpZWxlbiwgcGllX2xlbik7CisJaWYgKHAgJiYgaWVsZW4gPiAwKSB7CisJCWlmIChwWzEgKyBpZWxlbl0gPT0gMHgyRCAmJiBwWzIgKyBpZWxlbl0gIT0gMHgyRCkgewogCQkJLyogSW52YWxpZCB2YWx1ZSAweDJEIGlzIGRldGVjdGVkIGluIEV4dGVuZGVkIFN1cHBvcnRlZAogCQkJICogUmF0ZXMgKEVTUikgSUUuIFRyeSB0byBmaXggdGhlIElFIGxlbmd0aCB0byBhdm9pZAogCQkJICogZmFpbGVkIEJlYWNvbiBwYXJzaW5nLgpAQCAtODUyLDggKzc3MSw4IEBACiAJCQlEQkdfODcyM0EoIltXSUZJREJHXSBFcnJvciBpbiBFU1IgSUUgaXMgZGV0ZWN0ZWQgaW4gIgogCQkJCSAgIkJlYWNvbiBvZiBCU1NJRDogJXBNLiBGaXggdGhlIGxlbmd0aCBvZiAiCiAJCQkJICAiRVNSIElFIHRvIGF2b2lkIGZhaWxlZCBCZWFjb24gcGFyc2luZy5cbiIsCi0JCQkJICBoZHItPmFkZHIzKTsKLQkJCSoocCArIDEpID0gaWVsZW4gLSAxOworCQkJCSAgbWdtdC0+YnNzaWQpOworCQkJcFsxXSA9IGllbGVuIC0gMTsKIAkJfQogCX0KIApAQCAtODYyLDE0MSArNzgxLDE0MiBAQAogCQlyZXR1cm4gX1NVQ0NFU1M7CiAJfQogCi0JaWYgKGV0aGVyX2FkZHJfZXF1YWwoaGRyLT5hZGRyMywgZ2V0X215X2Jzc2lkMjNhKCZwbWxtZWluZm8tPm5ldHdvcmspKSl7Ci0JCWlmIChwbWxtZWluZm8tPnN0YXRlICYgV0lGSV9GV19BVVRIX05VTEwpIHsKLQkJCS8qIHdlIHNob3VsZCB1cGRhdGUgY3VycmVudCBuZXR3b3JrIGJlZm9yZSBhdXRoLAotCQkJICAgb3Igc29tZSBJRSBpcyB3cm9uZyAqLwotCQkJcGJzcyA9IChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKQotCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSwKLQkJCQkJR0ZQX0FUT01JQyk7Ci0JCQlpZiAocGJzcykgewotCQkJCWlmIChjb2xsZWN0X2Jzc19pbmZvMjNhKHBhZGFwdGVyLCBwcmVjdl9mcmFtZSwKLQkJCQkJCQlwYnNzKSA9PSBfU1VDQ0VTUykgewotCQkJCQl1cGRhdGVfbmV0d29yazIzYSgmcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLCBwYnNzLCBwYWRhcHRlciwgdHJ1ZSk7Ci0JCQkJCXJ0d19nZXRfYmNuX2luZm8yM2EoJnBtbG1lcHJpdi0+Y3VyX25ldHdvcmspOwotCQkJCX0KLQkJCQlrZnJlZShwYnNzKTsKKwlpZiAoIWV0aGVyX2FkZHJfZXF1YWwobWdtdC0+YnNzaWQsCisJCQkgICAgICBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yaykpKQorCQlnb3RvIG91dDsKKworCWlmIChwbWxtZWluZm8tPnN0YXRlICYgV0lGSV9GV19BVVRIX05VTEwpIHsKKwkJLyogd2Ugc2hvdWxkIHVwZGF0ZSBjdXJyZW50IG5ldHdvcmsgYmVmb3JlIGF1dGgsCisJCSAgIG9yIHNvbWUgSUUgaXMgd3JvbmcgKi8KKwkJcGJzcyA9IChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHdsYW5fYnNzaWRfZXgpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHBic3MpIHsKKwkJCWlmIChjb2xsZWN0X2Jzc19pbmZvMjNhKHBhZGFwdGVyLCBwcmVjdl9mcmFtZSwgcGJzcykgPT0KKwkJCSAgICBfU1VDQ0VTUykgeworCQkJCXVwZGF0ZV9uZXR3b3JrMjNhKAorCQkJCQkmcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLCBwYnNzLAorCQkJCQlwYWRhcHRlciwgdHJ1ZSk7CisJCQkJcnR3X2dldF9iY25faW5mbzIzYSgmcG1sbWVwcml2LT5jdXJfbmV0d29yayk7CiAJCQl9Ci0KLQkJCS8qIGNoZWNrIHRoZSB2ZW5kb3Igb2YgdGhlIGFzc29jIEFQICovCi0JCQlwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciA9IGNoZWNrX2Fzc29jX0FQMjNhKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciksIGxlbi1zaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKLQotCQkJLyogdXBkYXRlIFRTRiBWYWx1ZSAqLwotCQkJdXBkYXRlX1RTRjIzYShwbWxtZWV4dCwgcGZyYW1lLCBsZW4pOwotCi0JCQkvKiBzdGFydCBhdXRoICovCi0JCQlzdGFydF9jbG50X2F1dGgyM2EocGFkYXB0ZXIpOwotCi0JCQlyZXR1cm4gX1NVQ0NFU1M7CisJCQlrZnJlZShwYnNzKTsKIAkJfQogCi0JCWlmICgoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19TVEFUSU9OX1NUQVRFKSAmJgotCQkgICAgKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpKSB7Ci0JCQlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKHBzdGFwcml2LCBoZHItPmFkZHIyKTsKLQkJCWlmIChwc3RhKSB7Ci0JCQkJcmV0ID0gcnR3X2NoZWNrX2Jjbl9pbmZvMjNhKHBhZGFwdGVyLCBwZnJhbWUsCi0JCQkJCQkJICAgIGxlbik7Ci0JCQkJaWYgKCFyZXQpIHsKLQkJCQkJREJHXzg3MjNBX0xFVkVMKF9kcnZfYWx3YXlzXywKLQkJCQkJCQkiYXAgaGFzIGNoYW5nZWQsICIKLQkJCQkJCQkiZGlzY29ubmVjdCBub3dcbiIpOwotCQkJCQlyZWNlaXZlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIsIHBtbG1laW5mby0+bmV0d29yay5NYWNBZGRyZXNzLCA2NTUzNSk7Ci0JCQkJCXJldHVybiBfU1VDQ0VTUzsKLQkJCQl9Ci0JCQkJLyogdXBkYXRlIFdNTSwgRVJQIGluIHRoZSBiZWFjb24gKi8KLQkJCQkvKiB0b2RvOiB0aGUgdGltZXIgaXMgdXNlZCBpbnN0ZWFkIG9mCi0JCQkJICAgdGhlIG51bWJlciBvZiB0aGUgYmVhY29uIHJlY2VpdmVkICovCi0JCQkJaWYgKChzdGFfcnhfcGt0cyhwc3RhKSAmIDB4ZikgPT0gMCkgewotCQkJCQkvKiBEQkdfODcyM0EoInVwZGF0ZV9iY25faW5mb1xuIik7ICovCi0JCQkJCXVwZGF0ZV9iZWFjb24yM2FfaW5mbyhwYWRhcHRlciwgcGZyYW1lLAotCQkJCQkJCSAgICAgIGxlbiwgcHN0YSk7Ci0JCQkJfQorCQkvKiBjaGVjayB0aGUgdmVuZG9yIG9mIHRoZSBhc3NvYyBBUCAqLworCQlwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciA9CisJCQljaGVja19hc3NvY19BUDIzYSgodTggKikmbWdtdC0+dS5iZWFjb24sIHBrdF9sZW4gLQorCQkJCQkgIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdSkpOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJCQlwcm9jZXNzX3AycF9wc19pZTIzYShwYWRhcHRlciwgKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpLCAobGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkpOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJCS8qIHVwZGF0ZSBUU0YgVmFsdWUgKi8KKwkJcnR3X3VwZGF0ZV9UU0YocG1sbWVleHQsIG1nbXQpOworCisJCS8qIHN0YXJ0IGF1dGggKi8KKwkJc3RhcnRfY2xudF9hdXRoKHBhZGFwdGVyKTsKKworCQlyZXR1cm4gX1NVQ0NFU1M7CisJfQorCisJaWYgKCgocG1sbWVpbmZvLT5zdGF0ZSAmIDB4MDMpID09IFdJRklfRldfU1RBVElPTl9TVEFURSkgJiYKKwkgICAgKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpKSB7CisJCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIG1nbXQtPnNhKTsKKwkJaWYgKHBzdGEpIHsKKwkJCXJldCA9IHJ0d19jaGVja19iY25faW5mbzIzYShwYWRhcHRlciwgbWdtdCwgcGt0X2xlbik7CisJCQlpZiAoIXJldCkgeworCQkJCURCR184NzIzQV9MRVZFTChfZHJ2X2Fsd2F5c18sICJhcCBoYXMgY2hhbmdlZCwgIgorCQkJCQkJImRpc2Nvbm5lY3Qgbm93XG4iKTsKKwkJCQlyZWNlaXZlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIsIHBtbG1laW5mby0+bmV0d29yay5NYWNBZGRyZXNzLCA2NTUzNSk7CisJCQkJcmV0dXJuIF9TVUNDRVNTOwogCQkJfQotCQl9IGVsc2UgaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfQURIT0NfU1RBVEUpIHsKLQkJCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIGhkci0+YWRkcjIpOwotCQkJaWYgKHBzdGEpIHsKLQkJCQkvKiB1cGRhdGUgV01NLCBFUlAgaW4gdGhlIGJlYWNvbiAqLwotCQkJCS8qIHRvZG86IHRoZSB0aW1lciBpcyB1c2VkIGluc3RlYWQgb2YgdGhlCi0JCQkJICAgbnVtYmVyIG9mIHRoZSBiZWFjb24gcmVjZWl2ZWQgKi8KLQkJCQlpZiAoKHN0YV9yeF9wa3RzKHBzdGEpICYgMHhmKSA9PSAwKSB7Ci0JCQkJCS8qIERCR184NzIzQSgidXBkYXRlX2Jjbl9pbmZvXG4iKTsgKi8KLQkJCQkJdXBkYXRlX2JlYWNvbjIzYV9pbmZvKHBhZGFwdGVyLCBwZnJhbWUsCi0JCQkJCQkJICAgICAgbGVuLCBwc3RhKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIGFsbG9jYXRlIGEgbmV3IENBTSBlbnRyeSBmb3IgSUJTUyBzdGF0aW9uICovCi0JCQkJY2FtX2lkeCA9IGFsbG9jYXRlX2Z3X3N0YV9lbnRyeTIzYShwYWRhcHRlcik7Ci0JCQkJaWYgKGNhbV9pZHggPT0gTlVNX1NUQSkKLQkJCQkJZ290byBfRU5EX09OQkVBQ09OXzsKLQotCQkJCS8qIGdldCBzdXBwb3J0ZWQgcmF0ZSAqLwotCQkJCWlmICh1cGRhdGVfc3RhX3N1cHBvcnRfcmF0ZTIzYShwYWRhcHRlciwgKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBfQkVBQ09OX0lFX09GRlNFVF8pLCAobGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSAtIF9CRUFDT05fSUVfT0ZGU0VUXyksIGNhbV9pZHgpID09IF9GQUlMKSB7Ci0JCQkJCXBtbG1laW5mby0+Rldfc3RhX2luZm9bY2FtX2lkeF0uc3RhdHVzID0gMDsKLQkJCQkJZ290byBfRU5EX09OQkVBQ09OXzsKLQkJCQl9Ci0KLQkJCQkvKiB1cGRhdGUgVFNGIFZhbHVlICovCi0JCQkJdXBkYXRlX1RTRjIzYShwbWxtZWV4dCwgcGZyYW1lLCBsZW4pOwotCi0JCQkJLyogcmVwb3J0IHN0YSBhZGQgZXZlbnQgKi8KLQkJCQlyZXBvcnRfYWRkX3N0YV9ldmVudDIzYShwYWRhcHRlciwgaGRyLT5hZGRyMiwKLQkJCQkJCQljYW1faWR4KTsKKwkJCS8qIHVwZGF0ZSBXTU0sIEVSUCBpbiB0aGUgYmVhY29uICovCisJCQkvKiB0b2RvOiB0aGUgdGltZXIgaXMgdXNlZCBpbnN0ZWFkIG9mCisJCQkgICB0aGUgbnVtYmVyIG9mIHRoZSBiZWFjb24gcmVjZWl2ZWQgKi8KKwkJCWlmICgoc3RhX3J4X3BrdHMocHN0YSkgJiAweGYpID09IDApIHsKKwkJCQkvKiBEQkdfODcyM0EoInVwZGF0ZV9iY25faW5mb1xuIik7ICovCisJCQkJdXBkYXRlX2JlYWNvbjIzYV9pbmZvKHBhZGFwdGVyLCBwZnJhbWUsCisJCQkJCQkgICAgICBwa3RfbGVuLCBwc3RhKTsKIAkJCX0KIAkJfQorCX0gZWxzZSBpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19BREhPQ19TVEFURSkgeworCQlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKHBzdGFwcml2LCBtZ210LT5zYSk7CisJCWlmIChwc3RhKSB7CisJCQkvKiB1cGRhdGUgV01NLCBFUlAgaW4gdGhlIGJlYWNvbiAqLworCQkJLyogdG9kbzogdGhlIHRpbWVyIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUKKwkJCSAgIG51bWJlciBvZiB0aGUgYmVhY29uIHJlY2VpdmVkICovCisJCQlpZiAoKHN0YV9yeF9wa3RzKHBzdGEpICYgMHhmKSA9PSAwKSB7CisJCQkJLyogREJHXzg3MjNBKCJ1cGRhdGVfYmNuX2luZm9cbiIpOyAqLworCQkJCXVwZGF0ZV9iZWFjb24yM2FfaW5mbyhwYWRhcHRlciwgcGZyYW1lLAorCQkJCQkJICAgICAgcGt0X2xlbiwgcHN0YSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBhbGxvY2F0ZSBhIG5ldyBDQU0gZW50cnkgZm9yIElCU1Mgc3RhdGlvbiAqLworCQkJY2FtX2lkeCA9IGFsbG9jYXRlX2Z3X3N0YV9lbnRyeTIzYShwYWRhcHRlcik7CisJCQlpZiAoY2FtX2lkeCA9PSBOVU1fU1RBKQorCQkJCWdvdG8gb3V0OworCisJCQkvKiBnZXQgc3VwcG9ydGVkIHJhdGUgKi8KKwkJCWlmICh1cGRhdGVfc3RhX3N1cHBvcnRfcmF0ZTIzYShwYWRhcHRlciwgcGllLCBwaWVfbGVuLAorCQkJCQkJICAgICAgIGNhbV9pZHgpID09IF9GQUlMKSB7CisJCQkJcG1sbWVpbmZvLT5GV19zdGFfaW5mb1tjYW1faWR4XS5zdGF0dXMgPSAwOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQkvKiB1cGRhdGUgVFNGIFZhbHVlICovCisJCQlydHdfdXBkYXRlX1RTRihwbWxtZWV4dCwgbWdtdCk7CisKKwkJCS8qIHJlcG9ydCBzdGEgYWRkIGV2ZW50ICovCisJCQlyZXBvcnRfYWRkX3N0YV9ldmVudDIzYShwYWRhcHRlciwgbWdtdC0+c2EsCisJCQkJCQljYW1faWR4KTsKKwkJfQogCX0KIAotX0VORF9PTkJFQUNPTl86CitvdXQ6CiAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXVuc2lnbmVkIGludCBPbkF1dGgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKLXsKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKLQl1bnNpZ25lZCBpbnQJYXV0aF9tb2RlLCBzZXEsIGllX2xlbjsKLQl1bnNpZ25lZCBjaGFyCSpzYSwgKnA7Ci0JdTE2CWFsZ29yaXRobTsKLQlpbnQJc3RhdHVzOworc3RhdGljIGludAorT25BdXRoMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3sKIAlzdGF0aWMgc3RydWN0IHN0YV9pbmZvIHN0YXQ7Ci0Jc3RydWN0CXN0YV9pbmZvCSpwc3RhdCA9IE5VTEw7Ci0Jc3RydWN0CXN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGF0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2ID0gJnBhZGFwdGVyLT5zdGFwcml2OwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCBza19idWZmICpza2IgPSBwcmVjdl9mcmFtZS0+cGt0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXU4ICpwZnJhbWUgPSBza2ItPmRhdGE7Ci0JdWludCBsZW4gPSBza2ItPmxlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwl1OCAqcGZyYW1lOworCWNvbnN0IHU4ICpwOworCXVuc2lnbmVkIGNoYXIgKnNhOworCXUxNiBhdXRoX21vZGUsIHNlcSwgYWxnb3JpdGhtOworCWludCBzdGF0dXMsIGxlbiA9IHNrYi0+bGVuOwogCi0JaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpICE9IFdJRklfRldfQVBfU1RBVEUpCisJaWYgKChwbWxtZWluZm8tPnN0YXRlICYgMHgwMykgIT0gV0lGSV9GV19BUF9TVEFURSkKIAkJcmV0dXJuIF9GQUlMOwogCiAJREJHXzg3MjNBKCIrT25BdXRoMjNhXG4iKTsKIAotCXNhID0gaGRyLT5hZGRyMjsKKwlzYSA9IG1nbXQtPnNhOwogCiAJYXV0aF9tb2RlID0gcHNlY3VyaXR5cHJpdi0+ZG90MTFBdXRoQWxncnRobTsKLQlzZXEgPSBjcHVfdG9fbGUxNigqKHUxNiopKCh1bnNpZ25lZCBsb25nKXBmcmFtZSArCi0JCQkJICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgMikpOwotCWFsZ29yaXRobSA9IGNwdV90b19sZTE2KCoodTE2KikoKHVuc2lnbmVkIGxvbmcpcGZyYW1lICsKLQkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkpOworCisJcGZyYW1lID0gbWdtdC0+dS5hdXRoLnZhcmlhYmxlOworCWxlbiA9IHNrYi0+bGVuIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmF1dGgudmFyaWFibGUpOworCisJc2VxID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOworCWFsZ29yaXRobSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CiAKIAlEQkdfODcyM0EoImF1dGggYWxnID0leCwgc2VxID0lWFxuIiwgYWxnb3JpdGhtLCBzZXEpOwogCiAJaWYgKGF1dGhfbW9kZSA9PSAyICYmCi0JICAgIHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDQwXyAmJgotCSAgICBwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtICE9IF9XRVAxMDRfKQorCSAgICBwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwICYmCisJICAgIHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gIT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KQogCQlhdXRoX21vZGUgPSAwOwogCiAJLyogIHJ4IGEgc2hhcmVkLWtleSBhdXRoIGJ1dCBzaGFyZWQgbm90IGVuYWJsZWQsIG9yICovCiAJLyogIHJ4IGEgb3Blbi1zeXN0ZW0gYXV0aCBidXQgc2hhcmVkLWtleSBpcyBlbmFibGVkICovCi0JaWYgKChhbGdvcml0aG0gPiAwICYmIGF1dGhfbW9kZSA9PSAwKSB8fAotCSAgICAoYWxnb3JpdGhtID09IDAgJiYgYXV0aF9tb2RlID09IDEpKSB7CisJaWYgKChhbGdvcml0aG0gIT0gV0xBTl9BVVRIX09QRU4gJiYgYXV0aF9tb2RlID09IDApIHx8CisJICAgIChhbGdvcml0aG0gPT0gV0xBTl9BVVRIX09QRU4gJiYgYXV0aF9tb2RlID09IDEpKSB7CiAJCURCR184NzIzQSgiYXV0aCByZWplY3RlZCBkdWUgdG8gYmFkIGFsZyBbYWxnID0lZCwgYXV0aF9taWIgIgogCQkJICAiPSVkXSAlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCiAJCQkgIGFsZ29yaXRobSwgYXV0aF9tb2RlLApAQCAtMTAxNyw3ICs5MzcsNyBAQAogCQkvKiAgYWxsb2NhdGUgYSBuZXcgb25lICovCiAJCURCR184NzIzQSgiZ29pbmcgdG8gYWxsb2Mgc3RhaW5mbyBmb3Igc2EgPSJNQUNfRk1UIlxuIiwKIAkJCSAgTUFDX0FSRyhzYSkpOwotCQlwc3RhdCA9IHJ0d19hbGxvY19zdGFpbmZvMjNhKHBzdGFwcml2LCBzYSk7CisJCXBzdGF0ID0gcnR3X2FsbG9jX3N0YWluZm8yM2EocHN0YXByaXYsIHNhLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFwc3RhdCkgewogCQkJREJHXzg3MjNBKCIgRXhjZWVkIHRoZSB1cHBlciBsaW1pdCBvZiBzdXBwb3J0ZWQgIgogCQkJCSAgImNsaWVudHMuLi5cbiIpOwpAQCAtMTAzNSw4ICs5NTUsNyBAQAogCQlpZiAoIWxpc3RfZW1wdHkoJnBzdGF0LT5hc29jX2xpc3QpKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZwc3RhdC0+YXNvY19saXN0KTsKIAkJCXBzdGFwcml2LT5hc29jX2xpc3RfY250LS07Ci0JCQlpZiAocHN0YXQtPmV4cGlyZV90byA+IDApCi0JCQl7CisJCQlpZiAocHN0YXQtPmV4cGlyZV90byA+IDApIHsKIAkJCQkvKiBUT0RPOiBTVEEgcmVfYXV0aCB3aXRoaW4gZXhwaXJlX3RvICovCiAJCQl9CiAJCX0KQEAgLTEwNjQsNyArOTgzLDcgQEAKIAkJZ290byBhdXRoX2ZhaWw7CiAJfQogCi0JaWYgKGFsZ29yaXRobSA9PSAwICYmIChhdXRoX21vZGUgPT0gMCB8fCBhdXRoX21vZGUgPT0gMikpIHsKKwlpZiAoYWxnb3JpdGhtID09IFdMQU5fQVVUSF9PUEVOICYmIChhdXRoX21vZGUgPT0gMCB8fCBhdXRoX21vZGUgPT0gMikpIHsKIAkJaWYgKHNlcSA9PSAxKSB7CiAJCQlwc3RhdC0+c3RhdGUgJj0gfldJRklfRldfQVVUSF9OVUxMOwogCQkJcHN0YXQtPnN0YXRlIHw9IFdJRklfRldfQVVUSF9TVUNDRVNTOwpAQCAtMTA4OCwyMiArMTAwNywxNiBAQAogCQkJLyogY2hlY2tpbmcgZm9yIGNoYWxsZW5naW5nIHR4dC4uLiAqLwogCQkJREJHXzg3MjNBKCJjaGVja2luZyBmb3IgY2hhbGxlbmdpbmcgdHh0Li4uXG4iKTsKIAotCQkJcCA9IHJ0d19nZXRfaWUyM2EocGZyYW1lICsKLQkJCQkJICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsKLQkJCQkJICA0ICsgX0FVVEhfSUVfT0ZGU0VUXywgX0NITEdFVFhUX0lFXywKLQkJCQkJICAoaW50ICopJmllX2xlbiwgbGVuIC0KLQkJCQkJICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpIC0KLQkJCQkJICBfQVVUSF9JRV9PRkZTRVRfIC0gNCk7Ci0KLQkJCWlmICgocCA9PSBOVUxMKSB8fCAoaWVfbGVuPD0gMCkpIHsKKwkJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0NIQUxMRU5HRSwgcGZyYW1lLCBsZW4pOworCQkJaWYgKCFwIHx8IHBbMV0gPD0gMCkgewogCQkJCURCR184NzIzQSgiYXV0aCByZWplY3RlZCBiZWNhdXNlIGNoYWxsZW5nZSAiCiAJCQkJCSAgImZhaWx1cmUhKDEpXG4iKTsKIAkJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19DSEFMTEVOR0VfRkFJTDsKIAkJCQlnb3RvIGF1dGhfZmFpbDsKIAkJCX0KIAotCQkJaWYgKCFtZW1jbXAoKHZvaWQgKikocCArIDIpLCBwc3RhdC0+Y2hnX3R4dCwgMTI4KSkgewotCQkJCXBzdGF0LT5zdGF0ZSAmPSAofldJRklfRldfQVVUSF9TVEFURSk7CisJCQlpZiAoIW1lbWNtcChwICsgMiwgcHN0YXQtPmNoZ190eHQsIDEyOCkpIHsKKwkJCQlwc3RhdC0+c3RhdGUgJj0gfldJRklfRldfQVVUSF9TVEFURTsKIAkJCQlwc3RhdC0+c3RhdGUgfD0gV0lGSV9GV19BVVRIX1NVQ0NFU1M7CiAJCQkJLyogIGNoYWxsZW5naW5nIHR4dCBpcyBjb3JyZWN0Li4uICovCiAJCQkJcHN0YXQtPmV4cGlyZV90byA9ICBwc3RhcHJpdi0+YXNzb2NfdG87CkBAIC0xMTIyLDEwICsxMDM1LDEwIEBACiAJCX0KIAl9CiAKLQkvKiAgTm93LCB3ZSBhcmUgZ29pbmcgdG8gaXNzdWVfYXV0aDIzYS4uLiAqLworCS8qICBOb3csIHdlIGFyZSBnb2luZyB0byBpc3N1ZV9hdXRoLi4uICovCiAJcHN0YXQtPmF1dGhfc2VxID0gc2VxICsgMTsKIAotCWlzc3VlX2F1dGgyM2EocGFkYXB0ZXIsIHBzdGF0LCAodW5zaWduZWQgc2hvcnQpV0xBTl9TVEFUVVNfU1VDQ0VTUyk7CisJaXNzdWVfYXV0aChwYWRhcHRlciwgcHN0YXQsIFdMQU5fU1RBVFVTX1NVQ0NFU1MpOwogCiAJaWYgKHBzdGF0LT5zdGF0ZSAmIFdJRklfRldfQVVUSF9TVUNDRVNTKQogCQlwc3RhdC0+YXV0aF9zZXEgPSAwOwpAQCAtMTE0Miw0NiArMTA1NSw0NSBAQAogCXBzdGF0LT5hdXRoX3NlcSA9IDI7CiAJbWVtY3B5KHBzdGF0LT5od2FkZHIsIHNhLCA2KTsKIAotCWlzc3VlX2F1dGgyM2EocGFkYXB0ZXIsIHBzdGF0LCAodW5zaWduZWQgc2hvcnQpc3RhdHVzKTsKKwlpc3N1ZV9hdXRoKHBhZGFwdGVyLCBwc3RhdCwgKHVuc2lnbmVkIHNob3J0KXN0YXR1cyk7CiAKLSNlbmRpZgogCXJldHVybiBfRkFJTDsKIH0KKyNlbmRpZgogCi11bnNpZ25lZCBpbnQgT25BdXRoMjNhQ2xpZW50MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludAorT25BdXRoMjNhQ2xpZW50MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKLQl1bnNpZ25lZCBpbnQJc2VxLCBsZW4sIHN0YXR1cywgYWxndGhtLCBvZmZzZXQ7Ci0JdW5zaWduZWQgY2hhcgkqcDsKLQl1bnNpZ25lZCBpbnQJZ28yYXNvYyA9IDA7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwl1bnNpZ25lZCBpbnQgc2VxLCBzdGF0dXMsIGFsZ3RobTsKKwl1bnNpZ25lZCBpbnQgZ28yYXNvYyA9IDA7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOwotCXVpbnQgcGt0X2xlbiA9IHNrYi0+bGVuOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWNvbnN0IHU4ICpwOworCXU4ICpwaWU7CisJaW50IHBsZW4gPSBza2ItPmxlbjsKIAogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGNoZWNrIEExIG1hdGNoZXMgb3Igbm90ICovCi0JaWYgKCFldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwKLQkJCSAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSkpCisJaWYgKCFldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgbWdtdC0+ZGEpKQogCQlyZXR1cm4gX1NVQ0NFU1M7CiAKIAlpZiAoIShwbWxtZWluZm8tPnN0YXRlICYgV0lGSV9GV19BVVRIX1NUQVRFKSkKIAkJcmV0dXJuIF9TVUNDRVNTOwogCi0Jb2Zmc2V0ID0gaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSA/IDQ6IDA7CisJcGllID0gbWdtdC0+dS5hdXRoLnZhcmlhYmxlOworCXBsZW4gLT0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmF1dGgudmFyaWFibGUpOwogCi0JYWxndGhtCT0gbGUxNl90b19jcHUoKih1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZylwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgb2Zmc2V0KSk7Ci0Jc2VxCT0gbGUxNl90b19jcHUoKih1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZylwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgb2Zmc2V0ICsgMikpOwotCXN0YXR1cwk9IGxlMTZfdG9fY3B1KCoodW5zaWduZWQgc2hvcnQgKikoKHVuc2lnbmVkIGxvbmcpcGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIG9mZnNldCArIDQpKTsKKwlhbGd0aG0gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOworCXNlcSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOwogCi0JaWYgKHN0YXR1cyAhPSAwKQotCXsKKwlpZiAoc3RhdHVzKSB7CiAJCURCR184NzIzQSgiY2xudCBhdXRoIGZhaWwsIHN0YXR1czogJWRcbiIsIHN0YXR1cyk7Ci0JCWlmIChzdGF0dXMgPT0gMTMpLyogIHBtbG1laW5mby0+YXV0aF9hbGdvID09IGRvdDExQXV0aEFsZ3J0aG1fQXV0bykgKi8KLQkJeworCQkvKiAgcG1sbWVpbmZvLT5hdXRoX2FsZ28gPT0gZG90MTFBdXRoQWxncnRobV9BdXRvKSAqLworCQlpZiAoc3RhdHVzID09IFdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcpIHsKIAkJCWlmIChwbWxtZWluZm8tPmF1dGhfYWxnbyA9PSBkb3QxMUF1dGhBbGdydGhtX1NoYXJlZCkKIAkJCQlwbWxtZWluZm8tPmF1dGhfYWxnbyA9IGRvdDExQXV0aEFsZ3J0aG1fT3BlbjsKIAkJCWVsc2UKQEAgLTExOTMsNTUgKzExMDUsNDEgQEAKIAkJZ290byBhdXRoY2xudF9mYWlsOwogCX0KIAotCWlmIChzZXEgPT0gMikKLQl7Ci0JCWlmIChwbWxtZWluZm8tPmF1dGhfYWxnbyA9PSBkb3QxMUF1dGhBbGdydGhtX1NoYXJlZCkKLQkJewotCQkJIC8qICBsZWdlbmRhcnkgc2hhcmVkIHN5c3RlbSAqLwotCQkJcCA9IHJ0d19nZXRfaWUyM2EocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIF9BVVRIX0lFX09GRlNFVF8sIF9DSExHRVRYVF9JRV8sIChpbnQgKikmbGVuLAotCQkJCXBrdF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpIC0gX0FVVEhfSUVfT0ZGU0VUXyk7CisJaWYgKHNlcSA9PSAyKSB7CisJCWlmIChwbWxtZWluZm8tPmF1dGhfYWxnbyA9PSBkb3QxMUF1dGhBbGdydGhtX1NoYXJlZCkgeworCQkJLyogIGxlZ2VuZGFyeSBzaGFyZWQgc3lzdGVtICovCisJCQlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9DSEFMTEVOR0UsIHBpZSwgcGxlbik7CiAKLQkJCWlmIChwID09IE5VTEwpCi0JCQl7CisJCQlpZiAoIXApIHsKIAkJCQkvKiBEQkdfODcyM0EoIm1hcmM6IG5vIGNoYWxsZW5nZSB0ZXh0P1xuIik7ICovCiAJCQkJZ290byBhdXRoY2xudF9mYWlsOwogCQkJfQogCi0JCQltZW1jcHkoKHZvaWQgKikocG1sbWVpbmZvLT5jaGdfdHh0KSwgKHZvaWQgKikocCArIDIpLCBsZW4pOworCQkJbWVtY3B5KCh2b2lkICopKHBtbG1laW5mby0+Y2hnX3R4dCksIHAgKyAyLCBwWzFdKTsKIAkJCXBtbG1laW5mby0+YXV0aF9zZXEgPSAzOwotCQkJaXNzdWVfYXV0aDIzYShwYWRhcHRlciwgTlVMTCwgMCk7CisJCQlpc3N1ZV9hdXRoKHBhZGFwdGVyLCBOVUxMLCAwKTsKIAkJCXNldF9saW5rX3RpbWVyKHBtbG1lZXh0LCBSRUFVVEhfVE8pOwogCiAJCQlyZXR1cm4gX1NVQ0NFU1M7Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQkvKiAgb3BlbiBzeXN0ZW0gKi8KIAkJCWdvMmFzb2MgPSAxOwogCQl9Ci0JfQotCWVsc2UgaWYgKHNlcSA9PSA0KQotCXsKKwl9IGVsc2UgaWYgKHNlcSA9PSA0KSB7CiAJCWlmIChwbWxtZWluZm8tPmF1dGhfYWxnbyA9PSBkb3QxMUF1dGhBbGdydGhtX1NoYXJlZCkKLQkJewogCQkJZ28yYXNvYyA9IDE7Ci0JCX0KIAkJZWxzZQotCQl7CiAJCQlnb3RvIGF1dGhjbG50X2ZhaWw7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQkvKiAgdGhpcyBpcyBhbHNvIGlsbGVnYWwgKi8KLQkJLyogREJHXzg3MjNBKCJtYXJjOiBjbG50IGF1dGggZmFpbGVkIGR1ZSB0byBpbGxlZ2FsIHNlcSA9JXhcbiIsIHNlcSk7ICovCisJCS8qIERCR184NzIzQSgibWFyYzogY2xudCBhdXRoIGZhaWxlZCBkdWUgdG8gaWxsZWdhbCBzZXEgPSV4XG4iLAorCQkgICBzZXEpOyAqLwogCQlnb3RvIGF1dGhjbG50X2ZhaWw7CiAJfQogCi0JaWYgKGdvMmFzb2MpCi0JeworCWlmIChnbzJhc29jKSB7CiAJCURCR184NzIzQV9MRVZFTChfZHJ2X2Fsd2F5c18sICJhdXRoIHN1Y2Nlc3MsIHN0YXJ0IGFzc29jXG4iKTsKLQkJc3RhcnRfY2xudF9hc3NvYzIzYShwYWRhcHRlcik7CisJCXN0YXJ0X2NsbnRfYXNzb2MocGFkYXB0ZXIpOwogCQlyZXR1cm4gX1NVQ0NFU1M7CiAJfQogCkBAIC0xMjUyLDE5ICsxMTUwLDE1MyBAQAogCXJldHVybiBfRkFJTDsKIH0KIAotdW5zaWduZWQgaW50IE9uQXNzb2NSZXEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQorc3RhdGljIGludCBydHdfdmFsaWRhdGVfdmVuZG9yX3NwZWNpZmljX2llcyhjb25zdCB1OCAqcG9zLCBpbnQgZWxlbikKK3sKKwl1bnNpZ25lZCBpbnQgb3VpOworCisJLyogZmlyc3QgMyBieXRlcyBpbiB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gZWxlbWVudCBhcmUgdGhlIElFRUUKKwkgKiBPVUkgb2YgdGhlIHZlbmRvci4gVGhlIGZvbGxvd2luZyBieXRlIGlzIHVzZWQgYSB2ZW5kb3Igc3BlY2lmaWMKKwkgKiBzdWItdHlwZS4gKi8KKwlpZiAoZWxlbiA8IDQpIHsKKwkJREJHXzg3MjNBKCJzaG9ydCB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gZWxlbWVudCAiCisJCQkgICJpZ25vcmVkIChsZW4gPSVpKVxuIiwgZWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW91aSA9IFJUV19HRVRfQkUyNChwb3MpOworCXN3aXRjaCAob3VpKSB7CisJY2FzZSBXTEFOX09VSV9NSUNST1NPRlQ6CisJCS8qIE1pY3Jvc29mdC9XaS1GaSBpbmZvcm1hdGlvbiBlbGVtZW50cyBhcmUgZnVydGhlciB0eXBlZCBhbmQKKwkJICogc3VidHlwZWQgKi8KKwkJc3dpdGNoIChwb3NbM10pIHsKKwkJY2FzZSAxOgorCQkJLyogTWljcm9zb2Z0IE9VSSAoMDA6NTA6RjIpIHdpdGggT1VJIFR5cGUgMToKKwkJCSAqIHJlYWwgV1BBIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KKwkJCWJyZWFrOworCQljYXNlIFdNRV9PVUlfVFlQRTogLyogdGhpcyBpcyBhIFdpLUZpIFdNRSBpbmZvLiBlbGVtZW50ICovCisJCQlpZiAoZWxlbiA8IDUpIHsKKwkJCQlEQkdfODcyM0EoInNob3J0IFdNRSBpbmZvcm1hdGlvbiBlbGVtZW50ICIKKwkJCQkJICAiaWdub3JlZCAobGVuID0laSlcbiIsIGVsZW4pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJc3dpdGNoIChwb3NbNF0pIHsKKwkJCWNhc2UgV01FX09VSV9TVUJUWVBFX0lORk9STUFUSU9OX0VMRU1FTlQ6CisJCQljYXNlIFdNRV9PVUlfU1VCVFlQRV9QQVJBTUVURVJfRUxFTUVOVDoKKwkJCQlicmVhazsKKwkJCWNhc2UgV01FX09VSV9TVUJUWVBFX1RTUEVDX0VMRU1FTlQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURCR184NzIzQSgidW5rbm93biBXTUUgaW5mb3JtYXRpb24gZWxlbWVudCAiCisJCQkJCSAgImlnbm9yZWQgKHN1YnR5cGUgPSVkIGxlbiA9JWkpXG4iLAorCQkJCQkgICBwb3NbNF0sIGVsZW4pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCS8qIFdpLUZpIFByb3RlY3RlZCBTZXR1cCAoV1BTKSBJRSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkdfODcyM0EoIlVua25vd24gTWljcm9zb2Z0IGluZm9ybWF0aW9uIGVsZW1lbnQgIgorCQkJCSAgImlnbm9yZWQgKHR5cGUgPSVkIGxlbiA9JWkpXG4iLAorCQkJCSAgcG9zWzNdLCBlbGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBPVUlfQlJPQURDT006CisJCXN3aXRjaCAocG9zWzNdKSB7CisJCWNhc2UgVkVORE9SX0hUX0NBUEFCX09VSV9UWVBFOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkdfODcyM0EoIlVua25vd24gQnJvYWRjb20gaW5mb3JtYXRpb24gZWxlbWVudCAiCisJCQkJICAiaWdub3JlZCAodHlwZSA9JWQgbGVuID0laSlcbiIsIHBvc1szXSwgZWxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURCR184NzIzQSgidW5rbm93biB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gZWxlbWVudCAiCisJCQkgICJpZ25vcmVkICh2ZW5kb3IgT1VJICUwMng6JTAyeDolMDJ4IGxlbiA9JWkpXG4iLAorCQkJICAgcG9zWzBdLCBwb3NbMV0sIHBvc1syXSwgZWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0d192YWxpZGF0ZV9mcmFtZV9pZXMoY29uc3QgdTggKnN0YXJ0LCB1aW50IGxlbikKK3sKKwljb25zdCB1OCAqcG9zID0gc3RhcnQ7CisJaW50IGxlZnQgPSBsZW47CisJaW50IHVua25vd24gPSAwOworCisJd2hpbGUgKGxlZnQgPj0gMikgeworCQl1OCBpZCwgZWxlbjsKKworCQlpZCA9ICpwb3MrKzsKKwkJZWxlbiA9ICpwb3MrKzsKKwkJbGVmdCAtPSAyOworCisJCWlmIChlbGVuID4gbGVmdCkgeworCQkJREJHXzg3MjNBKCIlczogSUVFRSA4MDIuMTEgZmFpbGVkIChpZCA9JWQgZWxlbiA9JWQgIgorCQkJCSAgImxlZnQgPSVpKVxuIiwgX19mdW5jX18sIGlkLCBlbGVuLCBsZWZ0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3dpdGNoIChpZCkgeworCQljYXNlIFdMQU5fRUlEX1NTSUQ6CisJCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKwkJY2FzZSBXTEFOX0VJRF9GSF9QQVJBTVM6CisJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgorCQljYXNlIFdMQU5fRUlEX0NGX1BBUkFNUzoKKwkJY2FzZSBXTEFOX0VJRF9USU06CisJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CisJCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgorCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgorCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOgorCQljYXNlIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzoKKwkJCWlmIChydHdfdmFsaWRhdGVfdmVuZG9yX3NwZWNpZmljX2llcyhwb3MsIGVsZW4pKQorCQkJCXVua25vd24rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJY2FzZSBXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWToKKwkJY2FzZSBXTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFM6CisJCWNhc2UgV0xBTl9FSURfTU9CSUxJVFlfRE9NQUlOOgorCQljYXNlIFdMQU5fRUlEX0ZBU1RfQlNTX1RSQU5TSVRJT046CisJCWNhc2UgV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTDoKKwkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgorCQljYXNlIFdMQU5fRUlEX0hUX09QRVJBVElPTjoKKwkJZGVmYXVsdDoKKwkJCXVua25vd24rKzsKKwkJCURCR184NzIzQSgiJXMgSUVFRSA4MDIuMTEgaWdub3JlZCB1bmtub3duIGVsZW1lbnQgIgorCQkJCSAgIihpZCA9JWQgZWxlbiA9JWQpXG4iLCBfX2Z1bmNfXywgaWQsIGVsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQlsZWZ0IC09IGVsZW47CisJCXBvcyArPSBlbGVuOworCX0KKworCWlmIChsZWZ0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK09uQXNzb2NSZXEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQogCXUxNiBjYXBhYl9pbmZvLCBsaXN0ZW5faW50ZXJ2YWw7Ci0Jc3RydWN0IHJ0d19pZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBzdGFfaW5mbwkqcHN0YXQ7Ci0JdW5zaWduZWQgY2hhcgkJcmVhc3NvYywgKnAsICpwb3MsICp3cGFfaWU7CisJdW5zaWduZWQgY2hhciByZWFzc29jOwogCXVuc2lnbmVkIGNoYXIgV01NX0lFW10gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwgMHgwMCwgMHgwMX07Ci0JaW50CQlpLCBpZV9sZW4sIHdwYV9pZV9sZW4sIGxlZnQ7Ci0JdW5zaWduZWQgY2hhcgkJc3VwcG9ydFJhdGVbMTZdOwotCWludAkJCQkJc3VwcG9ydFJhdGVOdW07Ci0JdW5zaWduZWQgc2hvcnQJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7Ci0JdW5zaWduZWQgc2hvcnQgaWVfb2Zmc2V0OworCWludCBpLCB3cGFfaWVfbGVuLCBsZWZ0OworCXVuc2lnbmVkIGNoYXIgc3VwcG9ydFJhdGVbMTZdOworCWludCBzdXBwb3J0UmF0ZU51bTsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTOwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwpAQCAtMTI3Miw2OSArMTMwNCw1NiBAQAogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpjdXIgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOwogCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJY29uc3QgdTggKnBvcywgKnAsICp3cGFfaWUsICp3cHNfaWU7CiAJdTggKnBmcmFtZSA9IHNrYi0+ZGF0YTsKIAl1aW50IHBrdF9sZW4gPSBza2ItPmxlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1MTYgZnJhbWVfY29udHJvbDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQl1OCBwMnBfc3RhdHVzX2NvZGUgPSBQMlBfU1RBVFVTX1NVQ0NFU1M7Ci0JdTggKnAycGllOwotCXUzMiBwMnBpZWxlbiA9IDA7Ci0JdTgJd2ZkX2llW01BWF9XRkRfSUVfTEVOXSA9IHsgMHgwMCB9OwotCXUzMgl3ZmRfaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJaW50IHI7CiAKLQlpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgIT0gV0lGSV9GV19BUF9TVEFURSkKKwlpZiAoKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSAhPSBXSUZJX0ZXX0FQX1NUQVRFKQogCQlyZXR1cm4gX0ZBSUw7CiAKLQlmcmFtZV9jb250cm9sID0gaGRyLT5mcmFtZV9jb250cm9sOwotCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZyYW1lX2NvbnRyb2wpKSB7CisJbGVmdCA9IHBrdF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOworCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKG1nbXQtPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXJlYXNzb2MgPSAwOwotCQlpZV9vZmZzZXQgPSBfQVNPQ1JFUV9JRV9PRkZTRVRfOworCQlwb3MgPSBtZ210LT51LmFzc29jX3JlcS52YXJpYWJsZTsKKwkJbGVmdCAtPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYXNzb2NfcmVxLnZhcmlhYmxlKTsKIAl9IGVsc2UgeyAvKiAgV0lGSV9SRUFTU09DUkVRICovCiAJCXJlYXNzb2MgPSAxOwotCQlpZV9vZmZzZXQgPSBfUkVBU09DUkVRX0lFX09GRlNFVF87CisJCXBvcyA9IG1nbXQtPnUucmVhc3NvY19yZXEudmFyaWFibGU7CisJCWxlZnQgLT0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LnJlYXNzb2NfcmVxLnZhcmlhYmxlKTsKIAl9CiAKLQlpZiAocGt0X2xlbiA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBpZV9vZmZzZXQpIHsKLQkJREJHXzg3MjNBKCJoYW5kbGVfYXNzb2MocmVhc3NvYyA9JWQpIC0gdG9vIHNob3J0IHBheWxvYWQgKGxlbiA9JWx1KSIKLQkJICAgICAgICJcbiIsIHJlYXNzb2MsICh1bnNpZ25lZCBsb25nKXBrdF9sZW4pOworCWlmIChsZWZ0IDwgMCkgeworCQlEQkdfODcyM0EoImhhbmRsZV9hc3NvYyhyZWFzc29jID0lZCkgLSB0b28gc2hvcnQgcGF5bG9hZCAiCisJCQkgICIobGVuID0lbHUpXG4iLCByZWFzc29jLCAodW5zaWduZWQgbG9uZylwa3RfbGVuKTsKIAkJcmV0dXJuIF9GQUlMOwogCX0KIAotCXBzdGF0ID0gcnR3X2dldF9zdGFpbmZvMjNhKHBzdGFwcml2LCBoZHItPmFkZHIyKTsKKwlwc3RhdCA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgbWdtdC0+c2EpOwogCWlmICghcHN0YXQpIHsKIAkJc3RhdHVzID0gV0xBTl9SRUFTT05fQ0xBU1MyX0ZSQU1FX0ZST01fTk9OQVVUSF9TVEE7CiAJCWdvdG8gYXNvY19jbGFzczJfZXJyb3I7CiAJfQogCi0JY2FwYWJfaW5mbyA9IGdldF91bmFsaWduZWRfbGUxNihwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKLQkvKiBjYXBhYl9pbmZvID0gbGUxNl90b19jcHUoKih1bnNpZ25lZCBzaG9ydCAqKShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKSk7ICovCi0JLyogbGlzdGVuX2ludGVydmFsID0gbGUxNl90b19jcHUoKih1bnNpZ25lZCBzaG9ydCAqKShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKzIpKTsgKi8KLQlsaXN0ZW5faW50ZXJ2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSsyKTsKLQotCWxlZnQgPSBwa3RfbGVuIC0gKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBpZV9vZmZzZXQpOwotCXBvcyA9IHBmcmFtZSArIChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgaWVfb2Zmc2V0KTsKKwkvKiBUaGVzZSB0d28gYXJlIGxvY2F0ZWQgYXQgdGhlIHNhbWUgb2Zmc2V0cyB3aGV0aGVyIGl0J3MgYW4KKwkgKiBhc3NvY19yZXEgb3IgYSByZWFzc29jX3JlcSAqLworCWNhcGFiX2luZm8gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJm1nbXQtPnUuYXNzb2NfcmVxLmNhcGFiX2luZm8pOworCWxpc3Rlbl9pbnRlcnZhbCA9CisJCWdldF91bmFsaWduZWRfbGUxNigmbWdtdC0+dS5hc3NvY19yZXEubGlzdGVuX2ludGVydmFsKTsKIAogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qICBjaGVjayBpZiB0aGlzIHN0YXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQvYXNzb2NhdGVkICovCi0JaWYgKCEoKHBzdGF0LT5zdGF0ZSkgJiBXSUZJX0ZXX0FVVEhfU1VDQ0VTUykpCi0JewotCQlpZiAoISgocHN0YXQtPnN0YXRlKSAmIFdJRklfRldfQVNTT0NfU1VDQ0VTUykpCi0JCXsKKwlpZiAoIShwc3RhdC0+c3RhdGUgJiBXSUZJX0ZXX0FVVEhfU1VDQ0VTUykpIHsKKwkJaWYgKCEocHN0YXQtPnN0YXRlICYgV0lGSV9GV19BU1NPQ19TVUNDRVNTKSkgewogCQkJc3RhdHVzID0gV0xBTl9SRUFTT05fQ0xBU1MyX0ZSQU1FX0ZST01fTk9OQVVUSF9TVEE7CiAJCQlnb3RvIGFzb2NfY2xhc3MyX2Vycm9yOwotCQl9Ci0JCWVsc2UKLQkJeworCQl9IGVsc2UgewogCQkJcHN0YXQtPnN0YXRlICY9ICh+V0lGSV9GV19BU1NPQ19TVUNDRVNTKTsKIAkJCXBzdGF0LT5zdGF0ZSB8PSBXSUZJX0ZXX0FTU09DX1NUQVRFOwogCQl9Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJcHN0YXQtPnN0YXRlICY9ICh+V0lGSV9GV19BVVRIX1NVQ0NFU1MpOwogCQlwc3RhdC0+c3RhdGUgfD0gV0lGSV9GV19BU1NPQ19TVEFURTsKIAl9CkBAIC0xMzQyLDQxICsxMzYxLDQwIEBACiAJcHN0YXQtPmNhcGFiaWxpdHkgPSBjYXBhYl9pbmZvOwogCiAJLyogbm93IHBhcnNlIGFsbCBpZWVlODAyXzExIGllIHRvIHBvaW50IHRvIGVsZW1zICovCi0JaWYgKHJ0d19pZWVlODAyXzExX3BhcnNlX2VsZW1zMjNhKHBvcywgbGVmdCwgJmVsZW1zLCAxKSA9PSBQYXJzZUZhaWxlZCB8fAotCSAgICAhZWxlbXMuc3NpZCkgeworCisJaWYgKHJ0d192YWxpZGF0ZV9mcmFtZV9pZXMocG9zLCBsZWZ0KSkgewogCQlEQkdfODcyM0EoIlNUQSAiIE1BQ19GTVQgIiBzZW50IGludmFsaWQgYXNzb2NpYXRpb24gcmVxdWVzdFxuIiwKLQkJICAgICAgIE1BQ19BUkcocHN0YXQtPmh3YWRkcikpOworCQkJICBNQUNfQVJHKHBzdGF0LT5od2FkZHIpKTsKIAkJc3RhdHVzID0gV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRTsKIAkJZ290byBPbkFzc29jUmVxMjNhRmFpbDsKIAl9CiAKIAkvKiAgbm93IHdlIHNob3VsZCBjaGVjayBhbGwgdGhlIGZpZWxkcy4uLiAqLwogCS8qICBjaGVja2luZyBTU0lEICovCi0JcCA9IHJ0d19nZXRfaWUyM2EocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIGllX29mZnNldCwgX1NTSURfSUVfLCAmaWVfbGVuLAotCQlwa3RfbGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSAtIGllX29mZnNldCk7Ci0JaWYgKHAgPT0gTlVMTCkKLQl7CisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfU1NJRCwgcG9zLCBsZWZ0KTsKKwlpZiAoIXAgfHwgcFsxXSA9PSAwKSB7CisJCS8qICBicm9hZGNhc3Qgc3NpZCwgaG93ZXZlciBpdCBpcyBub3QgYWxsb3dlZCBpbiBhc3NvY3JlcSAqLworCQlEQkdfODcyM0EoIlNUQSAiIE1BQ19GTVQgIiBzZW50IGludmFsaWQgYXNzb2NpYXRpb24gcmVxdWVzdCAiCisJCQkgICJsYWNraW5nIGFuIFNTSURcbiIsIE1BQ19BUkcocHN0YXQtPmh3YWRkcikpOwogCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFOwotCX0KLQotCWlmIChpZV9sZW4gPT0gMCkgLyogIGJyb2FkY2FzdCBzc2lkLCBob3dldmVyIGl0IGlzIG5vdCBhbGxvd2VkIGluIGFzc29jcmVxICovCi0JCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkU7Ci0JZWxzZSB7CisJCWdvdG8gT25Bc3NvY1JlcTIzYUZhaWw7CisJfSBlbHNlIHsKIAkJLyogIGNoZWNrIGlmIHNzaWQgbWF0Y2ggKi8KLQkJaWYgKG1lbWNtcCgodm9pZCAqKShwKzIpLCBjdXItPlNzaWQuc3NpZCwgY3VyLT5Tc2lkLnNzaWRfbGVuKSkKKwkJaWYgKG1lbWNtcChwICsgMiwgY3VyLT5Tc2lkLnNzaWQsIGN1ci0+U3NpZC5zc2lkX2xlbikpCiAJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFOwogCi0JCWlmIChpZV9sZW4gIT0gY3VyLT5Tc2lkLnNzaWRfbGVuKQorCQlpZiAocFsxXSAhPSBjdXItPlNzaWQuc3NpZF9sZW4pCiAJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFOwogCX0KIAotCWlmIChXTEFOX1NUQVRVU19TVUNDRVNTICE9IHN0YXR1cykKKwlpZiAoc3RhdHVzICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gT25Bc3NvY1JlcTIzYUZhaWw7CiAKIAkvKiAgY2hlY2sgaWYgdGhlIHN1cHBvcnRlZCByYXRlIGlzIG9rICovCi0JcCA9IHJ0d19nZXRfaWUyM2EocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIGllX29mZnNldCwgX1NVUFBPUlRFRFJBVEVTX0lFXywgJmllX2xlbiwgcGt0X2xlbiAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgLSBpZV9vZmZzZXQpOwotCWlmIChwID09IE5VTEwpIHsKLQkJREJHXzg3MjNBKCJSeCBhIHN0YSBhc3NvYy1yZXEgd2hpY2ggc3VwcG9ydGVkIHJhdGUgaXMgZW1wdHkhXG4iKTsKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9TVVBQX1JBVEVTLCBwb3MsIGxlZnQpOworCWlmICghcCkgeworCQlEQkdfODcyM0EoIlJ4IGEgc3RhIGFzc29jLXJlcSB3aGljaCBzdXBwb3J0ZWQgcmF0ZSBpcyAiCisJCQkgICJlbXB0eSFcbiIpOwogCQkvKiAgdXNlIG91ciBvd24gcmF0ZSBzZXQgYXMgc3RhdG9pbiB1c2VkICovCiAJCS8qIG1lbWNweShzdXBwb3J0UmF0ZSwgQVBfQlNTUkFURSwgQVBfQlNTUkFURV9MRU4pOyAqLwogCQkvKiBzdXBwb3J0UmF0ZU51bSA9IEFQX0JTU1JBVEVfTEVOOyAqLwpAQCAtMTM4NCwxNyArMTQwMiwxNCBAQAogCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFOwogCQlnb3RvIE9uQXNzb2NSZXEyM2FGYWlsOwogCX0gZWxzZSB7Ci0JCW1lbWNweShzdXBwb3J0UmF0ZSwgcCsyLCBpZV9sZW4pOwotCQlzdXBwb3J0UmF0ZU51bSA9IGllX2xlbjsKKwkJbWVtY3B5KHN1cHBvcnRSYXRlLCBwICsgMiwgcFsxXSk7CisJCXN1cHBvcnRSYXRlTnVtID0gcFsxXTsKIAotCQlwID0gcnR3X2dldF9pZTIzYShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgaWVfb2Zmc2V0LCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywgJmllX2xlbiwKLQkJCQlwa3RfbGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSAtIGllX29mZnNldCk7Ci0JCWlmIChwICE9ICBOVUxMKSB7Ci0KLQkJCWlmIChzdXBwb3J0UmF0ZU51bTw9IHNpemVvZihzdXBwb3J0UmF0ZSkpCi0JCQl7Ci0JCQkJbWVtY3B5KHN1cHBvcnRSYXRlK3N1cHBvcnRSYXRlTnVtLCBwKzIsIGllX2xlbik7Ci0JCQkJc3VwcG9ydFJhdGVOdW0gKz0gaWVfbGVuOworCQlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUywgcG9zLCBsZWZ0KTsKKwkJaWYgKHApIHsKKwkJCWlmIChzdXBwb3J0UmF0ZU51bSA8PSBzaXplb2Yoc3VwcG9ydFJhdGUpKSB7CisJCQkJbWVtY3B5KHN1cHBvcnRSYXRlK3N1cHBvcnRSYXRlTnVtLCBwICsgMiwgcFsxXSk7CisJCQkJc3VwcG9ydFJhdGVOdW0gKz0gcFsxXTsKIAkJCX0KIAkJfQogCX0KQEAgLTE0MTUsOTAgKzE0MzAsOTcgQEAKIAlwc3RhdC0+d3BhX3BhaXJ3aXNlX2NpcGhlciA9IDA7CiAJcHN0YXQtPndwYTJfcGFpcndpc2VfY2lwaGVyID0gMDsKIAltZW1zZXQocHN0YXQtPndwYV9pZSwgMCwgc2l6ZW9mKHBzdGF0LT53cGFfaWUpKTsKLQlpZiAoKHBzZWN1cml0eXByaXYtPndwYV9wc2sgJiBCSVQoMSkpICYmIGVsZW1zLnJzbl9pZSkgewogCisJd3BhX2llID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9SU04sIHBvcywgbGVmdCk7CisJaWYgKCF3cGFfaWUpCisJCXdwYV9pZSA9IGNmZzgwMjExX2ZpbmRfdmVuZG9yX2llKFdMQU5fT1VJX01JQ1JPU09GVCwKKwkJCQkJCSBXTEFOX09VSV9UWVBFX01JQ1JPU09GVF9XUEEsCisJCQkJCQkgcG9zLCBsZWZ0KTsKKwlpZiAod3BhX2llKSB7CiAJCWludCBncm91cF9jaXBoZXIgPSAwLCBwYWlyd2lzZV9jaXBoZXIgPSAwOwogCi0JCXdwYV9pZSA9IGVsZW1zLnJzbl9pZTsKLQkJd3BhX2llX2xlbiA9IGVsZW1zLnJzbl9pZV9sZW47CisJCXdwYV9pZV9sZW4gPSB3cGFfaWVbMV07CisJCWlmIChwc2VjdXJpdHlwcml2LT53cGFfcHNrICYgQklUKDEpKSB7CisJCQlyID0gcnR3X3BhcnNlX3dwYTJfaWUyM2Eod3BhX2llLCB3cGFfaWVfbGVuICsgMiwKKwkJCQkJCSAmZ3JvdXBfY2lwaGVyLAorCQkJCQkJICZwYWlyd2lzZV9jaXBoZXIsIE5VTEwpOworCQkJaWYgKHIgPT0gX1NVQ0NFU1MpIHsKKwkJCQlwc3RhdC0+ZG90ODAyMXhhbGcgPSAxOy8qIHBzaywgIHRvZG86ODAyLjF4ICovCisJCQkJcHN0YXQtPndwYV9wc2sgfD0gQklUKDEpOwogCi0JCWlmIChydHdfcGFyc2Vfd3BhMl9pZTIzYSh3cGFfaWUtMiwgd3BhX2llX2xlbisyLCAmZ3JvdXBfY2lwaGVyLCAmcGFpcndpc2VfY2lwaGVyLCBOVUxMKSA9PSBfU1VDQ0VTUykgewotCQkJcHN0YXQtPmRvdDgwMjF4YWxnID0gMTsvKiBwc2ssICB0b2RvOjgwMi4xeCAqLwotCQkJcHN0YXQtPndwYV9wc2sgfD0gQklUKDEpOworCQkJCXBzdGF0LT53cGEyX2dyb3VwX2NpcGhlciA9IGdyb3VwX2NpcGhlciAmCisJCQkJCXBzZWN1cml0eXByaXYtPndwYTJfZ3JvdXBfY2lwaGVyOworCQkJCXBzdGF0LT53cGEyX3BhaXJ3aXNlX2NpcGhlciA9IHBhaXJ3aXNlX2NpcGhlciAmCisJCQkJCXBzZWN1cml0eXByaXYtPndwYTJfcGFpcndpc2VfY2lwaGVyOworCQkJfSBlbHNlCisJCQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfSU5WQUxJRF9JRTsKKwkJfSBlbHNlIGlmIChwc2VjdXJpdHlwcml2LT53cGFfcHNrICYgQklUKDApKSB7CisJCQlyID0gcnR3X3BhcnNlX3dwYV9pZTIzYSh3cGFfaWUsIHdwYV9pZV9sZW4gKyAyLAorCQkJCQkJJmdyb3VwX2NpcGhlciwgJnBhaXJ3aXNlX2NpcGhlciwKKwkJCQkJCU5VTEwpOworCQkJaWYgKHIgPT0gX1NVQ0NFU1MpIHsKKwkJCQlwc3RhdC0+ZG90ODAyMXhhbGcgPSAxOy8qIHBzaywgIHRvZG86ODAyLjF4ICovCisJCQkJcHN0YXQtPndwYV9wc2sgfD0gQklUKDApOwogCi0JCQlwc3RhdC0+d3BhMl9ncm91cF9jaXBoZXIgPSBncm91cF9jaXBoZXImcHNlY3VyaXR5cHJpdi0+d3BhMl9ncm91cF9jaXBoZXI7Ci0JCQlwc3RhdC0+d3BhMl9wYWlyd2lzZV9jaXBoZXIgPSBwYWlyd2lzZV9jaXBoZXImcHNlY3VyaXR5cHJpdi0+d3BhMl9wYWlyd2lzZV9jaXBoZXI7Ci0KLQkJCWlmICghcHN0YXQtPndwYTJfZ3JvdXBfY2lwaGVyKQotCQkJCXN0YXR1cyA9IFdMQU5fUkVBU09OX0lOVkFMSURfR1JPVVBfQ0lQSEVSOwotCi0JCQlpZiAoIXBzdGF0LT53cGEyX3BhaXJ3aXNlX2NpcGhlcikKLQkJCQlzdGF0dXMgPSBXTEFOX1JFQVNPTl9JTlZBTElEX1BBSVJXSVNFX0NJUEhFUjsKKwkJCQlwc3RhdC0+d3BhX2dyb3VwX2NpcGhlciA9IGdyb3VwX2NpcGhlciAmCisJCQkJCXBzZWN1cml0eXByaXYtPndwYV9ncm91cF9jaXBoZXI7CisJCQkJcHN0YXQtPndwYV9wYWlyd2lzZV9jaXBoZXIgPSBwYWlyd2lzZV9jaXBoZXIgJgorCQkJCQlwc2VjdXJpdHlwcml2LT53cGFfcGFpcndpc2VfY2lwaGVyOworCQkJfSBlbHNlCisJCQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfSU5WQUxJRF9JRTsKIAkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfSUU7CisJCQl3cGFfaWUgPSBOVUxMOworCQkJd3BhX2llX2xlbiA9IDA7CiAJCX0KLQotCX0gZWxzZSBpZiAoKHBzZWN1cml0eXByaXYtPndwYV9wc2sgJiBCSVQoMCkpICYmIGVsZW1zLndwYV9pZSkgewotCi0JCWludCBncm91cF9jaXBoZXIgPSAwLCBwYWlyd2lzZV9jaXBoZXIgPSAwOwotCi0JCXdwYV9pZSA9IGVsZW1zLndwYV9pZTsKLQkJd3BhX2llX2xlbiA9IGVsZW1zLndwYV9pZV9sZW47Ci0KLQkJaWYgKHJ0d19wYXJzZV93cGFfaWUyM2Eod3BhX2llLTIsIHdwYV9pZV9sZW4rMiwgJmdyb3VwX2NpcGhlciwgJnBhaXJ3aXNlX2NpcGhlciwgTlVMTCkgPT0gX1NVQ0NFU1MpIHsKLQkJCXBzdGF0LT5kb3Q4MDIxeGFsZyA9IDE7LyogcHNrLCAgdG9kbzo4MDIuMXggKi8KLQkJCXBzdGF0LT53cGFfcHNrIHw9IEJJVCgwKTsKLQotCQkJcHN0YXQtPndwYV9ncm91cF9jaXBoZXIgPSBncm91cF9jaXBoZXImcHNlY3VyaXR5cHJpdi0+d3BhX2dyb3VwX2NpcGhlcjsKLQkJCXBzdGF0LT53cGFfcGFpcndpc2VfY2lwaGVyID0gcGFpcndpc2VfY2lwaGVyJnBzZWN1cml0eXByaXYtPndwYV9wYWlyd2lzZV9jaXBoZXI7Ci0KKwkJaWYgKHdwYV9pZSAmJiBzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQkJaWYgKCFwc3RhdC0+d3BhX2dyb3VwX2NpcGhlcikKIAkJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX0dST1VQX0NJUEhFUjsKIAogCQkJaWYgKCFwc3RhdC0+d3BhX3BhaXJ3aXNlX2NpcGhlcikKIAkJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1BBSVJXSVNFX0NJUEhFUjsKLQotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfSU5WQUxJRF9JRTsKIAkJfQotCi0JfSBlbHNlIHsKLQkJd3BhX2llID0gTlVMTDsKLQkJd3BhX2llX2xlbiA9IDA7CiAJfQogCi0JaWYgKFdMQU5fU1RBVFVTX1NVQ0NFU1MgIT0gc3RhdHVzKQorCWlmIChzdGF0dXMgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykKIAkJZ290byBPbkFzc29jUmVxMjNhRmFpbDsKIAogCXBzdGF0LT5mbGFncyAmPSB+KFdMQU5fU1RBX1dQUyB8IFdMQU5fU1RBX01BWUJFX1dQUyk7Ci0JaWYgKHdwYV9pZSA9PSBOVUxMKSB7Ci0JCWlmIChlbGVtcy53cHNfaWUpIHsKLQkJCURCR184NzIzQSgiU1RBIGluY2x1ZGVkIFdQUyBJRSBpbiAiCi0JCQkJICAgIihSZSlBc3NvY2lhdGlvbiBSZXF1ZXN0IC0gYXNzdW1lIFdQUyBpcyAiCi0JCQkJICAgInVzZWRcbiIpOworCisJd3BzX2llID0gY2ZnODAyMTFfZmluZF92ZW5kb3JfaWUoV0xBTl9PVUlfTUlDUk9TT0ZULAorCQkJCQkgV0xBTl9PVUlfVFlQRV9NSUNST1NPRlRfV1BTLAorCQkJCQkgcG9zLCBsZWZ0KTsKKworCWlmICghd3BhX2llKSB7CisJCWlmICh3cHNfaWUpIHsKKwkJCURCR184NzIzQSgiU1RBIGluY2x1ZGVkIFdQUyBJRSBpbiAoUmUpQXNzb2NpYXRpb24gIgorCQkJCSAgIlJlcXVlc3QgLSBhc3N1bWUgV1BTIGlzIHVzZWRcbiIpOwogCQkJcHN0YXQtPmZsYWdzIHw9IFdMQU5fU1RBX1dQUzsKIAkJfSBlbHNlIHsKLQkJCURCR184NzIzQSgiU1RBIGRpZCBub3QgaW5jbHVkZSBXUEEvUlNOIElFICIKLQkJCQkgICAiaW4gKFJlKUFzc29jaWF0aW9uIFJlcXVlc3QgLSBwb3NzaWJsZSBXUFMgIgotCQkJCSAgICJ1c2VcbiIpOworCQkJREJHXzg3MjNBKCJTVEEgZGlkIG5vdCBpbmNsdWRlIFdQQS9SU04gSUUgaW4gKFJlKSIKKwkJCQkgICAiQXNzb2NpYXRpb24gUmVxdWVzdCAtIHBvc3NpYmxlIFdQUyB1c2VcbiIpOwogCQkJcHN0YXQtPmZsYWdzIHw9IFdMQU5fU1RBX01BWUJFX1dQUzsKIAkJfQogCi0JCS8qICBBUCBzdXBwb3J0IFdQQS9SU04sIGFuZCBzdGEgaXMgZ29pbmcgdG8gZG8gV1BTLCBidXQgQVAgaXMgbm90IHJlYWR5ICovCisJCS8qICBBUCBzdXBwb3J0IFdQQS9SU04sIGFuZCBzdGEgaXMgZ29pbmcgdG8gZG8gV1BTLCBidXQgQVAKKwkJICAgIGlzIG5vdCByZWFkeSAqLwogCQkvKiAgdGhhdCB0aGUgc2VsZWN0ZWQgcmVnaXN0cmFyIG9mIEFQIGlzIF9GTEFTRSAqLwotCQlpZiAoKHBzZWN1cml0eXByaXYtPndwYV9wc2sgPiAwKSAmJgotCQkgICAgKHBzdGF0LT5mbGFncyAmIChXTEFOX1NUQV9XUFN8V0xBTl9TVEFfTUFZQkVfV1BTKSkpIHsKKwkJaWYgKHBzZWN1cml0eXByaXYtPndwYV9wc2sgPiAwICYmCisJCSAgICBwc3RhdC0+ZmxhZ3MgJiAoV0xBTl9TVEFfV1BTfFdMQU5fU1RBX01BWUJFX1dQUykpIHsKIAkJCWlmIChwbWxtZXByaXYtPndwc19iZWFjb25faWUpIHsKIAkJCQl1OCBzZWxlY3RlZF9yZWdpc3RyYXIgPSAwOwogCi0JCQkJcnR3X2dldF93cHNfYXR0cl9jb250ZW50MjNhKHBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZSwgcG1sbWVwcml2LT53cHNfYmVhY29uX2llX2xlbiwKLQkJCQkJCQkgV1BTX0FUVFJfU0VMRUNURURfUkVHSVNUUkFSLCAmc2VsZWN0ZWRfcmVnaXN0cmFyLCBOVUxMKTsKKwkJCQlydHdfZ2V0X3dwc19hdHRyX2NvbnRlbnQyM2EoCisJCQkJCXBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZSwKKwkJCQkJcG1sbWVwcml2LT53cHNfYmVhY29uX2llX2xlbiwKKwkJCQkJV1BTX0FUVFJfU0VMRUNURURfUkVHSVNUUkFSLAorCQkJCQkmc2VsZWN0ZWRfcmVnaXN0cmFyLCBOVUxMKTsKIAogCQkJCWlmICghc2VsZWN0ZWRfcmVnaXN0cmFyKSB7Ci0JCQkJCURCR184NzIzQSgic2VsZWN0ZWRfcmVnaXN0cmFyIGlzIGZhbHNlICwgb3IgQVAgaXMgbm90IHJlYWR5IHRvIGRvIFdQU1xuIik7CisJCQkJCURCR184NzIzQSgic2VsZWN0ZWRfcmVnaXN0cmFyIGlzIGZhbHNlLCIKKwkJCQkJCSAgIm9yIEFQIGlzIG5vdCByZWFkeSB0byBkbyAiCisJCQkJCQkgICJXUFNcbiIpOwogCiAJCQkJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0FQX1VOQUJMRV9UT19IQU5ETEVfTkVXX1NUQTsKLQogCQkJCQlnb3RvIE9uQXNzb2NSZXEyM2FGYWlsOwogCQkJCX0KIAkJCX0KQEAgLTE1MDgsMjYgKzE1MzAsMjYgQEAKIAogCQlpZiAocHNlY3VyaXR5cHJpdi0+d3BhX3BzayA9PSAwKSB7CiAJCQlEQkdfODcyM0EoIlNUQSAiIE1BQ19GTVQgIjogV1BBL1JTTiBJRSBpbiBhc3NvY2lhdGlvbiAiCi0JCQkicmVxdWVzdCwgYnV0IEFQIGRvbid0IHN1cHBvcnQgV1BBL1JTTlxuIiwgTUFDX0FSRyhwc3RhdC0+aHdhZGRyKSk7CisJCQkicmVxdWVzdCwgYnV0IEFQIGRvbid0IHN1cHBvcnQgV1BBL1JTTlxuIiwKKwkJCQkgIE1BQ19BUkcocHN0YXQtPmh3YWRkcikpOwogCiAJCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX0lFOwogCiAJCQlnb3RvIE9uQXNzb2NSZXEyM2FGYWlsOwogCQl9CiAKLQkJaWYgKGVsZW1zLndwc19pZSkgewotCQkJREJHXzg3MjNBKCJTVEEgaW5jbHVkZWQgV1BTIElFIGluICIKLQkJCQkgICAiKFJlKUFzc29jaWF0aW9uIFJlcXVlc3QgLSBXUFMgaXMgIgotCQkJCSAgICJ1c2VkXG4iKTsKKwkJaWYgKHdwc19pZSkgeworCQkJREJHXzg3MjNBKCJTVEEgaW5jbHVkZWQgV1BTIElFIGluIChSZSlBc3NvY2lhdGlvbiAiCisJCQkJICAiUmVxdWVzdCAtIFdQUyBpcyB1c2VkXG4iKTsKIAkJCXBzdGF0LT5mbGFncyB8PSBXTEFOX1NUQV9XUFM7CiAJCQljb3B5X2xlbiA9IDA7CiAJCX0gZWxzZSB7Ci0JCQljb3B5X2xlbiA9ICgod3BhX2llX2xlbisyKSA+IHNpemVvZihwc3RhdC0+d3BhX2llKSkgPyAoc2l6ZW9mKHBzdGF0LT53cGFfaWUpKTood3BhX2llX2xlbisyKTsKKwkJCWNvcHlfbGVuID0gKCh3cGFfaWVfbGVuICsgMikgPiBzaXplb2YocHN0YXQtPndwYV9pZSkpID8KKwkJCQlzaXplb2YocHN0YXQtPndwYV9pZSkgOiAod3BhX2llX2xlbiArIDIpOwogCQl9CiAKLQkJaWYgKGNvcHlfbGVuPjApCi0JCQltZW1jcHkocHN0YXQtPndwYV9pZSwgd3BhX2llLTIsIGNvcHlfbGVuKTsKLQorCQlpZiAoY29weV9sZW4gPiAwKQorCQkJbWVtY3B5KHBzdGF0LT53cGFfaWUsIHdwYV9pZSAtIDIsIGNvcHlfbGVuKTsKIAl9CiAKIAkvKiAgY2hlY2sgaWYgdGhlcmUgaXMgV01NIElFICYgc3VwcG9ydCBXV00tUFMgKi8KQEAgLTE1MzksNDUgKzE1NjEsNDUgQEAKIAlwc3RhdC0+dWFwc2RfdmkgPSAwOwogCXBzdGF0LT51YXBzZF9iZSA9IDA7CiAJcHN0YXQtPnVhcHNkX2JrID0gMDsKLQlpZiAocG1sbWVwcml2LT5xb3Nwcml2LnFvc19vcHRpb24pCi0JewotCQlwID0gcGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIGllX29mZnNldDsgaWVfbGVuID0gMDsKLQkJZm9yICg7OykKLQkJewotCQkJcCA9IHJ0d19nZXRfaWUyM2EocCwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sICZpZV9sZW4sIHBrdF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpIC0gaWVfb2Zmc2V0KTsKLQkJCWlmIChwICE9IE5VTEwpIHsKLQkJCQlpZiAoIW1lbWNtcChwKzIsIFdNTV9JRSwgNikpIHsKKwlpZiAocG1sbWVwcml2LT5xb3Nfb3B0aW9uKSB7CisJCWNvbnN0IHU4ICplbmQgPSBwb3MgKyBsZWZ0OworCQlwID0gcG9zOwogCisJCWZvciAoOzspIHsKKwkJCWxlZnQgPSBlbmQgLSBwOworCQkJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLCBwLCBsZWZ0KTsKKwkJCWlmIChwKSB7CisJCQkJaWYgKCFtZW1jbXAocCArIDIsIFdNTV9JRSwgNikpIHsKIAkJCQkJcHN0YXQtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKIAogCQkJCQlwc3RhdC0+cW9zX29wdGlvbiA9IDE7Ci0JCQkJCXBzdGF0LT5xb3NfaW5mbyA9ICoocCs4KTsKKwkJCQkJcHN0YXQtPnFvc19pbmZvID0gKihwICsgOCk7CiAKLQkJCQkJcHN0YXQtPm1heF9zcF9sZW4gPSAocHN0YXQtPnFvc19pbmZvPj41KSYweDM7CisJCQkJCXBzdGF0LT5tYXhfc3BfbGVuID0KKwkJCQkJCShwc3RhdC0+cW9zX2luZm8gPj4gNSkgJiAweDM7CiAKLQkJCQkJaWYgKChwc3RhdC0+cW9zX2luZm8mMHhmKSAhPSAweGYpCisJCQkJCWlmICgocHN0YXQtPnFvc19pbmZvICYgMHhmKSAhPSAweGYpCiAJCQkJCQlwc3RhdC0+aGFzX2xlZ2FjeV9hYyA9IHRydWU7CiAJCQkJCWVsc2UKIAkJCQkJCXBzdGF0LT5oYXNfbGVnYWN5X2FjID0gZmFsc2U7CiAKLQkJCQkJaWYgKHBzdGF0LT5xb3NfaW5mbyYweGYpCi0JCQkJCXsKLQkJCQkJCWlmIChwc3RhdC0+cW9zX2luZm8mQklUKDApKQorCQkJCQlpZiAocHN0YXQtPnFvc19pbmZvICYgMHhmKSB7CisJCQkJCQlpZiAocHN0YXQtPnFvc19pbmZvICYgQklUKDApKQogCQkJCQkJCXBzdGF0LT51YXBzZF92byA9IEJJVCgwKXxCSVQoMSk7CiAJCQkJCQllbHNlCiAJCQkJCQkJcHN0YXQtPnVhcHNkX3ZvID0gMDsKIAotCQkJCQkJaWYgKHBzdGF0LT5xb3NfaW5mbyZCSVQoMSkpCisJCQkJCQlpZiAocHN0YXQtPnFvc19pbmZvICYgQklUKDEpKQogCQkJCQkJCXBzdGF0LT51YXBzZF92aSA9IEJJVCgwKXxCSVQoMSk7CiAJCQkJCQllbHNlCiAJCQkJCQkJcHN0YXQtPnVhcHNkX3ZpID0gMDsKIAotCQkJCQkJaWYgKHBzdGF0LT5xb3NfaW5mbyZCSVQoMikpCisJCQkJCQlpZiAocHN0YXQtPnFvc19pbmZvICYgQklUKDIpKQogCQkJCQkJCXBzdGF0LT51YXBzZF9iayA9IEJJVCgwKXxCSVQoMSk7CiAJCQkJCQllbHNlCiAJCQkJCQkJcHN0YXQtPnVhcHNkX2JrID0gMDsKIAotCQkJCQkJaWYgKHBzdGF0LT5xb3NfaW5mbyZCSVQoMykpCisJCQkJCQlpZiAocHN0YXQtPnFvc19pbmZvICYgQklUKDMpKQogCQkJCQkJCXBzdGF0LT51YXBzZF9iZSA9IEJJVCgwKXxCSVQoMSk7CiAJCQkJCQllbHNlCiAJCQkJCQkJcHN0YXQtPnVhcHNkX2JlID0gMDsKQEAgLTE1ODYsNDUgKzE2MDgsNDIgQEAKIAogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlwID0gcCArIGllX2xlbiArIDI7CisJCQlwID0gcCArIHBbMV0gKyAyOwogCQl9CiAJfQogCiAJLyogc2F2ZSBIVCBjYXBhYmlsaXRpZXMgaW4gdGhlIHN0YSBvYmplY3QgKi8KIAltZW1zZXQoJnBzdGF0LT5odHByaXYuaHRfY2FwLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKLQlpZiAoZWxlbXMuaHRfY2FwYWJpbGl0aWVzICYmIGVsZW1zLmh0X2NhcGFiaWxpdGllc19sZW4gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSkKLQl7CisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgcG9zLCBsZWZ0KTsKKworCWlmIChwICYmIHBbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSkgewogCQlwc3RhdC0+ZmxhZ3MgfD0gV0xBTl9TVEFfSFQ7CiAKIAkJcHN0YXQtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKIAotCQltZW1jcHkoJnBzdGF0LT5odHByaXYuaHRfY2FwLCBlbGVtcy5odF9jYXBhYmlsaXRpZXMsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOwotCisJCW1lbWNweSgmcHN0YXQtPmh0cHJpdi5odF9jYXAsIHAgKyAyLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSk7CiAJfSBlbHNlCiAJCXBzdGF0LT5mbGFncyAmPSB+V0xBTl9TVEFfSFQ7CiAKLQlpZiAoKHBtbG1lcHJpdi0+aHRwcml2Lmh0X29wdGlvbiA9PSBmYWxzZSkgJiYgKHBzdGF0LT5mbGFncyZXTEFOX1NUQV9IVCkpCi0JeworCWlmIChwbWxtZXByaXYtPmh0cHJpdi5odF9vcHRpb24gPT0gZmFsc2UgJiYgcHN0YXQtPmZsYWdzICYgV0xBTl9TVEFfSFQpewogCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFOwogCQlnb3RvIE9uQXNzb2NSZXEyM2FGYWlsOwogCX0KIAotCWlmICgocHN0YXQtPmZsYWdzICYgV0xBTl9TVEFfSFQpICYmCi0JCSAgICAoKHBzdGF0LT53cGEyX3BhaXJ3aXNlX2NpcGhlciZXUEFfQ0lQSEVSX1RLSVApIHx8Ci0JCSAgICAgIChwc3RhdC0+d3BhX3BhaXJ3aXNlX2NpcGhlciZXUEFfQ0lQSEVSX1RLSVApKSkKLQl7Ci0JCURCR184NzIzQSgiSFQ6ICIgTUFDX0ZNVCAiIHRyaWVkIHRvICIKLQkJCQkgICAidXNlIFRLSVAgd2l0aCBIVCBhc3NvY2lhdGlvblxuIiwgTUFDX0FSRyhwc3RhdC0+aHdhZGRyKSk7CisJaWYgKHBzdGF0LT5mbGFncyAmIFdMQU5fU1RBX0hUICYmCisJICAgIChwc3RhdC0+d3BhMl9wYWlyd2lzZV9jaXBoZXIgJiBXUEFfQ0lQSEVSX1RLSVAgfHwKKwkgICAgIHBzdGF0LT53cGFfcGFpcndpc2VfY2lwaGVyICYgV1BBX0NJUEhFUl9US0lQKSkgeworCQlEQkdfODcyM0EoIkhUOiAiIE1BQ19GTVQgIiB0cmllZCB0byB1c2UgVEtJUCB3aXRoIEhUICIKKwkJCSAgImFzc29jaWF0aW9uXG4iLCBNQUNfQVJHKHBzdGF0LT5od2FkZHIpKTsKIAogCQkvKiBzdGF0dXMgPSBXTEFOX1NUQVRVU19DSVBIRVJfUkVKRUNURURfUEVSX1BPTElDWTsgKi8KIAkJLyogZ290byBPbkFzc29jUmVxMjNhRmFpbDsgKi8KIAl9CiAKLSAgICAgICAvKiAgKi8KIAlwc3RhdC0+ZmxhZ3MgfD0gV0xBTl9TVEFfTk9ORVJQOwogCWZvciAoaSA9IDA7IGkgPCBwc3RhdC0+YnNzcmF0ZWxlbjsgaSsrKSB7CiAJCWlmICgocHN0YXQtPmJzc3JhdGVzZXRbaV0gJiAweDdmKSA+IDIyKSB7CkBAIC0xNjQxLDM5ICsxNjYwLDYgQEAKIAlpZiAoc3RhdHVzICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gT25Bc3NvY1JlcTIzYUZhaWw7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXBzdGF0LT5pc19wMnBfZGV2aWNlID0gZmFsc2U7Ci0JaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pKQotCXsKLQkJaWYgKChwMnBpZSA9IHJ0d19nZXRfcDJwX2llMjNhKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBpZV9vZmZzZXQsIHBrdF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpIC0gaWVfb2Zmc2V0LCBOVUxMLCAmcDJwaWVsZW4pKSkKLQkJewotCQkJcHN0YXQtPmlzX3AycF9kZXZpY2UgPSB0cnVlOwotCQkJaWYgKChwMnBfc3RhdHVzX2NvZGUgPSAodTgpcHJvY2Vzc19hc3NvY19yZXFfcDJwX2llMjNhKHB3ZGluZm8sIHBmcmFtZSwgcGt0X2xlbiwgcHN0YXQpKT4wKQotCQkJewotCQkJCXBzdGF0LT5wMnBfc3RhdHVzX2NvZGUgPSBwMnBfc3RhdHVzX2NvZGU7Ci0JCQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfQ0FQU19VTlNVUFBPUlRFRDsKLQkJCQlnb3RvIE9uQXNzb2NSZXEyM2FGYWlsOwotCQkJfQotCQl9Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJaWYgKHJ0d19nZXRfd2ZkX2llKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBpZV9vZmZzZXQsIHBrdF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpIC0gaWVfb2Zmc2V0LCB3ZmRfaWUsICZ3ZmRfaWVsZW4pKQotCQl7Ci0JCQl1OAlhdHRyX2NvbnRlbnRbIDEwIF0gPSB7IDB4MDAgfTsKLQkJCXUzMglhdHRyX2NvbnRlbnRsZW4gPSAwOwotCi0JCQlEQkdfODcyM0EoIlslc10gV0ZEIElFIEZvdW5kISFcbiIsIF9fZnVuY19fKTsKLQkJCXJ0d19nZXRfd2ZkX2F0dHJfY29udGVudCh3ZmRfaWUsIHdmZF9pZWxlbiwgV0ZEX0FUVFJfREVWSUNFX0lORk8sIGF0dHJfY29udGVudCwgJmF0dHJfY29udGVudGxlbik7Ci0JCQlpZiAoYXR0cl9jb250ZW50bGVuKQotCQkJewotCQkJCXB3ZGluZm8tPndmZF9pbmZvLT5wZWVyX3J0c3BfY3RybHBvcnQgPSBnZXRfdW5hbGlnbmVkX2JlMTYoYXR0cl9jb250ZW50ICsgMik7Ci0JCQkJREJHXzg3MjNBKCJbJXNdIFBlZXIgUE9SVCBOVU0gPSAlZFxuIiwgX19mdW5jX18sIHB3ZGluZm8tPndmZF9pbmZvLT5wZWVyX3J0c3BfY3RybHBvcnQpOwotCQkJfQotCQl9Ci0jZW5kaWYKLQl9Ci0JcHN0YXQtPnAycF9zdGF0dXNfY29kZSA9IHAycF9zdGF0dXNfY29kZTsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCiAJLyogVE9ETzogaWRlbnRpZnlfcHJvcHJpZXRhcnlfdmVuZG9yX2llKCk7ICovCiAJLyogIFJlYWx0ZWsgcHJvcHJpZXRhcnkgSUUgKi8KIAkvKiAgaWRlbnRpZnkgaWYgdGhpcyBpcyBCcm9hZGNvbSBzdGEgKi8KQEAgLTE2OTksMTQgKzE2ODUsMTMgQEAKIAkJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0FQX1VOQUJMRV9UT19IQU5ETEVfTkVXX1NUQTsKIAogCQkJZ290byBPbkFzc29jUmVxMjNhRmFpbDsKLQogCQl9IGVsc2UgewogCQkJcHN0YXByaXYtPnN0YV9haWRbcHN0YXQtPmFpZCAtIDFdID0gcHN0YXQ7CiAJCQlEQkdfODcyM0EoImFsbG9jYXRlIG5ldyBBSUQgPSAoJWQpXG4iLCBwc3RhdC0+YWlkKTsKIAkJfQogCX0KIAotCXBzdGF0LT5zdGF0ZSAmPSAofldJRklfRldfQVNTT0NfU1RBVEUpOworCXBzdGF0LT5zdGF0ZSAmPSB+V0lGSV9GV19BU1NPQ19TVEFURTsKIAlwc3RhdC0+c3RhdGUgfD0gV0lGSV9GV19BU1NPQ19TVUNDRVNTOwogCiAJc3Bpbl9sb2NrX2JoKCZwc3RhcHJpdi0+YXV0aF9saXN0X2xvY2spOwpAQCAtMTcyNSwxOCArMTcxMCwyMCBAQAogCXNwaW5fdW5sb2NrX2JoKCZwc3RhcHJpdi0+YXNvY19saXN0X2xvY2spOwogCiAJLyogIG5vdyB0aGUgc3RhdGlvbiBpcyBxdWFsaWZpZWQgdG8gam9pbiBvdXIgQlNTLi4uICovCi0JaWYgKHBzdGF0ICYmIChwc3RhdC0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpICYmCi0JICAgIChXTEFOX1NUQVRVU19TVUNDRVNTID09IHN0YXR1cykpIHsKKwlpZiAocHN0YXQgJiYgcHN0YXQtPnN0YXRlICYgV0lGSV9GV19BU1NPQ19TVUNDRVNTICYmCisJICAgIHN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJCS8qIDEgYnNzX2NhcF91cGRhdGUgJiBzdGFfaW5mb191cGRhdGUyM2EgKi8KIAkJYnNzX2NhcF91cGRhdGVfb25fc3RhX2pvaW4yM2EocGFkYXB0ZXIsIHBzdGF0KTsKIAkJc3RhX2luZm9fdXBkYXRlMjNhKHBhZGFwdGVyLCBwc3RhdCk7CiAKIAkJLyogaXNzdWUgYXNzb2MgcnNwIGJlZm9yZSBub3RpZnkgc3RhdGlvbiBqb2luIGV2ZW50LiAqLwotCQlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmcmFtZV9jb250cm9sKSkKLQkJCWlzc3VlX2Fzb2Nyc3AyM2EocGFkYXB0ZXIsIHN0YXR1cywgcHN0YXQsIFdJRklfQVNTT0NSU1ApOworCQlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJCWlzc3VlX2Fzc29jcnNwKHBhZGFwdGVyLCBzdGF0dXMsIHBzdGF0LAorCQkJCSAgICAgICBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7CiAJCWVsc2UKLQkJCWlzc3VlX2Fzb2Nyc3AyM2EocGFkYXB0ZXIsIHN0YXR1cywgcHN0YXQsIFdJRklfUkVBU1NPQ1JTUCk7CisJCQlpc3N1ZV9hc3NvY3JzcChwYWRhcHRlciwgc3RhdHVzLCBwc3RhdCwKKwkJCQkgICAgICAgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUCk7CiAKIAkJLyogMiAtIHJlcG9ydCB0byB1cHBlciBsYXllciAqLwogCQlEQkdfODcyM0EoImluZGljYXRlX3N0YV9qb2luX2V2ZW50IHRvIHVwcGVyIGxheWVyIC0gaG9zdGFwZFxuIik7CkBAIC0xNzUyLDE5ICsxNzM5LDIwIEBACiBhc29jX2NsYXNzMl9lcnJvcjoKIAogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotCWlzc3VlX2RlYXV0aDIzYShwYWRhcHRlciwgaGRyLT5hZGRyMiwgc3RhdHVzKTsKKwlpc3N1ZV9kZWF1dGgyM2EocGFkYXB0ZXIsIG1nbXQtPnNhLCBzdGF0dXMpOwogI2VuZGlmCi0KIAlyZXR1cm4gX0ZBSUw7CiAKIE9uQXNzb2NSZXEyM2FGYWlsOgogCiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJcHN0YXQtPmFpZCA9IDA7Ci0JaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXEoZnJhbWVfY29udHJvbCkpCi0JCWlzc3VlX2Fzb2Nyc3AyM2EocGFkYXB0ZXIsIHN0YXR1cywgcHN0YXQsIFdJRklfQVNTT0NSU1ApOworCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlpc3N1ZV9hc3NvY3JzcChwYWRhcHRlciwgc3RhdHVzLCBwc3RhdCwKKwkJCSAgICAgICBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7CiAJZWxzZQotCQlpc3N1ZV9hc29jcnNwMjNhKHBhZGFwdGVyLCBzdGF0dXMsIHBzdGF0LCBXSUZJX1JFQVNTT0NSU1ApOworCQlpc3N1ZV9hc3NvY3JzcChwYWRhcHRlciwgc3RhdHVzLCBwc3RhdCwKKwkJCSAgICAgICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQKTsKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHXzg3MjNBVV9BUF9NT0RFICovCkBAIC0xNzcyLDI1ICsxNzYwLDI0IEBACiAJcmV0dXJuIF9GQUlMOwogfQogCi11bnNpZ25lZCBpbnQgT25Bc3NvY1JzcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCitzdGF0aWMgaW50CitPbkFzc29jUnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKLQl1aW50IGk7Ci0JaW50IHJlczsKLQl1bnNpZ25lZCBzaG9ydAlzdGF0dXM7Ci0Jc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKnBJRTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpwbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWludCByZXMsIGk7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzOworCXU4ICpwOwogCXU4ICpwZnJhbWUgPSBza2ItPmRhdGE7Ci0JdWludCBwa3RfbGVuID0gc2tiLT5sZW47CisJaW50IHBrdF9sZW4gPSBza2ItPmxlbjsKIAogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGNoZWNrIEExIG1hdGNoZXMgb3Igbm90ICovCi0JaWYgKCFldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwKLQkJCSAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSkpCisJaWYgKCFldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgcG1nbXQtPmRhKSkKIAkJcmV0dXJuIF9TVUNDRVNTOwogCiAJaWYgKCEocG1sbWVpbmZvLT5zdGF0ZSAmIChXSUZJX0ZXX0FVVEhfU1VDQ0VTUyB8IFdJRklfRldfQVNTT0NfU1RBVEUpKSkKQEAgLTE4MDIsOCArMTc4OSw4IEBACiAJZGVsX3RpbWVyX3N5bmMoJnBtbG1lZXh0LT5saW5rX3RpbWVyKTsKIAogCS8qIHN0YXR1cyAqLwotCWlmICgoc3RhdHVzID0gbGUxNl90b19jcHUoKih1bnNpZ25lZCBzaG9ydCAqKShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgMikpKSA+IDApCi0JeworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KHBtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOworCWlmIChzdGF0dXMgPiAwKQl7CiAJCURCR184NzIzQSgiYXNzb2MgcmVqZWN0LCBzdGF0dXMgY29kZTogJWRcbiIsIHN0YXR1cyk7CiAJCXBtbG1laW5mby0+c3RhdGUgPSBXSUZJX0ZXX05VTExfU1RBVEU7CiAJCXJlcyA9IC00OwpAQCAtMTgxMSw1MiArMTc5OCw0NyBAQAogCX0KIAogCS8qIGdldCBjYXBhYmlsaXRpZXMgKi8KLQlwbWxtZWluZm8tPmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdSgqKHVuc2lnbmVkIHNob3J0ICopKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpKTsKKwlwbWxtZWluZm8tPmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShwbWdtdC0+dS5hc3NvY19yZXNwLmNhcGFiX2luZm8pOwogCiAJLyogc2V0IHNsb3QgdGltZSAqLwogCXBtbG1laW5mby0+c2xvdFRpbWUgPSAocG1sbWVpbmZvLT5jYXBhYmlsaXR5ICYgQklUKDEwKSk/IDk6IDIwOwogCiAJLyogQUlEICovCi0JcmVzID0gcG1sbWVpbmZvLT5haWQgPSAoaW50KShsZTE2X3RvX2NwdSgqKHVuc2lnbmVkIHNob3J0ICopKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA0KSkmMHgzZmZmKTsKKwlyZXMgPSBwbWxtZWluZm8tPmFpZCA9IGxlMTZfdG9fY3B1KHBtZ210LT51LmFzc29jX3Jlc3AuYWlkKSAmIDB4M2ZmZjsKIAogCS8qIGZvbGxvd2luZyBhcmUgbW92ZWQgdG8gam9pbiBldmVudCBjYWxsYmFjayBmdW5jdGlvbiAqLwogCS8qIHRvIGhhbmRsZSBIVCwgV01NLCByYXRlIGFkYXB0aXZlLCB1cGRhdGUgTUFDIHJlZyAqLwogCS8qIGZvciBub3QgdG8gaGFuZGxlIHRoZSBzeW5jaHJvbm91cyBJTyBpbiB0aGUgdGFza2xldCAqLwotCWZvciAoaSA9ICg2ICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSk7IGkgPCBwa3RfbGVuOykgewotCQlwSUUgPSAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKikocGZyYW1lICsgaSk7CisJZm9yIChpID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmFzc29jX3Jlc3AudmFyaWFibGUpOworCSAgICAgaSA8IHBrdF9sZW47KSB7CisJCXAgPSBwZnJhbWUgKyBpOwogCi0JCXN3aXRjaCAocElFLT5FbGVtZW50SUQpCisJCXN3aXRjaCAocFswXSkKIAkJewotCQljYXNlIF9WRU5ET1JfU1BFQ0lGSUNfSUVfOgotCQkJaWYgKCFtZW1jbXAocElFLT5kYXRhLCBXTU1fUEFSQV9PVUkyM0EsIDYpKS8qIFdNTSAqLwotCQkJCQlXTU1fcGFyYW1faGFuZGxlcjIzYShwYWRhcHRlciwgcElFKTsKLSNpZiBkZWZpbmVkKENPTkZJR184NzIzQVVfUDJQKQotCQkJZWxzZSBpZiAoIW1lbWNtcChwSUUtPmRhdGEsIFdGRF9PVUkyM0EsIDQpKSB7IC8qIFdGRCAqLwotCQkJCURCR184NzIzQSgiWyVzXSBGb3VuZCBXRkQgSUVcbiIsIF9fZnVuY19fKTsKLQkJCQlXRkRfaW5mb19oYW5kbGVyKHBhZGFwdGVyLCBwSUUpOwotCQkJfQotI2VuZGlmCisJCWNhc2UgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOgorCQkJaWYgKCFtZW1jbXAocCArIDIsIFdNTV9QQVJBX09VSTIzQSwgNikpLyogV01NICovCisJCQkJV01NX3BhcmFtX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBfSFRfQ0FQQUJJTElUWV9JRV86CS8qIEhUIGNhcHMgKi8KLQkJCUhUX2NhcHNfaGFuZGxlcjIzYShwYWRhcHRlciwgcElFKTsKKwkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgkvKiBIVCBjYXBzICovCisJCQlIVF9jYXBzX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBfSFRfRVhUUkFfSU5GT19JRV86CS8qIEhUIGluZm8gKi8KLQkJCUhUX2luZm9faGFuZGxlcjIzYShwYWRhcHRlciwgcElFKTsKKwkJY2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046CS8qIEhUIGluZm8gKi8KKwkJCUhUX2luZm9faGFuZGxlcjIzYShwYWRhcHRlciwgcCk7CiAJCQlicmVhazsKIAotCQljYXNlIF9FUlBJTkZPX0lFXzoKLQkJCUVSUF9JRV9oYW5kbGVyMjNhKHBhZGFwdGVyLCBwSUUpOworCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgorCQkJRVJQX0lFX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHApOwogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCi0JCWkgKz0gKHBJRS0+TGVuZ3RoICsgMik7CisJCWkgKz0gKHBbMV0gKyAyKTsKIAl9CiAKLQlwbWxtZWluZm8tPnN0YXRlICY9ICh+V0lGSV9GV19BU1NPQ19TVEFURSk7CisJcG1sbWVpbmZvLT5zdGF0ZSAmPSB+V0lGSV9GV19BU1NPQ19TVEFURTsKIAlwbWxtZWluZm8tPnN0YXRlIHw9IFdJRklfRldfQVNTT0NfU1VDQ0VTUzsKIAogCS8qIFVwZGF0ZSBCYXNpYyBSYXRlIFRhYmxlIGZvciBzcGVjLCAyMDEwLTEyLTI4ICwgYnkgdGhvbWFzICovCkBAIC0xODc5LDQ0ICsxODYxLDMzIEBACiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11bnNpZ25lZCBpbnQgT25EZUF1dGgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCitzdGF0aWMgaW50CitPbkRlQXV0aDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7Ci0JdW5zaWduZWQgc2hvcnQJcmVhc29uOworCXVuc2lnbmVkIHNob3J0IHJlYXNvbjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAKLQkvKiBjaGVjayBBMyAqLwotCWlmICghZXRoZXJfYWRkcl9lcXVhbChoZHItPmFkZHIzLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yaykpKQorCWlmICghZXRoZXJfYWRkcl9lcXVhbChtZ210LT5ic3NpZCwKKwkJCSAgICAgIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSkpCiAJCXJldHVybiBfU1VDQ0VTUzsKIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKHB3ZGluZm8tPnJ4X2ludml0ZXJlcV9pbmZvLnNjYW5fb3BfY2hfb25seSkgewotCQltb2RfdGltZXIoJnB3ZGluZm8tPnJlc2V0X2NoX3NpdGVzdXJ2ZXksCi0JCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlyZWFzb24gPSBsZTE2X3RvX2NwdSgqKHVuc2lnbmVkIHNob3J0ICopKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpKTsKKwlyZWFzb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKIAlEQkdfODcyM0EoIiVzIFJlYXNvbiBjb2RlKCVkKVxuIiwgX19mdW5jX18sIHJlYXNvbik7CiAKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpID09IHRydWUpIHsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAkJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKIAogCQlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAiYXAgcmVjdiBkZWF1dGggcmVhc29uIGNvZGUoJWQpICIKLQkJCQkic3RhOiVwTVxuIiwgcmVhc29uLCBoZHItPmFkZHIyKTsKKwkJCQkic3RhOiVwTVxuIiwgcmVhc29uLCBtZ210LT5zYSk7CiAKLQkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgaGRyLT5hZGRyMik7CisJCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIG1nbXQtPnNhKTsKIAkJaWYgKHBzdGEpIHsKIAkJCXU4IHVwZGF0ZWQgPSAwOwogCkBAIC0xOTMzLDQ2ICsxOTA0LDM0IEBACiAJCX0KIAogCQlyZXR1cm4gX1NVQ0NFU1M7Ci0JfQotCWVsc2UKKwl9IGVsc2UKICNlbmRpZgogCXsKIAkJREJHXzg3MjNBX0xFVkVMKF9kcnZfYWx3YXlzXywgInN0YSByZWN2IGRlYXV0aCByZWFzb24gY29kZSglZCkgIgotCQkJCSJzdGE6JXBNXG4iLCByZWFzb24sIGhkci0+YWRkcjMpOworCQkJCSJzdGE6JXBNXG4iLCByZWFzb24sIG1nbXQtPmJzc2lkKTsKIAotCQlyZWNlaXZlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIsIGhkci0+YWRkcjMsIHJlYXNvbik7CisJCXJlY2VpdmVfZGlzY29ubmVjdDIzYShwYWRhcHRlciwgbWdtdC0+YnNzaWQsIHJlYXNvbik7CiAJfQogCXBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uYkJ1c3lUcmFmZmljID0gZmFsc2U7CisKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXVuc2lnbmVkIGludCBPbkRpc2Fzc29jMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQKK09uRGlzYXNzb2MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogCXVuc2lnbmVkIHNob3J0CXJlYXNvbjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAKLQkvKiBjaGVjayBBMyAqLwotCWlmICghZXRoZXJfYWRkcl9lcXVhbChoZHItPmFkZHIzLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yaykpKQorCWlmICghZXRoZXJfYWRkcl9lcXVhbChtZ210LT5ic3NpZCwKKwkJCSAgICAgIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSkpCiAJCXJldHVybiBfU1VDQ0VTUzsKIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKHB3ZGluZm8tPnJ4X2ludml0ZXJlcV9pbmZvLnNjYW5fb3BfY2hfb25seSkKLQl7Ci0JCW1vZF90aW1lcigmcHdkaW5mby0+cmVzZXRfY2hfc2l0ZXN1cnZleSwKLQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXJlYXNvbiA9IGxlMTZfdG9fY3B1KCoodW5zaWduZWQgc2hvcnQgKikKLQkJCSAgICAgKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpKTsKKwlyZWFzb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmRpc2Fzc29jLnJlYXNvbl9jb2RlKTsKIAogICAgICAgICBEQkdfODcyM0EoIiVzIFJlYXNvbiBjb2RlKCVkKVxuIiwgX19mdW5jX18sIHJlYXNvbik7CiAKQEAgLTE5ODIsOSArMTk0MSw5IEBACiAJCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAKIAkJREJHXzg3MjNBX0xFVkVMKF9kcnZfYWx3YXlzXywgImFwIHJlY3YgZGlzYXNzb2MgcmVhc29uIGNvZGUoJWQpIgotCQkJCSIgc3RhOiVwTVxuIiwgcmVhc29uLCBoZHItPmFkZHIyKTsKKwkJCQkiIHN0YTolcE1cbiIsIHJlYXNvbiwgbWdtdC0+c2EpOwogCi0JCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIGhkci0+YWRkcjIpOworCQlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKHBzdGFwcml2LCBtZ210LT5zYSk7CiAJCWlmIChwc3RhKSB7CiAJCQl1OCB1cGRhdGVkID0gMDsKIApAQCAtMTk5Myw3ICsxOTUyLDcgQEAKIAkJCQlsaXN0X2RlbF9pbml0KCZwc3RhLT5hc29jX2xpc3QpOwogCQkJCXBzdGFwcml2LT5hc29jX2xpc3RfY250LS07CiAJCQkJdXBkYXRlZCA9IGFwX2ZyZWVfc3RhMjNhKHBhZGFwdGVyLCBwc3RhLAotCQkJCQkJICAgICAgZmFsc2UsIHJlYXNvbik7CisJCQkJCQkJIGZhbHNlLCByZWFzb24pOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfYmgoJnBzdGFwcml2LT5hc29jX2xpc3RfbG9jayk7CiAKQEAgLTIwMDEsNTcgKzE5NjAsNTkgQEAKIAkJfQogCiAJCXJldHVybiBfU1VDQ0VTUzsKLQl9Ci0JZWxzZQorCX0gZWxzZQogI2VuZGlmCiAJewogCQlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAiYXAgcmVjdiBkaXNhc3NvYyByZWFzb24gIgotCQkJCSJjb2RlKCVkKSBzdGE6JXBNXG4iLCByZWFzb24sIGhkci0+YWRkcjMpOworCQkJCSJjb2RlKCVkKSBzdGE6JXBNXG4iLCByZWFzb24sIG1nbXQtPmJzc2lkKTsKIAotCQlyZWNlaXZlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIsIGhkci0+YWRkcjMsIHJlYXNvbik7CisJCXJlY2VpdmVfZGlzY29ubmVjdDIzYShwYWRhcHRlciwgbWdtdC0+YnNzaWQsIHJlYXNvbik7CiAJfQogCXBtbG1lcHJpdi0+TGlua0RldGVjdEluZm8uYkJ1c3lUcmFmZmljID0gZmFsc2U7CiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11bnNpZ25lZCBpbnQgT25BdGltMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQKK09uQXRpbTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7CiAJREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOwogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdW5zaWduZWQgaW50IG9uX2FjdGlvbl9zcGN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQKK29uX2FjdGlvbl9zcGN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKIAlyZXR1cm4gX0ZBSUw7CiB9CiAKLXVuc2lnbmVkIGludCBPbkFjdGlvbjIzYV9xb3Moc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludAorT25BY3Rpb24yM2FfcW9zKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXVuc2lnbmVkIGludCBPbkFjdGlvbjIzYV9kbHMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludAorT25BY3Rpb24yM2FfZGxzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXVuc2lnbmVkIGludCBPbkFjdGlvbjIzYV9iYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQgT25BY3Rpb24yM2FfYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKIAl1OCAqYWRkcjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEgPSBOVUxMOwogCXN0cnVjdCByZWN2X3Jlb3JkZXJfY3RybCAqcHJlb3JkZXJfY3RybDsKLQl1bnNpZ25lZCBjaGFyCQkqZnJhbWVfYm9keTsKLQl1bnNpZ25lZCBjaGFyCQljYXRlZ29yeSwgYWN0aW9uOwotCXVuc2lnbmVkIHNob3J0CXRpZCwgc3RhdHVzLCByZWFzb25fY29kZSA9IDA7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwl1bnNpZ25lZCBjaGFyIGNhdGVnb3J5LCBhY3Rpb247CisJdW5zaWduZWQgc2hvcnQgdGlkLCBzdGF0dXMsIGNhcGFiLCBwYXJhbXMsIHJlYXNvbl9jb2RlID0gMDsKKwlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCBza19idWZmICpza2IgPSBwcmVjdl9mcmFtZS0+cGt0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXU4ICpwZnJhbWUgPSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKIAogCS8qIGNoZWNrIFJBIG1hdGNoZXMgb3Igbm90ICovCi0JaWYgKCFldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgaGRyLT5hZGRyMSkpCisJaWYgKCFldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgbWdtdC0+ZGEpKQogCQlyZXR1cm4gX1NVQ0NFU1M7CiAKIAlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMDYwLDI0ICsyMDIxLDI0IEBACiAJCWlmICghKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpKQogCQkJcmV0dXJuIF9TVUNDRVNTOwogCi0JYWRkciA9IGhkci0+YWRkcjI7CisJYWRkciA9IG1nbXQtPnNhOwogCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIGFkZHIpOwogCiAJaWYgKCFwc3RhKQogCQlyZXR1cm4gX1NVQ0NFU1M7CiAKLQlmcmFtZV9ib2R5ID0gKHVuc2lnbmVkIGNoYXIgKikKLQkJKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpOwotCi0JY2F0ZWdvcnkgPSBmcmFtZV9ib2R5WzBdOworCWNhdGVnb3J5ID0gbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnk7CiAJaWYgKGNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSykgeyAvKiAgcmVwcmVzZW50aW5nIEJsb2NrIEFjayAqLwogCQlpZiAoIXBtbG1laW5mby0+SFRfZW5hYmxlKQogCQkJcmV0dXJuIF9TVUNDRVNTOwotCQlhY3Rpb24gPSBmcmFtZV9ib2R5WzFdOworCQkvKiBhY3Rpb25fY29kZSBpcyBsb2NhdGVkIGluIHRoZSBzYW1lIHBsYWNlIGZvciBhbGwKKwkJICAgYWN0aW9uIGV2ZW50cywgc28gcGljayBhbnkgKi8KKwkJYWN0aW9uID0gbWdtdC0+dS5hY3Rpb24udS53bWVfYWN0aW9uLmFjdGlvbl9jb2RlOwogCQlEQkdfODcyM0EoIiVzLCBhY3Rpb24gPSVkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVE6IC8qIEFEREJBIHJlcXVlc3QgKi8KLQkJCW1lbWNweSgmcG1sbWVpbmZvLT5BRERCQV9yZXEsICZmcmFtZV9ib2R5WzJdLAorCQkJbWVtY3B5KCZwbWxtZWluZm8tPkFEREJBX3JlcSwKKwkJCSAgICAgICAmbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgQUREQkFfcmVxdWVzdCkpOwogCQkJcHJvY2Vzc19hZGRiYV9yZXEyM2EocGFkYXB0ZXIsCiAJCQkJCSAgICAgKHU4ICopJnBtbG1laW5mby0+QUREQkFfcmVxLCBhZGRyKTsKQEAgLTIwOTEsMzYgKzIwNTIsMzQgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFU1A6IC8qIEFEREJBIHJlc3BvbnNlICovCi0JCQlzdGF0dXMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmZyYW1lX2JvZHlbM10pOwotCQkJdGlkID0gKChmcmFtZV9ib2R5WzVdID4+IDIpICYgMHg3KTsKKwkJCXN0YXR1cyA9IGdldF91bmFsaWduZWRfbGUxNigKKwkJCQkmbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyk7CisJCQljYXBhYiA9IGdldF91bmFsaWduZWRfbGUxNigKKwkJCQkmbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiKTsKKwkJCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKIAkJCWlmIChzdGF0dXMgPT0gMCkgewkvKiBzdWNjZXNzZnVsICovCiAJCQkJREJHXzg3MjNBKCJhZ2dfZW5hYmxlIGZvciBUSUQgPSVkXG4iLCB0aWQpOwotCQkJCXBzdGEtPmh0cHJpdi5hZ2dfZW5hYmxlX2JpdG1hcCB8PSAxIDw8IHRpZDsKLQkJCQlwc3RhLT5odHByaXYuY2FuZGlkYXRlX3RpZF9iaXRtYXAgJj0KLQkJCQkJfkNIS0JJVCh0aWQpOworCQkJCXBzdGEtPmh0cHJpdi5hZ2dfZW5hYmxlX2JpdG1hcCB8PSBCSVQodGlkKTsKKwkJCQlwc3RhLT5odHByaXYuY2FuZGlkYXRlX3RpZF9iaXRtYXAgJj0gfkJJVCh0aWQpOwogCQkJfSBlbHNlCi0JCQkJcHN0YS0+aHRwcml2LmFnZ19lbmFibGVfYml0bWFwICY9IH5DSEtCSVQodGlkKTsKKwkJCQlwc3RhLT5odHByaXYuYWdnX2VuYWJsZV9iaXRtYXAgJj0gfkJJVCh0aWQpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0FDVElPTl9ERUxCQTogLyogREVMQkEgKi8KLQkJCWlmICgoZnJhbWVfYm9keVszXSAmIEJJVCgzKSkgPT0gMCkgewotCQkJCXBzdGEtPmh0cHJpdi5hZ2dfZW5hYmxlX2JpdG1hcCAmPQotCQkJCQl+KDEgPDwgKChmcmFtZV9ib2R5WzNdID4+IDQpICYgMHhmKSk7Ci0JCQkJcHN0YS0+aHRwcml2LmNhbmRpZGF0ZV90aWRfYml0bWFwICY9Ci0JCQkJCX4oMSA8PCAoKGZyYW1lX2JvZHlbM10gPj4gNCkgJiAweGYpKTsKKwkJCXBhcmFtcyA9IGdldF91bmFsaWduZWRfbGUxNigKKwkJCQkmbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5wYXJhbXMpOworCQkJdGlkID0gcGFyYW1zID4+IDEyOwogCi0JCQkJLyogcmVhc29uX2NvZGUgPSBmcmFtZV9ib2R5WzRdIHwgKGZyYW1lX2JvZHlbNV0gPDwgOCk7ICovCi0JCQkJcmVhc29uX2NvZGUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmZyYW1lX2JvZHlbNF0pOwotCQkJfSBlbHNlIGlmICgoZnJhbWVfYm9keVszXSAmIEJJVCgzKSkgPT0gQklUKDMpKSB7Ci0JCQkJdGlkID0gKGZyYW1lX2JvZHlbM10gPj4gNCkgJiAweDBGOwotCi0JCQkJcHJlb3JkZXJfY3RybCA9ICAmcHN0YS0+cmVjdnJlb3JkZXJfY3RybFt0aWRdOworCQkJaWYgKHBhcmFtcyAmIElFRUU4MDIxMV9ERUxCQV9QQVJBTV9JTklUSUFUT1JfTUFTSykgeworCQkJCXByZW9yZGVyX2N0cmwgPSAmcHN0YS0+cmVjdnJlb3JkZXJfY3RybFt0aWRdOwogCQkJCXByZW9yZGVyX2N0cmwtPmVuYWJsZSA9IGZhbHNlOwogCQkJCXByZW9yZGVyX2N0cmwtPmluZGljYXRlX3NlcSA9IDB4ZmZmZjsKKwkJCX0gZWxzZSB7CisJCQkJcHN0YS0+aHRwcml2LmFnZ19lbmFibGVfYml0bWFwICY9IH5CSVQodGlkKTsKKwkJCQlwc3RhLT5odHByaXYuY2FuZGlkYXRlX3RpZF9iaXRtYXAgJj0gfkJJVCh0aWQpOwogCQkJfQotCi0JCQlEQkdfODcyM0EoIiVzKCk6IERFTEJBOiAleCgleClcbiIsIF9fZnVuY19fLAotCQkJCSAgcG1sbWVpbmZvLT5hZ2dfZW5hYmxlX2JpdG1hcCwgcmVhc29uX2NvZGUpOworCQkJcmVhc29uX2NvZGUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoCisJCQkJJm1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucmVhc29uX2NvZGUpOwogCQkJLyogdG9kbzogaG93IHRvIG5vdGlmeSB0aGUgaG9zdCB3aGlsZSByZWNlaXZpbmcKIAkJCSAgIERFTEVURSBCQSAqLwogCQkJYnJlYWs7CkBAIC0yMTMxLDIzNjUgKzIwOTAsNyBAQAogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0KLXN0YXRpYyBpbnQgZ2V0X3JlZ19jbGFzc2VzX2Z1bGxfY291bnQoc3RydWN0IHAycF9jaGFubmVscyBjaGFubmVsX2xpc3QpIHsKLQlpbnQgY250ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsX2xpc3QucmVnX2NsYXNzZXM7IGkrKykKLQkJY250ICs9IGNoYW5uZWxfbGlzdC5yZWdfY2xhc3NbaV0uY2hhbm5lbHM7Ci0KLQlyZXR1cm4gY250OwotfQotCi12b2lkIGlzc3VlX3AycF9HT19yZXF1ZXN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4KiByYWRkcikKLXsKLQl1bnNpZ25lZCBjaGFyIGNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9QVUJMSUM7Ci0JdTgJCQlhY3Rpb24gPSBQMlBfUFVCX0FDVElPTl9BQ1RJT047Ci0JdTMyCQkJcDJwb3VpID0gY3B1X3RvX2JlMzIoUDJQT1VJKTsKLQl1OAkJCW91aV9zdWJ0eXBlID0gUDJQX0dPX05FR09fUkVROwotCXU4CQkJd3BzaWVbIDI1NSBdID0geyAweDAwIH0sIHAycGllWyAyNTUgXSA9IHsgMHgwMCB9OwotCXU4CQkJd3BzaWVsZW4gPSAwLCBwMnBpZWxlbiA9IDA7Ci0JdTE2CQkJbGVuX2NoYW5uZWxsaXN0X2F0dHIgPSAwOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JdTMyCQkJCQl3ZmRpZWxlbiA9IDA7Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXN0cnVjdCB4bWl0X2ZyYW1lCQkJKnBtZ250ZnJhbWU7Ci0Jc3RydWN0IHBrdF9hdHRyaWIJCQkqcGF0dHJpYjsKLQl1bnNpZ25lZCBjaGFyCQkJCQkqcGZyYW1lOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyCSpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydAkJCQkqZmN0cmw7Ci0Jc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlEQkdfODcyM0EoIlslc10gSW5cbiIsIF9fZnVuY19fKTsKLQkvKiB1cGRhdGUgYXR0cmlidXRlICovCi0JcGF0dHJpYiA9ICZwbWdudGZyYW1lLT5hdHRyaWI7Ci0JdXBkYXRlX21nbnRmcmFtZV9hdHRyaWIyM2EocGFkYXB0ZXIsIHBhdHRyaWIpOwotCi0JbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwotCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOwotCi0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgcmFkZHIpOwotCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSk7Ci0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMywgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKLQlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZhY3Rpb24sICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCA0LCAodW5zaWduZWQgY2hhciAqKSZwMnBvdWksCi0JCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwd2RpbmZvLT5uZWdvdGlhdGlvbl9kaWFsb2dfdG9rZW4gPSAxOwkvKkluaXRpYWxpemUgdGhlIGRpYWxvZyB2YWx1ZSovCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsCi0JCQkJICAgICAmcHdkaW5mby0+bmVnb3RpYXRpb25fZGlhbG9nX3Rva2VuLAotCQkJCSAgICAgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQkvKglXUFMgU2VjdGlvbiAqLwotCXdwc2llbGVuID0gMDsKLQkvKglXUFMgT1VJICovCi0JKih1MzIqKSAod3BzaWUpID0gY3B1X3RvX2JlMzIoV1BTT1VJKTsKLQl3cHNpZWxlbiArPSA0OwotCi0JLyoJV1BTIHZlcnNpb24gKi8KLQkvKglUeXBlOiAqLwotCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfVkVSMSk7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KDB4MDAwMSk7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCXdwc2llW3dwc2llbGVuKytdID0gV1BTX1ZFUlNJT05fMTsJLyoJVmVyc2lvbiAxLjAgKi8KLQotCS8qCURldmljZSBQYXNzd29yZCBJRCAqLwotCS8qCVR5cGU6ICovCi0JKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9ERVZJQ0VfUFdJRCk7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KDB4MDAwMik7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCi0JaWYgKHB3ZGluZm8tPnVpX2dvdF93cHNfaW5mbyA9PSBQMlBfR09UX1dQU0lORk9fUEVFUl9ESVNQTEFZX1BJTikKLQl7Ci0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0RQSURfVVNFUl9TUEVDKTsKLQl9Ci0JZWxzZSBpZiAocHdkaW5mby0+dWlfZ290X3dwc19pbmZvID09IFAyUF9HT1RfV1BTSU5GT19TRUxGX0RJU1BMQVlfUElOKQotCXsKLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfRFBJRF9SRUdJU1RSQVJfU1BFQyk7Ci0JfQotCWVsc2UgaWYgKHB3ZGluZm8tPnVpX2dvdF93cHNfaW5mbyA9PSBQMlBfR09UX1dQU0lORk9fUEJDKQotCXsKLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfRFBJRF9QQkMpOwotCX0KLQotCXdwc2llbGVuICs9IDI7Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHdwc2llbGVuLCAodW5zaWduZWQgY2hhciAqKSB3cHNpZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQkvKglQMlAgSUUgU2VjdGlvbi4gKi8KLQotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDUwOwotCXAycGllW3AycGllbGVuKytdID0gMHg2RjsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4OUE7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA5OwkvKglXRkEgUDJQIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTAzMDYgKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFAyUCBTcGVjaWZpY2F0aW9uLCB0aGUgZ3JvdXAgbmVnb2l0YXRpb24gcmVxdWVzdCBmcmFtZSBzaG91bGQgY29udGFpbiA5IFAyUCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gUDJQIENhcGFiaWxpdHkgKi8KLQkvKgkyLiBHcm91cCBPd25lciBJbnRlbnQgKi8KLQkvKgkzLiBDb25maWd1cmF0aW9uIFRpbWVvdXQgKi8KLQkvKgk0LiBMaXN0ZW4gQ2hhbm5lbCAqLwotCS8qCTUuIEV4dGVuZGVkIExpc3RlbiBUaW1pbmcgKi8KLQkvKgk2LiBJbnRlbmRlZCBQMlAgSW50ZXJmYWNlIEFkZHJlc3MgKi8KLQkvKgk3LiBDaGFubmVsIExpc3QgKi8KLQkvKgk4LiBQMlAgRGV2aWNlIEluZm8gKi8KLQkvKgk5LiBPcGVyYXRpbmcgQ2hhbm5lbCAqLwotCi0JLyoJUDJQIENhcGFiaWxpdHkgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0FQQUJJTElUWTsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwMik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCURldmljZSBDYXBhYmlsaXR5IEJpdG1hcCwgMSBieXRlICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBETVBfUDJQX0RFVkNBUF9TVVBQT1JUOwotCi0JLyoJR3JvdXAgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCWlmIChwd2RpbmZvLT5wZXJzaXN0ZW50X3N1cHBvcnRlZCkKLQl7Ci0JCXAycGllW3AycGllbGVuKytdID0gUDJQX0dSUENBUF9DUk9TU19DT05OIHwgUDJQX0dSUENBUF9QRVJTSVNURU5UX0dST1VQOwotCX0KLQllbHNlCi0JewotCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9HUlBDQVBfQ1JPU1NfQ09OTjsKLQl9Ci0KLQkvKglHcm91cCBPd25lciBJbnRlbnQgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfR09fSU5URU5UOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJVG9kbyB0aGUgdGllIGJyZWFrZXIgYml0LiAqLwotCXAycGllW3AycGllbGVuKytdID0gKChwd2RpbmZvLT5pbnRlbnQgPDwgMSkgfCBCSVQoMCkpOwotCi0JLyoJQ29uZmlndXJhdGlvbiBUaW1lb3V0ICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0NPTkZfVElNRU9VVDsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwMik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gMjAwOwkvKgkyIHNlY29uZHMgbmVlZGVkIHRvIGJlIHRoZSBQMlAgR08gKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IDIwMDsJLyoJMiBzZWNvbmRzIG5lZWRlZCB0byBiZSB0aGUgUDJQIENsaWVudCAqLwotCi0JLyoJTGlzdGVuIENoYW5uZWwgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfTElTVEVOX0NIOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDA1KTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291bnRyeSBTdHJpbmcgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCS8qCVRoZSB0aGlyZCBieXRlIHNob3VsZCBiZSBzZXQgdG8gMHgwNC4gKi8KLQkvKglEZXNjcmliZWQgaW4gdGhlICJPcGVyYXRpbmcgQ2hhbm5lbCBBdHRyaWJ1dGUiIHNlY3Rpb24uICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JLyoJT3BlcmF0aW5nIENsYXNzICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDUxOwkvKglDb3B5IGZyb20gU0Q3ICovCi0KLQkvKglDaGFubmVsIE51bWJlciAqLwotCXAycGllW3AycGllbGVuKytdID0gcHdkaW5mby0+bGlzdGVuX2NoYW5uZWw7CS8qCWxpc3RlbmluZyBjaGFubmVsIG51bWJlciAqLwotCi0JLyoJRXh0ZW5kZWQgTGlzdGVuIFRpbWluZyBBVFRSICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0VYX0xJU1RFTl9USU1JTkc7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDQpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBdmFpbGFiaWxpdHkgUGVyaW9kICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweEZGRkYpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglBdmFpbGFiaWxpdHkgSW50ZXJ2YWwgKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4RkZGRik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCUludGVuZGVkIFAyUCBJbnRlcmZhY2UgQWRkcmVzcyAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9JTlRFTlRFRF9JRl9BRERSOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoRVRIX0FMRU4pOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLCBFVEhfQUxFTik7Ci0JcDJwaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkvKglDaGFubmVsIExpc3QgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0hfTElTVDsKLQotCS8qICBMZW5ndGg6ICovCi0JLyogIENvdW50cnkgU3RyaW5nKDMpICovCi0JLyogICsgKE9wZXJhdGluZyBDbGFzcyAoMSkgKyBOdW1iZXIgb2YgQ2hhbm5lbHMoMSkpICogT3BlcmF0aW9uIENsYXNzZXMgKD8pICovCi0JLyogICsgbnVtYmVyIG9mIGNoYW5uZWxzIGluIGFsbCBjbGFzc2VzICovCi0JbGVuX2NoYW5uZWxsaXN0X2F0dHIgPSAzCi0JICAgKyAoMSArIDEpICogKHUxNikocG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3NlcykKLQkgICArIGdldF9yZWdfY2xhc3Nlc19mdWxsX2NvdW50KHBtbG1lZXh0LT5jaGFubmVsX2xpc3QpOwotCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNihsZW5fY2hhbm5lbGxpc3RfYXR0cik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUNvdW50cnkgU3RyaW5nICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAnWCc7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAnWCc7Ci0KLQkvKglUaGUgdGhpcmQgYnl0ZSBzaG91bGQgYmUgc2V0IHRvIDB4MDQuICovCi0JLyoJRGVzY3JpYmVkIGluIHRoZSAiT3BlcmF0aW5nIENoYW5uZWwgQXR0cmlidXRlIiBzZWN0aW9uLiAqLwotCXAycGllW3AycGllbGVuKytdID0gMHgwNDsKLQotCS8qCUNoYW5uZWwgRW50cnkgTGlzdCAqLwotCi0JewotCQlpbnQgaSwgajsKLQkJZm9yIChqID0gMDsgaiA8IHBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzZXM7IGorKykgewotCQkJLyoJT3BlcmF0aW5nIENsYXNzICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IHBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLnJlZ19jbGFzczsKLQotCQkJLyoJTnVtYmVyIG9mIENoYW5uZWxzICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IHBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLmNoYW5uZWxzOwotCi0JCQkvKglDaGFubmVsIExpc3QgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc1tqXS5jaGFubmVsczsgaSsrKSB7Ci0JCQkJcDJwaWVbcDJwaWVsZW4rK10gPSBwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc1tqXS5jaGFubmVsW2ldOwotCQkJfQotCQl9Ci0JfQotCi0JLyoJRGV2aWNlIEluZm8gKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfREVWSUNFX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJMjEgLT4gUDJQIERldmljZSBBZGRyZXNzICg2Ynl0ZXMpICsgQ29uZmlnIE1ldGhvZHMgKDJieXRlcykgKyBQcmltYXJ5IERldmljZSBUeXBlICg4Ynl0ZXMpICovCi0JLyoJKyBOdW1vZlNlY29uZERldlR5cGUgKDFieXRlKSArIFdQUyBEZXZpY2UgTmFtZSBJRCBmaWVsZCAoMmJ5dGVzKSArIFdQUyBEZXZpY2UgTmFtZSBMZW4gZmllbGQgKDJieXRlcykgKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDIxICsgcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJUDJQIERldmljZSBBZGRyZXNzICovCi0JbWVtY3B5KHAycGllICsgcDJwaWVsZW4sIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgRVRIX0FMRU4pOwotCXAycGllbGVuICs9IEVUSF9BTEVOOwotCi0JLyoJQ29uZmlnIE1ldGhvZCAqLwotCS8qCVRoaXMgZmllbGQgc2hvdWxkIGJlIGJpZyBlbmRpYW4uIE5vdGVkIGJ5IFAyUCBzcGVjaWZpY2F0aW9uLiAqLwotCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihwd2RpbmZvLT5zdXBwb3J0ZWRfd3BzX2NtKTsKLQotCXAycGllbGVuICs9IDI7Ci0KLQkvKglQcmltYXJ5IERldmljZSBUeXBlICovCi0JLyoJQ2F0ZWdvcnkgSUQgKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19QRFRfQ0lEX01VTElUX01FRElBKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJT1VJICovCi0JKih1MzIqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUzMihXUFNPVUkpOwotCXAycGllbGVuICs9IDQ7Ci0KLQkvKglTdWIgQ2F0ZWdvcnkgSUQgKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19QRFRfU0NJRF9NRURJQV9TRVJWRVIpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglOdW1iZXIgb2YgU2Vjb25kYXJ5IERldmljZSBUeXBlcyAqLwotCXAycGllW3AycGllbGVuKytdID0gMHgwMDsJLyoJTm8gU2Vjb25kYXJ5IERldmljZSBUeXBlIExpc3QgKi8KLQotCS8qCURldmljZSBOYW1lICovCi0JLyoJVHlwZTogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX0RFVklDRV9OQU1FKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMTYocHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JbWVtY3B5KHAycGllICsgcDJwaWVsZW4sIHB3ZGluZm8tPmRldmljZV9uYW1lLAotCSAgICAgICBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4pOwotCXAycGllbGVuICs9IHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbjsKLQotCS8qCU9wZXJhdGluZyBDaGFubmVsICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX09QRVJBVElOR19DSDsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwNSk7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUNvdW50cnkgU3RyaW5nICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAnWCc7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAnWCc7Ci0KLQkvKglUaGUgdGhpcmQgYnl0ZSBzaG91bGQgYmUgc2V0IHRvIDB4MDQuICovCi0JLyoJRGVzY3JpYmVkIGluIHRoZSAiT3BlcmF0aW5nIENoYW5uZWwgQXR0cmlidXRlIiBzZWN0aW9uLiAqLwotCXAycGllW3AycGllbGVuKytdID0gMHgwNDsKLQotCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCWlmIChwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCA8PSAxNCkKLQl7Ci0JCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NTE7Ci0JfQotCWVsc2UgaWYgKChwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCA+PSAzNikgJiYgKHB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsIDw9IDQ4KSkKLQl7Ci0JCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NzM7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4N2M7Ci0JfQotCi0JLyoJQ2hhbm5lbCBOdW1iZXIgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IHB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsOwkvKglvcGVyYXRpbmcgY2hhbm5lbCBudW1iZXIgKi8KLQotCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfVkVORE9SX1NQRUNJRklDX0lFXywgcDJwaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHAycGllLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jd2ZkaWVsZW4gPSBidWlsZF9uZWdvX3JlcV93ZmRfaWUocHdkaW5mbywgcGZyYW1lKTsKLQlwZnJhbWUgKz0gd2ZkaWVsZW47Ci0JcGF0dHJpYi0+cGt0bGVuICs9IHdmZGllbGVuOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlwYXR0cmliLT5sYXN0X3R4Y21kc3ogPSBwYXR0cmliLT5wa3RsZW47Ci0KLQlkdW1wX21nbnRmcmFtZTIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGlzc3VlX3AycF9HT19yZXNwb25zZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCogcmFkZHIsIHU4KiBmcmFtZV9ib2R5LCB1aW50IGxlbiwgdTggcmVzdWx0KQotewotCi0JdW5zaWduZWQgY2hhciBjYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfUFVCTElDOwotCXU4IGFjdGlvbiA9IFAyUF9QVUJfQUNUSU9OX0FDVElPTjsKLQl1MzIgcDJwb3VpID0gY3B1X3RvX2JlMzIoUDJQT1VJKTsKLQl1OCBvdWlfc3VidHlwZSA9IFAyUF9HT19ORUdPX1JFU1A7Ci0JdTggd3BzaWVbMjU1XSA9IHsgMHgwMCB9LCBwMnBpZVsyNTVdID0geyAweDAwIH07Ci0JdTggcDJwaWVsZW4gPSAwOwotCXVpbnQgd3BzaWVsZW4gPSAwOwotCXUxNiB3cHNfZGV2aWNlcGFzc3dvcmRfaWQgPSAweDAwMDA7Ci0JdWludCB3cHNfZGV2aWNlcGFzc3dvcmRfaWRfbGVuID0gMDsKLQl1MTYgbGVuX2NoYW5uZWxsaXN0X2F0dHIgPSAwOwotCWludCBpLCBqOwotCXN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lOwotCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliOwotCXVuc2lnbmVkIGNoYXIgKnBmcmFtZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdW5zaWduZWQgc2hvcnQgKmZjdHJsOwotCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1MzIgd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JREJHXzg3MjNBKCJbJXNdIEluLCByZXN1bHQgPSAlZFxuIiwgX19mdW5jX18sICByZXN1bHQpOwotCS8qIHVwZGF0ZSBhdHRyaWJ1dGUgKi8KLQlwYXR0cmliID0gJnBtZ250ZnJhbWUtPmF0dHJpYjsKLQl1cGRhdGVfbWdudGZyYW1lX2F0dHJpYjIzYShwYWRhcHRlciwgcGF0dHJpYik7Ci0KLQltZW1zZXQocG1nbnRmcmFtZS0+YnVmX2FkZHIsIDAsIFdMQU5IRFJfT0ZGU0VUICsgVFhERVNDX09GRlNFVCk7Ci0KLQlwZnJhbWUgPSAodTggKikocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKLQlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKLQotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7Ci0KLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCByYWRkcik7Ci0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwotCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOwotCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfQUNUSU9OKTsKLQotCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmNhdGVnb3J5LCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmFjdGlvbiwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDQsICh1bnNpZ25lZCBjaGFyICopICZwMnBvdWksCi0JCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQkvKglUaGUgRGlhbG9nIFRva2VuIG9mIHByb3Zpc2lvbmluZyBkaXNjb3ZlcnkgcmVxdWVzdCBmcmFtZS4gKi8KLQlwd2RpbmZvLT5uZWdvdGlhdGlvbl9kaWFsb2dfdG9rZW4gPSBmcmFtZV9ib2R5WzddOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCAxLAotCQkJCSAgICAgJnB3ZGluZm8tPm5lZ290aWF0aW9uX2RpYWxvZ190b2tlbiwKLQkJCQkgICAgICZwYXR0cmliLT5wa3RsZW4pOwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDMyOCAqLwotCS8qCVRyeSB0byBnZXQgdGhlIGRldmljZSBwYXNzd29yZCBJRCBmcm9tIHRoZSBXUFMgSUUgb2YgZ3JvdXAKLQkJbmVnb3RpYXRpb24gcmVxdWVzdCBmcmFtZSAqLwotCS8qCVdpRmkgRGlyZWN0IHRlc3QgcGxhbiA1LjEuMTUgKi8KLQlydHdfZ2V0X3dwc19pZTIzYShmcmFtZV9ib2R5ICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywKLQkJCSAgbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgd3BzaWUsICZ3cHNpZWxlbik7Ci0JcnR3X2dldF93cHNfYXR0cl9jb250ZW50MjNhKHdwc2llLCB3cHNpZWxlbiwgV1BTX0FUVFJfREVWSUNFX1BXSUQsCi0JCQkJICAgICh1OCAqKSZ3cHNfZGV2aWNlcGFzc3dvcmRfaWQsCi0JCQkJICAgICZ3cHNfZGV2aWNlcGFzc3dvcmRfaWRfbGVuKTsKLQl3cHNfZGV2aWNlcGFzc3dvcmRfaWQgPSBiZTE2X3RvX2NwdSh3cHNfZGV2aWNlcGFzc3dvcmRfaWQpOwotCi0JbWVtc2V0KHdwc2llLCAweDAwLCAyNTUpOwotCXdwc2llbGVuID0gMDsKLQotCS8qCVdQUyBTZWN0aW9uICovCi0Jd3BzaWVsZW4gPSAwOwotCS8qCVdQUyBPVUkgKi8KLQkqKHUzMiopICh3cHNpZSkgPSBjcHVfdG9fYmUzMihXUFNPVUkpOwotCXdwc2llbGVuICs9IDQ7Ci0KLQkvKglXUFMgdmVyc2lvbiAqLwotCS8qCVR5cGU6ICovCi0JKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9WRVIxKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDAxKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0Jd3BzaWVbd3BzaWVsZW4rK10gPSBXUFNfVkVSU0lPTl8xOwkvKglWZXJzaW9uIDEuMCAqLwotCi0JLyoJRGV2aWNlIFBhc3N3b3JkIElEICovCi0JLyoJVHlwZTogKi8KLQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX0RFVklDRV9QV0lEKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDAyKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JaWYgKHdwc19kZXZpY2VwYXNzd29yZF9pZCA9PSBXUFNfRFBJRF9VU0VSX1NQRUMpIHsKLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPQotCQkJY3B1X3RvX2JlMTYoV1BTX0RQSURfUkVHSVNUUkFSX1NQRUMpOwotCX0gZWxzZSBpZiAod3BzX2RldmljZXBhc3N3b3JkX2lkID09IFdQU19EUElEX1JFR0lTVFJBUl9TUEVDKSB7Ci0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0RQSURfVVNFUl9TUEVDKTsKLQl9IGVsc2UgewotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19EUElEX1BCQyk7Ci0JfQotCXdwc2llbGVuICs9IDI7Ci0KLQkvKglDb21tZW50ZWQgYnkgS3VydCAyMDEyMDExMyAqLwotCS8qCUlmIHNvbWUgZGV2aWNlIHdhbnRzIHRvIGRvIHAycCBoYW5kc2hha2Ugd2l0aG91dCBzZW5kaW5nIHByb3ZfZGlzY19yZXEgKi8KLQkvKglXZSBoYXZlIHRvIGdldCBwZWVyX3JlcV9jbSBmcm9tIGhlcmUuICovCi0JaWYgKCFtZW1jbXAocHdkaW5mby0+cnhfcHJvdl9kaXNjX2luZm8uc3RyY29uZmlnX21ldGhvZF9kZXNjX29mX3Byb3ZfZGlzY19yZXEsICIwMDAiLCAzKSkgewotCQlpZiAod3BzX2RldmljZXBhc3N3b3JkX2lkID09IFdQU19EUElEX1VTRVJfU1BFQykgewotCQkJbWVtY3B5KHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxLCAiZGlzIiwgMyk7Ci0JCX0gZWxzZSBpZiAod3BzX2RldmljZXBhc3N3b3JkX2lkID09IFdQU19EUElEX1JFR0lTVFJBUl9TUEVDKSB7Ci0JCQltZW1jcHkocHdkaW5mby0+cnhfcHJvdl9kaXNjX2luZm8uc3RyY29uZmlnX21ldGhvZF9kZXNjX29mX3Byb3ZfZGlzY19yZXEsICJwYWQiLCAzKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweShwd2RpbmZvLT5yeF9wcm92X2Rpc2NfaW5mby5zdHJjb25maWdfbWV0aG9kX2Rlc2Nfb2ZfcHJvdl9kaXNjX3JlcSwgInBiYyIsIDMpOwotCQl9Ci0JfQotCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3cHNpZWxlbiwKLQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSB3cHNpZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQkvKglQMlAgSUUgU2VjdGlvbi4gKi8KLQotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDUwOwotCXAycGllW3AycGllbGVuKytdID0gMHg2RjsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4OUE7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA5OwkvKglXRkEgUDJQIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMDA5MDggKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFAyUCBTcGVjaWZpY2F0aW9uLCB0aGUgZ3JvdXAgbmVnb2l0YXRpb24KLQkJcmVzcG9uc2UgZnJhbWUgc2hvdWxkIGNvbnRhaW4gOSBQMlAgYXR0cmlidXRlcyAqLwotCS8qCTEuIFN0YXR1cyAqLwotCS8qCTIuIFAyUCBDYXBhYmlsaXR5ICovCi0JLyoJMy4gR3JvdXAgT3duZXIgSW50ZW50ICovCi0JLyoJNC4gQ29uZmlndXJhdGlvbiBUaW1lb3V0ICovCi0JLyoJNS4gT3BlcmF0aW5nIENoYW5uZWwgKi8KLQkvKgk2LiBJbnRlbmRlZCBQMlAgSW50ZXJmYWNlIEFkZHJlc3MgKi8KLQkvKgk3LiBDaGFubmVsIExpc3QgKi8KLQkvKgk4LiBEZXZpY2UgSW5mbyAqLwotCS8qCTkuIEdyb3VwIElECShPbmx5IEdPKSAqLwotCi0JLyoJVG9EbzogKi8KLQotCS8qCVAyUCBTdGF0dXMgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfU1RBVFVTOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSByZXN1bHQ7Ci0KLQkvKglQMlAgQ2FwYWJpbGl0eSAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9DQVBBQklMSVRZOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJRGV2aWNlIENhcGFiaWxpdHkgQml0bWFwLCAxIGJ5dGUgKi8KLQotCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCkpIHsKLQkJLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExLzAzLzA4ICovCi0JCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIHNwZWNpZmljYXRpb24gKi8KLQkJLyoJaWYgdGhlIHNlbmRpbmcgZGV2aWNlIHdpbGwgYmUgY2xpZW50LCB0aGUgUDJQCi0JCQlDYXBhYmlsaXR5IHNob3VsZCBiZSByZXNlcnZlZCBvZiBncm91cCBuZWdvdGF0aW9uCi0JCQlyZXNwb25zZSBmcmFtZSAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDA7Ci0JfSBlbHNlIHsKLQkJLyoJQmUgZ3JvdXAgb3duZXIgb3IgbWVldCB0aGUgZXJyb3IgY2FzZSAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IERNUF9QMlBfREVWQ0FQX1NVUFBPUlQ7Ci0JfQotCi0JLyoJR3JvdXAgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCWlmIChwd2RpbmZvLT5wZXJzaXN0ZW50X3N1cHBvcnRlZCkgewotCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9HUlBDQVBfQ1JPU1NfQ09OTiB8Ci0JCQlQMlBfR1JQQ0FQX1BFUlNJU1RFTlRfR1JPVVA7Ci0JfSBlbHNlIHsKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfR1JQQ0FQX0NST1NTX0NPTk47Ci0JfQotCi0JLyoJR3JvdXAgT3duZXIgSW50ZW50ICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0dPX0lOVEVOVDsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwMSk7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCWlmIChwd2RpbmZvLT5wZWVyX2ludGVudCAmIDB4MDEpIHsKLQkJLyoJUGVlcidzIHRpZSBicmVha2VyIGJpdCBpcyAxLCBvdXIgdGllIGJyZWFrZXIKLQkJCWJpdCBzaG91bGQgYmUgMCAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IChwd2RpbmZvLT5pbnRlbnQgPDwgMSk7Ci0JfSBlbHNlIHsKLQkJLyogUGVlcidzIHRpZSBicmVha2VyIGJpdCBpcyAwLCBvdXIgdGllIGJyZWFrZXIgYml0Ci0JCSAgIHNob3VsZCBiZSAxICovCi0JCXAycGllW3AycGllbGVuKytdID0gKChwd2RpbmZvLT5pbnRlbnQgPDwgMSkgfCBCSVQoMCkpOwotCX0KLQotCS8qCUNvbmZpZ3VyYXRpb24gVGltZW91dCAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9DT05GX1RJTUVPVVQ7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDIpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKgkyIHNlY29uZHMgbmVlZGVkIHRvIGJlIHRoZSBQMlAgR08gKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IDIwMDsKLQkvKgkyIHNlY29uZHMgbmVlZGVkIHRvIGJlIHRoZSBQMlAgQ2xpZW50ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAyMDA7Ci0KLQkvKglPcGVyYXRpbmcgQ2hhbm5lbCAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9PUEVSQVRJTkdfQ0g7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDUpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglDb3VudHJ5IFN0cmluZyAqLwotCXAycGllW3AycGllbGVuKytdID0gJ1gnOwotCXAycGllW3AycGllbGVuKytdID0gJ1gnOwotCi0JLyoJVGhlIHRoaXJkIGJ5dGUgc2hvdWxkIGJlIHNldCB0byAweDA0LiAqLwotCS8qCURlc2NyaWJlZCBpbiB0aGUgIk9wZXJhdGluZyBDaGFubmVsIEF0dHJpYnV0ZSIgc2VjdGlvbi4gKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4MDQ7Ci0KLQkvKglPcGVyYXRpbmcgQ2xhc3MgKi8KLQlpZiAocHdkaW5mby0+b3BlcmF0aW5nX2NoYW5uZWwgPD0gMTQpIHsKLQkJLyoJT3BlcmF0aW5nIENsYXNzICovCi0JCXAycGllW3AycGllbGVuKytdID0gMHg1MTsKLQl9IGVsc2UgaWYgKChwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCA+PSAzNikgJiYKLQkJICAgKHB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsIDw9IDQ4KSkgewotCQkvKglPcGVyYXRpbmcgQ2xhc3MgKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDczOwotCX0gZWxzZSB7Ci0JCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4N2M7Ci0JfQotCi0JLyoJQ2hhbm5lbCBOdW1iZXIgKi8KLQkvKglvcGVyYXRpbmcgY2hhbm5lbCBudW1iZXIgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IHB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsOwotCi0JLyoJSW50ZW5kZWQgUDJQIEludGVyZmFjZSBBZGRyZXNzICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0lOVEVOVEVEX0lGX0FERFI7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNihFVEhfQUxFTik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksIEVUSF9BTEVOKTsKLQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNoYW5uZWwgTGlzdCAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9DSF9MSVNUOwotCi0JLyogIENvdW50cnkgU3RyaW5nKDMpICovCi0JLyogICsgKE9wZXJhdGluZyBDbGFzcyAoMSkgKyBOdW1iZXIgb2YgQ2hhbm5lbHMoMSkpICoKLQkgICAgT3BlcmF0aW9uIENsYXNzZXMgKD8pICovCi0JLyogICsgbnVtYmVyIG9mIGNoYW5uZWxzIGluIGFsbCBjbGFzc2VzICovCi0JbGVuX2NoYW5uZWxsaXN0X2F0dHIgPSAzICsKLQkJKDEgKyAxKSAqICh1MTYpcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3NlcyArCi0JCWdldF9yZWdfY2xhc3Nlc19mdWxsX2NvdW50KHBtbG1lZXh0LT5jaGFubmVsX2xpc3QpOwotCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNihsZW5fY2hhbm5lbGxpc3RfYXR0cik7Ci0KLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291bnRyeSBTdHJpbmcgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCS8qCVRoZSB0aGlyZCBieXRlIHNob3VsZCBiZSBzZXQgdG8gMHgwNC4gKi8KLQkvKglEZXNjcmliZWQgaW4gdGhlICJPcGVyYXRpbmcgQ2hhbm5lbCBBdHRyaWJ1dGUiIHNlY3Rpb24uICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JLyoJQ2hhbm5lbCBFbnRyeSBMaXN0ICovCi0KLQlmb3IgKGogPSAwOyBqIDwgcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3NlczsgaisrKSB7Ci0JCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9Ci0JCQlwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc1tqXS5yZWdfY2xhc3M7Ci0KLQkJLyoJTnVtYmVyIG9mIENoYW5uZWxzICovCi0JCXAycGllW3AycGllbGVuKytdID0KLQkJCXBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLmNoYW5uZWxzOwotCi0JCS8qCUNoYW5uZWwgTGlzdCAqLwotCQlmb3IgKGkgPSAwOwotCQkgICAgIGkgPCBwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc1tqXS5jaGFubmVsczsgaSsrKSB7Ci0JCQlwMnBpZVtwMnBpZWxlbisrXSA9Ci0JCQkJcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3Nbal0uY2hhbm5lbFtpXTsKLQkJfQotCX0KLQotCS8qCURldmljZSBJbmZvICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCTIxIC0+IFAyUCBEZXZpY2UgQWRkcmVzcyAoNmJ5dGVzKSArIENvbmZpZyBNZXRob2RzICgyYnl0ZXMpICsKLQkJUHJpbWFyeSBEZXZpY2UgVHlwZSAoOGJ5dGVzKSAqLwotCS8qCSsgTnVtb2ZTZWNvbmREZXZUeXBlICgxYnl0ZSkgKyBXUFMgRGV2aWNlIE5hbWUgSUQgZmllbGQKLQkJKDJieXRlcykgKyBXUFMgRGV2aWNlIE5hbWUgTGVuIGZpZWxkICgyYnl0ZXMpICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigyMSArIHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCVAyUCBEZXZpY2UgQWRkcmVzcyAqLwotCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksIEVUSF9BTEVOKTsKLQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvbmZpZyBNZXRob2QgKi8KLQkvKglUaGlzIGZpZWxkIHNob3VsZCBiZSBiaWcgZW5kaWFuLiBOb3RlZCBieSBQMlAgc3BlY2lmaWNhdGlvbi4gKi8KLQotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMTYocHdkaW5mby0+c3VwcG9ydGVkX3dwc19jbSk7Ci0KLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJUHJpbWFyeSBEZXZpY2UgVHlwZSAqLwotCS8qCUNhdGVnb3J5IElEICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfUERUX0NJRF9NVUxJVF9NRURJQSk7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCU9VSSAqLwotCSoodTMyKikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMzIoV1BTT1VJKTsKLQlwMnBpZWxlbiArPSA0OwotCi0JLyoJU3ViIENhdGVnb3J5IElEICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfUERUX1NDSURfTUVESUFfU0VSVkVSKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJTnVtYmVyIG9mIFNlY29uZGFyeSBEZXZpY2UgVHlwZXMgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4MDA7CS8qCU5vIFNlY29uZGFyeSBEZXZpY2UgVHlwZSBMaXN0ICovCi0KLQkvKglEZXZpY2UgTmFtZSAqLwotCS8qCVR5cGU6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSk7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwd2RpbmZvLT5kZXZpY2VfbmFtZSwKLQkgICAgICAgcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQlwMnBpZWxlbiArPSBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW47Ci0KLQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpCi0JewotCQkvKglHcm91cCBJRCBBdHRyaWJ1dGUgKi8KLQkJLyoJVHlwZTogKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9HUk9VUF9JRDsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0KLQkJCWNwdV90b19sZTE2KEVUSF9BTEVOICsgcHdkaW5mby0+bmVnb19zc2lkbGVuKTsKLQkJcDJwaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJLyoJcDJQIERldmljZSBBZGRyZXNzICovCi0JCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwd2RpbmZvLT5kZXZpY2VfYWRkciwgRVRIX0FMRU4pOwotCQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCQkvKglTU0lEICovCi0JCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwd2RpbmZvLT5uZWdvX3NzaWQsCi0JCSAgICAgICBwd2RpbmZvLT5uZWdvX3NzaWRsZW4pOwotCQlwMnBpZWxlbiArPSBwd2RpbmZvLT5uZWdvX3NzaWRsZW47Ci0KLQl9Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHAycGllbGVuLAotCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopIHAycGllLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jd2ZkaWVsZW4gPSBidWlsZF9uZWdvX3Jlc3Bfd2ZkX2llKHB3ZGluZm8sIHBmcmFtZSk7Ci0JcGZyYW1lICs9IHdmZGllbGVuOwotCXBhdHRyaWItPnBrdGxlbiArPSB3ZmRpZWxlbjsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JcGF0dHJpYi0+bGFzdF90eGNtZHN6ID0gcGF0dHJpYi0+cGt0bGVuOwotCi0JZHVtcF9tZ250ZnJhbWUyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBpc3N1ZV9wMnBfR09fY29uZmlybShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCogcmFkZHIsCi0JCQkJIHU4IHJlc3VsdCkKLXsKLQotCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKLQl1OCBhY3Rpb24gPSBQMlBfUFVCX0FDVElPTl9BQ1RJT047Ci0JdTMyIHAycG91aSA9IGNwdV90b19iZTMyKFAyUE9VSSk7Ci0JdTggb3VpX3N1YnR5cGUgPSBQMlBfR09fTkVHT19DT05GOwotCXU4IHAycGllWyAyNTUgXSA9IHsgMHgwMCB9OwotCXU4IHAycGllbGVuID0gMDsKLQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZTsKLQlzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYjsKLQl1bnNpZ25lZCBjaGFyICpwZnJhbWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwotCXVuc2lnbmVkIHNob3J0ICpmY3RybDsKLQlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwotCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JdTMyIHdmZGllbGVuID0gMDsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JaWYgKChwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdikpID09IE5VTEwpCi0JCXJldHVybjsKLQotCURCR184NzIzQSgiWyVzXSBJblxuIiwgX19mdW5jX18pOwotCS8qIHVwZGF0ZSBhdHRyaWJ1dGUgKi8KLQlwYXR0cmliID0gJnBtZ250ZnJhbWUtPmF0dHJpYjsKLQl1cGRhdGVfbWdudGZyYW1lX2F0dHJpYjIzYShwYWRhcHRlciwgcGF0dHJpYik7Ci0KLQltZW1zZXQocG1nbnRmcmFtZS0+YnVmX2FkZHIsIDAsIFdMQU5IRFJfT0ZGU0VUICsgVFhERVNDX09GRlNFVCk7Ci0KLQlwZnJhbWUgPSAodTggKikocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKLQlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKLQotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7Ci0KLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCByYWRkcik7Ci0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwotCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOwotCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfQUNUSU9OKTsKLQotCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmNhdGVnb3J5LCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmFjdGlvbiwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDQsICh1bnNpZ25lZCBjaGFyICopJnAycG91aSwKLQkJCQkgICAgICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCAxLCAmb3VpX3N1YnR5cGUsICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCAxLAotCQkJCSAgICAgJnB3ZGluZm8tPm5lZ290aWF0aW9uX2RpYWxvZ190b2tlbiwKLQkJCQkgICZwYXR0cmliLT5wa3RsZW4pOwotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDUwOwotCXAycGllW3AycGllbGVuKytdID0gMHg2RjsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4OUE7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA5OwkvKglXRkEgUDJQIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTAzMDYgKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFAyUCBTcGVjaWZpY2F0aW9uLCB0aGUgZ3JvdXAgbmVnb2l0YXRpb24KLQkJcmVxdWVzdCBmcmFtZSBzaG91bGQgY29udGFpbiA1IFAyUCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gU3RhdHVzICovCi0JLyoJMi4gUDJQIENhcGFiaWxpdHkgKi8KLQkvKgkzLiBPcGVyYXRpbmcgQ2hhbm5lbCAqLwotCS8qCTQuIENoYW5uZWwgTGlzdCAqLwotCS8qCTUuIEdyb3VwIElECShpZiB0aGlzIFdpRmkgaXMgR08pICovCi0KLQkvKglQMlAgU3RhdHVzICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX1NUQVRVUzsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwMSk7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gcmVzdWx0OwotCi0JLyoJUDJQIENhcGFiaWxpdHkgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0FQQUJJTElUWTsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwMik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCURldmljZSBDYXBhYmlsaXR5IEJpdG1hcCwgMSBieXRlICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBETVBfUDJQX0RFVkNBUF9TVVBQT1JUOwotCi0JLyoJR3JvdXAgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCWlmIChwd2RpbmZvLT5wZXJzaXN0ZW50X3N1cHBvcnRlZCkgewotCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9HUlBDQVBfQ1JPU1NfQ09OTiB8Ci0JCQlQMlBfR1JQQ0FQX1BFUlNJU1RFTlRfR1JPVVA7Ci0JfSBlbHNlIHsKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfR1JQQ0FQX0NST1NTX0NPTk47Ci0JfQotCi0JLyoJT3BlcmF0aW5nIENoYW5uZWwgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfT1BFUkFUSU5HX0NIOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDA1KTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291bnRyeSBTdHJpbmcgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCS8qCVRoZSB0aGlyZCBieXRlIHNob3VsZCBiZSBzZXQgdG8gMHgwNC4gKi8KLQkvKglEZXNjcmliZWQgaW4gdGhlICJPcGVyYXRpbmcgQ2hhbm5lbCBBdHRyaWJ1dGUiIHNlY3Rpb24uICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfQ0xJRU5UKSkgewotCQlpZiAocHdkaW5mby0+cGVlcl9vcGVyYXRpbmdfY2ggPD0gMTQpIHsKLQkJCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDUxOwotCQl9IGVsc2UgaWYgKChwd2RpbmZvLT5wZWVyX29wZXJhdGluZ19jaCA+PSAzNikgJiYKLQkJCSAocHdkaW5mby0+cGVlcl9vcGVyYXRpbmdfY2ggPD0gNDgpKSB7Ci0JCQkvKglPcGVyYXRpbmcgQ2xhc3MgKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gMHg3MzsKLQkJfSBlbHNlIHsKLQkJCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDdjOwotCQl9Ci0KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBwd2RpbmZvLT5wZWVyX29wZXJhdGluZ19jaDsKLQl9IGVsc2UgewotCQlpZiAocHdkaW5mby0+b3BlcmF0aW5nX2NoYW5uZWwgPD0gMTQpIHsKLQkJCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDUxOwotCQl9Ci0JCWVsc2UgaWYgKChwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCA+PSAzNikgJiYKLQkJCSAocHdkaW5mby0+b3BlcmF0aW5nX2NoYW5uZWwgPD0gNDgpKSB7Ci0JCQkvKglPcGVyYXRpbmcgQ2xhc3MgKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gMHg3MzsKLQkJfSBlbHNlIHsKLQkJCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDdjOwotCQl9Ci0KLQkJLyoJQ2hhbm5lbCBOdW1iZXIgKi8KLQkJLyoJVXNlIHRoZSBsaXN0ZW4gY2hhbm5lbCBhcyB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbDsKLQl9Ci0KLQkvKglDaGFubmVsIExpc3QgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0hfTElTVDsKLQotCS8qCUxlbmd0aDogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9Ci0JCWNwdV90b19sZTE2KHB3ZGluZm8tPmNoYW5uZWxfbGlzdF9hdHRyX2xlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwd2RpbmZvLT5jaGFubmVsX2xpc3RfYXR0ciwKLQkgICAgICAgcHdkaW5mby0+Y2hhbm5lbF9saXN0X2F0dHJfbGVuKTsKLQlwMnBpZWxlbiArPSBwd2RpbmZvLT5jaGFubmVsX2xpc3RfYXR0cl9sZW47Ci0KLQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpIHsKLQkJLyoJR3JvdXAgSUQgQXR0cmlidXRlICovCi0JCS8qCVR5cGU6ICovCi0JCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfR1JPVVBfSUQ7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9Ci0JCQljcHVfdG9fbGUxNihFVEhfQUxFTiArIHB3ZGluZm8tPm5lZ29fc3NpZGxlbik7Ci0JCXAycGllbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCS8qCXAyUCBEZXZpY2UgQWRkcmVzcyAqLwotCQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsIEVUSF9BTEVOKTsKLQkJcDJwaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkJLyoJU1NJRCAqLwotCQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+bmVnb19zc2lkLAotCQkgICAgICAgcHdkaW5mby0+bmVnb19zc2lkbGVuKTsKLQkJcDJwaWVsZW4gKz0gcHdkaW5mby0+bmVnb19zc2lkbGVuOwotCX0KLQotCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfVkVORE9SX1NQRUNJRklDX0lFXywgcDJwaWVsZW4sCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKilwMnBpZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXdmZGllbGVuID0gYnVpbGRfbmVnb19jb25maXJtX3dmZF9pZShwd2RpbmZvLCBwZnJhbWUpOwotCXBmcmFtZSArPSB3ZmRpZWxlbjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gd2ZkaWVsZW47Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKLQotCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLQotCXJldHVybjsKLX0KLQotdm9pZCBpc3N1ZV9wMnBfaW52aXRhdGlvbl9yZXF1ZXN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4KiByYWRkcikKLXsKLQl1bnNpZ25lZCBjaGFyIGNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9QVUJMSUM7Ci0JdTggYWN0aW9uID0gUDJQX1BVQl9BQ1RJT05fQUNUSU9OOwotCXUzMiBwMnBvdWkgPSBjcHVfdG9fYmUzMihQMlBPVUkpOwotCXU4IG91aV9zdWJ0eXBlID0gUDJQX0lOVklUX1JFUTsKLQl1OCBwMnBpZVsgMjU1IF0gPSB7IDB4MDAgfTsKLQl1OCBwMnBpZWxlbiA9IDA7Ci0JdTggZGlhbG9nVG9rZW4gPSAzOwotCXUxNiBsZW5fY2hhbm5lbGxpc3RfYXR0ciA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1MzIgd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0JaW50IGksIGo7Ci0Jc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWU7Ci0Jc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7Ci0JdW5zaWduZWQgY2hhciAqcGZyYW1lOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7Ci0Jc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQkvKiB1cGRhdGUgYXR0cmlidXRlICovCi0JcGF0dHJpYiA9ICZwbWdudGZyYW1lLT5hdHRyaWI7Ci0JdXBkYXRlX21nbnRmcmFtZV9hdHRyaWIyM2EocGFkYXB0ZXIsIHBhdHRyaWIpOwotCi0JbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwotCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOwotCi0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgcmFkZHIpOwotCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSk7Ci0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMywgcmFkZHIpOwotCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOwotCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfQUNUSU9OKTsKLQotCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmNhdGVnb3J5LCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmFjdGlvbiwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDQsICh1bnNpZ25lZCBjaGFyICopICZwMnBvdWksCi0JCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmRpYWxvZ1Rva2VuLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCS8qCVAyUCBJRSBTZWN0aW9uLiAqLwotCi0JLyoJUDJQIE9VSSAqLwotCXAycGllbGVuID0gMDsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NTA7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDZGOwotCXAycGllW3AycGllbGVuKytdID0gMHg5QTsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDEwMTAxMSAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZSBQMlAgSW52aXRhdGlvbgotCQlyZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDcgUDJQIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBDb25maWd1cmF0aW9uIFRpbWVvdXQgKi8KLQkvKgkyLiBJbnZpdGF0aW9uIEZsYWdzICovCi0JLyoJMy4gT3BlcmF0aW5nIENoYW5uZWwJKE9ubHkgR08pICovCi0JLyoJNC4gUDJQIEdyb3VwIEJTU0lECShTaG91bGQgYmUgaW5jbHVkZWQgaWYgSSBhbSB0aGUgR08pICovCi0JLyoJNS4gQ2hhbm5lbCBMaXN0ICovCi0JLyoJNi4gUDJQIEdyb3VwIElEICovCi0JLyoJNy4gUDJQIERldmljZSBJbmZvICovCi0KLQkvKglDb25maWd1cmF0aW9uIFRpbWVvdXQgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ09ORl9USU1FT1VUOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJMiBzZWNvbmRzIG5lZWRlZCB0byBiZSB0aGUgUDJQIEdPICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAyMDA7Ci0JLyoJMiBzZWNvbmRzIG5lZWRlZCB0byBiZSB0aGUgUDJQIENsaWVudCAqLwotCXAycGllW3AycGllbGVuKytdID0gMjAwOwotCi0JLyoJSW52aXRhdGlvbiBGbGFncyAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9JTlZJVEFUSU9OX0ZMQUdTOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfSU5WSVRBVElPTl9GTEFHU19QRVJTSVNURU5UOwotCi0JLyoJT3BlcmF0aW5nIENoYW5uZWwgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfT1BFUkFUSU5HX0NIOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDA1KTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291bnRyeSBTdHJpbmcgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCS8qCVRoZSB0aGlyZCBieXRlIHNob3VsZCBiZSBzZXQgdG8gMHgwNC4gKi8KLQkvKglEZXNjcmliZWQgaW4gdGhlICJPcGVyYXRpbmcgQ2hhbm5lbCBBdHRyaWJ1dGUiIHNlY3Rpb24uICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JLyoJT3BlcmF0aW5nIENsYXNzICovCi0JaWYgKHB3ZGluZm8tPmludml0ZXJlcV9pbmZvLm9wZXJhdGluZ19jaCA8PSAxNCkKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDUxOwotCWVsc2UgaWYgKChwd2RpbmZvLT5pbnZpdGVyZXFfaW5mby5vcGVyYXRpbmdfY2ggPj0gMzYpICYmCi0JCSAocHdkaW5mby0+aW52aXRlcmVxX2luZm8ub3BlcmF0aW5nX2NoIDw9IDQ4KSkKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDczOwotCWVsc2UKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDdjOwotCi0JLyoJQ2hhbm5lbCBOdW1iZXIgKi8KLQkvKglvcGVyYXRpbmcgY2hhbm5lbCBudW1iZXIgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IHB3ZGluZm8tPmludml0ZXJlcV9pbmZvLm9wZXJhdGluZ19jaDsKLQotCWlmIChldGhlcl9hZGRyX2VxdWFsKG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwKLQkJCSAgICAgcHdkaW5mby0+aW52aXRlcmVxX2luZm8uZ29fYnNzaWQpKSB7Ci0JCS8qCVAyUCBHcm91cCBCU1NJRCAqLwotCQkvKglUeXBlOiAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0dST1VQX0JTU0lEOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNihFVEhfQUxFTik7Ci0JCXAycGllbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCS8qCVAyUCBEZXZpY2UgQWRkcmVzcyBmb3IgR08gKi8KLQkJbWVtY3B5KHAycGllICsgcDJwaWVsZW4sIHB3ZGluZm8tPmludml0ZXJlcV9pbmZvLmdvX2Jzc2lkLAotCQkgICAgICAgRVRIX0FMRU4pOwotCQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQl9Ci0KLQkvKglDaGFubmVsIExpc3QgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0hfTElTVDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKiAgQ291bnRyeSBTdHJpbmcoMykgKi8KLQkvKiAgKyAoT3BlcmF0aW5nIENsYXNzICgxKSArIE51bWJlciBvZiBDaGFubmVscygxKSkgKgotCSAgICBPcGVyYXRpb24gQ2xhc3NlcyAoPykgKi8KLQkvKiAgKyBudW1iZXIgb2YgY2hhbm5lbHMgaW4gYWxsIGNsYXNzZXMgKi8KLQlsZW5fY2hhbm5lbGxpc3RfYXR0ciA9IDMgKwotCQkoMSArIDEpICogKHUxNilwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc2VzICsKLQkJZ2V0X3JlZ19jbGFzc2VzX2Z1bGxfY291bnQocG1sbWVleHQtPmNoYW5uZWxfbGlzdCk7Ci0KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KGxlbl9jaGFubmVsbGlzdF9hdHRyKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291bnRyeSBTdHJpbmcgKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCS8qCVRoZSB0aGlyZCBieXRlIHNob3VsZCBiZSBzZXQgdG8gMHgwNC4gKi8KLQkvKglEZXNjcmliZWQgaW4gdGhlICJPcGVyYXRpbmcgQ2hhbm5lbCBBdHRyaWJ1dGUiIHNlY3Rpb24uICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JLyoJQ2hhbm5lbCBFbnRyeSBMaXN0ICovCi0JZm9yIChqID0gMDsgaiA8IHBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzZXM7IGorKykgewotCQkvKglPcGVyYXRpbmcgQ2xhc3MgKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPQotCQkJcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3Nbal0ucmVnX2NsYXNzOwotCi0JCS8qCU51bWJlciBvZiBDaGFubmVscyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9Ci0JCQlwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc1tqXS5jaGFubmVsczsKLQotCQkvKglDaGFubmVsIExpc3QgKi8KLQkJZm9yIChpID0gMDsKLQkJICAgICBpIDwgcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3Nbal0uY2hhbm5lbHM7IGkrKykgewotCQkJcDJwaWVbcDJwaWVsZW4rK10gPQotCQkJCXBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLmNoYW5uZWxbaV07Ci0JCX0KLQl9Ci0KLQkvKglQMlAgR3JvdXAgSUQgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfR1JPVVBfSUQ7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPQotCQljcHVfdG9fbGUxNig2ICsgcHdkaW5mby0+aW52aXRlcmVxX2luZm8uc3NpZGxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCVAyUCBEZXZpY2UgQWRkcmVzcyBmb3IgR08gKi8KLQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+aW52aXRlcmVxX2luZm8uZ29fYnNzaWQsIEVUSF9BTEVOKTsKLQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCVNTSUQgKi8KLQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+aW52aXRlcmVxX2luZm8uZ29fc3NpZCwKLQkgICAgICAgcHdkaW5mby0+aW52aXRlcmVxX2luZm8uc3NpZGxlbik7Ci0JcDJwaWVsZW4gKz0gcHdkaW5mby0+aW52aXRlcmVxX2luZm8uc3NpZGxlbjsKLQotCS8qCURldmljZSBJbmZvICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCTIxIC0+IFAyUCBEZXZpY2UgQWRkcmVzcyAoNmJ5dGVzKSArIENvbmZpZyBNZXRob2RzICgyYnl0ZXMpICsKLQkJUHJpbWFyeSBEZXZpY2UgVHlwZSAoOGJ5dGVzKSAqLwotCS8qCSsgTnVtb2ZTZWNvbmREZXZUeXBlICgxYnl0ZSkgKyBXUFMgRGV2aWNlIE5hbWUgSUQgZmllbGQKLQkJKDJieXRlcykgKyBXUFMgRGV2aWNlIE5hbWUgTGVuIGZpZWxkICgyYnl0ZXMpICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigyMSArIHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCVAyUCBEZXZpY2UgQWRkcmVzcyAqLwotCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksIEVUSF9BTEVOKTsKLQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvbmZpZyBNZXRob2QgKi8KLQkvKglUaGlzIGZpZWxkIHNob3VsZCBiZSBiaWcgZW5kaWFuLiBOb3RlZCBieSBQMlAgc3BlY2lmaWNhdGlvbi4gKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19DT05GSUdfTUVUSE9EX0RJU1BMQVkpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglQcmltYXJ5IERldmljZSBUeXBlICovCi0JLyoJQ2F0ZWdvcnkgSUQgKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19QRFRfQ0lEX01VTElUX01FRElBKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJT1VJICovCi0JKih1MzIqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUzMihXUFNPVUkpOwotCXAycGllbGVuICs9IDQ7Ci0KLQkvKglTdWIgQ2F0ZWdvcnkgSUQgKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19QRFRfU0NJRF9NRURJQV9TRVJWRVIpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglOdW1iZXIgb2YgU2Vjb25kYXJ5IERldmljZSBUeXBlcyAqLwotCXAycGllW3AycGllbGVuKytdID0gMHgwMDsJLyoJTm8gU2Vjb25kYXJ5IERldmljZSBUeXBlIExpc3QgKi8KLQotCS8qCURldmljZSBOYW1lICovCi0JLyoJVHlwZTogKi8KLQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX0RFVklDRV9OQU1FKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMTYocHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JbWVtY3B5KHAycGllICsgcDJwaWVsZW4sIHB3ZGluZm8tPmRldmljZV9uYW1lLAotCSAgICAgICBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4pOwotCXAycGllbGVuICs9IHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbjsKLQotCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfVkVORE9SX1NQRUNJRklDX0lFXywgcDJwaWVsZW4sCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgcDJwaWUsICZwYXR0cmliLT5wa3RsZW4pOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl3ZmRpZWxlbiA9IGJ1aWxkX2ludml0YXRpb25fcmVxX3dmZF9pZShwd2RpbmZvLCBwZnJhbWUpOwotCXBmcmFtZSArPSB3ZmRpZWxlbjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gd2ZkaWVsZW47Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKLQotCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLQotCXJldHVybjsKLX0KLQotdm9pZCBpc3N1ZV9wMnBfaW52aXRhdGlvbl9yZXNwb25zZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcmFkZHIsCi0JCQkJICAgICAgdTggZGlhbG9nVG9rZW4sIHU4IHN0YXR1c19jb2RlKQotewotCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKLQl1OCBhY3Rpb24gPSBQMlBfUFVCX0FDVElPTl9BQ1RJT047Ci0JdTMyIHAycG91aSA9IGNwdV90b19iZTMyKFAyUE9VSSk7Ci0JdTggb3VpX3N1YnR5cGUgPSBQMlBfSU5WSVRfUkVTUDsKLQl1OCBwMnBpZVsgMjU1IF0gPSB7IDB4MDAgfTsKLQl1OCBwMnBpZWxlbiA9IDA7Ci0JdTE2IGxlbl9jaGFubmVsbGlzdF9hdHRyID0gMDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXUzMiB3ZmRpZWxlbiA9IDA7Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQlpbnQgaSwgajsKLQotCXN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lOwotCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliOwotCXVuc2lnbmVkIGNoYXIgKnBmcmFtZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdW5zaWduZWQgc2hvcnQgKmZjdHJsOwotCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0KLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwotCXBhdHRyaWIgPSAmcG1nbnRmcmFtZS0+YXR0cmliOwotCXVwZGF0ZV9tZ250ZnJhbWVfYXR0cmliMjNhKHBhZGFwdGVyLCBwYXR0cmliKTsKLQotCW1lbXNldChwbWdudGZyYW1lLT5idWZfYWRkciwgMCwgV0xBTkhEUl9PRkZTRVQgKyBUWERFU0NfT0ZGU0VUKTsKLQotCXBmcmFtZSA9ICh1OCAqKShwbWdudGZyYW1lLT5idWZfYWRkcikgKyBUWERFU0NfT0ZGU0VUOwotCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwotCi0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKmZjdHJsID0gMDsKLQotCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIHJhZGRyKTsKLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwotCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIHJhZGRyKTsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKLQlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZhY3Rpb24sICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCA0LCAodW5zaWduZWQgY2hhciAqKSZwMnBvdWksCi0JCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmRpYWxvZ1Rva2VuLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCS8qCVAyUCBJRSBTZWN0aW9uLiAqLwotCi0JLyoJUDJQIE9VSSAqLwotCXAycGllbGVuID0gMDsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NTA7Ci0JcDJwaWVbcDJwaWVsZW4rK10gPSAweDZGOwotCXAycGllW3AycGllbGVuKytdID0gMHg5QTsKLQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDEwMTAwNSAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZSBQMlAgSW52aXRhdGlvbgotCQlyZXNwb25zZSBmcmFtZSBzaG91bGQgY29udGFpbiA1IFAyUCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gU3RhdHVzICovCi0JLyoJMi4gQ29uZmlndXJhdGlvbiBUaW1lb3V0ICovCi0JLyoJMy4gT3BlcmF0aW5nIENoYW5uZWwJKE9ubHkgR08pICovCi0JLyoJNC4gUDJQIEdyb3VwIEJTU0lECShPbmx5IEdPKSAqLwotCS8qCTUuIENoYW5uZWwgTGlzdCAqLwotCi0JLyoJUDJQIFN0YXR1cyAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9TVEFUVVM7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDEpOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglXaGVuIHN0YXR1cyBjb2RlIGlzIFAyUF9TVEFUVVNfRkFJTF9JTkZPX1VOQVZBSUxBQkxFLiAqLwotCS8qCVNlbnQgdGhlIGV2ZW50IHJlY2VpdmluZyB0aGUgUDJQIEludml0YXRpb24gUmVxIGZyYW1lCi0JCXRvIERNUCBVSS4gKi8KLQkvKglETVAgaGFkIHRvIGNvbXBhcmUgdGhlIE1BQyBhZGRyZXNzIHRvIGZpbmQgb3V0IHRoZSBwcm9maWxlLiAqLwotCS8qCVNvLCB0aGUgV2lGaSBkcml2ZXIgd2lsbCBzZW5kIHRoZQotCQlQMlBfU1RBVFVTX0ZBSUxfSU5GT19VTkFWQUlMQUJMRSB0byBOQi4gKi8KLQkvKglJZiB0aGUgVUkgZm91bmQgdGhlIGNvcnJlc3BvbmRpbmcgcHJvZmlsZSwgdGhlIFdpRmkgZHJpdmVyCi0JCXNlbmRzIHRoZSBQMlAgSW52aXRhdGlvbiBSZXEgKi8KLQkvKgl0byBOQiB0byByZWJ1aWxkIHRoZSBwZXJzaXN0ZW50IGdyb3VwLiAqLwotCXAycGllW3AycGllbGVuKytdID0gc3RhdHVzX2NvZGU7Ci0KLQkvKglDb25maWd1cmF0aW9uIFRpbWVvdXQgKi8KLQkvKglUeXBlOiAqLwotCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ09ORl9USU1FT1VUOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJMiBzZWNvbmRzIG5lZWRlZCB0byBiZSB0aGUgUDJQIEdPICovCi0JcDJwaWVbcDJwaWVsZW4rK10gPSAyMDA7Ci0JLyoJMiBzZWNvbmRzIG5lZWRlZCB0byBiZSB0aGUgUDJQIENsaWVudCAqLwotCXAycGllW3AycGllbGVuKytdID0gMjAwOwotCi0JaWYgKHN0YXR1c19jb2RlID09IFAyUF9TVEFUVVNfU1VDQ0VTUykgewotCQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpIHsKLQkJCS8qIFRoZSBQMlAgSW52aXRhdGlvbiByZXF1ZXN0IGZyYW1lIGFza3MgdGhpcwotCQkJICAgV2ktRmkgZGV2aWNlIHRvIGJlIHRoZSBQMlAgR08gKi8KLQkJCS8qIEluIHRoaXMgY2FzZSwgdGhlIFAyUCBJbnZpdGF0aW9uIHJlc3BvbnNlCi0JCQkgICBmcmFtZSBzaG91bGQgY2FycnkgdGhlIHR3byBtb3JlIFAyUCBhdHRyaWJ1dGVzLiAqLwotCQkJLyogRmlyc3Qgb25lIGlzIG9wZXJhdGluZyBjaGFubmVsIGF0dHJpYnV0ZS4gKi8KLQkJCS8qIFNlY29uZCBvbmUgaXMgUDJQIEdyb3VwIEJTU0lEIGF0dHJpYnV0ZS4gKi8KLQotCQkJLyogT3BlcmF0aW5nIENoYW5uZWwgKi8KLQkJCS8qIFR5cGU6ICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX09QRVJBVElOR19DSDsKLQotCQkJLyogTGVuZ3RoOiAqLwotCQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDUpOwotCQkJcDJwaWVsZW4gKz0gMjsKLQotCQkJLyogVmFsdWU6ICovCi0JCQkvKiBDb3VudHJ5IFN0cmluZyAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAnWCc7Ci0JCQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCQkJLyogVGhlIHRoaXJkIGJ5dGUgc2hvdWxkIGJlIHNldCB0byAweDA0LiAqLwotCQkJLyogRGVzY3JpYmVkIGluIHRoZSAiT3BlcmF0aW5nIENoYW5uZWwgQXR0cmlidXRlIgotCQkJICAgc2VjdGlvbi4gKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gMHgwNDsKLQotCQkJLyogT3BlcmF0aW5nIENsYXNzICovCi0JCQkvKglDb3B5IGZyb20gU0Q3ICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NTE7Ci0KLQkJCS8qIENoYW5uZWwgTnVtYmVyICovCi0JCQkvKglvcGVyYXRpbmcgY2hhbm5lbCBudW1iZXIgKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gcHdkaW5mby0+b3BlcmF0aW5nX2NoYW5uZWw7Ci0KLQkJCS8qCVAyUCBHcm91cCBCU1NJRCAqLwotCQkJLyoJVHlwZTogKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfR1JPVVBfQlNTSUQ7Ci0KLQkJCS8qCUxlbmd0aDogKi8KLQkJCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoRVRIX0FMRU4pOwotCQkJcDJwaWVsZW4gKz0gMjsKLQotCQkJLyoJVmFsdWU6ICovCi0JCQkvKglQMlAgRGV2aWNlIEFkZHJlc3MgZm9yIEdPICovCi0JCQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLAotCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCXAycGllbGVuICs9IEVUSF9BTEVOOwotCQl9Ci0KLQkJLyoJQ2hhbm5lbCBMaXN0ICovCi0JCS8qCVR5cGU6ICovCi0JCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0hfTElTVDsKLQotCQkvKglMZW5ndGg6ICovCi0JCS8qICBDb3VudHJ5IFN0cmluZygzKSAqLwotCQkvKiAgKyAoT3BlcmF0aW5nIENsYXNzICgxKSArIE51bWJlciBvZiBDaGFubmVscygxKSkgKgotCQkgICAgT3BlcmF0aW9uIENsYXNzZXMgKD8pICovCi0JCS8qICArIG51bWJlciBvZiBjaGFubmVscyBpbiBhbGwgY2xhc3NlcyAqLwotCQlsZW5fY2hhbm5lbGxpc3RfYXR0ciA9IDMgKwotCQkJKDEgKyAxKSAqICh1MTYpcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3NlcyArCi0JCQlnZXRfcmVnX2NsYXNzZXNfZnVsbF9jb3VudChwbWxtZWV4dC0+Y2hhbm5lbF9saXN0KTsKLQotCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KGxlbl9jaGFubmVsbGlzdF9hdHRyKTsKLQkJcDJwaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJLyoJQ291bnRyeSBTdHJpbmcgKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAnWCc7Ci0JCXAycGllW3AycGllbGVuKytdID0gJ1gnOwotCi0JCS8qIFRoZSB0aGlyZCBieXRlIHNob3VsZCBiZSBzZXQgdG8gMHgwNC4gKi8KLQkJLyogRGVzY3JpYmVkIGluIHRoZSAiT3BlcmF0aW5nIENoYW5uZWwgQXR0cmlidXRlIiBzZWN0aW9uLiAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4MDQ7Ci0KLQkJLyoJQ2hhbm5lbCBFbnRyeSBMaXN0ICovCi0JCWZvciAoaiA9IDA7IGogPCBwbWxtZWV4dC0+Y2hhbm5lbF9saXN0LnJlZ19jbGFzc2VzOyBqKyspIHsKLQkJCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPQotCQkJCXBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLnJlZ19jbGFzczsKLQotCQkJLyoJTnVtYmVyIG9mIENoYW5uZWxzICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9Ci0JCQkJcG1sbWVleHQtPmNoYW5uZWxfbGlzdC5yZWdfY2xhc3Nbal0uY2hhbm5lbHM7Ci0KLQkJCS8qCUNoYW5uZWwgTGlzdCAqLwotCQkJZm9yIChpID0gMDsKLQkJCSAgICAgaSA8IHBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLmNoYW5uZWxzOwotCQkJICAgICBpKyspIHsKLQkJCQlwMnBpZVtwMnBpZWxlbisrXSA9IHBtbG1lZXh0LT5jaGFubmVsX2xpc3QucmVnX2NsYXNzW2pdLmNoYW5uZWxbaV07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHAycGllbGVuLAotCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopcDJwaWUsICZwYXR0cmliLT5wa3RsZW4pOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl3ZmRpZWxlbiA9IGJ1aWxkX2ludml0YXRpb25fcmVzcF93ZmRfaWUocHdkaW5mbywgcGZyYW1lKTsKLQlwZnJhbWUgKz0gd2ZkaWVsZW47Ci0JcGF0dHJpYi0+cGt0bGVuICs9IHdmZGllbGVuOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlwYXR0cmliLT5sYXN0X3R4Y21kc3ogPSBwYXR0cmliLT5wa3RsZW47Ci0KLQlkdW1wX21nbnRmcmFtZTIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXZvaWQgaXNzdWVfcDJwX3Byb3Zpc2lvbl9yZXF1ZXN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwc3NpZCwKLQkJCQkgICAgdTggdXNzaWRsZW4sIHU4ICpwZGV2X3JhZGRyKQotewotCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKLQl1OCBhY3Rpb24gPSBQMlBfUFVCX0FDVElPTl9BQ1RJT047Ci0JdTggZGlhbG9nVG9rZW4gPSAxOwotCXUzMiBwMnBvdWkgPSBjcHVfdG9fYmUzMihQMlBPVUkpOwotCXU4IG91aV9zdWJ0eXBlID0gUDJQX1BST1ZJU0lPTl9ESVNDX1JFUTsKLQl1OCB3cHNpZVsxMDBdID0geyAweDAwIH07Ci0JdTggd3BzaWVsZW4gPSAwOwotCXUzMiBwMnBpZWxlbiA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1MzIgd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0Jc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWU7Ci0Jc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7Ci0JdW5zaWduZWQgY2hhciAqcGZyYW1lOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7Ci0Jc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlEQkdfODcyM0EoIlslc10gSW5cbiIsIF9fZnVuY19fKTsKLQkvKiB1cGRhdGUgYXR0cmlidXRlICovCi0JcGF0dHJpYiA9ICZwbWdudGZyYW1lLT5hdHRyaWI7Ci0JdXBkYXRlX21nbnRmcmFtZV9hdHRyaWIyM2EocGFkYXB0ZXIsIHBhdHRyaWIpOwotCi0JbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwotCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOwotCi0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgcGRldl9yYWRkcik7Ci0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBwZGV2X3JhZGRyKTsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKLQlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZhY3Rpb24sICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCA0LCAodW5zaWduZWQgY2hhciAqKSZwMnBvdWksCi0JCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmRpYWxvZ1Rva2VuLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCXAycGllbGVuID0gYnVpbGRfcHJvdl9kaXNjX3JlcXVlc3RfcDJwX2llMjNhKHB3ZGluZm8sIHBmcmFtZSwgcHNzaWQsCi0JCQkJCQkgICAgIHVzc2lkbGVuLCBwZGV2X3JhZGRyKTsKLQotCXBmcmFtZSArPSBwMnBpZWxlbjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gcDJwaWVsZW47Ci0KLQl3cHNpZWxlbiA9IDA7Ci0JLyoJV1BTIE9VSSAqLwotCSoodTMyKikgKHdwc2llKSA9IGNwdV90b19iZTMyKFdQU09VSSk7Ci0Jd3BzaWVsZW4gKz0gNDsKLQotCS8qCVdQUyB2ZXJzaW9uICovCi0JLyoJVHlwZTogKi8KLQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX1ZFUjEpOwotCXdwc2llbGVuICs9IDI7Ci0KLQkvKglMZW5ndGg6ICovCi0JKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDEpOwotCXdwc2llbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQl3cHNpZVt3cHNpZWxlbisrXSA9IFdQU19WRVJTSU9OXzE7CS8qCVZlcnNpb24gMS4wICovCi0KLQkvKglDb25maWcgTWV0aG9kICovCi0JLyoJVHlwZTogKi8KLQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX0NPTkZfTUVUSE9EKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyoJTGVuZ3RoOiAqLwotCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDAyKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby53cHNfY29uZmlnX21ldGhvZF9yZXF1ZXN0KTsKLQl3cHNpZWxlbiArPSAyOwotCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3cHNpZWxlbiwKLQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSB3cHNpZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXdmZGllbGVuID0gYnVpbGRfcHJvdmRpc2NfcmVxX3dmZF9pZShwd2RpbmZvLCBwZnJhbWUpOwotCXBmcmFtZSArPSB3ZmRpZWxlbjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gd2ZkaWVsZW47Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKLQotCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHU4IGlzX21hdGNoZWRfaW5fcHJvZmlsZWxpc3QodTggKnBlZXJtYWNhZGRyLAotCQkJCSAgICBzdHJ1Y3QgcHJvZmlsZV9pbmZvICpwcm9maWxlaW5mbykKLXsKLQl1OCBpLCBtYXRjaF9yZXN1bHQgPSAwOwotCi0JREJHXzg3MjNBKCJbJXNdIHBlZXJtYWMgPSAlLjJYICUuMlggJS4yWCAlLjJYICUuMlggJS4yWFxuIiwgX19mdW5jX18sCi0JCSAgcGVlcm1hY2FkZHJbMF0sIHBlZXJtYWNhZGRyWzFdLCBwZWVybWFjYWRkclsyXSwKLQkJICBwZWVybWFjYWRkclszXSwgcGVlcm1hY2FkZHJbNF0sIHBlZXJtYWNhZGRyWzVdKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQMlBfTUFYX1BFUlNJU1RFTlRfR1JPVVBfTlVNOyBpKyssIHByb2ZpbGVpbmZvKyspIHsKLQkgICAgICAgREJHXzg3MjNBKCJbJXNdIHByb2ZpbGVpbmZvX21hYyA9ICUuMlggJS4yWCAlLjJYICUuMlggJS4yWCAiCi0JCQkgIiUuMlhcbiIsIF9fZnVuY19fLCBwcm9maWxlaW5mby0+cGVlcm1hY1swXSwKLQkJCSBwcm9maWxlaW5mby0+cGVlcm1hY1sxXSwgcHJvZmlsZWluZm8tPnBlZXJtYWNbMl0sCi0JCQkgcHJvZmlsZWluZm8tPnBlZXJtYWNbM10sIHByb2ZpbGVpbmZvLT5wZWVybWFjWzRdLAotCQkJIHByb2ZpbGVpbmZvLT5wZWVybWFjWzVdKTsKLQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwocGVlcm1hY2FkZHIsIHByb2ZpbGVpbmZvLT5wZWVybWFjKSkgewotCQkJbWF0Y2hfcmVzdWx0ID0gMTsKLQkJCURCR184NzIzQSgiWyVzXSBNYXRjaCFcbiIsIF9fZnVuY19fKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIG1hdGNoX3Jlc3VsdDsKLX0KLQotdm9pZCBpc3N1ZV9wcm9iZXJzcDIzYV9wMnAyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqZGEpCi17Ci0Jc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWU7Ci0Jc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7Ci0JdW5zaWduZWQgY2hhciAqcGZyYW1lOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7Ci0JdW5zaWduZWQgY2hhciAqbWFjOwotCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXUxNiBiZWFjb25faW50ZXJ2YWwgPSAxMDA7Ci0JdTE2IGNhcEluZm8gPSAwOwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQl1OCB3cHNpZVsyNTVdID0geyAweDAwIH07Ci0JdTMyIHdwc2llbGVuID0gMCwgcDJwaWVsZW4gPSAwOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JdTMyIHdmZGllbGVuID0gMDsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCXN0cnVjdCBjZmc4MDIxMV93aWZpZGlyZWN0X2luZm8gKnBjZmc4MDIxMV93ZGluZm8gPQotCQkmcGFkYXB0ZXItPmNmZzgwMjExX3dkaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWVfY2ggPQotCQkmcGNmZzgwMjExX3dkaW5mby0+cmVtYWluX29uX2NoX2NoYW5uZWw7Ci0JdTggbGlzdGVuX2NoYW5uZWwgPQotCQkodTgpaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGllZWVfY2gtPmNlbnRlcl9mcmVxKTsKLQotCS8qIERCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsgKi8KLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCXsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHVwZGF0ZSBhdHRyaWJ1dGUgKi8KLQlwYXR0cmliID0gJnBtZ250ZnJhbWUtPmF0dHJpYjsKLQl1cGRhdGVfbWdudGZyYW1lX2F0dHJpYjIzYShwYWRhcHRlciwgcGF0dHJpYik7Ci0KLQltZW1zZXQocG1nbnRmcmFtZS0+YnVmX2FkZHIsIDAsIFdMQU5IRFJfT0ZGU0VUICsgVFhERVNDX09GRlNFVCk7Ci0KLQlwZnJhbWUgPSAodTggKikocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKLQlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKLQotCW1hYyA9IG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KTsKLQotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7Ci0JZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgZGEpOwotCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIG1hYyk7Ci0KLQkvKglVc2UgdGhlIGRldmljZSBhZGRyZXNzIGZvciBCU1NJRCBmaWVsZC4gKi8KLQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBtYWMpOwotCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOwotCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShmY3RybCwgV0lGSV9QUk9CRVJTUCk7Ci0KLQlwYXR0cmliLT5oZHJsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBhdHRyaWItPnBrdGxlbiA9IHBhdHRyaWItPmhkcmxlbjsKLQlwZnJhbWUgKz0gcGF0dHJpYi0+aGRybGVuOwotCi0JLyogdGltZXN0YW1wIHdpbGwgYmUgaW5zZXJ0ZWQgYnkgaGFyZHdhcmUgKi8KLQlwZnJhbWUgKz0gODsKLQlwYXR0cmliLT5wa3RsZW4gKz0gODsKLQotCS8qICBiZWFjb24gaW50ZXJ2YWw6IDIgYnl0ZXMgKi8KLQltZW1jcHkocGZyYW1lLCAodW5zaWduZWQgY2hhciAqKSAmYmVhY29uX2ludGVydmFsLCAyKTsKLQlwZnJhbWUgKz0gMjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gMjsKLQotCS8qCWNhcGFiaWxpdHkgaW5mbzogMiBieXRlcyAqLwotCS8qCUVTUyBhbmQgSUJTUyBiaXRzIG11c3QgYmUgMCAoZGVmaW5lZCBpbiB0aGUgMy4xLjIuMS4xIG9mCi0JCVdpRmkgRGlyZWN0IFNwZWMpICovCi0JY2FwSW5mbyB8PSBjYXBfU2hvcnRQcmVtYmxlOwotCWNhcEluZm8gfD0gY2FwX1Nob3J0U2xvdDsKLQotCW1lbWNweShwZnJhbWUsICh1bnNpZ25lZCBjaGFyICopICZjYXBJbmZvLCAyKTsKLQlwZnJhbWUgKz0gMjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gMjsKLQotCS8qICBTU0lEICovCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TU0lEX0lFXywgNywgcHdkaW5mby0+cDJwX3dpbGRjYXJkX3NzaWQsCi0JCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQkvKiAgc3VwcG9ydGVkIHJhdGVzLi4uICovCi0JLyoJVXNlIHRoZSBPRkRNIHJhdGUgaW4gdGhlIFAyUCBwcm9iZSByZXNwb25zZSBmcmFtZS4KLQkJKDYoQiksIDkoQiksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQpICovCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TVVBQT1JURURSQVRFU19JRV8sIDgsCi0JCQkgICAgICAgcHdkaW5mby0+c3VwcG9ydF9yYXRlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCS8qICBEUyBwYXJhbWV0ZXIgc2V0ICovCi0JaWYgKHdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpLT5wMnBfZW5hYmxlZCAmJgotCSAgICBsaXN0ZW5fY2hhbm5lbCAhPSAwKSB7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfRFNTRVRfSUVfLCAxLCAodW5zaWduZWQgY2hhciAqKQotCQkJCSAgICAgICAmbGlzdGVuX2NoYW5uZWwsICZwYXR0cmliLT5wa3RsZW4pOwotCX0gZWxzZSB7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfRFNTRVRfSUVfLCAxLCAodW5zaWduZWQgY2hhciAqKQotCQkJCSAgICAgICAmcHdkaW5mby0+bGlzdGVuX2NoYW5uZWwsCi0JCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwotCX0KLQotCWlmICh3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQpIHsKLQkJaWYgKHBtbG1lcHJpdi0+d3BzX3Byb2JlX3Jlc3BfaWUgJiYKLQkJICAgIHBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWUpIHsKLQkJCS8qIFdQUyBJRSAqLwotCQkJbWVtY3B5KHBmcmFtZSwgcG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZSwKLQkJCSAgICAgICBwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llX2xlbik7Ci0JCQlwYXR0cmliLT5wa3RsZW4gKz0gcG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZV9sZW47Ci0JCQlwZnJhbWUgKz0gcG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZV9sZW47Ci0KLQkJCS8qIFAyUCBJRSAqLwotCQkJbWVtY3B5KHBmcmFtZSwgcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVzcF9pZSwKLQkJCSAgICAgICBwbWxtZXByaXYtPnAycF9wcm9iZV9yZXNwX2llX2xlbik7Ci0JCQlwYXR0cmliLT5wa3RsZW4gKz0gcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVzcF9pZV9sZW47Ci0JCQlwZnJhbWUgKz0gcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVzcF9pZV9sZW47Ci0JCX0KLQl9IGVsc2UgewotCi0JCS8qCVRvZG86IFdQUyBJRSAqLwotCQkvKglOb3RlZCBieSBBbGJlcnQgMjAxMDA5MDcgKi8KLQkJLyoJQWNjb3JkaW5nIHRvIHRoZSBXUFMgc3BlY2lmaWNhdGlvbiwgYWxsIHRoZSBXUFMKLQkJCWF0dHJpYnV0ZSBpcyBwcmVzZW50ZWQgYnkgQmlnIEVuZGlhbi4gKi8KLQotCQl3cHNpZWxlbiA9IDA7Ci0JCS8qCVdQUyBPVUkgKi8KLQkJKih1MzIqKSAod3BzaWUpID0gY3B1X3RvX2JlMzIoV1BTT1VJKTsKLQkJd3BzaWVsZW4gKz0gNDsKLQotCQkvKglXUFMgdmVyc2lvbiAqLwotCQkvKglUeXBlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX1ZFUjEpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDEpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQl3cHNpZVt3cHNpZWxlbisrXSA9IFdQU19WRVJTSU9OXzE7CS8qCVZlcnNpb24gMS4wICovCi0KLQkJLyoJV2lGaSBTaW1wbGUgQ29uZmlnIFN0YXRlICovCi0JCS8qCVR5cGU6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0KLQkJCWNwdV90b19iZTE2KFdQU19BVFRSX1NJTVBMRV9DT05GX1NUQVRFKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDAxKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJd3BzaWVbd3BzaWVsZW4rK10gPSBXUFNfV1NDX1NUQVRFX05PVF9DT05GSUc7Ci0KLQkJLyoJUmVzcG9uc2UgVHlwZSAqLwotCQkvKglUeXBlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX1JFU1BfVFlQRSk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KDB4MDAwMSk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCXdwc2llW3dwc2llbGVuKytdID0gV1BTX1JFU1BPTlNFX1RZUEVfODAyMVg7Ci0KLQkJLyoJVVVJRC1FICovCi0JCS8qCVR5cGU6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfVVVJRF9FKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDEwKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJbWVtY3B5KHdwc2llICsgd3BzaWVsZW4sIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgRVRIX0FMRU4pOwotCQl3cHNpZWxlbiArPSAweDEwOwotCi0JCS8qCU1hbnVmYWN0dXJlciAqLwotCQkvKglUeXBlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KFdQU19BVFRSX01BTlVGQUNUVVJFUik7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KDB4MDAwNyk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCW1lbWNweSh3cHNpZSArIHdwc2llbGVuLCAiUmVhbHRlayIsIDcpOwotCQl3cHNpZWxlbiArPSA3OwotCi0JCS8qCU1vZGVsIE5hbWUgKi8KLQkJLyoJVHlwZTogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9NT0RFTF9OQU1FKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDA2KTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJbWVtY3B5KHdwc2llICsgd3BzaWVsZW4sICI4MTkyQ1UiLCA2KTsKLQkJd3BzaWVsZW4gKz0gNjsKLQotCQkvKglNb2RlbCBOdW1iZXIgKi8KLQkJLyoJVHlwZTogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9NT0RFTF9OVU1CRVIpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDEpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQl3cHNpZVsgd3BzaWVsZW4rKyBdID0gMHgzMTsJCS8qCWNoYXJhY3RlciAxICovCi0KLQkJLyoJU2VyaWFsIE51bWJlciAqLwotCQkvKglUeXBlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQljcHVfdG9fYmUxNihXUFNfQVRUUl9TRVJJQUxfTlVNQkVSKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoRVRIX0FMRU4pOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQltZW1jcHkod3BzaWUgKyB3cHNpZWxlbiwgIjEyMzQ1NiIsIEVUSF9BTEVOKTsKLQkJd3BzaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkJLyoJUHJpbWFyeSBEZXZpY2UgVHlwZSAqLwotCQkvKglUeXBlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQljcHVfdG9fYmUxNihXUFNfQVRUUl9QUklNQVJZX0RFVl9UWVBFKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDA4KTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJLyoJQ2F0ZWdvcnkgSUQgKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPQotCQkJY3B1X3RvX2JlMTYoV1BTX1BEVF9DSURfTVVMSVRfTUVESUEpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCU9VSSAqLwotCQkqKHUzMiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTMyKFdQU09VSSk7Ci0JCXdwc2llbGVuICs9IDQ7Ci0KLQkJLyoJU3ViIENhdGVnb3J5IElEICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0KLQkJCWNwdV90b19iZTE2KFdQU19QRFRfU0NJRF9NRURJQV9TRVJWRVIpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCURldmljZSBOYW1lICovCi0JCS8qCVR5cGU6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfREVWSUNFX05BTUUpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPQotCQkJY3B1X3RvX2JlMTYocHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJaWYgKHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbikgewotCQkJbWVtY3B5KHdwc2llICsgd3BzaWVsZW4sIHB3ZGluZm8tPmRldmljZV9uYW1lLAotCQkJICAgICAgIHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JCQl3cHNpZWxlbiArPSBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW47Ci0JCX0KLQotCQkvKglDb25maWcgTWV0aG9kICovCi0JCS8qCVR5cGU6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfQ09ORl9NRVRIT0QpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDIpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQljcHVfdG9fYmUxNihwd2RpbmZvLT5zdXBwb3J0ZWRfd3BzX2NtKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHdwc2llbGVuLAotCQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKXdwc2llLAotCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCQlwMnBpZWxlbiA9IGJ1aWxkX3Byb2JlX3Jlc3BfcDJwX2llMjNhKHB3ZGluZm8sIHBmcmFtZSk7Ci0JCXBmcmFtZSArPSBwMnBpZWxlbjsKLQkJcGF0dHJpYi0+cGt0bGVuICs9IHAycGllbGVuOwotCX0KLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKHB3ZGluZm8tPndmZF9pbmZvLT53ZmRfZW5hYmxlKSB7Ci0JCXdmZGllbGVuID0gYnVpbGRfcHJvYmVfcmVzcF93ZmRfaWUocHdkaW5mbywgcGZyYW1lLCAwKTsKLQkJcGZyYW1lICs9IHdmZGllbGVuOwotCQlwYXR0cmliLT5wa3RsZW4gKz0gd2ZkaWVsZW47Ci0JfSBlbHNlIGlmIChwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llICYmCi0JCSBwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llX2xlbiA+IDApIHsKLQkJLyogV0ZEIElFICovCi0JCW1lbWNweShwZnJhbWUsIHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWUsCi0JCSAgICAgICBwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llX2xlbik7Ci0JCXBhdHRyaWItPnBrdGxlbiArPSBwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llX2xlbjsKLQkJcGZyYW1lICs9IHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWVfbGVuOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JcGF0dHJpYi0+bGFzdF90eGNtZHN6ID0gcGF0dHJpYi0+cGt0bGVuOwotCi0JZHVtcF9tZ250ZnJhbWUyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IF9pc3N1ZTIzYV9wcm9iZXJlcV9wMnAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmRhLAotCQkJCSAgaW50IHdhaXRfYWNrKQotewotCWludCByZXQgPSBfRkFJTDsKLQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZTsKLQlzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYjsKLQl1bnNpZ25lZCBjaGFyICpwZnJhbWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwotCXVuc2lnbmVkIHNob3J0ICpmY3RybDsKLQl1bnNpZ25lZCBjaGFyICptYWM7Ci0Jc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwotCXU4CWJjX2FkZHJbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvCSpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JdTggd3BzaWVbMjU1XSA9IHsweDAwfSwgcDJwaWVbMjU1XSA9IHsweDAwfTsKLQl1MTYgd3BzaWVsZW4gPSAwLCBwMnBpZWxlbiA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1MzIgd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0Jc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCQlnb3RvIGV4aXQ7Ci0KLQkvKiB1cGRhdGUgYXR0cmlidXRlICovCi0JcGF0dHJpYiA9ICZwbWdudGZyYW1lLT5hdHRyaWI7Ci0JdXBkYXRlX21nbnRmcmFtZV9hdHRyaWIyM2EocGFkYXB0ZXIsIHBhdHRyaWIpOwotCi0JbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwotCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQltYWMgPSBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdik7Ci0KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOwotCi0JaWYgKGRhKSB7Ci0JCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIGRhKTsKLQkJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMywgZGEpOwotCX0gZWxzZSB7Ci0JCWlmICgocHdkaW5mby0+cDJwX2luZm8uc2Nhbl9vcF9jaF9vbmx5KSB8fAotCQkgICAgKHB3ZGluZm8tPnJ4X2ludml0ZXJlcV9pbmZvLnNjYW5fb3BfY2hfb25seSkpIHsKLQkJCS8qCVRoaXMgdHdvIGZsYWdzIHdpbGwgYmUgc2V0IHdoZW4gdGhpcyBpcwotCQkJCW9ubHkgdGhlIFAyUCBjbGllbnQgbW9kZS4gKi8KLQkJCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsCi0JCQkJCXB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyKTsKLQkJCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsCi0JCQkJCXB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyKTsKLQkJfSBlbHNlIHsKLQkJCS8qCWJyb2FkY2FzdCBwcm9iZSByZXF1ZXN0IGZyYW1lICovCi0JCQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBiY19hZGRyKTsKLQkJCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGJjX2FkZHIpOwotCQl9Ci0JfQotCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIG1hYyk7Ci0KLQlTZXRTZXFOdW0ocHdsYW5oZHIsIHBtbG1lZXh0LT5tZ250X3NlcSk7Ci0JcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9QUk9CRVJFUSk7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0JcGF0dHJpYi0+cGt0bGVuID0gc2l6ZW9mIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1RYX1BST1ZJU0lPTl9ESVNfUkVRKSkgewotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1NTSURfSUVfLAotCQkJCSAgICBwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby5zc2lkLnNzaWRfbGVuLAotCQkJCSAgICBwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby5zc2lkLnNzaWQsCi0JCQkJICAgICZwYXR0cmliLT5wa3RsZW4pOwotCX0gZWxzZSB7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfU1NJRF9JRV8sCi0JCQkJICAgICAgIFAyUF9XSUxEQ0FSRF9TU0lEX0xFTiwKLQkJCQkgICAgICAgcHdkaW5mby0+cDJwX3dpbGRjYXJkX3NzaWQsCi0JCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwotCX0KLQkvKglVc2UgdGhlIE9GRE0gcmF0ZSBpbiB0aGUgUDJQIHByb2JlIHJlcXVlc3QgZnJhbWUuCi0JCSg2KEIpLCA5KEIpLCAxMihCKSwgMjQoQiksIDM2LCA0OCwgNTQpICovCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TVVBQT1JURURSQVRFU19JRV8sIDgsCi0JCQkgICAgICAgcHdkaW5mby0+c3VwcG9ydF9yYXRlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCWlmICh3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQpIHsKLQkJaWYgKHBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSAmJgotCQkgICAgcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVxX2llKSB7Ci0JCQkvKiBXUFMgSUUgKi8KLQkJCW1lbWNweShwZnJhbWUsIHBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSwKLQkJCSAgICAgICBwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWVfbGVuKTsKLQkJCXBhdHRyaWItPnBrdGxlbiArPSBwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWVfbGVuOwotCQkJcGZyYW1lICs9IHBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZV9sZW47Ci0KLQkJCS8qIFAyUCBJRSAqLwotCQkJbWVtY3B5KHBmcmFtZSwgcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVxX2llLAotCQkJICAgICAgIHBtbG1lcHJpdi0+cDJwX3Byb2JlX3JlcV9pZV9sZW4pOwotCQkJcGF0dHJpYi0+cGt0bGVuICs9IHBtbG1lcHJpdi0+cDJwX3Byb2JlX3JlcV9pZV9sZW47Ci0JCQlwZnJhbWUgKz0gcG1sbWVwcml2LT5wMnBfcHJvYmVfcmVxX2llX2xlbjsKLQkJfQotCX0gZWxzZSB7Ci0KLQkJLyoJV1BTIElFICovCi0JCS8qCU5vdGVkIGJ5IEFsYmVydCAyMDExMDIyMSAqLwotCQkvKglBY2NvcmRpbmcgdG8gdGhlIFdQUyBzcGVjaWZpY2F0aW9uLCBhbGwgdGhlIFdQUwotCQkJYXR0cmlidXRlIGlzIHByZXNlbnRlZCBieSBCaWcgRW5kaWFuLiAqLwotCi0JCXdwc2llbGVuID0gMDsKLQkJLyoJV1BTIE9VSSAqLwotCQkqKHUzMiopICh3cHNpZSkgPSBjcHVfdG9fYmUzMihXUFNPVUkpOwotCQl3cHNpZWxlbiArPSA0OwotCi0JCS8qCVdQUyB2ZXJzaW9uICovCi0JCS8qCVR5cGU6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfVkVSMSk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KDB4MDAwMSk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCXdwc2llW3dwc2llbGVuKytdID0gV1BTX1ZFUlNJT05fMTsJLyoJVmVyc2lvbiAxLjAgKi8KLQotCQlpZiAocG1sbWVwcml2LT53cHNfcHJvYmVfcmVxX2llID09IE5VTEwpIHsKLQkJCS8qCVVVSUQtRSAqLwotCQkJLyoJVHlwZTogKi8KLQkJCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0KLQkJCQljcHVfdG9fYmUxNihXUFNfQVRUUl9VVUlEX0UpOwotCQkJd3BzaWVsZW4gKz0gMjsKLQotCQkJLyoJTGVuZ3RoOiAqLwotCQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMTApOwotCQkJd3BzaWVsZW4gKz0gMjsKLQotCQkJLyoJVmFsdWU6ICovCi0JCQltZW1jcHkod3BzaWUgKyB3cHNpZWxlbiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLAotCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCXdwc2llbGVuICs9IDB4MTA7Ci0KLQkJCS8qCUNvbmZpZyBNZXRob2QgKi8KLQkJCS8qCVR5cGU6ICovCi0JCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQkJY3B1X3RvX2JlMTYoV1BTX0FUVFJfQ09ORl9NRVRIT0QpOwotCQkJd3BzaWVsZW4gKz0gMjsKLQotCQkJLyoJTGVuZ3RoOiAqLwotCQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDIpOwotCQkJd3BzaWVsZW4gKz0gMjsKLQotCQkJLyoJVmFsdWU6ICovCi0JCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQkJY3B1X3RvX2JlMTYocHdkaW5mby0+c3VwcG9ydGVkX3dwc19jbSk7Ci0JCQl3cHNpZWxlbiArPSAyOwotCQl9Ci0KLQkJLyoJRGV2aWNlIE5hbWUgKi8KLQkJLyoJVHlwZTogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQljcHVfdG9fYmUxNihwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4pOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQltZW1jcHkod3BzaWUgKyB3cHNpZWxlbiwgcHdkaW5mby0+ZGV2aWNlX25hbWUsCi0JCSAgICAgICBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4pOwotCQl3cHNpZWxlbiArPSBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW47Ci0KLQkJLyoJUHJpbWFyeSBEZXZpY2UgVHlwZSAqLwotCQkvKglUeXBlOiAqLwotCQkqKHUxNiopICh3cHNpZSArIHdwc2llbGVuKSA9Ci0JCQljcHVfdG9fYmUxNihXUFNfQVRUUl9QUklNQVJZX0RFVl9UWVBFKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglMZW5ndGg6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoMHgwMDA4KTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQkvKglWYWx1ZTogKi8KLQkJLyoJQ2F0ZWdvcnkgSUQgKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfUERUX0NJRF9SVEtfV0lESSk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJT1VJICovCi0JCSoodTMyKikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMzIoV1BTT1VJKTsKLQkJd3BzaWVsZW4gKz0gNDsKLQotCQkvKglTdWIgQ2F0ZWdvcnkgSUQgKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfUERUX1NDSURfUlRLX0RNUCk7Ci0JCXdwc2llbGVuICs9IDI7Ci0KLQkJLyoJRGV2aWNlIFBhc3N3b3JkIElEICovCi0JCS8qCVR5cGU6ICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfREVWSUNFX1BXSUQpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDIpOwotCQl3cHNpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQkvKglSZWdpc3RyYXItc3BlY2lmaWVkICovCi0JCSoodTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0KLQkJCWNwdV90b19iZTE2KFdQU19EUElEX1JFR0lTVFJBUl9TUEVDKTsKLQkJd3BzaWVsZW4gKz0gMjsKLQotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHdwc2llbGVuLAotCQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKXdwc2llLAotCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCQkvKglQMlAgT1VJICovCi0JCXAycGllbGVuID0gMDsKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDUwOwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NkY7Ci0JCXAycGllW3AycGllbGVuKytdID0gMHg5QTsKLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDA5OwkvKglXRkEgUDJQIHYxLjAgKi8KLQotCQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwMjIxICovCi0JCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZSBwcm9iZSByZXF1ZXN0Ci0JCQlmcmFtZSBzaG91bGQgY29udGFpbiA1IFAyUCBhdHRyaWJ1dGVzICovCi0JCS8qCTEuIFAyUCBDYXBhYmlsaXR5ICovCi0JCS8qCTIuIFAyUCBEZXZpY2UgSUQgaWYgdGhpcyBwcm9iZSByZXF1ZXN0IHdhbnRzIHRvCi0JCQlmaW5kIHRoZSBzcGVjaWZpYyBQMlAgZGV2aWNlICovCi0JCS8qCTMuIExpc3RlbiBDaGFubmVsICovCi0JCS8qCTQuIEV4dGVuZGVkIExpc3RlbiBUaW1pbmcgKi8KLQkJLyoJNS4gT3BlcmF0aW5nIENoYW5uZWwgaWYgdGhpcyBXaUZpIGlzIHdvcmtpbmcgYXMKLQkJCXRoZSBncm91cCBvd25lciBub3cgKi8KLQotCQkvKglQMlAgQ2FwYWJpbGl0eSAqLwotCQkvKglUeXBlOiAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0NBUEFCSUxJVFk7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwMik7Ci0JCXAycGllbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCS8qCURldmljZSBDYXBhYmlsaXR5IEJpdG1hcCwgMSBieXRlICovCi0JCXAycGllW3AycGllbGVuKytdID0gRE1QX1AyUF9ERVZDQVBfU1VQUE9SVDsKLQotCQkvKglHcm91cCBDYXBhYmlsaXR5IEJpdG1hcCwgMSBieXRlICovCi0JCWlmIChwd2RpbmZvLT5wZXJzaXN0ZW50X3N1cHBvcnRlZCkKLQkJCXAycGllW3AycGllbGVuKytdID0gUDJQX0dSUENBUF9QRVJTSVNURU5UX0dST1VQIHwKLQkJCQlETVBfUDJQX0dSUENBUF9TVVBQT1JUOwotCQllbHNlCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IERNUF9QMlBfR1JQQ0FQX1NVUFBPUlQ7Ci0KLQkJLyoJTGlzdGVuIENoYW5uZWwgKi8KLQkJLyoJVHlwZTogKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9MSVNURU5fQ0g7Ci0KLQkJLyoJTGVuZ3RoOiAqLwotCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwNSk7Ci0JCXAycGllbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCS8qCUNvdW50cnkgU3RyaW5nICovCi0JCXAycGllW3AycGllbGVuKytdID0gJ1gnOwotCQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQotCQkvKiBUaGUgdGhpcmQgYnl0ZSBzaG91bGQgYmUgc2V0IHRvIDB4MDQuICovCi0JCS8qIERlc2NyaWJlZCBpbiB0aGUgIk9wZXJhdGluZyBDaGFubmVsIEF0dHJpYnV0ZSIgc2VjdGlvbi4gKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JCS8qCU9wZXJhdGluZyBDbGFzcyAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IDB4NTE7CS8qCUNvcHkgZnJvbSBTRDcgKi8KLQotCQkvKglDaGFubmVsIE51bWJlciAqLwotCQkvKglsaXN0ZW4gY2hhbm5lbCAqLwotCQlwMnBpZVtwMnBpZWxlbisrXSA9IHB3ZGluZm8tPmxpc3Rlbl9jaGFubmVsOwotCi0JCS8qCUV4dGVuZGVkIExpc3RlbiBUaW1pbmcgKi8KLQkJLyoJVHlwZTogKi8KLQkJcDJwaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9FWF9MSVNURU5fVElNSU5HOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDQpOwotCQlwMnBpZWxlbiArPSAyOwotCi0JCS8qCVZhbHVlOiAqLwotCQkvKglBdmFpbGFiaWxpdHkgUGVyaW9kICovCi0JCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHhGRkZGKTsKLQkJcDJwaWVsZW4gKz0gMjsKLQotCQkvKglBdmFpbGFiaWxpdHkgSW50ZXJ2YWwgKi8KLQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweEZGRkYpOwotCQlwMnBpZWxlbiArPSAyOwotCi0JCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkgewotCQkJLyogT3BlcmF0aW5nIENoYW5uZWwgKGlmIHRoaXMgV2lGaSBpcyB3b3JraW5nIGFzCi0JCQkgICB0aGUgZ3JvdXAgb3duZXIgbm93KSAqLwotCQkJLyogVHlwZTogKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfT1BFUkFUSU5HX0NIOwotCi0JCQkvKglMZW5ndGg6ICovCi0JCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4MDAwNSk7Ci0JCQlwMnBpZWxlbiArPSAyOwotCi0JCQkvKglWYWx1ZTogKi8KLQkJCS8qCUNvdW50cnkgU3RyaW5nICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9ICdYJzsKLQkJCXAycGllW3AycGllbGVuKytdID0gJ1gnOwotCi0JCQkvKiBUaGUgdGhpcmQgYnl0ZSBzaG91bGQgYmUgc2V0IHRvIDB4MDQuICovCi0JCQkvKiBEZXNjcmliZWQgaW4gdGhlICJPcGVyYXRpbmcgQ2hhbm5lbCBBdHRyaWJ1dGUiCi0JCQkgICBzZWN0aW9uLiAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDA0OwotCi0JCQkvKglPcGVyYXRpbmcgQ2xhc3MgKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gMHg1MTsJLyoJQ29weSBmcm9tIFNENyAqLwotCi0JCQkvKglDaGFubmVsIE51bWJlciAqLwotCQkJLyoJb3BlcmF0aW5nIGNoYW5uZWwgbnVtYmVyICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IHB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsOwotCQl9Ci0KLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCBwMnBpZWxlbiwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKilwMnBpZSwKLQkJCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQkJaWYgKHBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSkgewotCQkJLyogV1BTIElFICovCi0JCQltZW1jcHkocGZyYW1lLCBwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWUsCi0JCQkgICAgICAgcG1sbWVwcml2LT53cHNfcHJvYmVfcmVxX2llX2xlbik7Ci0JCQlwYXR0cmliLT5wa3RsZW4gKz0gcG1sbWVwcml2LT53cHNfcHJvYmVfcmVxX2llX2xlbjsKLQkJCXBmcmFtZSArPSBwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWVfbGVuOwotCQl9Ci0JfQotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlpZiAocHdkaW5mby0+d2ZkX2luZm8tPndmZF9lbmFibGUpIHsKLQkJd2ZkaWVsZW4gPSBidWlsZF9wcm9iZV9yZXFfd2ZkX2llKHB3ZGluZm8sIHBmcmFtZSk7Ci0JCXBmcmFtZSArPSB3ZmRpZWxlbjsKLQkJcGF0dHJpYi0+cGt0bGVuICs9IHdmZGllbGVuOwotCX0gZWxzZSBpZiAocG1sbWVwcml2LT53ZmRfcHJvYmVfcmVxX2llICYmCi0JCSAgIHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZV9sZW4+MCkgewotCQkvKiBXRkQgSUUgKi8KLQkJbWVtY3B5KHBmcmFtZSwgcG1sbWVwcml2LT53ZmRfcHJvYmVfcmVxX2llLAotCQkgICAgICAgcG1sbWVwcml2LT53ZmRfcHJvYmVfcmVxX2llX2xlbik7Ci0JCXBhdHRyaWItPnBrdGxlbiArPSBwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWVfbGVuOwotCQlwZnJhbWUgKz0gcG1sbWVwcml2LT53ZmRfcHJvYmVfcmVxX2llX2xlbjsKLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKLQotCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2luZm9fLAotCQkgKCJpc3N1aW5nIHByb2JlX3JlcSwgdHhfbGVuID0lZFxuIiwgcGF0dHJpYi0+bGFzdF90eGNtZHN6KSk7Ci0KLQlpZiAod2FpdF9hY2spIHsKLQkJcmV0ID0gZHVtcF9tZ250ZnJhbWUyM2FfYW5kX3dhaXRfYWNrMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLQl9IGVsc2UgewotCQlkdW1wX21nbnRmcmFtZTIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7Ci0JCXJldCA9IF9TVUNDRVNTOwotCX0KLQotZXhpdDoKLQlyZXR1cm4gcmV0OwotfQotCi1pbmxpbmUgdm9pZCBpc3N1ZTIzYV9wcm9iZXJlcV9wMnAoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqZGEpCi17Ci0JX2lzc3VlMjNhX3Byb2JlcmVxX3AycChhZGFwdGVyLCBkYSwgZmFsc2UpOwotfQotCi1pbnQgaXNzdWUyM2FfcHJvYmVyZXFfcDJwX2V4KHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKmRhLAotCQkJICAgICBpbnQgdHJ5X2NudCwgaW50IHdhaXRfbXMpCi17Ci0JaW50IHJldDsKLQlpbnQgaSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7Ci0KLQlkbyB7Ci0JCXJldCA9IF9pc3N1ZTIzYV9wcm9iZXJlcV9wMnAoYWRhcHRlciwgZGEsCi0JCQkJCSAgICAgd2FpdF9tcyA+IDAgPyB0cnVlIDogZmFsc2UpOwotCi0JCWkrKzsKLQotCQlpZiAoYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgfHwgYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCkKLQkJCWJyZWFrOwotCi0JCWlmIChpIDwgdHJ5X2NudCAmJiB3YWl0X21zID4gMCAmJiByZXQgPT0gX0ZBSUwpCi0JCQltc2xlZXAod2FpdF9tcyk7Ci0KLQl9IHdoaWxlICgoaSA8IHRyeV9jbnQpICYmICgocmV0ID09IF9GQUlMKSB8fCAod2FpdF9tcyA9PSAwKSkpOwotCi0JaWYgKHJldCAhPSBfRkFJTCkgewotCQlyZXQgPSBfU1VDQ0VTUzsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICh0cnlfY250ICYmIHdhaXRfbXMpIHsKLQkJaWYgKGRhKQotCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHRvICJNQUNfRk1UIiwgY2g6JXUlcywgJWQvJWQgIgotCQkJCSAgImluICV1IG1zXG4iLCBGVU5DX0FEUFRfQVJHKGFkYXB0ZXIpLAotCQkJCSAgTUFDX0FSRyhkYSksIHJ0d19nZXRfb3Blcl9jaDIzYShhZGFwdGVyKSwKLQkJCQkgIHJldCA9PSBfU1VDQ0VTUz8iLCBhY2tlZCI6IiIsIGksIHRyeV9jbnQsCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydCkpOwotCQllbHNlCi0JCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCIsIGNoOiV1JXMsICVkLyVkIGluICV1IG1zXG4iLAotCQkJCSAgRlVOQ19BRFBUX0FSRyhhZGFwdGVyKSwKLQkJCQkgIHJ0d19nZXRfb3Blcl9jaDIzYShhZGFwdGVyKSwKLQkJCQkgIHJldCA9PSBfU1VDQ0VTUz8iLCBhY2tlZCI6IiIsIGksIHRyeV9jbnQsCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydCkpOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLXN0YXRpYyBzMzIgcnR3X2FjdGlvbl9wdWJsaWNfZGVjYWNoZShzdHJ1Y3QgcmVjdl9mcmFtZSAqcmVjdl9mcmFtZSwgczMyIHRva2VuKQorc3RhdGljIGludCBydHdfYWN0aW9uX3B1YmxpY19kZWNhY2hlKHN0cnVjdCByZWN2X2ZyYW1lICpyZWN2X2ZyYW1lLCBzMzIgdG9rZW4pCiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyID0gcmVjdl9mcmFtZS0+YWRhcHRlcjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqbWxtZWV4dCA9ICZhZGFwdGVyLT5tbG1lZXh0cHJpdjsKQEAgLTQ1MDQsMTcgKzIxMDUsMTcgQEAKIAkJaWYgKHRva2VuID49IDApIHsKIAkJCWlmICgoc2VxX2N0cmwgPT0gbWxtZWV4dC0+YWN0aW9uX3B1YmxpY19yeHNlcSkgJiYKIAkJCSAgICAodG9rZW4gPT0gbWxtZWV4dC0+YWN0aW9uX3B1YmxpY19kaWFsb2dfdG9rZW4pKSB7Ci0JCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHNlcV9jdHJsID0gMHgleCwgIgotCQkJCQkgICJyeHNlcSA9IDB4JXgsIHRva2VuOiVkXG4iLAotCQkJCQkgIEZVTkNfQURQVF9BUkcoYWRhcHRlciksIHNlcV9jdHJsLAorCQkJCURCR184NzIzQSgiJXMoJXMpOiBzZXFfY3RybCA9IDB4JXgsICIKKwkJCQkJICAicnhzZXEgPSAweCV4LCB0b2tlbjolZFxuIiwgX19mdW5jX18sCisJCQkJCSAgYWRhcHRlci0+cG5ldGRldi0+bmFtZSwgc2VxX2N0cmwsCiAJCQkJCSAgbWxtZWV4dC0+YWN0aW9uX3B1YmxpY19yeHNlcSwgdG9rZW4pOwogCQkJCXJldHVybiBfRkFJTDsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChzZXFfY3RybCA9PSBtbG1lZXh0LT5hY3Rpb25fcHVibGljX3J4c2VxKSB7Ci0JCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHNlcV9jdHJsID0gMHgleCwgIgotCQkJCQkgICJyeHNlcSA9IDB4JXhcbiIsCi0JCQkJCSAgRlVOQ19BRFBUX0FSRyhhZGFwdGVyKSwgc2VxX2N0cmwsCisJCQkJREJHXzg3MjNBKCIlcyglcyk6IHNlcV9jdHJsID0gMHgleCwgIgorCQkJCQkgICJyeHNlcSA9IDB4JXhcbiIsIF9fZnVuY19fLAorCQkJCQkgIGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsIHNlcV9jdHJsLAogCQkJCQkgIG1sbWVleHQtPmFjdGlvbl9wdWJsaWNfcnhzZXEpOwogCQkJCXJldHVybiBfRkFJTDsKIAkJCX0KQEAgLTQ1MjksMjEgKzIxMzAsMTIgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgb25fYWN0aW9uX3B1YmxpYzIzYV9wMnAoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludCBvbl9hY3Rpb25fcHVibGljMjNhX3AycChzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7CiAJdTggKnBmcmFtZSA9IHNrYi0+ZGF0YTsKIAl1OCAqZnJhbWVfYm9keTsKIAl1OCBkaWFsb2dUb2tlbiA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHJlY3ZfZnJhbWUtPmFkYXB0ZXI7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JdWludCBsZW4gPSBza2ItPmxlbjsKLQl1OCAqcDJwX2llOwotCXUzMglwMnBfaWVsZW47Ci0Jc3RydWN0CXdpZmlkaXJlY3RfaW5mbwkqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCXU4CXJlc3VsdCA9IFAyUF9TVEFUVVNfU1VDQ0VTUzsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwogCiAJZnJhbWVfYm9keSA9ICh1bnNpZ25lZCBjaGFyICopCiAJCShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKQEAgLTQ1NTMsMzQ5ICsyMTQ1LDEwIEBACiAJaWYgKHJ0d19hY3Rpb25fcHVibGljX2RlY2FjaGUocHJlY3ZfZnJhbWUsIGRpYWxvZ1Rva2VuKSA9PSBfRkFJTCkKIAkJcmV0dXJuIF9GQUlMOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlkZWxfdGltZXJfc3luYygmcHdkaW5mby0+cmVzZXRfY2hfc2l0ZXN1cnZleSk7Ci0JaWYgKHdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpLT5wMnBfZW5hYmxlZCkgewotCQlydHdfY2ZnODAyMTFfcnhfcDJwX2FjdGlvbl9wdWJsaWMocGFkYXB0ZXIsIHBmcmFtZSwgbGVuKTsKLQl9IGVsc2UgewotCQkvKglEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBlbmFibGUgdGhlIFAyUCBmdW5jdGlvbi4gKi8KLQkJaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSB8fCBydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfSURMRSkpCi0JCQlyZXR1cm4gX1NVQ0NFU1M7Ci0KLQkJbGVuIC09IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQkJc3dpdGNoIChmcmFtZV9ib2R5WyA2IF0pLyogT1VJIFN1YnR5cGUgKi8KLQkJewotCQkJY2FzZSBQMlBfR09fTkVHT19SRVE6Ci0JCQkJREJHXzg3MjNBKCJbJXNdIEdvdCBHTyBOZWdvIFJlcSBGcmFtZVxuIiwgX19mdW5jX18pOwotCQkJCW1lbXNldCgmcHdkaW5mby0+Z3JvdXBpZF9pbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IGdyb3VwX2lkX2luZm8pKTsKLQotCQkJCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUlhfUFJPVklTSU9OX0RJU19SRVEpKQotCQkJCXsKLQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgcnR3X3AycF9wcmVfc3RhdGUocHdkaW5mbykpOwotCQkJCX0KLQotCQkJCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX0ZBSUwpKQotCQkJCXsKLQkJCQkJLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDUyNiAqLwotCQkJCQkvKglJbiB0aGlzIGNhc2UsIHRoaXMgbWVhbnMgdGhlIHByZXZpb3VzIG5lZ28gZmFpbCBkb2Vzbid0IGJlIHJlc2V0IHlldC4gKi8KLQkJCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyKTsKLQkJCQkJLyoJUmVzdG9yZSB0aGUgcHJldmlvdXMgcDJwIHN0YXRlICovCi0JCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIHJ0d19wMnBfcHJlX3N0YXRlKHB3ZGluZm8pKTsKLQkJCQkJREJHXzg3MjNBKCJbJXNdIFJlc3RvcmUgdGhlIHByZXZpb3VzIHAycCBzdGF0ZSB0byAlZFxuIiwgX19mdW5jX18sIHJ0d19wMnBfc3RhdGUocHdkaW5mbykpOwotCQkJCX0KLQotCQkJCS8qCUNvbW1lbnRlZCBieSBLdXJ0IDIwMTEwOTAyICovCi0JCQkJLyogQWRkIGlmIHN0YXRlbWVudCB0byBhdm9pZCByZWNlaXZpbmcgZHVwbGljYXRlIHByb3YgZGlzYyByZXEuIHN1Y2ggdGhhdCBwcmVfcDJwX3N0YXRlIHdvdWxkIGJlIGNvdmVyZWQuICovCi0JCQkJaWYgKCFydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX0lORykpCi0JCQkJCXJ0d19wMnBfc2V0X3ByZV9zdGF0ZShwd2RpbmZvLCBydHdfcDJwX3N0YXRlKHB3ZGluZm8pKTsKLQotCQkJCS8qCUNvbW1lbnRlZCBieSBLdXJ0IDIwMTIwMTEzICovCi0JCQkJLyoJR2V0IHBlZXJfZGV2X2FkZHIgaGVyZSBpZiBwZWVyIGRvZXNuJ3QgaXNzdWUgcHJvdl9kaXNjIGZyYW1lLiAqLwotCQkJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocHdkaW5mby0+cnhfcHJvdl9kaXNjX2luZm8ucGVlckRldkFkZHIpKQotCQkJCQlldGhlcl9hZGRyX2NvcHkocHdkaW5mby0+cnhfcHJvdl9kaXNjX2luZm8ucGVlckRldkFkZHIsIGhkci0+YWRkcjIpOwotCi0JCQkJcmVzdWx0ID0gcHJvY2Vzc19wMnBfZ3JvdXBfbmVnb3RhdGlvbl9yZXEyM2EocHdkaW5mbywgZnJhbWVfYm9keSwgbGVuKTsKLQkJCQlpc3N1ZV9wMnBfR09fcmVzcG9uc2UocGFkYXB0ZXIsIGhkci0+YWRkcjIsCi0JCQkJCQkgICAgICBmcmFtZV9ib2R5LCBsZW4sIHJlc3VsdCk7Ci0KLQkJCQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwNzE4ICovCi0JCQkJLyoJTm8gbWF0dGVyIG5lZ290aWF0aW5nIG9yIG5lZ290aWF0aW9uIGZhaWx1cmUsIHRoZSBkcml2ZXIgc2hvdWxkIHNldCB1cCB0aGUgcmVzdG9yZSBQMlAgc3RhdGUgdGltZXIuICovCi0JCQkJbW9kX3RpbWVyKCZwd2RpbmZvLT5yZXN0b3JlX3AycF9zdGF0ZV90aW1lciwKLQkJCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDAwKSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUDJQX0dPX05FR09fUkVTUDoKLQkJCQlEQkdfODcyM0EoIlslc10gR290IEdPIE5lZ28gUmVzcCBGcmFtZVxuIiwgX19mdW5jX18pOwotCi0JCQkJaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fSU5HKSkKLQkJCQl7Ci0JCQkJCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTA0MjUgKi8KLQkJCQkJLyoJVGhlIHJlc3RvcmUgdGltZXIgaXMgZW5hYmxlZCB3aGVuIGlzc3VpbmcgdGhlIG5lZ28gcmVxdWVzdCBmcmFtZSBvZiBydHdfcDJwX2Nvbm5lY3QgZnVuY3Rpb24uICovCi0JCQkJCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5yZXN0b3JlX3AycF9zdGF0ZV90aW1lcik7Ci0JCQkJCXB3ZGluZm8tPm5lZ29fcmVxX2luZm8uYmVuYWJsZSA9IGZhbHNlOwotCQkJCQlyZXN1bHQgPSBwcm9jZXNzX3AycF9ncm91cF9uZWdvdGF0aW9uX3Jlc3AyM2EocHdkaW5mbywgZnJhbWVfYm9keSwgbGVuKTsKLQkJCQkJaXNzdWVfcDJwX0dPX2NvbmZpcm0ocHdkaW5mby0+cGFkYXB0ZXIsCi0JCQkJCQkJICAgICBoZHItPmFkZHIyLAotCQkJCQkJCSAgICAgcmVzdWx0KTsKLQkJCQkJaWYgKHJlc3VsdCA9PSBQMlBfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQkJCWlmIChydHdfcDJwX3JvbGUocHdkaW5mbykgPT0KLQkJCQkJCSAgICBQMlBfUk9MRV9DTElFTlQpIHsKLQkJCQkJCQlwd2RpbmZvLT5wMnBfaW5mby5vcGVyYXRpb25fY2hbIDAgXSA9IHB3ZGluZm8tPnBlZXJfb3BlcmF0aW5nX2NoOwotCQkJCQkJCXB3ZGluZm8tPnAycF9pbmZvLnNjYW5fb3BfY2hfb25seSA9IDE7Ci0JCQkJCQkJbW9kX3RpbWVyKCZwd2RpbmZvLT5yZXNldF9jaF9zaXRlc3VydmV5MiwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUDJQX1JFU0VUX1NDQU5fQ0gpKTsKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCS8qCVJlc2V0IHRoZSBkaWFsb2cgdG9rZW4gZm9yIGdyb3VwIG5lZ290aWF0aW9uIGZyYW1lcy4gKi8KLQkJCQkJcHdkaW5mby0+bmVnb3RpYXRpb25fZGlhbG9nX3Rva2VuID0gMTsKLQotCQkJCQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19GQUlMKSkKLQkJCQkJewotCQkJCQkJbW9kX3RpbWVyKCZwd2RpbmZvLT5yZXN0b3JlX3AycF9zdGF0ZV90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJREJHXzg3MjNBKCJbJXNdIFNraXBwZWQgR08gTmVnbyBSZXNwIEZyYW1lIChwMnBfc3RhdGUgIT0gUDJQX1NUQVRFX0dPTkVHT19JTkcpXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJfQotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUDJQX0dPX05FR09fQ09ORjoKLQotCQkJCURCR184NzIzQSgiWyVzXSBHb3QgR08gTmVnbyBDb25maXJtIEZyYW1lXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcmVzdWx0ID0gcHJvY2Vzc19wMnBfZ3JvdXBfbmVnb3RhdGlvbl9jb25maXJtMjNhKHB3ZGluZm8sIGZyYW1lX2JvZHksIGxlbik7Ci0JCQkJaWYgKFAyUF9TVEFUVVNfU1VDQ0VTUyA9PSByZXN1bHQpCi0JCQkJewotCQkJCQlpZiAocnR3X3AycF9yb2xlKHB3ZGluZm8pID09IFAyUF9ST0xFX0NMSUVOVCkKLQkJCQkJewotCQkJCQkJcHdkaW5mby0+cDJwX2luZm8ub3BlcmF0aW9uX2NoWyAwIF0gPSBwd2RpbmZvLT5wZWVyX29wZXJhdGluZ19jaDsKLQkJCQkJCXB3ZGluZm8tPnAycF9pbmZvLnNjYW5fb3BfY2hfb25seSA9IDE7Ci0JCQkJCQltb2RfdGltZXIoJnB3ZGluZm8tPnJlc2V0X2NoX3NpdGVzdXJ2ZXkyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhQMlBfUkVTRVRfU0NBTl9DSCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIFAyUF9JTlZJVF9SRVE6Ci0JCQkJLyoJQWRkZWQgYnkgQWxiZXJ0IDIwMTAvMTAvMDUgKi8KLQkJCQkvKglSZWNlaXZlZCB0aGUgUDJQIEludml0ZSBSZXF1ZXN0IGZyYW1lLiAqLwotCi0JCQkJREJHXzg3MjNBKCJbJXNdIEdvdCBpbnZpdGUgcmVxdWVzdCBmcmFtZSFcbiIsIF9fZnVuY19fKTsKLQkJCQlpZiAoKHAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKGZyYW1lX2JvZHkgKyBfUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLCBsZW4gLSBfUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLCBOVUxMLCAmcDJwX2llbGVuKSkpCi0JCQkJewotCQkJCQkvKglQYXJzZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIFAyUCBJbnZpdGF0aW9uIFJlcXVlc3QgZnJhbWUuICovCi0JCQkJCS8qCUZvciBleGFtcGxlOiBUaGUgTUFDIGFkZHJlc3Mgb2Ygc2VuZGluZyB0aGlzIFAyUCBJbnZpdGF0aW9uIFJlcXVlc3QgZnJhbWUuICovCi0JCQkJCXUzMglhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQkJCQl1OAlzdGF0dXNfY29kZSA9IFAyUF9TVEFUVVNfRkFJTF9JTkZPX1VOQVZBSUxBQkxFOwotCQkJCQlzdHJ1Y3QgZ3JvdXBfaWRfaW5mbyBncm91cF9pZDsKLQkJCQkJdTgJaW52aXRhdGlvbl9mbGFnID0gMDsKLQotCQkJCQlydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX0lOVklUQVRJT05fRkxBR1MsICZpbnZpdGF0aW9uX2ZsYWcsICZhdHRyX2NvbnRlbnRsZW4pOwotCQkJCQlpZiAoYXR0cl9jb250ZW50bGVuKQotCQkJCQl7Ci0KLQkJCQkJCXJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfR1JPVVBfQlNTSUQsIHB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyLCAmYXR0cl9jb250ZW50bGVuKTsKLQkJCQkJCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMjA1MTAgKi8KLQkJCQkJCS8qCUNvcHkgdG8gdGhlIHB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyLiAqLwotCQkJCQkJLyoJU28gdGhhdCB0aGUgV0ZEIFVJIChvciBTaWdtYSkgY2FuIGdldCB0aGUgcGVlciBpbnRlcmZhY2UgYWRkcmVzcyBieSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQuICovCi0JCQkJCQkvKgkjPiBpd3ByaXYgd2xhbjAgcDJwX2dldCBwZWVyX2lmYSAqLwotCQkJCQkJLyoJQWZ0ZXIgaGF2aW5nIHRoZSBwZWVyIGludGVyZmFjZSBhZGRyZXNzLCB0aGUgc2lnbWEgY2FuIGZpbmQgdGhlIGNvcnJlY3QgY29uZiBmaWxlIGZvciB3cGFfc3VwcGxpY2FudC4gKi8KLQotCQkJCQkJaWYgKGF0dHJfY29udGVudGxlbikKLQkJCQkJCXsKLQkJCQkJCQlEQkdfODcyM0EoIlslc10gR08ncyBCU1NJRCA9ICUuMlggJS4yWCAlLjJYICUuMlggJS4yWCAlLjJYXG4iLCBfX2Z1bmNfXywKLQkJCQkJCQkJCXB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyWzBdLCBwd2RpbmZvLT5wMnBfcGVlcl9pbnRlcmZhY2VfYWRkclsxXSwKLQkJCQkJCQkJCXB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyWzJdLCBwd2RpbmZvLT5wMnBfcGVlcl9pbnRlcmZhY2VfYWRkclszXSwKLQkJCQkJCQkJCXB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyWzRdLCBwd2RpbmZvLT5wMnBfcGVlcl9pbnRlcmZhY2VfYWRkcls1XSk7Ci0JCQkJCQl9Ci0KLQkJCQkJCWlmIChpbnZpdGF0aW9uX2ZsYWcgJiBQMlBfSU5WSVRBVElPTl9GTEFHU19QRVJTSVNURU5UKQotCQkJCQkJewotCQkJCQkJCS8qCVJlLWludm9rZSB0aGUgcGVyc2lzdGVudCBncm91cC4gKi8KLQotCQkJCQkJCW1lbXNldCgmZ3JvdXBfaWQsIDB4MDAsIHNpemVvZihzdHJ1Y3QgZ3JvdXBfaWRfaW5mbykpOwotCQkJCQkJCXJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfR1JPVVBfSUQsICh1OCopICZncm91cF9pZCwgJmF0dHJfY29udGVudGxlbik7Ci0JCQkJCQkJaWYgKGF0dHJfY29udGVudGxlbikgewotCQkJCQkJCQlpZiAoZXRoZXJfYWRkcl9lcXVhbChncm91cF9pZC5nb19kZXZpY2VfYWRkciwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKSkgewotCQkJCQkJCQkJLyoJVGhlIHAycCBkZXZpY2Ugc2VuZGluZyB0aGlzIHAycCBpbnZpdGF0aW9uIHJlcXVlc3Qgd2FudHMgdGhpcyBXaS1GaSBkZXZpY2UgdG8gYmUgdGhlIHBlcnNpc3RlbnQgR08uICovCi0JCQkJCQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUkVDVl9JTlZJVEVfUkVRX0dPKTsKLQkJCQkJCQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pOwotCQkJCQkJCQkJc3RhdHVzX2NvZGUgPSBQMlBfU1RBVFVTX1NVQ0NFU1M7Ci0JCQkJCQkJCX0KLQkJCQkJCQkJZWxzZQotCQkJCQkJCQl7Ci0JCQkJCQkJCQkvKglUaGUgcDJwIGRldmljZSBzZW5kaW5nIHRoaXMgcDJwIGludml0YXRpb24gcmVxdWVzdCB3YW50cyB0byBiZSB0aGUgcGVyc2lzdGVudCBHTy4gKi8KLQkJCQkJCQkJCWlmIChpc19tYXRjaGVkX2luX3Byb2ZpbGVsaXN0KHB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyLCAmcHdkaW5mby0+cHJvZmlsZWluZm9bIDAgXSkpCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJdTggb3BlcmF0aW5nY2hfaW5mb1s1XSA9IHsgMHgwMCB9OwotCQkJCQkJCQkJCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX09QRVJBVElOR19DSCwgb3BlcmF0aW5nY2hfaW5mbywgJmF0dHJfY29udGVudGxlbikpCi0JCQkJCQkJCQkJewotCQkJCQkJCQkJCQlpZiAocnR3X2NoX3NldF9zZWFyY2hfY2gyM2EocGFkYXB0ZXItPm1sbWVleHRwcml2LmNoYW5uZWxfc2V0LCAodTMyKW9wZXJhdGluZ2NoX2luZm9bNF0pKQotCQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJCQkvKglUaGUgb3BlcmF0aW5nIGNoYW5uZWwgaXMgYWNjZXB0YWJsZSBmb3IgdGhpcyBkZXZpY2UuICovCi0JCQkJCQkJCQkJCQlwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5vcGVyYXRpb25fY2hbMF09IG9wZXJhdGluZ2NoX2luZm9bNF07Ci0JCQkJCQkJCQkJCQlwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5zY2FuX29wX2NoX29ubHkgPSAxOwotCQkJCQkJCQkJCQkJbW9kX3RpbWVyKCZwd2RpbmZvLT5yZXNldF9jaF9zaXRlc3VydmV5LCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhQMlBfUkVTRVRfU0NBTl9DSCkpOwotCQkJCQkJCQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JFQ1ZfSU5WSVRFX1JFUV9NQVRDSCk7Ci0JCQkJCQkJCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCk7Ci0JCQkJCQkJCQkJCQlzdGF0dXNfY29kZSA9IFAyUF9TVEFUVVNfU1VDQ0VTUzsKLQkJCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJCQkvKglUaGUgb3BlcmF0aW5nIGNoYW5uZWwgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiAqLwotCQkJCQkJCQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JFQ1ZfSU5WSVRFX1JFUV9ESVNNQVRDSCk7Ci0JCQkJCQkJCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0RFVklDRSk7Ci0JCQkJCQkJCQkJCQlzdGF0dXNfY29kZSA9IFAyUF9TVEFUVVNfRkFJTF9OT19DT01NT05fQ0g7Ci0JCQkJCQkJCQkJCQltb2RfdGltZXIoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygzMDAwKSk7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJZWxzZSB7Ci0JCQkJCQkJCQkJCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMjExMzAgKi8KLQkJCQkJCQkJCQkJLyoJSW50ZWwgd2lsbCB1c2UgdGhlIGRpZmZlcmVudCBQMlAgSUUgdG8gc3RvcmUgdGhlIG9wZXJhdGluZyBjaGFubmVsIGluZm9ybWF0aW9uICovCi0JCQkJCQkJCQkJCS8qCVdvcmthcm91bmQgZm9yIEludGVsIFdpRGkgMy41ICovCi0JCQkJCQkJCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9SRUNWX0lOVklURV9SRVFfTUFUQ0gpOwotCQkJCQkJCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCk7Ci0JCQkJCQkJCQkJCXN0YXR1c19jb2RlID0gUDJQX1NUQVRVU19TVUNDRVNTOwotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJCWVsc2UKLQkJCQkJCQkJCXsKLQkJCQkJCQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUkVDVl9JTlZJVEVfUkVRX0RJU01BVENIKTsKLQotCQkJCQkJCQkJCXN0YXR1c19jb2RlID0gUDJQX1NUQVRVU19GQUlMX1VOS05PV05fUDJQR1JPVVA7Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZQotCQkJCQkJCXsKLQkJCQkJCQkJREJHXzg3MjNBKCJbJXNdIFAyUCBHcm91cCBJRCBBdHRyaWJ1dGUgTk9UIEZPVU5EIVxuIiwgX19mdW5jX18pOwotCQkJCQkJCQlzdGF0dXNfY29kZSA9IFAyUF9TVEFUVVNfRkFJTF9JTkZPX1VOQVZBSUxBQkxFOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWVsc2UKLQkJCQkJCXsKLQkJCQkJCQkvKglSZWNlaXZlZCB0aGUgaW52aXRhdGlvbiB0byBqb2luIGEgUDJQIGdyb3VwLiAqLwotCi0JCQkJCQkJbWVtc2V0KCZncm91cF9pZCwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBncm91cF9pZF9pbmZvKSk7Ci0JCQkJCQkJcnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9HUk9VUF9JRCwgKHU4KikgJmdyb3VwX2lkLCAmYXR0cl9jb250ZW50bGVuKTsKLQkJCQkJCQlpZiAoYXR0cl9jb250ZW50bGVuKQotCQkJCQkJCXsKLQkJCQkJCQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwoZ3JvdXBfaWQuZ29fZGV2aWNlX2FkZHIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSkpIHsKLQkJCQkJCQkJCS8qCUluIHRoaXMgY2FzZSwgdGhlIEdPIGNhbid0IGJlIG15c2VsZi4gKi8KLQkJCQkJCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9SRUNWX0lOVklURV9SRVFfRElTTUFUQ0gpOwotCQkJCQkJCQkJc3RhdHVzX2NvZGUgPSBQMlBfU1RBVFVTX0ZBSUxfSU5GT19VTkFWQUlMQUJMRTsKLQkJCQkJCQkJfQotCQkJCQkJCQllbHNlCi0JCQkJCQkJCXsKLQkJCQkJCQkJCS8qCVRoZSBwMnAgZGV2aWNlIHNlbmRpbmcgdGhpcyBwMnAgaW52aXRhdGlvbiByZXF1ZXN0IHdhbnRzIHRvIGpvaW4gYW4gZXhpc3RpbmcgUDJQIGdyb3VwICovCi0JCQkJCQkJCQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTIvMDYvMjggKi8KLQkJCQkJCQkJCS8qCUluIHRoaXMgY2FzZSwgdGhpcyBXaS1GaSBkZXZpY2Ugc2hvdWxkIHVzZSB0aGUgaXdwcml2IGNvbW1hbmQgdG8gZ2V0IHRoZSBwZWVyIGRldmljZSBhZGRyZXNzLiAqLwotCQkJCQkJCQkJLyoJVGhlIHBlZXIgZGV2aWNlIGFkZHJlc3Mgc2hvdWxkIGJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgcHJvdmlzaW9uaW5nIGRpc2NvdmVyeSByZXF1ZXN0LiAqLwotCQkJCQkJCQkJLyoJVGhlbiwgdGhpcyBXaS1GaSBkZXZpY2Ugc2hvdWxkIHVzZSB0aGUgaXdwcml2IGNvbW1hbmQgdG8gZ2V0IHRoZSBwZWVyIGludGVyZmFjZSBhZGRyZXNzLiAqLwotCQkJCQkJCQkJLyoJVGhlIHBlZXIgaW50ZXJmYWNlIGFkZHJlc3Mgc2hvdWxkIGJlIHRoZSBhZGRyZXNzIGZvciBXUFMgbWFjIGFkZHJlc3MgKi8KLQkJCQkJCQkJCWV0aGVyX2FkZHJfY29weShwd2RpbmZvLT5wMnBfcGVlcl9kZXZpY2VfYWRkciwgZ3JvdXBfaWQuZ29fZGV2aWNlX2FkZHIpOwotCQkJCQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9DTElFTlQpOwotCQkJCQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JFQ1ZfSU5WSVRFX1JFUV9KT0lOKTsKLQkJCQkJCQkJCXN0YXR1c19jb2RlID0gUDJQX1NUQVRVU19TVUNDRVNTOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UKLQkJCQkJCQl7Ci0JCQkJCQkJCURCR184NzIzQSgiWyVzXSBQMlAgR3JvdXAgSUQgQXR0cmlidXRlIE5PVCBGT1VORCFcbiIsIF9fZnVuY19fKTsKLQkJCQkJCQkJc3RhdHVzX2NvZGUgPSBQMlBfU1RBVFVTX0ZBSUxfSU5GT19VTkFWQUlMQUJMRTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQlEQkdfODcyM0EoIlslc10gUDJQIEludml0YXRpb24gRmxhZ3MgQXR0cmlidXRlIE5PVCBGT1VORCFcbiIsIF9fZnVuY19fKTsKLQkJCQkJCXN0YXR1c19jb2RlID0gUDJQX1NUQVRVU19GQUlMX0lORk9fVU5BVkFJTEFCTEU7Ci0JCQkJCX0KLQotCQkJCQlEQkdfODcyM0EoIlslc10gc3RhdHVzX2NvZGUgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1c19jb2RlKTsKLQotCQkJCQlwd2RpbmZvLT5pbnZpdGVyZXNwX2luZm8udG9rZW4gPSBmcmFtZV9ib2R5WyA3IF07Ci0JCQkJCWlzc3VlX3AycF9pbnZpdGF0aW9uX3Jlc3BvbnNlMjNhKHBhZGFwdGVyLCBoZHItPmFkZHIyLCBwd2RpbmZvLT5pbnZpdGVyZXNwX2luZm8udG9rZW4sIHN0YXR1c19jb2RlKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUDJQX0lOVklUX1JFU1A6Ci0JCQl7Ci0JCQkJdTgJYXR0cl9jb250ZW50ID0gMHgwMDsKLQkJCQl1MzIJYXR0cl9jb250ZW50bGVuID0gMDsKLQotCQkJCURCR184NzIzQSgiWyVzXSBHb3QgaW52aXRlIHJlc3BvbnNlIGZyYW1lIVxuIiwgX19mdW5jX18pOwotCQkJCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5yZXN0b3JlX3AycF9zdGF0ZV90aW1lcik7Ci0JCQkJaWYgKChwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShmcmFtZV9ib2R5ICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgTlVMTCwgJnAycF9pZWxlbikpKQotCQkJCXsKLQkJCQkJcnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9TVEFUVVMsICZhdHRyX2NvbnRlbnQsICZhdHRyX2NvbnRlbnRsZW4pOwotCi0JCQkJCWlmIChhdHRyX2NvbnRlbnRsZW4gPT0gMSkKLQkJCQkJewotCQkJCQkJREJHXzg3MjNBKCJbJXNdIFN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgYXR0cl9jb250ZW50KTsKLQkJCQkJCXB3ZGluZm8tPmludml0ZXJlcV9pbmZvLmJlbmFibGUgPSBmYWxzZTsKLQotCQkJCQkJaWYgKGF0dHJfY29udGVudCA9PSBQMlBfU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCQl7Ci0JCQkJCQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwocHdkaW5mby0+aW52aXRlcmVxX2luZm8uZ29fYnNzaWQsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSkpIHsKLQkJCQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTyk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UKLQkJCQkJCQl7Ci0JCQkJCQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfQ0xJRU5UKTsKLQkJCQkJCQl9Ci0JCQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JYX0lOVklURV9SRVNQX09LKTsKLQkJCQkJCX0KLQkJCQkJCWVsc2UKLQkJCQkJCXsKLQkJCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0RFVklDRSk7Ci0JCQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JYX0lOVklURV9SRVNQX0ZBSUwpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9ERVZJQ0UpOwotCQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JYX0lOVklURV9SRVNQX0ZBSUwpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKTsKLQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1JYX0lOVklURV9SRVNQX0ZBSUwpOwotCQkJCX0KLQotCQkJCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUlhfSU5WSVRFX1JFU1BfRkFJTCkpIHsKLQkJCQkJbW9kX3RpbWVyKCZwd2RpbmZvLT5yZXN0b3JlX3AycF9zdGF0ZV90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgUDJQX0RFVkRJU0NfUkVROgotCi0JCQkJcHJvY2Vzc19wMnBfZGV2ZGlzY19yZXEyM2EocHdkaW5mbywgcGZyYW1lLCBsZW4pOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUDJQX0RFVkRJU0NfUkVTUDoKLQotCQkJCXByb2Nlc3NfcDJwX2RldmRpc2NfcmVzcDIzYShwd2RpbmZvLCBwZnJhbWUsIGxlbik7Ci0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBQMlBfUFJPVklTSU9OX0RJU0NfUkVROgotCQkJCURCR184NzIzQSgiWyVzXSBHb3QgUHJvdmlzaW9uaW5nIERpc2NvdmVyeSBSZXF1ZXN0IEZyYW1lXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcHJvY2Vzc19wMnBfcHJvdmRpc2NfcmVxMjNhKHB3ZGluZm8sIHBmcmFtZSwgbGVuKTsKLQkJCQlldGhlcl9hZGRyX2NvcHkocHdkaW5mby0+cnhfcHJvdl9kaXNjX2luZm8ucGVlckRldkFkZHIsIGhkci0+YWRkcjIpOwotCi0JCQkJLyogMjAxMTA5MDIgS3VydCAqLwotCQkJCS8qIEFkZCB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCB0byBhdm9pZCByZWNlaXZpbmcgZHVwbGljYXRlIHByb3YgZGlzYyByZXEuIHN1Y2ggdGhhdCBwcmVfcDJwX3N0YXRlIHdvdWxkIGJlIGNvdmVyZWQuICovCi0JCQkJaWYgKCFydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUlhfUFJPVklTSU9OX0RJU19SRVEpKQotCQkJCQlydHdfcDJwX3NldF9wcmVfc3RhdGUocHdkaW5mbywgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSk7Ci0KLQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUlhfUFJPVklTSU9OX0RJU19SRVEpOwotCQkJCW1vZF90aW1lcigmcHdkaW5mby0+cmVzdG9yZV9wMnBfc3RhdGVfdGltZXIsCi0JCQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUDJQX1BST1ZJU0lPTl9USU1FT1VUKSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUDJQX1BST1ZJU0lPTl9ESVNDX1JFU1A6Ci0JCQkJLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDcwNyAqLwotCQkJCS8qCVNob3VsZCB3ZSBjaGVjayB0aGUgcHdkaW5mby0+dHhfcHJvdl9kaXNjX2luZm8uYnNlbnQgZmxhZyBoZXJlPz8gKi8KLQkJCQlEQkdfODcyM0EoIlslc10gR290IFByb3Zpc2lvbmluZyBEaXNjb3ZlcnkgUmVzcG9uc2UgRnJhbWVcbiIsIF9fZnVuY19fKTsKLQkJCQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwNDI2ICovCi0JCQkJLyoJVGhlIHJlc3RvcmUgdGltZXIgaXMgZW5hYmxlZCB3aGVuIGlzc3VpbmcgdGhlIHByb3Zpc2lvaW5nIHJlcXVlc3QgZnJhbWUgaW4gcnR3X3AycF9wcm92X2Rpc2MgZnVuY3Rpb24uICovCi0JCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyKTsKLQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUlhfUFJPVklTSU9OX0RJU19SU1ApOwotCQkJCXByb2Nlc3NfcDJwX3Byb3ZkaXNjX3Jlc3AyM2EocHdkaW5mbywgcGZyYW1lKTsKLQkJCQltb2RfdGltZXIoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyLAotCQkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFAyUF9QUk9WSVNJT05fVElNRU9VVCkpOwotCQkJCWJyZWFrOwotCi0JCX0KLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBvbl9hY3Rpb25fcHVibGljMjNhX3ZlbmRvcihzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCitzdGF0aWMgaW50IG9uX2FjdGlvbl9wdWJsaWMyM2FfdmVuZG9yKHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKIAl1bnNpZ25lZCBpbnQgcmV0ID0gX0ZBSUw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7CkBAIC00OTM3LDEwICsyMTkwLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdW5zaWduZWQgaW50IG9uX2FjdGlvbl9wdWJsaWMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludCBvbl9hY3Rpb25fcHVibGljMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewotCXVuc2lnbmVkIGludCByZXQgPSBfRkFJTDsKKwlpbnQgcmV0ID0gX0ZBSUw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJdTggKnBmcmFtZSA9IHNrYi0+ZGF0YTsKQEAgLTQ5NjksOTIgKzIyMjIsMzQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11bnNpZ25lZCBpbnQgT25BY3Rpb24yM2FfaHQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCitzdGF0aWMgaW50CitPbkFjdGlvbjIzYV9odChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7CiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11bnNpZ25lZCBpbnQgT25BY3Rpb24yM2Ffd21tKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQKK09uQWN0aW9uMjNhX3dtbShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7CiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11bnNpZ25lZCBpbnQgT25BY3Rpb24yM2FfcDJwKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQKK09uQWN0aW9uMjNhX3AycChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1OCAqZnJhbWVfYm9keTsKLQl1OCBjYXRlZ29yeSwgT1VJX1N1YnR5cGUsIGRpYWxvZ1Rva2VuID0gMDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOwotCXVpbnQgbGVuID0gc2tiLT5sZW47Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCi0JREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOwotCi0JLyogY2hlY2sgUkEgbWF0Y2hlcyBvciBub3QgKi8KLQlpZiAoIWV0aGVyX2FkZHJfZXF1YWwobXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLCBoZHItPmFkZHIxKSkKLQkJcmV0dXJuIF9TVUNDRVNTOwotCi0JZnJhbWVfYm9keSA9ICh1bnNpZ25lZCBjaGFyICopCi0JCShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKLQotCWNhdGVnb3J5ID0gZnJhbWVfYm9keVswXTsKLQlpZiAoY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUMpCi0JCXJldHVybiBfU1VDQ0VTUzsKLQotCWlmIChjcHVfdG9fYmUzMigqKCh1MzIqKSAoZnJhbWVfYm9keSArIDEpKSkgIT0gUDJQT1VJKQotCQlyZXR1cm4gX1NVQ0NFU1M7Ci0KLQlpZiAod2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiktPnAycF9lbmFibGVkKSB7Ci0JCXJ0d19jZmc4MDIxMV9yeF9hY3Rpb25fcDJwKHBhZGFwdGVyLCBwZnJhbWUsIGxlbik7Ci0JCXJldHVybiBfU1VDQ0VTUzsKLQl9IGVsc2UgewotCQlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQkJT1VJX1N1YnR5cGUgPSBmcmFtZV9ib2R5WzVdOwotCQlkaWFsb2dUb2tlbiA9IGZyYW1lX2JvZHlbNl07Ci0KLQkJc3dpdGNoIChPVUlfU3VidHlwZSkKLQkJewotCQljYXNlIFAyUF9OT1RJQ0VfT0ZfQUJTRU5DRToKLQkJCWJyZWFrOwotCi0JCWNhc2UgUDJQX1BSRVNFTkNFX1JFUVVFU1Q6Ci0JCQlwcm9jZXNzX3AycF9wcmVzZW5jZV9yZXEyM2EocHdkaW5mbywgcGZyYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQMlBfUFJFU0VOQ0VfUkVTUE9OU0U6Ci0JCQlicmVhazsKLQotCQljYXNlIFAyUF9HT19ESVNDX1JFUVVFU1Q6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdW5zaWduZWQgaW50IE9uQWN0aW9uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludAorT25BY3Rpb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogCWludCBpOwotCXVuc2lnbmVkIGNoYXIJY2F0ZWdvcnk7CisJdTggY2F0ZWdvcnk7CiAJc3RydWN0IGFjdGlvbl9oYW5kbGVyICpwdGFibGU7Ci0JdW5zaWduZWQgY2hhcgkqZnJhbWVfYm9keTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCi0JZnJhbWVfYm9keSA9ICh1bnNpZ25lZCBjaGFyICopCi0JCShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKLQotCWNhdGVnb3J5ID0gZnJhbWVfYm9keVswXTsKKwljYXRlZ29yeSA9IG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5OwogCiAJZm9yIChpID0gMDsKIAkgICAgIGkgPCBzaXplb2YoT25BY3Rpb24yM2FfdGJsKSAvIHNpemVvZihzdHJ1Y3QgYWN0aW9uX2hhbmRsZXIpOyBpKyspIHsKQEAgLTUwNjcsOCArMjI2Miw4IEBACiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11bnNpZ25lZCBpbnQgRG9SZXNlcnZlZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludCBEb1Jlc2VydmVkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogCXJldHVybiBfU1VDQ0VTUzsKIH0KQEAgLTUwODEsMTUgKzIyNzYsMTUgQEAKIAlwbWdudGZyYW1lID0gcnR3X2FsbG9jX3htaXRmcmFtZTIzYV9leHQocHhtaXRwcml2KTsKIAogCWlmICghcG1nbnRmcmFtZSkgewotCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCIgYWxsb2MgeG1pdGZyYW1lIGZhaWxcbiIsCi0JCQkgIEZVTkNfQURQVF9BUkcocHhtaXRwcml2LT5hZGFwdGVyKSk7CisJCURCR184NzIzQSgiJXMoJXMpOiBhbGxvYyB4bWl0ZnJhbWUgZmFpbFxuIiwgX19mdW5jX18sCisJCQkgIHB4bWl0cHJpdi0+YWRhcHRlci0+cG5ldGRldi0+bmFtZSk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlweG1pdGJ1ZiA9IHJ0d19hbGxvY194bWl0YnVmMjNhX2V4dChweG1pdHByaXYpOwogCWlmICghcHhtaXRidWYpIHsKLQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIGFsbG9jIHhtaXRidWYgZmFpbFxuIiwKLQkJCSAgRlVOQ19BRFBUX0FSRyhweG1pdHByaXYtPmFkYXB0ZXIpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IGFsbG9jIHhtaXRidWYgZmFpbFxuIiwgX19mdW5jX18sCisJCQkgIHB4bWl0cHJpdi0+YWRhcHRlci0+cG5ldGRldi0+bmFtZSk7CiAJCXJ0d19mcmVlX3htaXRmcmFtZTIzYShweG1pdHByaXYsIHBtZ250ZnJhbWUpOwogCQlwbWdudGZyYW1lID0gTlVMTDsKIAkJZ290byBleGl0OwpAQCAtNTEzOCw3ICsyMzMzLDcgQEAKIAllbHNlCiAJCXBhdHRyaWItPnJhaWQgPSA1Oy8qIGEvZyBtb2RlICovCiAKLQlwYXR0cmliLT5lbmNyeXB0ID0gX05PX1BSSVZBQ1lfOworCXBhdHRyaWItPmVuY3J5cHQgPSAwOwogCXBhdHRyaWItPmJzd2VuYyA9IGZhbHNlOwogCiAJcGF0dHJpYi0+cW9zX2VuID0gZmFsc2U7CkBAIC01MTU5LDEzICsyMzU0LDEzIEBACiAJICAgIHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9PSB0cnVlKQogCQlyZXR1cm47CiAKLQlydHdfaGFsX21nbnRfeG1pdDIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7CisJcnRsODcyM2F1X21nbnRfeG1pdChwYWRhcHRlciwgcG1nbnRmcmFtZSk7CiB9CiAKLXMzMiBkdW1wX21nbnRmcmFtZTIzYV9hbmRfd2FpdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAoraW50IGR1bXBfbWdudGZyYW1lMjNhX2FuZF93YWl0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgICAgICAgc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWUsIGludCB0aW1lb3V0X21zKQogewotCXMzMiByZXQgPSBfRkFJTDsKKwlpbnQgcmV0ID0gX0ZBSUw7CiAJdW5zaWduZWQgbG9uZyBpcnFMOwogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7CiAJc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZiA9IHBtZ250ZnJhbWUtPnB4bWl0YnVmOwpAQCAtNTE3OCw3ICsyMzczLDcgQEAKIAlydHdfc2N0eF9pbml0MjNhKCZzY3R4LCB0aW1lb3V0X21zKTsKIAlweG1pdGJ1Zi0+c2N0eCA9ICZzY3R4OwogCi0JcmV0ID0gcnR3X2hhbF9tZ250X3htaXQyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOworCXJldCA9IHJ0bDg3MjNhdV9tZ250X3htaXQocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwogCiAJaWYgKHJldCA9PSBfU1VDQ0VTUykKIAkJcmV0ID0gcnR3X3NjdHhfd2FpdDIzYSgmc2N0eCk7CkBAIC01MTkwLDI0ICsyMzg1LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotczMyIGR1bXBfbWdudGZyYW1lMjNhX2FuZF93YWl0X2FjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAoraW50IGR1bXBfbWdudGZyYW1lMjNhX2FuZF93YWl0X2FjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJCSAgICAgIHN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lKQogewotCXMzMiByZXQgPSBfRkFJTDsKKwlpbnQgcmV0ID0gX0ZBSUw7CiAJdTMyIHRpbWVvdXRfbXMgPSA1MDA7LyogICA1MDBtcyAqLwogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7CiAKIAlpZiAocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgPT0gdHJ1ZSB8fAogCSAgICBwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgPT0gdHJ1ZSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gX0ZBSUw7CiAKIAltdXRleF9sb2NrKCZweG1pdHByaXYtPmFja190eF9tdXRleCk7CiAJcHhtaXRwcml2LT5hY2tfdHggPSB0cnVlOwogCiAJcG1nbnRmcmFtZS0+YWNrX3JlcG9ydCA9IDE7Ci0JaWYgKHJ0d19oYWxfbWdudF94bWl0MjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKSA9PSBfU1VDQ0VTUykgeworCWlmIChydGw4NzIzYXVfbWdudF94bWl0KHBhZGFwdGVyLCBwbWdudGZyYW1lKSA9PSBfU1VDQ0VTUykKIAkJcmV0ID0gcnR3X2Fja190eF93YWl0MjNhKHB4bWl0cHJpdiwgdGltZW91dF9tcyk7Ci0JfQogCiAJcHhtaXRwcml2LT5hY2tfdHggPSBmYWxzZTsKIAltdXRleF91bmxvY2soJnB4bWl0cHJpdi0+YWNrX3R4X211dGV4KTsKQEAgLTUyNTksNyArMjQ1Myw2IEBACiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CiAJdW5zaWduZWQgY2hhciAqcGZyYW1lOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7CiAJdW5zaWduZWQgaW50IHJhdGVfbGVuOwogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKQEAgLTUyNjcsOSArMjQ2MCw2IEBACiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKmN1cl9uZXR3b3JrID0gJnBtbG1laW5mby0+bmV0d29yazsKIAl1OCBiY19hZGRyW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KIAl1OCAqd3BzX2llOwogCXUzMiB3cHNfaWVsZW47CiAJdTggc3IgPSAwOwpAQCAtNTI3Nyw3ICsyNDY3LDggQEAKIAogCS8qIERCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsgKi8KIAotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKSB7CisJcG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpOworCWlmICghcG1nbnRmcmFtZSkgewogCQlEQkdfODcyM0EoIiVzLCBhbGxvYyBtZ250IGZyYW1lIGZhaWxcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KQEAgLTUyOTUsMTM1ICsyNDg2LDIwIEBACiAJcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7CiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOworCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgICAgICBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKTsKKwlwd2xhbmhkci0+c2VxX2N0cmwgPSAwOwogCiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgYmNfYWRkcik7CiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBnZXRfbXlfYnNzaWQyM2EoY3VyX25ldHdvcmspKTsKIAotCVNldFNlcU51bShwd2xhbmhkciwgMCAvKnBtbG1lZXh0LT5tZ250X3NlcSovKTsKLQkvKiBwbWxtZWV4dC0+bWdudF9zZXErKzsgKi8KLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0JFQUNPTik7Ci0KIAlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCiAJaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfQVBfU1RBVEUpIHsKIAkJLyogREJHXzg3MjNBKCJpZSBsZW4gPSVkXG4iLCBjdXJfbmV0d29yay0+SUVMZW5ndGgpOyAqLwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCS8qICBmb3IgUDJQIDogUHJpbWFyeSBEZXZpY2UgVHlwZSAmIERldmljZSBOYW1lICovCi0JCXUzMiBpbnNlcnRfbGVuID0gMDsKLQkJd3BzX2llID0gcnR3X2dldF93cHNfaWUyM2EoY3VyX25ldHdvcmstPklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLAotCQkJCQkgICBjdXJfbmV0d29yay0+SUVMZW5ndGggLQotCQkJCQkgICBfRklYRURfSUVfTEVOR1RIXywgTlVMTCwgJndwc19pZWxlbik7Ci0KLQkJaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pICYmIHdwc19pZSAmJgotCQkgICAgd3BzX2llbGVuID4gMCkgewotCQkJdWludCB3cHNfb2Zmc2V0LCByZW1haW5kZXJfaWVsZW47Ci0JCQl1OCAqcHJlbWFpbmRlcl9pZSwgKnBmcmFtZV93c2NpZTsKLQotCQkJd3BzX29mZnNldCA9ICh1aW50KSh3cHNfaWUgLSBjdXJfbmV0d29yay0+SUVzKTsKLQotCQkJcHJlbWFpbmRlcl9pZSA9IHdwc19pZSArIHdwc19pZWxlbjsKLQotCQkJcmVtYWluZGVyX2llbGVuID0gY3VyX25ldHdvcmstPklFTGVuZ3RoIC0gd3BzX29mZnNldCAtCi0JCQkJd3BzX2llbGVuOwotCi0JCQlpZiAod2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiktPnAycF9lbmFibGVkKSB7Ci0JCQkJaWYgKHBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZSAmJgotCQkJCSAgICBwbWxtZXByaXYtPndwc19iZWFjb25faWVfbGVuPjApIHsKLQkJCQkJbWVtY3B5KHBmcmFtZSwgY3VyX25ldHdvcmstPklFcywKLQkJCQkJICAgICAgIHdwc19vZmZzZXQpOwotCQkJCQlwZnJhbWUgKz0gd3BzX29mZnNldDsKLQkJCQkJcGF0dHJpYi0+cGt0bGVuICs9IHdwc19vZmZzZXQ7Ci0KLQkJCQkJbWVtY3B5KHBmcmFtZSwgcG1sbWVwcml2LT53cHNfYmVhY29uX2llLAotCQkJCQkgICAgICAgcG1sbWVwcml2LT53cHNfYmVhY29uX2llX2xlbik7Ci0JCQkJCXBmcmFtZSArPSBwbWxtZXByaXYtPndwc19iZWFjb25faWVfbGVuOwotCQkJCQlwYXR0cmliLT5wa3RsZW4gKz0KLQkJCQkJCXBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZV9sZW47Ci0KLQkJCQkJLyogY29weSByZW1haW5kZXJfaWUgdG8gcGZyYW1lICovCi0JCQkJCW1lbWNweShwZnJhbWUsIHByZW1haW5kZXJfaWUsCi0JCQkJCSAgICAgICByZW1haW5kZXJfaWVsZW4pOwotCQkJCQlwZnJhbWUgKz0gcmVtYWluZGVyX2llbGVuOwotCQkJCQlwYXR0cmliLT5wa3RsZW4gKz0gcmVtYWluZGVyX2llbGVuOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1lbWNweShwZnJhbWUsIGN1cl9uZXR3b3JrLT5JRXMsCi0JCQkJCSAgICAgICBjdXJfbmV0d29yay0+SUVMZW5ndGgpOwotCQkJCQlwZnJhbWUgKz0gY3VyX25ldHdvcmstPklFTGVuZ3RoOwotCQkJCQlwYXR0cmliLT5wa3RsZW4gKz0KLQkJCQkJCWN1cl9uZXR3b3JrLT5JRUxlbmd0aDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXBmcmFtZV93c2NpZSA9IHBmcmFtZSArIHdwc19vZmZzZXQ7Ci0JCQkJbWVtY3B5KHBmcmFtZSwgY3VyX25ldHdvcmstPklFcywKLQkJCQkgICAgICAgd3BzX29mZnNldCArIHdwc19pZWxlbik7Ci0JCQkJcGZyYW1lICs9ICh3cHNfb2Zmc2V0ICsgd3BzX2llbGVuKTsKLQkJCQlwYXR0cmliLT5wa3RsZW4gKz0gKHdwc19vZmZzZXQgKyB3cHNfaWVsZW4pOwotCi0JCQkJLyogbm93IHBmcmFtZSBpcyBlbmQgb2Ygd3NjIGllLCBpbnNlcnQgUHJpbWFyeQotCQkJCSAgIERldmljZSBUeXBlICYgRGV2aWNlIE5hbWUgKi8KLQkJCQkvKglQcmltYXJ5IERldmljZSBUeXBlICovCi0JCQkJLyoJVHlwZTogKi8KLQkJCQkqKHUxNiopIChwZnJhbWUgKyBpbnNlcnRfbGVuKSA9Ci0JCQkJCWNwdV90b19iZTE2KFdQU19BVFRSX1BSSU1BUllfREVWX1RZUEUpOwotCQkJCWluc2VydF9sZW4gKz0gMjsKLQotCQkJCS8qCUxlbmd0aDogKi8KLQkJCQkqKHUxNiopIChwZnJhbWUgKyBpbnNlcnRfbGVuKSA9Ci0JCQkJCWNwdV90b19iZTE2KDB4MDAwOCk7Ci0JCQkJaW5zZXJ0X2xlbiArPSAyOwotCi0JCQkJLyoJVmFsdWU6ICovCi0JCQkJLyoJQ2F0ZWdvcnkgSUQgKi8KLQkJCQkqKHUxNiopIChwZnJhbWUgKyBpbnNlcnRfbGVuKSA9Ci0JCQkJCWNwdV90b19iZTE2KFdQU19QRFRfQ0lEX01VTElUX01FRElBKTsKLQkJCQlpbnNlcnRfbGVuICs9IDI7Ci0KLQkJCQkvKglPVUkgKi8KLQkJCQkqKHUzMiopIChwZnJhbWUgKyBpbnNlcnRfbGVuKSA9Ci0JCQkJCWNwdV90b19iZTMyKFdQU09VSSk7Ci0JCQkJaW5zZXJ0X2xlbiArPSA0OwotCi0JCQkJLyoJU3ViIENhdGVnb3J5IElEICovCi0JCQkJKih1MTYqKSAocGZyYW1lICsgaW5zZXJ0X2xlbikgPQotCQkJCQljcHVfdG9fYmUxNihXUFNfUERUX1NDSURfTUVESUFfU0VSVkVSKTsKLQkJCQlpbnNlcnRfbGVuICs9IDI7Ci0KLQkJCQkvKglEZXZpY2UgTmFtZSAqLwotCQkJCS8qCVR5cGU6ICovCi0JCQkJKih1MTYqKSAocGZyYW1lICsgaW5zZXJ0X2xlbikgPQotCQkJCQljcHVfdG9fYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSk7Ci0JCQkJaW5zZXJ0X2xlbiArPSAyOwotCi0JCQkJLyoJTGVuZ3RoOiAqLwotCQkJCSoodTE2KikgKHBmcmFtZSArIGluc2VydF9sZW4pID0KLQkJCQkJY3B1X3RvX2JlMTYocHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQkJCQlpbnNlcnRfbGVuICs9IDI7Ci0KLQkJCQkvKglWYWx1ZTogKi8KLQkJCQltZW1jcHkocGZyYW1lICsgaW5zZXJ0X2xlbiwKLQkJCQkgICAgICAgcHdkaW5mby0+ZGV2aWNlX25hbWUsCi0JCQkJICAgICAgIHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JCQkJaW5zZXJ0X2xlbiArPSBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW47Ci0KLQkJCQkvKiB1cGRhdGUgd3NjIGllIGxlbmd0aCAqLwotCQkJCSoocGZyYW1lX3dzY2llKzEpID0gKHdwc19pZWxlbiAtMikgKyBpbnNlcnRfbGVuOwotCi0JCQkJLyogcGZyYW1lIG1vdmUgdG8gZW5kICovCi0JCQkJcGZyYW1lKz0gaW5zZXJ0X2xlbjsKLQkJCQlwYXR0cmliLT5wa3RsZW4gKz0gaW5zZXJ0X2xlbjsKLQotCQkJCS8qIGNvcHkgcmVtYWluZGVyX2llIHRvIHBmcmFtZSAqLwotCQkJCW1lbWNweShwZnJhbWUsIHByZW1haW5kZXJfaWUsIHJlbWFpbmRlcl9pZWxlbik7Ci0JCQkJcGZyYW1lICs9IHJlbWFpbmRlcl9pZWxlbjsKLQkJCQlwYXR0cmliLT5wa3RsZW4gKz0gcmVtYWluZGVyX2llbGVuOwotCQkJfQotCQl9IGVsc2UKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCQkJbWVtY3B5KHBmcmFtZSwgY3VyX25ldHdvcmstPklFcywgY3VyX25ldHdvcmstPklFTGVuZ3RoKTsKKwkJbWVtY3B5KHBmcmFtZSwgY3VyX25ldHdvcmstPklFcywgY3VyX25ldHdvcmstPklFTGVuZ3RoKTsKIAkJbGVuX2RpZmYgPSB1cGRhdGVfaGlkZGVuX3NzaWQocGZyYW1lICsgX0JFQUNPTl9JRV9PRkZTRVRfLAogCQkJCQkgICAgICBjdXJfbmV0d29yay0+SUVMZW5ndGggLQogCQkJCQkgICAgICBfQkVBQ09OX0lFX09GRlNFVF8sCkBAIC01NDQ3LDM2ICsyNTIzLDYgQEAKIAkJZWxzZQogCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIFdJRklfVU5ERVJfV1BTKTsKIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkgewotCQkJdTMyIGxlbjsKLQkJCWlmICh3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQpIHsKLQkJCQlsZW4gPSBwbWxtZXByaXYtPnAycF9iZWFjb25faWVfbGVuOwotCQkJCWlmIChwbWxtZXByaXYtPnAycF9iZWFjb25faWUgJiYgbGVuID4gMCkKLQkJCQkJbWVtY3B5KHBmcmFtZSwKLQkJCQkJICAgICAgIHBtbG1lcHJpdi0+cDJwX2JlYWNvbl9pZSwgbGVuKTsKLQkJCX0gZWxzZQotCQkJCWxlbiA9IGJ1aWxkX2JlYWNvbl9wMnBfaWUyM2EocHdkaW5mbywgcGZyYW1lKTsKLQotCQkJcGZyYW1lICs9IGxlbjsKLQkJCXBhdHRyaWItPnBrdGxlbiArPSBsZW47Ci0KLQkJCWlmICh0cnVlID09IHB3ZGluZm8tPndmZF9pbmZvLT53ZmRfZW5hYmxlKSB7Ci0JCQkJbGVuID0gYnVpbGRfYmVhY29uX3dmZF9pZShwd2RpbmZvLCBwZnJhbWUpOwotCQkJfSBlbHNlIHsKLQkJCQlsZW4gPSAwOwotCQkJCWlmIChwbWxtZXByaXYtPndmZF9iZWFjb25faWUgJiYKLQkJCQkgICAgcG1sbWVwcml2LT53ZmRfYmVhY29uX2llX2xlbj4wKSB7Ci0JCQkJCWxlbiA9IHBtbG1lcHJpdi0+d2ZkX2JlYWNvbl9pZV9sZW47Ci0JCQkJCW1lbWNweShwZnJhbWUsCi0JCQkJCSAgICAgICBwbWxtZXByaXYtPndmZF9iZWFjb25faWUsIGxlbik7Ci0JCQkJfQotCQkJfQotCQkJcGZyYW1lICs9IGxlbjsKLQkJCXBhdHRyaWItPnBrdGxlbiArPSBsZW47Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCiAJCWdvdG8gX2lzc3VlX2JjbjsKIAl9CiAKQEAgLTU1MDMsMzkgKzI1NDksMzkgQEAKIAlwYXR0cmliLT5wa3RsZW4gKz0gMjsKIAogCS8qICBTU0lEICovCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TU0lEX0lFXywgY3VyX25ldHdvcmstPlNzaWQuc3NpZF9sZW4sCisJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX1NTSUQsCisJCQkgICAgICAgY3VyX25ldHdvcmstPlNzaWQuc3NpZF9sZW4sCiAJCQkgICAgICAgY3VyX25ldHdvcmstPlNzaWQuc3NpZCwgJnBhdHRyaWItPnBrdGxlbik7CiAKIAkvKiAgc3VwcG9ydGVkIHJhdGVzLi4uICovCiAJcmF0ZV9sZW4gPSBydHdfZ2V0X3JhdGVzZXRfbGVuMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7Ci0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TVVBQT1JURURSQVRFU19JRV8sCisJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX1NVUFBfUkFURVMsCiAJCQkgICAgICAgKChyYXRlX2xlbiA+IDgpPyA4OiByYXRlX2xlbiksCiAJCQkgICAgICAgY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzLCAmcGF0dHJpYi0+cGt0bGVuKTsKIAogCS8qICBEUyBwYXJhbWV0ZXIgc2V0ICovCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9EU1NFVF9JRV8sIDEsICh1bnNpZ25lZCBjaGFyICopCi0JCQkgICAgICAgJmN1cl9uZXR3b3JrLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnLAotCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOworCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9EU19QQVJBTVMsIDEsICh1bnNpZ25lZCBjaGFyICopCisJCQkgICAgICAgJmN1cl9uZXR3b3JrLT5EU0NvbmZpZywgJnBhdHRyaWItPnBrdGxlbik7CiAKIAkvKiBpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19BREhPQ19TVEFURSkgKi8KIAl7CiAJCXU4IGVycGluZm8gPSAwOwogCQl1MzIgQVRJTVdpbmRvdzsKIAkJLyogIElCU1MgUGFyYW1ldGVyIFNldC4uLiAqLwotCQkvKiBBVElNV2luZG93ID0gY3VyLT5Db25maWd1cmF0aW9uLkFUSU1XaW5kb3c7ICovCisJCS8qIEFUSU1XaW5kb3cgPSBjdXItPkFUSU1XaW5kb3c7ICovCiAJCUFUSU1XaW5kb3cgPSAwOwotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX0lCU1NfUEFSQV9JRV8sIDIsCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9JQlNTX1BBUkFNUywgMiwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmQVRJTVdpbmRvdywKIAkJCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7CiAKIAkJLyogRVJQIElFICovCi0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfRVJQSU5GT19JRV8sIDEsCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9FUlBfSU5GTywgMSwKIAkJCQkgICAgICAgJmVycGluZm8sICZwYXR0cmliLT5wa3RsZW4pOwogCX0KIAogCS8qICBFWFRFUk5ERUQgU1VQUE9SVEVEIFJBVEUgKi8KIAlpZiAocmF0ZV9sZW4gPiA4KQotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX0VYVF9TVVBQT1JURURSQVRFU19JRV8sCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUywKIAkJCQkgICAgICAgcmF0ZV9sZW4gLSA4LAogCQkJCSAgICAgICBjdXJfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMgKyA4LAogCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKQEAgLTU1NjQsMTQgKzI2MTAsMTMgQEAKIAkJZHVtcF9tZ250ZnJhbWUyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwogfQogCi12b2lkIGlzc3VlX3Byb2JlcnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKmRhLAotCQkgICAgICAgdTggaXNfdmFsaWRfcDJwX3Byb2JlcmVxKQorc3RhdGljIHZvaWQgaXNzdWVfcHJvYmVyc3Aoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqZGEsCisJCQkgICB1OCBpc192YWxpZF9wMnBfcHJvYmVyZXEpCiB7CiAJc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWU7CiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CiAJdW5zaWduZWQgY2hhciAqcGZyYW1lOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7CiAJdW5zaWduZWQgY2hhciAqbWFjLCAqYnNzaWQ7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKQEAgLTU1ODIsMjIgKzI2MjcsMTcgQEAKIAlpbnQgc3NpZF9pZWxlbl9kaWZmOwogCXU4IGJ1ZltNQVhfSUVfU1pdOwogCXU4ICppZXM7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR184NzIzQVVfQVBfTU9ERSkgfHwgZGVmaW5lZChDT05GSUdfODcyM0FVX1AyUCkKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogI2VuZGlmCiAJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqY3VyX25ldHdvcmsgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOwogCXVuc2lnbmVkIGludCByYXRlX2xlbjsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwogCiAJLyogREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOyAqLwogCi0JaWYgKChwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdikpID09IE5VTEwpCi0JeworCXBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KTsKKwlpZiAoIXBtZ250ZnJhbWUpIHsKIAkJREJHXzg3MjNBKCIlcywgYWxsb2MgbWdudCBmcmFtZSBmYWlsXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CkBAIC01NjA4LDIxICsyNjQ4LDIyIEBACiAKIAltZW1zZXQocG1nbnRmcmFtZS0+YnVmX2FkZHIsIDAsIFdMQU5IRFJfT0ZGU0VUICsgVFhERVNDX09GRlNFVCk7CiAKLQlwZnJhbWUgPSAodTggKikocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKKwlwZnJhbWUgPSAodTggKilwbWdudGZyYW1lLT5idWZfYWRkciArIFRYREVTQ19PRkZTRVQ7CiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKIAltYWMgPSBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdik7CiAJYnNzaWQgPSBjdXJfbmV0d29yay0+TWFjQWRkcmVzczsKIAotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKKwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIGRhKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBtYWMpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGJzc2lkKTsKIAotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKKwlwd2xhbmhkci0+c2VxX2N0cmwgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU05fVE9fU0VRKHBtbG1lZXh0LT5tZ250X3NlcSkpOwogCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShmY3RybCwgV0lGSV9QUk9CRVJTUCk7CiAKIAlwYXR0cmliLT5oZHJsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCXBhdHRyaWItPnBrdGxlbiA9IHBhdHRyaWItPmhkcmxlbjsKQEAgLTU2NDAsOCArMjY4MSw3IEBACiAJCQkJCSAgICAmd3BzX2llbGVuKTsKIAogCQkvKiBpbmVyc2V0ICYgdXBkYXRlIHdwc19wcm9iZV9yZXNwX2llICovCi0JCWlmICgocG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZSAhPSBOVUxMKSAmJiBwd3BzX2llICYmCi0JCSAgICAod3BzX2llbGVuID4gMCkpIHsKKwkJaWYgKHBtbG1lcHJpdi0+d3BzX3Byb2JlX3Jlc3BfaWUgJiYgcHdwc19pZSAmJiB3cHNfaWVsZW4gPiAwKSB7CiAJCQl1aW50IHdwc19vZmZzZXQsIHJlbWFpbmRlcl9pZWxlbjsKIAkJCXU4ICpwcmVtYWluZGVyX2llOwogCkBAIC01NjU4LDE0ICsyNjk4LDE0IEBACiAKIAkJCS8qIHRvIGdldCBpZSBkYXRhIGxlbiAqLwogCQkJd3BzX2llbGVuID0gKHVpbnQpcG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZVsxXTsKLQkJCWlmICgod3BzX29mZnNldCt3cHNfaWVsZW4rMik8PSBNQVhfSUVfU1opIHsKKwkJCWlmICh3cHNfb2Zmc2V0ICsgd3BzX2llbGVuICsgMiA8PSBNQVhfSUVfU1opIHsKIAkJCQltZW1jcHkocGZyYW1lLCBwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llLAogCQkJCSAgICAgICB3cHNfaWVsZW4rMik7CiAJCQkJcGZyYW1lICs9IHdwc19pZWxlbisyOwogCQkJCXBhdHRyaWItPnBrdGxlbiArPSB3cHNfaWVsZW4rMjsKIAkJCX0KIAotCQkJaWYgKCh3cHNfb2Zmc2V0K3dwc19pZWxlbisyK3JlbWFpbmRlcl9pZWxlbikgPD0KKwkJCWlmICh3cHNfb2Zmc2V0ICsgd3BzX2llbGVuICsgMiArIHJlbWFpbmRlcl9pZWxlbiA8PQogCQkJICAgIE1BWF9JRV9TWikgewogCQkJCW1lbWNweShwZnJhbWUsIHByZW1haW5kZXJfaWUsIHJlbWFpbmRlcl9pZWxlbik7CiAJCQkJcGZyYW1lICs9IHJlbWFpbmRlcl9pZWxlbjsKQEAgLTU2ODEsOSArMjcyMSw5IEBACiAJCWllcyA9IHBtZ250ZnJhbWUtPmJ1Zl9hZGRyICsgVFhERVNDX09GRlNFVCArCiAJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCi0JCXNzaWRfaWUgPSBydHdfZ2V0X2llMjNhKGllcytfRklYRURfSUVfTEVOR1RIXywgX1NTSURfSUVfLAorCQlzc2lkX2llID0gcnR3X2dldF9pZTIzYShpZXMgKyBfRklYRURfSUVfTEVOR1RIXywgV0xBTl9FSURfU1NJRCwKIAkJCQkJJnNzaWRfaWVsZW4sCi0JCQkJCShwZnJhbWUtaWVzKS1fRklYRURfSUVfTEVOR1RIXyk7CisJCQkJCXBmcmFtZSAtIGllcyAtIF9GSVhFRF9JRV9MRU5HVEhfKTsKIAogCQlzc2lkX2llbGVuX2RpZmYgPSBjdXJfbmV0d29yay0+U3NpZC5zc2lkX2xlbiAtIHNzaWRfaWVsZW47CiAKQEAgLTU2OTEsMjAgKzI3MzEsMTkgQEAKIAkJCXVpbnQgcmVtYWluZGVyX2llbGVuOwogCQkJdTggKnJlbWFpbmRlcl9pZTsKIAkJCXJlbWFpbmRlcl9pZSA9IHNzaWRfaWUgKyAyOwotCQkJcmVtYWluZGVyX2llbGVuID0gKHBmcmFtZS1yZW1haW5kZXJfaWUpOworCQkJcmVtYWluZGVyX2llbGVuID0gcGZyYW1lIC0gcmVtYWluZGVyX2llOwogCi0JCQlEQkdfODcyM0FfTEVWRUwoX2Rydl93YXJuaW5nXywgRlVOQ19BRFBUX0ZNVAotCQkJCQkiIHJlbWFpbmRlcl9pZWxlbiA+IE1BWF9JRV9TWlxuIiwKLQkJCQkJRlVOQ19BRFBUX0FSRyhwYWRhcHRlcikpOwotCQkJaWYgKHJlbWFpbmRlcl9pZWxlbiA+IE1BWF9JRV9TWikgeworCQkJREJHXzg3MjNBX0xFVkVMKF9kcnZfd2FybmluZ18sICIlcyglcyk6ICIKKwkJCQkJInJlbWFpbmRlcl9pZWxlbiA+IE1BWF9JRV9TWlxuIiwKKwkJCQkJX19mdW5jX18sIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lKTsKKwkJCWlmIChyZW1haW5kZXJfaWVsZW4gPiBNQVhfSUVfU1opCiAJCQkJcmVtYWluZGVyX2llbGVuID0gTUFYX0lFX1NaOwotCQkJfQogCiAJCQltZW1jcHkoYnVmLCByZW1haW5kZXJfaWUsIHJlbWFpbmRlcl9pZWxlbik7Ci0JCQltZW1jcHkocmVtYWluZGVyX2llK3NzaWRfaWVsZW5fZGlmZiwgYnVmLAorCQkJbWVtY3B5KHJlbWFpbmRlcl9pZSArIHNzaWRfaWVsZW5fZGlmZiwgYnVmLAogCQkJICAgICAgIHJlbWFpbmRlcl9pZWxlbik7Ci0JCQkqKHNzaWRfaWUrMSkgPSBjdXJfbmV0d29yay0+U3NpZC5zc2lkX2xlbjsKLQkJCW1lbWNweShzc2lkX2llKzIsIGN1cl9uZXR3b3JrLT5Tc2lkLnNzaWQsCisJCQkqKHNzaWRfaWUgKyAxKSA9IGN1cl9uZXR3b3JrLT5Tc2lkLnNzaWRfbGVuOworCQkJbWVtY3B5KHNzaWRfaWUgKyAyLCBjdXJfbmV0d29yay0+U3NpZC5zc2lkLAogCQkJICAgICAgIGN1cl9uZXR3b3JrLT5Tc2lkLnNzaWRfbGVuKTsKIAogCQkJcGZyYW1lICs9IHNzaWRfaWVsZW5fZGlmZjsKQEAgLTU3MzcsNDAgKzI3NzYsNDEgQEAKIAkJLyogYmVsb3cgZm9yIGFkLWhvYyBtb2RlICovCiAKIAkJLyogIFNTSUQgKi8KLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TU0lEX0lFXywKLQkJCQkgICAgY3VyX25ldHdvcmstPlNzaWQuc3NpZF9sZW4sCi0JCQkJICAgIGN1cl9uZXR3b3JrLT5Tc2lkLnNzaWQsICZwYXR0cmliLT5wa3RsZW4pOworCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1NJRCwKKwkJCQkgICAgICAgY3VyX25ldHdvcmstPlNzaWQuc3NpZF9sZW4sCisJCQkJICAgICAgIGN1cl9uZXR3b3JrLT5Tc2lkLnNzaWQsCisJCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwogCiAJCS8qICBzdXBwb3J0ZWQgcmF0ZXMuLi4gKi8KIAkJcmF0ZV9sZW4gPSBydHdfZ2V0X3JhdGVzZXRfbGVuMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfU1VQUE9SVEVEUkFURVNfSUVfLAorCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1VQUF9SQVRFUywKIAkJCQkgICAgICAgKChyYXRlX2xlbiA+IDgpPyA4OiByYXRlX2xlbiksCiAJCQkJICAgICAgIGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcywKIAkJCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7CiAKIAkJLyogIERTIHBhcmFtZXRlciBzZXQgKi8KLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9EU1NFVF9JRV8sIDEsICh1bnNpZ25lZCBjaGFyICopCi0JCQkJICAgICAgICZjdXJfbmV0d29yay0+Q29uZmlndXJhdGlvbi5EU0NvbmZpZywKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX0RTX1BBUkFNUywgMSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmY3VyX25ldHdvcmstPkRTQ29uZmlnLAogCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKIAotCQlpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19BREhPQ19TVEFURSkgeworCQlpZiAoKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSA9PSBXSUZJX0ZXX0FESE9DX1NUQVRFKSB7CiAJCQl1OCBlcnBpbmZvID0gMDsKIAkJCXUzMiBBVElNV2luZG93OwogCQkJLyogIElCU1MgUGFyYW1ldGVyIFNldC4uLiAqLwotCQkJLyogQVRJTVdpbmRvdyA9IGN1ci0+Q29uZmlndXJhdGlvbi5BVElNV2luZG93OyAqLworCQkJLyogQVRJTVdpbmRvdyA9IGN1ci0+QVRJTVdpbmRvdzsgKi8KIAkJCUFUSU1XaW5kb3cgPSAwOwotCQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9JQlNTX1BBUkFfSUVfLCAyLAorCQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX0lCU1NfUEFSQU1TLCAyLAogCQkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmQVRJTVdpbmRvdywKIAkJCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwogCiAJCQkvKiBFUlAgSUUgKi8KLQkJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfRVJQSU5GT19JRV8sIDEsCisJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfRVJQX0lORk8sIDEsCiAJCQkJCSAgICAgICAmZXJwaW5mbywgJnBhdHRyaWItPnBrdGxlbik7CiAJCX0KIAogCQkvKiAgRVhURVJOREVEIFNVUFBPUlRFRCBSQVRFICovCiAJCWlmIChyYXRlX2xlbiA+IDgpCi0JCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX0VYVF9TVVBQT1JURURSQVRFU19JRV8sCisJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsCiAJCQkJCSAgICAgICByYXRlX2xlbiAtIDgsCiAJCQkJCSAgICAgICBjdXJfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMgKyA4LAogCQkJCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7CkBAIC01Nzc4LDM4ICsyODE4LDYgQEAKIAkJLyogdG9kbzpIVCBmb3IgYWRob2MgKi8KIAl9CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSAmJiBpc192YWxpZF9wMnBfcHJvYmVyZXEpIHsKLQkJdTMyIGxlbjsKLQkJaWYgKHdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpLT5wMnBfZW5hYmxlZCkgewotCQkJLyogaWYgcHdkaW5mby0+cm9sZSA9PSBQMlBfUk9MRV9ERVZJQ0Ugd2lsbCBjYWxsCi0JCQkgICBpc3N1ZV9wcm9iZXJzcDIzYV9wMnAyM2EoKSAqLwotCQkJbGVuID0gcG1sbWVwcml2LT5wMnBfZ29fcHJvYmVfcmVzcF9pZV9sZW47Ci0JCQlpZiAocG1sbWVwcml2LT5wMnBfZ29fcHJvYmVfcmVzcF9pZSAmJiBsZW4+MCkKLQkJCQltZW1jcHkocGZyYW1lLCBwbWxtZXByaXYtPnAycF9nb19wcm9iZV9yZXNwX2llLAotCQkJCSAgICAgICBsZW4pOwotCQl9IGVsc2UKLQkJCWxlbiA9IGJ1aWxkX3Byb2JlX3Jlc3BfcDJwX2llMjNhKHB3ZGluZm8sIHBmcmFtZSk7Ci0KLQkJcGZyYW1lICs9IGxlbjsKLQkJcGF0dHJpYi0+cGt0bGVuICs9IGxlbjsKLQotCQlpZiAodHJ1ZSA9PSBwd2RpbmZvLT53ZmRfaW5mby0+d2ZkX2VuYWJsZSkgewotCQkJbGVuID0gYnVpbGRfcHJvYmVfcmVzcF93ZmRfaWUocHdkaW5mbywgcGZyYW1lLCAwKTsKLQkJfSBlbHNlIHsKLQkJCWxlbiA9IDA7Ci0JCQlpZiAocG1sbWVwcml2LT53ZmRfcHJvYmVfcmVzcF9pZSAmJgotCQkJICAgIHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWVfbGVuID4gMCkgewotCQkJCWxlbiA9IHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWVfbGVuOwotCQkJCW1lbWNweShwZnJhbWUsIHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWUsCi0JCQkJICAgICAgIGxlbik7Ci0JCQl9Ci0JCX0KLQkJcGZyYW1lICs9IGxlbjsKLQkJcGF0dHJpYi0+cGt0bGVuICs9IGxlbjsKLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKIAogCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKQEAgLTU4MTcsMTUgKzI4MjUsMTQgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgX2lzc3VlX3Byb2JlcmVxMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcHNzaWQsIHU4ICpkYSwgaW50IHdhaXRfYWNrKQorc3RhdGljIGludCBfaXNzdWVfcHJvYmVyZXEoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpwc3NpZCwgdTggKmRhLCBpbnQgd2FpdF9hY2spCiB7CiAJaW50IHJldCA9IF9GQUlMOwogCXN0cnVjdCB4bWl0X2ZyYW1lCQkqcG1nbnRmcmFtZTsKIAlzdHJ1Y3QgcGt0X2F0dHJpYgkJKnBhdHRyaWI7CiAJdW5zaWduZWQgY2hhcgkJCSpwZnJhbWU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIJKnB3bGFuaGRyOwotCXVuc2lnbmVkIHNob3J0CQkqZmN0cmw7CiAJdW5zaWduZWQgY2hhcgkJCSptYWM7CiAJdW5zaWduZWQgY2hhcgkJCWJzc3JhdGVbTnVtUmF0ZXNdOwogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7CkBAIC01ODM1LDkgKzI4NDIsMTAgQEAKIAl1OAliY19hZGRyW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CiAKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9ub3RpY2VfLAotCQkgKCIraXNzdWVfcHJvYmVyZXEyM2FcbiIpKTsKKwkJICgiKyVzXG4iLCBfX2Z1bmNfXykpOwogCi0JaWYgKChwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdikpID09IE5VTEwpCisJcG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpOworCWlmICghcG1nbnRmcmFtZSkKIAkJZ290byBleGl0OwogCiAJLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwpAQCAtNTg1MSw4ICsyODU5LDggQEAKIAogCW1hYyA9IG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KTsKIAotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwogCiAJaWYgKGRhKSB7CiAJCS8qCXVuaWNhc3QgcHJvYmUgcmVxdWVzdCBmcmFtZSAqLwpAQCAtNTg2NiwzMCArMjg3NCwzMSBAQAogCiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgbWFjKTsKIAotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKKwlwd2xhbmhkci0+c2VxX2N0cmwgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU05fVE9fU0VRKHBtbG1lZXh0LT5tZ250X3NlcSkpOworCiAJcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9QUk9CRVJFUSk7CiAKIAlwZnJhbWUgKz0gc2l6ZW9mIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAJcGF0dHJpYi0+cGt0bGVuID0gc2l6ZW9mIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAKIAlpZiAocHNzaWQpCi0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfU1NJRF9JRV8sIHBzc2lkLT5zc2lkX2xlbiwKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX1NTSUQsIHBzc2lkLT5zc2lkX2xlbiwKIAkJCQkgICAgICAgcHNzaWQtPnNzaWQsICZwYXR0cmliLT5wa3RsZW4pOwogCWVsc2UKLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TU0lEX0lFXywgMCwgTlVMTCwKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX1NTSUQsIDAsIE5VTEwsCiAJCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwogCiAJZ2V0X3JhdGVfc2V0MjNhKHBhZGFwdGVyLCBic3NyYXRlLCAmYnNzcmF0ZV9sZW4pOwogCiAJaWYgKGJzc3JhdGVfbGVuID4gOCkgewotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1NVUFBPUlRFRFJBVEVTX0lFXywgOCwKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX1NVUFBfUkFURVMsIDgsCiAJCQkJICAgICAgIGJzc3JhdGUsICZwYXR0cmliLT5wa3RsZW4pOwotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX0VYVF9TVVBQT1JURURSQVRFU19JRV8sCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUywKIAkJCQkgICAgICAgKGJzc3JhdGVfbGVuIC0gOCksIChic3NyYXRlICsgOCksCiAJCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwogCX0gZWxzZSB7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfU1VQUE9SVEVEUkFURVNfSUVfLAorCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1VQUF9SQVRFUywKIAkJCQkgICAgICAgYnNzcmF0ZV9sZW4sIGJzc3JhdGUsICZwYXR0cmliLT5wa3RsZW4pOwogCX0KIApAQCAtNTkxNywyMyArMjkyNiwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWlubGluZSB2b2lkIGlzc3VlX3Byb2JlcmVxMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcHNzaWQsIHU4ICpkYSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3N1ZV9wcm9iZXJlcShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJCSAgc3RydWN0IGNmZzgwMjExX3NzaWQgKnBzc2lkLCB1OCAqZGEpCiB7Ci0JX2lzc3VlX3Byb2JlcmVxMjNhKHBhZGFwdGVyLCBwc3NpZCwgZGEsIGZhbHNlKTsKKwlfaXNzdWVfcHJvYmVyZXEocGFkYXB0ZXIsIHBzc2lkLCBkYSwgZmFsc2UpOwogfQogCi1pbnQgaXNzdWVfcHJvYmVyZXEyM2FfZXgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgICAgc3RydWN0IGNmZzgwMjExX3NzaWQgKnBzc2lkLCB1OCAqZGEsCi0JCSAgICAgIGludCB0cnlfY250LCBpbnQgd2FpdF9tcykKK3N0YXRpYyBpbnQgaXNzdWVfcHJvYmVyZXFfZXgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGNmZzgwMjExX3NzaWQgKnBzc2lkLCB1OCAqZGEsCisJCQkgICAgIGludCB0cnlfY250LCBpbnQgd2FpdF9tcykKIHsKIAlpbnQgcmV0OwogCWludCBpID0gMDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKIAogCWRvIHsKLQkJcmV0ID0gX2lzc3VlX3Byb2JlcmVxMjNhKHBhZGFwdGVyLCBwc3NpZCwgZGEsCi0JCQkJCSB3YWl0X21zID4gMCA/IHRydWUgOiBmYWxzZSk7CisJCXJldCA9IF9pc3N1ZV9wcm9iZXJlcShwYWRhcHRlciwgcHNzaWQsIGRhLAorCQkJCSAgICAgIHdhaXRfbXMgPiAwID8gdHJ1ZSA6IGZhbHNlKTsKIAogCQlpKys7CiAKQEAgLTU5NTIsMTQgKzI5NjEsMTUgQEAKIAogCWlmICh0cnlfY250ICYmIHdhaXRfbXMpIHsKIAkJaWYgKGRhKQotCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHRvICJNQUNfRk1UIiwgY2g6JXUlcywgJWQvJWQgIgotCQkJCSAgImluICV1IG1zXG4iLAlGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJCURCR184NzIzQSgiJXMoJXMpOiB0byAiTUFDX0ZNVCIsIGNoOiV1JXMsICVkLyVkICIKKwkJCQkgICJpbiAldSBtc1xuIiwJX19mdW5jX18sCisJCQkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKIAkJCQkgIE1BQ19BUkcoZGEpLCBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpLAogCQkJCSAgcmV0ID09IF9TVUNDRVNTPyIsIGFja2VkIjoiIiwgaSwgdHJ5X2NudCwKIAkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CiAJCWVsc2UKLQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiwgY2g6JXUlcywgJWQvJWQgaW4gJXUgbXNcbiIsCi0JCQkJICBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJCURCR184NzIzQSgiJXMoJXMpOiwgY2g6JXUlcywgJWQvJWQgaW4gJXUgbXNcbiIsCisJCQkJICBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsCiAJCQkJICBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpLAogCQkJCSAgcmV0ID09IF9TVUNDRVNTPyIsIGFja2VkIjoiIiwgaSwgdHJ5X2NudCwKIAkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CkBAIC01OTY5LDE0ICsyOTc5LDEzIEBACiB9CiAKIC8qICBpZiBwc3RhID09IE5VTEwsIGluZGlhdGUgd2UgYXJlIHN0YXRpb24oY2xpZW50KSBub3cuLi4gKi8KLXZvaWQgaXNzdWVfYXV0aDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEsCi0JCSAgIHVuc2lnbmVkIHNob3J0IHN0YXR1cykKK3N0YXRpYyB2b2lkIGlzc3VlX2F1dGgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzKQogewogCXN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lOwogCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliOwogCXVuc2lnbmVkIGNoYXIgKnBmcmFtZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdW5zaWduZWQgc2hvcnQgKmZjdHJsOwogCXVuc2lnbmVkIGludCB2YWwzMjsKIAl1bnNpZ25lZCBzaG9ydCB2YWwxNjsKIAlpbnQgdXNlX3NoYXJlZF9rZXkgPSAwOwpAQCAtNTk4NCw3ICsyOTkzLDggQEAKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCi0JaWYgKChwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdikpID09IE5VTEwpCisJcG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpOworCWlmICghcG1nbnRmcmFtZSkKIAkJcmV0dXJuOwogCiAJLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwpAQCAtNTk5NiwxMiArMzAwNiwxMSBAQAogCXBmcmFtZSA9ICh1OCAqKShwbWdudGZyYW1lLT5idWZfYWRkcikgKyBUWERFU0NfT0ZGU0VUOwogCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwogCi0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKmZjdHJsID0gMDsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKKwlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOworCXB3bGFuaGRyLT5zZXFfY3RybCA9CisJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TTl9UT19TRVEocG1sbWVleHQtPm1nbnRfc2VxKSk7CiAJcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9BVVRIKTsKIAogCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CkBAIC02MDQ1LDcgKzMwNTQsNyBAQAogCQkvKiAgYWRkZWQgY2hhbGxlbmdpbmcgdGV4dC4uLiAqLwogCQlpZiAoKHBzdGEtPmF1dGhfc2VxID09IDIpICYmCiAJCSAgICAocHN0YS0+c3RhdGUgJiBXSUZJX0ZXX0FVVEhfU1RBVEUpICYmICh1c2Vfc2hhcmVkX2tleSA9PSAxKSkKLQkJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfQ0hMR0VUWFRfSUVfLCAxMjgsCisJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfQ0hBTExFTkdFLCAxMjgsCiAJCQkJCSAgICAgICBwc3RhLT5jaGdfdHh0LCAmcGF0dHJpYi0+cGt0bGVuKTsKICNlbmRpZgogCX0gZWxzZSB7CkBAIC02MDc5LDcgKzMwODgsNyBAQAogCQkJCQkJICAgICAodW5zaWduZWQgY2hhciAqKSZ2YWwzMiwKIAkJCQkJCSAgICAgJnBhdHRyaWItPnBrdGxlbik7CiAKLQkJCXBhdHRyaWItPml2X2xlbiA9IDQ7CisJCQlwYXR0cmliLT5pdl9sZW4gPSBJRUVFODAyMTFfV0VQX0lWX0xFTjsKIAkJfQogCiAJCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCBfQVVUSF9BTEdNX05VTV8sCkBAIC02MTA0LDE3ICszMTEzLDE4IEBACiAJCWlmICgocG1sbWVpbmZvLT5hdXRoX3NlcSA9PSAzKSAmJgogCQkgICAgKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FVVEhfU1RBVEUpICYmCiAJCSAgICAodXNlX3NoYXJlZF9rZXkgPT0gMSkpIHsKLQkJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfQ0hMR0VUWFRfSUVfLCAxMjgsCisJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfQ0hBTExFTkdFLCAxMjgsCiAJCQkJCSAgICAgICBwbWxtZWluZm8tPmNoZ190eHQsCiAJCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKIAotCQkJU2V0UHJpdmFjeShmY3RybCk7CisJCQlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCB8PQorCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAkJCXBhdHRyaWItPmhkcmxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAKLQkJCXBhdHRyaWItPmVuY3J5cHQgPSBfV0VQNDBfOworCQkJcGF0dHJpYi0+ZW5jcnlwdCA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOwogCi0JCQlwYXR0cmliLT5pY3ZfbGVuID0gNDsKKwkJCXBhdHRyaWItPmljdl9sZW4gPSBJRUVFODAyMTFfV0VQX0lDVl9MRU47CiAKIAkJCXBhdHRyaWItPnBrdGxlbiArPSBwYXR0cmliLT5pY3ZfbGVuOwogCQl9CkBAIC02MTI5LDI5ICszMTM5LDI3IEBACiAJcmV0dXJuOwogfQogCi12b2lkIGlzc3VlX2Fzb2Nyc3AyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAotCQkgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGF0LCBpbnQgcGt0X3R5cGUpCi17CiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCitzdGF0aWMgdm9pZCBpc3N1ZV9hc3NvY3JzcChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMsCisJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGF0LCB1MTYgcGt0X3R5cGUpCit7CiAJc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwogCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliOwotCXVuc2lnbmVkIGNoYXIgKnBidWYsICpwZnJhbWU7CisJdW5zaWduZWQgY2hhciAqcGZyYW1lOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcG5ldHdvcmsgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOworCWNvbnN0IHU4ICpwOwogCXU4ICppZSA9IHBuZXR3b3JrLT5JRXM7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JdTMyIHdmZGllbGVuID0gMDsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwogCiAJREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOwogCi0JaWYgKChwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdikpID09IE5VTEwpCisJcG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpOworCWlmICghcG1nbnRmcmFtZSkKIAkJcmV0dXJuOwogCiAJLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwpAQCAtNjE2MywxOCArMzE3MSwxNiBAQAogCXBmcmFtZSA9ICh1OCAqKShwbWdudGZyYW1lLT5idWZfYWRkcikgKyBUWERFU0NfT0ZGU0VUOwogCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwogCi0JcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPSAwOworCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBwa3RfdHlwZSk7CiAKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBwc3RhdC0+aHdhZGRyKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSk7CiAKLQlTZXRTZXFOdW0ocHdsYW5oZHIsIHBtbG1lZXh0LT5tZ250X3NlcSk7CisJcHdsYW5oZHItPnNlcV9jdHJsID0KKwkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NOX1RPX1NFUShwbWxtZWV4dC0+bWdudF9zZXEpKTsKKwogCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCWlmICgocGt0X3R5cGUgPT0gV0lGSV9BU1NPQ1JTUCkgfHwgKHBrdF90eXBlID09IFdJRklfUkVBU1NPQ1JTUCkpCi0JCVNldEZyYW1lU3ViVHlwZShwd2xhbmhkciwgcGt0X3R5cGUpOwotCWVsc2UKLQkJcmV0dXJuOwogCiAJcGF0dHJpYi0+aGRybGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlwYXR0cmliLT5wa3RsZW4gKz0gcGF0dHJpYi0+aGRybGVuOwpAQCAtNjE5Niw3MCArMzIwMiw3MSBAQAogCQkJCSAgICAgJnBhdHRyaWItPnBrdGxlbik7CiAKIAlpZiAocHN0YXQtPmJzc3JhdGVsZW4gPD0gOCkgewotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1NVUFBPUlRFRFJBVEVTX0lFXywKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX1NVUFBfUkFURVMsCiAJCQkJICAgICAgIHBzdGF0LT5ic3NyYXRlbGVuLCBwc3RhdC0+YnNzcmF0ZXNldCwKIAkJCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7CiAJfSBlbHNlIHsKLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9TVVBQT1JURURSQVRFU19JRV8sIDgsCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LAogCQkJCSAgICAgICBwc3RhdC0+YnNzcmF0ZXNldCwgJnBhdHRyaWItPnBrdGxlbik7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTLAogCQkJCSAgICAgICBwc3RhdC0+YnNzcmF0ZWxlbiAtIDgsCiAJCQkJICAgICAgIHBzdGF0LT5ic3NyYXRlc2V0ICsgOCwgJnBhdHRyaWItPnBrdGxlbik7CiAJfQogCi0JaWYgKChwc3RhdC0+ZmxhZ3MgJiBXTEFOX1NUQV9IVCkgJiYgKHBtbG1lcHJpdi0+aHRwcml2Lmh0X29wdGlvbikpIHsKLQkJdWludCBpZV9sZW4gPSAwOwotCisJaWYgKHBzdGF0LT5mbGFncyAmIFdMQU5fU1RBX0hUICYmIHBtbG1lcHJpdi0+aHRwcml2Lmh0X29wdGlvbikgewogCQkvKiBGSUxMIEhUIENBUCBJTkZPIElFICovCiAJCS8qIHAgPSBob3N0YXBkX2VpZF9odF9jYXBhYmlsaXRpZXNfaW5mbyhoYXBkLCBwKTsgKi8KLQkJcGJ1ZiA9IHJ0d19nZXRfaWUyM2EoaWUgKyBfQkVBQ09OX0lFX09GRlNFVF8sCi0JCQkJICAgICBfSFRfQ0FQQUJJTElUWV9JRV8sICZpZV9sZW4sCi0JCQkJICAgICBwbmV0d29yay0+SUVMZW5ndGggLSBfQkVBQ09OX0lFX09GRlNFVF8pOwotCQlpZiAocGJ1ZiAmJiBpZV9sZW4+MCkgewotCQkJbWVtY3B5KHBmcmFtZSwgcGJ1ZiwgaWVfbGVuICsgMik7Ci0JCQlwZnJhbWUgKz0gKGllX2xlbiArIDIpOwotCQkJcGF0dHJpYi0+cGt0bGVuICs9IChpZV9sZW4gKyAyKTsKKwkJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwKKwkJCQkgICAgIGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLAorCQkJCSAgICAgcG5ldHdvcmstPklFTGVuZ3RoIC1fQkVBQ09OX0lFX09GRlNFVF8pOworCQlpZiAocCAmJiBwWzFdKSB7CisJCQltZW1jcHkocGZyYW1lLCBwLCBwWzFdICsgMik7CisJCQlwZnJhbWUgKz0gKHBbMV0gKyAyKTsKKwkJCXBhdHRyaWItPnBrdGxlbiArPSAocFsxXSArIDIpOwogCQl9CiAKIAkJLyogRklMTCBIVCBBREQgSU5GTyBJRSAqLwogCQkvKiBwID0gaG9zdGFwZF9laWRfaHRfb3BlcmF0aW9uKGhhcGQsIHApOyAqLwotCQlwYnVmID0gcnR3X2dldF9pZTIzYShpZSArIF9CRUFDT05fSUVfT0ZGU0VUXywgX0hUX0FERF9JTkZPX0lFXywKLQkJCQkgICAgICZpZV9sZW4sCisJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX09QRVJBVElPTiwKKwkJCQkgICAgIGllICsgX0JFQUNPTl9JRV9PRkZTRVRfLAogCQkJCSAgICAgcG5ldHdvcmstPklFTGVuZ3RoIC0gX0JFQUNPTl9JRV9PRkZTRVRfKTsKLQkJaWYgKHBidWYgJiYgaWVfbGVuID4gMCkgewotCQkJbWVtY3B5KHBmcmFtZSwgcGJ1ZiwgaWVfbGVuICsgMik7Ci0JCQlwZnJhbWUgKz0gKGllX2xlbiArIDIpOwotCQkJcGF0dHJpYi0+cGt0bGVuICs9IChpZV9sZW4gKyAyKTsKKwkJaWYgKHAgJiYgcFsxXSA+IDApIHsKKwkJCW1lbWNweShwZnJhbWUsIHAsIHBbMV0gKyAyKTsKKwkJCXBmcmFtZSArPSAocFsxXSArIDIpOworCQkJcGF0dHJpYi0+cGt0bGVuICs9IChwWzFdICsgMik7CiAJCX0KIAl9CiAKIAkvKiBGSUxMIFdNTSBJRSAqLwotCWlmICgocHN0YXQtPmZsYWdzICYgV0xBTl9TVEFfV01FKSAmJiBwbWxtZXByaXYtPnFvc3ByaXYucW9zX29wdGlvbikgewotCQl1aW50IGllX2xlbiA9IDA7CisJaWYgKHBzdGF0LT5mbGFncyAmIFdMQU5fU1RBX1dNRSAmJiBwbWxtZXByaXYtPnFvc19vcHRpb24pIHsKIAkJdW5zaWduZWQgY2hhciBXTU1fUEFSQV9JRVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCiAJCQkJCSAgICAgICAweDAxLCAweDAxfTsKKwkJaW50IGllX2xlbiA9IDA7CiAKLQkJZm9yIChwYnVmID0gaWUgKyBfQkVBQ09OX0lFX09GRlNFVF87IDsgcGJ1ZiArPSAoaWVfbGVuICsgMikpIHsKLQkJCXBidWYgPSBydHdfZ2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLAotCQkJCQkgICAgICZpZV9sZW4sIChwbmV0d29yay0+SUVMZW5ndGggLQotCQkJCQkJICAgICAgIF9CRUFDT05fSUVfT0ZGU0VUXyAtCi0JCQkJCQkgICAgICAgKGllX2xlbiArIDIpKSk7Ci0JCQlpZiAocGJ1ZiAmJiAhbWVtY21wKHBidWYgKyAyLCBXTU1fUEFSQV9JRSwgNikpIHsKLQkJCQltZW1jcHkocGZyYW1lLCBwYnVmLCBpZV9sZW4gKyAyKTsKKwkJZm9yIChwID0gaWUgKyBfQkVBQ09OX0lFX09GRlNFVF87IDsgcCArPSAoaWVfbGVuICsgMikpIHsKKwkJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywgcCwKKwkJCQkJICAgICBwbmV0d29yay0+SUVMZW5ndGggLQorCQkJCQkgICAgIF9CRUFDT05fSUVfT0ZGU0VUXyAtIChpZV9sZW4gKyAyKSk7CisJCQlpZiAocCkKKwkJCQlpZV9sZW4gPSBwWzFdOworCQkJZWxzZQorCQkJCWllX2xlbiA9IDA7CisJCQlpZiAocCAmJiAhbWVtY21wKHAgKyAyLCBXTU1fUEFSQV9JRSwgNikpIHsKKwkJCQltZW1jcHkocGZyYW1lLCBwLCBpZV9sZW4gKyAyKTsKIAkJCQlwZnJhbWUgKz0gKGllX2xlbiArIDIpOwogCQkJCXBhdHRyaWItPnBrdGxlbiArPSAoaWVfbGVuICsgMik7CiAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCghcGJ1ZikgfHwgKGllX2xlbiA9PSAwKSkKKwkJCWlmICghcCB8fCBpZV9sZW4gPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCX0KIAogCWlmIChwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciA9PSBIVF9JT1RfUEVFUl9SRUFMVEVLKSB7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfVkVORE9SX1NQRUNJRklDX0lFXywgNiwKLQkJCQkgICAgICAgUkVBTFRFS185NkJfSUUyM0EsICZwYXR0cmliLT5wa3RsZW4pOworCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLCA2LAorCQkJCSAgICAgICBSRUFMVEVLXzk2Ql9JRSwgJnBhdHRyaWItPnBrdGxlbik7CiAJfQogCiAJLyogYWRkIFdQUyBJRSBpZSBmb3Igd3BzIDIuMCAqLwpAQCAtNjI3Miw0NyArMzI3OSwzMiBAQAogCQlwYXR0cmliLT5wa3RsZW4gKz0gcG1sbWVwcml2LT53cHNfYXNzb2NfcmVzcF9pZV9sZW47CiAJfQogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykgJiYKLQkgICAgcHdkaW5mby0+d2ZkX2luZm8tPndmZF9lbmFibGUpIHsKLQkJd2ZkaWVsZW4gPSBidWlsZF9hc3NvY19yZXNwX3dmZF9pZShwd2RpbmZvLCBwZnJhbWUpOwotCQlwZnJhbWUgKz0gd2ZkaWVsZW47Ci0JCXBhdHRyaWItPnBrdGxlbiArPSB3ZmRpZWxlbjsKLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKIAogCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKLXZvaWQgaXNzdWVfYXNzb2NyZXEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3N0YXRpYyB2b2lkIGlzc3VlX2Fzc29jcmVxKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJaW50IHJldCA9IF9GQUlMOwogCXN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lOwogCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliOwotCXVuc2lnbmVkIGNoYXIgKnBmcmFtZSwgKnA7CisJdW5zaWduZWQgY2hhciAqcGZyYW1lOworCWNvbnN0IHU4ICpwOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7Ci0JdW5zaWduZWQgc2hvcnQgdmFsMTY7Ci0JdW5zaWduZWQgaW50IGksIGosIGllX2xlbiwgaW5kZXggPSAwOworCXVuc2lnbmVkIGludCBpLCBqLCBpbmRleCA9IDA7CiAJdW5zaWduZWQgY2hhciByZl90eXBlLCBic3NyYXRlW051bVJhdGVzXSwgc3RhX2Jzc3JhdGVbTnVtUmF0ZXNdOwotCXN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICpwSUU7CiAJc3RydWN0IHJlZ2lzdHJ5X3ByaXYgKnByZWdwcml2ID0gJnBhZGFwdGVyLT5yZWdpc3RyeXByaXY7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0JaW50IGJzc3JhdGVfbGVuID0gMCwgc3RhX2Jzc3JhdGVfbGVuID0gMDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQl1OCBwMnBpZVsyNTVdID0geyAweDAwIH07Ci0JdTE2IHAycGllbGVuID0gMDsKLQl1MzIgd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJaW50IGJzc3JhdGVfbGVuID0gMCwgc3RhX2Jzc3JhdGVfbGVuID0gMCwgcGllX2xlbiwgYmNuX2ZpeGVkX3NpemU7CisJdTggKnBpZTsKIAotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQorCXBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KTsKKwlpZiAoIXBtZ250ZnJhbWUpCiAJCWdvdG8gZXhpdDsKIAogCS8qIHVwZGF0ZSBhdHRyaWJ1dGUgKi8KQEAgLTYzMjEsMzggKzMzMTMsMzggQEAKIAogCW1lbXNldChwbWdudGZyYW1lLT5idWZfYWRkciwgMCwgV0xBTkhEUl9PRkZTRVQgKyBUWERFU0NfT0ZGU0VUKTsKIAotCXBmcmFtZSA9ICh1OCAqKShwbWdudGZyYW1lLT5idWZfYWRkcikgKyBUWERFU0NfT0ZGU0VUOworCXBmcmFtZSA9ICh1OCAqKXBtZ250ZnJhbWUtPmJ1Zl9hZGRyICsgVFhERVNDX09GRlNFVDsKIAlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKIAotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOworCiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgZ2V0X215X2Jzc2lkMjNhKCZwbWxtZWluZm8tPm5ldHdvcmspKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSk7CiAKLQlTZXRTZXFOdW0ocHdsYW5oZHIsIHBtbG1lZXh0LT5tZ250X3NlcSk7CisJcHdsYW5oZHItPnNlcV9jdHJsID0KKwkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NOX1RPX1NFUShwbWxtZWV4dC0+bWdudF9zZXEpKTsKIAlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FTU09DUkVRKTsKIAogCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAKIAkvKiBjYXBzICovCi0JbWVtY3B5KHBmcmFtZSwgcnR3X2dldF9jYXBhYmlsaXR5MjNhX2Zyb21faWUocG1sbWVpbmZvLT5uZXR3b3JrLklFcyksCi0JICAgICAgIDIpOworCW1lbWNweShwZnJhbWUsCisJICAgICAgIHJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKHBtbG1laW5mby0+bmV0d29yay5JRXMpLCAyKTsKIAogCXBmcmFtZSArPSAyOwogCXBhdHRyaWItPnBrdGxlbiArPSAyOwogCiAJLyogbGlzdGVuIGludGVydmFsICovCiAJLyogdG9kbzogbGlzdGVuIGludGVydmFsIGZvciBwb3dlciBzYXZpbmcgKi8KLQl2YWwxNiA9IGNwdV90b19sZTE2KDMpOwotCW1lbWNweShwZnJhbWUsICh1bnNpZ25lZCBjaGFyICopJnZhbDE2LCAyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoMywgcGZyYW1lKTsKIAlwZnJhbWUgKz0gMjsKIAlwYXR0cmliLT5wa3RsZW4gKz0gMjsKIAogCS8qIFNTSUQgKi8KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1NTSURfSUVfLAorCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9TU0lELAogCQkJICAgICAgIHBtbG1laW5mby0+bmV0d29yay5Tc2lkLnNzaWRfbGVuLAogCQkJICAgICAgIHBtbG1laW5mby0+bmV0d29yay5Tc2lkLnNzaWQsICZwYXR0cmliLT5wa3RsZW4pOwogCkBAIC02Mzg3LDcgKzMzNzksNyBAQAogCQkJICAgICBIYW5kbGluayBXU0ctNDAwMCBBUCAqLwogCQkJaWYgKChwbWxtZWluZm8tPm5ldHdvcmsuU3VwcG9ydGVkUmF0ZXNbaV0gfAogCQkJICAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSA9PQotCQkJICAgIChzdGFfYnNzcmF0ZVtqXXxJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSkgeworCQkJICAgIChzdGFfYnNzcmF0ZVtqXSB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spKSB7CiAJCQkJLyogREJHXzg3MjNBKCJtYXRjaCBpID0gJWQsIGogPSVkXG4iLCBpLCBqKTsgKi8KIAkJCQlicmVhazsKIAkJCX0KQEAgLTY0MTQsMzMgKzM0MDYsMzMgQEAKIAl9CiAKIAlpZiAoYnNzcmF0ZV9sZW4gPiA4KSB7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfU1VQUE9SVEVEUkFURVNfSUVfLCA4LAorCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1VQUF9SQVRFUywgOCwKIAkJCQkgICAgICAgYnNzcmF0ZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTLAogCQkJCSAgICAgICAoYnNzcmF0ZV9sZW4gLSA4KSwgKGJzc3JhdGUgKyA4KSwKIAkJCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7CiAJfSBlbHNlCi0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfU1VQUE9SVEVEUkFURVNfSUVfLAorCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1VQUF9SQVRFUywKIAkJCQkgICAgICAgYnNzcmF0ZV9sZW4sIGJzc3JhdGUsICZwYXR0cmliLT5wa3RsZW4pOwogCiAJLyogUlNOICovCi0JcCA9IHJ0d19nZXRfaWUyM2EoKHBtbG1laW5mby0+bmV0d29yay5JRXMgKwotCQkJICAgc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpKSwgX1JTTl9JRV8yXywKLQkJCSAgJmllX2xlbiwgKHBtbG1laW5mby0+bmV0d29yay5JRUxlbmd0aCAtCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKSkpOworCWJjbl9maXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKKworCXBpZSA9IHBtbG1laW5mby0+bmV0d29yay5JRXMgKyBiY25fZml4ZWRfc2l6ZTsKKwlwaWVfbGVuID0gcG1sbWVpbmZvLT5uZXR3b3JrLklFTGVuZ3RoIC0gYmNuX2ZpeGVkX3NpemU7CisKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9SU04sIHBpZSwgcGllX2xlbik7CiAJaWYgKHApCi0JCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfUlNOX0lFXzJfLCBpZV9sZW4sIChwICsgMiksCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9SU04sIHBbMV0sIHAgKyAyLAogCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKIAogCS8qIEhUIGNhcHMgKi8KIAlpZiAocGFkYXB0ZXItPm1sbWVwcml2Lmh0cHJpdi5odF9vcHRpb24gPT0gdHJ1ZSkgewotCQlwID0gcnR3X2dldF9pZTIzYSgocG1sbWVpbmZvLT5uZXR3b3JrLklFcyArCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpKSwKLQkJCQkgIF9IVF9DQVBBQklMSVRZX0lFXywgJmllX2xlbiwKLQkJCQkgIChwbWxtZWluZm8tPm5ldHdvcmsuSUVMZW5ndGggLQotCQkJCSAgIHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKSkpOwotCQlpZiAoKHAgIT0gTlVMTCkgJiYgKCEoaXNfYXBfaW5fdGtpcDIzYShwYWRhcHRlcikpKSkgewotCQkJbWVtY3B5KCZwbWxtZWluZm8tPkhUX2NhcHMsIChwICsgMiksCisJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksIHBpZSwgcGllX2xlbik7CisKKwkJaWYgKHAgJiYgIWlzX2FwX2luX3RraXAyM2EocGFkYXB0ZXIpKSB7CisJCQltZW1jcHkoJnBtbG1laW5mby0+SFRfY2FwcywgcCArIDIsCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBIVF9jYXBzX2VsZW1lbnQpKTsKIAogCQkJLyogdG8gZGlzYWJsZSA0ME0gSHogc3VwcG9ydCB3aGlsZSBnZF9id180ME1Iel9lbiA9IDAgKi8KQEAgLTY0NTQsMTUgKzM0NDYsMTMgQEAKIAkJCXBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkhUX2NhcHNfaW5mbyB8PQogCQkJCTB4MDAwYzsKIAotCQkJcnR3MjNhX2hhbF9nZXRfaHdyZWcocGFkYXB0ZXIsIEhXX1ZBUl9SRl9UWVBFLAotCQkJCQkgICAgICh1OCAqKSgmcmZfdHlwZSkpOworCQkJcmZfdHlwZSA9IHJ0bDg3MjNhX2dldF9yZl90eXBlKHBhZGFwdGVyKTsKIAkJCS8qIHN3aXRjaCAocHJlZ3ByaXYtPnJmX2NvbmZpZykgKi8KLQkJCXN3aXRjaCAocmZfdHlwZSkKLQkJCXsKKwkJCXN3aXRjaCAocmZfdHlwZSkgewogCQkJY2FzZSBSRl8xVDFSOgotCisJCQkJLyogUlggU1RCQyBPbmUgc3BhdGlhbCBzdHJlYW0gKi8KIAkJCQlpZiAocHJlZ3ByaXYtPnJ4X3N0YmMpCi0JCQkJCXBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkhUX2NhcHNfaW5mbyB8PSBjcHVfdG9fbGUxNigweDAxMDApOy8qIFJYIFNUQkMgT25lIHNwYXRpYWwgc3RyZWFtICovCisJCQkJCXBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkhUX2NhcHNfaW5mbyB8PSBjcHVfdG9fbGUxNigweDAxMDApOwogCiAJCQkJbWVtY3B5KHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50Lk1DU19yYXRlLCBNQ1NfcmF0ZV8xUjIzQSwgMTYpOwogCQkJCWJyZWFrOwpAQCAtNjQ3MCwxOCArMzQ2MCwxNyBAQAogCQkJY2FzZSBSRl8yVDJSOgogCQkJY2FzZSBSRl8xVDJSOgogCQkJZGVmYXVsdDoKLQogCQkJCS8qIGVuYWJsZSBmb3IgMi40LzUgR0h6ICovCi0JCQkJaWYgKChwcmVncHJpdi0+cnhfc3RiYyA9PSAweDMpIHx8Ci0JCQkJICAgICgocG1sbWVleHQtPmN1cl93aXJlbGVzc19tb2RlICYKLQkJCQkgICAgICBXSVJFTEVTU18xMV8yNE4pICYmCisJCQkJaWYgKHByZWdwcml2LT5yeF9zdGJjID09IDB4MyB8fAorCQkJCSAgICAocG1sbWVleHQtPmN1cl93aXJlbGVzc19tb2RlICYKKwkJCQkgICAgIFdJUkVMRVNTXzExXzI0TiAmJgogCQkJCSAgICAgLyogZW5hYmxlIGZvciAyLjRHSHogKi8KLQkJCQkgICAgIChwcmVncHJpdi0+cnhfc3RiYyA9PSAweDEpKSB8fAotCQkJCSAgICAoKHBtbG1lZXh0LT5jdXJfd2lyZWxlc3NfbW9kZSAmCi0JCQkJICAgICAgV0lSRUxFU1NfMTFfNU4pICYmCi0JCQkJICAgICAocHJlZ3ByaXYtPnJ4X3N0YmMgPT0gMHgyKSkgfHwKKwkJCQkgICAgIHByZWdwcml2LT5yeF9zdGJjID09IDB4MSkgfHwKKwkJCQkgICAgKHBtbG1lZXh0LT5jdXJfd2lyZWxlc3NfbW9kZSAmCisJCQkJICAgICBXSVJFTEVTU18xMV81TiAmJgorCQkJCSAgICAgcHJlZ3ByaXYtPnJ4X3N0YmMgPT0gMHgyKSB8fAogCQkJCSAgICAvKiBlbmFibGUgZm9yIDVHSHogKi8KLQkJCQkgICAgKHByZWdwcml2LT53aWZpX3NwZWMgPT0gMSkpIHsKKwkJCQkgICAgcHJlZ3ByaXYtPndpZmlfc3BlYyA9PSAxKSB7CiAJCQkJCURCR184NzIzQSgiZGVjbGFyZSBzdXBwb3J0aW5nIFJYICIKIAkJCQkJCSAgIlNUQkNcbiIpOwogCQkJCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8gfD0gY3B1X3RvX2xlMTYoMHgwMjAwKTsvKiBSWCBTVEJDIHR3byBzcGF0aWFsIHN0cmVhbSAqLwpAQCAtNjQ5Miw0NCArMzQ4MSw0MCBAQAogCQkJcG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfY2Fwc19pbmZvID0KIAkJCQljcHVfdG9fbGUxNihwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8pOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCi0JCQlpZiAoQlRfMUFudChwYWRhcHRlcikgPT0gdHJ1ZSkgeworCQkJaWYgKHJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpICYmCisJCQkgICAgcnRsODcyM2FfQlRfdXNpbmdfYW50ZW5uYV8xKHBhZGFwdGVyKSkgewogCQkJCS8qICBzZXQgdG8gOEsgKi8KIAkJCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5BTVBEVV9wYXJhICY9ICh1OCl+SUVFRTgwMjExX0hUX0FNUERVX1BBUk1fRkFDVE9SOwogLyoJCQkJcG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuQU1QRFVfcGFyYSB8PSBNQVhfQU1QRFVfRkFDVE9SXzhLICovCiAJCQl9Ci0jZW5kaWYKIAotCQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9IVF9DQVBBQklMSVRZX0lFXywKLQkJCQkJICAgICAgIGllX2xlbiwKLQkJCQkJICAgICAgICh1OCAqKSZwbWxtZWluZm8tPkhUX2NhcHMsCisJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwKKwkJCQkJICAgICAgIHBbMV0sICh1OCAqKSZwbWxtZWluZm8tPkhUX2NhcHMsCiAJCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKIAkJfQogCX0KIAogCS8qIHZlbmRvciBzcGVjaWZpYyBJRSwgc3VjaCBhcyBXUEEsIFdNTSwgV1BTICovCi0JZm9yIChpID0gc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMl8xMV9maXhlZF9pZXMpOwotCSAgICAgaSA8IHBtbG1laW5mby0+bmV0d29yay5JRUxlbmd0aDspIHsKLQkJcElFID0gKHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICopCi0JCQkocG1sbWVpbmZvLT5uZXR3b3JrLklFcyArIGkpOworCWZvciAoaSA9IGJjbl9maXhlZF9zaXplOyAgaSA8IHBtbG1laW5mby0+bmV0d29yay5JRUxlbmd0aDspIHsKKwkJcCA9IHBtbG1laW5mby0+bmV0d29yay5JRXMgKyBpOwogCi0JCXN3aXRjaCAocElFLT5FbGVtZW50SUQpCi0JCXsKLQkJY2FzZSBfVkVORE9SX1NQRUNJRklDX0lFXzoKLQkJCWlmICghbWVtY21wKHBJRS0+ZGF0YSwgUlRXX1dQQV9PVUkyM0EsIDQpIHx8Ci0JCQkgICAgIW1lbWNtcChwSUUtPmRhdGEsIFdNTV9PVUkyM0EsIDQpIHx8Ci0JCQkgICAgIW1lbWNtcChwSUUtPmRhdGEsIFdQU19PVUkyM0EsIDQpKSB7CisJCXN3aXRjaCAocFswXSkgeworCQljYXNlIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzoKKwkJCWlmICghbWVtY21wKHAgKyAyLCBSVFdfV1BBX09VSTIzQV9UWVBFLCA0KSB8fAorCQkJICAgICFtZW1jbXAocCArIDIsIFdNTV9PVUkyM0EsIDQpIHx8CisJCQkgICAgIW1lbWNtcChwICsgMiwgV1BTX09VSTIzQSwgNCkpIHsKKwkJCQl1OCBwbGVuID0gcFsxXTsKIAkJCQlpZiAoIXBhZGFwdGVyLT5yZWdpc3RyeXByaXYud2lmaV9zcGVjKSB7CiAJCQkJCS8qIENvbW1lbnRlZCBieSBLdXJ0IDIwMTEwNjI5ICovCiAJCQkJCS8qIEluIHNvbWUgb2xkZXIgQVBzLCBXUFMgaGFuZHNoYWtlICovCiAJCQkJCS8qIHdvdWxkIGJlIGZhaWwgaWYgd2UgYXBwZW5kIHZlbmRlcgogCQkJCQkgICBleHRlbnNpb25zIGluZm9ybWF0aW9ucyB0byBBUCAqLwotCQkJCQlpZiAoIW1lbWNtcChwSUUtPmRhdGEsIFdQU19PVUkyM0EsIDQpKQotCQkJCQkJcElFLT5MZW5ndGggPSAxNDsKKwkJCQkJaWYgKCFtZW1jbXAocCArIDIsIFdQU19PVUkyM0EsIDQpKQorCQkJCQkJcGxlbiA9IDE0OwogCQkJCX0KIAkJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwKLQkJCQkJCSAgICAgICBfVkVORE9SX1NQRUNJRklDX0lFXywKLQkJCQkJCSAgICAgICBwSUUtPkxlbmd0aCwgcElFLT5kYXRhLAorCQkJCQkJICAgICAgIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywKKwkJCQkJCSAgICAgICBwbGVuLCBwICsgMiwKIAkJCQkJCSAgICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNjUzOCwxOTcgKzM1MjMsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaSArPSAocElFLT5MZW5ndGggKyAyKTsKKwkJaSArPSBwWzFdICsgMjsKIAl9CiAKIAlpZiAocG1sbWVpbmZvLT5hc3NvY19BUF92ZW5kb3IgPT0gSFRfSU9UX1BFRVJfUkVBTFRFSykKLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCA2LAotCQkJCSAgICAgICBSRUFMVEVLXzk2Ql9JRTIzQSwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCi0JaWYgKHdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpLT5wMnBfZW5hYmxlZCkgewotCQlpZiAocG1sbWVwcml2LT5wMnBfYXNzb2NfcmVxX2llICYmCi0JCSAgICBwbWxtZXByaXYtPnAycF9hc3NvY19yZXFfaWVfbGVuPjApIHsKLQkJCW1lbWNweShwZnJhbWUsIHBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZSwKLQkJCSAgICAgICBwbWxtZXByaXYtPnAycF9hc3NvY19yZXFfaWVfbGVuKTsKLQkJCXBmcmFtZSArPSBwbWxtZXByaXYtPnAycF9hc3NvY19yZXFfaWVfbGVuOwotCQkJcGF0dHJpYi0+cGt0bGVuICs9IHBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZV9sZW47Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSAmJgotCQkgICAgIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9JRExFKSkgewotCQkJLyoJU2hvdWxkIGFkZCB0aGUgUDJQIElFIGluIHRoZSBhc3NvY2lhdGlvbgotCQkJCXJlcXVlc3QgZnJhbWUuICovCi0JCQkvKglQMlAgT1VJICovCi0KLQkJCXAycGllbGVuID0gMDsKLQkJCXAycGllW3AycGllbGVuKytdID0gMHg1MDsKLQkJCXAycGllW3AycGllbGVuKytdID0gMHg2RjsKLQkJCXAycGllW3AycGllbGVuKytdID0gMHg5QTsKLQkJCXAycGllW3AycGllbGVuKytdID0gMHgwOTsJLyoJV0ZBIFAyUCB2MS4wICovCi0KLQkJCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMDExMDkgKi8KLQkJCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZQotCQkJCWFzc29jaWF0aW9uIHJlcXVlc3QgZnJhbWUgc2hvdWxkIGNvbnRhaW4KLQkJCQkzIFAyUCBhdHRyaWJ1dGVzICovCi0JCQkvKgkxLiBQMlAgQ2FwYWJpbGl0eSAqLwotCQkJLyoJMi4gRXh0ZW5kZWQgTGlzdGVuIFRpbWluZyAqLwotCQkJLyoJMy4gRGV2aWNlIEluZm8gKi8KLQkJCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTA1MTYgKi8KLQkJCS8qCTQuIFAyUCBJbnRlcmZhY2UgKi8KLQotCQkJLyoJUDJQIENhcGFiaWxpdHkgKi8KLQkJCS8qCVR5cGU6ICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0NBUEFCSUxJVFk7Ci0KLQkJCS8qCUxlbmd0aDogKi8KLQkJCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKLQkJCXAycGllbGVuICs9IDI7Ci0KLQkJCS8qCVZhbHVlOiAqLwotCQkJLyoJRGV2aWNlIENhcGFiaWxpdHkgQml0bWFwLCAxIGJ5dGUgKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gRE1QX1AyUF9ERVZDQVBfU1VQUE9SVDsKLQotCQkJLyoJR3JvdXAgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCQkJaWYgKHB3ZGluZm8tPnBlcnNpc3RlbnRfc3VwcG9ydGVkKQotCQkJCXAycGllW3AycGllbGVuKytdID0KLQkJCQkJUDJQX0dSUENBUF9QRVJTSVNURU5UX0dST1VQIHwKLQkJCQkJRE1QX1AyUF9HUlBDQVBfU1VQUE9SVDsKLQkJCWVsc2UKLQkJCQlwMnBpZVtwMnBpZWxlbisrXSA9IERNUF9QMlBfR1JQQ0FQX1NVUFBPUlQ7Ci0KLQkJCS8qCUV4dGVuZGVkIExpc3RlbiBUaW1pbmcgKi8KLQkJCS8qCVR5cGU6ICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0VYX0xJU1RFTl9USU1JTkc7Ci0KLQkJCS8qCUxlbmd0aDogKi8KLQkJCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDA0KTsKLQkJCXAycGllbGVuICs9IDI7Ci0KLQkJCS8qCVZhbHVlOiAqLwotCQkJLyoJQXZhaWxhYmlsaXR5IFBlcmlvZCAqLwotCQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweEZGRkYpOwotCQkJcDJwaWVsZW4gKz0gMjsKLQotCQkJLyoJQXZhaWxhYmlsaXR5IEludGVydmFsICovCi0JCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4RkZGRik7Ci0JCQlwMnBpZWxlbiArPSAyOwotCi0JCQkvKglEZXZpY2UgSW5mbyAqLwotCQkJLyoJVHlwZTogKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gUDJQX0FUVFJfREVWSUNFX0lORk87Ci0KLQkJCS8qCUxlbmd0aDogKi8KLQkJCS8qCTIxIC0+IFAyUCBEZXZpY2UgQWRkcmVzcyAoNmJ5dGVzKSArIENvbmZpZwotCQkJCU1ldGhvZHMgKDJieXRlcykgKyBQcmltYXJ5IERldmljZQotCQkJCVR5cGUgKDhieXRlcykgKi8KLQkJCS8qCSsgTnVtb2ZTZWNvbmREZXZUeXBlICgxYnl0ZSkgKyBXUFMgRGV2aWNlCi0JCQkJTmFtZSBJRCBmaWVsZCAoMmJ5dGVzKSArIFdQUyBEZXZpY2UgTmFtZQotCQkJCUxlbiBmaWVsZCAoMmJ5dGVzKSAqLwotCQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPQotCQkJCWNwdV90b19sZTE2KDIxICsgcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQkJCXAycGllbGVuICs9IDI7Ci0KLQkJCS8qCVZhbHVlOiAqLwotCQkJLyoJUDJQIERldmljZSBBZGRyZXNzICovCi0JCQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwKLQkJCSAgICAgICBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksIEVUSF9BTEVOKTsKLQkJCXAycGllbGVuICs9IEVUSF9BTEVOOwotCi0JCQkvKglDb25maWcgTWV0aG9kICovCi0JCQkvKglUaGlzIGZpZWxkIHNob3VsZCBiZSBiaWcgZW5kaWFuLgotCQkJCU5vdGVkIGJ5IFAyUCBzcGVjaWZpY2F0aW9uLiAqLwotCQkJaWYgKChwd2RpbmZvLT51aV9nb3Rfd3BzX2luZm8gPT0KLQkJCSAgICAgUDJQX0dPVF9XUFNJTkZPX1BFRVJfRElTUExBWV9QSU4pIHx8Ci0JCQkgICAgKHB3ZGluZm8tPnVpX2dvdF93cHNfaW5mbyA9PQotCQkJICAgICBQMlBfR09UX1dQU0lORk9fU0VMRl9ESVNQTEFZX1BJTikpCi0JCQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPQotCQkJCQljcHVfdG9fYmUxNihXUFNfQ09ORklHX01FVEhPRF9ESVNQTEFZKTsKLQkJCWVsc2UKLQkJCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9Ci0JCQkJCWNwdV90b19iZTE2KFdQU19DT05GSUdfTUVUSE9EX1BCQyk7Ci0KLQkJCXAycGllbGVuICs9IDI7Ci0KLQkJCS8qCVByaW1hcnkgRGV2aWNlIFR5cGUgKi8KLQkJCS8qCUNhdGVnb3J5IElEICovCi0JCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9Ci0JCQkJY3B1X3RvX2JlMTYoV1BTX1BEVF9DSURfTVVMSVRfTUVESUEpOwotCQkJcDJwaWVsZW4gKz0gMjsKLQotCQkJLyoJT1VJICovCi0JCQkqKHUzMiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTMyKFdQU09VSSk7Ci0JCQlwMnBpZWxlbiArPSA0OwotCi0JCQkvKglTdWIgQ2F0ZWdvcnkgSUQgKi8KLQkJCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0KLQkJCQljcHVfdG9fYmUxNihXUFNfUERUX1NDSURfTUVESUFfU0VSVkVSKTsKLQkJCXAycGllbGVuICs9IDI7Ci0KLQkJCS8qCU51bWJlciBvZiBTZWNvbmRhcnkgRGV2aWNlIFR5cGVzICovCi0JCQkvKglObyBTZWNvbmRhcnkgRGV2aWNlIFR5cGUgTGlzdCAqLwotCQkJcDJwaWVbcDJwaWVsZW4rK10gPSAweDAwOwotCi0JCQkvKglEZXZpY2UgTmFtZSAqLwotCQkJLyoJVHlwZTogKi8KLQkJCSoodTE2KikgKHAycGllICsgcDJwaWVsZW4pID0KLQkJCQljcHVfdG9fYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSk7Ci0JCQlwMnBpZWxlbiArPSAyOwotCi0JCQkvKglMZW5ndGg6ICovCi0JCQkqKHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9Ci0JCQkJY3B1X3RvX2JlMTYocHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQkJCXAycGllbGVuICs9IDI7Ci0KLQkJCS8qCVZhbHVlOiAqLwotCQkJbWVtY3B5KHAycGllICsgcDJwaWVsZW4sIHB3ZGluZm8tPmRldmljZV9uYW1lLAotCQkJICAgICAgIHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JCQlwMnBpZWxlbiArPSBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW47Ci0KLQkJCS8qCVAyUCBJbnRlcmZhY2UgKi8KLQkJCS8qCVR5cGU6ICovCi0JCQlwMnBpZVtwMnBpZWxlbisrXSA9IFAyUF9BVFRSX0lOVEVSRkFDRTsKLQotCQkJLyoJTGVuZ3RoOiAqLwotCQkJKih1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMEQpOwotCQkJcDJwaWVsZW4gKz0gMjsKLQotCQkJLyoJVmFsdWU6ICovCi0JCQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsCi0JCQkgICAgICAgRVRIX0FMRU4pOwkvKiBQMlAgRGV2aWNlIEFkZHJlc3MgKi8KLQkJCXAycGllbGVuICs9IEVUSF9BTEVOOwotCi0JCQkvKiBQMlAgSW50ZXJmYWNlIEFkZHJlc3MgQ291bnQgKi8KLQkJCXAycGllW3AycGllbGVuKytdID0gMTsKLQotCQkJbWVtY3B5KHAycGllICsgcDJwaWVsZW4sIHB3ZGluZm8tPmRldmljZV9hZGRyLAotCQkJICAgICAgIEVUSF9BTEVOKTsJLyogUDJQIEludGVyZmFjZSBBZGRyZXNzIExpc3QgKi8KLQkJCXAycGllbGVuICs9IEVUSF9BTEVOOwotCi0JCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sCi0JCQkJCSAgICAgICBwMnBpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKilwMnBpZSwKLQkJCQkJICAgICAgICZwYXR0cmliLT5wa3RsZW4pOwotCi0JCQkvKiB3ZmRpZWxlbiA9IGJ1aWxkX2Fzc29jX3JlcV93ZmRfaWUocHdkaW5mbywgcGZyYW1lKTsqLwotCQkJLyogcGZyYW1lICs9IHdmZGllbGVuOyAqLwotCQkJLyogcGF0dHJpYi0+cGt0bGVuICs9IHdmZGllbGVuOyAqLwotCQl9Ci0JfQotCi0JaWYgKHRydWUgPT0gcHdkaW5mby0+d2ZkX2luZm8tPndmZF9lbmFibGUpIHsKLQkJd2ZkaWVsZW4gPSBidWlsZF9hc3NvY19yZXFfd2ZkX2llKHB3ZGluZm8sIHBmcmFtZSk7Ci0JCXBmcmFtZSArPSB3ZmRpZWxlbjsKLQkJcGF0dHJpYi0+cGt0bGVuICs9IHdmZGllbGVuOwotCX0gZWxzZSBpZiAocG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llICE9IE5VTEwgJiYKLQkJICAgcG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llX2xlbiA+IDApIHsKLQkJLyogV0ZEIElFICovCi0JCW1lbWNweShwZnJhbWUsIHBtbG1lcHJpdi0+d2ZkX2Fzc29jX3JlcV9pZSwKLQkJICAgICAgIHBtbG1lcHJpdi0+d2ZkX2Fzc29jX3JlcV9pZV9sZW4pOwotCQlwYXR0cmliLT5wa3RsZW4gKz0gcG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llX2xlbjsKLQkJcGZyYW1lICs9IHBtbG1lcHJpdi0+d2ZkX2Fzc29jX3JlcV9pZV9sZW47Ci0JfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMsIDYsCisJCQkJICAgICAgIFJFQUxURUtfOTZCX0lFLCAmcGF0dHJpYi0+cGt0bGVuKTsKIAogCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKIAlkdW1wX21nbnRmcmFtZTIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7CkBAIC02NzQxLDggKzM1NDEsNyBAQAogCQlrZnJlZShwbWxtZXByaXYtPmFzc29jX3JlcSk7CiAJCXBtbG1lcHJpdi0+YXNzb2NfcmVxID0ga21hbGxvYyhwYXR0cmliLT5wa3RsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAocG1sbWVwcml2LT5hc3NvY19yZXEpIHsKLQkJCW1lbWNweShwbWxtZXByaXYtPmFzc29jX3JlcSwgcHdsYW5oZHIsCi0JCQkgICAgICAgcGF0dHJpYi0+cGt0bGVuKTsKKwkJCW1lbWNweShwbWxtZXByaXYtPmFzc29jX3JlcSwgcHdsYW5oZHIsIHBhdHRyaWItPnBrdGxlbik7CiAJCQlwbWxtZXByaXYtPmFzc29jX3JlcV9sZW4gPSBwYXR0cmliLT5wa3RsZW47CiAJCX0KIAl9IGVsc2UKQEAgLTY3NjAsNyArMzU1OSw2IEBACiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CiAJdW5zaWduZWQgY2hhciAqcGZyYW1lOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dDsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvOwpAQCAtNjc3NCw3ICszNTcyLDggQEAKIAlwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQorCXBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KTsKKwlpZiAoIXBtZ250ZnJhbWUpCiAJCWdvdG8gZXhpdDsKIAogCS8qIHVwZGF0ZSBhdHRyaWJ1dGUgKi8KQEAgLTY3ODcsMjQgKzM1ODYsMjQgQEAKIAlwZnJhbWUgPSAodTggKikocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKIAlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKIAotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCSAgICAgIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyk7CiAKIAlpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19BUF9TVEFURSkKLQkJU2V0RnJEcyhmY3RybCk7CisJCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CiAJZWxzZSBpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19TVEFUSU9OX1NUQVRFKQotCQlTZXRUb0RzKGZjdHJsKTsKKwkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAKIAlpZiAocG93ZXJfbW9kZSkKLQkJU2V0UHdyTWd0KGZjdHJsKTsKKwkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwogCiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgZGEpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSk7CiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMywgZ2V0X215X2Jzc2lkMjNhKCZwbWxtZWluZm8tPm5ldHdvcmspKTsKIAotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKKwlwd2xhbmhkci0+c2VxX2N0cmwgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU05fVE9fU0VRKHBtbG1lZXh0LT5tZ250X3NlcSkpOwogCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfREFUQV9OVUxMKTsKIAogCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CkBAIC02ODU4LDE0ICszNjU3LDE1IEBACiAKIAlpZiAodHJ5X2NudCAmJiB3YWl0X21zKSB7CiAJCWlmIChkYSkKLQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiB0byAiTUFDX0ZNVCIsIGNoOiV1JXMsICVkLyVkICIKLQkJCQkgICJpbiAldSBtc1xuIiwgRlVOQ19BRFBUX0FSRyhwYWRhcHRlciksCisJCQlEQkdfODcyM0EoIiVzKCVzKTogdG8gIk1BQ19GTVQiLCBjaDoldSVzLCAlZC8lZCAiCisJCQkJICAiaW4gJXUgbXNcbiIsIF9fZnVuY19fLAorCQkJCSAgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsCiAJCQkJICBNQUNfQVJHKGRhKSwgcnR3X2dldF9vcGVyX2NoMjNhKHBhZGFwdGVyKSwKIAkJCQkgIHJldCA9PSBfU1VDQ0VTUz8iLCBhY2tlZCI6IiIsIGksIHRyeV9jbnQsCiAJCQkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydCkpOwogCQllbHNlCi0JCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCIsIGNoOiV1JXMsICVkLyVkIGluICV1IG1zXG4iLAotCQkJCSAgRlVOQ19BRFBUX0FSRyhwYWRhcHRlciksCisJCQlEQkdfODcyM0EoIiVzKCVzKTosIGNoOiV1JXMsICVkLyVkIGluICV1IG1zXG4iLAorCQkJCSAgX19mdW5jX18sIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lLAogCQkJCSAgcnR3X2dldF9vcGVyX2NoMjNhKHBhZGFwdGVyKSwKIAkJCQkgIHJldCA9PSBfU1VDQ0VTUz8iLCBhY2tlZCI6IiIsIGksIHRyeV9jbnQsCiAJCQkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydCkpOwpAQCAtNjg4MiwxNSArMzY4MiwxNSBAQAogCXN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lOwogCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliOwogCXVuc2lnbmVkIGNoYXIgKnBmcmFtZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdW5zaWduZWQgc2hvcnQgKmZjdHJsLCAqcWM7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyICpwd2xhbmhkcjsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKIAlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKKwlwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdik7CisJaWYgKCFwbWdudGZyYW1lKQogCQlnb3RvIGV4aXQ7CiAKIAkvKiB1cGRhdGUgYXR0cmlidXRlICovCkBAIC02OTA2LDM0ICszNzA2LDMyIEBACiAJbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwogCiAJcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CisJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyICopcGZyYW1lOwogCi0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKmZjdHJsID0gMDsKKwlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX1FPU19OVUxMRlVOQyk7CiAKIAlpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19BUF9TVEFURSkKLQkJU2V0RnJEcyhmY3RybCk7CisJCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CiAJZWxzZSBpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19TVEFUSU9OX1NUQVRFKQotCQlTZXRUb0RzKGZjdHJsKTsKKwkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAKIAlpZiAocGF0dHJpYi0+bWRhdGEpCi0JCVNldE1EYXRhKGZjdHJsKTsKKwkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOwogCi0JcWMgPSAodW5zaWduZWQgc2hvcnQgKikocGZyYW1lICsgcGF0dHJpYi0+aGRybGVuIC0gMik7Ci0KLQlTZXRQcmlvcml0eShxYywgdGlkKTsKLQotCVNldEVPU1AocWMsIHBhdHRyaWItPmVvc3ApOwotCi0JU2V0QWNrcG9saWN5KHFjLCBwYXR0cmliLT5hY2tfcG9saWN5KTsKKwlwd2xhbmhkci0+cW9zX2N0cmwgPSBjcHVfdG9fbGUxNih0aWQgJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSyk7CisJcHdsYW5oZHItPnFvc19jdHJsIHw9IGNwdV90b19sZTE2KChwYXR0cmliLT5hY2tfcG9saWN5IDw8IDUpICYKKwkJCQkJICBJRUVFODAyMTFfUU9TX0NUTF9BQ0tfUE9MSUNZX01BU0spOworCWlmIChwYXR0cmliLT5lb3NwKQorCQlwd2xhbmhkci0+cW9zX2N0cmwgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1FPU19DVExfRU9TUCk7CiAKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBkYSk7CiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yaykpOwogCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOworCXB3bGFuaGRyLT5zZXFfY3RybCA9CisJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TTl9UT19TRVEocG1sbWVleHQtPm1nbnRfc2VxKSk7CiAJcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9RT1NfREFUQV9OVUxMKTsKIAogCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyKTsKIAlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyKTsKQEAgLTY5ODYsMTQgKzM3ODQsMTUgQEAKIAogCWlmICh0cnlfY250ICYmIHdhaXRfbXMpIHsKIAkJaWYgKGRhKQotCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHRvICJNQUNfRk1UIiwgY2g6JXUlcywgJWQvJWQgIgotCQkJCSAgImluICV1IG1zXG4iLCBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJCURCR184NzIzQSgiJXMoJXMpOiB0byAiTUFDX0ZNVCIsIGNoOiV1JXMsICVkLyVkICIKKwkJCQkgICJpbiAldSBtc1xuIiwgX19mdW5jX18sCisJCQkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKIAkJCQkgIE1BQ19BUkcoZGEpLCBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpLAogCQkJCSAgcmV0ID09IF9TVUNDRVNTPyIsIGFja2VkIjoiIiwgaSwgdHJ5X2NudCwKIAkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CiAJCWVsc2UKLQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiwgY2g6JXUlcywgJWQvJWQgaW4gJXUgbXNcbiIsCi0JCQkJICBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJCURCR184NzIzQSgiJXMoJXMpOiwgY2g6JXUlcywgJWQvJWQgaW4gJXUgbXNcbiIsCisJCQkJICBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsCiAJCQkJICBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpLAogCQkJCSAgcmV0ID09IF9TVUNDRVNTPyIsIGFja2VkIjoiIiwgaSwgdHJ5X2NudCwKIAkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CkBAIC03MDAyLDMzICszODAxLDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfaXNzdWVfZGVhdXRoMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKmRhLAotCQkJICAgIHVuc2lnbmVkIHNob3J0IHJlYXNvbiwgdTggd2FpdF9hY2spCitzdGF0aWMgaW50IF9pc3N1ZV9kZWF1dGgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqZGEsCisJCQkgdW5zaWduZWQgc2hvcnQgcmVhc29uLCB1OCB3YWl0X2FjaykKIHsKIAlzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZTsKIAlzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYjsKIAl1bnNpZ25lZCBjaGFyICpwZnJhbWU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwotCXVuc2lnbmVkIHNob3J0ICpmY3RybDsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJaW50IHJldCA9IF9GQUlMOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCiAKIAkvKiBEQkdfODcyM0EoIiVzIHRvICJNQUNfRk1UIlxuIiwgX19mdW5jX18sIE1BQ19BUkcoZGEpKTsgKi8KIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKCEocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKSAmJgotCSAgICAocHdkaW5mby0+cnhfaW52aXRlcmVxX2luZm8uc2Nhbl9vcF9jaF9vbmx5KSkgewotCQltb2RfdGltZXIoJnB3ZGluZm8tPnJlc2V0X2NoX3NpdGVzdXJ2ZXksCi0JCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKKwlwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdik7CisJaWYgKCFwbWdudGZyYW1lKQogCQlnb3RvIGV4aXQ7CiAKIAkvKiB1cGRhdGUgYXR0cmlidXRlICovCkBAIC03MDQxLDE2ICszODI5LDE2IEBACiAJcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7CiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOworCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgICAgICBJRUVFODAyMTFfU1RZUEVfREVBVVRIKTsKIAogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIGRhKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSk7CiAKLQlTZXRTZXFOdW0ocHdsYW5oZHIsIHBtbG1lZXh0LT5tZ250X3NlcSk7CisJcHdsYW5oZHItPnNlcV9jdHJsID0KKwkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NOX1RPX1NFUShwbWxtZWV4dC0+bWdudF9zZXEpKTsKIAlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0RFQVVUSCk7CiAKIAlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwpAQCAtNzA3NywxOSArMzg2NSwxOSBAQAogCQkgICAgdW5zaWduZWQgc2hvcnQgcmVhc29uKQogewogCURCR184NzIzQSgiJXMgdG8gIk1BQ19GTVQiXG4iLCBfX2Z1bmNfXywgTUFDX0FSRyhkYSkpOwotCXJldHVybiBfaXNzdWVfZGVhdXRoMjNhKHBhZGFwdGVyLCBkYSwgcmVhc29uLCBmYWxzZSk7CisJcmV0dXJuIF9pc3N1ZV9kZWF1dGgocGFkYXB0ZXIsIGRhLCByZWFzb24sIGZhbHNlKTsKIH0KIAotaW50IGlzc3VlX2RlYXV0aDIzYV9leDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqZGEsCi0JCQkgIHVuc2lnbmVkIHNob3J0IHJlYXNvbiwgaW50IHRyeV9jbnQsIGludCB3YWl0X21zKQorc3RhdGljIGludCBpc3N1ZV9kZWF1dGhfZXgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmRhLAorCQkJICAgdW5zaWduZWQgc2hvcnQgcmVhc29uLCBpbnQgdHJ5X2NudCwgaW50IHdhaXRfbXMpCiB7CiAJaW50IHJldDsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAKIAlkbyB7Ci0JCXJldCA9IF9pc3N1ZV9kZWF1dGgyM2EocGFkYXB0ZXIsIGRhLCByZWFzb24sCi0JCQkJICAgICAgIHdhaXRfbXMgPjAgPyB0cnVlIDogZmFsc2UpOworCQlyZXQgPSBfaXNzdWVfZGVhdXRoKHBhZGFwdGVyLCBkYSwgcmVhc29uLAorCQkJCSAgICB3YWl0X21zID4wID8gdHJ1ZSA6IGZhbHNlKTsKIAogCQlpKys7CiAKQEAgLTcxMDgsMTQgKzM4OTYsMTUgQEAKIAogCWlmICh0cnlfY250ICYmIHdhaXRfbXMpIHsKIAkJaWYgKGRhKQotCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiIHRvICJNQUNfRk1UIiwgY2g6JXUlcywgJWQvJWQgIgotCQkJCSAgImluICV1IG1zXG4iLCBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJCURCR184NzIzQSgiJXMoJXMpOiB0byAiTUFDX0ZNVCIsIGNoOiV1JXMsICVkLyVkICIKKwkJCQkgICJpbiAldSBtc1xuIiwgX19mdW5jX18sCisJCQkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKIAkJCQkgIE1BQ19BUkcoZGEpLCBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpLAogCQkJCSAgcmV0ID09IF9TVUNDRVNTPyIsIGFja2VkIjoiIiwgaSwgdHJ5X2NudCwKIAkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CiAJCWVsc2UKLQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiwgY2g6JXUlcywgJWQvJWQgaW4gJXUgbXNcbiIsCi0JCQkJICBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJCURCR184NzIzQSgiJXMoJXMpOiwgY2g6JXUlcywgJWQvJWQgaW4gJXUgbXNcbiIsCisJCQkJICBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsCiAJCQkJICBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpLAogCQkJCSAgcmV0ID09IF9TVUNDRVNTPyIsIGFja2VkIjoiIiwgaSwgdHJ5X2NudCwKIAkJCQkgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CkBAIC03MTMxLDE2ICszOTIwLDE1IEBACiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CiAJdW5zaWduZWQgY2hhciAqcGZyYW1lOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXU4IGNhdGVnb3J5LCBhY3Rpb247CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCIgcmEgPSJNQUNfRk1UIiwgY2g6JXUsIG9mZnNldDoldVxuIiwKLQkJRlVOQ19OREVWX0FSRyhwYWRhcHRlci0+cG5ldGRldiksIE1BQ19BUkcocmEpLAotCQkgIG5ld19jaCwgY2hfb2Zmc2V0KTsKKwlEQkdfODcyM0EoIiVzKCVzKTogcmEgPSJNQUNfRk1UIiwgY2g6JXUsIG9mZnNldDoldVxuIiwgX19mdW5jX18sCisJCSAgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsIE1BQ19BUkcocmEpLCBuZXdfY2gsIGNoX29mZnNldCk7CiAKLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKKwlwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdik7CisJaWYgKCFwbWdudGZyYW1lKQogCQlyZXR1cm47CiAKIAkvKiB1cGRhdGUgYXR0cmlidXRlICovCkBAIC03MTUyLDE2ICszOTQwLDE2IEBACiAJcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7CiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOworCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgICAgICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIAogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIHJhKTsgLyogUkEgKi8KIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOyAvKiBUQSAqLwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIHJhKTsgLyogREEgPSBSQSAqLwogCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOworCXB3bGFuaGRyLT5zZXFfY3RybCA9CisJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TTl9UT19TRVEocG1sbWVleHQtPm1nbnRfc2VxKSk7CiAJcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9BQ1RJT04pOwogCiAJcGZyYW1lICs9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAJcGF0dHJpYi0+cGt0bGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKQEAgLTcxODMsNyArMzk3MSw4IEBACiAJZHVtcF9tZ250ZnJhbWUyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwogfQogCi12b2lkIGlzc3VlX2FjdGlvbl9CQTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpyYWRkciwKK3ZvaWQgaXNzdWVfYWN0aW9uX0JBMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpyYWRkciwKIAkJCXVuc2lnbmVkIGNoYXIgYWN0aW9uLCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMpCiB7CiAJdTggY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CkBAIC03MTk3LDIxICszOTg2LDE5IEBACiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CiAJdTggKnBmcmFtZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdTE2ICpmY3RybDsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHN0YV9pbmZvICpwc3RhOwogCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHJlZ2lzdHJ5X3ByaXYgKnByZWdwcml2ID0gJnBhZGFwdGVyLT5yZWdpc3RyeXByaXY7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCiAJdTggdGVuZGFBUE1hY1tdID0gezB4QzgsIDB4M0EsIDB4MzV9OwotI2VuZGlmCiAKIAlEQkdfODcyM0EoIiVzLCBjYXRlZ29yeSA9JWQsIGFjdGlvbiA9JWQsIHN0YXR1cyA9JWRcbiIsCiAJCSAgX19mdW5jX18sIGNhdGVnb3J5LCBhY3Rpb24sIHN0YXR1cyk7CiAKLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKKwlwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdik7CisJaWYgKCFwbWdudGZyYW1lKQogCQlyZXR1cm47CiAKIAkvKiB1cGRhdGUgYXR0cmlidXRlICovCkBAIC03MjIzLDE3ICs0MDEwLDE3IEBACiAJcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7CiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOworCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgICAgICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIAogCS8qIG1lbWNweShwd2xhbmhkci0+YWRkcjEsIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSwgRVRIX0FMRU4pOyAqLwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIHJhZGRyKTsKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSk7CiAKLQlTZXRTZXFOdW0ocHdsYW5oZHIsIHBtbG1lZXh0LT5tZ250X3NlcSk7CisJcHdsYW5oZHItPnNlcV9jdHJsID0KKwkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NOX1RPX1NFUShwbWxtZWV4dC0+bWdudF9zZXEpKTsKIAlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7CiAKIAlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwpAQCAtNzI1NSw5ICs0MDQyLDkgQEAKIAkJcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZwbWxtZWluZm8tPmRpYWxvZ1Rva2VuLAogCQkJCQkgICAgICZwYXR0cmliLT5wa3RsZW4pOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCi0JCWlmICgoQlRfMUFudChwYWRhcHRlcikgPT0gdHJ1ZSkgJiYKLQkJICAgICgocG1sbWVpbmZvLT5hc3NvY19BUF92ZW5kb3IgIT0gYnJvYWRjb21BUCkgfHwKKwkJaWYgKHJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpICYmCisJCSAgICBydGw4NzIzYV9CVF91c2luZ19hbnRlbm5hXzEocGFkYXB0ZXIpICYmCisJCSAgICAocG1sbWVpbmZvLT5hc3NvY19BUF92ZW5kb3IgIT0gYnJvYWRjb21BUCB8fAogCQkgICAgIG1lbWNtcChyYWRkciwgdGVuZGFBUE1hYywgMykpKSB7CiAJCQkvKiAgQS1NU0RVIE5PVCBTdXBwb3J0ZWQgKi8KIAkJCUJBX3BhcmFfc2V0ID0gMDsKQEAgLTcyNzAsOSArNDA1Nyw3IEBACiAJCQkvKiAgbWF4IGJ1ZmZlciBzaXplIGlzIDggTVNEVSAqLwogCQkJQkFfcGFyYV9zZXQgfD0gKDggPDwgNikgJgogCQkJCUlFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLOwotCQl9IGVsc2UKLSNlbmRpZgotCQl7CisJCX0gZWxzZSB7CiAJCQkvKiBpbW1lZGlhdGUgYWNrICYgNjQgYnVmZmVyIHNpemUgKi8KIAkJCUJBX3BhcmFfc2V0ID0gKDB4MTAwMiB8ICgoc3RhdHVzICYgMHhmKSA8PCAyKSk7CiAJCX0KQEAgLTczMDksOCArNDA5NCw4IEBACiAJCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCAyLAogCQkJCQkgICAgICh1bnNpZ25lZCBjaGFyICopJnN0YXR1cywKIAkJCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQkJcnR3X2hhbF9nZXRfZGVmX3ZhcjIzYShwYWRhcHRlciwgSFdfVkFSX01BWF9SWF9BTVBEVV9GQUNUT1IsCi0JCQkJICAgICAgICZtYXhfcnhfYW1wZHVfZmFjdG9yKTsKKwkJR2V0SGFsRGVmVmFyODE5MkNVc2IocGFkYXB0ZXIsIEhXX1ZBUl9NQVhfUlhfQU1QRFVfRkFDVE9SLAorCQkJCSAgICAgJm1heF9yeF9hbXBkdV9mYWN0b3IpOwogCQlpZiAobWF4X3J4X2FtcGR1X2ZhY3RvciA9PSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SykKIAkJCUJBX3BhcmFfc2V0ID0gKChsZTE2X3RvX2NwdShwbWxtZWluZm8tPkFEREJBX3JlcS5CQV9wYXJhX3NldCkgJiAweDNmKSB8IDB4MTAwMCk7IC8qIDY0IGJ1ZmZlciBzaXplICovCiAJCWVsc2UgaWYgKG1heF9yeF9hbXBkdV9mYWN0b3IgPT0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV8zMkspCkBAIC03MzIyLDE2ICs0MTA3LDE1IEBACiAJCWVsc2UKIAkJCUJBX3BhcmFfc2V0ID0gKChsZTE2X3RvX2NwdShwbWxtZWluZm8tPkFEREJBX3JlcS5CQV9wYXJhX3NldCkgJiAweDNmKSB8IDB4MTAwMCk7IC8qIDY0IGJ1ZmZlciBzaXplICovCiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQkJaWYgKChCVF8xQW50KHBhZGFwdGVyKSA9PSB0cnVlKSAmJgotCQkgICAgKChwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciAhPSBicm9hZGNvbUFQKSB8fAorCQlpZiAocnRsODcyM2FfQlRfY29leGlzdChwYWRhcHRlcikgJiYKKwkJICAgIHJ0bDg3MjNhX0JUX3VzaW5nX2FudGVubmFfMShwYWRhcHRlcikgJiYKKwkJICAgIChwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciAhPSBicm9hZGNvbUFQIHx8CiAJCSAgICAgbWVtY21wKHJhZGRyLCB0ZW5kYUFQTWFjLCAzKSkpIHsKIAkJCS8qICBtYXggYnVmZmVyIHNpemUgaXMgOCBNU0RVICovCiAJCQlCQV9wYXJhX3NldCAmPSB+SUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0s7CiAJCQlCQV9wYXJhX3NldCB8PSAoOCA8PCA2KSAmCiAJCQkJSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0s7CiAJCX0KLSNlbmRpZgogCiAJCWlmIChwcmVncHJpdi0+YW1wZHVfYW1zZHUgPT0gMCkvKiBkaXNhYmxlZCAqLwogCQkJQkFfcGFyYV9zZXQgPSBjcHVfdG9fbGUxNihCQV9wYXJhX3NldCAmIH5CSVQoMCkpOwpAQCAtNzM3MywyNCArNDE1NywyNSBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0LCAqcGhlYWQsICpwdG1wOwogCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnksIGFjdGlvbjsKLQlzdHJ1Y3QgeG1pdF9mcmFtZQkJCSpwbWdudGZyYW1lOwotCXN0cnVjdCBwa3RfYXR0cmliCQkJKnBhdHRyaWI7Ci0JdW5zaWduZWQgY2hhcgkJCQkqcGZyYW1lOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyCSpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydAkJCSpmY3RybDsKLQlzdHJ1Y3QJd2xhbl9uZXR3b3JrCSpwbmV0d29yayA9IE5VTEw7CisJc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWU7CisJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CisJdTggKnBmcmFtZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7CisJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcms7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0Jc3RydWN0IHJ0d19xdWV1ZQkqcXVldWUJPSAmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlOworCXN0cnVjdCBydHdfcXVldWUgKnF1ZXVlCT0gJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZTsKIAl1OCBJbmZvQ29udGVudFsxNl0gPSB7MH07CiAJdTggSUNTWzhdWzE1XTsKKwlpbnQgaTsKIAotCWlmICgocG1sbWVwcml2LT5udW1fRm9ydHlNSHpJbnRvbGVyYW50ID09IDApIHx8IChwbWxtZXByaXYtPm51bV9zdGFfbm9faHQgPT0gMCkpCisJaWYgKHBtbG1lcHJpdi0+bnVtX0ZvcnR5TUh6SW50b2xlcmFudCA9PSAwIHx8CisJICAgIHBtbG1lcHJpdi0+bnVtX3N0YV9ub19odCA9PSAwKQogCQlyZXR1cm47CiAKLQlpZiAodHJ1ZSA9PSBwbWxtZWluZm8tPmJ3bW9kZV91cGRhdGVkKQorCWlmIChwbWxtZWluZm8tPmJ3bW9kZV91cGRhdGVkKQogCQlyZXR1cm47CiAKIAlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7CkBAIC03Mzk4LDEwICs0MTgzLDkgQEAKIAljYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfUFVCTElDOwogCWFjdGlvbiA9IEFDVF9QVUJMSUNfQlNTQ09FWElTVDsKIAotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCXsKKwlwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdik7CisJaWYgKCFwbWdudGZyYW1lKQogCQlyZXR1cm47Ci0JfQogCiAJLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwogCXBhdHRyaWIgPSAmcG1nbnRmcmFtZS0+YXR0cmliOwpAQCAtNzQwOSwxOSArNDE5MywxOSBAQAogCiAJbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwogCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7CisJcGZyYW1lID0gKHU4ICopcG1nbnRmcmFtZS0+YnVmX2FkZHIgKyBUWERFU0NfT0ZGU0VUOwogCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwogCi0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKmZjdHJsID0gMDsKKwlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CiAKIAlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yaykpOwogCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSk7CiAJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMywgZ2V0X215X2Jzc2lkMjNhKCZwbWxtZWluZm8tPm5ldHdvcmspKTsKIAotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKKwlwd2xhbmhkci0+c2VxX2N0cmwgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU05fVE9fU0VRKHBtbG1lZXh0LT5tZ250X3NlcSkpOwogCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfQUNUSU9OKTsKIAogCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CkBAIC03NDI5LDkxICs0MjEzLDgwIEBACiAJcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7CiAJcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZhY3Rpb24sICZwYXR0cmliLT5wa3RsZW4pOwogCi0JLyogICovCi0JaWYgKHBtbG1lcHJpdi0+bnVtX0ZvcnR5TUh6SW50b2xlcmFudD4wKQotCXsKLQkJdTggaWVkYXRhID0gMDsKKwlpZiAocG1sbWVwcml2LT5udW1fRm9ydHlNSHpJbnRvbGVyYW50ID4gMCkgeworCQl1OCBpZWRhdGEgPSBCSVQoMik7LyogMjAgTUh6IEJTUyBXaWR0aCBSZXF1ZXN0ICovCiAKLQkJaWVkYXRhIHw9IEJJVCgyKTsvKiAyMCBNSHogQlNTIFdpZHRoIFJlcXVlc3QgKi8KKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX0JTU19DT0VYXzIwNDAsIDEsCisJCQkJICAgICAgICZpZWRhdGEsICZwYXR0cmliLT5wa3RsZW4pOworCX0KIAotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgRUlEX0JTU0NvZXhpc3RlbmNlLCAgMSwgJmllZGF0YSwgJnBhdHRyaWItPnBrdGxlbik7CisJaWYgKHBtbG1lcHJpdi0+bnVtX3N0YV9ub19odCA8PSAwKQorCQlnb3RvIG91dDsKKworCW1lbXNldChJQ1MsIDAsIHNpemVvZihJQ1MpKTsKKworCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOworCisJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHF1ZXVlKTsKKwlwbGlzdCA9IHBoZWFkLT5uZXh0OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCBwaGVhZCkgeworCQljb25zdCB1OCAqcDsKKwkJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBic3NfbmV0d29yazsKKworCQlwbmV0d29yayA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHdsYW5fbmV0d29yaywgbGlzdCk7CisKKwkJcGJzc19uZXR3b3JrID0gJnBuZXR3b3JrLT5uZXR3b3JrOworCisJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksCisJCQkJICAgICBwYnNzX25ldHdvcmstPklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLAorCQkJCSAgICAgcGJzc19uZXR3b3JrLT5JRUxlbmd0aCAtX0ZJWEVEX0lFX0xFTkdUSF8pOworCQlpZiAoIXAgfHwgIXBbMV0pIHsgLyogbm9uLUhUICovCisJCQlpZiAocGJzc19uZXR3b3JrLT5EU0NvbmZpZyA8PSAwIHx8CisJCQkgICAgcGJzc19uZXR3b3JrLT5EU0NvbmZpZyA+IDE0KQorCQkJCWNvbnRpbnVlOworCisJCQlJQ1NbMF1bcGJzc19uZXR3b3JrLT5EU0NvbmZpZ10gPSAxOworCisJCQlpZiAoSUNTWzBdWzBdID09IDApCisJCQkJSUNTWzBdWzBdID0gMTsKKwkJfQogCiAJfQogCi0JLyogICovCi0JbWVtc2V0KElDUywgMCwgc2l6ZW9mKElDUykpOwotCWlmIChwbWxtZXByaXYtPm51bV9zdGFfbm9faHQ+MCkKLQl7Ci0JCWludCBpOworCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CiAKLQkJc3Bpbl9sb2NrX2JoKCZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWUubG9jayk7CisJZm9yIChpID0gMDsgaSA8IDg7aSsrKSB7CisJCWlmIChJQ1NbaV1bMF0gPT0gMSkgeworCQkJaW50IGosIGsgPSAwOwogCi0JCXBoZWFkID0gZ2V0X2xpc3RfaGVhZChxdWV1ZSk7Ci0JCXBsaXN0ID0gcGhlYWQtPm5leHQ7CisJCQlJbmZvQ29udGVudFtrXSA9IGk7CisJCQkvKiBTRVRfQlNTX0lOVE9MRVJBTlRfRUxFX1JFR19DTEFTUyhJbmZvQ29udGVudCwgaSk7ICovCisJCQlrKys7CiAKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCBwaGVhZCkgewotCQkJaW50IGxlbjsKLQkJCXU4ICpwOwotCQkJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBic3NfbmV0d29yazsKLQotCQkJcG5ldHdvcmsgPSBjb250YWluZXJfb2YocGxpc3QsIHN0cnVjdCB3bGFuX25ldHdvcmssCi0JCQkJCQlsaXN0KTsKLQotCQkJcGJzc19uZXR3b3JrID0gJnBuZXR3b3JrLT5uZXR3b3JrOwotCi0JCQlwID0gcnR3X2dldF9pZTIzYShwYnNzX25ldHdvcmstPklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLCBfSFRfQ0FQQUJJTElUWV9JRV8sICZsZW4sIHBic3NfbmV0d29yay0+SUVMZW5ndGggLSBfRklYRURfSUVfTEVOR1RIXyk7Ci0JCQlpZiAoKHAgPT0gTlVMTCkgfHwgKGxlbiA9PSAwKSkvKiBub24tSFQgKi8KLQkJCXsKLQkJCQlpZiAoKHBic3NfbmV0d29yay0+Q29uZmlndXJhdGlvbi5EU0NvbmZpZzw9IDApIHx8IChwYnNzX25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWc+MTQpKQotCQkJCQljb250aW51ZTsKLQotCQkJCUlDU1swXVtwYnNzX25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWddPSAxOwotCi0JCQkJaWYgKElDU1swXVswXSA9PSAwKQotCQkJCQlJQ1NbMF1bMF0gPSAxOwotCQkJfQotCi0JCX0KLQotCQlzcGluX3VubG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwotCi0JCWZvciAoaSA9IDA7aTw4O2krKykKLQkJewotCQkJaWYgKElDU1tpXVswXSA9PSAxKQotCQkJewotCQkJCWludCBqLCBrID0gMDsKLQotCQkJCUluZm9Db250ZW50W2tdID0gaTsKLQkJCQkvKiBTRVRfQlNTX0lOVE9MRVJBTlRfRUxFX1JFR19DTEFTUyhJbmZvQ29udGVudCwgaSk7ICovCi0JCQkJaysrOwotCi0JCQkJZm9yIChqID0gMTtqPD0gMTQ7aisrKQotCQkJCXsKLQkJCQkJaWYgKElDU1tpXVtqXT09IDEpCi0JCQkJCXsKLQkJCQkJCWlmIChrPDE2KQotCQkJCQkJewotCQkJCQkJCUluZm9Db250ZW50W2tdID0gajsgLyogY2hhbm5lbCBudW1iZXIgKi8KLQkJCQkJCQkvKiBTRVRfQlNTX0lOVE9MRVJBTlRfRUxFX0NIQU5ORUwoSW5mb0NvbnRlbnQraywgaik7ICovCi0JCQkJCQkJaysrOwotCQkJCQkJfQorCQkJZm9yIChqID0gMTsgaiA8PSAxNDsgaisrKSB7CisJCQkJaWYgKElDU1tpXVtqXSA9PSAxKSB7CisJCQkJCWlmIChrIDwgMTYpIHsKKwkJCQkJCS8qIGNoYW5uZWwgbnVtYmVyICovCisJCQkJCQlJbmZvQ29udGVudFtrXSA9IGo7CisJCQkJCQlrKys7CiAJCQkJCX0KIAkJCQl9Ci0KLQkJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgRUlEX0JTU0ludG9sZXJhbnRDaGxSZXBvcnQsIGssIEluZm9Db250ZW50LCAmcGF0dHJpYi0+cGt0bGVuKTsKLQogCQkJfQogCisJCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwKKwkJCQkJICAgICAgIEVJRF9CU1NJbnRvbGVyYW50Q2hsUmVwb3J0LCBrLAorCQkJCQkgICAgICAgSW5mb0NvbnRlbnQsICZwYXR0cmliLT5wa3RsZW4pOwogCQl9Ci0KIAl9CiAKK291dDoKIAlwYXR0cmliLT5sYXN0X3R4Y21kc3ogPSBwYXR0cmliLT5wa3RsZW47CiAKIAlkdW1wX21nbnRmcmFtZTIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7CiB9CiAKLXVuc2lnbmVkIGludCBzZW5kX2RlbGJhMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGluaXRpYXRvciwgdTggKmFkZHIpCitpbnQgc2VuZF9kZWxiYTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBpbml0aWF0b3IsIHU4ICphZGRyKQogewogCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHN0YV9pbmZvICpwc3RhID0gTlVMTDsKQEAgLTc1NTMsMjMgKzQzMjYsMjMgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXVuc2lnbmVkIGludCBzZW5kX2JlYWNvbjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoraW50IHNlbmRfYmVhY29uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JdTgJYnhtaXRvayA9IGZhbHNlOworCWJvb2wJYnhtaXRvazsKIAlpbnQJaXNzdWUgPSAwOwogCWludCBwb2xsID0gMDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKIAl1bnNpZ25lZCBpbnQgcGFzc2luZ190aW1lOwogCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9CQ05fVkFMSUQsIE5VTEwpOworCXJ0bDg3MjNhX2Jjbl92YWxpZChwYWRhcHRlcik7CiAJZG8gewogCQlpc3N1ZV9iZWFjb24yM2EocGFkYXB0ZXIsIDEwMCk7CiAJCWlzc3VlKys7CiAJCWRvIHsKIAkJCXlpZWxkKCk7Ci0JCQlydHcyM2FfaGFsX2dldF9od3JlZyhwYWRhcHRlciwgSFdfVkFSX0JDTl9WQUxJRCwgKHU4ICopKCZieG1pdG9rKSk7CisJCQlieG1pdG9rID0gcnRsODcyM2FfZ2V0X2Jjbl92YWxpZChwYWRhcHRlcik7CiAJCQlwb2xsKys7Ci0JCX0gd2hpbGUgKChwb2xsJTEwKSE9IDAgJiYgZmFsc2UgPT0gYnhtaXRvayAmJgorCQl9IHdoaWxlICgocG9sbCAlIDEwKSAhPSAwICYmIGJ4bWl0b2sgPT0gZmFsc2UgJiYKIAkJCSAhcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgJiYKIAkJCSAhcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkKTsKIApAQCAtNzYxMyw0OCArNDM4NiwyNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBzaXRlX3N1cnZleTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQorc3RhdGljIHZvaWQgcnR3X3NpdGVfc3VydmV5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JdW5zaWduZWQgY2hhciBzdXJ2ZXlfY2hhbm5lbCA9IDAsIHZhbDg7CisJdW5zaWduZWQgY2hhciBzdXJ2ZXlfY2hhbm5lbCA9IDA7CiAJZW51bSBydF9zY2FuX3R5cGUgU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKLQl1MzIgaW5pdGlhbGdhaW4gPSAwOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOworCXN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgKmNoOwogCi0JaWYgKChwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5zY2FuX29wX2NoX29ubHkpIHx8Ci0JICAgIChwd2RpbmZvLT5wMnBfaW5mby5zY2FuX29wX2NoX29ubHkpKSB7Ci0JCWlmIChwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5zY2FuX29wX2NoX29ubHkpCi0JCQlzdXJ2ZXlfY2hhbm5lbCA9IHB3ZGluZm8tPnJ4X2ludml0ZXJlcV9pbmZvLm9wZXJhdGlvbl9jaFtwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuY2hhbm5lbF9pZHhdOwotCQllbHNlCi0JCQlzdXJ2ZXlfY2hhbm5lbCA9IHB3ZGluZm8tPnAycF9pbmZvLm9wZXJhdGlvbl9jaFtwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuY2hhbm5lbF9pZHhdOwotCQlTY2FuVHlwZSA9IFNDQU5fQUNUSVZFOwotCX0gZWxzZSBpZiAocnR3X3AycF9maW5kcGhhc2VfZXhfaXNfc29jaWFsKHB3ZGluZm8pKSB7Ci0JCS8qIFRoZSBkcml2ZXIgaXMgaW4gdGhlIGZpbmQgcGhhc2UsIGl0IHNob3VsZCBnbyB0aHJvdWdoIHRoZSBzb2NpYWwgY2hhbm5lbC4gKi8KLQkJaW50IGNoX3NldF9pZHg7Ci0JCXN1cnZleV9jaGFubmVsID0gcHdkaW5mby0+c29jaWFsX2NoYW5bcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoYW5uZWxfaWR4XTsKLQkJY2hfc2V0X2lkeCA9IHJ0d19jaF9zZXRfc2VhcmNoX2NoMjNhKHBtbG1lZXh0LT5jaGFubmVsX3NldCwgc3VydmV5X2NoYW5uZWwpOwotCQlpZiAoY2hfc2V0X2lkeCA+PSAwKQotCQkJU2NhblR5cGUgPSBwbWxtZWV4dC0+Y2hhbm5lbF9zZXRbY2hfc2V0X2lkeF0uU2NhblR5cGU7Ci0JCWVsc2UKLQkJCVNjYW5UeXBlID0gU0NBTl9BQ1RJVkU7Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQl7Ci0JCXN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgKmNoOwotCQlpZiAocG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoYW5uZWxfaWR4IDwgcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoX251bSkgewotCQkJY2ggPSAmcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoW3BtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5jaGFubmVsX2lkeF07Ci0JCQlzdXJ2ZXlfY2hhbm5lbCA9IGNoLT5od192YWx1ZTsKLQkJCVNjYW5UeXBlID0gKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lSKSA/IFNDQU5fUEFTU0lWRSA6IFNDQU5fQUNUSVZFOwotfQorCWlmIChwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuY2hhbm5lbF9pZHggPAorCSAgICBwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuY2hfbnVtKSB7CisJCWNoID0gJnBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5jaFtwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuY2hhbm5lbF9pZHhdOworCQlzdXJ2ZXlfY2hhbm5lbCA9IGNoLT5od192YWx1ZTsKKwkJU2NhblR5cGUgPSAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSVIpID8KKwkJCVNDQU5fUEFTU0lWRSA6IFNDQU5fQUNUSVZFOwogCX0KIAogCWlmIChzdXJ2ZXlfY2hhbm5lbCAhPSAwKSB7Ci0JCS8qIFBBVVNFIDQtQUMgUXVldWUgd2hlbiBzaXRlX3N1cnZleTIzYSAqLwotCQkvKiBydHcyM2FfaGFsX2dldF9od3JlZyhwYWRhcHRlciwgSFdfVkFSX1RYUEFVU0UsICh1OCAqKSgmdmFsOCkpOyAqLwotCQkvKiB2YWw4IHw9IDB4MGY7ICovCi0JCS8qIHJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfVFhQQVVTRSwgKHU4ICopKCZ2YWw4KSk7ICovCisJCS8qIFBBVVNFIDQtQUMgUXVldWUgd2hlbiBzaXRlX3N1cnZleSAqLwogCQlpZiAocG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoYW5uZWxfaWR4ID09IDApCiAJCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHN1cnZleV9jaGFubmVsLAogCQkJCQkgICAgICBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFLApAQCAtNzY2NCwzMTcgKzQ0MTMsMjUxIEBACiAKIAkJaWYgKFNjYW5UeXBlID09IFNDQU5fQUNUSVZFKSAvKiBvYmV5IHRoZSBjaGFubmVsIHBsYW4gc2V0dGluZy4uLiAqLwogCQl7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfU0NBTikgfHwKLQkJCQlydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfRklORF9QSEFTRV9TRUFSQ0gpCi0JCQkpCi0JCQl7Ci0JCQkJaXNzdWUyM2FfcHJvYmVyZXFfcDJwKHBhZGFwdGVyLCBOVUxMKTsKLQkJCQlpc3N1ZTIzYV9wcm9iZXJlcV9wMnAocGFkYXB0ZXIsIE5VTEwpOwotCQkJCWlzc3VlMjNhX3Byb2JlcmVxX3AycChwYWRhcHRlciwgTlVMTCk7Ci0JCQl9Ci0JCQllbHNlCi0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQkJCXsKLQkJCQlpbnQgaTsKLQkJCQlmb3IgKGkgPSAwO2k8UlRXX1NTSURfU0NBTl9BTU9VTlQ7aSsrKSB7Ci0JCQkJCWlmIChwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3NpZFtpXS5zc2lkX2xlbikgewotCQkJCQkJLyogdG9kbzogdG8gaXNzdWUgdHdvIHByb2JlIHJlcT8/PyAqLwotCQkJCQkJaXNzdWVfcHJvYmVyZXEyM2EocGFkYXB0ZXIsICZwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3NpZFtpXSwgTlVMTCk7Ci0JCQkJCQkvKiBtc2xlZXAoU1VSVkVZX1RPPj4xKTsgKi8KLQkJCQkJCWlzc3VlX3Byb2JlcmVxMjNhKHBhZGFwdGVyLCAmcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnNzaWRbaV0sIE5VTEwpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKHBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zY2FuX21vZGUgPT0gU0NBTl9BQ1RJVkUpIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDtpPFJUV19TU0lEX1NDQU5fQU1PVU5UO2krKykgeworCQkJCWlmIChwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3NpZFtpXS5zc2lkX2xlbikgewogCQkJCQkvKiB0b2RvOiB0byBpc3N1ZSB0d28gcHJvYmUgcmVxPz8/ICovCi0JCQkJCWlzc3VlX3Byb2JlcmVxMjNhKHBhZGFwdGVyLCBOVUxMLCBOVUxMKTsKKwkJCQkJaXNzdWVfcHJvYmVyZXEocGFkYXB0ZXIsICZwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3NpZFtpXSwgTlVMTCk7CiAJCQkJCS8qIG1zbGVlcChTVVJWRVlfVE8+PjEpOyAqLwotCQkJCQlpc3N1ZV9wcm9iZXJlcTIzYShwYWRhcHRlciwgTlVMTCwgTlVMTCk7CisJCQkJCWlzc3VlX3Byb2JlcmVxKHBhZGFwdGVyLCAmcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnNzaWRbaV0sIE5VTEwpOwogCQkJCX0KIAkJCX0KKworCQkJaWYgKHBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zY2FuX21vZGUgPT0gU0NBTl9BQ1RJVkUpIHsKKwkJCQkvKiB0b2RvOiB0byBpc3N1ZSB0d28gcHJvYmUgcmVxPz8/ICovCisJCQkJaXNzdWVfcHJvYmVyZXEocGFkYXB0ZXIsIE5VTEwsIE5VTEwpOworCQkJCS8qIG1zbGVlcChTVVJWRVlfVE8+PjEpOyAqLworCQkJCWlzc3VlX3Byb2JlcmVxKHBhZGFwdGVyLCBOVUxMLCBOVUxMKTsKKwkJCX0KIAkJfQogCiAJCXNldF9zdXJ2ZXlfdGltZXIocG1sbWVleHQsIHBtbG1lZXh0LT5jaGFuX3NjYW5fdGltZSk7CiAJfSBlbHNlIHsKLQogCQkvKgljaGFubmVsIG51bWJlciBpcyAwIG9yIHRoaXMgY2hhbm5lbCBpcyBub3QgdmFsaWQuICovCisJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zdGF0ZSA9IFNDQU5fQ09NUExFVEU7CiAKKwkJLyogc3dpdGNoIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNoYW5uZWwgKi8KIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfU0NBTikgfHwgcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0ZJTkRfUEhBU0VfU0VBUkNIKSkKLQkJewotCQkJaWYgKChwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5zY2FuX29wX2NoX29ubHkpIHx8IChwd2RpbmZvLT5wMnBfaW5mby5zY2FuX29wX2NoX29ubHkpKQotCQkJewotCQkJCS8qCVNldCB0aGUgZmluZF9waGFzZV9zdGF0ZV9leGNoYW5nZV9jbnQgdG8gUDJQX0ZJTkRQSEFTRV9FWF9DTlQuICovCi0JCQkJLyoJVGhpcyB3aWxsIGxldCB0aGUgZm9sbG93aW5nIGZsb3cgdG8gcnVuIHRoZSBzY2FubmluZyBlbmQuICovCi0JCQkJcnR3X3AycF9maW5kcGhhc2VfZXhfc2V0KHB3ZGluZm8sIFAyUF9GSU5EUEhBU0VfRVhfTUFYKTsKLQkJCX0KLQkJfQorCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHBtbG1lZXh0LT5jdXJfY2hhbm5lbCwKKwkJCQkgICAgICBwbWxtZWV4dC0+Y3VyX2NoX29mZnNldCwKKwkJCQkgICAgICBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7CiAKLQkJaWYgKHJ0d19wMnBfZmluZHBoYXNlX2V4X2lzX25lZWRlZChwd2RpbmZvKSkKLQkJewotCQkJLyoJU2V0IHRoZSBQMlAgU3RhdGUgdG8gdGhlIGxpc3RlbiBzdGF0ZSBvZiBmaW5kIHBoYXNlIGFuZCBzZXQgdGhlIGN1cnJlbnQgY2hhbm5lbCB0byB0aGUgbGlzdGVuIGNoYW5uZWwgKi8KLQkJCXNldF9jaGFubmVsX2J3bW9kZTIzYShwYWRhcHRlciwgcHdkaW5mby0+bGlzdGVuX2NoYW5uZWwsIEhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkUsIEhUX0NIQU5ORUxfV0lEVEhfMjApOwotCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0ZJTkRfUEhBU0VfTElTVEVOKTsKLQkJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zdGF0ZSA9IFNDQU5fRElTQUJMRTsKKwkJLyogZmx1c2ggNC1BQyBRdWV1ZSBhZnRlciBydHdfc2l0ZV9zdXJ2ZXkgKi8KKwkJLyogdmFsOCA9IDA7ICovCiAKLQkJCWluaXRpYWxnYWluID0gMHhmZjsgLyogcmVzdG9yZSBSWCBHQUlOICovCi0JCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0lOSVRJQUxfR0FJTiwgKHU4ICopKCZpbml0aWFsZ2FpbikpOwotCQkJLyogdHVybiBvbiBkeW5hbWljIGZ1bmN0aW9ucyAqLwotCQkJUmVzdG9yZV9ETV9GdW5jX0ZsYWcyM2EocGFkYXB0ZXIpOwotCQkJLyogU3dpdGNoX0RNX0Z1bmMyM2EocGFkYXB0ZXIsIERZTkFNSUNfRlVOQ19ESUd8RFlOQU1JQ19GVU5DX0hQfERZTkFNSUNfRlVOQ19TUywgdHJ1ZSk7ICovCisJCS8qIGNvbmZpZyBNU1IgKi8KKwkJU2V0X01TUjIzYShwYWRhcHRlciwgKHBtbG1laW5mby0+c3RhdGUgJiAweDMpKTsKIAotCQkJbW9kX3RpbWVyKCZwd2RpbmZvLT5maW5kX3BoYXNlX3RpbWVyLCBqaWZmaWVzICsKLQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMocHdkaW5mby0+bGlzdGVuX2R3ZWxsICogMTAwKSk7Ci0JCX0gZWxzZQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0JCXsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQkJaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9TQ0FOKSB8fCBydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfRklORF9QSEFTRV9TRUFSQ0gpKQotCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIHJ0d19wMnBfcHJlX3N0YXRlKHB3ZGluZm8pKTsKLQkJCXJ0d19wMnBfZmluZHBoYXNlX2V4X3NldChwd2RpbmZvLCBQMlBfRklORFBIQVNFX0VYX05PTkUpOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJCS8qIHJlc3RvcmUgUlggR0FJTiAqLworCQlydGw4NzIzYV9zZXRfaW5pdGlhbF9nYWluKHBhZGFwdGVyLCAweGZmKTsKKwkJLyogdHVybiBvbiBkeW5hbWljIGZ1bmN0aW9ucyAqLworCQlydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X3Jlc3RvcmUocGFkYXB0ZXIpOwogCi0JCQlwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3RhdGUgPSBTQ0FOX0NPTVBMRVRFOworCQlpZiAoaXNfY2xpZW50X2Fzc29jaWF0ZWRfdG9fYXAyM2EocGFkYXB0ZXIpID09IHRydWUpCisJCQlpc3N1ZV9udWxsZGF0YTIzYShwYWRhcHRlciwgTlVMTCwgMCwgMywgNTAwKTsKIAotCQkJLyogc3dpdGNoIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNoYW5uZWwgKi8KKwkJcnRsODcyM2FfbWxtZV9zaXRlc3VydmV5KHBhZGFwdGVyLCAwKTsKIAotCQkJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7CisJCXJlcG9ydF9zdXJ2ZXlkb25lX2V2ZW50MjNhKHBhZGFwdGVyKTsKIAotCQkJLyogZmx1c2ggNC1BQyBRdWV1ZSBhZnRlciBzaXRlX3N1cnZleTIzYSAqLwotCQkJLyogdmFsOCA9IDA7ICovCi0JCQkvKiBydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX1RYUEFVU0UsICh1OCAqKSgmdmFsOCkpOyAqLworCQlwbWxtZWV4dC0+Y2hhbl9zY2FuX3RpbWUgPSBTVVJWRVlfVE87CisJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zdGF0ZSA9IFNDQU5fRElTQUJMRTsKIAotCQkJLyogY29uZmlnIE1TUiAqLwotCQkJU2V0X01TUjIzYShwYWRhcHRlciwgKHBtbG1laW5mby0+c3RhdGUgJiAweDMpKTsKLQotCQkJaW5pdGlhbGdhaW4gPSAweGZmOyAvKiByZXN0b3JlIFJYIEdBSU4gKi8KLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfSU5JVElBTF9HQUlOLCAodTggKikoJmluaXRpYWxnYWluKSk7Ci0JCQkvKiB0dXJuIG9uIGR5bmFtaWMgZnVuY3Rpb25zICovCi0JCQlSZXN0b3JlX0RNX0Z1bmNfRmxhZzIzYShwYWRhcHRlcik7Ci0JCQkvKiBTd2l0Y2hfRE1fRnVuYzIzYShwYWRhcHRlciwgRFlOQU1JQ19BTExfRlVOQ19FTkFCTEUsIHRydWUpOyAqLwotCi0JCQlpZiAoaXNfY2xpZW50X2Fzc29jaWF0ZWRfdG9fYXAyM2EocGFkYXB0ZXIpID09IHRydWUpCi0JCQl7Ci0JCQkJaXNzdWVfbnVsbGRhdGEyM2EocGFkYXB0ZXIsIE5VTEwsIDAsIDMsIDUwMCk7Ci0KLQkJCX0KLQotCQkJdmFsOCA9IDA7IC8qIHN1cnZleSBkb25lICovCi0JCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX01MTUVfU0lURVNVUlZFWSwgKHU4ICopKCZ2YWw4KSk7Ci0KLQkJCXJlcG9ydF9zdXJ2ZXlkb25lX2V2ZW50MjNhKHBhZGFwdGVyKTsKLQotCQkJcG1sbWVleHQtPmNoYW5fc2Nhbl90aW1lID0gU1VSVkVZX1RPOwotCQkJcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnN0YXRlID0gU0NBTl9ESVNBQkxFOwotCi0JCQlpc3N1ZV9hY3Rpb25fQlNTQ29leGlzdFBhY2tldChwYWRhcHRlcik7Ci0JCQlpc3N1ZV9hY3Rpb25fQlNTQ29leGlzdFBhY2tldChwYWRhcHRlcik7Ci0JCQlpc3N1ZV9hY3Rpb25fQlNTQ29leGlzdFBhY2tldChwYWRhcHRlcik7Ci0KLQkJfQorCQlpc3N1ZV9hY3Rpb25fQlNTQ29leGlzdFBhY2tldChwYWRhcHRlcik7CisJCWlzc3VlX2FjdGlvbl9CU1NDb2V4aXN0UGFja2V0KHBhZGFwdGVyKTsKKwkJaXNzdWVfYWN0aW9uX0JTU0NvZXhpc3RQYWNrZXQocGFkYXB0ZXIpOwogCX0KIAogCXJldHVybjsKIH0KIAogLyogY29sbGVjdCBic3MgaW5mbyBmcm9tIEJlYWNvbiBhbmQgUHJvYmUgcmVxdWVzdC9yZXNwb25zZSBmcmFtZXMuICovCi11OCBjb2xsZWN0X2Jzc19pbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSwgc3RydWN0IHdsYW5fYnNzaWRfZXggKmJzc2lkKQoraW50IGNvbGxlY3RfYnNzX2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCXN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSwKKwkJCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpic3NpZCkKIHsKLQlpbnQJaTsKLQl1MzIJbGVuOwotCXU4CSpwOwotCXUxNgl2YWwxNjsKKwlpbnQgaTsKKwljb25zdCB1OCAqcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJlY3ZfZnJhbWUtPnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OAkqcGZyYW1lID0gc2tiLT5kYXRhOwotCXUzMglwYWNrZXRfbGVuID0gc2tiLT5sZW47CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKIAl1OCBpZV9vZmZzZXQ7Ci0Jc3RydWN0IHJlZ2lzdHJ5X3ByaXYJKnByZWdpc3RyeXByaXYgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCByZWdpc3RyeV9wcml2ICpwcmVnaXN0cnlwcml2ID0gJnBhZGFwdGVyLT5yZWdpc3RyeXByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKKwl1MTYgY2FwYWJfaW5mbzsKIAotCWxlbiA9IHBhY2tldF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOworCWxlbmd0aCA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAotCWlmIChsZW4gPiBNQVhfSUVfU1opCi0JeworCWlmIChsZW5ndGggPiBNQVhfSUVfU1opIHsKIAkJLyogREJHXzg3MjNBKCJJRSB0b28gbG9uZyBmb3Igc3VydmV5IGV2ZW50XG4iKTsgKi8KIAkJcmV0dXJuIF9GQUlMOwogCX0KIAogCW1lbXNldChic3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSk7CiAKLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24obWdtdC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJYnNzaWQtPnJlc2VydmVkID0gMTsKLQkJaWVfb2Zmc2V0ID0gX0JFQUNPTl9JRV9PRkZTRVRfOworCQlpZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTsKKwkJY2FwYWJfaW5mbyA9IG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm87CisJfSBlbHNlICBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3JlcShtZ210LT5mcmFtZV9jb250cm9sKSkgeworCQlpZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCisJCQkJICAgICB1LnByb2JlX3JlcS52YXJpYWJsZSk7CisJCWJzc2lkLT5yZXNlcnZlZCA9IDI7CisJCWNhcGFiX2luZm8gPSAwOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJaWVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCSAgICAgdS5wcm9iZV9yZXNwLnZhcmlhYmxlKTsKKwkJYnNzaWQtPnJlc2VydmVkID0gMzsKKwkJY2FwYWJfaW5mbyA9IG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvOwogCX0gZWxzZSB7Ci0JCS8qICBGSVhNRSA6IG1vcmUgdHlwZSAqLwotCQlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQlpZV9vZmZzZXQgPSBfUFJPQkVSRVFfSUVfT0ZGU0VUXzsKLQkJCWJzc2lkLT5yZXNlcnZlZCA9IDI7Ci0JCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQkJaWVfb2Zmc2V0ID0gX1BST0JFUlNQX0lFX09GRlNFVF87Ci0JCQlic3NpZC0+cmVzZXJ2ZWQgPSAzOwotCQl9IGVsc2UgewotCQkJYnNzaWQtPnJlc2VydmVkID0gMDsKLQkJCWllX29mZnNldCA9IF9GSVhFRF9JRV9MRU5HVEhfOwotCQl9CisJCWJzc2lkLT5yZXNlcnZlZCA9IDA7CisJCWllX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOworCQljYXBhYl9pbmZvID0gbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbzsKIAl9CisJaWVfb2Zmc2V0IC09IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdSk7CiAKLQlic3NpZC0+TGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSAtIE1BWF9JRV9TWiArIGxlbjsKKwlic3NpZC0+TGVuZ3RoID0gb2Zmc2V0b2Yoc3RydWN0IHdsYW5fYnNzaWRfZXgsIElFcykgKyBsZW5ndGg7CiAKIAkvKiBiZWxvdyBpcyB0byBjb3B5IHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50ICovCi0JYnNzaWQtPklFTGVuZ3RoID0gbGVuOwotCW1lbWNweShic3NpZC0+SUVzLCAocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSksIGJzc2lkLT5JRUxlbmd0aCk7CisJYnNzaWQtPklFTGVuZ3RoID0gbGVuZ3RoOworCW1lbWNweShic3NpZC0+SUVzLCAmbWdtdC0+dSwgYnNzaWQtPklFTGVuZ3RoKTsKIAogCS8qIGdldCB0aGUgc2lnbmFsIHN0cmVuZ3RoICovCi0JYnNzaWQtPlJzc2kgPSBwcmVjdl9mcmFtZS0+YXR0cmliLnBoeV9pbmZvLlJlY3ZTaWduYWxQb3dlcjsgLyogIGluIGRCTS5yYXcgZGF0YSAqLwotCWJzc2lkLT5QaHlJbmZvLlNpZ25hbFF1YWxpdHkgPSBwcmVjdl9mcmFtZS0+YXR0cmliLnBoeV9pbmZvLlNpZ25hbFF1YWxpdHk7LyogaW4gcGVyY2VudGFnZSAqLwotCWJzc2lkLT5QaHlJbmZvLlNpZ25hbFN0cmVuZ3RoID0gcHJlY3ZfZnJhbWUtPmF0dHJpYi5waHlfaW5mby5TaWduYWxTdHJlbmd0aDsvKiBpbiBwZXJjZW50YWdlICovCisJLyogIGluIGRCTS5yYXcgZGF0YSAqLworCWJzc2lkLT5Sc3NpID0gcHJlY3ZfZnJhbWUtPmF0dHJpYi5waHlfaW5mby5SZWN2U2lnbmFsUG93ZXI7CisJYnNzaWQtPlBoeUluZm8uU2lnbmFsUXVhbGl0eSA9CisJCXByZWN2X2ZyYW1lLT5hdHRyaWIucGh5X2luZm8uU2lnbmFsUXVhbGl0eTsvKiBpbiBwZXJjZW50YWdlICovCisJYnNzaWQtPlBoeUluZm8uU2lnbmFsU3RyZW5ndGggPQorCQlwcmVjdl9mcmFtZS0+YXR0cmliLnBoeV9pbmZvLlNpZ25hbFN0cmVuZ3RoOy8qIGluIHBlcmNlbnRhZ2UgKi8KIAogCS8qICBjaGVja2luZyBTU0lEICovCi0JaWYgKChwID0gcnR3X2dldF9pZTIzYShic3NpZC0+SUVzICsgaWVfb2Zmc2V0LCBfU1NJRF9JRV8sICZsZW4sIGJzc2lkLT5JRUxlbmd0aCAtIGllX29mZnNldCkpID09IE5VTEwpCi0JeworCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1NTSUQsIGJzc2lkLT5JRXMgKyBpZV9vZmZzZXQsCisJCQkgICAgIGJzc2lkLT5JRUxlbmd0aCAtIGllX29mZnNldCk7CisKKwlpZiAoIXApIHsKIAkJREJHXzg3MjNBKCJtYXJjOiBjYW5ub3QgZmluZCBTU0lEIGZvciBzdXJ2ZXkgZXZlbnRcbiIpOwogCQlyZXR1cm4gX0ZBSUw7CiAJfQogCi0JaWYgKCoocCArIDEpKSB7Ci0JCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7Ci0JCQlEQkdfODcyM0EoIiVzKCktJWQ6IElFIHRvbyBsb25nICglZCkgZm9yIHN1cnZleSAiCi0JCQkJICAiZXZlbnRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgbGVuKTsKLQkJCXJldHVybiBfRkFJTDsKLQkJfQotCQltZW1jcHkoYnNzaWQtPlNzaWQuc3NpZCwgKHAgKyAyKSwgKihwICsgMSkpOwotCQlic3NpZC0+U3NpZC5zc2lkX2xlbiA9ICoocCArIDEpOwotCX0gZWxzZSB7Ci0JCWJzc2lkLT5Tc2lkLnNzaWRfbGVuID0gMDsKKwlpZiAocFsxXSA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJREJHXzg3MjNBKCIlcygpLSVkOiBJRSB0b28gbG9uZyAoJWQpIGZvciBzdXJ2ZXkgIgorCQkJICAiZXZlbnRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgcFsxXSk7CisJCXJldHVybiBfRkFJTDsKIAl9CisJbWVtY3B5KGJzc2lkLT5Tc2lkLnNzaWQsIHAgKyAyLCBwWzFdKTsKKwlic3NpZC0+U3NpZC5zc2lkX2xlbiA9IHBbMV07CiAKIAltZW1zZXQoYnNzaWQtPlN1cHBvcnRlZFJhdGVzLCAwLCBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVgpOwogCiAJLyogY2hlY2tpbmcgcmF0ZSBpbmZvLi4uICovCiAJaSA9IDA7Ci0JcCA9IHJ0d19nZXRfaWUyM2EoYnNzaWQtPklFcyArIGllX29mZnNldCwgX1NVUFBPUlRFRFJBVEVTX0lFXywgJmxlbiwgYnNzaWQtPklFTGVuZ3RoIC0gaWVfb2Zmc2V0KTsKLQlpZiAocCAhPSBOVUxMKQotCXsKLQkJaWYgKGxlbiA+IE5ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWCkKLQkJewotCQkJREJHXzg3MjNBKCIlcygpLSVkOiBJRSB0b28gbG9uZyAoJWQpIGZvciBzdXJ2ZXkgZXZlbnRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgbGVuKTsKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9TVVBQX1JBVEVTLCBic3NpZC0+SUVzICsgaWVfb2Zmc2V0LAorCQkJICAgICBic3NpZC0+SUVMZW5ndGggLSBpZV9vZmZzZXQpOworCWlmIChwKSB7CisJCWlmIChwWzFdID4gTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYKSB7CisJCQlEQkdfODcyM0EoIiVzKCktJWQ6IElFIHRvbyBsb25nICglZCkgZm9yIHN1cnZleSAiCisJCQkJICAiZXZlbnRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgcFsxXSk7CiAJCQlyZXR1cm4gX0ZBSUw7CiAJCX0KLQkJbWVtY3B5KGJzc2lkLT5TdXBwb3J0ZWRSYXRlcywgKHAgKyAyKSwgbGVuKTsKLQkJaSA9IGxlbjsKKwkJbWVtY3B5KGJzc2lkLT5TdXBwb3J0ZWRSYXRlcywgcCArIDIsIHBbMV0pOworCQlpID0gcFsxXTsKIAl9CiAKLQlwID0gcnR3X2dldF9pZTIzYShic3NpZC0+SUVzICsgaWVfb2Zmc2V0LCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywgJmxlbiwgYnNzaWQtPklFTGVuZ3RoIC0gaWVfb2Zmc2V0KTsKLQlpZiAocCAhPSBOVUxMKQotCXsKLQkJaWYgKGxlbiA+IChORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVgtaSkpCi0JCXsKLQkJCURCR184NzIzQSgiJXMoKS0lZDogSUUgdG9vIGxvbmcgKCVkKSBmb3Igc3VydmV5IGV2ZW50XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGxlbik7CisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsIGJzc2lkLT5JRXMgKyBpZV9vZmZzZXQsCisJCQkgICAgIGJzc2lkLT5JRUxlbmd0aCAtIGllX29mZnNldCk7CisJaWYgKHApIHsKKwkJaWYgKHBbMV0gPiAoTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYLWkpKSB7CisJCQlEQkdfODcyM0EoIiVzKCktJWQ6IElFIHRvbyBsb25nICglZCkgZm9yIHN1cnZleSAiCisJCQkJICAiZXZlbnRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgcFsxXSk7CiAJCQlyZXR1cm4gX0ZBSUw7CiAJCX0KLQkJbWVtY3B5KGJzc2lkLT5TdXBwb3J0ZWRSYXRlcyArIGksIChwICsgMiksIGxlbik7Ci0JfQotCi0JLyogdG9kbzogKi8KLQl7Ci0JCWJzc2lkLT5OZXR3b3JrVHlwZUluVXNlID0gTmRpczgwMl8xMU9GRE0yNDsKKwkJbWVtY3B5KGJzc2lkLT5TdXBwb3J0ZWRSYXRlcyArIGksIHAgKyAyLCBwWzFdKTsKIAl9CiAKIAlpZiAoYnNzaWQtPklFTGVuZ3RoIDwgMTIpCiAJCXJldHVybiBfRkFJTDsKIAogCS8qICBDaGVja2luZyBmb3IgRFNDb25maWcgKi8KLQlwID0gcnR3X2dldF9pZTIzYShic3NpZC0+SUVzICsgaWVfb2Zmc2V0LCBfRFNTRVRfSUVfLCAmbGVuLCBic3NpZC0+SUVMZW5ndGggLSBpZV9vZmZzZXQpOworCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0RTX1BBUkFNUywgYnNzaWQtPklFcyArIGllX29mZnNldCwKKwkJCSAgICAgYnNzaWQtPklFTGVuZ3RoIC0gaWVfb2Zmc2V0KTsKIAotCWJzc2lkLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnID0gMDsKLQlic3NpZC0+Q29uZmlndXJhdGlvbi5MZW5ndGggPSAwOworCWJzc2lkLT5EU0NvbmZpZyA9IDA7CiAKLQlpZiAocCkKLQl7Ci0JCWJzc2lkLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnID0gKihwICsgMik7Ci0JfQotCWVsc2UKLQl7LyogIEluIDVHLCBzb21lIGFwIGRvIG5vdCBoYXZlIERTU0VUIElFICovCisJaWYgKHApIHsKKwkJYnNzaWQtPkRTQ29uZmlnID0gcFsyXTsKKwl9IGVsc2Ugey8qICBJbiA1Rywgc29tZSBhcCBkbyBub3QgaGF2ZSBEU1NFVCBJRSAqLwogCQkvKiAgY2hlY2tpbmcgSFQgaW5mbyBmb3IgY2hhbm5lbCAqLwotCQlwID0gcnR3X2dldF9pZTIzYShic3NpZC0+SUVzICsgaWVfb2Zmc2V0LCBfSFRfQUREX0lORk9fSUVfLCAmbGVuLCBic3NpZC0+SUVMZW5ndGggLSBpZV9vZmZzZXQpOwotCQlpZiAocCkKLQkJewotCQkJc3RydWN0IEhUX2luZm9fZWxlbWVudCAqSFRfaW5mbyA9IChzdHJ1Y3QgSFRfaW5mb19lbGVtZW50ICopKHAgKyAyKTsKLQkJCWJzc2lkLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnID0gSFRfaW5mby0+cHJpbWFyeV9jaGFubmVsOwotCQl9Ci0JCWVsc2UKLQkJeyAvKiAgdXNlIGN1cnJlbnQgY2hhbm5lbCAqLwotCQkJYnNzaWQtPkNvbmZpZ3VyYXRpb24uRFNDb25maWcgPSBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpOwotCQl9CisJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX09QRVJBVElPTiwKKwkJCQkgICAgIGJzc2lkLT5JRXMgKyBpZV9vZmZzZXQsCisJCQkJICAgICBic3NpZC0+SUVMZW5ndGggLSBpZV9vZmZzZXQpOworCQlpZiAocCkgeworCQkJc3RydWN0IEhUX2luZm9fZWxlbWVudCAqSFRfaW5mbyA9CisJCQkJKHN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKikocCArIDIpOworCQkJYnNzaWQtPkRTQ29uZmlnID0gSFRfaW5mby0+cHJpbWFyeV9jaGFubmVsOworCQl9IGVsc2UgLyogIHVzZSBjdXJyZW50IGNoYW5uZWwgKi8KKwkJCWJzc2lkLT5EU0NvbmZpZyA9IHJ0d19nZXRfb3Blcl9jaDIzYShwYWRhcHRlcik7CiAJfQogCi0JaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVxKG1nbXQtPmZyYW1lX2NvbnRyb2wpKSB7CiAJCS8qICBGSVhNRSAqLwotCQlic3NpZC0+SW5mcmFzdHJ1Y3R1cmVNb2RlID0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOwotCQlldGhlcl9hZGRyX2NvcHkoYnNzaWQtPk1hY0FkZHJlc3MsIGhkci0+YWRkcjIpOworCQlic3NpZC0+aWZtb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwkJZXRoZXJfYWRkcl9jb3B5KGJzc2lkLT5NYWNBZGRyZXNzLCBtZ210LT5zYSk7CiAJCWJzc2lkLT5Qcml2YWN5ID0gMTsKIAkJcmV0dXJuIF9TVUNDRVNTOwogCX0KIAotCW1lbWNweSgmYnNzaWQtPkNvbmZpZ3VyYXRpb24uQmVhY29uUGVyaW9kLCBydHdfZ2V0X2JlYWNvbl9pbnRlcnZhbDIzYV9mcm9tX2llKGJzc2lkLT5JRXMpLCAyKTsKLQlic3NpZC0+Q29uZmlndXJhdGlvbi5CZWFjb25QZXJpb2QgPSBsZTMyX3RvX2NwdShic3NpZC0+Q29uZmlndXJhdGlvbi5CZWFjb25QZXJpb2QpOworCWJzc2lkLT5CZWFjb25QZXJpb2QgPSBnZXRfdW5hbGlnbmVkX2xlMTYoCisJCXJ0d19nZXRfYmVhY29uX2ludGVydmFsMjNhX2Zyb21faWUoYnNzaWQtPklFcykpOwogCi0JdmFsMTYgPSBydHdfZ2V0X2NhcGFiaWxpdHkyM2EoYnNzaWQpOwotCi0JaWYgKHZhbDE2ICYgQklUKDApKSB7Ci0JCWJzc2lkLT5JbmZyYXN0cnVjdHVyZU1vZGUgPSBOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmU7Ci0JCWV0aGVyX2FkZHJfY29weShic3NpZC0+TWFjQWRkcmVzcywgaGRyLT5hZGRyMik7CisJaWYgKGNhcGFiX2luZm8gJiBCSVQoMCkpIHsKKwkJYnNzaWQtPmlmbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJCWV0aGVyX2FkZHJfY29weShic3NpZC0+TWFjQWRkcmVzcywgbWdtdC0+c2EpOwogCX0gZWxzZSB7Ci0JCWJzc2lkLT5JbmZyYXN0cnVjdHVyZU1vZGUgPSBOZGlzODAyXzExSUJTUzsKLQkJZXRoZXJfYWRkcl9jb3B5KGJzc2lkLT5NYWNBZGRyZXNzLCBoZHItPmFkZHIzKTsKKwkJYnNzaWQtPmlmbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FESE9DOworCQlldGhlcl9hZGRyX2NvcHkoYnNzaWQtPk1hY0FkZHJlc3MsIG1nbXQtPmJzc2lkKTsKIAl9CiAKLQlpZiAodmFsMTYgJiBCSVQoNCkpCisJaWYgKGNhcGFiX2luZm8gJiBCSVQoNCkpCiAJCWJzc2lkLT5Qcml2YWN5ID0gMTsKIAllbHNlCiAJCWJzc2lkLT5Qcml2YWN5ID0gMDsKIAotCWJzc2lkLT5Db25maWd1cmF0aW9uLkFUSU1XaW5kb3cgPSAwOworCWJzc2lkLT5BVElNV2luZG93ID0gMDsKIAogCS8qIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBjaGVjayAqLwotCWlmICgocHJlZ2lzdHJ5cHJpdi0+d2lmaV9zcGVjID09IDEpICYmIChmYWxzZSA9PSBwbWxtZWluZm8tPmJ3bW9kZV91cGRhdGVkKSkKLQl7CisJaWYgKHByZWdpc3RyeXByaXYtPndpZmlfc3BlYyA9PSAxICYmCisJICAgIHBtbG1laW5mby0+Yndtb2RlX3VwZGF0ZWQgPT0gZmFsc2UpIHsKIAkJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAotCQlwID0gcnR3X2dldF9pZTIzYShic3NpZC0+SUVzICsgaWVfb2Zmc2V0LCBfSFRfQ0FQQUJJTElUWV9JRV8sICZsZW4sIGJzc2lkLT5JRUxlbmd0aCAtIGllX29mZnNldCk7Ci0JCWlmIChwICYmIGxlbiA+IDApIHsKLQkJCXN0cnVjdCBIVF9jYXBzX2VsZW1lbnQJKnBIVF9jYXBzOwotCQkJcEhUX2NhcHMgPSAoc3RydWN0IEhUX2NhcHNfZWxlbWVudAkqKShwICsgMik7CisJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksCisJCQkJICAgICBic3NpZC0+SUVzICsgaWVfb2Zmc2V0LAorCQkJCSAgICAgYnNzaWQtPklFTGVuZ3RoIC0gaWVfb2Zmc2V0KTsKKwkJaWYgKHAgJiYgcFsxXSA+IDApIHsKKwkJCXN0cnVjdCBIVF9jYXBzX2VsZW1lbnQgKnBIVF9jYXBzOworCQkJcEhUX2NhcHMgPSAoc3RydWN0IEhUX2NhcHNfZWxlbWVudCAqKShwICsgMik7CiAKIAkJCWlmIChwSFRfY2Fwcy0+dS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8gJiBCSVQoMTQpKQogCQkJCXBtbG1lcHJpdi0+bnVtX0ZvcnR5TUh6SW50b2xlcmFudCsrOwogCQl9IGVsc2UKLQkJewogCQkJcG1sbWVwcml2LT5udW1fc3RhX25vX2h0Kys7Ci0JCX0KIAl9CiAKIAogCS8qICBtYXJrIGJzcyBpbmZvIHJlY2V2aW5nIGZyb20gbmVhcmJ5IGNoYW5uZWwgYXMgU2lnbmFsUXVhbGl0eSAxMDEgKi8KLQlpZiAoYnNzaWQtPkNvbmZpZ3VyYXRpb24uRFNDb25maWcgIT0gcnR3X2dldF9vcGVyX2NoMjNhKHBhZGFwdGVyKSkKKwlpZiAoYnNzaWQtPkRTQ29uZmlnICE9IHJ0d19nZXRfb3Blcl9jaDIzYShwYWRhcHRlcikpCiAJCWJzc2lkLT5QaHlJbmZvLlNpZ25hbFF1YWxpdHkgPSAxMDE7CiAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXZvaWQgc3RhcnRfY3JlYXRlX2lic3MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKiBwYWRhcHRlcikKK3N0YXRpYyB2b2lkIHN0YXJ0X2NyZWF0ZV9pYnNzKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpCiB7CiAJdW5zaWduZWQgc2hvcnQJY2FwczsKLQl1OAl2YWw4OwotCXU4CWpvaW5fdHlwZTsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7Ci0JcG1sbWVleHQtPmN1cl9jaGFubmVsID0gKHU4KXBuZXR3b3JrLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnOworCXBtbG1lZXh0LT5jdXJfY2hhbm5lbCA9ICh1OClwbmV0d29yay0+RFNDb25maWc7CiAJcG1sbWVpbmZvLT5iY25faW50ZXJ2YWwgPSBnZXRfYmVhY29uX2ludGVydmFsMjNhKHBuZXR3b3JrKTsKIAogCS8qIHVwZGF0ZSB3aXJlbGVzcyBtb2RlICovCkBAIC03OTgzLDE2ICs0NjY2LDE0IEBACiAJLyogdWRwYXRlIGNhcGFiaWxpdHkgKi8KIAljYXBzID0gcnR3X2dldF9jYXBhYmlsaXR5MjNhKHBuZXR3b3JrKTsKIAl1cGRhdGVfY2FwaW5mbzIzYShwYWRhcHRlciwgY2Fwcyk7Ci0JaWYgKGNhcHMmY2FwX0lCU1MpLyogYWRob2MgbWFzdGVyICovCi0JewotCQl2YWw4ID0gMHhjZjsKLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9TRUNfQ0ZHLCAodTggKikoJnZhbDgpKTsKKwlpZiAoY2FwcyAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSB7CS8qIGFkaG9jIG1hc3RlciAqLworCQlydGw4NzIzYV9zZXRfc2VjX2NmZyhwYWRhcHRlciwgMHhjZik7CiAKIAkJLyogc3dpdGNoIGNoYW5uZWwgKi8KIAkJLyogU2VsZWN0Q2hhbm5lbDIzYShwYWRhcHRlciwgcG1sbWVleHQtPmN1cl9jaGFubmVsLCBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFKTsgKi8KIAkJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIEhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkUsIEhUX0NIQU5ORUxfV0lEVEhfMjApOwogCi0JCWJlYWNvbl90aW1pbmdfY29udHJvbDIzYShwYWRhcHRlcik7CisJCXJ0bDg3MjNhX1NldEJlYWNvblJlbGF0ZWRSZWdpc3RlcnMocGFkYXB0ZXIpOwogCiAJCS8qIHNldCBtc3IgdG8gV0lGSV9GV19BREhPQ19TVEFURSAqLwogCQlwbWxtZWluZm8tPnN0YXRlID0gV0lGSV9GV19BREhPQ19TVEFURTsKQEAgLTgwMDgsOSArNDY4OSw4IEBACiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JTU0lELCBwYWRhcHRlci0+cmVnaXN0cnlwcml2LmRldl9uZXR3b3JrLk1hY0FkZHJlc3MpOwotCQkJam9pbl90eXBlID0gMDsKLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9KT0lOLCAodTggKikoJmpvaW5fdHlwZSkpOworCQkJaHdfdmFyX3NldF9ic3NpZChwYWRhcHRlciwgcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5kZXZfbmV0d29yay5NYWNBZGRyZXNzKTsKKwkJCWh3X3Zhcl9zZXRfbWxtZV9qb2luKHBhZGFwdGVyLCAwKTsKIAogCQkJcmVwb3J0X2pvaW5fcmVzMjNhKHBhZGFwdGVyLCAxKTsKIAkJCXBtbG1laW5mby0+c3RhdGUgfD0gV0lGSV9GV19BU1NPQ19TVUNDRVNTOwpAQCAtODAxOCwxMiArNDY5OCwxMiBAQAogCX0KIAllbHNlCiAJewotCQlEQkdfODcyM0EoInN0YXJ0X2NyZWF0ZV9pYnNzMjNhLCBpbnZhbGlkIGNhcDoleFxuIiwgY2Fwcyk7CisJCURCR184NzIzQSgiJXM6IGludmFsaWQgY2FwOiV4XG4iLCBfX2Z1bmNfXywgY2Fwcyk7CiAJCXJldHVybjsKIAl9CiB9CiAKLXZvaWQgc3RhcnRfY2xudF9qb2luMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpCitzdGF0aWMgdm9pZCBzdGFydF9jbG50X2pvaW4oc3RydWN0IHJ0d19hZGFwdGVyKiBwYWRhcHRlcikKIHsKIAl1bnNpZ25lZCBzaG9ydAljYXBzOwogCXU4CXZhbDg7CkBAIC04MDMyLDcgKzQ3MTIsNyBAQAogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7CiAJaW50IGJlYWNvbl90aW1lb3V0OwogCi0JcG1sbWVleHQtPmN1cl9jaGFubmVsID0gKHU4KXBuZXR3b3JrLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnOworCXBtbG1lZXh0LT5jdXJfY2hhbm5lbCA9ICh1OClwbmV0d29yay0+RFNDb25maWc7CiAJcG1sbWVpbmZvLT5iY25faW50ZXJ2YWwgPSBnZXRfYmVhY29uX2ludGVydmFsMjNhKHBuZXR3b3JrKTsKIAogCS8qIHVwZGF0ZSB3aXJlbGVzcyBtb2RlICovCkBAIC04MDQxLDE1ICs0NzIxLDE2IEBACiAJLyogdWRwYXRlIGNhcGFiaWxpdHkgKi8KIAljYXBzID0gcnR3X2dldF9jYXBhYmlsaXR5MjNhKHBuZXR3b3JrKTsKIAl1cGRhdGVfY2FwaW5mbzIzYShwYWRhcHRlciwgY2Fwcyk7Ci0JaWYgKGNhcHMmY2FwX0VTUykgeworCWlmIChjYXBzICYgV0xBTl9DQVBBQklMSVRZX0VTUykgewogCQkvKiBzd2l0Y2ggY2hhbm5lbCAqLwogCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHBtbG1lZXh0LT5jdXJfY2hhbm5lbCwgcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQsIHBtbG1lZXh0LT5jdXJfYndtb2RlKTsKIAogCQlTZXRfTVNSMjNhKHBhZGFwdGVyLCBXSUZJX0ZXX1NUQVRJT05fU1RBVEUpOwogCi0JCXZhbDggPSAocG1sbWVpbmZvLT5hdXRoX2FsZ28gPT0gZG90MTFBdXRoQWxncnRobV84MDIxWCk/IDB4Y2M6IDB4Y2Y7CisJCXZhbDggPSAocG1sbWVpbmZvLT5hdXRoX2FsZ28gPT0gZG90MTFBdXRoQWxncnRobV84MDIxWCkgPworCQkJMHhjYzogMHhjZjsKIAotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX1NFQ19DRkcsICh1OCAqKSgmdmFsOCkpOworCQlydGw4NzIzYV9zZXRfc2VjX2NmZyhwYWRhcHRlciwgdmFsOCk7CiAKIAkJLyogc3dpdGNoIGNoYW5uZWwgKi8KIAkJLyogc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7ICovCkBAIC04MDYxLDE4ICs0NzQyLDE1IEBACiAJCW1vZF90aW1lcigmcGFkYXB0ZXItPm1sbWVwcml2LmFzc29jX3RpbWVyLCBqaWZmaWVzICsKIAkJCSAgbXNlY3NfdG9famlmZmllcygoUkVBVVRIX1RPICogUkVBVVRIX0xJTUlUKSArIChSRUFTU09DX1RPKlJFQVNTT0NfTElNSVQpICsgYmVhY29uX3RpbWVvdXQpKTsKIAkJcG1sbWVpbmZvLT5zdGF0ZSA9IFdJRklfRldfQVVUSF9OVUxMIHwgV0lGSV9GV19TVEFUSU9OX1NUQVRFOwotCX0KLQllbHNlIGlmIChjYXBzJmNhcF9JQlNTKSAvKiBhZGhvYyBjbGllbnQgKi8KLQl7CisJfSBlbHNlIGlmIChjYXBzICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpIHsJLyogYWRob2MgY2xpZW50ICovCiAJCVNldF9NU1IyM2EocGFkYXB0ZXIsIFdJRklfRldfQURIT0NfU1RBVEUpOwogCi0JCXZhbDggPSAweGNmOwotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX1NFQ19DRkcsICh1OCAqKSgmdmFsOCkpOworCQlydGw4NzIzYV9zZXRfc2VjX2NmZyhwYWRhcHRlciwgMHhjZik7CiAKIAkJLyogc3dpdGNoIGNoYW5uZWwgKi8KIAkJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7CiAKLQkJYmVhY29uX3RpbWluZ19jb250cm9sMjNhKHBhZGFwdGVyKTsKKwkJcnRsODcyM2FfU2V0QmVhY29uUmVsYXRlZFJlZ2lzdGVycyhwYWRhcHRlcik7CiAKIAkJcG1sbWVpbmZvLT5zdGF0ZSA9IFdJRklfRldfQURIT0NfU1RBVEU7CiAKQEAgLTgwODUsNyArNDc2Myw3IEBACiAJfQogfQogCi12b2lkIHN0YXJ0X2NsbnRfYXV0aDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyKQorc3RhdGljIHZvaWQgc3RhcnRfY2xudF9hdXRoKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpCiB7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKQEAgLTgxMDksMTIgKzQ3ODcsMTIgQEAKIAlpc3N1ZV9kZWF1dGgyM2EocGFkYXB0ZXIsICgmcG1sbWVpbmZvLT5uZXR3b3JrKS0+TWFjQWRkcmVzcywgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwogCiAJREJHXzg3MjNBX0xFVkVMKF9kcnZfYWx3YXlzXywgInN0YXJ0IGF1dGhcbiIpOwotCWlzc3VlX2F1dGgyM2EocGFkYXB0ZXIsIE5VTEwsIDApOworCWlzc3VlX2F1dGgocGFkYXB0ZXIsIE5VTEwsIDApOwogCiAJc2V0X2xpbmtfdGltZXIocG1sbWVleHQsIFJFQVVUSF9UTyk7CiB9CiAKLXZvaWQgc3RhcnRfY2xudF9hc3NvYzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyKQorc3RhdGljIHZvaWQgc3RhcnRfY2xudF9hc3NvYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyKQogewogCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CkBAIC04MTI0LDEyICs0ODAyLDEzIEBACiAJcG1sbWVpbmZvLT5zdGF0ZSAmPSAofihXSUZJX0ZXX0FVVEhfTlVMTCB8IFdJRklfRldfQVVUSF9TVEFURSkpOwogCXBtbG1laW5mby0+c3RhdGUgfD0gKFdJRklfRldfQVVUSF9TVUNDRVNTIHwgV0lGSV9GV19BU1NPQ19TVEFURSk7CiAKLQlpc3N1ZV9hc3NvY3JlcTIzYShwYWRhcHRlcik7CisJaXNzdWVfYXNzb2NyZXEocGFkYXB0ZXIpOwogCiAJc2V0X2xpbmtfdGltZXIocG1sbWVleHQsIFJFQVNTT0NfVE8pOwogfQogCi11bnNpZ25lZCBpbnQgcmVjZWl2ZV9kaXNjb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKk1hY0FkZHIsIHVuc2lnbmVkIHNob3J0IHJlYXNvbikKK2ludCByZWNlaXZlX2Rpc2Nvbm5lY3QyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgdW5zaWduZWQgY2hhciAqTWFjQWRkciwgdW5zaWduZWQgc2hvcnQgcmVhc29uKQogewogCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CkBAIC04MTU4LDcgKzQ4MzcsOCBAQAogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc184MDIxMWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHdsYW5fYnNzaWRfZXggKmJzc2lkKQorc3RhdGljIHZvaWQgcHJvY2Vzc184MDIxMWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgIHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpic3NpZCkKIHsKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQ7CkBAIC04MTcxLDEwICs0ODUxLDggQEAKIAogCS8qICBBZGp1c3QgY2hhbm5lbCBwbGFuIGJ5IEFQIENvdW50cnkgSUUgKi8KIAlpZiAocHJlZ2lzdHJ5cHJpdi0+ZW5hYmxlODAyMTFkICYmCi0JCSghcG1sbWVleHQtPnVwZGF0ZV9jaGFubmVsX3BsYW5fYnlfYXBfZG9uZSkpCi0JewotCQl1OCAqaWUsICpwOwotCQl1MzIgbGVuOworCSAgICAhcG1sbWVleHQtPnVwZGF0ZV9jaGFubmVsX3BsYW5fYnlfYXBfZG9uZSkgeworCQljb25zdCB1OCAqaWUsICpwOwogCQlzdHJ1Y3QgcnRfY2hhbm5lbF9wbGFuIGNocGxhbl9hcDsKIAkJc3RydWN0IHJ0X2NoYW5uZWxfaW5mbyBjaHBsYW5fc3RhW01BWF9DSEFOTkVMX05VTV07CiAJCXU4IGNvdW50cnlbNF07CkBAIC04MTgyLDMxICs0ODYwLDM0IEBACiAJCXU4IG5vYzsgLyogIG51bWJlciBvZiBjaGFubmVsICovCiAJCXU4IGosIGs7CiAKLQkJaWUgPSBydHdfZ2V0X2llMjNhKGJzc2lkLT5JRXMgKyBfRklYRURfSUVfTEVOR1RIXywgX0NPVU5UUllfSUVfLCAmbGVuLCBic3NpZC0+SUVMZW5ndGggLSBfRklYRURfSUVfTEVOR1RIXyk7Ci0JCWlmICghaWUpIHJldHVybjsKLQkJaWYgKGxlbiA8IDYpIHJldHVybjsKKwkJaWUgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0NPVU5UUlksCisJCQkJICAgICAgYnNzaWQtPklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLAorCQkJCSAgICAgIGJzc2lkLT5JRUxlbmd0aCAtIF9GSVhFRF9JRV9MRU5HVEhfKTsKKwkJaWYgKCFpZSB8fCBpZVsxXSA8IElFRUU4MDIxMV9DT1VOVFJZX0lFX01JTl9MRU4pCisJCQlyZXR1cm47CiAKKwkJcCA9IGllICsgMjsKKwkJaWUgKz0gaWVbMV07CiAJCWllICs9IDI7Ci0JCXAgPSBpZTsKLQkJaWUgKz0gbGVuOwogCi0JCW1lbXNldChjb3VudHJ5LCAwLCA0KTsKIAkJbWVtY3B5KGNvdW50cnksIHAsIDMpOworCQljb3VudHJ5WzNdID0gJ1wwJzsKKwogCQlwICs9IDM7CiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X25vdGljZV8sCi0JCQkJKCIlczogODAyLjExZCBjb3VudHJ5ID0lc1xuIiwgX19mdW5jX18sIGNvdW50cnkpKTsKKwkJCSAoIiVzOiA4MDIuMTFkIGNvdW50cnkgPSVzXG4iLCBfX2Z1bmNfXywgY291bnRyeSkpOwogCiAJCWkgPSAwOwotCQl3aGlsZSAoKGllIC0gcCkgPj0gMykKLQkJeworCQl3aGlsZSAoKGllIC0gcCkgPj0gMykgewogCQkJZmNuID0gKihwKyspOwogCQkJbm9jID0gKihwKyspOwogCQkJcCsrOwogCi0JCQlmb3IgKGogPSAwOyBqIDwgbm9jOyBqKyspCi0JCQl7Ci0JCQkJaWYgKGZjbiA8PSAxNCkgY2hhbm5lbCA9IGZjbiArIGo7IC8qICAyLjQgR0h6ICovCi0JCQkJZWxzZSBjaGFubmVsID0gZmNuICsgaio0OyAvKiAgNSBHSHogKi8KKwkJCWZvciAoaiA9IDA7IGogPCBub2M7IGorKykgeworCQkJCWlmIChmY24gPD0gMTQpCisJCQkJCWNoYW5uZWwgPSBmY24gKyBqOyAvKiAgMi40IEdIeiAqLworCQkJCWVsc2UKKwkJCQkJY2hhbm5lbCA9IGZjbiArIGogKiA0OyAvKiAgNSBHSHogKi8KIAogCQkJCWNocGxhbl9hcC5DaGFubmVsW2krK10gPSBjaGFubmVsOwogCQkJfQpAQCAtODIyMCw0NSArNDkwMSw1NSBAQAogCQlpID0gaiA9IGsgPSAwOwogCQlpZiAocHJlZ2lzdHJ5cHJpdi0+d2lyZWxlc3NfbW9kZSAmIFdJUkVMRVNTXzExRykgewogCQkJZG8gewotCQkJCWlmICgoaSA9PSBNQVhfQ0hBTk5FTF9OVU0pIHx8Ci0JCQkJCShjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gPT0gMCkgfHwKLQkJCQkJKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA+IDE0KSkKKwkJCQlpZiAoaSA9PSBNQVhfQ0hBTk5FTF9OVU0gfHwKKwkJCQkgICAgY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtID09IDAgfHwKKwkJCQkgICAgY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtID4gMTQpCiAJCQkJCWJyZWFrOwogCi0JCQkJaWYgKChqID09IGNocGxhbl9hcC5MZW4pIHx8IChjaHBsYW5fYXAuQ2hhbm5lbFtqXSA+IDE0KSkKKwkJCQlpZiAoaiA9PSBjaHBsYW5fYXAuTGVuIHx8CisJCQkJICAgIGNocGxhbl9hcC5DaGFubmVsW2pdID4gMTQpCiAJCQkJCWJyZWFrOwogCi0JCQkJaWYgKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA9PSBjaHBsYW5fYXAuQ2hhbm5lbFtqXSkgewotCQkJCQljaHBsYW5fbmV3W2tdLkNoYW5uZWxOdW0gPSBjaHBsYW5fYXAuQ2hhbm5lbFtqXTsKKwkJCQlpZiAoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtID09CisJCQkJICAgIGNocGxhbl9hcC5DaGFubmVsW2pdKSB7CisJCQkJCWNocGxhbl9uZXdba10uQ2hhbm5lbE51bSA9CisJCQkJCQljaHBsYW5fYXAuQ2hhbm5lbFtqXTsKIAkJCQkJY2hwbGFuX25ld1trXS5TY2FuVHlwZSA9IFNDQU5fQUNUSVZFOwogCQkJCQlpKys7CiAJCQkJCWorKzsKIAkJCQkJaysrOwotCQkJCX0gZWxzZSBpZiAoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtIDwgY2hwbGFuX2FwLkNoYW5uZWxbal0pIHsKLQkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0gY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtOwotCQkJCQljaHBsYW5fbmV3W2tdLlNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOworCQkJCX0gZWxzZSBpZiAoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtIDwKKwkJCQkJICAgY2hwbGFuX2FwLkNoYW5uZWxbal0pIHsKKwkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0KKwkJCQkJCWNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bTsKKwkJCQkJY2hwbGFuX25ld1trXS5TY2FuVHlwZSA9CisJCQkJCQlTQ0FOX1BBU1NJVkU7CiAJCQkJCWkrKzsKIAkJCQkJaysrOwotCQkJCX0gZWxzZSBpZiAoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtID4gY2hwbGFuX2FwLkNoYW5uZWxbal0pIHsKLQkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0gY2hwbGFuX2FwLkNoYW5uZWxbal07Ci0JCQkJCWNocGxhbl9uZXdba10uU2NhblR5cGUgPSBTQ0FOX0FDVElWRTsKKwkJCQl9IGVsc2UgaWYgKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA+CisJCQkJCSAgIGNocGxhbl9hcC5DaGFubmVsW2pdKSB7CisJCQkJCWNocGxhbl9uZXdba10uQ2hhbm5lbE51bSA9CisJCQkJCQljaHBsYW5fYXAuQ2hhbm5lbFtqXTsKKwkJCQkJY2hwbGFuX25ld1trXS5TY2FuVHlwZSA9CisJCQkJCQlTQ0FOX0FDVElWRTsKIAkJCQkJaisrOwogCQkJCQlrKys7CiAJCQkJfQogCQkJfSB3aGlsZSAoMSk7CiAKIAkJCS8qICBjaGFuZ2UgQVAgbm90IHN1cHBvcnQgY2hhbm5lbCB0byBQYXNzaXZlIHNjYW4gKi8KLQkJCXdoaWxlICgoaSA8IE1BWF9DSEFOTkVMX05VTSkgJiYKLQkJCQkoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtICE9IDApICYmCi0JCQkJKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA8PSAxNCkpIHsKLQkJCQljaHBsYW5fbmV3W2tdLkNoYW5uZWxOdW0gPSBjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW07CisJCQl3aGlsZSAoaSA8IE1BWF9DSEFOTkVMX05VTSAmJgorCQkJICAgICAgIGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSAhPSAwICYmCisJCQkgICAgICAgY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtIDw9IDE0KSB7CisJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0KKwkJCQkJY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtOwogCQkJCWNocGxhbl9uZXdba10uU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CiAJCQkJaSsrOwogCQkJCWsrKzsKIAkJCX0KIAogCQkJLyogIGFkZCBjaGFubmVsIEFQIHN1cHBvcnRlZCAqLwotCQkJd2hpbGUgKChqIDwgY2hwbGFuX2FwLkxlbikgJiYgKGNocGxhbl9hcC5DaGFubmVsW2pdIDw9IDE0KSkgeworCQkJd2hpbGUgKGogPCBjaHBsYW5fYXAuTGVuICYmIGNocGxhbl9hcC5DaGFubmVsW2pdIDw9IDE0KXsKIAkJCQljaHBsYW5fbmV3W2tdLkNoYW5uZWxOdW0gPSBjaHBsYW5fYXAuQ2hhbm5lbFtqXTsKIAkJCQljaHBsYW5fbmV3W2tdLlNjYW5UeXBlID0gU0NBTl9BQ1RJVkU7CiAJCQkJaisrOwpAQCAtODI2Niw0OSArNDk1Nyw1MCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogIGtlZXAgb3JpZ2luYWwgU1RBIDIuNEcgY2hhbm5lbCBwbGFuICovCi0JCQl3aGlsZSAoKGkgPCBNQVhfQ0hBTk5FTF9OVU0pICYmCi0JCQkJKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSAhPSAwKSAmJgotCQkJCShjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gPD0gMTQpKSB7Ci0JCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0gY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtOworCQkJd2hpbGUgKGkgPCBNQVhfQ0hBTk5FTF9OVU0gJiYKKwkJCSAgICAgICBjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gIT0gMCAmJgorCQkJICAgICAgIGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA8PSAxNCkgeworCQkJCWNocGxhbl9uZXdba10uQ2hhbm5lbE51bSA9CisJCQkJCWNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bTsKIAkJCQljaHBsYW5fbmV3W2tdLlNjYW5UeXBlID0gY2hwbGFuX3N0YVtpXS5TY2FuVHlwZTsKIAkJCQlpKys7CiAJCQkJaysrOwogCQkJfQogCiAJCQkvKiAgc2tpcCBBUCAyLjRHIGNoYW5uZWwgcGxhbiAqLwotCQkJd2hpbGUgKChqIDwgY2hwbGFuX2FwLkxlbikgJiYgKGNocGxhbl9hcC5DaGFubmVsW2pdIDw9IDE0KSkgeworCQkJd2hpbGUgKGogPCBjaHBsYW5fYXAuTGVuICYmIGNocGxhbl9hcC5DaGFubmVsW2pdIDw9IDE0KQogCQkJCWorKzsKLQkJCX0KIAkJfQogCiAJCWlmIChwcmVnaXN0cnlwcml2LT53aXJlbGVzc19tb2RlICYgV0lSRUxFU1NfMTFBKSB7CiAJCQlkbyB7Ci0JCQkJaWYgKChpID09IE1BWF9DSEFOTkVMX05VTSkgfHwKLQkJCQkgICAgKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA9PSAwKSkKKwkJCQlpZiAoaSA9PSBNQVhfQ0hBTk5FTF9OVU0gfHwKKwkJCQkgICAgY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtID09IDApCiAJCQkJCWJyZWFrOwogCi0JCQkJaWYgKChqID09IGNocGxhbl9hcC5MZW4pIHx8IChjaHBsYW5fYXAuQ2hhbm5lbFtqXSA9PSAwKSkKKwkJCQlpZiAoaiA9PSBjaHBsYW5fYXAuTGVuIHx8CisJCQkJICAgIGNocGxhbl9hcC5DaGFubmVsW2pdID09IDApCiAJCQkJCWJyZWFrOwogCi0JCQkJaWYgKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA9PSBjaHBsYW5fYXAuQ2hhbm5lbFtqXSkKLQkJCQl7Ci0JCQkJCWNocGxhbl9uZXdba10uQ2hhbm5lbE51bSA9IGNocGxhbl9hcC5DaGFubmVsW2pdOworCQkJCWlmIChjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gPT0KKwkJCQkgICAgY2hwbGFuX2FwLkNoYW5uZWxbal0pIHsKKwkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0KKwkJCQkJCWNocGxhbl9hcC5DaGFubmVsW2pdOwogCQkJCQljaHBsYW5fbmV3W2tdLlNjYW5UeXBlID0gU0NBTl9BQ1RJVkU7CiAJCQkJCWkrKzsKIAkJCQkJaisrOwogCQkJCQlrKys7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA8IGNocGxhbl9hcC5DaGFubmVsW2pdKQotCQkJCXsKLQkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0gY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtOwotLyoJCQkJCWNocGxhbl9uZXdba10uU2NhblR5cGUgPSBjaHBsYW5fc3RhW2ldLlNjYW5UeXBlOyAqLworCQkJCX0gZWxzZSBpZiAoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtIDwKKwkJCQkJICAgY2hwbGFuX2FwLkNoYW5uZWxbal0pIHsKKwkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0KKwkJCQkJCWNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bTsKIAkJCQkJY2hwbGFuX25ld1trXS5TY2FuVHlwZSA9IFNDQU5fUEFTU0lWRTsKIAkJCQkJaSsrOwogCQkJCQlrKys7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSA+IGNocGxhbl9hcC5DaGFubmVsW2pdKQotCQkJCXsKLQkJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0gY2hwbGFuX2FwLkNoYW5uZWxbal07CisJCQkJfSBlbHNlIGlmIChjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gPgorCQkJCQkgICBjaHBsYW5fYXAuQ2hhbm5lbFtqXSkgeworCQkJCQljaHBsYW5fbmV3W2tdLkNoYW5uZWxOdW0gPQorCQkJCQkJY2hwbGFuX2FwLkNoYW5uZWxbal07CiAJCQkJCWNocGxhbl9uZXdba10uU2NhblR5cGUgPSBTQ0FOX0FDVElWRTsKIAkJCQkJaisrOwogCQkJCQlrKys7CkBAIC04MzE2LDE1ICs1MDA4LDE3IEBACiAJCQl9IHdoaWxlICgxKTsKIAogCQkJLyogIGNoYW5nZSBBUCBub3Qgc3VwcG9ydCBjaGFubmVsIHRvIFBhc3NpdmUgc2NhbiAqLwotCQkJd2hpbGUgKChpIDwgTUFYX0NIQU5ORUxfTlVNKSAmJiAoY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtICE9IDApKSB7Ci0JCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0gY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtOworCQkJd2hpbGUgKGkgPCBNQVhfQ0hBTk5FTF9OVU0gJiYKKwkJCSAgICAgICBjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gIT0gMCkgeworCQkJCWNocGxhbl9uZXdba10uQ2hhbm5lbE51bSA9CisJCQkJCWNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bTsKIAkJCQljaHBsYW5fbmV3W2tdLlNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOwogCQkJCWkrKzsKIAkJCQlrKys7CiAJCQl9CiAKIAkJCS8qICBhZGQgY2hhbm5lbCBBUCBzdXBwb3J0ZWQgKi8KLQkJCXdoaWxlICgoaiA8IGNocGxhbl9hcC5MZW4pICYmIChjaHBsYW5fYXAuQ2hhbm5lbFtqXSAhPSAwKSkgeworCQkJd2hpbGUgKGogPCBjaHBsYW5fYXAuTGVuICYmIGNocGxhbl9hcC5DaGFubmVsW2pdICE9IDApIHsKIAkJCQljaHBsYW5fbmV3W2tdLkNoYW5uZWxOdW0gPSBjaHBsYW5fYXAuQ2hhbm5lbFtqXTsKIAkJCQljaHBsYW5fbmV3W2tdLlNjYW5UeXBlID0gU0NBTl9BQ1RJVkU7CiAJCQkJaisrOwpAQCAtODMzMiw4ICs1MDI2LDEwIEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiAga2VlcCBvcmlnaW5hbCBTVEEgNUcgY2hhbm5lbCBwbGFuICovCi0JCQl3aGlsZSAoKGkgPCBNQVhfQ0hBTk5FTF9OVU0pICYmIChjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW0gIT0gMCkpIHsKLQkJCQljaHBsYW5fbmV3W2tdLkNoYW5uZWxOdW0gPSBjaHBsYW5fc3RhW2ldLkNoYW5uZWxOdW07CisJCQl3aGlsZSAoaSA8IE1BWF9DSEFOTkVMX05VTSAmJgorCQkJICAgICAgIGNocGxhbl9zdGFbaV0uQ2hhbm5lbE51bSAhPSAwKSB7CisJCQkJY2hwbGFuX25ld1trXS5DaGFubmVsTnVtID0KKwkJCQkJY2hwbGFuX3N0YVtpXS5DaGFubmVsTnVtOwogCQkJCWNocGxhbl9uZXdba10uU2NhblR5cGUgPSBjaHBsYW5fc3RhW2ldLlNjYW5UeXBlOwogCQkJCWkrKzsKIAkJCQlrKys7CkBAIC04MzQzLDIxICs1MDM5LDIyIEBACiAJfQogCiAJLyogIElmIGNoYW5uZWwgaXMgdXNlZCBieSBBUCwgc2V0IGNoYW5uZWwgc2NhbiB0eXBlIHRvIGFjdGl2ZSAqLwotCWNoYW5uZWwgPSBic3NpZC0+Q29uZmlndXJhdGlvbi5EU0NvbmZpZzsKKwljaGFubmVsID0gYnNzaWQtPkRTQ29uZmlnOwogCWNocGxhbl9uZXcgPSBwbWxtZWV4dC0+Y2hhbm5lbF9zZXQ7CiAJaSA9IDA7Ci0Jd2hpbGUgKChpIDwgTUFYX0NIQU5ORUxfTlVNKSAmJiAoY2hwbGFuX25ld1tpXS5DaGFubmVsTnVtICE9IDApKSB7Ci0JCWlmIChjaHBsYW5fbmV3W2ldLkNoYW5uZWxOdW0gPT0gY2hhbm5lbCkKLQkJeworCXdoaWxlIChpIDwgTUFYX0NIQU5ORUxfTlVNICYmIGNocGxhbl9uZXdbaV0uQ2hhbm5lbE51bSAhPSAwKSB7CisJCWlmIChjaHBsYW5fbmV3W2ldLkNoYW5uZWxOdW0gPT0gY2hhbm5lbCkgewogCQkJaWYgKGNocGxhbl9uZXdbaV0uU2NhblR5cGUgPT0gU0NBTl9QQVNTSVZFKSB7Ci0JCQkJLyogNUcgQm5hZCAyLCAzIChERlMpIGRvZXNuJ3QgY2hhbmdlIHRvIGFjdGl2ZSBzY2FuICovCisJCQkJLyogNUcgQm5hZCAyLCAzIChERlMpIGRvZXNuJ3QgY2hhbmdlCisJCQkJICAgdG8gYWN0aXZlIHNjYW4gKi8KIAkJCQlpZiAoY2hhbm5lbCA+PSA1MiAmJiBjaGFubmVsIDw9IDE0NCkKIAkJCQkJYnJlYWs7CiAKIAkJCQljaHBsYW5fbmV3W2ldLlNjYW5UeXBlID0gU0NBTl9BQ1RJVkU7CiAJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfbm90aWNlXywKLQkJCQkJCSAoIiVzOiBjaGFuZ2UgY2hhbm5lbCAlZCBzY2FuIHR5cGUgZnJvbSBwYXNzaXZlIHRvIGFjdGl2ZVxuIiwKLQkJCQkJCSAgX19mdW5jX18sIGNoYW5uZWwpKTsKKwkJCQkJICgiJXM6IGNoYW5nZSBjaGFubmVsICVkIHNjYW4gdHlwZSAiCisJCQkJCSAgImZyb20gcGFzc2l2ZSB0byBhY3RpdmVcbiIsCisJCQkJCSAgX19mdW5jX18sIGNoYW5uZWwpKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC04Mzk5LDggKzUwOTYsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JSU5JVF9MSVNUX0hFQUQoJnBjbWRfb2JqLT5saXN0KTsKLQogCXBjbWRfb2JqLT5jbWRjb2RlID0gR0VOX0NNRF9DT0RFKF9TZXRfTUxNRV9FVlQpOwogCXBjbWRfb2JqLT5jbWRzeiA9IGNtZHN6OwogCXBjbWRfb2JqLT5wYXJtYnVmID0gcGV2dGNtZDsKQEAgLTg0NTIsOCArNTE0Nyw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlJTklUX0xJU1RfSEVBRCgmcGNtZF9vYmotPmxpc3QpOwotCiAJcGNtZF9vYmotPmNtZGNvZGUgPSBHRU5fQ01EX0NPREUoX1NldF9NTE1FX0VWVCk7CiAJcGNtZF9vYmotPmNtZHN6ID0gY21kc3o7CiAJcGNtZF9vYmotPnBhcm1idWYgPSBwZXZ0Y21kOwpAQCAtODQ5OSw4ICs1MTkyLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCUlOSVRfTElTVF9IRUFEKCZwY21kX29iai0+bGlzdCk7Ci0KIAlwY21kX29iai0+Y21kY29kZSA9IEdFTl9DTURfQ09ERShfU2V0X01MTUVfRVZUKTsKIAlwY21kX29iai0+Y21kc3ogPSBjbWRzejsKIAlwY21kX29iai0+cGFybWJ1ZiA9IHBldnRjbWQ7CkBAIC04NTUxLDggKzUyNDIsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JSU5JVF9MSVNUX0hFQUQoJnBjbWRfb2JqLT5saXN0KTsKLQogCXBjbWRfb2JqLT5jbWRjb2RlID0gR0VOX0NNRF9DT0RFKF9TZXRfTUxNRV9FVlQpOwogCXBjbWRfb2JqLT5jbWRzeiA9IGNtZHN6OwogCXBjbWRfb2JqLT5wYXJtYnVmID0gcGV2dGNtZDsKQEAgLTg2MDcsOCArNTI5Niw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlJTklUX0xJU1RfSEVBRCgmcGNtZF9vYmotPmxpc3QpOwotCiAJcGNtZF9vYmotPmNtZGNvZGUgPSBHRU5fQ01EX0NPREUoX1NldF9NTE1FX0VWVCk7CiAJcGNtZF9vYmotPmNtZHN6ID0gY21kc3o7CiAJcGNtZF9vYmotPnBhcm1idWYgPSBwZXZ0Y21kOwpAQCAtODY3OCw3ICs1MzY1LDcgQEAKIAlwc3RhLT5odHByaXYuY2FuZGlkYXRlX3RpZF9iaXRtYXAgPSAweDA7LyogcmVzZXQgKi8KIAogCS8qIFFvUyAqLwotCWlmIChwbWxtZXByaXYtPnFvc3ByaXYucW9zX29wdGlvbikKKwlpZiAocG1sbWVwcml2LT5xb3Nfb3B0aW9uKQogCQlwc3RhLT5xb3Nfb3B0aW9uID0gdHJ1ZTsKIAogCXBzdGEtPnN0YXRlID0gX0ZXX0xJTktFRDsKQEAgLTg2OTEsMTcgKzUzNzgsMTQgQEAKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqY3VyX25ldHdvcmsgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOwogCXN0cnVjdCBzdGFfcHJpdgkJKnBzdGFwcml2ID0gJnBhZGFwdGVyLT5zdGFwcml2OwotCXU4CWpvaW5fdHlwZTsKLQl1MTYgbWVkaWFfc3RhdHVzOwogCi0JaWYgKGpvaW5fcmVzIDwgMCkKLQl7Ci0JCWpvaW5fdHlwZSA9IDE7Ci0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9KT0lOLCAodTggKikoJmpvaW5fdHlwZSkpOwotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JTU0lELCBudWxsX2FkZHIpOworCWlmIChqb2luX3JlcyA8IDApIHsKKwkJaHdfdmFyX3NldF9tbG1lX2pvaW4ocGFkYXB0ZXIsIDEpOworCQlod192YXJfc2V0X2Jzc2lkKHBhZGFwdGVyLCBudWxsX2FkZHIpOwogCiAJCS8qIHJlc3RvcmUgdG8gaW5pdGlhbCBzZXR0aW5nLiAqLwotCQl1cGRhdGVfdHhfYmFzaWNfcmF0ZTIzYShwYWRhcHRlciwgcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi53aXJlbGVzc19tb2RlKTsKKwkJdXBkYXRlX3R4X2Jhc2ljX3JhdGUyM2EocGFkYXB0ZXIsCisJCQkJCXBhZGFwdGVyLT5yZWdpc3RyeXByaXYud2lyZWxlc3NfbW9kZSk7CiAKIAkJZ290byBleGl0X21sbWVleHRfam9pbmJzc19ldmVudF9jYWxsYmFjazIzYTsKIAl9CkBAIC04NzE5LDE1ICs1NDAzLDE1IEBACiAJfQogCiAJLyogdHVybiBvbiBkeW5hbWljIGZ1bmN0aW9ucyAqLwotCVN3aXRjaF9ETV9GdW5jMjNhKHBhZGFwdGVyLCBEWU5BTUlDX0FMTF9GVU5DX0VOQUJMRSwgdHJ1ZSk7CisJcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9zZXQocGFkYXB0ZXIsIERZTkFNSUNfQUxMX0ZVTkNfRU5BQkxFKTsKIAogCS8qICB1cGRhdGUgSU9ULXJlbGVhdGVkIGlzc3VlICovCiAJdXBkYXRlX0lPVF9pbmZvMjNhKHBhZGFwdGVyKTsKIAotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQkFTSUNfUkFURSwgY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzKTsKKwlIYWxTZXRCcmF0ZUNmZzIzYShwYWRhcHRlciwgY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzKTsKIAogCS8qIEJDTiBpbnRlcnZhbCAqLwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQkVBQ09OX0lOVEVSVkFMLCAodTggKikoJnBtbG1laW5mby0+YmNuX2ludGVydmFsKSk7CisJcnRsODcyM2Ffc2V0X2JlYWNvbl9pbnRlcnZhbChwYWRhcHRlciwgcG1sbWVpbmZvLT5iY25faW50ZXJ2YWwpOwogCiAJLyogdWRwYXRlIGNhcGFiaWxpdHkgKi8KIAl1cGRhdGVfY2FwaW5mbzIzYShwYWRhcHRlciwgcG1sbWVpbmZvLT5jYXBhYmlsaXR5KTsKQEAgLTg3NTIsMTggKzU0MzYsMTMgQEAKIAogCQkvKiBzZXQgcGVyIHN0YSByYXRlIGFmdGVyIHVwZGF0aW5nIEhUIGNhcC4gKi8KIAkJc2V0X3N0YV9yYXRlMjNhKHBhZGFwdGVyLCBwc3RhKTsKLQotCQltZWRpYV9zdGF0dXMgPSAocHN0YS0+bWFjX2lkPDw4KXwxOyAvKiAgIE1BQ0lEfE9QTU9ERTogMSBtZWFucyBjb25uZWN0ICovCi0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfSDJDX01FRElBX1NUQVRVU19SUFQsICh1OCAqKSZtZWRpYV9zdGF0dXMpOwogCX0KIAotCWpvaW5fdHlwZSA9IDI7Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9NTE1FX0pPSU4sICh1OCAqKSgmam9pbl90eXBlKSk7CisJaHdfdmFyX3NldF9tbG1lX2pvaW4ocGFkYXB0ZXIsIDIpOwogCi0JaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfU1RBVElPTl9TVEFURSkKLQl7CisJaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfU1RBVElPTl9TVEFURSkgewogCQkvKiAgY29ycmVjdGluZyBUU0YgKi8KLQkJY29ycmVjdF9UU0YyM2EocGFkYXB0ZXIsIHBtbG1lZXh0KTsKKwkJcnR3X2NvcnJlY3RfVFNGKHBhZGFwdGVyKTsKIAogCQkvKiBzZXRfbGlua190aW1lcihwbWxtZWV4dCwgRElTQ09OTkVDVF9UTyk7ICovCiAJfQpAQCAtODc3OCwyNyArNTQ1NywyMCBAQAogewogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0JdTgJam9pbl90eXBlOwogCiAJREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOwogCi0JaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfQURIT0NfU1RBVEUpCi0JewotCQlpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVNTT0NfU1VDQ0VTUykvKiBhZGhvYyBtYXN0ZXIgb3Igc3RhX2NvdW50PjEgKi8KKwlpZiAoKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSA9PSBXSUZJX0ZXX0FESE9DX1NUQVRFKSB7CisJLyogYWRob2MgbWFzdGVyIG9yIHN0YV9jb3VudD4xICovCisJCWlmIChwbWxtZWluZm8tPnN0YXRlICYgV0lGSV9GV19BU1NPQ19TVUNDRVNTKQogCQl7CiAJCQkvKiBub3RoaW5nIHRvIGRvICovCi0JCX0KLQkJZWxzZS8qIGFkaG9jIGNsaWVudCAqLwotCQl7Ci0JCQkvKiB1cGRhdGUgVFNGIFZhbHVlICovCi0JCQkvKiB1cGRhdGVfVFNGMjNhKHBtbG1lZXh0LCBwZnJhbWUsIGxlbik7ICovCi0KKwkJfSBlbHNlIHsgLyogYWRob2MgY2xpZW50ICovCiAJCQkvKiAgY29ycmVjdGluZyBUU0YgKi8KLQkJCWNvcnJlY3RfVFNGMjNhKHBhZGFwdGVyLCBwbWxtZWV4dCk7CisJCQlydHdfY29ycmVjdF9UU0YocGFkYXB0ZXIpOwogCiAJCQkvKiBzdGFydCBiZWFjb24gKi8KLQkJCWlmIChzZW5kX2JlYWNvbjIzYShwYWRhcHRlcikgPT0gX0ZBSUwpCi0JCQl7CisJCQlpZiAoc2VuZF9iZWFjb24yM2EocGFkYXB0ZXIpICE9IF9TVUNDRVNTKSB7CiAJCQkJcG1sbWVpbmZvLT5GV19zdGFfaW5mb1twc3RhLT5tYWNfaWRdLnN0YXR1cyA9IDA7CiAKIAkJCQlwbWxtZWluZm8tPnN0YXRlIF49IFdJRklfRldfQURIT0NfU1RBVEU7CkBAIC04ODA3LDExICs1NDc5LDggQEAKIAkJCX0KIAogCQkJcG1sbWVpbmZvLT5zdGF0ZSB8PSBXSUZJX0ZXX0FTU09DX1NVQ0NFU1M7Ci0KIAkJfQotCi0JCWpvaW5fdHlwZSA9IDI7Ci0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9KT0lOLCAodTggKikoJmpvaW5fdHlwZSkpOworCQlod192YXJfc2V0X21sbWVfam9pbihwYWRhcHRlciwgMik7CiAJfQogCiAJcG1sbWVpbmZvLT5GV19zdGFfaW5mb1twc3RhLT5tYWNfaWRdLnBzdGEgPSBwc3RhOwpAQCAtODgyNSwyNSArNTQ5NCwyNyBAQAogCiB2b2lkIG1sbWVleHRfc3RhX2RlbF9ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAotCWlmIChpc19jbGllbnRfYXNzb2NpYXRlZF90b19hcDIzYShwYWRhcHRlcikgfHwgaXNfSUJTU19lbXB0eTIzYShwYWRhcHRlcikpCi0JeworCWlmIChpc19jbGllbnRfYXNzb2NpYXRlZF90b19hcDIzYShwYWRhcHRlcikgfHwKKwkgICAgaXNfSUJTU19lbXB0eTIzYShwYWRhcHRlcikpIHsKIAkJLyogc2V0X29wbW9kZV9jbWQocGFkYXB0ZXIsIGluZnJhX2NsaWVudF93aXRoX21sbWUpOyAqLwogCi0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9ESVNDT05ORUNULCBOVUxMKTsKLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9CU1NJRCwgbnVsbF9hZGRyKTsKKwkJaHdfdmFyX3NldF9tbG1lX2Rpc2Nvbm5lY3QocGFkYXB0ZXIpOworCQlod192YXJfc2V0X2Jzc2lkKHBhZGFwdGVyLCBudWxsX2FkZHIpOwogCiAJCS8qIHJlc3RvcmUgdG8gaW5pdGlhbCBzZXR0aW5nLiAqLwotCQl1cGRhdGVfdHhfYmFzaWNfcmF0ZTIzYShwYWRhcHRlciwgcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi53aXJlbGVzc19tb2RlKTsKKwkJdXBkYXRlX3R4X2Jhc2ljX3JhdGUyM2EocGFkYXB0ZXIsCisJCQkJCXBhZGFwdGVyLT5yZWdpc3RyeXByaXYud2lyZWxlc3NfbW9kZSk7CiAKIAkJLyogc3dpdGNoIHRvIHRoZSAyME0gSHogbW9kZSBhZnRlciBkaXNjb25uZWN0ICovCiAJCXBtbG1lZXh0LT5jdXJfYndtb2RlID0gSFRfQ0hBTk5FTF9XSURUSF8yMDsKIAkJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOwogCi0JCS8qIFNlbGVjdENoYW5uZWwyM2EocGFkYXB0ZXIsIHBtbG1lZXh0LT5jdXJfY2hhbm5lbCwgcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQpOyAqLwotCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHBtbG1lZXh0LT5jdXJfY2hhbm5lbCwgcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQsIHBtbG1lZXh0LT5jdXJfYndtb2RlKTsKKwkJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsCisJCQkJICAgICAgcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQsCisJCQkJICAgICAgcG1sbWVleHQtPmN1cl9id21vZGUpOwogCiAJCWZsdXNoX2FsbF9jYW1fZW50cnkyM2EocGFkYXB0ZXIpOwogCkBAIC04ODU2LDMzICs1NTI3LDExIEBACiAJfQogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1Gb2xsb3dpbmcgYXJlIHRoZSBmdW5jdGlvbnMgZm9yIHRoZSB0aW1lciBoYW5kbGVycwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgbGlua2VkMjNhX3J4X3NpZ19zdHJlbl9kaXNwKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgICAgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKLQl1OCBtYWNfaWQ7Ci0JaW50IFVuZGVjb3JhdGVkU21vb3RoZWRQV0RCOwotCWlmICgocG1sbWVpbmZvLT5zdGF0ZSYweDAzKSA9PSBXSUZJX0ZXX1NUQVRJT05fU1RBVEUpCi0JCW1hY19pZCA9IDA7Ci0JZWxzZSBpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gX0hXX1NUQVRFX0FQXykKLQkJbWFjX2lkID0gMjsKLQotCXJ0d19oYWxfZ2V0X2RlZl92YXIyM2EocGFkYXB0ZXIsIEhXX0RFRl9SQV9JTkZPX0RVTVAsJm1hY19pZCk7Ci0KLQlydHdfaGFsX2dldF9kZWZfdmFyMjNhKHBhZGFwdGVyLCBIQUxfREVGX1VOREVSQ09SQVRFRFNNT09USEVEUFdEQiwgJlVuZGVjb3JhdGVkU21vb3RoZWRQV0RCKTsKLQlEQkdfODcyM0EoIlVuZGVjb3JhdGVkU21vb3RoZWRQV0RCOiVkXG4iLCBVbmRlY29yYXRlZFNtb290aGVkUFdEQik7Ci19Ci0KIHN0YXRpYyB1OCBjaGtfYXBfaXNfYWxpdmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhKQogewogCXU4IHJldCA9IGZhbHNlOwogCi0JaWYgKChzdGFfcnhfZGF0YV9wa3RzKHBzdGEpID09IHN0YV9sYXN0X3J4X2RhdGFfcGt0cyhwc3RhKSkgJiYKKwlpZiAoc3RhX3J4X2RhdGFfcGt0cyhwc3RhKSA9PSBzdGFfbGFzdF9yeF9kYXRhX3BrdHMocHN0YSkgJiYKIAkgICAgc3RhX3J4X2JlYWNvbl9wa3RzKHBzdGEpID09IHN0YV9sYXN0X3J4X2JlYWNvbl9wa3RzKHBzdGEpICYmCiAJICAgIHN0YV9yeF9wcm9iZXJzcF9wa3RzKHBzdGEpID09IHN0YV9sYXN0X3J4X3Byb2JlcnNwX3BrdHMocHN0YSkpCiAJCXJldCA9IGZhbHNlOwpAQCAtODg5NSwyMCArNTU0NCwxNiBAQAogCiB2b2lkIGxpbmtlZF9zdGF0dXNfY2hrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JdTMyCWk7Ci0Jc3RydWN0IHN0YV9pbmZvCQkqcHN0YTsKKwl1MzIgaTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0Jc3RydWN0IHN0YV9wcml2CQkqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CisJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKIAotCWlmIChwYWRhcHRlci0+YlJ4UlNTSURpc3BsYXkpCi0JCSBsaW5rZWQyM2Ffcnhfc2lnX3N0cmVuX2Rpc3AocGFkYXB0ZXIpOworCXJ0bDg3MjNhX3NyZXNldF9saW5rZWRfc3RhdHVzX2NoZWNrKHBhZGFwdGVyKTsKIAotCXJ0d19oYWxfc3Jlc2V0X2xpbmtlZF9zdGF0dXNfY2hlY2syM2EocGFkYXB0ZXIpOwotCi0JaWYgKGlzX2NsaWVudF9hc3NvY2lhdGVkX3RvX2FwMjNhKHBhZGFwdGVyKSkKLQl7CisJaWYgKGlzX2NsaWVudF9hc3NvY2lhdGVkX3RvX2FwMjNhKHBhZGFwdGVyKSkgewogCQkvKiBsaW5rZWQgaW5mcmFzdHJ1Y3R1cmUgY2xpZW50IG1vZGUgKi8KIAogCQlpbnQgdHhfY2hrID0gX1NVQ0NFU1MsIHJ4X2NoayA9IF9TVUNDRVNTOwpAQCAtODkxNiwxMiArNTU2MSwxMCBAQAogCiAJCXJ4X2Noa19saW1pdCA9IDQ7CiAKLQkJaWYgKChwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKHBzdGFwcml2LCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcykpICE9IE5VTEwpCi0JCXsKKwkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwKKwkJCQkJICBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJCWlmIChwc3RhKSB7CiAJCQlib29sIGlzX3AycF9lbmFibGUgPSBmYWxzZTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQkJaXNfcDJwX2VuYWJsZSA9ICFydHdfcDJwX2Noa19zdGF0ZSgmcGFkYXB0ZXItPndkaW5mbywgUDJQX1NUQVRFX05PTkUpOwotI2VuZGlmCiAKIAkJCWlmIChjaGtfYXBfaXNfYWxpdmUocGFkYXB0ZXIsIHBzdGEpID09IGZhbHNlKQogCQkJCXJ4X2NoayA9IF9GQUlMOwpAQCAtODkyOSwxMDIgKzU1NzIsMTA4IEBACiAJCQlpZiAocHhtaXRwcml2LT5sYXN0X3R4X3BrdHMgPT0gcHhtaXRwcml2LT50eF9wa3RzKQogCQkJCXR4X2NoayA9IF9GQUlMOwogCi0JCQlpZiAocG1sbWVleHQtPmFjdGl2ZV9rZWVwX2FsaXZlX2NoZWNrICYmIChyeF9jaGsgPT0gX0ZBSUwgfHwgdHhfY2hrID09IF9GQUlMKSkgeworCQkJaWYgKHBtbG1lZXh0LT5hY3RpdmVfa2VlcF9hbGl2ZV9jaGVjayAmJgorCQkJICAgIChyeF9jaGsgPT0gX0ZBSUwgfHwgdHhfY2hrID09IF9GQUlMKSkgewogCQkJCXU4IGJhY2t1cF9vcGVyX2NoYW5uZWwgPSAwOwogCi0JCQkJLyogc3dpdGNoIHRvIGNvcnJlY3QgY2hhbm5lbCBvZiBjdXJyZW50IG5ldHdvcmsgIGJlZm9yZSBpc3N1ZSBrZWVwLWFsaXZlIGZyYW1lcyAqLwotCQkJCWlmIChydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpICE9IHBtbG1lZXh0LT5jdXJfY2hhbm5lbCkgewotCQkJCQliYWNrdXBfb3Blcl9jaGFubmVsID0gcnR3X2dldF9vcGVyX2NoMjNhKHBhZGFwdGVyKTsKLQkJCQkJU2VsZWN0Q2hhbm5lbDIzYShwYWRhcHRlciwgcG1sbWVleHQtPmN1cl9jaGFubmVsKTsKKwkJCQkvKiBzd2l0Y2ggdG8gY29ycmVjdCBjaGFubmVsIG9mIGN1cnJlbnQKKwkJCQkgICBuZXR3b3JrICBiZWZvcmUgaXNzdWUga2VlcC1hbGl2ZSBmcmFtZXMgKi8KKwkJCQlpZiAocnR3X2dldF9vcGVyX2NoMjNhKHBhZGFwdGVyKSAhPQorCQkJCSAgICBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpIHsKKwkJCQkJYmFja3VwX29wZXJfY2hhbm5lbCA9CisJCQkJCQlydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpOworCQkJCQlTZWxlY3RDaGFubmVsMjNhKHBhZGFwdGVyLAorCQkJCQkJCSBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpOwogCQkJCX0KIAogCQkJCWlmIChyeF9jaGsgIT0gX1NVQ0NFU1MpCi0JCQkJCWlzc3VlX3Byb2JlcmVxMjNhX2V4MjNhKHBhZGFwdGVyLCAmcG1sbWVpbmZvLT5uZXR3b3JrLlNzaWQsIHBzdGEtPmh3YWRkciwgMywgMSk7CisJCQkJCWlzc3VlX3Byb2JlcmVxX2V4KHBhZGFwdGVyLCAmcG1sbWVpbmZvLT5uZXR3b3JrLlNzaWQsIHBzdGEtPmh3YWRkciwgMywgMSk7CiAKLQkJCQlpZiAoKHR4X2NoayAhPSBfU1VDQ0VTUyAmJiBwbWxtZWluZm8tPmxpbmtfY291bnQrKyA9PSAweGYpIHx8IHJ4X2NoayAhPSBfU1VDQ0VTUykgewotCQkJCQl0eF9jaGsgPSBpc3N1ZV9udWxsZGF0YTIzYShwYWRhcHRlciwgcHN0YS0+aHdhZGRyLCAwLCAzLCAxKTsKLQkJCQkJLyogaWYgdHggYWNrZWQgYW5kIHAycCBkaXNhYmxlZCwgc2V0IHJ4X2NoayBfU1VDQ0VTUyB0byByZXNldCByZXRyeSBjb3VudCAqLwotCQkJCQlpZiAodHhfY2hrID09IF9TVUNDRVNTICYmICFpc19wMnBfZW5hYmxlKQorCQkJCWlmICgodHhfY2hrICE9IF9TVUNDRVNTICYmCisJCQkJICAgICBwbWxtZWluZm8tPmxpbmtfY291bnQrKyA9PSAweGYpIHx8CisJCQkJICAgIHJ4X2NoayAhPSBfU1VDQ0VTUykgeworCQkJCQl0eF9jaGsgPSBpc3N1ZV9udWxsZGF0YTIzYShwYWRhcHRlciwKKwkJCQkJCQkJICAgcHN0YS0+aHdhZGRyLAorCQkJCQkJCQkgICAwLCAzLCAxKTsKKwkJCQkJLyogaWYgdHggYWNrZWQgYW5kIHAycCBkaXNhYmxlZCwKKwkJCQkJICAgc2V0IHJ4X2NoayBfU1VDQ0VTUyB0byByZXNldCByZXRyeQorCQkJCQkgICBjb3VudCAqLworCQkJCQlpZiAodHhfY2hrID09IF9TVUNDRVNTICYmCisJCQkJCSAgICAhaXNfcDJwX2VuYWJsZSkKIAkJCQkJCXJ4X2NoayA9IF9TVUNDRVNTOwogCQkJCX0KIAogCQkJCS8qIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiBjaGFubmVsICovCiAJCQkJaWYgKGJhY2t1cF9vcGVyX2NoYW5uZWw+MCkKLQkJCQkJU2VsZWN0Q2hhbm5lbDIzYShwYWRhcHRlciwgYmFja3VwX29wZXJfY2hhbm5lbCk7Ci0KKwkJCQkJU2VsZWN0Q2hhbm5lbDIzYShwYWRhcHRlciwKKwkJCQkJCQkgYmFja3VwX29wZXJfY2hhbm5lbCk7CiAJCQl9IGVsc2UgewogCQkJCWlmIChyeF9jaGsgIT0gX1NVQ0NFU1MpIHsKIAkJCQkJaWYgKHBtbG1lZXh0LT5yZXRyeSA9PSAwKSB7Ci0JCQkJCQlpc3N1ZV9wcm9iZXJlcTIzYShwYWRhcHRlciwgJnBtbG1laW5mby0+bmV0d29yay5Tc2lkLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0JCQkJCQlpc3N1ZV9wcm9iZXJlcTIzYShwYWRhcHRlciwgJnBtbG1laW5mby0+bmV0d29yay5Tc2lkLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0JCQkJCQlpc3N1ZV9wcm9iZXJlcTIzYShwYWRhcHRlciwgJnBtbG1laW5mby0+bmV0d29yay5Tc2lkLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJCQkJCQlpc3N1ZV9wcm9iZXJlcShwYWRhcHRlciwgJnBtbG1laW5mby0+bmV0d29yay5Tc2lkLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJCQkJCQlpc3N1ZV9wcm9iZXJlcShwYWRhcHRlciwgJnBtbG1laW5mby0+bmV0d29yay5Tc2lkLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJCQkJCQlpc3N1ZV9wcm9iZXJlcShwYWRhcHRlciwgJnBtbG1laW5mby0+bmV0d29yay5Tc2lkLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CiAJCQkJCX0KIAkJCQl9CiAKLQkJCQlpZiAodHhfY2hrICE9IF9TVUNDRVNTICYmIHBtbG1laW5mby0+bGlua19jb3VudCsrID09IDB4ZikKLQkJCQkJdHhfY2hrID0gaXNzdWVfbnVsbGRhdGEyM2EocGFkYXB0ZXIsIE5VTEwsIDAsIDEsIDApOworCQkJCWlmICh0eF9jaGsgIT0gX1NVQ0NFU1MgJiYKKwkJCQkgICAgcG1sbWVpbmZvLT5saW5rX2NvdW50KysgPT0gMHhmKQorCQkJCQl0eF9jaGsgPSBpc3N1ZV9udWxsZGF0YTIzYShwYWRhcHRlciwKKwkJCQkJCQkJICAgTlVMTCwgMCwgMSwKKwkJCQkJCQkJICAgMCk7CiAJCQl9CiAKIAkJCWlmIChyeF9jaGsgPT0gX0ZBSUwpIHsKIAkJCQlwbWxtZWV4dC0+cmV0cnkrKzsKIAkJCQlpZiAocG1sbWVleHQtPnJldHJ5ID4gcnhfY2hrX2xpbWl0KSB7Ci0JCQkJCURCR184NzIzQV9MRVZFTChfZHJ2X2Fsd2F5c18sIEZVTkNfQURQVF9GTVQiIGRpc2Nvbm5lY3Qgb3Igcm9hbWluZ1xuIiwKLQkJCQkJCUZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKKwkJCQkJREJHXzg3MjNBX0xFVkVMKF9kcnZfYWx3YXlzXywKKwkJCQkJCQkiJXMoJXMpOiBkaXNjb25uZWN0IG9yICIKKwkJCQkJCQkicm9hbWluZ1xuIiwgX19mdW5jX18sCisJCQkJCQkJcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOwogCQkJCQlyZWNlaXZlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIsIHBtbG1laW5mby0+bmV0d29yay5NYWNBZGRyZXNzLAogCQkJCQkJV0xBTl9SRUFTT05fRVhQSVJBVElPTl9DSEspOwogCQkJCQlyZXR1cm47CiAJCQkJfQotCQkJfSBlbHNlIHsKKwkJCX0gZWxzZQogCQkJCXBtbG1lZXh0LT5yZXRyeSA9IDA7Ci0JCQl9CiAKLQkJCWlmICh0eF9jaGsgPT0gX0ZBSUwpIHsKKwkJCWlmICh0eF9jaGsgPT0gX0ZBSUwpCiAJCQkJcG1sbWVpbmZvLT5saW5rX2NvdW50ICY9IDB4ZjsKLQkJCX0gZWxzZSB7CisJCQllbHNlIHsKIAkJCQlweG1pdHByaXYtPmxhc3RfdHhfcGt0cyA9IHB4bWl0cHJpdi0+dHhfcGt0czsKIAkJCQlwbWxtZWluZm8tPmxpbmtfY291bnQgPSAwOwogCQkJfQogCi0JCX0gLyogZW5kIG9mIGlmICgocHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgcGFzc29jX3Jlcy0+bmV0d29yay5NYWNBZGRyZXNzKSkgIT0gTlVMTCkgKi8KLQl9Ci0JZWxzZSBpZiAoaXNfY2xpZW50X2Fzc29jaWF0ZWRfdG9faWJzczIzYShwYWRhcHRlcikpCi0JeworCQl9CisJfSBlbHNlIGlmIChpc19jbGllbnRfYXNzb2NpYXRlZF90b19pYnNzMjNhKHBhZGFwdGVyKSkgewogCQkvKiBsaW5rZWQgSUJTUyBtb2RlICovCiAJCS8qIGZvciBlYWNoIGFzc29jIGxpc3QgZW50cnkgdG8gY2hlY2sgdGhlIHJ4IHBrdCBjb3VudGVyICovCi0JCWZvciAoaSA9IElCU1NfU1RBUlRfTUFDX0lEOyBpIDwgTlVNX1NUQTsgaSsrKQotCQl7Ci0JCQlpZiAocG1sbWVpbmZvLT5GV19zdGFfaW5mb1tpXS5zdGF0dXMgPT0gMSkKLQkJCXsKKwkJZm9yIChpID0gSUJTU19TVEFSVF9NQUNfSUQ7IGkgPCBOVU1fU1RBOyBpKyspIHsKKwkJCWlmIChwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2ldLnN0YXR1cyA9PSAxKSB7CiAJCQkJcHN0YSA9IHBtbG1laW5mby0+Rldfc3RhX2luZm9baV0ucHN0YTsKIAotCQkJCWlmIChOVUxMID09IHBzdGEpIGNvbnRpbnVlOworCQkJCWlmICghcHN0YSkKKwkJCQkJY29udGludWU7CiAKLQkJCQlpZiAocG1sbWVpbmZvLT5GV19zdGFfaW5mb1tpXS5yeF9wa3QgPT0gc3RhX3J4X3BrdHMocHN0YSkpCi0JCQkJeworCQkJCWlmIChwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2ldLnJ4X3BrdCA9PQorCQkJCSAgICBzdGFfcnhfcGt0cyhwc3RhKSkgewogCi0JCQkJCWlmIChwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2ldLnJldHJ5PDMpCi0JCQkJCXsKKwkJCQkJaWYgKHBtbG1laW5mby0+Rldfc3RhX2luZm9baV0ucmV0cnk8MykgewogCQkJCQkJcG1sbWVpbmZvLT5GV19zdGFfaW5mb1tpXS5yZXRyeSsrOwotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJeworCQkJCQl9IGVsc2UgewogCQkJCQkJcG1sbWVpbmZvLT5GV19zdGFfaW5mb1tpXS5yZXRyeSA9IDA7CiAJCQkJCQlwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2ldLnN0YXR1cyA9IDA7CiAJCQkJCQlyZXBvcnRfZGVsX3N0YV9ldmVudDIzYShwYWRhcHRlciwgcHN0YS0+aHdhZGRyLAogCQkJCQkJCTY1NTM1LyogIGluZGljYXRlIGRpc2Nvbm5lY3QgY2F1c2VkIGJ5IG5vIHJ4ICovCiAJCQkJCQkpOwogCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7CisJCQkJfSBlbHNlIHsKIAkJCQkJcG1sbWVpbmZvLT5GV19zdGFfaW5mb1tpXS5yZXRyeSA9IDA7CiAJCQkJCXBtbG1laW5mby0+Rldfc3RhX2luZm9baV0ucnhfcGt0ID0gKHUzMilzdGFfcnhfcGt0cyhwc3RhKTsKIAkJCQl9CiAJCQl9CiAJCX0KLQogCQkvKiBzZXRfbGlua190aW1lcihwbWxtZWV4dCwgRElTQ09OTkVDVF9UTyk7ICovCi0KIAl9CiB9CiAKQEAgLTkwMzUsMzIgKzU2ODQsMTcgQEAKIAlzdHJ1Y3Qgc2l0ZXN1cnZleV9wYXJtICpwc3VydmV5UGFyYTsKIAlzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2ID0gJnBhZGFwdGVyLT5jbWRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jZW5kaWYKIAogCS8qIGlzc3VlIHJ0d19zaXRlc3VydmV5X2NtZDIzYSAqLwogCWlmIChwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3RhdGUgPiBTQ0FOX1NUQVJUKSB7CiAJCWlmIChwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3RhdGUgPT0gIFNDQU5fUFJPQ0VTUykKIAkJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5jaGFubmVsX2lkeCsrOwogCi0JCWlmIChwbWxtZWV4dC0+c2Nhbl9hYm9ydCA9PSB0cnVlKQotCQl7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJCWlmICghcnR3X3AycF9jaGtfc3RhdGUoJnBhZGFwdGVyLT53ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQkJCXsKLQkJCQlydHdfcDJwX2ZpbmRwaGFzZV9leF9zZXQocHdkaW5mbywgUDJQX0ZJTkRQSEFTRV9FWF9NQVgpOwotCQkJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5jaGFubmVsX2lkeCA9IDM7Ci0JCQkJREJHXzg3MjNBKCIlcyBpZHg6JWQsIGNudDoldVxuIiwgX19mdW5jX18sCi0JCQkJCSAgcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoYW5uZWxfaWR4LAotCQkJCQkgIHB3ZGluZm8tPmZpbmRfcGhhc2Vfc3RhdGVfZXhjaGFuZ2VfY250KTsKLQkJCX0gZWxzZQotCQkJI2VuZGlmCi0JCQl7Ci0JCQkJcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoYW5uZWxfaWR4ID0gcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoX251bTsKLQkJCQlEQkdfODcyM0EoIiVzIGlkeDolZFxuIiwgX19mdW5jX18sCi0JCQkJCSAgcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoYW5uZWxfaWR4KTsKLQkJCX0KKwkJaWYgKHBtbG1lZXh0LT5zY2FuX2Fib3J0ID09IHRydWUpIHsKKwkJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5jaGFubmVsX2lkeCA9CisJCQkJcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmNoX251bTsKKwkJCURCR184NzIzQSgiJXMgaWR4OiVkXG4iLCBfX2Z1bmNfXywKKwkJCQkgIHBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5jaGFubmVsX2lkeCk7CiAKIAkJCXBtbG1lZXh0LT5zY2FuX2Fib3J0ID0gZmFsc2U7LyogcmVzZXQgKi8KIAkJfQpAQCAtOTA3Nyw3ICs1NzExLDggQEAKIAkJCWdvdG8gZXhpdF9zdXJ2ZXlfdGltZXJfaGRsOwogCQl9CiAKLQkJaW5pdF9oMmZ3Y21kX3dfcGFybV9ub19yc3AocGgyYywgcHN1cnZleVBhcmEsIEdFTl9DTURfQ09ERShfU2l0ZVN1cnZleSkpOworCQlpbml0X2gyZndjbWRfd19wYXJtX25vX3JzcChwaDJjLCBwc3VydmV5UGFyYSwKKwkJCQkJICAgR0VOX0NNRF9DT0RFKF9TaXRlU3VydmV5KSk7CiAJCXJ0d19lbnF1ZXVlX2NtZDIzYShwY21kcHJpdiwgcGgyYyk7CiAJfQogCkBAIC05MDk1LDE3ICs1NzMwLDEzIEBACiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJLyogc3RydWN0IHN0YV9wcml2CQkqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7ICovCiAKLQlpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVVUSF9OVUxMKQotCXsKKwlpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVVUSF9OVUxMKSB7CiAJCURCR184NzIzQSgibGlua190aW1lcl9oZGw6bm8gYmVhY29uIHdoaWxlIGNvbm5lY3RpbmdcbiIpOwogCQlwbWxtZWluZm8tPnN0YXRlID0gV0lGSV9GV19OVUxMX1NUQVRFOwogCQlyZXBvcnRfam9pbl9yZXMyM2EocGFkYXB0ZXIsIC0zKTsKLQl9Ci0JZWxzZSBpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVVUSF9TVEFURSkKLQl7CisJfSBlbHNlIGlmIChwbWxtZWluZm8tPnN0YXRlICYgV0lGSV9GV19BVVRIX1NUQVRFKSB7CiAJCS8qIHJlLWF1dGggdGltZXIgKi8KLQkJaWYgKCsrcG1sbWVpbmZvLT5yZWF1dGhfY291bnQgPiBSRUFVVEhfTElNSVQpCi0JCXsKKwkJaWYgKCsrcG1sbWVpbmZvLT5yZWF1dGhfY291bnQgPiBSRUFVVEhfTElNSVQpIHsKIAkJCS8qIGlmIChwbWxtZWluZm8tPmF1dGhfYWxnbyAhPSBkb3QxMUF1dGhBbGdydGhtX0F1dG8pICovCiAJCQkvKiAgKi8KIAkJCQlwbWxtZWluZm8tPnN0YXRlID0gMDsKQEAgLTkxMTQsMjggKzU3NDUsMjUgQEAKIAkJCS8qICAqLwogCQkJLyogZWxzZSAqLwogCQkJLyogICovCi0JCQkvKglwbWxtZWluZm8tPmF1dGhfYWxnbyA9IGRvdDExQXV0aEFsZ3J0aG1fU2hhcmVkOyAqLwotCQkJLyoJcG1sbWVpbmZvLT5yZWF1dGhfY291bnQgPSAwOyAqLworCQkJLyogcG1sbWVpbmZvLT5hdXRoX2FsZ28gPSBkb3QxMUF1dGhBbGdydGhtX1NoYXJlZDsgKi8KKwkJCS8qIHBtbG1laW5mby0+cmVhdXRoX2NvdW50ID0gMDsgKi8KIAkJCS8qICAqLwogCQl9CiAKIAkJREJHXzg3MjNBKCJsaW5rX3RpbWVyX2hkbDogYXV0aCB0aW1lb3V0IGFuZCB0cnkgYWdhaW5cbiIpOwogCQlwbWxtZWluZm8tPmF1dGhfc2VxID0gMTsKLQkJaXNzdWVfYXV0aDIzYShwYWRhcHRlciwgTlVMTCwgMCk7CisJCWlzc3VlX2F1dGgocGFkYXB0ZXIsIE5VTEwsIDApOwogCQlzZXRfbGlua190aW1lcihwbWxtZWV4dCwgUkVBVVRIX1RPKTsKLQl9Ci0JZWxzZSBpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVNTT0NfU1RBVEUpCi0JeworCX0gZWxzZSBpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVNTT0NfU1RBVEUpIHsKIAkJLyogcmUtYXNzb2MgdGltZXIgKi8KLQkJaWYgKCsrcG1sbWVpbmZvLT5yZWFzc29jX2NvdW50ID4gUkVBU1NPQ19MSU1JVCkKLQkJeworCQlpZiAoKytwbWxtZWluZm8tPnJlYXNzb2NfY291bnQgPiBSRUFTU09DX0xJTUlUKSB7CiAJCQlwbWxtZWluZm8tPnN0YXRlID0gV0lGSV9GV19OVUxMX1NUQVRFOwogCQkJcmVwb3J0X2pvaW5fcmVzMjNhKHBhZGFwdGVyLCAtMik7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlEQkdfODcyM0EoImxpbmtfdGltZXJfaGRsOiBhc3NvYyB0aW1lb3V0IGFuZCB0cnkgYWdhaW5cbiIpOwotCQlpc3N1ZV9hc3NvY3JlcTIzYShwYWRhcHRlcik7CisJCWlzc3VlX2Fzc29jcmVxKHBhZGFwdGVyKTsKIAkJc2V0X2xpbmtfdGltZXIocG1sbWVleHQsIFJFQVNTT0NfVE8pOwogCX0KIApAQCAtOTE1MiwxMSArNTc4MCw5IEBACiAKIAlwaHRwcml2ID0gJnBzdGEtPmh0cHJpdjsKIAotCWlmICgocGh0cHJpdi0+aHRfb3B0aW9uID09IHRydWUpICYmIChwaHRwcml2LT5hbXBkdV9lbmFibGUgPT0gdHJ1ZSkpCi0JeworCWlmIChwaHRwcml2LT5odF9vcHRpb24gPT0gdHJ1ZSAmJiBwaHRwcml2LT5hbXBkdV9lbmFibGUgPT0gdHJ1ZSkgewogCQlpZiAocGh0cHJpdi0+Y2FuZGlkYXRlX3RpZF9iaXRtYXApCiAJCQlwaHRwcml2LT5jYW5kaWRhdGVfdGlkX2JpdG1hcCA9IDB4MDsKLQogCX0KIH0KIApAQCAtOTE3Nyw1NyArNTgwMyw1OCBAQAogCQkgICAgKHVuc2lnbmVkIGxvbmcpcGFkYXB0ZXIpOwogfQogCi11OCBOVUxMX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1ZikKK2ludCBOVUxMX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKIAlyZXR1cm4gSDJDX1NVQ0NFU1M7CiB9CiAKLXU4IHNldG9wbW9kZV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpCitpbnQgc2V0b3Btb2RlX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKLQl1OAl0eXBlOwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0Jc3RydWN0IHNldG9wbW9kZV9wYXJtICpwc2V0b3AgPSAoc3RydWN0IHNldG9wbW9kZV9wYXJtICopcGJ1ZjsKKwljb25zdCBzdHJ1Y3Qgc2V0b3Btb2RlX3Bhcm0gKnBzZXRvcCA9IChzdHJ1Y3Qgc2V0b3Btb2RlX3Bhcm0gKilwYnVmOwogCi0JaWYgKHBzZXRvcC0+bW9kZSA9PSBOZGlzODAyXzExQVBNb2RlKQotCXsKKwlzd2l0Y2ggKHBzZXRvcC0+bW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCXBtbG1laW5mby0+c3RhdGUgPSBXSUZJX0ZXX0FQX1NUQVRFOwogCQl0eXBlID0gX0hXX1NUQVRFX0FQXzsKLQl9Ci0JZWxzZSBpZiAocHNldG9wLT5tb2RlID09IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSkKLQl7Ci0JCXBtbG1laW5mby0+c3RhdGUgJj0gfihCSVQoMCl8QklUKDEpKTsvKiAgY2xlYXIgc3RhdGUgKi8KLQkJcG1sbWVpbmZvLT5zdGF0ZSB8PSBXSUZJX0ZXX1NUQVRJT05fU1RBVEU7Lyogc2V0IHRvCVNUQVRJT05fU1RBVEUgKi8KKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJLyogIGNsZWFyIHN0YXRlICovCisJCXBtbG1laW5mby0+c3RhdGUgJj0gfihCSVQoMCl8QklUKDEpKTsKKwkJLyogc2V0IHRvIFNUQVRJT05fU1RBVEUgKi8KKwkJcG1sbWVpbmZvLT5zdGF0ZSB8PSBXSUZJX0ZXX1NUQVRJT05fU1RBVEU7CiAJCXR5cGUgPSBfSFdfU1RBVEVfU1RBVElPTl87Ci0JfQotCWVsc2UgaWYgKHBzZXRvcC0+bW9kZSA9PSBOZGlzODAyXzExSUJTUykKLQl7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCXR5cGUgPSBfSFdfU1RBVEVfQURIT0NfOwotCX0KLQllbHNlCi0JeworCQlicmVhazsKKwlkZWZhdWx0OgogCQl0eXBlID0gX0hXX1NUQVRFX05PTElOS187CisJCWJyZWFrOwogCX0KIAotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfU0VUX09QTU9ERSwgKHU4ICopKCZ0eXBlKSk7CisJaHdfdmFyX3NldF9vcG1vZGUocGFkYXB0ZXIsIHR5cGUpOwogCS8qIFNldF9ORVRZUEUwX01TUihwYWRhcHRlciwgdHlwZSk7ICovCiAKIAlyZXR1cm4gSDJDX1NVQ0NFU1M7CiB9CiAKLXU4IGNyZWF0ZWJzc19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpCitpbnQgY3JlYXRlYnNzX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7Ci0Jc3RydWN0IHdsYW5fYnNzaWRfZXggKnBwYXJtID0gKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopcGJ1ZjsKKwljb25zdCBzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcHBhcm0gPSAoc3RydWN0IHdsYW5fYnNzaWRfZXggKilwYnVmOwogCS8qIHUzMglpbml0aWFsZ2FpbjsgKi8KIAotCWlmIChwcGFybS0+SW5mcmFzdHJ1Y3R1cmVNb2RlID09IE5kaXM4MDJfMTFBUE1vZGUpIHsKKwlpZiAocHBhcm0tPmlmbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCSAgICBwcGFybS0+aWZtb2RlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykgewogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotCi0JCWlmIChwbWxtZWluZm8tPnN0YXRlID09IFdJRklfRldfQVBfU1RBVEUpCi0JCXsKKwkJaWYgKHBtbG1laW5mby0+c3RhdGUgPT0gV0lGSV9GV19BUF9TVEFURSkgewogCQkJLyogdG9kbzogKi8KIAkJCXJldHVybiBIMkNfU1VDQ0VTUzsKIAkJfQpAQCAtOTIzNSw3ICs1ODYyLDcgQEAKIAl9CiAKIAkvKiBiZWxvdyBpcyBmb3IgYWQtaG9jIG1hc3RlciAqLwotCWlmIChwcGFybS0+SW5mcmFzdHJ1Y3R1cmVNb2RlID09IE5kaXM4MDJfMTFJQlNTKSB7CisJaWYgKHBwYXJtLT5pZm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJcnR3X2pvaW5ic3NfcmVzZXQyM2EocGFkYXB0ZXIpOwogCiAJCXBtbG1lZXh0LT5jdXJfYndtb2RlID0gSFRfQ0hBTk5FTF9XSURUSF8yMDsKQEAgLTkyNDUsMTYgKzU4NzIsMTIgQEAKIAkJcG1sbWVpbmZvLT5IVF9lbmFibGUgPSAwOwogCQlwbWxtZWluZm8tPkhUX2NhcHNfZW5hYmxlID0gMDsKIAkJcG1sbWVpbmZvLT5IVF9pbmZvX2VuYWJsZSA9IDA7Ci0JCXBtbG1laW5mby0+YWdnX2VuYWJsZV9iaXRtYXAgPSAwOwotCQlwbWxtZWluZm8tPmNhbmRpZGF0ZV90aWRfYml0bWFwID0gMDsKIAogCQkvKiBkaXNhYmxlIGR5bmFtaWMgZnVuY3Rpb25zLCBzdWNoIGFzIGhpZ2ggcG93ZXIsIERJRyAqLwotCQlTYXZlX0RNX0Z1bmNfRmxhZzIzYShwYWRhcHRlcik7Ci0JCVN3aXRjaF9ETV9GdW5jMjNhKHBhZGFwdGVyLCBEWU5BTUlDX0ZVTkNfRElTQUJMRSwgZmFsc2UpOworCQlydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X2JhY2t1cChwYWRhcHRlcik7CiAKLQkJLyogY29uZmlnIHRoZSBpbml0aWFsIGdhaW4gdW5kZXIgbGlua2luZywgbmVlZCB0byB3cml0ZSB0aGUgQkIgcmVnaXN0ZXJzICovCi0JCS8qIGluaXRpYWxnYWluID0gMHgxRTsgKi8KLQkJLyogcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9JTklUSUFMX0dBSU4sICh1OCAqKSgmaW5pdGlhbGdhaW4pKTsgKi8KKwkJcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9jbHIocGFkYXB0ZXIsCisJCQkJCQkgRFlOQU1JQ19GVU5DX0RJU0FCTEUpOwogCiAJCS8qIGNhbmNlbCBsaW5rIHRpbWVyICovCiAJCWRlbF90aW1lcl9zeW5jKCZwbWxtZWV4dC0+bGlua190aW1lcik7CkBAIC05MjY3LDMxICs1ODkwLDMwIEBACiAKIAkJbWVtY3B5KHBuZXR3b3JrLCBwcGFybSwgc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSk7CiAKLQkJc3RhcnRfY3JlYXRlX2lic3MyM2EocGFkYXB0ZXIpOworCQlzdGFydF9jcmVhdGVfaWJzcyhwYWRhcHRlcik7CiAJfQogCiAJcmV0dXJuIEgyQ19TVUNDRVNTOwogfQogCi11OCBqb2luX2NtZF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpCitpbnQgam9pbl9jbWRfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewotCXU4CWpvaW5fdHlwZTsKLQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqCXBJRTsKLQlzdHJ1Y3QgcmVnaXN0cnlfcHJpdgkqcHJlZ3ByaXYgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCByZWdpc3RyeV9wcml2ICpwcmVncHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrID0gJnBtbG1laW5mby0+bmV0d29yazsKLQlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcHBhcm0gPSAoc3RydWN0IHdsYW5fYnNzaWRfZXggKilwYnVmOworCWNvbnN0IHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpwcGFybSA9IChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKXBidWY7CiAJc3RydWN0IEhUX2luZm9fZWxlbWVudCAqcGh0X2luZm87CiAJdTMyIGk7CisJaW50IGJjbl9maXhlZF9zaXplOworCXU4ICpwOwogICAgICAgICAvKiB1MzIJaW5pdGlhbGdhaW47ICovCiAJLyogdTMyCWFjcGFybTsgKi8KIAogCS8qIGNoZWNrIGFscmVhZHkgY29ubmVjdGluZyB0byBBUCBvciBub3QgKi8KLQlpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVNTT0NfU1VDQ0VTUykKLQl7CisJaWYgKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpIHsKIAkJaWYgKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX1NUQVRJT05fU1RBVEUpCi0JCQlpc3N1ZV9kZWF1dGgyM2FfZXgyM2EocGFkYXB0ZXIsIHBuZXR3b3JrLT5NYWNBZGRyZXNzLAorCQkJaXNzdWVfZGVhdXRoX2V4KHBhZGFwdGVyLCBwbmV0d29yay0+TWFjQWRkcmVzcywKIAkJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIDUsIDEwMCk7CiAKIAkJcG1sbWVpbmZvLT5zdGF0ZSA9IFdJRklfRldfTlVMTF9TVEFURTsKQEAgLTkzMDUsNyArNTkyNyw3IEBACiAJCS8qIFNldF9NU1IyM2EocGFkYXB0ZXIsIF9IV19TVEFURV9OT0xJTktfKTsgKi8KIAkJU2V0X01TUjIzYShwYWRhcHRlciwgX0hXX1NUQVRFX1NUQVRJT05fKTsKIAotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX01MTUVfRElTQ09OTkVDVCwgTlVMTCk7CisJCWh3X3Zhcl9zZXRfbWxtZV9kaXNjb25uZWN0KHBhZGFwdGVyKTsKIAl9CiAKIAlydHdfam9pbmJzc19yZXNldDIzYShwYWRhcHRlcik7CkBAIC05MzE3LDggKzU5MzksNiBAQAogCXBtbG1laW5mby0+SFRfZW5hYmxlID0gMDsKIAlwbWxtZWluZm8tPkhUX2NhcHNfZW5hYmxlID0gMDsKIAlwbWxtZWluZm8tPkhUX2luZm9fZW5hYmxlID0gMDsKLQlwbWxtZWluZm8tPmFnZ19lbmFibGVfYml0bWFwID0gMDsKLQlwbWxtZWluZm8tPmNhbmRpZGF0ZV90aWRfYml0bWFwID0gMDsKIAlwbWxtZWluZm8tPmJ3bW9kZV91cGRhdGVkID0gZmFsc2U7CiAJLyogcG1sbWVpbmZvLT5hc3NvY19BUF92ZW5kb3IgPSBIVF9JT1RfUEVFUl9NQVg7ICovCiAKQEAgLTkzMzEsMjcgKzU5NTEsMjggQEAKIAkvKiBwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciA9IGNoZWNrX2Fzc29jX0FQMjNhKHBuZXR3b3JrLT5JRXMsCiAJICAgcG5ldHdvcmstPklFTGVuZ3RoKTsgKi8KIAotCWZvciAoaSA9IHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKTsgaSA8IHBuZXR3b3JrLT5JRUxlbmd0aDspCi0JewotCQlwSUUgPSAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKikocG5ldHdvcmstPklFcyArIGkpOworCWJjbl9maXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKIAotCQlzd2l0Y2ggKHBJRS0+RWxlbWVudElEKQotCQl7Ci0JCWNhc2UgX1ZFTkRPUl9TUEVDSUZJQ19JRV86LyogR2V0IFdNTSBJRS4gKi8KLQkJCWlmICghbWVtY21wKHBJRS0+ZGF0YSwgV01NX09VSTIzQSwgNCkpCisJZm9yIChpID0gYmNuX2ZpeGVkX3NpemU7IGkgPCBwbmV0d29yay0+SUVMZW5ndGg7KSB7CisJCXAgPSBwbmV0d29yay0+SUVzICsgaTsKKworCQlzd2l0Y2ggKHBbMF0pIHsKKwkJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6LyogR2V0IFdNTSBJRS4gKi8KKwkJCWlmICghbWVtY21wKHAgKyAyLCBXTU1fT1VJMjNBLCA0KSkKIAkJCQlwbWxtZWluZm8tPldNTV9lbmFibGUgPSAxOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBfSFRfQ0FQQUJJTElUWV9JRV86CS8qIEdldCBIVCBDYXAgSUUuICovCisJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToJLyogR2V0IEhUIENhcCBJRS4gKi8KIAkJCXBtbG1laW5mby0+SFRfY2Fwc19lbmFibGUgPSAxOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBfSFRfRVhUUkFfSU5GT19JRV86CS8qIEdldCBIVCBJbmZvIElFLiAqLworCQljYXNlIFdMQU5fRUlEX0hUX09QRVJBVElPTjoJLyogR2V0IEhUIEluZm8gSUUuICovCiAJCQlwbWxtZWluZm8tPkhUX2luZm9fZW5hYmxlID0gMTsKIAogCQkJLyogc3BlYyBjYXNlIG9ubHkgZm9yIGNpc2NvJ3MgYXAgYmVjYXVzZSBjaXNjbydzIGFwCiAJCQkgKiBpc3N1ZSBhc3NvYyByc3AgdXNpbmcgbWNzIHJhdGUgQDQwTUh6IG9yIEAyME1IeiAqLwotCQkJcGh0X2luZm8gPSAoc3RydWN0IEhUX2luZm9fZWxlbWVudCAqKShwSUUtPmRhdGEpOworCQkJcGh0X2luZm8gPSAoc3RydWN0IEhUX2luZm9fZWxlbWVudCAqKShwICsgMik7CiAKIAkJCWlmICgocHJlZ3ByaXYtPmNidzQwX2VuYWJsZSkgJiYKIAkJCSAgICAocGh0X2luZm8tPmluZm9zWzBdICYgQklUKDIpKSkgewpAQCAtOTM4Myw1OSArNjAwNCw0NiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpICs9IChwSUUtPkxlbmd0aCArIDIpOworCQlpICs9IChwWzFdICsgMik7CiAJfQotCS8qIGRpc2FibGUgZHluYW1pYyBmdW5jdGlvbnMsIHN1Y2ggYXMgaGlnaCBwb3dlciwgRElHICovCi0JLyogU3dpdGNoX0RNX0Z1bmMyM2EocGFkYXB0ZXIsIERZTkFNSUNfRlVOQ19ESVNBQkxFLCBmYWxzZSk7ICovCiAKLQkvKiBjb25maWcgdGhlIGluaXRpYWwgZ2FpbiB1bmRlciBsaW5raW5nLCBuZWVkIHRvIHdyaXRlIHRoZSBCQgotCSAgIHJlZ2lzdGVycyAqLwotCS8qIGluaXRpYWxnYWluID0gMHgxRTsgKi8KLQkvKiBydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0lOSVRJQUxfR0FJTiwKLQkgICAodTggKikoJmluaXRpYWxnYWluKSk7ICovCi0KLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JTU0lELAotCQkJICBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0Jam9pbl90eXBlID0gMDsKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX01MTUVfSk9JTiwgKHU4ICopKCZqb2luX3R5cGUpKTsKKwlod192YXJfc2V0X2Jzc2lkKHBhZGFwdGVyLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJaHdfdmFyX3NldF9tbG1lX2pvaW4ocGFkYXB0ZXIsIDApOwogCiAJLyogY2FuY2VsIGxpbmsgdGltZXIgKi8KIAlkZWxfdGltZXJfc3luYygmcG1sbWVleHQtPmxpbmtfdGltZXIpOwogCi0Jc3RhcnRfY2xudF9qb2luMjNhKHBhZGFwdGVyKTsKKwlzdGFydF9jbG50X2pvaW4ocGFkYXB0ZXIpOwogCiAJcmV0dXJuIEgyQ19TVUNDRVNTOwogfQogCi11OCBkaXNjb25uZWN0X2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IGRpc2Nvbm5lY3RfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewotCXN0cnVjdCBkaXNjb25uZWN0X3Bhcm0gKnBhcmFtID0gKHN0cnVjdCBkaXNjb25uZWN0X3Bhcm0gKilwYnVmOwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJY29uc3Qgc3RydWN0IGRpc2Nvbm5lY3RfcGFybSAqcGFyYW0gPSAoc3RydWN0IGRpc2Nvbm5lY3RfcGFybSAqKXBidWY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcG5ldHdvcmsgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOwotCXU4CXZhbDg7CiAKLQlpZiAoaXNfY2xpZW50X2Fzc29jaWF0ZWRfdG9fYXAyM2EocGFkYXB0ZXIpKQotCXsKLQkJaXNzdWVfZGVhdXRoMjNhX2V4MjNhKHBhZGFwdGVyLCBwbmV0d29yay0+TWFjQWRkcmVzcywgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIHBhcmFtLT5kZWF1dGhfdGltZW91dF9tcy8xMDAsIDEwMCk7CisJaWYgKGlzX2NsaWVudF9hc3NvY2lhdGVkX3RvX2FwMjNhKHBhZGFwdGVyKSkgeworCQlpc3N1ZV9kZWF1dGhfZXgocGFkYXB0ZXIsIHBuZXR3b3JrLT5NYWNBZGRyZXNzLAorCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLAorCQkJCXBhcmFtLT5kZWF1dGhfdGltZW91dF9tcy8xMDAsIDEwMCk7CiAJfQogCiAJLyogc2V0X29wbW9kZV9jbWQocGFkYXB0ZXIsIGluZnJhX2NsaWVudF93aXRoX21sbWUpOyAqLwogCiAJLyogcG1sbWVpbmZvLT5zdGF0ZSA9IFdJRklfRldfTlVMTF9TVEFURTsgKi8KIAotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9ESVNDT05ORUNULCBOVUxMKTsKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JTU0lELCBudWxsX2FkZHIpOworCWh3X3Zhcl9zZXRfbWxtZV9kaXNjb25uZWN0KHBhZGFwdGVyKTsKKwlod192YXJfc2V0X2Jzc2lkKHBhZGFwdGVyLCBudWxsX2FkZHIpOwogCiAJLyogcmVzdG9yZSB0byBpbml0aWFsIHNldHRpbmcuICovCiAJdXBkYXRlX3R4X2Jhc2ljX3JhdGUyM2EocGFkYXB0ZXIsIHBhZGFwdGVyLT5yZWdpc3RyeXByaXYud2lyZWxlc3NfbW9kZSk7CiAKLQlpZiAoKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfQURIT0NfU1RBVEUpIHx8ICgocG1sbWVpbmZvLT5zdGF0ZSYweDAzKSA9PSBXSUZJX0ZXX0FQX1NUQVRFKSkKLQl7Ci0JCS8qIFN0b3AgQkNOICovCi0JCXZhbDggPSAwOwotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JDTl9GVU5DLCAodTggKikoJnZhbDgpKTsKLQl9CisJaWYgKChwbWxtZWluZm8tPnN0YXRlICYgMHgwMykgPT0gV0lGSV9GV19BREhPQ19TVEFURSB8fAorCSAgICAocG1sbWVpbmZvLT5zdGF0ZSAmIDB4MDMpID09IFdJRklfRldfQVBfU1RBVEUpCisJCXJ0bDg3MjNhX3NldF9iY25fZnVuYyhwYWRhcHRlciwgMCk7CS8qIFN0b3AgQkNOICovCiAKIAkvKiBzZXQgTVNSIHRvIG5vIGxpbmsgc3RhdGUgLT4gaW5mcmEuIG1vZGUgKi8KIAlTZXRfTVNSMjNhKHBhZGFwdGVyLCBfSFdfU1RBVEVfU1RBVElPTl8pOwpAQCAtOTQ0Niw3ICs2MDU0LDggQEAKIAlwbWxtZWV4dC0+Y3VyX2J3bW9kZSA9IEhUX0NIQU5ORUxfV0lEVEhfMjA7CiAJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOwogCi0Jc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7CisJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsCisJCQkgICAgICBwbWxtZWV4dC0+Y3VyX2NoX29mZnNldCwgcG1sbWVleHQtPmN1cl9id21vZGUpOwogCiAJZmx1c2hfYWxsX2NhbV9lbnRyeTIzYShwYWRhcHRlcik7CiAKQEAgLTk0NTcsOCArNjA2NiwxMCBAQAogCXJldHVybglIMkNfU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBydHdfc2Nhbl9jaF9kZWNpc2lvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcnR3X2llZWU4MDIxMV9jaGFubmVsICpvdXQsCi0JdTMyIG91dF9udW0sIHN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgKmluLCB1MzIgaW5fbnVtKQorc3RhdGljIGludAorcnR3X3NjYW5fY2hfZGVjaXNpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJICAgICBzdHJ1Y3QgcnR3X2llZWU4MDIxMV9jaGFubmVsICpvdXQsIHUzMiBvdXRfbnVtLAorCQkgICAgIGNvbnN0IHN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgKmluLCB1MzIgaW5fbnVtKQogewogCWludCBpLCBqOwogCWludCBzY2FuX2NoX251bSA9IDA7CkBAIC05NDcxLDE1ICs2MDgyLDE1IEBACiAJLyogYWNxdWlyZSBjaGFubmVscyBmcm9tIGluICovCiAJaiA9IDA7CiAJZm9yIChpID0gMDtpPGluX251bTtpKyspIHsKLQkJaWYgKDApCi0JCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiAiQ0hBTl9GTVQiXG4iLCBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwgQ0hBTl9BUkcoJmluW2ldKSk7Ci0JCWlmIChpbltpXS5od192YWx1ZSAmJiAhKGluW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCi0JCQkmJiAoc2V0X2lkeCA9IHJ0d19jaF9zZXRfc2VhcmNoX2NoMjNhKHBtbG1lZXh0LT5jaGFubmVsX3NldCwgaW5baV0uaHdfdmFsdWUpKSA+PSAwCi0JCSkKLQkJewotCQkJbWVtY3B5KCZvdXRbal0sICZpbltpXSwgc2l6ZW9mKHN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwpKTsKKwkJaWYgKGluW2ldLmh3X3ZhbHVlICYmCisJCSAgICAhKGluW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpICYmCisJCSAgICAoc2V0X2lkeCA9IHJ0d19jaF9zZXRfc2VhcmNoX2NoMjNhKHBtbG1lZXh0LT5jaGFubmVsX3NldCwKKwkJCQkJCSAgICAgICBpbltpXS5od192YWx1ZSkpID49IDApIHsKKwkJCW1lbWNweSgmb3V0W2pdLCAmaW5baV0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwpKTsKIAotCQkJaWYgKHBtbG1lZXh0LT5jaGFubmVsX3NldFtzZXRfaWR4XS5TY2FuVHlwZSA9PSBTQ0FOX1BBU1NJVkUpCisJCQlpZiAocG1sbWVleHQtPmNoYW5uZWxfc2V0W3NldF9pZHhdLlNjYW5UeXBlID09CisJCQkgICAgU0NBTl9QQVNTSVZFKQogCQkJCW91dFtqXS5mbGFncyAmPSBJRUVFODAyMTFfQ0hBTl9OT19JUjsKIAogCQkJaisrOwpAQCAtOTUwMCw3ICs2MTExLDcgQEAKIAkJfQogCX0KIAotCWlmIChwYWRhcHRlci0+c2V0YmFuZCA9PSBHSFpfMjQpIHsJCQkJLyogIDIuNEcgKi8KKwlpZiAocGFkYXB0ZXItPnNldGJhbmQgPT0gR0haXzI0KSB7CQkJLyogIDIuNEcgKi8KIAkJZm9yIChpID0gMDsgaSA8IGogOyBpKyspIHsKIAkJCWlmIChvdXRbaV0uaHdfdmFsdWUgPiAzNSkKIAkJCQltZW1zZXQoJm91dFtpXSwgMCwKQEAgLTk1MDksMTAgKzYxMjAsMTEgQEAKIAkJCQlzY2FuX2NoX251bSsrOwogCQl9CiAJCWogPSBzY2FuX2NoX251bTsKLQl9IGVsc2UgaWYgIChwYWRhcHRlci0+c2V0YmFuZCA9PSBHSFpfNTApIHsJCQkvKiAgNUcgKi8KKwl9IGVsc2UgaWYgIChwYWRhcHRlci0+c2V0YmFuZCA9PSBHSFpfNTApIHsJCS8qICA1RyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgaiA7IGkrKykgewogCQkJaWYgKG91dFtpXS5od192YWx1ZSA+IDM1KSB7Ci0JCQkJbWVtY3B5KCZvdXRbc2Nhbl9jaF9udW0rK10sICZvdXRbaV0sIHNpemVvZihzdHJ1Y3QgcnR3X2llZWU4MDIxMV9jaGFubmVsKSk7CisJCQkJbWVtY3B5KCZvdXRbc2Nhbl9jaF9udW0rK10sICZvdXRbaV0sCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnR3X2llZWU4MDIxMV9jaGFubmVsKSk7CiAJCQl9CiAJCX0KIAkJaiA9IHNjYW5fY2hfbnVtOwpAQCAtOTUyMiwxOSArNjEzNCwxNSBAQAogCXJldHVybiBqOwogfQogCi11OCBzaXRlc3VydmV5X2NtZF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpCitpbnQgc2l0ZXN1cnZleV9jbWRfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7Ci0Jc3RydWN0IHNpdGVzdXJ2ZXlfcGFybSAqcHBhcm0gPSAoc3RydWN0IHNpdGVzdXJ2ZXlfcGFybSAqKXBidWY7CisJY29uc3Qgc3RydWN0IHNpdGVzdXJ2ZXlfcGFybSAqcHBhcm0gPSAoc3RydWN0IHNpdGVzdXJ2ZXlfcGFybSAqKXBidWY7CiAJdTggYmRlbGF5c2NhbiA9IGZhbHNlOwotCXU4IHZhbDg7CiAJdTMyIGluaXRpYWxnYWluOwogCXUzMiBpOwogCiAJaWYgKHBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zdGF0ZSA9PSBTQ0FOX0RJU0FCTEUpIHsKLQkJLyogZm9yIGZpcnN0IHRpbWUgc2l0ZXN1cnZleV9jbWQgKi8KLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9DSEVDS19UWEJVRiwgTlVMTCk7Ci0KIAkJcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnN0YXRlID0gU0NBTl9TVEFSVDsKIAkJcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLmJzc19jbnQgPSAwOwogCQlwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuY2hhbm5lbF9pZHggPSAwOwpAQCAtOTU2NCw4ICs2MTcyLDEwIEBACiAKIAkJCS8qIHN3aXRjaCB0byBjb3JyZWN0IGNoYW5uZWwgb2YgY3VycmVudCBuZXR3b3JrCiAJCQkgICBiZWZvcmUgaXNzdWUga2VlcC1hbGl2ZSBmcmFtZXMgKi8KLQkJCWlmIChydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpICE9IHBtbG1lZXh0LT5jdXJfY2hhbm5lbCkKLQkJCQlTZWxlY3RDaGFubmVsMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpOworCQkJaWYgKHJ0d19nZXRfb3Blcl9jaDIzYShwYWRhcHRlcikgIT0KKwkJCSAgICBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpCisJCQkJU2VsZWN0Q2hhbm5lbDIzYShwYWRhcHRlciwKKwkJCQkJCSBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpOwogCiAJCQlpc3N1ZV9udWxsZGF0YTIzYShwYWRhcHRlciwgTlVMTCwgMSwgMywgNTAwKTsKIApAQCAtOTU3OSw4MyArNjE4OSw4MCBAQAogCQl9CiAJfQogCi0JaWYgKChwbWxtZWV4dC0+c2l0ZXN1cnZleV9yZXMuc3RhdGUgPT0gU0NBTl9TVEFSVCkgfHwKLQkgICAgKHBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zdGF0ZSA9PSBTQ0FOX1RYTlVMTCkpIHsKKwlpZiAocG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnN0YXRlID09IFNDQU5fU1RBUlQgfHwKKwkgICAgcG1sbWVleHQtPnNpdGVzdXJ2ZXlfcmVzLnN0YXRlID09IFNDQU5fVFhOVUxMKSB7CiAJCS8qIGRpc2FibGUgZHluYW1pYyBmdW5jdGlvbnMsIHN1Y2ggYXMgaGlnaCBwb3dlciwgRElHICovCi0JCVNhdmVfRE1fRnVuY19GbGFnMjNhKHBhZGFwdGVyKTsKLQkJU3dpdGNoX0RNX0Z1bmMyM2EocGFkYXB0ZXIsIERZTkFNSUNfRlVOQ19ESVNBQkxFLCBmYWxzZSk7CisJCXJ0bDg3MjNhX29kbV9zdXBwb3J0X2FiaWxpdHlfYmFja3VwKHBhZGFwdGVyKTsKKwkJcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9jbHIocGFkYXB0ZXIsCisJCQkJCQkgRFlOQU1JQ19GVU5DX0RJU0FCTEUpOwogCiAJCS8qIGNvbmZpZyB0aGUgaW5pdGlhbCBnYWluIHVuZGVyIHNjYW5pbmcsIG5lZWQgdG8KIAkJICAgd3JpdGUgdGhlIEJCIHJlZ2lzdGVycyAqLwotCQlpZiAoKHdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpKS0+cDJwX2VuYWJsZWQgPT0gdHJ1ZSkgeworCQlpZiAod2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiktPnAycF9lbmFibGVkID09IHRydWUpCiAJCQlpbml0aWFsZ2FpbiA9IDB4MzA7Ci0JCX0gZWxzZQorCQllbHNlCiAJCQlpbml0aWFsZ2FpbiA9IDB4MUU7CiAKLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9JTklUSUFMX0dBSU4sCi0JCQkJICAodTggKikoJmluaXRpYWxnYWluKSk7CisJCXJ0bDg3MjNhX3NldF9pbml0aWFsX2dhaW4ocGFkYXB0ZXIsIGluaXRpYWxnYWluKTsKIAogCQkvKiBzZXQgTVNSIHRvIG5vIGxpbmsgc3RhdGUgKi8KIAkJU2V0X01TUjIzYShwYWRhcHRlciwgX0hXX1NUQVRFX05PTElOS18pOwogCi0JCXZhbDggPSAxOyAvKiB1bmRlciBzaXRlIHN1cnZleSAqLwotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX01MTUVfU0lURVNVUlZFWSwKLQkJCQkgICh1OCAqKSgmdmFsOCkpOworCQlydGw4NzIzYV9tbG1lX3NpdGVzdXJ2ZXkocGFkYXB0ZXIsIDEpOwogCiAJCXBtbG1lZXh0LT5zaXRlc3VydmV5X3Jlcy5zdGF0ZSA9IFNDQU5fUFJPQ0VTUzsKIAl9CiAKLQlzaXRlX3N1cnZleTIzYShwYWRhcHRlcik7CisJcnR3X3NpdGVfc3VydmV5KHBhZGFwdGVyKTsKIAogCXJldHVybiBIMkNfU1VDQ0VTUzsKIH0KIAotdTggc2V0YXV0aF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJ1ZikKK2ludCBzZXRhdXRoX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKLQlzdHJ1Y3Qgc2V0YXV0aF9wYXJtCQkqcHBhcm0gPSAoc3RydWN0IHNldGF1dGhfcGFybSAqKXBidWY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwljb25zdCBzdHJ1Y3Qgc2V0YXV0aF9wYXJtICpwcGFybSA9IChzdHJ1Y3Qgc2V0YXV0aF9wYXJtICopcGJ1ZjsKKwlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCiAJaWYgKHBwYXJtLT5tb2RlIDwgNCkKLQl7CiAJCXBtbG1laW5mby0+YXV0aF9hbGdvID0gcHBhcm0tPm1vZGU7Ci0JfQogCiAJcmV0dXJuCUgyQ19TVUNDRVNTOwogfQogCi11OCBzZXRrZXlfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKQoraW50IHNldGtleV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpCiB7Ci0JdW5zaWduZWQgc2hvcnQJCQkJY3RybDsKLQlzdHJ1Y3Qgc2V0a2V5X3Bhcm0JCSpwcGFybSA9IChzdHJ1Y3Qgc2V0a2V5X3Bhcm0gKilwYnVmOwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJdW5zaWduZWQgc2hvcnQgY3RybDsKKwljb25zdCBzdHJ1Y3Qgc2V0a2V5X3Bhcm0gKnBwYXJtID0gKHN0cnVjdCBzZXRrZXlfcGFybSAqKXBidWY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKLQl1bnNpZ25lZCBjaGFyCQkJCQludWxsX3N0YVtdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCXVuc2lnbmVkIGNoYXIgbnVsbF9zdGFbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAogCS8qIG1haW4gdHgga2V5IGZvciB3ZXAuICovCiAJaWYgKHBwYXJtLT5zZXRfdHgpCiAJCXBtbG1laW5mby0+a2V5X2luZGV4ID0gcHBhcm0tPmtleWlkOwogCiAJLyogd3JpdGUgY2FtICovCi0JY3RybCA9IEJJVCgxNSkgfCAoKHBwYXJtLT5hbGdvcml0aG0pIDw8IDIpIHwgcHBhcm0tPmtleWlkOworCWN0cmwgPSBCSVQoMTUpIHwgKHBwYXJtLT5hbGdvcml0aG0pIDw8IDIgfCBwcGFybS0+a2V5aWQ7CiAKLQlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAic2V0IGdyb3VwIGtleSB0byBodzogYWxnOiVkKFdFUDQwLTEgV0VQMTA0LTUgVEtJUC0yIEFFUy00KSAiCi0JCQkia2V5aWQ6JWRcbiIsIHBwYXJtLT5hbGdvcml0aG0sIHBwYXJtLT5rZXlpZCk7Ci0Jd3JpdGVfY2FtMjNhKHBhZGFwdGVyLCBwcGFybS0+a2V5aWQsIGN0cmwsIG51bGxfc3RhLCBwcGFybS0+a2V5KTsKKwlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAic2V0IGdyb3VwIGtleSB0byBodzogYWxnOiVkKFdFUDQwLTEgIgorCQkJIldFUDEwNC01IFRLSVAtMiBBRVMtNCkga2V5aWQ6JWRcbiIsCisJCQlwcGFybS0+YWxnb3JpdGhtLCBwcGFybS0+a2V5aWQpOworCXJ0bDg3MjNhX2NhbV93cml0ZShwYWRhcHRlciwgcHBhcm0tPmtleWlkLCBjdHJsLCBudWxsX3N0YSwgcHBhcm0tPmtleSk7CiAKIAkvKiBhbGxvdyBtdWx0aWNhc3QgcGFja2V0cyB0byBkcml2ZXIgKi8KLSAgICAgICAgcGFkYXB0ZXItPkhhbEZ1bmMuU2V0SHdSZWdIYW5kbGVyKHBhZGFwdGVyLCBIV19WQVJfT05fUkNSX0FNLCBudWxsX2FkZHIpOworCXJ0bDg3MjNhX29uX3Jjcl9hbShwYWRhcHRlcik7CiAKIAlyZXR1cm4gSDJDX1NVQ0NFU1M7CiB9CiAKLXU4IHNldF9zdGFrZXlfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKQoraW50IHNldF9zdGFrZXlfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXUxNiBjdHJsID0gMDsKIAl1OCBjYW1faWQ7LyogY2FtX2VudHJ5ICovCi0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwotCXN0cnVjdCBzZXRfc3Rha2V5X3Bhcm0JKnBwYXJtID0gKHN0cnVjdCBzZXRfc3Rha2V5X3Bhcm0gKilwYnVmOworCWNvbnN0IHN0cnVjdCBzZXRfc3Rha2V5X3Bhcm0gKnBwYXJtID0gKHN0cnVjdCBzZXRfc3Rha2V5X3Bhcm0gKilwYnVmOwogCiAJLyogY2FtX2VudHJ5OiAqLwogCS8qIDB+MyBmb3IgZGVmYXVsdCBrZXkgKi8KQEAgLTk2NzIsMTA1ICs2Mjc5LDEwNCBAQAogCiAJY2FtX2lkID0gNDsKIAotCURCR184NzIzQV9MRVZFTChfZHJ2X2Fsd2F5c18sICJzZXQgcGFpcndpc2Uga2V5IHRvIGh3OiBhbGc6JWQoV0VQNDAtMSBXRVAxMDQtNSBUS0lQLTIgQUVTLTQpIGNhbWlkOiVkXG4iLAorCURCR184NzIzQV9MRVZFTChfZHJ2X2Fsd2F5c18sICJzZXQgcGFpcndpc2Uga2V5IHRvIGh3OiBhbGc6JWQoV0VQNDAtMSAiCisJCQkiV0VQMTA0LTUgVEtJUC0yIEFFUy00KSBjYW1pZDolZFxuIiwKIAkJCXBwYXJtLT5hbGdvcml0aG0sIGNhbV9pZCk7Ci0JaWYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfQVBfU1RBVEUpCi0JewotCisJaWYgKChwbWxtZWluZm8tPnN0YXRlICYgMHgwMykgPT0gV0lGSV9GV19BUF9TVEFURSkgewogCQlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAKLQkJaWYgKHBwYXJtLT5hbGdvcml0aG0gPT0gX05PX1BSSVZBQ1lfKQkvKiAgY2xlYXIgY2FtIGVudHJ5ICovCi0JCXsKKwkJaWYgKHBwYXJtLT5hbGdvcml0aG0gPT0gMCkgewkvKiAgY2xlYXIgY2FtIGVudHJ5ICovCiAJCQljbGVhcl9jYW1fZW50cnkyM2EocGFkYXB0ZXIsIHBwYXJtLT5pZCk7CiAJCQlyZXR1cm4gSDJDX1NVQ0NFU1NfUlNQOwogCQl9CiAKIAkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgcHBhcm0tPmFkZHIpOwotCQlpZiAocHN0YSkKLQkJewotCQkJY3RybCA9IChCSVQoMTUpIHwgKChwcGFybS0+YWxnb3JpdGhtKSA8PCAyKSk7CisJCWlmIChwc3RhKSB7CisJCQljdHJsID0gQklUKDE1KSB8IChwcGFybS0+YWxnb3JpdGhtIDw8IDIpOwogCi0JCQlEQkdfODcyM0EoInI4NzF4X3NldF9zdGFrZXlfaGRsMjNhKCk6IGVuY19hbGdvcml0aG0gPSVkXG4iLCBwcGFybS0+YWxnb3JpdGhtKTsKKwkJCURCR184NzIzQSgicjg3MXhfc2V0X3N0YWtleV9oZGwyM2EoKTogZW5jX2FsZ29yaXRobSAiCisJCQkJICAiPSVkXG4iLCBwcGFybS0+YWxnb3JpdGhtKTsKIAotCQkJaWYgKChwc3RhLT5tYWNfaWQ8MSkgfHwgKHBzdGEtPm1hY19pZD4oTlVNX1NUQS00KSkpCi0JCQl7Ci0JCQkJREJHXzg3MjNBKCJyODcxeF9zZXRfc3Rha2V5X2hkbDIzYSgpOnNldF9zdGFrZXkgZmFpbGVkLCBtYWNfaWQoYWlkKSA9JWRcbiIsIHBzdGEtPm1hY19pZCk7CisJCQlpZiAocHN0YS0+bWFjX2lkIDwgMSB8fCBwc3RhLT5tYWNfaWQgPiAoTlVNX1NUQSAtIDQpKSB7CisJCQkJREJHXzg3MjNBKCJyODcxeF9zZXRfc3Rha2V5X2hkbDIzYSgpOnNldF9zdGFrZXkiCisJCQkJCSAgIiBmYWlsZWQsIG1hY19pZChhaWQpID0lZFxuIiwKKwkJCQkJICBwc3RhLT5tYWNfaWQpOwogCQkJCXJldHVybiBIMkNfUkVKRUNURUQ7CiAJCQl9CiAKLQkJCWNhbV9pZCA9IChwc3RhLT5tYWNfaWQgKyAzKTsvKiAwfjMgZm9yIGRlZmF1bHQga2V5LCBjbWRfaWQgPSBtYWNpZCArIDMsIG1hY2lkID0gYWlkKzE7ICovCisJCQkvKiAwfjMgZm9yIGRlZmF1bHQga2V5LCBjbWRfaWQgPSBtYWNpZCArIDMsCisJCQkgICBtYWNpZCA9IGFpZCsxOyAqLworCQkJY2FtX2lkID0gKHBzdGEtPm1hY19pZCArIDMpOwogCi0JCQlEQkdfODcyM0EoIldyaXRlIENBTSwgbWFjX2FkZHIgPSV4OiV4OiV4OiV4OiV4OiV4LCBjYW1fZW50cnkgPSVkXG4iLCBwcGFybS0+YWRkclswXSwKLQkJCQkJCXBwYXJtLT5hZGRyWzFdLCBwcGFybS0+YWRkclsyXSwgcHBhcm0tPmFkZHJbM10sIHBwYXJtLT5hZGRyWzRdLAotCQkJCQkJcHBhcm0tPmFkZHJbNV0sIGNhbV9pZCk7CisJCQlEQkdfODcyM0EoIldyaXRlIENBTSwgbWFjX2FkZHIgPSV4OiV4OiV4OiV4OiV4OiV4LCAiCisJCQkJICAiY2FtX2VudHJ5ID0lZFxuIiwgcHBhcm0tPmFkZHJbMF0sCisJCQkJICBwcGFybS0+YWRkclsxXSwgcHBhcm0tPmFkZHJbMl0sCisJCQkJICBwcGFybS0+YWRkclszXSwgcHBhcm0tPmFkZHJbNF0sCisJCQkJICBwcGFybS0+YWRkcls1XSwgY2FtX2lkKTsKIAotCQkJd3JpdGVfY2FtMjNhKHBhZGFwdGVyLCBjYW1faWQsIGN0cmwsIHBwYXJtLT5hZGRyLCBwcGFybS0+a2V5KTsKKwkJCXJ0bDg3MjNhX2NhbV93cml0ZShwYWRhcHRlciwgY2FtX2lkLCBjdHJsLAorCQkJCQkgICBwcGFybS0+YWRkciwgcHBhcm0tPmtleSk7CiAKIAkJCXJldHVybiBIMkNfU1VDQ0VTU19SU1A7Ci0KLQkJfQotCQllbHNlCi0JCXsKLQkJCURCR184NzIzQSgicjg3MXhfc2V0X3N0YWtleV9oZGwyM2EoKTogc3RhIGhhcyBiZWVuIGZyZWVcbiIpOworCQl9IGVsc2UgeworCQkJREJHXzg3MjNBKCJyODcxeF9zZXRfc3Rha2V5X2hkbDIzYSgpOiBzdGEgaGFzIGJlZW4gIgorCQkJCSAgImZyZWVcbiIpOwogCQkJcmV0dXJuIEgyQ19SRUpFQ1RFRDsKIAkJfQotCiAJfQogCiAJLyogYmVsb3cgZm9yIHN0YSBtb2RlICovCiAKLQlpZiAocHBhcm0tPmFsZ29yaXRobSA9PSBfTk9fUFJJVkFDWV8pCS8qICBjbGVhciBjYW0gZW50cnkgKi8KLQl7CisJaWYgKHBwYXJtLT5hbGdvcml0aG0gPT0gMCkgewkvKiAgY2xlYXIgY2FtIGVudHJ5ICovCiAJCWNsZWFyX2NhbV9lbnRyeTIzYShwYWRhcHRlciwgcHBhcm0tPmlkKTsKIAkJcmV0dXJuIEgyQ19TVUNDRVNTOwogCX0KIAotCWN0cmwgPSBCSVQoMTUpIHwgKChwcGFybS0+YWxnb3JpdGhtKSA8PCAyKTsKKwljdHJsID0gQklUKDE1KSB8IChwcGFybS0+YWxnb3JpdGhtIDw8IDIpOwogCi0Jd3JpdGVfY2FtMjNhKHBhZGFwdGVyLCBjYW1faWQsIGN0cmwsIHBwYXJtLT5hZGRyLCBwcGFybS0+a2V5KTsKKwlydGw4NzIzYV9jYW1fd3JpdGUocGFkYXB0ZXIsIGNhbV9pZCwgY3RybCwgcHBhcm0tPmFkZHIsIHBwYXJtLT5rZXkpOwogCiAJcG1sbWVpbmZvLT5lbmNfYWxnbyA9IHBwYXJtLT5hbGdvcml0aG07CiAKIAlyZXR1cm4gSDJDX1NVQ0NFU1M7CiB9CiAKLXU4IGFkZF9iYV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJ1ZikKK2ludCBhZGRfYmFfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewotCXN0cnVjdCBhZGRCYVJlcV9wYXJtCSpwcGFybSA9IChzdHJ1Y3QgYWRkQmFSZXFfcGFybSAqKXBidWY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwljb25zdCBzdHJ1Y3QgYWRkQmFSZXFfcGFybSAqcHBhcm0gPSAoc3RydWN0IGFkZEJhUmVxX3Bhcm0gKilwYnVmOworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CisJc3RydWN0IHN0YV9pbmZvICpwc3RhOwogCi0Jc3RydWN0IHN0YV9pbmZvICpwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKCZwYWRhcHRlci0+c3RhcHJpdiwgcHBhcm0tPmFkZHIpOworCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EoJnBhZGFwdGVyLT5zdGFwcml2LCBwcGFybS0+YWRkcik7CiAKIAlpZiAoIXBzdGEpCiAJCXJldHVybglIMkNfU1VDQ0VTUzsKIAogCWlmICgoKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpICYmCi0JICAgICAocG1sbWVpbmZvLT5IVF9lbmFibGUpKSB8fAotCSAgICAoKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSA9PSBXSUZJX0ZXX0FQX1NUQVRFKSkgeworCSAgICAgcG1sbWVpbmZvLT5IVF9lbmFibGUpIHx8CisJICAgIChwbWxtZWluZm8tPnN0YXRlICYgMHgwMykgPT0gV0lGSV9GV19BUF9TVEFURSkgewogCQlpc3N1ZV9hY3Rpb25fQkEyM2EocGFkYXB0ZXIsIHBwYXJtLT5hZGRyLAotCQkJCVdMQU5fQUNUSU9OX0FEREJBX1JFUSwgKHUxNilwcGFybS0+dGlkKTsKKwkJCQkgICBXTEFOX0FDVElPTl9BRERCQV9SRVEsICh1MTYpcHBhcm0tPnRpZCk7CiAJCW1vZF90aW1lcigmcHN0YS0+YWRkYmFfcmV0cnlfdGltZXIsCiAJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFEREJBX1RPKSk7Ci0JfSBlbHNlIHsKLQkJcHN0YS0+aHRwcml2LmNhbmRpZGF0ZV90aWRfYml0bWFwICY9IH5DSEtCSVQocHBhcm0tPnRpZCk7Ci0JfQorCX0gZWxzZQorCQlwc3RhLT5odHByaXYuY2FuZGlkYXRlX3RpZF9iaXRtYXAgJj0gfkJJVChwcGFybS0+dGlkKTsKKwogCXJldHVybglIMkNfU1VDQ0VTUzsKIH0KIAotdTggc2V0X3R4X2JlYWNvbl9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKiBwYWRhcHRlcikKK2ludCBzZXRfdHhfYmVhY29uX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyKQogewotCXN0cnVjdCBjbWRfb2JqCSpwaDJjOworCXN0cnVjdCBjbWRfb2JqICpwaDJjOwogCXN0cnVjdCBUeF9CZWFjb25fcGFyYW0JKnB0eEJlYWNvbl9wYXJtOwogCXN0cnVjdCBjbWRfcHJpdgkqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKLQl1OAlyZXMgPSBfU1VDQ0VTUzsKKwl1OCByZXMgPSBfU1VDQ0VTUzsKIAlpbnQgbGVuX2RpZmYgPSAwOwogCi0KLQogCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksIEdGUF9BVE9NSUMpOwogCWlmICghcGgyYykgewogCQlyZXMgPSBfRkFJTDsKQEAgLTk3OTQsNjEgKzY0MDAsNTIgQEAKIAkJcG1sbWVpbmZvLT5oaWRkZW5fc3NpZF9tb2RlKTsKIAlwdHhCZWFjb25fcGFybS0+bmV0d29yay5JRUxlbmd0aCArPSBsZW5fZGlmZjsKIAotCWluaXRfaDJmd2NtZF93X3Bhcm1fbm9fcnNwKHBoMmMsIHB0eEJlYWNvbl9wYXJtLCBHRU5fQ01EX0NPREUoX1RYX0JlYWNvbikpOworCWluaXRfaDJmd2NtZF93X3Bhcm1fbm9fcnNwKHBoMmMsIHB0eEJlYWNvbl9wYXJtLAorCQkJCSAgIEdFTl9DTURfQ09ERShfVFhfQmVhY29uKSk7CiAKIAlyZXMgPSBydHdfZW5xdWV1ZV9jbWQyM2EocGNtZHByaXYsIHBoMmMpOwogCiBleGl0OgotCi0KLQogCXJldHVybiByZXM7CiB9CiAKLXU4IG1sbWVfZXZ0X2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IG1sbWVfZXZ0X2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKIAl1OCBldnRfY29kZSwgZXZ0X3NlcTsKIAl1MTYgZXZ0X3N6OwotCXVpbnQJKnBldmVudGJ1ZjsKLQl2b2lkICgqZXZlbnRfY2FsbGJhY2spKHN0cnVjdCBydHdfYWRhcHRlciAqZGV2LCB1OCAqcGJ1Zik7Ci0Jc3RydWN0IGV2dF9wcml2ICpwZXZ0X3ByaXYgPSAmcGFkYXB0ZXItPmV2dHByaXY7CisJY29uc3Qgc3RydWN0IEMySEV2ZW50X0hlYWRlciAqYzJoOworCXZvaWQgKCpldmVudF9jYWxsYmFjaykoc3RydWN0IHJ0d19hZGFwdGVyICpkZXYsIGNvbnN0IHU4ICpwYnVmKTsKIAotCXBldmVudGJ1ZiA9ICh1aW50KilwYnVmOwotCWV2dF9zeiA9ICh1MTYpKCpwZXZlbnRidWYmMHhmZmZmKTsKLQlldnRfc2VxID0gKHU4KSgoKnBldmVudGJ1Zj4+MjQpJjB4N2YpOwotCWV2dF9jb2RlID0gKHU4KSgoKnBldmVudGJ1Zj4+MTYpJjB4ZmYpOworCWMyaCA9IChzdHJ1Y3QgQzJIRXZlbnRfSGVhZGVyICopcGJ1ZjsKKwlldnRfc3ogPSBjMmgtPmxlbjsKKwlldnRfc2VxID0gYzJoLT5zZXE7CisJZXZ0X2NvZGUgPSBjMmgtPklEOwogCiAJLyogIGNoZWNraW5nIGlmIGV2ZW50IGNvZGUgaXMgdmFsaWQgKi8KIAlpZiAoZXZ0X2NvZGUgPj0gTUFYX0MySEVWVCkgewotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfY21kX2NfLCBfZHJ2X2Vycl8sICgiXG5FdmVudCBDb2RlKCVkKSBtaXNtYXRjaCFcbiIsIGV2dF9jb2RlKSk7CisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfZXJyXywKKwkJCSAoIlxuRXZlbnQgQ29kZSglZCkgbWlzbWF0Y2ghXG4iLCBldnRfY29kZSkpOwogCQlnb3RvIF9hYm9ydF9ldmVudF87CiAJfQogCiAJLyogIGNoZWNraW5nIGlmIGV2ZW50IHNpemUgbWF0Y2ggdGhlIGV2ZW50IHBhcm0gc2l6ZSAqLwotCWlmICgod2xhbmV2ZW50c1tldnRfY29kZV0ucGFybXNpemUgIT0gMCkgJiYKLQkgICAgKHdsYW5ldmVudHNbZXZ0X2NvZGVdLnBhcm1zaXplICE9IGV2dF9zeikpIHsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2NtZF9jXywgX2Rydl9lcnJfLCAoIlxuRXZlbnQoJWQpIFBhcm0gU2l6ZSBtaXNtYXRjaCAoJWQgdnMgJWQpIVxuIiwKLQkJCWV2dF9jb2RlLCB3bGFuZXZlbnRzW2V2dF9jb2RlXS5wYXJtc2l6ZSwgZXZ0X3N6KSk7CisJaWYgKHdsYW5ldmVudHNbZXZ0X2NvZGVdLnBhcm1zaXplICE9IDAgJiYKKwkgICAgd2xhbmV2ZW50c1tldnRfY29kZV0ucGFybXNpemUgIT0gZXZ0X3N6KSB7CisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9jbWRfY18sIF9kcnZfZXJyXywKKwkJCSAoIlxuRXZlbnQoJWQpIFBhcm0gU2l6ZSBtaXNtYXRjaCAoJWQgdnMgJWQpIVxuIiwKKwkJCSAgZXZ0X2NvZGUsIHdsYW5ldmVudHNbZXZ0X2NvZGVdLnBhcm1zaXplLCBldnRfc3opKTsKIAkJZ290byBfYWJvcnRfZXZlbnRfOwogCX0KIAotCWF0b21pY19pbmMoJnBldnRfcHJpdi0+ZXZlbnRfc2VxKTsKLQotCXBldmVudGJ1ZiArPSAyOwotCi0JaWYgKHBldmVudGJ1ZikgewotCQlldmVudF9jYWxsYmFjayA9IHdsYW5ldmVudHNbZXZ0X2NvZGVdLmV2ZW50X2NhbGxiYWNrOwotCQlldmVudF9jYWxsYmFjayhwYWRhcHRlciwgKHU4KilwZXZlbnRidWYpOwotCi0JCXBldnRfcHJpdi0+ZXZ0X2RvbmVfY250Kys7Ci0JfQorCWV2ZW50X2NhbGxiYWNrID0gd2xhbmV2ZW50c1tldnRfY29kZV0uZXZlbnRfY2FsbGJhY2s7CisJZXZlbnRfY2FsbGJhY2socGFkYXB0ZXIsIHBidWYgKyBzaXplb2Yoc3RydWN0IEMySEV2ZW50X0hlYWRlcikpOwogCiBfYWJvcnRfZXZlbnRfOgogCiAJcmV0dXJuIEgyQ19TVUNDRVNTOwogfQogCi11OCBoMmNfbXNnX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IGgyY19tc2dfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCWlmICghcGJ1ZikKIAkJcmV0dXJuIEgyQ19QQVJBTUVURVJTX0VSUk9SOwpAQCAtOTg1NiwxNiArNjQ1MywxNCBAQAogCXJldHVybiBIMkNfU1VDQ0VTUzsKIH0KIAotdTggdHhfYmVhY29uX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IHR4X2JlYWNvbl9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpCiB7Ci0JaWYgKHNlbmRfYmVhY29uMjNhKHBhZGFwdGVyKSA9PSBfRkFJTCkKLQl7CisJaWYgKHNlbmRfYmVhY29uMjNhKHBhZGFwdGVyKSA9PSBfRkFJTCkgewogCQlEQkdfODcyM0EoImlzc3VlX2JlYWNvbjIzYSwgZmFpbCFcbiIpOwogCQlyZXR1cm4gSDJDX1BBUkFNRVRFUlNfRVJST1I7CiAJfQogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotCWVsc2UgLyogdHggYmMvbWMgZnJhbWVzIGFmdGVyIHVwZGF0ZSBUSU0gKi8KLQl7CisJZWxzZSB7IC8qIHR4IGJjL21jIGZyYW1lcyBhZnRlciB1cGRhdGUgVElNICovCiAJCXN0cnVjdCBzdGFfaW5mbyAqcHN0YV9ibWM7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0LCAqcGhlYWQsICpwdG1wOwogCQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZTsKQEAgLTk4NzcsOCArNjQ3Miw3IEBACiAJCWlmICghcHN0YV9ibWMpCiAJCQlyZXR1cm4gSDJDX1NVQ0NFU1M7CiAKLQkJaWYgKChwc3RhcHJpdi0+dGltX2JpdG1hcCZCSVQoMCkpICYmIChwc3RhX2JtYy0+c2xlZXBxX2xlbj4wKSkKLQkJeworCQlpZiAocHN0YXByaXYtPnRpbV9iaXRtYXAgJiBCSVQoMCkgJiYgcHN0YV9ibWMtPnNsZWVwcV9sZW4gPiAwKSB7CiAJCQltc2xlZXAoMTApOy8qICAxMG1zLCBBVElNKEhJUSkgV2luZG93cyAqLwogCQkJLyogc3Bpbl9sb2NrX2JoKCZwc3RhX2JtYy0+c2xlZXBfcS5sb2NrKTsgKi8KIAkJCXNwaW5fbG9ja19iaCgmcHhtaXRwcml2LT5sb2NrKTsKQEAgLTk5MDIsMjIgKzY0OTYsMjIgQEAKIAogCQkJCXB4bWl0ZnJhbWUtPmF0dHJpYi5xc2VsID0gMHgxMTsvKiBISVEgKi8KIAotCQkJCXJ0d19oYWxfeG1pdDIzYWZyYW1lX2VucXVldWUocGFkYXB0ZXIsIHB4bWl0ZnJhbWUpOworCQkJCXJ0bDg3MjNhdV9oYWxfeG1pdGZyYW1lX2VucXVldWUocGFkYXB0ZXIsCisJCQkJCQkJCXB4bWl0ZnJhbWUpOwogCQkJfQogCiAJCQkvKiBzcGluX3VubG9ja19iaCgmcHN0YV9ibWMtPnNsZWVwX3EubG9jayk7ICovCiAJCQlzcGluX3VubG9ja19iaCgmcHhtaXRwcml2LT5sb2NrKTsKIAkJfQotCiAJfQogI2VuZGlmCiAKIAlyZXR1cm4gSDJDX1NVQ0NFU1M7CiB9CiAKLXU4IHNldF9jaF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpCitpbnQgc2V0X2NoX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKLQlzdHJ1Y3Qgc2V0X2NoX3Bhcm0gKnNldF9jaF9wYXJtOworCWNvbnN0IHN0cnVjdCBzZXRfY2hfcGFybSAqc2V0X2NoX3Bhcm07CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAogCWlmICghcGJ1ZikKQEAgLTk5MjUsMjIgKzY1MTksMjMgQEAKIAogCXNldF9jaF9wYXJtID0gKHN0cnVjdCBzZXRfY2hfcGFybSAqKXBidWY7CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCIgY2g6JXUsIGJ3OiV1LCBjaF9vZmZzZXQ6JXVcbiIsCi0JCUZVTkNfTkRFVl9BUkcocGFkYXB0ZXItPnBuZXRkZXYpLAotCQlzZXRfY2hfcGFybS0+Y2gsIHNldF9jaF9wYXJtLT5idywgc2V0X2NoX3Bhcm0tPmNoX29mZnNldCk7CisJREJHXzg3MjNBKCIlcyglcyk6IGNoOiV1LCBidzoldSwgY2hfb2Zmc2V0OiV1XG4iLCBfX2Z1bmNfXywKKwkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwgc2V0X2NoX3Bhcm0tPmNoLAorCQkgIHNldF9jaF9wYXJtLT5idywgc2V0X2NoX3Bhcm0tPmNoX29mZnNldCk7CiAKIAlwbWxtZWV4dC0+Y3VyX2NoYW5uZWwgPSBzZXRfY2hfcGFybS0+Y2g7CiAJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPSBzZXRfY2hfcGFybS0+Y2hfb2Zmc2V0OwogCXBtbG1lZXh0LT5jdXJfYndtb2RlID0gc2V0X2NoX3Bhcm0tPmJ3OwogCi0Jc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBzZXRfY2hfcGFybS0+Y2gsIHNldF9jaF9wYXJtLT5jaF9vZmZzZXQsIHNldF9jaF9wYXJtLT5idyk7CisJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBzZXRfY2hfcGFybS0+Y2gsCisJCQkgICAgICBzZXRfY2hfcGFybS0+Y2hfb2Zmc2V0LCBzZXRfY2hfcGFybS0+YncpOwogCiAJcmV0dXJuCUgyQ19TVUNDRVNTOwogfQogCi11OCBzZXRfY2hwbGFuX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IHNldF9jaHBsYW5faGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewotCXN0cnVjdCBTZXRDaGFubmVsUGxhbl9wYXJhbSAqc2V0Q2hhbm5lbFBsYW5fcGFyYW07CisJY29uc3Qgc3RydWN0IFNldENoYW5uZWxQbGFuX3BhcmFtICpzZXRDaGFubmVsUGxhbl9wYXJhbTsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCiAJaWYgKCFwYnVmKQpAQCAtOTk0OCwxMyArNjU0MywxNiBAQAogCiAJc2V0Q2hhbm5lbFBsYW5fcGFyYW0gPSAoc3RydWN0IFNldENoYW5uZWxQbGFuX3BhcmFtICopcGJ1ZjsKIAotCXBtbG1lZXh0LT5tYXhfY2hhbl9udW1zID0gaW5pdF9jaGFubmVsX3NldChwYWRhcHRlciwgc2V0Q2hhbm5lbFBsYW5fcGFyYW0tPmNoYW5uZWxfcGxhbiwgcG1sbWVleHQtPmNoYW5uZWxfc2V0KTsKLQlpbml0X2NoYW5uZWxfbGlzdChwYWRhcHRlciwgcG1sbWVleHQtPmNoYW5uZWxfc2V0LCBwbWxtZWV4dC0+bWF4X2NoYW5fbnVtcywgJnBtbG1lZXh0LT5jaGFubmVsX2xpc3QpOworCXBtbG1lZXh0LT5tYXhfY2hhbl9udW1zID0KKwkJaW5pdF9jaGFubmVsX3NldChwYWRhcHRlciwgc2V0Q2hhbm5lbFBsYW5fcGFyYW0tPmNoYW5uZWxfcGxhbiwKKwkJCQkgcG1sbWVleHQtPmNoYW5uZWxfc2V0KTsKKwlpbml0X2NoYW5uZWxfbGlzdChwYWRhcHRlciwgcG1sbWVleHQtPmNoYW5uZWxfc2V0LAorCQkJICBwbWxtZWV4dC0+bWF4X2NoYW5fbnVtcywgJnBtbG1lZXh0LT5jaGFubmVsX2xpc3QpOwogCiAJcmV0dXJuCUgyQ19TVUNDRVNTOwogfQogCi11OCBsZWRfYmxpbmtfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKnBidWYpCitpbnQgbGVkX2JsaW5rX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1ZikKIHsKIAlzdHJ1Y3QgTGVkQmxpbmtfcGFyYW0gKmxlZEJsaW5rX3BhcmFtOwogCkBAIC05OTY2LDI1ICs2NTY0LDI4IEBACiAJcmV0dXJuCUgyQ19TVUNDRVNTOwogfQogCi11OCBzZXRfY3NhX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IHNldF9jc2FfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXJldHVybglIMkNfUkVKRUNURUQ7CiB9CiAKIC8qICBURExTX1dSQ1IJCTogd3JpdGUgUkNSIERBVEEgQklUICovCiAvKiAgVERMU19TRF9QVEkJCTogaXNzdWUgcGVlciB0cmFmZmljIGluZGljYXRpb24gKi8KLS8qICBURExTX0NTX09GRgkJOiBnbyBiYWNrIHRvIHRoZSBjaGFubmVsIGxpbmtlZCB3aXRoIEFQLCB0ZXJtaW5hdGluZyBjaGFubmVsIHN3aXRjaCBwcm9jZWR1cmUgKi8KLS8qICBURExTX0lOSVRfQ0hfU0VOCTogaW5pdCBjaGFubmVsIHNlbnNpbmcsIHJlY2VpdmUgYWxsIGRhdGEgYW5kIG1nbnQgZnJhbWUgKi8KLS8qICBURExTX0RPTkVfQ0hfU0VOOiBjaGFubmVsIHNlbnNpbmcgYW5kIHJlcG9ydCBjYW5kaWRhdGUgY2hhbm5lbCAqLworLyogIFRETFNfQ1NfT0ZGCQk6IGdvIGJhY2sgdG8gdGhlIGNoYW5uZWwgbGlua2VkIHdpdGggQVAsCisJCQkgIHRlcm1pbmF0aW5nIGNoYW5uZWwgc3dpdGNoIHByb2NlZHVyZSAqLworLyogIFRETFNfSU5JVF9DSF9TRU4JOiBpbml0IGNoYW5uZWwgc2Vuc2luZywgcmVjZWl2ZSBhbGwgZGF0YSBhbmQKKwkJCSAgbWdudCBmcmFtZSAqLworLyogIFRETFNfRE9ORV9DSF9TRU4JOiBjaGFubmVsIHNlbnNpbmcgYW5kIHJlcG9ydCBjYW5kaWRhdGUgY2hhbm5lbCAqLwogLyogIFRETFNfT0ZGX0NICQk6IGZpcnN0IHRpbWUgc2V0IGNoYW5uZWwgdG8gb2ZmIGNoYW5uZWwgKi8KLS8qICBURExTX0JBU0VfQ0gJCTogZ28gYmFjayB0cCB0aGUgY2hhbm5lbCBsaW5rZWQgd2l0aCBBUCB3aGVuIHNldCBiYXNlIGNoYW5uZWwgYXMgdGFyZ2V0IGNoYW5uZWwgKi8KKy8qICBURExTX0JBU0VfQ0gJOiBnbyBiYWNrIHRwIHRoZSBjaGFubmVsIGxpbmtlZCB3aXRoIEFQIHdoZW4gc2V0CisJCQkgIGJhc2UgY2hhbm5lbCBhcyB0YXJnZXQgY2hhbm5lbCAqLwogLyogIFRETFNfUF9PRkZfQ0gJOiBwZXJpb2RpY2FsbHkgZ28gdG8gb2ZmIGNoYW5uZWwgKi8KIC8qICBURExTX1BfQkFTRV9DSAk6IHBlcmlvZGljYWxseSBnbyBiYWNrIHRvIGJhc2UgY2hhbm5lbCAqLwogLyogIFRETFNfUlNfUkNSCQk6IHJlc3RvcmUgUkNSICovCiAvKiAgVERMU19DS0FMVl9QSDEJOiBjaGVjayBhbGl2ZSB0aW1lciBwaGFzZTEgKi8KIC8qICBURExTX0NLQUxWX1BIMgk6IGNoZWNrIGFsaXZlIHRpbWVyIHBoYXNlMiAqLwogLyogIFRETFNfRlJFRV9TVEEJOiBmcmVlIHRkbHMgc3RhICovCi11OCB0ZGxzX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKQoraW50IHRkbHNfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKQogewogCXJldHVybiBIMkNfUkVKRUNURUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3AycC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19wMnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5NjFlMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3AycC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDExIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgX1JUV19QMlBfQ18KLQotI2luY2x1ZGUgPGRydl90eXBlcy5oPgotI2luY2x1ZGUgPHJ0d19wMnAuaD4KLSNpbmNsdWRlIDx3aWZpLmg+Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCi1zdGF0aWMgaW50IHJ0d19wMnBfaXNfY2hhbm5lbF9saXN0X29rKHU4IGRlc2lyZWRfY2gsIHU4KiBjaF9saXN0LCB1OCBjaF9jbnQpCi17Ci0JaW50IGZvdW5kID0gMCwgaSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2hfY250OyBpKyspCi0JewotCQlpZiAoY2hfbGlzdFsgaSBdID09IGRlc2lyZWRfY2gpCi0JCXsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBmb3VuZDsKLX0KLQotc3RhdGljIGludCBpc19hbnlfY2xpZW50X2Fzc29jaWF0ZWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlyZXR1cm4gcGFkYXB0ZXItPnN0YXByaXYuYXNvY19saXN0X2NudCA/IHRydWUgOiBmYWxzZTsKLX0KLQotc3RhdGljIHUzMiBnb19hZGRfZ3JvdXBfaW5mb19hdHRyKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBoZWFkLCAqcGxpc3Q7Ci0JdTMyIGxlbiA9IDA7Ci0JdTE2IGF0dHJfbGVuID0gMDsKLQl1OCB0bXBsZW4sICpwZGF0YV9hdHRyLCAqcHN0YXJ0LCAqcGN1cjsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7Ci0KLQlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlwZGF0YV9hdHRyID0ga3phbGxvYyhNQVhfUDJQX0lFX0xFTiwgR0ZQX0FUT01JQyk7Ci0KLQlwc3RhcnQgPSBwZGF0YV9hdHRyOwotCXBjdXIgPSBwZGF0YV9hdHRyOwotCi0Jc3Bpbl9sb2NrX2JoKCZwc3RhcHJpdi0+YXNvY19saXN0X2xvY2spOwotCXBoZWFkID0gJnBzdGFwcml2LT5hc29jX2xpc3Q7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBsaXN0LCBwaGVhZCkgewotCQlwc3RhID0gY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3Qgc3RhX2luZm8sIGFzb2NfbGlzdCk7Ci0KLQkJaWYgKHBzdGEtPmlzX3AycF9kZXZpY2UpCi0JCXsKLQkJCXRtcGxlbiA9IDA7Ci0KLQkJCXBjdXIrKzsKLQotCQkJLyogUDJQIGRldmljZSBhZGRyZXNzICovCi0JCQltZW1jcHkocGN1ciwgcHN0YS0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJCXBjdXIgKz0gRVRIX0FMRU47Ci0KLQkJCS8qIFAyUCBpbnRlcmZhY2UgYWRkcmVzcyAqLwotCQkJbWVtY3B5KHBjdXIsIHBzdGEtPmh3YWRkciwgRVRIX0FMRU4pOwotCQkJcGN1ciArPSBFVEhfQUxFTjsKLQotCQkJKnBjdXIgPSBwc3RhLT5kZXZfY2FwOwotCQkJcGN1cisrOwotCi0JCQkvKiB1MTYqKShwY3VyKSA9IGNwdV90b19iZTE2KHBzdGEtPmNvbmZpZ19tZXRob2RzKTsgKi8KLQkJCXB1dF91bmFsaWduZWRfYmUxNihwc3RhLT5jb25maWdfbWV0aG9kcywgcGN1cik7Ci0JCQlwY3VyICs9IDI7Ci0KLQkJCW1lbWNweShwY3VyLCBwc3RhLT5wcmltYXJ5X2Rldl90eXBlLCA4KTsKLQkJCXBjdXIgKz0gODsKLQotCQkJKnBjdXIgPSBwc3RhLT5udW1fb2Zfc2VjZGV2X3R5cGU7Ci0JCQlwY3VyKys7Ci0KLQkJCW1lbWNweShwY3VyLCBwc3RhLT5zZWNkZXZfdHlwZXNfbGlzdCwgcHN0YS0+bnVtX29mX3NlY2Rldl90eXBlKjgpOwotCQkJcGN1ciArPSBwc3RhLT5udW1fb2Zfc2VjZGV2X3R5cGUqODsKLQotCQkJaWYgKHBzdGEtPmRldl9uYW1lX2xlbj4wKQotCQkJewotCQkJCS8qIHUxNiopKHBjdXIpID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfREVWSUNFX05BTUUpOyAqLwotCQkJCXB1dF91bmFsaWduZWRfYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSwgcGN1cik7Ci0JCQkJcGN1ciArPSAyOwotCi0JCQkJLyogdTE2KikocGN1cikgPSBjcHVfdG9fYmUxNihwc3RhLT5kZXZfbmFtZV9sZW4pOyAqLwotCQkJCXB1dF91bmFsaWduZWRfYmUxNihwc3RhLT5kZXZfbmFtZV9sZW4sIHBjdXIpOwotCQkJCXBjdXIgKz0gMjsKLQotCQkJCW1lbWNweShwY3VyLCBwc3RhLT5kZXZfbmFtZSwgcHN0YS0+ZGV2X25hbWVfbGVuKTsKLQkJCQlwY3VyICs9IHBzdGEtPmRldl9uYW1lX2xlbjsKLQkJCX0KLQotCQkJdG1wbGVuID0gKHU4KShwY3VyLXBzdGFydCk7Ci0KLQkJCSpwc3RhcnQgPSAodG1wbGVuLTEpOwotCi0JCQlhdHRyX2xlbiArPSB0bXBsZW47Ci0KLQkJCS8qIHBzdGFydCArPSB0bXBsZW47ICovCi0JCQlwc3RhcnQgPSBwY3VyOwotCi0JCX0KLQotCX0KLQlzcGluX3VubG9ja19iaCgmcHN0YXByaXYtPmFzb2NfbGlzdF9sb2NrKTsKLQotCWlmIChhdHRyX2xlbj4wKQotCXsKLQkJbGVuID0gcnR3X3NldF9wMnBfYXR0cl9jb250ZW50MjNhKHBidWYsIFAyUF9BVFRSX0dST1VQX0lORk8sIGF0dHJfbGVuLCBwZGF0YV9hdHRyKTsKLQl9Ci0KLQlrZnJlZShwZGF0YV9hdHRyKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyB2b2lkIGlzc3VlX2dyb3VwX2Rpc2NfcmVxKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpkYSkKLXsKLQlzdHJ1Y3QgeG1pdF9mcmFtZQkJCSpwbWdudGZyYW1lOwotCXN0cnVjdCBwa3RfYXR0cmliCQkJKnBhdHRyaWI7Ci0JdW5zaWduZWQgY2hhcgkJCQkJKnBmcmFtZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcgkqcHdsYW5oZHI7Ci0JdW5zaWduZWQgc2hvcnQJCQkJKmZjdHJsOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwd2RpbmZvLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwotCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7Ci0JdW5zaWduZWQgY2hhciBjYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfVkVORE9SX1NQRUNJRklDOy8qIFAyUCBhY3Rpb24gZnJhbWUgKi8KLQl1MzIJcDJwb3VpID0gY3B1X3RvX2JlMzIoUDJQT1VJKTsKLQl1OAlvdWlfc3VidHlwZSA9IFAyUF9HT19ESVNDX1JFUVVFU1Q7Ci0JdTgJZGlhbG9nVG9rZW4gPSAwOwotCi0JREJHXzg3MjNBKCJbJXNdXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoKHBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KSkgPT0gTlVMTCkKLQl7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB1cGRhdGUgYXR0cmlidXRlICovCi0JcGF0dHJpYiA9ICZwbWdudGZyYW1lLT5hdHRyaWI7Ci0JdXBkYXRlX21nbnRmcmFtZV9hdHRyaWIyM2EocGFkYXB0ZXIsIHBhdHRyaWIpOwotCi0JbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwotCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOwotCi0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkocHdsYW5oZHItPmFkZHIyLCBwd2RpbmZvLT5pbnRlcmZhY2VfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShwd2xhbmhkci0+YWRkcjMsIHB3ZGluZm8tPmludGVyZmFjZV9hZGRyLCBFVEhfQUxFTik7Ci0KLQlTZXRTZXFOdW0ocHdsYW5oZHIsIHBtbG1lZXh0LT5tZ250X3NlcSk7Ci0JcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9BQ1RJT04pOwotCi0JcGZyYW1lICs9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0JcGF0dHJpYi0+cGt0bGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQotCS8qIEJ1aWxkIFAyUCBhY3Rpb24gZnJhbWUgaGVhZGVyICovCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDQsICh1bnNpZ25lZCBjaGFyICopJnAycG91aSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZvdWlfc3VidHlwZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZkaWFsb2dUb2tlbiwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQkvKiB0aGVyZSBpcyBubyBJRSBpbiB0aGlzIFAyUCBhY3Rpb24gZnJhbWUgKi8KLQotCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKLQotCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgaXNzdWVfcDJwX2RldmRpc2NfcmVzcChzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqZGEsIHU4IHN0YXR1cywgdTggZGlhbG9nVG9rZW4pCi17Ci0Jc3RydWN0IHhtaXRfZnJhbWUJCQkqcG1nbnRmcmFtZTsKLQlzdHJ1Y3QgcGt0X2F0dHJpYgkJCSpwYXR0cmliOwotCXVuc2lnbmVkIGNoYXIJCQkJCSpwZnJhbWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIJKnB3bGFuaGRyOwotCXVuc2lnbmVkIHNob3J0CQkJCSpmY3RybDsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHdkaW5mby0+cGFkYXB0ZXI7Ci0Jc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwotCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKLQl1OAkJCWFjdGlvbiA9IFAyUF9QVUJfQUNUSU9OX0FDVElPTjsKLQl1MzIJCQlwMnBvdWkgPSBjcHVfdG9fYmUzMihQMlBPVUkpOwotCXU4CQkJb3VpX3N1YnR5cGUgPSBQMlBfREVWRElTQ19SRVNQOwotCXU4IHAycGllWzhdID0geyAweDAwIH07Ci0JdTMyIHAycGllbGVuID0gMDsKLQotCURCR184NzIzQSgiWyVzXVxuIiwgX19mdW5jX18pOwotCi0JaWYgKChwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdikpID09IE5VTEwpCi0JewotCQlyZXR1cm47Ci0JfQotCi0JLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwotCXBhdHRyaWIgPSAmcG1nbnRmcmFtZS0+YXR0cmliOwotCXVwZGF0ZV9tZ250ZnJhbWVfYXR0cmliMjNhKHBhZGFwdGVyLCBwYXR0cmliKTsKLQotCW1lbXNldChwbWdudGZyYW1lLT5idWZfYWRkciwgMCwgV0xBTkhEUl9PRkZTRVQgKyBUWERFU0NfT0ZGU0VUKTsKLQotCXBmcmFtZSA9ICh1OCAqKShwbWdudGZyYW1lLT5idWZfYWRkcikgKyBUWERFU0NfT0ZGU0VUOwotCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwotCi0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKmZjdHJsID0gMDsKLQotCW1lbWNweShwd2xhbmhkci0+YWRkcjEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMiwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkocHdsYW5oZHItPmFkZHIzLCBwd2RpbmZvLT5kZXZpY2VfYWRkciwgRVRIX0FMRU4pOwotCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOwotCXBtbG1lZXh0LT5tZ250X3NlcSsrOwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfQUNUSU9OKTsKLQotCXBmcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBhdHRyaWItPnBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQkvKiBCdWlsZCBQMlAgcHVibGljIGFjdGlvbiBmcmFtZSBoZWFkZXIgKi8KLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmNhdGVnb3J5LCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmFjdGlvbiwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDQsICh1bnNpZ25lZCBjaGFyICopICZwMnBvdWksCi0JCQkJICAgICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmRpYWxvZ1Rva2VuLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCS8qIEJ1aWxkIFAyUCBJRSAqLwotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NTA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NkY7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4OUE7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyogIFAyUF9BVFRSX1NUQVRVUyAqLwotCXAycGllbGVuICs9IHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSgmcDJwaWVbcDJwaWVsZW5dLCBQMlBfQVRUUl9TVEFUVVMsIDEsICZzdGF0dXMpOwotCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCBwMnBpZWxlbiwgcDJwaWUsICZwYXR0cmliLT5wa3RsZW4pOwotCi0JcGF0dHJpYi0+bGFzdF90eGNtZHN6ID0gcGF0dHJpYi0+cGt0bGVuOwotCi0JZHVtcF9tZ250ZnJhbWUyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwotfQotCi1zdGF0aWMgdm9pZCBpc3N1ZV9wMnBfcHJvdmlzaW9uX3Jlc3Aoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTgqIHJhZGRyLCB1OCogZnJhbWVfYm9keSwgdTE2IGNvbmZpZ19tZXRob2QpCi17Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKLQl1OAkJCWFjdGlvbiA9IFAyUF9QVUJfQUNUSU9OX0FDVElPTjsKLQl1OAkJCWRpYWxvZ1Rva2VuID0gZnJhbWVfYm9keVs3XTsJLyoJVGhlIERpYWxvZyBUb2tlbiBvZiBwcm92aXNpb25pbmcgZGlzY292ZXJ5IHJlcXVlc3QgZnJhbWUuICovCi0JdTMyCQkJcDJwb3VpID0gY3B1X3RvX2JlMzIoUDJQT1VJKTsKLQl1OAkJCW91aV9zdWJ0eXBlID0gUDJQX1BST1ZJU0lPTl9ESVNDX1JFU1A7Ci0JdTgJCQl3cHNpZVsgMTAwIF0gPSB7IDB4MDAgfTsKLQl1OAkJCXdwc2llbGVuID0gMDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXUzMgkJCQkJd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlzdHJ1Y3QgeG1pdF9mcmFtZQkJCSpwbWdudGZyYW1lOwotCXN0cnVjdCBwa3RfYXR0cmliCQkJKnBhdHRyaWI7Ci0JdW5zaWduZWQgY2hhcgkJCQkJKnBmcmFtZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcgkqcHdsYW5oZHI7Ci0JdW5zaWduZWQgc2hvcnQJCQkJKmZjdHJsOwotCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQkvKiB1cGRhdGUgYXR0cmlidXRlICovCi0JcGF0dHJpYiA9ICZwbWdudGZyYW1lLT5hdHRyaWI7Ci0JdXBkYXRlX21nbnRmcmFtZV9hdHRyaWIyM2EocGFkYXB0ZXIsIHBhdHRyaWIpOwotCi0JbWVtc2V0KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCAwLCBXTEFOSERSX09GRlNFVCArIFRYREVTQ19PRkZTRVQpOwotCi0JcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7Ci0JcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqZmN0cmwgPSAwOwotCi0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgcmFkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkocHdsYW5oZHItPmFkZHIyLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksIEVUSF9BTEVOKTsKLQltZW1jcHkocHdsYW5oZHItPmFkZHIzLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksIEVUSF9BTEVOKTsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKLQlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZhY3Rpb24sICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCA0LCAodW5zaWduZWQgY2hhciAqKSAmcDJwb3VpLAotCQkJCSAgICAgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZvdWlfc3VidHlwZSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZkaWFsb2dUb2tlbiwgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQl3cHNpZWxlbiA9IDA7Ci0JLyoJV1BTIE9VSSAqLwotCS8qIHUzMiopICh3cHNpZSkgPSBjcHVfdG9fYmUzMihXUFNPVUkpOyAqLwotCXB1dF91bmFsaWduZWRfYmUzMihXUFNPVUksIHdwc2llKTsKLQl3cHNpZWxlbiArPSA0OwotCi0JLyoJQ29uZmlnIE1ldGhvZCAqLwotCS8qCVR5cGU6ICovCi0JLyogdTE2KikgKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfQ09ORl9NRVRIT0QpOyAqLwotCXB1dF91bmFsaWduZWRfYmUxNihXUFNfQVRUUl9DT05GX01FVEhPRCwgd3BzaWUgKyB3cHNpZWxlbik7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCS8qCUxlbmd0aDogKi8KLQkvKiB1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDIpOyAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDIsIHdwc2llICsgd3BzaWVsZW4pOwotCXdwc2llbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKiB1MTYqKSAod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihjb25maWdfbWV0aG9kKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoY29uZmlnX21ldGhvZCwgd3BzaWUgKyB3cHNpZWxlbik7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBfVkVORE9SX1NQRUNJRklDX0lFXywgd3BzaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHdwc2llLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jd2ZkaWVsZW4gPSBidWlsZF9wcm92ZGlzY19yZXNwX3dmZF9pZShwd2RpbmZvLCBwZnJhbWUpOwotCXBmcmFtZSArPSB3ZmRpZWxlbjsKLQlwYXR0cmliLT5wa3RsZW4gKz0gd2ZkaWVsZW47Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKLQotCWR1bXBfbWdudGZyYW1lMjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgaXNzdWVfcDJwX3ByZXNlbmNlX3Jlc3Aoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKmRhLCB1OCBzdGF0dXMsIHU4IGRpYWxvZ1Rva2VuKQotewotCXN0cnVjdCB4bWl0X2ZyYW1lCQkJKnBtZ250ZnJhbWU7Ci0Jc3RydWN0IHBrdF9hdHRyaWIJCQkqcGF0dHJpYjsKLQl1bnNpZ25lZCBjaGFyCQkJCQkqcGZyYW1lOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyCSpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydAkJCQkqZmN0cmw7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQl1bnNpZ25lZCBjaGFyIGNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUM7LyogUDJQIGFjdGlvbiBmcmFtZSAqLwotCXUzMglwMnBvdWkgPSBjcHVfdG9fYmUzMihQMlBPVUkpOwotCXU4CW91aV9zdWJ0eXBlID0gUDJQX1BSRVNFTkNFX1JFU1BPTlNFOwotCXU4IHAycGllWyBNQVhfUDJQX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1OCBub2FfYXR0cl9jb250ZW50WzMyXSA9IHsgMHgwMCB9OwotCXUzMiBwMnBpZWxlbiA9IDA7Ci0KLQlEQkdfODcyM0EoIlslc11cbiIsIF9fZnVuY19fKTsKLQotCWlmICgocG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpKSA9PSBOVUxMKQotCXsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHVwZGF0ZSBhdHRyaWJ1dGUgKi8KLQlwYXR0cmliID0gJnBtZ250ZnJhbWUtPmF0dHJpYjsKLQl1cGRhdGVfbWdudGZyYW1lX2F0dHJpYjIzYShwYWRhcHRlciwgcGF0dHJpYik7Ci0KLQltZW1zZXQocG1nbnRmcmFtZS0+YnVmX2FkZHIsIDAsIFdMQU5IRFJfT0ZGU0VUICsgVFhERVNDX09GRlNFVCk7Ci0KLQlwZnJhbWUgPSAodTggKikocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKLQlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKLQotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSpmY3RybCA9IDA7Ci0KLQltZW1jcHkocHdsYW5oZHItPmFkZHIxLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShwd2xhbmhkci0+YWRkcjIsIHB3ZGluZm8tPmludGVyZmFjZV9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMywgcHdkaW5mby0+aW50ZXJmYWNlX2FkZHIsIEVUSF9BTEVOKTsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKLQlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCi0JLyogQnVpbGQgUDJQIGFjdGlvbiBmcmFtZSBoZWFkZXIgKi8KLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmNhdGVnb3J5LCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgNCwgKHVuc2lnbmVkIGNoYXIgKikgJnAycG91aSwKLQkJCQkgICAgICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCAxLCAmb3VpX3N1YnR5cGUsICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCAxLCAmZGlhbG9nVG9rZW4sICZwYXR0cmliLT5wa3RsZW4pOwotCi0JLyogQWRkIFAyUCBJRSBoZWFkZXIgKi8KLQkvKglQMlAgT1VJICovCi0JcDJwaWVsZW4gPSAwOwotCXAycGllWyBwMnBpZWxlbisrIF0gPSAweDUwOwotCXAycGllWyBwMnBpZWxlbisrIF0gPSAweDZGOwotCXAycGllWyBwMnBpZWxlbisrIF0gPSAweDlBOwotCXAycGllWyBwMnBpZWxlbisrIF0gPSAweDA5OwkvKglXRkEgUDJQIHYxLjAgKi8KLQotCS8qIEFkZCBTdGF0dXMgYXR0cmlidXRlIGluIFAyUCBJRSAqLwotCXAycGllbGVuICs9IHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSgmcDJwaWVbcDJwaWVsZW5dLCBQMlBfQVRUUl9TVEFUVVMsIDEsICZzdGF0dXMpOwotCi0JLyogQWRkIE5vQSBhdHRyaWJ1dGUgaW4gUDJQIElFICovCi0Jbm9hX2F0dHJfY29udGVudFswXSA9IDB4MTsvKiBpbmRleCAqLwotCW5vYV9hdHRyX2NvbnRlbnRbMV0gPSAweDA7LyogQ1RXaW5kb3cgYW5kIE9wcFBTIFBhcmFtZXRlcnMgKi8KLQotCS8qIHRvZG86IE5vdGljZSBvZiBBYnNlbmNlIERlc2NyaXB0b3IocykgKi8KLQotCXAycGllbGVuICs9IHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSgmcDJwaWVbcDJwaWVsZW5dLCBQMlBfQVRUUl9OT0EsIDIsIG5vYV9hdHRyX2NvbnRlbnQpOwotCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCBwMnBpZWxlbiwgcDJwaWUsCi0JCQkgICAgICAgJnBhdHRyaWItPnBrdGxlbik7Ci0KLQlwYXR0cmliLT5sYXN0X3R4Y21kc3ogPSBwYXR0cmliLT5wa3RsZW47Ci0KLQlkdW1wX21nbnRmcmFtZTIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7Ci19Ci0KLXUzMiBidWlsZF9iZWFjb25fcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXU4IHAycGllWyBNQVhfUDJQX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1MTYgY2FwYWJpbGl0eSA9IDA7Ci0JdTMyIGxlbiA9IDAsIHAycGllbGVuID0gMDsKLQotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NTA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NkY7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4OUE7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyoJQWNjb3JkaW5nIHRvIHRoZSBQMlAgU3BlY2lmaWNhdGlvbiwgdGhlIGJlYWNvbiBmcmFtZSBzaG91bGQgY29udGFpbiAzIFAyUCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gUDJQIENhcGFiaWxpdHkgKi8KLQkvKgkyLiBQMlAgRGV2aWNlIElEICovCi0JLyoJMy4gTm90aWNlIG9mIEFic2VuY2UgKE5PQSkgKi8KLQotCS8qCVAyUCBDYXBhYmlsaXR5IEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCS8qCUxlbmd0aDogKi8KLQkvKglWYWx1ZTogKi8KLQkvKglEZXZpY2UgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCS8qCUJlIGFibGUgdG8gcGFydGljaXBhdGUgaW4gYWRkaXRpb25hbCBQMlAgR3JvdXBzIGFuZCAqLwotCS8qCXN1cHBvcnQgdGhlIFAyUCBJbnZpdGF0aW9uIFByb2NlZHVyZSAqLwotCS8qCUdyb3VwIENhcGFiaWxpdHkgQml0bWFwLCAxIGJ5dGUgKi8KLQljYXBhYmlsaXR5ID0gUDJQX0RFVkNBUF9JTlZJVEFUSU9OX1BST0N8UDJQX0RFVkNBUF9DTElFTlRfRElTQ09WRVJBQklMSVRZOwotCWNhcGFiaWxpdHkgfD0gICgoUDJQX0dSUENBUF9HTyB8IFAyUF9HUlBDQVBfSU5UUkFCU1MpIDw8IDgpOwotCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfUFJPVklTSU9OSU5HX0lORykpCi0JCWNhcGFiaWxpdHkgfD0gKFAyUF9HUlBDQVBfR1JPVVBfRk9STUFUSU9OPDw4KTsKLQotCWNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihjYXBhYmlsaXR5KTsKLQotCXAycGllbGVuICs9IHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSgmcDJwaWVbcDJwaWVsZW5dLCBQMlBfQVRUUl9DQVBBQklMSVRZLCAyLCAodTgqKSZjYXBhYmlsaXR5KTsKLQotCS8qICBQMlAgRGV2aWNlIElEIEFUVFIgKi8KLQlwMnBpZWxlbiArPSBydHdfc2V0X3AycF9hdHRyX2NvbnRlbnQyM2EoJnAycGllW3AycGllbGVuXSwgUDJQX0FUVFJfREVWSUNFX0lELCBFVEhfQUxFTiwgcHdkaW5mby0+ZGV2aWNlX2FkZHIpOwotCi0JLyogIE5vdGljZSBvZiBBYnNlbmNlIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCS8qCUxlbmd0aDogKi8KLQkvKglWYWx1ZTogKi8KLQotCS8qIGdvX2FkZF9ub2FfYXR0cihwd2RpbmZvKTsgKi8KLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCBwMnBpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgcDJwaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi11MzIgYnVpbGRfYmVhY29uX3dmZF9pZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1ZikKLXsKLQl1OCB3ZmRpZVsgTUFYX1dGRF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyIGxlbiA9IDAsIHdmZGllbGVuID0gMDsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHdkaW5mby0+cGFkYXB0ZXI7Ci0Jc3RydWN0IG1sbWVfcHJpdgkJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHdpZmlfZGlzcGxheV9pbmZvKglwd2ZkX2luZm8gPSBwYWRhcHRlci0+d2RpbmZvLndmZF9pbmZvOwotCi0JLyoJV0ZEIE9VSSAqLwotCXdmZGllbGVuID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg1MDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg2RjsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg5QTsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHgwQTsJLyoJV0ZBIFdGRCB2MS4wICovCi0KLQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwODEyICovCi0JLyoJQWNjb3JkaW5nIHRvIHRoZSBXRkQgU3BlY2lmaWNhdGlvbiwgdGhlIGJlYWNvbiBmcmFtZSBzaG91bGQgY29udGFpbiA0IFdGRCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gV0ZEIERldmljZSBJbmZvcm1hdGlvbiAqLwotCS8qCTIuIEFzc29jaWF0ZWQgQlNTSUQgKi8KLQkvKgkzLiBDb3VwbGVkIFNpbmsgSW5mb3JtYXRpb24gKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0KLQlpZiAoUDJQX1JPTEVfR08gPT0gcHdkaW5mby0+cm9sZSkKLQl7Ci0JCWlmIChpc19hbnlfY2xpZW50X2Fzc29jaWF0ZWQocHdkaW5mby0+cGFkYXB0ZXIpKQotCQl7Ci0JCQkvKglXRkQgcHJpbWFyeSBzaW5rICsgV2lGaSBEaXJlY3QgbW9kZSArIFdTRCAoV0ZEIFNlcnZpY2UgRGlzY292ZXJ5KSAqLwotCQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkJICAgV0ZEX0RFVklORk9fV1NELCB3ZmRpZSArIHdmZGllbGVuKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCVdGRCBwcmltYXJ5IHNpbmsgKyBhdmFpbGFibGUgZm9yIFdGRCBzZXNzaW9uICsgV2lGaSBEaXJlY3QgbW9kZSArIFdTRCAoV0ZEIFNlcnZpY2UgRGlzY292ZXJ5KSAqLwotCQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkJICAgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCB8Ci0JCQkJCSAgIFdGRF9ERVZJTkZPX1dTRCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0JCX0KLQotCX0KLQllbHNlCi0JewotCQkvKglXRkQgcHJpbWFyeSBzaW5rICsgYXZhaWxhYmxlIGZvciBXRkQgc2Vzc2lvbiArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKi8KLQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkgICBXRkRfREVWSU5GT19TRVNTSU9OX0FWQUlMIHwKLQkJCQkgICBXRkRfREVWSU5GT19XU0QsIHdmZGllICsgd2ZkaWVsZW4pOwotCX0KLQotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTI6ICovCi0JLyoJU2Vzc2lvbiBNYW5hZ2VtZW50IENvbnRyb2wgUG9ydCAqLwotCS8qCURlZmF1bHQgVENQIHBvcnQgZm9yIFJUU1AgbWVzc2FnZXMgaXMgNTU0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+cnRzcF9jdHJscG9ydCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMzogKi8KLQkvKglXRkQgRGV2aWNlIE1heGltdW0gVGhyb3VnaHB1dCAqLwotCS8qCTMwME1icHMgaXMgdGhlIG1heGltdW0gdGhyb3VnaHB1dCAqLwotCXB1dF91bmFsaWduZWRfYmUxNigzMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglBc3NvY2lhdGVkIEJTU0lEIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9BU1NPQ19CU1NJRDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBc3NvY2lhdGVkIEJTU0lEICovCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCXsKLQkJbWVtY3B5KHdmZGllICsgd2ZkaWVsZW4sICZwbWxtZXByaXYtPmFzc29jX2Jzc2lkWyAwIF0sIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KHdmZGllICsgd2ZkaWVsZW4sIDB4MDAsIEVUSF9BTEVOKTsKLQl9Ci0KLQl3ZmRpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvdXBsZWQgU2luayBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQ09VUExFRF9TSU5LX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA3LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291cGxlZCBTaW5rIFN0YXR1cyBiaXRtYXAgKi8KLQkvKglOb3QgY291cGxlZC9hdmFpbGFibGUgZm9yIENvdXBsaW5nICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0JLyogICBNQUMgQWRkci4gKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX3Byb2JlX3JlcV93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpCi17Ci0JdTggd2ZkaWVbIE1BWF9XRkRfSUVfTEVOXSA9IHsgMHgwMCB9OwotCXUzMiBsZW4gPSAwLCB3ZmRpZWxlbiA9IDA7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCBtbG1lX3ByaXYJCSpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCB3aWZpX2Rpc3BsYXlfaW5mbyoJcHdmZF9pbmZvID0gcGFkYXB0ZXItPndkaW5mby53ZmRfaW5mbzsKLQotCS8qCVdGRCBPVUkgKi8KLQl3ZmRpZWxlbiA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NTA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NkY7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4OUE7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4MEE7CS8qCVdGQSBXRkQgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDgxMiAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgV0ZEIFNwZWNpZmljYXRpb24sIHRoZSBwcm9iZSByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDQgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAqLwotCS8qCTMuIENvdXBsZWQgU2luayBJbmZvcm1hdGlvbiAqLwotCi0JLyoJV0ZEIERldmljZSBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfREVWSUNFX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUxOiAqLwotCS8qCVdGRCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KLQotCWlmICgxID09IHB3ZGluZm8tPndmZF90ZGxzX2VuYWJsZSkKLQl7Ci0JCS8qCVdGRCBwcmltYXJ5IHNpbmsgKyBhdmFpbGFibGUgZm9yIFdGRCBzZXNzaW9uICsgV2lGaSBURExTIG1vZGUgKyBXU0MgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKi8KLQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkgICBXRkRfREVWSU5GT19TRVNTSU9OX0FWQUlMIHwKLQkJCQkgICBXRkRfREVWSU5GT19XU0QgfAotCQkJCSAgIFdGRF9ERVZJTkZPX1BDX1RETFMsIHdmZGllICsgd2ZkaWVsZW4pOwotCX0KLQllbHNlCi0JewotCQkvKglXRkQgcHJpbWFyeSBzaW5rICsgYXZhaWxhYmxlIGZvciBXRkQgc2Vzc2lvbiArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0MgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKi8KLQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkgICBXRkRfREVWSU5GT19TRVNTSU9OX0FWQUlMIHwKLQkJCQkgICBXRkRfREVWSU5GT19XU0QsIHdmZGllICsgd2ZkaWVsZW4pOwotCX0KLQotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTI6ICovCi0JLyoJU2Vzc2lvbiBNYW5hZ2VtZW50IENvbnRyb2wgUG9ydCAqLwotCS8qCURlZmF1bHQgVENQIHBvcnQgZm9yIFJUU1AgbWVzc2FnZXMgaXMgNTU0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+cnRzcF9jdHJscG9ydCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMzogKi8KLQkvKglXRkQgRGV2aWNlIE1heGltdW0gVGhyb3VnaHB1dCAqLwotCS8qCTMwME1icHMgaXMgdGhlIG1heGltdW0gdGhyb3VnaHB1dCAqLwotCXB1dF91bmFsaWduZWRfYmUxNigzMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglBc3NvY2lhdGVkIEJTU0lEIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9BU1NPQ19CU1NJRDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBc3NvY2lhdGVkIEJTU0lEICovCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCXsKLQkJbWVtY3B5KHdmZGllICsgd2ZkaWVsZW4sICZwbWxtZXByaXYtPmFzc29jX2Jzc2lkWyAwIF0sIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KHdmZGllICsgd2ZkaWVsZW4sIDB4MDAsIEVUSF9BTEVOKTsKLQl9Ci0KLQl3ZmRpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvdXBsZWQgU2luayBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQ09VUExFRF9TSU5LX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA3LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291cGxlZCBTaW5rIFN0YXR1cyBiaXRtYXAgKi8KLQkvKglOb3QgY291cGxlZC9hdmFpbGFibGUgZm9yIENvdXBsaW5nICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0JLyogICBNQUMgQWRkci4gKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX3Byb2JlX3Jlc3Bfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmLCB1OCB0dW5uZWxlZCkKLXsKLQl1OCB3ZmRpZVsgTUFYX1dGRF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyIGxlbiA9IDAsIHdmZGllbGVuID0gMDsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHdkaW5mby0+cGFkYXB0ZXI7Ci0Jc3RydWN0IG1sbWVfcHJpdgkJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHdpZmlfZGlzcGxheV9pbmZvKglwd2ZkX2luZm8gPSBwYWRhcHRlci0+d2RpbmZvLndmZF9pbmZvOwotCi0JLyoJV0ZEIE9VSSAqLwotCXdmZGllbGVuID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg1MDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg2RjsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg5QTsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHgwQTsJLyoJV0ZBIFdGRCB2MS4wICovCi0KLQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwODEyICovCi0JLyoJQWNjb3JkaW5nIHRvIHRoZSBXRkQgU3BlY2lmaWNhdGlvbiwgdGhlIHByb2JlIHJlc3BvbnNlIGZyYW1lIHNob3VsZCBjb250YWluIDQgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAqLwotCS8qCTMuIENvdXBsZWQgU2luayBJbmZvcm1hdGlvbiAqLwotCS8qCTQuIFdGRCBTZXNzaW9uIEluZm9ybWF0aW9uICovCi0KLQkvKglXRkQgRGV2aWNlIEluZm9ybWF0aW9uIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9ERVZJQ0VfSU5GTzsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTE6ICovCi0JLyoJV0ZEIGRldmljZSBpbmZvcm1hdGlvbiAqLwotCS8qCVdGRCBwcmltYXJ5IHNpbmsgKyBhdmFpbGFibGUgZm9yIFdGRCBzZXNzaW9uICsgV2lGaSBEaXJlY3QgbW9kZSAqLwotCi0JaWYgKHRydWUgPT0gcHdkaW5mby0+c2Vzc2lvbl9hdmFpbGFibGUpCi0JewotCQlpZiAoUDJQX1JPTEVfR08gPT0gcHdkaW5mby0+cm9sZSkKLQkJewotCQkJaWYgKGlzX2FueV9jbGllbnRfYXNzb2NpYXRlZChwd2RpbmZvLT5wYWRhcHRlcikpCi0JCQl7Ci0JCQkJaWYgKHB3ZGluZm8tPndmZF90ZGxzX2VuYWJsZSkKLQkJCQl7Ci0JCQkJCS8qCVRETFMgbW9kZSArIFdTRCAoV0ZEIFNlcnZpY2UgRGlzY292ZXJ5KSAqLwotCQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfCBXRkRfREVWSU5GT19XU0QgfCBXRkRfREVWSU5GT19QQ19URExTIHwgV0ZEX0RFVklORk9fSERDUF9TVVBQT1JULCB3ZmRpZSArIHdmZGllbGVuKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJLyoJV2lGaSBEaXJlY3QgbW9kZSArIFdTRCAoV0ZEIFNlcnZpY2UgRGlzY292ZXJ5KSAqLwotCQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfCBXRkRfREVWSU5GT19XU0QgfCBXRkRfREVWSU5GT19IRENQX1NVUFBPUlQsIHdmZGllICsgd2ZkaWVsZW4pOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAocHdkaW5mby0+d2ZkX3RkbHNfZW5hYmxlKQotCQkJCXsKLQkJCQkJLyoJYXZhaWxhYmxlIGZvciBXRkQgc2Vzc2lvbiArIFRETFMgbW9kZSArIFdTRCAoV0ZEIFNlcnZpY2UgRGlzY292ZXJ5KSAqLwotCQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfCBXRkRfREVWSU5GT19TRVNTSU9OX0FWQUlMIHwgV0ZEX0RFVklORk9fV1NEIHwgV0ZEX0RFVklORk9fUENfVERMUyB8IFdGRF9ERVZJTkZPX0hEQ1BfU1VQUE9SVCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCS8qCWF2YWlsYWJsZSBmb3IgV0ZEIHNlc3Npb24gKyBXaUZpIERpcmVjdCBtb2RlICsgV1NEIChXRkQgU2VydmljZSBEaXNjb3ZlcnkpICovCi0JCQkJCXB1dF91bmFsaWduZWRfYmUxNihwd2ZkX2luZm8tPndmZF9kZXZpY2VfdHlwZSB8IFdGRF9ERVZJTkZPX1NFU1NJT05fQVZBSUwgfCBXRkRfREVWSU5GT19XU0QgfCBXRkRfREVWSU5GT19IRENQX1NVUFBPUlQsIHdmZGllICsgd2ZkaWVsZW4pOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChwd2RpbmZvLT53ZmRfdGRsc19lbmFibGUpCi0JCQl7Ci0JCQkJLyoJYXZhaWxhYmxlIGZvciBXRkQgc2Vzc2lvbiArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKi8KLQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfAotCQkJCQkJICAgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCB8Ci0JCQkJCQkgICBXRkRfREVWSU5GT19XU0QgfAotCQkJCQkJICAgV0ZEX0RFVklORk9fUENfVERMUyB8Ci0JCQkJCQkgICBXRkRfREVWSU5GT19IRENQX1NVUFBPUlQsCi0JCQkJCQkgICB3ZmRpZSArIHdmZGllbGVuKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQotCQkJCS8qCWF2YWlsYWJsZSBmb3IgV0ZEIHNlc3Npb24gKyBXaUZpIERpcmVjdCBtb2RlICsgV1NEIChXRkQgU2VydmljZSBEaXNjb3ZlcnkpICovCi0JCQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkJCSAgIFdGRF9ERVZJTkZPX1NFU1NJT05fQVZBSUwgfAotCQkJCQkJICAgV0ZEX0RFVklORk9fV1NEIHwKLQkJCQkJCSAgIFdGRF9ERVZJTkZPX0hEQ1BfU1VQUE9SVCwKLQkJCQkJCSAgIHdmZGllICsgd2ZkaWVsZW4pOwotCQkJfQotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCWlmIChwd2RpbmZvLT53ZmRfdGRsc19lbmFibGUpCi0JCXsKLQkJCXB1dF91bmFsaWduZWRfYmUxNihwd2ZkX2luZm8tPndmZF9kZXZpY2VfdHlwZSB8Ci0JCQkJCSAgIFdGRF9ERVZJTkZPX1dTRCB8Ci0JCQkJCSAgIFdGRF9ERVZJTkZPX1BDX1RETFMgfAotCQkJCQkgICBXRkRfREVWSU5GT19IRENQX1NVUFBPUlQsCi0JCQkJCSAgIHdmZGllICsgd2ZkaWVsZW4pOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCQkJICAgV0ZEX0RFVklORk9fV1NEIHwKLQkJCQkJICAgV0ZEX0RFVklORk9fSERDUF9TVVBQT1JULAotCQkJCQkgICB3ZmRpZSArIHdmZGllbGVuKTsKLQkJfQotCi0JfQotCi0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMjogKi8KLQkvKglTZXNzaW9uIE1hbmFnZW1lbnQgQ29udHJvbCBQb3J0ICovCi0JLyoJRGVmYXVsdCBUQ1AgcG9ydCBmb3IgUlRTUCBtZXNzYWdlcyBpcyA1NTQgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT5ydHNwX2N0cmxwb3J0LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUzOiAqLwotCS8qCVdGRCBEZXZpY2UgTWF4aW11bSBUaHJvdWdocHV0ICovCi0JLyoJMzAwTWJwcyBpcyB0aGUgbWF4aW11bSB0aHJvdWdocHV0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDMwMCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCUFzc29jaWF0ZWQgQlNTSUQgQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0FTU09DX0JTU0lEOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUFzc29jaWF0ZWQgQlNTSUQgKi8KLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpCi0JewotCQltZW1jcHkod2ZkaWUgKyB3ZmRpZWxlbiwgJnBtbG1lcHJpdi0+YXNzb2NfYnNzaWRbIDAgXSwgRVRIX0FMRU4pOwotCX0KLQllbHNlCi0JewotCQltZW1zZXQod2ZkaWUgKyB3ZmRpZWxlbiwgMHgwMCwgRVRIX0FMRU4pOwotCX0KLQotCXdmZGllbGVuICs9IEVUSF9BTEVOOwotCi0JLyoJQ291cGxlZCBTaW5rIEluZm9ybWF0aW9uIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9DT1VQTEVEX1NJTktfSU5GTzsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDcsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglDb3VwbGVkIFNpbmsgU3RhdHVzIGJpdG1hcCAqLwotCS8qCU5vdCBjb3VwbGVkL2F2YWlsYWJsZSBmb3IgQ291cGxpbmcgKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQkvKiAgIE1BQyBBZGRyLiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCi0JaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pKQotCXsKLQkJLyoJV0ZEIFNlc3Npb24gSW5mb3JtYXRpb24gQVRUUiAqLwotCQkvKglUeXBlOiAqLwotCQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfU0VTU0lPTl9JTkZPOwotCi0JCS8qCUxlbmd0aDogKi8KLQkJLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwMCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0JCXdmZGllbGVuICs9IDI7Ci0KLQkJLyoJVG9kbzogdG8gYWRkIHRoZSBsaXN0IG9mIFdGRCBkZXZpY2UgaW5mbyBkZXNjcmlwdG9yIGluIFdGRCBncm91cC4gKi8KLQotCX0KLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX2Fzc29jX3JlcV93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpCi17Ci0JdTggd2ZkaWVbIE1BWF9XRkRfSUVfTEVOXSA9IHsgMHgwMCB9OwotCXUzMiBsZW4gPSAwLCB3ZmRpZWxlbiA9IDA7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyCQkJCQkqcGFkYXB0ZXIgPSBOVUxMOwotCXN0cnVjdCBtbG1lX3ByaXYJCQkqcG1sbWVwcml2ID0gTlVMTDsKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8JCSpwd2ZkX2luZm8gPSBOVUxMOwotCi0JLyoJV0ZEIE9VSSAqLwotCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfTk9ORSkgfHwgcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0lETEUpKQotCXsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcGFkYXB0ZXIgPSBwd2RpbmZvLT5wYWRhcHRlcjsKLQlwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXB3ZmRfaW5mbyA9IHBhZGFwdGVyLT53ZGluZm8ud2ZkX2luZm87Ci0KLQl3ZmRpZWxlbiA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NTA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NkY7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4OUE7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4MEE7CS8qCVdGQSBXRkQgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDgxMiAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgV0ZEIFNwZWNpZmljYXRpb24sIHRoZSBwcm9iZSByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDQgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAqLwotCS8qCTMuIENvdXBsZWQgU2luayBJbmZvcm1hdGlvbiAqLwotCi0JLyoJV0ZEIERldmljZSBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfREVWSUNFX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUxOiAqLwotCS8qCVdGRCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KLQkvKglXRkQgcHJpbWFyeSBzaW5rICsgYXZhaWxhYmxlIGZvciBXRkQgc2Vzc2lvbiArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfAotCQkJICAgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCB8Ci0JCQkgICBXRkRfREVWSU5GT19XU0QsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTI6ICovCi0JLyoJU2Vzc2lvbiBNYW5hZ2VtZW50IENvbnRyb2wgUG9ydCAqLwotCS8qCURlZmF1bHQgVENQIHBvcnQgZm9yIFJUU1AgbWVzc2FnZXMgaXMgNTU0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+cnRzcF9jdHJscG9ydCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMzogKi8KLQkvKglXRkQgRGV2aWNlIE1heGltdW0gVGhyb3VnaHB1dCAqLwotCS8qCTMwME1icHMgaXMgdGhlIG1heGltdW0gdGhyb3VnaHB1dCAqLwotCXB1dF91bmFsaWduZWRfYmUxNigzMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglBc3NvY2lhdGVkIEJTU0lEIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9BU1NPQ19CU1NJRDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBc3NvY2lhdGVkIEJTU0lEICovCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCXsKLQkJbWVtY3B5KHdmZGllICsgd2ZkaWVsZW4sICZwbWxtZXByaXYtPmFzc29jX2Jzc2lkWyAwIF0sIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KHdmZGllICsgd2ZkaWVsZW4sIDB4MDAsIEVUSF9BTEVOKTsKLQl9Ci0KLQl3ZmRpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvdXBsZWQgU2luayBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQ09VUExFRF9TSU5LX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA3LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291cGxlZCBTaW5rIFN0YXR1cyBiaXRtYXAgKi8KLQkvKglOb3QgY291cGxlZC9hdmFpbGFibGUgZm9yIENvdXBsaW5nICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0JLyogICBNQUMgQWRkci4gKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX2Fzc29jX3Jlc3Bfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXU4IHdmZGllWyBNQVhfV0ZEX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1MzIgbGVuID0gMCwgd2ZkaWVsZW4gPSAwOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwd2RpbmZvLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2CQkqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8qCXB3ZmRfaW5mbyA9IHBhZGFwdGVyLT53ZGluZm8ud2ZkX2luZm87Ci0KLQkvKglXRkQgT1VJICovCi0Jd2ZkaWVsZW4gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDUwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDZGOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDlBOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDBBOwkvKglXRkEgV0ZEIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTA4MTIgKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFdGRCBTcGVjaWZpY2F0aW9uLCB0aGUgcHJvYmUgcmVxdWVzdCBmcmFtZSBzaG91bGQgY29udGFpbiA0IFdGRCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gV0ZEIERldmljZSBJbmZvcm1hdGlvbiAqLwotCS8qCTIuIEFzc29jaWF0ZWQgQlNTSUQgKi8KLQkvKgkzLiBDb3VwbGVkIFNpbmsgSW5mb3JtYXRpb24gKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIGF2YWlsYWJsZSBmb3IgV0ZEIHNlc3Npb24gKyBXaUZpIERpcmVjdCBtb2RlICsgV1NEIChXRkQgU2VydmljZSBEaXNjb3ZlcnkpICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCSAgIFdGRF9ERVZJTkZPX1NFU1NJT05fQVZBSUwgfAotCQkJICAgV0ZEX0RFVklORk9fV1NELCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUyOiAqLwotCS8qCVNlc3Npb24gTWFuYWdlbWVudCBDb250cm9sIFBvcnQgKi8KLQkvKglEZWZhdWx0IFRDUCBwb3J0IGZvciBSVFNQIG1lc3NhZ2VzIGlzIDU1NCAqLwotCXB1dF91bmFsaWduZWRfYmUxNihwd2ZkX2luZm8tPnJ0c3BfY3RybHBvcnQsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTM6ICovCi0JLyoJV0ZEIERldmljZSBNYXhpbXVtIFRocm91Z2hwdXQgKi8KLQkvKgkzMDBNYnBzIGlzIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMzAwLCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQVNTT0NfQlNTSUQ7Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCAqLwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQl7Ci0JCW1lbWNweSh3ZmRpZSArIHdmZGllbGVuLCAmcG1sbWVwcml2LT5hc3NvY19ic3NpZFsgMCBdLCBFVEhfQUxFTik7Ci0JfQotCWVsc2UKLQl7Ci0JCW1lbXNldCh3ZmRpZSArIHdmZGllbGVuLCAweDAwLCBFVEhfQUxFTik7Ci0JfQotCi0Jd2ZkaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkvKglDb3VwbGVkIFNpbmsgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0NPVVBMRURfU0lOS19JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNywgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUNvdXBsZWQgU2luayBTdGF0dXMgYml0bWFwICovCi0JLyoJTm90IGNvdXBsZWQvYXZhaWxhYmxlIGZvciBDb3VwbGluZyAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCS8qICAgTUFDIEFkZHIuICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0KLQlwYnVmID0gcnR3X3NldF9pZTIzYShwYnVmLCBfVkVORE9SX1NQRUNJRklDX0lFXywgd2ZkaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHdmZGllLCAmbGVuKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXUzMiBidWlsZF9uZWdvX3JlcV93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpCi17Ci0JdTggd2ZkaWVbIE1BWF9XRkRfSUVfTEVOXSA9IHsgMHgwMCB9OwotCXUzMiBsZW4gPSAwLCB3ZmRpZWxlbiA9IDA7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCBtbG1lX3ByaXYJCSpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCB3aWZpX2Rpc3BsYXlfaW5mbyoJcHdmZF9pbmZvID0gcGFkYXB0ZXItPndkaW5mby53ZmRfaW5mbzsKLQotCS8qCVdGRCBPVUkgKi8KLQl3ZmRpZWxlbiA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NTA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NkY7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4OUE7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4MEE7CS8qCVdGQSBXRkQgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDgyNSAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgV0ZEIFNwZWNpZmljYXRpb24sIHRoZSBuZWdvdGlhdGlvbiByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAoT3B0aW9uYWwpICovCi0JLyoJMy4gTG9jYWwgSVAgQWRyZXNzIChPcHRpb25hbCkgKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKyBXRkQgU2Vzc2lvbiBBdmFpbGFibGUgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfAotCQkJICAgV0ZEX0RFVklORk9fV1NEIHwgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCwKLQkJCSAgIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTI6ICovCi0JLyoJU2Vzc2lvbiBNYW5hZ2VtZW50IENvbnRyb2wgUG9ydCAqLwotCS8qCURlZmF1bHQgVENQIHBvcnQgZm9yIFJUU1AgbWVzc2FnZXMgaXMgNTU0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+cnRzcF9jdHJscG9ydCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMzogKi8KLQkvKglXRkQgRGV2aWNlIE1heGltdW0gVGhyb3VnaHB1dCAqLwotCS8qCTMwME1icHMgaXMgdGhlIG1heGltdW0gdGhyb3VnaHB1dCAqLwotCXB1dF91bmFsaWduZWRfYmUxNigzMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglBc3NvY2lhdGVkIEJTU0lEIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9BU1NPQ19CU1NJRDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBc3NvY2lhdGVkIEJTU0lEICovCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCXsKLQkJbWVtY3B5KHdmZGllICsgd2ZkaWVsZW4sICZwbWxtZXByaXYtPmFzc29jX2Jzc2lkWyAwIF0sIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KHdmZGllICsgd2ZkaWVsZW4sIDB4MDAsIEVUSF9BTEVOKTsKLQl9Ci0KLQl3ZmRpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvdXBsZWQgU2luayBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQ09VUExFRF9TSU5LX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA3LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291cGxlZCBTaW5rIFN0YXR1cyBiaXRtYXAgKi8KLQkvKglOb3QgY291cGxlZC9hdmFpbGFibGUgZm9yIENvdXBsaW5nICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0JLyogICBNQUMgQWRkci4gKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX25lZ29fcmVzcF93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpCi17Ci0JdTggd2ZkaWVbIE1BWF9XRkRfSUVfTEVOXSA9IHsgMHgwMCB9OwotCXUzMiBsZW4gPSAwLCB3ZmRpZWxlbiA9IDA7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCBtbG1lX3ByaXYJCSpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCB3aWZpX2Rpc3BsYXlfaW5mbyoJcHdmZF9pbmZvID0gcGFkYXB0ZXItPndkaW5mby53ZmRfaW5mbzsKLQotCS8qCVdGRCBPVUkgKi8KLQl3ZmRpZWxlbiA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NTA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NkY7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4OUE7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4MEE7CS8qCVdGQSBXRkQgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDgyNSAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgV0ZEIFNwZWNpZmljYXRpb24sIHRoZSBuZWdvdGlhdGlvbiByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAoT3B0aW9uYWwpICovCi0JLyoJMy4gTG9jYWwgSVAgQWRyZXNzIChPcHRpb25hbCkgKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKyBXRkQgU2Vzc2lvbiBBdmFpbGFibGUgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfAotCQkJICAgV0ZEX0RFVklORk9fV1NEIHwgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCwKLQkJCSAgIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTI6ICovCi0JLyoJU2Vzc2lvbiBNYW5hZ2VtZW50IENvbnRyb2wgUG9ydCAqLwotCS8qCURlZmF1bHQgVENQIHBvcnQgZm9yIFJUU1AgbWVzc2FnZXMgaXMgNTU0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+cnRzcF9jdHJscG9ydCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMzogKi8KLQkvKglXRkQgRGV2aWNlIE1heGltdW0gVGhyb3VnaHB1dCAqLwotCS8qCTMwME1icHMgaXMgdGhlIG1heGltdW0gdGhyb3VnaHB1dCAqLwotCXB1dF91bmFsaWduZWRfYmUxNigzMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglBc3NvY2lhdGVkIEJTU0lEIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9BU1NPQ19CU1NJRDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBc3NvY2lhdGVkIEJTU0lEICovCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCXsKLQkJbWVtY3B5KHdmZGllICsgd2ZkaWVsZW4sICZwbWxtZXByaXYtPmFzc29jX2Jzc2lkWyAwIF0sIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KHdmZGllICsgd2ZkaWVsZW4sIDB4MDAsIEVUSF9BTEVOKTsKLQl9Ci0KLQl3ZmRpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvdXBsZWQgU2luayBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQ09VUExFRF9TSU5LX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA3LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291cGxlZCBTaW5rIFN0YXR1cyBiaXRtYXAgKi8KLQkvKglOb3QgY291cGxlZC9hdmFpbGFibGUgZm9yIENvdXBsaW5nICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0JLyogICBNQUMgQWRkci4gKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX25lZ29fY29uZmlybV93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpCi17Ci0JdTggd2ZkaWVbIE1BWF9XRkRfSUVfTEVOXSA9IHsgMHgwMCB9OwotCXUzMiBsZW4gPSAwLCB3ZmRpZWxlbiA9IDA7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCBtbG1lX3ByaXYJCSpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCB3aWZpX2Rpc3BsYXlfaW5mbyoJcHdmZF9pbmZvID0gcGFkYXB0ZXItPndkaW5mby53ZmRfaW5mbzsKLQotCS8qCVdGRCBPVUkgKi8KLQl3ZmRpZWxlbiA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NTA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4NkY7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4OUE7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDB4MEE7CS8qCVdGQSBXRkQgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDgyNSAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgV0ZEIFNwZWNpZmljYXRpb24sIHRoZSBuZWdvdGlhdGlvbiByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAoT3B0aW9uYWwpICovCi0JLyoJMy4gTG9jYWwgSVAgQWRyZXNzIChPcHRpb25hbCkgKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKyBXRkQgU2Vzc2lvbiBBdmFpbGFibGUgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfCBXRkRfREVWSU5GT19XU0QgfAotCQkJICAgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMjogKi8KLQkvKglTZXNzaW9uIE1hbmFnZW1lbnQgQ29udHJvbCBQb3J0ICovCi0JLyoJRGVmYXVsdCBUQ1AgcG9ydCBmb3IgUlRTUCBtZXNzYWdlcyBpcyA1NTQgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT5ydHNwX2N0cmxwb3J0LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUzOiAqLwotCS8qCVdGRCBEZXZpY2UgTWF4aW11bSBUaHJvdWdocHV0ICovCi0JLyoJMzAwTWJwcyBpcyB0aGUgbWF4aW11bSB0aHJvdWdocHV0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDMwMCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCUFzc29jaWF0ZWQgQlNTSUQgQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0FTU09DX0JTU0lEOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUFzc29jaWF0ZWQgQlNTSUQgKi8KLQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUpCi0JewotCQltZW1jcHkod2ZkaWUgKyB3ZmRpZWxlbiwgJnBtbG1lcHJpdi0+YXNzb2NfYnNzaWRbIDAgXSwgRVRIX0FMRU4pOwotCX0KLQllbHNlCi0JewotCQltZW1zZXQod2ZkaWUgKyB3ZmRpZWxlbiwgMHgwMCwgRVRIX0FMRU4pOwotCX0KLQotCXdmZGllbGVuICs9IEVUSF9BTEVOOwotCi0JLyoJQ291cGxlZCBTaW5rIEluZm9ybWF0aW9uIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9DT1VQTEVEX1NJTktfSU5GTzsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDcsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglDb3VwbGVkIFNpbmsgU3RhdHVzIGJpdG1hcCAqLwotCS8qCU5vdCBjb3VwbGVkL2F2YWlsYWJsZSBmb3IgQ291cGxpbmcgKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQkvKiAgIE1BQyBBZGRyLiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCi0JcGJ1ZiA9IHJ0d19zZXRfaWUyM2EocGJ1ZiwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHdmZGllbGVuLCAodW5zaWduZWQgY2hhciAqKSB3ZmRpZSwgJmxlbik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi11MzIgYnVpbGRfaW52aXRhdGlvbl9yZXFfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXU4IHdmZGllWyBNQVhfV0ZEX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1MzIgbGVuID0gMCwgd2ZkaWVsZW4gPSAwOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwd2RpbmZvLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2CQkqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8qCXB3ZmRfaW5mbyA9IHBhZGFwdGVyLT53ZGluZm8ud2ZkX2luZm87Ci0KLQkvKglXRkQgT1VJICovCi0Jd2ZkaWVsZW4gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDUwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDZGOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDlBOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDBBOwkvKglXRkEgV0ZEIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTA4MjUgKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFdGRCBTcGVjaWZpY2F0aW9uLCB0aGUgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAoT3B0aW9uYWwpICovCi0JLyoJMy4gTG9jYWwgSVAgQWRyZXNzIChPcHRpb25hbCkgKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIGF2YWlsYWJsZSBmb3IgV0ZEIHNlc3Npb24gKyBXaUZpIERpcmVjdCBtb2RlICsgV1NEIChXRkQgU2VydmljZSBEaXNjb3ZlcnkpICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCSAgIFdGRF9ERVZJTkZPX1NFU1NJT05fQVZBSUwgfCBXRkRfREVWSU5GT19XU0QsCi0JCQkgICB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUyOiAqLwotCS8qCVNlc3Npb24gTWFuYWdlbWVudCBDb250cm9sIFBvcnQgKi8KLQkvKglEZWZhdWx0IFRDUCBwb3J0IGZvciBSVFNQIG1lc3NhZ2VzIGlzIDU1NCAqLwotCXB1dF91bmFsaWduZWRfYmUxNihwd2ZkX2luZm8tPnJ0c3BfY3RybHBvcnQsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTM6ICovCi0JLyoJV0ZEIERldmljZSBNYXhpbXVtIFRocm91Z2hwdXQgKi8KLQkvKgkzMDBNYnBzIGlzIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMzAwLCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQVNTT0NfQlNTSUQ7Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCAqLwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQl7Ci0JCW1lbWNweSh3ZmRpZSArIHdmZGllbGVuLCAmcG1sbWVwcml2LT5hc3NvY19ic3NpZFsgMCBdLCBFVEhfQUxFTik7Ci0JfQotCWVsc2UKLQl7Ci0JCW1lbXNldCh3ZmRpZSArIHdmZGllbGVuLCAweDAwLCBFVEhfQUxFTik7Ci0JfQotCi0Jd2ZkaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkvKglDb3VwbGVkIFNpbmsgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0NPVVBMRURfU0lOS19JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNywgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUNvdXBsZWQgU2luayBTdGF0dXMgYml0bWFwICovCi0JLyoJTm90IGNvdXBsZWQvYXZhaWxhYmxlIGZvciBDb3VwbGluZyAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCS8qICAgTUFDIEFkZHIuICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0KLQlpZiAoUDJQX1JPTEVfR08gPT0gcHdkaW5mby0+cm9sZSkKLQl7Ci0JCS8qCVdGRCBTZXNzaW9uIEluZm9ybWF0aW9uIEFUVFIgKi8KLQkJLyoJVHlwZTogKi8KLQkJd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX1NFU1NJT05fSU5GTzsKLQotCQkvKglMZW5ndGg6ICovCi0JCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCQl3ZmRpZWxlbiArPSAyOwotCi0JCS8qCVRvZG86IHRvIGFkZCB0aGUgbGlzdCBvZiBXRkQgZGV2aWNlIGluZm8gZGVzY3JpcHRvciBpbiBXRkQgZ3JvdXAuICovCi0KLQl9Ci0KLQlwYnVmID0gcnR3X3NldF9pZTIzYShwYnVmLCBfVkVORE9SX1NQRUNJRklDX0lFXywgd2ZkaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHdmZGllLCAmbGVuKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXUzMiBidWlsZF9pbnZpdGF0aW9uX3Jlc3Bfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXU4IHdmZGllWyBNQVhfV0ZEX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1MzIgbGVuID0gMCwgd2ZkaWVsZW4gPSAwOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwd2RpbmZvLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2CQkqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8qCXB3ZmRfaW5mbyA9IHBhZGFwdGVyLT53ZGluZm8ud2ZkX2luZm87Ci0KLQkvKglXRkQgT1VJICovCi0Jd2ZkaWVsZW4gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDUwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDZGOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDlBOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDBBOwkvKglXRkEgV0ZEIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTA4MjUgKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFdGRCBTcGVjaWZpY2F0aW9uLCB0aGUgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAoT3B0aW9uYWwpICovCi0JLyoJMy4gTG9jYWwgSVAgQWRyZXNzIChPcHRpb25hbCkgKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIGF2YWlsYWJsZSBmb3IgV0ZEIHNlc3Npb24gKyBXaUZpIERpcmVjdCBtb2RlICsgV1NEIChXRkQgU2VydmljZSBEaXNjb3ZlcnkpICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCSAgIFdGRF9ERVZJTkZPX1NFU1NJT05fQVZBSUwgfCBXRkRfREVWSU5GT19XU0QsCi0JCQkgICB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUyOiAqLwotCS8qCVNlc3Npb24gTWFuYWdlbWVudCBDb250cm9sIFBvcnQgKi8KLQkvKglEZWZhdWx0IFRDUCBwb3J0IGZvciBSVFNQIG1lc3NhZ2VzIGlzIDU1NCAqLwotCXB1dF91bmFsaWduZWRfYmUxNihwd2ZkX2luZm8tPnJ0c3BfY3RybHBvcnQsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTM6ICovCi0JLyoJV0ZEIERldmljZSBNYXhpbXVtIFRocm91Z2hwdXQgKi8KLQkvKgkzMDBNYnBzIGlzIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMzAwLCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQVNTT0NfQlNTSUQ7Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCAqLwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQl7Ci0JCW1lbWNweSh3ZmRpZSArIHdmZGllbGVuLCAmcG1sbWVwcml2LT5hc3NvY19ic3NpZFsgMCBdLCBFVEhfQUxFTik7Ci0JfQotCWVsc2UKLQl7Ci0JCW1lbXNldCh3ZmRpZSArIHdmZGllbGVuLCAweDAwLCBFVEhfQUxFTik7Ci0JfQotCi0Jd2ZkaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkvKglDb3VwbGVkIFNpbmsgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0NPVVBMRURfU0lOS19JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNywgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUNvdXBsZWQgU2luayBTdGF0dXMgYml0bWFwICovCi0JLyoJTm90IGNvdXBsZWQvYXZhaWxhYmxlIGZvciBDb3VwbGluZyAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCS8qICAgTUFDIEFkZHIuICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0KLQlpZiAoUDJQX1JPTEVfR08gPT0gcHdkaW5mby0+cm9sZSkKLQl7Ci0JCS8qCVdGRCBTZXNzaW9uIEluZm9ybWF0aW9uIEFUVFIgKi8KLQkJLyoJVHlwZTogKi8KLQkJd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX1NFU1NJT05fSU5GTzsKLQotCQkvKglMZW5ndGg6ICovCi0JCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCQl3ZmRpZWxlbiArPSAyOwotCi0JCS8qCVRvZG86IHRvIGFkZCB0aGUgbGlzdCBvZiBXRkQgZGV2aWNlIGluZm8gZGVzY3JpcHRvciBpbiBXRkQgZ3JvdXAuICovCi0KLQl9Ci0KLQlwYnVmID0gcnR3X3NldF9pZTIzYShwYnVmLCBfVkVORE9SX1NQRUNJRklDX0lFXywgd2ZkaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHdmZGllLCAmbGVuKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXUzMiBidWlsZF9wcm92ZGlzY19yZXFfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXU4IHdmZGllWyBNQVhfV0ZEX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1MzIgbGVuID0gMCwgd2ZkaWVsZW4gPSAwOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwd2RpbmZvLT5wYWRhcHRlcjsKLQlzdHJ1Y3QgbWxtZV9wcml2CQkqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8qCXB3ZmRfaW5mbyA9IHBhZGFwdGVyLT53ZGluZm8ud2ZkX2luZm87Ci0KLQkvKglXRkQgT1VJICovCi0Jd2ZkaWVsZW4gPSAwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDUwOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDZGOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDlBOwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAweDBBOwkvKglXRkEgV0ZEIHYxLjAgKi8KLQotCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMTA4MjUgKi8KLQkvKglBY2NvcmRpbmcgdG8gdGhlIFdGRCBTcGVjaWZpY2F0aW9uLCB0aGUgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgV0ZEIGF0dHJpYnV0ZXMgKi8KLQkvKgkxLiBXRkQgRGV2aWNlIEluZm9ybWF0aW9uICovCi0JLyoJMi4gQXNzb2NpYXRlZCBCU1NJRCAoT3B0aW9uYWwpICovCi0JLyoJMy4gTG9jYWwgSVAgQWRyZXNzIChPcHRpb25hbCkgKi8KLQotCS8qCVdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0RFVklDRV9JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNiwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMTogKi8KLQkvKglXRkQgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyoJV0ZEIHByaW1hcnkgc2luayArIGF2YWlsYWJsZSBmb3IgV0ZEIHNlc3Npb24gKyBXaUZpIERpcmVjdCBtb2RlICsgV1NEIChXRkQgU2VydmljZSBEaXNjb3ZlcnkpICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+d2ZkX2RldmljZV90eXBlIHwKLQkJCSAgIFdGRF9ERVZJTkZPX1NFU1NJT05fQVZBSUwgfCBXRkRfREVWSU5GT19XU0QsCi0JCQkgICB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUyOiAqLwotCS8qCVNlc3Npb24gTWFuYWdlbWVudCBDb250cm9sIFBvcnQgKi8KLQkvKglEZWZhdWx0IFRDUCBwb3J0IGZvciBSVFNQIG1lc3NhZ2VzIGlzIDU1NCAqLwotCXB1dF91bmFsaWduZWRfYmUxNihwd2ZkX2luZm8tPnJ0c3BfY3RybHBvcnQsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTM6ICovCi0JLyoJV0ZEIERldmljZSBNYXhpbXVtIFRocm91Z2hwdXQgKi8KLQkvKgkzMDBNYnBzIGlzIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMzAwLCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQVNTT0NfQlNTSUQ7Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQXNzb2NpYXRlZCBCU1NJRCAqLwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQl7Ci0JCW1lbWNweSh3ZmRpZSArIHdmZGllbGVuLCAmcG1sbWVwcml2LT5hc3NvY19ic3NpZFsgMCBdLCBFVEhfQUxFTik7Ci0JfQotCWVsc2UKLQl7Ci0JCW1lbXNldCh3ZmRpZSArIHdmZGllbGVuLCAweDAwLCBFVEhfQUxFTik7Ci0JfQotCi0Jd2ZkaWVsZW4gKz0gRVRIX0FMRU47Ci0KLQkvKglDb3VwbGVkIFNpbmsgSW5mb3JtYXRpb24gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IFdGRF9BVFRSX0NPVVBMRURfU0lOS19JTkZPOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qCU5vdGU6IEluIHRoZSBXRkQgc3BlY2lmaWNhdGlvbiwgdGhlIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGlzIDIuICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KDB4MDAwNywgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCS8qCUNvdXBsZWQgU2luayBTdGF0dXMgYml0bWFwICovCi0JLyoJTm90IGNvdXBsZWQvYXZhaWxhYmxlIGZvciBDb3VwbGluZyAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSAwOwotCS8qICAgTUFDIEFkZHIuICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0KLQlwYnVmID0gcnR3X3NldF9pZTIzYShwYnVmLCBfVkVORE9SX1NQRUNJRklDX0lFXywgd2ZkaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHdmZGllLCAmbGVuKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXUzMiBidWlsZF9wcm92ZGlzY19yZXNwX3dmZF9pZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1ZikKLXsKLQl1OCB3ZmRpZVsgTUFYX1dGRF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyIGxlbiA9IDAsIHdmZGllbGVuID0gMDsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHdkaW5mby0+cGFkYXB0ZXI7Ci0Jc3RydWN0IG1sbWVfcHJpdgkJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHdpZmlfZGlzcGxheV9pbmZvKglwd2ZkX2luZm8gPSBwYWRhcHRlci0+d2RpbmZvLndmZF9pbmZvOwotCi0JLyoJV0ZEIE9VSSAqLwotCXdmZGllbGVuID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg1MDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg2RjsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHg5QTsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMHgwQTsJLyoJV0ZBIFdGRCB2MS4wICovCi0KLQkvKglDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwODI1ICovCi0JLyoJQWNjb3JkaW5nIHRvIHRoZSBXRkQgU3BlY2lmaWNhdGlvbiwgdGhlIHByb3Zpc2lvbiBkaXNjb3ZlcnkgcmVzcG9uc2UgZnJhbWUgc2hvdWxkIGNvbnRhaW4gMyBXRkQgYXR0cmlidXRlcyAqLwotCS8qCTEuIFdGRCBEZXZpY2UgSW5mb3JtYXRpb24gKi8KLQkvKgkyLiBBc3NvY2lhdGVkIEJTU0lEIChPcHRpb25hbCkgKi8KLQkvKgkzLiBMb2NhbCBJUCBBZHJlc3MgKE9wdGlvbmFsKSAqLwotCi0JLyoJV0ZEIERldmljZSBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfREVWSUNFX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA2LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWUxOiAqLwotCS8qCVdGRCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KLQkvKglXRkQgcHJpbWFyeSBzaW5rICsgYXZhaWxhYmxlIGZvciBXRkQgc2Vzc2lvbiArIFdpRmkgRGlyZWN0IG1vZGUgKyBXU0QgKFdGRCBTZXJ2aWNlIERpc2NvdmVyeSkgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgfAotCQkJICAgV0ZEX0RFVklORk9fU0VTU0lPTl9BVkFJTCB8IFdGRF9ERVZJTkZPX1dTRCwKLQkJCSAgIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTI6ICovCi0JLyoJU2Vzc2lvbiBNYW5hZ2VtZW50IENvbnRyb2wgUG9ydCAqLwotCS8qCURlZmF1bHQgVENQIHBvcnQgZm9yIFJUU1AgbWVzc2FnZXMgaXMgNTU0ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZmRfaW5mby0+cnRzcF9jdHJscG9ydCwgd2ZkaWUgKyB3ZmRpZWxlbik7Ci0Jd2ZkaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlMzogKi8KLQkvKglXRkQgRGV2aWNlIE1heGltdW0gVGhyb3VnaHB1dCAqLwotCS8qCTMwME1icHMgaXMgdGhlIG1heGltdW0gdGhyb3VnaHB1dCAqLwotCXB1dF91bmFsaWduZWRfYmUxNigzMDAsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglBc3NvY2lhdGVkIEJTU0lEIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXdmZGllWyB3ZmRpZWxlbisrIF0gPSBXRkRfQVRUUl9BU1NPQ19CU1NJRDsKLQotCS8qCUxlbmd0aDogKi8KLQkvKglOb3RlOiBJbiB0aGUgV0ZEIHNwZWNpZmljYXRpb24sIHRoZSBzaXplIG9mIGxlbmd0aCBmaWVsZCBpcyAyLiAqLwotCXB1dF91bmFsaWduZWRfYmUxNigweDAwMDYsIHdmZGllICsgd2ZkaWVsZW4pOwotCXdmZGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglBc3NvY2lhdGVkIEJTU0lEICovCi0JaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSA9PSB0cnVlKQotCXsKLQkJbWVtY3B5KHdmZGllICsgd2ZkaWVsZW4sICZwbWxtZXByaXYtPmFzc29jX2Jzc2lkWyAwIF0sIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KHdmZGllICsgd2ZkaWVsZW4sIDB4MDAsIEVUSF9BTEVOKTsKLQl9Ci0KLQl3ZmRpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvdXBsZWQgU2luayBJbmZvcm1hdGlvbiBBVFRSICovCi0JLyoJVHlwZTogKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gV0ZEX0FUVFJfQ09VUExFRF9TSU5LX0lORk87Ci0KLQkvKglMZW5ndGg6ICovCi0JLyoJTm90ZTogSW4gdGhlIFdGRCBzcGVjaWZpY2F0aW9uLCB0aGUgc2l6ZSBvZiBsZW5ndGggZmllbGQgaXMgMi4gKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoMHgwMDA3LCB3ZmRpZSArIHdmZGllbGVuKTsKLQl3ZmRpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQ291cGxlZCBTaW5rIFN0YXR1cyBiaXRtYXAgKi8KLQkvKglOb3QgY291cGxlZC9hdmFpbGFibGUgZm9yIENvdXBsaW5nICovCi0Jd2ZkaWVbIHdmZGllbGVuKysgXSA9IDA7Ci0JLyogICBNQUMgQWRkci4gKi8KLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQl3ZmRpZVsgd2ZkaWVsZW4rKyBdID0gMDsKLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3ZmRpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgd2ZkaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLXUzMiBidWlsZF9wcm9iZV9yZXNwX3AycF9pZTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1ZikKLXsKLQl1OCBwMnBpZVsgTUFYX1AyUF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyIGxlbiA9IDAsIHAycGllbGVuID0gMDsKLQotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NTA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NkY7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4OUE7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDEwMDkwNyAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZSBwcm9iZSByZXNwb25zZSBmcmFtZSBzaG91bGQgY29udGFpbiA1IFAyUCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gUDJQIENhcGFiaWxpdHkgKi8KLQkvKgkyLiBFeHRlbmRlZCBMaXN0ZW4gVGltaW5nICovCi0JLyoJMy4gTm90aWNlIG9mIEFic2VuY2UgKE5PQSkJKE9ubHkgR08gbmVlZHMgdGhpcykgKi8KLQkvKgk0LiBEZXZpY2UgSW5mbyAqLwotCS8qCTUuIEdyb3VwIEluZm8JKE9ubHkgR08gbmVlZCB0aGlzKSAqLwotCi0JLyoJUDJQIENhcGFiaWxpdHkgQVRUUiAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbIHAycGllbGVuKysgXSA9IFAyUF9BVFRSX0NBUEFCSUxJVFk7Ci0KLQkvKglMZW5ndGg6ICovCi0JLyogdTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2xlMTYoMHgwMDAyLCBwMnBpZSArIHAycGllbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJRGV2aWNlIENhcGFiaWxpdHkgQml0bWFwLCAxIGJ5dGUgKi8KLQlwMnBpZVsgcDJwaWVsZW4rKyBdID0gRE1QX1AyUF9ERVZDQVBfU1VQUE9SVDsKLQotCS8qCUdyb3VwIENhcGFiaWxpdHkgQml0bWFwLCAxIGJ5dGUgKi8KLQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpCi0JewotCQlwMnBpZVsgcDJwaWVsZW4gXSA9IChQMlBfR1JQQ0FQX0dPIHwgUDJQX0dSUENBUF9JTlRSQUJTUyk7Ci0KLQkJaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9QUk9WSVNJT05JTkdfSU5HKSkKLQkJCXAycGllWyBwMnBpZWxlbiBdIHw9IFAyUF9HUlBDQVBfR1JPVVBfRk9STUFUSU9OOwotCi0JCXAycGllbGVuKys7Ci0JfQotCWVsc2UgaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKSkKLQl7Ci0JCS8qCUdyb3VwIENhcGFiaWxpdHkgQml0bWFwLCAxIGJ5dGUgKi8KLQkJaWYgKHB3ZGluZm8tPnBlcnNpc3RlbnRfc3VwcG9ydGVkKQotCQkJcDJwaWVbIHAycGllbGVuKysgXSA9IFAyUF9HUlBDQVBfUEVSU0lTVEVOVF9HUk9VUCB8IERNUF9QMlBfR1JQQ0FQX1NVUFBPUlQ7Ci0JCWVsc2UKLQkJCXAycGllWyBwMnBpZWxlbisrIF0gPSBETVBfUDJQX0dSUENBUF9TVVBQT1JUOwotCX0KLQotCS8qCUV4dGVuZGVkIExpc3RlbiBUaW1pbmcgQVRUUiAqLwotCS8qCVR5cGU6ICovCi0JcDJwaWVbIHAycGllbGVuKysgXSA9IFAyUF9BVFRSX0VYX0xJU1RFTl9USU1JTkc7Ci0KLQkvKglMZW5ndGg6ICovCi0JLyogdTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2xlMTYoMHgwMDA0KTsgKi8KLQlwdXRfdW5hbGlnbmVkX2xlMTYoMHgwMDA0LCBwMnBpZSArIHAycGllbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJVmFsdWU6ICovCi0JLyoJQXZhaWxhYmlsaXR5IFBlcmlvZCAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4RkZGRik7ICovCi0JcHV0X3VuYWxpZ25lZF9sZTE2KDB4RkZGRiwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCUF2YWlsYWJpbGl0eSBJbnRlcnZhbCAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDB4RkZGRik7ICovCi0JcHV0X3VuYWxpZ25lZF9sZTE2KDB4RkZGRiwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qICBOb3RpY2Ugb2YgQWJzZW5jZSBBVFRSICovCi0JLyoJVHlwZTogKi8KLQkvKglMZW5ndGg6ICovCi0JLyoJVmFsdWU6ICovCi0JaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pKQotCXsKLQkJLyogZ29fYWRkX25vYV9hdHRyKHB3ZGluZm8pOyAqLwotCX0KLQotCS8qCURldmljZSBJbmZvIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXAycGllWyBwMnBpZWxlbisrIF0gPSBQMlBfQVRUUl9ERVZJQ0VfSU5GTzsKLQotCS8qCUxlbmd0aDogKi8KLQkvKgkyMSAtPiBQMlAgRGV2aWNlIEFkZHJlc3MgKDZieXRlcykgKyBDb25maWcgTWV0aG9kcyAoMmJ5dGVzKSArIFByaW1hcnkgRGV2aWNlIFR5cGUgKDhieXRlcykgKi8KLQkvKgkrIE51bW9mU2Vjb25kRGV2VHlwZSAoMWJ5dGUpICsgV1BTIERldmljZSBOYW1lIElEIGZpZWxkICgyYnl0ZXMpICsgV1BTIERldmljZSBOYW1lIExlbiBmaWVsZCAoMmJ5dGVzKSAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDIxICsgcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2xlMTYoMjEgKyBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4sIHAycGllICsgcDJwaWVsZW4pOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglQMlAgRGV2aWNlIEFkZHJlc3MgKi8KLQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsIEVUSF9BTEVOKTsKLQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvbmZpZyBNZXRob2QgKi8KLQkvKglUaGlzIGZpZWxkIHNob3VsZCBiZSBiaWcgZW5kaWFuLiBOb3RlZCBieSBQMlAgc3BlY2lmaWNhdGlvbi4gKi8KLQkvKiB1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihwd2RpbmZvLT5zdXBwb3J0ZWRfd3BzX2NtKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYocHdkaW5mby0+c3VwcG9ydGVkX3dwc19jbSwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVByaW1hcnkgRGV2aWNlIFR5cGUgKi8KLQkvKglDYXRlZ29yeSBJRCAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19QRFRfQ0lEX01VTElUX01FRElBKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoV1BTX1BEVF9DSURfTVVMSVRfTUVESUEsIHAycGllICsgcDJwaWVsZW4pOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglPVUkgKi8KLQkvKiB1MzIqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUzMihXUFNPVUkpOyAqLwotCXB1dF91bmFsaWduZWRfYmUzMihXUFNPVUksIHAycGllICsgcDJwaWVsZW4pOwotCXAycGllbGVuICs9IDQ7Ci0KLQkvKglTdWIgQ2F0ZWdvcnkgSUQgKi8KLQkvKiB1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfUERUX1NDSURfTUVESUFfU0VSVkVSKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2JlMTYoV1BTX1BEVF9TQ0lEX01FRElBX1NFUlZFUiwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCU51bWJlciBvZiBTZWNvbmRhcnkgRGV2aWNlIFR5cGVzICovCi0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4MDA7CS8qCU5vIFNlY29uZGFyeSBEZXZpY2UgVHlwZSBMaXN0ICovCi0KLQkvKglEZXZpY2UgTmFtZSAqLwotCS8qCVR5cGU6ICovCi0JLyogdTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfREVWSUNFX05BTUUpOyAqLwotCXB1dF91bmFsaWduZWRfYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCUxlbmd0aDogKi8KLQkvKiB1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4pOyAqLwotCXB1dF91bmFsaWduZWRfYmUxNihwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4sIHAycGllICsgcDJwaWVsZW4pOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+ZGV2aWNlX25hbWUsIHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7Ci0JcDJwaWVsZW4gKz0gcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuOwotCi0JLyogIEdyb3VwIEluZm8gQVRUUiAqLwotCS8qCVR5cGU6ICovCi0JLyoJTGVuZ3RoOiAqLwotCS8qCVZhbHVlOiAqLwotCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkKLQl7Ci0JCXAycGllbGVuICs9IGdvX2FkZF9ncm91cF9pbmZvX2F0dHIocHdkaW5mbywgcDJwaWUgKyBwMnBpZWxlbik7Ci0JfQotCi0JcGJ1ZiA9IHJ0d19zZXRfaWUyM2EocGJ1ZiwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHAycGllbGVuLCAodW5zaWduZWQgY2hhciAqKSBwMnBpZSwgJmxlbik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi11MzIgYnVpbGRfcHJvdl9kaXNjX3JlcXVlc3RfcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmLCB1OCogcHNzaWQsIHU4IHVzc2lkbGVuLCB1OCogcGRldl9yYWRkcikKLXsKLQl1OCBwMnBpZVsgTUFYX1AyUF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyIGxlbiA9IDAsIHAycGllbGVuID0gMDsKLQotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NTA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NkY7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4OUE7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDExMDMwMSAqLwotCS8qCUFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZSBwcm92aXNpb24gZGlzY292ZXJ5IHJlcXVlc3QgZnJhbWUgc2hvdWxkIGNvbnRhaW4gMyBQMlAgYXR0cmlidXRlcyAqLwotCS8qCTEuIFAyUCBDYXBhYmlsaXR5ICovCi0JLyoJMi4gRGV2aWNlIEluZm8gKi8KLQkvKgkzLiBHcm91cCBJRCAoV2hlbiBqb2luaW5nIGFuIG9wZXJhdGluZyBQMlAgR3JvdXApICovCi0KLQkvKglQMlAgQ2FwYWJpbGl0eSBBVFRSICovCi0JLyoJVHlwZTogKi8KLQlwMnBpZVsgcDJwaWVsZW4rKyBdID0gUDJQX0FUVFJfQ0FQQUJJTElUWTsKLQotCS8qCUxlbmd0aDogKi8KLQkvKiB1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fbGUxNigweDAwMDIpOyAqLwotCXB1dF91bmFsaWduZWRfbGUxNigweDAwMDIsIHAycGllICsgcDJwaWVsZW4pOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglEZXZpY2UgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCXAycGllWyBwMnBpZWxlbisrIF0gPSBETVBfUDJQX0RFVkNBUF9TVVBQT1JUOwotCi0JLyoJR3JvdXAgQ2FwYWJpbGl0eSBCaXRtYXAsIDEgYnl0ZSAqLwotCWlmIChwd2RpbmZvLT5wZXJzaXN0ZW50X3N1cHBvcnRlZCkKLQkJcDJwaWVbIHAycGllbGVuKysgXSA9IFAyUF9HUlBDQVBfUEVSU0lTVEVOVF9HUk9VUCB8IERNUF9QMlBfR1JQQ0FQX1NVUFBPUlQ7Ci0JZWxzZQotCQlwMnBpZVsgcDJwaWVsZW4rKyBdID0gRE1QX1AyUF9HUlBDQVBfU1VQUE9SVDsKLQotCS8qCURldmljZSBJbmZvIEFUVFIgKi8KLQkvKglUeXBlOiAqLwotCXAycGllWyBwMnBpZWxlbisrIF0gPSBQMlBfQVRUUl9ERVZJQ0VfSU5GTzsKLQotCS8qCUxlbmd0aDogKi8KLQkvKgkyMSAtPiBQMlAgRGV2aWNlIEFkZHJlc3MgKDZieXRlcykgKyBDb25maWcgTWV0aG9kcyAoMmJ5dGVzKSArIFByaW1hcnkgRGV2aWNlIFR5cGUgKDhieXRlcykgKi8KLQkvKgkrIE51bW9mU2Vjb25kRGV2VHlwZSAoMWJ5dGUpICsgV1BTIERldmljZSBOYW1lIElEIGZpZWxkICgyYnl0ZXMpICsgV1BTIERldmljZSBOYW1lIExlbiBmaWVsZCAoMmJ5dGVzKSAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KDIxICsgcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsgKi8KLQlwdXRfdW5hbGlnbmVkX2xlMTYoMjEgKyBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4sIHAycGllICsgcDJwaWVsZW4pOwotCXAycGllbGVuICs9IDI7Ci0KLQkvKglWYWx1ZTogKi8KLQkvKglQMlAgRGV2aWNlIEFkZHJlc3MgKi8KLQltZW1jcHkocDJwaWUgKyBwMnBpZWxlbiwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsIEVUSF9BTEVOKTsKLQlwMnBpZWxlbiArPSBFVEhfQUxFTjsKLQotCS8qCUNvbmZpZyBNZXRob2QgKi8KLQkvKglUaGlzIGZpZWxkIHNob3VsZCBiZSBiaWcgZW5kaWFuLiBOb3RlZCBieSBQMlAgc3BlY2lmaWNhdGlvbi4gKi8KLQlpZiAocHdkaW5mby0+dWlfZ290X3dwc19pbmZvID09IFAyUF9HT1RfV1BTSU5GT19QQkMpCi0JewotCQkvKiB1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQ09ORklHX01FVEhPRF9QQkMpOyAqLwotCQlwdXRfdW5hbGlnbmVkX2JlMTYoV1BTX0NPTkZJR19NRVRIT0RfUEJDLCBwMnBpZSArIHAycGllbGVuKTsKLQl9Ci0JZWxzZQotCXsKLQkJLyogdTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0NPTkZJR19NRVRIT0RfRElTUExBWSk7ICovCi0JCXB1dF91bmFsaWduZWRfYmUxNihXUFNfQ09ORklHX01FVEhPRF9ESVNQTEFZLCBwMnBpZSArIHAycGllbGVuKTsKLQl9Ci0KLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJUHJpbWFyeSBEZXZpY2UgVHlwZSAqLwotCS8qCUNhdGVnb3J5IElEICovCi0JLyogdTE2KikgKHAycGllICsgcDJwaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX1BEVF9DSURfTVVMSVRfTUVESUEpOyAqLwotCXB1dF91bmFsaWduZWRfYmUxNihXUFNfUERUX0NJRF9NVUxJVF9NRURJQSwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCU9VSSAqLwotCS8qIHUzMiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTMyKFdQU09VSSk7ICovCi0JcHV0X3VuYWxpZ25lZF9iZTMyKFdQU09VSSwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gNDsKLQotCS8qCVN1YiBDYXRlZ29yeSBJRCAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KFdQU19QRFRfU0NJRF9NRURJQV9TRVJWRVIpOyAqLwotCXB1dF91bmFsaWduZWRfYmUxNihXUFNfUERUX1NDSURfTUVESUFfU0VSVkVSLCBwMnBpZSArIHAycGllbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJTnVtYmVyIG9mIFNlY29uZGFyeSBEZXZpY2UgVHlwZXMgKi8KLQlwMnBpZVsgcDJwaWVsZW4rKyBdID0gMHgwMDsJLyoJTm8gU2Vjb25kYXJ5IERldmljZSBUeXBlIExpc3QgKi8KLQotCS8qCURldmljZSBOYW1lICovCi0JLyoJVHlwZTogKi8KLQkvKiB1MTYqKSAocDJwaWUgKyBwMnBpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9ERVZJQ0VfTkFNRSk7ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KFdQU19BVFRSX0RFVklDRV9OQU1FLCBwMnBpZSArIHAycGllbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyoJTGVuZ3RoOiAqLwotCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19iZTE2KHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbik7ICovCi0JcHV0X3VuYWxpZ25lZF9iZTE2KHB3ZGluZm8tPmRldmljZV9uYW1lX2xlbiwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qCVZhbHVlOiAqLwotCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwd2RpbmZvLT5kZXZpY2VfbmFtZSwgcHdkaW5mby0+ZGV2aWNlX25hbWVfbGVuKTsKLQlwMnBpZWxlbiArPSBwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW47Ci0KLQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9DTElFTlQpKQotCXsKLQkJLyoJQWRkZWQgYnkgQWxiZXJ0IDIwMTEvMDUvMTkgKi8KLQkJLyoJSW4gdGhpcyBjYXNlLCB0aGUgcGRldl9yYWRkciBpcyB0aGUgZGV2aWNlIGFkZHJlc3Mgb2YgdGhlIGdyb3VwIG93bmVyLiAqLwotCi0JCS8qCVAyUCBHcm91cCBJRCBBVFRSICovCi0JCS8qCVR5cGU6ICovCi0JCXAycGllWyBwMnBpZWxlbisrIF0gPSBQMlBfQVRUUl9HUk9VUF9JRDsKLQotCQkvKglMZW5ndGg6ICovCi0JCS8qIHUxNiopIChwMnBpZSArIHAycGllbGVuKSA9IGNwdV90b19sZTE2KEVUSF9BTEVOICsgdXNzaWRsZW4pOyAqLwotCQlwdXRfdW5hbGlnbmVkX2xlMTYoRVRIX0FMRU4gKyB1c3NpZGxlbiwgcDJwaWUgKyBwMnBpZWxlbik7Ci0JCXAycGllbGVuICs9IDI7Ci0KLQkJLyoJVmFsdWU6ICovCi0JCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwZGV2X3JhZGRyLCBFVEhfQUxFTik7Ci0JCXAycGllbGVuICs9IEVUSF9BTEVOOwotCi0JCW1lbWNweShwMnBpZSArIHAycGllbGVuLCBwc3NpZCwgdXNzaWRsZW4pOwotCQlwMnBpZWxlbiArPSB1c3NpZGxlbjsKLQotCX0KLQotCXBidWYgPSBydHdfc2V0X2llMjNhKHBidWYsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCBwMnBpZWxlbiwgKHVuc2lnbmVkIGNoYXIgKikgcDJwaWUsICZsZW4pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIGJ1aWxkX2Fzc29jX3Jlc3BfcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmLCB1OCBzdGF0dXNfY29kZSkKLXsKLQl1OCBwMnBpZVsgTUFYX1AyUF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyIGxlbiA9IDAsIHAycGllbGVuID0gMDsKLQotCS8qCVAyUCBPVUkgKi8KLQlwMnBpZWxlbiA9IDA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NTA7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4NkY7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4OUE7Ci0JcDJwaWVbIHAycGllbGVuKysgXSA9IDB4MDk7CS8qCVdGQSBQMlAgdjEuMCAqLwotCi0JLyogIEFjY29yZGluZyB0byB0aGUgUDJQIFNwZWNpZmljYXRpb24sIHRoZSBBc3NvY2lhdGlvbiByZXNwb25zZSBmcmFtZSBzaG91bGQgY29udGFpbiAyIFAyUCBhdHRyaWJ1dGVzICovCi0JLyoJMS4gU3RhdHVzICovCi0JLyoJMi4gRXh0ZW5kZWQgTGlzdGVuIFRpbWluZyAob3B0aW9uYWwpICovCi0KLQkvKglTdGF0dXMgQVRUUiAqLwotCXAycGllbGVuICs9IHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSgmcDJwaWVbcDJwaWVsZW5dLCBQMlBfQVRUUl9TVEFUVVMsIDEsICZzdGF0dXNfY29kZSk7Ci0KLQkvKiAgRXh0ZW5kZWQgTGlzdGVuIFRpbWluZyBBVFRSICovCi0JLyoJVHlwZTogKi8KLQkvKglMZW5ndGg6ICovCi0JLyoJVmFsdWU6ICovCi0KLQlwYnVmID0gcnR3X3NldF9pZTIzYShwYnVmLCBfVkVORE9SX1NQRUNJRklDX0lFXywgcDJwaWVsZW4sICh1bnNpZ25lZCBjaGFyICopIHAycGllLCAmbGVuKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXUzMiBidWlsZF9kZWF1dGhfcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKQotewotCXUzMiBsZW4gPSAwOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotdTMyIHByb2Nlc3NfcHJvYmVfcmVxX3AycF9pZTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLCB1aW50IGxlbikKLXsKLQl1OCAqcDsKLQl1MzIgcmV0ID0gZmFsc2U7Ci0JdTggKnAycGllOwotCXUzMglwMnBpZWxlbiA9IDA7Ci0JaW50IHNzaWRfbGVuID0gMCwgcmF0ZV9jbnQgPSAwOwotCi0JcCA9IHJ0d19nZXRfaWUyM2EocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIF9QUk9CRVJFUV9JRV9PRkZTRVRfLCBfU1VQUE9SVEVEUkFURVNfSUVfLCAoaW50ICopJnJhdGVfY250LAotCQkJbGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSAtIF9QUk9CRVJFUV9JRV9PRkZTRVRfKTsKLQotCWlmIChyYXRlX2NudCA8PSA0KQotCXsKLQkJaW50IGksIGdfcmF0ZSA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJhdGVfY250OyBpKyspCi0JCXsKLQkJCWlmICgoKCoocCArIDIgKyBpKSAmIDB4ZmYpICE9IDB4MDIpICYmCi0JCQkJKCgqKHAgKyAyICsgaSkgJiAweGZmKSAhPSAweDA0KSAmJgotCQkJCSgoKihwICsgMiArIGkpICYgMHhmZikgIT0gMHgwQikgJiYKLQkJCQkoKCoocCArIDIgKyBpKSAmIDB4ZmYpICE9IDB4MTYpKQotCQkJewotCQkJCWdfcmF0ZSA9IDE7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZ19yYXRlID09IDApCi0JCXsKLQkJCS8qCVRoZXJlIGlzIG5vIE9GRE0gcmF0ZSBpbmNsdWRlZCBpbiBTdXBwb3J0ZWRSYXRlcyBJRSBvZiB0aGlzIHByb2JlIHJlcXVlc3QgZnJhbWUgKi8KLQkJCS8qCVRoZSBkcml2ZXIgc2hvdWxkIHJlc3BvbnNlIHRoaXMgcHJvYmUgcmVxdWVzdC4gKi8KLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJLyoJcmF0ZV9jbnQgPiA0IG1lYW5zIHRoZSBTdXBwb3J0UmF0ZXMgSUUgY29udGFpbnMgdGhlIE9GRE0gcmF0ZSBiZWNhdXNlIHRoZSBjb3VudCBvZiBDQ0sgcmF0ZXMgYXJlIDQuICovCi0JCS8qCVdlIHNob3VsZCBwcm9jZWVkIHRoZSBmb2xsb3dpbmcgY2hlY2sgZm9yIHRoaXMgcHJvYmUgcmVxdWVzdC4gKi8KLQl9Ci0KLQkvKglBZGRlZCBjb21tZW50cyBieSBBbGJlcnQgMjAxMDA5MDYgKi8KLQkvKglUaGVyZSBhcmUgc2V2ZXJhbCBpdGVtcyB3ZSBzaG91bGQgY2hlY2sgaGVyZS4gKi8KLQkvKgkxLiBUaGlzIHByb2JlIHJlcXVlc3QgZnJhbWUgbXVzdCBjb250YWluIHRoZSBQMlAgSUUuIChEb25lKSAqLwotCS8qCTIuIFRoaXMgcHJvYmUgcmVxdWVzdCBmcmFtZSBtdXN0IGNvbnRhaW4gdGhlIHdpbGRjYXJkIFNTSUQuIChEb25lKSAqLwotCS8qCTMuIFdpbGRjYXJkIEJTU0lELiAoVG9kbykgKi8KLQkvKgk0LiBEZXN0aW5hdGlvbiBBZGRyZXNzLiAoRG9uZSBpbiBtZ3RfZGlzcGF0Y2hlcjIzYSBmdW5jdGlvbikgKi8KLQkvKgk1LiBSZXF1ZXN0ZWQgRGV2aWNlIFR5cGUgaW4gV1NDIElFLiAoVG9kbykgKi8KLQkvKgk2LiBEZXZpY2UgSUQgYXR0cmlidXRlIGluIFAyUCBJRS4gKFRvZG8pICovCi0KLQlwID0gcnR3X2dldF9pZTIzYShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgX1BST0JFUkVRX0lFX09GRlNFVF8sIF9TU0lEX0lFXywgKGludCAqKSZzc2lkX2xlbiwKLQkJCWxlbiAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgLSBfUFJPQkVSRVFfSUVfT0ZGU0VUXyk7Ci0KLQlzc2lkX2xlbiAmPSAweGZmOwkvKglKdXN0IGxhc3QgMSBieXRlIGlzIHZhbGlkIGZvciBzc2lkIGxlbiBvZiB0aGUgcHJvYmUgcmVxdWVzdCAqLwotCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0RFVklDRSkgfHwgcnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpCi0JewotCQlpZiAoKHAycGllID0gcnR3X2dldF9wMnBfaWUyM2EocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIF9QUk9CRVJFUV9JRV9PRkZTRVRfLCBsZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpIC0gX1BST0JFUkVRX0lFX09GRlNFVF8sIE5VTEwsICZwMnBpZWxlbikpKQotCQl7Ci0JCQlpZiAoKHApICYmICFtZW1jbXAoKHZvaWQgKikocCsyKSwgKHZvaWQgKilwd2RpbmZvLT5wMnBfd2lsZGNhcmRfc3NpZCwgNykpCi0JCQl7Ci0JCQkJLyogdG9kbzogKi8KLQkJCQkvKiBDaGVjayBSZXF1ZXN0ZWQgRGV2aWNlIFR5cGUgYXR0cmlidXRlcyBpbiBXU0MgSUUuICovCi0JCQkJLyogQ2hlY2sgRGV2aWNlIElEIGF0dHJpYnV0ZSBpbiBQMlAgSUUgKi8KLQotCQkJCXJldCA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmICgocCAhPSBOVUxMKSAmJiAoc3NpZF9sZW4gPT0gMCkpCi0JCQl7Ci0JCQkJcmV0ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIG5vbiAtcDJwIGRldmljZSAqLwotCQl9Ci0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi11MzIgcHJvY2Vzc19hc3NvY19yZXFfcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwZnJhbWUsIHVpbnQgbGVuLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpCi17Ci0JdTggc3RhdHVzX2NvZGUgPSBQMlBfU1RBVFVTX1NVQ0NFU1M7Ci0JdTggKnBidWYsICpwYXR0cl9jb250ZW50ID0gTlVMTDsKLQl1MzIgYXR0cl9jb250ZW50bGVuID0gMDsKLQl1MTYgY2FwX2F0dHIgPSAwOwotCXVuc2lnbmVkIHNob3J0IGllX29mZnNldDsKLQl1OCAqIGllczsKLQl1MzIgaWVzX2xlbjsKLQl1OCAqIHAycF9pZTsKLQl1MzIJcDJwX2llbGVuID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwotCi0JaWYgKCFydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkKLQkJcmV0dXJuIFAyUF9TVEFUVVNfRkFJTF9SRVFVRVNUX1VOQUJMRTsKLQotCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCWllX29mZnNldCA9IF9BU09DUkVRX0lFX09GRlNFVF87Ci0JZWxzZSAvKiAgV0lGSV9SRUFTU09DUkVRICovCi0JCWllX29mZnNldCA9IF9SRUFTT0NSRVFfSUVfT0ZGU0VUXzsKLQotCWllcyA9IHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBpZV9vZmZzZXQ7Ci0JaWVzX2xlbiA9IGxlbiAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgLSBpZV9vZmZzZXQ7Ci0KLQlwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShpZXMsIGllc19sZW4sIE5VTEwsICZwMnBfaWVsZW4pOwotCi0JaWYgKCFwMnBfaWUpCi0JewotCQlEQkdfODcyM0EoIlslc10gUDJQIElFIG5vdCBGb3VuZCEhXG4iLCBfX2Z1bmNfXyk7Ci0JCXN0YXR1c19jb2RlID0gIFAyUF9TVEFUVVNfRkFJTF9JTlZBTElEX1BBUkFNOwotCX0KLQllbHNlCi0JewotCQlEQkdfODcyM0EoIlslc10gUDJQIElFIEZvdW5kISFcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQl3aGlsZSAocDJwX2llKQotCXsKLQkJLyogQ2hlY2sgUDJQIENhcGFiaWxpdHkgQVRUUiAqLwotCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9DQVBBQklMSVRZLCAodTgqKSZjYXBfYXR0ciwgKHVpbnQqKSAmYXR0cl9jb250ZW50bGVuKSkKLQkJewotCQkJREJHXzg3MjNBKCJbJXNdIEdvdCBQMlAgQ2FwYWJpbGl0eSBBdHRyISFcbiIsIF9fZnVuY19fKTsKLQkJCWNhcF9hdHRyID0gbGUxNl90b19jcHUoY2FwX2F0dHIpOwotCQkJcHN0YS0+ZGV2X2NhcCA9IGNhcF9hdHRyJjB4ZmY7Ci0JCX0KLQotCQkvKiBDaGVjayBFeHRlbmRlZCBMaXN0ZW4gVGltaW5nIEFUVFIgKi8KLQotCQkvKiBDaGVjayBQMlAgRGV2aWNlIEluZm8gQVRUUiAqLwotCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9ERVZJQ0VfSU5GTywgTlVMTCwgKHVpbnQqKSZhdHRyX2NvbnRlbnRsZW4pKQotCQl7Ci0JCQlEQkdfODcyM0EoIlslc10gR290IFAyUCBERVZJQ0UgSU5GTyBBdHRyISFcbiIsIF9fZnVuY19fKTsKLQkJCXBhdHRyX2NvbnRlbnQgPSBwYnVmID0ga3phbGxvYyhhdHRyX2NvbnRlbnRsZW4sCi0JCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7Ci0JCQlpZiAocGF0dHJfY29udGVudCkgewotCQkJCXU4IG51bV9vZl9zZWNkZXZfdHlwZTsKLQkJCQl1MTYgZGV2X25hbWVfbGVuOwotCi0JCQkJcnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9ERVZJQ0VfSU5GTywgcGF0dHJfY29udGVudCwgKHVpbnQqKSZhdHRyX2NvbnRlbnRsZW4pOwotCi0JCQkJbWVtY3B5KHBzdGEtPmRldl9hZGRyLAlwYXR0cl9jb250ZW50LCBFVEhfQUxFTik7LyogUDJQIERldmljZSBBZGRyZXNzICovCi0KLQkJCQlwYXR0cl9jb250ZW50ICs9IEVUSF9BTEVOOwotCi0JCQkJbWVtY3B5KCZwc3RhLT5jb25maWdfbWV0aG9kcywgcGF0dHJfY29udGVudCwgMik7LyogQ29uZmlnIE1ldGhvZHMgKi8KLQkJCQlwc3RhLT5jb25maWdfbWV0aG9kcyA9IGJlMTZfdG9fY3B1KHBzdGEtPmNvbmZpZ19tZXRob2RzKTsKLQotCQkJCXBhdHRyX2NvbnRlbnQgKz0gMjsKLQotCQkJCW1lbWNweShwc3RhLT5wcmltYXJ5X2Rldl90eXBlLCBwYXR0cl9jb250ZW50LCA4KTsKLQotCQkJCXBhdHRyX2NvbnRlbnQgKz0gODsKLQotCQkJCW51bV9vZl9zZWNkZXZfdHlwZSA9ICpwYXR0cl9jb250ZW50OwotCQkJCXBhdHRyX2NvbnRlbnQgKz0gMTsKLQotCQkJCWlmIChudW1fb2Zfc2VjZGV2X3R5cGUgPT0gMCkKLQkJCQl7Ci0JCQkJCXBzdGEtPm51bV9vZl9zZWNkZXZfdHlwZSA9IDA7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXUzMiBsZW47Ci0KLQkJCQkJcHN0YS0+bnVtX29mX3NlY2Rldl90eXBlID0gbnVtX29mX3NlY2Rldl90eXBlOwotCi0JCQkJCWxlbiA9IChzaXplb2YocHN0YS0+c2VjZGV2X3R5cGVzX2xpc3QpPChudW1fb2Zfc2VjZGV2X3R5cGUqOCkpID8gKHNpemVvZihwc3RhLT5zZWNkZXZfdHlwZXNfbGlzdCkpIDogKG51bV9vZl9zZWNkZXZfdHlwZSo4KTsKLQotCQkJCQltZW1jcHkocHN0YS0+c2VjZGV2X3R5cGVzX2xpc3QsIHBhdHRyX2NvbnRlbnQsIGxlbik7Ci0KLQkJCQkJcGF0dHJfY29udGVudCArPSAobnVtX29mX3NlY2Rldl90eXBlKjgpOwotCQkJCX0KLQotCQkJCS8qIGRldl9uYW1lX2xlbiA9IGF0dHJfY29udGVudGxlbiAtIEVUSF9BTEVOIC0gMiAtIDggLSAxIC0gKG51bV9vZl9zZWNkZXZfdHlwZSo4KTsgKi8KLQkJCQlwc3RhLT5kZXZfbmFtZV9sZW4gPSAwOwotCQkJCWlmIChXUFNfQVRUUl9ERVZJQ0VfTkFNRSA9PSBiZTE2X3RvX2NwdSgqKHUxNiopcGF0dHJfY29udGVudCkpCi0JCQkJewotCQkJCQlkZXZfbmFtZV9sZW4gPSBiZTE2X3RvX2NwdSgqKHUxNiopKHBhdHRyX2NvbnRlbnQrMikpOwotCi0JCQkJCXBzdGEtPmRldl9uYW1lX2xlbiA9IChzaXplb2YocHN0YS0+ZGV2X25hbWUpPGRldl9uYW1lX2xlbikgPyBzaXplb2YocHN0YS0+ZGV2X25hbWUpOmRldl9uYW1lX2xlbjsKLQotCQkJCQltZW1jcHkocHN0YS0+ZGV2X25hbWUsIHBhdHRyX2NvbnRlbnQrNCwgcHN0YS0+ZGV2X25hbWVfbGVuKTsKLQkJCQl9Ci0KLQkJCQlrZnJlZShwYnVmKTsKLQotCQkJfQotCi0JCX0KLQotCQkvKiBHZXQgdGhlIG5leHQgUDJQIElFICovCi0JCXAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKHAycF9pZStwMnBfaWVsZW4sIGllc19sZW4gLShwMnBfaWUgLWllcyArIHAycF9pZWxlbiksIE5VTEwsICZwMnBfaWVsZW4pOwotCi0JfQotCi0JcmV0dXJuIHN0YXR1c19jb2RlOwotfQotCi11MzIgcHJvY2Vzc19wMnBfZGV2ZGlzY19yZXEyM2Eoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBmcmFtZSwKLQkJCSAgICB1aW50IGxlbikKLXsKLQl1OCAqZnJhbWVfYm9keTsKLQl1OCBzdGF0dXMsIGRpYWxvZ1Rva2VuOwotCXN0cnVjdCBzdGFfaW5mbyAqcHN0YSA9IE5VTEw7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB3ZGluZm8tPnBhZGFwdGVyOwotCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7Ci0JdTggKnAycF9pZTsKLQl1MzIJcDJwX2llbGVuID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHBmcmFtZTsKLQotCWZyYW1lX2JvZHkgPSAodW5zaWduZWQgY2hhciAqKQotCQkocGZyYW1lICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSk7Ci0KLQlkaWFsb2dUb2tlbiA9IGZyYW1lX2JvZHlbN107Ci0Jc3RhdHVzID0gUDJQX1NUQVRVU19GQUlMX1VOS05PV05fUDJQR1JPVVA7Ci0KLQlpZiAoKHAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKGZyYW1lX2JvZHkgKyBfUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLAotCQkJCSAgICAgbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgTlVMTCwKLQkJCQkgICAgICZwMnBfaWVsZW4pKSkgewotCQl1OCBncm91cGlkWzM4XSA9IHsgMHgwMCB9OwotCQl1OCBkZXZfYWRkcltFVEhfQUxFTl0gPSB7IDB4MDAgfTsKLQkJdTMyIGF0dHJfY29udGVudGxlbiA9IDA7Ci0KLQkJaWYgKHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwKLQkJCQkJICAgICBQMlBfQVRUUl9HUk9VUF9JRCwgZ3JvdXBpZCwKLQkJCQkJICAgICAmYXR0cl9jb250ZW50bGVuKSkgewotCQkJaWYgKCFtZW1jbXAocHdkaW5mby0+ZGV2aWNlX2FkZHIsIGdyb3VwaWQsIEVUSF9BTEVOKSAmJgotCQkJICAgICFtZW1jbXAocHdkaW5mby0+cDJwX2dyb3VwX3NzaWQsIGdyb3VwaWQgKyBFVEhfQUxFTiwKLQkJCQkgICAgcHdkaW5mby0+cDJwX2dyb3VwX3NzaWRfbGVuKSkgewotCQkJCWF0dHJfY29udGVudGxlbiA9IDA7Ci0KLQkJCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLAotCQkJCQkJCSAgICAgUDJQX0FUVFJfREVWSUNFX0lELAotCQkJCQkJCSAgICAgZGV2X2FkZHIsCi0JCQkJCQkJICAgICAmYXR0cl9jb250ZW50bGVuKSkgewotCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwaGVhZCwgKnBsaXN0LCAqcHRtcDsKLQotCQkJCQlzcGluX2xvY2tfYmgoJnBzdGFwcml2LT5hc29jX2xpc3RfbG9jayk7Ci0JCQkJCXBoZWFkID0gJnBzdGFwcml2LT5hc29jX2xpc3Q7Ci0KLQkJCQkJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCBwaGVhZCkgewotCQkJCQkJcHN0YSA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHN0YV9pbmZvLCBhc29jX2xpc3QpOwotCi0JCQkJCQlpZiAocHN0YS0+aXNfcDJwX2RldmljZSAmJiAocHN0YS0+ZGV2X2NhcCZQMlBfREVWQ0FQX0NMSUVOVF9ESVNDT1ZFUkFCSUxJVFkpICYmCi0JCQkJCQkgICAhbWVtY21wKHBzdGEtPmRldl9hZGRyLCBkZXZfYWRkciwgRVRIX0FMRU4pKQotCQkJCQkJewotCQkJCQkJCS8qIHNwaW5fdW5sb2NrX2JoKCZwc3RhcHJpdi0+YXNvY19saXN0X2xvY2spOyAqLwotCQkJCQkJCS8qIGlzc3VlIEdPIERpc2NvdmVyYWJpbGl0eSBSZXF1ZXN0ICovCi0JCQkJCQkJaXNzdWVfZ3JvdXBfZGlzY19yZXEocHdkaW5mbywgcHN0YS0+aHdhZGRyKTsKLQkJCQkJCQkvKiBzcGluX2xvY2tfYmgoJnBzdGFwcml2LT5hc29jX2xpc3RfbG9jayk7ICovCi0JCQkJCQkJc3RhdHVzID0gUDJQX1NUQVRVU19TVUNDRVNTOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlzdGF0dXMgPSBQMlBfU1RBVFVTX0ZBSUxfSU5GT19VTkFWQUlMQUJMRTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlzcGluX3VubG9ja19iaCgmcHN0YXByaXYtPmFzb2NfbGlzdF9sb2NrKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzdGF0dXMgPSBQMlBfU1RBVFVTX0ZBSUxfSU5WQUxJRF9QQVJBTTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXN0YXR1cyA9IFAyUF9TVEFUVVNfRkFJTF9JTlZBTElEX1BBUkFNOwotCQkJfQotCQl9Ci0JfQotCi0JLyogaXNzdWUgRGV2aWNlIERpc2NvdmVyYWJpbGl0eSBSZXNwb25zZSAqLwotCWlzc3VlX3AycF9kZXZkaXNjX3Jlc3AocHdkaW5mbywgaGRyLT5hZGRyMiwgc3RhdHVzLCBkaWFsb2dUb2tlbik7Ci0KLQlyZXR1cm4gKHN0YXR1cyA9PSBQMlBfU1RBVFVTX1NVQ0NFU1MpID8gdHJ1ZTpmYWxzZTsKLX0KLQotdTMyIHByb2Nlc3NfcDJwX2RldmRpc2NfcmVzcDIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLCB1aW50IGxlbikKLXsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotdTggcHJvY2Vzc19wMnBfcHJvdmRpc2NfcmVxMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sCi0JCQkgICAgdTggKnBmcmFtZSwgdWludCBsZW4pCi17Ci0JdTggKmZyYW1lX2JvZHk7Ci0JdTggKndwc2llOwotCXU4ICpwdHIgPSBOVUxMOwotCXVpbnQJd3BzX2llbGVuID0gMCwgYXR0cl9jb250ZW50bGVuID0gMDsKLQl1MTYJdWNvbmZpZ19tZXRob2QgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7Ci0KLQlmcmFtZV9ib2R5ID0gKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpOwotCi0Jd3BzaWUgPSBydHdfZ2V0X3dwc19pZTIzYShmcmFtZV9ib2R5ICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywKLQkJCSAgICAgICBsZW4gLSBfUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLCBOVUxMLAotCQkJICAgICAgICZ3cHNfaWVsZW4pOwotCWlmICghd3BzaWUpCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFydHdfZ2V0X3dwc19hdHRyX2NvbnRlbnQyM2Eod3BzaWUsIHdwc19pZWxlbiwgV1BTX0FUVFJfQ09ORl9NRVRIT0QsCi0JCQkJICAgICAodTggKikmdWNvbmZpZ19tZXRob2QsICZhdHRyX2NvbnRlbnRsZW4pKQotCQlnb3RvIG91dDsKLQotCXVjb25maWdfbWV0aG9kID0gYmUxNl90b19jcHUodWNvbmZpZ19tZXRob2QpOwotCXB0ciA9IHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxOwotCi0Jc3dpdGNoICh1Y29uZmlnX21ldGhvZCkKLQl7Ci0JY2FzZSBXUFNfQ01fRElTUExZQToKLQkJbWVtY3B5KHB0ciwgImRpcyIsIDMpOwotCQlicmVhazsKLQotCWNhc2UgV1BTX0NNX0xBQkVMOgotCQltZW1jcHkocHRyLCAibGFiIiwgMyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBXUFNfQ01fUFVTSF9CVVRUT046Ci0JCW1lbWNweShwdHIsICJwYmMiLCAzKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFdQU19DTV9LRVlQQUQ6Ci0JCW1lbWNweShwdHIsICJwYWQiLCAzKTsKLQkJYnJlYWs7Ci0JfQotCWlzc3VlX3AycF9wcm92aXNpb25fcmVzcChwd2RpbmZvLCBoZHItPmFkZHIyLCBmcmFtZV9ib2R5LAotCQkJCSB1Y29uZmlnX21ldGhvZCk7Ci0KLW91dDoKLQlEQkdfODcyM0EoIlslc10gY29uZmlnIG1ldGhvZCA9ICVzXG4iLCBfX2Z1bmNfXywgcHRyKTsKLQotCXJldHVybiB0cnVlOwotfQotCi11OCBwcm9jZXNzX3AycF9wcm92ZGlzY19yZXNwMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sICB1OCAqcGZyYW1lKQotewotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB1OCBydHdfcDJwX2dldF9wZWVyX2NoX2xpc3Qoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKmNoX2NvbnRlbnQsIHU4IGNoX2NudCwgdTggKnBlZXJfY2hfbGlzdCkKLXsKLQl1OCBpID0gMCwgaiA9IDA7Ci0JdTggdGVtcCA9IDA7Ci0JdTggY2hfbm8gPSAwOwotCWNoX2NvbnRlbnQgKz0gMzsKLQljaF9jbnQgLT0gMzsKLQotCXdoaWxlKGNoX2NudCA+IDApCi0JewotCQljaF9jb250ZW50ICs9IDE7Ci0JCWNoX2NudCAtPSAxOwotCQl0ZW1wID0gKmNoX2NvbnRlbnQ7Ci0JCWZvciAoaSA9IDAgOyBpIDwgdGVtcCA7IGkrKywgaisrKQotCQl7Ci0JCQlwZWVyX2NoX2xpc3Rbal0gPSAqKGNoX2NvbnRlbnQgKyAxICsgaSk7Ci0JCX0KLQkJY2hfY29udGVudCArPSAodGVtcCArIDEpOwotCQljaF9jbnQgLT0gKHRlbXAgKyAxKTsKLQkJY2hfbm8gKz0gdGVtcCA7Ci0JfQotCi0JcmV0dXJuIGNoX25vOwotfQotCi1zdGF0aWMgdTggcnR3X3AycF9jaF9pbmNsdXNpb24oc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0LCB1OCAqcGVlcl9jaF9saXN0LCB1OCBwZWVyX2NoX251bSwgdTggKmNoX2xpc3RfaW5jbHVzaW9uZWQpCi17Ci0JaW50CWkgPSAwLCBqID0gMCwgdGVtcCA9IDA7Ci0JdTggY2hfbm8gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHBlZXJfY2hfbnVtOyBpKyspCi0JewotCQlmb3IgKGogPSB0ZW1wOyBqIDwgcG1sbWVleHQtPm1heF9jaGFuX251bXM7IGorKykKLQkJewotCQkJaWYgKCoocGVlcl9jaF9saXN0ICsgaSkgPT0gcG1sbWVleHQtPmNoYW5uZWxfc2V0WyBqIF0uQ2hhbm5lbE51bSkKLQkJCXsKLQkJCQljaF9saXN0X2luY2x1c2lvbmVkWyBjaF9ubysrIF0gPSAqKHBlZXJfY2hfbGlzdCArIGkpOwotCQkJCXRlbXAgPSBqOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGNoX25vOwotfQotCi11OCBwcm9jZXNzX3AycF9ncm91cF9uZWdvdGF0aW9uX3JlcTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLCB1aW50IGxlbikKLXsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHdkaW5mby0+cGFkYXB0ZXI7Ci0JdTgJcmVzdWx0ID0gUDJQX1NUQVRVU19TVUNDRVNTOwotCXUzMglwMnBfaWVsZW4gPSAwLCB3cHNfaWVsZW4gPSAwOwotCXU4ICogaWVzOwotCXUzMiBpZXNfbGVuOwotCXU4ICpwMnBfaWU7Ci0JdTggKndwc2llOwotCXUxNgkJd3BzX2RldmljZXBhc3N3b3JkX2lkID0gMHgwMDAwOwotCXVpbnQJd3BzX2RldmljZXBhc3N3b3JkX2lkX2xlbiA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1OAl3ZmRfaWVbTUFYX1dGRF9JRV9MRU5dID0geyAweDAwIH07Ci0JdTMyCXdmZF9pZWxlbiA9IDA7Ci0jZW5kaWYgLyogIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlpZiAoKHdwc2llID0gcnR3X2dldF93cHNfaWUyM2EocGZyYW1lICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgTlVMTCwgJndwc19pZWxlbikpKQotCXsKLQkJLyoJQ29tbWVudGVkIGJ5IEt1cnQgMjAxMjAxMTMgKi8KLQkJLyoJSWYgc29tZSBkZXZpY2Ugd2FudHMgdG8gZG8gcDJwIGhhbmRzaGFrZSB3aXRob3V0IHNlbmRpbmcgcHJvdl9kaXNjX3JlcSAqLwotCQkvKglXZSBoYXZlIHRvIGdldCBwZWVyX3JlcV9jbSBmcm9tIGhlcmUuICovCi0JCWlmICghbWVtY21wKHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxLCAiMDAwIiwgMykpCi0JCXsKLQkJCXJ0d19nZXRfd3BzX2F0dHJfY29udGVudDIzYSh3cHNpZSwgd3BzX2llbGVuLCBXUFNfQVRUUl9ERVZJQ0VfUFdJRCwgKHU4KikgJndwc19kZXZpY2VwYXNzd29yZF9pZCwgJndwc19kZXZpY2VwYXNzd29yZF9pZF9sZW4pOwotCQkJd3BzX2RldmljZXBhc3N3b3JkX2lkID0gYmUxNl90b19jcHUod3BzX2RldmljZXBhc3N3b3JkX2lkKTsKLQotCQkJaWYgKHdwc19kZXZpY2VwYXNzd29yZF9pZCA9PSBXUFNfRFBJRF9VU0VSX1NQRUMpCi0JCQl7Ci0JCQkJbWVtY3B5KHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxLCAiZGlzIiwgMyk7Ci0JCQl9Ci0JCQllbHNlIGlmICh3cHNfZGV2aWNlcGFzc3dvcmRfaWQgPT0gV1BTX0RQSURfUkVHSVNUUkFSX1NQRUMpCi0JCQl7Ci0JCQkJbWVtY3B5KHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxLCAicGFkIiwgMyk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJbWVtY3B5KHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxLCAicGJjIiwgMyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJREJHXzg3MjNBKCJbJXNdIFdQUyBJRSBub3QgRm91bmQhIVxuIiwgX19mdW5jX18pOwotCQlyZXN1bHQgPSBQMlBfU1RBVFVTX0ZBSUxfSU5DT01QQVRJQkxFX1BBUkFNOwotCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX0ZBSUwpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCWlmIChwd2RpbmZvLT51aV9nb3Rfd3BzX2luZm8gPT0gUDJQX05PX1dQU0lORk8pCi0JewotCQlyZXN1bHQgPSBQMlBfU1RBVFVTX0ZBSUxfSU5GT19VTkFWQUlMQUJMRTsKLQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1RYX0lORk9SX05PUkVBRFkpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCWllcyA9IHBmcmFtZSArIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF87Ci0JaWVzX2xlbiA9IGxlbiAtIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF87Ci0KLQlwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShpZXMsIGllc19sZW4sIE5VTEwsICZwMnBfaWVsZW4pOwotCi0JaWYgKCFwMnBfaWUpCi0JewotCQlEQkdfODcyM0EoIlslc10gUDJQIElFIG5vdCBGb3VuZCEhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJlc3VsdCA9IFAyUF9TVEFUVVNfRkFJTF9JTkNPTVBBVElCTEVfUEFSQU07Ci0JCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fRkFJTCk7Ci0JfQotCi0Jd2hpbGUgKHAycF9pZSkKLQl7Ci0JCXU4CWF0dHJfY29udGVudCA9IDB4MDA7Ci0JCXUzMglhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQl1OAljaF9jb250ZW50WzUwXSA9IHsgMHgwMCB9OwotCQl1aW50CWNoX2NudCA9IDA7Ci0JCXU4CXBlZXJfY2hfbGlzdFs1MF0gPSB7IDB4MDAgfTsKLQkJdTgJcGVlcl9jaF9udW0gPSAwOwotCQl1OAljaF9saXN0X2luY2x1c2lvbmVkWzUwXSA9IHsgMHgwMCB9OwotCQl1OAljaF9udW1faW5jbHVzaW9uZWQgPSAwOwotCQl1MTYJY2FwX2F0dHI7Ci0KLQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19JTkcpOwotCi0JCS8qIENoZWNrIFAyUCBDYXBhYmlsaXR5IEFUVFIgKi8KLQkJaWYgKHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfQ0FQQUJJTElUWSwgKHU4KikmY2FwX2F0dHIsICh1aW50KikmYXR0cl9jb250ZW50bGVuKSkKLQkJCWNhcF9hdHRyID0gbGUxNl90b19jcHUoY2FwX2F0dHIpOwotCi0JCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX0dPX0lOVEVOVCwgJmF0dHJfY29udGVudCwgJmF0dHJfY29udGVudGxlbikpCi0JCXsKLQkJCURCR184NzIzQSgiWyVzXSBHTyBJbnRlbnQgPSAlZCwgdGllID0gJWRcbiIsIF9fZnVuY19fLCBhdHRyX2NvbnRlbnQgPj4gMSwgYXR0cl9jb250ZW50ICYgMHgwMSk7Ci0JCQlwd2RpbmZvLT5wZWVyX2ludGVudCA9IGF0dHJfY29udGVudDsJLyoJaW5jbHVkZSBib3RoIGludGVudCBhbmQgdGllIGJyZWFrZXIgdmFsdWVzLiAqLwotCi0JCQlpZiAocHdkaW5mby0+aW50ZW50ID09IChwd2RpbmZvLT5wZWVyX2ludGVudCA+PiAxKSkKLQkJCXsKLQkJCQkvKglUcnkgdG8gbWF0Y2ggdGhlIHRpZSBicmVha2VyIHZhbHVlICovCi0JCQkJaWYgKHB3ZGluZm8tPmludGVudCA9PSBQMlBfTUFYX0lOVEVOVCkKLQkJCQl7Ci0JCQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKTsKLQkJCQkJcmVzdWx0ID0gUDJQX1NUQVRVU19GQUlMX0JPVEhfR09JTlRFTlRfMTU7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWlmIChhdHRyX2NvbnRlbnQgJiAweDAxKQotCQkJCQl7Ci0JCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHB3ZGluZm8tPmludGVudCA+IChwd2RpbmZvLT5wZWVyX2ludGVudCA+PiAxKSkKLQkJCXsKLQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCk7Ci0JCQl9Ci0KLQkJCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkKLQkJCXsKLQkJCQkvKglTdG9yZSB0aGUgZ3JvdXAgaWQgaW5mb3JtYXRpb24uICovCi0JCQkJbWVtY3B5KHB3ZGluZm8tPmdyb3VwaWRfaW5mby5nb19kZXZpY2VfYWRkciwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsIEVUSF9BTEVOKTsKLQkJCQltZW1jcHkocHdkaW5mby0+Z3JvdXBpZF9pbmZvLnNzaWQsIHB3ZGluZm8tPm5lZ29fc3NpZCwgcHdkaW5mby0+bmVnb19zc2lkbGVuKTsKLQkJCX0KLQkJfQotCi0JCWF0dHJfY29udGVudGxlbiA9IDA7Ci0JCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX0lOVEVOVEVEX0lGX0FERFIsIHB3ZGluZm8tPnAycF9wZWVyX2ludGVyZmFjZV9hZGRyLCAmYXR0cl9jb250ZW50bGVuKSkKLQkJewotCQkJaWYgKGF0dHJfY29udGVudGxlbiAhPSBFVEhfQUxFTikKLQkJCXsKLQkJCQltZW1zZXQocHdkaW5mby0+cDJwX3BlZXJfaW50ZXJmYWNlX2FkZHIsIDB4MDAsIEVUSF9BTEVOKTsKLQkJCX0KLQkJfQotCi0JCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX0NIX0xJU1QsIGNoX2NvbnRlbnQsICZjaF9jbnQpKQotCQl7Ci0JCQlwZWVyX2NoX251bSA9IHJ0d19wMnBfZ2V0X3BlZXJfY2hfbGlzdChwd2RpbmZvLCBjaF9jb250ZW50LCBjaF9jbnQsIHBlZXJfY2hfbGlzdCk7Ci0JCQljaF9udW1faW5jbHVzaW9uZWQgPSBydHdfcDJwX2NoX2luY2x1c2lvbigmcGFkYXB0ZXItPm1sbWVleHRwcml2LCBwZWVyX2NoX2xpc3QsIHBlZXJfY2hfbnVtLCBjaF9saXN0X2luY2x1c2lvbmVkKTsKLQotCQkJaWYgKGNoX251bV9pbmNsdXNpb25lZCA9PSAwKQotCQkJewotCQkJCURCR184NzIzQSgiWyVzXSBObyBjb21tb24gY2hhbm5lbCBpbiBjaGFubmVsIGxpc3QhXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcmVzdWx0ID0gUDJQX1NUQVRVU19GQUlMX05PX0NPTU1PTl9DSDsKLQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX0ZBSUwpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAocnR3X3AycF9jaGtfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTykpCi0JCQl7Ci0JCQkJaWYgKCFydHdfcDJwX2lzX2NoYW5uZWxfbGlzdF9vayhwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCwKLQkJCQkJCQkJCQkJCWNoX2xpc3RfaW5jbHVzaW9uZWQsIGNoX251bV9pbmNsdXNpb25lZCkpCi0JCQkJewotCQkJCQl7Ci0JCQkJCQl1OCBvcGVyYXRpbmdjaF9pbmZvWzVdID0geyAweDAwIH0sIHBlZXJfb3BlcmF0aW5nX2NoID0gMDsKLQkJCQkJCWF0dHJfY29udGVudGxlbiA9IDA7Ci0KLQkJCQkJCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX09QRVJBVElOR19DSCwgb3BlcmF0aW5nY2hfaW5mbywgJmF0dHJfY29udGVudGxlbikpCi0JCQkJCQl7Ci0JCQkJCQkJcGVlcl9vcGVyYXRpbmdfY2ggPSBvcGVyYXRpbmdjaF9pbmZvWzRdOwotCQkJCQkJfQotCi0JCQkJCQlpZiAocnR3X3AycF9pc19jaGFubmVsX2xpc3Rfb2socGVlcl9vcGVyYXRpbmdfY2gsCi0JCQkJCQkJCQkJCQkJCWNoX2xpc3RfaW5jbHVzaW9uZWQsIGNoX251bV9pbmNsdXNpb25lZCkpCi0JCQkJCQl7Ci0JCQkJCQkJLyoqCi0JCQkJCQkJICoJQ2hhbmdlIG91ciBvcGVyYXRpbmcgY2hhbm5lbCBhcyBwZWVyJ3MgZm9yIGNvbXBhdGliaWxpdHkuCi0JCQkJCQkJICovCi0JCQkJCQkJcHdkaW5mby0+b3BlcmF0aW5nX2NoYW5uZWwgPSBwZWVyX29wZXJhdGluZ19jaDsKLQkJCQkJCQlEQkdfODcyM0EoIlslc10gQ2hhbmdlIG9wIGNoIHRvICUwMnggYXMgcGVlcidzXG4iLCBfX2Z1bmNfXywgcHdkaW5mby0+b3BlcmF0aW5nX2NoYW5uZWwpOwotCQkJCQkJfQotCQkJCQkJZWxzZQotCQkJCQkJewotCQkJCQkJCS8qICBUYWtlIGZpcnN0IGNoYW5uZWwgb2YgY2hfbGlzdF9pbmNsdXNpb25lZCBhcyBvcGVyYXRpbmcgY2hhbm5lbCAqLwotCQkJCQkJCXB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsID0gY2hfbGlzdF9pbmNsdXNpb25lZFswXTsKLQkJCQkJCQlEQkdfODcyM0EoIlslc10gQ2hhbmdlIG9wIGNoIHRvICUwMnhcbiIsIF9fZnVuY19fLCBwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIEdldCB0aGUgbmV4dCBQMlAgSUUgKi8KLQkJcDJwX2llID0gcnR3X2dldF9wMnBfaWUyM2EocDJwX2llK3AycF9pZWxlbiwgaWVzX2xlbiAtKHAycF9pZSAtaWVzICsgcDJwX2llbGVuKSwgTlVMTCwgJnAycF9pZWxlbik7Ci0JfQotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkvKglBZGRlZCBieSBBbGJlcnQgMjAxMTA4MjMgKi8KLQkvKglUcnkgdG8gZ2V0IHRoZSBUQ1AgcG9ydCBpbmZvcm1hdGlvbiB3aGVuIHJlY2VpdmluZyB0aGUgbmVnb3RpYXRpb24gcmVxdWVzdC4gKi8KLQlpZiAocnR3X2dldF93ZmRfaWUocGZyYW1lICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgd2ZkX2llLCAmd2ZkX2llbGVuKSkKLQl7Ci0JCXU4CWF0dHJfY29udGVudFsgMTAgXSA9IHsgMHgwMCB9OwotCQl1MzIJYXR0cl9jb250ZW50bGVuID0gMDsKLQotCQlEQkdfODcyM0EoIlslc10gV0ZEIElFIEZvdW5kISFcbiIsIF9fZnVuY19fKTsKLQkJcnR3X2dldF93ZmRfYXR0cl9jb250ZW50KHdmZF9pZSwgd2ZkX2llbGVuLCBXRkRfQVRUUl9ERVZJQ0VfSU5GTywgYXR0cl9jb250ZW50LCAmYXR0cl9jb250ZW50bGVuKTsKLQkJaWYgKGF0dHJfY29udGVudGxlbikKLQkJewotCQkJcHdkaW5mby0+d2ZkX2luZm8tPnBlZXJfcnRzcF9jdHJscG9ydCA9IGdldF91bmFsaWduZWRfYmUxNihhdHRyX2NvbnRlbnQgKyAyKTsKLQkJCURCR184NzIzQSgiWyVzXSBQZWVyIFBPUlQgTlVNID0gJWRcbiIsIF9fZnVuY19fLCBwd2RpbmZvLT53ZmRfaW5mby0+cGVlcl9ydHNwX2N0cmxwb3J0KTsKLQkJfQotCX0KLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXU4IHByb2Nlc3NfcDJwX2dyb3VwX25lZ290YXRpb25fcmVzcDIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLCB1aW50IGxlbikKLXsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHdkaW5mby0+cGFkYXB0ZXI7Ci0JdTgJcmVzdWx0ID0gUDJQX1NUQVRVU19TVUNDRVNTOwotCXUzMglwMnBfaWVsZW4sIHdwc19pZWxlbjsKLQl1OCAqIGllczsKLQl1MzIgaWVzX2xlbjsKLQl1OCAqIHAycF9pZTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXU4CXdmZF9pZVtNQVhfV0ZEX0lFX0xFTl0gPSB7IDB4MDAgfTsKLQl1MzIJd2ZkX2llbGVuID0gMDsKLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCWllcyA9IHBmcmFtZSArIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF87Ci0JaWVzX2xlbiA9IGxlbiAtIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF87Ci0KLQkvKglCZSBhYmxlIHRvIGtub3cgd2hpY2ggb25lIGlzIHRoZSBQMlAgR08gYW5kIHdoaWNoIG9uZSBpcyBQMlAgY2xpZW50LiAqLwotCi0JaWYgKHJ0d19nZXRfd3BzX2llMjNhKGllcywgaWVzX2xlbiwgTlVMTCwgJndwc19pZWxlbikpCi0JewotCi0JfQotCWVsc2UKLQl7Ci0JCURCR184NzIzQSgiWyVzXSBXUFMgSUUgbm90IEZvdW5kISFcbiIsIF9fZnVuY19fKTsKLQkJcmVzdWx0ID0gUDJQX1NUQVRVU19GQUlMX0lOQ09NUEFUSUJMRV9QQVJBTTsKLQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19GQUlMKTsKLQl9Ci0KLQlwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShpZXMsIGllc19sZW4sIE5VTEwsICZwMnBfaWVsZW4pOwotCWlmICghcDJwX2llKQotCXsKLQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9ERVZJQ0UpOwotCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX0ZBSUwpOwotCQlyZXN1bHQgPSBQMlBfU1RBVFVTX0ZBSUxfSU5DT01QQVRJQkxFX1BBUkFNOwotCX0KLQllbHNlCi0JewotCi0JCXU4CWF0dHJfY29udGVudCA9IDB4MDA7Ci0JCXUzMglhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQl1OAlvcGVyYXRpbmdjaF9pbmZvWzVdID0geyAweDAwIH07Ci0JCXU4CWdyb3VwaWRbIDM4IF07Ci0JCXUxNgljYXBfYXR0cjsKLQkJdTgJcGVlcl9jaF9saXN0WzUwXSA9IHsgMHgwMCB9OwotCQl1OAlwZWVyX2NoX251bSA9IDA7Ci0JCXU4CWNoX2xpc3RfaW5jbHVzaW9uZWRbNTBdID0geyAweDAwIH07Ci0JCXU4CWNoX251bV9pbmNsdXNpb25lZCA9IDA7Ci0KLQkJd2hpbGUgKHAycF9pZSkJLyoJRm91bmQgdGhlIFAyUCBJRS4gKi8KLQkJewotCi0JCQkvKiBDaGVjayBQMlAgQ2FwYWJpbGl0eSBBVFRSICovCi0JCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9DQVBBQklMSVRZLCAodTgqKSZjYXBfYXR0ciwgKHVpbnQqKSZhdHRyX2NvbnRlbnRsZW4pKQotCQkJCWNhcF9hdHRyID0gbGUxNl90b19jcHUoY2FwX2F0dHIpOwotCi0JCQlydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX1NUQVRVUywgJmF0dHJfY29udGVudCwgJmF0dHJfY29udGVudGxlbik7Ci0JCQlpZiAoYXR0cl9jb250ZW50bGVuID09IDEpCi0JCQl7Ci0JCQkJREJHXzg3MjNBKCJbJXNdIFN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgYXR0cl9jb250ZW50KTsKLQkJCQlpZiAoYXR0cl9jb250ZW50ID09IFAyUF9TVEFUVVNfU1VDQ0VTUykKLQkJCQl7Ci0JCQkJCS8qCURvIG5vdGhpbmcuICovCi0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWlmIChQMlBfU1RBVFVTX0ZBSUxfSU5GT19VTkFWQUlMQUJMRSA9PSBhdHRyX2NvbnRlbnQpIHsKLQkJCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9SWF9JTkZPUl9OT1JFQURZKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fRkFJTCk7Ci0JCQkJCX0KLQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9ERVZJQ0UpOwotCQkJCQlyZXN1bHQgPSBhdHRyX2NvbnRlbnQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJLyoJVHJ5IHRvIGdldCB0aGUgcGVlcidzIGludGVyZmFjZSBhZGRyZXNzICovCi0JCQlhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQkJaWYgKHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfSU5URU5URURfSUZfQUREUiwgcHdkaW5mby0+cDJwX3BlZXJfaW50ZXJmYWNlX2FkZHIsICZhdHRyX2NvbnRlbnRsZW4pKQotCQkJewotCQkJCWlmIChhdHRyX2NvbnRlbnRsZW4gIT0gRVRIX0FMRU4pCi0JCQkJewotCQkJCQltZW1zZXQocHdkaW5mby0+cDJwX3BlZXJfaW50ZXJmYWNlX2FkZHIsIDB4MDAsIEVUSF9BTEVOKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qCVRyeSB0byBnZXQgdGhlIHBlZXIncyBpbnRlbnQgYW5kIHRpZSBicmVha2VyIHZhbHVlLiAqLwotCQkJYXR0cl9jb250ZW50ID0gMHgwMDsKLQkJCWF0dHJfY29udGVudGxlbiA9IDA7Ci0JCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9HT19JTlRFTlQsICZhdHRyX2NvbnRlbnQsICZhdHRyX2NvbnRlbnRsZW4pKQotCQkJewotCQkJCURCR184NzIzQSgiWyVzXSBHTyBJbnRlbnQgPSAlZCwgdGllID0gJWRcbiIsIF9fZnVuY19fLCBhdHRyX2NvbnRlbnQgPj4gMSwgYXR0cl9jb250ZW50ICYgMHgwMSk7Ci0JCQkJcHdkaW5mby0+cGVlcl9pbnRlbnQgPSBhdHRyX2NvbnRlbnQ7CS8qCWluY2x1ZGUgYm90aCBpbnRlbnQgYW5kIHRpZSBicmVha2VyIHZhbHVlcy4gKi8KLQotCQkJCWlmIChwd2RpbmZvLT5pbnRlbnQgPT0gKHB3ZGluZm8tPnBlZXJfaW50ZW50ID4+IDEpKQotCQkJCXsKLQkJCQkJLyoJVHJ5IHRvIG1hdGNoIHRoZSB0aWUgYnJlYWtlciB2YWx1ZSAqLwotCQkJCQlpZiAocHdkaW5mby0+aW50ZW50ID09IFAyUF9NQVhfSU5URU5UKQotCQkJCQl7Ci0JCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0RFVklDRSk7Ci0JCQkJCQlyZXN1bHQgPSBQMlBfU1RBVFVTX0ZBSUxfQk9USF9HT0lOVEVOVF8xNTsKLQkJCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fRkFJTCk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX09LKTsKLQkJCQkJCXJ0d19wMnBfc2V0X3ByZV9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX09LKTsKLQkJCQkJCWlmIChhdHRyX2NvbnRlbnQgJiAweDAxKQotCQkJCQkJewotCQkJCQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfQ0xJRU5UKTsKLQkJCQkJCX0KLQkJCQkJCWVsc2UKLQkJCQkJCXsKLQkJCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIGlmIChwd2RpbmZvLT5pbnRlbnQgPiAocHdkaW5mby0+cGVlcl9pbnRlbnQgPj4gMSkpCi0JCQkJewotCQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX09LKTsKLQkJCQkJcnR3X3AycF9zZXRfcHJlX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fT0spOwotCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19PSyk7Ci0JCQkJCXJ0d19wMnBfc2V0X3ByZV9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX09LKTsKLQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9DTElFTlQpOwotCQkJCX0KLQotCQkJCWlmIChydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkKLQkJCQl7Ci0JCQkJCS8qCVN0b3JlIHRoZSBncm91cCBpZCBpbmZvcm1hdGlvbi4gKi8KLQkJCQkJbWVtY3B5KHB3ZGluZm8tPmdyb3VwaWRfaW5mby5nb19kZXZpY2VfYWRkciwgcHdkaW5mby0+ZGV2aWNlX2FkZHIsIEVUSF9BTEVOKTsKLQkJCQkJbWVtY3B5KHB3ZGluZm8tPmdyb3VwaWRfaW5mby5zc2lkLCBwd2RpbmZvLT5uZWdvX3NzaWQsIHB3ZGluZm8tPm5lZ29fc3NpZGxlbik7Ci0KLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qCVRyeSB0byBnZXQgdGhlIG9wZXJhdGlvbiBjaGFubmVsIGluZm9ybWF0aW9uICovCi0KLQkJCWF0dHJfY29udGVudGxlbiA9IDA7Ci0JCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9PUEVSQVRJTkdfQ0gsIG9wZXJhdGluZ2NoX2luZm8sICZhdHRyX2NvbnRlbnRsZW4pKQotCQkJewotCQkJCURCR184NzIzQSgiWyVzXSBQZWVyJ3Mgb3BlcmF0aW5nIGNoYW5uZWwgPSAlZFxuIiwgX19mdW5jX18sIG9wZXJhdGluZ2NoX2luZm9bNF0pOwotCQkJCXB3ZGluZm8tPnBlZXJfb3BlcmF0aW5nX2NoID0gb3BlcmF0aW5nY2hfaW5mb1s0XTsKLQkJCX0KLQotCQkJLyoJVHJ5IHRvIGdldCB0aGUgY2hhbm5lbCBsaXN0IGluZm9ybWF0aW9uICovCi0JCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9DSF9MSVNULCBwd2RpbmZvLT5jaGFubmVsX2xpc3RfYXR0ciwgJnB3ZGluZm8tPmNoYW5uZWxfbGlzdF9hdHRyX2xlbikpCi0JCQl7Ci0JCQkJREJHXzg3MjNBKCJbJXNdIGNoYW5uZWwgbGlzdCBhdHRyaWJ1dGUgZm91bmQsIGxlbiA9ICVkXG4iLCBfX2Z1bmNfXywgIHB3ZGluZm8tPmNoYW5uZWxfbGlzdF9hdHRyX2xlbik7Ci0KLQkJCQlwZWVyX2NoX251bSA9IHJ0d19wMnBfZ2V0X3BlZXJfY2hfbGlzdChwd2RpbmZvLCBwd2RpbmZvLT5jaGFubmVsX2xpc3RfYXR0ciwgcHdkaW5mby0+Y2hhbm5lbF9saXN0X2F0dHJfbGVuLCBwZWVyX2NoX2xpc3QpOwotCQkJCWNoX251bV9pbmNsdXNpb25lZCA9IHJ0d19wMnBfY2hfaW5jbHVzaW9uKCZwYWRhcHRlci0+bWxtZWV4dHByaXYsIHBlZXJfY2hfbGlzdCwgcGVlcl9jaF9udW0sIGNoX2xpc3RfaW5jbHVzaW9uZWQpOwotCi0JCQkJaWYgKGNoX251bV9pbmNsdXNpb25lZCA9PSAwKQotCQkJCXsKLQkJCQkJREJHXzg3MjNBKCJbJXNdIE5vIGNvbW1vbiBjaGFubmVsIGluIGNoYW5uZWwgbGlzdCFcbiIsIF9fZnVuY19fKTsKLQkJCQkJcmVzdWx0ID0gUDJQX1NUQVRVU19GQUlMX05PX0NPTU1PTl9DSDsKLQkJCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19GQUlMKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pKQotCQkJCXsKLQkJCQkJaWYgKCFydHdfcDJwX2lzX2NoYW5uZWxfbGlzdF9vayhwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCwKLQkJCQkJCQkJCQkJCQljaF9saXN0X2luY2x1c2lvbmVkLCBjaF9udW1faW5jbHVzaW9uZWQpKQotCQkJCQl7Ci0JCQkJCQl7Ci0JCQkJCQkJdTggb3BlcmF0aW5nY2hfaW5mb1s1XSA9IHsgMHgwMCB9LCBwZWVyX29wZXJhdGluZ19jaCA9IDA7Ci0JCQkJCQkJYXR0cl9jb250ZW50bGVuID0gMDsKLQotCQkJCQkJCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX09QRVJBVElOR19DSCwgb3BlcmF0aW5nY2hfaW5mbywgJmF0dHJfY29udGVudGxlbikpCi0JCQkJCQkJewotCQkJCQkJCQlwZWVyX29wZXJhdGluZ19jaCA9IG9wZXJhdGluZ2NoX2luZm9bNF07Ci0JCQkJCQkJfQotCi0JCQkJCQkJaWYgKHJ0d19wMnBfaXNfY2hhbm5lbF9saXN0X29rKHBlZXJfb3BlcmF0aW5nX2NoLAotCQkJCQkJCQkJCQkJCQkJY2hfbGlzdF9pbmNsdXNpb25lZCwgY2hfbnVtX2luY2x1c2lvbmVkKSkKLQkJCQkJCQl7Ci0JCQkJCQkJCS8qKgotCQkJCQkJCQkgKglDaGFuZ2Ugb3VyIG9wZXJhdGluZyBjaGFubmVsIGFzIHBlZXIncyBmb3IgY29tcGF0aWJpbGl0eS4KLQkJCQkJCQkJICovCi0JCQkJCQkJCXB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsID0gcGVlcl9vcGVyYXRpbmdfY2g7Ci0JCQkJCQkJCURCR184NzIzQSgiWyVzXSBDaGFuZ2Ugb3AgY2ggdG8gJTAyeCBhcyBwZWVyJ3NcbiIsIF9fZnVuY19fLCBwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UKLQkJCQkJCQl7Ci0JCQkJCQkJCS8qICBUYWtlIGZpcnN0IGNoYW5uZWwgb2YgY2hfbGlzdF9pbmNsdXNpb25lZCBhcyBvcGVyYXRpbmcgY2hhbm5lbCAqLwotCQkJCQkJCQlwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCA9IGNoX2xpc3RfaW5jbHVzaW9uZWRbMF07Ci0JCQkJCQkJCURCR184NzIzQSgiWyVzXSBDaGFuZ2Ugb3AgY2ggdG8gJTAyeFxuIiwgX19mdW5jX18sIHB3ZGluZm8tPm9wZXJhdGluZ19jaGFubmVsKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0KLQkJCQkJfQotCQkJCX0KLQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCURCR184NzIzQSgiWyVzXSBjaGFubmVsIGxpc3QgYXR0cmlidXRlIG5vdCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKLQkJCX0KLQotCQkJLyoJVHJ5IHRvIGdldCB0aGUgZ3JvdXAgaWQgaW5mb3JtYXRpb24gaWYgcGVlciBpcyBHTyAqLwotCQkJYXR0cl9jb250ZW50bGVuID0gMDsKLQkJCW1lbXNldChncm91cGlkLCAweDAwLCAzOCk7Ci0JCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9HUk9VUF9JRCwgZ3JvdXBpZCwgJmF0dHJfY29udGVudGxlbikpCi0JCQl7Ci0JCQkJbWVtY3B5KHB3ZGluZm8tPmdyb3VwaWRfaW5mby5nb19kZXZpY2VfYWRkciwgJmdyb3VwaWRbMF0sIEVUSF9BTEVOKTsKLQkJCQltZW1jcHkocHdkaW5mby0+Z3JvdXBpZF9pbmZvLnNzaWQsICZncm91cGlkWzZdLCBhdHRyX2NvbnRlbnRsZW4gLSBFVEhfQUxFTik7Ci0JCQl9Ci0KLQkJCS8qIEdldCB0aGUgbmV4dCBQMlAgSUUgKi8KLQkJCXAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKHAycF9pZStwMnBfaWVsZW4sIGllc19sZW4gLShwMnBfaWUgLWllcyArIHAycF9pZWxlbiksIE5VTEwsICZwMnBfaWVsZW4pOwotCQl9Ci0KLQl9Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCS8qCUFkZGVkIGJ5IEFsYmVydCAyMDExMTEyMiAqLwotCS8qCVRyeSB0byBnZXQgdGhlIFRDUCBwb3J0IGluZm9ybWF0aW9uIHdoZW4gcmVjZWl2aW5nIHRoZSBuZWdvdGlhdGlvbiByZXNwb25zZS4gKi8KLQlpZiAocnR3X2dldF93ZmRfaWUocGZyYW1lICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywgd2ZkX2llLCAmd2ZkX2llbGVuKSkKLQl7Ci0JCXU4CWF0dHJfY29udGVudFsgMTAgXSA9IHsgMHgwMCB9OwotCQl1MzIJYXR0cl9jb250ZW50bGVuID0gMDsKLQotCQlEQkdfODcyM0EoIlslc10gV0ZEIElFIEZvdW5kISFcbiIsIF9fZnVuY19fKTsKLQkJcnR3X2dldF93ZmRfYXR0cl9jb250ZW50KHdmZF9pZSwgd2ZkX2llbGVuLCBXRkRfQVRUUl9ERVZJQ0VfSU5GTywgYXR0cl9jb250ZW50LCAmYXR0cl9jb250ZW50bGVuKTsKLQkJaWYgKGF0dHJfY29udGVudGxlbikKLQkJewotCQkJcHdkaW5mby0+d2ZkX2luZm8tPnBlZXJfcnRzcF9jdHJscG9ydCA9IGdldF91bmFsaWduZWRfYmUxNihhdHRyX2NvbnRlbnQgKyAyKTsKLQkJCURCR184NzIzQSgiWyVzXSBQZWVyIFBPUlQgTlVNID0gJWRcbiIsIF9fZnVuY19fLCBwd2RpbmZvLT53ZmRfaW5mby0+cGVlcl9ydHNwX2N0cmxwb3J0KTsKLQkJfQotCX0KLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXU4IHByb2Nlc3NfcDJwX2dyb3VwX25lZ290YXRpb25fY29uZmlybTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLCB1aW50IGxlbikKLXsKLQl1OCAqIGllczsKLQl1MzIgaWVzX2xlbjsKLQl1OCAqIHAycF9pZTsKLQl1MzIJcDJwX2llbGVuID0gMDsKLQl1OAlyZXN1bHQgPSBQMlBfU1RBVFVTX1NVQ0NFU1M7Ci0JaWVzID0gcGZyYW1lICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXzsKLQlpZXNfbGVuID0gbGVuIC0gX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXzsKLQotCXAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKGllcywgaWVzX2xlbiwgTlVMTCwgJnAycF9pZWxlbik7Ci0Jd2hpbGUgKHAycF9pZSkJLyoJRm91bmQgdGhlIFAyUCBJRS4gKi8KLQl7Ci0JCXU4CWF0dHJfY29udGVudCA9IDB4MDAsIG9wZXJhdGluZ2NoX2luZm9bNV0gPSB7IDB4MDAgfTsKLQkJdTgJZ3JvdXBpZFsgMzggXSA9IHsgMHgwMCB9OwotCQl1MzIJYXR0cl9jb250ZW50bGVuID0gMDsKLQotCQlwd2RpbmZvLT5uZWdvdGlhdGlvbl9kaWFsb2dfdG9rZW4gPSAxOwotCQlydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX1NUQVRVUywgJmF0dHJfY29udGVudCwgJmF0dHJfY29udGVudGxlbik7Ci0JCWlmIChhdHRyX2NvbnRlbnRsZW4gPT0gMSkKLQkJewotCQkJREJHXzg3MjNBKCJbJXNdIFN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgYXR0cl9jb250ZW50KTsKLQkJCXJlc3VsdCA9IGF0dHJfY29udGVudDsKLQotCQkJaWYgKGF0dHJfY29udGVudCA9PSBQMlBfU1RBVFVTX1NVQ0NFU1MpCi0JCQl7Ci0JCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyKTsKLQotCQkJCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMDA5MTEgKi8KLQkJCQkvKglUb2RvOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGljaCBib3RoIEludGVudHMgYXJlIHRoZSBzYW1lLiAqLwotCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fT0spOwotCQkJCXJ0d19wMnBfc2V0X3ByZV9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX09LKTsKLQkJCQlpZiAoKHB3ZGluZm8tPmludGVudCkgPiAocHdkaW5mby0+cGVlcl9pbnRlbnQgPj4gMSkpCi0JCQkJewotCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoKHB3ZGluZm8tPmludGVudCkgPCAocHdkaW5mby0+cGVlcl9pbnRlbnQgPj4gMSkpCi0JCQkJewotCQkJCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCS8qCUhhdmUgdG8gY29tcGFyZSB0aGUgVGllIEJyZWFrZXIgKi8KLQkJCQkJaWYgKHB3ZGluZm8tPnBlZXJfaW50ZW50ICYgMHgwMSkKLQkJCQkJewotCQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9DTElFTlQpOwotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9HTyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9ERVZJQ0UpOwotCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fRkFJTCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKglUcnkgdG8gZ2V0IHRoZSBncm91cCBpZCBpbmZvcm1hdGlvbiAqLwotCQlhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQltZW1zZXQoZ3JvdXBpZCwgMHgwMCwgMzgpOwotCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9HUk9VUF9JRCwgZ3JvdXBpZCwgJmF0dHJfY29udGVudGxlbikpCi0JCXsKLQkJCURCR184NzIzQSgiWyVzXSBTc2lkID0gJXMsIHNzaWRsZW4gPSAlenVcbiIsIF9fZnVuY19fLCAmZ3JvdXBpZFtFVEhfQUxFTl0sIHN0cmxlbigmZ3JvdXBpZFtFVEhfQUxFTl0pKTsKLQkJCW1lbWNweShwd2RpbmZvLT5ncm91cGlkX2luZm8uZ29fZGV2aWNlX2FkZHIsICZncm91cGlkWzBdLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkocHdkaW5mby0+Z3JvdXBpZF9pbmZvLnNzaWQsICZncm91cGlkWzZdLCBhdHRyX2NvbnRlbnRsZW4gLSBFVEhfQUxFTik7Ci0JCX0KLQotCQlhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9PUEVSQVRJTkdfQ0gsIG9wZXJhdGluZ2NoX2luZm8sICZhdHRyX2NvbnRlbnRsZW4pKQotCQl7Ci0JCQlEQkdfODcyM0EoIlslc10gUGVlcidzIG9wZXJhdGluZyBjaGFubmVsID0gJWRcbiIsIF9fZnVuY19fLCBvcGVyYXRpbmdjaF9pbmZvWzRdKTsKLQkJCXB3ZGluZm8tPnBlZXJfb3BlcmF0aW5nX2NoID0gb3BlcmF0aW5nY2hfaW5mb1s0XTsKLQkJfQotCi0JCS8qIEdldCB0aGUgbmV4dCBQMlAgSUUgKi8KLQkJcDJwX2llID0gcnR3X2dldF9wMnBfaWUyM2EocDJwX2llK3AycF9pZWxlbiwgaWVzX2xlbiAtKHAycF9pZSAtaWVzICsgcDJwX2llbGVuKSwgTlVMTCwgJnAycF9pZWxlbik7Ci0KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi11OCBwcm9jZXNzX3AycF9wcmVzZW5jZV9yZXEyM2Eoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBmcmFtZSwgdWludCBsZW4pCi17Ci0JdTggKmZyYW1lX2JvZHk7Ci0JdTggZGlhbG9nVG9rZW4gPSAwOwotCXU4IHN0YXR1cyA9IFAyUF9TVEFUVVNfU1VDQ0VTUzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHBmcmFtZTsKLQotCWZyYW1lX2JvZHkgPSAodW5zaWduZWQgY2hhciAqKShwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKLQotCWRpYWxvZ1Rva2VuID0gZnJhbWVfYm9keVs2XTsKLQotCS8qIHRvZG86IGNoZWNrIE5vQSBhdHRyaWJ1dGUgKi8KLQotCWlzc3VlX3AycF9wcmVzZW5jZV9yZXNwKHB3ZGluZm8sIGhkci0+YWRkcjIsIHN0YXR1cywgZGlhbG9nVG9rZW4pOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbmRfcGhhc2VfaGFuZGxlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0Jc3RydWN0IG1sbWVfcHJpdgkJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IGNmZzgwMjExX3NzaWQgc3NpZDsKLQl1OAkJCQkJX3N0YXR1cyA9IDA7Ci0KLQotCi0JbWVtc2V0KCh1bnNpZ25lZCBjaGFyKikmc3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSk7Ci0JbWVtY3B5KHNzaWQuc3NpZCwgcHdkaW5mby0+cDJwX3dpbGRjYXJkX3NzaWQsIFAyUF9XSUxEQ0FSRF9TU0lEX0xFTik7Ci0Jc3NpZC5zc2lkX2xlbiA9IFAyUF9XSUxEQ0FSRF9TU0lEX0xFTjsKLQotCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9GSU5EX1BIQVNFX1NFQVJDSCk7Ci0KLQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci0JX3N0YXR1cyA9IHJ0d19zaXRlc3VydmV5X2NtZDIzYShwYWRhcHRlciwgJnNzaWQsIDEsIE5VTEwsIDApOwotCXNwaW5fdW5sb2NrX2JoKCZwbWxtZXByaXYtPmxvY2spOwotCi0KLX0KLQotdm9pZCBwMnBfY29uY3VycmVudF9oYW5kbGVyKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpOwotCi1zdGF0aWMgdm9pZCByZXN0b3JlX3AycF9zdGF0ZV9oYW5kbGVyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAgKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQotCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfR09ORUdPX0lORykgfHwgcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19GQUlMKSkKLQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9ERVZJQ0UpOwotCi0JcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgcnR3X3AycF9wcmVfc3RhdGUocHdkaW5mbykpOwotCi0JaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKSkgewotCQkvKglJbiB0aGUgUDJQIGNsaWVudCBtb2RlLCB0aGUgZHJpdmVyIHNob3VsZCBub3Qgc3dpdGNoIGJhY2sgdG8gaXRzIGxpc3RlbiBjaGFubmVsICovCi0JCS8qCWJlY2F1c2UgdGhpcyBQMlAgY2xpZW50IHNob3VsZCBzdGF5IGF0IHRoZSBvcGVyYXRpbmcgY2hhbm5lbCBvZiBQMlAgR08uICovCi0JCXNldF9jaGFubmVsX2J3bW9kZTIzYShwYWRhcHRlciwgcHdkaW5mby0+bGlzdGVuX2NoYW5uZWwsIEhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkUsIEhUX0NIQU5ORUxfV0lEVEhfMjApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJlX3R4X2ludml0ZXJlcV9oYW5kbGVyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAgKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQl1OAl2YWw4ID0gMTsKLQotCXNldF9jaGFubmVsX2J3bW9kZTIzYShwYWRhcHRlciwgcHdkaW5mby0+aW52aXRlcmVxX2luZm8ucGVlcl9jaCwgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRSwgSFRfQ0hBTk5FTF9XSURUSF8yMCk7Ci0JcGFkYXB0ZXItPkhhbEZ1bmMuU2V0SHdSZWdIYW5kbGVyKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9TSVRFU1VSVkVZLCAodTggKikoJnZhbDgpKTsKLQlpc3N1ZTIzYV9wcm9iZXJlcV9wMnAocGFkYXB0ZXIsIE5VTEwpOwotCW1vZF90aW1lcigmcHdkaW5mby0+cHJlX3R4X3NjYW5fdGltZXIsCi0JCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUDJQX1RYX1BSRVNDQU5fVElNRU9VVCkpOwotCi0KLX0KLQotc3RhdGljIHZvaWQgcHJlX3R4X3Byb3ZkaXNjX2hhbmRsZXIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCXU4CXZhbDggPSAxOwotCi0KLQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLnBlZXJfY2hhbm5lbF9udW1bMF0sIEhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkUsIEhUX0NIQU5ORUxfV0lEVEhfMjApOwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9TSVRFU1VSVkVZLCAodTggKikoJnZhbDgpKTsKLQlpc3N1ZTIzYV9wcm9iZXJlcV9wMnAocGFkYXB0ZXIsIE5VTEwpOwotCW1vZF90aW1lcigmcHdkaW5mby0+cHJlX3R4X3NjYW5fdGltZXIsCi0JCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUDJQX1RYX1BSRVNDQU5fVElNRU9VVCkpOwotCi0KLX0KLQotc3RhdGljIHZvaWQgcHJlX3R4X25lZ29yZXFfaGFuZGxlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JdTgJdmFsOCA9IDE7Ci0KLQotCXNldF9jaGFubmVsX2J3bW9kZTIzYShwYWRhcHRlciwgcHdkaW5mby0+bmVnb19yZXFfaW5mby5wZWVyX2NoYW5uZWxfbnVtWzBdLCBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFLCBIVF9DSEFOTkVMX1dJRFRIXzIwKTsKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX01MTUVfU0lURVNVUlZFWSwgKHU4ICopKCZ2YWw4KSk7Ci0JaXNzdWUyM2FfcHJvYmVyZXFfcDJwKHBhZGFwdGVyLCBOVUxMKTsKLQltb2RfdGltZXIoJnB3ZGluZm8tPnByZV90eF9zY2FuX3RpbWVyLAotCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFAyUF9UWF9QUkVTQ0FOX1RJTUVPVVQpKTsKLQotCi19Ci0KLXN0YXRpYyB2b2lkIHJvX2NoX2hhbmRsZXIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlzdHJ1Y3QgY2ZnODAyMTFfd2lmaWRpcmVjdF9pbmZvICpwY2ZnODAyMTFfd2RpbmZvID0gJnBhZGFwdGVyLT5jZmc4MDIxMV93ZGluZm87Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7Ci0KLQlpZiAocGNmZzgwMjExX3dkaW5mby0+cmVzdG9yZV9jaGFubmVsICE9IHBtbG1lZXh0LT5jdXJfY2hhbm5lbCkgewotCQlpZiAoIWNoZWNrX2Z3c3RhdGUoJnBhZGFwdGVyLT5tbG1lcHJpdiwgX0ZXX0xJTktFRCkpCi0JCQlwbWxtZWV4dC0+Y3VyX2NoYW5uZWwgPSBwY2ZnODAyMTFfd2RpbmZvLT5yZXN0b3JlX2NoYW5uZWw7Ci0KLQkJc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsCi0JCQkJICAgICAgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRSwKLQkJCQkgICAgICBIVF9DSEFOTkVMX1dJRFRIXzIwKTsKLQl9Ci0KLQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBydHdfcDJwX3ByZV9zdGF0ZShwd2RpbmZvKSk7Ci0KLQlwY2ZnODAyMTFfd2RpbmZvLT5pc19yb19jaCA9IGZhbHNlOwotCi0JREJHXzg3MjNBKCJjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkXG4iKTsKLQotCXJ0d19jZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKHBhZGFwdGVyLAotCQlwY2ZnODAyMTFfd2RpbmZvLT5yZW1haW5fb25fY2hfY29va2llLAotCQkmcGNmZzgwMjExX3dkaW5mby0+cmVtYWluX29uX2NoX2NoYW5uZWwsCi0JCXBjZmc4MDIxMV93ZGluZm8tPnJlbWFpbl9vbl9jaF90eXBlLCBHRlBfS0VSTkVMKTsKLX0KLQotc3RhdGljIHZvaWQgcm9fY2hfdGltZXJfcHJvY2VzcyAodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKilkYXRhOwotCi0JcDJwX3Byb3RvY29sX3drX2NtZDIzYShhZGFwdGVyLCBQMlBfUk9fQ0hfV0spOwotfQotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLXZvaWQgcnR3X2FwcGVuZF93ZmRfaWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmJ1ZiwgdTMyKiBsZW4pCi17Ci0JdW5zaWduZWQgY2hhcgkqZnJhbWVfYm9keTsKLQl1OCBjYXRlZ29yeSwgYWN0aW9uLCBPVUlfU3VidHlwZSwgZGlhbG9nVG9rZW4gPSAwOwotCXUzMgl3ZmRpZWxlbiA9IDA7Ci0KLQlmcmFtZV9ib2R5ID0gKHVuc2lnbmVkIGNoYXIgKikoYnVmICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSk7Ci0JY2F0ZWdvcnkgPSBmcmFtZV9ib2R5WzBdOwotCi0JaWYgKGNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDKSB7Ci0JCWFjdGlvbiA9IGZyYW1lX2JvZHlbMV07Ci0JCWlmIChhY3Rpb24gPT0gQUNUX1BVQkxJQ19WRU5ET1IgJiYKLQkJICAgICFtZW1jbXAoZnJhbWVfYm9keSsyLCBQMlBfT1VJMjNBLCA0KSkgewotCQkJT1VJX1N1YnR5cGUgPSBmcmFtZV9ib2R5WzZdOwotCQkJZGlhbG9nVG9rZW4gPSBmcmFtZV9ib2R5WzddOwotCQkJc3dpdGNoIChPVUlfU3VidHlwZSkvKiBPVUkgU3VidHlwZSAqLyB7Ci0JCQljYXNlIFAyUF9HT19ORUdPX1JFUToKLQkJCQl3ZmRpZWxlbiA9IGJ1aWxkX25lZ29fcmVxX3dmZF9pZSgmcGFkYXB0ZXItPndkaW5mbywgYnVmICsgKCpsZW4pKTsKLQkJCQkoKmxlbikgKz0gd2ZkaWVsZW47Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFAyUF9HT19ORUdPX1JFU1A6Ci0JCQkJd2ZkaWVsZW4gPSBidWlsZF9uZWdvX3Jlc3Bfd2ZkX2llKCZwYWRhcHRlci0+d2RpbmZvLCBidWYgKyAoKmxlbikpOwotCQkJCSgqbGVuKSArPSB3ZmRpZWxlbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgUDJQX0dPX05FR09fQ09ORjoKLQkJCQl3ZmRpZWxlbiA9IGJ1aWxkX25lZ29fY29uZmlybV93ZmRfaWUoJnBhZGFwdGVyLT53ZGluZm8sIGJ1ZiArICgqbGVuKSk7Ci0JCQkJKCpsZW4pICs9IHdmZGllbGVuOwotCQkJCWJyZWFrOwotCQkJY2FzZSBQMlBfSU5WSVRfUkVROgotCQkJCXdmZGllbGVuID0gYnVpbGRfaW52aXRhdGlvbl9yZXFfd2ZkX2llKCZwYWRhcHRlci0+d2RpbmZvLCBidWYgKyAoKmxlbikpOwotCQkJCSgqbGVuKSArPSB3ZmRpZWxlbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgUDJQX0lOVklUX1JFU1A6Ci0JCQkJd2ZkaWVsZW4gPSBidWlsZF9pbnZpdGF0aW9uX3Jlc3Bfd2ZkX2llKCZwYWRhcHRlci0+d2RpbmZvLCBidWYgKyAoKmxlbikpOwotCQkJCSgqbGVuKSArPSB3ZmRpZWxlbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgUDJQX0RFVkRJU0NfUkVROgotCQkJCWJyZWFrOwotCQkJY2FzZSBQMlBfREVWRElTQ19SRVNQOgotCQkJCWJyZWFrOwotCQkJY2FzZSBQMlBfUFJPVklTSU9OX0RJU0NfUkVROgotCQkJCXdmZGllbGVuID0gYnVpbGRfcHJvdmRpc2NfcmVxX3dmZF9pZSgmcGFkYXB0ZXItPndkaW5mbywgYnVmICsgKCpsZW4pKTsKLQkJCQkoKmxlbikgKz0gd2ZkaWVsZW47Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFAyUF9QUk9WSVNJT05fRElTQ19SRVNQOgotCQkJCXdmZGllbGVuID0gYnVpbGRfcHJvdmRpc2NfcmVzcF93ZmRfaWUoJnBhZGFwdGVyLT53ZGluZm8sIGJ1ZiArICgqbGVuKSk7Ci0JCQkJKCpsZW4pICs9IHdmZGllbGVuOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUMpIHsKLQkJT1VJX1N1YnR5cGUgPSBmcmFtZV9ib2R5WzVdOwotCQlkaWFsb2dUb2tlbiA9IGZyYW1lX2JvZHlbNl07Ci0JfSBlbHNlIHsKLQkJREJHXzg3MjNBKCIlcywgYWN0aW9uIGZyYW1lIGNhdGVnb3J5ID0lZFxuIiwgX19mdW5jX18sIGNhdGVnb3J5KTsKLQl9Ci19Ci0jZW5kaWYKLQotaW50IHJ0d19wMnBfY2hlY2tfZnJhbWVzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpidWYsIHUzMiBsZW4sIHU4IHR4KQotewotCWludCBpc19wMnBfZnJhbWUgPSAoLTEpOwotCXVuc2lnbmVkIGNoYXIJKmZyYW1lX2JvZHk7Ci0JdTggY2F0ZWdvcnksIGFjdGlvbiwgT1VJX1N1YnR5cGUsIGRpYWxvZ1Rva2VuID0gMDsKLQl1OCAqcDJwX2llID0gTlVMTDsKLQl1aW50IHAycF9pZWxlbiA9IDA7Ci0Jc3RydWN0IHJ0d193ZGV2X3ByaXYgKnB3ZGV2X3ByaXYgPSB3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KTsKLQotCWZyYW1lX2JvZHkgPSAodW5zaWduZWQgY2hhciAqKShidWYgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKTsKLQljYXRlZ29yeSA9IGZyYW1lX2JvZHlbMF07Ci0JLyoganVzdCBmb3IgY2hlY2sgKi8KLQlpZiAoY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMpCi0JewotCQlhY3Rpb24gPSBmcmFtZV9ib2R5WzFdOwotCQlpZiAoYWN0aW9uID09IEFDVF9QVUJMSUNfVkVORE9SICYmCi0JCSAgICAhbWVtY21wKGZyYW1lX2JvZHkrMiwgUDJQX09VSTIzQSwgNCkpIHsKLQkJCU9VSV9TdWJ0eXBlID0gZnJhbWVfYm9keVs2XTsKLQkJCWRpYWxvZ1Rva2VuID0gZnJhbWVfYm9keVs3XTsKLQkJCWlzX3AycF9mcmFtZSA9IE9VSV9TdWJ0eXBlOwotCQkJcDJwX2llID0gcnR3X2dldF9wMnBfaWUyM2EoCi0JCQkJKHU4ICopYnVmK3NpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikrX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywKLQkJCQlsZW4tc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKS1fUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLAotCQkJCU5VTEwsICZwMnBfaWVsZW4pOwotCi0JCQlzd2l0Y2ggKE9VSV9TdWJ0eXBlKSB7LyogT1VJIFN1YnR5cGUgKi8KLQkJCXU4ICpjb250OwotCQkJdWludCBjb250X2xlbjsKLQkJCWNhc2UgUDJQX0dPX05FR09fUkVROgotCQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9HT19ORUdPX1JFUSwgZGlhbG9nVG9rZW4gPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBkaWFsb2dUb2tlbik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFAyUF9HT19ORUdPX1JFU1A6Ci0JCQkJY29udCA9IHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfU1RBVFVTLCBOVUxMLCAmY29udF9sZW4pOwotCQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9HT19ORUdPX1JFU1AsIGRpYWxvZ1Rva2VuID0lZCwgc3RhdHVzOiVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBkaWFsb2dUb2tlbiwgY29udD8qY29udDotMSk7Ci0KLQkJCQlpZiAoIXR4KQotCQkJCQlwd2Rldl9wcml2LT5wcm92ZGlzY19yZXFfaXNzdWVkID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFAyUF9HT19ORUdPX0NPTkY6Ci0JCQkJY29udCA9IHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfU1RBVFVTLCBOVUxMLCAmY29udF9sZW4pOwotCQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9HT19ORUdPX0NPTkYsIGRpYWxvZ1Rva2VuID0lZCwgc3RhdHVzOiVkXG4iLAotCQkJCQkgICh0eCA9PSB0cnVlKT8iVHgiOiJSeCIsIGRpYWxvZ1Rva2VuLCBjb250Pypjb250Oi0xKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUDJQX0lOVklUX1JFUToKLQkJCXsKLQkJCQlzdHJ1Y3QgcnR3X3dkZXZfaW52aXRfaW5mbyogaW52aXRfaW5mbyA9ICZwd2Rldl9wcml2LT5pbnZpdF9pbmZvOwotCQkJCWludCBmbGFncyA9IC0xOwotCQkJCWludCBvcF9jaCA9IDA7Ci0KLQkJCQlpZiAoKGNvbnQgPSBydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX0lOVklUQVRJT05fRkxBR1MsIE5VTEwsICZjb250X2xlbikpKQotCQkJCQlmbGFncyA9ICpjb250OwotCQkJCWlmICgoY29udCA9IHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfT1BFUkFUSU5HX0NILCBOVUxMLCAmY29udF9sZW4pKSkKLQkJCQkJb3BfY2ggPSAqKGNvbnQrNCk7Ci0KLQkJCQlpZiAoaW52aXRfaW5mby0+dG9rZW4gIT0gZGlhbG9nVG9rZW4pCi0JCQkJCXJ0d193ZGV2X2ludml0X2luZm9faW5pdChpbnZpdF9pbmZvKTsKLQotCQkJCWludml0X2luZm8tPnRva2VuID0gZGlhbG9nVG9rZW47Ci0JCQkJaW52aXRfaW5mby0+ZmxhZ3MgPSAoZmxhZ3MgPT0tMSkgPyAweDAgOiBmbGFnczsKLQkJCQlpbnZpdF9pbmZvLT5yZXFfb3BfY2ggPSBvcF9jaDsKLQotCQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9JTlZJVF9SRVEsIGRpYWxvZ1Rva2VuID0lZCwgZmxhZ3M6MHglMDJ4LCBvcF9jaDolZFxuIiwKLQkJCQkJICAodHgpID8gIlR4IiA6ICJSeCIsIGRpYWxvZ1Rva2VuLCBmbGFncywgb3BfY2gpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBQMlBfSU5WSVRfUkVTUDoKLQkJCXsKLQkJCQlzdHJ1Y3QgcnR3X3dkZXZfaW52aXRfaW5mbyogaW52aXRfaW5mbyA9ICZwd2Rldl9wcml2LT5pbnZpdF9pbmZvOwotCQkJCWludCBzdGF0dXMgPSAtMTsKLQkJCQlpbnQgb3BfY2ggPSAwOwotCi0JCQkJaWYgKChjb250ID0gcnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9TVEFUVVMsIE5VTEwsICZjb250X2xlbikpKQotCQkJCQlzdGF0dXMgPSAqY29udDsKLQkJCQlpZiAoKGNvbnQgPSBydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX09QRVJBVElOR19DSCwgTlVMTCwgJmNvbnRfbGVuKSkpCi0JCQkJCW9wX2NoID0gKihjb250KzQpOwotCi0JCQkJaWYgKGludml0X2luZm8tPnRva2VuICE9IGRpYWxvZ1Rva2VuKSB7Ci0JCQkJCXJ0d193ZGV2X2ludml0X2luZm9faW5pdChpbnZpdF9pbmZvKTsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnZpdF9pbmZvLT50b2tlbiA9IDA7Ci0JCQkJCWludml0X2luZm8tPnN0YXR1cyA9IChzdGF0dXMgPT0tMSkgPyAweGZmIDogc3RhdHVzOwotCQkJCQlpbnZpdF9pbmZvLT5yc3Bfb3BfY2ggPSBvcF9jaDsKLQkJCQl9Ci0KLQkJCQlEQkdfODcyM0EoIlJUV18lczpQMlBfSU5WSVRfUkVTUCwgZGlhbG9nVG9rZW4gPSVkLCBzdGF0dXM6JWQsIG9wX2NoOiVkXG4iLAotCQkJCQkgICh0eCA9PSB0cnVlKT8iVHgiOiJSeCIsIGRpYWxvZ1Rva2VuLCBzdGF0dXMsIG9wX2NoKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgUDJQX0RFVkRJU0NfUkVROgotCQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9ERVZESVNDX1JFUSwgZGlhbG9nVG9rZW4gPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBkaWFsb2dUb2tlbik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFAyUF9ERVZESVNDX1JFU1A6Ci0JCQkJY29udCA9IHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfU1RBVFVTLCBOVUxMLCAmY29udF9sZW4pOwotCQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9ERVZESVNDX1JFU1AsIGRpYWxvZ1Rva2VuID0lZCwgc3RhdHVzOiVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBkaWFsb2dUb2tlbiwgY29udD8qY29udDotMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFAyUF9QUk9WSVNJT05fRElTQ19SRVE6Ci0JCQl7Ci0JCQkJc2l6ZV90IGZyYW1lX2JvZHlfbGVuID0gbGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQkJCQl1OCAqcDJwX2llOwotCQkJCXVpbnQgcDJwX2llbGVuID0gMDsKLQkJCQl1aW50IGNvbnRlbnRsZW4gPSAwOwotCi0JCQkJREJHXzg3MjNBKCJSVFdfJXM6UDJQX1BST1ZJU0lPTl9ESVNDX1JFUSwgZGlhbG9nVG9rZW4gPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBkaWFsb2dUb2tlbik7Ci0KLQkJCQlwd2Rldl9wcml2LT5wcm92ZGlzY19yZXFfaXNzdWVkID0gZmFsc2U7Ci0KLQkJCQlwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShmcmFtZV9ib2R5ICsgX1BVQkxJQ19BQ1RJT05fSUVfT0ZGU0VUXywKLQkJCQkJCQkgICBmcmFtZV9ib2R5X2xlbiAtIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF8sCi0JCQkJCQkJICAgTlVMTCwgJnAycF9pZWxlbik7Ci0JCQkJaWYgKHAycF9pZSkgewotCQkJCQlpZiAocnR3X2dldF9wMnBfYXR0cjIzYV9jb250ZW50KHAycF9pZSwgcDJwX2llbGVuLCBQMlBfQVRUUl9HUk9VUF9JRCwgTlVMTCwgJmNvbnRlbnRsZW4pKQotCQkJCQkJcHdkZXZfcHJpdi0+cHJvdmRpc2NfcmVxX2lzc3VlZCA9IGZhbHNlOy8qIGNhc2U6IHAycF9jbGllbnQgam9pbiBwMnAgR08gKi8KLQkJCQkJZWxzZQotCQkJCQkJcHdkZXZfcHJpdi0+cHJvdmRpc2NfcmVxX2lzc3VlZCA9IHRydWU7LyogY2FzZTogcDJwX2RldmljZXMgY29ubmVjdGlvbiBiZWZvcmUgTmVnbyByZXEuICovCi0JCQkJfQotCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBQMlBfUFJPVklTSU9OX0RJU0NfUkVTUDoKLQkJCQlEQkdfODcyM0EoIlJUV18lczpQMlBfUFJPVklTSU9OX0RJU0NfUkVTUCwgZGlhbG9nVG9rZW4gPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBkaWFsb2dUb2tlbik7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCURCR184NzIzQSgiUlRXXyVzOk9VSV9TdWJ0eXBlID0lZCwgZGlhbG9nVG9rZW4gPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlR4IjoiUngiLCBPVUlfU3VidHlwZSwgZGlhbG9nVG9rZW4pOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCX0KLQotCX0KLQllbHNlIGlmIChjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1ZFTkRPUl9TUEVDSUZJQykKLQl7Ci0JCU9VSV9TdWJ0eXBlID0gZnJhbWVfYm9keVs1XTsKLQkJZGlhbG9nVG9rZW4gPSBmcmFtZV9ib2R5WzZdOwotCi0JCWlzX3AycF9mcmFtZSA9IE9VSV9TdWJ0eXBlOwotCi0JCXN3aXRjaCAoT1VJX1N1YnR5cGUpIHsKLQkJY2FzZSBQMlBfTk9USUNFX09GX0FCU0VOQ0U6Ci0JCQlEQkdfODcyM0EoIlJUV18lczpQMlBfTk9USUNFX09GX0FCU0VOQ0UsIGRpYWxvZ1Rva2VuID0lZFxuIiwgKHR4ID09IHRydWUpPyJUWCI6IlJYIiwgZGlhbG9nVG9rZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUDJQX1BSRVNFTkNFX1JFUVVFU1Q6Ci0JCQlEQkdfODcyM0EoIlJUV18lczpQMlBfUFJFU0VOQ0VfUkVRVUVTVCwgZGlhbG9nVG9rZW4gPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlRYIjoiUlgiLCBkaWFsb2dUb2tlbik7Ci0JCQlicmVhazsKLQkJY2FzZSBQMlBfUFJFU0VOQ0VfUkVTUE9OU0U6Ci0JCQlEQkdfODcyM0EoIlJUV18lczpQMlBfUFJFU0VOQ0VfUkVTUE9OU0UsIGRpYWxvZ1Rva2VuID0lZFxuIiwgKHR4ID09IHRydWUpPyJUWCI6IlJYIiwgZGlhbG9nVG9rZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUDJQX0dPX0RJU0NfUkVRVUVTVDoKLQkJCURCR184NzIzQSgiUlRXXyVzOlAyUF9HT19ESVNDX1JFUVVFU1QsIGRpYWxvZ1Rva2VuID0lZFxuIiwgKHR4ID09IHRydWUpPyJUWCI6IlJYIiwgZGlhbG9nVG9rZW4pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEQkdfODcyM0EoIlJUV18lczpPVUlfU3VidHlwZSA9JWQsIGRpYWxvZ1Rva2VuID0lZFxuIiwgKHR4ID09IHRydWUpPyJUWCI6IlJYIiwgT1VJX1N1YnR5cGUsIGRpYWxvZ1Rva2VuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9IGVsc2UgewotCQlEQkdfODcyM0EoIlJUV18lczphY3Rpb24gZnJhbWUgY2F0ZWdvcnkgPSVkXG4iLCAodHggPT0gdHJ1ZSk/IlRYIjoiUlgiLCBjYXRlZ29yeSk7Ci0JfQotCXJldHVybiBpc19wMnBfZnJhbWU7Ci19Ci0KLXZvaWQgcnR3X2luaXRfY2ZnODAyMTFfd2lmaWRpcmVjdF9pbmZvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0Jc3RydWN0IGNmZzgwMjExX3dpZmlkaXJlY3RfaW5mbyAqcGNmZzgwMjExX3dkaW5mbyA9ICZwYWRhcHRlci0+Y2ZnODAyMTFfd2RpbmZvOwotCi0JbWVtc2V0KHBjZmc4MDIxMV93ZGluZm8sIDB4MDAsIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfd2lmaWRpcmVjdF9pbmZvKSk7Ci0KLQlzZXR1cF90aW1lcigmcGNmZzgwMjExX3dkaW5mby0+cmVtYWluX29uX2NoX3RpbWVyLAotCQkgICAgcm9fY2hfdGltZXJfcHJvY2VzcywgKHVuc2lnbmVkIGxvbmcpcGFkYXB0ZXIpOwotfQotCi12b2lkIHAycF9wcm90b2NvbF93a19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgaW50IGludENtZFR5cGUpCi17Ci0Jc3dpdGNoIChpbnRDbWRUeXBlKSB7Ci0JY2FzZSBQMlBfRklORF9QSEFTRV9XSzoKLQkJZmluZF9waGFzZV9oYW5kbGVyKHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBQMlBfUkVTVE9SRV9TVEFURV9XSzoKLQkJcmVzdG9yZV9wMnBfc3RhdGVfaGFuZGxlcihwYWRhcHRlcik7Ci0JCWJyZWFrOwotCWNhc2UgUDJQX1BSRV9UWF9QUk9WRElTQ19QUk9DRVNTX1dLOgotCQlwcmVfdHhfcHJvdmRpc2NfaGFuZGxlcihwYWRhcHRlcik7Ci0JCWJyZWFrOwotCWNhc2UgUDJQX1BSRV9UWF9JTlZJVEVSRVFfUFJPQ0VTU19XSzoKLQkJcHJlX3R4X2ludml0ZXJlcV9oYW5kbGVyKHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBQMlBfUFJFX1RYX05FR09SRVFfUFJPQ0VTU19XSzoKLQkJcHJlX3R4X25lZ29yZXFfaGFuZGxlcihwYWRhcHRlcik7Ci0JCWJyZWFrOwotCWNhc2UgUDJQX1JPX0NIX1dLOgotCQlyb19jaF9oYW5kbGVyKHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLXZvaWQgcHJvY2Vzc19wMnBfcHNfaWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKklFcywgdTMyIElFTGVuZ3RoKQotewotCXU4ICogaWVzOwotCXUzMiBpZXNfbGVuOwotCXU4ICogcDJwX2llOwotCXUzMglwMnBfaWVsZW4gPSAwOwotCXU4CW5vYV9hdHRyW01BWF9QMlBfSUVfTEVOXSA9IHsgMHgwMCB9Oy8qICBOb0EgbGVuZ3RoIHNob3VsZCBiZSBuKigxMykgKyAyICovCi0JdTMyCWF0dHJfY29udGVudGxlbiA9IDA7Ci0KLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvCSpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JdTgJZmluZF9wMnAgPSBmYWxzZSwgZmluZF9wMnBfcHMgPSBmYWxzZTsKLQl1OAlub2Ffb2Zmc2V0LCBub2FfbnVtLCBub2FfaW5kZXg7Ci0KLQotCi0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQl7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKElFTGVuZ3RoIDw9IF9CRUFDT05fSUVfT0ZGU0VUXykKLQkJcmV0dXJuOwotCi0JaWVzID0gSUVzICsgX0JFQUNPTl9JRV9PRkZTRVRfOwotCWllc19sZW4gPSBJRUxlbmd0aCAtIF9CRUFDT05fSUVfT0ZGU0VUXzsKLQotCXAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKGllcywgaWVzX2xlbiwgTlVMTCwgJnAycF9pZWxlbik7Ci0KLQl3aGlsZShwMnBfaWUpCi0JewotCQlmaW5kX3AycCA9IHRydWU7Ci0JCS8qICBHZXQgTm90aWNlIG9mIEFic2VuY2UgSUUuICovCi0JCWlmIChydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sIFAyUF9BVFRSX05PQSwgbm9hX2F0dHIsICZhdHRyX2NvbnRlbnRsZW4pKQotCQl7Ci0JCQlmaW5kX3AycF9wcyA9IHRydWU7Ci0JCQlub2FfaW5kZXggPSBub2FfYXR0clswXTsKLQotCQkJaWYgKChwd2RpbmZvLT5wMnBfcHNfbW9kZSA9PSBQMlBfUFNfTk9ORSkgfHwKLQkJCQkobm9hX2luZGV4ICE9IHB3ZGluZm8tPm5vYV9pbmRleCkpLyogIGlmIGluZGV4IGNoYW5nZSwgZHJpdmVyIHNob3VsZCByZWNvbmZpZ3VyZSByZWxhdGVkIHNldHRpbmcuICovCi0JCQl7Ci0JCQkJcHdkaW5mby0+bm9hX2luZGV4ID0gbm9hX2luZGV4OwotCQkJCXB3ZGluZm8tPm9wcF9wcyA9IG5vYV9hdHRyWzFdID4+IDc7Ci0JCQkJcHdkaW5mby0+Y3R3aW5kb3cgPSBub2FfYXR0clsxXSAmIDB4N0Y7Ci0KLQkJCQlub2Ffb2Zmc2V0ID0gMjsKLQkJCQlub2FfbnVtID0gMDsKLQkJCQkvKiAgTm9BIGxlbmd0aCBzaG91bGQgYmUgbiooMTMpICsgMiAqLwotCQkJCWlmIChhdHRyX2NvbnRlbnRsZW4gPiAyKQotCQkJCXsKLQkJCQkJd2hpbGUobm9hX29mZnNldCA8IGF0dHJfY29udGVudGxlbikKLQkJCQkJewotCQkJCQkJLyogbWVtY3B5KCZ3aWZpZGlyZWN0X2luZm8tPm5vYV9jb3VudFtub2FfbnVtXSwgJm5vYV9hdHRyW25vYV9vZmZzZXRdLCAxKTsgKi8KLQkJCQkJCXB3ZGluZm8tPm5vYV9jb3VudFtub2FfbnVtXSA9IG5vYV9hdHRyW25vYV9vZmZzZXRdOwotCQkJCQkJbm9hX29mZnNldCArPSAxOwotCi0JCQkJCQltZW1jcHkoJnB3ZGluZm8tPm5vYV9kdXJhdGlvbltub2FfbnVtXSwgJm5vYV9hdHRyW25vYV9vZmZzZXRdLCA0KTsKLQkJCQkJCW5vYV9vZmZzZXQgKz0gNDsKLQotCQkJCQkJbWVtY3B5KCZwd2RpbmZvLT5ub2FfaW50ZXJ2YWxbbm9hX251bV0sICZub2FfYXR0cltub2Ffb2Zmc2V0XSwgNCk7Ci0JCQkJCQlub2Ffb2Zmc2V0ICs9IDQ7Ci0KLQkJCQkJCW1lbWNweSgmcHdkaW5mby0+bm9hX3N0YXJ0X3RpbWVbbm9hX251bV0sICZub2FfYXR0cltub2Ffb2Zmc2V0XSwgNCk7Ci0JCQkJCQlub2Ffb2Zmc2V0ICs9IDQ7Ci0KLQkJCQkJCW5vYV9udW0rKzsKLQkJCQkJfQotCQkJCX0KLQkJCQlwd2RpbmZvLT5ub2FfbnVtID0gbm9hX251bTsKLQotCQkJCWlmIChwd2RpbmZvLT5vcHBfcHMgPT0gMSkKLQkJCQl7Ci0JCQkJCXB3ZGluZm8tPnAycF9wc19tb2RlID0gUDJQX1BTX0NUV0lORE9XOwotCQkJCQkvKiAgZHJpdmVyIHNob3VsZCB3YWl0IExQUyBmb3IgZW50ZXJpbmcgQ1RXaW5kb3cgKi8KLQkJCQkJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5iRndDdXJyZW50SW5QU01vZGUgPT0gdHJ1ZSkKLQkJCQkJewotCQkJCQkJcDJwX3BzX3drX2NtZDIzYShwYWRhcHRlciwgUDJQX1BTX0VOQUJMRSwgMSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSBpZiAocHdkaW5mby0+bm9hX251bSA+IDApCi0JCQkJewotCQkJCQlwd2RpbmZvLT5wMnBfcHNfbW9kZSA9IFAyUF9QU19OT0E7Ci0JCQkJCXAycF9wc193a19jbWQyM2EocGFkYXB0ZXIsIFAyUF9QU19FTkFCTEUsIDEpOwotCQkJCX0KLQkJCQllbHNlIGlmIChwd2RpbmZvLT5wMnBfcHNfbW9kZSA+IFAyUF9QU19OT05FKQotCQkJCXsKLQkJCQkJcDJwX3BzX3drX2NtZDIzYShwYWRhcHRlciwgUDJQX1BTX0RJU0FCTEUsIDEpOwotCQkJCX0KLQkJCX0KLQotCQkJYnJlYWs7IC8qICBmaW5kIHRhcmdldCwganVzdCBicmVhay4gKi8KLQkJfQotCi0JCS8qIEdldCB0aGUgbmV4dCBQMlAgSUUgKi8KLQkJcDJwX2llID0gcnR3X2dldF9wMnBfaWUyM2EocDJwX2llK3AycF9pZWxlbiwgaWVzX2xlbiAtKHAycF9pZSAtaWVzICsgcDJwX2llbGVuKSwgTlVMTCwgJnAycF9pZWxlbik7Ci0KLQl9Ci0KLQlpZiAoZmluZF9wMnAgPT0gdHJ1ZSkKLQl7Ci0JCWlmICgocHdkaW5mby0+cDJwX3BzX21vZGUgPiBQMlBfUFNfTk9ORSkgJiYgKGZpbmRfcDJwX3BzID09IGZhbHNlKSkKLQkJewotCQkJcDJwX3BzX3drX2NtZDIzYShwYWRhcHRlciwgUDJQX1BTX0RJU0FCTEUsIDEpOwotCQl9Ci0JfQotCi0KLX0KLQotdm9pZCBwMnBfcHNfd2tfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHAycF9wc19zdGF0ZSkKLXsKLQlzdHJ1Y3QgcHdyY3RybF9wcml2CQkqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCi0KLQotCS8qICBQcmUgYWN0aW9uIGZvciBwMnAgc3RhdGUgKi8KLQlzd2l0Y2ggKHAycF9wc19zdGF0ZSkKLQl7Ci0JCWNhc2UgUDJQX1BTX0RJU0FCTEU6Ci0JCQlwd2RpbmZvLT5wMnBfcHNfc3RhdGUgPSBwMnBfcHNfc3RhdGU7Ci0KLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfSDJDX0ZXX1AyUF9QU19PRkZMT0FELCAodTggKikoJnAycF9wc19zdGF0ZSkpOwotCi0JCQlwd2RpbmZvLT5ub2FfaW5kZXggPSAwOwotCQkJcHdkaW5mby0+Y3R3aW5kb3cgPSAwOwotCQkJcHdkaW5mby0+b3BwX3BzID0gMDsKLQkJCXB3ZGluZm8tPm5vYV9udW0gPSAwOwotCQkJcHdkaW5mby0+cDJwX3BzX21vZGUgPSBQMlBfUFNfTk9ORTsKLQkJCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYuYkZ3Q3VycmVudEluUFNNb2RlID09IHRydWUpCi0JCQl7Ci0JCQkJaWYgKHB3cnByaXYtPnNtYXJ0X3BzID09IDApCi0JCQkJewotCQkJCQlwd3Jwcml2LT5zbWFydF9wcyA9IDI7Ci0JCQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfSDJDX0ZXX1BXUk1PREUsICh1OCAqKSZwYWRhcHRlci0+cHdyY3RybHByaXYucHdyX21vZGUpOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFAyUF9QU19FTkFCTEU6Ci0JCQlpZiAocHdkaW5mby0+cDJwX3BzX21vZGUgPiBQMlBfUFNfTk9ORSkgewotCQkJCXB3ZGluZm8tPnAycF9wc19zdGF0ZSA9IHAycF9wc19zdGF0ZTsKLQotCQkJCWlmIChwd2RpbmZvLT5jdHdpbmRvdyA+IDApCi0JCQkJewotCQkJCQlpZiAocHdycHJpdi0+c21hcnRfcHMgIT0gMCkKLQkJCQkJewotCQkJCQkJcHdycHJpdi0+c21hcnRfcHMgPSAwOwotCQkJCQkJREJHXzg3MjNBKCIlcygpOiBFbnRlciBDVFcsIGNoYW5nZSBTbWFydFBTXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0gyQ19GV19QV1JNT0RFLCAodTggKikmcGFkYXB0ZXItPnB3cmN0cmxwcml2LnB3cl9tb2RlKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0gyQ19GV19QMlBfUFNfT0ZGTE9BRCwgKHU4ICopKCZwMnBfcHNfc3RhdGUpKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFAyUF9QU19TQ0FOOgotCQljYXNlIFAyUF9QU19TQ0FOX0RPTkU6Ci0JCWNhc2UgUDJQX1BTX0FMTFNUQVNMRUVQOgotCQkJaWYgKHB3ZGluZm8tPnAycF9wc19tb2RlID4gUDJQX1BTX05PTkUpIHsKLQkJCQlwd2RpbmZvLT5wMnBfcHNfc3RhdGUgPSBwMnBfcHNfc3RhdGU7Ci0JCQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9IMkNfRldfUDJQX1BTX09GRkxPQUQsICh1OCAqKSgmcDJwX3BzX3N0YXRlKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCX0KLQotCi19Ci0KLXU4IHAycF9wc193a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCBwMnBfcHNfc3RhdGUsIHU4IGVucXVldWUpCi17Ci0Jc3RydWN0IGNtZF9vYmoJKnBoMmM7Ci0Jc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtCSpwZHJ2ZXh0cmFfY21kX3Bhcm07Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCXN0cnVjdCBjbWRfcHJpdgkqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7Ci0JdTgJcmVzID0gX1NVQ0NFU1M7Ci0KLQotCi0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQkJcmV0dXJuIHJlczsKLQotCWlmIChlbnF1ZXVlKSB7Ci0JCXBoMmMgPSAoc3RydWN0IGNtZF9vYmogKilremFsbG9jKHNpemVvZihzdHJ1Y3QgY21kX29iaiksCi0JCQkJCQkgR0ZQX0FUT01JQyk7Ci0JCWlmICghcGgyYykgewotCQkJcmVzID0gX0ZBSUw7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQlwZHJ2ZXh0cmFfY21kX3Bhcm0gPSAoc3RydWN0IGRydmV4dHJhX2NtZF9wYXJtICopCi0JCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJ2ZXh0cmFfY21kX3Bhcm0pLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHBkcnZleHRyYV9jbWRfcGFybSA9PSBOVUxMKSB7Ci0JCQlrZnJlZShwaDJjKTsKLQkJCXJlcyA9IF9GQUlMOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJcGRydmV4dHJhX2NtZF9wYXJtLT5lY19pZCA9IFAyUF9QU19XS19DSUQ7Ci0JCXBkcnZleHRyYV9jbWRfcGFybS0+dHlwZV9zaXplID0gcDJwX3BzX3N0YXRlOwotCQlwZHJ2ZXh0cmFfY21kX3Bhcm0tPnBidWYgPSBOVUxMOwotCi0JCWluaXRfaDJmd2NtZF93X3Bhcm1fbm9fcnNwKHBoMmMsIHBkcnZleHRyYV9jbWRfcGFybSwgR0VOX0NNRF9DT0RFKF9TZXRfRHJ2X0V4dHJhKSk7Ci0KLQkJcmVzID0gcnR3X2VucXVldWVfY21kMjNhKHBjbWRwcml2LCBwaDJjKTsKLQl9Ci0JZWxzZQotCXsKLQkJcDJwX3BzX3drX2hkbDIzYShwYWRhcHRlciwgcDJwX3BzX3N0YXRlKTsKLQl9Ci0KLWV4aXQ6Ci0KLQotCi0JcmV0dXJuIHJlczsKLX0KLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotc3RhdGljIHZvaWQgcmVzZXRfY2hfc2l0ZXN1cnZleV90aW1lcl9wcm9jZXNzKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHJ0d19hZGFwdGVyICopZGF0YTsKLQlzdHJ1Y3QgIHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZhZGFwdGVyLT53ZGluZm87Ci0KLQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKQotCQlyZXR1cm47Ci0KLQlEQkdfODcyM0EoIlslc10gSW5cbiIsIF9fZnVuY19fKTsKLQkvKglSZXNldCB0aGUgb3BlcmF0aW9uIGNoYW5uZWwgaW5mb3JtYXRpb24gKi8KLQlwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5vcGVyYXRpb25fY2hbMF0gPSAwOwotCXB3ZGluZm8tPnJ4X2ludml0ZXJlcV9pbmZvLnNjYW5fb3BfY2hfb25seSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2NoX3NpdGVzdXJ2ZXlfdGltZXJfcHJvY2VzczIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKilkYXRhOwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmYWRhcHRlci0+d2RpbmZvOwotCi0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQkJcmV0dXJuOwotCi0JREJHXzg3MjNBKCJbJXNdIEluXG4iLCBfX2Z1bmNfXyk7Ci0JLyoJUmVzZXQgdGhlIG9wZXJhdGlvbiBjaGFubmVsIGluZm9ybWF0aW9uICovCi0JcHdkaW5mby0+cDJwX2luZm8ub3BlcmF0aW9uX2NoWzBdID0gMDsKLQlwd2RpbmZvLT5wMnBfaW5mby5zY2FuX29wX2NoX29ubHkgPSAwOwotfQotCi1zdGF0aWMgdm9pZCByZXN0b3JlX3AycF9zdGF0ZV90aW1lcl9wcm9jZXNzICh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBydHdfYWRhcHRlciAqKWRhdGE7Ci0Jc3RydWN0CXdpZmlkaXJlY3RfaW5mbwkJKnB3ZGluZm8gPSAmYWRhcHRlci0+d2RpbmZvOwotCi0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQkJcmV0dXJuOwotCi0JcDJwX3Byb3RvY29sX3drX2NtZDIzYShhZGFwdGVyLCBQMlBfUkVTVE9SRV9TVEFURV9XSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZV90eF9zY2FuX3RpbWVyX3Byb2Nlc3MgKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHJ0d19hZGFwdGVyICopZGF0YTsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJmFkYXB0ZXItPndkaW5mbzsKLQlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7Ci0KLQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci0KLQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX1RYX1BST1ZJU0lPTl9ESVNfUkVRKSkKLQl7Ci0JCWlmICh0cnVlID09IHB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLmJlbmFibGUpCS8qCXRoZSBwcm92aXNpb24gZGlzY292ZXJ5IHJlcXVlc3QgZnJhbWUgaXMgdHJpZ2dlciB0byBzZW5kIG9yIG5vdCAqLwotCQl7Ci0JCQlwMnBfcHJvdG9jb2xfd2tfY21kMjNhKGFkYXB0ZXIsIFAyUF9QUkVfVFhfUFJPVkRJU0NfUFJPQ0VTU19XSyk7Ci0JCQkvKiBpc3N1ZTIzYV9wcm9iZXJlcV9wMnAoYWRhcHRlciwgTlVMTCk7ICovCi0JCQkvKiBfc2V0X3RpbWVyKCZwd2RpbmZvLT5wcmVfdHhfc2Nhbl90aW1lciwgUDJQX1RYX1BSRVNDQU5fVElNRU9VVCk7ICovCi0JCX0KLQl9Ci0JZWxzZSBpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19JTkcpKQotCXsKLQkJaWYgKHRydWUgPT0gcHdkaW5mby0+bmVnb19yZXFfaW5mby5iZW5hYmxlKQotCQl7Ci0JCQlwMnBfcHJvdG9jb2xfd2tfY21kMjNhKGFkYXB0ZXIsIFAyUF9QUkVfVFhfTkVHT1JFUV9QUk9DRVNTX1dLKTsKLQkJfQotCX0KLQllbHNlIGlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfVFhfSU5WSVRFX1JFUSkpCi0JewotCQlpZiAodHJ1ZSA9PSBwd2RpbmZvLT5pbnZpdGVyZXFfaW5mby5iZW5hYmxlKQotCQl7Ci0JCQlwMnBfcHJvdG9jb2xfd2tfY21kMjNhKGFkYXB0ZXIsIFAyUF9QUkVfVFhfSU5WSVRFUkVRX1BST0NFU1NfV0spOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCURCR184NzIzQSgiWyVzXSBwMnBfc3RhdGUgaXMgJWQsIGlnbm9yZSEhXG4iLCBfX2Z1bmNfXywgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbmRfcGhhc2VfdGltZXJfcHJvY2VzcyAodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKilkYXRhOwotCXN0cnVjdAl3aWZpZGlyZWN0X2luZm8JCSpwd2RpbmZvID0gJmFkYXB0ZXItPndkaW5mbzsKLQotCWlmIChydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfTk9ORSkpCi0JCXJldHVybjsKLQotCWFkYXB0ZXItPndkaW5mby5maW5kX3BoYXNlX3N0YXRlX2V4Y2hhbmdlX2NudCsrOwotCi0JcDJwX3Byb3RvY29sX3drX2NtZDIzYShhZGFwdGVyLCBQMlBfRklORF9QSEFTRV9XSyk7Ci19Ci0KLXZvaWQgcmVzZXRfZ2xvYmFsX3dpZmlkaXJlY3RfaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8JKnB3ZGluZm87Ci0KLQlwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JcHdkaW5mby0+cGVyc2lzdGVudF9zdXBwb3J0ZWQgPSAwOwotCXB3ZGluZm8tPnNlc3Npb25fYXZhaWxhYmxlID0gdHJ1ZTsKLQlwd2RpbmZvLT53ZmRfdGRsc19lbmFibGUgPSAwOwotCXB3ZGluZm8tPndmZF90ZGxzX3dlYWtzZWMgPSAwOwotfQotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLWludCBydHdfaW5pdF93aWZpX2Rpc3BsYXlfaW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIqIHBhZGFwdGVyKQotewotCWludAlyZXMgPSBfU1VDQ0VTUzsKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8gKnB3ZmRfaW5mbyA9ICZwYWRhcHRlci0+d2ZkX2luZm87Ci0KLQkvKiAgVXNlZCBpbiBQMlAgYW5kIFRETFMgKi8KLQlwd2ZkX2luZm8tPnJ0c3BfY3RybHBvcnQgPSA1NTQ7Ci0JcHdmZF9pbmZvLT5wZWVyX3J0c3BfY3RybHBvcnQgPSAwOwkvKglSZXNldCB0byAwICovCi0JcHdmZF9pbmZvLT53ZmRfZW5hYmxlID0gZmFsc2U7Ci0JcHdmZF9pbmZvLT53ZmRfZGV2aWNlX3R5cGUgPSBXRkRfREVWSU5GT19QU0lOSzsKLQlwd2ZkX2luZm8tPnNjYW5fcmVzdWx0X3R5cGUgPSBTQ0FOX1JFU1VMVF9QMlBfT05MWTsKLQotCS8qICBVc2VkIGluIFAyUCAqLwotCXB3ZmRfaW5mby0+cGVlcl9zZXNzaW9uX2F2YWlsID0gdHJ1ZTsKLQlwd2ZkX2luZm8tPndmZF9wYyA9IGZhbHNlOwotCi0JLyogIFVzZWQgaW4gVERMUyAqLwotCW1lbXNldChwd2ZkX2luZm8tPmlwX2FkZHJlc3MsIDB4MDAsIDQpOwotCW1lbXNldChwd2ZkX2luZm8tPnBlZXJfaXBfYWRkcmVzcywgMHgwMCwgNCk7Ci0JcmV0dXJuIHJlczsKLX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi12b2lkIHJ0d19pbml0X3dpZmlkaXJlY3RfdGltZXJzMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpCi17Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCi0Jc2V0dXBfdGltZXIoJnB3ZGluZm8tPmZpbmRfcGhhc2VfdGltZXIsIGZpbmRfcGhhc2VfdGltZXJfcHJvY2VzcywKLQkJICAgICh1bnNpZ25lZCBsb25nKXBhZGFwdGVyKTsKLQlzZXR1cF90aW1lcigmcHdkaW5mby0+cmVzdG9yZV9wMnBfc3RhdGVfdGltZXIsCi0JCSAgICByZXN0b3JlX3AycF9zdGF0ZV90aW1lcl9wcm9jZXNzLCAodW5zaWduZWQgbG9uZylwYWRhcHRlcik7Ci0Jc2V0dXBfdGltZXIoJnB3ZGluZm8tPnByZV90eF9zY2FuX3RpbWVyLCBwcmVfdHhfc2Nhbl90aW1lcl9wcm9jZXNzLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpcGFkYXB0ZXIpOwotCXNldHVwX3RpbWVyKCZwd2RpbmZvLT5yZXNldF9jaF9zaXRlc3VydmV5LAotCQkgICAgcmVzZXRfY2hfc2l0ZXN1cnZleV90aW1lcl9wcm9jZXNzLCAodW5zaWduZWQgbG9uZylwYWRhcHRlcik7Ci0Jc2V0dXBfdGltZXIoJnB3ZGluZm8tPnJlc2V0X2NoX3NpdGVzdXJ2ZXkyLAotCQkgICAgcmVzZXRfY2hfc2l0ZXN1cnZleV90aW1lcl9wcm9jZXNzMiwKLQkJICAgICh1bnNpZ25lZCBsb25nKXBhZGFwdGVyKTsKLX0KLQotdm9pZCBydHdfaW5pdF93aWZpZGlyZWN0X2FkZHJzMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIsIHU4ICpkZXZfYWRkciwgdTggKmlmYWNlX2FkZHIpCi17Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0KLQkvKmluaXQgZGV2aWNlJmludGVyZmFjZSBhZGRyZXNzICovCi0JaWYgKGRldl9hZGRyKSB7Ci0JCW1lbWNweShwd2RpbmZvLT5kZXZpY2VfYWRkciwgZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQl9Ci0JaWYgKGlmYWNlX2FkZHIpIHsKLQkJbWVtY3B5KHB3ZGluZm8tPmludGVyZmFjZV9hZGRyLCBpZmFjZV9hZGRyLCBFVEhfQUxFTik7Ci0JfQotI2VuZGlmCi19Ci0KLXZvaWQgaW5pdF93aWZpZGlyZWN0X2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBQMlBfUk9MRSByb2xlKQotewotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8JKnB3ZGluZm87Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8JKnB3ZmRfaW5mbyA9ICZwYWRhcHRlci0+d2ZkX2luZm87Ci0jZW5kaWYKLQotCXB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQotCXB3ZGluZm8tPnBhZGFwdGVyID0gcGFkYXB0ZXI7Ci0KLQkvKgkxLCA2LCAxMSBhcmUgdGhlIHNvY2lhbCBjaGFubmVsIGRlZmluZWQgaW4gdGhlIFdpRmkgRGlyZWN0IHNwZWNpZmljYXRpb24uICovCi0JcHdkaW5mby0+c29jaWFsX2NoYW5bMF0gPSAxOwotCXB3ZGluZm8tPnNvY2lhbF9jaGFuWzFdID0gNjsKLQlwd2RpbmZvLT5zb2NpYWxfY2hhblsyXSA9IDExOwotCXB3ZGluZm8tPnNvY2lhbF9jaGFuWzNdID0gMDsJLyoJY2hhbm5lbCAwIGZvciBzY2FubmluZyBlbmRpbmcgaW4gc2l0ZSBzdXJ2ZXkgZnVuY3Rpb24uICovCi0KLQkvKglVc2UgdGhlIGNoYW5uZWwgMTEgYXMgdGhlIGxpc3RlbiBjaGFubmVsICovCi0JcHdkaW5mby0+bGlzdGVuX2NoYW5uZWwgPSAxMTsKLQotCWlmIChyb2xlID09IFAyUF9ST0xFX0RFVklDRSkKLQl7Ci0JCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKTsKLQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0xJU1RFTik7Ci0JCXB3ZGluZm8tPmludGVudCA9IDE7Ci0JCXJ0d19wMnBfc2V0X3ByZV9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfTElTVEVOKTsKLQl9Ci0JZWxzZSBpZiAocm9sZSA9PSBQMlBfUk9MRV9DTElFTlQpCi0JewotCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0NMSUVOVCk7Ci0JCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fT0spOwotCQlwd2RpbmZvLT5pbnRlbnQgPSAxOwotCQlydHdfcDJwX3NldF9wcmVfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19PSyk7Ci0JfQotCWVsc2UgaWYgKHJvbGUgPT0gUDJQX1JPTEVfR08pCi0JewotCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19PSyk7Ci0JCXB3ZGluZm8tPmludGVudCA9IDE1OwotCQlydHdfcDJwX3NldF9wcmVfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19PSyk7Ci0JfQotCi0vKglVc2UgdGhlIE9GRE0gcmF0ZSBpbiB0aGUgUDJQIHByb2JlIHJlc3BvbnNlIGZyYW1lLiAoNihCKSwgOShCKSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NCkgKi8KLQlwd2RpbmZvLT5zdXBwb3J0X3JhdGVbMF0gPSAweDhjOwkvKgk2KEIpICovCi0JcHdkaW5mby0+c3VwcG9ydF9yYXRlWzFdID0gMHg5MjsJLyoJOShCKSAqLwotCXB3ZGluZm8tPnN1cHBvcnRfcmF0ZVsyXSA9IDB4MTg7CS8qCTEyICovCi0JcHdkaW5mby0+c3VwcG9ydF9yYXRlWzNdID0gMHgyNDsJLyoJMTggKi8KLQlwd2RpbmZvLT5zdXBwb3J0X3JhdGVbNF0gPSAweDMwOwkvKgkyNCAqLwotCXB3ZGluZm8tPnN1cHBvcnRfcmF0ZVs1XSA9IDB4NDg7CS8qCTM2ICovCi0JcHdkaW5mby0+c3VwcG9ydF9yYXRlWzZdID0gMHg2MDsJLyoJNDggKi8KLQlwd2RpbmZvLT5zdXBwb3J0X3JhdGVbN10gPSAweDZjOwkvKgk1NCAqLwotCi0JbWVtY3B5KCh2b2lkKikgcHdkaW5mby0+cDJwX3dpbGRjYXJkX3NzaWQsICJESVJFQ1QtIiwgNyk7Ci0KLQltZW1zZXQocHdkaW5mby0+ZGV2aWNlX25hbWUsIDB4MDAsIFdQU19NQVhfREVWSUNFX05BTUVfTEVOKTsKLQlwd2RpbmZvLT5kZXZpY2VfbmFtZV9sZW4gPSAwOwotCi0JbWVtc2V0KCZwd2RpbmZvLT5pbnZpdGVyZXFfaW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCB0eF9pbnZpdGVfcmVxX2luZm8pKTsKLQlwd2RpbmZvLT5pbnZpdGVyZXFfaW5mby50b2tlbiA9IDM7CS8qCVRva2VuIHVzZWQgZm9yIFAyUCBpbnZpdGF0aW9uIHJlcXVlc3QgZnJhbWUuICovCi0KLQltZW1zZXQoJnB3ZGluZm8tPmludml0ZXJlc3BfaW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCB0eF9pbnZpdGVfcmVzcF9pbmZvKSk7Ci0JcHdkaW5mby0+aW52aXRlcmVzcF9pbmZvLnRva2VuID0gMDsKLQotCXB3ZGluZm8tPnByb2ZpbGVpbmRleCA9IDA7Ci0JbWVtc2V0KCZwd2RpbmZvLT5wcm9maWxlaW5mb1sgMCBdLCAweDAwLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfaW5mbykgKiBQMlBfTUFYX1BFUlNJU1RFTlRfR1JPVVBfTlVNKTsKLQotCXJ0d19wMnBfZmluZHBoYXNlX2V4X3NldChwd2RpbmZvLCBQMlBfRklORFBIQVNFX0VYX05PTkUpOwotCi0JcHdkaW5mby0+bGlzdGVuX2R3ZWxsID0gKHU4KSAoKGppZmZpZXMgJSAzKSArIDEpOwotCS8qIERCR184NzIzQSgiWyVzXSBsaXN0ZW5fZHdlbGwgdGltZSBpcyAlZDAwbXNcbiIsIF9fZnVuY19fLCBwd2RpbmZvLT5saXN0ZW5fZHdlbGwpOyAqLwotCi0JbWVtc2V0KCZwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCB0eF9wcm92ZGlzY19yZXFfaW5mbykpOwotCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLndwc19jb25maWdfbWV0aG9kX3JlcXVlc3QgPSBXUFNfQ01fTk9ORTsKLQotCW1lbXNldCgmcHdkaW5mby0+bmVnb19yZXFfaW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCB0eF9uZWdvX3JlcV9pbmZvKSk7Ci0KLQlwd2RpbmZvLT5kZXZpY2VfcGFzc3dvcmRfaWRfZm9yX25lZ28gPSBXUFNfRFBJRF9QQkM7Ci0JcHdkaW5mby0+bmVnb3RpYXRpb25fZGlhbG9nX3Rva2VuID0gMTsKLQotCW1lbXNldChwd2RpbmZvLT5uZWdvX3NzaWQsIDB4MDAsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOwotCXB3ZGluZm8tPm5lZ29fc3NpZGxlbiA9IDA7Ci0KLQlwd2RpbmZvLT51aV9nb3Rfd3BzX2luZm8gPSBQMlBfTk9fV1BTSU5GTzsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXB3ZGluZm8tPnN1cHBvcnRlZF93cHNfY20gPSBXUFNfQ09ORklHX01FVEhPRF9ESVNQTEFZICB8IFdQU19DT05GSUdfTUVUSE9EX1BCQzsKLQlwd2RpbmZvLT53ZmRfaW5mbyA9IHB3ZmRfaW5mbzsKLSNlbHNlCi0JcHdkaW5mby0+c3VwcG9ydGVkX3dwc19jbSA9IFdQU19DT05GSUdfTUVUSE9EX0RJU1BMQVkgfCBXUFNfQ09ORklHX01FVEhPRF9QQkMgfCBXUFNfQ09ORklHX01FVEhPRF9LRVlQQUQ7Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQlwd2RpbmZvLT5jaGFubmVsX2xpc3RfYXR0cl9sZW4gPSAwOwotCW1lbXNldChwd2RpbmZvLT5jaGFubmVsX2xpc3RfYXR0ciwgMHgwMCwgMTAwKTsKLQotCW1lbXNldChwd2RpbmZvLT5yeF9wcm92X2Rpc2NfaW5mby5zdHJjb25maWdfbWV0aG9kX2Rlc2Nfb2ZfcHJvdl9kaXNjX3JlcSwgMHgwMCwgNCk7Ci0JbWVtc2V0KHB3ZGluZm8tPnJ4X3Byb3ZfZGlzY19pbmZvLnN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxLCAnMCcsIDMpOwotCW1lbXNldCgmcHdkaW5mby0+Z3JvdXBpZF9pbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IGdyb3VwX2lkX2luZm8pKTsKLQlwd2RpbmZvLT53ZmRfdGRsc19lbmFibGUgPSAwOwotCW1lbXNldChwd2RpbmZvLT5wMnBfcGVlcl9pbnRlcmZhY2VfYWRkciwgMHgwMCwgRVRIX0FMRU4pOwotCW1lbXNldChwd2RpbmZvLT5wMnBfcGVlcl9kZXZpY2VfYWRkciwgMHgwMCwgRVRIX0FMRU4pOwotCi0JcHdkaW5mby0+cnhfaW52aXRlcmVxX2luZm8ub3BlcmF0aW9uX2NoWzBdID0gMDsKLQlwd2RpbmZvLT5yeF9pbnZpdGVyZXFfaW5mby5vcGVyYXRpb25fY2hbMV0gPSAwOwkvKglVc2VkIHRvIGluZGljYXRlIHRoZSBzY2FuIGVuZCBpbiBzaXRlIHN1cnZleSBmdW5jdGlvbiAqLwotCXB3ZGluZm8tPnJ4X2ludml0ZXJlcV9pbmZvLnNjYW5fb3BfY2hfb25seSA9IDA7Ci0JcHdkaW5mby0+cDJwX2luZm8ub3BlcmF0aW9uX2NoWzBdID0gMDsKLQlwd2RpbmZvLT5wMnBfaW5mby5vcGVyYXRpb25fY2hbMV0gPSAwOwkJCS8qCVVzZWQgdG8gaW5kaWNhdGUgdGhlIHNjYW4gZW5kIGluIHNpdGUgc3VydmV5IGZ1bmN0aW9uICovCi0JcHdkaW5mby0+cDJwX2luZm8uc2Nhbl9vcF9jaF9vbmx5ID0gMDsKLX0KLQotaW50IHJ0d19wMnBfZW5hYmxlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gUDJQX1JPTEUgcm9sZSkKLXsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JaW50IHJldCA9IF9TVUNDRVNTOwotCi0JaWYgKHJvbGUgPT0gUDJQX1JPTEVfREVWSUNFIHx8IHJvbGUgPT0gUDJQX1JPTEVfQ0xJRU5UIHx8Ci0JICAgIHJvbGUgPT0gUDJQX1JPTEVfR08pIHsKLQkJLyogbGVhdmUgSVBTL0F1dG9zdXNwZW5kICovCi0JCWlmIChfRkFJTCA9PSBydHdfcHdyX3dha2V1cChwYWRhcHRlcikpIHsKLQkJCXJldCA9IF9GQUlMOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJLyoJQWRkZWQgYnkgQWxiZXJ0IDIwMTEvMDMvMjIgKi8KLQkJLyoJSW4gdGhlIFAyUCBtb2RlLCB0aGUgZHJpdmVyIHNob3VsZCBub3Qgc3VwcG9ydCB0aGUgYiBtb2RlLiAqLwotCQkvKglTbywgdGhlIFR4IHBhY2tldCBzaG91bGRuJ3QgdXNlIHRoZSBDQ0sgcmF0ZSAqLwotCQl1cGRhdGVfdHhfYmFzaWNfcmF0ZTIzYShwYWRhcHRlciwgV0lSRUxFU1NfMTFBR04pOwotCi0JCS8qIEVuYWJsZSBQMlAgZnVuY3Rpb24gKi8KLQkJaW5pdF93aWZpZGlyZWN0X2luZm8yM2EocGFkYXB0ZXIsIHJvbGUpOwotCi0JCXJ0d19oYWxfc2V0X29kbV92YXIyM2EocGFkYXB0ZXIsIEhBTF9PRE1fUDJQX1NUQVRFLCBOVUxMLCB0cnVlKTsKLQkJI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCXJ0d19oYWxfc2V0X29kbV92YXIyM2EocGFkYXB0ZXIsIEhBTF9PRE1fV0lGSV9ESVNQTEFZX1NUQVRFLCBOVUxMLCB0cnVlKTsKLQkJI2VuZGlmCi0KLQl9Ci0JZWxzZSBpZiAocm9sZSA9PSBQMlBfUk9MRV9ESVNBQkxFKQotCXsKLQkJaWYgKF9GQUlMID09IHJ0d19wd3Jfd2FrZXVwKHBhZGFwdGVyKSkgewotCQkJcmV0ID0gX0ZBSUw7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQkvKiBEaXNhYmxlIFAyUCBmdW5jdGlvbiAqLwotCQlpZiAoIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQkJewotCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPmZpbmRfcGhhc2VfdGltZXIpOwotCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyKTsKLQkJCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5wcmVfdHhfc2Nhbl90aW1lcik7Ci0JCQlkZWxfdGltZXJfc3luYygmcHdkaW5mby0+cmVzZXRfY2hfc2l0ZXN1cnZleSk7Ci0JCQlkZWxfdGltZXJfc3luYygmcHdkaW5mby0+cmVzZXRfY2hfc2l0ZXN1cnZleTIpOwotCQkJcmVzZXRfY2hfc2l0ZXN1cnZleV90aW1lcl9wcm9jZXNzKCh1bnNpZ25lZCBsb25nKXBhZGFwdGVyKTsKLQkJCXJlc2V0X2NoX3NpdGVzdXJ2ZXlfdGltZXJfcHJvY2VzczIoKHVuc2lnbmVkIGxvbmcpcGFkYXB0ZXIpOwotCQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpOwotCQkJcnR3X3AycF9zZXRfcm9sZShwd2RpbmZvLCBQMlBfUk9MRV9ESVNBQkxFKTsKLQkJCW1lbXNldCgmcHdkaW5mby0+cnhfcHJvdl9kaXNjX2luZm8sIDB4MDAsIHNpemVvZihzdHJ1Y3QgcnhfcHJvdmRpc2NfcmVxX2luZm8pKTsKLQkJfQotCi0JCXJ0d19oYWxfc2V0X29kbV92YXIyM2EocGFkYXB0ZXIsIEhBTF9PRE1fUDJQX1NUQVRFLCBOVUxMLCBmYWxzZSk7Ci0JCSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQlydHdfaGFsX3NldF9vZG1fdmFyMjNhKHBhZGFwdGVyLCBIQUxfT0RNX1dJRklfRElTUExBWV9TVEFURSwgTlVMTCwgZmFsc2UpOwotCQkjZW5kaWYKLQotCQkvKiBSZXN0b3JlIHRvIGluaXRpYWwgc2V0dGluZy4gKi8KLQkJdXBkYXRlX3R4X2Jhc2ljX3JhdGUyM2EocGFkYXB0ZXIsIHBhZGFwdGVyLT5yZWdpc3RyeXByaXYud2lyZWxlc3NfbW9kZSk7Ci0JfQotCi1leGl0OgotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19wd3JjdHJsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3B3cmN0cmwuYwppbmRleCA4ZGRkNjdmLi5kYmQwMWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3B3cmN0cmwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3B3cmN0cmwuYwpAQCAtMTcsMTAgKzE3LDExIEBACiAjaW5jbHVkZSA8b3NkZXBfc2VydmljZS5oPgogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogI2luY2x1ZGUgPG9zZGVwX2ludGYuaD4KKyNpbmNsdWRlIDxydGw4NzIzYV9jbWQuaD4KKyNpbmNsdWRlIDxydHdfc3Jlc2V0Lmg+CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLSNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KLSNlbmRpZgorI2luY2x1ZGUgPHJ0bDg3MjNhX2J0X2ludGYuaD4KKyNpbmNsdWRlIDx1c2Jfb3BzX2xpbnV4Lmg+CiAKIHZvaWQgaXBzX2VudGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKQogewpAQCAtMzUsMTEgKzM2LDkgQEAKIAogCXB3cnByaXYtPmlwc19lbnRlcjIzYV9jbnRzKys7CiAJREJHXzg3MjNBKCI9PT5pcHNfZW50ZXIyM2EgY250czolZFxuIiwgcHdycHJpdi0+aXBzX2VudGVyMjNhX2NudHMpOwotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAotCUJURE1fVHVybk9mZkJ0Q29leGlzdEJlZm9yZUVudGVySVBTKHBhZGFwdGVyKTsKLSNlbmRpZgotCWlmIChyZl9vZmYgPT0gcHdycHJpdi0+Y2hhbmdlX3JmcHdyc3RhdGUpCi0JeworCXJ0bDg3MjNhX0JUX2Rpc2FibGVfY29leGlzdChwYWRhcHRlcik7CisKKwlpZiAocHdycHJpdi0+Y2hhbmdlX3JmcHdyc3RhdGUgPT0gcmZfb2ZmKSB7CiAJCXB3cnByaXYtPmJwb3dlcl9zYXZpbmcgPSB0cnVlOwogCQlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAibm9saW5rZWQgcG93ZXIgc2F2ZSBlbnRlclxuIik7CiAKQEAgLTY0LDI1ICs2MywzNCBAQAogCiAJZG93bigmcHdycHJpdi0+bG9jayk7CiAKLQlpZiAoKHB3cnByaXYtPnJmX3B3cnN0YXRlID09IHJmX29mZikgJiYhcHdycHJpdi0+Ymlwc19wcm9jZXNzaW5nKQotCXsKKwlpZiAocHdycHJpdi0+cmZfcHdyc3RhdGUgPT0gcmZfb2ZmICYmICFwd3Jwcml2LT5iaXBzX3Byb2Nlc3NpbmcpIHsKIAkJcHdycHJpdi0+Ymlwc19wcm9jZXNzaW5nID0gdHJ1ZTsKIAkJcHdycHJpdi0+Y2hhbmdlX3JmcHdyc3RhdGUgPSByZl9vbjsKIAkJcHdycHJpdi0+aXBzX2xlYXZlMjNhX2NudHMrKzsKLQkJREJHXzg3MjNBKCI9PT5pcHNfbGVhdmUyM2EgY250czolZFxuIiwgcHdycHJpdi0+aXBzX2xlYXZlMjNhX2NudHMpOworCQlEQkdfODcyM0EoIj09Pmlwc19sZWF2ZTIzYSBjbnRzOiVkXG4iLAorCQkJICBwd3Jwcml2LT5pcHNfbGVhdmUyM2FfY250cyk7CiAKLQkJaWYgKChyZXN1bHQgPSBydHdfaXBzX3B3cl91cDIzYShwYWRhcHRlcikpID09IF9TVUNDRVNTKSB7CisJCXJlc3VsdCA9IHJ0d19pcHNfcHdyX3VwMjNhKHBhZGFwdGVyKTsKKwkJaWYgKHJlc3VsdCA9PSBfU1VDQ0VTUykKIAkJCXB3cnByaXYtPnJmX3B3cnN0YXRlID0gcmZfb247Ci0JCX0KKwogCQlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAibm9saW5rZWQgcG93ZXIgc2F2ZSBsZWF2ZVxuIik7CiAKLQkJaWYgKChfV0VQNDBfID09IHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0pIHx8KF9XRVAxMDRfID09IHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0pKQotCQl7Ci0JCQlEQkdfODcyM0EoIj09PiVzLCBjaGFubmVsKCVkKSwgcHJvY2Vzc2luZygleClcbiIsIF9fZnVuY19fLCBwYWRhcHRlci0+bWxtZWV4dHByaXYuY3VyX2NoYW5uZWwsIHB3cnByaXYtPmJpcHNfcHJvY2Vzc2luZyk7Ci0JCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHBhZGFwdGVyLT5tbG1lZXh0cHJpdi5jdXJfY2hhbm5lbCwgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRSwgSFRfQ0hBTk5FTF9XSURUSF8yMCk7Ci0JCQlmb3IgKGtleWlkID0gMDtrZXlpZDw0O2tleWlkKyspIHsKLQkJCQlpZiAocG1sbWVwcml2LT5rZXlfbWFzayAmIENIS0JJVChrZXlpZCkpIHsKLQkJCQkJaWYgKGtleWlkID09IHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUtleUluZGV4KQorCQlpZiAocHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9PQorCQkgICAgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKKwkJICAgIHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPT0KKwkJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkgeworCQkJREJHXzg3MjNBKCI9PT4lcywgY2hhbm5lbCglZCksIHByb2Nlc3NpbmcoJXgpXG4iLAorCQkJCSAgX19mdW5jX18sIHBhZGFwdGVyLT5tbG1lZXh0cHJpdi5jdXJfY2hhbm5lbCwKKwkJCQkgIHB3cnByaXYtPmJpcHNfcHJvY2Vzc2luZyk7CisJCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsCisJCQkJCSAgICAgIHBhZGFwdGVyLT5tbG1lZXh0cHJpdi5jdXJfY2hhbm5lbCwKKwkJCQkJICAgICAgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRSwKKwkJCQkJICAgICAgSFRfQ0hBTk5FTF9XSURUSF8yMCk7CisJCQlmb3IgKGtleWlkID0gMDsga2V5aWQgPCA0OyBrZXlpZCsrKSB7CisJCQkJaWYgKHBtbG1lcHJpdi0+a2V5X21hc2sgJiBCSVQoa2V5aWQpKSB7CisJCQkJCWlmIChrZXlpZCA9PQorCQkJCQkgICAgcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5S2V5SW5kZXgpCiAJCQkJCQlyZXN1bHQgPSBydHdfc2V0X2tleTIzYShwYWRhcHRlciwgcHNlY3VyaXR5cHJpdiwga2V5aWQsIDEpOwogCQkJCQllbHNlCiAJCQkJCQlyZXN1bHQgPSBydHdfc2V0X2tleTIzYShwYWRhcHRlciwgcHNlY3VyaXR5cHJpdiwga2V5aWQsIDApOwpAQCAtOTAsNyArOTgsOCBAQAogCQkJfQogCQl9CiAKLQkJREJHXzg3MjNBKCI9PT4gaXBzX2xlYXZlMjNhLi4uLi5MRUQoMHglMDh4KS4uLlxuIiwgcnR3X3JlYWQzMihwYWRhcHRlciwgMHg0YykpOworCQlEQkdfODcyM0EoIj09PiBpcHNfbGVhdmUyM2EuLi4uLkxFRCgweCUwOHgpLi4uXG4iLAorCQkJICBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCAweDRjKSk7CiAJCXB3cnByaXYtPmJpcHNfcHJvY2Vzc2luZyA9IGZhbHNlOwogCiAJCXB3cnByaXYtPmJrZWVwZndhbGl2ZSA9IGZhbHNlOwpAQCAtMTA4LDQyICsxMTcsNDIgQEAKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmJ1ZGR5ID0gYWRhcHRlci0+cGJ1ZGR5X2FkYXB0ZXI7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJmFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0X3ByaXYgPSAmYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZhZGFwdGVyLT53ZGluZm87CiAKIAlib29sIHJldCA9IGZhbHNlOwogCiAJaWYgKHRpbWVfYWZ0ZXJfZXEoYWRhcHRlci0+cHdyY3RybHByaXYuaXBzX2RlbnlfdGltZSwgamlmZmllcykpCiAJCWdvdG8gZXhpdDsKIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BU09DX1NUQVRFfFdJRklfU0lURV9NT05JVE9SKQotCQl8fCBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9VTkRFUl9MSU5LSU5HfFdJRklfVU5ERVJfV1BTKQotCQl8fCBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkKLQkJfHwgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFfFdJRklfQURIT0NfU1RBVEUpCi0JCXx8ICFydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfTk9ORSkKLQkpIHsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVNPQ19TVEFURXxXSUZJX1NJVEVfTU9OSVRPUikgfHwKKwkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfVU5ERVJfTElOS0lOR3xXSUZJX1VOREVSX1dQUykgfHwKKwkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpIHx8CisJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURXxXSUZJX0FESE9DX1NUQVRFKSl7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAkvKiBjb25zaWRlciBidWRkeSwgaWYgZXhpc3QgKi8KIAlpZiAoYnVkZHkpIHsKIAkJc3RydWN0IG1sbWVfcHJpdiAqYl9wbWxtZXByaXYgPSAmYnVkZHktPm1sbWVwcml2OwotCQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpiX3B3ZGluZm8gPSAmYnVkZHktPndkaW5mbzsKIAotCQlpZiAoY2hlY2tfZndzdGF0ZShiX3BtbG1lcHJpdiwgV0lGSV9BU09DX1NUQVRFfFdJRklfU0lURV9NT05JVE9SKQotCQkJfHwgY2hlY2tfZndzdGF0ZShiX3BtbG1lcHJpdiwgV0lGSV9VTkRFUl9MSU5LSU5HfFdJRklfVU5ERVJfV1BTKQotCQkJfHwgY2hlY2tfZndzdGF0ZShiX3BtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkKLQkJCXx8IGNoZWNrX2Z3c3RhdGUoYl9wbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFfFdJRklfQURIT0NfU1RBVEUpCi0JCQl8fCAhcnR3X3AycF9jaGtfc3RhdGUoYl9wd2RpbmZvLCBQMlBfU1RBVEVfTk9ORSkKLQkJKSB7CisJCWlmIChjaGVja19md3N0YXRlKGJfcG1sbWVwcml2LAorCQkJCSAgV0lGSV9BU09DX1NUQVRFfFdJRklfU0lURV9NT05JVE9SKSB8fAorCQkgICAgY2hlY2tfZndzdGF0ZShiX3BtbG1lcHJpdiwKKwkJCQkgIFdJRklfVU5ERVJfTElOS0lOR3xXSUZJX1VOREVSX1dQUykgfHwKKwkJICAgIGNoZWNrX2Z3c3RhdGUoYl9wbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpIHx8CisJCSAgICBjaGVja19md3N0YXRlKGJfcG1sbWVwcml2LAorCQkJCSAgV0lGSV9BREhPQ19NQVNURVJfU1RBVEV8V0lGSV9BREhPQ19TVEFURSkpIHsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KIAogCWlmIChweG1pdF9wcml2LT5mcmVlX3htaXRidWZfY250ICE9IE5SX1hNSVRCVUZGIHx8CiAJCXB4bWl0X3ByaXYtPmZyZWVfeG1pdF9leHRidWZfY250ICE9IE5SX1hNSVRfRVhUQlVGRikgewotCQlEQkdfODcyM0FfTEVWRUwoX2Rydl9hbHdheXNfLCAiVGhlcmUgYXJlIHNvbWUgcGt0cyB0byB0cmFuc21pdFxuIik7Ci0JCURCR184NzIzQV9MRVZFTChfZHJ2X2luZm9fLCAiZnJlZV94bWl0YnVmX2NudDogJWQsIGZyZWVfeG1pdF9leHRidWZfY250OiAlZFxuIiwKLQkJCXB4bWl0X3ByaXYtPmZyZWVfeG1pdGJ1Zl9jbnQsIHB4bWl0X3ByaXYtPmZyZWVfeG1pdF9leHRidWZfY250KTsKKwkJREJHXzg3MjNBX0xFVkVMKF9kcnZfYWx3YXlzXywKKwkJCQkiVGhlcmUgYXJlIHNvbWUgcGt0cyB0byB0cmFuc21pdFxuIik7CisJCURCR184NzIzQV9MRVZFTChfZHJ2X2luZm9fLCAiZnJlZV94bWl0YnVmX2NudDogJWQsICIKKwkJCQkiZnJlZV94bWl0X2V4dGJ1Zl9jbnQ6ICVkXG4iLAorCQkJCXB4bWl0X3ByaXYtPmZyZWVfeG1pdGJ1Zl9jbnQsCisJCQkJcHhtaXRfcHJpdi0+ZnJlZV94bWl0X2V4dGJ1Zl9jbnQpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xNjYsNyArMTc1LDggQEAKIAogCWlmIChwYWRhcHRlci0+cHdyY3RybHByaXYuYkhXUHdyUGluZGV0ZWN0KSB7CiAJCXJmcHdyc3RhdGUgPSBSZk9uT2ZmRGV0ZWN0MjNhKHBhZGFwdGVyKTsKLQkJREJHXzg3MjNBKCJAQEBALSAjMiAgJXMgPT0+IHJmc3RhdGU6JXNcbiIsIF9fZnVuY19fLCAocmZwd3JzdGF0ZSA9PSByZl9vbik/InJmX29uIjoicmZfb2ZmIik7CisJCURCR184NzIzQSgiQEBAQC0gIzIgICVzID09PiByZnN0YXRlOiVzXG4iLCBfX2Z1bmNfXywKKwkJCSAgKHJmcHdyc3RhdGUgPT0gcmZfb24pPyJyZl9vbiI6InJmX29mZiIpOwogCiAJCWlmIChyZnB3cnN0YXRlIT0gcHdycHJpdi0+cmZfcHdyc3RhdGUpIHsKIAkJCWlmIChyZnB3cnN0YXRlID09IHJmX29mZikgewpAQCAtMTc4LDcgKzE4OCw5IEBACiAJCQkJcHdycHJpdi0+Y2hhbmdlX3JmcHdyc3RhdGUgPSByZl9vbjsKIAkJCQlydHdfaHdfcmVzdW1lMjNhKHBhZGFwdGVyKTsKIAkJCX0KLQkJCURCR184NzIzQSgiY3VycmVudCByZl9wd3JzdGF0ZSglcylcbiIsIChwd3Jwcml2LT5yZl9wd3JzdGF0ZSA9PSByZl9vZmYpPyJyZl9vZmYiOiJyZl9vbiIpOworCQkJREJHXzg3MjNBKCJjdXJyZW50IHJmX3B3cnN0YXRlKCVzKVxuIiwKKwkJCQkgIChwd3Jwcml2LT5yZl9wd3JzdGF0ZSA9PSByZl9vZmYpID8KKwkJCQkgICJyZl9vZmYiOiJyZl9vbiIpOwogCQl9CiAJCXB3cnByaXYtPnB3cl9zdGF0ZV9jaGVja19jbnRzICsrOwogCX0KQEAgLTE4OSw5ICsyMDEsMTAgQEAKIAlpZiAocnR3X3B3cl91bmFzc29jaWF0ZWRfaWRsZShwYWRhcHRlcikgPT0gZmFsc2UpCiAJCWdvdG8gZXhpdDsKIAotCWlmICgocHdycHJpdi0+cmZfcHdyc3RhdGUgPT0gcmZfb24pICYmICgocHdycHJpdi0+cHdyX3N0YXRlX2NoZWNrX2NudHMlNCkgPT0gMCkpCi0JewotCQlEQkdfODcyM0EoIj09PiVzIC5md19zdGF0ZSgleClcbiIsIF9fZnVuY19fLCBnZXRfZndzdGF0ZShwbWxtZXByaXYpKTsKKwlpZiAocHdycHJpdi0+cmZfcHdyc3RhdGUgPT0gcmZfb24gJiYKKwkgICAgKHB3cnByaXYtPnB3cl9zdGF0ZV9jaGVja19jbnRzICUgNCkgPT0gMCkgeworCQlEQkdfODcyM0EoIj09PiVzIC5md19zdGF0ZSgleClcbiIsIF9fZnVuY19fLAorCQkJICBnZXRfZndzdGF0ZShwbWxtZXByaXYpKTsKIAkJcHdycHJpdi0+Y2hhbmdlX3JmcHdyc3RhdGUgPSByZl9vZmY7CiAJCWlwc19lbnRlcjIzYShwYWRhcHRlcik7CiAJfQpAQCAtMjEwLDM2ICsyMjMsMzUgQEAKIC8qCiAgKgogICogUGFyYW1ldGVycwotICoJcGFkYXB0ZXIKLSAqCXBzbHYJCQlwb3dlciBzdGF0ZSBsZXZlbCwgb25seSBjb3VsZCBiZSBQU19TVEFURV9TMCB+IFBTX1NUQVRFX1M0CisgKiAgIHBhZGFwdGVyCisgKiAgIHBzbHYJcG93ZXIgc3RhdGUgbGV2ZWwsIG9ubHkgY291bGQgYmUgUFNfU1RBVEVfUzAgfiBQU19TVEFURV9TNAogICoKICAqLwogdm9pZCBydHdfc2V0X3Jwd20yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggcHNsdikKIHsKLQl1OAlycHdtOworCXU4IHJwd207CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7CiAKLQotCiAJcHNsdiA9IFBTX1NUQVRFKHBzbHYpOwogCi0JaWYgKHRydWUgPT0gcHdycHJpdi0+YnRjb2V4X3Jmb24pCi0JeworCWlmIChwd3Jwcml2LT5idGNvZXhfcmZvbikgewogCQlpZiAocHNsdiA8IFBTX1NUQVRFX1M0KQogCQkJcHNsdiA9IFBTX1NUQVRFX1MzOwogCX0KIAogCWlmIChwd3Jwcml2LT5ycHdtID09IHBzbHYpIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3B3cmN0cmxfY18sIF9kcnZfZXJyXywKLQkJCSgiJXM6IEFscmVhZHkgc2V0IHJwd21bMHglMDJYXSwgbmV3ID0gMHglMDJYIVxuIiwgX19mdW5jX18sIHB3cnByaXYtPnJwd20sIHBzbHYpKTsKKwkJCSgiJXM6IEFscmVhZHkgc2V0IHJwd21bMHglMDJYXSwgbmV3ID0gMHglMDJYIVxuIiwKKwkJCSBfX2Z1bmNfXywgcHdycHJpdi0+cnB3bSwgcHNsdikpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKSB8fAotCSAgICAocGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkID09IGZhbHNlKSkgeworCWlmIChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlIHx8CisJICAgIHBhZGFwdGVyLT5od19pbml0X2NvbXBsZXRlZCA9PSBmYWxzZSkgewogCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfcHdyY3RybF9jXywgX2Rydl9lcnJfLAotCQkJCSAoIiVzOiBTdXJwcmlzZVJlbW92ZWQoJWQpIGh3X2luaXRfY29tcGxldGVkKCVkKVxuIiwKLQkJCQkgIF9fZnVuY19fLCBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCwgcGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkKSk7CisJCQkgKCIlczogU3VycHJpc2VSZW1vdmVkKCVkKSBod19pbml0X2NvbXBsZXRlZCglZClcbiIsCisJCQkgIF9fZnVuY19fLCBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCwKKwkJCSAgcGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkKSk7CiAKIAkJcHdycHJpdi0+Y3B3bSA9IFBTX1NUQVRFX1M0OwogCkBAIC0yNDgsNTIgKzI2MCw1MiBAQAogCiAJaWYgKHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9PSB0cnVlKSB7CiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9wd3JjdHJsX2NfLCBfZHJ2X2Vycl8sCi0JCQkJICgiJXM6IGNoYW5nZSBwb3dlciBzdGF0ZSgweCUwMlgpIHdoZW4gRHJpdmVyU3RvcHBlZFxuIiwgX19mdW5jX18sIHBzbHYpKTsKKwkJCSAoIiVzOiBjaGFuZ2UgcG93ZXIgc3RhdGUoMHglMDJYKSB3aGVuIERyaXZlclN0b3BwZWRcbiIsCisJCQkgIF9fZnVuY19fLCBwc2x2KSk7CiAKIAkJaWYgKHBzbHYgPCBQU19TVEFURV9TMikgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3B3cmN0cmxfY18sIF9kcnZfZXJyXywKLQkJCQkJICgiJXM6IFJlamVjdCB0byBlbnRlciBQU19TVEFURSgweCUwMlgpIGxvd2VyIHRoYW4gUzIgd2hlbiBEcml2ZXJTdG9wcGVkISFcbiIsIF9fZnVuY19fLCBwc2x2KSk7CisJCQkJICgiJXM6IFJlamVjdCB0byBlbnRlciBQU19TVEFURSgweCUwMlgpIGxvd2VyICIKKwkJCQkgICJ0aGFuIFMyIHdoZW4gRHJpdmVyU3RvcHBlZCEhXG4iLAorCQkJCSAgX19mdW5jX18sIHBzbHYpKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCXJwd20gPSBwc2x2IHwgcHdycHJpdi0+dG9nOwogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9wd3JjdHJsX2NfLCBfZHJ2X25vdGljZV8sCi0JCQkgKCJydHdfc2V0X3Jwd20yM2E6IHJwd20gPSAweCUwMnggY3B3bSA9IDB4JTAyeFxuIiwgcnB3bSwgcHdycHJpdi0+Y3B3bSkpOworCQkgKCJydHdfc2V0X3Jwd20yM2E6IHJwd20gPSAweCUwMnggY3B3bSA9IDB4JTAyeFxuIiwKKwkJICBycHdtLCBwd3Jwcml2LT5jcHdtKSk7CiAKIAlwd3Jwcml2LT5ycHdtID0gcHNsdjsKIAotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfU0VUX1JQV00sICh1OCAqKSgmcnB3bSkpOworCXJ0bDg3MjNhX3NldF9ycHdtKHBhZGFwdGVyLCBycHdtKTsKIAogCXB3cnByaXYtPnRvZyArPSAweDgwOwogCXB3cnByaXYtPmNwd20gPSBwc2x2OwotCi0KIH0KIAotdTggUFNfUkRZX0NIRUNLKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKQorc3RhdGljIGJvb2wgUFNfUkRZX0NIRUNLKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKQogewogCXVuc2lnbmVkIGxvbmcgZGVsdGFfdGltZTsKLQlzdHJ1Y3QgcHdyY3RybF9wcml2CSpwd3Jwcml2ID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKKwlzdHJ1Y3QgcHdyY3RybF9wcml2ICpwd3Jwcml2ID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCiAJZGVsdGFfdGltZSA9IGppZmZpZXMgLSBwd3Jwcml2LT5EZWxheUxQU0xhc3RUaW1lU3RhbXA7CiAKIAlpZiAoZGVsdGFfdGltZSA8IExQU19ERUxBWV9USU1FKQotCXsKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IGZhbHNlKSB8fAotCQkoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19VTkRFUl9TVVJWRVkpID09IHRydWUpIHx8Ci0JCShjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkgPT0gdHJ1ZSkgfHwKLQkJKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkgPT0gdHJ1ZSkgfHwKLQkJKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSA9PSB0cnVlKSkKKwlpZiAoIWNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSB8fAorCSAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkgfHwKKwkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpIHx8CisJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkgfHwKKwkgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpKQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHRydWUgPT0gcHdycHJpdi0+YkluU3VzcGVuZCkKKwlpZiAocHdycHJpdi0+YkluU3VzcGVuZCkKIAkJcmV0dXJuIGZhbHNlOwotCWlmICgocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMUF1dGhBbGdydGhtID09IGRvdDExQXV0aEFsZ3J0aG1fODAyMVgpICYmIChwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJpbnN0YWxsR3Jwa2V5ID09IGZhbHNlKSkKLQl7CisJaWYgKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFBdXRoQWxncnRobSA9PSBkb3QxMUF1dGhBbGdydGhtXzgwMjFYICYmCisJICAgICFwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJpbnN0YWxsR3Jwa2V5KSB7CiAJCURCR184NzIzQSgiR3JvdXAgaGFuZHNoYWtlIHN0aWxsIGluIHByb2dyZXNzICEhIVxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zMDMsNzUgKzMxNSw1MSBAQAogCXJldHVybiB0cnVlOwogfQogCi12b2lkIHJ0d19zZXRfcHNfbW9kZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBwc19tb2RlLCB1OCBzbWFydF9wcywgdTggYmNuX2FudF9tb2RlKQordm9pZCBydHdfc2V0X3BzX21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggcHNfbW9kZSwKKwkJCXU4IHNtYXJ0X3BzLCB1OCBiY25fYW50X21vZGUpCiB7CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCiAKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfcHdyY3RybF9jXywgX2Rydl9ub3RpY2VfLAogCQkJICgiJXM6IFBvd2VyTW9kZSA9JWQgU21hcnRfUFMgPSVkXG4iLAogCQkJICBfX2Z1bmNfXywgcHNfbW9kZSwgc21hcnRfcHMpKTsKIAogCWlmIChwc19tb2RlID4gUE1fQ2FyZF9EaXNhYmxlKSB7Ci0JCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9wd3JjdHJsX2NfLCBfZHJ2X2Vycl8sICgicHNfbW9kZTolZCBlcnJvclxuIiwgcHNfbW9kZSkpOworCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfcHdyY3RybF9jXywgX2Rydl9lcnJfLAorCQkJICgicHNfbW9kZTolZCBlcnJvclxuIiwgcHNfbW9kZSkpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHB3cnByaXYtPnB3cl9tb2RlID09IHBzX21vZGUpCi0JewotCQlpZiAoUFNfTU9ERV9BQ1RJVkUgPT0gcHNfbW9kZSkgcmV0dXJuOwotCi0JCWlmICgocHdycHJpdi0+c21hcnRfcHMgPT0gc21hcnRfcHMpICYmCi0JCQkocHdycHJpdi0+YmNuX2FudF9tb2RlID09IGJjbl9hbnRfbW9kZSkpCi0JCXsKKwlpZiAocHdycHJpdi0+cHdyX21vZGUgPT0gcHNfbW9kZSkgeworCQlpZiAoUFNfTU9ERV9BQ1RJVkUgPT0gcHNfbW9kZSkKIAkJCXJldHVybjsKLQkJfQorCisJCWlmIChwd3Jwcml2LT5zbWFydF9wcyA9PSBzbWFydF9wcyAmJgorCQkgICAgcHdycHJpdi0+YmNuX2FudF9tb2RlID09IGJjbl9hbnRfbW9kZSkKKwkJCXJldHVybjsKIAl9CiAKIAlpZiAocHNfbW9kZSA9PSBQU19NT0RFX0FDVElWRSkgewotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCWlmIChwd2RpbmZvLT5vcHBfcHMgPT0gMCkKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCQl7Ci0JCQlEQkdfODcyM0EoInJ0d19zZXRfcHNfbW9kZTIzYTogTGVhdmUgODAyLjExIHBvd2VyIHNhdmVcbiIpOworCQlEQkdfODcyM0EoInJ0d19zZXRfcHNfbW9kZTIzYTogTGVhdmUgODAyLjExIHBvd2VyIHNhdmVcbiIpOwogCi0JCQlwd3Jwcml2LT5wd3JfbW9kZSA9IHBzX21vZGU7Ci0JCQlydHdfc2V0X3Jwd20yM2EocGFkYXB0ZXIsIFBTX1NUQVRFX1M0KTsKLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfSDJDX0ZXX1BXUk1PREUsICh1OCAqKSgmcHNfbW9kZSkpOwotCQkJcHdycHJpdi0+YkZ3Q3VycmVudEluUFNNb2RlID0gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKFBTX1JEWV9DSEVDSyhwYWRhcHRlcikKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQkJCXx8IChCVF8xQW50KHBhZGFwdGVyKSA9PSB0cnVlKQotI2VuZGlmCi0JCQkpCi0JCXsKKwkJcHdycHJpdi0+cHdyX21vZGUgPSBwc19tb2RlOworCQlydHdfc2V0X3Jwd20yM2EocGFkYXB0ZXIsIFBTX1NUQVRFX1M0KTsKKwkJcnRsODcyM2Ffc2V0X0Z3UHdyTW9kZV9jbWQocGFkYXB0ZXIsIHBzX21vZGUpOworCQlwd3Jwcml2LT5iRndDdXJyZW50SW5QU01vZGUgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlpZiAoUFNfUkRZX0NIRUNLKHBhZGFwdGVyKSB8fAorCQkgICAgcnRsODcyM2FfQlRfdXNpbmdfYW50ZW5uYV8xKHBhZGFwdGVyKSkgewogCQkJREJHXzg3MjNBKCIlczogRW50ZXIgODAyLjExIHBvd2VyIHNhdmVcbiIsIF9fZnVuY19fKTsKIAogCQkJcHdycHJpdi0+YkZ3Q3VycmVudEluUFNNb2RlID0gdHJ1ZTsKIAkJCXB3cnByaXYtPnB3cl9tb2RlID0gcHNfbW9kZTsKIAkJCXB3cnByaXYtPnNtYXJ0X3BzID0gc21hcnRfcHM7CiAJCQlwd3Jwcml2LT5iY25fYW50X21vZGUgPSBiY25fYW50X21vZGU7Ci0JCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0gyQ19GV19QV1JNT0RFLCAodTggKikoJnBzX21vZGUpKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCQkvKiAgU2V0IENUV2luZG93IGFmdGVyIExQUyAqLwotCQkJaWYgKHB3ZGluZm8tPm9wcF9wcyA9PSAxKQotCQkJCXAycF9wc193a19jbWQyM2EocGFkYXB0ZXIsIFAyUF9QU19FTkFCTEUsIDApOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJCQlydGw4NzIzYV9zZXRfRndQd3JNb2RlX2NtZChwYWRhcHRlciwgcHNfbW9kZSk7CiAKIAkJCXJ0d19zZXRfcnB3bTIzYShwYWRhcHRlciwgUFNfU1RBVEVfUzIpOwogCQl9CiAJfQotCi0KIH0KIAogLyoKQEAgLTM5MSwxMiArMzc5LDExIEBACiAKIAl3aGlsZSAoMSkKIAl7Ci0JCXJ0dzIzYV9oYWxfZ2V0X2h3cmVnKHBhZGFwdGVyLCBIV19WQVJfRldMUFNfUkZfT04sICZiQXdha2UpOwotCQlpZiAodHJ1ZSA9PSBiQXdha2UpCisJCWJBd2FrZSA9IHJ0bDg3MjNhX2dldF9md2xwc19yZl9vbihwYWRhcHRlcik7CisJCWlmIChiQXdha2UgPT0gdHJ1ZSkKIAkJCWJyZWFrOwogCi0JCWlmICh0cnVlID09IHBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKQotCQl7CisJCWlmIChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKSB7CiAJCQllcnIgPSAtMjsKIAkJCURCR184NzIzQSgiJXM6IGRldmljZSBzdXJwcmlzZSByZW1vdmVkISFcbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwpAQCAtNDA0LDcgKzM5MSw4IEBACiAKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUpKSB7CiAJCQllcnIgPSAtMTsKLQkJCURCR184NzIzQSgiJXM6IFdhaXQgZm9yIEZXIExQUyBsZWF2ZSBtb3JlIHRoYW4gJXUgbXMhISFcbiIsIF9fZnVuY19fLCBkZWxheV9tcyk7CisJCQlEQkdfODcyM0EoIiVzOiBXYWl0IGZvciBGVyBMUFMgbGVhdmUgbW9yZSB0aGFuICV1ICIKKwkJCQkgICJtcyFcbiIsIF9fZnVuY19fLCBkZWxheV9tcyk7CiAJCQlicmVhazsKIAkJfQogCQl1ZGVsYXkoMTAwKTsKQEAgLTQxNyw3ICs0MDUsNyBAQAogLyoJCUVudGVyIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4gKi8KIHZvaWQgTFBTX0VudGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHB3cmN0cmxfcHJpdgkqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7CisJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7CiAKIAlpZiAoIVBTX1JEWV9DSEVDSyhwYWRhcHRlcikpCiAJCXJldHVybjsKQEAgLTQyNywxMyArNDE1LDE1IEBACiAJCWlmIChwd3Jwcml2LT5McHNJZGxlQ291bnQgPj0gMikgeyAvKiAgIDQgU2VjICovCiAJCQlpZiAocHdycHJpdi0+cHdyX21vZGUgPT0gUFNfTU9ERV9BQ1RJVkUpIHsKIAkJCQlwd3Jwcml2LT5icG93ZXJfc2F2aW5nID0gdHJ1ZTsKLQkJCQlEQkdfODcyM0EoIiVzIHNtYXJ0X3BzOiVkXG4iLCBfX2Z1bmNfXywgcHdycHJpdi0+c21hcnRfcHMpOworCQkJCURCR184NzIzQSgiJXMgc21hcnRfcHM6JWRcbiIsIF9fZnVuY19fLAorCQkJCQkgIHB3cnByaXYtPnNtYXJ0X3BzKTsKIAkJCQkvKiBGb3IgVGVuZGEgVzMxMVIgSU9UIGlzc3VlICovCi0JCQkJcnR3X3NldF9wc19tb2RlMjNhKHBhZGFwdGVyLCBwd3Jwcml2LT5wb3dlcl9tZ250LCBwd3Jwcml2LT5zbWFydF9wcywgMCk7CisJCQkJcnR3X3NldF9wc19tb2RlMjNhKHBhZGFwdGVyLAorCQkJCQkJICAgcHdycHJpdi0+cG93ZXJfbWdudCwKKwkJCQkJCSAgIHB3cnByaXYtPnNtYXJ0X3BzLCAwKTsKIAkJCX0KLQkJfSBlbHNlIHsKKwkJfSBlbHNlCiAJCQlwd3Jwcml2LT5McHNJZGxlQ291bnQrKzsKLQkJfQogCX0KIH0KIApAQCAtNDQzLDE0ICs0MzMsMTUgQEAKIHsKICNkZWZpbmUgTFBTX0xFQVZFX1RJTUVPVVRfTVMgMTAwCiAKLQlzdHJ1Y3QgcHdyY3RybF9wcml2CSpwd3Jwcml2ID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKKwlzdHJ1Y3QgcHdyY3RybF9wcml2ICpwd3Jwcml2ID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKIAogCWlmIChwd3Jwcml2LT5iTGVpc3VyZVBzKSB7CiAJCWlmIChwd3Jwcml2LT5wd3JfbW9kZSAhPSBQU19NT0RFX0FDVElWRSkgewogCQkJcnR3X3NldF9wc19tb2RlMjNhKHBhZGFwdGVyLCBQU19NT0RFX0FDVElWRSwgMCwgMCk7CiAKIAkJCWlmIChwd3Jwcml2LT5wd3JfbW9kZSA9PSBQU19NT0RFX0FDVElWRSkKLQkJCQlMUFNfUkZfT05fY2hlY2syM2EocGFkYXB0ZXIsIExQU19MRUFWRV9USU1FT1VUX01TKTsKKwkJCQlMUFNfUkZfT05fY2hlY2syM2EocGFkYXB0ZXIsCisJCQkJCQkgICBMUFNfTEVBVkVfVElNRU9VVF9NUyk7CiAJCX0KIAl9CiAKQEAgLTQ2MiwyMSArNDUzLDExIEBACiB2b2lkIExlYXZlQWxsUG93ZXJTYXZlTW9kZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJkFkYXB0ZXItPm1sbWVwcml2OwotCXU4CWVucXVldWUgPSAwOwotCi0KKwl1OCBlbnF1ZXVlID0gMDsKIAogCS8qIERCR184NzIzQSgiJXMuLi4uLlxuIiwgX19mdW5jX18pOyAqLwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQl7IC8qIGNvbm5lY3QgKi8KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQlwMnBfcHNfd2tfY21kMjNhKEFkYXB0ZXIsIFAyUF9QU19ESVNBQkxFLCBlbnF1ZXVlKTsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkKIAkJcnR3X2xwc19jdHJsX3drX2NtZDIzYShBZGFwdGVyLCBMUFNfQ1RSTF9MRUFWRSwgZW5xdWV1ZSk7Ci0JfQotCi0KIH0KIAogdm9pZCBydHdfaW5pdF9wd3JjdHJsX3ByaXYyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKQEAgLTQ5NCwxMyArNDc1LDE1IEBACiAKIAlwd3JjdHJscHJpdi0+cHdyX3N0YXRlX2NoZWNrX2ludGVydmFsID0gUlRXX1BXUl9TVEFURV9DSEtfSU5URVJWQUw7CiAJcHdyY3RybHByaXYtPnB3cl9zdGF0ZV9jaGVja19jbnRzID0gMDsKLQlwd3JjdHJscHJpdi0+YkludGVybmFsQXV0b1N1c3BlbmQgPSBmYWxzZTsKIAlwd3JjdHJscHJpdi0+YkluU3VzcGVuZCA9IGZhbHNlOwogCXB3cmN0cmxwcml2LT5ia2VlcGZ3YWxpdmUgPSBmYWxzZTsKIAogCXB3cmN0cmxwcml2LT5McHNJZGxlQ291bnQgPSAwOwotCXB3cmN0cmxwcml2LT5wb3dlcl9tZ250ID0gcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5wb3dlcl9tZ250Oy8qICBQU19NT0RFX01JTjsgKi8KLQlwd3JjdHJscHJpdi0+YkxlaXN1cmVQcyA9IChQU19NT0RFX0FDVElWRSAhPSBwd3JjdHJscHJpdi0+cG93ZXJfbWdudCk/dHJ1ZTpmYWxzZTsKKworCS8qICBQU19NT0RFX01JTjsgKi8KKwlwd3JjdHJscHJpdi0+cG93ZXJfbWdudCA9IHBhZGFwdGVyLT5yZWdpc3RyeXByaXYucG93ZXJfbWdudDsKKwlwd3JjdHJscHJpdi0+YkxlaXN1cmVQcyA9CisJCShQU19NT0RFX0FDVElWRSAhPSBwd3JjdHJscHJpdi0+cG93ZXJfbWdudCk/dHJ1ZTpmYWxzZTsKIAogCXB3cmN0cmxwcml2LT5iRndDdXJyZW50SW5QU01vZGUgPSBmYWxzZTsKIApAQCAtNTE3LDIyICs1MDAsMTIgQEAKIAogCXNldHVwX3RpbWVyKCZwd3JjdHJscHJpdi0+cHdyX3N0YXRlX2NoZWNrX3RpbWVyLAogCQkgICAgcHdyX3N0YXRlX2NoZWNrX2hhbmRsZXIsICh1bnNpZ25lZCBsb25nKXBhZGFwdGVyKTsKLQotCiB9CiAKIHZvaWQgcnR3X2ZyZWVfcHdyY3RybF9wcml2KHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcikKIHsKIH0KIAotdTggcnR3X2ludGVyZmFjZV9wc19mdW5jMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gaGFsX2ludGZfcHNfZnVuYyBlZnVuY19pZCwgdTgqIHZhbCkKLXsKLQl1OCBiUmVzdWx0ID0gdHJ1ZTsKLQlydHdfaGFsX2ludGZfcHNfZnVuYzIzYShwYWRhcHRlciwgZWZ1bmNfaWQsIHZhbCk7Ci0KLQlyZXR1cm4gYlJlc3VsdDsKLX0KLQogaW5saW5lIHZvaWQgcnR3X3NldF9pcHNfZGVueTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgbXMpCiB7CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7CkBAIC01NzAsMTggKzU0MywxOSBAQAogCQkJREJHXzg3MjNBKCIlcyB3YWl0IHBzX3Byb2Nlc3NpbmcgZG9uZVxuIiwgX19mdW5jX18pOwogCX0KIAotCWlmIChydHdfaGFsX3NyZXNldF9pbnByb2dyZXNzKHBhZGFwdGVyKSkgeworCWlmIChydHdfc3Jlc2V0X2lucHJvZ3Jlc3MocGFkYXB0ZXIpKSB7CiAJCURCR184NzIzQSgiJXMgd2FpdCBzcmVzZXRfaW5wcm9ncmVzcy4uLlxuIiwgX19mdW5jX18pOwotCQl3aGlsZSAocnR3X2hhbF9zcmVzZXRfaW5wcm9ncmVzcyhwYWRhcHRlcikgJiYKKwkJd2hpbGUgKHJ0d19zcmVzZXRfaW5wcm9ncmVzcyhwYWRhcHRlcikgJiYKIAkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSA8PSA0MDAwKQogCQkJbXNsZWVwKDEwKTsKLQkJaWYgKHJ0d19oYWxfc3Jlc2V0X2lucHJvZ3Jlc3MocGFkYXB0ZXIpKQotCQkJREJHXzg3MjNBKCIlcyB3YWl0IHNyZXNldF9pbnByb2dyZXNzIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJaWYgKHJ0d19zcmVzZXRfaW5wcm9ncmVzcyhwYWRhcHRlcikpCisJCQlEQkdfODcyM0EoIiVzIHdhaXQgc3Jlc2V0X2lucHJvZ3Jlc3MgdGltZW91dFxuIiwKKwkJCQkgIF9fZnVuY19fKTsKIAkJZWxzZQogCQkJREJHXzg3MjNBKCIlcyB3YWl0IHNyZXNldF9pbnByb2dyZXNzIGRvbmVcbiIsIF9fZnVuY19fKTsKIAl9CiAKLQlpZiAocHdycHJpdi0+YkludGVybmFsQXV0b1N1c3BlbmQgPT0gZmFsc2UgJiYgcHdycHJpdi0+YkluU3VzcGVuZCkgeworCWlmIChwd3Jwcml2LT5iSW5TdXNwZW5kKSB7CiAJCURCR184NzIzQSgiJXMgd2FpdCBiSW5TdXNwZW5kLi4uXG4iLCBfX2Z1bmNfXyk7CiAJCXdoaWxlIChwd3Jwcml2LT5iSW5TdXNwZW5kICYmCiAJCSAgICAgICAoamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnQpIDw9IDMwMDApKSB7CkBAIC01OTQsMjcgKzU2OCwyMCBAQAogCX0KIAogCS8qIFN5c3RlbSBzdXNwZW5kIGlzIG5vdCBhbGxvd2VkIHRvIHdha2V1cCAqLwotCWlmICgocHdycHJpdi0+YkludGVybmFsQXV0b1N1c3BlbmQgPT0gZmFsc2UpICYmICh0cnVlID09IHB3cnByaXYtPmJJblN1c3BlbmQpKSB7Ci0JCXJldCA9IF9GQUlMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogYmxvY2s/Pz8gKi8KLQlpZiAoKHB3cnByaXYtPmJJbnRlcm5hbEF1dG9TdXNwZW5kID09IHRydWUpICAmJiAocGFkYXB0ZXItPm5ldF9jbG9zZWQgPT0gdHJ1ZSkpIHsKKwlpZiAocHdycHJpdi0+YkluU3VzcGVuZCkgewogCQlyZXQgPSBfRkFJTDsKIAkJZ290byBleGl0OwogCX0KIAogCS8qIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgY2hlY2sgaW4gSVBTLCBMUFMsIGF1dG9zdXNwZW5kIGZ1bmN0aW9ucy4uLiAqLwotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkKLQl7CisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgewogCQlyZXQgPSBfU1VDQ0VTUzsKIAkJZ290byBleGl0OwogCX0KIAogCWlmIChyZl9vZmYgPT0gcHdycHJpdi0+cmZfcHdyc3RhdGUpIHsKIAkJREJHXzg3MjNBKCIlcyBjYWxsIGlwc19sZWF2ZTIzYS4uLi5cbiIsIF9fZnVuY19fKTsKLQkJaWYgKF9GQUlMID09ICBpcHNfbGVhdmUyM2EocGFkYXB0ZXIpKSB7CisJCWlmIChpcHNfbGVhdmUyM2EocGFkYXB0ZXIpPT0gX0ZBSUwpIHsKIAkJCURCR184NzIzQSgiPT09PT09PiBpcHNfbGVhdmUyM2EgZmFpbC4uLi4uLi4uLi4uLi5cbiIpOwogCQkJcmV0ID0gX0ZBSUw7CiAJCQlnb3RvIGV4aXQ7CkBAIC02MjcsNyArNTk0LDcgQEAKIAkJREJHXzg3MjNBKCIlczogYkRyaXZlclN0b3BwZWQgPSVkLCBidXAgPSVkLCBod19pbml0X2NvbXBsZXRlZCAiCiAJCQkgICI9JXVcbiIsIGNhbGxlciwgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLAogCQkJICBwYWRhcHRlci0+YnVwLCBwYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQpOwotCQlyZXQgPSBmYWxzZTsKKwkJcmV0ID0gX0ZBSUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTY0MCwyOSArNjA3LDIyIEBACiAKIGludCBydHdfcG1fc2V0X2xwczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBtb2RlKQogewotCWludAlyZXQgPSAwOworCWludCByZXQgPSAwOwogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnB3cmN0cmxwcml2ID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKIAotCWlmIChtb2RlIDwgUFNfTU9ERV9OVU0pCi0JewotCQlpZiAocHdyY3RybHByaXYtPnBvd2VyX21nbnQgIT0gbW9kZSkKLQkJeworCWlmIChtb2RlIDwgUFNfTU9ERV9OVU0pIHsKKwkJaWYgKHB3cmN0cmxwcml2LT5wb3dlcl9tZ250ICE9IG1vZGUpIHsKIAkJCWlmIChQU19NT0RFX0FDVElWRSA9PSBtb2RlKQotCQkJewogCQkJCUxlYXZlQWxsUG93ZXJTYXZlTW9kZTIzYShwYWRhcHRlcik7Ci0JCQl9CiAJCQllbHNlCi0JCQl7CiAJCQkJcHdyY3RybHByaXYtPkxwc0lkbGVDb3VudCA9IDI7Ci0JCQl9CiAJCQlwd3JjdHJscHJpdi0+cG93ZXJfbWdudCA9IG1vZGU7Ci0JCQlwd3JjdHJscHJpdi0+YkxlaXN1cmVQcyA9IChQU19NT0RFX0FDVElWRSAhPSBwd3JjdHJscHJpdi0+cG93ZXJfbWdudCk/dHJ1ZTpmYWxzZTsKKwkJCXB3cmN0cmxwcml2LT5iTGVpc3VyZVBzID0KKwkJCQkoUFNfTU9ERV9BQ1RJVkUgIT0gcHdyY3RybHByaXYtPnBvd2VyX21nbnQpID8KKwkJCQl0cnVlOmZhbHNlOwogCQl9Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlCiAJCXJldCA9IC1FSU5WQUw7Ci0JfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY3MywxNyArNjMzLDE3IEBACiAKIAlpZiAobW9kZSA9PSBJUFNfTk9STUFMIHx8IG1vZGUgPT0gSVBTX0xFVkVMXzIpIHsKIAkJcnR3X2lwc19tb2RlX3JlcShwd3JjdHJscHJpdiwgbW9kZSk7Ci0JCURCR184NzIzQSgiJXMgJXNcbiIsIF9fZnVuY19fLCBtb2RlID09IElQU19OT1JNQUw/IklQU19OT1JNQUwiOiJJUFNfTEVWRUxfMiIpOworCQlEQkdfODcyM0EoIiVzICVzXG4iLCBfX2Z1bmNfXywKKwkJCSAgbW9kZSA9PSBJUFNfTk9STUFMPyJJUFNfTk9STUFMIjoiSVBTX0xFVkVMXzIiKTsKIAkJcmV0dXJuIDA7Ci0JfQotCWVsc2UgaWYgKG1vZGUgPT0gSVBTX05PTkUpIHsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gSVBTX05PTkUpIHsKIAkJcnR3X2lwc19tb2RlX3JlcShwd3JjdHJscHJpdiwgbW9kZSk7CiAJCURCR184NzIzQSgiJXMgJXNcbiIsIF9fZnVuY19fLCAiSVBTX05PTkUiKTsKLQkJaWYgKChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSAwKSYmX0ZBSUwgPT0gcnR3X3B3cl93YWtldXAocGFkYXB0ZXIpKQorCQlpZiAocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgPT0gMCAmJgorCQkgICAgcnR3X3B3cl93YWtldXAocGFkYXB0ZXIpID09IF9GQUlMKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfcmVjdi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19yZWN2LmMKaW5kZXggMGIyNDU1ZS4uNjkwOTcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19yZWN2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19yZWN2LmMKQEAgLTE5LDEwICsxOSwxMSBAQAogI2luY2x1ZGUgPG1sbWVfb3NkZXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jaW5jbHVkZSA8ZXRoZXJuZXQuaD4KICNpbmNsdWRlIDx1c2Jfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8d2lmaS5oPgorI2luY2x1ZGUgPHJ0bDg3MjNhX3JlY3YuaD4KKyNpbmNsdWRlIDxydGw4NzIzYV94bWl0Lmg+CiAKIHZvaWQgcnR3X3NpZ25hbF9zdGF0X3RpbWVyX2hkbDIzYSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCkBAIC00OCwxMiArNDksNiBAQAogCWludCBpOwogCWludCByZXMgPSBfU1VDQ0VTUzsKIAotCi0KLQkvKiAgV2UgZG9uJ3QgbmVlZCB0byBtZW1zZXQgcGFkYXB0ZXItPlhYWCB0byB6ZXJvLCBiZWNhdXNlCi0JICAgIGFkYXB0ZXIgaXMgYWxsb2NhdGVkIGJ5IHJ0d196dm1hbGxvYygpLiAqLwotCS8qIG1lbXNldCgodW5zaWduZWQgY2hhciAqKXByZWN2cHJpdiwgMCwgc2l6ZW9mIChzdHJ1Y3QgIHJlY3ZfcHJpdikpOyAqLwotCiAJc3Bpbl9sb2NrX2luaXQoJnByZWN2cHJpdi0+bG9jayk7CiAKIAlfcnR3X2luaXRfcXVldWUyM2EoJnByZWN2cHJpdi0+ZnJlZV9yZWN2X3F1ZXVlKTsKQEAgLTYyLDM1ICs1NywyMyBAQAogCiAJcHJlY3Zwcml2LT5hZGFwdGVyID0gcGFkYXB0ZXI7CiAKLQlwcmVjdnByaXYtPmZyZWVfcmVjdmZyYW1lX2NudCA9IE5SX1JFQ1ZGUkFNRTsKLQotCXByZWN2cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgPQotCQlydHdfenZtYWxsb2MoTlJfUkVDVkZSQU1FICogc2l6ZW9mKHN0cnVjdCByZWN2X2ZyYW1lKSk7Ci0KLQlpZiAocHJlY3Zwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZiA9PSBOVUxMKSB7Ci0JCXJlcyA9IF9GQUlMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcHJlY3ZmcmFtZSA9IHByZWN2cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWY7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgTlJfUkVDVkZSQU1FIDsgaSsrKSB7CisJCXByZWN2ZnJhbWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVjdl9mcmFtZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXByZWN2ZnJhbWUpCisJCQlicmVhazsKIAkJSU5JVF9MSVNUX0hFQUQoJnByZWN2ZnJhbWUtPmxpc3QpOwogCiAJCWxpc3RfYWRkX3RhaWwoJnByZWN2ZnJhbWUtPmxpc3QsCiAJCQkgICAgICAmcHJlY3Zwcml2LT5mcmVlX3JlY3ZfcXVldWUucXVldWUpOwogCi0JCXJlcyA9IHJ0d19vc19yZWN2X3Jlc291cmNlX2FsbG9jMjNhKHBhZGFwdGVyLCBwcmVjdmZyYW1lKTsKLQogCQlwcmVjdmZyYW1lLT5hZGFwdGVyID0gcGFkYXB0ZXI7CiAJCXByZWN2ZnJhbWUrKzsKIAl9CiAKKwlwcmVjdnByaXYtPmZyZWVfcmVjdmZyYW1lX2NudCA9IGk7CiAJcHJlY3Zwcml2LT5yeF9wZW5kaW5nX2NudCA9IDE7CiAKLQlzZW1hX2luaXQoJnByZWN2cHJpdi0+YWxscnhyZXR1cm5ldnQsIDApOwotCi0JcmVzID0gcnR3X2hhbF9pbml0MjNhX3JlY3ZfcHJpdihwYWRhcHRlcik7CisJcmVzID0gcnRsODcyM2F1X2luaXRfcmVjdl9wcml2KHBhZGFwdGVyKTsKIAogCXNldHVwX3RpbWVyKCZwcmVjdnByaXYtPnNpZ25hbF9zdGF0X3RpbWVyLCBydHdfc2lnbmFsX3N0YXRfdGltZXJfaGRsMjNhLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpcGFkYXB0ZXIpOwpAQCAtOTksMjkgKzgyLDI0IEBACiAKIAlydHdfc2V0X3NpZ25hbF9zdGF0X3RpbWVyKHByZWN2cHJpdik7CiAKLWV4aXQ6Ci0KLQotCiAJcmV0dXJuIHJlczsKIH0KIAogdm9pZCBfcnR3X2ZyZWVfcmVjdl9wcml2MjNhIChzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYpCiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHByZWN2cHJpdi0+YWRhcHRlcjsKLQotCisJc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWU7CisJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsICpwdG1wOwogCiAJcnR3X2ZyZWVfdWNfc3dkZWNfcGVuZGluZ19xdWV1ZTIzYShwYWRhcHRlcik7CiAKLQlpZiAocHJlY3Zwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZikgewotCQlydHdfdm1mcmVlKHByZWN2cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYsCi0JCQkgICBOUl9SRUNWRlJBTUUgKiBzaXplb2Yoc3RydWN0IHJlY3ZfZnJhbWUpKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocGxpc3QsIHB0bXAsICZwcmVjdnByaXYtPmZyZWVfcmVjdl9xdWV1ZS5xdWV1ZSkgeworCQlwcmVjdmZyYW1lID0gY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3QgcmVjdl9mcmFtZSwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnByZWN2ZnJhbWUtPmxpc3QpOworCQlrZnJlZShwcmVjdmZyYW1lKTsKIAl9CiAKLQlydHdfaGFsX2ZyZWVfcmVjdl9wcml2MjNhKHBhZGFwdGVyKTsKLQotCisJcnRsODcyM2F1X2ZyZWVfcmVjdl9wcml2KHBhZGFwdGVyKTsKIH0KIAogc3RydWN0IHJlY3ZfZnJhbWUgKnJ0d19hbGxvY19yZWN2ZnJhbWUyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqcGZyZWVfcmVjdl9xdWV1ZSkKQEAgLTEzMyw3ICsxMTEsNyBAQAogCiAJc3Bpbl9sb2NrX2JoKCZwZnJlZV9yZWN2X3F1ZXVlLT5sb2NrKTsKIAotCWlmIChfcnR3X3F1ZXVlX2VtcHR5MjNhKHBmcmVlX3JlY3ZfcXVldWUpID09IHRydWUpCisJaWYgKGxpc3RfZW1wdHkoJnBmcmVlX3JlY3ZfcXVldWUtPnF1ZXVlKSkKIAkJcGZyYW1lID0gTlVMTDsKIAllbHNlIHsKIAkJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHBmcmVlX3JlY3ZfcXVldWUpOwpAQCAtMTU2LDE4ICsxMzQsMTggQEAKIAlyZXR1cm4gcGZyYW1lOwogfQogCi1pbnQgcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdmZyYW1lLCBzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlKQoraW50IHJ0d19mcmVlX3JlY3ZmcmFtZTIzYShzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSkKIHsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHJlY3ZmcmFtZS0+YWRhcHRlcjsKIAlzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYgPSAmcGFkYXB0ZXItPnJlY3Zwcml2OwotCi0KKwlzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlOwogCiAJaWYgKHByZWN2ZnJhbWUtPnBrdCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShwcmVjdmZyYW1lLT5wa3QpOy8qIGZyZWUgc2tiIGJ5IGRyaXZlciAqLwogCQlwcmVjdmZyYW1lLT5wa3QgPSBOVUxMOwogCX0KIAorCXBmcmVlX3JlY3ZfcXVldWUgPSAmcHJlY3Zwcml2LT5mcmVlX3JlY3ZfcXVldWU7CiAJc3Bpbl9sb2NrX2JoKCZwZnJlZV9yZWN2X3F1ZXVlLT5sb2NrKTsKIAogCWxpc3RfZGVsX2luaXQoJnByZWN2ZnJhbWUtPmxpc3QpOwpAQCAtMjE1LDEyICsxOTMsMTEgQEAKIAogKi8KIAotdm9pZCBydHdfZnJlZV9yZWN2ZnJhbWUyM2FfcXVldWUoc3RydWN0IHJ0d19xdWV1ZSAqcGZyYW1lcXVldWUsICBzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlKQorc3RhdGljIHZvaWQgcnR3X2ZyZWVfcmVjdmZyYW1lMjNhX3F1ZXVlKHN0cnVjdCBydHdfcXVldWUgKnBmcmFtZXF1ZXVlKQogewogCXN0cnVjdCByZWN2X2ZyYW1lICpoZHI7CiAJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsICpwaGVhZCwgKnB0bXA7CiAKLQogCXNwaW5fbG9jaygmcGZyYW1lcXVldWUtPmxvY2spOwogCiAJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHBmcmFtZXF1ZXVlKTsKQEAgLTIyOCwxMiArMjA1LDEwIEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocGxpc3QsIHB0bXAsIHBoZWFkKSB7CiAJCWhkciA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHJlY3ZfZnJhbWUsIGxpc3QpOwotCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EoaGRyLCBwZnJlZV9yZWN2X3F1ZXVlKTsKKwkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKGhkcik7CiAJfQogCiAJc3Bpbl91bmxvY2soJnBmcmFtZXF1ZXVlLT5sb2NrKTsKLQotCiB9CiAKIHUzMiBydHdfZnJlZV91Y19zd2RlY19wZW5kaW5nX3F1ZXVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcikKQEAgLTI0MSw4ICsyMTYsNyBAQAogCXUzMiBjbnQgPSAwOwogCXN0cnVjdCByZWN2X2ZyYW1lICpwZW5kaW5nX2ZyYW1lOwogCXdoaWxlICgocGVuZGluZ19mcmFtZSA9IHJ0d19hbGxvY19yZWN2ZnJhbWUyM2EoJmFkYXB0ZXItPnJlY3Zwcml2LnVjX3N3ZGVjX3BlbmRpbmdfcXVldWUpKSkgewotCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocGVuZGluZ19mcmFtZSwKLQkJCQkgICAmYWRhcHRlci0+cmVjdnByaXYuZnJlZV9yZWN2X3F1ZXVlKTsKKwkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHBlbmRpbmdfZnJhbWUpOwogCQlEQkdfODcyM0EoIiVzOiBkZXF1ZXVlIHVjX3N3ZGVjX3BlbmRpbmdfcXVldWVcbiIsIF9fZnVuY19fKTsKIAkJY250Kys7CiAJfQpAQCAtMjgyLDcgKzI1Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmxvY2ssIGlycUwpOwogCi0JaWYgKF9ydHdfcXVldWVfZW1wdHkyM2EocXVldWUpID09IHRydWUpIHsKKwlpZiAobGlzdF9lbXB0eSgmcXVldWUtPnF1ZXVlKSkgewogCQlwcmVjdmJ1ZiA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHF1ZXVlKTsKQEAgLTMyMSw5ICsyOTUsOSBAQAogCiAJc3RhaW5mbyA9IHJ0d19nZXRfc3RhaW5mbzIzYSgmYWRhcHRlci0+c3RhcHJpdiwgJnByeGF0dHJpYi0+dGFbMF0pOwogCi0JaWYgKHByeGF0dHJpYi0+ZW5jcnlwdCA9PSBfVEtJUF8pIHsKKwlpZiAocHJ4YXR0cmliLT5lbmNyeXB0ID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfaW5mb18sCi0JCQkgKCJcbiByZWN2ZnJhbWVfY2hrbWljOnByeGF0dHJpYi0+ZW5jcnlwdCA9PSBfVEtJUF9cbiIpKTsKKwkJCSAoIlxuIHJlY3ZmcmFtZV9jaGttaWM6cHJ4YXR0cmliLT5lbmNyeXB0ID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVBcbiIpKTsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfaW5mb18sCiAJCQkgKCJcbiByZWN2ZnJhbWVfY2hrbWljOmRhID0gMHglMDJ4OjB4JTAyeDoweCUwMng6MHglMDJ4OiIKIAkJCSAgIjB4JTAyeDoweCUwMnhcbiIsIHByeGF0dHJpYi0+cmFbMF0sCkBAIC0zMzgsNyArMzEyLDcgQEAKIAkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfcmVjdl9jXywgX2Rydl9pbmZvXywKIAkJCQkJICgiXG4gcmVjdmZyYW1lX2Noa21pYzogYmNtYyBrZXlcbiIpKTsKIAotCQkJCWlmIChwc2VjdXJpdHlwcml2LT5iaW5zdGFsbEdycGtleSA9PSBmYWxzZSkgeworCQkJCWlmICghcHNlY3VyaXR5cHJpdi0+Ymluc3RhbGxHcnBrZXkpIHsKIAkJCQkJcmVzID0gX0ZBSUw7CiAJCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9yZWN2X2NfLAogCQkJCQkJIF9kcnZfZXJyXywKQEAgLTQ2Nyw5ICs0NDEsOSBAQAogCQkJCXJlcyA9IF9GQUlMOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBtaWMgY2hlY2tlZCBvayAqLwotCQkJCWlmICgocHNlY3VyaXR5cHJpdi0+YmNoZWNrX2dycGtleSA9PSBmYWxzZSkgJiYKLQkJCQkgICAgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHByeGF0dHJpYi0+cmEpKSkgewotCQkJCQlwc2VjdXJpdHlwcml2LT5iY2hlY2tfZ3Jwa2V5ID0gdHJ1ZTsKKwkJCQlpZiAoIXBzZWN1cml0eXByaXYtPmJjaGVja19ncnBrZXkgJiYKKwkJCQkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocHJ4YXR0cmliLT5yYSkpIHsKKwkJCQkJcHNlY3VyaXR5cHJpdi0+YmNoZWNrX2dycGtleSA9IDE7CiAJCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9yZWN2X2NfLAogCQkJCQkJIF9kcnZfZXJyXywKIAkJCQkJCSAoInBzZWN1cml0eXByaXYtPmJjaGVja19ncnAiCkBAIC01MDEsOCArNDc1LDcgQEAKIAlzdHJ1Y3QgcnhfcGt0X2F0dHJpYiAqcHJ4YXR0cmliID0gJnByZWN2X2ZyYW1lLT5hdHRyaWI7CiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3QgcmVjdl9mcmFtZSAqcmV0dXJuX3BhY2tldCA9IHByZWN2X2ZyYW1lOwotCXUzMiByZXMgPSBfU1VDQ0VTUzsKLQorCWludCByZXMgPSBfU1VDQ0VTUzsKIAogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9yZWN2X2NfLCBfZHJ2X2luZm9fLAogCQkgKCJwcnhzdGF0LT5kZWNyeXB0ZWQgPSV4IHByeGF0dHJpYi0+ZW5jcnlwdCA9IDB4JTAzeFxuIiwKQEAgLTUxNywxMyArNDkwLDEzIEBACiAJCQkJICBwcnhhdHRyaWItPmtleV9pbmRleCk7CiAKIAkJCXN3aXRjaCAocHJ4YXR0cmliLT5lbmNyeXB0KSB7Ci0JCQljYXNlIF9XRVA0MF86Ci0JCQljYXNlIF9XRVAxMDRfOgorCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgogCQkJCXByeGF0dHJpYi0+a2V5X2luZGV4ID0KIAkJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5S2V5SW5kZXg7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIF9US0lQXzoKLQkJCWNhc2UgX0FFU186CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCQlkZWZhdWx0OgogCQkJCXByeGF0dHJpYi0+a2V5X2luZGV4ID0KIAkJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycEtleWlkOwpAQCAtNTMzLDE2ICs1MDYsMTYgQEAKIAl9CiAKIAlpZiAoKHByeGF0dHJpYi0+ZW5jcnlwdCA+IDApICYmICgocHJ4YXR0cmliLT5iZGVjcnlwdGVkID09IDApKSkgewotCQlwc2VjdXJpdHlwcml2LT5od19kZWNyeXB0ZWQgPSBmYWxzZTsKKwkJcHNlY3VyaXR5cHJpdi0+aHdfZGVjcnlwdGVkID0gMDsKIAkJc3dpdGNoIChwcnhhdHRyaWItPmVuY3J5cHQpIHsKLQkJY2FzZSBfV0VQNDBfOgotCQljYXNlIF9XRVAxMDRfOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAkJCXJ0d193ZXBfZGVjcnlwdDIzYShwYWRhcHRlciwgcHJlY3ZfZnJhbWUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgX1RLSVBfOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CiAJCQlyZXMgPSBydHdfdGtpcF9kZWNyeXB0MjNhKHBhZGFwdGVyLCBwcmVjdl9mcmFtZSk7CiAJCQlicmVhazsKLQkJY2FzZSBfQUVTXzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQkJcmVzID0gcnR3X2Flc19kZWNyeXB0MjNhKHBhZGFwdGVyLCBwcmVjdl9mcmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTU1MCwxMyArNTIzLDEyIEBACiAJCX0KIAl9IGVsc2UgaWYgKHByeGF0dHJpYi0+YmRlY3J5cHRlZCA9PSAxICYmIHByeGF0dHJpYi0+ZW5jcnlwdCA+IDAgJiYKIAkJICAgKHBzZWN1cml0eXByaXYtPmJ1c2V0a2lwa2V5ID09IDEgfHwKLQkJICAgIHByeGF0dHJpYi0+ZW5jcnlwdCAhPSBfVEtJUF8pKSB7Ci0JCQlwc2VjdXJpdHlwcml2LT5od19kZWNyeXB0ZWQgPSB0cnVlOworCQkgICAgcHJ4YXR0cmliLT5lbmNyeXB0ICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApKSB7CisJCQlwc2VjdXJpdHlwcml2LT5od19kZWNyeXB0ZWQgPSAxOwogCX0KIAogCWlmIChyZXMgPT0gX0ZBSUwpIHsKLQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHJldHVybl9wYWNrZXQsCi0JCQkJICAgJnBhZGFwdGVyLT5yZWN2cHJpdi5mcmVlX3JlY3ZfcXVldWUpOworCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocmV0dXJuX3BhY2tldCk7CiAJCXJldHVybl9wYWNrZXQgPSBOVUxMOwogCX0KIApAQCAtNTY5LDMxICs1NDEsMzUgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVjdl9mcmFtZSAqcG9ydGN0cmwoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKLQl1OCAqcHN0YV9hZGRyID0gTlVMTCwgKnB0cjsKKwl1OCAqcHN0YV9hZGRyLCAqcHRyOwogCXVpbnQgYXV0aF9hbGc7CiAJc3RydWN0IHJlY3ZfZnJhbWUgKnBmaGRyOwogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAlzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2IDsKIAlzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJ0bmZyYW1lOwotCXUxNiBldGhlcl90eXBlID0gMDsKLQl1MTYgZWFwb2xfdHlwZSA9IDB4ODg4ZTsvKiBmb3IgRnVuaWEgQkQncyBXUEEgaXNzdWUgKi8KKwl1MTYgZXRoZXJfdHlwZTsKKwl1MTYgZWFwb2xfdHlwZSA9IEVUSF9QX1BBRTsvKiBmb3IgRnVuaWEgQkQncyBXUEEgaXNzdWUgKi8KIAlzdHJ1Y3QgcnhfcGt0X2F0dHJpYiAqcGF0dHJpYjsKIAogCXBzdGFwcml2ID0gJmFkYXB0ZXItPnN0YXByaXY7Ci0JcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgcHN0YV9hZGRyKTsKIAogCWF1dGhfYWxnID0gYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExQXV0aEFsZ3J0aG07CiAKLQlwdHIgPSBwcmVjdl9mcmFtZS0+cGt0LT5kYXRhOwogCXBmaGRyID0gcHJlY3ZfZnJhbWU7CiAJcGF0dHJpYiA9ICZwZmhkci0+YXR0cmliOwogCXBzdGFfYWRkciA9IHBhdHRyaWItPnRhOworCXBzdGEgPSBydHdfZ2V0X3N0YWluZm8yM2EocHN0YXByaXYsIHBzdGFfYWRkcik7CiAKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfcmVjdl9jXywgX2Rydl9pbmZvXywKIAkJICgiIyMjIyMjIyNwb3J0Y3RybDphZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFBdXRoQWxncnRobSA9IgogCQkgICIlZFxuIiwgYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExQXV0aEFsZ3J0aG0pKTsKIAotCWlmIChhdXRoX2FsZyA9PSAyKSB7CisJaWYgKGF1dGhfYWxnID09IGRvdDExQXV0aEFsZ3J0aG1fODAyMVgpIHsKKwkJLyogZ2V0IGV0aGVyX3R5cGUgKi8KKwkJcHRyID0gcGZoZHItPnBrdC0+ZGF0YSArIHBmaGRyLT5hdHRyaWIuaGRybGVuOworCisJCWV0aGVyX3R5cGUgPSAocHRyWzZdIDw8IDgpIHwgcHRyWzddOworCiAJCWlmICgocHN0YSAhPSBOVUxMKSAmJiAocHN0YS0+aWVlZTgwMjF4X2Jsb2NrZWQpKSB7CiAJCQkvKiBibG9ja2VkICovCiAJCQkvKiBvbmx5IGFjY2VwdCBFQVBPTCBmcmFtZSAqLwpAQCAtNjAxLDE5ICs1NzcsMTEgQEAKIAkJCQkgKCIjIyMjIyMjI3BvcnRjdHJsOnBzdGEtPmllZWU4MDIxeF9ibG9ja2VkID09IgogCQkJCSAgIjFcbiIpKTsKIAotCQkJcHJ0bmZyYW1lID0gcHJlY3ZfZnJhbWU7Ci0KLQkJCS8qIGdldCBldGhlcl90eXBlICovCi0JCQlwdHIgPSBwdHIgKyBwZmhkci0+YXR0cmliLmhkcmxlbiArIExMQ19IRUFERVJfU0laRTsKLQkJCW1lbWNweSgmZXRoZXJfdHlwZSwgcHRyLCAyKTsKLQkJCWV0aGVyX3R5cGUgPSBudG9ocygodW5zaWduZWQgc2hvcnQpZXRoZXJfdHlwZSk7Ci0KIAkJICAgICAgICBpZiAoZXRoZXJfdHlwZSA9PSBlYXBvbF90eXBlKSB7CiAJCQkJcHJ0bmZyYW1lID0gcHJlY3ZfZnJhbWU7CiAJCQl9IGVsc2UgewogCQkJCS8qIGZyZWUgdGhpcyBmcmFtZSAqLwotCQkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmVjdl9mcmFtZSwKLQkJCQkJCSAgICZhZGFwdGVyLT5yZWN2cHJpdi5mcmVlX3JlY3ZfcXVldWUpOworCQkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmVjdl9mcmFtZSk7CiAJCQkJcHJ0bmZyYW1lID0gTlVMTDsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTY1MSw5ICs2MTksNyBAQAogCQlwcnRuZnJhbWUgPSBwcmVjdl9mcmFtZTsKIAl9CiAKLQotCi0JCXJldHVybiBwcnRuZnJhbWU7CisJcmV0dXJuIHBydG5mcmFtZTsKIH0KIAogaW50IHJlY3ZfZGVjYWNoZShzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUsIHU4IGJyZXRyeSwKQEAgLTgzMyw4ICs3OTksOCBAQAogCiAKIAotCWlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpID09IHRydWUpIHx8Ci0JCShjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpID09IHRydWUpKSB7CisJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSB8fAorCSAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKSB7CiAKIAkJLyogIGZpbHRlciBwYWNrZXRzIHRoYXQgU0EgaXMgbXlzZWxmIG9yIG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAkJaWYgKGV0aGVyX2FkZHJfZXF1YWwobXlod2FkZHIsIHBhdHRyaWItPnNyYykpIHsKQEAgLTg1Nyw3ICs4MjMsNyBAQAogCQl9CiAKIAkJc3RhX2FkZHIgPSBwYXR0cmliLT5zcmM7Ci0JfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSA9PSB0cnVlKSB7CisJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgewogCQkvKiAgRm9yIFN0YXRpb24gbW9kZSwgc2EgYW5kIGJzc2lkIHNob3VsZCBhbHdheXMgYmUgQlNTSUQsCiAJCSAgICBhbmQgREEgaXMgbXkgbWFjLWFkZHJlc3MgKi8KIAkJaWYgKCFldGhlcl9hZGRyX2VxdWFsKHBhdHRyaWItPmJzc2lkLCBwYXR0cmliLT5zcmMpKSB7CkBAIC04NzAsNyArODM2LDcgQEAKIAogCQlzdGFfYWRkciA9IHBhdHRyaWItPmJzc2lkOwogCi0JfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkgPT0gdHJ1ZSkgeworCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7CiAJCWlmIChibWNhc3QpIHsKIAkJCS8qICBGb3IgQVAgbW9kZSwgaWYgREEgPT0gTUNBU1QsIHRoZW4gQlNTSUQgc2hvdWxkIGJlIGFsc28gTUNBU1QgKi8KIAkJCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocGF0dHJpYi0+YnNzaWQpKSB7CkBAIC04ODcsNyArODUzLDcgQEAKIAogCQkJc3RhX2FkZHIgPSBwYXR0cmliLT5zcmM7CiAJCX0KLQl9IGVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX01QX1NUQVRFKSA9PSB0cnVlKSB7CisJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9NUF9TVEFURSkpIHsKIAkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmRzdCwgaGRyLT5hZGRyMSk7CiAJCWV0aGVyX2FkZHJfY29weShwYXR0cmliLT5zcmMsIGhkci0+YWRkcjIpOwogCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+YnNzaWQsIGhkci0+YWRkcjMpOwpAQCAtOTM0LDkgKzkwMCw5IEBACiAKIAogCi0JaWYgKChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSA9PSB0cnVlKSAmJgotCSAgICAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpID09IHRydWUgfHwKLQkgICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORykgPT0gdHJ1ZSkpIHsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSkgJiYKKwkgICAgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSB8fAorCSAgICAgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19VTkRFUl9MSU5LSU5HKSkpIHsKIAogCQkvKiBmaWx0ZXIgcGFja2V0cyB0aGF0IFNBIGlzIG15c2VsZiBvciBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovCiAJCWlmIChldGhlcl9hZGRyX2VxdWFsKG15aHdhZGRyLCBwYXR0cmliLT5zcmMpKSB7CkBAIC05OTksOCArOTY1LDggQEAKIAkJCWdvdG8gZXhpdDsKIAkJfQogCi0JfSBlbHNlIGlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfTVBfU1RBVEUpID09IHRydWUpICYmCi0JCSAgIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkgPT0gdHJ1ZSkpIHsKKwl9IGVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX01QX1NUQVRFKSAmJgorCQkgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKIAkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmRzdCwgaGRyLT5hZGRyMSk7CiAJCWV0aGVyX2FkZHJfY29weShwYXR0cmliLT5zcmMsIGhkci0+YWRkcjIpOwogCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+YnNzaWQsIGhkci0+YWRkcjMpOwpAQCAtMTAxOCw3ICs5ODQsNyBAQAogCQkJcmV0ID0gX0ZBSUw7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KLQl9IGVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSA9PSB0cnVlKSB7CisJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpIHsKIAkJLyogU3BlY2lhbCBjYXNlICovCiAJCXJldCA9IFJUV19SWF9IQU5ETEVEOwogCQlnb3RvIGV4aXQ7CkBAIC0xMDYyLDcgKzEwMjgsNyBAQAogCiAKIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkgPT0gdHJ1ZSkgeworCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpIHsKIAkJLyogRm9yIEFQIG1vZGUsIFJBID0gQlNTSUQsIFRYID0gU1RBKFNSQ19BRERSKSwgQTMgPSBEU1RfQUREUiAqLwogCQlpZiAoIWV0aGVyX2FkZHJfZXF1YWwocGF0dHJpYi0+YnNzaWQsIG15YnNzaWQpKSB7CiAJCQlyZXQgPSBfRkFJTDsKQEAgLTExMTksMTcgKzEwODUsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgdmFsaWRhdGVfcmVjdl9jdHJsX2ZyYW1lKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7Ci1pbnQgdmFsaWRhdGVfcmVjdl9jdHJsX2ZyYW1lKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKK3N0YXRpYyBpbnQgdmFsaWRhdGVfcmVjdl9jdHJsX2ZyYW1lKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKIAlzdHJ1Y3QgcnhfcGt0X2F0dHJpYiAqcGF0dHJpYiA9ICZwcmVjdl9mcmFtZS0+YXR0cmliOwogCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2X2ZyYW1lLT5wa3Q7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JdTggKnBmcmFtZSA9IHNrYi0+ZGF0YTsKIAogCWlmICghaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gX0ZBSUw7CkBAIC0xMTQwLDE0ICsxMTAzLDE1IEBACiAKIAkvKiBvbmx5IGhhbmRsZSBwcy1wb2xsICovCiAJaWYgKGllZWU4MDIxMV9pc19wc3BvbGwoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqcHNwID0gKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICopaGRyOwogCQl1MTYgYWlkOwogCQl1OCB3bW1wc19hYyA9IDA7CiAJCXN0cnVjdCBzdGFfaW5mbyAqcHN0YSA9IE5VTEw7CiAKLQkJYWlkID0gR2V0QWlkKHBmcmFtZSk7CisJCWFpZCA9IGxlMTZfdG9fY3B1KHBzcC0+YWlkKSAmIDB4M2ZmZjsKIAkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgaGRyLT5hZGRyMik7CiAKLQkJaWYgKCghcHN0YSkgfHwgKHBzdGEtPmFpZCAhPSBhaWQpKQorCQlpZiAoIXBzdGEgfHwgcHN0YS0+YWlkICE9IGFpZCkKIAkJCXJldHVybiBfRkFJTDsKIAogCQkvKiBmb3IgcnggcGt0IHN0YXRpc3RpY3MgKi8KQEAgLTEyMTMsNyArMTE3Nyw4IEBACiAKIAkgICAgICAgICAgICAgICAgICAgICAgICAvKiBEQkdfODcyM0EoImhhbmRsaW5nIHBzLXBvbGwsIHFfbGVuID0lZCwgdGltID0leFxuIiwgcHN0YS0+c2xlZXBxX2xlbiwgcHN0YXByaXYtPnRpbV9iaXRtYXApOyAqLwogCi0JCQkJcnR3X2hhbF94bWl0MjNhZnJhbWVfZW5xdWV1ZShwYWRhcHRlciwgcHhtaXRmcmFtZSk7CisJCQkJcnRsODcyM2F1X2hhbF94bWl0ZnJhbWVfZW5xdWV1ZShwYWRhcHRlciwKKwkJCQkJCQkJcHhtaXRmcmFtZSk7CiAKIAkJCQlpZiAocHN0YS0+c2xlZXBxX2xlbiA9PSAwKSB7CiAJCQkJCXBzdGFwcml2LT50aW1fYml0bWFwICY9IH5DSEtCSVQocHN0YS0+YWlkKTsKQEAgLTEyMjIsOCArMTE4Nyw4IEBACiAKIAkJCQkJLyogdXBhdGUgQkNOIGZvciBUSU0gSUUgKi8KIAkJCQkJLyogdXBkYXRlX0JDTlRJTShwYWRhcHRlcik7ICovCi0JCQkJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9USU1fSUVfLAotCQkJCQkJICAgICAgTlVMTCwgZmFsc2UpOworCQkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9USU0sCisJCQkJCQkJIE5VTEwsIGZhbHNlKTsKIAkJCQl9CiAKIAkJCQkvKiBzcGluX3VubG9ja19iaCgmcHN0YS0+c2xlZXBfcS5sb2NrKTsgKi8KQEAgLTEyNTQsOCArMTIxOSw4IEBACiAKIAkJCQkJLyogdXBhdGUgQkNOIGZvciBUSU0gSUUgKi8KIAkJCQkJLyogdXBkYXRlX0JDTlRJTShwYWRhcHRlcik7ICovCi0JCQkJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9USU1fSUVfLAotCQkJCQkJICAgICAgTlVMTCwgZmFsc2UpOworCQkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9USU0sCisJCQkJCQkJIE5VTEwsIGZhbHNlKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTEyNjcsMTAgKzEyMzIsOCBAQAogCiBzdHJ1Y3QgcmVjdl9mcmFtZSogcmVjdmZyYW1lX2Noa19kZWZyYWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJCQkJc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLWludCB2YWxpZGF0ZV9yZWN2X21nbnRfZnJhbWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLWludCB2YWxpZGF0ZV9yZWN2X21nbnRfZnJhbWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludCB2YWxpZGF0ZV9yZWN2X21nbnRfZnJhbWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCQkgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQogewogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTMxNiwxNSArMTI3OSwxMiBAQAogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotaW50IHZhbGlkYXRlX3JlY3ZfZGF0YV9mcmFtZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7Ci1pbnQgdmFsaWRhdGVfcmVjdl9kYXRhX2ZyYW1lKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKQorc3RhdGljIGludCB2YWxpZGF0ZV9yZWN2X2RhdGFfZnJhbWUoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCiB7CiAJdTggYnJldHJ5OwotCXU4ICpwc2EsICpwZGEsICpwYnNzaWQ7CisJdTggKnBzYSwgKnBkYTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEgPSBOVUxMOwotCXU4ICpwdHIgPSBwcmVjdl9mcmFtZS0+cGt0LT5kYXRhOwogCXN0cnVjdCByeF9wa3RfYXR0cmliICpwYXR0cmliID0gJiBwcmVjdl9mcmFtZS0+YXR0cmliOwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJmFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlpbnQgcmV0ID0gX1NVQ0NFU1M7CkBAIC0xMzM2LDQ4ICsxMjk2LDQ0IEBACiAJYnJldHJ5ID0gaWVlZTgwMjExX2hhc19yZXRyeShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXBkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsKIAlwc2EgPSBpZWVlODAyMTFfZ2V0X1NBKGhkcik7Ci0JcGJzc2lkID0gZ2V0X2hkcl9ic3NpZChwdHIpOwotCi0JaWYgKHBic3NpZCA9PSBOVUxMKSB7Ci0JCXJldCA9IF9GQUlMOwotCQlnb3RvIGV4aXQ7Ci0JfQogCiAJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmRzdCwgcGRhKTsKIAlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+c3JjLCBwc2EpOwogCi0JZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmJzc2lkLCBwYnNzaWQpOwotCi0Jc3dpdGNoIChwYXR0cmliLT50b19mcl9kcykKLQl7Ci0JY2FzZSAwOgorCXN3aXRjaCAoaGRyLT5mcmFtZV9jb250cm9sICYKKwkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpIHsKKwljYXNlIGNwdV90b19sZTE2KDApOgorCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+YnNzaWQsIGhkci0+YWRkcjMpOwogCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+cmEsIHBkYSk7CiAJCWV0aGVyX2FkZHJfY29weShwYXR0cmliLT50YSwgcHNhKTsKIAkJcmV0ID0gc3RhMnN0YV9kYXRhX2ZyYW1lKGFkYXB0ZXIsIHByZWN2X2ZyYW1lLCAmcHN0YSk7CiAJCWJyZWFrOwogCi0JY2FzZSAxOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmJzc2lkLCBoZHItPmFkZHIyKTsKIAkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnJhLCBwZGEpOwotCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+dGEsIHBic3NpZCk7CisJCWV0aGVyX2FkZHJfY29weShwYXR0cmliLT50YSwgaGRyLT5hZGRyMik7CiAJCXJldCA9IGFwMnN0YV9kYXRhX2ZyYW1lKGFkYXB0ZXIsIHByZWN2X2ZyYW1lLCAmcHN0YSk7CiAJCWJyZWFrOwogCi0JY2FzZSAyOgotCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+cmEsIHBic3NpZCk7CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKToKKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmJzc2lkLCBoZHItPmFkZHIxKTsKKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnJhLCBoZHItPmFkZHIxKTsKIAkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnRhLCBwc2EpOwogCQlyZXQgPSBzdGEyYXBfZGF0YV9mcmFtZShhZGFwdGVyLCBwcmVjdl9mcmFtZSwgJnBzdGEpOwogCQlicmVhazsKIAotCWNhc2UgMzoKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgorCQkvKgorCQkgKiBUaGVyZSBpcyBubyBCU1NJRCBpbiB0aGlzIGNhc2UsIGJ1dCB0aGUgZHJpdmVyIGhhcyBiZWVuCisJCSAqIHVzaW5nIGFkZHIxIHNvIGZhciwgc28ga2VlcCBpdCBmb3Igbm93LgorCQkgKi8KKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPmJzc2lkLCBoZHItPmFkZHIxKTsKIAkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnJhLCBoZHItPmFkZHIxKTsKIAkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnRhLCBoZHItPmFkZHIyKTsKIAkJcmV0ID0gX0ZBSUw7CiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9yZWN2X2NfLCBfZHJ2X2Vycl8sICgiIGNhc2UgM1xuIikpOwogCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldCA9IF9GQUlMOwotCQlicmVhazsKIAl9CiAKIAlpZiAoKHJldCA9PSBfRkFJTCkgfHwgKHJldCA9PSBSVFdfUlhfSEFORExFRCkpCkBAIC0xNDUxLDIyICsxNDA3LDE4IEBACiAKIAkJc3dpdGNoIChwYXR0cmliLT5lbmNyeXB0KQogCQl7Ci0JCWNhc2UgX1dFUDQwXzoKLQkJY2FzZSBfV0VQMTA0XzoKLQkJCXBhdHRyaWItPml2X2xlbiA9IDQ7Ci0JCQlwYXR0cmliLT5pY3ZfbGVuID0gNDsKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCQlwYXR0cmliLT5pdl9sZW4gPSBJRUVFODAyMTFfV0VQX0lWX0xFTjsKKwkJCXBhdHRyaWItPmljdl9sZW4gPSBJRUVFODAyMTFfV0VQX0lDVl9MRU47CiAJCQlicmVhazsKLQkJY2FzZSBfVEtJUF86Ci0JCQlwYXR0cmliLT5pdl9sZW4gPSA4OwotCQkJcGF0dHJpYi0+aWN2X2xlbiA9IDQ7CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJCXBhdHRyaWItPml2X2xlbiA9IElFRUU4MDIxMV9US0lQX0lWX0xFTjsKKwkJCXBhdHRyaWItPmljdl9sZW4gPSBJRUVFODAyMTFfVEtJUF9JQ1ZfTEVOOwogCQkJYnJlYWs7Ci0JCWNhc2UgX0FFU186Ci0JCQlwYXR0cmliLT5pdl9sZW4gPSA4OwotCQkJcGF0dHJpYi0+aWN2X2xlbiA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSBfU01TNF86Ci0JCQlwYXR0cmliLT5pdl9sZW4gPSAxODsKLQkJCXBhdHRyaWItPmljdl9sZW4gPSAxNjsKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCQkJcGF0dHJpYi0+aXZfbGVuID0gSUVFRTgwMjExX0NDTVBfSERSX0xFTjsKKwkJCXBhdHRyaWItPmljdl9sZW4gPSBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwYXR0cmliLT5pdl9sZW4gPSAwOwpAQCAtMTUzOCw4ICsxNDkwLDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXBhdHRyaWItPnRvX2ZyX2RzID0gZ2V0X3RvZnJfZHMoaGRyLT5mcmFtZV9jb250cm9sKTsKLQogCXNlcV9jdHJsID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJcGF0dHJpYi0+ZnJhZ19udW0gPSBzZXFfY3RybCAmIElFRUU4MDIxMV9TQ1RMX0ZSQUc7CiAJcGF0dHJpYi0+c2VxX251bSA9IHNlcV9jdHJsID4+IDQ7CkBAIC0xNTUwLDcgKzE1MDAsNyBAQAogCXBhdHRyaWItPnByaXZhY3kgPSBpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpOwogCXBhdHRyaWItPm9yZGVyID0gaWVlZTgwMjExX2hhc19vcmRlcihoZHItPmZyYW1lX2NvbnRyb2wpOwogCi0JcnR3X2hhbF9nZXRfZGVmX3ZhcjIzYShhZGFwdGVyLCBIQUxfREVGX0RCR19EVU1QX1JYUEtULCAmYkR1bXBSeFBrdCk7CisJR2V0SGFsRGVmVmFyODE5MkNVc2IoYWRhcHRlciwgSEFMX0RFRl9EQkdfRFVNUF9SWFBLVCwgJmJEdW1wUnhQa3QpOwogCiAJaWYgKHVubGlrZWx5KGJEdW1wUnhQa3QgPT0gMSkpCiAJCWR1bXBfcnhfcGt0KHNrYiwgdHlwZSwgYkR1bXBSeFBrdCk7CkBAIC0xNjM4LDcgKzE1ODgsNyBAQAogCQkgIHBhdHRyaWItPmhkcmxlbiwgIHBhdHRyaWItPml2X2xlbikpOwogCiAJcGF0dHJpYi0+ZXRoX3R5cGUgPSBldGhfdHlwZTsKLQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX01QX1NUQVRFKSA9PSB0cnVlKSkgeworCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9NUF9TVEFURSkpIHsKIAkJcHRyICs9IGhkcmxlbjsKIAkJKnB0ciA9IDB4ODc7CiAJCSoocHRyICsgMSkgPSAweDEyOwpAQCAtMTY5NCw4ICsxNjQ0LDggQEAKIAlpZiAoY3VyZnJhZ251bSAhPSBwcmZyYW1lLT5hdHRyaWIuZnJhZ19udW0pIHsKIAkJLyogdGhlIGZpcnN0IGZyYWdtZW50IG51bWJlciBtdXN0IGJlIDAgKi8KIAkJLyogZnJlZSB0aGUgd2hvbGUgcXVldWUgKi8KLQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZnJhbWUsIHBmcmVlX3JlY3ZfcXVldWUpOwotCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2FfcXVldWUoZGVmcmFnX3EsIHBmcmVlX3JlY3ZfcXVldWUpOworCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJmcmFtZSk7CisJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYV9xdWV1ZShkZWZyYWdfcSk7CiAKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTcxNSw4ICsxNjY1LDggQEAKIAkJCS8qIHRoZSBmcmFnbWVudCBudW1iZXIgbXVzdCBiZSBpbmNyZWFzaW5nCiAJCQkgICAoYWZ0ZXIgZGVjYWNoZSkgKi8KIAkJCS8qIHJlbGVhc2UgdGhlIGRlZnJhZ19xICYgcHJmcmFtZSAqLwotCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZnJhbWUsIHBmcmVlX3JlY3ZfcXVldWUpOwotCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhX3F1ZXVlKGRlZnJhZ19xLCBwZnJlZV9yZWN2X3F1ZXVlKTsKKwkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmZyYW1lKTsKKwkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYV9xdWV1ZShkZWZyYWdfcSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0xNzQ0LDcgKzE2OTQsNyBAQAogCX07CiAKIAkvKiBmcmVlIHRoZSBkZWZyYWdfcSBxdWV1ZSBhbmQgcmV0dXJuIHRoZSBwcmZyYW1lICovCi0JcnR3X2ZyZWVfcmVjdmZyYW1lMjNhX3F1ZXVlKGRlZnJhZ19xLCBwZnJlZV9yZWN2X3F1ZXVlKTsKKwlydHdfZnJlZV9yZWN2ZnJhbWUyM2FfcXVldWUoZGVmcmFnX3EpOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfaW5mb18sCiAJCSAoIlBlcmZvcm1hbmNlIGRlZnJhZyEhISEhXG4iKSk7CkBAIC0xODAzLDkgKzE3NTMsOSBAQAogCQlpZiAocGRlZnJhZ19xICE9IE5VTEwpIHsKIAkJCWlmIChmcmFnbnVtID09IDApIHsKIAkJCQkvKiB0aGUgZmlyc3QgZnJhZ21lbnQgKi8KLQkJCQlpZiAoX3J0d19xdWV1ZV9lbXB0eTIzYShwZGVmcmFnX3EpID09IGZhbHNlKSB7CisJCQkJaWYgKCFsaXN0X2VtcHR5KCZwZGVmcmFnX3EtPnF1ZXVlKSkgewogCQkJCQkvKiBmcmVlIGN1cnJlbnQgZGVmcmFnX3EgKi8KLQkJCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhX3F1ZXVlKHBkZWZyYWdfcSwgcGZyZWVfcmVjdl9xdWV1ZSk7CisJCQkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYV9xdWV1ZShwZGVmcmFnX3EpOwogCQkJCX0KIAkJCX0KIApAQCAtMTgyNiw3ICsxNzc2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIGNhbid0IGZpbmQgdGhpcyB0YSdzIGRlZnJhZ19xdWV1ZSwKIAkJCSAgIHNvIGZyZWUgdGhpcyByZWN2X2ZyYW1lICovCi0JCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJlY3ZfZnJhbWUsIHBmcmVlX3JlY3ZfcXVldWUpOworCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZWN2X2ZyYW1lKTsKIAkJCXBydG5mcmFtZSA9IE5VTEw7CiAJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfcmVjdl9jXywgX2Rydl9lcnJfLAogCQkJCSAoIkZyZWUgYmVjYXVzZSBwZGVmcmFnX3EgPT0gTlVMTDogaXNtZnJhZyA9ICIKQEAgLTE4NTIsNyArMTgwMiw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBjYW4ndCBmaW5kIHRoaXMgdGEncyBkZWZyYWdfcXVldWUsCiAJCQkgICBzbyBmcmVlIHRoaXMgcmVjdl9mcmFtZSAqLwotCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZWN2X2ZyYW1lLCBwZnJlZV9yZWN2X3F1ZXVlKTsKKwkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmVjdl9mcmFtZSk7CiAJCQlwcnRuZnJhbWUgPSBOVUxMOwogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfZXJyXywKIAkJCQkgKCJGcmVlIGJlY2F1c2UgcGRlZnJhZ19xID09IE5VTEw6IGlzbWZyYWcgPSAiCkBAIC0xODY3LDcgKzE4MTcsNyBAQAogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfZXJyXywKIAkJCQkgKCJyZWN2ZnJhbWVfY2hrbWljKHBhZGFwdGVyLCAgcHJ0bmZyYW1lKSA9PSIKIAkJCQkgICJfRkFJTFxuIikpOwotCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHBydG5mcmFtZSwgcGZyZWVfcmVjdl9xdWV1ZSk7CisJCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJ0bmZyYW1lKTsKIAkJCXBydG5mcmFtZSA9IE5VTEw7CiAJCX0KIAl9CkBAIC0xODgzLDggKzE4MzMsNiBAQAogCXN0cnVjdCByeF9wa3RfYXR0cmliICpwYXR0cmliOwogCXN0cnVjdCBza19idWZmICpza2IsICpzdWJfc2tiOwogCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX2xpc3Q7Ci0Jc3RydWN0IHJlY3ZfcHJpdiAqcHJlY3Zwcml2ID0gJnBhZGFwdGVyLT5yZWN2cHJpdjsKLQlzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlID0gJnByZWN2cHJpdi0+ZnJlZV9yZWN2X3F1ZXVlOwogCiAJcGF0dHJpYiA9ICZwcmZyYW1lLT5hdHRyaWI7CiAKQEAgLTE5MDYsNyArMTg1NCw3IEBACiAJfQogCiAJcHJmcmFtZS0+cGt0ID0gTlVMTDsKLQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJmcmFtZSwgcGZyZWVfcmVjdl9xdWV1ZSk7CisJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZnJhbWUpOwogCXJldHVybiBfU1VDQ0VTUzsKIH0KIApAQCAtMTk0Miw4ICsxODkwLDggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGVucXVldWVfcmVvcmRlcl9yZWN2ZnJhbWUyM2Eoc3RydWN0IHJlY3ZfcmVvcmRlcl9jdHJsICpwcmVvcmRlcl9jdHJsLAotCQkJICAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZnJhbWUpCitzdGF0aWMgaW50IGVucXVldWVfcmVvcmRlcl9yZWN2ZnJhbWUyM2Eoc3RydWN0IHJlY3ZfcmVvcmRlcl9jdHJsICpwcmVvcmRlcl9jdHJsLAorCQkJCSAgICAgICAgc3RydWN0IHJlY3ZfZnJhbWUgKnByZnJhbWUpCiB7CiAJc3RydWN0IHJ4X3BrdF9hdHRyaWIgKnBhdHRyaWIgPSAmcHJmcmFtZS0+YXR0cmliOwogCXN0cnVjdCBydHdfcXVldWUgKnBwZW5kaW5nX3JlY3ZmcmFtZV9xdWV1ZTsKQEAgLTIwNjEsMTAgKzIwMDksOCBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGFtc2R1X3RvX21zZHUocGFkYXB0ZXIsIHByZnJhbWUpICE9Ci0JCQkJICAgIF9TVUNDRVNTKSB7Ci0JCQkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmZyYW1lLAotCQkJCQkJCSAgICZwcmVjdnByaXYtPmZyZWVfcmVjdl9xdWV1ZSk7Ci0JCQkJfQorCQkJCSAgICBfU1VDQ0VTUykKKwkJCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZnJhbWUpOwogCQkJfQogCiAJCQkvKiBVcGRhdGUgbG9jYWwgdmFyaWFibGVzLiAqLwpAQCAtMjEwMiw3ICsyMDQ4LDcgQEAKIAkJLyogczEuICovCiAJCXdsYW5oZHJfdG9fZXRoaGRyKHByZnJhbWUpOwogCi0JCWlmICgocGF0dHJpYi0+cW9zIT0gMSkgfHwgKHBhdHRyaWItPmV0aF90eXBlID09IDB4MDgwNikgfHwKKwkJaWYgKChwYXR0cmliLT5xb3MhPSAxKSB8fCAocGF0dHJpYi0+ZXRoX3R5cGUgPT0gRVRIX1BfQVJQKSB8fAogCQkgICAgKHBhdHRyaWItPmFja19wb2xpY3kgIT0gMCkpIHsKIAkJCWlmICgocGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkID09IGZhbHNlKSAmJgogCQkJICAgIChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSBmYWxzZSkpIHsKQEAgLTIyNjksNyArMjIxNSw2IEBACiBzdGF0aWMgaW50IHJlY3ZfZnVuY19wcmVoYW5kbGUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJCSAgICAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcmZyYW1lKQogewotCXN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3JlY3ZfcXVldWUgPSAmcGFkYXB0ZXItPnJlY3Zwcml2LmZyZWVfcmVjdl9xdWV1ZTsKIAlpbnQgcmV0ID0gX1NVQ0NFU1M7CiAKIAkvKiBjaGVjayB0aGUgZnJhbWUgY3J0bCBmaWVsZCBhbmQgZGVjYWNoZSAqLwpAQCAtMjI3Nyw3ICsyMjIyLDcgQEAKIAlpZiAocmV0ICE9IF9TVUNDRVNTKSB7CiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9yZWN2X2NfLCBfZHJ2X2luZm9fLAogCQkJICgicmVjdl9mdW5jOiB2YWxpZGF0ZV9yZWN2X2ZyYW1lIGZhaWwhIGRyb3AgcGt0XG4iKSk7Ci0JCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShyZnJhbWUsIHBmcmVlX3JlY3ZfcXVldWUpOworCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocmZyYW1lKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMjI5MSw3ICsyMjM2LDYgQEAKIAlpbnQgcmV0ID0gX1NVQ0NFU1M7CiAJc3RydWN0IHJlY3ZfZnJhbWUgKm9yaWdfcHJmcmFtZSA9IHByZnJhbWU7CiAJc3RydWN0IHJlY3ZfcHJpdiAqcHJlY3Zwcml2ID0gJnBhZGFwdGVyLT5yZWN2cHJpdjsKLQlzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlID0gJnBhZGFwdGVyLT5yZWN2cHJpdi5mcmVlX3JlY3ZfcXVldWU7CiAKIAkvKiAgREFUQSBGUkFNRSAqLwogCXJ0d19sZWRfY29udHJvbChwYWRhcHRlciwgTEVEX0NUTF9SWCk7CkBAIC0yMzM3LDcgKzIyODEsNyBAQAogCWlmIChyZXQgIT0gX1NVQ0NFU1MpIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfZXJyXywKIAkJCSAoInJlY3ZfZnVuYzogcHJvY2Vzc19yZWN2X2luZGljYXRlcGt0cyBmYWlsIVxuIikpOwotCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2Eob3JpZ19wcmZyYW1lLCBwZnJlZV9yZWN2X3F1ZXVlKTsvKiBmcmVlIHRoaXMgcmVjdl9mcmFtZSAqLworCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2Eob3JpZ19wcmZyYW1lKTsvKiBmcmVlIHRoaXMgcmVjdl9mcmFtZSAqLwogCQlnb3RvIF9yZWN2X2RhdGFfZHJvcDsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTI0MzQsOCArMjM3OCw3IEBACiAJCX0KIAogCQkvKiB1cGRhdGUgdmFsdWUgb2Ygc2lnbmFsX3N0cmVuZ3RoLCByc3NpLCBzaWduYWxfcXVhbCAqLwotCQlpZiAoY2hlY2tfZndzdGF0ZSgmYWRhcHRlci0+bWxtZXByaXYsIF9GV19VTkRFUl9TVVJWRVkpID09Ci0JCSAgICBmYWxzZSkgeworCQlpZiAoIWNoZWNrX2Z3c3RhdGUoJmFkYXB0ZXItPm1sbWVwcml2LCBfRldfVU5ERVJfU1VSVkVZKSkgewogCQkJdG1wX3MgPSAoYXZnX3NpZ25hbF9zdHJlbmd0aCArIChfYWxwaGEgLSAxKSAqCiAJCQkJIHJlY3Zwcml2LT5zaWduYWxfc3RyZW5ndGgpOwogCQkJaWYgKHRtcF9zICVfYWxwaGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3NlY3VyaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3NlY3VyaXR5LmMKaW5kZXggZmQ0M2U3MS4uZDZjMDdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19zZWN1cml0eS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfc2VjdXJpdHkuYwpAQCAtMTcwLDE2ICsxNzAsMTcgQEAKIAlwZnJhbWUgPSBweG1pdGZyYW1lLT5idWZfYWRkciArIGh3X2hkcl9vZmZzZXQ7CiAKIAkvKiBzdGFydCB0byBlbmNyeXB0IGVhY2ggZnJhZ21lbnQgKi8KLQlpZiAoKHBhdHRyaWItPmVuY3J5cHQgIT0gX1dFUDQwXykgJiYgKHBhdHRyaWItPmVuY3J5cHQgIT0gX1dFUDEwNF8pKQorCWlmIChwYXR0cmliLT5lbmNyeXB0ICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwICYmCisJICAgIHBhdHRyaWItPmVuY3J5cHQgIT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KQogCQlyZXR1cm47CiAKIAlpbmRleCA9IHBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUtleUluZGV4OwotCWtleWxlbmd0aCA9IHBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5bGVuW2luZGV4XTsKKwlrZXlsZW5ndGggPSBwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2luZGV4XS5rZXlsZW47CiAKIAlmb3IgKGN1cmZyYWdudW0gPSAwOyBjdXJmcmFnbnVtIDwgcGF0dHJpYi0+bnJfZnJhZ3MgOyBjdXJmcmFnbnVtKyspIHsKIAkJaXYgPSBwZnJhbWUgKyBwYXR0cmliLT5oZHJsZW47CiAJCW1lbWNweSgmd2Vwa2V5WzBdLCBpdiwgMyk7Ci0JCW1lbWNweSgmd2Vwa2V5WzNdLCAmcHNlY3VyaXR5cHJpdi0+ZG90MTFEZWZLZXlbaW5kZXhdLnNrZXlbMF0sCisJCW1lbWNweSgmd2Vwa2V5WzNdLCAmcHNlY3VyaXR5cHJpdi0+d2VwX2tleVtpbmRleF0ua2V5LAogCQkgICAgICAga2V5bGVuZ3RoKTsKIAkJcGF5bG9hZCA9IHBmcmFtZSArIHBhdHRyaWItPml2X2xlbiArIHBhdHRyaWItPmhkcmxlbjsKIApAQCAtMjI1LDE3ICsyMjYsMTcgQEAKIAlwZnJhbWUgPSBza2ItPmRhdGE7CiAKIAkvKiBzdGFydCB0byBkZWNyeXB0IHJlY3ZmcmFtZSAqLwotCWlmICgocHJ4YXR0cmliLT5lbmNyeXB0ICE9IF9XRVA0MF8pICYmIChwcnhhdHRyaWItPmVuY3J5cHQgIT0gX1dFUDEwNF8pKQorCWlmIChwcnhhdHRyaWItPmVuY3J5cHQgIT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgJiYKKwkgICAgcHJ4YXR0cmliLT5lbmNyeXB0ICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkKIAkJcmV0dXJuOwogCiAJaXYgPSBwZnJhbWUgKyBwcnhhdHRyaWItPmhkcmxlbjsKIAkvKiBrZXlpbmRleCA9IChpdlszXSYweDMpOyAqLwogCWtleWluZGV4ID0gcHJ4YXR0cmliLT5rZXlfaW5kZXg7Ci0Ja2V5bGVuZ3RoID0gcHNlY3VyaXR5cHJpdi0+ZG90MTFEZWZLZXlsZW5ba2V5aW5kZXhdOworCWtleWxlbmd0aCA9IHBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aW5kZXhdLmtleWxlbjsKIAltZW1jcHkoJndlcGtleVswXSwgaXYsIDMpOwogCS8qIG1lbWNweSgmd2Vwa2V5WzNdLCAmcHNlY3VyaXR5cHJpdi0+ZG90MTFEZWZLZXlbcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5S2V5SW5kZXhdLnNrZXlbMF0sIGtleWxlbmd0aCk7ICovCi0JbWVtY3B5KCZ3ZXBrZXlbM10sICZwc2VjdXJpdHlwcml2LT5kb3QxMURlZktleVtrZXlpbmRleF0uc2tleVswXSwKLQkJICAga2V5bGVuZ3RoKTsKKwltZW1jcHkoJndlcGtleVszXSwgJnBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aW5kZXhdLmtleSwga2V5bGVuZ3RoKTsKIAlsZW5ndGggPSBza2ItPmxlbiAtIHByeGF0dHJpYi0+aGRybGVuIC0gcHJ4YXR0cmliLT5pdl9sZW47CiAKIAlwYXlsb2FkID0gcGZyYW1lICsgcHJ4YXR0cmliLT5pdl9sZW4gKyBwcnhhdHRyaWItPmhkcmxlbjsKQEAgLTI0OCw3ICsyNDksNyBAQAogCSooKHUzMiAqKWNyYykgPSBsZTMyX3RvX2NwdShnZXRjcmMzMihwYXlsb2FkLCBsZW5ndGggLSA0KSk7CiAKIAlpZiAoY3JjWzNdICE9IHBheWxvYWRbbGVuZ3RoIC0gMV0gfHwgY3JjWzJdICE9IHBheWxvYWRbbGVuZ3RoIC0gMl0gfHwKLQkJY3JjWzFdICE9IHBheWxvYWRbbGVuZ3RoIC0gM10gfHwgY3JjWzBdICE9IHBheWxvYWRbbGVuZ3RoIC0gNF0pIHsKKwkgICAgY3JjWzFdICE9IHBheWxvYWRbbGVuZ3RoIC0gM10gfHwgY3JjWzBdICE9IHBheWxvYWRbbGVuZ3RoIC0gNF0pIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3NlY3VyaXR5X2NfLCBfZHJ2X2Vycl8sCiAJCQkgKCJydHdfd2VwX2RlY3J5cHQyM2E6aWN2IGVycm9yIGNyY1szXSgleCkhPSBwYXlsb2FkIgogCQkJICAiW2xlbmd0aC0xXSgleCkgfHwgY3JjWzJdKCV4KSE9IHBheWxvYWRbbGVuZ3RoLTJdKCV4KSIKQEAgLTYxMCw5ICs2MTEsOSBAQAogfQogCiAvKiBUaGUgaGxlbiBpc24ndCBpbmNsdWRlIHRoZSBJViAqLwotdTMyIHJ0d190a2lwX2VuY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgICBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKLXsJCQkJCQkJCQkJCQkJCQkJCS8qICBleGNsdWRlIElDViAqLworaW50IHJ0d190a2lwX2VuY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCXN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQorewogCXUxNglwbmw7CiAJdTMyCXBuaDsKIAl1OAlyYzRrZXlbMTZdOwpAQCAtNjIyLDE0ICs2MjMsMTMgQEAKIAlzdHJ1Y3QgYXJjNGNvbnRleHQgbXljb250ZXh0OwogCWludAkJCWN1cmZyYWdudW0sIGxlbmd0aDsKIAl1MzIJcHJ3c2tleWxlbjsKLQogCXU4CSpwZnJhbWUsICpwYXlsb2FkLCppdiwqcHJ3c2tleTsKIAl1bmlvbiBwbjQ4IGRvdDExdHhwbjsKIAlzdHJ1Y3QJc3RhX2luZm8JCSpzdGFpbmZvOwogCXN0cnVjdAlwa3RfYXR0cmliCSAqcGF0dHJpYiA9ICZweG1pdGZyYW1lLT5hdHRyaWI7CiAJc3RydWN0CXNlY3VyaXR5X3ByaXYJKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3QJeG1pdF9wcml2CQkqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQl1MzIJcmVzID0gX1NVQ0NFU1M7CisJaW50IHJlcyA9IF9TVUNDRVNTOwogCiAJaWYgKCFweG1pdGZyYW1lLT5idWZfYWRkcikKIAkJcmV0dXJuIF9GQUlMOwpAQCAtNjM4LDE0ICs2MzgsMTAgQEAKIAogCXBmcmFtZSA9IHB4bWl0ZnJhbWUtPmJ1Zl9hZGRyICsgaHdfaGRyX29mZnNldDsKIAkvKiA0IHN0YXJ0IHRvIGVuY3J5cHQgZWFjaCBmcmFnbWVudCAqLwotCWlmIChwYXR0cmliLT5lbmNyeXB0ID09IF9US0lQXykgewotCisJaWYgKHBhdHRyaWItPmVuY3J5cHQgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgewogCQlpZiAocGF0dHJpYi0+cHN0YSkKLQkJewogCQkJc3RhaW5mbyA9IHBhdHRyaWItPnBzdGE7Ci0JCX0KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJREJHXzg3MjNBKCIlcywgY2FsbCBydHdfZ2V0X3N0YWluZm8oKVxuIiwgX19mdW5jX18pOwogCQkJc3RhaW5mbyA9IHJ0d19nZXRfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsCiAJCQkJCQkgICAgICZwYXR0cmliLT5yYVswXSk7CkBAIC03MTYsMTAgKzcxMiw5IEBACiB9CiAKIC8qIFRoZSBobGVuIGlzbid0IGluY2x1ZGUgdGhlIElWICovCi11MzIgcnR3X3RraXBfZGVjcnlwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkgICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdmZyYW1lKQoraW50IHJ0d190a2lwX2RlY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCXN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdmZyYW1lKQogewotCS8qICBleGNsdWRlIElDViAqLwogCXUxNiBwbmw7CiAJdTMyIHBuaDsKIAl1OCAgIHJjNGtleVsxNl07CkBAIC03MzQsMTkgKzcyOSwxOSBAQAogCXN0cnVjdAlyeF9wa3RfYXR0cmliICpwcnhhdHRyaWIgPSAmcHJlY3ZmcmFtZS0+YXR0cmliOwogCXN0cnVjdAlzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKiBza2IgPSBwcmVjdmZyYW1lLT5wa3Q7Ci0JdTMyCXJlcyA9IF9TVUNDRVNTOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAogCXBmcmFtZSA9IHNrYi0+ZGF0YTsKIAogCS8qIDQgc3RhcnQgdG8gZGVjcnlwdCByZWN2ZnJhbWUgKi8KLQlpZiAocHJ4YXR0cmliLT5lbmNyeXB0ID09IF9US0lQXykgeworCWlmIChwcnhhdHRyaWItPmVuY3J5cHQgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgewogCiAJCXN0YWluZm8gPSBydHdfZ2V0X3N0YWluZm8yM2EoJnBhZGFwdGVyLT5zdGFwcml2LAogCQkJCQkgICAgICZwcnhhdHRyaWItPnRhWzBdKTsKIAkJaWYgKHN0YWluZm8hPSBOVUxMKSB7CiAKIAkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwcnhhdHRyaWItPnJhKSkgewotCQkJCWlmIChwc2VjdXJpdHlwcml2LT5iaW5zdGFsbEdycGtleSA9PSBmYWxzZSkgeworCQkJCWlmIChwc2VjdXJpdHlwcml2LT5iaW5zdGFsbEdycGtleSA9PSAwKSB7CiAJCQkJCXJlcyA9IF9GQUlMOwogCQkJCQlEQkdfODcyM0EoIiVzOnJ4IGJjL21jIHBhY2tldHMsIGJ1dCBkaWRuJ3QgaW5zdGFsbCBncm91cCBrZXkhISEhISEhISEhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZXhpdDsKQEAgLTEzMDMsNyArMTI5OCw4IEBACiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi11MzIgcnR3X2Flc19lbmNyeXB0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQoraW50IHJ0d19hZXNfZW5jcnlwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkgICAgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpCiB7CS8qICBleGNsdWRlIElDViAqLwogCS8qIEludGVybWVkaWF0ZSBCdWZmZXJzICovCiAJaW50IGN1cmZyYWdudW0sIGxlbmd0aDsKQEAgLTEzMTQsNyArMTMxMCw3IEBACiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWIgPSAmcHhtaXRmcmFtZS0+YXR0cmliOwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQl1MzIgcmVzID0gX1NVQ0NFU1M7CisJaW50IHJlcyA9IF9TVUNDRVNTOwogCiAJaWYgKCFweG1pdGZyYW1lLT5idWZfYWRkcikKIAkJcmV0dXJuIF9GQUlMOwpAQCAtMTMyNCw3ICsxMzIwLDcgQEAKIAlwZnJhbWUgPSBweG1pdGZyYW1lLT5idWZfYWRkciArIGh3X2hkcl9vZmZzZXQ7CiAKIAkvKiA0IHN0YXJ0IHRvIGVuY3J5cHQgZWFjaCBmcmFnbWVudCAqLwotCWlmIChwYXR0cmliLT5lbmNyeXB0ICE9IF9BRVNfKQorCWlmIChwYXR0cmliLT5lbmNyeXB0ICE9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVApCiAJCXJldHVybiBfRkFJTDsKIAogCWlmIChwYXR0cmliLT5wc3RhKSB7CkBAIC0xNTg2LDcgKzE1ODIsOCBAQAogCXJldHVybiByZXM7CiB9CiAKLXUzMiBydHdfYWVzX2RlY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUpCitpbnQgcnR3X2Flc19kZWNyeXB0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCSAgICAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSkKIHsJLyogIGV4Y2x1ZGUgSUNWICovCiAJc3RydWN0IHN0YV9pbmZvICpzdGFpbmZvOwogCXN0cnVjdCByeF9wa3RfYXR0cmliICpwcnhhdHRyaWIgPSAmcHJlY3ZmcmFtZS0+YXR0cmliOwpAQCAtMTU5NCwxMSArMTU5MSwxMSBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSBwcmVjdmZyYW1lLT5wa3Q7CiAJaW50IGxlbmd0aDsKIAl1OCAqcGZyYW1lLCAqcHJ3c2tleTsJLyogICpwYXlsb2FkLCppdiAqLwotCXUzMiByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAlwZnJhbWUgPSBza2ItPmRhdGE7CiAJLyogNCBzdGFydCB0byBlbmNyeXB0IGVhY2ggZnJhZ21lbnQgKi8KLQlpZiAocHJ4YXR0cmliLT5lbmNyeXB0ICE9IF9BRVNfKQorCWlmIChwcnhhdHRyaWItPmVuY3J5cHQgIT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkKIAkJcmV0dXJuIF9GQUlMOwogCiAJc3RhaW5mbyA9IHJ0d19nZXRfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsICZwcnhhdHRyaWItPnRhWzBdKTsKQEAgLTE2NDUsNyArMTY0Miw3IEBACiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7CiAKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfc2VjdXJpdHlfY18sIF9kcnZfZXJyXywgKCJeXl5ydHdfdXNlX3RraXBrZXlfaGFuZGxlcjIzYSBeXl5cbiIpKTsKLQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJ1c2V0a2lwa2V5ID0gdHJ1ZTsKKwlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJ1c2V0a2lwa2V5ID0gMTsKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfc2VjdXJpdHlfY18sIF9kcnZfZXJyXywKIAkJICgiXl5ecnR3X3VzZV90a2lwa2V5X2hhbmRsZXIyM2EgcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5idXNldGtpcGtleSA9JWReXl5cbiIsCiAJCSBwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJ1c2V0a2lwa2V5KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3NyZXNldC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19zcmVzZXQuYwppbmRleCA0Zjc0NTkyMC4uMThhNDJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d19zcmVzZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3NyZXNldC5jCkBAIC0xMywxMSArMTMsMTIgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZTxydHdfc3Jlc2V0Lmg+CisjaW5jbHVkZSA8cnR3X3NyZXNldC5oPgorI2luY2x1ZGUgPHVzYl9vcHNfbGludXguaD4KIAotdm9pZCBzcmVzZXRfaW5pdF92YWx1ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQordm9pZCBydHdfc3Jlc2V0X2luaXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKKwlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAlzdHJ1Y3Qgc3Jlc2V0X3ByaXYgKnBzcnRwcml2ID0gJnBIYWxEYXRhLT5zcmVzdHByaXY7CiAKIAltdXRleF9pbml0KCZwc3J0cHJpdi0+c2lsZW50cmVzZXRfbXV0ZXgpOwpAQCAtMjYsOSArMjcsMTAgQEAKIAlwc3J0cHJpdi0+bGFzdF90eF90aW1lID0gMDsKIAlwc3J0cHJpdi0+bGFzdF90eF9jb21wbGV0ZV90aW1lID0gMDsKIH0KLXZvaWQgc3Jlc2V0X3Jlc2V0X3ZhbHVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCisKK3ZvaWQgcnR3X3NyZXNldF9yZXNldF92YWx1ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOworCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCXN0cnVjdCBzcmVzZXRfcHJpdiAqcHNydHByaXYgPSAmcEhhbERhdGEtPnNyZXN0cHJpdjsKIAogCXBzcnRwcml2LT5zaWxlbnRfcmVzZXRfaW5wcm9ncmVzcyA9IGZhbHNlOwpAQCAtMzcsMTYgKzM5LDE2IEBACiAJcHNydHByaXYtPmxhc3RfdHhfY29tcGxldGVfdGltZSA9IDA7CiB9CiAKLXU4IHNyZXNldF9nZXRfd2lmaV9zdGF0dXMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3U4IHJ0d19zcmVzZXRfZ2V0X3dpZmlfc3RhdHVzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhCSpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CisJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAJc3RydWN0IHNyZXNldF9wcml2ICpwc3J0cHJpdiA9ICZwSGFsRGF0YS0+c3Jlc3Rwcml2OwogCXU4IHN0YXR1cyA9IFdJRklfU1RBVFVTX1NVQ0NFU1M7CiAJdTMyIHZhbDMyID0gMDsKIAogCWlmIChwc3J0cHJpdi0+c2lsZW50X3Jlc2V0X2lucHJvZ3Jlc3MpCiAJCXJldHVybiBzdGF0dXM7Ci0JdmFsMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfVFhETUFfU1RBVFVTKTsKKwl2YWwzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19UWERNQV9TVEFUVVMpOwogCWlmICh2YWwzMiA9PSAweGVhZWFlYWVhKSB7CiAJCXBzcnRwcml2LT5XaWZpX0Vycm9yX1N0YXR1cyA9IFdJRklfSUZfTk9UX0VYSVNUOwogCX0gZWxzZSBpZiAodmFsMzIgIT0gMCkgewpAQCAtODAsOSArODIsMTAgQEAKIAlwSGFsRGF0YS0+c3Jlc3Rwcml2LmRiZ190cmlnZ2VyX3BvaW50ID0gdGdwOwogfQogCi1ib29sIHNyZXNldF9pbnByb2dyZXNzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitib29sIHJ0d19zcmVzZXRfaW5wcm9ncmVzcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOworCXN0cnVjdCBydHdfYWRhcHRlciAqcHJpbWFyeV9hZGFwdGVyID0gR0VUX1BSSU1BUllfQURBUFRFUihwYWRhcHRlcik7CisJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwcmltYXJ5X2FkYXB0ZXIpOwogCiAJcmV0dXJuIHBIYWxEYXRhLT5zcmVzdHByaXYuc2lsZW50X3Jlc2V0X2lucHJvZ3Jlc3M7CiB9CkBAIC05OSwxMCArMTAyLDEzIEBACiAJCXZhbDggPSAweGNjOwogCWVsc2UKIAkJdmFsOCA9IDB4Y2Y7Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9TRUNfQ0ZHLCAodTggKikoJnZhbDgpKTsKIAotCWlmICgocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09IF9US0lQXykgfHwKLQkgICAgKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9PSBfQUVTXykpIHsKKwlydGw4NzIzYV9zZXRfc2VjX2NmZyhwYWRhcHRlciwgdmFsOCk7CisKKwlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09CisJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwKKwkgICAgcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09CisJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVApIHsKIAkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgZ2V0X2Jzc2lkKG1sbWVwcml2KSk7CiAJCWlmIChwc3RhID09IE5VTEwpIHsKIAkJCS8qIERFQlVHX0VSUigoIlNldCB3cGFfc2V0X2VuY3J5cHRpb246IE9idGFpbiBTdGFfaW5mbyBmYWlsXG4iKSk7ICovCkBAIC0xMjIsNyArMTI4LDcgQEAKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAl1OCB0aHJlc2hvbGQ7CiAKLQlydHdfc2V0b3Btb2RlX2NtZDIzYShwYWRhcHRlciwgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlKTsKKwlydHdfc2V0b3Btb2RlX2NtZDIzYShwYWRhcHRlciwgTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAKIAkvKiAgVEggPSAxID0+IG1lYW5zIHRoYXQgaW52YWxpZGF0ZSB1c2IgcnggYWdncmVnYXRpb24gKi8KIAkvKiAgVEggPSAwID0+IG1lYW5zIHRoYXQgdmFsaWRhdGUgdXNiIHJ4IGFnZ3JlZ2F0aW9uLCB1c2UgaW5pdCB2YWx1ZS4gKi8KQEAgLTEzMSwyOSArMTM3LDIyIEBACiAJCQl0aHJlc2hvbGQgPSAxOwogCQllbHNlCiAJCQl0aHJlc2hvbGQgPSAwOwotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX1JYRE1BX0FHR19QR19USCwgKHU4ICopKCZ0aHJlc2hvbGQpKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQl0aHJlc2hvbGQgPSAxOwotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX1JYRE1BX0FHR19QR19USCwgKHU4ICopKCZ0aHJlc2hvbGQpKTsKLQl9CiAKLQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHBtbG1lZXh0LT5jdXJfY2hhbm5lbCwgcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQsIHBtbG1lZXh0LT5jdXJfYndtb2RlKTsKKwlydGw4NzIzYV9zZXRfcnhkbWFfYWdnX3BnX3RoKHBhZGFwdGVyLCB0aHJlc2hvbGQpOwogCi0JLyogZGlzYWJsZSBkeW5hbWljIGZ1bmN0aW9ucywgc3VjaCBhcyBoaWdoIHBvd2VyLCBESUcgKi8KLQkvKiBTd2l0Y2hfRE1fRnVuYzIzYShwYWRhcHRlciwgRFlOQU1JQ19GVU5DX0RJU0FCTEUsIGZhbHNlKTsgKi8KKwlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHBtbG1lZXh0LT5jdXJfY2hhbm5lbCwKKwkJCSAgICAgIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7CiAKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0JTU0lELCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7Ci0KLQl7Ci0JCXU4CWpvaW5fdHlwZSA9IDA7Ci0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfTUxNRV9KT0lOLCAodTggKikoJmpvaW5fdHlwZSkpOwotCX0KKwlod192YXJfc2V0X2Jzc2lkKHBhZGFwdGVyLCBwbWxtZWluZm8tPm5ldHdvcmsuTWFjQWRkcmVzcyk7CisJaHdfdmFyX3NldF9tbG1lX2pvaW4ocGFkYXB0ZXIsIDApOwogCiAJU2V0X01TUjIzYShwYWRhcHRlciwgKHBtbG1laW5mby0+c3RhdGUgJiAweDMpKTsKIAogCW1sbWVleHRfam9pbmJzc19ldmVudF9jYWxsYmFjazIzYShwYWRhcHRlciwgMSk7CiAJLyogcmVzdG9yZSBTZXF1ZW5jZSBOby4gKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCAweDRkYywgcGFkYXB0ZXItPnhtaXRwcml2Lm5xb3Nfc3NuKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDRkYywgcGFkYXB0ZXItPnhtaXRwcml2Lm5xb3Nfc3NuKTsKIAogCXNyZXNldF9yZXN0b3JlX3NlY3VyaXR5X3N0YXRpb24ocGFkYXB0ZXIpOwogfQpAQCAtMTYzLDE3ICsxNjIsMjQgQEAKIAlzdHJ1Y3QgbWxtZV9wcml2ICptbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAKIAlpZiAoY2hlY2tfZndzdGF0ZShtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgewotCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCIgZndzdGF0ZToweCUwOHggLSBXSUZJX1NUQVRJT05fU1RBVEVcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLCBnZXRfZndzdGF0ZShtbG1lcHJpdikpOworCQlEQkdfODcyM0EoIiVzKCVzKTogZndzdGF0ZToweCUwOHggLSBXSUZJX1NUQVRJT05fU1RBVEVcbiIsCisJCQkgIF9fZnVuY19fLCBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKKwkJCSAgZ2V0X2Z3c3RhdGUobWxtZXByaXYpKTsKIAkJc3Jlc2V0X3Jlc3RvcmVfbmV0d29ya19zdGF0aW9uKHBhZGFwdGVyKTsKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKIAl9IGVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUobWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7Ci0JCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiBmd3N0YXRlOjB4JTA4eCAtIFdJRklfQVBfU1RBVEVcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLCBnZXRfZndzdGF0ZShtbG1lcHJpdikpOworCQlEQkdfODcyM0EoIiVzKCVzKTogZndzdGF0ZToweCUwOHggLSBXSUZJX0FQX1NUQVRFXG4iLAorCQkJICBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUsCisJCQkgIGdldF9md3N0YXRlKG1sbWVwcml2KSk7CiAJCXJ0d19hcF9yZXN0b3JlX25ldHdvcmsocGFkYXB0ZXIpOwogI2VuZGlmCiAJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSkgewotCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCIgZndzdGF0ZToweCUwOHggLSBXSUZJX0FESE9DX1NUQVRFXG4iLCBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwgZ2V0X2Z3c3RhdGUobWxtZXByaXYpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IGZ3c3RhdGU6MHglMDh4IC0gV0lGSV9BREhPQ19TVEFURVxuIiwKKwkJCSAgX19mdW5jX18sIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lLAorCQkJICBnZXRfZndzdGF0ZShtbG1lcHJpdikpOwogCX0gZWxzZSB7Ci0JCURCR184NzIzQShGVU5DX0FEUFRfRk1UIiBmd3N0YXRlOjB4JTA4eCAtID8/P1xuIiwgRlVOQ19BRFBUX0FSRyhwYWRhcHRlciksIGdldF9md3N0YXRlKG1sbWVwcml2KSk7CisJCURCR184NzIzQSgiJXMoJXMpOiBmd3N0YXRlOjB4JTA4eCAtID8/P1xuIiwgX19mdW5jX18sCisJCQkgIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lLCBnZXRfZndzdGF0ZShtbG1lcHJpdikpOwogCX0KIH0KIApAQCAtMTg1LDcgKzE5MSw3IEBACiAJaWYgKHBhZGFwdGVyID09IE5VTEwpCiAJCXJldHVybjsKIAotCURCR184NzIzQShGVU5DX0FEUFRfRk1UIlxuIiwgRlVOQ19BRFBUX0FSRyhwYWRhcHRlcikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOwogCiAJaWYgKCFydHdfbmV0aWZfcXVldWVfc3RvcHBlZChwYWRhcHRlci0+cG5ldGRldikpCiAJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwYWRhcHRlci0+cG5ldGRldik7CkBAIC0yMTAsNyArMjE2LDcgQEAKIAlpZiAocGFkYXB0ZXIgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JREJHXzg3MjNBKEZVTkNfQURQVF9GTVQiXG4iLCBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSk7CisJREJHXzg3MjNBKCIlcyglcylcbiIsIF9fZnVuY19fLCBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSk7CiAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7CiAJCXNyZXNldF9yZXN0b3JlX25ldHdvcmtfc3RhdHVzKHBhZGFwdGVyKTsKQEAgLTIyNiw5ICsyMzIsMTAgQEAKIAkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHBhZGFwdGVyLT5wbmV0ZGV2KTsKIH0KIAotdm9pZCBzcmVzZXRfcmVzZXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3ZvaWQgcnR3X3NyZXNldF9yZXNldChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFjdGl2ZV9hZGFwdGVyKQogewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOworCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBHRVRfUFJJTUFSWV9BREFQVEVSKGFjdGl2ZV9hZGFwdGVyKTsKKwlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAlzdHJ1Y3Qgc3Jlc2V0X3ByaXYgKnBzcnRwcml2ID0gJnBIYWxEYXRhLT5zcmVzdHByaXY7CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3N0YV9tZ3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfc3RhX21ndC5jCmluZGV4IDQ1MWI1OGYuLjE0YTgyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfc3RhX21ndC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfc3RhX21ndC5jCkBAIC0yMCw4ICsyMCw5IEBACiAjaW5jbHVkZSA8eG1pdF9vc2RlcC5oPgogI2luY2x1ZGUgPG1sbWVfb3NkZXAuaD4KICNpbmNsdWRlIDxzdGFfaW5mby5oPgorI2luY2x1ZGUgPHJ0bDg3MjNhX2hhbC5oPgogCi12b2lkIF9ydHdfaW5pdF9zdGFpbmZvKHN0cnVjdCBzdGFfaW5mbyAqcHN0YSkKK3N0YXRpYyB2b2lkIF9ydHdfaW5pdF9zdGFpbmZvKHN0cnVjdCBzdGFfaW5mbyAqcHN0YSkKIHsKIAltZW1zZXQoKHU4ICopcHN0YSwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc3RhX2luZm8pKTsKIAlzcGluX2xvY2tfaW5pdCgmcHN0YS0+bG9jayk7CkBAIC00OCwzMSArNDksMTUgQEAKICNlbmRpZgkvKiAgQ09ORklHXzg3MjNBVV9BUF9NT0RFICovCiB9CiAKLXUzMiBfcnR3X2luaXRfc3RhX3ByaXYyM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdikKK2ludCBfcnR3X2luaXRfc3RhX3ByaXYyM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdikKIHsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7Ci0JczMyIGk7CisJaW50IGk7CiAKLQlwc3RhcHJpdi0+cGFsbG9jYXRlZF9zdGFpbmZvX2J1ZiA9IHJ0d196dm1hbGxvYyhzaXplb2Yoc3RydWN0IHN0YV9pbmZvKSAqIE5VTV9TVEErIDQpOwotCi0JaWYgKCFwc3RhcHJpdi0+cGFsbG9jYXRlZF9zdGFpbmZvX2J1ZikKLQkJcmV0dXJuIF9GQUlMOwotCi0JcHN0YXByaXYtPnBzdGFpbmZvX2J1ZiA9IHBzdGFwcml2LT5wYWxsb2NhdGVkX3N0YWluZm9fYnVmICsgNCAtCi0JCSgodW5zaWduZWQgbG9uZykocHN0YXByaXYtPnBhbGxvY2F0ZWRfc3RhaW5mb19idWYpICYgMyk7Ci0JX3J0d19pbml0X3F1ZXVlMjNhKCZwc3RhcHJpdi0+ZnJlZV9zdGFfcXVldWUpOwogCXNwaW5fbG9ja19pbml0KCZwc3RhcHJpdi0+c3RhX2hhc2hfbG9jayk7CiAJcHN0YXByaXYtPmFzb2Nfc3RhX2NvdW50ID0gMDsKLQlfcnR3X2luaXRfcXVldWUyM2EoJnBzdGFwcml2LT5zbGVlcF9xKTsKLQlfcnR3X2luaXRfcXVldWUyM2EoJnBzdGFwcml2LT53YWtldXBfcSk7Ci0JcHN0YSA9IChzdHJ1Y3Qgc3RhX2luZm8gKikocHN0YXByaXYtPnBzdGFpbmZvX2J1Zik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1NUQTsgaSsrKSB7Ci0JCV9ydHdfaW5pdF9zdGFpbmZvKHBzdGEpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fU1RBOyBpKyspCiAJCUlOSVRfTElTVF9IRUFEKCZwc3RhcHJpdi0+c3RhX2hhc2hbaV0pOwotCQlsaXN0X2FkZF90YWlsKCZwc3RhLT5saXN0LCBnZXRfbGlzdF9oZWFkKCZwc3RhcHJpdi0+ZnJlZV9zdGFfcXVldWUpKTsKLQkJcHN0YSsrOwotCX0KKwogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQogCXBzdGFwcml2LT5zdGFfZHpfYml0bWFwID0gMDsKIAlwc3RhcHJpdi0+dGltX2JpdG1hcCA9IDA7CkBAIC05Miw0OSArNzcsMTIgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLWlubGluZSBpbnQgcnR3X3N0YWluZm9fb2Zmc2V0MjNhKHN0cnVjdCBzdGFfcHJpdiAqc3RhcHJpdiwgc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0JaW50IG9mZnNldCA9ICgoKHU4ICopc3RhKSAtIHN0YXByaXYtPnBzdGFpbmZvX2J1Zikvc2l6ZW9mKHN0cnVjdCBzdGFfaW5mbyk7Ci0KLQlpZiAoIXN0YWluZm9fb2Zmc2V0X3ZhbGlkKG9mZnNldCkpCi0JCURCR184NzIzQSgiJXMgaW52YWxpZCBvZmZzZXQoJWQpLCBvdXQgb2YgcmFuZ2UhISEiLCBfX2Z1bmNfXywgb2Zmc2V0KTsKLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1pbmxpbmUgc3RydWN0IHN0YV9pbmZvICpydHdfZ2V0X3N0YWluZm8yM2FfYnlfb2Zmc2V0MjNhKHN0cnVjdCBzdGFfcHJpdiAqc3RhcHJpdiwgaW50IG9mZnNldCkKLXsKLQlpZiAoIXN0YWluZm9fb2Zmc2V0X3ZhbGlkKG9mZnNldCkpCi0JCURCR184NzIzQSgiJXMgaW52YWxpZCBvZmZzZXQoJWQpLCBvdXQgb2YgcmFuZ2UhISEiLCBfX2Z1bmNfXywgb2Zmc2V0KTsKLQlyZXR1cm4gKHN0cnVjdCBzdGFfaW5mbyAqKShzdGFwcml2LT5wc3RhaW5mb19idWYgKyBvZmZzZXQgKiBzaXplb2Yoc3RydWN0IHN0YV9pbmZvKSk7Ci19Ci0KLS8qICB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZnJlZSB0aGUgbWVtb3J5IG9mIGxvY2sgfHwgc2VtYSBmb3IgYWxsIHN0YWluZm9zICovCi12b2lkIHJ0d19tZnJlZV9hbGxfc3RhaW5mbyhzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0LCAqcGhlYWQ7Ci0Jc3RydWN0IHN0YV9pbmZvICpwc3RhOwotCi0Jc3Bpbl9sb2NrX2JoKCZwc3RhcHJpdi0+c3RhX2hhc2hfbG9jayk7Ci0KLQlwaGVhZCA9IGdldF9saXN0X2hlYWQoJnBzdGFwcml2LT5mcmVlX3N0YV9xdWV1ZSk7Ci0KLQkvKiB3ZSByZWFsbHkgYWNoaWV2ZSBhIGxvdCBpbiB0aGlzIGxvb3AgLi4uLiAqLwotCWxpc3RfZm9yX2VhY2gocGxpc3QsIHBoZWFkKQotCQlwc3RhID0gY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3Qgc3RhX2luZm8sIGxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZwc3RhcHJpdi0+c3RhX2hhc2hfbG9jayk7Ci19Ci0KLXZvaWQgcnR3X21mcmVlX3N0YV9wcml2X2xvY2soc3RydWN0CXN0YV9wcml2ICpwc3RhcHJpdikKLXsKLQlydHdfbWZyZWVfYWxsX3N0YWluZm8ocHN0YXByaXYpOyAvKiBiZSBkb25lIGJlZm9yZSBmcmVlIHN0YV9oYXNoX2xvY2sgKi8KLX0KLQotdTMyCV9ydHdfZnJlZV9zdGFfcHJpdjIzYShzdHJ1Y3QJc3RhX3ByaXYgKnBzdGFwcml2KQoraW50IF9ydHdfZnJlZV9zdGFfcHJpdjIzYShzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBoZWFkLCAqcGxpc3QsICpwdG1wOwogCXN0cnVjdCBzdGFfaW5mbyAqcHN0YTsKIAlzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmw7Ci0JaW50CWluZGV4OworCWludCBpbmRleDsKIAogCWlmIChwc3RhcHJpdikgewogCQkvKglkZWxldGUgYWxsIHJlb3JkZXJpbmdfY3RybF90aW1lcgkJKi8KQEAgLTE1NCw0MCArMTAyLDI2IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnBzdGFwcml2LT5zdGFfaGFzaF9sb2NrKTsKIAkJLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCQlydHdfbWZyZWVfc3RhX3ByaXZfbG9jayhwc3RhcHJpdik7Ci0KLQkJaWYgKHBzdGFwcml2LT5wYWxsb2NhdGVkX3N0YWluZm9fYnVmKQotCQkJcnR3X3ZtZnJlZShwc3RhcHJpdi0+cGFsbG9jYXRlZF9zdGFpbmZvX2J1Ziwgc2l6ZW9mKHN0cnVjdCBzdGFfaW5mbykqTlVNX1NUQSs0KTsKIAl9CiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi1zdHJ1Y3QJc3RhX2luZm8gKnJ0d19hbGxvY19zdGFpbmZvMjNhKHN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYsIHU4ICpod2FkZHIpCitzdHJ1Y3Qgc3RhX2luZm8gKgorcnR3X2FsbG9jX3N0YWluZm8yM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiwgdTggKmh3YWRkciwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBsaXN0X2hlYWQJKnBoYXNoX2xpc3Q7CiAJc3RydWN0IHN0YV9pbmZvCSpwc3RhOwotCXN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3N0YV9xdWV1ZTsKIAlzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmw7Ci0JdWludCB0bXBfYWlkOwogCXMzMglpbmRleDsKIAlpbnQgaSA9IDA7CiAJdTE2ICB3UnhTZXFJbml0aWFsVmFsdWUgPSAweGZmZmY7CiAKLQlwZnJlZV9zdGFfcXVldWUgPSAmcHN0YXByaXYtPmZyZWVfc3RhX3F1ZXVlOworCXBzdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RhX2luZm8pLCBnZnApOworCWlmICghcHN0YSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlzcGluX2xvY2tfYmgoJnBzdGFwcml2LT5zdGFfaGFzaF9sb2NrKTsKIAotCWlmIChfcnR3X3F1ZXVlX2VtcHR5MjNhKHBmcmVlX3N0YV9xdWV1ZSkpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnBzdGFwcml2LT5zdGFfaGFzaF9sb2NrKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXBzdGEgPSBjb250YWluZXJfb2YoKCZwZnJlZV9zdGFfcXVldWUtPnF1ZXVlKS0+bmV4dCwgc3RydWN0IHN0YV9pbmZvLCBsaXN0KTsKLQotCWxpc3RfZGVsX2luaXQoJnBzdGEtPmxpc3QpOwotCi0JdG1wX2FpZCA9IHBzdGEtPmFpZDsKLQogCV9ydHdfaW5pdF9zdGFpbmZvKHBzdGEpOwogCiAJcHN0YS0+cGFkYXB0ZXIgPSBwc3RhcHJpdi0+cGFkYXB0ZXI7CkBAIC0yNTIsOSArMTg2LDggQEAKIH0KIAogLyogIHVzaW5nIHBzdGFwcml2LT5zdGFfaGFzaF9sb2NrIHRvIHByb3RlY3QgKi8KLXUzMglydHdfZnJlZV9zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSkKK2ludCBydHdfZnJlZV9zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSkKIHsKLQlzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9zdGFfcXVldWU7CiAJc3RydWN0IHJlY3ZfcmVvcmRlcl9jdHJsICpwcmVvcmRlcl9jdHJsOwogCXN0cnVjdAlzdGFfeG1pdF9wcml2CSpwc3RheG1pdHByaXY7CiAJc3RydWN0CXhtaXRfcHJpdgkqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKQEAgLTI2OSw4ICsyMDIsNiBAQAogCXBzdGEtPnN0YXRlICY9IH5fRldfTElOS0VEOwogCXNwaW5fdW5sb2NrX2JoKCZwc3RhLT5sb2NrKTsKIAotCXBmcmVlX3N0YV9xdWV1ZSA9ICZwc3RhcHJpdi0+ZnJlZV9zdGFfcXVldWU7Ci0KIAlwc3RheG1pdHByaXYgPSAmcHN0YS0+c3RhX3htaXRwcml2OwogCiAJc3Bpbl9sb2NrX2JoKCZweG1pdHByaXYtPmxvY2spOwpAQCAtMzIzLDcgKzI1NCw2IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQJKnBoZWFkLCAqcGxpc3Q7CiAJCXN0cnVjdCByZWN2X2ZyYW1lICpwcmZyYW1lOwogCQlzdHJ1Y3QgcnR3X3F1ZXVlICpwcGVuZGluZ19yZWN2ZnJhbWVfcXVldWU7Ci0JCXN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3JlY3ZfcXVldWUgPSAmcGFkYXB0ZXItPnJlY3Zwcml2LmZyZWVfcmVjdl9xdWV1ZTsKIAogCQlwcmVvcmRlcl9jdHJsID0gJnBzdGEtPnJlY3ZyZW9yZGVyX2N0cmxbaV07CiAKQEAgLTMzOSwxMiArMjY5LDEyIEBACiAJCQlwcmZyYW1lID0gY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3QgcmVjdl9mcmFtZSwgbGlzdCk7CiAJCQlwbGlzdCA9IHBsaXN0LT5uZXh0OwogCQkJbGlzdF9kZWxfaW5pdCgmcHJmcmFtZS0+bGlzdCk7Ci0JCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJmcmFtZSwgcGZyZWVfcmVjdl9xdWV1ZSk7CisJCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJmcmFtZSk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnBwZW5kaW5nX3JlY3ZmcmFtZV9xdWV1ZS0+bG9jayk7CiAJfQogCWlmICghKHBzdGEtPnN0YXRlICYgV0lGSV9BUF9TVEFURSkpCi0JCXJ0d19oYWxfc2V0X29kbV92YXIyM2EocGFkYXB0ZXIsIEhBTF9PRE1fU1RBX0lORk8sIHBzdGEsIGZhbHNlKTsKKwkJcnRsODcyM2FfU2V0SGFsT0RNVmFyKHBhZGFwdGVyLCBIQUxfT0RNX1NUQV9JTkZPLCBwc3RhLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJc3Bpbl9sb2NrX2JoKCZwc3RhcHJpdi0+YXV0aF9saXN0X2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmcHN0YS0+YXV0aF9saXN0KSkgewpAQCAtMzc0LDcgKzMwNCw4IEBACiAJCXBzdGEtPmFpZCA9IDA7CiAJfQogI2VuZGlmCS8qICBDT05GSUdfODcyM0FVX0FQX01PREUgKi8KLQlsaXN0X2FkZF90YWlsKCZwc3RhLT5saXN0LCBnZXRfbGlzdF9oZWFkKHBmcmVlX3N0YV9xdWV1ZSkpOworCisJa2ZyZWUocHN0YSk7CiBleGl0OgogCXJldHVybiBfU1VDQ0VTUzsKIH0KQEAgLTM4NCw5ICszMTUsMTEgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdCwgKnBoZWFkLCAqcHRtcDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7Ci0Jc3RydWN0CXN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKKwlzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2ID0gJnBhZGFwdGVyLT5zdGFwcml2OwogCXN0cnVjdCBzdGFfaW5mbyogcGJjbWNfc3RhaW5mbyA9IHJ0d19nZXRfYmNtY19zdGFpbmZvMjNhKHBhZGFwdGVyKTsKLQlzMzIJaW5kZXg7CWlmIChwc3RhcHJpdi0+YXNvY19zdGFfY291bnQgPT0gMSkKKwlzMzIgaW5kZXg7CisKKwlpZiAocHN0YXByaXYtPmFzb2Nfc3RhX2NvdW50ID09IDEpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19iaCgmcHN0YXByaXYtPnN0YV9oYXNoX2xvY2spOwpAQCAtNDA1LDEyICszMzgsMTIgQEAKIH0KIAogLyogYW55IHN0YXRpb24gYWxsb2NhdGVkIGNhbiBiZSBzZWFyY2hlZCBieSBoYXNoIGxpc3QgKi8KLXN0cnVjdCBzdGFfaW5mbyAqcnR3X2dldF9zdGFpbmZvMjNhKHN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYsIHU4ICpod2FkZHIpCitzdHJ1Y3Qgc3RhX2luZm8gKnJ0d19nZXRfc3RhaW5mbzIzYShzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2LCBjb25zdCB1OCAqaHdhZGRyKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0LCAqcGhlYWQ7CiAJc3RydWN0IHN0YV9pbmZvICpwc3RhID0gTlVMTDsKIAl1MzIJaW5kZXg7Ci0JdTggKmFkZHI7CisJY29uc3QgdTggKmFkZHI7CiAJdTggYmNfYWRkcltFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CiAKIAlpZiAoaHdhZGRyID09IE5VTEwpCkBAIC00NDAsMTUgKzM3MywxNSBAQAogCXJldHVybiBwc3RhOwogfQogCi11MzIgcnR3X2luaXRfYmNtY19zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpCitpbnQgcnR3X2luaXRfYmNtY19zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIpCiB7CiAJc3RydWN0CXN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKIAlzdHJ1Y3Qgc3RhX2luZm8JCSpwc3RhOwogCXN0cnVjdCB0eF9zZXJ2cQkqcHR4c2VydnE7Ci0JdTMyIHJlcyA9IF9TVUNDRVNTOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAl1bnNpZ25lZCBjaGFyIGJjYXN0X2FkZHJbNl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CiAKLQlwc3RhID0gcnR3X2FsbG9jX3N0YWluZm8yM2EocHN0YXByaXYsIGJjYXN0X2FkZHIpOworCXBzdGEgPSBydHdfYWxsb2Nfc3RhaW5mbzIzYShwc3RhcHJpdiwgYmNhc3RfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBzdGEgPT0gTlVMTCkgewogCQlyZXMgPSBfRkFJTDsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3N0YV9tZ3RfY18sIF9kcnZfZXJyXywKQEAgLTQ3MiwxMyArNDA1LDEzIEBACiAJcmV0dXJuIHBzdGE7CiB9CiAKLXU4IHJ0d19hY2Nlc3NfY3RybDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqbWFjX2FkZHIpCitib29sIHJ0d19hY2Nlc3NfY3RybDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqbWFjX2FkZHIpCiB7Ci0JdTggcmVzID0gdHJ1ZTsKKwlib29sIHJlcyA9IHRydWU7CiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsICpwaGVhZDsKIAlzdHJ1Y3QgcnR3X3dsYW5fYWNsX25vZGUgKnBhY2xub2RlOwotCXU4IG1hdGNoID0gZmFsc2U7CisJYm9vbCBtYXRjaCA9IGZhbHNlOwogCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHdsYW5fYWNsX3Bvb2wgKnBhY2xfbGlzdCA9ICZwc3RhcHJpdi0+YWNsX2xpc3Q7CiAJc3RydWN0IHJ0d19xdWV1ZSAqcGFjbF9ub2RlX3EgPSAmcGFjbF9saXN0LT5hY2xfbm9kZV9xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d193bGFuX3V0aWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfd2xhbl91dGlsLmMKaW5kZXggOTlkODFlNi4uNTc5YTRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d193bGFuX3V0aWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2NvcmUvcnR3X3dsYW5fdXRpbC5jCkBAIC0zMiwyOSArMzIsMzYgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIEFJUkdPQ0FQX09VSVtdID0gezB4MDAsIDB4MGEsIDB4ZjV9Owogc3RhdGljIHVuc2lnbmVkIGNoYXIgRVBJR1JBTV9PVUlbXSA9IHsweDAwLCAweDkwLCAweDRjfTsKIAotdW5zaWduZWQgY2hhciBSRUFMVEVLXzk2Ql9JRTIzQVtdID0gezB4MDAsIDB4ZTAsIDB4NGMsIDB4MDIsIDB4MDEsIDB4MjB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgV1BBX1RLSVBfQ0lQSEVSWzRdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDJ9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgUlNOX1RLSVBfQ0lQSEVSWzRdID0gezB4MDAsIDB4MGYsIDB4YWMsIDB4MDJ9OwogCi0jZGVmaW5lIFIyVF9QSFlfREVMQVkJKDApCisjZGVmaW5lIFIyVF9QSFlfREVMQVkJCTAKIAotLyogZGVmaW5lIFdBSVRfRk9SX0JDTl9UT19NSU4JKDMwMDApICovCi0jZGVmaW5lIFdBSVRfRk9SX0JDTl9UT19NSU4JKDYwMDApCi0jZGVmaW5lIFdBSVRfRk9SX0JDTl9UT19NQVgJKDIwMDAwKQorLyogZGVmaW5lIFdBSVRfRk9SX0JDTl9UT19NSU4JMzAwMCAqLworI2RlZmluZSBXQUlUX0ZPUl9CQ05fVE9fTUlOCTYwMDAKKyNkZWZpbmUgV0FJVF9GT1JfQkNOX1RPX01BWAkyMDAwMAogCiBzdGF0aWMgdTggcnR3X2Jhc2ljX3JhdGVfY2NrWzRdID0gewotCUlFRUU4MDIxMV9DQ0tfUkFURV8xTUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywgSUVFRTgwMjExX0NDS19SQVRFXzJNQnxJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAotCUlFRUU4MDIxMV9DQ0tfUkFURV81TUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywgSUVFRTgwMjExX0NDS19SQVRFXzExTUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSworCUlFRUU4MDIxMV9DQ0tfUkFURV8xTUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAorCUlFRUU4MDIxMV9DQ0tfUkFURV8yTUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAorCUlFRUU4MDIxMV9DQ0tfUkFURV81TUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAorCUlFRUU4MDIxMV9DQ0tfUkFURV8xMU1CIHwgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSwogfTsKIAogc3RhdGljIHU4IHJ0d19iYXNpY19yYXRlX29mZG1bM10gPSB7Ci0JSUVFRTgwMjExX09GRE1fUkFURV82TUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CfElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0ssCi0JSUVFRTgwMjExX09GRE1fUkFURV8yNE1CfElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzZNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0ssCisJSUVFRTgwMjExX09GRE1fUkFURV8xMk1CIHwgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLCiB9OwogCiBzdGF0aWMgdTggcnR3X2Jhc2ljX3JhdGVfbWl4WzddID0gewotCUlFRUU4MDIxMV9DQ0tfUkFURV8xTUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywgSUVFRTgwMjExX0NDS19SQVRFXzJNQnxJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAotCUlFRUU4MDIxMV9DQ0tfUkFURV81TUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywgSUVFRTgwMjExX0NDS19SQVRFXzExTUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzZNQnxJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLCBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJ8SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSworCUlFRUU4MDIxMV9DQ0tfUkFURV8xTUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAorCUlFRUU4MDIxMV9DQ0tfUkFURV8yTUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAorCUlFRUU4MDIxMV9DQ0tfUkFURV81TUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLLAorCUlFRUU4MDIxMV9DQ0tfUkFURV8xMU1CIHwgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzZNQiB8IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0ssCisJSUVFRTgwMjExX09GRE1fUkFURV8xMk1CIHwgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSywKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIgfCBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLCiB9OwogCiBpbnQgY2NrcmF0ZXNfaW5jbHVkZWQyM2EodW5zaWduZWQgY2hhciAqcmF0ZSwgaW50IHJhdGVsZW4pCkBAIC02Miw4ICs2OSw4IEBACiAJaW50CWk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmF0ZWxlbjsgaSsrKSB7Ci0JCWlmICAoKCgocmF0ZVtpXSkgJiAweDdmKSA9PSAyKQl8fCAoKChyYXRlW2ldKSAmIDB4N2YpID09IDQpIHx8Ci0JCSAgICAgKCgocmF0ZVtpXSkgJiAweDdmKSA9PSAxMSkgIHx8ICgoKHJhdGVbaV0pICYgMHg3ZikgPT0gMjIpKQorCQlpZiAgKCgocmF0ZVtpXSkgJiAweDdmKSA9PSAyIHx8ICgocmF0ZVtpXSkgJiAweDdmKSA9PSA0IHx8CisJCSAgICAgKChyYXRlW2ldKSAmIDB4N2YpID09IDExICB8fCAoKHJhdGVbaV0pICYgMHg3ZikgPT0gMjIpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTc1LDggKzgyLDggQEAKIAlpbnQJaTsKIAogCWZvciAoaSA9IDA7IGkgPCByYXRlbGVuOyBpKyspIHsKLQkJaWYgICgoKChyYXRlW2ldKSAmIDB4N2YpICE9IDIpICYmICgoKHJhdGVbaV0pICYgMHg3ZikgIT0gNCkgJiYKLQkJCSAgICgoKHJhdGVbaV0pICYgMHg3ZikgIT0gMTEpICAmJiAoKChyYXRlW2ldKSAmIDB4N2YpICE9IDIyKSkKKwkJaWYgICgoKHJhdGVbaV0pICYgMHg3ZikgIT0gMiAmJiAoKHJhdGVbaV0pICYgMHg3ZikgIT0gNCAmJgorCQkgICAgICgocmF0ZVtpXSkgJiAweDdmKSAhPSAxMSAmJiAoKHJhdGVbaV0pICYgMHg3ZikgIT0gMjIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTExNiwxMCArMTIzLDExIEBACiAJcmV0dXJuIHJhaWQ7CiB9CiAKLXU4IGp1ZGdlX25ldHdvcmtfdHlwZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpyYXRlLCBpbnQgcmF0ZWxlbikKK3U4IGp1ZGdlX25ldHdvcmtfdHlwZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJIHVuc2lnbmVkIGNoYXIgKnJhdGUsIGludCByYXRlbGVuKQogewogCXU4IG5ldHdvcmtfdHlwZSA9IDA7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKKwlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCiAJaWYgKHBtbG1lZXh0LT5jdXJfY2hhbm5lbCA+IDE0KSB7CkBAIC0xNDAsNyArMTQ4LDcgQEAKIAlyZXR1cm4JbmV0d29ya190eXBlOwogfQogCi11bnNpZ25lZCBjaGFyIHJhdGV0YmxfdmFsXzJ3aWZpcmF0ZSh1bnNpZ25lZCBjaGFyIHJhdGUpCitzdGF0aWMgdW5zaWduZWQgY2hhciByYXRldGJsX3ZhbF8yd2lmaXJhdGUodW5zaWduZWQgY2hhciByYXRlKQogewogCXVuc2lnbmVkIGNoYXIgdmFsID0gMDsKIApAQCAtMTg1LDcgKzE5Myw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotaW50IGlzX2Jhc2ljcmF0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyIHJhdGUpCitzdGF0aWMgaW50IGlzX2Jhc2ljcmF0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyIHJhdGUpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciB2YWw7CkBAIC0xOTQsNyArMjAyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTnVtUmF0ZXM7IGkrKykgewogCQl2YWwgPSBwbWxtZWV4dC0+YmFzaWNyYXRlW2ldOwogCi0JCWlmICgodmFsICE9IDB4ZmYpICYmICh2YWwgIT0gMHhmZSkpIHsKKwkJaWYgKHZhbCAhPSAweGZmICYmIHZhbCAhPSAweGZlKSB7CiAJCQlpZiAocmF0ZSA9PSByYXRldGJsX3ZhbF8yd2lmaXJhdGUodmFsKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMjAzLDExICsyMTEsMTIgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXVuc2lnbmVkIGludCByYXRldGJsMnJhdGVzZXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcmF0ZXNldCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXRibDJyYXRlc2V0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgKnJhdGVzZXQpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciByYXRlOwotCXVuc2lnbmVkIGludAlsZW4gPSAwOworCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTnVtUmF0ZXM7IGkrKykgewpAQCAtMjMyLDcgKzI0MSw4IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotdm9pZCBnZXRfcmF0ZV9zZXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJzc3JhdGUsIGludCAqYnNzcmF0ZV9sZW4pCit2b2lkIGdldF9yYXRlX3NldDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBic3NyYXRlLCBpbnQgKmJzc3JhdGVfbGVuKQogewogCXVuc2lnbmVkIGNoYXIgc3VwcG9ydGVkcmF0ZXNbTnVtUmF0ZXNdOwogCkBAIC0yNDMsOCArMjUzLDggQEAKIAogdm9pZCBVcGRhdGVCcmF0ZVRibDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsIHU4ICptQnJhdGVzT1MpCiB7Ci0JdTgJaTsKLQl1OAlyYXRlOworCXU4IGk7CisJdTggcmF0ZTsKIAogCS8qICAxTSwgMk0sIDUuNU0sIDExTSwgNk0sIDEyTSwgMjRNIGFyZSBtYW5kYXRvcnkuICovCiAJZm9yIChpID0gMDsgaSA8IE5ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWDsgaSsrKSB7CkBAIC0yNjcsOCArMjc3LDggQEAKIAogdm9pZCBVcGRhdGUyM2FUYmxGb3JTb2Z0QVAodTggKmJzc3JhdGVzZXQsIHUzMiBic3NyYXRlbGVuKQogewotCXU4CWk7Ci0JdTgJcmF0ZTsKKwl1OCBpOworCXU4IHJhdGU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnNzcmF0ZWxlbjsgaSsrKSB7CiAJCXJhdGUgPSBic3NyYXRlc2V0W2ldICYgMHg3ZjsKQEAgLTI4MywzNSArMjkzLDkgQEAKIAl9CiB9CiAKLXZvaWQgU2F2ZV9ETV9GdW5jX0ZsYWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQl1OAliU2F2ZUZsYWcgPSB0cnVlOwotCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9ETV9GVU5DX09QLCAodTggKikoJmJTYXZlRmxhZykpOwotfQotCi12b2lkIFJlc3RvcmVfRE1fRnVuY19GbGFnMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JdTgJYlNhdmVGbGFnID0gZmFsc2U7Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9ETV9GVU5DX09QLCAodTggKikoJmJTYXZlRmxhZykpOwotfQotCi12b2lkIFN3aXRjaF9ETV9GdW5jMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGxvbmcgbW9kZSwgdTggZW5hYmxlKQotewotCWlmIChlbmFibGUgPT0gdHJ1ZSkKLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9ETV9GVU5DX1NFVCwgKHU4ICopKCZtb2RlKSk7Ci0JZWxzZQotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0RNX0ZVTkNfQ0xSLCAodTggKikoJm1vZGUpKTsKLX0KLQotc3RhdGljIHZvaWQgU2V0X05FVFlQRTBfTVNSKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHR5cGUpCi17Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9NRURJQV9TVEFUVVMsICh1OCAqKSgmdHlwZSkpOwotfQotCiB2b2lkIFNldF9NU1IyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggdHlwZSkKIHsKLQkJU2V0X05FVFlQRTBfTVNSKHBhZGFwdGVyLCB0eXBlKTsKKwlydGw4NzIzYV9zZXRfbWVkaWFfc3RhdHVzKHBhZGFwdGVyLCB0eXBlKTsKIH0KIAogaW5saW5lIHU4IHJ0d19nZXRfb3Blcl9jaDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0zNTEsMTIgKzMzNSwxMyBAQAogCS8qIHNhdmVkIGNoYW5uZWwgaW5mbyAqLwogCXJ0d19zZXRfb3Blcl9jaDIzYShwYWRhcHRlciwgY2hhbm5lbCk7CiAKLQlydHdfaGFsX3NldF9jaGFuMjNhKHBhZGFwdGVyLCBjaGFubmVsKTsKKwlQSFlfU3dDaG5sODcyM0EocGFkYXB0ZXIsIGNoYW5uZWwpOwogCiAJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyX3RvX2R2b2JqKHBhZGFwdGVyKS0+c2V0Y2hfbXV0ZXgpOwogfQogCi12b2lkIFNldEJXTW9kZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBzaG9ydCBid21vZGUsIHVuc2lnbmVkIGNoYXIgY2hhbm5lbF9vZmZzZXQpCitzdGF0aWMgdm9pZCBzZXRfYndtb2RlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIHNob3J0IGJ3bW9kZSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgY2hhbm5lbF9vZmZzZXQpCiB7CiAJbXV0ZXhfbG9jaygmYWRhcHRlcl90b19kdm9iaihwYWRhcHRlciktPnNldGJ3X211dGV4KTsKIApAQCAtMzY0LDggKzM0OSw4IEBACiAJcnR3X3NldF9vcGVyX2J3MjNhKHBhZGFwdGVyLCBid21vZGUpOwogCXJ0d19zZXRfb3Blcl9jaDIzYW9mZnNldDIzYShwYWRhcHRlciwgY2hhbm5lbF9vZmZzZXQpOwogCi0JcnR3X2hhbF9zZXRfYndtb2RlMjNhKHBhZGFwdGVyLCAoZW51bSBodF9jaGFubmVsX3dpZHRoKWJ3bW9kZSwKLQkJCSAgIGNoYW5uZWxfb2Zmc2V0KTsKKwlQSFlfU2V0QldNb2RlMjNhODcyM0EocGFkYXB0ZXIsIChlbnVtIGh0X2NoYW5uZWxfd2lkdGgpYndtb2RlLAorCQkJICAgICAgY2hhbm5lbF9vZmZzZXQpOwogCiAJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyX3RvX2R2b2JqKHBhZGFwdGVyKS0+c2V0YndfbXV0ZXgpOwogfQpAQCAtMzc2LDEwICszNjEsMTEgQEAKIAl1OCBjZW50ZXJfY2g7CiAKIAlpZiAocGFkYXB0ZXItPmJOb3RpZnlDaGFubmVsQ2hhbmdlKQotCQlEQkdfODcyM0EoIlslc10gY2ggPSAlZCwgb2Zmc2V0ID0gJWQsIGJ3bW9kZSA9ICVkXG4iLCBfX2Z1bmNfXywgY2hhbm5lbCwgY2hhbm5lbF9vZmZzZXQsIGJ3bW9kZSk7CisJCURCR184NzIzQSgiWyVzXSBjaCA9ICVkLCBvZmZzZXQgPSAlZCwgYndtb2RlID0gJWRcbiIsCisJCQkgIF9fZnVuY19fLCBjaGFubmVsLCBjaGFubmVsX29mZnNldCwgYndtb2RlKTsKIAotCWlmICgoYndtb2RlID09IEhUX0NIQU5ORUxfV0lEVEhfMjApIHx8Ci0JICAgIChjaGFubmVsX29mZnNldCA9PSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFKSkgeworCWlmIChid21vZGUgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCB8fAorCSAgICBjaGFubmVsX29mZnNldCA9PSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFKSB7CiAJCS8qIFNlbGVjdENoYW5uZWwyM2EocGFkYXB0ZXIsIGNoYW5uZWwpOyAqLwogCQljZW50ZXJfY2ggPSBjaGFubmVsOwogCX0gZWxzZSB7CkBAIC00MDEsMjAgKzM4NywxMSBAQAogCXJ0d19zZXRfb3Blcl9idzIzYShwYWRhcHRlciwgYndtb2RlKTsKIAlydHdfc2V0X29wZXJfY2gyM2FvZmZzZXQyM2EocGFkYXB0ZXIsIGNoYW5uZWxfb2Zmc2V0KTsKIAotCXJ0d19oYWxfc2V0X2NoYW4yM2EocGFkYXB0ZXIsIGNlbnRlcl9jaCk7IC8qICBzZXQgY2VudGVyIGNoYW5uZWwgKi8KKwlQSFlfU3dDaG5sODcyM0EocGFkYXB0ZXIsIGNlbnRlcl9jaCk7IC8qICBzZXQgY2VudGVyIGNoYW5uZWwgKi8KIAogCW11dGV4X3VubG9jaygmYWRhcHRlcl90b19kdm9iaihwYWRhcHRlciktPnNldGNoX211dGV4KTsKIAotCVNldEJXTW9kZTIzYShwYWRhcHRlciwgYndtb2RlLCBjaGFubmVsX29mZnNldCk7Ci19Ci0KLWludCBnZXRfYnNzdHlwZTIzYSh1bnNpZ25lZCBzaG9ydCBjYXBhYmlsaXR5KQotewotCWlmIChjYXBhYmlsaXR5ICYgQklUKDApKQotCQlyZXR1cm4gV0lGSV9GV19BUF9TVEFURTsKLQllbHNlIGlmIChjYXBhYmlsaXR5ICYgQklUKDEpKQotCQlyZXR1cm4gV0lGSV9GV19BREhPQ19TVEFURTsKLQlyZXR1cm4gMDsKKwlzZXRfYndtb2RlKHBhZGFwdGVyLCBid21vZGUsIGNoYW5uZWxfb2Zmc2V0KTsKIH0KIAogaW5saW5lIHU4ICpnZXRfbXlfYnNzaWQyM2Eoc3RydWN0IHdsYW5fYnNzaWRfZXggKnBuZXR3b3JrKQpAQCAtNDI1LDQ5ICs0MDIsNTAgQEAKIHUxNiBnZXRfYmVhY29uX2ludGVydmFsMjNhKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpic3MpCiB7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwotCW1lbWNweSgodW5zaWduZWQgY2hhciAqKSZ2YWwsIHJ0d19nZXRfYmVhY29uX2ludGVydmFsMjNhX2Zyb21faWUoYnNzLT5JRXMpLCAyKTsKKwltZW1jcHkoJnZhbCwgcnR3X2dldF9iZWFjb25faW50ZXJ2YWwyM2FfZnJvbV9pZShic3MtPklFcyksIDIpOwogCiAJcmV0dXJuIGxlMTZfdG9fY3B1KHZhbCk7CiB9CiAKLWludCBpc19jbGllbnRfYXNzb2NpYXRlZF90b19hcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQorYm9vbCBpc19jbGllbnRfYXNzb2NpYXRlZF90b19hcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dDsKLQlzdHJ1Y3QgbWxtZV9leHRfaW5mbwkqcG1sbWVpbmZvOworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dDsKKwlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvOwogCiAJaWYgKCFwYWRhcHRlcikKLQkJcmV0dXJuIF9GQUlMOworCQlyZXR1cm4gZmFsc2U7CiAKIAlwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAotCWlmICgocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVNTT0NfU1VDQ0VTUykgJiYgKChwbWxtZWluZm8tPnN0YXRlJjB4MDMpID09IFdJRklfRldfU1RBVElPTl9TVEFURSkpCisJaWYgKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MgJiYKKwkgICAgKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSA9PSBXSUZJX0ZXX1NUQVRJT05fU1RBVEUpCiAJCXJldHVybiB0cnVlOwogCWVsc2UKLQkJcmV0dXJuIF9GQUlMOworCQlyZXR1cm4gZmFsc2U7CiB9CiAKLWludCBpc19jbGllbnRfYXNzb2NpYXRlZF90b19pYnNzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitib29sIGlzX2NsaWVudF9hc3NvY2lhdGVkX3RvX2lic3MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKLQlpZiAoKHBtbG1laW5mby0+c3RhdGUgJiBXSUZJX0ZXX0FTU09DX1NVQ0NFU1MpICYmCi0JICAgICgocG1sbWVpbmZvLT5zdGF0ZSYweDAzKSA9PSBXSUZJX0ZXX0FESE9DX1NUQVRFKSkKKwlpZiAocG1sbWVpbmZvLT5zdGF0ZSAmIFdJRklfRldfQVNTT0NfU1VDQ0VTUyAmJgorCSAgICAocG1sbWVpbmZvLT5zdGF0ZSAmIDB4MDMpID09IFdJRklfRldfQURIT0NfU1RBVEUpCiAJCXJldHVybiB0cnVlOwogCWVsc2UKLQkJcmV0dXJuIF9GQUlMOworCQlyZXR1cm4gZmFsc2U7CiB9CiAKLWludCBpc19JQlNTX2VtcHR5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitib29sIGlzX0lCU1NfZW1wdHkyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKIAlmb3IgKGkgPSBJQlNTX1NUQVJUX01BQ19JRDsgaSA8IE5VTV9TVEE7IGkrKykgewogCQlpZiAocG1sbWVpbmZvLT5GV19zdGFfaW5mb1tpXS5zdGF0dXMgPT0gMSkKLQkJCXJldHVybiBfRkFJTDsKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTQ4Myw2NiArNDYxLDI2IEBACiAJCXJldHVybiBiY25faW50ZXJ2YWwgPDwgMjsKIH0KIAotdm9pZCBDQU1fZW1wdHlfZW50cnkyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLCB1OCB1Y0luZGV4KQotewotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKEFkYXB0ZXIsIEhXX1ZBUl9DQU1fRU1QVFlfRU5UUlksICh1OCAqKSgmdWNJbmRleCkpOwotfQotCiB2b2lkIGludmFsaWRhdGVfY2FtX2FsbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQ0FNX0lOVkFMSURfQUxMLCBOVUxMKTsKLX0KLQotdm9pZCB3cml0ZV9jYW0yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggZW50cnksIHUxNiBjdHJsLCB1OCAqbWFjLCB1OCAqa2V5KQotewotCXVuc2lnbmVkIGludAlpLCB2YWwsIGFkZHI7Ci0JaW50IGo7Ci0JdTMyCWNhbV92YWxbMl07Ci0KLQlhZGRyID0gZW50cnkgPDwgMzsKLQotCWZvciAoaiA9IDU7IGogPj0gMDsgai0tKSB7Ci0JCXN3aXRjaCAoaikgewotCQljYXNlIDA6Ci0JCQl2YWwgPSAoY3RybCB8IChtYWNbMF0gPDwgMTYpIHwgKG1hY1sxXSA8PCAyNCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXZhbCA9IChtYWNbMl0gfCAobWFjWzNdIDw8IDgpIHwgKG1hY1s0XSA8PCAxNikgfCAobWFjWzVdIDw8IDI0KSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWkgPSAoaiAtIDIpIDw8IDI7Ci0JCQl2YWwgPSAoa2V5W2ldIHwgKGtleVtpKzFdIDw8IDgpIHwgKGtleVtpKzJdIDw8IDE2KSB8IChrZXlbaSszXSA8PCAyNCkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYW1fdmFsWzBdID0gdmFsOwotCQljYW1fdmFsWzFdID0gYWRkciArICh1bnNpZ25lZCBpbnQpajsKLQotCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0NBTV9XUklURSwgKHU4ICopY2FtX3ZhbCk7Ci0KLQkJLyogcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFdDQU1JLCB2YWwpOyAqLwotCi0JCS8qIGNtZCA9IENBTV9QT0xMSU5JRyB8IENBTV9XUklURSB8IChhZGRyICsgaik7ICovCi0JCS8qIHJ0d193cml0ZTMyKHBhZGFwdGVyLCBSV0NBTSwgY21kKTsgKi8KLQotCQkvKiBEQkdfODcyM0EoIiVzID0+IGNhbSB3cml0ZTogJXgsICV4XG4iLCBfX2Z1bmNfXywgY21kLCB2YWwpOyAqLwotCi0JfQorCXJ0bDg3MjNhX2NhbV9pbnZhbGlkX2FsbChwYWRhcHRlcik7CiB9CiAKIHZvaWQgY2xlYXJfY2FtX2VudHJ5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGVudHJ5KQogewogCXVuc2lnbmVkIGNoYXIgbnVsbF9zdGFbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAotCXVuc2lnbmVkIGNoYXIgbnVsbF9rZXlbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKwl1bnNpZ25lZCBjaGFyIG51bGxfa2V5W10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CiAKLQl3cml0ZV9jYW0yM2EocGFkYXB0ZXIsIGVudHJ5LCAwLCBudWxsX3N0YSwgbnVsbF9rZXkpOworCXJ0bDg3MjNhX2NhbV93cml0ZShwYWRhcHRlciwgZW50cnksIDAsIG51bGxfc3RhLCBudWxsX2tleSk7CiB9CiAKIGludCBhbGxvY2F0ZV9md19zdGFfZW50cnkyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAl1bnNpZ25lZCBpbnQgbWFjX2lkOwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAogCWZvciAobWFjX2lkID0gSUJTU19TVEFSVF9NQUNfSUQ7IG1hY19pZCA8IE5VTV9TVEE7IG1hY19pZCsrKSB7CkBAIC01NTgsNjkgKzQ5Niw0MyBAQAogCiB2b2lkIGZsdXNoX2FsbF9jYW1fZW50cnkyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0NBTV9JTlZBTElEX0FMTCwgTlVMTCk7CisJcnRsODcyM2FfY2FtX2ludmFsaWRfYWxsKHBhZGFwdGVyKTsKIAotCW1lbXNldCgodTggKikocG1sbWVpbmZvLT5GV19zdGFfaW5mbyksIDAsIHNpemVvZihwbWxtZWluZm8tPkZXX3N0YV9pbmZvKSk7CisJbWVtc2V0KHBtbG1laW5mby0+Rldfc3RhX2luZm8sIDAsIHNpemVvZihwbWxtZWluZm8tPkZXX3N0YV9pbmZvKSk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR184NzIzQVVfUDJQKSAmJiBkZWZpbmVkKENPTkZJR184NzIzQVVfUDJQKQotaW50IFdGRF9pbmZvX2hhbmRsZXIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKglwSUUpCi17Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbwkqcHdkaW5mbzsKLQl1OAl3ZmRfaWVbTUFYX1dGRF9JRV9MRU5dID0gezB4MDB9OwotCXUzMgl3ZmRfaWVsZW4gPSAwOwotCi0JcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCWlmIChydHdfZ2V0X3dmZF9pZSgodTggKikgcElFLCBwSUUtPkxlbmd0aCwgd2ZkX2llLCAmd2ZkX2llbGVuKSkgewotCQl1OAlhdHRyX2NvbnRlbnRbIDEwIF0gPSB7IDB4MDAgfTsKLQkJdTMyCWF0dHJfY29udGVudGxlbiA9IDA7Ci0KLQkJREJHXzg3MjNBKCJbJXNdIEZvdW5kIFdGRCBJRVxuIiwgX19mdW5jX18pOwotCQlydHdfZ2V0X3dmZF9hdHRyX2NvbnRlbnQod2ZkX2llLCB3ZmRfaWVsZW4sIFdGRF9BVFRSX0RFVklDRV9JTkZPLCBhdHRyX2NvbnRlbnQsICZhdHRyX2NvbnRlbnRsZW4pOwotCQlpZiAoYXR0cl9jb250ZW50bGVuKSB7Ci0JCQlwd2RpbmZvLT53ZmRfaW5mby0+cGVlcl9ydHNwX2N0cmxwb3J0ID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGF0dHJfY29udGVudCArIDIpOwotCQkJREJHXzg3MjNBKCJbJXNdIFBlZXIgUE9SVCBOVU0gPSAlZFxuIiwgX19mdW5jX18sIHB3ZGluZm8tPndmZF9pbmZvLT5wZWVyX3J0c3BfY3RybHBvcnQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkdfODcyM0EoIlslc10gTk8gV0ZEIElFXG4iLCBfX2Z1bmNfXyk7Ci0JfQotCXJldHVybiBfRkFJTDsKLX0KLSNlbmRpZgotCi1pbnQgV01NX3BhcmFtX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKglwSUUpCitpbnQgV01NX3BhcmFtX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnApCiB7CiAJLyogc3RydWN0IHJlZ2lzdHJ5X3ByaXYJKnByZWdwcml2ID0gJnBhZGFwdGVyLT5yZWdpc3RyeXByaXY7ICovCiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKLQlpZiAocG1sbWVwcml2LT5xb3Nwcml2LnFvc19vcHRpb24gPT0gMCkgeworCWlmIChwbWxtZXByaXYtPnFvc19vcHRpb24gPT0gMCkgewogCQlwbWxtZWluZm8tPldNTV9lbmFibGUgPSAwOwogCQlyZXR1cm4gX0ZBSUw7CiAJfQogCiAJcG1sbWVpbmZvLT5XTU1fZW5hYmxlID0gMTsKLQltZW1jcHkoJnBtbG1laW5mby0+V01NX3BhcmFtLCAocElFLT5kYXRhICsgNiksCisJbWVtY3B5KCZwbWxtZWluZm8tPldNTV9wYXJhbSwgcCArIDIgKyA2LAogCSAgICAgICBzaXplb2Yoc3RydWN0IFdNTV9wYXJhX2VsZW1lbnQpKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXTU1PbkFzc29jUnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JdTgJQUNJLCBBQ00sIEFJRlMsIEVDV01pbiwgRUNXTWF4LCBhU2lmc1RpbWU7Ci0JdTgJYWNtX21hc2s7Ci0JdTE2CVRYT1A7Ci0JdTMyCWFjUGFybSwgaTsKLQl1MzIJZWRjYVs0XSwgaW54WzRdOwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJdTggQUNJLCBBQ00sIEFJRlMsIEVDV01pbiwgRUNXTWF4LCBhU2lmc1RpbWU7CisJdTggYWNtX21hc2s7CisJdTE2IFRYT1A7CisJdTMyIGFjUGFybSwgaTsKKwl1MzIgZWRjYVs0XSwgaW54WzRdOworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0Jc3RydWN0IHhtaXRfcHJpdgkJKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IHJlZ2lzdHJ5X3ByaXYJKnByZWdwcml2ID0gJnBhZGFwdGVyLT5yZWdpc3RyeXByaXY7CisJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKKwlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ3ByaXYgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKIAogCWlmIChwbWxtZWluZm8tPldNTV9lbmFibGUgPT0gMCkgewogCQlwYWRhcHRlci0+bWxtZXByaXYuYWNtX21hc2sgPSAwOwpAQCAtNjM5LDkgKzU1MSwxMCBAQAogCQlBQ00gPSAocG1sbWVpbmZvLT5XTU1fcGFyYW0uYWNfcGFyYW1baV0uQUNJX0FJRlNOID4+IDQpICYgMHgwMTsKIAogCQkvKiBBSUZTID0gQUlGU04gKiBzbG90IHRpbWUgKyBTSUZTIC0gcjJ0IHBoeSBkZWxheSAqLwotCQlBSUZTID0gKHBtbG1laW5mby0+V01NX3BhcmFtLmFjX3BhcmFtW2ldLkFDSV9BSUZTTiAmIDB4MGYpICogcG1sbWVpbmZvLT5zbG90VGltZSArIGFTaWZzVGltZTsKKwkJQUlGUyA9IChwbWxtZWluZm8tPldNTV9wYXJhbS5hY19wYXJhbVtpXS5BQ0lfQUlGU04gJiAweDBmKSAqCisJCQlwbWxtZWluZm8tPnNsb3RUaW1lICsgYVNpZnNUaW1lOwogCi0JCUVDV01pbiA9IChwbWxtZWluZm8tPldNTV9wYXJhbS5hY19wYXJhbVtpXS5DVyAmIDB4MGYpOworCQlFQ1dNaW4gPSBwbWxtZWluZm8tPldNTV9wYXJhbS5hY19wYXJhbVtpXS5DVyAmIDB4MGY7CiAJCUVDV01heCA9IChwbWxtZWluZm8tPldNTV9wYXJhbS5hY19wYXJhbVtpXS5DVyAmIDB4ZjApID4+IDQ7CiAJCVRYT1AgPSBsZTE2X3RvX2NwdShwbWxtZWluZm8tPldNTV9wYXJhbS5hY19wYXJhbVtpXS5UWE9QX2xpbWl0KTsKIApAQCAtNjQ5LDIyICs1NjIsMjIgQEAKIAogCQlzd2l0Y2ggKEFDSSkgewogCQljYXNlIDB4MDoKLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQUNfUEFSQU1fQkUsICh1OCAqKSgmYWNQYXJtKSk7CisJCQlydGw4NzIzYV9zZXRfYWNfcGFyYW1fYmUocGFkYXB0ZXIsIGFjUGFybSk7CiAJCQlhY21fbWFzayB8PSAoQUNNPyBCSVQoMSk6MCk7CiAJCQllZGNhW1hNSVRfQkVfUVVFVUVdID0gYWNQYXJtOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxOgotCQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BQ19QQVJBTV9CSywgKHU4ICopKCZhY1Bhcm0pKTsKKwkJCXJ0bDg3MjNhX3NldF9hY19wYXJhbV9iayhwYWRhcHRlciwgYWNQYXJtKTsKIAkJCS8qIGFjbV9tYXNrIHw9IChBQ00/IEJJVCgwKTowKTsgKi8KIAkJCWVkY2FbWE1JVF9CS19RVUVVRV0gPSBhY1Bhcm07CiAJCQlicmVhazsKIAkJY2FzZSAweDI6Ci0JCQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0FDX1BBUkFNX1ZJLCAodTggKikoJmFjUGFybSkpOworCQkJcnRsODcyM2Ffc2V0X2FjX3BhcmFtX3ZpKHBhZGFwdGVyLCBhY1Bhcm0pOwogCQkJYWNtX21hc2sgfD0gKEFDTT8gQklUKDIpOjApOwogCQkJZWRjYVtYTUlUX1ZJX1FVRVVFXSA9IGFjUGFybTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MzoKLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQUNfUEFSQU1fVk8sICh1OCAqKSgmYWNQYXJtKSk7CisJCQlydGw4NzIzYV9zZXRfYWNfcGFyYW1fdm8ocGFkYXB0ZXIsIGFjUGFybSk7CiAJCQlhY21fbWFzayB8PSAoQUNNPyBCSVQoMyk6MCk7CiAJCQllZGNhW1hNSVRfVk9fUVVFVUVdID0gYWNQYXJtOwogCQkJYnJlYWs7CkBAIC02NzQsMTQgKzU4NywxNCBAQAogCX0KIAogCWlmIChwYWRhcHRlci0+cmVnaXN0cnlwcml2LmFjbV9tZXRob2QgPT0gMSkKLQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BQ01fQ1RSTCwgKHU4ICopKCZhY21fbWFzaykpOworCQlydGw4NzIzYV9zZXRfYWNtX2N0cmwocGFkYXB0ZXIsIGFjbV9tYXNrKTsKIAllbHNlCiAJCXBhZGFwdGVyLT5tbG1lcHJpdi5hY21fbWFzayA9IGFjbV9tYXNrOwogCiAJaW54WzBdID0gMDsgaW54WzFdID0gMTsgaW54WzJdID0gMjsgaW54WzNdID0gMzsKIAogCWlmIChwcmVncHJpdi0+d2lmaV9zcGVjID09IDEpIHsKLQkJdTMyCWosIHRtcCwgY2hhbmdlX2lueCA9IGZhbHNlOworCQl1MzIgaiwgdG1wLCBjaGFuZ2VfaW54ID0gZmFsc2U7CiAKIAkJLyogZW50cnkgaW5keDogMC0+dm8sIDEtPnZpLCAyLT5iZSwgMy0+YmsuICovCiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTY4OSw3ICs2MDIsOCBAQAogCQkJCS8qIGNvbXBhcmUgQ1cgYW5kIEFJRlMgKi8KIAkJCQlpZiAoKGVkY2Fbal0gJiAweEZGRkYpIDwgKGVkY2FbaV0gJiAweEZGRkYpKSB7CiAJCQkJCWNoYW5nZV9pbnggPSB0cnVlOwotCQkJCX0gZWxzZSBpZiAoKGVkY2Fbal0gJiAweEZGRkYpID09IChlZGNhW2ldICYgMHhGRkZGKSkgeworCQkJCX0gZWxzZSBpZiAoKGVkY2Fbal0gJiAweEZGRkYpID09CisJCQkJCSAgIChlZGNhW2ldICYgMHhGRkZGKSkgewogCQkJCQkvKiBjb21wYXJlIFRYT1AgKi8KIAkJCQkJaWYgKChlZGNhW2pdID4+IDE2KSA+IChlZGNhW2ldID4+IDE2KSkKIAkJCQkJCWNoYW5nZV9pbnggPSB0cnVlOwpAQCAtNzEyLDMxICs2MjYsMzIgQEAKIAogCWZvciAoaSA9IDA7IGk8NDsgaSsrKSB7CiAJCXB4bWl0cHJpdi0+d21tX3BhcmFfc2VxW2ldID0gaW54W2ldOwotCQlEQkdfODcyM0EoIndtbV9wYXJhX3NlcSglZCk6ICVkXG4iLCBpLCBweG1pdHByaXYtPndtbV9wYXJhX3NlcVtpXSk7CisJCURCR184NzIzQSgid21tX3BhcmFfc2VxKCVkKTogJWRcbiIsIGksCisJCQkgIHB4bWl0cHJpdi0+d21tX3BhcmFfc2VxW2ldKTsKIAl9CiAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGJ3bW9kZV91cGRhdGVfY2hlY2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKiBwSUUpCitzdGF0aWMgdm9pZCBid21vZGVfdXBkYXRlX2NoZWNrKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwKQogewotCXN0cnVjdCBIVF9pbmZvX2VsZW1lbnQJICpwSFRfaW5mbzsKKwlzdHJ1Y3QgSFRfaW5mb19lbGVtZW50ICpwSFRfaW5mbzsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OwotCXN0cnVjdCBodF9wcml2CSpwaHRwcml2ID0gJnBtbG1lcHJpdi0+aHRwcml2OwotCXVuc2lnbmVkIGNoYXIJIG5ld19id21vZGU7Ci0JdW5zaWduZWQgY2hhciAgbmV3X2NoX29mZnNldDsKKwlzdHJ1Y3QgaHRfcHJpdiAqcGh0cHJpdiA9ICZwbWxtZXByaXYtPmh0cHJpdjsKKwl1bnNpZ25lZCBjaGFyIG5ld19id21vZGU7CisJdW5zaWduZWQgY2hhciBuZXdfY2hfb2Zmc2V0OwogCi0JaWYgKCFwSUUpCisJaWYgKCFwKQogCQlyZXR1cm47CiAJaWYgKCFwaHRwcml2LT5odF9vcHRpb24pCiAJCXJldHVybjsKLQlpZiAocElFLT5MZW5ndGggPiBzaXplb2Yoc3RydWN0IEhUX2luZm9fZWxlbWVudCkpCisJaWYgKHBbMV0gPiBzaXplb2Yoc3RydWN0IEhUX2luZm9fZWxlbWVudCkpCiAJCXJldHVybjsKIAotCXBIVF9pbmZvID0gKHN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKilwSUUtPmRhdGE7CisJcEhUX2luZm8gPSAoc3RydWN0IEhUX2luZm9fZWxlbWVudCAqKShwICsgMik7CiAKIAlpZiAoKHBIVF9pbmZvLT5pbmZvc1swXSAmIEJJVCgyKSkgJiYgcHJlZ2lzdHJ5cHJpdi0+Y2J3NDBfZW5hYmxlKSB7CiAJCW5ld19id21vZGUgPSBIVF9DSEFOTkVMX1dJRFRIXzQwOwpAQCAtNzU3LDEzMyArNjcyLDE0NCBAQAogCQluZXdfY2hfb2Zmc2V0ID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKIAl9CiAKLQlpZiAoKG5ld19id21vZGUhPSBwbWxtZWV4dC0+Y3VyX2J3bW9kZSkgfHwKLQkgICAgKG5ld19jaF9vZmZzZXQhPSBwbWxtZWV4dC0+Y3VyX2NoX29mZnNldCkpIHsKKwlpZiAobmV3X2J3bW9kZSAhPSBwbWxtZWV4dC0+Y3VyX2J3bW9kZSB8fAorCSAgICBuZXdfY2hfb2Zmc2V0ICE9IHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0KSB7CiAJCXBtbG1laW5mby0+Yndtb2RlX3VwZGF0ZWQgPSB0cnVlOwogCiAJCXBtbG1lZXh0LT5jdXJfYndtb2RlID0gbmV3X2J3bW9kZTsKIAkJcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQgPSBuZXdfY2hfb2Zmc2V0OwogCiAJCS8qIHVwZGF0ZSBIVCBpbmZvIGFsc28gKi8KLQkJSFRfaW5mb19oYW5kbGVyMjNhKHBhZGFwdGVyLCBwSUUpOwotCX0gZWxzZSB7CisJCUhUX2luZm9faGFuZGxlcjIzYShwYWRhcHRlciwgcCk7CisJfSBlbHNlCiAJCXBtbG1laW5mby0+Yndtb2RlX3VwZGF0ZWQgPSBmYWxzZTsKLQl9CiAKIAlpZiAocG1sbWVpbmZvLT5id21vZGVfdXBkYXRlZCkgewogCQlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpjdXJfbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7CiAJCXN0cnVjdCBzdGFfcHJpdgkqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAKLQkJLyogc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7ICovCisJCS8qIHNldF9jaGFubmVsX2J3bW9kZTIzYShwYWRhcHRlciwgcG1sbWVleHQtPmN1cl9jaGFubmVsLAorCQkgICBwbWxtZWV4dC0+Y3VyX2NoX29mZnNldCwgcG1sbWVleHQtPmN1cl9id21vZGUpOyAqLwogCiAJCS8qIHVwZGF0ZSBhcCdzIHN0YWluZm8gKi8KIAkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgY3VyX25ldHdvcmstPk1hY0FkZHJlc3MpOwogCQlpZiAocHN0YSkgewotCQkJc3RydWN0IGh0X3ByaXYJKnBodHByaXZfc3RhID0gJnBzdGEtPmh0cHJpdjsKKwkJCXN0cnVjdCBodF9wcml2ICpwaHRwcml2X3N0YSA9ICZwc3RhLT5odHByaXY7CiAKIAkJCWlmIChwaHRwcml2X3N0YS0+aHRfb3B0aW9uKSB7CiAJCQkJLyogIGJ3bW9kZSAqLwogCQkJCXBodHByaXZfc3RhLT5id21vZGUgPSBwbWxtZWV4dC0+Y3VyX2J3bW9kZTsKLQkJCQlwaHRwcml2X3N0YS0+Y2hfb2Zmc2V0ID0gcG1sbWVleHQtPmN1cl9jaF9vZmZzZXQ7CisJCQkJcGh0cHJpdl9zdGEtPmNoX29mZnNldCA9CisJCQkJCXBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0OwogCQkJfSBlbHNlIHsKIAkJCQlwaHRwcml2X3N0YS0+Yndtb2RlID0gSFRfQ0hBTk5FTF9XSURUSF8yMDsKLQkJCQlwaHRwcml2X3N0YS0+Y2hfb2Zmc2V0ID0gSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKKwkJCQlwaHRwcml2X3N0YS0+Y2hfb2Zmc2V0ID0KKwkJCQkJSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKIAkJCX0KLQogCQl9CiAJfQogfQogCi12b2lkIEhUX2NhcHNfaGFuZGxlcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqIHBJRSkKK3ZvaWQgSFRfY2Fwc19oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwKQogewotCXVuc2lnbmVkIGludAlpOwotCXU4CXJmX3R5cGU7Ci0JdTgJbWF4X0FNUERVX2xlbiwgbWluX01QRFVfc3BhY2luZzsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXVuc2lnbmVkIGludCBpOworCXU4IHJmX3R5cGU7CisJdTggbWF4X0FNUERVX2xlbiwgbWluX01QRFVfc3BhY2luZzsKKwlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwotCXN0cnVjdCBtbG1lX3ByaXYJCSpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCBodF9wcml2CQkJKnBodHByaXYgPSAmcG1sbWVwcml2LT5odHByaXY7CisJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKKwlzdHJ1Y3QgaHRfcHJpdiAqcGh0cHJpdiA9ICZwbWxtZXByaXYtPmh0cHJpdjsKIAotCWlmIChwSUUgPT0gTlVMTCkgcmV0dXJuOworCWlmICghcCkKKwkJcmV0dXJuOwogCi0JaWYgKHBodHByaXYtPmh0X29wdGlvbiA9PSBmYWxzZSkJcmV0dXJuOworCWlmIChwaHRwcml2LT5odF9vcHRpb24gPT0gZmFsc2UpCisJCXJldHVybjsKIAogCXBtbG1laW5mby0+SFRfY2Fwc19lbmFibGUgPSAxOwogCi0JZm9yIChpID0gMDsgaSA8IChwSUUtPkxlbmd0aCk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwWzFdOyBpKyspIHsKIAkJaWYgKGkgIT0gMikgewogCQkJLyoJQ29tbWVudGVkIGJ5IEFsYmVydCAyMDEwLzA3LzEyICovCiAJCQkvKglHb3QgdGhlIGVuZGlhbiBpc3N1ZSBoZXJlLiAqLwotCQkJcG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwW2ldICY9IChwSUUtPmRhdGFbaV0pOworCQkJcG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwW2ldICY9IHBbaSArIDJdOwogCQl9IGVsc2UgewogCQkJLyogbW9kaWZ5IGZyb20gIGZ3IGJ5IFRob21hcyAyMDEwLzExLzE3ICovCi0JCQlpZiAoKHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkFNUERVX3BhcmEgJiAweDMpID4gKHBJRS0+ZGF0YVtpXSAmIDB4MykpCi0JCQkJbWF4X0FNUERVX2xlbiA9IChwSUUtPmRhdGFbaV0gJiAweDMpOworCQkJaWYgKChwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5BTVBEVV9wYXJhICYgMHgzKSA+IChwW2kgKyAyXSAmIDB4MykpCisJCQkJbWF4X0FNUERVX2xlbiA9IHBbaSArIDJdICYgMHgzOwogCQkJZWxzZQotCQkJCW1heF9BTVBEVV9sZW4gPSAocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuQU1QRFVfcGFyYSAmIDB4Myk7CisJCQkJbWF4X0FNUERVX2xlbiA9IHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkFNUERVX3BhcmEgJiAweDM7CiAKLQkJCWlmICgocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuQU1QRFVfcGFyYSAmIDB4MWMpID4gKHBJRS0+ZGF0YVtpXSAmIDB4MWMpKQotCQkJCW1pbl9NUERVX3NwYWNpbmcgPSAocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuQU1QRFVfcGFyYSAmIDB4MWMpOworCQkJaWYgKChwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5BTVBEVV9wYXJhICYgMHgxYykgPiAocFtpICsgMl0gJiAweDFjKSkKKwkJCQltaW5fTVBEVV9zcGFjaW5nID0gcG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuQU1QRFVfcGFyYSAmIDB4MWM7CiAJCQllbHNlCi0JCQkJbWluX01QRFVfc3BhY2luZyA9IChwSUUtPmRhdGFbaV0gJiAweDFjKTsKKwkJCQltaW5fTVBEVV9zcGFjaW5nID0gcFtpICsgMl0gJiAweDFjOwogCi0JCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5BTVBEVV9wYXJhID0gbWF4X0FNUERVX2xlbiB8IG1pbl9NUERVX3NwYWNpbmc7CisJCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5BTVBEVV9wYXJhID0KKwkJCQltYXhfQU1QRFVfbGVuIHwgbWluX01QRFVfc3BhY2luZzsKIAkJfQogCX0KIAogCS8qCUNvbW1lbnRlZCBieSBBbGJlcnQgMjAxMC8wNy8xMiAqLwogCS8qCUhhdmUgdG8gaGFuZGxlIHRoZSBlbmRpYW4gaXNzdWUgYWZ0ZXIgY29weWluZy4gKi8KIAkvKglIVF9leHRfY2FwcyBkaWRuJ3QgYmUgdXNlZCB5ZXQuICovCi0JcG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfY2Fwc19pbmZvID0gbGUxNl90b19jcHUocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfY2Fwc19pbmZvKTsKLQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9leHRfY2FwcyA9IGxlMTZfdG9fY3B1KHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkhUX2V4dF9jYXBzKTsKKwlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8gPQorCQlsZTE2X3RvX2NwdShwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5IVF9jYXBzX2luZm8pOworCXBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkhUX2V4dF9jYXBzID0KKwkJbGUxNl90b19jcHUocG1sbWVpbmZvLT5IVF9jYXBzLnUuSFRfY2FwX2VsZW1lbnQuSFRfZXh0X2NhcHMpOwogCi0JcnR3MjNhX2hhbF9nZXRfaHdyZWcocGFkYXB0ZXIsIEhXX1ZBUl9SRl9UWVBFLCAodTggKikoJnJmX3R5cGUpKTsKKwlyZl90eXBlID0gcnRsODcyM2FfZ2V0X3JmX3R5cGUocGFkYXB0ZXIpOwogCiAJLyogdXBkYXRlIHRoZSBNQ1MgcmF0ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpZiAoKHJmX3R5cGUgPT0gUkZfMVQxUikgfHwgKHJmX3R5cGUgPT0gUkZfMVQyUikpCi0JCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVtpXSAmPSBNQ1NfcmF0ZV8xUjIzQVtpXTsKKwkJaWYgKHJmX3R5cGUgPT0gUkZfMVQxUiB8fCByZl90eXBlID09IFJGXzFUMlIpCisJCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVtpXSAmPQorCQkJCU1DU19yYXRlXzFSMjNBW2ldOwogCQllbHNlCi0JCQlwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVtpXSAmPSBNQ1NfcmF0ZV8yUjIzQVtpXTsKKwkJCXBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50Lk1DU19yYXRlW2ldICY9CisJCQkJTUNTX3JhdGVfMlIyM0FbaV07CiAJfQogCXJldHVybjsKIH0KIAotdm9pZCBIVF9pbmZvX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKiBwSUUpCit2b2lkIEhUX2luZm9faGFuZGxlcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcCkKIHsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87Ci0Jc3RydWN0IG1sbWVfcHJpdgkJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IGh0X3ByaXYJCQkqcGh0cHJpdiA9ICZwbWxtZXByaXYtPmh0cHJpdjsKKwlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OworCXN0cnVjdCBodF9wcml2ICpwaHRwcml2ID0gJnBtbG1lcHJpdi0+aHRwcml2OwogCi0JaWYgKHBJRSA9PSBOVUxMKSByZXR1cm47CisJaWYgKCFwKQorCQlyZXR1cm47CiAKLQlpZiAocGh0cHJpdi0+aHRfb3B0aW9uID09IGZhbHNlKQlyZXR1cm47CisJaWYgKHBodHByaXYtPmh0X29wdGlvbiA9PSBmYWxzZSkKKwkJcmV0dXJuOwogCi0JaWYgKHBJRS0+TGVuZ3RoID4gc2l6ZW9mKHN0cnVjdCBIVF9pbmZvX2VsZW1lbnQpKQorCWlmIChwWzFdID4gc2l6ZW9mKHN0cnVjdCBIVF9pbmZvX2VsZW1lbnQpKQogCQlyZXR1cm47CiAKIAlwbWxtZWluZm8tPkhUX2luZm9fZW5hYmxlID0gMTsKLQltZW1jcHkoJnBtbG1laW5mby0+SFRfaW5mbywgcElFLT5kYXRhLCBwSUUtPkxlbmd0aCk7CisJbWVtY3B5KCZwbWxtZWluZm8tPkhUX2luZm8sIHAgKyAyLCBwWzFdKTsKIAlyZXR1cm47CiB9CiAKIHZvaWQgSFRPbkFzc29jUnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JdW5zaWduZWQgY2hhcgkJbWF4X0FNUERVX2xlbjsKLQl1bnNpZ25lZCBjaGFyCQltaW5fTVBEVV9zcGFjaW5nOworCXVuc2lnbmVkIGNoYXIgbWF4X0FNUERVX2xlbjsKKwl1bnNpZ25lZCBjaGFyIG1pbl9NUERVX3NwYWNpbmc7CiAJLyogc3RydWN0IHJlZ2lzdHJ5X3ByaXYJICpwcmVncHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OyAqLwotCXN0cnVjdCBtbG1lX2V4dF9wcml2CSpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CisJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAogCURCR184NzIzQSgiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICgocG1sbWVpbmZvLT5IVF9pbmZvX2VuYWJsZSkgJiYgKHBtbG1laW5mby0+SFRfY2Fwc19lbmFibGUpKSB7CisJaWYgKHBtbG1laW5mby0+SFRfaW5mb19lbmFibGUgJiYgcG1sbWVpbmZvLT5IVF9jYXBzX2VuYWJsZSkKIAkJcG1sbWVpbmZvLT5IVF9lbmFibGUgPSAxOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCXBtbG1laW5mby0+SFRfZW5hYmxlID0gMDsKLQkJLyogc2V0X2NoYW5uZWxfYndtb2RlMjNhKHBhZGFwdGVyLCBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwsIHBtbG1lZXh0LT5jdXJfY2hfb2Zmc2V0LCBwbWxtZWV4dC0+Y3VyX2J3bW9kZSk7ICovCisJCS8qIHNldF9jaGFubmVsX2J3bW9kZTIzYShwYWRhcHRlciwgcG1sbWVleHQtPmN1cl9jaGFubmVsLAorCQkgICBwbWxtZWV4dC0+Y3VyX2NoX29mZnNldCwgcG1sbWVleHQtPmN1cl9id21vZGUpOyAqLwogCQlyZXR1cm47CiAJfQogCkBAIC04OTQsMjkgKzgyMCwyOSBAQAogCSovCiAJbWF4X0FNUERVX2xlbiA9IHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkFNUERVX3BhcmEgJiAweDAzOwogCi0JbWluX01QRFVfc3BhY2luZyA9IChwbWxtZWluZm8tPkhUX2NhcHMudS5IVF9jYXBfZWxlbWVudC5BTVBEVV9wYXJhICYgMHgxYykgPj4gMjsKKwltaW5fTVBEVV9zcGFjaW5nID0KKwkJKHBtbG1laW5mby0+SFRfY2Fwcy51LkhUX2NhcF9lbGVtZW50LkFNUERVX3BhcmEgJiAweDFjKSA+PiAyOwogCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0UsICh1OCAqKSgmbWluX01QRFVfc3BhY2luZykpOwotCi0JcnR3X2hhbF9zZXRfaHdyZWcyM2EocGFkYXB0ZXIsIEhXX1ZBUl9BTVBEVV9GQUNUT1IsICh1OCAqKSgmbWF4X0FNUERVX2xlbikpOworCXJ0bDg3MjNhX3NldF9hbXBkdV9taW5fc3BhY2UocGFkYXB0ZXIsIG1pbl9NUERVX3NwYWNpbmcpOworCXJ0bDg3MjNhX3NldF9hbXBkdV9mYWN0b3IocGFkYXB0ZXIsIG1heF9BTVBEVV9sZW4pOwogfQogCi12b2lkIEVSUF9JRV9oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICogcElFKQordm9pZCBFUlBfSUVfaGFuZGxlcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcCkKIHsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKLQlpZiAocElFLT5MZW5ndGg+MSkKKwlpZiAocFsxXSA+IDEpCiAJCXJldHVybjsKIAogCXBtbG1laW5mby0+RVJQX2VuYWJsZSA9IDE7Ci0JbWVtY3B5KCZwbWxtZWluZm8tPkVSUF9JRSwgcElFLT5kYXRhLCBwSUUtPkxlbmd0aCk7CisJbWVtY3B5KCZwbWxtZWluZm8tPkVSUF9JRSwgcCArIDIsIHBbMV0pOwogfQogCiB2b2lkIFZDU191cGRhdGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhKQogewotCXN0cnVjdCByZWdpc3RyeV9wcml2CSAqcHJlZ3ByaXYgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCByZWdpc3RyeV9wcml2ICpwcmVncHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKIAlzd2l0Y2ggKHByZWdwcml2LT52cnRsX2NhcnJpZXJfc2Vuc2UpIHsgLyogMDpvZmYgMTpvbiAyOmF1dG8gKi8KQEAgLTkzNSw3ICs4NjEsNyBAQAogCQlicmVhazsKIAljYXNlIDI6IC8qIGF1dG8gKi8KIAlkZWZhdWx0OgotCQlpZiAoKHBtbG1laW5mby0+RVJQX2VuYWJsZSkgJiYgKHBtbG1laW5mby0+RVJQX0lFICYgQklUKDEpKSkgeworCQlpZiAocG1sbWVpbmZvLT5FUlBfZW5hYmxlICYmIHBtbG1laW5mby0+RVJQX0lFICYgQklUKDEpKSB7CiAJCQlpZiAocHJlZ3ByaXYtPnZjc190eXBlID09IDEpIHsKIAkJCQlwc3RhLT5ydHNlbiA9IDE7CiAJCQkJcHN0YS0+Y3RzMnNlbGYgPSAwOwpAQCAtOTUxLDExNiArODc3LDEzNCBAQAogCX0KIH0KIAotaW50IHJ0d19jaGVja19iY25faW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsIHU4ICpwZnJhbWUsIHUzMiBwYWNrZXRfbGVuKQoraW50IHJ0d19jaGVja19iY25faW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgdTMyIHBrdF9sZW4pCiB7Ci0JdW5zaWduZWQgaW50CQlsZW47Ci0JdW5zaWduZWQgY2hhcgkJKnA7Ci0JdW5zaWduZWQgc2hvcnQJdmFsMTY7CiAJc3RydWN0IHdsYW5fbmV0d29yayAqY3VyX25ldHdvcmsgPSAmQWRhcHRlci0+bWxtZXByaXYuY3VyX25ldHdvcms7Ci0JdTE2IHdwYV9sZW4gPSAwLCByc25fbGVuID0gMDsKLQl1OCBlbmNyeXBfcHJvdG9jb2wgPSAwOworCXN0cnVjdCBIVF9pbmZvX2VsZW1lbnQgKnBodF9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpwaHRfY2FwOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpic3NpZDsKLQlpbnQgZ3JvdXBfY2lwaGVyID0gMCwgcGFpcndpc2VfY2lwaGVyID0gMCwgaXNfODAyMXggPSAwOwotCXVuc2lnbmVkIGNoYXIgKnBidWY7Ci0JdTMyIHdwYV9pZWxlbiA9IDA7Ci0JdTMyIGhpZGRlbl9zc2lkID0gMDsKLQlzdHJ1Y3QgSFRfaW5mb19lbGVtZW50ICpwaHRfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKnBodF9jYXAgPSBOVUxMOworCXVuc2lnbmVkIHNob3J0IHZhbDE2OworCXUxNiB3cGFfbGVuID0gMCwgcnNuX2xlbiA9IDA7CisJdTggZW5jcnlwX3Byb3RvY29sOworCWludCBncm91cF9jaXBoZXIgPSAwLCBwYWlyd2lzZV9jaXBoZXIgPSAwLCBpc184MDIxeCA9IDAsIHI7CiAJdTMyIGJjbl9jaGFubmVsOwotCXVuc2lnbmVkIHNob3J0CWh0X2NhcF9pbmZvOwotCXVuc2lnbmVkIGNoYXIJaHRfaW5mb19pbmZvc18wOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcGZyYW1lOwotCXU4ICpwYnNzaWQgPSBoZHItPmFkZHIzOworCXVuc2lnbmVkIHNob3J0IGh0X2NhcF9pbmZvOworCXVuc2lnbmVkIGNoYXIgaHRfaW5mb19pbmZvc18wOworCWludCBsZW4sIHBpZV9sZW4sIGllX29mZnNldDsKKwljb25zdCB1OCAqcDsKKwl1OCAqcGllOwogCiAJaWYgKGlzX2NsaWVudF9hc3NvY2lhdGVkX3RvX2FwMjNhKEFkYXB0ZXIpID09IGZhbHNlKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWxlbiA9IHBhY2tldF9sZW4gLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOworCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2lzX2JlYWNvbihtZ210LT5mcmFtZV9jb250cm9sKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlY2VpdmVkIGEgbm9uIGJlYWNvbiBmcmFtZSFcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlsZW4gPSBwa3RfbGVuIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAogCWlmIChsZW4gPiBNQVhfSUVfU1opIHsKIAkJREJHXzg3MjNBKCIlcyBJRSB0b28gbG9uZyBmb3Igc3VydmV5IGV2ZW50XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBfRkFJTDsKIAl9CiAKLQlpZiAobWVtY21wKGN1cl9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MsIHBic3NpZCwgNikpIHsKLQkJREJHXzg3MjNBKCJPb3BzOiBydHdfY2hlY2tfbmV0d29ya19lbmNyeXB0IGxpbmtlZCBidXQgcmVjdiBvdGhlciBic3NpZCBiY25cbiIgTUFDX0ZNVCBNQUNfRk1ULAotCQkJCU1BQ19BUkcocGJzc2lkKSwgTUFDX0FSRyhjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKSk7CisJaWYgKG1lbWNtcChjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzLCBtZ210LT5ic3NpZCwgNikpIHsKKwkJREJHXzg3MjNBKCJPb3BzOiBydHdfY2hlY2tfbmV0d29ya19lbmNyeXB0IGxpbmtlZCBidXQgcmVjdiAiCisJCQkgICJvdGhlciBic3NpZCBiY25cbiIgTUFDX0ZNVCBNQUNfRk1ULAorCQkJICBNQUNfQVJHKG1nbXQtPmJzc2lkKSwKKwkJCSAgTUFDX0FSRyhjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKSk7CiAJCXJldHVybiB0cnVlOwogCX0KIAotCWJzc2lkID0gKHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICopa3phbGxvYyhzaXplb2Yoc3RydWN0IHdsYW5fYnNzaWRfZXgpLAotCQlHRlBfQVRPTUlDKTsKKwlic3NpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFic3NpZCkKKwkJcmV0dXJuIF9GQUlMOwogCi0JaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKLQkJYnNzaWQtPnJlc2VydmVkID0gMTsKKwlic3NpZC0+cmVzZXJ2ZWQgPSAxOwogCi0JYnNzaWQtPkxlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgd2xhbl9ic3NpZF9leCkgLSBNQVhfSUVfU1ogKyBsZW47CisJYnNzaWQtPkxlbmd0aCA9IG9mZnNldG9mKHN0cnVjdCB3bGFuX2Jzc2lkX2V4LCBJRXMpICsgbGVuOwogCiAJLyogYmVsb3cgaXMgdG8gY29weSB0aGUgaW5mb3JtYXRpb24gZWxlbWVudCAqLwogCWJzc2lkLT5JRUxlbmd0aCA9IGxlbjsKLQltZW1jcHkoYnNzaWQtPklFcywgKHBmcmFtZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpLCBic3NpZC0+SUVMZW5ndGgpOworCW1lbWNweShic3NpZC0+SUVzLCAmbWdtdC0+dSwgbGVuKTsKIAogCS8qIGNoZWNrIGJ3IGFuZCBjaGFubmVsIG9mZnNldCAqLwogCS8qIHBhcnNpbmcgSFRfQ0FQX0lFICovCi0JcCA9IHJ0d19nZXRfaWUyM2EoYnNzaWQtPklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLCBfSFRfQ0FQQUJJTElUWV9JRV8sICZsZW4sIGJzc2lkLT5JRUxlbmd0aCAtIF9GSVhFRF9JRV9MRU5HVEhfKTsKLQlpZiAocCAmJiBsZW4+MCkgewotCQkJcGh0X2NhcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKShwICsgMik7Ci0JCQlodF9jYXBfaW5mbyA9IHBodF9jYXAtPmNhcF9pbmZvOworCWllX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1KTsKKwlwaWUgPSBic3NpZC0+SUVzICsgaWVfb2Zmc2V0OworCXBpZV9sZW4gPSBwa3RfbGVuIC0gaWVfb2Zmc2V0OworCisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgcGllLCBwaWVfbGVuKTsKKwlpZiAocCAmJiBwWzFdID4gMCkgeworCQlwaHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopKHAgKyAyKTsKKwkJaHRfY2FwX2luZm8gPSBwaHRfY2FwLT5jYXBfaW5mbzsKIAl9IGVsc2UgewotCQkJaHRfY2FwX2luZm8gPSAwOworCQlwaHRfY2FwID0gTlVMTDsKKwkJaHRfY2FwX2luZm8gPSAwOwogCX0KKwogCS8qIHBhcnNpbmcgSFRfSU5GT19JRSAqLwotCXAgPSBydHdfZ2V0X2llMjNhKGJzc2lkLT5JRXMgKyBfRklYRURfSUVfTEVOR1RIXywgX0hUX0FERF9JTkZPX0lFXywgJmxlbiwgYnNzaWQtPklFTGVuZ3RoIC0gX0ZJWEVEX0lFX0xFTkdUSF8pOwotCWlmIChwICYmIGxlbj4wKSB7Ci0JCQlwaHRfaW5mbyA9IChzdHJ1Y3QgSFRfaW5mb19lbGVtZW50ICopKHAgKyAyKTsKLQkJCWh0X2luZm9faW5mb3NfMCA9IHBodF9pbmZvLT5pbmZvc1swXTsKKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9PUEVSQVRJT04sIHBpZSwgcGllX2xlbik7CisJaWYgKHAgJiYgcFsxXSA+IDApIHsKKwkJcGh0X2luZm8gPSAoc3RydWN0IEhUX2luZm9fZWxlbWVudCAqKShwICsgMik7CisJCWh0X2luZm9faW5mb3NfMCA9IHBodF9pbmZvLT5pbmZvc1swXTsKIAl9IGVsc2UgewotCQkJaHRfaW5mb19pbmZvc18wID0gMDsKKwkJcGh0X2luZm8gPSBOVUxMOworCQlodF9pbmZvX2luZm9zXzAgPSAwOwogCX0KKwogCWlmIChodF9jYXBfaW5mbyAhPSBjdXJfbmV0d29yay0+QmNuSW5mby5odF9jYXBfaW5mbyB8fAotCQkoKGh0X2luZm9faW5mb3NfMCYweDAzKSAhPSAoY3VyX25ldHdvcmstPkJjbkluZm8uaHRfaW5mb19pbmZvc18wJjB4MDMpKSkgewotCQkJREJHXzg3MjNBKCIlcyBiY24gbm93OiBodF9jYXBfaW5mbzoleCBodF9pbmZvX2luZm9zXzA6JXhcbiIsIF9fZnVuY19fLAotCQkJCQkJCWh0X2NhcF9pbmZvLCBodF9pbmZvX2luZm9zXzApOwotCQkJREJHXzg3MjNBKCIlcyBiY24gbGluazogaHRfY2FwX2luZm86JXggaHRfaW5mb19pbmZvc18wOiV4XG4iLCBfX2Z1bmNfXywKLQkJCQkJCQljdXJfbmV0d29yay0+QmNuSW5mby5odF9jYXBfaW5mbywgY3VyX25ldHdvcmstPkJjbkluZm8uaHRfaW5mb19pbmZvc18wKTsKLQkJCURCR184NzIzQSgiJXMgYncgbW9kZSBjaGFuZ2UsIGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKLQkJCS8qIGJjbl9pbmZvX3VwZGF0ZSAqLwotCQkJY3VyX25ldHdvcmstPkJjbkluZm8uaHRfY2FwX2luZm8gPSBodF9jYXBfaW5mbzsKLQkJCWN1cl9uZXR3b3JrLT5CY25JbmZvLmh0X2luZm9faW5mb3NfMCA9IGh0X2luZm9faW5mb3NfMDsKLQkJCS8qIHRvIGRvIDogbmVlZCB0byBjaGVjayB0aGF0IHdoZXRoZXIgbW9kaWZ5IHJlbGF0ZWQgcmVnaXN0ZXIgb2YgQkIgb3Igbm90ICovCisJICAgICgoaHRfaW5mb19pbmZvc18wICYgMHgwMykgIT0KKwkgICAgIChjdXJfbmV0d29yay0+QmNuSW5mby5odF9pbmZvX2luZm9zXzAgJiAweDAzKSkpIHsKKwkJREJHXzg3MjNBKCIlcyBiY24gbm93OiBodF9jYXBfaW5mbzoleCBodF9pbmZvX2luZm9zXzA6JXhcbiIsCisJCQkgIF9fZnVuY19fLCBodF9jYXBfaW5mbywgaHRfaW5mb19pbmZvc18wKTsKKwkJREJHXzg3MjNBKCIlcyBiY24gbGluazogaHRfY2FwX2luZm86JXggaHRfaW5mb19pbmZvc18wOiV4XG4iLAorCQkJICBfX2Z1bmNfXywgY3VyX25ldHdvcmstPkJjbkluZm8uaHRfY2FwX2luZm8sCisJCQkgIGN1cl9uZXR3b3JrLT5CY25JbmZvLmh0X2luZm9faW5mb3NfMCk7CisJCURCR184NzIzQSgiJXMgYncgbW9kZSBjaGFuZ2UsIGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKKwkJLyogYmNuX2luZm9fdXBkYXRlICovCisJCWN1cl9uZXR3b3JrLT5CY25JbmZvLmh0X2NhcF9pbmZvID0gaHRfY2FwX2luZm87CisJCWN1cl9uZXR3b3JrLT5CY25JbmZvLmh0X2luZm9faW5mb3NfMCA9IGh0X2luZm9faW5mb3NfMDsKKwkJLyogdG8gZG8gOiBuZWVkIHRvIGNoZWNrIHRoYXQgd2hldGhlciBtb2RpZnkgcmVsYXRlZAorCQkgICByZWdpc3RlciBvZiBCQiBvciBub3QgKi8KIAl9CiAKIAkvKiBDaGVja2luZyBmb3IgY2hhbm5lbCAqLwotCXAgPSBydHdfZ2V0X2llMjNhKGJzc2lkLT5JRXMgKyBfRklYRURfSUVfTEVOR1RIXywgX0RTU0VUX0lFXywgJmxlbiwgYnNzaWQtPklFTGVuZ3RoIC0gX0ZJWEVEX0lFX0xFTkdUSF8pOwotCWlmIChwKSB7Ci0JCQliY25fY2hhbm5lbCA9ICoocCArIDIpOwotCX0gZWxzZSB7LyogSW4gNUcsIHNvbWUgYXAgZG8gbm90IGhhdmUgRFNTRVQgSUUgY2hlY2tpbmcgSFQgaW5mbyBmb3IgY2hhbm5lbCAqLwotCQkJcCA9IHJ0d19nZXRfaWUyM2EoYnNzaWQtPklFcyArIF9GSVhFRF9JRV9MRU5HVEhfLCBfSFRfQUREX0lORk9fSUVfLCAmbGVuLCBic3NpZC0+SUVMZW5ndGggLSBfRklYRURfSUVfTEVOR1RIXyk7Ci0JCQlpZiAocGh0X2luZm8pIHsKLQkJCQkJYmNuX2NoYW5uZWwgPSBwaHRfaW5mby0+cHJpbWFyeV9jaGFubmVsOwotCQkJfSBlbHNlIHsgLyogd2UgZG9uJ3QgZmluZCBjaGFubmVsIElFLCBzbyBkb24ndCBjaGVjayBpdCAqLwotCQkJCQlEQkdfODcyM0EoIk9vcHM6ICVzIHdlIGRvbid0IGZpbmQgY2hhbm5lbCBJRSwgc28gZG9uJ3QgY2hlY2sgaXRcbiIsIF9fZnVuY19fKTsKLQkJCQkJYmNuX2NoYW5uZWwgPSBBZGFwdGVyLT5tbG1lZXh0cHJpdi5jdXJfY2hhbm5lbDsKLQkJCX0KKwlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9EU19QQVJBTVMsIHBpZSwgcGllX2xlbik7CisJaWYgKHApCisJCWJjbl9jaGFubmVsID0gcFsyXTsKKwllbHNlIHsKKwkJLyogSW4gNUcsIHNvbWUgYXAgZG8gbm90IGhhdmUgRFNTRVQgSUUgY2hlY2tpbmcgSFQKKwkJICAgaW5mbyBmb3IgY2hhbm5lbCAqLworCQlwID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9PUEVSQVRJT04sIHBpZSwgcGllX2xlbik7CisKKwkJaWYgKHBodF9pbmZvKQorCQkJYmNuX2NoYW5uZWwgPSBwaHRfaW5mby0+cHJpbWFyeV9jaGFubmVsOworCQllbHNlIHsgLyogd2UgZG9uJ3QgZmluZCBjaGFubmVsIElFLCBzbyBkb24ndCBjaGVjayBpdCAqLworCQkJREJHXzg3MjNBKCJPb3BzOiAlcyB3ZSBkb24ndCBmaW5kIGNoYW5uZWwgSUUsIHNvIGRvbid0ICIKKwkJCQkgICJjaGVjayBpdFxuIiwgX19mdW5jX18pOworCQkJYmNuX2NoYW5uZWwgPSBBZGFwdGVyLT5tbG1lZXh0cHJpdi5jdXJfY2hhbm5lbDsKKwkJfQogCX0KIAlpZiAoYmNuX2NoYW5uZWwgIT0gQWRhcHRlci0+bWxtZWV4dHByaXYuY3VyX2NoYW5uZWwpIHsKLQkJCURCR184NzIzQSgiJXMgYmVhY29uIGNoYW5uZWw6JWQgY3VyIGNoYW5uZWw6JWQgZGlzY29ubmVjdFxuIiwgX19mdW5jX18sCi0JCQkJCQkgICBiY25fY2hhbm5lbCwgQWRhcHRlci0+bWxtZWV4dHByaXYuY3VyX2NoYW5uZWwpOwotCQkJZ290byBfbWlzbWF0Y2g7CisJCURCR184NzIzQSgiJXMgYmVhY29uIGNoYW5uZWw6JWQgY3VyIGNoYW5uZWw6JWQgZGlzY29ubmVjdFxuIiwKKwkJCSAgX19mdW5jX18sIGJjbl9jaGFubmVsLAorCQkJICBBZGFwdGVyLT5tbG1lZXh0cHJpdi5jdXJfY2hhbm5lbCk7CisJCWdvdG8gX21pc21hdGNoOwogCX0KIAogCS8qIGNoZWNraW5nIFNTSUQgKi8KLQlpZiAoKHAgPSBydHdfZ2V0X2llMjNhKGJzc2lkLT5JRXMgKyBfRklYRURfSUVfTEVOR1RIXywgX1NTSURfSUVfLCAmbGVuLCBic3NpZC0+SUVMZW5ndGggLSBfRklYRURfSUVfTEVOR1RIXykpID09IE5VTEwpIHsKLQkJREJHXzg3MjNBKCIlcyBtYXJjOiBjYW5ub3QgZmluZCBTU0lEIGZvciBzdXJ2ZXkgZXZlbnRcbiIsIF9fZnVuY19fKTsKLQkJaGlkZGVuX3NzaWQgPSB0cnVlOworCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1NTSUQsIHBpZSwgcGllX2xlbik7CisJaWYgKHAgJiYgcFsxXSkgeworCQltZW1jcHkoYnNzaWQtPlNzaWQuc3NpZCwgcCArIDIsIHBbMV0pOworCQlic3NpZC0+U3NpZC5zc2lkX2xlbiA9IHBbMV07CiAJfSBlbHNlIHsKLQkJaGlkZGVuX3NzaWQgPSBmYWxzZTsKLQl9Ci0KLQlpZiAoKE5VTEwgIT0gcCkgJiYgKGZhbHNlID09IGhpZGRlbl9zc2lkICYmICgqKHAgKyAxKSkpKSB7Ci0JCW1lbWNweShic3NpZC0+U3NpZC5zc2lkLCAocCArIDIpLCAqKHAgKyAxKSk7Ci0JCWJzc2lkLT5Tc2lkLnNzaWRfbGVuID0gKihwICsgMSk7Ci0JfSBlbHNlIHsKKwkJREJHXzg3MjNBKCIlcyBtYXJjOiBjYW5ub3QgZmluZCBTU0lEIGZvciBzdXJ2ZXkgZXZlbnRcbiIsCisJCQkgIF9fZnVuY19fKTsKIAkJYnNzaWQtPlNzaWQuc3NpZF9sZW4gPSAwOwogCQlic3NpZC0+U3NpZC5zc2lkWzBdID0gJ1wwJzsKIAl9CkBAIC0xMDgzLDcgKzEwMjcsNyBAQAogCX0KIAogCS8qIGNoZWNrIGVuY3J5cHRpb24gaW5mbyAqLwotCXZhbDE2ID0gcnR3X2dldF9jYXBhYmlsaXR5MjNhKChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKWJzc2lkKTsKKwl2YWwxNiA9IHJ0d19nZXRfY2FwYWJpbGl0eTIzYShic3NpZCk7CiAKIAlpZiAodmFsMTYgJiBCSVQoNCkpCiAJCWJzc2lkLT5Qcml2YWN5ID0gMTsKQEAgLTEwOTEsNjAgKzEwMzUsODMgQEAKIAkJYnNzaWQtPlByaXZhY3kgPSAwOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfaW5mb18sCi0JCQkoIiVzKCk6IGN1cl9uZXR3b3JrLT5uZXR3b3JrLlByaXZhY3kgaXMgJWQsIGJzc2lkLlByaXZhY3kgaXMgJWRcbiIsCi0JCQkgX19mdW5jX18sIGN1cl9uZXR3b3JrLT5uZXR3b3JrLlByaXZhY3ksIGJzc2lkLT5Qcml2YWN5KSk7CisJCSAoIiVzKCk6IGN1cl9uZXR3b3JrLT5uZXR3b3JrLlByaXZhY3kgaXMgJWQsIGJzc2lkLlByaXZhY3kgIgorCQkgICJpcyAlZFxuIiwgX19mdW5jX18sIGN1cl9uZXR3b3JrLT5uZXR3b3JrLlByaXZhY3ksCisJCSAgYnNzaWQtPlByaXZhY3kpKTsKIAlpZiAoY3VyX25ldHdvcmstPm5ldHdvcmsuUHJpdmFjeSAhPSBic3NpZC0+UHJpdmFjeSkgewogCQlEQkdfODcyM0EoIiVzKCksIHByaXZhY3kgaXMgbm90IG1hdGNoIHJldHVybiBGQUlMXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gX21pc21hdGNoOwogCX0KIAotCXJ0d19nZXRfc2VjX2llMjNhKGJzc2lkLT5JRXMsIGJzc2lkLT5JRUxlbmd0aCwgTlVMTCwmcnNuX2xlbiwgTlVMTCwmd3BhX2xlbik7CisJcnR3X2dldF9zZWNfaWUyM2EoYnNzaWQtPklFcywgYnNzaWQtPklFTGVuZ3RoLCBOVUxMLCAmcnNuX2xlbiwgTlVMTCwKKwkJCSAgJndwYV9sZW4pOwogCi0JaWYgKHJzbl9sZW4gPiAwKSB7CisJaWYgKHJzbl9sZW4gPiAwKQogCQllbmNyeXBfcHJvdG9jb2wgPSBFTkNSWVBfUFJPVE9DT0xfV1BBMjsKLQl9IGVsc2UgaWYgKHdwYV9sZW4gPiAwKSB7CisJZWxzZSBpZiAod3BhX2xlbiA+IDApCiAJCWVuY3J5cF9wcm90b2NvbCA9IEVOQ1JZUF9QUk9UT0NPTF9XUEE7Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJaWYgKGJzc2lkLT5Qcml2YWN5KQogCQkJZW5jcnlwX3Byb3RvY29sID0gRU5DUllQX1BST1RPQ09MX1dFUDsKKwkJZWxzZQorCQkJZW5jcnlwX3Byb3RvY29sID0gRU5DUllQX1BST1RPQ09MX09QRU5TWVM7CiAJfQogCiAJaWYgKGN1cl9uZXR3b3JrLT5CY25JbmZvLmVuY3J5cF9wcm90b2NvbCAhPSBlbmNyeXBfcHJvdG9jb2wpIHsKLQkJREJHXzg3MjNBKCIlcygpOiBlbmN0eXAgaXMgbm90IG1hdGNoICwgcmV0dXJuIEZBSUxcbiIsIF9fZnVuY19fKTsKKwkJREJHXzg3MjNBKCIlcygpOiBlbmN0eXAgaXMgbm90IG1hdGNoLCByZXR1cm4gRkFJTFxuIiwgX19mdW5jX18pOwogCQlnb3RvIF9taXNtYXRjaDsKIAl9CiAKLQlpZiAoZW5jcnlwX3Byb3RvY29sID09IEVOQ1JZUF9QUk9UT0NPTF9XUEEgfHwgZW5jcnlwX3Byb3RvY29sID09IEVOQ1JZUF9QUk9UT0NPTF9XUEEyKSB7Ci0JCXBidWYgPSBydHdfZ2V0X3dwYV9pZTIzYSgmYnNzaWQtPklFc1sxMl0sICZ3cGFfaWVsZW4sIGJzc2lkLT5JRUxlbmd0aC0xMik7Ci0JCWlmIChwYnVmICYmICh3cGFfaWVsZW4+MCkpIHsKLQkJCWlmIChfU1VDQ0VTUyA9PSBydHdfcGFyc2Vfd3BhX2llMjNhKHBidWYsIHdwYV9pZWxlbisyLCAmZ3JvdXBfY2lwaGVyLCAmcGFpcndpc2VfY2lwaGVyLCAmaXNfODAyMXgpKSB7CisJaWYgKGVuY3J5cF9wcm90b2NvbCA9PSBFTkNSWVBfUFJPVE9DT0xfV1BBIHx8CisJICAgIGVuY3J5cF9wcm90b2NvbCA9PSBFTkNSWVBfUFJPVE9DT0xfV1BBMikgeworCQlwID0gY2ZnODAyMTFfZmluZF92ZW5kb3JfaWUoV0xBTl9PVUlfTUlDUk9TT0ZULAorCQkJCQkgICAgV0xBTl9PVUlfVFlQRV9NSUNST1NPRlRfV1BBLAorCQkJCQkgICAgcGllLCBwaWVfbGVuKTsKKwkJaWYgKHAgJiYgcFsxXSA+IDApIHsKKwkJCXIgPSBydHdfcGFyc2Vfd3BhX2llMjNhKHAsIHBbMV0gKyAyLCAmZ3JvdXBfY2lwaGVyLAorCQkJCQkJJnBhaXJ3aXNlX2NpcGhlciwgJmlzXzgwMjF4KTsKKwkJCWlmIChyID09IF9TVUNDRVNTKQogCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLCBfZHJ2X2luZm9fLAotCQkJCQkJKCIlcyBwbmV0d29yay0+cGFpcndpc2VfY2lwaGVyOiAlZCwgZ3JvdXBfY2lwaGVyIGlzICVkLCBpc184MDIxeCBpcyAlZFxuIiwgX19mdW5jX18sCi0JCQkJCQkgcGFpcndpc2VfY2lwaGVyLCBncm91cF9jaXBoZXIsIGlzXzgwMjF4KSk7Ci0JCQl9CisJCQkJCSAoIiVzIHBuZXR3b3JrLT5wYWlyd2lzZV9jaXBoZXI6ICVkLCAiCisJCQkJCSAgImdyb3VwX2NpcGhlciBpcyAlZCwgaXNfODAyMXggaXMgIgorCQkJCQkgICIlZFxuIiwgX19mdW5jX18sIHBhaXJ3aXNlX2NpcGhlciwKKwkJCQkJICBncm91cF9jaXBoZXIsIGlzXzgwMjF4KSk7CiAJCX0gZWxzZSB7Ci0JCQlwYnVmID0gcnR3X2dldF93cGEyX2llMjNhKCZic3NpZC0+SUVzWzEyXSwgJndwYV9pZWxlbiwgYnNzaWQtPklFTGVuZ3RoLTEyKTsKKwkJCXAgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1JTTiwgcGllLCBwaWVfbGVuKTsKIAotCQkJaWYgKHBidWYgJiYgKHdwYV9pZWxlbj4wKSkgewotCQkJCWlmIChfU1VDQ0VTUyA9PSBydHdfcGFyc2Vfd3BhMl9pZTIzYShwYnVmLCB3cGFfaWVsZW4rMiwgJmdyb3VwX2NpcGhlciwgJnBhaXJ3aXNlX2NpcGhlciwgJmlzXzgwMjF4KSkgewotCQkJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbWxtZV9jXywgX2Rydl9pbmZvXywKLQkJCQkJCQkoIiVzIHBuZXR3b3JrLT5wYWlyd2lzZV9jaXBoZXI6ICVkLCBwbmV0d29yay0+Z3JvdXBfY2lwaGVyIGlzICVkLCBpc184MDJ4IGlzICVkXG4iLAotCQkJCQkJCSBfX2Z1bmNfXywgcGFpcndpc2VfY2lwaGVyLCBncm91cF9jaXBoZXIsIGlzXzgwMjF4KSk7Ci0JCQkJfQorCQkJaWYgKHAgJiYgcFsxXSA+IDApIHsKKwkJCQlyID0gcnR3X3BhcnNlX3dwYTJfaWUyM2EocCwgcFsxXSArIDIsCisJCQkJCQkJICZncm91cF9jaXBoZXIsCisJCQkJCQkJICZwYWlyd2lzZV9jaXBoZXIsCisJCQkJCQkJICZpc184MDIxeCk7CisJCQkJaWYgKHIgPT0gX1NVQ0NFU1MpCisJCQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9tbG1lX2NfLAorCQkJCQkJIF9kcnZfaW5mb18sCisJCQkJCQkgKCIlcyBwbmV0d29yay0+cGFpcndpc2VfY2lwaGVyIgorCQkJCQkJICAiOiAlZCwgcG5ldHdvcmstPmdyb3VwX2NpcGhlciIKKwkJCQkJCSAgIiBpcyAlZCwgaXNfODAyeCBpcyAlZFxuIiwKKwkJCQkJCSAgX19mdW5jX18sIHBhaXJ3aXNlX2NpcGhlciwKKwkJCQkJCSAgZ3JvdXBfY2lwaGVyLCBpc184MDIxeCkpOwogCQkJfQogCQl9CiAKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21sbWVfY18sIF9kcnZfZXJyXywKLQkJCQkoIiVzIGN1cl9uZXR3b3JrLT5ncm91cF9jaXBoZXIgaXMgJWQ6ICVkXG4iLCBfX2Z1bmNfXywgY3VyX25ldHdvcmstPkJjbkluZm8uZ3JvdXBfY2lwaGVyLCBncm91cF9jaXBoZXIpKTsKLQkJaWYgKHBhaXJ3aXNlX2NpcGhlciAhPSBjdXJfbmV0d29yay0+QmNuSW5mby5wYWlyd2lzZV9jaXBoZXIgfHwgZ3JvdXBfY2lwaGVyICE9IGN1cl9uZXR3b3JrLT5CY25JbmZvLmdyb3VwX2NpcGhlcikgewotCQkJREJHXzg3MjNBKCIlcyBwYWlyd2lzZV9jaXBoZXIoJXg6JXgpIG9yIGdyb3VwX2NpcGhlcigleDoleCkgaXMgbm90IG1hdGNoICwgcmV0dXJuIEZBSUxcbiIsIF9fZnVuY19fLAotCQkJCQlwYWlyd2lzZV9jaXBoZXIsIGN1cl9uZXR3b3JrLT5CY25JbmZvLnBhaXJ3aXNlX2NpcGhlciwKLQkJCQkJZ3JvdXBfY2lwaGVyLCBjdXJfbmV0d29yay0+QmNuSW5mby5ncm91cF9jaXBoZXIpOworCQkJICgiJXMgY3VyX25ldHdvcmstPmdyb3VwX2NpcGhlciBpcyAlZDogJWRcbiIsIF9fZnVuY19fLAorCQkJICBjdXJfbmV0d29yay0+QmNuSW5mby5ncm91cF9jaXBoZXIsIGdyb3VwX2NpcGhlcikpOworCQlpZiAocGFpcndpc2VfY2lwaGVyICE9IGN1cl9uZXR3b3JrLT5CY25JbmZvLnBhaXJ3aXNlX2NpcGhlciB8fAorCQkgICAgZ3JvdXBfY2lwaGVyICE9IGN1cl9uZXR3b3JrLT5CY25JbmZvLmdyb3VwX2NpcGhlcikgeworCQkJREJHXzg3MjNBKCIlcyBwYWlyd2lzZV9jaXBoZXIoJXg6JXgpIG9yIGdyb3VwX2NpcGhlciAiCisJCQkJICAiKCV4OiV4KSBpcyBub3QgbWF0Y2gsIHJldHVybiBGQUlMXG4iLAorCQkJCSAgX19mdW5jX18sIHBhaXJ3aXNlX2NpcGhlciwKKwkJCQkgIGN1cl9uZXR3b3JrLT5CY25JbmZvLnBhaXJ3aXNlX2NpcGhlciwKKwkJCQkgIGdyb3VwX2NpcGhlciwKKwkJCQkgIGN1cl9uZXR3b3JrLT5CY25JbmZvLmdyb3VwX2NpcGhlcik7CiAJCQlnb3RvIF9taXNtYXRjaDsKIAkJfQogCiAJCWlmIChpc184MDIxeCAhPSBjdXJfbmV0d29yay0+QmNuSW5mby5pc184MDIxeCkgewotCQkJREJHXzg3MjNBKCIlcyBhdXRoZW50aWNhdGlvbiBpcyBub3QgbWF0Y2ggLCByZXR1cm4gRkFJTFxuIiwgX19mdW5jX18pOworCQkJREJHXzg3MjNBKCIlcyBhdXRoZW50aWNhdGlvbiBpcyBub3QgbWF0Y2gsIHJldHVybiAiCisJCQkJICAiRkFJTFxuIiwgX19mdW5jX18pOwogCQkJZ290byBfbWlzbWF0Y2g7CiAJCX0KIAl9CkBAIC0xMTU4LDkzICsxMTI1LDEwNiBAQAogCXJldHVybiBfRkFJTDsKIH0KIAotdm9pZCB1cGRhdGVfYmVhY29uMjNhX2luZm8oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBmcmFtZSwgdWludCBwa3RfbGVuLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpCit2b2lkIHVwZGF0ZV9iZWFjb24yM2FfaW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGZyYW1lLAorCQkJICAgdWludCBwa3RfbGVuLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGxlbjsKLQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqCXBJRTsKKwl1OCAqcDsKIAogCWxlbiA9IHBrdF9sZW4gLQogCQkoX0JFQUNPTl9JRV9PRkZTRVRfICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOykgewotCQlwSUUgPSAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKikocGZyYW1lICsgKF9CRUFDT05fSUVfT0ZGU0VUXyArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpICsgaSk7CisJCXAgPSAodTggKikocGZyYW1lICsgKF9CRUFDT05fSUVfT0ZGU0VUXyArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpICsgaSk7CiAKLQkJc3dpdGNoIChwSUUtPkVsZW1lbnRJRCkgewotCQljYXNlIF9IVF9FWFRSQV9JTkZPX0lFXzoJLyogSFQgaW5mbyAqLworCQlzd2l0Y2ggKHBbMF0pIHsKKwkJY2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046CS8qIEhUIGluZm8gKi8KIAkJCS8qIEhUX2luZm9faGFuZGxlcjIzYShwYWRhcHRlciwgcElFKTsgKi8KLQkJCWJ3bW9kZV91cGRhdGVfY2hlY2socGFkYXB0ZXIsIHBJRSk7CisJCQlid21vZGVfdXBkYXRlX2NoZWNrKHBhZGFwdGVyLCBwKTsKIAkJCWJyZWFrOwotCQljYXNlIF9FUlBJTkZPX0lFXzoKLQkJCUVSUF9JRV9oYW5kbGVyMjNhKHBhZGFwdGVyLCBwSUUpOworCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgorCQkJRVJQX0lFX2hhbmRsZXIyM2EocGFkYXB0ZXIsIHApOwogCQkJVkNTX3VwZGF0ZTIzYShwYWRhcHRlciwgcHN0YSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWkgKz0gKHBJRS0+TGVuZ3RoICsgMik7CisJCWkgKz0gKHBbMV0gKyAyKTsKIAl9CiB9CiAKLXVuc2lnbmVkIGludCBpc19hcF9pbl90a2lwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitib29sIGlzX2FwX2luX3RraXAyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAl1MzIgaTsKLQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqCXBJRTsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpjdXJfbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7CisJY29uc3QgdTggKnA7CisJaW50IGJjbl9maXhlZF9zaXplOwogCi0JaWYgKHJ0d19nZXRfY2FwYWJpbGl0eTIzYSgoc3RydWN0IHdsYW5fYnNzaWRfZXggKiljdXJfbmV0d29yaykgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgewotCQlmb3IgKGkgPSBzaXplb2Yoc3RydWN0IG5kaXNfODAyXzExX2ZpeGVkX2llcyk7IGkgPCBwbWxtZWluZm8tPm5ldHdvcmsuSUVMZW5ndGg7KSB7Ci0JCQlwSUUgPSAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKikocG1sbWVpbmZvLT5uZXR3b3JrLklFcyArIGkpOworCWJjbl9maXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKIAotCQkJc3dpdGNoIChwSUUtPkVsZW1lbnRJRCkgewotCQkJY2FzZSBfVkVORE9SX1NQRUNJRklDX0lFXzoKLQkJCQlpZiAoKCFtZW1jbXAocElFLT5kYXRhLCBSVFdfV1BBX09VSTIzQSwgNCkpICYmICghbWVtY21wKChwSUUtPmRhdGEgKyAxMiksIFdQQV9US0lQX0NJUEhFUjIzQSwgNCkpKQorCWlmIChydHdfZ2V0X2NhcGFiaWxpdHkyM2EoY3VyX25ldHdvcmspICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIHsKKwkJZm9yIChpID0gYmNuX2ZpeGVkX3NpemU7IGkgPCBwbWxtZWluZm8tPm5ldHdvcmsuSUVMZW5ndGg7KSB7CisJCQlwID0gcG1sbWVpbmZvLT5uZXR3b3JrLklFcyArIGk7CisKKwkJCXN3aXRjaCAocFswXSkgeworCQkJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6CisJCQkJaWYgKCFtZW1jbXAocCArIDIsIFJUV19XUEFfT1VJMjNBX1RZUEUsIDQpICYmCisJCQkJICAgICFtZW1jbXAocCArIDIgKyAxMiwgV1BBX1RLSVBfQ0lQSEVSLCA0KSkKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIF9SU05fSUVfMl86Ci0JCQkJaWYgKCFtZW1jbXAoKHBJRS0+ZGF0YSArIDgpLCBSU05fVEtJUF9DSVBIRVIyM0EsIDQpKQorCQkJY2FzZSBXTEFOX0VJRF9SU046CisJCQkJaWYgKCFtZW1jbXAocCArIDIgKyA4LCBSU05fVEtJUF9DSVBIRVIsIDQpKQogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpICs9IChwSUUtPkxlbmd0aCArIDIpOworCQkJaSArPSAocFsxXSArIDIpOwogCQl9CiAJCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gZmFsc2U7Ci0JfQogfQogCi11bnNpZ25lZCBpbnQgc2hvdWxkX2ZvcmJpZF9uX3JhdGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpCitib29sIHNob3VsZF9mb3JiaWRfbl9yYXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKQogewogCXUzMiBpOwotCXN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICoJcElFOwotCXN0cnVjdCBtbG1lX3ByaXYJKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CisJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAgKmN1cl9uZXR3b3JrID0gJnBtbG1lcHJpdi0+Y3VyX25ldHdvcmsubmV0d29yazsKKwljb25zdCB1OCAqcDsKKwlpbnQgYmNuX2ZpeGVkX3NpemU7CiAKLQlpZiAocnR3X2dldF9jYXBhYmlsaXR5MjNhKChzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqKWN1cl9uZXR3b3JrKSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSB7Ci0JCWZvciAoaSA9IHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKTsgaSA8IGN1cl9uZXR3b3JrLT5JRUxlbmd0aDspIHsKLQkJCXBJRSA9IChzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqKShjdXJfbmV0d29yay0+SUVzICsgaSk7CisJYmNuX2ZpeGVkX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKSAtCisJCW9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24pOwogCi0JCQlzd2l0Y2ggKHBJRS0+RWxlbWVudElEKSB7Ci0JCQljYXNlIF9WRU5ET1JfU1BFQ0lGSUNfSUVfOgotCQkJCWlmICghbWVtY21wKHBJRS0+ZGF0YSwgUlRXX1dQQV9PVUkyM0EsIDQpICYmCi0JCQkJCSgoIW1lbWNtcCgocElFLT5kYXRhICsgMTIpLCBXUEFfQ0lQSEVSX1NVSVRFX0NDTVAyM0EsIDQpKSB8fAotCQkJCQkgICghbWVtY21wKChwSUUtPmRhdGEgKyAxNiksIFdQQV9DSVBIRVJfU1VJVEVfQ0NNUDIzQSwgNCkpKSkKKwlpZiAocnR3X2dldF9jYXBhYmlsaXR5MjNhKGN1cl9uZXR3b3JrKSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSB7CisJCWZvciAoaSA9IGJjbl9maXhlZF9zaXplOyBpIDwgY3VyX25ldHdvcmstPklFTGVuZ3RoOykgeworCQkJcCA9IGN1cl9uZXR3b3JrLT5JRXMgKyBpOworCisJCQlzd2l0Y2ggKHBbMF0pIHsKKwkJCWNhc2UgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOgorCQkJCWlmICghbWVtY21wKHAgKyAyLCBSVFdfV1BBX09VSTIzQV9UWVBFLCA0KSAmJgorCQkJCSAgICAoIW1lbWNtcChwICsgMiArIDEyLAorCQkJCQkgICAgIFdQQV9DSVBIRVJfU1VJVEVfQ0NNUDIzQSwgNCkgfHwKKwkJCQkgICAgICFtZW1jbXAocCArIDIgKyAxNiwKKwkJCQkJICAgICBXUEFfQ0lQSEVSX1NVSVRFX0NDTVAyM0EsIDQpKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfUlNOX0lFXzJfOgotCQkJCWlmICAoKCFtZW1jbXAoKHBJRS0+ZGF0YSArIDgpLCBSU05fQ0lQSEVSX1NVSVRFX0NDTVAyM0EsIDQpKSAgfHwKLQkJCQkgICAgICAgKCFtZW1jbXAoKHBJRS0+ZGF0YSArIDEyKSwgUlNOX0NJUEhFUl9TVUlURV9DQ01QMjNBLCA0KSkpCisJCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJCQlpZiAoIW1lbWNtcChwICsgMiArIDgsCisJCQkJCSAgICBSU05fQ0lQSEVSX1NVSVRFX0NDTVAyM0EsIDQpIHx8CisJCQkJICAgICFtZW1jbXAocCArIDIgKyAxMiwKKwkJCQkJICAgIFJTTl9DSVBIRVJfU1VJVEVfQ0NNUDIzQSwgNCkpCiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaSArPSAocElFLT5MZW5ndGggKyAyKTsKKwkJCWkgKz0gKHBbMV0gKyAyKTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKIAl9IGVsc2UgewpAQCAtMTI1Miw0MiArMTIzMiw0NSBAQAogCX0KIH0KIAotdW5zaWduZWQgaW50IGlzX2FwX2luX3dlcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQorYm9vbCBpc19hcF9pbl93ZXAyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAl1MzIgaTsKLQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqCXBJRTsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpjdXJfbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7CisJY29uc3QgdTggKnA7CisJaW50IGJjbl9maXhlZF9zaXplOwogCi0JaWYgKHJ0d19nZXRfY2FwYWJpbGl0eTIzYSgoc3RydWN0IHdsYW5fYnNzaWRfZXggKiljdXJfbmV0d29yaykgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgewotCQlmb3IgKGkgPSBzaXplb2Yoc3RydWN0IG5kaXNfODAyXzExX2ZpeGVkX2llcyk7IGkgPCBwbWxtZWluZm8tPm5ldHdvcmsuSUVMZW5ndGg7KSB7Ci0JCQlwSUUgPSAoc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgKikocG1sbWVpbmZvLT5uZXR3b3JrLklFcyArIGkpOworCWJjbl9maXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKIAotCQkJc3dpdGNoIChwSUUtPkVsZW1lbnRJRCkgewotCQkJY2FzZSBfVkVORE9SX1NQRUNJRklDX0lFXzoKLQkJCQlpZiAoIW1lbWNtcChwSUUtPmRhdGEsIFJUV19XUEFfT1VJMjNBLCA0KSkKKwlpZiAocnR3X2dldF9jYXBhYmlsaXR5MjNhKGN1cl9uZXR3b3JrKSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSB7CisJCWZvciAoaSA9IGJjbl9maXhlZF9zaXplOyBpIDwgcG1sbWVpbmZvLT5uZXR3b3JrLklFTGVuZ3RoOykgeworCQkJcCA9IHBtbG1laW5mby0+bmV0d29yay5JRXMgKyBpOworCisJCQlzd2l0Y2ggKHBbMF0pIHsKKwkJCWNhc2UgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOgorCQkJCWlmICghbWVtY21wKHAgKyAyLCBSVFdfV1BBX09VSTIzQV9UWVBFLCA0KSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfUlNOX0lFXzJfOgorCQkJY2FzZSBXTEFOX0VJRF9SU046CiAJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpICs9IChwSUUtPkxlbmd0aCArIDIpOworCQkJaSArPSAocFsxXSArIDIpOwogCQl9CiAKIAkJcmV0dXJuIHRydWU7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJcmV0dXJuIGZhbHNlOwotCX0KIH0KIAotaW50IHdpZmlyYXRlMl9yYXRldGJsX2lueDIzYSh1bnNpZ25lZCBjaGFyIHJhdGUpCitzdGF0aWMgaW50IHdpZmlyYXRlMl9yYXRldGJsX2lueDIzYSh1bnNpZ25lZCBjaGFyIHJhdGUpCiB7Ci0JaW50CWlueCA9IDA7CisJaW50IGlueCA9IDA7CiAJcmF0ZSA9IHJhdGUgJiAweDdmOwogCiAJc3dpdGNoIChyYXRlKSB7CkBAIC0xMzUwLDcgKzEzMzMsNyBAQAogCXVuc2lnbmVkIGludCBpLCBudW1fb2ZfcmF0ZTsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKLQludW1fb2ZfcmF0ZSA9IChwdG5fc3ogPiBOdW1SYXRlcyk/IE51bVJhdGVzOiBwdG5fc3o7CisJbnVtX29mX3JhdGUgPSAocHRuX3N6ID4gTnVtUmF0ZXMpID8gTnVtUmF0ZXMgOiBwdG5fc3o7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29mX3JhdGU7IGkrKykKIAkJbWFzayB8PSAweDEgPDwgd2lmaXJhdGUyX3JhdGV0YmxfaW54MjNhKCoocHRuICsgaSkpOwpAQCAtMTM2MSwyMSArMTM0NCwyMiBAQAogewogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAotCW1hc2sgPSAoKHBIVF9jYXBzLT51LkhUX2NhcF9lbGVtZW50Lk1DU19yYXRlWzBdIDw8IDEyKSB8IChwSFRfY2Fwcy0+dS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVsxXSA8PCAyMCkpOworCW1hc2sgPSBwSFRfY2Fwcy0+dS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVswXSA8PCAxMiB8CisJCXBIVF9jYXBzLT51LkhUX2NhcF9lbGVtZW50Lk1DU19yYXRlWzFdIDw8IDIwOwogCiAJcmV0dXJuIG1hc2s7CiB9CiAKIGludCBzdXBwb3J0X3Nob3J0X0dJMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCSAgICAgc3RydWN0IEhUX2NhcHNfZWxlbWVudCAqcEhUX2NhcHMpCisJCQlzdHJ1Y3QgSFRfY2Fwc19lbGVtZW50ICpwSFRfY2FwcykKIHsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJdW5zaWduZWQgY2hhciBiaXRfb2Zmc2V0OwogCi0JaWYgKCEocG1sbWVpbmZvLT5IVF9lbmFibGUpKQorCWlmICghcG1sbWVpbmZvLT5IVF9lbmFibGUpCiAJCXJldHVybiBfRkFJTDsKLQlpZiAoKHBtbG1laW5mby0+YXNzb2NfQVBfdmVuZG9yID09IEhUX0lPVF9QRUVSX1JBTElOSykpCisJaWYgKHBtbG1laW5mby0+YXNzb2NfQVBfdmVuZG9yID09IEhUX0lPVF9QRUVSX1JBTElOSykKIAkJcmV0dXJuIF9GQUlMOwogCWJpdF9vZmZzZXQgPSAocG1sbWVleHQtPmN1cl9id21vZGUgJiBIVF9DSEFOTkVMX1dJRFRIXzQwKT8gNjogNTsKIApAQCAtMTM5OSwyNSArMTM4MywxMyBAQAogCXJldHVybiByYXRlX2lkeDsKIH0KIAotdW5zaWduZWQgY2hhciBnZXRfaGlnaGVzdF9tY3NfcmF0ZShzdHJ1Y3QgSFRfY2Fwc19lbGVtZW50ICpwSFRfY2FwcykKLXsKLQlpbnQgaSwgbWNzX3JhdGU7Ci0KLQltY3NfcmF0ZSA9IChwSFRfY2Fwcy0+dS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVswXSB8IChwSFRfY2Fwcy0+dS5IVF9jYXBfZWxlbWVudC5NQ1NfcmF0ZVsxXSA8PCA4KSk7Ci0KLQlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKG1jc19yYXRlICYgKDB4MSA8PCBpKSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gaTsKLX0KLQogdm9pZCBVcGRhdGVfUkFfRW50cnkyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhKQogewogCXJ0d19oYWxfdXBkYXRlX3JhX21hc2syM2EocHN0YSwgMCk7CiB9CiAKLXZvaWQgZW5hYmxlX3JhdGVfYWRhcHRpdmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhKQorc3RhdGljIHZvaWQgZW5hYmxlX3JhdGVfYWRhcHRpdmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCQkgc3RydWN0IHN0YV9pbmZvICpwc3RhKQogewogCVVwZGF0ZV9SQV9FbnRyeTIzYShwYWRhcHRlciwgcHN0YSk7CiB9CkBAIC0xNDMyLDE5ICsxNDA0LDEwIEBACiB2b2lkIHVwZGF0ZV90eF9iYXNpY19yYXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHdpcmVsZXNzbW9kZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHN1cHBvcnRlZF9yYXRlc1tORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVhdOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyoJcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCi0JLyoJQWRkZWQgYnkgQWxiZXJ0IDIwMTEvMDMvMjIgKi8KLQkvKglJbiB0aGUgUDJQIG1vZGUsIHRoZSBkcml2ZXIgc2hvdWxkIG5vdCBzdXBwb3J0IHRoZSBiIG1vZGUuICovCi0JLyoJU28sIHRoZSBUeCBwYWNrZXQgc2hvdWxkbid0IHVzZSB0aGUgQ0NLIHJhdGUgKi8KLQlpZiAoIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkKLQkJcmV0dXJuOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCiAKIAltZW1zZXQoc3VwcG9ydGVkX3JhdGVzLCAwLCBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVgpOwogCi0JaWYgKCh3aXJlbGVzc21vZGUgJiBXSVJFTEVTU18xMUIpICYmICh3aXJlbGVzc21vZGUgPT0gV0lSRUxFU1NfMTFCKSkgeworCWlmICh3aXJlbGVzc21vZGUgPT0gV0lSRUxFU1NfMTFCKSB7CiAJCW1lbWNweShzdXBwb3J0ZWRfcmF0ZXMsIHJ0d19iYXNpY19yYXRlX2NjaywgNCk7CiAJfSBlbHNlIGlmICh3aXJlbGVzc21vZGUgJiBXSVJFTEVTU18xMUIpIHsKIAkJbWVtY3B5KHN1cHBvcnRlZF9yYXRlcywgcnR3X2Jhc2ljX3JhdGVfbWl4LCA3KTsKQEAgLTE0NTcsNjcgKzE0MjAsNjggQEAKIAllbHNlCiAJCXVwZGF0ZV9tZ250X3R4X3JhdGUyM2EocGFkYXB0ZXIsIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CKTsKIAotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQkFTSUNfUkFURSwgc3VwcG9ydGVkX3JhdGVzKTsKKwlIYWxTZXRCcmF0ZUNmZzIzYShwYWRhcHRlciwgc3VwcG9ydGVkX3JhdGVzKTsKIH0KIAogdW5zaWduZWQgY2hhciBjaGVja19hc3NvY19BUDIzYSh1OCAqcGZyYW1lLCB1aW50IGxlbikKIHsKLQl1bnNpZ25lZCBpbnQJaTsKLQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqCXBJRTsKLQl1OAllcGlncmFtX3ZlbmRvcl9mbGFnOwotCXU4CXJhbGlua192ZW5kb3JfZmxhZzsKKwlpbnQgaSwgYmNuX2ZpeGVkX3NpemU7CisJdTggZXBpZ3JhbV92ZW5kb3JfZmxhZzsKKwl1OCByYWxpbmtfdmVuZG9yX2ZsYWc7CisJY29uc3QgdTggKnA7CiAJZXBpZ3JhbV92ZW5kb3JfZmxhZyA9IDA7CiAJcmFsaW5rX3ZlbmRvcl9mbGFnID0gMDsKIAotCWZvciAoaSA9IHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKTsgaSA8IGxlbjspIHsKLQkJcElFID0gKHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICopKHBmcmFtZSArIGkpOworCWJjbl9maXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uKTsKIAotCQlzd2l0Y2ggKHBJRS0+RWxlbWVudElEKSB7Ci0JCWNhc2UgX1ZFTkRPUl9TUEVDSUZJQ19JRV86Ci0JCQlpZiAoKCFtZW1jbXAocElFLT5kYXRhLCBBUlRIRVJPU19PVUkxLCAzKSkgfHwKLQkJCSAgICAoIW1lbWNtcChwSUUtPmRhdGEsIEFSVEhFUk9TX09VSTIsIDMpKSkgeworCWZvciAoaSA9IGJjbl9maXhlZF9zaXplOyBpIDwgbGVuOykgeworCQlwID0gcGZyYW1lICsgaTsKKworCQlzd2l0Y2ggKHBbMF0pIHsKKwkJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6CisJCQlpZiAoIW1lbWNtcChwICsgMiwgQVJUSEVST1NfT1VJMSwgMykgfHwKKwkJCSAgICAhbWVtY21wKHAgKyAyLCBBUlRIRVJPU19PVUkyLCAzKSkgewogCQkJCURCR184NzIzQSgibGluayB0byBBcnRoZXJvcyBBUFxuIik7CiAJCQkJcmV0dXJuIEhUX0lPVF9QRUVSX0FUSEVST1M7Ci0JCQl9IGVsc2UgaWYgKCghbWVtY21wKHBJRS0+ZGF0YSwgQlJPQURDT01fT1VJMSwgMykpIHx8Ci0JCQkJICAgIW1lbWNtcChwSUUtPmRhdGEsIEJST0FEQ09NX09VSTIsIDMpIHx8Ci0JCQkJICAgIW1lbWNtcChwSUUtPmRhdGEsIEJST0FEQ09NX09VSTIsIDMpKSB7CisJCQl9IGVsc2UgaWYgKCFtZW1jbXAocCArIDIsIEJST0FEQ09NX09VSTEsIDMpIHx8CisJCQkJICAgIW1lbWNtcChwICsgMiwgQlJPQURDT01fT1VJMiwgMykgfHwKKwkJCQkgICAhbWVtY21wKHAgKyAyLCBCUk9BRENPTV9PVUkyLCAzKSkgewogCQkJCURCR184NzIzQSgibGluayB0byBCcm9hZGNvbSBBUFxuIik7CiAJCQkJcmV0dXJuIEhUX0lPVF9QRUVSX0JST0FEQ09NOwotCQkJfSBlbHNlIGlmICghbWVtY21wKHBJRS0+ZGF0YSwgTUFSVkVMTF9PVUksIDMpKSB7CisJCQl9IGVsc2UgaWYgKCFtZW1jbXAocCArIDIsIE1BUlZFTExfT1VJLCAzKSkgewogCQkJCURCR184NzIzQSgibGluayB0byBNYXJ2ZWxsIEFQXG4iKTsKIAkJCQlyZXR1cm4gSFRfSU9UX1BFRVJfTUFSVkVMTDsKLQkJCX0gZWxzZSBpZiAoIW1lbWNtcChwSUUtPmRhdGEsIFJBTElOS19PVUksIDMpKSB7Ci0JCQkJaWYgKCFyYWxpbmtfdmVuZG9yX2ZsYWcpIHsKKwkJCX0gZWxzZSBpZiAoIW1lbWNtcChwICsgMiwgUkFMSU5LX09VSSwgMykpIHsKKwkJCQlpZiAoIXJhbGlua192ZW5kb3JfZmxhZykKIAkJCQkJcmFsaW5rX3ZlbmRvcl9mbGFnID0gMTsKLQkJCQl9IGVsc2UgeworCQkJCWVsc2UgewogCQkJCQlEQkdfODcyM0EoImxpbmsgdG8gUmFsaW5rIEFQXG4iKTsKIAkJCQkJcmV0dXJuIEhUX0lPVF9QRUVSX1JBTElOSzsKIAkJCQl9Ci0JCQl9IGVsc2UgaWYgKCFtZW1jbXAocElFLT5kYXRhLCBDSVNDT19PVUksIDMpKSB7CisJCQl9IGVsc2UgaWYgKCFtZW1jbXAocCArIDIsIENJU0NPX09VSSwgMykpIHsKIAkJCQlEQkdfODcyM0EoImxpbmsgdG8gQ2lzY28gQVBcbiIpOwogCQkJCXJldHVybiBIVF9JT1RfUEVFUl9DSVNDTzsKLQkJCX0gZWxzZSBpZiAoIW1lbWNtcChwSUUtPmRhdGEsIFJFQUxURUtfT1VJLCAzKSkgeworCQkJfSBlbHNlIGlmICghbWVtY21wKHAgKyAyLCBSRUFMVEVLX09VSSwgMykpIHsKIAkJCQlEQkdfODcyM0EoImxpbmsgdG8gUmVhbHRlayA5NkJcbiIpOwogCQkJCXJldHVybiBIVF9JT1RfUEVFUl9SRUFMVEVLOwotCQkJfSBlbHNlIGlmICghbWVtY21wKHBJRS0+ZGF0YSwgQUlSR09DQVBfT1VJLCAzKSkgeworCQkJfSBlbHNlIGlmICghbWVtY21wKHAgKyAyLCBBSVJHT0NBUF9PVUksIDMpKSB7CiAJCQkJREJHXzg3MjNBKCJsaW5rIHRvIEFpcmdvIENhcFxuIik7CiAJCQkJcmV0dXJuIEhUX0lPVF9QRUVSX0FJUkdPOwotCQkJfSBlbHNlIGlmICghbWVtY21wKHBJRS0+ZGF0YSwgRVBJR1JBTV9PVUksIDMpKSB7CisJCQl9IGVsc2UgaWYgKCFtZW1jbXAocCArIDIsIEVQSUdSQU1fT1VJLCAzKSkgewogCQkJCWVwaWdyYW1fdmVuZG9yX2ZsYWcgPSAxOwogCQkJCWlmIChyYWxpbmtfdmVuZG9yX2ZsYWcpIHsKIAkJCQkJREJHXzg3MjNBKCJsaW5rIHRvIFRlbmRhIFczMTFSIEFQXG4iKTsKIAkJCQkJcmV0dXJuIEhUX0lPVF9QRUVSX1RFTkRBOwotCQkJCX0gZWxzZSB7CisJCQkJfSBlbHNlCiAJCQkJCURCR184NzIzQSgiQ2FwdHVyZSBFUElHUkFNX09VSVxuIik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKKwkJCX0gZWxzZQogCQkJCWJyZWFrOwotCQkJfQogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAotCQlpICs9IChwSUUtPkxlbmd0aCArIDIpOworCQlpICs9IChwWzFdICsgMik7CiAJfQogCiAJaWYgKHJhbGlua192ZW5kb3JfZmxhZyAmJiAhZXBpZ3JhbV92ZW5kb3JfZmxhZykgewpAQCAtMTUzNCw3ICsxNDk4LDcgQEAKIAogdm9pZCB1cGRhdGVfSU9UX2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKIAlzd2l0Y2ggKHBtbG1laW5mby0+YXNzb2NfQVBfdmVuZG9yKSB7CkBAIC0xNTQ2LDE1ICsxNTEwLDE1IEBACiAJCXBtbG1laW5mby0+dHVyYm9Nb2RlX2N0czJzZWxmID0gMDsKIAkJcG1sbWVpbmZvLT50dXJib01vZGVfcnRzZW4gPSAxOwogCQkvKiBkaXNhYmxlIGhpZ2ggcG93ZXIgKi8KLQkJU3dpdGNoX0RNX0Z1bmMyM2EocGFkYXB0ZXIsIH5EWU5BTUlDX0JCX0RZTkFNSUNfVFhQV1IsCi0JCQkgICAgICAgZmFsc2UpOworCQlydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X2NscihwYWRhcHRlciwgKHUzMikKKwkJCQkJCSB+RFlOQU1JQ19CQl9EWU5BTUlDX1RYUFdSKTsKIAkJYnJlYWs7CiAJY2FzZSBIVF9JT1RfUEVFUl9SRUFMVEVLOgogCQkvKiBydHdfd3JpdGUxNihwYWRhcHRlciwgMHg0Y2MsIDB4ZmZmZik7ICovCiAJCS8qIHJ0d193cml0ZTE2KHBhZGFwdGVyLCAweDU0NiwgMHgwMWMwKTsgKi8KIAkJLyogZGlzYWJsZSBoaWdoIHBvd2VyICovCi0JCVN3aXRjaF9ETV9GdW5jMjNhKHBhZGFwdGVyLCB+RFlOQU1JQ19CQl9EWU5BTUlDX1RYUFdSLAotCQkJICAgICAgIGZhbHNlKTsKKwkJcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9jbHIocGFkYXB0ZXIsICh1MzIpCisJCQkJCQkgfkRZTkFNSUNfQkJfRFlOQU1JQ19UWFBXUik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXBtbG1laW5mby0+dHVyYm9Nb2RlX2N0czJzZWxmID0gMDsKQEAgLTE1NjUsMjQgKzE1MjksMjEgQEAKIAogdm9pZCB1cGRhdGVfY2FwaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsIHUxNiB1cGRhdGVDYXApCiB7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYJKnBtbG1lZXh0ID0gJkFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZBZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKLQlib29sCQlTaG9ydFByZWFtYmxlOwogCiAJaWYgKHVwZGF0ZUNhcCAmIGNTaG9ydFByZWFtYmxlKSB7CiAJCS8qICBTaG9ydCBQcmVhbWJsZSAqLwogCQlpZiAocG1sbWVpbmZvLT5wcmVhbWJsZV9tb2RlICE9IFBSRUFNQkxFX1NIT1JUKSB7CiAJCQkvKiAgUFJFQU1CTEVfTE9ORyBvciBQUkVBTUJMRV9BVVRPICovCi0JCQlTaG9ydFByZWFtYmxlID0gdHJ1ZTsKIAkJCXBtbG1laW5mby0+cHJlYW1ibGVfbW9kZSA9IFBSRUFNQkxFX1NIT1JUOwotCQkJcnR3X2hhbF9zZXRfaHdyZWcyM2EoQWRhcHRlciwgSFdfVkFSX0FDS19QUkVBTUJMRSwgKHU4ICopJlNob3J0UHJlYW1ibGUpOworCQkJcnRsODcyM2FfYWNrX3ByZWFtYmxlKEFkYXB0ZXIsIHRydWUpOwogCQl9CiAJfSBlbHNlIHsgLyogIExvbmcgUHJlYW1ibGUgKi8KIAkJaWYgKHBtbG1laW5mby0+cHJlYW1ibGVfbW9kZSAhPSBQUkVBTUJMRV9MT05HKSB7CiAJCQkvKiAgUFJFQU1CTEVfU0hPUlQgb3IgUFJFQU1CTEVfQVVUTyAqLwotCQkJU2hvcnRQcmVhbWJsZSA9IGZhbHNlOwogCQkJcG1sbWVpbmZvLT5wcmVhbWJsZV9tb2RlID0gUFJFQU1CTEVfTE9ORzsKLQkJCXJ0d19oYWxfc2V0X2h3cmVnMjNhKEFkYXB0ZXIsIEhXX1ZBUl9BQ0tfUFJFQU1CTEUsICh1OCAqKSZTaG9ydFByZWFtYmxlKTsKKwkJCXJ0bDg3MjNhX2Fja19wcmVhbWJsZShBZGFwdGVyLCBmYWxzZSk7CiAJCX0KIAl9CiAJaWYgKHVwZGF0ZUNhcCAmIGNJQlNTKSB7CkBAIC0xNTkwLDMyICsxNTUxLDM0IEBACiAJCXBtbG1laW5mby0+c2xvdFRpbWUgPSBOT05fU0hPUlRfU0xPVF9USU1FOwogCX0gZWxzZSB7CiAJCS8qIEZpbGVuOiBTZWUgODAyLjExLTIwMDcgcC45MCAqLwotCQlpZiAocG1sbWVleHQtPmN1cl93aXJlbGVzc19tb2RlICYgKFdJUkVMRVNTXzExRyB8IFdJUkVMRVNTXzExXzI0TikpIHsKKwkJaWYgKHBtbG1lZXh0LT5jdXJfd2lyZWxlc3NfbW9kZSAmCisJCSAgICAoV0lSRUxFU1NfMTFHIHwgV0lSRUxFU1NfMTFfMjROKSkgewogCQkJaWYgKHVwZGF0ZUNhcCAmIGNTaG9ydFNsb3RUaW1lKSB7IC8qICBTaG9ydCBTbG90IFRpbWUgKi8KIAkJCQlpZiAocG1sbWVpbmZvLT5zbG90VGltZSAhPSBTSE9SVF9TTE9UX1RJTUUpCiAJCQkJCXBtbG1laW5mby0+c2xvdFRpbWUgPSBTSE9SVF9TTE9UX1RJTUU7CiAJCQl9IGVsc2UgeyAvKiAgTG9uZyBTbG90IFRpbWUgKi8KIAkJCQlpZiAocG1sbWVpbmZvLT5zbG90VGltZSAhPSBOT05fU0hPUlRfU0xPVF9USU1FKQotCQkJCQlwbWxtZWluZm8tPnNsb3RUaW1lID0gTk9OX1NIT1JUX1NMT1RfVElNRTsKKwkJCQkJcG1sbWVpbmZvLT5zbG90VGltZSA9CisJCQkJCQlOT05fU0hPUlRfU0xPVF9USU1FOwogCQkJfQotCQl9IGVsc2UgaWYgKHBtbG1lZXh0LT5jdXJfd2lyZWxlc3NfbW9kZSAmIChXSVJFTEVTU18xMUEgfCBXSVJFTEVTU18xMV81TikpIHsKKwkJfSBlbHNlIGlmIChwbWxtZWV4dC0+Y3VyX3dpcmVsZXNzX21vZGUgJgorCQkJICAgKFdJUkVMRVNTXzExQSB8IFdJUkVMRVNTXzExXzVOKSkgewogCQkJcG1sbWVpbmZvLT5zbG90VGltZSA9IFNIT1JUX1NMT1RfVElNRTsKIAkJfSBlbHNlIHsKIAkJCS8qIEIgTW9kZSAqLwogCQkJcG1sbWVpbmZvLT5zbG90VGltZSA9IE5PTl9TSE9SVF9TTE9UX1RJTUU7CiAJCX0KIAl9Ci0JcnR3X2hhbF9zZXRfaHdyZWcyM2EoQWRhcHRlciwgSFdfVkFSX1NMT1RfVElNRSwgJnBtbG1laW5mby0+c2xvdFRpbWUpOworCXJ0bDg3MjNhX3NldF9zbG90X3RpbWUoQWRhcHRlciwgcG1sbWVpbmZvLT5zbG90VGltZSk7CiB9CiAKIHZvaWQgdXBkYXRlX3dpcmVsZXNzX21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAlpbnQgcmF0ZWxlbiwgbmV0d29ya190eXBlID0gMDsKLQl1MzIgU0lGU19UaW1lcjsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKmN1cl9uZXR3b3JrID0gJnBtbG1laW5mby0+bmV0d29yazsKLQl1bnNpZ25lZCBjaGFyCQkJKnJhdGUgPSBjdXJfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXM7CisJdW5zaWduZWQgY2hhciAqcmF0ZSA9IGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlczsKIAogCXJhdGVsZW4gPSBydHdfZ2V0X3JhdGVzZXRfbGVuMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7CiAKQEAgLTE2MzAsMjAgKzE1OTMsMjAgQEAKIAkJaWYgKHBtbG1laW5mby0+SFRfZW5hYmxlKQogCQkJbmV0d29ya190eXBlID0gV0lSRUxFU1NfMTFfMjROOwogCi0JCWlmICgoY2NrcmF0ZXNvbmx5X2luY2x1ZGVkMjNhKHJhdGUsIHJhdGVsZW4pKSA9PSB0cnVlKQorCQlpZiAoY2NrcmF0ZXNvbmx5X2luY2x1ZGVkMjNhKHJhdGUsIHJhdGVsZW4pID09IHRydWUpCiAJCQluZXR3b3JrX3R5cGUgfD0gV0lSRUxFU1NfMTFCOwotCQllbHNlIGlmICgoY2NrcmF0ZXNfaW5jbHVkZWQyM2EocmF0ZSwgcmF0ZWxlbikpID09IHRydWUpCisJCWVsc2UgaWYgKGNja3JhdGVzX2luY2x1ZGVkMjNhKHJhdGUsIHJhdGVsZW4pID09IHRydWUpCiAJCQluZXR3b3JrX3R5cGUgfD0gV0lSRUxFU1NfMTFCRzsKIAkJZWxzZQogCQkJbmV0d29ya190eXBlIHw9IFdJUkVMRVNTXzExRzsKIAl9CiAKLQlwbWxtZWV4dC0+Y3VyX3dpcmVsZXNzX21vZGUgPSBuZXR3b3JrX3R5cGUgJiBwYWRhcHRlci0+cmVnaXN0cnlwcml2LndpcmVsZXNzX21vZGU7CisJcG1sbWVleHQtPmN1cl93aXJlbGVzc19tb2RlID0KKwkJbmV0d29ya190eXBlICYgcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi53aXJlbGVzc19tb2RlOwogCi0JU0lGU19UaW1lciA9IDB4MGEwYTA4MDg7IC8qIDB4MDgwOCAtPiBmb3IgQ0NLLCAweDBhMGEgLT4gZm9yIE9GRE0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbmdlIHRoaXMgdmFsdWUgaWYgaGF2aW5nIElPVCBpc3N1ZXMuICovCi0KLQlwYWRhcHRlci0+SGFsRnVuYy5TZXRId1JlZ0hhbmRsZXIocGFkYXB0ZXIsIEhXX1ZBUl9SRVNQX1NJRlMsICAodTggKikmU0lGU19UaW1lcik7CisJLyogMHgwODA4IC0+IGZvciBDQ0ssIDB4MGEwYSAtPiBmb3IgT0ZETSAqLworCS8qIGNoYW5nZSB0aGlzIHZhbHVlIGlmIGhhdmluZyBJT1QgaXNzdWVzLiAqLworCXJ0bDg3MjNhX3NldF9yZXNwX3NpZnMocGFkYXB0ZXIsIDB4MDgsIDB4MDgsIDB4MGEsIDB4MGEpOwogCiAJaWYgKHBtbG1lZXh0LT5jdXJfd2lyZWxlc3NfbW9kZSAmIFdJUkVMRVNTXzExQikKIAkJdXBkYXRlX21nbnRfdHhfcmF0ZTIzYShwYWRhcHRlciwgSUVFRTgwMjExX0NDS19SQVRFXzFNQik7CkBAIC0xNjU4LDQxICsxNjIxLDQ1IEBACiAKIAlpZiAocG1sbWVleHQtPmN1cl93aXJlbGVzc19tb2RlICYgV0lSRUxFU1NfMTFCKSB7CiAJCS8qICBPbmx5IEIsIEIvRywgYW5kIEIvRy9OIEFQIGNvdWxkIHVzZSBDQ0sgcmF0ZSAqLwotCQltZW1jcHkoKHBtbG1laW5mby0+Rldfc3RhX2luZm9bbWFjX2lkXS5TdXBwb3J0ZWRSYXRlcyksIHJ0d19iYXNpY19yYXRlX2NjaywgNCk7CisJCW1lbWNweSgocG1sbWVpbmZvLT5GV19zdGFfaW5mb1ttYWNfaWRdLlN1cHBvcnRlZFJhdGVzKSwKKwkJICAgICAgIHJ0d19iYXNpY19yYXRlX2NjaywgNCk7CiAJfSBlbHNlIHsKLQkJbWVtY3B5KChwbWxtZWluZm8tPkZXX3N0YV9pbmZvW21hY19pZF0uU3VwcG9ydGVkUmF0ZXMpLCBydHdfYmFzaWNfcmF0ZV9vZmRtLCA0KTsKKwkJbWVtY3B5KHBtbG1laW5mby0+Rldfc3RhX2luZm9bbWFjX2lkXS5TdXBwb3J0ZWRSYXRlcywKKwkJICAgICAgIHJ0d19iYXNpY19yYXRlX29mZG0sIDMpOwogCX0KIH0KIAotaW50IHVwZGF0ZV9zdGFfc3VwcG9ydF9yYXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwdmFyX2llLCB1aW50IHZhcl9pZV9sZW4sIGludCBjYW1faWR4KQoraW50IHVwZGF0ZV9zdGFfc3VwcG9ydF9yYXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwdmFyX2llLAorCQkJICAgICAgIHVpbnQgdmFyX2llX2xlbiwgaW50IGNhbV9pZHgpCiB7Ci0JdW5zaWduZWQgaW50CWllX2xlbjsKLQlzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqcElFOwotCWludAlzdXBwb3J0UmF0ZU51bSA9IDA7CisJaW50IHN1cHBvcnRSYXRlTnVtID0gMDsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOworCWNvbnN0IHU4ICpwOwogCi0JcElFID0gKHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICopcnR3X2dldF9pZTIzYShwdmFyX2llLCBfU1VQUE9SVEVEUkFURVNfSUVfLCAmaWVfbGVuLCB2YXJfaWVfbGVuKTsKLQlpZiAocElFID09IE5VTEwpCisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfU1VQUF9SQVRFUywgcHZhcl9pZSwgdmFyX2llX2xlbik7CisJaWYgKCFwKQogCQlyZXR1cm4gX0ZBSUw7CiAKLQltZW1jcHkocG1sbWVpbmZvLT5GV19zdGFfaW5mb1tjYW1faWR4XS5TdXBwb3J0ZWRSYXRlcywgcElFLT5kYXRhLCBpZV9sZW4pOwotCXN1cHBvcnRSYXRlTnVtID0gaWVfbGVuOworCW1lbWNweShwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2NhbV9pZHhdLlN1cHBvcnRlZFJhdGVzLCBwICsgMiwgcFsxXSk7CisJc3VwcG9ydFJhdGVOdW0gPSBwWzFdOwogCi0JcElFID0gKHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICopcnR3X2dldF9pZTIzYShwdmFyX2llLCBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXywgJmllX2xlbiwgdmFyX2llX2xlbik7Ci0JaWYgKHBJRSkKLQkJbWVtY3B5KChwbWxtZWluZm8tPkZXX3N0YV9pbmZvW2NhbV9pZHhdLlN1cHBvcnRlZFJhdGVzICsgc3VwcG9ydFJhdGVOdW0pLCBwSUUtPmRhdGEsIGllX2xlbik7CisJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsIHB2YXJfaWUsIHZhcl9pZV9sZW4pOworCWlmIChwKQorCQltZW1jcHkocG1sbWVpbmZvLT5GV19zdGFfaW5mb1tjYW1faWR4XS5TdXBwb3J0ZWRSYXRlcyArCisJCSAgICAgICBzdXBwb3J0UmF0ZU51bSwgcCArIDIsIHBbMV0pOwogCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdm9pZCBwcm9jZXNzX2FkZGJhX3JlcTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGFkZGJhX3JlcSwgdTggKmFkZHIpCit2b2lkIHByb2Nlc3NfYWRkYmFfcmVxMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgIHU4ICpwYWRkYmFfcmVxLCB1OCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJdTE2IHRpZCwgc3RhcnRfc2VxLCBwYXJhbTsKIAlzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmw7CiAJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKLQlzdHJ1Y3QgQUREQkFfcmVxdWVzdAkqcHJlcSA9IChzdHJ1Y3QgQUREQkFfcmVxdWVzdCopcGFkZGJhX3JlcTsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdgkqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OworCXN0cnVjdCBBRERCQV9yZXF1ZXN0ICpwcmVxID0gKHN0cnVjdCBBRERCQV9yZXF1ZXN0KilwYWRkYmFfcmVxOworCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAKIAlwc3RhID0gcnR3X2dldF9zdGFpbmZvMjNhKHBzdGFwcml2LCBhZGRyKTsKQEAgLTE3MDEsNDEgKzE2NjgsMTcgQEAKIAkJc3RhcnRfc2VxID0gbGUxNl90b19jcHUocHJlcS0+QkFfc3RhcnRpbmdfc2VxY3RybCkgPj4gNDsKIAogCQlwYXJhbSA9IGxlMTZfdG9fY3B1KHByZXEtPkJBX3BhcmFfc2V0KTsKLQkJdGlkID0gKHBhcmFtPj4yKSYweDBmOworCQl0aWQgPSAocGFyYW0gPj4gMikgJiAweDBmOwogCiAJCXByZW9yZGVyX2N0cmwgPSAmcHN0YS0+cmVjdnJlb3JkZXJfY3RybFt0aWRdOwogCiAJCXByZW9yZGVyX2N0cmwtPmluZGljYXRlX3NlcSA9IDB4ZmZmZjsKIAotCQlwcmVvcmRlcl9jdHJsLT5lbmFibGUgPSAocG1sbWVpbmZvLT5iQWNjZXB0QWRkYmFSZXEgPT0gdHJ1ZSk/IHRydWUgOmZhbHNlOworCQlwcmVvcmRlcl9jdHJsLT5lbmFibGUgPSAocG1sbWVpbmZvLT5iQWNjZXB0QWRkYmFSZXEgPT0gdHJ1ZSkgPworCQkJdHJ1ZSA6IGZhbHNlOwogCX0KIH0KIAotdm9pZCB1cGRhdGVfVFNGMjNhKHN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCwgdTggKnBmcmFtZSwgdWludCBsZW4pCi17Ci0JdTggKnBJRTsKLQl1MzIgKnBidWY7Ci0KLQlwSUUgPSBwZnJhbWUgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBidWYgPSAodTMyICopcElFOwotCi0JcG1sbWVleHQtPlRTRlZhbHVlID0gbGUzMl90b19jcHUoKihwYnVmKzEpKTsKLQotCXBtbG1lZXh0LT5UU0ZWYWx1ZSA9IHBtbG1lZXh0LT5UU0ZWYWx1ZSA8PCAzMjsKLQotCXBtbG1lZXh0LT5UU0ZWYWx1ZSB8PSBsZTMyX3RvX2NwdSgqcGJ1Zik7Ci19Ci0KLXZvaWQgY29ycmVjdF9UU0YyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0KQotewotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQ09SUkVDVF9UU0YsIE5VTEwpOwotfQotCi12b2lkIGJlYWNvbl90aW1pbmdfY29udHJvbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXJ0d19oYWxfYmNuX3JlbGF0ZWRfcmVnX3NldHRpbmcyM2EocGFkYXB0ZXIpOwotfQotCiBzdGF0aWMgc3RydWN0IHJ0d19hZGFwdGVyICpwYnVkZHlfcGFkYXB0ZXI7CiAKIGludCBydHdfaGFuZGxlX2R1YWxtYWMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBib29sIGluaXQpCkBAIC0xNzQ1LDE2ICsxNjg4LDE4IEBACiAJaWYgKGluaXQpIHsKIAkJaWYgKHBidWRkeV9wYWRhcHRlciA9PSBOVUxMKSB7CiAJCQlwYnVkZHlfcGFkYXB0ZXIgPSBhZGFwdGVyOwotCQkJREJHXzg3MjNBKCIlcygpOiBwYnVkZHlfcGFkYXB0ZXIgPT0gTlVMTCwgU2V0IHBidWRkeV9wYWRhcHRlclxuIiwgX19mdW5jX18pOworCQkJREJHXzg3MjNBKCIlcygpOiBwYnVkZHlfcGFkYXB0ZXIgPT0gTlVMTCwgIgorCQkJCSAgIlNldCBwYnVkZHlfcGFkYXB0ZXJcbiIsIF9fZnVuY19fKTsKIAkJfSBlbHNlIHsKIAkJCWFkYXB0ZXItPnBidWRkeV9hZGFwdGVyID0gcGJ1ZGR5X3BhZGFwdGVyOwogCQkJcGJ1ZGR5X3BhZGFwdGVyLT5wYnVkZHlfYWRhcHRlciA9IGFkYXB0ZXI7CiAJCQkvKiAgY2xlYXIgZ2xvYmFsIHZhbHVlICovCiAJCQlwYnVkZHlfcGFkYXB0ZXIgPSBOVUxMOwotCQkJREJHXzg3MjNBKCIlcygpOiBwYnVkZHlfcGFkYXB0ZXIgZXhpc3QsIEV4Y2hhbmdlIEluZm9ybWF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCQlEQkdfODcyM0EoIiVzKCk6IHBidWRkeV9wYWRhcHRlciBleGlzdCwgIgorCQkJCSAgIkV4Y2hhbmdlIEluZm9ybWF0aW9uXG4iLCBfX2Z1bmNfXyk7CiAJCX0KLQkgIH0gZWxzZSB7CisJfSBlbHNlCiAJCXBidWRkeV9wYWRhcHRlciA9IE5VTEw7Ci0JfQorCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvY29yZS9ydHdfeG1pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d194bWl0LmMKaW5kZXggMGYxMGNmYS4uYjkxNzUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d194bWl0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9jb3JlL3J0d194bWl0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxvc2RlcF9pbnRmLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDx1c2Jfb3BzLmg+CisjaW5jbHVkZSA8cnRsODcyM2FfeG1pdC5oPgogCiBzdGF0aWMgdTggUDgwMl8xSF9PVUlbUDgwMjExX09VSV9MRU5dID0geyAweDAwLCAweDAwLCAweGY4IH07CiBzdGF0aWMgdTggUkZDMTA0Ml9PVUlbUDgwMjExX09VSV9MRU5dID0geyAweDAwLCAweDAwLCAweDAwIH07CkBAIC01MCwyNyArNTEsMjEgQEAKIAogfQogCi1zMzIJX3J0d19pbml0X3htaXRfcHJpdjIzYShzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYsIHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitpbnQgX3J0d19pbml0X3htaXRfcHJpdjIzYShzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYsCisJCQkgICBzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCWludCBpOwogCXN0cnVjdCB4bWl0X2J1ZiAqcHhtaXRidWY7CiAJc3RydWN0IHhtaXRfZnJhbWUgKnB4ZnJhbWU7Ci0JaW50CXJlcyA9IF9TVUNDRVNTOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAl1MzIgbWF4X3htaXRfZXh0YnVmX3NpemUgPSBNQVhfWE1JVF9FWFRCVUZfU1o7CiAJdTMyIG51bV94bWl0X2V4dGJ1ZiA9IE5SX1hNSVRfRVhUQlVGRjsKIAotCS8qICBXZSBkb24ndCBuZWVkIHRvIG1lbXNldCBwYWRhcHRlci0+WFhYIHRvIHplcm8sIGJlY2F1c2UgYWRhcHRlciBpcyBhbGxvY2F0ZWQgYnkgcnR3X3p2bWFsbG9jKCkuICovCi0JLyogbWVtc2V0KCh1bnNpZ25lZCBjaGFyICopcHhtaXRwcml2LCAwLCBzaXplb2Yoc3RydWN0IHhtaXRfcHJpdikpOyAqLwotCiAJc3Bpbl9sb2NrX2luaXQoJnB4bWl0cHJpdi0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnB4bWl0cHJpdi0+bG9ja19zY3R4KTsKIAlzZW1hX2luaXQoJnB4bWl0cHJpdi0+eG1pdF9zZW1hLCAwKTsKIAlzZW1hX2luaXQoJnB4bWl0cHJpdi0+dGVybWluYXRlX3htaXR0aHJlYWRfc2VtYSwgMCk7CiAKLQkvKgotCVBsZWFzZSBpbnNlcnQgYWxsIHRoZSBxdWV1ZSBpbml0aWFsaXphaXRvbiB1c2luZyBfcnR3X2luaXRfcXVldWUyM2EgYmVsb3cKLQkqLwotCiAJcHhtaXRwcml2LT5hZGFwdGVyID0gcGFkYXB0ZXI7CiAKIAlfcnR3X2luaXRfcXVldWUyM2EoJnB4bWl0cHJpdi0+YmVfcGVuZGluZyk7CkBAIC04MSw0MiArNzYsMjAgQEAKIAogCV9ydHdfaW5pdF9xdWV1ZTIzYSgmcHhtaXRwcml2LT5mcmVlX3htaXRfcXVldWUpOwogCi0JLyoKLQlQbGVhc2UgYWxsb2NhdGUgbWVtb3J5IHdpdGggdGhlIHN6ID0gKHN0cnVjdCB4bWl0X2ZyYW1lKSAqIE5SX1hNSVRGUkFNRSwKLQlhbmQgaW5pdGlhbGl6ZSBmcmVlX3htaXRfZnJhbWUgYmVsb3cuCi0JUGxlYXNlIGFsc28gYXBwbHkgIGZyZWVfdHhvYmogdG8gbGlua191cCBhbGwgdGhlIHhtaXRfZnJhbWVzLi4uCi0JKi8KLQotCXB4bWl0cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgPSBydHdfenZtYWxsb2MoTlJfWE1JVEZSQU1FICogc2l6ZW9mKHN0cnVjdCB4bWl0X2ZyYW1lKSArIDQpOwotCi0JaWYgKHB4bWl0cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYgID09IE5VTEwpIHsKLQkJcHhtaXRwcml2LT5weG1pdF9mcmFtZV9idWYgPSBOVUxMOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLCAoImFsbG9jIHhtaXRfZnJhbWUgZmFpbCFcbiIpKTsKLQkJcmVzID0gX0ZBSUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcHhtaXRwcml2LT5weG1pdF9mcmFtZV9idWYgPSBQVFJfQUxJR04ocHhtaXRwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZiwgNCk7Ci0KLQlweGZyYW1lID0gKHN0cnVjdCB4bWl0X2ZyYW1lKikgcHhtaXRwcml2LT5weG1pdF9mcmFtZV9idWY7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgTlJfWE1JVEZSQU1FOyBpKyspIHsKKwkJcHhmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4bWl0X2ZyYW1lKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHhmcmFtZSkKKwkJCWJyZWFrOwogCQlJTklUX0xJU1RfSEVBRCgmcHhmcmFtZS0+bGlzdCk7CiAKIAkJcHhmcmFtZS0+cGFkYXB0ZXIgPSBwYWRhcHRlcjsKIAkJcHhmcmFtZS0+ZnJhbWVfdGFnID0gTlVMTF9GUkFNRVRBRzsKIAotCQlweGZyYW1lLT5wa3QgPSBOVUxMOwotCi0JCXB4ZnJhbWUtPmJ1Zl9hZGRyID0gTlVMTDsKLQkJcHhmcmFtZS0+cHhtaXRidWYgPSBOVUxMOwotCiAJCWxpc3RfYWRkX3RhaWwoJnB4ZnJhbWUtPmxpc3QsCiAJCQkgICAgICAmcHhtaXRwcml2LT5mcmVlX3htaXRfcXVldWUucXVldWUpOwotCi0JCXB4ZnJhbWUrKzsKIAl9CiAKLQlweG1pdHByaXYtPmZyZWVfeG1pdGZyYW1lX2NudCA9IE5SX1hNSVRGUkFNRTsKKwlweG1pdHByaXYtPmZyZWVfeG1pdGZyYW1lX2NudCA9IGk7CiAKIAlweG1pdHByaXYtPmZyYWdfbGVuID0gTUFYX0ZSQUdfVEhSRVNIT0xEOwogCkBAIC0xNTIsMTggKzEyNSwxMCBAQAogCS8qIGluaXQgeGZyYW1lX2V4dCBxdWV1ZSwgIHRoZSBzYW1lIGNvdW50IGFzIGV4dGJ1ZiAgKi8KIAlfcnR3X2luaXRfcXVldWUyM2EoJnB4bWl0cHJpdi0+ZnJlZV94ZnJhbWVfZXh0X3F1ZXVlKTsKIAotCXB4bWl0cHJpdi0+eGZyYW1lX2V4dF9hbGxvY19hZGRyID0gcnR3X3p2bWFsbG9jKG51bV94bWl0X2V4dGJ1ZiAqIHNpemVvZihzdHJ1Y3QgeG1pdF9mcmFtZSkgKyA0KTsKLQotCWlmIChweG1pdHByaXYtPnhmcmFtZV9leHRfYWxsb2NfYWRkciAgPT0gTlVMTCkgewotCQlweG1pdHByaXYtPnhmcmFtZV9leHQgPSBOVUxMOwotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLCAoImFsbG9jIHhmcmFtZV9leHQgZmFpbCFcbiIpKTsKLQkJcmVzID0gX0ZBSUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcHhtaXRwcml2LT54ZnJhbWVfZXh0ID0gUFRSX0FMSUdOKHB4bWl0cHJpdi0+eGZyYW1lX2V4dF9hbGxvY19hZGRyLCA0KTsKLQlweGZyYW1lID0gKHN0cnVjdCB4bWl0X2ZyYW1lKilweG1pdHByaXYtPnhmcmFtZV9leHQ7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3htaXRfZXh0YnVmOyBpKyspIHsKKwkJcHhmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4bWl0X2ZyYW1lKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHhmcmFtZSkKKwkJCWJyZWFrOwogCQlJTklUX0xJU1RfSEVBRCgmcHhmcmFtZS0+bGlzdCk7CiAKIAkJcHhmcmFtZS0+cGFkYXB0ZXIgPSBwYWRhcHRlcjsKQEAgLTE3OCwxMCArMTQzLDggQEAKIAogCQlsaXN0X2FkZF90YWlsKCZweGZyYW1lLT5saXN0LAogCQkJICAgICAgJnB4bWl0cHJpdi0+ZnJlZV94ZnJhbWVfZXh0X3F1ZXVlLnF1ZXVlKTsKLQotCQlweGZyYW1lKys7CiAJfQotCXB4bWl0cHJpdi0+ZnJlZV94ZnJhbWVfZXh0X2NudCA9IG51bV94bWl0X2V4dGJ1ZjsKKwlweG1pdHByaXYtPmZyZWVfeGZyYW1lX2V4dF9jbnQgPSBpOwogCiAJLyogIEluaXQgeG1pdCBleHRlbnNpb24gYnVmZiAqLwogCV9ydHdfaW5pdF9xdWV1ZTIzYSgmcHhtaXRwcml2LT5mcmVlX3htaXRfZXh0YnVmX3F1ZXVlKTsKQEAgLTIzMCw3ICsxOTMsOSBAQAogCXB4bWl0cHJpdi0+YWNrX3R4ID0gZmFsc2U7CiAJbXV0ZXhfaW5pdCgmcHhtaXRwcml2LT5hY2tfdHhfbXV0ZXgpOwogCXJ0d19zY3R4X2luaXQyM2EoJnB4bWl0cHJpdi0+YWNrX3R4X29wcywgMCk7Ci0JcnR3X2hhbF9pbml0MjNhX3htaXRfcHJpdihwYWRhcHRlcik7CisJdGFza2xldF9pbml0KCZwYWRhcHRlci0+eG1pdHByaXYueG1pdF90YXNrbGV0LAorCQkgICAgICh2b2lkKCopKHVuc2lnbmVkIGxvbmcpKXJ0bDg3MjNhdV94bWl0X3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpcGFkYXB0ZXIpOwogCiBleGl0OgogCkBAIC0yNDIsMTkgKzIwNywxNSBAQAogdm9pZCBfcnR3X2ZyZWVfeG1pdF9wcml2MjNhIChzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYpCiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB4bWl0cHJpdi0+YWRhcHRlcjsKLQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSA9IChzdHJ1Y3QgeG1pdF9mcmFtZSopIHB4bWl0cHJpdi0+cHhtaXRfZnJhbWVfYnVmOworCXN0cnVjdCB4bWl0X2ZyYW1lICpweGZyYW1lOwogCXN0cnVjdCB4bWl0X2J1ZiAqcHhtaXRidWY7CiAJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsICpwdG1wOwotCXUzMiBudW1feG1pdF9leHRidWYgPSBOUl9YTUlUX0VYVEJVRkY7Ci0JaW50IGk7CiAKLQlydHdfaGFsX2ZyZWVfeG1pdF9wcml2MjNhKHBhZGFwdGVyKTsKLQotCWlmIChweG1pdHByaXYtPnB4bWl0X2ZyYW1lX2J1ZiA9PSBOVUxMKQotCQlyZXR1cm47Ci0JZm9yIChpID0gMDsgaSA8IE5SX1hNSVRGUkFNRTsgaSsrKSB7Ci0JCXJ0d19vc194bWl0X2NvbXBsZXRlMjNhKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKLQkJcHhtaXRmcmFtZSsrOworCWxpc3RfZm9yX2VhY2hfc2FmZShwbGlzdCwgcHRtcCwgJnB4bWl0cHJpdi0+ZnJlZV94bWl0X3F1ZXVlLnF1ZXVlKSB7CisJCXB4ZnJhbWUgPSBjb250YWluZXJfb2YocGxpc3QsIHN0cnVjdCB4bWl0X2ZyYW1lLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcHhmcmFtZS0+bGlzdCk7CisJCXJ0d19vc194bWl0X2NvbXBsZXRlMjNhKHBhZGFwdGVyLCBweGZyYW1lKTsKKwkJa2ZyZWUocHhmcmFtZSk7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0LCBwdG1wLCAmcHhtaXRwcml2LT54bWl0YnVmX2xpc3QpIHsKQEAgLTI2NCwxOSArMjI1LDE0IEBACiAJCWtmcmVlKHB4bWl0YnVmKTsKIAl9CiAKLQlpZiAocHhtaXRwcml2LT5wYWxsb2NhdGVkX2ZyYW1lX2J1ZikgewotCQlydHdfdm1mcmVlKHB4bWl0cHJpdi0+cGFsbG9jYXRlZF9mcmFtZV9idWYsIE5SX1hNSVRGUkFNRSAqIHNpemVvZihzdHJ1Y3QgeG1pdF9mcmFtZSkgKyA0KTsKLQl9Ci0KIAkvKiBmcmVlIHhmcmFtZV9leHQgcXVldWUsICB0aGUgc2FtZSBjb3VudCBhcyBleHRidWYgICovCi0JaWYgKChweG1pdGZyYW1lID0gKHN0cnVjdCB4bWl0X2ZyYW1lKilweG1pdHByaXYtPnhmcmFtZV9leHQpKSB7Ci0JCWZvciAoaSA9IDA7IGk8bnVtX3htaXRfZXh0YnVmOyBpKyspIHsKLQkJCXJ0d19vc194bWl0X2NvbXBsZXRlMjNhKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKLQkJCXB4bWl0ZnJhbWUrKzsKLQkJfQorCWxpc3RfZm9yX2VhY2hfc2FmZShwbGlzdCwgcHRtcCwKKwkJCSAgICZweG1pdHByaXYtPmZyZWVfeGZyYW1lX2V4dF9xdWV1ZS5xdWV1ZSkgeworCQlweGZyYW1lID0gY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3QgeG1pdF9mcmFtZSwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnB4ZnJhbWUtPmxpc3QpOworCQlydHdfb3NfeG1pdF9jb21wbGV0ZTIzYShwYWRhcHRlciwgcHhmcmFtZSk7CisJCWtmcmVlKHB4ZnJhbWUpOwogCX0KLQlpZiAocHhtaXRwcml2LT54ZnJhbWVfZXh0X2FsbG9jX2FkZHIpCi0JCXJ0d192bWZyZWUocHhtaXRwcml2LT54ZnJhbWVfZXh0X2FsbG9jX2FkZHIsIG51bV94bWl0X2V4dGJ1ZiAqIHNpemVvZihzdHJ1Y3QgeG1pdF9mcmFtZSkgKyA0KTsKIAogCS8qICBmcmVlIHhtaXQgZXh0ZW5zaW9uIGJ1ZmYgKi8KIAlsaXN0X2Zvcl9lYWNoX3NhZmUocGxpc3QsIHB0bXAsICZweG1pdHByaXYtPnhtaXRleHRidWZfbGlzdCkgewpAQCAtMzM4LDkgKzI5NCwxMCBAQAogCX0gZWxzZSB7CiAJCXdoaWxlICh0cnVlKSB7CiAJCQkvKiBJT1QgYWN0aW9uICovCi0JCQlpZiAoKHBtbG1laW5mby0+YXNzb2NfQVBfdmVuZG9yID09IEhUX0lPVF9QRUVSX0FUSEVST1MpICYmCi0JCQkgICAgKHBhdHRyaWItPmFtcGR1X2VuKSAmJgotCQkJICAgIChwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPT0gX0FFU18pKSB7CisJCQlpZiAocG1sbWVpbmZvLT5hc3NvY19BUF92ZW5kb3IgPT0gSFRfSU9UX1BFRVJfQVRIRVJPUyAmJgorCQkJICAgIHBhdHRyaWItPmFtcGR1X2VuICYmCisJCQkgICAgcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09CisJCQkgICAgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgewogCQkJCXBhdHRyaWItPnZjc19tb2RlID0gQ1RTX1RPX1NFTEY7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00MzcsMjcgKzM5NCwyNCBAQAogCWRlZmF1bHQ6CiAJCURCR184NzIzQSgicW9zX2FjbTIzYSgpOiBpbnZhbGlkIHBhdHRyaWItPnByaW9yaXR5OiAlZCEhIVxuIiwKIAkJCSAgcHJpb3JpdHkpOworCQljaGFuZ2VfcHJpb3JpdHkgPSAwOwogCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gY2hhbmdlX3ByaW9yaXR5OwogfQogCi1zdGF0aWMgdm9pZCBzZXRfcW9zKHN0cnVjdCBwa3RfZmlsZSAqcHBrdGZpbGUsIHN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliKQorc3RhdGljIHZvaWQgc2V0X3FvcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYikKIHsKLQlzdHJ1Y3QgZXRoaGRyIGV0aGVyaGRyOwotCXN0cnVjdCBpcGhkciBpcF9oZHI7Ci0JczMyIFVzZXJQcmlvcml0eSA9IDA7Ci0KLQlfcnR3X29wZW5fcGt0ZmlsZTIzYShwcGt0ZmlsZS0+cGt0LCBwcGt0ZmlsZSk7Ci0JX3J0d19wa3RmaWxlX3JlYWQyM2EocHBrdGZpbGUsICh1bnNpZ25lZCBjaGFyKikmZXRoZXJoZHIsIEVUSF9ITEVOKTsKKwl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOworCXN0cnVjdCBpcGhkciAqaXBfaGRyOworCXU4IFVzZXJQcmlvcml0eSA9IDA7CiAKIAkvKiAgZ2V0IFVzZXJQcmlvcml0eSBmcm9tIElQIGhkciAqLwotCWlmIChwYXR0cmliLT5ldGhlcl90eXBlID09IDB4MDgwMCkgewotCQlfcnR3X3BrdGZpbGVfcmVhZDIzYShwcGt0ZmlsZSwgKHU4KikmaXBfaGRyLCBzaXplb2YoaXBfaGRyKSk7Ci0vKgkJVXNlclByaW9yaXR5ID0gKG50b2hzKGlwX2hkci50b3MpID4+IDUpICYgMHgzOyAqLwotCQlVc2VyUHJpb3JpdHkgPSBpcF9oZHIudG9zID4+IDU7Ci0JfSBlbHNlIGlmIChwYXR0cmliLT5ldGhlcl90eXBlID09IDB4ODg4ZSkgeworCWlmIChwYXR0cmliLT5ldGhlcl90eXBlID09IEVUSF9QX0lQKSB7CisJCWlwX2hkciA9IChzdHJ1Y3QgaXBoZHIgKikocGZyYW1lICsgRVRIX0hMRU4pOworCQlVc2VyUHJpb3JpdHkgPSBpcF9oZHItPnRvcyA+PiA1OworCX0gZWxzZSBpZiAocGF0dHJpYi0+ZXRoZXJfdHlwZSA9PSBFVEhfUF9QQUUpIHsKIAkJLyogICJXaGVuIHByaW9yaXR5IHByb2Nlc3Npbmcgb2YgZGF0YSBmcmFtZXMgaXMgc3VwcG9ydGVkLCAqLwogCQkvKiAgYSBTVEEncyBTTUUgc2hvdWxkIHNlbmQgRUFQT0wtS2V5IGZyYW1lcyBhdCB0aGUgaGlnaGVzdAogCQkgICAgcHJpb3JpdHkuIiAqLwpAQCAtNDY2LDYxICs0MjAsNTQgQEAKIAogCXBhdHRyaWItPnByaW9yaXR5ID0gVXNlclByaW9yaXR5OwogCXBhdHRyaWItPmhkcmxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19oZHIpOwotCXBhdHRyaWItPnN1YnR5cGUgPSBXSUZJX1FPU19EQVRBX1RZUEU7CisJcGF0dHJpYi0+dHlwZSA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBOwogfQogCi1zdGF0aWMgczMyIHVwZGF0ZV9hdHRyaWIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCBzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYikKK3N0YXRpYyBpbnQgdXBkYXRlX2F0dHJpYihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliKQogewotCXVpbnQgaTsKLQlzdHJ1Y3QgcGt0X2ZpbGUgcGt0ZmlsZTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEgPSBOVUxMOwotCXN0cnVjdCBldGhoZHIgZXRoZXJoZHI7Ci0KIAlpbnQgYm1jYXN0OwogCXN0cnVjdCBzdGFfcHJpdgkqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCBxb3NfcHJpdgkqcHFvc3ByaXYgPSAmcG1sbWVwcml2LT5xb3Nwcml2OwogCWludCByZXMgPSBfU1VDQ0VTUzsKKwlzdHJ1Y3QgZXRoaGRyICplaGRyID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLT5kYXRhOwogCi0JX3J0d19vcGVuX3BrdGZpbGUyM2EocGt0LCAmcGt0ZmlsZSk7Ci0JaSA9IF9ydHdfcGt0ZmlsZV9yZWFkMjNhKCZwa3RmaWxlLCAodTgqKSZldGhlcmhkciwgRVRIX0hMRU4pOworCXBhdHRyaWItPmV0aGVyX3R5cGUgPSBudG9ocyhlaGRyLT5oX3Byb3RvKTsKIAotCXBhdHRyaWItPmV0aGVyX3R5cGUgPSBudG9ocyhldGhlcmhkci5oX3Byb3RvKTsKLQotCW1lbWNweShwYXR0cmliLT5kc3QsICZldGhlcmhkci5oX2Rlc3QsIEVUSF9BTEVOKTsKLQltZW1jcHkocGF0dHJpYi0+c3JjLCAmZXRoZXJoZHIuaF9zb3VyY2UsIEVUSF9BTEVOKTsKKwlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+ZHN0LCBlaGRyLT5oX2Rlc3QpOworCWV0aGVyX2FkZHJfY29weShwYXR0cmliLT5zcmMsIGVoZHItPmhfc291cmNlKTsKIAogCXBhdHRyaWItPnBjdHJsID0gMDsKIAotCWlmICgoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpID09IHRydWUpIHx8Ci0JCShjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpID09IHRydWUpKSB7Ci0JCW1lbWNweShwYXR0cmliLT5yYSwgcGF0dHJpYi0+ZHN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShwYXR0cmliLT50YSwgcGF0dHJpYi0+c3JjLCBFVEhfQUxFTik7Ci0JfQotCWVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpKSB7Ci0JCW1lbWNweShwYXR0cmliLT5yYSwgZ2V0X2Jzc2lkKHBtbG1lcHJpdiksIEVUSF9BTEVOKTsKLQkJbWVtY3B5KHBhdHRyaWItPnRhLCBwYXR0cmliLT5zcmMsIEVUSF9BTEVOKTsKLQl9Ci0JZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7Ci0JCW1lbWNweShwYXR0cmliLT5yYSwgcGF0dHJpYi0+ZHN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShwYXR0cmliLT50YSwgZ2V0X2Jzc2lkKHBtbG1lcHJpdiksIEVUSF9BTEVOKTsKKwlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpIHx8CisJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX01BU1RFUl9TVEFURSkpIHsKKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnJhLCBwYXR0cmliLT5kc3QpOworCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+dGEsIHBhdHRyaWItPnNyYyk7CisJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9TVEFUSU9OX1NUQVRFKSkgeworCQlldGhlcl9hZGRyX2NvcHkocGF0dHJpYi0+cmEsIGdldF9ic3NpZChwbWxtZXByaXYpKTsKKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnRhLCBwYXR0cmliLT5zcmMpOworCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7CisJCWV0aGVyX2FkZHJfY29weShwYXR0cmliLT5yYSwgcGF0dHJpYi0+ZHN0KTsKKwkJZXRoZXJfYWRkcl9jb3B5KHBhdHRyaWItPnRhLCBnZXRfYnNzaWQocG1sbWVwcml2KSk7CiAJfQogCi0JcGF0dHJpYi0+cGt0bGVuID0gcGt0ZmlsZS5wa3RfbGVuOworCXBhdHRyaWItPnBrdGxlbiA9IHNrYi0+bGVuIC0gRVRIX0hMRU47CiAKIAlpZiAocGF0dHJpYi0+ZXRoZXJfdHlwZSA9PSBFVEhfUF9JUCkgewogCQkvKiAgVGhlIGZvbGxvd2luZyBpcyBmb3IgREhDUCBhbmQgQVJQIHBhY2tldCwgd2UgdXNlIGNjazFNCiAJCSAgICB0byB0eCB0aGVzZSBwYWNrZXRzIGFuZCBsZXQgTFBTIGF3YWtlIHNvbWUgdGltZSAqLwogCQkvKiAgdG8gcHJldmVudCBESENQIHByb3RvY29sIGZhaWwgKi8KLQkJdTggdG1wWzI0XTsKLQkJX3J0d19wa3RmaWxlX3JlYWQyM2EoJnBrdGZpbGUsICZ0bXBbMF0sIDI0KTsKIAkJcGF0dHJpYi0+ZGhjcF9wa3QgPSAwOwotCQlpZiAocGt0ZmlsZS5wa3RfbGVuID4gMjgyKSB7LyogTUlOSU1VTV9ESENQX1BBQ0tFVF9TSVpFKSB7ICovCi0JCQlpZiAoRVRIX1BfSVAgPT0gcGF0dHJpYi0+ZXRoZXJfdHlwZSkgey8qICBJUCBoZWFkZXIgKi8KLQkJCQlpZiAoKCh0bXBbMjFdID09IDY4KSAmJiAodG1wWzIzXSA9PSA2NykpIHx8Ci0JCQkJICAgICgodG1wWzIxXSA9PSA2NykgJiYgKHRtcFsyM10gPT0gNjgpKSkgeworCQkvKiBNSU5JTVVNX0RIQ1BfUEFDS0VUX1NJWkUpIHsgKi8KKwkJaWYgKHBhdHRyaWItPnBrdGxlbiA+IDI4MiArIDI0KSB7CisJCQlpZiAocGF0dHJpYi0+ZXRoZXJfdHlwZSA9PSBFVEhfUF9JUCkgey8qICBJUCBoZWFkZXIgKi8KKwkJCQl1OCAqcGZyYW1lID0gc2tiLT5kYXRhOworCQkJCXBmcmFtZSArPSBFVEhfSExFTjsKKworCQkJCWlmICgocGZyYW1lWzIxXSA9PSA2OCAmJiBwZnJhbWVbMjNdID09IDY3KSB8fAorCQkJCSAgICAocGZyYW1lWzIxXSA9PSA2NyAmJiBwZnJhbWVbMjNdID09IDY4KSkgewogCQkJCQkvKiAgNjggOiBVRFAgQk9PVFAgY2xpZW50ICovCiAJCQkJCS8qICA2NyA6IFVEUCBCT09UUCBzZXJ2ZXIgKi8KIAkJCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sCkBAIC01MzIsMTcgKzQ3OSwxNyBAQAogCQkJCX0KIAkJCX0KIAkJfQotCX0gZWxzZSBpZiAoMHg4ODhlID09IHBhdHRyaWItPmV0aGVyX3R5cGUpIHsKKwl9IGVsc2UgaWYgKHBhdHRyaWItPmV0aGVyX3R5cGUgPT0gRVRIX1BfUEFFKSB7CiAJCURCR184NzIzQV9MRVZFTChfZHJ2X2Fsd2F5c18sICJzZW5kIGVhcG9sIHBhY2tldFxuIik7CiAJfQogCi0JaWYgKChwYXR0cmliLT5ldGhlcl90eXBlID09IDB4ODg4ZSkgfHwgKHBhdHRyaWItPmRoY3BfcGt0ID09IDEpKSB7CisJaWYgKChwYXR0cmliLT5ldGhlcl90eXBlID09IEVUSF9QX1BBRSkgfHwgKHBhdHRyaWItPmRoY3BfcGt0ID09IDEpKSB7CiAJCXJ0d19zZXRfc2Nhbl9kZW55KHBhZGFwdGVyLCAzMDAwKTsKIAl9CiAKIAkvKiAgSWYgRUFQT0wgLCBBUlAgLCBPUiBESENQIHBhY2tldCwgZHJpdmVyIG11c3QgYmUgaW4gYWN0aXZlIG1vZGUuICovCi0JaWYgKChwYXR0cmliLT5ldGhlcl90eXBlID09IDB4MDgwNikgfHwKLQkgICAgKHBhdHRyaWItPmV0aGVyX3R5cGUgPT0gMHg4ODhlKSB8fCAocGF0dHJpYi0+ZGhjcF9wa3QgPT0gMSkpIHsKKwlpZiAoKHBhdHRyaWItPmV0aGVyX3R5cGUgPT0gRVRIX1BfQVJQKSB8fAorCSAgICAocGF0dHJpYi0+ZXRoZXJfdHlwZSA9PSBFVEhfUF9QQUUpIHx8IChwYXR0cmliLT5kaGNwX3BrdCA9PSAxKSkgewogCQlydHdfbHBzX2N0cmxfd2tfY21kMjNhKHBhZGFwdGVyLCBMUFNfQ1RSTF9TUEVDSUFMX1BBQ0tFVCwgMSk7CiAJfQogCkBAIC01NTksNyArNTA2LDcgQEAKIAkJCQkgIE1BQ19GTVQiXG4iLCBNQUNfQVJHKHBhdHRyaWItPnJhKSkpOwogCQkJcmVzID0gX0ZBSUw7CiAJCQlnb3RvIGV4aXQ7Ci0JCX0gZWxzZSBpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSA9PSB0cnVlKSAmJgorCQl9IGVsc2UgaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSAmJgogCQkJICAgKCEocHN0YS0+c3RhdGUgJiBfRldfTElOS0VEKSkpIHsKIAkJCXJlcyA9IF9GQUlMOwogCQkJZ290byBleGl0OwpAQCAtNTg2LDE2ICs1MzMsMTYgQEAKIAlwYXR0cmliLT5wa3RfaGRybGVuID0gRVRIX0hMRU47CiAKIAlwYXR0cmliLT5oZHJsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCXBhdHRyaWItPnN1YnR5cGUgPSBXSUZJX0RBVEFfVFlQRTsKKwlwYXR0cmliLT50eXBlID0gSUVFRTgwMjExX0ZUWVBFX0RBVEE7CiAJcGF0dHJpYi0+cHJpb3JpdHkgPSAwOwogCiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFIHwgV0lGSV9BREhPQ19TVEFURSB8CiAJCQkgIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSkgewogCQlpZiAocHN0YS0+cW9zX29wdGlvbikKLQkJCXNldF9xb3MoJnBrdGZpbGUsIHBhdHRyaWIpOworCQkJc2V0X3Fvcyhza2IsIHBhdHRyaWIpOwogCX0gZWxzZSB7Ci0JCWlmIChwcW9zcHJpdi0+cW9zX29wdGlvbikgewotCQkJc2V0X3FvcygmcGt0ZmlsZSwgcGF0dHJpYik7CisJCWlmIChwbWxtZXByaXYtPnFvc19vcHRpb24pIHsKKwkJCXNldF9xb3Moc2tiLCBwYXR0cmliKTsKIAogCQkJaWYgKHBtbG1lcHJpdi0+YWNtX21hc2sgIT0gMCkgewogCQkJCXBhdHRyaWItPnByaW9yaXR5ID0gcW9zX2FjbTIzYShwbWxtZXByaXYtPmFjbV9tYXNrLApAQCAtNjEwLDggKzU1Nyw4IEBACiAKIAkJcGF0dHJpYi0+ZW5jcnlwdCA9IDA7CiAKLQkJaWYgKChwYXR0cmliLT5ldGhlcl90eXBlICE9IDB4ODg4ZSkgJiYKLQkJICAgIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9NUF9TVEFURSkgPT0gZmFsc2UpKSB7CisJCWlmICgocGF0dHJpYi0+ZXRoZXJfdHlwZSAhPSBFVEhfUF9QQUUpICYmCisJCSAgICAhY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfTVBfU1RBVEUpKSB7CiAJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLAogCQkJCSAoIlxucHN0YS0+aWVlZTgwMjF4X2Jsb2NrZWQgPT0gdHJ1ZSwgICIKIAkJCQkgICJwYXR0cmliLT5ldGhlcl90eXBlKCUuNHgpICE9IDB4ODg4ZVxuIiwKQEAgLTY0NCwzMSArNTkxLDMyIEBACiAJfQogCiAJc3dpdGNoIChwYXR0cmliLT5lbmNyeXB0KSB7Ci0JY2FzZSBfV0VQNDBfOgotCWNhc2UgX1dFUDEwNF86Ci0JCXBhdHRyaWItPml2X2xlbiA9IDQ7Ci0JCXBhdHRyaWItPmljdl9sZW4gPSA0OworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCXBhdHRyaWItPml2X2xlbiA9IElFRUU4MDIxMV9XRVBfSVZfTEVOOworCQlwYXR0cmliLT5pY3ZfbGVuID0gSUVFRTgwMjExX1dFUF9JQ1ZfTEVOOwogCQlicmVhazsKIAotCWNhc2UgX1RLSVBfOgotCQlwYXR0cmliLT5pdl9sZW4gPSA4OwotCQlwYXR0cmliLT5pY3ZfbGVuID0gNDsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCXBhdHRyaWItPml2X2xlbiA9IElFRUU4MDIxMV9US0lQX0lWX0xFTjsKKwkJcGF0dHJpYi0+aWN2X2xlbiA9IElFRUU4MDIxMV9US0lQX0lDVl9MRU47CiAKLQkJaWYgKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuYnVzZXRraXBrZXkgPT0gX0ZBSUwpIHsKKwkJaWYgKCFwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJ1c2V0a2lwa2V5KSB7CiAJCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLAogCQkJCSAoIlxucGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5idXNldGtpcCIKLQkJCQkgICJrZXkoJWQpID09IF9GQUlMIGRyb3AgcGFja2V0XG4iLAorCQkJCSAgImtleSglZCkgPT0gZmFsc2UgZHJvcCBwYWNrZXRcbiIsCiAJCQkJICBwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJ1c2V0a2lwa2V5KSk7CiAJCQlyZXMgPSBfRkFJTDsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCiAJCWJyZWFrOwotCWNhc2UgX0FFU186CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9pbmZvXywKLQkJCSAoInBhdHRyaWItPmVuY3J5cHQgPSVkIChfQUVTXylcbiIsIHBhdHRyaWItPmVuY3J5cHQpKTsKLQkJcGF0dHJpYi0+aXZfbGVuID0gODsKLQkJcGF0dHJpYi0+aWN2X2xlbiA9IDg7CisJCQkgKCJwYXR0cmliLT5lbmNyeXB0ID0lZCAoV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUClcbiIsCisJCQkgIHBhdHRyaWItPmVuY3J5cHQpKTsKKwkJcGF0dHJpYi0+aXZfbGVuID0gSUVFRTgwMjExX0NDTVBfSERSX0xFTjsKKwkJcGF0dHJpYi0+aWN2X2xlbiA9IElFRUU4MDIxMV9DQ01QX01JQ19MRU47CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTY4MCw3ICs2MjgsNyBAQAogCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF94bWl0X2NfLCBfZHJ2X2luZm9fLAogCQkgKCJ1cGRhdGVfYXR0cmliOiBlbmNyeXB0ID0lZFxuIiwgcGF0dHJpYi0+ZW5jcnlwdCkpOwogCi0JaWYgKHBhdHRyaWItPmVuY3J5cHQgJiYgcHNlY3VyaXR5cHJpdi0+aHdfZGVjcnlwdGVkID09IGZhbHNlKSB7CisJaWYgKHBhdHRyaWItPmVuY3J5cHQgJiYgIXBzZWN1cml0eXByaXYtPmh3X2RlY3J5cHRlZCkgewogCQlwYXR0cmliLT5ic3dlbmMgPSB0cnVlOwogCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLAogCQkJICgidXBkYXRlX2F0dHJpYjogZW5jcnlwdCA9JWQgYnN3ZW5jID0gdHJ1ZVxuIiwKQEAgLTY5Nyw3ICs2NDUsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBzMzIgeG1pdGZyYW1lX2FkZG1pYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorc3RhdGljIGludCB4bWl0ZnJhbWVfYWRkbWljKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpIHsKIAlzdHJ1Y3QgbWljX2RhdGEgbWljZGF0YTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YWluZm87CkBAIC03MzAsNyArNjc4LDcgQEAKIAogCWh3X2hkcl9vZmZzZXQgPSBUWERFU0NfT0ZGU0VUOwogCi0JaWYgKHBhdHRyaWItPmVuY3J5cHQgPT0gX1RLSVBfKSB7CisJaWYgKHBhdHRyaWItPmVuY3J5cHQgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgewogCQkvKiBlbmNvZGUgbWljIGNvZGUgKi8KIAkJaWYgKHN0YWluZm8pIHsKIAkJCXU4IG51bGxfa2V5WzE2XT17MHgwLCAweDAsIDB4MCwgMHgwLApAQCAtNzc1LDcgKzcyMyw3IEBACiAJCQkJCQkJICZwZnJhbWVbMTBdLCA2KTsKIAkJCX0KIAotCQkJLyogaWYgKHBxb3Nwcml2LT5xb3Nfb3B0aW9uID09IDEpICovCisJCQkvKiBpZiAocG1sbWVwcml2LT5xb3Nfb3B0aW9uID09IDEpICovCiAJCQlpZiAocGF0dHJpYi0+cW9zX2VuKQogCQkJCXByaW9yaXR5WzBdID0gKHU4KXB4bWl0ZnJhbWUtPmF0dHJpYi5wcmlvcml0eTsKIApAQCAtODczLDcgKzgyMSw3IEBACiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi1zdGF0aWMgczMyIHhtaXRmcmFtZV9zd2VuY3J5cHQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKK3N0YXRpYyBpbnQgeG1pdGZyYW1lX3N3ZW5jcnlwdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJICAgICAgIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQogewogCXN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliID0gJnB4bWl0ZnJhbWUtPmF0dHJpYjsKQEAgLTg4NCwxNCArODMyLDE0IEBACiAJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF94bWl0X2NfLCBfZHJ2X2FsZXJ0XywKIAkJCSAoIiMjIyB4bWl0ZnJhbWVfc3dlbmNyeXB0XG4iKSk7CiAJCXN3aXRjaCAocGF0dHJpYi0+ZW5jcnlwdCkgewotCQljYXNlIF9XRVA0MF86Ci0JCWNhc2UgX1dFUDEwNF86CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgogCQkJcnR3X3dlcF9lbmNyeXB0MjNhKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKIAkJCWJyZWFrOwotCQljYXNlIF9US0lQXzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQkJcnR3X3RraXBfZW5jcnlwdDIzYShwYWRhcHRlciwgcHhtaXRmcmFtZSk7CiAJCQlicmVhazsKLQkJY2FzZSBfQUVTXzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQkJcnR3X2Flc19lbmNyeXB0MjNhKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtOTA2LDE3ICs4NTQsMTQgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXMzMiBydHdfbWFrZV93bGFuaGRyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpoZHIsCi0JCSAgICAgICAgc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWIpCitzdGF0aWMgaW50IHJ0d19tYWtlX3dsYW5oZHIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmhkciwKKwkJCSAgICBzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYikKIHsKLQl1MTYgKnFjOwotCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX2hkciAqcW9zaGRyOwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IHFvc19wcml2ICpwcW9zcHJpdiA9ICZwbWxtZXByaXYtPnFvc3ByaXY7CiAJdTggcW9zX29wdGlvbiA9IGZhbHNlOwogCWludCByZXMgPSBfU1VDQ0VTUzsKLQl1MTYgKmZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwogCiAJc3RydWN0IHN0YV9pbmZvICpwc3RhOwogCkBAIC05NDUsMzYgKzg5MCwzNiBAQAogCiAJbWVtc2V0KGhkciwgMCwgV0xBTkhEUl9PRkZTRVQpOwogCi0JU2V0RnJhbWVTdWJUeXBlKGZjdHJsLCBwYXR0cmliLT5zdWJ0eXBlKTsKKwlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KHBhdHRyaWItPnR5cGUpOwogCi0JaWYgKHBhdHRyaWItPnN1YnR5cGUgJiBXSUZJX0RBVEFfVFlQRSkgewotCQlpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCAgV0lGSV9TVEFUSU9OX1NUQVRFKSA9PSB0cnVlKSkgeworCWlmIChwYXR0cmliLT50eXBlICYgSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCAgV0lGSV9TVEFUSU9OX1NUQVRFKSkgewogCQkJLyogdG9fZHMgPSAxLCBmcl9kcyA9IDA7ICovCiAJCQkvKiBEYXRhIHRyYW5zZmVyIHRvIEFQICovCi0JCQlTZXRUb0RzKGZjdHJsKTsKLQkJCW1lbWNweShwd2xhbmhkci0+YWRkcjEsIGdldF9ic3NpZChwbWxtZXByaXYpLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkocHdsYW5oZHItPmFkZHIyLCBwYXR0cmliLT5zcmMsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShwd2xhbmhkci0+YWRkcjMsIHBhdHRyaWItPmRzdCwgRVRIX0FMRU4pOworCQkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKTsKKwkJCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjEsIGdldF9ic3NpZChwbWxtZXByaXYpKTsKKwkJCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIHBhdHRyaWItPnNyYyk7CisJCQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBwYXR0cmliLT5kc3QpOwogCi0JCQlpZiAocHFvc3ByaXYtPnFvc19vcHRpb24pCisJCQlpZiAocG1sbWVwcml2LT5xb3Nfb3B0aW9uKQogCQkJCXFvc19vcHRpb24gPSB0cnVlOwogCi0JCX0KLQkJZWxzZSBpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCAgV0lGSV9BUF9TVEFURSkgPT0gdHJ1ZSkpIHsKKwkJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgIFdJRklfQVBfU1RBVEUpKSB7CiAJCQkvKiB0b19kcyA9IDAsIGZyX2RzID0gMTsgKi8KLQkJCVNldEZyRHMoZmN0cmwpOwotCQkJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgcGF0dHJpYi0+ZHN0LCBFVEhfQUxFTik7Ci0JCQltZW1jcHkocHdsYW5oZHItPmFkZHIyLCBnZXRfYnNzaWQocG1sbWVwcml2KSwgRVRIX0FMRU4pOwotCQkJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMywgcGF0dHJpYi0+c3JjLCBFVEhfQUxFTik7CisJCQlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCB8PQorCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CisJCQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBwYXR0cmliLT5kc3QpOworCQkJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgZ2V0X2Jzc2lkKHBtbG1lcHJpdikpOworCQkJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMywgcGF0dHJpYi0+c3JjKTsKIAogCQkJaWYgKHBzdGEtPnFvc19vcHRpb24pCiAJCQkJcW9zX29wdGlvbiA9IHRydWU7Ci0JCX0KLQkJZWxzZSBpZiAoKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFKSA9PSB0cnVlKSB8fAotCQkoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfTUFTVEVSX1NUQVRFKSA9PSB0cnVlKSkgewotCQkJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgcGF0dHJpYi0+ZHN0LCBFVEhfQUxFTik7Ci0JCQltZW1jcHkocHdsYW5oZHItPmFkZHIyLCBwYXR0cmliLT5zcmMsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShwd2xhbmhkci0+YWRkcjMsIGdldF9ic3NpZChwbWxtZXByaXYpLCBFVEhfQUxFTik7CisJCX0gZWxzZSBpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpIHx8CisJCQkgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKSB7CisJCQlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBwYXR0cmliLT5kc3QpOworCQkJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMiwgcGF0dHJpYi0+c3JjKTsKKwkJCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjMsIGdldF9ic3NpZChwbWxtZXByaXYpKTsKIAogCQkJaWYgKHBzdGEtPnFvc19vcHRpb24pCiAJCQkJcW9zX29wdGlvbiA9IHRydWU7CkBAIC05ODUsMTUgKzkzMCwyNCBAQAogCQkJZ290byBleGl0OwogCQl9CiAJCWlmIChwYXR0cmliLT5tZGF0YSkKLQkJCVNldE1EYXRhKGZjdHJsKTsKKwkJCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sIHw9CisJCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOwogCQlpZiAocGF0dHJpYi0+ZW5jcnlwdCkKLQkJCVNldFByaXZhY3koZmN0cmwpOworCQkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwogCQlpZiAocW9zX29wdGlvbikgewotCQkJcWMgPSAodW5zaWduZWQgc2hvcnQgKikoaGRyICsgcGF0dHJpYi0+aGRybGVuIC0gMik7Ci0JCQlpZiAocGF0dHJpYi0+cHJpb3JpdHkpCi0JCQkJU2V0UHJpb3JpdHkocWMsIHBhdHRyaWItPnByaW9yaXR5KTsKLQkJCVNldEVPU1AocWMsIHBhdHRyaWItPmVvc3ApOwotCQkJU2V0QWNrcG9saWN5KHFjLCBwYXR0cmliLT5hY2tfcG9saWN5KTsKKwkJCXFvc2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19oZHIgKiloZHI7CisKKwkJCXFvc2hkci0+cW9zX2N0cmwgPSBjcHVfdG9fbGUxNigKKwkJCQlwYXR0cmliLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLKTsKKworCQkJcW9zaGRyLT5xb3NfY3RybCB8PSBjcHVfdG9fbGUxNigKKwkJCQkocGF0dHJpYi0+YWNrX3BvbGljeSA8PCA1KSAmCisJCQkJSUVFRTgwMjExX1FPU19DVExfQUNLX1BPTElDWV9NQVNLKTsKKworCQkJaWYgKHBhdHRyaWItPmVvc3ApCisJCQkJcW9zaGRyLT5xb3NfY3RybCB8PQorCQkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfUU9TX0NUTF9FT1NQKTsKIAkJfQogCQkvKiBUT0RPOiBmaWxsIEhUIENvbnRyb2wgRmllbGQgKi8KIApAQCAtMTAwMiwxMSArOTU2LDE4IEBACiAJCQlwc3RhLT5zdGFfeG1pdHByaXYudHhzZXFfdGlkW3BhdHRyaWItPnByaW9yaXR5XSsrOwogCQkJcHN0YS0+c3RhX3htaXRwcml2LnR4c2VxX3RpZFtwYXR0cmliLT5wcmlvcml0eV0gJj0gMHhGRkY7CiAJCQlwYXR0cmliLT5zZXFudW0gPSBwc3RhLT5zdGFfeG1pdHByaXYudHhzZXFfdGlkW3BhdHRyaWItPnByaW9yaXR5XTsKLQkJCVNldFNlcU51bShoZHIsIHBhdHRyaWItPnNlcW51bSk7CisJCQkvKiBXZSBkb250IG5lZWQgdG8gd29ycnkgYWJvdXQgZnJhZyBiaXRzIGhlcmUgKi8KKwkJCXB3bGFuaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TTl9UT19TRVEoCisJCQkJCQkJICAgICAgcGF0dHJpYi0+c2VxbnVtKSk7CiAJCQkvKiBjaGVjayBpZiBlbmFibGUgYW1wZHUgKi8KIAkJCWlmIChwYXR0cmliLT5odF9lbiAmJiBwc3RhLT5odHByaXYuYW1wZHVfZW5hYmxlKSB7Ci0JCQkJaWYgKHBzdGEtPmh0cHJpdi5hZ2dfZW5hYmxlX2JpdG1hcCAmIENIS0JJVChwYXR0cmliLT5wcmlvcml0eSkpCi0JCQkJcGF0dHJpYi0+YW1wZHVfZW4gPSB0cnVlOworCQkJCWlmIChwYXR0cmliLT5wcmlvcml0eSA+PSAxNikKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgIgorCQkJCQkgICAgICAgInBhdHRyaWItPnByaW9yaXR5ICVpXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18sIHBhdHRyaWItPnByaW9yaXR5KTsKKwkJCQlpZiAocHN0YS0+aHRwcml2LmFnZ19lbmFibGVfYml0bWFwICYKKwkJCQkgICAgQklUKHBhdHRyaWItPnByaW9yaXR5KSkKKwkJCQkJcGF0dHJpYi0+YW1wZHVfZW4gPSB0cnVlOwogCQkJfQogCQkJLyogcmUtY2hlY2sgaWYgZW5hYmxlIGFtcGR1IGJ5IEJBX3N0YXJ0aW5nX3NlcWN0cmwgKi8KIAkJCWlmIChwYXR0cmliLT5hbXBkdV9lbikgewpAQCAtMTAzNywxMCArOTk4LDEwIEBACiB7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIAotCXJldHVybiAoIV9ydHdfcXVldWVfZW1wdHkyM2EoJnB4bWl0cHJpdi0+YmVfcGVuZGluZykpIHx8Ci0JICAgICAgICghX3J0d19xdWV1ZV9lbXB0eTIzYSgmcHhtaXRwcml2LT5ia19wZW5kaW5nKSkgfHwKLQkgICAgICAgKCFfcnR3X3F1ZXVlX2VtcHR5MjNhKCZweG1pdHByaXYtPnZpX3BlbmRpbmcpKSB8fAotCSAgICAgICAoIV9ydHdfcXVldWVfZW1wdHkyM2EoJnB4bWl0cHJpdi0+dm9fcGVuZGluZykpOworCXJldHVybiAoIWxpc3RfZW1wdHkoJnB4bWl0cHJpdi0+YmVfcGVuZGluZy5xdWV1ZSkpIHx8CisJCSghbGlzdF9lbXB0eSgmcHhtaXRwcml2LT5ia19wZW5kaW5nLnF1ZXVlKSkgfHwKKwkJKCFsaXN0X2VtcHR5KCZweG1pdHByaXYtPnZpX3BlbmRpbmcucXVldWUpKSB8fAorCQkoIWxpc3RfZW1wdHkoJnB4bWl0cHJpdi0+dm9fcGVuZGluZy5xdWV1ZSkpOwogfQogCiBzMzIgcnR3X3R4ZnJhbWVzX3N0YV9hY19wZW5kaW5nMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCkBAIC0xMDk4LDcgKzEwNTksNyBAQAogCWxlbiA9IHBhdHRyaWItPmhkcmxlbiArIHBhdHRyaWItPml2X2xlbjsgLyogIFdMQU4gSGVhZGVyIGFuZCBJViAqLwogCWxlbiArPSBTTkFQX1NJWkUgKyBzaXplb2YodTE2KTsgLyogIExMQyAqLwogCWxlbiArPSBwYXR0cmliLT5wa3RsZW47Ci0JaWYgKHBhdHRyaWItPmVuY3J5cHQgPT0gX1RLSVBfKSBsZW4gKz0gODsgLyogIE1JQyAqLworCWlmIChwYXR0cmliLT5lbmNyeXB0ID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIGxlbiArPSA4OyAvKiAgTUlDICovCiAJbGVuICs9ICgocGF0dHJpYi0+YnN3ZW5jKSA/IHBhdHRyaWItPmljdl9sZW4gOiAwKTsgLyogIElDViAqLwogCiAJcmV0dXJuIGxlbjsKQEAgLTExMTYsMzkgKzEwNzcsNDEgQEAKIDYuIGFwcGx5IHN3LWVuY3J5cHQsIGlmIG5lY2Vzc2FyeS4KIAogKi8KLXMzMiBydHdfeG1pdGZyYW1lX2NvYWxlc2NlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpwa3QsCitpbnQgcnR3X3htaXRmcmFtZV9jb2FsZXNjZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpCiB7Ci0Jc3RydWN0IHBrdF9maWxlIHBrdGZpbGU7Ci0Jc3RydWN0IHN0YV9pbmZvCQkqcHN0YTsKLQlzdHJ1Y3QgeG1pdF9wcml2CSpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwotCXN0cnVjdCBwa3RfYXR0cmliCSpwYXR0cmliID0gJnB4bWl0ZnJhbWUtPmF0dHJpYjsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CisJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKKwlzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYiA9ICZweG1pdGZyYW1lLT5hdHRyaWI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzMzIgZnJnX2lueCwgZnJnX2xlbiwgbXBkdV9sZW4sIGxsY19zeiwgbWVtX3N6OwogCXU4ICpwZnJhbWUsICptZW1fc3RhcnQ7CiAJdTggaHdfaGRyX29mZnNldDsKIAl1OCAqcGJ1Zl9zdGFydDsKLQorCXU4ICpwZGF0YSA9IHNrYi0+ZGF0YTsKKwlpbnQgZGF0YV9sZW4gPSBza2ItPmxlbjsKIAlzMzIgYm1jc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwYXR0cmliLT5yYSk7Ci0JczMyIHJlcyA9IF9TVUNDRVNTOworCWludCByZXMgPSBfU1VDQ0VTUzsKIAotCWlmIChwYXR0cmliLT5wc3RhKSB7CisJaWYgKHBhdHRyaWItPnBzdGEpCiAJCXBzdGEgPSBwYXR0cmliLT5wc3RhOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCURCR184NzIzQSgiJXMsIGNhbGwgcnR3X2dldF9zdGFpbmZvMjNhKClcbiIsIF9fZnVuY19fKTsKIAkJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYSgmcGFkYXB0ZXItPnN0YXByaXYsIHBhdHRyaWItPnJhKTsKIAl9CiAKLQlpZiAocHN0YSA9PSBOVUxMKSB7CisJaWYgKCFwc3RhKSB7CiAJCURCR184NzIzQSgiJXMsIHBzdGEgPT0gTlVMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBfRkFJTDsKIAl9CiAKIAlpZiAoIShwc3RhLT5zdGF0ZSAmX0ZXX0xJTktFRCkpIHsKLQkJREJHXzg3MjNBKCIlcywgcHN0YS0+c3RhdGUoMHgleCkgIT0gX0ZXX0xJTktFRFxuIiwgX19mdW5jX18sIHBzdGEtPnN0YXRlKTsKKwkJREJHXzg3MjNBKCIlcywgcHN0YS0+c3RhdGUoMHgleCkgIT0gX0ZXX0xJTktFRFxuIiwKKwkJCSAgX19mdW5jX18sIHBzdGEtPnN0YXRlKTsKIAkJcmV0dXJuIF9GQUlMOwogCX0KIAotCWlmIChweG1pdGZyYW1lLT5idWZfYWRkciA9PSBOVUxMKSB7CisJaWYgKCFweG1pdGZyYW1lLT5idWZfYWRkcikgewogCQlEQkdfODcyM0EoIj09PiAlcyBidWZfYWRkciA9PSBOVUxMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBfRkFJTDsKIAl9CkBAIC0xMTU3LDE4ICsxMTIwLDE3IEBACiAKIAlod19oZHJfb2Zmc2V0ID0gVFhERVNDX09GRlNFVDsKIAotCW1lbV9zdGFydCA9IHBidWZfc3RhcnQgKwlod19oZHJfb2Zmc2V0OworCW1lbV9zdGFydCA9IHBidWZfc3RhcnQgKyBod19oZHJfb2Zmc2V0OwogCi0JaWYgKHJ0d19tYWtlX3dsYW5oZHIyM2EocGFkYXB0ZXIsIG1lbV9zdGFydCwgcGF0dHJpYikgPT0gX0ZBSUwpIHsKKwlpZiAocnR3X21ha2Vfd2xhbmhkcihwYWRhcHRlciwgbWVtX3N0YXJ0LCBwYXR0cmliKSA9PSBfRkFJTCkgewogCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLAotCQkJICgicnR3X3htaXRmcmFtZV9jb2FsZXNjZTIzYTogcnR3X21ha2Vfd2xhbmhkcjIzYSAiCi0JCQkgICJmYWlsOyBkcm9wIHBrdFxuIikpOworCQkJICgiJXM6IHJ0d19tYWtlX3dsYW5oZHIgZmFpbDsgZHJvcCBwa3RcbiIsIF9fZnVuY19fKSk7CiAJCXJlcyA9IF9GQUlMOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JX3J0d19vcGVuX3BrdGZpbGUyM2EocGt0LCAmcGt0ZmlsZSk7Ci0JX3J0d19wa3RmaWxlX3JlYWQyM2EoJnBrdGZpbGUsIE5VTEwsIHBhdHRyaWItPnBrdF9oZHJsZW4pOworCXBkYXRhICs9IHBhdHRyaWItPnBrdF9oZHJsZW47CisJZGF0YV9sZW4gLT0gcGF0dHJpYi0+cGt0X2hkcmxlbjsKIAogCWZyZ19pbnggPSAwOwogCWZyZ19sZW4gPSBweG1pdHByaXYtPmZyYWdfbGVuIC0gNDsvKiAyMzQ2LTQgPSAyMzQyICovCkBAIC0xMTc5LDMxICsxMTQxLDM3IEBACiAJCW1wZHVfbGVuID0gZnJnX2xlbjsKIAogCQlwZnJhbWUgPSBtZW1fc3RhcnQ7Ci0KLQkJU2V0TUZyYWcobWVtX3N0YXJ0KTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopbWVtX3N0YXJ0OwogCiAJCXBmcmFtZSArPSBwYXR0cmliLT5oZHJsZW47CiAJCW1wZHVfbGVuIC09IHBhdHRyaWItPmhkcmxlbjsKIAogCQkvKiBhZGRpbmcgaWN2LCBpZiBuZWNlc3NhcnkuLi4gKi8KIAkJaWYgKHBhdHRyaWItPml2X2xlbikgewotCQkJaWYgKHBzdGEgIT0gTlVMTCkgeworCQkJaWYgKHBzdGEpIHsKIAkJCQlzd2l0Y2ggKHBhdHRyaWItPmVuY3J5cHQpIHsKLQkJCQljYXNlIF9XRVA0MF86Ci0JCQkJY2FzZSBfV0VQMTA0XzoKLQkJCQkJV0VQX0lWKHBhdHRyaWItPml2LCBwc3RhLT5kb3QxMXR4cG4sIHBhdHRyaWItPmtleV9pZHgpOworCQkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCQkJCVdFUF9JVihwYXR0cmliLT5pdiwgcHN0YS0+ZG90MTF0eHBuLAorCQkJCQkgICAgICAgcGF0dHJpYi0+a2V5X2lkeCk7CiAJCQkJCWJyZWFrOwotCQkJCWNhc2UgX1RLSVBfOgorCQkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKIAkJCQkJaWYgKGJtY3N0KQotCQkJCQkJVEtJUF9JVihwYXR0cmliLT5pdiwgcHN0YS0+ZG90MTF0eHBuLCBwYXR0cmliLT5rZXlfaWR4KTsKKwkJCQkJCVRLSVBfSVYocGF0dHJpYi0+aXYsCisJCQkJCQkJcHN0YS0+ZG90MTF0eHBuLAorCQkJCQkJCXBhdHRyaWItPmtleV9pZHgpOwogCQkJCQllbHNlCi0JCQkJCQlUS0lQX0lWKHBhdHRyaWItPml2LCBwc3RhLT5kb3QxMXR4cG4sIDApOworCQkJCQkJVEtJUF9JVihwYXR0cmliLT5pdiwKKwkJCQkJCQlwc3RhLT5kb3QxMXR4cG4sIDApOwogCQkJCQlicmVhazsKLQkJCQljYXNlIF9BRVNfOgorCQkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJCQkJaWYgKGJtY3N0KQotCQkJCQkJQUVTX0lWKHBhdHRyaWItPml2LCBwc3RhLT5kb3QxMXR4cG4sIHBhdHRyaWItPmtleV9pZHgpOworCQkJCQkJQUVTX0lWKHBhdHRyaWItPml2LAorCQkJCQkJICAgICAgIHBzdGEtPmRvdDExdHhwbiwKKwkJCQkJCSAgICAgICBwYXR0cmliLT5rZXlfaWR4KTsKIAkJCQkJZWxzZQotCQkJCQkJQUVTX0lWKHBhdHRyaWItPml2LCBwc3RhLT5kb3QxMXR4cG4sIDApOworCQkJCQkJQUVTX0lWKHBhdHRyaWItPml2LAorCQkJCQkJICAgICAgIHBzdGEtPmRvdDExdHhwbiwgMCk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTEyMjUsMTYgKzExOTMsMjAgQEAKIAkJCW1wZHVfbGVuIC09IGxsY19zejsKIAkJfQogCi0JCWlmICgocGF0dHJpYi0+aWN2X2xlbiA+MCkgJiYgKHBhdHRyaWItPmJzd2VuYykpCisJCWlmIChwYXR0cmliLT5pY3ZfbGVuID4gMCAmJiBwYXR0cmliLT5ic3dlbmMpCiAJCQltcGR1X2xlbiAtPSBwYXR0cmliLT5pY3ZfbGVuOwogCi0JCWlmIChibWNzdCkgeworCQlpZiAoYm1jc3QpCiAJCQkvKiAgZG9uJ3QgZG8gZnJhZ21lbnQgdG8gYnJvYWRjYXQvbXVsdGljYXN0IHBhY2tldHMgKi8KLQkJCW1lbV9zeiA9IF9ydHdfcGt0ZmlsZV9yZWFkMjNhKCZwa3RmaWxlLCBwZnJhbWUsIHBhdHRyaWItPnBrdGxlbik7Ci0JCX0gZWxzZSB7Ci0JCQltZW1fc3ogPSBfcnR3X3BrdGZpbGVfcmVhZDIzYSgmcGt0ZmlsZSwgcGZyYW1lLCBtcGR1X2xlbik7Ci0JCX0KKwkJCW1lbV9zeiA9IG1pbl90KHMzMiwgZGF0YV9sZW4sIHBhdHRyaWItPnBrdGxlbik7CisJCWVsc2UKKwkJCW1lbV9zeiA9IG1pbl90KHMzMiwgZGF0YV9sZW4sIG1wZHVfbGVuKTsKKworCQltZW1jcHkocGZyYW1lLCBwZGF0YSwgbWVtX3N6KTsKKwogCQlwZnJhbWUgKz0gbWVtX3N6OworCQlwZGF0YSArPSBtZW1fc3o7CisJCWRhdGFfbGVuIC09IG1lbV9zejsKIAogCQlpZiAoKHBhdHRyaWItPmljdl9sZW4gPjApICYmIChwYXR0cmliLT5ic3dlbmMpKSB7CiAJCQltZW1jcHkocGZyYW1lLCBwYXR0cmliLT5pY3YsIHBhdHRyaWItPmljdl9sZW4pOwpAQCAtMTI0Myw3ICsxMjE1LDcgQEAKIAogCQlmcmdfaW54Kys7CiAKLQkJaWYgKGJtY3N0IHx8IChydHdfZW5kb2Zwa3RmaWxlMjNhKCZwa3RmaWxlKSkpIHsKKwkJaWYgKGJtY3N0IHx8IGRhdGFfbGVuIDw9IDApIHsKIAkJCXBhdHRyaWItPm5yX2ZyYWdzID0gZnJnX2lueDsKIAogCQkJcGF0dHJpYi0+bGFzdF90eGNtZHN6ID0gcGF0dHJpYi0+aGRybGVuICsKQEAgLTEyNTIsMjEgKzEyMjQsMjQgQEAKIAkJCQkJCWxsY19zeiA6IDApICsKIAkJCQkJCSgocGF0dHJpYi0+YnN3ZW5jKSA/CiAJCQkJCQlwYXR0cmliLT5pY3ZfbGVuIDogMCkgKyBtZW1fc3o7Ci0KLQkJCUNsZWFyTUZyYWcobWVtX3N0YXJ0KTsKKwkJCWhkci0+ZnJhbWVfY29udHJvbCAmPQorCQkJCX5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpOwogCiAJCQlicmVhazsKIAkJfSBlbHNlIHsKLQkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF94bWl0X2NfLCBfZHJ2X2Vycl8sICgiJXM6IFRoZXJlJ3JlIHN0aWxsIHNvbWV0aGluZyBpbiBwYWNrZXQhXG4iLCBfX2Z1bmNfXykpOworCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sIF9kcnZfZXJyXywKKwkJCQkgKCIlczogVGhlcmUncmUgc3RpbGwgc29tZXRoaW5nIGluIHBhY2tldCFcbiIsCisJCQkJICBfX2Z1bmNfXykpOwogCQl9CisJCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpOwogCiAJCW1lbV9zdGFydCA9IFBUUl9BTElHTihwZnJhbWUsIDQpICsgaHdfaGRyX29mZnNldDsKIAkJbWVtY3B5KG1lbV9zdGFydCwgcGJ1Zl9zdGFydCArIGh3X2hkcl9vZmZzZXQsIHBhdHRyaWItPmhkcmxlbik7Ci0KIAl9CiAKIAlpZiAoeG1pdGZyYW1lX2FkZG1pYyhwYWRhcHRlciwgcHhtaXRmcmFtZSkgPT0gX0ZBSUwpIHsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sIF9kcnZfZXJyXywgKCJ4bWl0ZnJhbWVfYWRkbWljKHBhZGFwdGVyLCBweG1pdGZyYW1lKSA9PSBfRkFJTFxuIikpOworCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9lcnJfLAorCQkJICgieG1pdGZyYW1lX2FkZG1pYyhwYWRhcHRlciwgcHhtaXRmcmFtZSkgPT0gX0ZBSUxcbiIpKTsKIAkJREJHXzg3MjNBKCJ4bWl0ZnJhbWVfYWRkbWljKHBhZGFwdGVyLCBweG1pdGZyYW1lKSA9PSBfRkFJTFxuIik7CiAJCXJlcyA9IF9GQUlMOwogCQlnb3RvIGV4aXQ7CkBAIC0xMzEzLDExICsxMjg4LDEwIEBACiAKIHZvaWQgcnR3X3VwZGF0ZV9wcm90ZWN0aW9uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICppZSwgdWludCBpZV9sZW4pCiB7Ci0Jc3RydWN0CXhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKLQlzdHJ1Y3QJcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OwotCXVpbnQJcHJvdGVjdGlvbjsKLQl1OAkqcGVycDsKLQlpbnQJIGVycF9sZW47CisJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKKwlzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiA9ICZwYWRhcHRlci0+cmVnaXN0cnlwcml2OworCXVpbnQgcHJvdGVjdGlvbjsKKwljb25zdCB1OCAqcDsKIAogCXN3aXRjaCAocHhtaXRwcml2LT52Y3Nfc2V0dGluZykgewogCWNhc2UgRElTQUJMRV9WQ1M6CkBAIC0xMzI3LDExICsxMzAxLDExIEBACiAJCWJyZWFrOwogCWNhc2UgQVVUT19WQ1M6CiAJZGVmYXVsdDoKLQkJcGVycCA9IHJ0d19nZXRfaWUyM2EoaWUsIF9FUlBJTkZPX0lFXywgJmVycF9sZW4sIGllX2xlbik7Ci0JCWlmIChwZXJwID09IE5VTEwpIHsKKwkJcCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfRVJQX0lORk8sIGllLCBpZV9sZW4pOworCQlpZiAoIXApCiAJCQlweG1pdHByaXYtPnZjcyA9IE5PTkVfVkNTOwotCQl9IGVsc2UgewotCQkJcHJvdGVjdGlvbiA9ICgqKHBlcnAgKyAyKSkgJiBCSVQoMSk7CisJCWVsc2UgeworCQkJcHJvdGVjdGlvbiA9ICgqKHAgKyAyKSkgJiBCSVQoMSk7CiAJCQlpZiAocHJvdGVjdGlvbikgewogCQkJCWlmIChwcmVnaXN0cnlwcml2LT52Y3NfdHlwZSA9PSBSVFNfQ1RTKQogCQkJCQlweG1pdHByaXYtPnZjcyA9IFJUU19DVFM7CkBAIC0xMzk2LDcgKzEzNzAsOCBAQAogCXJldHVybiBweG1pdGJ1ZjsKIH0KIAotczMyIHJ0d19mcmVlX3htaXRidWZfZXh0MjNhKHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZikKK2ludCBydHdfZnJlZV94bWl0YnVmX2V4dDIzYShzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYsCisJCQkgICAgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZikKIHsKIAl1bnNpZ25lZCBsb25nIGlycUw7CiAJc3RydWN0IHJ0d19xdWV1ZSAqcGZyZWVfcXVldWUgPSAmcHhtaXRwcml2LT5mcmVlX3htaXRfZXh0YnVmX3F1ZXVlOwpAQCAtMTQ1MCw3ICsxNDI1LDcgQEAKIAlyZXR1cm4gcHhtaXRidWY7CiB9CiAKLXMzMiBydHdfZnJlZV94bWl0YnVmMjNhKHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZikKK2ludCBydHdfZnJlZV94bWl0YnVmMjNhKHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZikKIHsKIAl1bnNpZ25lZCBsb25nIGlycUw7CiAJc3RydWN0IHJ0d19xdWV1ZSAqcGZyZWVfeG1pdGJ1Zl9xdWV1ZSA9ICZweG1pdHByaXYtPmZyZWVfeG1pdGJ1Zl9xdWV1ZTsKQEAgLTE1MTIsMjIgKzE0ODcsMTggQEAKIE11c3QgYmUgdmVyeSB2ZXJ5IGNhdXRpb3VzLi4uCiAKICovCi1zdHJ1Y3QgeG1pdF9mcmFtZSAqcnR3X2FsbG9jX3htaXRmcmFtZTIzYShzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYpLyogX3F1ZXVlICpwZnJlZV94bWl0X3F1ZXVlKSAqLworc3RhdGljIHN0cnVjdCB4bWl0X2ZyYW1lICpydHdfYWxsb2NfeG1pdGZyYW1lKHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdikKIHsKLQkvKgotCQlQbGVhc2UgcmVtZW1iZXIgdG8gdXNlIGFsbCB0aGUgb3NkZXBfc2VydmljZSBhcGksCi0JCWFuZCBsb2NrL3VubG9jayBvciBfZW50ZXIvX2V4aXQgY3JpdGljYWwgdG8gcHJvdGVjdAotCQlwZnJlZV94bWl0X3F1ZXVlCi0JKi8KLQogCXN0cnVjdCB4bWl0X2ZyYW1lICpweGZyYW1lID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdCwgKnBoZWFkOwogCXN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3htaXRfcXVldWUgPSAmcHhtaXRwcml2LT5mcmVlX3htaXRfcXVldWU7CiAKIAlzcGluX2xvY2tfYmgoJnBmcmVlX3htaXRfcXVldWUtPmxvY2spOwogCi0JaWYgKF9ydHdfcXVldWVfZW1wdHkyM2EocGZyZWVfeG1pdF9xdWV1ZSkgPT0gdHJ1ZSkgewotCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9pbmZvXywgKCJydHdfYWxsb2NfeG1pdGZyYW1lMjNhOiVkXG4iLCBweG1pdHByaXYtPmZyZWVfeG1pdGZyYW1lX2NudCkpOworCWlmIChsaXN0X2VtcHR5KCZwZnJlZV94bWl0X3F1ZXVlLT5xdWV1ZSkpIHsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sIF9kcnZfaW5mb18sCisJCQkgKCJydHdfYWxsb2NfeG1pdGZyYW1lOiVkXG4iLAorCQkJICBweG1pdHByaXYtPmZyZWVfeG1pdGZyYW1lX2NudCkpOwogCQlweGZyYW1lID0gIE5VTEw7CiAJfSBlbHNlIHsKIAkJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHBmcmVlX3htaXRfcXVldWUpOwpAQCAtMTUzOCw3ICsxNTA5LDkgQEAKIAogCQlsaXN0X2RlbF9pbml0KCZweGZyYW1lLT5saXN0KTsKIAkJcHhtaXRwcml2LT5mcmVlX3htaXRmcmFtZV9jbnQtLTsKLQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sIF9kcnZfaW5mb18sICgicnR3X2FsbG9jX3htaXRmcmFtZTIzYSgpOmZyZWVfeG1pdGZyYW1lX2NudCA9JWRcbiIsIHB4bWl0cHJpdi0+ZnJlZV94bWl0ZnJhbWVfY250KSk7CisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF94bWl0X2NfLCBfZHJ2X2luZm9fLAorCQkJICgicnR3X2FsbG9jX3htaXRmcmFtZSgpOmZyZWVfeG1pdGZyYW1lX2NudCA9JWRcbiIsCisJCQkgIHB4bWl0cHJpdi0+ZnJlZV94bWl0ZnJhbWVfY250KSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJnBmcmVlX3htaXRfcXVldWUtPmxvY2spOwpAQCAtMTU1Niw3ICsxNTI5LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmcXVldWUtPmxvY2spOwogCi0JaWYgKF9ydHdfcXVldWVfZW1wdHkyM2EocXVldWUpID09IHRydWUpIHsKKwlpZiAobGlzdF9lbXB0eSgmcXVldWUtPnF1ZXVlKSkgewogCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfeG1pdF9jXywgX2Rydl9pbmZvXywgKCJydHdfYWxsb2NfeG1pdGZyYW1lMjNhX2V4dDolZFxuIiwgcHhtaXRwcml2LT5mcmVlX3hmcmFtZV9leHRfY250KSk7CiAJCXB4ZnJhbWUgPSAgTlVMTDsKIAl9IGVsc2UgewpAQCAtMTY0Miw3ICsxNjE1LDcgQEAKIAogfQogCi1zMzIgcnR3X3htaXRmcmFtZV9lbnF1ZXVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCitpbnQgcnR3X3htaXRmcmFtZV9lbnF1ZXVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkgICAgIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQogewogCWlmIChydHdfeG1pdDIzYV9jbGFzc2lmaWVyKHBhZGFwdGVyLCBweG1pdGZyYW1lKSA9PSBfRkFJTCkgewpAQCAtMTcxNSw3ICsxNjg4LDkgQEAKIAkJCQlwaHd4bWl0LT5hY2NudC0tOwogCiAJCQkJLyogUmVtb3ZlIHN0YSBub2RlIHdoZW4gdGhlcmUgaXMgbm8gcGVuZGluZyBwYWNrZXRzLiAqLwotCQkJCWlmIChfcnR3X3F1ZXVlX2VtcHR5MjNhKHBmcmFtZV9xdWV1ZSkpIC8qIG11c3QgYmUgZG9uZSBhZnRlciBnZXRfbmV4dCBhbmQgYmVmb3JlIGJyZWFrICovCisJCQkJLyogbXVzdCBiZSBkb25lIGFmdGVyIGdldF9uZXh0IGFuZAorCQkJCSAgIGJlZm9yZSBicmVhayAqLworCQkJCWlmIChsaXN0X2VtcHR5KCZwZnJhbWVfcXVldWUtPnF1ZXVlKSkKIAkJCQkJbGlzdF9kZWxfaW5pdCgmcHR4c2VydnEtPnR4X3BlbmRpbmcpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KQEAgLTE3NjQsOCArMTczOSw4IEBACiAgKiBXaWxsIGVucXVldWUgcHhtaXRmcmFtZSB0byB0aGUgcHJvcGVyIHF1ZXVlLAogICogYW5kIGluZGljYXRlIGl0IHRvIHh4X3BlbmRpbmcgbGlzdC4uLi4uCiAgKi8KLXMzMiBydHdfeG1pdDIzYV9jbGFzc2lmaWVyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKK2ludCBydHdfeG1pdDIzYV9jbGFzc2lmaWVyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8JKnBzdGE7CiAJc3RydWN0IHR4X3NlcnZxCSpwdHhzZXJ2cTsKQEAgLTE5NDIsOSArMTkxNyw5IEBACiB7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIAlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSA9IE5VTEw7Ci0JczMyIHJlczsKKwlpbnQgcmVzOwogCi0JcHhtaXRmcmFtZSA9IHJ0d19hbGxvY194bWl0ZnJhbWUyM2EocHhtaXRwcml2KTsKKwlweG1pdGZyYW1lID0gcnR3X2FsbG9jX3htaXRmcmFtZShweG1pdHByaXYpOwogCiAJaWYgKHB4bWl0ZnJhbWUgPT0gTlVMTCkgewogCQlSVF9UUkFDRShfbW9kdWxlX3htaXRfb3NkZXBfY18sIF9kcnZfZXJyXywKQEAgLTE5NzQsNyArMTk0OSw3IEBACiAJc3Bpbl91bmxvY2tfYmgoJnB4bWl0cHJpdi0+bG9jayk7CiAjZW5kaWYKIAotCWlmIChydHdfaGFsX3htaXQyM2EocGFkYXB0ZXIsIHB4bWl0ZnJhbWUpID09IGZhbHNlKQorCWlmIChydGw4NzIzYXVfaGFsX3htaXQocGFkYXB0ZXIsIHB4bWl0ZnJhbWUpID09IGZhbHNlKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtMTk5MSw4ICsxOTY2LDggQEAKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCWludCBibWNzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBhdHRyaWItPnJhKTsKIAotCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkgPT0gZmFsc2UpCi0JICAgIHJldHVybiByZXQ7CisJaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpCisJCXJldHVybiByZXQ7CiAKIAlpZiAocGF0dHJpYi0+cHN0YSkgewogCQlwc3RhID0gcGF0dHJpYi0+cHN0YTsKQEAgLTIwMzYsNyArMjAxMSw4IEBACiAKIAkJCS8qIERCR184NzIzQSgiZW5xdWV1ZSwgc3FfbGVuID0lZCwgdGltID0leFxuIiwgcHN0YS0+c2xlZXBxX2xlbiwgcHN0YXByaXYtPnRpbV9iaXRtYXApOyAqLwogCi0JCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBfVElNX0lFXywgTlVMTCwgZmFsc2UpOy8qIHR4IGJjL21jIHBhY2tldHMgYWZ0ZXIgdXBhdGUgYmNuICovCisJCQkvKiB0eCBiYy9tYyBwYWNrZXRzIGFmdGVyIHVwYXRlIGJjbiAqLworCQkJdXBkYXRlX2JlYWNvbjIzYShwYWRhcHRlciwgV0xBTl9FSURfVElNLCBOVUxMLCBmYWxzZSk7CiAKIAkJCS8qIHNwaW5fdW5sb2NrX2JoKCZwc3RhLT5zbGVlcF9xLmxvY2spOyAqLwogCkBAIC0yMDkzLDcgKzIwNjksOCBAQAogCiAJCQkJaWYgKHBzdGEtPnNsZWVwcV9sZW4gPT0gMSkgewogCQkJCQkvKiB1cGF0ZSBCQ04gZm9yIFRJTSBJRSAqLwotCQkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBfVElNX0lFXywgTlVMTCwgZmFsc2UpOworCQkJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9USU0sCisJCQkJCQkJIE5VTEwsIGZhbHNlKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTIyNDQsNyArMjIyMSw3IEBACiAJCX0KIAogCQlweG1pdGZyYW1lLT5hdHRyaWIudHJpZ2dlcmVkID0gMTsKLQkJcnR3X2hhbF94bWl0MjNhZnJhbWVfZW5xdWV1ZShwYWRhcHRlciwgcHhtaXRmcmFtZSk7CisJCXJ0bDg3MjNhdV9oYWxfeG1pdGZyYW1lX2VucXVldWUocGFkYXB0ZXIsIHB4bWl0ZnJhbWUpOwogCX0KIAogCWlmIChwc3RhLT5zbGVlcHFfbGVuID09IDApIHsKQEAgLTIyOTEsNyArMjI2OCw3IEBACiAJCQkJcHhtaXRmcmFtZS0+YXR0cmliLm1kYXRhID0gMDsKIAogCQkJcHhtaXRmcmFtZS0+YXR0cmliLnRyaWdnZXJlZCA9IDE7Ci0JCQlydHdfaGFsX3htaXQyM2FmcmFtZV9lbnF1ZXVlKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKKwkJCXJ0bDg3MjNhdV9oYWxfeG1pdGZyYW1lX2VucXVldWUocGFkYXB0ZXIsIHB4bWl0ZnJhbWUpOwogCQl9CiAJCWlmIChwc3RhX2JtYy0+c2xlZXBxX2xlbiA9PSAwKSB7CiAJCQlwc3RhcHJpdi0+dGltX2JpdG1hcCAmPSB+QklUKDApOwpAQCAtMjMwNyw3ICsyMjg0LDcgQEAKIAl9CiAKIAlpZiAodXBkYXRlX21hc2spCi0JCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9USU1fSUVfLCBOVUxMLCBmYWxzZSk7CisJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIFdMQU5fRUlEX1RJTSwgTlVMTCwgZmFsc2UpOwogfQogCiB2b2lkIHhtaXRfZGVsaXZlcnlfZW5hYmxlZF9mcmFtZXMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKQEAgLTIzNjUsMTQgKzIzNDIsMTQgQEAKIAogCQlweG1pdGZyYW1lLT5hdHRyaWIudHJpZ2dlcmVkID0gMTsKIAotCQlydHdfaGFsX3htaXQyM2FmcmFtZV9lbnF1ZXVlKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKKwkJcnRsODcyM2F1X2hhbF94bWl0ZnJhbWVfZW5xdWV1ZShwYWRhcHRlciwgcHhtaXRmcmFtZSk7CiAKIAkJaWYgKChwc3RhLT5zbGVlcHFfYWNfbGVuID09IDApICYmICghcHN0YS0+aGFzX2xlZ2FjeV9hYykgJiYKIAkJICAgICh3bW1wc19hYykpIHsKIAkJCXBzdGFwcml2LT50aW1fYml0bWFwICY9IH5DSEtCSVQocHN0YS0+YWlkKTsKIAogCQkJLyogdXBhdGUgQkNOIGZvciBUSU0gSUUgKi8KLQkJCXVwZGF0ZV9iZWFjb24yM2EocGFkYXB0ZXIsIF9USU1fSUVfLCBOVUxMLCBmYWxzZSk7CisJCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBXTEFOX0VJRF9USU0sIE5VTEwsIGZhbHNlKTsKIAkJfQogCX0KIAlzcGluX3VubG9ja19iaCgmcHhtaXRwcml2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL0hhbERNT3V0U3JjODcyM0FfQ0UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL0hhbERNT3V0U3JjODcyM0FfQ0UuYwppbmRleCA5Nzk2ZjJlLi40YjQxYmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9IYWxETU91dFNyYzg3MjNBX0NFLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvSGFsRE1PdXRTcmM4NzIzQV9DRS5jCkBAIC0xOCw2ICsxOCw3IEBACiAvKiAgaW5jbHVkZSBmaWxlcyAqLwogCiAjaW5jbHVkZSAib2RtX3ByZWNvbXAuaCIKKyNpbmNsdWRlIDx1c2Jfb3BzX2xpbnV4Lmg+CiAKICNkZWZpbmUJCURQS19ERUxUQV9NQVBQSU5HX05VTQkxMwogI2RlZmluZQkJaW5kZXhfbWFwcGluZ19IUF9OVU0JMTUKQEAgLTI1MiwzNSArMjUzLDQxIEBACiAJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9YQ1R4QUZFLCBiTWFza0g0Qml0cywgdmFsdWUzMik7CiAKIAkJCQl2YWx1ZTMyID0gKChYICogZWxlX0QpPj43KSYweDAxOwotCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfRUNDQVRocmVzaG9sZCwgQklUMzEsIHZhbHVlMzIpOworCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfRUNDQVRocmVzaG9sZCwKKwkJCQkJICAgICBCSVQoMzEpLCB2YWx1ZTMyKTsKIAogCQkJCXZhbHVlMzIgPSAoKFkgKiBlbGVfRCk+PjcpJjB4MDE7Ci0JCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9FQ0NBVGhyZXNob2xkLCBCSVQyOSwgdmFsdWUzMik7CisJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9FQ0NBVGhyZXNob2xkLAorCQkJCQkgICAgIEJJVCgyOSksIHZhbHVlMzIpOwogCQkJfSBlbHNlIHsKLQkJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0wX1hBVHhJUUltYmFsYW5jZSwgYk1hc2tEV29yZCwgT0ZETVN3aW5nVGFibGUyM0FbT0ZETV9pbmRleFswXV0pOwotCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfWENUeEFGRSwgYk1hc2tINEJpdHMsIDB4MDApOwotCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfRUNDQVRocmVzaG9sZCwgQklUMzF8QklUMjksIDB4MDApOworCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfWEFUeElRSW1iYWxhbmNlLAorCQkJCQkgICAgIGJNYXNrRFdvcmQsCisJCQkJCSAgICAgT0ZETVN3aW5nVGFibGUyM0FbT0ZETV9pbmRleFswXV0pOworCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfWENUeEFGRSwKKwkJCQkJICAgICBiTWFza0g0Qml0cywgMHgwMCk7CisJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9FQ0NBVGhyZXNob2xkLAorCQkJCQkgICAgIEJJVCgzMSkgfCBCSVQoMjkpLCAweDAwKTsKIAkJCX0KIAogCQkJLyogQWRqdXN0IENDSyBhY2NvcmRpbmcgdG8gSVFLIHJlc3VsdCAqLwogCQkJaWYgKCFwZG1wcml2LT5iQ0NLaW5DSDE0KSB7Ci0JCQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweGEyMiwgQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfaW5kZXhdWzBdKTsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4YTIzLCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzMjNBW0NDS19pbmRleF1bMV0pOwotCQkJCXJ0d193cml0ZTgoQWRhcHRlciwgMHhhMjQsIENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX2luZGV4XVsyXSk7Ci0JCQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweGEyNSwgQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfaW5kZXhdWzNdKTsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4YTI2LCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzMjNBW0NDS19pbmRleF1bNF0pOwotCQkJCXJ0d193cml0ZTgoQWRhcHRlciwgMHhhMjcsIENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX2luZGV4XVs1XSk7Ci0JCQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweGEyOCwgQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfaW5kZXhdWzZdKTsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4YTI5LCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzMjNBW0NDS19pbmRleF1bN10pOworCQkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhhMjIsIENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX2luZGV4XVswXSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGEyMywgQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfaW5kZXhdWzFdKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4YTI0LCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzMjNBW0NDS19pbmRleF1bMl0pOworCQkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhhMjUsIENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX2luZGV4XVszXSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGEyNiwgQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfaW5kZXhdWzRdKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4YTI3LCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzMjNBW0NDS19pbmRleF1bNV0pOworCQkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhhMjgsIENDS1N3aW5nVGFibGVfQ2gxX0NoMTMyM0FbQ0NLX2luZGV4XVs2XSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGEyOSwgQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfaW5kZXhdWzddKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweGEyMiwgQ0NLU3dpbmdUYWJsZV9DaDE0MjNBW0NDS19pbmRleF1bMF0pOwotCQkJCXJ0d193cml0ZTgoQWRhcHRlciwgMHhhMjMsIENDS1N3aW5nVGFibGVfQ2gxNDIzQVtDQ0tfaW5kZXhdWzFdKTsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4YTI0LCBDQ0tTd2luZ1RhYmxlX0NoMTQyM0FbQ0NLX2luZGV4XVsyXSk7Ci0JCQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweGEyNSwgQ0NLU3dpbmdUYWJsZV9DaDE0MjNBW0NDS19pbmRleF1bM10pOwotCQkJCXJ0d193cml0ZTgoQWRhcHRlciwgMHhhMjYsIENDS1N3aW5nVGFibGVfQ2gxNDIzQVtDQ0tfaW5kZXhdWzRdKTsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4YTI3LCBDQ0tTd2luZ1RhYmxlX0NoMTQyM0FbQ0NLX2luZGV4XVs1XSk7Ci0JCQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweGEyOCwgQ0NLU3dpbmdUYWJsZV9DaDE0MjNBW0NDS19pbmRleF1bNl0pOwotCQkJCXJ0d193cml0ZTgoQWRhcHRlciwgMHhhMjksIENDS1N3aW5nVGFibGVfQ2gxNDIzQVtDQ0tfaW5kZXhdWzddKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4YTIyLCBDQ0tTd2luZ1RhYmxlX0NoMTQyM0FbQ0NLX2luZGV4XVswXSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGEyMywgQ0NLU3dpbmdUYWJsZV9DaDE0MjNBW0NDS19pbmRleF1bMV0pOworCQkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhhMjQsIENDS1N3aW5nVGFibGVfQ2gxNDIzQVtDQ0tfaW5kZXhdWzJdKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4YTI1LCBDQ0tTd2luZ1RhYmxlX0NoMTQyM0FbQ0NLX2luZGV4XVszXSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGEyNiwgQ0NLU3dpbmdUYWJsZV9DaDE0MjNBW0NDS19pbmRleF1bNF0pOworCQkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhhMjcsIENDS1N3aW5nVGFibGVfQ2gxNDIzQVtDQ0tfaW5kZXhdWzVdKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4YTI4LCBDQ0tTd2luZ1RhYmxlX0NoMTQyM0FbQ0NLX2luZGV4XVs2XSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGEyOSwgQ0NLU3dpbmdUYWJsZV9DaDE0MjNBW0NDS19pbmRleF1bN10pOwogCQkJfQogCiAJCQlpZiAoaXMyVCkgewpAQCAtMzA4LDE0ICszMTUsMjUgQEAKIAkJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9YRFR4QUZFLCBiTWFza0g0Qml0cywgdmFsdWUzMik7CiAKIAkJCQkJdmFsdWUzMiA9ICgoWCAqIGVsZV9EKT4+NykmMHgwMTsKLQkJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9FQ0NBVGhyZXNob2xkLCBCSVQyNywgdmFsdWUzMik7CisJCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLAorCQkJCQkJICAgICByT0ZETTBfRUNDQVRocmVzaG9sZCwKKwkJCQkJCSAgICAgQklUKDI3KSwgdmFsdWUzMik7CiAKIAkJCQkJdmFsdWUzMiA9ICgoWSAqIGVsZV9EKT4+NykmMHgwMTsKLQkJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9FQ0NBVGhyZXNob2xkLCBCSVQyNSwgdmFsdWUzMik7CisJCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLAorCQkJCQkJICAgICByT0ZETTBfRUNDQVRocmVzaG9sZCwKKwkJCQkJCSAgICAgQklUKDI1KSwgdmFsdWUzMik7CiAJCQkJfSBlbHNlIHsKLQkJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9YQlR4SVFJbWJhbGFuY2UsIGJNYXNrRFdvcmQsIE9GRE1Td2luZ1RhYmxlMjNBW09GRE1faW5kZXhbMV1dKTsKLQkJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9YRFR4QUZFLCBiTWFza0g0Qml0cywgMHgwMCk7Ci0JCQkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfRUNDQVRocmVzaG9sZCwgQklUMjd8QklUMjUsIDB4MDApOworCQkJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwKKwkJCQkJCSAgICAgck9GRE0wX1hCVHhJUUltYmFsYW5jZSwKKwkJCQkJCSAgICAgYk1hc2tEV29yZCwKKwkJCQkJCSAgICAgT0ZETVN3aW5nVGFibGUyM0FbT0ZETV9pbmRleFsxXV0pOworCQkJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwKKwkJCQkJCSAgICAgck9GRE0wX1hEVHhBRkUsCisJCQkJCQkgICAgIGJNYXNrSDRCaXRzLCAweDAwKTsKKwkJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsCisJCQkJCQkgICAgIHJPRkRNMF9FQ0NBVGhyZXNob2xkLAorCQkJCQkJICAgICBCSVQoMjcpIHwgQklUKDI1KSwgMHgwMCk7CiAJCQkJfQogCQkJfQogCkBAIC00MTAsMTQgKzQyOCwxNCBAQAogCXJlZ0U5QyA9IFBIWV9RdWVyeUJCUmVnKHBBZGFwdGVyLCByVHhfUG93ZXJfQWZ0ZXJfSVFLX0EsIGJNYXNrRFdvcmQpOwogCXJlZ0VBNCA9IFBIWV9RdWVyeUJCUmVnKHBBZGFwdGVyLCByUnhfUG93ZXJfQmVmb3JlX0lRS19BXzIsIGJNYXNrRFdvcmQpOwogCi0JaWYgKCEocmVnRUFDICYgQklUMjgpICYmCisJaWYgKCEocmVnRUFDICYgQklUKDI4KSkgJiYKIAkgICAgKCgocmVnRTk0ICYgMHgwM0ZGMDAwMCk+PjE2KSAhPSAweDE0MikgJiYKIAkgICAgKCgocmVnRTlDICYgMHgwM0ZGMDAwMCk+PjE2KSAhPSAweDQyKSkKIAkJcmVzdWx0IHw9IDB4MDE7CiAJZWxzZQkJCS8qIGlmIFR4IG5vdCBPSywgaWdub3JlIFJ4ICovCiAJCXJldHVybiByZXN1bHQ7CiAKLQlpZiAoIShyZWdFQUMgJiBCSVQyNykgJiYJCS8qIGlmIFR4IGlzIE9LLCBjaGVjayB3aGV0aGVyIFJ4IGlzIE9LICovCisJaWYgKCEocmVnRUFDICYgQklUKDI3KSkgJiYJCS8qIGlmIFR4IGlzIE9LLCBjaGVjayB3aGV0aGVyIFJ4IGlzIE9LICovCiAJICAgICgoKHJlZ0VBNCAmIDB4MDNGRjAwMDApPj4xNikgIT0gMHgxMzIpICYmCiAJICAgICgoKHJlZ0VBQyAmIDB4MDNGRjAwMDApPj4xNikgIT0gMHgzNikpCiAJCXJlc3VsdCB8PSAweDAyOwpAQCAtNDQ1LDE0ICs0NjMsMTQgQEAKIAlyZWdFQzQgPSBQSFlfUXVlcnlCQlJlZyhwQWRhcHRlciwgclJ4X1Bvd2VyX0JlZm9yZV9JUUtfQl8yLCBiTWFza0RXb3JkKTsKIAlyZWdFQ0MgPSBQSFlfUXVlcnlCQlJlZyhwQWRhcHRlciwgclJ4X1Bvd2VyX0FmdGVyX0lRS19CXzIsIGJNYXNrRFdvcmQpOwogCi0JaWYgKCEocmVnRUFDICYgQklUMzEpICYmCisJaWYgKCEocmVnRUFDICYgQklUKDMxKSkgJiYKIAkgICAgKCgocmVnRUI0ICYgMHgwM0ZGMDAwMCk+PjE2KSAhPSAweDE0MikgJiYKIAkgICAgKCgocmVnRUJDICYgMHgwM0ZGMDAwMCk+PjE2KSAhPSAweDQyKSkKIAkJcmVzdWx0IHw9IDB4MDE7CiAJZWxzZQogCQlyZXR1cm4gcmVzdWx0OwogCi0JaWYgKCEocmVnRUFDICYgQklUMzApICYmCisJaWYgKCEocmVnRUFDICYgQklUKDMwKSkgJiYKIAkgICAgKCgocmVnRUM0ICYgMHgwM0ZGMDAwMCk+PjE2KSAhPSAweDEzMikgJiYKIAkgICAgKCgocmVnRUNDICYgMHgwM0ZGMDAwMCk+PjE2KSAhPSAweDM2KSkKIAkJcmVzdWx0IHw9IDB4MDI7CkBAIC01NjQsOSArNTgyLDkgQEAKIAl1MzIgaTsKIAogCWZvciAoaSA9IDAgOyBpIDwgKElRS19NQUNfUkVHX05VTSAtIDEpOyBpKyspIHsKLQkJTUFDQmFja3VwW2ldID0gcnR3X3JlYWQ4KHBBZGFwdGVyLCBNQUNSZWdbaV0pOworCQlNQUNCYWNrdXBbaV0gPSBydGw4NzIzYXVfcmVhZDgocEFkYXB0ZXIsIE1BQ1JlZ1tpXSk7CiAJfQotCU1BQ0JhY2t1cFtpXSA9IHJ0d19yZWFkMzIocEFkYXB0ZXIsIE1BQ1JlZ1tpXSk7CisJTUFDQmFja3VwW2ldID0gcnRsODcyM2F1X3JlYWQzMihwQWRhcHRlciwgTUFDUmVnW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgX1BIWV9SZWxvYWRBRERBUmVnaXN0ZXJzKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHUzMiAqQUREQVJlZywgdTMyICpBRERBQmFja3VwLCB1MzIgUmVnaWVzdGVyTnVtKQpAQCAtNTgyLDEwICs2MDAsMTAgQEAKIHsKIAl1MzIgaTsKIAotCWZvciAoaSA9IDAgOyBpIDwgKElRS19NQUNfUkVHX05VTSAtIDEpOyBpKyspIHsKLQkJcnR3X3dyaXRlOChwQWRhcHRlciwgTUFDUmVnW2ldLCAodTgpTUFDQmFja3VwW2ldKTsKLQl9Ci0JcnR3X3dyaXRlMzIocEFkYXB0ZXIsIE1BQ1JlZ1tpXSwgTUFDQmFja3VwW2ldKTsKKwlmb3IgKGkgPSAwIDsgaSA8IChJUUtfTUFDX1JFR19OVU0gLSAxKTsgaSsrKQorCQlydGw4NzIzYXVfd3JpdGU4KHBBZGFwdGVyLCBNQUNSZWdbaV0sICh1OClNQUNCYWNrdXBbaV0pOworCisJcnRsODcyM2F1X3dyaXRlMzIocEFkYXB0ZXIsIE1BQ1JlZ1tpXSwgTUFDQmFja3VwW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgX1BIWV9QYXRoQUREQU9uKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHUzMiAqQUREQVJlZywgYm9vbCBpc1BhdGhBT24sIGJvb2wgaXMyVCkKQEAgLTYwOSwxMiArNjI3LDEzIEBACiB7CiAJdTMyIGkgPSAwOwogCi0JcnR3X3dyaXRlOChwQWRhcHRlciwgTUFDUmVnW2ldLCAweDNGKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBBZGFwdGVyLCBNQUNSZWdbaV0sIDB4M0YpOwogCiAJZm9yIChpID0gMSA7IGkgPCAoSVFLX01BQ19SRUdfTlVNIC0gMSk7IGkrKykgewotCQlydHdfd3JpdGU4KHBBZGFwdGVyLCBNQUNSZWdbaV0sICh1OCkoTUFDQmFja3VwW2ldJih+QklUMykpKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgTUFDUmVnW2ldLAorCQkJCSAodTgpKE1BQ0JhY2t1cFtpXSAmIH5CSVQoMykpKTsKIAl9Ci0JcnR3X3dyaXRlOChwQWRhcHRlciwgTUFDUmVnW2ldLCAodTgpKE1BQ0JhY2t1cFtpXSYofkJJVDUpKSk7CisJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgTUFDUmVnW2ldLCAodTgpKE1BQ0JhY2t1cFtpXSAmIH5CSVQoNSkpKTsKIH0KIAogc3RhdGljIHZvaWQgX1BIWV9QYXRoQVN0YW5kQnkoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlcikKQEAgLTczNywyMSArNzU2LDIzIEBACiAJX1BIWV9QYXRoQUREQU9uKHBBZGFwdGVyLCBBRERBX1JFRywgdHJ1ZSwgaXMyVCk7CiAKIAlpZiAodCA9PSAwKQotCQlwZG1wcml2LT5iUmZQaUVuYWJsZSA9ICh1OClQSFlfUXVlcnlCQlJlZyhwQWRhcHRlciwgckZQR0EwX1hBX0hTU0lQYXJhbWV0ZXIxLCBCSVQoOCkpOworCQlwZG1wcml2LT5iUmZQaUVuYWJsZSA9ICh1OCkKKwkJCVBIWV9RdWVyeUJCUmVnKHBBZGFwdGVyLCByRlBHQTBfWEFfSFNTSVBhcmFtZXRlcjEsCisJCQkJICAgICAgIEJJVCg4KSk7CiAKIAlpZiAoIXBkbXByaXYtPmJSZlBpRW5hYmxlKSB7CiAJCS8qICBTd2l0Y2ggQkIgdG8gUEkgbW9kZSB0byBkbyBJUSBDYWxpYnJhdGlvbi4gKi8KIAkJX1BIWV9QSU1vZGVTd2l0Y2gocEFkYXB0ZXIsIHRydWUpOwogCX0KIAotCVBIWV9TZXRCQlJlZyhwQWRhcHRlciwgckZQR0EwX1JGTU9ELCBCSVQyNCwgMHgwMCk7CisJUEhZX1NldEJCUmVnKHBBZGFwdGVyLCByRlBHQTBfUkZNT0QsIEJJVCgyNCksIDB4MDApOwogCVBIWV9TZXRCQlJlZyhwQWRhcHRlciwgck9GRE0wX1RSeFBhdGhFbmFibGUsIGJNYXNrRFdvcmQsIDB4MDNhMDU2MDApOwogCVBIWV9TZXRCQlJlZyhwQWRhcHRlciwgck9GRE0wX1RSTXV4UGFyLCBiTWFza0RXb3JkLCAweDAwMDgwMGU0KTsKIAlQSFlfU2V0QkJSZWcocEFkYXB0ZXIsIHJGUEdBMF9YQ0RfUkZJbnRlcmZhY2VTVywgYk1hc2tEV29yZCwgMHgyMjIwNDAwMCk7Ci0JUEhZX1NldEJCUmVnKHBBZGFwdGVyLCByRlBHQTBfWEFCX1JGSW50ZXJmYWNlU1csIEJJVDEwLCAweDAxKTsKLQlQSFlfU2V0QkJSZWcocEFkYXB0ZXIsIHJGUEdBMF9YQUJfUkZJbnRlcmZhY2VTVywgQklUMjYsIDB4MDEpOwotCVBIWV9TZXRCQlJlZyhwQWRhcHRlciwgckZQR0EwX1hBX1JGSW50ZXJmYWNlT0UsIEJJVDEwLCAweDAwKTsKLQlQSFlfU2V0QkJSZWcocEFkYXB0ZXIsIHJGUEdBMF9YQl9SRkludGVyZmFjZU9FLCBCSVQxMCwgMHgwMCk7CisJUEhZX1NldEJCUmVnKHBBZGFwdGVyLCByRlBHQTBfWEFCX1JGSW50ZXJmYWNlU1csIEJJVCgxMCksIDB4MDEpOworCVBIWV9TZXRCQlJlZyhwQWRhcHRlciwgckZQR0EwX1hBQl9SRkludGVyZmFjZVNXLCBCSVQoMjYpLCAweDAxKTsKKwlQSFlfU2V0QkJSZWcocEFkYXB0ZXIsIHJGUEdBMF9YQV9SRkludGVyZmFjZU9FLCBCSVQoMTApLCAweDAwKTsKKwlQSFlfU2V0QkJSZWcocEFkYXB0ZXIsIHJGUEdBMF9YQl9SRkludGVyZmFjZU9FLCBCSVQoMTApLCAweDAwKTsKIAogCWlmIChpczJUKSB7CiAJCVBIWV9TZXRCQlJlZyhwQWRhcHRlciwgckZQR0EwX1hBX0xTU0lQYXJhbWV0ZXIsIGJNYXNrRFdvcmQsIDB4MDAwMTAwMDApOwpAQCAtODU5LDEyICs4ODAsMTcgQEAKIAl1MzIgUkZfQW1vZGUgPSAwLCBSRl9CbW9kZSA9IDAsIExDX0NhbDsKIAogCS8qIENoZWNrIGNvbnRpbnVvdXMgVFggYW5kIFBhY2tldCBUWCAqLwotCXRtcFJlZyA9IHJ0d19yZWFkOChwQWRhcHRlciwgMHhkMDMpOworCXRtcFJlZyA9IHJ0bDg3MjNhdV9yZWFkOChwQWRhcHRlciwgMHhkMDMpOwogCi0JaWYgKCh0bXBSZWcmMHg3MCkgIT0gMCkJCQkvKiBEZWFsIHdpdGggY29udGlzdW91cyBUWCBjYXNlICovCi0JCXJ0d193cml0ZTgocEFkYXB0ZXIsIDB4ZDAzLCB0bXBSZWcmMHg4Rik7CS8qIGRpc2FibGUgYWxsIGNvbnRpbnVvdXMgVFggKi8KLQllbHNlCQkJCQkJCS8qICBEZWFsIHdpdGggUGFja2V0IFRYIGNhc2UgKi8KLQkJcnR3X3dyaXRlOChwQWRhcHRlciwgUkVHX1RYUEFVU0UsIDB4RkYpOwkJCS8qICBibG9jayBhbGwgcXVldWVzICovCisJaWYgKCh0bXBSZWcmMHg3MCkgIT0gMCkgeworCQkvKiBEZWFsIHdpdGggY29udGlzdW91cyBUWCBjYXNlICovCisJCS8qIGRpc2FibGUgYWxsIGNvbnRpbnVvdXMgVFggKi8KKwkJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgMHhkMDMsIHRtcFJlZyYweDhGKTsKKwl9IGVsc2UgeworCQkvKiAgRGVhbCB3aXRoIFBhY2tldCBUWCBjYXNlICovCisJCS8qICBibG9jayBhbGwgcXVldWVzICovCisJCXJ0bDg3MjNhdV93cml0ZTgocEFkYXB0ZXIsIFJFR19UWFBBVVNFLCAweEZGKTsKKwl9CiAKIAlpZiAoKHRtcFJlZyYweDcwKSAhPSAwKSB7CiAJCS8qIDEuIFJlYWQgb3JpZ2luYWwgUkYgbW9kZSAqLwpAQCAtODk1LDE1ICs5MjEsMTQgQEAKIAkvKiBSZXN0b3JlIG9yaWdpbmFsIHNpdHVhdGlvbiAqLwogCWlmICgodG1wUmVnJjB4NzApICE9IDApIHsJLyogRGVhbCB3aXRoIGNvbnR1b3VzIFRYIGNhc2UgICovCiAJCS8qIFBhdGgtQSAqLwotCQlydHdfd3JpdGU4KHBBZGFwdGVyLCAweGQwMywgdG1wUmVnKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgMHhkMDMsIHRtcFJlZyk7CiAJCVBIWV9TZXRSRlJlZyhwQWRhcHRlciwgUkZfUEFUSF9BLCBSRl9BQywgYk1hc2sxMkJpdHMsIFJGX0Ftb2RlKTsKIAogCQkvKiBQYXRoLUIgKi8KIAkJaWYgKGlzMlQpCiAJCQlQSFlfU2V0UkZSZWcocEFkYXB0ZXIsIFJGX1BBVEhfQiwgUkZfQUMsIGJNYXNrMTJCaXRzLCBSRl9CbW9kZSk7Ci0JfSBlbHNlIHsgLyogIERlYWwgd2l0aCBQYWNrZXQgVFggY2FzZSAqLwotCQlydHdfd3JpdGU4KHBBZGFwdGVyLCBSRUdfVFhQQVVTRSwgMHgwMCk7Ci0JfQorCX0gZWxzZSAvKiAgRGVhbCB3aXRoIFBhY2tldCBUWCBjYXNlICovCisJCXJ0bDg3MjNhdV93cml0ZTgocEFkYXB0ZXIsIFJFR19UWFBBVVNFLCAweDAwKTsKIH0KIAogLyogQW5hbG9nIFByZS1kaXN0b3J0aW9uIGNhbGlicmF0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9IYWxQd3JTZXFDbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL0hhbFB3clNlcUNtZC5jCmluZGV4IDRmNmI0YjcuLjFkYTRlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL0hhbFB3clNlcUNtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL0hhbFB3clNlcUNtZC5jCkBAIC0zMCw2ICszMCw3IEBACiAKIC0tKi8KICNpbmNsdWRlIDxIYWxQd3JTZXFDbWQuaD4KKyNpbmNsdWRlIDx1c2Jfb3BzX2xpbnV4Lmg+CiAKIC8qICAqLwogLyoJRGVzY3JpcHRpb246ICovCkBAIC04OSwxNCArOTAsMTQgQEAKIAkJCQlvZmZzZXQgPSBHRVRfUFdSX0NGR19PRkZTRVQoUHdyQ2ZnQ21kKTsKIAogCQkJCS8qICBSZWFkIHRoZSB2YWx1ZSBmcm9tIHN5c3RlbSByZWdpc3RlciAqLwotCQkJCXZhbHVlID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBvZmZzZXQpOworCQkJCXZhbHVlID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBvZmZzZXQpOwogCiAJCQkJdmFsdWUgJj0gfihHRVRfUFdSX0NGR19NQVNLKFB3ckNmZ0NtZCkpOwogCQkJCXZhbHVlIHw9IChHRVRfUFdSX0NGR19WQUxVRShQd3JDZmdDbWQpICYKIAkJCQkJICBHRVRfUFdSX0NGR19NQVNLKFB3ckNmZ0NtZCkpOwogCiAJCQkJLyogIFdyaXRlIHRoZSB2YWx1ZSBiYWNrIHRvIHN5dGVtIHJlZ2lzdGVyICovCi0JCQkJcnR3X3dyaXRlOChwYWRhcHRlciwgb2Zmc2V0LCB2YWx1ZSk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgb2Zmc2V0LCB2YWx1ZSk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUFdSX0NNRF9QT0xMSU5HOgpAQCAtMTA3LDcgKzEwOCw4IEBACiAJCQkJYlBvbGxpbmdCaXQgPSBmYWxzZTsKIAkJCQlvZmZzZXQgPSBHRVRfUFdSX0NGR19PRkZTRVQoUHdyQ2ZnQ21kKTsKIAkJCQlkbyB7Ci0JCQkJCXZhbHVlID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBvZmZzZXQpOworCQkJCQl2YWx1ZSA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwKKwkJCQkJCQkJb2Zmc2V0KTsKIAogCQkJCQl2YWx1ZSAmPSBHRVRfUFdSX0NGR19NQVNLKFB3ckNmZ0NtZCk7CiAJCQkJCWlmICh2YWx1ZSA9PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvaGFsX2NvbS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvaGFsX2NvbS5jCmluZGV4IDA2NDBmMzUuLjlmYmEwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL2hhbF9jb20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9oYWxfY29tLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxoYWxfaW50Zi5oPgogI2luY2x1ZGUgPGhhbF9jb20uaD4KICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KKyNpbmNsdWRlIDx1c2Jfb3BzX2xpbnV4Lmg+CiAKICNkZWZpbmUgX0hBTF9JTklUX0NfCiAKQEAgLTIyMiwxMCArMjIzLDEwIEBACiAJREJHXzg3MjNBKCJIV19WQVJfQkFTSUNfUkFURTogQnJhdGVDZmcoJSN4KVxuIiwgYnJhdGVfY2ZnKTsKIAogCS8qICBTZXQgUlJTUiByYXRlIHRhYmxlLiAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19SUlNSLCBicmF0ZV9jZmcgJiAweGZmKTsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlJTUiArIDEsIChicmF0ZV9jZmcgPj4gOCkgJiAweGZmKTsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlJTUiArIDIsCi0JCSAgIHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX1JSU1IgKyAyKSAmIDB4ZjApOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19SUlNSLCBicmF0ZV9jZmcgJiAweGZmKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlJTUiArIDEsIChicmF0ZV9jZmcgPj4gOCkgJiAweGZmKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlJTUiArIDIsCisJCQkgcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfUlJTUiArIDIpICYgMHhmMCk7CiAKIAlyYXRlX2luZGV4ID0gMDsKIAkvKiAgU2V0IFJUUyBpbml0aWFsIHJhdGUgKi8KQEAgLTIzNCw3ICsyMzUsNyBAQAogCQlyYXRlX2luZGV4Kys7CiAJfQogCQkvKiAgWml2IC0gQ2hlY2sgKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfSU5JUlRTX1JBVEVfU0VMLCByYXRlX2luZGV4KTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfSU5JUlRTX1JBVEVfU0VMLCByYXRlX2luZGV4KTsKIAogCXJldHVybjsKIH0KQEAgLTM0NCwxMiArMzQ1LDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIGhhbF9pbml0X21hY2FkZHIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQotewotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKGFkYXB0ZXIsIEhXX1ZBUl9NQUNfQUREUiwKLQkJCSAgYWRhcHRlci0+ZWVwcm9tcHJpdi5tYWNfYWRkcik7Ci19Ci0KIC8qCiAqIEMySCBldmVudCBmb3JtYXQ6CiAqIEZpZWxkCSBUUklHR0VSCQlDT05URU5UCSAgIENNRF9TRVEJQ01EX0xFTgkJIENNRF9JRApAQCAtMzU4LDEyICszNTMsMTIgQEAKIAogdm9pZCBjMmhfZXZ0X2NsZWFyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlydHdfd3JpdGU4KGFkYXB0ZXIsIFJFR19DMkhFVlRfQ0xFQVIsIEMySF9FVlRfSE9TVF9DTE9TRSk7CisJcnRsODcyM2F1X3dyaXRlOChhZGFwdGVyLCBSRUdfQzJIRVZUX0NMRUFSLCBDMkhfRVZUX0hPU1RfQ0xPU0UpOwogfQogCi1zMzIgYzJoX2V2dF9yZWFkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKmJ1ZikKK2ludCBjMmhfZXZ0X3JlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqYnVmKQogewotCXMzMiByZXQgPSBfRkFJTDsKKwlpbnQgcmV0ID0gX0ZBSUw7CiAJc3RydWN0IGMyaF9ldnRfaGRyICpjMmhfZXZ0OwogCWludCBpOwogCXU4IHRyaWdnZXI7CkBAIC0zNzEsNyArMzY2LDcgQEAKIAlpZiAoYnVmID09IE5VTEwpCiAJCWdvdG8gZXhpdDsKIAotCXRyaWdnZXIgPSBydHdfcmVhZDgoYWRhcHRlciwgUkVHX0MySEVWVF9DTEVBUik7CisJdHJpZ2dlciA9IHJ0bDg3MjNhdV9yZWFkOChhZGFwdGVyLCBSRUdfQzJIRVZUX0NMRUFSKTsKIAogCWlmICh0cmlnZ2VyID09IEMySF9FVlRfSE9TVF9DTE9TRSkKIAkJZ290byBleGl0OwkvKiBOb3QgcmVhZHkgKi8KQEAgLTM4Miw4ICszNzcsOCBAQAogCiAJbWVtc2V0KGMyaF9ldnQsIDAsIDE2KTsKIAotCSpidWYgPSBydHdfcmVhZDgoYWRhcHRlciwgUkVHX0MySEVWVF9NU0dfTk9STUFMKTsKLQkqKGJ1ZiArIDEpID0gcnR3X3JlYWQ4KGFkYXB0ZXIsIFJFR19DMkhFVlRfTVNHX05PUk1BTCArIDEpOworCSpidWYgPSBydGw4NzIzYXVfcmVhZDgoYWRhcHRlciwgUkVHX0MySEVWVF9NU0dfTk9STUFMKTsKKwkqKGJ1ZiArIDEpID0gcnRsODcyM2F1X3JlYWQ4KGFkYXB0ZXIsIFJFR19DMkhFVlRfTVNHX05PUk1BTCArIDEpOwogCiAJUlRfUFJJTlRfREFUQShfbW9kdWxlX2hhbF9pbml0X2NfLCBfZHJ2X2luZm9fLCAiYzJoX2V2dF9yZWFkMjNhKCk6ICIsCiAJCSAgICAgICZjMmhfZXZ0LCBzaXplb2YoYzJoX2V2dCkpOwpAQCAtMzk2LDcgKzM5MSw3IEBACiAKIAkvKiBSZWFkIHRoZSBjb250ZW50ICovCiAJZm9yIChpID0gMDsgaSA8IGMyaF9ldnQtPnBsZW47IGkrKykKLQkJYzJoX2V2dC0+cGF5bG9hZFtpXSA9IHJ0d19yZWFkOChhZGFwdGVyLAorCQljMmhfZXZ0LT5wYXlsb2FkW2ldID0gcnRsODcyM2F1X3JlYWQ4KGFkYXB0ZXIsCiAJCQkJCQlSRUdfQzJIRVZUX01TR19OT1JNQUwgKwogCQkJCQkJc2l6ZW9mKCpjMmhfZXZ0KSArIGkpOwogCkBAIC00MjQsMTUgKzQxOSwxNCBAQAogCiAJaWYgKE1pblNwYWNpbmdUb1NldCA8PSA3KSB7CiAJCXN3aXRjaCAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtKSB7Ci0JCWNhc2UgX05PX1BSSVZBQ1lfOgotCQljYXNlIF9BRVNfOgorCQljYXNlIDA6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJCVNlY01pblNwYWNlID0gMDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgX1dFUDQwXzoKLQkJY2FzZSBfV0VQMTA0XzoKLQkJY2FzZSBfVEtJUF86Ci0JCWNhc2UgX1RLSVBfV1RNSUNfOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQkJU2VjTWluU3BhY2UgPSA2OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NDcsOSArNDQxLDkgQEAKIAkJICAgKCJTZXQgSFdfVkFSX0FNUERVX01JTl9TUEFDRTogJSN4XG4iLAogCQkgICBwYWRhcHRlci0+TWdudEluZm8uTWluU3BhY2VDZmcpKTsgKi8KIAkJTWluU3BhY2luZ1RvU2V0IHw9Ci0JCQlydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19BTVBEVV9NSU5fU1BBQ0UpICYgMHhmODsKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0FNUERVX01JTl9TUEFDRSwKLQkJCSAgIE1pblNwYWNpbmdUb1NldCk7CisJCQlydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19BTVBEVV9NSU5fU1BBQ0UpICYgMHhmODsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0FNUERVX01JTl9TUEFDRSwKKwkJCQkgTWluU3BhY2luZ1RvU2V0KTsKIAl9CiB9CiAKQEAgLTQ2MSwxNSArNDU1LDEyIEBACiAJdTggaW5kZXggPSAwOwogCiAJcFJlZ1RvU2V0ID0gUmVnVG9TZXRfTm9ybWFsOwkvKiAgMHhiOTcyYTg0MTsgKi8KLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQlpZiAoKEJUX0lzQnREaXNhYmxlZChwYWRhcHRlcikgPT0gZmFsc2UpICYmCi0JICAgIChCVF8xQW50KHBhZGFwdGVyKSA9PSB0cnVlKSkgeworCisJaWYgKHJ0bDg3MjNhX0JUX2VuYWJsZWQocGFkYXB0ZXIpICYmCisJICAgIHJ0bDg3MjNhX0JUX3VzaW5nX2FudGVubmFfMShwYWRhcHRlcikpCiAJCU1heEFnZ051bSA9IDB4ODsKLQl9IGVsc2UKLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUICovCi0JeworCWVsc2UKIAkJTWF4QWdnTnVtID0gMHhGOwotCX0KIAogCWlmIChGYWN0b3JUb1NldCA8PSAzKSB7CiAJCUZhY3RvclRvU2V0ID0gKDEgPDwgKEZhY3RvclRvU2V0ICsgMikpOwpAQCAtNDg1LDggKzQ3Niw4IEBACiAJCQkJcFJlZ1RvU2V0W2luZGV4XSA9IChwUmVnVG9TZXRbaW5kZXhdICYgMHhmMCkgfAogCQkJCQlGYWN0b3JUb1NldDsKIAotCQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0FHR0xFTl9MTVQgKyBpbmRleCwKLQkJCQkgICBwUmVnVG9TZXRbaW5kZXhdKTsKKwkJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19BR0dMRU5fTE1UICsgaW5kZXgsCisJCQkJCSBwUmVnVG9TZXRbaW5kZXhdKTsKIAkJfQogCiAJCS8qIFJUX1RSQUNFKENPTVBfTUxNRSwgREJHX0xPVUQsCkBAIC01MTIsMjUgKzUwMywyNSBAQAogCX0KIAogCURCR184NzIzQSgiW0hXX1ZBUl9BQ01fQ1RSTF0gV3JpdGUgMHglMDJYXG4iLCBod2N0cmwpOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19BQ01IV0NUUkwsIGh3Y3RybCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0FDTUhXQ1RSTCwgaHdjdHJsKTsKIH0KIAogdm9pZCBydGw4NzIzYV9zZXRfbWVkaWFfc3RhdHVzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHN0YXR1cykKIHsKIAl1OCB2YWw4OwogCi0JdmFsOCA9IHJ0d19yZWFkOChwYWRhcHRlciwgTVNSKSAmIDB4MGM7CisJdmFsOCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgTVNSKSAmIDB4MGM7CiAJdmFsOCB8PSBzdGF0dXM7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgTVNSLCB2YWw4KTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBNU1IsIHZhbDgpOwogfQogCiB2b2lkIHJ0bDg3MjNhX3NldF9tZWRpYV9zdGF0dXMxKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHN0YXR1cykKIHsKIAl1OCB2YWw4OwogCi0JdmFsOCA9IHJ0d19yZWFkOChwYWRhcHRlciwgTVNSKSAmIDB4MDM7CisJdmFsOCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgTVNSKSAmIDB4MDM7CiAJdmFsOCB8PSBzdGF0dXMgPDwgMjsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBNU1IsIHZhbDgpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIE1TUiwgdmFsOCk7CiB9CiAKIHZvaWQgcnRsODcyM2Ffc2V0X2Jjbl9mdW5jKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhbCkKQEAgLTU0NCwxMiArNTM1LDEyIEBACiB2b2lkIHJ0bDg3MjNhX2NoZWNrX2Jzc2lkKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhbCkKIHsKIAl1MzIgdmFsMzI7Ci0JdmFsMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKTsKKwl2YWwzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19SQ1IpOwogCWlmICh2YWwpCiAJCXZhbDMyIHw9IFJDUl9DQlNTSURfREFUQSB8IFJDUl9DQlNTSURfQkNOOwogCWVsc2UKIAkJdmFsMzIgJj0gfihSQ1JfQ0JTU0lEX0RBVEEgfCBSQ1JfQ0JTU0lEX0JDTik7Ci0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SQ1IsIHZhbDMyKTsKKwlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JDUiwgdmFsMzIpOwogfQogCiB2b2lkIHJ0bDg3MjNhX21sbWVfc2l0ZXN1cnZleShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBmbGFnKQpAQCAtNTU5LDExICs1NTAsMTEgQEAKIAogCQkvKiAgY29uZmlnIFJDUiB0byByZWNlaXZlIGRpZmZlcmVudCBCU1NJRCAmIG5vdAogCQkgICAgdG8gcmVjZWl2ZSBkYXRhIGZyYW1lICovCi0JCXYzMiA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIFJFR19SQ1IpOworCQl2MzIgPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKTsKIAkJdjMyICY9IH4oUkNSX0NCU1NJRF9CQ04pOwotCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JDUiwgdjMyKTsKKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SQ1IsIHYzMik7CiAJCS8qICByZWplY3QgYWxsIGRhdGEgZnJhbWUgKi8KLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SWEZMVE1BUDIsIDApOworCQlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX1JYRkxUTUFQMiwgMCk7CiAKIAkJLyogIGRpc2FibGUgdXBkYXRlIFRTRiAqLwogCQlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCBESVNfVFNGX1VEVCwgMCk7CkBAIC01NzksMzUgKzU3MCwzNCBAQAogCQkgICAgKChwbWxtZWluZm8tPnN0YXRlICYgMHgwMykgPT0gV0lGSV9GV19BREhPQ19TVEFURSkgfHwKIAkJICAgICgocG1sbWVpbmZvLT5zdGF0ZSAmIDB4MDMpID09IFdJRklfRldfQVBfU1RBVEUpKSB7CiAJCQkvKiAgZW5hYmxlIHRvIHJ4IGRhdGEgZnJhbWUgKi8KLQkJCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfUlhGTFRNQVAyLCAweEZGRkYpOworCQkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SWEZMVE1BUDIsIDB4RkZGRik7CiAKIAkJCS8qICBlbmFibGUgdXBkYXRlIFRTRiAqLwogCQkJU2V0QmNuQ3RybFJlZzIzYShwYWRhcHRlciwgMCwgRElTX1RTRl9VRFQpOwogCQl9CiAKLQkJdjMyID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX1JDUik7CisJCXYzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19SQ1IpOwogCQl2MzIgfD0gUkNSX0NCU1NJRF9CQ047Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfUkNSLCB2MzIpOworCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JDUiwgdjMyKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQlCVF9XaWZpU2Nhbk5vdGlmeShwYWRhcHRlciwgZmxhZyA/IHRydWUgOiBmYWxzZSk7Ci0jZW5kaWYKKwlydGw4NzIzYV9CVF93aWZpc2Nhbl9ub3RpZnkocGFkYXB0ZXIsIGZsYWcgPyB0cnVlIDogZmFsc2UpOwogfQogCiB2b2lkIHJ0bDg3MjNhX29uX3Jjcl9hbShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfUkNSLCBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKSB8IFJDUl9BTSk7Ci0JREJHXzg3MjNBKCIlcywgJWQsIFJDUiA9ICV4IFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywKLQkJICBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKSk7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SQ1IsCisJCSAgICBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKSB8IFJDUl9BTSk7CisJREJHXzg3MjNBKCIlcywgJWQsIFJDUiA9ICV4IFxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQkgIHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19SQ1IpKTsKIH0KIAogdm9pZCBydGw4NzIzYV9vZmZfcmNyX2FtKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SQ1IsCi0JCSAgICBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKSAmICh+UkNSX0FNKSk7Ci0JREJHXzg3MjNBKCIlcywgJWQsIFJDUiA9ICV4IFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywKLQkJICBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKSk7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SQ1IsCisJCSAgICBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKSAmICh+UkNSX0FNKSk7CisJREJHXzg3MjNBKCIlcywgJWQsIFJDUiA9ICV4IFxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQkgIHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19SQ1IpKTsKIH0KIAogdm9pZCBydGw4NzIzYV9zZXRfc2xvdF90aW1lKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHNsb3R0aW1lKQpAQCAtNjE2LDcgKzYwNiw3IEBACiAJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19TTE9ULCBzbG90dGltZSk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1NMT1QsIHNsb3R0aW1lKTsKIAogCWlmIChwbWxtZWluZm8tPldNTV9lbmFibGUgPT0gMCkgewogCQlpZiAocG1sbWVleHQtPmN1cl93aXJlbGVzc19tb2RlID09IFdJUkVMRVNTXzExQikKQEAgLTYyNywxMCArNjE3LDEwIEBACiAJCXUxYkFJRlMgPSBhU2lmc1RpbWUgKyAoMiAqIHBtbG1laW5mby0+c2xvdFRpbWUpOwogCiAJCS8qICA8Um9nZXJfRVhQPiBUZW1wb3JhcnkgcmVtb3ZlZCwgMjAwOC4wNi4yMC4gKi8KLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0VEQ0FfVk9fUEFSQU0sIHUxYkFJRlMpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRURDQV9WSV9QQVJBTSwgdTFiQUlGUyk7Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19FRENBX0JFX1BBUkFNLCB1MWJBSUZTKTsKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0VEQ0FfQktfUEFSQU0sIHUxYkFJRlMpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRURDQV9WT19QQVJBTSwgdTFiQUlGUyk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19FRENBX1ZJX1BBUkFNLCB1MWJBSUZTKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0VEQ0FfQkVfUEFSQU0sIHUxYkFJRlMpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRURDQV9CS19QQVJBTSwgdTFiQUlGUyk7CiAJfQogfQogCkBAIC02NDUsMTIgKzYzNSwxMiBAQAogCS8qIHJlZ1RtcCA9IDA7ICovCiAJaWYgKGJTaG9ydFByZWFtYmxlKQogCQlyZWdUbXAgfD0gMHg4MDsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlJTUiArIDIsIHJlZ1RtcCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1JSU1IgKyAyLCByZWdUbXApOwogfQogCiB2b2lkIHJ0bDg3MjNhX3NldF9zZWNfY2ZnKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHNlYykKIHsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU0VDQ0ZHLCBzZWMpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19TRUNDRkcsIHNlYyk7CiB9CiAKIHZvaWQgcnRsODcyM2FfY2FtX2VtcHR5X2VudHJ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHVjSW5kZXgpCkBAIC02NzQsMjkgKzY2NCw1NCBAQAogCQl1bENvbW1hbmQgPSB1bENvbW1hbmQgfCBDQU1fUE9MTElOSUcgfCBDQU1fV1JJVEU7CiAJCS8qICB3cml0ZSBjb250ZW50IDAgaXMgZXF1YWxsIHRvIG1hcmsgaW52YWxpZCAqLwogCQkvKiBkZWxheV9tcyg0MCk7ICovCi0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBXQ0FNSSwgdWxDb250ZW50KTsKKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFdDQU1JLCB1bENvbnRlbnQpOwogCQkvKiBSVF9UUkFDRShDT01QX1NFQywgREJHX0xPVUQsCi0JCSAgICgiQ0FNX2VtcHR5X2VudHJ5MjNhKCk6IFdSSVRFIEE0OiAlbHggXG4iLCB1bENvbnRlbnQpKTsqLworCQkgICAoInJ0bDg3MjNhX2NhbV9lbXB0eV9lbnRyeSgpOiBXUklURSBBNDogJWx4IFxuIiwKKwkJICAgdWxDb250ZW50KSk7Ki8KIAkJLyogZGVsYXlfbXMoNDApOyAqLwotCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUldDQU0sIHVsQ29tbWFuZCk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBSV0NBTSwgdWxDb21tYW5kKTsKIAkJLyogUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19MT1VELAotCQkgICAoIkNBTV9lbXB0eV9lbnRyeTIzYSgpOiBXUklURSBBMDogJWx4IFxuIiwgdWxDb21tYW5kKSk7Ki8KKwkJICAgKCJydGw4NzIzYV9jYW1fZW1wdHlfZW50cnkoKTogV1JJVEUgQTA6ICVseCBcbiIsCisJCSAgIHVsQ29tbWFuZCkpOyovCiAJfQogfQogCiB2b2lkIHJ0bDg3MjNhX2NhbV9pbnZhbGlkX2FsbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSV0NBTSwgQklUKDMxKSB8IEJJVCgzMCkpOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBSV0NBTSwgQklUKDMxKSB8IEJJVCgzMCkpOwogfQogCi12b2lkIHJ0bDg3MjNhX2NhbV93cml0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgdmFsMSwgdTMyIHZhbDIpCit2b2lkIHJ0bDg3MjNhX2NhbV93cml0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJdTggZW50cnksIHUxNiBjdHJsLCBjb25zdCB1OCAqbWFjLCBjb25zdCB1OCAqa2V5KQogewogCXUzMiBjbWQ7CisJdW5zaWduZWQgaW50IGksIHZhbCwgYWRkcjsKKwlpbnQgajsKIAotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBXQ0FNSSwgdmFsMSk7CisJYWRkciA9IGVudHJ5IDw8IDM7CiAKLQljbWQgPSBDQU1fUE9MTElOSUcgfCBDQU1fV1JJVEUgfCB2YWwyOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSV0NBTSwgY21kKTsKKwlmb3IgKGogPSA1OyBqID49IDA7IGotLSkgeworCQlzd2l0Y2ggKGopIHsKKwkJY2FzZSAwOgorCQkJdmFsID0gY3RybCB8IChtYWNbMF0gPDwgMTYpIHwgKG1hY1sxXSA8PCAyNCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdmFsID0gbWFjWzJdIHwgKG1hY1szXSA8PCA4KSB8CisJCQkJKG1hY1s0XSA8PCAxNikgfCAobWFjWzVdIDw8IDI0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaSA9IChqIC0gMikgPDwgMjsKKwkJCXZhbCA9IGtleVtpXSB8IChrZXlbaSsxXSA8PCA4KSB8CisJCQkJKGtleVtpKzJdIDw8IDE2KSB8IChrZXlbaSszXSA8PCAyNCk7CisJCQlicmVhazsKKwkJfQorCisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBXQ0FNSSwgdmFsKTsKKwkJY21kID0gQ0FNX1BPTExJTklHIHwgQ0FNX1dSSVRFIHwgKGFkZHIgKyBqKTsKKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJXQ0FNLCBjbWQpOworCisJCS8qIERCR184NzIzQSgiJXMgPT4gY2FtIHdyaXRlOiAleCwgJXhcbiIsIF9fZnVuY19fLCBjbWQsIHZhbCk7Ki8KKwl9CiB9CiAKIHZvaWQgcnRsODcyM2FfZmlmb19jbGVhbnVwKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCkBAIC03MDgsMjAgKzcyMywyMSBAQAogCXU4IHRyeWNudCA9IDEwMDsKIAogCS8qICBwYXVzZSB0eCAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19UWFBBVVNFLCAweGZmKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVFhQQVVTRSwgMHhmZik7CiAKIAkvKiAga2VlcCBzbiAqLwotCXBhZGFwdGVyLT54bWl0cHJpdi5ucW9zX3NzbiA9IHJ0d19yZWFkMTYocGFkYXB0ZXIsIFJFR19OUU9TX1NFUSk7CisJcGFkYXB0ZXItPnhtaXRwcml2Lm5xb3Nfc3NuID0gcnRsODcyM2F1X3JlYWQxNihwYWRhcHRlciwgUkVHX05RT1NfU0VRKTsKIAogCWlmIChwd3Jwcml2LT5ia2VlcGZ3YWxpdmUgIT0gdHJ1ZSkgewogCQl1MzIgdjMyOwogCiAJCS8qICBSWCBETUEgc3RvcCAqLwotCQl2MzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUlhQS1RfTlVNKTsKKwkJdjMyID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX1JYUEtUX05VTSk7CiAJCXYzMiB8PSBSV19SRUxFQVNFX0VOOwotCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JYUEtUX05VTSwgdjMyKTsKKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SWFBLVF9OVU0sIHYzMik7CiAJCWRvIHsKLQkJCXYzMiA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIFJFR19SWFBLVF9OVU0pICYgUlhETUFfSURMRTsKKwkJCXYzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsCisJCQkJCSAgICAgICBSRUdfUlhQS1RfTlVNKSAmIFJYRE1BX0lETEU7CiAJCQlpZiAoIXYzMikKIAkJCQlicmVhazsKIAkJfSB3aGlsZSAodHJ5Y250LS0pOwpAQCAtNzMwLDM2ICs3NDYsMzIgQEAKIAkJfQogCiAJCS8qICBSUVBOIExvYWQgMCAqLwotCQlydHdfd3JpdGUxNihwYWRhcHRlciwgUkVHX1JRUE5fTlBRLCAwKTsKLQkJcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SUVBOLCAweDgwMDAwMDAwKTsKKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SUVBOX05QUSwgMCk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBSRUdfUlFQTiwgMHg4MDAwMDAwMCk7CiAJCW1kZWxheSgxMCk7CiAJfQogfQogCi12b2lkIHJ0bDg3MjNhX3NldF9hcGZtX29uX21hYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB2YWwpCi17Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0KLQlwSGFsRGF0YS0+Yk1hY1B3ckN0cmxPbiA9IHZhbDsKLQlEQkdfODcyM0EoIiVzOiBiTWFjUHdyQ3RybE9uID0lZFxuIiwgX19mdW5jX18sIHBIYWxEYXRhLT5iTWFjUHdyQ3RybE9uKTsKLX0KLQogdm9pZCBydGw4NzIzYV9iY25fdmFsaWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAkvKiBCQ05fVkFMSUQsIEJJVDE2IG9mIFJFR19UREVDVFJMID0gQklUMCBvZiBSRUdfVERFQ1RSTCsyLAogCSAgIHdyaXRlIDEgdG8gY2xlYXIsIENsZWFyIGJ5IHN3ICovCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1RERUNUUkwgKyAyLAotCQkgICBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19UREVDVFJMICsgMikgfCBCSVQwKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVERFQ1RSTCArIDIsCisJCQkgcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfVERFQ1RSTCArIDIpIHwgQklUKDApKTsKIH0KIAotdm9pZCBydGw4NzIzYV9zZXRfdHhfcGF1c2Uoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggcGF1c2UpCitib29sIHJ0bDg3MjNhX2dldF9iY25fdmFsaWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVFhQQVVTRSwgcGF1c2UpOworCWJvb2wgcmV0dmFsOworCisJcmV0dmFsID0gKHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgUkVHX1RERUNUUkwgKyAyKSAmIEJJVCgwKSkgPyB0cnVlIDogZmFsc2U7CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiB2b2lkIHJ0bDg3MjNhX3NldF9iZWFjb25faW50ZXJ2YWwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTE2IGludGVydmFsKQogewotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfQkNOX0lOVEVSVkFMLCBpbnRlcnZhbCk7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05fSU5URVJWQUwsIGludGVydmFsKTsKIH0KIAogdm9pZCBydGw4NzIzYV9zZXRfcmVzcF9zaWZzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCkBAIC03NjgsMjQgKzc4MCwyNCBAQAogCS8qIFNJRlNfVGltZXIgPSAweDBhMGEwODA4OyAqLwogCS8qIFJFU1BfU0lGUyBmb3IgQ0NLICovCiAJLyogIFNJRlNfVDJUX0NDSyAoMHgwOCkgKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUjJUX1NJRlMsIHIydDEpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19SMlRfU0lGUywgcjJ0MSk7CiAJLyogU0lGU19SMlRfQ0NLKDB4MDgpICovCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1IyVF9TSUZTICsgMSwgcjJ0Mik7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1IyVF9TSUZTICsgMSwgcjJ0Mik7CiAJLyogUkVTUF9TSUZTIGZvciBPRkRNICovCiAJLyogU0lGU19UMlRfT0ZETSAoMHgwYSkgKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVDJUX1NJRlMsIHQydDEpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19UMlRfU0lGUywgdDJ0MSk7CiAJLyogU0lGU19SMlRfT0ZETSgweDBhKSAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19UMlRfU0lGUyArIDEsIHQydDIpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19UMlRfU0lGUyArIDEsIHQydDIpOwogfQogCiB2b2lkIHJ0bDg3MjNhX3NldF9hY19wYXJhbV92byhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgdm8pCiB7Ci0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19FRENBX1ZPX1BBUkFNLCB2byk7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19FRENBX1ZPX1BBUkFNLCB2byk7CiB9CiAKIHZvaWQgcnRsODcyM2Ffc2V0X2FjX3BhcmFtX3ZpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiB2aSkKIHsKLQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX0VEQ0FfVklfUEFSQU0sIHZpKTsKKwlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX0VEQ0FfVklfUEFSQU0sIHZpKTsKIH0KIAogdm9pZCBydGw4NzIzYV9zZXRfYWNfcGFyYW1fYmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGJlKQpAQCAtNzkzLDE3ICs4MDUsMTcgQEAKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAogCXBIYWxEYXRhLT5BY1BhcmFtX0JFID0gYmU7Ci0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19FRENBX0JFX1BBUkFNLCBiZSk7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19FRENBX0JFX1BBUkFNLCBiZSk7CiB9CiAKIHZvaWQgcnRsODcyM2Ffc2V0X2FjX3BhcmFtX2JrKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBiaykKIHsKLQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX0VEQ0FfQktfUEFSQU0sIGJrKTsKKwlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX0VEQ0FfQktfUEFSQU0sIGJrKTsKIH0KIAogdm9pZCBydGw4NzIzYV9zZXRfcnhkbWFfYWdnX3BnX3RoKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhbCkKIHsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlhETUFfQUdHX1BHX1RILCB2YWwpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19SWERNQV9BR0dfUEdfVEgsIHZhbCk7CiB9CiAKIHZvaWQgcnRsODcyM2Ffc2V0X25hdl91cHBlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgdXNOYXZVcHBlcikKQEAgLTgyMSw3ICs4MzMsNyBAQAogCS8qICBpcyBnZXR0aW5nIHRoZSB1cHBlciBpbnRlZ2VyLiAqLwogCXVzTmF2VXBwZXIgPSAodXNOYXZVcHBlciArIEhBTF84NzIzQV9OQVZfVVBQRVJfVU5JVCAtIDEpIC8KIAkJSEFMXzg3MjNBX05BVl9VUFBFUl9VTklUOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19OQVZfVVBQRVIsICh1OCkgdXNOYXZVcHBlcik7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX05BVl9VUFBFUiwgKHU4KSB1c05hdlVwcGVyKTsKIH0KIAogdm9pZCBydGw4NzIzYV9zZXRfaW5pdGlhbF9nYWluKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiByeF9nYWluKQpAQCAtODM3LDIzICs4NDksMTggQEAKIAl9CiB9CiAKLXZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV93cml0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgdmFsKQordm9pZCBydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X3Jlc3RvcmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAotCXBIYWxEYXRhLT5vZG1wcml2LlN1cHBvcnRBYmlsaXR5ID0gdmFsOworCXBIYWxEYXRhLT5vZG1wcml2LlN1cHBvcnRBYmlsaXR5ID0gcEhhbERhdGEtPm9kbXByaXYuQktfU3VwcG9ydEFiaWxpdHk7CiB9CiAKLXZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9iYWNrdXAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggdmFsKQordm9pZCBydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X2JhY2t1cChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCi0JaWYgKHZhbCkJLyogIHNhdmUgZG0gZmxhZyAqLwotCQlwSGFsRGF0YS0+b2RtcHJpdi5CS19TdXBwb3J0QWJpbGl0eSA9Ci0JCQlwSGFsRGF0YS0+b2RtcHJpdi5TdXBwb3J0QWJpbGl0eTsKLQllbHNlCQkvKiAgcmVzdG9yZSBkbSBmbGFnICovCi0JCXBIYWxEYXRhLT5vZG1wcml2LlN1cHBvcnRBYmlsaXR5ID0KLQkJCXBIYWxEYXRhLT5vZG1wcml2LkJLX1N1cHBvcnRBYmlsaXR5OworCXBIYWxEYXRhLT5vZG1wcml2LkJLX1N1cHBvcnRBYmlsaXR5ID0gcEhhbERhdGEtPm9kbXByaXYuU3VwcG9ydEFiaWxpdHk7CiB9CiAKIHZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9zZXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIHZhbCkKQEAgLTg3Nyw1ICs4ODQsNDQgQEAKIAogdm9pZCBydGw4NzIzYV9zZXRfcnB3bShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB2YWwpCiB7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1VTQl9IUlBXTSwgdmFsKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVVNCX0hSUFdNLCB2YWwpOworfQorCit1OCBydGw4NzIzYV9nZXRfcmZfdHlwZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoreworCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOworCisJcmV0dXJuIHBIYWxEYXRhLT5yZl90eXBlOworfQorCitib29sIHJ0bDg3MjNhX2dldF9md2xwc19yZl9vbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoreworCWJvb2wgcmV0dmFsOworCXUzMiB2YWxSQ1I7CisKKwkvKiAgV2hlbiB3ZSBoYWx0IE5JQywgd2Ugc2hvdWxkIGNoZWNrIGlmIEZXIExQUyBpcyBsZWF2ZS4gKi8KKworCWlmICgocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgPT0gdHJ1ZSkgfHwKKwkgICAgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSA9PSByZl9vZmYpKSB7CisJCS8qICBJZiBpdCBpcyBpbiBIVy9TVyBSYWRpbyBPRkYgb3IgSVBTIHN0YXRlLCB3ZSBkbworCQkgICAgbm90IGNoZWNrIEZ3IExQUyBMZWF2ZSwgYmVjYXVzZSBGdyBpcyB1bmxvYWQuICovCisJCXJldHZhbCA9IHRydWU7CisJfSBlbHNlIHsKKwkJdmFsUkNSID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX1JDUik7CisJCWlmICh2YWxSQ1IgJiAweDAwMDcwMDAwKQorCQkJcmV0dmFsID0gZmFsc2U7CisJCWVsc2UKKwkJCXJldHZhbCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworYm9vbCBydGw4NzIzYV9jaGtfaGlfcXVldWVfZW1wdHkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3sKKwl1MzIgaGdxOworCisJaGdxID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX0hHUV9JTkZPUk1BVElPTik7CisKKwlyZXR1cm4gKChoZ3EgJiAweDAwMDBmZjAwKSA9PSAwKSA/IHRydWUgOiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL2hhbF9pbnRmLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9oYWxfaW50Zi5jCmluZGV4IGRlMzYwOGIuLjUzODNlNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL2hhbF9pbnRmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvaGFsX2ludGYuYwpAQCAtMTksMjMyICsxOSw3IEBACiAKICNpbmNsdWRlIDxoYWxfaW50Zi5oPgogCi0jaW5jbHVkZSA8dXNiX2hhbC5oPgotCi12b2lkIHJ0d19oYWxfY2hpcF9jb25maWd1cmUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaW50Zl9jaGlwX2NvbmZpZ3VyZSkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuaW50Zl9jaGlwX2NvbmZpZ3VyZShwYWRhcHRlcik7Ci19Ci0KLXZvaWQgcnR3X2hhbF9yZWFkX2NoaXBfaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5yZWFkX2FkYXB0ZXJfaW5mbykKLQkJcGFkYXB0ZXItPkhhbEZ1bmMucmVhZF9hZGFwdGVyX2luZm8ocGFkYXB0ZXIpOwotfQotCi12b2lkIHJ0d19oYWxfcmVhZF9jaGlwX3ZlcnNpb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMucmVhZF9jaGlwX3ZlcnNpb24pCi0JCXBhZGFwdGVyLT5IYWxGdW5jLnJlYWRfY2hpcF92ZXJzaW9uKHBhZGFwdGVyKTsKLX0KLQotdm9pZCBydHdfaGFsX2RlZl92YWx1ZV9pbml0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLmluaXRfZGVmYXVsdF92YWx1ZSkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuaW5pdF9kZWZhdWx0X3ZhbHVlKHBhZGFwdGVyKTsKLX0KLXZvaWQJcnR3X2hhbF9mcmVlX2RhdGEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuZnJlZV9oYWxfZGF0YSkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuZnJlZV9oYWxfZGF0YShwYWRhcHRlcik7Ci19Ci12b2lkCXJ0d19oYWxfZG1faW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5kbV9pbml0KQotCQlwYWRhcHRlci0+SGFsRnVuYy5kbV9pbml0KHBhZGFwdGVyKTsKLX0KLXZvaWQgcnR3X2hhbF9kbV9kZWluaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQkvKiAgY2FuY2VsIGRtICB0aW1lciAqLwotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5kbV9kZWluaXQpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLmRtX2RlaW5pdChwYWRhcHRlcik7Ci19Ci12b2lkCXJ0d19oYWxfc3dfbGVkX2luaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuSW5pdFN3TGVkcykKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuSW5pdFN3TGVkcyhwYWRhcHRlcik7Ci19Ci0KLXZvaWQgcnR3X2hhbF9zd19sZWRfZGVpbml0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLkRlSW5pdFN3TGVkcykKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuRGVJbml0U3dMZWRzKHBhZGFwdGVyKTsKLX0KLQotdTMyIHJ0d19oYWxfcG93ZXJfb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaGFsX3Bvd2VyX29uKQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuaGFsX3Bvd2VyX29uKHBhZGFwdGVyKTsKLQlyZXR1cm4gX0ZBSUw7Ci19Ci0KLXVpbnQJIHJ0d19oYWxfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXVpbnQJc3RhdHVzID0gX1NVQ0NFU1M7Ci0KLQlwYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQgPSBmYWxzZTsKLQotCXN0YXR1cyA9IHBhZGFwdGVyLT5IYWxGdW5jLmhhbF9pbml0KHBhZGFwdGVyKTsKLQotCWlmIChzdGF0dXMgPT0gX1NVQ0NFU1MpIHsKLQkJcGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkID0gdHJ1ZTsKLQotCQlpZiAocGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi5ub3RjaF9maWx0ZXIgPT0gMSkKLQkJCXJ0d19oYWxfbm90Y2hfZmlsdGVyMjNhKHBhZGFwdGVyLCAxKTsKLQotCQlydHdfaGFsX3Jlc2V0X3NlY3VyaXR5X2VuZ2luZTIzYShwYWRhcHRlcik7Ci0JfSBlbHNlIHsKLQkJcGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkID0gZmFsc2U7Ci0JCURCR184NzIzQSgicnR3X2hhbF9pbml0MjNhOiBoYWxfX2luaXQgZmFpbFxuIik7Ci0JfQotCi0JUlRfVFJBQ0UoX21vZHVsZV9oYWxfaW5pdF9jXywgX2Rydl9lcnJfLCAoIi1ydGw4NzF4X2hhbF9pbml0OnN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cykpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotdWludCBydHdfaGFsX2RlaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXVpbnQJc3RhdHVzID0gX1NVQ0NFU1M7Ci0KLQlzdGF0dXMgPSBwYWRhcHRlci0+SGFsRnVuYy5oYWxfZGVpbml0KHBhZGFwdGVyKTsKLQotCWlmIChzdGF0dXMgPT0gX1NVQ0NFU1MpCi0JCXBhZGFwdGVyLT5od19pbml0X2NvbXBsZXRlZCA9IGZhbHNlOwotCWVsc2UKLQkJREJHXzg3MjNBKCJcbiBydHdfaGFsX2RlaW5pdDIzYTogaGFsX2luaXQgZmFpbFxuIik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotdm9pZCBydHdfaGFsX3NldF9od3JlZzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB2YXJpYWJsZSwgdTggKnZhbCkKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuU2V0SHdSZWdIYW5kbGVyKQotCQlwYWRhcHRlci0+SGFsRnVuYy5TZXRId1JlZ0hhbmRsZXIocGFkYXB0ZXIsIHZhcmlhYmxlLCB2YWwpOwotfQotCi12b2lkIHJ0dzIzYV9oYWxfZ2V0X2h3cmVnKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5HZXRId1JlZ0hhbmRsZXIpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLkdldEh3UmVnSGFuZGxlcihwYWRhcHRlciwgdmFyaWFibGUsIHZhbCk7Ci19Ci0KLXU4IHJ0d19oYWxfc2V0X2RlZl92YXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBoYWxfZGVmX3ZhcmlhYmxlIGVWYXJpYWJsZSwgdm9pZCAqcFZhbHVlKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5TZXRIYWxEZWZWYXJIYW5kbGVyKQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuU2V0SGFsRGVmVmFySGFuZGxlcihwYWRhcHRlciwgZVZhcmlhYmxlLCBwVmFsdWUpOwotCXJldHVybiBfRkFJTDsKLX0KLXU4IHJ0d19oYWxfZ2V0X2RlZl92YXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBoYWxfZGVmX3ZhcmlhYmxlIGVWYXJpYWJsZSwgdm9pZCAqcFZhbHVlKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5HZXRIYWxEZWZWYXJIYW5kbGVyKQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuR2V0SGFsRGVmVmFySGFuZGxlcihwYWRhcHRlciwgZVZhcmlhYmxlLCBwVmFsdWUpOwotCXJldHVybiBfRkFJTDsKLX0KLQotdm9pZCBydHdfaGFsX3NldF9vZG1fdmFyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gaGFsX29kbV92YXJpYWJsZSBlVmFyaWFibGUsIHZvaWQgKnBWYWx1ZTEsIGJvb2wgYlNldCkKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuU2V0SGFsT0RNVmFySGFuZGxlcikKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuU2V0SGFsT0RNVmFySGFuZGxlcihwYWRhcHRlciwgZVZhcmlhYmxlLCBwVmFsdWUxLCBiU2V0KTsKLX0KLXZvaWQJcnR3X2hhbF9nZXRfb2RtX3ZhcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBlbnVtIGhhbF9vZG1fdmFyaWFibGUgZVZhcmlhYmxlLCB2b2lkICpwVmFsdWUxLCBib29sIGJTZXQpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLkdldEhhbE9ETVZhckhhbmRsZXIpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLkdldEhhbE9ETVZhckhhbmRsZXIocGFkYXB0ZXIsIGVWYXJpYWJsZSwgcFZhbHVlMSwgYlNldCk7Ci19Ci0KLXZvaWQgcnR3X2hhbF9lbmFibGVfaW50ZXJydXB0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLmVuYWJsZV9pbnRlcnJ1cHQpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLmVuYWJsZV9pbnRlcnJ1cHQocGFkYXB0ZXIpOwotCWVsc2UKLQkJREJHXzg3MjNBKCIlczogSGFsRnVuYy5lbmFibGVfaW50ZXJydXB0IGlzIE5VTEwhXG4iLCBfX0ZVTkNUSU9OX18pOwotCi19Ci12b2lkIHJ0d19oYWxfZGlzYWJsZV9pbnRlcnJ1cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuZGlzYWJsZV9pbnRlcnJ1cHQpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLmRpc2FibGVfaW50ZXJydXB0KHBhZGFwdGVyKTsKLQllbHNlCi0JCURCR184NzIzQSgiJXM6IEhhbEZ1bmMuZGlzYWJsZV9pbnRlcnJ1cHQgaXMgTlVMTCFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLX0KLQotdTMyCXJ0d19oYWxfaW5pcnBfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXUzMiByc3QgPSBfRkFJTDsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaW5pcnBfaW5pdCkKLQkJcnN0ID0gcGFkYXB0ZXItPkhhbEZ1bmMuaW5pcnBfaW5pdChwYWRhcHRlcik7Ci0JZWxzZQotCQlEQkdfODcyM0EoIiAlcyBIYWxGdW5jLmluaXJwX2luaXQgaXMgTlVMTCEhIVxuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4gcnN0OwotfQotCi11MzIJcnR3X2hhbF9pbmlycF9kZWluaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5pbmlycF9kZWluaXQpCi0JCXJldHVybiBwYWRhcHRlci0+SGFsRnVuYy5pbmlycF9kZWluaXQocGFkYXB0ZXIpOwotCi0JcmV0dXJuIF9GQUlMOwotCi19Ci0KLXU4CXJ0d19oYWxfaW50Zl9wc19mdW5jMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gaGFsX2ludGZfcHNfZnVuYyBlZnVuY19pZCwgdTggKnZhbCkKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaW50ZXJmYWNlX3BzX2Z1bmMpCi0JCXJldHVybiBwYWRhcHRlci0+SGFsRnVuYy5pbnRlcmZhY2VfcHNfZnVuYyhwYWRhcHRlciwgZWZ1bmNfaWQsIHZhbCk7Ci0JcmV0dXJuIF9GQUlMOwotfQotCi1zMzIJcnR3X2hhbF94bWl0MjNhZnJhbWVfZW5xdWV1ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaGFsX3htaXRmcmFtZV9lbnF1ZXVlKQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuaGFsX3htaXRmcmFtZV9lbnF1ZXVlKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotczMyCXJ0d19oYWxfeG1pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaGFsX3htaXQpCi0JCXJldHVybiBwYWRhcHRlci0+SGFsRnVuYy5oYWxfeG1pdChwYWRhcHRlciwgcHhtaXRmcmFtZSk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXMzMglydHdfaGFsX21nbnRfeG1pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZSkKLXsKLQlzMzIgcmV0ID0gX0ZBSUw7Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLm1nbnRfeG1pdCkKLQkJcmV0ID0gcGFkYXB0ZXItPkhhbEZ1bmMubWdudF94bWl0KHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zMzIJcnR3X2hhbF9pbml0MjNhX3htaXRfcHJpdihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5pbml0X3htaXRfcHJpdiAhPSBOVUxMKQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuaW5pdF94bWl0X3ByaXYocGFkYXB0ZXIpOwotCXJldHVybiBfRkFJTDsKLX0KLXZvaWQJcnR3X2hhbF9mcmVlX3htaXRfcHJpdjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5mcmVlX3htaXRfcHJpdiAhPSBOVUxMKQotCQlwYWRhcHRlci0+SGFsRnVuYy5mcmVlX3htaXRfcHJpdihwYWRhcHRlcik7Ci19Ci0KLXMzMglydHdfaGFsX2luaXQyM2FfcmVjdl9wcml2KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLmluaXRfcmVjdl9wcml2KQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuaW5pdF9yZWN2X3ByaXYocGFkYXB0ZXIpOwotCi0JcmV0dXJuIF9GQUlMOwotfQotdm9pZAlydHdfaGFsX2ZyZWVfcmVjdl9wcml2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLmZyZWVfcmVjdl9wcml2KQotCQlwYWRhcHRlci0+SGFsRnVuYy5mcmVlX3JlY3ZfcHJpdihwYWRhcHRlcik7Ci19CisjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CiAKIHZvaWQgcnR3X2hhbF91cGRhdGVfcmFfbWFzazIzYShzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEsIHU4IHJzc2lfbGV2ZWwpCiB7CkBAIC0yNjIsMTU5ICszNyw2IEBACiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJCWFkZF9SQVRpZDIzYShwYWRhcHRlciwgcHN0YSwgcnNzaV9sZXZlbCk7CiAjZW5kaWYKLQl9IGVsc2UgewotCQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuVXBkYXRlUkFNYXNrSGFuZGxlcikKLQkJCXBhZGFwdGVyLT5IYWxGdW5jLlVwZGF0ZVJBTWFza0hhbmRsZXIocGFkYXB0ZXIsIHBzdGEtPm1hY19pZCwgcnNzaV9sZXZlbCk7Ci0JfQotfQotCi12b2lkCXJ0d19oYWxfYWRkX3JhX3RpZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYml0bWFwLCB1OCBhcmcsIHU4IHJzc2lfbGV2ZWwpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLkFkZF9SYXRlQVRpZCkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuQWRkX1JhdGVBVGlkKHBhZGFwdGVyLCBiaXRtYXAsIGFyZywgcnNzaV9sZXZlbCk7Ci19Ci0KLS8qCVN0YXJ0IHNwZWNpZmljYWwgaW50ZXJmYWNlIHRocmVhZAkJKi8KLXZvaWQJcnR3X2hhbF9zdGFydF90aHJlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMucnVuX3RocmVhZCkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMucnVuX3RocmVhZChwYWRhcHRlcik7Ci19Ci0vKglTdGFydCBzcGVjaWZpY2FsIGludGVyZmFjZSB0aHJlYWQJCSovCi12b2lkCXJ0d19oYWxfc3RvcF90aHJlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuY2FuY2VsX3RocmVhZCkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuY2FuY2VsX3RocmVhZChwYWRhcHRlcik7Ci19Ci0KLXUzMglydHdfaGFsX3JlYWRfYmJyZWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrKQotewotCXUzMiBkYXRhID0gMDsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMucmVhZF9iYnJlZykKLQkJIGRhdGEgPSBwYWRhcHRlci0+SGFsRnVuYy5yZWFkX2JicmVnKHBhZGFwdGVyLCBSZWdBZGRyLCBCaXRNYXNrKTsKLQlyZXR1cm4gZGF0YTsKLX0KLXZvaWQJcnR3X2hhbF93cml0ZV9iYnJlZzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2ssIHUzMiBEYXRhKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy53cml0ZV9iYnJlZykKLQkJcGFkYXB0ZXItPkhhbEZ1bmMud3JpdGVfYmJyZWcocGFkYXB0ZXIsIFJlZ0FkZHIsIEJpdE1hc2ssIERhdGEpOwotfQotCi11MzIJcnR3X2hhbF9yZWFkX3JmcmVnMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBlUkZQYXRoLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2spCi17Ci0JdTMyIGRhdGEgPSAwOwotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5yZWFkX3JmcmVnKQotCQlkYXRhID0gcGFkYXB0ZXItPkhhbEZ1bmMucmVhZF9yZnJlZyhwYWRhcHRlciwgZVJGUGF0aCwgUmVnQWRkciwgQml0TWFzayk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci12b2lkCXJ0d19oYWxfd3JpdGVfcmZyZWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaywgdTMyIERhdGEpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLndyaXRlX3JmcmVnKQotCQlwYWRhcHRlci0+SGFsRnVuYy53cml0ZV9yZnJlZyhwYWRhcHRlciwgZVJGUGF0aCwgUmVnQWRkciwgQml0TWFzaywgRGF0YSk7Ci19Ci0KLXMzMglydHdfaGFsX2ludGVycnVwdF9oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLmludGVycnVwdF9oYW5kbGVyKQotCQlyZXR1cm4gcGFkYXB0ZXItPkhhbEZ1bmMuaW50ZXJydXB0X2hhbmRsZXIocGFkYXB0ZXIpOwotCXJldHVybiBfRkFJTDsKLX0KLQotdm9pZAlydHdfaGFsX3NldF9id21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgIGVudW0gaHRfY2hhbm5lbF93aWR0aCBCYW5kd2lkdGgsIHU4IG9mZnNldCkKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuc2V0X2J3bW9kZV9oYW5kbGVyKQotCQlwYWRhcHRlci0+SGFsRnVuYy5zZXRfYndtb2RlX2hhbmRsZXIocGFkYXB0ZXIsIEJhbmR3aWR0aCwKLQkJCQkJCSAgICAgb2Zmc2V0KTsKLX0KLQotdm9pZAlydHdfaGFsX3NldF9jaGFuMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGNoYW5uZWwpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLnNldF9jaGFubmVsX2hhbmRsZXIpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLnNldF9jaGFubmVsX2hhbmRsZXIocGFkYXB0ZXIsIGNoYW5uZWwpOwotfQotCi12b2lkCXJ0d19oYWxfZG1fd2F0Y2hkb2cyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuaGFsX2RtX3dhdGNoZG9nKQotCQlwYWRhcHRlci0+SGFsRnVuYy5oYWxfZG1fd2F0Y2hkb2cocGFkYXB0ZXIpOwotfQotCi12b2lkIHJ0d19oYWxfYmNuX3JlbGF0ZWRfcmVnX3NldHRpbmcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuU2V0QmVhY29uUmVsYXRlZFJlZ2lzdGVyc0hhbmRsZXIpCi0JCXBhZGFwdGVyLT5IYWxGdW5jLlNldEJlYWNvblJlbGF0ZWRSZWdpc3RlcnNIYW5kbGVyKHBhZGFwdGVyKTsKLX0KLQotdm9pZAlydHdfaGFsX3NyZXNldF9pbml0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLnNyZXNldF9pbml0X3ZhbHVlMjNhKQotCQlwYWRhcHRlci0+SGFsRnVuYy5zcmVzZXRfaW5pdF92YWx1ZTIzYShwYWRhcHRlcik7Ci19Ci12b2lkIHJ0d19oYWxfc3Jlc2V0X3Jlc2V0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JcGFkYXB0ZXIgPSBHRVRfUFJJTUFSWV9BREFQVEVSKHBhZGFwdGVyKTsKLQotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5zaWxlbnRyZXNldCkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuc2lsZW50cmVzZXQocGFkYXB0ZXIpOwotfQotCi12b2lkIHJ0d19oYWxfc3Jlc2V0X3Jlc2V0MjNhX3ZhbHVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLnNyZXNldF9yZXNldF92YWx1ZTIzYSkKLQkJcGFkYXB0ZXItPkhhbEZ1bmMuc3Jlc2V0X3Jlc2V0X3ZhbHVlMjNhKHBhZGFwdGVyKTsKLX0KLQotdm9pZCBydHdfaGFsX3NyZXNldF94bWl0X3N0YXR1c19jaGVjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCWlmIChwYWRhcHRlci0+SGFsRnVuYy5zcmVzZXRfeG1pdF9zdGF0dXNfY2hlY2spCi0JCXBhZGFwdGVyLT5IYWxGdW5jLnNyZXNldF94bWl0X3N0YXR1c19jaGVjayhwYWRhcHRlcik7Ci19Ci12b2lkIHJ0d19oYWxfc3Jlc2V0X2xpbmtlZF9zdGF0dXNfY2hlY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuc3Jlc2V0X2xpbmtlZF9zdGF0dXNfY2hlY2spCi0JCXBhZGFwdGVyLT5IYWxGdW5jLnNyZXNldF9saW5rZWRfc3RhdHVzX2NoZWNrKHBhZGFwdGVyKTsKLX0KLXU4ICAgcnR3X2hhbF9zcmVzZXRfZ2V0X3dpZmlfc3RhdHVzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JdTggc3RhdHVzID0gMDsKLQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuc3Jlc2V0X2dldF93aWZpX3N0YXR1czIzYSkKLQkJc3RhdHVzID0gcGFkYXB0ZXItPkhhbEZ1bmMuc3Jlc2V0X2dldF93aWZpX3N0YXR1czIzYShwYWRhcHRlcik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotYm9vbCBydHdfaGFsX3NyZXNldF9pbnByb2dyZXNzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JYm9vbCBpbnByb2dyZXNzID0gZmFsc2U7Ci0KLQlwYWRhcHRlciA9IEdFVF9QUklNQVJZX0FEQVBURVIocGFkYXB0ZXIpOwotCi0JaWYgKHBhZGFwdGVyLT5IYWxGdW5jLnNyZXNldF9pbnByb2dyZXNzKQotCQlpbnByb2dyZXNzID0gcGFkYXB0ZXItPkhhbEZ1bmMuc3Jlc2V0X2lucHJvZ3Jlc3MocGFkYXB0ZXIpOwotCXJldHVybiBpbnByb2dyZXNzOwotfQotCi12b2lkIHJ0d19oYWxfbm90Y2hfZmlsdGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbmFibGUpCi17Ci0JaWYgKGFkYXB0ZXItPkhhbEZ1bmMuaGFsX25vdGNoX2ZpbHRlcikKLQkJYWRhcHRlci0+SGFsRnVuYy5oYWxfbm90Y2hfZmlsdGVyKGFkYXB0ZXIsIGVuYWJsZSk7Ci19Ci0KLXZvaWQgcnR3X2hhbF9yZXNldF9zZWN1cml0eV9lbmdpbmUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChhZGFwdGVyLT5IYWxGdW5jLmhhbF9yZXNldF9zZWN1cml0eV9lbmdpbmUpCi0JCWFkYXB0ZXItPkhhbEZ1bmMuaGFsX3Jlc2V0X3NlY3VyaXR5X2VuZ2luZShhZGFwdGVyKTsKLX0KLQotczMyIHJ0d19oYWxfYzJoX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYzJoX2V2dF9oZHIgKmMyaF9ldnQpCi17Ci0JczMyIHJldCA9IF9GQUlMOwotCWlmIChhZGFwdGVyLT5IYWxGdW5jLmMyaF9oYW5kbGVyKQotCQlyZXQgPSBhZGFwdGVyLT5IYWxGdW5jLmMyaF9oYW5kbGVyKGFkYXB0ZXIsIGMyaF9ldnQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWMyaF9pZF9maWx0ZXIgcnR3X2hhbF9jMmhfaWRfZmlsdGVyX2NjeDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JcmV0dXJuIGFkYXB0ZXItPkhhbEZ1bmMuYzJoX2lkX2ZpbHRlcl9jY3g7CisJfSBlbHNlCisJCXJ0bDg3MjNhX3VwZGF0ZV9yYW1hc2socGFkYXB0ZXIsIHBzdGEtPm1hY19pZCwgcnNzaV9sZXZlbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9vZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL29kbS5jCmluZGV4IDU4NGE3NGUuLmUxNWViZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL29kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL29kbS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAib2RtX3ByZWNvbXAuaCIKKyNpbmNsdWRlICJ1c2Jfb3BzX2xpbnV4LmgiCiAKIHN0YXRpYyBjb25zdCB1MTYgZEJfSW52ZXJ0X1RhYmxlWzhdWzEyXSA9IHsKIAl7MSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgNCwgNH0sCkBAIC0xOTksMTcgKzIwMCw2IEBACiAKIHZvaWQgb2RtX0R5bmFtaWNUeFBvd2VyMjNhSW5pdChzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwogCi12b2lkIG9kbV9EeW5hbWljVHhQb3dlcjIzYVJlc3RvcmVQb3dlckluZGV4KHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Ci0KLXZvaWQgb2RtX0R5bmFtaWNUeFBvd2VyMjNhU2F2ZVBvd2VySW5kZXgoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKLQotdm9pZCBvZG1fRHluYW1pY1R4UG93ZXIyM2FXcml0ZVBvd2VySW5kZXgoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAotCXU4IFZhbHVlKTsKLQotdm9pZCBvZG1fRHluYW1pY1R4UG93ZXIyM2FfOTJDKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Ci0KLXZvaWQgb2RtX0R5bmFtaWNUeFBvd2VyMjNhXzkyRChzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwotCiB2b2lkIG9kbV9SU1NJTW9uaXRvckluaXQoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKIAogdm9pZCBvZG1fUlNTSU1vbml0b3JDaGVjazIzYU1QKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7CkBAIC0yMzIsOCArMjIyLDYgQEAKIAogdm9pZCBvZG1fU3dBbnREaXZDaGtBbnRTd2l0Y2hDYWxsYmFjazIzYSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCi12b2lkIG9kbV9HbG9iYWxBZGFwdGVyQ2hlY2sodm9pZCk7Ci0KIHZvaWQgb2RtX1JlZnJlc2hSYXRlQWRhcHRpdmVNYXNrMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7CiAKIHZvaWQgT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7CkBAIC0zMDYsNyArMjk0LDYgQEAKIHZvaWQgT0RNX0RNV2F0Y2hkb2cyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQogewogCS8qIDIwMTIuMDUuMDMgTHVrZTogRm9yIGFsbCBJQyBzZXJpZXMgKi8KLQlvZG1fR2xvYmFsQWRhcHRlckNoZWNrKCk7CiAJb2RtX0NtbkluZm9Ib29rX0RlYnVnMjNhKHBETV9PZG0pOwogCW9kbV9DbW5JbmZvVXBkYXRlX0RlYnVnMjNhKHBETV9PZG0pOwogCW9kbV9Db21tb25JbmZvU2VsZlVwZGF0ZTIzYShwRE1fT2RtKTsKQEAgLTM0Myw3ICszMzAsNiBAQAogCWlmIChwRE1fT2RtLT5TdXBwb3J0SUNUeXBlICYgT0RNX0lDXzExTl9TRVJJRVMpIHsKIAkJT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrMjNhKHBETV9PZG0pOwogCSAgICAgIG9kbV9FZGNhVHVyYm9DaGVjazIzYShwRE1fT2RtKTsKLQkJb2RtX0R5bmFtaWNUeFBvd2VyMjNhKHBETV9PZG0pOwogCX0KIAogCW9kbV9kdGMocERNX09kbSk7CkBAIC01NjMsNyArNTQ5LDcgQEAKIHZvaWQgb2RtX0NvbW1vbkluZm9TZWxmSW5pdDIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0KIAkpCiB7Ci0JcERNX09kbS0+YkNja0hpZ2hQb3dlciA9IChib29sKSBPRE1fR2V0QkJSZWcocERNX09kbSwgMHg4MjQsIEJJVDkpOworCXBETV9PZG0tPmJDY2tIaWdoUG93ZXIgPSAoYm9vbCkgT0RNX0dldEJCUmVnKHBETV9PZG0sIDB4ODI0LCBCSVQoOSkpOwogCXBETV9PZG0tPlJGUGF0aFJ4RW5hYmxlID0gKHU4KSBPRE1fR2V0QkJSZWcocERNX09kbSwgMHhjMDQsIDB4MEYpOwogCWlmIChwRE1fT2RtLT5TdXBwb3J0SUNUeXBlICYgKE9ETV9SVEw4NzIzQSkpCiAJCXBETV9PZG0tPkFudERpdlR5cGUgPSBDR0NTX1JYX1NXX0FOVERJVjsKQEAgLTk0MSw4ICs5MjcsOCBAQAogCiAJaWYgKHBETV9PZG0tPlN1cHBvcnRJQ1R5cGUgJiBPRE1fSUNfMTFOX1NFUklFUykgewogCQkvKiBob2xkIG9mZG0gY291bnRlciAqLwotCQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19PRkRNX0ZBX0hPTERDXzExTiwgQklUMzEsIDEpOyAvKiBob2xkIHBhZ2UgQyBjb3VudGVyICovCi0JCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNURF8xMU4sIEJJVDMxLCAxKTsgLyogaG9sZCBwYWdlIEQgY291bnRlciAqLworCQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19PRkRNX0ZBX0hPTERDXzExTiwgQklUKDMxKSwgMSk7IC8qIGhvbGQgcGFnZSBDIGNvdW50ZXIgKi8KKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9SU1REXzExTiwgQklUKDMxKSwgMSk7IC8qIGhvbGQgcGFnZSBEIGNvdW50ZXIgKi8KIAogCQlyZXRfdmFsdWUgPSBPRE1fR2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19PRkRNX0ZBX1RZUEUxXzExTiwgYk1hc2tEV29yZCk7CiAJCUZhbHNlQWxtQ250LT5DbnRfRmFzdF9Gc3luYyA9IChyZXRfdmFsdWUmMHhmZmZmKTsKQEAgLTk2Miw5ICs5NDgsOSBAQAogCQkJCQkgICAgIEZhbHNlQWxtQ250LT5DbnRfTWNzX2ZhaWwgKwogCQkJCQkgICAgIEZhbHNlQWxtQ250LT5DbnRfRmFzdF9Gc3luYyArCiAJCQkJCSAgICAgRmFsc2VBbG1DbnQtPkNudF9TQl9TZWFyY2hfZmFpbDsKLQkvKiBob2xkIGNjayBjb3VudGVyICovCi0JT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVDEyLCAxKTsKLQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19DQ0tfRkFfUlNUXzExTiwgQklUMTQsIDEpOworCQkvKiBob2xkIGNjayBjb3VudGVyICovCisJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX0NDS19GQV9SU1RfMTFOLCBCSVQoMTIpLCAxKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVCgxNCksIDEpOwogCiAJcmV0X3ZhbHVlID0gT0RNX0dldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX0xTQl8xMU4sIGJNYXNrQnl0ZTApOwogCUZhbHNlQWxtQ250LT5DbnRfQ2NrX2ZhaWwgPSByZXRfdmFsdWU7CkBAIC05ODYsMjAgKzk3MiwyNCBAQAogCiAJaWYgKHBETV9PZG0tPlN1cHBvcnRJQ1R5cGUgPj0gT0RNX1JUTDg3MjNBKSB7CiAJCS8qIHJlc2V0IGZhbHNlIGFsYXJtIGNvdW50ZXIgcmVnaXN0ZXJzICovCi0JCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNUQ18xMU4sIEJJVDMxLCAxKTsKLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9SU1RDXzExTiwgQklUMzEsIDApOwotCQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19PRkRNX0ZBX1JTVERfMTFOLCBCSVQyNywgMSk7Ci0JCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNURF8xMU4sIEJJVDI3LCAwKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9SU1RDXzExTiwgQklUKDMxKSwgMSk7CisJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNUQ18xMU4sIEJJVCgzMSksIDApOworCQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19PRkRNX0ZBX1JTVERfMTFOLCBCSVQoMjcpLCAxKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9SU1REXzExTiwgQklUKDI3KSwgMCk7CiAJCS8qIHVwZGF0ZSBvZmRtIGNvdW50ZXIgKi8KLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9IT0xEQ18xMU4sIEJJVDMxLCAwKTsgLyogdXBkYXRlIHBhZ2UgQyBjb3VudGVyICovCi0JCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNURF8xMU4sIEJJVDMxLCAwKTsgLyogdXBkYXRlIHBhZ2UgRCBjb3VudGVyICovCisJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfSE9MRENfMTFOLCBCSVQoMzEpLCAwKTsgLyogdXBkYXRlIHBhZ2UgQyBjb3VudGVyICovCisJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNURF8xMU4sIEJJVCgzMSksIDApOyAvKiB1cGRhdGUgcGFnZSBEIGNvdW50ZXIgKi8KIAogCQkvKiByZXNldCBDQ0sgQ0NBIGNvdW50ZXIgKi8KLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVDEzfEJJVDEyLCAwKTsKLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVDEzfEJJVDEyLCAyKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sCisJCQkgICAgIEJJVCgxMykgfCBCSVQoMTIpLCAwKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sCisJCQkgICAgIEJJVCgxMykgfCBCSVQoMTIpLCAyKTsKIAkJLyogcmVzZXQgQ0NLIEZBIGNvdW50ZXIgKi8KLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVDE1fEJJVDE0LCAwKTsKLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sIEJJVDE1fEJJVDE0LCAyKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sCisJCQkgICAgIEJJVCgxNSkgfCBCSVQoMTQpLCAwKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMU4sCisJCQkgICAgIEJJVCgxNSkgfCBCSVQoMTQpLCAyKTsKIAl9CiAKIAlPRE1fUlRfVFJBQ0UocERNX09kbSwgT0RNX0NPTVBfRkFfQ05ULCBPRE1fREJHX0xPVUQsICgiRW50ZXIgb2RtX0ZhbHNlQWxhcm1Db3VudGVyU3RhdGlzdGljczIzYVxuIikpOwpAQCAtMTAxNiwxMSArMTAwNiwxMSBAQAogCQlGYWxzZUFsbUNudC0+Q250X2FsbCA9IEZhbHNlQWxtQ250LT5DbnRfT2ZkbV9mYWlsICsgRmFsc2VBbG1DbnQtPkNudF9DY2tfZmFpbDsKIAogCQkvKiAgcmVzZXQgT0ZETSBGQSBjb3V0bmVyICovCi0JCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX09GRE1fRkFfUlNUXzExQUMsIEJJVDE3LCAxKTsKLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9SU1RfMTFBQywgQklUMTcsIDApOworCQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19PRkRNX0ZBX1JTVF8xMUFDLCBCSVQoMTcpLCAxKTsKKwkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfT0ZETV9GQV9SU1RfMTFBQywgQklUKDE3KSwgMCk7CiAJCS8qICByZXNldCBDQ0sgRkEgY291bnRlciAqLwotCQlPRE1fU2V0QkJSZWcocERNX09kbSwgT0RNX1JFR19DQ0tfRkFfUlNUXzExQUMsIEJJVDE1LCAwKTsKLQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIE9ETV9SRUdfQ0NLX0ZBX1JTVF8xMUFDLCBCSVQxNSwgMSk7CisJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX0NDS19GQV9SU1RfMTFBQywgQklUKDE1KSwgMCk7CisJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCBPRE1fUkVHX0NDS19GQV9SU1RfMTFBQywgQklUKDE1KSwgMSk7CiAJfQogCU9ETV9SVF9UUkFDRShwRE1fT2RtLCBPRE1fQ09NUF9GQV9DTlQsIE9ETV9EQkdfTE9VRCwgKCJDbnRfQ2NrX2ZhaWwgPSVkXG4iLCBGYWxzZUFsbUNudC0+Q250X0Nja19mYWlsKSk7CiAJT0RNX1JUX1RSQUNFKHBETV9PZG0sIE9ETV9DT01QX0ZBX0NOVCwgT0RNX0RCR19MT1VELCAoIkNudF9PZmRtX2ZhaWwgPSVkXG4iLCBGYWxzZUFsbUNudC0+Q250X09mZG1fZmFpbCkpOwpAQCAtMTE0MCw3ICsxMTMwLDggQEAKIAlpZiAocERNX1BTVGFibGUtPmluaXRpYWxpemUgPT0gMCkgewogCiAJCXBETV9QU1RhYmxlLT5SZWc4NzQgPSAoT0RNX0dldEJCUmVnKHBETV9PZG0sIDB4ODc0LCBiTWFza0RXb3JkKSYweDFDQzAwMCk+PjE0OwotCQlwRE1fUFNUYWJsZS0+UmVnQzcwID0gKE9ETV9HZXRCQlJlZyhwRE1fT2RtLCAweGM3MCwgYk1hc2tEV29yZCkmQklUMyk+PjM7CisJCXBETV9QU1RhYmxlLT5SZWdDNzAgPQorCQkJKE9ETV9HZXRCQlJlZyhwRE1fT2RtLCAweGM3MCwgYk1hc2tEV29yZCkgJiBCSVQoMykpID4+MzsKIAkJcERNX1BTVGFibGUtPlJlZzg1QyA9IChPRE1fR2V0QkJSZWcocERNX09kbSwgMHg4NWMsIGJNYXNrRFdvcmQpJjB4RkYwMDAwMDApPj4yNDsKIAkJcERNX1BTVGFibGUtPlJlZ0E3NCA9IChPRE1fR2V0QkJSZWcocERNX09kbSwgMHhhNzQsIGJNYXNrRFdvcmQpJjB4RjAwMCk+PjEyOwogCQkvKiBSZWc4MTggPSBQSFlfUXVlcnlCQlJlZyhwQWRhcHRlciwgMHg4MTgsIGJNYXNrRFdvcmQpOyAqLwpAQCAtMTE3MiwyMyArMTE2MywyMyBAQAogCQkJLyogIDx0eW5saV9ub3RlPiA4NzIzIFJTU0kgcmVwb3J0IHdpbGwgYmUgd3JvbmcuIFNldCAweDg3NFs1XT0gMSB3aGVuIGVudGVyIEJCIHBvd2VyIHNhdmluZyBtb2RlLiAqLwogCQkJLyogIFN1Z2dlc3RlZCBieSBTRDMgWXUtTmFuLiAyMDExLjAxLjIwLiAqLwogCQkJaWYgKHBETV9PZG0tPlN1cHBvcnRJQ1R5cGUgPT0gT0RNX1JUTDg3MjNBKQotCQkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDg3NCwgQklUNSwgMHgxKTsgLyogUmVnODc0WzVdPSAxYicxICovCisJCQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIDB4ODc0LCBCSVQoNSksIDB4MSk7IC8qIFJlZzg3NFs1XT0gMWInMSAqLwogCQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIDB4ODc0LCAweDFDMDAwMCwgMHgyKTsgLyogUmVnODc0WzIwOjE4XT0gMydiMDEwICovCi0JCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHhjNzAsIEJJVDMsIDApOyAvKiBSZWdDNzBbM109IDEnYjAgKi8KKwkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweGM3MCwgQklUKDMpLCAwKTsgLyogUmVnQzcwWzNdPSAxJ2IwICovCiAJCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4NWMsIDB4RkYwMDAwMDAsIDB4NjMpOyAvKiBSZWc4NUNbMzE6MjRdPSAweDYzICovCiAJCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4NzQsIDB4QzAwMCwgMHgyKTsgLyogUmVnODc0WzE1OjE0XT0gMidiMTAgKi8KIAkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweGE3NCwgMHhGMDAwLCAweDMpOyAvKiBSZWdBNzVbNzo0XT0gMHgzICovCi0JCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4MTgsIEJJVDI4LCAweDApOyAvKiBSZWc4MThbMjhdPSAxJ2IwICovCi0JCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4MTgsIEJJVDI4LCAweDEpOyAvKiBSZWc4MThbMjhdPSAxJ2IxICovCisJCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4MTgsIEJJVCgyOCksIDB4MCk7IC8qIFJlZzgxOFsyOF09IDEnYjAgKi8KKwkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDgxOCwgQklUKDI4KSwgMHgxKTsgLyogUmVnODE4WzI4XT0gMSdiMSAqLwogCQl9IGVsc2UgewogCQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIDB4ODc0LCAweDFDQzAwMCwgcERNX1BTVGFibGUtPlJlZzg3NCk7Ci0JCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHhjNzAsIEJJVDMsIHBETV9QU1RhYmxlLT5SZWdDNzApOworCQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIDB4YzcwLCBCSVQoMyksIHBETV9QU1RhYmxlLT5SZWdDNzApOwogCQkJT0RNX1NldEJCUmVnKHBETV9PZG0sIDB4ODVjLCAweEZGMDAwMDAwLCBwRE1fUFNUYWJsZS0+UmVnODVDKTsKIAkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweGE3NCwgMHhGMDAwLCBwRE1fUFNUYWJsZS0+UmVnQTc0KTsKLQkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDgxOCwgQklUMjgsIDB4MCk7CisJCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4MTgsIEJJVCgyOCksIDB4MCk7CiAKIAkJCWlmIChwRE1fT2RtLT5TdXBwb3J0SUNUeXBlID09IE9ETV9SVEw4NzIzQSkKLQkJCQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4NzQsIEJJVDUsIDB4MCk7IC8qIFJlZzg3NFs1XT0gMWInMCAqLworCQkJCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDg3NCwgQklUKDUpLCAweDApOyAvKiBSZWc4NzRbNV09IDFiJzAgKi8KIAkJfQogCQlwRE1fUFNUYWJsZS0+UHJlUkZTdGF0ZSA9IHBETV9QU1RhYmxlLT5DdXJSRlN0YXRlOwogCX0KQEAgLTEyODksNyArMTI4MCw3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHByaW50aygiJXMgPT0+IHJzc2lfbGV2ZWw6MHglMDJ4LCBXaXJlbGVzc01vZGU6MHglMDJ4LCByYXRlX2JpdG1hcDoweCUwOHggXG4iLCBfX0ZVTkNUSU9OX18sIHJzc2lfbGV2ZWwsIFdpcmVsZXNzTW9kZSwgcmF0ZV9iaXRtYXApOyAqLworCS8qIHByaW50aygiJXMgPT0+IHJzc2lfbGV2ZWw6MHglMDJ4LCBXaXJlbGVzc01vZGU6MHglMDJ4LCByYXRlX2JpdG1hcDoweCUwOHggXG4iLCBfX2Z1bmNfXywgcnNzaV9sZXZlbCwgV2lyZWxlc3NNb2RlLCByYXRlX2JpdG1hcCk7ICovCiAJT0RNX1JUX1RSQUNFKHBETV9PZG0sIE9ETV9DT01QX1JBX01BU0ssIE9ETV9EQkdfTE9VRCwgKCIgPT0+IHJzc2lfbGV2ZWw6MHglMDJ4LCBXaXJlbGVzc01vZGU6MHglMDJ4LCByYXRlX2JpdG1hcDoweCUwOHggXG4iLCByc3NpX2xldmVsLCBXaXJlbGVzc01vZGUsIHJhdGVfYml0bWFwKSk7CiAKIAlyZXR1cm4gcmF0ZV9iaXRtYXA7CkBAIC0xMzQ1LDcgKzEzMzYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogcHJpbnRrKCI9PT4gJXMgXG4iLCBfX0ZVTkNUSU9OX18pOyAqLworCS8qIHByaW50aygiPT0+ICVzIFxuIiwgX19mdW5jX18pOyAqLwogCiAJZm9yIChpID0gMDsgaSA8IE9ETV9BU1NPQ0lBVEVfRU5UUllfTlVNOyBpKyspIHsKIAkJc3RydWN0IHN0YV9pbmZvICpwc3RhdCA9IHBETV9PZG0tPnBPRE1fU3RhSW5mb1tpXTsKQEAgLTE0MjQsNjAgKzE0MTUsMTMgQEAKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwogCXN0cnVjdCBkbV9wcml2ICpwZG1wcml2ID0gJnBIYWxEYXRhLT5kbXByaXY7CiAKLQlwZG1wcml2LT5iRHluYW1pY1R4UG93ZXJFbmFibGUgPSBmYWxzZTsKLQotCXBkbXByaXYtPkxhc3REVFBMdmwgPSBUeEhpZ2hQd3JMZXZlbF9Ob3JtYWw7CisJLyoKKwkgKiBUaGlzIGlzIG5ldmVyIGNoYW5nZWQsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNsZWFuIHVwIHRoZQorCSAqIGNvZGUgY2hlY2tpbmcgZm9yIGRpZmZlcmVudCB2YWx1ZXMgaW4gcnRsODcyM2FfcmY2MDUyLmMKKwkgKi8KIAlwZG1wcml2LT5EeW5hbWljVHhIaWdoUG93ZXJMdmwgPSBUeEhpZ2hQd3JMZXZlbF9Ob3JtYWw7CiB9CiAKLXZvaWQgb2RtX0R5bmFtaWNUeFBvd2VyMjNhU2F2ZVBvd2VySW5kZXgoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQotewotCXU4IGluZGV4OwotCXUzMiBQb3dlcl9JbmRleF9SRUdbNl0gPSB7MHhjOTAsIDB4YzkxLCAweGM5MiwgMHhjOTgsIDB4Yzk5LCAweGM5YX07Ci0KLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIgPSBwRE1fT2RtLT5BZGFwdGVyOwotCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEoQWRhcHRlcik7Ci0Jc3RydWN0IGRtX3ByaXYgKnBkbXByaXYgPSAmcEhhbERhdGEtPmRtcHJpdjsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA2OyBpbmRleCsrKQotCQlwZG1wcml2LT5Qb3dlckluZGV4X2JhY2t1cFtpbmRleF0gPSBydHdfcmVhZDgoQWRhcHRlciwgUG93ZXJfSW5kZXhfUkVHW2luZGV4XSk7Ci19Ci0KLXZvaWQgb2RtX0R5bmFtaWNUeFBvd2VyMjNhUmVzdG9yZVBvd2VySW5kZXgoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQotewotCXU4IGluZGV4OwotCXN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciA9IHBETV9PZG0tPkFkYXB0ZXI7Ci0KLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwotCXUzMiBQb3dlcl9JbmRleF9SRUdbNl0gPSB7MHhjOTAsIDB4YzkxLCAweGM5MiwgMHhjOTgsIDB4Yzk5LCAweGM5YX07Ci0Jc3RydWN0IGRtX3ByaXYgKnBkbXByaXYgPSAmcEhhbERhdGEtPmRtcHJpdjsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA2OyBpbmRleCsrKQotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFBvd2VyX0luZGV4X1JFR1tpbmRleF0sIHBkbXByaXYtPlBvd2VySW5kZXhfYmFja3VwW2luZGV4XSk7Ci19Ci0KLXZvaWQgb2RtX0R5bmFtaWNUeFBvd2VyMjNhV3JpdGVQb3dlckluZGV4KHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQl1OCBWYWx1ZSkKLXsKLQotCXU4IGluZGV4OwotCXUzMiBQb3dlcl9JbmRleF9SRUdbNl0gPSB7MHhjOTAsIDB4YzkxLCAweGM5MiwgMHhjOTgsIDB4Yzk5LCAweGM5YX07Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA2OyBpbmRleCsrKQotCQlPRE1fV3JpdGUxQnl0ZShwRE1fT2RtLCBQb3dlcl9JbmRleF9SRUdbaW5kZXhdLCBWYWx1ZSk7Ci0KLX0KLQotdm9pZCBvZG1fRHluYW1pY1R4UG93ZXIyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQotewotfQotCi12b2lkIG9kbV9EeW5hbWljVHhQb3dlcjIzYV85MkMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQotewotfQotCi12b2lkIG9kbV9EeW5hbWljVHhQb3dlcjIzYV85MkQoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQotewotfQotCiAvKiAzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogMyBSU1NJIE1vbml0b3IgKi8KIC8qIDMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0xNTc2LDIyICsxNTIwLDYgQEAKIHsKIH0KIAotdm9pZCBPRE1fSW5pdEFsbFRpbWVycyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pCi17Ci0Jc2V0dXBfdGltZXIoJnBETV9PZG0tPkRNX1NXQVRfVGFibGUuU3dBbnRlbm5hU3dpdGNoVGltZXIsCi0JCSAgICBvZG1fU3dBbnREaXZDaGtBbnRTd2l0Y2hDYWxsYmFjazIzYSwgKHVuc2lnbmVkIGxvbmcpcERNX09kbSk7Ci19Ci0KLXZvaWQgT0RNX0NhbmNlbEFsbFRpbWVycyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pCi17Ci0JZGVsX3RpbWVyX3N5bmMoJnBETV9PZG0tPkRNX1NXQVRfVGFibGUuU3dBbnRlbm5hU3dpdGNoVGltZXIpOwotfQotCi12b2lkIE9ETV9SZWxlYXNlQWxsVGltZXJzKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSkKLXsKLQlPRE1fUmVsZWFzZVRpbWVyKHBETV9PZG0sICZwRE1fT2RtLT5ETV9TV0FUX1RhYmxlLlN3QW50ZW5uYVN3aXRjaFRpbWVyKTsKLX0KLQogLyogZW5kaWYgKi8KIC8qIDMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCkBAIC0xNjU1LDcgKzE1ODMsOCBAQAogewogfQogCi12b2lkIE9ETV9Td0FudERpdkNoa1BlclBrdFJzc2koc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OCBTdGF0aW9uSUQsIHN0cnVjdCBvZG1fcGh5X2luZm8gKnBQaHlJbmZvKQordm9pZCBPRE1fU3dBbnREaXZDaGtQZXJQa3RSc3NpKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggU3RhdGlvbklELAorCQkJICAgICAgIHN0cnVjdCBwaHlfaW5mbyAqcFBoeUluZm8pCiB7CiB9CiAKQEAgLTE3MzksMTAgKzE2NjgsOCBAQAogCWlmIChwbWxtZWluZm8tPmFzc29jX0FQX3ZlbmRvciA+PSAgSFRfSU9UX1BFRVJfTUFYKQogCQlnb3RvIGRtX0NoZWNrRWRjYVR1cmJvX0VYSVQ7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQlpZiAoQlRfRGlzYWJsZUVEQ0FUdXJibyhBZGFwdGVyKSkKKwlpZiAocnRsODcyM2FfQlRfZGlzYWJsZV9FRENBX3R1cmJvKEFkYXB0ZXIpKQogCQlnb3RvIGRtX0NoZWNrRWRjYVR1cmJvX0VYSVQ7Ci0jZW5kaWYKIAogCS8qICBDaGVjayBpZiB0aGUgc3RhdHVzIG5lZWRzIHRvIGJlIGNoYW5nZWQuICovCiAJaWYgKChiYnRjaGFuZ2UpIHx8ICghcHJlY3Zwcml2LT5iSXNBbnlOb25CRVBrdHMpKSB7CkBAIC0xNzc0LDcgKzE3MDEsOCBAQAogCQkJCWVkY2FfcGFyYW0gPSBFRENBUGFyYW1bcG1sbWVpbmZvLT5hc3NvY19BUF92ZW5kb3JdW3RyYWZmaWNJbmRleF07CiAJCQllbHNlCiAJCQkJZWRjYV9wYXJhbSA9IEVEQ0FQYXJhbVtIVF9JT1RfUEVFUl9VTktOT1dOXVt0cmFmZmljSW5kZXhdOwotCQkJcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX0VEQ0FfQkVfUEFSQU0sIGVkY2FfcGFyYW0pOworCQkJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgUkVHX0VEQ0FfQkVfUEFSQU0sCisJCQkJCSAgZWRjYV9wYXJhbSk7CiAKIAkJCXBETV9PZG0tPkRNX0VEQ0FfVGFibGUucHJ2X3RyYWZmaWNfaWR4ID0gdHJhZmZpY0luZGV4OwogCQl9CkBAIC0xNzg0LDcgKzE3MTIsOCBAQAogCQkvKiAgVHVybiBPZmYgRURDQSB0dXJibyBoZXJlLiAqLwogCQkvKiAgUmVzdG9yZSBvcmlnaW5hbCBFRENBIGFjY29yZGluZyB0byB0aGUgZGVjbGFyYXRpb24gb2YgQVAuICovCiAJCWlmIChwRE1fT2RtLT5ETV9FRENBX1RhYmxlLmJDdXJyZW50VHVyYm9FRENBKSB7Ci0JCQlydHdfd3JpdGUzMihBZGFwdGVyLCBSRUdfRURDQV9CRV9QQVJBTSwgcEhhbERhdGEtPkFjUGFyYW1fQkUpOworCQkJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgUkVHX0VEQ0FfQkVfUEFSQU0sCisJCQkJCSAgcEhhbERhdGEtPkFjUGFyYW1fQkUpOwogCQkJcERNX09kbS0+RE1fRURDQV9UYWJsZS5iQ3VycmVudFR1cmJvRURDQSA9IGZhbHNlOwogCQl9CiAJfQpAQCAtMTgwNCwxMCArMTczMywxMCBAQAogCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDgwOCwgMHgzRkYsIHBvaW50KTsKIAogCS8qIFN0YXJ0IFBTRCBjYWxjdWxhdGlvbiwgUmVnODA4WzIyXT0gMC0+MSAqLwotCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDgwOCwgQklUMjIsIDEpOworCU9ETV9TZXRCQlJlZyhwRE1fT2RtLCAweDgwOCwgQklUKDIyKSwgMSk7CiAJLyogTmVlZCB0byB3YWl0IGZvciBIVyBQU0QgcmVwb3J0ICovCiAJdWRlbGF5KDMwKTsKLQlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4MDgsIEJJVDIyLCAwKTsKKwlPRE1fU2V0QkJSZWcocERNX09kbSwgMHg4MDgsIEJJVCgyMiksIDApOwogCS8qIFJlYWQgUFNEIHJlcG9ydCwgUmVnOEI0WzE1OjBdICovCiAJcHNkX3JlcG9ydCA9IE9ETV9HZXRCQlJlZyhwRE1fT2RtLCAweDhCNCwgYk1hc2tEV29yZCkgJiAweDAwMDBGRkZGOwogCkBAIC0xODQ1LDE2ICsxNzc0LDYgQEAKIH0KIAogLyogICovCi0vKiAgMjAxMS8wOS8yMiBNSCBBZGQgZm9yIDkyRCBnbG9iYWwgc3BpbiBsb2NrIHV0aWxpemF0aW9uLiAqLwotLyogICovCi12b2lkCi1vZG1fR2xvYmFsQWRhcHRlckNoZWNrKAotCQl2b2lkCi0JKQotewotfQkvKiAgb2RtX0dsb2JhbEFkYXB0ZXJDaGVjayAqLwotCi0vKiAgKi8KIC8qICBEZXNjcmlwdGlvbjogKi8KIC8qU2V0IFNpbmdsZS9EdWFsIEFudGVubmEgZGVmYXVsdCBzZXR0aW5nIGZvciBwcm9kdWN0cyB0aGF0IGRvIG5vdCBkbyBkZXRlY3Rpb24gaW4gYWR2YW5jZS4gKi8KIC8qICAqLwpAQCAtMTk0MSw3ICsxODYwLDcgQEAKIAlvZG1fUEhZX1NhdmVBRkVSZWdpc3RlcnMocERNX09kbSwgQUZFX1JFR184NzIzQSwgQUZFX0JhY2t1cCwgMTYpOwogCiAJLyogU2V0IFBTRCAxMjggcHRzICovCi0JT0RNX1NldEJCUmVnKHBETV9PZG0sIHJGUEdBMF9QU0RGdW5jdGlvbiwgQklUMTR8QklUMTUsIDB4MCk7ICAvKiAxMjggcHRzICovCisJT0RNX1NldEJCUmVnKHBETV9PZG0sIHJGUEdBMF9QU0RGdW5jdGlvbiwgQklUKDE0KSB8IEJJVCgxNSksIDB4MCk7CiAKIAkvKiAgVG8gU0VUIENIMSB0byBkbyAqLwogCU9ETV9TZXRSRlJlZyhwRE1fT2RtLCBSRl9QQVRIX0EsIE9ETV9DSEFOTkVMLCBiUkZSZWdPZmZzZXRNYXNrLCAweDAxKTsgICAgIC8qIENoYW5uZWwgMSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvb2RtX0hXQ29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9vZG1fSFdDb25maWcuYwppbmRleCA3MjQ0MTcwLi44MmIxYjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9vZG1fSFdDb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9vZG1fSFdDb25maWcuYwpAQCAtOTEsNyArOTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBvZG1fUnhQaHlTdGF0dXM5MkNTZXJpZXNfUGFyc2luZyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JCQkJCSAgICAgc3RydWN0IG9kbV9waHlfaW5mbyAqcFBoeUluZm8sCisJCQkJCSAgICAgc3RydWN0IHBoeV9pbmZvICpwUGh5SW5mbywKIAkJCQkJICAgICB1OCAqcFBoeVN0YXR1cywKIAkJCQkJICAgICBzdHJ1Y3Qgb2RtX3BhY2tldF9pbmZvICpwUGt0aW5mbykKIHsKQEAgLTI4MSw3ICsyODEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBvZG1fUHJvY2Vzc19SU1NJRm9yRE0oc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAotCQkJCSAgc3RydWN0IG9kbV9waHlfaW5mbyAqcFBoeUluZm8sCisJCQkJICBzdHJ1Y3QgcGh5X2luZm8gKnBQaHlJbmZvLAogCQkJCSAgc3RydWN0IG9kbV9wYWNrZXRfaW5mbyAqcFBrdGluZm8pCiB7CiAJczMyIFVuZGVjb3JhdGVkU21vb3RoZWRQV0RCLCBVbmRlY29yYXRlZFNtb290aGVkQ0NLOwpAQCAtMzQ3LDcgKzM0Nyw4IEBACiAJCQkJCQkJKFJTU0lfQXZlKSkgLyAoUnhfU21vb3RoX0ZhY3Rvcik7CiAJCQkJfQogCQkJfQotCQkJcEVudHJ5LT5yc3NpX3N0YXQuUGFja2V0TWFwID0gKHBFbnRyeS0+cnNzaV9zdGF0LlBhY2tldE1hcDw8MSkgfCBCSVQwOworCQkJcEVudHJ5LT5yc3NpX3N0YXQuUGFja2V0TWFwID0KKwkJCQkocEVudHJ5LT5yc3NpX3N0YXQuUGFja2V0TWFwPDwxKSB8IEJJVCgwKTsKIAkJfSBlbHNlIHsKIAkJCVJTU0lfQXZlID0gcFBoeUluZm8tPlJ4UFdEQkFsbDsKIApAQCAtMzc3LDcgKzM3OCw4IEBACiAJCQlwRW50cnktPnJzc2lfc3RhdC5WYWxpZEJpdCsrOwogCiAJCWZvciAoaSA9IDA7IGkgPCBwRW50cnktPnJzc2lfc3RhdC5WYWxpZEJpdDsgaSsrKQotCQkJT0ZETV9wa3QgKz0gKHU4KShwRW50cnktPnJzc2lfc3RhdC5QYWNrZXRNYXA+PmkpJkJJVDA7CisJCQlPRkRNX3BrdCArPQorCQkJCSh1OCkocEVudHJ5LT5yc3NpX3N0YXQuUGFja2V0TWFwPj5pKSAmIEJJVCgwKTsKIAogCQlpZiAocEVudHJ5LT5yc3NpX3N0YXQuVmFsaWRCaXQgPT0gNjQpIHsKIAkJCVdlaWdodGluZyA9ICgoT0ZETV9wa3Q8PDQpID4gNjQpPzY0OihPRkRNX3BrdDw8NCk7CkBAIC0zOTYsNyArMzk4LDcgQEAKIAogLyogIEVuZGlhbm5lc3MgYmVmb3JlIGNhbGxpbmcgdGhpcyBBUEkgKi8KIHN0YXRpYyB2b2lkIE9ETV9QaHlTdGF0dXNRdWVyeTIzYV85MkNTZXJpZXMoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAotCQkJCQkgc3RydWN0IG9kbV9waHlfaW5mbyAqcFBoeUluZm8sCisJCQkJCSBzdHJ1Y3QgcGh5X2luZm8gKnBQaHlJbmZvLAogCQkJCQkgdTggKnBQaHlTdGF0dXMsCiAJCQkJCSBzdHJ1Y3Qgb2RtX3BhY2tldF9pbmZvICpwUGt0aW5mbykKIHsKQEAgLTQxMSw3ICs0MTMsNyBAQAogCX0KIH0KIAotdm9pZCBPRE1fUGh5U3RhdHVzUXVlcnkyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBzdHJ1Y3Qgb2RtX3BoeV9pbmZvICpwUGh5SW5mbywKK3ZvaWQgT0RNX1BoeVN0YXR1c1F1ZXJ5MjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgc3RydWN0IHBoeV9pbmZvICpwUGh5SW5mbywKIAkJCSAgIHU4ICpwUGh5U3RhdHVzLCBzdHJ1Y3Qgb2RtX3BhY2tldF9pbmZvICpwUGt0aW5mbykKIHsKIAlPRE1fUGh5U3RhdHVzUXVlcnkyM2FfOTJDU2VyaWVzKHBETV9PZG0sIHBQaHlJbmZvLCBwUGh5U3RhdHVzLCBwUGt0aW5mbyk7CkBAIC00MjYsMTIgKzQyOCw5IEBACiAKIH0KIAotZW51bSBoYWxfc3RhdHVzCi1PRE1fQ29uZmlnUkZXaXRoSGVhZGVyRmlsZTIzYSgKLQlzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JZW51bSBSRl9SQURJT19QQVRICUNvbnRlbnQsCi0JZW51bSBSRl9SQURJT19QQVRICWVSRlBhdGgKLSAgKQoraW50IE9ETV9Db25maWdSRldpdGhIZWFkZXJGaWxlMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKKwkJCQkgIGVudW0gUkZfUkFESU9fUEFUSCBDb250ZW50LAorCQkJCSAgZW51bSBSRl9SQURJT19QQVRIIGVSRlBhdGgpCiB7CiAJT0RNX1JUX1RSQUNFKHBETV9PZG0sIE9ETV9DT01QX0lOSVQsIE9ETV9EQkdfTE9VRCwKIAkJICAgICAoIj09PT5PRE1fQ29uZmlnUkZXaXRoSGVhZGVyRmlsZTIzYVxuIikpOwpAQCAtNDQ2LDE0ICs0NDUsMTEgQEAKIAl9CiAJT0RNX1JUX1RSQUNFKHBETV9PZG0sIE9ETV9DT01QX0lOSVQsIE9ETV9EQkdfVFJBQ0UsCiAJCSAgICAgKCJPRE1fQ29uZmlnUkZXaXRoSGVhZGVyRmlsZTIzYTogUmFkaW8gTm8gJXhcbiIsIGVSRlBhdGgpKTsKLQlyZXR1cm4gSEFMX1NUQVRVU19TVUNDRVNTOworCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotZW51bSBoYWxfc3RhdHVzCi1PRE1fQ29uZmlnQkJXaXRoSGVhZGVyRmlsZTIzYSgKLQlzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JZW51bSBvZG1fYmJfY29uZmlnX3R5cGUJCUNvbmZpZ1R5cGUKLQkpCitpbnQgT0RNX0NvbmZpZ0JCV2l0aEhlYWRlckZpbGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAorCQkJCSAgZW51bSBvZG1fYmJfY29uZmlnX3R5cGUgQ29uZmlnVHlwZSkKIHsKIAlpZiAocERNX09kbS0+U3VwcG9ydElDVHlwZSA9PSBPRE1fUlRMODcyM0EpIHsKIAkJaWYgKENvbmZpZ1R5cGUgPT0gQ09ORklHX0JCX1BIWV9SRUcpCkBAIC00NjUsMTcgKzQ2MSwxMiBAQAogCQlPRE1fUlRfVFJBQ0UocERNX09kbSwgT0RNX0NPTVBfSU5JVCwgT0RNX0RCR19MT1VELAogCQkJICAgICAoIiA9PT0+IHBoeV9Db25maWdCQldpdGhIZWFkZXJGaWxlKCkgYWdjOlJ0bDg3MjNQSFlfUkVHXzFUQXJyYXlcbiIpKTsKIAl9Ci0JcmV0dXJuIEhBTF9TVEFUVVNfU1VDQ0VTUzsKKwlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLWVudW0gaGFsX3N0YXR1cwotT0RNX0NvbmZpZ01BQ1dpdGhIZWFkZXJGaWxlMjNhKAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbQotCSkKK2ludCBPRE1fQ29uZmlnTUFDV2l0aEhlYWRlckZpbGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKQogewotCXU4IHJlc3VsdCA9IEhBTF9TVEFUVVNfU1VDQ0VTUzsKLQogCWlmIChwRE1fT2RtLT5TdXBwb3J0SUNUeXBlID09IE9ETV9SVEw4NzIzQSkKIAkJUkVBRF9BTkRfQ09ORklHX01QKDg3MjNBLCBfTUFDX1JFR18pOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIF9TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvb2RtX2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvb2RtX2ludGVyZmFjZS5jCmluZGV4IGJlZjEyNjkuLmYwM2Y2ZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9vZG1faW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvb2RtX2ludGVyZmFjZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAvKiAgKi8KIC8qICBPRE0gSU8gUmVsYXRpdmUgQVBJLiAqLwogLyogICovCisjaW5jbHVkZSA8dXNiX29wc19saW51eC5oPgogCiB1OCBPRE1fUmVhZDFCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKIAl1MzIJCQlSZWdBZGRyCkBAIC0yOCw1OSArMjksNDIgQEAKIHsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIgPSBwRE1fT2RtLT5BZGFwdGVyOwogCi0JcmV0dXJuIHJ0d19yZWFkOChBZGFwdGVyLCBSZWdBZGRyKTsKKwlyZXR1cm4gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIFJlZ0FkZHIpOwogfQogCi11MTYgT0RNX1JlYWQyQnl0ZShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JdTMyCQkJUmVnQWRkcgotCSkKK3UxNiBPRE1fUmVhZDJCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIpCiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyID0gcERNX09kbS0+QWRhcHRlcjsKIAotCXJldHVybiBydHdfcmVhZDE2KEFkYXB0ZXIsIFJlZ0FkZHIpOworCXJldHVybiBydGw4NzIzYXVfcmVhZDE2KEFkYXB0ZXIsIFJlZ0FkZHIpOwogfQogCi11MzIgT0RNX1JlYWQ0Qnl0ZShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JdTMyCQkJUmVnQWRkcgotCSkKK3UzMiBPRE1fUmVhZDRCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIpCiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyID0gcERNX09kbS0+QWRhcHRlcjsKIAotCXJldHVybiBydHdfcmVhZDMyKEFkYXB0ZXIsIFJlZ0FkZHIpOworCXJldHVybiBydGw4NzIzYXVfcmVhZDMyKEFkYXB0ZXIsIFJlZ0FkZHIpOwogfQogCi12b2lkIE9ETV9Xcml0ZTFCeXRlKAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQl1MzIJCQlSZWdBZGRyLAotCXU4CQkJRGF0YQotCSkKK3ZvaWQgT0RNX1dyaXRlMUJ5dGUoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1MzIgUmVnQWRkciwgdTggRGF0YSkKIHsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIgPSBwRE1fT2RtLT5BZGFwdGVyOwogCi0JcnR3X3dyaXRlOChBZGFwdGVyLCBSZWdBZGRyLCBEYXRhKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJlZ0FkZHIsIERhdGEpOwogfQogCi12b2lkIE9ETV9Xcml0ZTJCeXRlKAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQl1MzIJCQlSZWdBZGRyLAotCXUxNgkJCURhdGEKLQkpCit2b2lkIE9ETV9Xcml0ZTJCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIsIHUxNiBEYXRhKQogewogCXN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciA9IHBETV9PZG0tPkFkYXB0ZXI7CiAKLQlydHdfd3JpdGUxNihBZGFwdGVyLCBSZWdBZGRyLCBEYXRhKTsKKwlydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCBSZWdBZGRyLCBEYXRhKTsKIH0KIAotdm9pZCBPRE1fV3JpdGU0Qnl0ZSgKLQlzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JdTMyCQkJUmVnQWRkciwKLQl1MzIJCQlEYXRhCi0JKQordm9pZCBPRE1fV3JpdGU0Qnl0ZShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBSZWdBZGRyLCB1MzIgRGF0YSkKIHsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIgPSBwRE1fT2RtLT5BZGFwdGVyOwogCi0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUmVnQWRkciwgRGF0YSk7Ci0KKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSZWdBZGRyLCBEYXRhKTsKIH0KIAogdm9pZCBPRE1fU2V0TUFDUmVnKApAQCAtMTUzLDg0ICsxMzcsMyBAQAogCiAJcmV0dXJuIFBIWV9RdWVyeVJGUmVnKEFkYXB0ZXIsIGVSRlBhdGgsIFJlZ0FkZHIsIEJpdE1hc2spOwogfQotCi0vKiAgKi8KLS8qICBPRE0gTWVtb3J5IHJlbGF0aXZlIEFQSS4gKi8KLS8qICAqLwotdm9pZCBPRE1fQWxsb2NhdGVNZW1vcnkoCi0Jc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAotCXZvaWQgKipwUHRyLAotCXUzMgkJbGVuZ3RoCi0JKQotewotCSpwUHRyID0gcnR3X3p2bWFsbG9jKGxlbmd0aCk7Ci19Ci0KLS8qICBsZW5ndGggY291bGQgYmUgaWdub3JlZCwgdXNlZCB0byBkZXRlY3QgbWVtb3J5IGxlYWthZ2UuICovCi12b2lkIE9ETV9GcmVlTWVtb3J5KAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQl2b2lkICpwUHRyLAotCXUzMgkJbGVuZ3RoCi0JKQotewotCXJ0d192bWZyZWUocFB0ciwgbGVuZ3RoKTsKLX0KLQotLyogICovCi0vKiAgT0RNIE1JU0MgcmVsYXRpdmUgQVBJLiAqLwotLyogICovCi12b2lkCi1PRE1fQWNxdWlyZVNwaW5Mb2NrKAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQllbnVtIHJ0X3NwaW5sb2NrX3R5cGUJdHlwZQotCSkKLXsKLX0KLQotdm9pZCBPRE1fUmVsZWFzZVNwaW5Mb2NrKAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQllbnVtIHJ0X3NwaW5sb2NrX3R5cGUJdHlwZQotCSkKLXsKLX0KLQotLyogICovCi0vKiAgV29yayBpdGVtIHJlbGF0aXZlIEFQSS4gRk9yIE1QIGRyaXZlciBvbmx5fiEgKi8KLS8qICAqLwotdm9pZCBPRE1fSW5pdGlhbGl6ZVdvcmtJdGVtKAotCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwKLQl2b2lkICpwUnRXb3JrSXRlbSwKLQlSVF9XT1JLSVRFTV9DQUxMX0JBQ0sJCVJ0V29ya0l0ZW1DYWxsYmFjaywKLQl2b2lkICpwQ29udGV4dCwKLQljb25zdCBjaGFyICpzeklECi0JKQotewotfQotCi0vKiAgKi8KLS8qICBPRE0gVGltZXIgcmVsYXRpdmUgQVBJLiAqLwotLyogICovCi12b2lkIE9ETV9TZXRUaW1lcihzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsIHUzMiBtc0RlbGF5KQotewotCW1vZF90aW1lcihwVGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zRGVsYXkpKTsgLyogbXMgKi8KLX0KLQotdm9pZCBPRE1fUmVsZWFzZVRpbWVyKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgc3RydWN0IHRpbWVyX2xpc3QgKnBUaW1lcikKLXsKLX0KLQotLyogICovCi0vKiAgT0RNIEZXIHJlbGF0aXZlIEFQSS4gKi8KLS8qICAqLwotdTMyIE9ETV9GaWxsSDJDQ21kKAotCXU4ICpwSDJDQnVmZmVyLAotCXUzMgkJSDJDQnVmZmVyTGVuLAotCXUzMgkJQ21kTnVtLAotCXUzMiAqcEVsZW1lbnRJRCwKLQl1MzIgKnBDbWRMZW4sCi0JdTggKipwQ21iQnVmZmVyLAotCXU4ICpDbWRTdGFydFNlcQotCSkKLXsKLQlyZXR1cm4JdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2J0LWNvZXhpc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2J0LWNvZXhpc3QuYwppbmRleCA5ZDczOGQ3Li5jMDAxMDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9idC1jb2V4aXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2FfYnQtY29leGlzdC5jCkBAIC0xNSwxMSArMTUsMTAgQEAKICNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KICNpbmNsdWRlIDxydHdfaW9jdGxfc2V0Lmg+CisjaW5jbHVkZSA8dXNiX29wc19saW51eC5oPgogCiAjZGVmaW5lIERJU19QU19SWF9CQ04KIAotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAotCiB1MzIgQlRDb2V4RGJnTGV2ZWwgPSBfYnRfZGJnX29mZl87CiAKICNkZWZpbmUgUlRQUklOVChfQ29tcCwgX0xldmVsLCBGbXQpXApAQCAtNzAsNyArNjksNiBAQAogCQlwcmludGsoX1RpdGxlU3RyaW5nKTsJCQkJCVwKIAkJcHJpbnRrKCI6ICVkLCA8JXM+XG4iLCBfTGVuLCBidWZmZXIpOwkJCVwKIAl9Ci0jZW5kaWYKIAogI2RlZmluZSBEQ01EX1ByaW50ZiguLi4pCiAjZGVmaW5lIFJUX0FTU0VSVCguLi4pCkBAIC0xMDAsNyArOTgsNiBAQAogCiAvKiAgcG93ZXIgc2F2aW5nICovCiAKLSNpZmRlZiBfX0JUX0NfXyAvKiAgQ09NTU9NL0JULmMgKi8KIC8qICA9PT09PSBCZWxvdyB0aGlzIGxpbmUgaXMgc3luYyBmcm9tIFNENyBkcml2ZXIgQ09NTU9NL0JULmMgPT09PT0gKi8KIAogc3RhdGljIHU4IEJUX09wZXJhdGlvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQpAQCAtMTM4LDE0ICsxMzUsMTQgQEAKIAlCVERNX1NpZ25hbENvbXBlbnNhdGlvbihwYWRhcHRlciwgcnNzaV93aWZpLCByc3NpX2J0KTsKIH0KIAotdm9pZCBCVF9XaWZpU2Nhbk5vdGlmeShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBzY2FuVHlwZSkKK3ZvaWQgcnRsODcyM2FfQlRfd2lmaXNjYW5fbm90aWZ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHNjYW5UeXBlKQogewogCUJUSENJX1dpZmlTY2FuTm90aWZ5KHBhZGFwdGVyLCBzY2FuVHlwZSk7CiAJQlRETV9DaGVja0FudFNlbE1vZGUocGFkYXB0ZXIpOwogCUJURE1fV2lmaVNjYW5Ob3RpZnkocGFkYXB0ZXIsIHNjYW5UeXBlKTsKIH0KIAotdm9pZCBCVF9XaWZpQXNzb2NpYXRlTm90aWZ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGFjdGlvbikKK3ZvaWQgcnRsODcyM2FfQlRfd2lmaWFzc29jaWF0ZV9ub3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggYWN0aW9uKQogewogCS8qICBhY3Rpb24gOiAqLwogCS8qICB0cnVlID0gYXNzb2NpYXRlIHN0YXJ0ICovCkBAIC0xNTYsMzYgKzE1MywxMiBAQAogCUJURE1fV2lmaUFzc29jaWF0ZU5vdGlmeShwYWRhcHRlciwgYWN0aW9uKTsKIH0KIAotdm9pZCBCVF9XaWZpTWVkaWFTdGF0dXNOb3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBydF9tZWRpYV9zdGF0dXMgbXN0YXR1cykKLXsKLQlCVERNX01lZGlhU3RhdHVzTm90aWZ5KHBhZGFwdGVyLCBtc3RhdHVzKTsKLX0KLQotdm9pZCBCVF9TcGVjaWFsUGFja2V0Tm90aWZ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JQlRETV9Gb3JEaGNwKHBhZGFwdGVyKTsKLX0KLQogdm9pZCBCVF9IYWx0UHJvY2VzcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCUJURE1fRm9ySGFsdChwYWRhcHRlcik7CiB9CiAKLXZvaWQgQlRfTHBzTGVhdmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlCVERNX0xwc0xlYXZlKHBhZGFwdGVyKTsKLX0KLQogLyogID09PT09IEVuZCBvZiBzeW5jIGZyb20gU0Q3IGRyaXZlciBDT01NT00vQlQuYyA9PT09PSAqLwotI2VuZGlmCi0KLSNpZmRlZiBfX0JUX0hBTkRMRVBBQ0tFVF9DX18gLyogIENPTU1PTS9idF9oYW5kbGVwYWNrZXQuYyAqLwotLyogID09PT09IEJlbG93IHRoaXMgbGluZSBpcyBzeW5jIGZyb20gU0Q3IGRyaXZlciBDT01NT00vYnRfaGFuZGxlcGFja2V0LmMgPT09PT0gKi8KLQotLyogID09PT09IEVuZCBvZiBzeW5jIGZyb20gU0Q3IGRyaXZlciBDT01NT00vYnRfaGFuZGxlcGFja2V0LmMgPT09PT0gKi8KLSNlbmRpZgotCi0jaWZkZWYgX19CVF9IQ0lfQ19fIC8qICBDT01NT00vYnRfaGNpLmMgKi8KIAogI2RlZmluZSBpNjRmbXQJCSJsbCIKICNkZWZpbmUgVUlOVDY0X0ModikgICh2KQpAQCAtMzk0NCw3ICszOTE3LDYgQEAKIAllbnVtIGhjaV9zdGF0dXMgc3RhdHVzID0gSENJX1NUQVRVU19TVUNDRVNTOwogCXN0cnVjdCBidF8zMGluZm8gKnBCVEluZm8gPSBHRVRfQlRfSU5GTyhwYWRhcHRlcik7CiAJc3RydWN0IGJ0X2hjaV9pbmZvICpwQnRIY2lJbmZvID0gJnBCVEluZm8tPkJ0SGNpSW5mbzsKLQl1OCBiRmlsdGVyT3V0Tm9uQXNzb2NpYXRlZEJTU0lEID0gdHJ1ZTsKIAogCWlmICghcEJ0SGNpSW5mby0+YkluVGVzdE1vZGUpIHsKIAkJUlRQUklOVChGSU9DVEwsIChJT0NUTF9CVF9FVkVOVHxJT0NUTF9CVF9MT0dPKSwgKCJOb3QgaW4gVGVzdCBtb2RlLCByZXR1cm4gc3RhdHVzID0gSENJX1NUQVRVU19DTURfRElTQUxMT1dcbiIpKTsKQEAgLTM5NTYsNyArMzkyOCw3IEBACiAKIAlkZWxfdGltZXJfc3luYygmcEJUSW5mby0+QlRUZXN0U2VuZFBhY2tldFRpbWVyKTsKIAotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQ0hFQ0tfQlNTSUQsICh1OCAqKSgmYkZpbHRlck91dE5vbkFzc29jaWF0ZWRCU1NJRCkpOworCXJ0bDg3MjNhX2NoZWNrX2Jzc2lkKHBhZGFwdGVyLCB0cnVlKTsKIAogCS8qIHNlbmQgY29tbWFuZCBjb21wbGV0ZSBldmVudCBoZXJlIHdoZW4gYWxsIGRhdGEgYXJlIHJlY2VpdmVkLiAqLwogCXsKQEAgLTQwNTcsOCArNDAyOSw3IEBACiAJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKSk7CiAJCVJUUFJJTlQoRklPQ1RMLCAoSU9DVExfQlRfRVZFTlR8SU9DVExfQlRfTE9HTyksICgiVFggU2luZ2xlIFRlc3QgXG4iKSk7CiAJfSBlbHNlIGlmIChwQnRIY2lJbmZvLT5UZXN0U2NlbmFyaW8gPT0gMHgwMikgewotCQl1OCBiRmlsdGVyT3V0Tm9uQXNzb2NpYXRlZEJTU0lEID0gZmFsc2U7Ci0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQ0hFQ0tfQlNTSUQsICh1OCAqKSgmYkZpbHRlck91dE5vbkFzc29jaWF0ZWRCU1NJRCkpOworCQlydGw4NzIzYV9jaGVja19ic3NpZChwYWRhcHRlciwgZmFsc2UpOwogCQlSVFBSSU5UKEZJT0NUTCwgKElPQ1RMX0JUX0VWRU5UfElPQ1RMX0JUX0xPR08pLCAoIlJlY2VpdmUgRnJhbWUgVGVzdCBcbiIpKTsKIAl9CiAKQEAgLTQ2NzQsMTAgKzQ2NDUsMTAgQEAKIAogCQkvKiAgZm9yIHJhdGUgYWRhcHRpdmUgKi8KIAotCQlpZiAocGFkYXB0ZXItPkhhbEZ1bmMuVXBkYXRlUkFNYXNrSGFuZGxlcikKLQkJCXBhZGFwdGVyLT5IYWxGdW5jLlVwZGF0ZVJBTWFza0hhbmRsZXIocGFkYXB0ZXIsIE1BWF9GV19TVVBQT1JUX01BQ0lEX05VTS0xLUVudHJ5TnVtLCAwKTsKKwkJcnRsODcyM2FfdXBkYXRlX3JhbWFzayhwYWRhcHRlciwKKwkJCQkgICAgICAgTUFYX0ZXX1NVUFBPUlRfTUFDSURfTlVNLTEtRW50cnlOdW0sIDApOwogCi0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfQkFTSUNfUkFURSwgcGFkYXB0ZXItPm1sbWVwcml2LmN1cl9uZXR3b3JrLm5ldHdvcmsuU3VwcG9ydGVkUmF0ZXMpOworCQlIYWxTZXRCcmF0ZUNmZzIzYShwYWRhcHRlciwgcGFkYXB0ZXItPm1sbWVwcml2LmN1cl9uZXR3b3JrLm5ldHdvcmsuU3VwcG9ydGVkUmF0ZXMpOwogCQlCVERNX1NldEZ3Q2hubEluZm8ocGFkYXB0ZXIsIFJUX01FRElBX0NPTk5FQ1QpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTIxNSw5ICs1MTg2LDYgQEAKIH0KIAogLyogID09PT09IEVuZCBvZiBzeW5jIGZyb20gU0Q3IGRyaXZlciBDT01NT00vYnRfaGNpLmMgPT09PT0gKi8KLSNlbmRpZgotCi0jaWZkZWYgX19IQUxCVEM4NzIzMUFOVF9DX18gLyogIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMzFBbnQuYyAqLwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgQnRTdGF0ZVN0cmluZ1tdID0gewogCSJCVF9ESVNBQkxFRCIsCkBAIC01Mjg2LDcgKzUyNTQsNyBAQAogewogCXU4IG9sZFZhbCwgbmV3VmFsOwogCi0Jb2xkVmFsID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDU1MCk7CisJb2xkVmFsID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCAweDU1MCk7CiAKIAlpZiAoZW5hYmxlKQogCQluZXdWYWwgPSBvbGRWYWwgfCBFTl9CQ05fRlVOQ1RJT047CkBAIC01Mjk0LDcgKzUyNjIsNyBAQAogCQluZXdWYWwgPSBvbGRWYWwgJiB+RU5fQkNOX0ZVTkNUSU9OOwogCiAJaWYgKG9sZFZhbCAhPSBuZXdWYWwpCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIDB4NTUwLCBuZXdWYWwpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDU1MCwgbmV3VmFsKTsKIH0KIAogc3RhdGljIHU4IGJ0ZG1fSXMxQW50UHNUZG1hU3RhdGVDaGFuZ2Uoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKQEAgLTUzOTMsOCArNTM2MSw4IEBACiAJCWNhc2UgMjk6IC8qICBXaUZpIERIQ1AvU2l0ZSBTdXJ2ZXkgJiBCVCBBQ0wgYnVzeSAqLwogCQkJaWYgKGJ0ZG1fSXMxQW50UHNUZG1hU3RhdGVDaGFuZ2UocGFkYXB0ZXIpKSB7CiAJCQkJQlRETV9TZXRGdzNhKHBhZGFwdGVyLCAweGViLCAweDFhLCAweDFhLCAweDAxLCAweDE4KTsKLQkJCQlydHdfd3JpdGUzMihwYWRhcHRlciwgMHg2YzAsIDB4NWFmYTVhZmEpOwotCQkJCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDZjNCwgMHg1YWZhNWFmYSk7CisJCQkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4NmMwLCAweDVhZmE1YWZhKTsKKwkJCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgMHg2YzQsIDB4NWFmYTVhZmEpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMzA6IC8qICBXaUZpIGlkbGUgJiBCVCBJbnF1aXJ5ICovCkBAIC01NDM3LDcgKzU0MDUsOCBAQAogCQkJCS8qICBBbnRlbm5hIGNvbnRyb2wgYnkgUFRBLCAweDg3MCA9IDB4MzEwICovCiAJCQkJQlRETV9TZXRGdzNhKHBhZGFwdGVyLCAweDAsIDB4MCwgMHgwLCAweDgsIDB4MCk7CiAJCQl9Ci0JCQlydHdfd3JpdGUxNihwYWRhcHRlciwgMHg4NjAsIDB4MjEwKTsgLyogIFN3aXRjaCBBbnRlbm5hIHRvIEJUICovCisJCQkvKiAgU3dpdGNoIEFudGVubmEgdG8gQlQgKi8KKwkJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCAweDg2MCwgMHgyMTApOwogCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAweDg2MCA9IDB4MjEwLCBTd2l0Y2ggQW50ZW5uYSB0byBCVFxuIikpOwogCQkJYnJlYWs7CiAJCWNhc2UgOToKQEAgLTU0NDUsNyArNTQxNCw4IEBACiAJCQkJLyogIEFudGVubmEgY29udHJvbCBieSBQVEEsIDB4ODcwID0gMHgzMTAgKi8KIAkJCQlCVERNX1NldEZ3M2EocGFkYXB0ZXIsIDB4MCwgMHgwLCAweDAsIDB4OCwgMHgwKTsKIAkJCX0KLQkJCXJ0d193cml0ZTE2KHBhZGFwdGVyLCAweDg2MCwgMHgxMTApOyAvKiAgU3dpdGNoIEFudGVubmEgdG8gV2lGaSAqLworCQkJLyogIFN3aXRjaCBBbnRlbm5hIHRvIFdpRmkgKi8KKwkJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCAweDg2MCwgMHgxMTApOwogCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAweDg2MCA9IDB4MTEwLCBTd2l0Y2ggQW50ZW5uYSB0byBXaUZpXG4iKSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNTUzMSw3ICs1NTAxLDcgQEAKIAkJCWlmICghYlRETUFPbikgewogCQkJCWJ0ZG1fMUFudFBzVGRtYShwYWRhcHRlciwgZmFsc2UsIHRkbWFUeXBlKTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKChCVF9Jc0J0RGlzYWJsZWQocGFkYXB0ZXIpKSB8fAorCQkJCWlmICghcnRsODcyM2FfQlRfZW5hYmxlZChwYWRhcHRlcikgfHwKIAkJCQkgICAgKHBIYWxEYXRhLT5idF9jb2V4aXN0LmhhbENvZXg4NzIzLmMyaEJ0SW5mbyA9PSBCVF9JTkZPX1NUQVRFX05PX0NPTk5FQ1RJT04pIHx8CiAJCQkJICAgIChwSGFsRGF0YS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5jMmhCdEluZm8gPT0gQlRfSU5GT19TVEFURV9DT05ORUNUX0lETEUpIHx8CiAJCQkJICAgICh0ZG1hVHlwZSA9PSAyOSkpCkBAIC01NTc1LDI0ICs1NTQ1LDI4IEBACiBzdGF0aWMgdm9pZCBidGRtXzFBbnRQdGFQYXJhUmVsb2FkKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJLyogIFBUQSBwYXJhbWV0ZXIgKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCAweDZjYywgMHgwKTsJCQkvKiAgMS1BbnQgY29leCAqLwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDZjOCwgMHhmZmZmKTsJCS8qICB3aWZpIGJyZWFrIHRhYmxlICovCi0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIDB4NmM0LCAweDU1NTU1NTU1KTsJLyogIGNvZXggdGFibGUgKi8KKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDZjYywgMHgwKTsJCS8qICAxLUFudCBjb2V4ICovCisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4NmM4LCAweGZmZmYpOwkvKiAgd2lmaSBicmVhayB0YWJsZSAqLworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweDZjNCwgMHg1NTU1NTU1NSk7CS8qICBjb2V4IHRhYmxlICovCiAKIAkvKiAgQW50ZW5uYSBzd2l0Y2ggY29udHJvbCBwYXJhbWV0ZXIgKi8KLQlydHdfd3JpdGUzMihwYWRhcHRlciwgMHg4NTgsIDB4YWFhYWFhYWEpOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweDg1OCwgMHhhYWFhYWFhYSk7CiAJaWYgKElTXzg3MjNBX0FfQ1VUKEdFVF9IQUxfREFUQShwYWRhcHRlciktPlZlcnNpb25JRCkpIHsKLQkJcnR3X3dyaXRlMzIocGFkYXB0ZXIsIDB4ODcwLCAweDApOwkvKiAgU1BEVChjb25uZWN0ZWQgd2l0aCBUUlNXKSBjb250cm9sIGJ5IGhhcmR3YXJlIFBUQSAqLwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCAweDQwLCAweDI0KTsKKwkJLyogIFNQRFQoY29ubmVjdGVkIHdpdGggVFJTVykgY29udHJvbCBieSBoYXJkd2FyZSBQVEEgKi8KKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4ODcwLCAweDApOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDQwLCAweDI0KTsKIAl9IGVsc2UgewotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCAweDQwLCAweDIwKTsKLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIDB4ODYwLCAweDIxMCk7CS8qICBzZXQgYW50ZW5uYSBhdCBidCBzaWRlIGlmIEFOVFNXIGlzIHNvZnR3YXJlIGNvbnRyb2wgKi8KLQkJcnR3X3dyaXRlMzIocGFkYXB0ZXIsIDB4ODcwLCAweDMwMCk7CS8qICBTUERUKGNvbm5lY3RlZCB3aXRoIFRSU1cpIGNvbnRyb2wgYnkgaGFyZHdhcmUgUFRBICovCi0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDg3NCwgMHgyMjgwNDAwMCk7CS8qICBBTlRTVyBrZWVwIGJ5IEdOVF9CVCAqLworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDQwLCAweDIwKTsKKwkJLyogIHNldCBhbnRlbm5hIGF0IGJ0IHNpZGUgaWYgQU5UU1cgaXMgc29mdHdhcmUgY29udHJvbCAqLworCQlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgMHg4NjAsIDB4MjEwKTsKKwkJLyogIFNQRFQoY29ubmVjdGVkIHdpdGggVFJTVykgY29udHJvbCBieSBoYXJkd2FyZSBQVEEgKi8KKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4ODcwLCAweDMwMCk7CisJCS8qICBBTlRTVyBrZWVwIGJ5IEdOVF9CVCAqLworCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgMHg4NzQsIDB4MjI4MDQwMDApOwogCX0KIAogCS8qICBjb2V4aXN0ZW5jZSBwYXJhbWV0ZXJzICovCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgMHg3NzgsIDB4MSk7CS8qICBlbmFibGUgUlRLIG1vZGUgUFRBICovCisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgMHg3NzgsIDB4MSk7CS8qICBlbmFibGUgUlRLIG1vZGUgUFRBICovCiAKIAkvKiAgQlQgZG9uJ3QgaWdub3JlIFdMQU5fQWN0ICovCiAJYnRkbV9TZXRGd0lnbm9yZVdsYW5BY3QocGFkYXB0ZXIsIGZhbHNlKTsKQEAgLTU3NjQsMTMgKzU3MzgsMTcgQEAKIAlwQnRkbTg3MjMgPSAmcEJ0Q29leC0+YnRkbTFBbnQ7CiAJQnRTdGF0ZSA9IHBCdENvZXgtPmMyaEJ0SW5mbzsKIAotCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgV2lGaSBpcyAlc1xuIiwgQlRETV9Jc1dpZmlCdXN5KHBhZGFwdGVyKT8iQnVzeSI6IklETEUiKSk7Ci0JUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCBCVCBpcyAlc1xuIiwgQnRTdGF0ZVN0cmluZ1tCdFN0YXRlXSkpOworCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgV2lGaSBpcyAlc1xuIiwKKwkJCQlCVERNX0lzV2lmaUJ1c3kocGFkYXB0ZXIpPyJCdXN5IjoiSURMRSIpKTsKKwlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIEJUIGlzICVzXG4iLAorCQkJCUJ0U3RhdGVTdHJpbmdbQnRTdGF0ZV0pKTsKIAogCXBhZGFwdGVyLT5wd3JjdHJscHJpdi5idGNvZXhfcmZvbiA9IGZhbHNlOwogCi0JaWYgKCghQlRETV9Jc1dpZmlCdXN5KHBhZGFwdGVyKSkgJiYgKCFjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSAmJgotCSAgICAoKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9OT19DT05ORUNUSU9OKSB8fCAoQnRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX0NPTk5FQ1RfSURMRSkpKSB7CisJaWYgKCFCVERNX0lzV2lmaUJ1c3kocGFkYXB0ZXIpICYmCisJICAgICFjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIFdJRklfQVBfU1RBVEUpICYmCisJICAgIChCdFN0YXRlID09IEJUX0lORk9fU1RBVEVfTk9fQ09OTkVDVElPTiB8fAorCSAgICAgQnRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX0NPTk5FQ1RfSURMRSkpIHsKIAkJc3dpdGNoIChCdFN0YXRlKSB7CiAJCWNhc2UgQlRfSU5GT19TVEFURV9OT19DT05ORUNUSU9OOgogCQkJX2J0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgdHJ1ZSwgMiwgMHgyNiwgZmFsc2UsIDkpOwpAQCAtNTc4NSw0NSArNTc2Myw1OSBAQAogCQljYXNlIEJUX0lORk9fU1RBVEVfQ09OTkVDVF9JRExFOgogCQkJLyogIFdpRmkgaXMgQnVzeSAqLwogCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwgdHJ1ZSwgNSk7Ci0JCQlydHdfd3JpdGUzMihwYWRhcHRlciwgMHg2YzAsIDB4NWE1YTVhNWEpOwotCQkJcnR3X3dyaXRlMzIocGFkYXB0ZXIsIDB4NmM0LCAweDVhNWE1YTVhKTsKKwkJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweDZjMCwgMHg1YTVhNWE1YSk7CisJCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgMHg2YzQsIDB4NWE1YTVhNWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgQlRfSU5GT19TVEFURV9BQ0xfSU5RX09SX1BBRzoKLQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgQlQgUFJPRklMRSBpcyBCVF9JTkZPX1NUQVRFX0FDTF9JTlFfT1JfUEFHXG4iKSk7CisJCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCQkJKCJbQlRDb2V4XSwgQlQgUFJPRklMRSBpcyAiCisJCQkJICJCVF9JTkZPX1NUQVRFX0FDTF9JTlFfT1JfUEFHXG4iKSk7CiAJCWNhc2UgQlRfSU5GT19TVEFURV9JTlFfT1JfUEFHOgogCQkJcGFkYXB0ZXItPnB3cmN0cmxwcml2LmJ0Y29leF9yZm9uID0gdHJ1ZTsKIAkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgdHJ1ZSwgMCwgdHJ1ZSwgMzApOwogCQkJYnJlYWs7CiAJCWNhc2UgQlRfSU5GT19TVEFURV9TQ09fT05MWV9CVVNZOgogCQljYXNlIEJUX0lORk9fU1RBVEVfQUNMX1NDT19CVVNZOgotCQkJaWYgKHRydWUgPT0gcEJ0Q29leC0+YkMyaEJ0SW5xdWlyeVBhZ2UpIHsKLQkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIGZhbHNlLCAwLCB0cnVlLCAzMik7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHRydWUgPT0gcEJ0Q29leC0+YkMyaEJ0SW5xdWlyeVBhZ2UpCisJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwKKwkJCQkJCSAgIHRydWUsIDMyKTsKKwkJCWVsc2UgewogI2lmZGVmIEJUQ09FWF9DTUNDX1RFU1QKLQkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIGZhbHNlLCAwLCB0cnVlLCAyMyk7CisJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwKKwkJCQkJCSAgIHRydWUsIDIzKTsKICNlbHNlIC8qICAhQlRDT0VYX0NNQ0NfVEVTVCAqLwotCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsIGZhbHNlLCA4KTsKLQkJCQlydHdfd3JpdGUzMihwYWRhcHRlciwgMHg2YzAsIDB4NWE1YTVhNWEpOwotCQkJCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDZjNCwgMHg1YTVhNWE1YSk7CisJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwKKwkJCQkJCSAgIGZhbHNlLCA4KTsKKwkJCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgMHg2YzAsIDB4NWE1YTVhNWEpOworCQkJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweDZjNCwgMHg1YTVhNWE1YSk7CiAjZW5kaWYgLyogICFCVENPRVhfQ01DQ19URVNUICovCiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBCVF9JTkZPX1NUQVRFX0FDTF9PTkxZX0JVU1k6CiAJCQlwYWRhcHRlci0+cHdyY3RybHByaXYuYnRjb2V4X3Jmb24gPSB0cnVlOwogCQkJaWYgKHBCdENvZXgtPmMyaEJ0UHJvZmlsZSA9PSBCVF9JTkZPX0hJRCkgewotCQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgQlQgUFJPRklMRSBpcyBISURcbiIpKTsKKwkJCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCQkJCSgiW0JUQ29leF0sIEJUIFBST0ZJTEUgaXMgSElEXG4iKSk7CiAJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCB0cnVlLCAwLCB0cnVlLCAzMSk7CiAJCQl9IGVsc2UgaWYgKHBCdENvZXgtPmMyaEJ0UHJvZmlsZSA9PSBCVF9JTkZPX0ZUUCkgewotCQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgQlQgUFJPRklMRSBpcyBGVFAvT1BQXG4iKSk7CisJCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLAorCQkJCQkoIltCVENvZXhdLCBCVCBQUk9GSUxFIGlzIEZUUC9PUFBcbiIpKTsKIAkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIHRydWUsIDAsIHRydWUsIDMpOwogCQkJfSBlbHNlIGlmIChwQnRDb2V4LT5jMmhCdFByb2ZpbGUgPT0gKEJUX0lORk9fQTJEUHxCVF9JTkZPX0ZUUCkpIHsKLQkJCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIEJUIFBST0ZJTEUgaXMgQTJEUF9GVFBcbiIpKTsKKwkJCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCQkJCSgiW0JUQ29leF0sIEJUIFBST0ZJTEUgaXMgQTJEUF9GVFBcbiIpKTsKIAkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIHRydWUsIDAsIHRydWUsIDExKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHBCdENvZXgtPmMyaEJ0UHJvZmlsZSA9PSBCVF9JTkZPX0EyRFApCi0JCQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgQlQgUFJPRklMRSBpcyBBMkRQXG4iKSk7CisJCQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwKKwkJCQkJCSgiW0JUQ29leF0sIEJUIFBST0ZJTEUgaXMgIgorCQkJCQkJICJBMkRQXG4iKSk7CiAJCQkJZWxzZQotCQkJCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIEJUIFBST0ZJTEUgaXMgVU5LTk9XTigweCUwMlgpISBVc2UgQTJEUCBQcm9maWxlXG4iLCBwQnRDb2V4LT5jMmhCdFByb2ZpbGUpKTsKKwkJCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLAorCQkJCQkJKCJbQlRDb2V4XSwgQlQgUFJPRklMRSBpcyAiCisJCQkJCQkgIlVOS05PV04oMHglMDJYKSEgVXNlIEEyRFAgIgorCQkJCQkJICJQcm9maWxlXG4iLAorCQkJCQkJIHBCdENvZXgtPmMyaEJ0UHJvZmlsZSkpOwogCQkJCWJ0ZG1fMUFudFRkbWFEdXJhdGlvbkFkanVzdEZvckFDTChwYWRhcHRlcik7CiAJCQl9CiAJCQlicmVhazsKQEAgLTU4MzMsMTMgKzU4MjUsMTQgQEAKIAlwQnRkbTg3MjMtPnBzVGRtYUdsb2JhbENudCsrOwogfQogCi1zdGF0aWMgdm9pZCBidGRtXzFBbnRVcGRhdGVIYWxSQU1hc2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIG1hY19pZCwgdTMyIGZpbHRlcikKK3N0YXRpYyB2b2lkCitidGRtXzFBbnRVcGRhdGVIYWxSQU1hc2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIG1hY19pZCwgdTMyIGZpbHRlcikKIHsKIAl1OCBpbml0X3JhdGUgPSAwOwogCXU4IHJhaWQ7CiAJdTMyIG1hc2s7CiAJdTggc2hvcnRHSXJhdGUgPSBmYWxzZTsKLQlpbnQJc3VwcG9ydFJhdGVOdW0gPSAwOworCWludCBzdXBwb3J0UmF0ZU51bSA9IDA7CiAJc3RydWN0IHN0YV9pbmZvCSpwc3RhOwogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGE7CiAJc3RydWN0IGRtX3ByaXYgKnBkbXByaXY7CkBAIC01ODQ3LDcgKzU4NDAsOCBAQAogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm87CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKmN1cl9uZXR3b3JrOwogCi0JUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAlcywgTUFDSUQgPSVkLCBmaWx0ZXIgPSAweCUwOHghIVxuIiwgX19mdW5jX18sIG1hY19pZCwgZmlsdGVyKSk7CisJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAlcywgTUFDSUQgPSVkLCBmaWx0ZXIgPSAweCUwOHghIVxuIiwKKwkJCQlfX2Z1bmNfXywgbWFjX2lkLCBmaWx0ZXIpKTsKIAogCXBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAlwZG1wcml2ID0gJnBIYWxEYXRhLT5kbXByaXY7CkBAIC01ODU2LDEzICs1ODUwLDE1IEBACiAJY3VyX25ldHdvcmsgPSAmcG1sbWVpbmZvLT5uZXR3b3JrOwogCiAJaWYgKG1hY19pZCA+PSBOVU1fU1RBKSB7IC8qIENBTV9TSVpFICovCi0JCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgJXMsIE1BQ0lEID0lZCBpbGxlZ2FsISFcbiIsIF9fZnVuY19fLCBtYWNfaWQpKTsKKwkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAlcywgTUFDSUQgPSVkIGlsbGVnYWwhIVxuIiwKKwkJCQkJX19mdW5jX18sIG1hY19pZCkpOwogCQlyZXR1cm47CiAJfQogCiAJcHN0YSA9IHBtbG1laW5mby0+Rldfc3RhX2luZm9bbWFjX2lkXS5wc3RhOwotCWlmIChwc3RhID09IE5VTEwpIHsKLQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAlcywgQ2FuJ3QgZmluZCBzdGF0aW9uISFcbiIsIF9fZnVuY19fKSk7CisJaWYgKCFwc3RhKSB7CisJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgJXMsIENhbid0IGZpbmQgc3RhdGlvbiEhXG4iLAorCQkJCQlfX2Z1bmNfXykpOwogCQlyZXR1cm47CiAJfQogCkBAIC01ODcwLDE5ICs1ODY2LDI2IEBACiAKIAlzd2l0Y2ggKG1hY19pZCkgewogCWNhc2UgMDovKiAgZm9yIGluZnJhIG1vZGUgKi8KLQkJc3VwcG9ydFJhdGVOdW0gPSBydHdfZ2V0X3JhdGVzZXRfbGVuMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7Ci0JCW1hc2sgPSB1cGRhdGVfc3VwcG9ydGVkX3JhdGUyM2EoY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzLCBzdXBwb3J0UmF0ZU51bSk7Ci0JCW1hc2sgfD0gKHBtbG1laW5mby0+SFRfZW5hYmxlKSA/IHVwZGF0ZV9NU0NfcmF0ZTIzYSgmcG1sbWVpbmZvLT5IVF9jYXBzKTowOworCQlzdXBwb3J0UmF0ZU51bSA9CisJCQlydHdfZ2V0X3JhdGVzZXRfbGVuMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyk7CisJCW1hc2sgPSB1cGRhdGVfc3VwcG9ydGVkX3JhdGUyM2EoY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzLAorCQkJCQkJc3VwcG9ydFJhdGVOdW0pOworCQltYXNrIHw9IChwbWxtZWluZm8tPkhUX2VuYWJsZSkgPworCQkJdXBkYXRlX01TQ19yYXRlMjNhKCZwbWxtZWluZm8tPkhUX2NhcHMpOjA7CiAJCWlmIChzdXBwb3J0X3Nob3J0X0dJMjNhKHBhZGFwdGVyLCAmcG1sbWVpbmZvLT5IVF9jYXBzKSkKIAkJCXNob3J0R0lyYXRlID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAxOi8qIGZvciBicm9hZGNhc3QvbXVsdGljYXN0ICovCi0JCXN1cHBvcnRSYXRlTnVtID0gcnR3X2dldF9yYXRlc2V0X2xlbjIzYShwbWxtZWluZm8tPkZXX3N0YV9pbmZvW21hY19pZF0uU3VwcG9ydGVkUmF0ZXMpOwotCQltYXNrID0gdXBkYXRlX2Jhc2ljX3JhdGUyM2EoY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzLCBzdXBwb3J0UmF0ZU51bSk7CisJCXN1cHBvcnRSYXRlTnVtID0gcnR3X2dldF9yYXRlc2V0X2xlbjIzYSgKKwkJCXBtbG1laW5mby0+Rldfc3RhX2luZm9bbWFjX2lkXS5TdXBwb3J0ZWRSYXRlcyk7CisJCW1hc2sgPSB1cGRhdGVfYmFzaWNfcmF0ZTIzYShjdXJfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMsCisJCQkJCSAgICBzdXBwb3J0UmF0ZU51bSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6IC8qIGZvciBlYWNoIHN0YSBpbiBJQlNTICovCi0JCXN1cHBvcnRSYXRlTnVtID0gcnR3X2dldF9yYXRlc2V0X2xlbjIzYShwbWxtZWluZm8tPkZXX3N0YV9pbmZvW21hY19pZF0uU3VwcG9ydGVkUmF0ZXMpOwotCQltYXNrID0gdXBkYXRlX3N1cHBvcnRlZF9yYXRlMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcywgc3VwcG9ydFJhdGVOdW0pOworCQlzdXBwb3J0UmF0ZU51bSA9IHJ0d19nZXRfcmF0ZXNldF9sZW4yM2EoCisJCQlwbWxtZWluZm8tPkZXX3N0YV9pbmZvW21hY19pZF0uU3VwcG9ydGVkUmF0ZXMpOworCQltYXNrID0gdXBkYXRlX3N1cHBvcnRlZF9yYXRlMjNhKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcywKKwkJCQkJCXN1cHBvcnRSYXRlTnVtKTsKIAkJYnJlYWs7CiAJfQogCW1hc2sgfD0gKChyYWlkPDwyOCkmMHhmMDAwMDAwMCk7CkBAIC01ODk5LDIyICs1OTAyLDI0IEBACiAJCQlhcmcgfD0gQklUKDUpOwogCiAJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwKLQkJCSgiW0JUQ29leF0sIFVwZGF0ZSBGVyBSQUlEIGVudHJ5LCBNQVNLID0gMHglMDh4LCBhcmcgPSAweCUwMnhcbiIsCi0JCQltYXNrLCBhcmcpKTsKKwkJCSgiW0JUQ29leF0sIFVwZGF0ZSBGVyBSQUlEIGVudHJ5LCBNQVNLID0gMHglMDh4LCAiCisJCQkgImFyZyA9IDB4JTAyeFxuIiwgbWFzaywgYXJnKSk7CiAKIAkJcnRsODcyM2Ffc2V0X3JhaWRfY21kKHBhZGFwdGVyLCBtYXNrLCBhcmcpOwogCX0gZWxzZSB7CiAJCWlmIChzaG9ydEdJcmF0ZSkKIAkJCWluaXRfcmF0ZSB8PSBCSVQoNik7CiAKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgKFJFR19JTklEQVRBX1JBVEVfU0VMK21hY19pZCksIGluaXRfcmF0ZSk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19JTklEQVRBX1JBVEVfU0VMICsgbWFjX2lkLAorCQkJCSBpbml0X3JhdGUpOwogCX0KIAogCXBzdGEtPmluaXRfcmF0ZSA9IGluaXRfcmF0ZTsKIAlwZG1wcml2LT5JTklEQVRBX1JBVEVbbWFjX2lkXSA9IGluaXRfcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgYnRkbV8xQW50VXBkYXRlSGFsUkFNYXNrRm9yU0NPKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGZvcmNlVXBkYXRlKQorc3RhdGljIHZvaWQKK2J0ZG1fMUFudFVwZGF0ZUhhbFJBTWFza0ZvclNDTyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBmb3JjZVVwZGF0ZSkKIHsKIAlzdHJ1Y3QgYnRkbV84NzIzYV8xYW50ICpwQnRkbTg3MjM7CiAJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdjsKQEAgLTU5MjUsNyArNTkzMCw3IEBACiAKIAlwQnRkbTg3MjMgPSAmR0VUX0hBTF9EQVRBKHBhZGFwdGVyKS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idGRtMUFudDsKIAotCWlmICgocEJ0ZG04NzIzLT5iUkFDaGFuZ2VkID09IHRydWUpICYmIChmb3JjZVVwZGF0ZSA9PSBmYWxzZSkpCisJaWYgKHBCdGRtODcyMy0+YlJBQ2hhbmdlZCA9PSB0cnVlICYmIGZvcmNlVXBkYXRlID09IGZhbHNlKQogCQlyZXR1cm47CiAKIAlwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKQEAgLTU5NjgsOSArNTk3MywxMyBAQAogCiBzdGF0aWMgdm9pZAogYnRkbV8xQW50QlRTdGF0ZUNoYW5nZUhhbmRsZXIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgIGVudW0gYnRfc3RhdGVfMWFudCBvbGRTdGF0ZSwgZW51bSBidF9zdGF0ZV8xYW50IG5ld1N0YXRlKQorCQkJICAgICAgZW51bSBidF9zdGF0ZV8xYW50IG9sZFN0YXRlLAorCQkJICAgICAgZW51bSBidF9zdGF0ZV8xYW50IG5ld1N0YXRlKQogewotCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgQlQgc3RhdGUgY2hhbmdlLCAlcyA9PiAlc1xuIiwgQnRTdGF0ZVN0cmluZ1tvbGRTdGF0ZV0sIEJ0U3RhdGVTdHJpbmdbbmV3U3RhdGVdKSk7CisJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwaGFsZGF0YTsKKwlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIEJUIHN0YXRlIGNoYW5nZSwgJXMgPT4gJXNcbiIsCisJCQkJQnRTdGF0ZVN0cmluZ1tvbGRTdGF0ZV0sCisJCQkJQnRTdGF0ZVN0cmluZ1tuZXdTdGF0ZV0pKTsKIAogCS8qICBCVCBkZWZhdWx0IGlnbm9yZSB3bGFuIGFjdGl2ZSwgKi8KIAkvKiAgV2lGaSBNVVNUIGRpc2FibGUgdGhpcyB3aGVuIEJUIGlzIGVuYWJsZSAqLwpAQCAtNTk4NywyMiArNTk5NiwyMyBAQAogCQkJYnRkbV8xQW50UmVjb3ZlckhhbFJBTWFzayhwYWRhcHRlcik7CiAJCX0KIAl9IGVsc2UgewotCQlHRVRfSEFMX0RBVEEocGFkYXB0ZXIpLT5idF9jb2V4aXN0LmhhbENvZXg4NzIzLmJ0ZG0xQW50LmJSQUNoYW5nZWQgPSBmYWxzZTsKKwkJcGhhbGRhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOworCQlwaGFsZGF0YS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idGRtMUFudC5iUkFDaGFuZ2VkID0gZmFsc2U7CiAJfQogCiAJaWYgKG9sZFN0YXRlID09IG5ld1N0YXRlKQogCQlyZXR1cm47CiAKIAlpZiAob2xkU3RhdGUgPT0gQlRfSU5GT19TVEFURV9BQ0xfT05MWV9CVVNZKSB7Ci0JCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwotCQlwSGFsRGF0YS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idGRtMUFudC5wc1RkbWFNb25pdG9yQ250ID0gMDsKLQkJcEhhbERhdGEtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjMuYnRkbTFBbnQucHNUZG1hTW9uaXRvckNudEZvclNDTyA9IDA7CisJCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqSGFsID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKKwkJSGFsLT5idF9jb2V4aXN0LmhhbENvZXg4NzIzLmJ0ZG0xQW50LnBzVGRtYU1vbml0b3JDbnQgPSAwOworCQlIYWwtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjMuYnRkbTFBbnQucHNUZG1hTW9uaXRvckNudEZvclNDTyA9IDA7CiAJfQogCiAJaWYgKChvbGRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX1NDT19PTkxZX0JVU1kpIHx8CiAJICAgIChvbGRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX0FDTF9TQ09fQlVTWSkpIHsKLQkJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0JCXBIYWxEYXRhLT5idF9jb2V4aXN0LmhhbENvZXg4NzIzLmJ0ZG0xQW50LnBzVGRtYU1vbml0b3JDbnRGb3JTQ08gPSAwOworCQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKkhhbCA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CisJCUhhbC0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idGRtMUFudC5wc1RkbWFNb25pdG9yQ250Rm9yU0NPID0gMDsKIAl9CiAKIAkvKiAgQWN0aXZlIDJBbnQgbWVjaGFuaXNtIHdoZW4gQlQgQ29ubmVjdGVkICovCkBAIC02MDEwLDE0ICs2MDIwLDE2IEBACiAJICAgIChvbGRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX05PX0NPTk5FQ1RJT04pKSB7CiAJCWlmICgobmV3U3RhdGUgIT0gQlRfSU5GT19TVEFURV9ESVNBQkxFRCkgJiYKIAkJICAgIChuZXdTdGF0ZSAhPSBCVF9JTkZPX1NUQVRFX05PX0NPTk5FQ1RJT04pKSB7Ci0JCQlCVERNX1NldFN3UmZSeExwZkNvcm5lcihwYWRhcHRlciwgQlRfUkZfUlhfTFBGX0NPUk5FUl9TSFJJTkspOworCQkJQlRETV9TZXRTd1JmUnhMcGZDb3JuZXIocGFkYXB0ZXIsCisJCQkJCQlCVF9SRl9SWF9MUEZfQ09STkVSX1NIUklOSyk7CiAJCQlCVERNX0FHQ1RhYmxlKHBhZGFwdGVyLCBCVF9BR0NUQUJMRV9PTik7CiAJCQlCVERNX0JCQmFja09mZkxldmVsKHBhZGFwdGVyLCBCVF9CQl9CQUNLT0ZGX09OKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICgobmV3U3RhdGUgPT0gQlRfSU5GT19TVEFURV9ESVNBQkxFRCkgfHwKIAkJICAgIChuZXdTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX05PX0NPTk5FQ1RJT04pKSB7Ci0JCQlCVERNX1NldFN3UmZSeExwZkNvcm5lcihwYWRhcHRlciwgQlRfUkZfUlhfTFBGX0NPUk5FUl9SRVNVTUUpOworCQkJQlRETV9TZXRTd1JmUnhMcGZDb3JuZXIocGFkYXB0ZXIsCisJCQkJCQlCVF9SRl9SWF9MUEZfQ09STkVSX1JFU1VNRSk7CiAJCQlCVERNX0FHQ1RhYmxlKHBhZGFwdGVyLCBCVF9BR0NUQUJMRV9PRkYpOwogCQkJQlRETV9CQkJhY2tPZmZMZXZlbChwYWRhcHRlciwgQlRfQkJfQkFDS09GRl9PRkYpOwogCQl9CkBAIC02MDM0LDIxICs2MDQ2LDI3IEBACiAJcEJ0Q29leDg3MjMgPSAmcEhhbERhdGEtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjM7CiAJcEJ0ZG04NzIzID0gJnBCdENvZXg4NzIzLT5idGRtMUFudDsKIAlwYWRhcHRlci0+cHdyY3RybHByaXYuYnRjb2V4X3Jmb24gPSBmYWxzZTsKLQlpZiAoQlRfSXNCdERpc2FibGVkKHBhZGFwdGVyKSkgeworCWlmICghcnRsODcyM2FfQlRfZW5hYmxlZChwYWRhcHRlcikpIHsKIAkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCBCVCBpcyBkaXNhYmxlZFxuIikpOwogCiAJCWlmIChCVERNX0lzV2lmaUNvbm5lY3Rpb25FeGlzdChwYWRhcHRlcikpIHsKLQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgd2lmaSBpcyBjb25uZWN0ZWRcbiIpKTsKKwkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwKKwkJCQkoIltCVENvZXhdLCB3aWZpIGlzIGNvbm5lY3RlZFxuIikpOwogCiAJCQlpZiAoQlRETV9Jc1dpZmlCdXN5KHBhZGFwdGVyKSkgewotCQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgV2lmaSBpcyBidXN5XG4iKSk7Ci0JCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwgZmFsc2UsIDkpOworCQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwKKwkJCQkJKCJbQlRDb2V4XSwgV2lmaSBpcyBidXN5XG4iKSk7CisJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwKKwkJCQkJCSAgIGZhbHNlLCA5KTsKIAkJCX0gZWxzZSB7Ci0JCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCBXaWZpIGlzIGlkbGVcbiIpKTsKLQkJCQlfYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCB0cnVlLCAyLCAxLCBmYWxzZSwgOSk7CisJCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLAorCQkJCQkoIltCVENvZXhdLCBXaWZpIGlzIGlkbGVcbiIpKTsKKwkJCQlfYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCB0cnVlLCAyLCAxLAorCQkJCQkJICAgIGZhbHNlLCA5KTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgd2lmaSBpcyBkaXNjb25uZWN0ZWRcbiIpKTsKKwkJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwKKwkJCQkoIltCVENvZXhdLCB3aWZpIGlzIGRpc2Nvbm5lY3RlZFxuIikpOwogCiAJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIGZhbHNlLCAwLCBmYWxzZSwgOSk7CiAJCX0KQEAgLTYwNTYsMjQgKzYwNzQsMjkgQEAKIAkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCBCVCBpcyBlbmFibGVkXG4iKSk7CiAKIAkJaWYgKEJURE1fSXNXaWZpQ29ubmVjdGlvbkV4aXN0KHBhZGFwdGVyKSkgewotCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCB3aWZpIGlzIGNvbm5lY3RlZFxuIikpOworCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLAorCQkJCSgiW0JUQ29leF0sIHdpZmkgaXMgY29ubmVjdGVkXG4iKSk7CiAKIAkJCWJ0ZG1fMUFudFdpZmlQYXJhQWRqdXN0KHBhZGFwdGVyLCB0cnVlKTsKIAkJCWJ0ZG1fMUFudENvZXhQcm9jZXNzRm9yV2lmaUNvbm5lY3QocGFkYXB0ZXIpOwogCQl9IGVsc2UgewotCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCB3aWZpIGlzIGRpc2Nvbm5lY3RlZFxuIikpOworCQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLAorCQkJCSgiW0JUQ29leF0sIHdpZmkgaXMgZGlzY29ubmVjdGVkXG4iKSk7CiAKLQkJCS8qICBBbnRlbm5hIHN3aXRjaCBhdCBCVCBzaWRlKDB4ODcwID0gMHgzMDAsIDB4ODYwID0gMHgyMTApIGFmdGVyIFBTVERNQSBvZmYgKi8KKwkJCS8qICBBbnRlbm5hIHN3aXRjaCBhdCBCVCBzaWRlKDB4ODcwID0gMHgzMDAsCisJCQkgICAgMHg4NjAgPSAweDIxMCkgYWZ0ZXIgUFNURE1BIG9mZiAqLwogCQkJYnRkbV8xQW50V2lmaVBhcmFBZGp1c3QocGFkYXB0ZXIsIGZhbHNlKTsKIAkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsIGZhbHNlLCAwKTsKIAkJfQogCX0KIAotCWJ0ZG1fMUFudEJUU3RhdGVDaGFuZ2VIYW5kbGVyKHBhZGFwdGVyLCBwQnRDb2V4ODcyMy0+cHJlYzJoQnRJbmZvLCBwQnRDb2V4ODcyMy0+YzJoQnRJbmZvKTsKKwlidGRtXzFBbnRCVFN0YXRlQ2hhbmdlSGFuZGxlcihwYWRhcHRlciwgcEJ0Q29leDg3MjMtPnByZWMyaEJ0SW5mbywKKwkJCQkgICAgICBwQnRDb2V4ODcyMy0+YzJoQnRJbmZvKTsKIAlwQnRDb2V4ODcyMy0+cHJlYzJoQnRJbmZvID0gcEJ0Q29leDg3MjMtPmMyaEJ0SW5mbzsKIH0KIAotdm9pZCBCVERNXzFBbnRTaWduYWxDb21wZW5zYXRpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnJzc2lfd2lmaSwgdTggKnJzc2lfYnQpCit2b2lkIEJURE1fMUFudFNpZ25hbENvbXBlbnNhdGlvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJCSB1OCAqcnNzaV93aWZpLCB1OCAqcnNzaV9idCkKIHsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhOwogCXN0cnVjdCBidGRtXzg3MjNhXzFhbnQgKnBCdGRtODcyMzsKQEAgLTYxMTksMTQgKzYxNDIsMTkgQEAKIAl9CiAKIAlpZiAocnNzaV93aWZpICYmIFJTU0lfV2lGaV9DbXBuc3RuKSB7Ci0JCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgMUFudFNnbmxDbXBuc3RuLCBjYXNlICVkLCBXaUZpQ21wbnN0biA9JWQoJWQgPT4gJWQpXG4iLAotCQkJCXBCdGRtODcyMy0+Y3VyUHNUZG1hLCBSU1NJX1dpRmlfQ21wbnN0biwgKnJzc2lfd2lmaSwgKnJzc2lfd2lmaStSU1NJX1dpRmlfQ21wbnN0bikpOworCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCQkoIltCVENvZXhdLCAxQW50U2dubENtcG5zdG4sIGNhc2UgJWQsIFdpRmlDbXBuc3RuICIKKwkJCSAiPSVkKCVkID0+ICVkKVxuIiwgcEJ0ZG04NzIzLT5jdXJQc1RkbWEsCisJCQkgUlNTSV9XaUZpX0NtcG5zdG4sICpyc3NpX3dpZmksCisJCQkgKnJzc2lfd2lmaStSU1NJX1dpRmlfQ21wbnN0bikpOwogCQkqcnNzaV93aWZpICs9IFJTU0lfV2lGaV9DbXBuc3RuOwogCX0KIAogCWlmIChyc3NpX2J0ICYmIFJTU0lfQlRfQ21wbnN0bikgewotCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIDFBbnRTZ25sQ21wbnN0biwgY2FzZSAlZCwgQlRDbXBuc3RuID0lZCglZCA9PiAlZClcbiIsCi0JCQkJcEJ0ZG04NzIzLT5jdXJQc1RkbWEsIFJTU0lfQlRfQ21wbnN0biwgKnJzc2lfYnQsICpyc3NpX2J0K1JTU0lfQlRfQ21wbnN0bikpOworCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCQkoIltCVENvZXhdLCAxQW50U2dubENtcG5zdG4sIGNhc2UgJWQsIEJUQ21wbnN0biAiCisJCQkgIj0lZCglZCA9PiAlZClcbiIsIHBCdGRtODcyMy0+Y3VyUHNUZG1hLAorCQkJIFJTU0lfQlRfQ21wbnN0biwgKnJzc2lfYnQsICpyc3NpX2J0K1JTU0lfQlRfQ21wbnN0bikpOwogCQkqcnNzaV9idCArPSBSU1NJX0JUX0NtcG5zdG47CiAJfQogfQpAQCAtNjE0Miw3ICs2MTcwLDcgQEAKIAlwQnRkbTg3MjMgPSAmcEJ0Q29leC0+YnRkbTFBbnQ7CiAKIAkvKiAgRW5hYmxlIGNvdW50ZXIgc3RhdGlzdGljcyAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIDB4NzZlLCAweDQpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIDB4NzZlLCAweDQpOwogCWJ0ZG1fMUFudFB0YVBhcmFSZWxvYWQocGFkYXB0ZXIpOwogCiAJcEJ0ZG04NzIzLT53aWZpUnNzaVRocmVzaCA9IDQ4OwpAQCAtNjE2Miw3ICs2MTkwLDggQEAKIHsKIAlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiXG5bQlRDb2V4XSwgMUFudCBmb3IgaGFsdFxuIikpOwogCi0JR0VUX0hBTF9EQVRBKHBhZGFwdGVyKS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idGRtMUFudC5iV2lGaUhhbHQgPSB0cnVlOworCUdFVF9IQUxfREFUQShwYWRhcHRlciktPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjMuYnRkbTFBbnQuYldpRmlIYWx0ID0KKwkJdHJ1ZTsKIAogCWJ0ZG1fMUFudFdpZmlQYXJhQWRqdXN0KHBhZGFwdGVyLCBmYWxzZSk7CiAKQEAgLTYxODAsNyArNjIwOSw4IEBACiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIlxuW0JUQ29leF0sIDFBbnQgZm9yIExQUyBMZWF2ZVxuIikpOwogCiAJLyogIFByZXZlbnQgZnJvbSBlbnRlcmluZyBMUFMgYWdhaW4gKi8KLQlHRVRfSEFMX0RBVEEocGFkYXB0ZXIpLT5idF9jb2V4aXN0LmhhbENvZXg4NzIzLmJ0ZG0xQW50LmJXaUZpSGFsdCA9IHRydWU7CisJR0VUX0hBTF9EQVRBKHBhZGFwdGVyKS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idGRtMUFudC5iV2lGaUhhbHQgPQorCQl0cnVlOwogCiAJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwgZmFsc2UsIDgpOwogLypidGRtXzFBbnRQc1RkbWEocGFkYXB0ZXIsIGZhbHNlLCA4KTsgKi8KQEAgLTYxOTAsMTMgKzYyMjAsMTQgQEAKIHsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAotCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJcbltCVENvZXhdLCAxQW50IGZvciBhc3NvY2lhdGUsIHR5cGUgPSVkXG4iLCB0eXBlKSk7CisJUlRQUklOVChGQlQsIEJUX1RSQUNFLAorCQkoIlxuW0JUQ29leF0sIDFBbnQgZm9yIGFzc29jaWF0ZSwgdHlwZSA9JWRcbiIsIHR5cGUpKTsKIAogCWlmICh0eXBlKSB7CiAJCXJ0bDg3MjNhX0NoZWNrQW50ZW5uYV9TZWxlY3Rpb24ocGFkYXB0ZXIpOwotCQlpZiAoQlRfSXNCdERpc2FibGVkKHBhZGFwdGVyKSkgeworCQlpZiAoIXJ0bDg3MjNhX0JUX2VuYWJsZWQocGFkYXB0ZXIpKQogCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwgZmFsc2UsIDkpOwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCXN0cnVjdCBidF9jb2V4aXN0Xzg3MjNhICpwQnRDb2V4OwogCQkJdTggQnRTdGF0ZTsKIApAQCAtNjIwNSwyNCArNjIzNiwyOCBAQAogCiAJCQlidGRtXzFBbnRUU0ZTd2l0Y2gocGFkYXB0ZXIsIHRydWUpOwogCi0JCQlpZiAoKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9OT19DT05ORUNUSU9OKSB8fAotCQkJICAgIChCdFN0YXRlID09IEJUX0lORk9fU1RBVEVfQ09OTkVDVF9JRExFKSkgewotCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsIHRydWUsIDI4KTsKLQkJCX0gZWxzZSBpZiAoKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9TQ09fT05MWV9CVVNZKSB8fAotCQkJCSAgIChCdFN0YXRlID09IEJUX0lORk9fU1RBVEVfQUNMX1NDT19CVVNZKSkgewotCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsIGZhbHNlLCA4KTsKLQkJCQlydHdfd3JpdGUzMihwYWRhcHRlciwgMHg2YzAsIDB4NWE1YTVhNWEpOwotCQkJCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDZjNCwgMHg1YTVhNWE1YSk7Ci0JCQl9IGVsc2UgaWYgKChCdFN0YXRlID09IEJUX0lORk9fU1RBVEVfQUNMX09OTFlfQlVTWSkgfHwKLQkJCQkgICAoQnRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX0FDTF9JTlFfT1JfUEFHKSkgeworCQkJaWYgKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9OT19DT05ORUNUSU9OIHx8CisJCQkgICAgQnRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX0NPTk5FQ1RfSURMRSkgeworCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsCisJCQkJCQkgICB0cnVlLCAyOCk7CisJCQl9IGVsc2UgaWYgKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9TQ09fT05MWV9CVVNZIHx8CisJCQkJICAgQnRTdGF0ZSA9PSBCVF9JTkZPX1NUQVRFX0FDTF9TQ09fQlVTWSkgeworCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsCisJCQkJCQkgICBmYWxzZSwgOCk7CisJCQkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4NmMwLCAweDVhNWE1YTVhKTsKKwkJCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgMHg2YzQsIDB4NWE1YTVhNWEpOworCQkJfSBlbHNlIGlmIChCdFN0YXRlID09IEJUX0lORk9fU1RBVEVfQUNMX09OTFlfQlVTWSB8fAorCQkJCSAgIEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9BQ0xfSU5RX09SX1BBRykgewogCQkJCWlmIChwQnRDb2V4LT5jMmhCdFByb2ZpbGUgPT0gQlRfSU5GT19ISUQpCi0JCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsIHRydWUsIDM1KTsKKwkJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwKKwkJCQkJCQkgICB0cnVlLCAzNSk7CiAJCQkJZWxzZQotCQkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIGZhbHNlLCAwLCB0cnVlLCAyOSk7CisJCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsCisJCQkJCQkJICAgdHJ1ZSwgMjkpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKEJUX0lzQnREaXNhYmxlZChwYWRhcHRlcikpIHsKKwkJaWYgKCFydGw4NzIzYV9CVF9lbmFibGVkKHBhZGFwdGVyKSkgewogCQkJaWYgKCFCVERNX0lzV2lmaUNvbm5lY3Rpb25FeGlzdChwYWRhcHRlcikpIHsKIAkJCQlidGRtXzFBbnRQc1RkbWEocGFkYXB0ZXIsIGZhbHNlLCAwKTsKIAkJCQlidGRtXzFBbnRUU0ZTd2l0Y2gocGFkYXB0ZXIsIGZhbHNlKTsKQEAgLTYyNDEsMjIgKzYyNzYsMjQgQEAKIAogCXBCdENvZXggPSAmR0VUX0hBTF9EQVRBKHBhZGFwdGVyKS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMzsKIAotCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJcblxuW0JUQ29leF0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCSgiXG5cbltCVENvZXhdKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCBNZWRpYVN0YXR1cywgV2lGaSAlcyAhIVxuIiwKIAkJCW1zdGF0dXMgPT0gUlRfTUVESUFfQ09OTkVDVD8iQ09OTkVDVCI6IkRJU0NPTk5FQ1QiKSk7CiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAKIAlpZiAoUlRfTUVESUFfQ09OTkVDVCA9PSBtc3RhdHVzKSB7CiAJCWlmIChjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSkpIHsKLQkJCWlmICgocEJ0Q29leC0+YzJoQnRJbmZvID09IEJUX0lORk9fU1RBVEVfU0NPX09OTFlfQlVTWSkgfHwKLQkJCSAgICAocEJ0Q29leC0+YzJoQnRJbmZvID09IEJUX0lORk9fU1RBVEVfQUNMX1NDT19CVVNZKSkKKwkJCWlmIChwQnRDb2V4LT5jMmhCdEluZm8gPT0gQlRfSU5GT19TVEFURV9TQ09fT05MWV9CVVNZIHx8CisJCQkgICAgcEJ0Q29leC0+YzJoQnRJbmZvID09IEJUX0lORk9fU1RBVEVfQUNMX1NDT19CVVNZKQogCQkJCWJ0ZG1fMUFudFVwZGF0ZUhhbFJBTWFza0ZvclNDTyhwYWRhcHRlciwgdHJ1ZSk7CiAJCX0KIAogCQlwYWRhcHRlci0+cHdyY3RybHByaXYuRGVsYXlMUFNMYXN0VGltZVN0YW1wID0gamlmZmllczsKIAkJQlRETV8xQW50Rm9yRGhjcChwYWRhcHRlcik7CiAJfSBlbHNlIHsKLQkJLyogREJHXzg3MjNBKCIlcyBydGw4NzIzYV9EZWluaXRBbnRlbm5hX1NlbGVjdGlvblxuIiwgX19mdW5jX18pOyAqLworCQkvKiBEQkdfODcyM0EoIiVzIHJ0bDg3MjNhX0RlaW5pdEFudGVubmFfU2VsZWN0aW9uXG4iLAorCQkgICBfX2Z1bmNfXyk7ICovCiAJCXJ0bDg3MjNhX0RlaW5pdEFudGVubmFfU2VsZWN0aW9uKHBhZGFwdGVyKTsKIAkJYnRkbV8xQW50QnRDb2V4aXN0SGFuZGxlcihwYWRhcHRlcik7CiAJCXBCdENvZXgtPmJ0ZG0xQW50LmJSQUNoYW5nZWQgPSBmYWxzZTsKQEAgLTYyNzYsOCArNjMxMywxMCBAQAogCXBCdGRtODcyMyA9ICZwQnRDb2V4LT5idGRtMUFudDsKIAogCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJcbltCVENvZXhdLCAxQW50IGZvciBESENQXG4iKSk7Ci0JUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAxQW50IGZvciBESENQLCBXaUZpIGlzICVzXG4iLCBCVERNX0lzV2lmaUJ1c3kocGFkYXB0ZXIpPyJCdXN5IjoiSURMRSIpKTsKLQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIDFBbnQgZm9yIERIQ1AsICVzXG4iLCBCdFN0YXRlU3RyaW5nW0J0U3RhdGVdKSk7CisJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAxQW50IGZvciBESENQLCBXaUZpIGlzICVzXG4iLAorCQkJCUJURE1fSXNXaWZpQnVzeShwYWRhcHRlcik/IkJ1c3kiOiJJRExFIikpOworCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgMUFudCBmb3IgREhDUCwgJXNcbiIsCisJCQkJQnRTdGF0ZVN0cmluZ1tCdFN0YXRlXSkpOwogCiAJQlRETV8xQW50V2lmaUFzc29jaWF0ZU5vdGlmeShwYWRhcHRlciwgdHJ1ZSk7CiB9CkBAIC02Mjk0LDEzICs2MzMzLDE2IEBACiAJcEJ0Q29leCA9ICZwSGFsRGF0YS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMzsKIAlwQnRkbTg3MjMgPSAmcEJ0Q29leC0+YnRkbTFBbnQ7CiAKLQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiXG5bQlRDb2V4XSwgMUFudCBmb3Igd2lmaSBzY2FuID0lZCEhXG4iLCBzY2FuVHlwZSkpOwotCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRDb2V4XSwgMUFudCBmb3Igd2lmaSBzY2FuLCBXaUZpIGlzICVzXG4iLCBCVERNX0lzV2lmaUJ1c3kocGFkYXB0ZXIpPyJCdXN5IjoiSURMRSIpKTsKLQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIDFBbnQgZm9yIHdpZmkgc2NhbiwgJXNcbiIsIEJ0U3RhdGVTdHJpbmdbQnRTdGF0ZV0pKTsKKwlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiXG5bQlRDb2V4XSwgMUFudCBmb3Igd2lmaSBzY2FuID0lZCEhXG4iLAorCQkJCXNjYW5UeXBlKSk7CisJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAxQW50IGZvciB3aWZpIHNjYW4sIFdpRmkgaXMgJXNcbiIsCisJCQkJQlRETV9Jc1dpZmlCdXN5KHBhZGFwdGVyKT8iQnVzeSI6IklETEUiKSk7CisJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAxQW50IGZvciB3aWZpIHNjYW4sICVzXG4iLAorCQkJCUJ0U3RhdGVTdHJpbmdbQnRTdGF0ZV0pKTsKIAogCWlmIChzY2FuVHlwZSkgewogCQlydGw4NzIzYV9DaGVja0FudGVubmFfU2VsZWN0aW9uKHBhZGFwdGVyKTsKLQkJaWYgKEJUX0lzQnREaXNhYmxlZChwYWRhcHRlcikpIHsKKwkJaWYgKCFydGw4NzIzYV9CVF9lbmFibGVkKHBhZGFwdGVyKSkgewogCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCBmYWxzZSwgMCwgZmFsc2UsIDkpOwogCQl9IGVsc2UgaWYgKEJURE1fSXNXaWZpQ29ubmVjdGlvbkV4aXN0KHBhZGFwdGVyKSA9PSBmYWxzZSkgewogCQkJQlRETV8xQW50V2lmaUFzc29jaWF0ZU5vdGlmeShwYWRhcHRlciwgdHJ1ZSk7CkBAIC02MzA4LDEwICs2MzUwLDEzIEBACiAJCQlpZiAoKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9TQ09fT05MWV9CVVNZKSB8fAogCQkJICAgIChCdFN0YXRlID09IEJUX0lORk9fU1RBVEVfQUNMX1NDT19CVVNZKSkgewogCQkJCWlmIChwQnRDb2V4LT5iQzJoQnRJbnF1aXJ5UGFnZSkgewotCQkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIGZhbHNlLCAwLCB0cnVlLCAzMik7CisJCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgZmFsc2UsIDAsCisJCQkJCQkJICAgdHJ1ZSwgMzIpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXBhZGFwdGVyLT5wd3JjdHJscHJpdi5idGNvZXhfcmZvbiA9IHRydWU7Ci0JCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgdHJ1ZSwgMCwgdHJ1ZSwgMzMpOworCQkJCQlwYWRhcHRlci0+cHdyY3RybHByaXYuYnRjb2V4X3Jmb24gPQorCQkJCQkJdHJ1ZTsKKwkJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCB0cnVlLCAwLAorCQkJCQkJCSAgIHRydWUsIDMzKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKHRydWUgPT0gcEJ0Q29leC0+YkMyaEJ0SW5xdWlyeVBhZ2UpIHsKIAkJCQlwYWRhcHRlci0+cHdyY3RybHByaXYuYnRjb2V4X3Jmb24gPSB0cnVlOwpAQCAtNjMxOSw5ICs2MzY0LDExIEBACiAJCQl9IGVsc2UgaWYgKEJ0U3RhdGUgPT0gQlRfSU5GT19TVEFURV9BQ0xfT05MWV9CVVNZKSB7CiAJCQkJcGFkYXB0ZXItPnB3cmN0cmxwcml2LmJ0Y29leF9yZm9uID0gdHJ1ZTsKIAkJCQlpZiAocEJ0Q29leC0+YzJoQnRQcm9maWxlID09IEJUX0lORk9fSElEKQotCQkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIHRydWUsIDAsIHRydWUsIDM0KTsKKwkJCQkJYnRkbV8xQW50U2V0UFNURE1BKHBhZGFwdGVyLCB0cnVlLCAwLAorCQkJCQkJCSAgIHRydWUsIDM0KTsKIAkJCQllbHNlCi0JCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgdHJ1ZSwgMCwgdHJ1ZSwgNCk7CisJCQkJCWJ0ZG1fMUFudFNldFBTVERNQShwYWRhcHRlciwgdHJ1ZSwgMCwKKwkJCQkJCQkgICB0cnVlLCA0KTsKIAkJCX0gZWxzZSB7CiAJCQkJcGFkYXB0ZXItPnB3cmN0cmxwcml2LmJ0Y29leF9yZm9uID0gdHJ1ZTsKIAkJCQlidGRtXzFBbnRTZXRQU1RETUEocGFkYXB0ZXIsIHRydWUsIDAsIHRydWUsIDUpOwpAQCAtNjM2NSwxNiArNjQxMiwxOCBAQAogCQlwQnRDb2V4LT5iQzJoQnRJbnF1aXJ5UGFnZSA9IGZhbHNlOwogCWJ0U3RhdGUgJj0gfkJJVCgyKTsKIAotCWlmICghKGJ0U3RhdGUgJiBCSVQoMCkpKSB7CisJaWYgKCEoYnRTdGF0ZSAmIEJJVCgwKSkpCiAJCXBCdENvZXgtPmMyaEJ0SW5mbyA9IEJUX0lORk9fU1RBVEVfTk9fQ09OTkVDVElPTjsKLQl9IGVsc2UgewotCQlpZiAoYnRTdGF0ZSA9PSAweDEpIHsKKwllbHNlIHsKKwkJaWYgKGJ0U3RhdGUgPT0gMHgxKQogCQkJcEJ0Q29leC0+YzJoQnRJbmZvID0gQlRfSU5GT19TVEFURV9DT05ORUNUX0lETEU7Ci0JCX0gZWxzZSBpZiAoYnRTdGF0ZSA9PSAweDkpIHsKKwkJZWxzZSBpZiAoYnRTdGF0ZSA9PSAweDkpIHsKIAkJCWlmIChwQnRDb2V4LT5iQzJoQnRJbnF1aXJ5UGFnZSA9PSB0cnVlKQotCQkJCXBCdENvZXgtPmMyaEJ0SW5mbyA9IEJUX0lORk9fU1RBVEVfQUNMX0lOUV9PUl9QQUc7CisJCQkJcEJ0Q29leC0+YzJoQnRJbmZvID0KKwkJCQkJQlRfSU5GT19TVEFURV9BQ0xfSU5RX09SX1BBRzsKIAkJCWVsc2UKLQkJCQlwQnRDb2V4LT5jMmhCdEluZm8gPSBCVF9JTkZPX1NUQVRFX0FDTF9PTkxZX0JVU1k7CisJCQkJcEJ0Q29leC0+YzJoQnRJbmZvID0KKwkJCQkJQlRfSU5GT19TVEFURV9BQ0xfT05MWV9CVVNZOwogCQkJcEJ0TWdudC0+RXh0Q29uZmlnLmJCVEJ1c3kgPSB0cnVlOwogCQl9IGVsc2UgaWYgKGJ0U3RhdGUgPT0gMHgzKSB7CiAJCQlwQnRDb2V4LT5jMmhCdEluZm8gPSBCVF9JTkZPX1NUQVRFX1NDT19PTkxZX0JVU1k7CkBAIC02MzgyLDE1ICs2NDMxLDE1IEBACiAJCX0gZWxzZSBpZiAoYnRTdGF0ZSA9PSAweGIpIHsKIAkJCXBCdENvZXgtPmMyaEJ0SW5mbyA9IEJUX0lORk9fU1RBVEVfQUNMX1NDT19CVVNZOwogCQkJcEJ0TWdudC0+RXh0Q29uZmlnLmJCVEJ1c3kgPSB0cnVlOwotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCXBCdENvZXgtPmMyaEJ0SW5mbyA9IEJUX0lORk9fU1RBVEVfTUFYOwotCQl9CiAJCWlmIChwQnRNZ250LT5FeHRDb25maWcuYkJUQnVzeSkKLQkJCXBIYWxEYXRhLT5idF9jb2V4aXN0LkN1cnJlbnRTdGF0ZSAmPSB+QlRfQ09FWF9TVEFURV9CVF9JRExFOworCQkJcEhhbERhdGEtPmJ0X2NvZXhpc3QuQ3VycmVudFN0YXRlICY9CisJCQkJfkJUX0NPRVhfU1RBVEVfQlRfSURMRTsKIAl9CiAKLQlpZiAoKEJUX0lORk9fU1RBVEVfTk9fQ09OTkVDVElPTiA9PSBwQnRDb2V4LT5jMmhCdEluZm8pIHx8Ci0JICAgIChCVF9JTkZPX1NUQVRFX0NPTk5FQ1RfSURMRSA9PSBwQnRDb2V4LT5jMmhCdEluZm8pKSB7CisJaWYgKEJUX0lORk9fU1RBVEVfTk9fQ09OTkVDVElPTiA9PSBwQnRDb2V4LT5jMmhCdEluZm8gfHwKKwkgICAgQlRfSU5GT19TVEFURV9DT05ORUNUX0lETEUgPT0gcEJ0Q29leC0+YzJoQnRJbmZvKSB7CiAJCWlmIChwQnRDb2V4LT5iQzJoQnRJbnF1aXJ5UGFnZSkKIAkJCXBCdENvZXgtPmMyaEJ0SW5mbyA9IEJUX0lORk9fU1RBVEVfSU5RX09SX1BBRzsKIAl9CkBAIC02NDEzLDEyICs2NDYyLDE0IEBACiAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU0lURV9NT05JVE9SKSkgewogCQkvKiAgYWxyZWFkeSBkb25lIGluIEJURE1fMUFudEZvclNjYW4oKSAqLwotCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQ29leF0sIHdpZmkgaXMgdW5kZXIgc2NhbiBwcm9ncmVzcyEhXG4iKSk7CisJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwKKwkJCSgiW0JUQ29leF0sIHdpZmkgaXMgdW5kZXIgc2NhbiBwcm9ncmVzcyEhXG4iKSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfVU5ERVJfTElOS0lORykpIHsKLQkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCB3aWZpIGlzIHVuZGVyIGxpbmsgcHJvZ3Jlc3MhIVxuIikpOworCQlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsCisJCQkoIltCVENvZXhdLCB3aWZpIGlzIHVuZGVyIGxpbmsgcHJvZ3Jlc3MhIVxuIikpOwogCQlyZXR1cm47CiAJfQogCkBAIC02NDM3LDkgKzY0ODgsNyBAQAogfQogCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMzFBbnQuYyA9PT09PSAqLwotI2VuZGlmCiAKLSNpZmRlZiBfX0hBTEJUQzg3MjMyQU5UX0NfXyAvKiAgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzMkFudC5jICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMzJBbnQuYyA9PT09PSAqLwogCiAvKiAgbG9jYWwgZnVuY3Rpb24gc3RhcnQgd2l0aCBidGRtXyAqLwpAQCAtNjY5MSwxMyArNjc0MCwxMyBAQAogCQkgIHUzMiB2YWwweDZjOCwgdTggdmFsMHg2Y2MpCiB7CiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoInNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzAgPSAweCV4XG4iLCB2YWwweDZjMCkpOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDZjMCwgdmFsMHg2YzApOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweDZjMCwgdmFsMHg2YzApOwogCiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoInNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzggPSAweCV4XG4iLCB2YWwweDZjOCkpOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweDZjOCwgdmFsMHg2YzgpOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweDZjOCwgdmFsMHg2YzgpOwogCiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoInNldCBjb2V4IHRhYmxlLCBzZXQgMHg2Y2MgPSAweCV4XG4iLCB2YWwweDZjYykpOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIDB4NmNjLCB2YWwweDZjYyk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgMHg2Y2MsIHZhbDB4NmNjKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTg1MjAsOSArODU2OSw5IEBACiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVENvZXhdLCAyQW50IFBhcmFtZXRlciBJbml0ISFcbiIpKTsKIAogCS8qICBFbmFibGUgY291bnRlciBzdGF0aXN0aWNzICovCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgMHg3NmUsIDB4NCk7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgMHg3NzgsIDB4Myk7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgMHg0MCwgMHgyMCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgMHg3NmUsIDB4NCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgMHg3NzgsIDB4Myk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgMHg0MCwgMHgyMCk7CiAKIAkvKiAgZm9yY2UgdG8gcmVzZXQgY29leCBtZWNoYW5pc20gKi8KIAlwQnRkbTg3MjMtPnByZVZhbDB4NmMwID0gMHgwOwpAQCAtODkxOSw5ICs4OTY4LDcgQEAKIH0KIAogLyogID09PT09IEVuZCBvZiBzeW5jIGZyb20gU0Q3IGRyaXZlciBIQUwvQlRDb2V4aXN0L0hhbEJ0Yzg3MjMyQW50LmMgPT09PT0gKi8KLSNlbmRpZgogCi0jaWZkZWYgX19IQUxCVEM4NzIzX0NfXyAvKiAgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzLmMgKi8KIC8qICA9PT09PSBCZWxvdyB0aGlzIGxpbmUgaXMgc3luYyBmcm9tIFNENyBkcml2ZXIgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzLmMgPT09PT0gKi8KIAogc3RhdGljIHU4IGJ0Q29leERiZ0J1ZltCVF9UTVBfQlVGX1NJWkVdOwpAQCAtODk3NCwxMSArOTAyMSwxMSBAQAogCXJlZ0hQVHhSeCA9IFJFR19ISUdIX1BSSU9SSVRZX1RYUlg7CiAJcmVnTFBUeFJ4ID0gUkVHX0xPV19QUklPUklUWV9UWFJYOwogCi0JdTRUbXAgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCByZWdIUFR4UngpOworCXU0VG1wID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgcmVnSFBUeFJ4KTsKIAlyZWdIUFR4ID0gdTRUbXAgJiBiTWFza0xXb3JkOwogCXJlZ0hQUnggPSAodTRUbXAgJiBiTWFza0hXb3JkKT4+MTY7CiAKLQl1NFRtcCA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIHJlZ0xQVHhSeCk7CisJdTRUbXAgPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCByZWdMUFR4UngpOwogCXJlZ0xQVHggPSB1NFRtcCAmIGJNYXNrTFdvcmQ7CiAJcmVnTFBSeCA9ICh1NFRtcCAmIGJNYXNrSFdvcmQpPj4xNjsKIApAQCAtODk5MSw3ICs5MDM4LDcgQEAKIAlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiTG93IFByaW9yaXR5IFR4L1J4ID0gJWQgLyAlZFxuIiwgcmVnTFBUeCwgcmVnTFBSeCkpOwogCiAJLyogIHJlc2V0IGNvdW50ZXIgKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCAweDc2ZSwgMHhjKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDc2ZSwgMHhjKTsKIH0KIAogLyogIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgODcyMyBidCBpcyBkaXNhYmxlZCAqLwpAQCAtOTAwNCw3ICs5MDUxLDcgQEAKIAl1OCB2YWw4OwogCiAJLyogIG94NjhbMjhdPSAxID0+IEJUIGVuYWJsZTsgb3RoZXJ3aXNlIGRpc2FibGUgKi8KLQl2YWw4ID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDZCKTsKKwl2YWw4ID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCAweDZCKTsKIAlpZiAoISh2YWw4ICYgQklUKDQpKSkKIAkJYnRBbGlmZSA9IGZhbHNlOwogCkBAIC05MTk3LDcgKzkyNDQsNyBAQAogewogCXU4IEgyQ19QYXJhbWV0ZXJbNV0gPSB7MH07CiAKLQlpZiAoQlRETV8xQW50ODcyM0EocGFkYXB0ZXIpKSB7CisJaWYgKHJ0bDg3MjNhX0JUX3VzaW5nX2FudGVubmFfMShwYWRhcHRlcikpIHsKIAkJaWYgKCghY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpKSAmJgogCQkgICAgKGdldF9md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYpICE9IFdJRklfTlVMTF9TVEFURSkpIHsKIAkJCS8qICBmb3Igc29mdGFwIG1vZGUgKi8KQEAgLTkyNDEsNyArOTI4OCw3IEBACiAJcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCXBCdENvZXggPSAmcEhhbERhdGEtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjM7CiAKLQlpZiAoQlRfSXNCdERpc2FibGVkKHBhZGFwdGVyKSkgeworCWlmICghcnRsODcyM2FfQlRfZW5hYmxlZChwYWRhcHRlcikpIHsKIAkJcEJ0Q29leC0+YzJoQnRJbmZvID0gQlRfSU5GT19TVEFURV9ESVNBQkxFRDsKIAkJcEJ0Q29leC0+YkMyaEJ0SW5mb1JlcVNlbnQgPSBmYWxzZTsKIAkJcmV0dXJuOwpAQCAtOTI4OCw3ICs5MzM1LDcgQEAKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAl1OCB0bXBVMTsKIAotCXRtcFUxID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDRmZCk7CisJdG1wVTEgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIDB4NGZkKTsKIAl0bXBVMSB8PSBCSVQoMCk7CiAJaWYgKEJUX1RYX1JBVEVfQURBUFRJVkVfTE9XX1BFTkFMVFkgPT0gcmFUeXBlKSB7CiAJCXRtcFUxICY9IH5CSVQoMik7CkBAIC05Mjk3LDcgKzkzNDQsNyBAQAogCQl0bXBVMSB8PSBCSVQoMik7CiAJfQogCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgMHg0ZmQsIHRtcFUxKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAweDRmZCwgdG1wVTEpOwogfQogCiB2b2lkIEJURE1fU2V0RndEZWNCdFB3cihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiRGVjQnRQd3IpCkBAIC05MzQ5LDggKzkzOTYsOCBAQAogLypSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0JUQzJIXSwgQlQgUlNTSSA9JWRcbiIsIHBlcmNlbnQpKTsgKi8KIH0KIAotc3RhdGljIHZvaWQKLUJURE1fRndDMmhCdEluZm84NzIzQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqdG1wQnVmLCB1OCBsZW5ndGgpCit2b2lkCitydGw4NzIzYV9md19jMmhfQlRfaW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqdG1wQnVmLCB1OCBsZW5ndGgpCiB7CiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YTsKIAlzdHJ1Y3QgYnRfMzBpbmZvICpwQlRJbmZvOwpAQCAtOTQxOSw3ICs5NDY2LDcgQEAKIAlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gPT09PT09PT09PT09W0JUIENvZXhpc3QgaW5mb109PT09PT09PT09PT0iKTsKIAlEQ01EX1ByaW50ZihidENvZXhEYmdCdWYpOwogCi0JaWYgKCFwSGFsRGF0YS0+YnRfY29leGlzdC5CbHVldG9vdGhDb2V4aXN0KSB7CisJaWYgKCFydGw4NzIzYV9CVF9jb2V4aXN0KHBhZGFwdGVyKSkgewogCQlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gQlQgbm90IGV4aXN0cyAhISEiKTsKIAkJRENNRF9QcmludGYoYnRDb2V4RGJnQnVmKTsKIAkJcmV0dXJuOwpAQCAtOTQ3Myw3ICs5NTIwLDggQEAKIAogCQkJCQlidEluZm9FeHQgPSBwSGFsRGF0YS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5idEluZm9FeHQ7CiAJCQkJCXJzcHJpbnRmKGJ0Q29leERiZ0J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzIiwgIkEyRFAgcmF0ZSIsIFwKLQkJCQkJCShidEluZm9FeHQmQklUMCkgPyAiQmFzaWMgcmF0ZSIgOiAiRURSIHJhdGUiKTsKKwkJCQkJCSAoYnRJbmZvRXh0ICYgQklUKDApKSA/CisJCQkJCQkgIkJhc2ljIHJhdGUiIDogIkVEUiByYXRlIik7CiAJCQkJCURDTURfUHJpbnRmKGJ0Q29leERiZ0J1Zik7CiAJCQkJfSBlbHNlIHsKIAkJCQkJcnNwcmludGYoYnRDb2V4RGJnQnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJXMvICVzIiwgIkJ0IGxpbmsgdHlwZS9zcGVjIiwgXApAQCAtOTUyNyw5ICs5NTc1LDkgQEAKIAkJCXBCdENvZXgtPmJ0ZG0yQW50LmJDdXJEZWNCdFB3cik7CiAJCURDTURfUHJpbnRmKGJ0Q29leERiZ0J1Zik7CiAJfQotCXUxVG1wID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDc3OCk7Ci0JdTFUbXAxID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDc4Myk7Ci0JdTFUbXAyID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDc5Nik7CisJdTFUbXAgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIDB4Nzc4KTsKKwl1MVRtcDEgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIDB4NzgzKTsKKwl1MVRtcDIgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIDB4Nzk2KTsKIAlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4IiwgIjB4Nzc4LyAweDc4My8gMHg3OTYiLCBcCiAJCXUxVG1wLCB1MVRtcDEsIHUxVG1wMik7CiAJRENNRF9QcmludGYoYnRDb2V4RGJnQnVmKTsKQEAgLTk1MzksNyArOTU4Nyw3IEBACiAJCQlwQnRDb2V4LT5idGRtMkFudC5iQ3VyRGFjU3dpbmdPbiwgcEJ0Q29leC0+YnRkbTJBbnQuY3VyRGFjU3dpbmdMdmwpOwogCQlEQ01EX1ByaW50ZihidENvZXhEYmdCdWYpOwogCX0KLQl1NFRtcFswXSA9ICBydHdfcmVhZDMyKHBhZGFwdGVyLCAweDg4MCk7CisJdTRUbXBbMF0gPSAgcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgMHg4ODApOwogCXJzcHJpbnRmKGJ0Q29leERiZ0J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgiLCAiMHg4ODAiLCBcCiAJCXU0VG1wWzBdKTsKIAlEQ01EX1ByaW50ZihidENvZXhEYmdCdWYpOwpAQCAtOTU1MCw1NiArOTU5OCw1NiBAQAogCQlEQ01EX1ByaW50ZihidENvZXhEYmdCdWYpOwogCX0KIAotCXUxVG1wID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDQwKTsKKwl1MVRtcCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgMHg0MCk7CiAJcnNwcmludGYoYnRDb2V4RGJnQnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gMHgleCIsICIweDQwIiwgXAogCQl1MVRtcCk7CiAJRENNRF9QcmludGYoYnRDb2V4RGJnQnVmKTsKIAotCXU0VG1wWzBdID0gcnR3X3JlYWQzMihwYWRhcHRlciwgMHg1NTApOwotCXUxVG1wID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDUyMik7CisJdTRUbXBbMF0gPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCAweDU1MCk7CisJdTFUbXAgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIDB4NTIyKTsKIAlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LzB4JXgiLCAiMHg1NTAoYmNuIGNvbnRybCkvMHg1MjIiLCBcCiAJCXU0VG1wWzBdLCB1MVRtcCk7CiAJRENNRF9QcmludGYoYnRDb2V4RGJnQnVmKTsKIAotCXU0VG1wWzBdID0gcnR3X3JlYWQzMihwYWRhcHRlciwgMHg0ODQpOworCXU0VG1wWzBdID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgMHg0ODQpOwogCXJzcHJpbnRmKGJ0Q29leERiZ0J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgiLCAiMHg0ODQocmF0ZSBhZGFwdGl2ZSkiLCBcCiAJCXU0VG1wWzBdKTsKIAlEQ01EX1ByaW50ZihidENvZXhEYmdCdWYpOwogCi0JdTRUbXBbMF0gPSBydHdfcmVhZDMyKHBhZGFwdGVyLCAweDUwKTsKKwl1NFRtcFswXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4NTApOwogCXJzcHJpbnRmKGJ0Q29leERiZ0J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgiLCAiMHhjNTAoZGlnKSIsIFwKIAkJdTRUbXBbMF0pOwogCURDTURfUHJpbnRmKGJ0Q29leERiZ0J1Zik7CiAKLQl1NFRtcFswXSA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIDB4ZGEwKTsKLQl1NFRtcFsxXSA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIDB4ZGE0KTsKLQl1NFRtcFsyXSA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIDB4ZGE4KTsKLQl1NFRtcFszXSA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIDB4ZGFjKTsKKwl1NFRtcFswXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4ZGEwKTsKKwl1NFRtcFsxXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4ZGE0KTsKKwl1NFRtcFsyXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4ZGE4KTsKKwl1NFRtcFszXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4ZGFjKTsKIAlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4LyAweCV4LyAweCV4LyAweCV4IiwgIjB4ZGEwLzB4ZGE0LzB4ZGE4LzB4ZGFjKEZBIGNudCkiLCBcCiAJCXU0VG1wWzBdLCB1NFRtcFsxXSwgdTRUbXBbMl0sIHU0VG1wWzNdKTsKIAlEQ01EX1ByaW50ZihidENvZXhEYmdCdWYpOwogCi0JdTRUbXBbMF0gPSBydHdfcmVhZDMyKHBhZGFwdGVyLCAweDZjMCk7Ci0JdTRUbXBbMV0gPSBydHdfcmVhZDMyKHBhZGFwdGVyLCAweDZjNCk7Ci0JdTRUbXBbMl0gPSBydHdfcmVhZDMyKHBhZGFwdGVyLCAweDZjOCk7Ci0JdTFUbXAgPSBydHdfcmVhZDgocGFkYXB0ZXIsIDB4NmNjKTsKKwl1NFRtcFswXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4NmMwKTsKKwl1NFRtcFsxXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4NmM0KTsKKwl1NFRtcFsyXSA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4NmM4KTsKKwl1MVRtcCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgMHg2Y2MpOwogCXJzcHJpbnRmKGJ0Q29leERiZ0J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9IDB4JXgvIDB4JXgvIDB4JXgvIDB4JXgiLCAiMHg2YzAvMHg2YzQvMHg2YzgvMHg2Y2MoY29leFRhYmxlKSIsIFwKIAkJdTRUbXBbMF0sIHU0VG1wWzFdLCB1NFRtcFsyXSwgdTFUbXApOwogCURDTURfUHJpbnRmKGJ0Q29leERiZ0J1Zik7CiAKLQkvKiB1NFRtcCA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIDB4NzcwKTsgKi8KKwkvKiB1NFRtcCA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIDB4NzcwKTsgKi8KIAlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAlZCAvICVkIiwgIjB4NzcwKEhpIHByaSBSeFszMToxNl0vVHhbMTU6MF0pIiwgXAogCQlwSGFsRGF0YS0+YnRfY29leGlzdC5oYWxDb2V4ODcyMy5oaWdoUHJpb3JpdHlSeCwKIAkJcEhhbERhdGEtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjMuaGlnaFByaW9yaXR5VHgpOwogCURDTURfUHJpbnRmKGJ0Q29leERiZ0J1Zik7Ci0JLyogdTRUbXAgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCAweDc3NCk7ICovCisJLyogdTRUbXAgPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCAweDc3NCk7ICovCiAJcnNwcmludGYoYnRDb2V4RGJnQnVmLCBCVF9UTVBfQlVGX1NJWkUsICJcclxuICUtMzVzID0gJWQgLyAlZCIsICIweDc3NChMbyBwcmkgUnhbMzE6MTZdL1R4WzE1OjBdKSIsIFwKIAkJcEhhbERhdGEtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjMubG93UHJpb3JpdHlSeCwKIAkJcEhhbERhdGEtPmJ0X2NvZXhpc3QuaGFsQ29leDg3MjMubG93UHJpb3JpdHlUeCk7CiAJRENNRF9QcmludGYoYnRDb2V4RGJnQnVmKTsKIAogCS8qICBUeCBtZ250IHF1ZXVlIGhhbmcgb3Igbm90LCAweDQxYiBzaG91bGQgPSAweGYsIGV4OiAweGQgPT0+aGFuZyAqLwotCXUxVG1wID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCAweDQxYik7CisJdTFUbXAgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIDB4NDFiKTsKIAlyc3ByaW50ZihidENvZXhEYmdCdWYsIEJUX1RNUF9CVUZfU0laRSwgIlxyXG4gJS0zNXMgPSAweCV4IiwgIjB4NDFiIChoYW5nIGNoayA9PSAweGYpIiwgXAogCQl1MVRtcCk7CiAJRENNRF9QcmludGYoYnRDb2V4RGJnQnVmKTsKQEAgLTk2NzIsNyArOTcyMCw3IEBACiAJCXBCdENvZXgtPlRvdGFsQW50TnVtID0gQW50X3gyOwogfQogCi12b2lkIEJURE1fTHBzTGVhdmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3ZvaWQgcnRsODcyM2FfQlRfbHBzX2xlYXZlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IGJ0XzMwaW5mbyAqcEJUSW5mbyA9IEdFVF9CVF9JTkZPKHBhZGFwdGVyKTsKIAlzdHJ1Y3QgYnRfbWdudCAqcEJ0TWdudCA9ICZwQlRJbmZvLT5CdE1nbnQ7CkBAIC05NzUyLDcgKzk4MDAsNyBAQAogCQlCVERNXzFBbnRGb3JEaGNwKHBhZGFwdGVyKTsKIH0KIAotdTggQlRETV8xQW50ODcyM0Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK2Jvb2wgcnRsODcyM2FfQlRfdXNpbmdfYW50ZW5uYV8xKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJaWYgKGJ0ZG1fQnRXaWZpQW50TnVtKHBhZGFwdGVyKSA9PSBBbnRfeDEpCiAJCXJldHVybiB0cnVlOwpAQCAtOTc4NSw3ICs5ODMzLDcgQEAKIAl9CiAKIAlpZiAocEJ0Q29leC0+YkMyaEJ0SW5mb1JlcVNlbnQpIHsKLQkJaWYgKEJUX0lzQnREaXNhYmxlZChwYWRhcHRlcikpIHsKKwkJaWYgKCFydGw4NzIzYV9CVF9lbmFibGVkKHBhZGFwdGVyKSkgewogCQkJcEJ0Q29leC0+YzJoQnRJbmZvID0gQlRfSU5GT19TVEFURV9ESVNBQkxFRDsKIAkJfSBlbHNlIHsKIAkJCWlmIChwQnRDb2V4LT5jMmhCdEluZm8gPT0gQlRfSU5GT19TVEFURV9ESVNBQkxFRCkKQEAgLTk3OTMsNyArOTg0MSw3IEBACiAJCX0KIAogCQlidGRtX0JUQ29leGlzdDg3MjNBSGFuZGxlcihwYWRhcHRlcik7Ci0JfSBlbHNlIGlmIChCVF9Jc0J0RGlzYWJsZWQocGFkYXB0ZXIpID09IHRydWUpIHsKKwl9IGVsc2UgaWYgKCFydGw4NzIzYV9CVF9lbmFibGVkKHBhZGFwdGVyKSkgewogCQlwQnRDb2V4LT5jMmhCdEluZm8gPSBCVF9JTkZPX1NUQVRFX0RJU0FCTEVEOwogCQlidGRtX0JUQ29leGlzdDg3MjNBSGFuZGxlcihwYWRhcHRlcik7CiAJfQpAQCAtOTgwMiw5ICs5ODUwLDcgQEAKIH0KIAogLyogID09PT09IEVuZCBvZiBzeW5jIGZyb20gU0Q3IGRyaXZlciBIQUwvQlRDb2V4aXN0L0hhbEJ0Yzg3MjMuYyA9PT09PSAqLwotI2VuZGlmCiAKLSNpZmRlZiBfX0hBTEJUQ0NTUjFBTlRfQ19fIC8qICBIQUwvQlRDb2V4aXN0L0hhbEJ0Y0NzcjFBbnQuYyAqLwogLyogID09PT09IEJlbG93IHRoaXMgbGluZSBpcyBzeW5jIGZyb20gU0Q3IGRyaXZlciBIQUwvQlRDb2V4aXN0L0hhbEJ0Y0NzcjFBbnQuYyA9PT09PSAqLwogCiAvKiAgbG9jYWwgZnVuY3Rpb24gc3RhcnQgd2l0aCBidGRtXyAqLwpAQCAtOTg2Niw3ICs5OTEyLDcgQEAKIAl1MzIJCQkJQlRfQWN0aXZlLCBCVF9TdGF0ZTsKIAl1MzIJCQkJcmVnQlRBY3RpdmUgPSAwLCByZWdCVFN0YXRlID0gMCwgcmVnQlRQb2xsaW5nID0gMDsKIAotCWlmICghcEhhbERhdGEtPmJ0X2NvZXhpc3QuQmx1ZXRvb3RoQ29leGlzdCkKKwlpZiAoIXJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpKQogCQlyZXR1cm47CiAJaWYgKHBCdE1nbnQtPkV4dENvbmZpZy5iTWFudWFsQ29udHJvbCkKIAkJcmV0dXJuOwpAQCAtOTg4NSwxNSArOTkzMSwxNSBAQAogCWVsc2UKIAkJcmVnQlRQb2xsaW5nID0gUkVHX0JUX1BPTExJTkc7CiAKLQlCVF9BY3RpdmUgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCByZWdCVEFjdGl2ZSk7CisJQlRfQWN0aXZlID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgcmVnQlRBY3RpdmUpOwogCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbRE1dW0JUXSwgQlRfQWN0aXZlKDB4JXgpID0leFxuIiwgcmVnQlRBY3RpdmUsIEJUX0FjdGl2ZSkpOwogCUJUX0FjdGl2ZSA9IEJUX0FjdGl2ZSAmIDB4MDBmZmZmZmY7CiAKLQlCVF9TdGF0ZSA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIHJlZ0JUU3RhdGUpOworCUJUX1N0YXRlID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgcmVnQlRTdGF0ZSk7CiAJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltETV1bQlRdLCBCVF9TdGF0ZSgweCV4KSA9JXhcbiIsIHJlZ0JUU3RhdGUsIEJUX1N0YXRlKSk7CiAJQlRfU3RhdGUgPSBCVF9TdGF0ZSAmIDB4MDBmZmZmZmY7CiAKLQlCVF9Qb2xsaW5nID0gcnR3X3JlYWQzMihwYWRhcHRlciwgcmVnQlRQb2xsaW5nKTsKKwlCVF9Qb2xsaW5nID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgcmVnQlRQb2xsaW5nKTsKIAlSVFBSSU5UKEZCVCwgQlRfVFJBQ0UsICgiW0RNXVtCVF0sIEJUX1BvbGxpbmcoMHgleCkgPSV4XG4iLCByZWdCVFBvbGxpbmcsIEJUX1BvbGxpbmcpKTsKIAogCWlmIChCVF9BY3RpdmUgPT0gMHhmZmZmZmZmZiAmJiBCVF9TdGF0ZSA9PSAweGZmZmZmZmZmICYmIEJUX1BvbGxpbmcgPT0gMHhmZmZmZmZmZikKQEAgLTk5OTEsOSArMTAwMzcsNyBAQAogfQogCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMUFudC5jID09PT09ICovCi0jZW5kaWYKIAotI2lmZGVmIF9fSEFMQlRDQ1NSMkFOVF9DX18gLyogIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMkFudC5jICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMkFudC5jID09PT09ICovCiAKIC8qICBsb2NhbCBmdW5jdGlvbiBzdGFydCB3aXRoIGJ0ZG1fICovCkBAIC0xMDA0OCw5ICsxMDA5Miw3IEBACiB9CiAKIC8qICA9PT09PSBFbmQgb2Ygc3luYyBmcm9tIFNENyBkcml2ZXIgSEFML0JUQ29leGlzdC9IYWxCdGNDc3IyQW50LmMgPT09PT0gKi8KLSNlbmRpZgogCi0jaWZkZWYgX19IQUxCVENPRVhJU1RfQ19fIC8qICBIQUwvQlRDb2V4aXN0L0hhbEJ0Q29leGlzdC5jICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRDb2V4aXN0LmMgPT09PT0gKi8KIAogLyogIGxvY2FsIGZ1bmN0aW9uICovCkBAIC0xMDA4OSwxMSArMTAxMzEsNiBAQAogCUJURE1fRndDMmhCdFJzc2k4NzIzQShwYWRhcHRlciwgdG1wQnVmKTsKIH0KIAotdm9pZCBCVERNX0Z3QzJoQnRJbmZvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICp0bXBCdWYsIHU4IGxlbmd0aCkKLXsKLQlCVERNX0Z3QzJoQnRJbmZvODcyM0EocGFkYXB0ZXIsIHRtcEJ1ZiwgbGVuZ3RoKTsKLX0KLQogdm9pZCBCVERNX0Rpc3BsYXlCdENvZXhJbmZvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJQlRETV9EaXNwbGF5ODcyM0FCdENvZXhJbmZvKHBhZGFwdGVyKTsKQEAgLTEwNDg5LDE4ICsxMDUyNiwxOCBAQAogCXJldHVybiBidFJzc2lTdGF0ZTsKIH0KIAotdTggQlRETV9EaXNhYmxlRURDQVR1cmJvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitib29sIHJ0bDg3MjNhX0JUX2Rpc2FibGVfRURDQV90dXJibyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBidF9tZ250ICpwQnRNZ250OwogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGE7CiAJdTggYkJ0Q2hhbmdlRURDQSA9IGZhbHNlOwogCXUzMiBFRENBX0JUX0JFID0gMHg1ZWE0MmIsIGN1cl9FRENBX3JlZzsKLQl1OCBiUmV0ID0gZmFsc2U7CisJYm9vbCBiUmV0ID0gZmFsc2U7CiAKIAlwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAJcEJ0TWdudCA9ICZwSGFsRGF0YS0+QnRJbmZvLkJ0TWdudDsKIAotCWlmICghcEhhbERhdGEtPmJ0X2NvZXhpc3QuQmx1ZXRvb3RoQ29leGlzdCkgeworCWlmICghcnRsODcyM2FfQlRfY29leGlzdChwYWRhcHRlcikpIHsKIAkJYlJldCA9IGZhbHNlOwogCQlwSGFsRGF0YS0+YnRfY29leGlzdC5sYXN0QnRFZGNhID0gMDsKIAkJcmV0dXJuIGJSZXQ7CkBAIC0xMDUxMiw3ICsxMDU0OSw3IEBACiAJCXJldHVybiBiUmV0OwogCX0KIAotCWlmIChCVF8xQW50KHBhZGFwdGVyKSkgeworCWlmIChydGw4NzIzYV9CVF91c2luZ19hbnRlbm5hXzEocGFkYXB0ZXIpKSB7CiAJCWJSZXQgPSBmYWxzZTsKIAkJcEhhbERhdGEtPmJ0X2NvZXhpc3QubGFzdEJ0RWRjYSA9IDA7CiAJCXJldHVybiBiUmV0OwpAQCAtMTA1MzMsMTIgKzEwNTcwLDEzIEBACiAJCQlwSGFsRGF0YS0+b2RtcHJpdi5ETV9FRENBX1RhYmxlLmJDdXJyZW50VHVyYm9FRENBID0gZmFsc2U7CiAJCQlwSGFsRGF0YS0+ZG1wcml2LnBydl90cmFmZmljX2lkeCA9IDM7CiAJCX0KLQkJY3VyX0VEQ0FfcmVnID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX0VEQ0FfQkVfUEFSQU0pOworCQljdXJfRURDQV9yZWcgPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBSRUdfRURDQV9CRV9QQVJBTSk7CiAKIAkJaWYgKGN1cl9FRENBX3JlZyAhPSBFRENBX0JUX0JFKQogCQkJYkJ0Q2hhbmdlRURDQSA9IHRydWU7CiAJCWlmIChiQnRDaGFuZ2VFRENBIHx8ICFwSGFsRGF0YS0+YnRfY29leGlzdC5iRURDQUluaXRpYWxpemVkKSB7Ci0JCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX0VEQ0FfQkVfUEFSQU0sIEVEQ0FfQlRfQkUpOworCQkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19FRENBX0JFX1BBUkFNLAorCQkJCQkgIEVEQ0FfQlRfQkUpOwogCQkJcEhhbERhdGEtPmJ0X2NvZXhpc3QubGFzdEJ0RWRjYSA9IEVEQ0FfQlRfQkU7CiAJCX0KIAkJYlJldCA9IHRydWU7CkBAIC0xMDU4NSwxMSArMTA2MjMsMTEgQEAKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAlpZiAodHlwZSA9PSBCVF9BR0NUQUJMRV9PRkYpIHsKIAkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVF1BR0NUYWJsZSBPZmYhXG4iKSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2NDFjMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MzFkMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MjFlMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MTFmMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MDIwMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2NDFjMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MzFkMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MjFlMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MTFmMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg2MDIwMDAwMSk7CiAKIAkJUEhZX1NldFJGUmVnKHBhZGFwdGVyLCBQYXRoQSwgUkZfUlhfQUdDX0hQLCBiUkZSZWdPZmZzZXRNYXNrLCAweDMyMDAwKTsKIAkJUEhZX1NldFJGUmVnKHBhZGFwdGVyLCBQYXRoQSwgUkZfUlhfQUdDX0hQLCBiUkZSZWdPZmZzZXRNYXNrLCAweDcxMDAwKTsKQEAgLTEwNjAwLDExICsxMDYzOCwxMSBAQAogCQlwSGFsRGF0YS0+YnRfY29leGlzdC5iODcyM2FBZ2NUYWJsZU9uID0gZmFsc2U7CiAJfSBlbHNlIGlmICh0eXBlID09IEJUX0FHQ1RBQkxFX09OKSB7CiAJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRdQUdDVGFibGUgT24hXG4iKSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0ZTFjMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0ZDFkMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0YzFlMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0YjFmMDAwMSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0YTIwMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0ZTFjMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0ZDFkMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0YzFlMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0YjFmMDAwMSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCAweGM3OCwgMHg0YTIwMDAwMSk7CiAKIAkJUEhZX1NldFJGUmVnKHBhZGFwdGVyLCBQYXRoQSwgUkZfUlhfQUdDX0hQLCBiUkZSZWdPZmZzZXRNYXNrLCAweGRjMDAwKTsKIAkJUEhZX1NldFJGUmVnKHBhZGFwdGVyLCBQYXRoQSwgUkZfUlhfQUdDX0hQLCBiUkZSZWdPZmZzZXRNYXNrLCAweDkwMDAwKTsKQEAgLTEwNjI0LDEwICsxMDY2MiwxMCBAQAogCiAJaWYgKHR5cGUgPT0gQlRfQkJfQkFDS09GRl9PRkYpIHsKIAkJUlRQUklOVChGQlQsIEJUX1RSQUNFLCAoIltCVF1CQkJhY2tPZmZMZXZlbCBPZmYhXG4iKSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGMwNCwgMHgzYTA1NjExKTsKKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4YzA0LCAweDNhMDU2MTEpOwogCX0gZWxzZSBpZiAodHlwZSA9PSBCVF9CQl9CQUNLT0ZGX09OKSB7CiAJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbQlRdQkJCYWNrT2ZmTGV2ZWwgT24hXG4iKSk7Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCAweGMwNCwgMHgzYTA3NjExKTsKKwkJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIDB4YzA0LCAweDNhMDc2MTEpOwogCQlwSGFsRGF0YS0+YnRfY29leGlzdC5iU1dDb2V4aXN0QWxsT2ZmID0gZmFsc2U7CiAJfQogfQpAQCAtMTA2ODAsMTYgKzEwNzE4LDE1IEBACiAJQlRETV9IV0NvZXhBbGxPZmYocGFkYXB0ZXIpOwogfQogCi12b2lkIEJURE1fVHVybk9mZkJ0Q29leGlzdEJlZm9yZUVudGVySVBTKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCit2b2lkIHJ0bDg3MjNhX0JUX2Rpc2FibGVfY29leGlzdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnBwd3JjdHJsID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKIAotCWlmICghcEhhbERhdGEtPmJ0X2NvZXhpc3QuQmx1ZXRvb3RoQ29leGlzdCkKKwlpZiAoIXJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpKQogCQlyZXR1cm47CiAKIAkvKiAgODcyMyAxQW50IGRvZXNuJ3QgbmVlZCB0byB0dXJuIG9mZiBidCBjb2V4aXN0IG1lY2hhbmlzbS4gKi8KLQlpZiAoQlRETV8xQW50ODcyM0EocGFkYXB0ZXIpKQorCWlmIChydGw4NzIzYV9CVF91c2luZ19hbnRlbm5hXzEocGFkYXB0ZXIpKQogCQlyZXR1cm47CiAKIAkvKiAgQmVmb3JlIGVudGVyIElQUywgdHVybiBvZmYgRlcgQlQgQ28tZXhpc3QgbWVjaGFuaXNtICovCkBAIC0xMDcwNiwxMSArMTA3NDMsMTEgQEAKIAlCVERNXzg3MjNBU2lnbmFsQ29tcGVuc2F0aW9uKHBhZGFwdGVyLCByc3NpX3dpZmksIHJzc2lfYnQpOwogfQogCi12b2lkIEJURE1fQ29leGlzdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQordm9pZCBydGw4NzIzYV9CVF9kb19jb2V4aXN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAKLQlpZiAoIXBIYWxEYXRhLT5idF9jb2V4aXN0LkJsdWV0b290aENvZXhpc3QpIHsKKwlpZiAoIXJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpKSB7CiAJCVJUUFJJTlQoRkJULCBCVF9UUkFDRSwgKCJbRE1dW0JUXSwgQlQgbm90IGV4aXN0cyEhXG4iKSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDkyMCw5ICsxMDk1Nyw3IEBACiAKIHZvaWQgQlRETV9Gb3JIYWx0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0KLQlpZiAoIXBIYWxEYXRhLT5idF9jb2V4aXN0LkJsdWV0b290aENvZXhpc3QpCisJaWYgKCFydGw4NzIzYV9CVF9jb2V4aXN0KHBhZGFwdGVyKSkKIAkJcmV0dXJuOwogCiAJQlRETV9Gb3JIYWx0ODcyM0EocGFkYXB0ZXIpOwpAQCAtMTA5MzEsOSArMTA5NjYsNyBAQAogCiB2b2lkIEJURE1fV2lmaVNjYW5Ob3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggc2NhblR5cGUpCiB7Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0KLQlpZiAoIXBIYWxEYXRhLT5idF9jb2V4aXN0LkJsdWV0b290aENvZXhpc3QpCisJaWYgKCFydGw4NzIzYV9CVF9jb2V4aXN0KHBhZGFwdGVyKSkKIAkJcmV0dXJuOwogCiAJQlRETV9XaWZpU2Nhbk5vdGlmeTg3MjNBKHBhZGFwdGVyLCBzY2FuVHlwZSk7CkBAIC0xMDk0MSwyOSArMTA5NzQsMjQgQEAKIAogdm9pZCBCVERNX1dpZmlBc3NvY2lhdGVOb3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggYWN0aW9uKQogewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwotCi0JaWYgKCFwSGFsRGF0YS0+YnRfY29leGlzdC5CbHVldG9vdGhDb2V4aXN0KQorCWlmICghcnRsODcyM2FfQlRfY29leGlzdChwYWRhcHRlcikpCiAJCXJldHVybjsKIAogCUJURE1fV2lmaUFzc29jaWF0ZU5vdGlmeTg3MjNBKHBhZGFwdGVyLCBhY3Rpb24pOwogfQogCi12b2lkIEJURE1fTWVkaWFTdGF0dXNOb3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBydF9tZWRpYV9zdGF0dXMgbXN0YXR1cykKK3ZvaWQgcnRsODcyM2FfQlRfbWVkaWFzdGF0dXNfbm90aWZ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkJICAgIGVudW0gcnRfbWVkaWFfc3RhdHVzIG1zdGF0dXMpCiB7Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0KLQlpZiAoIXBIYWxEYXRhLT5idF9jb2V4aXN0LkJsdWV0b290aENvZXhpc3QpCisJaWYgKCFydGw4NzIzYV9CVF9jb2V4aXN0KHBhZGFwdGVyKSkKIAkJcmV0dXJuOwogCiAJQlRETV9NZWRpYVN0YXR1c05vdGlmeTg3MjNBKHBhZGFwdGVyLCBtc3RhdHVzKTsKIH0KIAotdm9pZCBCVERNX0ZvckRoY3Aoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3ZvaWQgcnRsODcyM2FfQlRfc3BlY2lhbHBhY2tldF9ub3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKLQotCWlmICghcEhhbERhdGEtPmJ0X2NvZXhpc3QuQmx1ZXRvb3RoQ29leGlzdCkKKwlpZiAoIXJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpKQogCQlyZXR1cm47CiAKIAlCVERNX0ZvckRoY3A4NzIzQShwYWRhcHRlcik7CkBAIC0xMTE3NSwyMCArMTEyMDMsMTggQEAKIAlyZXR1cm4gYlJldDsKIH0KIAotdTggQlRETV9Jc0J0RGlzYWJsZWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK2Jvb2wgcnRsODcyM2FfQlRfZW5hYmxlZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCiAJaWYgKHBIYWxEYXRhLT5idF9jb2V4aXN0LmJDdXJCdERpc2FibGVkKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCiAJCXJldHVybiBmYWxzZTsKKwllbHNlCisJCXJldHVybiB0cnVlOwogfQogCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRDb2V4aXN0LmMgPT09PT0gKi8KLSNlbmRpZgogCi0jaWZkZWYgX19IQUxCVF9DX18gLyogIEhBTC9IYWxCVC5jICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9IYWxCVC5jID09PT09ICovCiAKIC8qICAqLwpAQCAtMTEyMjEsNyArMTEyNDcsOSBAQAogCXBCdEFzc29jRW50cnktPkh3Q0FNSW5kZXggPSBCVF9IV0NBTV9TVEFSICsgRW50cnlOdW07CiAKIAl1c0NvbmZpZyA9IENBTV9WQUxJRCB8IChDQU1fQUVTIDw8IDIpOwotCXdyaXRlX2NhbTIzYShwYWRhcHRlciwgcEJ0QXNzb2NFbnRyeS0+SHdDQU1JbmRleCwgdXNDb25maWcsIHBCdEFzc29jRW50cnktPkJUUmVtb3RlTUFDQWRkciwgcEJ0QXNzb2NFbnRyeS0+UFRLICsgVEtJUF9FTkNfS0VZX1BPUyk7CisJcnRsODcyM2FfY2FtX3dyaXRlKHBhZGFwdGVyLCBwQnRBc3NvY0VudHJ5LT5Id0NBTUluZGV4LCB1c0NvbmZpZywKKwkJCSAgIHBCdEFzc29jRW50cnktPkJUUmVtb3RlTUFDQWRkciwKKwkJCSAgIHBCdEFzc29jRW50cnktPlBUSyArIFRLSVBfRU5DX0tFWV9QT1MpOwogfQogCiB2b2lkIEhBTEJUX1JlbW92ZUtleShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBFbnRyeU51bSkKQEAgLTExMjM0LDEzICsxMTI2MiwxNSBAQAogCiAJaWYgKHBCVGluZm8tPkJ0QXNvY0VudHJ5W0VudHJ5TnVtXS5Id0NBTUluZGV4ICE9IDApIHsKIAkJLyogIFRvRG8gOiBhZGQgTmV3IEhBTEJUX1JlbW92ZUtleSBmdW5jdGlvbiAhISAqLwotCQlpZiAocEJ0QXNzb2NFbnRyeS0+SHdDQU1JbmRleCA+PSBCVF9IV0NBTV9TVEFSICYmIHBCdEFzc29jRW50cnktPkh3Q0FNSW5kZXggPCBIQUxGX0NBTV9FTlRSWSkKLQkJCUNBTV9lbXB0eV9lbnRyeTIzYShwYWRhcHRlciwgcEJ0QXNzb2NFbnRyeS0+SHdDQU1JbmRleCk7CisJCWlmIChwQnRBc3NvY0VudHJ5LT5Id0NBTUluZGV4ID49IEJUX0hXQ0FNX1NUQVIgJiYKKwkJICAgIHBCdEFzc29jRW50cnktPkh3Q0FNSW5kZXggPCBIQUxGX0NBTV9FTlRSWSkKKwkJCXJ0bDg3MjNhX2NhbV9lbXB0eV9lbnRyeShwYWRhcHRlciwKKwkJCQkJCSBwQnRBc3NvY0VudHJ5LT5Id0NBTUluZGV4KTsKIAkJcEJUaW5mby0+QnRBc29jRW50cnlbRW50cnlOdW1dLkh3Q0FNSW5kZXggPSAwOwogCX0KIH0KIAotdm9pZCBIQUxCVF9Jbml0QlRWYXJzODcyM0Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3ZvaWQgcnRsODcyM2FfQlRfaW5pdF9oYWxfdmFycyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGE7CiAKQEAgLTExMjUyLDggKzExMjgyLDEwIEBACiAJcEhhbERhdGEtPmJ0X2NvZXhpc3QuQlRfQW50X2lzb2xhdGlvbiA9IHBIYWxEYXRhLT5FRVBST01CbHVldG9vdGhBbnRJc29sYXRpb247CiAJcEhhbERhdGEtPmJ0X2NvZXhpc3QuYnRfcmFkaW9zaGFyZWR0eXBlID0gcEhhbERhdGEtPkVFUFJPTUJsdWV0b290aFJhZGlvU2hhcmVkOwogCi0JUlRfVFJBQ0UoX21vZHVsZV9oYWxfaW5pdF9jXywgX2Rydl9pbmZvXywgKCJCVCBDb2V4aXN0YW5jZSA9IDB4JXhcbiIsIHBIYWxEYXRhLT5idF9jb2V4aXN0LkJsdWV0b290aENvZXhpc3QpKTsKLQlpZiAocEhhbERhdGEtPmJ0X2NvZXhpc3QuQmx1ZXRvb3RoQ29leGlzdCkgeworCVJUX1RSQUNFKF9tb2R1bGVfaGFsX2luaXRfY18sIF9kcnZfaW5mb18sCisJCSAoIkJUIENvZXhpc3RhbmNlID0gMHgleFxuIiwgcnRsODcyM2FfQlRfY29leGlzdChwYWRhcHRlcikpKTsKKworCWlmIChydGw4NzIzYV9CVF9jb2V4aXN0KHBhZGFwdGVyKSkgewogCQlpZiAocEhhbERhdGEtPmJ0X2NvZXhpc3QuQlRfQW50X051bSA9PSBBbnRfeDIpIHsKIAkJCUJURE1fU2V0QnRDb2V4Q3VyckFudE51bShwYWRhcHRlciwgMik7CiAJCQlSVF9UUkFDRShfbW9kdWxlX2hhbF9pbml0X2NfLCBfZHJ2X2luZm9fLCAoIkJsdWVUb290aCBCVF9BbnRfTnVtID0gQW50eDJcbiIpKTsKQEAgLTExMjczLDcgKzExMzA1LDcgQEAKIAl9CiB9CiAKLXU4IEhBTEJUX0lzQlRFeGlzdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQorYm9vbCBydGw4NzIzYV9CVF9jb2V4aXN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAKQEAgLTExMjkwLDEwICsxMTMyMiwxMCBAQAogCXJldHVybiBwSGFsRGF0YS0+YnRfY29leGlzdC5CVF9Db2V4aXN0VHlwZTsKIH0KIAotdm9pZCBIQUxCVF9Jbml0SHdDb25maWcoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3ZvaWQgcnRsODcyM2FfQlRfaW5pdF9od2NvbmZpZyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCWhhbGJ0X0luaXRId0NvbmZpZzg3MjNBKHBhZGFwdGVyKTsKLQlCVERNX0NvZXhpc3QocGFkYXB0ZXIpOworCXJ0bDg3MjNhX0JUX2RvX2NvZXhpc3QocGFkYXB0ZXIpOwogfQogCiB2b2lkIEhBTEJUX1NldFJ0c0N0c05vTGVuTGltaXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKQEAgLTExMzAxLDQgKzExMzMzLDQ5IEBACiB9CiAKIC8qICA9PT09PSBFbmQgb2Ygc3luYyBmcm9tIFNENyBkcml2ZXIgSEFML0hhbEJULmMgPT09PT0gKi8KLSNlbmRpZgorCit2b2lkIHJ0bDg3MjNhX2R1YWxfYW50ZW5uYV9kZXRlY3Rpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhOworCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbTsKKwlzdHJ1Y3Qgc3dfYW50X3N3ICpwRE1fU1dBVF9UYWJsZTsKKwl1OCBpOworCisJcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOworCXBETV9PZG0gPSAmcEhhbERhdGEtPm9kbXByaXY7CisJcERNX1NXQVRfVGFibGUgPSAmcERNX09kbS0+RE1fU1dBVF9UYWJsZTsKKworCS8qICAqLworCS8qICA8Um9nZXJfTm90ZXM+IFJUTDg3MjNBIFNpbmdsZSBhbmQgRHVhbCBhbnRlbm5hIGR5bmFtaWMgZGV0ZWN0aW9uCisJICAgIG1lY2hhbmlzbSB3aGVuIFJGIHBvd2VyIHN0YXRlIGlzIG9uLiAqLworCS8qICBXZSBzaG91bGQgdGFrZSBwb3dlciB0cmFja2luZywgSVFLLCBMQ0ssIFJDSyBSRiByZWFkL3dyaXRlCisJICAgIG9wZXJhdGlvbiBpbnRvIGNvbnNpZGVyYXRpb24uICovCisJLyogIDIwMTEuMTIuMTUuICovCisJLyogICovCisJaWYgKCFwSGFsRGF0YS0+YkFudGVubmFEZXRlY3RlZCkgeworCQl1OCBidEFudE51bSA9IEJUX0dldFBHQW50TnVtKHBhZGFwdGVyKTsKKworCQkvKiAgU2V0IGRlZmF1bHQgYW50ZW5uYSBCIHN0YXR1cyAqLworCQlpZiAoYnRBbnROdW0gPT0gQW50X3gyKQorCQkJcERNX1NXQVRfVGFibGUtPkFOVEJfT04gPSB0cnVlOworCQllbHNlIGlmIChidEFudE51bSA9PSBBbnRfeDEpCisJCQlwRE1fU1dBVF9UYWJsZS0+QU5UQl9PTiA9IGZhbHNlOworCQllbHNlCisJCQlwRE1fU1dBVF9UYWJsZS0+QU5UQl9PTiA9IHRydWU7CisKKwkJaWYgKHBIYWxEYXRhLT5DdXN0b21lcklEICE9IFJUX0NJRF9UT1NISUJBKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FOVEVOTkFfREVURUNUSU9OX0NOVDsgaSsrKSB7CisJCQkJaWYgKE9ETV9TaW5nbGVEdWFsQW50ZW5uYURldGVjdGlvbgorCQkJCSAgICAoJnBIYWxEYXRhLT5vZG1wcml2LCBBTlRURVNUQUxMKSA9PSB0cnVlKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogIFNldCBkZWZhdWx0IGFudGVubmEgbnVtYmVyIGZvciBCVCBjb2V4aXN0ZW5jZSAqLworCQkJaWYgKGJ0QW50TnVtID09IEFudF94MikKKwkJCQlCVF9TZXRCdENvZXhDdXJyQW50TnVtKHBhZGFwdGVyLAorCQkJCQkJICAgICAgIHBETV9TV0FUX1RhYmxlLT4KKwkJCQkJCSAgICAgICBBTlRCX09OID8gMiA6IDEpOworCQl9CisJCXBIYWxEYXRhLT5iQW50ZW5uYURldGVjdGVkID0gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9jbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2NtZC5jCmluZGV4IDBiMjA1ZTEuLmU4NzM3OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2NtZC5jCkBAIC0xNywxMCArMTcsMTAgQEAKICNpbmNsdWRlIDxvc2RlcF9zZXJ2aWNlLmg+CiAjaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+CiAjaW5jbHVkZSA8cmVjdl9vc2RlcC5oPgotI2luY2x1ZGUgPGNtZF9vc2RlcC5oPgogI2luY2x1ZGUgPG1sbWVfb3NkZXAuaD4KICNpbmNsdWRlIDxydHdfaW9jdGxfc2V0Lmg+CiAjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CisjaW5jbHVkZSA8dXNiX29wc19saW51eC5oPgogCiAjZGVmaW5lIFJUTDkyQ19NQVhfSDJDX0JPWF9OVU1TCQk0CiAjZGVmaW5lIFJUTDkyQ19NQVhfQ01EX0xFTgkJNQpAQCAtMzQsNyArMzQsNyBAQAogCXU4IHZhbGlkOwogCiAJZG8gewotCQl2YWxpZCA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX0hNRVRGUikgJiBCSVQobXNnYm94X251bSk7CisJCXZhbGlkID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfSE1FVEZSKSAmIEJJVChtc2dib3hfbnVtKTsKIAkJaWYgKDAgPT0gdmFsaWQpCiAJCQlyZWFkX2Rvd24gPSB0cnVlOwogCX0gd2hpbGUgKCghcmVhZF9kb3duKSAmJiAocmV0cnlfY250cy0tKSk7CkBAIC00OCw3ICs0OCw4IEBACiAqfCBoMmNfbXNnCXxFeHRfYml0CXxDTURfSUQJfAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotczMyIEZpbGxIMkNDbWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggRWxlbWVudElELCB1MzIgQ21kTGVuLCB1OCAqcENtZEJ1ZmZlcikKK2ludCBGaWxsSDJDQ21kKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IEVsZW1lbnRJRCwgdTMyIENtZExlbiwKKwkgICAgICAgdTggKnBDbWRCdWZmZXIpCiB7CiAJdTggYmNtZF9kb3duID0gZmFsc2U7CiAJczMyIHJldHJ5X2NudHMgPSAxMDA7CkBAIC01OCw3ICs1OSw3IEBACiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAJdTMyIGgyY19jbWQgPSAwOwogCXUxNiBoMmNfY21kX2V4ID0gMDsKLQlzMzIgcmV0ID0gX0ZBSUw7CisJaW50IHJldCA9IF9GQUlMOwogCiAJcGFkYXB0ZXIgPSBHRVRfUFJJTUFSWV9BREFQVEVSKHBhZGFwdGVyKTsKIAlwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CkBAIC05NCwxMSArOTUsMTEgQEAKIAkJaWYgKGgyY19jbWQgJiBCSVQoNykpIHsKIAkJCW1zZ2JveF9leF9hZGRyID0gUkVHX0hNRUJPWF9FWFRfMCArIChoMmNfYm94X251bSAqIEVYX01FU1NBR0VfQk9YX1NJWkUpOwogCQkJaDJjX2NtZF9leCA9IGxlMTZfdG9fY3B1KGgyY19jbWRfZXgpOwotCQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIG1zZ2JveF9leF9hZGRyLCBoMmNfY21kX2V4KTsKKwkJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBtc2dib3hfZXhfYWRkciwgaDJjX2NtZF9leCk7CiAJCX0KIAkJbXNnYm94X2FkZHIgPSBSRUdfSE1FQk9YXzAgKyAoaDJjX2JveF9udW0gKiBNRVNTQUdFX0JPWF9TSVpFKTsKIAkJaDJjX2NtZCA9IGxlMzJfdG9fY3B1KGgyY19jbWQpOwotCQlydHdfd3JpdGUzMihwYWRhcHRlciwgbXNnYm94X2FkZHIsIGgyY19jbWQpOworCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgbXNnYm94X2FkZHIsIGgyY19jbWQpOwogCiAJCWJjbWRfZG93biA9IHRydWU7CiAKQEAgLTExMyw5ICsxMTQsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXU4IHJ0bDg3MjNhX3NldF9yc3NpX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGFyYW0pCitpbnQgcnRsODcyM2Ffc2V0X3Jzc2lfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYXJhbSkKIHsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAkqKCh1MzIgKilwYXJhbSkgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilwYXJhbSkpOwogCkBAIC0xMjQsMTAgKzEyNSwxMCBAQAogCXJldHVybiByZXM7CiB9CiAKLXU4IHJ0bDg3MjNhX3NldF9yYWlkX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgbWFzaywgdTggYXJnKQoraW50IHJ0bDg3MjNhX3NldF9yYWlkX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgbWFzaywgdTggYXJnKQogewogCXU4IGJ1Zls1XTsKLQl1OCByZXMgPSBfU1VDQ0VTUzsKKwlpbnQgcmVzID0gX1NVQ0NFU1M7CiAKIAltZW1zZXQoYnVmLCAwLCA1KTsKIAltYXNrID0gY3B1X3RvX2xlMzIobWFzayk7CkBAIC0xMzcsNyArMTM4LDYgQEAKIAlGaWxsSDJDQ21kKHBhZGFwdGVyLCBNQUNJRF9DT05GSUdfRUlELCA1LCBidWYpOwogCiAJcmV0dXJuIHJlczsKLQogfQogCiAvKiBiaXRtYXBbMDoyN10gPSB0eF9yYXRlX2JpdG1hcCAqLwpAQCAtMTY4LDcgKzE2OCw4IEBACiAJCWlmIChzaG9ydEdJcmF0ZSA9PSB0cnVlKQogCQkJaW5pdF9yYXRlIHw9IEJJVCg2KTsKIAotCQlydHdfd3JpdGU4KHBBZGFwdGVyLCAoUkVHX0lOSURBVEFfUkFURV9TRUwrbWFjaWQpLCAodTgpaW5pdF9yYXRlKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwQWRhcHRlciwgUkVHX0lOSURBVEFfUkFURV9TRUwgKyBtYWNpZCwKKwkJCQkgaW5pdF9yYXRlKTsKIAl9CiB9CiAKQEAgLTE3OCw3ICsxNzksNyBAQAogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnB3cnByaXYgPSAmcGFkYXB0ZXItPnB3cmN0cmxwcml2OwogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCi0JREJHXzg3MjNBKCIlczogTW9kZSA9JWQgU21hcnRQUyA9JWQgVUFQU0QgPSVkIEJjbk1vZGUgPSAweCUwMnhcbiIsIF9fRlVOQ1RJT05fXywKKwlEQkdfODcyM0EoIiVzOiBNb2RlID0lZCBTbWFydFBTID0lZCBVQVBTRCA9JWQgQmNuTW9kZSA9IDB4JTAyeFxuIiwgX19mdW5jX18sCiAJCQlNb2RlLCBwd3Jwcml2LT5zbWFydF9wcywgcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdi51YXBzZF9lbmFibGUsIHB3cnByaXYtPmJjbl9hbnRfbW9kZSk7CiAKIAkvKiAgRm9yZWNlIGxlYXZlIFJGIGxvdyBwb3dlciBtb2RlIGZvciAxVDFSIHRvCkBAIC0yMDMsMjcgKzIwNCwyNiBAQAogc3RhdGljIHZvaWQgQ29uc3RydWN0QmVhY29uKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwZnJhbWUsIHUzMiAqcExlbmd0aCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdTE2ICpmY3RybDsKIAl1MzIgcmF0ZV9sZW4sIHBrdGxlbjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpjdXJfbmV0d29yayA9ICZwbWxtZWluZm8tPm5ldHdvcms7CiAJdTggYmNfYWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCWludCBiY25fZml4ZWRfc2l6ZTsKIAotCS8qIERCR184NzIzQSgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7ICovCisJLyogREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOyAqLwogCiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqKGZjdHJsKSA9IDA7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOwogCiAJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgYmNfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgRVRIX0FMRU4pOwogCW1lbWNweShwd2xhbmhkci0+YWRkcjMsIGdldF9teV9ic3NpZDIzYShjdXJfbmV0d29yayksIEVUSF9BTEVOKTsKIAotCVNldFNlcU51bShwd2xhbmhkciwgMC8qcG1sbWVleHQtPm1nbnRfc2VxKi8pOwotCS8qIHBtbG1lZXh0LT5tZ250X3NlcSsrOyAqLwotCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfQkVBQ09OKTsKKwkvKiBBIEJlYWNvbiBmcmFtZSBzaG91bGRuJ3QgaGF2ZSBmcmFnbWVudCBiaXRzIHNldCAqLworCXB3bGFuaGRyLT5zZXFfY3RybCA9IDA7CiAKIAlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlwa3RsZW4gPSBzaXplb2YgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKQEAgLTI0NSw5ICsyNDUsMTMgQEAKIAlwa3RsZW4gKz0gMjsKIAogCWlmICgocG1sbWVpbmZvLT5zdGF0ZSYweDAzKSA9PSBXSUZJX0ZXX0FQX1NUQVRFKSB7CisJCWJjbl9maXhlZF9zaXplID0KKwkJCW9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24pOworCiAJCS8qIERCR184NzIzQSgiaWUgbGVuID0lZFxuIiwgY3VyX25ldHdvcmstPklFTGVuZ3RoKTsgKi8KLQkJcGt0bGVuICs9IGN1cl9uZXR3b3JrLT5JRUxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfZml4ZWRfaWVzKTsKLQkJbWVtY3B5KHBmcmFtZSwgY3VyX25ldHdvcmstPklFcytzaXplb2Yoc3RydWN0IG5kaXNfODAyXzExX2ZpeGVkX2llcyksIHBrdGxlbik7CisJCXBrdGxlbiArPSBjdXJfbmV0d29yay0+SUVMZW5ndGggLSBiY25fZml4ZWRfc2l6ZTsKKwkJbWVtY3B5KHBmcmFtZSwgY3VyX25ldHdvcmstPklFcyArIGJjbl9maXhlZF9zaXplLCBwa3RsZW4pOwogCiAJCWdvdG8gX0NvbnN0cnVjdEJlYWNvbjsKIAl9CkBAIC0yNTUsMzAgKzI1OSwzNiBAQAogCS8qIGJlbG93IGZvciBhZC1ob2MgbW9kZSAqLwogCiAJLyogIFNTSUQgKi8KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1NTSURfSUVfLCBjdXJfbmV0d29yay0+U3NpZC5zc2lkX2xlbiwKLQkJCSAgICBjdXJfbmV0d29yay0+U3NpZC5zc2lkLCAmcGt0bGVuKTsKKwlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1NJRCwKKwkJCSAgICAgICBjdXJfbmV0d29yay0+U3NpZC5zc2lkX2xlbiwKKwkJCSAgICAgICBjdXJfbmV0d29yay0+U3NpZC5zc2lkLCAmcGt0bGVuKTsKIAogCS8qICBzdXBwb3J0ZWQgcmF0ZXMuLi4gKi8KIAlyYXRlX2xlbiA9IHJ0d19nZXRfcmF0ZXNldF9sZW4yM2EoY3VyX25ldHdvcmstPlN1cHBvcnRlZFJhdGVzKTsKLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1NVUFBPUlRFRFJBVEVTX0lFXywgKChyYXRlX2xlbiA+IDgpID8KKwlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgV0xBTl9FSURfU1VQUF9SQVRFUywgKChyYXRlX2xlbiA+IDgpID8KIAkJCSAgICAgICA4IDogcmF0ZV9sZW4pLCBjdXJfbmV0d29yay0+U3VwcG9ydGVkUmF0ZXMsICZwa3RsZW4pOwogCiAJLyogIERTIHBhcmFtZXRlciBzZXQgKi8KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX0RTU0VUX0lFXywgMSwgKHVuc2lnbmVkIGNoYXIgKikmY3VyX25ldHdvcmstPkNvbmZpZ3VyYXRpb24uRFNDb25maWcsICZwa3RsZW4pOworCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9EU19QQVJBTVMsIDEsICh1bnNpZ25lZCBjaGFyICopCisJCQkgICAgICAgJmN1cl9uZXR3b3JrLT5EU0NvbmZpZywgJnBrdGxlbik7CiAKIAlpZiAoKHBtbG1laW5mby0+c3RhdGUmMHgwMykgPT0gV0lGSV9GV19BREhPQ19TVEFURSkgewogCQl1MzIgQVRJTVdpbmRvdzsKIAkJLyogIElCU1MgUGFyYW1ldGVyIFNldC4uLiAqLwotCQkvKiBBVElNV2luZG93ID0gY3VyLT5Db25maWd1cmF0aW9uLkFUSU1XaW5kb3c7ICovCisJCS8qIEFUSU1XaW5kb3cgPSBjdXItPkFUSU1XaW5kb3c7ICovCiAJCUFUSU1XaW5kb3cgPSAwOwotCQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX0lCU1NfUEFSQV9JRV8sIDIsICh1bnNpZ25lZCBjaGFyICopKCZBVElNV2luZG93KSwgJnBrdGxlbik7CisJCXBmcmFtZSA9IHJ0d19zZXRfaWUyM2EocGZyYW1lLCBXTEFOX0VJRF9JQlNTX1BBUkFNUywgMiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmQVRJTVdpbmRvdywgJnBrdGxlbik7CiAJfQogCiAJLyogdG9kbzogRVJQIElFICovCiAKIAkvKiAgRVhURVJOREVEIFNVUFBPUlRFRCBSQVRFICovCiAJaWYgKHJhdGVfbGVuID4gOCkKLQkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9FWFRfU1VQUE9SVEVEUkFURVNfSUVfLCAocmF0ZV9sZW4gLSA4KSwgKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyArIDgpLCAmcGt0bGVuKTsKKwkJcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTLAorCQkJCSAgICAgICAocmF0ZV9sZW4gLSA4KSwKKwkJCQkgICAgICAgKGN1cl9uZXR3b3JrLT5TdXBwb3J0ZWRSYXRlcyArIDgpLAorCQkJCSAgICAgICAmcGt0bGVuKTsKIAogCS8qIHRvZG86SFQgZm9yIGFkaG9jICovCiAKQEAgLTI5MSwyNyArMzAxLDI2IEBACiAKIAkqcExlbmd0aCA9IHBrdGxlbjsKIAotCS8qIERCR184NzIzQSgiJXMgYmNuX3N6ID0lZFxuIiwgX19GVU5DVElPTl9fLCBwa3RsZW4pOyAqLworCS8qIERCR184NzIzQSgiJXMgYmNuX3N6ID0lZFxuIiwgX19mdW5jX18sIHBrdGxlbik7ICovCiAKIH0KIAotc3RhdGljIHZvaWQgQ29uc3RydWN0UFNQb2xsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwZnJhbWUsIHUzMiAqcExlbmd0aCkKK3N0YXRpYyB2b2lkIENvbnN0cnVjdFBTUG9sbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJICAgIHU4ICpwZnJhbWUsIHUzMiAqcExlbmd0aCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHdsYW5oZHI7Ci0JdTE2ICpmY3RybDsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKIAkvKiAgRnJhbWUgY29udHJvbC4gKi8KLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqKGZjdHJsKSA9IDA7Ci0JU2V0UHdyTWd0KGZjdHJsKTsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX1BTUE9MTCk7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCk7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwogCiAJLyogIEFJRC4gKi8KLQlTZXREdXJhdGlvbihwZnJhbWUsIChwbWxtZWluZm8tPmFpZCB8IDB4YzAwMCkpOworCXB3bGFuaGRyLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KHBtbG1laW5mby0+YWlkIHwgMHhjMDAwKTsKIAogCS8qICBCU1NJRC4gKi8KIAltZW1jcHkocHdsYW5oZHItPmFkZHIxLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yayksIEVUSF9BTEVOKTsKQEAgLTMyMiw0OSArMzMxLDQ2IEBACiAJKnBMZW5ndGggPSAxNjsKIH0KIAotc3RhdGljIHZvaWQgQ29uc3RydWN0TnVsbEZ1bmN0aW9uRGF0YSgKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCXU4ICpwZnJhbWUsCi0JdTMyICpwTGVuZ3RoLAotCXU4ICpTdGFBZGRyLAotCXU4IGJRb1MsCi0JdTggQUMsCi0JdTggYkVvc3AsCi0JdTggYkZvcmNlUG93ZXJTYXZlKQorc3RhdGljIHZvaWQKK0NvbnN0cnVjdE51bGxGdW5jdGlvbkRhdGEoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBmcmFtZSwKKwkJCSAgdTMyICpwTGVuZ3RoLCB1OCAqU3RhQWRkciwgdTggYlFvUywgdTggQUMsCisJCQkgIHU4IGJFb3NwLCB1OCBiRm9yY2VQb3dlclNhdmUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwotCXUxNiAqZmN0cmw7CiAJdTMyIHBrdGxlbjsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotCXN0cnVjdCB3bGFuX25ldHdvcmsJCSpjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOworCXN0cnVjdCB3bGFuX25ldHdvcmsgKmN1cl9uZXR3b3JrID0gJnBtbG1lcHJpdi0+Y3VyX25ldHdvcms7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKIAlzdHJ1Y3QgbWxtZV9leHRfaW5mbyAqcG1sbWVpbmZvID0gJnBtbG1lZXh0LT5tbG1leHRfaW5mbzsKIAogCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGZyYW1lOwogCi0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKihmY3RybCkgPSAwOwotCWlmIChiRm9yY2VQb3dlclNhdmUpCi0JCVNldFB3ck1ndChmY3RybCk7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPSAwOworCXB3bGFuaGRyLT5zZXFfY3RybCA9IDA7CiAKLQlzd2l0Y2ggKGN1cl9uZXR3b3JrLT5uZXR3b3JrLkluZnJhc3RydWN0dXJlTW9kZSkgewotCWNhc2UgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOgotCQlTZXRUb0RzKGZjdHJsKTsKKwlpZiAoYkZvcmNlUG93ZXJTYXZlKQorCQlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CisKKwlzd2l0Y2ggKGN1cl9uZXR3b3JrLT5uZXR3b3JrLmlmbW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQltZW1jcHkocHdsYW5oZHItPmFkZHIxLAogCQkgICAgICAgZ2V0X215X2Jzc2lkMjNhKCZwbWxtZWluZm8tPm5ldHdvcmspLCBFVEhfQUxFTik7CiAJCW1lbWNweShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwKIAkJICAgICAgIEVUSF9BTEVOKTsKIAkJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMywgU3RhQWRkciwgRVRIX0FMRU4pOwogCQlicmVhazsKLQljYXNlIE5kaXM4MDJfMTFBUE1vZGU6Ci0JCVNldEZyRHMoZmN0cmwpOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CiAJCW1lbWNweShwd2xhbmhkci0+YWRkcjEsIFN0YUFkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMiwKIAkJICAgICAgIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSwgRVRIX0FMRU4pOwogCQltZW1jcHkocHdsYW5oZHItPmFkZHIzLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdiksCiAJCSAgICAgICBFVEhfQUxFTik7CiAJCWJyZWFrOwotCWNhc2UgTmRpczgwMl8xMUlCU1M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAlkZWZhdWx0OgogCQltZW1jcHkocHdsYW5oZHItPmFkZHIxLCBTdGFBZGRyLCBFVEhfQUxFTik7CiAJCW1lbWNweShwd2xhbmhkci0+YWRkcjIsIG15aWQoJnBhZGFwdGVyLT5lZXByb21wcml2KSwgRVRIX0FMRU4pOwpAQCAtMzczLDIwICszNzksMjMgQEAKIAkJYnJlYWs7CiAJfQogCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCAwKTsKLQogCWlmIChiUW9TID09IHRydWUpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyICpwd2xhbnFvc2hkcjsKKwkJc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyICpxb3NoZHI7CisJCXFvc2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19oZHIgKilwZnJhbWU7CiAKLQkJU2V0RnJhbWVTdWJUeXBlKHBmcmFtZSwgV0lGSV9RT1NfREFUQV9OVUxMKTsKKwkJcW9zaGRyLT5mcmFtZV9jb250cm9sIHw9CisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJICAgIElFRUU4MDIxMV9TVFlQRV9RT1NfTlVMTEZVTkMpOwogCi0JCXB3bGFucW9zaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfcW9zX2hkciAqKXBmcmFtZTsKLQkJU2V0UHJpb3JpdHkoJnB3bGFucW9zaGRyLT5xb3NfY3RybCwgQUMpOwotCQlTZXRFT1NQKCZwd2xhbnFvc2hkci0+cW9zX2N0cmwsIGJFb3NwKTsKKwkJcW9zaGRyLT5xb3NfY3RybCA9IGNwdV90b19sZTE2KEFDICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0spOworCQlpZiAoYkVvc3ApCisJCQlxb3NoZHItPnFvc19jdHJsIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9RT1NfQ1RMX0VPU1ApOwogCiAJCXBrdGxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19oZHIpOwogCX0gZWxzZSB7Ci0JCVNldEZyYW1lU3ViVHlwZShwZnJhbWUsIFdJRklfREFUQV9OVUxMKTsKKwkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgfD0KKwkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCQkgICAgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DKTsKIAogCQlwa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCX0KQEAgLTM5NCwzMiArNDAzLDMyIEBACiAJKnBMZW5ndGggPSBwa3RsZW47CiB9CiAKLXN0YXRpYyB2b2lkIENvbnN0cnVjdFByb2JlUnNwKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwZnJhbWUsIHUzMiAqcExlbmd0aCwgdTggKlN0YUFkZHIsIGJvb2wgYkhpZGVTU0lEKQorc3RhdGljIHZvaWQgQ29uc3RydWN0UHJvYmVSc3Aoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBmcmFtZSwKKwkJCSAgICAgIHUzMiAqcExlbmd0aCwgdTggKlN0YUFkZHIsIGJvb2wgYkhpZGVTU0lEKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1MTYgKmZjdHJsOwogCXU4ICptYWMsICpic3NpZDsKIAl1MzIgcGt0bGVuOwogCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X2luZm8gKnBtbG1laW5mbyA9ICZwbWxtZWV4dC0+bWxtZXh0X2luZm87CiAJc3RydWN0IHdsYW5fYnNzaWRfZXggKmN1cl9uZXR3b3JrID0gJnBtbG1laW5mby0+bmV0d29yazsKIAotCS8qIERCR184NzIzQSgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7ICovCisJLyogREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOyAqLwogCiAJcHdsYW5oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwZnJhbWU7CiAKIAltYWMgPSBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdik7CiAJYnNzaWQgPSBjdXJfbmV0d29yay0+TWFjQWRkcmVzczsKIAotCWZjdHJsID0gJnB3bGFuaGRyLT5mcmFtZV9jb250cm9sOwotCSooZmN0cmwpID0gMDsKKwlwd2xhbmhkci0+ZnJhbWVfY29udHJvbCA9CisJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOworCisJcHdsYW5oZHItPnNlcV9jdHJsID0gMDsKKwogCW1lbWNweShwd2xhbmhkci0+YWRkcjEsIFN0YUFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkocHdsYW5oZHItPmFkZHIyLCBtYWMsIEVUSF9BTEVOKTsKIAltZW1jcHkocHdsYW5oZHItPmFkZHIzLCBic3NpZCwgRVRIX0FMRU4pOwogCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCAwKTsKLQlTZXRGcmFtZVN1YlR5cGUoZmN0cmwsIFdJRklfUFJPQkVSU1ApOwotCiAJcGt0bGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlwZnJhbWUgKz0gcGt0bGVuOwogCkBAIC00NjQsMTEgKzQ3MywxMSBAQAogCXUzMiBUb3RhbFBhY2tldExlbjsKIAlzdHJ1Y3QgcnN2ZHBhZ2VfbG9jCVJzdmRQYWdlTG9jOwogCi0JREJHXzg3MjNBKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlSZXNlcnZlZFBhZ2VQYWNrZXQgPSBremFsbG9jKDEwMDAsIEdGUF9LRVJORUwpOwogCWlmIChSZXNlcnZlZFBhZ2VQYWNrZXQgPT0gTlVMTCkgewotCQlEQkdfODcyM0EoIiVzOiBhbGxvYyBSZXNlcnZlZFBhZ2VQYWNrZXQgZmFpbCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCURCR184NzIzQSgiJXM6IGFsbG9jIFJlc2VydmVkUGFnZVBhY2tldCBmYWlsIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDcsMTMgKzUxNiwxMyBAQAogCiAJLyogMyAoMykgbnVsbCBkYXRhICovCiAJUnN2ZFBhZ2VMb2MuTG9jTnVsbERhdGEgPSBQYWdlTnVtOwotCUNvbnN0cnVjdE51bGxGdW5jdGlvbkRhdGEoCi0JCXBhZGFwdGVyLAotCQkmUmVzZXJ2ZWRQYWdlUGFja2V0W0J1ZkluZGV4XSwKLQkJJk51bGxEYXRhTGVuZ3RoLAotCQlnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yayksCi0JCWZhbHNlLCAwLCAwLCBmYWxzZSk7Ci0JcnRsODcyM2FfZmlsbF9mYWtlX3R4ZGVzYyhwYWRhcHRlciwgJlJlc2VydmVkUGFnZVBhY2tldFtCdWZJbmRleC1UeERlc2NMZW5dLCBOdWxsRGF0YUxlbmd0aCwgZmFsc2UsIGZhbHNlKTsKKwlDb25zdHJ1Y3ROdWxsRnVuY3Rpb25EYXRhKHBhZGFwdGVyLCAmUmVzZXJ2ZWRQYWdlUGFja2V0W0J1ZkluZGV4XSwKKwkJCQkgICZOdWxsRGF0YUxlbmd0aCwKKwkJCQkgIGdldF9teV9ic3NpZDIzYSgmcG1sbWVpbmZvLT5uZXR3b3JrKSwKKwkJCQkgIGZhbHNlLCAwLCAwLCBmYWxzZSk7CisJcnRsODcyM2FfZmlsbF9mYWtlX3R4ZGVzYyhwYWRhcHRlciwKKwkJCQkgICZSZXNlcnZlZFBhZ2VQYWNrZXRbQnVmSW5kZXgtVHhEZXNjTGVuXSwKKwkJCQkgIE51bGxEYXRhTGVuZ3RoLCBmYWxzZSwgZmFsc2UpOwogCiAJUGFnZU5lZWQgPSAodTgpUGFnZU51bV8xMjgoVHhEZXNjTGVuICsgTnVsbERhdGFMZW5ndGgpOwogCVBhZ2VOdW0gKz0gUGFnZU5lZWQ7CkBAIC01NzMsOSArNTgyLDkgQEAKIAlwYXR0cmliLT5wa3RsZW4gPSBwYXR0cmliLT5sYXN0X3R4Y21kc3ogPSBUb3RhbFBhY2tldExlbiAtIFRYREVTQ19PRkZTRVQ7CiAJbWVtY3B5KHBtZ250ZnJhbWUtPmJ1Zl9hZGRyLCBSZXNlcnZlZFBhZ2VQYWNrZXQsIFRvdGFsUGFja2V0TGVuKTsKIAotCXJ0d19oYWxfbWdudF94bWl0MjNhKHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKKwlydGw4NzIzYXVfbWdudF94bWl0KHBhZGFwdGVyLCBwbWdudGZyYW1lKTsKIAotCURCR184NzIzQSgiJXM6IFNldCBSU1ZEIHBhZ2UgbG9jYXRpb24gdG8gRndcbiIsIF9fRlVOQ1RJT05fXyk7CisJREJHXzg3MjNBKCIlczogU2V0IFJTVkQgcGFnZSBsb2NhdGlvbiB0byBGd1xuIiwgX19mdW5jX18pOwogCUZpbGxIMkNDbWQocGFkYXB0ZXIsIFJTVkRfUEFHRV9FSUQsIHNpemVvZihSc3ZkUGFnZUxvYyksICh1OCAqKSZSc3ZkUGFnZUxvYyk7CiAKIGV4aXQ6CkBAIC01ODksNyArNTk4LDcgQEAKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCi0JREJHXzg3MjNBKCIlcyBtc3RhdHVzKCV4KVxuIiwgX19GVU5DVElPTl9fLCBtc3RhdHVzKTsKKwlEQkdfODcyM0EoIiVzIG1zdGF0dXMoJXgpXG4iLCBfX2Z1bmNfXywgbXN0YXR1cyk7CiAKIAlpZiAobXN0YXR1cyA9PSAxKSB7CiAJCWJvb2wgYlJlY292ZXIgPSBmYWxzZTsKQEAgLTU5NywxNyArNjA2LDE4IEBACiAKIAkJLyogIFdlIHNob3VsZCBzZXQgQUlELCBjb3JyZWN0IFRTRiwgSFcgc2VxIGVuYWJsZSBiZWZvcmUgc2V0IEpvaW5Cc3NSZXBvcnQgdG8gRncgaW4gODgvOTJDLiAqLwogCQkvKiAgU3VnZ2VzdGVkIGJ5IGZpbGVuLiBBZGRlZCBieSB0eW5saS4gKi8KLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05fUFNSX1JQVCwgKDB4QzAwMHxwbWxtZWluZm8tPmFpZCkpOworCQlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX0JDTl9QU1JfUlBULAorCQkJCSAgMHhDMDAwfHBtbG1laW5mby0+YWlkKTsKIAkJLyogIERvIG5vdCBzZXQgVFNGIGFnYWluIGhlcmUgb3IgdldpRmkgYmVhY29uIERNQSBJTlQgd2lsbCBub3Qgd29yay4gKi8KIAkJLyogY29ycmVjdF9UU0YyM2EocGFkYXB0ZXIsIHBtbG1lZXh0KTsgKi8KIAkJLyogIEh3IHNlcXVlbmRlIGVuYWJsZSBieSBkZWRhdWx0LiAyMDEwLjA2LjIzLiBieSB0eW5saS4gKi8KLQkJLyogcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19OUU9TX1NFUSwgKChwbWxtZWV4dC0+bWdudF9zZXErMTAwKSYweEZGRikpOyAqLwotCQkvKiBydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfSFdTRVFfQ1RSTCwgMHhGRik7ICovCisJCS8qIHJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfTlFPU19TRVEsICgocG1sbWVleHQtPm1nbnRfc2VxKzEwMCkmMHhGRkYpKTsgKi8KKwkJLyogcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0hXU0VRX0NUUkwsIDB4RkYpOyAqLwogCiAJCS8qICBzZXQgUkVHX0NSIGJpdCA4ICovCi0JCXY4ID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBSRUdfQ1IrMSk7CisJCXY4ID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfQ1IrMSk7CiAJCXY4IHw9IEJJVCgwKTsgLyogIEVOU1dCQ04gKi8KLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgIFJFR19DUisxLCB2OCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsICBSRUdfQ1IrMSwgdjgpOwogCiAJCS8qICBEaXNhYmxlIEh3IHByb3RlY3Rpb24gZm9yIGEgdGltZSB3aGljaCByZXZzZXJkIGZvciBIdyBzZW5kaW5nIGJlYWNvbi4gKi8KIAkJLyogIEZpeCBkb3dubG9hZCByZXNlcnZlZCBwYWdlIHBhY2tldCBmYWlsIHRoYXQgYWNjZXNzIGNvbGxpc2lvbiB3aXRoIHRoZSBwcm90ZWN0aW9uIHRpbWUuICovCkBAIC02MjEsOCArNjMxLDkgQEAKIAkJCWJSZWNvdmVyID0gdHJ1ZTsKIAogCQkvKiAgVG8gdGVsbCBIdyB0aGUgcGFja2V0IGlzIG5vdCBhIHJlYWwgYmVhY29uIGZyYW1lLiAqLwotCQkvKiBVMWJUbXAgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19GV0hXX1RYUV9DVFJMKzIpOyAqLwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCsyLCBwSGFsRGF0YS0+UmVnRndId1R4UUN0cmwgJiB+QklUKDYpKTsKKwkJLyogVTFiVG1wID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCsyKTsgKi8KKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLAorCQkJCSBwSGFsRGF0YS0+UmVnRndId1R4UUN0cmwgJiB+QklUKDYpKTsKIAkJcEhhbERhdGEtPlJlZ0Z3SHdUeFFDdHJsICY9IH5CSVQoNik7CiAJCVNldEZ3UnN2ZFBhZ2VQa3QocGFkYXB0ZXIsIDApOwogCkBAIC02MzUsMTQgKzY0NiwxNSBAQAogCQkvKiAgdGhlIGJlYWNvbiBjYW5ub3QgYmUgc2VudCBieSBIVy4gKi8KIAkJLyogIDIwMTAuMDYuMjMuIEFkZGVkIGJ5IHR5bmxpLiAqLwogCQlpZiAoYlJlY292ZXIpIHsKLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19GV0hXX1RYUV9DVFJMKzIsIHBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCB8IEJJVCg2KSk7CisJCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCArIDIsCisJCQkJCSBwSGFsRGF0YS0+UmVnRndId1R4UUN0cmwgfCBCSVQoNikpOwogCQkJcEhhbERhdGEtPlJlZ0Z3SHdUeFFDdHJsIHw9IEJJVCg2KTsKIAkJfQogCiAJCS8qICBDbGVhciBDUls4XSBvciBiZWFjb24gcGFja2V0IHdpbGwgbm90IGJlIHNlbmQgdG8gVHhCdWYgYW55bW9yZS4gKi8KLQkJdjggPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19DUisxKTsKKwkJdjggPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19DUisxKTsKIAkJdjggJj0gfkJJVCgwKTsgLyogIH5FTlNXQkNOICovCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19DUisxLCB2OCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19DUisxLCB2OCk7CiAJfQogCiAJSm9pbkJzc1JwdFBhcm0uT3BNb2RlID0gbXN0YXR1czsKQEAgLTY2OCwxMSArNjgwLDExIEBACiAJdTMyIFRvdGFsUGFja2V0TGVuOwogCXN0cnVjdCByc3ZkcGFnZV9sb2MJUnN2ZFBhZ2VMb2M7CiAKLQlEQkdfODcyM0EoIislc1xuIiwgX19GVU5DVElPTl9fKTsKKwlEQkdfODcyM0EoIislc1xuIiwgX19mdW5jX18pOwogCiAJUmVzZXJ2ZWRQYWdlUGFja2V0ID0ga3phbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKIAlpZiAoUmVzZXJ2ZWRQYWdlUGFja2V0ID09IE5VTEwpIHsKLQkJREJHXzg3MjNBKCIlczogYWxsb2MgUmVzZXJ2ZWRQYWdlUGFja2V0IGZhaWwhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlEQkdfODcyM0EoIiVzOiBhbGxvYyBSZXNlcnZlZFBhZ2VQYWNrZXQgZmFpbCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNzMyLDkgKzc0NCw5IEBACiAJcGF0dHJpYi0+cGt0bGVuID0gcGF0dHJpYi0+bGFzdF90eGNtZHN6ID0gVG90YWxQYWNrZXRMZW4gLSBUWERFU0NfT0ZGU0VUOwogCW1lbWNweShwbWdudGZyYW1lLT5idWZfYWRkciwgUmVzZXJ2ZWRQYWdlUGFja2V0LCBUb3RhbFBhY2tldExlbik7CiAKLQlydHdfaGFsX21nbnRfeG1pdDIzYShwYWRhcHRlciwgcG1nbnRmcmFtZSk7CisJcnRsODcyM2F1X21nbnRfeG1pdChwYWRhcHRlciwgcG1nbnRmcmFtZSk7CiAKLQlEQkdfODcyM0EoIiVzOiBTZXQgUlNWRCBwYWdlIGxvY2F0aW9uIHRvIEZ3XG4iLCBfX0ZVTkNUSU9OX18pOworCURCR184NzIzQSgiJXM6IFNldCBSU1ZEIHBhZ2UgbG9jYXRpb24gdG8gRndcbiIsIF9fZnVuY19fKTsKIAlGaWxsSDJDQ21kKHBhZGFwdGVyLCBSU1ZEX1BBR0VfRUlELCBzaXplb2YoUnN2ZFBhZ2VMb2MpLCAodTggKikmUnN2ZFBhZ2VMb2MpOwogCiBleGl0OgpAQCAtNzQ2LDcgKzc1OCw3IEBACiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YTsKIAl1OCBiUmVjb3ZlciA9IGZhbHNlOwogCi0JREJHXzg3MjNBKCIrJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJREJHXzg3MjNBKCIrJXNcbiIsIF9fZnVuY19fKTsKIAogCXBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIApAQCAtNzU2LDcgKzc2OCw4IEBACiAKIAkvKiAgVG8gdGVsbCBIdyB0aGUgcGFja2V0IGlzIG5vdCBhIHJlYWwgYmVhY29uIGZyYW1lLiAqLwogCXBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCAmPSB+QklUKDYpOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19GV0hXX1RYUV9DVFJMKzIsIHBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLAorCQkJIHBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCk7CiAJU2V0RndSc3ZkUGFnZVBrdF9CVENvZXgocGFkYXB0ZXIpOwogCiAJLyogIFRvIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhbiBhZGFwdGVyIHdoaWNoIHdvdWxkIGxpa2UgdG8gc2VuZCBiZWFjb24uICovCkBAIC03NjYsODAgKzc3OSw4IEBACiAJLyogIDIwMTAuMDYuMjMuIEFkZGVkIGJ5IHR5bmxpLiAqLwogCWlmIChiUmVjb3ZlcikgewogCQlwSGFsRGF0YS0+UmVnRndId1R4UUN0cmwgfD0gQklUKDYpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCsyLCBwSGFsRGF0YS0+UmVnRndId1R4UUN0cmwpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCArIDIsCisJCQkJIHBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCk7CiAJfQogfQogI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotdm9pZCBydGw4NzIzYV9zZXRfcDJwX3BzX29mZmxvYWRfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHAycF9wc19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0Jc3RydWN0IFAyUF9QU19PZmZsb2FkX3QJKnAycF9wc19vZmZsb2FkID0gJnBIYWxEYXRhLT5wMnBfcHNfb2ZmbG9hZDsKLQl1OCBpOwotCi0Jc3dpdGNoIChwMnBfcHNfc3RhdGUpIHsKLQljYXNlIFAyUF9QU19ESVNBQkxFOgotCQlEQkdfODcyM0EoIlAyUF9QU19ESVNBQkxFIFxuIik7Ci0JCW1lbXNldChwMnBfcHNfb2ZmbG9hZCwgMCwgMSk7Ci0JCWJyZWFrOwotCWNhc2UgUDJQX1BTX0VOQUJMRToKLQkJREJHXzg3MjNBKCJQMlBfUFNfRU5BQkxFIFxuIik7Ci0JCS8qICB1cGRhdGUgQ1RXaW5kb3cgdmFsdWUuICovCi0JCWlmIChwd2RpbmZvLT5jdHdpbmRvdyA+IDApIHsKLQkJCXAycF9wc19vZmZsb2FkLT5DVFdpbmRvd19FbiA9IDE7Ci0JCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUDJQX0NUV0lOLCBwd2RpbmZvLT5jdHdpbmRvdyk7Ci0JCX0KLQotCQkvKiAgaHcgb25seSBzdXBwb3J0IDIgc2V0IG9mIE5vQSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcHdkaW5mby0+bm9hX251bTsgaSsrKSB7Ci0JCQkvKiAgVG8gY29udHJvbCB0aGUgcmVnaXN0ZXIgc2V0dGluZyBmb3Igd2hpY2ggTk9BICovCi0JCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTk9BX0RFU0NfU0VMLCAoaSA8PCA0KSk7Ci0JCQlpZiAoaSA9PSAwKQotCQkJCXAycF9wc19vZmZsb2FkLT5Ob0EwX0VuID0gMTsKLQkJCWVsc2UKLQkJCQlwMnBfcHNfb2ZmbG9hZC0+Tm9BMV9FbiA9IDE7Ci0KLQkJCS8qICBjb25maWcgUDJQIE5vQSBEZXNjcmlwdG9yIFJlZ2lzdGVyICovCi0JCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX05PQV9ERVNDX0RVUkFUSU9OLCBwd2RpbmZvLT5ub2FfZHVyYXRpb25baV0pOwotCi0JCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX05PQV9ERVNDX0lOVEVSVkFMLCBwd2RpbmZvLT5ub2FfaW50ZXJ2YWxbaV0pOwotCi0JCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX05PQV9ERVNDX1NUQVJULCBwd2RpbmZvLT5ub2Ffc3RhcnRfdGltZVtpXSk7Ci0KLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19OT0FfREVTQ19DT1VOVCwgcHdkaW5mby0+bm9hX2NvdW50W2ldKTsKLQkJfQotCi0JCWlmICgocHdkaW5mby0+b3BwX3BzID09IDEpIHx8IChwd2RpbmZvLT5ub2FfbnVtID4gMCkpIHsKLQkJCS8qICByc3QgcDJwIGNpcmN1aXQgKi8KLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19EVUFMX1RTRl9SU1QsIEJJVCg0KSk7Ci0KLQkJCXAycF9wc19vZmZsb2FkLT5PZmZsb2FkX0VuID0gMTsKLQotCQkJaWYgKHJ0d19wMnBfY2hrX3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pKSB7Ci0JCQkJcDJwX3BzX29mZmxvYWQtPnJvbGUgPSAxOwotCQkJCXAycF9wc19vZmZsb2FkLT5BbGxTdGFTbGVlcCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCXAycF9wc19vZmZsb2FkLT5yb2xlID0gMDsKLQkJCX0KLQotCQkJcDJwX3BzX29mZmxvYWQtPmRpc2NvdmVyeSA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBQMlBfUFNfU0NBTjoKLQkJREJHXzg3MjNBKCJQMlBfUFNfU0NBTiBcbiIpOwotCQlwMnBfcHNfb2ZmbG9hZC0+ZGlzY292ZXJ5ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBQMlBfUFNfU0NBTl9ET05FOgotCQlEQkdfODcyM0EoIlAyUF9QU19TQ0FOX0RPTkUgXG4iKTsKLQkJcDJwX3BzX29mZmxvYWQtPmRpc2NvdmVyeSA9IDA7Ci0JCXB3ZGluZm8tPnAycF9wc19zdGF0ZSA9IFAyUF9QU19FTkFCTEU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCUZpbGxIMkNDbWQocGFkYXB0ZXIsIFAyUF9QU19PRkZMT0FEX0VJRCwgMSwgKHU4ICopcDJwX3BzX29mZmxvYWQpOwotfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9kbS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2FfZG0uYwppbmRleCBmMjA0YWIxLi5hYzQ3YTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2RtLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KIAogI2luY2x1ZGUgPHJ0bDg3MjNhX2hhbC5oPgorI2luY2x1ZGUgPHVzYl9vcHNfbGludXguaD4KIAogLyogICovCiAvKiAgR2xvYmFsIHZhciAqLwpAQCAtNDUsMTggKzQ2LDIxIEBACiAJaWYgKCFwYWRhcHRlci0+cmVnaXN0cnlwcml2Lmh3X3dwc19wYmMpCiAJCXJldHVybjsKIAotCXRtcDFieXRlID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBHUElPX0lPX1NFTCk7CisJdG1wMWJ5dGUgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIEdQSU9fSU9fU0VMKTsKIAl0bXAxYnl0ZSB8PSAoSEFMXzgxOTJDX0hXX0dQSU9fV1BTX0JJVCk7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgR1BJT19JT19TRUwsIHRtcDFieXRlKTsJLyogZW5hYmxlIEdQSU9bMl0gYXMgb3V0cHV0IG1vZGUgKi8KKwkvKiBlbmFibGUgR1BJT1syXSBhcyBvdXRwdXQgbW9kZSAqLworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIEdQSU9fSU9fU0VMLCB0bXAxYnl0ZSk7CiAKIAl0bXAxYnl0ZSAmPSB+KEhBTF84MTkyQ19IV19HUElPX1dQU19CSVQpOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsICBHUElPX0lOLCB0bXAxYnl0ZSk7CQkvKiByZXNldCB0aGUgZmxvYXRpbmcgdm9sdGFnZSBsZXZlbCAqLworCS8qIHJlc2V0IHRoZSBmbG9hdGluZyB2b2x0YWdlIGxldmVsICovCisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgIEdQSU9fSU4sIHRtcDFieXRlKTsKIAotCXRtcDFieXRlID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBHUElPX0lPX1NFTCk7CisJdG1wMWJ5dGUgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIEdQSU9fSU9fU0VMKTsKIAl0bXAxYnl0ZSAmPSB+KEhBTF84MTkyQ19IV19HUElPX1dQU19CSVQpOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIEdQSU9fSU9fU0VMLCB0bXAxYnl0ZSk7CS8qIGVuYWJsZSBHUElPWzJdIGFzIGlucHV0IG1vZGUgKi8KKwkvKiBlbmFibGUgR1BJT1syXSBhcyBpbnB1dCBtb2RlICovCisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgR1BJT19JT19TRUwsIHRtcDFieXRlKTsKIAotCXRtcDFieXRlID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBHUElPX0lOKTsKKwl0bXAxYnl0ZSA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgR1BJT19JTik7CiAKIAlpZiAodG1wMWJ5dGUgPT0gMHhmZikKIAkJcmV0dXJuOwpAQCAtNzYsNyArODAsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJcnR3X3NpZ25hbF9wcm9jZXNzKHBhZGFwdGVyLT5waWRbMF0sIFNJR1VTUjEpOworCQlraWxsX3BpZChmaW5kX3ZwaWQocGFkYXB0ZXItPnBpZFswXSksIFNJR1VTUjEsIDEpOwogCX0KIH0KIApAQCAtMTk3LDcgKzIwMSw3IEBACiAJT0RNMjNhX0RNSW5pdChwRE1fT2RtKTsKIAkvKiAgU2F2ZSBSRUdfSU5JREFUQV9SQVRFX1NFTCB2YWx1ZSBmb3IgVFhERVNDLiAqLwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlwZG1wcml2LT5JTklEQVRBX1JBVEVbaV0gPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX0lOSURBVEFfUkFURV9TRUwraSkgJiAweDNmOworCQlwZG1wcml2LT5JTklEQVRBX1JBVEVbaV0gPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHX0lOSURBVEFfUkFURV9TRUwraSkgJiAweDNmOwogfQogCiB2b2lkCkBAIC0yMTcsMTQgKzIyMSw3IEBACiAJCWdvdG8gc2tpcF9kbTsKIAogCWJGd0N1cnJlbnRJblBTTW9kZSA9IEFkYXB0ZXItPnB3cmN0cmxwcml2LmJGd0N1cnJlbnRJblBTTW9kZTsKLQlydHcyM2FfaGFsX2dldF9od3JlZyhBZGFwdGVyLCBIV19WQVJfRldMUFNfUkZfT04sICh1OCAqKSgmYkZ3UFNBd2FrZSkpOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkvKiAgRncgaXMgdW5kZXIgcDJwIHBvd2Vyc2F2aW5nIG1vZGUsIGRyaXZlciBzaG91bGQgc3RvcCBkeW5hbWljIG1lY2hhbmlzbS4gKi8KLQkvKiAgbW9kaWZlZCBieSB0aG9tYXMuIDIwMTEuMDYuMTEuICovCi0JaWYgKEFkYXB0ZXItPndkaW5mby5wMnBfcHNfbW9kZSkKLQkJYkZ3UFNBd2FrZSA9IGZhbHNlOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJYkZ3UFNBd2FrZSA9IHJ0bDg3MjNhX2dldF9md2xwc19yZl9vbihBZGFwdGVyKTsKIAogCWlmICgoaHdfaW5pdF9jb21wbGV0ZWQpICYmICgoIWJGd0N1cnJlbnRJblBTTW9kZSkgJiYgYkZ3UFNBd2FrZSkpIHsKIAkJLyogIENhbGN1bGF0ZSBUeC9SeCBzdGF0aXN0aWNzLiAqLwpAQCAtMjMyLDExICsyMjksMTEgQEAKIAogCQkvKiAgUmVhZCBSRUdfSU5JREFUQV9SQVRFX1NFTCB2YWx1ZSBmb3IgVFhERVNDLiAqLwogCQlpZiAoY2hlY2tfZndzdGF0ZSgmQWRhcHRlci0+bWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSkpIHsKLQkJCXBkbXByaXYtPklOSURBVEFfUkFURVswXSA9IHJ0d19yZWFkOChBZGFwdGVyLCBSRUdfSU5JREFUQV9SQVRFX1NFTCkgJiAweDNmOworCQkJcGRtcHJpdi0+SU5JREFUQV9SQVRFWzBdID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIFJFR19JTklEQVRBX1JBVEVfU0VMKSAmIDB4M2Y7CiAJCX0gZWxzZSB7CiAJCQl1OAlpOwogCQkJZm9yIChpID0gMSA7IGkgPCAoQWRhcHRlci0+c3RhcHJpdi5hc29jX3N0YV9jb3VudCArIDEpOyBpKyspCi0JCQkJcGRtcHJpdi0+SU5JREFUQV9SQVRFW2ldID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIChSRUdfSU5JREFUQV9SQVRFX1NFTCtpKSkgJiAweDNmOworCQkJCXBkbXByaXYtPklOSURBVEFfUkFURVtpXSA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCAoUkVHX0lOSURBVEFfUkFURV9TRUwraSkpICYgMHgzZjsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2FfaGFsX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX2hhbF9pbml0LmMKaW5kZXggMDk4MmIwYS4uMGFjYWNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2FfaGFsX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9oYWxfaW5pdC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8cnR3X2VmdXNlLmg+CiAKICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KKyNpbmNsdWRlIDx1c2Jfb3BzX2xpbnV4Lmg+CiAKIHN0YXRpYyB2b2lkIF9GV0Rvd25sb2FkRW5hYmxlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewpAQCAtMjYsMjMgKzI3LDIzIEBACiAKIAlpZiAoZW5hYmxlKSB7CiAJCS8qICA4MDUxIGVuYWJsZSAqLwotCQl0bXAgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiArIDEpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCB0bXAgfCAweDA0KTsKKwkJdG1wID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wIHwgMHgwNCk7CiAKIAkJLyogIE1DVSBmaXJtd2FyZSBkb3dubG9hZCBlbmFibGUuICovCi0JCXRtcCA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX01DVUZXREwpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCwgdG1wIHwgMHgwMSk7CisJCXRtcCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgUkVHX01DVUZXREwpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCwgdG1wIHwgMHgwMSk7CiAKIAkJLyogIDgwNTEgcmVzZXQgKi8KLQkJdG1wID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTUNVRldETCArIDIpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCArIDIsIHRtcCAmIDB4ZjcpOworCQl0bXAgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMICsgMik7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMICsgMiwgdG1wICYgMHhmNyk7CiAJfSBlbHNlIHsKIAkJLyogIE1DVSBmaXJtd2FyZSBkb3dubG9hZCBkaXNhYmxlLiAqLwotCQl0bXAgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKTsKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX01DVUZXREwsIHRtcCAmIDB4ZmUpOworCQl0bXAgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX01DVUZXREwsIHRtcCAmIDB4ZmUpOwogCiAJCS8qICBSZXNlcnZlZCBmb3IgZncgZXh0ZW5zaW9uLiAqLwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCArIDEsIDB4MDApOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCArIDEsIDB4MDApOwogCX0KIH0KIApAQCAtNzUsOSArNzYsMTAgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudF9wMTsgaSsrKSB7Ci0JCXJldCA9IHJ0d193cml0ZU4ocGFkYXB0ZXIsCi0JCQkJIChGV184NzIzQV9TVEFSVF9BRERSRVNTICsgaSAqIGJsb2NrU2l6ZV9wMSksCi0JCQkJIGJsb2NrU2l6ZV9wMSwgKGJ1ZmZlclB0ciArIGkgKiBibG9ja1NpemVfcDEpKTsKKwkJcmV0ID0gcnRsODcyM2F1X3dyaXRlTihwYWRhcHRlciwgKEZXXzg3MjNBX1NUQVJUX0FERFJFU1MgKworCQkJCQkJICBpICogYmxvY2tTaXplX3AxKSwKKwkJCQkgICAgICAgYmxvY2tTaXplX3AxLAorCQkJCSAgICAgICAoYnVmZmVyUHRyICsgaSAqIGJsb2NrU2l6ZV9wMSkpOwogCQlpZiAocmV0ID09IF9GQUlMKQogCQkJZ290byBleGl0OwogCX0KQEAgLTk5LDExICsxMDEsMTIgQEAKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50X3AyOyBpKyspIHsKLQkJCXJldCA9IHJ0d193cml0ZU4ocGFkYXB0ZXIsCi0JCQkJCSAoRldfODcyM0FfU1RBUlRfQUREUkVTUyArIG9mZnNldCArCi0JCQkJCSAgaSAqIGJsb2NrU2l6ZV9wMiksIGJsb2NrU2l6ZV9wMiwKLQkJCQkJIChidWZmZXJQdHIgKyBvZmZzZXQgKwotCQkJCQkgIGkgKiBibG9ja1NpemVfcDIpKTsKKwkJCXJldCA9IHJ0bDg3MjNhdV93cml0ZU4ocGFkYXB0ZXIsCisJCQkJCSAgICAgICAoRldfODcyM0FfU1RBUlRfQUREUkVTUyArCisJCQkJCQlvZmZzZXQgKyBpICogYmxvY2tTaXplX3AyKSwKKwkJCQkJICAgICAgIGJsb2NrU2l6ZV9wMiwKKwkJCQkJICAgICAgIChidWZmZXJQdHIgKyBvZmZzZXQgKworCQkJCQkJaSAqIGJsb2NrU2l6ZV9wMikpOwogCiAJCQlpZiAocmV0ID09IF9GQUlMKQogCQkJCWdvdG8gZXhpdDsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCQkJICAoYnVmZlNpemUgLSBvZmZzZXQpLCBibG9ja1NpemVfcDMsIGJsb2NrQ291bnRfcDMpKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudF9wMzsgaSsrKSB7Ci0JCQlyZXQgPSBydHdfd3JpdGU4KHBhZGFwdGVyLAotCQkJCQkgKEZXXzg3MjNBX1NUQVJUX0FERFJFU1MgKyBvZmZzZXQgKyBpKSwKLQkJCQkJICooYnVmZmVyUHRyICsgb2Zmc2V0ICsgaSkpOworCQkJcmV0ID0gcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwKKwkJCQkJICAgICAgIChGV184NzIzQV9TVEFSVF9BRERSRVNTICsgb2Zmc2V0ICsgaSksCisJCQkJCSAgICAgICAqKGJ1ZmZlclB0ciArIG9mZnNldCArIGkpKTsKIAogCQkJaWYgKHJldCA9PSBfRkFJTCkKIAkJCQlnb3RvIGV4aXQ7CkBAIC0xNDIsOCArMTQ1LDggQEAKIAl1OCB2YWx1ZTg7CiAJdTggdThQYWdlID0gKHU4KSAocGFnZSAmIDB4MDcpOwogCi0JdmFsdWU4ID0gKHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX01DVUZXREwgKyAyKSAmIDB4RjgpIHwgdThQYWdlOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMICsgMiwgdmFsdWU4KTsKKwl2YWx1ZTggPSAocnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTUNVRldETCArIDIpICYgMHhGOCkgfCB1OFBhZ2U7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX01DVUZXREwgKyAyLCB2YWx1ZTgpOwogCiAJcmV0dXJuIF9CbG9ja1dyaXRlKHBhZGFwdGVyLCBidWZmZXIsIHNpemUpOwogfQpAQCAtMTg3LDE0ICsxOTAsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgczMyIF9GV0ZyZWVUb0dvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitzdGF0aWMgaW50IF9GV0ZyZWVUb0dvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJdTMyIGNvdW50ZXIgPSAwOwogCXUzMiB2YWx1ZTMyOwogCiAJLyogIHBvbGxpbmcgQ2hlY2tTdW0gcmVwb3J0ICovCiAJZG8gewotCQl2YWx1ZTMyID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX01DVUZXREwpOworCQl2YWx1ZTMyID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX01DVUZXREwpOwogCQlpZiAodmFsdWUzMiAmIEZXRExfQ2hrU3VtX3JwdCkKIAkJCWJyZWFrOwogCX0gd2hpbGUgKGNvdW50ZXIrKyA8IFBPTExJTkdfUkVBRFlfVElNRU9VVF9DT1VOVCk7CkBAIC0yMDksMTUgKzIxMiwxNSBAQAogCQkgKCIlczogQ2hlY2tzdW0gcmVwb3J0IE9LISBSRUdfTUNVRldETDoweCUwOHhcbiIsIF9fZnVuY19fLAogCQkgIHZhbHVlMzIpKTsKIAotCXZhbHVlMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfTUNVRldETCk7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKTsKIAl2YWx1ZTMyIHw9IE1DVUZXRExfUkRZOwogCXZhbHVlMzIgJj0gfldJTlRJTklfUkRZOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfTUNVRldETCwgdmFsdWUzMik7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19NQ1VGV0RMLCB2YWx1ZTMyKTsKIAogCS8qICBwb2xsaW5nIGZvciBGVyByZWFkeSAqLwogCWNvdW50ZXIgPSAwOwogCWRvIHsKLQkJdmFsdWUzMiA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKTsKKwkJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKTsKIAkJaWYgKHZhbHVlMzIgJiBXSU5USU5JX1JEWSkgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9oYWxfaW5pdF9jXywgX2Rydl9pbmZvXywKIAkJCQkgKCIlczogUG9sbGluZyBGVyByZWFkeSBzdWNjZXNzISEgIgpAQCAtMjQ4LDE1ICsyNTEsMTUgQEAKIAkJcEhhbERhdGEtPkZpcm13YXJlU3ViVmVyc2lvbiA8IDB4MDEpKSkpIHsKIAkJLyogIGFmdGVyIDg4QyBGdyB2MzMuMSAqLwogCQkvKiAweDFjZiA9IDB4MjAuIEluZm9ybSA4MDUxIHRvIHJlc2V0LiAyMDA5LjEyLjI1LiB0eW5saV90ZXN0ICovCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19ITUVURlIgKyAzLCAweDIwKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0hNRVRGUiArIDMsIDB4MjApOwogCi0JCXUxYlRtcCA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOICsgMSk7Ci0JCXdoaWxlICh1MWJUbXAgJiBCSVQyKSB7CisJCXUxYlRtcCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOICsgMSk7CisJCXdoaWxlICh1MWJUbXAgJiBCSVQoMikpIHsKIAkJCURlbGF5LS07CiAJCQlpZiAoRGVsYXkgPT0gMCkKIAkJCQlicmVhazsKIAkJCXVkZWxheSg1MCk7Ci0JCQl1MWJUbXAgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiArIDEpOworCQkJdTFiVG1wID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKIAkJfQogCQlSVF9UUkFDRShfbW9kdWxlX2hhbF9pbml0X2NfLCBfZHJ2X2luZm9fLAogCQkJICgiLSVzOiA4MDUxIHJlc2V0IHN1Y2Nlc3MgKCVkKVxuIiwgX19mdW5jX18sCkBAIC0yNjQsOSArMjY3LDkgQEAKIAogCQlpZiAoKERlbGF5ID09IDApKSB7CiAJCQkvKiBmb3JjZSBmaXJtd2FyZSByZXNldCAqLwotCQkJdTFiVG1wID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiArIDEsCi0JCQkJICAgdTFiVG1wICYgKH5CSVQyKSk7CisJCQl1MWJUbXAgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiArIDEpOworCQkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOICsgMSwKKwkJCQkJIHUxYlRtcCAmIH5CSVQoMikpOwogCQl9CiAJfQogfQpAQCAtMjc2LDkgKzI3OSw5IEBACiAvKgkJRG93bmxvYWQgODE5MkMgZmlybXdhcmUgY29kZS4gKi8KIC8qICAqLwogLyogICovCi1zMzIgcnRsODcyM2FfRmlybXdhcmVEb3dubG9hZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoraW50IHJ0bDg3MjNhX0Zpcm13YXJlRG93bmxvYWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzMzIgcnRTdGF0dXMgPSBfU1VDQ0VTUzsKKwlpbnQgcnRTdGF0dXMgPSBfU1VDQ0VTUzsKIAl1OCB3cml0ZUZXX3JldHJ5ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZ3ZGxfc3RhcnRfdGltZTsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKQEAgLTMwNiwxNSArMzA5LDE1IEBACiAJCQlEQkdfODcyM0EoIiBSdGw4NzIzX0Z3VU1DQkN1dEltYWdlQXJyYXlXaXRob3V0QlQgZm9yICIKIAkJCQkgICJSVEw4NzIzQSBCIENVVFxuIik7CiAJCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCi0JCQlmd19uYW1lID0gInJ0bHdpZmkvcnRsODcyM2F1ZndfQi5iaW4iOwotCQkJREJHXzg3MjNBKCIgUnRsODcyM19Gd1VNQ0JDdXRJbWFnZUFycmF5V2l0aEJUIGZvciAiCi0JCQkJICAiUlRMODcyM0EgQiBDVVRcbiIpOwotI2Vsc2UKLQkJCWZ3X25hbWUgPSAicnRsd2lmaS9ydGw4NzIzYXVmd19CX05vQlQuYmluIjsKLQkJCURCR184NzIzQSgiIFJ0bDg3MjNfRndVTUNCQ3V0SW1hZ2VBcnJheVdpdGhvdXRCVCBmb3IgIgotCQkJCSAgIlJUTDg3MjNBIEIgQ1VUXG4iKTsKLSNlbmRpZgorCQkJaWYgKHJ0bDg3MjNhX0JUX2NvZXhpc3QocGFkYXB0ZXIpKSB7CisJCQkJZndfbmFtZSA9ICJydGx3aWZpL3J0bDg3MjNhdWZ3X0IuYmluIjsKKwkJCQlEQkdfODcyM0EoIiBSdGw4NzIzX0Z3VU1DQkN1dEltYWdlQXJyYXlXaXRoQlQgIgorCQkJCQkgICJmb3IgUlRMODcyM0EgQiBDVVRcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlmd19uYW1lID0gInJ0bHdpZmkvcnRsODcyM2F1ZndfQl9Ob0JULmJpbiI7CisJCQkJREJHXzg3MjNBKCIgUnRsODcyM19Gd1VNQ0JDdXRJbWFnZUFycmF5V2l0aG91dCAiCisJCQkJCSAgIkJUIGZvciBSVEw4NzIzQSBCIENVVFxuIik7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQkvKiAgPFJvZ2VyX1RPRE8+IFdlIHNob3VsZCBkb3dubG9hZCBwcm9wZXIgUkFNIENvZGUgaGVyZQpAQCAtMzM2LDEyICszMzksMTEgQEAKIAkJcnRTdGF0dXMgPSBfRkFJTDsKIAkJZ290byBFeGl0OwogCX0KLQlmaXJtd2FyZV9idWYgPSBremFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwlmaXJtd2FyZV9idWYgPSBrbWVtZHVwKGZ3LT5kYXRhLCBmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZV9idWYpIHsKIAkJcnRTdGF0dXMgPSBfRkFJTDsKIAkJZ290byBFeGl0OwogCX0KLQltZW1jcHkoZmlybXdhcmVfYnVmLCBmdy0+ZGF0YSwgZnctPnNpemUpOwogCWJ1ZiA9IGZpcm13YXJlX2J1ZjsKIAlmd19zaXplID0gZnctPnNpemU7CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CkBAIC0zNzIsMTggKzM3NCwxOSBAQAogCS8qICBTdWdnZXN0ZWQgYnkgRmlsZW4uIElmIDgwNTEgaXMgcnVubmluZyBpbiBSQU0gY29kZSwgZHJpdmVyIHNob3VsZAogCSAgICBpbmZvcm0gRncgdG8gcmVzZXQgYnkgaXRzZWxmLCAqLwogCS8qICBvciBpdCB3aWxsIGNhdXNlIGRvd25sb2FkIEZ3IGZhaWwuIDIwMTAuMDIuMDEuIGJ5IHR5bmxpLiAqLwotCWlmIChydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKSAmIFJBTV9ETF9TRUwpIHsKKwlpZiAocnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTUNVRldETCkgJiBSQU1fRExfU0VMKSB7CiAJCS8qIDgwNTEgUkFNIGNvZGUgKi8KIAkJcnRsODcyM2FfRmlybXdhcmVTZWxmUmVzZXQocGFkYXB0ZXIpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCwgMHgwMCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMLCAweDAwKTsKIAl9CiAKIAlfRldEb3dubG9hZEVuYWJsZShwYWRhcHRlciwgdHJ1ZSk7CiAJZndkbF9zdGFydF90aW1lID0gamlmZmllczsKIAl3aGlsZSAoMSkgewogCQkvKiByZXNldCB0aGUgRldETCBjaGtzdW0gKi8KLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX01DVUZXREwsCi0JCQkgICBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKSB8IEZXRExfQ2hrU3VtX3JwdCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMLAorCQkJCSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKSB8CisJCQkJIEZXRExfQ2hrU3VtX3JwdCk7CiAKIAkJcnRTdGF0dXMgPSBfV3JpdGVGVyhwYWRhcHRlciwgYnVmLCBmd19zaXplKTsKIApAQCAtNDI3LDE0ICs0MzAsNiBAQAogCXBIYWxEYXRhLT5MYXN0SE1FQm94TnVtID0gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRsODcyM2FfZnJlZV9oYWxfZGF0YShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCi0Ja2ZyZWUocGFkYXB0ZXItPkhhbERhdGEpOwotCXBhZGFwdGVyLT5IYWxEYXRhID0gTlVMTDsKLQotfQotCiAvKiAgKi8KIC8qCQkJCUVmdXNlIHJlbGF0ZWQgY29kZSAqLwogLyogICovCkBAIC00NDUsNyArNDQwLDcgQEAKIAl1MzIgdmFsdWUzMiA9IDA7CiAKIAlEQkdfODcyM0EoIiVzOiBFZnVzZSBzd2l0Y2ggYmFuayB0byAlZFxuIiwgX19mdW5jX18sIGJhbmspOwotCXZhbHVlMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBFRlVTRV9URVNUKTsKKwl2YWx1ZTMyID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgRUZVU0VfVEVTVCk7CiAJYlJldCA9IHRydWU7CiAJc3dpdGNoIChiYW5rKSB7CiAJY2FzZSAwOgpAQCAtNDcwLDE0NyArNDY1LDEyIEBACiAJCWJSZXQgPSBmYWxzZTsKIAkJYnJlYWs7CiAJfQotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBFRlVTRV9URVNULCB2YWx1ZTMyKTsKKwlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgRUZVU0VfVEVTVCwgdmFsdWUzMik7CiAKIAlyZXR1cm4gYlJldDsKIH0KIAogc3RhdGljIHZvaWQKLUhhbF9HZXRFZnVzZURlZmluaXRpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgICAgIHU4IGVmdXNlVHlwZSwgdTggdHlwZSwgdm9pZCAqcE91dCkKLXsKLQl1OCAqcHUxVG1wOwotCXUxNiAqcHUyVG1wOwotCXU4ICpwTWF4X3NlY3Rpb247Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFRZUEVfRUZVU0VfTUFYX1NFQ1RJT046Ci0JCXBNYXhfc2VjdGlvbiA9ICh1OCAqKSBwT3V0OwotCi0JCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKLQkJCSpwTWF4X3NlY3Rpb24gPSBFRlVTRV9NQVhfU0VDVElPTl84NzIzQTsKLQkJZWxzZQotCQkJKnBNYXhfc2VjdGlvbiA9IEVGVVNFX0JUX01BWF9TRUNUSU9OOwotCQlicmVhazsKLQotCWNhc2UgVFlQRV9FRlVTRV9SRUFMX0NPTlRFTlRfTEVOOgotCQlwdTJUbXAgPSAodTE2ICopIHBPdXQ7Ci0KLQkJaWYgKGVmdXNlVHlwZSA9PSBFRlVTRV9XSUZJKQotCQkJKnB1MlRtcCA9IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU5fODcyM0E7Ci0JCWVsc2UKLQkJCSpwdTJUbXAgPSBFRlVTRV9CVF9SRUFMX0NPTlRFTlRfTEVOOwotCQlicmVhazsKLQotCWNhc2UgVFlQRV9BVkFJTEFCTEVfRUZVU0VfQllURVNfQkFOSzoKLQkJcHUyVG1wID0gKHUxNiAqKSBwT3V0OwotCi0JCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKLQkJCSpwdTJUbXAgPSAoRUZVU0VfUkVBTF9DT05URU5UX0xFTl84NzIzQSAtCi0JCQkJICAgRUZVU0VfT09CX1BST1RFQ1RfQllURVMpOwotCQllbHNlCi0JCQkqcHUyVG1wID0gKEVGVVNFX0JUX1JFQUxfQkFOS19DT05URU5UX0xFTiAtCi0JCQkJICAgRUZVU0VfUFJPVEVDVF9CWVRFU19CQU5LKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFRZUEVfQVZBSUxBQkxFX0VGVVNFX0JZVEVTX1RPVEFMOgotCQlwdTJUbXAgPSAodTE2ICopIHBPdXQ7Ci0KLQkJaWYgKGVmdXNlVHlwZSA9PSBFRlVTRV9XSUZJKQotCQkJKnB1MlRtcCA9IChFRlVTRV9SRUFMX0NPTlRFTlRfTEVOXzg3MjNBIC0KLQkJCQkgICBFRlVTRV9PT0JfUFJPVEVDVF9CWVRFUyk7Ci0JCWVsc2UKLQkJCSpwdTJUbXAgPSAoRUZVU0VfQlRfUkVBTF9DT05URU5UX0xFTiAtCi0JCQkJICAgKEVGVVNFX1BST1RFQ1RfQllURVNfQkFOSyAqIDMpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFRZUEVfRUZVU0VfTUFQX0xFTjoKLQkJcHUyVG1wID0gKHUxNiAqKSBwT3V0OwotCi0JCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKLQkJCSpwdTJUbXAgPSBFRlVTRV9NQVBfTEVOXzg3MjNBOwotCQllbHNlCi0JCQkqcHUyVG1wID0gRUZVU0VfQlRfTUFQX0xFTjsKLQkJYnJlYWs7Ci0KLQljYXNlIFRZUEVfRUZVU0VfUFJPVEVDVF9CWVRFU19CQU5LOgotCQlwdTFUbXAgPSAodTggKikgcE91dDsKLQotCQlpZiAoZWZ1c2VUeXBlID09IEVGVVNFX1dJRkkpCi0JCQkqcHUxVG1wID0gRUZVU0VfT09CX1BST1RFQ1RfQllURVM7Ci0JCWVsc2UKLQkJCSpwdTFUbXAgPSBFRlVTRV9QUk9URUNUX0JZVEVTX0JBTks7Ci0JCWJyZWFrOwotCi0JY2FzZSBUWVBFX0VGVVNFX0NPTlRFTlRfTEVOX0JBTks6Ci0JCXB1MlRtcCA9ICh1MTYgKikgcE91dDsKLQotCQlpZiAoZWZ1c2VUeXBlID09IEVGVVNFX1dJRkkpCi0JCQkqcHUyVG1wID0gRUZVU0VfUkVBTF9DT05URU5UX0xFTl84NzIzQTsKLQkJZWxzZQotCQkJKnB1MlRtcCA9IEVGVVNFX0JUX1JFQUxfQkFOS19DT05URU5UX0xFTjsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwdTFUbXAgPSAodTggKikgcE91dDsKLQkJKnB1MVRtcCA9IDA7Ci0JCWJyZWFrOwotCX0KLX0KLQotI2RlZmluZSBWT0xUQUdFX1YyNQkJMHgwMwotI2RlZmluZSBMRE9FMjVfU0hJRlQJMjgKLQotc3RhdGljIHZvaWQKLUhhbF9FZnVzZVBvd2VyU3dpdGNoKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGJXcml0ZSwgdTggUHdyU3RhdGUpCi17Ci0JdTggdGVtcHZhbDsKLQl1MTYgdG1wVjE2OwotCi0JaWYgKFB3clN0YXRlID09IHRydWUpIHsKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0VGVVNFX0FDQ0VTUywgRUZVU0VfQUNDRVNTX09OKTsKLQotCQkvKiAgMS4yViBQb3dlcjogRnJvbSBWRERPTiB3aXRoIFBvd2VyCi0JCSAgICBDdXQoMHgwMDAwaFsxNV0pLCBkZWZ1YWx0IHZhbGlkICovCi0JCXRtcFYxNiA9IHJ0d19yZWFkMTYocGFkYXB0ZXIsIFJFR19TWVNfSVNPX0NUUkwpOwotCQlpZiAoISh0bXBWMTYgJiBQV0NfRVYxMlYpKSB7Ci0JCQl0bXBWMTYgfD0gUFdDX0VWMTJWOwotCQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19TWVNfSVNPX0NUUkwsIHRtcFYxNik7Ci0JCX0KLQkJLyogIFJlc2V0OiAweDAwMDBoWzI4XSwgZGVmYXVsdCB2YWxpZCAqLwotCQl0bXBWMTYgPSBydHdfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pOwotCQlpZiAoISh0bXBWMTYgJiBGRU5fRUxEUikpIHsKLQkJCXRtcFYxNiB8PSBGRU5fRUxEUjsKLQkJCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sIHRtcFYxNik7Ci0JCX0KLQotCQkvKiAgQ2xvY2s6IEdhdGVkKDB4MDAwOGhbNV0pIDhNKDB4MDAwOGhbMV0pIGNsb2NrCi0JCSAgICBmcm9tIEFOQSwgZGVmYXVsdCB2YWxpZCAqLwotCQl0bXBWMTYgPSBydHdfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0NMS1IpOwotCQlpZiAoKCEodG1wVjE2ICYgTE9BREVSX0NMS19FTikpIHx8ICghKHRtcFYxNiAmIEFOQThNKSkpIHsKLQkJCXRtcFYxNiB8PSAoTE9BREVSX0NMS19FTiB8IEFOQThNKTsKLQkJCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0NMS1IsIHRtcFYxNik7Ci0JCX0KLQotCQlpZiAoYldyaXRlID09IHRydWUpIHsKLQkJCS8qICBFbmFibGUgTERPIDIuNVYgYmVmb3JlIHJlYWQvd3JpdGUgYWN0aW9uICovCi0JCQl0ZW1wdmFsID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBFRlVTRV9URVNUICsgMyk7Ci0JCQl0ZW1wdmFsICY9IDB4MEY7Ci0JCQl0ZW1wdmFsIHw9IChWT0xUQUdFX1YyNSA8PCA0KTsKLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIEVGVVNFX1RFU1QgKyAzLCAodGVtcHZhbCB8IDB4ODApKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19FRlVTRV9BQ0NFU1MsIEVGVVNFX0FDQ0VTU19PRkYpOwotCi0JCWlmIChiV3JpdGUgPT0gdHJ1ZSkgewotCQkJLyogIERpc2FibGUgTERPIDIuNVYgYWZ0ZXIgcmVhZC93cml0ZSBhY3Rpb24gKi8KLQkJCXRlbXB2YWwgPSBydHdfcmVhZDgocGFkYXB0ZXIsIEVGVVNFX1RFU1QgKyAzKTsKLQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIEVGVVNFX1RFU1QgKyAzLCAodGVtcHZhbCAmIDB4N0YpKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKIGhhbF9SZWFkRUZ1c2VfV2lGaShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkgICB1MTYgX29mZnNldCwgdTE2IF9zaXplX2J5dGUsIHU4ICpwYnVmKQogewpAQCAtNjE5LDYgKzQ3OSw3IEBACiAJdTggb2Zmc2V0LCB3ZGVuOwogCXU4IGVmdXNlSGVhZGVyLCBlZnVzZUV4dEhkciwgZWZ1c2VEYXRhOwogCXUxNiBpLCB0b3RhbCwgdXNlZDsKKwlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAogCS8qICBEbyBOT1QgZXhjZXNzIHRvdGFsIHNpemUgb2YgRUZ1c2UgdGFibGUuCiAJICAgIEFkZGVkIGJ5IFJvZ2VyLCAyMDA4LjExLjEwLiAqLwpAQCAtNjI4LDcgKzQ4OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQllZnVzZVRibCA9ICh1OCAqKSBrbWFsbG9jKEVGVVNFX01BUF9MRU5fODcyM0EsIEdGUF9LRVJORUwpOworCWVmdXNlVGJsID0ga21hbGxvYyhFRlVTRV9NQVBfTEVOXzg3MjNBLCBHRlBfS0VSTkVMKTsKIAlpZiAoZWZ1c2VUYmwgPT0gTlVMTCkgewogCQlEQkdfODcyM0EoIiVzOiBhbGxvYyBlZnVzZVRibCBmYWlsIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CkBAIC02OTYsNyArNTU3LDcgQEAKIAlFRlVTRV9HZXRFZnVzZURlZmluaXRpb24yM2EocGFkYXB0ZXIsIEVGVVNFX1dJRkksCiAJCQkJIFRZUEVfQVZBSUxBQkxFX0VGVVNFX0JZVEVTX1RPVEFMLCAmdG90YWwpOwogCXVzZWQgPSBlRnVzZV9BZGRyIC0gMTsKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0VGVVNFX0JZVEVTLCAodTggKikmdXNlZCk7CisJcEhhbERhdGEtPkVmdXNlVXNlZEJ5dGVzID0gdXNlZDsKIAogCWtmcmVlKGVmdXNlVGJsKTsKIH0KQEAgLTcxMSw2ICs1NzIsNyBAQAogCXU4IGVmdXNlSGVhZGVyLCBlZnVzZUV4dEhkciwgZWZ1c2VEYXRhOwogCXU4IG9mZnNldCwgd2RlbjsKIAl1MTYgaSwgdG90YWwsIHVzZWQ7CisJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CiAKIAkvKiAgRG8gTk9UIGV4Y2VzcyB0b3RhbCBzaXplIG9mIEVGdXNlIHRhYmxlLgogCSAgICBBZGRlZCBieSBSb2dlciwgMjAwOC4xMS4xMC4gKi8KQEAgLTgxMiwxNSArNjc0LDE1IEBACiAJRUZVU0VfR2V0RWZ1c2VEZWZpbml0aW9uMjNhKHBhZGFwdGVyLCBFRlVTRV9CVCwKIAkJCQkgVFlQRV9BVkFJTEFCTEVfRUZVU0VfQllURVNfVE9UQUwsICZ0b3RhbCk7CiAJdXNlZCA9IChFRlVTRV9CVF9SRUFMX0JBTktfQ09OVEVOVF9MRU4gKiAoYmFuayAtIDEpKSArIGVGdXNlX0FkZHIgLSAxOwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfRUZVU0VfQlRfQllURVMsICh1OCAqKSAmdXNlZCk7CisJcEhhbERhdGEtPkJURWZ1c2VVc2VkQnl0ZXMgPSB1c2VkOwogCiBleGl0OgogCWtmcmVlKGVmdXNlVGJsKTsKIH0KIAotc3RhdGljIHZvaWQKLUhhbF9SZWFkRUZ1c2Uoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkgICAgICB1OCBlZnVzZVR5cGUsIHUxNiBfb2Zmc2V0LCB1MTYgX3NpemVfYnl0ZSwgdTggKnBidWYpCit2b2lkCitydGw4NzIzYV9yZWFkZWZ1c2Uoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJICAgdTggZWZ1c2VUeXBlLCB1MTYgX29mZnNldCwgdTE2IF9zaXplX2J5dGUsIHU4ICpwYnVmKQogewogCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKIAkJaGFsX1JlYWRFRnVzZV9XaUZpKHBhZGFwdGVyLCBfb2Zmc2V0LCBfc2l6ZV9ieXRlLCBwYnVmKTsKQEAgLTgyOCwxNCArNjkwLDE0IEBACiAJCWhhbF9SZWFkRUZ1c2VfQlQocGFkYXB0ZXIsIF9vZmZzZXQsIF9zaXplX2J5dGUsIHBidWYpOwogfQogCi1zdGF0aWMgdTE2Ci1oYWxfRWZ1c2VHZXRDdXJyZW50U2l6ZV9XaUZpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCit1MTYgcnRsODcyM2FfRWZ1c2VHZXRDdXJyZW50U2l6ZV9XaUZpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJdTE2IGVmdXNlX2FkZHIgPSAwOwogCXU4IGhvZmZzZXQgPSAwLCBod29yZGVuID0gMDsKIAl1OCBlZnVzZV9kYXRhLCB3b3JkX2NudHMgPSAwOworCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCi0JcnR3MjNhX2hhbF9nZXRfaHdyZWcocGFkYXB0ZXIsIEhXX1ZBUl9FRlVTRV9CWVRFUywgKHU4ICopICZlZnVzZV9hZGRyKTsKKwllZnVzZV9hZGRyID0gcEhhbERhdGEtPkVmdXNlVXNlZEJ5dGVzOwogCiAJREJHXzg3MjNBKCIlczogc3RhcnRfZWZ1c2VfYWRkciA9IDB4JVhcbiIsIF9fZnVuY19fLCBlZnVzZV9hZGRyKTsKIApAQCAtODQ0LDcgKzcwNiw3IEBACiAKIAl3aGlsZSAoQVZBSUxBQkxFX0VGVVNFX0FERFIoZWZ1c2VfYWRkcikpIHsKIAkJaWYgKGVmdXNlX09uZUJ5dGVSZWFkMjNhKHBhZGFwdGVyLCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkgPT0KLQkJICAgIGZhbHNlKSB7CisJCSAgICBfRkFJTCkgewogCQkJREJHXzg3MjNBKEtFUk5fRVJSICIlczogZWZ1c2VfT25lQnl0ZVJlYWQyM2EgRmFpbCEgIgogCQkJCSAgImFkZHIgPSAweCVYICEhXG4iLCBfX2Z1bmNfXywgZWZ1c2VfYWRkcik7CiAJCQlicmVhazsKQEAgLTg3MiwxNSArNzM0LDE0IEBACiAJCWVmdXNlX2FkZHIgKz0gKHdvcmRfY250cyAqIDIpICsgMTsKIAl9CiAKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0VGVVNFX0JZVEVTLCAodTggKikgJmVmdXNlX2FkZHIpOworCXBIYWxEYXRhLT5FZnVzZVVzZWRCeXRlcyA9IGVmdXNlX2FkZHI7CiAKIAlEQkdfODcyM0EoIiVzOiBDdXJyZW50U2l6ZSA9JWRcbiIsIF9fZnVuY19fLCBlZnVzZV9hZGRyKTsKIAogCXJldHVybiBlZnVzZV9hZGRyOwogfQogCi1zdGF0aWMgdTE2Ci1oYWxfRWZ1c2VHZXRDdXJyZW50U2l6ZV9CVChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQordTE2IHJ0bDg3MjNhX0VmdXNlR2V0Q3VycmVudFNpemVfQlQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAl1MTYgYnR1c2VkYnl0ZXM7CiAJdTE2IGVmdXNlX2FkZHI7CkBAIC04ODgsOCArNzQ5LDkgQEAKIAl1OCBob2Zmc2V0ID0gMCwgaHdvcmRlbiA9IDA7CiAJdTggZWZ1c2VfZGF0YSwgd29yZF9jbnRzID0gMDsKIAl1MTYgcmV0VTIgPSAwOworCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCi0JcnR3MjNhX2hhbF9nZXRfaHdyZWcocGFkYXB0ZXIsIEhXX1ZBUl9FRlVTRV9CVF9CWVRFUywgKHU4ICopICZidHVzZWRieXRlcyk7CisJYnR1c2VkYnl0ZXMgPSBwSGFsRGF0YS0+QlRFZnVzZVVzZWRCeXRlczsKIAogCWVmdXNlX2FkZHIgPSAodTE2KSAoKGJ0dXNlZGJ5dGVzICUgRUZVU0VfQlRfUkVBTF9CQU5LX0NPTlRFTlRfTEVOKSk7CiAJc3RhcnRCYW5rID0gKHU4KSAoMSArIChidHVzZWRieXRlcyAvIEVGVVNFX0JUX1JFQUxfQkFOS19DT05URU5UX0xFTikpOwpAQCAtOTE1LDcgKzc3Nyw3IEBACiAKIAkJd2hpbGUgKEFWQUlMQUJMRV9FRlVTRV9BRERSKGVmdXNlX2FkZHIpKSB7CiAJCQlpZiAoZWZ1c2VfT25lQnl0ZVJlYWQyM2EocGFkYXB0ZXIsIGVmdXNlX2FkZHIsCi0JCQkJCSAgICAgICZlZnVzZV9kYXRhKSA9PSBmYWxzZSkgeworCQkJCQkgICAgICAmZWZ1c2VfZGF0YSkgPT0gX0ZBSUwpIHsKIAkJCQlEQkdfODcyM0EoS0VSTl9FUlIgIiVzOiBlZnVzZV9PbmVCeXRlUmVhZDIzYSBGYWlsISIKIAkJCQkJICAiIGFkZHIgPSAweCVYICEhXG4iLAogCQkJCQkgIF9fZnVuY19fLCBlZnVzZV9hZGRyKTsKQEAgLTk1NCw4NiArODE2LDE0IEBACiAJfQogCiAJcmV0VTIgPSAoKGJhbmsgLSAxKSAqIEVGVVNFX0JUX1JFQUxfQkFOS19DT05URU5UX0xFTikgKyBlZnVzZV9hZGRyOwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfRUZVU0VfQlRfQllURVMsICh1OCAqKSZyZXRVMik7CisJcEhhbERhdGEtPkJURWZ1c2VVc2VkQnl0ZXMgPSByZXRVMjsKIAogCURCR184NzIzQSgiJXM6IEN1cnJlbnRTaXplID0lZFxuIiwgX19mdW5jX18sIHJldFUyKTsKIAlyZXR1cm4gcmV0VTI7CiB9CiAKLXN0YXRpYyB1MTYKLUhhbF9FZnVzZUdldEN1cnJlbnRTaXplKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHU4IGVmdXNlVHlwZSkKLXsKLQl1MTYgcmV0ID0gMDsKLQotCWlmIChlZnVzZVR5cGUgPT0gRUZVU0VfV0lGSSkKLQkJcmV0ID0gaGFsX0VmdXNlR2V0Q3VycmVudFNpemVfV2lGaShwQWRhcHRlcik7Ci0JZWxzZQotCQlyZXQgPSBoYWxfRWZ1c2VHZXRDdXJyZW50U2l6ZV9CVChwQWRhcHRlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTgKLUhhbF9FZnVzZVdvcmRFbmFibGVEYXRhV3JpdGUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgdTE2IGVmdXNlX2FkZHIsIHU4IHdvcmRfZW4sIHU4ICpkYXRhKQotewotCXUxNiB0bXBhZGRyID0gMDsKLQl1MTYgc3RhcnRfYWRkciA9IGVmdXNlX2FkZHI7Ci0JdTggYmFkd29yZGVuID0gMHgwRjsKLQl1OCB0bXBkYXRhW1BHUEtUX0RBVEFfU0laRV07Ci0KLQltZW1zZXQodG1wZGF0YSwgMHhGRiwgUEdQS1RfREFUQV9TSVpFKTsKLQotCWlmICghKHdvcmRfZW4gJiBCSVQoMCkpKSB7Ci0JCXRtcGFkZHIgPSBzdGFydF9hZGRyOwotCQllZnVzZV9PbmVCeXRlV3JpdGUyM2EocGFkYXB0ZXIsIHN0YXJ0X2FkZHIrKywgZGF0YVswXSk7Ci0JCWVmdXNlX09uZUJ5dGVXcml0ZTIzYShwYWRhcHRlciwgc3RhcnRfYWRkcisrLCBkYXRhWzFdKTsKLQotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciwgJnRtcGRhdGFbMF0pOwotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciArIDEsICZ0bXBkYXRhWzFdKTsKLQkJaWYgKChkYXRhWzBdICE9IHRtcGRhdGFbMF0pIHx8IChkYXRhWzFdICE9IHRtcGRhdGFbMV0pKSB7Ci0JCQliYWR3b3JkZW4gJj0gKH5CSVQoMCkpOwotCQl9Ci0JfQotCWlmICghKHdvcmRfZW4gJiBCSVQoMSkpKSB7Ci0JCXRtcGFkZHIgPSBzdGFydF9hZGRyOwotCQllZnVzZV9PbmVCeXRlV3JpdGUyM2EocGFkYXB0ZXIsIHN0YXJ0X2FkZHIrKywgZGF0YVsyXSk7Ci0JCWVmdXNlX09uZUJ5dGVXcml0ZTIzYShwYWRhcHRlciwgc3RhcnRfYWRkcisrLCBkYXRhWzNdKTsKLQotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciwgJnRtcGRhdGFbMl0pOwotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciArIDEsICZ0bXBkYXRhWzNdKTsKLQkJaWYgKChkYXRhWzJdICE9IHRtcGRhdGFbMl0pIHx8IChkYXRhWzNdICE9IHRtcGRhdGFbM10pKSB7Ci0JCQliYWR3b3JkZW4gJj0gKH5CSVQoMSkpOwotCQl9Ci0JfQotCWlmICghKHdvcmRfZW4gJiBCSVQoMikpKSB7Ci0JCXRtcGFkZHIgPSBzdGFydF9hZGRyOwotCQllZnVzZV9PbmVCeXRlV3JpdGUyM2EocGFkYXB0ZXIsIHN0YXJ0X2FkZHIrKywgZGF0YVs0XSk7Ci0JCWVmdXNlX09uZUJ5dGVXcml0ZTIzYShwYWRhcHRlciwgc3RhcnRfYWRkcisrLCBkYXRhWzVdKTsKLQotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciwgJnRtcGRhdGFbNF0pOwotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciArIDEsICZ0bXBkYXRhWzVdKTsKLQkJaWYgKChkYXRhWzRdICE9IHRtcGRhdGFbNF0pIHx8IChkYXRhWzVdICE9IHRtcGRhdGFbNV0pKSB7Ci0JCQliYWR3b3JkZW4gJj0gKH5CSVQoMikpOwotCQl9Ci0JfQotCWlmICghKHdvcmRfZW4gJiBCSVQoMykpKSB7Ci0JCXRtcGFkZHIgPSBzdGFydF9hZGRyOwotCQllZnVzZV9PbmVCeXRlV3JpdGUyM2EocGFkYXB0ZXIsIHN0YXJ0X2FkZHIrKywgZGF0YVs2XSk7Ci0JCWVmdXNlX09uZUJ5dGVXcml0ZTIzYShwYWRhcHRlciwgc3RhcnRfYWRkcisrLCBkYXRhWzddKTsKLQotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciwgJnRtcGRhdGFbNl0pOwotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgdG1wYWRkciArIDEsICZ0bXBkYXRhWzddKTsKLQkJaWYgKChkYXRhWzZdICE9IHRtcGRhdGFbNl0pIHx8IChkYXRhWzddICE9IHRtcGRhdGFbN10pKSB7Ci0JCQliYWR3b3JkZW4gJj0gKH5CSVQoMykpOwotCQl9Ci0JfQotCi0JcmV0dXJuIGJhZHdvcmRlbjsKLX0KLQotc3RhdGljIHMzMgotSGFsX0VmdXNlUGdQYWNrZXRSZWFkKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IG9mZnNldCwgdTggKmRhdGEpCitib29sCitydGw4NzIzYV9FZnVzZVBnUGFja2V0UmVhZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBvZmZzZXQsIHU4ICpkYXRhKQogewogCXU4IGVmdXNlX2RhdGEsIHdvcmRfY250cyA9IDA7CiAJdTE2IGVmdXNlX2FkZHIgPSAwOwpAQCAtMTA2NCw3ICs4NTQsNyBAQAogCS8qICAqLwogCXdoaWxlIChBVkFJTEFCTEVfRUZVU0VfQUREUihlZnVzZV9hZGRyKSkgewogCQlpZiAoZWZ1c2VfT25lQnl0ZVJlYWQyM2EocGFkYXB0ZXIsIGVmdXNlX2FkZHIrKywgJmVmdXNlX2RhdGEpID09Ci0JCSAgICBmYWxzZSkgeworCQkgICAgX0ZBSUwpIHsKIAkJCXJldCA9IGZhbHNlOwogCQkJYnJlYWs7CiAJCX0KQEAgLTExMTAsMjgxICs5MDAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1OAotaGFsX0VmdXNlUGdDaGVja0F2YWlsYWJsZUFkZHIoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlciwgdTggZWZ1c2VUeXBlKQotewotCXUxNiBtYXhfYXZhaWxhYmxlID0gMDsKLQl1MTYgY3VycmVudF9zaXplOwotCi0JRUZVU0VfR2V0RWZ1c2VEZWZpbml0aW9uMjNhKHBBZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJIFRZUEVfQVZBSUxBQkxFX0VGVVNFX0JZVEVTX1RPVEFMLAotCQkJCSAmbWF4X2F2YWlsYWJsZSk7Ci0KLQljdXJyZW50X3NpemUgPSBFZnVzZV9HZXRDdXJyZW50U2l6ZTIzYShwQWRhcHRlciwgZWZ1c2VUeXBlKTsKLQlpZiAoY3VycmVudF9zaXplID49IG1heF9hdmFpbGFibGUpIHsKLQkJREJHXzg3MjNBKCIlczogRXJyb3IhISBjdXJyZW50X3NpemUoJWQpPm1heF9hdmFpbGFibGUoJWQpXG4iLAotCQkJICBfX2Z1bmNfXywgY3VycmVudF9zaXplLCBtYXhfYXZhaWxhYmxlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQKLWhhbF9FZnVzZUNvbnN0cnVjdFBHUGt0KHU4IG9mZnNldCwgdTggd29yZF9lbiwgdTggKnBEYXRhLAotCQkJc3RydWN0IHBnX3BrdF9zdHJ1Y3QgKnBUYXJnZXRQa3QpCi17Ci0JbWVtc2V0KHBUYXJnZXRQa3QtPmRhdGEsIDB4RkYsIFBHUEtUX0RBVEFfU0laRSk7Ci0JcFRhcmdldFBrdC0+b2Zmc2V0ID0gb2Zmc2V0OwotCXBUYXJnZXRQa3QtPndvcmRfZW4gPSB3b3JkX2VuOwotCWVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZDIzYSh3b3JkX2VuLCBwRGF0YSwgcFRhcmdldFBrdC0+ZGF0YSk7Ci0JcFRhcmdldFBrdC0+d29yZF9jbnRzID0gRWZ1c2VfQ2FsY3VsYXRlV29yZENudHMyM2EocFRhcmdldFBrdC0+d29yZF9lbik7Ci19Ci0KLXN0YXRpYyB1OAotaGFsX0VmdXNlUGFydGlhbFdyaXRlQ2hlY2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggZWZ1c2VUeXBlLAotCQkJICAgdTE2ICpwQWRkciwgc3RydWN0IHBnX3BrdF9zdHJ1Y3QgKnBUYXJnZXRQa3QpCi17Ci0JdTggYlJldCA9IGZhbHNlOwotCXUxNiBzdGFydEFkZHIgPSAwLCBlZnVzZV9tYXhfYXZhaWxhYmxlX2xlbiA9IDAsIGVmdXNlX21heCA9IDA7Ci0JdTggZWZ1c2VfZGF0YSA9IDA7Ci0KLQlFRlVTRV9HZXRFZnVzZURlZmluaXRpb24yM2EocGFkYXB0ZXIsIGVmdXNlVHlwZSwKLQkJCQkgVFlQRV9BVkFJTEFCTEVfRUZVU0VfQllURVNfVE9UQUwsCi0JCQkJICZlZnVzZV9tYXhfYXZhaWxhYmxlX2xlbik7Ci0JRUZVU0VfR2V0RWZ1c2VEZWZpbml0aW9uMjNhKHBhZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJIFRZUEVfRUZVU0VfQ09OVEVOVF9MRU5fQkFOSywgJmVmdXNlX21heCk7Ci0KLQlpZiAoZWZ1c2VUeXBlID09IEVGVVNFX1dJRkkpIHsKLQkJcnR3MjNhX2hhbF9nZXRfaHdyZWcocGFkYXB0ZXIsIEhXX1ZBUl9FRlVTRV9CWVRFUywKLQkJCQkgICh1OCAqKSAmc3RhcnRBZGRyKTsKLQl9IGVsc2UgewotCQlydHcyM2FfaGFsX2dldF9od3JlZyhwYWRhcHRlciwgSFdfVkFSX0VGVVNFX0JUX0JZVEVTLAotCQkJCSAgKHU4ICopICZzdGFydEFkZHIpOwotCX0KLQlzdGFydEFkZHIgJT0gZWZ1c2VfbWF4OwotCi0Jd2hpbGUgKDEpIHsKLQkJaWYgKHN0YXJ0QWRkciA+PSBlZnVzZV9tYXhfYXZhaWxhYmxlX2xlbikgewotCQkJYlJldCA9IGZhbHNlOwotCQkJREJHXzg3MjNBKCIlczogc3RhcnRBZGRyKCVkKSA+PSBlZnVzZV9tYXhfYXZhaWxhYmxlXyIKLQkJCQkgICJsZW4oJWQpXG4iLCBfX2Z1bmNfXywgc3RhcnRBZGRyLAotCQkJCSAgZWZ1c2VfbWF4X2F2YWlsYWJsZV9sZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZWZ1c2VfT25lQnl0ZVJlYWQyM2EocGFkYXB0ZXIsIHN0YXJ0QWRkciwgJmVmdXNlX2RhdGEpICYmCi0JCSAgICAoZWZ1c2VfZGF0YSAhPSAweEZGKSkgewotCQkJYlJldCA9IGZhbHNlOwotCQkJREJHXzg3MjNBKCIlczogU29tZXRoaW5nIFdyb25nISBsYXN0IGJ5dGVzKCUjWCA9IDB4JTAyWCkgIgotCQkJCSAgImlzIG5vdCAweEZGXG4iLCBfX2Z1bmNfXywKLQkJCQkgIHN0YXJ0QWRkciwgZWZ1c2VfZGF0YSk7Ci0JCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCS8qICBub3QgdXNlZCBoZWFkZXIsIDB4ZmYgKi8KLQkJCSpwQWRkciA9IHN0YXJ0QWRkcjsKLQkJCWJSZXQgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYlJldDsKLX0KLQotc3RhdGljIHU4Ci1oYWxfRWZ1c2VQZ1BhY2tldFdyaXRlMUJ5dGVIZWFkZXIoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlciwgdTggZWZ1c2VUeXBlLAotCQkJCSAgdTE2ICpwQWRkciwgc3RydWN0IHBnX3BrdF9zdHJ1Y3QgKnBUYXJnZXRQa3QpCi17Ci0JdTggcGdfaGVhZGVyID0gMCwgdG1wX2hlYWRlciA9IDA7Ci0JdTE2IGVmdXNlX2FkZHIgPSAqcEFkZHI7Ci0JdTggcmVwZWF0Y250ID0gMDsKLQotCXBnX2hlYWRlciA9ICgocFRhcmdldFBrdC0+b2Zmc2V0IDw8IDQpICYgMHhmMCkgfCBwVGFyZ2V0UGt0LT53b3JkX2VuOwotCi0JZG8gewotCQllZnVzZV9PbmVCeXRlV3JpdGUyM2EocEFkYXB0ZXIsIGVmdXNlX2FkZHIsIHBnX2hlYWRlcik7Ci0JCWVmdXNlX09uZUJ5dGVSZWFkMjNhKHBBZGFwdGVyLCBlZnVzZV9hZGRyLCAmdG1wX2hlYWRlcik7Ci0JCWlmICh0bXBfaGVhZGVyICE9IDB4RkYpCi0JCQlicmVhazsKLQkJaWYgKHJlcGVhdGNudCsrID4gRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8pIHsKLQkJCURCR184NzIzQSgiJXM6IFJlcGVhdCBvdmVyIGxpbWl0IGZvciBwZ19oZWFkZXIhIVxuIiwKLQkJCQkgIF9fZnVuY19fKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0gd2hpbGUgKDEpOwotCi0JaWYgKHRtcF9oZWFkZXIgIT0gcGdfaGVhZGVyKSB7Ci0JCURCR184NzIzQShLRVJOX0VSUiAiJXM6IFBHIEhlYWRlciBGYWlsISEocGcgPSAweCUwMlggIgotCQkJICAicmVhZCA9IDB4JTAyWClcbiIsIF9fZnVuY19fLAotCQkJICBwZ19oZWFkZXIsIHRtcF9oZWFkZXIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JKnBBZGRyID0gZWZ1c2VfYWRkcjsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdTgKLWhhbF9FZnVzZVBnUGFja2V0V3JpdGUyQnl0ZUhlYWRlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBlZnVzZVR5cGUsCi0JCQkJICB1MTYgKnBBZGRyLCBzdHJ1Y3QgcGdfcGt0X3N0cnVjdCAqcFRhcmdldFBrdCkKLXsKLQl1MTYgZWZ1c2VfYWRkciwgZWZ1c2VfbWF4X2F2YWlsYWJsZV9sZW4gPSAwOwotCXU4IHBnX2hlYWRlciA9IDAsIHRtcF9oZWFkZXIgPSAwOwotCXU4IHJlcGVhdGNudCA9IDA7Ci0KLQlFRlVTRV9HZXRFZnVzZURlZmluaXRpb24yM2EocGFkYXB0ZXIsIGVmdXNlVHlwZSwKLQkJCQkgVFlQRV9BVkFJTEFCTEVfRUZVU0VfQllURVNfQkFOSywKLQkJCQkgJmVmdXNlX21heF9hdmFpbGFibGVfbGVuKTsKLQotCWVmdXNlX2FkZHIgPSAqcEFkZHI7Ci0JaWYgKGVmdXNlX2FkZHIgPj0gZWZ1c2VfbWF4X2F2YWlsYWJsZV9sZW4pIHsKLQkJREJHXzg3MjNBKCIlczogYWRkciglZCkgb3ZlciBhdmFsaWFibGUoJWQpISFcbiIsIF9fZnVuY19fLAotCQkJICBlZnVzZV9hZGRyLCBlZnVzZV9tYXhfYXZhaWxhYmxlX2xlbik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwZ19oZWFkZXIgPSAoKHBUYXJnZXRQa3QtPm9mZnNldCAmIDB4MDcpIDw8IDUpIHwgMHgwRjsKLQotCWRvIHsKLQkJZWZ1c2VfT25lQnl0ZVdyaXRlMjNhKHBhZGFwdGVyLCBlZnVzZV9hZGRyLCBwZ19oZWFkZXIpOwotCQllZnVzZV9PbmVCeXRlUmVhZDIzYShwYWRhcHRlciwgZWZ1c2VfYWRkciwgJnRtcF9oZWFkZXIpOwotCQlpZiAodG1wX2hlYWRlciAhPSAweEZGKQotCQkJYnJlYWs7Ci0JCWlmIChyZXBlYXRjbnQrKyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQlEQkdfODcyM0EoIiVzOiBSZXBlYXQgb3ZlciBsaW1pdCBmb3IgcGdfaGVhZGVyISFcbiIsCi0JCQkJICBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9IHdoaWxlICgxKTsKLQotCWlmICh0bXBfaGVhZGVyICE9IHBnX2hlYWRlcikgewotCQlEQkdfODcyM0EoS0VSTl9FUlIKLQkJCSAgIiVzOiBQRyBIZWFkZXIgRmFpbCEhKHBnID0gMHglMDJYIHJlYWQgPSAweCUwMlgpXG4iLAotCQkJICBfX2Z1bmNfXywgcGdfaGVhZGVyLCB0bXBfaGVhZGVyKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qICB0byB3cml0ZSBleHRfaGVhZGVyICovCi0JZWZ1c2VfYWRkcisrOwotCXBnX2hlYWRlciA9ICgocFRhcmdldFBrdC0+b2Zmc2V0ICYgMHg3OCkgPDwgMSkgfCBwVGFyZ2V0UGt0LT53b3JkX2VuOwotCi0JZG8gewotCQllZnVzZV9PbmVCeXRlV3JpdGUyM2EocGFkYXB0ZXIsIGVmdXNlX2FkZHIsIHBnX2hlYWRlcik7Ci0JCWVmdXNlX09uZUJ5dGVSZWFkMjNhKHBhZGFwdGVyLCBlZnVzZV9hZGRyLCAmdG1wX2hlYWRlcik7Ci0JCWlmICh0bXBfaGVhZGVyICE9IDB4RkYpCi0JCQlicmVhazsKLQkJaWYgKHJlcGVhdGNudCsrID4gRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8pIHsKLQkJCURCR184NzIzQSgiJXM6IFJlcGVhdCBvdmVyIGxpbWl0IGZvciBleHRfaGVhZGVyISFcbiIsCi0JCQkJICBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9IHdoaWxlICgxKTsKLQotCWlmICh0bXBfaGVhZGVyICE9IHBnX2hlYWRlcikgewkvKiBvZmZzZXQgUEcgZmFpbCAqLwotCQlEQkdfODcyM0EoS0VSTl9FUlIKLQkJCSAgIiVzOiBQRyBFWFQgSGVhZGVyIEZhaWwhIShwZyA9IDB4JTAyWCByZWFkID0gMHglMDJYKVxuIiwKLQkJCSAgX19mdW5jX18sIHBnX2hlYWRlciwgdG1wX2hlYWRlcik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkqcEFkZHIgPSBlZnVzZV9hZGRyOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB1OAotaGFsX0VmdXNlUGdQYWNrZXRXcml0ZUhlYWRlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBlZnVzZVR5cGUsCi0JCQkgICAgIHUxNiAqcEFkZHIsIHN0cnVjdCBwZ19wa3Rfc3RydWN0ICpwVGFyZ2V0UGt0KQotewotCXU4IGJSZXQgPSBmYWxzZTsKLQotCWlmIChwVGFyZ2V0UGt0LT5vZmZzZXQgPj0gRUZVU0VfTUFYX1NFQ1RJT05fQkFTRSkgewotCQliUmV0ID0gaGFsX0VmdXNlUGdQYWNrZXRXcml0ZTJCeXRlSGVhZGVyKHBhZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJCQkJIHBBZGRyLCBwVGFyZ2V0UGt0KTsKLQl9IGVsc2UgewotCQliUmV0ID0gaGFsX0VmdXNlUGdQYWNrZXRXcml0ZTFCeXRlSGVhZGVyKHBhZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJCQkJIHBBZGRyLCBwVGFyZ2V0UGt0KTsKLQl9Ci0KLQlyZXR1cm4gYlJldDsKLX0KLQotc3RhdGljIHU4Ci1oYWxfRWZ1c2VQZ1BhY2tldFdyaXRlRGF0YShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1OCBlZnVzZVR5cGUsCi0JCQkgICB1MTYgKnBBZGRyLCBzdHJ1Y3QgcGdfcGt0X3N0cnVjdCAqcFRhcmdldFBrdCkKLXsKLQl1MTYgZWZ1c2VfYWRkcjsKLQl1OCBiYWR3b3JkZW47Ci0KLQllZnVzZV9hZGRyID0gKnBBZGRyOwotCWJhZHdvcmRlbiA9Ci0JICAgIEVmdXNlX1dvcmRFbmFibGVEYXRhV3JpdGUyM2EocEFkYXB0ZXIsIGVmdXNlX2FkZHIgKyAxLAotCQkJCSAgICAgIHBUYXJnZXRQa3QtPndvcmRfZW4sIHBUYXJnZXRQa3QtPmRhdGEpOwotCWlmIChiYWR3b3JkZW4gIT0gMHgwRikgewotCQlEQkdfODcyM0EoIiVzOiBGYWlsISFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgczMyCi1IYWxfRWZ1c2VQZ1BhY2tldFdyaXRlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCSAgICAgICB1OCBvZmZzZXQsIHU4IHdvcmRfZW4sIHU4ICpwRGF0YSkKLXsKLQlzdHJ1Y3QgcGdfcGt0X3N0cnVjdCB0YXJnZXRQa3Q7Ci0JdTE2IHN0YXJ0QWRkciA9IDA7Ci0JdTggZWZ1c2VUeXBlID0gRUZVU0VfV0lGSTsKLQotCWlmICghaGFsX0VmdXNlUGdDaGVja0F2YWlsYWJsZUFkZHIocGFkYXB0ZXIsIGVmdXNlVHlwZSkpCi0JCXJldHVybiBmYWxzZTsKLQotCWhhbF9FZnVzZUNvbnN0cnVjdFBHUGt0KG9mZnNldCwgd29yZF9lbiwgcERhdGEsICZ0YXJnZXRQa3QpOwotCi0JaWYgKCFoYWxfRWZ1c2VQYXJ0aWFsV3JpdGVDaGVjayhwYWRhcHRlciwgZWZ1c2VUeXBlLAotCQkJCQkmc3RhcnRBZGRyLCAmdGFyZ2V0UGt0KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKCFoYWxfRWZ1c2VQZ1BhY2tldFdyaXRlSGVhZGVyKHBhZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJCSAgJnN0YXJ0QWRkciwgJnRhcmdldFBrdCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghaGFsX0VmdXNlUGdQYWNrZXRXcml0ZURhdGEocGFkYXB0ZXIsIGVmdXNlVHlwZSwKLQkJCQkJJnN0YXJ0QWRkciwgJnRhcmdldFBrdCkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotSGFsX0VmdXNlUGdQYWNrZXRXcml0ZV9CVChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLAotCQkJICB1OCBvZmZzZXQsIHU4IHdvcmRfZW4sIHU4ICpwRGF0YSkKLXsKLQlzdHJ1Y3QgcGdfcGt0X3N0cnVjdCB0YXJnZXRQa3Q7Ci0JdTE2IHN0YXJ0QWRkciA9IDA7Ci0JdTggZWZ1c2VUeXBlID0gRUZVU0VfQlQ7Ci0KLQlpZiAoIWhhbF9FZnVzZVBnQ2hlY2tBdmFpbGFibGVBZGRyKHBBZGFwdGVyLCBlZnVzZVR5cGUpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQloYWxfRWZ1c2VDb25zdHJ1Y3RQR1BrdChvZmZzZXQsIHdvcmRfZW4sIHBEYXRhLCAmdGFyZ2V0UGt0KTsKLQotCWlmICghaGFsX0VmdXNlUGFydGlhbFdyaXRlQ2hlY2socEFkYXB0ZXIsIGVmdXNlVHlwZSwKLQkJCQkJJnN0YXJ0QWRkciwgJnRhcmdldFBrdCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghaGFsX0VmdXNlUGdQYWNrZXRXcml0ZUhlYWRlcihwQWRhcHRlciwgZWZ1c2VUeXBlLAotCQkJCQkgICZzdGFydEFkZHIsICZ0YXJnZXRQa3QpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWhhbF9FZnVzZVBnUGFja2V0V3JpdGVEYXRhKHBBZGFwdGVyLCBlZnVzZVR5cGUsCi0JCQkJCSZzdGFydEFkZHIsICZ0YXJnZXRQa3QpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCBoYWxfdmVyc2lvbiBSZWFkQ2hpcFZlcnNpb244NzIzQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQordm9pZCBydGw4NzIzYV9yZWFkX2NoaXBfdmVyc2lvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXUzMiB2YWx1ZTMyOwogCXN0cnVjdCBoYWxfdmVyc2lvbiBDaGlwVmVyc2lvbjsKQEAgLTEzOTIsNyArOTA4LDcgQEAKIAogCXBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAotCXZhbHVlMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfU1lTX0NGRyk7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19TWVNfQ0ZHKTsKIAlDaGlwVmVyc2lvbi5JQ1R5cGUgPSBDSElQXzg3MjNBOwogCUNoaXBWZXJzaW9uLkNoaXBUeXBlID0gKCh2YWx1ZTMyICYgUlRMX0lEKSA/IFRFU1RfQ0hJUCA6IE5PUk1BTF9DSElQKTsKIAlDaGlwVmVyc2lvbi5SRlR5cGUgPSBSRl9UWVBFXzFUMVI7CkBAIC0xNDA0LDEzICs5MjAsMTMgQEAKIAlwSGFsRGF0YS0+UmVndWxhdG9yTW9kZSA9ICgodmFsdWUzMiAmIFNQU19TRUwpID8KIAkJCQkgICBSVF9MRE9fUkVHVUxBVE9SIDogUlRfU1dJVENISU5HX1JFR1VMQVRPUik7CiAKLQl2YWx1ZTMyID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX0dQSU9fT1VUU1RTKTsKKwl2YWx1ZTMyID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX0dQSU9fT1VUU1RTKTsKIAkvKiAgUk9NIGNvZGUgdmVyc2lvbi4gKi8KIAlDaGlwVmVyc2lvbi5ST01WZXIgPSAoKHZhbHVlMzIgJiBSRl9STF9JRCkgPj4gMjApOwogCiAJLyogIEZvciBtdWx0aS1mdW5jdGlvbiBjb25zaWRlcmF0aW9uLiBBZGRlZCBieSBSb2dlciwgMjAxMC4xMC4wNi4gKi8KIAlwSGFsRGF0YS0+TXVsdGlGdW5jID0gUlRfTVVMVElfRlVOQ19OT05FOwotCXZhbHVlMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfTVVMVElfRlVOQ19DVFJMKTsKKwl2YWx1ZTMyID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX01VTFRJX0ZVTkNfQ1RSTCk7CiAJcEhhbERhdGEtPk11bHRpRnVuYyB8PQogCQkoKHZhbHVlMzIgJiBXTF9GVU5DX0VOKSA/IFJUX01VTFRJX0ZVTkNfV0lGSSA6IDApOwogCXBIYWxEYXRhLT5NdWx0aUZ1bmMgfD0gKCh2YWx1ZTMyICYgQlRfRlVOQ19FTikgPyBSVF9NVUxUSV9GVU5DX0JUIDogMCk7CkBAIC0xNDMwLDEzICs5NDYsNiBAQAogCQlwSGFsRGF0YS0+cmZfdHlwZSA9IFJGXzFUMVI7CiAKIAlNU0dfODcyM0EoIlJGX1R5cGUgaXMgJXghIVxuIiwgcEhhbERhdGEtPnJmX3R5cGUpOwotCi0JcmV0dXJuIENoaXBWZXJzaW9uOwotfQotCi1zdGF0aWMgdm9pZCBydGw4NzIzYV9yZWFkX2NoaXBfdmVyc2lvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCVJlYWRDaGlwVmVyc2lvbjg3MjNBKHBhZGFwdGVyKTsKIH0KIAogLyogICovCkBAIC0xNDYxLDMzICs5NzAsMzQgQEAKIAogCWFkZHIgPSBSRUdfQkNOX0NUUkw7CiAKLQkqcFJlZ0JjbkN0cmxWYWwgPSBydHdfcmVhZDgocGFkYXB0ZXIsIGFkZHIpOworCSpwUmVnQmNuQ3RybFZhbCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgYWRkcik7CiAJKnBSZWdCY25DdHJsVmFsIHw9IFNldEJpdHM7CiAJKnBSZWdCY25DdHJsVmFsICY9IH5DbGVhckJpdHM7CiAKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBhZGRyLCAqcFJlZ0JjbkN0cmxWYWwpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIGFkZHIsICpwUmVnQmNuQ3RybFZhbCk7CiB9CiAKIHZvaWQgcnRsODcyM2FfSW5pdEJlYWNvblBhcmFtZXRlcnMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKIAotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfQkNOX0NUUkwsIDB4MTAxMCk7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05fQ1RSTCwgMHgxMDEwKTsKIAlwSGFsRGF0YS0+UmVnQmNuQ3RybFZhbCA9IDB4MTAxMDsKIAogCS8qICBUT0RPOiBSZW1vdmUgdGhlc2UgbWFnaWMgbnVtYmVyICovCi0JcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19UQlRUX1BST0hJQklULCAweDY0MDQpOwkvKiAgbXMgKi8KKwlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX1RCVFRfUFJPSElCSVQsIDB4NjQwNCk7CS8qICBtcyAqLwogCS8qICBGaXJtd2FyZSB3aWxsIGNvbnRyb2wgUkVHX0RSVkVSTFlJTlQgd2hlbiBwb3dlciBzYXZpbmcgaXMgZW5hYmxlLCAqLwogCS8qICBzbyBkb24ndCBzZXQgdGhpcyByZWdpc3RlciBvbiBTVEEgbW9kZS4gKi8KIAlpZiAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpID09IGZhbHNlKQotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRFJWRVJMWUlOVCwgRFJJVkVSX0VBUkxZX0lOVF9USU1FKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0RSVkVSTFlJTlQsCisJCQkJIERSSVZFUl9FQVJMWV9JTlRfVElNRSk7CiAJLyogIDJtcyAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19CQ05ETUFUSU0sIEJDTl9ETUFfQVRJTUVfSU5UX1RJTUUpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19CQ05ETUFUSU0sIEJDTl9ETUFfQVRJTUVfSU5UX1RJTUUpOwogCiAJLyogIFN1Z2dlc3RlZCBieSBkZXNpZ25lciB0aW1jaGVuLiBDaGFuZ2UgYmVhY29uIEFJRlMgdG8gdGhlCiAJICAgIGxhcmdlc3QgbnVtYmVyIGJlYWNhdXNlIHRlc3QgY2hpcCBkb2VzIG5vdCBjb250ZW5zaW9uIGJlZm9yZQogCSAgICBzZW5kaW5nIGJlYWNvbi4gYnkgdHlubGkuIDIwMDkuMTEuMDMgKi8KLQlydHdfd3JpdGUxNihwYWRhcHRlciwgUkVHX0JDTlRDRkcsIDB4NjYwRik7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05UQ0ZHLCAweDY2MEYpOwogfQogCiBzdGF0aWMgdm9pZCBSZXN1bWVUeEJlYWNvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQpAQCAtMTUwMSwxMCArMTAxMSwxMSBAQAogCVJUX1RSQUNFKF9tb2R1bGVfaGNpX2hhbF9pbml0X2NfLCBfZHJ2X2luZm9fLCAoIitSZXN1bWVUeEJlYWNvblxuIikpOwogCiAJcEhhbERhdGEtPlJlZ0Z3SHdUeFFDdHJsIHw9IEJJVCg2KTsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCArIDIsIHBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCk7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1RCVFRfUFJPSElCSVQgKyAxLCAweGZmKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCArIDIsCisJCQkgcEhhbERhdGEtPlJlZ0Z3SHdUeFFDdHJsKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVEJUVF9QUk9ISUJJVCArIDEsIDB4ZmYpOwogCXBIYWxEYXRhLT5SZWdSZWc1NDIgfD0gQklUKDApOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19UQlRUX1BST0hJQklUICsgMiwgcEhhbERhdGEtPlJlZ1JlZzU0Mik7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1RCVFRfUFJPSElCSVQgKyAyLCBwSGFsRGF0YS0+UmVnUmVnNTQyKTsKIH0KIAogc3RhdGljIHZvaWQgU3RvcFR4QmVhY29uKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCkBAIC0xNTE4LDEwICsxMDI5LDExIEBACiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfaW5mb18sICgiK1N0b3BUeEJlYWNvblxuIikpOwogCiAJcEhhbERhdGEtPlJlZ0Z3SHdUeFFDdHJsICY9IH5CSVQoNik7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCBwSGFsRGF0YS0+UmVnRndId1R4UUN0cmwpOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHg2NCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLAorCQkJIHBIYWxEYXRhLT5SZWdGd0h3VHhRQ3RybCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1RCVFRfUFJPSElCSVQgKyAxLCAweDY0KTsKIAlwSGFsRGF0YS0+UmVnUmVnNTQyICY9IH5CSVQoMCk7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1RCVFRfUFJPSElCSVQgKyAyLCBwSGFsRGF0YS0+UmVnUmVnNTQyKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVEJUVF9QUk9ISUJJVCArIDIsIHBIYWxEYXRhLT5SZWdSZWc1NDIpOwogCiAJQ2hlY2tGd1JzdmRQYWdlQ29udGVudDIzYShwYWRhcHRlcik7IC8qICAyMDEwLjA2LjIzLiBBZGRlZCBieSB0eW5saS4gKi8KIH0KQEAgLTE1MzEsMTAgKzEwNDMsMTAgQEAKIHsKIAlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCBESVNfVFNGX1VEVCB8IEVOX0JDTl9GVU5DVElPTiB8IERJU19CQ05RX1NVQiwKIAkJICAgICAgMCk7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1JEX0NUUkwgKyAxLCAweDZGKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUkRfQ1RSTCArIDEsIDB4NkYpOwogfQogCi1zdGF0aWMgdm9pZCBydGw4NzIzYV9TZXRCZWFjb25SZWxhdGVkUmVnaXN0ZXJzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCit2b2lkIHJ0bDg3MjNhX1NldEJlYWNvblJlbGF0ZWRSZWdpc3RlcnMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAl1MzIgdmFsdWUzMjsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwpAQCAtMTU1NSwzMiArMTA2NywzMiBAQAogCS8qICAqLwogCS8qICBBVElNIHdpbmRvdyAqLwogCS8qICAqLwotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfQVRJTVdORCwgMik7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19BVElNV05ELCAyKTsKIAogCS8qICAqLwogCS8qICBCZWFjb24gaW50ZXJ2YWwgKGluIHVuaXQgb2YgVFUpLiAqLwogCS8qICAqLwotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfQkNOX0lOVEVSVkFMLCBwbWxtZWluZm8tPmJjbl9pbnRlcnZhbCk7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05fSU5URVJWQUwsIHBtbG1laW5mby0+YmNuX2ludGVydmFsKTsKIAogCXJ0bDg3MjNhX0luaXRCZWFjb25QYXJhbWV0ZXJzKHBhZGFwdGVyKTsKIAotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19TTE9ULCAweDA5KTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU0xPVCwgMHgwOSk7CiAKIAkvKiAgKi8KIAkvKiAgUmVzZXQgVFNGIFRpbWVyIHRvIHplcm8sIGFkZGVkIGJ5IFJvZ2VyLiAyMDA4LjA2LjI0ICovCiAJLyogICovCi0JdmFsdWUzMiA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIFJFR19UQ1IpOworCXZhbHVlMzIgPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBSRUdfVENSKTsKIAl2YWx1ZTMyICY9IH5UU0ZSU1Q7Ci0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19UQ1IsIHZhbHVlMzIpOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBSRUdfVENSLCB2YWx1ZTMyKTsKIAogCXZhbHVlMzIgfD0gVFNGUlNUOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfVENSLCB2YWx1ZTMyKTsKKwlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX1RDUiwgdmFsdWUzMik7CiAKIAkvKiAgTk9URTogRml4IHRlc3QgY2hpcCdzIGJ1ZyAoYWJvdXQgY29udGVudGlvbiB3aW5kb3dzJ3MgcmFuZG9tbmVzcykgKi8KIAlpZiAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBXSUZJX0FESE9DX1NUQVRFIHwKIAkJCSAgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUgfCBXSUZJX0FQX1NUQVRFKSA9PSB0cnVlKSB7Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19SWFRTRl9PRkZTRVRfQ0NLLCAweDUwKTsKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1JYVFNGX09GRlNFVF9PRkRNLCAweDUwKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1JYVFNGX09GRlNFVF9DQ0ssIDB4NTApOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlhUU0ZfT0ZGU0VUX09GRE0sIDB4NTApOwogCX0KIAogCV9CZWFjb25GdW5jdGlvbkVuYWJsZShwYWRhcHRlciwgdHJ1ZSwgdHJ1ZSk7CkBAIC0xNTg5LDIxICsxMTAxLDkgQEAKIAlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCBESVNfQkNOUV9TVUIsIDApOwogfQogCi1zdGF0aWMgdm9pZCBydGw4NzIzYV9HZXRIYWxPRE1WYXIoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLAotCQkJCSAgZW51bSBoYWxfb2RtX3ZhcmlhYmxlIGVWYXJpYWJsZSwKLQkJCQkgIHZvaWQgKnBWYWx1ZTEsIGJvb2wgYlNldCkKLXsKLQlzd2l0Y2ggKGVWYXJpYWJsZSkgewotCWNhc2UgSEFMX09ETV9TVEFfSU5GTzoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBydGw4NzIzYV9TZXRIYWxPRE1WYXIoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLAotCQkJCSAgZW51bSBoYWxfb2RtX3ZhcmlhYmxlIGVWYXJpYWJsZSwKLQkJCQkgIHZvaWQgKnBWYWx1ZTEsIGJvb2wgYlNldCkKK3ZvaWQgcnRsODcyM2FfU2V0SGFsT0RNVmFyKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwKKwkJCSAgIGVudW0gaGFsX29kbV92YXJpYWJsZSBlVmFyaWFibGUsCisJCQkgICB2b2lkICpwVmFsdWUxLCBib29sIGJTZXQpCiB7CiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKIAlzdHJ1Y3QgZG1fb2RtX3QgKnBvZG1wcml2ID0gJnBIYWxEYXRhLT5vZG1wcml2OwpAQCAtMTYzNiwzMiArMTEzNiwzMyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaGFsX25vdGNoX2ZpbHRlcl84NzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKQordm9pZCBydGw4NzIzYV9ub3RjaF9maWx0ZXIoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBib29sIGVuYWJsZSkKIHsKIAlpZiAoZW5hYmxlKSB7CiAJCURCR184NzIzQSgiRW5hYmxlIG5vdGNoIGZpbHRlclxuIik7Ci0JCXJ0d193cml0ZTgoYWRhcHRlciwgck9GRE0wX1J4RFNQICsgMSwKLQkJCSAgIHJ0d19yZWFkOChhZGFwdGVyLCByT0ZETTBfUnhEU1AgKyAxKSB8IEJJVDEpOworCQlydGw4NzIzYXVfd3JpdGU4KGFkYXB0ZXIsIHJPRkRNMF9SeERTUCArIDEsCisJCQkJIHJ0bDg3MjNhdV9yZWFkOChhZGFwdGVyLCByT0ZETTBfUnhEU1AgKyAxKSB8CisJCQkJIEJJVCgxKSk7CiAJfSBlbHNlIHsKIAkJREJHXzg3MjNBKCJEaXNhYmxlIG5vdGNoIGZpbHRlclxuIik7Ci0JCXJ0d193cml0ZTgoYWRhcHRlciwgck9GRE0wX1J4RFNQICsgMSwKLQkJCSAgIHJ0d19yZWFkOChhZGFwdGVyLCByT0ZETTBfUnhEU1AgKyAxKSAmIH5CSVQxKTsKKwkJcnRsODcyM2F1X3dyaXRlOChhZGFwdGVyLCByT0ZETTBfUnhEU1AgKyAxLAorCQkJICAgcnRsODcyM2F1X3JlYWQ4KGFkYXB0ZXIsIHJPRkRNMF9SeERTUCArIDEpICYKKwkJCQkgfkJJVCgxKSk7CiAJfQogfQogCi1zMzIgYzJoX2lkX2ZpbHRlcl9jY3hfODcyM2EodTggaWQpCitib29sIGMyaF9pZF9maWx0ZXJfY2N4Xzg3MjNhKHU4IGlkKQogewotCXMzMiByZXQgPSBmYWxzZTsKKwlib29sIHJldCA9IGZhbHNlOwogCWlmIChpZCA9PSBDMkhfQ0NYX1RYX1JQVCkKIAkJcmV0ID0gdHJ1ZTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzMzIgYzJoX2hhbmRsZXJfODcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IGMyaF9ldnRfaGRyICpjMmhfZXZ0KQoraW50IGMyaF9oYW5kbGVyXzg3MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBjMmhfZXZ0X2hkciAqYzJoX2V2dCkKIHsKLQlzMzIgcmV0ID0gX1NVQ0NFU1M7CisJaW50IHJldCA9IF9TVUNDRVNTOwogCXU4IGkgPSAwOwogCiAJaWYgKGMyaF9ldnQgPT0gTlVMTCkgewpAQCAtMTcwMSwxMiArMTIwMiwxMSBAQAogCQkJICBjMmhfZXZ0LT5wYXlsb2FkWzNdLCBjMmhfZXZ0LT5wYXlsb2FkWzRdKSk7CiAJCWJyZWFrOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCiAJY2FzZSBDMkhfQlRfSU5GTzoKIAkJREJHXzg3MjNBKCIlcyAsICBHb3QgIEMySF9CVF9JTkZPIFxuIiwgX19mdW5jX18pOwotCQlCVF9Gd0MyaEJ0SW5mbyhwYWRhcHRlciwgYzJoX2V2dC0+cGF5bG9hZCwgYzJoX2V2dC0+cGxlbik7CisJCXJ0bDg3MjNhX2Z3X2MyaF9CVF9pbmZvKHBhZGFwdGVyLAorCQkJCQljMmhfZXZ0LT5wYXlsb2FkLCBjMmhfZXZ0LT5wbGVuKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAogCWRlZmF1bHQ6CiAJCXJldCA9IF9GQUlMOwpAQCAtMTcxNyw5NyArMTIxNywzNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgcnRsODcyM2Ffc2V0X2hhbF9vcHMoc3RydWN0IGhhbF9vcHMgKnBIYWxGdW5jKQotewotCXBIYWxGdW5jLT5mcmVlX2hhbF9kYXRhID0gJnJ0bDg3MjNhX2ZyZWVfaGFsX2RhdGE7Ci0KLQlwSGFsRnVuYy0+ZG1faW5pdCA9ICZydGw4NzIzYV9pbml0X2RtX3ByaXY7Ci0JcEhhbEZ1bmMtPmRtX2RlaW5pdCA9ICZydGw4NzIzYV9kZWluaXRfZG1fcHJpdjsKLQotCXBIYWxGdW5jLT5yZWFkX2NoaXBfdmVyc2lvbiA9ICZydGw4NzIzYV9yZWFkX2NoaXBfdmVyc2lvbjsKLQotCXBIYWxGdW5jLT5zZXRfYndtb2RlX2hhbmRsZXIgPSAmUEhZX1NldEJXTW9kZTIzYTg3MjNBOwotCXBIYWxGdW5jLT5zZXRfY2hhbm5lbF9oYW5kbGVyID0gJlBIWV9Td0Nobmw4NzIzQTsKLQotCXBIYWxGdW5jLT5oYWxfZG1fd2F0Y2hkb2cgPSAmcnRsODcyM2FfSGFsRG1XYXRjaERvZzsKLQotCXBIYWxGdW5jLT5TZXRCZWFjb25SZWxhdGVkUmVnaXN0ZXJzSGFuZGxlciA9Ci0JCSZydGw4NzIzYV9TZXRCZWFjb25SZWxhdGVkUmVnaXN0ZXJzOwotCi0JcEhhbEZ1bmMtPkFkZF9SYXRlQVRpZCA9ICZydGw4NzIzYV9hZGRfcmF0ZWF0aWQ7Ci0JcEhhbEZ1bmMtPnJ1bl90aHJlYWQgPSAmcnRsODcyM2Ffc3RhcnRfdGhyZWFkOwotCXBIYWxGdW5jLT5jYW5jZWxfdGhyZWFkID0gJnJ0bDg3MjNhX3N0b3BfdGhyZWFkOwotCi0JcEhhbEZ1bmMtPnJlYWRfYmJyZWcgPSAmUEhZX1F1ZXJ5QkJSZWc7Ci0JcEhhbEZ1bmMtPndyaXRlX2JicmVnID0gJlBIWV9TZXRCQlJlZzsKLQlwSGFsRnVuYy0+cmVhZF9yZnJlZyA9ICZQSFlfUXVlcnlSRlJlZzsKLQlwSGFsRnVuYy0+d3JpdGVfcmZyZWcgPSAmUEhZX1NldFJGUmVnOwotCi0JLyogIEVmdXNlIHJlbGF0ZWQgZnVuY3Rpb24gKi8KLQlwSGFsRnVuYy0+RWZ1c2VQb3dlclN3aXRjaCA9ICZIYWxfRWZ1c2VQb3dlclN3aXRjaDsKLQlwSGFsRnVuYy0+UmVhZEVGdXNlID0gJkhhbF9SZWFkRUZ1c2U7Ci0JcEhhbEZ1bmMtPkVGVVNFR2V0RWZ1c2VEZWZpbml0aW9uID0gJkhhbF9HZXRFZnVzZURlZmluaXRpb247Ci0JcEhhbEZ1bmMtPkVmdXNlR2V0Q3VycmVudFNpemUgPSAmSGFsX0VmdXNlR2V0Q3VycmVudFNpemU7Ci0JcEhhbEZ1bmMtPkVmdXNlX1BnUGFja2V0UmVhZDIzYSA9ICZIYWxfRWZ1c2VQZ1BhY2tldFJlYWQ7Ci0JcEhhbEZ1bmMtPkVmdXNlX1BnUGFja2V0V3JpdGUyM2EgPSAmSGFsX0VmdXNlUGdQYWNrZXRXcml0ZTsKLQlwSGFsRnVuYy0+RWZ1c2VfV29yZEVuYWJsZURhdGFXcml0ZTIzYSA9ICZIYWxfRWZ1c2VXb3JkRW5hYmxlRGF0YVdyaXRlOwotCXBIYWxGdW5jLT5FZnVzZV9QZ1BhY2tldFdyaXRlMjNhX0JUID0gJkhhbF9FZnVzZVBnUGFja2V0V3JpdGVfQlQ7Ci0KLQlwSGFsRnVuYy0+c3Jlc2V0X2luaXRfdmFsdWUyM2EgPSAmc3Jlc2V0X2luaXRfdmFsdWUyM2E7Ci0JcEhhbEZ1bmMtPnNyZXNldF9yZXNldF92YWx1ZTIzYSA9ICZzcmVzZXRfcmVzZXRfdmFsdWUyM2E7Ci0JcEhhbEZ1bmMtPnNpbGVudHJlc2V0ID0gJnNyZXNldF9yZXNldDsKLQlwSGFsRnVuYy0+c3Jlc2V0X3htaXRfc3RhdHVzX2NoZWNrID0gJnJ0bDg3MjNhX3NyZXNldF94bWl0X3N0YXR1c19jaGVjazsKLQlwSGFsRnVuYy0+c3Jlc2V0X2xpbmtlZF9zdGF0dXNfY2hlY2sgPQotCQkmcnRsODcyM2Ffc3Jlc2V0X2xpbmtlZF9zdGF0dXNfY2hlY2s7Ci0JcEhhbEZ1bmMtPnNyZXNldF9nZXRfd2lmaV9zdGF0dXMyM2EgPSAmc3Jlc2V0X2dldF93aWZpX3N0YXR1czIzYTsKLQlwSGFsRnVuYy0+c3Jlc2V0X2lucHJvZ3Jlc3MgPSAmc3Jlc2V0X2lucHJvZ3Jlc3M7Ci0JcEhhbEZ1bmMtPkdldEhhbE9ETVZhckhhbmRsZXIgPSAmcnRsODcyM2FfR2V0SGFsT0RNVmFyOwotCXBIYWxGdW5jLT5TZXRIYWxPRE1WYXJIYW5kbGVyID0gJnJ0bDg3MjNhX1NldEhhbE9ETVZhcjsKLQotCXBIYWxGdW5jLT5oYWxfbm90Y2hfZmlsdGVyID0gJmhhbF9ub3RjaF9maWx0ZXJfODcyM2E7Ci0KLQlwSGFsRnVuYy0+YzJoX2hhbmRsZXIgPSBjMmhfaGFuZGxlcl84NzIzYTsKLQlwSGFsRnVuYy0+YzJoX2lkX2ZpbHRlcl9jY3ggPSBjMmhfaWRfZmlsdGVyX2NjeF84NzIzYTsKLX0KLQogdm9pZCBydGw4NzIzYV9Jbml0QW50ZW5uYV9TZWxlY3Rpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhOwogCXU4IHZhbDsKIAotCXBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKLQotCXZhbCA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX0xFRENGRzIpOworCXZhbCA9IHJ0bDg3MjNhdV9yZWFkOChwYWRhcHRlciwgUkVHX0xFRENGRzIpOwogCS8qICBMZXQgODA1MSB0YWtlIGNvbnRyb2wgYW50ZW5uYSBzZXR0dGluZyAqLwogCXZhbCB8PSBCSVQoNyk7CQkvKiAgRFBEVF9TRUxfRU4sIDB4NENbMjNdICovCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzIsIHZhbCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzIsIHZhbCk7CiB9CiAKIHZvaWQgcnRsODcyM2FfQ2hlY2tBbnRlbm5hX1NlbGVjdGlvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGE7CiAJdTggdmFsOwogCi0JcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwotCi0JdmFsID0gcnR3X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMik7CisJdmFsID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMik7CiAJLyogIExldCA4MDUxIHRha2UgY29udHJvbCBhbnRlbm5hIHNldHR0aW5nICovCiAJaWYgKCEodmFsICYgQklUKDcpKSkgewogCQl2YWwgfD0gQklUKDcpOwkvKiAgRFBEVF9TRUxfRU4sIDB4NENbMjNdICovCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcyLCB2YWwpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgdmFsKTsKIAl9CiB9CiAKIHZvaWQgcnRsODcyM2FfRGVpbml0QW50ZW5uYV9TZWxlY3Rpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhOwogCXU4IHZhbDsKIAotCXBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKLQl2YWwgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19MRURDRkcyKTsKKwl2YWwgPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19MRURDRkcyKTsKIAkvKiAgTGV0IDgwNTEgdGFrZSBjb250cm9sIGFudGVubmEgc2V0dHRpbmcgKi8KIAl2YWwgJj0gfkJJVCg3KTsJCS8qICBEUERUX1NFTF9FTiwgY2xlYXIgMHg0Q1syM10gKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgdmFsKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgdmFsKTsKIH0KIAogdm9pZCBydGw4NzIzYV9pbml0X2RlZmF1bHRfdmFsdWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKQEAgLTE4NDcsNyArMTI4Niw3IEBACiAJdTggc2l6ZSA9IDA7CiAJdTMyIGNyOwogCi0JY3IgPSBydHdfcmVhZDE2KHBhZGFwdGVyLCBSRUdfOTM0NkNSKTsKKwljciA9IHJ0bDg3MjNhdV9yZWFkMTYocGFkYXB0ZXIsIFJFR185MzQ2Q1IpOwogCS8qICA2OiBFRVBST00gdXNlZCBpcyA5M0M0NiwgNDogYm9vdCBmcm9tIEUtRnVzZS4gKi8KIAlzaXplID0gKGNyICYgQk9PVF9GUk9NX0VFUFJPTSkgPyA2IDogNDsKIApAQCAtMTg2MSwxOSArMTMwMCwxOSBAQAogLyogIExMVCBSL1cvSW5pdCBmdW5jdGlvbiAqLwogLyogICovCiAvKiAgKi8KLXN0YXRpYyBzMzIgX0xMVFdyaXRlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBhZGRyZXNzLCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgX0xMVFdyaXRlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBhZGRyZXNzLCB1MzIgZGF0YSkKIHsKLQlzMzIgc3RhdHVzID0gX1NVQ0NFU1M7CisJaW50IHN0YXR1cyA9IF9TVUNDRVNTOwogCXMzMiBjb3VudCA9IDA7CiAJdTMyIHZhbHVlID0gX0xMVF9JTklUX0FERFIoYWRkcmVzcykgfCBfTExUX0lOSVRfREFUQShkYXRhKSB8CiAJCSAgICBfTExUX09QKF9MTFRfV1JJVEVfQUNDRVNTKTsKIAl1MTYgTExUUmVnID0gUkVHX0xMVF9JTklUOwogCi0JcnR3X3dyaXRlMzIocGFkYXB0ZXIsIExMVFJlZywgdmFsdWUpOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBMTFRSZWcsIHZhbHVlKTsKIAogCS8qIHBvbGxpbmcgKi8KIAlkbyB7Ci0JCXZhbHVlID0gcnR3X3JlYWQzMihwYWRhcHRlciwgTExUUmVnKTsKKwkJdmFsdWUgPSBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBMTFRSZWcpOwogCQlpZiAoX0xMVF9OT19BQ1RJVkUgPT0gX0xMVF9PUF9WQUxVRSh2YWx1ZSkpIHsKIAkJCWJyZWFrOwogCQl9CkBAIC0xODkwLDIzICsxMzI5LDIzIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotczMyIEluaXRMTFRUYWJsZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYm91bmRhcnkpCitpbnQgSW5pdExMVFRhYmxlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBib3VuZGFyeSkKIHsKLQlzMzIgc3RhdHVzID0gX1NVQ0NFU1M7CisJaW50IHN0YXR1cyA9IF9TVUNDRVNTOwogCXUzMiBpOwogCXUzMiB0eHBrdGJ1Zl9ibmR5ID0gYm91bmRhcnk7CiAJdTMyIExhc3RfRW50cnlfT2ZfVHhQa3RCdWYgPSBMQVNUX0VOVFJZX09GX1RYX1BLVF9CVUZGRVI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKHR4cGt0YnVmX2JuZHkgLSAxKTsgaSsrKSB7CiAJCXN0YXR1cyA9IF9MTFRXcml0ZShwYWRhcHRlciwgaSwgaSArIDEpOwotCQlpZiAoX1NVQ0NFU1MgIT0gc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgIT0gX1NVQ0NFU1MpIHsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9CiAKIAkvKiAgZW5kIG9mIGxpc3QgKi8KIAlzdGF0dXMgPSBfTExUV3JpdGUocGFkYXB0ZXIsICh0eHBrdGJ1Zl9ibmR5IC0gMSksIDB4RkYpOwotCWlmIChfU1VDQ0VTUyAhPSBzdGF0dXMpIHsKKwlpZiAoc3RhdHVzICE9IF9TVUNDRVNTKSB7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0xOTIzLDcgKzEzNjIsNyBAQAogCiAJLyogIExldCBsYXN0IGVudHJ5IHBvaW50IHRvIHRoZSBzdGFydCBlbnRyeSBvZiByaW5nIGJ1ZmZlciAqLwogCXN0YXR1cyA9IF9MTFRXcml0ZShwYWRhcHRlciwgTGFzdF9FbnRyeV9PZl9UeFBrdEJ1ZiwgdHhwa3RidWZfYm5keSk7Ci0JaWYgKF9TVUNDRVNTICE9IHN0YXR1cykgeworCWlmIChzdGF0dXMgIT0gX1NVQ0NFU1MpIHsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTE5NDMsMTEgKzEzODIsMTEgQEAKIAl1MzIgdTRiVG1wOwogCiAJLyogMS4gRGlzYWJsZSBHUElPWzc6MF0gKi8KLQlydHdfd3JpdGUxNihwYWRhcHRlciwgUkVHX0dQSU9fUElOX0NUUkwgKyAyLCAweDAwMDApOwotCXZhbHVlMzIgPSBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfR1BJT19QSU5fQ1RSTCkgJiAweEZGRkYwMEZGOworCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfR1BJT19QSU5fQ1RSTCArIDIsIDB4MDAwMCk7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19HUElPX1BJTl9DVFJMKSAmIDB4RkZGRjAwRkY7CiAJdTRiVG1wID0gdmFsdWUzMiAmIDB4MDAwMDAwRkY7CiAJdmFsdWUzMiB8PSAoKHU0YlRtcCA8PCA4KSB8IDB4MDBGRjAwMDApOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfR1BJT19QSU5fQ1RSTCwgdmFsdWUzMik7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19HUElPX1BJTl9DVFJMLCB2YWx1ZTMyKTsKIAogCS8qICAqLwogCS8qICA8Um9nZXJfTm90ZXM+IEZvciBSVEw4NzIzdSBtdWx0aS1mdW5jdGlvbiBjb25maWd1cmF0aW9uIHdoaWNoCkBAIC0xOTU4LDE1ICsxMzk3LDE1IEBACiAJLyogMi4gRGlzYWJsZSBHUElPWzhdIGFuZCBHUElPWzEyXSAqLwogCiAJLyogIENvbmZpZ3VyZSBhbGwgcGlucyBhcyBpbnB1dCBtb2RlLiAqLwotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfR1BJT19JT19TRUxfMiwgMHgwMDAwKTsKLQl2YWx1ZTMyID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX0dQSU9fUElOX0NUUkxfMikgJiAweEZGRkYwMDFGOworCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfR1BJT19JT19TRUxfMiwgMHgwMDAwKTsKKwl2YWx1ZTMyID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX0dQSU9fUElOX0NUUkxfMikgJiAweEZGRkYwMDFGOwogCXU0YlRtcCA9IHZhbHVlMzIgJiAweDAwMDAwMDFGOwogCS8qICBTZXQgcGluIDgsIDEwLCAxMSBhbmQgcGluIDEyIHRvIG91dHB1dCBtb2RlLiAqLwogCXZhbHVlMzIgfD0gKCh1NGJUbXAgPDwgOCkgfCAweDAwMUQwMDAwKTsKLQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX0dQSU9fUElOX0NUUkxfMiwgdmFsdWUzMik7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19HUElPX1BJTl9DVFJMXzIsIHZhbHVlMzIpOwogCiAJLyogMy4gRGlzYWJsZSBMRUQwICYgMSAqLwotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMCwgMHg4MDgwKTsKKwlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX0xFRENGRzAsIDB4ODA4MCk7CiB9CQkJCS8qIGVuZCBvZiBfRGlzYWJsZUdQSU8oKSAqLwogCiBzdGF0aWMgdm9pZCBfRGlzYWJsZVJGQUZFQW5kUmVzZXRCQjgxOTJDKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCkBAIC0xOTgwLDIxICsxNDE5LDIxIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdTggZVJGUGF0aCA9IDAsIHZhbHVlOCA9IDA7CiAKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfVFhQQVVTRSwgMHhGRik7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1RYUEFVU0UsIDB4RkYpOwogCiAJUEhZX1NldFJGUmVnKHBhZGFwdGVyLCAoZW51bSBSRl9SQURJT19QQVRIKSBlUkZQYXRoLCAweDAsIGJNYXNrQnl0ZTAsIDB4MCk7CiAKIAl2YWx1ZTggfD0gQVBTRE9GRjsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfQVBTRF9DVFJMLCB2YWx1ZTgpOwkvKiAweDQwICovCisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0FQU0RfQ1RSTCwgdmFsdWU4KTsJLyogMHg0MCAqLwogCiAJLyogIFNldCBCQiByZXNldCBhdCBmaXJzdCAqLwogCXZhbHVlOCA9IDA7CiAJdmFsdWU4IHw9IChGRU5fVVNCRCB8IEZFTl9VU0JBIHwgRkVOX0JCX0dMQl9SU1RuKTsKLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sIHZhbHVlOCk7CS8qIDB4MTYgKi8KKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sIHZhbHVlOCk7CS8qIDB4MTYgKi8KIAogCS8qICBTZXQgZ2xvYmFsIHJlc2V0LiAqLwogCXZhbHVlOCAmPSB+RkVOX0JCX0dMQl9SU1RuOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwgdmFsdWU4KTsJLyogMHgxNCAqLworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwgdmFsdWU4KTsJLyogMHgxNCAqLwogCiAJLyogIDIwMTAvMDgvMTIgTUggV2UgbmVlZCB0byBzZXQgQkIvR0xCQUwgcmVzZXQgdG8gc2F2ZSBwb3dlcgogCSAgICBmb3IgU1MgbW9kZS4gKi8KQEAgLTIwMjEsMTkgKzE0NjAsMjIgQEAKIAkJCQkJCSg4MDUxIGVuYWJsZSkKIAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCXUxNiB2YWx1MTYgPSAwOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTUNVRldETCwgMCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMLCAwKTsKIAotCQl2YWx1MTYgPSBydHdfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pOworCQl2YWx1MTYgPSBydGw4NzIzYXVfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pOwogCQkvKiByZXNldCBNQ1UgLCA4MDUxICovCi0JCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sICh2YWx1MTYgJiAofkZFTl9DUFVFTikpKTsKKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwKKwkJCQkgIHZhbHUxNiAmICh+RkVOX0NQVUVOKSk7CiAKLQkJdmFsdTE2ID0gcnR3X3JlYWQxNihwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOKSAmIDB4MEZGRjsKLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwKLQkJCSAgICAodmFsdTE2IHwgKEZFTl9IV1BETiB8IEZFTl9FTERSKSkpOwkvKiByZXNldCBNQUMgKi8KKwkJdmFsdTE2ID0gcnRsODcyM2F1X3JlYWQxNihwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOKSAmIDB4MEZGRjsKKwkJLyogcmVzZXQgTUFDICovCisJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sCisJCQkJICB2YWx1MTYgfCAoRkVOX0hXUEROIHwgRkVOX0VMRFIpKTsKIAotCQl2YWx1MTYgPSBydHdfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pOworCQl2YWx1MTYgPSBydGw4NzIzYXVfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pOwogCQkvKiBlbmFibGUgTUNVICwgODA1MSAqLwotCQlydHdfd3JpdGUxNihwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOLCAodmFsdTE2IHwgRkVOX0NQVUVOKSk7CisJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sCisJCQkJICB2YWx1MTYgfCBGRU5fQ1BVRU4pOwogCX0gZWxzZSB7CiAJCXU4IHJldHJ5X2NudHMgPSAwOwogCkBAIC0yMDQxLDQxICsxNDgzLDQzIEBACiAJCSAgICBhcmUgdHJ5aW5nIHRvIGVudGVyIElQUy9IVyZTVyByYWRpbyBvZmYuIEZvcgogCQkgICAgUzMvUzQvUzUvRGlzYWJsZSwgd2UgY2FuIHN0b3AgODA1MSBiZWNhdXNlICovCiAJCS8qICB3ZSB3aWxsIGluaXQgRlcgd2hlbiBwb3dlciBvbiBhZ2Fpbi4gKi8KLQkJLyogaWYgKCFwRGV2aWNlLT5SZWdVc2JTUykgKi8KIAkJLyogIElmIHdlIHdhbnQgdG8gU1MgbW9kZSwgd2UgY2FuIG5vdCByZXNldCA4MDUxLiAqLwotCQlpZiAocnR3X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTUNVRldETCkgJiBCSVQxKSB7CisJCWlmIChydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMKSAmIEJJVCgxKSkgewogCQkJLyogSUYgZncgaW4gUkFNIGNvZGUsIGRvIHJlc2V0ICovCiAJCQlpZiAocGFkYXB0ZXItPmJGV1JlYWR5KSB7CiAJCQkJLyogIDIwMTAvMDgvMjUgTUggQWNjb3JkaWduIHRvIFJEIGFsZnJlZCdzCiAJCQkJICAgIHN1Z2dlc3Rpb24sIHdlIG5lZWQgdG8gZGlzYWJsZSBvdGhlciAqLwogCQkJCS8qICBIUkNWIElOVCB0byBpbmZsdWVuY2UgODA1MSByZXNldC4gKi8KLQkJCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRldJTVIsIDB4MjApOworCQkJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19GV0lNUiwgMHgyMCk7CiAJCQkJLyogIDIwMTEvMDIvMTUgTUggQWNjb3JkaW5nIHRvIEFsZXgncwogCQkJCSAgICBzdWdnZXN0aW9uLCBjbG9zZSBtYXNrIHRvIHByZXZlbnQKIAkJCQkgICAgaW5jb3JyZWN0IEZXIHdyaXRlIG9wZXJhdGlvbi4gKi8KLQkJCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRlRJTVIsIDB4MDApOwotCQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19GU0lNUiwgMHgwMCk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0ZUSU1SLCAweDAwKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRlNJTVIsIDB4MDApOwogCiAJCQkJLyogODA1MSByZXNldCBieSBzZWxmICovCi0JCQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0hNRVRGUiArIDMsIDB4MjApOworCQkJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19ITUVURlIgKyAzLAorCQkJCQkJIDB4MjApOwogCiAJCQkJd2hpbGUgKChyZXRyeV9jbnRzKysgPCAxMDApICYmCiAJCQkJICAgICAgIChGRU5fQ1BVRU4gJgotCQkJCQlydHdfcmVhZDE2KHBhZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4pKSkgeworCQkJCQlydGw4NzIzYXVfcmVhZDE2KHBhZGFwdGVyLAorCQkJCQkJCSBSRUdfU1lTX0ZVTkNfRU4pKSkgewogCQkJCQl1ZGVsYXkoNTApOwkvKiB1cyAqLwogCQkJCX0KIAogCQkJCWlmIChyZXRyeV9jbnRzID49IDEwMCkgewogCQkJCQkvKiBSZXNldCBNQUMgYW5kIEVuYWJsZSA4MDUxICovCi0JCQkJCXJ0d193cml0ZTgocGFkYXB0ZXIsCi0JCQkJCQkgICBSRUdfU1lTX0ZVTkNfRU4gKyAxLCAweDUwKTsKKwkJCQkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwKKwkJCQkJCQkgUkVHX1NZU19GVU5DX0VOICsgMSwKKwkJCQkJCQkgMHg1MCk7CiAJCQkJCW1kZWxheSgxMCk7CiAJCQkJfQogCQkJfQogCQl9CiAJCS8qIFJlc2V0IE1BQyBhbmQgRW5hYmxlIDgwNTEgKi8KLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOICsgMSwgMHg1NCk7Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMLCAwKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1NZU19GVU5DX0VOICsgMSwgMHg1NCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19NQ1VGV0RMLCAwKTsKIAl9CiAKIAlpZiAoYldpdGhvdXRIV1NNKSB7CkBAIC0yMDg3LDEzICsxNTMxLDEzIEBACiAJai4JU1lTX0lTT19DVFJMIDB4MDBbNzowXSA9IDB4RjkJCWlzb2xhdGVkIGRpZ2l0YWwgdG8gUE9OCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCQkvKiBtb2RpZnkgdG8gMHg3MEEzIGJ5IFNjb3R0LiAqLwotCQlydHdfd3JpdGUxNihwYWRhcHRlciwgUkVHX1NZU19DTEtSLCAweDcwQTMpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfQUZFX1BMTF9DVFJMLCAweDgwKTsKLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19BRkVfWFRBTF9DVFJMLCAweDg4MEYpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU1lTX0lTT19DVFJMLCAweEY5KTsKKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19TWVNfQ0xLUiwgMHg3MEEzKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0FGRV9QTExfQ1RSTCwgMHg4MCk7CisJCXJ0bDg3MjNhdV93cml0ZTE2KHBhZGFwdGVyLCBSRUdfQUZFX1hUQUxfQ1RSTCwgMHg4ODBGKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1NZU19JU09fQ1RSTCwgMHhGOSk7CiAJfSBlbHNlIHsKIAkJLyogIERpc2FibGUgYWxsIFJGL0JCIHBvd2VyICovCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19SRl9DVFJMLCAweDAwKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1JGX0NUUkwsIDB4MDApOwogCX0KIH0KIApAQCAtMjExMSw5ICsxNTU1LDkgQEAKIG0uCVNZU19JU09fQ1RSTCAweDAxWzc6MF0gPSAweDgzCQlpc29sYXRlZCBFTERSIHRvIFBPTgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIG1vZGlmeSB0byAweDcwYTMgYnkgU2NvdHQuICovCi0JcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19TWVNfQ0xLUiwgMHg3MGEzKTsKKwlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX1NZU19DTEtSLCAweDcwYTMpOwogCS8qIG1vZGlmeSB0byAweDgyIGJ5IFNjb3R0LiAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19TWVNfSVNPX0NUUkwgKyAxLCAweDgyKTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU1lTX0lTT19DVFJMICsgMSwgMHg4Mik7CiB9CiAKIHN0YXRpYyB2b2lkIF9EaXNhYmxlQW5hbG9nKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGJvb2wgYldpdGhvdXRIV1NNKQpAQCAtMjEzMCwxMiArMTU3NCwxMiBAQAogCQljbG9jayBhdXRvbWF0aWNhbGx5CiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRE9BMTVfQ1RSTCwgMHgwNCk7Ci0JCS8qIHJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRE9WMTJEX0NUUkwsIDB4NTQpOyAqLworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTERPQTE1X0NUUkwsIDB4MDQpOworCQkvKiBydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTERPVjEyRF9DVFJMLCAweDU0KTsgKi8KIAotCQl2YWx1ZTggPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19MRE9WMTJEX0NUUkwpOworCQl2YWx1ZTggPSBydGw4NzIzYXVfcmVhZDgocGFkYXB0ZXIsIFJFR19MRE9WMTJEX0NUUkwpOwogCQl2YWx1ZTggJj0gKH5MRFYxMl9FTik7Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRE9WMTJEX0NUUkwsIHZhbHVlOCk7CisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19MRE9WMTJEX0NUUkwsIHZhbHVlOCk7CiAvKgkJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwKIAkJKCIgUkVHX0xET1YxMkRfQ1RSTCBSZWcweDIxOjB4JTAyeC5cbiIsIHZhbHVlOCkpOyAqLwogCX0KQEAgLTIxNDYsOSArMTU5MCw5IEBACiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCXZhbHVlOCA9IDB4MjM7CiAJaWYgKElTXzgxeHhDX1ZFTkRPUl9VTUNfQl9DVVQocEhhbERhdGEtPlZlcnNpb25JRCkpCi0JCXZhbHVlOCB8PSBCSVQzOworCQl2YWx1ZTggfD0gQklUKDMpOwogCi0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX1NQUzBfQ1RSTCwgdmFsdWU4KTsKKwlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfU1BTMF9DVFJMLCB2YWx1ZTgpOwogCiAJaWYgKGJXaXRob3V0SFdTTSkgewogCQkvKiB2YWx1ZTE2IHw9IChBUERNX0hPU1QgfCBGU01fSFNVUyB8L1BGTV9BTEROKTsgKi8KQEAgLTIxNjEsMTMgKzE2MDUsMTMgQEAKIAkJdmFsdWUxNiB8PSAoQVBETV9IT1NUIHwgQUZTTV9IU1VTIHwgUEZNX0FMRE4pOwogCX0KIAotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfQVBTX0ZTTUNPLCB2YWx1ZTE2KTsJLyogMHg0ODAyICovCisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19BUFNfRlNNQ08sIHZhbHVlMTYpOwkvKiAweDQ4MDIgKi8KIAotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19SU1ZfQ1RSTCwgMHgwZSk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1JTVl9DVFJMLCAweDBlKTsKIH0KIAogLyogIEhXIEF1dG8gc3RhdGUgbWFjaGluZSAqLwotczMyIENhcmREaXNhYmxlSFdTTShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCByZXNldE1DVSkKK2ludCBDYXJkRGlzYWJsZUhXU00oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggcmVzZXRNQ1UpCiB7CiAJaW50IHJ0U3RhdHVzID0gX1NVQ0NFU1M7CiAKQEAgLTIxOTMsOSArMTYzNyw5IEBACiB9CiAKIC8qICB3aXRob3V0IEhXIEF1dG8gc3RhdGUgbWFjaGluZSAqLwotczMyIENhcmREaXNhYmxlV2l0aG91dEhXU00oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK2ludCBDYXJkRGlzYWJsZVdpdGhvdXRIV1NNKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JczMyIHJ0U3RhdHVzID0gX1NVQ0NFU1M7CisJaW50IHJ0U3RhdHVzID0gX1NVQ0NFU1M7CiAKIAkvKiBSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELAogCSAgICgiPT09PT09PiBDYXJkIERpc2FibGUgV2l0aG91dCBIV1NNIC5cbiIpKTsgKi8KQEAgLTIyNzQsOSArMTcxOCw5IEBACiAJCXU4ICpwSW4sICpwT3V0OwogCQlwSW4gPSAodTggKikgcEluVmFsdWU7CiAJCXBPdXQgPSAodTggKikgcE91dFZhbHVlOwotCQlpZiAoKnBJbiA+PSAwICYmICpwSW4gPD0gNjMpIHsKKwkJaWYgKCpwSW4gPD0gNjMpCiAJCQkqcE91dCA9ICpwSW47Ci0JCX0gZWxzZSB7CisJCWVsc2UgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfZXJyXywKIAkJCQkgKCJFRVRZUEVfVFhfUFdSLCB2YWx1ZSA9JWQgaXMgaW52YWxpZCwgc2V0ICIKIAkJCQkgICJ0byBkZWZhdWx0ID0gMHgleFxuIiwKQEAgLTIzNDYsNyArMTc5MCw3IEBACiAJCQkJIFtFRVBST01fSFQyMF9UWF9QV1JfSU5YX0RJRkZfODcyM0EgKwogCQkJCSAgZ3JvdXBdID4+IChyZlBhdGggKiA0KSkgJiAweEY7CiAJCQkvKiA0Yml0IHNpZ24gbnVtYmVyIHRvIDggYml0IHNpZ24gbnVtYmVyICovCi0JCQlpZiAocHdySW5mby0+SFQyMEluZGV4RGlmZltyZlBhdGhdW2dyb3VwXSAmIEJJVDMpCisJCQlpZiAocHdySW5mby0+SFQyMEluZGV4RGlmZltyZlBhdGhdW2dyb3VwXSAmIEJJVCgzKSkKIAkJCQlwd3JJbmZvLT5IVDIwSW5kZXhEaWZmW3JmUGF0aF1bZ3JvdXBdIHw9IDB4RjA7CiAKIAkJCXB3ckluZm8tPk9GRE1JbmRleERpZmZbcmZQYXRoXVtncm91cF0gPQpAQCAtMjQ3OCw3ICsxOTIyLDcgQEAKIAl1MzIgdG1wdTQ7CiAKIAlpZiAoIUF1dG9Mb2FkRmFpbCkgewotCQl0bXB1NCA9IHJ0d19yZWFkMzIocGFkYXB0ZXIsIFJFR19NVUxUSV9GVU5DX0NUUkwpOworCQl0bXB1NCA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19NVUxUSV9GVU5DX0NUUkwpOwogCQlpZiAodG1wdTQgJiBCVF9GVU5DX0VOKQogCQkJcEhhbERhdGEtPkVFUFJPTUJsdWV0b290aENvZXhpc3QgPSAxOwogCQllbHNlCkBAIC0yNDk4LDkgKzE5NDIsOCBAQAogCQlwSGFsRGF0YS0+RUVQUk9NQmx1ZXRvb3RoQW50SXNvbGF0aW9uID0gMDsKIAkJcEhhbERhdGEtPkVFUFJPTUJsdWV0b290aFJhZGlvU2hhcmVkID0gQlRfUmFkaW9fU2hhcmVkOwogCX0KLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQlCVF9Jbml0SGFsVmFycyhwYWRhcHRlcik7Ci0jZW5kaWYKKworCXJ0bDg3MjNhX0JUX2luaXRfaGFsX3ZhcnMocGFkYXB0ZXIpOwogfQogCiB2b2lkCkBAIC0yNTg2LDIwICsyMDI5LDIwIEBACiAKIHZvaWQKIEhhbF9FZnVzZVBhcnNlVGhlcm1hbE1ldGVyXzg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJIHU4ICpQUk9NQ29udGVudCwgdTggQXV0b2xvYWRGYWlsKQorCQkJCSB1OCAqUFJPTUNvbnRlbnQsIGJvb2wgQXV0b2xvYWRGYWlsKQogewogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCiAJLyogICovCiAJLyogIFRoZXJtYWxNZXRlciBmcm9tIEVFUFJPTSAqLwogCS8qICAqLwotCWlmIChmYWxzZSA9PSBBdXRvbG9hZEZhaWwpCisJaWYgKEF1dG9sb2FkRmFpbCA9PSBmYWxzZSkKIAkJcEhhbERhdGEtPkVFUFJPTVRoZXJtYWxNZXRlciA9CiAJCSAgICBQUk9NQ29udGVudFtFRVBST01fVEhFUk1BTF9NRVRFUl84NzIzQV07CiAJZWxzZQogCQlwSGFsRGF0YS0+RUVQUk9NVGhlcm1hbE1ldGVyID0gRUVQUk9NX0RlZmF1bHRfVGhlcm1hbE1ldGVyOwogCi0JaWYgKChwSGFsRGF0YS0+RUVQUk9NVGhlcm1hbE1ldGVyID09IDB4ZmYpIHx8ICh0cnVlID09IEF1dG9sb2FkRmFpbCkpIHsKKwlpZiAoKHBIYWxEYXRhLT5FRVBST01UaGVybWFsTWV0ZXIgPT0gMHhmZikgfHwgKEF1dG9sb2FkRmFpbCA9PSB0cnVlKSkgewogCQlwSGFsRGF0YS0+YkFQS1RoZXJtYWxNZXRlcklnbm9yZSA9IHRydWU7CiAJCXBIYWxEYXRhLT5FRVBST01UaGVybWFsTWV0ZXIgPSBFRVBST01fRGVmYXVsdF9UaGVybWFsTWV0ZXI7CiAJfQpAQCAtMjYzNSwxOCArMjA3OCwxNyBAQAogCWlmICgocGF0dHJpYi0+ZW5jcnlwdCA+IDApICYmICFwYXR0cmliLT5ic3dlbmMpIHsKIAkJc3dpdGNoIChwYXR0cmliLT5lbmNyeXB0KSB7CiAJCQkvKiAgU0VDX1RZUEUgKi8KLQkJY2FzZSBfV0VQNDBfOgotCQljYXNlIF9XRVAxMDRfOgotCQljYXNlIF9US0lQXzoKLQkJY2FzZSBfVEtJUF9XVE1JQ186CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CiAJCQlwdHhkZXNjLT5zZWN0eXBlID0gMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgX0FFU186CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJCXB0eGRlc2MtPnNlY3R5cGUgPSAzOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBfTk9fUFJJVkFDWV86CisJCWNhc2UgMDoKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0yOTM1LDcgKzIzNzcsNyBAQAogCXJ0bDg3MjNhX2NhbF90eGRlc2NfY2hrc3VtKHB0eGRlc2MpOwogfQogCi1zdGF0aWMgdm9pZCBod192YXJfc2V0X29wbW9kZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBtb2RlKQordm9pZCBod192YXJfc2V0X29wbW9kZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBtb2RlKQogewogCXU4IHZhbDg7CiAKQEAgLTI5NTEsMTAgKzIzOTMsOCBAQAogCQl2YWw4ID0gRElTX1RTRl9VRFQgfCBFTl9CQ05fRlVOQ1RJT04gfCBESVNfQkNOUV9TVUI7CiAJCVNldEJjbkN0cmxSZWcyM2EocGFkYXB0ZXIsIHZhbDgsIH52YWw4KTsKIAl9IGVsc2UgaWYgKG1vZGUgPT0gX0hXX1NUQVRFX0FQXykgewotI2lmZGVmIENPTkZJR184NzIzQVVfQlRfQ09FWElTVAogCQkvKiAgYWRkIE5VTEwgRGF0YSBhbmQgQlQgTlVMTCBEYXRhIFBhY2tldHMgdG8gRlcgUlNWRCBQYWdlICovCiAJCXJ0bDg3MjNhX3NldF9CVENvZXhfQVBfbW9kZV9Gd1JzdmRQa3RfY21kKHBhZGFwdGVyKTsKLSNlbmRpZgogCiAJCVJlc3VtZVR4QmVhY29uKHBhZGFwdGVyKTsKIApAQCAtMjk2MiwyNiArMjQwMiwyOSBAQAogCQlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCB2YWw4LCB+dmFsOCk7CiAKIAkJLyogIFNldCBSQ1IgKi8KLQkJLyogcnR3X3dyaXRlMzIocGFkYXB0ZXIsIFJFR19SQ1IsIDB4NzAwMDJhOGUpOworCQkvKiBydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JDUiwgMHg3MDAwMmE4ZSk7CiAJCSAgIENCU1NJRF9EQVRBIG11c3Qgc2V0IHRvIDAgKi8KIAkJLyogQ0JTU0lEX0RBVEEgbXVzdCBzZXQgdG8gMCAqLwotCQlydHdfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JDUiwgMHg3MDAwMjI4ZSk7CisJCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBSRUdfUkNSLCAweDcwMDAyMjhlKTsKIAkJLyogIGVuYWJsZSB0byByeCBkYXRhIGZyYW1lICovCi0JCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfUlhGTFRNQVAyLCAweEZGRkYpOworCQlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX1JYRkxUTUFQMiwgMHhGRkZGKTsKIAkJLyogIGVuYWJsZSB0byByeCBwcy1wb2xsICovCi0JCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfUlhGTFRNQVAxLCAweDA0MDApOworCQlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX1JYRkxUTUFQMSwgMHgwNDAwKTsKIAogCQkvKiAgQmVhY29uIENvbnRyb2wgcmVsYXRlZCByZWdpc3RlciBmb3IgZmlyc3QgdGltZSAqLwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfQkNORE1BVElNLCAweDAyKTsJLyogIDJtcyAqLwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRFJWRVJMWUlOVCwgMHgwNSk7CS8qICA1bXMgKi8KLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0FUSU1XTkQsIDB4MGEpOyAvKiAgMTBtcyBmb3IgcG9ydDAgKi8KLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05UQ0ZHLCAweDAwKTsKLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19UQlRUX1BST0hJQklULCAweGZmMDQpOworCQkvKiAgMm1zICovCisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19CQ05ETUFUSU0sIDB4MDIpOworCQkvKiAgNW1zICovCisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19EUlZFUkxZSU5ULCAweDA1KTsKKwkJLyogIDEwbXMgZm9yIHBvcnQwICovCisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19BVElNV05ELCAweDBhKTsKKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19CQ05UQ0ZHLCAweDAwKTsKKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19UQlRUX1BST0hJQklULCAweGZmMDQpOwogCQkvKiAgKzMyNzY3ICh+MzJtcykgKi8KLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19UU0ZUUl9TWU5fT0ZGU0VULCAweDdmZmYpOworCQlydGw4NzIzYXVfd3JpdGUxNihwYWRhcHRlciwgUkVHX1RTRlRSX1NZTl9PRkZTRVQsIDB4N2ZmZik7CiAKIAkJLyogIHJlc2V0IFRTRiAqLwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRFVBTF9UU0ZfUlNULCBCSVQoMCkpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfRFVBTF9UU0ZfUlNULCBCSVQoMCkpOwogCiAJCS8qICBlbmFibGUgQkNOIEZ1bmN0aW9uICovCiAJCS8qICBkb24ndCBlbmFibGUgdXBkYXRlIFRTRiAoZHVlIHRvIFRTRiB1cGRhdGUgd2hlbgpAQCAtMjk5MSwxMiArMjQzNCwxMiBAQAogCQlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCB2YWw4LCB+dmFsOCk7CiAJfQogCi0JdmFsOCA9IHJ0d19yZWFkOChwYWRhcHRlciwgTVNSKTsKKwl2YWw4ID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBNU1IpOwogCXZhbDggPSAodmFsOCAmIDB4QykgfCBtb2RlOwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIE1TUiwgdmFsOCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgTVNSLCB2YWw4KTsKIH0KIAotc3RhdGljIHZvaWQgaHdfdmFyX3NldF9tYWNhZGRyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICp2YWwpCit2b2lkIGh3X3Zhcl9zZXRfbWFjYWRkcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqdmFsKQogewogCXU4IGlkeCA9IDA7CiAJdTMyIHJlZ19tYWNpZDsKQEAgLTMwMDQsMTAgKzI0NDcsMTAgQEAKIAlyZWdfbWFjaWQgPSBSRUdfTUFDSUQ7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDY7IGlkeCsrKQotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCAocmVnX21hY2lkICsgaWR4KSwgdmFsW2lkeF0pOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAocmVnX21hY2lkICsgaWR4KSwgdmFsW2lkeF0pOwogfQogCi1zdGF0aWMgdm9pZCBod192YXJfc2V0X2Jzc2lkKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICp2YWwpCit2b2lkIGh3X3Zhcl9zZXRfYnNzaWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnZhbCkKIHsKIAl1OCBpZHggPSAwOwogCXUzMiByZWdfYnNzaWQ7CkBAIC0zMDE1LDEwICsyNDU4LDEwIEBACiAJcmVnX2Jzc2lkID0gUkVHX0JTU0lEOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCA2OyBpZHgrKykKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgKHJlZ19ic3NpZCArIGlkeCksIHZhbFtpZHhdKTsKKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgKHJlZ19ic3NpZCArIGlkeCksIHZhbFtpZHhdKTsKIH0KIAotc3RhdGljIHZvaWQgaHdfdmFyX3NldF9jb3JyZWN0X3RzZihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQordm9pZCBod192YXJfc2V0X2NvcnJlY3RfdHNmKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJdTY0IHRzZjsKIAl1MzIgcmVnX3RzZnRyOwpAQCAtMzAyOCwxNCArMjQ3MSwxNCBAQAogCS8qIHRzZiA9IHBtbG1lZXh0LT5UU0ZWYWx1ZSAtICgodTMyKXBtbG1lZXh0LT5UU0ZWYWx1ZSAlCiAJICAgKHBtbG1laW5mby0+YmNuX2ludGVydmFsKjEwMjQpKSAtIDEwMjQ7IHVzICovCiAJdHNmID0gcG1sbWVleHQtPlRTRlZhbHVlIC0KLQkJcnR3X21vZHVsYXI2NDIzYShwbWxtZWV4dC0+VFNGVmFsdWUsCi0JCQkgICAgICAocG1sbWVpbmZvLT5iY25faW50ZXJ2YWwgKiAxMDI0KSkgLSAxMDI0OwkvKiB1cyAqLworCQlkb19kaXYocG1sbWVleHQtPlRTRlZhbHVlLAorCQkgICAgICAgKHBtbG1laW5mby0+YmNuX2ludGVydmFsICogMTAyNCkpIC0gMTAyNDsJLyogdXMgKi8KIAogCWlmICgoKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSA9PSBXSUZJX0ZXX0FESE9DX1NUQVRFKSB8fAogCSAgICAoKHBtbG1laW5mby0+c3RhdGUgJiAweDAzKSA9PSBXSUZJX0ZXX0FQX1NUQVRFKSkgewogCQkvKiBwSGFsRGF0YS0+UmVnVHhQYXVzZSB8PSBTVE9QX0JDTlE7QklUKDYpICovCi0JCS8qIHJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19UWFBBVVNFLAotCQkgICAocnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19UWFBBVVNFKXxCSVQoNikpKTsgKi8KKwkJLyogcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1RYUEFVU0UsCisJCSAgIChydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHX1RYUEFVU0UpfEJJVCg2KSkpOyAqLwogCQlTdG9wVHhCZWFjb24ocGFkYXB0ZXIpOwogCX0KIApAQCAtMzA0NCw4ICsyNDg3LDggQEAKIAkvKiAgZGlzYWJsZSByZWxhdGVkIFRTRiBmdW5jdGlvbiAqLwogCVNldEJjbkN0cmxSZWcyM2EocGFkYXB0ZXIsIDAsIEVOX0JDTl9GVU5DVElPTik7CiAKLQlydHdfd3JpdGUzMihwYWRhcHRlciwgcmVnX3RzZnRyLCB0c2YpOwotCXJ0d193cml0ZTMyKHBhZGFwdGVyLCByZWdfdHNmdHIgKyA0LCB0c2YgPj4gMzIpOworCXJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCByZWdfdHNmdHIsIHRzZik7CisJcnRsODcyM2F1X3dyaXRlMzIocGFkYXB0ZXIsIHJlZ190c2Z0ciArIDQsIHRzZiA+PiAzMik7CiAKIAkvKiBlbmFibGUgcmVsYXRlZCBUU0YgZnVuY3Rpb24gKi8KIAlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCBFTl9CQ05fRlVOQ1RJT04sIDApOwpAQCAtMzA1NSwxOSArMjQ5OCwxOSBAQAogCQlSZXN1bWVUeEJlYWNvbihwYWRhcHRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGh3X3Zhcl9zZXRfbWxtZV9kaXNjb25uZWN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCit2b2lkIGh3X3Zhcl9zZXRfbWxtZV9kaXNjb25uZWN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJLyogIHJlamVjdCBhbGwgZGF0YSBmcmFtZXMgKi8KLQlydHdfd3JpdGUxNihwYWRhcHRlciwgUkVHX1JYRkxUTUFQMiwgMCk7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SWEZMVE1BUDIsIDApOwogCiAJLyogIHJlc2V0IFRTRiAqLwotCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19EVUFMX1RTRl9SU1QsIEJJVCgwKSk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0RVQUxfVFNGX1JTVCwgQklUKDApKTsKIAogCS8qICBkaXNhYmxlIHVwZGF0ZSBUU0YgKi8KIAlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCBESVNfVFNGX1VEVCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGh3X3Zhcl9zZXRfbWxtZV9qb2luKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHR5cGUpCit2b2lkIGh3X3Zhcl9zZXRfbWxtZV9qb2luKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHR5cGUpCiB7CiAJdTggUmV0cnlMaW1pdCA9IDB4MzA7CiAKQEAgLTMwNzgsMTMgKzI1MjEsMTMgQEAKIAkJdTMyIHYzMjsKIAogCQkvKiAgZW5hYmxlIHRvIHJ4IGRhdGEgZnJhbWUuQWNjZXB0IGFsbCBkYXRhIGZyYW1lICovCi0JCS8qIHJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfUkNSLAotCQkgICBydHdfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKXxSQ1JfQURGKTsgKi8KLQkJcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SWEZMVE1BUDIsIDB4RkZGRik7CisJCS8qIHJ0bDg3MjNhdV93cml0ZTMyKHBhZGFwdGVyLCBSRUdfUkNSLAorCQkgICBydGw4NzIzYXVfcmVhZDMyKHBhZGFwdGVyLCBSRUdfUkNSKXxSQ1JfQURGKTsgKi8KKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SWEZMVE1BUDIsIDB4RkZGRik7CiAKLQkJdjMyID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX1JDUik7CisJCXYzMiA9IHJ0bDg3MjNhdV9yZWFkMzIocGFkYXB0ZXIsIFJFR19SQ1IpOwogCQl2MzIgfD0gUkNSX0NCU1NJRF9EQVRBIHwgUkNSX0NCU1NJRF9CQ047Ci0JCXJ0d193cml0ZTMyKHBhZGFwdGVyLCBSRUdfUkNSLCB2MzIpOworCQlydGw4NzIzYXVfd3JpdGUzMihwYWRhcHRlciwgUkVHX1JDUiwgdjMyKTsKIAogCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSkgPT0gdHJ1ZSkKIAkJCVJldHJ5TGltaXQgPQpAQCAtMzA5NCw3ICsyNTM3LDcgQEAKIAl9IGVsc2UgaWYgKHR5cGUgPT0gMSkgewkvKiAgam9pbmJzc19ldmVudCBjYWxsYmFjayB3aGVuIGpvaW4gcmVzIDwgMCAqLwogCQkvKiAgY29uZmlnIFJDUiB0byByZWNlaXZlIGRpZmZlcmVudCBCU1NJRCAmIG5vdCB0bwogCQkgICAgcmVjZWl2ZSBkYXRhIGZyYW1lIGR1cmluZyBsaW5raW5nICovCi0JCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfUlhGTFRNQVAyLCAwKTsKKwkJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19SWEZMVE1BUDIsIDApOwogCX0gZWxzZSBpZiAodHlwZSA9PSAyKSB7CS8qICBzdGEgYWRkIGV2ZW50IGNhbGxiYWNrICovCiAJCS8qICBlbmFibGUgdXBkYXRlIFRTRiAqLwogCQlTZXRCY25DdHJsUmVnMjNhKHBhZGFwdGVyLCAwLCBESVNfVFNGX1VEVCk7CkBAIC0zMTAyLDM1MSArMjU0NSwyNyBAQAogCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsCiAJCQkJICBXSUZJX0FESE9DX1NUQVRFIHwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKSB7CiAJCQkvKiAgZml4ZWQgYmVhY29uIGlzc3VlIGZvciA4MTkxc3UuLi4uLi4uLi4uLiAqLwotCQkJcnR3X3dyaXRlOChwYWRhcHRlciwgMHg1NDIsIDB4MDIpOworCQkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgMHg1NDIsIDB4MDIpOwogCQkJUmV0cnlMaW1pdCA9IDB4NzsKIAkJfQogCX0KIAotCXJ0d193cml0ZTE2KHBhZGFwdGVyLCBSRUdfUkwsCi0JCSAgICBSZXRyeUxpbWl0IDw8IFJFVFJZX0xJTUlUX1NIT1JUX1NISUZUIHwgUmV0cnlMaW1pdCA8PAotCQkgICAgUkVUUllfTElNSVRfTE9OR19TSElGVCk7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19STCwKKwkJCSAgUmV0cnlMaW1pdCA8PCBSRVRSWV9MSU1JVF9TSE9SVF9TSElGVCB8IFJldHJ5TGltaXQgPDwKKwkJCSAgUkVUUllfTElNSVRfTE9OR19TSElGVCk7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIDA6CiAJCS8qICBwcmVwYXJlIHRvIGpvaW4gKi8KLQkJQlRfV2lmaUFzc29jaWF0ZU5vdGlmeShwYWRhcHRlciwgdHJ1ZSk7CisJCXJ0bDg3MjNhX0JUX3dpZmlhc3NvY2lhdGVfbm90aWZ5KHBhZGFwdGVyLCB0cnVlKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQkvKiAgam9pbmJzc19ldmVudCBjYWxsYmFjayB3aGVuIGpvaW4gcmVzIDwgMCAqLwotCQlCVF9XaWZpQXNzb2NpYXRlTm90aWZ5KHBhZGFwdGVyLCBmYWxzZSk7CisJCXJ0bDg3MjNhX0JUX3dpZmlhc3NvY2lhdGVfbm90aWZ5KHBhZGFwdGVyLCBmYWxzZSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJLyogIHN0YSBhZGQgZXZlbnQgY2FsbGJhY2sgKi8KIC8qCQlCVF9XaWZpTWVkaWFTdGF0dXNOb3RpZnkocGFkYXB0ZXIsIFJUX01FRElBX0NPTk5FQ1QpOyAqLwogCQlicmVhazsKIAl9Ci0jZW5kaWYKLX0KLQotdm9pZCBTZXRId1JlZzg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQotewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwotCXUzMiAqdmFsMzIgPSAodTMyICopdmFsOwotCi0Jc3dpdGNoICh2YXJpYWJsZSkgewotCWNhc2UgSFdfVkFSX01FRElBX1NUQVRVUzoKLQkJcnRsODcyM2Ffc2V0X21lZGlhX3N0YXR1cyhwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfTUVESUFfU1RBVFVTMToKLQkJcnRsODcyM2Ffc2V0X21lZGlhX3N0YXR1czEocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX1NFVF9PUE1PREU6Ci0JCWh3X3Zhcl9zZXRfb3Btb2RlKHBhZGFwdGVyLCAqdmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9NQUNfQUREUjoKLQkJaHdfdmFyX3NldF9tYWNhZGRyKHBhZGFwdGVyLCB2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0JTU0lEOgotCQlod192YXJfc2V0X2Jzc2lkKHBhZGFwdGVyLCB2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0JBU0lDX1JBVEU6Ci0JCUhhbFNldEJyYXRlQ2ZnMjNhKHBhZGFwdGVyLCB2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX1RYUEFVU0U6Ci0JCXJ0bDg3MjNhX3NldF90eF9wYXVzZShwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQkNOX0ZVTkM6Ci0JCXJ0bDg3MjNhX3NldF9iY25fZnVuYyhwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6Ci0JCWh3X3Zhcl9zZXRfY29ycmVjdF90c2YocGFkYXB0ZXIpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0NIRUNLX0JTU0lEOgotCQlydGw4NzIzYV9jaGVja19ic3NpZChwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfTUxNRV9ESVNDT05ORUNUOgotCQlod192YXJfc2V0X21sbWVfZGlzY29ubmVjdChwYWRhcHRlcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfTUxNRV9TSVRFU1VSVkVZOgotCQlydGw4NzIzYV9tbG1lX3NpdGVzdXJ2ZXkocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX01MTUVfSk9JTjoKLQkJaHdfdmFyX3NldF9tbG1lX2pvaW4ocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX09OX1JDUl9BTToKLQkJcnRsODcyM2Ffb25fcmNyX2FtKHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9PRkZfUkNSX0FNOgotCQlydGw4NzIzYV9vZmZfcmNyX2FtKHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9CRUFDT05fSU5URVJWQUw6Ci0JCXJ0bDg3MjNhX3NldF9iZWFjb25faW50ZXJ2YWwocGFkYXB0ZXIsICooKHUxNiAqKSB2YWwpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9TTE9UX1RJTUU6Ci0JCXJ0bDg3MjNhX3NldF9zbG90X3RpbWUocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX1JFU1BfU0lGUzoKLQkJcnRsODcyM2Ffc2V0X3Jlc3Bfc2lmcyhwYWRhcHRlciwgdmFsWzBdLCB2YWxbMV0sCi0JCQkJICAgICAgIHZhbFsyXSwgdmFsWzNdKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9BQ0tfUFJFQU1CTEU6Ci0JCXJ0bDg3MjNhX2Fja19wcmVhbWJsZShwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfU0VDX0NGRzoKLQkJcnRsODcyM2Ffc2V0X3NlY19jZmcocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0RNX0ZMQUc6Ci0JCXJ0bDg3MjNhX29kbV9zdXBwb3J0X2FiaWxpdHlfd3JpdGUocGFkYXB0ZXIsICp2YWwzMik7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX0RNX0ZVTkNfT1A6Ci0JCXJ0bDg3MjNhX29kbV9zdXBwb3J0X2FiaWxpdHlfYmFja3VwKHBhZGFwdGVyLCAqdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfRE1fRlVOQ19TRVQ6Ci0JCXJ0bDg3MjNhX29kbV9zdXBwb3J0X2FiaWxpdHlfc2V0KHBhZGFwdGVyLCAqdmFsMzIpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0RNX0ZVTkNfQ0xSOgotCQlydGw4NzIzYV9vZG1fc3VwcG9ydF9hYmlsaXR5X2NscihwYWRhcHRlciwgKnZhbDMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9DQU1fRU1QVFlfRU5UUlk6Ci0JCXJ0bDg3MjNhX2NhbV9lbXB0eV9lbnRyeShwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQ0FNX0lOVkFMSURfQUxMOgotCQlydGw4NzIzYV9jYW1faW52YWxpZF9hbGwocGFkYXB0ZXIpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0NBTV9XUklURToKLQkJcnRsODcyM2FfY2FtX3dyaXRlKHBhZGFwdGVyLCB2YWwzMlswXSwgdmFsMzJbMV0pOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0FDX1BBUkFNX1ZPOgotCQlydGw4NzIzYV9zZXRfYWNfcGFyYW1fdm8ocGFkYXB0ZXIsICp2YWwzMik7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQUNfUEFSQU1fVkk6Ci0JCXJ0bDg3MjNhX3NldF9hY19wYXJhbV92aShwYWRhcHRlciwgKnZhbDMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9BQ19QQVJBTV9CRToKLQkJcnRsODcyM2Ffc2V0X2FjX3BhcmFtX2JlKHBhZGFwdGVyLCAqdmFsMzIpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0FDX1BBUkFNX0JLOgotCQlydGw4NzIzYV9zZXRfYWNfcGFyYW1fYmsocGFkYXB0ZXIsICp2YWwzMik7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQUNNX0NUUkw6Ci0JCXJ0bDg3MjNhX3NldF9hY21fY3RybChwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQU1QRFVfTUlOX1NQQUNFOgotCQlydGw4NzIzYV9zZXRfYW1wZHVfbWluX3NwYWNlKHBhZGFwdGVyLCAqdmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9BTVBEVV9GQUNUT1I6Ci0JCXJ0bDg3MjNhX3NldF9hbXBkdV9mYWN0b3IocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX1JYRE1BX0FHR19QR19USDoKLQkJcnRsODcyM2Ffc2V0X3J4ZG1hX2FnZ19wZ190aChwYWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfSDJDX0ZXX1BXUk1PREU6Ci0JCXJ0bDg3MjNhX3NldF9Gd1B3ck1vZGVfY21kKHBhZGFwdGVyLCAqdmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9IMkNfRldfSk9JTkJTU1JQVDoKLQkJcnRsODcyM2Ffc2V0X0Z3Sm9pbkJzc1JlcG9ydF9jbWQocGFkYXB0ZXIsICp2YWwpOwotCQlicmVhazsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JY2FzZSBIV19WQVJfSDJDX0ZXX1AyUF9QU19PRkZMT0FEOgotCQlydGw4NzIzYV9zZXRfcDJwX3BzX29mZmxvYWRfY21kKHBhZGFwdGVyLCAqdmFsKTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCWNhc2UgSFdfVkFSX0lOSVRJQUxfR0FJTjoKLQkJcnRsODcyM2Ffc2V0X2luaXRpYWxfZ2FpbihwYWRhcHRlciwgKnZhbDMyKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfRUZVU0VfQllURVM6Ci0JCXBIYWxEYXRhLT5FZnVzZVVzZWRCeXRlcyA9ICooKHUxNiAqKSB2YWwpOwotCQlicmVhazsKLQljYXNlIEhXX1ZBUl9FRlVTRV9CVF9CWVRFUzoKLQkJcEhhbERhdGEtPkJURWZ1c2VVc2VkQnl0ZXMgPSAqKCh1MTYgKikgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfRklGT19DTEVBUk5fVVA6Ci0JCXJ0bDg3MjNhX2ZpZm9fY2xlYW51cChwYWRhcHRlcik7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX0NIRUNLX1RYQlVGOgotCQlicmVhazsKLQljYXNlIEhXX1ZBUl9BUEZNX09OX01BQzoKLQkJcnRsODcyM2Ffc2V0X2FwZm1fb25fbWFjKHBhZGFwdGVyLCAqdmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9OQVZfVVBQRVI6Ci0JCXJ0bDg3MjNhX3NldF9uYXZfdXBwZXIocGFkYXB0ZXIsICp2YWwzMik7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX0JDTl9WQUxJRDoKLQkJcnRsODcyM2FfYmNuX3ZhbGlkKHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi19Ci0KLXZvaWQgR2V0SHdSZWc4NzIzQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB2YXJpYWJsZSwgdTggKnZhbCkKLXsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKLQotCXN3aXRjaCAodmFyaWFibGUpIHsKLQljYXNlIEhXX1ZBUl9CQVNJQ19SQVRFOgotCQkqKCh1MTYgKikgdmFsKSA9IHBIYWxEYXRhLT5CYXNpY1JhdGVTZXQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfVFhQQVVTRToKLQkJKnZhbCA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX1RYUEFVU0UpOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0JDTl9WQUxJRDoKLQkJLyogQkNOX1ZBTElELCBCSVQxNiBvZiBSRUdfVERFQ1RSTCA9IEJJVDAgb2YgUkVHX1RERUNUUkwrMiAqLwotCQl2YWxbMF0gPSAoQklUMCAmIHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX1RERUNUUkwgKyAyKSkgPyB0cnVlIDoKLQkJCWZhbHNlOwotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX1JGX1RZUEU6Ci0JCSp2YWwgPSBwSGFsRGF0YS0+cmZfdHlwZTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1ZBUl9ETV9GTEFHOgotCXsKLQkJc3RydWN0IGRtX29kbV90ICpwb2RtcHJpdiA9ICZwSGFsRGF0YS0+b2RtcHJpdjsKLQkJKigodTMyICopIHZhbCkgPSBwb2RtcHJpdi0+U3VwcG9ydEFiaWxpdHk7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgSFdfVkFSX0ZXTFBTX1JGX09OOgotCXsKLQkJLyogIFdoZW4gd2UgaGFsdCBOSUMsIHdlIHNob3VsZCBjaGVjayBpZiBGVyBMUFMgaXMgbGVhdmUuICovCi0JCXUzMiB2YWxSQ1I7Ci0KLQkJaWYgKChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9PSB0cnVlKSB8fAotCQkgICAgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSA9PSByZl9vZmYpKSB7Ci0JCQkvKiAgSWYgaXQgaXMgaW4gSFcvU1cgUmFkaW8gT0ZGIG9yIElQUyBzdGF0ZSwgd2UgZG8KLQkJCSAgICBub3QgY2hlY2sgRncgTFBTIExlYXZlLCBiZWNhdXNlIEZ3IGlzIHVubG9hZC4gKi8KLQkJCSp2YWwgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJdmFsUkNSID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX1JDUik7Ci0JCQl2YWxSQ1IgJj0gMHgwMDA3MDAwMDsKLQkJCWlmICh2YWxSQ1IpCi0JCQkJKnZhbCA9IGZhbHNlOwotCQkJZWxzZQotCQkJCSp2YWwgPSB0cnVlOwotCQl9Ci0JfQotCQlicmVhazsKLQljYXNlIEhXX1ZBUl9FRlVTRV9CWVRFUzoKLQkJKigodTE2ICopIHZhbCkgPSBwSGFsRGF0YS0+RWZ1c2VVc2VkQnl0ZXM7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfRUZVU0VfQlRfQllURVM6Ci0JCSooKHUxNiAqKSB2YWwpID0gcEhhbERhdGEtPkJURWZ1c2VVc2VkQnl0ZXM7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19WQVJfQVBGTV9PTl9NQUM6Ci0JCSp2YWwgPSBwSGFsRGF0YS0+Yk1hY1B3ckN0cmxPbjsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfQ0hLX0hJX1FVRVVFX0VNUFRZOgotCQkqdmFsID0KLQkJICAgICgocnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX0hHUV9JTkZPUk1BVElPTikgJiAweDAwMDBmZjAwKSA9PQotCQkgICAgIDApID8gdHJ1ZSA6IGZhbHNlOwotCQlicmVhazsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQotdm9pZCBydGw4NzIzYV9TaW5nbGVEdWFsQW50ZW5uYURldGVjdGlvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGE7Ci0Jc3RydWN0IGRtX29kbV90ICpwRE1fT2RtOwotCXN0cnVjdCBzd19hbnRfc3cgKnBETV9TV0FUX1RhYmxlOwotCXU4IGk7Ci0KLQlwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0JcERNX09kbSA9ICZwSGFsRGF0YS0+b2RtcHJpdjsKLQlwRE1fU1dBVF9UYWJsZSA9ICZwRE1fT2RtLT5ETV9TV0FUX1RhYmxlOwotCi0JLyogICovCi0JLyogIDxSb2dlcl9Ob3Rlcz4gUlRMODcyM0EgU2luZ2xlIGFuZCBEdWFsIGFudGVubmEgZHluYW1pYyBkZXRlY3Rpb24KLQkgICAgbWVjaGFuaXNtIHdoZW4gUkYgcG93ZXIgc3RhdGUgaXMgb24uICovCi0JLyogIFdlIHNob3VsZCB0YWtlIHBvd2VyIHRyYWNraW5nLCBJUUssIExDSywgUkNLIFJGIHJlYWQvd3JpdGUKLQkgICAgb3BlcmF0aW9uIGludG8gY29uc2lkZXJhdGlvbi4gKi8KLQkvKiAgMjAxMS4xMi4xNS4gKi8KLQkvKiAgKi8KLQlpZiAoIXBIYWxEYXRhLT5iQW50ZW5uYURldGVjdGVkKSB7Ci0JCXU4IGJ0QW50TnVtID0gQlRfR2V0UEdBbnROdW0ocGFkYXB0ZXIpOwotCi0JCS8qICBTZXQgZGVmYXVsdCBhbnRlbm5hIEIgc3RhdHVzICovCi0JCWlmIChidEFudE51bSA9PSBBbnRfeDIpCi0JCQlwRE1fU1dBVF9UYWJsZS0+QU5UQl9PTiA9IHRydWU7Ci0JCWVsc2UgaWYgKGJ0QW50TnVtID09IEFudF94MSkKLQkJCXBETV9TV0FUX1RhYmxlLT5BTlRCX09OID0gZmFsc2U7Ci0JCWVsc2UKLQkJCXBETV9TV0FUX1RhYmxlLT5BTlRCX09OID0gdHJ1ZTsKLQotCQlpZiAocEhhbERhdGEtPkN1c3RvbWVySUQgIT0gUlRfQ0lEX1RPU0hJQkEpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBNQVhfQU5URU5OQV9ERVRFQ1RJT05fQ05UOyBpKyspIHsKLQkJCQlpZiAoT0RNX1NpbmdsZUR1YWxBbnRlbm5hRGV0ZWN0aW9uCi0JCQkJICAgICgmcEhhbERhdGEtPm9kbXByaXYsIEFOVFRFU1RBTEwpID09IHRydWUpCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiAgU2V0IGRlZmF1bHQgYW50ZW5uYSBudW1iZXIgZm9yIEJUIGNvZXhpc3RlbmNlICovCi0JCQlpZiAoYnRBbnROdW0gPT0gQW50X3gyKQotCQkJCUJUX1NldEJ0Q29leEN1cnJBbnROdW0ocGFkYXB0ZXIsCi0JCQkJCQkgICAgICAgcERNX1NXQVRfVGFibGUtPgotCQkJCQkJICAgICAgIEFOVEJfT04gPyAyIDogMSk7Ci0JCX0KLQkJcEhhbERhdGEtPmJBbnRlbm5hRGV0ZWN0ZWQgPSB0cnVlOwotCX0KLX0KLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUICovCi0KLXZvaWQgcnRsODcyM2FfY2xvbmVfaGFsZGF0YShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmRzdF9hZGFwdGVyLAotCQkJICAgIHN0cnVjdCBydHdfYWRhcHRlciAqc3JjX2FkYXB0ZXIpCi17Ci0JbWVtY3B5KGRzdF9hZGFwdGVyLT5IYWxEYXRhLCBzcmNfYWRhcHRlci0+SGFsRGF0YSwKLQkgICAgICAgZHN0X2FkYXB0ZXItPmhhbF9kYXRhX3N6KTsKLX0KLQotdm9pZCBydGw4NzIzYV9zdGFydF90aHJlYWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLX0KLQotdm9pZCBydGw4NzIzYV9zdG9wX3RocmVhZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2FfcGh5Y2ZnLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9waHljZmcuYwppbmRleCA4NDAwZTZlLi5kMjM1MjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9waHljZmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9waHljZmcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogCiAjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CisjaW5jbHVkZSA8dXNiX29wc19saW51eC5oPgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBMb2NhbCBDb25zdGFudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBDaGFubmVsIHN3aXRjaDpUaGUgc2l6ZSBvZiBjb21tYW5kIHRhYmxlcyBmb3Igc3dpdGNoIGNoYW5uZWwqLwpAQCAtODcsNyArODgsNyBAQAogewogCXUzMglSZXR1cm5WYWx1ZSA9IDAsIE9yaWdpbmFsVmFsdWUsIEJpdFNoaWZ0OwogCi0JT3JpZ2luYWxWYWx1ZSA9IHJ0d19yZWFkMzIoQWRhcHRlciwgUmVnQWRkcik7CisJT3JpZ2luYWxWYWx1ZSA9IHJ0bDg3MjNhdV9yZWFkMzIoQWRhcHRlciwgUmVnQWRkcik7CiAJQml0U2hpZnQgPSBwaHlfQ2FsY3VsYXRlQml0U2hpZnQoQml0TWFzayk7CiAJUmV0dXJuVmFsdWUgPSAoT3JpZ2luYWxWYWx1ZSAmIEJpdE1hc2spID4+IEJpdFNoaWZ0OwogCXJldHVybiBSZXR1cm5WYWx1ZTsKQEAgLTEyMywxMiArMTI0LDEyIEBACiAJLyogUlRfVFJBQ0UoQ09NUF9SRiwgREJHX1RSQUNFLCAoIi0tLT5QSFlfU2V0QkJSZWcoKTogUmVnQWRkciglI2x4KSwgQml0TWFzayglI2x4KSwgRGF0YSglI2x4KVxuIiwgUmVnQWRkciwgQml0TWFzaywgRGF0YSkpOyAqLwogCiAJaWYgKEJpdE1hc2sgIT0gYk1hc2tEV29yZCkgey8qIGlmIG5vdCAiZG91YmxlIHdvcmQiIHdyaXRlICovCi0JCU9yaWdpbmFsVmFsdWUgPSBydHdfcmVhZDMyKEFkYXB0ZXIsIFJlZ0FkZHIpOworCQlPcmlnaW5hbFZhbHVlID0gcnRsODcyM2F1X3JlYWQzMihBZGFwdGVyLCBSZWdBZGRyKTsKIAkJQml0U2hpZnQgPSBwaHlfQ2FsY3VsYXRlQml0U2hpZnQoQml0TWFzayk7CiAJCURhdGEgPSAoKE9yaWdpbmFsVmFsdWUgJiAofkJpdE1hc2spKSB8IChEYXRhIDw8IEJpdFNoaWZ0KSk7CiAJfQogCi0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUmVnQWRkciwgRGF0YSk7CisJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgUmVnQWRkciwgRGF0YSk7CiAKIAkvKiBSVFBSSU5UKEZQSFksIFBIWV9CQlcsICgiQkJXIE1BU0sgPSAweCVseCBBZGRyWzB4JWx4XT0gMHglbHhcbiIsIEJpdE1hc2ssIFJlZ0FkZHIsIERhdGEpKTsgKi8KIAkvKiBSVF9UUkFDRShDT01QX1JGLCBEQkdfVFJBQ0UsICgiPC0tLVBIWV9TZXRCQlJlZygpOiBSZWdBZGRyKCUjbHgpLCBCaXRNYXNrKCUjbHgpLCBEYXRhKCUjbHgpXG4iLCBSZWdBZGRyLCBCaXRNYXNrLCBEYXRhKSk7ICovCkBAIC0yMTIsMTAgKzIxMywxMiBAQAogCiAJaWYgKGVSRlBhdGggPT0gUkZfUEFUSF9BKQogCQlSZlBpRW5hYmxlID0gKHU4KVBIWV9RdWVyeUJCUmVnKEFkYXB0ZXIsCi0JCQkJCQlyRlBHQTBfWEFfSFNTSVBhcmFtZXRlcjEsIEJJVDgpOworCQkJCQkJckZQR0EwX1hBX0hTU0lQYXJhbWV0ZXIxLAorCQkJCQkJQklUKDgpKTsKIAllbHNlIGlmIChlUkZQYXRoID09IFJGX1BBVEhfQikKIAkJUmZQaUVuYWJsZSA9ICh1OClQSFlfUXVlcnlCQlJlZyhBZGFwdGVyLAotCQkJCQkJckZQR0EwX1hCX0hTU0lQYXJhbWV0ZXIxLCBCSVQ4KTsKKwkJCQkJCXJGUEdBMF9YQl9IU1NJUGFyYW1ldGVyMSwKKwkJCQkJCUJJVCg4KSk7CiAKIAlpZiAoUmZQaUVuYWJsZSkJewogCQkvKiBSZWFkIGZyb20gQkJyZWc4YjgsIDEyIGJpdHMgZm9yIDgxOTAsIDIwYml0cyBmb3IgVDY1IFJGICovCkBAIC00MTMsMjggKzQxNiwyMyBAQAogICogIDA4LzEyLzIwMDgJTUhDCQlDcmVhdGUgVmVyc2lvbiAwLgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXMzMiBQSFlfTUFDQ29uZmlnODcyM0Eoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQoraW50IFBIWV9NQUNDb25maWc4NzIzQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJaW50IHJ0U3RhdHVzID0gX1NVQ0NFU1M7CiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKLQlzOCAqcHN6TUFDUmVnRmlsZTsKLQlzOCBzejg3MjNNQUNSZWdGaWxlW10gPSBSVEw4NzIzX1BIWV9NQUNSRUc7CiAJYm9vbCBpczkyQyA9IElTXzkyQ19TRVJJQUwocEhhbERhdGEtPlZlcnNpb25JRCk7CiAKLQlwc3pNQUNSZWdGaWxlID0gc3o4NzIzTUFDUmVnRmlsZTsKLQogCS8qICAqLwogCS8qICBDb25maWcgTUFDICovCiAJLyogICovCi0JaWYgKEhBTF9TVEFUVVNfRkFJTFVSRSA9PQotCSAgICBPRE1fQ29uZmlnTUFDV2l0aEhlYWRlckZpbGUyM2EoJnBIYWxEYXRhLT5vZG1wcml2KSkKKwlpZiAoT0RNX0NvbmZpZ01BQ1dpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdikgPT0gX0ZBSUwpCiAJCXJ0U3RhdHVzID0gX0ZBSUw7CiAKIAkvKiAgMjAxMC4wNy4xMyBBTVBEVSBhZ2dyZWdhdGlvbiBudW1iZXIgOSAqLwogCS8qIHJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19NQVhfQUdHUl9OVU0sIE1BWF9BR0dSX05VTSk7ICovCi0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfTUFYX0FHR1JfTlVNLCAweDBBKTsgLyogQnkgdHlubGkuIDIwMTAuMTEuMTguICovCisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfTUFYX0FHR1JfTlVNLCAweDBBKTsKIAlpZiAoaXM5MkMgJiYgKEJPQVJEX1VTQl9ET05HTEUgPT0gcEhhbERhdGEtPkJvYXJkVHlwZSkpCi0JCXJ0d193cml0ZTgoQWRhcHRlciwgMHg0MCwgMHgwNCk7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHg0MCwgMHgwNCk7CiAKIAlyZXR1cm4gcnRTdGF0dXM7CiB9CkBAIC03NTEsMjcgKzc0OSwxMiBAQAogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEoQWRhcHRlcik7CiAJaW50IHJ0U3RhdHVzID0gX1NVQ0NFU1M7CiAKLQl1OCBzejg3MjNCQlJlZ0ZpbGVbXSA9IFJUTDg3MjNfUEhZX1JFRzsKLQl1OCBzejg3MjNBR0NUYWJsZUZpbGVbXSA9IFJUTDg3MjNfQUdDX1RBQjsKLQl1OCBzejg3MjNCQlJlZ1BnRmlsZVtdID0gUlRMODcyM19QSFlfUkVHX1BHOwotCXU4IHN6ODcyM0JCUmVnTXBGaWxlW10gPSBSVEw4NzIzX1BIWV9SRUdfTVA7Ci0KLQl1OCAqcHN6QkJSZWdGaWxlID0gTlVMTCwgKnBzekFHQ1RhYmxlRmlsZSA9IE5VTEw7Ci0JdTggKnBzekJCUmVnUGdGaWxlID0gTlVMTCwgKnBzekJCUmVnTXBGaWxlID0gTlVMTDsKLQotCS8qIFJUX1RSQUNFKENPTVBfSU5JVCwgREJHX1RSQUNFLCAoIj09PnBoeV9CQjgxOTJTX0NvbmZpZ19QYXJhRmlsZVxuIikpOyAqLwotCi0JcHN6QkJSZWdGaWxlID0gc3o4NzIzQkJSZWdGaWxlIDsKLQlwc3pBR0NUYWJsZUZpbGUgPSBzejg3MjNBR0NUYWJsZUZpbGU7Ci0JcHN6QkJSZWdQZ0ZpbGUgPSBzejg3MjNCQlJlZ1BnRmlsZTsKLQlwc3pCQlJlZ01wRmlsZSA9IHN6ODcyM0JCUmVnTXBGaWxlOwotCiAJLyogICovCiAJLyogIDEuIFJlYWQgUEhZX1JFRy5UWFQgQkIgSU5JVCEhICovCiAJLyogIFdlIHdpbGwgc2VwZXJhdGUgYXMgODhDIC8gOTJDIGFjY29yZGluZyB0byBjaGlwIHZlcnNpb24gKi8KIAkvKiAgKi8KLQlpZiAoSEFMX1NUQVRVU19GQUlMVVJFID09IE9ETV9Db25maWdCQldpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwKLQkJCQkJCQkgICAgIENPTkZJR19CQl9QSFlfUkVHKSkKKwlpZiAoT0RNX0NvbmZpZ0JCV2l0aEhlYWRlckZpbGUyM2EoJnBIYWxEYXRhLT5vZG1wcml2LAorCQkJCQkgIENPTkZJR19CQl9QSFlfUkVHKSA9PSBfRkFJTCkKIAkJcnRTdGF0dXMgPSBfRkFJTDsKIAlpZiAocnRTdGF0dXMgIT0gX1NVQ0NFU1MpCiAJCWdvdG8gcGh5X0JCODE5MF9Db25maWdfUGFyYUZpbGVfRmFpbDsKQEAgLTgwMSw4ICs3ODQsOCBAQAogCS8qICAqLwogCS8qICAzLiBCQiBBR0MgdGFibGUgSW5pdGlhbGl6YXRpb24gKi8KIAkvKiAgKi8KLQlpZiAoSEFMX1NUQVRVU19GQUlMVVJFID09IE9ETV9Db25maWdCQldpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwKLQkJCQkJCQkgICAgIENPTkZJR19CQl9BR0NfVEFCKSkKKwlpZiAoT0RNX0NvbmZpZ0JCV2l0aEhlYWRlckZpbGUyM2EoJnBIYWxEYXRhLT5vZG1wcml2LAorCQkJCQkgIENPTkZJR19CQl9BR0NfVEFCKSA9PSBfRkFJTCkKIAkJcnRTdGF0dXMgPSBfRkFJTDsKIAogcGh5X0JCODE5MF9Db25maWdfUGFyYUZpbGVfRmFpbDoKQEAgLTgyMiwzMCArODA1LDMwIEBACiAKIAkvKiAgU3VnZ2VzdGVkIGJ5IFNjb3R0LiB0eW5saV90ZXN0LiAyMDEwLjEyLjMwLiAqLwogCS8qIDEuIDB4MjhbMV0gPSAxICovCi0JVG1wVTFCID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19BRkVfUExMX0NUUkwpOworCVRtcFUxQiA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfQUZFX1BMTF9DVFJMKTsKIAl1ZGVsYXkoMik7Ci0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfQUZFX1BMTF9DVFJMLCAoVG1wVTFCfEJJVDEpKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19BRkVfUExMX0NUUkwsIFRtcFUxQiB8IEJJVCgxKSk7CiAJdWRlbGF5KDIpOwogCiAJLyogMi4gMHgyOVs3OjBdID0gMHhGRiAqLwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX0FGRV9QTExfQ1RSTCsxLCAweGZmKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19BRkVfUExMX0NUUkwrMSwgMHhmZik7CiAJdWRlbGF5KDIpOwogCiAJLyogMy4gMHgwMlsxOjBdID0gMmInMTEgKi8KLQlUbXBVMUIgPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX1NZU19GVU5DX0VOKTsKLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwKLQkJICAgKFRtcFUxQiB8IEZFTl9CQl9HTEJfUlNUbiB8IEZFTl9CQlJTVEIpKTsKKwlUbXBVMUIgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHX1NZU19GVU5DX0VOKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwKKwkJCSAoVG1wVTFCIHwgRkVOX0JCX0dMQl9SU1RuIHwgRkVOX0JCUlNUQikpOwogCiAJLyogNC4gMHgyNVs2XSA9IDAgKi8KLQlUbXBVMUIgPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX0FGRV9YVEFMX0NUUkwgKyAxKTsKLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19BRkVfWFRBTF9DVFJMKzEsIChUbXBVMUIgJiAofkJJVDYpKSk7CisJVG1wVTFCID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIFJFR19BRkVfWFRBTF9DVFJMICsgMSk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfQUZFX1hUQUxfQ1RSTCsxLCBUbXBVMUIgJiB+QklUKDYpKTsKIAogCS8qIDUuIDB4MjRbMjBdID0gMAlBZHZpc2VkIGJ5IFNEMyBBbGV4IFdhbmcuIDIwMTEuMDIuMDkuICovCi0JVG1wVTFCID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19BRkVfWFRBTF9DVFJMKzIpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX0FGRV9YVEFMX0NUUkwrMiwgKFRtcFUxQiAmICh+QklUNCkpKTsKKwlUbXBVMUIgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHX0FGRV9YVEFMX0NUUkwrMik7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfQUZFX1hUQUxfQ1RSTCsyLCBUbXBVMUIgJiB+QklUKDQpKTsKIAogCS8qIDYuIDB4MWZbNzowXSA9IDB4MDcgKi8KLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19SRl9DVFJMLCAweDA3KTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19SRl9DVFJMLCAweDA3KTsKIAogCS8qICAqLwogCS8qICBDb25maWcgQkIgYW5kIEFHQyAqLwpAQCAtOTc0LDIwICs5NTcsMjAgQEAKIAkvKiAzPDE+U2V0IE1BQyByZWdpc3RlciAqLwogCS8qIDMgKi8KIAotCXJlZ0J3T3BNb2RlID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19CV09QTU9ERSk7Ci0JcmVnUlJTUl9SU0MgPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX1JSU1IrMik7CisJcmVnQndPcE1vZGUgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHX0JXT1BNT0RFKTsKKwlyZWdSUlNSX1JTQyA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfUlJTUisyKTsKIAogCXN3aXRjaCAocEhhbERhdGEtPkN1cnJlbnRDaGFubmVsQlcpIHsKIAljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6CiAJCXJlZ0J3T3BNb2RlIHw9IEJXX09QTU9ERV8yME1IWjsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfQldPUE1PREUsIHJlZ0J3T3BNb2RlKTsKKwkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfQldPUE1PREUsIHJlZ0J3T3BNb2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzQwOgogCQlyZWdCd09wTW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19CV09QTU9ERSwgcmVnQndPcE1vZGUpOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19CV09QTU9ERSwgcmVnQndPcE1vZGUpOwogCQlyZWdSUlNSX1JTQyA9IChyZWdSUlNSX1JTQyAmIDB4OTApIHwKIAkJCShwSGFsRGF0YS0+bkN1cjQwTWh6UHJpbWVTQyA8PCA1KTsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfUlJTUisyLCByZWdSUlNSX1JTQyk7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1JSU1IrMiwgcmVnUlJTUl9SU0MpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMDAyLDcgKzk4NSw3IEBACiAJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgogCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX1JGTU9ELCBiUkZNT0QsIDB4MCk7CiAJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTFfUkZNT0QsIGJSRk1PRCwgMHgwKTsKLQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIyLCBCSVQxMCwgMSk7CisJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgQklUKDEwKSwgMSk7CiAKIAkJYnJlYWs7CiAKQEAgLTEwMTcsOSArMTAwMCw5IEBACiAJCQkgICAgIChwSGFsRGF0YS0+bkN1cjQwTWh6UHJpbWVTQyA+PiAxKSk7CiAJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTFfTFNURiwgMHhDMDAsCiAJCQkgICAgIHBIYWxEYXRhLT5uQ3VyNDBNaHpQcmltZVNDKTsKLQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIyLCBCSVQxMCwgMCk7CisJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgQklUKDEwKSwgMCk7CiAKLQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIDB4ODE4LCAoQklUMjYgfCBCSVQyNyksCisJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCAweDgxOCwgQklUKDI2KSB8IEJJVCgyNyksCiAJCQkgICAgIChwSGFsRGF0YS0+bkN1cjQwTWh6UHJpbWVTQyA9PQogCQkJICAgICAgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0xPV0VSKSA/IDI6MSk7CiAJCWJyZWFrOwpAQCAtMTExNiw3ICsxMDk5LDcgQEAKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwogCiAJaWYgKEFkYXB0ZXItPmJOb3RpZnlDaGFubmVsQ2hhbmdlKQotCQlEQkdfODcyM0EoIlslc10gY2ggPSAlZFxuIiwgX19GVU5DVElPTl9fLCBjaGFubmVsKTsKKwkJREJHXzg3MjNBKCJbJXNdIGNoID0gJWRcbiIsIF9fZnVuY19fLCBjaGFubmVsKTsKIAogCS8qIHMxLiBwcmUgY29tbW9uIGNvbW1hbmQgLSBDbWRJRF9TZXRUeFBvd2VyTGV2ZWwgKi8KIAlQSFlfU2V0VHhQb3dlckxldmVsODcyM0EoQWRhcHRlciwgY2hhbm5lbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9yZjYwNTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX3JmNjA1Mi5jCmluZGV4IGVkMzljMTguLmMzMGJkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX3JmNjA1Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhX3JmNjA1Mi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+CiAKICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KKyNpbmNsdWRlIDx1c2Jfb3BzX2xpbnV4Lmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIExvY2FsIENvbnN0YW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qICBEZWZpbmUgbG9jYWwgc3RydWN0dXJlIGZvciBkZWJ1ZyEhISEhICovCkBAIC0zNjgsNyArMzY5LDggQEAKIAkJCQkJd3JpdGVWYWwgPSAod3JpdGVWYWwgPiA4KSA/ICh3cml0ZVZhbC04KSA6IDA7CiAJCQkJZWxzZQogCQkJCQl3cml0ZVZhbCA9ICh3cml0ZVZhbCA+IDYpID8gKHdyaXRlVmFsLTYpIDogMDsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsICh1MzIpKFJlZ09mZnNldCtpKSwgKHU4KXdyaXRlVmFsKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJlZ09mZnNldCArIGksCisJCQkJCQkgKHU4KXdyaXRlVmFsKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQxNywxMiArNDE5LDYgQEAKIAlzdHJ1Y3QgYmJfcmVnX2RlZmluZQkqcFBoeVJlZzsKIAlpbnQgcnRTdGF0dXMgPSBfU1VDQ0VTUzsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwotCXN0YXRpYyBjaGFyIHN6ODcyM1JhZGlvQUZpbGVbXSA9IFJUTDg3MjNfUEhZX1JBRElPX0E7Ci0Jc3RhdGljIGNoYXIgc3o4NzIzUmFkaW9CRmlsZVtdID0gUlRMODcyM19QSFlfUkFESU9fQjsKLQljaGFyICpwc3pSYWRpb0FGaWxlLCAqcHN6UmFkaW9CRmlsZTsKLQotCXBzelJhZGlvQUZpbGUgPSBzejg3MjNSYWRpb0FGaWxlOwotCXBzelJhZGlvQkZpbGUgPSBzejg3MjNSYWRpb0JGaWxlOwogCiAJLyogMy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJLyogMyA8Mj4gSW5pdGlhbGl6ZSBSRiAqLwpAQCAtNDU5LDExICs0NTUsMTkgQEAKIAkJLyotLS0tSW5pdGlhbGl6ZSBSRiBmb20gY29ubmZpZ3VyYXRpb24gZmlsZS0tLS0qLwogCQlzd2l0Y2ggKGVSRlBhdGgpIHsKIAkJY2FzZSBSRl9QQVRIX0E6Ci0JCQlpZiAoSEFMX1NUQVRVU19GQUlMVVJFID09IE9ETV9Db25maWdSRldpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwgKGVudW0gUkZfUkFESU9fUEFUSCllUkZQYXRoLCAoZW51bSBSRl9SQURJT19QQVRIKWVSRlBhdGgpKQorCQkJaWYgKE9ETV9Db25maWdSRldpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwKKwkJCQkJCQkgIChlbnVtIFJGX1JBRElPX1BBVEgpCisJCQkJCQkJICBlUkZQYXRoLAorCQkJCQkJCSAgKGVudW0gUkZfUkFESU9fUEFUSCkKKwkJCQkJCQkgIGVSRlBhdGgpID09IF9GQUlMKQogCQkJCXJ0U3RhdHVzID0gX0ZBSUw7CiAJCQlicmVhazsKIAkJY2FzZSBSRl9QQVRIX0I6Ci0JCQlpZiAoSEFMX1NUQVRVU19GQUlMVVJFID09IE9ETV9Db25maWdSRldpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwgKGVudW0gUkZfUkFESU9fUEFUSCllUkZQYXRoLCAoZW51bSBSRl9SQURJT19QQVRIKWVSRlBhdGgpKQorCQkJaWYgKE9ETV9Db25maWdSRldpdGhIZWFkZXJGaWxlMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwKKwkJCQkJCQkgIChlbnVtIFJGX1JBRElPX1BBVEgpCisJCQkJCQkJICBlUkZQYXRoLAorCQkJCQkJCSAgKGVudW0gUkZfUkFESU9fUEFUSCkKKwkJCQkJCQkgIGVSRlBhdGgpID09IF9GQUlMKQogCQkJCXJ0U3RhdHVzID0gX0ZBSUw7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2Ffc3Jlc2V0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9zcmVzZXQuYwppbmRleCBjMDIxOGU3Li4wNjgwZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9zcmVzZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYV9zcmVzZXQuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8cnRsODcyM2Ffc3Jlc2V0Lmg+CiAjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CisjaW5jbHVkZSA8dXNiX29wc19saW51eC5oPgogCiB2b2lkIHJ0bDg3MjNhX3NyZXNldF94bWl0X3N0YXR1c19jaGVjayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewpAQCAtMjcsMTAgKzI4LDEwIEBACiAJdW5zaWduZWQgaW50IGRpZmZfdGltZTsKIAl1MzIgdHhkbWFfc3RhdHVzOwogCi0JdHhkbWFfc3RhdHVzID0gcnR3X3JlYWQzMihwYWRhcHRlciwgUkVHX1RYRE1BX1NUQVRVUyk7CisJdHhkbWFfc3RhdHVzID0gcnRsODcyM2F1X3JlYWQzMihwYWRhcHRlciwgUkVHX1RYRE1BX1NUQVRVUyk7CiAJaWYgKHR4ZG1hX3N0YXR1cyAhPSAwKSB7CiAJCURCR184NzIzQSgiJXMgUkVHX1RYRE1BX1NUQVRVUzoweCUwOHhcbiIsIF9fZnVuY19fLCB0eGRtYV9zdGF0dXMpOwotCQlydHdfaGFsX3NyZXNldF9yZXNldDIzYShwYWRhcHRlcik7CisJCXJ0d19zcmVzZXRfcmVzZXQocGFkYXB0ZXIpOwogCX0KIAogCWN1cnJlbnRfdGltZSA9IGppZmZpZXM7CkBAIC00Nyw3ICs0OCw3IEBACiAJCQkJaWYgKGRpZmZfdGltZSA+IDQwMDApIHsKIAkJCQkJLyogcGFkYXB0ZXItPldpZmlfRXJyb3JfU3RhdHVzID0gV0lGSV9UWF9IQU5HOyAqLwogCQkJCQlEQkdfODcyM0EoIiVzIHR4IGhhbmdcbiIsIF9fZnVuY19fKTsKLQkJCQkJcnR3X2hhbF9zcmVzZXRfcmVzZXQyM2EocGFkYXB0ZXIpOworCQkJCQlydHdfc3Jlc2V0X3Jlc2V0KHBhZGFwdGVyKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTU1LDcgKzU2LDcgQEAKIAogCWlmIChwc3J0cHJpdi0+ZGJnX3RyaWdnZXJfcG9pbnQgPT0gU1JFU0VUX1RHUF9YTUlUX1NUQVRVUykgewogCQlwc3J0cHJpdi0+ZGJnX3RyaWdnZXJfcG9pbnQgPSBTUkVTRVRfVEdQX05VTEw7Ci0JCXJ0d19oYWxfc3Jlc2V0X3Jlc2V0MjNhKHBhZGFwdGVyKTsKKwkJcnR3X3NyZXNldF9yZXNldChwYWRhcHRlcik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC02Nyw3ICs2OCw3IEBACiAKIAlpZiAocHNydHByaXYtPmRiZ190cmlnZ2VyX3BvaW50ID09IFNSRVNFVF9UR1BfTElOS19TVEFUVVMpIHsKIAkJcHNydHByaXYtPmRiZ190cmlnZ2VyX3BvaW50ID0gU1JFU0VUX1RHUF9OVUxMOwotCQlydHdfaGFsX3NyZXNldF9yZXNldDIzYShwYWRhcHRlcik7CisJCXJ0d19zcmVzZXRfcmVzZXQocGFkYXB0ZXIpOwogCQlyZXR1cm47CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2F1X2xlZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2F1X2xlZC5jCmluZGV4IDRkNWM5MDkuLmI5NDY2MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhdV9sZWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYXVfbGVkLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJkcnZfdHlwZXMuaCIKICNpbmNsdWRlICJydGw4NzIzYV9oYWwuaCIKICNpbmNsdWRlICJydGw4NzIzYV9sZWQuaCIKKyNpbmNsdWRlICJ1c2Jfb3BzX2xpbnV4LmgiCiAKIC8qICAqLwogLyogIExFRCBvYmplY3QuICovCkBAIC00MSwxNCArNDIsMTggQEAKIAljYXNlIExFRF9QSU5fR1BJTzA6CiAJCWJyZWFrOwogCWNhc2UgTEVEX1BJTl9MRUQwOgotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMCwgKExlZENmZyYweGYwKXxCSVQ1fEJJVDYpOyAvKiAgU1cgY29udHJvbCBsZWQwIG9uLiAqLworCQkvKiAgU1cgY29udHJvbCBsZWQwIG9uLiAqLworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMCwKKwkJCQkgKExlZENmZyYweGYwKXxCSVQoNSl8QklUKDYpKTsKIAkJYnJlYWs7CiAJY2FzZSBMRURfUElOX0xFRDE6Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcxLCAoTGVkQ2ZnJjB4MDApfEJJVDYpOyAvKiAgU1cgY29udHJvbCBsZWQxIG9uLiAqLworCQkgLyogIFNXIGNvbnRyb2wgbGVkMSBvbi4gKi8KKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzEsIChMZWRDZmcmMHgwMCl8QklUKDYpKTsKIAkJYnJlYWs7CiAJY2FzZSBMRURfUElOX0xFRDI6Ci0JCUxlZENmZyA9IHJ0d19yZWFkOChwYWRhcHRlciwgUkVHX0xFRENGRzIpOwotCQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgKExlZENmZyYweDgwKXxCSVQ1KTsgLyogIFNXIGNvbnRyb2wgbGVkMSBvbi4gKi8KKwkJTGVkQ2ZnID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMik7CisJCSAvKiAgU1cgY29udHJvbCBsZWQxIG9uLiAqLworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMiwgKExlZENmZyYweDgwKXxCSVQoNSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTcwLDE0ICs3NSwyMCBAQAogCWNhc2UgTEVEX1BJTl9HUElPMDoKIAkJYnJlYWs7CiAJY2FzZSBMRURfUElOX0xFRDA6Ci0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcwLCAoTGVkQ2ZnJjB4ZjApfEJJVDV8QklUNik7IC8qICBTVyBjb250cm9sIGxlZDAgb24uICovCisJCS8qICBTVyBjb250cm9sIGxlZDAgb24uICovCisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcwLAorCQkJCSAoTGVkQ2ZnJjB4ZjApfEJJVCg1KXxCSVQoNikpOwogCQlicmVhazsKIAljYXNlIExFRF9QSU5fTEVEMToKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzEsIChMZWRDZmcmMHgwMCl8QklUNXxCSVQ2KTsgLyogIFNXIGNvbnRyb2wgbGVkMSBvbi4gKi8KKwkJLyogIFNXIGNvbnRyb2wgbGVkMSBvbi4gKi8KKwkJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzEsCisJCQkJIChMZWRDZmcmMHgwMCl8QklUKDUpfEJJVCg2KSk7CiAJCWJyZWFrOwogCWNhc2UgTEVEX1BJTl9MRUQyOgotCQlMZWRDZmcgPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19MRURDRkcyKTsKLQkJcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0xFRENGRzIsIChMZWRDZmcmMHg4MCl8QklUM3xCSVQ1KTsgLyogIFNXIGNvbnRyb2wgbGVkMSBvbi4gKi8KKwkJTGVkQ2ZnID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfTEVEQ0ZHMik7CisJCS8qICBTVyBjb250cm9sIGxlZDEgb24uICovCisJCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19MRURDRkcyLAorCQkJCSAoTGVkQ2ZnJjB4ODApfEJJVCgzKXxCSVQoNSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhdV9yZWN2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYXVfcmVjdi5jCmluZGV4IDIxM2QxOTMuLjYwNzViNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhdV9yZWN2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2F1X3JlY3YuYwpAQCAtMTksMTYgKzE5LDEwIEBACiAjaW5jbHVkZSA8bWxtZV9vc2RlcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpbmNsdWRlIDxldGhlcm5ldC5oPgogI2luY2x1ZGUgPHVzYl9vcHMuaD4KICNpbmNsdWRlIDx3aWZpLmg+CiAjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CiAKLXZvaWQgcnRsODcyM2F1X2luaXRfcmVjdmJ1ZihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJICAgIHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYpCi17Ci19Ci0KIGludCBydGw4NzIzYXVfaW5pdF9yZWN2X3ByaXYoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAlzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYgPSAmcGFkYXB0ZXItPnJlY3Zwcml2OwpAQCAtNDksOSArNDMsNiBAQAogCWlmICghcHJlY3Zwcml2LT5pbnRfaW5fYnVmKQogCQlEQkdfODcyM0EoImFsbG9jX21lbSBmb3IgaW50ZXJydXB0IGluIGVuZHBvaW50IGZhaWwgISEhIVxuIik7CiAKLQkvKiBpbml0IHJlY3ZfYnVmICovCi0JX3J0d19pbml0X3F1ZXVlMjNhKCZwcmVjdnByaXYtPmZyZWVfcmVjdl9idWZfcXVldWUpOwotCiAJc2l6ZSA9IE5SX1JFQ1ZCVUZGICogc2l6ZW9mKHN0cnVjdCByZWN2X2J1Zik7CiAJcHJlY3Zwcml2LT5wcmVjdl9idWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghcHJlY3Zwcml2LT5wcmVjdl9idWYpIHsKQEAgLTY2LDggKzU3LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfUkVDVkJVRkY7IGkrKykgewogCQlJTklUX0xJU1RfSEVBRCgmcHJlY3ZidWYtPmxpc3QpOwogCi0JCXJlcyA9IHJ0d19vc19yZWN2YnVmX3Jlc291cmNlX2FsbG9jMjNhKHBhZGFwdGVyLCBwcmVjdmJ1Zik7Ci0JCWlmIChyZXMgPT0gX0ZBSUwpCisJCXByZWN2YnVmLT5wdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcmVjdmJ1Zi0+cHVyYikKIAkJCWJyZWFrOwogCiAJCXByZWN2YnVmLT5hZGFwdGVyID0gcGFkYXB0ZXI7CkBAIC03NSw4ICs2Niw2IEBACiAJCXByZWN2YnVmKys7CiAJfQogCi0JcHJlY3Zwcml2LT5mcmVlX3JlY3ZfYnVmX3F1ZXVlX2NudCA9IE5SX1JFQ1ZCVUZGOwotCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJlY3Zwcml2LT5yeF9za2JfcXVldWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByZWN2cHJpdi0+ZnJlZV9yZWN2X3NrYl9xdWV1ZSk7CiAKQEAgLTExMCw3ICs5OSwxMSBAQAogCXByZWN2YnVmID0gKHN0cnVjdCByZWN2X2J1ZiAqKXByZWN2cHJpdi0+cHJlY3ZfYnVmOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX1JFQ1ZCVUZGOyBpKyspIHsKLQkJcnR3X29zX3JlY3ZidWZfcmVzb3VyY2VfZnJlZTIzYShwYWRhcHRlciwgcHJlY3ZidWYpOworCQl1c2JfZnJlZV91cmIocHJlY3ZidWYtPnB1cmIpOworCisJCWlmIChwcmVjdmJ1Zi0+cHNrYikKKwkJCWRldl9rZnJlZV9za2JfYW55KHByZWN2YnVmLT5wc2tiKTsKKwogCQlwcmVjdmJ1ZisrOwogCX0KIApAQCAtMTMyLDExICsxMjUsMjAgQEAKIAlza2JfcXVldWVfcHVyZ2UoJnByZWN2cHJpdi0+ZnJlZV9yZWN2X3NrYl9xdWV1ZSk7CiB9CiAKK3N0cnVjdCByZWN2X3N0YXRfY3B1IHsKKwl1MzIgcnhkdzA7CisJdTMyIHJ4ZHcxOworCXUzMiByeGR3MjsKKwl1MzIgcnhkdzM7CisJdTMyIHJ4ZHc0OworCXUzMiByeGR3NTsKK307CisKIHZvaWQgdXBkYXRlX3JlY3ZmcmFtZV9hdHRyaWIoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsCiAJCQkgICAgIHN0cnVjdCByZWN2X3N0YXQgKnByeHN0YXQpCiB7CiAJc3RydWN0IHJ4X3BrdF9hdHRyaWIgKnBhdHRyaWI7Ci0Jc3RydWN0IHJlY3Zfc3RhdCByZXBvcnQ7CisJc3RydWN0IHJlY3Zfc3RhdF9jcHUgcmVwb3J0OwogCXN0cnVjdCByeHJlcG9ydF84NzIzYSAqcHJ4cmVwb3J0OwogCiAJcmVwb3J0LnJ4ZHcwID0gbGUzMl90b19jcHUocHJ4c3RhdC0+cnhkdzApOwpAQCAtMTgyLDI1ICsxODQsNDMgQEAKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gcHJlY3ZmcmFtZS0+YWRhcHRlcjsKIAlzdHJ1Y3QgcnhfcGt0X2F0dHJpYiAqcGF0dHJpYiA9ICZwcmVjdmZyYW1lLT5hdHRyaWI7CiAJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7Ci0Jc3RydWN0IG9kbV9waHlfaW5mbyAqcFBIWUluZm8gPSAoc3RydWN0IG9kbV9waHlfaW5mbyAqKSgmcGF0dHJpYi0+cGh5X2luZm8pOworCXN0cnVjdCBwaHlfaW5mbyAqcFBIWUluZm8gPSAmcGF0dHJpYi0+cGh5X2luZm87CiAJc3RydWN0IG9kbV9wYWNrZXRfaW5mbyBwa3RfaW5mbzsKIAl1OCAqc2EgPSBOVUxMLCAqZGE7CiAJc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByZWN2ZnJhbWUtPnBrdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQl1OCAqd2xhbmhkciA9IHNrYi0+ZGF0YTsKKwlib29sIG1hdGNoYnNzaWQgPSBmYWxzZTsKKwl1OCAqYnNzaWQ7CiAKLQlwa3RfaW5mby5iUGFja2V0TWF0Y2hCU1NJRCA9IGZhbHNlOwotCXBrdF9pbmZvLmJQYWNrZXRUb1NlbGYgPSBmYWxzZTsKLQlwa3RfaW5mby5iUGFja2V0QmVhY29uID0gZmFsc2U7CisJbWF0Y2hic3NpZCA9ICghaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAgICAgICFwYXR0cmliLT5pY3ZfZXJyICYmICFwYXR0cmliLT5jcmNfZXJyKTsKIAotCXBrdF9pbmZvLmJQYWNrZXRNYXRjaEJTU0lEID0KLQkJKCFpZWVlODAyMTFfaXNfY3RsKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKLQkJICFwYXR0cmliLT5pY3ZfZXJyICYmCi0JCSAhcGF0dHJpYi0+Y3JjX2VyciAmJgotCQkgIW1lbWNtcChnZXRfaGRyX2Jzc2lkKHdsYW5oZHIpLAotCQkJIGdldF9ic3NpZCgmcGFkYXB0ZXItPm1sbWVwcml2KSwgRVRIX0FMRU4pKTsKKwlpZiAobWF0Y2hic3NpZCkgeworCQlzd2l0Y2ggKGhkci0+ZnJhbWVfY29udHJvbCAmCisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwKKwkJCQkgICAgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgeworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOgorCQkJYnNzaWQgPSBoZHItPmFkZHIxOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKKwkJCWJzc2lkID0gaGRyLT5hZGRyMjsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KDApOgorCQkJYnNzaWQgPSBoZHItPmFkZHIzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlic3NpZCA9IE5VTEw7CisJCQltYXRjaGJzc2lkID0gZmFsc2U7CisJCX0KKworCQlpZiAoYnNzaWQpCisJCQltYXRjaGJzc2lkID0gZXRoZXJfYWRkcl9lcXVhbCgKKwkJCQlnZXRfYnNzaWQoJnBhZGFwdGVyLT5tbG1lcHJpdiksIGJzc2lkKTsKKwl9CisKKwlwa3RfaW5mby5iUGFja2V0TWF0Y2hCU1NJRCA9IG1hdGNoYnNzaWQ7CiAKIAlkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsKIAlwa3RfaW5mby5iUGFja2V0VG9TZWxmID0gcGt0X2luZm8uYlBhY2tldE1hdGNoQlNTSUQgJiYKQEAgLTIyMiwxMiArMjQyLDEyIEBACiAJcHN0YSA9IHJ0d19nZXRfc3RhaW5mbzIzYShwc3RhcHJpdiwgc2EpOwogCWlmIChwc3RhKSB7CiAJCXBrdF9pbmZvLlN0YXRpb25JRCA9IHBzdGEtPm1hY19pZDsKLQkJLyogcHJpbnRrKCIlcyA9PT4gU3RhdGlvbklEKCVkKVxuIiwgX19GVU5DVElPTl9fLCBwa3RfaW5mby5TdGF0aW9uSUQpOyAqLworCQkvKiBwcmludGsoIiVzID09PiBTdGF0aW9uSUQoJWQpXG4iLCBfX2Z1bmNfXywgcGt0X2luZm8uU3RhdGlvbklEKTsgKi8KIAl9CiAJcGt0X2luZm8uUmF0ZSA9IHBhdHRyaWItPm1jc19yYXRlOwogCiAJT0RNX1BoeVN0YXR1c1F1ZXJ5MjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwgcFBIWUluZm8sCi0JCQkgICAodTggKilwcGh5X3N0YXR1cywgJnBrdF9pbmZvKTsKKwkJCSAgICAgICh1OCAqKXBwaHlfc3RhdHVzLCAmcGt0X2luZm8pOwogCXByZWN2ZnJhbWUtPnBzdGEgPSBOVUxMOwogCWlmIChwa3RfaW5mby5iUGFja2V0TWF0Y2hCU1NJRCAmJgogCSAgICAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSA9PSB0cnVlKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2F1X3htaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3J0bDg3MjNhdV94bWl0LmMKaW5kZXggMmFmMmUzZS4uYTY3ODUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvcnRsODcyM2F1X3htaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC9ydGw4NzIzYXVfeG1pdC5jCkBAIC0yMSwyMCArMjEsNiBAQAogLyogaW5jbHVkZSA8cnRsODE5MmNfaGFsLmg+ICovCiAjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CiAKLXMzMglydGw4NzIzYXVfaW5pdF94bWl0X3ByaXYoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlzdHJ1Y3QgeG1pdF9wcml2CSpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwotCi0JdGFza2xldF9pbml0KCZweG1pdHByaXYtPnhtaXRfdGFza2xldCwKLQkgICAgICh2b2lkKCopKHVuc2lnbmVkIGxvbmcpKXJ0bDg3MjNhdV94bWl0X3Rhc2tsZXQsCi0JICAgICAodW5zaWduZWQgbG9uZylwYWRhcHRlcik7Ci0JcmV0dXJuIF9TVUNDRVNTOwotfQotCi12b2lkCXJ0bDg3MjNhdV9mcmVlX3htaXRfcHJpdihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQotewotfQotCiBzdGF0aWMgdm9pZCBkb19xdWV1ZV9zZWxlY3Qoc3RydWN0IHJ0d19hZGFwdGVyCSpwYWRhcHRlciwgc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWIpCiB7CiAJdTggcXNlbDsKQEAgLTg3LDE5ICs3MywxOCBAQAogCWlmICgocGF0dHJpYi0+ZW5jcnlwdCA+IDApICYmICFwYXR0cmliLT5ic3dlbmMpIHsKIAkJc3dpdGNoIChwYXR0cmliLT5lbmNyeXB0KSB7CiAJCS8qIFNFQ19UWVBFICovCi0JCWNhc2UgX1dFUDQwXzoKLQkJY2FzZSBfV0VQMTA0XzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CiAJCQlwdHhkZXNjLT50eGR3MSB8PSBjcHVfdG9fbGUzMigoMHgwMTw8MjIpJjB4MDBjMDAwMDApOwogCQkJYnJlYWs7Ci0JCWNhc2UgX1RLSVBfOgotCQljYXNlIF9US0lQX1dUTUlDXzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQkJLyogcHR4ZGVzYy0+dHhkdzEgfD0gY3B1X3RvX2xlMzIoKDB4MDI8PDIyKSYweDAwYzAwMDAwKTsgKi8KIAkJCXB0eGRlc2MtPnR4ZHcxIHw9IGNwdV90b19sZTMyKCgweDAxPDwyMikmMHgwMGMwMDAwMCk7CiAJCQlicmVhazsKLQkJY2FzZSBfQUVTXzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQkJcHR4ZGVzYy0+dHhkdzEgfD0gY3B1X3RvX2xlMzIoKDB4MDM8PDIyKSYweDAwYzAwMDAwKTsKIAkJCWJyZWFrOwotCQljYXNlIF9OT19QUklWQUNZXzoKKwkJY2FzZSAwOgogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTMwOSwxMCArMjk0LDExIEBACiAJcmV0dXJuIHB1bGw7CiB9CiAKLXN0YXRpYyBzMzIgcnR3X2R1bXBfeGZyYW1lKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQorc3RhdGljIGludCBydHdfZHVtcF94ZnJhbWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQogewotCXMzMiByZXQgPSBfU1VDQ0VTUzsKLQlzMzIgaW5uZXJfcmV0ID0gX1NVQ0NFU1M7CisJaW50IHJldCA9IF9TVUNDRVNTOworCWludCBpbm5lcl9yZXQgPSBfU1VDQ0VTUzsKIAlpbnQgdCwgc3osIHdfc3osIHB1bGwgPSAwOwogCXU4ICptZW1fYWRkcjsKIAl1MzIgZmZfaHdhZGRyOwpAQCAtMzU4LDcgKzM0NCw4IEBACiAJCX0KIAogCQlmZl9od2FkZHIgPSBydHdfZ2V0X2ZmX2h3YWRkcjIzYShweG1pdGZyYW1lKTsKLQkJaW5uZXJfcmV0ID0gcnR3X3dyaXRlX3BvcnQocGFkYXB0ZXIsIGZmX2h3YWRkciwgd19zeiwgcHhtaXRidWYpOworCQlpbm5lcl9yZXQgPSBydGw4NzIzYXVfd3JpdGVfcG9ydChwYWRhcHRlciwgZmZfaHdhZGRyLAorCQkJCQkJIHdfc3osIHB4bWl0YnVmKTsKIAkJcnR3X2NvdW50X3R4X3N0YXRzMjNhKHBhZGFwdGVyLCBweG1pdGZyYW1lLCBzeik7CiAKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3htaXRfY18sIF9kcnZfaW5mb18sCkBAIC0zNzcsOCArMzY0LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zMzIgcnRsODcyM2F1X3htaXRmcmFtZV9jb21wbGV0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSBzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYsIHN0cnVjdCB4bWl0X2J1ZiAqcHhtaXRidWYpCitib29sIHJ0bDg3MjNhdV94bWl0ZnJhbWVfY29tcGxldGUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCQkgIHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwKKwkJCQkgIHN0cnVjdCB4bWl0X2J1ZiAqcHhtaXRidWYpCiB7CiAJc3RydWN0IGh3X3htaXQgKnBod3htaXRzOwogCXN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lOwpAQCAtNDI3LDkgKzQxNSwxMCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgczMyIHhtaXRmcmFtZV9kaXJlY3Qoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpCitzdGF0aWMgaW50IHhtaXRmcmFtZV9kaXJlY3Qoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgICBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKIHsKLQlzMzIgcmVzID0gX1NVQ0NFU1M7CisJaW50IHJlczsKIAogCXJlcyA9IHJ0d194bWl0ZnJhbWVfY29hbGVzY2UyM2EocGFkYXB0ZXIsIHB4bWl0ZnJhbWUtPnBrdCwgcHhtaXRmcmFtZSk7CiAJaWYgKHJlcyA9PSBfU1VDQ0VTUykKQEAgLTQ0Miw5ICs0MzEsMTAgQEAKICAqCXRydWUJZHVtcCBwYWNrZXQgZGlyZWN0bHkKICAqCWZhbHNlCWVucXVldWUgcGFja2V0CiAgKi8KLXN0YXRpYyBzMzIgcHJlX3htaXRmcmFtZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKK2Jvb2wgcnRsODcyM2F1X2hhbF94bWl0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKIHsKLQlzMzIgcmVzOworCWludCByZXM7CiAJc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZiA9IE5VTEw7CiAJc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2ID0gJnBhZGFwdGVyLT54bWl0cHJpdjsKIAlzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYiA9ICZweG1pdGZyYW1lLT5hdHRyaWI7CkBAIC01MTMsMjYgKzUwMywxNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotczMyIHJ0bDg3MjNhdV9tZ250X3htaXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWUpCitpbnQgcnRsODcyM2F1X21nbnRfeG1pdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJc3RydWN0IHhtaXRfZnJhbWUgKnBtZ250ZnJhbWUpCiB7CiAJcmV0dXJuIHJ0d19kdW1wX3hmcmFtZShwYWRhcHRlciwgcG1nbnRmcmFtZSk7CiB9CiAKLS8qCi0gKiBSZXR1cm4KLSAqCXRydWUJZHVtcCBwYWNrZXQgZGlyZWN0bHkgb2sKLSAqCWZhbHNlCXRlbXBvcmFyeSBjYW4ndCB0cmFuc21pdCBwYWNrZXRzIHRvIGhhcmR3YXJlCi0gKi8KLXMzMiBydGw4NzIzYXVfaGFsX3htaXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpCi17Ci0JcmV0dXJuIHByZV94bWl0ZnJhbWUocGFkYXB0ZXIsIHB4bWl0ZnJhbWUpOwotfQotCi1zMzIJcnRsODcyM2F1X2hhbF94bWl0ZnJhbWVfZW5xdWV1ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSkKK2ludCBydGw4NzIzYXVfaGFsX3htaXRmcmFtZV9lbnF1ZXVlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKQogewogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0JczMyIGVycjsKKwlpbnQgZXJyOwogCiAJZXJyID0gcnR3X3htaXRmcmFtZV9lbnF1ZXVlMjNhKHBhZGFwdGVyLCBweG1pdGZyYW1lKTsKIAlpZiAoZXJyICE9IF9TVUNDRVNTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC91c2JfaGFsaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvdXNiX2hhbGluaXQuYwppbmRleCBlMjA2ODI5Li42YTdmYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC91c2JfaGFsaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3VzYl9oYWxpbml0LmMKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgPHVzYl9vcHMuaD4KLSNpbmNsdWRlIDx1c2JfaGFsLmg+Ci0jaW5jbHVkZSA8dXNiX29zaW50Zi5oPgogCiBzdGF0aWMgdm9pZAogX0NvbmZpZ0NoaXBPdXRFUChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1OCBOdW1PdXRQaXBlKQpAQCAtMzgsNyArMzYsNyBAQAogCXBIYWxEYXRhLT5PdXRFcE51bWJlciA9IDA7CiAKIAkvKiAgTm9ybWFsIGFuZCBIaWdoIHF1ZXVlICovCi0JdmFsdWU4ID0gcnR3X3JlYWQ4KHBBZGFwdGVyLCAoUkVHX05PUk1BTF9TSUVfRVAgKyAxKSk7CisJdmFsdWU4ID0gcnRsODcyM2F1X3JlYWQ4KHBBZGFwdGVyLCAoUkVHX05PUk1BTF9TSUVfRVAgKyAxKSk7CiAKIAlpZiAodmFsdWU4ICYgVVNCX05PUk1BTF9TSUVfRVBfTUFTSykgewogCQlwSGFsRGF0YS0+T3V0RXBRdWV1ZVNlbCB8PSBUWF9TRUxFX0hROwpAQCAtNTEsNyArNDksNyBAQAogCX0KIAogCS8qICBMb3cgcXVldWUgKi8KLQl2YWx1ZTggPSBydHdfcmVhZDgocEFkYXB0ZXIsIChSRUdfTk9STUFMX1NJRV9FUCArIDIpKTsKKwl2YWx1ZTggPSBydGw4NzIzYXVfcmVhZDgocEFkYXB0ZXIsIChSRUdfTk9STUFMX1NJRV9FUCArIDIpKTsKIAlpZiAodmFsdWU4ICYgVVNCX05PUk1BTF9TSUVfRVBfTUFTSykgewogCQlwSGFsRGF0YS0+T3V0RXBRdWV1ZVNlbCB8PSBUWF9TRUxFX0xROwogCQlwSGFsRGF0YS0+T3V0RXBOdW1iZXIrKzsKQEAgLTgyLDE5ICs4MCwxMSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDg3MjNhdV9pbnRlcmZhY2VfY29uZmlndXJlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCit2b2lkIHJ0bDg3MjNhdV9jaGlwX2NvbmZpZ3VyZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBoYWxfZGF0YV84NzIzYSAqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCXN0cnVjdCBkdm9ial9wcml2ICpwZHZvYmpwcml2ID0gYWRhcHRlcl90b19kdm9iaihwYWRhcHRlcik7CiAKLQlpZiAocGR2b2JqcHJpdi0+aXNoaWdoc3BlZWQgPT0gdHJ1ZSkgewotCQkvKiA1MTIgYnl0ZXMgKi8KLQkJcEhhbERhdGEtPlVzYkJ1bGtPdXRTaXplID0gVVNCX0hJR0hfU1BFRURfQlVMS19TSVpFOwotCX0gZWxzZSB7Ci0JCS8qIDY0IGJ5dGVzICovCi0JCXBIYWxEYXRhLT5Vc2JCdWxrT3V0U2l6ZSA9IFVTQl9GVUxMX1NQRUVEX0JVTEtfU0laRTsKLQl9Ci0KIAlwSGFsRGF0YS0+aW50ZXJmYWNlSW5kZXggPSBwZHZvYmpwcml2LT5JbnRlcmZhY2VOdW1iZXI7CiAKIAlydGw4NzIzYXVfc2V0X3F1ZXVlX3BpcGVfbWFwcGluZyhwYWRhcHRlciwKQEAgLTEwMiwxNSArOTIsMTUgQEAKIAkJCQkJIHBkdm9ianByaXYtPlJ0TnVtT3V0UGlwZXMpOwogfQogCi1zdGF0aWMgdTggX0luaXRQb3dlck9uKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitzdGF0aWMgaW50IF9Jbml0UG93ZXJPbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXU4IHN0YXR1cyA9IF9TVUNDRVNTOworCWludCBzdGF0dXMgPSBfU1VDQ0VTUzsKIAl1MTYgdmFsdWUxNiA9IDA7CiAJdTggdmFsdWU4ID0gMDsKIAogCS8qICBSU1ZfQ1RSTCAweDFDWzc6MF0gPSAweDAwCiAJICAgIHVubG9jayBJU08vQ0xLL1Bvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlydHdfd3JpdGU4KHBhZGFwdGVyLCBSRUdfUlNWX0NUUkwsIDB4MCk7CisJcnRsODcyM2F1X3dyaXRlOChwYWRhcHRlciwgUkVHX1JTVl9DVFJMLCAweDApOwogCiAJLyogIEhXIFBvd2VyIG9uIHNlcXVlbmNlICovCiAJaWYgKCFIYWxQd3JTZXFDbWRQYXJzaW5nMjNhKHBhZGFwdGVyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywKQEAgLTExOCwyMCArMTA4LDIwIEBACiAJCXJldHVybiBfRkFJTDsKIAogCS8qICAweDA0WzE5XSA9IDEsIHN1Z2dlc3QgYnkgSmFja2llIDIwMTEuMDUuMDksIHJlc2V0IDgwNTEgKi8KLQl2YWx1ZTggPSBydHdfcmVhZDgocGFkYXB0ZXIsIFJFR19BUFNfRlNNQ08rMik7Ci0JcnR3X3dyaXRlOChwYWRhcHRlciwgUkVHX0FQU19GU01DTyArIDIsICh2YWx1ZTggfCBCSVQzKSk7CisJdmFsdWU4ID0gcnRsODcyM2F1X3JlYWQ4KHBhZGFwdGVyLCBSRUdfQVBTX0ZTTUNPKzIpOworCXJ0bDg3MjNhdV93cml0ZTgocGFkYXB0ZXIsIFJFR19BUFNfRlNNQ08gKyAyLCB2YWx1ZTggfCBCSVQoMykpOwogCiAJLyogIEVuYWJsZSBNQUMgRE1BL1dNQUMvU0NIRURVTEUvU0VDIGJsb2NrICovCiAJLyogIFNldCBDUiBiaXQxMCB0byBlbmFibGUgMzJrIGNhbGlicmF0aW9uLiBTdWdnZXN0ZWQgYnkgU0QxIEdpbW15LgogCSAgICBBZGRlZCBieSB0eW5saS4gMjAxMS4wOC4zMS4gKi8KLQl2YWx1ZTE2ID0gcnR3X3JlYWQxNihwYWRhcHRlciwgUkVHX0NSKTsKKwl2YWx1ZTE2ID0gcnRsODcyM2F1X3JlYWQxNihwYWRhcHRlciwgUkVHX0NSKTsKIAl2YWx1ZTE2IHw9IChIQ0lfVFhETUFfRU4gfCBIQ0lfUlhETUFfRU4gfCBUWERNQV9FTiB8IFJYRE1BX0VOIHwKIAkJICAgIFBST1RPQ09MX0VOIHwgU0NIRURVTEVfRU4gfCBNQUNUWEVOIHwgTUFDUlhFTiB8CiAJCSAgICBFTlNFQyB8IENBTFRNUl9FTik7Ci0JcnR3X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19DUiwgdmFsdWUxNik7CisJcnRsODcyM2F1X3dyaXRlMTYocGFkYXB0ZXIsIFJFR19DUiwgdmFsdWUxNik7CiAKIAkvKiBmb3IgRWZ1c2UgUEcsIHN1Z2dlc3QgYnkgSmFja2llIDIwMTEuMTEuMjMgKi8KLQlQSFlfU2V0QkJSZWcocGFkYXB0ZXIsIFJFR19FRlVTRV9DVFJMLCBCSVQyOHxCSVQyOXxCSVQzMCwgMHgwNik7CisJUEhZX1NldEJCUmVnKHBhZGFwdGVyLCBSRUdfRUZVU0VfQ1RSTCwgQklUKDI4KXxCSVQoMjkpfEJJVCgzMCksIDB4MDYpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE0MywxMCArMTMzLDEwIEBACiAKIAkvKiAgSElTUiAtIHR1cm4gYWxsIG9uICovCiAJdmFsdWUzMiA9IDB4RkZGRkZGRkY7Ci0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX0hJU1IsIHZhbHVlMzIpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19ISVNSLCB2YWx1ZTMyKTsKIAogCS8qICBISU1SIC0gdHVybiBhbGwgb24gKi8KLQlydHdfd3JpdGUzMihBZGFwdGVyLCBSRUdfSElNUiwgdmFsdWUzMik7CisJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgUkVHX0hJTVIsIHZhbHVlMzIpOwogfQogCiBzdGF0aWMgdm9pZCBfSW5pdFF1ZXVlUmVzZXJ2ZWRQYWdlKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKQEAgLTE2MCwzNyArMTUwLDMzIEBACiAJdTMyIHZhbHVlMzI7CiAJdTggdmFsdWU4OwogCWJvb2wgYldpRmlDb25maWcgPSBwcmVnaXN0cnlwcml2LT53aWZpX3NwZWM7Ci0JLyogdTMyCQkJdHhRUGFnZU51bSwgdHhRUGFnZVVuaXQsIHR4UVJlbWFpblBhZ2U7ICovCiAKLQl7IC8qIGZvciBXTU0gKi8KLQkJLyogUlRfQVNTRVJUKChvdXRFUE51bT49IDIpLCAoImZvciBXTU0gLCBudW1iZXIgb2Ygb3V0LWVwICIKLQkJICAgIm11c3QgbW9yZSB0aGFuIG9yIGVxdWFsIHRvIDIhXG4iKSk7ICovCisJLyogUlRfQVNTRVJUKChvdXRFUE51bT49IDIpLCAoImZvciBXTU0gLCBudW1iZXIgb2Ygb3V0LWVwICIKKwkgICAibXVzdCBtb3JlIHRoYW4gb3IgZXF1YWwgdG8gMiFcbiIpKTsgKi8KIAotCQludW1QdWJRID0gYldpRmlDb25maWcgPwotCQkJV01NX05PUk1BTF9QQUdFX05VTV9QVUJRIDogTk9STUFMX1BBR0VfTlVNX1BVQlE7CisJbnVtUHViUSA9IGJXaUZpQ29uZmlnID8gV01NX05PUk1BTF9QQUdFX05VTV9QVUJRIDogTk9STUFMX1BBR0VfTlVNX1BVQlE7CiAKLQkJaWYgKHBIYWxEYXRhLT5PdXRFcFF1ZXVlU2VsICYgVFhfU0VMRV9IUSkgewotCQkJbnVtSFEgPSBiV2lGaUNvbmZpZyA/Ci0JCQkJV01NX05PUk1BTF9QQUdFX05VTV9IUFEgOiBOT1JNQUxfUEFHRV9OVU1fSFBROwotCQl9Ci0KLQkJaWYgKHBIYWxEYXRhLT5PdXRFcFF1ZXVlU2VsICYgVFhfU0VMRV9MUSkgewotCQkJbnVtTFEgPSBiV2lGaUNvbmZpZyA/Ci0JCQkJV01NX05PUk1BTF9QQUdFX05VTV9MUFEgOiBOT1JNQUxfUEFHRV9OVU1fTFBROwotCQl9Ci0JCS8qICBOT1RFOiBUaGlzIHN0ZXAgc2hhbGwgYmUgcHJvY2VlZCBiZWZvcmUKLQkJICAgIHdyaXR0aW5nIFJFR19SUVBOLiAqLwotCQlpZiAocEhhbERhdGEtPk91dEVwUXVldWVTZWwgJiBUWF9TRUxFX05RKSB7Ci0JCQludW1OUSA9IGJXaUZpQ29uZmlnID8KLQkJCQlXTU1fTk9STUFMX1BBR0VfTlVNX05QUSA6IE5PUk1BTF9QQUdFX05VTV9OUFE7Ci0JCX0KLQkJdmFsdWU4ID0gKHU4KV9OUFEobnVtTlEpOwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19SUVBOX05QUSwgdmFsdWU4KTsKKwlpZiAocEhhbERhdGEtPk91dEVwUXVldWVTZWwgJiBUWF9TRUxFX0hRKSB7CisJCW51bUhRID0gYldpRmlDb25maWcgPworCQkJV01NX05PUk1BTF9QQUdFX05VTV9IUFEgOiBOT1JNQUxfUEFHRV9OVU1fSFBROwogCX0KIAorCWlmIChwSGFsRGF0YS0+T3V0RXBRdWV1ZVNlbCAmIFRYX1NFTEVfTFEpIHsKKwkJbnVtTFEgPSBiV2lGaUNvbmZpZyA/CisJCQlXTU1fTk9STUFMX1BBR0VfTlVNX0xQUSA6IE5PUk1BTF9QQUdFX05VTV9MUFE7CisJfQorCS8qICBOT1RFOiBUaGlzIHN0ZXAgc2hhbGwgYmUgcHJvY2VlZCBiZWZvcmUKKwkgICAgd3JpdHRpbmcgUkVHX1JRUE4uICovCisJaWYgKHBIYWxEYXRhLT5PdXRFcFF1ZXVlU2VsICYgVFhfU0VMRV9OUSkgeworCQludW1OUSA9IGJXaUZpQ29uZmlnID8KKwkJCVdNTV9OT1JNQUxfUEFHRV9OVU1fTlBRIDogTk9STUFMX1BBR0VfTlVNX05QUTsKKwl9CisJdmFsdWU4ID0gKHU4KV9OUFEobnVtTlEpOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1JRUE5fTlBRLCB2YWx1ZTgpOworCiAJLyogIFRYIERNQSAqLwogCXZhbHVlMzIgPSBfSFBRKG51bUhRKSB8IF9MUFEobnVtTFEpIHwgX1BVQlEobnVtUHViUSkgfCBMRF9SUVBOOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19SUVBOLCB2YWx1ZTMyKTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfUlFQTiwgdmFsdWUzMik7CiB9CiAKIHN0YXRpYyB2b2lkIF9Jbml0VHhCdWZmZXJCb3VuZGFyeShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpCkBAIC0yMDQsMTEgKzE5MCwxMSBAQAogCWVsc2UgLyogZm9yIFdNTSAqLwogCQl0eHBrdGJ1Zl9ibmR5ID0gV01NX05PUk1BTF9UWF9QQUdFX0JPVU5EQVJZOwogCi0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfVFhQS1RCVUZfQkNOUV9CRE5ZLCB0eHBrdGJ1Zl9ibmR5KTsKLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19UWFBLVEJVRl9NR1FfQkROWSwgdHhwa3RidWZfYm5keSk7Ci0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfVFhQS1RCVUZfV01BQ19MQktfQkZfSEQsIHR4cGt0YnVmX2JuZHkpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1RSWEZGX0JORFksIHR4cGt0YnVmX2JuZHkpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1RERUNUUkwrMSwgdHhwa3RidWZfYm5keSk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfVFhQS1RCVUZfQkNOUV9CRE5ZLCB0eHBrdGJ1Zl9ibmR5KTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19UWFBLVEJVRl9NR1FfQkROWSwgdHhwa3RidWZfYm5keSk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfVFhQS1RCVUZfV01BQ19MQktfQkZfSEQsIHR4cGt0YnVmX2JuZHkpOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1RSWEZGX0JORFksIHR4cGt0YnVmX2JuZHkpOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1RERUNUUkwrMSwgdHhwa3RidWZfYm5keSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9Jbml0UGFnZUJvdW5kYXJ5KHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKQEAgLTIxNyw3ICsyMDMsNyBAQAogCS8qIHNyYW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odGltZShOVUxMKSkpOyAqLwogCXUxNiByeGZmX2JuZHkgPSAweDI3RkY7LyogcmFuZCgpICUgMSkgPyAweDI3RkYgOiAweDIzRkY7ICovCiAKLQlydHdfd3JpdGUxNihBZGFwdGVyLCAoUkVHX1RSWEZGX0JORFkgKyAyKSwgcnhmZl9ibmR5KTsKKwlydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCAoUkVHX1RSWEZGX0JORFkgKyAyKSwgcnhmZl9ibmR5KTsKIAogCS8qICBUT0RPOiA/PyBzaGFsbCB3ZSBzZXQgdHggYm91bmRhcnk/ICovCiB9CkBAIC0yMjYsMTMgKzIxMiwxMyBAQAogX0luaXROb3JtYWxDaGlwUmVnUHJpb3JpdHkoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLCB1MTYgYmVRLCB1MTYgYmtRLAogCQkJICAgdTE2IHZpUSwgdTE2IHZvUSwgdTE2IG1ndFEsIHUxNiBoaVEpCiB7Ci0JdTE2IHZhbHVlMTYgPSBydHdfcmVhZDE2KEFkYXB0ZXIsIFJFR19UUlhETUFfQ1RSTCkgJiAweDc7CisJdTE2IHZhbHVlMTYgPSBydGw4NzIzYXVfcmVhZDE2KEFkYXB0ZXIsIFJFR19UUlhETUFfQ1RSTCkgJiAweDc7CiAKIAl2YWx1ZTE2IHw9IF9UWERNQV9CRVFfTUFQKGJlUSkgfCBfVFhETUFfQktRX01BUChia1EpIHwKIAkJX1RYRE1BX1ZJUV9NQVAodmlRKSB8IF9UWERNQV9WT1FfTUFQKHZvUSkgfAogCQlfVFhETUFfTUdRX01BUChtZ3RRKSB8IF9UWERNQV9ISVFfTUFQKGhpUSk7CiAKLQlydHdfd3JpdGUxNihBZGFwdGVyLCBSRUdfVFJYRE1BX0NUUkwsIHZhbHVlMTYpOworCXJ0bDg3MjNhdV93cml0ZTE2KEFkYXB0ZXIsIFJFR19UUlhETUFfQ1RSTCwgdmFsdWUxNik7CiB9CiAKIHN0YXRpYyB2b2lkIF9Jbml0Tm9ybWFsQ2hpcE9uZU91dEVwUHJpb3JpdHkoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQpAQCAtMzU2LDExICszNDIsMTEgQEAKIHsKIAl1MzIgdmFsdWUzMjsKIAotCXZhbHVlMzIgPSBydHdfcmVhZDMyKEFkYXB0ZXIsIFJFR19DUik7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIoQWRhcHRlciwgUkVHX0NSKTsKIAogCS8qICBUT0RPOiB1c2UgdGhlIG90aGVyIGZ1bmN0aW9uIHRvIHNldCBuZXR3b3JrIHR5cGUgKi8KIAl2YWx1ZTMyID0gKHZhbHVlMzIgJiB+TUFTS19ORVRUWVBFKSB8IF9ORVRUWVBFKE5UX0xJTktfQVApOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19DUiwgdmFsdWUzMik7CisJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgUkVHX0NSLCB2YWx1ZTMyKTsKIH0KIAogc3RhdGljIHZvaWQgX0luaXRUcmFuc2ZlclBhZ2VTaXplKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKQEAgLTM2OSwxMiArMzU1LDEyIEBACiAKIAl1OCB2YWx1ZTg7CiAJdmFsdWU4ID0gX1BTUlgoUEJQXzEyOCkgfCBfUFNUWChQQlBfMTI4KTsKLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19QQlAsIHZhbHVlOCk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfUEJQLCB2YWx1ZTgpOwogfQogCiBzdGF0aWMgdm9pZCBfSW5pdERyaXZlckluZm9TaXplKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwgdTggZHJ2SW5mb1NpemUpCiB7Ci0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfUlhfRFJWSU5GT19TWiwgZHJ2SW5mb1NpemUpOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1JYX0RSVklORk9fU1osIGRydkluZm9TaXplKTsKIH0KIAogc3RhdGljIHZvaWQgX0luaXRXTUFDU2V0dGluZyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpCkBAIC0zODksMTUgKzM3NSwxNSBAQAogCiAJLyogIHNvbWUgUkVHX1JDUiB3aWxsIGJlIG1vZGlmaWVkIGxhdGVyIGJ5CiAJICAgIHBoeV9Db25maWdNQUNXaXRoSGVhZGVyRmlsZSgpICovCi0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX1JDUiwgcEhhbERhdGEtPlJlY2VpdmVDb25maWcpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19SQ1IsIHBIYWxEYXRhLT5SZWNlaXZlQ29uZmlnKTsKIAogCS8qICBBY2NlcHQgYWxsIG11bHRpY2FzdCBhZGRyZXNzICovCi0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX01BUiwgMHhGRkZGRkZGRik7Ci0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX01BUiArIDQsIDB4RkZGRkZGRkYpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19NQVIsIDB4RkZGRkZGRkYpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19NQVIgKyA0LCAweEZGRkZGRkZGKTsKIAogCS8qICBBY2NlcHQgYWxsIGRhdGEgZnJhbWVzICovCiAJLyogdmFsdWUxNiA9IDB4RkZGRjsgKi8KLQkvKiBydHdfd3JpdGUxNihBZGFwdGVyLCBSRUdfUlhGTFRNQVAyLCB2YWx1ZTE2KTsgKi8KKwkvKiBydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCBSRUdfUlhGTFRNQVAyLCB2YWx1ZTE2KTsgKi8KIAogCS8qICAyMDEwLjA5LjA4IGhwZmFuICovCiAJLyogIFNpbmNlIEFERiBpcyByZW1vdmVkIGZyb20gUkNSLCBwcy1wb2xsIHdpbGwgbm90IGJlIGluZGljYXRlCkBAIC00MDUsMTQgKzM5MSwxNCBAQAogCS8qICBSeEZpbHRlck1hcCBzaG91bGQgbWFzayBwcy1wb2xsIHRvIGd1cmFudGVlIEFQIG1vZGUgY2FuCiAJICAgIHJ4IHBzLXBvbGwuICovCiAJLyogdmFsdWUxNiA9IDB4NDAwOyAqLwotCS8qIHJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19SWEZMVE1BUDEsIHZhbHVlMTYpOyAqLworCS8qIHJ0bDg3MjNhdV93cml0ZTE2KEFkYXB0ZXIsIFJFR19SWEZMVE1BUDEsIHZhbHVlMTYpOyAqLwogCiAJLyogIEFjY2VwdCBhbGwgbWFuYWdlbWVudCBmcmFtZXMgKi8KIAkvKiB2YWx1ZTE2ID0gMHhGRkZGOyAqLwotCS8qIHJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19SWEZMVE1BUDAsIHZhbHVlMTYpOyAqLworCS8qIHJ0bDg3MjNhdV93cml0ZTE2KEFkYXB0ZXIsIFJFR19SWEZMVE1BUDAsIHZhbHVlMTYpOyAqLwogCiAJLyogZW5hYmxlIFJYX1NISUZUIGJpdHMgKi8KLQkvKiBydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19UUlhETUFfQ1RSTCwgcnR3X3JlYWQ4KEFkYXB0ZXIsCisJLyogcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfVFJYRE1BX0NUUkwsIHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLAogCSAgIFJFR19UUlhETUFfQ1RSTCl8QklUKDEpKTsgKi8KIH0KIApAQCAtNDIyLDQ5ICs0MDgsNDkgQEAKIAl1MzIgdmFsdWUzMjsKIAogCS8qICBSZXNwb25zZSBSYXRlIFNldCAqLwotCXZhbHVlMzIgPSBydHdfcmVhZDMyKEFkYXB0ZXIsIFJFR19SUlNSKTsKKwl2YWx1ZTMyID0gcnRsODcyM2F1X3JlYWQzMihBZGFwdGVyLCBSRUdfUlJTUik7CiAJdmFsdWUzMiAmPSB+UkFURV9CSVRNQVBfQUxMOwogCXZhbHVlMzIgfD0gUkFURV9SUlNSX0NDS19PTkxZXzFNOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19SUlNSLCB2YWx1ZTMyKTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfUlJTUiwgdmFsdWUzMik7CiAKIAkvKiAgQ0YtRU5EIFRocmVzaG9sZCAqLwotCS8qIG1fc3BJb0Jhc2UtPnJ0d193cml0ZTgoUkVHX0NGRU5EX1RILCAweDEpOyAqLworCS8qIG1fc3BJb0Jhc2UtPnJ0bDg3MjNhdV93cml0ZTgoUkVHX0NGRU5EX1RILCAweDEpOyAqLwogCiAJLyogIFNJRlMgKHVzZWQgaW4gTkFWKSAqLwogCXZhbHVlMTYgPSBfU1BFQ19TSUZTX0NDSygweDEwKSB8IF9TUEVDX1NJRlNfT0ZETSgweDEwKTsKLQlydHdfd3JpdGUxNihBZGFwdGVyLCBSRUdfU1BFQ19TSUZTLCB2YWx1ZTE2KTsKKwlydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCBSRUdfU1BFQ19TSUZTLCB2YWx1ZTE2KTsKIAogCS8qICBSZXRyeSBMaW1pdCAqLwogCXZhbHVlMTYgPSBfTFJMKDB4MzApIHwgX1NSTCgweDMwKTsKLQlydHdfd3JpdGUxNihBZGFwdGVyLCBSRUdfUkwsIHZhbHVlMTYpOworCXJ0bDg3MjNhdV93cml0ZTE2KEFkYXB0ZXIsIFJFR19STCwgdmFsdWUxNik7CiB9CiAKIHN0YXRpYyB2b2lkIF9Jbml0UmF0ZUZhbGxiYWNrKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKIHsKIAkvKiAgU2V0IERhdGEgQXV0byBSYXRlIEZhbGxiYWNrIFJldHJ5IENvdW50IHJlZ2lzdGVyLiAqLwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19EQVJGUkMsIDB4MDAwMDAwMDApOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19EQVJGUkMrNCwgMHgxMDA4MDQwNCk7Ci0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX1JBUkZSQywgMHgwNDAzMDIwMSk7Ci0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX1JBUkZSQys0LCAweDA4MDcwNjA1KTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfREFSRlJDLCAweDAwMDAwMDAwKTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfREFSRlJDKzQsIDB4MTAwODA0MDQpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19SQVJGUkMsIDB4MDQwMzAyMDEpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19SQVJGUkMrNCwgMHgwODA3MDYwNSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9Jbml0RURDQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJLyogIFNldCBTcGVjIFNJRlMgKHVzZWQgaW4gTkFWKSAqLwotCXJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19TUEVDX1NJRlMsIDB4MTAwYSk7Ci0JcnR3X3dyaXRlMTYoQWRhcHRlciwgUkVHX01BQ19TUEVDX1NJRlMsIDB4MTAwYSk7CisJcnRsODcyM2F1X3dyaXRlMTYoQWRhcHRlciwgUkVHX1NQRUNfU0lGUywgMHgxMDBhKTsKKwlydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCBSRUdfTUFDX1NQRUNfU0lGUywgMHgxMDBhKTsKIAogCS8qICBTZXQgU0lGUyBmb3IgQ0NLICovCi0JcnR3X3dyaXRlMTYoQWRhcHRlciwgUkVHX1NJRlNfQ1RYLCAweDEwMGEpOworCXJ0bDg3MjNhdV93cml0ZTE2KEFkYXB0ZXIsIFJFR19TSUZTX0NUWCwgMHgxMDBhKTsKIAogCS8qICBTZXQgU0lGUyBmb3IgT0ZETSAqLwotCXJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19TSUZTX1RSWCwgMHgxMDBhKTsKKwlydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCBSRUdfU0lGU19UUlgsIDB4MTAwYSk7CiAKIAkvKiAgVFhPUCAqLwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19FRENBX0JFX1BBUkFNLCAweDAwNUVBNDJCKTsKLQlydHdfd3JpdGUzMihBZGFwdGVyLCBSRUdfRURDQV9CS19QQVJBTSwgMHgwMDAwQTQ0Rik7Ci0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX0VEQ0FfVklfUEFSQU0sIDB4MDA1RUEzMjQpOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19FRENBX1ZPX1BBUkFNLCAweDAwMkZBMjI2KTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfRURDQV9CRV9QQVJBTSwgMHgwMDVFQTQyQik7CisJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgUkVHX0VEQ0FfQktfUEFSQU0sIDB4MDAwMEE0NEYpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19FRENBX1ZJX1BBUkFNLCAweDAwNUVBMzI0KTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfRURDQV9WT19QQVJBTSwgMHgwMDJGQTIyNik7CiB9CiAKIHN0YXRpYyB2b2lkIF9Jbml0SFdMZWQoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQpAQCAtNDgxLDIxICs0NjcsMjEgQEAKIAogc3RhdGljIHZvaWQgX0luaXRSREdTZXR0aW5nKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKIHsKLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19SRF9DVFJMLCAweEZGKTsKLQlydHdfd3JpdGUxNihBZGFwdGVyLCBSRUdfUkRfTkFWX05YVCwgMHgyMDApOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1JEX1JFU1BfUEtUX1RILCAweDA1KTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19SRF9DVFJMLCAweEZGKTsKKwlydGw4NzIzYXVfd3JpdGUxNihBZGFwdGVyLCBSRUdfUkRfTkFWX05YVCwgMHgyMDApOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1JEX1JFU1BfUEtUX1RILCAweDA1KTsKIH0KIAogc3RhdGljIHZvaWQgX0luaXRSZXRyeUZ1bmN0aW9uKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKIHsKIAl1OCB2YWx1ZTg7CiAKLQl2YWx1ZTggPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwpOworCXZhbHVlOCA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCk7CiAJdmFsdWU4IHw9IEVOX0FNUERVX1JUWV9ORVc7Ci0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfRldIV19UWFFfQ1RSTCwgdmFsdWU4KTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19GV0hXX1RYUV9DVFJMLCB2YWx1ZTgpOwogCiAJLyogIFNldCBBQ0sgdGltZW91dCAqLwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX0FDS1RPLCAweDQwKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19BQ0tUTywgMHg0MCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU5OSwzNSArNTg1LDMzIEBACiAJZW51bSBydF9yZl9wb3dlcl9zdGF0ZSByZnBvd2Vyc3RhdGUgPSByZl9vZmY7CiAKIAlpZiAocEFkYXB0ZXItPnB3cmN0cmxwcml2LmJIV1Bvd2VyZG93bikgewotCQl2YWw4ID0gcnR3X3JlYWQ4KHBBZGFwdGVyLCBSRUdfSFNJU1IpOworCQl2YWw4ID0gcnRsODcyM2F1X3JlYWQ4KHBBZGFwdGVyLCBSRUdfSFNJU1IpOwogCQlEQkdfODcyM0EoInB3cmRvd24sIDB4NWMoQklUNykgPSUwMnhcbiIsIHZhbDgpOwotCQlyZnBvd2Vyc3RhdGUgPSAodmFsOCAmIEJJVDcpID8gcmZfb2ZmIDogcmZfb247CisJCXJmcG93ZXJzdGF0ZSA9ICh2YWw4ICYgQklUKDcpKSA/IHJmX29mZiA6IHJmX29uOwogCX0gZWxzZSB7IC8qICByZiBvbi9vZmYgKi8KLQkJcnR3X3dyaXRlOChwQWRhcHRlciwgUkVHX01BQ19QSU5NVVhfQ0ZHLAotCQkJICAgcnR3X3JlYWQ4KHBBZGFwdGVyLCBSRUdfTUFDX1BJTk1VWF9DRkcpICYgfkJJVDMpOwotCQl2YWw4ID0gcnR3X3JlYWQ4KHBBZGFwdGVyLCBSRUdfR1BJT19JT19TRUwpOworCQlydGw4NzIzYXVfd3JpdGU4KHBBZGFwdGVyLCBSRUdfTUFDX1BJTk1VWF9DRkcsCisJCQkJIHJ0bDg3MjNhdV9yZWFkOChwQWRhcHRlciwgUkVHX01BQ19QSU5NVVhfQ0ZHKSAmCisJCQkJIH5CSVQoMykpOworCQl2YWw4ID0gcnRsODcyM2F1X3JlYWQ4KHBBZGFwdGVyLCBSRUdfR1BJT19JT19TRUwpOwogCQlEQkdfODcyM0EoIkdQSU9fSU4gPSUwMnhcbiIsIHZhbDgpOwotCQlyZnBvd2Vyc3RhdGUgPSAodmFsOCAmIEJJVDMpID8gcmZfb24gOiByZl9vZmY7CisJCXJmcG93ZXJzdGF0ZSA9ICh2YWw4ICYgQklUKDMpKSA/IHJmX29uIDogcmZfb2ZmOwogCX0KIAlyZXR1cm4gcmZwb3dlcnN0YXRlOwogfQkvKiAgSGFsRGV0ZWN0UHdyRG93bk1vZGUgKi8KIAogdm9pZCBfcHNfb3Blbl9SRjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAotc3RhdGljIHUzMiBydGw4NzIzYXVfaGFsX2luaXQoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQorc3RhdGljIGludCBydGw4NzIzYXVfaGFsX2luaXQoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQogewotCXU4CXZhbDggPSAwOwotCXUzMglib3VuZGFyeSwgc3RhdHVzID0gX1NVQ0NFU1M7CisJdTggdmFsOCA9IDA7CisJdTMyIGJvdW5kYXJ5OworCWludCBzdGF0dXMgPSBfU1VDQ0VTUzsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwogCXN0cnVjdCBwd3JjdHJsX3ByaXYgKnB3cmN0cmxwcml2ID0gJkFkYXB0ZXItPnB3cmN0cmxwcml2OwogCXN0cnVjdCByZWdpc3RyeV9wcml2ICpwcmVnaXN0cnlwcml2ID0gJkFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKLQl1MzIgTmF2VXBwZXIgPSBXaUZpTmF2VXBwZXJVczsKIAogCXVuc2lnbmVkIGxvbmcgaW5pdF9zdGFydF90aW1lID0gamlmZmllczsKIAotI2RlZmluZSBIQUxfSU5JVF9QUk9GSUxFX1RBRyhzdGFnZSkgZG8ge30gd2hpbGUgKDApCi0KLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfQkVHSU4pOwogCWlmIChBZGFwdGVyLT5wd3JjdHJscHJpdi5ia2VlcGZ3YWxpdmUpIHsKIAkJX3BzX29wZW5fUkYyM2EoQWRhcHRlcik7CiAKQEAgLTY0NCw3ICs2MjgsNyBAQAogCX0KIAogCS8qICBDaGVjayBpZiBNQUMgaGFzIGFscmVhZHkgcG93ZXIgb24uIGJ5IHR5bmxpLiAyMDExLjA1LjI3LiAqLwotCXZhbDggPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX0NSKTsKKwl2YWw4ID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIFJFR19DUik7CiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfaW5mb18sCiAJCSAoIiVzOiBSRUdfQ1IgMHgxMDAgPSAweCUwMnhcbiIsIF9fZnVuY19fLCB2YWw4KSk7CiAJLyogRml4IDkyRFUtVkMgUzMgaGFuZyB3aXRoIHRoZSByZWFzb24gaXMgdGhhdCBzZWNvbmRhcnkgbWFjIGlzIG5vdApAQCAtNjU5LDcgKzY0Myw2IEBACiAJCQkgKCIlczogTUFDIGhhcyBhbHJlYWR5IHBvd2VyIG9uXG4iLCBfX2Z1bmNfXykpOwogCX0KIAotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19JTklUX1BXX09OKTsKIAlzdGF0dXMgPSBfSW5pdFBvd2VyT24oQWRhcHRlcik7CiAJaWYgKHN0YXR1cyA9PSBfRkFJTCkgewogCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9oYWxfaW5pdF9jXywgX2Rydl9lcnJfLApAQCAtNjY3LDcgKzY1MCw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfSU5JVF9MTFRUKTsKIAlpZiAoIXByZWdpc3RyeXByaXYtPndpZmlfc3BlYykgewogCQlib3VuZGFyeSA9IFRYX1BBR0VfQk9VTkRBUlk7CiAJfSBlbHNlIHsKQEAgLTY4NCwxMSArNjY2LDkgQEAKIAkJfQogCX0KIAotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19NSVNDMDEpOwogCWlmIChwSGFsRGF0YS0+YlJER0VuYWJsZSkKIAkJX0luaXRSREdTZXR0aW5nKEFkYXB0ZXIpOwogCi0JSEFMX0lOSVRfUFJPRklMRV9UQUcoSEFMX0lOSVRfU1RBR0VTX0RPV05MT0FEX0ZXKTsKIAlzdGF0dXMgPSBydGw4NzIzYV9GaXJtd2FyZURvd25sb2FkKEFkYXB0ZXIpOwogCWlmIChzdGF0dXMgIT0gX1NVQ0NFU1MpIHsKIAkJQWRhcHRlci0+YkZXUmVhZHkgPSBmYWxzZTsKQEAgLTcyMCwxNCArNzAwLDEyIEBACiAJLyogIDxSb2dlcl9Ob3Rlcz4gQ3VycmVudCBDaGFubmVsIHdpbGwgYmUgdXBkYXRlZCBhZ2FpbiBsYXRlci4gKi8KIAlwSGFsRGF0YS0+Q3VycmVudENoYW5uZWwgPSA2Oy8qIGRlZmF1bHQgc2V0IHRvIDYgKi8KIAotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19NQUMpOwogCXN0YXR1cyA9IFBIWV9NQUNDb25maWc4NzIzQShBZGFwdGVyKTsKIAlpZiAoc3RhdHVzID09IF9GQUlMKSB7CiAJCURCR184NzIzQSgiUEhZX01BQ0NvbmZpZzg3MjNBIGZhdWx0ICEhXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19CQik7CiAJLyogICovCiAJLyogZC4gSW5pdGlhbGl6ZSBCQiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiAqLwogCS8qICAqLwpAQCAtNzQwLDcgKzcxOCw2IEBACiAJLyogIEFkZCBmb3IgdHggcG93ZXIgYnkgcmF0ZSBmaW5lIHR1bmUuIFdlIG5lZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gYWZ0ZXIgQkIgY29uZmlnLiAqLwogCS8qICBCZWNhdXNlIHRoZSB0eCBwb3dlciBieSByYXRlIHRhYmxlIGlzIGluaXRlZCBpbiBCQiBjb25maWcuICovCiAKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfUkYpOwogCXN0YXR1cyA9IFBIWV9SRkNvbmZpZzg3MjNBKEFkYXB0ZXIpOwogCWlmIChzdGF0dXMgPT0gX0ZBSUwpIHsKIAkJREJHXzg3MjNBKCJQSFlfUkZDb25maWc4NzIzQSBmYXVsdCAhIVxuIik7CkBAIC03NjYsNyArNzQzLDYgQEAKIAlwSGFsRGF0YS0+UmZSZWdDaG5sVmFsWzBdID0gUEhZX1F1ZXJ5UkZSZWcoQWRhcHRlciwgKGVudW0gUkZfUkFESU9fUEFUSCkwLCBSRl9DSE5MQlcsIGJSRlJlZ09mZnNldE1hc2spOwogCXBIYWxEYXRhLT5SZlJlZ0NobmxWYWxbMV0gPSBQSFlfUXVlcnlSRlJlZyhBZGFwdGVyLCAoZW51bSBSRl9SQURJT19QQVRIKTEsIFJGX0NITkxCVywgYlJGUmVnT2Zmc2V0TWFzayk7CiAKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfTUlTQzAyKTsKIAlpZiAoIXBIYWxEYXRhLT5iTUFDRnVuY0VuYWJsZSkgewogCQlfSW5pdFF1ZXVlUmVzZXJ2ZWRQYWdlKEFkYXB0ZXIpOwogCQlfSW5pdFR4QnVmZmVyQm91bmRhcnkoQWRhcHRlcik7CkBAIC03NzksNyArNzU1LDcgQEAKIAlfSW5pdERyaXZlckluZm9TaXplKEFkYXB0ZXIsIERSVklORk9fU1opOwogCiAJX0luaXRJbnRlcnJ1cHQoQWRhcHRlcik7Ci0JaGFsX2luaXRfbWFjYWRkcjIzYShBZGFwdGVyKTsvKiBzZXQgbWFjX2FkZHJlc3MgKi8KKwlod192YXJfc2V0X21hY2FkZHIoQWRhcHRlciwgQWRhcHRlci0+ZWVwcm9tcHJpdi5tYWNfYWRkcik7CiAJX0luaXROZXR3b3JrVHlwZShBZGFwdGVyKTsvKiBzZXQgbXNyICovCiAJX0luaXRXTUFDU2V0dGluZyhBZGFwdGVyKTsKIAlfSW5pdEFkYXB0aXZlQ3RybChBZGFwdGVyKTsKQEAgLTc5MiwxNCArNzY4LDExIEBACiAKIAlfSW5pdEhXTGVkKEFkYXB0ZXIpOwogCi0JSEFMX0lOSVRfUFJPRklMRV9UQUcoSEFMX0lOSVRfU1RBR0VTX1RVUk5fT05fQkxPQ0spOwogCV9CQlR1cm5PbkJsb2NrKEFkYXB0ZXIpOwogCS8qIE5pY0lGU2V0TWFjQWRkcmVzcyhwYWRhcHRlciwgcGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3MpOyAqLwogCi0JSEFMX0lOSVRfUFJPRklMRV9UQUcoSEFMX0lOSVRfU1RBR0VTX0lOSVRfU0VDVVJJVFkpOwogCWludmFsaWRhdGVfY2FtX2FsbDIzYShBZGFwdGVyKTsKIAotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19NSVNDMTEpOwogCS8qICAyMDEwLzEyLzE3IE1IIFdlIG5lZWQgdG8gc2V0IFRYIHBvd2VyIGFjY29yZGluZyB0byBFRlVTRSBjb250ZW50IGF0IGZpcnN0LiAqLwogCVBIWV9TZXRUeFBvd2VyTGV2ZWw4NzIzQShBZGFwdGVyLCBwSGFsRGF0YS0+Q3VycmVudENoYW5uZWwpOwogCkBAIC04MDcsMTAxICs3ODAsODkgQEAKIAogCS8qICBIVyBTRVEgQ1RSTCAqLwogCS8qIHNldCAweDAgdG8gMHhGRiBieSB0eW5saS4gRGVmYXVsdCBlbmFibGUgSFcgU0VRIE5VTS4gKi8KLQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19IV1NFUV9DVFJMLCAweEZGKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19IV1NFUV9DVFJMLCAweEZGKTsKIAogCS8qICAqLwogCS8qICBEaXNhYmxlIEJBUiwgc3VnZ2VzdGVkIGJ5IFNjb3R0ICovCiAJLyogIDIwMTAuMDQuMDkgYWRkIGJ5IGhwZmFuICovCiAJLyogICovCi0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX0JBUl9NT0RFX0NUUkwsIDB4MDIwMWZmZmYpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19CQVJfTU9ERV9DVFJMLCAweDAyMDFmZmZmKTsKIAogCWlmIChwcmVnaXN0cnlwcml2LT53aWZpX3NwZWMpCi0JCXJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19GQVNUX0VEQ0FfQ1RSTCwgMCk7CisJCXJ0bDg3MjNhdV93cml0ZTE2KEFkYXB0ZXIsIFJFR19GQVNUX0VEQ0FfQ1RSTCwgMCk7CiAKIAkvKiAgTW92ZSBieSBOZW8gZm9yIFVTQiBTUyBmcm9tIGFib3ZlIHNldHAgKi8KIAlfUmZQb3dlclNhdmUoQWRhcHRlcik7CiAKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfSVFLKTsKLQkJLyogIDIwMTAvMDgvMjYgTUggTWVyZ2UgZnJvbSA4MTkyQ0UuICovCi0JCS8qIHNoZXJyeSBtYXNrZWQgdGhhdCBpdCBoYXMgYmVlbiBkb25lIGluIF9SZlBvd2VyU2F2ZSAqLwotCQkvKiAyMDExMDkyNyAqLwotCQkvKiByZWNvdmVyeSBmb3IgODE5MmN1IGFuZCA5NzIzQXUgMjAxMTEwMTcgKi8KLQkJaWYgKHB3cmN0cmxwcml2LT5yZl9wd3JzdGF0ZSA9PSByZl9vbikgewotCQkJaWYgKHBIYWxEYXRhLT5iSVFLSW5pdGlhbGl6ZWQpIHsKLQkJCQlydGw4NzIzYV9waHlfaXFfY2FsaWJyYXRlKEFkYXB0ZXIsIHRydWUpOwotCQkJfSBlbHNlIHsKLQkJCQlydGw4NzIzYV9waHlfaXFfY2FsaWJyYXRlKEFkYXB0ZXIsIGZhbHNlKTsKLQkJCQlwSGFsRGF0YS0+YklRS0luaXRpYWxpemVkID0gdHJ1ZTsKLQkJCX0KLQotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19QV19UUkFDSyk7Ci0JCQlydGw4NzIzYV9vZG1fY2hlY2tfdHhfcG93ZXJfdHJhY2tpbmcoQWRhcHRlcik7Ci0KLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfTENLKTsKLQkJCXJ0bDg3MjNhX3BoeV9sY19jYWxpYnJhdGUoQWRhcHRlcik7Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQkJCXJ0bDg3MjNhX1NpbmdsZUR1YWxBbnRlbm5hRGV0ZWN0aW9uKEFkYXB0ZXIpOwotI2VuZGlmCisJLyogIDIwMTAvMDgvMjYgTUggTWVyZ2UgZnJvbSA4MTkyQ0UuICovCisJLyogc2hlcnJ5IG1hc2tlZCB0aGF0IGl0IGhhcyBiZWVuIGRvbmUgaW4gX1JmUG93ZXJTYXZlICovCisJLyogMjAxMTA5MjcgKi8KKwkvKiByZWNvdmVyeSBmb3IgODE5MmN1IGFuZCA5NzIzQXUgMjAxMTEwMTcgKi8KKwlpZiAocHdyY3RybHByaXYtPnJmX3B3cnN0YXRlID09IHJmX29uKSB7CisJCWlmIChwSGFsRGF0YS0+YklRS0luaXRpYWxpemVkKSB7CisJCQlydGw4NzIzYV9waHlfaXFfY2FsaWJyYXRlKEFkYXB0ZXIsIHRydWUpOworCQl9IGVsc2UgeworCQkJcnRsODcyM2FfcGh5X2lxX2NhbGlicmF0ZShBZGFwdGVyLCBmYWxzZSk7CisJCQlwSGFsRGF0YS0+YklRS0luaXRpYWxpemVkID0gdHJ1ZTsKIAkJfQogCi0JSEFMX0lOSVRfUFJPRklMRV9UQUcoSEFMX0lOSVRfU1RBR0VTX01JU0MyMSk7Ci0gLyogZml4ZWQgVVNCIGludGVyZmFjZSBpbnRlcmZlcmVuY2UgaXNzdWUgKi8KLQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4ZmU0MCwgMHhlMCk7Ci0JcnR3X3dyaXRlOChBZGFwdGVyLCAweGZlNDEsIDB4OGQpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgMHhmZTQyLCAweDgwKTsKLQlydHdfd3JpdGUzMihBZGFwdGVyLCAweDIwYywgMHhmZDAzMjApOworCQlydGw4NzIzYV9vZG1fY2hlY2tfdHhfcG93ZXJfdHJhY2tpbmcoQWRhcHRlcik7CisKKwkJcnRsODcyM2FfcGh5X2xjX2NhbGlicmF0ZShBZGFwdGVyKTsKKworCQlydGw4NzIzYV9kdWFsX2FudGVubmFfZGV0ZWN0aW9uKEFkYXB0ZXIpOworCX0KKworCS8qIGZpeGVkIFVTQiBpbnRlcmZhY2UgaW50ZXJmZXJlbmNlIGlzc3VlICovCisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweGZlNDAsIDB4ZTApOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhmZTQxLCAweDhkKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4ZmU0MiwgMHg4MCk7CisJcnRsODcyM2F1X3dyaXRlMzIoQWRhcHRlciwgMHgyMGMsIDB4ZmQwMzIwKTsKIAkvKiBTb2x2ZSB0b28gbWFueSBwcm90b2NvbCBlcnJvciBvbiBVU0IgYnVzICovCiAJaWYgKCFJU184MXh4Q19WRU5ET1JfVU1DX0FfQ1VUKHBIYWxEYXRhLT5WZXJzaW9uSUQpKSB7CiAJCS8qICAweEU2ID0gMHg5NCAqLwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFNik7Ci0JCXJ0d193cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDk0KTsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFNik7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDk0KTsKKwkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOwogCiAJCS8qICAweEUwID0gMHgxOSAqLwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFMCk7Ci0JCXJ0d193cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDE5KTsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFMCk7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDE5KTsKKwkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOwogCiAJCS8qICAweEU1ID0gMHg5MSAqLwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFNSk7Ci0JCXJ0d193cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDkxKTsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFNSk7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDkxKTsKKwkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOwogCiAJCS8qICAweEUyID0gMHg4MSAqLwotCQlydHdfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFMik7Ci0JCXJ0d193cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDgxKTsKLQkJcnR3X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOworCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIDB4RkU0MCwgMHhFMik7CisJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgMHhGRTQxLCAweDgxKTsKKwkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCAweEZFNDIsIDB4ODApOwogCiAJfQogCi0vKiBIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfSU5JVF9QQUJJQVMpOyAqLwogLyoJX0luaXRQQUJpYXMoQWRhcHRlcik7ICovCiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfQlRfQ09FWElTVCk7CiAJLyogIEluaXQgQlQgaHcgY29uZmlnLiAqLwotCUJUX0luaXRId0NvbmZpZyhBZGFwdGVyKTsKLSNlbmRpZgorCXJ0bDg3MjNhX0JUX2luaXRfaHdjb25maWcoQWRhcHRlcik7CiAKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfSU5JVF9IQUxfRE0pOwogCXJ0bDg3MjNhX0luaXRIYWxEbShBZGFwdGVyKTsKIAotCUhBTF9JTklUX1BST0ZJTEVfVEFHKEhBTF9JTklUX1NUQUdFU19NSVNDMzEpOwotCXJ0d19oYWxfc2V0X2h3cmVnMjNhKEFkYXB0ZXIsIEhXX1ZBUl9OQVZfVVBQRVIsICh1OCAqKSZOYXZVcHBlcik7CisJcnRsODcyM2Ffc2V0X25hdl91cHBlcihBZGFwdGVyLCBXaUZpTmF2VXBwZXJVcyk7CiAKIAkvKiAgMjAxMS8wMy8wOSBNSCBkZWJ1ZyBvbmx5LCBVTUMtQiBjdXQgcGFzcyAyNTAwIFM1IHRlc3QsIGJ1dCB3ZSBuZWVkIHRvIGZpbiByb290IGNhdXNlLiAqLwotCWlmICgoKHJ0d19yZWFkMzIoQWRhcHRlciwgckZQR0EwX1JGTU9EKSAmIDB4RkYwMDAwMDApICE9IDB4ODMwMDAwMDApKSB7CisJaWYgKCgocnRsODcyM2F1X3JlYWQzMihBZGFwdGVyLCByRlBHQTBfUkZNT0QpICYgMHhGRjAwMDAwMCkgIT0KKwkgICAgIDB4ODMwMDAwMDApKSB7CiAJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfUkZNT0QsIEJJVCgyNCksIDEpOwogCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9oYWxfaW5pdF9jXywgX2Rydl9lcnJfLCAoIiVzOiBJUUsgZmFpbCByZWNvcnZlclxuIiwgX19mdW5jX18pKTsKIAl9CiAKIAkvKiBhY2sgZm9yIHhtaXQgbWdtdCBmcmFtZXMuICovCi0JcnR3X3dyaXRlMzIoQWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwsIHJ0d19yZWFkMzIoQWRhcHRlciwgUkVHX0ZXSFdfVFhRX0NUUkwpfEJJVCgxMikpOworCXJ0bDg3MjNhdV93cml0ZTMyKEFkYXB0ZXIsIFJFR19GV0hXX1RYUV9DVFJMLAorCQkJICBydGw4NzIzYXVfcmVhZDMyKEFkYXB0ZXIsIFJFR19GV0hXX1RYUV9DVFJMKXxCSVQoMTIpKTsKIAogZXhpdDoKLQlIQUxfSU5JVF9QUk9GSUxFX1RBRyhIQUxfSU5JVF9TVEFHRVNfRU5EKTsKLQogCURCR184NzIzQSgiJXMgaW4gJWRtc1xuIiwgX19mdW5jX18sCiAJCSAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gaW5pdF9zdGFydF90aW1lKSk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTkyMyw5ICs4ODQsOSBAQAogCQkJICAgUmVhZFhCWVRFKFJFR19TWVNfQ0xLUisxKSB8IEJJVCgzKSk7ICovCiAKIAkJCS8qICAyLiBGb3JjZSBQV00sIEVuYWJsZSBTUFMxOF9MRE9fTWFyY29fQmxvY2sgKi8KLQkJCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1NQUzBfQ1RSTCwKLQkJCQkgICBydHdfcmVhZDgoQWRhcHRlciwgUkVHX1NQUzBfQ1RSTCkgfAotCQkJCSAgIChCSVQwfEJJVDMpKTsKKwkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1NQUzBfQ1RSTCwKKwkJCQkJIHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfU1BTMF9DVFJMKSB8CisJCQkJCSBCSVQoMCkgfCBCSVQoMykpOwogCiAJCQkvKiAgMy4gcmVzdG9yZSBCQiwgQUZFIGNvbnRyb2wgcmVnaXN0ZXIuICovCiAJCQkvKiBSRiAqLwpAQCAtOTM2LDcgKzg5Nyw3IEBACiAJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9YQUJfUkZQYXJhbWV0ZXIsCiAJCQkJCSAgICAgMHgzOCwgMSk7CiAJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZjAsIDEpOwotCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9SRk1PRCwgQklUMSwgMCk7CisJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX1JGTU9ELCBCSVQoMSksIDApOwogCiAJCQkvKiBBRkUgKi8KIAkJCWlmIChwSGFsRGF0YS0+cmZfdHlwZSA9PSAgUkZfMlQyUikKQEAgLTk1OSwxNyArOTIwLDE3IEBACiAJCX0gZWxzZSB7CQkvKiAgTGV2ZWwgMiBvciBvdGhlcnMuICovCiAJCQkvKiBoLglBRkVfUExMX0NUUkwgMHgyOFs3OjBdID0gMHg4MAogCQkJICAgZGlzYWJsZSBBRkUgUExMICovCi0JCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19BRkVfUExMX0NUUkwsIDB4ODEpOworCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfQUZFX1BMTF9DVFJMLCAweDgxKTsKIAogCQkJLyogIGkuCUFGRV9YVEFMX0NUUkwgMHgyNFsxNTowXSA9IDB4ODgwRgogCQkJICAgIGdhdGVkIEFGRSBESUdfQ0xPQ0sgKi8KLQkJCXJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19BRkVfWFRBTF9DVFJMLCAweDgwMEYpOworCQkJcnRsODcyM2F1X3dyaXRlMTYoQWRhcHRlciwgUkVHX0FGRV9YVEFMX0NUUkwsIDB4ODAwRik7CiAJCQltZGVsYXkoMSk7CiAKIAkJCS8qICAyLiBGb3JjZSBQV00sIEVuYWJsZSBTUFMxOF9MRE9fTWFyY29fQmxvY2sgKi8KLQkJCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1NQUzBfQ1RSTCwKLQkJCQkgICBydHdfcmVhZDgoQWRhcHRlciwgUkVHX1NQUzBfQ1RSTCkgfAotCQkJCSAgIChCSVQwfEJJVDMpKTsKKwkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX1NQUzBfQ1RSTCwKKwkJCQkJIHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfU1BTMF9DVFJMKSB8CisJCQkJCSBCSVQoMCkgfCBCSVQoMykpOwogCiAJCQkvKiAgMy4gcmVzdG9yZSBCQiwgQUZFIGNvbnRyb2wgcmVnaXN0ZXIuICovCiAJCQkvKiBSRiAqLwpAQCAtOTgwLDcgKzk0MSw3IEBACiAJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9YQUJfUkZQYXJhbWV0ZXIsCiAJCQkJCSAgICAgMHgzOCwgMSk7CiAJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZjAsIDEpOwotCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9SRk1PRCwgQklUMSwgMCk7CisJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX1JGTU9ELCBCSVQoMSksIDApOwogCiAJCQkvKiBBRkUgKi8KIAkJCWlmIChwSGFsRGF0YS0+cmZfdHlwZSA9PSAgUkZfMlQyUikKQEAgLTEwMDIsMjUgKzk2MywyNyBAQAogCQkJfQogCiAJCQkvKiAgNS4gZ2F0ZWQgTUFDIENsb2NrICovCi0JCQlieXRldG1wID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19BUFNEX0NUUkwpOwotCQkJcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfQVBTRF9DVFJMLCBieXRldG1wICYgfkJJVDYpOworCQkJYnl0ZXRtcCA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfQVBTRF9DVFJMKTsKKwkJCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX0FQU0RfQ1RSTCwKKwkJCQkJIGJ5dGV0bXAgJiB+QklUKDYpKTsKIAogCQkJbWRlbGF5KDEwKTsKIAogCQkJLyogIFNldCBCQiByZXNldCBhdCBmaXJzdCAqLwotCQkJcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfU1lTX0ZVTkNfRU4sIDB4MTcpOyAvKiAweDE2ICovCisJCQkvKiAweDE2ICovCisJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwgMHgxNyk7CiAKIAkJCS8qICBFbmFibGUgVFggKi8KLQkJCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1RYUEFVU0UsIDB4MCk7CisJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19UWFBBVVNFLCAweDApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgcmZfc2xlZXA6CiAJY2FzZSByZl9vZmY6Ci0JCXZhbHVlOCA9IHJ0d19yZWFkOChBZGFwdGVyLCBSRUdfU1BTMF9DVFJMKSA7CisJCXZhbHVlOCA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfU1BTMF9DVFJMKSA7CiAJCWlmIChJU184MXh4Q19WRU5ET1JfVU1DX0JfQ1VUKHBIYWxEYXRhLT5WZXJzaW9uSUQpKQotCQkJdmFsdWU4ICY9IH4oQklUMCk7CisJCQl2YWx1ZTggJj0gfkJJVCgwKTsKIAkJZWxzZQotCQkJdmFsdWU4ICY9IH4oQklUMHxCSVQzKTsKKwkJCXZhbHVlOCAmPSB+KEJJVCgwKSB8IEJJVCgzKSk7CiAJCWlmIChiUmVnU1NQd3JMdmwgPT0gMSkgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9oYWxfaW5pdF9jXywgX2Rydl9lcnJfLCAoIlNTIExWTDFcbiIpKTsKIAkJCS8qICBEaXNhYmxlIFJGIGFuZCBCQiBvbmx5IGZvciBTZWxlY3RTdXNwZW5kLiAqLwpAQCAtMTA1MCw3ICsxMDEzLDcgQEAKIAkJCQkJICAgICAweDM4LCAwKTsKIAkJCX0KIAkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfVFJ4UGF0aEVuYWJsZSwgMHhmMCwgMCk7Ci0JCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX1JGTU9ELCBCSVQxLCAxKTsKKwkJCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfUkZNT0QsIEJJVCgxKSwgMSk7CiAKIAkJCS8qICAyIC5BRkUgY29udHJvbCByZWdpc3RlciB0byBwb3dlciBkb3duLiBiaXRbMzA6MjJdICovCiAJCQlBZGFwdGVyLT5wd3JjdHJscHJpdi5QU19CQlJlZ0JhY2t1cFtQU0JCUkVHX0FGRTBdID0KQEAgLTEwNzAsMTggKzEwMzMsMTkgQEAKIAkJCQkJICAgICBiUkZSZWdPZmZzZXRNYXNrLCAwKTsKIAogCQkJLyogIDQuIEZvcmNlIFBGTSAsIGRpc2FibGUgU1BTMThfTERPX01hcmNvX0Jsb2NrICovCi0JCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19TUFMwX0NUUkwsIHZhbHVlOCk7CisJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19TUFMwX0NUUkwsIHZhbHVlOCk7CiAJCX0gZWxzZSB7CS8qICBMZXZlbCAyIG9yIG90aGVycy4gKi8KIAkJCVJUX1RSQUNFKF9tb2R1bGVfaGFsX2luaXRfY18sIF9kcnZfZXJyXywgKCJTUyBMVkwyXG4iKSk7CiAJCQl7CiAJCQkJdTggZVJGUGF0aCA9IFJGX1BBVEhfQSwgdmFsdWU4ID0gMDsKLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19UWFBBVVNFLCAweEZGKTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19UWFBBVVNFLCAweEZGKTsKIAkJCQlQSFlfU2V0UkZSZWcoQWRhcHRlciwKIAkJCQkJICAgICAoZW51bSBSRl9SQURJT19QQVRIKWVSRlBhdGgsCiAJCQkJCSAgICAgMHgwLCBiTWFza0J5dGUwLCAweDApOwogCQkJCXZhbHVlOCB8PSBBUFNET0ZGOwogCQkJCS8qIDB4NDAgKi8KLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19BUFNEX0NUUkwsIHZhbHVlOCk7CisJCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfQVBTRF9DVFJMLAorCQkJCQkJIHZhbHVlOCk7CiAKIAkJCQkvKiAgQWZ0ZXIgc3dpdGNoIEFQU0QsIHdlIG5lZWQgdG8gZGVsYXkKIAkJCQkgICAgZm9yIHN0YWJpbGl0eSAqLwpAQCAtMTA5Miw3ICsxMDU2LDggQEAKIAkJCQl2YWx1ZTggfD0gKEZFTl9VU0JEIHwgRkVOX1VTQkEgfAogCQkJCQkgICBGRU5fQkJfR0xCX1JTVG4pOwogCQkJCS8qIDB4MTYgKi8KLQkJCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwgdmFsdWU4KTsKKwkJCQlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTiwKKwkJCQkJCSB2YWx1ZTgpOwogCQkJfQogCiAJCQkvKiAgRGlzYWJsZSBSRiBhbmQgQkIgb25seSBmb3IgU2VsZWN0U3VzcGVuZC4gKi8KQEAgLTExMjEsNyArMTA4Niw3IEBACiAJCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9YQUJfUkZQYXJhbWV0ZXIsCiAJCQkJCSAgICAgMHgzOCwgMCk7CiAJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZjAsIDApOwotCQkJUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9SRk1PRCwgQklUMSwgMSk7CisJCQlQSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX1JGTU9ELCBCSVQoMSksIDEpOwogCiAJCQkvKiAgMiAuQUZFIGNvbnRyb2wgcmVnaXN0ZXIgdG8gcG93ZXIgZG93bi4gYml0WzMwOjIyXSAqLwogCQkJQWRhcHRlci0+cHdyY3RybHByaXYuUFNfQkJSZWdCYWNrdXBbUFNCQlJFR19BRkUwXSA9CkBAIC0xMTQxLDE3ICsxMTA2LDE3IEBACiAJCQkJCSAgICAgYlJGUmVnT2Zmc2V0TWFzaywgMCk7CiAKIAkJCS8qICA0LiBGb3JjZSBQRk0gLCBkaXNhYmxlIFNQUzE4X0xET19NYXJjb19CbG9jayAqLwotCQkJcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfU1BTMF9DVFJMLCB2YWx1ZTgpOworCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfU1BTMF9DVFJMLCB2YWx1ZTgpOwogCiAJCQkvKiAgMjAxMC8xMC8xMyBNSC9Jc2FhY2hzdSBleGNoYW5nZSBzZXF1ZW5jZS4gKi8KIAkJCS8qIGguCUFGRV9QTExfQ1RSTCAweDI4Wzc6MF0gPSAweDgwCiAJCQkJZGlzYWJsZSBBRkUgUExMICovCi0JCQlydHdfd3JpdGU4KEFkYXB0ZXIsIFJFR19BRkVfUExMX0NUUkwsIDB4ODApOworCQkJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfQUZFX1BMTF9DVFJMLCAweDgwKTsKIAkJCW1kZWxheSgxKTsKIAogCQkJLyogIGkuCUFGRV9YVEFMX0NUUkwgMHgyNFsxNTowXSA9IDB4ODgwRgogCQkJCWdhdGVkIEFGRSBESUdfQ0xPQ0sgKi8KLQkJCXJ0d193cml0ZTE2KEFkYXB0ZXIsIFJFR19BRkVfWFRBTF9DVFJMLCAweEE4MEYpOworCQkJcnRsODcyM2F1X3dyaXRlMTYoQWRhcHRlciwgUkVHX0FGRV9YVEFMX0NUUkwsIDB4QTgwRik7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTExNzcsMTkgKzExNDIsMTkgQEAKIAkJCSAgICBQV1JfSU5URl9VU0JfTVNLLCBydGw4NzIzQVVfZW50ZXJfbHBzX2Zsb3cpOwogCiAJLyogIDIuIDB4MUZbNzowXSA9IDAJCXR1cm4gb2ZmIFJGICovCi0JcnR3X3dyaXRlOChBZGFwdGVyLCBSRUdfUkZfQ1RSTCwgMHgwMCk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfUkZfQ1RSTCwgMHgwMCk7CiAKIAkvKgk9PT09IFJlc2V0IGRpZ2l0YWwgc2VxdWVuY2UgICA9PT09PT0gKi8KLQlpZiAoKHJ0d19yZWFkOChBZGFwdGVyLCBSRUdfTUNVRldETCkmQklUNykgJiYKKwlpZiAoKHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfTUNVRldETCkgJiBCSVQoNykpICYmCiAJICAgIEFkYXB0ZXItPmJGV1JlYWR5KSAvKiA4MDUxIFJBTSBjb2RlICovCiAJCXJ0bDg3MjNhX0Zpcm13YXJlU2VsZlJlc2V0KEFkYXB0ZXIpOwogCiAJLyogIFJlc2V0IE1DVS4gU3VnZ2VzdGVkIGJ5IEZpbGVuLiAyMDExLjAxLjI2LiBieSB0eW5saS4gKi8KLQl1MWJUbXAgPSBydHdfcmVhZDgoQWRhcHRlciwgUkVHX1NZU19GVU5DX0VOKzEpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1NZU19GVU5DX0VOKzEsICh1MWJUbXAgJiAofkJJVDIpKSk7CisJdTFiVG1wID0gcnRsODcyM2F1X3JlYWQ4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTisxKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19TWVNfRlVOQ19FTisxLCB1MWJUbXAgJiB+QklUKDIpKTsKIAogCS8qICBnLglNQ1VGV0RMIDB4ODBbMTowXT0gMAkJcmVzZXQgTUNVIHJlYWR5IHN0YXR1cyAqLwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX01DVUZXREwsIDB4MDApOworCXJ0bDg3MjNhdV93cml0ZTgoQWRhcHRlciwgUkVHX01DVUZXREwsIDB4MDApOwogCiAJLyoJPT09PSBSZXNldCBkaWdpdGFsIHNlcXVlbmNlIGVuZCA9PT09PT0gKi8KIAkvKiAgQ2FyZCBkaXNhYmxlIHBvd2VyIGFjdGlvbiBmbG93ICovCkBAIC0xMTk4LDE2ICsxMTYzLDE2IEBACiAJCQkgICAgICAgcnRsODcyM0FVX2NhcmRfZGlzYWJsZV9mbG93KTsKIAogCS8qICBSZXNldCBNQ1UgSU8gV3JhcHBlciwgYWRkZWQgYnkgUm9nZXIsIDIwMTEuMDguMzAuICovCi0JdTFiVG1wID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19SU1ZfQ1RSTCArIDEpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1JTVl9DVFJMKzEsICh1MWJUbXAgJiAofkJJVDApKSk7Ci0JdTFiVG1wID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR19SU1ZfQ1RSTCArIDEpOwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1JTVl9DVFJMKzEsIHUxYlRtcCB8IEJJVDApOworCXUxYlRtcCA9IHJ0bDg3MjNhdV9yZWFkOChBZGFwdGVyLCBSRUdfUlNWX0NUUkwgKyAxKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19SU1ZfQ1RSTCsxLCB1MWJUbXAgJiB+QklUKDApKTsKKwl1MWJUbXAgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHX1JTVl9DVFJMICsgMSk7CisJcnRsODcyM2F1X3dyaXRlOChBZGFwdGVyLCBSRUdfUlNWX0NUUkwrMSwgdTFiVG1wIHwgQklUKDApKTsKIAogCS8qICA3LiBSU1ZfQ1RSTCAweDFDWzc6MF0gPSAweDBFICBsb2NrIElTTy9DTEsvUG93ZXIgY29udHJvbCByZWdpc3RlciAqLwotCXJ0d193cml0ZTgoQWRhcHRlciwgUkVHX1JTVl9DVFJMLCAweDBlKTsKKwlydGw4NzIzYXVfd3JpdGU4KEFkYXB0ZXIsIFJFR19SU1ZfQ1RSTCwgMHgwZSk7CiB9CiAKLXN0YXRpYyB1MzIgcnRsODcyM2F1X2hhbF9kZWluaXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3N0YXRpYyBpbnQgcnRsODcyM2F1X2hhbF9kZWluaXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAlEQkdfODcyM0EoIj09PiAlc1xuIiwgX19mdW5jX18pOwogCkBAIC0xMjIzLDY3ICsxMTg4LDU3IEBACiAJcmV0dXJuIF9TVUNDRVNTOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ0bDg3MjNhdV9pbmlycF9pbml0KHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKK2ludCBydGw4NzIzYXVfaW5pcnBfaW5pdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpCiB7CiAJdTggaTsKIAlzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmOwotCXVpbnQJc3RhdHVzOwotCXN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwgPSAmQWRhcHRlci0+aW9wcml2LmludGY7CisJaW50IHN0YXR1czsKIAlzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYgPSAmQWRhcHRlci0+cmVjdnByaXY7Ci0JdTMyICgqX3JlYWRfcG9ydCkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBjbnQsCi0JCQkgIHN0cnVjdCByZWN2X2J1ZiAqcmJ1Zik7Ci0JdTMyICgqX3JlYWRfaW50ZXJydXB0KShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkcik7Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhCSpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKLQotCV9yZWFkX3BvcnQgPSBwaW50ZmhkbC0+aW9fb3BzLl9yZWFkX3BvcnQ7CisJc3RydWN0IGhhbF9kYXRhXzg3MjNhICpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKIAogCXN0YXR1cyA9IF9TVUNDRVNTOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfaW5mb18sICgiPT09PiB1c2JfaW5pcnBfaW5pdFxuIikpOwogCi0JcHJlY3Zwcml2LT5mZl9od2FkZHIgPSBSRUNWX0JVTEtfSU5fQUREUjsKLQogCS8qIGlzc3VlIFJ4IGlycCB0byByZWNlaXZlIGRhdGEgKi8KIAlwcmVjdmJ1ZiA9IChzdHJ1Y3QgcmVjdl9idWYgKilwcmVjdnByaXYtPnByZWN2X2J1ZjsKIAlmb3IgKGkgPSAwOyBpIDwgTlJfUkVDVkJVRkY7IGkrKykgewotCQlpZiAoX3JlYWRfcG9ydChwaW50ZmhkbCwgcHJlY3Zwcml2LT5mZl9od2FkZHIsIDAsIHByZWN2YnVmKSA9PQotCQkgICAgZmFsc2UpIHsKKwkJaWYgKHJ0bDg3MjNhdV9yZWFkX3BvcnQoQWRhcHRlciwgUkVDVl9CVUxLX0lOX0FERFIsIDAsCisJCQkJCXByZWN2YnVmKSA9PSBfRkFJTCkgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfZXJyXywKIAkJCQkgKCJ1c2JfcnhfaW5pdDogdXNiX3JlYWRfcG9ydCBlcnJvclxuIikpOwogCQkJc3RhdHVzID0gX0ZBSUw7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJcHJlY3ZidWYrKzsKLQkJcHJlY3Zwcml2LT5mcmVlX3JlY3ZfYnVmX3F1ZXVlX2NudC0tOwogCX0KLQlfcmVhZF9pbnRlcnJ1cHQgPSBwaW50ZmhkbC0+aW9fb3BzLl9yZWFkX2ludGVycnVwdDsKLQlpZiAoX3JlYWRfaW50ZXJydXB0KHBpbnRmaGRsLCBSRUNWX0lOVF9JTl9BRERSKSA9PSBmYWxzZSkgeworCWlmIChydGw4NzIzYXVfcmVhZF9pbnRlcnJ1cHQoQWRhcHRlciwgUkVDVl9JTlRfSU5fQUREUikgPT0gX0ZBSUwpIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfZXJyXywKIAkJCSAoInVzYl9yeF9pbml0OiB1c2JfcmVhZF9pbnRlcnJ1cHQgZXJyb3JcbiIpKTsKIAkJc3RhdHVzID0gX0ZBSUw7CiAJfQotCXBIYWxEYXRhLT5JbnRyTWFza1swXSA9IHJ0d19yZWFkMzIoQWRhcHRlciwgUkVHX1VTQl9ISU1SKTsKKwlwSGFsRGF0YS0+SW50ck1hc2tbMF0gPSBydGw4NzIzYXVfcmVhZDMyKEFkYXB0ZXIsIFJFR19VU0JfSElNUik7CiAJTVNHXzg3MjNBKCJwSGFsRGF0YS0+SW50ck1hc2sgPSAweCUwNHhcbiIsIHBIYWxEYXRhLT5JbnRyTWFza1swXSk7CiAJcEhhbERhdGEtPkludHJNYXNrWzBdIHw9IFVISU1SX0MySENNRHxVSElNUl9DUFdNOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19VU0JfSElNUiwgcEhhbERhdGEtPkludHJNYXNrWzBdKTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfVVNCX0hJTVIsIHBIYWxEYXRhLT5JbnRyTWFza1swXSk7CiBleGl0OgogCVJUX1RSQUNFKF9tb2R1bGVfaGNpX2hhbF9pbml0X2NfLCBfZHJ2X2luZm9fLAogCQkgKCI8PT09IHVzYl9pbmlycF9pbml0XG4iKSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBydGw4NzIzYXVfaW5pcnBfZGVpbml0KHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKK2ludCBydGw4NzIzYXVfaW5pcnBfZGVpbml0KHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKIHsKIAlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfaW5mb18sCiAJCSAoIlxuID09PT4gdXNiX3J4X2RlaW5pdFxuIikpOwotCXJ0d19yZWFkX3BvcnRfY2FuY2VsKEFkYXB0ZXIpOwotCXBIYWxEYXRhLT5JbnRyTWFza1swXSA9IHJ0d19yZWFkMzIoQWRhcHRlciwgUkVHX1VTQl9ISU1SKTsKKwlydGw4NzIzYXVfcmVhZF9wb3J0X2NhbmNlbChBZGFwdGVyKTsKKwlwSGFsRGF0YS0+SW50ck1hc2tbMF0gPSBydGw4NzIzYXVfcmVhZDMyKEFkYXB0ZXIsIFJFR19VU0JfSElNUik7CiAJTVNHXzg3MjNBKCIlcyBwSGFsRGF0YS0+SW50ck1hc2sgPSAweCUwNHhcbiIsIF9fZnVuY19fLAogCQkgIHBIYWxEYXRhLT5JbnRyTWFza1swXSk7CiAJcEhhbERhdGEtPkludHJNYXNrWzBdID0gMHgwOwotCXJ0d193cml0ZTMyKEFkYXB0ZXIsIFJFR19VU0JfSElNUiwgcEhhbERhdGEtPkludHJNYXNrWzBdKTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBSRUdfVVNCX0hJTVIsIHBIYWxEYXRhLT5JbnRyTWFza1swXSk7CiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaGFsX2luaXRfY18sIF9kcnZfaW5mb18sCiAJCSAoIlxuIDw9PT0gdXNiX3J4X2RlaW5pdFxuIikpOwogCXJldHVybiBfU1VDQ0VTUzsKQEAgLTE0MjAsNyArMTM3NSw3IEBACiAJc3RydWN0IGVlcHJvbV9wcml2ICpwRUVQUk9NID0gR0VUX0VFUFJPTV9FRlVTRV9QUklWKEFkYXB0ZXIpOwogCXU4IGVlVmFsdWU7CiAKLQllZVZhbHVlID0gcnR3X3JlYWQ4KEFkYXB0ZXIsIFJFR185MzQ2Q1IpOworCWVlVmFsdWUgPSBydGw4NzIzYXVfcmVhZDgoQWRhcHRlciwgUkVHXzkzNDZDUik7CiAJLyogIFRvIGNoZWNrIHN5c3RlbSBib290IHNlbGVjdGlvbi4gKi8KIAlwRUVQUk9NLT5FZXByb21PckVmdXNlID0gKGVlVmFsdWUgJiBCT09UX0ZST01fRUVQUk9NKSA/IHRydWUgOiBmYWxzZTsKIAlwRUVQUk9NLT5iYXV0b2xvYWRfZmFpbF9mbGFnID0gKGVlVmFsdWUgJiBFRVBST01fRU4pID8gZmFsc2UgOiB0cnVlOwpAQCAtMTQ1OSwxNiArMTQxNCwxOCBAQAogewogCXUzMiB2YWx1ZTMyOwogCi0JdmFsdWUzMiA9IHJ0d19yZWFkMzIoQWRhcHRlciwgRUZVU0VfVEVTVCk7CisJdmFsdWUzMiA9IHJ0bDg3MjNhdV9yZWFkMzIoQWRhcHRlciwgRUZVU0VfVEVTVCk7CiAJdmFsdWUzMiA9ICh2YWx1ZTMyICYgfkVGVVNFX1NFTF9NQVNLKSB8IEVGVVNFX1NFTChFRlVTRV9XSUZJX1NFTF8wKTsKLQlydHdfd3JpdGUzMihBZGFwdGVyLCBFRlVTRV9URVNULCB2YWx1ZTMyKTsKKwlydGw4NzIzYXVfd3JpdGUzMihBZGFwdGVyLCBFRlVTRV9URVNULCB2YWx1ZTMyKTsKIH0KIAotc3RhdGljIGludCBfUmVhZEFkYXB0ZXJJbmZvODcyM0FVKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcikKK3ZvaWQgcnRsODcyM2FfcmVhZF9hZGFwdGVyX2luZm8oc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQogewotCS8qIHN0cnVjdCBoYWxfZGF0YV84NzIzYQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEoQWRhcHRlcik7ICovCiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAKKwkvKiAgUmVhZCBFRVBST00gc2l6ZSBiZWZvcmUgY2FsbCBhbnkgRUVQUk9NIGZ1bmN0aW9uICovCisJQWRhcHRlci0+RWVwcm9tQWRkcmVzc1NpemUgPSBHZXRFRVBST01TaXplODcyM0EoQWRhcHRlcik7CisKIAlNU0dfODcyM0EoIj09PT0+IF9SZWFkQWRhcHRlckluZm84NzIzQVVcbiIpOwogCiAJaGFsX0VmdXNlQ2VsbFNlbChBZGFwdGVyKTsKQEAgLTE0ODUsNzMgKzE0NDIsMTcgQEAKIAogCU1TR184NzIzQSgiPD09PT0gX1JlYWRBZGFwdGVySW5mbzg3MjNBVSBpbiAlZCBtc1xuIiwKIAkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydCkpOwotCi0JcmV0dXJuIF9TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBSZWFkQWRhcHRlckluZm84NzIzQVUoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKQotewotCS8qICBSZWFkIEVFUFJPTSBzaXplIGJlZm9yZSBjYWxsIGFueSBFRVBST00gZnVuY3Rpb24gKi8KLQlBZGFwdGVyLT5FZXByb21BZGRyZXNzU2l6ZSA9IEdldEVFUFJPTVNpemU4NzIzQShBZGFwdGVyKTsKLQotCV9SZWFkQWRhcHRlckluZm84NzIzQVUoQWRhcHRlcik7Ci19Ci0KLSNkZWZpbmUgR1BJT19ERUJVR19QT1JUX05VTSAwCi1zdGF0aWMgdm9pZCBydGw4NzIzYXVfdHJpZ2dlcl9ncGlvXzAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQl1MzIgZ3Bpb2N0cmw7Ci0JREJHXzg3MjNBKCI9PT4gdHJpZ2dlcl9ncGlvXzAuLi5cbiIpOwotCXJ0d193cml0ZTE2X2FzeW5jKHBhZGFwdGVyLCBSRUdfR1BJT19QSU5fQ1RSTCwgMCk7Ci0JcnR3X3dyaXRlOF9hc3luYyhwYWRhcHRlciwgUkVHX0dQSU9fUElOX0NUUkwrMiwgMHhGRik7Ci0JZ3Bpb2N0cmwgPSAoQklUKEdQSU9fREVCVUdfUE9SVF9OVU0pIDw8IDI0KXwKLQkJKEJJVChHUElPX0RFQlVHX1BPUlRfTlVNKSA8PCAxNik7Ci0JcnR3X3dyaXRlMzJfYXN5bmMocGFkYXB0ZXIsIFJFR19HUElPX1BJTl9DVFJMLCBncGlvY3RybCk7Ci0JZ3Bpb2N0cmwgfD0gKEJJVChHUElPX0RFQlVHX1BPUlRfTlVNKTw8OCk7Ci0JcnR3X3dyaXRlMzJfYXN5bmMocGFkYXB0ZXIsIFJFR19HUElPX1BJTl9DVFJMLCBncGlvY3RybCk7Ci0JREJHXzg3MjNBKCI8PT09IHRyaWdnZXJfZ3Bpb18wLi4uXG4iKTsKLX0KLQotLyoKLSAqIElmIHZhcmlhYmxlIG5vdCBoYW5kbGVkIGhlcmUsCi0gKiBzb21lIHZhcmlhYmxlcyB3aWxsIGJlIHByb2Nlc3NlZCBpbiBTZXRId1JlZzg3MjNBKCkKLSAqLwotc3RhdGljIHZvaWQgU2V0SHdSZWc4NzIzQVUoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLCB1OCB2YXJpYWJsZSwgdTggKnZhbCkKLXsKLQlzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0JY2FzZSBIV19WQVJfUlhETUFfQUdHX1BHX1RIOgotCQlicmVhazsKLQljYXNlIEhXX1ZBUl9TRVRfUlBXTToKLQkJcnRsODcyM2Ffc2V0X3Jwd20oQWRhcHRlciwgKnZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX1RSSUdHRVJfR1BJT18wOgotCQlydGw4NzIzYXVfdHJpZ2dlcl9ncGlvXzAoQWRhcHRlcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVNldEh3UmVnODcyM0EoQWRhcHRlciwgdmFyaWFibGUsIHZhbCk7Ci0JCWJyZWFrOwotCX0KLQotfQotCi0vKgotICogSWYgdmFyaWFibGUgbm90IGhhbmRsZWQgaGVyZSwKLSAqIHNvbWUgdmFyaWFibGVzIHdpbGwgYmUgcHJvY2Vzc2VkIGluIEdldEh3UmVnODcyM0EoKQotICovCi1zdGF0aWMgdm9pZCBHZXRId1JlZzg3MjNBVShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQotewotCUdldEh3UmVnODcyM0EoQWRhcHRlciwgdmFyaWFibGUsIHZhbCk7CiB9CiAKIC8qICAqLwogLyoJRGVzY3JpcHRpb246ICovCiAvKgkJUXVlcnkgc2V0dGluZyBvZiBzcGVjaWZpZWQgdmFyaWFibGUuICovCiAvKiAgKi8KLXN0YXRpYyB1OCBHZXRIYWxEZWZWYXI4MTkyQ1VzYihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsCi0JCQkgICAgICAgZW51bSBoYWxfZGVmX3ZhcmlhYmxlIGVWYXJpYWJsZSwgdm9pZCAqcFZhbHVlKQoraW50IEdldEhhbERlZlZhcjgxOTJDVXNiKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwKKwkJCSBlbnVtIGhhbF9kZWZfdmFyaWFibGUgZVZhcmlhYmxlLCB2b2lkICpwVmFsdWUpCiB7Ci0Jc3RydWN0IGhhbF9kYXRhXzg3MjNhCSpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShBZGFwdGVyKTsKLQl1OAkJCWJSZXN1bHQgPSBfU1VDQ0VTUzsKKwlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOworCWludCBiUmVzdWx0ID0gX1NVQ0NFU1M7CiAKIAlzd2l0Y2ggKGVWYXJpYWJsZSkgewogCWNhc2UgSEFMX0RFRl9VTkRFUkNPUkFURURTTU9PVEhFRFBXREI6CkBAIC0xNTk2LDc5ICsxNDk3LDggQEAKIAlyZXR1cm4gYlJlc3VsdDsKIH0KIAotLyoJQ2hhbmdlIGRlZmF1bHQgc2V0dGluZyBvZiBzcGVjaWZpZWQgdmFyaWFibGUuICovCi1zdGF0aWMgdTggU2V0SGFsRGVmVmFyODE5MkNVc2Ioc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLAotCQkJICAgICAgIGVudW0gaGFsX2RlZl92YXJpYWJsZSBlVmFyaWFibGUsIHZvaWQgKnBWYWx1ZSkKLXsKLQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKEFkYXB0ZXIpOwotCXU4IGJSZXN1bHQgPSBfU1VDQ0VTUzsKLQotCXN3aXRjaCAoZVZhcmlhYmxlKSB7Ci0JY2FzZSBIQUxfREVGX0RCR19EVU1QX1JYUEtUOgotCQlwSGFsRGF0YS0+YkR1bXBSeFBrdCA9ICooKHU4ICopcFZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBIQUxfREVGX0RCR19ETV9GVU5DOgotCXsKLQkJdTggZG1fZnVuYyA9ICooKHU4ICopcFZhbHVlKTsKLQkJc3RydWN0IGRtX3ByaXYJKnBkbXByaXYgPSAmcEhhbERhdGEtPmRtcHJpdjsKLQkJc3RydWN0IGRtX29kbV90ICpwb2RtcHJpdiA9ICZwSGFsRGF0YS0+b2RtcHJpdjsKLQotCQlpZiAoZG1fZnVuYyA9PSAwKSB7IC8qIGRpc2FibGUgYWxsIGR5bmFtaWMgZnVuYyAqLwotCQkJcG9kbXByaXYtPlN1cHBvcnRBYmlsaXR5ID0gRFlOQU1JQ19GVU5DX0RJU0FCTEU7Ci0JCQlEQkdfODcyM0EoIj09PiBEaXNhYmxlIGFsbCBkeW5hbWljIGZ1bmN0aW9uLi4uXG4iKTsKLQkJfSBlbHNlIGlmIChkbV9mdW5jID09IDEpIHsvKiBkaXNhYmxlIERJRyAqLwotCQkJcG9kbXByaXYtPlN1cHBvcnRBYmlsaXR5ICY9ICh+RFlOQU1JQ19CQl9ESUcpOwotCQkJREJHXzg3MjNBKCI9PT4gRGlzYWJsZSBESUcuLi5cbiIpOwotCQl9IGVsc2UgaWYgKGRtX2Z1bmMgPT0gMikgey8qIGRpc2FibGUgSGlnaCBwb3dlciAqLwotCQkJcG9kbXByaXYtPlN1cHBvcnRBYmlsaXR5ICY9ICh+RFlOQU1JQ19CQl9EWU5BTUlDX1RYUFdSKTsKLQkJfSBlbHNlIGlmIChkbV9mdW5jID09IDMpIHsvKiBkaXNhYmxlIHR4IHBvd2VyIHRyYWNraW5nICovCi0JCQlwb2RtcHJpdi0+U3VwcG9ydEFiaWxpdHkgJj0gKH5EWU5BTUlDX1JGX0NBTElCUkFUSU9OKTsKLQkJCURCR184NzIzQSgiPT0+IERpc2FibGUgdHggcG93ZXIgdHJhY2tpbmcuLi5cbiIpOwotCQl9IGVsc2UgaWYgKGRtX2Z1bmMgPT0gNCkgey8qIGRpc2FibGUgQlQgY29leGlzdGVuY2UgKi8KLQkJCXBkbXByaXYtPkRNRmxhZyAmPSAofkRZTkFNSUNfRlVOQ19CVCk7Ci0JCX0gZWxzZSBpZiAoZG1fZnVuYyA9PSA1KSB7LyogZGlzYWJsZSBhbnRlbm5hIGRpdmVyc2l0eSAqLwotCQkJcG9kbXByaXYtPlN1cHBvcnRBYmlsaXR5ICY9ICh+RFlOQU1JQ19CQl9BTlRfRElWKTsKLQkJfSBlbHNlIGlmIChkbV9mdW5jID09IDYpIHsvKiB0dXJuIG9uIGFsbCBkeW5hbWljIGZ1bmMgKi8KLQkJCWlmICghKHBvZG1wcml2LT5TdXBwb3J0QWJpbGl0eSAmIERZTkFNSUNfQkJfRElHKSkgewotCQkJCXN0cnVjdCBkaWdfdCAqcERpZ1RhYmxlID0KLQkJCQkJJnBvZG1wcml2LT5ETV9EaWdUYWJsZTsKLQkJCQlwRGlnVGFibGUtPkN1cklHVmFsdWUgPSBydHdfcmVhZDgoQWRhcHRlciwgMHhjNTApOwotCQkJfQotCQkJcGRtcHJpdi0+RE1GbGFnIHw9IERZTkFNSUNfRlVOQ19CVDsKLQkJCXBvZG1wcml2LT5TdXBwb3J0QWJpbGl0eSA9IERZTkFNSUNfQUxMX0ZVTkNfRU5BQkxFOwotCQkJREJHXzg3MjNBKCI9PT4gVHVybiBvbiBhbGwgZHluYW1pYyBmdW5jdGlvbi4uLlxuIik7Ci0JCX0KLQl9Ci0JCWJyZWFrOwotCWNhc2UgSFdfREVGX0ZBX0NOVF9EVU1QOgotCXsKLQkJdTggYlJTU0lEdW1wID0gKigodTggKilwVmFsdWUpOwotCQlzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0gPSAmcEhhbERhdGEtPm9kbXByaXY7Ci0JCWlmIChiUlNTSUR1bXApCi0JCQlwRE1fT2RtLT5EZWJ1Z0NvbXBvbmVudHMgPSBPRE1fQ09NUF9ESUd8T0RNX0NPTVBfRkFfQ05UOwotCQllbHNlCi0JCQlwRE1fT2RtLT5EZWJ1Z0NvbXBvbmVudHMgPSAwOwotCX0KLQkJYnJlYWs7Ci0JY2FzZSBIV19ERUZfT0RNX0RCR19GTEFHOgotCXsKLQkJdTY0IERlYnVnQ29tcG9uZW50cyA9ICooKHU2NCAqKXBWYWx1ZSk7Ci0JCXN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSA9ICZwSGFsRGF0YS0+b2RtcHJpdjsKLQkJcERNX09kbS0+RGVidWdDb21wb25lbnRzID0gRGVidWdDb21wb25lbnRzOwotCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfVFJBQ0UsICgiU2V0SGFsRGVmVmFyODE5eFVzYigpOiAiCi0JCSAgICJVbmtvd24gdmFyaWFibGU6ICVkIVxuIiwgZVZhcmlhYmxlKSk7ICovCi0JCWJSZXN1bHQgPSBfRkFJTDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGJSZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIFVwZGF0ZUhhbFJBTWFzazgxOTJDVXNiKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJICAgIHUzMiBtYWNfaWQsIHU4IHJzc2lfbGV2ZWwpCit2b2lkIHJ0bDg3MjNhX3VwZGF0ZV9yYW1hc2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgICB1MzIgbWFjX2lkLCB1OCByc3NpX2xldmVsKQogewogCXU4CWluaXRfcmF0ZSA9IDA7CiAJdTgJbmV0d29ya1R5cGUsIHJhaWQ7CkBAIC0xNzQxLDEwICsxNTcxLDkgQEAKIAlyYXRlX2JpdG1hcCA9IDB4MGZmZmZmZmY7CiAJcmF0ZV9iaXRtYXAgPSBPRE1fR2V0X1JhdGVfQml0bWFwMjNhKCZwSGFsRGF0YS0+b2RtcHJpdiwKIAkJCQkJICBtYWNfaWQsIG1hc2ssIHJzc2lfbGV2ZWwpOwotCXByaW50ayhLRVJOX0RFQlVHICIlcyA9PiBtYWNfaWQ6JWQsIG5ldHdvcmtUeXBlOjB4JTAyeCwgIgotCSAgICAgICAibWFzazoweCUwOHhcblx0ID09PiByc3NpX2xldmVsOiVkLCByYXRlX2JpdG1hcDoweCUwOHhcbiIsCi0JICAgICAgIF9fZnVuY19fLAotCSAgICAgICBtYWNfaWQsIG5ldHdvcmtUeXBlLCBtYXNrLCByc3NpX2xldmVsLCByYXRlX2JpdG1hcCk7CisJREJHXzg3MjNBKCIlcyA9PiBtYWNfaWQ6JWQsIG5ldHdvcmtUeXBlOjB4JTAyeCwgIgorCQkgICJtYXNrOjB4JTA4eFxuXHQgPT0+IHJzc2lfbGV2ZWw6JWQsIHJhdGVfYml0bWFwOjB4JTA4eFxuIiwKKwkJICBfX2Z1bmNfXywgbWFjX2lkLCBuZXR3b3JrVHlwZSwgbWFzaywgcnNzaV9sZXZlbCwgcmF0ZV9iaXRtYXApOwogCiAJbWFzayAmPSByYXRlX2JpdG1hcDsKIAltYXNrIHw9ICgocmFpZDw8MjgpJjB4ZjAwMDAwMDApOwpAQCAtMTc3MCw3ICsxNTk5LDggQEAKIAkJaWYgKHNob3J0R0lyYXRlID09IHRydWUpCiAJCQlpbml0X3JhdGUgfD0gQklUKDYpOwogCi0JCXJ0d193cml0ZTgocGFkYXB0ZXIsIChSRUdfSU5JREFUQV9SQVRFX1NFTCttYWNfaWQpLCBpbml0X3JhdGUpOworCQlydGw4NzIzYXVfd3JpdGU4KHBhZGFwdGVyLCAoUkVHX0lOSURBVEFfUkFURV9TRUwrbWFjX2lkKSwKKwkJCQkgaW5pdF9yYXRlKTsKIAl9CiAKIAkvKiBzZXQgcmFfaWQgKi8KQEAgLTE3ODEsNTQgKzE2MTEsMzkgQEAKIAlwZG1wcml2LT5JTklEQVRBX1JBVEVbbWFjX2lkXSA9IGluaXRfcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgcnRsODcyM2F1X2luaXRfZGVmYXVsdF92YWx1ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoraW50IHJ0d19oYWxfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCXJ0bDg3MjNhX2luaXRfZGVmYXVsdF92YWx1ZShwYWRhcHRlcik7Ci19CisJaW50IHN0YXR1czsKIAotc3RhdGljIHU4IHJ0bDgxOTJjdV9wc19mdW5jKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwKLQkJCSAgICBlbnVtIGhhbF9pbnRmX3BzX2Z1bmMgZWZ1bmNfaWQsIHU4ICp2YWwpCi17Ci0JcmV0dXJuIHRydWU7Ci19CisJcGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkID0gZmFsc2U7CiAKLWludCBydGw4NzIzYXVfc2V0X2hhbF9vcHMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlzdHJ1Y3QgaGFsX29wcwkqcEhhbEZ1bmMgPSAmcGFkYXB0ZXItPkhhbEZ1bmM7CisJc3RhdHVzID0gcnRsODcyM2F1X2hhbF9pbml0KHBhZGFwdGVyKTsKIAotCXBhZGFwdGVyLT5IYWxEYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhhbF9kYXRhXzg3MjNhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWRhcHRlci0+SGFsRGF0YSkgewotCQlEQkdfODcyM0EoImNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIEhBTCBEQVRBXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHN0YXR1cyA9PSBfU1VDQ0VTUykgeworCQlwYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQgPSB0cnVlOworCisJCWlmIChwYWRhcHRlci0+cmVnaXN0cnlwcml2Lm5vdGNoX2ZpbHRlciA9PSAxKQorCQkJcnRsODcyM2Ffbm90Y2hfZmlsdGVyKHBhZGFwdGVyLCAxKTsKKwl9IGVsc2UgeworCQlwYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQgPSBmYWxzZTsKKwkJREJHXzg3MjNBKCJydHdfaGFsX2luaXQyM2E6IGhhbF9faW5pdCBmYWlsXG4iKTsKIAl9Ci0JcGFkYXB0ZXItPmhhbF9kYXRhX3N6ID0gc2l6ZW9mKHN0cnVjdCBoYWxfZGF0YV84NzIzYSk7CiAKLQlwSGFsRnVuYy0+aGFsX2luaXQgPSAmcnRsODcyM2F1X2hhbF9pbml0OwotCXBIYWxGdW5jLT5oYWxfZGVpbml0ID0gJnJ0bDg3MjNhdV9oYWxfZGVpbml0OworCVJUX1RSQUNFKF9tb2R1bGVfaGFsX2luaXRfY18sIF9kcnZfZXJyXywKKwkJICgiLXJ0bDg3MXhfaGFsX2luaXQ6c3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKSk7CiAKLQlwSGFsRnVuYy0+aW5pcnBfaW5pdCA9ICZydGw4NzIzYXVfaW5pcnBfaW5pdDsKLQlwSGFsRnVuYy0+aW5pcnBfZGVpbml0ID0gJnJ0bDg3MjNhdV9pbmlycF9kZWluaXQ7CisJcmV0dXJuIHN0YXR1czsKK30KIAotCXBIYWxGdW5jLT5pbml0X3htaXRfcHJpdiA9ICZydGw4NzIzYXVfaW5pdF94bWl0X3ByaXY7Ci0JcEhhbEZ1bmMtPmZyZWVfeG1pdF9wcml2ID0gJnJ0bDg3MjNhdV9mcmVlX3htaXRfcHJpdjsKK2ludCBydHdfaGFsX2RlaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoreworCWludCBzdGF0dXM7CiAKLQlwSGFsRnVuYy0+aW5pdF9yZWN2X3ByaXYgPSAmcnRsODcyM2F1X2luaXRfcmVjdl9wcml2OwotCXBIYWxGdW5jLT5mcmVlX3JlY3ZfcHJpdiA9ICZydGw4NzIzYXVfZnJlZV9yZWN2X3ByaXY7Ci0JcEhhbEZ1bmMtPkluaXRTd0xlZHMgPSBOVUxMOwotCXBIYWxGdW5jLT5EZUluaXRTd0xlZHMgPSBOVUxMOworCXN0YXR1cyA9IHJ0bDg3MjNhdV9oYWxfZGVpbml0KHBhZGFwdGVyKTsKIAotCXBIYWxGdW5jLT5pbml0X2RlZmF1bHRfdmFsdWUgPSAmcnRsODcyM2F1X2luaXRfZGVmYXVsdF92YWx1ZTsKLQlwSGFsRnVuYy0+aW50Zl9jaGlwX2NvbmZpZ3VyZSA9ICZydGw4NzIzYXVfaW50ZXJmYWNlX2NvbmZpZ3VyZTsKLQlwSGFsRnVuYy0+cmVhZF9hZGFwdGVyX2luZm8gPSAmUmVhZEFkYXB0ZXJJbmZvODcyM0FVOwotCXBIYWxGdW5jLT5TZXRId1JlZ0hhbmRsZXIgPSAmU2V0SHdSZWc4NzIzQVU7Ci0JcEhhbEZ1bmMtPkdldEh3UmVnSGFuZGxlciA9ICZHZXRId1JlZzg3MjNBVTsKLQlwSGFsRnVuYy0+R2V0SGFsRGVmVmFySGFuZGxlciA9ICZHZXRIYWxEZWZWYXI4MTkyQ1VzYjsKLQlwSGFsRnVuYy0+U2V0SGFsRGVmVmFySGFuZGxlciA9ICZTZXRIYWxEZWZWYXI4MTkyQ1VzYjsKLQlwSGFsRnVuYy0+VXBkYXRlUkFNYXNrSGFuZGxlciA9ICZVcGRhdGVIYWxSQU1hc2s4MTkyQ1VzYjsKLQlwSGFsRnVuYy0+aGFsX3htaXQgPSAmcnRsODcyM2F1X2hhbF94bWl0OwotCXBIYWxGdW5jLT5tZ250X3htaXQgPSAmcnRsODcyM2F1X21nbnRfeG1pdDsKLQlwSGFsRnVuYy0+aGFsX3htaXRmcmFtZV9lbnF1ZXVlID0gJnJ0bDg3MjNhdV9oYWxfeG1pdGZyYW1lX2VucXVldWU7Ci0JcEhhbEZ1bmMtPmludGVyZmFjZV9wc19mdW5jID0gJnJ0bDgxOTJjdV9wc19mdW5jOwotCXJ0bDg3MjNhX3NldF9oYWxfb3BzKHBIYWxGdW5jKTsKLQlyZXR1cm4gMDsKKwlpZiAoc3RhdHVzID09IF9TVUNDRVNTKQorCQlwYWRhcHRlci0+aHdfaW5pdF9jb21wbGV0ZWQgPSBmYWxzZTsKKwllbHNlCisJCURCR184NzIzQSgiXG4gcnR3X2hhbF9kZWluaXQyM2E6IGhhbF9pbml0IGZhaWxcbiIpOworCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC91c2Jfb3BzX2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2hhbC91c2Jfb3BzX2xpbnV4LmMKaW5kZXggMDMxMWNkZi4uOGU5ZTYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9oYWwvdXNiX29wc19saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaGFsL3VzYl9vcHNfbGludXguYwpAQCAtMjIsOSArMjIsMTAgQEAKICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KICNpbmNsdWRlIDxydGw4NzIzYV9yZWN2Lmg+CiAKLXN0YXRpYyBpbnQgdXNiY3RybF92ZW5kb3JyZXEoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHZvaWQgKnBkYXRhLCB1MTYgbGVuLCB1OCByZXF1ZXN0dHlwZSkKK3N0YXRpYyBpbnQgdXNiY3RybF92ZW5kb3JyZXEoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggcmVxdWVzdCwKKwkJCSAgICAgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHZvaWQgKnBkYXRhLCB1MTYgbGVuLAorCQkJICAgICB1OCByZXF1ZXN0dHlwZSkKIHsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIJCSpwYWRhcHRlciA9IHBpbnRmaGRsLT5wYWRhcHRlciA7CiAJc3RydWN0IGR2b2JqX3ByaXYgKnBkdm9ianByaXYgPSBhZGFwdGVyX3RvX2R2b2JqKHBhZGFwdGVyKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHBkdm9ianByaXYtPnB1c2JkZXY7CiAKQEAgLTM0LDE1ICszNSwxNyBAQAogCXU4ICpwSW9fYnVmOwogCWludCB2ZW5kb3JyZXFfdGltZXMgPSAwOwogCi0JaWYgKChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCkgfHwgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5wbnBfYnN0b3BfdHJ4KSkgeworCWlmIChwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCB8fCBwYWRhcHRlci0+cHdyY3RybHByaXYucG5wX2JzdG9wX3RyeCkgewogCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9vcHNfb3NfY18sIF9kcnZfZXJyXywKLQkJCSAoInVzYmN0cmxfdmVuZG9ycmVxOihwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZHx8YWRhcHRlci0+cHdyY3RybHByaXYucG5wX2JzdG9wX3RyeCkhISFcbiIpKTsKKwkJCSAoInVzYmN0cmxfdmVuZG9ycmVxOihwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZHx8IgorCQkJICAiYWRhcHRlci0+cHdyY3RybHByaXYucG5wX2JzdG9wX3RyeCkhISFcbiIpKTsKIAkJc3RhdHVzID0gLUVQRVJNOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJaWYgKGxlbiA+IE1BWF9WRU5ET1JfUkVRX0NNRF9TSVpFKSB7Ci0JCURCR184NzIzQSgiWyVzXSBCdWZmZXIgbGVuIGVycm9yICwgdmVuZG9yIHJlcXVlc3QgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlEQkdfODcyM0EoIlslc10gQnVmZmVyIGxlbiBlcnJvciAsIHZlbmRvciByZXF1ZXN0IGZhaWxlZFxuIiwKKwkJCSAgX19mdW5jX18pOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNTMsNyArNTYsNyBAQAogCXBJb19idWYgPSBwZHZvYmpwcml2LT51c2JfdmVuZG9yX3JlcV9idWY7CiAKIAlpZiAocElvX2J1ZiA9PSBOVUxMKSB7Ci0JCURCR184NzIzQSgiWyVzXSBwSW9fYnVmID09IE5VTEwgXG4iLCBfX0ZVTkNUSU9OX18pOworCQlEQkdfODcyM0EoIlslc10gcElvX2J1ZiA9PSBOVUxMIFxuIiwgX19mdW5jX18pOwogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQlnb3RvIHJlbGVhc2VfbXV0ZXg7CiAJfQpAQCAtNzAsOSArNzMsOSBAQAogCQkJbWVtY3B5KHBJb19idWYsIHBkYXRhLCBsZW4pOwogCQl9CiAKLQkJc3RhdHVzID0gcnR3X3VzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF0eXBlLAotCQkJCQkgICAgIHZhbHVlLCBpbmRleCwgcElvX2J1ZiwgbGVuLAotCQkJCQkgICAgIFJUV19VU0JfQ09OVFJPTF9NU0dfVElNRU9VVCk7CisJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF0eXBlLAorCQkJCQkgdmFsdWUsIGluZGV4LCBwSW9fYnVmLCBsZW4sCisJCQkJCSBSVFdfVVNCX0NPTlRST0xfTVNHX1RJTUVPVVQpOwogCiAJCWlmIChzdGF0dXMgPT0gbGVuKSB7ICAgLyogIFN1Y2Nlc3MgdGhpcyBjb250cm9sIHRyYW5zZmVyLiAqLwogCQkJcnR3X3Jlc2V0X2NvbnRpbnVhbF91cmJfZXJyb3IocGR2b2JqcHJpdik7CkBAIC04NSwyMSArODgsMjYgQEAKIAkJfSBlbHNlIHsgLyogIGVycm9yIGNhc2VzICovCiAJCQlEQkdfODcyM0EoInJlZyAweCV4LCB1c2IgJXMgJXUgZmFpbCwgc3RhdHVzOiVkIHZhbHVlID0iCiAJCQkJICAiIDB4JXgsIHZlbmRvcnJlcV90aW1lczolZFxuIiwKLQkJCQkgIHZhbHVlLCAocmVxdWVzdHR5cGUgPT0gMHgwMSkgPyAicmVhZCIgOiAid3JpdGUiLAorCQkJCSAgdmFsdWUsIChyZXF1ZXN0dHlwZSA9PSAweDAxKSA/CisJCQkJICAicmVhZCIgOiAid3JpdGUiLAogCQkJCSAgbGVuLCBzdGF0dXMsICoodTMyICopcGRhdGEsIHZlbmRvcnJlcV90aW1lcyk7CiAKIAkJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQkJaWYgKHN0YXR1cyA9PSAoLUVTSFVURE9XTikgfHwgc3RhdHVzID09IC1FTk9ERVYpIHsKKwkJCQlpZiAoc3RhdHVzID09IC1FU0hVVERPV04gfHwgc3RhdHVzID09IC1FTk9ERVYpCiAJCQkJCXBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkID0gdHJ1ZTsKLQkJCQl9IGVsc2UgewotCQkJCQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EJKnBIYWxEYXRhID0gR0VUX0hBTF9EQVRBKHBhZGFwdGVyKTsKLQkJCQkJcEhhbERhdGEtPnNyZXN0cHJpdi5XaWZpX0Vycm9yX1N0YXR1cyA9IFVTQl9WRU5fUkVRX0NNRF9GQUlMOworCQkJCWVsc2UgeworCQkJCQlzdHJ1Y3QgaGFsX2RhdGFfODcyM2EgKnBIYWxEYXRhOworCQkJCQlwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwYWRhcHRlcik7CisJCQkJCXBIYWxEYXRhLT5zcmVzdHByaXYuV2lmaV9FcnJvcl9TdGF0dXMgPQorCQkJCQkJVVNCX1ZFTl9SRVFfQ01EX0ZBSUw7CiAJCQkJfQogCQkJfSBlbHNlIHsgLyogIHN0YXR1cyAhPSBsZW4gJiYgc3RhdHVzID49IDAgKi8KIAkJCQlpZiAoc3RhdHVzID4gMCkgewogCQkJCQlpZiAocmVxdWVzdHR5cGUgPT0gMHgwMSkgewotCQkJCQkJLyogIEZvciBDb250cm9sIHJlYWQgdHJhbnNmZXIsIHdlIGhhdmUgdG8gY29weQotCQkJCQkJICogdGhlIHJlYWQgZGF0YSBmcm9tIHBJb19idWYgdG8gcGRhdGEuCisJCQkJCQkvKgorCQkJCQkJICogRm9yIENvbnRyb2wgcmVhZCB0cmFuc2ZlciwKKwkJCQkJCSAqIHdlIGhhdmUgdG8gY29weSB0aGUgcmVhZAorCQkJCQkJICogZGF0YSBmcm9tIHBJb19idWYgdG8gcGRhdGEuCiAJCQkJCQkgKi8KIAkJCQkJCW1lbWNweShwZGF0YSwgcElvX2J1ZiwgIGxlbik7CiAJCQkJCX0KQEAgLTExMCwxMSArMTE4LDExIEBACiAJCQkJcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQotCiAJCX0KIAogCQkvKiAgZmlybXdhcmUgZG93bmxvYWQgaXMgY2hlY2tzdW1lZCwgZG9uJ3QgcmV0cnkgKi8KLQkJaWYgKCh2YWx1ZSA+PSBGV184NzIzQV9TVEFSVF9BRERSRVNTICYmIHZhbHVlIDw9IEZXXzg3MjNBX0VORF9BRERSRVNTKSB8fCBzdGF0dXMgPT0gbGVuKQorCQlpZiAoKHZhbHVlID49IEZXXzg3MjNBX1NUQVJUX0FERFJFU1MgJiYKKwkJICAgICB2YWx1ZSA8PSBGV184NzIzQV9FTkRfQUREUkVTUykgfHwgc3RhdHVzID09IGxlbikKIAkJCWJyZWFrOwogCX0KIApAQCAtMTI0LDcgKzEzMiw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHU4IHVzYl9yZWFkOChzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkcikKK3U4IHJ0bDg3MjNhdV9yZWFkOChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYWRkcikKIHsKIAl1OCByZXF1ZXN0OwogCXU4IHJlcXVlc3R0eXBlOwpAQCAtMTQwLDE5ICsxNDgsMjAgQEAKIAl3dmFsdWUgPSAodTE2KShhZGRyJjB4MDAwMGZmZmYpOwogCWxlbiA9IDE7CiAKLQl1c2JjdHJsX3ZlbmRvcnJlcShwaW50ZmhkbCwgcmVxdWVzdCwgd3ZhbHVlLCBpbmRleCwgJmRhdGEsIGxlbiwgcmVxdWVzdHR5cGUpOworCXVzYmN0cmxfdmVuZG9ycmVxKHBhZGFwdGVyLCByZXF1ZXN0LCB3dmFsdWUsIGluZGV4LCAmZGF0YSwKKwkJCSAgbGVuLCByZXF1ZXN0dHlwZSk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIHUxNiB1c2JfcmVhZDE2KHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyKQordTE2IHJ0bDg3MjNhdV9yZWFkMTYoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIpCiB7CiAJdTggcmVxdWVzdDsKIAl1OCByZXF1ZXN0dHlwZTsKIAl1MTYgd3ZhbHVlOwogCXUxNiBpbmRleDsKIAl1MTYgbGVuOwotCXUxNiBkYXRhID0gMDsKKwlfX2xlMTYgZGF0YTsKIAogCXJlcXVlc3QgPSAweDA1OwogCXJlcXVlc3R0eXBlID0gMHgwMTsvKiByZWFkX2luICovCkBAIC0xNjEsMTkgKzE3MCwyMCBAQAogCXd2YWx1ZSA9ICh1MTYpKGFkZHImMHgwMDAwZmZmZik7CiAJbGVuID0gMjsKIAotCXVzYmN0cmxfdmVuZG9ycmVxKHBpbnRmaGRsLCByZXF1ZXN0LCB3dmFsdWUsIGluZGV4LCAmZGF0YSwgbGVuLCByZXF1ZXN0dHlwZSk7CisJdXNiY3RybF92ZW5kb3JyZXEocGFkYXB0ZXIsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsICZkYXRhLAorCQkJICBsZW4sIHJlcXVlc3R0eXBlKTsKIAotCXJldHVybiBkYXRhOworCXJldHVybiBsZTE2X3RvX2NwdShkYXRhKTsKIH0KIAotc3RhdGljIHUzMiB1c2JfcmVhZDMyKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyKQordTMyIHJ0bDg3MjNhdV9yZWFkMzIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIpCiB7CiAJdTggcmVxdWVzdDsKIAl1OCByZXF1ZXN0dHlwZTsKIAl1MTYgd3ZhbHVlOwogCXUxNiBpbmRleDsKIAl1MTYgbGVuOwotCXUzMiBkYXRhID0gMDsKKwlfX2xlMzIgZGF0YTsKIAogCXJlcXVlc3QgPSAweDA1OwogCXJlcXVlc3R0eXBlID0gMHgwMTsvKiByZWFkX2luICovCkBAIC0xODIsMTIgKzE5MiwxMyBAQAogCXd2YWx1ZSA9ICh1MTYpKGFkZHImMHgwMDAwZmZmZik7CiAJbGVuID0gNDsKIAotCXVzYmN0cmxfdmVuZG9ycmVxKHBpbnRmaGRsLCByZXF1ZXN0LCB3dmFsdWUsIGluZGV4LCAmZGF0YSwgbGVuLCByZXF1ZXN0dHlwZSk7CisJdXNiY3RybF92ZW5kb3JyZXEocGFkYXB0ZXIsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsICZkYXRhLAorCQkJICBsZW4sIHJlcXVlc3R0eXBlKTsKIAotCXJldHVybiBkYXRhOworCXJldHVybiBsZTMyX3RvX2NwdShkYXRhKTsKIH0KIAotc3RhdGljIGludCB1c2Jfd3JpdGU4KHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyLCB1OCB2YWwpCitpbnQgcnRsODcyM2F1X3dyaXRlOChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYWRkciwgdTggdmFsKQogewogCXU4IHJlcXVlc3Q7CiAJdTggcmVxdWVzdHR5cGU7CkBAIC0yMDYsMTkgKzIxNywyMCBAQAogCiAJZGF0YSA9IHZhbDsKIAotCXJldCA9IHVzYmN0cmxfdmVuZG9ycmVxKHBpbnRmaGRsLCByZXF1ZXN0LCB3dmFsdWUsIGluZGV4LCAmZGF0YSwgbGVuLCByZXF1ZXN0dHlwZSk7CisJcmV0ID0gdXNiY3RybF92ZW5kb3JyZXEocGFkYXB0ZXIsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsICZkYXRhLAorCQkJCWxlbiwgcmVxdWVzdHR5cGUpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB1c2Jfd3JpdGUxNihzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTE2IHZhbCkKK2ludCBydGw4NzIzYXVfd3JpdGUxNihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYWRkciwgdTE2IHZhbCkKIHsKIAl1OCByZXF1ZXN0OwogCXU4IHJlcXVlc3R0eXBlOwogCXUxNiB3dmFsdWU7CiAJdTE2IGluZGV4OwogCXUxNiBsZW47Ci0JdTE2IGRhdGE7CisJX19sZTE2IGRhdGE7CiAJaW50IHJldDsKIAogCXJlcXVlc3QgPSAweDA1OwpAQCAtMjI4LDIwICsyNDAsMjEgQEAKIAl3dmFsdWUgPSAodTE2KShhZGRyJjB4MDAwMGZmZmYpOwogCWxlbiA9IDI7CiAKLQlkYXRhID0gdmFsOworCWRhdGEgPSBjcHVfdG9fbGUxNih2YWwpOwogCi0JcmV0ID0gdXNiY3RybF92ZW5kb3JyZXEocGludGZoZGwsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsICZkYXRhLCBsZW4sIHJlcXVlc3R0eXBlKTsKKwlyZXQgPSB1c2JjdHJsX3ZlbmRvcnJlcShwYWRhcHRlciwgcmVxdWVzdCwgd3ZhbHVlLCBpbmRleCwgJmRhdGEsCisJCQkJbGVuLCByZXF1ZXN0dHlwZSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB1c2Jfd3JpdGUzMihzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTMyIHZhbCkKK2ludCBydGw4NzIzYXVfd3JpdGUzMihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYWRkciwgdTMyIHZhbCkKIHsKIAl1OCByZXF1ZXN0OwogCXU4IHJlcXVlc3R0eXBlOwogCXUxNiB3dmFsdWU7CiAJdTE2IGluZGV4OwogCXUxNiBsZW47Ci0JdTMyIGRhdGE7CisJX19sZTMyIGRhdGE7CiAJaW50IHJldDsKIAogCXJlcXVlc3QgPSAweDA1OwpAQCAtMjUwLDE0ICsyNjMsMTYgQEAKIAogCXd2YWx1ZSA9ICh1MTYpKGFkZHImMHgwMDAwZmZmZik7CiAJbGVuID0gNDsKLQlkYXRhID0gdmFsOworCWRhdGEgPSBjcHVfdG9fbGUzMih2YWwpOwogCi0JcmV0ID0gdXNiY3RybF92ZW5kb3JyZXEocGludGZoZGwsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsICZkYXRhLCBsZW4sIHJlcXVlc3R0eXBlKTsKKwlyZXQgPSB1c2JjdHJsX3ZlbmRvcnJlcShwYWRhcHRlciwgcmVxdWVzdCwgd3ZhbHVlLCBpbmRleCwgJmRhdGEsCisJCQkJbGVuLCByZXF1ZXN0dHlwZSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHVzYl93cml0ZU4oc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBsZW5ndGgsIHU4ICpwZGF0YSkKK2ludCBydGw4NzIzYXVfd3JpdGVOKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCSAgICAgdTMyIGFkZHIsIHUzMiBsZW5ndGgsIHU4ICpwZGF0YSkKIHsKIAl1OCByZXF1ZXN0OwogCXU4IHJlcXVlc3R0eXBlOwpAQCAtMjczLDkgKzI4OCwxMCBAQAogCiAJd3ZhbHVlID0gKHUxNikoYWRkciYweDAwMDBmZmZmKTsKIAlsZW4gPSBsZW5ndGg7Ci0JIG1lbWNweShidWYsIHBkYXRhLCBsZW4pOworCW1lbWNweShidWYsIHBkYXRhLCBsZW4pOwogCi0JcmV0ID0gdXNiY3RybF92ZW5kb3JyZXEocGludGZoZGwsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCByZXF1ZXN0dHlwZSk7CisJcmV0ID0gdXNiY3RybF92ZW5kb3JyZXEocGFkYXB0ZXIsIHJlcXVlc3QsIHd2YWx1ZSwgaW5kZXgsIGJ1ZiwKKwkJCQlsZW4sIHJlcXVlc3R0eXBlKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMjMsMTEgKzMzOSwxMSBAQAogCiAJbWVtY3B5KCZyZXBvcnQuc3RhdGUsICZidWZmZXJbVVNCX0lOVFJfQ1BXTV9PRkZTRVRdLCAxKTsKIAotCXJldHVybiAoKHBIYWxEYXRhLT5JbnRBcnJheVswXSkmcEhhbERhdGEtPkludHJNYXNrWzBdKSAhPSAwIHx8Ci0JCSgocEhhbERhdGEtPkludEFycmF5WzFdKSZwSGFsRGF0YS0+SW50ck1hc2tbMV0pICE9IDA7CisJcmV0dXJuIChwSGFsRGF0YS0+SW50QXJyYXlbMF0gJiBwSGFsRGF0YS0+SW50ck1hc2tbMF0pICE9IDAgfHwKKwkJKHBIYWxEYXRhLT5JbnRBcnJheVsxXSAmIHBIYWxEYXRhLT5JbnRyTWFza1sxXSkgIT0gMDsKIH0KIAotc3RhdGljIHZvaWQgdXNiX3JlYWRfaW50ZXJydXB0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgdXNiX3JlYWRfaW50ZXJydXB0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnB1cmIpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gKHN0cnVjdCBydHdfYWRhcHRlciAqKXB1cmItPmNvbnRleHQ7CkBAIC0zMzYsNyArMzUyLDcgQEAKIAkgICAgcGFkYXB0ZXItPmJSZWFkUG9ydENhbmNlbCkgewogCQlEQkdfODcyM0EoIiVzKCkgUlggV2FybmluZyEgYkRyaXZlclN0b3BwZWQoJWQpIE9SICIKIAkJCSAgImJTdXJwcmlzZVJlbW92ZWQoJWQpIGJSZWFkUG9ydENhbmNlbCglZClcbiIsCi0JCQkgIF9fRlVOQ1RJT05fXywgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLAorCQkJICBfX2Z1bmNfXywgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLAogCQkJICBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCwKIAkJCSAgcGFkYXB0ZXItPmJSZWFkUG9ydENhbmNlbCk7CiAJCXJldHVybjsKQEAgLTM1OSwzMCArMzc1LDM3IEBACiAJCWlmIChjMmhfZXZ0X2V4aXN0KGMyaF9ldnQpKSB7CiAJCQlpZiAoYzJoX2lkX2ZpbHRlcl9jY3hfODcyM2EoYzJoX2V2dC0+aWQpKSB7CiAJCQkJLyogSGFuZGxlIENDWCByZXBvcnQgaGVyZSAqLwotCQkJCWhhbmRsZV90eHJwdF9jY3hfODcyM2EocGFkYXB0ZXIsICh2b2lkICopKGMyaF9ldnQtPnBheWxvYWQpKTsKLQkJCQkvKiBSZXBsYWNlIHdpdGggc3BlY2lhbCBwb2ludGVyIHRvCi0JCQkJICAgdHJpZ2dlciBjMmhfZXZ0X2NsZWFyMjNhICovCi0JCQkJaWYgKHJ0d19jYnVmX3B1c2gyM2EocGFkYXB0ZXItPmV2dHByaXYuYzJoX3F1ZXVlLAotCQkJCQkJICAodm9pZCAqKSZwYWRhcHRlci0+ZXZ0cHJpdikgIT0KLQkJCQkgICAgX1NVQ0NFU1MpCi0JCQkJCURCR184NzIzQSgiJXMgcnR3X2NidWZfcHVzaDIzYSBmYWlsXG4iLAotCQkJCQkJICBfX2Z1bmNfXyk7Ci0JCQkJc2NoZWR1bGVfd29yaygmcGFkYXB0ZXItPmV2dHByaXYuYzJoX3drKTsKLQkJCX0gZWxzZSBpZiAoKGMyaF9ldnQgPSAoc3RydWN0IGMyaF9ldnRfaGRyICopCi0JCQkJICAgIGttYWxsb2MoMTYsIEdGUF9BVE9NSUMpKSkgewotCQkJCW1lbWNweShjMmhfZXZ0LCBwdXJiLT50cmFuc2Zlcl9idWZmZXIsIDE2KTsKLQkJCQlpZiAocnR3X2NidWZfcHVzaDIzYShwYWRhcHRlci0+ZXZ0cHJpdi5jMmhfcXVldWUsCi0JCQkJCQkgICh2b2lkICopYzJoX2V2dCkgIT0gX1NVQ0NFU1MpCi0JCQkJCURCR184NzIzQSgiJXMgcnR3X2NidWZfcHVzaDIzYSBmYWlsXG4iLAotCQkJCQkJICBfX2Z1bmNfXyk7Ci0JCQkJc2NoZWR1bGVfd29yaygmcGFkYXB0ZXItPmV2dHByaXYuYzJoX3drKTsKKwkJCQloYW5kbGVfdHhycHRfY2N4Xzg3MjNhKHBhZGFwdGVyLCAodm9pZCAqKQorCQkJCQkJICAgICAgIGMyaF9ldnQtPnBheWxvYWQpOworCQkJCXNjaGVkdWxlX3dvcmsoJnBhZGFwdGVyLT5ldnRwcml2LmlycV93ayk7CiAJCQl9IGVsc2UgewotCQkJCS8qIEVycm9yIGhhbmRsaW5nIGZvciBtYWxsb2MgZmFpbCAqLwotCQkJCWlmIChydHdfY2J1Zl9wdXNoMjNhKHBhZGFwdGVyLT5ldnRwcml2LmMyaF9xdWV1ZSwKLQkJCQkJCSAgKHZvaWQgKilOVUxMKSAhPSBfU1VDQ0VTUykKLQkJCQkJREJHXzg3MjNBKCIlcyBydHdfY2J1Zl9wdXNoMjNhIGZhaWxcbiIsCi0JCQkJCQkgIF9fZnVuY19fKTsKLQkJCQlzY2hlZHVsZV93b3JrKCZwYWRhcHRlci0+ZXZ0cHJpdi5jMmhfd2spOworCQkJCXN0cnVjdCBldnRfd29yayAqYzJ3OworCQkJCWludCByZXM7CisKKwkJCQljMncgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXZ0X3dvcmspLAorCQkJCQkJR0ZQX0FUT01JQyk7CisKKwkJCQlpZiAoIWMydykgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvICIKKwkJCQkJICAgICAgICJhbGxvY2F0ZSB3b3JrIGJ1ZmZlclxuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQkJZ290byB1cmJfc3VibWl0OworCQkJCX0KKworCQkJCWMydy0+YWRhcHRlciA9IHBhZGFwdGVyOworCQkJCUlOSVRfV09SSygmYzJ3LT53b3JrLCBydHdfZXZ0X3dvcmspOworCQkJCW1lbWNweShjMnctPnUuYnVmLCBwdXJiLT50cmFuc2Zlcl9idWZmZXIsIDE2KTsKKworCQkJCXJlcyA9IHF1ZXVlX3dvcmsocGFkYXB0ZXItPmV2dHByaXYud3EsCisJCQkJCQkgJmMydy0+d29yayk7CisKKwkJCQlpZiAoIXJlcykgeworCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYWxsIHRvICIKKwkJCQkJICAgICAgICJxdWV1ZV93b3JrKCkgZmFpbGVkXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQlrZnJlZShjMncpOworCQkJCQlnb3RvIHVyYl9zdWJtaXQ7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTQxNSw3ICs0MzgsNyBAQAogCQljYXNlIC1FUFJPVE86CiAJCQlicmVhazsKIAkJY2FzZSAtRUlOUFJPR1JFU1M6Ci0JCQlEQkdfODcyM0EoIkVSUk9SOiBVUkIgSVMgSU4gUFJPR1JFU1MhL24iKTsKKwkJCURCR184NzIzQSgiRVJST1I6IFVSQiBJUyBJTiBQUk9HUkVTUyFcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTQyMywxOCArNDQ2LDE3IEBACiAJfQogfQogCi1zdGF0aWMgdTMyIHVzYl9yZWFkX2ludGVycnVwdChzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkcikKK2ludCBydGw4NzIzYXVfcmVhZF9pbnRlcnJ1cHQoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkcikKIHsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBwaXBlOwotCXUzMiByZXQgPSBfU1VDQ0VTUzsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwaW50ZmhkbC0+cGFkYXB0ZXI7CisJaW50IHJldCA9IF9TVUNDRVNTOwogCXN0cnVjdCBkdm9ial9wcml2ICpwZHZvYmogPSBhZGFwdGVyX3RvX2R2b2JqKGFkYXB0ZXIpOwogCXN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdiA9ICZhZGFwdGVyLT5yZWN2cHJpdjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYmQgPSBwZHZvYmotPnB1c2JkZXY7CiAKIAkvKiB0cmFuc2xhdGUgRE1BIEZJRk8gYWRkciB0byBwaXBlaGFuZGxlICovCi0JcGlwZSA9IGZmYWRkcjJwaXBlaGRsMjNhKHBkdm9iaiwgYWRkcik7CisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHB1c2JkLCBwZHZvYmotPlJ0SW5QaXBlWzFdKTsKIAogCXVzYl9maWxsX2ludF91cmIocHJlY3Zwcml2LT5pbnRfaW5fdXJiLCBwdXNiZCwgcGlwZSwKIAkJCSBwcmVjdnByaXYtPmludF9pbl9idWYsIFVTQl9JTlRSX0NPTlRFTlRfTEVOR1RILApAQCAtNDU3LDE2ICs0NzksMTYgQEAKIAl1OAlzaGlmdF9zeiA9IDA7CiAJdTE2CXBrdF9jbnQ7CiAJdTMyCXBrdF9vZmZzZXQsIHNrYl9sZW4sIGFsbG9jX3N6OwotCXMzMgl0cmFuc2Zlcl9sZW47Ci0Jc3RydWN0IHJlY3Zfc3RhdAkqcHJ4c3RhdDsKLQlzdHJ1Y3QgcGh5X3N0YXQJKnBwaHlfaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IHNrX2J1ZmYJCSpwa3RfY29weSA9IE5VTEw7Ci0Jc3RydWN0IHJlY3ZfZnJhbWUJKnByZWN2ZnJhbWUgPSBOVUxMOwotCXN0cnVjdCByeF9wa3RfYXR0cmliCSpwYXR0cmliID0gTlVMTDsKLQlzdHJ1Y3QgcmVjdl9wcml2CSpwcmVjdnByaXYgPSAmcGFkYXB0ZXItPnJlY3Zwcml2OwotCXN0cnVjdCBydHdfcXVldWUJKnBmcmVlX3JlY3ZfcXVldWUgPSAmcHJlY3Zwcml2LT5mcmVlX3JlY3ZfcXVldWU7CisJaW50CXRyYW5zZmVyX2xlbjsKKwlzdHJ1Y3QgcmVjdl9zdGF0ICpwcnhzdGF0OworCXN0cnVjdCBwaHlfc3RhdAkqcHBoeV9pbmZvOworCXN0cnVjdCBza19idWZmICpwa3RfY29weTsKKwlzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZTsKKwlzdHJ1Y3QgcnhfcGt0X2F0dHJpYiAqcGF0dHJpYjsKKwlzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYgPSAmcGFkYXB0ZXItPnJlY3Zwcml2OworCXN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3JlY3ZfcXVldWUgPSAmcHJlY3Zwcml2LT5mcmVlX3JlY3ZfcXVldWU7CiAKLQl0cmFuc2Zlcl9sZW4gPSAoczMyKXBza2ItPmxlbjsKKwl0cmFuc2Zlcl9sZW4gPSAoaW50KXBza2ItPmxlbjsKIAlwYnVmID0gcHNrYi0+ZGF0YTsKIAogCXByeHN0YXQgPSAoc3RydWN0IHJlY3Zfc3RhdCAqKXBidWY7CkBAIC00ODUsNyArNTA3LDcgQEAKIAkJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9yZWN2X2NfLCBfZHJ2X2Vycl8sCiAJCQkJICgicmVjdmJ1ZjJyZWN2ZnJhbWU6IHByZWN2ZnJhbWUgPT0gTlVMTFxuIikpOwogCQkJREJHXzg3MjNBKCIlcygpLSVkOiBydHdfYWxsb2NfcmVjdmZyYW1lMjNhKCkgZmFpbGVkISBSWCAiCi0JCQkJICAiRHJvcCFcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkJCSAgIkRyb3AhXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJZ290byBfZXhpdF9yZWN2YnVmMnJlY3ZmcmFtZTsKIAkJfQogCkBAIC00OTcsMzEgKzUxOSwzMCBAQAogCiAJCWlmIChwYXR0cmliLT5jcmNfZXJyKSB7CiAJCQlEQkdfODcyM0EoIiVzKCktJWQ6IFJYIFdhcm5pbmchIHJ4IENSQyBFUlJPUiAhIVxuIiwKLQkJCQkgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwotCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZWN2ZnJhbWUsIHBmcmVlX3JlY3ZfcXVldWUpOworCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKKwkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmVjdmZyYW1lKTsKIAkJCWdvdG8gX2V4aXRfcmVjdmJ1ZjJyZWN2ZnJhbWU7CiAJCX0KIAogCQlwa3Rfb2Zmc2V0ID0gUlhERVNDX1NJWkUgKyBwYXR0cmliLT5kcnZpbmZvX3N6ICsKIAkJCXBhdHRyaWItPnNoaWZ0X3N6ICsgcGF0dHJpYi0+cGt0X2xlbjsKIAotCQlpZiAoKHBhdHRyaWItPnBrdF9sZW4gPD0gMCkgfHwgKHBrdF9vZmZzZXQgPiB0cmFuc2Zlcl9sZW4pKSB7CisJCWlmIChwYXR0cmliLT5wa3RfbGVuIDw9IDAgfHwgcGt0X29mZnNldCA+IHRyYW5zZmVyX2xlbikgewogCQkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X3JlY3ZfY18sIF9kcnZfaW5mb18sCiAJCQkJICgicmVjdmJ1ZjJyZWN2ZnJhbWU6IHBrdF9sZW48PSAwXG4iKSk7CiAJCQlEQkdfODcyM0EoIiVzKCktJWQ6IFJYIFdhcm5pbmchXG4iLAotCQkJCSAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7Ci0JCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJlY3ZmcmFtZSwgcGZyZWVfcmVjdl9xdWV1ZSk7CisJCQkJICBfX2Z1bmNfXywgX19MSU5FX18pOworCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZWN2ZnJhbWUpOwogCQkJZ290byBfZXhpdF9yZWN2YnVmMnJlY3ZmcmFtZTsKIAkJfQogCiAJCS8qCU1vZGlmaWVkIGJ5IEFsYmVydCAyMDEwMTIxMyAqLwogCQkvKglGb3IgOCBieXRlcyBJUCBoZWFkZXIgYWxpZ25tZW50LiAqLwogCQkvKglRb3MgZGF0YSwgd2lyZWxlc3MgbGFuIGhlYWRlciBsZW5ndGggaXMgMjYgKi8KLQkJaWYgKHBhdHRyaWItPnFvcykgeworCQlpZiAocGF0dHJpYi0+cW9zKQogCQkJc2hpZnRfc3ogPSA2OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzaGlmdF9zeiA9IDA7Ci0JCX0KIAogCQlza2JfbGVuID0gcGF0dHJpYi0+cGt0X2xlbjsKIApAQCAtNTI5LDcgKzU1MCw3IEBACiAJCSAqIDE1MzYrZHJ2aW5mb19zeitSWERFU0NfU0laRSB0byBkZWZyYWcgcGFja2V0LgogCQkgKiBtb2RpZnkgYWxsb2Nfc3ogZm9yIHJlY3ZpdmUgY3JjIGVycm9yIHBhY2tldAogCQkgKiBieSB0aG9tYXMgMjAxMS0wNi0wMiAqLwotCQlpZiAoKHBhdHRyaWItPm1mcmFnID09IDEpICYmIChwYXR0cmliLT5mcmFnX251bSA9PSAwKSkgeworCQlpZiAocGF0dHJpYi0+bWZyYWcgPT0gMSAmJiBwYXR0cmliLT5mcmFnX251bSA9PSAwKSB7CiAJCQkvKiBhbGxvY19zeiA9IDE2NjQ7CTE2NjQgaXMgMTI4IGFsaWdubWVudC4gKi8KIAkJCWlmIChza2JfbGVuIDw9IDE2NTApCiAJCQkJYWxsb2Nfc3ogPSAxNjY0OwpAQCAtNTQ2LDE3ICs1NjcsMjAgQEAKIAkJaWYgKHBrdF9jb3B5KSB7CiAJCQlwa3RfY29weS0+ZGV2ID0gcGFkYXB0ZXItPnBuZXRkZXY7CiAJCQlwcmVjdmZyYW1lLT5wa3QgPSBwa3RfY29weTsKLQkJCXNrYl9yZXNlcnZlKHBrdF9jb3B5LCA4IC0gKCh1bnNpZ25lZCBsb25nKShwa3RfY29weS0+ZGF0YSkgJiA3KSk7LyogZm9yY2UgcGt0X2NvcHktPmRhdGEgYXQgOC1ieXRlIGFsaWdubWVudCBhZGRyZXNzICovCi0JLypmb3JjZSBpcF9oZHIgYXQgOC1ieXRlIGFsaWdubWVudCBhZGRyZXNzIGFjY29yZGluZyB0byBzaGlmdF9zei4gKi8KKwkJCS8qIGZvcmNlIHBrdF9jb3B5LT5kYXRhIGF0IDgtYnl0ZSBhbGlnbm1lbnQgYWRkcmVzcyAqLworCQkJc2tiX3Jlc2VydmUocGt0X2NvcHksIDggLQorCQkJCSAgICAoKHVuc2lnbmVkIGxvbmcpKHBrdF9jb3B5LT5kYXRhKSAmIDcpKTsKKwkJCS8qZm9yY2UgaXBfaGRyIGF0IDgtYnl0ZSBhbGlnbm1lbnQgYWRkcmVzcworCQkJICBhY2NvcmRpbmcgdG8gc2hpZnRfc3ouICovCiAJCQlza2JfcmVzZXJ2ZShwa3RfY29weSwgc2hpZnRfc3opOwotCQkJbWVtY3B5KHBrdF9jb3B5LT5kYXRhLCAocGJ1ZiArIHBhdHRyaWItPnNoaWZ0X3N6ICsgcGF0dHJpYi0+ZHJ2aW5mb19zeiArIFJYREVTQ19TSVpFKSwgc2tiX2xlbik7CisJCQltZW1jcHkocGt0X2NvcHktPmRhdGEsIHBidWYgKyBwYXR0cmliLT5zaGlmdF9zeiArCisJCQkgICAgICAgcGF0dHJpYi0+ZHJ2aW5mb19zeiArIFJYREVTQ19TSVpFLCBza2JfbGVuKTsKIAkJCXNrYl9wdXQocGt0X2NvcHksIHNrYl9sZW4pOwogCQl9IGVsc2UgewotCQkJaWYgKChwYXR0cmliLT5tZnJhZyA9PSAxKSAmJiAocGF0dHJpYi0+ZnJhZ19udW0gPT0gMCkpIHsKKwkJCWlmIChwYXR0cmliLT5tZnJhZyA9PSAxICYmIHBhdHRyaWItPmZyYWdfbnVtID09IDApIHsKIAkJCQlEQkdfODcyM0EoInJlY3ZidWYycmVjdmZyYW1lOiBhbGxvY19za2IgZmFpbCwgIgogCQkJCQkgICJkcm9wIGZyYWcgZnJhbWUgXG4iKTsKLQkJCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJlY3ZmcmFtZSwKLQkJCQkJCSAgIHBmcmVlX3JlY3ZfcXVldWUpOworCQkJCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmVjdmZyYW1lKTsKIAkJCQlnb3RvIF9leGl0X3JlY3ZidWYycmVjdmZyYW1lOwogCQkJfQogCkBAIC01NjQsOCArNTg4LDcgQEAKIAkJCWlmICghcHJlY3ZmcmFtZS0+cGt0KSB7CiAJCQkJREJHXzg3MjNBKCJyZWN2YnVmMnJlY3ZmcmFtZTogc2tiX2Nsb25lICIKIAkJCQkJICAiZmFpbFxuIik7Ci0JCQkJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZWN2ZnJhbWUsCi0JCQkJCQkgICBwZnJlZV9yZWN2X3F1ZXVlKTsKKwkJCQlydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJlY3ZmcmFtZSk7CiAJCQkJZ290byBfZXhpdF9yZWN2YnVmMnJlY3ZmcmFtZTsKIAkJCX0KIAkJfQpAQCAtNTg5LDcgKzYxMiw3IEBACiAJCWlmICh0cmFuc2Zlcl9sZW4gPiAwICYmIHBrdF9jbnQgPT0gMCkKIAkJCXBrdF9jbnQgPSAobGUzMl90b19jcHUocHJ4c3RhdC0+cnhkdzIpPj4xNikgJiAweGZmOwogCi0JfSB3aGlsZSAoKHRyYW5zZmVyX2xlbiA+IDApICYmIChwa3RfY250ID4gMCkpOworCX0gd2hpbGUgKHRyYW5zZmVyX2xlbiA+IDAgJiYgcGt0X2NudCA+IDApOwogCiBfZXhpdF9yZWN2YnVmMnJlY3ZmcmFtZToKIApAQCAtNjAzLDggKzYyNiw3IEBACiAJc3RydWN0IHJlY3ZfcHJpdiAqcHJlY3Zwcml2ID0gJnBhZGFwdGVyLT5yZWN2cHJpdjsKIAogCXdoaWxlIChOVUxMICE9IChwc2tiID0gc2tiX2RlcXVldWUoJnByZWN2cHJpdi0+cnhfc2tiX3F1ZXVlKSkpIHsKLQkJaWYgKChwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQpIHx8Ci0JCSAgICAocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQpKSB7CisJCWlmIChwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgfHwgcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQpIHsKIAkJCURCR184NzIzQSgicmVjdl90YXNrbGV0ID0+IGJEcml2ZXJTdG9wcGVkIG9yICIKIAkJCQkgICJiU3VycHJpc2VSZW1vdmVkIFxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShwc2tiKTsKQEAgLTYyMCw3ICs2NDIsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdXNiX3JlYWRfcG9ydF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpwdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHVzYl9yZWFkX3BvcnRfY29tcGxldGUoc3RydWN0IHVyYiAqcHVyYikKIHsKIAlzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmID0gKHN0cnVjdCByZWN2X2J1ZiAqKXB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKilwcmVjdmJ1Zi0+YWRhcHRlcjsKQEAgLTY0MSwyMiArNjYzLDIyIEBACiAKIAkJREJHXzg3MjNBKCIlcygpLSVkOiBSWCBXYXJuaW5nISBiRHJpdmVyU3RvcHBlZCglZCkgT1IgIgogCQkJICAiYlN1cnByaXNlUmVtb3ZlZCglZCkgYlJlYWRQb3J0Q2FuY2VsKCVkKVxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLAorCQkJICBfX2Z1bmNfXywgX19MSU5FX18sIHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCwKIAkJCSAgcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQsIHBhZGFwdGVyLT5iUmVhZFBvcnRDYW5jZWwpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHB1cmItPnN0YXR1cyA9PSAwKSB7Ci0JCWlmICgocHVyYi0+YWN0dWFsX2xlbmd0aCA+IE1BWF9SRUNWQlVGX1NaKSB8fAotCQkgICAgKHB1cmItPmFjdHVhbF9sZW5ndGggPCBSWERFU0NfU0laRSkpIHsKKwkJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGggPiBNQVhfUkVDVkJVRl9TWiB8fAorCQkgICAgcHVyYi0+YWN0dWFsX2xlbmd0aCA8IFJYREVTQ19TSVpFKSB7CiAJCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9vcHNfb3NfY18sIF9kcnZfZXJyXywKIAkJCQkgKCJ1c2JfcmVhZF9wb3J0X2NvbXBsZXRlOiAocHVyYi0+YWN0dWFsXyIKIAkJCQkgICJsZW5ndGggPiBNQVhfUkVDVkJVRl9TWikgfHwgKHB1cmItPmFjdHVhbF8iCiAJCQkJICAibGVuZ3RoIDwgUlhERVNDX1NJWkUpXG4iKSk7Ci0JCQlydHdfcmVhZF9wb3J0KHBhZGFwdGVyLCBwcmVjdnByaXYtPmZmX2h3YWRkciwgMCwKLQkJCQkgICAgICBwcmVjdmJ1Zik7CisJCQlydGw4NzIzYXVfcmVhZF9wb3J0KHBhZGFwdGVyLCBSRUNWX0JVTEtfSU5fQUREUiwgMCwKKwkJCQkJICAgIHByZWN2YnVmKTsKIAkJCURCR184NzIzQSgiJXMoKS0lZDogUlggV2FybmluZyFcbiIsCi0JCQkJICBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCX0gZWxzZSB7CiAJCQlydHdfcmVzZXRfY29udGludWFsX3VyYl9lcnJvcigKIAkJCQlhZGFwdGVyX3RvX2R2b2JqKHBhZGFwdGVyKSk7CkBAIC02NjksOCArNjkxLDggQEAKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZwcmVjdnByaXYtPnJlY3ZfdGFza2xldCk7CiAKIAkJCXByZWN2YnVmLT5wc2tiID0gTlVMTDsKLQkJCXJ0d19yZWFkX3BvcnQocGFkYXB0ZXIsIHByZWN2cHJpdi0+ZmZfaHdhZGRyLCAwLAotCQkJCSAgICAgIHByZWN2YnVmKTsKKwkJCXJ0bDg3MjNhdV9yZWFkX3BvcnQocGFkYXB0ZXIsIFJFQ1ZfQlVMS19JTl9BRERSLCAwLAorCQkJCQkgICAgcHJlY3ZidWYpOwogCQl9CiAJfSBlbHNlIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9oY2lfb3BzX29zX2NfLCBfZHJ2X2Vycl8sCkBAIC03MDcsMzIgKzcyOSwzMCBAQAogCQkJcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocGFkYXB0ZXIpOwogCQkJcEhhbERhdGEtPnNyZXN0cHJpdi5XaWZpX0Vycm9yX1N0YXR1cyA9CiAJCQkJVVNCX1JFQURfUE9SVF9GQUlMOwotCQkJcnR3X3JlYWRfcG9ydChwYWRhcHRlciwgcHJlY3Zwcml2LT5mZl9od2FkZHIsCi0JCQkJICAgICAgMCwgcHJlY3ZidWYpOworCQkJcnRsODcyM2F1X3JlYWRfcG9ydChwYWRhcHRlciwgUkVDVl9CVUxLX0lOX0FERFIsIDAsCisJCQkJCSAgICBwcmVjdmJ1Zik7CiAJCQlicmVhazsKIAkJY2FzZSAtRUlOUFJPR1JFU1M6Ci0JCQlEQkdfODcyM0EoIkVSUk9SOiBVUkIgSVMgSU4gUFJPR1JFU1MhL24iKTsKKwkJCURCR184NzIzQSgiRVJST1I6IFVSQiBJUyBJTiBQUk9HUkVTUyFcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCiAJfQogfQogCi1zdGF0aWMgdTMyIHVzYl9yZWFkX3BvcnQoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBjbnQsCi0JCQkgc3RydWN0IHJlY3ZfYnVmICpwcmVjdmJ1ZikKK2ludCBydGw4NzIzYXVfcmVhZF9wb3J0KHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiBjbnQsCisJCQlzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmKQogewogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHBpcGU7Ci0JdW5zaWduZWQgbG9uZyB0bXBhZGRyID0gMDsKLQl1bnNpZ25lZCBsb25nIGFsaWdubWVudCA9IDA7Ci0JdTMyIHJldCA9IF9TVUNDRVNTOwotCXN0cnVjdCB1cmIgKnB1cmIgPSBOVUxMOwotCXN0cnVjdCBydHdfYWRhcHRlcgkJKmFkYXB0ZXIgPSBwaW50ZmhkbC0+cGFkYXB0ZXI7Ci0Jc3RydWN0IGR2b2JqX3ByaXYJKnBkdm9iaiA9IGFkYXB0ZXJfdG9fZHZvYmooYWRhcHRlcik7Ci0Jc3RydWN0IHJlY3ZfcHJpdgkqcHJlY3Zwcml2ID0gJmFkYXB0ZXItPnJlY3Zwcml2OwotCXN0cnVjdCB1c2JfZGV2aWNlCSpwdXNiZCA9IHBkdm9iai0+cHVzYmRldjsKKwl1bnNpZ25lZCBsb25nIHRtcGFkZHI7CisJdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQ7CisJaW50IHJldCA9IF9TVUNDRVNTOworCXN0cnVjdCB1cmIgKnB1cmI7CisJc3RydWN0IGR2b2JqX3ByaXYgKnBkdm9iaiA9IGFkYXB0ZXJfdG9fZHZvYmooYWRhcHRlcik7CisJc3RydWN0IHJlY3ZfcHJpdiAqcHJlY3Zwcml2ID0gJmFkYXB0ZXItPnJlY3Zwcml2OworCXN0cnVjdCB1c2JfZGV2aWNlICpwdXNiZCA9IHBkdm9iai0+cHVzYmRldjsKIAogCWlmIChhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCB8fCBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkIHx8CiAJICAgIGFkYXB0ZXItPnB3cmN0cmxwcml2LnBucF9ic3RvcF90cngpIHsKQEAgLTc1Miw4ICs3NzIsNiBAQAogCWlmICghcHJlY3ZidWYtPnBza2IpCiAJCXByZWN2YnVmLT5wc2tiID0gc2tiX2RlcXVldWUoJnByZWN2cHJpdi0+ZnJlZV9yZWN2X3NrYl9xdWV1ZSk7CiAKLQlydGw4NzIzYXVfaW5pdF9yZWN2YnVmKGFkYXB0ZXIsIHByZWN2YnVmKTsKLQogCS8qIHJlLWFzc2lnbiBmb3IgbGludXggYmFzZWQgb24gc2tiICovCiAJaWYgKCFwcmVjdmJ1Zi0+cHNrYikgewogCQlwcmVjdmJ1Zi0+cHNrYiA9IG5ldGRldl9hbGxvY19za2IoYWRhcHRlci0+cG5ldGRldiwgTUFYX1JFQ1ZCVUZfU1ogKyBSRUNWQlVGRl9BTElHTl9TWik7CkBAIC03NzIsNyArNzkwLDcgQEAKIAlwdXJiID0gcHJlY3ZidWYtPnB1cmI7CiAKIAkvKiB0cmFuc2xhdGUgRE1BIEZJRk8gYWRkciB0byBwaXBlaGFuZGxlICovCi0JcGlwZSA9IGZmYWRkcjJwaXBlaGRsMjNhKHBkdm9iaiwgYWRkcik7CisJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShwdXNiZCwgcGR2b2JqLT5SdEluUGlwZVswXSk7CiAKIAl1c2JfZmlsbF9idWxrX3VyYihwdXJiLCBwdXNiZCwgcGlwZSwgcHJlY3ZidWYtPnBza2ItPmRhdGEsCiAJCQkgIE1BWF9SRUNWQlVGX1NaLCB1c2JfcmVhZF9wb3J0X2NvbXBsZXRlLApAQCAtNzkyLDcgKzgxMCw3IEBACiAKIHZvaWQgcnRsODcyM2F1X3htaXRfdGFza2xldCh2b2lkICpwcml2KQogewotCWludCByZXQgPSBmYWxzZTsKKwlpbnQgcmV0OwogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSAoc3RydWN0IHJ0d19hZGFwdGVyICopcHJpdjsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCkBAIC04MDAsOSArODE4LDggQEAKIAkJcmV0dXJuOwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKChwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQpIHx8Ci0JCSAgICAocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQpIHx8Ci0JCSAgICAocGFkYXB0ZXItPmJXcml0ZVBvcnRDYW5jZWwpKSB7CisJCWlmIChwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgfHwgcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgfHwKKwkJICAgIHBhZGFwdGVyLT5iV3JpdGVQb3J0Q2FuY2VsKSB7CiAJCQlEQkdfODcyM0EoInhtaXRfdGFza2xldCA9PiBiRHJpdmVyU3RvcHBlZCBvciAiCiAJCQkJICAiYlN1cnByaXNlUmVtb3ZlZCBvciBiV3JpdGVQb3J0Q2FuY2VsXG4iKTsKIAkJCWJyZWFrOwpAQCAtODE1LDMxICs4MzIsNiBAQAogCX0KIH0KIAotdm9pZCBydGw4NzIzYXVfc2V0X2ludGZfb3BzKHN0cnVjdCBfaW9fb3BzICpwb3BzKQotewotCi0JbWVtc2V0KCh1OCAqKXBvcHMsIDAsIHNpemVvZihzdHJ1Y3QgX2lvX29wcykpOwotCi0JcG9wcy0+X3JlYWQ4ID0gJnVzYl9yZWFkODsKLQlwb3BzLT5fcmVhZDE2ID0gJnVzYl9yZWFkMTY7Ci0JcG9wcy0+X3JlYWQzMiA9ICZ1c2JfcmVhZDMyOwotCXBvcHMtPl9yZWFkX21lbSA9ICZ1c2JfcmVhZF9tZW0yM2E7Ci0JcG9wcy0+X3JlYWRfcG9ydCA9ICZ1c2JfcmVhZF9wb3J0OwotCi0JcG9wcy0+X3dyaXRlOCA9ICZ1c2Jfd3JpdGU4OwotCXBvcHMtPl93cml0ZTE2ID0gJnVzYl93cml0ZTE2OwotCXBvcHMtPl93cml0ZTMyID0gJnVzYl93cml0ZTMyOwotCXBvcHMtPl93cml0ZU4gPSAmdXNiX3dyaXRlTjsKLQotCXBvcHMtPl93cml0ZV9tZW0gPSAmdXNiX3dyaXRlX21lbTIzYTsKLQlwb3BzLT5fd3JpdGVfcG9ydCA9ICZ1c2Jfd3JpdGVfcG9ydDIzYTsKLQotCXBvcHMtPl9yZWFkX3BvcnRfY2FuY2VsID0gJnVzYl9yZWFkX3BvcnRfY2FuY2VsMjNhOwotCXBvcHMtPl93cml0ZV9wb3J0X2NhbmNlbCA9ICZ1c2Jfd3JpdGVfcG9ydDIzYV9jYW5jZWw7Ci0KLQlwb3BzLT5fcmVhZF9pbnRlcnJ1cHQgPSAmdXNiX3JlYWRfaW50ZXJydXB0OwotfQotCiB2b2lkIHJ0bDg3MjNhdV9zZXRfaHdfdHlwZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXBhZGFwdGVyLT5jaGlwX3R5cGUgPSBSVEw4NzIzQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9IYWw4NzIzQVBoeUNmZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL0hhbDg3MjNBUGh5Q2ZnLmgKaW5kZXggNGI3ZjM0Ny4uMjk5NTk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL0hhbDg3MjNBUGh5Q2ZnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL0hhbDg3MjNBUGh5Q2ZnLmgKQEAgLTY4LDEzICs2OCwxMyBAQAogCiBlbnVtIFdJUkVMRVNTX01PREUgewogCVdJUkVMRVNTX01PREVfVU5LTk9XTgk9IDB4MDAsCi0JV0lSRUxFU1NfTU9ERV9BCQk9IEJJVDIsCi0JV0lSRUxFU1NfTU9ERV9CCQk9IEJJVDAsCi0JV0lSRUxFU1NfTU9ERV9HCQk9IEJJVDEsCi0JV0lSRUxFU1NfTU9ERV9BVVRPCT0gQklUNSwKLQlXSVJFTEVTU19NT0RFX05fMjRHCT0gQklUMywKLQlXSVJFTEVTU19NT0RFX05fNUcJPSBCSVQ0LAotCVdJUkVMRVNTX01PREVfQUMJPSBCSVQ2CisJV0lSRUxFU1NfTU9ERV9BCQk9IEJJVCgyKSwKKwlXSVJFTEVTU19NT0RFX0IJCT0gQklUKDApLAorCVdJUkVMRVNTX01PREVfRwkJPSBCSVQoMSksCisJV0lSRUxFU1NfTU9ERV9BVVRPCT0gQklUKDUpLAorCVdJUkVMRVNTX01PREVfTl8yNEcJPSBCSVQoMyksCisJV0lSRUxFU1NfTU9ERV9OXzVHCT0gQklUKDQpLAorCVdJUkVMRVNTX01PREVfQUMJPSBCSVQoNikKIH07CiAKIGVudW0gYmFzZWJhbmRfY29uZmlnX3R5cGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL0hhbDg3MjNQd3JTZXEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9IYWw4NzIzUHdyU2VxLmgKaW5kZXggN2YzYmRlYS4uNGExZjU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL0hhbDg3MjNQd3JTZXEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvSGFsODcyM1B3clNlcS5oCkBAIC0zOSw3MSArMzksNzEgQEAKICAqIHsgb2Zmc2V0LCBjdXRfbXNrLCBmYWJfbXNrfGludGVyZmFjZV9tc2ssIGJhc2V8Y21kLCBtc2ssIHZhbHVlIH0sICBjb21tZW50cyBoZXJlCiAgKi8KICNkZWZpbmUgUlRMODcyM0FfVFJBTlNfQ0FSREVNVV9UT19BQ1QJCQkJCQkJCQkJCQkJCVwKLQl7MHgwMDIwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUMCwgQklUMH0sIC8qMHgyMFswXSA9IDFiJzEgZW5hYmxlIExET0ExMiBNQUNSTyBibG9jayBmb3IgYWxsIGludGVyZmFjZSovICAgXAotCXsweDAwNjcsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLfFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ0LCAwfSwgLyoweDY3WzBdID0gMCB0byBkaXNhYmxlIEJUX0dQU19TRUwgcGlucyovCVwKKwl7MHgwMDIwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDApLCBCSVQoMCl9LCAvKjB4MjBbMF0gPSAxYicxIGVuYWJsZSBMRE9BMTIgTUFDUk8gYmxvY2sgZm9yIGFsbCBpbnRlcmZhY2UqLyBcCisJezB4MDA2NywgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1VTQl9NU0t8UFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg0KSwgMH0sIC8qMHg2N1swXSA9IDAgdG8gZGlzYWJsZSBCVF9HUFNfU0VMIHBpbnMqLwlcCiAJezB4MDAwMSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1VTQl9NU0t8UFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfREVMQVksIDEsIFBXUlNFUV9ERUxBWV9NU30sLypEZWxheSAxbXMqLyAgIFwKLQl7MHgwMDAwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUNSwgMH0sIC8qMHgwMFs1XSA9IDFiJzAgcmVsZWFzZSBhbmFsb2cgSXBzIHRvIGRpZ2l0YWwgLCAxOmlzb2xhdGlvbiovICAgXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQyLCAwfSwvKiBkaXNhYmxlIFNXIExQUyAweDA0WzEwXT0gMCovCVwKLQl7MHgwMDA2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9QT0xMSU5HLCBCSVQxLCBCSVQxfSwvKiB3YWl0IHRpbGwgMHgwNFsxN10gPSAxICAgIHBvd2VyIHJlYWR5Ki8JXAotCXsweDAwMDYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCBCSVQwfSwvKiByZWxlYXNlIFdMT04gcmVzZXQgIDB4MDRbMTZdPSAxKi8JXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ3LCAwfSwvKiBkaXNhYmxlIEhXUEROIDB4MDRbMTVdPSAwKi8JXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCAoQklUNHxCSVQzKSwgMH0sLyogZGlzYWJsZSBXTCBzdXNwZW5kKi8JXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCBCSVQwfSwvKiBwb2xsaW5nIHVudGlsIHJldHVybiAwKi8JXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1BPTExJTkcsIEJJVDAsIDB9LC8qKi8JXAotCXsweDAwNEUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ3LCAxfSwvKjB4NENbMjNdID0gMHg0RVs3XSA9IDEsIHN3aXRjaCBEUERUX1NFTF9QIG91dHB1dCBmcm9tIFdMIEJCICovXAorCXsweDAwMDAsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLfFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoNSksIDB9LCAvKjB4MDBbNV0gPSAxYicwIHJlbGVhc2UgYW5hbG9nIElwcyB0byBkaWdpdGFsICwgMTppc29sYXRpb24qLyAgIFwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDIpLCAwfSwvKiBkaXNhYmxlIFNXIExQUyAweDA0WzEwXT0gMCovCVwKKwl7MHgwMDA2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9QT0xMSU5HLCBCSVQoMSksIEJJVCgxKX0sLyogd2FpdCB0aWxsIDB4MDRbMTddID0gMSAgICBwb3dlciByZWFkeSovCVwKKwl7MHgwMDA2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDApLCBCSVQoMCl9LC8qIHJlbGVhc2UgV0xPTiByZXNldCAgMHgwNFsxNl09IDEqLyBcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg3KSwgMH0sLyogZGlzYWJsZSBIV1BETiAweDA0WzE1XT0gMCovCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgKEJJVCg0KXxCSVQoMykpLCAwfSwvKiBkaXNhYmxlIFdMIHN1c3BlbmQqLwlcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgQklUKDApfSwvKiBwb2xsaW5nIHVudGlsIHJldHVybiAwKi8JXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1BPTExJTkcsIEJJVCgwKSwgMH0sLyoqLwlcCisJezB4MDA0RSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg3KSwgMX0sLyoweDRDWzIzXSA9IDB4NEVbN10gPSAxLCBzd2l0Y2ggRFBEVF9TRUxfUCBvdXRwdXQgZnJvbSBXTCBCQiAqL1wKIAogI2RlZmluZSBSVEw4NzIzQV9UUkFOU19BQ1RfVE9fQ0FSREVNVQkJCQkJCQkJCQkJCQlcCiAJezB4MDAxRiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB9LC8qMHgxRls3OjBdID0gMCB0dXJuIG9mZiBSRiovCVwKLQl7MHgwMDRFLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUNywgMH0sLyoweDRDWzIzXSA9IDB4NEVbN10gPSAwLCBzd2l0Y2ggRFBEVF9TRUxfUCBvdXRwdXQgZnJvbSByZWdpc3RlciAweDY1WzJdICovXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQxLCBCSVQxfSwgLyoweDA0WzldID0gMSB0dXJuIG9mZiBNQUMgYnkgSFcgc3RhdGUgbWFjaGluZSovCVwKLQl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9QT0xMSU5HLCBCSVQxLCAwfSwgLyp3YWl0IHRpbGwgMHgwNFs5XSA9IDAgcG9sbGluZyB1bnRpbCByZXR1cm4gMCB0byBkaXNhYmxlKi8JXAotCXsweDAwMDAsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLfFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ1LCBCSVQ1fSwgLyoweDAwWzVdID0gMWInMSBhbmFsb2cgSXBzIHRvIGRpZ2l0YWwgLCAxOmlzb2xhdGlvbiovICAgXAotCXsweDAwMjAsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLfFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCAwfSwgLyoweDIwWzBdID0gMWInMCBkaXNhYmxlIExET0ExMiBNQUNSTyBibG9jayovICAgXAorCXsweDAwNEUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoNyksIDB9LC8qMHg0Q1syM10gPSAweDRFWzddID0gMCwgc3dpdGNoIERQRFRfU0VMX1Agb3V0cHV0IGZyb20gcmVnaXN0ZXIgMHg2NVsyXSAqL1wKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDEpLCBCSVQoMSl9LCAvKjB4MDRbOV0gPSAxIHR1cm4gb2ZmIE1BQyBieSBIVyBzdGF0ZSBtYWNoaW5lKi8JXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1BPTExJTkcsIEJJVCgxKSwgMH0sIC8qd2FpdCB0aWxsIDB4MDRbOV0gPSAwIHBvbGxpbmcgdW50aWwgcmV0dXJuIDAgdG8gZGlzYWJsZSovCVwKKwl7MHgwMDAwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDUpLCBCSVQoNSl9LCAvKjB4MDBbNV0gPSAxYicxIGFuYWxvZyBJcHMgdG8gZGlnaXRhbCAsIDE6aXNvbGF0aW9uKi8gICBcCisJezB4MDAyMCwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1VTQl9NU0t8UFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgMH0sIC8qMHgyMFswXSA9IDFiJzAgZGlzYWJsZSBMRE9BMTIgTUFDUk8gYmxvY2sqLyAgIFwKIAogCiAjZGVmaW5lIFJUTDg3MjNBX1RSQU5TX0NBUkRFTVVfVE9fU1VTCQkJCQkJCQkJCQkJCVwKLQl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfUENJX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUNHxCSVQzLCAoQklUNHxCSVQzKX0sIC8qMHgwNFsxMjoxMV0gPSAyYicxMSBlbmFibGUgV0wgc3VzcGVuZCBmb3IgUENJZSovCVwKLQl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUM3xCSVQ0LCBCSVQzfSwgLyoweDA0WzEyOjExXSA9IDJiJzAxIGVuYWJsZSBXTCBzdXNwZW5kKi8JXAotCXsweDAwMjMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUNCwgQklUNH0sIC8qMHgyM1s0XSA9IDFiJzEgMTJIIExETyBlbnRlciBzbGVlcCBtb2RlKi8gICBcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg0KXxCSVQoMyksIChCSVQoNCl8QklUKDMpKX0sIC8qMHgwNFsxMjoxMV0gPSAyYicxMSBlbmFibGUgV0wgc3VzcGVuZCBmb3IgUENJZSovCVwKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDMpfEJJVCg0KSwgQklUKDMpfSwgLyoweDA0WzEyOjExXSA9IDJiJzAxIGVuYWJsZSBXTCBzdXNwZW5kKi8JXAorCXsweDAwMjMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDQpLCBCSVQoNCl9LCAvKjB4MjNbNF0gPSAxYicxIDEySCBMRE8gZW50ZXIgc2xlZXAgbW9kZSovICAgXAogCXsweDAwMDcsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGRiwgMHgyMH0sIC8qMHgwN1s3OjBdID0gMHgyMCBTRElPIFNPUCBvcHRpb24gdG8gZGlzYWJsZSBCRy9NQi9BQ0svU1dSKi8gICBcCi0JezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDN8QklUNCwgQklUM3xCSVQ0fSwgLyoweDA0WzEyOjExXSA9IDJiJzExIGVuYWJsZSBXTCBzdXNwZW5kIGZvciBQQ0llKi8JXAotCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfV1JJVEUsIEJJVDAsIEJJVDB9LCAvKlNldCBTRElPIHN1c3BlbmQgbG9jYWwgcmVnaXN0ZXIqLwlcCi0JezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfU0RJTywgUFdSX0NNRF9QT0xMSU5HLCBCSVQxLCAwfSwgLyp3YWl0IHBvd2VyIHN0YXRlIHRvIHN1c3BlbmQqLworCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9QQ0lfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoMyl8QklUKDQpLCBCSVQoMyl8QklUKDQpfSwgLyoweDA0WzEyOjExXSA9IDJiJzExIGVuYWJsZSBXTCBzdXNwZW5kIGZvciBQQ0llKi8JXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgQklUKDApfSwgLypTZXQgU0RJTyBzdXNwZW5kIGxvY2FsIHJlZ2lzdGVyKi8JXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfUE9MTElORywgQklUKDEpLCAwfSwgLyp3YWl0IHBvd2VyIHN0YXRlIHRvIHN1c3BlbmQqLwogCiAjZGVmaW5lIFJUTDg3MjNBX1RSQU5TX1NVU19UT19DQVJERU1VCQkJCQkJCQkJCQkJCVwKLQl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUMyB8IEJJVDcsIDB9LCAvKmNsZWFyIHN1c3BlbmQgZW5hYmxlIGFuZCBwb3dlciBkb3duIGVuYWJsZSovCVwKLQl7MHgwMDg2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9TRElPLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCAwfSwgLypTZXQgU0RJTyBzdXNwZW5kIGxvY2FsIHJlZ2lzdGVyKi8JXAotCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfUE9MTElORywgQklUMSwgQklUMX0sIC8qd2FpdCBwb3dlciBzdGF0ZSB0byBzdXNwZW5kKi9cCi0JezB4MDAyMywgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ0LCAwfSwgLyoweDIzWzRdID0gMWInMCAxMkggTERPIGVudGVyIG5vcm1hbCBtb2RlKi8gICBcCi0JezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDN8QklUNCwgMH0sIC8qMHgwNFsxMjoxMV0gPSAyYicwMWVuYWJsZSBXTCBzdXNwZW5kKi8KKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDMpIHwgQklUKDcpLCAwfSwgLypjbGVhciBzdXNwZW5kIGVuYWJsZSBhbmQgcG93ZXIgZG93biBlbmFibGUqLwlcCisJezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfU0RJTywgUFdSX0NNRF9XUklURSwgQklUKDApLCAwfSwgLypTZXQgU0RJTyBzdXNwZW5kIGxvY2FsIHJlZ2lzdGVyKi8JXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfUE9MTElORywgQklUKDEpLCBCSVQoMSl9LCAvKndhaXQgcG93ZXIgc3RhdGUgdG8gc3VzcGVuZCovXAorCXsweDAwMjMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDQpLCAwfSwgLyoweDIzWzRdID0gMWInMCAxMkggTERPIGVudGVyIG5vcm1hbCBtb2RlKi8gICBcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgzKXxCSVQoNCksIDB9LCAvKjB4MDRbMTI6MTFdID0gMmInMDFlbmFibGUgV0wgc3VzcGVuZCovCiAKICNkZWZpbmUgUlRMODcyM0FfVFJBTlNfQ0FSREVNVV9UT19DQVJERElTCQkJCQkJCQkJCQkJCVwKIAl7MHgwMDA3LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB4MjB9LCAvKjB4MDcgPSAweDIwICwgU09QIG9wdGlvbiB0byBkaXNhYmxlIEJHL01CKi8JXAotCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLfFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQzfEJJVDQsIEJJVDN9LCAvKjB4MDRbMTI6MTFdID0gMmInMDEgZW5hYmxlIFdMIHN1c3BlbmQqLwlcCi0JezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDIsIEJJVDJ9LCAvKjB4MDRbMTBdID0gMSwgZW5hYmxlIFNXIExQUyovCVwKLQl7MHgwMDRBLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUMCwgMX0sIC8qMHg0OFsxNl0gPSAxIHRvIGVuYWJsZSBHUElPOSBhcyBFWFQgV0FLRVVQKi8gICBcCi0JezB4MDAyMywgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ0LCBCSVQ0fSwgLyoweDIzWzRdID0gMWInMSAxMkggTERPIGVudGVyIHNsZWVwIG1vZGUqLyAgIFwKLQl7MHgwMDg2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9TRElPLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCBCSVQwfSwgLypTZXQgU0RJTyBzdXNwZW5kIGxvY2FsIHJlZ2lzdGVyKi8JXAotCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfUE9MTElORywgQklUMSwgMH0sIC8qd2FpdCBwb3dlciBzdGF0ZSB0byBzdXNwZW5kKi8KKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TS3xQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDMpfEJJVCg0KSwgQklUKDMpfSwgLyoweDA0WzEyOjExXSA9IDJiJzAxIGVuYWJsZSBXTCBzdXNwZW5kKi8JXAorCXsweDAwMDUsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9QQ0lfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoMiksIEJJVCgyKX0sIC8qMHgwNFsxMF0gPSAxLCBlbmFibGUgU1cgTFBTKi8JXAorCXsweDAwNEEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoMCksIDF9LCAvKjB4NDhbMTZdID0gMSB0byBlbmFibGUgR1BJTzkgYXMgRVhUIFdBS0VVUCovICAgXAorCXsweDAwMjMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDQpLCBCSVQoNCl9LCAvKjB4MjNbNF0gPSAxYicxIDEySCBMRE8gZW50ZXIgc2xlZXAgbW9kZSovICAgXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgQklUKDApfSwgLypTZXQgU0RJTyBzdXNwZW5kIGxvY2FsIHJlZ2lzdGVyKi8JXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfUE9MTElORywgQklUKDEpLCAwfSwgLyp3YWl0IHBvd2VyIHN0YXRlIHRvIHN1c3BlbmQqLwogCiAjZGVmaW5lIFJUTDg3MjNBX1RSQU5TX0NBUkRESVNfVE9fQ0FSREVNVQkJCQkJCQkJCQkJCQlcCi0JezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDMgfCBCSVQ3LCAwfSwgLypjbGVhciBzdXNwZW5kIGVuYWJsZSBhbmQgcG93ZXIgZG93biBlbmFibGUqLwlcCi0JezB4MDA4NiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfU0RJTywgUFdSX0NNRF9XUklURSwgQklUMCwgMH0sIC8qU2V0IFNESU8gc3VzcGVuZCBsb2NhbCByZWdpc3RlciovCVwKLQl7MHgwMDg2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9TRElPLCBQV1JfQ01EX1BPTExJTkcsIEJJVDEsIEJJVDF9LCAvKndhaXQgcG93ZXIgc3RhdGUgdG8gc3VzcGVuZCovXAotCXsweDAwNEEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCAwfSwgLyoweDQ4WzE2XSA9IDAgdG8gZGlzYWJsZSBHUElPOSBhcyBFWFQgV0FLRVVQKi8gICBcCi0JezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDN8QklUNCwgMH0sIC8qMHgwNFsxMjoxMV0gPSAyYicwMWVuYWJsZSBXTCBzdXNwZW5kKi9cCi0JezB4MDAyMywgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ0LCAwfSwgLyoweDIzWzRdID0gMWInMCAxMkggTERPIGVudGVyIG5vcm1hbCBtb2RlKi8gICBcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgzKSB8IEJJVCg3KSwgMH0sIC8qY2xlYXIgc3VzcGVuZCBlbmFibGUgYW5kIHBvd2VyIGRvd24gZW5hYmxlKi8JXAorCXsweDAwODYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfV1JJVEUsIEJJVCgwKSwgMH0sIC8qU2V0IFNESU8gc3VzcGVuZCBsb2NhbCByZWdpc3RlciovCVwKKwl7MHgwMDg2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9TRElPLCBQV1JfQ01EX1BPTExJTkcsIEJJVCgxKSwgQklUKDEpfSwgLyp3YWl0IHBvd2VyIHN0YXRlIHRvIHN1c3BlbmQqL1wKKwl7MHgwMDRBLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfVVNCX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDApLCAwfSwgLyoweDQ4WzE2XSA9IDAgdG8gZGlzYWJsZSBHUElPOSBhcyBFWFQgV0FLRVVQKi8gICBcCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgzKXxCSVQoNCksIDB9LCAvKjB4MDRbMTI6MTFdID0gMmInMDFlbmFibGUgV0wgc3VzcGVuZCovXAorCXsweDAwMjMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDQpLCAwfSwgLyoweDIzWzRdID0gMWInMCAxMkggTERPIGVudGVyIG5vcm1hbCBtb2RlKi8gICBcCiAJezB4MDMwMSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB9LC8qUENJZSBETUEgc3RhcnQqLwogCiAKICNkZWZpbmUgUlRMODcyM0FfVFJBTlNfQ0FSREVNVV9UT19QRE4JCQkJCQkJCQkJCQlcCi0JezB4MDAyMywgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1NESU9fTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ0LCBCSVQ0fSwgLyoweDIzWzRdID0gMWInMSAxMkggTERPIGVudGVyIHNsZWVwIG1vZGUqLyAgIFwKKwl7MHgwMDIzLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg0KSwgQklUKDQpfSwgLyoweDIzWzRdID0gMWInMSAxMkggTERPIGVudGVyIHNsZWVwIG1vZGUqLyAgIFwKIAl7MHgwMDA3LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfU0RJT19NU0t8UFdSX0lOVEZfVVNCX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGRiwgMHgyMH0sIC8qMHgwN1s3OjBdID0gMHgyMCBTT1Agb3B0aW9uIHRvIGRpc2FibGUgQkcvTUIvQUNLL1NXUiovICAgXAotCXsweDAwMDYsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQwLCAwfSwvKiAweDA0WzE2XSA9IDAqL1wKLQl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUNywgQklUN30sLyogMHgwNFsxNV0gPSAxKi8KKwl7MHgwMDA2LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDApLCAwfSwvKiAweDA0WzE2XSA9IDAqL1wKKwl7MHgwMDA1LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDcpLCBCSVQoNyl9LC8qIDB4MDRbMTVdID0gMSovCiAKICNkZWZpbmUgUlRMODcyM0FfVFJBTlNfUEROX1RPX0NBUkRFTVUJCQkJCQkJCQkJCQlcCi0JezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDcsIDB9LC8qIDB4MDRbMTVdID0gMCovCisJezB4MDAwNSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg3KSwgMH0sLyogMHgwNFsxNV0gPSAwKi8KIAogI2RlZmluZSBSVEw4NzIzQV9UUkFOU19BQ1RfVE9fTFBTCQkJCQkJCQkJCQkJCQlcCiAJezB4MDMwMSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB4RkZ9LC8qUENJZSBETUEgc3RvcCovCVwKQEAgLTExMiwyNSArMTEyLDI1IEBACiAJezB4MDVGOSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfUE9MTElORywgMHhGRiwgMH0sLypTaG91bGQgYmUgemVybyBpZiBubyBwYWNrZXQgaXMgdHJhbnNtaXR0aW5nKi8JXAogCXsweDA1RkEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1BPTExJTkcsIDB4RkYsIDB9LC8qU2hvdWxkIGJlIHplcm8gaWYgbm8gcGFja2V0IGlzIHRyYW5zbWl0dGluZyovCVwKIAl7MHgwNUZCLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9QT0xMSU5HLCAweEZGLCAwfSwvKlNob3VsZCBiZSB6ZXJvIGlmIG5vIHBhY2tldCBpcyB0cmFuc21pdHRpbmcqLwlcCi0JezB4MDAwMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDAsIDB9LC8qQ0NLIGFuZCBPRkRNIGFyZSBkaXNhYmxlZCwgYW5kIGNsb2NrIGFyZSBnYXRlZCovCVwKKwl7MHgwMDAyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDApLCAwfSwvKkNDSyBhbmQgT0ZETSBhcmUgZGlzYWJsZWQsIGFuZCBjbG9jayBhcmUgZ2F0ZWQqLwlcCiAJezB4MDAwMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfREVMQVksIDAsIFBXUlNFUV9ERUxBWV9VU30sLypEZWxheSAxdXMqLwlcCi0JezB4MDAwMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDEsIDB9LC8qV2hvbGUgQkIgaXMgcmVzZXQqLwlcCisJezB4MDAwMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgxKSwgMH0sLypXaG9sZSBCQiBpcyByZXNldCovCVwKIAl7MHgwMTAwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGRiwgMHgwM30sLypSZXNldCBNQUMgVFJYKi8JXAotCXsweDAxMDEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQxLCAwfSwvKmNoZWNrIGlmIHJlbW92ZWQgbGF0ZXIqLwlcCisJezB4MDEwMSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCgxKSwgMH0sLypjaGVjayBpZiByZW1vdmVkIGxhdGVyKi8JXAogCXsweDAwOTMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGRiwgMHgwMH0sLypXaGVuIGRyaXZlciBlbnRlciBTdXMvIERpc2FibGUsIGVuYWJsZSBMT1AgZm9yIEJUKi8JXAotCXsweDA1NTMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ1LCBCSVQ1fSwvKlJlc3BvbmQgVHhPSyB0byBzY2hlZHVsZXIqLworCXsweDA1NTMsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoNSksIEJJVCg1KX0sLypSZXNwb25kIFR4T0sgdG8gc2NoZWR1bGVyKi8KIAogI2RlZmluZSBSVEw4NzIzQV9UUkFOU19MUFNfVE9fQUNUCQkJCQkJCQkJCQkJCQkJXAogCXsweDAwODAsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9TRElPX01TSywgUFdSX0JBU0VBRERSX1NESU8sIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB4ODR9LCAvKlNESU8gUlBXTSovXAogCXsweEZFNTgsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAweDg0fSwgLypVU0IgUlBXTSovXAogCXsweDAzNjEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9QQ0lfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCAweEZGLCAweDg0fSwgLypQQ0llIFJQV00qL1wKIAl7MHgwMDAyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9ERUxBWSwgMCwgUFdSU0VRX0RFTEFZX01TfSwgLypEZWxheSovXAotCXsweDAwMDgsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQ0LCAwfSwgLyouCTB4MDhbNF0gPSAwCQkgc3dpdGNoIFRTRiB0byA0ME0qL1wKLQl7MHgwMTA5LCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9QT0xMSU5HLCBCSVQ3LCAwfSwgLypQb2xsaW5nIDB4MTA5WzddPSAwICBUU0YgaW4gNDBNKi9cCi0JezB4MDAyOSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDZ8QklUNywgMH0sIC8qLgkweDI5Wzc6Nl0gPSAyYicwMAkgZW5hYmxlIEJCIGNsb2NrKi9cCi0JezB4MDEwMSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDEsIEJJVDF9LCAvKi4JMHgxMDFbMV0gPSAxKi9cCisJezB4MDAwOCwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg0KSwgMH0sIC8qLgkweDA4WzRdID0gMAkJIHN3aXRjaCBUU0YgdG8gNDBNKi9cCisJezB4MDEwOSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfUE9MTElORywgQklUKDcpLCAwfSwgLypQb2xsaW5nIDB4MTA5WzddPSAwICBUU0YgaW4gNDBNKi9cCisJezB4MDAyOSwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVCg2KXxCSVQoNyksIDB9LCAvKi4JMHgyOVs3OjZdID0gMmInMDAJIGVuYWJsZSBCQiBjbG9jayovXAorCXsweDAxMDEsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9BTExfTVNLLCBQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCBCSVQoMSksIEJJVCgxKX0sIC8qLgkweDEwMVsxXSA9IDEqL1wKIAl7MHgwMTAwLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGRiwgMHhGRn0sIC8qLgkweDEwMFs3OjBdID0gMHhGRgkgZW5hYmxlIFdNQUMgVFJYKi9cCi0JezB4MDAwMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIEJJVDF8QklUMCwgQklUMXxCSVQwfSwgLyouCTB4MDJbMTowXSA9IDJiJzExCSBlbmFibGUgQkIgbWFjcm8qL1wKKwl7MHgwMDAyLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSywgUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgQklUKDEpfEJJVCgwKSwgQklUKDEpfEJJVCgwKX0sIC8qLgkweDAyWzE6MF0gPSAyYicxMQkgZW5hYmxlIEJCIG1hY3JvKi9cCiAJezB4MDUyMiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX0FMTF9NU0ssIFBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RkYsIDB9LCAvKi4JMHg1MjIgPSAwKi8KIAogI2RlZmluZSBSVEw4NzIzQV9UUkFOU19FTkQJCQkJCQkJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvY21kX29zZGVwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvY21kX29zZGVwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NjZiZWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2NtZF9vc2RlcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9fQ01EX09TREVQX0hfCi0jZGVmaW5lIF9fQ01EX09TREVQX0hfCi0KLSNpbmNsdWRlIDxvc2RlcF9zZXJ2aWNlLmg+Ci0jaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+Ci0KLWludCBfcnR3X2luaXRfZXZ0X3ByaXYyM2Eoc3RydWN0IGV2dF9wcml2ICpwZXZ0cHJpdik7Ci12b2lkIF9ydHdfZnJlZV9ldnRfcHJpdjIzYShzdHJ1Y3QJZXZ0X3ByaXYgKnBldnRwcml2KTsKLXZvaWQgX3J0d19mcmVlX2NtZF9wcml2MjNhKHN0cnVjdAljbWRfcHJpdiAqcGNtZHByaXYpOwotaW50IF9ydHdfZW5xdWV1ZV9jbWQyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqcXVldWUsIHN0cnVjdCBjbWRfb2JqICpvYmopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9kcnZfdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9kcnZfdHlwZXMuaAppbmRleCA1M2VlY2VhLi5hOTQ4NTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvZHJ2X3R5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2Rydl90eXBlcy5oCkBAIC0zOCwxMiArMzgsMTAgQEAKICNpbmNsdWRlIDxydHdfaHQuaD4KIAogI2luY2x1ZGUgPHJ0d19jbWQuaD4KLSNpbmNsdWRlIDx3bGFuX2Jzc2RlZi5oPgogI2luY2x1ZGUgPHJ0d194bWl0Lmg+CiAjaW5jbHVkZSA8cnR3X3JlY3YuaD4KICNpbmNsdWRlIDxoYWxfaW50Zi5oPgogI2luY2x1ZGUgPGhhbF9jb20uaD4KLSNpbmNsdWRlIDxydHdfcW9zLmg+CiAjaW5jbHVkZSA8cnR3X3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8cnR3X3B3cmN0cmwuaD4KICNpbmNsdWRlIDxydHdfaW8uaD4KQEAgLTU1LDI2ICs1MywxMCBAQAogI2luY2x1ZGUgPHJ0d19ldmVudC5oPgogI2luY2x1ZGUgPHJ0d19sZWQuaD4KICNpbmNsdWRlIDxydHdfbWxtZV9leHQuaD4KLSNpbmNsdWRlIDxydHdfcDJwLmg+CiAjaW5jbHVkZSA8cnR3X2FwLmg+CiAKICNpbmNsdWRlICJpb2N0bF9jZmc4MDIxMS5oIgogCi0jZGVmaW5lIFNQRUNfREVWX0lEX05PTkUgQklUKDApCi0jZGVmaW5lIFNQRUNfREVWX0lEX0RJU0FCTEVfSFQgQklUKDEpCi0jZGVmaW5lIFNQRUNfREVWX0lEX0VOQUJMRV9QUyBCSVQoMikKLSNkZWZpbmUgU1BFQ19ERVZfSURfUkZfQ09ORklHXzFUMVIgQklUKDMpCi0jZGVmaW5lIFNQRUNfREVWX0lEX1JGX0NPTkZJR18yVDJSIEJJVCg0KQotI2RlZmluZSBTUEVDX0RFVl9JRF9BU1NJR05fSUZOQU1FIEJJVCg1KQotCi1zdHJ1Y3Qgc3BlY2lmaWNfZGV2aWNlX2lkIHsKLQl1MzIJCWZsYWdzOwotCi0JdTE2CQlpZFZlbmRvcjsKLQl1MTYJCWlkUHJvZHVjdDsKLQotfTsKLQogc3RydWN0IHJlZ2lzdHJ5X3ByaXYgewogCXU4CWNoaXBfdmVyc2lvbjsKIAl1OAlyZmludGZzOwpAQCAtMTg3LDggKzE2OSw2IEBACiAJaW50CVJ0T3V0UGlwZVszXTsKIAl1OAlRdWV1ZTJQaXBlW0hXX1FVRVVFX0VOVFJZXTsvKiBmb3Igb3V0IHBpcGUgbWFwcGluZyAqLwogCi0JdTgJaXJxX2FsbG9jOwotCiAvKi0tLS0tLS0tIGJlbG93IGlzIGZvciBVU0IgSU5URVJGQUNFIC0tLS0tLS0tKi8KIAogCXU4CW5yX2VuZHBvaW50OwpAQCAtMTk3LDEwICsxNzcsNiBAQAogCXU4CVJ0TnVtT3V0UGlwZXM7CiAJaW50CWVwX251bVs1XTsgLyogZW5kcG9pbnQgbnVtYmVyICovCiAKLQlpbnQJUmVnVXNiU1M7Ci0KLQlzdHJ1Y3Qgc2VtYXBob3JlIHVzYl9zdXNwZW5kX3NlbWE7Ci0KIAlzdHJ1Y3QgbXV0ZXggIHVzYl92ZW5kb3JfcmVxX211dGV4OwogCiAJdTggKnVzYl9hbGxvY192ZW5kb3JfcmVxX2J1ZjsKQEAgLTI0Myw4ICsyMTksNiBAQAogCXN0cnVjdAltbG1lX2V4dF9wcml2IG1sbWVleHRwcml2OwogCXN0cnVjdAljbWRfcHJpdgljbWRwcml2OwogCXN0cnVjdAlldnRfcHJpdglldnRwcml2OwotCS8qIHN0cnVjdAlpb19xdWV1ZQkqcGlvX3F1ZXVlOyAqLwotCXN0cnVjdAlpb19wcml2CWlvcHJpdjsKIAlzdHJ1Y3QJeG1pdF9wcml2CXhtaXRwcml2OwogCXN0cnVjdAlyZWN2X3ByaXYJcmVjdnByaXY7CiAJc3RydWN0CXN0YV9wcml2CXN0YXByaXY7CkBAIC0yNTQsMjEgKzIyOCw5IEBACiAJc3RydWN0CWVlcHJvbV9wcml2IGVlcHJvbXByaXY7CiAJc3RydWN0CWxlZF9wcml2CWxlZHByaXY7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKLQlzdHJ1Y3QJaG9zdGFwZF9wcml2CSpwaG9zdGFwZHByaXY7Ci0jZW5kaWYKLQotCXN0cnVjdCBjZmc4MDIxMV93aWZpZGlyZWN0X2luZm8JY2ZnODAyMTFfd2RpbmZvOwogCXUzMglzZXRiYW5kOwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8Jd2RpbmZvOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaV9kaXNwbGF5X2luZm8gd2ZkX2luZm87Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KIAogCXZvaWQgKkhhbERhdGE7Ci0JdTMyIGhhbF9kYXRhX3N6OwotCXN0cnVjdCBoYWxfb3BzCUhhbEZ1bmM7CiAKIAlzMzIJYkRyaXZlclN0b3BwZWQ7CiAJczMyCWJTdXJwcmlzZVJlbW92ZWQ7CkBAIC0yODMsNjkgKzI0NSwyNiBAQAogCXU4CWluaXRfYWRwdF9pbl9wcm9ncmVzczsKIAl1OAliSGFsdEluUHJvZ3Jlc3M7CiAKLQl2b2lkICpjbWRUaHJlYWQ7Ci0Jdm9pZCAqZXZ0VGhyZWFkOwotCXZvaWQgKnhtaXRUaHJlYWQ7Ci0Jdm9pZCAqcmVjdlRocmVhZDsKLQotCXZvaWQgKCppbnRmX3N0YXJ0KShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCXZvaWQgKCppbnRmX3N0b3ApKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7Ci0KIAlzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldjsKIAogCS8qICB1c2VkIGJ5IHJ0d19yZXJlZ19uZF9uYW1lIHJlbGF0ZWQgZnVuY3Rpb24gKi8KLQlzdHJ1Y3QgcmVyZWdfbmRfbmFtZV9kYXRhIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKm9sZF9wbmV0ZGV2OwotCQljaGFyIG9sZF9pZm5hbWVbSUZOQU1TSVpdOwotCQl1OCBvbGRfaXBzX21vZGU7Ci0JCXU4IG9sZF9iUmVnVXNlTGVkOwotCX0gcmVyZWdfbmRfbmFtZV9wcml2OwotCiAJaW50IGJ1cDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyBpd3N0YXRzOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyX2RldjsvKiAgZm9yIHByb2MgZGlyZWN0b3J5ICovCiAKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpydHdfd2RldjsKIAlpbnQgbmV0X2Nsb3NlZDsKIAogCXU4IGJGV1JlYWR5OwotCXU4IGJCVEZXUmVhZHk7CiAJdTggYlJlYWRQb3J0Q2FuY2VsOwogCXU4IGJXcml0ZVBvcnRDYW5jZWw7Ci0JdTggYlJ4UlNTSURpc3BsYXk7CiAJLyogVGhlIGRyaXZlciB3aWxsIHNob3cgdGhlIGRlc2lyZWQgY2hhbiBub3Igd2hlbiB0aGlzIGZsYWcgaXMgMS4gKi8KIAl1OCBiTm90aWZ5Q2hhbm5lbENoYW5nZTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCS8qIGRyaXZlciB3aWxsIHNob3cgY3VycmVudCBQMlAgc3RhdHVzIHdoZW4gdGhlICBhcHBsaWNhdGlvbiByZWFkcyBpdCovCi0JdTggYlNob3dHZXRQMlBTdGF0ZTsKLSNlbmRpZgogCXN0cnVjdCBydHdfYWRhcHRlciAqcGJ1ZGR5X2FkYXB0ZXI7CiAKIAkvKiBleHRlbmQgdG8gc3VwcG9ydCBtdWx0aSBpbnRlcmZhY2UgKi8KIAkvKiBJRkFDRV9JRDAgaXMgZXF1YWxzIHRvIFBSSU1BUllfQURBUFRFUiAqLwogCS8qIElGQUNFX0lEMSBpcyBlcXVhbHMgdG8gU0VDT05EQVJZX0FEQVBURVIgKi8KIAl1OCBpZmFjZV9pZDsKLQotI2lmZGVmIENPTkZJR19CUl9FWFQKLQlfbG9jawkJCQkJYnJfZXh0X2xvY2s7Ci0JLyogdW5zaWduZWQgaW50CQkJbWFjY2xvbmVfY29tcGxldGVkOyAqLwotCXN0cnVjdCBuYXQyNV9uZXR3b3JrX2RiX2VudHJ5CSpuZXRoYXNoW05BVDI1X0hBU0hfU0laRV07Ci0JaW50CQkJCXBwcG9lX2Nvbm5lY3Rpb25faW5fcHJvZ3Jlc3M7Ci0JdW5zaWduZWQgY2hhcgkJCXBwcG9lX2FkZHJbTUFDQUREUkxFTl07Ci0JdW5zaWduZWQgY2hhcgkJCXNjZGJfbWFjW01BQ0FERFJMRU5dOwotCXVuc2lnbmVkIGNoYXIJCQlzY2RiX2lwWzRdOwotCXN0cnVjdCBuYXQyNV9uZXR3b3JrX2RiX2VudHJ5CSpzY2RiX2VudHJ5OwotCXVuc2lnbmVkIGNoYXIJCQlicl9tYWNbTUFDQUREUkxFTl07Ci0JdW5zaWduZWQgY2hhcgkJCWJyX2lwWzRdOwotCi0Jc3RydWN0IGJyX2V4dF9pbmZvCQlldGhCckV4dEluZm87Ci0jZW5kaWYJLyogIENPTkZJR19CUl9FWFQgKi8KLQotCXU4ICAgIGZpeF9yYXRlOwotCi0JdW5zaWduZWQgY2hhciAgICAgaW5fY3RhX3Rlc3Q7Ci0KIH07CiAKICNkZWZpbmUgYWRhcHRlcl90b19kdm9iaihhZGFwdGVyKSAoYWRhcHRlci0+ZHZvYmopCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvZXRoZXJuZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ldGhlcm5ldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWZjNmRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ldGhlcm5ldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyohIFxmaWxlICovCi0jaWZuZGVmIF9fSU5DX0VUSEVSTkVUX0gKLSNkZWZpbmUgX19JTkNfRVRIRVJORVRfSAotCi0jZGVmaW5lIExMQ19IRUFERVJfU0laRQkJCTYJLyogIExMQyBIZWFkZXIgTGVuZ3RoICovCi0KLSNlbmRpZiAvKiAgI2lmbmRlZiBfX0lOQ19FVEhFUk5FVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvaGFsX2NvbS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2hhbF9jb20uaAppbmRleCAyMGY5ODNjLi40YTE2MWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvaGFsX2NvbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9oYWxfY29tLmgKQEAgLTE2NSw4ICsxNjUsNiBAQAogYm9vbAogSGFsX01hcHBpbmdPdXRQaXBlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHU4IE51bU91dFBpcGUpOwogCi12b2lkIGhhbF9pbml0X21hY2FkZHIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKLQogdm9pZCBjMmhfZXZ0X2NsZWFyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7CiBzMzIgYzJoX2V2dF9yZWFkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKmJ1Zik7CiAKQEAgLTE4NSwxMSArMTgzLDEyIEBACiB2b2lkIHJ0bDg3MjNhX3NldF9zZWNfY2ZnKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHNlYyk7CiB2b2lkIHJ0bDg3MjNhX2NhbV9lbXB0eV9lbnRyeShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB1Y0luZGV4KTsKIHZvaWQgcnRsODcyM2FfY2FtX2ludmFsaWRfYWxsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdm9pZCBydGw4NzIzYV9jYW1fd3JpdGUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIHZhbDEsIHUzMiB2YWwyKTsKK3ZvaWQgcnRsODcyM2FfY2FtX3dyaXRlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQl1OCBlbnRyeSwgdTE2IGN0cmwsIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICprZXkpOwogdm9pZCBydGw4NzIzYV9maWZvX2NsZWFudXAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIHJ0bDg3MjNhX3NldF9hcGZtX29uX21hYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB2YWwpOwogdm9pZCBydGw4NzIzYV9iY25fdmFsaWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0bDg3MjNhX3NldF90eF9wYXVzZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBwYXVzZSk7Citib29sIHJ0bDg3MjNhX2dldF9iY25fdmFsaWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIHJ0bDg3MjNhX3NldF9iZWFjb25faW50ZXJ2YWwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTE2IGludGVydmFsKTsKIHZvaWQgcnRsODcyM2Ffc2V0X3Jlc3Bfc2lmcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJICAgIHU4IHIydDEsIHU4IHIydDIsIHU4IHQydDEsIHU4IHQydDIpOwpAQCAtMjAyLDEwICsyMDEsMTQgQEAKIHZvaWQgcnRsODcyM2Ffc2V0X2luaXRpYWxfZ2FpbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgcnhfZ2Fpbik7CiAKIHZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV93cml0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgdmFsKTsKLXZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9iYWNrdXAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggdmFsKTsKK3ZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9iYWNrdXAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Cit2b2lkIHJ0bDg3MjNhX29kbV9zdXBwb3J0X2FiaWxpdHlfcmVzdG9yZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgcnRsODcyM2Ffb2RtX3N1cHBvcnRfYWJpbGl0eV9zZXQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIHZhbCk7CiB2b2lkIHJ0bDg3MjNhX29kbV9zdXBwb3J0X2FiaWxpdHlfY2xyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiB2YWwpOwogCiB2b2lkIHJ0bDg3MjNhX3NldF9ycHdtKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhbCk7Cit1OCBydGw4NzIzYV9nZXRfcmZfdHlwZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK2Jvb2wgcnRsODcyM2FfZ2V0X2Z3bHBzX3JmX29uKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworYm9vbCBydGw4NzIzYV9jaGtfaGlfcXVldWVfZW1wdHkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiAKICNlbmRpZiAvKiBfX0hBTF9DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvaGFsX2ludGYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9oYWxfaW50Zi5oCmluZGV4IGQxODNmNGIuLjA0MjIzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9oYWxfaW50Zi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9oYWxfaW50Zi5oCkBAIC0xOSwxMCArMTksMTAgQEAKICNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KIAogZW51bSBSVEw4NzFYX0hDSV9UWVBFIHsKLQlSVFdfUENJRQk9IEJJVDAsCi0JUlRXX1VTQgkJPSBCSVQxLAotCVJUV19TRElPCT0gQklUMiwKLQlSVFdfR1NQSQk9IEJJVDMsCisJUlRXX1BDSUUJPSBCSVQoMCksCisJUlRXX1VTQgkJPSBCSVQoMSksCisJUlRXX1NESU8JPSBCSVQoMiksCisJUlRXX0dTUEkJPSBCSVQoMyksCiB9OwogCiBlbnVtIF9DSElQX1RZUEUgewpAQCAtMzUsNzggKzM1LDYgQEAKIAlNQVhfQ0hJUF9UWVBFCiB9OwogCi1lbnVtIEhXX1ZBUklBQkxFUyB7Ci0JSFdfVkFSX01FRElBX1NUQVRVUywKLQlIV19WQVJfTUVESUFfU1RBVFVTMSwKLQlIV19WQVJfU0VUX09QTU9ERSwKLQlIV19WQVJfTUFDX0FERFIsCi0JSFdfVkFSX0JTU0lELAotCUhXX1ZBUl9JTklUX1JUU19SQVRFLAotCUhXX1ZBUl9CQVNJQ19SQVRFLAotCUhXX1ZBUl9UWFBBVVNFLAotCUhXX1ZBUl9CQ05fRlVOQywKLQlIV19WQVJfQ09SUkVDVF9UU0YsCi0JSFdfVkFSX0NIRUNLX0JTU0lELAotCUhXX1ZBUl9NTE1FX0RJU0NPTk5FQ1QsCi0JSFdfVkFSX01MTUVfU0lURVNVUlZFWSwKLQlIV19WQVJfTUxNRV9KT0lOLAotCUhXX1ZBUl9PTl9SQ1JfQU0sCi0JSFdfVkFSX09GRl9SQ1JfQU0sCi0JSFdfVkFSX0JFQUNPTl9JTlRFUlZBTCwKLQlIV19WQVJfU0xPVF9USU1FLAotCUhXX1ZBUl9SRVNQX1NJRlMsCi0JSFdfVkFSX0FDS19QUkVBTUJMRSwKLQlIV19WQVJfU0VDX0NGRywKLQlIV19WQVJfQkNOX1ZBTElELAotCUhXX1ZBUl9SRl9UWVBFLAotCUhXX1ZBUl9ETV9GTEFHLAotCUhXX1ZBUl9ETV9GVU5DX09QLAotCUhXX1ZBUl9ETV9GVU5DX1NFVCwKLQlIV19WQVJfRE1fRlVOQ19DTFIsCi0JSFdfVkFSX0NBTV9FTVBUWV9FTlRSWSwKLQlIV19WQVJfQ0FNX0lOVkFMSURfQUxMLAotCUhXX1ZBUl9DQU1fV1JJVEUsCi0JSFdfVkFSX0NBTV9SRUFELAotCUhXX1ZBUl9BQ19QQVJBTV9WTywKLQlIV19WQVJfQUNfUEFSQU1fVkksCi0JSFdfVkFSX0FDX1BBUkFNX0JFLAotCUhXX1ZBUl9BQ19QQVJBTV9CSywKLQlIV19WQVJfQUNNX0NUUkwsCi0JSFdfVkFSX0FNUERVX01JTl9TUEFDRSwKLQlIV19WQVJfQU1QRFVfRkFDVE9SLAotCUhXX1ZBUl9SWERNQV9BR0dfUEdfVEgsCi0JSFdfVkFSX1NFVF9SUFdNLAotCUhXX1ZBUl9IMkNfRldfUFdSTU9ERSwKLQlIV19WQVJfSDJDX0ZXX0pPSU5CU1NSUFQsCi0JSFdfVkFSX0ZXTFBTX1JGX09OLAotCUhXX1ZBUl9IMkNfRldfUDJQX1BTX09GRkxPQUQsCi0JSFdfVkFSX1RETFNfV1JDUiwKLQlIV19WQVJfVERMU19JTklUX0NIX1NFTiwKLQlIV19WQVJfVERMU19SU19SQ1IsCi0JSFdfVkFSX1RETFNfRE9ORV9DSF9TRU4sCi0JSFdfVkFSX0lOSVRJQUxfR0FJTiwKLQlIV19WQVJfVFJJR0dFUl9HUElPXzAsCi0JSFdfVkFSX0JUX1NFVF9DT0VYSVNULAotCUhXX1ZBUl9CVF9JU1NVRV9ERUxCQSwKLQlIV19WQVJfQ1VSUkVOVF9BTlRFTk5BLAotCUhXX1ZBUl9BTlRFTk5BX0RJVkVSU0lUWV9MSU5LLAotCUhXX1ZBUl9BTlRFTk5BX0RJVkVSU0lUWV9TRUxFQ1QsCi0JSFdfVkFSX1NXSVRDSF9FUEhZX1dvV0xBTiwKLQlIV19WQVJfRUZVU0VfQllURVMsCi0JSFdfVkFSX0VGVVNFX0JUX0JZVEVTLAotCUhXX1ZBUl9GSUZPX0NMRUFSTl9VUCwKLQlIV19WQVJfQ0hFQ0tfVFhCVUYsCi0JSFdfVkFSX0FQRk1fT05fTUFDLCAvKiBBdXRvIEZTTSB0byBUdXJuIE9uLCBpbmNsdWRlIGNsb2NrLCBpc29sYXRpb24sIHBvd2VyIGNvbnRyb2wgZm9yIE1BQyBvbmx5ICovCi0JLyogIFRoZSB2YWxpZCB1cHBlciBuYXYgcmFuZ2UgZm9yIHRoZSBIVyB1cGRhdGluZywgaWYgdGhlIHRydWUgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIHVwcGVyIHJhbmdlLCB0aGUgSFcgd29uJ3QgdXBkYXRlIGl0LiAqLwotCS8qICBVbml0IGluIG1pY3Jvc2Vjb25kLiAwIG1lYW5zIGRpc2FibGUgdGhpcyBmdW5jdGlvbi4gKi8KLQlIV19WQVJfTkFWX1VQUEVSLAotCUhXX1ZBUl9SUFRfVElNRVJfU0VUVElORywKLQlIV19WQVJfVFhfUlBUX01BWF9NQUNJRCwKLQlIV19WQVJfSDJDX01FRElBX1NUQVRVU19SUFQsCi0JSFdfVkFSX0NIS19ISV9RVUVVRV9FTVBUWSwKLQlIV19WQVJfUkVBRF9MTFRfVEFCLAotfTsKLQogZW51bSBoYWxfZGVmX3ZhcmlhYmxlIHsKIAlIQUxfREVGX1VOREVSQ09SQVRFRFNNT09USEVEUFdEQiwKIAlIQUxfREVGX0lTX1NVUFBPUlRfQU5UX0RJViwKQEAgLTEzMiwxMjcgKzYwLDYgQEAKIAlIQUxfT0RNX1dJRklfRElTUExBWV9TVEFURSwKIH07CiAKLWVudW0gaGFsX2ludGZfcHNfZnVuYyB7Ci0JSEFMX1VTQl9TRUxFQ1RfU1VTUEVORCwKLQlIQUxfTUFYX0lELAotfTsKLQotc3RydWN0IGhhbF9vcHMgewotCXUzMiAoKmhhbF9wb3dlcl9vbikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0JdTMyICgqaGFsX2luaXQpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXUzMiAoKmhhbF9kZWluaXQpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi0Jdm9pZCAoKmZyZWVfaGFsX2RhdGEpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi0JdTMyICgqaW5pcnBfaW5pdCkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0JdTMyICgqaW5pcnBfZGVpbml0KShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotCXMzMiAoKmluaXRfeG1pdF9wcml2KShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQl2b2lkICgqZnJlZV94bWl0X3ByaXYpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi0JczMyICgqaW5pdF9yZWN2X3ByaXYpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXZvaWQgKCpmcmVlX3JlY3ZfcHJpdikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLQl2b2lkICgqSW5pdFN3TGVkcykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0Jdm9pZCAoKkRlSW5pdFN3TGVkcykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLQl2b2lkICgqZG1faW5pdCkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0Jdm9pZCAoKmRtX2RlaW5pdCkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0Jdm9pZCAoKnJlYWRfY2hpcF92ZXJzaW9uKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotCXZvaWQgKCppbml0X2RlZmF1bHRfdmFsdWUpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi0Jdm9pZCAoKmludGZfY2hpcF9jb25maWd1cmUpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi0Jdm9pZCAoKnJlYWRfYWRhcHRlcl9pbmZvKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotCXZvaWQgKCplbmFibGVfaW50ZXJydXB0KShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQl2b2lkICgqZGlzYWJsZV9pbnRlcnJ1cHQpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXMzMiAoKmludGVycnVwdF9oYW5kbGVyKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQl2b2lkICgqc2V0X2J3bW9kZV9oYW5kbGVyKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgIGVudW0gaHRfY2hhbm5lbF93aWR0aCBCYW5kd2lkdGgsIHU4IE9mZnNldCk7Ci0Jdm9pZCAoKnNldF9jaGFubmVsX2hhbmRsZXIpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGNoYW5uZWwpOwotCi0Jdm9pZCAoKmhhbF9kbV93YXRjaGRvZykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLQl2b2lkICgqU2V0SHdSZWdIYW5kbGVyKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCXU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKLQl2b2lkICgqR2V0SHdSZWdIYW5kbGVyKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCXU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKLQotCXU4ICgqR2V0SGFsRGVmVmFySGFuZGxlcikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgIGVudW0gaGFsX2RlZl92YXJpYWJsZSBlVmFyaWFibGUsCi0JCQkJICB2b2lkICpwVmFsdWUpOwotCXU4ICgqU2V0SGFsRGVmVmFySGFuZGxlcikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgIGVudW0gaGFsX2RlZl92YXJpYWJsZSBlVmFyaWFibGUsCi0JCQkJICB2b2lkICpwVmFsdWUpOwotCi0Jdm9pZCAoKkdldEhhbE9ETVZhckhhbmRsZXIpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJICAgIGVudW0gaGFsX29kbV92YXJpYWJsZSBlVmFyaWFibGUsCi0JCQkJICAgIHZvaWQgKnBWYWx1ZTEsIGJvb2wgYlNldCk7Ci0Jdm9pZCAoKlNldEhhbE9ETVZhckhhbmRsZXIpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJICAgIGVudW0gaGFsX29kbV92YXJpYWJsZSBlVmFyaWFibGUsCi0JCQkJICAgIHZvaWQgKnBWYWx1ZTEsIGJvb2wgYlNldCk7Ci0KLQl2b2lkICgqVXBkYXRlUkFNYXNrSGFuZGxlcikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgICAgdTMyIG1hY19pZCwgdTggcnNzaV9sZXZlbCk7Ci0Jdm9pZCAoKlNldEJlYWNvblJlbGF0ZWRSZWdpc3RlcnNIYW5kbGVyKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotCXZvaWQgKCpBZGRfUmF0ZUFUaWQpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBiaXRtYXAsCi0JCQkgICAgIHU4IGFyZywgdTggcnNzaV9sZXZlbCk7Ci0Jdm9pZCAoKnJ1bl90aHJlYWQpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXZvaWQgKCpjYW5jZWxfdGhyZWFkKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotCXU4ICgqaW50ZXJmYWNlX3BzX2Z1bmMpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJZW51bSBoYWxfaW50Zl9wc19mdW5jIGVmdW5jX2lkLCB1OCAqdmFsKTsKLQotCXMzMiAoKmhhbF94bWl0KShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpOwotCXMzMiAoKm1nbnRfeG1pdCkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSBzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZSk7Ci0JczMyICgqaGFsX3htaXRmcmFtZV9lbnF1ZXVlKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpOwotCi0JdTMyICgqcmVhZF9iYnJlZykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIFJlZ0FkZHIsCi0JCQkgIHUzMiBCaXRNYXNrKTsKLQl2b2lkICgqd3JpdGVfYmJyZWcpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBSZWdBZGRyLAotCQkJICAgIHUzMiBCaXRNYXNrLCB1MzIgRGF0YSk7Ci0JdTMyICgqcmVhZF9yZnJlZykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGVSRlBhdGgsCi0JCQkgIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzayk7Ci0Jdm9pZCAoKndyaXRlX3JmcmVnKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgZVJGUGF0aCwKLQkJCSAgICB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2ssIHUzMiBEYXRhKTsKLQotCXZvaWQgKCpFZnVzZVBvd2VyU3dpdGNoKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiV3JpdGUsCi0JCQkJIHU4IFB3clN0YXRlKTsKLQl2b2lkICgqUmVhZEVGdXNlKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBlZnVzZVR5cGUsCi0JCQkgIHUxNiBfb2Zmc2V0LCB1MTYgX3NpemVfYnl0ZSwgdTggKnBidWYpOwotCXZvaWQgKCpFRlVTRUdldEVmdXNlRGVmaW5pdGlvbikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkJdTggZWZ1c2VUeXBlLCB1OCB0eXBlLCB2b2lkICpwT3V0KTsKLQl1MTYgKCpFZnVzZUdldEN1cnJlbnRTaXplKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBlZnVzZVR5cGUpOwotCWludCAoKkVmdXNlX1BnUGFja2V0UmVhZDIzYSkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgICAgIHU4IG9mZnNldCwgdTggKmRhdGEpOwotCWludCAoKkVmdXNlX1BnUGFja2V0V3JpdGUyM2EpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJICAgICAgdTggb2Zmc2V0LCB1OCB3b3JkX2VuLCB1OCAqZGF0YSk7Ci0JdTggKCpFZnVzZV9Xb3JkRW5hYmxlRGF0YVdyaXRlMjNhKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCQkgICB1MTYgZWZ1c2VfYWRkciwgdTggd29yZF9lbiwKLQkJCQkJICAgdTggKmRhdGEpOwotCWJvb2wgKCpFZnVzZV9QZ1BhY2tldFdyaXRlMjNhX0JUKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCQkgIHU4IG9mZnNldCwgdTggd29yZF9lbiwgdTggKmRhdGEpOwotCi0Jdm9pZCAoKnNyZXNldF9pbml0X3ZhbHVlMjNhKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQl2b2lkICgqc3Jlc2V0X3Jlc2V0X3ZhbHVlMjNhKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQl2b2lkICgqc2lsZW50cmVzZXQpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXZvaWQgKCpzcmVzZXRfeG1pdF9zdGF0dXNfY2hlY2spKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXZvaWQgKCpzcmVzZXRfbGlua2VkX3N0YXR1c19jaGVjaykgKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCXU4ICgqc3Jlc2V0X2dldF93aWZpX3N0YXR1czIzYSkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0JYm9vbCAoKnNyZXNldF9pbnByb2dyZXNzKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotCXZvaWQgKCpoYWxfbm90Y2hfZmlsdGVyKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKTsKLQl2b2lkICgqaGFsX3Jlc2V0X3NlY3VyaXR5X2VuZ2luZSkoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKLQlzMzIgKCpjMmhfaGFuZGxlcikoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IGMyaF9ldnRfaGRyICpjMmhfZXZ0KTsKLQljMmhfaWRfZmlsdGVyIGMyaF9pZF9maWx0ZXJfY2N4OwotfTsKLQogZW51bSBydF9lZXByb21fdHlwZSB7CiAJRUVQUk9NXzkzQzQ2LAogCUVFUFJPTV85M0M1NiwKQEAgLTI2MiwxMCArNjksMTAgQEAKIAogCiAjZGVmaW5lIFJGX0NIQU5HRV9CWV9JTklUCTAKLSNkZWZpbmUgUkZfQ0hBTkdFX0JZX0lQUwlCSVQyOAotI2RlZmluZSBSRl9DSEFOR0VfQllfUFMJCUJJVDI5Ci0jZGVmaW5lIFJGX0NIQU5HRV9CWV9IVwkJQklUMzAKLSNkZWZpbmUgUkZfQ0hBTkdFX0JZX1NXCQlCSVQzMQorI2RlZmluZSBSRl9DSEFOR0VfQllfSVBTCUJJVCgyOCkKKyNkZWZpbmUgUkZfQ0hBTkdFX0JZX1BTCQlCSVQoMjkpCisjZGVmaW5lIFJGX0NIQU5HRV9CWV9IVwkJQklUKDMwKQorI2RlZmluZSBSRl9DSEFOR0VfQllfU1cJCUJJVCgzMSkKIAogZW51bSBoYXJkd2FyZV90eXBlIHsKIAlIQVJEV0FSRV9UWVBFX1JUTDgxODAsCkBAIC0yOTEsMTAyICs5OCwyNiBAQAogfTsKIAogI2RlZmluZSBHRVRfRUVQUk9NX0VGVVNFX1BSSVYoYWRhcHRlcikgKCZhZGFwdGVyLT5lZXByb21wcml2KQotI2RlZmluZSBpc19ib290X2Zyb21fZWVwcm9tKGFkYXB0ZXIpIChhZGFwdGVyLT5lZXByb21wcml2LkVlcHJvbU9yRWZ1c2UpCi0KLWV4dGVybiBpbnQgcnR3X2h0X2VuYWJsZTIzQTsKLWV4dGVybiBpbnQgcnR3X2NidzQwX2VuYWJsZTIzQTsKLWV4dGVybiBpbnQgcnR3X2FtcGR1X2VuYWJsZTIzQTsvKiBmb3IgZW5hYmxlIHR4X2FtcGR1ICovCiAKIHZvaWQgcnR3X2hhbF9kZWZfdmFsdWVfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIGludCBwbV9uZXRkZXZfb3BlbjIzYShzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldiwgdTggYm5vcm1hbCk7CiBpbnQgcnR3X3Jlc3VtZV9wcm9jZXNzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCi12b2lkCXJ0d19oYWxfZnJlZV9kYXRhMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi12b2lkIHJ0d19oYWxfZG1faW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgcnR3X2hhbF9kbV9kZWluaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfc3dfbGVkX2luaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfc3dfbGVkX2RlaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotdTMyIHJ0d19oYWxfcG93ZXJfb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci11aW50IHJ0d19oYWxfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXVpbnQgcnR3X2hhbF9kZWluaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CitpbnQgcnR3X2hhbF9pbml0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworaW50IHJ0d19oYWxfZGVpbml0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBydHdfaGFsX3N0b3Aoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfc2V0X2h3cmVnMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKLXZvaWQgcnR3MjNhX2hhbF9nZXRfaHdyZWcoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotCi12b2lkIHJ0d19oYWxfY2hpcF9jb25maWd1cmUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfcmVhZF9jaGlwX2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfcmVhZF9jaGlwX3ZlcnNpb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLXU4IHJ0d19oYWxfc2V0X2RlZl92YXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgZW51bSBoYWxfZGVmX3ZhcmlhYmxlIGVWYXJpYWJsZSwKLQkJCSAgdm9pZCAqcFZhbHVlKTsKLXU4IHJ0d19oYWxfZ2V0X2RlZl92YXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgZW51bSBoYWxfZGVmX3ZhcmlhYmxlIGVWYXJpYWJsZSwKLQkJCSAgdm9pZCAqcFZhbHVlKTsKLQotdm9pZCBydHdfaGFsX3NldF9vZG1fdmFyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgZW51bSBoYWxfb2RtX3ZhcmlhYmxlIGVWYXJpYWJsZSwKLQkJCSAgICB2b2lkICpwVmFsdWUxLCBib29sIGJTZXQpOwotdm9pZCBydHdfaGFsX2dldF9vZG1fdmFyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgZW51bSBoYWxfb2RtX3ZhcmlhYmxlIGVWYXJpYWJsZSwKLQkJCSAgICB2b2lkICpwVmFsdWUxLCBib29sIGJTZXQpOwotCi12b2lkIHJ0d19oYWxfZW5hYmxlX2ludGVycnVwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgcnR3X2hhbF9kaXNhYmxlX2ludGVycnVwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotdTMyIHJ0d19oYWxfaW5pcnBfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXUzMiBydHdfaGFsX2luaXJwX2RlaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotdTggcnR3X2hhbF9pbnRmX3BzX2Z1bmMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgIGVudW0gaGFsX2ludGZfcHNfZnVuYyBlZnVuY19pZCwgdTggKnZhbCk7Ci0KLXMzMiBydHdfaGFsX3htaXQyM2FmcmFtZV9lbnF1ZXVlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKTsKLXMzMiBydHdfaGFsX3htaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKTsKLXMzMiBydHdfaGFsX21nbnRfeG1pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJIHN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lKTsKLQotczMyCXJ0d19oYWxfaW5pdDIzYV94bWl0X3ByaXYoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkCXJ0d19oYWxfZnJlZV94bWl0X3ByaXYyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLXMzMglydHdfaGFsX2luaXQyM2FfcmVjdl9wcml2KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdm9pZAlydHdfaGFsX2ZyZWVfcmVjdl9wcml2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCiB2b2lkIHJ0d19oYWxfdXBkYXRlX3JhX21hc2syM2Eoc3RydWN0IHN0YV9pbmZvICpwc3RhLCB1OCByc3NpX2xldmVsKTsKLXZvaWQJcnR3X2hhbF9hZGRfcmFfdGlkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBiaXRtYXAsIHU4IGFyZywgdTggcnNzaV9sZXZlbCk7CiB2b2lkCXJ0d19oYWxfY2xvbmVfZGF0YShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmRzdF9wYWRhcHRlciwgc3RydWN0IHJ0d19hZGFwdGVyICpzcmNfcGFkYXB0ZXIpOwotdm9pZAlydHdfaGFsX3N0YXJ0X3RocmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQJcnR3X2hhbF9zdG9wX3RocmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAotdm9pZCBydHdfaGFsX2Jjbl9yZWxhdGVkX3JlZ19zZXR0aW5nMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBod192YXJfc2V0X2NvcnJlY3RfdHNmKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBod192YXJfc2V0X21sbWVfZGlzY29ubmVjdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3ZvaWQgaHdfdmFyX3NldF9vcG1vZGUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggbW9kZSk7Cit2b2lkIGh3X3Zhcl9zZXRfbWFjYWRkcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqdmFsKTsKK3ZvaWQgaHdfdmFyX3NldF9ic3NpZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqdmFsKTsKK3ZvaWQgaHdfdmFyX3NldF9tbG1lX2pvaW4oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggdHlwZSk7CiAKLXUzMglydHdfaGFsX3JlYWRfYmJyZWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrKTsKLXZvaWQJcnR3X2hhbF93cml0ZV9iYnJlZzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2ssIHUzMiBEYXRhKTsKLXUzMglydHdfaGFsX3JlYWRfcmZyZWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzayk7Ci12b2lkCXJ0d19oYWxfd3JpdGVfcmZyZWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaywgdTMyIERhdGEpOwotCi1zMzIJcnR3X2hhbF9pbnRlcnJ1cHRfaGFuZGxlcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotdm9pZAlydHdfaGFsX3NldF9id21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgIGVudW0gaHRfY2hhbm5lbF93aWR0aCBCYW5kd2lkdGgsIHU4IE9mZnNldCk7Ci12b2lkCXJ0d19oYWxfc2V0X2NoYW4yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggY2hhbm5lbCk7Ci12b2lkCXJ0d19oYWxfZG1fd2F0Y2hkb2cyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLXZvaWQgcnR3X2hhbF9zcmVzZXRfaW5pdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgcnR3X2hhbF9zcmVzZXRfcmVzZXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19oYWxfc3Jlc2V0X3Jlc2V0MjNhX3ZhbHVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdm9pZCBydHdfaGFsX3NyZXNldF94bWl0X3N0YXR1c19jaGVjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgcnR3X2hhbF9zcmVzZXRfbGlua2VkX3N0YXR1c19jaGVjazIzYSAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci11OCAgIHJ0d19oYWxfc3Jlc2V0X2dldF93aWZpX3N0YXR1czIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLWJvb2wgcnR3X2hhbF9zcmVzZXRfaW5wcm9ncmVzcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotdm9pZCBydHdfaGFsX25vdGNoX2ZpbHRlcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKTsKLXZvaWQgcnR3X2hhbF9yZXNldF9zZWN1cml0eV9lbmdpbmUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKLQotczMyIHJ0d19oYWxfYzJoX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYzJoX2V2dF9oZHIgKmMyaF9ldnQpOwotYzJoX2lkX2ZpbHRlciBydHdfaGFsX2MyaF9pZF9maWx0ZXJfY2N4MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgR2V0SGFsRGVmVmFyODE5MkNVc2Ioc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLAorCQkJIGVudW0gaGFsX2RlZl92YXJpYWJsZSBlVmFyaWFibGUsIHZvaWQgKnBWYWx1ZSk7CiAKICNlbmRpZiAvKiBfX0hBTF9JTlRGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2llZWU4MDIxMS5oCmluZGV4IDI4ZTRhYjIuLjY5YzBmNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvaWVlZTgwMjExLmgKQEAgLTU4LDcgKzU4LDcgQEAKIAogI2RlZmluZSBXUEFfQ0lQSEVSX05PTkUJCUJJVCgwKQogI2RlZmluZSBXUEFfQ0lQSEVSX1dFUDQwCUJJVCgxKQotI2RlZmluZSBXUEFfQ0lQSEVSX1dFUDEwNCBCSVQoMikKKyNkZWZpbmUgV1BBX0NJUEhFUl9XRVAxMDQJQklUKDIpCiAjZGVmaW5lIFdQQV9DSVBIRVJfVEtJUAkJQklUKDMpCiAjZGVmaW5lIFdQQV9DSVBIRVJfQ0NNUAkJQklUKDQpCiAKQEAgLTEwNSw0MSArMTA1LDUzIEBACiAKIGVudW0gTkVUV09SS19UWVBFCiB7Ci0gICAgV0lSRUxFU1NfSU5WQUxJRCA9IDAsCi0gICAgLyogU3ViLUVsZW1lbnQgKi8KLSAgICBXSVJFTEVTU18xMUIgPSBCSVQoMCksIC8qICB0eDogY2NrIG9ubHkgLCByeDogY2NrIG9ubHksIGh3OiBjY2sgKi8KLSAgICBXSVJFTEVTU18xMUcgPSBCSVQoMSksIC8qICB0eDogb2ZkbSBvbmx5LCByeDogb2ZkbSAmIGNjaywgaHc6IGNjayAmIG9mZG0gKi8KLSAgICBXSVJFTEVTU18xMUEgPSBCSVQoMiksIC8qICB0eDogb2ZkbSBvbmx5LCByeDogb2ZkbSBvbmx5LCBodzogb2ZkbSBvbmx5ICovCi0gICAgV0lSRUxFU1NfMTFfMjROID0gQklUKDMpLCAvKiAgdHg6IE1DUyBvbmx5LCByeDogTUNTICYgY2NrLCBodzogTUNTICYgY2NrICovCi0gICAgV0lSRUxFU1NfMTFfNU4gPSBCSVQoNCksIC8qICB0eDogTUNTIG9ubHksIHJ4OiBNQ1MgJiBvZmRtLCBodzogb2ZkbSBvbmx5ICovCisJV0lSRUxFU1NfSU5WQUxJRCA9IDAsCisJLyogU3ViLUVsZW1lbnQgKi8KKwkvKiAgdHg6IGNjayBvbmx5ICwgcng6IGNjayBvbmx5LCBodzogY2NrICovCisJV0lSRUxFU1NfMTFCID0gQklUKDApLAorCS8qICB0eDogb2ZkbSBvbmx5LCByeDogb2ZkbSAmIGNjaywgaHc6IGNjayAmIG9mZG0gKi8KKwlXSVJFTEVTU18xMUcgPSBCSVQoMSksCisJLyogIHR4OiBvZmRtIG9ubHksIHJ4OiBvZmRtIG9ubHksIGh3OiBvZmRtIG9ubHkgKi8KKwlXSVJFTEVTU18xMUEgPSBCSVQoMiksCisJLyogIHR4OiBNQ1Mgb25seSwgcng6IE1DUyAmIGNjaywgaHc6IE1DUyAmIGNjayAqLworCVdJUkVMRVNTXzExXzI0TiA9IEJJVCgzKSwKKwkvKiAgdHg6IE1DUyBvbmx5LCByeDogTUNTICYgb2ZkbSwgaHc6IG9mZG0gb25seSAqLworCVdJUkVMRVNTXzExXzVOID0gQklUKDQpLAogCS8qIFdJUkVMRVNTX0FVVE8JCT0gQklUKDUpLCAqLwotCVdJUkVMRVNTX0FDCQk9IEJJVCg2KSwKKwlXSVJFTEVTU19BQyA9IEJJVCg2KSwKIAotICAgIC8qIENvbWJpbmF0aW9uICovCi0gICAgV0lSRUxFU1NfMTFCRyA9IChXSVJFTEVTU18xMUJ8V0lSRUxFU1NfMTFHKSwgLyogIHR4OiBjY2sgJiBvZmRtLCByeDogY2NrICYgb2ZkbSAmIE1DUywgaHc6IGNjayAmIG9mZG0gKi8KLSAgICBXSVJFTEVTU18xMUdfMjROID0gKFdJUkVMRVNTXzExR3xXSVJFTEVTU18xMV8yNE4pLCAvKiAgdHg6IG9mZG0gJiBNQ1MsIHJ4OiBvZmRtICYgY2NrICYgTUNTLCBodzogY2NrICYgb2ZkbSAqLwotICAgIFdJUkVMRVNTXzExQV81TiA9IChXSVJFTEVTU18xMUF8V0lSRUxFU1NfMTFfNU4pLCAvKiAgdHg6IG9mZG0gJiBNQ1MsIHJ4OiBvZmRtICYgTUNTLCBodzogb2ZkbSBvbmx5ICovCi0gICAgV0lSRUxFU1NfMTFCR18yNE4gPSAoV0lSRUxFU1NfMTFCfFdJUkVMRVNTXzExR3xXSVJFTEVTU18xMV8yNE4pLCAvKiAgdHg6IG9mZG0gJiBjY2sgJiBNQ1MsIHJ4OiBvZmRtICYgY2NrICYgTUNTLCBodzogb2ZkbSAmIGNjayAqLwotICAgIFdJUkVMRVNTXzExQUdOID0gKFdJUkVMRVNTXzExQXxXSVJFTEVTU18xMUd8V0lSRUxFU1NfMTFfMjROfFdJUkVMRVNTXzExXzVOKSwgLyogIHR4OiBvZmRtICYgTUNTLCByeDogb2ZkbSAmIE1DUywgaHc6IG9mZG0gb25seSAqLwotICAgIFdJUkVMRVNTXzExQUJHTiA9IChXSVJFTEVTU18xMUF8V0lSRUxFU1NfMTFCfFdJUkVMRVNTXzExR3xXSVJFTEVTU18xMV8yNE58V0lSRUxFU1NfMTFfNU4pLAorCS8qIENvbWJpbmF0aW9uICovCisJIC8qICB0eDogY2NrICYgb2ZkbSwgcng6IGNjayAmIG9mZG0gJiBNQ1MsIGh3OiBjY2sgJiBvZmRtICovCisJV0lSRUxFU1NfMTFCRyA9IFdJUkVMRVNTXzExQnxXSVJFTEVTU18xMUcsCisJLyogIHR4OiBvZmRtICYgTUNTLCByeDogb2ZkbSAmIGNjayAmIE1DUywgaHc6IGNjayAmIG9mZG0gKi8KKwlXSVJFTEVTU18xMUdfMjROID0gV0lSRUxFU1NfMTFHIHwgV0lSRUxFU1NfMTFfMjROLAorCS8qICB0eDogb2ZkbSAmIE1DUywgcng6IG9mZG0gJiBNQ1MsIGh3OiBvZmRtIG9ubHkgKi8KKwlXSVJFTEVTU18xMUFfNU4gPSBXSVJFTEVTU18xMUEgfCBXSVJFTEVTU18xMV81TiwKKwkvKiAgdHg6IG9mZG0gJiBjY2sgJiBNQ1MsIHJ4OiBvZmRtICYgY2NrICYgTUNTLCBodzogb2ZkbSAmIGNjayAqLworCVdJUkVMRVNTXzExQkdfMjROID0gV0lSRUxFU1NfMTFCIHwgV0lSRUxFU1NfMTFHIHwgV0lSRUxFU1NfMTFfMjROLAorCS8qICB0eDogb2ZkbSAmIE1DUywgcng6IG9mZG0gJiBNQ1MsIGh3OiBvZmRtIG9ubHkgKi8KKwlXSVJFTEVTU18xMUFHTiA9IFdJUkVMRVNTXzExQSB8IFdJUkVMRVNTXzExRyB8IFdJUkVMRVNTXzExXzI0TiB8CisJCQkJV0lSRUxFU1NfMTFfNU4sCisJV0lSRUxFU1NfMTFBQkdOID0gV0lSRUxFU1NfMTFBIHwgV0lSRUxFU1NfMTFCIHwgV0lSRUxFU1NfMTFHIHwKKwkJCQlXSVJFTEVTU18xMV8yNE4gfCBXSVJFTEVTU18xMV81TiwKIH07CiAKICNkZWZpbmUgU1VQUE9SVEVEXzI0R19ORVRUWVBFX01TSyAoV0lSRUxFU1NfMTFCIHwgV0lSRUxFU1NfMTFHIHwgV0lSRUxFU1NfMTFfMjROKQogI2RlZmluZSBTVVBQT1JURURfNUdfTkVUVFlQRV9NU0sgKFdJUkVMRVNTXzExQSB8IFdJUkVMRVNTXzExXzVOKQogCi0jZGVmaW5lIElzU3VwcG9ydGVkMjRHKE5ldFR5cGUpICgoTmV0VHlwZSkgJiBTVVBQT1JURURfMjRHX05FVFRZUEVfTVNLID8gdHJ1ZSA6IGZhbHNlKQotI2RlZmluZSBJc1N1cHBvcnRlZDVHKE5ldFR5cGUpICgoTmV0VHlwZSkgJiBTVVBQT1JURURfNUdfTkVUVFlQRV9NU0sgPyB0cnVlIDogZmFsc2UpCisjZGVmaW5lIElzU3VwcG9ydGVkMjRHKE5ldFR5cGUpIChOZXRUeXBlICYgU1VQUE9SVEVEXzI0R19ORVRUWVBFX01TSyA/IHRydWUgOiBmYWxzZSkKKyNkZWZpbmUgSXNTdXBwb3J0ZWQ1RyhOZXRUeXBlKSAoTmV0VHlwZSAmIFNVUFBPUlRFRF81R19ORVRUWVBFX01TSyA/IHRydWUgOiBmYWxzZSkKIAogI2RlZmluZSBJc0VuYWJsZUhXQ0NLKE5ldFR5cGUpIElzU3VwcG9ydGVkMjRHKE5ldFR5cGUpCi0jZGVmaW5lIElzRW5hYmxlSFdPRkRNKE5ldFR5cGUpICgoTmV0VHlwZSkgJiAoV0lSRUxFU1NfMTFHfFdJUkVMRVNTXzExXzI0TnxTVVBQT1JURURfNUdfTkVUVFlQRV9NU0spID8gdHJ1ZSA6IGZhbHNlKQorI2RlZmluZSBJc0VuYWJsZUhXT0ZETShOZXRUeXBlKSAoTmV0VHlwZSAmIChXSVJFTEVTU18xMUd8V0lSRUxFU1NfMTFfMjROfFNVUFBPUlRFRF81R19ORVRUWVBFX01TSykgPyB0cnVlIDogZmFsc2UpCiAKICNkZWZpbmUgSXNTdXBwb3J0ZWRSeENDSyhOZXRUeXBlKSBJc0VuYWJsZUhXQ0NLKE5ldFR5cGUpCiAjZGVmaW5lIElzU3VwcG9ydGVkUnhPRkRNKE5ldFR5cGUpIElzRW5hYmxlSFdPRkRNKE5ldFR5cGUpCiAjZGVmaW5lIElzU3VwcG9ydGVkUnhNQ1MoTmV0VHlwZSkgSXNFbmFibGVIV09GRE0oTmV0VHlwZSkKIAotI2RlZmluZSBJc1N1cHBvcnRlZFR4Q0NLKE5ldFR5cGUpICgoTmV0VHlwZSkgJiAoV0lSRUxFU1NfMTFCKSA/IHRydWUgOiBmYWxzZSkKLSNkZWZpbmUgSXNTdXBwb3J0ZWRUeE9GRE0oTmV0VHlwZSkgKChOZXRUeXBlKSAmIChXSVJFTEVTU18xMUd8V0lSRUxFU1NfMTFBKSA/IHRydWUgOiBmYWxzZSkKLSNkZWZpbmUgSXNTdXBwb3J0ZWRUeE1DUyhOZXRUeXBlKSAoKE5ldFR5cGUpICYgKFdJUkVMRVNTXzExXzI0TnxXSVJFTEVTU18xMV81TikgPyB0cnVlIDogZmFsc2UpCisjZGVmaW5lIElzU3VwcG9ydGVkVHhDQ0soTmV0VHlwZSkgKE5ldFR5cGUgJiAoV0lSRUxFU1NfMTFCKSA/IHRydWUgOiBmYWxzZSkKKyNkZWZpbmUgSXNTdXBwb3J0ZWRUeE9GRE0oTmV0VHlwZSkgKE5ldFR5cGUgJiAoV0lSRUxFU1NfMTFHfFdJUkVMRVNTXzExQSkgPyB0cnVlIDogZmFsc2UpCisjZGVmaW5lIElzU3VwcG9ydGVkVHhNQ1MoTmV0VHlwZSkgKE5ldFR5cGUgJiAoV0lSRUxFU1NfMTFfMjROfFdJUkVMRVNTXzExXzVOKSA/IHRydWUgOiBmYWxzZSkKIAogCiBzdHJ1Y3QgaWVlZV9wYXJhbSB7CkBAIC0xOTIsNyArMjA0LDcgQEAKIC8qIFFvUyxRT1MgKi8KICNkZWZpbmUgTk9STUFMX0FDSwkJCTAKICNkZWZpbmUgTk9fQUNLCQkJCTEKLSNkZWZpbmUgTk9OX0VYUExJQ0lUX0FDSwkyCisjZGVmaW5lIE5PTl9FWFBMSUNJVF9BQ0sJCTIKICNkZWZpbmUgQkxPQ0tfQUNLCQkJMwogCiAvKiBJRUVFIDgwMi4xMSBkZWZpbmVzICovCkBAIC0yMDAsMjQgKzIxMiwyMiBAQAogI2RlZmluZSBQODAyMTFfT1VJX0xFTiAzCiAKIHN0cnVjdCBpZWVlODAyMTFfc25hcF9oZHIgewotCiAgICAgICAgIHU4ICAgIGRzYXA7ICAgLyogYWx3YXlzIDB4QUEgKi8KICAgICAgICAgdTggICAgc3NhcDsgICAvKiBhbHdheXMgMHhBQSAqLwogICAgICAgICB1OCAgICBjdHJsOyAgIC8qIGFsd2F5cyAweDAzICovCiAgICAgICAgIHU4ICAgIG91aVtQODAyMTFfT1VJX0xFTl07ICAgIC8qIG9yZ2FuaXphdGlvbmFsIHVuaXZlcnNhbCBpZCAqLwotCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCiAjZGVmaW5lIFNOQVBfU0laRSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkcikKIAotI2RlZmluZSBXTEFOX0ZDX0dFVF9UWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKQotI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkKKyNkZWZpbmUgV0xBTl9GQ19HRVRfVFlQRShmYykJCShmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKQorI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykJCShmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKQogCi0jZGVmaW5lIFdMQU5fUUNfR0VUX1RJRChxYykgKChxYykgJiAweDBmKQorI2RlZmluZSBXTEFOX1FDX0dFVF9USUQocWMpCQkocWMgJiAweDBmKQogCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgUlRXX0lFRUU4MDIxMV9TQ1RMX0ZSQUcpCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKChzZXEpICYgUlRXX0lFRUU4MDIxMV9TQ1RMX1NFUSkKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSQUcoc2VxKQkJKHNlcSAmIFJUV19JRUVFODAyMTFfU0NUTF9GUkFHKQorI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRKHNlcSkJCShzZXEgJiBSVFdfSUVFRTgwMjExX1NDVExfU0VRKQogCiAKICNkZWZpbmUgV0xBTl9SRUFTT05fSk9JTl9XUk9OR19DSEFOTkVMICAgICAgIDY1NTM0CkBAIC0yOTgsNjcgKzMwOCwyMCBAQAogI2RlZmluZSBXRVBfS0VZX0xFTiAxMwogCiAKLQotLyoKLQotIDgwMi4xMSBkYXRhIGZyYW1lIGZyb20gQVAKLQotICAgICAgLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi1CeXRlcyB8ICAyICAgfCAgMiAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgIDIgICB8IDAuLjIzMTIgfCAgIDQgIHwKLSAgICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfAotRGVzYy4gfCBjdHJsIHwgZHVyYSB8ICBEQS9SQSAgfCAgIFRBICAgIHwgICAgU0EgICB8IFNlcXUgfCAgZnJhbWUgIHwgIGZjcyB8Ci0gICAgICB8ICAgICAgfCB0aW9uIHwgKEJTU0lEKSB8ICAgICAgICAgfCAgICAgICAgIHwgZW5jZSB8ICBkYXRhICAgfCAgICAgIHwKLSAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotCi1Ub3RhbDogMjgtMjM0MCBieXRlcwotCi0qLwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcl9kYXRhIHsKLQl1MTYgZnJhbWVfY3RsOwotCXUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVs2XTsKLQl1OCBhZGRyMls2XTsKLQl1OCBhZGRyM1s2XTsKLQl1MTYgc2VxX2N0cmw7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudF9oZHIgewotCXU4IGlkOwotCXU4IGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi1zdHJ1Y3QgaWVlZTgwMjExX3R4YiB7Ci0JdTggbnJfZnJhZ3M7Ci0JdTggZW5jcnlwdGVkOwotCXUxNiByZXNlcnZlZDsKLQl1MTYgZnJhZ19zaXplOwotCXUxNiBwYXlsb2FkX3NpemU7Ci0Jc3RydWN0IHNrX2J1ZmYgKmZyYWdtZW50c1swXTsKLX07Ci0KLQogLyogTUFYX1JBVEVTX0xFTkdUSCBuZWVkcyB0byBiZSAxMi4gIFRoZSBzcGVjIHNheXMgOCwgYW5kIG1hbnkgQVBzCiAgKiBvbmx5IHVzZSA4LCBhbmQgdGhlbiB1c2UgZXh0ZW5kZWQgcmF0ZXMgZm9yIHRoZSByZW1haW5pbmcgc3VwcG9ydGVkCiAgKiByYXRlcy4gIE90aGVyIEFQcywgaG93ZXZlciwgc3RpY2sgYWxsIG9mIHRoZWlyIHN1cHBvcnRlZCByYXRlcyBvbiB0aGUKICAqIG1haW4gcmF0ZXMgaW5mb3JtYXRpb24gZWxlbWVudC4uLiAqLwotI2RlZmluZSBNQVhfUkFURVNfTEVOR1RIICAgICAgICAgICAgICAgICAgKCh1OCkxMikKLSNkZWZpbmUgTUFYX1JBVEVTX0VYX0xFTkdUSCAgICAgICAgICAgICAgICgodTgpMTYpCi0jZGVmaW5lIE1BWF9DSEFOTkVMX05VTUJFUiAgICAgICAgICAgICAgICAgMTYxCisjZGVmaW5lIE1BWF9SQVRFU19MRU5HVEgJMTIKKyNkZWZpbmUgTUFYX1JBVEVTX0VYX0xFTkdUSAkxNgorI2RlZmluZSBNQVhfQ0hBTk5FTF9OVU1CRVIJMTYxCiAKLSNkZWZpbmUgTUFYX1dQQV9JRV9MRU4gKDI1NikKLSNkZWZpbmUgTUFYX1dQU19JRV9MRU4gKDUxMikKLSNkZWZpbmUgTUFYX1AyUF9JRV9MRU4gKDI1NikKLSNkZWZpbmUgTUFYX1dGRF9JRV9MRU4gKDEyOCkKKyNkZWZpbmUgTUFYX1dQQV9JRV9MRU4JCTI1NgorI2RlZmluZSBNQVhfV1BTX0lFX0xFTgkJNTEyCisjZGVmaW5lIE1BWF9QMlBfSUVfTEVOCQkyNTYKKyNkZWZpbmUgTUFYX1dGRF9JRV9MRU4JCTEyOAogCi0jZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFIDMyCisjZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFCTMyCiAKIC8qCiBqb2luX3JlczoKQEAgLTM2NywyNCArMzMwLDExIEBACiA+IDA6IFRJRAogKi8KIAotI2RlZmluZSBERUZBVUxUX01BWF9TQ0FOX0FHRSAoMTUgKiBIWikKLSNkZWZpbmUgREVGQVVMVF9GVFMgMjM0NgogI2RlZmluZSBNQUNfRk1UICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIKICNkZWZpbmUgTUFDX0FSRyh4KSAoKHU4KikoeCkpWzBdLCgodTgqKSh4KSlbMV0sKCh1OCopKHgpKVsyXSwoKHU4KikoeCkpWzNdLCgodTgqKSh4KSlbNF0sKCh1OCopKHgpKVs1XQogCi0jZGVmaW5lIENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MgKDE8PDApCi0jZGVmaW5lIENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgKDE8PDEpCi0KICNkZWZpbmUgTUFYVElECTE2CiAKLSNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCi0jZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKLSNkZWZpbmUgSUVFRV9NT0RFX01BU0sgICAgKElFRUVfQXxJRUVFX0J8SUVFRV9HKQotCi0vKiBCYXJvbiBtb3ZlIHRvIGllZWU4MDIxMS5jICovCi1pbnQgaWVlZTgwMjExX2lzX2VtcHR5X2Vzc2lkMjNhKGNvbnN0IGNoYXIgKmVzc2lkLCBpbnQgZXNzaWRfbGVuKTsKLQogZW51bSBfUFVCTElDX0FDVElPTnsKIAlBQ1RfUFVCTElDX0JTU0NPRVhJU1QgPSAwLCAvKiAgMjAvNDAgQlNTIENvZXhpc3RlbmNlICovCiAJQUNUX1BVQkxJQ19EU0VfRU5BQkxFID0gMSwKQEAgLTQ1Nyw3OSArNDA3LDE3IEBACiAJLyosIChjaGFubmVsKS0+b3JpZ19tYWcqLyBcCiAJLyosIChjaGFubmVsKS0+b3JpZ19tcHdyKi8gXAogCi0vKiBQYXJzZWQgSW5mb3JtYXRpb24gRWxlbWVudHMgKi8KLXN0cnVjdCBydHdfaWVlZTgwMl8xMV9lbGVtcyB7Ci0JdTggKnNzaWQ7Ci0JdTggc3NpZF9sZW47Ci0JdTggKnN1cHBfcmF0ZXM7Ci0JdTggc3VwcF9yYXRlc19sZW47Ci0JdTggKmZoX3BhcmFtczsKLQl1OCBmaF9wYXJhbXNfbGVuOwotCXU4ICpkc19wYXJhbXM7Ci0JdTggZHNfcGFyYW1zX2xlbjsKLQl1OCAqY2ZfcGFyYW1zOwotCXU4IGNmX3BhcmFtc19sZW47Ci0JdTggKnRpbTsKLQl1OCB0aW1fbGVuOwotCXU4ICppYnNzX3BhcmFtczsKLQl1OCBpYnNzX3BhcmFtc19sZW47Ci0JdTggKmNoYWxsZW5nZTsKLQl1OCBjaGFsbGVuZ2VfbGVuOwotCXU4ICplcnBfaW5mbzsKLQl1OCBlcnBfaW5mb19sZW47Ci0JdTggKmV4dF9zdXBwX3JhdGVzOwotCXU4IGV4dF9zdXBwX3JhdGVzX2xlbjsKLQl1OCAqd3BhX2llOwotCXU4IHdwYV9pZV9sZW47Ci0JdTggKnJzbl9pZTsKLQl1OCByc25faWVfbGVuOwotCXU4ICp3bWU7Ci0JdTggd21lX2xlbjsKLQl1OCAqd21lX3RzcGVjOwotCXU4IHdtZV90c3BlY19sZW47Ci0JdTggKndwc19pZTsKLQl1OCB3cHNfaWVfbGVuOwotCXU4ICpwb3dlcl9jYXA7Ci0JdTggcG93ZXJfY2FwX2xlbjsKLQl1OCAqc3VwcF9jaGFubmVsczsKLQl1OCBzdXBwX2NoYW5uZWxzX2xlbjsKLQl1OCAqbWRpZTsKLQl1OCBtZGllX2xlbjsKLQl1OCAqZnRpZTsKLQl1OCBmdGllX2xlbjsKLQl1OCAqdGltZW91dF9pbnQ7Ci0JdTggdGltZW91dF9pbnRfbGVuOwotCXU4ICpodF9jYXBhYmlsaXRpZXM7Ci0JdTggaHRfY2FwYWJpbGl0aWVzX2xlbjsKLQl1OCAqaHRfb3BlcmF0aW9uOwotCXU4IGh0X29wZXJhdGlvbl9sZW47Ci0JdTggKnZlbmRvcl9odF9jYXA7Ci0JdTggdmVuZG9yX2h0X2NhcF9sZW47Ci19OwotCi1lbnVtIHBhcnNlX3JlcyB7Ci0JUGFyc2VPSyA9IDAsCi0JUGFyc2VVbmtub3duID0gMSwKLQlQYXJzZUZhaWxlZCA9IC0xCi19OwotCi1lbnVtIHBhcnNlX3JlcyBydHdfaWVlZTgwMl8xMV9wYXJzZV9lbGVtczIzYSh1OCAqc3RhcnQsIHVpbnQgbGVuLAotCQkJCXN0cnVjdCBydHdfaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkJaW50IHNob3dfZXJyb3JzKTsKLQogdTggKnJ0d19zZXRfZml4ZWRfaWUyM2EodW5zaWduZWQgY2hhciAqcGJ1ZiwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc291cmNlLCB1bnNpZ25lZCBpbnQgKmZybGVuKTsKLXU4ICpydHdfc2V0X2llMjNhKHU4ICpwYnVmLCBpbnQgaW5kZXgsIHVpbnQgbGVuLCB1OCAqc291cmNlLCB1aW50ICpmcmxlbik7Cit1OCAqcnR3X3NldF9pZTIzYSh1OCAqcGJ1ZiwgaW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgdTggKnNvdXJjZSwgdWludCAqZnJsZW4pOwogCiBlbnVtIHNlY29uZGFyeV9jaF9vZmZzZXQgewogCVNDTiA9IDAsIC8qIG5vIHNlY29uZGFyeSBjaGFubmVsICovCiAJU0NBID0gMSwgLyogc2Vjb25kYXJ5IGNoYW5uZWwgYWJvdmUgKi8KIAlTQ0IgPSAzLCAgLyogc2Vjb25kYXJ5IGNoYW5uZWwgYmVsb3cgKi8KIH07Ci11OCBzZWNvbmRhcnlfY2hfb2Zmc2V0X3RvX2hhbF9jaF9vZmZzZXQyM2EodTggY2hfb2Zmc2V0KTsKIHU4IGhhbF9jaF9vZmZzZXRfdG9fc2Vjb25kYXJ5X2NoX29mZnNldDIzYSh1OCBjaF9vZmZzZXQpOwogdTggKnJ0d19zZXRfaWUyM2FfY2hfc3dpdGNoKHU4ICpidWYsIHUzMiAqYnVmX2xlbiwgdTggY2hfc3dpdGNoX21vZGUsIHU4IG5ld19jaCwgdTggY2hfc3dpdGNoX2NudCk7CiB1OCAqcnR3X3NldF9pZTIzYV9zZWNvbmRhcnlfY2hfb2Zmc2V0KHU4ICpidWYsIHUzMiAqYnVmX2xlbiwgdTggc2Vjb25kYXJ5X2NoX29mZnNldCk7Ci11OCAqcnR3X3NldF9pZTIzYV9tZXNoX2NoX3N3aXRjaF9wYXJtKHU4ICpidWYsIHUzMiAqYnVmX2xlbiwgdTggdHRsLCB1OCBmbGFncywgdTE2IHJlYXNvbiwgdTE2IHByZWNlZGVuY2UpOwogCiB1OCAqcnR3X2dldF9pZTIzYSh1OCpwYnVmLCBpbnQgaW5kZXgsIGludCAqbGVuLCBpbnQgbGltaXQpOwogdTggKnJ0d19nZXRfaWUyM2FfZXgodTggKmluX2llLCB1aW50IGluX2xlbiwgdTggZWlkLCB1OCAqb3VpLCB1OCBvdWlfbGVuLCB1OCAqaWUsIHVpbnQgKmllbGVuKTsKQEAgLTUzNyw0NiArNDI1LDE3IEBACiAKIHZvaWQgcnR3X3NldF9zdXBwb3J0ZWRfcmF0ZTIzYSh1OCogU3VwcG9ydGVkUmF0ZXMsIHVpbnQgbW9kZSkgOwogCi11bnNpZ25lZCBjaGFyICpydHdfZ2V0X3dwYV9pZTIzYSh1bnNpZ25lZCBjaGFyICpwaWUsIGludCAqd3BhX2llX2xlbiwgaW50IGxpbWl0KTsKLXVuc2lnbmVkIGNoYXIgKnJ0d19nZXRfd3BhMl9pZTIzYSh1bnNpZ25lZCBjaGFyICpwaWUsIGludCAqcnNuX2llX2xlbiwgaW50IGxpbWl0KTsKLWludCBydHdfZ2V0X3dwYV9jaXBoZXJfc3VpdGUyM2EodTggKnMpOwotaW50IHJ0d19nZXRfd3BhMl9jaXBoZXJfc3VpdGUyM2EodTggKnMpOwotaW50IHJ0d19wYXJzZV93cGFfaWUyM2EodTgqIHdwYV9pZSwgaW50IHdwYV9pZV9sZW4sIGludCAqZ3JvdXBfY2lwaGVyLCBpbnQgKnBhaXJ3aXNlX2NpcGhlciwgaW50ICppc184MDIxeCk7Ci1pbnQgcnR3X3BhcnNlX3dwYTJfaWUyM2EodTgqIHdwYV9pZSwgaW50IHdwYV9pZV9sZW4sIGludCAqZ3JvdXBfY2lwaGVyLCBpbnQgKnBhaXJ3aXNlX2NpcGhlciwgaW50ICppc184MDIxeCk7CitpbnQgcnR3X2dldF93cGFfY2lwaGVyX3N1aXRlMjNhKGNvbnN0IHU4ICpzKTsKK2ludCBydHdfZ2V0X3dwYTJfY2lwaGVyX3N1aXRlMjNhKGNvbnN0IHU4ICpzKTsKK2ludCBydHdfcGFyc2Vfd3BhX2llMjNhKGNvbnN0IHU4KiB3cGFfaWUsIGludCB3cGFfaWVfbGVuLCBpbnQgKmdyb3VwX2NpcGhlciwgaW50ICpwYWlyd2lzZV9jaXBoZXIsIGludCAqaXNfODAyMXgpOworaW50IHJ0d19wYXJzZV93cGEyX2llMjNhKGNvbnN0IHU4KiB3cGFfaWUsIGludCB3cGFfaWVfbGVuLCBpbnQgKmdyb3VwX2NpcGhlciwgaW50ICpwYWlyd2lzZV9jaXBoZXIsIGludCAqaXNfODAyMXgpOwogCiBpbnQgcnR3X2dldF9zZWNfaWUyM2EodTggKmluX2llLHVpbnQgaW5fbGVuLHU4ICpyc25faWUsdTE2ICpyc25fbGVuLHU4ICp3cGFfaWUsdTE2ICp3cGFfbGVuKTsKIAotdTggcnR3X2lzX3dwc19pZTIzYSh1OCAqaWVfcHRyLCB1aW50ICp3cHNfaWVsZW4pOwogdTggKnJ0d19nZXRfd3BzX2llMjNhKHU4ICppbl9pZSwgdWludCBpbl9sZW4sIHU4ICp3cHNfaWUsIHVpbnQgKndwc19pZWxlbik7CiB1OCAqcnR3X2dldF93cHNfYXR0cjIzYSh1OCAqd3BzX2llLCB1aW50IHdwc19pZWxlbiwgdTE2IHRhcmdldF9hdHRyX2lkICx1OCAqYnVmX2F0dHIsIHUzMiAqbGVuX2F0dHIpOwogdTggKnJ0d19nZXRfd3BzX2F0dHJfY29udGVudDIzYSh1OCAqd3BzX2llLCB1aW50IHdwc19pZWxlbiwgdTE2IHRhcmdldF9hdHRyX2lkICx1OCAqYnVmX2NvbnRlbnQsIHVpbnQgKmxlbl9jb250ZW50KTsKIAotLyoqCi0gKiBmb3JfZWFjaF9pZSAtIGl0ZXJhdGUgb3ZlciBjb250aW51b3VzIElFcwotICogQGllOgotICogQGJ1ZjoKLSAqIEBidWZfbGVuOgotICovCi0jZGVmaW5lIGZvcl9lYWNoX2llKGllLCBidWYsIGJ1Zl9sZW4pIFwKLQlmb3IgKGllID0gKHZvaWQqKWJ1ZjsgKCgodTgqKWllKSAtICgodTgqKWJ1ZikgKyAxKSA8IGJ1Zl9sZW47IGllID0gKHZvaWQqKSgoKHU4KilpZSkgKyAqKCgodTgqKWllKSsxKSArIDIpKQotCi12b2lkIGR1bXBfaWVzMjNhKHU4ICpidWYsIHUzMiBidWZfbGVuKTsKLXZvaWQgZHVtcF93cHNfaWUyM2EodTggKmllLCB1MzIgaWVfbGVuKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi12b2lkIGR1bXBfcDJwX2llMjNhKHU4ICppZSwgdTMyIGllX2xlbik7Ci11OCAqcnR3X2dldF9wMnBfaWUyM2EodTggKmluX2llLCBpbnQgaW5fbGVuLCB1OCAqcDJwX2llLCB1aW50ICpwMnBfaWVsZW4pOwotdTggKnJ0d19nZXRfcDJwX2F0dHIyM2EodTggKnAycF9pZSwgdWludCBwMnBfaWVsZW4sIHU4IHRhcmdldF9hdHRyX2lkICx1OCAqYnVmX2F0dHIsIHUzMiAqbGVuX2F0dHIpOwotdTggKnJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudCh1OCAqcDJwX2llLCB1aW50IHAycF9pZWxlbiwgdTggdGFyZ2V0X2F0dHJfaWQgLHU4ICpidWZfY29udGVudCwgdWludCAqbGVuX2NvbnRlbnQpOwotdTMyIHJ0d19zZXRfcDJwX2F0dHJfY29udGVudDIzYSh1OCAqcGJ1ZiwgdTggYXR0cl9pZCwgdTE2IGF0dHJfbGVuLCB1OCAqcGRhdGFfYXR0cik7Ci12b2lkIHJ0d193bGFuX2Jzc2lkX2V4X3JlbW92ZV9wMnBfYXR0cjIzYShzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqYnNzX2V4LCB1OCBhdHRyX2lkKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLWludCBydHdfZ2V0X3dmZF9pZSh1OCAqaW5faWUsIGludCBpbl9sZW4sIHU4ICp3ZmRfaWUsIHVpbnQgKndmZF9pZWxlbik7Ci1pbnQgcnR3X2dldF93ZmRfYXR0cl9jb250ZW50KHU4ICp3ZmRfaWUsIHVpbnQgd2ZkX2llbGVuLCB1OCB0YXJnZXRfYXR0cl9pZCAsdTggKmF0dHJfY29udGVudCwgdWludCAqYXR0cl9jb250ZW50bGVuKTsKLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogdWludAlydHdfZ2V0X3JhdGVzZXRfbGVuMjNhKHU4CSpyYXRlc2V0KTsKIAogc3RydWN0IHJlZ2lzdHJ5X3ByaXY7CkBAIC01ODUsMTkgKzQ0NCwxMiBAQAogCiBpbnQgcnR3X2dldF9iaXRfdmFsdWVfZnJvbV9pZWVlX3ZhbHVlMjNhKHU4IHZhbCk7CiAKLXVpbnQgcnR3X2lzX2Nja3JhdGVzX2luY2x1ZGVkMjNhKHU4ICpyYXRlKTsKLQotdWludCBydHdfaXNfY2NrcmF0ZXNvbmx5X2luY2x1ZGVkMjNhKHU4ICpyYXRlKTsKLQogaW50IHJ0d19jaGVja19uZXR3b3JrX3R5cGUyM2EodW5zaWduZWQgY2hhciAqcmF0ZSwgaW50IHJhdGVsZW4sIGludCBjaGFubmVsKTsKIAogdm9pZCBydHdfZ2V0X2Jjbl9pbmZvMjNhKHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKTsKIAotdm9pZCBydHdfbWFjYWRkcl9jZmcyM2EodTggKm1hY19hZGRyKTsKLQogdTE2IHJ0d19tY3NfcmF0ZTIzYSh1OCByZl90eXBlLCB1OCBid180ME1IeiwgdTggc2hvcnRfR0lfMjAsIHU4IHNob3J0X0dJXzQwLCB1bnNpZ25lZCBjaGFyICogTUNTX3JhdGUpOwogCi1pbnQgcnR3X2FjdGlvbl9mcmFtZV9wYXJzZTIzYShjb25zdCB1OCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4sIHU4KiBjYXRlZ29yeSwgdTggKmFjdGlvbik7CiBjb25zdCBjaGFyICphY3Rpb25fcHVibGljX3N0cjIzYSh1OCBhY3Rpb24pOwogCiAjZW5kaWYgLyogSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9pb2N0bF9jZmc4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2lvY3RsX2NmZzgwMjExLmgKaW5kZXggMGViOTAzNi4uNjNlOTIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2lvY3RsX2NmZzgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL2lvY3RsX2NmZzgwMjExLmgKQEAgLTE1LDIzICsxNSw2IEBACiAjaWZuZGVmIF9fSU9DVExfQ0ZHODAyMTFfSF9fCiAjZGVmaW5lIF9fSU9DVExfQ0ZHODAyMTFfSF9fCiAKLXN0cnVjdCBydHdfd2Rldl9pbnZpdF9pbmZvIHsKLQl1OCB0b2tlbjsKLQl1OCBmbGFnczsKLQl1OCBzdGF0dXM7Ci0JdTggcmVxX29wX2NoOwotCXU4IHJzcF9vcF9jaDsKLX07Ci0KLSNkZWZpbmUgcnR3X3dkZXZfaW52aXRfaW5mb19pbml0KGludml0X2luZm8pIFwKLQlkbyB7IFwKLQkJKGludml0X2luZm8pLT50b2tlbiA9IDA7IFwKLQkJKGludml0X2luZm8pLT5mbGFncyA9IDB4MDA7IFwKLQkJKGludml0X2luZm8pLT5zdGF0dXMgPSAweGZmOyBcCi0JCShpbnZpdF9pbmZvKS0+cmVxX29wX2NoID0gMDsgXAotCQkoaW52aXRfaW5mbyktPnJzcF9vcF9jaCA9IDA7IFwKLQl9IHdoaWxlICgwKQotCiBzdHJ1Y3QgcnR3X3dkZXZfcHJpdiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqcnR3X3dkZXY7CiAKQEAgLTQ1LDExICsyOCw2IEBACiAKIAl1OCBwMnBfZW5hYmxlZDsKIAotCXU4IHByb3ZkaXNjX3JlcV9pc3N1ZWQ7Ci0KLQlzdHJ1Y3QgcnR3X3dkZXZfaW52aXRfaW5mbyBpbnZpdF9pbmZvOwotCi0JYm9vbCBibG9jazsKIAlib29sIHBvd2VyX21nbXQ7CiB9OwogCkBAIC04MywzNyArNjEsOSBAQAogCQkJCQl1bnNpZ25lZCBjaGFyICpkYSwgdW5zaWduZWQgc2hvcnQgcmVhc29uKTsKICNlbmRpZiAvKiBDT05GSUdfODcyM0FVX0FQX01PREUgKi8KIAotdm9pZCBydHdfY2ZnODAyMTFfaXNzdWVfcDJwX3Byb3Zpc2lvbl9yZXF1ZXN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJCSAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwotdm9pZCBydHdfY2ZnODAyMTFfcnhfcDJwX2FjdGlvbl9wdWJsaWMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgICAgICAgdTggKnBtZ210X2ZyYW1lLCB1aW50IGZyYW1lX2xlbik7Ci12b2lkIHJ0d19jZmc4MDIxMV9yeF9hY3Rpb25fcDJwKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJdTggKnBtZ210X2ZyYW1lLCB1aW50IGZyYW1lX2xlbik7CiB2b2lkIHJ0d19jZmc4MDIxMV9yeF9hY3Rpb24oc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqZnJhbWUsCiAJCQkgICAgdWludCBmcmFtZV9sZW4sIGNvbnN0IGNoYXIqbXNnKTsKIAotaW50IHJ0d19jZmc4MDIxMV9zZXRfbWdudF93cHNwMnBpZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBjaGFyICpidWYsIGludCBsZW4sCi0JCQkJICAgaW50IHR5cGUpOwotCiBib29sIHJ0d19jZmc4MDIxMV9wd3JfbWdtdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOwogCi0jZGVmaW5lIHJ0d19jZmc4MDIxMV9yeF9tZ210KGFkYXB0ZXIsIGZyZXEsIHNpZ19kYm0sIGJ1ZiwgbGVuLCBnZnApCVwKLQljZmc4MDIxMV9yeF9tZ210KChhZGFwdGVyKS0+cnR3X3dkZXYsIGZyZXEsIHNpZ19kYm0sIGJ1ZiwgbGVuLCAwLCBnZnApCi0KLSNkZWZpbmUgcnR3X2NmZzgwMjExX3NlbmRfcnhfYXNzb2MoYWRhcHRlciwgYnNzLCBidWYsIGxlbikJCVwKLQljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKChhZGFwdGVyKS0+cG5ldGRldiwgYnNzLCBidWYsIGxlbikKLQotI2RlZmluZSBydHdfY2ZnODAyMTFfbWdtdF90eF9zdGF0dXMoYWRhcHRlciwgY29va2llLCBidWYsIGxlbiwgYWNrLCBnZnApIFwKLQljZmc4MDIxMV9tZ210X3R4X3N0YXR1cygoYWRhcHRlciktPnJ0d193ZGV2LCBjb29raWUsIGJ1ZiwJXAotCQkJCWxlbiwgYWNrLCBnZnApCi0KLSNkZWZpbmUgcnR3X2NmZzgwMjExX3JlYWR5X29uX2NoYW5uZWwoYWRhcHRlciwgY29va2llLCBjaGFuLAkJXAotCQkJCSAgICAgIGNoYW5uZWxfdHlwZSwgZHVyYXRpb24sIGdmcCkJXAotCWNmZzgwMjExX3JlYWR5X29uX2NoYW5uZWwoKGFkYXB0ZXIpLT5ydHdfd2RldiwgY29va2llLCBjaGFuLAlcCi0JCQkJICBkdXJhdGlvbiwgZ2ZwKQotI2RlZmluZSBydHdfY2ZnODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZChhZGFwdGVyLCBjb29raWUsIGNoYW4sCVwKLQkJCQkJICAgICAgIGNoYW5fdHlwZSwgZ2ZwKQkJXAotCWNmZzgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQoKGFkYXB0ZXIpLT5ydHdfd2RldiwJCVwKLQkJCQkJICAgY29va2llLCBjaGFuLCBnZnApCi0KICNlbmRpZiAvKiBfX0lPQ1RMX0NGRzgwMjExX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL21sbWVfb3NkZXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9tbG1lX29zZGVwLmgKaW5kZXggYjcxMzJhOS4uNGJiNTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL21sbWVfb3NkZXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvbWxtZV9vc2RlcC5oCkBAIC0xOSwxMCArMTksNiBAQAogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogCiB2b2lkIHJ0d19vc19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIHJ0d19vc19pbmRpY2F0ZV9jb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIHJ0d19vc19pbmRpY2F0ZV9zY2FuX2RvbmUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgYm9vbCBhYm9ydGVkKTsKLXZvaWQgcnR3X3JlcG9ydF9zZWNfaWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCBhdXRobW9kZSwgdTggKnNlY19pZSk7Ci0KIHZvaWQgcnR3X3Jlc2V0X3NlY3VyaXR5cHJpdjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiAjZW5kaWYJLyogX01MTUVfT1NERVBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9tcF9jdXN0b21fb2lkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvbXBfY3VzdG9tX29pZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTE5N2NmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9tcF9jdXN0b21fb2lkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9fQ1VTVE9NX09JRF9ICi0jZGVmaW5lIF9fQ1VTVE9NX09JRF9ICi0KLS8qICAweEZGODE4MDAwIC0gMHhGRjgxODAyRgkJUlRMODE4MCBNYXNzIFByb2R1Y3Rpb24gS2l0ICovCi0vKiAgMHhGRjgxODUwMCAtIDB4RkY4MTg1MEYJCVJUTDgxODUgU2V0dXAgVXRpbGl0eSAqLwotLyogIDB4RkY4MTg1ODAgLSAweEZGODE4NThGCQlSVEw4MTg1IFBoeSBTdGF0dXMgVXRpbGl0eSAqLwotCi0vKiAgRm9yIFByb2R1Y3Rpb24gS2l0IHdpdGggQWdpbGVudCBFcXVpcG1lbnRzICovCi0vKiAgaW4gb3JkZXIgdG8gbWFrZSBvdXIgY3VzdG9tIG9pZHMgaG9wZWZ1bGx5IHNvbWV3aGF0IHVuaXF1ZSAqLwotLyogIHdlIHdpbGwgdXNlIDB4RkYgKGluZGljYXRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgT0lEKSAqLwotLyogICAgICAgICAgICAgICAgODEoZmlyc3QgYnl0ZSBvZiBub24gemVybyBSZWFsdGVrIHVuaXF1ZSBpZGVudGlmaWVyKSAqLwotLyogICAgICAgICAgICAgICAgODAgKHNlY29uZCBieXRlIG9mIG5vbiB6ZXJvIFJlYWx0ZWsgdW5pcXVlIGlkZW50aWZpZXIpICovCi0vKiAgICAgICAgICAgICAgICBYWCAodGhlIGN1c3RvbSBPSUQgbnVtYmVyIC0gcHJvdmlkaW5nIDI1NSBwb3NzaWJsZSBjdXN0b20gb2lkcykgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPX1JFU0VUX0RVVAkJMHhGRjgxODAwMAotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9EQVRBX1JBVEUJCTB4RkY4MTgwMDEKLSNkZWZpbmUgT0lEX1JUX1BST19TVEFSVF9URVNUCQkweEZGODE4MDAyCi0jZGVmaW5lIE9JRF9SVF9QUk9fU1RPUF9URVNUCQkweEZGODE4MDAzCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX1BSRUFNQkxFCQkweEZGODE4MDA0Ci0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX1NDUkFNQkxFUgkJMHhGRjgxODAwNQotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9GSUxURVJfQkIJCTB4RkY4MTgwMDYKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfTUFOVUFMX0RJVkVSU0lUWV9CQgkJMHhGRjgxODAwNwotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9DSEFOTkVMX0RJUkVDVF9DQUxMCQkweEZGODE4MDA4Ci0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX1NMRUVQX01PREVfRElSRUNUX0NBTEwJCTB4RkY4MTgwMDkKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfV0FLRV9NT0RFX0RJUkVDVF9DQUxMCQkweEZGODE4MDBBCi0KLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfVFhfQU5URU5OQV9CQgkJMHhGRjgxODAwRAotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9BTlRFTk5BX0JCCQkweEZGODE4MDBFCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX0NSX1NDUkFNQkxFUgkJMHhGRjgxODAwRgotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9DUl9ORVdfRklMVEVSCQkweEZGODE4MDEwCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX1RYX1BPV0VSX0NPTlRST0wJCTB4RkY4MTgwMTEKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfQ1JfVFhfQ09ORklHCQkweEZGODE4MDEyCi0jZGVmaW5lIE9JRF9SVF9QUk9fR0VUX1RYX1BPV0VSX0NPTlRST0wJCTB4RkY4MTgwMTMKLSNkZWZpbmUgT0lEX1JUX1BST19HRVRfQ1JfU0lHTkFMX1FVQUxJVFkJCTB4RkY4MTgwMTQKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfQ1JfU0VUUE9JTlQJCTB4RkY4MTgwMTUKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfSU5URUdSQVRPUgkJMHhGRjgxODAxNgotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9TSUdOQUxfUVVBTElUWQkJMHhGRjgxODAxNwotI2RlZmluZSBPSURfUlRfUFJPX0dFVF9JTlRFR1JBVE9SCQkweEZGODE4MDE4Ci0jZGVmaW5lIE9JRF9SVF9QUk9fR0VUX1NJR05BTF9RVUFMSVRZCQkweEZGODE4MDE5Ci0jZGVmaW5lIE9JRF9SVF9QUk9fUVVFUllfRUVQUk9NX1RZUEUJCTB4RkY4MTgwMUEKLSNkZWZpbmUgT0lEX1JUX1BST19XUklURV9NQUNfQUREUkVTUwkJMHhGRjgxODAxQgotI2RlZmluZSBPSURfUlRfUFJPX1JFQURfTUFDX0FERFJFU1MJCTB4RkY4MTgwMUMKLSNkZWZpbmUgT0lEX1JUX1BST19XUklURV9DSVNfREFUQQkJMHhGRjgxODAxRAotI2RlZmluZSBPSURfUlRfUFJPX1JFQURfQ0lTX0RBVEEJCTB4RkY4MTgwMUUKLSNkZWZpbmUgT0lEX1JUX1BST19XUklURV9QT1dFUl9DT05UUk9MCQkweEZGODE4MDFGCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVBRF9QT1dFUl9DT05UUk9MCQkweEZGODE4MDIwCi0jZGVmaW5lIE9JRF9SVF9QUk9fV1JJVEVfRUVQUk9NCQkweEZGODE4MDIxCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVBRF9FRVBST00JCTB4RkY4MTgwMjIKLSNkZWZpbmUgT0lEX1JUX1BST19SRVNFVF9UWF9QQUNLRVRfU0VOVAkJMHhGRjgxODAyMwotI2RlZmluZSBPSURfUlRfUFJPX1FVRVJZX1RYX1BBQ0tFVF9TRU5UCQkweEZGODE4MDI0Ci0jZGVmaW5lIE9JRF9SVF9QUk9fUkVTRVRfUlhfUEFDS0VUX1JFQ0VJVkVECQkweEZGODE4MDI1Ci0jZGVmaW5lIE9JRF9SVF9QUk9fUVVFUllfUlhfUEFDS0VUX1JFQ0VJVkVECQkweEZGODE4MDI2Ci0jZGVmaW5lIE9JRF9SVF9QUk9fUVVFUllfUlhfUEFDS0VUX0NSQzMyX0VSUk9SCQkweEZGODE4MDI3Ci0jZGVmaW5lIE9JRF9SVF9QUk9fUVVFUllfQ1VSUkVOVF9BRERSRVNTCQkweEZGODE4MDI4Ci0jZGVmaW5lIE9JRF9SVF9QUk9fUVVFUllfUEVSTUFORU5UX0FERFJFU1MJCTB4RkY4MTgwMjkKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfUEhJTElQU19SRl9QQVJBTUVURVJTCQkweEZGODE4MDJBCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVDRUlWRV9QQUNLRVQJCTB4RkY4MTgwMkMKLS8qICBhZGRlZCBieSBPd2VuIG9uIDA0LzA4LzAzIGZvciBDYW1lbydzIHJlcXVlc3QgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19XUklURV9FRVBST01fQllURQkJMHhGRjgxODAyRAotI2RlZmluZSBPSURfUlRfUFJPX1JFQURfRUVQUk9NX0JZVEUJCTB4RkY4MTgwMkUKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfTU9EVUxBVElPTgkJMHhGRjgxODAyRgotLyogICovCi0KLSNkZWZpbmUgT0lEX1JUX0RSSVZFUl9PUFRJT04JCTB4RkY4MTgwODAKLSNkZWZpbmUgT0lEX1JUX1JGX09GRgkJMHhGRjgxODA4MQotI2RlZmluZSBPSURfUlRfQVVUSF9TVEFUVVMJCTB4RkY4MTgwODIKLQotLyogICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX0NPTlRJTlVPVVNfVFgJCTB4RkY4MTgwMEIKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfU0lOR0xFX0NBUlJJRVJfVFgJCTB4RkY4MTgwMEMKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfQ0FSUklFUl9TVVBQUkVTU0lPTl9UWAkJMHhGRjgxODAyQgotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9TSU5HTEVfVE9ORV9UWAkJMHhGRjgxODA0MwotLyogICovCi0KLQotLyogIGJ5IE93ZW4gZm9yIFJUTDgxODUgUGh5IFN0YXR1cyBSZXBvcnQgVXRpbGl0eSAqLwotI2RlZmluZSBPSURfUlRfVVRJTElUWWZhbHNlX0FMQVJNX0NPVU5URVJTCQkweEZGODE4NTgwCi0jZGVmaW5lIE9JRF9SVF9VVElMSVRZX1NFTEVDVF9ERUJVR19NT0RFCQkweEZGODE4NTgxCi0jZGVmaW5lIE9JRF9SVF9VVElMSVRZX1NFTEVDVF9TVUJDQVJSSUVSX05VTUJFUgkJMHhGRjgxODU4MgotI2RlZmluZSBPSURfUlRfVVRJTElUWV9HRVRfUlNTSV9TVEFUVVMJCTB4RkY4MTg1ODMKLSNkZWZpbmUgT0lEX1JUX1VUSUxJVFlfR0VUX0ZSQU1FX0RFVEVDVElPTl9TVEFUVVMJCTB4RkY4MTg1ODQKLSNkZWZpbmUgT0lEX1JUX1VUSUxJVFlfR0VUX0FHQ19BTkRfRlJFUVVFTkNZX09GRlNFVF9FU1RJTUFUSU9OX1NUQVRVUwkweEZGODE4NTg1Ci0jZGVmaW5lIE9JRF9SVF9VVElMSVRZX0dFVF9DSEFOTkVMX0VTVElNQVRJT05fU1RBVFVTCQkweEZGODE4NTg2Ci0KLS8qICBieSBPd2VuIG9uIDAzLzA5LzE5LTAzLzA5LzIyIGZvciBSVEw4MTg1ICovCi0jZGVmaW5lIE9JRF9SVF9XSVJFTEVTU19NT0RFCQkweEZGODE4NTAwCi0jZGVmaW5lIE9JRF9SVF9TVVBQT1JURURfUkFURVMJCTB4RkY4MTg1MDEKLSNkZWZpbmUgT0lEX1JUX0RFU0lSRURfUkFURVMJCTB4RkY4MTg1MDIKLSNkZWZpbmUgT0lEX1JUX1dJUkVMRVNTX01PREVfU1RBUlRJTkdfQURIT0MJCTB4RkY4MTg1MDMKLS8qICAqLwotCi0jZGVmaW5lIE9JRF9SVF9HRVRfQ09OTkVDVF9TVEFURQkJMHhGRjAzMDAwMQotI2RlZmluZSBPSURfUlRfUkVTQ0FOCQkweEZGMDMwMDAyCi0jZGVmaW5lIE9JRF9SVF9TRVRfS0VZX0xFTkdUSAkJMHhGRjAzMDAwMwotI2RlZmluZSBPSURfUlRfU0VUX0RFRkFVTFRfS0VZX0lECQkweEZGMDMwMDA0Ci0KLSNkZWZpbmUgT0lEX1JUX1NFVF9DSEFOTkVMCQkweEZGMDEwMTgyCi0jZGVmaW5lIE9JRF9SVF9TRVRfU05JRkZFUl9NT0RFCQkweEZGMDEwMTgzCi0jZGVmaW5lIE9JRF9SVF9HRVRfU0lHTkFMX1FVQUxJVFkJCTB4RkYwMTAxODQKLSNkZWZpbmUgT0lEX1JUX0dFVF9TTUFMTF9QQUNLRVRfQ1JDCQkweEZGMDEwMTg1Ci0jZGVmaW5lIE9JRF9SVF9HRVRfTUlERExFX1BBQ0tFVF9DUkMJCTB4RkYwMTAxODYKLSNkZWZpbmUgT0lEX1JUX0dFVF9MQVJHRV9QQUNLRVRfQ1JDCQkweEZGMDEwMTg3Ci0jZGVmaW5lIE9JRF9SVF9HRVRfVFhfUkVUUlkJCTB4RkYwMTAxODgKLSNkZWZpbmUgT0lEX1JUX0dFVF9SWF9SRVRSWQkJMHhGRjAxMDE4OQotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9GV19ESUdfU1RBVEUJCTB4RkYwMTAxOEEvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX0ZXX1JBX1NUQVRFCQkweEZGMDEwMThCLyogUyAqLwotCi0jZGVmaW5lIE9JRF9SVF9HRVRfUlhfVE9UQUxfUEFDS0VUCQkweEZGMDEwMTkwCi0jZGVmaW5lIE9JRF9SVF9HRVRfVFhfQkVBQ09OX09LCQkweEZGMDEwMTkxCi0jZGVmaW5lIE9JRF9SVF9HRVRfVFhfQkVBQ09OX0VSUgkJMHhGRjAxMDE5MgotI2RlZmluZSBPSURfUlRfR0VUX1JYX0lDVl9FUlIJCTB4RkYwMTAxOTMKLSNkZWZpbmUgT0lEX1JUX1NFVF9FTkNSWVBUSU9OX0FMR09SSVRITQkJMHhGRjAxMDE5NAotI2RlZmluZSBPSURfUlRfU0VUX05PX0FVVE9fUkVTQ0FOCQkweEZGMDEwMTk1Ci0jZGVmaW5lIE9JRF9SVF9HRVRfUFJFQU1CTEVfTU9ERQkJMHhGRjAxMDE5NgotI2RlZmluZSBPSURfUlRfR0VUX0RSSVZFUl9VUF9ERUxUQV9USU1FCQkweEZGMDEwMTk3Ci0jZGVmaW5lIE9JRF9SVF9HRVRfQVBfSVAJCTB4RkYwMTAxOTgKLSNkZWZpbmUgT0lEX1JUX0dFVF9DSEFOTkVMUExBTgkJMHhGRjAxMDE5OQotI2RlZmluZSBPSURfUlRfU0VUX1BSRUFNQkxFX01PREUJCTB4RkYwMTAxOUEKLSNkZWZpbmUgT0lEX1JUX1NFVF9CQ05fSU5UVkwJCTB4RkYwMTAxOUIKLSNkZWZpbmUgT0lEX1JUX0dFVF9SRl9WRU5ERVIJCTB4RkYwMTAxOUMKLSNkZWZpbmUgT0lEX1JUX0RFRElDQVRFX1BST0JFCQkweEZGMDEwMTlECi0jZGVmaW5lIE9JRF9SVF9QUk9fUlhfRklMVEVSX1BBVFRFUk4JCTB4RkYwMTAxOUUKLQotI2RlZmluZSBPSURfUlRfR0VUX0RDU1RfQ1VSUkVOVF9USFJFU0hPTEQJCTB4RkYwMTAxOUYKLQotI2RlZmluZSBPSURfUlRfR0VUX0NDQV9FUlIJCTB4RkYwMTAxQTAKLSNkZWZpbmUgT0lEX1JUX0dFVF9DQ0FfVVBHUkFERV9USFJFU0hPTEQJCTB4RkYwMTAxQTEKLSNkZWZpbmUgT0lEX1JUX0dFVF9DQ0FfRkFMTEJBQ0tfVEhSRVNIT0xECQkweEZGMDEwMUEyCi0KLSNkZWZpbmUgT0lEX1JUX0dFVF9DQ0FfVVBHUkFERV9FVkFMVUFURV9USU1FUwkJMHhGRjAxMDFBMwotI2RlZmluZSBPSURfUlRfR0VUX0NDQV9GQUxMQkFDS19FVkFMVUFURV9USU1FUwkJMHhGRjAxMDFBNAotCi0vKiAgYnkgT3dlbiBvbiAwMy8zMS8wMyBmb3IgQ2FtZW8ncyByZXF1ZXN0ICovCi0jZGVmaW5lIE9JRF9SVF9TRVRfUkFURV9BREFQVElWRQkJMHhGRjAxMDFBNQotLyogICovCi0jZGVmaW5lIE9JRF9SVF9HRVRfRENTVF9FVkFMVUFURV9QRVJJT0QJCTB4RkYwMTAxQTUKLSNkZWZpbmUgT0lEX1JUX0dFVF9EQ1NUX1RJTUVfVU5JVF9JTkRFWAkJMHhGRjAxMDFBNgotI2RlZmluZSBPSURfUlRfR0VUX1RPVEFMX1RYX0JZVEVTCQkweEZGMDEwMUE3Ci0jZGVmaW5lIE9JRF9SVF9HRVRfVE9UQUxfUlhfQllURVMJCTB4RkYwMTAxQTgKLSNkZWZpbmUgT0lEX1JUX0NVUlJFTlRfVFhfUE9XRVJfTEVWRUwJCTB4RkYwMTAxQTkKLSNkZWZpbmUgT0lEX1JUX0dFVF9FTkNfS0VZX01JU01BVENIX0NPVU5UCQkweEZGMDEwMUFBCi0jZGVmaW5lIE9JRF9SVF9HRVRfRU5DX0tFWV9NQVRDSF9DT1VOVAkJMHhGRjAxMDFBQgotI2RlZmluZSBPSURfUlRfR0VUX0NIQU5ORUwJCTB4RkYwMTAxQUMKLQotI2RlZmluZSBPSURfUlRfU0VUX0NIQU5ORUxQTEFOCQkweEZGMDEwMUFECi0jZGVmaW5lIE9JRF9SVF9HRVRfSEFSRFdBUkVfUkFESU9fT0ZGCQkweEZGMDEwMUFFCi0jZGVmaW5lIE9JRF9SVF9DSEFOTkVMUExBTl9CWV9DT1VOVFJZCQkweEZGMDEwMUFGCi0jZGVmaW5lIE9JRF9SVF9TQ0FOX0FWQUlMQUJMRV9CU1NJRAkJMHhGRjAxMDFCMAotI2RlZmluZSBPSURfUlRfR0VUX0hBUkRXQVJFX1ZFUlNJT04JCTB4RkYwMTAxQjEKLSNkZWZpbmUgT0lEX1JUX0dFVF9JU19ST0FNSU5HCQkweEZGMDEwMUIyCi0jZGVmaW5lIE9JRF9SVF9HRVRfSVNfUFJJVkFDWQkJMHhGRjAxMDFCMwotI2RlZmluZSBPSURfUlRfR0VUX0tFWV9NSVNNQVRDSAkJMHhGRjAxMDFCNAotI2RlZmluZSBPSURfUlRfU0VUX1JTU0lfUk9BTV9UUkFGRklDX1RICQkweEZGMDEwMUI1Ci0jZGVmaW5lIE9JRF9SVF9TRVRfUlNTSV9ST0FNX1NJR05BTF9USAkJMHhGRjAxMDFCNgotI2RlZmluZSBPSURfUlRfUkVTRVRfTE9HCQkweEZGMDEwMUI3Ci0jZGVmaW5lIE9JRF9SVF9HRVRfTE9HCQkweEZGMDEwMUI4Ci0jZGVmaW5lIE9JRF9SVF9TRVRfSU5ESUNBVEVfSElEREVOX0FQCQkweEZGMDEwMUI5Ci0jZGVmaW5lIE9JRF9SVF9HRVRfSEVBREVSX0ZBSUwJCTB4RkYwMTAxQkEKLSNkZWZpbmUgT0lEX1JUX1NVUFBPUlRFRF9XSVJFTEVTU19NT0RFCQkweEZGMDEwMUJCCi0jZGVmaW5lIE9JRF9SVF9HRVRfQ0hBTk5FTF9MSVNUCQkweEZGMDEwMUJDCi0jZGVmaW5lIE9JRF9SVF9HRVRfU0NBTl9JTl9QUk9HUkVTUwkJMHhGRjAxMDFCRAotI2RlZmluZSBPSURfUlRfR0VUX1RYX0lORk8JCTB4RkYwMTAxQkUKLSNkZWZpbmUgT0lEX1JUX1JGX1JFQURfV1JJVEVfT0ZGU0VUCQkweEZGMDEwMUJGCi0jZGVmaW5lIE9JRF9SVF9SRl9SRUFEX1dSSVRFCQkweEZGMDEwMUMwCi0KLS8qICBGb3IgTmV0Z2VhciByZXF1ZXN0LiAyMDA1LjAxLjEzLCBieSByY25qa28uICovCi0jZGVmaW5lIE9JRF9SVF9GT1JDRURfREFUQV9SQVRFCQkweEZGMDEwMUMxCi0jZGVmaW5lIE9JRF9SVF9XSVJFTEVTU19NT0RFX0ZPUl9TQ0FOX0xJU1QJMHhGRjAxMDFDMgotLyogIEZvciBOZXRnZWFyIHJlcXVlc3QuIDIwMDUuMDIuMTcsIGJ5IHJjbmprby4gKi8KLSNkZWZpbmUgT0lEX1JUX0dFVF9CU1NfV0lSRUxFU1NfTU9ERQkJMHhGRjAxMDFDMwotLyogIEZvciBBWiBwcm9qZWN0LiAyMDA1LjA2LjI3LCBieSByY25qa28uICovCi0jZGVmaW5lIE9JRF9SVF9TQ0FOX1dJVEhfTUFHSUNfUEFDS0VUCQkweEZGMDEwMUM0Ci0KLS8qICBWaW5jZW50IDgxODVNUCAqLwotI2RlZmluZSBPSURfUlRfUFJPX1JYX0ZJTFRFUgkJMHhGRjAxMTFDMAotCi0vKiBBbmR5IFRFU1QgKi8KLS8qIGRlZmluZSBPSURfUlRfUFJPX1dSSVRFX1JFR0lTVFJZCQkweEZGMDExMUMxICovCi0vKiBkZWZpbmUgT0lEX1JUX1BST19SRUFEX1JFR0lTVFJZCQkweEZGMDExMUMyICovCi0jZGVmaW5lIE9JRF9DRV9VU0JfV1JJVEVfUkVHSVNUUlkJCTB4RkYwMTExQzEKLSNkZWZpbmUgT0lEX0NFX1VTQl9SRUFEX1JFR0lTVFJZCQkweEZGMDExMUMyCi0KLQotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9JTklUSUFMX0dBSU4JCTB4RkYwMTExQzMKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfQkJfUkZfU1RBTkRCWV9NT0RFCQkweEZGMDExMUM0Ci0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX0JCX1JGX1NIVVRET1dOX01PREUJCTB4RkYwMTExQzUKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfVFhfQ0hBUkdFX1BVTVAJCTB4RkYwMTExQzYKLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfUlhfQ0hBUkdFX1BVTVAJCTB4RkYwMTExQzcKLSNkZWZpbmUgT0lEX1JUX1BST19SRl9XUklURV9SRUdJU1RSWQkJMHhGRjAxMTFDOAotI2RlZmluZSBPSURfUlRfUFJPX1JGX1JFQURfUkVHSVNUUlkJCTB4RkYwMTExQzkKLSNkZWZpbmUgT0lEX1JUX1BST19RVUVSWV9SRl9UWVBFCQkweEZGMDExMUNBCi0KLS8qICBBUCBPSUQgKi8KLSNkZWZpbmUgT0lEX1JUX0FQX0dFVF9BU1NPQ0lBVEVEX1NUQVRJT05fTElTVAkJMHhGRjAxMDMwMAotI2RlZmluZSBPSURfUlRfQVBfR0VUX0NVUlJFTlRfVElNRV9TVEFNUAkJMHhGRjAxMDMwMQotI2RlZmluZSBPSURfUlRfQVBfU1dJVENIX0lOVE9fQVBfTU9ERQkJMHhGRjAxMDMwMgotI2RlZmluZSBPSURfUlRfQVBfU0VUX0RUSU1fUEVSSU9ECQkweEZGMDEwMzAzCi0jZGVmaW5lIE9JRF9SVF9BUF9TVVBQT1JURUQJCTB4RkYwMTAzMDQJLyogIERldGVybWluZSBpZiBkcml2ZXIgc3VwcG9ydHMgQVAgbW9kZS4gMjAwNC4wOC4yNywgYnkgcmNuamtvLiAqLwotI2RlZmluZSBPSURfUlRfQVBfU0VUX1BBU1NQSFJBU0UJCTB4RkYwMTAzMDUJLyogIFNldCBXUEEtUFNLIHBhc3NwaHJhc2UgaW50byBhdXRoZW50aWNhdG9yLiAyMDA1LjA3LjA4LCBieXJjbmprby4gKi8KLQotLyogIDgxODdNUC4gMjAwNC4wOS4wNiwgYnkgcmNuamtvLiAqLwotI2RlZmluZSBPSURfUlRfUFJPODE4N19XSV9QT0xMCQkweEZGODE4NzgwCi0jZGVmaW5lIE9JRF9SVF9QUk9fV1JJVEVfQkJfUkVHCQkweEZGODE4NzgxCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVBRF9CQl9SRUcJCTB4RkY4MTg3ODIKLSNkZWZpbmUgT0lEX1JUX1BST19XUklURV9SRl9SRUcJCTB4RkY4MTg3ODMKLSNkZWZpbmUgT0lEX1JUX1BST19SRUFEX1JGX1JFRwkJMHhGRjgxODc4NAotCi0vKiAgTWVldGluZyBIb3VzZS4gYWRkZWQgYnkgQW5uaWUsIDIwMDUtMDctMjAuICovCi0jZGVmaW5lIE9JRF9SVF9NSF9WRU5ERVJfSUQJCTB4RkZFREMxMDAKLQotLyogODcxMSBNUCBPSUQgYWRkZWQgMjAwNTEyMzAuICovCi0jZGVmaW5lIE9JRF9SVF9QUk84NzExX0pPSU5fQlNTCQkweEZGODcxMTAwLyogUyAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVBRF9SRUdJU1RFUgkJMHhGRjg3MTEwMSAvKiBRICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fV1JJVEVfUkVHSVNURVIJCTB4RkY4NzExMDIgLyogUyAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fQlVSU1RfUkVBRF9SRUdJU1RFUgkJMHhGRjg3MTEwMyAvKiBRICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fQlVSU1RfV1JJVEVfUkVHSVNURVIJCTB4RkY4NzExMDQgLyogUyAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fV1JJVEVfVFhDTUQJCTB4RkY4NzExMDUgLyogUyAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVBRDE2X0VFUFJPTQkJMHhGRjg3MTEwNiAvKiBRICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fV1JJVEUxNl9FRVBST00JCTB4RkY4NzExMDcgLyogUyAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fSDJDX1NFVF9DT01NQU5ECQkweEZGODcxMTA4IC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19IMkNfUVVFUllfUkVTVUxUCQkweEZGODcxMTA5IC8qIFEgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPODcxMV9XSV9QT0xMCQkweEZGODcxMTBBIC8qIFEgKi8KLSNkZWZpbmUgT0lEX1JUX1BSTzg3MTFfUEtUX0xPU1MJCTB4RkY4NzExMEIgLyogUSAqLwotI2RlZmluZSBPSURfUlRfUkRfQVRUUklCX01FTQkJMHhGRjg3MTEwQy8qIFEgKi8KLSNkZWZpbmUgT0lEX1JUX1dSX0FUVFJJQl9NRU0JCTB4RkY4NzExMEQvKiBTICovCi0KLQotLyogTWV0aG9kIDIgZm9yIEgyQy9DMkggKi8KLSNkZWZpbmUgT0lEX1JUX1BST19IMkNfQ01EX01PREUJCTB4RkY4NzExMTAgLyogUyAqLwotI2RlZmluZSBPSURfUlRfUFJPX0gyQ19DTURfUlNQX01PREUJCTB4RkY4NzExMTEgLyogUSAqLwotI2RlZmluZSBPSURfUlRfUFJPX0gyQ19DTURfRVZFTlRfTU9ERQkJMHhGRjg3MTExMiAvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fV0FJVF9DMkhfRVZFTlQJCTB4RkY4NzExMTMgLyogUSAqLwotI2RlZmluZSBPSURfUlRfUFJPX1JXX0FDQ0VTU19QUk9UT0NPTF9URVNUCQkweEZGODcxMTE0LyogUSAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0NTSV9BQ0NFU1NfVEVTVAkJMHhGRjg3MTExNSAvKiBRLCBTICovCi0KLSNkZWZpbmUgT0lEX1JUX1BST19TQ1NJX1RDUElQT0ZGTE9BRF9PVVQJCTB4RkY4NzExMTYgLyogUyAqLwotI2RlZmluZSBPSURfUlRfUFJPX1NDU0lfVENQSVBPRkZMT0FEX0lOCQkweEZGODcxMTE3IC8qIFEsUyAqLwotI2RlZmluZSBPSURfUlRfUlJPX1JYX1BLVF9WSUFfSU9DVFJMCQkweEZGODcxMTE4IC8qIFEgKi8KLSNkZWZpbmUgT0lEX1JUX1JST19SWF9QS1RBUlJBWV9WSUFfSU9DVFJMCQkweEZGODcxMTE5IC8qIFEgKi8KLQotI2RlZmluZSBPSURfUlRfUlBPX1NFVF9QV1JNR1RfVEVTVAkJMHhGRjg3MTExQSAvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fUVJZX1BXUk1HVF9URVNUCQkwWEZGODcxMTFCIC8qIFEgKi8KLSNkZWZpbmUgT0lEX1JUX1JQT19BU1lOQ19SV0lPX1RFU1QJCTB4RkY4NzExMUMgLyogUyAqLwotI2RlZmluZSBPSURfUlRfUlBPX0FTWU5DX1JXSU9fUE9MTAkJMHhGRjg3MTExRCAvKiBRICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX1JGX0lOVEZTCQkweEZGODcxMTFFIC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BPTExfUlhfU1RBVFVTCQkweEZGODcxMTFGIC8qIFEgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPX0NGR19ERUJVR19NRVNTQUdFCQkweEZGODcxMTIwIC8qIFEsUyAqLwotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9EQVRBX1JBVEVfRVgJCTB4RkY4NzExMjEvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fU0VUX0JBU0lDX1JBVEUJCTB4RkY4NzExMjIvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fUkVBRF9UU1NJCQkweEZGODcxMTIzLyogUyAqLwotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9QT1dFUl9UUkFDS0lORwkJMHhGRjg3MTEyNC8qIFMgKi8KLQotCi0jZGVmaW5lIE9JRF9SVF9QUk9fUVJZX1BXUlNUQVRFCQkweEZGODcxMTUwIC8qIFEgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19TRVRfUFdSU1RBVEUJCTB4RkY4NzExNTEgLyogUyAqLwotCi0vKiBNZXRob2QgMiAsIHVzaW5nIHdvcmtpdGVtICovCi0jZGVmaW5lIE9JRF9SVF9TRVRfUkVBRF9SRUcJCTB4RkY4NzExODEgLyogUyAqLwotI2RlZmluZSBPSURfUlRfU0VUX1dSSVRFX1JFRwkJMHhGRjg3MTE4MiAvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9TRVRfQlVSU1RfUkVBRF9SRUcJCTB4RkY4NzExODMgLyogUyAqLwotI2RlZmluZSBPSURfUlRfU0VUX0JVUlNUX1dSSVRFX1JFRwkJMHhGRjg3MTE4NCAvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9TRVRfV1JJVEVfVFhDTUQJCTB4RkY4NzExODUgLyogUyAqLwotI2RlZmluZSBPSURfUlRfU0VUX1JFQUQxNl9FRVBST00JCTB4RkY4NzExODYgLyogUyAqLwotI2RlZmluZSBPSURfUlRfU0VUX1dSSVRFMTZfRUVQUk9NCQkweEZGODcxMTg3IC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1FSWV9QT0xMX1dLSVRFTQkJMHhGRjg3MTE4OCAvKiBRICovCi0KLS8qIEZvciBTRElPIElOVEVSRkFDRSBvbmx5ICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fU1lOQ1BBR0VSV19TUkFNCQkweEZGODcxMUEwIC8qIFEsIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST184NzFYX0RSVl9FWFQJCTB4RkY4NzExQTEKLQotLyogRm9yIFVTQiBJTlRFUkZBQ0Ugb25seSAqLwotI2RlZmluZSBPSURfUlRfUFJPX1VTQl9WRU5ET1JfUkVRCQkweEZGODcxMUIwIC8qIFEsIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19TQ1NJX0FVVE9fVEVTVAkJMHhGRjg3MTFCMSAvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fVVNCX01BQ19BQ19GSUZPX1dSSVRFCQkweEZGODcxMUIyIC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19VU0JfTUFDX1JYX0ZJRk9fUkVBRAkJMHhGRjg3MTFCMyAvKiBRICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fVVNCX01BQ19SWF9GSUZPX1BPTExJTkcJCTB4RkY4NzExQjQgLyogUSAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fSDJDX1NFVF9SQVRFX1RBQkxFCQkweEZGODcxMUZCIC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19IMkNfR0VUX1JBVEVfVEFCTEUJCTB4RkY4NzExRkMgLyogUyAqLwotI2RlZmluZSBPSURfUlRfUFJPX0gyQ19DMkhfTEJLX1RFU1QJCTB4RkY4NzExRkUKLQotI2RlZmluZSBPSURfUlRfUFJPX0VOQ1JZUFRJT05fQ1RSTAkJMHhGRjg3MTIwMCAvKiBRLCBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fQUREX1NUQV9JTkZPCQkweEZGODcxMjAxIC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19ERUxFX1NUQV9JTkZPCQkweEZGODcxMjAyIC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19RVUVSWV9EUl9WQVJJQUJMRQkJMHhGRjg3MTIwMyAvKiBRICovCi0KLSNkZWZpbmUgT0lEX1JUX1BST19SWF9QQUNLRVRfVFlQRQkJMHhGRjg3MTIwNCAvKiBRLCBTICovCi0KLSNkZWZpbmUgT0lEX1JUX1BST19SRUFEX0VGVVNFCQkweEZGODcxMjA1IC8qIFEgKi8KLSNkZWZpbmUgT0lEX1JUX1BST19XUklURV9FRlVTRQkJMHhGRjg3MTIwNiAvKiBTICovCi0jZGVmaW5lIE9JRF9SVF9QUk9fUldfRUZVU0VfUEdQS1QJCTB4RkY4NzEyMDcgLyogUSwgUyAqLwotI2RlZmluZSBPSURfUlRfR0VUX0VGVVNFX0NVUlJFTlRfU0laRQkJMHhGRjg3MTIwOCAvKiBRICovCi0KLSNkZWZpbmUgT0lEX1JUX1NFVF9CQU5EV0lEVEgJCTB4RkY4NzEyMDkgLyogUyAqLwotI2RlZmluZSBPSURfUlRfU0VUX0NSWVNUQUxfQ0FQCQkweEZGODcxMjBBIC8qIFMgKi8KLQotI2RlZmluZSBPSURfUlRfU0VUX1JYX1BBQ0tFVF9UWVBFCQkweEZGODcxMjBCIC8qIFMgKi8KLQotI2RlZmluZSBPSURfUlRfR0VUX0VGVVNFX01BWF9TSVpFCQkweEZGODcxMjBDIC8qIFEgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9UWF9BR0NfT0ZGU0VUCQkweEZGODcxMjBEIC8qIFMgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPX1NFVF9QS1RfVEVTVF9NT0RFCQkweEZGODcxMjBFIC8qIFMgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPX0ZPUl9FVk1fVEVTVF9TRVRUSU5HCQkweEZGODcxMjBGIC8qIFMgKi8KLQotI2RlZmluZSBPSURfUlRfUFJPX0dFVF9USEVSTUFMX01FVEVSCQkweEZGODcxMjEwIC8qIFEgKi8KLQotI2RlZmluZSBPSURfUlRfUkVTRVRfUEhZX1JYX1BBQ0tFVF9DT1VOVAkweEZGODcxMjExIC8qIFMgKi8KLSNkZWZpbmUgT0lEX1JUX0dFVF9QSFlfUlhfUEFDS0VUX1JFQ0VJVkVECTB4RkY4NzEyMTIgLyogUSAqLwotI2RlZmluZSBPSURfUlRfR0VUX1BIWV9SWF9QQUNLRVRfQ1JDMzJfRVJST1IJMHhGRjg3MTIxMyAvKiBRICovCi0KLSNkZWZpbmUgT0lEX1JUX1NFVF9QT1dFUl9ET1dOCQkweEZGODcxMjE0IC8qIFMgKi8KLQotI2RlZmluZSBPSURfUlRfR0VUX1BPV0VSX01PREUJCTB4RkY4NzEyMTUgLyogUSAqLwotCi0jZGVmaW5lIE9JRF9SVF9QUk9fRUZVU0UJCTB4RkY4NzEyMTYgLyogUSwgUyAqLwotI2RlZmluZSBPSURfUlRfUFJPX0VGVVNFX01BUAkJMHhGRjg3MTIxNyAvKiBRLCBTICovCi0KLSNlbmRpZiAvKiBpZm5kZWYJX19DVVNUT01fT0lEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG0uaAppbmRleCBkZmVkZmJiLi4xODNkOGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbS5oCkBAIC04NiwxNSArODYsNiBAQAogLyogIHN0cnVjdHVyZSBhbmQgZGVmaW5lICovCiAvKiAgKi8KIAotLyogICovCi0vKiAgMjAxMS8wOS8yMCBNSCBBZGQgZm9yIEFQL0FEU0xwc2V1ZG8gRE0gc3RydWN0dWVyIHJlcXVpcmVtZW50LiAqLwotLyogIFdlIG5lZWQgdG8gcmVtb3ZlIHRvIG90aGVyIHBvc2l0aW9uPz8/ICovCi0vKiAgKi8KLXN0cnVjdCBydGw4NzIzYV9wcml2IHsKLQl1OAkJdGVtcDsKLX07Ci0KLQogc3RydWN0ICBkaWdfdCB7CiAJdTgJCURpZ19FbmFibGVfRmxhZzsKIAl1OAkJRGlnX0V4dF9Qb3J0X1N0YWdlOwpAQCAtMTg3LDcgKzE3OCw2IEBACiAJYm9vbAkJRmlyc3RfdGltZV9lbnRlcjsKIAlib29sCQlSWEhQX2VuYWJsZTsKIAl1OAkJVFBfTW9kZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBQU0RUaW1lcjsKIH07CiAKICNkZWZpbmUgQVNTT0NJQVRFX0VOVFJZX05VTQkJCQkJMzIgLyogIE1heCBzaXplIG9mIEFzb2NFbnRyeVtdLiAqLwpAQCAtMjM0LDE0ICsyMjQsMTIgQEAKIAl1NjQJCVJYQnl0ZUNudF9BOwogCXU2NAkJUlhCeXRlQ250X0I7CiAJdTgJCVRyYWZmaWNMb2FkOwotCXN0cnVjdCB0aW1lcl9saXN0IFN3QW50ZW5uYVN3aXRjaFRpbWVyOwogfTsKIAogc3RydWN0IGVkY2FfdHVyYm8gewogCWJvb2wgYkN1cnJlbnRUdXJib0VEQ0E7CiAJYm9vbCBiSXNDdXJSRExTdGF0ZTsKIAl1MzIJcHJ2X3RyYWZmaWNfaWR4OyAvKiAgZWRjYSB0dXJibyAqLwotCiB9OwogCiBzdHJ1Y3Qgb2RtX3JhdGVfYWRhcHQgewpAQCAtMjY3LDIwICsyNTUsNiBAQAogCiAvKiAgRGVjbGFyZSBmb3IgY29tbW9uIGluZm8gKi8KIAotc3RydWN0IG9kbV9waHlfaW5mbyB7Ci0JdTgJCVJ4UFdEQkFsbDsKLQl1OAkJU2lnbmFsUXVhbGl0eTsJIC8qICBpbiAwLTEwMCBpbmRleC4gKi8KLQl1OAkJUnhNSU1PU2lnbmFsUXVhbGl0eVtSRl9QQVRIX01BWF07IC8qIEVWTSAqLwotCXU4CQlSeE1JTU9TaWduYWxTdHJlbmd0aFtSRl9QQVRIX01BWF07LyogIGluIDB+MTAwIGluZGV4ICovCi0JczgJCVJ4UG93ZXI7IC8qICBpbiBkQm0gVHJhbnNsYXRlIGZyb20gUFdkQiAqLwotCXM4CQlSZWN2U2lnbmFsUG93ZXI7LyogIFJlYWwgcG93ZXIgaW4gZEJtIGZvciB0aGlzIHBhY2tldCwgbm8gYmVhdXRpZmljYXRpb24gYW5kIGFnZ3JlZ2F0aW9uLiBLZWVwIHRoaXMgcmF3IGluZm8gdG8gYmUgdXNlZCBmb3IgdGhlIG90aGVyIHByb2NlZHVyZXMuICovCi0JdTgJCUJUUnhSU1NJUGVyY2VudGFnZTsKLQl1OAkJU2lnbmFsU3RyZW5ndGg7IC8qICBpbiAwLTEwMCBpbmRleC4gKi8KLQl1OAkJUnhQd3JbUkZfUEFUSF9NQVhdOy8qIHBlci1wYXRoJ3MgcHdkYiAqLwotCXU4CQlSeFNOUltSRl9QQVRIX01BWF07LyogcGVyLXBhdGgncyBTTlIgKi8KLX07Ci0KLQogc3RydWN0IG9kbV9waHlfZGJnX2luZm8gewogCS8qIE9ETSBXcml0ZSxkZWJ1ZyBpbmZvICovCiAJczgJCVJ4U05SZEJbUkZfUEFUSF9NQVhdOwpAQCAtMzAwLDExICsyNzQsNiBAQAogCWJvb2wJCWJQYWNrZXRCZWFjb247CiB9OwogCi1zdHJ1Y3Qgb2RtX21hY19pbmZvIHsKLQl1OAl0ZXN0OwotCi19OwotCiAKIGVudW0gewogCS8qICBCQiBUZWFtICovCkBAIC0zMjMsMzIgKzI5Miw2IEBACiB9OwogCiAvKiAgKi8KLS8qICAyMDExLzIwLzIwIE1IIEZvciBNUCBkcml2ZXIgUlRfV0xBTl9TVEEgPSAgc3RydWN0IHN0YV9pbmZvICovCi0vKiAgUGxlYXNlIGRlY2xhcmUgYmVsb3cgT0RNIHJlbGF0aXZlIGluZm8gaW4geW91ciBTVEEgaW5mbyBzdHJ1Y3R1cmUuICovCi0vKiAgKi8KLXN0cnVjdCBvZG1fc3RhX2luZm8gewotCS8qICBEcml2ZXIgV3JpdGUgKi8KLQlib29sCQliVXNlZDsJCQkJLyogIHJlY29yZCB0aGUgc3RhIHN0YXR1cyBsaW5rIG9yIG5vdD8gKi8KLQl1OAkJSU9UUGVlcjsJCQkvKiAgRW51bSB2YWx1ZS4JSFRfSU9UX1BFRVJfRSAqLwotCi0JLyogIE9ETSBXcml0ZSAqLwotCS8qIDEgUEhZX1NUQVRVU19JTkZPICovCi0JdTgJCVJTU0lfUGF0aFs0XTsJCS8qICAqLwotCXU4CQlSU1NJX0F2ZTsKLQl1OAkJUlhFVk1bNF07Ci0JdTgJCVJYU05SWzRdOwotCi0JLyogIE9ETSBXcml0ZSAqLwotCS8qIDEgVFhfSU5GTyAobWF5IGNoYW5nZWQgYnkgSUMpICovCi0KLQkvKiAgKi8KLQkvKglQbGVhc2UgdXNlIGNvbXBpbGUgZmxhZyB0byBkaXNhYmxlIHRoZSBzdHJ1Y3R1cmUgZm9yIG90aGVyIElDIGV4Y2VwdCA4OEUuICovCi0JLyoJTW92ZSBUbyBsb3dlciBsYXllci4gKi8KLQkvKiAgKi8KLQkvKiAgT0RNIFdyaXRlIFdpbHNvbiB3aWxsIGhhbmRsZSB0aGlzIHBhcnQoc2FpZCBieSBMdWtlLkxlZSkgKi8KLX07Ci0KLS8qICAqLwogLyogIDIwMTEvMTAvMjAgTUggRGVmaW5lIENvbW1vbiBpbmZvIGVudW0gZm9yIGFsbCB0ZWFtLiAqLwogLyogICovCiAKQEAgLTQyOCwyOCArMzcxLDI4IEBACiAvKiAgRGVmaW5lIE9ETSBzdXBwb3J0IGFiaWxpdHkuICBPRE1fQ01OSU5GT19BQklMSVRZICovCiBlbnVtIHsKIAkvKiAgQkIgT0RNIHNlY3Rpb24gQklUIDAtMTUgKi8KLQlPRE1fQkJfRElHCQkJCT0gQklUMCwKLQlPRE1fQkJfUkFfTUFTSwkJCQk9IEJJVDEsCi0JT0RNX0JCX0RZTkFNSUNfVFhQV1IJCQk9IEJJVDIsCi0JT0RNX0JCX0ZBX0NOVAkJCQk9IEJJVDMsCi0JT0RNX0JCX1JTU0lfTU9OSVRPUgkJCT0gQklUNCwKLQlPRE1fQkJfQ0NLX1BECQkJCT0gQklUNSwKLQlPRE1fQkJfQU5UX0RJVgkJCQk9IEJJVDYsCi0JT0RNX0JCX1BXUl9TQVZFCQkJCT0gQklUNywKLQlPRE1fQkJfUFdSX1RSQUlOCQkJPSBCSVQ4LAotCU9ETV9CQl9SQVRFX0FEQVBUSVZFCQkJPSBCSVQ5LAotCU9ETV9CQl9QQVRIX0RJVgkJCQk9IEJJVDEwLAotCU9ETV9CQl9QU0QJCQkJPSBCSVQxMSwKLQlPRE1fQkJfUlhIUAkJCQk9IEJJVDEyLAorCU9ETV9CQl9ESUcJCQkJPSBCSVQoMCksCisJT0RNX0JCX1JBX01BU0sJCQkJPSBCSVQoMSksCisJT0RNX0JCX0RZTkFNSUNfVFhQV1IJCQk9IEJJVCgyKSwKKwlPRE1fQkJfRkFfQ05UCQkJCT0gQklUKDMpLAorCU9ETV9CQl9SU1NJX01PTklUT1IJCQk9IEJJVCg0KSwKKwlPRE1fQkJfQ0NLX1BECQkJCT0gQklUKDUpLAorCU9ETV9CQl9BTlRfRElWCQkJCT0gQklUKDYpLAorCU9ETV9CQl9QV1JfU0FWRQkJCQk9IEJJVCg3KSwKKwlPRE1fQkJfUFdSX1RSQUlOCQkJPSBCSVQoOCksCisJT0RNX0JCX1JBVEVfQURBUFRJVkUJCQk9IEJJVCg5KSwKKwlPRE1fQkJfUEFUSF9ESVYJCQkJPSBCSVQoMTApLAorCU9ETV9CQl9QU0QJCQkJPSBCSVQoMTEpLAorCU9ETV9CQl9SWEhQCQkJCT0gQklUKDEyKSwKIAogCS8qICBNQUMgRE0gc2VjdGlvbiBCSVQgMTYtMjMgKi8KLQlPRE1fTUFDX0VEQ0FfVFVSQk8JCQk9IEJJVDE2LAotCU9ETV9NQUNfRUFSTFlfTU9ERQkJCT0gQklUMTcsCisJT0RNX01BQ19FRENBX1RVUkJPCQkJPSBCSVQoMTYpLAorCU9ETV9NQUNfRUFSTFlfTU9ERQkJCT0gQklUKDE3KSwKIAogCS8qICBSRiBPRE0gc2VjdGlvbiBCSVQgMjQtMzEgKi8KLQlPRE1fUkZfVFhfUFdSX1RSQUNLCQkJPSBCSVQyNCwKLQlPRE1fUkZfUlhfR0FJTl9UUkFDSwkJCT0gQklUMjUsCi0JT0RNX1JGX0NBTElCUkFUSU9OCQkJPSBCSVQyNiwKKwlPRE1fUkZfVFhfUFdSX1RSQUNLCQkJPSBCSVQoMjQpLAorCU9ETV9SRl9SWF9HQUlOX1RSQUNLCQkJPSBCSVQoMjUpLAorCU9ETV9SRl9DQUxJQlJBVElPTgkJCT0gQklUKDI2KSwKIAogfTsKIApAQCAtNDYzLDEzICs0MDYsMTMgQEAKIAogLyogIE9ETV9DTU5JTkZPX0lDX1RZUEUgKi8KIGVudW0gb2RtX2ljX3R5cGVfZGVmIHsKLQlPRE1fUlRMODE5MlMJPQlCSVQwLAotCU9ETV9SVEw4MTkyQwk9CUJJVDEsCi0JT0RNX1JUTDgxOTJECT0JQklUMiwKLQlPRE1fUlRMODcyM0EJPQlCSVQzLAotCU9ETV9SVEw4MTg4RQk9CUJJVDQsCi0JT0RNX1JUTDg4MTIJPQlCSVQ1LAotCU9ETV9SVEw4ODIxCT0JQklUNiwKKwlPRE1fUlRMODE5MlMJPQlCSVQoMCksCisJT0RNX1JUTDgxOTJDCT0JQklUKDEpLAorCU9ETV9SVEw4MTkyRAk9CUJJVCgyKSwKKwlPRE1fUlRMODcyM0EJPQlCSVQoMyksCisJT0RNX1JUTDgxODhFCT0JQklUKDQpLAorCU9ETV9SVEw4ODEyCT0JQklUKDUpLAorCU9ETV9SVEw4ODIxCT0JQklUKDYpLAogfTsKIAogI2RlZmluZSBPRE1fSUNfMTFOX1NFUklFUwkJCVwKQEAgLTQ5NiwxNCArNDM5LDE0IEBACiAvKiAgT0RNX0NNTklORk9fUkZfVFlQRSAqLwogLyogIEZvciBleGFtcGxlIDFUMlIgKEErQUIgPSBCSVQwfEJJVDR8QklUNSkgKi8KIGVudW0gcmZfcGF0aF9kZWYgewotCU9ETV9SRl9UWF9BCT0JQklUMCwKLQlPRE1fUkZfVFhfQgk9CUJJVDEsCi0JT0RNX1JGX1RYX0MJPQlCSVQyLAotCU9ETV9SRl9UWF9ECT0JQklUMywKLQlPRE1fUkZfUlhfQQk9CUJJVDQsCi0JT0RNX1JGX1JYX0IJPQlCSVQ1LAotCU9ETV9SRl9SWF9DCT0JQklUNiwKLQlPRE1fUkZfUlhfRAk9CUJJVDcsCisJT0RNX1JGX1RYX0EJPQlCSVQoMCksCisJT0RNX1JGX1RYX0IJPQlCSVQoMSksCisJT0RNX1JGX1RYX0MJPQlCSVQoMiksCisJT0RNX1JGX1RYX0QJPQlCSVQoMyksCisJT0RNX1JGX1JYX0EJPQlCSVQoNCksCisJT0RNX1JGX1JYX0IJPQlCSVQoNSksCisJT0RNX1JGX1JYX0MJPQlCSVQoNiksCisJT0RNX1JGX1JYX0QJPQlCSVQoNyksCiB9OwogCiAKQEAgLTUzNiwzMyArNDc5LDMzIEBACiAKIC8qICBPRE1fQ01OSU5GT19PUF9NT0RFICovCiBlbnVtIG9kbV9vcGVyYXRpb25fbW9kZSB7Ci0JT0RNX05PX0xJTksJCT0gQklUMCwKLQlPRE1fTElOSwkJPSBCSVQxLAotCU9ETV9TQ0FOCQk9IEJJVDIsCi0JT0RNX1BPV0VSU0FWRQkJPSBCSVQzLAotCU9ETV9BUF9NT0RFCQk9IEJJVDQsCi0JT0RNX0NMSUVOVF9NT0RFCQk9IEJJVDUsCi0JT0RNX0FEX0hPQwkJPSBCSVQ2LAotCU9ETV9XSUZJX0RJUkVDVAkJPSBCSVQ3LAotCU9ETV9XSUZJX0RJU1BMQVkJPSBCSVQ4LAorCU9ETV9OT19MSU5LCQk9IEJJVCgwKSwKKwlPRE1fTElOSwkJPSBCSVQoMSksCisJT0RNX1NDQU4JCT0gQklUKDIpLAorCU9ETV9QT1dFUlNBVkUJCT0gQklUKDMpLAorCU9ETV9BUF9NT0RFCQk9IEJJVCg0KSwKKwlPRE1fQ0xJRU5UX01PREUJCT0gQklUKDUpLAorCU9ETV9BRF9IT0MJCT0gQklUKDYpLAorCU9ETV9XSUZJX0RJUkVDVAkJPSBCSVQoNyksCisJT0RNX1dJRklfRElTUExBWQk9IEJJVCg4KSwKIH07CiAKIC8qICBPRE1fQ01OSU5GT19XTV9NT0RFICovCiBlbnVtIG9kbV93aXJlbGVzc19tb2RlIHsKIAlPRE1fV01fVU5LTk9XCQk9IDB4MCwKLQlPRE1fV01fQgkJPSBCSVQwLAotCU9ETV9XTV9HCQk9IEJJVDEsCi0JT0RNX1dNX0EJCT0gQklUMiwKLQlPRE1fV01fTjI0RwkJPSBCSVQzLAotCU9ETV9XTV9ONUcJCT0gQklUNCwKLQlPRE1fV01fQVVUTwkJPSBCSVQ1LAotCU9ETV9XTV9BQwkJPSBCSVQ2LAorCU9ETV9XTV9CCQk9IEJJVCgwKSwKKwlPRE1fV01fRwkJPSBCSVQoMSksCisJT0RNX1dNX0EJCT0gQklUKDIpLAorCU9ETV9XTV9OMjRHCQk9IEJJVCgzKSwKKwlPRE1fV01fTjVHCQk9IEJJVCg0KSwKKwlPRE1fV01fQVVUTwkJPSBCSVQoNSksCisJT0RNX1dNX0FDCQk9IEJJVCg2KSwKIH07CiAKIC8qICBPRE1fQ01OSU5GT19CQU5EICovCiBlbnVtIG9kbV9iYW5kX3R5cGUgewotCU9ETV9CQU5EXzJfNEcJCT0gQklUMCwKLQlPRE1fQkFORF81RwkJPSBCSVQxLAorCU9ETV9CQU5EXzJfNEcJCT0gQklUKDApLAorCU9ETV9CQU5EXzVHCQk9IEJJVCgxKSwKIAogfTsKIApAQCAtNTczLDE4ICs1MTYsNiBAQAogCU9ETV9BQk9WRQkJPSAyCiB9OwogCi0vKiAgT0RNX0NNTklORk9fU0VDX01PREUgKi8KLWVudW0gb2RtX3NlY3VyaXR5IHsKLQlPRE1fU0VDX09QRU4JCT0gMCwKLQlPRE1fU0VDX1dFUDQwCQk9IDEsCi0JT0RNX1NFQ19US0lQCQk9IDIsCi0JT0RNX1NFQ19SRVNFUlZFCQk9IDMsCi0JT0RNX1NFQ19BRVNDQ01QCQk9IDQsCi0JT0RNX1NFQ19XRVAxMDQJCT0gNSwKLQlPRE1fV0VQX1dQQV9NSVhFRAk9IDYsIC8qICBXRVAgKyBXUEEgKi8KLQlPRE1fU0VDX1NNUzQJCT0gNywKLX07Ci0KIC8qICBPRE1fQ01OSU5GT19CVyAqLwogZW51bSBvZG1fYmFuZF93aWR0aCB7CiAJT0RNX0JXMjBNCQk9IDAsCkBAIC02MTMsMzggKzU0NCw2IEBACiAJT0RNX0NDQV8xUl9CCQkJPSAyLAogfTsKIAotc3RydWN0IG9kbV9yYV9pbmZvIHsKLQl1OCBSYXRlSUQ7Ci0JdTMyIFJhdGVNYXNrOwotCXUzMiBSQVVzZVJhdGU7Ci0JdTggUmF0ZVNHSTsKLQl1OCBSc3NpU3RhUkE7Ci0JdTggUHJlUnNzaVN0YVJBOwotCXU4IFNHSUVuYWJsZTsKLQl1OCBEZWNpc2lvblJhdGU7Ci0JdTggUHJlUmF0ZTsKLQl1OCBIaWdoZXN0UmF0ZTsKLQl1OCBMb3dlc3RSYXRlOwotCXUzMiBOc2NVcDsKLQl1MzIgTnNjRG93bjsKLQl1MTYgUlRZWzVdOwotCXUzMiBUT1RBTDsKLQl1MTYgRFJPUDsKLQl1OCBBY3RpdmU7Ci0JdTE2IFJwdFRpbWU7Ci0JdTggUkFXYWl0aW5nQ291bnRlcjsKLQl1OCBSQVBlbmRpbmdDb3VudGVyOwotCXU4IFBUQWN0aXZlOyAgLyogIG9uIG9yIG9mZiAqLwotCXU4IFBUVHJ5U3RhdGU7ICAvKiAgMCB0cnlpbmcgc3RhdGUsIDEgZm9yIGRlY2lzaW9uIHN0YXRlICovCi0JdTggUFRTdGFnZTsgIC8qICAwfjYgKi8KLQl1OCBQVFN0b3BDb3VudDsgLyogU3RvcCBQVCBjb3VudGVyICovCi0JdTggUFRQcmVSYXRlOyAgLyogIGlmIHJhdGUgY2hhbmdlIGRvIFBUICovCi0JdTggUFRQcmVSc3NpOyAvKiAgaWYgUlNTSSBjaGFuZ2UgNSUgZG8gUFQgKi8KLQl1OCBQVE1vZGVTUzsgIC8qICBkZWNpZGUgd2hpdGNoIHJhdGUgc2hvdWxkIGRvIFBUICovCi0JdTggUkFzdGFnZTsgIC8qICBTdGFnZVJBLCBkZWNpZGUgaG93IG1hbnkgdGltZXMgUkEgd2lsbCBiZSBkb25lIGJldHdlZW4gUFQgKi8KLQl1OCBQVFNtb290aEZhY3RvcjsKLX07Ci0KIHN0cnVjdCBpcWtfbWF0cml4X3JlZ3Nfc2V0IHsKIAlib29sCWJJUUtEb25lOwogCXMzMglWYWx1ZVsxXVtJUUtfTWF0cml4X1JFR19OVU1dOwpAQCAtNzYyLDE2ICs2NjEsMTAgQEAKIAogLyogIDIwMTEvMDkvMjIgTUggQ29weSBmcm9tIFNENCBkZWZpbmVkIHN0cnVjdHVyZS4gV2UgdXNlIHRvIHN1cHBvcnQgUEhZIERNIGludGVncmF0aW9uLiAqLwogc3RydWN0IGRtX29kbV90IHsKLQkvKiBzdHJ1Y3QgdGltZXJfbGlzdCBGYXN0QW50VHJhaW5pbmdUaW1lcjsgKi8KIAkvKiAgKi8KIAkvKglBZGQgZm9yIGRpZmZlcmVudCB0ZWFtIHVzZSB0ZW1wb3JhcmlseSAqLwogCS8qICAqLwogCXN0cnVjdCBydHdfYWRhcHRlcgkqQWRhcHRlcjsJCS8qICBGb3IgQ0UvTklDIHRlYW0gKi8KLQlzdHJ1Y3QgcnRsODcyM2FfcHJpdgkqcHJpdjsJCQkvKiAgRm9yIEFQL0FEU0wgdGVhbSAqLwotCS8qICBXSGVuIHlvdSB1c2UgQWRhcHRlciBvciBwcml2IHBvaW50ZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9pbnRlciBpcyByZWFkeS4gKi8KLQlib29sCQkJb2RtX3JlYWR5OwotCi0Jc3RydWN0IHJ0bDg3MjNhX3ByaXYgZmFrZV9wcml2OwogCiAJdTY0CQkJRGVidWdDb21wb25lbnRzOwogCXUzMgkJCURlYnVnTGV2ZWw7CkBAIC04OTEsNyArNzg0LDYgQEAKIAkvKiBQSFlfSU5GT184OEUJCVBoeUluZm87ICovCiAKIAkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwotCXN0cnVjdCBvZG1fbWFjX2luZm8JCSpwTWFjSW5mbzsKIAkvKiBNQUNfSU5GT184OEUJCU1hY0luZm87ICovCiAKIAkvKiAgRGlmZmVyZW50IFRlYW0gaW5kZXBlbmR0IHN0cnVjdHVyZT8/ICovCkBAIC05MjgsNyArODIwLDYgQEAKIAogCS8qIFBTRCAqLwogCWJvb2wJCQliVXNlckFzc2lnbkxldmVsOwotCXN0cnVjdCB0aW1lcl9saXN0CVBTRFRpbWVyOwogCXU4CQkJUlNTSV9CVDsJCQkvKiBjb21lIGZyb20gQlQgKi8KIAlib29sCQkJYlBTRGluUHJvY2VzczsKIAlib29sCQkJYkRNSW5pdGlhbEdhaW5FbmFibGU7CkBAIC05NTUsMTQgKzg0Niw2IEBACiAJLyogICovCiAJLyogIE9ETSBzeXN0ZW0gcmVzb3VyY2UuICovCiAJLyogICovCi0KLQkvKiAgT0RNIHJlbGF0aXZlIHRpbWUuICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgUGF0aERpdlN3aXRjaFRpbWVyOwotCS8qIDIwMTEuMDkuMjcgYWRkIGZvciBQYXRoIERpdmVyc2l0eSAqLwotCXN0cnVjdCB0aW1lcl9saXN0IENDS1BhdGhEaXZlcnNpdHlUaW1lcjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBGYXN0QW50VHJhaW5pbmdUaW1lcjsKLQotCS8qICBPRE0gcmVsYXRpdmUgd29ya2l0ZW0uICovCiB9OwkvKiAgRE1fRHluYW1pY19NZWNoYW5pc21fU3RydWN0dXJlICovCiAKIGVudW0gb2RtX3JmX2NvbnRlbnQgewpAQCAtMTE2Myw3ICsxMDQ2LDcgQEAKIAogI2RlZmluZSBkbV9TV0FXX1JTU0lfQ2hlY2sJT0RNX1N3QW50RGl2Q2hrUGVyUGt0UnNzaQogdm9pZCBPRE1fU3dBbnREaXZDaGtQZXJQa3RSc3NpKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggU3RhdGlvbklELAotCQkJICAgICAgIHN0cnVjdCBvZG1fcGh5X2luZm8gKnBQaHlJbmZvKTsKKwkJCSAgICAgICBzdHJ1Y3QgcGh5X2luZm8gKnBQaHlJbmZvKTsKIAogdTMyIENvbnZlcnRUb19kQjIzYSh1MzIgVmFsdWUpOwogCkBAIC0xMTg2LDEyICsxMDY5LDYgQEAKIAogdm9pZCBPRE1fQ21uSW5mb1VwZGF0ZTIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBDbW5JbmZvLCB1NjQgVmFsdWUpOwogCi12b2lkIE9ETV9Jbml0QWxsVGltZXJzKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Ci0KLXZvaWQgT0RNX0NhbmNlbEFsbFRpbWVycyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwotCi12b2lkIE9ETV9SZWxlYXNlQWxsVGltZXJzKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Ci0KIHZvaWQgT0RNX1Jlc2V0SVFLUmVzdWx0KHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7CiAKIHZvaWQgT0RNX0FudHNlbFN0YXRpc3RpY3NfODhDKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggTWFjSWQsIHUzMiBQV0RCQWxsLCBib29sIGlzQ0NLcmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX0hXQ29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX0hXQ29uZmlnLmgKaW5kZXggMTQ3ODU1Yy4uNmI5OGUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV9IV0NvbmZpZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fSFdDb25maWcuaApAQCAtMTQ3LDcgKzE0Nyw3IEBACiB2b2lkCiBPRE1fUGh5U3RhdHVzUXVlcnkyM2EoCiAJc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAotCXN0cnVjdCBvZG1fcGh5X2luZm8gKnBQaHlJbmZvLAorCXN0cnVjdCBwaHlfaW5mbyAqcFBoeUluZm8sCiAJdTggKgkJCQkJCXBQaHlTdGF0dXMsCiAJc3RydWN0IG9kbV9wYWNrZXRfaW5mbyAqcFBrdGluZm8KIAkpOwpAQCAtMTYwLDE1ICsxNjAsMTMgQEAKIAlib29sIGJQYWNrZXRCZWFjb24KICk7CiAKLWVudW0gaGFsX3N0YXR1cyBPRE1fQ29uZmlnUkZXaXRoSGVhZGVyRmlsZTIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JZW51bSBSRl9SQURJT19QQVRICUNvbnRlbnQsCi0JZW51bSBSRl9SQURJT19QQVRICWVSRlBhdGgKLSk7CitpbnQgT0RNX0NvbmZpZ1JGV2l0aEhlYWRlckZpbGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAorCQkJCSAgZW51bSBSRl9SQURJT19QQVRIIENvbnRlbnQsCisJCQkJICBlbnVtIFJGX1JBRElPX1BBVEggZVJGUGF0aCk7CiAKLWVudW0gaGFsX3N0YXR1cyBPRE1fQ29uZmlnQkJXaXRoSGVhZGVyRmlsZTIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sCi0JZW51bSBvZG1fYmJfY29uZmlnX3R5cGUJCUNvbmZpZ1R5cGUKLSk7CitpbnQgT0RNX0NvbmZpZ0JCV2l0aEhlYWRlckZpbGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAorCQkJCSAgZW51bSBvZG1fYmJfY29uZmlnX3R5cGUgQ29uZmlnVHlwZSk7CiAKLWVudW0gaGFsX3N0YXR1cyBPRE1fQ29uZmlnTUFDV2l0aEhlYWRlckZpbGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKK2ludCBPRE1fQ29uZmlnTUFDV2l0aEhlYWRlckZpbGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX2RlYnVnLmgKaW5kZXggNWJjNTFkMC4uNGQ5MzVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fZGVidWcuaApAQCAtNjUsMzAgKzY1LDMwIEBACiAvKiAgKi8KIC8qICAqLwogLyogQkIgRnVuY3Rpb25zICovCi0jZGVmaW5lIE9ETV9DT01QX0RJRwkJCQlCSVQwCi0jZGVmaW5lIE9ETV9DT01QX1JBX01BU0sJCQlCSVQxCi0jZGVmaW5lIE9ETV9DT01QX0RZTkFNSUNfVFhQV1IJCQlCSVQyCi0jZGVmaW5lIE9ETV9DT01QX0ZBX0NOVAkJCQlCSVQzCi0jZGVmaW5lIE9ETV9DT01QX1JTU0lfTU9OSVRPUgkJCUJJVDQKLSNkZWZpbmUgT0RNX0NPTVBfQ0NLX1BECQkJCUJJVDUKLSNkZWZpbmUgT0RNX0NPTVBfQU5UX0RJVgkJCUJJVDYKLSNkZWZpbmUgT0RNX0NPTVBfUFdSX1NBVkUJCQlCSVQ3Ci0jZGVmaW5lIE9ETV9DT01QX1BXUl9UUkFJTgkJCUJJVDgKLSNkZWZpbmUgT0RNX0NPTVBfUkFURV9BREFQVElWRQkJCUJJVDkKLSNkZWZpbmUgT0RNX0NPTVBfUEFUSF9ESVYJCQlCSVQxMAotI2RlZmluZSBPRE1fQ09NUF9QU0QJCQkJQklUMTEKLSNkZWZpbmUgT0RNX0NPTVBfRFlOQU1JQ19QUklDQ0EJCQlCSVQxMgotI2RlZmluZSBPRE1fQ09NUF9SWEhQCQkJCUJJVDEzCisjZGVmaW5lIE9ETV9DT01QX0RJRwkJCQlCSVQoMCkKKyNkZWZpbmUgT0RNX0NPTVBfUkFfTUFTSwkJCUJJVCgxKQorI2RlZmluZSBPRE1fQ09NUF9EWU5BTUlDX1RYUFdSCQkJQklUKDIpCisjZGVmaW5lIE9ETV9DT01QX0ZBX0NOVAkJCQlCSVQoMykKKyNkZWZpbmUgT0RNX0NPTVBfUlNTSV9NT05JVE9SCQkJQklUKDQpCisjZGVmaW5lIE9ETV9DT01QX0NDS19QRAkJCQlCSVQoNSkKKyNkZWZpbmUgT0RNX0NPTVBfQU5UX0RJVgkJCUJJVCg2KQorI2RlZmluZSBPRE1fQ09NUF9QV1JfU0FWRQkJCUJJVCg3KQorI2RlZmluZSBPRE1fQ09NUF9QV1JfVFJBSU4JCQlCSVQoOCkKKyNkZWZpbmUgT0RNX0NPTVBfUkFURV9BREFQVElWRQkJCUJJVCg5KQorI2RlZmluZSBPRE1fQ09NUF9QQVRIX0RJVgkJCUJJVCgxMCkKKyNkZWZpbmUgT0RNX0NPTVBfUFNECQkJCUJJVCgxMSkKKyNkZWZpbmUgT0RNX0NPTVBfRFlOQU1JQ19QUklDQ0EJCQlCSVQoMTIpCisjZGVmaW5lIE9ETV9DT01QX1JYSFAJCQkJQklUKDEzKQogLyogTUFDIEZ1bmN0aW9ucyAqLwotI2RlZmluZSBPRE1fQ09NUF9FRENBX1RVUkJPCQkJQklUMTYKLSNkZWZpbmUgT0RNX0NPTVBfRUFSTFlfTU9ERQkJCUJJVDE3CisjZGVmaW5lIE9ETV9DT01QX0VEQ0FfVFVSQk8JCQlCSVQoMTYpCisjZGVmaW5lIE9ETV9DT01QX0VBUkxZX01PREUJCQlCSVQoMTcpCiAvKiBSRiBGdW5jdGlvbnMgKi8KLSNkZWZpbmUgT0RNX0NPTVBfVFhfUFdSX1RSQUNLCQkJQklUMjQKLSNkZWZpbmUgT0RNX0NPTVBfUlhfR0FJTl9UUkFDSwkJCUJJVDI1Ci0jZGVmaW5lIE9ETV9DT01QX0NBTElCUkFUSU9OCQkJQklUMjYKKyNkZWZpbmUgT0RNX0NPTVBfVFhfUFdSX1RSQUNLCQkJQklUKDI0KQorI2RlZmluZSBPRE1fQ09NUF9SWF9HQUlOX1RSQUNLCQkJQklUKDI1KQorI2RlZmluZSBPRE1fQ09NUF9DQUxJQlJBVElPTgkJCUJJVCgyNikKIC8qIENvbW1vbiBGdW5jdGlvbnMgKi8KLSNkZWZpbmUgT0RNX0NPTVBfQ09NTU9OCQkJCUJJVDMwCi0jZGVmaW5lIE9ETV9DT01QX0lOSVQJCQkJQklUMzEKKyNkZWZpbmUgT0RNX0NPTVBfQ09NTU9OCQkJCUJJVCgzMCkKKyNkZWZpbmUgT0RNX0NPTVBfSU5JVAkJCQlCSVQoMzEpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRXhwb3J0IE1hY3JvIERlZmluaXRpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCSNkZWZpbmUgRGJnUHJpbnQJcHJpbnRrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX2ludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV9pbnRlcmZhY2UuaAppbmRleCBmMjE2YjU4Li5jMjYwZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX2ludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1faW50ZXJmYWNlLmgKQEAgLTE4LDIyICsxOCw2IEBACiAjZGVmaW5lIF9fT0RNX0lOVEVSRkFDRV9IX18KIAogCi0KLS8qICAqLwotLyogID09PT09PT09PT09IENvbnN0YW50L1N0cnVjdHVyZS9FbnVtLy4uLiBEZWZpbmUgKi8KLS8qICAqLwotCi0KLQotLyogICovCi0vKiAgPT09PT09PT09PT0gTWFjcm8gRGVmaW5lICovCi0vKiAgKi8KLQotI2RlZmluZSBfcmVnX2FsbChfbmFtZSkJCQlPRE1fIyNfbmFtZQotI2RlZmluZSBfcmVnX2ljKF9uYW1lLCBfaWMpCQlPRE1fIyNfbmFtZSMjX2ljCi0jZGVmaW5lIF9iaXRfYWxsKF9uYW1lKQkJCUJJVF8jI19uYW1lCi0jZGVmaW5lIF9iaXRfaWMoX25hbWUsIF9pYykJCUJJVF8jI19uYW1lIyNfaWMKLQogLyogIF9jYXQ6IGltcGxlbWVudGVkIGJ5IFRva2VuLVBhc3RpbmcgT3BlcmF0b3IuICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTY4LDY0ICs1MiwyMyBAQAogdHlwZWRlZiB2b2lkICgqUlRfV09SS0lURU1fQ0FMTF9CQUNLKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnBDb250ZXh0KTsKIAogLyogICovCi0vKiAgPT09PT09PT09PT0gRXh0ZXJuIFZhcmlhYmxlID8/PyBJdCBzaG91bGQgYmUgZm9yYmlkZGVuLiAqLwotLyogICovCi0KLQotLyogICovCiAvKiAgPT09PT09PT09PT0gRVh0ZXJuIEZ1bmN0aW9uIFByb3RvdHlwZSAqLwogLyogICovCiAKIAogdTggT0RNX1JlYWQxQnl0ZShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBSZWdBZGRyKTsKLQogdTE2IE9ETV9SZWFkMkJ5dGUoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1MzIgUmVnQWRkcik7Ci0KIHUzMiBPRE1fUmVhZDRCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIpOwotCiB2b2lkIE9ETV9Xcml0ZTFCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIsIHU4IERhdGEpOwotCiB2b2lkIE9ETV9Xcml0ZTJCeXRlKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIsIHUxNiBEYXRhKTsKLQogdm9pZCBPRE1fV3JpdGU0Qnl0ZShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBSZWdBZGRyLCB1MzIgRGF0YSk7Ci0KIHZvaWQgT0RNX1NldE1BQ1JlZyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaywgdTMyIERhdGEpOwotCiB1MzIgT0RNX0dldE1BQ1JlZyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzayk7Ci0KIHZvaWQgT0RNX1NldEJCUmVnKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrLCB1MzIgRGF0YSk7Ci0KIHUzMiBPRE1fR2V0QkJSZWcoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2spOwotCiB2b2lkIE9ETV9TZXRSRlJlZyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIGVudW0gUkZfUkFESU9fUEFUSCBlUkZQYXRoLAogCQkgIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaywgdTMyIERhdGEpOwotCiB1MzIgT0RNX0dldFJGUmVnKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgZW51bSBSRl9SQURJT19QQVRIIGVSRlBhdGgsCiAJCSB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2spOwogCi0vKiAgTWVtb3J5IFJlbGF0aXZlIEZ1bmN0aW9uLiAqLwotdm9pZCBPRE1fQWxsb2NhdGVNZW1vcnkoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB2b2lkICoqcFB0ciwgdTMyIGxlbmd0aCk7Ci12b2lkIE9ETV9GcmVlTWVtb3J5KHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdm9pZCAqcFB0ciwgdTMyIGxlbmd0aCk7Ci0KLXMzMiBPRE1fQ29tcGFyZU1lbW9yeShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHZvaWQgKnBCdWYxLCB2b2lkICpwQnVmMiwgdTMyIGxlbmd0aCk7Ci0KLS8qICBPRE0gTUlTQy1zcGluIGxvY2sgcmVsYXRpdmUgQVBJLiAqLwotdm9pZCBPRE1fQWNxdWlyZVNwaW5Mb2NrKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgZW51bSBydF9zcGlubG9ja190eXBlIHR5cGUpOwotCi12b2lkIE9ETV9SZWxlYXNlU3BpbkxvY2soc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBlbnVtIHJ0X3NwaW5sb2NrX3R5cGUgdHlwZSk7Ci0KLS8qICBPRE0gTUlTQy13b3JraXRlbSByZWxhdGl2ZSBBUEkuICovCi12b2lkIE9ETV9Jbml0aWFsaXplV29ya0l0ZW0oc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB2b2lkICpwUnRXb3JrSXRlbSwKLQkJCSAgICBSVF9XT1JLSVRFTV9DQUxMX0JBQ0sgUnRXb3JrSXRlbUNhbGxiYWNrLCB2b2lkICpwQ29udGV4dCwgY29uc3QgY2hhciAqc3pJRCk7Ci0KLS8qICBPRE0gVGltZXIgcmVsYXRpdmUgQVBJLiAqLwotdm9pZCBPRE1fU2V0VGltZXIoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBzdHJ1Y3QgdGltZXJfbGlzdCAqcFRpbWVyLCB1MzIgbXNEZWxheSk7Ci0KLXZvaWQgT0RNX1JlbGVhc2VUaW1lcihzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIpOwotCi0vKiAgT0RNIEZXIHJlbGF0aXZlIEFQSS4gKi8KLXUzMiBPRE1fRmlsbEgyQ0NtZCh1OCAqcEgyQ0J1ZmZlciwgdTMyIEgyQ0J1ZmZlckxlbiwgdTMyIENtZE51bSwKLQkJICAgdTMyICpwRWxlbWVudElELCB1MzIgKnBDbWRMZW4sIHU4ICoqcENtYkJ1ZmZlciwKLQkJICAgdTggKkNtZFN0YXJ0U2VxKTsKLQogI2VuZGlmCS8qICBfX09ETV9JTlRFUkZBQ0VfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb2RtX3ByZWNvbXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fcHJlY29tcC5oCmluZGV4IGYzZmMyZmEuLjY5ZGU4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fcHJlY29tcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fcHJlY29tcC5oCkBAIC0xNiwxMCArMTYsNiBAQAogI2lmbmRlZglfX09ETV9QUkVDT01QX0hfXwogI2RlZmluZSBfX09ETV9QUkVDT01QX0hfXwogCi0jaW5jbHVkZSAib2RtX3R5cGVzLmgiCi0KLSNkZWZpbmUJCVRFU1RfRkFMR19fXwkJMQotCiAvKiAyIENvbmZpZyBGbGFncyBhbmQgU3RydWN0cyAtIGRlZmluZWQgYnkgZWFjaCBPRE0gVHlwZSAqLwogCiAjaW5jbHVkZSA8b3NkZXBfc2VydmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fcmVnLmgKaW5kZXggNTYxOTFlOS4uYzE4NDMzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fcmVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV9yZWcuaApAQCAtMTAyLDEzICsxMDIsMTAgQEAKICNkZWZpbmUJUEFUSERJVl9SRUcJCQkJCTB4QjMwCiAjZGVmaW5lCVBBVEhESVZfVFJJCQkJCQkweEJBMAogCi0KIC8qICAqLwogLyogIEJpdG1hcCBEZWZpbml0aW9uICovCiAvKiAgKi8KIAotI2RlZmluZQlCSVRfRkFfUkVTRVQJCQkJCUJJVDAKLQotCisjZGVmaW5lCUJJVF9GQV9SRVNFVAkJCQkJQklUKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV90eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29kbV90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODY2NzY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vZG1fdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfX09ETV9UWVBFU19IX18KLSNkZWZpbmUgX19PRE1fVFlQRVNfSF9fCi0KLS8qICBEZWZpbmUgRGlmZmVyZW50IFNXIHRlYW0gc3VwcG9ydCAqLwotCi1lbnVtIGhhbF9zdGF0dXMgewotCUhBTF9TVEFUVVNfU1VDQ0VTUywKLQlIQUxfU1RBVFVTX0ZBSUxVUkUsCi19OwotCi1lbnVtIHJ0X3NwaW5sb2NrX3R5cGUgewotCVJUX1RFTVAgPTEsCi19OwotCi0jZGVmaW5lIFNFVF9UWF9ERVNDX0FOVFNFTF9BXzg4RShfX3BUeERlc2MsIF9fVmFsdWUpCQlcCi0JU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wVHhEZXNjKzgsIDI0LCAxLCBfX1ZhbHVlKQotI2RlZmluZSBTRVRfVFhfREVTQ19BTlRTRUxfQl84OEUoX19wVHhEZXNjLCBfX1ZhbHVlKQkJXAotCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcFR4RGVzYys4LCAyNSwgMSwgX19WYWx1ZSkKLSNkZWZpbmUgU0VUX1RYX0RFU0NfQU5UU0VMX0NfODhFKF9fcFR4RGVzYywgX19WYWx1ZSkJCVwKLQlTRVRfQklUU19UT19MRV80QllURShfX3BUeERlc2MrMjgsIDI5LCAxLCBfX1ZhbHVlKQotCi0jZW5kaWYgLyogIF9fT0RNX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29zZGVwX2ludGYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vc2RlcF9pbnRmLmgKaW5kZXggYjYwM2NmNS4uMzNhZmE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29zZGVwX2ludGYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb3NkZXBfaW50Zi5oCkBAIC0yMiwxMiArMjIsMTAgQEAKIGludCBydHdfaHdfc3VzcGVuZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIGludCBydHdfaHdfcmVzdW1lMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCi11OCBydHdfaW5pdF9kcnZfc3cyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci11OCBydHdfZnJlZV9kcnZfc3cyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci11OCBydHdfcmVzZXRfZHJ2X3N3MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworaW50IHJ0d19pbml0X2Rydl9zdzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK2ludCBydHdfZnJlZV9kcnZfc3cyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CitpbnQgcnR3X3Jlc2V0X2Rydl9zdzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAotdTMyIHJ0d19zdGFydF9kcnZfdGhyZWFkczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgcnR3X3N0b3BfZHJ2X3RocmVhZHMyM2EgKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBydHdfY2FuY2VsX2FsbF90aW1lcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAogaW50IHJ0d19pbml0X25ldGRldjIzYV9uYW1lMjNhKHN0cnVjdCBuZXRfZGV2aWNlICpwbmV0ZGV2LCBjb25zdCBjaGFyICppZm5hbWUpOwpAQCAtNDMsNCArNDEsOCBAQAogaW50IHJ0d19kcnZfcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBydHdfbmRldl9kZXN0cnVjdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIAoraW50IHJ0bDg3MjNhdV9pbmlycF9pbml0KHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlcik7CitpbnQgcnRsODcyM2F1X2luaXJwX2RlaW5pdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV91c2JfaW50Zl9zdG9wKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworCiAjZW5kaWYJLyogX09TREVQX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vc2RlcF9zZXJ2aWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvb3NkZXBfc2VydmljZS5oCmluZGV4IDAzOWJjNzIuLmE1ZWJkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9vc2RlcF9zZXJ2aWNlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL29zZGVwX3NlcnZpY2UuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBfU1VDQ0VTUwkxCiAjZGVmaW5lIFJUV19SWF9IQU5ETEVEIDIKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMCw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtNDAsMjYgKzM4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4JLyogIE5lY2Vzc2FyeSBiZWNhdXNlIHdlIHVzZSB0aGUgcHJvYyBmcyAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiAgZm9yIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqLwogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCi0KLS8qCSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4gKi8KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgotCi1zdHJ1Y3QgcnR3X2FkYXB0ZXI7Ci1zdHJ1Y3QgYzJoX2V2dF9oZHI7Ci0KLXR5cGVkZWYgczMyICgqYzJoX2lkX2ZpbHRlcikodTggaWQpOwogCiBzdHJ1Y3QgcnR3X3F1ZXVlIHsKIAlzdHJ1Y3QJbGlzdF9oZWFkCXF1ZXVlOwpAQCAtNzksOSArNjUsNiBAQAogCQluZXRpZl90eF9xdWV1ZV9zdG9wcGVkKG5ldGRldl9nZXRfdHhfcXVldWUocG5ldGRldiwgMykpICk7CiB9CiAKLSNpZm5kZWYgQklUCi0jZGVmaW5lIEJJVCh4KQkoIDEgPDwgKHgpKQotI2VuZGlmCiBzdGF0aWMgaW5saW5lIHUzMiBDSEtCSVQodTMyIHgpCiB7CiAJV0FSTl9PTih4ID49IDMyKTsKQEAgLTkwLDExOCArNzMsMTYgQEAKIAlyZXR1cm4gQklUKHgpOwogfQogCi0jZGVmaW5lIEJJVDAJMHgwMDAwMDAwMQotI2RlZmluZSBCSVQxCTB4MDAwMDAwMDIKLSNkZWZpbmUgQklUMgkweDAwMDAwMDA0Ci0jZGVmaW5lIEJJVDMJMHgwMDAwMDAwOAotI2RlZmluZSBCSVQ0CTB4MDAwMDAwMTAKLSNkZWZpbmUgQklUNQkweDAwMDAwMDIwCi0jZGVmaW5lIEJJVDYJMHgwMDAwMDA0MAotI2RlZmluZSBCSVQ3CTB4MDAwMDAwODAKLSNkZWZpbmUgQklUOAkweDAwMDAwMTAwCi0jZGVmaW5lIEJJVDkJMHgwMDAwMDIwMAotI2RlZmluZSBCSVQxMAkweDAwMDAwNDAwCi0jZGVmaW5lIEJJVDExCTB4MDAwMDA4MDAKLSNkZWZpbmUgQklUMTIJMHgwMDAwMTAwMAotI2RlZmluZSBCSVQxMwkweDAwMDAyMDAwCi0jZGVmaW5lIEJJVDE0CTB4MDAwMDQwMDAKLSNkZWZpbmUgQklUMTUJMHgwMDAwODAwMAotI2RlZmluZSBCSVQxNgkweDAwMDEwMDAwCi0jZGVmaW5lIEJJVDE3CTB4MDAwMjAwMDAKLSNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAotI2RlZmluZSBCSVQxOQkweDAwMDgwMDAwCi0jZGVmaW5lIEJJVDIwCTB4MDAxMDAwMDAKLSNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAotI2RlZmluZSBCSVQyMgkweDAwNDAwMDAwCi0jZGVmaW5lIEJJVDIzCTB4MDA4MDAwMDAKLSNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAotI2RlZmluZSBCSVQyNQkweDAyMDAwMDAwCi0jZGVmaW5lIEJJVDI2CTB4MDQwMDAwMDAKLSNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAotI2RlZmluZSBCSVQyOAkweDEwMDAwMDAwCi0jZGVmaW5lIEJJVDI5CTB4MjAwMDAwMDAKLSNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAotI2RlZmluZSBCSVQzMQkweDgwMDAwMDAwCi0jZGVmaW5lIEJJVDMyCTB4MDEwMDAwMDAwMAotI2RlZmluZSBCSVQzMwkweDAyMDAwMDAwMDAKLSNkZWZpbmUgQklUMzQJMHgwNDAwMDAwMDAwCi0jZGVmaW5lIEJJVDM1CTB4MDgwMDAwMDAwMAotI2RlZmluZSBCSVQzNgkweDEwMDAwMDAwMDAKLQotaW50IFJUV19TVEFUVVNfQ09ERTIzYShpbnQgZXJyb3JfY29kZSk7Ci0KLXU4KglfcnR3X3ZtYWxsb2ModTMyIHN6KTsKLXU4KglfcnR3X3p2bWFsbG9jKHUzMiBzeik7Ci12b2lkCV9ydHdfdm1mcmVlKHU4ICpwYnVmLCB1MzIgc3opOwotI2RlZmluZSBydHdfdm1hbGxvYyhzeikJCQlfcnR3X3ZtYWxsb2MoKHN6KSkKLSNkZWZpbmUgcnR3X3p2bWFsbG9jKHN6KQkJCV9ydHdfenZtYWxsb2MoKHN6KSkKLSNkZWZpbmUgcnR3X3ZtZnJlZShwYnVmLCBzeikJCV9ydHdfdm1mcmVlKChwYnVmKSwgKHN6KSkKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgUkVBTFRFS185NkJfSUUyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIE1DU19yYXRlXzJSMjNBWzE2XTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIFJUV19XUEFfT1VJMjNBW107Ci1leHRlcm4gdW5zaWduZWQgY2hhciBXUEFfVEtJUF9DSVBIRVIyM0FbNF07Ci1leHRlcm4gdW5zaWduZWQgY2hhciBSU05fVEtJUF9DSVBIRVIyM0FbNF07CiAKIGV4dGVybiB1bnNpZ25lZCBjaGFyCU1DU19yYXRlXzJSMjNBWzE2XTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyCU1DU19yYXRlXzFSMjNBWzE2XTsKIAogdm9pZAlfcnR3X2luaXRfcXVldWUyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqcHF1ZXVlKTsKLXUzMglfcnR3X3F1ZXVlX2VtcHR5MjNhKHN0cnVjdCBydHdfcXVldWUgKnBxdWV1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGJpdHNoaWZ0KHUzMiBiaXRtYXNrKQotewotCXUzMiBpOwotCi0JZm9yIChpID0gMDsgaSA8PSAzMTsgaSsrKQotCQlpZiAoKChiaXRtYXNrPj5pKSAmICAweDEpID09IDEpIGJyZWFrOwotCi0JcmV0dXJuIGk7Ci19Ci0KLXZvaWQgcnR3X3N1c3BlbmRfbG9ja19pbml0KHZvaWQpOwotdm9pZCBydHdfc3VzcGVuZF9sb2NrX3VuaW5pdCh2b2lkKTsKLXZvaWQgcnR3X2xvY2tfc3VzcGVuZCh2b2lkKTsKLXZvaWQgcnR3X3VubG9ja19zdXNwZW5kKHZvaWQpOwotCi0KLSNkZWZpbmUgTkRFVl9GTVQgIiVzIgotI2RlZmluZSBOREVWX0FSRyhuZGV2KSBuZGV2LT5uYW1lCi0jZGVmaW5lIEFEUFRfRk1UICIlcyIKLSNkZWZpbmUgQURQVF9BUkcoYWRhcHRlcikgYWRhcHRlci0+cG5ldGRldi0+bmFtZQotI2RlZmluZSBGVU5DX05ERVZfRk1UICIlcyglcykiCi0jZGVmaW5lIEZVTkNfTkRFVl9BUkcobmRldikgX19mdW5jX18sIG5kZXYtPm5hbWUKLSNkZWZpbmUgRlVOQ19BRFBUX0ZNVCAiJXMoJXMpIgotI2RlZmluZSBGVU5DX0FEUFRfQVJHKGFkYXB0ZXIpIF9fZnVuY19fLCBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lCi0KLSNkZWZpbmUgcnR3X3NpZ25hbF9wcm9jZXNzKHBpZCwgc2lnKSBraWxsX3BpZChmaW5kX3ZwaWQoKHBpZCkpLChzaWcpLCAxKQotCi11NjQgcnR3X21vZHVsYXI2NDIzYSh1NjQgeCwgdTY0IHkpOwotdTY0IHJ0d19kaXZpc2lvbjY0MjNhKHU2NCB4LCB1NjQgeSk7Ci0KIAogLyogTWFjcm9zIGZvciBoYW5kbGluZyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzICovCiAKICNkZWZpbmUgUlRXX0dFVF9CRTI0KGEpICgoKCh1MzIpIChhKVswXSkgPDwgMTYpIHwgKCgodTMyKSAoYSlbMV0pIDw8IDgpIHwgXAogCQkJICgodTMyKSAoYSlbMl0pKQogCi0KLXN0cnVjdCBydHdfY2J1ZiB7Ci0JdTMyIHdyaXRlOwotCXUzMiByZWFkOwotCXUzMiBzaXplOwotCXZvaWQgKmJ1ZnNbMF07Ci19OwotCi1ib29sIHJ0d19jYnVmX2Z1bGwyM2Eoc3RydWN0IHJ0d19jYnVmICpjYnVmKTsKLWJvb2wgcnR3X2NidWZfZW1wdHkyM2Eoc3RydWN0IHJ0d19jYnVmICpjYnVmKTsKLWJvb2wgcnR3X2NidWZfcHVzaDIzYShzdHJ1Y3QgcnR3X2NidWYgKmNidWYsIHZvaWQgKmJ1Zik7Ci12b2lkICpydHdfY2J1Zl9wb3AyM2Eoc3RydWN0IHJ0d19jYnVmICpjYnVmKTsKLXN0cnVjdCBydHdfY2J1ZiAqcnR3X2NidWZfYWxsb2MyM2EodTMyIHNpemUpOwotdm9pZCBydHdfY2J1Zl9mcmVlKHN0cnVjdCBydHdfY2J1ZiAqY2J1Zik7Ci1pbnQgcnR3X2NoYW5nZV9pZm5hbWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgY2hhciAqaWZuYW1lKTsKLXMzMiBjMmhfZXZ0X2hkbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBjMmhfZXZ0X2hkciAqYzJoX2V2dCwgYzJoX2lkX2ZpbHRlciBmaWx0ZXIpOwotdm9pZCBpbmRpY2F0ZV93eF9zY2FuX2NvbXBsZXRlX2V2ZW50KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdTggcnR3X2RvX2pvaW4yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3JlY3Zfb3NkZXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9yZWN2X29zZGVwLmgKaW5kZXggMTVjOTRiNi4uYzJkM2YxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3JlY3Zfb3NkZXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcmVjdl9vc2RlcC5oCkBAIC0yMywyMiArMjMsMTMgQEAKIAogaW50IHJ0d19yZWN2X2VudHJ5MjNhKHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CiBpbnQgcnR3X3JlY3ZfaW5kaWNhdGVwa3QyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdm9pZCBydHdfcmVjdl9yZXR1cm5wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmNueHQsIHN0cnVjdCBza19idWZmICpwcmV0dXJuZWRwa3QpOwogCi12b2lkIHJ0d19ob3N0YXBkX21sbWVfcngyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKIHZvaWQgcnR3X2hhbmRsZV90a2lwX21pY19lcnIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggYmdyb3VwKTsKIAogaW50CXJ0d19pbml0X3JlY3ZfcHJpdihzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYsIHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBydHdfZnJlZV9yZWN2X3ByaXYgKHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdik7CiAKIGludCBydHdfb3NfcmVjdl9yZXNvdXJjZV9pbml0KHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdiwgc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci1pbnQgcnR3X29zX3JlY3ZfcmVzb3VyY2VfYWxsb2MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUpOwotdm9pZCBydHdfb3NfcmVjdl9yZXNvdXJjZV9mcmVlKHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdik7Ci0KLWludCBydHdfb3NfcmVjdmJ1Zl9yZXNvdXJjZV9hbGxvYzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmKTsKLWludCBydHdfb3NfcmVjdmJ1Zl9yZXNvdXJjZV9mcmVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYpOwotCi12b2lkIHJ0d19vc19yZWFkX3BvcnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfYnVmICpwcmVjdmJ1Zik7CiAKIHZvaWQgcnR3X2luaXRfcmVjdl90aW1lcjIzYShzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfYnQtY29leGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2J0LWNvZXhpc3QuaAppbmRleCA2ZDFlZGM2Li4wNTA2OTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfYnQtY29leGlzdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9idC1jb2V4aXN0LmgKQEAgLTE5LDE5ICsxOSw2IEBACiAjaW5jbHVkZSAib2RtX3ByZWNvbXAuaCIKIAogCi0jZGVmaW5lIF9fQlRfQ19fIDEKLSNkZWZpbmUgX19CVF9IQU5ETEVQQUNLRVRfQ19fIDEKLSNkZWZpbmUgX19CVF9IQ0lfQ19fIDEKLSNkZWZpbmUgX19IQUxCVEM4NzIzMUFOVF9DX18gMQotI2RlZmluZSBfX0hBTEJUQzg3MjMyQU5UX0NfXyAxCi0jZGVmaW5lIF9fSEFMQlRDODcyM19DX18gMQotI2RlZmluZSBfX0hBTEJUQ0NTUjFBTlRfQ19fIDEKLSNkZWZpbmUgX19IQUxCVENDU1IyQU5UX0NfXyAxCi0jZGVmaW5lIF9fSEFMQlRDT0VYSVNUX0NfXyAxCi0jZGVmaW5lIF9fSEFMQlRfQ19fIDEKLQotI2lmZGVmIF9fQlRfQ19fIC8qICBDT01NT04vQlQuaCAqLwotCiAvKiAgSEVBREVSL1BsYXRmb3JtRGVmLmggKi8KIGVudW0gcnRfbWVkaWFfc3RhdHVzIHsKIAlSVF9NRURJQV9ESVNDT05ORUNUCT0gMCwKQEAgLTQ0LDIwICszMSwxMiBAQAogCiB2b2lkIEJUX1NpZ25hbENvbXBlbnNhdGlvbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJICAgdTggKnJzc2lfd2lmaSwgdTggKnJzc2lfYnQpOwotdm9pZCBCVF9XaWZpU2Nhbk5vdGlmeShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBzY2FuVHlwZSk7Ci12b2lkIEJUX1dpZmlBc3NvY2lhdGVOb3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggYWN0aW9uKTsKLXZvaWQgQlRfV2lmaU1lZGlhU3RhdHVzTm90aWZ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgICAgICBlbnVtIHJ0X21lZGlhX3N0YXR1cyBtc3RhdHVzKTsKLXZvaWQgQlRfU3BlY2lhbFBhY2tldE5vdGlmeShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiB2b2lkIEJUX0hhbHRQcm9jZXNzKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHZvaWQgQlRfTHBzTGVhdmUoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwogCiAKICNkZWZpbmUJQlRfSHNDb25uZWN0aW9uRXN0YWJsaXNoZWQoQWRhcHRlcikJCWZhbHNlCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIENPTU1PTi9CVC5oID09PT09ICovCi0jZW5kaWYgLyogIF9fQlRfQ19fICovCi0KLSNpZmRlZiBfX0JUX0hDSV9DX18gLyogIENPTU1PTi9idF9oY2kuaCAqLwogCiAvKiAgSEVBREVSL1NlY3VyaXR5VHlwZS5oICovCiAjZGVmaW5lIFRLSVBfRU5DX0tFWV9QT1MJCTMyCQkvKiBLRUtfTEVOK0tFS19MRU4pICovCkBAIC0xMTA3LDE1ICsxMDg2LDkgQEAKIAlIQ0lfQlRfT1BfTUFYCiB9OwogCi0vKglGdW5jdGlvbiBwcm90byB0eXBlICovCi1zdHJ1Y3QgYnRkYXRhX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCUxpc3Q7Ci0Jdm9pZAkJCSpwRGF0YUJsb2NrOwotfTsKLQogI2RlZmluZSBCVEhDSV9TTV9XSVRIX0lORk8oX0FkYXB0ZXIsIF9TdGF0ZVRvRW50ZXIsIF9TdGF0ZUNtZCwgX0VudHJ5TnVtKQlcCiB7CQkJCQkJCQkJCVwKLQlSVFBSSU5UKEZJT0NUTCwgSU9DVExfU1RBVEUsICgiW0JUIHN0YXRlIGNoYW5nZV0gY2F1c2VkIGJ5ICIiJXMiIiwgbGluZSA9JWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pKTsJCQkJCQkJXAorCVJUUFJJTlQoRklPQ1RMLCBJT0NUTF9TVEFURSwgKCJbQlQgc3RhdGUgY2hhbmdlXSBjYXVzZWQgYnkgIiIlcyIiLCBsaW5lID0lZFxuIiwgX19mdW5jX18sIF9fTElORV9fKSk7CQkJCQkJCVwKIAlCVEhDSV9TdGF0ZU1hY2hpbmUoX0FkYXB0ZXIsIF9TdGF0ZVRvRW50ZXIsIF9TdGF0ZUNtZCwgX0VudHJ5TnVtKTtcCiB9CiAKQEAgLTExMzIsOSArMTEwNSw3IEBACiBlbnVtIGhjaV9zdGF0dXMgQlRIQ0lfSGFuZGxlSENJQ01EKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCBzdHJ1Y3QgcGFja2V0X2lycF9oY2ljbWRfZGF0YSAqcEhjaUNtZCk7CiAKIC8qICA9PT09PSBFbmQgb2Ygc3luYyBmcm9tIFNENyBkcml2ZXIgQ09NTU9OL2J0X2hjaS5oID09PT09ICovCi0jZW5kaWYgLyogIF9fQlRfSENJX0NfXyAqLwogCi0jaWZkZWYgX19IQUxCVEM4NzIzMUFOVF9DX18gLyogIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMzFBbnQuaCAqLwogLyogID09PT09IEJlbG93IHRoaXMgbGluZSBpcyBzeW5jIGZyb20gU0Q3IGRyaXZlciBIQUwvQlRDb2V4aXN0L0hhbEJ0Yzg3MjMxQW50LmggPT09PT0gKi8KICNkZWZpbmUgR0VUX0JUX0lORk8ocGFkYXB0ZXIpCSgmR0VUX0hBTF9EQVRBKHBhZGFwdGVyKS0+QnRJbmZvKQogCkBAIC0xMTkxLDkgKzExNjIsNyBAQAogdm9pZCBCVERNXzFBbnRCdENvZXhpc3Q4NzIzQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiAKIC8qICA9PT09PSBFbmQgb2Ygc3luYyBmcm9tIFNENyBkcml2ZXIgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzMUFudC5oID09PT09ICovCi0jZW5kaWYgLyogIF9fSEFMQlRDODcyMzFBTlRfQ19fICovCiAKLSNpZmRlZiBfX0hBTEJUQzg3MjMyQU5UX0NfXyAvKiAgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzMkFudC5oICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMzJBbnQuaCA9PT09PSAqLwogZW51bSBidF8yYW50X2J0X3N0YXR1cyB7CiAJQlRfMkFOVF9CVF9TVEFUVVNfSURMRQkJCT0gMHgwLApAQCAtMTI3NCw5ICsxMjQzLDcgQEAKIAogdm9pZCBCVERNXzJBbnRCdENvZXhpc3Q4NzIzQShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMzJBbnQuaCA9PT09PSAqLwotI2VuZGlmIC8qICBfX0hBTEJUQzg3MjMyQU5UX0NfXyAqLwogCi0jaWZkZWYgX19IQUxCVEM4NzIzX0NfXyAvKiAgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzLmggKi8KIC8qICA9PT09PSBCZWxvdyB0aGlzIGxpbmUgaXMgc3luYyBmcm9tIFNENyBkcml2ZXIgSEFML0JUQ29leGlzdC9IYWxCdGM4NzIzLmggPT09PT0gKi8KIAogI2RlZmluZQlCVF9RX1BLVF9PRkYJCTAKQEAgLTEzNTIsMTMgKzEzMTksOSBAQAogdm9pZCBCVERNX1NldEZ3RGVjQnRQd3Ioc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4IGJEZWNCdFB3cik7CiB1OCBCVERNX0J0UHJvZmlsZVN1cHBvcnQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwogdm9pZCBCVERNX0xwc0xlYXZlKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKLXU4IEJURE1fMUFudDg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKLSNkZWZpbmUgQlRfMUFudCBCVERNXzFBbnQ4NzIzQQogCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjODcyMy5oID09PT09ICovCi0jZW5kaWYgLyogIF9fSEFMQlRDODcyM19DX18gKi8KIAotI2lmZGVmIF9fSEFMQlRDQ1NSMUFOVF9DX18gLyogIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMUFudC5oICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMUFudC5oID09PT09ICovCiAKIGVudW0gQlRfQTJEUF9JTkRFWHsKQEAgLTEzODEsMTkgKzEzNDQsMTcgQEAKIHZvaWQgQlRETV9DaGVja0JUSWRsZUNoYW5nZTFBbnQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwogCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMUFudC5oID09PT09ICovCi0jZW5kaWYgLyogIF9fSEFMQlRDQ1NSMUFOVF9DX18gKi8KIAotI2lmZGVmIF9fSEFMQlRDQ1NSMkFOVF9DX18gLyogIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMkFudC5oICovCiAvKiAgPT09PT0gQmVsb3cgdGhpcyBsaW5lIGlzIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9CVENvZXhpc3QvSGFsQnRjQ3NyMkFudC5oID09PT09ICovCiAKIC8qICAqLwogLyogIEZvciBvbGQgY29yZSBzdGFjayBiZWZvcmUgdjI1MSAqLwogLyogICovCi0jZGVmaW5lIEJUX1JTU0lfU1RBVEVfTk9STUFMX1BPV0VSCUJJVDAKLSNkZWZpbmUgQlRfUlNTSV9TVEFURV9BTURQVV9PRkYJCUJJVDEKLSNkZWZpbmUgQlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVwlCSVQyCi0jZGVmaW5lIEJUX1JTU0lfU1RBVEVfQkdfRURDQV9MT1cJQklUMwotI2RlZmluZSBCVF9SU1NJX1NUQVRFX1RYUE9XRVJfTE9XCUJJVDQKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9OT1JNQUxfUE9XRVIJQklUKDApCisjZGVmaW5lIEJUX1JTU0lfU1RBVEVfQU1EUFVfT0ZGCQlCSVQoMSkKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVwlCSVQoMikKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9CR19FRENBX0xPVwlCSVQoMykKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9UWFBPV0VSX0xPVwlCSVQoNCkKIAogI2RlZmluZQlCVF9EQUNTV0lOR19PRkYJCQkJMAogI2RlZmluZQlCVF9EQUNTV0lOR19NNAkJCQkxCkBAIC0xNDAzLDkgKzEzNjQsNiBAQAogdm9pZCBCVERNX0RpbWluaXNoV2lGaShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBBZGFwdGVyLCB1OCBiREFDT24sIHU4IGJJbnRlcnJ1cHRPbiwgdTggREFDU3dpbmdMZXZlbCwgdTggYk5BVk9uKTsKIAogLyogID09PT09IEVuZCBvZiBzeW5jIGZyb20gU0Q3IGRyaXZlciBIQUwvQlRDb2V4aXN0L0hhbEJ0Y0NzcjJBbnQuaCA9PT09PSAqLwotI2VuZGlmIC8qICBfX0hBTEJUQ0NTUjJBTlRfQ19fICovCi0KLSNpZmRlZiBfX0hBTEJUQ09FWElTVF9DX18gLyogIEhBTC9CVENvZXhpc3QvSGFsQnRDb2V4aXN0LmggKi8KIAogLyogIEhFQURFUi9UeXBlRGVmLmggKi8KICNkZWZpbmUgTUFYX0ZXX1NVUFBPUlRfTUFDSURfTlVNCQkJNjQKQEAgLTE0NDAsNjEgKzEzOTgsNjEgQEAKICNkZWZpbmUgQlRfRldfQ09FWF9USFJFU0hfNTUJCQkJNTUKICNkZWZpbmUgQlRfRldfQ09FWF9USFJFU0hfNjUJCQkJNjUKIAotI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUMzAJCQkJCUJJVCgwKQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUMzAJCQlCSVQoMCkKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX0hUMjAJCQlCSVQoMSkKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX0hUNDAJCQlCSVQoMikKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX0xFR0FDWQkJCUJJVCgzKQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfTEVHQUNZCQlCSVQoMykKIAogI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfUlNTSV9MT1cJCUJJVCg0KQotI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfUlNTSV9NRURJVU0JQklUKDUpCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfV0lGSV9SU1NJX01FRElVTQkJQklUKDUpCiAjZGVmaW5lIEJUX0NPRVhfU1RBVEVfV0lGSV9SU1NJX0hJR0gJCUJJVCg2KQogI2RlZmluZSBCVF9DT0VYX1NUQVRFX0RFQ19CVF9QT1dFUgkJQklUKDcpCiAKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX0lETEUJCQlCSVQoOCkKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX1VQTElOSwkJCUJJVCg5KQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfVVBMSU5LCQlCSVQoOSkKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX0RPV05MSU5LCQlCSVQoMTApCiAKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9JTlFfUEFHRQlCSVQoMTEpCi0jZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfSURMRQkJCQlCSVQoMTIpCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfSU5RX1BBR0UJCUJJVCgxMSkKKyNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9JRExFCQkJQklUKDEyKQogI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUX1VQTElOSwkJCUJJVCgxMykKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9ET1dOTElOSwkJQklUKDE0KQogLyogICovCiAvKiAgVG9kbzogUmVtb3ZlIHRoZXNlIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfUEFOX0lETEUJCQlCSVQoMTUpCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfUEFOX0lETEUJCUJJVCgxNSkKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9QQU5fVVBMSU5LCQlCSVQoMTYpCi0jZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfUEFOX0RPV05MSU5LCUJJVCgxNykKKyNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9QQU5fRE9XTkxJTksJCUJJVCgxNykKICNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9BMkRQX0lETEUJCUJJVCgxOCkKIC8qICAqLwotI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUX1JTU0lfTE9XCQkJQklUKDE5KQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUX1JTU0lfTE9XCQlCSVQoMTkpCiAKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9QUk9GSUxFX0hJRAkJCUJJVCgyMCkKKyNkZWZpbmUgQlRfQ09FWF9TVEFURV9QUk9GSUxFX0hJRAkJQklUKDIwKQogI2RlZmluZSBCVF9DT0VYX1NUQVRFX1BST0ZJTEVfQTJEUAkJQklUKDIxKQotI2RlZmluZSBCVF9DT0VYX1NUQVRFX1BST0ZJTEVfUEFOCQkJQklUKDIyKQotI2RlZmluZSBCVF9DT0VYX1NUQVRFX1BST0ZJTEVfU0NPCQkJQklUKDIzKQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX1BST0ZJTEVfUEFOCQlCSVQoMjIpCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfUFJPRklMRV9TQ08JCUJJVCgyMykKIAogI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfUlNTSV8xX0xPVwkJQklUKDI0KQogI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfUlNTSV8xX01FRElVTQlCSVQoMjUpCiAjZGVmaW5lIEJUX0NPRVhfU1RBVEVfV0lGSV9SU1NJXzFfSElHSAkJQklUKDI2KQogCi0jZGVmaW5lIEJUX0NPRVhfU1RBVEVfV0lGSV9SU1NJX0JFQUNPTl9MT1cJCUJJVCgyNykKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX1JTU0lfQkVBQ09OX01FRElVTQkJQklUKDI4KQotI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfUlNTSV9CRUFDT05fSElHSAkJQklUKDI5KQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX1dJRklfUlNTSV9CRUFDT05fTE9XCUJJVCgyNykKKyNkZWZpbmUgQlRfQ09FWF9TVEFURV9XSUZJX1JTU0lfQkVBQ09OX01FRElVTQlCSVQoMjgpCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfV0lGSV9SU1NJX0JFQUNPTl9ISUdICUJJVCgyOSkKIAogCi0jZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRJTkZPX0NPTU1PTgkJCQlCSVQzMAotI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUSU5GT19CX0hJRF9TQ09FU0NPCQlCSVQzMQotI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUSU5GT19CX0ZUUF9BMkRQCQkJQklUMzIKKyNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVElORk9fQ09NTU9OCQlCSVQoMzApCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRJTkZPX0JfSElEX1NDT0VTQ08JQklUKDMxKQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUSU5GT19CX0ZUUF9BMkRQCQlCSVQoMzIpCiAKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9DTlRfTEVWRUxfMAkJCQlCSVQzMwotI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUX0NOVF9MRVZFTF8xCQkJCUJJVDM0Ci0jZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfQ05UX0xFVkVMXzIJCQkJQklUMzUKLSNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9DTlRfTEVWRUxfMwkJCQlCSVQzNgorI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUX0NOVF9MRVZFTF8wCQlCSVQoMzMpCisjZGVmaW5lIEJUX0NPRVhfU1RBVEVfQlRfQ05UX0xFVkVMXzEJCUJJVCgzNCkKKyNkZWZpbmUgQlRfQ09FWF9TVEFURV9CVF9DTlRfTEVWRUxfMgkJQklUKDM1KQorI2RlZmluZSBCVF9DT0VYX1NUQVRFX0JUX0NOVF9MRVZFTF8zCQlCSVQoMzYpCiAKLSNkZWZpbmUgQlRfUlNTSV9TVEFURV9ISUdICQkJCQkwCi0jZGVmaW5lIEJUX1JTU0lfU1RBVEVfTUVESVVNCQkJCTEKLSNkZWZpbmUgQlRfUlNTSV9TVEFURV9MT1cJCQkJCTIKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9ISUdICQkJMAorI2RlZmluZSBCVF9SU1NJX1NUQVRFX01FRElVTQkJCTEKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9MT1cJCQkyCiAjZGVmaW5lIEJUX1JTU0lfU1RBVEVfU1RBWV9ISUdICQkJMwotI2RlZmluZSBCVF9SU1NJX1NUQVRFX1NUQVlfTUVESVVNCQkJNAorI2RlZmluZSBCVF9SU1NJX1NUQVRFX1NUQVlfTUVESVVNCQk0CiAjZGVmaW5lIEJUX1JTU0lfU1RBVEVfU1RBWV9MT1cJCQk1CiAKICNkZWZpbmUJQlRfQUdDVEFCTEVfT0ZGCQkJCTAKQEAgLTE1NzksOCArMTUzNyw2IEBACiB2b2lkIEJURE1fQ2hlY2tBbnRTZWxNb2RlKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHZvaWQgQlRETV9Gd0MyaEJ0UnNzaShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggKnRtcEJ1Zik7CiAjZGVmaW5lIEJUX0Z3QzJoQnRSc3NpIEJURE1fRndDMmhCdFJzc2kKLXZvaWQgQlRETV9Gd0MyaEJ0SW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggKnRtcEJ1ZiwgdTggbGVuZ3RoKTsKLSNkZWZpbmUgQlRfRndDMmhCdEluZm8gQlRETV9Gd0MyaEJ0SW5mbwogdm9pZCBCVERNX0Rpc3BsYXlCdENvZXhJbmZvKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKICNkZWZpbmUgQlRfRGlzcGxheUJ0Q29leEluZm8gQlRETV9EaXNwbGF5QnRDb2V4SW5mbwogdm9pZCBCVERNX1JlamVjdEFQQWdncmVnYXRlZFBhY2tldChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggYlJlamVjdCk7CkBAIC0xNTkxLDggKzE1NDcsNiBAQAogdTggQlRETV9DaGVja0NvZXhCY25Sc3NpU3RhdGUoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4IGxldmVsTnVtLCB1OCBSc3NpVGhyZXNoLCB1OCBSc3NpVGhyZXNoMSk7CiB1OCBCVERNX0NoZWNrQ29leFJTU0lTdGF0ZTEoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4IGxldmVsTnVtLCB1OCBSc3NpVGhyZXNoLCB1OCBSc3NpVGhyZXNoMSk7CiB1OCBCVERNX0NoZWNrQ29leFJTU0lTdGF0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggbGV2ZWxOdW0sIHU4IFJzc2lUaHJlc2gsIHU4IFJzc2lUaHJlc2gxKTsKLXU4IEJURE1fRGlzYWJsZUVEQ0FUdXJibyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7Ci0jZGVmaW5lIEJUX0Rpc2FibGVFRENBVHVyYm8gQlRETV9EaXNhYmxlRURDQVR1cmJvCiB2b2lkIEJURE1fQmFsYW5jZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggYkJhbGFuY2VPbiwgdTggbXMwLCB1OCBtczEpOwogdm9pZCBCVERNX0FHQ1RhYmxlKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCB0eXBlKTsKIHZvaWQgQlRETV9CQkJhY2tPZmZMZXZlbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggdHlwZSk7CkBAIC0xNjAyLDggKzE1NTYsNiBAQAogdm9pZCBCVERNX0NvZXhBbGxPZmYoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwogdm9pZCBCVERNX1R1cm5PZmZCdENvZXhpc3RCZWZvcmVFbnRlcklQUyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiB2b2lkIEJURE1fU2lnbmFsQ29tcGVuc2F0aW9uKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCAqcnNzaV93aWZpLCB1OCAqcnNzaV9idCk7Ci12b2lkIEJURE1fQ29leGlzdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7Ci0jZGVmaW5lIEJUX0NvZXhpc3RNZWNoYW5pc20gQlRETV9Db2V4aXN0CiB2b2lkIEJURE1fVXBkYXRlQ29leFN0YXRlKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHU4IEJURE1fSXNTYW1lQ29leGlzdFN0YXRlKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHZvaWQgQlRETV9QV0RCTW9uaXRvcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CkBAIC0xNjMyLDE1ICsxNTg0LDExIEBACiB1OCBCVERNX0lzQWN0aW9uSElEQTJEUChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiB1OCBCVERNX0lzQWN0aW9uSElEUEFOKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHU4IEJURE1fSXNBY3Rpb25QQU5BMkRQKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKLXU4IEJURE1fSXNCdERpc2FibGVkKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKLSNkZWZpbmUgQlRfSXNCdERpc2FibGVkIEJURE1fSXNCdERpc2FibGVkCiB1MzIgQlRETV9CdFR4UnhDb3VudGVySChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiB1MzIgQlRETV9CdFR4UnhDb3VudGVyTChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiAKIC8qICA9PT09PSBFbmQgb2Ygc3luYyBmcm9tIFNENyBkcml2ZXIgSEFML0JUQ29leGlzdC9IYWxCdENvZXhpc3QuaCA9PT09PSAqLwotI2VuZGlmIC8qICBfX0hBTEJUQ09FWElTVF9DX18gKi8KIAotI2lmZGVmIF9fSEFMQlRfQ19fIC8qICBIQUwvSGFsQlQuaCAqLwogLyogID09PT09IEJlbG93IHRoaXMgbGluZSBpcyBzeW5jIGZyb20gU0Q3IGRyaXZlciBIQUwvSGFsQlQuaCA9PT09PSAqLwogCiAjZGVmaW5lIFJUU19DVFNfTk9fTEVOX0xJTUlUCTAKQEAgLTE2NDksMTggKzE1OTcsMTIgQEAKICNkZWZpbmUgQlRfR2V0UEdBbnROdW0gSEFMQlRfR2V0UEdBbnROdW0KIHZvaWQgSEFMQlRfU2V0S2V5KHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCBFbnRyeU51bSk7CiB2b2lkIEhBTEJUX1JlbW92ZUtleShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggRW50cnlOdW0pOwotdm9pZCBIQUxCVF9Jbml0QlRWYXJzODcyM0Eoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwotI2RlZmluZSBIQUxCVF9Jbml0SGFsVmFycyBIQUxCVF9Jbml0QlRWYXJzODcyM0EKLSNkZWZpbmUgQlRfSW5pdEhhbFZhcnMgSEFMQlRfSW5pdEhhbFZhcnMKIHU4IEhBTEJUX0lzQlRFeGlzdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CiAjZGVmaW5lIEJUX0lzQnRFeGlzdCBIQUxCVF9Jc0JURXhpc3QKIHU4IEhBTEJUX0JUQ2hpcFR5cGUoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwotdm9pZCBIQUxCVF9Jbml0SHdDb25maWcoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwotI2RlZmluZSBCVF9Jbml0SHdDb25maWcgSEFMQlRfSW5pdEh3Q29uZmlnCiB2b2lkIEhBTEJUX1NldFJ0c0N0c05vTGVuTGltaXQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwogCiAvKiAgPT09PT0gRW5kIG9mIHN5bmMgZnJvbSBTRDcgZHJpdmVyIEhBTC9IYWxCVC5jID09PT09ICovCi0jZW5kaWYgLyogIF9fSEFMQlRfQ19fICovCiAKICNkZWZpbmUgX2J0X2RiZ19vZmZfCQkwCiAjZGVmaW5lIF9idF9kYmdfb25fCQkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfYnRfaW50Zi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2J0X2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMzNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2J0X2ludGYuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEyIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAxNCwgSmVzIFNvcmVuc2VuIDxKZXMuU29yZW5zZW5AcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1JUTDg3MjNBX0JUX0lOVEZfSF9fCisjZGVmaW5lIF9fUlRMODcyM0FfQlRfSU5URl9IX18KKworI2luY2x1ZGUgPGRydl90eXBlcy5oPgorCisjaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCitlbnVtIHJ0X21lZGlhX3N0YXR1czsKK2Jvb2wgcnRsODcyM2FfQlRfdXNpbmdfYW50ZW5uYV8xKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworYm9vbCBydGw4NzIzYV9CVF9lbmFibGVkKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworYm9vbCBydGw4NzIzYV9CVF9jb2V4aXN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9CVF9kb19jb2V4aXN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9CVF93aWZpc2Nhbl9ub3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggc2NhblR5cGUpOwordm9pZCBydGw4NzIzYV9CVF9tZWRpYXN0YXR1c19ub3RpZnkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCQkgICAgZW51bSBydF9tZWRpYV9zdGF0dXMgbXN0YXR1cyk7Cit2b2lkIHJ0bDg3MjNhX0JUX3NwZWNpYWxwYWNrZXRfbm90aWZ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9CVF9scHNfbGVhdmUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Cit2b2lkIHJ0bDg3MjNhX0JUX2Rpc2FibGVfY29leGlzdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK2Jvb2wgcnRsODcyM2FfQlRfZGlzYWJsZV9FRENBX3R1cmJvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9kdWFsX2FudGVubmFfZGV0ZWN0aW9uKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9CVF9pbml0X2h3Y29uZmlnKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9CVF93aWZpYXNzb2NpYXRlX25vdGlmeShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBhY3Rpb24pOwordm9pZCBydGw4NzIzYV9CVF9pbml0X2hhbF92YXJzKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9md19jMmhfQlRfaW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqdG1wQnVmLCB1OCBsZW5ndGgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBydGw4NzIzYV9CVF91c2luZ19hbnRlbm5hXzEoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIGJvb2wgcnRsODcyM2FfQlRfZW5hYmxlZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoreworCXJldHVybiBmYWxzZTsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBydGw4NzIzYV9CVF9jb2V4aXN0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCit7CisJcmV0dXJuIGZhbHNlOworfQorI2RlZmluZSBydGw4NzIzYV9CVF9kb19jb2V4aXN0KHBhZGFwdGVyKQkJCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIHJ0bDg3MjNhX0JUX3dpZmlzY2FuX25vdGlmeShwYWRhcHRlciwgc2NhblR5cGUpCQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBydGw4NzIzYV9CVF9tZWRpYXN0YXR1c19ub3RpZnkocGFkYXB0ZXIsIG1zdGF0dXMpCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIHJ0bDg3MjNhX0JUX3NwZWNpYWxwYWNrZXRfbm90aWZ5KHBhZGFwdGVyKQkJZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgcnRsODcyM2FfQlRfbHBzX2xlYXZlKHBhZGFwdGVyKQkJCQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBydGw4NzIzYV9CVF9kaXNhYmxlX2NvZXhpc3QocGFkYXB0ZXIpCQkJZG8ge30gd2hpbGUoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBydGw4NzIzYV9CVF9kaXNhYmxlX0VEQ0FfdHVyYm8oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZGVmaW5lIHJ0bDg3MjNhX2R1YWxfYW50ZW5uYV9kZXRlY3Rpb24ocGFkYXB0ZXIpCQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBydGw4NzIzYV9CVF9pbml0X2h3Y29uZmlnKHBhZGFwdGVyKQkJCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIHJ0bDg3MjNhX0JUX3dpZmlhc3NvY2lhdGVfbm90aWZ5KHBhZGFwdGVyLCBhY3Rpb24pCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIHJ0bDg3MjNhX0JUX2luaXRfaGFsX3ZhcnMocGFkYXB0ZXIpCQkJZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgcnRsODcyM2FfZndfYzJoX0JUX2luZm8ocGFkYXB0ZXIsIHRtcEJ1ZiwgbGVuZ3RoKQlkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2NtZC5oCmluZGV4IDhmY2NiZmMuLjkwMGJhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9jbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfY21kLmgKQEAgLTE0MiwxOCArMTQyLDE2IEBACiAKIAogLyogIGhvc3QgbWVzc2FnZSB0byBmaXJtd2FyZSBjbWQgKi8KLXZvaWQgcnRsODcyM2Ffc2V0X0Z3UHdyTW9kZV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4IE1vZGUpOwotdm9pZCBydGw4NzIzYV9zZXRfRndKb2luQnNzUmVwb3J0X2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggbXN0YXR1cyk7Cit2b2lkIHJ0bDg3MjNhX3NldF9Gd1B3ck1vZGVfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IE1vZGUpOwordm9pZCBydGw4NzIzYV9zZXRfRndKb2luQnNzUmVwb3J0X2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBtc3RhdHVzKTsKICNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLXZvaWQgcnRsODcyM2Ffc2V0X0JUQ29leF9BUF9tb2RlX0Z3UnN2ZFBrdF9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwordm9pZCBydGw4NzIzYV9zZXRfQlRDb2V4X0FQX21vZGVfRndSc3ZkUGt0X2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKKyNlbHNlCisjZGVmaW5lIHJ0bDg3MjNhX3NldF9CVENvZXhfQVBfbW9kZV9Gd1JzdmRQa3RfY21kKHBhZGFwdGVyKSBkbyB7fSB3aGlsZSgwKQogI2VuZGlmCi11OCBydGw4NzIzYV9zZXRfcnNzaV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4ICpwYXJhbSk7Ci11OCBydGw4NzIzYV9zZXRfcmFpZF9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHUzMiBtYXNrLCB1OCBhcmcpOwotdm9pZCBydGw4NzIzYV9hZGRfcmF0ZWF0aWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHUzMiBiaXRtYXAsIHU4IGFyZywgdTggcnNzaV9sZXZlbCk7Ci0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotdm9pZCBydGw4NzIzYV9zZXRfcDJwX3BzX29mZmxvYWRfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCBwMnBfcHNfc3RhdGUpOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCitpbnQgcnRsODcyM2Ffc2V0X3Jzc2lfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYXJhbSk7CitpbnQgcnRsODcyM2Ffc2V0X3JhaWRfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBtYXNrLCB1OCBhcmcpOwordm9pZCBydGw4NzIzYV9hZGRfcmF0ZWF0aWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGJpdG1hcCwgdTggYXJnLCB1OCByc3NpX2xldmVsKTsKIAogdm9pZCBDaGVja0Z3UnN2ZFBhZ2VDb250ZW50MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfZG0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9kbS5oCmluZGV4IDQ3ZTg4N2YuLmNjYWM2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9kbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9kbS5oCkBAIC01OSw4ICs1OSw2IEBACiAJI2VuZGlmCiAKIAkvKiBmb3IgSGlnaCBQb3dlciAqLwotCXU4IGJEeW5hbWljVHhQb3dlckVuYWJsZTsKLQl1OCBMYXN0RFRQTHZsOwogCXU4IER5bmFtaWNUeEhpZ2hQb3dlckx2bDsvKiBBZGQgYnkgSmFja2VuIFR4IFBvd2VyIENvbnRyb2wgZm9yIE5lYXIvRmFyIFJhbmdlIDIwMDgvMDMvMDYgKi8KIAogCS8qIGZvciB0eCBwb3dlciB0cmFja2luZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2hhbC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX2hhbC5oCmluZGV4IGMyMDI0OGIuLjM0NGI3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9oYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfaGFsLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJIYWw4NzIzQVBoeVJlZy5oIgogI2luY2x1ZGUgIkhhbDg3MjNBUGh5Q2ZnLmgiCiAjaW5jbHVkZSAicnRsODcyM2FfcmYuaCIKKyNpbmNsdWRlICJydGw4NzIzYV9idF9pbnRmLmgiCiAjaWZkZWYgQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUCiAjaW5jbHVkZSAicnRsODcyM2FfYnQtY29leGlzdC5oIgogI2VuZGlmCkBAIC0yOSwyNSArMzAsMTYgQEAKICNpbmNsdWRlICJydGw4NzIzYV9jbWQuaCIKICNpbmNsdWRlICJydGw4NzIzYV9zcmVzZXQuaCIKICNpbmNsdWRlICJydHdfZWZ1c2UuaCIKKyNpbmNsdWRlICJydHdfZWVwcm9tLmgiCiAKICNpbmNsdWRlICJvZG1fcHJlY29tcC5oIgorI2luY2x1ZGUgIm9kbS5oIgogCiAKIC8qIDJUT0RPOiBXZSBzaG91bGQgZGVmaW5lIDgxOTJTIGZpcm13YXJlIHJlbGF0ZWQgbWFjcm8gc2V0dGluZ3MgaGVyZSEhICovCiAjZGVmaW5lIFJUTDgxOVhfREVGQVVMVF9SRl9UWVBFCQkJUkZfMVQyUgogI2RlZmluZSBSVEw4MTlYX1RPVEFMX1JGX1BBVEgJCQkJMgogCi0vKiBUT0RPOiAgVGhlIGZvbGxvd2luZyBuZWVkIHRvIGNoZWNrISEgKi8KLSNkZWZpbmUgUlRMODcyM19GV19VTUNfSU1HCQkJCSJydGw4MTkyQ1VcXHJ0bDg3MjNmdy5iaW4iCi0jZGVmaW5lIFJUTDg3MjNfRldfVU1DX0JfSU1HCQkJInJ0bDgxOTJDVVxccnRsODcyM2Z3X0IuYmluIgotI2RlZmluZSBSVEw4NzIzX1BIWV9SRUcJCQkJCSJydGw4NzIzU1xcUEhZX1JFR18xVC50eHQiCi0jZGVmaW5lIFJUTDg3MjNfUEhZX1JBRElPX0EJCQkJInJ0bDg3MjNTXFxyYWRpb19hXzFULnR4dCIKLSNkZWZpbmUgUlRMODcyM19QSFlfUkFESU9fQgkJCQkicnRsODcyM1NcXHJhZGlvX2JfMVQudHh0IgotI2RlZmluZSBSVEw4NzIzX0FHQ19UQUIJCQkJCSJydGw4NzIzU1xcQUdDX1RBQl8xVC50eHQiCi0jZGVmaW5lIFJUTDg3MjNfUEhZX01BQ1JFRwkJCQkicnRsODcyM1NcXE1BQ19SRUcudHh0IgotI2RlZmluZSBSVEw4NzIzX1BIWV9SRUdfUEcJCQkJInJ0bDg3MjNTXFxQSFlfUkVHX1BHLnR4dCIKLSNkZWZpbmUgUlRMODcyM19QSFlfUkVHX01QCQkJCSJydGw4NzIzU1xcUEhZX1JFR19NUC50eHQiCi0KIC8qICAqLwogLyoJCVJUTDg3MjNTIEZyb20gaGVhZGVyICovCiAvKiAgKi8KQEAgLTQyNCwyNyArNDE2LDkgQEAKIAogCWJvb2wJCQkJYk1BQ0Z1bmNFbmFibGU7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXN0cnVjdCBQMlBfUFNfT2ZmbG9hZF90CXAycF9wc19vZmZsb2FkOwotI2VuZGlmCi0KLQotCS8qICAqLwotCS8qICBGb3IgVVNCIEludGVyZmFjZSBIQUwgcmVsYXRlZCAqLwotCS8qICAqLwotCXUzMglVc2JCdWxrT3V0U2l6ZTsKLQogCS8qICBJbnRlcnJ1cHQgcmVsYXRlZCByZWdpc3RlciBpbmZvcm1hdGlvbi4gKi8KIAl1MzIJSW50QXJyYXlbMl07CiAJdTMyCUludHJNYXNrWzJdOwotCi0JLyogICovCi0JLyogIEZvciBTRElPIEludGVyZmFjZSBIQUwgcmVsYXRlZCAqLwotCS8qICAqLwotCi0JLyogIEF1dG8gRlNNIHRvIFR1cm4gT24sIGluY2x1ZGUgY2xvY2ssIGlzb2xhdGlvbiwgcG93ZXIgY29udHJvbCBmb3IgTUFDIG9ubHkgKi8KLQl1OAkJCWJNYWNQd3JDdHJsT247Ci0KIH07CiAKICNkZWZpbmUgR0VUX0hBTF9EQVRBKF9fcEFkYXB0ZXIpCSgoc3RydWN0IGhhbF9kYXRhXzg3MjNhICopKChfX3BBZGFwdGVyKS0+SGFsRGF0YSkpCkBAIC01NTEsMjUgKzUyNSwzMyBAQAogdm9pZCBIYWxfRWZ1c2VQYXJzZUFudGVubmFEaXZlcnNpdHkoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmh3aW5mbywgYm9vbCBBdXRvTG9hZEZhaWwpOwogdm9pZCBIYWxfRWZ1c2VQYXJzZVJhdGVJbmRpY2F0aW9uT3B0aW9uKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpod2luZm8sIGJvb2wgQXV0b0xvYWRGYWlsKTsKIHZvaWQgSGFsX0VmdXNlUGFyc2VYdGFsXzg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHU4ICpod2luZm8sIHU4IEF1dG9Mb2FkRmFpbCk7Ci12b2lkIEhhbF9FZnVzZVBhcnNlVGhlcm1hbE1ldGVyXzg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpod2luZm8sIHU4IEF1dG9Mb2FkRmFpbCk7Cit2b2lkIEhhbF9FZnVzZVBhcnNlVGhlcm1hbE1ldGVyXzg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpod2luZm8sIGJvb2wgQXV0b0xvYWRGYWlsKTsKIAogdm9pZCBIYWxfSW5pdENoYW5uZWxQbGFuMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCi12b2lkIHJ0bDg3MjNhX3NldF9oYWxfb3BzKHN0cnVjdCBoYWxfb3BzICpwSGFsRnVuYyk7Ci12b2lkIFNldEh3UmVnODcyM0Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotdm9pZCBHZXRId1JlZzg3MjNBKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX0JUX0NPRVhJU1QKLXZvaWQgcnRsODcyM2FfU2luZ2xlRHVhbEFudGVubmFEZXRlY3Rpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0jZW5kaWYKLQogLyogIHJlZ2lzdGVyICovCiB2b2lkIFNldEJjbkN0cmxSZWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggU2V0Qml0cywgdTggQ2xlYXJCaXRzKTsKIHZvaWQgcnRsODcyM2FfSW5pdEJlYWNvblBhcmFtZXRlcnMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiAKLXZvaWQgcnRsODcyM2FfY2xvbmVfaGFsZGF0YShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmRzdF9hZGFwdGVyLCBzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnNyY19hZGFwdGVyKTsKIHZvaWQgcnRsODcyM2Ffc3RhcnRfdGhyZWFkKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBydGw4NzIzYV9zdG9wX3RocmVhZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAotczMyIGMyaF9pZF9maWx0ZXJfY2N4Xzg3MjNhKHU4IGlkKTsKK2Jvb2wgYzJoX2lkX2ZpbHRlcl9jY3hfODcyM2EodTggaWQpOworaW50IGMyaF9oYW5kbGVyXzg3MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBjMmhfZXZ0X2hkciAqYzJoX2V2dCk7CisKK3ZvaWQgcnRsODcyM2FfcmVhZF9hZGFwdGVyX2luZm8oc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyKTsKK3ZvaWQgcnRsODcyM2FfcmVhZF9jaGlwX3ZlcnNpb24oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Cit2b2lkIHJ0bDg3MjNhX25vdGNoX2ZpbHRlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKTsKK3ZvaWQgcnRsODcyM2FfU2V0QmVhY29uUmVsYXRlZFJlZ2lzdGVycyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3ZvaWQgcnRsODcyM2FfU2V0SGFsT0RNVmFyKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwKKwkJCSAgIGVudW0gaGFsX29kbV92YXJpYWJsZSBlVmFyaWFibGUsCisJCQkgICB2b2lkICpwVmFsdWUxLCBib29sIGJTZXQpOwordm9pZAorcnRsODcyM2FfcmVhZGVmdXNlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCSAgIHU4IGVmdXNlVHlwZSwgdTE2IF9vZmZzZXQsIHUxNiBfc2l6ZV9ieXRlLCB1OCAqcGJ1Zik7Cit1MTYgcnRsODcyM2FfRWZ1c2VHZXRDdXJyZW50U2l6ZV9XaUZpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordTE2IHJ0bDg3MjNhX0VmdXNlR2V0Q3VycmVudFNpemVfQlQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Cit2b2lkIHJ0bDg3MjNhX3VwZGF0ZV9yYW1hc2soc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgICB1MzIgbWFjX2lkLCB1OCByc3NpX2xldmVsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfcmVjdi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX3JlY3YuaAppbmRleCA2YmY2OTA0Li44ODVkNGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfcmVjdi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9yZWN2LmgKQEAgLTE4LDIxICsxOCwyMSBAQAogI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KICNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KIAotI2RlZmluZSBOUl9SRUNWQlVGRiAoNCkKKyNkZWZpbmUgTlJfUkVDVkJVRkYJCQk0CiAKLSNkZWZpbmUgTlJfUFJFQUxMT0NfUkVDVl9TS0IgKDgpCisjZGVmaW5lIE5SX1BSRUFMTE9DX1JFQ1ZfU0tCCQk4CiAKLSNkZWZpbmUgUkVDVl9CTEtfU1ogNTEyCi0jZGVmaW5lIFJFQ1ZfQkxLX0NOVCAxNgotI2RlZmluZSBSRUNWX0JMS19USCBSRUNWX0JMS19DTlQKKyNkZWZpbmUgUkVDVl9CTEtfU1oJCQk1MTIKKyNkZWZpbmUgUkVDVl9CTEtfQ05UCQkJMTYKKyNkZWZpbmUgUkVDVl9CTEtfVEgJCQlSRUNWX0JMS19DTlQKIAotI2RlZmluZSBNQVhfUkVDVkJVRl9TWiAoMTUzNjApIC8qICAxNWsgPCAxNmsgKi8KKyNkZWZpbmUgTUFYX1JFQ1ZCVUZfU1oJCQkxNTM2MCAvKiAgMTVrIDwgMTZrICovCiAKICNkZWZpbmUgUkVDVl9CVUxLX0lOX0FERFIJCTB4ODAKICNkZWZpbmUgUkVDVl9JTlRfSU5fQUREUgkJMHg4MQogCi0jZGVmaW5lIFBIWV9SU1NJX1NMSURfV0lOX01BWAkJCQkxMDAKLSNkZWZpbmUgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWAkJMjAKKyNkZWZpbmUgUEhZX1JTU0lfU0xJRF9XSU5fTUFYCQkxMDAKKyNkZWZpbmUgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWAkyMAogCiAKIHN0cnVjdCBwaHlfc3RhdApAQCAtNDgsNyArNDgsNyBAQAogfTsKIAogLyogIFJ4IHNtb290aCBmYWN0b3IgKi8KLSNkZWZpbmUJUnhfU21vb3RoX0ZhY3RvciAoMjApCisjZGVmaW5lCVJ4X1Ntb290aF9GYWN0b3IJCTIwCiAKIHN0cnVjdCBpbnRlcnJ1cHRfbXNnX2Zvcm1hdCB7CiAJdW5zaWduZWQgaW50IEMySF9NU0cwOwpAQCAtNjAsOCArNjAsNyBAQAogCXVuc2lnbmVkIGludCAgTVNHX0VYOwogfTsKIAotdm9pZCBydGw4NzIzYXVfaW5pdF9yZWN2YnVmKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2J1ZiAqcHJlY3ZidWYpOwotaW50CXJ0bDg3MjNhdV9pbml0X3JlY3ZfcHJpdihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7CitpbnQgcnRsODcyM2F1X2luaXRfcmVjdl9wcml2KHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHZvaWQgcnRsODcyM2F1X2ZyZWVfcmVjdl9wcml2KHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyKTsKIHZvaWQgcnRsODcyM2FfcHJvY2Vzc19waHlfaW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB2b2lkICpwcmZyYW1lKTsKIHZvaWQgdXBkYXRlX3JlY3ZmcmFtZV9hdHRyaWIoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsIHN0cnVjdCByZWN2X3N0YXQgKnByeHN0YXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX3NwZWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV9zcGVjLmgKaW5kZXggMzU5NWMyNy4uYjVkNzEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX3NwZWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2Ffc3BlYy5oCkBAIC00ODEsMTEgKzQ4MSwxMSBAQAogLyogODE5MkMgQ21kOTM0NkNSIGJpdHMJCQkoT2Zmc2V0IDB4QSwgMTZiaXQpICovCiAvKiAgKi8KIAkgLyogIEVFUFJPTSBlbmFibGUgd2hlbiBzZXQgMSAqLwotI2RlZmluZQlDbWRFRVBST01fRW4JCQlCSVQ1CisjZGVmaW5lCUNtZEVFUFJPTV9FbgkJCUJJVCg1KQogCS8qICBTeXN0ZW0gRUVQUk9NIHNlbGVjdCwgMDogYm9vdCBmcm9tIEUtRlVTRSwKIAkgICAgMTogVGhlIEVFUFJPTSB1c2VkIGlzIDkzNDYgKi8KLSNkZWZpbmUJQ21kRUVSUE9NU0VMCQkJQklUNAotI2RlZmluZQlDbWQ5MzQ2Q1JfOTM1NlNFTAkJQklUNAorI2RlZmluZQlDbWRFRVJQT01TRUwJCQlCSVQoNCkKKyNkZWZpbmUJQ21kOTM0NkNSXzkzNTZTRUwJCUJJVCg0KQogI2RlZmluZQlBdXRvTG9hZEVFUFJPTQkJCShDbWRFRVBST01fRW58Q21kRUVSUE9NU0VMKQogI2RlZmluZQlBdXRvTG9hZEVGVVNFCQkJQ21kRUVQUk9NX0VuCiAKQEAgLTQ5Myw3ICs0OTMsNyBAQAogLyogODE5MkMgR1BJTyBNVVggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAob2Zmc2V0IDB4NDAsIDQgYnl0ZSkgKi8KIC8qICAqLwogI2RlZmluZQlHUElPU0VMX0dQSU8JCQkwCi0jZGVmaW5lCUdQSU9TRUxfRU5CVAkJCUJJVDUKKyNkZWZpbmUJR1BJT1NFTF9FTkJUCQkJQklUKDUpCiAKIC8qICAqLwogLyogICAgICAgIDgxOTJDIEdQSU8gUElOIENvbnRyb2wgUmVnaXN0ZXIgKG9mZnNldCAweDQ0LCA0IGJ5dGUpICovCkBAIC01MzUsNDMgKzUzNSw0MyBAQAogI2RlZmluZQlSUlNSX1JTQ19VUFNVQkNITkwJCTB4NDAwMDAwCiAjZGVmaW5lCVJSU1JfUlNDX0xPV1NVQkNITkwJCTB4MjAwMDAwCiAjZGVmaW5lCVJSU1JfU0hPUlQJCQkweDgwMDAwMAotI2RlZmluZQlSUlNSXzFNCQkJCUJJVDAKLSNkZWZpbmUJUlJTUl8yTQkJCQlCSVQxCi0jZGVmaW5lCVJSU1JfNV81TQkJCUJJVDIKLSNkZWZpbmUJUlJTUl8xMU0JCQlCSVQzCi0jZGVmaW5lCVJSU1JfNk0JCQkJQklUNAotI2RlZmluZQlSUlNSXzlNCQkJCUJJVDUKLSNkZWZpbmUJUlJTUl8xMk0JCQlCSVQ2Ci0jZGVmaW5lCVJSU1JfMThNCQkJQklUNwotI2RlZmluZQlSUlNSXzI0TQkJCUJJVDgKLSNkZWZpbmUJUlJTUl8zNk0JCQlCSVQ5Ci0jZGVmaW5lCVJSU1JfNDhNCQkJQklUMTAKLSNkZWZpbmUJUlJTUl81NE0JCQlCSVQxMQotI2RlZmluZQlSUlNSX01DUzAJCQlCSVQxMgotI2RlZmluZQlSUlNSX01DUzEJCQlCSVQxMwotI2RlZmluZQlSUlNSX01DUzIJCQlCSVQxNAotI2RlZmluZQlSUlNSX01DUzMJCQlCSVQxNQotI2RlZmluZQlSUlNSX01DUzQJCQlCSVQxNgotI2RlZmluZQlSUlNSX01DUzUJCQlCSVQxNwotI2RlZmluZQlSUlNSX01DUzYJCQlCSVQxOAotI2RlZmluZQlSUlNSX01DUzcJCQlCSVQxOQotI2RlZmluZQlCUlNSX0Fja1Nob3J0UG1iCQlCSVQyMworI2RlZmluZQlSUlNSXzFNCQkJCUJJVCgwKQorI2RlZmluZQlSUlNSXzJNCQkJCUJJVCgxKQorI2RlZmluZQlSUlNSXzVfNU0JCQlCSVQoMikKKyNkZWZpbmUJUlJTUl8xMU0JCQlCSVQoMykKKyNkZWZpbmUJUlJTUl82TQkJCQlCSVQoNCkKKyNkZWZpbmUJUlJTUl85TQkJCQlCSVQoNSkKKyNkZWZpbmUJUlJTUl8xMk0JCQlCSVQoNikKKyNkZWZpbmUJUlJTUl8xOE0JCQlCSVQoNykKKyNkZWZpbmUJUlJTUl8yNE0JCQlCSVQoOCkKKyNkZWZpbmUJUlJTUl8zNk0JCQlCSVQoOSkKKyNkZWZpbmUJUlJTUl80OE0JCQlCSVQoMTApCisjZGVmaW5lCVJSU1JfNTRNCQkJQklUKDExKQorI2RlZmluZQlSUlNSX01DUzAJCQlCSVQoMTIpCisjZGVmaW5lCVJSU1JfTUNTMQkJCUJJVCgxMykKKyNkZWZpbmUJUlJTUl9NQ1MyCQkJQklUKDE0KQorI2RlZmluZQlSUlNSX01DUzMJCQlCSVQoMTUpCisjZGVmaW5lCVJSU1JfTUNTNAkJCUJJVCgxNikKKyNkZWZpbmUJUlJTUl9NQ1M1CQkJQklUKDE3KQorI2RlZmluZQlSUlNSX01DUzYJCQlCSVQoMTgpCisjZGVmaW5lCVJSU1JfTUNTNwkJCUJJVCgxOSkKKyNkZWZpbmUJQlJTUl9BY2tTaG9ydFBtYgkJQklUKDIzKQogLyogIENDSyBBQ0s6IHVzZSBTaG9ydCBQcmVhbWJsZSBvciBub3QgKi8KIAogLyogICovCiAvKiA4MTkyQyBCV19PUE1PREUgYml0cwkJCShPZmZzZXQgMHgyMDMsIDhiaXQpICovCiAvKiAgKi8KLSNkZWZpbmUJQldfT1BNT0RFXzIwTUhaCQkJQklUMgotI2RlZmluZQlCV19PUE1PREVfNUcJCQlCSVQxCi0jZGVmaW5lCUJXX09QTU9ERV8xMUoJCQlCSVQwCisjZGVmaW5lCUJXX09QTU9ERV8yME1IWgkJCUJJVCgyKQorI2RlZmluZQlCV19PUE1PREVfNUcJCQlCSVQoMSkKKyNkZWZpbmUJQldfT1BNT0RFXzExSgkJCUJJVCgwKQogCiAKIC8qICAqLwogLyogODE5MkMgQ0FNIENvbmZpZyBTZXR0aW5nIChvZmZzZXQgMHgyNTAsIDEgYnl0ZSkgKi8KIC8qICAqLwotI2RlZmluZQlDQU1fVkFMSUQJCQlCSVQxNQorI2RlZmluZQlDQU1fVkFMSUQJCQlCSVQoMTUpCiAjZGVmaW5lCUNBTV9OT1RWQUxJRAkJCTB4MDAwMAotI2RlZmluZQlDQU1fVVNFREsJCQlCSVQ1CisjZGVmaW5lCUNBTV9VU0VESwkJCUJJVCg1KQogCiAjZGVmaW5lCUNBTV9DT05URU5UX0NPVU5UCQk4CiAKQEAgLTU4Nyw5ICs1ODcsOSBAQAogI2RlZmluZQlDQU1fQ09ORklHX1VTRURLCQl0cnVlCiAjZGVmaW5lCUNBTV9DT05GSUdfTk9fVVNFREsJCWZhbHNlCiAKLSNkZWZpbmUJQ0FNX1dSSVRFCQkJQklUMTYKKyNkZWZpbmUJQ0FNX1dSSVRFCQkJQklUKDE2KQogI2RlZmluZQlDQU1fUkVBRAkJCTB4MDAwMDAwMDAKLSNkZWZpbmUJQ0FNX1BPTExJTklHCQkJQklUMzEKKyNkZWZpbmUJQ0FNX1BPTExJTklHCQkJQklUKDMxKQogCiAjZGVmaW5lCVNDUl9Vc2VESwkJCTB4MDEKICNkZWZpbmUJU0NSX1R4U2VjRW5hYmxlCQkJMHgwMgpAQCAtNjA1LDU0ICs2MDUsNTQgQEAKICNkZWZpbmUJSU1SODE5MF9ESVNBQkxFRAkJMHgwCiAvKiAgSU1SIERXMCBCaXQgMC0zMSAqLwogCi0jZGVmaW5lCUlNUl9CQ05ETUFJTlQ2CQkJQklUMzEJLyogIEJlYWNvbiBETUEgSW50ZXJydXB0IDYgKi8KLSNkZWZpbmUJSU1SX0JDTkRNQUlOVDUJCQlCSVQzMAkvKiAgQmVhY29uIERNQSBJbnRlcnJ1cHQgNSAqLwotI2RlZmluZQlJTVJfQkNORE1BSU5UNAkJCUJJVDI5CS8qICBCZWFjb24gRE1BIEludGVycnVwdCA0ICovCi0jZGVmaW5lCUlNUl9CQ05ETUFJTlQzCQkJQklUMjgJLyogIEJlYWNvbiBETUEgSW50ZXJydXB0IDMgKi8KLSNkZWZpbmUJSU1SX0JDTkRNQUlOVDIJCQlCSVQyNwkvKiAgQmVhY29uIERNQSBJbnRlcnJ1cHQgMiAqLwotI2RlZmluZQlJTVJfQkNORE1BSU5UMQkJCUJJVDI2CS8qICBCZWFjb24gRE1BIEludGVycnVwdCAxICovCi0jZGVmaW5lCUlNUl9CQ05ET0s4CQkJQklUMjUJLyogIEJlYWNvbiBRdWV1ZSBETUEgT0sKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDYJCQlCSVQoMzEpCS8qICBCZWFjb24gRE1BIEludGVycnVwdCA2ICovCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ1CQkJQklUKDMwKQkvKiAgQmVhY29uIERNQSBJbnRlcnJ1cHQgNSAqLworI2RlZmluZQlJTVJfQkNORE1BSU5UNAkJCUJJVCgyOSkJLyogIEJlYWNvbiBETUEgSW50ZXJydXB0IDQgKi8KKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDMJCQlCSVQoMjgpCS8qICBCZWFjb24gRE1BIEludGVycnVwdCAzICovCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQyCQkJQklUKDI3KQkvKiAgQmVhY29uIERNQSBJbnRlcnJ1cHQgMiAqLworI2RlZmluZQlJTVJfQkNORE1BSU5UMQkJCUJJVCgyNikJLyogIEJlYWNvbiBETUEgSW50ZXJydXB0IDEgKi8KKyNkZWZpbmUJSU1SX0JDTkRPSzgJCQlCSVQoMjUpCS8qICBCZWFjb24gUXVldWUgRE1BIE9LCiAJCQkJCQkgICAgSW50ZXJydXB0IDggKi8KLSNkZWZpbmUJSU1SX0JDTkRPSzcJCQlCSVQyNAkvKiAgQmVhY29uIFF1ZXVlIERNQSBPSworI2RlZmluZQlJTVJfQkNORE9LNwkJCUJJVCgyNCkJLyogIEJlYWNvbiBRdWV1ZSBETUEgT0sKIAkJCQkJCSAgICBJbnRlcnJ1cHQgNyAqLwotI2RlZmluZQlJTVJfQkNORE9LNgkJCUJJVDIzCS8qICBCZWFjb24gUXVldWUgRE1BIE9LCisjZGVmaW5lCUlNUl9CQ05ET0s2CQkJQklUKDIzKQkvKiAgQmVhY29uIFF1ZXVlIERNQSBPSwogCQkJCQkJICAgIEludGVycnVwdCA2ICovCi0jZGVmaW5lCUlNUl9CQ05ET0s1CQkJQklUMjIJLyogIEJlYWNvbiBRdWV1ZSBETUEgT0sKKyNkZWZpbmUJSU1SX0JDTkRPSzUJCQlCSVQoMjIpCS8qICBCZWFjb24gUXVldWUgRE1BIE9LCiAJCQkJCQkgICAgSW50ZXJydXB0IDUgKi8KLSNkZWZpbmUJSU1SX0JDTkRPSzQJCQlCSVQyMQkvKiAgQmVhY29uIFF1ZXVlIERNQSBPSworI2RlZmluZQlJTVJfQkNORE9LNAkJCUJJVCgyMSkJLyogIEJlYWNvbiBRdWV1ZSBETUEgT0sKIAkJCQkJCSAgICBJbnRlcnJ1cHQgNCAqLwotI2RlZmluZQlJTVJfQkNORE9LMwkJCUJJVDIwCS8qICBCZWFjb24gUXVldWUgRE1BIE9LCisjZGVmaW5lCUlNUl9CQ05ET0szCQkJQklUKDIwKQkvKiAgQmVhY29uIFF1ZXVlIERNQSBPSwogCQkJCQkJICAgIEludGVycnVwdCAzICovCi0jZGVmaW5lCUlNUl9CQ05ET0syCQkJQklUMTkJLyogIEJlYWNvbiBRdWV1ZSBETUEgT0sKKyNkZWZpbmUJSU1SX0JDTkRPSzIJCQlCSVQoMTkpCS8qICBCZWFjb24gUXVldWUgRE1BIE9LCiAJCQkJCQkgICAgSW50ZXJydXB0IDIgKi8KLSNkZWZpbmUJSU1SX0JDTkRPSzEJCQlCSVQxOAkvKiAgQmVhY29uIFF1ZXVlIERNQSBPSworI2RlZmluZQlJTVJfQkNORE9LMQkJCUJJVCgxOCkJLyogIEJlYWNvbiBRdWV1ZSBETUEgT0sKIAkJCQkJCSAgICBJbnRlcnJ1cHQgMSAqLwotI2RlZmluZQlJTVJfVElNRU9VVDIJCQlCSVQxNwkvKiAgVGltZW91dCBpbnRlcnJ1cHQgMiAqLwotI2RlZmluZQlJTVJfVElNRU9VVDEJCQlCSVQxNgkvKiAgVGltZW91dCBpbnRlcnJ1cHQgMSAqLwotI2RlZmluZQlJTVJfVFhGT1ZXCQkJQklUMTUJLyogIFRyYW5zbWl0IEZJRk8gT3ZlcmZsb3cgKi8KLSNkZWZpbmUJSU1SX1BTVElNRU9VVAkJCUJJVDE0CS8qICBQb3dlciBzYXZlIHRpbWUgb3V0CisjZGVmaW5lCUlNUl9USU1FT1VUMgkJCUJJVCgxNykJLyogIFRpbWVvdXQgaW50ZXJydXB0IDIgKi8KKyNkZWZpbmUJSU1SX1RJTUVPVVQxCQkJQklUKDE2KQkvKiAgVGltZW91dCBpbnRlcnJ1cHQgMSAqLworI2RlZmluZQlJTVJfVFhGT1ZXCQkJQklUKDE1KQkvKiAgVHJhbnNtaXQgRklGTyBPdmVyZmxvdyAqLworI2RlZmluZQlJTVJfUFNUSU1FT1VUCQkJQklUKDE0KQkvKiAgUG93ZXIgc2F2ZSB0aW1lIG91dAogCQkJCQkJICAgIGludGVycnVwdCAqLwotI2RlZmluZQlJTVJfQmNuSW50CQkJQklUMTMJLyogIEJlYWNvbiBETUEgSW50ZXJydXB0IDAgKi8KLSNkZWZpbmUJSU1SX1JYRk9WVwkJCUJJVDEyCS8qICBSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgKi8KLSNkZWZpbmUJSU1SX1JEVQkJCQlCSVQxMQkvKiAgUmVjZWl2ZSBEZXNjcmlwdG9yCisjZGVmaW5lCUlNUl9CY25JbnQJCQlCSVQoMTMpCS8qICBCZWFjb24gRE1BIEludGVycnVwdCAwICovCisjZGVmaW5lCUlNUl9SWEZPVlcJCQlCSVQoMTIpCS8qICBSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgKi8KKyNkZWZpbmUJSU1SX1JEVQkJCQlCSVQoMTEpCS8qICBSZWNlaXZlIERlc2NyaXB0b3IKIAkJCQkJCSAgICBVbmF2YWlsYWJsZSAqLwotI2RlZmluZQlJTVJfQVRJTUVORAkJCUJJVDEwCS8qICBGb3IgOTJDLEFUSU0gV2luZG93CisjZGVmaW5lCUlNUl9BVElNRU5ECQkJQklUKDEwKQkvKiAgRm9yIDkyQyxBVElNIFdpbmRvdwogCQkJCQkJICAgIEVuZCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJSU1SX0JET0sJCQlCSVQ5CS8qICBCZWFjb24gUXVldWUgRE1BIE9LCisjZGVmaW5lCUlNUl9CRE9LCQkJQklUKDkpCS8qICBCZWFjb24gUXVldWUgRE1BIE9LCiAJCQkJCQkgICAgSW50ZXJydXAgKi8KLSNkZWZpbmUJSU1SX0hJR0hET0sJCQlCSVQ4CS8qICBIaWdoIFF1ZXVlIERNQSBPSworI2RlZmluZQlJTVJfSElHSERPSwkJCUJJVCg4KQkvKiAgSGlnaCBRdWV1ZSBETUEgT0sKIAkJCQkJCSAgICBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJSU1SX1RCRE9LCQkJQklUNwkvKiAgVHJhbnNtaXQgQmVhY29uIE9LCisjZGVmaW5lCUlNUl9UQkRPSwkJCUJJVCg3KQkvKiAgVHJhbnNtaXQgQmVhY29uIE9LCiAJCQkJCQkgICAgaW50ZXJydXAgKi8KLSNkZWZpbmUJSU1SX01HTlRET0sJCQlCSVQ2CS8qICBNYW5hZ2VtZW50IFF1ZXVlIERNQSBPSworI2RlZmluZQlJTVJfTUdOVERPSwkJCUJJVCg2KQkvKiAgTWFuYWdlbWVudCBRdWV1ZSBETUEgT0sKIAkJCQkJCSAgICBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJSU1SX1RCREVSCQkJQklUNQkvKiAgRm9yIDkyQyxUcmFuc21pdCBCZWFjb24KKyNkZWZpbmUJSU1SX1RCREVSCQkJQklUKDUpCS8qICBGb3IgOTJDLFRyYW5zbWl0IEJlYWNvbgogCQkJCQkJICAgIEVycm9yIEludGVycnVwdCAqLwotI2RlZmluZQlJTVJfQktET0sJCQlCSVQ0CS8qICBBQ19CSyBETUEgT0sgSW50ZXJydXB0ICovCi0jZGVmaW5lCUlNUl9CRURPSwkJCUJJVDMJLyogIEFDX0JFIERNQSBPSyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJSU1SX1ZJRE9LCQkJQklUMgkvKiAgQUNfVkkgRE1BIE9LIEludGVycnVwdCAqLwotI2RlZmluZQlJTVJfVk9ET0sJCQlCSVQxCS8qICBBQ19WTyBETUEgSW50ZXJydXB0ICovCi0jZGVmaW5lCUlNUl9ST0sJCQkJQklUMAkvKiAgUmVjZWl2ZSBETUEgT0sgSW50ZXJydXB0ICovCisjZGVmaW5lCUlNUl9CS0RPSwkJCUJJVCg0KQkvKiAgQUNfQksgRE1BIE9LIEludGVycnVwdCAqLworI2RlZmluZQlJTVJfQkVET0sJCQlCSVQoMykJLyogIEFDX0JFIERNQSBPSyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSU1SX1ZJRE9LCQkJQklUKDIpCS8qICBBQ19WSSBETUEgT0sgSW50ZXJydXB0ICovCisjZGVmaW5lCUlNUl9WT0RPSwkJCUJJVCgxKQkvKiAgQUNfVk8gRE1BIEludGVycnVwdCAqLworI2RlZmluZQlJTVJfUk9LCQkJCUJJVCgwKQkvKiAgUmVjZWl2ZSBETUEgT0sgSW50ZXJydXB0ICovCiAKICNkZWZpbmUJSU1SX1JYX01BU0sJCQkoSU1SX1JPS3xJTVJfUkRVfElNUl9SWEZPVlcpCiAjZGVmaW5lCUlNUl9UWF9NQVNLCQkJKElNUl9WT0RPS3xJTVJfVklET0t8SU1SX0JFRE9LfCBcCkBAIC02NjAsMTQgKzY2MCwxNCBAQAogCQkJCQkgSU1SX0JET0spCiAKIC8qICAxMy4gSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIEV4dGVuc2lvbiBSZWdpc3RlciAoT2Zmc2V0OiAweDAxMkMtMDEyRWgpICovCi0jZGVmaW5lCUlNUl9CY25JbnRfRQkJCUJJVDEyCi0jZGVmaW5lCUlNUl9UWEVSUgkJCUJJVDExCi0jZGVmaW5lCUlNUl9SWEVSUgkJCUJJVDEwCi0jZGVmaW5lCUlNUl9DMkhDTUQJCQlCSVQ5Ci0jZGVmaW5lCUlNUl9DUFdNCQkJQklUOAorI2RlZmluZQlJTVJfQmNuSW50X0UJCQlCSVQoMTIpCisjZGVmaW5lCUlNUl9UWEVSUgkJCUJJVCgxMSkKKyNkZWZpbmUJSU1SX1JYRVJSCQkJQklUKDEwKQorI2RlZmluZQlJTVJfQzJIQ01ECQkJQklUKDkpCisjZGVmaW5lCUlNUl9DUFdNCQkJQklUKDgpCiAvKiBSU1ZEIFsyLTddICovCi0jZGVmaW5lCUlNUl9PQ1BJTlQJCQlCSVQxCi0jZGVmaW5lCUlNUl9XTEFOT0ZGCQkJQklUMAorI2RlZmluZQlJTVJfT0NQSU5UCQkJQklUKDEpCisjZGVmaW5lCUlNUl9XTEFOT0ZGCQkJQklUKDApCiAKIAogLyogICAgICAgIDgxOTJDIEVFUFJPTS9FRlVTRSBzaGFyZSByZWdpc3RlciBkZWZpbml0aW9uLiAqLwpAQCAtOTEzLDM1ICs5MTMsMzUgQEAKIC8qICAqLwogLyogODE5MkMgKFJDUikgUmVjZWl2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCShPZmZzZXQgMHg2MDgsIDMyIGJpdHMpICovCiAvKiAgKi8KLSNkZWZpbmUJUkNSX0FQUEZDUwkJCUJJVDMxIC8qIFdNQUMgYXBwZW5kIEZDUyBhZnRlciBwYXlsb2FkKi8KLSNkZWZpbmUJUkNSX0FQUF9NSUMJCQlCSVQzMAotI2RlZmluZQlSQ1JfQVBQX1BIWVNUUwkJCUJJVDI4Ci0jZGVmaW5lCVJDUl9BUFBfSUNWCQkJQklUMjkKLSNkZWZpbmUJUkNSX0FQUF9QSFlTVF9SWEZGCQlCSVQyOAotI2RlZmluZQlSQ1JfQVBQX0JBX1NTTgkJCUJJVDI3IC8qIEFjY2VwdCBCQSBTU04gKi8KLSNkZWZpbmUJUkNSX0VOTUJJRAkJCUJJVDI0IC8qIEVuYWJsZSBNdWx0aXBsZSBCc3NJZC4gKi8KLSNkZWZpbmUJUkNSX0xTSUdFTgkJCUJJVDIzCi0jZGVmaW5lCVJDUl9NRkJFTgkJCUJJVDIyCi0jZGVmaW5lCVJDUl9IVENfTE9DX0NUUkwJCUJJVDE0IC8qIE1GQzwtLUhUQz0xIE1GQy0tPkhUQz0wICovCi0jZGVmaW5lCVJDUl9BTUYJCQkJQklUMTMgLyogQWNjZXB0IG1hbmFnZW1lbnQgdHlwZSBmcmFtZSAqLwotI2RlZmluZQlSQ1JfQUNGCQkJCUJJVDEyIC8qIEFjY2VwdCBjb250cm9sIHR5cGUgZnJhbWUgKi8KLSNkZWZpbmUJUkNSX0FERgkJCQlCSVQxMSAvKiBBY2NlcHQgZGF0YSB0eXBlIGZyYW1lICovCi0jZGVmaW5lCVJDUl9BSUNWCQkJQklUOSAgLyogQWNjZXB0IElDViBlcnJvciBwYWNrZXQgKi8KLSNkZWZpbmUJUkNSX0FDUkMzMgkJCUJJVDggIC8qIEFjY2VwdCBDUkMzMiBlcnJvciBwYWNrZXQgKi8KLSNkZWZpbmUJUkNSX0NCU1NJRF9CQ04JCQlCSVQ3ICAvKiBBY2NlcHQgQlNTSUQgbWF0Y2ggcGFja2V0CisjZGVmaW5lCVJDUl9BUFBGQ1MJCQlCSVQoMzEpIC8qIFdNQUMgYXBwZW5kIEZDUyBhZnRlciBwYXlsb2FkKi8KKyNkZWZpbmUJUkNSX0FQUF9NSUMJCQlCSVQoMzApCisjZGVmaW5lCVJDUl9BUFBfUEhZU1RTCQkJQklUKDI4KQorI2RlZmluZQlSQ1JfQVBQX0lDVgkJCUJJVCgyOSkKKyNkZWZpbmUJUkNSX0FQUF9QSFlTVF9SWEZGCQlCSVQoMjgpCisjZGVmaW5lCVJDUl9BUFBfQkFfU1NOCQkJQklUKDI3KSAvKiBBY2NlcHQgQkEgU1NOICovCisjZGVmaW5lCVJDUl9FTk1CSUQJCQlCSVQoMjQpIC8qIEVuYWJsZSBNdWx0aXBsZSBCc3NJZC4gKi8KKyNkZWZpbmUJUkNSX0xTSUdFTgkJCUJJVCgyMykKKyNkZWZpbmUJUkNSX01GQkVOCQkJQklUKDIyKQorI2RlZmluZQlSQ1JfSFRDX0xPQ19DVFJMCQlCSVQoMTQpIC8qIE1GQzwtLUhUQz0xIE1GQy0tPkhUQz0wICovCisjZGVmaW5lCVJDUl9BTUYJCQkJQklUKDEzKSAvKiBBY2NlcHQgbWFuYWdlbWVudCB0eXBlIGZyYW1lICovCisjZGVmaW5lCVJDUl9BQ0YJCQkJQklUKDEyKSAvKiBBY2NlcHQgY29udHJvbCB0eXBlIGZyYW1lICovCisjZGVmaW5lCVJDUl9BREYJCQkJQklUKDExKSAvKiBBY2NlcHQgZGF0YSB0eXBlIGZyYW1lICovCisjZGVmaW5lCVJDUl9BSUNWCQkJQklUKDkpICAvKiBBY2NlcHQgSUNWIGVycm9yIHBhY2tldCAqLworI2RlZmluZQlSQ1JfQUNSQzMyCQkJQklUKDgpICAvKiBBY2NlcHQgQ1JDMzIgZXJyb3IgcGFja2V0ICovCisjZGVmaW5lCVJDUl9DQlNTSURfQkNOCQkJQklUKDcpICAvKiBBY2NlcHQgQlNTSUQgbWF0Y2ggcGFja2V0CiAJCQkJCQkgKFJ4IGJlYWNvbiwgcHJvYmUgcnNwKSAqLwotI2RlZmluZQlSQ1JfQ0JTU0lEX0RBVEEJCQlCSVQ2ICAvKiBBY2NlcHQgQlNTSUQgbWF0Y2ggcGFja2V0CisjZGVmaW5lCVJDUl9DQlNTSURfREFUQQkJCUJJVCg2KSAgLyogQWNjZXB0IEJTU0lEIG1hdGNoIHBhY2tldAogCQkJCQkJIChEYXRhKSAqLwogI2RlZmluZQlSQ1JfQ0JTU0lECQkJUkNSX0NCU1NJRF9EQVRBCS8qIEFjY2VwdCBCU1NJRCBtYXRjaAogCQkJCQkJCSAgIHBhY2tldCAqLwotI2RlZmluZQlSQ1JfQVBXUk1HVAkJCUJJVDUgIC8qIEFjY2VwdCBwb3dlciBtYW5hZ2VtZW50CisjZGVmaW5lCVJDUl9BUFdSTUdUCQkJQklUKDUpICAvKiBBY2NlcHQgcG93ZXIgbWFuYWdlbWVudAogCQkJCQkJIHBhY2tldCAqLwotI2RlZmluZQlSQ1JfQUREMwkJCUJJVDQgIC8qIEFjY2VwdCBhZGRyZXNzIDMgbWF0Y2gKKyNkZWZpbmUJUkNSX0FERDMJCQlCSVQoNCkgIC8qIEFjY2VwdCBhZGRyZXNzIDMgbWF0Y2gKIAkJCQkJCSBwYWNrZXQgKi8KLSNkZWZpbmUJUkNSX0FCCQkJCUJJVDMgIC8qIEFjY2VwdCBicm9hZGNhc3QgcGFja2V0ICovCi0jZGVmaW5lCVJDUl9BTQkJCQlCSVQyICAvKiBBY2NlcHQgbXVsdGljYXN0IHBhY2tldCAqLwotI2RlZmluZQlSQ1JfQVBNCQkJCUJJVDEgIC8qIEFjY2VwdCBwaHlzaWNhbCBtYXRjaCBwYWNrZXQgKi8KLSNkZWZpbmUJUkNSX0FBUAkJCQlCSVQwICAvKiBBY2NlcHQgYWxsIHVuaWNhc3QgcGFja2V0ICovCisjZGVmaW5lCVJDUl9BQgkJCQlCSVQoMykgIC8qIEFjY2VwdCBicm9hZGNhc3QgcGFja2V0ICovCisjZGVmaW5lCVJDUl9BTQkJCQlCSVQoMikgIC8qIEFjY2VwdCBtdWx0aWNhc3QgcGFja2V0ICovCisjZGVmaW5lCVJDUl9BUE0JCQkJQklUKDEpICAvKiBBY2NlcHQgcGh5c2ljYWwgbWF0Y2ggcGFja2V0ICovCisjZGVmaW5lCVJDUl9BQVAJCQkJQklUKDApICAvKiBBY2NlcHQgYWxsIHVuaWNhc3QgcGFja2V0ICovCiAjZGVmaW5lCVJDUl9NWERNQV9PRkZTRVQJCTgKICNkZWZpbmUJUkNSX0ZJRk9fT0ZGU0VUCQkJMTMKIApAQCAtMTcxNCwzMyArMTcxNCwzMyBAQAogCiAvKiAyUkVHX01VTFRJX0ZVTkNfQ1RSTChGb3IgUlRMODcyMyBPbmx5KSAqLwogCS8qICBFbmFibGUgR1BJT1s5XSBhcyBXaUZpIEhXIFBEbiBzb3VyY2UgKi8KLSNkZWZpbmUJV0xfSFdQRE5fRU4JCQlCSVQwCisjZGVmaW5lCVdMX0hXUEROX0VOCQkJQklUKDApCiAJLyogIFdpRmkgSFcgUERuIHBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJV0xfSFdQRE5fU0wJCQlCSVQxCisjZGVmaW5lCVdMX0hXUEROX1NMCQkJQklUKDEpCiAJLyogIFdpRmkgZnVuY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lCVdMX0ZVTkNfRU4JCQlCSVQyCisjZGVmaW5lCVdMX0ZVTkNfRU4JCQlCSVQoMikKIAkvKiAgRW5hYmxlIEdQSU9bOV0gYXMgV2lGaSBSRiBIVyBQRG4gc291cmNlICovCi0jZGVmaW5lCVdMX0hXUk9GX0VOCQkJQklUMworI2RlZmluZQlXTF9IV1JPRl9FTgkJCUJJVCgzKQogCS8qICBFbmFibGUgR1BJT1sxMV0gYXMgQlQgSFcgUERuIHNvdXJjZSAqLwotI2RlZmluZQlCVF9IV1BETl9FTgkJCUJJVDE2CisjZGVmaW5lCUJUX0hXUEROX0VOCQkJQklUKDE2KQogCS8qICBCVCBIVyBQRG4gcG9sYXJpdHkgY29udHJvbCAqLwotI2RlZmluZQlCVF9IV1BETl9TTAkJCUJJVDE3CisjZGVmaW5lCUJUX0hXUEROX1NMCQkJQklUKDE3KQogCS8qICBCVCBmdW5jdGlvbiBlbmFibGUgKi8KLSNkZWZpbmUJQlRfRlVOQ19FTgkJCUJJVDE4CisjZGVmaW5lCUJUX0ZVTkNfRU4JCQlCSVQoMTgpCiAJLyogIEVuYWJsZSBHUElPWzExXSBhcyBCVC9HUFMgUkYgSFcgUERuIHNvdXJjZSAqLwotI2RlZmluZQlCVF9IV1JPRl9FTgkJCUJJVDE5CisjZGVmaW5lCUJUX0hXUk9GX0VOCQkJQklUKDE5KQogCS8qICBFbmFibGUgR1BJT1sxMF0gYXMgR1BTIEhXIFBEbiBzb3VyY2UgKi8KLSNkZWZpbmUJR1BTX0hXUEROX0VOCQkJQklUMjAKKyNkZWZpbmUJR1BTX0hXUEROX0VOCQkJQklUKDIwKQogCS8qICBHUFMgSFcgUERuIHBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJR1BTX0hXUEROX1NMCQkJQklUMjEKKyNkZWZpbmUJR1BTX0hXUEROX1NMCQkJQklUKDIxKQogCS8qICBHUFMgZnVuY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lCUdQU19GVU5DX0VOCQkJQklUMjIKKyNkZWZpbmUJR1BTX0ZVTkNfRU4JCQlCSVQoMjIpCiAKIC8qIDMgUkVHX0xJRkVDVFJMX0NUUkwgKi8KLSNkZWZpbmUJSEFMOTJDX0VOX1BLVF9MSUZFX1RJTUVfQksJQklUMwotI2RlZmluZQlIQUw5MkNfRU5fUEtUX0xJRkVfVElNRV9CRQlCSVQyCi0jZGVmaW5lCUhBTDkyQ19FTl9QS1RfTElGRV9USU1FX1ZJCUJJVDEKLSNkZWZpbmUJSEFMOTJDX0VOX1BLVF9MSUZFX1RJTUVfVk8JQklUMAorI2RlZmluZQlIQUw5MkNfRU5fUEtUX0xJRkVfVElNRV9CSwlCSVQoMykKKyNkZWZpbmUJSEFMOTJDX0VOX1BLVF9MSUZFX1RJTUVfQkUJQklUKDIpCisjZGVmaW5lCUhBTDkyQ19FTl9QS1RfTElGRV9USU1FX1ZJCUJJVCgxKQorI2RlZmluZQlIQUw5MkNfRU5fUEtUX0xJRkVfVElNRV9WTwlCSVQoMCkKIAogI2RlZmluZQlIQUw5MkNfTVNEVV9MSUZFX1RJTUVfVU5JVAkxMjgJLyogIGluIHVzLCBzYWlkIGJ5IFRpbS4gKi8KIApAQCAtMTkzMyw3ICsxOTMzLDcgQEAKIAkJCQkJIEhTSVNSX0dQSU85X0lOVCkKIAogLyogMiBNQ1VGV0RMICovCi0jZGVmaW5lIFJBTV9ETF9TRUwJCQlCSVQ3CS8qICAxOlJBTSwgMDpST00gKi8KKyNkZWZpbmUgUkFNX0RMX1NFTAkJCUJJVCg3KQkvKiAgMTpSQU0sIDA6Uk9NICovCiAKIC8qIDIgSFBPTl9GU00gKi8KIApAQCAtMjA4Myw2MCArMjA4Myw2MCBAQAogCiAKIC8qIFVTQiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUJVUhJTVJfVElNRU9VVDIJCQlCSVQzMQotI2RlZmluZQlVSElNUl9USU1FT1VUMQkJCUJJVDMwCi0jZGVmaW5lCVVISU1SX1BTVElNRU9VVAkJCUJJVDI5Ci0jZGVmaW5lCVVISU1SX0dUSU5UNAkJCUJJVDI4Ci0jZGVmaW5lCVVISU1SX0dUSU5UMwkJCUJJVDI3Ci0jZGVmaW5lCVVISU1SX1RYQkNORVJSCQkJQklUMjYKLSNkZWZpbmUJVUhJTVJfVFhCQ05PSwkJCUJJVDI1Ci0jZGVmaW5lCVVISU1SX1RTRl9CSVQzMl9UT0dHTEUJCUJJVDI0Ci0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDMJCUJJVDIzCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDIJCUJJVDIyCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDEJCUJJVDIxCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDAJCUJJVDIwCi0jZGVmaW5lCVVISU1SX0JDTkRPSzMJCQlCSVQxOQotI2RlZmluZQlVSElNUl9CQ05ET0syCQkJQklUMTgKLSNkZWZpbmUJVUhJTVJfQkNORE9LMQkJCUJJVDE3Ci0jZGVmaW5lCVVISU1SX0JDTkRPSzAJCQlCSVQxNgotI2RlZmluZQlVSElNUl9IU0lTUl9JTkQJCQlCSVQxNQotI2RlZmluZQlVSElNUl9CQ05ETUFJTlRfRQkJQklUMTQKLS8qIFJTVkQJQklUMTMgKi8KLSNkZWZpbmUJVUhJTVJfQ1RXX0VORAkJCUJJVDEyCi0vKiBSU1ZECUJJVDExICovCi0jZGVmaW5lCVVISU1SX0MySENNRAkJCUJJVDEwCi0jZGVmaW5lCVVISU1SX0NQV00yCQkJQklUOQotI2RlZmluZQlVSElNUl9DUFdNCQkJQklUOAotI2RlZmluZQlVSElNUl9ISUdIRE9LCQkJQklUNwkvKiAgSGlnaCBRdWV1ZSBETUEgT0sKKyNkZWZpbmUJVUhJTVJfVElNRU9VVDIJCQlCSVQoMzEpCisjZGVmaW5lCVVISU1SX1RJTUVPVVQxCQkJQklUKDMwKQorI2RlZmluZQlVSElNUl9QU1RJTUVPVVQJCQlCSVQoMjkpCisjZGVmaW5lCVVISU1SX0dUSU5UNAkJCUJJVCgyOCkKKyNkZWZpbmUJVUhJTVJfR1RJTlQzCQkJQklUKDI3KQorI2RlZmluZQlVSElNUl9UWEJDTkVSUgkJCUJJVCgyNikKKyNkZWZpbmUJVUhJTVJfVFhCQ05PSwkJCUJJVCgyNSkKKyNkZWZpbmUJVUhJTVJfVFNGX0JJVDMyX1RPR0dMRQkJQklUKDI0KQorI2RlZmluZQlVSElNUl9CQ05ETUFJTlQzCQlCSVQoMjMpCisjZGVmaW5lCVVISU1SX0JDTkRNQUlOVDIJCUJJVCgyMikKKyNkZWZpbmUJVUhJTVJfQkNORE1BSU5UMQkJQklUKDIxKQorI2RlZmluZQlVSElNUl9CQ05ETUFJTlQwCQlCSVQoMjApCisjZGVmaW5lCVVISU1SX0JDTkRPSzMJCQlCSVQoMTkpCisjZGVmaW5lCVVISU1SX0JDTkRPSzIJCQlCSVQoMTgpCisjZGVmaW5lCVVISU1SX0JDTkRPSzEJCQlCSVQoMTcpCisjZGVmaW5lCVVISU1SX0JDTkRPSzAJCQlCSVQoMTYpCisjZGVmaW5lCVVISU1SX0hTSVNSX0lORAkJCUJJVCgxNSkKKyNkZWZpbmUJVUhJTVJfQkNORE1BSU5UX0UJCUJJVCgxNCkKKy8qIFJTVkQJQklUKDEzKSAqLworI2RlZmluZQlVSElNUl9DVFdfRU5ECQkJQklUKDEyKQorLyogUlNWRAlCSVQoMTEpICovCisjZGVmaW5lCVVISU1SX0MySENNRAkJCUJJVCgxMCkKKyNkZWZpbmUJVUhJTVJfQ1BXTTIJCQlCSVQoOSkKKyNkZWZpbmUJVUhJTVJfQ1BXTQkJCUJJVCg4KQorI2RlZmluZQlVSElNUl9ISUdIRE9LCQkJQklUKDcpCS8qICBIaWdoIFF1ZXVlIERNQSBPSwogCQkJCQkJICAgIEludGVycnVwdCAqLwotI2RlZmluZQlVSElNUl9NR05URE9LCQkJQklUNgkvKiAgTWFuYWdlbWVudCBRdWV1ZSBETUEgT0sKKyNkZWZpbmUJVUhJTVJfTUdOVERPSwkJCUJJVCg2KQkvKiAgTWFuYWdlbWVudCBRdWV1ZSBETUEgT0sKIAkJCQkJCSAgICBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJVUhJTVJfQktET0sJCQlCSVQ1CS8qICBBQ19CSyBETUEgT0sgSW50ZXJydXB0ICovCi0jZGVmaW5lCVVISU1SX0JFRE9LCQkJQklUNAkvKiAgQUNfQkUgRE1BIE9LIEludGVycnVwdCAqLwotI2RlZmluZQlVSElNUl9WSURPSwkJCUJJVDMJLyogIEFDX1ZJIERNQSBPSyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJVUhJTVJfVk9ET0sJCQlCSVQyCS8qICBBQ19WTyBETUEgSW50ZXJydXB0ICovCi0jZGVmaW5lCVVISU1SX1JEVQkJCUJJVDEJLyogIFJlY2VpdmUgRGVzY3JpcHRvcgorI2RlZmluZQlVSElNUl9CS0RPSwkJCUJJVCg1KQkvKiAgQUNfQksgRE1BIE9LIEludGVycnVwdCAqLworI2RlZmluZQlVSElNUl9CRURPSwkJCUJJVCg0KQkvKiAgQUNfQkUgRE1BIE9LIEludGVycnVwdCAqLworI2RlZmluZQlVSElNUl9WSURPSwkJCUJJVCgzKQkvKiAgQUNfVkkgRE1BIE9LIEludGVycnVwdCAqLworI2RlZmluZQlVSElNUl9WT0RPSwkJCUJJVCgyKQkvKiAgQUNfVk8gRE1BIEludGVycnVwdCAqLworI2RlZmluZQlVSElNUl9SRFUJCQlCSVQoMSkJLyogIFJlY2VpdmUgRGVzY3JpcHRvcgogCQkJCQkJICAgIFVuYXZhaWxhYmxlICovCi0jZGVmaW5lCVVISU1SX1JPSwkJCUJJVDAJLyogIFJlY2VpdmUgRE1BIE9LIEludGVycnVwdCAqLworI2RlZmluZQlVSElNUl9ST0sJCQlCSVQoMCkJLyogIFJlY2VpdmUgRE1BIE9LIEludGVycnVwdCAqLwogCiAvKiAgVVNCIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBFeHRlbnNpb24gYml0ICovCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDcJCUJJVDIzCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDYJCUJJVDIyCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDUJCUJJVDIxCi0jZGVmaW5lCVVISU1SX0JDTkRNQUlOVDQJCUJJVDIwCi0jZGVmaW5lCVVISU1SX0JDTkRPSzcJCQlCSVQxOQotI2RlZmluZQlVSElNUl9CQ05ET0s2CQkJQklUMTgKLSNkZWZpbmUJVUhJTVJfQkNORE9LNQkJCUJJVDE3Ci0jZGVmaW5lCVVISU1SX0JDTkRPSzQJCQlCSVQxNgorI2RlZmluZQlVSElNUl9CQ05ETUFJTlQ3CQlCSVQoMjMpCisjZGVmaW5lCVVISU1SX0JDTkRNQUlOVDYJCUJJVCgyMikKKyNkZWZpbmUJVUhJTVJfQkNORE1BSU5UNQkJQklUKDIxKQorI2RlZmluZQlVSElNUl9CQ05ETUFJTlQ0CQlCSVQoMjApCisjZGVmaW5lCVVISU1SX0JDTkRPSzcJCQlCSVQoMTkpCisjZGVmaW5lCVVISU1SX0JDTkRPSzYJCQlCSVQoMTgpCisjZGVmaW5lCVVISU1SX0JDTkRPSzUJCQlCSVQoMTcpCisjZGVmaW5lCVVISU1SX0JDTkRPSzQJCQlCSVQoMTYpCiAvKiAgYml0MTQtMTU6IFJTVkQgKi8KLSNkZWZpbmUJVUhJTVJfQVRJTUVORF9FCQkJQklUMTMKLSNkZWZpbmUJVUhJTVJfQVRJTUVORAkJCUJJVDEyCi0jZGVmaW5lCVVISU1SX1RYRVJSCQkJQklUMTEKLSNkZWZpbmUJVUhJTVJfUlhFUlIJCQlCSVQxMAotI2RlZmluZQlVSElNUl9UWEZPVlcJCQlCSVQ5Ci0jZGVmaW5lCVVISU1SX1JYRk9WVwkJCUJJVDgKKyNkZWZpbmUJVUhJTVJfQVRJTUVORF9FCQkJQklUKDEzKQorI2RlZmluZQlVSElNUl9BVElNRU5ECQkJQklUKDEyKQorI2RlZmluZQlVSElNUl9UWEVSUgkJCUJJVCgxMSkKKyNkZWZpbmUJVUhJTVJfUlhFUlIJCQlCSVQoMTApCisjZGVmaW5lCVVISU1SX1RYRk9WVwkJCUJJVCg5KQorI2RlZmluZQlVSElNUl9SWEZPVlcJCQlCSVQoOCkKIC8qICBiaXQyLTc6IFJTVkQgKi8KLSNkZWZpbmUJVUhJTVJfT0NQSU5UCQkJQklUMQorI2RlZmluZQlVSElNUl9PQ1BJTlQJCQlCSVQoMSkKIC8qICBiaXQwOiBSU1ZEICovCiAKICNkZWZpbmUJUkVHX1VTQl9ISU1SCQkJMHhGRTM4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfeG1pdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0bDg3MjNhX3htaXQuaAppbmRleCAzYjZmZGMzLi43OTg4M2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnRsODcyM2FfeG1pdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydGw4NzIzYV94bWl0LmgKQEAgLTIxNiwxNCArMjE2LDEyIEBACiB2b2lkIHJ0bDg3MjNhX3VwZGF0ZV90eGRlc2Moc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUsIHU4ICpwbWVtKTsKIHZvaWQgcnRsODcyM2FfZmlsbF9mYWtlX3R4ZGVzYyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcERlc2MsIHUzMiBCdWZmZXJMZW4sIHU4IElzUHNQb2xsLCB1OCBJc0JUUW9zTnVsbCk7CiAKLXMzMglydGw4NzIzYXVfaGFsX3htaXRmcmFtZV9lbnF1ZXVlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKTsKK2ludCBydGw4NzIzYXVfaGFsX3htaXRmcmFtZV9lbnF1ZXVlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKTsKIHMzMiBydGw4NzIzYXVfeG1pdF9idWZfaGFuZGxlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKICNkZWZpbmUgaGFsX3htaXRfaGFuZGxlciBydGw4NzIzYXVfeG1pdF9idWZfaGFuZGxlcgotczMyCXJ0bDg3MjNhdV9pbml0X3htaXRfcHJpdihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7Ci12b2lkCXJ0bDg3MjNhdV9mcmVlX3htaXRfcHJpdihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlcik7Ci1zMzIgcnRsODcyM2F1X2hhbF94bWl0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lKTsKLXMzMiBydGw4NzIzYXVfbWdudF94bWl0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lKTsKLXMzMiBydGw4NzIzYXVfeG1pdGZyYW1lX2NvbXBsZXRlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1Zik7Citib29sIHJ0bDg3MjNhdV9oYWxfeG1pdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSk7CitpbnQgcnRsODcyM2F1X21nbnRfeG1pdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZSk7Citib29sIHJ0bDg3MjNhdV94bWl0ZnJhbWVfY29tcGxldGUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2LCBzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmKTsKIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfYXAuaAppbmRleCA3NmY4MmQ2Li44ZDliZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2FwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19hcC5oCkBAIC0yMiw4ICsyMiw2IEBACiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAKIC8qIGV4dGVybmFsIGZ1bmN0aW9uICovCi12b2lkIHJ0d19pbmRpY2F0ZV9zdGFfYXNzb2NfZXZlbnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhKTsKLXZvaWQgcnR3X2luZGljYXRlX3N0YV9kaXNhc3NvY19ldmVudDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpOwogCiB2b2lkIGluaXRfbWxtZV9hcF9pbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBmcmVlX21sbWVfYXBfaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKQEAgLTM0LDcgKzMyLDcgQEAKIHZvaWQgYWRkX1JBVGlkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSwgdTggcnNzaV9sZXZlbCk7CiB2b2lkIGV4cGlyZV90aW1lb3V0X2NoazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgdXBkYXRlX3N0YV9pbmZvMjNhX2FwbW9kZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpOwotaW50IHJ0d19jaGVja19iZWFjb25fZGF0YTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1ZiwgIGludCBsZW4pOworaW50IHJ0d19jaGVja19iZWFjb25fZGF0YTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CiB2b2lkIHJ0d19hcF9yZXN0b3JlX25ldHdvcmsoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIHJ0d19zZXRfbWFjYWRkcl9hY2wyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgaW50IG1vZGUpOwogaW50IHJ0d19hY2xfYWRkX3N0YTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19jbWQuaAppbmRleCBmOWNhYTNlLi5jNDkyMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2NtZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfY21kLmgKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlIDxpZWVlODAyMTEuaD4gLyogIDxpZWVlODAyMTEvaWVlZTgwMjExLmg+ICovCiAKIAotI2RlZmluZSBGUkVFX0NNRE9CSl9TWgkxMjgKLQogI2RlZmluZSBNQVhfQ01EU1oJMTAyNAogI2RlZmluZSBNQVhfUlNQU1oJNTEyCiAjZGVmaW5lIE1BWF9FVlRTWgkxMDI0CkBAIC0zNCw1MCArMzIsMzMgQEAKICNkZWZpbmUgQ01EQlVGRl9BTElHTl9TWiA1MTIKIAogc3RydWN0IGNtZF9vYmogeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXI7CiAJdTE2CWNtZGNvZGU7Ci0JdTgJcmVzOwotCXU4CSpwYXJtYnVmOworCWludAlyZXM7CiAJdTMyCWNtZHN6OworCXU4CSpwYXJtYnVmOwogCXU4CSpyc3A7CiAJdTMyCXJzcHN6OwotCS8qIHN0cnVjdCBzZW1hcGhvcmUJCWNtZF9zZW07ICovCi0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKIAogc3RydWN0IGNtZF9wcml2IHsKLQlzdHJ1Y3Qgc2VtYXBob3JlCWNtZF9xdWV1ZV9zZW1hOwotCS8qIHN0cnVjdCBzZW1hcGhvcmUJY21kX2RvbmVfc2VtYTsgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCXRlcm1pbmF0ZV9jbWR0aHJlYWRfc2VtYTsKLQlzdHJ1Y3QgcnR3X3F1ZXVlCWNtZF9xdWV1ZTsKLQl1OAljbWRfc2VxOwotCXU4CSpjbWRfYnVmOwkvKiBzaGFsbCBiZSBub24tcGFnZWQsIGFuZCA0IGJ5dGVzIGFsaWduZWQgKi8KLQl1OAkqY21kX2FsbG9jYXRlZF9idWY7Ci0JdTgJKnJzcF9idWY7CS8qIHNoYWxsIGJlIG5vbi1wYWdlZCwgYW5kIDQgYnl0ZXMgYWxpZ25lZCAqLwotCXU4CSpyc3BfYWxsb2NhdGVkX2J1ZjsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJdTMyCWNtZF9pc3N1ZWRfY250OwogCXUzMgljbWRfZG9uZV9jbnQ7CiAJdTMyCXJzcF9jbnQ7Ci0JdTggY21kdGhkX3J1bm5pbmc7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcjsKIH07CiAKICNkZWZpbmUgQzJIX1FVRVVFX01BWF9MRU4gMTAKIAogc3RydWN0CWV2dF9wcml2IHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYzJoX3drOwotCWJvb2wgYzJoX3drX2FsaXZlOwotCXN0cnVjdCBydHdfY2J1ZiAqYzJoX3F1ZXVlOwotCi0JYXRvbWljX3QgZXZlbnRfc2VxOwotCXU4CSpldnRfYnVmOwkvKiBzaGFsbCBiZSBub24tcGFnZWQsIGFuZCA0IGJ5dGVzIGFsaWduZWQgKi8KLQl1OAkqZXZ0X2FsbG9jYXRlZF9idWY7Ci0JdTMyCWV2dF9kb25lX2NudDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJc3RydWN0IHdvcmtfc3RydWN0IGlycV93azsKIH07CiAKICNkZWZpbmUgaW5pdF9oMmZ3Y21kX3dfcGFybV9ub19yc3AocGNtZCwgcHBhcm0sIGNvZGUpIFwKIGRvIHtcCi0JSU5JVF9MSVNUX0hFQUQoJnBjbWQtPmxpc3QpO1wKIAlwY21kLT5jbWRjb2RlID0gY29kZTtcCiAJcGNtZC0+cGFybWJ1ZiA9ICh1OCAqKShwcGFybSk7XAogCXBjbWQtPmNtZHN6ID0gc2l6ZW9mICgqcHBhcm0pO1wKQEAgLTkyLDIzICs3MywzNSBAQAogCXU4IHBheWxvYWRbMF07CiB9OwogCisvKgorICogRG8gbm90IHJlb3JkZXIgLSB0aGlzIGFsbG93cyBmb3Igc3RydWN0IGV2dF93b3JrIHRvIGJlIHBhc3NlZCBvbiB0bworICogcnR3X2MyaF93a19jbWQyM2EoKSBhcyBhICdzdHJ1Y3QgYzJoX2V2dF9oZHIgKicgd2l0aG91dCBtYWtpbmcgYW4KKyAqIGFkZGl0aW9uYWwgY29weS4KKyAqLworc3RydWN0IGV2dF93b3JrIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBjMmhfZXZ0X2hkciBjMmhfZXZ0OworCQl1OCBidWZbMTZdOworCX0gdTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXI7Cit9OworCiAjZGVmaW5lIGMyaF9ldnRfZXhpc3QoYzJoX2V2dCkgKChjMmhfZXZ0KS0+aWQgfHwgKGMyaF9ldnQpLT5wbGVuKQogCi11MzIgcnR3X2VucXVldWVfY21kMjNhKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYsIHN0cnVjdCBjbWRfb2JqICpvYmopOwordm9pZCBydHdfZXZ0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworaW50IHJ0d19lbnF1ZXVlX2NtZDIzYShzdHJ1Y3QgY21kX3ByaXYgKnBjbWRwcml2LCBzdHJ1Y3QgY21kX29iaiAqb2JqKTsKIHZvaWQgcnR3X2ZyZWVfY21kX29iajIzYShzdHJ1Y3QgY21kX29iaiAqcGNtZCk7CiAKIGludCBydHdfY21kX3RocmVhZDIzYSh2b2lkICpjb250ZXh0KTsKIAogaW50IHJ0d19pbml0X2NtZF9wcml2MjNhKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYpOwotdm9pZCBydHdfZnJlZV9jbWRfcHJpdjIzYSAoc3RydWN0IGNtZF9wcml2ICpwY21kcHJpdik7CiAKIHUzMiBydHdfaW5pdF9ldnRfcHJpdjIzYSAoc3RydWN0IGV2dF9wcml2ICpwZXZ0cHJpdik7CiB2b2lkIHJ0d19mcmVlX2V2dF9wcml2MjNhIChzdHJ1Y3QgZXZ0X3ByaXYgKnBldnRwcml2KTsKIHZvaWQgcnR3X2NtZF9jbHJfaXNyMjNhKHN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYpOwogdm9pZCBydHdfZXZ0X25vdGlmeV9pc3Ioc3RydWN0IGV2dF9wcml2ICpwZXZ0cHJpdik7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLXU4IHAycF9wcm90b2NvbF93a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCBpbnQgaW50Q21kVHlwZSApOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCiAKIGVudW0gcnR3X2RydmV4dHJhX2NtZF9pZAogewpAQCAtMTc3LDggKzE3MCw3IEBACiB9OwogCiBzdHJ1Y3QJc2V0b3Btb2RlX3Bhcm0gewotCXU4CW1vZGU7Ci0JdTgJcnN2ZFszXTsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIG1vZGU7CiB9OwogCiAvKgpAQCAtMjI3LDcgKzIxOSw3IEBACiAKICovCiBzdHJ1Y3Qgc2V0a2V5X3Bhcm0gewotCXU4CWFsZ29yaXRobTsJLyogIGVuY3J5cHRpb24gYWxnb3JpdGhtLCBjb3VsZCBiZSBub25lLCB3ZXA0MCwgVEtJUCwgQ0NNUCwgd2VwMTA0ICovCisJdTMyCWFsZ29yaXRobTsJLyogIGVuY3J5cHRpb24gYWxnb3JpdGhtLCBjb3VsZCBiZSBub25lLCB3ZXA0MCwgVEtJUCwgQ0NNUCwgd2VwMTA0ICovCiAJdTgJa2V5aWQ7CiAJdTgJZ3Jwa2V5OwkJLyogIDE6IHRoaXMgaXMgdGhlIGdycGtleSBmb3IgODAyLjF4LiAwOiB0aGlzIGlzIHRoZSB1bmljYXN0IGtleSBmb3IgODAyLjF4ICovCiAJdTgJc2V0X3R4OwkJLyogIDE6IG1haW4gdHgga2V5IGZvciB3ZXAuIDA6IG90aGVyIGtleS4gKi8KQEAgLTI0NSw4ICsyMzcsOCBAQAogKi8KIHN0cnVjdCBzZXRfc3Rha2V5X3Bhcm0gewogCXU4CWFkZHJbRVRIX0FMRU5dOwotCXU4CWFsZ29yaXRobTsKIAl1OAlpZDsvKiAgY3VycmVudGx5IGZvciBlcmFzaW5nIGNhbSBlbnRyeSBpZiBhbGdvcml0aG0gPT0gX05PX1BSSVZBQ1lfICovCisJdTMyCWFsZ29yaXRobTsKIAl1OAlrZXlbMTZdOwogfTsKIApAQCAtNjg2LDUyICs2NzgsNTEgQEAKICNkZWZpbmUgSDJDX0NNRF9PVkVSRkxPVwkJMHgwNgogI2RlZmluZSBIMkNfUkVTRVJWRUQJCQkweDA3CiAKLXU4IHJ0d19zZXRhc3NvY3N0YV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHU4ICptYWNfYWRkcik7Ci11OCBydHdfc2V0c3RhbmRieV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdWludCBhY3Rpb24pOwotdTggcnR3X3NpdGVzdXJ2ZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCwgaW50IHNzaWRfbnVtLCBzdHJ1Y3QgcnR3X2llZWU4MDIxMV9jaGFubmVsICpjaCwgaW50IGNoX251bSk7Ci11OCBydHdfY3JlYXRlYnNzX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlcik7Ci11OCBydHdfY3JlYXRlYnNzX2NtZDIzYV9leChzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJzcywgdW5zaWduZWQgaW50IHN6KTsKLXU4IHJ0d19zZXRwaHlfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCB1OCBtb2RlbSwgdTggY2gpOwotdTggcnR3X3NldHN0YWtleV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHU4ICpwc3RhLCB1OCB1bmljYXN0X2tleSk7Ci11OCBydHdfY2xlYXJzdGFrZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwc3RhLCB1OCBlbnRyeSwgdTggZW5xdWV1ZSk7Ci11OCBydHdfam9pbmJzc19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHN0cnVjdCB3bGFuX25ldHdvcmsqIHBuZXR3b3JrKTsKLXU4IHJ0d19kaXNhc3NvY19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGRlYXV0aF90aW1lb3V0X21zLCBib29sIGVucXVldWUpOwotdTggcnR3X3NldG9wbW9kZV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIGVudW0gbmRpc184MDJfMTFfbmV0X2luZnJhIG5ldHdvcmt0eXBlKTsKLXU4IHJ0d19zZXRkYXRhcmF0ZV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHU4ICpyYXRlc2V0KTsKLXU4IHJ0d19zZXRiYXNpY3JhdGVfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCB1OCAqcmF0ZXNldCk7Ci11OCBydHdfc2V0YmJyZWdfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCBvZmZzZXQsIHU4IHZhbCk7Ci11OCBydHdfc2V0cmZyZWdfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCBvZmZzZXQsIHUzMiB2YWwpOwotdTggcnR3X2dldGJicmVnX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggb2Zmc2V0LCB1OCAqIHB2YWwpOwotdTggcnR3X2dldHJmcmVnX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwgdTggb2Zmc2V0LCB1OCAqIHB2YWwpOwotdTggcnR3X3NldHJmaW50ZnNfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCB1OCBtb2RlKTsKLXU4IHJ0d19zZXRydHRibF9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHN0cnVjdCBzZXRyYXRhYmxlX3Bhcm0gKnByYXRlX3RhYmxlKTsKLXU4IHJ0d19nZXRydHRibF9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHN0cnVjdCBnZXRyYXRhYmxlX3JzcCAqcHZhbCk7CitpbnQgcnR3X3NldGFzc29jc3RhX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgdTggKm1hY19hZGRyKTsKK2ludCBydHdfc2V0c3RhbmRieV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdWludCBhY3Rpb24pOworaW50IHJ0d19zaXRlc3VydmV5X2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQsIGludCBzc2lkX251bSwgc3RydWN0IHJ0d19pZWVlODAyMTFfY2hhbm5lbCAqY2gsIGludCBjaF9udW0pOworaW50IHJ0d19jcmVhdGVic3NfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyKTsKK2ludCBydHdfY3JlYXRlYnNzX2NtZDIzYV9leChzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJzcywgdW5zaWduZWQgaW50IHN6KTsKK2ludCBydHdfc2V0cGh5X2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgdTggbW9kZW0sIHU4IGNoKTsKK2ludCBydHdfc2V0c3Rha2V5X2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgdTggKnBzdGEsIHU4IHVuaWNhc3Rfa2V5KTsKK2ludCBydHdfY2xlYXJzdGFrZXlfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwc3RhLCB1OCBlbnRyeSwgdTggZW5xdWV1ZSk7CitpbnQgcnR3X2pvaW5ic3NfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCBzdHJ1Y3Qgd2xhbl9uZXR3b3JrKiBwbmV0d29yayk7CitpbnQgcnR3X2Rpc2Fzc29jX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgZGVhdXRoX3RpbWVvdXRfbXMsIGJvb2wgZW5xdWV1ZSk7CitpbnQgcnR3X3NldG9wbW9kZV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBubDgwMjExX2lmdHlwZSBpZm1vZGUpOworaW50IHJ0d19zZXRkYXRhcmF0ZV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyICAqcGFkYXB0ZXIsIHU4ICpyYXRlc2V0KTsKK2ludCBydHdfc2V0YmFzaWNyYXRlX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgdTggKnJhdGVzZXQpOworaW50IHJ0d19zZXRiYnJlZ19jbWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4IG9mZnNldCwgdTggdmFsKTsKK2ludCBydHdfc2V0cmZyZWdfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCBvZmZzZXQsIHUzMiB2YWwpOworaW50IHJ0d19nZXRiYnJlZ19jbWQoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIsIHU4IG9mZnNldCwgdTggKiBwdmFsKTsKK2ludCBydHdfZ2V0cmZyZWdfY21kKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCB1OCBvZmZzZXQsIHU4ICogcHZhbCk7CitpbnQgcnR3X3NldHJmaW50ZnNfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCB1OCBtb2RlKTsKK2ludCBydHdfc2V0cnR0YmxfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCBzdHJ1Y3Qgc2V0cmF0YWJsZV9wYXJtICpwcmF0ZV90YWJsZSk7CitpbnQgcnR3X2dldHJ0dGJsX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgc3RydWN0IGdldHJhdGFibGVfcnNwICpwdmFsKTsKIAotdTggcnR3X2dldHRzc2lfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCB1OCBvZmZzZXQsdTggKnB2YWwpOwotdTggcnR3X3NldGZ3ZGlnX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIHU4IHR5cGUpOwotdTggcnR3X3NldGZ3cmFfY21kKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggdHlwZSk7CitpbnQgcnR3X2dldHRzc2lfY21kKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCB1OCBvZmZzZXQsdTggKnB2YWwpOworaW50IHJ0d19zZXRmd2RpZ19jbWQoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCB0eXBlKTsKK2ludCBydHdfc2V0ZndyYV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCB0eXBlKTsKIAotdTggcnR3X2FkZGJhcmVxX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIHU4IHRpZCwgdTggKmFkZHIpOworaW50IHJ0d19hZGRiYXJlcV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCB0aWQsIHU4ICphZGRyKTsKIAotdTggcnR3X2R5bmFtaWNfY2hrX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHJ0d19keW5hbWljX2Noa193a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKIAotdTggcnR3X2xwc19jdHJsX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIHU4IGxwc19jdHJsX3R5cGUsIHU4IGVucXVldWUpOworaW50IHJ0d19scHNfY3RybF93a19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCBscHNfY3RybF90eXBlLCB1OCBlbnF1ZXVlKTsKIAotdTggcnR3X3BzX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIpOworaW50IHJ0d19wc19jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyKTsKIAogI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotdTggcnR3X2Noa19oaV9xdWV1ZV9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyKTsKK2ludCBydHdfY2hrX2hpX3F1ZXVlX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIpOwogI2VuZGlmCiAKLXU4IHJ0d19zZXRfY2hfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggY2gsIHU4IGJ3LCB1OCBjaF9vZmZzZXQsIHU4IGVucXVldWUpOwotdTggcnR3X3NldF9jaHBsYW5fY21kKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggY2hwbGFuLCB1OCBlbnF1ZXVlKTsKLXU4IHJ0d19sZWRfYmxpbmtfY21kKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgc3RydWN0IGxlZF84NzIzYSAqcExlZCk7Ci11OCBydHdfc2V0X2NzYV9jbWQoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCBuZXdfY2hfbm8pOwotdTggcnR3X3RkbHNfY21kKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggKmFkZHIsIHU4IG9wdGlvbik7CitpbnQgcnR3X3NldF9jaF9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyLCB1OCBjaCwgdTggYncsIHU4IGNoX29mZnNldCwgdTggZW5xdWV1ZSk7CitpbnQgcnR3X3NldF9jaHBsYW5fY21kKHN0cnVjdCBydHdfYWRhcHRlcipwYWRhcHRlciwgdTggY2hwbGFuLCB1OCBlbnF1ZXVlKTsKK2ludCBydHdfbGVkX2JsaW5rX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIHN0cnVjdCBsZWRfODcyM2EgKnBMZWQpOworaW50IHJ0d19zZXRfY3NhX2NtZChzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIsIHU4IG5ld19jaF9ubyk7CiAKLXU4IHJ0d19jMmhfd2tfY21kMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpjMmhfZXZ0KTsKK2ludCBydHdfYzJoX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqYzJoX2V2dCk7CiAKLXU4IHJ0d19kcnZleHRyYV9jbWRfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKnBidWYpOworaW50IHJ0d19kcnZleHRyYV9jbWRfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKIAogdm9pZCBydHdfc3VydmV5X2NtZF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgICpwYWRhcHRlciwgc3RydWN0IGNtZF9vYmogKnBjbWQpOwogdm9pZCBydHdfZGlzYXNzb2NfY21kMjNhX2NhbGxiYWNrKHN0cnVjdCBydHdfYWRhcHRlciAgKnBhZGFwdGVyLCBzdHJ1Y3QgY21kX29iaiAqcGNtZCk7CkBAIC04MjUsMTEgKzgxNiw2IEBACiAJTUFYX0gyQ0NNRAogfTsKIAotI2RlZmluZSBfR2V0QkJSZWdfQ01EXwkJX1JlYWRfQkJSRUdfQ01EXwotI2RlZmluZSBfU2V0QkJSZWdfQ01EXwkJX1dyaXRlX0JCUkVHX0NNRF8KLSNkZWZpbmUgX0dldFJGUmVnX0NNRF8JCV9SZWFkX1JGUkVHX0NNRF8KLSNkZWZpbmUgX1NldFJGUmVnX0NNRF8JCV9Xcml0ZV9SRlJFR19DTURfCi0KIGV4dGVybiBzdHJ1Y3QgX2NtZF9jYWxsYmFjawlydHdfY21kX2NhbGxiYWNrW107CiAKICNlbmRpZiAvKiAgX0NNRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19lZnVzZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19lZnVzZS5oCmluZGV4IGE3NzU1MDUuLjA3YmRjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfZWZ1c2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2VmdXNlLmgKQEAgLTgxLDIwICs4MSwxOSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cG9ydCBnbG9iYWwgdmFyaWFibGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdTgJZWZ1c2VfR2V0Q3VycmVudFNpemUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTE2ICpzaXplKTsKIHUxNgllZnVzZV9HZXRNYXhTaXplMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdTgJcnR3X2VmdXNlX2FjY2VzczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiUmVhZCwgdTE2IHN0YXJ0X2FkZHIsIHUxNiBjbnRzLCB1OCAqZGF0YSk7Ci11OAlydHdfZWZ1c2VfbWFwX3JlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTE2IGFkZHIsIHUxNiBjbnRzLCB1OCAqZGF0YSk7CitpbnQJcnR3X2VmdXNlX2FjY2VzczIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiUmVhZCwgdTE2IHN0YXJ0X2FkZHIsIHUxNiBjbnRzLCB1OCAqZGF0YSk7CitpbnQJcnR3X2VmdXNlX21hcF9yZWFkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUxNiBhZGRyLCB1MTYgY250cywgdTggKmRhdGEpOwogdTgJcnR3X2VmdXNlX21hcF93cml0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MTYgYWRkciwgdTE2IGNudHMsIHU4ICpkYXRhKTsKLXU4CXJ0d19CVF9lZnVzZV9tYXBfcmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MTYgYWRkciwgdTE2IGNudHMsIHU4ICpkYXRhKTsKK2ludAlydHdfQlRfZWZ1c2VfbWFwX3JlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTE2IGFkZHIsIHUxNiBjbnRzLCB1OCAqZGF0YSk7CiB1OAlydHdfQlRfZWZ1c2VfbWFwX3dyaXRlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUxNiBhZGRyLCB1MTYgY250cywgdTggKmRhdGEpOwogCiB1MTYJRWZ1c2VfR2V0Q3VycmVudFNpemUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlciwgdTggZWZ1c2VUeXBlKTsKIHU4CUVmdXNlX0NhbGN1bGF0ZVdvcmRDbnRzMjNhKHU4IHdvcmRfZW4pOwogdm9pZAlSZWFkRUZ1c2VCeXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwgdTE2IF9vZmZzZXQsIHU4ICpwYnVmKTsKIHZvaWQJRUZVU0VfR2V0RWZ1c2VEZWZpbml0aW9uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHU4IGVmdXNlVHlwZSwgdTggdHlwZSwgdm9pZCAqcE91dCk7Ci11OAllZnVzZV9PbmVCeXRlUmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1MTYgYWRkciwgdTggKmRhdGEpOwotdTgJZWZ1c2VfT25lQnl0ZVdyaXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcEFkYXB0ZXIsIHUxNiBhZGRyLCB1OCBkYXRhKTsKK2ludAllZnVzZV9PbmVCeXRlUmVhZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1MTYgYWRkciwgdTggKmRhdGEpOworaW50CWVmdXNlX09uZUJ5dGVXcml0ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBBZGFwdGVyLCB1MTYgYWRkciwgdTggZGF0YSk7CiAKIHZvaWQJRWZ1c2VfUG93ZXJTd2l0Y2gyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlcix1OAliV3JpdGUsdTgJIFB3clN0YXRlKTsKIGludAlFZnVzZV9QZ1BhY2tldFJlYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwQWRhcHRlciwgdTggb2Zmc2V0LCB1OCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2V2ZW50LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2V2ZW50LmgKaW5kZXggYmIyMDY0MC4uODA3Y2M4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19ldmVudC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfZXZlbnQuaApAQCAtMTYsOTkgKzE2LDU5IEBACiAjZGVmaW5lIF9SVFdfRVZFTlRfSF8KIAogI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KLQogI2luY2x1ZGUgPHdsYW5fYnNzZGVmLmg+CiAKIC8qCiBVc2VkIHRvIHJlcG9ydCBhIGJzcyBoYXMgYmVlbiBzY2FubmVkCi0KICovCi1zdHJ1Y3Qgc3VydmV5X2V2ZW50CXsKK3N0cnVjdCBzdXJ2ZXlfZXZlbnQgewogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4IGJzczsKIH07CiAKIC8qCiBVc2VkIHRvIHJlcG9ydCB0aGF0IHRoZSByZXF1ZXN0ZWQgc2l0ZSBzdXJ2ZXkgaGFzIGJlZW4gZG9uZS4KLQogYnNzX2NudCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBic3MgdGhhdCBoYXMgYmVlbiByZXBvcnRlZC4KLQotCiAqLwogc3RydWN0IHN1cnZleWRvbmVfZXZlbnQgewotCXVuc2lnbmVkIGludAlic3NfY250OwotCisJdW5zaWduZWQgaW50IGJzc19jbnQ7CiB9OwogCiAvKgogVXNlZCB0byByZXBvcnQgdGhlIGxpbmsgcmVzdWx0IG9mIGpvaW5uaW5nIHRoZSBnaXZlbiBic3MKLQotCiBqb2luX3JlczoKIC0xOiBhdXRoZW50aWNhdGlvbiBmYWlsCiAtMjogYXNzb2NpYXRpb24gZmFpbAogPiAwOiBUSUQKLQogKi8KIHN0cnVjdCBqb2luYnNzX2V2ZW50IHsKLQlzdHJ1Y3QJd2xhbl9uZXR3b3JrCW5ldHdvcms7CisJc3RydWN0IHdsYW5fbmV0d29yayBuZXR3b3JrOwogfTsKIAogLyoKIFVzZWQgdG8gcmVwb3J0IGEgZ2l2ZW4gU1RBIGhhcyBqb2lubmVkIHRoZSBjcmVhdGVkIEJTUy4KIEl0IGlzIHVzZWQgaW4gQVAvQWQtSG9DKE0pIG1vZGUuCi0KLQogKi8KIHN0cnVjdCBzdGFzc29jX2V2ZW50IHsKIAl1bnNpZ25lZCBjaGFyIG1hY2FkZHJbNl07CiAJdW5zaWduZWQgY2hhciByc3ZkWzJdOwotCWludCAgICBjYW1faWQ7Ci0KKwlpbnQgY2FtX2lkOwogfTsKIAogc3RydWN0IHN0YWRlbF9ldmVudCB7Ci0gdW5zaWduZWQgY2hhciBtYWNhZGRyWzZdOwotIHVuc2lnbmVkIGNoYXIgcnN2ZFsyXTsgLyogZm9yIHJlYXNvbiAqLwotIGludCBtYWNfaWQ7CisJdW5zaWduZWQgY2hhciBtYWNhZGRyWzZdOworCXVuc2lnbmVkIGNoYXIgcnN2ZFsyXTsgLyogZm9yIHJlYXNvbiAqLworCWludCBtYWNfaWQ7CiB9OwogCi1zdHJ1Y3QgYWRkYmFfZXZlbnQKLXsKK3N0cnVjdCBhZGRiYV9ldmVudCB7CiAJdW5zaWduZWQgaW50IHRpZDsKIH07CiAKICNkZWZpbmUgR0VOX0VWVF9DT0RFKGV2ZW50KQlldmVudCAjIyBfRVZUXwogCiBzdHJ1Y3QgZndldmVudCB7Ci0JdTMyCXBhcm1zaXplOwotCXZvaWQgKCpldmVudF9jYWxsYmFjaykoc3RydWN0IHJ0d19hZGFwdGVyICpkZXYsIHU4ICpwYnVmKTsKKwl1MzIgcGFybXNpemU7CisJdm9pZCAoKmV2ZW50X2NhbGxiYWNrKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmRldiwgY29uc3QgdTggKnBidWYpOwogfTsKIAotCi0jZGVmaW5lIEMySEVWRU5UX1NaCQkJMzIKLQotc3RydWN0IGV2ZW50X25vZGV7Ci0JdW5zaWduZWQgY2hhciAqbm9kZTsKLQl1bnNpZ25lZCBjaGFyIGV2dF9jb2RlOwotCXVuc2lnbmVkIHNob3J0IGV2dF9zejsKLQl2b2xhdGlsZSBpbnQJKmNhbGxlcl9mZl90YWlsOwotCWludAljYWxsZXJfZmZfc3o7Ci19OwotCi1zdHJ1Y3QgYzJoZXZlbnRfcXVldWUgewotCXZvbGF0aWxlIGludAloZWFkOwotCXZvbGF0aWxlIGludAl0YWlsOwotCXN0cnVjdAlldmVudF9ub2RlCW5vZGVzW0MySEVWRU5UX1NaXTsKLQl1bnNpZ25lZCBjaGFyCXNlcTsKLX07Ci0KLSNkZWZpbmUgTkVUV09SS19RVUVVRV9TWgk0Ci0KLXN0cnVjdCBuZXR3b3JrX3F1ZXVlIHsKLQl2b2xhdGlsZSBpbnQJaGVhZDsKLQl2b2xhdGlsZSBpbnQJdGFpbDsKLQlzdHJ1Y3Qgd2xhbl9ic3NpZF9leCBuZXR3b3Jrc1tORVRXT1JLX1FVRVVFX1NaXTsKLX07Ci0KLQogI2VuZGlmIC8qICBfV0xBTkVWRU5UX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2h0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2h0LmgKaW5kZXggN2ZlMGFhNC4uODZjZTg2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19odC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfaHQuaApAQCAtMzMsOSArMzMsOSBAQAogCXU4CXNnaTsvKiBzaG9ydCBHSSAqLwogCiAJLyogZm9yIHByb2Nlc3NpbmcgVHggQS1NUERVICovCi0JdTgJYWdnX2VuYWJsZV9iaXRtYXA7CisJdTE2CWFnZ19lbmFibGVfYml0bWFwOwogCS8qIHU4CUFEREJBX3JldHJ5X2NvdW50OyAqLwotCXU4CWNhbmRpZGF0ZV90aWRfYml0bWFwOworCXUxNgljYW5kaWRhdGVfdGlkX2JpdG1hcDsKIAogCXN0cnVjdCBpZWVlODAyMTFfaHRfY2FwIGh0X2NhcDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2lvLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2lvLmgKaW5kZXggOGQzOWQ4MDAuLmNjMTUxYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfaW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2lvLmgKQEAgLTk3LDQwICs5Nyw2IEBACiAjZGVmaW5lIF9JTlRGX0FTWU5DXwlCSVQoMCkJLyogc3VwcG9ydCBhc3luYyBpbyAqLwogCiBzdHJ1Y3QgaW50Zl9wcml2Owotc3RydWN0IGludGZfaGRsOwotc3RydWN0IGlvX3F1ZXVlOwotCi1zdHJ1Y3QgX2lvX29wcwotewotCQl1OCAoKl9yZWFkOCkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIpOwotCQl1MTYgKCpfcmVhZDE2KShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkcik7Ci0JCXUzMiAoKl9yZWFkMzIpKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyKTsKLQotCQlpbnQgKCpfd3JpdGU4KShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTggdmFsKTsKLQkJaW50ICgqX3dyaXRlMTYpKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyLCB1MTYgdmFsKTsKLQkJaW50ICgqX3dyaXRlMzIpKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyLCB1MzIgdmFsKTsKLQkJaW50ICgqX3dyaXRlTikoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBsZW5ndGgsIHU4ICpwZGF0YSk7Ci0KLQkJaW50ICgqX3dyaXRlOF9hc3luYykoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHU4IHZhbCk7Ci0JCWludCAoKl93cml0ZTE2X2FzeW5jKShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTE2IHZhbCk7Ci0JCWludCAoKl93cml0ZTMyX2FzeW5jKShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTMyIHZhbCk7Ci0KLQkJdm9pZCAoKl9yZWFkX21lbSkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBjbnQsIHU4ICpwbWVtKTsKLQkJdm9pZCAoKl93cml0ZV9tZW0pKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyLCB1MzIgY250LCB1OCAqcG1lbSk7Ci0KLQkJdm9pZCAoKl9zeW5jX2lycF9wcm90b2NvbF9ydykoc3RydWN0IGlvX3F1ZXVlICpwaW9fcSk7Ci0KLQkJdTMyICgqX3JlYWRfaW50ZXJydXB0KShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkcik7Ci0KLQkJdTMyICgqX3JlYWRfcG9ydCkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBjbnQsIHN0cnVjdCByZWN2X2J1ZiAqcmJ1Zik7Ci0JCXUzMiAoKl93cml0ZV9wb3J0KShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTMyIGNudCwgc3RydWN0IHhtaXRfYnVmICpwbWVtKTsKLQotCQl1MzIgKCpfd3JpdGVfc2NzaSkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCx1MzIgY250LCB1OCAqcG1lbSk7Ci0KLQkJdm9pZCAoKl9yZWFkX3BvcnRfY2FuY2VsKShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsKTsKLQkJdm9pZCAoKl93cml0ZV9wb3J0X2NhbmNlbCkoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCk7Ci0KLX07CiAKIHN0cnVjdCBpb19yZXEgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTE0NSwxNCArMTExLDYgQEAKIAl1OCAqY254dDsKIH07CiAKLXN0cnVjdAlpbnRmX2hkbCB7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcjsKLQlzdHJ1Y3QgZHZvYmpfcHJpdiAqcGludGZfZGV2Oy8qIAlwb2ludGVyIHRvICYocGFkYXB0ZXItPmR2b2JqcHJpdik7ICovCi0KLQlzdHJ1Y3QgX2lvX29wcwlpb19vcHM7Ci0KLX07Ci0KIHN0cnVjdCByZWdfcHJvdG9jb2xfcmQgewogCiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCkBAIC0yNjUsMTUyICsyMjMsMTUgQEAKIAogfTsKIAotCi0KLS8qCi1CZWxvdyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSBfaW9faGFuZGxlcgotCi0qLwotCi1zdHJ1Y3QgaW9fcXVldWUgewotCXNwaW5sb2NrX3QJbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfaW9yZXFzOwotCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsJCS8qIFRoZSBpb19yZXEgbGlzdCB0aGF0IHdpbGwgYmUgc2VydmVkIGluIHRoZSBzaW5nbGUgcHJvdG9jb2wgcmVhZC93cml0ZS4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHByb2Nlc3Npbmc7Ci0JdTgJKmZyZWVfaW9yZXFzX2J1ZjsgLyogIDQtYnl0ZSBhbGlnbmVkICovCi0JdTgJKnBhbGxvY2F0ZWRfZnJlZV9pb3JlcXNfYnVmOwotCXN0cnVjdAlpbnRmX2hkbAlpbnRmOwotfTsKLQotc3RydWN0IGlvX3ByaXZ7Ci0KLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyOwotCi0Jc3RydWN0IGludGZfaGRsIGludGY7Ci0KLX07Ci0KLXVpbnQgaW9yZXFfZmx1c2goc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgaW9fcXVldWUgKmlvcXVldWUpOwotdm9pZCBzeW5jX2lvcmVxX2VucXVldWUoc3RydWN0IGlvX3JlcSAqcHJlcSxzdHJ1Y3QgaW9fcXVldWUgKmlvcXVldWUpOwotdWludCBzeW5jX2lvcmVxX2ZsdXNoKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGlvX3F1ZXVlICppb3F1ZXVlKTsKLQotdWludCBmcmVlX2lvcmVxKHN0cnVjdCBpb19yZXEgKnByZXEsIHN0cnVjdCBpb19xdWV1ZSAqcGlvX3F1ZXVlKTsKLXN0cnVjdCBpb19yZXEgKmFsbG9jX2lvcmVxKHN0cnVjdCBpb19xdWV1ZSAqcGlvX3EpOwotCi11aW50IHJlZ2lzdGVyX2ludGZfaGRsKHU4ICpkZXYsIHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwpOwotdm9pZCB1bnJlZ2lzdGVyX2ludGZfaGRsKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwpOwotCi12b2lkIF9ydHdfYXR0cmliX3JlYWQoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwgdTggKnBtZW0pOwotdm9pZCBfcnR3X2F0dHJpYl93cml0ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgY250LCB1OCAqcG1lbSk7Ci0KLXU4IF9ydHdfcmVhZDgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkcik7Ci11MTYgX3J0d19yZWFkMTYyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkcik7Ci11MzIgX3J0d19yZWFkMzIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkcik7Ci12b2lkIF9ydHdfcmVhZF9tZW0yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwgdTggKnBtZW0pOwotdm9pZCBfcnR3X3JlYWRfcG9ydDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgY250LCBzdHJ1Y3QgcmVjdl9idWYgKnJidWYpOwotdm9pZCBfcnR3X3JlYWRfcG9ydDIzYV9jYW5jZWwoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKLQotaW50IF9ydHdfd3JpdGU4MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4IHZhbCk7Ci1pbnQgX3J0d193cml0ZTE2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUxNiB2YWwpOwotaW50IF9ydHdfd3JpdGUzMjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgdmFsKTsKLWludCBfcnR3X3dyaXRlTjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgbGVuZ3RoLCB1OCAqcGRhdGEpOwotCi1pbnQgX3J0d193cml0ZTgyM2FfYXN5bmMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggdmFsKTsKLWludCBfcnR3X3dyaXRlMTYyM2FfYXN5bmMoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTE2IHZhbCk7Ci1pbnQgX3J0d193cml0ZTMyMjNhX2FzeW5jMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiB2YWwpOwotCi12b2lkIF9ydHdfd3JpdGVfbWVtMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiBjbnQsIHU4ICpwbWVtKTsKLXUzMiBfcnR3X3dyaXRlX3BvcnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwgc3RydWN0IHhtaXRfYnVmICpwbWVtKTsKLXUzMiBfcnR3X3dyaXRlX3BvcnQyM2FfYW5kX3dhaXQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwgc3RydWN0IHhtaXRfYnVmICpwbWVtLCBpbnQgdGltZW91dF9tcyk7Ci12b2lkIF9ydHdfd3JpdGVfcG9ydDIzYV9jYW5jZWwoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKLQotI2lmZGVmIERCR19JTwotYm9vbCBtYXRjaF9yZWFkX3NuaWZmX3Jhbmdlcyh1MTYgYWRkciwgdTE2IGxlbik7Ci1ib29sIG1hdGNoX3dyaXRlX3NuaWZmX3Jhbmdlcyh1MTYgYWRkciwgdTE2IGxlbik7Ci0KLXU4IGRiZ19ydHdfcmVhZDgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgY29uc3QgY2hhciAqY2FsbGVyLCBjb25zdCBpbnQgbGluZSk7Ci11MTYgZGJnX3J0d19yZWFkMTYyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgY29uc3QgY2hhciAqY2FsbGVyLCBjb25zdCBpbnQgbGluZSk7Ci11MzIgZGJnX3J0d19yZWFkMzIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgY29uc3QgY2hhciAqY2FsbGVyLCBjb25zdCBpbnQgbGluZSk7Ci0KLWludCBkYmdfcnR3X3dyaXRlODIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCB2YWwsIGNvbnN0IGNoYXIgKmNhbGxlciwgY29uc3QgaW50IGxpbmUpOwotaW50IGRiZ19ydHdfd3JpdGUxNjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MTYgdmFsLCBjb25zdCBjaGFyICpjYWxsZXIsIGNvbnN0IGludCBsaW5lKTsKLWludCBkYmdfcnR3X3dyaXRlMzIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIHZhbCwgY29uc3QgY2hhciAqY2FsbGVyLCBjb25zdCBpbnQgbGluZSk7Ci1pbnQgZGJnX3J0d193cml0ZU4yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciAsdTMyIGxlbmd0aCAsIHU4ICpkYXRhLCBjb25zdCBjaGFyICpjYWxsZXIsIGNvbnN0IGludCBsaW5lKTsKLQotI2RlZmluZSBydHdfcmVhZDgoYWRhcHRlciwgYWRkcikgZGJnX3J0d19yZWFkODIzYSgoYWRhcHRlciksIChhZGRyKSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKLSNkZWZpbmUgcnR3X3JlYWQxNihhZGFwdGVyLCBhZGRyKSBkYmdfcnR3X3JlYWQxNjIzYSgoYWRhcHRlciksIChhZGRyKSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKLSNkZWZpbmUgcnR3X3JlYWQzMihhZGFwdGVyLCBhZGRyKSBkYmdfcnR3X3JlYWQzMjIzYSgoYWRhcHRlciksIChhZGRyKSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKLSNkZWZpbmUgcnR3X3JlYWRfbWVtKGFkYXB0ZXIsIGFkZHIsIGNudCwgbWVtKSBfcnR3X3JlYWRfbWVtMjNhKChhZGFwdGVyKSwgKGFkZHIpLCAoY250KSwgKG1lbSkpCi0jZGVmaW5lIHJ0d19yZWFkX3BvcnQoYWRhcHRlciwgYWRkciwgY250LCBtZW0pIF9ydHdfcmVhZF9wb3J0MjNhKChhZGFwdGVyKSwgKGFkZHIpLCAoY250KSwgKG1lbSkpCi0jZGVmaW5lIHJ0d19yZWFkX3BvcnRfY2FuY2VsKGFkYXB0ZXIpIF9ydHdfcmVhZF9wb3J0MjNhX2NhbmNlbCgoYWRhcHRlcikpCi0KLSNkZWZpbmUgIHJ0d193cml0ZTgoYWRhcHRlciwgYWRkciwgdmFsKSBkYmdfcnR3X3dyaXRlODIzYSgoYWRhcHRlciksIChhZGRyKSwgKHZhbCksIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0jZGVmaW5lICBydHdfd3JpdGUxNihhZGFwdGVyLCBhZGRyLCB2YWwpIGRiZ19ydHdfd3JpdGUxNjIzYSgoYWRhcHRlciksIChhZGRyKSwgKHZhbCksIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0jZGVmaW5lICBydHdfd3JpdGUzMihhZGFwdGVyLCBhZGRyLCB2YWwpIGRiZ19ydHdfd3JpdGUzMjIzYSgoYWRhcHRlciksIChhZGRyKSwgKHZhbCksIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0jZGVmaW5lICBydHdfd3JpdGVOKGFkYXB0ZXIsIGFkZHIsIGxlbmd0aCwgZGF0YSkgZGJnX3J0d193cml0ZU4yM2EoKGFkYXB0ZXIpLCAoYWRkciksIChsZW5ndGgpLCAoZGF0YSksIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0KLSNkZWZpbmUgcnR3X3dyaXRlOF9hc3luYyhhZGFwdGVyLCBhZGRyLCB2YWwpIF9ydHdfd3JpdGU4MjNhX2FzeW5jMjNhKChhZGFwdGVyKSwgKGFkZHIpLCAodmFsKSkKLSNkZWZpbmUgcnR3X3dyaXRlMTZfYXN5bmMoYWRhcHRlciwgYWRkciwgdmFsKSBfcnR3X3dyaXRlMTYyM2FfYXN5bmMoKGFkYXB0ZXIpLCAoYWRkciksICh2YWwpKQotI2RlZmluZSBydHdfd3JpdGUzMl9hc3luYyhhZGFwdGVyLCBhZGRyLCB2YWwpIF9ydHdfd3JpdGUzMjIzYV9hc3luYzIzYSgoYWRhcHRlciksIChhZGRyKSwgKHZhbCkpCi0KLSNkZWZpbmUgcnR3X3dyaXRlX21lbShhZGFwdGVyLCBhZGRyLCBjbnQsIG1lbSkgX3J0d193cml0ZV9tZW0yM2EoKGFkYXB0ZXIpLCBhZGRyLCBjbnQsIG1lbSkKLSNkZWZpbmUgcnR3X3dyaXRlX3BvcnQoYWRhcHRlciwgYWRkciwgY250LCBtZW0pIF9ydHdfd3JpdGVfcG9ydDIzYShhZGFwdGVyLCBhZGRyLCBjbnQsIG1lbSkKLSNkZWZpbmUgcnR3X3dyaXRlX3BvcnRfYW5kX3dhaXQoYWRhcHRlciwgYWRkciwgY250LCBtZW0sIHRpbWVvdXRfbXMpIF9ydHdfd3JpdGVfcG9ydDIzYV9hbmRfd2FpdDIzYSgoYWRhcHRlciksIChhZGRyKSwgKGNudCksIChtZW0pLCAodGltZW91dF9tcykpCi0jZGVmaW5lIHJ0d193cml0ZV9wb3J0X2NhbmNlbChhZGFwdGVyKSBfcnR3X3dyaXRlX3BvcnQyM2FfY2FuY2VsKGFkYXB0ZXIpCi0jZWxzZSAvKiBEQkdfSU8gKi8KLSNkZWZpbmUgcnR3X3JlYWQ4KGFkYXB0ZXIsIGFkZHIpIF9ydHdfcmVhZDgyM2EoKGFkYXB0ZXIpLCAoYWRkcikpCi0jZGVmaW5lIHJ0d19yZWFkMTYoYWRhcHRlciwgYWRkcikgX3J0d19yZWFkMTYyM2EoKGFkYXB0ZXIpLCAoYWRkcikpCi0jZGVmaW5lIHJ0d19yZWFkMzIoYWRhcHRlciwgYWRkcikgX3J0d19yZWFkMzIyM2EoKGFkYXB0ZXIpLCAoYWRkcikpCi0jZGVmaW5lIHJ0d19yZWFkX21lbShhZGFwdGVyLCBhZGRyLCBjbnQsIG1lbSkgX3J0d19yZWFkX21lbTIzYSgoYWRhcHRlciksIChhZGRyKSwgKGNudCksIChtZW0pKQotI2RlZmluZSBydHdfcmVhZF9wb3J0KGFkYXB0ZXIsIGFkZHIsIGNudCwgbWVtKSBfcnR3X3JlYWRfcG9ydDIzYSgoYWRhcHRlciksIChhZGRyKSwgKGNudCksIChtZW0pKQotI2RlZmluZSBydHdfcmVhZF9wb3J0X2NhbmNlbChhZGFwdGVyKSBfcnR3X3JlYWRfcG9ydDIzYV9jYW5jZWwoKGFkYXB0ZXIpKQotCi0jZGVmaW5lICBydHdfd3JpdGU4KGFkYXB0ZXIsIGFkZHIsIHZhbCkgX3J0d193cml0ZTgyM2EoKGFkYXB0ZXIpLCAoYWRkciksICh2YWwpKQotI2RlZmluZSAgcnR3X3dyaXRlMTYoYWRhcHRlciwgYWRkciwgdmFsKSBfcnR3X3dyaXRlMTYyM2EoKGFkYXB0ZXIpLCAoYWRkciksICh2YWwpKQotI2RlZmluZSAgcnR3X3dyaXRlMzIoYWRhcHRlciwgYWRkciwgdmFsKSBfcnR3X3dyaXRlMzIyM2EoKGFkYXB0ZXIpLCAoYWRkciksICh2YWwpKQotI2RlZmluZSAgcnR3X3dyaXRlTihhZGFwdGVyLCBhZGRyLCBsZW5ndGgsIGRhdGEpIF9ydHdfd3JpdGVOMjNhKChhZGFwdGVyKSwgKGFkZHIpLCAobGVuZ3RoKSwgKGRhdGEpKQotCi0jZGVmaW5lIHJ0d193cml0ZThfYXN5bmMoYWRhcHRlciwgYWRkciwgdmFsKSBfcnR3X3dyaXRlODIzYV9hc3luYzIzYSgoYWRhcHRlciksIChhZGRyKSwgKHZhbCkpCi0jZGVmaW5lIHJ0d193cml0ZTE2X2FzeW5jKGFkYXB0ZXIsIGFkZHIsIHZhbCkgX3J0d193cml0ZTE2MjNhX2FzeW5jKChhZGFwdGVyKSwgKGFkZHIpLCAodmFsKSkKLSNkZWZpbmUgcnR3X3dyaXRlMzJfYXN5bmMoYWRhcHRlciwgYWRkciwgdmFsKSBfcnR3X3dyaXRlMzIyM2FfYXN5bmMyM2EoKGFkYXB0ZXIpLCAoYWRkciksICh2YWwpKQotCi0jZGVmaW5lIHJ0d193cml0ZV9tZW0oYWRhcHRlciwgYWRkciwgY250LCBtZW0pIF9ydHdfd3JpdGVfbWVtMjNhKChhZGFwdGVyKSwgKGFkZHIpLCAoY250KSwgKG1lbSkpCi0jZGVmaW5lIHJ0d193cml0ZV9wb3J0KGFkYXB0ZXIsIGFkZHIsIGNudCwgbWVtKSBfcnR3X3dyaXRlX3BvcnQyM2EoKGFkYXB0ZXIpLCAoYWRkciksIChjbnQpLCAobWVtKSkKLSNkZWZpbmUgcnR3X3dyaXRlX3BvcnRfYW5kX3dhaXQoYWRhcHRlciwgYWRkciwgY250LCBtZW0sIHRpbWVvdXRfbXMpIF9ydHdfd3JpdGVfcG9ydDIzYV9hbmRfd2FpdDIzYSgoYWRhcHRlciksIChhZGRyKSwgKGNudCksIChtZW0pLCAodGltZW91dF9tcykpCi0jZGVmaW5lIHJ0d193cml0ZV9wb3J0X2NhbmNlbChhZGFwdGVyKSBfcnR3X3dyaXRlX3BvcnQyM2FfY2FuY2VsKChhZGFwdGVyKSkKLSNlbmRpZiAvKiBEQkdfSU8gKi8KLQotdm9pZCBydHdfd3JpdGVfc2NzaShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjbnQsIHU4ICpwbWVtKTsKLQotLyogaW9yZXEgKi8KLXZvaWQgaW9yZXFfcmVhZDgoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggKnB2YWwpOwotdm9pZCBpb3JlcV9yZWFkMTYoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTE2ICpwdmFsKTsKLXZvaWQgaW9yZXFfcmVhZDMyKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiAqcHZhbCk7Ci12b2lkIGlvcmVxX3dyaXRlOChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCB2YWwpOwotdm9pZCBpb3JlcV93cml0ZTE2KHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUxNiB2YWwpOwotdm9pZCBpb3JlcV93cml0ZTMyKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiB2YWwpOwotCi1pbnQgcnR3X2luaXRfaW9fcHJpdjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB2b2lkICgqc2V0X2ludGZfb3BzKShzdHJ1Y3QgX2lvX29wcyAqcG9wcykpOwotCi11aW50IGFsbG9jX2lvX3F1ZXVlKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGZyZWVfaW9fcXVldWUoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgYXN5bmNfYnVzX2lvKHN0cnVjdCBpb19xdWV1ZSAqcGlvX3EpOwotdm9pZCBidXNfc3luY19pbyhzdHJ1Y3QgaW9fcXVldWUgKnBpb19xKTsKLXUzMiBfaW9yZXEycndtZW0oc3RydWN0IGlvX3F1ZXVlICpwaW9fcSk7Ci12b2lkIGRldl9wb3dlcl9kb3duKHN0cnVjdCBydHdfYWRhcHRlciAqIEFkYXB0ZXIsIHU4IGJwd3J1cCk7Ci0KICNkZWZpbmUgUGxhdGZvcm1FRklPV3JpdGUxQnl0ZShfYSxfYixfYykJCVwKLQlydHdfd3JpdGU4KF9hLF9iLF9jKQorCXJ0bDg3MjNhdV93cml0ZTgoX2EsX2IsX2MpCiAjZGVmaW5lIFBsYXRmb3JtRUZJT1dyaXRlMkJ5dGUoX2EsX2IsX2MpCQlcCi0JcnR3X3dyaXRlMTYoX2EsX2IsX2MpCisJcnRsODcyM2F1X3dyaXRlMTYoX2EsX2IsX2MpCiAjZGVmaW5lIFBsYXRmb3JtRUZJT1dyaXRlNEJ5dGUoX2EsX2IsX2MpCQlcCi0JcnR3X3dyaXRlMzIoX2EsX2IsX2MpCisJcnRsODcyM2F1X3dyaXRlMzIoX2EsX2IsX2MpCiAKLSNkZWZpbmUgUGxhdGZvcm1FRklPUmVhZDFCeXRlKF9hLF9iKQkJXAotCQlydHdfcmVhZDgoX2EsX2IpCi0jZGVmaW5lIFBsYXRmb3JtRUZJT1JlYWQyQnl0ZShfYSxfYikJCVwKLQkJcnR3X3JlYWQxNihfYSxfYikKLSNkZWZpbmUgUGxhdGZvcm1FRklPUmVhZDRCeXRlKF9hLF9iKQkJXAotCQlydHdfcmVhZDMyKF9hLF9iKQorI2RlZmluZSBQbGF0Zm9ybUVGSU9SZWFkMUJ5dGUoX2EsX2IpCQlydGw4NzIzYXVfcmVhZDgoX2EsX2IpCisjZGVmaW5lIFBsYXRmb3JtRUZJT1JlYWQyQnl0ZShfYSxfYikJCXJ0bDg3MjNhdV9yZWFkMTYoX2EsX2IpCisjZGVmaW5lIFBsYXRmb3JtRUZJT1JlYWQ0Qnl0ZShfYSxfYikJCXJ0bDg3MjNhdV9yZWFkMzIoX2EsX2IpCiAKICNlbmRpZgkvKiBfUlRMODcxMV9JT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19pb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjllZWM4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfaW9jdGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfUlRXX0lPQ1RMX0hfCi0jZGVmaW5lIF9SVFdfSU9DVExfSF8KLQotI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KLSNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfV0lSRUxFU1NfRVhUKQotZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiAgcnR3X2hhbmRsZXJzX2RlZjsKLSNlbmRpZgotCi0jZW5kaWYgLyogICNpZm5kZWYgX19JTkNfQ0VJTkZPXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19pb2N0bF9zZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfaW9jdGxfc2V0LmgKaW5kZXggMThhZDJhOC4uMDQwNTQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19pb2N0bF9zZXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X2lvY3RsX3NldC5oCkBAIC0xNywyMyArMTcsMTYgQEAKIAogI2luY2x1ZGUgPGRydl90eXBlcy5oPgogCi0KLXN0cnVjdCBic3NpZF9pbmZvIHsKLQl1bnNpZ25lZCBjaGFyICBCU1NJRFs2XTsKLQl1OCAgUE1LSURbMTZdOwotfTsKLQotdTggcnR3X3NldF84MDJfMTFfYXV0aGVudGljYXRpb25fbW9kZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBkYXB0ZXIsCi0JCQkJICAgICAgZW51bSBuZGlzXzgwMl8xMV9hdXRoX21vZGUgYXV0aG1vZGUpOwotdTggcnR3X3NldF84MDJfMTFfYWRkX3dlcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwKLQkJCSAgc3RydWN0IG5kaXNfODAyXzExX3dlcCAqd2VwKTsKLXU4IHJ0d19zZXRfODAyXzExX2Jzc2lkMjNhX2xpc3Rfc2NhbihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgc3RydWN0IGNmZzgwMjExX3NzaWQgKnBzc2lkLCBpbnQgc3NpZF9tYXhfbnVtKTsKLXU4IHJ0d19zZXRfODAyXzExX2luZnJhc3RydWN0dXJlX21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgICAgICBlbnVtIG5kaXNfODAyXzExX25ldF9pbmZyYSBuZXR3b3JrdHlwZSk7Ci11OCBydHdfc2V0XzgwMl8xMV9zc2lkMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqIHBhZGFwdGVyLCBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqIHNzaWQpOworaW50IHJ0d19zZXRfODAyXzExX2F1dGhlbnRpY2F0aW9uX21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwZGFwdGVyLAorCQkJCQkgIGVudW0gbmRpc184MDJfMTFfYXV0aF9tb2RlIGF1dGhtb2RlKTsKK2ludCBydHdfc2V0XzgwMl8xMV9ic3NpZDIzYV9saXN0X3NjYW4oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcHNzaWQsCisJCQkJICAgICAgaW50IHNzaWRfbWF4X251bSk7CitpbnQgcnR3X3NldF84MDJfMTFfc3NpZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKiBwYWRhcHRlciwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zc2lkICogc3NpZCk7CiAKIHUxNiBydHdfZ2V0X2N1cl9tYXhfcmF0ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOwogczMyIEZpbGxIMkNDbWQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggRWxlbWVudElELCB1MzIgQ21kTGVuLCB1OCAqcENtZEJ1ZmZlcik7CitpbnQgcnR3X2RvX2pvaW4yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19tbG1lLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X21sbWUuaAppbmRleCAzMWY5NmYzLi40ZDMyN2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X21sbWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X21sbWUuaApAQCAtODMsMTMgKzgzLDYgQEAKIAlHSFpfMjQsCiB9OwogCi1lbnVtIFNDQU5fUkVTVUxUX1RZUEUgewotCVNDQU5fUkVTVUxUX1AyUF9PTkxZID0gMCwJLyoJV2lsbCByZXR1cm4gYWxsIHRoZSBQMlAgZGV2aWNlcy4gKi8KLQlTQ0FOX1JFU1VMVF9BTEwgPSAxLAkJLyoJV2lsbCByZXR1cm4gYWxsIHRoZSBzY2FubmVkIGRldmljZSwgaW5jbHVkZSBBUC4gKi8KLQlTQ0FOX1JFU1VMVF9XRkRfVFlQRSA9IDIJLyoJV2lsbCBqdXN0IHJldHVybiB0aGUgY29ycmVjdCBXRkQgZGV2aWNlLiAqLwotCQkJCQkvKglJZiB0aGlzIGRldmljZSBpcyBNaXJhY2FzdCBzaW5rIGRldmljZSwgaXQgd2lsbCBqdXN0IHJldHVybiBhbGwgdGhlIE1pcmFjYXN0IHNvdXJjZSBkZXZpY2VzLiAqLwotfTsKLQogLyoKIAogdGhlcmUgYXJlIHNldmVyYWwgImxvY2tzIiBpbiBtbG1lX3ByaXYsCkBAIC0xMDQsMTYgKzk3LDYgQEAKIFNIQUxMIG5vdCBsb2NrIHVwIG1vcmUgdGhhbiBvbmUgbG9ja3MgYXQgYSB0aW1lIQogKi8KIAotI2RlZmluZSB0cmFmZmljX3RocmVzaG9sZAkxMAotI2RlZmluZQl0cmFmZmljX3NjYW5fcGVyaW9kCTUwMAotCi1zdHJ1Y3Qgc2l0ZXN1cnZleV9jdHJsIHsKLQl1NjQJbGFzdF90eF9wa3RzOwotCXVpbnQJbGFzdF9yeF9wa3RzOwotCWludAl0cmFmZmljX2J1c3k7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJc2l0ZXN1cnZleV9jdHJsX3RpbWVyOwotfTsKLQogc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IHsKIAl1MzIJTnVtVHhPa0luUGVyaW9kOwogCXUzMglOdW1SeE9rSW5QZXJpb2Q7CkBAIC0xMjYsMjA5ICsxMDksNiBAQAogCWJvb2wJYkhpZ2hlckJ1c3lUeFRyYWZmaWM7IC8qICBXZSBtYXkgZGlzYWJsZSBUeCBpbnRlcnJ1cHQgYWNjb3JkaW5nIGFzIFR4IHRyYWZmaWMuICovCiB9OwogCi1zdHJ1Y3QgcHJvZmlsZV9pbmZvIHsKLQl1OAlzc2lkbGVuOwotCXU4CXNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTgJcGVlcm1hY1tFVEhfQUxFTl07Ci19OwotCi1zdHJ1Y3QgdHhfaW52aXRlX3JlcV9pbmZvIHsKLQl1OAl0b2tlbjsKLQl1OAliZW5hYmxlOwotCXU4CWdvX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTgJc3NpZGxlbjsKLQl1OAlnb19ic3NpZFtFVEhfQUxFTl07Ci0JdTgJcGVlcl9tYWNhZGRyW0VUSF9BTEVOXTsKLQl1OAlvcGVyYXRpbmdfY2g7CS8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBzZXQgYnkgdXNpbmcgdGhlIHAycF9zZXQgb3BfY2ggPSB4ICovCi0JdTgJcGVlcl9jaDsJLyogVGhlIGxpc3RlbiBjaGFubmVsIGZvciBwZWVyIFAyUCBkZXZpY2UgKi8KLQotfTsKLQotc3RydWN0IHR4X2ludml0ZV9yZXNwX2luZm8gewotCXU4CXRva2VuOwkvKglVc2VkIHRvIHJlY29yZCB0aGUgZGlhbG9nIHRva2VuIG9mIHAycCBpbnZpdGF0aW9uIHJlcXVlc3QgZnJhbWUuICovCi19OwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQotc3RydWN0IHdpZmlfZGlzcGxheV9pbmZvIHsKLQl1MTYJd2ZkX2VuYWJsZTsJCS8qIEVuYWJsZS9EaXNhYmxlIHRoZSBXRkQgZnVuY3Rpb24uICovCi0JdTE2CXJ0c3BfY3RybHBvcnQ7CQkvKiBUQ1AgcG9ydCBudW1iZXIgYXQgd2hpY2ggdGhlIHRoaXMgV0ZEIGRldmljZSBsaXN0ZW5zIGZvciBSVFNQIG1lc3NhZ2VzICovCi0JdTE2CXBlZXJfcnRzcF9jdHJscG9ydDsJLyogVENQIHBvcnQgbnVtYmVyIGF0IHdoaWNoIHRoZSBwZWVyIFdGRCBkZXZpY2UgbGlzdGVucyBmb3IgUlRTUCBtZXNzYWdlcyAqLwotCQkJCQkvKiBUaGlzIGZpbGVkIHNob3VsZCBiZSBmaWxsZWQgd2hlbiByZWNlaXZpbmcgdGhlIGdyb3B1IG5lZ290aWF0aW9uIHJlcXVlc3QgKi8KLQotCXU4CXBlZXJfc2Vzc2lvbl9hdmFpbDsJLyogV0ZEIHNlc3Npb24gaXMgYXZhaWxhYmxlIG9yIG5vdCBmb3IgdGhlIHBlZXIgd2ZkIGRldmljZS4gKi8KLQkJCQkJLyogVGhpcyB2YXJpYWJsZSB3aWxsIGJlIHNldCB3aGVuIHNlbmRpbmcgdGhlIHByb3Zpc2lvbmluZyBkaXNjb3ZlcnkgcmVxdWVzdCB0byBwZWVyIFdGRCBkZXZpY2UuICovCi0JCQkJCS8qIEFuZCB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgcmVzZXQgd2hlbiBpdCBpcyByZWFkIGJ5IHVzaW5nIHRoZSBpd3ByaXYgcDJwX2dldCB3ZmRfc2EgY29tbWFuZC4gKi8KLQl1OAlpcF9hZGRyZXNzWzRdOwotCXU4CXBlZXJfaXBfYWRkcmVzc1s0XTsKLQl1OAl3ZmRfcGM7CQkvKiBXRkQgcHJlZmVycmVkIGNvbm5lY3Rpb24gKi8KLQkJCQkvKiAwIC0+IFByZWZlciB0byB1c2UgdGhlIFAyUCBmb3IgV0ZEIGNvbm5lY3Rpb24gb24gcGVlciBzaWRlLiAqLwotCQkJCS8qIDEgLT4gUHJlZmVyIHRvIHVzZSB0aGUgVERMUyBmb3IgV0ZEIGNvbm5lY3Rpb24gb24gcGVlciBzaWRlLiAqLwotCi0JdTgJd2ZkX2RldmljZV90eXBlOy8qIFdGRCBEZXZpY2UgVHlwZSAqLwotCQkJCS8qIDAgLT4gV0ZEIFNvdXJjZSBEZXZpY2UgKi8KLQkJCQkvKiAxIC0+IFdGRCBQcmltYXJ5IFNpbmsgRGV2aWNlICovCi0JZW51bQlTQ0FOX1JFU1VMVF9UWVBFIHNjYW5fcmVzdWx0X3R5cGU7CS8qIFVzZWQgd2hlbiBQMlAgaXMgZW5hYmxlLiBUaGlzIHBhcmFtZXRlciB3aWxsIGltcGFjdCB0aGUgc2NhbiByZXN1bHQuICovCi19OwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLXN0cnVjdCB0eF9wcm92ZGlzY19yZXFfaW5mbyB7Ci0JdTE2CXdwc19jb25maWdfbWV0aG9kX3JlcXVlc3Q7CS8qIFVzZWQgd2hlbiBzZW5kaW5nIHRoZSBwcm92aXNpb25pbmcgcmVxdWVzdCBmcmFtZSAqLwotCXUxNglwZWVyX2NoYW5uZWxfbnVtWzJdOwkJLyogVGhlIGNoYW5uZWwgbnVtYmVyIHdoaWNoIHRoZSByZWNlaXZlciBzdGFuZHMuICovCi0Jc3RydWN0CWNmZzgwMjExX3NzaWQgc3NpZDsKLQl1OAlwZWVyRGV2QWRkcltFVEhfQUxFTl07CS8qIFBlZXIgZGV2aWNlIGFkZHJlc3MgKi8KLQl1OAlwZWVySUZBZGRyW0VUSF9BTEVOXTsJCS8qIFBlZXIgaW50ZXJmYWNlIGFkZHJlc3MgKi8KLQl1OAliZW5hYmxlOwkJCS8qIFRoaXMgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lIGlzIHRyaWdnZXIgdG8gc2VuZCBvciBub3QgKi8KLX07Ci0KLXN0cnVjdCByeF9wcm92ZGlzY19yZXFfaW5mbyB7CS8qIFdoZW4gcGVlciBkZXZpY2UgaXNzdWUgcHJvdl9kaXNjX3JlcSBmaXJzdCwgd2Ugc2hvdWxkIHN0b3JlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb25zICovCi0JdTgJcGVlckRldkFkZHJbRVRIX0FMRU5dOwkJLyoJUGVlciBkZXZpY2UgYWRkcmVzcyAqLwotCXU4CXN0cmNvbmZpZ19tZXRob2RfZGVzY19vZl9wcm92X2Rpc2NfcmVxWzRdOwkvKglkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbmZpZyBtZXRob2QgbG9jYXRlZCBpbiB0aGUgcHJvdmlzaW9uaW5nIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lLiAqLwotCQkJCQkJCQkJCQkJCQkJCQkvKglUaGUgVUkgbXVzdCBrbm93IHRoaXMgaW5mb3JtYXRpb24gdG8ga25vdyB3aGljaCBjb25maWcgbWV0aG9kIHRoZSByZW1vdGUgcDJwIGRldmljZSBpcyByZXF1aXJpbmcuICovCi19OwotCi1zdHJ1Y3QgdHhfbmVnb19yZXFfaW5mbyB7Ci0JdTE2CXBlZXJfY2hhbm5lbF9udW1bMl07CS8qIFRoZSBjaGFubmVsIG51bWJlciB3aGljaCB0aGUgcmVjZWl2ZXIgc3RhbmRzLiAqLwotCXU4CXBlZXJEZXZBZGRyW0VUSF9BTEVOXTsvKiBQZWVyIGRldmljZSBhZGRyZXNzICovCi0JdTgJYmVuYWJsZTsJCS8qIFRoaXMgbmVnb2l0YXRpb24gcmVxdWVzdCBmcmFtZSBpcyB0cmlnZ2VyIHRvIHNlbmQgb3Igbm90ICovCi19OwotCi1zdHJ1Y3QgZ3JvdXBfaWRfaW5mbyB7Ci0JdTggZ29fZGV2aWNlX2FkZHJbRVRIX0FMRU5dOyAvKlRoZSBHTydzIGRldmljZSBhZGRyZXNzIG9mIFAyUCBncm91cCAqLwotCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07IC8qIFRoZSBTU0lEIG9mIHRoaXMgUDJQIGdyb3VwICovCi19OwotCi1zdHJ1Y3Qgc2Nhbl9saW1pdF9pbmZvIHsKLQl1OAlzY2FuX29wX2NoX29ubHk7CS8qIFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlIGRyaXZlciBzaG91bGQganVzdCBzY2FuIHRoZSBvcGVyYXRpb24gY2hhbm5lbCAqLwotCXU4CW9wZXJhdGlvbl9jaFsyXTsJLyogU3RvcmUgdGhlIG9wZXJhdGlvbiBjaGFubmVsIG9mIGludml0YXRpb24gcmVxdWVzdCBmcmFtZSAqLwotfTsKLQotc3RydWN0IGNmZzgwMjExX3dpZmlkaXJlY3RfaW5mbyB7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJCXJlbWFpbl9vbl9jaF90aW1lcjsKLQl1OAkJcmVzdG9yZV9jaGFubmVsOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbAlyZW1haW5fb25fY2hfY2hhbm5lbDsKLQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlCXJlbWFpbl9vbl9jaF90eXBlOwotCXU2NAlyZW1haW5fb25fY2hfY29va2llOwotCWJvb2wgaXNfcm9fY2g7Ci19OwotCi1zdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvIHsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIJKnBhZGFwdGVyOwotCXN0cnVjdCB0aW1lcl9saXN0CWZpbmRfcGhhc2VfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJcmVzdG9yZV9wMnBfc3RhdGVfdGltZXI7Ci0KLQkvKglVc2VkIHRvIGRvIHRoZSBzY2FubmluZy4gQWZ0ZXIgY29uZmlybWluZyB0aGUgcGVlciBpcyBhdmFpbGFsYmxlLCB0aGUgZHJpdmVyIHRyYW5zbWl0cyB0aGUgUDJQIGZyYW1lIHRvIHBlZXIuICovCi0Jc3RydWN0IHRpbWVyX2xpc3QJcHJlX3R4X3NjYW5fdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJcmVzZXRfY2hfc2l0ZXN1cnZleTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlyZXNldF9jaF9zaXRlc3VydmV5MjsJLyoJSnVzdCBmb3IgcmVzZXR0aW5nIHRoZSBzY2FuIGxpbWl0IGZ1bmN0aW9uIGJ5IHVzaW5nIHAycCBuZWdvICovCi0Jc3RydWN0IHR4X3Byb3ZkaXNjX3JlcV9pbmZvCXR4X3Byb3ZfZGlzY19pbmZvOwotCXN0cnVjdCByeF9wcm92ZGlzY19yZXFfaW5mbyByeF9wcm92X2Rpc2NfaW5mbzsKLQlzdHJ1Y3QgdHhfaW52aXRlX3JlcV9pbmZvCWludml0ZXJlcV9pbmZvOwotCXN0cnVjdCBwcm9maWxlX2luZm8JcHJvZmlsZWluZm9bUDJQX01BWF9QRVJTSVNURU5UX0dST1VQX05VTV07CS8qCVN0b3JlIHRoZSBwcm9maWxlIGluZm9ybWF0aW9uIG9mIHBlcnNpc3RlbnQgZ3JvdXAgKi8KLQlzdHJ1Y3QgdHhfaW52aXRlX3Jlc3BfaW5mbwlpbnZpdGVyZXNwX2luZm87Ci0Jc3RydWN0IHR4X25lZ29fcmVxX2luZm8JbmVnb19yZXFfaW5mbzsKLQlzdHJ1Y3QgZ3JvdXBfaWRfaW5mbwlncm91cGlkX2luZm87CS8qCVN0b3JlIHRoZSBncm91cCBpZCBpbmZvcm1hdGlvbiB3aGVuIGRvaW5nIHRoZSBncm91cCBuZWdvdGlhdGlvbiBoYW5kc2hha2UuICovCi0Jc3RydWN0IHNjYW5fbGltaXRfaW5mbwlyeF9pbnZpdGVyZXFfaW5mbzsJLyoJVXNlZCBmb3IgZ2V0IHRoZSBsaW1pdCBzY2FuIGNoYW5uZWwgZnJvbSB0aGUgSW52aXRhdGlvbiBwcm9jZWR1cmUgKi8KLQlzdHJ1Y3Qgc2Nhbl9saW1pdF9pbmZvCXAycF9pbmZvOwkJLyoJVXNlZCBmb3IgZ2V0IHRoZSBsaW1pdCBzY2FuIGNoYW5uZWwgZnJvbSB0aGUgUDJQIG5lZ290aWF0aW9uIGhhbmRzaGFrZSAqLwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlfZGlzcGxheV9pbmZvCSp3ZmRfaW5mbzsKLSNlbmRpZgotCWVudW0gUDJQX1JPTEUJcm9sZTsKLQllbnVtIFAyUF9TVEFURQlwcmVfcDJwX3N0YXRlOwotCWVudW0gUDJQX1NUQVRFCXAycF9zdGF0ZTsKLQl1OAlkZXZpY2VfYWRkcltFVEhfQUxFTl07CS8qCVRoZSBkZXZpY2UgYWRkcmVzcyBzaG91bGQgYmUgdGhlIG1hYyBhZGRyZXNzIG9mIHRoaXMgZGV2aWNlLiAqLwotCXU4CWludGVyZmFjZV9hZGRyW0VUSF9BTEVOXTsKLQl1OAlzb2NpYWxfY2hhbls0XTsKLQl1OAlsaXN0ZW5fY2hhbm5lbDsKLQl1OAlvcGVyYXRpbmdfY2hhbm5lbDsKLQl1OAlsaXN0ZW5fZHdlbGw7CQkvKglUaGlzIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgKi8KLQl1OAlzdXBwb3J0X3JhdGVbOF07Ci0JdTgJcDJwX3dpbGRjYXJkX3NzaWRbUDJQX1dJTERDQVJEX1NTSURfTEVOXTsKLQl1OAlpbnRlbnQ7CQkvKglzaG91bGQgb25seSBpbmNsdWRlIHRoZSBpbnRlbnQgdmFsdWUuICovCi0JdTgJcDJwX3BlZXJfaW50ZXJmYWNlX2FkZHJbRVRIX0FMRU5dOwotCXU4CXAycF9wZWVyX2RldmljZV9hZGRyW0VUSF9BTEVOXTsKLQl1OAlwZWVyX2ludGVudDsJLyoJSW5jbHVkZWQgdGhlIGludGVudCB2YWx1ZSBhbmQgdGllIGJyZWFrZXIgdmFsdWUuICovCi0JdTgJZGV2aWNlX25hbWVbV1BTX01BWF9ERVZJQ0VfTkFNRV9MRU5dOwkvKglEZXZpY2UgbmFtZSBmb3IgZGlzcGxheWluZyBvbiBzZWFyY2hpbmcgZGV2aWNlIHNjcmVlbiAqLwotCXU4CWRldmljZV9uYW1lX2xlbjsKLQl1OAlwcm9maWxlaW5kZXg7CS8qCVVzZWQgdG8gcG9pbnQgdG8gdGhlIGluZGV4IG9mIHByb2ZpbGVpbmZvIGFycmF5ICovCi0JdTgJcGVlcl9vcGVyYXRpbmdfY2g7Ci0JdTgJZmluZF9waGFzZV9zdGF0ZV9leGNoYW5nZV9jbnQ7Ci0JdTE2CWRldmljZV9wYXNzd29yZF9pZF9mb3JfbmVnbzsJLyoJVGhlIGRldmljZSBwYXNzd29yZCBJRCBmb3IgZ3JvdXAgbmVnb3RhdGlvbiAqLwotCXU4CW5lZ290aWF0aW9uX2RpYWxvZ190b2tlbjsKLQkvKglTU0lEIGluZm9ybWF0aW9uIGZvciBncm91cCBuZWdvdGl0YXRpb24gKi8KLQl1OCBuZWdvX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTggbmVnb19zc2lkbGVuOwotCXU4IHAycF9ncm91cF9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXU4IHAycF9ncm91cF9zc2lkX2xlbjsKLQl1OAlwZXJzaXN0ZW50X3N1cHBvcnRlZDsJLyoJRmxhZyB0byBrbm93IHRoZSBwZXJzaXN0ZW50IGZ1bmN0aW9uIHNob3VsZCBiZSBzdXBwb3J0ZWQgb3Igbm90LiAqLwotCQkJCQkvKglJbiB0aGUgU2lnbWEgdGVzdCwgdGhlIFNpZ21hIHdpbGwgcHJvdmlkZSB0aGlzIGVuYWJsZSBmcm9tIHRoZSBzdGFfc2V0X3AycCBDQVBJLiAqLwotCQkJCQkvKgkwOiBkaXNhYmxlICovCi0JCQkJCS8qCTE6IGVuYWJsZSAqLwotCXU4CXNlc3Npb25fYXZhaWxhYmxlOwkvKglGbGFnIHRvIHNldCB0aGUgV0ZEIHNlc3Npb24gYXZhaWxhYmxlIHRvIGVuYWJsZSBvciBkaXNhYmxlICJieSBTaWdtYSIgKi8KLQkJCQkJLyoJSW4gdGhlIFNpZ21hIHRlc3QsIHRoZSBTaWdtYSB3aWxsIGRpc2FibGUgdGhlIHNlc3Npb24gYXZhaWxhYmxlIGJ5IHVzaW5nIHRoZSBzdGFfcHJlc2V0IENBUEkuICovCi0JCQkJCS8qCTA6IGRpc2FibGUgKi8KLQkJCQkJLyoJMTogZW5hYmxlICovCi0KLQl1OAl3ZmRfdGRsc19lbmFibGU7CS8qCUZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIFRETFMgYnkgV0ZEIFNpZ21hICovCi0JCQkJCS8qCTA6IGRpc2FibGUgKi8KLQkJCQkJLyoJMTogZW5hYmxlICovCi0JdTgJd2ZkX3RkbHNfd2Vha3NlYzsJLyoJRmxhZyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgd2VhayBzZWN1cml0eSBmdW5jdGlvbiBmb3IgVERMUyBieSBXRkQgU2lnbWEgKi8KLQkJCQkvKgkwOiBkaXNhYmxlICovCi0JCQkJLyoJSW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIGNhbid0IGlzc3VlIHRoZSB0ZHNsIHNldHVwIHJlcXVlc3QgZnJhbWUuICovCi0JCQkJLyoJMTogZW5hYmxlICovCi0JCQkJLyoJSW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIGNhbiBpc3N1ZSB0aGUgdGRscyBzZXR1cCByZXF1ZXN0IGZyYW1lICovCi0JCQkJLyoJZXZlbiB0aGUgY3VycmVudCBzZWN1cml0eSBpcyB3ZWFrIHNlY3VyaXR5LiAqLwotCi0JZW51bQlQMlBfV1BTSU5GTwkJdWlfZ290X3dwc19pbmZvOwkJCS8qCVRoaXMgZmllbGQgd2lsbCBzdG9yZSB0aGUgV1BTIHZhbHVlIChQSU4gdmFsdWUgb3IgUEJDKSB0aGF0IFVJIGhhZCBnb3QgZnJvbSB0aGUgdXNlci4gKi8KLQl1MTYJc3VwcG9ydGVkX3dwc19jbTsJCQkvKglUaGlzIGZpZWxkIGRlc2NyaWJlcyB0aGUgV1BTIGNvbmZpZyBtZXRob2Qgd2hpY2ggdGhpcyBkcml2ZXIgc3VwcG9ydGVkLiAqLwotCQkJCQkJCQkJCQkJCQkvKglUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBjb21iaW5hdGlvbiBvZiBjb25maWcgbWV0aG9kIGRlZmluZWQgaW4gcGFnZTEwNCBvZiBXUFMgdjIuMCBzcGVjLiAqLwotCXVpbnQJY2hhbm5lbF9saXN0X2F0dHJfbGVuOwkJLyoJVGhpcyBmaWVsZCB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiBib2R5IG9mIFAyUCBDaGFubmVsIExpc3QgYXR0cmlidXRlIG9mIGdyb3VwIG5lZ290aXRhdGlvbiByZXNwb25zZSBmcmFtZS4gKi8KLQl1OAljaGFubmVsX2xpc3RfYXR0clsxMDBdOwkJLyoJVGhpcyBmaWVsZCB3aWxsIGNvbnRhaW4gdGhlIGJvZHkgb2YgUDJQIENoYW5uZWwgTGlzdCBhdHRyaWJ1dGUgb2YgZ3JvdXAgbmVnb3RpdGF0aW9uIHJlc3BvbnNlIGZyYW1lLiAqLwotCQkJCQkJCQkJCQkJCQkvKglXZSB3aWxsIHVzZSB0aGUgY2hhbm5lbF9jbnQgYW5kIGNoYW5uZWxfbGlzdCBmaWVsZHMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGdyb3VwIG5lZ290aXRhdGlvbiBjb25maXJtIGZyYW1lLiAqLwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JZW51bSBQMlBfUFNfTU9ERQlwMnBfcHNfbW9kZTsgLyogIGluZGljYXRlIHAycCBwcyBtb2RlICovCi0JZW51bSBQMlBfUFNfU1RBVEUJcDJwX3BzX3N0YXRlOyAvKiAgaW5kaWNhdGUgcDJwIHBzIHN0YXRlICovCi0JdTgJbm9hX2luZGV4OyAvKiAgSWRlbnRpZmllcyBhbmQgaW5zdGFuY2Ugb2YgTm90aWNlIG9mIEFic2VuY2UgdGltaW5nLiAqLwotCXU4CWN0d2luZG93OyAvKiAgQ2xpZW50IHRyYWZmaWMgd2luZG93LiBBIHBlcmlvZCBvZiB0aW1lIGluIFRVIGFmdGVyIFRCVFQuICovCi0JdTgJb3BwX3BzOyAvKiAgb3Bwb3J0dW5pc3RpYyBwb3dlciBzYXZlLiAqLwotCXU4CW5vYV9udW07IC8qICBudW1iZXIgb2YgTm9BIGRlc2NyaXB0b3IgaW4gUDJQIElFLiAqLwotCXU4CW5vYV9jb3VudFtQMlBfTUFYX05PQV9OVU1dOyAvKiAgQ291bnQgZm9yIG93bmVyLCBUeXBlIG9mIGNsaWVudC4gKi8KLQl1MzIJbm9hX2R1cmF0aW9uW1AyUF9NQVhfTk9BX05VTV07IC8qICBNYXggZHVyYXRpb24gZm9yIG93bmVyLCBwcmVmZXJyZWQgb3IgbWluIGFjY2VwdGFibGUgZHVyYXRpb24gZm9yIGNsaWVudC4gKi8KLQl1MzIJbm9hX2ludGVydmFsW1AyUF9NQVhfTk9BX05VTV07IC8qICBMZW5ndGggb2YgaW50ZXJ2YWwgZm9yIG93bmVyLCBwcmVmZXJyZWQgb3IgbWF4IGFjY2VwdGFibGUgaW50ZXJ2YWwgb2YgY2xpZW50LiAqLwotCXUzMglub2Ffc3RhcnRfdGltZVtQMlBfTUFYX05PQV9OVU1dOyAvKiAgc2NoZWR1bGUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHRoZSBUU0YgdGltZXIuICovCi0jZW5kaWYgLyogIENPTkZJR184NzIzQVVfUDJQICovCi19OwotCi1zdHJ1Y3QgdGRsc19zc19yZWNvcmQgewkvKiBzaWduYWwgc3RyZW5ndGggcmVjb3JkICovCi0JdTgJbWFjYWRkcltFVEhfQUxFTl07Ci0JdTgJUnhQV0RCQWxsOwotCXU4CWlzX3RkbHNfc3RhOwkvKiAgdHJ1ZTogZGlyZWN0IGxpbmsgc3RhLCBmYWxzZTogZWxzZSAqLwotfTsKLQotc3RydWN0IHRkbHNfaW5mbyB7Ci0JdTgJYXBfcHJvaGliaXRlZDsKLQl1aW50CXNldHVwX3N0YXRlOwotCXU4CXN0YV9jbnQ7Ci0JLyogMTp0ZGxzIHN0YSA9PSAoTlVNX1NUQS0xKSwgcmVhY2ggbWF4IGRpcmVjdCBsaW5rIG5vOyAwOiBlbHNlOyAqLwotCXU4CXN0YV9tYXhpbXVtOwotCXN0cnVjdCB0ZGxzX3NzX3JlY29yZAlzc19yZWNvcmQ7Ci0JdTgJbWFjaWRfaW5kZXg7CS8qIG1hY2lkIGVudHJ5IHRoYXQgaXMgcmVhZHkgdG8gd3JpdGUgKi8KLQkvKiBjYW0gZW50cnkgdGhhdCBpcyB0cnlpbmcgdG8gY2xlYXIsIHVzaW5nIGl0IGluIGRpcmVjdCBsaW5rIHRlYXJkb3duKi8KLQl1OAljbGVhcl9jYW07Ci0JdTgJY2hfc2Vuc2luZzsKLQl1OAljdXJfY2hhbm5lbDsKLQl1OAljYW5kaWRhdGVfY2g7Ci0JdTgJY29sbGVjdF9wa3RfbnVtW01BWF9DSEFOTkVMX05VTV07Ci0Jc3BpbmxvY2tfdAljbWRfbG9jazsKLQlzcGlubG9ja190CWhkbF9sb2NrOwotCXU4CXdhdGNoZG9nX2NvdW50OwotCXU4CWRldl9kaXNjb3ZlcmVkOwkJLyogV0ZEX1RETFM6IGZvciBzaWdtYSB0ZXN0ICovCi0JdTgJZW5hYmxlOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlfZGlzcGxheV9pbmZvCQkqd2ZkX2luZm87Ci0jZW5kaWYKLX07Ci0KIHN0cnVjdCBtbG1lX3ByaXYgewogCXNwaW5sb2NrX3QJbG9jazsKIAlpbnQJZndfc3RhdGU7CkBAIC0zNjAsNyArMTQwLDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXRfc2Nhbl9kZW55X3RpbWVyOwogCWF0b21pY190IHNldF9zY2FuX2Rlbnk7IC8qIDA6IGFsbG93ZWQsIDE6IGRlbnkgKi8KIAotCXN0cnVjdCBxb3NfcHJpdiBxb3Nwcml2OworCXVuc2lnbmVkIGludCBxb3Nfb3B0aW9uOwogCiAJLyogTnVtYmVyIG9mIG5vbi1IVCBBUC9zdGF0aW9ucyAqLwogCWludCBudW1fc3RhX25vX2h0OwpAQCAtNDQ1LDMwICsyMjUsMTcgQEAKIAl1MzIgd2ZkX2dvX3Byb2JlX3Jlc3BfaWVfbGVuOyAvKiBmb3IgR08gKi8KIH07CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKLQotc3RydWN0IGhvc3RhcGRfcHJpdiB7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcjsKLX07Ci0KLWludCBob3N0YXBkX21vZGVfaW5pdChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgaG9zdGFwZF9tb2RlX3VubG9hZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLSNlbmRpZgotCiB2b2lkIHJ0d19qb2luYnNzX2V2ZW50X3ByZWhhbmRsZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwYnVmKTsKLXZvaWQgcnR3X3N1cnZleV9ldmVudF9jYjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwYnVmKTsKLXZvaWQgcnR3X3N1cnZleWRvbmVfZXZlbnRfY2FsbGJhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqcGJ1Zik7Ci12b2lkIHJ0dzIzYV9qb2luYnNzX2V2ZW50X2NiKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKnBidWYpOwotdm9pZCBydHdfc3Rhc3NvY19ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwYnVmKTsKLXZvaWQgcnR3X3N0YWRlbF9ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwYnVmKTsKLXZvaWQgcnR3X2F0aW1kb25lX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggKnBidWYpOwotdm9pZCBydHdfY3B3bV9ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwYnVmKTsKLQordm9pZCBydHdfc3VydmV5X2V2ZW50X2NiMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKnBidWYpOwordm9pZCBydHdfc3VydmV5ZG9uZV9ldmVudF9jYWxsYmFjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKK3ZvaWQgcnR3MjNhX2pvaW5ic3NfZXZlbnRfY2Ioc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqcGJ1Zik7Cit2b2lkIHJ0d19zdGFzc29jX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKnBidWYpOwordm9pZCBydHdfc3RhZGVsX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKnBidWYpOwogCiBpbnQgZXZlbnRfdGhyZWFkKHZvaWQgKmNvbnRleHQpOwogdm9pZCBydHcyM2Ffam9pbl90b19oYW5kbGVyKHVuc2lnbmVkIGxvbmcpOwogCi12b2lkIHJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCBpc2ZyZWVhbGwpOwordm9pZCBydHdfZnJlZV9uZXR3b3JrX3F1ZXVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgcnR3X2luaXRfbWxtZV9wcml2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7CiAKIHZvaWQgcnR3X2ZyZWVfbWxtZV9wcml2MjNhKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdik7CkBAIC00ODUsNyArMjUyLDcgQEAKIAlyZXR1cm4gcG1sbWVwcml2LT5jdXJfbmV0d29yay5uZXR3b3JrLk1hY0FkZHJlc3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2Z3c3RhdGUoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2LCBpbnQgc3RhdGUpCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfZndzdGF0ZShzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsIGludCBzdGF0ZSkKIHsKIAlpZiAocG1sbWVwcml2LT5md19zdGF0ZSAmIHN0YXRlKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTU1Myw3ICszMjAsNiBAQAogCQkJICAgICAgaW50IGxvY2tfc2Nhbm5lZF9xdWV1ZSk7CiB2b2lkIHJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIHJ0d19pbmRpY2F0ZV9zY2FuX2RvbmUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgYm9vbCBhYm9ydGVkKTsKIHZvaWQgcnR3X3NjYW5fYWJvcnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKIAogaW50IHJ0d19yZXN0cnVjdF9zZWNfaWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqaW5faWUsIHU4ICpvdXRfaWUsCkBAIC01NzQsMzAgKzM0MCwxOCBAQAogdm9pZCBydHdfc2V0X3NjYW5fZGVueV90aW1lcl9oZGwodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgcnR3X3NldF9zY2FuX2Rlbnkoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1MzIgbXMpOwogCi1pbnQgX3J0d19pbml0X21sbWVfcHJpdjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQogdm9pZCBydHcyM2FfZnJlZV9tbG1lX3ByaXZfaWVfZGF0YShzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYpOwogCiB2b2lkIF9ydHdfZnJlZV9tbG1lX3ByaXYyM2Eoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2KTsKIAotc3RydWN0IHdsYW5fbmV0d29yayAqcnR3X2FsbG9jX25ldHdvcmsoc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2KTsKLQotdm9pZCBfcnR3X2ZyZWVfbmV0d29yazIzYShzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsCi0JCSAgICAgICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpwbmV0d29yaywgdTggaXNmcmVlYWxsKTsKLXZvaWQgX3J0d19mcmVlX25ldHdvcmsyM2Ffbm9sb2NrMjNhKHN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiwKLQkJCSAgICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKTsKLQotc3RydWN0IHdsYW5fbmV0d29yayAqX3J0d19maW5kX25ldHdvcmsyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqc2Nhbm5lZF9xdWV1ZSwgdTggKmFkZHIpOwotCi12b2lkIF9ydHdfZnJlZV9uZXR3b3JrMjNhX3F1ZXVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGlzZnJlZWFsbCk7CitzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpydHdfYWxsb2NfbmV0d29yayhzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYsIGludCBnZnApOwogCiBpbnQgcnR3X2lmX3VwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCiBpbnQgcnR3X2xpbmtlZF9jaGVjayhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAotdTggKnJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKHU4ICppZSk7Ci11OCAqcnR3X2dldF90aW1lc3RhbXBlX2Zyb21faWUyM2EodTggKmllKTsKLXU4ICpydHdfZ2V0X2JlYWNvbl9pbnRlcnZhbDIzYV9mcm9tX2llKHU4ICppZSk7CitfX2xlMTYgKnJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKHU4ICppZSk7CitfX2xlMTYgKnJ0d19nZXRfYmVhY29uX2ludGVydmFsMjNhX2Zyb21faWUodTggKmllKTsKIAogCiB2b2lkIHJ0d19qb2luYnNzX3Jlc2V0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwpAQCAtNjEzLDEyICszNjcsOCBAQAogCQkgICAgIHN0cnVjdCB3bGFuX25ldHdvcmsgKnBuZXR3b3JrKTsKIGludCBpc19zYW1lX25ldHdvcmsyM2Eoc3RydWN0IHdsYW5fYnNzaWRfZXggKnNyYywgc3RydWN0IHdsYW5fYnNzaWRfZXggKmRzdCk7CiAKLXZvaWQgX3J0dzIzYV9yb2FtaW5nKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwKLQkJICBzdHJ1Y3Qgd2xhbl9uZXR3b3JrICp0Z3RfbmV0d29yayk7CiB2b2lkIHJ0dzIzYV9yb2FtaW5nKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwKIAkJIHN0cnVjdCB3bGFuX25ldHdvcmsgKnRndF9uZXR3b3JrKTsKIHZvaWQgcnR3X3NldF9yb2FtaW5nKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTggdG9fcm9hbWluZyk7Ci11OCBydHdfdG9fcm9hbWluZyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBydHdfc3Rhc3NvY19od19ycHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpOwogCiAjZW5kaWYgLyogX19SVEw4NzFYX01MTUVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfbWxtZV9leHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfbWxtZV9leHQuaAppbmRleCAwYWFmMGQ1Li5iYWRiY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X21sbWVfZXh0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19tbG1lX2V4dC5oCkBAIC04OSw3ICs4OSw2IEBACiAjZGVmaW5lCQlfNTRNX1JBVEVfCTExCiAKIAotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgUlRXX1dQQV9PVUkyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIFdNTV9PVUkyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIFdQU19PVUkyM0FbXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIFdGRF9PVUkyM0FbXTsKQEAgLTI2MiwxMyArMjYxLDEzIEBACiAKIHN0cnVjdCBtbG1lX2hhbmRsZXIgewogCWNoYXIgKnN0cjsKLQl1bnNpZ25lZCBpbnQgKCpmdW5jKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOworCWludCAoKmZ1bmMpKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7CiB9OwogCiBzdHJ1Y3QgYWN0aW9uX2hhbmRsZXIgewogCXVuc2lnbmVkIGludCAgIG51bTsKIAljaGFyKiBzdHI7Ci0JdW5zaWduZWQgaW50ICgqZnVuYykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwogfTsKIAogc3RydWN0CXNzX3JlcwpAQCAtMzU4LDkgKzM1Nyw3IEBACiAJdTgJdHVyYm9Nb2RlX2N0czJzZWxmOwogCXU4CXR1cmJvTW9kZV9ydHNlbjsKIAl1OAlTTV9QUzsKLQl1OAlhZ2dfZW5hYmxlX2JpdG1hcDsKIAl1OAlBRERCQV9yZXRyeV9jb3VudDsKLQl1OAljYW5kaWRhdGVfdGlkX2JpdG1hcDsKIAl1OAlkaWFsb2dUb2tlbjsKIAkvKiAgQWNjZXB0IEFEREJBIFJlcXVlc3QgKi8KIAlib29sIGJBY2NlcHRBZGRiYVJlcTsKQEAgLTQ3NCwxMCArNDcxLDYgQEAKIHZvaWQgVXBkYXRlQnJhdGVUYmwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcix1OCAqbUJyYXRlc09TKTsKIHZvaWQgVXBkYXRlMjNhVGJsRm9yU29mdEFQKHU4ICpic3NyYXRlc2V0LCB1MzIgYnNzcmF0ZWxlbik7CiAKLXZvaWQgU2F2ZV9ETV9GdW5jX0ZsYWcyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIFJlc3RvcmVfRE1fRnVuY19GbGFnMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdm9pZCBTd2l0Y2hfRE1fRnVuYzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBsb25nIG1vZGUsIHU4IGVuYWJsZSk7Ci0KIHZvaWQgU2V0X01TUjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCB0eXBlKTsKIAogdTggcnR3X2dldF9vcGVyX2NoMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcik7CkBAIC00OTAsNjEgKzQ4Myw0NyBAQAogdm9pZCBzZXRfY2hhbm5lbF9id21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciBjaGFubmVsLAogCQkJdW5zaWduZWQgY2hhciBjaGFubmVsX29mZnNldCwgdW5zaWduZWQgc2hvcnQgYndtb2RlKTsKIHZvaWQgU2VsZWN0Q2hhbm5lbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwpOwotdm9pZCBTZXRCV01vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgc2hvcnQgYndtb2RlLAotCSAgICAgICB1bnNpZ25lZCBjaGFyIGNoYW5uZWxfb2Zmc2V0KTsKIAogdW5zaWduZWQgaW50IGRlY2lkZV93YWl0X2Zvcl9iZWFjb25fdGltZW91dDIzYSh1bnNpZ25lZCBpbnQgYmNuX2ludGVydmFsKTsKIAotdm9pZCB3cml0ZV9jYW0yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggZW50cnksIHUxNiBjdHJsLAotCSAgICAgICB1OCAqbWFjLCB1OCAqa2V5KTsKIHZvaWQgY2xlYXJfY2FtX2VudHJ5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGVudHJ5KTsKIAogdm9pZCBpbnZhbGlkYXRlX2NhbV9hbGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIENBTV9lbXB0eV9lbnRyeTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKkFkYXB0ZXIsIHU4IHVjSW5kZXgpOwogCiBpbnQgYWxsb2NhdGVfZndfc3RhX2VudHJ5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCBmbHVzaF9hbGxfY2FtX2VudHJ5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCiBib29sIElzTGVnYWw1R0NoYW5uZWwoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLCB1OCBjaGFubmVsKTsKIAotdm9pZCBzaXRlX3N1cnZleTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXU4IGNvbGxlY3RfYnNzX2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSwKLQkJICAgIHN0cnVjdCB3bGFuX2Jzc2lkX2V4ICpic3NpZCk7CitpbnQgY29sbGVjdF9ic3NfaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lLAorCQkJc3RydWN0IHdsYW5fYnNzaWRfZXggKmJzc2lkKTsKIHZvaWQgdXBkYXRlX25ldHdvcmsyM2Eoc3RydWN0IHdsYW5fYnNzaWRfZXggKmRzdCwgc3RydWN0IHdsYW5fYnNzaWRfZXggKnNyYywKIAkJICAgIHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGJvb2wgdXBkYXRlX2llKTsKIAotaW50IGdldF9ic3N0eXBlMjNhKHVuc2lnbmVkIHNob3J0IGNhcGFiaWxpdHkpOwogdTggKmdldF9teV9ic3NpZDIzYShzdHJ1Y3Qgd2xhbl9ic3NpZF9leCAqcG5ldHdvcmspOwogdTE2IGdldF9iZWFjb25faW50ZXJ2YWwyM2Eoc3RydWN0IHdsYW5fYnNzaWRfZXggKmJzcyk7CiAKLWludCBpc19jbGllbnRfYXNzb2NpYXRlZF90b19hcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLWludCBpc19jbGllbnRfYXNzb2NpYXRlZF90b19pYnNzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotaW50IGlzX0lCU1NfZW1wdHkyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Citib29sIGlzX2NsaWVudF9hc3NvY2lhdGVkX3RvX2FwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworYm9vbCBpc19jbGllbnRfYXNzb2NpYXRlZF90b19pYnNzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworYm9vbCBpc19JQlNTX2VtcHR5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCiB1bnNpZ25lZCBjaGFyIGNoZWNrX2Fzc29jX0FQMjNhKHU4ICpwZnJhbWUsIHVpbnQgbGVuKTsKIAotaW50IFdNTV9wYXJhbV9oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCSAgICAgIHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICpwSUUpOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi1pbnQgV0ZEX2luZm9faGFuZGxlcihzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkgICAgIHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICpwSUUpOwotI2VuZGlmCitpbnQgV01NX3BhcmFtX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnApOwogdm9pZCBXTU1PbkFzc29jUnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCi12b2lkIEhUX2NhcHNfaGFuZGxlcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkgICAgIHN0cnVjdCBuZGlzXzgwMl8xMV92YXJfaWVzICpwSUUpOwotdm9pZCBIVF9pbmZvX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJICAgICBzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqcElFKTsKK3ZvaWQgSFRfY2Fwc19oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwKTsKK3ZvaWQgSFRfaW5mb19oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwKTsKIHZvaWQgSFRPbkFzc29jUnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCi12b2lkIEVSUF9JRV9oYW5kbGVyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCSAgICBzdHJ1Y3QgbmRpc184MDJfMTFfdmFyX2llcyAqcElFKTsKK3ZvaWQgRVJQX0lFX2hhbmRsZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnApOwogdm9pZCBWQ1NfdXBkYXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSk7CiAKIHZvaWQgdXBkYXRlX2JlYWNvbjIzYV9pbmZvKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwZnJhbWUsIHVpbnQgbGVuLAogCQkJc3RydWN0IHN0YV9pbmZvICpwc3RhKTsKLWludCBydHdfY2hlY2tfYmNuX2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLCB1OCAqcGZyYW1lLCB1MzIgcGFja2V0X2xlbik7CitpbnQgcnR3X2NoZWNrX2Jjbl9pbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqQWRhcHRlciwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCB1MzIgcGFja2V0X2xlbik7CiB2b2lkIHVwZGF0ZV9JT1RfaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgdXBkYXRlX2NhcGluZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpBZGFwdGVyLCB1MTYgdXBkYXRlQ2FwKTsKIHZvaWQgdXBkYXRlX3dpcmVsZXNzX21vZGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICogcGFkYXB0ZXIpOwpAQCAtNTYxLDE1ICs1NDAsMTUgQEAKIHZvaWQgVXBkYXRlX1JBX0VudHJ5MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSk7CiB2b2lkIHNldF9zdGFfcmF0ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpOwogCi11bnNpZ25lZCBpbnQgcmVjZWl2ZV9kaXNjb25uZWN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJdW5zaWduZWQgY2hhciAqTWFjQWRkciwgdW5zaWduZWQgc2hvcnQgcmVhc29uKTsKK2ludCByZWNlaXZlX2Rpc2Nvbm5lY3QyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCSAgdW5zaWduZWQgY2hhciAqTWFjQWRkciwgdW5zaWduZWQgc2hvcnQgcmVhc29uKTsKIAogdW5zaWduZWQgY2hhciBnZXRfaGlnaGVzdF9yYXRlX2lkeDIzYSh1MzIgbWFzayk7CiBpbnQgc3VwcG9ydF9zaG9ydF9HSTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkgICAgIHN0cnVjdCBIVF9jYXBzX2VsZW1lbnQgKnBIVF9jYXBzKTsKLXVuc2lnbmVkIGludCBpc19hcF9pbl90a2lwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdW5zaWduZWQgaW50IGlzX2FwX2luX3dlcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXVuc2lnbmVkIGludCBzaG91bGRfZm9yYmlkX25fcmF0ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK2Jvb2wgaXNfYXBfaW5fdGtpcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK2Jvb2wgaXNfYXBfaW5fd2VwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworYm9vbCBzaG91bGRfZm9yYmlkX25fcmF0ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAogdm9pZCByZXBvcnRfam9pbl9yZXMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgaW50IHJlcyk7CiB2b2lkIHJlcG9ydF9zdXJ2ZXlfZXZlbnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKQEAgLTU4MCw4ICs1NTksNyBAQAogdm9pZCByZXBvcnRfYWRkX3N0YV9ldmVudDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJICB1bnNpZ25lZCBjaGFyICpNYWNBZGRyLCBpbnQgY2FtX2lkeCk7CiAKLXZvaWQgYmVhY29uX3RpbWluZ19jb250cm9sMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdTggc2V0X3R4X2JlYWNvbl9jbWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyKnBhZGFwdGVyKTsKK2ludCBzZXRfdHhfYmVhY29uX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIqcGFkYXB0ZXIpOwogdW5zaWduZWQgaW50IHNldHVwX2JlYWNvbl9mcmFtZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJCXVuc2lnbmVkIGNoYXIgKmJlYWNvbl9mcmFtZSk7CiB2b2lkIHVwZGF0ZV9tZ250X3R4X3JhdGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggcmF0ZSk7CkBAIC01OTQsNzIgKzU3MiwyMCBAQAogczMyIGR1bXBfbWdudGZyYW1lMjNhX2FuZF93YWl0X2FjazIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJCXN0cnVjdCB4bWl0X2ZyYW1lICpwbWdudGZyYW1lKTsKIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi12b2lkIGlzc3VlX3Byb2JlcnNwMjNhX3AycDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpkYSk7Ci12b2lkIGlzc3VlX3AycF9wcm92aXNpb25fcmVxdWVzdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcHNzaWQsCi0JCQkJIHU4IHVzc2lkbGVuLCB1OCogcGRldl9yYWRkcik7Ci12b2lkIGlzc3VlX3AycF9HT19yZXF1ZXN0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4KiByYWRkcik7Ci12b2lkIGlzc3VlMjNhX3Byb2JlcmVxX3AycChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqZGEpOwotaW50IGlzc3VlMjNhX3Byb2JlcmVxX3AycF9leChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpkYSwgaW50IHRyeV9jbnQsCi0JCQkgIGludCB3YWl0X21zKTsKLXZvaWQgaXNzdWVfcDJwX2ludml0YXRpb25fcmVzcG9uc2UyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTgqIHJhZGRyLAotCQkJCSAgIHU4IGRpYWxvZ1Rva2VuLCB1OCBzdWNjZXNzKTsKLXZvaWQgaXNzdWVfcDJwX2ludml0YXRpb25fcmVxdWVzdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCogcmFkZHIpOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCiB2b2lkIGlzc3VlX2JlYWNvbjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBpbnQgdGltZW91dF9tcyk7Ci12b2lkIGlzc3VlX3Byb2JlcnNwMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKmRhLAotCQkgICAgdTggaXNfdmFsaWRfcDJwX3Byb2JlcmVxKTsKLXZvaWQgaXNzdWVfYXNzb2NyZXEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIGlzc3VlX2Fzb2Nyc3AyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAotCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGF0LCBpbnQgcGt0X3R5cGUpOwotdm9pZCBpc3N1ZV9hdXRoMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSwKLQkJdW5zaWduZWQgc2hvcnQgc3RhdHVzKTsKLXZvaWQgaXNzdWVfcHJvYmVyZXEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IGNmZzgwMjExX3NzaWQgKnBzc2lkLAotCQkgICAgdTggKmRhKTsKLXMzMiBpc3N1ZV9wcm9iZXJlcTIzYV9leDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcHNzaWQsCi0JCSAgICAgIHU4ICpkYSwgaW50IHRyeV9jbnQsIGludCB3YWl0X21zKTsKIGludCBpc3N1ZV9udWxsZGF0YTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpkYSwKIAkJICAgdW5zaWduZWQgaW50IHBvd2VyX21vZGUsIGludCB0cnlfY250LCBpbnQgd2FpdF9tcyk7CiBpbnQgaXNzdWVfcW9zX251bGxkYXRhMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKmRhLCB1MTYgdGlkLAogCQkgICAgICAgaW50IHRyeV9jbnQsIGludCB3YWl0X21zKTsKIGludCBpc3N1ZV9kZWF1dGgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqZGEsCiAJCSB1bnNpZ25lZCBzaG9ydCByZWFzb24pOwotaW50IGlzc3VlX2RlYXV0aDIzYV9leDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqZGEsIHVuc2lnbmVkIHNob3J0IHJlYXNvbiwKLQkJICAgIGludCB0cnlfY250LCBpbnQgd2FpdF9tcyk7CiB2b2lkIGlzc3VlX2FjdGlvbl9zcGN0X2NoX3N3aXRjaDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcmEsCiAJCQkJIHU4IG5ld19jaCwgdTggY2hfb2Zmc2V0KTsKLXZvaWQgaXNzdWVfYWN0aW9uX0JBMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKnJhZGRyLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgYWN0aW9uLCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMpOwotdW5zaWduZWQgaW50IHNlbmRfZGVsYmEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggaW5pdGlhdG9yLCB1OCAqYWRkcik7Ci11bnNpZ25lZCBpbnQgc2VuZF9iZWFjb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci0KLXZvaWQgc3RhcnRfY2xudF9hc3NvYzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgc3RhcnRfY2xudF9hdXRoMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdm9pZCBzdGFydF9jbG50X2pvaW4yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHN0YXJ0X2NyZWF0ZV9pYnNzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotCi11bnNpZ25lZCBpbnQgT25Bc3NvY1JlcTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uQXNzb2NSc3AyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPblByb2JlUmVxMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7Ci11bnNpZ25lZCBpbnQgT25Qcm9iZVJzcDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IERvUmVzZXJ2ZWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPbkJlYWNvbjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uQXRpbTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uRGlzYXNzb2MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPbkF1dGgyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPbkF1dGgyM2FDbGllbnQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPbkRlQXV0aDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uQWN0aW9uMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7Ci0KLXVuc2lnbmVkIGludCBvbl9hY3Rpb25fc3BjdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uQWN0aW9uMjNhX3FvcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uQWN0aW9uMjNhX2RscyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpOwotdW5zaWduZWQgaW50IE9uQWN0aW9uMjNhX2JhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBvbl9hY3Rpb25fcHVibGljMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSk7Ci11bnNpZ25lZCBpbnQgT25BY3Rpb24yM2FfaHQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPbkFjdGlvbjIzYV93bW0oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLXVuc2lnbmVkIGludCBPbkFjdGlvbjIzYV9wMnAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKLQordm9pZCBpc3N1ZV9hY3Rpb25fQkEyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhZGRyLAorCQkJdW5zaWduZWQgY2hhciBhY3Rpb24sIHVuc2lnbmVkIHNob3J0IHN0YXR1cyk7CitpbnQgc2VuZF9kZWxiYTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBpbml0aWF0b3IsIHU4ICphZGRyKTsKK2ludCBzZW5kX2JlYWNvbjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAogdm9pZCBtbG1lZXh0X2pvaW5ic3NfZXZlbnRfY2FsbGJhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgaW50IGpvaW5fcmVzKTsKIHZvaWQgbWxtZWV4dF9zdGFfZGVsX2V2ZW50X2NhbGxiYWNrMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwpAQCAtNjY4LDExICs1OTQsMTEgQEAKIHZvaWQgbGlua2VkX3N0YXR1c19jaGsyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiAKICNkZWZpbmUgc2V0X3N1cnZleV90aW1lcihtbG1lZXh0LCBtcykgXAotCS8qREJHXzg3MjNBKCIlcyBzZXRfc3VydmV5X3RpbWVyKCVwLCAlZClcbiIsIF9fRlVOQ1RJT05fXywgKG1sbWVleHQpLCAobXMpKTsqLyBcCisJLypEQkdfODcyM0EoIiVzIHNldF9zdXJ2ZXlfdGltZXIoJXAsICVkKVxuIiwgX19mdW5jX18sIChtbG1lZXh0KSwgKG1zKSk7Ki8gXAogCW1vZF90aW1lcigmbWxtZWV4dC0+c3VydmV5X3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOwogCiAjZGVmaW5lIHNldF9saW5rX3RpbWVyKG1sbWVleHQsIG1zKSBcCi0JLypEQkdfODcyM0EoIiVzIHNldF9saW5rX3RpbWVyKCVwLCAlZClcbiIsIF9fRlVOQ1RJT05fXywgKG1sbWVleHQpLCAobXMpKTsqLyBcCisJLypEQkdfODcyM0EoIiVzIHNldF9saW5rX3RpbWVyKCVwLCAlZClcbiIsIF9fZnVuY19fLCAobWxtZWV4dCksIChtcykpOyovIFwKIAltb2RfdGltZXIoJm1sbWVleHQtPmxpbmtfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7CiAKIGludCBjY2tyYXRlc19pbmNsdWRlZDIzYSh1bnNpZ25lZCBjaGFyICpyYXRlLCBpbnQgcmF0ZWxlbik7CkBAIC02ODAsNDQgKzYwNiw0MyBAQAogCiB2b2lkIHByb2Nlc3NfYWRkYmFfcmVxMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYWRkYmFfcmVxLCB1OCAqYWRkcik7CiAKLXZvaWQgdXBkYXRlX1RTRjIzYShzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQsIHU4ICpwZnJhbWUsIHVpbnQgbGVuKTsKIHZvaWQgY29ycmVjdF9UU0YyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0KTsKIAogc3RydWN0IGNtZF9oZGwgewogCXVpbnQJcGFybXNpemU7Ci0JdTggKCpoMmNmdW5zKShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7CisJaW50ICgqaDJjZnVucykoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOwogfTsKIAogCi11OCByZWFkX21hY3JlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwotdTggd3JpdGVfbWFjcmVnX2hkbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7Ci11OCByZWFkX2JicmVnX2hkbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7Ci11OCB3cml0ZV9iYnJlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwotdTggcmVhZF9yZnJlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwotdTggd3JpdGVfcmZyZWdfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKK2ludCByZWFkX21hY3JlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOworaW50IHdyaXRlX21hY3JlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOworaW50IHJlYWRfYmJyZWdfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKK2ludCB3cml0ZV9iYnJlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOworaW50IHJlYWRfcmZyZWdfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKK2ludCB3cml0ZV9yZnJlZ19oZGwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwogCiAKLXU4IE5VTExfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKLXU4IGpvaW5fY21kX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7Ci11OCBkaXNjb25uZWN0X2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7Ci11OCBjcmVhdGVic3NfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKLXU4IHNldG9wbW9kZV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwotdTggc2l0ZXN1cnZleV9jbWRfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKLXU4IHNldGF1dGhfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKLXU4IHNldGtleV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwotdTggc2V0X3N0YWtleV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBidWYpOwotdTggc2V0X2Fzc29jc3RhX2hkbChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7Ci11OCBkZWxfYXNzb2NzdGFfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpwYnVmKTsKLXU4IGFkZF9iYV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJ1Zik7CitpbnQgTlVMTF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IGpvaW5fY21kX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1Zik7CitpbnQgZGlzY29ubmVjdF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IGNyZWF0ZWJzc19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHNldG9wbW9kZV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHNpdGVzdXJ2ZXlfY21kX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1Zik7CitpbnQgc2V0YXV0aF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHNldGtleV9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHNldF9zdGFrZXlfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKK2ludCBzZXRfYXNzb2NzdGFfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKK2ludCBkZWxfYXNzb2NzdGFfaGRsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKK2ludCBhZGRfYmFfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKIAotdTggbWxtZV9ldnRfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKnBidWYpOwotdTggaDJjX21zZ19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJ1Zik7Ci11OCB0eF9iZWFjb25faGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKnBidWYpOwotdTggc2V0X2NoX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqcGJ1Zik7Ci11OCBzZXRfY2hwbGFuX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKTsKLXU4IGxlZF9ibGlua19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdW5zaWduZWQgY2hhciAqcGJ1Zik7Ci11OCBzZXRfY3NhX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1bnNpZ25lZCBjaGFyICpwYnVmKTsJLyogS3VydDogSGFuZGxpbmcgREZTIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBpZS4gKi8KLXU4IHRkbHNfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHVuc2lnbmVkIGNoYXIgKnBidWYpOworaW50IG1sbWVfZXZ0X2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1Zik7CitpbnQgaDJjX21zZ19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHR4X2JlYWNvbl9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHNldF9jaF9oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOworaW50IHNldF9jaHBsYW5faGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKK2ludCBsZWRfYmxpbmtfaGRsMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGNvbnN0IHU4ICpwYnVmKTsKK2ludCBzZXRfY3NhX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqcGJ1Zik7CS8qIEt1cnQ6IEhhbmRsaW5nIERGUyBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgaWUuICovCitpbnQgdGRsc19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBidWYpOwogCiAjZGVmaW5lIEdFTl9EUlZfQ01EX0hBTkRMRVIoc2l6ZSwgY21kKQl7c2l6ZSwgJmNtZCAjIyBfaGRsMjNhfSwKICNkZWZpbmUgR0VOX01MTUVfRVhUX0hBTkRMRVIoc2l6ZSwgY21kKQl7c2l6ZSwgY21kfSwKQEAgLTc0NCw5ICs2NjksNiBAQAogCXVuc2lnbmVkIGludCByc3ZkOwogfTsKIAotdm9pZCBydHdfZHVtbXlfZXZlbnRfY2FsbGJhY2syM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyICwgdTggKnBidWYpOwotdm9pZCBydHcyM2FfZndkYmdfZXZlbnRfY2FsbGJhY2soc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyICwgdTggKnBidWYpOwotCiBlbnVtIHJ0d19jMmhfZXZlbnQgewogCUdFTl9FVlRfQ09ERShfUmVhZF9NQUNSRUcpID0gMCwgLyowKi8KIAlHRU5fRVZUX0NPREUoX1JlYWRfQkJSRUcpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19wMnAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfcDJwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZmRjNjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19wMnAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDExIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX19SVFdfUDJQX0hfCi0jZGVmaW5lIF9fUlRXX1AyUF9IXwotCi0jaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+Ci0KLXUzMiBidWlsZF9iZWFjb25fcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9wcm9iZV9yZXNwX3AycF9pZTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1Zik7Ci11MzIgYnVpbGRfcHJvdl9kaXNjX3JlcXVlc3RfcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmLAotCQkJCSAgIHU4ICpwc3NpZCwgdTggdXNzaWRsZW4sIHU4ICpwZGV2X3JhZGRyKTsKLXUzMiBidWlsZF9hc3NvY19yZXNwX3AycF9pZTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1ZiwKLQkJCSAgICB1OCBzdGF0dXNfY29kZSk7Ci11MzIgYnVpbGRfZGVhdXRoX3AycF9pZTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1Zik7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLXUzMiBidWlsZF9wcm9iZV9yZXFfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9wcm9iZV9yZXNwX3dmZF9pZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1ZiwKLQkJCSAgICB1OCB0dW5uZWxlZCk7Ci11MzIgYnVpbGRfYmVhY29uX3dmZF9pZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1Zik7Ci11MzIgYnVpbGRfbmVnb19yZXFfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9uZWdvX3Jlc3Bfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9uZWdvX2NvbmZpcm1fd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9pbnZpdGF0aW9uX3JlcV93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpOwotdTMyIGJ1aWxkX2ludml0YXRpb25fcmVzcF93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpOwotdTMyIGJ1aWxkX2Fzc29jX3JlcV93ZmRfaWUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBidWYpOwotdTMyIGJ1aWxkX2Fzc29jX3Jlc3Bfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9wcm92ZGlzY19yZXFfd2ZkX2llKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwYnVmKTsKLXUzMiBidWlsZF9wcm92ZGlzY19yZXNwX3dmZF9pZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGJ1Zik7Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotdTMyIHByb2Nlc3NfcHJvYmVfcmVxX3AycF9pZTIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLAotCQkJICAgICB1aW50IGxlbik7Ci11MzIgcHJvY2Vzc19hc3NvY19yZXFfcDJwX2llMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwZnJhbWUsCi0JCQkgICAgIHVpbnQgbGVuLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpOwotdTMyIHByb2Nlc3NfcDJwX2RldmRpc2NfcmVxMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwZnJhbWUsCi0JCQkgICAgdWludCBsZW4pOwotdTMyIHByb2Nlc3NfcDJwX2RldmRpc2NfcmVzcDIzYShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvLCB1OCAqcGZyYW1lLAotCQkJICAgICB1aW50IGxlbik7Ci11OCBwcm9jZXNzX3AycF9wcm92ZGlzY19yZXEyM2Eoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywgdTggKnBmcmFtZSwKLQkJCSAgICB1aW50IGxlbik7Ci11OCBwcm9jZXNzX3AycF9wcm92ZGlzY19yZXNwMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sIHU4ICpwZnJhbWUpOwotdTggcHJvY2Vzc19wMnBfZ3JvdXBfbmVnb3RhdGlvbl9yZXEyM2Eoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywKLQkJCQkgICAgdTggKnBmcmFtZSwgdWludCBsZW4pOwotdTggcHJvY2Vzc19wMnBfZ3JvdXBfbmVnb3RhdGlvbl9yZXNwMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sCi0JCQkJICAgICB1OCAqcGZyYW1lLCB1aW50IGxlbik7Ci11OCBwcm9jZXNzX3AycF9ncm91cF9uZWdvdGF0aW9uX2NvbmZpcm0yM2Eoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbywKLQkJCQkJdTggKnBmcmFtZSwgdWludCBsZW4pOwotdTggcHJvY2Vzc19wMnBfcHJlc2VuY2VfcmVxMjNhKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8sCi0JCQkgICAgdTggKnBmcmFtZSwgdWludCBsZW4pOwotCi12b2lkIHAycF9wcm90b2NvbF93a19oZGwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgaW50IGNtZHR5cGUpOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLXZvaWQJcHJvY2Vzc19wMnBfcHNfaWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKklFcywgdTMyIElFTGVuZ3RoKTsKLXZvaWQJcDJwX3BzX3drX2hkbDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBwMnBfcHNfc3RhdGUpOwotdTggcDJwX3BzX3drX2NtZDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBwMnBfcHNfc3RhdGUsIHU4IGVucXVldWUpOwotI2VuZGlmIC8qICBDT05GSUdfODcyM0FVX1AyUCAqLwotCi12b2lkIHJ0d19pbml0X2NmZzgwMjExX3dpZmlkaXJlY3RfaW5mbyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLWludCBydHdfcDJwX2NoZWNrX2ZyYW1lcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBjb25zdCB1OCAqYnVmLAotCQkJIHUzMiBsZW4sIHU4IHR4KTsKLXZvaWQgcnR3X2FwcGVuZF93ZmRfaWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmJ1ZiwgdTMyICpsZW4pOwotCi12b2lkIHJlc2V0X2dsb2JhbF93aWZpZGlyZWN0X2luZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci1pbnQgcnR3X2luaXRfd2lmaV9kaXNwbGF5X2luZm8oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Ci12b2lkIHJ0d19pbml0X3dpZmlkaXJlY3RfdGltZXJzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdm9pZCBydHdfaW5pdF93aWZpZGlyZWN0X2FkZHJzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpkZXZfYWRkciwKLQkJCSAgICAgICB1OCAqaWZhY2VfYWRkcik7Ci12b2lkIGluaXRfd2lmaWRpcmVjdF9pbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIGVudW0gUDJQX1JPTEUgcm9sZSk7Ci1pbnQgcnR3X3AycF9lbmFibGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgZW51bSBQMlBfUk9MRSByb2xlKTsKLQotc3RhdGljIGlubGluZSB2b2lkIF9ydHdfcDJwX3NldF9zdGF0ZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICp3ZGluZm8sCi0JCQkJICAgICAgZW51bSBQMlBfU1RBVEUgc3RhdGUpCi17Ci0JaWYgKHdkaW5mby0+cDJwX3N0YXRlICE9IHN0YXRlKSB7Ci0JCS8qIHdkaW5mby0+cHJlX3AycF9zdGF0ZSA9IHdkaW5mby0+cDJwX3N0YXRlOyAqLwotCQl3ZGluZm8tPnAycF9zdGF0ZSA9IHN0YXRlOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ydHdfcDJwX3NldF9wcmVfc3RhdGUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqd2RpbmZvLAotCQkJCQkgIGVudW0gUDJQX1NUQVRFIHN0YXRlKQotewotCWlmICh3ZGluZm8tPnByZV9wMnBfc3RhdGUgIT0gc3RhdGUpCi0JCXdkaW5mby0+cHJlX3AycF9zdGF0ZSA9IHN0YXRlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX3J0d19wMnBfc2V0X3JvbGUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqd2RpbmZvLAotCQkJCSAgICAgZW51bSBQMlBfUk9MRSByb2xlKQotewotCWlmICh3ZGluZm8tPnJvbGUgIT0gcm9sZSkKLQkJd2RpbmZvLT5yb2xlID0gcm9sZTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX3J0d19wMnBfc3RhdGUoc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqd2RpbmZvKQotewotCXJldHVybiB3ZGluZm8tPnAycF9zdGF0ZTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX3J0d19wMnBfcHJlX3N0YXRlKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKndkaW5mbykKLXsKLQlyZXR1cm4gd2RpbmZvLT5wcmVfcDJwX3N0YXRlOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfcnR3X3AycF9yb2xlKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKndkaW5mbykKLXsKLQlyZXR1cm4gd2RpbmZvLT5yb2xlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgX3J0d19wMnBfY2hrX3N0YXRlKHN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKndkaW5mbywKLQkJCQkgICAgICBlbnVtIFAyUF9TVEFURSBzdGF0ZSkKLXsKLQlyZXR1cm4gd2RpbmZvLT5wMnBfc3RhdGUgPT0gc3RhdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBfcnR3X3AycF9jaGtfcm9sZShzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICp3ZGluZm8sCi0JCQkJICAgICBlbnVtIFAyUF9ST0xFIHJvbGUpCi17Ci0JcmV0dXJuIHdkaW5mby0+cm9sZSA9PSByb2xlOwotfQotCi0jZGVmaW5lIHJ0d19wMnBfc2V0X3N0YXRlKHdkaW5mbywgc3RhdGUpIF9ydHdfcDJwX3NldF9zdGF0ZSh3ZGluZm8sIHN0YXRlKQotI2RlZmluZSBydHdfcDJwX3NldF9wcmVfc3RhdGUod2RpbmZvLCBzdGF0ZSkJCQlcCi0JX3J0d19wMnBfc2V0X3ByZV9zdGF0ZSh3ZGluZm8sIHN0YXRlKQotI2RlZmluZSBydHdfcDJwX3NldF9yb2xlKHdkaW5mbywgcm9sZSkgX3J0d19wMnBfc2V0X3JvbGUod2RpbmZvLCByb2xlKQotCi0jZGVmaW5lIHJ0d19wMnBfc3RhdGUod2RpbmZvKSBfcnR3X3AycF9zdGF0ZSh3ZGluZm8pCi0jZGVmaW5lIHJ0d19wMnBfcHJlX3N0YXRlKHdkaW5mbykgX3J0d19wMnBfcHJlX3N0YXRlKHdkaW5mbykKLSNkZWZpbmUgcnR3X3AycF9yb2xlKHdkaW5mbykgX3J0d19wMnBfcm9sZSh3ZGluZm8pCi0jZGVmaW5lIHJ0d19wMnBfY2hrX3N0YXRlKHdkaW5mbywgc3RhdGUpIF9ydHdfcDJwX2Noa19zdGF0ZSh3ZGluZm8sIHN0YXRlKQotI2RlZmluZSBydHdfcDJwX2Noa19yb2xlKHdkaW5mbywgcm9sZSkgX3J0d19wMnBfY2hrX3JvbGUod2RpbmZvLCByb2xlKQotCi0jZGVmaW5lIHJ0d19wMnBfZmluZHBoYXNlX2V4X3NldCh3ZGluZm8sIHZhbHVlKSBcCi0JKCh3ZGluZm8pLT5maW5kX3BoYXNlX3N0YXRlX2V4Y2hhbmdlX2NudCA9ICh2YWx1ZSkpCi0KLS8qIGlzIHRoaXMgZmluZCBwaGFzZSBleGNoYW5nZSBmb3Igc29jaWFsIGNoYW5uZWwgc2Nhbj8gKi8KLSNkZWZpbmUgcnR3X3AycF9maW5kcGhhc2VfZXhfaXNfc29jaWFsKHdkaW5mbykJCQlcCi0JKCh3ZGluZm8pLT5maW5kX3BoYXNlX3N0YXRlX2V4Y2hhbmdlX2NudCA+PQkJXAotCSBQMlBfRklORFBIQVNFX0VYX1NPQ0lBTF9GSVJTVCkKLQotLyogc2hvdWxkIHdlIG5lZWQgZmluZCBwaGFzZSBleGNoYW5nZSBhbnltb3JlPyAqLwotI2RlZmluZSBydHdfcDJwX2ZpbmRwaGFzZV9leF9pc19uZWVkZWQod2RpbmZvKSBcCi0JKCh3ZGluZm8pLT5maW5kX3BoYXNlX3N0YXRlX2V4Y2hhbmdlX2NudCA8IFAyUF9GSU5EUEhBU0VfRVhfTUFYICYmIFwKLQkod2RpbmZvKS0+ZmluZF9waGFzZV9zdGF0ZV9leGNoYW5nZV9jbnQgIT0gUDJQX0ZJTkRQSEFTRV9FWF9OT05FKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfcHdyY3RybC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19wd3JjdHJsLmgKaW5kZXggZTBkYTg3ZC4uYTQ1OGFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19wd3JjdHJsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19wd3JjdHJsLmgKQEAgLTE2NSw3ICsxNjUsNiBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBjcHdtX2V2ZW50OwogCXU4CWJwb3dlcl9zYXZpbmc7CiAKLQl1OAliX2h3X3JhZGlvX29mZjsKIAl1OAlyZWdfcmZvZmY7CiAJdTgJcmVnX3Bkbm1vZGU7IC8qIHBvd2VyZG93biBtb2RlICovCiAJdTMyCXJmb2ZmX3JlYXNvbjsKQEAgLTE5Miw3ICsxOTEsNiBAQAogCXMzMgkJcG5wX2N1cnJlbnRfcHdyX3N0YXRlOwogCXU4CQlwbnBfYnN0b3BfdHJ4OwogCi0JdTgJCWJJbnRlcm5hbEF1dG9TdXNwZW5kOwogCXU4CQliSW5TdXNwZW5kOwogI2lmZGVmCUNPTkZJR184NzIzQVVfQlRfQ09FWElTVAogCXU4CQliQXV0b1Jlc3VtZTsKQEAgLTI1MCw4ICsyNDgsNiBAQAogdm9pZCBMUFNfRW50ZXIyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIExQU19MZWF2ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIAotdTggcnR3X2ludGVyZmFjZV9wc19mdW5jMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkgZW51bSBoYWxfaW50Zl9wc19mdW5jIGVmdW5jX2lkLCB1OCAqdmFsKTsKIHZvaWQgcnR3X3NldF9pcHNfZGVueTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgbXMpOwogaW50IF9ydHdfcHdyX3dha2V1cDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgaXBzX2RlZmZlcl9tcywKIAkJICAgIGNvbnN0IGNoYXIgKmNhbGxlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X3Fvcy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19xb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmYzViYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X3Fvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX1JUV19RT1NfSF8KLSNkZWZpbmUgX1JUV19RT1NfSF8KLQotI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KLQotc3RydWN0CXFvc19wcml2CXsKLQkvKiBiaXQgbWFzayBvcHRpb246IHUtYXBzZCwgcy1hcHNkLCB0cywgYmxvY2sgYWNrLi4uICovCi0JdW5zaWduZWQgaW50CSAgcW9zX29wdGlvbjsKLX07Ci0KLSNlbmRpZgkvKiBfUlRMODcxWF9RT1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfcmVjdi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19yZWN2LmgKaW5kZXggZDE4NjZhNi4uZjg0NmJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19yZWN2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19yZWN2LmgKQEAgLTk5LDcgKzk5LDYgQEAKIAl1OAlkcnZpbmZvX3N6OwogCXU4CXNoaWZ0X3N6OwogCXU4CWhkcmxlbjsgLyogdGhlIFdMQU4gSGVhZGVyIExlbiAqLwotCXU4CXRvX2ZyX2RzOwogCXU4CWFtc2R1OwogCXU4CXFvczsKIAl1OAlwcmlvcml0eTsKQEAgLTExMiw3ICsxMTEsNyBAQAogCXU4CXByaXZhY3k7IC8qIGluIGZyYW1lX2N0cmwgZmllbGQgKi8KIAl1OAliZGVjcnlwdGVkOwogCS8qIHdoZW4gMCBpbmRpY2F0ZSBubyBlbmNyeXB0LiB3aGVuIG5vbi16ZXJvLCBpbmRpY2F0ZSB0aGUgYWxnb3JpdGggKi8KLQl1OAllbmNyeXB0OworCXUzMgllbmNyeXB0OwogCXU4CWl2X2xlbjsKIAl1OAlpY3ZfbGVuOwogCXU4CWNyY19lcnI7CkBAIC0xNTIsMTIgKzE1MSwxMiBAQAogI2RlZmluZSBSWERFU0NfT0ZGU0VUIFJYREVTQ19TSVpFCiAKIHN0cnVjdCByZWN2X3N0YXQgewotCXVuc2lnbmVkIGludCByeGR3MDsKLQl1bnNpZ25lZCBpbnQgcnhkdzE7Ci0JdW5zaWduZWQgaW50IHJ4ZHcyOwotCXVuc2lnbmVkIGludCByeGR3MzsKLQl1bnNpZ25lZCBpbnQgcnhkdzQ7Ci0JdW5zaWduZWQgaW50IHJ4ZHc1OworCV9fbGUzMiByeGR3MDsKKwlfX2xlMzIgcnhkdzE7CisJX19sZTMyIHJ4ZHcyOworCV9fbGUzMiByeGR3MzsKKwlfX2xlMzIgcnhkdzQ7CisJX19sZTMyIHJ4ZHc1OwogfTsKIAogLyogYWNjZXNzZXIgb2YgcmVjdl9wcml2OiBydHdfcmVjdl9lbnRyeTIzYShkaXNwYXRjaCAvIHBhc3NpdmUgbGV2ZWwpOwlcCkBAIC0xNzIsOSArMTcxLDcgQEAKIAlzdHJ1Y3QgcnR3X3F1ZXVlCXJlY3ZfcGVuZGluZ19xdWV1ZTsKIAlzdHJ1Y3QgcnR3X3F1ZXVlCXVjX3N3ZGVjX3BlbmRpbmdfcXVldWU7CiAKLQl2b2lkICpwYWxsb2NhdGVkX2ZyYW1lX2J1ZjsKLQotCXVpbnQgZnJlZV9yZWN2ZnJhbWVfY250OworCWludCBmcmVlX3JlY3ZmcmFtZV9jbnQ7CiAKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIJKmFkYXB0ZXI7CiAKQEAgLTE5MCw4ICsxODcsNiBAQAogCXVpbnQgIHJ4X21pZGRsZXBhY2tldF9jcmNlcnI7CiAKIAkvKiB1OCAqcGFsbG9jYXRlZF91cmJfYnVmOyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgYWxscnhyZXR1cm5ldnQ7Ci0JdWludAlmZl9od2FkZHI7CiAJdTgJcnhfcGVuZGluZ19jbnQ7CiAKIAlzdHJ1Y3QgdXJiICppbnRfaW5fdXJiOwpAQCAtMjAzLDggKzE5OCw2IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBmcmVlX3JlY3Zfc2tiX3F1ZXVlOwogCXN0cnVjdCBza19idWZmX2hlYWQgcnhfc2tiX3F1ZXVlOwogCXU4ICpwcmVjdl9idWY7Ci0Jc3RydWN0IHJ0d19xdWV1ZQlmcmVlX3JlY3ZfYnVmX3F1ZXVlOwotCXUzMglmcmVlX3JlY3ZfYnVmX3F1ZXVlX2NudDsKIAogCS8qIEZvciBkaXNwbGF5IHRoZSBwaHkgaW5mb3JtYXRpb20gKi8KIAl1OCBpc19zaWduYWxfZGJnOwkvKiAgZm9yIGRlYnVnICovCkBAIC0yODMsMTEgKzI3NiwxMCBAQAogCiAvKiBnZXQgYSBmcmVlIHJlY3ZfZnJhbWUgZnJvbSBwZnJlZV9yZWN2X3F1ZXVlICovCiBzdHJ1Y3QgcmVjdl9mcmFtZSAqcnR3X2FsbG9jX3JlY3ZmcmFtZTIzYShzdHJ1Y3QgcnR3X3F1ZXVlICpwZnJlZV9yZWN2X3F1ZXVlKTsKLWludCBydHdfZnJlZV9yZWN2ZnJhbWUyM2Eoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsIHN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3JlY3ZfcXVldWUpOworaW50IHJ0d19mcmVlX3JlY3ZmcmFtZTIzYShzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSk7CiAKIGludCBydHdfZW5xdWV1ZV9yZWN2ZnJhbWUyM2Eoc3RydWN0IHJlY3ZfZnJhbWUgKnByZWN2ZnJhbWUsIHN0cnVjdCBydHdfcXVldWUgKnF1ZXVlKTsKIAotdm9pZCBydHdfZnJlZV9yZWN2ZnJhbWUyM2FfcXVldWUoc3RydWN0IHJ0d19xdWV1ZSAqcGZyYW1lcXVldWUsIHN0cnVjdCBydHdfcXVldWUgKnBmcmVlX3JlY3ZfcXVldWUpOwogdTMyIHJ0d19mcmVlX3VjX3N3ZGVjX3BlbmRpbmdfcXVldWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKTsKIAogaW50IHJ0d19lbnF1ZXVlX3JlY3ZidWYyM2FfdG9faGVhZChzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmLCBzdHJ1Y3QgcnR3X3F1ZXVlICpxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X3NlY3VyaXR5LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X3NlY3VyaXR5LmgKaW5kZXggNzViYmI5My4uOGI4NDMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19zZWN1cml0eS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfc2VjdXJpdHkuaApAQCAtMTcsMjAgKzE3LDEyIEBACiAKICNpbmNsdWRlIDxvc2RlcF9zZXJ2aWNlLmg+CiAjaW5jbHVkZSA8ZHJ2X3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKIAotI2RlZmluZSBfTk9fUFJJVkFDWV8JCTB4MAotI2RlZmluZSBfV0VQNDBfCQkJMHgxCi0jZGVmaW5lIF9US0lQXwkJCTB4MgotI2RlZmluZSBfVEtJUF9XVE1JQ18JCTB4MwotI2RlZmluZSBfQUVTXwkJCTB4NAotI2RlZmluZSBfV0VQMTA0XwkJMHg1Ci0jZGVmaW5lIF9XRVBfV1BBX01JWEVEXwkweDA3ICAvKiAgV0VQICsgV1BBICovCi0jZGVmaW5lIF9TTVM0XwkJCTB4MDYKKyNkZWZpbmUgaXNfd2VwX2VuYyhhbGcpIChhbGcgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwgXAorCQkJIGFsZyA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpCiAKLSNkZWZpbmUgaXNfd2VwX2VuYyhhbGcpICgoKGFsZykgPT0gX1dFUDQwXykgfHwgKChhbGcpID09IF9XRVAxMDRfKSkKLQotI2RlZmluZSBfV1BBX0lFX0lEXwkweGRkCiAjZGVmaW5lIF9XUEEyX0lFX0lEXwkweDMwCiAKICNkZWZpbmUgU0hBMjU2X01BQ19MRU4gMzIKQEAgLTkzLDYgKzg1LDEwIEBACiAJdTMyICAgIGxrZXlbNF07CiB9OwogCitzdHJ1Y3QgcnR3X3dlcF9rZXkgeworCXU4IGtleVtXTEFOX0tFWV9MRU5fV0VQMTA0ICsgMV07IC8qIDE0ICovCisJdTE2IGtleWxlbjsKK307CiAKIHN0cnVjdCBydF9wbWtpZF9saXN0IHsKIAl1OAliVXNlZDsKQEAgLTExMyw4ICsxMDksNyBAQAogCXUzMgkgIGRvdDExUHJpdmFjeUtleUluZGV4OwkvKiAgdGhpcyBpcyBvbmx5IHZhbGlkIGZvciBsZWdlbmRhcnkKIAkJCQkJICogd2VwLCAwfjMgZm9yIGtleSBpZC4gKHR4IGtleSBpbmRleCkKIAkJCQkJICovCi0JdW5pb24gS2V5dHlwZSBkb3QxMURlZktleVs0XTsJLyogIHRoaXMgaXMgb25seSB2YWxpZCBmb3IgZGVmLiBrZXkgKi8KLQl1MzIJZG90MTFEZWZLZXlsZW5bNF07CisJc3RydWN0IHJ0d193ZXBfa2V5IHdlcF9rZXlbTlVNX1dFUF9LRVlTXTsKIAogCXUzMiBkb3QxMTgwMjFYR3JwUHJpdmFjeTsJLyogc3BlY2lmeSB0aGUgcHJpdmFjeSBhbGd0aG0uCiAJCQkJCSAqIHVzZWQgZm9yIEdycCBrZXkKQEAgLTE0MCwxNSArMTM1LDEzIEBACiAKIAl1OCB3cHNfaWVbTUFYX1dQU19JRV9MRU5dOy8qIGFkZGVkIGluIGFzc29jIHJlcSAqLwogCWludCB3cHNfaWVfbGVuOwotCXU4CWJpbnN0YWxsR3Jwa2V5OwotCXU4CWJ1c2V0a2lwa2V5OwotCXU4CWJjaGVja19ncnBrZXk7Ci0JdTgJYmdycGtleV9oYW5kc2hha2U7Ci0JczMyCWh3X2RlY3J5cHRlZDsKKwl1bnNpZ25lZCBpbnQgYmluc3RhbGxHcnBrZXk6MTsKKwl1bnNpZ25lZCBpbnQgYnVzZXRraXBrZXk6MTsKKwl1bnNpZ25lZCBpbnQgYmNoZWNrX2dycGtleToxOworCXVuc2lnbmVkIGludCBod19kZWNyeXB0ZWQ6MTsKIAl1MzIgbmRpc2F1dGh0eXBlOwkvKiAgZW51bSBuZGlzXzgwMl8xMV9hdXRoX21vZGUgKi8KIAl1MzIgbmRpc2VuY3J5cHRzdGF0dXM7CS8qICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAqLwogCXN0cnVjdCB3bGFuX2Jzc2lkX2V4IHNlY19ic3M7ICAvKiBmb3Igam9pbmJzcyAoaDJjIGJ1ZmZlcikgdXNhZ2UgKi8KLQlzdHJ1Y3QgbmRpc184MDJfMTFfd2VwIG5kaXN3ZXA7CiAJdTggYXNzb2NfaW5mb1s2MDBdOwogCXU4IHN6b2ZjYXBhYmlsaXR5WzI1Nl07IC8qIGZvciB3cGEyIHVzYWdlICovCiAJdTggb2lkYXNzb2NpYXRpb25bNTEyXTsgLyogZm9yIHdwYS93cGEyIHVzYWdlICovCkBAIC0xNzksMTMgKzE3MiwxMyBAQAogCWNhc2UgZG90MTFBdXRoQWxncnRobV9PcGVuOlwKIAljYXNlIGRvdDExQXV0aEFsZ3J0aG1fU2hhcmVkOlwKIAljYXNlIGRvdDExQXV0aEFsZ3J0aG1fQXV0bzpcCi0JCWVuY3J5X2FsZ28gPSAodTgpcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobTtcCisJCWVuY3J5X2FsZ28gPSBwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtO1wKIAkJYnJlYWs7XAogCWNhc2UgZG90MTFBdXRoQWxncnRobV84MDIxWDpcCiAJCWlmIChibWNzdClcCi0JCQllbmNyeV9hbGdvID0gKHU4KXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5O1wKKwkJCWVuY3J5X2FsZ28gPSBwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeTtcCiAJCWVsc2VcCi0JCQllbmNyeV9hbGdvID0gKHU4KXBzdGEtPmRvdDExODAyMVhQcml2YWN5O1wKKwkJCWVuY3J5X2FsZ28gPSBwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeTtcCiAJCWJyZWFrO1wKIAl9CVwKIH0gd2hpbGUgKDApCkBAIC0zMTYsMjIgKzMwOSw2IEBACiAJMHg5MGJlZmZmYVVMLCAweGE0NTA2Y2ViVUwsIDB4YmVmOWEzZjdVTCwgMHhjNjcxNzhmMlVMCiB9OwogCi0vKiBWYXJpb3VzIGxvZ2ljYWwgZnVuY3Rpb25zICovCi0jZGVmaW5lIFJPUmMoeCwgeSkgXAotKCgoKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4RkZGRkZGRkZVTCkgPj4gKHVuc2lnbmVkIGxvbmcpICgoeSkgJiAzMSkpIHwgXAotKCh1bnNpZ25lZCBsb25nKSh4KSA8PCAodW5zaWduZWQgbG9uZykgKDMyIC0gKCh5KSAmIDMxKSkpKSAmIDB4RkZGRkZGRkZVTCkKLSNkZWZpbmUgQ2goeCwgeSwgeikgICAgICh6IF4gKHggJiAoeSBeIHopKSkKLSNkZWZpbmUgTWFqKHgsIHksIHopICAgICgoKHggfCB5KSAmIHopIHwgKHggJiB5KSkKLSNkZWZpbmUgUyh4LCBuKSAgICAgICAgIFJPUmMoKHgpLCAobikpCi0jZGVmaW5lIFIoeCwgbikgICAgICAgICAoKCh4KSYweEZGRkZGRkZGVUwpPj4obikpCi0jZGVmaW5lIFNpZ21hMCh4KSAgICAgICAoUyh4LCAyKSBeIFMoeCwgMTMpIF4gUyh4LCAyMikpCi0jZGVmaW5lIFNpZ21hMSh4KSAgICAgICAoUyh4LCA2KSBeIFMoeCwgMTEpIF4gUyh4LCAyNSkpCi0jZGVmaW5lIEdhbW1hMCh4KSAgICAgICAoUyh4LCA3KSBeIFMoeCwgMTgpIF4gUih4LCAzKSkKLSNkZWZpbmUgR2FtbWExKHgpICAgICAgIChTKHgsIDE3KSBeIFMoeCwgMTkpIF4gUih4LCAxMCkpCi0jaWZuZGVmIE1JTgotI2RlZmluZSBNSU4oeCwgeSkgKCgoeCkgPCAoeSkpID8gKHgpIDogKHkpKQotI2VuZGlmCi0KIHZvaWQgcnR3X3NlY21pY3NldGtleTIzYShzdHJ1Y3QgbWljX2RhdGEgKnBtaWNkYXRhLCB1OCAqa2V5KTsKIHZvaWQgcnR3X3NlY21pY2FwcGVuZDIzYWJ5dGUyM2Eoc3RydWN0IG1pY19kYXRhICpwbWljZGF0YSwgdTggYik7CiB2b2lkIHJ0d19zZWNtaWNhcHBlbmQyM2Eoc3RydWN0IG1pY19kYXRhICpwbWljZGF0YSwgdTggKnNyYywgdTMyIG5iQnl0ZXMpOwpAQCAtMzQwLDE1ICszMTcsMTUgQEAKIHZvaWQgcnR3X3NlY2NhbGN0a2lwbWljMjNhKHU4ICprZXksIHU4ICpoZWFkZXIsIHU4ICpkYXRhLCB1MzIgZGF0YV9sZW4sCiAJCQl1OCAqTWljY29kZSwgdTggcHJpb3JpdHlpKTsKIAotdTMyIHJ0d19hZXNfZW5jcnlwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAoraW50IHJ0d19hZXNfZW5jcnlwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpOwotdTMyIHJ0d190a2lwX2VuY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKK2ludCBydHdfdGtpcF9lbmNyeXB0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCiAJCSAgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpOwogdm9pZCBydHdfd2VwX2VuY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJICAgICBzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZSk7Ci11MzIgcnR3X2Flc19kZWNyeXB0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCitpbnQgcnR3X2Flc19kZWNyeXB0MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCiAJCSAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSk7Ci11MzIgcnR3X3RraXBfZGVjcnlwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAoraW50IHJ0d190a2lwX2RlY3J5cHQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJICAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSk7CiB2b2lkIHJ0d193ZXBfZGVjcnlwdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfc3Jlc2V0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvcnR3X3NyZXNldC5oCmluZGV4IDRjNTIzNzIuLjc3Y2M3OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfc3Jlc2V0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d19zcmVzZXQuaApAQCAtMzYsMjEgKzM2LDIxIEBACiAKICNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KIAotI2RlZmluZQlXSUZJX1NUQVRVU19TVUNDRVNTCQkwCi0jZGVmaW5lCVVTQl9WRU5fUkVRX0NNRF9GQUlMCUJJVDAKLSNkZWZpbmUJVVNCX1JFQURfUE9SVF9GQUlMCQlCSVQxCi0jZGVmaW5lCVVTQl9XUklURV9QT1JUX0ZBSUwJCUJJVDIKLSNkZWZpbmUJV0lGSV9NQUNfVFhETUFfRVJST1IJQklUMwotI2RlZmluZSAgIFdJRklfVFhfSEFORwkJCQlCSVQ0Ci0jZGVmaW5lCVdJRklfUlhfSEFORwkJCQlCSVQ1Ci0jZGVmaW5lCQlXSUZJX0lGX05PVF9FWElTVAkJCUJJVDYKKyNkZWZpbmUJV0lGSV9TVEFUVVNfU1VDQ0VTUwkwCisjZGVmaW5lCVVTQl9WRU5fUkVRX0NNRF9GQUlMCUJJVCgwKQorI2RlZmluZQlVU0JfUkVBRF9QT1JUX0ZBSUwJQklUKDEpCisjZGVmaW5lCVVTQl9XUklURV9QT1JUX0ZBSUwJQklUKDIpCisjZGVmaW5lCVdJRklfTUFDX1RYRE1BX0VSUk9SCUJJVCgzKQorI2RlZmluZQlXSUZJX1RYX0hBTkcJCUJJVCg0KQorI2RlZmluZQlXSUZJX1JYX0hBTkcJCUJJVCg1KQorI2RlZmluZQlXSUZJX0lGX05PVF9FWElTVAlCSVQoNikKIAotdm9pZCBzcmVzZXRfaW5pdF92YWx1ZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgc3Jlc2V0X3Jlc2V0X3ZhbHVlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotdTggc3Jlc2V0X2dldF93aWZpX3N0YXR1czIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKK3ZvaWQgcnR3X3NyZXNldF9pbml0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydHdfc3Jlc2V0X3Jlc2V0X3ZhbHVlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordTggcnR3X3NyZXNldF9nZXRfd2lmaV9zdGF0dXMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7Citib29sIHJ0d19zcmVzZXRfaW5wcm9ncmVzcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgc3Jlc2V0X3NldF93aWZpX2Vycm9yX3N0YXR1czIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgc3RhdHVzKTsKIHZvaWQgc3Jlc2V0X3NldF90cmlnZ2VyX3BvaW50KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHMzMiB0Z3ApOwotYm9vbCBzcmVzZXRfaW5wcm9ncmVzcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXZvaWQgc3Jlc2V0X3Jlc2V0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwordm9pZCBydHdfc3Jlc2V0X3Jlc2V0KHN0cnVjdCBydHdfYWRhcHRlciAqYWN0aXZlX2FkYXB0ZXIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9ydHdfeG1pdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d194bWl0LmgKaW5kZXggNjVhMzNhMC4uMzJhODQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d194bWl0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3J0d194bWl0LmgKQEAgLTkyLDE0ICs5MiwxNCBAQAogCiBzdHJ1Y3QgdHhfZGVzYyB7CiAJLyogRFdPUkQgMCAqLwotCXVuc2lnbmVkIGludCB0eGR3MDsKLQl1bnNpZ25lZCBpbnQgdHhkdzE7Ci0JdW5zaWduZWQgaW50IHR4ZHcyOwotCXVuc2lnbmVkIGludCB0eGR3MzsKLQl1bnNpZ25lZCBpbnQgdHhkdzQ7Ci0JdW5zaWduZWQgaW50IHR4ZHc1OwotCXVuc2lnbmVkIGludCB0eGR3NjsKLQl1bnNpZ25lZCBpbnQgdHhkdzc7CisJX19sZTMyIHR4ZHcwOworCV9fbGUzMiB0eGR3MTsKKwlfX2xlMzIgdHhkdzI7CisJX19sZTMyIHR4ZHczOworCV9fbGUzMiB0eGR3NDsKKwlfX2xlMzIgdHhkdzU7CisJX19sZTMyIHR4ZHc2OworCV9fbGUzMiB0eGR3NzsKIH07CiAKIHVuaW9uIHR4ZGVzYyB7CkBAIC0xMTQsOCArMTE0LDcgQEAKIAogLyogcmVkdWNlIHNpemUgKi8KIHN0cnVjdCBwa3RfYXR0cmliIHsKLQl1OAl0eXBlOwotCXU4CXN1YnR5cGU7CisJdTE2CXR5cGU7CiAJdTgJYnN3ZW5jOwogCXU4CWRoY3BfcGt0OwogCXUxNglldGhlcl90eXBlOwpAQCAtMTI0LDggKzEyMyw4IEBACiAJdTE2CWhkcmxlbjsJCS8qIHRoZSBXTEFOIEhlYWRlciBMZW4gKi8KIAl1MzIJcGt0bGVuOwkJLyogdGhlIG9yaWdpbmFsIDgwMi4zIHBrdCByYXdfZGF0YSBsZW4gKi8KIAl1MzIJbGFzdF90eGNtZHN6OworCXUzMgllbmNyeXB0OwkvKiB3aGVuIDAgaW5kaWNhdGUgbm8gZW5jcnlwdC4gKi8KIAl1OAlucl9mcmFnczsKLQl1OAllbmNyeXB0OwkvKiB3aGVuIDAgaW5kaWNhdGUgbm8gZW5jcnlwdC4gKi8KIAl1OAlpdl9sZW47CiAJdTgJaWN2X2xlbjsKIAl1OAlpdlsxOF07CkBAIC0yODYsMTQgKzI4NSwxMCBAQAogCXN0cnVjdCBydHdfcXVldWUJdm9fcGVuZGluZzsKIAlzdHJ1Y3QgcnR3X3F1ZXVlCWJtX3BlbmRpbmc7CiAKLQl1OCAqcGFsbG9jYXRlZF9mcmFtZV9idWY7Ci0JdTggKnB4bWl0X2ZyYW1lX2J1ZjsKLQl1aW50IGZyZWVfeG1pdGZyYW1lX2NudDsKKwlpbnQgZnJlZV94bWl0ZnJhbWVfY250OwogCXN0cnVjdCBydHdfcXVldWUJZnJlZV94bWl0X3F1ZXVlOwogCi0JdTggKnhmcmFtZV9leHRfYWxsb2NfYWRkcjsKLQl1OCAqeGZyYW1lX2V4dDsKLQl1aW50IGZyZWVfeGZyYW1lX2V4dF9jbnQ7CisJaW50IGZyZWVfeGZyYW1lX2V4dF9jbnQ7CiAJc3RydWN0IHJ0d19xdWV1ZSBmcmVlX3hmcmFtZV9leHRfcXVldWU7CiAKIAl1aW50CWZyYWdfbGVuOwpAQCAtMzU0LDEwICszNDksNyBAQAogdm9pZCBydHdfY291bnRfdHhfc3RhdHMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJCXN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lLCBpbnQgc3opOwogdm9pZCBydHdfdXBkYXRlX3Byb3RlY3Rpb24yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKmllLCB1aW50IGllX2xlbik7Ci1zMzIgcnR3X21ha2Vfd2xhbmhkcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqaGRyLAotCQkgICAgIHN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliKTsKIHMzMiBydHdfcHV0X3NuYXAyM2EodTggKmRhdGEsIHUxNiBoX3Byb3RvKTsKLXN0cnVjdCB4bWl0X2ZyYW1lICpydHdfYWxsb2NfeG1pdGZyYW1lMjNhKHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdik7CiBzdHJ1Y3QgeG1pdF9mcmFtZSAqcnR3X2FsbG9jX3htaXRmcmFtZTIzYV9leHQoc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2KTsKIHN0cnVjdCB4bWl0X2ZyYW1lICpydHdfYWxsb2NfeG1pdGZyYW1lMjNhX29uY2Uoc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2KTsKIHMzMiBydHdfZnJlZV94bWl0ZnJhbWUyM2Eoc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2LApAQCAtMzgyLDcgKzM3NCw3IEBACiBzMzIgcnR3X3R4ZnJhbWVzX3N0YV9hY19wZW5kaW5nMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCiAJCQkJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWIpOwogdm9pZCBydHdfaW5pdF9od3htaXRzMjNhKHN0cnVjdCBod194bWl0ICpwaHd4bWl0LCBpbnQgZW50cnkpOwotczMyIF9ydHdfaW5pdF94bWl0X3ByaXYyM2Eoc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2LAoraW50IF9ydHdfaW5pdF94bWl0X3ByaXYyM2Eoc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2LAogCQkJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIF9ydHdfZnJlZV94bWl0X3ByaXYyM2Eoc3RydWN0IHhtaXRfcHJpdiAqcHhtaXRwcml2KTsKIHZvaWQgcnR3X2FsbG9jX2h3eG1pdHMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvc3RhX2luZm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9zdGFfaW5mby5oCmluZGV4IGZmYmM5ZTMuLmQxOTM5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9zdGFfaW5mby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS9zdGFfaW5mby5oCkBAIC05Nyw3ICs5Nyw3IEBACiAJdTgJaHdhZGRyW0VUSF9BTEVOXTsKIAogCXVpbnQJaWVlZTgwMjF4X2Jsb2NrZWQ7CS8qIDA6IGFsbG93ZWQsIDE6YmxvY2tlZCAqLwotCXVpbnQJZG90MTE4MDIxWFByaXZhY3k7IC8qIGFlcywgdGtpcC4uLiAqLworCXUzMglkb3QxMTgwMjFYUHJpdmFjeTsgLyogYWVzLCB0a2lwLi4uICovCiAJdW5pb24gS2V5dHlwZQlkb3QxMXRraXB0eG1pY2tleTsKIAl1bmlvbiBLZXl0eXBlCWRvdDExdGtpcHJ4bWlja2V5OwogCXVuaW9uIEtleXR5cGUJZG90MTE4MDIxeF9VbmNzdEtleTsKQEAgLTIxMSw3ICsyMTEsNiBAQAogCS8qICAqLwogCS8qICBEcml2ZXIgV3JpdGUgKi8KIAl1OAkJYlZhbGlkOwkJCQkvKiAgcmVjb3JkIHRoZSBzdGEgc3RhdHVzIGxpbmsgb3Igbm90PyAqLwotCXU4CQlJT1RQZWVyOwkJCS8qICBFbnVtIHZhbHVlLglIVF9JT1RfUEVFUl9FICovCiAJdTgJCXJzc2lfbGV2ZWw7CQkJLyogZm9yIFJlZnJlc2ggUkEgbWFzayAqLwogCS8qICBPRE0gV3JpdGUgKi8KIAkvKiAxIFBIWV9TVEFUVVNfSU5GTyAqLwpAQCAtMzEwLDE2ICszMDksMTAgQEAKIAogI2RlZmluZSBTVEFfUEtUU19GTVQgIihtOiVsbHUsIGM6JWxsdSwgZDolbGx1KSIKIAotc3RydWN0CXN0YV9wcml2IHsKLQl1OCAqcGFsbG9jYXRlZF9zdGFpbmZvX2J1ZjsKLQl1OCAqcHN0YWluZm9fYnVmOwotCXN0cnVjdCBydHdfcXVldWUJZnJlZV9zdGFfcXVldWU7Ci0KK3N0cnVjdCBzdGFfcHJpdiB7CiAJc3BpbmxvY2tfdCBzdGFfaGFzaF9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgICBzdGFfaGFzaFtOVU1fU1RBXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9oYXNoW05VTV9TVEFdOwogCWludCBhc29jX3N0YV9jb3VudDsKLQlzdHJ1Y3QgcnR3X3F1ZXVlIHNsZWVwX3E7Ci0Jc3RydWN0IHJ0d19xdWV1ZSB3YWtldXBfcTsKIAogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBhc29jX2xpc3Q7CkBAIC0zNDksNyArMzQyLDcgQEAKIAlzdHJ1Y3Qgd2xhbl9hY2xfcG9vbCBhY2xfbGlzdDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHdpZmlfbWFjX2hhc2godTggKm1hYykKK3N0YXRpYyBpbmxpbmUgdTMyIHdpZmlfbWFjX2hhc2goY29uc3QgdTggKm1hYykKIHsKIAl1MzIgeDsKIApAQCAtMzY2LDIwICszNTksMTUgQEAKIAlyZXR1cm4geDsKIH0KIAotdTMyCV9ydHdfaW5pdF9zdGFfcHJpdjIzYShzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2KTsKLXUzMglfcnR3X2ZyZWVfc3RhX3ByaXYyM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdik7CitpbnQgX3J0d19pbml0X3N0YV9wcml2MjNhKHN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYpOworaW50IF9ydHdfZnJlZV9zdGFfcHJpdjIzYShzdHJ1Y3Qgc3RhX3ByaXYgKnBzdGFwcml2KTsKIAotI2RlZmluZSBzdGFpbmZvX29mZnNldF92YWxpZChvZmZzZXQpIChvZmZzZXQgPCBOVU1fU1RBICYmIG9mZnNldCA+PSAwKQotaW50IHJ0d19zdGFpbmZvX29mZnNldDIzYShzdHJ1Y3Qgc3RhX3ByaXYgKnN0YXByaXYsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLXN0cnVjdCBzdGFfaW5mbyAqcnR3X2dldF9zdGFpbmZvMjNhX2J5X29mZnNldDIzYShzdHJ1Y3Qgc3RhX3ByaXYgKnN0YXByaXYsCi0JCQkJCSAgIGludCBvZmZzZXQpOwotCi1zdHJ1Y3Qgc3RhX2luZm8gKnJ0d19hbGxvY19zdGFpbmZvMjNhKHN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYsIHU4ICpod2FkZHIpOwotdTMyIHJ0d19mcmVlX3N0YWluZm8yM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHN0YV9pbmZvICpwc3RhKTsKK3N0cnVjdCBzdGFfaW5mbyAqcnR3X2FsbG9jX3N0YWluZm8yM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiwgdTggKmh3YWRkciwgZ2ZwX3QgZ2ZwKTsKK2ludCBydHdfZnJlZV9zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSk7CiB2b2lkIHJ0d19mcmVlX2FsbF9zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwotc3RydWN0IHN0YV9pbmZvICpydHdfZ2V0X3N0YWluZm8yM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiwgdTggKmh3YWRkcik7Ci11MzIgcnR3X2luaXRfYmNtY19zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworc3RydWN0IHN0YV9pbmZvICpydHdfZ2V0X3N0YWluZm8yM2Eoc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiwgY29uc3QgdTggKmh3YWRkcik7CitpbnQgcnR3X2luaXRfYmNtY19zdGFpbmZvMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogc3RydWN0IHN0YV9pbmZvICpydHdfZ2V0X2JjbWNfc3RhaW5mbzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLXU4IHJ0d19hY2Nlc3NfY3RybDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqbWFjX2FkZHIpOworYm9vbCBydHdfYWNjZXNzX2N0cmwyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKm1hY19hZGRyKTsKIAogI2VuZGlmIC8qIF9TVEFfSU5GT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl9oYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS91c2JfaGFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZGVjM2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl9oYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfX1VTQl9IQUxfSF9fCi0jZGVmaW5lIF9fVVNCX0hBTF9IX18KLQotaW50IHJ0bDg3MjNhdV9zZXRfaGFsX29wcyhzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLQotI2VuZGlmIC8qIF9fVVNCX0hBTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS91c2Jfb3BzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvdXNiX29wcy5oCmluZGV4IDU1ZDEzODAuLmFkZThiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS91c2Jfb3BzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl9vcHMuaApAQCAtMzQsMTkgKzM0LDcgQEAKICNkZWZpbmUgTUFYX1ZFTkRPUl9SRVFfQ01EX1NJWkUJMjU0CQkvKiA4MTg4Y3UgU0lFIFN1cHBvcnQgKi8KICNkZWZpbmUgTUFYX1VTQl9JT19DVExfU0laRQkoTUFYX1ZFTkRPUl9SRVFfQ01EX1NJWkUgK0FMSUdOTUVOVF9VTklUKQogCi0jZGVmaW5lIHJ0d191c2JfY29udHJvbF9tc2coZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsCVwKLQkJCSAgICBpbmRleCwgZGF0YSwgc2l6ZSwgdGltZW91dF9tcykJCVwKLQl1c2JfY29udHJvbF9tc2coKGRldiksIChwaXBlKSwgKHJlcXVlc3QpLCAocmVxdWVzdHR5cGUpLAlcCi0JCQkodmFsdWUpLCAoaW5kZXgpLCAoZGF0YSksIChzaXplKSwgKHRpbWVvdXRfbXMpKQotI2RlZmluZSBydHdfdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwgYWN0dWFsX2xlbmd0aCwgdGltZW91dF9tcykgXAotCXVzYl9idWxrX21zZygodXNiX2RldiksIChwaXBlKSwgKGRhdGEpLCAobGVuKSwgKGFjdHVhbF9sZW5ndGgpLAlcCi0JCSAgICAgKHRpbWVvdXRfbXMpKQotCiB2b2lkIHJ0bDg3MjNhdV9zZXRfaHdfdHlwZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKTsKLSNkZWZpbmUgaGFsX3NldF9od190eXBlIHJ0bDg3MjNhdV9zZXRfaHdfdHlwZQotCi12b2lkIHJ0bDg3MjNhdV9zZXRfaW50Zl9vcHMoc3RydWN0IF9pb19vcHMgKnBvcHMpOwotI2RlZmluZSB1c2Jfc2V0X2ludGZfb3BzIHJ0bDg3MjNhdV9zZXRfaW50Zl9vcHMKIAogdm9pZCBydGw4NzIzYXVfcmVjdl90YXNrbGV0KHZvaWQgKnByaXYpOwogCkBAIC03NSwyMyArNjMsNiBAQAogCWF0b21pY19zZXQoJmR2b2JqLT5jb250aW51YWxfdXJiX2Vycm9yLCAwKTsKIH0KIAotI2RlZmluZSBVU0JfSElHSF9TUEVFRF9CVUxLX1NJWkUJNTEyCi0jZGVmaW5lIFVTQl9GVUxMX1NQRUVEX0JVTEtfU0laRQk2NAotCi1zdGF0aWMgaW5saW5lIHU4IHJ0d191c2JfYnVsa19zaXplX2JvdW5kYXJ5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJCSAgICBpbnQgYnVmX2xlbikKLXsKLQl1OCByc3QgPSB0cnVlOwotCXN0cnVjdCBkdm9ial9wcml2ICpwZHZvYmpwcml2ID0gYWRhcHRlcl90b19kdm9iaihwYWRhcHRlcik7Ci0KLQlpZiAocGR2b2JqcHJpdi0+aXNoaWdoc3BlZWQpCi0JCXJzdCA9ICgwID09IChidWZfbGVuKSAlIFVTQl9ISUdIX1NQRUVEX0JVTEtfU0laRSkgPwotCQkgICAgICB0cnVlIDogZmFsc2U7Ci0JZWxzZQotCQlyc3QgPSAoMCA9PSAoYnVmX2xlbikgJSBVU0JfRlVMTF9TUEVFRF9CVUxLX1NJWkUpID8KLQkJICAgICAgdHJ1ZSA6IGZhbHNlOwotCXJldHVybiByc3Q7Ci19Ci0KK3ZvaWQgcnRsODcyM2F1X2NoaXBfY29uZmlndXJlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOwogCiAjZW5kaWYgLyogX19VU0JfT1BTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvdXNiX29wc19saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl9vcHNfbGludXguaAppbmRleCA4ZjVjNTllLi5lNTQwYTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvdXNiX29wc19saW51eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS91c2Jfb3BzX2xpbnV4LmgKQEAgLTE3LDMwICsxNywyNSBAQAogCiAjZGVmaW5lIFZFTkRPUl9DTURfTUFYX0RBVEFfTEVOCTI1NAogCi0jZGVmaW5lIFJUV19VU0JfQ09OVFJPTF9NU0dfVElNRU9VVF9URVNUCTEwLyogbXMgKi8KICNkZWZpbmUgUlRXX1VTQl9DT05UUk9MX01TR19USU1FT1VUCTUwMC8qIG1zICovCiAKICNkZWZpbmUgTUFYX1VTQkNUUkxfVkVORE9SUkVRX1RJTUVTCTEwCiAKLSNkZWZpbmUgUlRXX1VTQl9CVUxLT1VUX1RJTUVPVVQJNTAwMC8qIG1zICovCitpbnQgcnRsODcyM2F1X3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgY250LAorCQkJc3RydWN0IHJlY3ZfYnVmICpwcmVjdmJ1Zik7Cit2b2lkIHJ0bDg3MjNhdV9yZWFkX3BvcnRfY2FuY2VsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpOworaW50IHJ0bDg3MjNhdV93cml0ZV9wb3J0KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgY250LAorCQkJIHN0cnVjdCB4bWl0X2J1ZiAqcHhtaXRidWYpOwordm9pZCBydGw4NzIzYXVfd3JpdGVfcG9ydF9jYW5jZWwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CitpbnQgcnRsODcyM2F1X3JlYWRfaW50ZXJydXB0KHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIpOwogCi0jZGVmaW5lIF91c2JjdHJsX3ZlbmRvcnJlcV9hc3luY19jYWxsYmFjayh1cmIsIHJlZ3MpCQlcCi0JX3VzYmN0cmxfdmVuZG9ycmVxX2FzeW5jX2NhbGxiYWNrKHVyYikKLSNkZWZpbmUgdXNiX3dyaXRlX21lbTIzYV9jb21wbGV0ZShwdXJiLCByZWdzKQl1c2Jfd3JpdGVfbWVtMjNhX2NvbXBsZXRlKHB1cmIpCi0jZGVmaW5lIHVzYl93cml0ZV9wb3J0MjNhX2NvbXBsZXRlKHB1cmIsIHJlZ3MpCXVzYl93cml0ZV9wb3J0MjNhX2NvbXBsZXRlKHB1cmIpCi0jZGVmaW5lIHVzYl9yZWFkX3BvcnRfY29tcGxldGUocHVyYiwgcmVncykJdXNiX3JlYWRfcG9ydF9jb21wbGV0ZShwdXJiKQotI2RlZmluZSB1c2JfcmVhZF9pbnRlcnJ1cHRfY29tcGxldGUocHVyYiwgcmVncykJCQlcCi0JdXNiX3JlYWRfaW50ZXJydXB0X2NvbXBsZXRlKHB1cmIpCi0KLXVuc2lnbmVkIGludCBmZmFkZHIycGlwZWhkbDIzYShzdHJ1Y3QgZHZvYmpfcHJpdiAqcGR2b2JqLCB1MzIgYWRkcik7Ci0KLXZvaWQgdXNiX3JlYWRfbWVtMjNhKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyLCB1MzIgY250LCB1OCAqcm1lbSk7Ci12b2lkIHVzYl93cml0ZV9tZW0yM2Eoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCwgdTMyIGFkZHIsIHUzMiBjbnQsIHU4ICp3bWVtKTsKLQotdm9pZCB1c2JfcmVhZF9wb3J0X2NhbmNlbDIzYShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsKTsKLQotdTMyIHVzYl93cml0ZV9wb3J0MjNhKHN0cnVjdCBpbnRmX2hkbCAqcGludGZoZGwsIHUzMiBhZGRyLCB1MzIgY250LAotCQkgICBzdHJ1Y3QgeG1pdF9idWYgKndtZW0pOwotdm9pZCB1c2Jfd3JpdGVfcG9ydDIzYV9jYW5jZWwoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCk7Cit1OCBydGw4NzIzYXVfcmVhZDgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIpOwordTE2IHJ0bDg3MjNhdV9yZWFkMTYoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIpOwordTMyIHJ0bDg3MjNhdV9yZWFkMzIoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIpOworaW50IHJ0bDg3MjNhdV93cml0ZTgoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIsIHU4IHZhbCk7CitpbnQgcnRsODcyM2F1X3dyaXRlMTYoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTMyIGFkZHIsIHUxNiB2YWwpOworaW50IHJ0bDg3MjNhdV93cml0ZTMyKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgdmFsKTsKK2ludCBydGw4NzIzYXVfd3JpdGVOKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCisJCSAgICAgdTMyIGFkZHIsIHUzMiBsZW5ndGgsIHU4ICpwZGF0YSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl9vc2ludGYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS91c2Jfb3NpbnRmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDg3NjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl9vc2ludGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfX1VTQl9PU0lOVEZfSAotI2RlZmluZSBfX1VTQl9PU0lOVEZfSAotCi0jaW5jbHVkZSA8b3NkZXBfc2VydmljZS5oPgotI2luY2x1ZGUgPGRydl90eXBlcy5oPgotI2luY2x1ZGUgPHVzYl92ZW5kb3JfcmVxLmg+Ci0KLSNkZWZpbmUgVVNCRF9IQUxURUQoX3N0YXR1cykgKCh1MzIpKF9zdGF0dXMpID4+IDMwID09IDMpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3VzYl92ZW5kb3JfcmVxLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvdXNiX3ZlbmRvcl9yZXEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0NTA4ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvdXNiX3ZlbmRvcl9yZXEuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfVVNCX1ZFTkRPUl9SRVFVRVNUX0hfCi0jZGVmaW5lIF9VU0JfVkVORE9SX1JFUVVFU1RfSF8KLQotLyogNAlTZXQvR2V0IFJlZ2lzdGVyIHJlbGF0ZWQgd0luZGV4L0RhdGEgKi8KLSNkZWZpbmUJUlRfVVNCX1JFU0VUX01BU0tfT0ZGCQkwCi0jZGVmaW5lCVJUX1VTQl9SRVNFVF9NQVNLX09OCQkxCi0jZGVmaW5lCVJUX1VTQl9TTEVFUF9NQVNLX09GRgkJMAotI2RlZmluZQlSVF9VU0JfU0xFRVBfTUFTS19PTgkJMQotI2RlZmluZQlSVF9VU0JfTERPX09OCQkJMQotI2RlZmluZQlSVF9VU0JfTERPX09GRgkJCTAKLQotLyogNAlTZXQvR2V0IFNZU0NMSyByZWxhdGVkCXdWYWx1ZSBvciBEYXRhICovCi0jZGVmaW5lCVJUX1VTQl9TWVNDTEtfMzJLSFoJCTAKLSNkZWZpbmUJUlRfVVNCX1NZU0NMS180ME1IWgkJMQotI2RlZmluZQlSVF9VU0JfU1lTQ0xLXzYwTUhaCQkyCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3dpZmkuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS93aWZpLmgKaW5kZXggYjUwMzRjNi4uY2NjZWE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3dpZmkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUvd2lmaS5oCkBAIC0yMywxODkgKzIzLDYgQEAKICAqLwogI2RlZmluZQlXaUZpTmF2VXBwZXJVcwkJMzAwMDAJLyogIDMwIG1zICovCiAKLWVudW0gV0lGSV9GUkFNRV9UWVBFIHsKLQlXSUZJX01HVF9UWVBFICA9CSgwKSwKLQlXSUZJX0NUUkxfVFlQRSA9CShCSVQoMikpLAotCVdJRklfREFUQV9UWVBFID0JKEJJVCgzKSksCi0JV0lGSV9RT1NfREFUQV9UWVBFCT0gKEJJVCg3KXxCSVQoMykpLAkvKiAgUW9TIERhdGEgKi8KLX07Ci0KLWVudW0gV0lGSV9GUkFNRV9TVUJUWVBFIHsKLQkvKiAgYmVsb3cgaXMgZm9yIG1ndCBmcmFtZSAqLwotCVdJRklfQVNTT0NSRVEgPSAoMCB8IFdJRklfTUdUX1RZUEUpLAotCVdJRklfQVNTT0NSU1AgPSAoQklUKDQpIHwgV0lGSV9NR1RfVFlQRSksCi0JV0lGSV9SRUFTU09DUkVRID0gKEJJVCg1KSB8IFdJRklfTUdUX1RZUEUpLAotCVdJRklfUkVBU1NPQ1JTUCA9IChCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX01HVF9UWVBFKSwKLQlXSUZJX1BST0JFUkVRID0gKEJJVCg2KSB8IFdJRklfTUdUX1RZUEUpLAotCVdJRklfUFJPQkVSU1AgPSAoQklUKDYpIHwgQklUKDQpIHwgV0lGSV9NR1RfVFlQRSksCi0JV0lGSV9CRUFDT04gPSAoQklUKDcpIHwgV0lGSV9NR1RfVFlQRSksCi0JV0lGSV9BVElNID0gKEJJVCg3KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAotCVdJRklfRElTQVNTT0MgPSAoQklUKDcpIHwgQklUKDUpIHwgV0lGSV9NR1RfVFlQRSksCi0JV0lGSV9BVVRIID0gKEJJVCg3KSB8IEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAotCVdJRklfREVBVVRIID0gKEJJVCg3KSB8IEJJVCg2KSB8IFdJRklfTUdUX1RZUEUpLAotCVdJRklfQUNUSU9OID0gKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAotCi0JLyogIGJlbG93IGlzIGZvciBjb250cm9sIGZyYW1lICovCi0JV0lGSV9QU1BPTEwgPSAoQklUKDcpIHwgQklUKDUpIHwgV0lGSV9DVFJMX1RZUEUpLAotCVdJRklfUlRTID0gKEJJVCg3KSB8IEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfQ1RSTF9UWVBFKSwKLQlXSUZJX0NUUyA9IChCSVQoNykgfCBCSVQoNikgfCBXSUZJX0NUUkxfVFlQRSksCi0JV0lGSV9BQ0sgPSAoQklUKDcpIHwgQklUKDYpIHwgQklUKDQpIHwgV0lGSV9DVFJMX1RZUEUpLAotCVdJRklfQ0ZFTkQgPSAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpIHwgV0lGSV9DVFJMX1RZUEUpLAotCVdJRklfQ0ZFTkRfQ0ZBQ0sgPSAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpIHwgQklUKDQpIHwgV0lGSV9DVFJMX1RZUEUpLAotCi0JLyogIGJlbG93IGlzIGZvciBkYXRhIGZyYW1lICovCi0JV0lGSV9EQVRBID0gKDAgfCBXSUZJX0RBVEFfVFlQRSksCi0JV0lGSV9EQVRBX0NGQUNLID0gKEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKLQlXSUZJX0RBVEFfQ0ZQT0xMID0gKEJJVCg1KSB8IFdJRklfREFUQV9UWVBFKSwKLQlXSUZJX0RBVEFfQ0ZBQ0tQT0xMID0gKEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKLQlXSUZJX0RBVEFfTlVMTCA9IChCSVQoNikgfCBXSUZJX0RBVEFfVFlQRSksCi0JV0lGSV9DRl9BQ0sgPSAoQklUKDYpIHwgQklUKDQpIHwgV0lGSV9EQVRBX1RZUEUpLAotCVdJRklfQ0ZfUE9MTCA9IChCSVQoNikgfCBCSVQoNSkgfCBXSUZJX0RBVEFfVFlQRSksCi0JV0lGSV9DRl9BQ0tQT0xMID0gKEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKLQlXSUZJX1FPU19EQVRBX05VTEwgPSAoQklUKDYpIHwgV0lGSV9RT1NfREFUQV9UWVBFKSwKLX07Ci0KLQotZW51bSBXSUZJX1JFR19ET01BSU4gewotCURPTUFJTl9GQ0MJCT0gMSwKLQlET01BSU5fSUMJCT0gMiwKLQlET01BSU5fRVRTSQkJPSAzLAotCURPTUFJTl9TUEFJTgkJPSA0LAotCURPTUFJTl9GUkFOQ0UJCT0gNSwKLQlET01BSU5fTUtLCQk9IDYsCi0JRE9NQUlOX0lTUkFFTAkJPSA3LAotCURPTUFJTl9NS0sxCQk9IDgsCi0JRE9NQUlOX01LSzIJCT0gOSwKLQlET01BSU5fTUtLMwkJPSAxMCwKLQlET01BSU5fTUFYCi19OwotCi0KLSNkZWZpbmUgU2V0VG9EcyhwYnVmKQlcCi0JKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUykpCi0KLSNkZWZpbmUgU2V0RnJEcyhwYnVmKQlcCi0JKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKSkKLQotI2RlZmluZSBnZXRfdG9mcl9kcyhwZnJhbWUpCSgoaWVlZTgwMjExX2hhc190b2RzKHBmcmFtZSkgPDwgMSkgfCBcCi0JCQkJIGllZWU4MDIxMV9oYXNfZnJvbWRzKHBmcmFtZSkpCi0KLSNkZWZpbmUgU2V0TUZyYWcocGJ1ZikJXAotCSgqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpCi0KLSNkZWZpbmUgQ2xlYXJNRnJhZyhwYnVmKQlcCi0JKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgJj0gKH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSkKLQotI2RlZmluZSBTZXRSZXRyeShwYnVmKQlcCi0JKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUkVUUlkpKQotCi0jZGVmaW5lIFNldFB3ck1ndChwYnVmKQlcCi0JKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pKQotCi0jZGVmaW5lIFNldE1EYXRhKHBidWYpCVwKLQkoKih1bnNpZ25lZCBzaG9ydCAqKShwYnVmKSB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkpCi0KLSNkZWZpbmUgU2V0UHJpdmFjeShwYnVmKQlcCi0JKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkKLQotI2RlZmluZSBTZXRGcmFtZVR5cGUocGJ1ZiwgdHlwZSkJXAotCWRvIHsJXAotCQkqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYofihCSVQoMykgfCBCSVQoMikpKTsgXAotCQkqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYodHlwZSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNldEZyYW1lU3ViVHlwZShwYnVmLCB0eXBlKSBcCi0JZG8geyAgICBcCi0JCSoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikgJj0gY3B1X3RvX2xlMTYofihCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKTsgXAotCQkqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpIHw9IGNwdV90b19sZTE2KHR5cGUpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBHZXRUdXBsZUNhY2hlKHBidWYpCShjcHVfdG9fbGUxNigqKHVuc2lnbmVkIHNob3J0ICopKCh1bnNpZ25lZCBsb25nKShwYnVmKSArIDIyKSkpCi0KLSNkZWZpbmUgU2V0RnJhZ051bShwYnVmLCBudW0pIFwKLQlkbyB7ICAgIFwKLQkJKih1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZykocGJ1ZikgKyAyMikgPSBcCi0JCQkoKCoodW5zaWduZWQgc2hvcnQgKikoKHVuc2lnbmVkIGxvbmcpKHBidWYpICsgMjIpKSAmIGxlMTZfdG9fY3B1KH4oMHgwMDBmKSkpIHwgXAotCQkJY3B1X3RvX2xlMTYoMHgwZiAmIChudW0pKTsgICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNldFNlcU51bShwYnVmLCBudW0pIFwKLQlkbyB7ICAgIFwKLQkJKih1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZykocGJ1ZikgKyAyMikgPSBcCi0JCQkoKCoodW5zaWduZWQgc2hvcnQgKikoKHVuc2lnbmVkIGxvbmcpKHBidWYpICsgMjIpKSAmIGxlMTZfdG9fY3B1KCh1bnNpZ25lZCBzaG9ydCkweDAwMGYpKSB8IFwKLQkJCWxlMTZfdG9fY3B1KCh1bnNpZ25lZCBzaG9ydCkoMHhmZmYwICYgKG51bSA8PCA0KSkpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTZXREdXJhdGlvbihwYnVmLCBkdXIpIFwKLQkoKih1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZykocGJ1ZikgKyAyKSA9CQlcCi0JIGNwdV90b19sZTE2KDB4ZmZmZiAmIChkdXIpKSkKLQotI2RlZmluZSBTZXRQcmlvcml0eShwYnVmLCB0aWQpCVwKLQkoKih1bnNpZ25lZCBzaG9ydCAqKShwYnVmKSB8PSBjcHVfdG9fbGUxNih0aWQgJiAweGYpKQotCi0jZGVmaW5lIFNldEVPU1AocGJ1ZiwgZW9zcCkJXAotCSgqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpIHw9IGNwdV90b19sZTE2KChlb3NwICYgMSkgPDwgNCkpCi0KLSNkZWZpbmUgU2V0QWNrcG9saWN5KHBidWYsIGFjaykJXAotCSgqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpIHw9IGNwdV90b19sZTE2KChhY2sgJiAzKSA8PCA1KSkKLQotI2RlZmluZSBTZXRBTXNkdShwYnVmLCBhbXNkdSkJXAotCSgqKHVuc2lnbmVkIHNob3J0ICopKHBidWYpIHw9IGNwdV90b19sZTE2KChhbXNkdSAmIDEpIDw8IDcpKQotCi0jZGVmaW5lIEdldEFpZChwYnVmKQkJCQkJCQlcCi0JKGNwdV90b19sZTE2KCoodW5zaWduZWQgc2hvcnQgKikoKHVuc2lnbmVkIGxvbmcpKHBidWYpICsgMikpICYJXAotCSAweDNmZmYpCi0KLSNkZWZpbmUgR2V0VGlkKHBidWYpCQkJCQkJCVwKLQkoY3B1X3RvX2xlMTYoKih1bnNpZ25lZCBzaG9ydCAqKSgodW5zaWduZWQgbG9uZykocGJ1ZikgKwlcCi0JICgoKGllZWU4MDIxMV9oYXNfdG9kcyhwYnVmKTw8MSkgfAkJCQlcCi0JIGllZWU4MDIxMV9oYXNfZnJvbWRzKHBidWYpKSA9PSAzID8gMzAgOiAyNCkpKSAmIDB4MDAwZikKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpnZXRfaGRyX2Jzc2lkKHVuc2lnbmVkIGNoYXIgKnBmcmFtZSkKLXsKLQl1bnNpZ25lZCBjaGFyCSpzYTsKLQl1bnNpZ25lZCBpbnQJdG9fZnJfZHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBwZnJhbWU7Ci0KLQl0b19mcl9kcyA9IChpZWVlODAyMTFfaGFzX3RvZHMoaGRyLT5mcmFtZV9jb250cm9sKSA8PCAxKSB8Ci0JCSAgICBpZWVlODAyMTFfaGFzX2Zyb21kcyhoZHItPmZyYW1lX2NvbnRyb2wpOwotCi0Jc3dpdGNoICh0b19mcl9kcykgewotCWNhc2UgMHgwMDoJLyogIFRvRHM9MCwgRnJvbURzPTAgKi8KLQkJc2EgPSBoZHItPmFkZHIzOwotCQlicmVhazsKLQljYXNlIDB4MDE6CS8qICBUb0RzPTAsIEZyb21Ecz0xICovCi0JCXNhID0gaGRyLT5hZGRyMjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyOgkvKiAgVG9Ecz0xLCBGcm9tRHM9MCAqLwotCQlzYSA9IGhkci0+YWRkcjE7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMzoJLyogIFRvRHM9MSwgRnJvbURzPTEgKi8KLQkJc2EgPSBoZHItPmFkZHIxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzYSA9IE5VTEw7IC8qICAqLwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHNhOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQlCZWxvdyBpcyBmb3IgdGhlIHNlY3VyaXR5IHJlbGF0ZWQgZGVmaW5pdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgX1JFU0VSVkVEX0ZSQU1FX1RZUEVfCQkwCi0jZGVmaW5lIF9TS0JfRlJBTUVfVFlQRV8JCTIKLSNkZWZpbmUgX1BSRV9BTExPQ01FTV8JCQkxCi0jZGVmaW5lIF9QUkVfQUxMT0NIRFJfCQkJMwotI2RlZmluZSBfUFJFX0FMTE9DTExDSERSXwkJNAotI2RlZmluZSBfUFJFX0FMTE9DSUNWSERSXwkJNQotI2RlZmluZSBfUFJFX0FMTE9DTUlDSERSXwkJNgotCi0jZGVmaW5lIF9TSUZTVElNRV8JCQkJCVwKLQkoKHByaXYtPnBtaWItPmRvdDExQnNzVHlwZS5uZXRfd29ya190eXBlICYgV0lSRUxFU1NfMTFBKSA/IDE2IDogMTApCi0jZGVmaW5lIF9BQ0tDVFNMTkdfCQkJMTQJLyogMTQgYnl0ZXMgbG9uZywgaW5jbHVkaW5nIGNyY2xuZyAqLwotI2RlZmluZSBfQ1JDTE5HXwkJCTQKLQogI2RlZmluZSBfQVNPQ1JFUV9JRV9PRkZTRVRfCQk0CS8qICBleGNsdWRpbmcgd2xhbl9oZHIgKi8KICNkZWZpbmUJX0FTT0NSU1BfSUVfT0ZGU0VUXwkJNgogI2RlZmluZSBfUkVBU09DUkVRX0lFX09GRlNFVF8JCTEwCkBAIC0yMTksMzkgKzM2LDggQEAKIAogI2RlZmluZSBfRklYRURfSUVfTEVOR1RIXwkJX0JFQUNPTl9JRV9PRkZTRVRfCiAKLSNkZWZpbmUgX1NTSURfSUVfCQkJMAotI2RlZmluZSBfU1VQUE9SVEVEUkFURVNfSUVfCQkxCi0jZGVmaW5lIF9EU1NFVF9JRV8JCQkzCi0jZGVmaW5lIF9USU1fSUVfCQkJNQotI2RlZmluZSBfSUJTU19QQVJBX0lFXwkJCTYKLSNkZWZpbmUgX0NPVU5UUllfSUVfCQkJNwotI2RlZmluZSBfQ0hMR0VUWFRfSUVfCQkJMTYKLSNkZWZpbmUgX1NVUFBPUlRFRF9DSF9JRV8JCTM2Ci0jZGVmaW5lIF9DSF9TV1RJQ0hfQU5OT1VOQ0VfCTM3CS8qIFNlY29uZGFyeSBDaGFubmVsIE9mZnNldCAqLwotI2RlZmluZSBfUlNOX0lFXzJfCQkJNDgKLSNkZWZpbmUgX1NTTl9JRV8xXwkJCTIyMQotI2RlZmluZSBfRVJQSU5GT19JRV8JCQk0MgotI2RlZmluZSBfRVhUX1NVUFBPUlRFRFJBVEVTX0lFXwkJNTAKIAotI2RlZmluZSBfSFRfQ0FQQUJJTElUWV9JRV8JCTQ1Ci0jZGVmaW5lIF9GVElFXwkJCQk1NQotI2RlZmluZSBfVElNRU9VVF9JVFZMX0lFXwkJNTYKLSNkZWZpbmUgX1NSQ19JRV8JCQk1OQotI2RlZmluZSBfSFRfRVhUUkFfSU5GT19JRV8JCTYxCi0jZGVmaW5lIF9IVF9BRERfSU5GT19JRV8JCTYxIC8qIF9IVF9FWFRSQV9JTkZPX0lFXyAqLwotCi0KLSNkZWZpbmUJRUlEX0JTU0NvZXhpc3RlbmNlCQk3MiAvKiAgMjAvNDAgQlNTIENvZXhpc3RlbmNlICovCiAjZGVmaW5lCUVJRF9CU1NJbnRvbGVyYW50Q2hsUmVwb3J0CTczCi0jZGVmaW5lIF9SSUNfRGVzY3JpcHRvcl9JRV8JCTc1Ci0KLSNkZWZpbmUgX0xJTktfSURfSUVfCQkxMDEKLSNkZWZpbmUgX0NIX1NXSVRDSF9USU1JTkdfCTEwNAotI2RlZmluZSBfUFRJX0JVRkZFUl9TVEFUVVNfCTEwNgotI2RlZmluZSBfRVhUX0NBUF9JRV8JCTEyNwotI2RlZmluZSBfVkVORE9SX1NQRUNJRklDX0lFXwkyMjEKLQotI2RlZmluZQlfUkVTRVJWRUQ0N18JCTQ3CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkJCQlCZWxvdyBpcyB0aGUgZml4ZWQgZWxlbWVudHMuLi4KQEAgLTI2Niw0MSArNTIsNiBAQAogI2RlZmluZSBfU1RBVFVTX0NPREVfCQkyCiAjZGVmaW5lIF9USU1FU1RBTVBfCQk4CiAKLSNkZWZpbmUgQVVUSF9PRERfVE8JCTAKLSNkZWZpbmUgQVVUSF9FVkVOX1RPCQkxCi0KLSNkZWZpbmUgV0xBTl9FVEhDT05WX0VOQ0FQCTEKLSNkZWZpbmUgV0xBTl9FVEhDT05WX1JGQzEwNDIJMgotI2RlZmluZSBXTEFOX0VUSENPTlZfODAyMWgJMwotCi0jZGVmaW5lIGNhcF9FU1MJCUJJVCgwKQotI2RlZmluZSBjYXBfSUJTUwlCSVQoMSkKLSNkZWZpbmUgY2FwX0NGUG9sbGFibGUJQklUKDIpCi0jZGVmaW5lIGNhcF9DRlJlcXVlc3QJQklUKDMpCi0jZGVmaW5lIGNhcF9Qcml2YWN5CUJJVCg0KQotI2RlZmluZSBjYXBfU2hvcnRQcmVtYmxlIEJJVCg1KQotI2RlZmluZSBjYXBfUEJDQwlCSVQoNikKLSNkZWZpbmUgY2FwX0NoQWdpbGl0eQlCSVQoNykKLSNkZWZpbmUgY2FwX1NwZWNNZ210CUJJVCg4KQotI2RlZmluZSBjYXBfUW9TCQlCSVQoOSkKLSNkZWZpbmUgY2FwX1Nob3J0U2xvdAlCSVQoMTApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCQlCZWxvdyBpcyB0aGUgZGVmaW5pdGlvbiBmb3IgODAyLjExaSAvIDgwMi4xeAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgX0lFRUU4MDIxWF9NR1RfCQkJMQkvKiAgV1BBICovCi0jZGVmaW5lIF9JRUVFODAyMVhfUFNLXwkJCTIJLyogIFdQQSB3aXRoIHByZS1zaGFyZWQga2V5ICovCi0KLS8qCi0jZGVmaW5lIF9OT19QUklWQUNZXwkJCTAKLSNkZWZpbmUgX1dFUF80MF9QUklWQUNZXwkJMQotI2RlZmluZSBfVEtJUF9QUklWQUNZXwkJCTIKLSNkZWZpbmUgX1dSQVBfUFJJVkFDWV8JCQkzCi0jZGVmaW5lIF9DQ01QX1BSSVZBQ1lfCQkJNAotI2RlZmluZSBfV0VQXzEwNF9QUklWQUNZXwkJNQotI2RlZmluZSBfV0VQX1dQQV9NSVhFRF9QUklWQUNZXyA2CVdFUCArIFdQQQotKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkJCUJlbG93IGlzIHRoZSBkZWZpbml0aW9uIGZvciBXTU0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMTIsMTMgKzYzLDYgQEAKIAkJCQlCZWxvdyBpcyB0aGUgZGVmaW5pdGlvbiBmb3IgODAyLjExbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBTZXRPcmRlckJpdChwYnVmKQkJCQkJCVwKLQkoKih1bnNpZ25lZCBzaG9ydCAqKShwYnVmKSB8PSBjcHVfdG9fbGUxNihfT1JERVJfKSkKLQotI2RlZmluZSBHZXRPcmRlckJpdChwYnVmKQkJXAotCSgoKCoodW5zaWduZWQgc2hvcnQgKikocGJ1ZikpICYgbGUxNl90b19jcHUoX09SREVSXykpICE9IDApCi0KLQogLyogc3RydWN0IHJ0d19pZWVlODAyMTFfaHRfY2FwIC0gSFQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogICoKICAqIFRoaXMgc3RydWN0dXJlIHJlZmVycyB0byAiSFQgaW5mb3JtYXRpb24gZWxlbWVudCIgYXMKQEAgLTM3MiwzOCArMTE2LDcgQEAKIH0gIF9fcGFja2VkOwogCiAKLSNkZWZpbmUgT1BfTU9ERV9QVVJFICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE9QX01PREVfTUFZX0JFX0xFR0FDWV9TVEFTICAgICAgMQotI2RlZmluZSBPUF9NT0RFXzIwTUhaX0hUX1NUQV9BU1NPQ0VEICAgIDIKLSNkZWZpbmUgT1BfTU9ERV9NSVhFRCAgICAgICAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgSFRfSU5GT19IVF9QQVJBTV9TRUNPTkRBUllfQ0hOTF9PRkZfTUFTSwkoKHU4KSBCSVQoMCkgfCBCSVQoMSkpCi0jZGVmaW5lIEhUX0lORk9fSFRfUEFSQU1fU0VDT05EQVJZX0NITkxfQUJPVkUJCSgodTgpIEJJVCgwKSkKLSNkZWZpbmUgSFRfSU5GT19IVF9QQVJBTV9TRUNPTkRBUllfQ0hOTF9CRUxPVwkJKCh1OCkgQklUKDApIHwgQklUKDEpKQotI2RlZmluZSBIVF9JTkZPX0hUX1BBUkFNX1JFQ19UUkFOU19DSE5MX1dJRFRICQkoKHU4KSBCSVQoMikpCi0jZGVmaW5lIEhUX0lORk9fSFRfUEFSQU1fUklGU19NT0RFCQkJKCh1OCkgQklUKDMpKQotI2RlZmluZSBIVF9JTkZPX0hUX1BBUkFNX0NUUkxfQUNDRVNTX09OTFkJCSgodTgpIEJJVCg0KSkKLSNkZWZpbmUgSFRfSU5GT19IVF9QQVJBTV9TUlZfSU5URVJWQUxfR1JBTlVMQVJJVFkJKCh1OCkgQklUKDUpKQotCi0jZGVmaW5lIEhUX0lORk9fT1BFUkFUSU9OX01PREVfT1BfTU9ERV9NQVNLCVwKLQkJKCh1MTYpICgweDAwMDEgfCAweDAwMDIpKQotI2RlZmluZSBIVF9JTkZPX09QRVJBVElPTl9NT0RFX09QX01PREVfT0ZGU0VUCQkwCi0jZGVmaW5lIEhUX0lORk9fT1BFUkFUSU9OX01PREVfTk9OX0dGX0RFVlNfUFJFU0VOVAkoKHU4KSBCSVQoMikpCi0jZGVmaW5lIEhUX0lORk9fT1BFUkFUSU9OX01PREVfVFJBTlNNSVRfQlVSU1RfTElNSVQJKCh1OCkgQklUKDMpKQotI2RlZmluZSBIVF9JTkZPX09QRVJBVElPTl9NT0RFX05PTl9IVF9TVEFfUFJFU0VOVAkoKHU4KSBCSVQoNCkpCi0KLSNkZWZpbmUgSFRfSU5GT19TVEJDX1BBUkFNX0RVQUxfQkVBQ09OCQkoKHUxNikgQklUKDYpKQotI2RlZmluZSBIVF9JTkZPX1NUQkNfUEFSQU1fRFVBTF9TVEJDX1BST1RFQ1QJKCh1MTYpIEJJVCg3KSkKLSNkZWZpbmUgSFRfSU5GT19TVEJDX1BBUkFNX1NFQ09OREFSWV9CQ04JKCh1MTYpIEJJVCg4KSkKLSNkZWZpbmUgSFRfSU5GT19TVEJDX1BBUkFNX0xTSUdfVFhPUF9QUk9URUNUX0FMTE9XRUQJKCh1MTYpIEJJVCg5KSkKLSNkZWZpbmUgSFRfSU5GT19TVEJDX1BBUkFNX1BDT19BQ1RJVkUJCSgodTE2KSBCSVQoMTApKQotI2RlZmluZSBIVF9JTkZPX1NUQkNfUEFSQU1fUENPX1BIQVNFCQkoKHUxNikgQklUKDExKSkKLQotCi0KIC8qCT09PT09PT09PT09PT09PVdQUyBTZWN0aW9uPT09PT09PT09PT09PT09ICovCi0vKglGb3IgV1BTdjEuMCAqLwotI2RlZmluZSBXUFNPVUkJCQkJCTB4MDA1MGYyMDQKIC8qCVdQUyBhdHRyaWJ1dGUgSUQgKi8KICNkZWZpbmUgV1BTX0FUVFJfVkVSMQkJCQkweDEwNEEKICNkZWZpbmUgV1BTX0FUVFJfU0lNUExFX0NPTkZfU1RBVEUJCTB4MTA0NApAQCAtNDI1LDE4MiArMTM4LDYgQEAKICNkZWZpbmUgV1BTX0FUVFJfVkVORE9SX0VYVAkJCTB4MTA0OQogI2RlZmluZSBXUFNfQVRUUl9TRUxFQ1RFRF9SRUdJU1RSQVIJCTB4MTA0MQogCi0vKglWYWx1ZSBvZiBXUFMgYXR0cmlidXRlICJXUFNfQVRUUl9ERVZJQ0VfTkFNRSAqLwotI2RlZmluZSBXUFNfTUFYX0RFVklDRV9OQU1FX0xFTgkJCTMyCi0KLS8qCVZhbHVlIG9mIFdQUyBSZXF1ZXN0IFR5cGUgQXR0cmlidXRlICovCi0jZGVmaW5lIFdQU19SRVFfVFlQRV9FTlJPTExFRV9JTkZPX09OTFkJCTB4MDAKLSNkZWZpbmUgV1BTX1JFUV9UWVBFX0VOUk9MTEVFX09QRU5fODAyMVgJMHgwMQotI2RlZmluZSBXUFNfUkVRX1RZUEVfUkVHSVNUUkFSCQkJMHgwMgotI2RlZmluZSBXUFNfUkVRX1RZUEVfV0xBTl9NQU5BR0VSX1JFR0lTVFJBUgkweDAzCi0KLS8qCVZhbHVlIG9mIFdQUyBSZXNwb25zZSBUeXBlIEF0dHJpYnV0ZSAqLwotI2RlZmluZSBXUFNfUkVTUE9OU0VfVFlQRV9JTkZPX09OTFkJCTB4MDAKLSNkZWZpbmUgV1BTX1JFU1BPTlNFX1RZUEVfODAyMVgJCQkweDAxCi0jZGVmaW5lIFdQU19SRVNQT05TRV9UWVBFX1JFR0lTVFJBUgkJMHgwMgotI2RlZmluZSBXUFNfUkVTUE9OU0VfVFlQRV9BUAkJCTB4MDMKLQotLyoJVmFsdWUgb2YgV1BTIFdpRmkgU2ltcGxlIENvbmZpZ3VyYXRpb24gU3RhdGUgQXR0cmlidXRlICovCi0jZGVmaW5lIFdQU19XU0NfU1RBVEVfTk9UX0NPTkZJRwkJMHgwMQotI2RlZmluZSBXUFNfV1NDX1NUQVRFX0NPTkZJRwkJCTB4MDIKLQotLyoJVmFsdWUgb2YgV1BTIFZlcnNpb24gQXR0cmlidXRlICovCi0jZGVmaW5lIFdQU19WRVJTSU9OXzEJCQkJMHgxMAotCi0vKglWYWx1ZSBvZiBXUFMgQ29uZmlndXJhdGlvbiBNZXRob2QgQXR0cmlidXRlICovCi0jZGVmaW5lIFdQU19DT05GSUdfTUVUSE9EX0ZMQVNICQkJMHgwMDAxCi0jZGVmaW5lIFdQU19DT05GSUdfTUVUSE9EX0VUSEVSTkVUCQkweDAwMDIKLSNkZWZpbmUgV1BTX0NPTkZJR19NRVRIT0RfTEFCRUwJCQkweDAwMDQKLSNkZWZpbmUgV1BTX0NPTkZJR19NRVRIT0RfRElTUExBWQkJMHgwMDA4Ci0jZGVmaW5lIFdQU19DT05GSUdfTUVUSE9EX0VfTkZDCQkJMHgwMDEwCi0jZGVmaW5lIFdQU19DT05GSUdfTUVUSE9EX0lfTkZDCQkJMHgwMDIwCi0jZGVmaW5lIFdQU19DT05GSUdfTUVUSE9EX05GQwkJCTB4MDA0MAotI2RlZmluZSBXUFNfQ09ORklHX01FVEhPRF9QQkMJCQkweDAwODAKLSNkZWZpbmUgV1BTX0NPTkZJR19NRVRIT0RfS0VZUEFECQkweDAxMDAKLSNkZWZpbmUgV1BTX0NPTkZJR19NRVRIT0RfVlBCQwkJCTB4MDI4MAotI2RlZmluZSBXUFNfQ09ORklHX01FVEhPRF9QUEJDCQkJMHgwNDgwCi0jZGVmaW5lIFdQU19DT05GSUdfTUVUSE9EX1ZESVNQTEFZCQkweDIwMDgKLSNkZWZpbmUgV1BTX0NPTkZJR19NRVRIT0RfUERJU1BMQVkJCTB4NDAwOAotCi0vKglWYWx1ZSBvZiBDYXRlZ29yeSBJRCBvZiBXUFMgUHJpbWFyeSBEZXZpY2UgVHlwZSBBdHRyaWJ1dGUgKi8KLSNkZWZpbmUgV1BTX1BEVF9DSURfRElTUExBWVMJCQkweDAwMDcKLSNkZWZpbmUgV1BTX1BEVF9DSURfTVVMSVRfTUVESUEJCQkweDAwMDgKLSNkZWZpbmUgV1BTX1BEVF9DSURfUlRLX1dJREkJCQlXUFNfUERUX0NJRF9NVUxJVF9NRURJQQotCi0vKglWYWx1ZSBvZiBTdWIgQ2F0ZWdvcnkgSUQgb2YgV1BTIFByaW1hcnkgRGV2aWNlIFR5cGUgQXR0cmlidXRlICovCi0jZGVmaW5lIFdQU19QRFRfU0NJRF9NRURJQV9TRVJWRVIJCTB4MDAwNQotI2RlZmluZSBXUFNfUERUX1NDSURfUlRLX0RNUAkJCVdQU19QRFRfU0NJRF9NRURJQV9TRVJWRVIKLQotLyoJVmFsdWUgb2YgRGV2aWNlIFBhc3N3b3JkIElEICovCi0jZGVmaW5lIFdQU19EUElEX1BJTgkJCQkweDAwMDAKLSNkZWZpbmUgV1BTX0RQSURfVVNFUl9TUEVDCQkJMHgwMDAxCi0jZGVmaW5lIFdQU19EUElEX01BQ0hJTkVfU1BFQwkJCTB4MDAwMgotI2RlZmluZSBXUFNfRFBJRF9SRUtFWQkJCQkweDAwMDMKLSNkZWZpbmUgV1BTX0RQSURfUEJDCQkJCTB4MDAwNAotI2RlZmluZSBXUFNfRFBJRF9SRUdJU1RSQVJfU1BFQwkJCTB4MDAwNQotCi0vKglWYWx1ZSBvZiBXUFMgUkYgQmFuZHMgQXR0cmlidXRlICovCi0jZGVmaW5lIFdQU19SRl9CQU5EU18yXzRfR0haCQkJMHgwMQotI2RlZmluZSBXUFNfUkZfQkFORFNfNV9HSFoJCQkweDAyCi0KLS8qCVZhbHVlIG9mIFdQUyBBc3NvY2lhdGlvbiBTdGF0ZSBBdHRyaWJ1dGUgKi8KLSNkZWZpbmUgV1BTX0FTU09DX1NUQVRFX05PVF9BU1NPQ0lBVEVECQkweDAwCi0jZGVmaW5lIFdQU19BU1NPQ19TVEFURV9DT05ORUNUSU9OX1NVQ0NFU1MJMHgwMQotI2RlZmluZSBXUFNfQVNTT0NfU1RBVEVfQ09ORklHVVJBVElPTl9GQUlMVVJFCTB4MDIKLSNkZWZpbmUgV1BTX0FTU09DX1NUQVRFX0FTU09DSUFUSU9OX0ZBSUxVUkUJMHgwMwotI2RlZmluZSBXUFNfQVNTT0NfU1RBVEVfSVBfRkFJTFVSRQkJMHgwNAotCi0vKgk9PT09PT09PT09PT09PT09PT09PT1QMlAgU2VjdGlvbj09PT09PT09PT09PT09PT09PT09PSAqLwotLyoJRm9yIFAyUCAqLwotI2RlZmluZQlQMlBPVUkJCQkJCTB4NTA2RjlBMDkKLQotLyoJUDJQIEF0dHJpYnV0ZSBJRCAqLwotI2RlZmluZQlQMlBfQVRUUl9TVEFUVVMJCQkJMHgwMAotI2RlZmluZQlQMlBfQVRUUl9NSU5PUl9SRUFTT05fQ09ERQkJMHgwMQotI2RlZmluZQlQMlBfQVRUUl9DQVBBQklMSVRZCQkJMHgwMgotI2RlZmluZQlQMlBfQVRUUl9ERVZJQ0VfSUQJCQkweDAzCi0jZGVmaW5lCVAyUF9BVFRSX0dPX0lOVEVOVAkJCTB4MDQKLSNkZWZpbmUJUDJQX0FUVFJfQ09ORl9USU1FT1VUCQkJMHgwNQotI2RlZmluZQlQMlBfQVRUUl9MSVNURU5fQ0gJCQkweDA2Ci0jZGVmaW5lCVAyUF9BVFRSX0dST1VQX0JTU0lECQkJMHgwNwotI2RlZmluZQlQMlBfQVRUUl9FWF9MSVNURU5fVElNSU5HCQkweDA4Ci0jZGVmaW5lCVAyUF9BVFRSX0lOVEVOVEVEX0lGX0FERFIJCTB4MDkKLSNkZWZpbmUJUDJQX0FUVFJfTUFOQUdFQUJJTElUWQkJCTB4MEEKLSNkZWZpbmUJUDJQX0FUVFJfQ0hfTElTVAkJCTB4MEIKLSNkZWZpbmUJUDJQX0FUVFJfTk9BCQkJCTB4MEMKLSNkZWZpbmUJUDJQX0FUVFJfREVWSUNFX0lORk8JCQkweDBECi0jZGVmaW5lCVAyUF9BVFRSX0dST1VQX0lORk8JCQkweDBFCi0jZGVmaW5lCVAyUF9BVFRSX0dST1VQX0lECQkJMHgwRgotI2RlZmluZQlQMlBfQVRUUl9JTlRFUkZBQ0UJCQkweDEwCi0jZGVmaW5lCVAyUF9BVFRSX09QRVJBVElOR19DSAkJCTB4MTEKLSNkZWZpbmUJUDJQX0FUVFJfSU5WSVRBVElPTl9GTEFHUwkJMHgxMgotCi0vKglWYWx1ZSBvZiBTdGF0dXMgQXR0cmlidXRlICovCi0jZGVmaW5lCVAyUF9TVEFUVVNfU1VDQ0VTUwkJCTB4MDAKLSNkZWZpbmUJUDJQX1NUQVRVU19GQUlMX0lORk9fVU5BVkFJTEFCTEUJMHgwMQotI2RlZmluZQlQMlBfU1RBVFVTX0ZBSUxfSU5DT01QQVRJQkxFX1BBUkFNCTB4MDIKLSNkZWZpbmUJUDJQX1NUQVRVU19GQUlMX0xJTUlUX1JFQUNIRUQJCTB4MDMKLSNkZWZpbmUJUDJQX1NUQVRVU19GQUlMX0lOVkFMSURfUEFSQU0JCTB4MDQKLSNkZWZpbmUJUDJQX1NUQVRVU19GQUlMX1JFUVVFU1RfVU5BQkxFCQkweDA1Ci0jZGVmaW5lCVAyUF9TVEFUVVNfRkFJTF9QUkVWT1VTX1BST1RPX0VSUgkweDA2Ci0jZGVmaW5lCVAyUF9TVEFUVVNfRkFJTF9OT19DT01NT05fQ0gJCTB4MDcKLSNkZWZpbmUJUDJQX1NUQVRVU19GQUlMX1VOS05PV05fUDJQR1JPVVAJMHgwOAotI2RlZmluZQlQMlBfU1RBVFVTX0ZBSUxfQk9USF9HT0lOVEVOVF8xNQkweDA5Ci0jZGVmaW5lCVAyUF9TVEFUVVNfRkFJTF9JTkNPTVBBVElCTEVfUFJPVlNJT04JMHgwQQotI2RlZmluZQlQMlBfU1RBVFVTX0ZBSUxfVVNFUl9SRUpFQ1QJCTB4MEIKLQotLyoJVmFsdWUgb2YgSW52aWF0aW9uIEZsYWdzIEF0dHJpYnV0ZSAqLwotI2RlZmluZQlQMlBfSU5WSVRBVElPTl9GTEFHU19QRVJTSVNURU5UCQlCSVQoMCkKLQotI2RlZmluZQlETVBfUDJQX0RFVkNBUF9TVVBQT1JUCShQMlBfREVWQ0FQX1NFUlZJQ0VfRElTQ09WRVJZIHwgXAotCQkJCSBQMlBfREVWQ0FQX0NMSUVOVF9ESVNDT1ZFUkFCSUxJVFkgfCBcCi0JCQkJIFAyUF9ERVZDQVBfQ09OQ1VSUkVOVF9PUEVSQVRJT04gfCBcCi0JCQkJIFAyUF9ERVZDQVBfSU5WSVRBVElPTl9QUk9DKQotCi0jZGVmaW5lCURNUF9QMlBfR1JQQ0FQX1NVUFBPUlQJKFAyUF9HUlBDQVBfSU5UUkFCU1MpCi0KLS8qCVZhbHVlIG9mIERldmljZSBDYXBhYmlsaXR5IEJpdG1hcCAqLwotI2RlZmluZQlQMlBfREVWQ0FQX1NFUlZJQ0VfRElTQ09WRVJZCQlCSVQoMCkKLSNkZWZpbmUJUDJQX0RFVkNBUF9DTElFTlRfRElTQ09WRVJBQklMSVRZCUJJVCgxKQotI2RlZmluZQlQMlBfREVWQ0FQX0NPTkNVUlJFTlRfT1BFUkFUSU9OCQlCSVQoMikKLSNkZWZpbmUJUDJQX0RFVkNBUF9JTkZSQV9NQU5BR0VECQlCSVQoMykKLSNkZWZpbmUJUDJQX0RFVkNBUF9ERVZJQ0VfTElNSVQJCQlCSVQoNCkKLSNkZWZpbmUJUDJQX0RFVkNBUF9JTlZJVEFUSU9OX1BST0MJCUJJVCg1KQotCi0vKglWYWx1ZSBvZiBHcm91cCBDYXBhYmlsaXR5IEJpdG1hcCAqLwotI2RlZmluZQlQMlBfR1JQQ0FQX0dPCQkJCUJJVCgwKQotI2RlZmluZQlQMlBfR1JQQ0FQX1BFUlNJU1RFTlRfR1JPVVAJCUJJVCgxKQotI2RlZmluZQlQMlBfR1JQQ0FQX0dST1VQX0xJTUlUCQkJQklUKDIpCi0jZGVmaW5lCVAyUF9HUlBDQVBfSU5UUkFCU1MJCQlCSVQoMykKLSNkZWZpbmUJUDJQX0dSUENBUF9DUk9TU19DT05OCQkJQklUKDQpCi0jZGVmaW5lCVAyUF9HUlBDQVBfUEVSU0lTVEVOVF9SRUNPTk4JCUJJVCg1KQotI2RlZmluZQlQMlBfR1JQQ0FQX0dST1VQX0ZPUk1BVElPTgkJQklUKDYpCi0KLS8qCVAyUCBQdWJsaWMgQWN0aW9uIEZyYW1lICggTWFuYWdlbWVudCBGcmFtZSApICovCi0jZGVmaW5lCVAyUF9QVUJfQUNUSU9OX0FDVElPTgkJCTB4MDkKLQotLyoJUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWUgVHlwZSAqLwotI2RlZmluZQlQMlBfR09fTkVHT19SRVEJCQkJMAotI2RlZmluZQlQMlBfR09fTkVHT19SRVNQCQkJMQotI2RlZmluZQlQMlBfR09fTkVHT19DT05GCQkJMgotI2RlZmluZQlQMlBfSU5WSVRfUkVRCQkJCTMKLSNkZWZpbmUJUDJQX0lOVklUX1JFU1AJCQkJNAotI2RlZmluZQlQMlBfREVWRElTQ19SRVEJCQkJNQotI2RlZmluZQlQMlBfREVWRElTQ19SRVNQCQkJNgotI2RlZmluZQlQMlBfUFJPVklTSU9OX0RJU0NfUkVRCQkJNwotI2RlZmluZQlQMlBfUFJPVklTSU9OX0RJU0NfUkVTUAkJCTgKLQotLyoJUDJQIEFjdGlvbiBGcmFtZSBUeXBlICovCi0jZGVmaW5lCVAyUF9OT1RJQ0VfT0ZfQUJTRU5DRQkJCTAKLSNkZWZpbmUJUDJQX1BSRVNFTkNFX1JFUVVFU1QJCQkxCi0jZGVmaW5lCVAyUF9QUkVTRU5DRV9SRVNQT05TRQkJCTIKLSNkZWZpbmUJUDJQX0dPX0RJU0NfUkVRVUVTVAkJCTMKLQotCi0jZGVmaW5lCVAyUF9NQVhfUEVSU0lTVEVOVF9HUk9VUF9OVU0JCTEwCi0KLSNkZWZpbmUJUDJQX1BST1ZJU0lPTklOR19TQ0FOX0NOVAkJMwotCi0jZGVmaW5lCVAyUF9XSUxEQ0FSRF9TU0lEX0xFTgkJCTcKLQotI2RlZmluZQlQMlBfRklORFBIQVNFX0VYX05PTkUJCQkwCS8qICBkZWZhdWx0IHZhbHVlLCB1c2VkIHdoZW46ICgxKXAycCBkaXNhYmVkIG9yICgyKXAycCBlbmFibGVkIGJ1dCBvbmx5IGRvIDEgc2NhbiBwaGFzZSAqLwotI2RlZmluZQlQMlBfRklORFBIQVNFX0VYX0ZVTEwJCQkxCS8qICB1c2VkIHdoZW4gcDJwIGVuYWJsZWQgYW5kIHdhbnQgdG8gZG8gMSBzY2FuIHBoYXNlIGFuZCBQMlBfRklORFBIQVNFX0VYX01BWC0xIGZpbmQgcGhhc2UgKi8KLSNkZWZpbmUJUDJQX0ZJTkRQSEFTRV9FWF9TT0NJQUxfRklSU1QJCShQMlBfRklORFBIQVNFX0VYX0ZVTEwrMSkKLSNkZWZpbmUJUDJQX0ZJTkRQSEFTRV9FWF9NQVgJCQkJCTQKLSNkZWZpbmUJUDJQX0ZJTkRQSEFTRV9FWF9TT0NJQUxfTEFTVAkJUDJQX0ZJTkRQSEFTRV9FWF9NQVgKLQotI2RlZmluZQlQMlBfUFJPVklTSU9OX1RJTUVPVVQJCQk1MDAwCS8qNSBzZWMgdGltZW91dCBmb3Igc2VuZGluZyB0aGUgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXF1ZXN0ICovCi0jZGVmaW5lCVAyUF9DT05DVVJSRU5UX1BST1ZJU0lPTl9USU1FT1VUCTMwMDAJLyozIHNlYyB0aW1lb3V0IGZvciBzZW5kaW5nIHRoZSBwcm92aXNpb24gZGlzY292ZXJ5IHJlcXVlc3QgdW5kZXIgY29uY3VycmVudCBtb2RlICovCi0jZGVmaW5lCVAyUF9HT19ORUdPX1RJTUVPVVQJCQk1MDAwCS8qNSBzZWMgdGltZW91dCBmb3IgcmVjZWl2aW5nIHRoZSBncm91cCBuZWdvdGF0aW9uIHJlc3BvbnNlICovCi0jZGVmaW5lCVAyUF9DT05DVVJSRU5UX0dPX05FR09fVElNRU9VVAkJMzAwMAkvKjMgc2VjIHRpbWVvdXQgZm9yIHNlbmRpbmcgdGhlIG5lZ290aWF0aW9uIHJlcXVlc3QgdW5kZXIgY29uY3VycmVudCBtb2RlICovCi0jZGVmaW5lCVAyUF9UWF9QUkVTQ0FOX1RJTUVPVVQJCQkxMDAJLyoxMDBtcyAqLwotI2RlZmluZQlQMlBfSU5WSVRFX1RJTUVPVVQJCQk1MDAwCS8qNSBzZWMgdGltZW91dCBmb3Igc2VuZGluZyB0aGUgaW52aXRhdGlvbiByZXF1ZXN0ICovCi0jZGVmaW5lCVAyUF9DT05DVVJSRU5UX0lOVklURV9USU1FT1VUCQkzMDAwCS8qMyBzZWMgdGltZW91dCBmb3Igc2VuZGluZyB0aGUgaW52aXRhdGlvbiByZXF1ZXN0IHVuZGVyIGNvbmN1cnJlbnQgbW9kZSAqLwotI2RlZmluZQlQMlBfUkVTRVRfU0NBTl9DSAkJCTI1MDAwCS8qMjUgc2VjIHQvbyB0byByZXNldCB0aGUgc2NhbiBjaGFubmVsICggYmFzZWQgb24gY2hhbm5lbCBwbGFuICkgKi8KLSNkZWZpbmUJUDJQX01BWF9JTlRFTlQJCQkJMTUKLQotI2RlZmluZQlQMlBfTUFYX05PQV9OVU0JCQkJMgotCiAvKglXUFMgQ29uZmlndXJhdGlvbiBNZXRob2QgKi8KICNkZWZpbmUJV1BTX0NNX05PTkUJCQkJCTB4MDAwMAogI2RlZmluZQlXUFNfQ01fTEFCRUwJCQkJCTB4MDAwNApAQCAtNjE1LDkzICsxNTIsNCBAQAogI2RlZmluZQlXUFNfQ01fU1dfRElTUExBWV9QSU4JCQkJMHgyMDA4CiAjZGVmaW5lCVdQU19DTV9MQ0RfRElTUExBWV9QSU4JCQkJMHg0MDA4CiAKLWVudW0gUDJQX1JPTEUgewotCVAyUF9ST0xFX0RJU0FCTEUgPSAwLAotCVAyUF9ST0xFX0RFVklDRSA9IDEsCi0JUDJQX1JPTEVfQ0xJRU5UID0gMiwKLQlQMlBfUk9MRV9HTyA9IDMKLX07Ci0KLWVudW0gUDJQX1NUQVRFIHsKLQlQMlBfU1RBVEVfTk9ORSA9IDAsCQkJLypQMlAgZGlzYWJsZSAqLwotCVAyUF9TVEFURV9JRExFID0gMSwJCQkvKlAyUCBoYWQgZW5hYmxlZCBhbmQgZG8gbm90aGluZyAqLwotCVAyUF9TVEFURV9MSVNURU4gPSAyLAkJCS8qSW4gcHVyZSBsaXN0ZW4gc3RhdGUgKi8KLQlQMlBfU1RBVEVfU0NBTiA9IDMsCQkJLypJbiBzY2FuIHBoYXNlICovCi0JUDJQX1NUQVRFX0ZJTkRfUEhBU0VfTElTVEVOID0gNCwJLypJbiB0aGUgbGlzdGVuIHN0YXRlIG9mIGZpbmQgcGhhc2UgKi8KLQlQMlBfU1RBVEVfRklORF9QSEFTRV9TRUFSQ0ggPSA1LAkvKkluIHRoZSBzZWFyY2ggc3RhdGUgb2YgZmluZCBwaGFzZSAqLwotCVAyUF9TVEFURV9UWF9QUk9WSVNJT05fRElTX1JFUSA9IDYsCS8qSW4gUDJQIHByb3Zpc2lvbmluZyBkaXNjb3ZlcnkgKi8KLQlQMlBfU1RBVEVfUlhfUFJPVklTSU9OX0RJU19SU1AgPSA3LAotCVAyUF9TVEFURV9SWF9QUk9WSVNJT05fRElTX1JFUSA9IDgsCi0JUDJQX1NUQVRFX0dPTkVHT19JTkcgPSA5LAkJLypEb2luZyB0aGUgZ3JvdXAgb3duZXIgbmVnb2l0YXRpb24gaGFuZHNoYWtlICovCi0JUDJQX1NUQVRFX0dPTkVHT19PSyA9IDEwLAkJLypmaW5pc2ggdGhlIGdyb3VwIG5lZ29pdGF0aW9uIGhhbmRzaGFrZSB3aXRoIHN1Y2Nlc3MgKi8KLQlQMlBfU1RBVEVfR09ORUdPX0ZBSUwgPSAxMSwJCS8qZmluaXNoIHRoZSBncm91cCBuZWdvaXRhdGlvbiBoYW5kc2hha2Ugd2l0aCBmYWlsdXJlICovCi0JUDJQX1NUQVRFX1JFQ1ZfSU5WSVRFX1JFUV9NQVRDSCA9IDEyLAkvKnJlY2VpdmluZyB0aGUgUDJQIEludmlhdGlvbiByZXF1ZXN0IGFuZCBtYXRjaCB3aXRoIHRoZSBwcm9maWxlLiAqLwotCVAyUF9TVEFURV9QUk9WSVNJT05JTkdfSU5HID0gMTMsCS8qRG9pbmcgdGhlIFAyUCBXUFMgKi8KLQlQMlBfU1RBVEVfUFJPVklTSU9OSU5HX0RPTkUgPSAxNCwJLypGaW5pc2ggdGhlIFAyUCBXUFMgKi8KLQlQMlBfU1RBVEVfVFhfSU5WSVRFX1JFUSA9IDE1LAkJLypUcmFuc21pdCB0aGUgUDJQIEludml0YXRpb24gcmVxdWVzdCAqLwotCVAyUF9TVEFURV9SWF9JTlZJVEVfUkVTUF9PSyA9IDE2LAkvKlJlY2VpdmluZyB0aGUgUDJQIEludml0YXRpb24gcmVzcG9uc2UgKi8KLQlQMlBfU1RBVEVfUkVDVl9JTlZJVEVfUkVRX0RJU01BVENIID0gMTcsLypyZWNlaXZpbmcgdGhlIFAyUCBJbnZpYXRpb24gcmVxdWVzdCBhbmQgZGlzbWF0Y2ggd2l0aCB0aGUgcHJvZmlsZS4gKi8KLQlQMlBfU1RBVEVfUkVDVl9JTlZJVEVfUkVRX0dPID0gMTgsCS8qcmVjZWl2aW5nIHRoZSBQMlAgSW52aWF0aW9uIHJlcXVlc3QgYW5kIHRoaXMgd2lmaSBpcyBHTy4gKi8KLQlQMlBfU1RBVEVfUkVDVl9JTlZJVEVfUkVRX0pPSU4gPSAxOSwJLypyZWNlaXZpbmcgdGhlIFAyUCBJbnZpYXRpb24gcmVxdWVzdCB0byBqb2luIGFuIGV4aXN0aW5nIFAyUCBHcm91cC4gKi8KLQlQMlBfU1RBVEVfUlhfSU5WSVRFX1JFU1BfRkFJTCA9IDIwLAkvKnJlY2VpdmluZyB0aGUgUDJQIEludmlhdGlvbiByZXNwb25zZSB3aXRoIGZhaWx1cmUgKi8KLQlQMlBfU1RBVEVfUlhfSU5GT1JfTk9SRUFEWSA9IDIxLAkvKnJlY2VpdmluZyBwMnAgbmVnb3RpYXRpb24gcmVzcG9uc2Ugd2l0aCBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlICovCi0JUDJQX1NUQVRFX1RYX0lORk9SX05PUkVBRFkgPSAyMiwJLypzZW5kaW5nIHAycCBuZWdvdGlhdGlvbiByZXNwb25zZSB3aXRoIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgKi8KLX07Ci0KLWVudW0gUDJQX1dQU0lORk8gewotCVAyUF9OT19XUFNJTkZPCQkJCT0gMCwKLQlQMlBfR09UX1dQU0lORk9fUEVFUl9ESVNQTEFZX1BJTgk9IDEsCi0JUDJQX0dPVF9XUFNJTkZPX1NFTEZfRElTUExBWV9QSU4JPSAyLAotCVAyUF9HT1RfV1BTSU5GT19QQkMJCQk9IDMsCi19OwotCi0jZGVmaW5lCVAyUF9QUklWQVRFX0lPQ1RMX1NFVF9MRU4JCTY0Ci0KLWVudW0gUDJQX1BST1RPX1dLX0lEIHsKLQlQMlBfRklORF9QSEFTRV9XSyA9IDAsCi0JUDJQX1JFU1RPUkVfU1RBVEVfV0sgPSAxLAotCVAyUF9QUkVfVFhfUFJPVkRJU0NfUFJPQ0VTU19XSyA9IDIsCi0JUDJQX1BSRV9UWF9ORUdPUkVRX1BST0NFU1NfV0sgPSAzLAotCVAyUF9QUkVfVFhfSU5WSVRFUkVRX1BST0NFU1NfV0sgPSA0LAotCVAyUF9BUF9QMlBfQ0hfU1dJVENIX1BST0NFU1NfV0sgPSA1LAotCVAyUF9ST19DSF9XSyA9IDYsCi19OwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLWVudW0gUDJQX1BTX1NUQVRFIHsKLQlQMlBfUFNfRElTQUJMRSA9IDAsCi0JUDJQX1BTX0VOQUJMRSA9IDEsCi0JUDJQX1BTX1NDQU4gPSAyLAotCVAyUF9QU19TQ0FOX0RPTkUgPSAzLAotCVAyUF9QU19BTExTVEFTTEVFUCA9IDQsIC8qICBmb3IgUDJQIEdPICovCi19OwotCi1lbnVtIFAyUF9QU19NT0RFIHsKLQlQMlBfUFNfTk9ORSA9IDAsCi0JUDJQX1BTX0NUV0lORE9XID0gMSwKLQlQMlBfUFNfTk9BCSA9IDIsCi0JUDJQX1BTX01JWCA9IDMsIC8qICBDVFdpbmRvdyBhbmQgTm9BICovCi19OwotI2VuZGlmIC8qICBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0vKgk9PT09PT09PT09PT09PT09PT09PT1XRkQgU2VjdGlvbj09PT09PT09PT09PT09PT09PT09PSAqLwotLyoJRm9yIFdpLUZpIERpc3BsYXkgKi8KLSNkZWZpbmUJV0ZEX0FUVFJfREVWSUNFX0lORk8JCQkweDAwCi0jZGVmaW5lCVdGRF9BVFRSX0FTU09DX0JTU0lECQkJMHgwMQotI2RlZmluZQlXRkRfQVRUUl9DT1VQTEVEX1NJTktfSU5GTwkweDA2Ci0jZGVmaW5lCVdGRF9BVFRSX0xPQ0FMX0lQX0FERFIJCTB4MDgKLSNkZWZpbmUJV0ZEX0FUVFJfU0VTU0lPTl9JTkZPCQkweDA5Ci0jZGVmaW5lCVdGRF9BVFRSX0FMVEVSX01BQwkJCTB4MGEKLQotLyoJRm9yIFdGRCBEZXZpY2UgSW5mb3JtYXRpb24gQXR0cmlidXRlICovCi0jZGVmaW5lCVdGRF9ERVZJTkZPX1NPVVJDRQkJCQkJMHgwMDAwCi0jZGVmaW5lCVdGRF9ERVZJTkZPX1BTSU5LCQkJCQkweDAwMDEKLSNkZWZpbmUJV0ZEX0RFVklORk9fU1NJTksJCQkJCTB4MDAwMgotI2RlZmluZQlXRkRfREVWSU5GT19EVUFMCQkJCQkweDAwMDMKLQotI2RlZmluZQlXRkRfREVWSU5GT19TRVNTSU9OX0FWQUlMCQkJMHgwMDEwCi0jZGVmaW5lCVdGRF9ERVZJTkZPX1dTRAkJCQkJCTB4MDA0MAotI2RlZmluZQlXRkRfREVWSU5GT19QQ19URExTCQkJCQkweDAwODAKLSNkZWZpbmUJV0ZEX0RFVklORk9fSERDUF9TVVBQT1JUCQkJMHgwMTAwCi0KICNlbmRpZiAvKiAgX1dJRklfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvaW5jbHVkZS93bGFuX2Jzc2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3dsYW5fYnNzZGVmLmgKaW5kZXggOTIyODdlYi4uNjY0MDE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3dsYW5fYnNzZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3dsYW5fYnNzZGVmLmgKQEAgLTIyLDU0ICsyMiw2IEBACiAjZGVmaW5lIE5ESVNfODAyXzExX0xFTkdUSF9SQVRFUyAgICAgICAgOAogI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVggICAgIDE2CiAKLWVudW0gbmRpc184MDJfMTFfbmV0X3R5cGUgewotCU5kaXM4MDJfMTFGSCwKLQlOZGlzODAyXzExRFMsCi0JTmRpczgwMl8xMU9GRE01LAotCU5kaXM4MDJfMTFPRkRNMjQsCi0JTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4ICAgIC8qICBqdXN0IGFuIHVwcGVyIGJvdW5kICovCi19OwotCi1zdHJ1Y3QgbmRpc184MDJfMTFfY29uZmlndXJhdGlvbl9maCB7Ci0JdTMyICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8qICBMZW5ndGggb2Ygc3RydWN0dXJlICovCi0JdTMyICAgICAgICAgICBIb3BQYXR0ZXJuOyAgICAgICAgIC8qICBBcyBkZWZpbmVkIGJ5IDgwMi4xMSwgTVNCIHNldCAqLwotCXUzMiAgICAgICAgICAgSG9wU2V0OyAgICAgICAgICAgICAvKiAgdG8gb25lIGlmIG5vbi04MDIuMTEgKi8KLQl1MzIgICAgICAgICAgIER3ZWxsVGltZTsgICAgICAgICAgLyogIHVuaXRzIGFyZSBLdXNlYyAqLwotfTsKLQotCi0vKgotCUZXIHdpbGwgb25seSBzYXZlIHRoZSBjaGFubmVsIG51bWJlciBpbiBEU0NvbmZpZy4KLQlPREkgSGFuZGxlciB3aWxsIGNvbnZlcnQgdGhlIGNoYW5uZWwgbnVtYmVyIHRvIGZyZXEuIG51bWJlci4KLSovCi1zdHJ1Y3QgbmRpc184MDJfMTFfY29uZmlnIHsKLQl1MzIgICAgICAgICAgIExlbmd0aDsgICAgICAgICAgICAgLyogIExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KLQl1MzIgICAgICAgICAgIEJlYWNvblBlcmlvZDsgICAgICAgLyogIHVuaXRzIGFyZSBLdXNlYyAqLwotCXUzMiAgICAgICAgICAgQVRJTVdpbmRvdzsgICAgICAgICAvKiAgdW5pdHMgYXJlIEt1c2VjICovCi0JdTMyICAgICAgICAgICBEU0NvbmZpZzsgICAgICAgICAgIC8qICBGcmVxdWVuY3ksIHVuaXRzIGFyZSBrSHogKi8KLQlzdHJ1Y3QgbmRpc184MDJfMTFfY29uZmlndXJhdGlvbl9maCAgICBGSENvbmZpZzsKLX07Ci0KLWVudW0gbmRpc184MDJfMTFfbmV0X2luZnJhIHsKLQlOZGlzODAyXzExSUJTUywKLQlOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmUsCi0JTmRpczgwMl8xMUF1dG9Vbmtub3duLAotCU5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZU1heCwgICAgIC8qICBOb3QgYSByZWFsIHZhbHVlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kICovCi0JTmRpczgwMl8xMUFQTW9kZQotfTsKLQotc3RydWN0IG5kaXNfODAyXzExX2ZpeGVkX2llcyB7Ci0JdTggIFRpbWVzdGFtcFs4XTsKLQl1MTYgIEJlYWNvbkludGVydmFsOwotCXUxNiAgQ2FwYWJpbGl0aWVzOwotfTsKLQotc3RydWN0IG5kaXNfODAyXzExX3Zhcl9pZXMgewotCXU4ICBFbGVtZW50SUQ7Ci0JdTggIExlbmd0aDsKLQl1OCAgZGF0YVsxXTsKLX07Ci0KIC8qIExlbmd0aCBpcyB0aGUgNCBieXRlcyBtdWx0aXBsZXMgb2YgdGhlIHN1bSBvZgogICogc2l6ZW9mKDYgKiBzaXplb2YodW5zaWduZWQgY2hhcikpICsgMiArIHNpemVvZihzdHJ1Y3QgbmRpc184MDJfMTFfc3NpZCkgKwogICogc2l6ZW9mKHUzMikgKyBzaXplb2YobG9uZykgKyBzaXplb2YoZW51bSBuZGlzXzgwMl8xMV9uZXRfdHlwZSkgKwpAQCAtMTE1LDM0ICs2Nyw2IEBACiAJdTggS2V5TWF0ZXJpYWxbMzJdOyAvKiAgdmFyaWFibGUgbGVuZ3RoIGRlcGVuZGluZyBvbiBhYm92ZSBmaWVsZCAqLwogfTsKIAotc3RydWN0IG5kaXNfODAyXzExX3dlcCB7Ci0JdTMyICAgICBMZW5ndGg7ICAgICAgICAvKiAgTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlICovCi0JdTMyICAgICBLZXlJbmRleDsgICAgICAvKiAgMCBpcyB0aGUgcGVyLWNsaWVudCBrZXksIDEtTiBhcmUgZ2xvYmFsICovCi0JdTMyICAgICBLZXlMZW5ndGg7ICAgICAvKiAgbGVuZ3RoIG9mIGtleSBpbiBieXRlcyAqLwotCXU4ICAgICBLZXlNYXRlcmlhbFsxNl07LyogIHZhcmlhYmxlIGxlbmd0aCBkZXBlbmRpbmcgb24gYWJvdmUgZmllbGQgKi8KLX07Ci0KLWVudW0gTkRJU184MDJfMTFfU1RBVFVTX1RZUEUgewotCU5kaXM4MDJfMTFTdGF0dXNUeXBlX0F1dGhlbnRpY2F0aW9uLAotCU5kaXM4MDJfMTFTdGF0dXNUeXBlX01lZGlhU3RyZWFtTW9kZSwKLQlOZGlzODAyXzExU3RhdHVzVHlwZV9QTUtJRF9DYW5kaWRhdGVMaXN0LAotCU5kaXM4MDJfMTFTdGF0dXNUeXBlTWF4ICAgIC8qICBub3QgYSByZWFsIHR5cGUsIGp1c3QgYW4gdXBwZXIgYm91bmQgKi8KLX07Ci0KLS8qICBtYXNrIGZvciBhdXRoZW50aWNhdGlvbi9pbnRlZ3JpdHkgZmllbGRzICovCi0jZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9BVVRIX0ZJRUxEUyAgICAgICAgMHgwZgotI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfUkVBVVRICQkJMHgwMQotI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfS0VZVVBEQVRFCQkweDAyCi0jZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUgkJMHgwNgotI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfR1JPVVBfRVJST1IJCTB4MEUKLQotLyogIE1JQyBjaGVjayB0aW1lLCA2MCBzZWNvbmRzLiAqLwotI2RlZmluZSBNSUNfQ0hFQ0tfVElNRQk2MDAwMDAwMAotCi0jaWZuZGVmIE5kaXM4MDJfMTFBUE1vZGUKLSNkZWZpbmUgTmRpczgwMl8xMUFQTW9kZSAoTmRpczgwMl8xMUluZnJhc3RydWN0dXJlTWF4KzEpCi0jZW5kaWYKLQogc3RydWN0IHdsYW5fcGh5X2luZm8gewogCXU4CVNpZ25hbFN0cmVuZ3RoOy8qIGluIHBlcmNlbnRhZ2UpICovCiAJdTgJU2lnbmFsUXVhbGl0eTsvKiBpbiBwZXJjZW50YWdlKSAqLwpAQCAtMTcwLDkgKzk0LDEwIEBACiAJc3RydWN0IGNmZzgwMjExX3NzaWQgU3NpZDsKIAl1MzIgIFByaXZhY3k7CiAJbG9uZyAgUnNzaTsvKiBpbiBkQk0sIHJhdyBkYXRhICwgZ2V0IGZyb20gUEhZKSAqLwotCWVudW0gbmRpc184MDJfMTFfbmV0X3R5cGUgIE5ldHdvcmtUeXBlSW5Vc2U7Ci0Jc3RydWN0IG5kaXNfODAyXzExX2NvbmZpZyAgQ29uZmlndXJhdGlvbjsKLQllbnVtIG5kaXNfODAyXzExX25ldF9pbmZyYSAgSW5mcmFzdHJ1Y3R1cmVNb2RlOworCXUxNiBCZWFjb25QZXJpb2Q7ICAgICAgIC8qICB1bml0cyBhcmUgS3VzZWMgKi8KKwl1MzIgQVRJTVdpbmRvdzsgICAgICAgICAvKiAgdW5pdHMgYXJlIEt1c2VjICovCisJdTMyIERTQ29uZmlnOyAgICAgICAgICAgLyogIEZyZXF1ZW5jeSwgdW5pdHMgYXJlIGtIeiAqLworCWVudW0gbmw4MDIxMV9pZnR5cGUgaWZtb2RlOwogCXVuc2lnbmVkIGNoYXIgU3VwcG9ydGVkUmF0ZXNbTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYXTsKIAlzdHJ1Y3Qgd2xhbl9waHlfaW5mbwlQaHlJbmZvOwogCXUzMiAgSUVMZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUveG1pdF9vc2RlcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3htaXRfb3NkZXAuaAppbmRleCAwZWNhNTNlLi4yYmUwNGM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9pbmNsdWRlL3htaXRfb3NkZXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L2luY2x1ZGUveG1pdF9vc2RlcC5oCkBAIC0xOCwyNCArMTgsOSBAQAogI2luY2x1ZGUgPG9zZGVwX3NlcnZpY2UuaD4KICNpbmNsdWRlIDxkcnZfdHlwZXMuaD4KIAotc3RydWN0IHBrdF9maWxlIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OwotCV9fa2VybmVsX3NpemVfdCBwa3RfbGVuOyAvKiB0aGUgcmVtYWluZGVyIGxlbmd0aCBvZiB0aGUgb3Blbl9maWxlICovCi0JdW5zaWduZWQgY2hhciAqY3VyX2J1ZmZlcjsKLQl1OCAqYnVmX3N0YXJ0OwotCXU4ICpjdXJfYWRkcjsKLQlfX2tlcm5lbF9zaXplX3QgYnVmX2xlbjsKLX07Ci0KIAogI2RlZmluZSBOUl9YTUlURlJBTUUJMjU2CiAKLXN0cnVjdCB4bWl0X3ByaXY7Ci1zdHJ1Y3QgcGt0X2F0dHJpYjsKLXN0cnVjdCBzdGFfeG1pdF9wcml2Owotc3RydWN0IHhtaXRfZnJhbWU7Ci1zdHJ1Y3QgeG1pdF9idWY7Ci0KIGludCBydHdfeG1pdDIzYV9lbnRyeTIzYShzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldik7CiAKIHZvaWQgcnR3X29zX3htaXRfc2NoZWR1bGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcik7CkBAIC00NCwxMCArMjksNiBAQAogCQkJICAgICAgIHN0cnVjdCB4bWl0X2J1ZiAqcHhtaXRidWYsIHUzMiBhbGxvY19zeik7CiB2b2lkIHJ0d19vc194bWl0X3Jlc291cmNlX2ZyZWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJCSAgICAgICBzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmKTsKLXVpbnQgcnR3X3JlbWFpbmRlcl9sZW4yM2Eoc3RydWN0IHBrdF9maWxlICpwZmlsZSk7Ci12b2lkIF9ydHdfb3Blbl9wa3RmaWxlMjNhKHN0cnVjdCBza19idWZmICpwa3QsIHN0cnVjdCBwa3RfZmlsZSAqcGZpbGUpOwotdWludCBfcnR3X3BrdGZpbGVfcmVhZDIzYShzdHJ1Y3QgcGt0X2ZpbGUgKnBmaWxlLCB1OCAqcm1lbSwgdWludCBybGVuKTsKLWludCBydHdfZW5kb2Zwa3RmaWxlMjNhKHN0cnVjdCBwa3RfZmlsZSAqcGZpbGUpOwogCiB2b2lkIHJ0d19vc19wa3RfY29tcGxldGUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnBrdCk7CiB2b2lkIHJ0d19vc194bWl0X2NvbXBsZXRlMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9pb2N0bF9jZmc4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvaW9jdGxfY2ZnODAyMTEuYwppbmRleCA1MDg0MGI5Li4wYzlmNWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9pb2N0bF9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL2lvY3RsX2NmZzgwMjExLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDx4bWl0X29zZGVwLmg+CiAKICNpbmNsdWRlICJpb2N0bF9jZmc4MDIxMS5oIgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2RlZmluZSBSVFdfTUFYX01HTVRfVFhfQ05UIDgKIApAQCAtMjYwLDI2ICsyNTksMjEgQEAKIAlzaXplX3Qgbm90aWZ5X2llbGVuOwogCXMzMiBub3RpZnlfc2lnbmFsOwogCXU4IGJ1ZltNQVhfQlNTSU5GT19MRU5dLCAqcGJ1ZjsKLQlzaXplX3QgbGVuLCBic3NpbmZfbGVuID0gMDsKKwlzaXplX3QgbGVuOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwd2xhbmhkcjsKLQl1bnNpZ25lZCBzaG9ydCAqZmN0cmw7Ci0JdTggYmNfYWRkcltdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0KIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gcGFkYXB0ZXItPnJ0d193ZGV2OwogCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCiAJLyogREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOyAqLwogCi0JYnNzaW5mX2xlbiA9Ci0JCXBuZXR3b3JrLT5uZXR3b3JrLklFTGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlpZiAoYnNzaW5mX2xlbiA+IE1BWF9CU1NJTkZPX0xFTikgeworCWlmIChwbmV0d29yay0+bmV0d29yay5JRUxlbmd0aCA+IE1BWF9JRV9TWikgewogCQlEQkdfODcyM0EoIiVzIElFIExlbmd0aCB0b28gbG9uZyA+ICVkIGJ5dGVcbiIsIF9fZnVuY19fLAotCQkJICBNQVhfQlNTSU5GT19MRU4pOworCQkJICBNQVhfSUVfU1opOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JY2hhbm5lbCA9IHBuZXR3b3JrLT5uZXR3b3JrLkNvbmZpZ3VyYXRpb24uRFNDb25maWc7CisJY2hhbm5lbCA9IHBuZXR3b3JrLT5uZXR3b3JrLkRTQ29uZmlnOwogCWlmIChjaGFubmVsIDw9IFJUV19DSF9NQVhfMkdfQ0hBTk5FTCkKIAkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFubmVsLAogCQkJCQkJICAgICAgSUVFRTgwMjExX0JBTkRfMkdIWik7CkBAIC0yODksMTQgKzI4MywxMyBAQAogCiAJbm90aWZ5X2NoYW5uZWwgPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIGZyZXEpOwogCi0JLyogcnR3X2dldF90aW1lc3RhbXBlX2Zyb21faWUyM2EoKSAqLwogCW5vdGlmeV90aW1lc3RhbXAgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpICogMTAwMDsJLyogdVNlYyAqLwogCiAJbm90aWZ5X2ludGVydmFsID0KLQkgICAgbGUxNl90b19jcHUoKih1MTYgKikKKwkJZ2V0X3VuYWxpZ25lZF9sZTE2KAogCQkJcnR3X2dldF9iZWFjb25faW50ZXJ2YWwyM2FfZnJvbV9pZShwbmV0d29yay0+bmV0d29yay5JRXMpKTsKIAlub3RpZnlfY2FwYWJpbGl0eSA9Ci0JICAgIGxlMTZfdG9fY3B1KCoodTE2ICopCisJCWdldF91bmFsaWduZWRfbGUxNigKIAkJCXJ0d19nZXRfY2FwYWJpbGl0eTIzYV9mcm9tX2llKHBuZXR3b3JrLT5uZXR3b3JrLklFcykpOwogCiAJbm90aWZ5X2llID0gcG5ldHdvcmstPm5ldHdvcmsuSUVzICsgX0ZJWEVEX0lFX0xFTkdUSF87CkBAIC0zMTUsMjEgKzMwOCwyMiBAQAogCXBidWYgPSBidWY7CiAKIAlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBidWY7Ci0JZmN0cmwgPSAmcHdsYW5oZHItPmZyYW1lX2NvbnRyb2w7Ci0JKihmY3RybCkgPSAwOwogCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCAwKTsKKwlwd2xhbmhkci0+c2VxX2N0cmwgPSAwOwogCiAJaWYgKHBuZXR3b3JrLT5uZXR3b3JrLnJlc2VydmVkID09IDEpIHsJLyogIFdJRklfQkVBQ09OICovCi0JCW1lbWNweShwd2xhbmhkci0+YWRkcjEsIGJjX2FkZHIsIEVUSF9BTEVOKTsKLQkJU2V0RnJhbWVTdWJUeXBlKHBidWYsIFdJRklfQkVBQ09OKTsKKwkJZXRoX2Jyb2FkY2FzdF9hZGRyKHB3bGFuaGRyLT5hZGRyMSk7CisJCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAJfSBlbHNlIHsKLQkJbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLCBFVEhfQUxFTik7Ci0JCVNldEZyYW1lU3ViVHlwZShwYnVmLCBXSUZJX1BST0JFUlNQKTsKKwkJZXRoZXJfYWRkcl9jb3B5KHB3bGFuaGRyLT5hZGRyMSwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpKTsKKwkJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPQorCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCSAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJfQogCi0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMiwgcG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcywgRVRIX0FMRU4pOwotCW1lbWNweShwd2xhbmhkci0+YWRkcjMsIHBuZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MsIEVUSF9BTEVOKTsKKwlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIyLCBwbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKKwlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBwbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzKTsKIAogCXBidWYgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKIAlsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwpAQCAtMzU3LDkgKzM1MSw2IEBACiAJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKIAlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKnB3ZGV2ID0gcGFkYXB0ZXItPnJ0d193ZGV2OwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotI2VuZGlmCiAKIAlEQkdfODcyM0EoIiVzKHBhZGFwdGVyID0lcClcbiIsIF9fZnVuY19fLCBwYWRhcHRlcik7CiAKQEAgLTM3MCwyMiArMzYxLDExIEBACiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX0FQX1NUQVRFKSkKIAkJcmV0dXJuOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlpZiAoIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkgewotCQlydHdfcDJwX3NldF9wcmVfc3RhdGUocHdkaW5mbywgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSk7Ci0JCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfQ0xJRU5UKTsKLQkJcnR3X3AycF9zZXRfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX0dPTkVHT19PSyk7Ci0JCURCR184NzIzQSgiJXMsIHJvbGUgPSVkLCBwMnBfc3RhdGUgPSVkLCBwcmVfcDJwX3N0YXRlID0lZFxuIiwKLQkJCSAgX19mdW5jX18sIHJ0d19wMnBfcm9sZShwd2RpbmZvKSwKLQkJCSAgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSwgcnR3X3AycF9wcmVfc3RhdGUocHdkaW5mbykpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JaWYgKHJ0d190b19yb2FtaW5nKHBhZGFwdGVyKSA+IDApIHsKKwlpZiAocGFkYXB0ZXItPm1sbWVwcml2LnRvX3JvYW1pbmcgPiAwKSB7CiAJCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBwd2Rldi0+d2lwaHk7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqbm90aWZ5X2NoYW5uZWw7CiAJCXUzMiBmcmVxOwotCQl1MTYgY2hhbm5lbCA9IGN1cl9uZXR3b3JrLT5uZXR3b3JrLkNvbmZpZ3VyYXRpb24uRFNDb25maWc7CisJCXUxNiBjaGFubmVsID0gY3VyX25ldHdvcmstPm5ldHdvcmsuRFNDb25maWc7CiAKIAkJaWYgKGNoYW5uZWwgPD0gUlRXX0NIX01BWF8yR19DSEFOTkVMKQogCQkJZnJlcSA9CkBAIC00MjksOSArNDA5LDYgQEAKIHsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKnB3ZGV2ID0gcGFkYXB0ZXItPnJ0d193ZGV2OwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotI2VuZGlmCiAKIAlEQkdfODcyM0EoIiVzKHBhZGFwdGVyID0lcClcbiIsIF9fZnVuY19fLCBwYWRhcHRlcik7CiAKQEAgLTQ0MiwyMSArNDE5LDYgQEAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKQogCQlyZXR1cm47CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCWlmICghcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKSB7Ci0JCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5maW5kX3BoYXNlX3RpbWVyKTsKLQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyKTsKLQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnByZV90eF9zY2FuX3RpbWVyKTsKLQotCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBydHdfcDJwX3ByZV9zdGF0ZShwd2RpbmZvKSk7Ci0JCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKTsKLQotCQlEQkdfODcyM0EoIiVzLCByb2xlID0lZCwgcDJwX3N0YXRlID0lZCwgcHJlX3AycF9zdGF0ZSA9JWRcbiIsCi0JCQkgIF9fZnVuY19fLCBydHdfcDJwX3JvbGUocHdkaW5mbyksCi0JCQkgIHJ0d19wMnBfc3RhdGUocHdkaW5mbyksIHJ0d19wMnBfcHJlX3N0YXRlKHB3ZGluZm8pKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCWlmICghcGFkYXB0ZXItPm1sbWVwcml2Lm5vdF9pbmRpY19kaXNjbykgewogCQlpZiAoY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBXSUZJX1VOREVSX0xJTktJTkcpKSB7CiAJCQljZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChwYWRhcHRlci0+cG5ldGRldiwgTlVMTCwgTlVMTCwKQEAgLTQ3MSwxMiArNDMzLDEyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKLXN0YXRpYyB1OCBzZXRfcGFpcndpc2Vfa2V5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHN0cnVjdCBzdGFfaW5mbyAqcHN0YSkKK3N0YXRpYyBpbnQgc2V0X3BhaXJ3aXNlX2tleShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpCiB7CiAJc3RydWN0IGNtZF9vYmogKnBoMmM7CiAJc3RydWN0IHNldF9zdGFrZXlfcGFybSAqcHNldHN0YWtleV9wYXJhOwogCXN0cnVjdCBjbWRfcHJpdiAqcGNtZHByaXYgPSAmcGFkYXB0ZXItPmNtZHByaXY7Ci0JdTggcmVzID0gX1NVQ0NFU1M7CisJaW50IHJlcyA9IF9TVUNDRVNTOwogCiAJcGgyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRfb2JqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBoMmMgPT0gTlVMTCkgewpAQCAtNDkzLDkgKzQ1NSw5IEBACiAKIAlpbml0X2gyZndjbWRfd19wYXJtX25vX3JzcChwaDJjLCBwc2V0c3Rha2V5X3BhcmEsIF9TZXRTdGFLZXlfQ01EXyk7CiAKLQlwc2V0c3Rha2V5X3BhcmEtPmFsZ29yaXRobSA9ICh1OCkgcHN0YS0+ZG90MTE4MDIxWFByaXZhY3k7CisJcHNldHN0YWtleV9wYXJhLT5hbGdvcml0aG0gPSBwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeTsKIAotCW1lbWNweShwc2V0c3Rha2V5X3BhcmEtPmFkZHIsIHBzdGEtPmh3YWRkciwgRVRIX0FMRU4pOworCWV0aGVyX2FkZHJfY29weShwc2V0c3Rha2V5X3BhcmEtPmFkZHIsIHBzdGEtPmh3YWRkcik7CiAKIAltZW1jcHkocHNldHN0YWtleV9wYXJhLT5rZXksICZwc3RhLT5kb3QxMTgwMjF4X1VuY3N0S2V5LCAxNik7CiAKQEAgLTUwNSw4ICs0NjcsOCBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2dyb3VwX2tleShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqa2V5LCB1OCBhbGcsCi0JCQkgaW50IGtleWlkKQorc3RhdGljIGludCBzZXRfZ3JvdXBfa2V5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICprZXksIHUzMiBhbGcsCisJCQkgdTgga2V5aWQpCiB7CiAJdTgga2V5bGVuOwogCXN0cnVjdCBjbWRfb2JqICpwY21kOwpAQCAtNTE2LDYgKzQ3OCwxMSBAQAogCiAJREJHXzg3MjNBKCIlc1xuIiwgX19mdW5jX18pOwogCisJaWYgKGtleWlkID49IDQpIHsKKwkJcmVzID0gX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CisKIAlwY21kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZF9vYmopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBjbWQpIHsKIAkJcmVzID0gX0ZBSUw7CkBAIC01MjgsMjQgKzQ5NSwyMyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcHNldGtleXBhcm0tPmtleWlkID0gKHU4KSBrZXlpZDsKKwlwc2V0a2V5cGFybS0+a2V5aWQgPSBrZXlpZDsKIAlpZiAoaXNfd2VwX2VuYyhhbGcpKQotCQlwYWRhcHRlci0+bWxtZXByaXYua2V5X21hc2sgfD0gQ0hLQklUKHBzZXRrZXlwYXJtLT5rZXlpZCk7CisJCXBhZGFwdGVyLT5tbG1lcHJpdi5rZXlfbWFzayB8PSBCSVQocHNldGtleXBhcm0tPmtleWlkKTsKIAogCXBzZXRrZXlwYXJtLT5hbGdvcml0aG0gPSBhbGc7CiAKIAlwc2V0a2V5cGFybS0+c2V0X3R4ID0gMTsKIAogCXN3aXRjaCAoYWxnKSB7Ci0JY2FzZSBfV0VQNDBfOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CiAJCWtleWxlbiA9IDU7CiAJCWJyZWFrOwotCWNhc2UgX1dFUDEwNF86CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CiAJCWtleWxlbiA9IDEzOwogCQlicmVhazsKLQljYXNlIF9US0lQXzoKLQljYXNlIF9US0lQX1dUTUlDXzoKLQljYXNlIF9BRVNfOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJZGVmYXVsdDoKIAkJa2V5bGVuID0gMTY7CiAJfQpAQCAtNTU4LDI4ICs1MjQsMjYgQEAKIAlwY21kLT5yc3AgPSBOVUxMOwogCXBjbWQtPnJzcHN6ID0gMDsKIAotCUlOSVRfTElTVF9IRUFEKCZwY21kLT5saXN0KTsKLQogCXJlcyA9IHJ0d19lbnF1ZXVlX2NtZDIzYShwY21kcHJpdiwgcGNtZCk7CiAKIGV4aXQ6CiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBzZXRfd2VwX2tleShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCAqa2V5LCB1OCBrZXlsZW4sCi0JCSAgICAgICBpbnQga2V5aWQpCitzdGF0aWMgaW50IHNldF93ZXBfa2V5KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICprZXksIHUxNiBrZXlsZW4sCisJCSAgICAgICB1OCBrZXlpZCkKIHsKLQl1OCBhbGc7CisJdTMyIGFsZzsKIAogCXN3aXRjaCAoa2V5bGVuKSB7CiAJY2FzZSA1OgotCQlhbGcgPSBfV0VQNDBfOworCQlhbGcgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKIAkJYnJlYWs7CiAJY2FzZSAxMzoKLQkJYWxnID0gX1dFUDEwNF87CisJCWFsZyA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYWxnID0gX05PX1BSSVZBQ1lfOworCQlhbGcgPSAwOwogCX0KIAogCXJldHVybiBzZXRfZ3JvdXBfa2V5KHBhZGFwdGVyLCBrZXksIGFsZywga2V5aWQpOwpAQCAtNTkwLDcgKzU1NCw4IEBACiAJCQkJCSAgdTMyIHBhcmFtX2xlbikKIHsKIAlpbnQgcmV0ID0gMDsKLQl1MzIgd2VwX2tleV9pZHgsIHdlcF9rZXlfbGVuOworCXUxNiB3ZXBfa2V5X2xlbjsKKwl1OCB3ZXBfa2V5X2lkeDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEgPSBOVUxMLCAqcGJjbWNfc3RhID0gTlVMTDsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwpAQCAtNjU4LDIxICs2MjMsMjEgQEAKIAogCQkJcHNlY3VyaXR5cHJpdi0+bmRpc2VuY3J5cHRzdGF0dXMgPQogCQkJCU5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7Ci0JCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gX1dFUDQwXzsKLQkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gX1dFUDQwXzsKKwkJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CiAKIAkJCWlmICh3ZXBfa2V5X2xlbiA9PSAxMykgewotCQkJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfV0VQMTA0XzsKLQkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IF9XRVAxMDRfOworCQkJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CiAJCQl9CiAKIAkJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUtleUluZGV4ID0gd2VwX2tleV9pZHg7CiAJCX0KIAotCQltZW1jcHkoJnBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5W3dlcF9rZXlfaWR4XS5za2V5WzBdLAorCQltZW1jcHkoJnBzZWN1cml0eXByaXYtPndlcF9rZXlbd2VwX2tleV9pZHhdLmtleSwKIAkJICAgICAgIHBhcmFtLT51LmNyeXB0LmtleSwgd2VwX2tleV9sZW4pOwogCi0JCXBzZWN1cml0eXByaXYtPmRvdDExRGVmS2V5bGVuW3dlcF9rZXlfaWR4XSA9IHdlcF9rZXlfbGVuOworCQlwc2VjdXJpdHlwcml2LT53ZXBfa2V5W3dlcF9rZXlfaWR4XS5rZXlsZW4gPSB3ZXBfa2V5X2xlbjsKIAogCQlzZXRfd2VwX2tleShwYWRhcHRlciwgcGFyYW0tPnUuY3J5cHQua2V5LCB3ZXBfa2V5X2xlbiwKIAkJCSAgICB3ZXBfa2V5X2lkeCk7CkBAIC02ODQsOCArNjQ5LDcgQEAKIAlpZiAoIXBzdGEgJiYgY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQVBfU1RBVEUpKSB7CS8qICBncm91cCBrZXkgKi8KIAkJaWYgKHBhcmFtLT51LmNyeXB0LnNldF90eCA9PSAwKSB7CS8qIGdyb3VwIGtleSAqLwogCQkJaWYgKHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCQkJREJHXzg3MjNBKCIlcywgc2V0IGdyb3VwX2tleSwgV0VQXG4iLAotCQkJCQkgIF9fZnVuY19fKTsKKwkJCQlEQkdfODcyM0EoIiVzLCBzZXQgZ3JvdXBfa2V5LCBXRVBcbiIsIF9fZnVuY19fKTsKIAogCQkJCW1lbWNweShwc2VjdXJpdHlwcml2LT4KIAkJCQkgICAgICAgZG90MTE4MDIxWEdycEtleVtwYXJhbS0+dS5jcnlwdC5pZHhdLgpAQCAtNjkzLDE3ICs2NTcsMTcgQEAKIAkJCQkgICAgICAgKHBhcmFtLT51LmNyeXB0LmtleV9sZW4gPgogCQkJCQkxNiA/IDE2IDogcGFyYW0tPnUuY3J5cHQua2V5X2xlbikpOwogCi0JCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBfV0VQNDBfOworCQkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CiAJCQkJaWYgKHBhcmFtLT51LmNyeXB0LmtleV9sZW4gPT0gMTMpIHsKIAkJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPQotCQkJCQkgICAgX1dFUDEwNF87CisJCQkJCSAgICBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CiAJCQkJfQogCiAJCQl9IGVsc2UgaWYgKHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewogCQkJCURCR184NzIzQSgiJXMsIHNldCBncm91cF9rZXksIFRLSVBcbiIsCiAJCQkJCSAgX19mdW5jX18pOwogCi0JCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBfVEtJUF87CisJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOwogCiAJCQkJbWVtY3B5KHBzZWN1cml0eXByaXYtPgogCQkJCSAgICAgICBkb3QxMTgwMjFYR3JwS2V5W3BhcmFtLT51LmNyeXB0LmlkeF0uCkBAIC03MjIsMTMgKzY4NiwxMyBAQAogCQkJCQkJCSAgICAgaWR4XS5za2V5LAogCQkJCSAgICAgICAmcGFyYW0tPnUuY3J5cHQua2V5WzI0XSwgOCk7CiAKLQkJCQlwc2VjdXJpdHlwcml2LT5idXNldGtpcGtleSA9IHRydWU7CisJCQkJcHNlY3VyaXR5cHJpdi0+YnVzZXRraXBrZXkgPSAxOwogCiAJCQl9IGVsc2UgaWYgKHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewogCQkJCURCR184NzIzQSgiJXMsIHNldCBncm91cF9rZXksIENDTVBcbiIsCiAJCQkJCSAgX19mdW5jX18pOwogCi0JCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBfQUVTXzsKKwkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7CiAKIAkJCQltZW1jcHkocHNlY3VyaXR5cHJpdi0+CiAJCQkJICAgICAgIGRvdDExODAyMVhHcnBLZXlbcGFyYW0tPnUuY3J5cHQuaWR4XS4KQEAgLTc0MCwxMiArNzA0LDEyIEBACiAJCQkJCSAgX19mdW5jX18pOwogCiAJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPQotCQkJCSAgICBfTk9fUFJJVkFDWV87CisJCQkJICAgIDA7CiAJCQl9CiAKIAkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBLZXlpZCA9IHBhcmFtLT51LmNyeXB0LmlkeDsKIAotCQkJcHNlY3VyaXR5cHJpdi0+Ymluc3RhbGxHcnBrZXkgPSB0cnVlOworCQkJcHNlY3VyaXR5cHJpdi0+Ymluc3RhbGxHcnBrZXkgPSAxOwogCiAJCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0KIAkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeTsKQEAgLTc4MiwxNiArNzQ2LDE2IEBACiAJCQkJCURCR184NzIzQSgiJXMsIHNldCBwYWlyd2lzZSBrZXksIFdFUFxuIiwKIAkJCQkJCSAgX19mdW5jX18pOwogCi0JCQkJCXBzdGEtPmRvdDExODAyMVhQcml2YWN5ID0gX1dFUDQwXzsKKwkJCQkJcHN0YS0+ZG90MTE4MDIxWFByaXZhY3kgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKIAkJCQkJaWYgKHBhcmFtLT51LmNyeXB0LmtleV9sZW4gPT0gMTMpIHsKIAkJCQkJCXBzdGEtPmRvdDExODAyMVhQcml2YWN5ID0KLQkJCQkJCQlfV0VQMTA0XzsKKwkJCQkJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpKSB7CiAJCQkJCURCR184NzIzQSgiJXMsIHNldCBwYWlyd2lzZSBrZXksICIKIAkJCQkJCSAgIlRLSVBcbiIsIF9fZnVuY19fKTsKIAotCQkJCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9IF9US0lQXzsKKwkJCQkJcHN0YS0+ZG90MTE4MDIxWFByaXZhY3kgPSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOwogCiAJCQkJCS8qIERFQlVHX0VSUigic2V0IGtleSBsZW5ndGggOnBhcmFtLT51LmNyeXB0LmtleV9sZW4gPSVkXG4iLCBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuKTsgKi8KIAkJCQkJLyogc2V0IG1pYyBrZXkgKi8KQEAgLTgwMCwxOSArNzY0LDE5IEBACiAJCQkJCW1lbWNweShwc3RhLT5kb3QxMXRraXByeG1pY2tleS5za2V5LAogCQkJCQkgICAgICAgJnBhcmFtLT51LmNyeXB0LmtleVsyNF0sIDgpOwogCi0JCQkJCXBzZWN1cml0eXByaXYtPmJ1c2V0a2lwa2V5ID0gdHJ1ZTsKKwkJCQkJcHNlY3VyaXR5cHJpdi0+YnVzZXRraXBrZXkgPSAxOwogCiAJCQkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSkgewogCiAJCQkJCURCR184NzIzQSgiJXMsIHNldCBwYWlyd2lzZSBrZXksICIKIAkJCQkJCSAgIkNDTVBcbiIsIF9fZnVuY19fKTsKIAotCQkJCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9IF9BRVNfOworCQkJCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7CiAJCQkJfSBlbHNlIHsKIAkJCQkJREJHXzg3MjNBKCIlcywgc2V0IHBhaXJ3aXNlIGtleSwgIgogCQkJCQkJICAibm9uZVxuIiwgX19mdW5jX18pOwogCi0JCQkJCXBzdGEtPmRvdDExODAyMVhQcml2YWN5ID0gX05PX1BSSVZBQ1lfOworCQkJCQlwc3RhLT5kb3QxMTgwMjFYUHJpdmFjeSA9IDA7CiAJCQkJfQogCiAJCQkJc2V0X3BhaXJ3aXNlX2tleShwYWRhcHRlciwgcHN0YSk7CkBAIC04MzEsMTUgKzc5NSwxNSBAQAogCQkJCQkJa2V5X2xlbikpOwogCiAJCQkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0KLQkJCQkJCV9XRVA0MF87CisJCQkJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKIAkJCQkJaWYgKHBhcmFtLT51LmNyeXB0LmtleV9sZW4gPT0gMTMpIHsKIAkJCQkJCXBzZWN1cml0eXByaXYtPgogCQkJCQkJICAgIGRvdDExODAyMVhHcnBQcml2YWN5ID0KLQkJCQkJCQlfV0VQMTA0XzsKKwkJCQkJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpKSB7CiAJCQkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0KLQkJCQkJICAgIF9US0lQXzsKKwkJCQkJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA7CiAKIAkJCQkJbWVtY3B5KHBzZWN1cml0eXByaXYtPgogCQkJCQkgICAgICAgZG90MTE4MDIxWEdycEtleVtwYXJhbS0+dS5jcnlwdC4KQEAgLTg2NCwxMSArODI4LDExIEBACiAJCQkJCSAgICAgICBza2V5LCAmcGFyYW0tPnUuY3J5cHQua2V5WzI0XSwKIAkJCQkJICAgICAgIDgpOwogCi0JCQkJCXBzZWN1cml0eXByaXYtPmJ1c2V0a2lwa2V5ID0gdHJ1ZTsKKwkJCQkJcHNlY3VyaXR5cHJpdi0+YnVzZXRraXBrZXkgPSAxOwogCiAJCQkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSkgewogCQkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9Ci0JCQkJCQlfQUVTXzsKKwkJCQkJCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7CiAKIAkJCQkJbWVtY3B5KHBzZWN1cml0eXByaXYtPgogCQkJCQkgICAgICAgZG90MTE4MDIxWEdycEtleVtwYXJhbS0+dS5jcnlwdC4KQEAgLTg3OSwxMyArODQzLDEzIEBACiAJCQkJCQlrZXlfbGVuKSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPQotCQkJCQkJX05PX1BSSVZBQ1lfOworCQkJCQkJMDsKIAkJCQl9CiAKIAkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwS2V5aWQgPQogCQkJCQlwYXJhbS0+dS5jcnlwdC5pZHg7CiAKLQkJCQlwc2VjdXJpdHlwcml2LT5iaW5zdGFsbEdycGtleSA9IHRydWU7CisJCQkJcHNlY3VyaXR5cHJpdi0+Ymluc3RhbGxHcnBrZXkgPSAxOwogCiAJCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9CiAJCQkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5OwpAQCAtOTE3LDE1ICs4ODEsMTEgQEAKIAkJCQkgICAgICAgc3RydWN0IGllZWVfcGFyYW0gKnBhcmFtLCB1MzIgcGFyYW1fbGVuKQogewogCWludCByZXQgPSAwOwotCXUzMiB3ZXBfa2V5X2lkeCwgd2VwX2tleV9sZW47CisJdTMyIHdlcF9rZXlfaWR4OworCXUxNiB3ZXBfa2V5X2xlbjsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCiAKIAlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTk3MCwyMSArOTMwLDIxIEBACiAKIAkJCXBzZWN1cml0eXByaXYtPm5kaXNlbmNyeXB0c3RhdHVzID0KIAkJCQlOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9IF9XRVA0MF87Ci0JCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IF9XRVA0MF87CisJCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOwogCiAJCQlpZiAod2VwX2tleV9sZW4gPT0gMTMpIHsKLQkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gX1dFUDEwNF87Ci0JCQkJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBfV0VQMTA0XzsKKwkJCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OworCQkJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQkJfQogCiAJCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lLZXlJbmRleCA9IHdlcF9rZXlfaWR4OwogCQl9CiAKLQkJbWVtY3B5KCZwc2VjdXJpdHlwcml2LT5kb3QxMURlZktleVt3ZXBfa2V5X2lkeF0uc2tleVswXSwKKwkJbWVtY3B5KCZwc2VjdXJpdHlwcml2LT53ZXBfa2V5W3dlcF9rZXlfaWR4XS5rZXksCiAJCSAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXksIHdlcF9rZXlfbGVuKTsKIAotCQlwc2VjdXJpdHlwcml2LT5kb3QxMURlZktleWxlblt3ZXBfa2V5X2lkeF0gPSB3ZXBfa2V5X2xlbjsKKwkJcHNlY3VyaXR5cHJpdi0+d2VwX2tleVt3ZXBfa2V5X2lkeF0ua2V5bGVuID0gd2VwX2tleV9sZW47CiAKIAkJcnR3X3NldF9rZXkyM2EocGFkYXB0ZXIsIHBzZWN1cml0eXByaXYsIHdlcF9rZXlfaWR4LCAwKTsKIApAQCAtMTA0MSw3ICsxMDAxLDcgQEAKIAkJCQkJCSAgICAgICA4KTsKIAogCQkJCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi4KLQkJCQkJCQlidXNldGtpcGtleSA9IGZhbHNlOworCQkJCQkJCWJ1c2V0a2lwa2V5ID0gMDsKIAkJCQkJfQogCQkJCQlEQkdfODcyM0EoIiB+fn5+c2V0IHN0YSBrZXk6dW5pY2FzdGtleVxuIik7CiAKQEAgLTEwNjcsNyArMTAyNyw3IEBACiAJCQkJCSAgICAgICBza2V5LCAmcGFyYW0tPnUuY3J5cHQua2V5WzI0XSwKIAkJCQkJICAgICAgIDgpOwogCQkJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmJpbnN0YWxsR3Jwa2V5ID0KLQkJCQkJICAgIHRydWU7CisJCQkJCQkxOwogCQkJCQkvKiBERUJVR19FUlIoKCIgcGFyYW0tPnUuY3J5cHQua2V5X2xlbiIKIAkJCQkJICAgIj0lZFxuIiwgcGFyYW0tPnUuY3J5cHQua2V5X2xlbikpOyAqLwogCQkJCQlEQkdfODcyM0EKQEAgLTEwODAsMTUgKzEwNDAsNiBAQAogCQkJCQlydHdfc2V0X2tleTIzYShwYWRhcHRlciwKIAkJCQkJCSAgICAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdiwKIAkJCQkJCSAgICBwYXJhbS0+dS5jcnlwdC5pZHgsIDEpOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCQkJCWlmIChydHdfcDJwX2Noa19zdGF0ZQotCQkJCQkgICAgKHB3ZGluZm8sCi0JCQkJCSAgICAgUDJQX1NUQVRFX1BST1ZJU0lPTklOR19JTkcpKSB7Ci0JCQkJCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLAotCQkJCQkJCQkgIFAyUF9TVEFURV9QUk9WSVNJT05JTkdfRE9ORSk7Ci0JCQkJCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCiAJCQkJfQogCQkJfQogCkBAIC0xMTI3LDEzICsxMDc4LDEzIEBACiB7CiAJY2hhciAqYWxnX25hbWU7CiAJdTMyIHBhcmFtX2xlbjsKLQlzdHJ1Y3QgaWVlZV9wYXJhbSAqcGFyYW0gPSBOVUxMOworCXN0cnVjdCBpZWVlX3BhcmFtICpwYXJhbTsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpydHdfd2RldiA9IHdpcGh5X3RvX3dkZXYod2lwaHkpOwogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSB3aXBoeV90b19hZGFwdGVyKHdpcGh5KTsKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIiBhZGRpbmcga2V5IGZvciAlcE1cbiIsIEZVTkNfTkRFVl9BUkcobmRldiksCisJREJHXzg3MjNBKCIlcyglcyk6IGFkZGluZyBrZXkgZm9yICVwTVxuIiwgX19mdW5jX18sIG5kZXYtPm5hbWUsCiAJCSAgbWFjX2FkZHIpOwogCURCR184NzIzQSgiY2lwaGVyID0gMHgleFxuIiwgcGFyYW1zLT5jaXBoZXIpOwogCURCR184NzIzQSgia2V5X2xlbiA9IDB4JXhcbiIsIHBhcmFtcy0+a2V5X2xlbik7CkBAIC0xMTQzLDExICsxMDk0LDExIEBACiAKIAlwYXJhbV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWVfcGFyYW0pICsgcGFyYW1zLT5rZXlfbGVuOwogCXBhcmFtID0ga3phbGxvYyhwYXJhbV9sZW4sIEdGUF9LRVJORUwpOwotCWlmIChwYXJhbSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJaWYgKCFwYXJhbSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXJhbS0+Y21kID0gSUVFRV9DTURfU0VUX0VOQ1JZUFRJT047Ci0JbWVtc2V0KHBhcmFtLT5zdGFfYWRkciwgMHhmZiwgRVRIX0FMRU4pOworCWV0aF9icm9hZGNhc3RfYWRkcihwYXJhbS0+c3RhX2FkZHIpOwogCiAJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgewogCWNhc2UgSVdfQVVUSF9DSVBIRVJfTk9ORToKQEAgLTExOTYsNyArMTE0Nyw3IEBACiAJfSBlbHNlIGlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpIHsKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKIAkJaWYgKG1hY19hZGRyKQotCQkJbWVtY3B5KHBhcmFtLT5zdGFfYWRkciwgKHZvaWQgKiltYWNfYWRkciwgRVRIX0FMRU4pOworCQkJZXRoZXJfYWRkcl9jb3B5KHBhcmFtLT5zdGFfYWRkciwgbWFjX2FkZHIpOwogCiAJCXJldCA9IHJ0d19jZmc4MDIxMV9hcF9zZXRfZW5jcnlwdGlvbihuZGV2LCBwYXJhbSwgcGFyYW1fbGVuKTsKICNlbmRpZgpAQCAtMTIxOCw3ICsxMTY5LDcgQEAKIAkJICAgICB2b2lkICpjb29raWUsCiAJCSAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSkKIHsKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiXG4iLCBGVU5DX05ERVZfQVJHKG5kZXYpKTsKKwlEQkdfODcyM0EoIiVzKCVzKVxuIiwgX19mdW5jX18sIG5kZXYtPm5hbWUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjI5LDggKzExODAsNyBAQAogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIiBrZXlfaW5kZXggPSVkXG4iLCBGVU5DX05ERVZfQVJHKG5kZXYpLAotCQkgIGtleV9pbmRleCk7CisJREJHXzg3MjNBKCIlcyglcyk6IGtleV9pbmRleCA9JWRcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lLCBrZXlfaW5kZXgpOwogCiAJaWYgKGtleV9pbmRleCA9PSBwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lLZXlJbmRleCkgewogCQkvKiBjbGVhciB0aGUgZmxhZyBvZiB3ZXAgZGVmYXVsdCBrZXkgc2V0LiAqLwpAQCAtMTI0NywyMyArMTE5NywyNCBAQAogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIiBrZXlfaW5kZXggPSVkIgotCQkgICIsIHVuaWNhc3QgPSVkLCBtdWx0aWNhc3QgPSVkLlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSwKLQkJICBrZXlfaW5kZXgsIHVuaWNhc3QsIG11bHRpY2FzdCk7CisJREJHXzg3MjNBKCIlcyglcyk6IGtleV9pbmRleCA9JWQsIHVuaWNhc3QgPSVkLCBtdWx0aWNhc3QgPSVkLlxuIiwKKwkJICBfX2Z1bmNfXywgbmRldi0+bmFtZSwga2V5X2luZGV4LCB1bmljYXN0LCBtdWx0aWNhc3QpOwogCi0JaWYgKChrZXlfaW5kZXggPCBXRVBfS0VZUykgJiYKLQkgICAgKChwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID09IF9XRVA0MF8pIHx8Ci0JICAgICAocHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9PSBfV0VQMTA0XykpKSB7CisJaWYgKGtleV9pbmRleCA8IE5VTV9XRVBfS0VZUyAmJgorCSAgICAocHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAorCSAgICAgcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpKSB7CiAJCS8qIHNldCB3ZXAgZGVmYXVsdCBrZXkgKi8KIAkJcHNlY3VyaXR5cHJpdi0+bmRpc2VuY3J5cHRzdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogCiAJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUtleUluZGV4ID0ga2V5X2luZGV4OwogCi0JCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfV0VQNDBfOwotCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IF9XRVA0MF87Ci0JCWlmIChwc2VjdXJpdHlwcml2LT5kb3QxMURlZktleWxlbltrZXlfaW5kZXhdID09IDEzKSB7Ci0JCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gX1dFUDEwNF87Ci0JCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IF9XRVAxMDRfOworCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCWlmIChwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleV9pbmRleF0ua2V5bGVuID09IDEzKSB7CisJCQlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0KKwkJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJCQlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9CisJCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQl9CiAKIAkJLyogc2V0IHRoZSBmbGFnIHRvIHJlcHJlc2VudCB0aGF0IHdlcCBkZWZhdWx0IGtleQpAQCAtMTI4Nyw3ICsxMjM4LDcgQEAKIAlzaW5mby0+ZmlsbGVkID0gMDsKIAogCWlmICghbWFjKSB7Ci0JCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgbWFjID09JXBcbiIsIEZVTkNfTkRFVl9BUkcobmRldiksIG1hYyk7CisJCURCR184NzIzQSgiJXMoJXMpOiBtYWMgPT0lcFxuIiwgX19mdW5jX18sIG5kZXYtPm5hbWUsIG1hYyk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0xMjk4LDE3ICsxMjQ5LDE1IEBACiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdDsKIAl9Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIiBtYWMgPSIgTUFDX0ZNVCAiXG4iLCBGVU5DX05ERVZfQVJHKG5kZXYpLAorCURCR184NzIzQSgiJXMoJXMpOiBtYWMgPSIgTUFDX0ZNVCAiXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSwKIAkJICBNQUNfQVJHKG1hYykpOwotI2VuZGlmCiAKIAkvKiBmb3IgaW5mcmEuL1AyUENsaWVudCBtb2RlICovCiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBXSUZJX1NUQVRJT05fU1RBVEUpICYmCiAJICAgIGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgewogCQlzdHJ1Y3Qgd2xhbl9uZXR3b3JrICpjdXJfbmV0d29yayA9ICZwbWxtZXByaXYtPmN1cl9uZXR3b3JrOwogCi0JCWlmIChtZW1jbXAobWFjLCBjdXJfbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzLCBFVEhfQUxFTikpIHsKKwkJaWYgKCFldGhlcl9hZGRyX2VxdWFsKG1hYywgY3VyX25ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzcykpIHsKIAkJCURCR184NzIzQSgiJXMsIG1pc21hdGNoIGJzc2lkID0iIE1BQ19GTVQgIlxuIiwgX19mdW5jX18sCiAJCQkJICBNQUNfQVJHKGN1cl9uZXR3b3JrLT5uZXR3b3JrLk1hY0FkZHJlc3MpKTsKIAkJCXJldCA9IC1FTk9FTlQ7CkBAIC0xMzQyLDc4ICsxMjkxLDEyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBjZmc4MDIxMV9pbmZyYXN0cnVjdHVyZV9tb2RlKHN0cnVjdCBydHdfYWRhcHRlciogcGFkYXB0ZXIsCisJCQkJIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZtb2RlKQoreworCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CisJc3RydWN0IHdsYW5fbmV0d29yayAqY3VyX25ldHdvcmsgPSAmcG1sbWVwcml2LT5jdXJfbmV0d29yazsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIG9sZF9tb2RlOworCisJb2xkX21vZGUgPSBjdXJfbmV0d29yay0+bmV0d29yay5pZm1vZGU7CisKKwlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfc2V0X2NfLCBfZHJ2X25vdGljZV8sCisJCSAoIislczogb2xkID0lZCBuZXcgPSVkIGZ3X3N0YXRlID0gMHglMDh4XG4iLCBfX2Z1bmNfXywKKwkJICBvbGRfbW9kZSwgaWZtb2RlLCBnZXRfZndzdGF0ZShwbWxtZXByaXYpKSk7CisKKwlpZiAob2xkX21vZGUgIT0gaWZtb2RlKSB7CisJCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5sb2NrKTsKKworCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfc2V0X2NfLCBfZHJ2X2luZm9fLAorCQkJICgiIGNoYW5nZSBtb2RlISIpKTsKKworCQlpZiAob2xkX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIG9sZF9tb2RlID09IE5MODAyMTFfSUZUWVBFX1AyUF9HTykgeworCQkJLyogY2hhbmdlIHRvIG90aGVyIG1vZGUgZnJvbSBOZGlzODAyXzExQVBNb2RlICovCisJCQljdXJfbmV0d29yay0+am9pbl9yZXMgPSAtMTsKKworI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQorCQkJc3RvcF9hcF9tb2RlMjNhKHBhZGFwdGVyKTsKKyNlbmRpZgorCQl9CisKKwkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSB8fAorCQkgICAgb2xkX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCQlydHdfZGlzYXNzb2NfY21kMjNhKHBhZGFwdGVyLCAwLCB0cnVlKTsKKworCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpIHx8CisJCSAgICBjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19NQVNURVJfU1RBVEUpKQorCQkJcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhKHBhZGFwdGVyLCAxKTsKKworCQlpZiAob2xkX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAorCQkgICAgb2xkX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCB8fAorCQkgICAgb2xkX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX0xJTktFRCkpIHsKKwkJCQkvKiB3aWxsIGNsciBMaW5rZWRfc3RhdGU7IGJlZm9yZSB0aGlzIGZ1bmN0aW9uLAorCQkJCSAgIHdlIG11c3QgaGF2ZSBjaGtlZCB3aGV0aGVyIGlzc3VlCisJCQkJICAgZGlzLWFzc29jX2NtZCBvciBub3QgKi8KKwkJCQlydHdfaW5kaWNhdGVfZGlzY29ubmVjdDIzYShwYWRhcHRlcik7CisJCQl9CisJICAgICAgIH0KKworCQljdXJfbmV0d29yay0+bmV0d29yay5pZm1vZGUgPSBpZm1vZGU7CisKKwkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIH5XSUZJX05VTExfU1RBVEUpOworCisJCXN3aXRjaCAoaWZtb2RlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfQURIT0NfU1RBVEUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCQlzZXRfZndzdGF0ZShwbWxtZXByaXYsIFdJRklfU1RBVElPTl9TVEFURSk7CisJCQlicmVhazsKKworCQljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCXNldF9md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSk7CisjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCisJCQlzdGFydF9hcF9tb2RlMjNhKHBhZGFwdGVyKTsKKwkJCS8qIHJ0d19pbmRpY2F0ZV9jb25uZWN0MjNhKHBhZGFwdGVyKTsgKi8KKyNlbmRpZgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2VjQ2xlYXJBbGxLZXlzKGFkYXB0ZXIpOyAqLworCisJCS8qIFJUX1RSQUNFKENPTVBfT0lEX1NFVCwgREJHX0xPVUQsCisJCSAgICgic2V0X2luZnJhc3RydWN0dXJlOiBmd19zdGF0ZToleCBhZnRlciBjaGFuZ2luZyBtb2RlXG4iLCAqLworCQkvKiBnZXRfZndzdGF0ZShwbWxtZXByaXYpKSk7ICovCisKKwkJc3Bpbl91bmxvY2tfYmgoJnBtbG1lcHJpdi0+bG9jayk7CisJfQorCisJcmV0dXJuIF9TVUNDRVNTOworfQorCiBzdGF0aWMgaW50IGNmZzgwMjExX3J0d19jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIG9sZF90eXBlOwotCWVudW0gbmRpc184MDJfMTFfbmV0X2luZnJhIG5ldHdvcmtUeXBlOwogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSB3aXBoeV90b19hZGFwdGVyKHdpcGh5KTsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKnJ0d193ZGV2ID0gd2lwaHlfdG9fd2Rldih3aXBoeSk7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0jZW5kaWYKIAlpbnQgcmV0ID0gMDsKLQl1OCBjaGFuZ2UgPSBmYWxzZTsKIAotCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgY2FsbCBuZXRkZXZfb3BlbjIzYVxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7Ci0JaWYgKG5ldGRldl9vcGVuMjNhKG5kZXYpICE9IDApIHsKLQkJcmV0ID0gLUVQRVJNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKF9GQUlMID09IHJ0d19wd3Jfd2FrZXVwKHBhZGFwdGVyKSkgewotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gZXhpdDsKLQl9CisJREJHXzg3MjNBKCIlcyglcyk6IGNhbGwgbmV0ZGV2X29wZW4yM2FcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKIAogCW9sZF90eXBlID0gcnR3X3dkZXYtPmlmdHlwZTsKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiIG9sZF9pZnR5cGUgPSVkLCBuZXdfaWZ0eXBlID0lZFxuIiwKLQkJICBGVU5DX05ERVZfQVJHKG5kZXYpLCBvbGRfdHlwZSwgdHlwZSk7CisJREJHXzg3MjNBKCIlcyglcyk6IG9sZF9pZnR5cGUgPSVkLCBuZXdfaWZ0eXBlID0lZFxuIiwKKwkJICBfX2Z1bmNfXywgbmRldi0+bmFtZSwgb2xkX3R5cGUsIHR5cGUpOwogCiAJaWYgKG9sZF90eXBlICE9IHR5cGUpIHsKLQkJY2hhbmdlID0gdHJ1ZTsKIAkJcG1sbWVleHQtPmFjdGlvbl9wdWJsaWNfcnhzZXEgPSAweGZmZmY7CiAJCXBtbG1lZXh0LT5hY3Rpb25fcHVibGljX2RpYWxvZ190b2tlbiA9IDB4ZmY7CiAJfQogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJbmV0d29ya1R5cGUgPSBOZGlzODAyXzExSUJTUzsKLQkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJbmV0d29ya1R5cGUgPSBOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmU7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJaWYgKGNoYW5nZSAmJiBydHdfcDJwX2Noa19yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKSkgewotCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPmZpbmRfcGhhc2VfdGltZXIpOwotCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPnJlc3RvcmVfcDJwX3N0YXRlX3RpbWVyKTsKLQkJCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5wcmVfdHhfc2Nhbl90aW1lcik7Ci0KLQkJCS8qIGl0IG1lYW5zIHJlbW92ZSBHTyBhbmQgY2hhbmdlIG1vZGUgZnJvbSBBUChHTykKLQkJCSAgIHRvIHN0YXRpb24oUDJQIERFVklDRSkgKi8KLQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfREVWSUNFKTsKLQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIHJ0d19wMnBfcHJlX3N0YXRlKHB3ZGluZm8pKTsKLQotCQkJREJHXzg3MjNBKCIlcywgcm9sZSA9JWQsIHAycF9zdGF0ZSA9JWQsIHByZV9wMnBfc3RhdGUgPSIKLQkJCQkgICIlZFxuIiwgX19mdW5jX18sIHJ0d19wMnBfcm9sZShwd2RpbmZvKSwKLQkJCQkgIHJ0d19wMnBfc3RhdGUocHdkaW5mbyksCi0JCQkJICBydHdfcDJwX3ByZV9zdGF0ZShwd2RpbmZvKSk7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQluZXR3b3JrVHlwZSA9IE5kaXM4MDJfMTFBUE1vZGU7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJaWYgKGNoYW5nZSAmJiAhcnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKSB7Ci0JCQkvKiBpdCBtZWFucyBQMlAgR3JvdXAgY3JlYXRlZCwgd2Ugd2lsbCBiZSBHTwotCQkJICAgYW5kIGNoYW5nZSBtb2RlIGZyb20gIFAyUCBERVZJQ0UgdG8gQVAoR08pICovCi0JCQlydHdfcDJwX3NldF9yb2xlKHB3ZGluZm8sIFAyUF9ST0xFX0dPKTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCisJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTQyMSwxMyArMTQxNCwxMyBAQAogCiAJcnR3X3dkZXYtPmlmdHlwZSA9IHR5cGU7CiAKLQlpZiAocnR3X3NldF84MDJfMTFfaW5mcmFzdHJ1Y3R1cmVfbW9kZTIzYShwYWRhcHRlciwgbmV0d29ya1R5cGUpID09IGZhbHNlKSB7CisJaWYgKGNmZzgwMjExX2luZnJhc3RydWN0dXJlX21vZGUocGFkYXB0ZXIsIHR5cGUpICE9IF9TVUNDRVNTKSB7CiAJCXJ0d193ZGV2LT5pZnR5cGUgPSBvbGRfdHlwZTsKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcnR3X3NldG9wbW9kZV9jbWQyM2EocGFkYXB0ZXIsIG5ldHdvcmtUeXBlKTsKKwlydHdfc2V0b3Btb2RlX2NtZDIzYShwYWRhcHRlciwgdHlwZSk7CiAKIGV4aXQ6CiAJcmV0dXJuIHJldDsKQEAgLTE0MzgsOSArMTQzMSw4IEBACiB7CiAJc3Bpbl9sb2NrX2JoKCZwd2Rldl9wcml2LT5zY2FuX3JlcV9sb2NrKTsKIAlpZiAocHdkZXZfcHJpdi0+c2Nhbl9yZXF1ZXN0ICE9IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKIAkJREJHXzg3MjNBKCIlcyB3aXRoIHNjYW4gcmVxXG4iLCBfX2Z1bmNfXyk7Ci0jZW5kaWYKKwogCQlpZiAocHdkZXZfcHJpdi0+c2Nhbl9yZXF1ZXN0LT53aXBoeSAhPQogCQkgICAgcHdkZXZfcHJpdi0+cnR3X3dkZXYtPndpcGh5KQogCQkJREJHXzg3MjNBKCJlcnJvciB3aXBoeSBjb21wYXJlXG4iKTsKQEAgLTE0NDksOSArMTQ0MSw3IEBACiAKIAkJcHdkZXZfcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKIAl9IGVsc2UgewotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQogCQlEQkdfODcyM0EoIiVzIHdpdGhvdXQgc2NhbiByZXFcbiIsIF9fZnVuY19fKTsKLSNlbmRpZgogCX0KIAlzcGluX3VubG9ja19iaCgmcHdkZXZfcHJpdi0+c2Nhbl9yZXFfbG9jayk7CiB9CkBAIC0xNDYzLDEwICsxNDUzLDYgQEAKIAlzdHJ1Y3QgcnR3X3F1ZXVlICpxdWV1ZSA9ICZwbWxtZXByaXYtPnNjYW5uZWRfcXVldWU7CiAJc3RydWN0IHdsYW5fbmV0d29yayAqcG5ldHdvcms7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKLQlEQkdfODcyM0EoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0jZW5kaWYKLQogCXNwaW5fbG9ja19iaCgmcG1sbWVwcml2LT5zY2FubmVkX3F1ZXVlLmxvY2spOwogCiAJcGhlYWQgPSBnZXRfbGlzdF9oZWFkKHF1ZXVlKTsKQEAgLTE0NzgsNyArMTQ2NCw3IEBACiAJCSAgIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIHdoaWNoIHRoaXMgbmV0d29yayBiZWxvbmdzICovCiAJCWlmIChydHdfY2hfc2V0X3NlYXJjaF9jaDIzYQogCQkgICAgKHBhZGFwdGVyLT5tbG1lZXh0cHJpdi5jaGFubmVsX3NldCwKLQkJICAgICBwbmV0d29yay0+bmV0d29yay5Db25maWd1cmF0aW9uLkRTQ29uZmlnKSA+PSAwKQorCQkgICAgIHBuZXR3b3JrLT5uZXR3b3JrLkRTQ29uZmlnKSA+PSAwKQogCQkJcnR3X2NmZzgwMjExX2luZm9ybV9ic3MocGFkYXB0ZXIsIHBuZXR3b3JrKTsKIAl9CiAKQEAgLTE0OTUsOTMgKzE0ODEsMzEgQEAKIAlpbnQgcmV0ID0gMDsKIAl1aW50IHdwc19pZWxlbiA9IDA7CiAJdTggKndwc19pZTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXUzMiBwMnBfaWVsZW4gPSAwOwotCXU4ICpwMnBfaWU7Ci0JdTMyIHdmZF9pZWxlbiA9IDA7Ci0jZW5kaWYKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCiAJREJHXzg3MjNBKCIlcywgaWVsZW4gPSVkXG4iLCBfX2Z1bmNfXywgbGVuKTsKLSNlbmRpZgogCiAJaWYgKGxlbiA+IDApIHsKIAkJd3BzX2llID0gcnR3X2dldF93cHNfaWUyM2EoYnVmLCBsZW4sIE5VTEwsICZ3cHNfaWVsZW4pOwogCQlpZiAod3BzX2llKSB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCiAJCQlEQkdfODcyM0EoInByb2JlX3JlcV93cHNfaWVsZW4gPSVkXG4iLCB3cHNfaWVsZW4pOwotI2VuZGlmCisKIAkJCWlmIChwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWUpIHsKIAkJCQlwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWVfbGVuID0gMDsKIAkJCQlrZnJlZShwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWUpOwogCQkJCXBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSA9IE5VTEw7CiAJCQl9CiAKLQkJCXBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSA9Ci0JCQkJa21hbGxvYyh3cHNfaWVsZW4sIEdGUF9LRVJORUwpOworCQkJcG1sbWVwcml2LT53cHNfcHJvYmVfcmVxX2llID0ga21lbWR1cCh3cHNfaWUsCisJCQkJCQkJICAgICAgd3BzX2llbGVuLAorCQkJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCQkJaWYgKHBtbG1lcHJpdi0+d3BzX3Byb2JlX3JlcV9pZSA9PSBOVUxMKSB7CiAJCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAogCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQltZW1jcHkocG1sbWVwcml2LT53cHNfcHJvYmVfcmVxX2llLCB3cHNfaWUsIHdwc19pZWxlbik7CiAJCQlwbWxtZXByaXYtPndwc19wcm9iZV9yZXFfaWVfbGVuID0gd3BzX2llbGVuOwogCQl9Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJcDJwX2llID0gcnR3X2dldF9wMnBfaWUyM2EoYnVmLCBsZW4sIE5VTEwsICZwMnBfaWVsZW4pOwotCQlpZiAocDJwX2llKSB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCQlEQkdfODcyM0EoInByb2JlX3JlcV9wMnBfaWVsZW4gPSVkXG4iLCBwMnBfaWVsZW4pOwotI2VuZGlmCi0KLQkJCWlmIChwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWUpIHsKLQkJCQlwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWUpOwotCQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3JlcV9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3JlcV9pZSA9Ci0JCQkJa21hbGxvYyhwMnBfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+cDJwX3Byb2JlX3JlcV9pZSA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCX0KLQkJCW1lbWNweShwbWxtZXByaXYtPnAycF9wcm9iZV9yZXFfaWUsIHAycF9pZSwgcDJwX2llbGVuKTsKLQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3JlcV9pZV9sZW4gPSBwMnBfaWVsZW47Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JCS8qIGJ1ZiArPSBwMnBfaWVsZW47ICovCi0JCS8qIGxlbiAtPSBwMnBfaWVsZW47ICovCi0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQlpZiAocnR3X2dldF93ZmRfaWUoYnVmLCBsZW4sIE5VTEwsICZ3ZmRfaWVsZW4pKSB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCQlEQkdfODcyM0EoInByb2JlX3JlcV93ZmRfaWVsZW4gPSVkXG4iLCB3ZmRfaWVsZW4pOwotI2VuZGlmCi0KLQkJCWlmIChwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWUpIHsKLQkJCQlwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWUpOwotCQkJCXBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZSA9Ci0JCQkJa21hbGxvYyh3ZmRfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3JlcV9pZSA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCX0KLQkJCXJ0d19nZXRfd2ZkX2llKGJ1ZiwgbGVuLCBwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWUsCi0JCQkJICAgICAgICZwbWxtZXByaXYtPndmZF9wcm9iZV9yZXFfaWVfbGVuKTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTU5OSwyNSArMTUyMywxNiBAQAogCXN0cnVjdCBydHdfaWVlZTgwMjExX2NoYW5uZWwgY2hbUlRXX0NIQU5ORUxfU0NBTl9BTU9VTlRdOwogCXN0cnVjdCBydHdfd2Rldl9wcml2ICpwd2Rldl9wcml2ID0gd2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2Rldik7CiAJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWRzID0gcmVxdWVzdC0+c3NpZHM7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlzdHJ1Y3Qgd2lmaWRpcmVjdF9pbmZvICpwd2RpbmZvID0gJnBhZGFwdGVyLT53ZGluZm87Ci0JaW50IHNvY2lhbF9jaGFubmVsID0gMDsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwogCWJvb2wgbmVlZF9pbmRpY2F0ZV9zY2FuX2RvbmUgPSBmYWxzZTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQotCURCR184NzIzQShGVU5DX0FEUFRfRk1UICJcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKLSNlbmRpZgorCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2JoKCZwd2Rldl9wcml2LT5zY2FuX3JlcV9sb2NrKTsKIAlwd2Rldl9wcml2LT5zY2FuX3JlcXVlc3QgPSByZXF1ZXN0OwogCXNwaW5fdW5sb2NrX2JoKCZwd2Rldl9wcml2LT5zY2FuX3JlcV9sb2NrKTsKIAogCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BUF9TVEFURSkpIHsKLQotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQogCQlEQkdfODcyM0EoIiVzIHVuZGVyIFdJRklfQVBfU1RBVEVcbiIsIF9fZnVuY19fKTsKLSNlbmRpZgogCQkvKiBuZWVkX2luZGljYXRlX3NjYW5fZG9uZSA9IHRydWU7ICovCiAJCS8qIGdvdG8gY2hlY2tfbmVlZF9pbmRpY2F0ZV9zY2FuX2RvbmU7ICovCiAJfQpAQCAtMTYyNiwyOSArMTU0MSw2IEBACiAJCW5lZWRfaW5kaWNhdGVfc2Nhbl9kb25lID0gdHJ1ZTsKIAkJZ290byBjaGVja19uZWVkX2luZGljYXRlX3NjYW5fZG9uZTsKIAl9Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlpZiAoIW1lbWNtcChzc2lkcy0+c3NpZCwgIkRJUkVDVC0iLCA3KSAmJgotCSAgICBydHdfZ2V0X3AycF9pZTIzYSgodTggKikgcmVxdWVzdC0+aWUsIHJlcXVlc3QtPmllX2xlbiwgTlVMTCwgTlVMTCkpIHsKLQkJaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkgewotCQkJcnR3X3AycF9lbmFibGUyM2EocGFkYXB0ZXIsIFAyUF9ST0xFX0RFVklDRSk7Ci0JCQl3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJcnR3X3AycF9zZXRfcHJlX3N0YXRlKHB3ZGluZm8sIHJ0d19wMnBfc3RhdGUocHdkaW5mbykpOwotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQotCQkJREJHXzg3MjNBKCIlcywgcm9sZSA9JWQsIHAycF9zdGF0ZSA9JWRcbiIsIF9fZnVuY19fLAotCQkJCSAgcnR3X3AycF9yb2xlKHB3ZGluZm8pLAotCQkJCSAgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSk7Ci0jZW5kaWYKLQkJfQotCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfTElTVEVOKTsKLQotCQlpZiAocmVxdWVzdC0+bl9jaGFubmVscyA9PSAzICYmCi0JCSAgICByZXF1ZXN0LT5jaGFubmVsc1swXS0+aHdfdmFsdWUgPT0gMSAmJgotCQkgICAgcmVxdWVzdC0+Y2hhbm5lbHNbMV0tPmh3X3ZhbHVlID09IDYgJiYKLQkJICAgIHJlcXVlc3QtPmNoYW5uZWxzWzJdLT5od192YWx1ZSA9PSAxMSkKLQkJCXNvY2lhbF9jaGFubmVsID0gMTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KIAogCWlmIChyZXF1ZXN0LT5pZSAmJiByZXF1ZXN0LT5pZV9sZW4gPiAwKSB7CiAJCXJ0d19jZmc4MDIxMV9zZXRfcHJvYmVfcmVxX3dwc3AycGllKHBhZGFwdGVyLApAQCAtMTY2Miw4ICsxNTU0LDggQEAKIAkJZ290byBjaGVja19uZWVkX2luZGljYXRlX3NjYW5fZG9uZTsKIAl9CiAJaWYgKHJ0d19pc19zY2FuX2RlbnkocGFkYXB0ZXIpKSB7Ci0JCURCR184NzIzQShGVU5DX0FEUFRfRk1UICI6IHNjYW4gZGVueVxuIiwKLQkJCSAgRlVOQ19BRFBUX0FSRyhwYWRhcHRlcikpOworCQlEQkdfODcyM0EoIiVzKCVzKTogc2NhbiBkZW55XG4iLCBfX2Z1bmNfXywKKwkJCSAgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOwogCQluZWVkX2luZGljYXRlX3NjYW5fZG9uZSA9IHRydWU7CiAJCWdvdG8gY2hlY2tfbmVlZF9pbmRpY2F0ZV9zY2FuX2RvbmU7CiAJfQpAQCAtMTY3NCwyOCArMTU2NiwxMiBAQAogCQluZWVkX2luZGljYXRlX3NjYW5fZG9uZSA9IHRydWU7CiAJCWdvdG8gY2hlY2tfbmVlZF9pbmRpY2F0ZV9zY2FuX2RvbmU7CiAJfQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKCFydHdfcDJwX2Noa19zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfTk9ORSkgJiYKLQkgICAgIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9JRExFKSkgewotCQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBQMlBfU1RBVEVfRklORF9QSEFTRV9TRUFSQ0gpOwotCQlydHdfZnJlZV9uZXR3b3JrX3F1ZXVlMjNhKHBhZGFwdGVyLCB0cnVlKTsKLQotCQlpZiAoc29jaWFsX2NoYW5uZWwgPT0gMCkKLQkJCXJ0d19wMnBfZmluZHBoYXNlX2V4X3NldChwd2RpbmZvLAotCQkJCQkJIFAyUF9GSU5EUEhBU0VfRVhfTk9ORSk7Ci0JCWVsc2UKLQkJCXJ0d19wMnBfZmluZHBoYXNlX2V4X3NldChwd2RpbmZvLAotCQkJCQkJIFAyUF9GSU5EUEhBU0VfRVhfU09DSUFMX0xBU1QpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwogCiAJbWVtc2V0KHNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkgKiBSVFdfU1NJRF9TQ0FOX0FNT1VOVCk7CiAJLyogcGFyc2luZyByZXF1ZXN0IHNzaWRzLCBuX3NzaWRzICovCiAJZm9yIChpID0gMDsgaSA8IHJlcXVlc3QtPm5fc3NpZHMgJiYgaSA8IFJUV19TU0lEX1NDQU5fQU1PVU5UOyBpKyspIHsKLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKIAkJREJHXzg3MjNBKCJzc2lkID0lcywgbGVuID0lZFxuIiwgc3NpZHNbaV0uc3NpZCwKIAkJCSAgc3NpZHNbaV0uc3NpZF9sZW4pOwotI2VuZGlmCiAJCW1lbWNweShzc2lkW2ldLnNzaWQsIHNzaWRzW2ldLnNzaWQsIHNzaWRzW2ldLnNzaWRfbGVuKTsKIAkJc3NpZFtpXS5zc2lkX2xlbiA9IHNzaWRzW2ldLnNzaWRfbGVuOwogCX0KQEAgLTE3MDcsMTEgKzE1ODMsOSBAQAogCWlmIChyZXF1ZXN0LT5uX2NoYW5uZWxzID09IDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IHJlcXVlc3QtPm5fY2hhbm5lbHMgJiYKIAkJICAgICBpIDwgUlRXX0NIQU5ORUxfU0NBTl9BTU9VTlQ7IGkrKykgewotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQotCQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQgQ0hBTl9GTVQgIlxuIiwKLQkJCQkgIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLAorCQkJREJHXzg3MjNBKCIlczooJXMpOiIgQ0hBTl9GTVQgIlxuIiwKKwkJCQkgIF9fZnVuY19fLCBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKIAkJCQkgIENIQU5fQVJHKHJlcXVlc3QtPmNoYW5uZWxzW2ldKSk7Ci0jZW5kaWYKIAkJCWNoW2ldLmh3X3ZhbHVlID0gcmVxdWVzdC0+Y2hhbm5lbHNbaV0tPmh3X3ZhbHVlOwogCQkJY2hbaV0uZmxhZ3MgPSByZXF1ZXN0LT5jaGFubmVsc1tpXS0+ZmxhZ3M7CiAJCX0KQEAgLTE3NDcsMTMgKzE2MjEsMTMgQEAKIHN0YXRpYyBpbnQgY2ZnODAyMTFfcnR3X2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKQogewotCURCR184NzIzQShGVU5DX05ERVZfRk1UICJcbiIsIEZVTkNfTkRFVl9BUkcobmRldikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2ZnODAyMTFfcnR3X2xlYXZlX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCIlcyglcylcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgyMiwzMCArMTY5NiwzMCBAQAogCURCR184NzIzQSgiJXMsIHVjYXN0ID0lZCwgY2lwaGVyID0gMHgleFxuIiwgX19mdW5jX18sIHVjYXN0LCBjaXBoZXIpOwogCiAJaWYgKCFjaXBoZXIpIHsKLQkJKnByb2ZpbGVfY2lwaGVyID0gX05PX1BSSVZBQ1lfOworCQkqcHJvZmlsZV9jaXBoZXIgPSAwOwogCQlwc2VjdXJpdHlwcml2LT5uZGlzZW5jcnlwdHN0YXR1cyA9IG5kaXNlbmNyeXB0c3RhdHVzOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlzd2l0Y2ggKGNpcGhlcikgewogCWNhc2UgSVdfQVVUSF9DSVBIRVJfTk9ORToKLQkJKnByb2ZpbGVfY2lwaGVyID0gX05PX1BSSVZBQ1lfOworCQkqcHJvZmlsZV9jaXBoZXIgPSAwOwogCQluZGlzZW5jcnlwdHN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6Ci0JCSpwcm9maWxlX2NpcGhlciA9IF9XRVA0MF87CisJCSpwcm9maWxlX2NpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOwogCQluZGlzZW5jcnlwdHN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgotCQkqcHJvZmlsZV9jaXBoZXIgPSBfV0VQMTA0XzsKKwkJKnByb2ZpbGVfY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQluZGlzZW5jcnlwdHN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKLQkJKnByb2ZpbGVfY2lwaGVyID0gX1RLSVBfOworCQkqcHJvZmlsZV9jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOwogCQluZGlzZW5jcnlwdHN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKLQkJKnByb2ZpbGVfY2lwaGVyID0gX0FFU187CisJCSpwcm9maWxlX2NpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7CiAJCW5kaXNlbmNyeXB0c3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE4NzcsMTMgKzE3NTEsMTAgQEAKIHN0YXRpYyBpbnQgcnR3X2NmZzgwMjExX3NldF93cGFfaWUoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgY29uc3QgdTggKnBpZSwKIAkJCQkgICBzaXplX3QgaWVsZW4pCiB7Ci0JdTggKmJ1ZiA9IE5VTEwsICpwb3MgPSBOVUxMOworCXU4ICpidWYgPSBOVUxMOwogCWludCBncm91cF9jaXBoZXIgPSAwLCBwYWlyd2lzZV9jaXBoZXIgPSAwOwogCWludCByZXQgPSAwOwotCWludCB3cGFfaWVsZW4gPSAwOwotCWludCB3cGEyX2llbGVuID0gMDsKLQl1OCAqcHdwYSwgKnB3cGEyOwotCXU4IG51bGxfYWRkcltdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisJY29uc3QgdTggKnB3cGEsICpwd3BhMjsKIAlpbnQgaTsKIAogCWlmICghcGllIHx8ICFpZWxlbikgewpAQCAtMTg5NiwxMiArMTc2NywxMSBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQotCWJ1ZiA9IGt6YWxsb2MoaWVsZW4sIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttZW1kdXAocGllLCBpZWxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKIAl9Ci0JbWVtY3B5KGJ1ZiwgcGllLCBpZWxlbik7CiAKIAkvKiBkdW1wICovCiAJREJHXzg3MjNBKCJzZXQgd3BhX2llKGxlbmd0aDolenUpOlxuIiwgaWVsZW4pOwpAQCAtMTkxMCw3ICsxNzgwLDYgQEAKIAkJCSAgYnVmW2ldLCBidWZbaSArIDFdLAogCQkJICBidWZbaSArIDJdLCBidWZbaSArIDNdLCBidWZbaSArIDRdLAogCQkJICBidWZbaSArIDVdLCBidWZbaSArIDZdLCBidWZbaSArIDddKTsKLQlwb3MgPSBidWY7CiAJaWYgKGllbGVuIDwgUlNOX0hFQURFUl9MRU4pIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX29zX2MsIF9kcnZfZXJyXywKIAkJCSAoIkllIGxlbiB0b28gc2hvcnQgJWRcbiIsIChpbnQpaWVsZW4pKTsKQEAgLTE5MTgsMzMgKzE3ODcsMzUgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXB3cGEgPSBydHdfZ2V0X3dwYV9pZTIzYShidWYsICZ3cGFfaWVsZW4sIGllbGVuKTsKLQlpZiAocHdwYSAmJiB3cGFfaWVsZW4gPiAwKSB7Ci0JCWlmIChydHdfcGFyc2Vfd3BhX2llMjNhKHB3cGEsIHdwYV9pZWxlbiArIDIsICZncm91cF9jaXBoZXIsCi0JCQkJICAgICAmcGFpcndpc2VfY2lwaGVyLCBOVUxMKSA9PSBfU1VDQ0VTUykgeworCXB3cGEgPSBjZmc4MDIxMV9maW5kX3ZlbmRvcl9pZShXTEFOX09VSV9NSUNST1NPRlQsCisJCQkJICAgICAgIFdMQU5fT1VJX1RZUEVfTUlDUk9TT0ZUX1dQQSwKKwkJCQkgICAgICAgYnVmLCBpZWxlbik7CisJaWYgKHB3cGEgJiYgcHdwYVsxXSA+IDApIHsKKwkJaWYgKHJ0d19wYXJzZV93cGFfaWUyM2EocHdwYSwgcHdwYVsxXSArIDIsICZncm91cF9jaXBoZXIsCisJCQkJCSZwYWlyd2lzZV9jaXBoZXIsIE5VTEwpID09IF9TVUNDRVNTKSB7CiAJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExQXV0aEFsZ3J0aG0gPQogCQkJCWRvdDExQXV0aEFsZ3J0aG1fODAyMVg7CiAJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2Lm5kaXNhdXRodHlwZSA9CiAJCQkJTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOwotCQkJbWVtY3B5KHBhZGFwdGVyLT5zZWN1cml0eXByaXYuc3VwcGxpY2FudF9pZSwgJnB3cGFbMF0sCi0JCQkgICAgICAgd3BhX2llbGVuICsgMik7CisJCQltZW1jcHkocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5zdXBwbGljYW50X2llLCBwd3BhLAorCQkJICAgICAgIHB3cGFbMV0gKyAyKTsKIAotCQkJREJHXzg3MjNBKCJnb3Qgd3BhX2llLCB3cGFfaWVsZW46JXVcbiIsIHdwYV9pZWxlbik7CisJCQlEQkdfODcyM0EoImdvdCB3cGFfaWUsIHdwYV9pZWxlbjoldVxuIiwgcHdwYVsxXSk7CiAJCX0KIAl9CiAKLQlwd3BhMiA9IHJ0d19nZXRfd3BhMl9pZTIzYShidWYsICZ3cGEyX2llbGVuLCBpZWxlbik7Ci0JaWYgKHB3cGEyICYmIHdwYTJfaWVsZW4gPiAwKSB7Ci0JCWlmIChydHdfcGFyc2Vfd3BhMl9pZTIzYSAocHdwYTIsIHdwYTJfaWVsZW4gKyAyLCAmZ3JvdXBfY2lwaGVyLAotCQkJCSAgICAgICAmcGFpcndpc2VfY2lwaGVyLCBOVUxMKSA9PSBfU1VDQ0VTUykgeworCXB3cGEyID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9SU04sIGJ1ZiwgaWVsZW4pOworCWlmIChwd3BhMiAmJiBwd3BhMlsxXSA+IDApIHsKKwkJaWYgKHJ0d19wYXJzZV93cGEyX2llMjNhIChwd3BhMiwgcHdwYTJbMV0gKyAyLCAmZ3JvdXBfY2lwaGVyLAorCQkJCQkgICZwYWlyd2lzZV9jaXBoZXIsIE5VTEwpID09IF9TVUNDRVNTKSB7CiAJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExQXV0aEFsZ3J0aG0gPQogCQkJCWRvdDExQXV0aEFsZ3J0aG1fODAyMVg7CiAJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2Lm5kaXNhdXRodHlwZSA9CiAJCQkJTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKLQkJCW1lbWNweShwYWRhcHRlci0+c2VjdXJpdHlwcml2LnN1cHBsaWNhbnRfaWUsICZwd3BhMlswXSwKLQkJCSAgICAgICB3cGEyX2llbGVuICsgMik7CisJCQltZW1jcHkocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5zdXBwbGljYW50X2llLCBwd3BhMiwKKwkJCSAgICAgICBwd3BhMlsxXSArIDIpOwogCi0JCQlEQkdfODcyM0EoImdvdCB3cGEyX2llLCB3cGEyX2llbGVuOiV1XG4iLCB3cGEyX2llbGVuKTsKKwkJCURCR184NzIzQSgiZ290IHdwYTJfaWUsIHdwYTJfaWVsZW46JXVcbiIsIHB3cGEyWzFdKTsKIAkJfQogCX0KIApAQCAtMTk1NywyNyArMTgyOCwyNyBAQAogCiAJc3dpdGNoIChncm91cF9jaXBoZXIpIHsKIAljYXNlIFdQQV9DSVBIRVJfTk9ORToKLQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IF9OT19QUklWQUNZXzsKKwkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IDA7CiAJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYubmRpc2VuY3J5cHRzdGF0dXMgPQogCQkJTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKIAkJYnJlYWs7CiAJY2FzZSBXUEFfQ0lQSEVSX1dFUDQwOgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExODAyMVhHcnBQcml2YWN5ID0gX1dFUDQwXzsKKwkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOwogCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2Lm5kaXNlbmNyeXB0c3RhdHVzID0KIAkJCU5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CiAJCWJyZWFrOwogCWNhc2UgV1BBX0NJUEhFUl9US0lQOgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExODAyMVhHcnBQcml2YWN5ID0gX1RLSVBfOworCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExODAyMVhHcnBQcml2YWN5ID0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDsKIAkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5uZGlzZW5jcnlwdHN0YXR1cyA9CiAJCQlOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwogCQlicmVhazsKIAljYXNlIFdQQV9DSVBIRVJfQ0NNUDoKLQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9IF9BRVNfOworCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExODAyMVhHcnBQcml2YWN5ID0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDsKIAkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5uZGlzZW5jcnlwdHN0YXR1cyA9CiAJCQlOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwogCQlicmVhazsKIAljYXNlIFdQQV9DSVBIRVJfV0VQMTA0OgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExODAyMVhHcnBQcml2YWN5ID0gX1dFUDEwNF87CisJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTE4MDIxWEdycFByaXZhY3kgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CiAJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYubmRpc2VuY3J5cHRzdGF0dXMgPQogCQkJTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKIAkJYnJlYWs7CkBAIC0xOTg1LDI3ICsxODU2LDI3IEBACiAKIAlzd2l0Y2ggKHBhaXJ3aXNlX2NpcGhlcikgewogCWNhc2UgV1BBX0NJUEhFUl9OT05FOgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfTk9fUFJJVkFDWV87CisJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9IDA7CiAJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYubmRpc2VuY3J5cHRzdGF0dXMgPQogCQkJTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKIAkJYnJlYWs7CiAJY2FzZSBXUEFfQ0lQSEVSX1dFUDQwOgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfV0VQNDBfOworCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKIAkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5uZGlzZW5jcnlwdHN0YXR1cyA9CiAJCQlOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogCQlicmVhazsKIAljYXNlIFdQQV9DSVBIRVJfVEtJUDoKLQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID0gX1RLSVBfOworCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOwogCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2Lm5kaXNlbmNyeXB0c3RhdHVzID0KIAkJCU5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CiAJCWJyZWFrOwogCWNhc2UgV1BBX0NJUEhFUl9DQ01QOgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfQUVTXzsKKwkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDsKIAkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5uZGlzZW5jcnlwdHN0YXR1cyA9CiAJCQlOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwogCQlicmVhazsKIAljYXNlIFdQQV9DSVBIRVJfV0VQMTA0OgotCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfV0VQMTA0XzsKKwkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2Lm5kaXNlbmNyeXB0c3RhdHVzID0KIAkJCU5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CiAJCWJyZWFrOwpAQCAtMjAyOSw3NSArMTkwMCwxNCBAQAogCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl7CQkJLyogY2hlY2sgcDJwX2llIGZvciBhc3NvYyByZXE7ICovCi0JCXVpbnQgcDJwX2llbGVuID0gMDsKLQkJdTggKnAycF9pZTsKLQkJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQotCQlwMnBfaWUgPSBydHdfZ2V0X3AycF9pZTIzYShidWYsIGllbGVuLCBOVUxMLCAmcDJwX2llbGVuKTsKLQkJaWYgKHAycF9pZSkgewotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQotCQkJREJHXzg3MjNBKCIlcyBwMnBfYXNzb2NfcmVxX2llbGVuID0lZFxuIiwgX19mdW5jX18sCi0JCQkJICBwMnBfaWVsZW4pOwotI2VuZGlmCi0KLQkJCWlmIChwbWxtZXByaXYtPnAycF9hc3NvY19yZXFfaWUpIHsKLQkJCQlwbWxtZXByaXYtPnAycF9hc3NvY19yZXFfaWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPnAycF9hc3NvY19yZXFfaWUpOwotCQkJCXBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZSA9Ci0JCQkJa21hbGxvYyhwMnBfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZSA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJZ290byBleGl0OwotCQkJfQotCQkJbWVtY3B5KHBtbG1lcHJpdi0+cDJwX2Fzc29jX3JlcV9pZSwgcDJwX2llLCBwMnBfaWVsZW4pOwotCQkJcG1sbWVwcml2LT5wMnBfYXNzb2NfcmVxX2llX2xlbiA9IHAycF9pZWxlbjsKLQkJfQotCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl7CQkJLyogY2hlY2sgd2ZkX2llIGZvciBhc3NvYyByZXE7ICovCi0JCXVpbnQgd2ZkX2llbGVuID0gMDsKLQkJc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQotCQlpZiAocnR3X2dldF93ZmRfaWUoYnVmLCBpZWxlbiwgTlVMTCwgJndmZF9pZWxlbikpIHsKLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKLQkJCURCR184NzIzQSgiJXMgd2ZkX2Fzc29jX3JlcV9pZWxlbiA9JWRcbiIsIF9fZnVuY19fLAotCQkJCSAgd2ZkX2llbGVuKTsKLSNlbmRpZgotCi0JCQlpZiAocG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llKSB7Ci0JCQkJcG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llX2xlbiA9IDA7Ci0JCQkJa2ZyZWUocG1sbWVwcml2LT53ZmRfYXNzb2NfcmVxX2llKTsKLQkJCQlwbWxtZXByaXYtPndmZF9hc3NvY19yZXFfaWUgPSBOVUxMOwotCQkJfQotCi0JCQlwbWxtZXByaXYtPndmZF9hc3NvY19yZXFfaWUgPQotCQkJCWttYWxsb2Mod2ZkX2llbGVuLCBHRlBfS0VSTkVMKTsKLQkJCWlmIChwbWxtZXByaXYtPndmZF9hc3NvY19yZXFfaWUgPT0gTlVMTCkgewotCQkJCURCR184NzIzQSgiJXMoKS0lZDoga21hbGxvYygpIEVSUk9SIVxuIiwKLQkJCQkJICBfX2Z1bmNfXywgX19MSU5FX18pOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJCXJ0d19nZXRfd2ZkX2llKGJ1ZiwgaWVsZW4sIHBtbG1lcHJpdi0+d2ZkX2Fzc29jX3JlcV9pZSwKLQkJCQkgICAgICAgJnBtbG1lcHJpdi0+d2ZkX2Fzc29jX3JlcV9pZV9sZW4pOwotCQl9Ci0JfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KIAkvKiBUS0lQIGFuZCBBRVMgZGlzYWxsb3cgbXVsdGljYXN0IHBhY2tldHMgdW50aWwgaW5zdGFsbGluZyBncm91cCBrZXkgKi8KLQlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09IF9US0lQXyB8fAotCSAgICBwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExUHJpdmFjeUFsZ3J0aG0gPT0gX1RLSVBfV1RNSUNfIHx8Ci0JICAgIHBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9PSBfQUVTXykKKwlpZiAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09CisJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwKKwkgICAgcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID09CisJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVApCiAJCS8qIFdQUyBvcGVuIG5lZWQgdG8gZW5hYmxlIG11bHRpY2FzdCAqLwogCQkvKiBjaGVja19md3N0YXRlKCZwYWRhcHRlci0+bWxtZXByaXYsIFdJRklfVU5ERVJfV1BTKSA9PSB0cnVlKSovCi0JCXJ0d19oYWxfc2V0X2h3cmVnMjNhKHBhZGFwdGVyLCBIV19WQVJfT0ZGX1JDUl9BTSwgbnVsbF9hZGRyKTsKKwkJcnRsODcyM2Ffb2ZmX3Jjcl9hbShwYWRhcHRlcik7CiAKIAlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfb3NfYywgX2Rydl9pbmZvXywKIAkJICgicnR3X3NldF93cGFfaWU6IHBhaXJ3aXNlX2NpcGhlciA9IDB4JTA4eCBwYWRhcHRlci0+IgpAQCAtMjExMyw2ICsxOTIzLDcwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBydHdfY2ZnODAyMTFfYWRkX3dlcChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAorCQkJCXN0cnVjdCBydHdfd2VwX2tleSAqd2VwLCB1OCBrZXlpZCkKK3sKKwlpbnQgcmVzOworCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7CisKKwlpZiAoa2V5aWQgPj0gTlVNX1dFUF9LRVlTKSB7CisJCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9pb2N0bF9zZXRfY18sIF9kcnZfZXJyXywKKwkJCSAoIiVzOmtleWlkPjQgPT5mYWlsXG4iLCBfX2Z1bmNfXykpOworCQlyZXMgPSBfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCXN3aXRjaCAod2VwLT5rZXlsZW4pIHsKKwljYXNlIDU6CisJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKKwkJCSAoIiVzOndlcC0+S2V5TGVuZ3RoID0gNVxuIiwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJY2FzZSAxMzoKKwkJcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwkJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKKwkJCSAoIiVzOndlcC0+S2V5TGVuZ3RoID0gMTNcbiIsIF9fZnVuY19fKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSAwOworCQlSVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfaW9jdGxfc2V0X2NfLCBfZHJ2X2luZm9fLAorCQkJICgiJXM6d2VwLT5LZXlMZW5ndGghPSA1IG9yIDEzXG4iLCBfX2Z1bmNfXykpOworCQlyZXMgPSBfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCVJUX1RSQUNFKF9tb2R1bGVfcnRsODcxeF9pb2N0bF9zZXRfY18sIF9kcnZfaW5mb18sCisJCSAoIiVzOmJlZm9yZSBtZW1jcHksIHdlcC0+S2V5TGVuZ3RoID0gMHgleCBrZXlpZCA9JXhcbiIsCisJCSAgX19mdW5jX18sIHdlcC0+a2V5bGVuLCBrZXlpZCkpOworCisJbWVtY3B5KCZwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleWlkXSwgd2VwLCBzaXplb2Yoc3RydWN0IHJ0d193ZXBfa2V5KSk7CisKKwlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lLZXlJbmRleCA9IGtleWlkOworCisJUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X2lvY3RsX3NldF9jXywgX2Rydl9pbmZvXywKKwkJICgiJXM6c2VjdXJpdHkga2V5IG1hdGVyaWFsIDogIgorCQkgICIleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleFxuIiwgX19mdW5jX18sCisJCSAgcHNlY3VyaXR5cHJpdi0+d2VwX2tleVtrZXlpZF0ua2V5WzBdLAorCQkgIHBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aWRdLmtleVsxXSwKKwkJICBwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleWlkXS5rZXlbMl0sCisJCSAgcHNlY3VyaXR5cHJpdi0+d2VwX2tleVtrZXlpZF0ua2V5WzNdLAorCQkgIHBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aWRdLmtleVs0XSwKKwkJICBwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleWlkXS5rZXlbNV0sCisJCSAgcHNlY3VyaXR5cHJpdi0+d2VwX2tleVtrZXlpZF0ua2V5WzZdLAorCQkgIHBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aWRdLmtleVs3XSwKKwkJICBwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleWlkXS5rZXlbOF0sCisJCSAgcHNlY3VyaXR5cHJpdi0+d2VwX2tleVtrZXlpZF0ua2V5WzldLAorCQkgIHBzZWN1cml0eXByaXYtPndlcF9rZXlba2V5aWRdLmtleVsxMF0sCisJCSAgcHNlY3VyaXR5cHJpdi0+d2VwX2tleVtrZXlpZF0ua2V5WzExXSwKKwkJICBwc2VjdXJpdHlwcml2LT53ZXBfa2V5W2tleWlkXS5rZXlbMTJdKSk7CisKKwlyZXMgPSBydHdfc2V0X2tleTIzYShwYWRhcHRlciwgcHNlY3VyaXR5cHJpdiwga2V5aWQsIDEpOworCitleGl0OgorCisJcmV0dXJuIHJlczsKK30KKwogc3RhdGljIGludCBjZmc4MDIxMV9ydHdfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCQlzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIHsKQEAgLTIxMzMsMTYgKzIwMDcsMTAgQEAKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwogCXN0cnVjdCBydHdfcXVldWUgKnF1ZXVlID0gJnBtbG1lcHJpdi0+c2Nhbm5lZF9xdWV1ZTsKIAotCURCR184NzIzQSgiPT4iIEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCI9PiIgIiVzKCVzKVxuIiwgX19mdW5jX18sIG5kZXYtPm5hbWUpOwogCURCR184NzIzQSgicHJpdmFjeSA9JWQsIGtleSA9JXAsIGtleV9sZW4gPSVkLCBrZXlfaWR4ID0lZFxuIiwKIAkJICBzbWUtPnByaXZhY3ksIHNtZS0+a2V5LCBzbWUtPmtleV9sZW4sIHNtZS0+a2V5X2lkeCk7CiAKLQlpZiAod2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiktPmJsb2NrKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJREJHXzg3MjNBKCIlcyB3ZGV2X3ByaXYuYmxvY2sgaXMgc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KIAlpZiAoX0ZBSUwgPT0gcnR3X3B3cl93YWtldXAocGFkYXB0ZXIpKSB7CiAJCXJldCA9IC1FUEVSTTsKIAkJZ290byBleGl0OwpAQCAtMjE5Myw4ICsyMDYxLDggQEAKIAkJZHN0X2Jzc2lkID0gcG5ldHdvcmstPm5ldHdvcmsuTWFjQWRkcmVzczsKIAogCQlpZiAoc21lLT5ic3NpZCkgewotCQkJaWYgKG1lbWNtcChwbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzLAotCQkJCSAgIHNtZS0+YnNzaWQsIEVUSF9BTEVOKSkKKwkJCWlmICghZXRoZXJfYWRkcl9lcXVhbChwbmV0d29yay0+bmV0d29yay5NYWNBZGRyZXNzLAorCQkJCQkgICAgICBzbWUtPmJzc2lkKSkKIAkJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMjA4LDcgKzIwNzYsNyBAQAogCQlpZiAoc21lLT5ic3NpZCkgewogCQkJc3JjX2Jzc2lkID0gc21lLT5ic3NpZDsKIAotCQkJaWYgKCghbWVtY21wKGRzdF9ic3NpZCwgc3JjX2Jzc2lkLCBFVEhfQUxFTikpKSB7CisJCQlpZiAoZXRoZXJfYWRkcl9lcXVhbChkc3RfYnNzaWQsIHNyY19ic3NpZCkpIHsKIAkJCQlEQkdfODcyM0EoIm1hdGNoZWQgYnkgYnNzaWRcbiIpOwogCiAJCQkJbmRpc19zc2lkLnNzaWRfbGVuID0KQEAgLTIyNDIsMTUgKzIxMTAsMTUgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWlmIChydHdfc2V0XzgwMl8xMV9pbmZyYXN0cnVjdHVyZV9tb2RlMjNhCi0JICAgIChwYWRhcHRlciwgcG5ldHdvcmstPm5ldHdvcmsuSW5mcmFzdHJ1Y3R1cmVNb2RlKSA9PSBmYWxzZSkgeworCWlmIChjZmc4MDIxMV9pbmZyYXN0cnVjdHVyZV9tb2RlKAorCQkgICAgcGFkYXB0ZXIsIHBuZXR3b3JrLT5uZXR3b3JrLmlmbW9kZSkgIT0gX1NVQ0NFU1MpIHsKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJcHNlY3VyaXR5cHJpdi0+bmRpc2VuY3J5cHRzdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfTk9fUFJJVkFDWV87Ci0JcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBfTk9fUFJJVkFDWV87CisJcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9IDA7CisJcHNlY3VyaXR5cHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSAwOwogCXBzZWN1cml0eXByaXYtPmRvdDExQXV0aEFsZ3J0aG0gPSBkb3QxMUF1dGhBbGdydGhtX09wZW47CiAJcHNlY3VyaXR5cHJpdi0+bmRpc2F1dGh0eXBlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKIApAQCAtMjI4Myw1OCArMjE1MSw0MiBAQAogCWlmICgocHNlY3VyaXR5cHJpdi0+ZG90MTFBdXRoQWxncnRobSA9PSBkb3QxMUF1dGhBbGdydGhtX1NoYXJlZCB8fAogCSAgICAgcHNlY3VyaXR5cHJpdi0+ZG90MTFBdXRoQWxncnRobSA9PSBkb3QxMUF1dGhBbGdydGhtX0F1dG8pICYmCiAJICAgIHNtZS0+a2V5KSB7Ci0JCXUzMiB3ZXBfa2V5X2lkeCwgd2VwX2tleV9sZW4sIHdlcF90b3RhbF9sZW47Ci0JCXN0cnVjdCBuZGlzXzgwMl8xMV93ZXAgKnB3ZXAgPSBOVUxMOworCQlzdHJ1Y3QgcnR3X3dlcF9rZXkgd2VwX2tleTsKKwkJdTggd2VwX2tleV9pZHgsIHdlcF9rZXlfbGVuOwogCQlEQkdfODcyM0EoIiVzKCk6IFNoYXJlZC9BdXRvIFdFUFxuIiwgX19mdW5jX18pOwogCiAJCXdlcF9rZXlfaWR4ID0gc21lLT5rZXlfaWR4OwogCQl3ZXBfa2V5X2xlbiA9IHNtZS0+a2V5X2xlbjsKIAotCQlpZiAoc21lLT5rZXlfaWR4ID4gV0VQX0tFWVMpIHsKKwkJaWYgKHdlcF9rZXlfaWR4ID4gV0VQX0tFWVMgfHwgIXdlcF9rZXlfbGVuIHx8CisJCSAgICB3ZXBfa2V5X2xlbiA+IFdMQU5fS0VZX0xFTl9XRVAxMDQpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAotCQlpZiAod2VwX2tleV9sZW4gPiAwKSB7Ci0JCQl3ZXBfa2V5X2xlbiA9IHdlcF9rZXlfbGVuIDw9IDUgPyA1IDogMTM7Ci0JCQl3ZXBfdG90YWxfbGVuID0KLQkJCQl3ZXBfa2V5X2xlbiArCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IG5kaXNfODAyXzExX3dlcCwgS2V5TWF0ZXJpYWwpOwotCQkJcHdlcCA9IChzdHJ1Y3QgbmRpc184MDJfMTFfd2VwICopa21hbGxvYyh3ZXBfdG90YWxfbGVuLAotCQkJCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAocHdlcCA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIgd3BhX3NldF9lbmNyeXB0aW9uOiBwd2VwICIKLQkJCQkJICAiYWxsb2NhdGUgZmFpbCAhISFcbiIpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBleGl0OwotCQkJfQorCQl3ZXBfa2V5X2xlbiA9IHdlcF9rZXlfbGVuIDw9IDUgPyA1IDogMTM7CiAKLQkJCW1lbXNldChwd2VwLCAwLCB3ZXBfdG90YWxfbGVuKTsKKwkJbWVtc2V0KCZ3ZXBfa2V5LCAwLCBzaXplb2Yoc3RydWN0IHJ0d193ZXBfa2V5KSk7CiAKLQkJCXB3ZXAtPktleUxlbmd0aCA9IHdlcF9rZXlfbGVuOwotCQkJcHdlcC0+TGVuZ3RoID0gd2VwX3RvdGFsX2xlbjsKKwkJd2VwX2tleS5rZXlsZW4gPSB3ZXBfa2V5X2xlbjsKIAotCQkJaWYgKHdlcF9rZXlfbGVuID09IDEzKSB7Ci0JCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMVByaXZhY3lBbGdydGhtID0KLQkJCQkgICAgX1dFUDEwNF87Ci0JCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9Ci0JCQkJICAgIF9XRVAxMDRfOwotCQkJfQorCQlpZiAod2VwX2tleV9sZW4gPT0gMTMpIHsKKwkJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9CisJCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OworCQkJcGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5kb3QxMTgwMjFYR3JwUHJpdmFjeSA9CisJCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQl9IGVsc2UgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXhpdDsKKwkJCXBhZGFwdGVyLT5zZWN1cml0eXByaXYuZG90MTFQcml2YWN5QWxncnRobSA9CisJCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCQlwYWRhcHRlci0+c2VjdXJpdHlwcml2LmRvdDExODAyMVhHcnBQcml2YWN5ID0KKwkJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKIAkJfQogCi0JCXB3ZXAtPktleUluZGV4ID0gd2VwX2tleV9pZHg7Ci0JCXB3ZXAtPktleUluZGV4IHw9IDB4ODAwMDAwMDA7CisJCW1lbWNweSh3ZXBfa2V5LmtleSwgKHZvaWQgKilzbWUtPmtleSwgd2VwX2tleS5rZXlsZW4pOwogCi0JCW1lbWNweShwd2VwLT5LZXlNYXRlcmlhbCwgKHZvaWQgKilzbWUtPmtleSwgcHdlcC0+S2V5TGVuZ3RoKTsKLQotCQlpZiAocnR3X3NldF84MDJfMTFfYWRkX3dlcDIzYShwYWRhcHRlciwgcHdlcCkgPT0gKHU4KSBfRkFJTCkgeworCQlpZiAocnR3X2NmZzgwMjExX2FkZF93ZXAocGFkYXB0ZXIsICZ3ZXBfa2V5LCB3ZXBfa2V5X2lkeCkgIT0KKwkJICAgIF9TVUNDRVNTKQogCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCX0KLQotCQlrZnJlZShwd2VwKTsKIAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXhpdDsKQEAgLTIzODAsNyArMjIzMiw3IEBACiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHdpcGh5X3RvX2FkYXB0ZXIod2lwaHkpOwogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCIlcyglcylcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKIAogCXJ0d19zZXRfcm9hbWluZyhwYWRhcHRlciwgMCk7CiAKQEAgLTI0MzAsOCArMjI4Miw4IEBACiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHdpcGh5X3RvX2FkYXB0ZXIod2lwaHkpOwogCXN0cnVjdCBydHdfd2Rldl9wcml2ICpydHdfd2Rldl9wcml2ID0gd2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2Rldik7CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiIGVuYWJsZWQ6JXUsIHRpbWVvdXQ6JWRcbiIsCi0JCSAgRlVOQ19OREVWX0FSRyhuZGV2KSwgZW5hYmxlZCwgdGltZW91dCk7CisJREJHXzg3MjNBKCIlcyglcyk6IGVuYWJsZWQ6JXUsIHRpbWVvdXQ6JWRcbiIsCisJCSAgX19mdW5jX18sIG5kZXYtPm5hbWUsIGVuYWJsZWQsIHRpbWVvdXQpOwogCiAJcnR3X3dkZXZfcHJpdi0+cG93ZXJfbWdtdCA9IGVuYWJsZWQ7CiAKQEAgLTI0NDgsMjUgKzIzMDAsMjIgQEAKIAl1OCBpbmRleCwgYmxJbnNlcnRlZCA9IGZhbHNlOwogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSB3aXBoeV90b19hZGFwdGVyKHdpcGh5KTsKIAlzdHJ1Y3Qgc2VjdXJpdHlfcHJpdiAqcHNlY3VyaXR5cHJpdiA9ICZwYWRhcHRlci0+c2VjdXJpdHlwcml2OwotCXU4IHN0clplcm9NYWNBZGRyZXNzW0VUSF9BTEVOXSA9IHsgMHgwMCB9OwogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZXRkZXYpKTsKKwlEQkdfODcyM0EoIiVzKCVzKVxuIiwgX19mdW5jX18sIG5ldGRldi0+bmFtZSk7CiAKLQlpZiAoIW1lbWNtcChwbWtzYS0+YnNzaWQsIHN0clplcm9NYWNBZGRyZXNzLCBFVEhfQUxFTikpIHsKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKHBta3NhLT5ic3NpZCkpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWJsSW5zZXJ0ZWQgPSBmYWxzZTsKIAogCS8qIG92ZXJ3cml0ZSBQTUtJRCAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9QTUtJRF9DQUNIRTsgaW5kZXgrKykgewotCQlpZiAoIW1lbWNtcChwc2VjdXJpdHlwcml2LT5QTUtJRExpc3RbaW5kZXhdLkJzc2lkLAotCQkJICAgIHBta3NhLT5ic3NpZCwgRVRIX0FMRU4pKSB7CisJCWlmIChldGhlcl9hZGRyX2VxdWFsKHBzZWN1cml0eXByaXYtPlBNS0lETGlzdFtpbmRleF0uQnNzaWQsCisJCQkJICAgICBwbWtzYS0+YnNzaWQpKSB7CiAJCQkvKiBCU1NJRCBpcyBtYXRjaGVkLCB0aGUgc2FtZSBBUCA9PiByZXdyaXRlIHdpdGgKIAkJCSAgIG5ldyBQTUtJRC4gKi8KLQkJCURCR184NzIzQShGVU5DX05ERVZfRk1UCi0JCQkJICAiIEJTU0lEIGV4aXN0cyBpbiB0aGUgUE1LTGlzdC5cbiIsCi0JCQkJICBGVU5DX05ERVZfQVJHKG5ldGRldikpOworCQkJREJHXzg3MjNBKCIlcyglcyk6ICBCU1NJRCBleGlzdHMgaW4gdGhlIFBNS0xpc3QuXG4iLAorCQkJCSAgX19mdW5jX18sIG5ldGRldi0+bmFtZSk7CiAKIAkJCW1lbWNweShwc2VjdXJpdHlwcml2LT5QTUtJRExpc3RbaW5kZXhdLlBNS0lELAogCQkJICAgICAgIHBta3NhLT5wbWtpZCwgV0xBTl9QTUtJRF9MRU4pOwpAQCAtMjQ3OSwxMiArMjMyOCwxMiBAQAogCiAJaWYgKCFibEluc2VydGVkKSB7CiAJCS8qICBGaW5kIGEgbmV3IGVudHJ5ICovCi0JCURCR184NzIzQShGVU5DX05ERVZfRk1UCi0JCQkgICIgVXNlIHRoZSBuZXcgZW50cnkgaW5kZXggPSAlZCBmb3IgdGhpcyBQTUtJRC5cbiIsCi0JCQkgIEZVTkNfTkRFVl9BUkcobmV0ZGV2KSwgcHNlY3VyaXR5cHJpdi0+UE1LSURJbmRleCk7CisJCURCR184NzIzQSgiJXMoJXMpOiBVc2UgbmV3IGVudHJ5IGluZGV4ID0gJWQgZm9yIHRoaXMgUE1LSURcbiIsCisJCQkgIF9fZnVuY19fLCBuZXRkZXYtPm5hbWUsIHBzZWN1cml0eXByaXYtPlBNS0lESW5kZXgpOwogCi0JCW1lbWNweShwc2VjdXJpdHlwcml2LT5QTUtJRExpc3RbcHNlY3VyaXR5cHJpdi0+UE1LSURJbmRleF0uCi0JCSAgICAgICBCc3NpZCwgcG1rc2EtPmJzc2lkLCBFVEhfQUxFTik7CisJCWV0aGVyX2FkZHJfY29weSgKKwkJCXBzZWN1cml0eXByaXYtPlBNS0lETGlzdFtwc2VjdXJpdHlwcml2LT5QTUtJREluZGV4XS4KKwkJCUJzc2lkLCBwbWtzYS0+YnNzaWQpOwogCQltZW1jcHkocHNlY3VyaXR5cHJpdi0+UE1LSURMaXN0W3BzZWN1cml0eXByaXYtPlBNS0lESW5kZXhdLgogCQkgICAgICAgUE1LSUQsIHBta3NhLT5wbWtpZCwgV0xBTl9QTUtJRF9MRU4pOwogCkBAIC0yNTA3LDE0ICsyMzU2LDE0IEBACiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHdpcGh5X3RvX2FkYXB0ZXIod2lwaHkpOwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiXG4iLCBGVU5DX05ERVZfQVJHKG5ldGRldikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lKTsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9QTUtJRF9DQUNIRTsgaW5kZXgrKykgewotCQlpZiAoIW1lbWNtcChwc2VjdXJpdHlwcml2LT5QTUtJRExpc3RbaW5kZXhdLkJzc2lkLAotCQkJICAgIHBta3NhLT5ic3NpZCwgRVRIX0FMRU4pKSB7Ci0JCQkvKiBCU1NJRCBpcyBtYXRjaGVkLCB0aGUgc2FtZSBBUCA9PiBSZW1vdmUgdGhpcyBQTUtJRCBpbmZvcm1hdGlvbiBhbmQgcmVzZXQgaXQuICovCi0JCQltZW1zZXQocHNlY3VyaXR5cHJpdi0+UE1LSURMaXN0W2luZGV4XS5Cc3NpZCwgMHgwMCwKLQkJCSAgICAgICBFVEhfQUxFTik7CisJCWlmIChldGhlcl9hZGRyX2VxdWFsKHBzZWN1cml0eXByaXYtPlBNS0lETGlzdFtpbmRleF0uQnNzaWQsCisJCQkJICAgICBwbWtzYS0+YnNzaWQpKSB7CisJCQkvKiBCU1NJRCBpcyBtYXRjaGVkLCB0aGUgc2FtZSBBUCA9PiBSZW1vdmUgdGhpcyBQTUtJRAorCQkJICAgaW5mb3JtYXRpb24gYW5kIHJlc2V0IGl0LiAqLworCQkJZXRoX3plcm9fYWRkcihwc2VjdXJpdHlwcml2LT5QTUtJRExpc3RbaW5kZXhdLkJzc2lkKTsKIAkJCW1lbXNldChwc2VjdXJpdHlwcml2LT5QTUtJRExpc3RbaW5kZXhdLlBNS0lELCAweDAwLAogCQkJICAgICAgIFdMQU5fUE1LSURfTEVOKTsKIAkJCXBzZWN1cml0eXByaXYtPlBNS0lETGlzdFtpbmRleF0uYlVzZWQgPSBmYWxzZTsKQEAgLTI1MjQsOCArMjM3Myw4IEBACiAJfQogCiAJaWYgKGZhbHNlID09IGJNYXRjaGVkKSB7Ci0JCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgZG8gbm90IGhhdmUgbWF0Y2hlZCBCU1NJRFxuIiwKLQkJCSAgRlVOQ19OREVWX0FSRyhuZXRkZXYpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IGRvIG5vdCBoYXZlIG1hdGNoZWQgQlNTSURcbiIsIF9fZnVuY19fLAorCQkJICBuZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI1MzgsNyArMjM4Nyw3IEBACiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHdpcGh5X3RvX2FkYXB0ZXIod2lwaHkpOwogCXN0cnVjdCBzZWN1cml0eV9wcml2ICpwc2VjdXJpdHlwcml2ID0gJnBhZGFwdGVyLT5zZWN1cml0eXByaXY7CiAKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiXG4iLCBGVU5DX05ERVZfQVJHKG5ldGRldikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lKTsKIAogCW1lbXNldCgmcHNlY3VyaXR5cHJpdi0+UE1LSURMaXN0WzBdLCAweDAwLAogCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Bta2lkX2xpc3QpICogTlVNX1BNS0lEX0NBQ0hFKTsKQEAgLTI1ODMsOCArMjQzMiw4IEBACiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koY2hhbm5lbCwKIAkJCQkJCSAgICAgIElFRUU4MDIxMV9CQU5EXzVHSFopOwogCi0JcnR3X2NmZzgwMjExX3J4X21nbXQocGFkYXB0ZXIsIGZyZXEsIDAsIHBtZ210X2ZyYW1lLCBmcmFtZV9sZW4sCi0JCQkgICAgIEdGUF9BVE9NSUMpOworCWNmZzgwMjExX3J4X21nbXQocGFkYXB0ZXItPnJ0d193ZGV2LCBmcmVxLCAwLCBwbWdtdF9mcmFtZSwgZnJhbWVfbGVuLAorCQkJIDAsIEdGUF9BVE9NSUMpOwogI2VuZGlmIC8qIGRlZmluZWQoUlRXX1VTRV9DRkc4MDIxMV9TVEFfRVZFTlQpICovCiB9CiAKQEAgLTI1OTcsMTQgKzI0NDYsMTUgQEAKIAl1OCAqcG1nbXRfZnJhbWU7CiAJdWludCBmcmFtZV9sZW47CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwotCXVuc2lnbmVkIHNob3J0ICpmY3RybDsKLQl1OCBtZ210X2J1ZlsxMjhdID0geyAwIH07CisJdTggbWdtdF9idWZbMTI4XTsKIAlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwogCXN0cnVjdCBtbG1lX2V4dF9pbmZvICpwbWxtZWluZm8gPSAmcG1sbWVleHQtPm1sbWV4dF9pbmZvOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGFkYXB0ZXItPnBuZXRkZXY7CiAKIAlEQkdfODcyM0EoIiVzKHBhZGFwdGVyID0lcCwlcylcbiIsIF9fZnVuY19fLCBwYWRhcHRlciwgbmRldi0+bmFtZSk7CiAKKwltZW1zZXQobWdtdF9idWYsIDAsIDEyOCk7CisKICNpZiBkZWZpbmVkKFJUV19VU0VfQ0ZHODAyMTFfU1RBX0VWRU5UKQogCWNmZzgwMjExX2RlbF9zdGEobmRldiwgZGEsIEdGUF9BVE9NSUMpOwogI2Vsc2UgLyogZGVmaW5lZChSVFdfVVNFX0NGRzgwMjExX1NUQV9FVkVOVCkgKi8KQEAgLTI2MTksMTYgKzI0NjksMTYgQEAKIAlwbWdtdF9mcmFtZSA9IG1nbXRfYnVmOwogCXB3bGFuaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcG1nbXRfZnJhbWU7CiAKLQlmY3RybCA9ICZwd2xhbmhkci0+ZnJhbWVfY29udHJvbDsKLQkqKGZjdHJsKSA9IDA7CisJcHdsYW5oZHItPmZyYW1lX2NvbnRyb2wgPQorCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOwogCi0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMSwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMiwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkocHdsYW5oZHItPmFkZHIzLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yayksIEVUSF9BTEVOKTsKKwlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIxLCBteWlkKCZwYWRhcHRlci0+ZWVwcm9tcHJpdikpOworCWV0aGVyX2FkZHJfY29weShwd2xhbmhkci0+YWRkcjIsIGRhKTsKKwlldGhlcl9hZGRyX2NvcHkocHdsYW5oZHItPmFkZHIzLCBnZXRfbXlfYnNzaWQyM2EoJnBtbG1laW5mby0+bmV0d29yaykpOwogCi0JU2V0U2VxTnVtKHB3bGFuaGRyLCBwbWxtZWV4dC0+bWdudF9zZXEpOworCXB3bGFuaGRyLT5zZXFfY3RybCA9CisJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TTl9UT19TRVEocG1sbWVleHQtPm1nbnRfc2VxKSk7CiAJcG1sbWVleHQtPm1nbnRfc2VxKys7Ci0JU2V0RnJhbWVTdWJUeXBlKHBtZ210X2ZyYW1lLCBXSUZJX0RFQVVUSCk7CiAKIAlwbWdtdF9mcmFtZSArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogCWZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CkBAIC0yNjM4LDggKzI0ODgsOCBAQAogCQkJCSAgICAgICBXTEFOX1JFQVNPTl9QUkVWX0FVVEhfTk9UX1ZBTElELAogCQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSZyZWFzb24sICZmcmFtZV9sZW4pOwogCi0JcnR3X2NmZzgwMjExX3J4X21nbXQocGFkYXB0ZXIsIGZyZXEsIDAsIG1nbXRfYnVmLCBmcmFtZV9sZW4sCi0JCQkgICAgIEdGUF9BVE9NSUMpOworCWNmZzgwMjExX3J4X21nbXQocGFkYXB0ZXItPnJ0d193ZGV2LCBmcmVxLCAwLCBtZ210X2J1ZiwgZnJhbWVfbGVuLAorCQkJIDAsIEdGUF9BVE9NSUMpOwogI2VuZGlmIC8qIGRlZmluZWQoUlRXX1VTRV9DRkc4MDIxMV9TVEFfRVZFTlQpICovCiB9CiAKQEAgLTI2NzYsNyArMjUyNiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0YXBfaGRyOwogCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCURCR184NzIzQShGVU5DX05ERVZfRk1UICJcbiIsIEZVTkNfTkRFVl9BUkcobmRldikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIpKSkKIAkJZ290byBmYWlsOwpAQCAtMjcxOCw4ICsyNTY4LDggQEAKIAkJc2tiX3B1bGwoc2tiLCBkb3QxMV9oZHJfbGVuICsgcW9zX2xlbiArIHNuYXBfbGVuIC0KIAkJCSBFVEhfQUxFTiAqIDIpOwogCQlwZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopc2tiLT5kYXRhOwotCQltZW1jcHkocGRhdGEsIGRzdF9tYWNfYWRkciwgRVRIX0FMRU4pOwotCQltZW1jcHkocGRhdGEgKyBFVEhfQUxFTiwgc3JjX21hY19hZGRyLCBFVEhfQUxFTik7CisJCWV0aGVyX2FkZHJfY29weShwZGF0YSwgZHN0X21hY19hZGRyKTsKKwkJZXRoZXJfYWRkcl9jb3B5KHBkYXRhICsgRVRIX0FMRU4sIHNyY19tYWNfYWRkcik7CiAKIAkJREJHXzg3MjNBKCJzaG91bGQgYmUgZWFwb2wgcGFja2V0XG4iKTsKIApAQCAtMjcyOSw2ICsyNTc5LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihkb3QxMV9oZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAkJLyogb25seSBmb3IgYWN0aW9uIGZyYW1lcyAqLwogCQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZTsKIAkJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CkBAIC0yNzM5LDMzICsyNTkwLDE5IEBACiAJCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZwYWRhcHRlci0+bWxtZWV4dHByaXY7CiAJCXUzMiBsZW4gPSBza2ItPmxlbjsKIAkJdTggY2F0ZWdvcnksIGFjdGlvbjsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQlpbnQgdHlwZSA9IC0xOwotI2VuZGlmCiAKLQkJaWYgKHJ0d19hY3Rpb25fZnJhbWVfcGFyc2UyM2Eoc2tiLT5kYXRhLCBsZW4sICZjYXRlZ29yeSwKLQkJCQkJICAgJmFjdGlvbikgPT0gZmFsc2UpIHsKLQkJCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgZnJhbWVfY29udHJvbDoweCV4XG4iLAotCQkJCSAgRlVOQ19OREVWX0FSRyhuZGV2KSwKLQkJCQkgIGxlMTZfdG9fY3B1KGRvdDExX2hkci0+ZnJhbWVfY29udHJvbCkpOwotCQkJZ290byBmYWlsOwotCQl9CisJCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopZG90MTFfaGRyOwogCi0JCURCR184NzIzQSgiUlRXX1R4OmRhID0iIE1BQ19GTVQgIiB2aWEgIiBGVU5DX05ERVZfRk1UICJcbiIsCi0JCQkgIE1BQ19BUkcoZG90MTFfaGRyLT5hZGRyMSksIEZVTkNfTkRFVl9BUkcobmRldikpOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCXR5cGUgPSBydHdfcDJwX2NoZWNrX2ZyYW1lcyhwYWRhcHRlciwgc2tiLT5kYXRhLCBsZW4sIHRydWUpOwotCQlpZiAodHlwZSA+PSAwKQotCQkJZ290byBkdW1wOwotI2VuZGlmCi0JCWlmIChjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQykKKwkJREJHXzg3MjNBKCJSVFdfVHg6ZGEgPSIgTUFDX0ZNVCAiIHZpYSAlcyglcylcbiIsCisJCQkgIE1BQ19BUkcobWdtdC0+ZGEpLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CisJCWNhdGVnb3J5ID0gbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnk7CisJCWFjdGlvbiA9IG1nbXQtPnUuYWN0aW9uLnUud21lX2FjdGlvbi5hY3Rpb25fY29kZTsKKwkJaWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDKQogCQkJREJHXzg3MjNBKCJSVFdfVHg6JXNcbiIsIGFjdGlvbl9wdWJsaWNfc3RyMjNhKGFjdGlvbikpOwogCQllbHNlCiAJCQlEQkdfODcyM0EoIlJUV19UeDpjYXRlZ29yeSgldSksIGFjdGlvbigldSlcbiIsIGNhdGVnb3J5LAogCQkJCSAgYWN0aW9uKTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotZHVtcDoKLSNlbmRpZgorCiAJCS8qIHN0YXJ0aW5nIGFsbG9jIG1nbXQgZnJhbWUgdG8gZHVtcCBpdCAqLwogCQlwbWdudGZyYW1lID0gYWxsb2NfbWd0eG1pdGZyYW1lMjNhKHB4bWl0cHJpdik7CiAJCWlmIChwbWdudGZyYW1lID09IE5VTEwpCkBAIC0yNzgxLDE2ICsyNjE4LDYgQEAKIAkJcGZyYW1lID0gKHU4ICopKHBtZ250ZnJhbWUtPmJ1Zl9hZGRyKSArIFRYREVTQ19PRkZTRVQ7CiAKIAkJbWVtY3B5KHBmcmFtZSwgc2tiLT5kYXRhLCBsZW4pOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCWlmICh0eXBlID49IDApIHsKLQkJCXN0cnVjdCB3aWZpX2Rpc3BsYXlfaW5mbyAqcHdmZF9pbmZvOwotCi0JCQlwd2ZkX2luZm8gPSBwYWRhcHRlci0+d2RpbmZvLndmZF9pbmZvOwotCi0JCQlpZiAocHdmZF9pbmZvLT53ZmRfZW5hYmxlKQotCQkJCXJ0d19hcHBlbmRfd2ZkX2llKHBhZGFwdGVyLCBwZnJhbWUsICZsZW4pOwotCQl9Ci0jZW5kaWYgLyogIENPTkZJR184NzIzQVVfUDJQICovCiAJCXBhdHRyaWItPnBrdGxlbiA9IGxlbjsKIAogCQkvKiB1cGRhdGUgc2VxIG51bWJlciAqLwpAQCAtMjgzNiwyNCArMjY2MywyMyBAQAogCXN0cnVjdCBydHdfd2Rldl9wcml2ICpwd2Rldl9wcml2ID0gd2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2Rldik7CiAKIAlpZiAoIW5hbWUpIHsKLQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQgIiB3aXRob3V0IHNwZWNpZmljIG5hbWVcbiIsCi0JCQkgIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IHdpdGhvdXQgc3BlY2lmaWMgbmFtZVxuIiwKKwkJCSAgX19mdW5jX18sIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHB3ZGV2X3ByaXYtPnBtb25fbmRldikgewotCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCAiIG1vbml0b3IgaW50ZXJmYWNlIGV4aXN0OiAiIE5ERVZfRk1UCi0JCQkgICJcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLAotCQkJICBOREVWX0FSRyhwd2Rldl9wcml2LT5wbW9uX25kZXYpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IG1vbml0b3IgaW50ZXJmYWNlIGV4aXN0OiAlc1xuIiwgX19mdW5jX18sCisJCQkgIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lLCBwd2Rldl9wcml2LT5wbW9uX25kZXYtPm5hbWUpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KIAogCW1vbl9uZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBydHdfYWRhcHRlcikpOwogCWlmICghbW9uX25kZXYpIHsKLQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQgIiBhbGxvY2F0ZSBuZGV2IGZhaWxcbiIsCi0JCQkgIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IGFsbG9jYXRlIG5kZXYgZmFpbFxuIiwgX19mdW5jX18sCisJCQkgIHBhZGFwdGVyLT5wbmV0ZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjg2OCw4ICsyNjk0LDggQEAKIAkvKiAgd2RldiAqLwogCW1vbl93ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdpcmVsZXNzX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghbW9uX3dkZXYpIHsKLQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQgIiBhbGxvY2F0ZSBtb25fd2RldiBmYWlsXG4iLAotCQkJICBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSk7CisJCURCR184NzIzQSgiJXMoJXMpOiBhbGxvY2F0ZSBtb25fd2RldiBmYWlsXG4iLCBfX2Z1bmNfXywKKwkJCSAgcGFkYXB0ZXItPnBuZXRkZXYtPm5hbWUpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yOTEwLDggKzI3MzYsOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gd2lwaHlfdG9fYWRhcHRlcih3aXBoeSk7CiAKLQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCAiIHdpcGh5OiVzLCBuYW1lOiVzLCB0eXBlOiVkXG4iLAotCQkgIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLCB3aXBoeV9uYW1lKHdpcGh5KSwgbmFtZSwgdHlwZSk7CisJREJHXzg3MjNBKCIlcyglcyk6IHdpcGh5OiVzLCBuYW1lOiVzLCB0eXBlOiVkXG4iLCBfX2Z1bmNfXywKKwkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwgd2lwaHlfbmFtZSh3aXBoeSksIG5hbWUsIHR5cGUpOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKQEAgLTI5NDAsNyArMjc2Niw4IEBACiAJCWJyZWFrOwogCX0KIAotCURCR184NzIzQShGVU5DX0FEUFRfRk1UICIgbmRldjolcCwgcmV0OiVkXG4iLCBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwlEQkdfODcyM0EoIiVzKCVzKTogbmRldjolcCwgcmV0OiVkXG4iLCBfX2Z1bmNfXywKKwkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKIAkJICBuZGV2LCByZXQpOwogCiAJcmV0dXJuIG5kZXYgPyBuZGV2LT5pZWVlODAyMTFfcHRyIDogRVJSX1BUUihyZXQpOwpAQCAtMjk2Miw4ICsyNzg5LDggQEAKIAlpZiAobmRldiA9PSBwd2Rldl9wcml2LT5wbW9uX25kZXYpIHsKIAkJcHdkZXZfcHJpdi0+cG1vbl9uZGV2ID0gTlVMTDsKIAkJcHdkZXZfcHJpdi0+aWZuYW1lX21vblswXSA9ICdcMCc7Ci0JCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgcmVtb3ZlIG1vbml0b3IgaW50ZXJmYWNlXG4iLAotCQkJICBGVU5DX05ERVZfQVJHKG5kZXYpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IHJlbW92ZSBtb25pdG9yIGludGVyZmFjZVxuIiwKKwkJCSAgX19mdW5jX18sIG5kZXYtPm5hbWUpOwogCX0KIAogZXhpdDoKQEAgLTI5NzYsMTAgKzI4MDMsNiBAQAogCWludCByZXQgPSAwOwogCXU4ICpwYnVmID0gTlVMTDsKIAl1aW50IGxlbiwgd3BzX2llbGVuID0gMDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXVpbnQgcDJwX2llbGVuID0gMDsKLQl1OCBnb3RfcDJwX2llID0gZmFsc2U7Ci0jZW5kaWYKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmYWRhcHRlci0+bWxtZXByaXY7CiAJLyogc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsgKi8KIApAQCAtMzAwNyw1NSArMjgzMCwxNCBAQAogCSAgICAgJndwc19pZWxlbikpCiAJCURCR184NzIzQSgiYWRkIGJjbiwgd3BzX2llbGVuID0lZFxuIiwgd3BzX2llbGVuKTsKIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JLyogY2hlY2sgcDJwIGllIGlmIGluY2x1ZWQgKi8KLQlpZiAocnR3X2dldF9wMnBfaWUyM2EKLQkgICAgKHBidWYgKyBfRklYRURfSUVfTEVOR1RIXywgbGVuIC0gX0ZJWEVEX0lFX0xFTkdUSF8sIE5VTEwsCi0JICAgICAmcDJwX2llbGVuKSkgewotCQlEQkdfODcyM0EoImdvdCBwMnBfaWUsIGxlbiA9JWRcbiIsIHAycF9pZWxlbik7Ci0JCWdvdF9wMnBfaWUgPSB0cnVlOwotCX0KLSNlbmRpZgotCiAJLyogcGJzc19uZXR3b3JrLT5JRXMgd2lsbCBub3QgaW5jbHVkZSBwMnBfaWUsIHdmZCBpZSAqLwotCXJ0d19pZXNfcmVtb3ZlX2llMjNhKHBidWYsICZsZW4sIF9CRUFDT05fSUVfT0ZGU0VUXywgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sCi0JCQkgIFAyUF9PVUkyM0EsIDQpOwotCXJ0d19pZXNfcmVtb3ZlX2llMjNhKHBidWYsICZsZW4sIF9CRUFDT05fSUVfT0ZGU0VUXywgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sCi0JCQkgIFdGRF9PVUkyM0EsIDQpOworCXJ0d19pZXNfcmVtb3ZlX2llMjNhKHBidWYsICZsZW4sIF9CRUFDT05fSUVfT0ZGU0VUXywKKwkJCSAgICAgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLCBQMlBfT1VJMjNBLCA0KTsKKwlydHdfaWVzX3JlbW92ZV9pZTIzYShwYnVmLCAmbGVuLCBfQkVBQ09OX0lFX09GRlNFVF8sCisJCQkgICAgIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywgV0ZEX09VSTIzQSwgNCk7CiAKIAlpZiAocnR3X2NoZWNrX2JlYWNvbl9kYXRhMjNhKGFkYXB0ZXIsIHBidWYsIGxlbikgPT0gX1NVQ0NFU1MpIHsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQkvKiBjaGVjayBwMnAgaWYgZW5hYmxlICovCi0JCWlmIChnb3RfcDJwX2llID09IHRydWUpIHsKLQkJCXN0cnVjdCBtbG1lX2V4dF9wcml2ICpwbWxtZWV4dCA9ICZhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQkJCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmYWRhcHRlci0+d2RpbmZvOwotCi0JCQlpZiAocnR3X3AycF9jaGtfc3RhdGUocHdkaW5mbywgUDJQX1NUQVRFX05PTkUpKSB7Ci0JCQkJREJHXzg3MjNBKCJFbmFibGUgUDJQIGZ1bmN0aW9uIGZvciB0aGUgZmlyc3QgIgotCQkJCQkgICJ0aW1lXG4iKTsKLQkJCQlydHdfcDJwX2VuYWJsZTIzYShhZGFwdGVyLCBQMlBfUk9MRV9HTyk7Ci0JCQkJd2Rldl90b19wcml2KGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQgPQotCQkJCQl0cnVlOwotCQkJfSBlbHNlIHsKLQkJCQlkZWxfdGltZXJfc3luYygmcHdkaW5mby0+ZmluZF9waGFzZV90aW1lcik7Ci0JCQkJZGVsX3RpbWVyX3N5bmMoJnB3ZGluZm8tPgotCQkJCQkgICAgICAgcmVzdG9yZV9wMnBfc3RhdGVfdGltZXIpOwotCQkJCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5wcmVfdHhfc2Nhbl90aW1lcik7Ci0KLQkJCQlEQkdfODcyM0EoImVudGVyIEdPIE1vZGUsIHAycF9pZWxlbiA9JWRcbiIsCi0JCQkJCSAgcDJwX2llbGVuKTsKLQotCQkJCXJ0d19wMnBfc2V0X3JvbGUocHdkaW5mbywgUDJQX1JPTEVfR08pOwotCQkJCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9HT05FR09fT0spOwotCQkJCXB3ZGluZm8tPmludGVudCA9IDE1OwotCQkJfQotCi0JCQlwd2RpbmZvLT5vcGVyYXRpbmdfY2hhbm5lbCA9IHBtbG1lZXh0LT5jdXJfY2hhbm5lbDsKLQkJfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KIAkJcmV0ID0gMDsKLQogCX0gZWxzZSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtMzA3MSw4ICsyODUzLDggQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKmFkYXB0ZXIgPSB3aXBoeV90b19hZGFwdGVyKHdpcGh5KTsKIAotCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgaGlkZGVuX3NzaWQ6JWQsIGF1dGhfdHlwZTolZFxuIiwKLQkJICBGVU5DX05ERVZfQVJHKG5kZXYpLCBzZXR0aW5ncy0+aGlkZGVuX3NzaWQsCisJREJHXzg3MjNBKCIlcyglcyk6IGhpZGRlbl9zc2lkOiVkLCBhdXRoX3R5cGU6JWRcbiIsCisJCSAgX19mdW5jX18sIG5kZXYtPm5hbWUsIHNldHRpbmdzLT5oaWRkZW5fc3NpZCwKIAkJICBzZXR0aW5ncy0+YXV0aF90eXBlKTsKIAogCXJldCA9IHJ0d19hZGRfYmVhY29uKGFkYXB0ZXIsIHNldHRpbmdzLT5iZWFjb24uaGVhZCwKQEAgLTMwODgsMjkgKzI4NzAsMTIgQEAKIAkJc3RydWN0IHdsYW5fYnNzaWRfZXggKnBic3NfbmV0d29ya19leHQgPQogCQkJJmFkYXB0ZXItPm1sbWVleHRwcml2Lm1sbWV4dF9pbmZvLm5ldHdvcms7CiAKLQkJaWYgKDApCi0JCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVAotCQkJCSAgIiBzc2lkOiglcywlZCksIGZyb20gaWU6KCVzLCVkKVxuIiwKLQkJCQkgIEZVTkNfQURQVF9BUkcoYWRhcHRlciksIHNldHRpbmdzLT5zc2lkLAotCQkJCSAgKGludClzZXR0aW5ncy0+c3NpZF9sZW4sCi0JCQkJICBwYnNzX25ldHdvcmstPlNzaWQuc3NpZCwKLQkJCQkgIHBic3NfbmV0d29yay0+U3NpZC5zc2lkX2xlbik7Ci0KIAkJbWVtY3B5KHBic3NfbmV0d29yay0+U3NpZC5zc2lkLCAodm9pZCAqKXNldHRpbmdzLT5zc2lkLAogCQkgICAgICAgc2V0dGluZ3MtPnNzaWRfbGVuKTsKIAkJcGJzc19uZXR3b3JrLT5Tc2lkLnNzaWRfbGVuID0gc2V0dGluZ3MtPnNzaWRfbGVuOwogCQltZW1jcHkocGJzc19uZXR3b3JrX2V4dC0+U3NpZC5zc2lkLCAodm9pZCAqKXNldHRpbmdzLT5zc2lkLAogCQkgICAgICAgc2V0dGluZ3MtPnNzaWRfbGVuKTsKIAkJcGJzc19uZXR3b3JrX2V4dC0+U3NpZC5zc2lkX2xlbiA9IHNldHRpbmdzLT5zc2lkX2xlbjsKLQotCQlpZiAoMCkKLQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UCi0JCQkJICAiIGFmdGVyIHNzaWQ6KCVzLCVkKSwgKCVzLCVkKVxuIiwKLQkJCQkgIEZVTkNfQURQVF9BUkcoYWRhcHRlciksCi0JCQkJICBwYnNzX25ldHdvcmstPlNzaWQuc3NpZCwKLQkJCQkgIHBic3NfbmV0d29yay0+U3NpZC5zc2lkX2xlbiwKLQkJCQkgIHBic3NfbmV0d29ya19leHQtPlNzaWQuc3NpZCwKLQkJCQkgIHBic3NfbmV0d29ya19leHQtPlNzaWQuc3NpZF9sZW4pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zMTIzLDcgKzI4ODgsNyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlciA9IHdpcGh5X3RvX2FkYXB0ZXIod2lwaHkpOwogCi0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCIlcyglcylcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKIAogCXJldCA9IHJ0d19hZGRfYmVhY29uKGFkYXB0ZXIsIGluZm8tPmhlYWQsIGluZm8tPmhlYWRfbGVuLCBpbmZvLT50YWlsLAogCQkJICAgICBpbmZvLT50YWlsX2xlbik7CkBAIC0zMTMzLDcgKzI4OTgsNyBAQAogCiBzdGF0aWMgaW50IGNmZzgwMjExX3J0d19zdG9wX2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewotCURCR184NzIzQShGVU5DX05ERVZfRk1UICJcbiIsIEZVTkNfTkRFVl9BUkcobmRldikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNDEsNyArMjkwNiw3IEBACiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCAqbWFjLAogCQkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7Ci0JREJHXzg3MjNBKEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCIlcyglcylcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzE1Nyw3ICsyOTIyLDcgQEAKIAlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwogCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7CiAKLQlEQkdfODcyM0EoIisiIEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCIrJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CiAKIAlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIChfRldfTElOS0VEIHwgV0lGSV9BUF9TVEFURSkpICE9IHRydWUpIHsKIAkJREJHXzg3MjNBKCIlcywgZndfc3RhdGUgIT0gRldfTElOS0VEfFdJRklfQVBfU1RBVEVcbiIsCkBAIC0zMTg4LDcgKzI5NTMsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShwbGlzdCwgcHRtcCwgcGhlYWQpIHsKIAkJcHN0YSA9IGNvbnRhaW5lcl9vZihwbGlzdCwgc3RydWN0IHN0YV9pbmZvLCBhc29jX2xpc3QpOwogCi0JCWlmICghbWVtY21wKG1hYywgcHN0YS0+aHdhZGRyLCBFVEhfQUxFTikpIHsKKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwobWFjLCBwc3RhLT5od2FkZHIpKSB7CiAJCQlpZiAocHN0YS0+ZG90ODAyMXhhbGcgPT0gMSAmJgogCQkJICAgIHBzdGEtPmJwYWlyd2lzZV9rZXlfaW5zdGFsbGVkID09IGZhbHNlKSB7CiAJCQkJREJHXzg3MjNBKCIlcywgc3RhJ3MgZG90ODAyMXhhbGcgPSAxIGFuZCAiCkBAIC0zMjE3LDcgKzI5ODIsNyBAQAogCiAJYXNzb2NpYXRlZF9jbGllbnRzX3VwZGF0ZTIzYShwYWRhcHRlciwgdXBkYXRlZCk7CiAKLQlEQkdfODcyM0EoIi0iIEZVTkNfTkRFVl9GTVQgIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCItJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzIyNiw3ICsyOTkxLDcgQEAKIAkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4ICptYWMsCiAJCQkJICAgICAgIHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiXG4iLCBGVU5DX05ERVZfQVJHKG5kZXYpKTsKKwlEQkdfODcyM0EoIiVzKCVzKVxuIiwgX19mdW5jX18sIG5kZXYtPm5hbWUpOwogCXJldHVybiAwOwogfQogCkBAIC0zMjM0LDcgKzI5OTksNyBAQAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBpZHgsIHU4ICptYWMsCiAJCQkJICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKIHsKLQlEQkdfODcyM0EoRlVOQ19OREVWX0ZNVCAiXG4iLCBGVU5DX05ERVZfQVJHKG5kZXYpKTsKKwlEQkdfODcyM0EoIiVzKCVzKVxuIiwgX19mdW5jX18sIG5kZXYtPm5hbWUpOwogCiAJLyogVE9ETzogZHVtcCBzY2FubmVkIHF1ZXVlICovCiAKQEAgLTMyNDQsMTA0ICszMDA5LDI3IEBACiBzdGF0aWMgaW50IGNmZzgwMjExX3J0d19jaGFuZ2VfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJCSAgIHN0cnVjdCBic3NfcGFyYW1ldGVycyAqcGFyYW1zKQogewotCURCR184NzIzQShGVU5DX05ERVZfRk1UICJcbiIsIEZVTkNfTkRFVl9BUkcobmRldikpOworCURCR184NzIzQSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgbmRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHXzg3MjNBVV9BUF9NT0RFICovCiAKLXZvaWQgcnR3X2NmZzgwMjExX3J4X2FjdGlvbl9wMnAoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwgdTggKnBtZ210X2ZyYW1lLAotCQkJCXVpbnQgZnJhbWVfbGVuKQotewotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaW50IHR5cGU7Ci0jZW5kaWYKLQlzMzIgZnJlcTsKLQlpbnQgY2hhbm5lbDsKLQl1OCBjYXRlZ29yeSwgYWN0aW9uOwotCi0JY2hhbm5lbCA9IHJ0d19nZXRfb3Blcl9jaDIzYShwYWRhcHRlcik7Ci0KLQlEQkdfODcyM0EoIlJUV19SeDpjdXJfY2ggPSVkXG4iLCBjaGFubmVsKTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXR5cGUgPSBydHdfcDJwX2NoZWNrX2ZyYW1lcyhwYWRhcHRlciwgcG1nbXRfZnJhbWUsIGZyYW1lX2xlbiwgZmFsc2UpOwotCWlmICh0eXBlID49IDApCi0JCWdvdG8gaW5kaWNhdGU7Ci0jZW5kaWYKLQlydHdfYWN0aW9uX2ZyYW1lX3BhcnNlMjNhKHBtZ210X2ZyYW1lLCBmcmFtZV9sZW4sICZjYXRlZ29yeSwgJmFjdGlvbik7Ci0JREJHXzg3MjNBKCJSVFdfUng6Y2F0ZWdvcnkoJXUpLCBhY3Rpb24oJXUpXG4iLCBjYXRlZ29yeSwgYWN0aW9uKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi1pbmRpY2F0ZToKLSNlbmRpZgotCWlmIChjaGFubmVsIDw9IFJUV19DSF9NQVhfMkdfQ0hBTk5FTCkKLQkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFubmVsLAotCQkJCQkJICAgICAgSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JZWxzZQotCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoYW5uZWwsCi0JCQkJCQkgICAgICBJRUVFODAyMTFfQkFORF81R0haKTsKLQotCXJ0d19jZmc4MDIxMV9yeF9tZ210KHBhZGFwdGVyLCBmcmVxLCAwLCBwbWdtdF9mcmFtZSwgZnJhbWVfbGVuLAotCQkJICAgICBHRlBfQVRPTUlDKTsKLX0KLQotdm9pZCBydHdfY2ZnODAyMTFfcnhfcDJwX2FjdGlvbl9wdWJsaWMoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgICAgICAgdTggKnBtZ210X2ZyYW1lLCB1aW50IGZyYW1lX2xlbikKLXsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCWludCB0eXBlOwotI2VuZGlmCi0JczMyIGZyZXE7Ci0JaW50IGNoYW5uZWw7Ci0JdTggY2F0ZWdvcnksIGFjdGlvbjsKLQotCWNoYW5uZWwgPSBydHdfZ2V0X29wZXJfY2gyM2EocGFkYXB0ZXIpOwotCi0JREJHXzg3MjNBKCJSVFdfUng6Y3VyX2NoID0lZFxuIiwgY2hhbm5lbCk7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl0eXBlID0gcnR3X3AycF9jaGVja19mcmFtZXMocGFkYXB0ZXIsIHBtZ210X2ZyYW1lLCBmcmFtZV9sZW4sIGZhbHNlKTsKLQlpZiAodHlwZSA+PSAwKSB7Ci0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIFAyUF9HT19ORUdPX0NPTkY6Ci0JCWNhc2UgUDJQX1BST1ZJU0lPTl9ESVNDX1JFU1A6Ci0JCQlydHdfY2xlYXJfc2Nhbl9kZW55KHBhZGFwdGVyKTsKLQkJfQotCQlnb3RvIGluZGljYXRlOwotCX0KLSNlbmRpZgotCXJ0d19hY3Rpb25fZnJhbWVfcGFyc2UyM2EocG1nbXRfZnJhbWUsIGZyYW1lX2xlbiwgJmNhdGVnb3J5LCAmYWN0aW9uKTsKLQlEQkdfODcyM0EoIlJUV19SeDpjYXRlZ29yeSgldSksIGFjdGlvbigldSlcbiIsIGNhdGVnb3J5LCBhY3Rpb24pOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLWluZGljYXRlOgotI2VuZGlmCi0JaWYgKGNoYW5uZWwgPD0gUlRXX0NIX01BWF8yR19DSEFOTkVMKQotCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoYW5uZWwsCi0JCQkJCQkgICAgICBJRUVFODAyMTFfQkFORF8yR0haKTsKLQllbHNlCi0JCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koY2hhbm5lbCwKLQkJCQkJCSAgICAgIElFRUU4MDIxMV9CQU5EXzVHSFopOwotCi0JcnR3X2NmZzgwMjExX3J4X21nbXQocGFkYXB0ZXIsIGZyZXEsIDAsIHBtZ210X2ZyYW1lLCBmcmFtZV9sZW4sCi0JCQkgICAgIEdGUF9BVE9NSUMpOwotfQotCiB2b2lkIHJ0d19jZmc4MDIxMV9yeF9hY3Rpb24oc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCAqZnJhbWUsCiAJCQkgICAgdWludCBmcmFtZV9sZW4sIGNvbnN0IGNoYXIgKm1zZykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilmcmFtZTsKIAlzMzIgZnJlcTsKIAlpbnQgY2hhbm5lbDsKLQl1OCBjYXRlZ29yeSwgYWN0aW9uOwogCiAJY2hhbm5lbCA9IHJ0d19nZXRfb3Blcl9jaDIzYShhZGFwdGVyKTsKIAotCXJ0d19hY3Rpb25fZnJhbWVfcGFyc2UyM2EoZnJhbWUsIGZyYW1lX2xlbiwgJmNhdGVnb3J5LCAmYWN0aW9uKTsKLQogCURCR184NzIzQSgiUlRXX1J4OmN1cl9jaCA9JWRcbiIsIGNoYW5uZWwpOwogCWlmIChtc2cpCiAJCURCR184NzIzQSgiUlRXX1J4OiVzXG4iLCBtc2cpOwogCWVsc2UKLQkJREJHXzg3MjNBKCJSVFdfUng6Y2F0ZWdvcnkoJXUpLCBhY3Rpb24oJXUpXG4iLCBjYXRlZ29yeSwKLQkJCSAgYWN0aW9uKTsKKwkJREJHXzg3MjNBKCJSVFdfUng6Y2F0ZWdvcnkoJXUpLCBhY3Rpb24oJXUpXG4iLAorCQkJICBoZHItPnUuYWN0aW9uLmNhdGVnb3J5LAorCQkJICBoZHItPnUuYWN0aW9uLnUud21lX2FjdGlvbi5hY3Rpb25fY29kZSk7CiAKIAlpZiAoY2hhbm5lbCA8PSBSVFdfQ0hfTUFYXzJHX0NIQU5ORUwpCiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koY2hhbm5lbCwKQEAgLTMzNTAsMzUzICszMDM4LDEwIEBACiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koY2hhbm5lbCwKIAkJCQkJCSAgICAgIElFRUU4MDIxMV9CQU5EXzVHSFopOwogCi0JcnR3X2NmZzgwMjExX3J4X21nbXQoYWRhcHRlciwgZnJlcSwgMCwgZnJhbWUsIGZyYW1lX2xlbiwgR0ZQX0FUT01JQyk7CisJY2ZnODAyMTFfcnhfbWdtdChhZGFwdGVyLT5ydHdfd2RldiwgZnJlcSwgMCwgZnJhbWUsIGZyYW1lX2xlbiwKKwkJCSAwLCBHRlBfQVRPTUlDKTsKIH0KIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi12b2lkIHJ0d19jZmc4MDIxMV9pc3N1ZV9wMnBfcHJvdmlzaW9uX3JlcXVlc3QyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkJICAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQl1MTYgd3BzX2RldmljZXBhc3N3b3JkX2lkID0gMHgwMDAwOwotCXVpbnQgd3BzX2RldmljZXBhc3N3b3JkX2lkX2xlbiA9IDA7Ci0JdTggd3BzaWVbMjU1XSA9IHsgMHgwMCB9LCBwMnBfaWVbMjU1XSA9IHsgMHgwMCB9OwotCXVpbnQgcDJwX2llbGVuID0gMDsKLQl1aW50IHdwc2llbGVuID0gMDsKLQl1MzIgZGV2aW5mb19jb250ZW50bGVuID0gMDsKLQl1OCBkZXZpbmZvX2NvbnRlbnRbNjRdID0geyAweDAwIH07Ci0JdTE2IGNhcGFiaWxpdHkgPSAwOwotCXVpbnQgY2FwYWJpbGl0eV9sZW4gPSAwOwotCi0JdW5zaWduZWQgY2hhciBjYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfUFVCTElDOwotCXU4IGFjdGlvbiA9IFAyUF9QVUJfQUNUSU9OX0FDVElPTjsKLQl1OCBkaWFsb2dUb2tlbiA9IDE7Ci0JdTMyIHAycG91aSA9IGNwdV90b19iZTMyKFAyUE9VSSk7Ci0JdTggb3VpX3N1YnR5cGUgPSBQMlBfUFJPVklTSU9OX0RJU0NfUkVROwotCXUzMiBwMnBpZWxlbiA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl1MzIgd2ZkaWVsZW4gPSAwOwotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQlzdHJ1Y3QgeG1pdF9mcmFtZSAqcG1nbnRmcmFtZTsKLQlzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYjsKLQl1bnNpZ25lZCBjaGFyICpwZnJhbWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyLCAqaGRyOwotCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQl1OCAqZnJhbWVfYm9keSA9Ci0JICAgICh1bnNpZ25lZCBjaGFyICopKGJ1ZiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpOwotCXNpemVfdCBmcmFtZV9ib2R5X2xlbiA9IGxlbiAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0KLQlEQkdfODcyM0EoIlslc10gSW5cbiIsIF9fZnVuY19fKTsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZjsKLQkvKiBwcmVwYXJlIGZvciBidWlsZGluZyBwcm92aXNpb25fcmVxdWVzdCBmcmFtZSAqLwotCW1lbWNweShwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby5wZWVySUZBZGRyLCBoZHItPmFkZHIxLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLnBlZXJEZXZBZGRyLCBoZHItPmFkZHIxLCBFVEhfQUxFTik7Ci0KLQlwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby53cHNfY29uZmlnX21ldGhvZF9yZXF1ZXN0ID0KLQkgICAgV1BTX0NNX1BVU0hfQlVUVE9OOwotCi0JcnR3X2dldF93cHNfaWUyM2EoZnJhbWVfYm9keSArIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF8sCi0JCSAgICAgICBmcmFtZV9ib2R5X2xlbiAtIF9QVUJMSUNfQUNUSU9OX0lFX09GRlNFVF8sIHdwc2llLAotCQkgICAgICAgJndwc2llbGVuKTsKLQlydHdfZ2V0X3dwc19hdHRyX2NvbnRlbnQyM2Eod3BzaWUsIHdwc2llbGVuLCBXUFNfQVRUUl9ERVZJQ0VfUFdJRCwKLQkJCQkgICAgKHU4ICopJndwc19kZXZpY2VwYXNzd29yZF9pZCwKLQkJCQkgICAgJndwc19kZXZpY2VwYXNzd29yZF9pZF9sZW4pOwotCXdwc19kZXZpY2VwYXNzd29yZF9pZCA9IGJlMTZfdG9fY3B1KHdwc19kZXZpY2VwYXNzd29yZF9pZCk7Ci0KLQlzd2l0Y2ggKHdwc19kZXZpY2VwYXNzd29yZF9pZCkgewotCWNhc2UgV1BTX0RQSURfUElOOgotCQlwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby53cHNfY29uZmlnX21ldGhvZF9yZXF1ZXN0ID0KLQkJCVdQU19DTV9MQUJFTDsKLQkJYnJlYWs7Ci0JY2FzZSBXUFNfRFBJRF9VU0VSX1NQRUM6Ci0JCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLndwc19jb25maWdfbWV0aG9kX3JlcXVlc3QgPQotCQkJV1BTX0NNX0RJU1BMWUE7Ci0JCWJyZWFrOwotCWNhc2UgV1BTX0RQSURfTUFDSElORV9TUEVDOgotCQlicmVhazsKLQljYXNlIFdQU19EUElEX1JFS0VZOgotCQlicmVhazsKLQljYXNlIFdQU19EUElEX1BCQzoKLQkJcHdkaW5mby0+dHhfcHJvdl9kaXNjX2luZm8ud3BzX2NvbmZpZ19tZXRob2RfcmVxdWVzdCA9Ci0JCQlXUFNfQ01fUFVTSF9CVVRUT047Ci0JCWJyZWFrOwotCWNhc2UgV1BTX0RQSURfUkVHSVNUUkFSX1NQRUM6Ci0JCXB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLndwc19jb25maWdfbWV0aG9kX3JlcXVlc3QgPQotCQkJV1BTX0NNX0tFWVBBRDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHJ0d19nZXRfcDJwX2llMjNhKGZyYW1lX2JvZHkgKyBfUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLAotCQkJICAgZnJhbWVfYm9keV9sZW4gLSBfUFVCTElDX0FDVElPTl9JRV9PRkZTRVRfLAotCQkJICAgcDJwX2llLCAmcDJwX2llbGVuKSkgewotCQlydHdfZ2V0X3AycF9hdHRyMjNhX2NvbnRlbnQocDJwX2llLCBwMnBfaWVsZW4sCi0JCQkJCSBQMlBfQVRUUl9ERVZJQ0VfSU5GTywgZGV2aW5mb19jb250ZW50LAotCQkJCQkgJmRldmluZm9fY29udGVudGxlbik7Ci0JCXJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwgUDJQX0FUVFJfQ0FQQUJJTElUWSwKLQkJCQkJICh1OCAqKSZjYXBhYmlsaXR5LCAmY2FwYWJpbGl0eV9sZW4pOwotCX0KLQotCS8qIHN0YXJ0IHRvIGJ1aWxkIHByb3Zpc2lvbl9yZXF1ZXN0IGZyYW1lICovCi0JbWVtc2V0KHdwc2llLCAwLCBzaXplb2Yod3BzaWUpKTsKLQltZW1zZXQocDJwX2llLCAwLCBzaXplb2YocDJwX2llKSk7Ci0JcDJwX2llbGVuID0gMDsKLQotCXBtZ250ZnJhbWUgPSBhbGxvY19tZ3R4bWl0ZnJhbWUyM2EocHhtaXRwcml2KTsKLQlpZiAocG1nbnRmcmFtZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0JLyogdXBkYXRlIGF0dHJpYnV0ZSAqLwotCXBhdHRyaWIgPSAmcG1nbnRmcmFtZS0+YXR0cmliOwotCXVwZGF0ZV9tZ250ZnJhbWVfYXR0cmliMjNhKHBhZGFwdGVyLCBwYXR0cmliKTsKLQotCW1lbXNldChwbWdudGZyYW1lLT5idWZfYWRkciwgMCwgV0xBTkhEUl9PRkZTRVQgKyBUWERFU0NfT0ZGU0VUKTsKLQotCXBmcmFtZSA9ICh1OCAqKSAocG1nbnRmcmFtZS0+YnVmX2FkZHIpICsgVFhERVNDX09GRlNFVDsKLQlwd2xhbmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBmcmFtZTsKLQotCXB3bGFuaGRyLT5mcmFtZV9jb250cm9sID0gMDsKLQotCW1lbWNweShwd2xhbmhkci0+YWRkcjEsIHB3ZGluZm8tPnR4X3Byb3ZfZGlzY19pbmZvLnBlZXJEZXZBZGRyLAotCSAgICAgICBFVEhfQUxFTik7Ci0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMiwgbXlpZCgmcGFkYXB0ZXItPmVlcHJvbXByaXYpLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHB3bGFuaGRyLT5hZGRyMywgcHdkaW5mby0+dHhfcHJvdl9kaXNjX2luZm8ucGVlckRldkFkZHIsCi0JICAgICAgIEVUSF9BTEVOKTsKLQotCVNldFNlcU51bShwd2xhbmhkciwgcG1sbWVleHQtPm1nbnRfc2VxKTsKLQlwbWxtZWV4dC0+bWdudF9zZXErKzsKLQlTZXRGcmFtZVN1YlR5cGUocGZyYW1lLCBXSUZJX0FDVElPTik7Ci0KLQlwZnJhbWUgKz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKTsKLQlwYXR0cmliLT5wa3RsZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwotCi0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZjYXRlZ29yeSwgJnBhdHRyaWItPnBrdGxlbik7Ci0JcGZyYW1lID0gcnR3X3NldF9maXhlZF9pZTIzYShwZnJhbWUsIDEsICZhY3Rpb24sICZwYXR0cmliLT5wa3RsZW4pOwotCXBmcmFtZSA9IHJ0d19zZXRfZml4ZWRfaWUyM2EocGZyYW1lLCA0LCAodW5zaWduZWQgY2hhciAqKSZwMnBvdWksCi0JCQkJICAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJm91aV9zdWJ0eXBlLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQlwZnJhbWUgPSBydHdfc2V0X2ZpeGVkX2llMjNhKHBmcmFtZSwgMSwgJmRpYWxvZ1Rva2VuLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotCS8qIGJ1aWxkX3Byb3ZfZGlzY19yZXF1ZXN0X3AycF9pZTIzYSAqLwotCS8qICAgICAgUDJQIE9VSSAqLwotCXAycGllbGVuID0gMDsKLQlwMnBfaWVbcDJwaWVsZW4rK10gPSAweDUwOwotCXAycF9pZVtwMnBpZWxlbisrXSA9IDB4NkY7Ci0JcDJwX2llW3AycGllbGVuKytdID0gMHg5QTsKLQlwMnBfaWVbcDJwaWVsZW4rK10gPSAweDA5OwkvKiAgICAgIFdGQSBQMlAgdjEuMCAqLwotCi0JLyogICAgICBDb21tZW50ZWQgYnkgQWxiZXJ0IDIwMTEwMzAxICovCi0JLyogICAgICBBY2NvcmRpbmcgdG8gdGhlIFAyUCBTcGVjaWZpY2F0aW9uLCB0aGUgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lIHNob3VsZCBjb250YWluIDMgUDJQIGF0dHJpYnV0ZXMgKi8KLQkvKiAgICAgIDEuIFAyUCBDYXBhYmlsaXR5ICovCi0JLyogICAgICAyLiBEZXZpY2UgSW5mbyAqLwotCS8qICAgICAgMy4gR3JvdXAgSUQgKCBXaGVuIGpvaW5pbmcgYW4gb3BlcmF0aW5nIFAyUCBHcm91cCApICovCi0KLQkvKiAgICAgIFAyUCBDYXBhYmlsaXR5IEFUVFIgKi8KLQkvKiAgICAgIFR5cGU6ICovCi0JcDJwX2llW3AycGllbGVuKytdID0gUDJQX0FUVFJfQ0FQQUJJTElUWTsKLQotCS8qICAgICAgTGVuZ3RoOiAqLwotCXB1dF91bmFsaWduZWRfbGUxNigweDAwMDIsIHAycF9pZSArIHAycGllbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyogICAgICBWYWx1ZTogKi8KLQkvKiAgICAgIERldmljZSBDYXBhYmlsaXR5IEJpdG1hcCwgMSBieXRlICovCi0JLyogICAgICBHcm91cCBDYXBhYmlsaXR5IEJpdG1hcCwgMSBieXRlICovCi0JbWVtY3B5KHAycF9pZSArIHAycGllbGVuLCAmY2FwYWJpbGl0eSwgMik7Ci0JcDJwaWVsZW4gKz0gMjsKLQotCS8qICAgICAgRGV2aWNlIEluZm8gQVRUUiAqLwotCS8qICAgICAgVHlwZTogKi8KLQlwMnBfaWVbcDJwaWVsZW4rK10gPSBQMlBfQVRUUl9ERVZJQ0VfSU5GTzsKLQotCS8qICAgICAgTGVuZ3RoOiAqLwotCXB1dF91bmFsaWduZWRfbGUxNihkZXZpbmZvX2NvbnRlbnRsZW4sIHAycF9pZSArIHAycGllbGVuKTsKLQlwMnBpZWxlbiArPSAyOwotCi0JLyogICAgICBWYWx1ZTogKi8KLQltZW1jcHkocDJwX2llICsgcDJwaWVsZW4sIGRldmluZm9fY29udGVudCwgZGV2aW5mb19jb250ZW50bGVuKTsKLQlwMnBpZWxlbiArPSBkZXZpbmZvX2NvbnRlbnRsZW47Ci0KLQlwZnJhbWUgPSBydHdfc2V0X2llMjNhKHBmcmFtZSwgX1ZFTkRPUl9TUEVDSUZJQ19JRV8sIHAycGllbGVuLAotCQkJICAgICh1bnNpZ25lZCBjaGFyICopcDJwX2llLCAmcDJwX2llbGVuKTsKLQlwYXR0cmliLT5wa3RsZW4gKz0gcDJwX2llbGVuOwotCi0Jd3BzaWVsZW4gPSAwOwotCS8qICAgICAgV1BTIE9VSSAqLwotCSoodTMyICopKHdwc2llKSA9IGNwdV90b19iZTMyKFdQU09VSSk7Ci0Jd3BzaWVsZW4gKz0gNDsKLQotCS8qICAgICAgV1BTIHZlcnNpb24gKi8KLQkvKiAgICAgIFR5cGU6ICovCi0JKih1MTYgKikod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNihXUFNfQVRUUl9WRVIxKTsKLQl3cHNpZWxlbiArPSAyOwotCi0JLyogICAgICBMZW5ndGg6ICovCi0JKih1MTYgKikod3BzaWUgKyB3cHNpZWxlbikgPSBjcHVfdG9fYmUxNigweDAwMDEpOwotCXdwc2llbGVuICs9IDI7Ci0KLQkvKiAgICAgIFZhbHVlOiAqLwotCXdwc2llW3dwc2llbGVuKytdID0gV1BTX1ZFUlNJT05fMTsJLyogICAgICBWZXJzaW9uIDEuMCAqLwotCi0JLyogICAgICBDb25maWcgTWV0aG9kICovCi0JLyogICAgICBUeXBlOiAqLwotCSoodTE2ICopKHdwc2llICsgd3BzaWVsZW4pID0gY3B1X3RvX2JlMTYoV1BTX0FUVFJfQ09ORl9NRVRIT0QpOwotCXdwc2llbGVuICs9IDI7Ci0KLQkvKiAgICAgIExlbmd0aDogKi8KLQkqKHUxNiAqKSh3cHNpZSArIHdwc2llbGVuKSA9IGNwdV90b19iZTE2KDB4MDAwMik7Ci0Jd3BzaWVsZW4gKz0gMjsKLQotCS8qICAgICAgVmFsdWU6ICovCi0JKih1MTYgKikod3BzaWUgKyB3cHNpZWxlbikgPQotCSAgICBjcHVfdG9fYmUxNihwd2RpbmZvLT50eF9wcm92X2Rpc2NfaW5mby53cHNfY29uZmlnX21ldGhvZF9yZXF1ZXN0KTsKLQl3cHNpZWxlbiArPSAyOwotCi0JcGZyYW1lID0gcnR3X3NldF9pZTIzYShwZnJhbWUsIF9WRU5ET1JfU1BFQ0lGSUNfSUVfLCB3cHNpZWxlbiwKLQkJCSAgICAodW5zaWduZWQgY2hhciAqKXdwc2llLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jd2ZkaWVsZW4gPSBidWlsZF9wcm92ZGlzY19yZXFfd2ZkX2llKHB3ZGluZm8sIHBmcmFtZSk7Ci0JcGZyYW1lICs9IHdmZGllbGVuOwotCXBhdHRyaWItPnBrdGxlbiArPSB3ZmRpZWxlbjsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JcGF0dHJpYi0+bGFzdF90eGNtZHN6ID0gcGF0dHJpYi0+cGt0bGVuOwotCi0JLyogZHVtcF9tZ250ZnJhbWUyM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOyAqLwotCWlmIChkdW1wX21nbnRmcmFtZTIzYV9hbmRfd2FpdF9hY2syM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpICE9IF9TVUNDRVNTKQotCQlEQkdfODcyM0EoIiVzLCBhY2sgdG9cbiIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHMzMiBjZmc4MDIxMV9ydHdfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCQkJICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHU2NCAqY29va2llKQotewotCXMzMiBlcnIgPSAwOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSB3aXBoeV90b19hZGFwdGVyKHdpcGh5KTsKLQlzdHJ1Y3QgbWxtZV9leHRfcHJpdiAqcG1sbWVleHQgPSAmcGFkYXB0ZXItPm1sbWVleHRwcml2OwotCXN0cnVjdCB3aWZpZGlyZWN0X2luZm8gKnB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQlzdHJ1Y3QgY2ZnODAyMTFfd2lmaWRpcmVjdF9pbmZvICpwY2ZnODAyMTFfd2RpbmZvID0KLQkgICAgJnBhZGFwdGVyLT5jZmc4MDIxMV93ZGluZm87Ci0JdTggcmVtYWluX2NoID0KLQkJKHU4KSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCXU4IHJlYWR5X29uX2NoYW5uZWwgPSBmYWxzZTsKLQotCURCR184NzIzQShGVU5DX0FEUFRfRk1UICIgY2g6JXUgZHVyYXRpb246JWRcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpLAotCQkgIHJlbWFpbl9jaCwgZHVyYXRpb24pOwotCi0JaWYgKHBjZmc4MDIxMV93ZGluZm8tPmlzX3JvX2NoID09IHRydWUpIHsKLQkJREJHXzg3MjNBKCIlcywgY2FuY2VsIHJvIGNoIHRpbWVyXG4iLCBfX2Z1bmNfXyk7Ci0KLQkJZGVsX3RpbWVyX3N5bmMoJnBhZGFwdGVyLT5jZmc4MDIxMV93ZGluZm8ucmVtYWluX29uX2NoX3RpbWVyKTsKLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCXAycF9wcm90b2NvbF93a19oZGwyM2EocGFkYXB0ZXIsIFAyUF9ST19DSF9XSyk7Ci0jZW5kaWYKLQl9Ci0KLQlwY2ZnODAyMTFfd2RpbmZvLT5pc19yb19jaCA9IHRydWU7Ci0KLQlpZiAoX0ZBSUwgPT0gcnR3X3B3cl93YWtldXAocGFkYXB0ZXIpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQltZW1jcHkoJnBjZmc4MDIxMV93ZGluZm8tPnJlbWFpbl9vbl9jaF9jaGFubmVsLCBjaGFubmVsLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7Ci0JcGNmZzgwMjExX3dkaW5mby0+cmVtYWluX29uX2NoX2Nvb2tpZSA9ICpjb29raWU7Ci0KLQlydHdfc2Nhbl9hYm9ydDIzYShwYWRhcHRlcik7Ci0JaWYgKHJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkgewotCQlydHdfcDJwX2VuYWJsZTIzYShwYWRhcHRlciwgUDJQX1JPTEVfREVWSUNFKTsKLQkJd2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiktPnAycF9lbmFibGVkID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlydHdfcDJwX3NldF9wcmVfc3RhdGUocHdkaW5mbywgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSk7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCURCR184NzIzQSgiJXMsIHJvbGUgPSVkLCBwMnBfc3RhdGUgPSVkXG4iLCBfX2Z1bmNfXywKLQkJCSAgcnR3X3AycF9yb2xlKHB3ZGluZm8pLCBydHdfcDJwX3N0YXRlKHB3ZGluZm8pKTsKLSNlbmRpZgotCX0KLQotCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9MSVNURU4pOwotCi0JaWYgKGR1cmF0aW9uIDwgNDAwKQotCQlkdXJhdGlvbiA9IGR1cmF0aW9uICogMzsJLyogZXh0ZW5kIGZyb20gZXhwZXIuICovCi0KLQlwY2ZnODAyMTFfd2RpbmZvLT5yZXN0b3JlX2NoYW5uZWwgPSBwbWxtZWV4dC0+Y3VyX2NoYW5uZWw7Ci0KLQlpZiAocnR3X2NoX3NldF9zZWFyY2hfY2gyM2EocG1sbWVleHQtPmNoYW5uZWxfc2V0LCByZW1haW5fY2gpID49IDApIHsKLQkJaWYgKHJlbWFpbl9jaCAhPSBwbWxtZWV4dC0+Y3VyX2NoYW5uZWwpIHsKLQkJCXJlYWR5X29uX2NoYW5uZWwgPSB0cnVlOwotCQl9Ci0JfSBlbHNlIHsKLQkJREJHXzg3MjNBKCIlcyByZW1haW5fY2g6JXUgbm90IGluIGNoYW5uZWwgcGxhbiEhISFcbiIsCi0JCQkgIF9fZnVuY19fLCByZW1haW5fY2gpOwotCX0KLQotCS8qIGNhbGwgdGhpcyBhZnRlciBvdGhlciB0aGluZ3MgaGF2ZSBiZWVuIGRvbmUgKi8KLQlpZiAocmVhZHlfb25fY2hhbm5lbCA9PSB0cnVlKSB7Ci0JCWlmICghY2hlY2tfZndzdGF0ZSgmcGFkYXB0ZXItPm1sbWVwcml2LCBfRldfTElOS0VEKSkgewotCQkJcG1sbWVleHQtPmN1cl9jaGFubmVsID0gcmVtYWluX2NoOwotCi0JCQlzZXRfY2hhbm5lbF9id21vZGUyM2EocGFkYXB0ZXIsIHJlbWFpbl9jaCwKLQkJCQkJICAgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRSwKLQkJCQkJICAgSFRfQ0hBTk5FTF9XSURUSF8yMCk7Ci0JCX0KLQl9Ci0JREJHXzg3MjNBKCIlcywgc2V0IHJvIGNoIHRpbWVyLCBkdXJhdGlvbiA9JWRcbiIsIF9fZnVuY19fLCBkdXJhdGlvbik7Ci0JbW9kX3RpbWVyKCZwY2ZnODAyMTFfd2RpbmZvLT5yZW1haW5fb25fY2hfdGltZXIsCi0JCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoZHVyYXRpb24pKTsKLQotCXJ0d19jZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKHBhZGFwdGVyLCAqY29va2llLCBjaGFubmVsLCBjaGFubmVsX3R5cGUsCi0JCQkJICAgICAgZHVyYXRpb24sIEdGUF9LRVJORUwpOwotCi0JcHdkaW5mby0+bGlzdGVuX2NoYW5uZWwgPSBwbWxtZWV4dC0+Y3VyX2NoYW5uZWw7Ci0KLWV4aXQ6Ci0JaWYgKGVycikKLQkJcGNmZzgwMjExX3dkaW5mby0+aXNfcm9fY2ggPSBmYWxzZTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzMzIgY2ZnODAyMTFfcnR3X2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCQkJIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkJCQkgdTY0IGNvb2tpZSkKLXsKLQlzMzIgZXJyID0gMDsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gd2lwaHlfdG9fYWRhcHRlcih3aXBoeSk7Ci0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbyA9ICZwYWRhcHRlci0+d2RpbmZvOwotCXN0cnVjdCBjZmc4MDIxMV93aWZpZGlyZWN0X2luZm8gKnBjZmc4MDIxMV93ZGluZm8gPQotCSAgICAmcGFkYXB0ZXItPmNmZzgwMjExX3dkaW5mbzsKLQotCURCR184NzIzQShGVU5DX0FEUFRfRk1UICJcbiIsIEZVTkNfQURQVF9BUkcocGFkYXB0ZXIpKTsKLQotCWlmIChwY2ZnODAyMTFfd2RpbmZvLT5pc19yb19jaCA9PSB0cnVlKSB7Ci0JCURCR184NzIzQSgiJXMsIGNhbmNlbCBybyBjaCB0aW1lclxuIiwgX19mdW5jX18pOwotCQlkZWxfdGltZXJfc3luYygmcGFkYXB0ZXItPmNmZzgwMjExX3dkaW5mby5yZW1haW5fb25fY2hfdGltZXIpOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCXAycF9wcm90b2NvbF93a19oZGwyM2EocGFkYXB0ZXIsIFAyUF9ST19DSF9XSyk7Ci0jZW5kaWYKLQl9Ci0KLQlydHdfcDJwX3NldF9zdGF0ZShwd2RpbmZvLCBydHdfcDJwX3ByZV9zdGF0ZShwd2RpbmZvKSk7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JREJHXzg3MjNBKCIlcywgcm9sZSA9JWQsIHAycF9zdGF0ZSA9JWRcbiIsIF9fZnVuY19fLAotCQkgIHJ0d19wMnBfcm9sZShwd2RpbmZvKSwgcnR3X3AycF9zdGF0ZShwd2RpbmZvKSk7Ci0jZW5kaWYKLQlwY2ZnODAyMTFfd2RpbmZvLT5pc19yb19jaCA9IGZhbHNlOwotCi0JcmV0dXJuIGVycjsKLX0KLQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KIHN0YXRpYyBpbnQgX2NmZzgwMjExX3J0d19tZ210X3R4KHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IHR4X2NoLAogCQkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQogewpAQCAtMzcwNCwxMSArMzA0OSw5IEBACiAJc3RydWN0IHBrdF9hdHRyaWIgKnBhdHRyaWI7CiAJdW5zaWduZWQgY2hhciAqcGZyYW1lOwogCWludCByZXQgPSBfRkFJTDsKLQlib29sIGFjayA9IHRydWU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKnB3bGFuaGRyOwogCXN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiA9ICZwYWRhcHRlci0+eG1pdHByaXY7CiAJc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQkvKiBzdHJ1Y3QgY2ZnODAyMTFfd2lmaWRpcmVjdF9pbmZvICpwY2ZnODAyMTFfd2RpbmZvID0gJnBhZGFwdGVyLT5jZmc4MDIxMV93ZGluZm87ICovCiAKIAlpZiAoX0ZBSUwgPT0gcnR3X3B3cl93YWtldXAocGFkYXB0ZXIpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0zNzI5LDcgKzMwNzIsNyBAQAogCiAJLyogc3RhcnRpbmcgYWxsb2MgbWdtdCBmcmFtZSB0byBkdW1wIGl0ICovCiAJcG1nbnRmcmFtZSA9IGFsbG9jX21ndHhtaXRmcmFtZTIzYShweG1pdHByaXYpOwotCWlmIChwbWdudGZyYW1lID09IE5VTEwpIHsKKwlpZiAoIXBtZ250ZnJhbWUpIHsKIAkJLyogcmV0ID0gLUVOT01FTTsgKi8KIAkJcmV0ID0gX0ZBSUw7CiAJCWdvdG8gZXhpdDsKQEAgLTM3NTMsMTM5ICszMDk2LDc2IEBACiAJcGF0dHJpYi0+c2VxbnVtID0gcG1sbWVleHQtPm1nbnRfc2VxOwogCXBtbG1lZXh0LT5tZ250X3NlcSsrOwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQl7Ci0JCXN0cnVjdCB3aWZpX2Rpc3BsYXlfaW5mbyAqcHdmZF9pbmZvOwotCi0JCXB3ZmRfaW5mbyA9IHBhZGFwdGVyLT53ZGluZm8ud2ZkX2luZm87Ci0KLQkJaWYgKHRydWUgPT0gcHdmZF9pbmZvLT53ZmRfZW5hYmxlKSB7Ci0JCQlydHdfYXBwZW5kX3dmZF9pZShwYWRhcHRlciwgcGZyYW1lLCAmcGF0dHJpYi0+cGt0bGVuKTsKLQkJfQotCX0KLSNlbmRpZiAvKiAgQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCXBhdHRyaWItPmxhc3RfdHhjbWRzeiA9IHBhdHRyaWItPnBrdGxlbjsKIAotCWlmIChkdW1wX21nbnRmcmFtZTIzYV9hbmRfd2FpdF9hY2syM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpICE9IF9TVUNDRVNTKSB7Ci0JCWFjayA9IGZhbHNlOwotCQlyZXQgPSBfRkFJTDsKKwlyZXQgPSBkdW1wX21nbnRmcmFtZTIzYV9hbmRfd2FpdF9hY2syM2EocGFkYXB0ZXIsIHBtZ250ZnJhbWUpOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCURCR184NzIzQSgiJXMsIGFjayA9PSBfRkFJTFxuIiwgX19mdW5jX18pOwotI2VuZGlmCi0JfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKLQkJREJHXzg3MjNBKCIlcywgYWNrID0lZCwgb2shXG4iLCBfX2Z1bmNfXywgYWNrKTsKLSNlbmRpZgotCQlyZXQgPSBfU1VDQ0VTUzsKLQl9CisJaWYgKHJldCAgIT0gX1NVQ0NFU1MpCisJCURCR184NzIzQSgiJXMsIGFjayA9PSBmYWxzZVxuIiwgX19mdW5jX18pOworCWVsc2UKKwkJREJHXzg3MjNBKCIlcywgYWNrID09IHRydWVcbiIsIF9fZnVuY19fKTsKIAogZXhpdDoKIAotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQogCURCR184NzIzQSgiJXMsIHJldCA9JWRcbiIsIF9fZnVuY19fLCByZXQpOwotI2VuZGlmCiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNmZzgwMjExX3J0d19tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDMsIDE0LCAwKSkKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCi0JCQkJYm9vbCBvZmZjaGFuLAotCQkJCXVuc2lnbmVkIGludCB3YWl0LAotCQkJCWNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sCi0JCQkJYm9vbCBub19jY2ssIGJvb2wgZG9udF93YWl0X2Zvcl9hY2ssCi0jZWxzZQogCQkJCXN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyAqcGFyYW1zLAotI2VuZGlmCiAJCQkJdTY0ICpjb29raWUpCiB7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9CiAJCShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKil3aXBoeV90b19hZGFwdGVyKHdpcGh5KTsKLQlzdHJ1Y3QgcnR3X3dkZXZfcHJpdiAqcHdkZXZfcHJpdiA9IHdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpOwogCWludCByZXQgPSAwOwogCWludCB0eF9yZXQ7CiAJdTMyIGR1bXBfbGltaXQgPSBSVFdfTUFYX01HTVRfVFhfQ05UOwogCXUzMiBkdW1wX2NudCA9IDA7CiAJYm9vbCBhY2sgPSB0cnVlOwogCXU4IGNhdGVnb3J5LCBhY3Rpb247Ci0JaW50IHR5cGUgPSAoLTEpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywgMTQsIDApKQogCXNpemVfdCBsZW4gPSBwYXJhbXMtPmxlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBwYXJhbXMtPmNoYW47CiAJY29uc3QgdTggKmJ1ZiA9IHBhcmFtcy0+YnVmOwotI2VuZGlmCi0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilidWY7CiAJdTggdHhfY2ggPSAodTgpIGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7CiAKKwlpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBjb29raWUgZ2VuZXJhdGlvbiAqLwogCSpjb29raWUgPSAodW5zaWduZWQgbG9uZylidWY7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKLQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCAiIGxlbiA9JXp1LCBjaCA9JWQiCi0JCSAgIlxuIiwgRlVOQ19BRFBUX0FSRyhwYWRhcHRlciksIGxlbiwgdHhfY2gpOwotI2VuZGlmIC8qIENPTkZJR19ERUJVR19DRkc4MDIxMSAqLworCURCR184NzIzQSgiJXMoJXMpOiBsZW4gPSV6dSwgY2ggPSVkXG4iLCBfX2Z1bmNfXywKKwkJICBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwgbGVuLCB0eF9jaCk7CiAKIAkvKiBpbmRpY2F0ZSBhY2sgYmVmb3JlIGlzc3VlIGZyYW1lIHRvIGF2b2lkIHJhY2luZyB3aXRoIHJzcCBmcmFtZSAqLwotCXJ0d19jZmc4MDIxMV9tZ210X3R4X3N0YXR1cyhwYWRhcHRlciwgKmNvb2tpZSwgYnVmLCBsZW4sIGFjaywKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAocnR3X2FjdGlvbl9mcmFtZV9wYXJzZTIzYShidWYsIGxlbiwgJmNhdGVnb3J5LCAmYWN0aW9uKSA9PSBmYWxzZSkgewotCQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCAiIGZyYW1lX2NvbnRyb2w6MHgleFxuIiwKLQkJCSAgRlVOQ19BRFBUX0FSRyhwYWRhcHRlciksCi0JCQkgIGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpOwotCQlnb3RvIGV4aXQ7Ci0JfQorCWNmZzgwMjExX21nbXRfdHhfc3RhdHVzKHBhZGFwdGVyLT5ydHdfd2RldiwgKmNvb2tpZSwgYnVmLCBsZW4sIGFjaywKKwkJCQlHRlBfS0VSTkVMKTsKIAogCURCR184NzIzQSgiUlRXX1R4OnR4X2NoID0lZCwgZGEgPSIgTUFDX0ZNVCAiXG4iLCB0eF9jaCwKLQkJICBNQUNfQVJHKGhkci0+YWRkcjEpKTsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXR5cGUgPSBydHdfcDJwX2NoZWNrX2ZyYW1lcyhwYWRhcHRlciwgYnVmLCBsZW4sIHRydWUpOwotCWlmICh0eXBlID49IDApCi0JCWdvdG8gZHVtcDsKLSNlbmRpZgorCQkgIE1BQ19BUkcoaGRyLT5kYSkpOworCWNhdGVnb3J5ID0gaGRyLT51LmFjdGlvbi5jYXRlZ29yeTsKKwlhY3Rpb24gPSBoZHItPnUuYWN0aW9uLnUud21lX2FjdGlvbi5hY3Rpb25fY29kZTsKIAlpZiAoY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMpCiAJCURCR184NzIzQSgiUlRXX1R4OiVzXG4iLCBhY3Rpb25fcHVibGljX3N0cjIzYShhY3Rpb24pKTsKIAllbHNlCiAJCURCR184NzIzQSgiUlRXX1R4OmNhdGVnb3J5KCV1KSwgYWN0aW9uKCV1KVxuIiwKIAkJCSAgY2F0ZWdvcnksIGFjdGlvbik7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotZHVtcDoKLSNlbmRpZgogCWRvIHsKIAkJZHVtcF9jbnQrKzsKIAkJdHhfcmV0ID0gX2NmZzgwMjExX3J0d19tZ210X3R4KHBhZGFwdGVyLCB0eF9jaCwgYnVmLCBsZW4pOwogCX0gd2hpbGUgKGR1bXBfY250IDwgZHVtcF9saW1pdCAmJiB0eF9yZXQgIT0gX1NVQ0NFU1MpOwogCiAJaWYgKHR4X3JldCAhPSBfU1VDQ0VTUyB8fCBkdW1wX2NudCA+IDEpIHsKLQkJREJHXzg3MjNBKEZVTkNfQURQVF9GTVQgIiAlcyAoJWQvJWQpIGluICVkIG1zXG4iLAotCQkJICBGVU5DX0FEUFRfQVJHKHBhZGFwdGVyKSwKKwkJREJHXzg3MjNBKCIlcyglcyk6ICVzICglZC8lZCkgaW4gJWQgbXNcbiIsCisJCQkgIF9fZnVuY19fLCBwYWRhcHRlci0+cG5ldGRldi0+bmFtZSwKIAkJCSAgdHhfcmV0ID09IF9TVUNDRVNTID8gIk9LIiA6ICJGQUlMIiwgZHVtcF9jbnQsCiAJCQkgIGR1bXBfbGltaXQsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CiAJfQogCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBQMlBfR09fTkVHT19DT05GOgotCQlydHdfY2xlYXJfc2Nhbl9kZW55KHBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBQMlBfSU5WSVRfUkVTUDoKLQkJaWYgKHB3ZGV2X3ByaXYtPmludml0X2luZm8uZmxhZ3MgJiBCSVQoMCkKLQkJICAgICYmIHB3ZGV2X3ByaXYtPmludml0X2luZm8uc3RhdHVzID09IDApIHsKLQkJCURCR184NzIzQShGVU5DX0FEUFRfRk1UICIgYWdyZWUgd2l0aCBpbnZpdGF0aW9uIG9mICIKLQkJCQkgICJwZXJzaXN0ZW50IGdyb3VwXG4iLAotCQkJCSAgRlVOQ19BRFBUX0FSRyhwYWRhcHRlcikpOwotCQkJcnR3X3NldF9zY2FuX2RlbnkocGFkYXB0ZXIsIDUwMDApOwotCQkJcnR3X3B3cl93YWtldXBfZXgocGFkYXB0ZXIsIDUwMDApOwotCQkJcnR3X2NsZWFyX3NjYW5fZGVueShwYWRhcHRlcik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi1leGl0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM4OTMsMzU4ICszMTczLDEyIEBACiAJCQkJCSAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJCQkJICAgICB1MTYgZnJhbWVfdHlwZSwgYm9vbCByZWcpCiB7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKLQlEQkdfODcyM0EoRlVOQ19BRFBUX0ZNVCAiIGZyYW1lX3R5cGU6JXgsIHJlZzolZFxuIiwKLQkJICBGVU5DX0FEUFRfQVJHKGFkYXB0ZXIpLCBmcmFtZV90eXBlLCByZWcpOwotI2VuZGlmCi0KIAlpZiAoZnJhbWVfdHlwZSAhPSAoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKSkKIAkJcmV0dXJuOwogCiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHJ0d19jZmc4MDIxMV9zZXRfYmVhY29uX3dwc3AycGllKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBjaGFyICpidWYsCi0JCQkJCSAgICBpbnQgbGVuKQotewotCWludCByZXQgPSAwOwotCXVpbnQgd3BzX2llbGVuID0gMDsKLQl1OCAqd3BzX2llOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JdTMyIHAycF9pZWxlbiA9IDA7Ci0JdTMyIHdmZF9pZWxlbiA9IDA7Ci0JdTggKnAycF9pZTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotCXU4IHdwc19vdWlbOF0gPSB7IDB4MCwgMHg1MCwgMHhmMiwgMHgwNCB9OwotI2VuZGlmCi0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7Ci0Jc3RydWN0IG1sbWVfZXh0X3ByaXYgKnBtbG1lZXh0ID0gJnBhZGFwdGVyLT5tbG1lZXh0cHJpdjsKLQotCURCR184NzIzQShGVU5DX05ERVZfRk1UICIgaWVsZW4gPSVkXG4iLCBGVU5DX05ERVZfQVJHKG5kZXYpLCBsZW4pOwotCi0JaWYgKGxlbiA+IDApIHsKLQkJd3BzX2llID0gcnR3X2dldF93cHNfaWUyM2EoYnVmLCBsZW4sIE5VTEwsICZ3cHNfaWVsZW4pOwotCQlpZiAod3BzX2llKSB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCQlEQkdfODcyM0EoImJjbl93cHNfaWVsZW4gPSVkXG4iLCB3cHNfaWVsZW4pOwotI2VuZGlmCi0KLQkJCWlmIChwbWxtZXByaXYtPndwc19iZWFjb25faWUpIHsKLQkJCQlwbWxtZXByaXYtPndwc19iZWFjb25faWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPndwc19iZWFjb25faWUpOwotCQkJCXBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZSA9Ci0JCQkJa21hbGxvYyh3cHNfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+d3BzX2JlYWNvbl9pZSA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQltZW1jcHkocG1sbWVwcml2LT53cHNfYmVhY29uX2llLCB3cHNfaWUsIHdwc19pZWxlbik7Ci0JCQlwbWxtZXByaXYtPndwc19iZWFjb25faWVfbGVuID0gd3BzX2llbGVuOwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCi0JCQl1cGRhdGVfYmVhY29uMjNhKHBhZGFwdGVyLCBfVkVORE9SX1NQRUNJRklDX0lFXywgd3BzX291aSwKLQkJCQkgICAgICB0cnVlKTsKLSNlbmRpZgotCQl9Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJcDJwX2llID0gcnR3X2dldF9wMnBfaWUyM2EoYnVmLCBsZW4sIE5VTEwsICZwMnBfaWVsZW4pOwotCQlpZiAocDJwX2llKSB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCQlEQkdfODcyM0EoImJjbl9wMnBfaWVsZW4gPSVkXG4iLCBwMnBfaWVsZW4pOwotI2VuZGlmCi0KLQkJCWlmIChwbWxtZXByaXYtPnAycF9iZWFjb25faWUpIHsKLQkJCQlwbWxtZXByaXYtPnAycF9iZWFjb25faWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPnAycF9iZWFjb25faWUpOwotCQkJCXBtbG1lcHJpdi0+cDJwX2JlYWNvbl9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+cDJwX2JlYWNvbl9pZSA9Ci0JCQkJa21hbGxvYyhwMnBfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+cDJwX2JlYWNvbl9pZSA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCW1lbWNweShwbWxtZXByaXYtPnAycF9iZWFjb25faWUsIHAycF9pZSwgcDJwX2llbGVuKTsKLQkJCXBtbG1lcHJpdi0+cDJwX2JlYWNvbl9pZV9sZW4gPSBwMnBfaWVsZW47Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCi0JCS8qIGJ1ZiArPSBwMnBfaWVsZW47ICovCi0JCS8qIGxlbiAtPSBwMnBfaWVsZW47ICovCi0KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCQlpZiAocnR3X2dldF93ZmRfaWUoYnVmLCBsZW4sIE5VTEwsICZ3ZmRfaWVsZW4pKSB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0NGRzgwMjExCi0JCQlEQkdfODcyM0EoImJjbl93ZmRfaWVsZW4gPSVkXG4iLCB3ZmRfaWVsZW4pOwotI2VuZGlmCi0KLQkJCWlmIChwbWxtZXByaXYtPndmZF9iZWFjb25faWUpIHsKLQkJCQlwbWxtZXByaXYtPndmZF9iZWFjb25faWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPndmZF9iZWFjb25faWUpOwotCQkJCXBtbG1lcHJpdi0+d2ZkX2JlYWNvbl9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+d2ZkX2JlYWNvbl9pZSA9Ci0JCQkJa21hbGxvYyh3ZmRfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+d2ZkX2JlYWNvbl9pZSA9PSBOVUxMKSB7Ci0JCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCX0KLQkJCXJ0d19nZXRfd2ZkX2llKGJ1ZiwgbGVuLCBwbWxtZXByaXYtPndmZF9iZWFjb25faWUsCi0JCQkJICAgICAgICZwbWxtZXByaXYtPndmZF9iZWFjb25faWVfbGVuKTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR184NzIzQVVfUDJQICovCi0KLQkJcG1sbWVleHQtPmJzdGFydF9ic3MgPSB0cnVlOwotCi0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBydHdfY2ZnODAyMTFfc2V0X3Byb2JlX3Jlc3Bfd3BzcDJwaWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKLQkJCQkJCWNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlzdHJ1Y3QgbWxtZV9wcml2ICpwbWxtZXByaXYgPSAmcGFkYXB0ZXItPm1sbWVwcml2OwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JdTMyIHAycF9pZWxlbiA9IDA7Ci0JdTggKnAycF9pZTsKLQl1MzIgd2ZkX2llbGVuID0gMDsKLSNlbmRpZgotCWludCByZXQgPSAwOwotCXVpbnQgd3BzX2llbGVuID0gMDsKLQl1OCAqd3BzX2llOwotCi0JaWYgKGxlbiA+IDApIHsKLQkJd3BzX2llID0gcnR3X2dldF93cHNfaWUyM2EoYnVmLCBsZW4sIE5VTEwsICZ3cHNfaWVsZW4pOwotCQlpZiAod3BzX2llKSB7Ci0JCQl1aW50IGF0dHJfY29udGVudGxlbiA9IDA7Ci0JCQl1MTYgdWNvbmZpZ19tZXRob2QsICpwdWNvbmZpZ19tZXRob2QgPSBOVUxMOwotCi0JCQlpZiAocG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZSkgewotCQkJCXBtbG1lcHJpdi0+d3BzX3Byb2JlX3Jlc3BfaWVfbGVuID0gMDsKLQkJCQlrZnJlZShwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llKTsKLQkJCQlwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llID0gTlVMTDsKLQkJCX0KLQotCQkJcG1sbWVwcml2LT53cHNfcHJvYmVfcmVzcF9pZSA9Ci0JCQkJa21hbGxvYyh3cHNfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKHBtbG1lcHJpdi0+d3BzX3Byb2JlX3Jlc3BfaWUgPT0gTlVMTCkgewotCQkJCURCR184NzIzQSgiJXMoKS0lZDoga21hbGxvYygpIEVSUk9SIVxuIiwKLQkJCQkJICBfX2Z1bmNfXywgX19MSU5FX18pOwotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQl9Ci0KLQkJCS8qIGFkZCBQVVNIX0JVVFRPTiBjb25maWdfbWV0aG9kIGJ5IGRyaXZlciBzZWxmIGluCi0JCQkgICB3cHNpZSBvZiBwcm9iZV9yZXNwIGF0IEdPIE1vZGUgKi8KLQkJCXB1Y29uZmlnX21ldGhvZCA9ICh1MTYgKilydHdfZ2V0X3dwc19hdHRyX2NvbnRlbnQyM2Eod3BzX2llLCB3cHNfaWVsZW4sCi0JCQkJCQkJICAgICAgV1BTX0FUVFJfQ09ORl9NRVRIT0QsCi0JCQkJCQkJICAgICAgTlVMTCwKLQkJCQkJCQkgICAgICAmYXR0cl9jb250ZW50bGVuKTsKLQkJCWlmIChwdWNvbmZpZ19tZXRob2QpIHsKLQkJCQl1Y29uZmlnX21ldGhvZCA9IFdQU19DTV9QVVNIX0JVVFRPTjsKLQkJCQl1Y29uZmlnX21ldGhvZCA9IGNwdV90b19iZTE2KHVjb25maWdfbWV0aG9kKTsKLQotCQkJCSpwdWNvbmZpZ19tZXRob2QgfD0gdWNvbmZpZ19tZXRob2Q7Ci0JCQl9Ci0KLQkJCW1lbWNweShwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llLCB3cHNfaWUsIHdwc19pZWxlbik7Ci0JCQlwbWxtZXByaXYtPndwc19wcm9iZV9yZXNwX2llX2xlbiA9IHdwc19pZWxlbjsKLQotCQl9Ci0KLQkJLyogYnVmICs9IHdwc19pZWxlbjsgKi8KLQkJLyogbGVuIC09IHdwc19pZWxlbjsgKi8KLQotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JCXAycF9pZSA9IHJ0d19nZXRfcDJwX2llMjNhKGJ1ZiwgbGVuLCBOVUxMLCAmcDJwX2llbGVuKTsKLQkJaWYgKHAycF9pZSkgewotCQkJdTggaXNfR08gPSBmYWxzZTsKLQkJCXUzMiBhdHRyX2NvbnRlbnRsZW4gPSAwOwotCQkJdTE2IGNhcF9hdHRyID0gMDsKLQotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQotCQkJREJHXzg3MjNBKCJwcm9iZV9yZXNwX3AycF9pZWxlbiA9JWRcbiIsIHAycF9pZWxlbik7Ci0jZW5kaWYKLQotCQkJLyogQ2hlY2sgUDJQIENhcGFiaWxpdHkgQVRUUiAqLwotCQkJaWYgKHJ0d19nZXRfcDJwX2F0dHIyM2FfY29udGVudChwMnBfaWUsIHAycF9pZWxlbiwKLQkJCQkJCSAgICAgUDJQX0FUVFJfQ0FQQUJJTElUWSwKLQkJCQkJCSAgICAgKHU4ICopICZjYXBfYXR0ciwKLQkJCQkJCSAgICAgKHVpbnQgKikgJmF0dHJfY29udGVudGxlbikpIHsKLQkJCQl1OCBncnBfY2FwID0gMDsKLQkJCQkvKiBEQkdfODcyM0EoICJbJXNdIEdvdCBQMlAgQ2FwYWJpbGl0eSBBdHRyISFcbiIsIF9fZnVuY19fICk7ICovCi0JCQkJY2FwX2F0dHIgPSBsZTE2X3RvX2NwdShjYXBfYXR0cik7Ci0JCQkJZ3JwX2NhcCA9ICh1OCkgKChjYXBfYXR0ciA+PiA4KSAmIDB4ZmYpOwotCi0JCQkJaXNfR08gPSAoZ3JwX2NhcCAmIEJJVCgwKSkgPyB0cnVlIDogZmFsc2U7Ci0KLQkJCQlpZiAoaXNfR08pCi0JCQkJCURCR184NzIzQQotCQkJCQkgICAgKCJHb3QgUDJQIENhcGFiaWxpdHkgQXR0ciwgZ3JwX2NhcCIKLQkJCQkJICAgICAiPSAweCV4LCBpc19HT1xuIiwgZ3JwX2NhcCk7Ci0JCQl9Ci0KLQkJCWlmIChpc19HTyA9PSBmYWxzZSkgewotCQkJCWlmIChwbWxtZXByaXYtPnAycF9wcm9iZV9yZXNwX2llKSB7Ci0JCQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWVfbGVuID0gMDsKLQkJCQkJa2ZyZWUocG1sbWVwcml2LT5wMnBfcHJvYmVfcmVzcF9pZSk7Ci0JCQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWUgPSBOVUxMOwotCQkJCX0KLQotCQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWUgPQotCQkJCSAgICBrbWFsbG9jKHAycF9pZWxlbiwgR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKHBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWUgPT0gTlVMTCkgewotCQkJCQlEQkdfODcyM0EoIiVzKCktJWQ6IGttYWxsb2MoKSBFUlJPUiFcbiIsCi0JCQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQltZW1jcHkocG1sbWVwcml2LT5wMnBfcHJvYmVfcmVzcF9pZSwgcDJwX2llLAotCQkJCSAgICAgICBwMnBfaWVsZW4pOwotCQkJCXBtbG1lcHJpdi0+cDJwX3Byb2JlX3Jlc3BfaWVfbGVuID0gcDJwX2llbGVuOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocG1sbWVwcml2LT5wMnBfZ29fcHJvYmVfcmVzcF9pZSkgewotCQkJCQlwbWxtZXByaXYtPnAycF9nb19wcm9iZV9yZXNwX2llX2xlbiA9IDA7Ci0JCQkJCWtmcmVlKHBtbG1lcHJpdi0+cDJwX2dvX3Byb2JlX3Jlc3BfaWUpOwotCQkJCQlwbWxtZXByaXYtPnAycF9nb19wcm9iZV9yZXNwX2llID0gTlVMTDsKLQkJCQl9Ci0KLQkJCQlwbWxtZXByaXYtPnAycF9nb19wcm9iZV9yZXNwX2llID0KLQkJCQkgICAga21hbGxvYyhwMnBfaWVsZW4sIEdGUF9LRVJORUwpOwotCQkJCWlmIChwbWxtZXByaXYtPnAycF9nb19wcm9iZV9yZXNwX2llID09IE5VTEwpIHsKLQkJCQkJREJHXzg3MjNBKCIlcygpLSVkOiBrbWFsbG9jKCkgRVJST1IhXG4iLAotCQkJCQkJICBfX2Z1bmNfXywgX19MSU5FX18pOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJCX0KLQkJCQltZW1jcHkocG1sbWVwcml2LT5wMnBfZ29fcHJvYmVfcmVzcF9pZSwKLQkJCQkgICAgICAgcDJwX2llLCBwMnBfaWVsZW4pOwotCQkJCXBtbG1lcHJpdi0+cDJwX2dvX3Byb2JlX3Jlc3BfaWVfbGVuID0gcDJwX2llbGVuOwotCQkJfQotCQl9Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQotCQkvKiBidWYgKz0gcDJwX2llbGVuOyAqLwotCQkvKiBsZW4gLT0gcDJwX2llbGVuOyAqLwotCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkJaWYgKHJ0d19nZXRfd2ZkX2llKGJ1ZiwgbGVuLCBOVUxMLCAmd2ZkX2llbGVuKSkgewotI2lmZGVmIENPTkZJR19ERUJVR19DRkc4MDIxMQotCQkJREJHXzg3MjNBKCJwcm9iZV9yZXNwX3dmZF9pZWxlbiA9JWRcbiIsIHdmZF9pZWxlbik7Ci0jZW5kaWYKLQotCQkJaWYgKHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWUpIHsKLQkJCQlwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llX2xlbiA9IDA7Ci0JCQkJa2ZyZWUocG1sbWVwcml2LT53ZmRfcHJvYmVfcmVzcF9pZSk7Ci0JCQkJcG1sbWVwcml2LT53ZmRfcHJvYmVfcmVzcF9pZSA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWUgPQotCQkJICAgIGttYWxsb2Mod2ZkX2llbGVuLCBHRlBfS0VSTkVMKTsKLQkJCWlmIChwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llID09IE5VTEwpIHsKLQkJCQlEQkdfODcyM0EoIiVzKCktJWQ6IGttYWxsb2MoKSBFUlJPUiFcbiIsCi0JCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJfQotCQkJcnR3X2dldF93ZmRfaWUoYnVmLCBsZW4sIHBtbG1lcHJpdi0+d2ZkX3Byb2JlX3Jlc3BfaWUsCi0JCQkJICAgICAgICZwbWxtZXByaXYtPndmZF9wcm9iZV9yZXNwX2llX2xlbik7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcnR3X2NmZzgwMjExX3NldF9hc3NvY19yZXNwX3dwc3AycGllKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCi0JCQkJCQljaGFyICpidWYsIGludCBsZW4pCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3RydWN0IG1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKLQotCURCR184NzIzQSgiJXMsIGllbGVuID0lZFxuIiwgX19mdW5jX18sIGxlbik7Ci0KLQlpZiAobGVuID4gMCkgewotCQlpZiAocG1sbWVwcml2LT53cHNfYXNzb2NfcmVzcF9pZSkgewotCQkJcG1sbWVwcml2LT53cHNfYXNzb2NfcmVzcF9pZV9sZW4gPSAwOwotCQkJa2ZyZWUocG1sbWVwcml2LT53cHNfYXNzb2NfcmVzcF9pZSk7Ci0JCQlwbWxtZXByaXYtPndwc19hc3NvY19yZXNwX2llID0gTlVMTDsKLQkJfQotCi0JCXBtbG1lcHJpdi0+d3BzX2Fzc29jX3Jlc3BfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChwbWxtZXByaXYtPndwc19hc3NvY19yZXNwX2llID09IE5VTEwpIHsKLQkJCURCR184NzIzQSgiJXMoKS0lZDoga21hbGxvYygpIEVSUk9SIVxuIiwKLQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQl9Ci0JCW1lbWNweShwbWxtZXByaXYtPndwc19hc3NvY19yZXNwX2llLCBidWYsIGxlbik7Ci0JCXBtbG1lcHJpdi0+d3BzX2Fzc29jX3Jlc3BfaWVfbGVuID0gbGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBydHdfY2ZnODAyMTFfc2V0X21nbnRfd3BzcDJwaWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgY2hhciAqYnVmLCBpbnQgbGVuLAotCQkJCSAgIGludCB0eXBlKQotewotCWludCByZXQgPSAwOwotCXVpbnQgd3BzX2llbGVuID0gMDsKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXUzMiBwMnBfaWVsZW4gPSAwOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfQ0ZHODAyMTEKLQlEQkdfODcyM0EoIiVzLCBpZWxlbiA9JWRcbiIsIF9fZnVuY19fLCBsZW4pOwotI2VuZGlmCi0KLQlpZiAoKHJ0d19nZXRfd3BzX2llMjNhKGJ1ZiwgbGVuLCBOVUxMLCAmd3BzX2llbGVuKSAmJiAod3BzX2llbGVuID4gMCkpCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkgICAgfHwgKHJ0d19nZXRfcDJwX2llMjNhKGJ1ZiwgbGVuLCBOVUxMLCAmcDJwX2llbGVuKSAmJiAocDJwX2llbGVuID4gMCkpCi0jZW5kaWYKLQkgICAgKSB7Ci0JCWlmIChuZXQpIHsKLQkJCXN3aXRjaCAodHlwZSkgewotCQkJY2FzZSAweDE6CS8qIEJFQUNPTiAqLwotCQkJCXJldCA9Ci0JCQkJICAgIHJ0d19jZmc4MDIxMV9zZXRfYmVhY29uX3dwc3AycGllKG5ldCwgYnVmLAotCQkJCQkJCQkgICAgIGxlbik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MjoJLyogUFJPQkVfUkVTUCAqLwotCQkJCXJldCA9Ci0JCQkJICAgIHJ0d19jZmc4MDIxMV9zZXRfcHJvYmVfcmVzcF93cHNwMnBpZShuZXQsCi0JCQkJCQkJCQkgYnVmLAotCQkJCQkJCQkJIGxlbik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDoJLyogQVNTT0NfUkVTUCAqLwotCQkJCXJldCA9Ci0JCQkJICAgIHJ0d19jZmc4MDIxMV9zZXRfYXNzb2NfcmVzcF93cHNwMnBpZShuZXQsCi0JCQkJCQkJCQkgYnVmLAotCQkJCQkJCQkJIGxlbik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotCi19Ci0KIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHJ0d19jZmc4MDIxMV9vcHMgPSB7CiAJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBjZmc4MDIxMV9ydHdfY2hhbmdlX2lmYWNlLAogCS5hZGRfa2V5ID0gY2ZnODAyMTFfcnR3X2FkZF9rZXksCkBAIC00MjgwLDExICszMjE0LDYgQEAKIAkuY2hhbmdlX2JzcyA9IGNmZzgwMjExX3J0d19jaGFuZ2VfYnNzLAogI2VuZGlmIC8qIENPTkZJR184NzIzQVVfQVBfTU9ERSAqLwogCi0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQkucmVtYWluX29uX2NoYW5uZWwgPSBjZmc4MDIxMV9ydHdfcmVtYWluX29uX2NoYW5uZWwsCi0JLmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCA9IGNmZzgwMjExX3J0d19jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwsCi0jZW5kaWYKLQogCS5tZ210X3R4ID0gY2ZnODAyMTFfcnR3X21nbXRfdHgsCiAJLm1nbXRfZnJhbWVfcmVnaXN0ZXIgPSBjZmc4MDIxMV9ydHdfbWdtdF9mcmFtZV9yZWdpc3RlciwKIH07CkBAIC00MzQ4LDcgKzMyNzcsNyBAQAogCXN0cnVjdCB3aXJlbGVzc19kZXYgKnB3ZGV2ID0gcGFkYXB0ZXItPnJ0d193ZGV2OwogCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBwd2Rldi0+d2lwaHk7CiAKLQlydHcyM2FfaGFsX2dldF9od3JlZyhwYWRhcHRlciwgSFdfVkFSX1JGX1RZUEUsICh1OCAqKSgmcmZfdHlwZSkpOworCXJmX3R5cGUgPSBydGw4NzIzYV9nZXRfcmZfdHlwZShwYWRhcHRlcik7CiAKIAlEQkdfODcyM0EoIiVzOnJmX3R5cGUgPSVkXG4iLCBfX2Z1bmNfXywgcmZfdHlwZSk7CiAKQEAgLTQzODgsOSArMzMxNyw2IEBACiAjaWZkZWYgQ09ORklHXzg3MjNBVV9BUF9NT0RFCiAJICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgfAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfODcyM0FVX1AyUCkKLQkgICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfAotI2VuZGlmCiAJICAgIDA7CiAKICNpZmRlZiBDT05GSUdfODcyM0FVX0FQX01PREUKQEAgLTQ0NDAsMjIgKzMzNjYsMjQgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBleGl0OwogCX0KLQlzZXRfd2lwaHlfZGV2KHdpcGh5LCBkZXYpOwotCXJ0d19jZmc4MDIxMV9wcmVpbml0X3dpcGh5KHBhZGFwdGVyLCB3aXBoeSk7Ci0KLQlyZXQgPSB3aXBoeV9yZWdpc3Rlcih3aXBoeSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJREJHXzg3MjNBKCJDb3VsZG4ndCByZWdpc3RlciB3aXBoeSBkZXZpY2VcbiIpOwotCQlnb3RvIGZyZWVfd2lwaHk7Ci0JfQogCiAJLyogIHdkZXYgKi8KIAl3ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdpcmVsZXNzX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghd2RldikgewogCQlEQkdfODcyM0EoIkNvdWxkbid0IGFsbG9jYXRlIHdpcmVsZXNzIGRldmljZVxuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gdW5yZWdpc3Rlcl93aXBoeTsKKwkJZ290byBmcmVlX3dpcGh5OwogCX0KKworCXNldF93aXBoeV9kZXYod2lwaHksIGRldik7CisJcnR3X2NmZzgwMjExX3ByZWluaXRfd2lwaHkocGFkYXB0ZXIsIHdpcGh5KTsKKworCXJldCA9IHdpcGh5X3JlZ2lzdGVyKHdpcGh5KTsKKwlpZiAocmV0IDwgMCkgeworCQlEQkdfODcyM0EoIkNvdWxkbid0IHJlZ2lzdGVyIHdpcGh5IGRldmljZVxuIik7CisJCWdvdG8gZnJlZV93ZGV2OworCX0KKwogCXdkZXYtPndpcGh5ID0gd2lwaHk7CiAJd2Rldi0+bmV0ZGV2ID0gcG5ldGRldjsKIAkvKiB3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOyAqLwpAQCAtNDQ3NCw4ICszNDAyLDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmcHdkZXZfcHJpdi0+c2Nhbl9yZXFfbG9jayk7CiAKIAlwd2Rldl9wcml2LT5wMnBfZW5hYmxlZCA9IGZhbHNlOwotCXB3ZGV2X3ByaXYtPnByb3ZkaXNjX3JlcV9pc3N1ZWQgPSBmYWxzZTsKLQlydHdfd2Rldl9pbnZpdF9pbmZvX2luaXQoJnB3ZGV2X3ByaXYtPmludml0X2luZm8pOwogCiAJaWYgKHBhZGFwdGVyLT5yZWdpc3RyeXByaXYucG93ZXJfbWdudCAhPSBQU19NT0RFX0FDVElWRSkKIAkJcHdkZXZfcHJpdi0+cG93ZXJfbWdtdCA9IHRydWU7CkBAIC00NDgzLDggKzM0MDksOCBAQAogCQlwd2Rldl9wcml2LT5wb3dlcl9tZ210ID0gZmFsc2U7CiAKIAlyZXR1cm4gcmV0OwotdW5yZWdpc3Rlcl93aXBoeToKLQl3aXBoeV91bnJlZ2lzdGVyKHdpcGh5KTsKK2ZyZWVfd2RldjoKKwlrZnJlZSh3ZGV2KTsKIGZyZWVfd2lwaHk6CiAJd2lwaHlfZnJlZSh3aXBoeSk7CiBleGl0OgpAQCAtNDQ5MywxNSArMzQxOSwxMSBAQAogCiB2b2lkIHJ0d193ZGV2X2ZyZWUoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIHsKLQlzdHJ1Y3QgcnR3X3dkZXZfcHJpdiAqcHdkZXZfcHJpdjsKLQogCURCR184NzIzQSgiJXMod2RldiA9JXApXG4iLCBfX2Z1bmNfXywgd2Rldik7CiAKIAlpZiAoIXdkZXYpCiAJCXJldHVybjsKIAotCXB3ZGV2X3ByaXYgPSB3ZGV2X3RvX3ByaXYod2Rldik7Ci0KIAlrZnJlZSh3ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0pOwogCWtmcmVlKHdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL21sbWVfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL21sbWVfbGludXguYwppbmRleCBiMzBkNGQzLi5hYzYxOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9tbG1lX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvbWxtZV9saW51eC5jCkBAIC0yMCwyMiArMjAsNiBAQAogI2luY2x1ZGUgPG1sbWVfb3NkZXAuaD4KICNpbmNsdWRlIDxydHdfaW9jdGxfc2V0Lmg+CiAKLXZvaWQgcnR3X29zX2luZGljYXRlX2Nvbm5lY3QyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyKQotewotCXJ0d19jZmc4MDIxMV9pbmRpY2F0ZV9jb25uZWN0KGFkYXB0ZXIpOwotCi0JbmV0aWZfY2Fycmllcl9vbihhZGFwdGVyLT5wbmV0ZGV2KTsKLQotCWlmIChhZGFwdGVyLT5waWRbMl0gIT0gMCkKLQkJcnR3X3NpZ25hbF9wcm9jZXNzKGFkYXB0ZXItPnBpZFsyXSwgU0lHQUxSTSk7Ci19Ci0KLXZvaWQgcnR3X29zX2luZGljYXRlX3NjYW5fZG9uZTIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBib29sIGFib3J0ZWQpCi17Ci0JcnR3X2NmZzgwMjExX2luZGljYXRlX3NjYW5fZG9uZSh3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KSwKLQkJCQkJYWJvcnRlZCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcnRfcG1raWRfbGlzdCBiYWNrdXBQTUtJRExpc3RbTlVNX1BNS0lEX0NBQ0hFXTsKIAogdm9pZCBydHdfcmVzZXRfc2VjdXJpdHlwcml2MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqYWRhcHRlcikKQEAgLTUyLDkgKzM2LDYgQEAKIAkJICogIFdoZW4gdGhlIGNvdW50ZXJtZWFzdXJlIGlzIHRyaWdnZXIsIHRoZSBkcml2ZXIgaGF2ZSB0bwogCQkgKiAgZGlzY29ubmVjdCB3aXRoIEFQIGZvciA2MCBzZWNvbmRzLgogCQkgKi8KLQkJbWVtc2V0KCZiYWNrdXBQTUtJRExpc3RbMF0sIDB4MDAsIHNpemVvZihzdHJ1Y3QgcnRfcG1raWRfbGlzdCkgKgotCQkgICAgICAgTlVNX1BNS0lEX0NBQ0hFKTsKLQogCQltZW1jcHkoJmJhY2t1cFBNS0lETGlzdFswXSwgJmFkYXB0ZXItPnNlY3VyaXR5cHJpdi5QTUtJRExpc3RbMF0sCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Bta2lkX2xpc3QpICogTlVNX1BNS0lEX0NBQ0hFKTsKIAkJYmFja3VwUE1LSURJbmRleCA9IGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5QTUtJREluZGV4OwpAQCAtNzksMTAgKzYwLDEwIEBACiAKIAkJLyogb3BlbiBzeXN0ZW0gKi8KIAkJcHNlY19wcml2LT5kb3QxMUF1dGhBbGdydGhtID0gZG90MTFBdXRoQWxncnRobV9PcGVuOwotCQlwc2VjX3ByaXYtPmRvdDExUHJpdmFjeUFsZ3J0aG0gPSBfTk9fUFJJVkFDWV87CisJCXBzZWNfcHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9IDA7CiAJCXBzZWNfcHJpdi0+ZG90MTFQcml2YWN5S2V5SW5kZXggPSAwOwogCi0JCXBzZWNfcHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSBfTk9fUFJJVkFDWV87CisJCXBzZWNfcHJpdi0+ZG90MTE4MDIxWEdycFByaXZhY3kgPSAwOwogCQlwc2VjX3ByaXYtPmRvdDExODAyMVhHcnBLZXlpZCA9IDE7CiAKIAkJcHNlY19wcml2LT5uZGlzYXV0aHR5cGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOwpAQCAtOTksODkgKzgwLDMgQEAKIAogCXJ0d19yZXNldF9zZWN1cml0eXByaXYyM2EoYWRhcHRlcik7CiB9Ci0KLXZvaWQgcnR3X3JlcG9ydF9zZWNfaWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICphZGFwdGVyLCB1OCBhdXRobW9kZSwgdTggKnNlY19pZSkKLXsKLQl1aW50CWxlbjsKLQl1OAkqYnVmZiwgKnAsIGk7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0JUlRfVFJBQ0UoX21vZHVsZV9tbG1lX29zZGVwX2NfLCBfZHJ2X2luZm9fLAotCQkgKCIrcnR3X3JlcG9ydF9zZWNfaWUyM2EsIGF1dGhtb2RlID0lZFxuIiwgYXV0aG1vZGUpKTsKLQotCWJ1ZmYgPSBOVUxMOwotCWlmIChhdXRobW9kZSA9PSBfV1BBX0lFX0lEXykgewotCQlSVF9UUkFDRShfbW9kdWxlX21sbWVfb3NkZXBfY18sIF9kcnZfaW5mb18sCi0JCQkgKCJydHdfcmVwb3J0X3NlY19pZTIzYSwgYXV0aG1vZGUgPSVkXG4iLCBhdXRobW9kZSkpOwotCi0JCWJ1ZmYgPSBremFsbG9jKElXX0NVU1RPTV9NQVgsIEdGUF9LRVJORUwpOwotCQlpZiAoIWJ1ZmYpCi0JCQlyZXR1cm47Ci0JCXAgPSBidWZmOwotCi0JCXAgKz0gc3ByaW50ZihwLCAiQVNTT0NJTkZPKFJlcUlFcyA9Iik7Ci0KLQkJbGVuID0gc2VjX2llWzFdKzI7Ci0JCWxlbiA9ICAobGVuIDwgSVdfQ1VTVE9NX01BWCkgPyBsZW4gOiBJV19DVVNUT01fTUFYOwotCi0JCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJCXAgKz0gc3ByaW50ZihwLCAiJTAyeCIsIHNlY19pZVtpXSk7Ci0KLQkJcCArPSBzcHJpbnRmKHAsICIpIik7Ci0KLQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCi0JCXdycXUuZGF0YS5sZW5ndGggPSBwLWJ1ZmY7Ci0KLQkJd3JxdS5kYXRhLmxlbmd0aCA9ICh3cnF1LmRhdGEubGVuZ3RoIDwgSVdfQ1VTVE9NX01BWCkgPwotCQkJCSAgIHdycXUuZGF0YS5sZW5ndGggOiBJV19DVVNUT01fTUFYOwotCi0JCWtmcmVlKGJ1ZmYpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR184NzIzQVVfQVBfTU9ERQotdm9pZCBydHdfaW5kaWNhdGVfc3RhX2Fzc29jX2V2ZW50MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsCi0JCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnBzdGEpCi17Ci0Jc3RydWN0IHN0YV9wcml2ICpwc3RhcHJpdiA9ICZwYWRhcHRlci0+c3RhcHJpdjsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLQlpZiAocHN0YSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAocHN0YS0+YWlkID4gTlVNX1NUQSkKLQkJcmV0dXJuOwotCi0JaWYgKHBzdGFwcml2LT5zdGFfYWlkW3BzdGEtPmFpZCAtIDFdICE9IHBzdGEpCi0JCXJldHVybjsKLQotCXdycXUuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0KLQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIHBzdGEtPmh3YWRkciwgRVRIX0FMRU4pOwotCi0JREJHXzg3MjNBKCIrcnR3X2luZGljYXRlX3N0YV9hc3NvY19ldmVudDIzYVxuIik7Ci19Ci0KLXZvaWQgcnR3X2luZGljYXRlX3N0YV9kaXNhc3NvY19ldmVudDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpwc3RhKQotewotCXN0cnVjdCBzdGFfcHJpdiAqcHN0YXByaXYgPSAmcGFkYXB0ZXItPnN0YXByaXY7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0JaWYgKHBzdGEgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKHBzdGEtPmFpZCA+IE5VTV9TVEEpCi0JCXJldHVybjsKLQotCWlmIChwc3RhcHJpdi0+c3RhX2FpZFtwc3RhLT5haWQgLSAxXSAhPSBwc3RhKQotCQlyZXR1cm47Ci0KLQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCi0JbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBwc3RhLT5od2FkZHIsIEVUSF9BTEVOKTsKLQotCURCR184NzIzQSgiK3J0d19pbmRpY2F0ZV9zdGFfZGlzYXNzb2NfZXZlbnQyM2FcbiIpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9vc19pbnRmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvb3NfaW50ZnMuYwppbmRleCA0ZmU3NTFmLi40ZTMyMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9vc19pbnRmcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL29zX2ludGZzLmMKQEAgLTIwLDEwICsyMCw4IEBACiAjaW5jbHVkZSA8cmVjdl9vc2RlcC5oPgogI2luY2x1ZGUgPGhhbF9pbnRmLmg+CiAjaW5jbHVkZSA8cnR3X3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxldGhlcm5ldC5oPgogCi0jaW5jbHVkZSA8dXNiX29zaW50Zi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxydGw4NzIzYV9oYWwuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWFsdGVrIFdpcmVsZXNzIExhbiBEcml2ZXIiKTsKQEAgLTY2LDEwICs2NCwxMCBAQAogc3RhdGljIGludCBydHdfd21tX2VuYWJsZSA9IDE7LyogIGRlZmF1bHQgaXMgc2V0IHRvIGVuYWJsZSB0aGUgd21tLiAqLwogc3RhdGljIGludCBydHdfdWFwc2RfZW5hYmxlOwogCi1pbnQgcnR3X2h0X2VuYWJsZTIzQSA9IDE7CitzdGF0aWMgaW50IHJ0d19odF9lbmFibGUgPSAxOwogLyogMCA6ZGlhYmxlLCBiaXQoMCk6IGVuYWJsZSAyLjRnLCBiaXQoMSk6IGVuYWJsZSA1ZyAqLwotaW50IHJ0d19jYnc0MF9lbmFibGUyM0EgPSAzOwotaW50IHJ0d19hbXBkdV9lbmFibGUyM0EgPSAxOy8qIGZvciBlbmFibGUgdHhfYW1wZHUgKi8KK3N0YXRpYyBpbnQgcnR3X2NidzQwX2VuYWJsZSA9IDM7CitzdGF0aWMgaW50IHJ0d19hbXBkdV9lbmFibGUgPSAxOy8qIGZvciBlbmFibGUgdHhfYW1wZHUgKi8KIC8qICAwOiBkaXNhYmxlLCBiaXQoMCk6ZW5hYmxlIDIuNGcsIGJpdCgxKTplbmFibGUgNWcsIGRlZmF1bHQgaXMgc2V0IHRvIGVuYWJsZQogICogMi40R0haIGZvciBJT1QgaXNzdWUgd2l0aCBidWZmbGFvJ3MgQVAgYXQgNUdIWgogICovCkBAIC0xMzAsOSArMTI4LDkgQEAKIG1vZHVsZV9wYXJhbShydHdfdnJ0bF9jYXJyaWVyX3NlbnNlLCBpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKHJ0d192Y3NfdHlwZSwgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShydHdfYnVzeV90aHJlc2gsIGludCwgMDY0NCk7Ci1tb2R1bGVfcGFyYW0ocnR3X2h0X2VuYWJsZTIzQSwgaW50LCAwNjQ0KTsKLW1vZHVsZV9wYXJhbShydHdfY2J3NDBfZW5hYmxlMjNBLCBpbnQsIDA2NDQpOwotbW9kdWxlX3BhcmFtKHJ0d19hbXBkdV9lbmFibGUyM0EsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0ocnR3X2h0X2VuYWJsZSwgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShydHdfY2J3NDBfZW5hYmxlLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHJ0d19hbXBkdV9lbmFibGUsIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0ocnR3X3J4X3N0YmMsIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0ocnR3X2FtcGR1X2Ftc2R1LCBpbnQsIDA2NDQpOwogCkBAIC0xNzIsMTAgKzE3MCwxMCBAQAogCiBzdGF0aWMgaW50IG5ldGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldik7CiAKLXN0YXRpYyB1aW50IGxvYWRwYXJhbShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCAgc3RydWN0IG5ldF9kZXZpY2UgKnBuZXRkZXYpCitzdGF0aWMgaW50IGxvYWRwYXJhbShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCAgc3RydWN0IG5ldF9kZXZpY2UgKnBuZXRkZXYpCiB7CiAJc3RydWN0IHJlZ2lzdHJ5X3ByaXYgICpyZWdpc3RyeV9wYXIgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKLQl1aW50IHN0YXR1cyA9IF9TVUNDRVNTOworCWludCBzdGF0dXMgPSBfU1VDQ0VTUzsKIAogCUdsb2JhbERlYnVnTGV2ZWwyM0EgPSBydHdfZGVidWc7CiAJcmVnaXN0cnlfcGFyLT5jaGlwX3ZlcnNpb24gPSAodTgpcnR3X2NoaXBfdmVyc2lvbjsKQEAgLTIwMyw5ICsyMDEsOSBAQAogCSAvKiBVQVBTRCAqLwogCXJlZ2lzdHJ5X3Bhci0+d21tX2VuYWJsZSA9ICh1OClydHdfd21tX2VuYWJsZTsKIAlyZWdpc3RyeV9wYXItPnVhcHNkX2VuYWJsZSA9ICh1OClydHdfdWFwc2RfZW5hYmxlOwotCXJlZ2lzdHJ5X3Bhci0+aHRfZW5hYmxlID0gKHU4KXJ0d19odF9lbmFibGUyM0E7Ci0JcmVnaXN0cnlfcGFyLT5jYnc0MF9lbmFibGUgPSAodTgpcnR3X2NidzQwX2VuYWJsZTIzQTsKLQlyZWdpc3RyeV9wYXItPmFtcGR1X2VuYWJsZSA9ICh1OClydHdfYW1wZHVfZW5hYmxlMjNBOworCXJlZ2lzdHJ5X3Bhci0+aHRfZW5hYmxlID0gKHU4KXJ0d19odF9lbmFibGU7CisJcmVnaXN0cnlfcGFyLT5jYnc0MF9lbmFibGUgPSAodTgpcnR3X2NidzQwX2VuYWJsZTsKKwlyZWdpc3RyeV9wYXItPmFtcGR1X2VuYWJsZSA9ICh1OClydHdfYW1wZHVfZW5hYmxlOwogCXJlZ2lzdHJ5X3Bhci0+cnhfc3RiYyA9ICh1OClydHdfcnhfc3RiYzsKIAlyZWdpc3RyeV9wYXItPmFtcGR1X2Ftc2R1ID0gKHU4KXJ0d19hbXBkdV9hbXNkdTsKIAlyZWdpc3RyeV9wYXItPmxvd3JhdGVfdHdvX3htaXQgPSAodTgpcnR3X2xvd3JhdGVfdHdvX3htaXQ7CkBAIC0yNzQsOSArMjcyLDkgQEAKIHN0YXRpYyBjb25zdCB1MTYgcnR3XzFkX3RvX3F1ZXVlWzhdID0geyAyLCAzLCAzLCAyLCAxLCAxLCAwLCAwIH07CiAKIC8qIEdpdmVuIGEgZGF0YSBmcmFtZSBkZXRlcm1pbmUgdGhlIDgwMi4xcC8xZCB0YWcgdG8gdXNlLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBydHdfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHUzMiBydHdfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXVuc2lnbmVkIGludCBkc2NwOworCXUzMiBkc2NwOwogCiAJLyogc2tiLT5wcmlvcml0eSB2YWx1ZXMgZnJvbSAyNTYtPjI2MyBhcmUgbWFnaWMgdmFsdWVzIHRvCiAJICogZGlyZWN0bHkgaW5kaWNhdGUgYSBzcGVjaWZpYyA4MDIuMWQgcHJpb3JpdHkuICBUaGlzIGlzIHVzZWQKQEAgLTMxMiwxNCArMzEwLDE0IEBACiB1MTYgcnR3X3JlY3Zfc2VsZWN0X3F1ZXVlMjNhKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICpwaXBoZHI7CisJc3RydWN0IGV0aGhkciAqZXRoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAJdW5zaWduZWQgaW50IGRzY3A7Ci0JdTE2IGV0aF90eXBlOworCXUxNiBldGhfdHlwZSA9IGdldF91bmFsaWduZWRfYmUxNigmZXRoLT5oX3Byb3RvKTsKIAl1MzIgcHJpb3JpdHk7CiAJdTggKnBkYXRhID0gc2tiLT5kYXRhOwogCi0JbWVtY3B5KCZldGhfdHlwZSwgcGRhdGEgKyAoRVRIX0FMRU4gPDwgMSksIDIpOwogCXN3aXRjaCAoZXRoX3R5cGUpIHsKLQljYXNlIGh0b25zKEVUSF9QX0lQKToKKwljYXNlIEVUSF9QX0lQOgogCQlwaXBoZHIgPSAoc3RydWN0IGlwaGRyICopKHBkYXRhICsgRVRIX0hMRU4pOwogCQlkc2NwID0gcGlwaGRyLT50b3MgJiAweGZjOwogCQlwcmlvcml0eSA9IGRzY3AgPj4gNTsKQEAgLTM3OCw0MiArMzc2LDEzIEBACiAJcmV0dXJuIHBuZXRkZXY7CiB9CiAKLXUzMiBydHdfc3RhcnRfZHJ2X3RocmVhZHMyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQl1MzIgX3N0YXR1cyA9IF9TVUNDRVNTOwotCi0JUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywKLQkJICgiK3J0d19zdGFydF9kcnZfdGhyZWFkczIzYVxuIikpOwotCXBhZGFwdGVyLT5jbWRUaHJlYWQgPSBrdGhyZWFkX3J1bihydHdfY21kX3RocmVhZDIzYSwgcGFkYXB0ZXIsCi0JCQkJCSAgIlJUV19DTURfVEhSRUFEIik7Ci0JaWYgKElTX0VSUihwYWRhcHRlci0+Y21kVGhyZWFkKSkgewotCQlfc3RhdHVzID0gX0ZBSUw7Ci0JfSBlbHNlIHsKLQkJLyogd2FpdCBmb3IgY21kX3RocmVhZCB0byBydW4gKi8KLQkJZG93bigmcGFkYXB0ZXItPmNtZHByaXYudGVybWluYXRlX2NtZHRocmVhZF9zZW1hKTsKLQl9Ci0JcnR3X2hhbF9zdGFydF90aHJlYWQyM2EocGFkYXB0ZXIpOwotCXJldHVybiBfc3RhdHVzOwotfQotCi12b2lkIHJ0d19zdG9wX2Rydl90aHJlYWRzMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCi17Ci0JUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywgKCIrcnR3X3N0b3BfZHJ2X3RocmVhZHMyM2FcbiIpKTsKLQotCS8qIEJlbG93IGlzIHRvIHRlcm1pbmRhdGUgcnR3X2NtZF90aHJlYWQyM2EgJiBldmVudF90aHJlYWQuLi4gKi8KLQl1cCgmcGFkYXB0ZXItPmNtZHByaXYuY21kX3F1ZXVlX3NlbWEpOwotCWlmIChwYWRhcHRlci0+Y21kVGhyZWFkKQotCQlkb3duKCZwYWRhcHRlci0+Y21kcHJpdi50ZXJtaW5hdGVfY21kdGhyZWFkX3NlbWEpOwotCXJ0d19oYWxfc3RvcF90aHJlYWQyM2EocGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdTggcnR3X2luaXRfZGVmYXVsdF92YWx1ZShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQorc3RhdGljIGludCBydHdfaW5pdF9kZWZhdWx0X3ZhbHVlKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJc3RydWN0IHJlZ2lzdHJ5X3ByaXYgKnByZWdpc3RyeXByaXYgPSAmcGFkYXB0ZXItPnJlZ2lzdHJ5cHJpdjsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAJc3RydWN0IHNlY3VyaXR5X3ByaXYgKnBzZWN1cml0eXByaXYgPSAmcGFkYXB0ZXItPnNlY3VyaXR5cHJpdjsKLQl1OCByZXQgPSBfU1VDQ0VTUzsKKwlpbnQgcmV0ID0gX1NVQ0NFU1M7CiAKIAkvKiB4bWl0X3ByaXYgKi8KIAlweG1pdHByaXYtPnZjc19zZXR0aW5nID0gcHJlZ2lzdHJ5cHJpdi0+dnJ0bF9jYXJyaWVyX3NlbnNlOwpAQCAtNDMwLDE1ICszOTksMTUgQEAKIAlwbWxtZXByaXYtPmh0cHJpdi5hbXBkdV9lbmFibGUgPSBmYWxzZTsvKiBzZXQgdG8gZGlzYWJsZWQgKi8KIAogCS8qIHNlY3VyaXR5X3ByaXYgKi8KLQlwc2VjdXJpdHlwcml2LT5iaW5zdGFsbEdycGtleSA9IF9GQUlMOworCXBzZWN1cml0eXByaXYtPmJpbnN0YWxsR3Jwa2V5ID0gMDsKIAogCSAvKiBvcGVuIHN5c3RlbSAqLwogCXBzZWN1cml0eXByaXYtPmRvdDExQXV0aEFsZ3J0aG0gPSBkb3QxMUF1dGhBbGdydGhtX09wZW47Ci0JcHNlY3VyaXR5cHJpdi0+ZG90MTFQcml2YWN5QWxncnRobSA9IF9OT19QUklWQUNZXzsKKwlwc2VjdXJpdHlwcml2LT5kb3QxMVByaXZhY3lBbGdydGhtID0gMDsKIAogCXBzZWN1cml0eXByaXYtPmRvdDExUHJpdmFjeUtleUluZGV4ID0gMDsKIAotCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gX05PX1BSSVZBQ1lfOworCXBzZWN1cml0eXByaXYtPmRvdDExODAyMVhHcnBQcml2YWN5ID0gMDsKIAlwc2VjdXJpdHlwcml2LT5kb3QxMTgwMjFYR3JwS2V5aWQgPSAxOwogCiAJcHNlY3VyaXR5cHJpdi0+bmRpc2F1dGh0eXBlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKQEAgLTQ0OSwzMCArNDE4LDI0IEBACiAJcnR3X3VwZGF0ZV9yZWdpc3RyeXByaXZfZGV2X25ldHdvcmsyM2EocGFkYXB0ZXIpOwogCiAJLyogaGFsX3ByaXYgKi8KLQlydHdfaGFsX2RlZl92YWx1ZV9pbml0MjNhKHBhZGFwdGVyKTsKKwlydGw4NzIzYV9pbml0X2RlZmF1bHRfdmFsdWUocGFkYXB0ZXIpOwogCiAJLyogbWlzYy4gKi8KIAlwYWRhcHRlci0+YlJlYWRQb3J0Q2FuY2VsID0gZmFsc2U7CiAJcGFkYXB0ZXItPmJXcml0ZVBvcnRDYW5jZWwgPSBmYWxzZTsKLQlwYWRhcHRlci0+YlJ4UlNTSURpc3BsYXkgPSAwOwogCXBhZGFwdGVyLT5iTm90aWZ5Q2hhbm5lbENoYW5nZSA9IDA7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlwYWRhcHRlci0+YlNob3dHZXRQMlBTdGF0ZSA9IDE7Ci0jZW5kaWYKIAlyZXR1cm4gcmV0OwogfQogCi11OCBydHdfcmVzZXRfZHJ2X3N3MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitpbnQgcnR3X3Jlc2V0X2Rydl9zdzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdyY3RybHByaXYgPSAmcGFkYXB0ZXItPnB3cmN0cmxwcml2OwotCXU4IHJldDggPSBfU1VDQ0VTUzsKIAogCS8qIGhhbF9wcml2ICovCi0JcnR3X2hhbF9kZWZfdmFsdWVfaW5pdDIzYShwYWRhcHRlcik7CisJcnRsODcyM2FfaW5pdF9kZWZhdWx0X3ZhbHVlKHBhZGFwdGVyKTsKIAlwYWRhcHRlci0+YlJlYWRQb3J0Q2FuY2VsID0gZmFsc2U7CiAJcGFkYXB0ZXItPmJXcml0ZVBvcnRDYW5jZWwgPSBmYWxzZTsKLQlwYWRhcHRlci0+YlJ4UlNTSURpc3BsYXkgPSAwOwogCXBtbG1lcHJpdi0+c2Nhbl9pbnRlcnZhbCA9IFNDQU5fSU5URVJWQUw7LyogIDMwKjIgc2VjID0gNjBzZWMgKi8KIAogCXBhZGFwdGVyLT54bWl0cHJpdi50eF9wa3RzID0gMDsKQEAgLTQ4MiwyMyArNDQ1LDIzIEBACiAKIAlfY2xyX2Z3c3RhdGVfKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSB8IF9GV19VTkRFUl9MSU5LSU5HKTsKIAotCXJ0d19oYWxfc3Jlc2V0X3Jlc2V0MjNhX3ZhbHVlMjNhKHBhZGFwdGVyKTsKKwlydHdfc3Jlc2V0X3Jlc2V0X3ZhbHVlKHBhZGFwdGVyKTsKIAlwd3JjdHJscHJpdi0+cHdyX3N0YXRlX2NoZWNrX2NudHMgPSAwOwogCiAJLyogbWxtZWV4dHByaXYgKi8KIAlwYWRhcHRlci0+bWxtZWV4dHByaXYuc2l0ZXN1cnZleV9yZXMuc3RhdGUgPSBTQ0FOX0RJU0FCTEU7CiAKIAlydHdfc2V0X3NpZ25hbF9zdGF0X3RpbWVyKCZwYWRhcHRlci0+cmVjdnByaXYpOwotCXJldHVybiByZXQ4OworCXJldHVybiBfU1VDQ0VTUzsKIH0KIAotdTggcnR3X2luaXRfZHJ2X3N3MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCitpbnQgcnR3X2luaXRfZHJ2X3N3MjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0JdTggcmV0OCA9IF9TVUNDRVNTOworCWludCByZXQ4ID0gX1NVQ0NFU1M7CiAKIAlSVF9UUkFDRShfbW9kdWxlX29zX2ludGZzX2NfLCBfZHJ2X2luZm9fLCAoIitydHdfaW5pdF9kcnZfc3cyM2FcbiIpKTsKIAotCWlmICgocnR3X2luaXRfY21kX3ByaXYyM2EoJnBhZGFwdGVyLT5jbWRwcml2KSkgPT0gX0ZBSUwpIHsKKwlpZiAocnR3X2luaXRfY21kX3ByaXYyM2EoJnBhZGFwdGVyLT5jbWRwcml2KSA9PSBfRkFJTCkgewogCQlSVF9UUkFDRShfbW9kdWxlX29zX2ludGZzX2NfLCBfZHJ2X2Vycl8sCiAJCQkgKCJcbiBDYW4ndCBpbml0IGNtZF9wcml2XG4iKSk7CiAJCXJldDggPSBfRkFJTDsKQEAgLTUyMSwxNyArNDg0LDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JcnR3X2luaXRfd2lmaWRpcmVjdF90aW1lcnMyM2EocGFkYXB0ZXIpOwotCWluaXRfd2lmaWRpcmVjdF9pbmZvMjNhKHBhZGFwdGVyLCBQMlBfUk9MRV9ESVNBQkxFKTsKLQlyZXNldF9nbG9iYWxfd2lmaWRpcmVjdF9pbmZvMjNhKHBhZGFwdGVyKTsKLQlydHdfaW5pdF9jZmc4MDIxMV93aWZpZGlyZWN0X2luZm8ocGFkYXB0ZXIpOwotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0JaWYgKHJ0d19pbml0X3dpZmlfZGlzcGxheV9pbmZvKHBhZGFwdGVyKSA9PSBfRkFJTCkKLQkJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9lcnJfLAotCQkJICgiXG4gQ2FuJ3QgaW5pdCBpbml0X3dpZmlfZGlzcGxheV9pbmZvXG4iKSk7Ci0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwogCiAJaWYgKGluaXRfbWxtZV9leHRfcHJpdjIzYShwYWRhcHRlcikgPT0gX0ZBSUwpIHsKIAkJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9lcnJfLApAQCAtNTY2LDEwICs1MTgsOSBAQAogCiAJcmV0OCA9IHJ0d19pbml0X2RlZmF1bHRfdmFsdWUocGFkYXB0ZXIpOwogCi0JcnR3X2hhbF9kbV9pbml0MjNhKHBhZGFwdGVyKTsKLQlydHdfaGFsX3N3X2xlZF9pbml0MjNhKHBhZGFwdGVyKTsKKwlydGw4NzIzYV9pbml0X2RtX3ByaXYocGFkYXB0ZXIpOwogCi0JcnR3X2hhbF9zcmVzZXRfaW5pdDIzYShwYWRhcHRlcik7CisJcnR3X3NyZXNldF9pbml0KHBhZGFwdGVyKTsKIAogZXhpdDoKIApAQCAtNTc5LDg5ICs1MzAsNjAgQEAKIAogdm9pZCBydHdfY2FuY2VsX2FsbF90aW1lcjIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotCVJUX1RSQUNFKF9tb2R1bGVfb3NfaW50ZnNfY18sIF9kcnZfaW5mb18sICgiK3J0d19jYW5jZWxfYWxsX3RpbWVyMjNhXG4iKSk7CisJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywKKwkJICgiK3J0d19jYW5jZWxfYWxsX3RpbWVyMjNhXG4iKSk7CiAKIAlkZWxfdGltZXJfc3luYygmcGFkYXB0ZXItPm1sbWVwcml2LmFzc29jX3RpbWVyKTsKIAlSVF9UUkFDRShfbW9kdWxlX29zX2ludGZzX2NfLCBfZHJ2X2luZm9fLAotCQkgKCJydHdfY2FuY2VsX2FsbF90aW1lcjIzYTpjYW5jZWwgYXNzb2NpYXRpb24gdGltZXIgY29tcGxldGUhXG4iKSk7CisJCSAoIiVzOmNhbmNlbCBhc3NvY2lhdGlvbiB0aW1lciBjb21wbGV0ZSFcbiIsIF9fZnVuY19fKSk7CiAKIAlkZWxfdGltZXJfc3luYygmcGFkYXB0ZXItPm1sbWVwcml2LnNjYW5fdG9fdGltZXIpOwogCVJUX1RSQUNFKF9tb2R1bGVfb3NfaW50ZnNfY18sIF9kcnZfaW5mb18sCi0JCSAoInJ0d19jYW5jZWxfYWxsX3RpbWVyMjNhOmNhbmNlbCBzY2FuX3RvX3RpbWVyIVxuIikpOworCQkgKCIlczpjYW5jZWwgc2Nhbl90b190aW1lciFcbiIsIF9fZnVuY19fKSk7CiAKIAlkZWxfdGltZXJfc3luYygmcGFkYXB0ZXItPm1sbWVwcml2LmR5bmFtaWNfY2hrX3RpbWVyKTsKIAlSVF9UUkFDRShfbW9kdWxlX29zX2ludGZzX2NfLCBfZHJ2X2luZm9fLAotCQkgKCJydHdfY2FuY2VsX2FsbF90aW1lcjIzYTpjYW5jZWwgZHluYW1pY19jaGtfdGltZXIhXG4iKSk7CisJCSAoIiVzOmNhbmNlbCBkeW5hbWljX2Noa190aW1lciFcbiIsIF9fZnVuY19fKSk7CiAKLQkvKiAgY2FuY2VsIHN3IGxlZCB0aW1lciAqLwotCXJ0d19oYWxfc3dfbGVkX2RlaW5pdDIzYShwYWRhcHRlcik7CiAJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywKLQkJICgicnR3X2NhbmNlbF9hbGxfdGltZXIyM2E6Y2FuY2VsIERlSW5pdFN3TGVkcyFcbiIpKTsKKwkJICgiJXM6Y2FuY2VsIERlSW5pdFN3TGVkcyFcbiIsIF9fZnVuY19fKSk7CiAKIAlkZWxfdGltZXJfc3luYygmcGFkYXB0ZXItPnB3cmN0cmxwcml2LnB3cl9zdGF0ZV9jaGVja190aW1lcik7CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCWRlbF90aW1lcl9zeW5jKCZwYWRhcHRlci0+Y2ZnODAyMTFfd2RpbmZvLnJlbWFpbl9vbl9jaF90aW1lcik7Ci0jZW5kaWYgLyogQ09ORklHXzg3MjNBVV9QMlAgKi8KLQogCWRlbF90aW1lcl9zeW5jKCZwYWRhcHRlci0+bWxtZXByaXYuc2V0X3NjYW5fZGVueV90aW1lcik7CiAJcnR3X2NsZWFyX3NjYW5fZGVueShwYWRhcHRlcik7CiAJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywKLQkJICgicnR3X2NhbmNlbF9hbGxfdGltZXIyM2E6Y2FuY2VsIHNldF9zY2FuX2RlbnlfdGltZXIhXG4iKSk7CisJCSAoIiVzOmNhbmNlbCBzZXRfc2Nhbl9kZW55X3RpbWVyIVxuIiwgX19mdW5jX18pKTsKIAogCWRlbF90aW1lcl9zeW5jKCZwYWRhcHRlci0+cmVjdnByaXYuc2lnbmFsX3N0YXRfdGltZXIpOwogCS8qIGNhbmNlbCBkbSB0aW1lciAqLwotCXJ0d19oYWxfZG1fZGVpbml0MjNhKHBhZGFwdGVyKTsKKwlydGw4NzIzYV9kZWluaXRfZG1fcHJpdihwYWRhcHRlcik7CiB9CiAKLXU4IHJ0d19mcmVlX2Rydl9zdzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQoraW50IHJ0d19mcmVlX2Rydl9zdzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQogewotI2lmZGVmIENPTkZJR184NzIzQVVfUDJQCi0Jc3RydWN0IHdpZmlkaXJlY3RfaW5mbyAqcHdkaW5mbzsKLSNlbmRpZgotCiAJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywgKCI9PT5ydHdfZnJlZV9kcnZfc3cyM2EiKSk7CiAKLQkvKiB3ZSBjYW4gY2FsbCBydHdfcDJwX2VuYWJsZTIzYSBoZXJlLCBidXQ6Ci0JICogIDEuIHJ0d19wMnBfZW5hYmxlMjNhIG1heSBoYXZlIElPIG9wZXJhdGlvbgotCSAqICAyLiBydHdfcDJwX2VuYWJsZTIzYSBpcyBidW5kbGVkIHdpdGggd2V4dCBpbnRlcmZhY2UKLQkgKi8KLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCXB3ZGluZm8gPSAmcGFkYXB0ZXItPndkaW5mbzsKLQlpZiAoIXJ0d19wMnBfY2hrX3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKSkgewotCQlkZWxfdGltZXJfc3luYygmcHdkaW5mby0+ZmluZF9waGFzZV90aW1lcik7Ci0JCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5yZXN0b3JlX3AycF9zdGF0ZV90aW1lcik7Ci0JCWRlbF90aW1lcl9zeW5jKCZwd2RpbmZvLT5wcmVfdHhfc2Nhbl90aW1lcik7Ci0JCXJ0d19wMnBfc2V0X3N0YXRlKHB3ZGluZm8sIFAyUF9TVEFURV9OT05FKTsKLQl9Ci0jZW5kaWYKLQogCWZyZWVfbWxtZV9leHRfcHJpdjIzYSgmcGFkYXB0ZXItPm1sbWVleHRwcml2KTsKIAotCXJ0d19mcmVlX2NtZF9wcml2MjNhKCZwYWRhcHRlci0+Y21kcHJpdik7Ci0KIAlydHdfZnJlZV9ldnRfcHJpdjIzYSgmcGFkYXB0ZXItPmV2dHByaXYpOwogCiAJcnR3X2ZyZWVfbWxtZV9wcml2MjNhKCZwYWRhcHRlci0+bWxtZXByaXYpOwogCiAJX3J0d19mcmVlX3htaXRfcHJpdjIzYSgmcGFkYXB0ZXItPnhtaXRwcml2KTsKIAotCV9ydHdfZnJlZV9zdGFfcHJpdjIzYSgmcGFkYXB0ZXItPnN0YXByaXYpOy8qIHdpbGwgZnJlZSBiY21jX3N0YWluZm8gaGVyZSAqLworCS8qIHdpbGwgZnJlZSBiY21jX3N0YWluZm8gaGVyZSAqLworCV9ydHdfZnJlZV9zdGFfcHJpdjIzYSgmcGFkYXB0ZXItPnN0YXByaXYpOwogCiAJX3J0d19mcmVlX3JlY3ZfcHJpdjIzYSgmcGFkYXB0ZXItPnJlY3Zwcml2KTsKIAogCXJ0d19mcmVlX3B3cmN0cmxfcHJpdihwYWRhcHRlcik7CiAKLQlydHdfaGFsX2ZyZWVfZGF0YTIzYShwYWRhcHRlcik7CisJa2ZyZWUocGFkYXB0ZXItPkhhbERhdGEpOworCXBhZGFwdGVyLT5IYWxEYXRhID0gTlVMTDsKIAogCVJUX1RSQUNFKF9tb2R1bGVfb3NfaW50ZnNfY18sIF9kcnZfaW5mb18sICgiPD09IHJ0d19mcmVlX2Rydl9zdzIzYVxuIikpOwogCi0JLyogZnJlZSB0aGUgb2xkX3BuZXRkZXYgKi8KLQlpZiAocGFkYXB0ZXItPnJlcmVnX25kX25hbWVfcHJpdi5vbGRfcG5ldGRldikgewotCQlmcmVlX25ldGRldihwYWRhcHRlci0+cmVyZWdfbmRfbmFtZV9wcml2Lm9sZF9wbmV0ZGV2KTsKLQkJcGFkYXB0ZXItPnJlcmVnX25kX25hbWVfcHJpdi5vbGRfcG5ldGRldiA9IE5VTEw7Ci0JfQotCiAJLyogIGNsZWFyIHBidWRkeV9hZGFwdGVyIHRvIGF2b2lkIGFjY2VzcyB3cm9uZyBwb2ludGVyLiAqLwogCWlmIChwYWRhcHRlci0+cGJ1ZGR5X2FkYXB0ZXIgIT0gTlVMTCkKIAkJcGFkYXB0ZXItPnBidWRkeV9hZGFwdGVyLT5wYnVkZHlfYWRhcHRlciA9IE5VTEw7CkBAIC02ODEsNyArNjAzLDcgQEAKIAogCS8qIFRlbGwgdGhlIG5ldHdvcmsgc3RhY2sgd2UgZXhpc3QgKi8KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KHBuZXRkZXYpKSB7Ci0JCURCR184NzIzQShGVU5DX05ERVZfRk1UICJGYWlsZWQhXG4iLCBGVU5DX05ERVZfQVJHKHBuZXRkZXYpKTsKKwkJREJHXzg3MjNBKCIlcyglcyk6IEZhaWxlZCFcbiIsIF9fZnVuY19fLCBwbmV0ZGV2LT5uYW1lKTsKIAkJcmV0ID0gX0ZBSUw7CiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXJfbmV0ZGV2OwogCX0KQEAgLTcwNCwyNiArNjI2LDMwIEBACiAJc3RydWN0IGR2b2JqX3ByaXYgKmR2b2JqID0gaWYxLT5kdm9iajsKIAlpbnQgaSwgc3RhdHVzID0gX1NVQ0NFU1M7CiAKLQlpZiAoZHZvYmotPmlmYWNlX251bXMgPCBJRkFDRV9JRF9NQVgpIHsKLQkJZm9yIChpID0gMDsgaSA8IGR2b2JqLT5pZmFjZV9udW1zOyBpKyspIHsKLQkJCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBkdm9iai0+cGFkYXB0ZXJzW2ldOworCWlmIChkdm9iai0+aWZhY2VfbnVtcyA+PSBJRkFDRV9JRF9NQVgpIHsKKwkJc3RhdHVzID0gX0ZBSUw7IC8qIC1FSU5WQUwgKi8KKwkJZ290byBleGl0OworCX0KIAotCQkJaWYgKHBhZGFwdGVyKSB7Ci0JCQkJY2hhciAqbmFtZTsKKwlmb3IgKGkgPSAwOyBpIDwgZHZvYmotPmlmYWNlX251bXM7IGkrKykgeworCQlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gZHZvYmotPnBhZGFwdGVyc1tpXTsKIAotCQkJCWlmIChwYWRhcHRlci0+aWZhY2VfaWQgPT0gSUZBQ0VfSUQwKQotCQkJCQluYW1lID0gaWYxLT5yZWdpc3RyeXByaXYuaWZuYW1lOwotCQkJCWVsc2UgaWYgKHBhZGFwdGVyLT5pZmFjZV9pZCA9PSBJRkFDRV9JRDEpCi0JCQkJCW5hbWUgPSBpZjEtPnJlZ2lzdHJ5cHJpdi5pZjJuYW1lOwotCQkJCWVsc2UKLQkJCQkJbmFtZSA9ICJ3bGFuJWQiOwotCQkJCXN0YXR1cyA9IF9ydHdfZHJ2X3JlZ2lzdGVyX25ldGRldihwYWRhcHRlciwKLQkJCQkJCQkJICBuYW1lKTsKLQkJCQlpZiAoc3RhdHVzICE9IF9TVUNDRVNTKQotCQkJCQlicmVhazsKLQkJCX0KKwkJaWYgKHBhZGFwdGVyKSB7CisJCQljaGFyICpuYW1lOworCisJCQlpZiAocGFkYXB0ZXItPmlmYWNlX2lkID09IElGQUNFX0lEMCkKKwkJCQluYW1lID0gaWYxLT5yZWdpc3RyeXByaXYuaWZuYW1lOworCQkJZWxzZSBpZiAocGFkYXB0ZXItPmlmYWNlX2lkID09IElGQUNFX0lEMSkKKwkJCQluYW1lID0gaWYxLT5yZWdpc3RyeXByaXYuaWYybmFtZTsKKwkJCWVsc2UKKwkJCQluYW1lID0gIndsYW4lZCI7CisJCQlzdGF0dXMgPSBfcnR3X2Rydl9yZWdpc3Rlcl9uZXRkZXYocGFkYXB0ZXIsIG5hbWUpOworCQkJaWYgKHN0YXR1cyAhPSBfU1VDQ0VTUykKKwkJCQlicmVhazsKIAkJfQogCX0KKworZXhpdDoKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC03MzIsNyArNjU4LDcgQEAKIAlzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyID0gbmV0ZGV2X3ByaXYocG5ldGRldik7CiAJc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdyY3RybHByaXY7CiAJaW50IHJldCA9IDA7Ci0JdWludCBzdGF0dXM7CisJaW50IHN0YXR1czsKIAogCVJUX1RSQUNFKF9tb2R1bGVfb3NfaW50ZnNfY18sIF9kcnZfaW5mb18sICgiKzg3MXhfZHJ2IC0gZGV2X29wZW5cbiIpKTsKIAlEQkdfODcyM0EoIis4NzF4X2RydiAtIGRydl9vcGVuLCBidXAgPSVkXG4iLCBwYWRhcHRlci0+YnVwKTsKQEAgLTc2MCwxOSArNjg2LDEyIEBACiAJCURCR184NzIzQSgiTUFDIEFkZHJlc3MgPSAiTUFDX0ZNVCJcbiIsCiAJCQkgIE1BQ19BUkcocG5ldGRldi0+ZGV2X2FkZHIpKTsKIAotCQlzdGF0dXMgPSBydHdfc3RhcnRfZHJ2X3RocmVhZHMyM2EocGFkYXB0ZXIpOwotCQlpZiAoc3RhdHVzID09IF9GQUlMKSB7Ci0JCQlEQkdfODcyM0EoIkluaXRpYWxpemUgZHJpdmVyIHNvZnR3YXJlIHJlc291cmNlIEZhaWxlZCFcbiIpOwotCQkJZ290byBuZXRkZXZfb3BlbjIzYV9lcnJvcjsKLQkJfQotCiAJCWlmIChpbml0X2h3X21sbWVfZXh0MjNhKHBhZGFwdGVyKSA9PSBfRkFJTCkgewogCQkJREJHXzg3MjNBKCJjYW4ndCBpbml0IG1sbWVfZXh0X3ByaXZcbiIpOwogCQkJZ290byBuZXRkZXZfb3BlbjIzYV9lcnJvcjsKIAkJfQogCi0JCWlmIChwYWRhcHRlci0+aW50Zl9zdGFydCkKLQkJCXBhZGFwdGVyLT5pbnRmX3N0YXJ0KHBhZGFwdGVyKTsKKwkJcnRsODcyM2F1X2luaXJwX2luaXQocGFkYXB0ZXIpOwogCiAJCXJ0d19jZmc4MDIxMV9pbml0X3dpcGh5KHBhZGFwdGVyKTsKIApAQCAtODE2LDcgKzczNSw3IEBACiAJZ290byBleGl0OwogfQogCi1zdGF0aWMgaW50ICBpcHNfbmV0ZHJ2X29wZW4oc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKK3N0YXRpYyBpbnQgaXBzX25ldGRydl9vcGVuKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJaW50IHN0YXR1cyA9IF9TVUNDRVNTOwogCkBAIC04MzQsOCArNzUzLDcgQEAKIAkJZ290byBuZXRkZXZfb3BlbjIzYV9lcnJvcjsKIAl9CiAKLQlpZiAocGFkYXB0ZXItPmludGZfc3RhcnQpCi0JCXBhZGFwdGVyLT5pbnRmX3N0YXJ0KHBhZGFwdGVyKTsKKwlydGw4NzIzYXVfaW5pcnBfaW5pdChwYWRhcHRlcik7CiAKIAlydHdfc2V0X3B3cl9zdGF0ZV9jaGVja190aW1lcigmcGFkYXB0ZXItPnB3cmN0cmxwcml2KTsKIAltb2RfdGltZXIoJnBhZGFwdGVyLT5tbG1lcHJpdi5keW5hbWljX2Noa190aW1lciwKQEAgLTg4NywxMCArODA1LDkgQEAKIAogdm9pZCBydHdfaXBzX2Rldl91bmxvYWQyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKLQlydHdfaGFsX3NldF9od3JlZzIzYShwYWRhcHRlciwgSFdfVkFSX0ZJRk9fQ0xFQVJOX1VQLCBOVUxMKTsKKwlydGw4NzIzYV9maWZvX2NsZWFudXAocGFkYXB0ZXIpOwogCi0JaWYgKHBhZGFwdGVyLT5pbnRmX3N0b3ApCi0JCXBhZGFwdGVyLT5pbnRmX3N0b3AocGFkYXB0ZXIpOworCXJ0bDg3MjNhX3VzYl9pbnRmX3N0b3AocGFkYXB0ZXIpOwogCiAJLyogczUuICovCiAJaWYgKCFwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCkKQEAgLTkxNiwxNSArODMzLDExIEBACiAKIAlSVF9UUkFDRShfbW9kdWxlX29zX2ludGZzX2NfLCBfZHJ2X2luZm9fLCAoIis4NzF4X2RydiAtIGRydl9jbG9zZVxuIikpOwogCi0JaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5iSW50ZXJuYWxBdXRvU3VzcGVuZCkgewotCQlpZiAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnJmX3B3cnN0YXRlID09IHJmX29mZikKLQkJCXBhZGFwdGVyLT5wd3JjdHJscHJpdi5wc19mbGFnID0gdHJ1ZTsKLQl9CiAJcGFkYXB0ZXItPm5ldF9jbG9zZWQgPSB0cnVlOwogCiAJaWYgKHBhZGFwdGVyLT5wd3JjdHJscHJpdi5yZl9wd3JzdGF0ZSA9PSByZl9vbikgewotCQlEQkdfODcyM0EoIigyKTg3MXhfZHJ2IC0gZHJ2X2Nsb3NlLCBidXAgPSVkLCBod19pbml0X2NvbXBsZXRlZCA9JWRcbiIsCi0JCQkgIHBhZGFwdGVyLT5idXAsCisJCURCR184NzIzQSgiKDIpODcxeF9kcnYgLSBkcnZfY2xvc2UsIGJ1cCA9JWQsICIKKwkJCSAgImh3X2luaXRfY29tcGxldGVkID0lZFxuIiwgcGFkYXB0ZXItPmJ1cCwKIAkJCSAgcGFkYXB0ZXItPmh3X2luaXRfY29tcGxldGVkKTsKIAogCQkvKiBzMS4gKi8KQEAgLTk0MSwxNyArODU0LDExIEBACiAJCS8qIHMyLTMuICovCiAJCXJ0d19mcmVlX2Fzc29jX3Jlc291cmNlczIzYShwYWRhcHRlciwgMSk7CiAJCS8qIHMyLTQuICovCi0JCXJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2EocGFkYXB0ZXIsIHRydWUpOworCQlydHdfZnJlZV9uZXR3b3JrX3F1ZXVlMjNhKHBhZGFwdGVyKTsKIAkJLyogIENsb3NlIExFRCAqLwogCQlydHdfbGVkX2NvbnRyb2wocGFkYXB0ZXIsIExFRF9DVExfUE9XRVJfT0ZGKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfODcyM0FVX1AyUAotCWlmICh3ZGV2X3RvX3ByaXYocGFkYXB0ZXItPnJ0d193ZGV2KS0+cDJwX2VuYWJsZWQpCi0JCXdkZXZfdG9fcHJpdihwYWRhcHRlci0+cnR3X3dkZXYpLT5wMnBfZW5hYmxlZCA9IGZhbHNlOwotCXJ0d19wMnBfZW5hYmxlMjNhKHBhZGFwdGVyLCBQMlBfUk9MRV9ESVNBQkxFKTsKLSNlbmRpZiAvKiBDT05GSUdfODcyM0FVX1AyUCAqLwotCiAJcnR3X3NjYW5fYWJvcnQyM2EocGFkYXB0ZXIpOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9vc19pbnRmc19jXywgX2Rydl9pbmZvXywgKCItODcxeF9kcnYgLSBkcnZfY2xvc2VcbiIpKTsKQEAgLTk2Miw3ICs4NjksMTMgQEAKIAogdm9pZCBydHdfbmRldl9kZXN0cnVjdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewotCURCR184NzIzQShGVU5DX05ERVZfRk1UIlxuIiwgRlVOQ19OREVWX0FSRyhuZGV2KSk7CisJREJHXzg3MjNBKCIlcyglcylcbiIsIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKIAlrZnJlZShuZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlmcmVlX25ldGRldihuZGV2KTsKIH0KKwordm9pZCBfcnR3X2luaXRfcXVldWUyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqcHF1ZXVlKQoreworCUlOSVRfTElTVF9IRUFEKCZwcXVldWUtPnF1ZXVlKTsKKwlzcGluX2xvY2tfaW5pdCgmcHF1ZXVlLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL29zZGVwX3NlcnZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL29zZGVwX3NlcnZpY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmYzI3ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9vc2RlcF9zZXJ2aWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMiBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2RlZmluZSBfT1NERVBfU0VSVklDRV9DXwotCi0jaW5jbHVkZSA8b3NkZXBfc2VydmljZS5oPgotI2luY2x1ZGUgPGRydl90eXBlcy5oPgotI2luY2x1ZGUgPHJlY3Zfb3NkZXAuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNkZWZpbmUgUlRfVEFHCSgnMTE3OCcpCi0KLS8qCi0qIFRyYW5zbGF0ZSB0aGUgT1MgZGVwZW5kZW50IEBwYXJhbSBlcnJvcl9jb2RlIHRvIE9TIGluZGVwZW5kZW50IFJUV19TVEFUVVNfQ09ERTIzYQotKiBAcmV0dXJuOiBvbmUgb2YgUlRXX1NUQVRVU19DT0RFMjNhCi0qLwotaW5saW5lIGludCBSVFdfU1RBVFVTX0NPREUyM2EoaW50IGVycm9yX2NvZGUpCi17Ci0JaWYgKGVycm9yX2NvZGUgPj0gMCkKLQkJcmV0dXJuIF9TVUNDRVNTOwotCXJldHVybiBfRkFJTDsKLX0KLQotaW5saW5lIHU4ICpfcnR3X3ZtYWxsb2ModTMyIHN6KQotewotCXU4CSpwYnVmOwotCXBidWYgPSB2bWFsbG9jKHN6KTsKLQotCXJldHVybiBwYnVmOwotfQotCi1pbmxpbmUgdTggKl9ydHdfenZtYWxsb2ModTMyIHN6KQotewotCXU4CSpwYnVmOwotCXBidWYgPSBfcnR3X3ZtYWxsb2Moc3opOwotCWlmIChwYnVmICE9IE5VTEwpCi0JCW1lbXNldChwYnVmLCAwLCBzeik7Ci0KLQlyZXR1cm4gcGJ1ZjsKLX0KLQotaW5saW5lIHZvaWQgX3J0d192bWZyZWUodTggKnBidWYsIHUzMiBzeikKLXsKLQl2ZnJlZShwYnVmKTsKLX0KLQotdm9pZCBfcnR3X2luaXRfcXVldWUyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqcHF1ZXVlKQotewotCUlOSVRfTElTVF9IRUFEKCZwcXVldWUtPnF1ZXVlKTsKLQlzcGluX2xvY2tfaW5pdCgmcHF1ZXVlLT5sb2NrKTsKLX0KLQotdTMyIF9ydHdfcXVldWVfZW1wdHkyM2Eoc3RydWN0IHJ0d19xdWV1ZSAqcHF1ZXVlKQotewotCWlmIChsaXN0X2VtcHR5KCZwcXVldWUtPnF1ZXVlKSkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXU2NCBydHdfbW9kdWxhcjY0MjNhKHU2NCB4LCB1NjQgeSkKLXsKLQlyZXR1cm4gZG9fZGl2KHgsIHkpOwotfQotCi11NjQgcnR3X2RpdmlzaW9uNjQyM2EodTY0IHgsIHU2NCB5KQotewotCWRvX2Rpdih4LCB5KTsKLQlyZXR1cm4geDsKLX0KLQotLyogcnR3X2NidWZfZnVsbDIzYSAtIHRlc3QgaWYgY2J1ZiBpcyBmdWxsCi0gKiBAY2J1ZjogcG9pbnRlciBvZiBzdHJ1Y3QgcnR3X2NidWYKLSAqCi0gKiBSZXR1cm5zOiB0cnVlIGlmIGNidWYgaXMgZnVsbAotICovCi1pbmxpbmUgYm9vbCBydHdfY2J1Zl9mdWxsMjNhKHN0cnVjdCBydHdfY2J1ZiAqY2J1ZikKLXsKLQlyZXR1cm4gKGNidWYtPndyaXRlID09IGNidWYtPnJlYWQtMSkgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLS8qIHJ0d19jYnVmX2VtcHR5MjNhIC0gdGVzdCBpZiBjYnVmIGlzIGVtcHR5Ci0gKiBAY2J1ZjogcG9pbnRlciBvZiBzdHJ1Y3QgcnR3X2NidWYKLSAqCi0gKiBSZXR1cm5zOiB0cnVlIGlmIGNidWYgaXMgZW1wdHkKLSAqLwotaW5saW5lIGJvb2wgcnR3X2NidWZfZW1wdHkyM2Eoc3RydWN0IHJ0d19jYnVmICpjYnVmKQotewotCXJldHVybiAoY2J1Zi0+d3JpdGUgPT0gY2J1Zi0+cmVhZCkgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLS8qKgotICogcnR3X2NidWZfcHVzaDIzYSAtIHB1c2ggYSBwb2ludGVyIGludG8gY2J1ZgotICogQGNidWY6IHBvaW50ZXIgb2Ygc3RydWN0IHJ0d19jYnVmCi0gKiBAYnVmOiBwb2ludGVyIHRvIHB1c2ggaW4KLSAqCi0gKiBMb2NrIGZyZWUgb3BlcmF0aW9uLCBiZSBjYXJlZnVsIG9mIHRoZSB1c2Ugc2NoZW1lCi0gKiBSZXR1cm5zOiB0cnVlIHB1c2ggc3VjY2VzcwotICovCi1ib29sIHJ0d19jYnVmX3B1c2gyM2Eoc3RydWN0IHJ0d19jYnVmICpjYnVmLCB2b2lkICpidWYpCi17Ci0JaWYgKHJ0d19jYnVmX2Z1bGwyM2EoY2J1ZikpCi0JCXJldHVybiBfRkFJTDsKLQotCWlmICgwKQotCQlEQkdfODcyM0EoIiVzIG9uICV1XG4iLCBfX2Z1bmNfXywgY2J1Zi0+d3JpdGUpOwotCWNidWYtPmJ1ZnNbY2J1Zi0+d3JpdGVdID0gYnVmOwotCWNidWYtPndyaXRlID0gKGNidWYtPndyaXRlKzEpJWNidWYtPnNpemU7Ci0KLQlyZXR1cm4gX1NVQ0NFU1M7Ci19Ci0KLS8qKgotICogcnR3X2NidWZfcG9wMjNhIC0gcG9wIGEgcG9pbnRlciBmcm9tIGNidWYKLSAqIEBjYnVmOiBwb2ludGVyIG9mIHN0cnVjdCBydHdfY2J1ZgotICoKLSAqIExvY2sgZnJlZSBvcGVyYXRpb24sIGJlIGNhcmVmdWwgb2YgdGhlIHVzZSBzY2hlbWUKLSAqIFJldHVybnM6IHBvaW50ZXIgcG9wcGVkIG91dAotICovCi12b2lkICpydHdfY2J1Zl9wb3AyM2Eoc3RydWN0IHJ0d19jYnVmICpjYnVmKQotewotCXZvaWQgKmJ1ZjsKLQlpZiAocnR3X2NidWZfZW1wdHkyM2EoY2J1ZikpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKDApCi0JCURCR184NzIzQSgiJXMgb24gJXVcbiIsIF9fZnVuY19fLCBjYnVmLT5yZWFkKTsKLQlidWYgPSBjYnVmLT5idWZzW2NidWYtPnJlYWRdOwotCWNidWYtPnJlYWQgPSAoY2J1Zi0+cmVhZCsxKSVjYnVmLT5zaXplOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQotLyoqCi0gKiBydHdfY2J1Zl9hbGxvYzIzYSAtIGFsbG9jdGUgYSBydHdfY2J1ZiB3aXRoIGdpdmVuIHNpemUgYW5kIGRvIGluaXRpYWxpemF0aW9uCi0gKiBAc2l6ZTogc2l6ZSBvZiBwb2ludGVyCi0gKgotICogUmV0dXJuczogcG9pbnRlciBvZiBzcnR1Y3QgcnR3X2NidWYsIE5VTEwgZm9yIGFsbG9jYXRpb24gZmFpbHVyZQotICovCi1zdHJ1Y3QgcnR3X2NidWYgKnJ0d19jYnVmX2FsbG9jMjNhKHUzMiBzaXplKQotewotCXN0cnVjdCBydHdfY2J1ZiAqY2J1ZjsKLQotCWNidWYgPSBrbWFsbG9jKHNpemVvZigqY2J1ZikgKyBzaXplb2Yodm9pZCAqKSpzaXplLCBHRlBfS0VSTkVMKTsKLQotCWlmIChjYnVmKSB7Ci0JCWNidWYtPndyaXRlID0gMDsKLQkJY2J1Zi0+cmVhZCA9IDA7Ci0JCWNidWYtPnNpemUgPSBzaXplOwotCX0KLQotCXJldHVybiBjYnVmOwotfQotCi0vKioKLSAqIHJ0d19jYnVmX2ZyZWUgLSBmcmVlIHRoZSBnaXZlbiBydHdfY2J1ZgotICogQGNidWY6IHBvaW50ZXIgb2Ygc3RydWN0IHJ0d19jYnVmIHRvIGZyZWUKLSAqLwotdm9pZCBydHdfY2J1Zl9mcmVlKHN0cnVjdCBydHdfY2J1ZiAqY2J1ZikKLXsKLQlrZnJlZShjYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3JlY3ZfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3JlY3ZfbGludXguYwppbmRleCA4NDQwMmE1Li5iY2Q5NzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9yZWN2X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvcmVjdl9saW51eC5jCkBAIC0yMSw1MCArMjEsOSBAQAogI2luY2x1ZGUgPHJlY3Zfb3NkZXAuaD4KIAogI2luY2x1ZGUgPG9zZGVwX2ludGYuaD4KLSNpbmNsdWRlIDxldGhlcm5ldC5oPgogCiAjaW5jbHVkZSA8dXNiX29wcy5oPgogCi0vKiBhbGxvYyBvcyByZWxhdGVkIHJlc291cmNlIGluIHN0cnVjdCByZWN2X2ZyYW1lICovCi1pbnQgcnR3X29zX3JlY3ZfcmVzb3VyY2VfYWxsb2MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSAgICAgICBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSkKLXsKLQlpbnQgcmVzID0gX1NVQ0NFU1M7Ci0KLQlwcmVjdmZyYW1lLT5wa3QgPSBOVUxMOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyogYWxsb2Mgb3MgcmVsYXRlZCByZXNvdXJjZSBpbiBzdHJ1Y3QgcmVjdl9idWYgKi8KLWludCBydHdfb3NfcmVjdmJ1Zl9yZXNvdXJjZV9hbGxvYzIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCSAgc3RydWN0IHJlY3ZfYnVmICpwcmVjdmJ1ZikKLXsKLQlpbnQgcmVzID0gX1NVQ0NFU1M7Ci0KLQlwcmVjdmJ1Zi0+cHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHByZWN2YnVmLT5wdXJiID09IE5VTEwpCi0JCXJlcyA9IF9GQUlMOwotCi0JcHJlY3ZidWYtPnBza2IgPSBOVUxMOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyogZnJlZSBvcyByZWxhdGVkIHJlc291cmNlIGluIHN0cnVjdCByZWN2X2J1ZiAqLwotaW50IHJ0d19vc19yZWN2YnVmX3Jlc291cmNlX2ZyZWUyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCQkgc3RydWN0IHJlY3ZfYnVmICpwcmVjdmJ1ZikKLXsKLQlpbnQgcmV0ID0gX1NVQ0NFU1M7Ci0KLQl1c2JfZnJlZV91cmIocHJlY3ZidWYtPnB1cmIpOwotCi0JaWYgKHByZWN2YnVmLT5wc2tiKQotCQlkZXZfa2ZyZWVfc2tiX2FueShwcmVjdmJ1Zi0+cHNrYik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiB2b2lkIHJ0d19oYW5kbGVfdGtpcF9taWNfZXJyMjNhKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIsIHU4IGJncm91cCkKIHsKIAllbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUgPSAwOwpAQCAtMTEwLDIxICs2OSwxNCBAQAogCXdycXUuZGF0YS5sZW5ndGggPSBzaXplb2YoZXYpOwogfQogCi12b2lkIHJ0d19ob3N0YXBkX21sbWVfcngyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKLQkJCSBzdHJ1Y3QgcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUpCi17Ci19Ci0KIGludCBydHdfcmVjdl9pbmRpY2F0ZXBrdDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAogCQkJIHN0cnVjdCByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSkKIHsKIAlzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXY7Ci0Jc3RydWN0IHJ0d19xdWV1ZSAqcGZyZWVfcmVjdl9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAKLQlwcmVjdnByaXYgPSAmKHBhZGFwdGVyLT5yZWN2cHJpdik7Ci0JcGZyZWVfcmVjdl9xdWV1ZSA9ICYocHJlY3Zwcml2LT5mcmVlX3JlY3ZfcXVldWUpOworCXByZWN2cHJpdiA9ICZwYWRhcHRlci0+cmVjdnByaXY7CiAKIAlza2IgPSBwcmVjdl9mcmFtZS0+cGt0OwogCWlmICghc2tiKSB7CkBAIC0xOTMsNyArMTQ1LDcgQEAKIAogCXByZWN2X2ZyYW1lLT5wa3QgPSBOVUxMOyAvKiAgcG9pbnRlcnMgdG8gTlVMTCBiZWZvcmUgcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKCkgKi8KIAotCXJ0d19mcmVlX3JlY3ZmcmFtZTIzYShwcmVjdl9mcmFtZSwgcGZyZWVfcmVjdl9xdWV1ZSk7CisJcnR3X2ZyZWVfcmVjdmZyYW1lMjNhKHByZWN2X2ZyYW1lKTsKIAogCVJUX1RSQUNFKF9tb2R1bGVfcmVjdl9vc2RlcF9jXywgX2Rydl9pbmZvXywKIAkJICgiXG4gcnR3X3JlY3ZfaW5kaWNhdGVwa3QyM2EgOmFmdGVyIG5ldGlmX3J4ISEhIVxuIikpOwpAQCAtMjAxLDIyICsxNTMsMTAgQEAKIAogX3JlY3ZfaW5kaWNhdGVwa3RfZHJvcDoKIAotCSBydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJlY3ZfZnJhbWUsIHBmcmVlX3JlY3ZfcXVldWUpOworCSBydHdfZnJlZV9yZWN2ZnJhbWUyM2EocHJlY3ZfZnJhbWUpOwogCSByZXR1cm4gX0ZBSUw7CiB9CiAKLXZvaWQgcnR3X29zX3JlYWRfcG9ydDIzYShzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmKQotewotCXN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdiA9ICZwYWRhcHRlci0+cmVjdnByaXY7Ci0KLQkvKiBmcmVlIHNrYiBpbiByZWN2X2J1ZiAqLwotCWRldl9rZnJlZV9za2JfYW55KHByZWN2YnVmLT5wc2tiKTsKLQotCXByZWN2YnVmLT5wc2tiID0gTlVMTDsKLQotCXJ0d19yZWFkX3BvcnQocGFkYXB0ZXIsIHByZWN2cHJpdi0+ZmZfaHdhZGRyLCAwLCBwcmVjdmJ1Zik7Ci19Ci0KIHZvaWQgcnR3X2luaXRfcmVjdl90aW1lcjIzYShzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmwpCiB7CiAJc2V0dXBfdGltZXIoJnByZW9yZGVyX2N0cmwtPnJlb3JkZXJpbmdfY3RybF90aW1lciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3VzYl9pbnRmLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC91c2JfaW50Zi5jCmluZGV4IDYxMjgwNmUuLjhiMjVjMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3VzYl9pbnRmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvdXNiX2ludGYuYwpAQCAtMjEsMTAgKzIxLDggQEAKICNpbmNsdWRlIDxoYWxfaW50Zi5oPgogI2luY2x1ZGUgPHJ0d192ZXJzaW9uLmg+CiAjaW5jbHVkZSA8b3NkZXBfaW50Zi5oPgotI2luY2x1ZGUgPHVzYl92ZW5kb3JfcmVxLmg+CiAjaW5jbHVkZSA8dXNiX29wcy5oPgotI2luY2x1ZGUgPHVzYl9vc2ludGYuaD4KLSNpbmNsdWRlIDx1c2JfaGFsLmg+CisjaW5jbHVkZSA8cnRsODcyM2FfaGFsLmg+CiAKIHN0YXRpYyBpbnQgcnR3X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKIHN0YXRpYyBpbnQgcnR3X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CkBAIC0xMDEsMTUgKzk5LDE1IEBACiAJcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKIH0KIAotc3RhdGljIHU4IHJ0d19pbml0X2ludGZfcHJpdihzdHJ1Y3QgZHZvYmpfcHJpdiAqZHZvYmopCitzdGF0aWMgaW50IHJ0d19pbml0X2ludGZfcHJpdihzdHJ1Y3QgZHZvYmpfcHJpdiAqZHZvYmopCiB7Ci0JdTggcnN0ID0gX1NVQ0NFU1M7CisJaW50IHJzdCA9IF9TVUNDRVNTOwogCiAJbXV0ZXhfaW5pdCgmZHZvYmotPnVzYl92ZW5kb3JfcmVxX211dGV4KTsKIAlkdm9iai0+dXNiX2FsbG9jX3ZlbmRvcl9yZXFfYnVmID0ga3phbGxvYyhNQVhfVVNCX0lPX0NUTF9TSVpFLAogCQkJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoZHZvYmotPnVzYl9hbGxvY192ZW5kb3JfcmVxX2J1ZiA9PSBOVUxMKSB7Ci0JCURCR184NzIzQSgiYWxsb2MgdXNiX3ZlbmRvcl9yZXFfYnVmIGZhaWxlZC4uLiAvbiIpOworCQlEQkdfODcyM0EoImFsbG9jIHVzYl92ZW5kb3JfcmVxX2J1ZiBmYWlsZWQuLi5cbiIpOwogCQlyc3QgPSBfRkFJTDsKIAkJZ290byBleGl0OwogCX0KQEAgLTExOSw5ICsxMTcsOSBAQAogCXJldHVybiByc3Q7CiB9CiAKLXN0YXRpYyB1OCBydHdfZGVpbml0X2ludGZfcHJpdihzdHJ1Y3QgZHZvYmpfcHJpdiAqZHZvYmopCitzdGF0aWMgaW50IHJ0d19kZWluaXRfaW50Zl9wcml2KHN0cnVjdCBkdm9ial9wcml2ICpkdm9iaikKIHsKLQl1OCByc3QgPSBfU1VDQ0VTUzsKKwlpbnQgcnN0ID0gX1NVQ0NFU1M7CiAKIAlrZnJlZShkdm9iai0+dXNiX2FsbG9jX3ZlbmRvcl9yZXFfYnVmKTsKIApAQCAtMjI5LDcgKzIyNyw2IEBACiAJCWdvdG8gZnJlZV9kdm9iajsKIAl9CiAJLyogMyBtaXNjICovCi0Jc2VtYV9pbml0KCYocGR2b2JqcHJpdi0+dXNiX3N1c3BlbmRfc2VtYSksIDApOwogCXJ0d19yZXNldF9jb250aW51YWxfdXJiX2Vycm9yKHBkdm9ianByaXYpOwogCXVzYl9nZXRfZGV2KHB1c2JkKTsKIAlzdGF0dXMgPSBfU1VDQ0VTUzsKQEAgLTI3OCwyMSArMjc1LDcgQEAKIAl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KHVzYl9pbnRmKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlY2lkZV9jaGlwX3R5cGVfYnlfdXNiX2RldmljZV9pZChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLAotCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcGRpZCkKLXsKLQlwYWRhcHRlci0+Y2hpcF90eXBlID0gTlVMTF9DSElQX1RZUEU7Ci0JaGFsX3NldF9od190eXBlKHBhZGFwdGVyKTsKLX0KLQotc3RhdGljIHZvaWQgdXNiX2ludGZfc3RhcnQoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKLXsKLQlSVF9UUkFDRShfbW9kdWxlX2hjaV9pbnRmc19jXywgX2Rydl9lcnJfLCAoIit1c2JfaW50Zl9zdGFydFxuIikpOwotCXJ0d19oYWxfaW5pcnBfaW5pdDIzYShwYWRhcHRlcik7Ci0JUlRfVFJBQ0UoX21vZHVsZV9oY2lfaW50ZnNfY18sIF9kcnZfZXJyXywgKCItdXNiX2ludGZfc3RhcnRcbiIpKTsKLX0KLQotc3RhdGljIHZvaWQgdXNiX2ludGZfc3RvcChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyKQordm9pZCBydGw4NzIzYV91c2JfaW50Zl9zdG9wKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7CiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfaW50ZnNfY18sIF9kcnZfZXJyXywgKCIrdXNiX2ludGZfc3RvcFxuIikpOwogCkBAIC0zMDYsMTAgKzI4OSwxMCBAQAogCX0KIAogCS8qIGNhbmNlbCBpbiBpcnAgKi8KLQlydHdfaGFsX2luaXJwX2RlaW5pdDIzYShwYWRhcHRlcik7CisJcnRsODcyM2F1X2luaXJwX2RlaW5pdChwYWRhcHRlcik7CiAKIAkvKiBjYW5jZWwgb3V0IGlycCAqLwotCXJ0d193cml0ZV9wb3J0X2NhbmNlbChwYWRhcHRlcik7CisJcnRsODcyM2F1X3dyaXRlX3BvcnRfY2FuY2VsKHBhZGFwdGVyKTsKIAogCS8qIHRvZG86Y2FuY2VsIG90aGVyIGlycHMgKi8KIAlSVF9UUkFDRShfbW9kdWxlX2hjaV9pbnRmc19jXywgX2Rydl9lcnJfLCAoIi11c2JfaW50Zl9zdG9wXG4iKSk7CkBAIC0zMjgsMTIgKzMxMSwxMCBAQAogCQkJCQlSVFdfU0NUWF9ET05FX0RSVl9TVE9QKTsKIAogCQkvKiBzMy4gKi8KLQkJaWYgKHBhZGFwdGVyLT5pbnRmX3N0b3ApCi0JCQlwYWRhcHRlci0+aW50Zl9zdG9wKHBhZGFwdGVyKTsKKwkJcnRsODcyM2FfdXNiX2ludGZfc3RvcChwYWRhcHRlcik7CiAKIAkJLyogczQuICovCi0JCWlmICghcGFkYXB0ZXItPnB3cmN0cmxwcml2LmJJbnRlcm5hbEF1dG9TdXNwZW5kKQotCQkJcnR3X3N0b3BfZHJ2X3RocmVhZHMyM2EocGFkYXB0ZXIpOworCQlmbHVzaF93b3JrcXVldWUocGFkYXB0ZXItPmNtZHByaXYud3EpOwogCiAJCS8qIHM1LiAqLwogCQlpZiAoIXBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKSB7CkBAIC0zNTMsNiArMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgcHdyY3RybF9wcml2ICpwd3Jwcml2ID0gJnBhZGFwdGVyLT5wd3JjdHJscHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldiA9IHBhZGFwdGVyLT5wbmV0ZGV2OworCXN0cnVjdCBtbG1lX3ByaXYgKnBtbG1lcHJpdiA9ICZwYWRhcHRlci0+bWxtZXByaXY7CiAKIAlpZiAoKCFwYWRhcHRlci0+YnVwKSB8fCAocGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkKSB8fAogCSAgICAocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQpKSB7CkBAIC0zODAsMjYgKzM2MiwyMiBAQAogCiAJCS8qIHMyLTIuICBpbmRpY2F0ZSBkaXNjb25uZWN0IHRvIG9zICovCiAJCS8qIHJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKHBhZGFwdGVyKTsgKi8KLQkJewotCQkJc3RydWN0CW1sbWVfcHJpdiAqcG1sbWVwcml2ID0gJnBhZGFwdGVyLT5tbG1lcHJpdjsKKwkJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfTElOS0VEKSkgeworCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIF9GV19MSU5LRUQpOwogCi0JCQlpZiAoY2hlY2tfZndzdGF0ZShwbWxtZXByaXYsIF9GV19MSU5LRUQpKSB7Ci0JCQkJX2Nscl9md3N0YXRlXyhwbWxtZXByaXYsIF9GV19MSU5LRUQpOworCQkJcnR3X2xlZF9jb250cm9sKHBhZGFwdGVyLCBMRURfQ1RMX05PX0xJTkspOwogCi0JCQkJcnR3X2xlZF9jb250cm9sKHBhZGFwdGVyLCBMRURfQ1RMX05PX0xJTkspOworCQkJcnR3X29zX2luZGljYXRlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIpOwogCi0JCQkJcnR3X29zX2luZGljYXRlX2Rpc2Nvbm5lY3QyM2EocGFkYXB0ZXIpOwotCi0JCQkJLyogZG9ubm90IGVucXVldWUgY21kICovCi0JCQkJcnR3X2xwc19jdHJsX3drX2NtZDIzYShwYWRhcHRlciwKLQkJCQkJCSAgICBMUFNfQ1RSTF9ESVNDT05ORUNULCAwKTsKLQkJCX0KKwkJCS8qIGRvbm5vdCBlbnF1ZXVlIGNtZCAqLworCQkJcnR3X2xwc19jdHJsX3drX2NtZDIzYShwYWRhcHRlciwKKwkJCQkJICAgICAgIExQU19DVFJMX0RJU0NPTk5FQ1QsIDApOwogCQl9CiAJCS8qIHMyLTMuICovCiAJCXJ0d19mcmVlX2Fzc29jX3Jlc291cmNlczIzYShwYWRhcHRlciwgMSk7CiAKIAkJLyogczItNC4gKi8KLQkJcnR3X2ZyZWVfbmV0d29ya19xdWV1ZTIzYShwYWRhcHRlciwgdHJ1ZSk7CisJCXJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2EocGFkYXB0ZXIpOwogCQlydHdfaXBzX2Rldl91bmxvYWQyM2EocGFkYXB0ZXIpOwogCQlwd3Jwcml2LT5yZl9wd3JzdGF0ZSA9IHJmX29mZjsKIAkJcHdycHJpdi0+Ymlwc19wcm9jZXNzaW5nID0gZmFsc2U7CkBAIC01MDMsMTMgKzQ4MSwxNCBAQAogCS8qIHMyLTMuICovCiAJcnR3X2ZyZWVfYXNzb2NfcmVzb3VyY2VzMjNhKHBhZGFwdGVyLCAxKTsKIAkvKiBzMi00LiAqLwotCXJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2EocGFkYXB0ZXIsIHRydWUpOworCXJ0d19mcmVlX25ldHdvcmtfcXVldWUyM2EocGFkYXB0ZXIpOwogCiAJcnR3X2Rldl91bmxvYWQocGFkYXB0ZXIpOwogCXVwKCZwd3Jwcml2LT5sb2NrKTsKIAogCWlmIChjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgX0ZXX1VOREVSX1NVUlZFWSkpCi0JCXJ0d19pbmRpY2F0ZV9zY2FuX2RvbmUyM2EocGFkYXB0ZXIsIDEpOworCQlydHdfY2ZnODAyMTFfaW5kaWNhdGVfc2Nhbl9kb25lKAorCQkJd2Rldl90b19wcml2KHBhZGFwdGVyLT5ydHdfd2RldiksIHRydWUpOwogCiAJaWYgKGNoZWNrX2Z3c3RhdGUocG1sbWVwcml2LCBfRldfVU5ERVJfTElOS0lORykpCiAJCXJ0d19pbmRpY2F0ZV9kaXNjb25uZWN0MjNhKHBhZGFwdGVyKTsKQEAgLTUyNSwxMyArNTA0LDkgQEAKIHsKIAlzdHJ1Y3QgZHZvYmpfcHJpdiAqZHZvYmogPSB1c2JfZ2V0X2ludGZkYXRhKHB1c2JfaW50Zik7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IGR2b2JqLT5pZjE7Ci0Jc3RydWN0IHB3cmN0cmxfcHJpdiAqcHdycHJpdiA9ICZwYWRhcHRlci0+cHdyY3RybHByaXY7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAotCWlmIChwd3Jwcml2LT5iSW50ZXJuYWxBdXRvU3VzcGVuZCkKLQkJcmV0ID0gcnR3X3Jlc3VtZV9wcm9jZXNzMjNhKHBhZGFwdGVyKTsKLQllbHNlCi0JCXJldCA9IHJ0d19yZXN1bWVfcHJvY2VzczIzYShwYWRhcHRlcik7CisJcmV0ID0gcnR3X3Jlc3VtZV9wcm9jZXNzMjNhKHBhZGFwdGVyKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NjUsNyArNTQwLDcgQEAKIAogCWlmIChwYWRhcHRlci0+cGlkWzFdICE9IDApIHsKIAkJREJHXzg3MjNBKCJwaWRbMV06JWRcbiIsIHBhZGFwdGVyLT5waWRbMV0pOwotCQlydHdfc2lnbmFsX3Byb2Nlc3MocGFkYXB0ZXItPnBpZFsxXSwgU0lHVVNSMik7CisJCWtpbGxfcGlkKGZpbmRfdnBpZChwYWRhcHRlci0+cGlkWzFdKSwgU0lHVVNSMiwgMSk7CiAJfQogCiAJcnR3MjNhX3JvYW1pbmcocGFkYXB0ZXIsIE5VTEwpOwpAQCAtNjA2LDggKzU4MSw3IEBACiAJZHZvYmotPnBhZGFwdGVyc1tkdm9iai0+aWZhY2VfbnVtcysrXSA9IHBhZGFwdGVyOwogCXBhZGFwdGVyLT5pZmFjZV9pZCA9IElGQUNFX0lEMDsKIAotCS8qIHN0ZXAgMS0xLiwgZGVjaWRlIHRoZSBjaGlwX3R5cGUgdmlhIHZpZC9waWQgKi8KLQlkZWNpZGVfY2hpcF90eXBlX2J5X3VzYl9kZXZpY2VfaWQocGFkYXB0ZXIsIHBkaWQpOworCXJ0bDg3MjNhdV9zZXRfaHdfdHlwZShwYWRhcHRlcik7CiAKIAlpZiAocnR3X2hhbmRsZV9kdWFsbWFjMjNhKHBhZGFwdGVyLCAxKSAhPSBfU1VDQ0VTUykKIAkJZ290byBmcmVlX2FkYXB0ZXI7CkBAIC02MTcsMjQgKzU5MSwxOSBAQAogCWlmIChydHdfd2Rldl9hbGxvYyhwYWRhcHRlciwgZHZvYmpfdG9fZGV2KGR2b2JqKSkpCiAJCWdvdG8gaGFuZGxlX2R1YWxtYWM7CiAKLQkvKiBzdGVwIDIuIGhvb2sgSGFsRnVuYywgYWxsb2NhdGUgSGFsRGF0YSAqLwotCWlmIChydGw4NzIzYXVfc2V0X2hhbF9vcHMocGFkYXB0ZXIpKQotCQlyZXR1cm4gTlVMTDsKLQotCXBhZGFwdGVyLT5pbnRmX3N0YXJ0ID0gJnVzYl9pbnRmX3N0YXJ0OwotCXBhZGFwdGVyLT5pbnRmX3N0b3AgPSAmdXNiX2ludGZfc3RvcDsKLQotCS8qIHN0ZXAgaW5pdF9pb19wcml2ICovCi0JcnR3X2luaXRfaW9fcHJpdjIzYShwYWRhcHRlciwgdXNiX3NldF9pbnRmX29wcyk7CisJLyogc3RlcCAyLiBhbGxvY2F0ZSBIYWxEYXRhICovCisJcGFkYXB0ZXItPkhhbERhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGFsX2RhdGFfODcyM2EpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZGFwdGVyLT5IYWxEYXRhKQorCQlnb3RvIGZyZWVfd2RldjsKIAogCS8qIHN0ZXAgcmVhZF9jaGlwX3ZlcnNpb24gKi8KLQlydHdfaGFsX3JlYWRfY2hpcF92ZXJzaW9uMjNhKHBhZGFwdGVyKTsKKwlydGw4NzIzYV9yZWFkX2NoaXBfdmVyc2lvbihwYWRhcHRlcik7CiAKIAkvKiBzdGVwIHVzYiBlbmRwb2ludCBtYXBwaW5nICovCi0JcnR3X2hhbF9jaGlwX2NvbmZpZ3VyZTIzYShwYWRhcHRlcik7CisJcnRsODcyM2F1X2NoaXBfY29uZmlndXJlKHBhZGFwdGVyKTsKIAogCS8qIHN0ZXAgcmVhZCBlZnVzZS9lZXByb20gZGF0YSBhbmQgZ2V0IG1hY19hZGRyICovCi0JcnR3X2hhbF9yZWFkX2NoaXBfaW5mbzIzYShwYWRhcHRlcik7CisJcnRsODcyM2FfcmVhZF9hZGFwdGVyX2luZm8ocGFkYXB0ZXIpOwogCiAJLyogc3RlcCA1LiAqLwogCWlmIChydHdfaW5pdF9kcnZfc3cyM2EocGFkYXB0ZXIpID09IF9GQUlMKSB7CkBAIC02NjIsMTIgKzYzMSwxMCBAQAogCXBhZGFwdGVyLT5wd3JjdHJscHJpdi5hdXRvcG1fY250ID0gMTsKICNlbmRpZgogCi0JLyogIHNldCBtYWMgYWRkciAqLwotCXJ0d19tYWNhZGRyX2NmZzIzYShwYWRhcHRlci0+ZWVwcm9tcHJpdi5tYWNfYWRkcik7Ci0jaWZkZWYgQ09ORklHXzg3MjNBVV9QMlAKLQlydHdfaW5pdF93aWZpZGlyZWN0X2FkZHJzMjNhKHBhZGFwdGVyLCBwYWRhcHRlci0+ZWVwcm9tcHJpdi5tYWNfYWRkciwKLQkJCQkgIHBhZGFwdGVyLT5lZXByb21wcml2Lm1hY19hZGRyKTsKLSNlbmRpZgorCS8qIElmIHRoZSBlZXByb20gbWFjIGFkZHJlc3MgaXMgY29ycnVwdGVkLCBhc3NpZ24gYSByYW5kb20gYWRkcmVzcyAqLworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwYWRhcHRlci0+ZWVwcm9tcHJpdi5tYWNfYWRkcikgfHwKKwkgICAgaXNfemVyb19ldGhlcl9hZGRyKHBhZGFwdGVyLT5lZXByb21wcml2Lm1hY19hZGRyKSkKKwkJZXRoX3JhbmRvbV9hZGRyKHBhZGFwdGVyLT5lZXByb21wcml2Lm1hY19hZGRyKTsKIAogCURCR184NzIzQSgiYkRyaXZlclN0b3BwZWQ6JWQsIGJTdXJwcmlzZVJlbW92ZWQ6JWQsIGJ1cDolZCwgaHdfaW5pdF9jb21wbGV0ZWQ6JWRcbiIsCiAJCSAgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLCBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCwKQEAgLTY3OCw2ICs2NDUsNyBAQAogZnJlZV9oYWxfZGF0YToKIAlpZiAoc3RhdHVzICE9IF9TVUNDRVNTKQogCQlrZnJlZShwYWRhcHRlci0+SGFsRGF0YSk7CitmcmVlX3dkZXY6CiAJaWYgKHN0YXR1cyAhPSBfU1VDQ0VTUykgewogCQlydHdfd2Rldl91bnJlZ2lzdGVyKHBhZGFwdGVyLT5ydHdfd2Rldik7CiAJCXJ0d193ZGV2X2ZyZWUocGFkYXB0ZXItPnJ0d193ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3VzYl9vcHNfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3VzYl9vcHNfbGludXguYwppbmRleCAwN2U1NDJlLi5kMDgxNDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC91c2Jfb3BzX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvdXNiX29wc19saW51eC5jCkBAIC0xOCwyMiArMTgsNiBAQAogI2luY2x1ZGUgPHVzYl9vcHNfbGludXguaD4KICNpbmNsdWRlIDxydHdfc3Jlc2V0Lmg+CiAKLXVuc2lnbmVkIGludCBmZmFkZHIycGlwZWhkbDIzYShzdHJ1Y3QgZHZvYmpfcHJpdiAqcGR2b2JqLCB1MzIgYWRkcikKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYmQgPSBwZHZvYmotPnB1c2JkZXY7Ci0JdW5zaWduZWQgaW50IHBpcGUgPSAwLCBlcF9udW0gPSAwOwotCi0JaWYgKGFkZHIgPT0gUkVDVl9CVUxLX0lOX0FERFIpIHsKLQkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShwdXNiZCwgcGR2b2JqLT5SdEluUGlwZVswXSk7Ci0JfSBlbHNlIGlmIChhZGRyID09IFJFQ1ZfSU5UX0lOX0FERFIpIHsKLQkJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHB1c2JkLCBwZHZvYmotPlJ0SW5QaXBlWzFdKTsKLQl9IGVsc2UgaWYgKGFkZHIgPCBIV19RVUVVRV9FTlRSWSkgewotCQllcF9udW0gPSBwZHZvYmotPlF1ZXVlMlBpcGVbYWRkcl07Ci0JCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUocHVzYmQsIGVwX251bSk7Ci0JfQotCXJldHVybiBwaXBlOwotfQotCiBzdHJ1Y3QgemVyb19idWxrb3V0X2NvbnRleHQgewogCXZvaWQgKnBidWY7CiAJdm9pZCAqcHVyYjsKQEAgLTQxLDE4ICsyNSw5IEBACiAJdm9pZCAqcGFkYXB0ZXI7CiB9OwogCi12b2lkIHVzYl9yZWFkX21lbTIzYShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTMyIGNudCwgdTggKnJtZW0pCi17Ci19Ci0KLXZvaWQgdXNiX3dyaXRlX21lbTIzYShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTMyIGNudCwgdTggKndtZW0pCi17Ci19Ci0KLXZvaWQgdXNiX3JlYWRfcG9ydF9jYW5jZWwyM2Eoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCkKK3ZvaWQgcnRsODcyM2F1X3JlYWRfcG9ydF9jYW5jZWwoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlcikKIHsKIAlzdHJ1Y3QgcmVjdl9idWYgKnByZWN2YnVmOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSBwaW50ZmhkbC0+cGFkYXB0ZXI7CiAJaW50IGk7CiAKIAlwcmVjdmJ1ZiA9IChzdHJ1Y3QgcmVjdl9idWYgKilwYWRhcHRlci0+cmVjdnByaXYucHJlY3ZfYnVmOwpAQCAtNjksNyArNDQsNyBAQAogCXVzYl9raWxsX3VyYihwYWRhcHRlci0+cmVjdnByaXYuaW50X2luX3VyYik7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYl93cml0ZV9wb3J0MjNhX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgdXNiX3dyaXRlX3BvcnQyM2FfY29tcGxldGUoc3RydWN0IHVyYiAqcHVyYikKIHsKIAlzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmID0gKHN0cnVjdCB4bWl0X2J1ZiAqKXB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHB4bWl0YnVmLT5wYWRhcHRlcjsKQEAgLTEwMiwyMyArNzcsMjUgQEAKIAlpZiAocGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgfHwgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkIHx8CiAJICAgIHBhZGFwdGVyLT5iV3JpdGVQb3J0Q2FuY2VsKSB7CiAJCVJUX1RSQUNFKF9tb2R1bGVfaGNpX29wc19vc19jXywgX2Rydl9lcnJfLAotCQkJICgidXNiX3dyaXRlX3BvcnQyM2FfY29tcGxldGU6YkRyaXZlclN0b3BwZWQoJWQpIE9SIGJTdXJwcmlzZVJlbW92ZWQoJWQpIiwKLQkJCSBwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQsIHBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKSk7Ci0JCURCR184NzIzQSgiJXMoKTogVFggV2FybmluZyEgYkRyaXZlclN0b3BwZWQoJWQpIE9SIGJTdXJwcmlzZVJlbW92ZWQoJWQpIGJXcml0ZVBvcnRDYW5jZWwoJWQpIHB4bWl0YnVmLT5leHRfdGFnKCV4KVxuIiwKLQkJCSAgX19mdW5jX18sIHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCwKLQkJCSAgcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQsIHBhZGFwdGVyLT5iUmVhZFBvcnRDYW5jZWwsCi0JCQkgIHB4bWl0YnVmLT5leHRfdGFnKTsKKwkJCSAoInVzYl93cml0ZV9wb3J0MjNhX2NvbXBsZXRlOmJEcml2ZXJTdG9wcGVkKCVkKSBPUiAiCisJCQkgICJiU3VycHJpc2VSZW1vdmVkKCVkKSIsIHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCwKKwkJCSAgcGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQpKTsKKwkJREJHXzg3MjNBKCIlcygpOiBUWCBXYXJuaW5nISBiRHJpdmVyU3RvcHBlZCglZCkgT1IgIgorCQkJICAiYlN1cnByaXNlUmVtb3ZlZCglZCkgYldyaXRlUG9ydENhbmNlbCglZCkgIgorCQkJICAicHhtaXRidWYtPmV4dF90YWcoJXgpXG4iLCBfX2Z1bmNfXywKKwkJCSAgcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkLCBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCwKKwkJCSAgcGFkYXB0ZXItPmJSZWFkUG9ydENhbmNlbCwgcHhtaXRidWYtPmV4dF90YWcpOwogCiAJCWdvdG8gY2hlY2tfY29tcGxldGlvbjsKIAl9CiAKIAlpZiAocHVyYi0+c3RhdHVzKSB7CiAJCVJUX1RSQUNFKF9tb2R1bGVfaGNpX29wc19vc19jXywgX2Rydl9lcnJfLAotCQkJICgidXNiX3dyaXRlX3BvcnQyM2FfY29tcGxldGUgOiBwdXJiLT5zdGF0dXMoJWQpICE9IDBcbiIsCi0JCQkgcHVyYi0+c3RhdHVzKSk7CisJCQkgKCJ1c2Jfd3JpdGVfcG9ydDIzYV9jb21wbGV0ZSA6IHB1cmItPnN0YXR1cyglZCkgIgorCQkJICAiIT0gMFxuIiwgcHVyYi0+c3RhdHVzKSk7CiAJCURCR184NzIzQSgiIyMjPT4gdXJiX3dyaXRlX3BvcnRfY29tcGxldGUgc3RhdHVzKCVkKVxuIiwKIAkJCSAgcHVyYi0+c3RhdHVzKTsKLQkJaWYgKChwdXJiLT5zdGF0dXMgPT0gLUVQSVBFKSB8fCAocHVyYi0+c3RhdHVzID09IC1FUFJPVE8pKSB7CisJCWlmIChwdXJiLT5zdGF0dXMgPT0gLUVQSVBFIHx8IHB1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7CiAJCQlzcmVzZXRfc2V0X3dpZmlfZXJyb3Jfc3RhdHVzMjNhKHBhZGFwdGVyLAogCQkJCQkJICAgICBVU0JfV1JJVEVfUE9SVF9GQUlMKTsKIAkJfSBlbHNlIGlmIChwdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CkBAIC0xMzYsMTMgKzExMywxNSBAQAogCQkJCSAoInVzYl93cml0ZV9wb3J0MjNhX2NvbXBsZXRlOiBFU0hVVERPV05cbiIpKTsKIAkJCXBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCA9IHRydWU7CiAJCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9vcHNfb3NfY18sIF9kcnZfZXJyXywKLQkJCQkgKCJ1c2Jfd3JpdGVfcG9ydDIzYV9jb21wbGV0ZTpiRHJpdmVyU3RvcHBlZCA9IHRydWVcbiIpKTsKKwkJCQkgKCJ1c2Jfd3JpdGVfcG9ydDIzYV9jb21wbGV0ZTpiRHJpdmVyU3RvcHBlZCAiCisJCQkJICAiPSB0cnVlXG4iKSk7CiAJCQlnb3RvIGNoZWNrX2NvbXBsZXRpb247CiAJCX0gZWxzZSB7CiAJCQlwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCA9IHRydWU7CiAJCQlEQkdfODcyM0EoImJTdXJwcmlzZVJlbW92ZWQgPSB0cnVlXG4iKTsKIAkJCVJUX1RSQUNFKF9tb2R1bGVfaGNpX29wc19vc19jXywgX2Rydl9lcnJfLAotCQkJCSAoInVzYl93cml0ZV9wb3J0MjNhX2NvbXBsZXRlOmJTdXJwcmlzZVJlbW92ZWQgPSB0cnVlXG4iKSk7CisJCQkJICgidXNiX3dyaXRlX3BvcnQyM2FfY29tcGxldGU6YlN1cnByaXNlUmVtb3ZlZCAiCisJCQkJICAiPSB0cnVlXG4iKSk7CiAJCQlnb3RvIGNoZWNrX2NvbXBsZXRpb247CiAJCX0KIAl9CkBAIC0xNTIsOCArMTMxLDggQEAKIGNoZWNrX2NvbXBsZXRpb246CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnB4bWl0cHJpdi0+bG9ja19zY3R4LCBpcnFMKTsKIAlydHcyM2Ffc2N0eF9kb25lX2VycigmcHhtaXRidWYtPnNjdHgsCi0JCQkgIHB1cmItPnN0YXR1cyA/IFJUV19TQ1RYX0RPTkVfV1JJVEVfUE9SVF9FUlIgOgotCQkJICBSVFdfU0NUWF9ET05FX1NVQ0NFU1MpOworCQkJICAgICBwdXJiLT5zdGF0dXMgPyBSVFdfU0NUWF9ET05FX1dSSVRFX1BPUlRfRVJSIDoKKwkJCSAgICAgUlRXX1NDVFhfRE9ORV9TVUNDRVNTKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZweG1pdHByaXYtPmxvY2tfc2N0eCwgaXJxTCk7CiAKIAlydHdfZnJlZV94bWl0YnVmMjNhKHB4bWl0cHJpdiwgcHhtaXRidWYpOwpAQCAtMTYxLDMwICsxNDAsMzIgQEAKIAl0YXNrbGV0X2hpX3NjaGVkdWxlKCZweG1pdHByaXYtPnhtaXRfdGFza2xldCk7CiB9CiAKLXUzMiB1c2Jfd3JpdGVfcG9ydDIzYShzdHJ1Y3QgaW50Zl9oZGwgKnBpbnRmaGRsLCB1MzIgYWRkciwgdTMyIGNudCwKLQkJICAgc3RydWN0IHhtaXRfYnVmICpweG1pdGJ1ZikKK2ludCBydGw4NzIzYXVfd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2FkYXB0ZXIgKnBhZGFwdGVyLCB1MzIgYWRkciwgdTMyIGNudCwKKwkJCSBzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmKQogewogCXN0cnVjdCB1cmIgKnB1cmIgPSBOVUxMOwotCXN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIgPSAoc3RydWN0IHJ0d19hZGFwdGVyICopcGludGZoZGwtPnBhZGFwdGVyOwogCXN0cnVjdCBkdm9ial9wcml2ICpwZHZvYmogPSBhZGFwdGVyX3RvX2R2b2JqKHBhZGFwdGVyKTsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwotCXN0cnVjdCB4bWl0X2ZyYW1lICpweG1pdGZyYW1lID0gKHN0cnVjdCB4bWl0X2ZyYW1lICopcHhtaXRidWYtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgeG1pdF9mcmFtZSAqcHhtaXRmcmFtZTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYmQgPSBwZHZvYmotPnB1c2JkZXY7CiAJdW5zaWduZWQgbG9uZyBpcnFMOwotCXVuc2lnbmVkIGludCBwaXBlOworCXVuc2lnbmVkIGludCBwaXBlLCBlcF9udW07CiAJaW50IHN0YXR1czsKLQl1MzIgcmV0ID0gX0ZBSUw7CisJaW50IHJldCA9IF9GQUlMOwogCiAJUlRfVFJBQ0UoX21vZHVsZV9oY2lfb3BzX29zX2NfLCBfZHJ2X2Vycl8sICgiK3VzYl93cml0ZV9wb3J0MjNhXG4iKSk7CiAKLQlpZiAoKHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCkgfHwgKHBhZGFwdGVyLT5iU3VycHJpc2VSZW1vdmVkKSB8fAotCSAgICAocGFkYXB0ZXItPnB3cmN0cmxwcml2LnBucF9ic3RvcF90cngpKSB7CisJaWYgKHBhZGFwdGVyLT5iRHJpdmVyU3RvcHBlZCB8fCBwYWRhcHRlci0+YlN1cnByaXNlUmVtb3ZlZCB8fAorCSAgICBwYWRhcHRlci0+cHdyY3RybHByaXYucG5wX2JzdG9wX3RyeCkgewogCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9vcHNfb3NfY18sIF9kcnZfZXJyXywKLQkJCSAoInVzYl93cml0ZV9wb3J0MjNhOiggcGFkYXB0ZXItPmJEcml2ZXJTdG9wcGVkIHx8cGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgfHxhZGFwdGVyLT5wd3JjdHJscHJpdi5wbnBfYnN0b3BfdHJ4KSEhIVxuIikpOworCQkJICgidXNiX3dyaXRlX3BvcnQyM2E6KCBwYWRhcHRlci0+YkRyaXZlclN0b3BwZWQgfHwgIgorCQkJICAicGFkYXB0ZXItPmJTdXJwcmlzZVJlbW92ZWQgfHwgIgorCQkJICAiYWRhcHRlci0+cHdyY3RybHByaXYucG5wX2JzdG9wX3RyeCkhISFcbiIpKTsKIAkJcnR3MjNhX3NjdHhfZG9uZV9lcnIoJnB4bWl0YnVmLT5zY3R4LCBSVFdfU0NUWF9ET05FX1RYX0RFTlkpOwogCQlnb3RvIGV4aXQ7CiAJfQogCisJcHhtaXRmcmFtZSA9IChzdHJ1Y3QgeG1pdF9mcmFtZSAqKXB4bWl0YnVmLT5wcml2X2RhdGE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnB4bWl0cHJpdi0+bG9jaywgaXJxTCk7CiAKIAlzd2l0Y2ggKGFkZHIpIHsKQEAgLTIxNCwxMCArMTk1LDExIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZweG1pdHByaXYtPmxvY2ssIGlycUwpOwogCi0JcHVyYgk9IHB4bWl0YnVmLT5weG1pdF91cmJbMF07CisJcHVyYiA9IHB4bWl0YnVmLT5weG1pdF91cmJbMF07CiAKIAkvKiB0cmFuc2xhdGUgRE1BIEZJRk8gYWRkciB0byBwaXBlaGFuZGxlICovCi0JcGlwZSA9IGZmYWRkcjJwaXBlaGRsMjNhKHBkdm9iaiwgYWRkcik7CisJZXBfbnVtID0gcGR2b2JqLT5RdWV1ZTJQaXBlW2FkZHJdOworCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUocHVzYmQsIGVwX251bSk7CiAKIAl1c2JfZmlsbF9idWxrX3VyYihwdXJiLCBwdXNiZCwgcGlwZSwKIAkJCSAgcHhtaXRmcmFtZS0+YnVmX2FkZHIsIC8qICBweG1pdGJ1Zi0+cGJ1ZiAqLwpAQCAtMjMwLDcgKzIxMiw3IEBACiAJCXBoYWxkYXRhLT5zcmVzdHByaXYubGFzdF90eF90aW1lID0gamlmZmllczsKIAl9IGVsc2UgewogCQlydHcyM2Ffc2N0eF9kb25lX2VycigmcHhtaXRidWYtPnNjdHgsCi0JCQkJICBSVFdfU0NUWF9ET05FX1dSSVRFX1BPUlRfRVJSKTsKKwkJCQkgICAgIFJUV19TQ1RYX0RPTkVfV1JJVEVfUE9SVF9FUlIpOwogCQlEQkdfODcyM0EoInVzYl93cml0ZV9wb3J0MjNhLCBzdGF0dXMgPSVkXG4iLCBzdGF0dXMpOwogCQlSVF9UUkFDRShfbW9kdWxlX2hjaV9vcHNfb3NfY18sIF9kcnZfZXJyXywKIAkJCSAoInVzYl93cml0ZV9wb3J0MjNhKCk6IHVzYl9zdWJtaXRfdXJiLCBzdGF0dXMgPSV4XG4iLApAQCAtMjU1LDkgKzIzNyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCB1c2Jfd3JpdGVfcG9ydDIzYV9jYW5jZWwoc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCkKK3ZvaWQgcnRsODcyM2F1X3dyaXRlX3BvcnRfY2FuY2VsKHN0cnVjdCBydHdfYWRhcHRlciAqcGFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciA9IHBpbnRmaGRsLT5wYWRhcHRlcjsKIAlzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0OwogCWludCBqOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAveG1pdF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAveG1pdF9saW51eC5jCmluZGV4IGUxYzZmYzcuLjY5Zjg4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL3htaXRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC94bWl0X2xpbnV4LmMKQEAgLTI0LDQ3ICsyNCw2IEBACiAjaW5jbHVkZSA8eG1pdF9vc2RlcC5oPgogI2luY2x1ZGUgPG9zZGVwX2ludGYuaD4KIAotdWludCBydHdfcmVtYWluZGVyX2xlbjIzYShzdHJ1Y3QgcGt0X2ZpbGUgKnBmaWxlKQotewotCXJldHVybiBwZmlsZS0+YnVmX2xlbiAtICgodW5zaWduZWQgbG9uZykocGZpbGUtPmN1cl9hZGRyKSAtCi0JICAgICAgICh1bnNpZ25lZCBsb25nKShwZmlsZS0+YnVmX3N0YXJ0KSk7Ci19Ci0KLXZvaWQgX3J0d19vcGVuX3BrdGZpbGUyM2Eoc3RydWN0IHNrX2J1ZmYgKnBrdHB0ciwgc3RydWN0IHBrdF9maWxlICpwZmlsZSkKLXsKLQlwZmlsZS0+cGt0ID0gcGt0cHRyOwotCXBmaWxlLT5idWZfc3RhcnQgPSBwa3RwdHItPmRhdGE7Ci0JcGZpbGUtPmN1cl9hZGRyID0gcGt0cHRyLT5kYXRhOwotCXBmaWxlLT5idWZfbGVuID0gcGt0cHRyLT5sZW47Ci0JcGZpbGUtPnBrdF9sZW4gPSBwa3RwdHItPmxlbjsKLQotCXBmaWxlLT5jdXJfYnVmZmVyID0gcGZpbGUtPmJ1Zl9zdGFydDsKLX0KLQotdWludCBfcnR3X3BrdGZpbGVfcmVhZDIzYShzdHJ1Y3QgcGt0X2ZpbGUgKnBmaWxlLCB1OCAqcm1lbSwgdWludCBybGVuKQotewotCXVpbnQJbGVuID0gMDsKLQotCWxlbiA9ICBydHdfcmVtYWluZGVyX2xlbjIzYShwZmlsZSk7Ci0JbGVuID0gKHJsZW4gPiBsZW4pID8gbGVuIDogcmxlbjsKLQotCWlmIChybWVtKQotCQlza2JfY29weV9iaXRzKHBmaWxlLT5wa3QsIHBmaWxlLT5idWZfbGVuLXBmaWxlLT5wa3RfbGVuLAotCQkJICAgICAgcm1lbSwgbGVuKTsKLQotCXBmaWxlLT5jdXJfYWRkciArPSBsZW47Ci0JcGZpbGUtPnBrdF9sZW4gLT0gbGVuOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotaW50IHJ0d19lbmRvZnBrdGZpbGUyM2Eoc3RydWN0IHBrdF9maWxlICpwZmlsZSkKLXsKLQlpZiAocGZpbGUtPnBrdF9sZW4gPT0gMCkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBpbnQgcnR3X29zX3htaXRfcmVzb3VyY2VfYWxsb2MyM2Eoc3RydWN0IHJ0d19hZGFwdGVyICpwYWRhcHRlciwKIAkJCSAgICAgICBzdHJ1Y3QgeG1pdF9idWYgKnB4bWl0YnVmLCB1MzIgYWxsb2Nfc3opCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2Jhc2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYmFzZS5jCmluZGV4IGE0YzljYzQuLjRhMzZkYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYmFzZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYmFzZS5jCkBAIC0zMjAsOSArMzIwLDYgQEAKIAkvKiA8NT4gc2V0IGh3IGNhcHMgKi8KIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigzLCA0LCAwKSkKLQkgICAgSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIgfAotI2VuZGlmCiAJICAgIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTiB8CiAJICAgIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMgfAogCSAgICBJRUVFODAyMTFfSFdfQ09OTkVDVElPTl9NT05JVE9SIHwKQEAgLTMzNSw4ICszMzIsNiBAQAogCQkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKIAkJCS8qIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTIHwgKi8KIAkJCTA7Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAzNykpCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKIAkgICAgQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKQEAgLTM0NCwyMyArMzM5LDEwIEBACiAJICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CiAJICAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSB8CiAJICAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pOwotI2Vsc2UKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKLQkgICAgQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8Ci0JICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSA7Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDM5KSkKLQlody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfSUJTU19SU047Ci0jZW5kaWYKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywgMywgMCkpCisJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0lCU1NfUlNOOworCiAJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0hBU19SRU1BSU5fT05fQ0hBTk5FTDsKLSNlbmRpZgogCiAJaHctPndpcGh5LT5ydHNfdGhyZXNob2xkID0gMjM0NzsKIApAQCAtNDAxLDE1ICszODMsOCBAQAogCQkgICAgcnRsX2Vhc3lfY29uY3VycmVudF9yZXRyeXRpbWVyX2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZylodyk7CiAJLyogPDI+IHdvcmsgcXVldWUgKi8KIAlydGxwcml2LT53b3Jrcy5odyA9IGh3OwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMzcpKQotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KLQlydGxwcml2LT53b3Jrcy5ydGxfd3EgPSBhbGxvY193b3JrcXVldWUocnRscHJpdi0+Y2ZnLT5uYW1lLCAwLCAwKTsKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNlbHNlCi0JcnRscHJpdi0+d29ya3MucnRsX3dxID0gY3JlYXRlX3dvcmtxdWV1ZShydGxwcml2LT5jZmctPm5hbWUpOwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLworCXJ0bHByaXYtPndvcmtzLnJ0bF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgiJXMiLCAwLCAwLAorCQkJCQkJcnRscHJpdi0+Y2ZnLT5uYW1lKTsKIAlpZiAoIXJ0bHByaXYtPndvcmtzLnJ0bF93cSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTkwMCwxMyArODc1LDggQEAKIAkJCQkJCQkJICAgIGhkci0+YWRkcjMsCiAJCQkJCQkJCSAgICB0aWQpOwogCQkJCQlpZiAoc2tiX2RlbGJhKSB7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLCAxMCwgMCkpCiAJCQkJCQlyeF9zdGF0dXMuZnJlcSA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7CiAJCQkJCQlyeF9zdGF0dXMuYmFuZCA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZDsKLSNlbHNlCi0JCQkJCQlyeF9zdGF0dXMuZnJlcSA9IGh3LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwotCQkJCQkJcnhfc3RhdHVzLmJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOwotI2VuZGlmCiAJCQkJCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKIAkJCQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9NUERVOwogCQkJCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gMDsKQEAgLTE0ODEsMjEgKzE0NTEsOCBAQAogCQkvKiBydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsIDApOyAqLwogCiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gMDsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsIDEwLCAwKSkKIAkJaW5mby0+YmFuZCA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZDsKLSNlbHNlCi0JCWluZm8tPmJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDMsIDcsIDApKQotCQlpbmZvLT5jb250cm9sLnN0YSA9IHN0YTsKLQkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIHNrYiwgJnRjYl9kZXNjKTsKLSNlbHNlCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCQlydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl90eChodywgc3RhLCBza2IsICZ0Y2JfZGVzYyk7Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJfQogCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4MTkyZTJhbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5jCmluZGV4IDExNTkwODkuLmQyMzgxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKiAgIGluY2x1ZGUgZmlsZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJoYWxidF9wcmVjb21wLmgiCi0jaWYgMQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgR2xvYmFsIHZhcmlhYmxlcywgdGhlc2UgYXJlIHN0YXRpYyB2YXJpYWJsZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIxLDE0ICsyMSwxNCBAQAogc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84MTkyZV8yYW50IGdsY29leF9zdGFfODE5MmVfMmFudDsKIHN0YXRpYyBzdHJ1Y3QgY29leF9zdGFfODE5MmVfMmFudCAqY29leF9zdGEgPSAmZ2xjb2V4X3N0YV84MTkyZV8yYW50OwogCi1jb25zdCBjaGFyICpjb25zdCBHTEJ0SW5mb1NyYzgxOTJlMkFudFtdPXsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBHTEJ0SW5mb1NyYzgxOTJlMkFudFtdID0gewogCSJCVCBJbmZvW3dpZmkgZnddIiwKIAkiQlQgSW5mb1tidCByc3BdIiwKIAkiQlQgSW5mb1tidCBhdXRvIHJlcG9ydF0iLAogfTsKIAotdTMyIGdsY29leF92ZXJfZGF0ZV84MTkyZV8yYW50ID0gMjAxMzA5MDI7Ci11MzIgZ2xjb2V4X3Zlcl84MTkyZV8yYW50ID0gMHgzNDsKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl9kYXRlXzgxOTJlXzJhbnQgPSAyMDEzMDkwMjsKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl84MTkyZV8yYW50ID0gMHgzNDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgIGxvY2FsIGZ1bmN0aW9uIHByb3RvIHR5cGUgaWYgbmVlZGVkCkBAIC0zNiwxMyArMzYsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICBsb2NhbCBmdW5jdGlvbiBzdGFydCB3aXRoIGhhbGJ0YzgxOTJlMmFudF8KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXU4IGhhbGJ0YzgxOTJlMmFudF9idHJzc2lfc3RhdGUodTggbGV2ZWxfbnVtLCB1OCByc3NpX3RocmVzaCwgdTggcnNzaV90aHJlc2gxKQorc3RhdGljIHU4IGhhbGJ0YzgxOTJlMmFudF9idHJzc2lfc3RhdGUodTggbGV2ZWxfbnVtLCB1OCByc3NpX3RocmVzaCwKKwkJCQkgICAgICAgdTggcnNzaV90aHJlc2gxKQogewotCWludCBidHJzc2k9MDsKKwlpbnQgYnRyc3NpID0gY29leF9zdGEtPmJ0X3Jzc2k7CiAJdTggYnRyc3NpX3N0YXRlID0gY29leF9zdGEtPnByZV9idF9yc3NpX3N0YXRlOwogCi0JYnRyc3NpID0gY29leF9zdGEtPmJ0X3Jzc2k7Ci0KIAlpZiAobGV2ZWxfbnVtID09IDIpIHsKIAkJaWYgKChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTE9XKSB8fAogCQkgICAgKGNvZXhfc3RhLT5wcmVfYnRfcnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVykpIHsKQEAgLTgyLDcgKzgxLDcgQEAKIAkJICAgIChjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CiAJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fQlRfUlNTSV9TVEFURSwKIAkJCQkgICJCVCBSc3NpIHByZSBzdGF0ZT1MT1dcbiIpOwotCQkJaWYoYnRyc3NpID49IChyc3NpX3RocmVzaCArCisJCQlpZiAoYnRyc3NpID49IChyc3NpX3RocmVzaCArCiAJCQkJICAgICAgQlRDX1JTU0lfQ09FWF9USFJFU0hfVE9MXzgxOTJFXzJBTlQpKSB7CiAJCQkJYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfTUVESVVNOwogCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19CVF9SU1NJX1NUQVRFLApAQCAtMTMyLDggKzEzMSw5IEBACiAJcmV0dXJuIGJ0cnNzaV9zdGF0ZTsKIH0KIAotdTggaGFsYnRjODE5MmUyYW50X3dpZmlyc3NpX3N0YXRlKHN0cnVjdCBidGNfY29leGlzdCAqIGJ0Y29leGlzdCwgdTggaW5kZXgsCi0JCQkJICB1OCBsZXZlbF9udW0sIHU4IHJzc2lfdGhyZXNoLCB1OCByc3NpX3RocmVzaDEpCitzdGF0aWMgdTggaGFsYnRjODE5MmUyYW50X3dpZmlyc3NpX3N0YXRlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgdTggaW5kZXgsIHU4IGxldmVsX251bSwKKwkJCQkJIHU4IHJzc2lfdGhyZXNoLCB1OCByc3NpX3RocmVzaDEpCiB7CiAJaW50IHdpZmlyc3NpID0gMDsKIAl1OCB3aWZpcnNzaV9zdGF0ZSA9IGNvZXhfc3RhLT5wcmVfd2lmaV9yc3NpX3N0YXRlW2luZGV4XTsKQEAgLTE1Niw4ICsxNTYsOCBAQAogCQkJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwKIAkJCQkJICBBTEdPX1dJRklfUlNTSV9TVEFURSwKIAkJCQkJICAid2lmaSBSU1NJIHN0YXRlIHN0YXkgYXQgTG93XG4iKTsKLSAJCQl9Ci0gCQl9IGVsc2UgeworCQkJfQorCQl9IGVsc2UgewogCQkJaWYgKHdpZmlyc3NpIDwgcnNzaV90aHJlc2gpIHsKIAkJCQl3aWZpcnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0xPVzsKIAkJCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sCkBAIC0yMzQsMTAgKzIzNCwxMCBAQAogCXJldHVybiB3aWZpcnNzaV9zdGF0ZTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfbW9uaXRvcl9idF9lbmFibGVfZGlzYWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9tb25pdG9yX2J0X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewotCXN0YXRpYyBib29sIHByZV9idF9kaXNhYmxlZCA9IGZhbHNlOwotCXN0YXRpYyB1MzIgYnRfZGlzYWJsZV9jbnQgPSAwOworCXN0YXRpYyBib29sIHByZV9idF9kaXNhYmxlZDsKKwlzdGF0aWMgdTMyIGJ0X2Rpc2FibGVfY250OwogCWJvb2wgYnRfYWN0aXZlID0gdHJ1ZSwgYnRfZGlzYWJsZWQgPSBmYWxzZTsKIAogCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYnQgaXMgZGlzYWJsZWQgKi8KQEAgLTI4Myw3ICsyODMsNyBAQAogCX0KIH0KIAotdTMyIGhhbGJ0YzgxOTJlMmFudF9kZWNpZGVyYV9tYXNrKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHUzMiBoYWxidGM4MTkyZTJhbnRfZGVjaWRlcmFfbWFzayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgIHU4IHNzdHlwZSwgdTMyIHJhX21hc2t0eXBlKQogewogCXUzMiBkaXNyYV9tYXNrID0gMHgwOwpAQCAtMjk2LDEzICsyOTYsMTMgQEAKIAkJCWRpc3JhX21hc2sgPSAweGZmZjAwMDAwOy8qIGRpc2FibGUgMnNzICovCiAJCWJyZWFrOwogCWNhc2UgMTogLyogZGlzYWJsZSBjY2sgMS8yICovCi0JCWlmKHNzdHlwZSA9PSAyKQorCQlpZiAoc3N0eXBlID09IDIpCiAJCQlkaXNyYV9tYXNrID0gMHgwMDAwMDAwMzsvKiBlbmFibGUgMnNzICovCiAJCWVsc2UKIAkJCWRpc3JhX21hc2sgPSAweGZmZjAwMDAzOy8qIGRpc2FibGUgMnNzICovCiAJCWJyZWFrOwogCWNhc2UgMjogLyogZGlzYWJsZSBjY2sgMS8yLzUuNSwgb2ZkbSA2LzkvMTIvMTgvMjQsIG1jcyAwLzEvMi8zLzQgKi8KLQkJaWYoc3N0eXBlID09IDIpCisJCWlmIChzc3R5cGUgPT0gMikKIAkJCWRpc3JhX21hc2sgPSAweDAwMDFmMWY3Oy8qIGVuYWJsZSAyc3MgKi8KIAkJZWxzZQogCQkJZGlzcmFfbWFzayA9IDB4ZmZmMWYxZjc7LyogZGlzYWJsZSAyc3MgKi8KQEAgLTMxNCw4ICszMTQsOCBAQAogCXJldHVybiBkaXNyYV9tYXNrOwogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9VcGRhdGVyYV9tYXNrKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSAgIGJvb2wgZm9yY2VfZXhlYywgdTMyIGRpc19yYXRlbWFzaykKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9VcGRhdGVyYV9tYXNrKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIGJvb2wgZm9yY2VfZXhlYywgdTMyIGRpc19yYXRlbWFzaykKIHsKIAljb2V4X2RtLT5jdXJyYV9tYXNrID0gZGlzX3JhdGVtYXNrOwogCkBAIC0zMjUsOCArMzI1LDggQEAKIAljb2V4X2RtLT5wcmVyYV9tYXNrID0gY29leF9kbS0+Y3VycmFfbWFzazsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfYXV0b3JhdGVfZmFsbGJhY2tfcmV0cnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgICAgYm9vbCBmb3JjZV9leGVjLCB1OCB0eXBlKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2F1dG9yYXRlX2ZhbGxiYWNrX3JldHJ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKIHsKIAlib29sIHdpZmlfdW5kZXJfYm1vZGUgPSBmYWxzZTsKIApAQCAtMzY0LDMyICszNjQsMzIgQEAKIAljb2V4X2RtLT5wcmVfYXJmcnR5cGUgPSBjb2V4X2RtLT5jdXJfYXJmcnR5cGU7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X3JldHJ5bGltaXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJYm9vbCBmb3JjZV9leGVjLCB1OCB0eXBlKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3JldHJ5bGltaXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKIHsKIAljb2V4X2RtLT5jdXJfcmV0cnlsaW1pdF90eXBlID0gdHlwZTsKIAogCWlmIChmb3JjZV9leGVjIHx8IChjb2V4X2RtLT5wcmVfcmV0cnlsaW1pdF90eXBlICE9CiAJCQkgICBjb2V4X2RtLT5jdXJfcmV0cnlsaW1pdF90eXBlKSkgewogCQlzd2l0Y2ggKGNvZXhfZG0tPmN1cl9yZXRyeWxpbWl0X3R5cGUpIHsKLQkJCWNhc2UgMDoJLyogbm9ybWFsIG1vZGUgKi8KLQkJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4NDJhLAotCQkJCQkJICAgIGNvZXhfZG0tPmJhY2t1cF9yZXRyeWxpbWl0KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToJLyogcmV0cnkgbGltaXQ9OCAqLwotCQkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEsCi0JCQkJCQkJICAgMHgwODA4KTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CisJCWNhc2UgMDoJLyogbm9ybWFsIG1vZGUgKi8KKwkJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzJieXRlKGJ0Y29leGlzdCwgMHg0MmEsCisJCQkJCSAgICBjb2V4X2RtLT5iYWNrdXBfcmV0cnlsaW1pdCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgkvKiByZXRyeSBsaW1pdD04ICovCisJCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8yYnl0ZShidGNvZXhpc3QsIDB4NDJhLAorCQkJCQkJICAgMHgwODA4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAljb2V4X2RtLT5wcmVfcmV0cnlsaW1pdF90eXBlID0gY29leF9kbS0+Y3VyX3JldHJ5bGltaXRfdHlwZTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfYW1wZHVfbWF4dGltZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYW1wZHVfbWF4dGltZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCiB7CiAJY29leF9kbS0+Y3VyX2FtcGR1dGltZV90eXBlID0gdHlwZTsKIApAQCAtNDExLDkgKzQxMSwxMCBAQAogCWNvZXhfZG0tPnByZV9hbXBkdXRpbWVfdHlwZSA9IGNvZXhfZG0tPmN1cl9hbXBkdXRpbWVfdHlwZTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfbGltaXRlZF90eChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQlib29sIGZvcmNlX2V4ZWMsIHU4IHJhX21hc2t0eXBlLCB1OCBhcmZyX3R5cGUsCi0JCQkJdTggcmV0cnlsaW1pdF90eXBlLCB1OCBhbXBkdXRpbWVfdHlwZSkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9saW1pdGVkX3R4KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCSAgICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IHJhX21hc2t0eXBlLAorCQkJCSAgICAgICB1OCBhcmZyX3R5cGUsIHU4IHJldHJ5bGltaXRfdHlwZSwKKwkJCQkgICAgICAgdTggYW1wZHV0aW1lX3R5cGUpCiB7CiAJdTMyIGRpc3JhX21hc2sgPSAweDA7CiAKQEAgLTQyOSwxMCArNDMwLDEwIEBACiAJaGFsYnRjODE5MmUyYW50X2FtcGR1X21heHRpbWUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCBhbXBkdXRpbWVfdHlwZSk7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X2xpbWl0ZWRfcngoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJYm9vbCBmb3JjZV9leGVjLCBib29sIHJlal9hcF9hZ2dfcGt0LAotCQkJCWJvb2wgYl9idF9jdHJsX2FnZ19idWZfc2l6ZSwKLQkJCQl1OCBhZ2dfYnVmX3NpemUpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfbGltaXRlZF9yeChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHJlal9hcF9hZ2dfcGt0LAorCQkJCSAgICAgICBib29sIGJfYnRfY3RybF9hZ2dfYnVmX3NpemUsCisJCQkJICAgICAgIHU4IGFnZ19idWZfc2l6ZSkKIHsKIAlib29sIHJlamVjdF9yeF9hZ2cgPSByZWpfYXBfYWdnX3BrdDsKIAlib29sIGJ0X2N0cmxfcnhfYWdnX3NpemUgPSBiX2J0X2N0cmxfYWdnX2J1Zl9zaXplOwpAQCAtNDU1LDcgKzQ1Niw3IEBACiAKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfbW9uaXRvcl9idF9jdHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfbW9uaXRvcl9idF9jdHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTMyIHJlZ19ocF90eHJ4LCByZWdfbHBfdHhyeCwgdTMydG1wOwogCXUzMiByZWdfaHBfdHggPSAwLCByZWdfaHBfcnggPSAwLCByZWdfbHBfdHggPSAwLCByZWdfbHBfcnggPSAwOwpAQCAtNDg3LDkgKzQ4OCw5IEBACiAJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHhjKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfcXVlcnlidF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3F1ZXJ5YnRfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKLQl1OCBoMmNfcGFyYW1ldGVyWzFdID17MH07CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKIAogCWNvZXhfc3RhLT5jMmhfYnRfaW5mb19yZXFfc2VudCA9IHRydWU7CiAKQEAgLTUwMiwzOSArNTAzLDcgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjEsIDEsIGgyY19wYXJhbWV0ZXIpOwogfQogCi1ib29sIGhhbGJ0YzgxOTJlMmFudF9pc3dpZmlfc3RhdHVzX2NoYW5nZWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCi17Ci0Jc3RhdGljIGJvb2wgcHJlX3dpZmlfYnVzeSA9IGZhbHNlOwotCXN0YXRpYyBib29sIHByZV91bmRlcl80d2F5ID0gZmFsc2UsIHByZV9idF9oc29uID0gZmFsc2U7Ci0JYm9vbCB3aWZpX2J1c3kgPSBmYWxzZSwgdW5kZXJfNHdheSA9IGZhbHNlLCBidF9oc29uID0gZmFsc2U7Ci0JYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOwotCi0JYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0NPTk5FQ1RFRCwKLQkJCSAgICZ3aWZpX2Nvbm5lY3RlZCk7Ci0JYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJX0JVU1ksICZ3aWZpX2J1c3kpOwotCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfSFNfT1BFUkFUSU9OLCAmYnRfaHNvbik7Ci0JYnRjb2V4aXN0LT5idGNfZ2V0KGJ0Y29leGlzdCwgQlRDX0dFVF9CTF9XSUZJXzRfV0FZX1BST0dSRVNTLAotCQkJICAgJnVuZGVyXzR3YXkpOwotCi0JaWYgKHdpZmlfY29ubmVjdGVkKSB7Ci0JCWlmICh3aWZpX2J1c3kgIT0gcHJlX3dpZmlfYnVzeSkgewotCQkJcHJlX3dpZmlfYnVzeSA9IHdpZmlfYnVzeTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmICh1bmRlcl80d2F5ICE9IHByZV91bmRlcl80d2F5KSB7Ci0JCQlwcmVfdW5kZXJfNHdheSA9IHVuZGVyXzR3YXk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAoYnRfaHNvbiAhPSBwcmVfYnRfaHNvbikgewotCQkJcHJlX2J0X2hzb24gPSBidF9oc29uOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgaGFsYnRjODE5MmUyYW50X3VwZGF0ZV9idGxpbmtfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF91cGRhdGVfYnRsaW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKIAlib29sIGJ0X2hzb24gPSBmYWxzZTsKQEAgLTU5MCwxMSArNTU5LDExIEBACiAJCWJ0X2xpbmtfaW5mby0+aGlkX29ubHkgPSBmYWxzZTsKIH0KIAotdTggaGFsYnRjODE5MmUyYW50X2FjdGlvbl9hbGdvcml0aG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdTggaGFsYnRjODE5MmUyYW50X2FjdGlvbl9hbGdvcml0aG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKIAlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOwotCWJvb2wgYnRfaHNvbj1mYWxzZTsKKwlib29sIGJ0X2hzb24gPSBmYWxzZTsKIAl1OCBhbGdvcml0aG0gPSBCVF84MTkyRV8yQU5UX0NPRVhfQUxHT19VTkRFRklORUQ7CiAJdTggbnVtT2ZEaWZmUHJvZmlsZSA9IDA7CiAKQEAgLTc3NywxMCArNzQ2LDEwIEBACiAJcmV0dXJuIGFsZ29yaXRobTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0ZndfZGFjX3N3aW5nbGV2ZWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgdTggZGFjX3N3aW5nbHZsKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldGZ3X2RhY19zd2luZ2xldmVsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJIHU4IGRhY19zd2luZ2x2bCkKIHsKLQl1OCBoMmNfcGFyYW1ldGVyWzFdID17MH07CisJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKIAogCS8qIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGUgb2YgZGFjc3dpbmcKIAkgKiAweDE4LyAweDEwLyAweGMvIDB4OC8gMHg0LyAweDYgKi8KQEAgLTc5NCwxMCArNzYzLDEwIEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY0LCAxLCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X2Z3ZGVjX2J0cHdyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSAgICAgdTggZGVjX2J0cHdyX2x2bCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfZndkZWNfYnRwd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICB1OCBkZWNfYnRwd3JfbHZsKQogewotCXU4IGgyY19wYXJhbWV0ZXJbMV0gPXswfTsKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OwogCiAJaDJjX3BhcmFtZXRlclswXSA9IGRlY19idHB3cl9sdmw7CiAKQEAgLTgwOCwxMiArNzc3LDEyIEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYyLCAxLCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgdTggZGVjX2J0cHdyX2x2bCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgYm9vbCBmb3JjZV9leGVjLCB1OCBkZWNfYnRwd3JfbHZsKQogewogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKIAkJICAiW0JUQ29leF0sICVzIERlYyBCVCBwb3dlciBsZXZlbCA9ICVkXG4iLAotCQkgIChmb3JjZV9leGVjPyAiZm9yY2UgdG8iOiIiKSwgZGVjX2J0cHdyX2x2bCk7CisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iOiIiKSwgZGVjX2J0cHdyX2x2bCk7CiAJY29leF9kbS0+Y3VyX2RlY19idF9wd3IgPSBkZWNfYnRwd3JfbHZsOwogCiAJaWYgKCFmb3JjZV9leGVjKSB7CkBAIC04MjYsMTAgKzc5NSwxMCBAQAogCWNvZXhfZG0tPnByZV9kZWNfYnRfcHdyID0gY29leF9kbS0+Y3VyX2RlY19idF9wd3I7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9idF9hdXRvcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSAgICAgICBib29sIGVuYWJsZV9hdXRvcmVwb3J0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9idF9hdXRvcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgICBib29sIGVuYWJsZV9hdXRvcmVwb3J0KQogewotCXU4IGgyY19wYXJhbWV0ZXJbMV0gPXswfTsKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OwogCiAJaDJjX3BhcmFtZXRlclswXSA9IDA7CiAKQEAgLTgzOCwxOSArODA3LDIwIEBACiAKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKIAkJICAiW0JUQ29leF0sIEJUIEZXIGF1dG8gcmVwb3J0IDogJXMsIEZXIHdyaXRlIDB4Njg9MHgleFxuIiwKLQkJICAoZW5hYmxlX2F1dG9yZXBvcnQ/ICJFbmFibGVkISEiOiJEaXNhYmxlZCEhIiksCisJCSAgKGVuYWJsZV9hdXRvcmVwb3J0ID8gIkVuYWJsZWQhISI6IkRpc2FibGVkISEiKSwKIAkJICBoMmNfcGFyYW1ldGVyWzBdKTsKIAogCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2OCwgMSwgaDJjX3BhcmFtZXRlcik7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X2J0X2F1dG9yZXBvcnQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGVuYWJsZV9hdXRvcmVwb3J0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2J0X2F1dG9yZXBvcnQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgYm9vbCBmb3JjZV9leGVjLAorCQkJCQkgIGJvb2wgZW5hYmxlX2F1dG9yZXBvcnQpCiB7CiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLAogCQkgICJbQlRDb2V4XSwgJXMgQlQgQXV0byByZXBvcnQgPSAlc1xuIiwKLQkJICAoZm9yY2VfZXhlYz8gImZvcmNlIHRvIjoiIiksCi0JCSAgKChlbmFibGVfYXV0b3JlcG9ydCk/ICJFbmFibGVkIjoiRGlzYWJsZWQiKSk7CisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iOiIiKSwKKwkJICAoKGVuYWJsZV9hdXRvcmVwb3J0KSA/ICJFbmFibGVkIjoiRGlzYWJsZWQiKSk7CiAJY29leF9kbS0+Y3VyX2J0X2F1dG9fcmVwb3J0ID0gZW5hYmxlX2F1dG9yZXBvcnQ7CiAKIAlpZiAoIWZvcmNlX2V4ZWMpIHsKQEAgLTg2OCwxMiArODM4LDEyIEBACiAJY29leF9kbS0+cHJlX2J0X2F1dG9fcmVwb3J0ID0gY29leF9kbS0+Y3VyX2J0X2F1dG9fcmVwb3J0OwogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9md19kYWNfc3dpbmdsdmwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IGZ3X2RhY19zd2luZ2x2bCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9md19kYWNfc3dpbmdsdmwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIHU4IGZ3X2RhY19zd2luZ2x2bCkKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCiAJCSAgIltCVENvZXhdLCAlcyBzZXQgRlcgRGFjIFN3aW5nIGxldmVsID0gJWRcbiIsCi0JCSAgKGZvcmNlX2V4ZWM/ICJmb3JjZSB0byI6IiIpLCBmd19kYWNfc3dpbmdsdmwpOworCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIjoiIiksIGZ3X2RhY19zd2luZ2x2bCk7CiAJY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmwgPSBmd19kYWNfc3dpbmdsdmw7CiAKIAlpZiAoIWZvcmNlX2V4ZWMpIHsKQEAgLTg5Myw4ICs4NjMsOCBAQAogCWNvZXhfZG0tPnByZV9md19kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmw7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9zd19yZl9yeF9scGZfY29ybmVyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkgICAgIGJvb2wgcnhfcmZfc2hyaW5rX29uKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9zd19yZl9yeF9scGZfY29ybmVyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJICAgIGJvb2wgcnhfcmZfc2hyaW5rX29uKQogewogCWlmIChyeF9yZl9zaHJpbmtfb24pIHsKIAkJLyogU2hyaW5rIFJGIFJ4IExQRiBjb3JuZXIgKi8KQEAgLTkxNSwxMiArODg1LDEyIEBACiAJfQogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9yZl9zaHJpbmsoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHJ4X3JmX3Nocmlua19vbikKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9yZl9zaHJpbmsoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHJ4X3JmX3Nocmlua19vbikKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCiAJCSAgIltCVENvZXhdLCAlcyB0dXJuIFJ4IFJGIFNocmluayA9ICVzXG4iLAotCQkgIChmb3JjZV9leGVjPyAiZm9yY2UgdG8iOiIiKSwgKChyeF9yZl9zaHJpbmtfb24pPyAiT04iOiJPRkYiKSk7CisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iOiIiKSwgKChyeF9yZl9zaHJpbmtfb24pID8gIk9OIjoiT0ZGIikpOwogCWNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rID0gcnhfcmZfc2hyaW5rX29uOwogCiAJaWYgKCFmb3JjZV9leGVjKSB7CkBAIC05MzksNTYgKzkwOSw4IEBACiAJY29leF9kbS0+cHJlX3JmX3J4X2xwZl9zaHJpbmsgPSBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3NocmluazsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X3N3X3BlbmFsdHlfdHhfcmF0ZWFkYXB0aXZlKAotCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCQlib29sIGxvd19wZW5hbHR5X3JhKQotewotCXU4IGgyY19wYXJhbWV0ZXJbNl0gPXswfTsKLQotCWgyY19wYXJhbWV0ZXJbMF0gPSAweDY7CS8qIG9wQ29kZSwgMHg2PSBSZXRyeV9QZW5hbHR5ICovCi0KLQlpZiAobG93X3BlbmFsdHlfcmEpIHsKLQkJaDJjX3BhcmFtZXRlclsxXSB8PSBCSVQwOwotCQkvKiBub3JtYWwgcmF0ZSBleGNlcHQgTUNTNy82LzUsIE9GRE01NC80OC8zNiAqLwotCQloMmNfcGFyYW1ldGVyWzJdID0gMHgwMDsKLQkJaDJjX3BhcmFtZXRlclszXSA9IDB4Zjc7ICAvKiBNQ1M3IG9yIE9GRE01NCAqLwotCQloMmNfcGFyYW1ldGVyWzRdID0gMHhmODsgIC8qIE1DUzYgb3IgT0ZETTQ4ICovCi0JCWgyY19wYXJhbWV0ZXJbNV0gPSAweGY5OyAgLyogTUNTNSBvciBPRkRNMzYgKi8KLQl9Ci0KLQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfRVhFQywKLQkJICAiW0JUQ29leF0sIHNldCBXaUZpIExvdy1QZW5hbHR5IFJldHJ5OiAlcyIsCi0JCSAgKGxvd19wZW5hbHR5X3JhPyAiT04hISI6Ik9GRiEhIikpOwotCi0JYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY5LCA2LCBoMmNfcGFyYW1ldGVyKTsKLX0KLQotdm9pZCBoYWxidGM4MTkyZTJhbnRfbG93X3BlbmFsdHlfcmEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBsb3dfcGVuYWx0eV9yYSkKLXsKLQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCi0JCSAgIltCVENvZXhdLCAlcyB0dXJuIExvd1BlbmFsdHlSQSA9ICVzXG4iLAotCQkgIChmb3JjZV9leGVjPyAiZm9yY2UgdG8iOiIiKSwgKChsb3dfcGVuYWx0eV9yYSk/ICJPTiI6Ik9GRiIpKTsKLQljb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEgPSBsb3dfcGVuYWx0eV9yYTsKLQotCWlmICghZm9yY2VfZXhlYykgewotCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAotCQkJICAiW0JUQ29leF0gYlByZUxvd1BlbmFsdHlSYT0lZCwgYkN1ckxvd1BlbmFsdHlSYT0lZFxuIiwKLQkJCSAgY29leF9kbS0+cHJlX2xvd19wZW5hbHR5X3JhLAotCQkJICBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEpOwotCi0JCWlmIChjb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEgPT0KLQkJICAgIGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSkKLQkJCXJldHVybjsKLQl9Ci0JaGFsYnRjODE5MmUyYW50X3NldF9zd19wZW5hbHR5X3R4X3JhdGVhZGFwdGl2ZShidGNvZXhpc3QsCi0JCQkJCQljb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmEpOwotCi0JY29leF9kbS0+cHJlX2xvd19wZW5hbHR5X3JhID0gY29leF9kbS0+Y3VyX2xvd19wZW5hbHR5X3JhOwotfQotCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfZGFjX3N3aW5ncmVnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSAgICAgIHUzMiBsZXZlbCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfZGFjX3N3aW5ncmVnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICAgIHUzMiBsZXZlbCkKIHsKIAl1OCB2YWwgPSAodTgpbGV2ZWw7CiAKQEAgLTk5Nyw5ICs5MTksOSBAQAogCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDg4MywgMHgzZSwgdmFsKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0c3dfZnVsbHRpbWVfZGFjc3dpbmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgICAgYm9vbCBzd19kYWNfc3dpbmdvbiwKLQkJCQkJICAgICB1MzIgc3dfZGFjX3N3aW5nbHZsKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldHN3X2Z1bGx0aW1lX2RhY3N3aW5nKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJICAgIGJvb2wgc3dfZGFjX3N3aW5nb24sCisJCQkJCQkgICAgdTMyIHN3X2RhY19zd2luZ2x2bCkKIHsKIAlpZiAoc3dfZGFjX3N3aW5nb24pCiAJCWhhbGJ0YzgxOTJlMmFudF9zZXRfZGFjX3N3aW5ncmVnKGJ0Y29leGlzdCwgc3dfZGFjX3N3aW5nbHZsKTsKQEAgLTEwMDcsMTUgKzkyOSwxNCBAQAogCQloYWxidGM4MTkyZTJhbnRfc2V0X2RhY19zd2luZ3JlZyhidGNvZXhpc3QsIDB4MTgpOwogfQogCi0KLXZvaWQgaGFsYnRjODE5MmUyYW50X0RhY1N3aW5nKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGRhY19zd2luZ29uLAotCQkJICAgICAgdTMyIGRhY19zd2luZ2x2bCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9EYWNTd2luZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBkYWNfc3dpbmdvbiwKKwkJCQkgICAgIHUzMiBkYWNfc3dpbmdsdmwpCiB7CiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAogCQkgICJbQlRDb2V4XSwgJXMgdHVybiBEYWNTd2luZz0lcywgZGFjX3N3aW5nbHZsPTB4JXhcbiIsCi0JCSAgKGZvcmNlX2V4ZWM/ICJmb3JjZSB0byI6IiIpLAotCQkgICgoZGFjX3N3aW5nb24pPyAiT04iOiJPRkYiKSwgZGFjX3N3aW5nbHZsKTsKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byI6IiIpLAorCQkgICgoZGFjX3N3aW5nb24pID8gIk9OIjoiT0ZGIiksIGRhY19zd2luZ2x2bCk7CiAJY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbiA9IGRhY19zd2luZ29uOwogCWNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsID0gZGFjX3N3aW5nbHZsOwogCkBAIC0xMDQxLDQ2ICs5NjIsOCBAQAogCWNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmw7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9hZGNfYmFja29mZihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICAgIGJvb2wgYWRjX2JhY2tvZmYpCi17Ci0JaWYoYWRjX2JhY2tvZmYpCi0JewotCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKLQkJCSAgIltCVENvZXhdLCBCQiBCYWNrT2ZmIExldmVsIE9uIVxuIik7Ci0JCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweGMwNSwgMHgzMCwgMHgzKTsKLQl9Ci0JZWxzZQotCXsKLQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCi0JCQkgICJbQlRDb2V4XSwgQkIgQmFja09mZiBMZXZlbCBPZmYhXG4iKTsKLQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4YzA1LCAweDMwLCAweDEpOwotCX0KLX0KLQotdm9pZCBoYWxidGM4MTkyZTJhbnRfYWRjX2JhY2tvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBhZGNfYmFja29mZikKLXsKLQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCi0JCSAgIltCVENvZXhdLCAlcyB0dXJuIEFkY0JhY2tPZmYgPSAlc1xuIiwKLQkJICAoZm9yY2VfZXhlYz8gImZvcmNlIHRvIjoiIiksICgoYWRjX2JhY2tvZmYpPyAiT04iOiJPRkYiKSk7Ci0JY29leF9kbS0+Y3VyX2FkY19iYWNrX29mZiA9IGFkY19iYWNrb2ZmOwotCi0JaWYgKCFmb3JjZV9leGVjKSB7Ci0JCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCi0JCQkgICJbQlRDb2V4XSwgYlByZUFkY0JhY2tPZmY9JWQsIGJDdXJBZGNCYWNrT2ZmPSVkXG4iLAotCQkJICBjb2V4X2RtLT5wcmVfYWRjX2JhY2tfb2ZmLCBjb2V4X2RtLT5jdXJfYWRjX2JhY2tfb2ZmKTsKLQotCQlpZiAoY29leF9kbS0+cHJlX2FkY19iYWNrX29mZiA9PSBjb2V4X2RtLT5jdXJfYWRjX2JhY2tfb2ZmKQotCQkJcmV0dXJuOwotCX0KLQloYWxidGM4MTkyZTJhbnRfc2V0X2FkY19iYWNrb2ZmKGJ0Y29leGlzdCwgY29leF9kbS0+Y3VyX2FkY19iYWNrX29mZik7Ci0KLQljb2V4X2RtLT5wcmVfYWRjX2JhY2tfb2ZmID0gY29leF9kbS0+Y3VyX2FkY19iYWNrX29mZjsKLX0KLQotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X2FnY190YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICBib29sIGFnY190YWJsZV9lbikKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfYWdjX3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgIGJvb2wgYWdjX3RhYmxlX2VuKQogewogCiAJLyogQkIgQUdDIEdhaW4gVGFibGUgKi8KQEAgLTEwOTYsNyArOTc5LDcgQEAKIAl9IGVsc2UgewogCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKIAkJCSAgIltCVENvZXhdLCBCQiBBZ2MgVGFibGUgT2ZmIVxuIik7Ci0JIAlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweGFhMUEwMDAxKTsKKwkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHhhYTFBMDAwMSk7CiAJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzRieXRlKGJ0Y29leGlzdCwgMHhjNzgsIDB4YTkxQjAwMDEpOwogCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4Yzc4LCAweGE4MUMwMDAxKTsKIAkJYnRjb2V4aXN0LT5idGNfd3JpdGVfNGJ5dGUoYnRjb2V4aXN0LCAweGM3OCwgMHhhNzFEMDAwMSk7CkBAIC0xMTA1LDEzICs5ODgsMTMgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X0FnY1RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGFnY190YWJsZV9lbikKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9BZ2NUYWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBhZ2NfdGFibGVfZW4pCiB7CiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAogCQkgICJbQlRDb2V4XSwgJXMgJXMgQWdjIFRhYmxlXG4iLAotCQkgIChmb3JjZV9leGVjPyAiZm9yY2UgdG8iOiIiKSwKLQkJICAoKGFnY190YWJsZV9lbik/ICJFbmFibGUiOiJEaXNhYmxlIikpOworCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIjoiIiksCisJCSAgKChhZ2NfdGFibGVfZW4pID8gIkVuYWJsZSI6IkRpc2FibGUiKSk7CiAJY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbiA9IGFnY190YWJsZV9lbjsKIAogCWlmICghZm9yY2VfZXhlYykgewpAQCAtMTEyNyw5ICsxMDEwLDkgQEAKIAljb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuID0gY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbjsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X2NvZXhfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgIHUzMiB2YWwweDZjMCwgdTMyIHZhbDB4NmM0LAotCQkJCSAgICB1MzIgdmFsMHg2YzgsIHU4IHZhbDB4NmNjKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3NldF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkgICB1MzIgdmFsMHg2YzAsIHUzMiB2YWwweDZjNCwKKwkJCQkJICAgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKIAkJICAiW0JUQ29leF0sIHNldCBjb2V4IHRhYmxlLCBzZXQgMHg2YzA9MHgleFxuIiwgdmFsMHg2YzApOwpAQCAtMTE0OCwxMyArMTAzMSwxNCBAQAogCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg2Y2MsIHZhbDB4NmNjKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgYm9vbCBmb3JjZV9leGVjLAotCQkJCXUzMiB2YWwweDZjMCwgdTMyIHZhbDB4NmM0LAotCQkJCXUzMiB2YWwweDZjOCwgdTggdmFsMHg2Y2MpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLAorCQkJCSAgICAgICB1MzIgdmFsMHg2YzAsIHUzMiB2YWwweDZjNCwKKwkJCQkgICAgICAgdTMyIHZhbDB4NmM4LCB1OCB2YWwweDZjYykKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCiAJCSAgIltCVENvZXhdLCAlcyB3cml0ZSBDb2V4IFRhYmxlIDB4NmMwPTB4JXgsICIsCi0JCSAgKGZvcmNlX2V4ZWM/ICJmb3JjZSB0byI6IiIpLCB2YWwweDZjMCk7CisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iOiIiKSwgdmFsMHg2YzApOwogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TVywKIAkJICAiMHg2YzQ9MHgleCwgMHg2Yzg9MHgleCwgMHg2Y2M9MHgleFxuIiwKIAkJICB2YWwweDZjNCwgdmFsMHg2YzgsIHZhbDB4NmNjKTsKQEAgLTExNzEsNyArMTA1NSw3IEBACiAJCQkgICJwcmVWYWwweDZjOD0weCV4LCBwcmVWYWwweDZjYz0weCV4ICEhXG4iLAogCQkJICBjb2V4X2RtLT5wcmVfdmFsMHg2YzgsIGNvZXhfZG0tPnByZV92YWwweDZjYyk7CiAJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCi0JCQkgICJbQlRDb2V4XSwgY3VyVmFsMHg2YzA9MHgleCwgY3VyVmFsMHg2YzQ9MHgleCwgXG4iLAorCQkJICAiW0JUQ29leF0sIGN1clZhbDB4NmMwPTB4JXgsIGN1clZhbDB4NmM0PTB4JXgsXG4iLAogCQkJICBjb2V4X2RtLT5jdXJfdmFsMHg2YzAsIGNvZXhfZG0tPmN1cl92YWwweDZjNCk7CiAJCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCiAJCQkgICJjdXJWYWwweDZjOD0weCV4LCBjdXJWYWwweDZjYz0weCV4ICEhXG4iLApAQCAtMTE5Miw4ICsxMDc2LDggQEAKIAljb2V4X2RtLT5wcmVfdmFsMHg2Y2MgPSBjb2V4X2RtLT5jdXJfdmFsMHg2Y2M7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkgIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCSBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSAwOgpAQCAtMTIyMSwxMCArMTEwNSwxMCBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X2Z3X2lnbm9yZV93bGFuYWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkgICBib29sIGVuYWJsZSkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfZndfaWdub3JlX3dsYW5hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQkgIGJvb2wgZW5hYmxlKQogewotCXU4IGgyY19wYXJhbWV0ZXJbMV0gPXswfTsKKwl1OCBoMmNfcGFyYW1ldGVyWzFdID0gezB9OwogCiAJaWYgKGVuYWJsZSkKIAkJaDJjX3BhcmFtZXRlclswXSB8PSBCSVQwOyAvKiBmdW5jdGlvbiBlbmFibGUgKi8KQEAgLTEyMzYsMTIgKzExMjAsMTIgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjMsIDEsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9JZ25vcmVXbGFuQWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBlbmFibGUpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfSWdub3JlV2xhbkFjdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlKQogewogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKIAkJICAiW0JUQ29leF0sICVzIHR1cm4gSWdub3JlIFdsYW5BY3QgJXNcbiIsCi0JCSAgKGZvcmNlX2V4ZWM/ICJmb3JjZSB0byI6IiIpLCAoZW5hYmxlPyAiT04iOiJPRkYiKSk7CisJCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iOiIiKSwgKGVuYWJsZSA/ICJPTiI6Ik9GRiIpKTsKIAljb2V4X2RtLT5jdXJfaWdub3JlX3dsYW5fYWN0ID0gZW5hYmxlOwogCiAJaWYgKCFmb3JjZV9leGVjKSB7CkBAIC0xMjYxLDEwICsxMTQ1LDEwIEBACiAJY29leF9kbS0+cHJlX2lnbm9yZV93bGFuX2FjdCA9IGNvZXhfZG0tPmN1cl9pZ25vcmVfd2xhbl9hY3Q7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X1NldEZ3UHN0ZG1hKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1OCBieXRlMSwKLQkJCQkgdTggYnl0ZTIsIHU4IGJ5dGUzLCB1OCBieXRlNCwgdTggYnl0ZTUpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfU2V0RndQc3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IGJ5dGUxLAorCQkJCQl1OCBieXRlMiwgdTggYnl0ZTMsIHU4IGJ5dGU0LCB1OCBieXRlNSkKIHsKLQl1OCBoMmNfcGFyYW1ldGVyWzVdID17MH07CisJdTggaDJjX3BhcmFtZXRlcls1XSA9IHswfTsKIAogCWgyY19wYXJhbWV0ZXJbMF0gPSBieXRlMTsKIAloMmNfcGFyYW1ldGVyWzFdID0gYnl0ZTI7CkBAIC0xMjg3LDI5ICsxMTcxLDMzIEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYwLCA1LCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICBib29sIHNocmlua19yeF9scGYsIGJvb2wgbG93X3BlbmFsdHlfcmEsCi0JCQkJICAgYm9vbCBsaW1pdGVkX2RpZywgYm9vbCBidGxhbl9jb25zdHJhaW4pCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIHNocmlua19yeF9scGYsCisJCQkJCSAgYm9vbCBsb3dfcGVuYWx0eV9yYSwKKwkJCQkJICBib29sIGxpbWl0ZWRfZGlnLAorCQkJCQkgIGJvb2wgYnRsYW5fY29uc3RyYWluKQogewogCWhhbGJ0YzgxOTJlMmFudF9yZl9zaHJpbmsoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgc2hyaW5rX3J4X2xwZik7CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X3N3X21lY2hhbmlzbTIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgYm9vbCBhZ2NfdGFibGVfc2hpZnQsIGJvb2wgYWRjX2JhY2tvZmYsCi0JCQkJICAgYm9vbCBzd19kYWNfc3dpbmcsIHUzMiBkYWNfc3dpbmdsdmwpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICBib29sIGFnY190YWJsZV9zaGlmdCwKKwkJCQkJICBib29sIGFkY19iYWNrb2ZmLAorCQkJCQkgIGJvb2wgc3dfZGFjX3N3aW5nLAorCQkJCQkgIHUzMiBkYWNfc3dpbmdsdmwpCiB7CiAJaGFsYnRjODE5MmUyYW50X0FnY1RhYmxlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGFnY190YWJsZV9zaGlmdCk7CiAJaGFsYnRjODE5MmUyYW50X0RhY1N3aW5nKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHN3X2RhY19zd2luZywKIAkJCQkgZGFjX3N3aW5nbHZsKTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfcHNfdGRtYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCSAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHR1cm5fb24sIHU4IHR5cGUpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfcHNfdGRtYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHR1cm5fb24sIHU4IHR5cGUpCiB7CiAKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCiAJCSAgIltCVENvZXhdLCAlcyB0dXJuICVzIFBTIFRETUEsIHR5cGU9JWRcbiIsCi0JCSAgKGZvcmNlX2V4ZWM/ICJmb3JjZSB0byI6IiIpLCAodHVybl9vbj8gIk9OIjoiT0ZGIiksIHR5cGUpOworCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIjoiIiksICh0dXJuX29uID8gIk9OIjoiT0ZGIiksIHR5cGUpOwogCWNvZXhfZG0tPmN1cl9wc190ZG1hX29uID0gdHVybl9vbjsKIAljb2V4X2RtLT5jdXJfcHNfdGRtYSA9IHR5cGU7CiAKQEAgLTE0NDAsNyArMTMyOCw4IEBACiAJY29leF9kbS0+cHJlX3BzX3RkbWEgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfc2V0X3N3aXRjaF9zc3R5cGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIHU4IHNzdHlwZSkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9zZXRfc3dpdGNoX3NzdHlwZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJICAgICAgdTggc3N0eXBlKQogewogCXU4IG1pbW9wcyA9IEJUQ19NSU1PX1BTX0RZTkFNSUM7CiAJdTMyIGRpc3JhX21hc2sgPSAweDA7CkBAIC0xNDYxLDcgKzEzNTAsNyBAQAogCQkvKiBzd2l0Y2ggY2NrIHBhdGNoICovCiAJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweGU3NywgMHg0LCAweDEpOwogCQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4YTA3LCAweDgxKTsKLQkJbWltb3BzPUJUQ19NSU1PX1BTX1NUQVRJQzsKKwkJbWltb3BzID0gQlRDX01JTU9fUFNfU1RBVElDOwogCX0gZWxzZSBpZiAoc3N0eXBlID09IDIpIHsKIAkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCBmYWxzZSwgMCk7CiAJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHhjMDQsIDB4MzMpOwpAQCAtMTQ2OSwxOCArMTM1OCwxOCBAQAogCQlidGNvZXhpc3QtPmJ0Y193cml0ZV80Ynl0ZShidGNvZXhpc3QsIDB4OTBjLCAweDgxMTIxMzEzKTsKIAkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4ZTc3LCAweDQsIDB4MCk7CiAJCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHhhMDcsIDB4NDEpOwotCQltaW1vcHM9QlRDX01JTU9fUFNfRFlOQU1JQzsKKwkJbWltb3BzID0gQlRDX01JTU9fUFNfRFlOQU1JQzsKIAl9CiAJLyogc2V0IHJ4IDFzcyBvciAyc3MgKi8KIAlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX0FDVF9TRU5EX01JTU9fUFMsICZtaW1vcHMpOwogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9zd2l0Y2hfc3N0eXBlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3N3aXRjaF9zc3R5cGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgYm9vbCBmb3JjZV9leGVjLCB1OCBuZXdfc3N0eXBlKQogewogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRSwKIAkJICAiW0JUQ29leF0sICVzIFN3aXRjaCBTUyBUeXBlID0gJWRcbiIsCi0JCSAgKGZvcmNlX2V4ZWM/ICJmb3JjZSB0byI6IiIpLCBuZXdfc3N0eXBlKTsKKwkJICAoZm9yY2VfZXhlYyA/ICJmb3JjZSB0byI6IiIpLCBuZXdfc3N0eXBlKTsKIAljb2V4X2RtLT5jdXJfc3N0eXBlID0gbmV3X3NzdHlwZTsKIAogCWlmICghZm9yY2VfZXhlYykgewpAQCAtMTQ5Miw3ICsxMzgxLDcgQEAKIAljb2V4X2RtLT5wcmVfc3N0eXBlID0gY29leF9kbS0+Y3VyX3NzdHlwZTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfY29leF9hbGxvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfY29leF9hbGxvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJLyogZncgYWxsIG9mZiAqLwogCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCAxKTsKQEAgLTE1MDcsNyArMTM5Niw3IEBACiAJaGFsYnRjODE5MmUyYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOwogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfaW5pdF9jb2V4X2RtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCS8qIGZvcmNlIHRvIHJlc2V0IGNvZXggbWVjaGFuaXNtICovCiAKQEAgLTE1MjIsNyArMTQxMSw3IEBACiAJaGFsYnRjODE5MmUyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX2J0X2lucXVpcnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX2J0X2lucXVpcnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJYm9vbCBsb3dfcHdyX2Rpc2FibGUgPSB0cnVlOwogCkBAIC0xNTQwLDcgKzE0MjksNyBAQAogCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMHgxOCk7CiB9CiAKLWJvb2wgaGFsYnRjODE5MmUyYW50X2lzX2NvbW1vbl9hY3Rpb24oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgYm9vbCBoYWxidGM4MTkyZTJhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOwogCWJvb2wgY29tbW9uID0gZmFsc2UsIHdpZmlfY29ubmVjdGVkID0gZmFsc2UsIHdpZmlfYnVzeSA9IGZhbHNlOwpAQCAtMTU4Niw3ICsxNDc1LDcgQEAKIAkJaGFsYnRjODE5MmUyYW50X2Z3X2RhY19zd2luZ2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKIAkJaGFsYnRjODE5MmUyYW50X2RlY19idHB3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKIAotIAkJaGFsYnRjODE5MmUyYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQloYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCiAJCQkJCSAgICAgIGZhbHNlKTsKIAkJaGFsYnRjODE5MmUyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJCQkgICAgICAweDE4KTsKQEAgLTE2ODUsOSArMTU3NCw5IEBACiAJcmV0dXJuIGNvbW1vbjsKIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgYm9vbCBzY29faGlkLCBib29sIHR4X3BhdXNlLAotCQkJCQkgIHU4IG1heF9pbnRlcnZhbCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCSBib29sIHNjb19oaWQsIGJvb2wgdHhfcGF1c2UsCisJCQkJCQkgdTggbWF4X2ludGVydmFsKQogewogCXN0YXRpYyBpbnQgdXAsIGRuLCBtLCBuLCB3YWl0X2NudDsKIAkvKiAwOiBubyBjaGFuZ2UsICsxOiBpbmNyZWFzZSBXaUZpIGR1cmF0aW9uLApAQCAtMTc5OSw3ICsxNjg4LDcgQEAKIAkJdXAgPSAwOwogCQlkbiA9IDA7CiAJCW0gPSAxOwotCQluPSAzOworCQluID0gMzsKIAkJcmVzdWx0ID0gMDsKIAkJd2FpdF9jbnQgPSAwOwogCX0gZWxzZSB7CkBAIC0yMTE2LDcgKzIwMDUsNyBAQAogCQkJCQkJCQkJICAgICAxMjsKIAkJCQkJfQogCQkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsKLSAJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CisJCQkJCWlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSA0KSB7CiAJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKIAkJCQkJCQkJICAgIGJ0Y29leGlzdCwKIAkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLApAQCAtMjQxNiwyMSArMjMwNSwyMSBAQAogCQkJCQkJCQkgICAgdHJ1ZSwgMik7CiAJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KIAkJCQkJCQkJCSAgICAgMjsKLQkJCQkJfSBlbHNlIGlmKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDEyKSB7CisJCQkJCX0gZWxzZSBpZiAoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTIpIHsKIAkJCQkJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKAogCQkJCQkJCQkgICAgYnRjb2V4aXN0LAogCQkJCQkJCQkgICAgTk9STUFMX0VYRUMsCiAJCQkJCQkJCSAgICB0cnVlLCAxMSk7CiAJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlID0KIAkJCQkJCQkJCSAgICAgMTE7Ci0JCQkJCX0gZWxzZSBpZihjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMSkgeworCQkJCQl9IGVsc2UgaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hID09IDExKSB7CiAJCQkJCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYSgKIAkJCQkJCQkJICAgIGJ0Y29leGlzdCwKIAkJCQkJCQkJICAgIE5PUk1BTF9FWEVDLAogCQkJCQkJCQkgICAgdHJ1ZSwgMTApOwogCQkJCQkJY29leF9kbS0+cHNfdGRtYV9kdV9hZGpfdHlwZSA9CiAJCQkJCQkJCQkgICAgIDEwOwotCQkJCQl9IGVsc2UgaWYoY29leF9kbS0+Y3VyX3BzX3RkbWEgPT0gMTApIHsKKwkJCQkJfSBlbHNlIGlmIChjb2V4X2RtLT5jdXJfcHNfdGRtYSA9PSAxMCkgewogCQkJCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoCiAJCQkJCQkJCSAgICBidGNvZXhpc3QsCiAJCQkJCQkJCSAgICBOT1JNQUxfRVhFQywKQEAgLTI3MjEsNyArMjYxMCw3IEBACiAJaWYgKGNvZXhfZG0tPmN1cl9wc190ZG1hICE9IGNvZXhfZG0tPnBzX3RkbWFfZHVfYWRqX3R5cGUpIHsKIAkJYm9vbCBzY2FuID0gZmFsc2UsIGxpbmsgPSBmYWxzZSwgcm9hbSA9IGZhbHNlOwogCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAotCQkJICAiW0JUQ29leF0sIFBzVGRtYSB0eXBlIGRpc21hdGNoISEhLCAiICk7CisJCQkgICJbQlRDb2V4XSwgUHNUZG1hIHR5cGUgZGlzbWF0Y2ghISEsICIpOwogCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRldfREVUQUlMLAogCQkJICAiY3VyUHNUZG1hPSVkLCByZWNvcmRQc1RkbWE9JWRcbiIsCiAJCQkgIGNvZXhfZG0tPmN1cl9wc190ZG1hLCBjb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlKTsKQEAgLTI3MzAsNyArMjYxOSw3IEBACiAJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9MSU5LLCAmbGluayk7CiAJCWJ0Y29leGlzdC0+YnRjX2dldChidGNvZXhpc3QsIEJUQ19HRVRfQkxfV0lGSV9ST0FNLCAmcm9hbSk7CiAKLQkJaWYgKCAhc2NhbiAmJiAhbGluayAmJiAhcm9hbSkKKwkJaWYgKCFzY2FuICYmICFsaW5rICYmICFyb2FtKQogCQkJaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywKIAkJCQkJCXRydWUsCiAJCQkJCQljb2V4X2RtLT5wc190ZG1hX2R1X2Fkal90eXBlKTsKQEAgLTI3NDIsNyArMjYzMSw3IEBACiB9CiAKIC8qIFNDTyBvbmx5IG9yIFNDTytQQU4oSFMpICovCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fc2NvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9zY28oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX1NUQVlfTE9XOwogCXUzMiB3aWZpX2J3OwpAQCAtMjgwNCw3ICsyNjkzLDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9zY29fcGFuKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9zY29fcGFuKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlyc3NpX3N0YXRlLCBidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9TVEFZX0xPVzsKIAl1MzIgd2lmaV9idzsKQEAgLTI4NjYsOSArMjc1NSw5IEBACiAJfQogfQogCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25faGlkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7Ci0JdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZT1CVENfUlNTSV9TVEFURV9ISUdIOworCXU4IHdpZmlyc3NpX3N0YXRlLCBidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOwogCXUzMiB3aWZpX2J3OwogCiAJd2lmaXJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfd2lmaXJzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CkBAIC0yOTA2LDcgKzI3OTUsNyBAQAogCQkJaGFsYnRjODE5MmUyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwKIAkJCQkJCSAgICAgIGZhbHNlLCAweDE4KTsKIAkJfSBlbHNlIHsKLSAJCQloYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCisJCQloYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIHRydWUsCiAJCQkJCQkgICAgICBmYWxzZSwgZmFsc2UpOwogCQkJaGFsYnRjODE5MmUyYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsCiAJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CkBAIC0yOTE4LDggKzI4MDcsOCBAQAogCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCiAJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7Ci0gCQl9IGVsc2UgewotIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgZmFsc2UsIHRydWUsCisJCX0gZWxzZSB7CisJCQloYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIGZhbHNlLCB0cnVlLAogCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgZmFsc2UsIGZhbHNlLAogCQkJCQkJICAgICAgZmFsc2UsIDB4MTgpOwpAQCAtMjkyOCw3ICsyODE3LDcgQEAKIH0KIAogLyogQTJEUCBvbmx5IC8gUEFOKEVEUikgb25seS8gQTJEUCtQQU4oSFMpICovCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpcnNzaV9zdGF0ZSwgYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKIAl1MzIgd2lmaV9idzsKQEAgLTI5OTEsNyArMjg4MCw3IEBACiAJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgewogCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CiAJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgewotIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQloYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAogCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCiAJCQkJCQkgICAgICBmYWxzZSwgMHgxOCk7CkBAIC0zMDE3LDcgKzI5MDYsNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX2EyZHBfcGFuX2hzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9hMmRwX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpcnNzaV9zdGF0ZSwgYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKIAl1MzIgd2lmaV9idzsKQEAgLTMwNTIsNyArMjk0MSw3IEBACiAJaWYgKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgewogCQlpZiAoKHdpZmlyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CiAJCSAgICAod2lmaXJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgewotIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20xKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCisJCQloYWxidGM4MTkyZTJhbnRfc3dfbWVjaGFuaXNtMShidGNvZXhpc3QsIHRydWUsIGZhbHNlLAogCQkJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKIAkJCWhhbGJ0YzgxOTJlMmFudF9zd19tZWNoYW5pc20yKGJ0Y29leGlzdCwgdHJ1ZSwgZmFsc2UsCiAJCQkJCQkgICAgICB0cnVlLCAweDYpOwpAQCAtMzA3OCw3ICsyOTY3LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlyc3NpX3N0YXRlLCBidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOwogCXUzMiB3aWZpX2J3OwpAQCAtMzEzOSw3ICszMDI4LDcgQEAKIH0KIAogLyogUEFOKEhTKSBvbmx5ICovCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fcGFuX2hzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CiAJdTMyIHdpZmlfYnc7CkBAIC0zMTk3LDkgKzMwODYsOSBAQAogfQogCiAvKiBQQU4oRURSKStBMkRQICovCi12b2lkIGhhbGJ0YzgxOTJlMmFudF9hY3Rpb25fcGFuX2Vkcl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5fZWRyX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7Ci0JdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZT1CVENfUlNTSV9TVEFURV9ISUdIOworCXU4IHdpZmlyc3NpX3N0YXRlLCBidHJzc2lfc3RhdGUgPSBCVENfUlNTSV9TVEFURV9ISUdIOwogCXUzMiB3aWZpX2J3OwogCiAJd2lmaXJzc2lfc3RhdGUgPSBoYWxidGM4MTkyZTJhbnRfd2lmaXJzc2lfc3RhdGUoYnRjb2V4aXN0LCAwLCAyLCAxNSwgMCk7CkBAIC0zMjYwLDcgKzMxNDksNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX3Bhbl9lZHJfaGlkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9wYW5fZWRyX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpcnNzaV9zdGF0ZSwgYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKIAl1MzIgd2lmaV9idzsKQEAgLTMyODAsMTUgKzMxNjksMTUgQEAKIAlpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9MT1cpIHx8CiAJICAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9MT1cpKSB7CiAJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7Ci0JICAgICAgICBoYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxNCk7CisJCWhhbGJ0YzgxOTJlMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDE0KTsKIAl9IGVsc2UgaWYgKChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfTUVESVVNKSB8fAogCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgewogCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOwotCSAgICAgICAgaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CiAJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CiAJCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9ISUdIKSkgewogCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDQpOwotCSAgICAgICAgaGFsYnRjODE5MmUyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMTApOworCQloYWxidGM4MTkyZTJhbnRfcHNfdGRtYShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCB0cnVlLCAxMCk7CiAJfQogCiAJLyogc3cgbWVjaGFuaXNtICovCkBAIC0zMzIyLDcgKzMyMTEsNyBAQAogfQogCiAvKiBISUQrQTJEUCtQQU4oRURSKSAqLwotdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX2hpZF9hMmRwX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaXJzc2lfc3RhdGUsIGJ0cnNzaV9zdGF0ZSA9IEJUQ19SU1NJX1NUQVRFX0hJR0g7CiAJdTMyIHdpZmlfYnc7CkBAIC0zMzgzLDcgKzMyNzIsNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfYWN0aW9uX2hpZF9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2FjdGlvbl9oaWRfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpcnNzaV9zdGF0ZSwgYnRyc3NpX3N0YXRlID0gQlRDX1JTU0lfU1RBVEVfSElHSDsKIAl1MzIgd2lmaV9idzsKQEAgLTM0MDMsNyArMzI5Miw3IEBACiAJCWhhbGJ0YzgxOTJlMmFudF9kZWNfYnRwd3IoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CiAJCWhhbGJ0YzgxOTJlMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChidGNvZXhpc3QsIHRydWUsIHRydWUsIDIpOwogCX0gZWxzZSBpZiAoKGJ0cnNzaV9zdGF0ZSA9PSBCVENfUlNTSV9TVEFURV9NRURJVU0pIHx8Ci0JCSAgIChidHJzc2lfc3RhdGUgPT0gQlRDX1JTU0lfU1RBVEVfU1RBWV9NRURJVU0pKSAJeworCQkgICAoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX1NUQVlfTUVESVVNKSkgewogCQloYWxidGM4MTkyZTJhbnRfZGVjX2J0cHdyKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDIpOwogCQloYWxidGM4MTkyZTJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3QoYnRjb2V4aXN0LCB0cnVlLCBmYWxzZSwgMik7CiAJfSBlbHNlIGlmICgoYnRyc3NpX3N0YXRlID09IEJUQ19SU1NJX1NUQVRFX0hJR0gpIHx8CkBAIC0zNDQyLDcgKzMzMzEsNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4MTkyZTJhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCBhbGdvcml0aG0gPSAwOwogCkBAIC0zNDcyLDcgKzMzNjEsNyBAQAogCiAJY29leF9kbS0+Y3VyX2FsZ29yaXRobSA9IGFsZ29yaXRobTsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0UsCi0JCSAgIltCVENvZXhdLCBBbGdvcml0aG0gPSAlZCBcbiIsIGNvZXhfZG0tPmN1cl9hbGdvcml0aG0pOworCQkgICJbQlRDb2V4XSwgQWxnb3JpdGhtID0gJWRcbiIsIGNvZXhfZG0tPmN1cl9hbGdvcml0aG0pOwogCiAJaWYgKGhhbGJ0YzgxOTJlMmFudF9pc19jb21tb25fYWN0aW9uKGJ0Y29leGlzdCkpIHsKIAkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLApAQCAtMzU1Miw3ICszNDQxLDggQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODE5MmUyYW50X2luaXRfaHdjb25maWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIGJvb2wgYmFja3VwKQorc3RhdGljIHZvaWQgaGFsYnRjODE5MmUyYW50X2luaXRfaHdjb25maWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCSAgYm9vbCBiYWNrdXApCiB7CiAJdTE2IHUxNnRtcCA9IDA7CiAJdTggdTh0bXAgPSAwOwpAQCAtMzY0OSw3ICszNTM5LDcgQEAKIHZvaWQgZXhfaGFsYnRjODE5MmUyYW50X2Rpc3BsYXlfY29leF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXN0cnVjdCBidGNfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICZidGNvZXhpc3QtPmJvYXJkX2luZm87Ci0Jc3RydWN0IGJ0Y19zdGFja19pbmZvKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOworCXN0cnVjdCBidGNfc3RhY2tfaW5mbyAqc3RhY2tfaW5mbyA9ICZidGNvZXhpc3QtPnN0YWNrX2luZm87CiAJdTggKmNsaV9idWYgPSBidGNvZXhpc3QtPmNsaV9idWY7CiAJdTggdTh0bXBbNF0sIGksIGJ0X2luZm9fZXh0LCBwc190ZG1hX2Nhc2UgPSAwOwogCXUxNiB1MTZ0bXBbNF07CkBAIC0zNzM1LDkgKzM2MjUsOSBAQAogCUNMX1NQUklOVEYoY2xpX2J1ZiwgQlRfVE1QX0JVRl9TSVpFLCAiXHJcbiAlLTM1cyA9ICVzIC8gJXMvICVzICIsCiAJCSAgICJXaWZpIHN0YXR1cyIsICh3aWZpX3VuZGVyXzVnID8gIjVHIiA6ICIyLjRHIiksCiAJCSAgICgoQlRDX1dJRklfQldfTEVHQUNZID09IHdpZmlfYncpID8gIkxlZ2FjeSIgOgotCQkgICAJKCgoQlRDX1dJRklfQldfSFQ0MCA9PSB3aWZpX2J3KSA/ICJIVDQwIiA6ICJIVDIwIikpKSwKKwkJCSgoKEJUQ19XSUZJX0JXX0hUNDAgPT0gd2lmaV9idykgPyAiSFQ0MCIgOiAiSFQyMCIpKSksCiAJCSAgICgoIXdpZmlfYnVzeSkgPyAiaWRsZSIgOgotCQkgICAJKChCVENfV0lGSV9UUkFGRklDX1RYID09IHdpZmlfdHJhZmZpY19kaXIpID8KKwkJCSgoQlRDX1dJRklfVFJBRkZJQ19UWCA9PSB3aWZpX3RyYWZmaWNfZGlyKSA/CiAJCQkJInVwbGluayIgOiAiZG93bmxpbmsiKSkpOwogCUNMX1BSSU5URihjbGlfYnVmKTsKIApAQCAtMzc2Niw3ICszNjU2LDcgQEAKIAkJICAgKGJ0X2luZm9fZXh0JkJJVDApID8gIkJhc2ljIHJhdGUiIDogIkVEUiByYXRlIik7CiAJQ0xfUFJJTlRGKGNsaV9idWYpOwogCi0JZm9yIChpPTA7IGk8QlRfSU5GT19TUkNfODE5MkVfMkFOVF9NQVg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBCVF9JTkZPX1NSQ184MTkyRV8yQU5UX01BWDsgaSsrKSB7CiAJCWlmIChjb2V4X3N0YS0+YnRfaW5mb19jMmhfY250W2ldKSB7CiAJCQlDTF9TUFJJTlRGKGNsaV9idWYsIEJUX1RNUF9CVUZfU0laRSwKIAkJCQkgICAiXHJcbiAlLTM1cyA9ICUwMnggJTAyeCAlMDJ4ICUwMnggIiwKQEAgLTM5MTEsOSArMzgwMSw2IEBACiAJCSAgICIweDc3NChscCByeFszMToxNl0vdHhbMTU6MF0pIiwKIAkJICAgY29leF9zdGEtPmxvd19wcmlvcml0eV9yeCwgY29leF9zdGEtPmxvd19wcmlvcml0eV90eCk7CiAJQ0xfUFJJTlRGKGNsaV9idWYpOwotI2lmKEJUX0FVVE9fUkVQT1JUX09OTFlfODE5MkVfMkFOVCA9PSAxKQotCWhhbGJ0YzgxOTJlMmFudF9tb25pdG9yX2J0X2N0cihidGNvZXhpc3QpOwotI2VuZGlmCiAJYnRjb2V4aXN0LT5idGNfZGlzcF9kYmdfbXNnKGJ0Y29leGlzdCwgQlRDX0RCR19ESVNQX0NPRVhfU1RBVElTVElDUyk7CiB9CiAKQEAgLTM5NTAsNyArMzgzNyw3IEBACiAJaWYgKEJUQ19TQ0FOX1NUQVJUID09IHR5cGUpCiAJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCiAJCQkgICJbQlRDb2V4XSwgU0NBTiBTVEFSVCBub3RpZnlcbiIpOwotCWVsc2UgaWYoQlRDX1NDQU5fRklOSVNIID09IHR5cGUpCisJZWxzZSBpZiAoQlRDX1NDQU5fRklOSVNIID09IHR5cGUpCiAJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCiAJCQkgICJbQlRDb2V4XSwgU0NBTiBGSU5JU0ggbm90aWZ5XG4iKTsKIH0KQEAgLTM5NjAsNyArMzg0Nyw3IEBACiAJaWYgKEJUQ19BU1NPQ0lBVEVfU1RBUlQgPT0gdHlwZSkKIAkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKIAkJCSAgIltCVENvZXhdLCBDT05ORUNUIFNUQVJUIG5vdGlmeVxuIik7Ci0JZWxzZSBpZihCVENfQVNTT0NJQVRFX0ZJTklTSCA9PSB0eXBlKQorCWVsc2UgaWYgKEJUQ19BU1NPQ0lBVEVfRklOSVNIID09IHR5cGUpCiAJCUJUQ19QUklOVChCVENfTVNHX0lOVEVSRkFDRSwgSU5URl9OT1RJRlksCiAJCQkgICJbQlRDb2V4XSwgQ09OTkVDVCBGSU5JU0ggbm90aWZ5XG4iKTsKIH0KQEAgLTM5NjgsNyArMzg1NSw3IEBACiB2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9tZWRpYV9zdGF0dXNfbm90aWZ5KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCQkgICAgdTggdHlwZSkKIHsKLQl1OCBoMmNfcGFyYW1ldGVyWzNdID17MH07CisJdTggaDJjX3BhcmFtZXRlclszXSA9IHswfTsKIAl1MzIgd2lmaV9idzsKIAl1OCB3aWZpX2NlbnRlcl9jaG5sOwogCkBAIC00MDE0LDEyICszOTAxLDEyIEBACiAJCQkJCSAgICAgIHU4IHR5cGUpCiB7CiAJaWYgKHR5cGUgPT0gQlRDX1BBQ0tFVF9ESENQKQotIAkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKKwkJQlRDX1BSSU5UKEJUQ19NU0dfSU5URVJGQUNFLCBJTlRGX05PVElGWSwKIAkJCSAgIltCVENvZXhdLCBESENQIFBhY2tldCBub3RpZnlcbiIpOwotIH0KK30KIAogdm9pZCBleF9oYWxidGM4MTkyZTJhbnRfYnRfaW5mb19ub3RpZnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgICAgIHU4ICp0bXBfYnVmLCB1OCBsZW5ndGggKQorCQkJCSAgICAgICB1OCAqdG1wX2J1ZiwgdTggbGVuZ3RoKQogewogCXU4IGJ0X2luZm8gPSAwOwogCXU4IGksIHJzcFNvdXJjZSA9IDA7CkBAIC00MDg5LDE4ICszOTc2LDE2IEBACiAJCQkgKiBkbyBub3RoaW5nIGhlcmUuICovCiAJCX0KIAotI2lmKEJUX0FVVE9fUkVQT1JUX09OTFlfODE5MkVfMkFOVCA9PSAwKQogCQlpZiAoKGNvZXhfc3RhLT5idF9pbmZvX2V4dCAmIEJJVDQpKSB7CiAJCQkvKiBCVCBhdXRvIHJlcG9ydCBhbHJlYWR5IGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8KIAkJfSBlbHNlIHsKIAkJCWhhbGJ0YzgxOTJlMmFudF9idF9hdXRvcmVwb3J0KGJ0Y29leGlzdCwgRk9SQ0VfRVhFQywKIAkJCQkJCSAgICAgIHRydWUpOwogCQl9Ci0jZW5kaWYKIAl9CiAKIAkvKiBjaGVjayBCSVQyIGZpcnN0ID09PiBjaGVjayBpZiBidCBpcyB1bmRlciBpbnF1aXJ5IG9yIHBhZ2Ugc2NhbiAqLwotCWlmKGJ0X2luZm8gJiBCVF9JTkZPXzgxOTJFXzJBTlRfQl9JTlFfUEFHRSkKKwlpZiAoYnRfaW5mbyAmIEJUX0lORk9fODE5MkVfMkFOVF9CX0lOUV9QQUdFKQogCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IHRydWU7CiAJZWxzZQogCQljb2V4X3N0YS0+YzJoX2J0X2lucXVpcnlfcGFnZSA9IGZhbHNlOwpAQCAtNDE4MCwxMCArNDA2NSwxMCBAQAogewogCWlmIChCVENfU1RBQ0tfT1BfSU5RX1BBR0VfUEFJUl9TVEFSVCA9PSB0eXBlKQogCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAotCQkgICAgICAgICAgIltCVENvZXhdIFN0YWNrT1AgSW5xdWlyeS9wYWdlL3BhaXIgc3RhcnQgbm90aWZ5XG4iKTsKLQllbHNlIGlmKEJUQ19TVEFDS19PUF9JTlFfUEFHRV9QQUlSX0ZJTklTSCA9PSB0eXBlKQorCQkJICAiW0JUQ29leF0gU3RhY2tPUCBJbnF1aXJ5L3BhZ2UvcGFpciBzdGFydCBub3RpZnlcbiIpOworCWVsc2UgaWYgKEJUQ19TVEFDS19PUF9JTlFfUEFHRV9QQUlSX0ZJTklTSCA9PSB0eXBlKQogCQlCVENfUFJJTlQoQlRDX01TR19JTlRFUkZBQ0UsIElOVEZfTk9USUZZLAotCQkgICAgICAgICAgIltCVENvZXhdIFN0YWNrT1AgSW5xdWlyeS9wYWdlL3BhaXIgZmluaXNoIG5vdGlmeVxuIik7CisJCQkgICJbQlRDb2V4XSBTdGFja09QIElucXVpcnkvcGFnZS9wYWlyIGZpbmlzaCBub3RpZnlcbiIpOwogfQogCiB2b2lkIGV4X2hhbGJ0YzgxOTJlMmFudF9oYWx0X25vdGlmeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKQEAgLTQxOTYsMTAgKzQwODEsMTAgQEAKIAogdm9pZCBleF9oYWxidGM4MTkyZTJhbnRfcGVyaW9kaWNhbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKLQlzdGF0aWMgdTggZGlzX3Zlcl9pbmZvX2NudCA9IDA7CisJc3RhdGljIHU4IGRpc192ZXJfaW5mb19jbnQ7CiAJdTMyIGZ3X3ZlciA9IDAsIGJ0X3BhdGNoX3ZlciA9IDA7Ci0Jc3RydWN0IGJ0Y19ib2FyZF9pbmZvICpib2FyZF9pbmZvPSZidGNvZXhpc3QtPmJvYXJkX2luZm87Ci0Jc3RydWN0IGJ0Y19zdGFja19pbmZvICpzdGFja19pbmZvPSZidGNvZXhpc3QtPnN0YWNrX2luZm87CisJc3RydWN0IGJ0Y19ib2FyZF9pbmZvICpib2FyZF9pbmZvID0gJmJ0Y29leGlzdC0+Ym9hcmRfaW5mbzsKKwlzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOwogCiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFLAogCQkgICI9PT09PT09PT09PT09PT09PT09PT09PVBlcmlvZGljYWw9PT09PT09PT09PT09PT09PT09PT09PVxuIik7CkBAIC00MjI2LDE3ICs0MTExLDggQEAKIAkJCSAgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiAJfQogCi0jaWYoQlRfQVVUT19SRVBPUlRfT05MWV84MTkyRV8yQU5UID09IDApCiAJaGFsYnRjODE5MmUyYW50X3F1ZXJ5YnRfaW5mbyhidGNvZXhpc3QpOwogCWhhbGJ0YzgxOTJlMmFudF9tb25pdG9yX2J0X2N0cihidGNvZXhpc3QpOwogCWhhbGJ0YzgxOTJlMmFudF9tb25pdG9yX2J0X2VuYWJsZV9kaXNhYmxlKGJ0Y29leGlzdCk7Ci0jZWxzZQotCWlmIChoYWxidGM4MTkyZTJhbnRfaXN3aWZpX3N0YXR1c19jaGFuZ2VkKGJ0Y29leGlzdCkgfHwKLQkgICAgY29leF9kbS0+YXV0b190ZG1hX2FkanVzdCkKLQkJaGFsYnRjODE5MmUyYW50X3J1bl9jb2V4aXN0X21lY2hhbmlzbShidGNvZXhpc3QpOwotI2VuZGlmCiB9CiAKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYnRjb2V4aXN0L2hhbGJ0YzgxOTJlMmFudC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvaGFsYnRjODE5MmUyYW50LmgKaW5kZXggNmQxMDllZGIuLjQxNmQzZGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4MTkyZTJhbnQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4MTkyZTJhbnQuaApAQCAtMSw4ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICBUaGUgZm9sbG93aW5nIGlzIGZvciA4MTkyRSAyQW50IEJUIENvLWV4aXN0IGRlZmluaXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUJQlRfQVVUT19SRVBPUlRfT05MWV84MTkyRV8yQU5UCQkJMAotCiAjZGVmaW5lCUJUX0lORk9fODE5MkVfMkFOVF9CX0ZUUAkJCUJJVDcKICNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfQTJEUAkJCUJJVDYKICNkZWZpbmUJQlRfSU5GT184MTkyRV8yQU5UX0JfSElECQkJQklUNQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvaGFsYnRjODcyM2IxYW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuYwppbmRleCA5Njc3OTQzLi5jOTY5Mzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4NzIzYjFhbnQuYwpAQCAtMjIsMTQgKzIyLDE0IEBACiBzdGF0aWMgc3RydWN0IGNvZXhfc3RhXzg3MjNiXzFhbnQgZ2xjb2V4X3N0YV84NzIzYl8xYW50Owogc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84NzIzYl8xYW50ICpjb2V4X3N0YSA9ICZnbGNvZXhfc3RhXzg3MjNiXzFhbnQ7CiAKLWNvbnN0IGNoYXIgKmNvbnN0IEdMQnRJbmZvU3JjODcyM2IxQW50W109eworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IEdMQnRJbmZvU3JjODcyM2IxQW50W10gPSB7CiAJIkJUIEluZm9bd2lmaSBmd10iLAogCSJCVCBJbmZvW2J0IHJzcF0iLAogCSJCVCBJbmZvW2J0IGF1dG8gcmVwb3J0XSIsCiB9OwogCi11MzIgZ2xjb2V4X3Zlcl9kYXRlXzg3MjNiXzFhbnQgPSAyMDEzMDkwNjsKLXUzMiBnbGNvZXhfdmVyXzg3MjNiXzFhbnQgPSAweDQ1Oworc3RhdGljIHUzMiBnbGNvZXhfdmVyX2RhdGVfODcyM2JfMWFudCA9IDIwMTMwOTA2Oworc3RhdGljIHUzMiBnbGNvZXhfdmVyXzg3MjNiXzFhbnQgPSAweDQ1OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBsb2NhbCBmdW5jdGlvbiBwcm90byB0eXBlIGlmIG5lZWRlZApAQCAtMzcsNyArMzcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogbG9jYWwgZnVuY3Rpb24gc3RhcnQgd2l0aCBoYWxidGM4NzIzYjFhbnRfCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdTggaGFsYnRjODcyM2IxYW50X2J0X3Jzc2lfc3RhdGUodTggbGV2ZWxfbnVtLCB1OCByc3NpX3RocmVzaCwgdTggcnNzaV90aHJlc2gxKQorc3RhdGljIHU4IGhhbGJ0Yzg3MjNiMWFudF9idF9yc3NpX3N0YXRlKHU4IGxldmVsX251bSwgdTggcnNzaV90aHJlc2gsCisJCQkJCXU4IHJzc2lfdGhyZXNoMSkKIHsKIAlzMzIgYnRfcnNzaT0wOwogCXU4IGJ0X3Jzc2lfc3RhdGUgPSBjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGU7CkBAIC0xMzQsOSArMTM1LDkgQEAKIAlyZXR1cm4gYnRfcnNzaV9zdGF0ZTsKIH0KIAotdTggaGFsYnRjODcyM2IxYW50X3dpZmlfcnNzaV9zdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICB1OCBpbmRleCwgdTggbGV2ZWxfbnVtLAotCQkJCSAgIHU4IHJzc2lfdGhyZXNoLCB1OCByc3NpX3RocmVzaDEpCitzdGF0aWMgdTggaGFsYnRjODcyM2IxYW50X3dpZmlfcnNzaV9zdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJdTggaW5kZXgsIHU4IGxldmVsX251bSwKKwkJCQkJdTggcnNzaV90aHJlc2gsIHU4IHJzc2lfdGhyZXNoMSkKIHsKIAlzMzIgd2lmaV9yc3NpPTA7CiAJdTggd2lmaV9yc3NpX3N0YXRlID0gY29leF9zdGEtPnByZV93aWZpX3Jzc2lfc3RhdGVbaW5kZXhdOwpAQCAtMjQ5LDggKzI1MCw4IEBACiAJcmV0dXJuIHdpZmlfcnNzaV9zdGF0ZTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfdXBkYXRlcmFfbWFzayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICBib29sIGZvcmNlX2V4ZWMsIHUzMiBkaXNfcmF0ZV9tYXNrKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3VwZGF0ZXJhX21hc2soc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgdTMyIGRpc19yYXRlX21hc2spCiB7CiAJY29leF9kbS0+Y3VycmFfbWFzayA9IGRpc19yYXRlX21hc2s7CiAKQEAgLTI2MSw4ICsyNjIsOSBAQAogCWNvZXhfZG0tPnByZXJhX21hc2sgPSBjb2V4X2RtLT5jdXJyYV9tYXNrOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hdXRvX3JhdGVfZmFsbGJhY2tfcmV0cnkoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgICAgIGJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hdXRvX3JhdGVfZmFsbGJhY2tfcmV0cnkoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCWJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKIHsKIAlib29sIHdpZmlfdW5kZXJfYm1vZGUgPSBmYWxzZTsKIApAQCAtMzAwLDggKzMwMiw4IEBACiAJY29leF9kbS0+cHJlX2FyZnJfdHlwZSA9IGNvZXhfZG0tPmN1cl9hcmZyX3R5cGU7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3JldHJ5X2xpbWl0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfcmV0cnlfbGltaXQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKIHsKIAljb2V4X2RtLT5jdXJfcmV0cnlfbGltaXRfdHlwZSA9IHR5cGU7CiAKQEAgLTMyNCw4ICszMjYsOCBAQAogCWNvZXhfZG0tPnByZV9yZXRyeV9saW1pdF90eXBlID0gY29leF9kbS0+Y3VyX3JldHJ5X2xpbWl0X3R5cGU7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2FtcGR1X21heHRpbWUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJICAgYm9vbCBmb3JjZV9leGVjLCB1OCB0eXBlKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FtcGR1X21heHRpbWUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgdTggdHlwZSkKIHsKIAljb2V4X2RtLT5jdXJfYW1wZHVfdGltZV90eXBlID0gdHlwZTsKIApAQCAtMzQ4LDcgKzM1MCw3IEBACiAJY29leF9kbS0+cHJlX2FtcGR1X3RpbWVfdHlwZSA9IGNvZXhfZG0tPmN1cl9hbXBkdV90aW1lX3R5cGU7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2xpbWl0ZWRfdHgoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfbGltaXRlZF90eChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQlib29sIGZvcmNlX2V4ZWMsIHU4IHJhX21hc2tUeXBlLCB1OCBhcmZyX3R5cGUsCiAJCQkJdTggcmV0cnlfbGltaXRfdHlwZSwgdTggYW1wZHVfdGltZV90eXBlKQogewpAQCAtMzc1LDcgKzM3Nyw3IEBACiAJaGFsYnRjODcyM2IxYW50X2FtcGR1X21heHRpbWUoYnRjb2V4aXN0LCBmb3JjZV9leGVjLCBhbXBkdV90aW1lX3R5cGUpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9saW1pdGVkX3J4KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2xpbWl0ZWRfcngoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJYm9vbCBmb3JjZV9leGVjLCBib29sIHJlal9hcF9hZ2dfcGt0LAogCQkJCWJvb2wgYl9idF9jdHJsX2FnZ19idWZfc2l6ZSwgdTggYWdnX2J1Zl9zaXplKQogewpAQCAtMzk4LDcgKzQwMCw3IEBACiAJYnRjb2V4aXN0LT5idGNfc2V0KGJ0Y29leGlzdCwgQlRDX1NFVF9BQ1RfQUdHUkVHQVRFX0NUUkwsIE5VTEwpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9tb25pdG9yX2J0X2N0cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9tb25pdG9yX2J0X2N0cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1MzIgcmVnX2hwX3R4cngsIHJlZ19scF90eHJ4LCB1MzJ0bXA7CiAJdTMyIHJlZ19ocF90eCA9IDAsIHJlZ19ocF9yeCA9IDA7CkBAIC00MjQsNyArNDI2LDcgQEAKIAlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NzZlLCAweGMpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9xdWVyeV9idF9pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3F1ZXJ5X2J0X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKIApAQCAtNDM5LDcgKzQ0MSw4IEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYxLCAxLCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotYm9vbCBoYWxidGM4NzIzYjFhbnRfaXNfd2lmaV9zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyBib29sIGhhbGJ0Yzg3MjNiMWFudF9pc193aWZpX3N0YXR1c19jaGFuZ2VkKAorCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJc3RhdGljIGJvb2wgcHJlX3dpZmlfYnVzeSA9IGZhbHNlOwogCXN0YXRpYyBib29sIHByZV91bmRlcl80d2F5ID0gZmFsc2UsIHByZV9idF9oc19vbiA9IGZhbHNlOwpAQCAtNDcxLDcgKzQ3NCw3IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF91cGRhdGVfYnRfbGlua19pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3VwZGF0ZV9idF9saW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKIAlib29sIGJ0X2hzX29uID0gZmFsc2U7CkBAIC01MTksNyArNTIyLDcgQEAKIAkJYnRfbGlua19pbmZvLT5oaWRfb25seSA9IGZhbHNlOwogfQogCi11OCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2FsZ29yaXRobShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB1OCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2FsZ29yaXRobShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOwogCWJvb2wgYnRfaHNfb24gPSBmYWxzZTsKQEAgLTcxOSw3ICs3MjIsNyBAQAogCXJldHVybiBhbGdvcml0aG07CiB9CiAKLWJvb2wgaGFsYnRjODcyM2IxYW50X25lZWRfdG9fZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyBib29sIGhhbGJ0Yzg3MjNiMWFudF9uZWVkX3RvX2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAlib29sIGJ0X2hzX29uID0gZmFsc2UsIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CkBAIC03NTAsOCArNzUzLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfZGFjX3N3aW5nX2xldmVsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkgICAgdTggZGFjX3N3aW5nX2x2bCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfZndfZGFjX3N3aW5nX2xldmVsKAorCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQl1OCBkYWNfc3dpbmdfbHZsKQogewogCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CiAKQEAgLTc2Nyw3ICs3NzEsNyBAQAogCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2NCwgMSwgaDJjX3BhcmFtZXRlcik7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9md19kZWNfYnRfcHdyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9md19kZWNfYnRfcHdyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgICAgICBib29sIGRlY19idF9wd3IpCiB7CiAJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKQEAgLTc4NCw3ICs3ODgsNyBAQAogCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MiwgMSwgaDJjX3BhcmFtZXRlcik7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQlib29sIGZvcmNlX2V4ZWMsIGJvb2wgZGVjX2J0X3B3cikKIHsKIAlyZXR1cm47CkBAIC04MDYsNyArODEwLDggQEAKIAljb2V4X2RtLT5wcmVfZGVjX2J0X3B3ciA9IGNvZXhfZG0tPmN1cl9kZWNfYnRfcHdyOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfYnRfYXV0b19yZXBvcnQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisjaWYgKEJUX0FVVE9fUkVQT1JUX09OTFlfODcyM0JfMUFOVCA9PSAwKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9idF9hdXRvX3JlcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkJYm9vbCBlbmFibGVfYXV0b19yZXBvcnQpCiB7CiAJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKQEAgLTgyNCw3ICs4MjksNyBAQAogCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2OCwgMSwgaDJjX3BhcmFtZXRlcik7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2J0X2F1dG9fcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2J0X2F1dG9fcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgICBib29sIGZvcmNlX2V4ZWMsIGJvb2wgZW5hYmxlX2F1dG9fcmVwb3J0KQogewogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKQEAgLTg0OCw4ICs4NTMsOSBAQAogCiAJY29leF9kbS0+cHJlX2J0X2F1dG9fcmVwb3J0ID0gY29leF9kbS0+Y3VyX2J0X2F1dG9fcmVwb3J0OwogfQorI2VuZGlmCiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2Z3X2RhY19zd2luZ19sdmwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfZndfZGFjX3N3aW5nX2x2bChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgICBib29sIGZvcmNlX2V4ZWMsIHU4IGZ3X2RhY19zd2luZ19sdmwpCiB7CiAJcmV0dXJuOwpAQCAtODc2LDU1ICs4ODIsNyBAQAogCWNvZXhfZG0tPnByZV9md19kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmw7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9zd19yZl9yeF9scGZfY29ybmVyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkgICAgIGJvb2wgcnhfcmZfc2hyaW5rX29uKQotewotCWlmIChyeF9yZl9zaHJpbmtfb24pIHsKLQkJLypTaHJpbmsgUkYgUnggTFBGIGNvcm5lciAqLwotCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfRVhFQywKLQkJCSAgIltCVENvZXhdLCBTaHJpbmsgUkYgUnggTFBGIGNvcm5lciEhXG4iKTsKLQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDFlLAotCQkJCQkgIDB4ZmZmZmYsIDB4ZmZmZjcpOwotCX0gZWxzZSB7Ci0JCS8qUmVzdW1lIFJGIFJ4IExQRiBjb3JuZXIKLQkJICogQWZ0ZXIgaW5pdGlhbGl6ZWQsIHdlIGNhbiB1c2UgY29leF9kbS0+YnRSZjB4MWVCYWNrdXAgKi8KLQkJaWYgKGJ0Y29leGlzdC0+aW5pdGlsaXplZCkgewotCQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCi0JCQkJICAiW0JUQ29leF0sIFJlc3VtZSBSRiBSeCBMUEYgY29ybmVyISFcbiIpOwotCQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLAotCQkJCQkJICAweDFlLCAweGZmZmZmLAotCQkJCQkJICBjb2V4X2RtLT5idF9yZjB4MWVfYmFja3VwKTsKLQkJfQotCX0KLX0KLQotdm9pZCBoYWxidGM4NzIzYjFhbnRfcmZfc2hyaW5rKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCByeF9yZl9zaHJpbmtfb24pCi17Ci0JQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAotCQkgICJbQlRDb2V4XSwgJXMgdHVybiBSeCBSRiBTaHJpbmsgPSAlc1xuIiwKLQkJICAoZm9yY2VfZXhlYz8gImZvcmNlIHRvIjoiIiksCi0JCSAgKChyeF9yZl9zaHJpbmtfb24pPyAiT04iOiJPRkYiKSk7Ci0JY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbmsgPSByeF9yZl9zaHJpbmtfb247Ci0KLQlpZiAoIWZvcmNlX2V4ZWMpIHsKLQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0RFVEFJTCwKLQkJCSAgIltCVENvZXhdLCBiUHJlUmZSeExwZlNocmluaz0lZCwgIgotCQkJICAiYkN1clJmUnhMcGZTaHJpbms9JWRcbiIsCi0JCQkgIGNvZXhfZG0tPnByZV9yZl9yeF9scGZfc2hyaW5rLAotCQkJICBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3Nocmluayk7Ci0KLQkJaWYgKGNvZXhfZG0tPnByZV9yZl9yeF9scGZfc2hyaW5rID09Ci0JCSAgICBjb2V4X2RtLT5jdXJfcmZfcnhfbHBmX3NocmluaykKLQkJCXJldHVybjsKLQl9Ci0JaGFsYnRjODcyM2IxYW50X3NldF9zd19yZl9yeF9scGZfY29ybmVyKGJ0Y29leGlzdCwKLQkJCQkJCWNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rKTsKLQotCWNvZXhfZG0tPnByZV9yZl9yeF9scGZfc2hyaW5rID0gY29leF9kbS0+Y3VyX3JmX3J4X2xwZl9zaHJpbms7Ci19Ci0KLXZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9zd19wZW5hbHR5X3R4X3JhdGVfYWRhcHRpdmUoCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfc2V0X3N3X3BlbmFsdHlfdHhfcmF0ZV9hZGFwdGl2ZSgKIAkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJCWJvb2wgbG93X3BlbmFsdHlfcmEpCiB7CkBAIC05NDgsNyArOTA2LDcgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjksIDYsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9sb3dfcGVuYWx0eV9yYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9sb3dfcGVuYWx0eV9yYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGxvd19wZW5hbHR5X3JhKQogewogCWNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYSA9IGxvd19wZW5hbHR5X3JhOwpAQCAtOTYzLDE1MiArOTIxLDcgQEAKIAljb2V4X2RtLT5wcmVfbG93X3BlbmFsdHlfcmEgPSBjb2V4X2RtLT5jdXJfbG93X3BlbmFsdHlfcmE7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9kYWNfc3dpbmdfcmVnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCB1MzIgbGV2ZWwpCi17Ci0JdTggdmFsID0gKHU4KSBsZXZlbDsKLQotCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAotCQkgICJbQlRDb2V4XSwgV3JpdGUgU3dEYWNTd2luZyA9IDB4JXhcbiIsIGxldmVsKTsKLQlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg4ODMsIDB4M2UsIHZhbCk7Ci19Ci0KLXZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9zd19mdWxsX3RpbWVfZGFjX3N3aW5nKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkJYm9vbCBzd19kYWNfc3dpbmdfb24sCi0JCQkJCQl1MzIgc3dfZGFjX3N3aW5nX2x2bCkKLXsKLQlpZiAoc3dfZGFjX3N3aW5nX29uKQotCQloYWxidGM4NzIzYjFhbnRfc2V0X2RhY19zd2luZ19yZWcoYnRjb2V4aXN0LCBzd19kYWNfc3dpbmdfbHZsKTsKLQllbHNlCi0JCWhhbGJ0Yzg3MjNiMWFudF9zZXRfZGFjX3N3aW5nX3JlZyhidGNvZXhpc3QsIDB4MTgpOwotfQotCi0KLXZvaWQgaGFsYnRjODcyM2IxYW50X2RhY19zd2luZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgYm9vbCBmb3JjZV9leGVjLAotCQkJICAgICAgIGJvb2wgZGFjX3N3aW5nX29uLCB1MzIgZGFjX3N3aW5nX2x2bCkKLXsKLQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCi0JCSAgIltCVENvZXhdLCAlcyB0dXJuIERhY1N3aW5nPSVzLCBkYWNfc3dpbmdfbHZsPTB4JXhcbiIsCi0JCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoZGFjX3N3aW5nX29uID8gIk9OIiA6ICJPRkYiKSwKLQkJICBkYWNfc3dpbmdfbHZsKTsKLQotCWNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfb24gPSBkYWNfc3dpbmdfb247Ci0JY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmwgPSBkYWNfc3dpbmdfbHZsOwotCi0JaWYgKCFmb3JjZV9leGVjKSB7Ci0JCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCi0JCQkgICJbQlRDb2V4XSwgYlByZURhY1N3aW5nT249JWQsIHByZURhY1N3aW5nTHZsPTB4JXgsICIKLQkJCSAgImJDdXJEYWNTd2luZ09uPSVkLCBjdXJEYWNTd2luZ0x2bD0weCV4XG4iLAotCQkJICBjb2V4X2RtLT5wcmVfZGFjX3N3aW5nX29uLCBjb2V4X2RtLT5wcmVfZGFjX3N3aW5nX2x2bCwKLQkJCSAgY29leF9kbS0+Y3VyX2RhY19zd2luZ19vbiwKLQkJCSAgY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmwpOwotCi0JCWlmICgoY29leF9kbS0+cHJlX2RhY19zd2luZ19vbiA9PSBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX29uKSAmJgotCQkgICAgKGNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsID09IGNvZXhfZG0tPmN1cl9kYWNfc3dpbmdfbHZsKSkKLQkJCXJldHVybjsKLQl9Ci0JbWRlbGF5KDMwKTsKLQloYWxidGM4NzIzYjFhbnRfc2V0X3N3X2Z1bGxfdGltZV9kYWNfc3dpbmcoYnRjb2V4aXN0LCBkYWNfc3dpbmdfb24sCi0JCQkJCQkgICBkYWNfc3dpbmdfbHZsKTsKLQotCWNvZXhfZG0tPnByZV9kYWNfc3dpbmdfb24gPSBjb2V4X2RtLT5jdXJfZGFjX3N3aW5nX29uOwotCWNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmw7Ci19Ci0KLXZvaWQgaGFsYnRjODcyM2IxYW50X3NldF9hZGNfYmFja29mZihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkgICAgIGJvb2wgYWRjX2JhY2tvZmYpCi17Ci0JaWYgKGFkY19iYWNrb2ZmKSB7Ci0JCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAotCQkJICAiW0JUQ29leF0sIEJCIEJhY2tPZmYgTGV2ZWwgT24hXG4iKTsKLQkJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGVfYml0bWFzayhidGNvZXhpc3QsIDB4OGRiLCAweDYwLCAweDMpOwotCX0gZWxzZSB7Ci0JCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19FWEVDLAotCQkJICAiW0JUQ29leF0sIEJCIEJhY2tPZmYgTGV2ZWwgT2ZmIVxuIik7Ci0JCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlX2JpdG1hc2soYnRjb2V4aXN0LCAweDhkYiwgMHg2MCwgMHgxKTsKLQl9Ci19Ci0KLXZvaWQgaGFsYnRjODcyM2IxYW50X2FkY19iYWNrb2ZmKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSBib29sIGZvcmNlX2V4ZWMsIGJvb2wgYWRjX2JhY2tvZmYpCi17Ci0JQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAotCQkgICJbQlRDb2V4XSwgJXMgdHVybiBBZGNCYWNrT2ZmID0gJXNcbiIsCi0JCSAgKGZvcmNlX2V4ZWMgPyAiZm9yY2UgdG8iIDogIiIpLCAoYWRjX2JhY2tvZmYgPyAiT04iIDogIk9GRiIpKTsKLQljb2V4X2RtLT5jdXJfYWRjX2JhY2tvZmYgPSBhZGNfYmFja29mZjsKLQotCWlmICghZm9yY2VfZXhlYykgewotCQlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1dfREVUQUlMLAotCQkJICAiW0JUQ29leF0sIGJQcmVBZGNCYWNrT2ZmPSVkLCBiQ3VyQWRjQmFja09mZj0lZFxuIiwKLQkJCSAgY29leF9kbS0+cHJlX2FkY19iYWNrb2ZmLCBjb2V4X2RtLT5jdXJfYWRjX2JhY2tvZmYpOwotCi0JCWlmKGNvZXhfZG0tPnByZV9hZGNfYmFja29mZiA9PSBjb2V4X2RtLT5jdXJfYWRjX2JhY2tvZmYpCi0JCQlyZXR1cm47Ci0JfQotCWhhbGJ0Yzg3MjNiMWFudF9zZXRfYWRjX2JhY2tvZmYoYnRjb2V4aXN0LCBjb2V4X2RtLT5jdXJfYWRjX2JhY2tvZmYpOwotCi0JY29leF9kbS0+cHJlX2FkY19iYWNrb2ZmID0KLQkJY29leF9kbS0+Y3VyX2FkY19iYWNrb2ZmOwotfQotCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfYWdjX3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCSAgIGJvb2wgYWRjX3RhYmxlX2VuKQotewotCXU4IHJzc2lfYWRqdXN0X3ZhbCA9IDA7Ci0KLQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwKLQkJQlRDX1JGX0EsIDB4ZWYsIDB4ZmZmZmYsIDB4MDIwMDApOwotCWlmIChhZGNfdGFibGVfZW4pIHsKLQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCi0JCQkgICJbQlRDb2V4XSwgQWdjIFRhYmxlIE9uIVxuIik7Ci0JCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgzYiwKLQkJCQkJICAweGZmZmZmLCAweDNmYTU4KTsKLQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDNiLAotCQkJCQkgIDB4ZmZmZmYsIDB4MzdhNTgpOwotCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4M2IsCi0JCQkJCSAgMHhmZmZmZiwgMHgyZmE1OCk7Ci0JCXJzc2lfYWRqdXN0X3ZhbCA9IDg7Ci0JfSBlbHNlIHsKLQkJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXX0VYRUMsCi0JCQkgICJbQlRDb2V4XSwgQWdjIFRhYmxlIE9mZiFcbiIpOwotCQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4M2IsCi0JCQkJCSAgMHhmZmZmZiwgMHgzOTI1OCk7Ci0JCWJ0Y29leGlzdC0+YnRjX3NldF9yZl9yZWcoYnRjb2V4aXN0LCBCVENfUkZfQSwgMHgzYiwKLQkJCQkJICAweGZmZmZmLCAweDMxMjU4KTsKLQkJYnRjb2V4aXN0LT5idGNfc2V0X3JmX3JlZyhidGNvZXhpc3QsIEJUQ19SRl9BLCAweDNiLAotCQkJCQkgIDB4ZmZmZmYsIDB4MjkyNTgpOwotCX0KLQlidGNvZXhpc3QtPmJ0Y19zZXRfcmZfcmVnKGJ0Y29leGlzdCwgQlRDX1JGX0EsIDB4ZWYsIDB4ZmZmZmYsIDB4MCk7Ci0KLQkvKiBzZXQgcnNzaV9hZGp1c3RfdmFsIGZvciB3aWZpIG1vZHVsZS4gKi8KLQlidGNvZXhpc3QtPmJ0Y19zZXQoYnRjb2V4aXN0LCBCVENfU0VUX1UxX1JTU0lfQURKX1ZBTF9GT1JfQUdDX1RBQkxFX09OLAotCQkJICAgJnJzc2lfYWRqdXN0X3ZhbCk7Ci19Ci0KLQotdm9pZCBoYWxidGM4NzIzYjFhbnRfYWdjX3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBhZGNfdGFibGVfZW4pCi17Ci0JQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLAotCQkgICJbQlRDb2V4XSwgJXMgJXMgQWdjIFRhYmxlXG4iLAotCQkgIChmb3JjZV9leGVjID8gImZvcmNlIHRvIiA6ICIiKSwKLQkJICAoYWRjX3RhYmxlX2VuID8gIkVuYWJsZSIgOiAiRGlzYWJsZSIpKTsKLQljb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuID0gYWRjX3RhYmxlX2VuOwotCi0JaWYgKCFmb3JjZV9leGVjKSB7Ci0JCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9TV19ERVRBSUwsCi0JCQkgICJbQlRDb2V4XSwgYlByZUFnY1RhYmxlRW49JWQsIGJDdXJBZ2NUYWJsZUVuPSVkXG4iLAotCQkJICBjb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuLAotCQkJICBjb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuKTsKLQotCQlpZihjb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuID09IGNvZXhfZG0tPmN1cl9hZ2NfdGFibGVfZW4pCi0JCQlyZXR1cm47Ci0JfQotCWhhbGJ0Yzg3MjNiMWFudF9zZXRfYWdjX3RhYmxlKGJ0Y29leGlzdCwgYWRjX3RhYmxlX2VuKTsKLQotCWNvZXhfZG0tPnByZV9hZ2NfdGFibGVfZW4gPSBjb2V4X2RtLT5jdXJfYWdjX3RhYmxlX2VuOwotfQotCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9zZXRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgdTMyIHZhbDB4NmMwLCB1MzIgdmFsMHg2YzQsCiAJCQkJICAgIHUzMiB2YWwweDZjOCwgdTggdmFsMHg2Y2MpCiB7CkBAIC0xMTI5LDcgKzk0Miw3IEBACiAJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDZjYywgdmFsMHg2Y2MpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2NvZXhfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAgCQkJCWJvb2wgZm9yY2VfZXhlYywgdTMyIHZhbDB4NmMwLAogIAkJCQl1MzIgdmFsMHg2YzQsIHUzMiB2YWwweDZjOCwKICAJCQkJdTggdmFsMHg2Y2MpCkBAIC0xMTU5LDcgKzk3Miw3IEBACiAJY29leF9kbS0+cHJlX3ZhbDB4NmNjID0gY29leF9kbS0+Y3VyX3ZhbDB4NmNjOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkJICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CkBAIC0xMjAwLDcgKzEwMTMsNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfU2V0RndJZ25vcmVXbGFuQWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X1NldEZ3SWdub3JlV2xhbkFjdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkJYm9vbCBlbmFibGUpCiB7CiAJdTggaDJjX3BhcmFtZXRlclsxXSA9IHswfTsKQEAgLTEyMTUsNyArMTAyOCw3IEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYzLCAxLCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfaWdub3JlX3dsYW5fYWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2lnbm9yZV93bGFuX2FjdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBlbmFibGUpCiB7CiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLApAQCAtMTIzOSw3ICsxMDUyLDcgQEAKIAljb2V4X2RtLT5wcmVfaWdub3JlX3dsYW5fYWN0ID0gY29leF9kbS0+Y3VyX2lnbm9yZV93bGFuX2FjdDsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfc2V0X2Z3X3BzX3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgIHU4IGJ5dGUxLCB1OCBieXRlMiwgdTggYnl0ZTMsCiAJCQkJICAgIHU4IGJ5dGU0LCB1OCBieXRlNSkKIHsKQEAgLTEyODUsNyArMTA5OCw3IEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDYwLCA1LCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfU2V0THBzUnB3bShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9TZXRMcHNScHdtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCXU4IGxwc192YWwsIHU4IHJwd21fdmFsKQogewogCXU4IGxwcyA9IGxwc192YWw7CkBAIC0xMjk1LDggKzExMDgsOCBAQAogCWJ0Y29leGlzdC0+YnRjX3NldChidGNvZXhpc3QsIEJUQ19TRVRfVTFfMUFOVF9SUFdNLCAmcnB3bSk7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X0xwc1Jwd20oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIGJvb2wgZm9yY2VfZXhlYywKLQkJCSAgICAgdTggbHBzX3ZhbCwgdTggcnB3bV92YWwpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfTHBzUnB3bShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQlib29sIGZvcmNlX2V4ZWMsIHU4IGxwc192YWwsIHU4IHJwd21fdmFsKQogewogCiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX0ZXLApAQCAtMTMyNiw3ICsxMTM5LDcgQEAKIAljb2V4X2RtLT5wcmVfcnB3bSA9IGNvZXhfZG0tPmN1cl9ycHdtOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9zd19tZWNoYW5pc20xKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbTEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgYm9vbCBzaHJpbmtfcnhfbHBmLCBib29sIGxvd19wZW5hbHR5X3JhLAogCQkJCSAgIGJvb2wgbGltaXRlZF9kaWcsIGJvb2wgYnRfbG5hX2NvbnN0cmFpbikKIHsKQEAgLTEzMzcsNyArMTE1MCw3IEBACiAJaGFsYnRjODcyM2IxYW50X2xvd19wZW5hbHR5X3JhKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGxvd19wZW5hbHR5X3JhKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfc3dfbWVjaGFuaXNtMihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9zd19tZWNoYW5pc20yKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgIGJvb2wgYWdjX3RhYmxlX3NoaWZ0LCBib29sIGFkY19iYWNrb2ZmLAogCQkJCSAgIGJvb2wgc3dfZGFjX3N3aW5nLCB1MzIgZGFjX3N3aW5nX2x2bCkKIHsKQEAgLTEzNDYsNyArMTE1OSw3IEBACiAJCSAgYWdjX3RhYmxlX3NoaWZ0LCBhZGNfYmFja29mZiwgc3dfZGFjX3N3aW5nKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfU2V0QW50UGF0aChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9TZXRBbnRQYXRoKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCXU4IGFudF9wb3NfdHlwZSwgYm9vbCBpbml0X2h3X2NmZywKIAkJCQlib29sIHdpZmlfb2ZmKQogewpAQCAtMTUzNyw4ICsxMzUwLDggQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIGJvb2wgZm9yY2VfZXhlYywKLQkJCSAgICAgYm9vbCB0dXJuX29uLCB1OCB0eXBlKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgYm9vbCB0dXJuX29uLCB1OCB0eXBlKQogewogCWJvb2wgd2lmaV9idXN5ID0gZmFsc2U7CiAJdTggcnNzaV9hZGp1c3RfdmFsID0gMDsKQEAgLTE3ODMsMjIgKzE1OTYsNyBAQAogCWNvZXhfZG0tPnByZV9wc190ZG1hID0gY29leF9kbS0+Y3VyX3BzX3RkbWE7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2NvZXhfYWxsb2ZmKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQotewotCS8qIGZ3IGFsbCBvZmYgKi8KLQloYWxidGM4NzIzYjFhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCA2KTsKLQloYWxidGM4NzIzYjFhbnRfZGVjX2J0X3B3cihidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCBmYWxzZSk7Ci0KLQkvKiBzdyBhbGwgb2ZmICovCi0JaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbTEoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0JaGFsYnRjODcyM2IxYW50X3N3X21lY2hhbmlzbTIoYnRjb2V4aXN0LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAweDE4KTsKLQotCi0JLyogaHcgYWxsIG9mZiAqLwotCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKLX0KLQotYm9vbCBoYWxidGM4NzIzYjFhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyBib29sIGhhbGJ0Yzg3MjNiMWFudF9pc19jb21tb25fYWN0aW9uKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCWJvb2wgY29tbW9tID0gZmFsc2UsIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CiAJYm9vbCB3aWZpX2J1c3kgPSBmYWxzZTsKQEAgLTE4OTYsOCArMTY5NCw5IEBACiB9CiAKIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3RfZm9yX2FjbChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkJCSAgdTggd2lmaV9zdGF0dXMpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3RfZm9yX2FjbCgKKwkJCQkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQkJdTggd2lmaV9zdGF0dXMpCiB7CiAJc3RhdGljIHMzMiB1cCwgZG4sIG0sIG4sIHdhaXRfY291bnQ7CiAJLyogMDogbm8gY2hhbmdlLCArMTogaW5jcmVhc2UgV2lGaSBkdXJhdGlvbiwKQEAgLTIwODIsMjggKzE4ODEsOCBAQAogCX0KIH0KIAotdTggaGFsYnRjODcyM2IxYW50X3BzX3RkbWFfdHlwZV9ieV93aWZpX3Jzc2koczMyIHdpZmlfcnNzaSwgczMyIHByZV93aWZpX3Jzc2ksCi0JCQkJCSAgICAgdTggd2lmaV9yc3NpX3RocmVzaCkKLXsKLQl1OCBwc190ZG1hX3R5cGU9MDsKLQotCWlmICh3aWZpX3Jzc2kgPiBwcmVfd2lmaV9yc3NpKSB7Ci0JCWlmICh3aWZpX3Jzc2kgPiAod2lmaV9yc3NpX3RocmVzaCArIDUpKQotCQkJcHNfdGRtYV90eXBlID0gMjY7Ci0JCWVsc2UKLQkJCXBzX3RkbWFfdHlwZSA9IDI1OwotCX0gZWxzZSAgewotCQlpZiAod2lmaV9yc3NpID4gd2lmaV9yc3NpX3RocmVzaCkKLSAJCQlwc190ZG1hX3R5cGUgPSAyNjsKLSAJCWVsc2UKLSAJCQlwc190ZG1hX3R5cGUgPSAyNTsKLSAJfQotCi0JcmV0dXJuIHBzX3RkbWFfdHlwZTsKLX0KLQotdm9pZCBoYWxidGM4NzIzYjFhbnRfUHNUZG1hQ2hlY2tGb3JQb3dlclNhdmVTdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkJCSAgYm9vbCBuZXdfcHNfc3RhdGUpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfUHNUZG1hQ2hlY2tGb3JQb3dlclNhdmVTdGF0ZSgKKwkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCBib29sIG5ld19wc19zdGF0ZSkKIHsKIAl1OCBscHNfbW9kZSA9IDB4MDsKIApAQCAtMjEyOCw3ICsxOTA3LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfcG93ZXJfc2F2ZV9zdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgICB1OCBwc190eXBlLCB1OCBscHNfdmFsLAogCQkJCSAgICAgIHU4IHJwd21fdmFsKQogewpAQCAtMjE2MiwxMyArMTk0MSwxNSBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfb25seShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKKyNpZiAoQlRfQVVUT19SRVBPUlRfT05MWV84NzIzQl8xQU5UID09IDApCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfb25seShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAloYWxidGM4NzIzYjFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgMCk7CiAJaGFsYnRjODcyM2IxYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgZmFsc2UsIDkpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9tb25pdG9yX2J0X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X21vbml0b3JfYnRfZW5hYmxlX2Rpc2FibGUoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdGF0aWMgYm9vbCBwcmVfYnRfZGlzYWJsZWQgPSBmYWxzZTsKIAlzdGF0aWMgdTMyIGJ0X2Rpc2FibGVfY250ID0gMDsKQEAgLTIyMjQsNiArMjAwNSw3IEBACiAJCX0KIAl9CiB9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIyMzEsNyArMjAxMyw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFNDTyBvbmx5IG9yIFNDTytQQU4oSFMpICovCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fc2NvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9zY28oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMjI4MCw3ICsyMDYyLDcgQEAKIH0KIAogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25faGlkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMjMzMSw3ICsyMTEzLDcgQEAKIH0KIAogLypBMkRQIG9ubHkgLyBQQU4oRURSKSBvbmx5LyBBMkRQK1BBTihIUykgKi8KLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKIAl1MzIgd2lmaV9idzsKQEAgLTIzODAsNyArMjE2Miw3IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fYTJkcF9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2EyZHBfcGFuX2hzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZSwgYnRfaW5mb19leHQ7CiAJdTMyIHdpZmlfYnc7CkBAIC0yNDMwLDcgKzIyMTIsNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9lZHIoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMjQ4MSw3ICsyMjYzLDcgQEAKIAogCiAvKiBQQU4oSFMpIG9ubHkgKi8KLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGU7CiAJdTMyIHdpZmlfYnc7CkBAIC0yNTQ0LDcgKzIzMjYsNyBAQAogfQogCiAvKlBBTihFRFIpK0EyRFAgKi8KLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9wYW5fZWRyX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpX3Jzc2lfc3RhdGUsIGJ0X3Jzc2lfc3RhdGUsIGJ0X2luZm9fZXh0OwogCXUzMiB3aWZpX2J3OwpAQCAtMjU5NSw3ICsyMzc3LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9wYW5fZWRyX2hpZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMjY0NSw3ICsyNDI3LDggQEAKIH0KIAogLyogSElEK0EyRFArUEFOKEVEUikgKi8KLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9oaWRfYTJkcF9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl9oaWRfYTJkcF9wYW5fZWRyKAorCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlLCBidF9pbmZvX2V4dDsKIAl1MzIgd2lmaV9idzsKQEAgLTI2OTUsNyArMjQ3OCw3IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25faGlkX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2hpZF9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZSwgYnRfaW5mb19leHQ7CiAJdTMyIHdpZmlfYnc7CkBAIC0yNzQ4LDEzICsyNTMxLDEzIEBACiAgKglOb24tU29mdHdhcmUgQ29leCBNZWNoYW5pc20gc3RhcnQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2hzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCWhhbGJ0Yzg3MjNiMWFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIHRydWUsIDUpOwogCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIEZPUkNFX0VYRUMsIDIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fYnRfaW5xdWlyeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fYnRfaW5xdWlyeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOwogCWJvb2wgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZSwgYXBfZW5hYmxlID0gZmFsc2U7CkBAIC0yNzkwLDggKzI1NzMsOSBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX2J0X3Njb19oaWRfb25seV9idXN5KHN0cnVjdCBidGNfY29leGlzdCAqIGJ0Y29leGlzdCwKLQkJCQkJCSB1OCB3aWZpX3N0YXR1cykKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fYnRfc2NvX2hpZF9vbmx5X2J1c3koCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCXU4IHdpZmlfc3RhdHVzKQogewogCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CiAJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOwpAQCAtMjgxMCw3ICsyNTk0LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZF9idF9hY2xfYnVzeSgKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9jb25uZWN0ZWRfYnRfYWNsX2J1c3koCiAJCQkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCQl1OCB3aWZpX3N0YXR1cykKIHsKQEAgLTI4NzAsNyArMjY1NCw4IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9ub3RfY29ubmVjdGVkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX25vdF9jb25uZWN0ZWQoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAkvKiBwb3dlciBzYXZlIHN0YXRlICovCiAJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsCkBAIC0yODgxLDcgKzI2NjYsNyBAQAogCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAwKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfbm90X2Nvbm5lY3RlZF9hc3NvX2F1dGhfc2NhbigKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9ub3RfY29ubmVjdGVkX2Fzc29fYXV0aF9zY2FuKAogCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJaGFsYnRjODcyM2IxYW50X3Bvd2VyX3NhdmVfc3RhdGUoYnRjb2V4aXN0LCBCVENfUFNfV0lGSV9OQVRJVkUsCkBAIC0yODkxLDcgKzI2NzYsOCBAQAogCWhhbGJ0Yzg3MjNiMWFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShidGNvZXhpc3QsIE5PUk1BTF9FWEVDLCAxKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfQWN0aW9uV2lmaUNvbm5lY3RlZFNjYW4oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfQWN0aW9uV2lmaUNvbm5lY3RlZFNjYW4oCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdHJ1Y3QgYnRjX2J0X2xpbmtfaW5mbyAqYnRfbGlua19pbmZvID0gJmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOwogCkBAIC0yOTIxLDcgKzI3MDcsNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfYWN0aW9uX3dpZmlfY29ubmVjdGVkX3NwZWNpYWxfcGFja2V0KAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZF9zcGVjaWFsX3BhY2tldCgKIAkJCQkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCWJvb2wgaHNfY29ubmVjdGluZyA9IGZhbHNlOwpAQCAtMjk1MSw3ICsyNzM3LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2FjdGlvbl93aWZpX2Nvbm5lY3RlZChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9hY3Rpb25fd2lmaV9jb25uZWN0ZWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJYm9vbCB3aWZpX2J1c3kgPSBmYWxzZTsKIAlib29sIHNjYW4gPSBmYWxzZSwgbGluayA9IGZhbHNlLCByb2FtID0gZmFsc2U7CkBAIC0zMDMxLDcgKzI4MTcsOCBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfcnVuX3N3X2NvZXhpc3RfbWVjaGFuaXNtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X3J1bl9zd19jb2V4aXN0X21lY2hhbmlzbSgKKwkJCQkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IGFsZ29yaXRobSA9IDA7CiAKQEAgLTMxMDQsNyArMjg5MSw3IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMWFudF9ydW5fY29leGlzdF9tZWNoYW5pc20oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjFhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm8gPSAmYnRjb2V4aXN0LT5idF9saW5rX2luZm87CiAJYm9vbCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlLCBidF9oc19vbiA9IGZhbHNlOwpAQCAtMzIxOCw3ICszMDA1LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X2luaXRfY29leF9kbShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJLyogZm9yY2UgdG8gcmVzZXQgY29leCBtZWNoYW5pc20gKi8KIAloYWxidGM4NzIzYjFhbnRfZndfZGFjX3N3aW5nX2x2bChidGNvZXhpc3QsIEZPUkNFX0VYRUMsIDYpOwpAQCAtMzIzMiw3ICszMDE5LDggQEAKIAloYWxidGM4NzIzYjFhbnRfY29leF90YWJsZV93aXRoX3R5cGUoYnRjb2V4aXN0LCBGT1JDRV9FWEVDLCAwKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjFhbnRfaW5pdF9od19jb25maWcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsIGJvb2wgYmFja3VwKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IxYW50X2luaXRfaHdfY29uZmlnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQlib29sIGJhY2t1cCkKIHsKIAl1MzIgdTMydG1wID0gMDsKIAl1OCB1OHRtcCA9IDA7CkBAIC0zMzA0LDcgKzMwOTIsNyBAQAogCiB9CiAKLXZvaWQgaGFsYnRjODcyM2IxYW50X3dpZmlfb2ZmX2h3X2NmZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMWFudF93aWZpX29mZl9od19jZmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJLyogc2V0IHdsYW5fYWN0IHRvIGxvdyAqLwogCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvaGFsYnRjODcyM2IyYW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4NzIzYjJhbnQuYwppbmRleCBkMzM3YmQwLi5kYTNmNjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4NzIzYjJhbnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9oYWxidGM4NzIzYjJhbnQuYwpAQCAtMjAsMTQgKzIwLDE0IEBACiBzdGF0aWMgc3RydWN0IGNvZXhfc3RhXzg3MjNiXzJhbnQgZ2xjb2V4X3N0YV84NzIzYl8yYW50Owogc3RhdGljIHN0cnVjdCBjb2V4X3N0YV84NzIzYl8yYW50ICpjb2V4X3N0YSA9ICZnbGNvZXhfc3RhXzg3MjNiXzJhbnQ7CiAKLWNvbnN0IGNoYXIgKmNvbnN0IGdsYnRfaW5mb19zcmNfODcyM2JfMmFudFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGdsYnRfaW5mb19zcmNfODcyM2JfMmFudFtdID0gewogCSJCVCBJbmZvW3dpZmkgZnddIiwKIAkiQlQgSW5mb1tidCByc3BdIiwKIAkiQlQgSW5mb1tidCBhdXRvIHJlcG9ydF0iLAogfTsKIAotdTMyIGdsY29leF92ZXJfZGF0ZV84NzIzYl8yYW50ID0gMjAxMzExMTM7Ci11MzIgZ2xjb2V4X3Zlcl84NzIzYl8yYW50ID0gMHgzZjsKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl9kYXRlXzg3MjNiXzJhbnQgPSAyMDEzMTExMzsKK3N0YXRpYyB1MzIgZ2xjb2V4X3Zlcl84NzIzYl8yYW50ID0gMHgzZjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBsb2NhbCBmdW5jdGlvbiBwcm90byB0eXBlIGlmIG5lZWRlZApAQCAtMzUsNyArMzUsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBsb2NhbCBmdW5jdGlvbiBzdGFydCB3aXRoIGhhbGJ0Yzg3MjNiMmFudF8KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXU4IGhhbGJ0Yzg3MjNiMmFudF9idF9yc3NpX3N0YXRlKHU4IGxldmVsX251bSwgdTggcnNzaV90aHJlc2gsIHU4IHJzc2lfdGhyZXNoMSkKK3N0YXRpYyB1OCBoYWxidGM4NzIzYjJhbnRfYnRfcnNzaV9zdGF0ZSh1OCBsZXZlbF9udW0sIHU4IHJzc2lfdGhyZXNoLAorCQkJCQl1OCByc3NpX3RocmVzaDEpCiB7CiAJczMyIGJ0X3Jzc2kgPSAwOwogCXU4IGJ0X3Jzc2lfc3RhdGUgPSBjb2V4X3N0YS0+cHJlX2J0X3Jzc2lfc3RhdGU7CkBAIC0xMzIsNyArMTMzLDcgQEAKIAlyZXR1cm4gYnRfcnNzaV9zdGF0ZTsKIH0KIAotdTggaGFsYnRjODcyM2IyYW50X3dpZmlfcnNzaV9zdGF0ZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB1OCBoYWxidGM4NzIzYjJhbnRfd2lmaV9yc3NpX3N0YXRlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgIHU4IGluZGV4LCB1OCBsZXZlbF9udW0sCiAJCQkJICAgdTggcnNzaV90aHJlc2gsIHU4IHJzc2lfdGhyZXNoMSkKIHsKQEAgLTI0Niw3ICsyNDcsOSBAQAogCXJldHVybiB3aWZpX3Jzc2lfc3RhdGU7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X21vbml0b3JfYnRfZW5hYmxlX2Rpc2FibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCisjaWYgKEJUX0FVVE9fUkVQT1JUX09OTFlfODcyM0JfMkFOVCA9PSAwKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X21vbml0b3JfYnRfZW5hYmxlX2Rpc2FibGUoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdGF0aWMgYm9vbCBwcmVfYnRfZGlzYWJsZWQgPSBmYWxzZTsKIAlzdGF0aWMgdTMyIGJ0X2Rpc2FibGVfY250ID0gMDsKQEAgLTI5OCw4ICszMDEsOSBAQAogCQl9CiAJfQogfQorI2VuZGlmCiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X21vbml0b3JfYnRfY3RyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X21vbml0b3JfYnRfY3RyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXUzMiByZWdfaHBfdHhyeCwgcmVnX2xwX3R4cngsIHUzMnRtcDsKIAl1MzIgcmVnX2hwX3R4ID0gMCwgcmVnX2hwX3J4ID0gMDsKQEAgLTMzMiw3ICszMzYsNyBAQAogCWJ0Y29leGlzdC0+YnRjX3dyaXRlXzFieXRlKGJ0Y29leGlzdCwgMHg3NmUsIDB4Yyk7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3F1ZXJ5X2J0X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfcXVlcnlfYnRfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCBoMmNfcGFyYW1ldGVyWzFdID17MH07CiAKQEAgLTM0Nyw3ICszNTEsOCBAQAogCWJ0Y29leGlzdC0+YnRjX2ZpbGxfaDJjKGJ0Y29leGlzdCwgMHg2MSwgMSwgaDJjX3BhcmFtZXRlcik7CiB9CiAKLWJvb2wgaGFsYnRjODcyM2IyYW50X2lzX3dpZmlfc3RhdHVzX2NoYW5nZWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgYm9vbCBoYWxidGM4NzIzYjJhbnRfaXNfd2lmaV9zdGF0dXNfY2hhbmdlZCgKKwkJCQkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXN0YXRpYyBib29sIHByZV93aWZpX2J1c3kgPSBmYWxzZTsKIAlzdGF0aWMgYm9vbCBwcmVfdW5kZXJfNHdheSA9IGZhbHNlOwpAQCAtMzgyLDcgKzM4Nyw3IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF91cGRhdGVfYnRfbGlua19pbmZvKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3VwZGF0ZV9idF9saW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJLypzdHJ1Y3QgYnRjX3N0YWNrX2luZm8gKnN0YWNrX2luZm8gPSAmYnRjb2V4aXN0LT5zdGFja19pbmZvOyovCiAJc3RydWN0IGJ0Y19idF9saW5rX2luZm8gKmJ0X2xpbmtfaW5mbyA9ICZidGNvZXhpc3QtPmJ0X2xpbmtfaW5mbzsKQEAgLTQ0Niw3ICs0NTEsNyBAQAogCQlidF9saW5rX2luZm8tPmhpZF9vbmx5ID0gZmFsc2U7CiB9CiAKLXU4IGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYWxnb3JpdGhtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHU4IGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYWxnb3JpdGhtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXN0cnVjdCBidGNfYnRfbGlua19pbmZvICpidF9saW5rX2luZm89JmJ0Y29leGlzdC0+YnRfbGlua19pbmZvOwogCWJvb2wgYnRfaHNfb24gPSBmYWxzZTsKQEAgLTYzNCw3ICs2MzksNyBAQAogCXJldHVybiBhbGdvcml0aG07CiB9CiAKLWJvb2wgaGFsYnRjODcyM2IyYW50X25lZWRfdG9fZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyBib29sIGhhbGJ0Yzg3MjNiMmFudF9uZWVkX3RvX2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJYm9vbCBiUmV0ID0gZmFsc2U7CiAJYm9vbCBidF9oc19vbiA9IGZhbHNlLCB3aWZpX2Nvbm5lY3RlZCA9IGZhbHNlOwpAQCAtNjc1LDggKzY4MCw5IEBACiAJcmV0dXJuIGJSZXQ7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9md19kYWNfc3dpbmdfbGV2ZWwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgICB1OCBkYWNfc3dpbmdfbHZsKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9md19kYWNfc3dpbmdfbGV2ZWwoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCXU4IGRhY19zd2luZ19sdmwpCiB7CiAJdTggaDJjX3BhcmFtZXRlclsxXSA9ezB9OwogCkBAIC02OTIsNyArNjk4LDcgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjQsIDEsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfZndfZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfZndfZGVjX2J0X3B3cihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgICAgYm9vbCBkZWNfYnRfcHdyKQogewogCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CkBAIC03MDksOCArNzE1LDggQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjIsIDEsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9kZWNfYnRfcHdyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCWJvb2wgZm9yY2VfZXhlYywgYm9vbCBkZWNfYnRfcHdyKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2RlY19idF9wd3Ioc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCWJvb2wgZm9yY2VfZXhlYywgYm9vbCBkZWNfYnRfcHdyKQogewogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKIAkJICAiW0JUQ29leF0sICVzIERlYyBCVCBwb3dlciA9ICVzXG4iLApAQCAtNzMwLDcgKzczNiw4IEBACiAJY29leF9kbS0+cHJlX2RlY19idF9wd3IgPSBjb2V4X2RtLT5jdXJfZGVjX2J0X3B3cjsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2J0X2F1dG9fcmVwb3J0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorI2lmIChCVF9BVVRPX1JFUE9SVF9PTkxZXzg3MjNCXzJBTlQgPT0gMCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfYnRfYXV0b19yZXBvcnQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJCWJvb2wgZW5hYmxlX2F1dG9fcmVwb3J0KQogewogCXU4IGgyY19wYXJhbWV0ZXJbMV0gPSB7MH07CkBAIC03NDcsNyArNzU0LDcgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjgsIDEsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9idF9hdXRvX3JlcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9idF9hdXRvX3JlcG9ydChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGVuYWJsZV9hdXRvX3JlcG9ydCkKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCkBAIC03NzEsOCArNzc4LDkgQEAKIAogCWNvZXhfZG0tPnByZV9idF9hdXRvX3JlcG9ydCA9IGNvZXhfZG0tPmN1cl9idF9hdXRvX3JlcG9ydDsKIH0KKyNlbmRpZgogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9md19kYWNfc3dpbmdfbHZsKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2Z3X2RhY19zd2luZ19sdmwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgICAgYm9vbCBmb3JjZV9leGVjLCB1OCBmd19kYWNfc3dpbmdfbHZsKQogewogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKQEAgLTc5Nyw4ICs4MDUsOSBAQAogCWNvZXhfZG0tPnByZV9md19kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2Z3X2RhY19zd2luZ19sdmw7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9zd19yZl9yeF9scGZfY29ybmVyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAotCQkJCQkgICAgIGJvb2wgcnhfcmZfc2hyaW5rX29uKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9zd19yZl9yeF9scGZfY29ybmVyKAorCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisJCQkJCQlib29sIHJ4X3JmX3Nocmlua19vbikKIHsKIAlpZiAocnhfcmZfc2hyaW5rX29uKSB7CiAJCS8qIFNocmluayBSRiBSeCBMUEYgY29ybmVyICovCkBAIC04MTksNyArODI4LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3JmX3NocmluayhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9yZl9zaHJpbmsoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIHJ4X3JmX3Nocmlua19vbikKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCkBAIC04NDQsNyArODUzLDcgQEAKIAljb2V4X2RtLT5wcmVfcmZfcnhfbHBmX3NocmluayA9IGNvZXhfZG0tPmN1cl9yZl9yeF9scGZfc2hyaW5rOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfc3dfcGVuYWx0eV90eHJhdGVfYWRhcHRpdmUoCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X3N3X3BlbmFsdHlfdHhyYXRlX2FkYXB0aXZlKAogCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJCQlib29sIGxvd19wZW5hbHR5X3JhKQogewpAQCAtODY4LDcgKzg3Nyw3IEBACiAJYnRjb2V4aXN0LT5idGNfZmlsbF9oMmMoYnRjb2V4aXN0LCAweDY5LCA2LCBoMmNfcGFyYW1ldGVyKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfbG93X3BlbmFsdHlfcmEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfbG93X3BlbmFsdHlfcmEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBsb3dfcGVuYWx0eV9yYSkKIHsKIAkvKnJldHVybjsgKi8KQEAgLTg5Myw3ICs5MDIsNyBAQAogCWNvZXhfZG0tPnByZV9sb3dfcGVuYWx0eV9yYSA9IGNvZXhfZG0tPmN1cl9sb3dfcGVuYWx0eV9yYTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2RhY19zd2luZ19yZWcoc3RydWN0IGJ0Y19jb2V4aXN0ICogYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9kYWNfc3dpbmdfcmVnKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgICAgICB1MzIgbGV2ZWwpCiB7CiAJdTggdmFsID0gKHU4KSBsZXZlbDsKQEAgLTkwMiw5ICs5MTEsMTAgQEAKIAlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZV9iaXRtYXNrKGJ0Y29leGlzdCwgMHg4ODMsIDB4M2UsIHZhbCk7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9zd19mdWxsdGltZV9kYWNfc3dpbmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCi0JCQkJCSAgICAgICBib29sIHN3X2RhY19zd2luZ19vbiwKLQkJCQkJICAgICAgIHUzMiBzd19kYWNfc3dpbmdfbHZsKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9zd19mdWxsdGltZV9kYWNfc3dpbmcoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCWJvb2wgc3dfZGFjX3N3aW5nX29uLAorCQkJCQkJdTMyIHN3X2RhY19zd2luZ19sdmwpCiB7CiAJaWYoc3dfZGFjX3N3aW5nX29uKQogCQloYWxidGM4NzIzYjJhbnRfc2V0X2RhY19zd2luZ19yZWcoYnRjb2V4aXN0LCBzd19kYWNfc3dpbmdfbHZsKTsKQEAgLTkxMyw3ICs5MjMsNyBAQAogfQogCiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X2RhY19zd2luZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9kYWNfc3dpbmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkgICAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGRhY19zd2luZ19vbiwKIAkJCSAgICAgICB1MzIgZGFjX3N3aW5nX2x2bCkKIHsKQEAgLTk0NCw3ICs5NTQsOCBAQAogCWNvZXhfZG0tPnByZV9kYWNfc3dpbmdfbHZsID0gY29leF9kbS0+Y3VyX2RhY19zd2luZ19sdmw7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9hZGNfYmFja29mZihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKyNpZiAwCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2FkY19iYWNrb2ZmKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgICAgYm9vbCBhZGNfYmFja29mZikKIHsKIAlpZiAoYWRjX2JhY2tvZmYpIHsKQEAgLTk1OCw3ICs5NjksNyBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfYWRjX2JhY2tvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWRjX2JhY2tvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBhZGNfYmFja29mZikKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfU1csCkBAIC05NzksOCArOTkwLDkgQEAKIAogCWNvZXhfZG0tPnByZV9hZGNfYmFja19vZmYgPSBjb2V4X2RtLT5jdXJfYWRjX2JhY2tfb2ZmOwogfQorI2VuZGlmCiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9hZ2NfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2FnY190YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgICBib29sIGFnY190YWJsZV9lbikKIHsKIAl1OCByc3NpX2FkanVzdF92YWwgPSAwOwpAQCAtMTA1NCw3ICsxMDY2LDcgQEAKIAkJCSAgICZyc3NpX2FkanVzdF92YWwpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9hZ2NfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWdjX3RhYmxlKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJICAgICAgIGJvb2wgZm9yY2VfZXhlYywgYm9vbCBhZ2NfdGFibGVfZW4pCiB7CiAJQlRDX1BSSU5UKEJUQ19NU0dfQUxHT1JJVEhNLCBBTEdPX1RSQUNFX1NXLApAQCAtMTA3Niw3ICsxMDg4LDcgQEAKIAljb2V4X2RtLT5wcmVfYWdjX3RhYmxlX2VuID0gY29leF9kbS0+Y3VyX2FnY190YWJsZV9lbjsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2NvZXhfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2NvZXhfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgIHUzMiB2YWwweDZjMCwgdTMyIHZhbDB4NmM0LAogCQkJCSAgICB1MzIgdmFsMHg2YzgsIHU4IHZhbDB4NmNjKQogewpAQCAtMTA5Nyw3ICsxMTA5LDcgQEAKIAlidGNvZXhpc3QtPmJ0Y193cml0ZV8xYnl0ZShidGNvZXhpc3QsIDB4NmNjLCB2YWwweDZjYyk7CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X2NvZXhfdGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfY29leF90YWJsZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQlib29sIGZvcmNlX2V4ZWMsIHUzMiB2YWwweDZjMCwKIAkJCQl1MzIgdmFsMHg2YzQsIHUzMiB2YWwweDZjOCwKIAkJCQl1OCB2YWwweDZjYykKQEAgLTExNDEsNyArMTE1Myw3IEBACiAJY29leF9kbS0+cHJlX3ZhbDB4NmNjID0gY29leF9kbS0+Y3VyX3ZhbDB4NmNjOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9jb2V4X3RhYmxlX3dpdGhfdHlwZShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkJICBib29sIGZvcmNlX2V4ZWMsIHU4IHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CkBAIC0xMjAyLDggKzEyMTQsOSBAQAogCX0KIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2Z3X2lnbm9yZV93bGFuX2FjdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKLQkJCQkJICAgIGJvb2wgZW5hYmxlKQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9md19pZ25vcmVfd2xhbl9hY3QoCisJCQkJCQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKKwkJCQkJCWJvb2wgZW5hYmxlKQogewogCXU4IGgyY19wYXJhbWV0ZXJbMV0gPXswfTsKIApAQCAtMTIxNyw3ICsxMjMwLDcgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjMsIDEsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9pZ25vcmVfd2xhbl9hY3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfaWdub3JlX3dsYW5fYWN0KHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgICAgYm9vbCBmb3JjZV9leGVjLCBib29sIGVuYWJsZSkKIHsKIAlCVENfUFJJTlQoQlRDX01TR19BTEdPUklUSE0sIEFMR09fVFJBQ0VfRlcsCkBAIC0xMjQxLDggKzEyNTQsOCBAQAogCWNvZXhfZG0tPnByZV9pZ25vcmVfd2xhbl9hY3QgPSBjb2V4X2RtLT5jdXJfaWdub3JlX3dsYW5fYWN0OwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9zZXRfZndfcHNfdGRtYShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwgdTggYnl0ZTEsCi0JCQkJICAgIHU4IGJ5dGUyLCB1OCBieXRlMywgdTggYnl0ZTQsIHU4IGJ5dGU1KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9md19wc190ZG1hKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJdTggYnl0ZTEsIHU4IGJ5dGUyLCB1OCBieXRlMywgdTggYnl0ZTQsIHU4IGJ5dGU1KQogewogCXU4IGgyY19wYXJhbWV0ZXJbNV0gPXswfTsKIApAQCAtMTI2Nyw3ICsxMjgwLDcgQEAKIAlidGNvZXhpc3QtPmJ0Y19maWxsX2gyYyhidGNvZXhpc3QsIDB4NjAsIDUsIGgyY19wYXJhbWV0ZXIpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20xKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3N3X21lY2hhbmlzbTEoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCiAJCQkJICAgYm9vbCBzaHJpbmtfcnhfbHBmLCBib29sIGxvd19wZW5hbHR5X3JhLAogCQkJCSAgIGJvb2wgbGltaXRlZF9kaWcsIGJvb2wgYnRfbG5hX2NvbnN0cmFpbikKIHsKQEAgLTEyODcsNyArMTMwMCw3IEBACiAJaGFsYnRjODcyM2IyYW50X2xvd19wZW5hbHR5X3JhKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGxvd19wZW5hbHR5X3JhKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9zd19tZWNoYW5pc20yKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAogCQkJCSAgIGJvb2wgYWdjX3RhYmxlX3NoaWZ0LCBib29sIGFkY19iYWNrb2ZmLAogCQkJCSAgIGJvb2wgc3dfZGFjX3N3aW5nLCB1MzIgZGFjX3N3aW5nX2x2bCkKIHsKQEAgLTEyOTcsNyArMTMxMCw3IEBACiAJCQkJICBkYWNfc3dpbmdfbHZsKTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfc2V0X2FudF9wYXRoKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X3NldF9hbnRfcGF0aChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkgIHU4IGFudHBvc190eXBlLCBib29sIGluaXRfaHdjZmcsCiAJCQkJICBib29sIHdpZmlfb2ZmKQogewpAQCAtMTM3Nyw4ICsxMzkwLDkgQEAKIH0KIAogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LCBib29sIGZvcmNlX2V4ZWMsCi0JCQkgICAgIGJvb2wgdHVybl9vbiwgdTggdHlwZSkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0LAorCQkJCQlib29sIGZvcmNlX2V4ZWMsCisJCQkJCWJvb2wgdHVybl9vbiwgdTggdHlwZSkKIHsKIAogCUJUQ19QUklOVChCVENfTVNHX0FMR09SSVRITSwgQUxHT19UUkFDRV9GVywKQEAgLTE1MTQsNyArMTUyOCw3IEBACiAJY29leF9kbS0+cHJlX3BzX3RkbWEgPSBjb2V4X2RtLT5jdXJfcHNfdGRtYTsKIH0KIAotdm9pZCBoYWxidGM4NzIzYjJhbnRfY29leF9hbGxvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfY29leF9hbGxvZmYoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJLyogZncgYWxsIG9mZiAqLwogCWhhbGJ0Yzg3MjNiMmFudF9wc190ZG1hKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIGZhbHNlLCAxKTsKQEAgLTE1MzAsNyArMTU0NCw3IEBACiAJaGFsYnRjODcyM2IyYW50X2NvZXhfdGFibGVfd2l0aF90eXBlKGJ0Y29leGlzdCwgTk9STUFMX0VYRUMsIDApOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9pbml0X2NvZXhfZG0oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfaW5pdF9jb2V4X2RtKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCS8qIGZvcmNlIHRvIHJlc2V0IGNvZXggbWVjaGFuaXNtKi8KIApAQCAtMTU0Miw3ICsxNTU2LDcgQEAKIAloYWxidGM4NzIzYjJhbnRfc3dfbWVjaGFuaXNtMihidGNvZXhpc3QsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDB4MTgpOwogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYnRfaW5xdWlyeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYnRfaW5xdWlyeShzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlib29sIHdpZmlfY29ubmVjdGVkID0gZmFsc2U7CiAJYm9vbCBsb3dfcHdyX2Rpc2FibGUgPSB0cnVlOwpAQCAtMTU3Miw3ICsxNTg2LDcgQEAKIAkJCQkgICAgIGZhbHNlLCBmYWxzZSk7CiB9CiAKLWJvb2wgaGFsYnRjODcyM2IyYW50X2lzX2NvbW1vbl9hY3Rpb24oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgYm9vbCBoYWxidGM4NzIzYjJhbnRfaXNfY29tbW9uX2FjdGlvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlib29sIGJDb21tb24gPSBmYWxzZSwgd2lmaV9jb25uZWN0ZWQgPSBmYWxzZTsKIAlib29sIHdpZmlfYnVzeSA9IGZhbHNlOwpAQCAtMTcxMyw3ICsxNzI3LDggQEAKIAogCXJldHVybiBiQ29tbW9uOwogfQotdm9pZCBoYWxidGM4NzIzYjJhbnRfdGRtYV9kdXJhdGlvbl9hZGp1c3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QsCisKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF90ZG1hX2R1cmF0aW9uX2FkanVzdChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCwKIAkJCQkJICBib29sIHNjb19oaWQsIGJvb2wgdHhfcGF1c2UsCiAJCQkJCSAgdTggbWF4X2ludGVydmFsKQogewpAQCAtMjc3Miw3ICsyNzg3LDcgQEAKIH0KIAogLyogU0NPIG9ubHkgb3IgU0NPK1BBTihIUykgKi8KLXZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9zY28oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX3NjbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpX3Jzc2lfc3RhdGU7CiAJdTMyIHdpZmlfYnc7CkBAIC0yODMwLDggKzI4NDUsNyBAQAogCX0KIH0KIAotCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlLCBidF9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMjg5Myw3ICsyOTA3LDcgQEAKIH0KIAogLypBMkRQIG9ubHkgLyBQQU4oRURSKSBvbmx5LyBBMkRQK1BBTihIUykqLwotdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlLCB3aWZpX3Jzc2lfc3RhdGUxLCBidF9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMjk4MSw3ICsyOTk1LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9hMmRwX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fYTJkcF9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggd2lmaV9yc3NpX3N0YXRlOwogCXUzMiB3aWZpX2J3OwpAQCAtMzAzNCw3ICszMDQ4LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5fZWRyKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKIAl1MzIgd2lmaV9idzsKQEAgLTMwOTEsOSArMzEwNSw4IEBACiAJfQogfQogCi0KIC8qUEFOKEhTKSBvbmx5Ki8KLXZvaWQgaGFsYnRjODcyM2IyYW50X2FjdGlvbl9wYW5faHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX3Bhbl9ocyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAl1OCB3aWZpX3Jzc2lfc3RhdGU7CiAJdTMyIHdpZmlfYnc7CkBAIC0zMTQ2LDcgKzMxNTksNyBAQAogfQogCiAvKlBBTihFRFIpK0EyRFAqLwotdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX3Bhbl9lZHJfYTJkcChzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fcGFuX2Vkcl9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKIAl1MzIgd2lmaV9idzsKQEAgLTMyMTAsNyArMzIyMyw3IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25fcGFuX2Vkcl9oaWQoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX3Bhbl9lZHJfaGlkKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKIAl1MzIgd2lmaV9idzsKQEAgLTMyODIsNyArMzI5NSw4IEBACiB9CiAKIC8qIEhJRCtBMkRQK1BBTihFRFIpICovCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkX2EyZHBfcGFuX2VkcihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkX2EyZHBfcGFuX2VkcigKKwkJCQkJCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKIAl1MzIgd2lmaV9idzsKQEAgLTMzNDYsNyArMzM2MCw3IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9hY3Rpb25faGlkX2EyZHAoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfYWN0aW9uX2hpZF9hMmRwKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXU4IHdpZmlfcnNzaV9zdGF0ZSwgYnRfcnNzaV9zdGF0ZTsKIAl1MzIgd2lmaV9idzsKQEAgLTM0MDQsNyArMzQxOCw4IEBACiAJfQogfQogCi12b2lkIGhhbGJ0Yzg3MjNiMmFudF9ydW5fY29leGlzdF9tZWNoYW5pc20oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfcnVuX2NvZXhpc3RfbWVjaGFuaXNtKAorCQkJCQkJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJdTggYWxnb3JpdGhtID0gMDsKIApAQCAtMzUyNSw3ICszNTQwLDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsYnRjODcyM2IyYW50X3dpZmlvZmZfaHdjZmcoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGM4NzIzYjJhbnRfd2lmaW9mZl9od2NmZyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAkvKiBzZXQgd2xhbl9hY3QgdG8gbG93ICovCiAJYnRjb2V4aXN0LT5idGNfd3JpdGVfMWJ5dGUoYnRjb2V4aXN0LCAweDc2ZSwgMHg0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYnRjb2V4aXN0L2hhbGJ0Y291dHNyYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmMKaW5kZXggYzRlODM3Ny4uMDFmNWE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvaGFsYnRjb3V0c3JjLmMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCUdsb2JhbCB2YXJpYWJsZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWNvbnN0IGNoYXIgKmNvbnN0IGJ0X3Byb2ZpbGVfc3RyaW5nW109eworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ0X3Byb2ZpbGVfc3RyaW5nW10gPSB7CiAJIk5PTkUiLAogCSJBMkRQIiwKIAkiUEFOIiwKQEAgLTMzLDcgKzMzLDcgQEAKIAkiU0NPIiwKIH07CiAKLWNvbnN0IGNoYXIgKmNvbnN0IGJ0X3NwZWNfc3RyaW5nW109eworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ0X3NwZWNfc3RyaW5nW10gPSB7CiAJIjEuMGIiLAogCSIxLjEiLAogCSIxLjIiLApAQCAtNDMsMTkgKzQzLDE5IEBACiAJIjQuMCIsCiB9OwogCi1jb25zdCBjaGFyICpjb25zdCBidF9saW5rX3JvbGVfc3RyaW5nW109eworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ0X2xpbmtfcm9sZV9zdHJpbmdbXSA9IHsKIAkiTWFzdGVyIiwKIAkiU2xhdmUiLAogfTsKIAotY29uc3QgY2hhciAqY29uc3QgaDJjX3N0YXRlX3N0cmluZ1tdPXsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBoMmNfc3RhdGVfc3RyaW5nW10gPSB7CiAJInN1Y2Nlc3NmdWwiLAogCSJoMmMgYnVzeSIsCiAJInJmIG9mZiIsCiAJImZ3IG5vdCByZWFkIiwKIH07CiAKLWNvbnN0IGNoYXIgKmNvbnN0IGlvX3N0YXRlX3N0cmluZ1tdPXsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpb19zdGF0ZV9zdHJpbmdbXSA9IHsKIAkiSU9fU1RBVFVTX1NVQ0NFU1MiLAogCSJJT19TVEFUVVNfRkFJTF9DQU5OT1RfSU8iLAogCSJJT19TVEFUVVNfRkFJTF9SRl9PRkYiLApAQCAtNzIsMTIgKzcyLDEyIEBACiBzdHJ1Y3QgYnRjX2NvZXhpc3QgZ2xfYnRfY29leGlzdDsKIAogdTMyIGJ0Y19kYmdfdHlwZVtCVENfTVNHX01BWF07Ci11OCBidGNfZGJnX2J1ZlsxMDBdOworc3RhdGljIHU4IGJ0Y19kYmdfYnVmWzEwMF07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlEZWJ1ZyByZWxhdGVkIGZ1bmN0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYm9vbCBoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgYm9vbCBoYWxidGNfaXNfYnRfY29leGlzdF9hdmFpbGFibGUoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJaWYgKCFidGNvZXhpc3QtPmJpbmRlZCB8fCBOVUxMID09IGJ0Y29leGlzdC0+YWRhcHRlcikKIAkJcmV0dXJuIGZhbHNlOwpAQCAtODUsNyArODUsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGhhbGJ0Y19pc193aWZpX2J1c3koc3RydWN0IHJ0bF9wcml2ICpydGxwcml2KQorc3RhdGljIGJvb2wgaGFsYnRjX2lzX3dpZmlfYnVzeShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYpCiB7CiAKIAlpZiAocnRscHJpdi0+bGlua19pbmZvLmJfYnVzeXRyYWZmaWMpCkBAIC05NSw3ICs5NSw3IEBACiB9CiAKIAotdm9pZCBoYWxidGNfZGJnX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19kYmdfaW5pdCh2b2lkKQogewogCXU4IGk7CiAKQEAgLTEyMSwxMiArMTIxLDcgQEAKIAkJCTA7CiB9CiAKLWJvb2wgaGFsYnRjX2lzX2h3X21haWxib3hfZXhpc3Qoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgaGFsYnRjX2lzX2J0NDAoc3RydWN0IHJ0bF9wcml2ICphZGFwdGVyKQorc3RhdGljIGJvb2wgaGFsYnRjX2lzX2J0NDAoc3RydWN0IHJ0bF9wcml2ICphZGFwdGVyKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGFkYXB0ZXI7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKQEAgLTE0Miw3ICsxMzcsNyBAQAogCXJldHVybiBpc19odDQwOwogfQogCi1ib29sIGhhbGJ0Y19sZWdhY3koc3RydWN0IHJ0bF9wcml2ICphZGFwdGVyKQorc3RhdGljIGJvb2wgaGFsYnRjX2xlZ2FjeShzdHJ1Y3QgcnRsX3ByaXYgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYWRhcHRlcjsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKQEAgLTE2NSw3ICsxNjAsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiB9CiAKLXUzMiBoYWxidGNfZ2V0X3dpZmlfYncoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdTMyIGhhbGJ0Y19nZXRfd2lmaV9idyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSAKIAkJKHN0cnVjdCBydGxfcHJpdiAqKWJ0Y29leGlzdC0+YWRhcHRlcjsKQEAgLTE4Miw3ICsxNzcsNyBAQAogCXJldHVybiB3aWZpX2J3OwogfQogCi11OCBoYWxidGNfZ2V0X3dpZmlfY2VudHJhbF9jaG5sKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHU4IGhhbGJ0Y19nZXRfd2lmaV9jZW50cmFsX2Nobmwoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOwogCXN0cnVjdCBydGxfcGh5IAkqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtMTk2LDcgKzE5MSw3IEBACiAJcmV0dXJuIGNobmw7CiB9CiAKLXZvaWQgaGFsYnRjX2xlYXZlX2xwcyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19sZWF2ZV9scHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2OwogCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjOwpAQCAtMjE3LDcgKzIxMiw3IEBACiAJYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2xwc19vbiA9IGZhbHNlOwogfQogCi12b2lkIGhhbGJ0Y19lbnRlcl9scHMoc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGNfZW50ZXJfbHBzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdjsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYzsKQEAgLTIzOCw3ICsyMzMsNyBAQAogCWJ0Y29leGlzdC0+YnRfaW5mby5idF9scHNfb24gPSBmYWxzZTsKIH0KIAotdm9pZCBoYWxidGNfbm9ybWFsX2xwcyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19ub3JtYWxfbHBzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCWlmIChidGNvZXhpc3QtPmJ0X2luZm8uYnRfY3RybF9scHMpIHsKIAkJYnRjb2V4aXN0LT5idF9pbmZvLmJ0X2xwc19vbiA9IGZhbHNlOwpAQCAtMjQ3LDI5ICsyNDIsMjkgQEAKIAkJCiB9CiAKLXZvaWQgaGFsYnRjX2xlYXZlX2xvd19wb3dlcih2b2lkKQorc3RhdGljIHZvaWQgaGFsYnRjX2xlYXZlX2xvd19wb3dlcih2b2lkKQogewogfQogCi12b2lkIGhhbGJ0Y19ub21hbF9sb3dfcG93ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19ub21hbF9sb3dfcG93ZXIodm9pZCkKIHsKIH0KIAotdm9pZCBoYWxidGNfZGlzYWJsZV9sb3dfcG93ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19kaXNhYmxlX2xvd19wb3dlcih2b2lkKQogewogfQogCi12b2lkIGhhbGJ0Y19hZ2dyZWdhdGlvbl9jaGVjayh2b2lkKQorc3RhdGljIHZvaWQgaGFsYnRjX2FnZ3JlZ2F0aW9uX2NoZWNrKHZvaWQpCiB7CiB9CiAKIAotdTMyIGhhbGJ0Y19nZXRfYnRfcGF0Y2hfdmVyc2lvbihzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB1MzIgaGFsYnRjX2dldF9idF9wYXRjaF92ZXJzaW9uKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogCXJldHVybiAwOwogfQogCi1zMzIgaGFsYnRjX2dldF93aWZpX3Jzc2koc3RydWN0IHJ0bF9wcml2ICphZGFwdGVyKQorc3RhdGljIHMzMiBoYWxidGNfZ2V0X3dpZmlfcnNzaShzdHJ1Y3QgcnRsX3ByaXYgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYWRhcHRlcjsKIAlzMzIJdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA9IDA7CkBAIC0yODMsNyArMjc4LDcgQEAKIAlyZXR1cm4gdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKIH0KIAotYm9vbCBoYWxidGNfZ2V0KHZvaWQgKnZvaWRfYnRjb2V4aXN0LCB1OCBnZXRfdHlwZSwgdm9pZCAqb3V0X2J1ZikKK3N0YXRpYyBib29sIGhhbGJ0Y19nZXQodm9pZCAqdm9pZF9idGNvZXhpc3QsIHU4IGdldF90eXBlLCB2b2lkICpvdXRfYnVmKQogewogCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKXZvaWRfYnRjb2V4aXN0OwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKQEAgLTQyMiw3ICs0MTcsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGhhbGJ0Y19zZXQodm9pZCAqdm9pZF9idGNvZXhpc3QsIHU4IHNldF90eXBlLCB2b2lkICppbl9idWYpCitzdGF0aWMgYm9vbCBoYWxidGNfc2V0KHZvaWQgKnZvaWRfYnRjb2V4aXN0LCB1OCBzZXRfdHlwZSwgdm9pZCAqaW5fYnVmKQogewogCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKXZvaWRfYnRjb2V4aXN0OwogCWJvb2wgKmJvb2xfdG1wID0gKGJvb2wgKilpbl9idWY7CkBAIC01MTYsMjYgKzUxMSwyNiBAQAogCXJldHVybiB0cnVlOwogfQogCi12b2lkIGhhbGJ0Y19kaXNwbGF5X2NvZXhfc3RhdGlzdGljcyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19kaXNwbGF5X2NvZXhfc3RhdGlzdGljcyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKIHsKIH0KIAotdm9pZCBoYWxidGNfZGlzcGxheV9idF9saW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCitzdGF0aWMgdm9pZCBoYWxidGNfZGlzcGxheV9idF9saW5rX2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiB9CiAKLXZvaWQgaGFsYnRjX2Rpc3BsYXlfYnRfZndfaW5mbyhzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCkKK3N0YXRpYyB2b2lkIGhhbGJ0Y19kaXNwbGF5X2J0X2Z3X2luZm8oc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QpCiB7CiB9CiAKLXZvaWQgaGFsYnRjX2Rpc3BsYXlfZndfcHdyX21vZGVfY21kKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQorc3RhdGljIHZvaWQgaGFsYnRjX2Rpc3BsYXlfZndfcHdyX21vZGVfY21kKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQogewogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJSU8gcmVsYXRlZCBmdW5jdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXU4IGhhbGJ0Y19yZWFkXzFieXRlKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkcikKK3N0YXRpYyB1OCBoYWxidGNfcmVhZF8xYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIpCiB7CiAJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CkBAIC01NDQsNyArNTM5LDcgQEAKIH0KIAogCi11MTYgaGFsYnRjX3JlYWRfMmJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyKQorc3RhdGljIHUxNiBoYWxidGNfcmVhZF8yYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIpCiB7CiAJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CkBAIC01NTMsNyArNTQ4LDcgQEAKIH0KIAogCi11MzIgaGFsYnRjX3JlYWRfNGJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyKQorc3RhdGljIHUzMiBoYWxidGNfcmVhZF80Ynl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIpCiB7CiAJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7CkBAIC01NjIsNyArNTU3LDcgQEAKIH0KIAogCi12b2lkIGhhbGJ0Y193cml0ZV8xYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHU4IGRhdGEpCitzdGF0aWMgdm9pZCBoYWxidGNfd3JpdGVfMWJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyLCB1OCBkYXRhKQogewogCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKWJ0X2NvbnRleHQ7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOwpAQCAtNTcwLDcgKzU2NSw3IEBACiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcmVnX2FkZHIsIGRhdGEpOwogfQogCi12b2lkIGhhbGJ0Y19iaXRtYXNrX3dyaXRlXzFieXRlKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwgCitzdGF0aWMgdm9pZCBoYWxidGNfYml0bWFza193cml0ZV8xYnl0ZSh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsCiAJCQkJdTggYml0X21hc2ssIHU4IGRhdGEpCiB7CiAJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKQEAgLTU5Miw3ICs1ODcsNyBAQAogfQogCiAKLXZvaWQgaGFsYnRjX3dyaXRlXzJieXRlKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwgdTE2IGRhdGEpCitzdGF0aWMgdm9pZCBoYWxidGNfd3JpdGVfMmJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyLCB1MTYgZGF0YSkKIHsKIAlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKQEAgLTYwMSw3ICs1OTYsNyBAQAogfQogCiAKLXZvaWQgaGFsYnRjX3dyaXRlXzRieXRlKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBoYWxidGNfd3JpdGVfNGJ5dGUodm9pZCAqYnRfY29udGV4dCwgdTMyIHJlZ19hZGRyLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IAogCQkoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKQEAgLTYxMCw4ICs2MDUsOCBAQAogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCByZWdfYWRkciwgZGF0YSk7CiB9CiAKLQotdm9pZCBoYWxidGNfc2V0X21hY3JlZyh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHUzMiBiaXRfbWFzaywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBoYWxidGNfc2V0X2JicmVnKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwKKwkJCQl1MzIgYml0X21hc2ssIHUzMiBkYXRhKQogewogCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKWJ0X2NvbnRleHQ7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOwpAQCAtNjIwLDI1ICs2MTUsNyBAQAogfQogCiAKLXUzMiBoYWxidGNfZ2V0X21hY3JlZyh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHUzMiBiaXRfbWFzaykKLXsKLQlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OwotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKLQotCXJldHVybiBydGxfZ2V0X2JicmVnKHJ0bHByaXYtPm1hYzgwMjExLmh3LCByZWdfYWRkciwgYml0X21hc2spOwotfQotCi0KLXZvaWQgaGFsYnRjX3NldF9iYnJlZyh2b2lkICpidF9jb250ZXh0LCB1MzIgcmVnX2FkZHIsIHUzMiBiaXRfbWFzaywgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPSAoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBidGNvZXhpc3QtPmFkYXB0ZXI7Ci0KLQlydGxfc2V0X2JicmVnKHJ0bHByaXYtPm1hYzgwMjExLmh3LCByZWdfYWRkciwgYml0X21hc2ssIGRhdGEpOwotfQotCi0KLXUzMiBoYWxidGNfZ2V0X2JicmVnKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwgdTMyIGJpdF9tYXNrKQorc3RhdGljIHUzMiBoYWxidGNfZ2V0X2JicmVnKHZvaWQgKmJ0X2NvbnRleHQsIHUzMiByZWdfYWRkciwgdTMyIGJpdF9tYXNrKQogewogCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKWJ0X2NvbnRleHQ7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOwpAQCAtNjQ3LDcgKzYyNCw3IEBACiB9CiAKIAotdm9pZCBoYWxidGNfc2V0X3JmcmVnKHZvaWQgKmJ0X2NvbnRleHQsIHU4IHJmX3BhdGgsIHUzMiByZWdfYWRkciwgCitzdGF0aWMgdm9pZCBoYWxidGNfc2V0X3JmcmVnKHZvaWQgKmJ0X2NvbnRleHQsIHU4IHJmX3BhdGgsIHUzMiByZWdfYWRkciwKIAkJICAgICAgdTMyIGJpdF9tYXNrLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OwpAQCAtNjU3LDcgKzYzNCw4IEBACiB9CiAKIAotdTMyIGhhbGJ0Y19nZXRfcmZyZWcodm9pZCAqYnRfY29udGV4dCwgdTggcmZfcGF0aCwgdTMyIHJlZ19hZGRyLCB1MzIgYml0X21hc2spCitzdGF0aWMgdTMyIGhhbGJ0Y19nZXRfcmZyZWcodm9pZCAqYnRfY29udGV4dCwgdTggcmZfcGF0aCwKKwkJCXUzMiByZWdfYWRkciwgdTMyIGJpdF9tYXNrKQogewogCXN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0ID0gKHN0cnVjdCBidGNfY29leGlzdCAqKWJ0X2NvbnRleHQ7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gYnRjb2V4aXN0LT5hZGFwdGVyOwpAQCAtNjY2LDcgKzY0NCw3IEBACiB9CiAKIAotdm9pZCBoYWxidGNfZmlsbF9oMmNfY21kKHZvaWQgKmJ0X2NvbnRleHQsIHU4IGVsZW1lbnRfaWQsIAorc3RhdGljIHZvaWQgaGFsYnRjX2ZpbGxfaDJjX2NtZCh2b2lkICpidF9jb250ZXh0LCB1OCBlbGVtZW50X2lkLAogCQkJIHUzMiBjbWRfbGVuLCB1OCAqY21kX2J1ZikKIHsKIAlzdHJ1Y3QgYnRjX2NvZXhpc3QgKmJ0Y29leGlzdCA9IChzdHJ1Y3QgYnRjX2NvZXhpc3QgKilidF9jb250ZXh0OwpAQCAtNjc2LDcgKzY1NCw3IEBACiAJCQkJCWNtZF9sZW4sIGNtZF9idWYpOwogfQogCi12b2lkIGhhbGJ0Y19kaXNwbGF5X2RiZ19tc2codm9pZCAqYnRfY29udGV4dCwgdTggZGlzcF90eXBlKQorc3RhdGljIHZvaWQgaGFsYnRjX2Rpc3BsYXlfZGJnX21zZyh2b2lkICpidF9jb250ZXh0LCB1OCBkaXNwX3R5cGUpCiB7CiAJc3RydWN0IGJ0Y19jb2V4aXN0ICpidGNvZXhpc3QgPQkoc3RydWN0IGJ0Y19jb2V4aXN0ICopYnRfY29udGV4dDsKIAlzd2l0Y2ggKGRpc3BfdHlwZSkgewpAQCAtNjk3LDI1ICs2NzUsNiBAQAogCX0KIH0KIAotYm9vbCBoYWxidGNfdW5kZXJfaXBzKHN0cnVjdCBidGNfY29leGlzdCAqYnRjb2V4aXN0KQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IGJ0Y29leGlzdC0+YWRhcHRlcjsKLQlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRscHJpdik7Ci0JZW51bSByZl9wd3JzdGF0ZSBydHN0YXRlOwotCQotCWlmIChwcHNjLT5iX2luYWN0aXZlcHMpIHsKLQkJcnRzdGF0ZSA9IHBwc2MtPnJmcHdyX3N0YXRlOwotCi0JCWlmIChydHN0YXRlICE9IEVSRk9OICYmCi0JCSAgICBwcHNjLT5yZm9mZl9yZWFzb24gPT0gUkZfQ0hBTkdFX0JZX0lQUykgewotCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgIEV4dGVybiBmdW5jdGlvbnMgY2FsbGVkIGJ5IG90aGVyIG1vZHVsZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvcnRsX2J0Yy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9idGNvZXhpc3QvcnRsX2J0Yy5jCmluZGV4IDY2NTNmMTQuLjZiZTBhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvYnRjb2V4aXN0L3J0bF9idGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2J0Y29leGlzdC9ydGxfYnRjLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJydGxfYnRjLmgiCiAjaW5jbHVkZSAiaGFsYnRfcHJlY29tcC5oIgogCi1zdHJ1Y3QgcnRsX2J0Y19vcHMgcnRsX2J0Y19vcGVyYXRpb24gPXsKK3N0YXRpYyBzdHJ1Y3QgcnRsX2J0Y19vcHMgcnRsX2J0Y19vcGVyYXRpb24gPSB7CiAJLmJ0Y19pbml0X3ZhcmlhYmxlcyA9IHJ0bF9idGNfaW5pdF92YXJpYWJsZXMsCiAJLmJ0Y19pbml0X2hhbF92YXJzID0gcnRsX2J0Y19pbml0X2hhbF92YXJzLAogCS5idGNfaW5pdF9od19jb25maWcgPSBydGxfYnRjX2luaXRfaHdfY29uZmlnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9jYW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvY2FtLmMKaW5kZXggNzI3NDNlNy4uM2JjNmIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9jYW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2NhbS5jCkBAIC0yOCw5ICsyOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAid2lmaS5oIgogI2luY2x1ZGUgImNhbS5oIgotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywyLDApKQogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2VuZGlmCiAKIHZvaWQgcnRsX2NhbV9yZXNldF9zZWNfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvY29tcGF0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2NvbXBhdC5oCmluZGV4IDY4MjY5Y2MuLmZmYjVmOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvY29tcGF0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9jb21wYXQuaApAQCAtMSw2NSArMSw4IEBACiAjaWZuZGVmIF9fUlRMX0NPTVBBVF9IX18KICNkZWZpbmUgX19SVExfQ09NUEFUX0hfXwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyOSkpCi0vKgotICogVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzYW1lIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MgZm9yIHN1c3BlbmQKLSAqIHRvIFJBTSBhbmQgaGliZXJuYXRpb24uCi0gKi8KLSNkZWZpbmUgU0lNUExFX0RFVl9QTV9PUFMobmFtZSwgc3VzcGVuZF9mbiwgcmVzdW1lX2ZuKSBcCi1zdHJ1Y3QgZGV2X3BtX29wcyBuYW1lID0geyBcCi0JLnN1c3BlbmQgPSBzdXNwZW5kX2ZuLCBcCi0JLnJlc3VtZSA9IHJlc3VtZV9mbiwgXAotCS5mcmVlemUgPSBzdXNwZW5kX2ZuLCBcCi0JLnRoYXcgPSByZXN1bWVfZm4sIFwKLQkucG93ZXJvZmYgPSBzdXNwZW5kX2ZuLCBcCi0JLnJlc3RvcmUgPSByZXN1bWVfZm4sIFwKLX0KLQotI2RlZmluZSBjb21wYXRfcGNpX3N1c3BlbmQoZm4pCQkJCQkJXAotCWludCBmbiMjX2NvbXBhdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKSAJXAotCXsJCQkJCQkJCVwKLQkJaW50IHI7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJciA9IGZuKCZwZGV2LT5kZXYpOwkJCQkJXAotCQlpZiAocikJCQkJCQkJXAotCQkJcmV0dXJuIHI7CQkJCQlcCi0JCQkJCQkJCQlcCi0JCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwkJCQkJXAotCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CQkJCVwKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwkJCVwKLQkJCQkJCQkJCVwKLQkJcmV0dXJuIDA7CQkJCQkJXAotCX0KLQotI2RlZmluZSBjb21wYXRfcGNpX3Jlc3VtZShmbikJCQkJCQlcCi0JaW50IGZuIyNfY29tcGF0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQkJCQlcCi0JewkJCQkJCQkJXAotCQlpbnQgcjsJCQkJCQkJXAotCQkJCQkJCQkJXAotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CQkJXAotCQlyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CQkJCVwKLQkJaWYgKHIpCQkJCQkJCVwKLQkJCXJldHVybiByOwkJCQkJXAotCQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsJCQkJXAotCQkJCQkJCQkJXAotCQlyZXR1cm4gZm4oJnBkZXYtPmRldik7CQkJCQlcCi0JfQotI2VuZGlmCi0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDM5KSkKLSNkZWZpbmUgUlhfRkxBR19NQUNUSU1FX01QRFUgUlhfRkxBR19UU0ZUCi0jZWxzZQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMyw4LDApKQogI2RlZmluZSBSWF9GTEFHX01BQ1RJTUVfTVBEVSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQKLSNlbHNlCi0jZW5kaWYKLS8vI2RlZmluZSBORVRERVZfVFhfT0sKLSNlbmRpZgotCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDcsMCkpCiAjZGVmaW5lIElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UIElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UX1RYCi0jZW5kaWYKIAogc3RydWN0IGllZWU4MDIxMV9tZ210X2NvbXBhdCB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvY29yZS5jCmluZGV4IGZmMzEzOWIuLjlhMzc0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvY29yZS5jCkBAIC04OCw0MiArODgsOSBAQAogCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CiB9CiAKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDM5KSkKLXN0YXRpYyBpbnQgcnRsX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOwotCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOwotCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7Ci0JbWVtc2V0KCZ0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKLQotCWlmICh1bmxpa2VseShpc19oYWxfc3RvcChydGxoYWwpIHx8IHBwc2MtPnJmcHdyX3N0YXRlICE9IEVSRk9OKSkKLQkJZ290byBlcnJfZnJlZTsKLQotCWlmICghdGVzdF9iaXQoUlRMX1NUQVRVU19JTlRFUkZBQ0VfU1RBUlQsICZydGxwcml2LT5zdGF0dXMpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JaWYgKCFydGxwcml2LT5pbnRmX29wcy0+d2FpdHFfaW5zZXJ0KGh3LCBza2IpKQotCQlydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl90eChodywgc2tiLCAmdGNiX2Rlc2MpOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLQotZXJyX2ZyZWU6Ci0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotI2Vsc2UKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotc3RhdGljIHZvaWQgcnRsX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotI2Vsc2UKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiBzdGF0aWMgdm9pZCBydGxfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCwKIAkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKQEAgLTEzNywyNiArMTA0LDE0IEBACiAJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotCWlmICghcnRscHJpdi0+aW50Zl9vcHMtPndhaXRxX2luc2VydChodywgc2tiKSkKLQkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIHNrYiwgJnRjYl9kZXNjKTsKLSNlbHNlCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCWlmICghcnRscHJpdi0+aW50Zl9vcHMtPndhaXRxX2luc2VydChodywgY29udHJvbC0+c3RhLCBza2IpKQogCSAgICAgICAgcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIGNvbnRyb2wtPnN0YSwgc2tiLCAmdGNiX2Rlc2MpOwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCXJldHVybjsKIAogZXJyX2ZyZWU6CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm47CiB9Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAKIHN0YXRpYyBpbnQgcnRsX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCkBAIC0xNzEsMjYgKzEyNiwxNSBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0vKlRoaXMgZmxhZyBpcyBub3QgZGVmaW5lZCBiZWZvcmUga2VybmVsIDMuNCovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDQsMCkpCiAJdmlmLT5kcml2ZXJfZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9CRUFDT05fRklMVEVSOwotI2VuZGlmCiAKIAlydGxfaXBzX25pY19vbihodyk7CiAKIAltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwzNykpCiAJc3dpdGNoIChpZWVlODAyMTFfdmlmX3R5cGVfcDJwKHZpZikpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CiAJCW1hYy0+cDJwID0gUDJQX1JPTEVfQ0xJRU5UOwogCQkvKmZhbGwgdGhyb3VnaCovCi0jZWxzZQotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KLQlzd2l0Y2ggKHZpZi0+dHlwZSkgewotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWYgKG1hYy0+YmVhY29uX2VuYWJsZWQgPT0gMSkgewogCQkJUlRfVFJBQ0UoQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCkBAIC0yMTQsMTMgKzE1OCw5IEBACiAJCQkJKHU4ICopICgmbWFjLT5iYXNpY19yYXRlcykpOwogCiAJCWJyZWFrOwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDM3KSkKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKIAkJbWFjLT5wMnAgPSBQMlBfUk9MRV9HTzsKIAkJLypmYWxsIHRocm91Z2gqLwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCVJUX1RSQUNFKENPTVBfTUFDODAyMTEsIERCR19MT1VELAogCQkJICgiTkw4MDIxMV9JRlRZUEVfQVAgXG4iKSk7CkBAIC0zMTAsOSArMjUwLDcgQEAKIAogCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CiB9Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMzcpKQotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KKwogc3RhdGljIGludCBydGxfb3BfY2hhbmdlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgIGVudW0gbmw4MDIxMV9pZnR5cGUgbmV3X3R5cGUsIGJvb2wgcDJwKQpAQCAtMzI4LDkgKzI2Niw3IEBACiAJCSAoIiBwMnAgICV4XG4iLHAycCkpOwogCXJldHVybiByZXQ7CiB9Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCisKIHN0YXRpYyBpbnQgcnRsX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMzk4LDE0ICszMzQsOSBAQAogCX0KIAogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMTAsMCkpCiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbjsKIAkJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPQogCQkJCWNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoJihody0+Y29uZi5jaGFuZGVmKSk7Ci0jZWxzZQotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsOwotCQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSA9IGh3LT5jb25mLmNoYW5uZWxfdHlwZTsKLSNlbmRpZgogCQl1OCB3aWRlX2NoYW4gPSAodTgpIGNoYW5uZWwtPmh3X3ZhbHVlOwogCiAJCWlmIChtYWMtPmFjdF9zY2FubmluZykKQEAgLTY2MSwxNCArNTkyLDkgQEAKICAqZm9yIG1hYzgwMjExIFZPPTAsIFZJPTEsIEJFPTIsIEJLPTMKICAqZm9yIHJ0bDgxOXggIEJFPTAsIEJLPTEsIFZJPTIsIFZPPTMKICAqLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywyLDApKQogc3RhdGljIGludCBydGxfb3BfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTE2IHF1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW0pCi0jZWxzZQotc3RhdGljIGludCBydGxfb3BfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAotCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW0pCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKQEAgLTk2NCwxMSArODkwLDcgQEAKIAltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDIsMCkpCiBzdGF0aWMgdTY0IHJ0bF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotI2Vsc2UKLXN0YXRpYyB1NjQgcnRsX29wX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJdTY0IHRzZjsKQEAgLTk3NywxMiArODk5LDggQEAKIAlyZXR1cm4gdHNmOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDIsMCkpCiBzdGF0aWMgdm9pZCBydGxfb3Bfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU2NCB0c2YpCi0jZWxzZQotc3RhdGljIHZvaWQgcnRsX29wX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKQEAgLTk5MiwxMSArOTEwLDcgQEAKIAlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0NPUlJFQ1RfVFNGLCAodTggKikgKCZiaWJzcykpOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDIsMCkpCiBzdGF0aWMgdm9pZCBydGxfb3BfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotI2Vsc2UKLXN0YXRpYyB2b2lkIHJ0bF9vcF9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJdTggdG1wID0gMDsKQEAgLTEwMjMsMTMgKzkzNyw3IEBACiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICogc3NuCi0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMzkpKQotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAkJCSAgICAgICAsdTggYnVmX3NpemUKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAkJCSAgICAgICApCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMTA0MCwxMyArOTQ4LDkgQEAKIAkJCSAoIklFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDogVElEOiVkXG4iLCB0aWQpKTsKIAkJcmV0dXJuIHJ0bF90eF9hZ2dfc3RhcnQoaHcsIHZpZiwgc3RhLCB0aWQsIHNzbik7CiAJCWJyZWFrOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMyw5LDApKQogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1BfQ09OVDoKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIOgogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1BfRkxVU0hfQ09OVDoKLSNlbHNlCi0JY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKLSNlbmRpZgogCQlSVF9UUkFDRShDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDogVElEOiVkXG4iLCB0aWQpKTsKIAkJcmV0dXJuIHJ0bF90eF9hZ2dfc3RvcChodywgdmlmLCBzdGEsIHRpZCk7CkBAIC0xMTc0LDkgKzEwNzgsNiBAQAogCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOwogCS8qIDwxPiBnZXQgZW5jcnlwdGlvbiBhbGcgKi8KIAotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDM3KSkKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJc3dpdGNoIChrZXktPmNpcGhlcikgewogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CiAJCWtleV90eXBlID0gV0VQNDBfRU5DUllQVElPTjsKQEAgLTEyMDksNDMgKzExMTAsNiBAQAogCQkJICgiYWxnX2VycjoleCEhISE6XG4iLCBrZXktPmNpcGhlcikpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2Vsc2UKLQlzd2l0Y2ggKGtleS0+YWxnKSB7Ci0JY2FzZSBBTEdfV0VQOgotCQlpZiAoa2V5LT5rZXlsZW4gPT0gV0xBTl9LRVlfTEVOX1dFUDQwKSB7Ci0JCQlrZXlfdHlwZSA9IFdFUDQwX0VOQ1JZUFRJT047Ci0JCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpXRVA0MFxuIikpOwotCQl9IGVsc2UgewotCQkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19ETUVTRywKLQkJCQkgKCJhbGc6V0VQMTA0XG4iKSk7Ci0JCQlrZXlfdHlwZSA9IFdFUDEwNF9FTkNSWVBUSU9OOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQUxHX1RLSVA6Ci0JCWtleV90eXBlID0gVEtJUF9FTkNSWVBUSU9OOwotCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpUS0lQXG4iKSk7Ci0JCWJyZWFrOwotCWNhc2UgQUxHX0NDTVA6Ci0JCWtleV90eXBlID0gQUVTQ0NNUF9FTkNSWVBUSU9OOwotCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpDQ01QXG4iKSk7Ci0JCWJyZWFrOwotCWNhc2UgQUxHX0FFU19DTUFDOgotCQkvKkhXIGRvbid0IHN1cHBvcnQgQ01BQyBlbmNyeXB0aW9uLCB1c2Ugc29mdHdhcmUgQ01BQyBlbmNyeXB0aW9uICovCi0JCWtleV90eXBlID0gQUVTQ01BQ19FTkNSWVBUSU9OOwotCQlSVF9UUkFDRShDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpDTUFDXG4iKSk7Ci0JCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfRE1FU0csCi0JCQkgKCJIVyBkb24ndCBzdXBwb3J0IENNQUMgZW5jcnlwdGlvbiwgIgotCQkJICAidXNlIHNvZnR3YXJlIENNQUMgZW5jcnlwdGlvblxuIikpOwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXRfdW5sb2NrOwotCWRlZmF1bHQ6Ci0JCVJUX1RSQUNFKENPTVBfRVJSLCBEQkdfRU1FUkcsCi0JCQkgKCJhbGdfZXJyOiV4ISEhITpcbiIsIGtleS0+YWxnKSk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJaWYoa2V5X3R5cGUgPT0gV0VQNDBfRU5DUllQVElPTiB8fAogCQkJa2V5X3R5cGUgPT0gV0VQMTA0X0VOQ1JZUFRJT04gfHwKIAkJCXZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKQEAgLTE0MTQsNyArMTI3OCw2IEBACiAgKiBiZWZvcmUgc3dpdGNoIGNoYW5uZWwgb3IgcG93ZXIgc2F2ZSwgb3IgdHggYnVmZmVyIHBhY2tldAogICogbWF5YmUgc2VuZCBhZnRlciBvZmZjaGFubmVsIG9yIHJmIHNsZWVwLCB0aGlzIG1heSBjYXVzZQogICogZGlzLWFzc29jaWF0aW9uIGJ5IEFQICovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDEwLDApKQogc3RhdGljIHZvaWQgcnRsX29wX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcXVldWVzLCBib29sIGRyb3ApCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMTQyMiwxNSArMTI4NSw2IEBACiAJaWYgKHJ0bHByaXYtPmludGZfb3BzLT5mbHVzaCkKIAkJcnRscHJpdi0+aW50Zl9vcHMtPmZsdXNoKGh3LCBxdWV1ZXMsIGRyb3ApOwogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHJ0bF9vcF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQotCWlmIChydGxwcml2LT5pbnRmX29wcy0+Zmx1c2gpCi0JCXJ0bHByaXYtPmludGZfb3BzLT5mbHVzaChodywgZHJvcCk7Ci19Ci0jZW5kaWYKIAogY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsX29wcyA9IHsKIAkuc3RhcnQgPSBydGxfb3Bfc3RhcnQsCkBAIC0xNDM4LDEzICsxMjkyLDcgQEAKIAkudHggPSBydGxfb3BfdHgsCiAJLmFkZF9pbnRlcmZhY2UgPSBydGxfb3BfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZSA9IHJ0bF9vcF9yZW1vdmVfaW50ZXJmYWNlLAotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDM3KSkKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJLmNoYW5nZV9pbnRlcmZhY2UgPSBydGxfb3BfY2hhbmdlX2ludGVyZmFjZSwKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAkuY29uZmlnID0gcnRsX29wX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciA9IHJ0bF9vcF9jb25maWd1cmVfZmlsdGVyLAogCS5zZXRfa2V5ID0gcnRsX29wX3NldF9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2RlYnVnLmMKaW5kZXggOGE2Yzc5NC4uOGFlZmJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvZGVidWcuYwpAQCAtMzAsMTIgKzMwLDcgQEAKICNpbmNsdWRlICJ3aWZpLmgiCiAjaW5jbHVkZSAiY2FtLmgiCiAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMTAsMCkpCiAjZGVmaW5lIEdFVF9JTk9ERV9EQVRBKF9fbm9kZSkJCVBERV9EQVRBKF9fbm9kZSkKLSNlbHNlCi0jZGVmaW5lIEdFVF9JTk9ERV9EQVRBKF9fbm9kZSkJCVBERShfX25vZGUpLT5kYXRhCi0jZW5kaWYKLQogCiB2b2lkIHJ0bF9kYmdwX2ZsYWdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvZWZ1c2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvZWZ1c2UuYwppbmRleCAyNTBhYWUxLi4yMDYwMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL2VmdXNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9lZnVzZS5jCkBAIC0yOSw5ICsyOSw3IEBACiAjaW5jbHVkZSAid2lmaS5oIgogI2luY2x1ZGUgImVmdXNlLmgiCiAjaW5jbHVkZSAiYnRjb2V4aXN0L2hhbGJ0X3ByZWNvbXAuaCIKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMiwwKSkKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNlbmRpZgogCiBzdGF0aWMgY29uc3QgdTggTUFYX1BHUEtUX1NJWkUgPSA5Owogc3RhdGljIGNvbnN0IHU4IFBHUEtUX0RBVEFfU0laRSA9IDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9wY2kuYwppbmRleCBhNTYyYWE2Li5lMTk0ZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcGNpLmMKQEAgLTMzLDkgKzMzLDcgQEAKICNpbmNsdWRlICJiYXNlLmgiCiAjaW5jbHVkZSAicHMuaCIKICNpbmNsdWRlICJlZnVzZS5oIgotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywyLDApKQogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2VuZGlmCiAKIHN0YXRpYyBjb25zdCB1MTYgcGNpYnJpZGdlX3ZlbmRvcnNbUENJX0JSSURHRV9WRU5ET1JfTUFYXSA9IHsKIAlJTlRFTF9WRU5ET1JfSUQsCkBAIC0zNjQsNDcgKzM2Miw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMzUpKQotc3RhdGljIHU4IF9ydGxfcGNpX2dldF9wY2llaGRyX29mZnNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQl1OCBjYXBhYmlsaXR5X29mZnNldDsKLQl1OCBudW00Ynl0ZXMgPSAweDM0LzQ7Ci0Jc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKLQl1MzIgcGNpY2ZnX2FkZHJfcG9ydCA9IChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2J1c251bSA8PCAxNil8Ci0JCQkgICAgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZGV2bnVtIDw8IDExKXwKLQkJCSAgICAgICAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9mdW5jbnVtIDw8IDgpfAotCQkJICAgICAgICgxIDw8IDMxKTsKLQotCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUyAsIHBjaWNmZ19hZGRyX3BvcnQKLQkJCQkJCQkrIChudW00Ynl0ZXMgPDwgMikpOwotCXJ0bF9wY2lfcmF3X3JlYWRfcG9ydF91Y2hhcihQQ0lfQ09ORl9EQVRBLCAmY2FwYWJpbGl0eV9vZmZzZXQpOwotCXdoaWxlIChjYXBhYmlsaXR5X29mZnNldCAhPSAwKSB7Ci0JCXN0cnVjdCBydGxfcGNpX2NhcGFiaWxpdGllc19oZWFkZXIgY2FwYWJpbGl0eV9oZHI7Ci0KLQkJbnVtNGJ5dGVzID0gY2FwYWJpbGl0eV9vZmZzZXQgLyA0OwotCQkvKiBSZWFkIHRoZSBoZWFkZXIgb2YgdGhlIGNhcGFiaWxpdHkgYXQgIHRoaXMgb2Zmc2V0LgotCQkgKiBJZiB0aGUgcmV0cmlldmVkIGNhcGFiaWxpdHkgaXMgbm90IHRoZSBwb3dlciBtYW5hZ2VtZW50Ci0JCSAqIGNhcGFiaWxpdHkgdGhhdCB3ZSBhcmUgbG9va2luZyBmb3IsIGZvbGxvdyB0aGUgbGluayB0bwotCQkgKiB0aGUgbmV4dCBjYXBhYmlsaXR5IGFuZCBjb250aW51ZSBsb29waW5nLgotCQkgKi8KLQkJcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91bG9uZyhQQ0lfQ09ORl9BRERSRVNTICwKLQkJCQkJICAgICBwY2ljZmdfYWRkcl9wb3J0ICsKLQkJCQkJICAgICAobnVtNGJ5dGVzIDw8IDIpKTsKLQkJcnRsX3BjaV9yYXdfcmVhZF9wb3J0X3VzaG9ydChQQ0lfQ09ORl9EQVRBLAotCQkJCQkgICAgICh1MTYqKSZjYXBhYmlsaXR5X2hkcik7Ci0JCS8qIEZvdW5kIHRoZSBQQ0kgZXhwcmVzcyBjYXBhYmlsaXR5LiAqLwotCQlpZiAoY2FwYWJpbGl0eV9oZHIuY2FwYWJpbGl0eV9pZCA9PQotCQkgICAgUENJX0NBUEFCSUxJVFlfSURfUENJX0VYUFJFU1MpCi0JCQlicmVhazsKLQkJZWxzZQotICAgICAgICAJCWNhcGFiaWxpdHlfb2Zmc2V0ID0gY2FwYWJpbGl0eV9oZHIubmV4dDsKLQl9Ci0JcmV0dXJuIGNhcGFiaWxpdHlfb2Zmc2V0OwotfQotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwotCiBib29sIHJ0bF9wY2lfY2hlY2tfYnVkZHlfcHJpdihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKICAgICAgICAgCQkgICAgICBzdHJ1Y3QgcnRsX3ByaXYgKipidWRkeV9wcml2KQogewpAQCAtNjEwLDE0ICs1NjcsNyBAQAogCQkJCV9ydGxfcGNpX3VwZGF0ZV9lYXJseW1vZGVfaW5mbyhodywgc2tiLAogCQkJCQkJCSAgICAgICAmdGNiX2Rlc2MsIHRpZCk7CiAKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotCQkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIHNrYiwgJnRjYl9kZXNjKTsKLSNlbHNlCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCQkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIE5VTEwsIHNrYiwgJnRjYl9kZXNjKTsKLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAkJfQogCX0KIH0KQEAgLTEyMDEsMTkgKzExNTEsOSBAQAogCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KQogCQlwYnVmZmVyX2Rlc2MgPSAmcmluZy0+YnVmZmVyX2Rlc2NbMF07CiAKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotCXJ0bHByaXYtPmNmZy0+b3BzLT5maWxsX3R4X2Rlc2MoaHcsIGhkciwgKHU4ICopIHBkZXNjLAotCQkJCSAgICAgICAgKHU4ICopcGJ1ZmZlcl9kZXNjLCBpbmZvLCBwc2tiLAotCQkJCSAgICAgICAgQkVBQ09OX1FVRVVFLCAmdGNiX2Rlc2MpOwotI2Vsc2UKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKikgcGRlc2MsCiAJCQkJCSh1OCAqKXBidWZmZXJfZGVzYywgaW5mbywgTlVMTCwgcHNrYiwKIAkJCQkJQkVBQ09OX1FVRVVFLCAmdGNiX2Rlc2MpOwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCiAJX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHBza2IpOwogCkBAIC0xNjE2LDI2ICsxNTU2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotc3RhdGljIGJvb2wgcnRsX3BjaV90eF9jaGtfd2FpdHFfaW5zZXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotI2Vsc2UKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiBzdGF0aWMgYm9vbCBydGxfcGNpX3R4X2Noa193YWl0cV9pbnNlcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJCXN0cnVjdCBza19idWZmICpza2IpCi0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigzLDcsMCkpCi0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOwogCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CiAJdTE2IGZjID0gcnRsX2dldF9mYyhza2IpOwpAQCAtMTY3MSwyOCArMTU5NiwxNCBAQAogCXJldHVybiB0cnVlOwogfQogCi0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDMsNywwKSkKLWludCBydGxfcGNpX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCSAgICAgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpCi0jZWxzZQotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIHN0YXRpYyBpbnQgcnRsX3BjaV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqcHRjYl9kZXNjKQotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nOwogCXN0cnVjdCBydGxfdHhfZGVzYyAqcGRlc2M7CiAJc3RydWN0IHJ0bF90eF9idWZmZXJfZGVzYyAqcHR4X2JkX2Rlc2MgPSBOVUxMOwpAQCAtMTc3NywxOSArMTY4OCw5IEBACiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1RYKTsKIAotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigzLDcsMCkpCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKikgcGRlc2MsCi0JCQkJCSh1OCAqKXB0eF9iZF9kZXNjLCBpbmZvLCBza2IsCi0JCQkJCWh3X3F1ZXVlLCBwdGNiX2Rlc2MpOwotI2Vsc2UKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKikgcGRlc2MsCiAJCQkJCSh1OCAqKXB0eF9iZF9kZXNjLCBpbmZvLCBzdGEsIHNrYiwKIAkJCQkJaHdfcXVldWUsIHB0Y2JfZGVzYyk7Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAKIAlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKIAlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgewpAQCAtMTgxOSwxMSArMTcyMCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMTAsMCkpCiBzdGF0aWMgdm9pZCBydGxfcGNpX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcXVldWVzLCBib29sIGRyb3ApCi0jZWxzZQotc3RhdGljIHZvaWQgcnRsX3BjaV9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQotI2VuZGlmCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CkBAIC0xODM4LDEyICsxNzM1LDEwIEBACiAKIAlmb3IgKHF1ZXVlX2lkID0gUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQgLSAxOyBxdWV1ZV9pZCA+PSAwOykgewogCQl1MzIgcXVldWVfbGVuOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywxMCwwKSkKIAkJaWYgKCgocXVldWVzID4+IHF1ZXVlX2lkKSAmIDB4MSkgPT0gMCkgewogCQkJcXVldWVfaWQtLTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0jZW5kaWYKIAkJcmluZyA9ICZwY2lwcml2LT5kZXYudHhfcmluZ1txdWV1ZV9pZF07CiAJCXF1ZXVlX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKTsKIAkJaWYgKHF1ZXVlX2xlbiA9PSAwIHx8IHF1ZXVlX2lkID09IEJFQUNPTl9RVUVVRSB8fApAQCAtMjEyMiwxNyArMjAxNyw4IEBACiAJCSAgICAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9idXNudW0gPDwgMTYpIHwKIAkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2Rldm51bSA8PCAxMSkgfAogCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZnVuY251bSA8PCA4KSB8ICgxIDw8IDMxKTsKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwzNSkpCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ID0KIAkJICAgIHBjaV9wY2llX2NhcChicmlkZ2VfcGRldik7Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZWxzZQotCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ID0KLQkJCV9ydGxfcGNpX2dldF9wY2llaGRyX29mZnNldChodyk7Ci0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5udW00Ynl0ZXMgPQogCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQgKyAweDEwKSAvIDQ7CiAKQEAgLTIyMzAsMTQgKzIxMTYsOCBAQAogICogaHcgcG9pbnRlciBpbiBydGxfcGNpX2dldF9od19wb2ludGVyICovCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpod19leHBvcnQgPSBOVUxMOwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDgsMCkpCiBpbnQgcnRsX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLQotI2Vsc2UKLWludCBfX2RldmluaXQgcnRsX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IE5VTEw7CiAKQEAgLTIzMTMsMTYgKzIxOTMsMTYgQEAKIAogCS8qc2hhcmVkIG1lbSBzdGFydCAqLwogCXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgPQotCQkJKHVuc2lnbmVkIGxvbmcpcGNpX2lvbWFwKHBkZXYsCisJCQlwY2lfaW9tYXAocGRldiwKIAkJCXJ0bHByaXYtPmNmZy0+YmFyX2lkLCBwbWVtX2xlbik7Ci0JaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgPT0gMCkgeworCWlmIChydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ID09IE5VTEwpIHsKIAkJUlRfQVNTRVJUKGZhbHNlLCAoIkNhbid0IG1hcCBQQ0kgbWVtXG4iKSk7CiAJCWdvdG8gZmFpbDI7CiAJfQogCiAJUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfRE1FU0csCiAJCSAoIm1lbSBtYXBwZWQgc3BhY2U6IHN0YXJ0OiAweCUwOGx4IGxlbjolMDhseCAiCi0JCSAgImZsYWdzOiUwOGx4LCBhZnRlciBtYXA6MHglMDhseFxuIiwKKwkJICAiZmxhZ3M6JTA4bHgsIGFmdGVyIG1hcDoweCVwXG4iLAogCQkgIHBtZW1fc3RhcnQsIHBtZW1fbGVuLCBwbWVtX2ZsYWdzLAogCQkgIHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQpKTsKIApAQCAtMjQxNSw4ICsyMjk1LDggQEAKIAlydGxfZGVpbml0X2NvcmUoaHcpOwogCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKIAotCWlmIChydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ICE9IDApCi0JCXBjaV9pb3VubWFwKHBkZXYsICh2b2lkICopcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCk7CisJaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgIT0gTlVMTCkKKwkJcGNpX2lvdW5tYXAocGRldiwgcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCk7CiAKIGZhaWwyOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC0yNDc4LDggKzIzNTgsOCBAQAogCQlwY2lfZGlzYWJsZV9tc2kocnRscGNpLT5wZGV2KTsKIAogCWxpc3RfZGVsKCZydGxwcml2LT5saXN0KTsKLQlpZiAocnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCAhPSAwKSB7Ci0JCXBjaV9pb3VubWFwKHBkZXYsICh2b2lkICopcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCk7CisJaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgIT0gTlVMTCkgeworCQlwY2lfaW91bm1hcChwZGV2LCBydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0KTsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3BjaS5oCmluZGV4IDA2ZWFhNTIuLjNmMTZlYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcGNpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9wY2kuaApAQCAtMjgyLDEzICsyODIsOCBAQAogCiBleHRlcm4gc3RydWN0IHJ0bF9pbnRmX29wcyBydGxfcGNpX29wczsKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMyw4LDApKQogaW50IHJ0bF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwotI2Vsc2UKLWludCBfX2RldmluaXQgcnRsX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwotI2VuZGlmCiB2b2lkIHJ0bF9wY2lfZGlzY29ubmVjdChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgcnRsX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CiBpbnQgcnRsX3BjaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcHMuYwppbmRleCA3ODc2NDQyLi41YTliYmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3BzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9wcy5jCkBAIC0zMCw5ICszMCw3IEBACiAjaW5jbHVkZSAid2lmaS5oIgogI2luY2x1ZGUgImJhc2UuaCIKICNpbmNsdWRlICJwcy5oIgotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywyLDApKQogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2VuZGlmCiAjaW5jbHVkZSAiYnRjb2V4aXN0L3J0bF9idGMuaCIKIAogYm9vbCBydGxfcHNfZW5hYmxlX25pYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTU0MiwxNyArNTQwLDggQEAKIAl0aW1fbGVuID0gdGltWzFdOwogCXRpbV9pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKSAmdGltWzJdOwogCi0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMzUpKQotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAlpZiAoIVdBUk5fT05fT05DRSghaHctPmNvbmYucHNfZHRpbV9wZXJpb2QpKQogCQlydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyID0gdGltX2llLT5kdGltX2NvdW50OwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2Vsc2UKLQlpZiAoIVdBUk5fT05fT05DRSghbWFjLT52aWYtPmJzc19jb25mLmR0aW1fcGVyaW9kKSkKLQkJcnRscHJpdi0+cHNjLmR0aW1fY291bnRlciA9IHRpbV9pZS0+ZHRpbV9jb3VudDsKLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAogCS8qIENoZWNrIHdoZW5ldmVyIHRoZSBQSFkgY2FuIGJlIHR1cm5lZCBvZmYgYWdhaW4uICovCiAKQEAgLTY1Niw5ICs2NDUsNiBAQAogCSAqIHRpbWUgdG8gc2xlZXBfaW50diA9IHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgb3IKIAkgKiBNQVhfU1dfTFBTX1NMRUVQX0lOVFYoZGVmYXVsdCBzZXQgdG8gNSkgKi8KIAotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDM1KSkKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJaWYgKHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgPT0gMCkgewogCQlpZiAoaHctPmNvbmYucHNfZHRpbV9wZXJpb2QgPT0gMSkKIAkJCXNsZWVwX2ludHYgPSBody0+Y29uZi5wc19kdGltX3BlcmlvZCAqIDI7CkBAIC02NjcsMTggKzY1Myw2IEBACiAJfSBlbHNlIHsKIAkJc2xlZXBfaW50diA9IHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXI7CiAJfQotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2Vsc2UKLQlpZiAocnRscHJpdi0+cHNjLmR0aW1fY291bnRlciA9PSAwKSB7Ci0JCWlmIChtYWMtPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QgPT0gMSkKLQkJCXNsZWVwX2ludHYgPSBtYWMtPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QgKiAyOwotCQllbHNlCi0JCQlzbGVlcF9pbnR2ID0gbWFjLT52aWYtPmJzc19jb25mLmR0aW1fcGVyaW9kOwotCX0gZWxzZSB7Ci0JCXNsZWVwX2ludHYgPSBydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyOwotCX0KLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAogCWlmIChzbGVlcF9pbnR2ID4gTUFYX1NXX0xQU19TTEVFUF9JTlRWKQogCQlzbGVlcF9pbnR2ID0gTUFYX1NXX0xQU19TTEVFUF9JTlRWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9yYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9yYy5jCmluZGV4IDBjYzMyYzYuLjBiNGYzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3JjLmMKQEAgLTIxMCwxNiArMjEwLDggQEAKIAkJCQkJCSAgICAgICB0aWQpKSB7CiAJCQkJCXN0YV9lbnRyeS0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPQogCQkJCQkJUlRMX0FHR19QUk9HUkVTUzsKLQkJCQkJLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDM4KSkKLQkJCQkJLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAkJCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsCiAJCQkJCQkJCSAgICAgIDUwMDApOwotCQkJCQkvKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZWxzZQotCQkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCk7Ci0jZW5kaWYKLQkJCQkJLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIzMiwxNSArMjI0LDYgQEAKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCiB7CiB9Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDMsNSwwKSkKLXN0YXRpYyB2b2lkIHJ0bF9yYXRlX3VwZGF0ZSh2b2lkICpwcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKLQkJCSAgICB1MzIgY2hhbmdlZCwKLQkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbl90eXBlKQotewotfQotI2Vsc2UKIHN0YXRpYyB2b2lkIHJ0bF9yYXRlX3VwZGF0ZSh2b2lkICpwcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYsCkBAIC0yNDgsNyArMjMxLDYgQEAKIAkJCSAgICB1MzIgY2hhbmdlZCkKIHsKIH0KLSNlbmRpZgogc3RhdGljIHZvaWQgKnJ0bF9yYXRlX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKQEAgLTI4Niw3ICsyNjgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgcnRsX3JhdGVfb3BzID0gewotCS5uYW1lID0gInJ0bF9yYyIsCisJLm5hbWUgPSAicnRsX3JjXzIxYWUiLAogCS5hbGxvYyA9IHJ0bF9yYXRlX2FsbG9jLAogCS5mcmVlID0gcnRsX3JhdGVfZnJlZSwKIAkuYWxsb2Nfc3RhID0gcnRsX3JhdGVfYWxsb2Nfc3RhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9yZWdkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3JlZ2QuYwppbmRleCAwYTRiMzk4Li4yZWZhNWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3JlZ2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3JlZ2QuYwpAQCAtMTU4LDExICsxNTgsNiBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CiAJdW5zaWduZWQgaW50IGk7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDMsOSwwKSkKLQl1MzIgYmFuZHdpZHRoID0gMDsKLQlpbnQgcjsKLSNlbmRpZgotCiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCiAJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQpAQCAtMTc2LDE2ICsxNzEsOSBAQAogCQkJICAgIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpCiAJCQkJY29udGludWU7CiAJCQlpZiAoaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDksMCkpCiAJCQkJcmVnX3J1bGUgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEpOwogCQkJCWlmIChJU19FUlIocmVnX3J1bGUpKQogCQkJCQljb250aW51ZTsKLSNlbHNlCi0JCQkJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwKLQkJCQkJCSAgYmFuZHdpZHRoLCAmcmVnX3J1bGUpOwotCQkJCWlmIChyKQotCQkJCQljb250aW51ZTsKLSNlbmRpZgogCiAJCQkJLyoKIAkJCQkgKklmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCkBAIC0yMTksMTAgKzIwNyw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpyZWdfcnVsZTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw5LDApKQotCXUzMiBiYW5kd2lkdGggPSAwOwotCWludCByOwotI2VuZGlmCiAKIAlpZiAoIXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSkKIAkJcmV0dXJuOwpAQCAtMjUwLDI2ICsyMzQsMTYgQEAKIAkgKi8KIAogCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMV07CS8qIENIIDEyICovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDksMCkpCiAJcmVnX3J1bGUgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEpOwogCWlmICghSVNfRVJSKHJlZ19ydWxlKSkgewotI2Vsc2UKLQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLCBiYW5kd2lkdGgsICZyZWdfcnVsZSk7Ci0JaWYgKCFyKSB7Ci0jZW5kaWYKIAkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKIAkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCiAJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CiAJfQogCiAJY2ggPSAmc2JhbmQtPmNoYW5uZWxzWzEyXTsJLyogQ0ggMTMgKi8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsOSwwKSkKIAlyZWdfcnVsZSA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSk7CiAJaWYgKCFJU19FUlIocmVnX3J1bGUpKSB7Ci0jZWxzZQotCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEsIGJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKLQlpZiAoIXIpIHsKLSNlbmRpZgogCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJiBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQogCQkJaWYgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKIAkJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKQEAgLTM4OSwxOSArMzYzLDExIEBACiAJfQogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDksMCkpCiBzdGF0aWMgaW50IF9ydGxfcmVnZF9pbml0X3dpcGh5KHN0cnVjdCBydGxfcmVndWxhdG9yeSAqcmVnLAogCQkJCXN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJdm9pZCAoKnJlZ19ub3RpZmllcikgKHN0cnVjdCB3aXBoeSAqIHdpcGh5LAogCQkJCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICoKIAkJCQkJCSAgICAgcmVxdWVzdCkpCi0jZWxzZQotc3RhdGljIGludCBfcnRsX3JlZ2RfaW5pdF93aXBoeShzdHJ1Y3QgcnRsX3JlZ3VsYXRvcnkgKnJlZywKLQkJCQlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCWludCAoKnJlZ19ub3RpZmllcikgKHN0cnVjdCB3aXBoeSAqIHdpcGh5LAotCQkJCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICoKLQkJCQkJCSAgICAgcmVxdWVzdCkpCi0jZW5kaWYKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKIApAQCAtNDI5LDE1ICszOTUsOSBAQAogCXJldHVybiBOVUxMOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDksMCkpCiBpbnQgcnRsX3JlZ2RfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICB2b2lkICgqcmVnX25vdGlmaWVyKSAoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpKQotI2Vsc2UKLWludCBydGxfcmVnZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgIGludCAoKnJlZ19ub3RpZmllcikgKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQkJICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpKQotI2VuZGlmCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBody0+d2lwaHk7CkBAIC00ODAsNyArNDQwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMyw5LDApKQogdm9pZCBydGxfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOwpAQCAtNDkwLDE0ICs0NDksMyBAQAogCiAJX3J0bF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsICZydGxwcml2LT5yZWdkKTsKIH0KLSNlbHNlCi1pbnQgcnRsX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0KLQlSVF9UUkFDRShDT01QX1JFR0QsIERCR19MT1VELCAoIlxuIikpOwotCi0JcmV0dXJuIF9ydGxfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCAmcnRscHJpdi0+cmVnZCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcmVnZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9yZWdkLmgKaW5kZXggZGNlYjNmMS4uMWNmY2I5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9yZWdkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9yZWdkLmgKQEAgLTYwLDE2ICs2MCw4IEBACiAJQ09VTlRSWV9DT0RFX01BWAogfTsKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMyw5LDApKQogaW50IHJ0bF9yZWdkX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgdm9pZCAoKnJlZ19ub3RpZmllcikgKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJICAgICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KSk7CiB2b2lkIHJ0bF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7Ci0jZWxzZQotaW50IHJ0bF9yZWdkX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCSAgaW50ICgqcmVnX25vdGlmaWVyKSAoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQkgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkpOwotaW50IHJ0bF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7Ci0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3J0bDg4MjFhZS9ody5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvaHcuaAppbmRleCA0ZmI2YmYwLi4yNTZlNTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3J0bDg4MjFhZS9ody5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcnRsODgyMWFlL2h3LmgKQEAgLTExLDEwICsxMSw2IEBACiAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAgKiBtb3JlIGRldGFpbHMuCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKICAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgpAQCAtMzQsNDIgKzMwLDQzIEBACiB2b2lkIHJ0bDg4MjFhZV9yZWFkX2VlcHJvbV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogdm9pZCBydGw4ODIxYWVfaW50ZXJydXB0X3JlY29nbml6ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkJCQkJCSB1MzIgKnBfaW50YSwgdTMyICpwX2ludGIpOworCQkJCSAgICB1MzIgKnBfaW50YSwgdTMyICpwX2ludGIpOwogaW50IHJ0bDg4MjFhZV9od19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsODgyMWFlX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDg4MjFhZV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsODgyMWFlX2Rpc2FibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWludCBydGw4ODIxYWVfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKTsKK2ludCBydGw4ODIxYWVfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpOwogdm9pZCBydGw4ODIxYWVfc2V0X2NoZWNrX2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGNoZWNrX2Jzc2lkKTsKIHZvaWQgcnRsODgyMWFlX3NldF9xb3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBhY2kpOwogdm9pZCBydGw4ODIxYWVfc2V0X2JlYWNvbl9yZWxhdGVkX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDg4MjFhZV9zZXRfYmVhY29uX2ludGVydmFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsODgyMWFlX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJCQkJCQkJCXUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKKwkJCQkgICAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKIHZvaWQgcnRsODgyMWFlX3NldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKIHZvaWQgcnRsODgyMWFlX3VwZGF0ZV9oYWxfcmF0ZV90Ymwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCQkJCQkJCQkJCXU4IHJzc2lfbGV2ZWwpOworCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJICAgdTggcnNzaV9sZXZlbCk7CiB2b2lkIHJ0bDg4MjFhZV91cGRhdGVfY2hhbm5lbF9hY2Nlc3Nfc2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIHJ0bDg4MjFhZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnZhbGlkKTsKIHZvaWQgcnRsODgyMWFlX2VuYWJsZV9od19zZWN1cml0eV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw4ODIxYWVfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGtleV9pbmRleCwKLQkJICAgICAJCQkJdTggKnBfbWFjYWRkciwgYm9vbCBpc19ncm91cCwgdTggZW5jX2FsZ28sCi0JCSAgICAgCQkJCWJvb2wgaXNfd2Vwa2V5LCBib29sIGNsZWFyX2FsbCk7CisJCSAgICAgICB1OCAqcF9tYWNhZGRyLCBib29sIGlzX2dyb3VwLCB1OCBlbmNfYWxnbywKKwkJICAgICAgIGJvb2wgaXNfd2Vwa2V5LCBib29sIGNsZWFyX2FsbCk7CiAKIHZvaWQgcnRsODgyMWFlX3JlYWRfYnRfY29leGlzdF9pbmZvX2Zyb21faHdwZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJCQkJCQkJCQkJCWJvb2wgYXV0b2xvYWRfZmFpbCwKLQkJCQkJCQkJCQkJCQkJCXU4KiBod2luZm8pOworCQkJCQkgICAgICBib29sIGF1dG9sb2FkX2ZhaWwsCisJCQkJCSAgICAgIHU4ICpod2luZm8pOwogdm9pZCBydGw4ODEyYWVfcmVhZF9idF9jb2V4aXN0X2luZm9fZnJvbV9od3BnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkJCQkJCQkJCQkJYm9vbCBhdXRvbG9hZF9mYWlsLAotCQkJCQkJCQkJCQkJCQkJdTgqIGh3aW5mbyk7Ci12b2lkIHJ0bDg4MjFhZV9idF9yZWdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3KiBodyk7Ci12b2lkIHJ0bDg4MjFhZV9idF9od19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcqIGh3KTsKKwkJCQkJICAgICAgYm9vbCBhdXRvbG9hZF9mYWlsLAorCQkJCQkgICAgICB1OCAqaHdpbmZvKTsKK3ZvaWQgcnRsODgyMWFlX2J0X3JlZ19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsODgyMWFlX2J0X2h3X2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw4ODIxYWVfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDg4MjFhZV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw4ODIxYWVfYWxsb3dfYWxsX2Rlc3RhZGRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkJCQkJCSAgYm9vbCBhbGxvd19hbGxfZGEsCi0JCQkJCQkJCQkJICBib29sIHdyaXRlX2ludG9fcmVnKTsKKwkJCQkgIGJvb2wgYWxsb3dfYWxsX2RhLAorCQkJCSAgYm9vbCB3cml0ZV9pbnRvX3JlZyk7CiB2b2lkIF9ydGw4ODIxYWVfc3RvcF90eF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBfcnRsODgyMWFlX3Jlc3VtZV90eF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3J0bDg4MjFhZS9zdy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvc3cuYwppbmRleCBhOGQxNzU1Li4yNjIxMjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3J0bDg4MjFhZS9zdy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcnRsODgyMWFlL3N3LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlICJoYWxfYnRjLmgiCiAjaW5jbHVkZSAiLi4vYnRjb2V4aXN0L3J0bF9idGMuaCIKIAotdm9pZCBydGw4ODIxYWVfaW5pdF9hc3BtX3ZhcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgdm9pZCBydGw4ODIxYWVfaW5pdF9hc3BtX3ZhcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKIApAQCAtMjI1LDcgKzIyNSw3IEBACiAJLy9wcmludGsoIjw9PT09PT09PT1ydGw4ODIxYWVfZGVpbml0X3N3X3ZhcnMoKS5cbiIpOwogfQogCi11MzIgcnRsODgxMmFlX3J4X2NvbW1hbmRfcGFja2V0X2hhbmRsZXIoCitzdGF0aWMgdTMyIHJ0bDg4MTJhZV9yeF9jb21tYW5kX3BhY2tldF9oYW5kbGVyKAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCXN0cnVjdCBydGxfc3RhdHMgc3RhdHVzLAogCXN0cnVjdCBza19idWZmICpza2IKQEAgLTI2MCw3ICsyNjAsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdHJ1Y3QgcnRsX2hhbF9vcHMgcnRsODgyMWFlX2hhbF9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHJ0bF9oYWxfb3BzIHJ0bDg4MjFhZV9oYWxfb3BzID0gewogCS5pbml0X3N3X3ZhcnMgPSBydGw4ODIxYWVfaW5pdF9zd192YXJzLAogCS5kZWluaXRfc3dfdmFycyA9IHJ0bDg4MjFhZV9kZWluaXRfc3dfdmFycywKIAkucmVhZF9lZXByb21faW5mbyA9IHJ0bDg4MjFhZV9yZWFkX2VlcHJvbV9pbmZvLApAQCAtMzExLDE0ICszMTEsMTQgQEAKIAkucnhfY29tbWFuZF9wYWNrZXRfaGFuZGxlciA9IHJ0bDg4MTJhZV9yeF9jb21tYW5kX3BhY2tldF9oYW5kbGVyLAogfTsKIAotc3RydWN0IHJ0bF9tb2RfcGFyYW1zIHJ0bDg4MjFhZV9tb2RfcGFyYW1zID0geworc3RhdGljIHN0cnVjdCBydGxfbW9kX3BhcmFtcyBydGw4ODIxYWVfbW9kX3BhcmFtcyA9IHsKIAkuc3dfY3J5cHRvID0gZmFsc2UsCiAJLmJfaW5hY3RpdmVwcyA9IGZhbHNlLC8vdHJ1ZSwKIAkuYl9zd2N0cmxfbHBzID0gZmFsc2UsCiAJLmJfZndjdHJsX2xwcyA9IGZhbHNlLCAvL3RydWUsCiB9OwogCi1zdHJ1Y3QgcnRsX2hhbF9jZmcgcnRsODgyMWFlX2hhbF9jZmcgPSB7CitzdGF0aWMgc3RydWN0IHJ0bF9oYWxfY2ZnIHJ0bDg4MjFhZV9oYWxfY2ZnID0gewogCS5iYXJfaWQgPSAyLAogCS53cml0ZV9yZWFkYmFjayA9IHRydWUsCiAJLm5hbWUgPSAicnRsODgyMWFlX3BjaSIsCkBAIC00MTUsMTkgKzQxNSwxMSBAQAogCS5tYXBzW1JUTF9SQ19IVF9SQVRFTUNTMTVdID0gIERFU0NfUkFURU1DUzE1LAogfTsKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMyw4LDApKQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDg4MjFhZV9wY2lfaWRzW10gPSB7CiAgICAgICAgIHtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODgxMiwgcnRsODgyMWFlX2hhbF9jZmcpfSwKICAgICAgICAge1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4ODIxLCBydGw4ODIxYWVfaGFsX2NmZyl9LAogICAgICAgICB7fSwKIH07Ci0jZWxzZQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDg4MjFhZV9wY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDg4MTIsIHJ0bDg4MjFhZV9oYWxfY2ZnKX0sCi0Je1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4ODIxLCBydGw4ODIxYWVfaGFsX2NmZyl9LAotCXt9LAotfTsKLSNlbmRpZgogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnRsODgyMWFlX3BjaV9pZHMpOwogCkBAIC00NDUsMTQgKzQzNyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlwcywgInVzaW5nIG5vIGxpbmsgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoZndscHMsICJ1c2luZyBsaW5rZWQgZncgY29udHJvbCBwb3dlciBzYXZlIChkZWZhdWx0IDEgaXMgb3BlbilcbiIpOwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjkpKQotc3RhdGljIGNvbnN0IFNJTVBMRV9ERVZfUE1fT1BTKHJ0bHdpZmlfcG1fb3BzLCBydGxfcGNpX3N1c3BlbmQsIHJ0bF9wY2lfcmVzdW1lKTsKLSNlbmRpZgotCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyOSkpCi1jb21wYXRfcGNpX3N1c3BlbmQocnRsX3BjaV9zdXNwZW5kKQotY29tcGF0X3BjaV9yZXN1bWUocnRsX3BjaV9yZXN1bWUpCi0jZW5kaWYKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhydGx3aWZpX3BtX29wcywgcnRsX3BjaV9zdXNwZW5kLCBydGxfcGNpX3Jlc3VtZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw4ODIxYWVfZHJpdmVyID0gewogCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCkBAIC00NjAsMTMgKzQ0NSw3IEBACiAJLnByb2JlID0gcnRsX3BjaV9wcm9iZSwKIAkucmVtb3ZlID0gcnRsX3BjaV9kaXNjb25uZWN0LAogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjkpKQogCS5kcml2ZXIucG0gPSAmcnRsd2lmaV9wbV9vcHMsCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QTSkKLQkuc3VzcGVuZCA9IHJ0bF9wY2lfc3VzcGVuZF9jb21wYXQsCi0JLnJlc3VtZSA9IHJ0bF9wY2lfcmVzdW1lX2NvbXBhdCwKLSNlbmRpZgotCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcnRsODgyMWFlL3RyeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvdHJ4LmMKaW5kZXggZjQwYTkzYy4uYjQ5NDNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvdHJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvdHJ4LmMKQEAgLTc3LDExICs3Nyw3IEBACiAJaW50IHJhdGVfaWR4OwogCiAJaWYgKGZhbHNlID09IGlzaHQpIHsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMTAsMCkpCiAJCWlmIChJRUVFODAyMTFfQkFORF8yR0haID09IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZCkgewotI2Vsc2UKLQkJaWYgKElFRUU4MDIxMV9CQU5EXzJHSFogPT0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZCkgewotI2VuZGlmCiAJCQlzd2l0Y2ggKGRlc2NfcmF0ZSkgewogCQkJY2FzZSBERVNDX1JBVEUxTToKIAkJCQlyYXRlX2lkeCA9IDA7CkBAIC01NzksMTMgKzU3NSw4IEBACiAJaWYgKHN0YXR1cy0+d2FrZV9tYXRjaCkKIAkJUlRfVFJBQ0UoQ09NUF9SWERFU0MsREJHX0xPVUQsCiAJCSgiR0dHR0dHR0dHR0dHR2V0IFdha2V1cCBQYWNrZXQhISBXYWtlTWF0Y2g9JWRcbiIsc3RhdHVzLT53YWtlX21hdGNoICkpOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywxMCwwKSkKIAlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxOwogCXJ4X3N0YXR1cy0+YmFuZCA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZDsKLSNlbHNlCi0Jcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0Jcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKLSNlbmRpZgogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSArIHN0YXR1cy0+cnhfZHJ2aW5mb19zaXplCiAJCQkrIHN0YXR1cy0+cnhfYnVmc2hpZnQpOwpAQCAtNjUwLDMzICs2NDEsMTcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigzLDcsMCkpCi12b2lkIHJ0bDg4MjFhZV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwgdTggKnR4YmQsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgdTggaHdfcXVldWUsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYykKLSNlbHNlCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogdm9pZCBydGw4ODIxYWVfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsIHU4ICp0eGJkLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHU4IGh3X3F1ZXVlLCBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpCi0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKLSNlbmRpZgotLyo8ZGVsZXRlIGluIGtlcm5lbCBlbmQ+Ki8KIAl1OCAqcGRlc2MgPSAodTggKikgcGRlc2NfdHg7CiAJdTE2IHNlcV9udW1iZXI7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKQEAgLTc4Myw5ICs3NTgsNiBAQAogCQl9CiAJCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgewogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiA9IGluZm8tPmNvbnRyb2wuaHdfa2V5OwotLyo8ZGVsZXRlIGluIGtlcm5lbCBzdGFydD4qLwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDM3KSkKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiAJCQlzd2l0Y2ggKGtleWNvbmYtPmNpcGhlcikgewogCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgpAQCAtODAwLDIzICs3NzIsNiBAQAogCQkJCWJyZWFrOwogCiAJCQl9Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZWxzZQotCQkJc3dpdGNoIChrZXljb25mLT5hbGcpIHsKLQkJCWNhc2UgQUxHX1dFUDoKLQkJCWNhc2UgQUxHX1RLSVA6Ci0JCQkJU0VUX1RYX0RFU0NfU0VDX1RZUEUocGRlc2MsIDB4MSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFMR19DQ01QOgotCQkJCVNFVF9UWF9ERVNDX1NFQ19UWVBFKHBkZXNjLCAweDMpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgwKTsKLQkJCQlicmVhazsKLQotCQkJfQotI2VuZGlmCi0vKjxkZWxldGUgaW4ga2VybmVsIGVuZD4qLwogCQl9CiAKIAkJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCBmd19xc2VsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvcnRsODgyMWFlL3RyeC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvdHJ4LmgKaW5kZXggZGE5M2U1Yy4uYWYwMTc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvdHJ4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9ydGw4ODIxYWUvdHJ4LmgKQEAgLTYwOSwyMyArNjA5LDEyIEBACiAKIH0gX19wYWNrZWQ7CiAKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgc3RhcnQ+Ki8KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMyw3LDApKQotdm9pZCBydGw4ODIxYWVfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsIHU4ICp0eGJkLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHU4IGh3X3F1ZXVlLCBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpOwotI2Vsc2UKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiB2b2lkIHJ0bDg4MjFhZV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwgdTggKnR4YmQsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgdTggaHdfcXVldWUsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYyk7Ci0vKjxkZWxldGUgaW4ga2VybmVsIHN0YXJ0PiovCi0jZW5kaWYKLS8qPGRlbGV0ZSBpbiBrZXJuZWwgZW5kPiovCiBib29sIHJ0bDg4MjFhZV9yeF9xdWVyeV9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgc3RydWN0IHJ0bF9zdGF0cyAqc3RhdHVzLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvc3RhdHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4ODIxYWUvc3RhdHMuYwppbmRleCBhMjBjMGY4Li40ZDM4M2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3N0YXRzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS9zdGF0cy5jCkBAIC0yOCw5ICsyOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAid2lmaS5oIgogI2luY2x1ZGUgInN0YXRzLmgiCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDIsMCkpCiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jZW5kaWYKIAogdTggcnRsX3F1ZXJ5X3J4cHdycGVyY2VudGFnZShjaGFyIGFudHBvd2VyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg4MjFhZS93aWZpLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3dpZmkuaAppbmRleCAxN2E5ZDlmLi5lODI1MGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3dpZmkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODgyMWFlL3dpZmkuaApAQCAtMTA4Niw4ICsxMDg2LDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAkvKlBDSSBNRU0gbWFwICovCi0JdW5zaWduZWQgbG9uZyBwY2lfbWVtX2VuZDsJLypzaGFyZWQgbWVtIGVuZCAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nIHBjaV9tZW1fc3RhcnQ7CS8qc2hhcmVkIG1lbSBzdGFydCAqLworCXZvaWQgX19pb21lbSAqcGNpX21lbV9lbmQ7CS8qc2hhcmVkIG1lbSBlbmQgICAgICAgICovCisJdm9pZCBfX2lvbWVtICpwY2lfbWVtX3N0YXJ0OwkvKnNoYXJlZCBtZW0gc3RhcnQgKi8KIAogCS8qUENJIElPIG1hcCAqLwogCXVuc2lnbmVkIGxvbmcgcGNpX2Jhc2VfYWRkcjsJLypkZXZpY2UgSS9PIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmQ1MjZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1jb25maWcgUlRTNTEzOQotCXRyaXN0YXRlICJSZWFsdGVrIFJUUzUxMzkgVVNCIGNhcmQgcmVhZGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgU0NTSQotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBkcml2ZXIgY29kZSB0byBzdXBwb3J0IHRoZSBSZWFsdGVrCi0JICBSVFM1MTM5IFVTQiBjYXJkIHJlYWRlcnMuCi0KLQkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHJ0czUxMzkuCi0KLWNvbmZpZyBSVFM1MTM5X0RFQlVHCi0JYm9vbCAiUmVhbHRlayBSVFM1MTM5IENhcmQgUmVhZGVyIHZlcmJvc2UgZGVidWciCi0JZGVwZW5kcyBvbiBSVFM1MTM5Ci0JaGVscAotCSAgU2F5IFkgaGVyZSBpbiBvcmRlciB0byBoYXZlIHRoZSBydHM1MTM5IGNvZGUgZ2VuZXJhdGUKLQkgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWRkMzEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSMKLSMgQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0jIGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0jCi0jIEF1dGhvcjoKLSMgICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0jICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0jIE1haW50YWluZXI6Ci0jICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSMgICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBSVFM1MXh4IFVTQiBDYXJkIFJlYWRlciBkcml2ZXJzLgotIwotCi1vYmotJChDT05GSUdfUlRTNTEzOSkgOj0gcnRzNTEzOS5vCi0KLWNjZmxhZ3MteSA6PSAtSWRyaXZlcnMvc2NzaQotCi1ydHM1MTM5LXkgOj0JCQkJXAotCQlydHM1MXhfdHJhbnNwb3J0Lm8gCVwKLQkJcnRzNTF4X3Njc2kubwkJXAotCQlydHM1MXhfZm9wLm8JCVwKLQkJcnRzNTF4Lm8JCVwKLQkJcnRzNTF4X2NoaXAubwkJXAotCQlydHM1MXhfY2FyZC5vCQlcCi0JCXhkLm8JCQlcCi0JCXNkLm8JCQlcCi0JCW1zLm8JCQlcCi0JCXNkX2Nwcm0ubwkJXAotCQltc19tZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ1ZmFiYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1UT0RPOgotLSBzdXBwb3J0IG1vcmUgVVNCIGNhcmQgcmVhZGVyIG9mIFJlYWx0ZWsgZmFtaWx5Ci0tIHVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCi0tIGNoZWNrcGF0Y2gucGwgZml4ZXMKLS0gc3RvcCBoYXZpbmcgdGhvdXNhbmRzIG9mIGxpbmVzIG9mIGNvZGUgZHVwbGljYXRlZCB3aXRoIHN0YWdpbmcvcnRzX3BzdG9yCi0tIFRoaXMgZHJpdmVyIGNvbnRhaW5zIGFuIGVudGlyZSBTRC9NTUMgc3RhY2sgLS0gaXQgc2hvdWxkIHVzZSB0aGUgc3RhY2sgaW4KLSAgZHJpdmVycy9tbWMgaW5zdGVhZCwgYXMgYSBob3N0IGRyaXZlciBlLmcuIGRyaXZlcnMvbW1jL2hvc3QvcmVhbHRlay11c2IuYzsKLSAgc2VlIGRyaXZlcnMvbW1jL2hvc3QvdXNoYy5jIGFzIGFuIGV4YW1wbGUuCi0tIFRoaXMgZHJpdmVyIHByZXNlbnRzIGNhcmRzIGFzIFNDU0kgZGV2aWNlcywgYnV0IHRoZXkgc2hvdWxkIGJlIE1NQyBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGVjMTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICogSGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQXV0aG9yOgotICogICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICogTWFpbnRhaW5lcjoKLSAqICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKi8KLQotI2lmbmRlZiBfX1JUUzUxWF9ERUJVR19ICi0jZGVmaW5lIF9fUlRTNTFYX0RFQlVHX0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jZGVmaW5lIFJUUzUxWF9USVAgInJ0czUxeDogIgotCi0jaWZkZWYgQ09ORklHX1JUUzUxMzlfREVCVUcKLSNkZWZpbmUgUlRTNTFYX0RFQlVHUCh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyBSVFM1MVhfVElQIHgpCi0jZGVmaW5lIFJUUzUxWF9ERUJVR1BOKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCi0jZGVmaW5lIFJUUzUxWF9ERUJVR1BYKHguLi4pIHByaW50ayh4KQotI2RlZmluZSBSVFM1MVhfREVCVUcoeCkgeAotI2Vsc2UKLSNkZWZpbmUgUlRTNTFYX0RFQlVHUCh4Li4uKQotI2RlZmluZSBSVFM1MVhfREVCVUdQTih4Li4uKQotI2RlZmluZSBSVFM1MVhfREVCVUdQWCh4Li4uKQotI2RlZmluZSBSVFM1MVhfREVCVUcoeCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19SVFM1MVhfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvbXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L21zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MDI5MmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvbXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQxODUgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInJ0czUxeC5oIgotI2luY2x1ZGUgInJ0czUxeF90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJydHM1MXhfc2NzaS5oIgotI2luY2x1ZGUgInJ0czUxeF9jYXJkLmgiCi0jaW5jbHVkZSAibXMuaCIKLQotc3RhdGljIGlubGluZSB2b2lkIG1zX3NldF9lcnJfY29kZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGVycl9jb2RlKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQotCW1zX2NhcmQtPmVycl9jb2RlID0gZXJyX2NvZGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zX2NoZWNrX2Vycl9jb2RlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZXJyX2NvZGUpCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCi0JcmV0dXJuIG1zX2NhcmQtPmVycl9jb2RlID09IGVycl9jb2RlOwotfQotCi1zdGF0aWMgaW50IG1zX3BhcnNlX2Vycl9jb2RlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotfQotCi1zdGF0aWMgaW50IG1zX3RyYW5zZmVyX3RwYyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHRyYW5zX21vZGUsIHU4IHRwYywKLQkJCSAgIHU4IGNudCwgdTggY2ZnKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCi0JUlRTNTFYX0RFQlVHUCgibXNfdHJhbnNmZXJfdHBjOiB0cGMgPSAweCV4XG4iLCB0cGMpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFBDLCAweEZGLCB0cGMpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0JZVEVfQ05ULCAweEZGLCBjbnQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TX0NGRywgMHhGRiwgY2ZnKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkgICAgICAgUElOR1BPTkdfQlVGRkVSKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgTVNfVFJBTlNGRVJfU1RBUlQgfCB0cmFuc19tb2RlKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBNU19UUkFOU0ZFUiwgTVNfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgTVNfVFJBTlNGRVJfRU5EKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgTVNfVFJBTlNfQ0ZHLCAwLCAwKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMiwgNTAwMCk7Ci0JaWYgKENIRUNLX01TX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkgewotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19UT19FUlJPUik7Ci0JCVRSQUNFX1JFVChjaGlwLCBtc19wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JfQotCi0JaWYgKCEodHBjICYgMHgwOCkpIHsJLyogUmVhZCBQYWNrZXQgKi8KLQkJLyogQ2hlY2sgQ1JDMTYgJiBSZWFkeSBUaW1lb3V0ICovCi0JCWlmIChjaGlwLT5yc3BfYnVmWzFdICYgTVNfQ1JDMTZfRVJSKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQ1JDMTZfRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIG1zX3BhcnNlX2Vycl9jb2RlKGNoaXApKTsKLQkJfQotCX0gZWxzZSB7IC8qIFdyaXRlIFBhY2tldCAqLwotCQlpZiAoQ0hLX01TUFJPKG1zX2NhcmQpICYmICEoY2hpcC0+cnNwX2J1ZlsxXSAmIDB4ODApKSB7Ci0JCQlpZiAoY2hpcC0+cnNwX2J1ZlsxXSAmIChNU19JTlRfRVJSIHwgTVNfSU5UX0NNRE5LKSkgewotCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQkJCVRSQUNFX1JFVChjaGlwLCBtc19wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBDaGVjayBUaW1lb3V0IG9mIFJlYWR5IFNpZ25hbCAqLwotCWlmIChjaGlwLT5yc3BfYnVmWzFdICYgTVNfUkRZX1RJTUVPVVQpIHsKLQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfVE9fRVJST1IpOwotCQlUUkFDRV9SRVQoY2hpcCwgbXNfcGFyc2VfZXJyX2NvZGUoY2hpcCkpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IG1zX3RyYW5zZmVyX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCB0cmFuc19tb2RlLCB1OCB0cGMsCi0JCSAgICAgdTE2IHNlY19jbnQsIHU4IGNmZywgaW50IG1vZGVfMmssIGludCB1c2Vfc2csIHZvaWQgKmJ1ZiwKLQkJICAgICBpbnQgYnVmX2xlbikKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQl1OCB2YWwsIGVycl9jb2RlID0gMCwgZmxhZyA9IDA7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwotCXVuc2lnbmVkIGludCBwaXBlOwotCi0JaWYgKCFidWYgfHwgIWJ1Zl9sZW4pCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlpZiAodHJhbnNfbW9kZSA9PSBNU19UTV9BVVRPX1JFQUQpIHsKLQkJcGlwZSA9IFJDVl9CVUxLX1BJUEUoY2hpcCk7Ci0JCWRpciA9IERNQV9GUk9NX0RFVklDRTsKLQkJZmxhZyA9IE1PREVfQ0RJUjsKLQkJZXJyX2NvZGUgPSBNU19GTEFTSF9SRUFEX0VSUk9SOwotCX0gZWxzZSBpZiAodHJhbnNfbW9kZSA9PSBNU19UTV9BVVRPX1dSSVRFKSB7Ci0JCXBpcGUgPSBTTkRfQlVMS19QSVBFKGNoaXApOwotCQlkaXIgPSBETUFfVE9fREVWSUNFOwotCQlmbGFnID0gTU9ERV9DRE9SOwotCQllcnJfY29kZSA9IE1TX0ZMQVNIX1dSSVRFX0VSUk9SOwotCX0gZWxzZSB7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFBDLCAweEZGLCB0cGMpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1NFQ1RPUl9DTlRfSCwgMHhGRiwKLQkJICAgICAgICh1OCkgKHNlY19jbnQgPj4gOCkpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1NFQ1RPUl9DTlRfTCwgMHhGRiwKLQkJICAgICAgICh1OCkgc2VjX2NudCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNfQ0ZHLCAweEZGLCBjZmcpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBSSU5HX0JVRkZFUik7Ci0KLQlpZiAobW9kZV8yaykKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfQ0ZHLCBNU18yS19TRUNUT1JfTU9ERSwKLQkJCSAgICAgICBNU18yS19TRUNUT1JfTU9ERSk7Ci0JZWxzZQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19DRkcsIE1TXzJLX1NFQ1RPUl9NT0RFLAotCQkJICAgICAgIDApOwotCi0JcnRzNTF4X3RyYW5zX2RtYV9lbmFibGUoZGlyLCBjaGlwLCBzZWNfY250ICogNTEyLCBETUFfNTEyKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgTVNfVFJBTlNGRVJfU1RBUlQgfCB0cmFuc19tb2RlKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBNU19UUkFOU0ZFUiwgTVNfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgTVNfVFJBTlNGRVJfRU5EKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBmbGFnIHwgU1RBR0VfTVNfU1RBVFVTLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0KLQkgICAgcnRzNTF4X3RyYW5zZmVyX2RhdGFfcmNjKGNoaXAsIHBpcGUsIGJ1ZiwgYnVmX2xlbiwgdXNlX3NnLCBOVUxMLAotCQkJCSAgICAgMTUwMDAsIGZsYWcpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIGVycl9jb2RlKTsKLQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAzLCAxNTAwMCk7Ci0JaWYgKENIRUNLX01TX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkgewotCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgZXJyX2NvZGUpOwotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JbXNfY2FyZC0+bGFzdF9yd19pbnQgPSB2YWwgPSBjaGlwLT5yc3BfYnVmWzFdOwotCWlmICh2YWwgJiAoTVNfSU5UX0NNRE5LIHwgTVNfSU5UX0VSUiB8IE1TX0NSQzE2X0VSUiB8IE1TX1JEWV9USU1FT1VUKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IG1zX3dyaXRlX2J5dGVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggdHBjLCB1OCBjbnQsIHU4IGNmZywgdTggKmRhdGEsCi0JCSAgIGludCBkYXRhX2xlbikKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbCwgaTsKLQotCWlmICghZGF0YSB8fCAoZGF0YV9sZW4gPCBjbnQpKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0VSUk9SKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBQUEJVRl9CQVNFMiArIGksIDB4RkYsCi0JCQkgICAgICAgZGF0YVtpXSk7Ci0JfQotCWlmIChjbnQgJSAyKQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBQUEJVRl9CQVNFMiArIGksCi0JCQkJMHhGRiwgMHhGRik7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUEMsIDB4RkYsIHRwYyk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfQllURV9DTlQsIDB4RkYsIGNudCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNfQ0ZHLCAweEZGLCBjZmcpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBQSU5HUE9OR19CVUZGRVIpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBNU19UUkFOU0ZFUl9TVEFSVCB8IE1TX1RNX1dSSVRFX0JZVEVTKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBNU19UUkFOU0ZFUiwgTVNfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgTVNfVFJBTlNGRVJfRU5EKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgNTAwMCk7Ci0JaWYgKENIRUNLX01TX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkgewotCQl1OCB2YWwgPSAwOwotCi0JCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBNU19UUkFOU19DRkcsICZ2YWwpOwotCQlSVFM1MVhfREVCVUdQKCJNU19UUkFOU19DRkc6IDB4JTAyeFxuIiwgdmFsKTsKLQotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0KLQkJaWYgKCEodHBjICYgMHgwOCkpIHsgLyogUmVhZCBQYWNrZXQgKi8KLQkJCS8qIENoZWNrIENSQzE2ICYgUmVhZHkgVGltZW91dCAqLwotCQkJaWYgKHZhbCAmIE1TX0NSQzE2X0VSUikgewotCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DUkMxNl9FUlJPUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIG1zX3BhcnNlX2Vycl9jb2RlKGNoaXApKTsKLQkJCX0KLQkJfSBlbHNlIHsgLyogV3JpdGUgUGFja2V0ICovCi0JCQlpZiAoQ0hLX01TUFJPKG1zX2NhcmQpICYmICEodmFsICYgMHg4MCkpIHsKLQkJCQlpZiAodmFsICYgKE1TX0lOVF9FUlIgfCBNU19JTlRfQ01ETkspKSB7Ci0JCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQkJCQlUUkFDRV9SRVQoY2hpcCwKLQkJCQkJCSAgbXNfcGFyc2VfZXJyX2NvZGUoY2hpcCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIENoZWNrIFRpbWVvdXQgb2YgUmVhZHkgU2lnbmFsICovCi0JCWlmICh2YWwgJiBNU19SRFlfVElNRU9VVCkgewotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX1RPX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBtc19wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JCX0KLQotCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfVE9fRVJST1IpOwotCQlUUkFDRV9SRVQoY2hpcCwgbXNfcGFyc2VfZXJyX2NvZGUoY2hpcCkpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IG1zX3JlYWRfYnl0ZXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCB0cGMsIHU4IGNudCwgdTggY2ZnLCB1OCAqZGF0YSwKLQkJICBpbnQgZGF0YV9sZW4pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWwsIGk7Ci0KLQlpZiAoIWRhdGEpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFBDLCAweEZGLCB0cGMpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0JZVEVfQ05ULCAweEZGLCBjbnQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TX0NGRywgMHhGRiwgY2ZnKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkgICAgICAgUElOR1BPTkdfQlVGRkVSKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgTVNfVFJBTlNGRVJfU1RBUlQgfCBNU19UTV9SRUFEX0JZVEVTKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBNU19UUkFOU0ZFUiwgTVNfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgTVNfVFJBTlNGRVJfRU5EKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbiAtIDE7IGkrKykKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBQUEJVRl9CQVNFMiArIGksIDAsIDApOwotCi0JaWYgKGRhdGFfbGVuICUgMikKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBQUEJVRl9CQVNFMiArIGRhdGFfbGVuLCAwLAotCQkJICAgICAgIDApOwotCWVsc2UKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBQUEJVRl9CQVNFMiArIGRhdGFfbGVuIC0gMSwKLQkJCSAgICAgICAwLCAwKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgZGF0YV9sZW4gKyAxLCA1MDAwKTsKLQlpZiAoQ0hFQ0tfTVNfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCXU4IHZhbCA9IDA7Ci0KLQkJcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIE1TX1RSQU5TX0NGRywgJnZhbCk7Ci0JCVJUUzUxWF9ERUJVR1AoIk1TX1RSQU5TX0NGRzogMHglMDJ4XG4iLCB2YWwpOwotCi0JCXJ0czUxeF9jbGVhcl9tc19lcnJvcihjaGlwKTsKLQotCQlpZiAoISh0cGMgJiAweDA4KSkgeyAvKiBSZWFkIFBhY2tldCAqLwotCQkJLyogQ2hlY2sgQ1JDMTYgJiBSZWFkeSBUaW1lb3V0ICovCi0JCQlpZiAodmFsICYgTVNfQ1JDMTZfRVJSKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0NSQzE2X0VSUk9SKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgbXNfcGFyc2VfZXJyX2NvZGUoY2hpcCkpOwotCQkJfQotCQl9IGVsc2UgeyAvKiBXcml0ZSBQYWNrZXQgKi8KLQkJCWlmIChDSEtfTVNQUk8obXNfY2FyZCkgJiYgISh2YWwgJiAweDgwKSkgewotCQkJCWlmICh2YWwgJiAoTVNfSU5UX0VSUiB8IE1TX0lOVF9DTUROSykpIHsKLQkJCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0NNRF9OSyk7Ci0JCQkJCVRSQUNFX1JFVChjaGlwLAotCQkJCQkJICBtc19wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLyogQ2hlY2sgVGltZW91dCBvZiBSZWFkeSBTaWduYWwgKi8KLQkJaWYgKHZhbCAmIE1TX1JEWV9USU1FT1VUKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfVE9fRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIG1zX3BhcnNlX2Vycl9jb2RlKGNoaXApKTsKLQkJfQotCi0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19UT19FUlJPUik7Ci0JCVRSQUNFX1JFVChjaGlwLCBtc19wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JfQotCi0JcnRzNTF4X3JlYWRfcnNwX2J1ZihjaGlwLCAxLCBkYXRhLCBkYXRhX2xlbik7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBtc19zZXRfcndfcmVnX2FkZHIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkgICAgICAgdTggcmVhZF9zdGFydCwgdTggcmVhZF9jbnQsIHU4IHdyaXRlX3N0YXJ0LCB1OCB3cml0ZV9jbnQpCi17Ci0JaW50IHJldHZhbCwgaTsKLQl1OCBkYXRhWzRdOwotCi0JZGF0YVswXSA9IHJlYWRfc3RhcnQ7Ci0JZGF0YVsxXSA9IHJlYWRfY250OwotCWRhdGFbMl0gPSB3cml0ZV9zdGFydDsKLQlkYXRhWzNdID0gd3JpdGVfY250OwotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBTRVRfUldfUkVHX0FEUlMsIDQsIE5PX1dBSVRfSU5ULCBkYXRhLAotCQkJCSAgIDQpOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JfQotCi0JVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLX0KLQotc3RhdGljIGludCBtc19zZW5kX2NtZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGNtZCwgdTggY2ZnKQotewotCXU4IGRhdGFbMl07Ci0KLQlkYXRhWzBdID0gY21kOwotCWRhdGFbMV0gPSAwOwotCi0JcmV0dXJuIG1zX3dyaXRlX2J5dGVzKGNoaXAsIFBST19TRVRfQ01ELCAxLCBjZmcsIGRhdGEsIDEpOwotfQotCi1zdGF0aWMgaW50IG1zX3NldF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkgICAgICB1OCByZWFkX3N0YXJ0LCB1OCByZWFkX2NvdW50LAotCQkgICAgICB1OCB3cml0ZV9zdGFydCwgdTggd3JpdGVfY291bnQsCi0JCSAgICAgIHU4IGNtZCwgdTggY2ZnLCB1OCAqZGF0YSwgaW50IGRhdGFfbGVuLCB1OCAqaW50X3N0YXQpCi17Ci0JaW50IHJldHZhbCwgaTsKLQl1OCB2YWw7Ci0KLQlpZiAoIWRhdGEgfHwgKGRhdGFfbGVuIDw9IDApIHx8IChkYXRhX2xlbiA+IDEyOCkpIHsKLQkJUlRTNTFYX0RFQlVHUCgibXNfc2V0X2NtZCAoZGF0YV9sZW4gPSAlZClcbiIsIGRhdGFfbGVuKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlyZXR2YWwgPQotCSAgICBtc19zZXRfcndfcmVnX2FkZHIoY2hpcCwgcmVhZF9zdGFydCwgcmVhZF9jb3VudCwgd3JpdGVfc3RhcnQsCi0JCQkgICAgICAgd3JpdGVfY291bnQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBXUklURV9SRUcsIHdyaXRlX2NvdW50LCBOT19XQUlUX0lOVCwKLQkJCQkgICBkYXRhLCBkYXRhX2xlbik7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTVNfTUFYX1JFVFJZX0NPVU5UKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX05PX0VSUk9SKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNU19NQVhfUkVUUllfQ09VTlQ7IGkrKykgewotCQlyZXR2YWwgPSBtc19zZW5kX2NtZChjaGlwLCBjbWQsIFdBSVRfSU5UKTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBNU19NQVhfUkVUUllfQ09VTlQpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JLyogR0VUX0lOVCBSZWdpc3RlciAqLwotCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0JcmV0dmFsID0gbXNfcmVhZF9ieXRlcyhjaGlwLCBHRVRfSU5ULCAxLCBOT19XQUlUX0lOVCwgJnZhbCwgMSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAoaW50X3N0YXQpCi0JCSppbnRfc3RhdCA9IHZhbDsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotI2lmZGVmIE1TX1NQRUVEVVAKLXN0YXRpYyBpbnQgbXNfYXV0b19zZXRfY21kKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJCSAgIHU4IHJlYWRfc3RhcnQsIHU4IHJlYWRfY291bnQsCi0JCQkgICB1OCB3cml0ZV9zdGFydCwgdTggd3JpdGVfY291bnQsCi0JCQkgICB1OCBjbWQsIHU4IGNmZywgdTggKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCSAgIHU4ICppbnRfc3RhdCkKLXsKLQlpbnQgcmV0dmFsOwotCWludCBpOwotCi0JaWYgKCFkYXRhIHx8IChkYXRhX2xlbiA8PSAwKSB8fCAoZGF0YV9sZW4gPiAxMjgpKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIm1zX2F1dG9fc2V0X2NtZCAoZGF0YV9sZW4gPSAlZClcbiIsIGRhdGFfbGVuKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19SRUFEX1NUQVJULCAweEZGLCByZWFkX3N0YXJ0KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19SRUFEX0NPVU5ULCAweEZGLCByZWFkX2NvdW50KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19XUklURV9TVEFSVCwgMHhGRiwgd3JpdGVfc3RhcnQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1dSSVRFX0NPVU5ULCAweEZGLCB3cml0ZV9jb3VudCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfQ09NTUFORCwgMHhGRiwgY21kKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TX0NGRywgMHhGRiwgY2ZnKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkgICAgICAgUElOR1BPTkdfQlVGRkVSKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgaSwgMHhGRiwKLQkJCSAgICAgICBkYXRhW2ldKTsKLQl9Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUkFOU0ZFUiwgMHhGRiwKLQkJICAgICAgIE1TX1RSQU5TRkVSX1NUQVJUIHwgTVNfVE1fU0VUX0NNRCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgTVNfVFJBTlNGRVIsIE1TX1RSQU5TRkVSX0VORCwKLQkJICAgICAgIE1TX1RSQU5TRkVSX0VORCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiB8IFNUQUdFX01TX1NUQVRVUywgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDMsIDUwMDApOwotCi0JaWYgKENIRUNLX01TX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkgewotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JaWYgKGludF9zdGF0KQotCQkqaW50X3N0YXQgPSBjaGlwLT5yc3BfYnVmWzJdOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbXNfc2V0X2luaXRfcGFyYShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlpZiAoQ0hLX0hHOEJJVChtc19jYXJkKSkgewotCQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQkJbXNfY2FyZC0+bXNfY2xvY2sgPSBjaGlwLT5vcHRpb24uYXNpY19tc19oZ19jbGs7Ci0JCWVsc2UKLQkJCW1zX2NhcmQtPm1zX2Nsb2NrID0gY2hpcC0+b3B0aW9uLmZwZ2FfbXNfaGdfY2xrOwotCX0gZWxzZSBpZiAoQ0hLX01TUFJPKG1zX2NhcmQpIHx8IENIS19NUzRCSVQobXNfY2FyZCkpIHsKLQkJaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJCW1zX2NhcmQtPm1zX2Nsb2NrID0gY2hpcC0+b3B0aW9uLmFzaWNfbXNfNGJpdF9jbGs7Ci0JCWVsc2UKLQkJCW1zX2NhcmQtPm1zX2Nsb2NrID0gY2hpcC0+b3B0aW9uLmZwZ2FfbXNfNGJpdF9jbGs7Ci0JfSBlbHNlIHsKLQkJaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJCW1zX2NhcmQtPm1zX2Nsb2NrID0gMzg7Ci0JCWVsc2UKLQkJCW1zX2NhcmQtPm1zX2Nsb2NrID0gQ0xLXzQwOwotCX0KLQotCXJldHZhbCA9IHN3aXRjaF9jbG9jayhjaGlwLCBtc19jYXJkLT5tc19jbG9jayk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VsZWN0X2NhcmQoY2hpcCwgTVNfQ0FSRCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBtc19zd2l0Y2hfY2xvY2soc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbGVjdF9jYXJkKGNoaXAsIE1TX0NBUkQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gc3dpdGNoX2Nsb2NrKGNoaXAsIG1zX2NhcmQtPm1zX2Nsb2NrKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgbXNfcHVsbF9jdGxfZGlzYWJsZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwxLCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDIsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMywgMHhGRiwgMHg5NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw0LCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDUsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNiwgMHhGRiwgMHhBNSk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDEsIDB4RkYsIDB4NjUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg1NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwzLCAweEZGLCAweDk1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDQsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNSwgMHhGRiwgMHg1Nik7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw2LCAweEZGLCAweDU5KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG1zX3B1bGxfY3RsX2VuYWJsZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwxLCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDIsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMywgMHhGRiwgMHg5NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw0LCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDUsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNiwgMHhGRiwgMHhBNSk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDEsIDB4RkYsIDB4NjUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg1NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwzLCAweEZGLCAweDk1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDQsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNSwgMHhGRiwgMHg1NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw2LCAweEZGLCAweDU5KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbXNfcHJlcGFyZV9yZXNldChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQltc19jYXJkLT5tc190eXBlID0gMDsKLQltc19jYXJkLT5jaGVja19tc19mbG93ID0gMDsKLQltc19jYXJkLT5zd2l0Y2hfOGJpdF9mYWlsID0gMDsKLQltc19jYXJkLT5kZWxheV93cml0ZS5kZWxheV93cml0ZV9mbGFnID0gMDsKLQotCW1zX2NhcmQtPnByb191bmRlcl9mb3JtYXR0aW5nID0gMDsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCWlmIChjaGlwLT5hc2ljX2NvZGUpIHsKLQkJbXNfcHVsbF9jdGxfZW5hYmxlKGNoaXApOwotCX0gZWxzZSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEZQR0FfUFVMTF9DVEwsCi0JCQkgICAgICAgRlBHQV9NU19QVUxMX0NUTF9CSVQgfCAweDIwLCAwKTsKLQl9Ci0JLyogVHJpLXN0YXRlIE1TIG91dHB1dCAqLwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfT0UsIE1TX09VVFBVVF9FTiwgMCk7Ci0KLQlpZiAoIWNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFdSX0NUTCwgUE9XRVJfTUFTSywKLQkJCSAgICAgICBQT1dFUl9PRkYpOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAoIWNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKSB7Ci0JCXdhaXRfdGltZW91dCgyNTApOwotCi0JCXJ0czUxeF9jYXJkX3Bvd2VyX29uKGNoaXAsIE1TX0NBUkQpOwotCQl3YWl0X3RpbWVvdXQoMTUwKTsKLQotI2lmZGVmIFNVUFBPUlRfT0NQCi0JCXJ0czUxeF9nZXRfY2FyZF9zdGF0dXMoY2hpcCwgJihjaGlwLT5jYXJkX3N0YXR1cykpOwotCQkvKiBnZXQgT0NQIHN0YXR1cyAqLwotCQljaGlwLT5vY3Bfc3RhdCA9IChjaGlwLT5jYXJkX3N0YXR1cyA+PiA0KSAmIDB4MDM7Ci0KLQkJaWYgKGNoaXAtPm9jcF9zdGF0ICYgKE1TX09DUF9OT1cgfCBNU19PQ1BfRVZFUikpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIk92ZXIgY3VycmVudCwgT0NQU1RBVCBpcyAweCV4XG4iLAotCQkJCSAgICAgICBjaGlwLT5vY3Bfc3RhdCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQkvKiBFbmFibGUgTVMgT3V0cHV0ICovCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9PRSwgTVNfT1VUUFVUX0VOLAotCQkgICAgICAgTVNfT1VUUFVUX0VOKTsKLQotCS8qIFJlc2V0IFJlZ2lzdGVycyAqLwotCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0NGRywgMHhGRiwKLQkJCSAgICAgICBTQU1QTEVfVElNRV9SSVNJTkcgfCBQVVNIX1RJTUVfREVGQVVMVCB8Ci0JCQkgICAgICAgTk9fRVhURU5EX1RPR0dMRSB8IE1TX0JVU19XSURUSF8xKTsKLQllbHNlCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0NGRywgMHhGRiwKLQkJCSAgICAgICBTQU1QTEVfVElNRV9GQUxMSU5HIHwgUFVTSF9USU1FX0RFRkFVTFQgfAotCQkJICAgICAgIE5PX0VYVEVORF9UT0dHTEUgfCBNU19CVVNfV0lEVEhfMSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNfQ0ZHLCAweEZGLAotCQkgICAgICAgTk9fV0FJVF9JTlQgfCBOT19BVVRPX1JFQURfSU5UX1JFRyk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIG1zX3NldF9pbml0X3BhcmEoY2hpcCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfaWRlbnRpZnlfbWVkaWFfdHlwZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBzd2l0Y2hfOGJpdF9idXMpCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWwsIGk7Ci0JdTggdmFsOwotCi0JcmV0dmFsID0gbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIFByb19TdGF0dXNSZWcsIDYsIFN5c3RlbVBhcm0sIDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JLyogR2V0IFJlZ2lzdGVyIGZvcm0gTVMtUFJPIGNhcmQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVNfTUFYX1JFVFJZX0NPVU5UOyBpKyspIHsKLQkJcmV0dmFsID0KLQkJICAgIG1zX3RyYW5zZmVyX3RwYyhjaGlwLCBNU19UTV9SRUFEX0JZVEVTLCBSRUFEX1JFRywgNiwKLQkJCQkgICAgTk9fV0FJVF9JTlQpOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IE1TX01BWF9SRVRSWV9DT1VOVCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBQUEJVRl9CQVNFMiArIDIsICZ2YWwpOwotCVJUUzUxWF9ERUJVR1AoIlR5cGUgcmVnaXN0ZXI6IDB4JXhcbiIsIHZhbCk7Ci0JaWYgKHZhbCAhPSAweDAxKSB7Ci0JCWlmICh2YWwgIT0gMHgwMikKLQkJCW1zX2NhcmQtPmNoZWNrX21zX2Zsb3cgPSAxOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQkvKiBDYXRlZ29yeSBSZWdpc3RlciAqLwotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBQUEJVRl9CQVNFMiArIDQsICZ2YWwpOwotCVJUUzUxWF9ERUJVR1AoIkNhdGVnb3J5IHJlZ2lzdGVyOiAweCV4XG4iLCB2YWwpOwotCWlmICh2YWwgIT0gMCkgewotCQltc19jYXJkLT5jaGVja19tc19mbG93ID0gMTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0JLyogQ2xhc3MgUmVnaXN0ZXIgKi8KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgUFBCVUZfQkFTRTIgKyA1LCAmdmFsKTsKLQlSVFM1MVhfREVCVUdQKCJDbGFzcyByZWdpc3RlcjogMHgleFxuIiwgdmFsKTsKLQlpZiAodmFsID09IDApIHsKLQkJUlRTNTFYX1JFQURfUkVHKGNoaXAsIFBQQlVGX0JBU0UyLCAmdmFsKTsKLQkJaWYgKHZhbCAmIFdSVF9QUlRDVCkKLQkJCWNoaXAtPmNhcmRfd3AgfD0gTVNfQ0FSRDsKLQkJZWxzZQotCQkJY2hpcC0+Y2FyZF93cCAmPSB+TVNfQ0FSRDsKLQl9IGVsc2UgaWYgKCh2YWwgPT0gMHgwMSkgfHwgKHZhbCA9PSAweDAyKSB8fCAodmFsID09IDB4MDMpKSB7Ci0JCWNoaXAtPmNhcmRfd3AgfD0gTVNfQ0FSRDsKLQl9IGVsc2UgewotCQltc19jYXJkLT5jaGVja19tc19mbG93ID0gMTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQltc19jYXJkLT5tc190eXBlIHw9IFRZUEVfTVNQUk87Ci0KLQkvKiBDaGVjayBNU1Byby1IRyBDYXJkLCB1c2UgSUYgTW9kZSBSZWdpc3RlciB0byBkaXN0aW5ndWlzaCAqLwotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBQUEJVRl9CQVNFMiArIDMsICZ2YWwpOwotCVJUUzUxWF9ERUJVR1AoIklGIE1vZGUgcmVnaXN0ZXI6IDB4JXhcbiIsIHZhbCk7Ci0JaWYgKHZhbCA9PSAwKSB7Ci0JCW1zX2NhcmQtPm1zX3R5cGUgJj0gMHgwRjsKLQl9IGVsc2UgaWYgKHZhbCA9PSA3KSB7Ci0JCWlmIChzd2l0Y2hfOGJpdF9idXMpCi0JCQltc19jYXJkLT5tc190eXBlIHw9IE1TX0hHOwotCQllbHNlCi0JCQltc19jYXJkLT5tc190eXBlICY9IDB4MEY7Ci0JfSBlbHNlIHsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQkvKiBlbmQgUHJvY2VkdXJlIHRvIGlkZW50aWZ5IE1lZGlhIFR5cGUgKi8KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfY29uZmlybV9jcHVfc3RhcnR1cChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbCwgaSwgazsKLQl1OCB2YWw7Ci0KLQkvKiBDb25maXJtIENQVSBTdGFydFVwICovCi0JayA9IDA7Ci0JZG8gewotCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIE1TX0NBUkQpID09IENEX05PVF9FWElTVCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCQlyZXR2YWwgPQotCQkJICAgIG1zX3JlYWRfYnl0ZXMoY2hpcCwgR0VUX0lOVCwgMSwgTk9fV0FJVF9JTlQsICZ2YWwsCi0JCQkJCSAgMSk7Ci0JCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpID09IE1TX01BWF9SRVRSWV9DT1VOVCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQkJaWYgKGsgPiAxMDApCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQlrKys7Ci0JCXdhaXRfdGltZW91dCgxMDApOwotCX0gd2hpbGUgKCEodmFsICYgSU5UX1JFR19DRUQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNU19NQVhfUkVUUllfQ09VTlQ7IGkrKykgewotCQlyZXR2YWwgPSBtc19yZWFkX2J5dGVzKGNoaXAsIEdFVF9JTlQsIDEsIE5PX1dBSVRfSU5ULCAmdmFsLCAxKTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBNU19NQVhfUkVUUllfQ09VTlQpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlpZiAodmFsICYgSU5UX1JFR19FUlIpIHsKLQkJaWYgKHZhbCAmIElOVF9SRUdfQ01ETkspIHsJLyogQ01ETksgPSAxICovCi0JCQljaGlwLT5jYXJkX3dwIHw9IChNU19DQVJEKTsKLQkJfSBlbHNlIHsJLyogQ01ETksgPSAwICovCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JfQotCS8qLS0gIGVuZCBjb25maXJtIENQVSBzdGFydHVwICovCi0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfc3dpdGNoX3BhcmFsbGVsX2J1cyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbCwgaTsKLQl1OCBkYXRhWzJdOwotCi0JZGF0YVswXSA9IFBBUkFMTEVMXzRCSVRfSUY7Ci0JZGF0YVsxXSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBXUklURV9SRUcsIDEsIE5PX1dBSVRfSU5ULCBkYXRhLCAyKTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCX0KLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtc19zd2l0Y2hfOGJpdF9idXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBpOwotCXU4IGRhdGFbMl07Ci0KLQlkYXRhWzBdID0gUEFSQUxMRUxfOEJJVF9JRjsKLQlkYXRhWzFdID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTVNfTUFYX1JFVFJZX0NPVU5UOyBpKyspIHsKLQkJcmV0dmFsID0KLQkJICAgIG1zX3dyaXRlX2J5dGVzKGNoaXAsIFdSSVRFX1JFRywgMSwgTk9fV0FJVF9JTlQsIGRhdGEsIDIpOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJYnJlYWs7Ci0JfQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIE1TX0NGRywgMHg5OCwKLQkJCSBNU19CVVNfV0lEVEhfOCB8IFNBTVBMRV9USU1FX0ZBTExJTkcpOwotCW1zX2NhcmQtPm1zX3R5cGUgfD0gTVNfOEJJVDsKLQotCXJldHZhbCA9IG1zX3NldF9pbml0X3BhcmEoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTVNfTUFYX1JFVFJZX0NPVU5UOyBpKyspIHsKLQkJcmV0dmFsID0KLQkJICAgIG1zX3RyYW5zZmVyX3RwYyhjaGlwLCBNU19UTV9SRUFEX0JZVEVTLCBHRVRfSU5ULCAxLAotCQkJCSAgICBOT19XQUlUX0lOVCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfcHJvX3Jlc2V0X2Zsb3coc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgc3dpdGNoXzhiaXRfYnVzKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlyZXR2YWwgPSBtc19wcmVwYXJlX3Jlc2V0KGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJcmV0dmFsID0gbXNfaWRlbnRpZnlfbWVkaWFfdHlwZShjaGlwLCBzd2l0Y2hfOGJpdF9idXMpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJcmV0dmFsID0gbXNfY29uZmlybV9jcHVfc3RhcnR1cChjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXJldHZhbCA9IG1zX3N3aXRjaF9wYXJhbGxlbF9idXMoY2hpcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgTVNfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKQotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIE1TX0NGRywgMHgxOCwgTVNfQlVTX1dJRFRIXzQpOwotCi0JUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBNU19DRkcsIFBVU0hfVElNRV9PREQsIFBVU0hfVElNRV9PREQpOwotCi0JcmV0dmFsID0gbXNfc2V0X2luaXRfcGFyYShjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmIChDSEtfTVNIRyhtc19jYXJkKSAmJiBzd2l0Y2hfOGJpdF9idXMpIHsKLQkJcmV0dmFsID0gbXNfc3dpdGNoXzhiaXRfYnVzKGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQltc19jYXJkLT5zd2l0Y2hfOGJpdF9mYWlsID0gMTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi0jaWZkZWYgWENfUE9XRVJDTEFTUwotc3RhdGljIGludCBtc3hjX2NoYW5nZV9wb3dlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IG1vZGUpCi17Ci0JaW50IHJldHZhbDsKLQl1OCBidWZbNl07Ci0KLQlydHM1MXhfbXNfY2xlYW51cF93b3JrKGNoaXApOwotCi0JLyogU2V0IFBhcmFtZXRlciBSZWdpc3RlciAqLwotCXJldHZhbCA9IG1zX3NldF9yd19yZWdfYWRkcihjaGlwLCAwLCAwLCBQcm9fRGF0YUNvdW50MSwgNik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlidWZbMF0gPSAwOwotCWJ1ZlsxXSA9IG1vZGU7Ci0JYnVmWzJdID0gMDsKLQlidWZbM10gPSAwOwotCWJ1Zls0XSA9IDA7Ci0JYnVmWzVdID0gMDsKLQotCXJldHZhbCA9IG1zX3dyaXRlX2J5dGVzKGNoaXAsIFBST19XUklURV9SRUcsIDYsIE5PX1dBSVRfSU5ULCBidWYsIDYpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gbXNfc2VuZF9jbWQoY2hpcCwgWENfQ0hHX1BPV0VSLCBXQUlUX0lOVCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgTVNfVFJBTlNfQ0ZHLCBidWYpOwotCWlmIChidWZbMF0gJiAoTVNfSU5UX0NNRE5LIHwgTVNfSU5UX0VSUikpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBtc19yZWFkX2F0dHJpYnV0ZV9pbmZvKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbCwgaTsKLQl1OCB2YWwsICpidWYsIGNsYXNzX2NvZGUsIGRldmljZV90eXBlLCBzdWJfY2xhc3MsIGRhdGFbMTZdOwotCXUxNiB0b3RhbF9ibGsgPSAwLCBibGtfc2l6ZSA9IDA7Ci0jaWZkZWYgU1VQUE9SVF9NU1hDCi0JdTMyIHhjX3RvdGFsX2JsayA9IDAsIHhjX2Jsa19zaXplID0gMDsKLSNlbmRpZgotCXUzMiBzeXNfaW5mb19hZGRyID0gMCwgc3lzX2luZm9fc2l6ZTsKLSNpZmRlZiBTVVBQT1JUX1BDR0xfMVAxOAotCXUzMiBtb2RlbF9uYW1lX2FkZHIgPSAwLCBtb2RlbF9uYW1lX3NpemU7Ci0JaW50IGZvdW5kX3N5c19pbmZvID0gMCwgZm91bmRfbW9kZWxfbmFtZSA9IDA7Ci0jZW5kaWYKLQotCXJldHZhbCA9IG1zX3NldF9yd19yZWdfYWRkcihjaGlwLCBQcm9fSW50UmVnLCAyLCBQcm9fU3lzdGVtUGFybSwgNyk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAoQ0hLX01TOEJJVChtc19jYXJkKSkKLQkJZGF0YVswXSA9IFBBUkFMTEVMXzhCSVRfSUY7Ci0JZWxzZQotCQlkYXRhWzBdID0gUEFSQUxMRUxfNEJJVF9JRjsKLQlkYXRhWzFdID0gMDsKLQotCWRhdGFbMl0gPSAweDQwOwotCWRhdGFbM10gPSAwOwotCWRhdGFbNF0gPSAwOwotCWRhdGFbNV0gPSAwOwotCS8qIFN0YXJ0IGFkZHJlc3MgMCAqLwotCWRhdGFbNl0gPSAwOwotCWRhdGFbN10gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBQUk9fV1JJVEVfUkVHLCA3LCBOT19XQUlUX0lOVCwgZGF0YSwKLQkJCQkgICA4KTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCX0KLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWJ1ZiA9IGttYWxsb2MoNjQgKiA1MTIsIEdGUF9LRVJORUwpOwotCWlmIChidWYgPT0gTlVMTCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19OT01FTSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTVNfTUFYX1JFVFJZX0NPVU5UOyBpKyspIHsKLQkJcmV0dmFsID0gbXNfc2VuZF9jbWQoY2hpcCwgUFJPX1JFQURfQVRSQiwgV0FJVF9JTlQpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJY29udGludWU7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgTVNfVFJBTlNfQ0ZHLCAmdmFsKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJa2ZyZWUoYnVmKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQkJaWYgKCEodmFsICYgTVNfSU5UX0JSRVEpKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCXJldHZhbCA9Ci0JCSAgICBtc190cmFuc2Zlcl9kYXRhKGNoaXAsIE1TX1RNX0FVVE9fUkVBRCwgUFJPX1JFQURfTE9OR19EQVRBLAotCQkJCSAgICAgMHg0MCwgV0FJVF9JTlQsIDAsIDAsIGJ1ZiwgNjQgKiA1MTIpOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJYnJlYWs7Ci0JCWVsc2UKLQkJCXJ0czUxeF9jbGVhcl9tc19lcnJvcihjaGlwKTsKLQl9Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlrZnJlZShidWYpOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlpID0gMDsKLQlkbyB7Ci0JCXJldHZhbCA9IHJ0czUxeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIE1TX1RSQU5TX0NGRywgJnZhbCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWtmcmVlKGJ1Zik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJfQotCi0JCWlmICgodmFsICYgTVNfSU5UX0NFRCkgfHwgISh2YWwgJiBNU19JTlRfQlJFUSkpCi0JCQlicmVhazsKLQotCQlyZXR2YWwgPQotCQkgICAgbXNfdHJhbnNmZXJfdHBjKGNoaXAsIE1TX1RNX05PUk1BTF9SRUFELCBQUk9fUkVBRF9MT05HX0RBVEEsCi0JCQkJICAgIDAsIFdBSVRfSU5UKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJa2ZyZWUoYnVmKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0KLQkJaSsrOwotCX0gd2hpbGUgKGkgPCAxMDI0KTsKLQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JaWYgKChidWZbMF0gIT0gMHhhNSkgJiYgKGJ1ZlsxXSAhPSAweGMzKSkgewotCQkvKiBTaWduYXR1cmUgY29kZSBpcyB3cm9uZyAqLwotCQlrZnJlZShidWYpOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmICgoYnVmWzRdIDwgMSkgfHwgKGJ1Zls0XSA+IDEyKSkgewotCQlrZnJlZShidWYpOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBidWZbNF07IGkrKykgewotCQlpbnQgY3VyX2FkZHJfb2ZmID0gMTYgKyBpICogMTI7Ci0KLSNpZmRlZiBTVVBQT1JUX01TWEMKLQkJaWYgKChidWZbY3VyX2FkZHJfb2ZmICsgOF0gPT0gMHgxMCkKLQkJICAgIHx8IChidWZbY3VyX2FkZHJfb2ZmICsgOF0gPT0gMHgxMykpIHsKLSNlbHNlCi0JCWlmIChidWZbY3VyX2FkZHJfb2ZmICsgOF0gPT0gMHgxMCkgewotI2VuZGlmCi0JCQlzeXNfaW5mb19hZGRyID0gKCh1MzIpIGJ1ZltjdXJfYWRkcl9vZmYgKyAwXSA8PCAyNCkgfAotCQkJICAgICgodTMyKSBidWZbY3VyX2FkZHJfb2ZmICsgMV0gPDwgMTYpIHwKLQkJCSAgICAoKHUzMikgYnVmW2N1cl9hZGRyX29mZiArIDJdIDw8IDgpIHwKLQkJCSAgICBidWZbY3VyX2FkZHJfb2ZmICsgM107Ci0JCQlzeXNfaW5mb19zaXplID0KLQkJCSAgICAoKHUzMikgYnVmW2N1cl9hZGRyX29mZiArIDRdIDw8IDI0KSB8Ci0JCQkgICAgKCh1MzIpIGJ1ZltjdXJfYWRkcl9vZmYgKyA1XSA8PCAxNikgfAotCQkJICAgICgodTMyKSBidWZbY3VyX2FkZHJfb2ZmICsgNl0gPDwgOCkgfAotCQkJICAgIGJ1ZltjdXJfYWRkcl9vZmYgKyA3XTsKLQkJCVJUUzUxWF9ERUJVR1AoInN5c19pbmZvX2FkZHIgPSAweCV4LCBzeXNfaW5mb19zaXplID0gMHgleFxuIiwKLQkJCQkJCXN5c19pbmZvX2FkZHIsIHN5c19pbmZvX3NpemUpOwotCQkJaWYgKHN5c19pbmZvX3NpemUgIT0gOTYpIHsKLQkJCQlrZnJlZShidWYpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCQlpZiAoc3lzX2luZm9fYWRkciA8IDB4MUEwKSB7Ci0JCQkJa2ZyZWUoYnVmKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQkJaWYgKChzeXNfaW5mb19zaXplICsgc3lzX2luZm9fYWRkcikgPiAweDgwMDApIHsKLQkJCQlrZnJlZShidWYpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0jaWZkZWYgU1VQUE9SVF9NU1hDCi0JCQlpZiAoYnVmW2N1cl9hZGRyX29mZiArIDhdID09IDB4MTMpCi0JCQkJbXNfY2FyZC0+bXNfdHlwZSB8PSBNU19YQzsKLSNlbmRpZgotI2lmZGVmIFNVUFBPUlRfUENHTF8xUDE4Ci0JCQlmb3VuZF9zeXNfaW5mbyA9IDE7Ci0jZWxzZQotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJfQotI2lmZGVmIFNVUFBPUlRfUENHTF8xUDE4Ci0JCWlmIChidWZbY3VyX2FkZHJfb2ZmICsgOF0gPT0gMHgxNSkgewotCQkJbW9kZWxfbmFtZV9hZGRyID0gKCh1MzIpIGJ1ZltjdXJfYWRkcl9vZmYgKyAwXSA8PCAyNCkgfAotCQkJICAgICgodTMyKSBidWZbY3VyX2FkZHJfb2ZmICsgMV0gPDwgMTYpIHwKLQkJCSAgICAoKHUzMikgYnVmW2N1cl9hZGRyX29mZiArIDJdIDw8IDgpIHwKLQkJCSAgICBidWZbY3VyX2FkZHJfb2ZmICsgM107Ci0JCQltb2RlbF9uYW1lX3NpemUgPQotCQkJICAgICgodTMyKSBidWZbY3VyX2FkZHJfb2ZmICsgNF0gPDwgMjQpIHwKLQkJCSAgICAoKHUzMikgYnVmW2N1cl9hZGRyX29mZiArIDVdIDw8IDE2KSB8Ci0JCQkgICAgKCh1MzIpIGJ1ZltjdXJfYWRkcl9vZmYgKyA2XSA8PCA4KSB8Ci0JCQkgICAgYnVmW2N1cl9hZGRyX29mZiArIDddOwotCQkJUlRTNTFYX0RFQlVHUCgibW9kZWxfbmFtZV9hZGRyID0gMHgleCwgbW9kZWxfbmFtZV9zaXplID0gMHgleFxuIiwKLQkJCQkJbW9kZWxfbmFtZV9hZGRyLCBtb2RlbF9uYW1lX3NpemUpOwotCQkJaWYgKG1vZGVsX25hbWVfc2l6ZSAhPSA0OCkgewotCQkJCWtmcmVlKGJ1Zik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJCWlmIChtb2RlbF9uYW1lX2FkZHIgPCAweDFBMCkgewotCQkJCWtmcmVlKGJ1Zik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJCWlmICgobW9kZWxfbmFtZV9zaXplICsgbW9kZWxfbmFtZV9hZGRyKSA+IDB4ODAwMCkgewotCQkJCWtmcmVlKGJ1Zik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQotCQkJZm91bmRfbW9kZWxfbmFtZSA9IDE7Ci0JCX0KLQotCQlpZiAoZm91bmRfc3lzX2luZm8gJiYgZm91bmRfbW9kZWxfbmFtZSkKLQkJCWJyZWFrOwotI2VuZGlmCi0JfQotCi0JaWYgKGkgPT0gYnVmWzRdKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JY2xhc3NfY29kZSA9IGJ1ZltzeXNfaW5mb19hZGRyICsgMF07Ci0JZGV2aWNlX3R5cGUgPSBidWZbc3lzX2luZm9fYWRkciArIDU2XTsKLQlzdWJfY2xhc3MgPSBidWZbc3lzX2luZm9fYWRkciArIDQ2XTsKLSNpZmRlZiBTVVBQT1JUX01TWEMKLQlpZiAoQ0hLX01TWEMobXNfY2FyZCkpIHsKLQkJeGNfdG90YWxfYmxrID0gKCh1MzIpIGJ1ZltzeXNfaW5mb19hZGRyICsgNl0gPDwgMjQpIHwKLQkJICAgICgodTMyKSBidWZbc3lzX2luZm9fYWRkciArIDddIDw8IDE2KSB8Ci0JCSAgICAoKHUzMikgYnVmW3N5c19pbmZvX2FkZHIgKyA4XSA8PCA4KSB8Ci0JCSAgICBidWZbc3lzX2luZm9fYWRkciArIDldOwotCQl4Y19ibGtfc2l6ZSA9ICgodTMyKSBidWZbc3lzX2luZm9fYWRkciArIDMyXSA8PCAyNCkgfAotCQkgICAgKCh1MzIpIGJ1ZltzeXNfaW5mb19hZGRyICsgMzNdIDw8IDE2KSB8Ci0JCSAgICAoKHUzMikgYnVmW3N5c19pbmZvX2FkZHIgKyAzNF0gPDwgOCkgfAotCQkgICAgYnVmW3N5c19pbmZvX2FkZHIgKyAzNV07Ci0JCVJUUzUxWF9ERUJVR1AoInhjX3RvdGFsX2JsayA9IDB4JXgsIHhjX2Jsa19zaXplID0gMHgleFxuIiwKLQkJCSAgICAgICB4Y190b3RhbF9ibGssIHhjX2Jsa19zaXplKTsKLQl9IGVsc2UgewotCQl0b3RhbF9ibGsgPQotCQkgICAgKCh1MTYpIGJ1ZltzeXNfaW5mb19hZGRyICsgNl0gPDwgOCkgfCBidWZbc3lzX2luZm9fYWRkciArCi0JCQkJCQkJICAgICAgN107Ci0JCWJsa19zaXplID0KLQkJICAgICgodTE2KSBidWZbc3lzX2luZm9fYWRkciArIDJdIDw8IDgpIHwgYnVmW3N5c19pbmZvX2FkZHIgKwotCQkJCQkJCSAgICAgIDNdOwotCQlSVFM1MVhfREVCVUdQKCJ0b3RhbF9ibGsgPSAweCV4LCBibGtfc2l6ZSA9IDB4JXhcbiIsIHRvdGFsX2JsaywKLQkJCSAgICAgICBibGtfc2l6ZSk7Ci0JfQotI2Vsc2UKLQl0b3RhbF9ibGsgPQotCSAgICAoKHUxNikgYnVmW3N5c19pbmZvX2FkZHIgKyA2XSA8PCA4KSB8IGJ1ZltzeXNfaW5mb19hZGRyICsgN107Ci0JYmxrX3NpemUgPSAoKHUxNikgYnVmW3N5c19pbmZvX2FkZHIgKyAyXSA8PCA4KSB8IGJ1ZltzeXNfaW5mb19hZGRyICsgM107Ci0JUlRTNTFYX0RFQlVHUCgidG90YWxfYmxrID0gMHgleCwgYmxrX3NpemUgPSAweCV4XG4iLCB0b3RhbF9ibGssCi0JCSAgICAgICBibGtfc2l6ZSk7Ci0jZW5kaWYKLQotCVJUUzUxWF9ERUJVR1AoImNsYXNzX2NvZGUgPSAweCV4LCBkZXZpY2VfdHlwZSA9IDB4JXgsIgotCQkJInN1Yl9jbGFzcyA9IDB4JXhcbiIsCi0JCQkJY2xhc3NfY29kZSwgZGV2aWNlX3R5cGUsIHN1Yl9jbGFzcyk7Ci0KLQltZW1jcHkobXNfY2FyZC0+cmF3X3N5c19pbmZvLCBidWYgKyBzeXNfaW5mb19hZGRyLCA5Nik7Ci0jaWZkZWYgU1VQUE9SVF9QQ0dMXzFQMTgKLQltZW1jcHkobXNfY2FyZC0+cmF3X21vZGVsX25hbWUsIGJ1ZiArIG1vZGVsX25hbWVfYWRkciwgNDgpOwotI2VuZGlmCi0KLQlrZnJlZShidWYpOwotCi0JLyogQ29uZmlybSBTeXN0ZW0gSW5mb3JtYXRpb24gKi8KLSNpZmRlZiBTVVBQT1JUX01TWEMKLQlpZiAoQ0hLX01TWEMobXNfY2FyZCkpIHsKLQkJaWYgKGNsYXNzX2NvZGUgIT0gMHgwMykKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfSBlbHNlIHsKLQkJaWYgKGNsYXNzX2NvZGUgIT0gMHgwMikKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotI2Vsc2UKLQlpZiAoY2xhc3NfY29kZSAhPSAweDAyKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotI2VuZGlmCi0KLQlpZiAoZGV2aWNlX3R5cGUgIT0gMHgwMCkgewotCQlpZiAoKGRldmljZV90eXBlID09IDB4MDEpIHx8IChkZXZpY2VfdHlwZSA9PSAweDAyKQotCQkgICAgfHwgKGRldmljZV90eXBlID09IDB4MDMpKQotCQkJY2hpcC0+Y2FyZF93cCB8PSBNU19DQVJEOwotCQllbHNlCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQlpZiAoc3ViX2NsYXNzICYgMHhDMCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCVJUUzUxWF9ERUJVR1AoImNsYXNzX2NvZGU6IDB4JXgsIGRldmljZV90eXBlOiAweCV4LCBzdWJfY2xhc3M6IDB4JXhcbiIsCi0JCSAgICAgICBjbGFzc19jb2RlLCBkZXZpY2VfdHlwZSwgc3ViX2NsYXNzKTsKLQotI2lmZGVmIFNVUFBPUlRfTVNYQwotCWlmIChDSEtfTVNYQyhtc19jYXJkKSkgewotCQljaGlwLT5jYXBhY2l0eVtjaGlwLT5jYXJkMmx1bltNU19DQVJEXV0gPSBtc19jYXJkLT5jYXBhY2l0eSA9Ci0JCSAgICB4Y190b3RhbF9ibGsgKiB4Y19ibGtfc2l6ZTsKLQl9IGVsc2UgewotCQljaGlwLT5jYXBhY2l0eVtjaGlwLT5jYXJkMmx1bltNU19DQVJEXV0gPSBtc19jYXJkLT5jYXBhY2l0eSA9Ci0JCSAgICB0b3RhbF9ibGsgKiBibGtfc2l6ZTsKLQl9Ci0jZWxzZQotCWNoaXAtPmNhcGFjaXR5W2NoaXAtPmNhcmQybHVuW01TX0NBUkRdXSA9IG1zX2NhcmQtPmNhcGFjaXR5ID0KLQkgICAgdG90YWxfYmxrICogYmxrX3NpemU7Ci0jZW5kaWYKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0FURQotaW50IG1nX3NldF90cGNfcGFyYV9zdWIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgdHlwZSwgdTggbWdfZW50cnlfbnVtKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IHJlc2V0X21zX3BybyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0jaWZkZWYgWENfUE9XRVJDTEFTUwotCXU4IGNoYW5nZV9wb3dlcl9jbGFzcyA9IDI7Ci0jZW5kaWYKLQotI2lmZGVmIFhDX1BPV0VSQ0xBU1MKLVJldHJ5OgotI2VuZGlmCi0JcmV0dmFsID0gbXNfcHJvX3Jlc2V0X2Zsb3coY2hpcCwgMSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlpZiAobXNfY2FyZC0+c3dpdGNoXzhiaXRfZmFpbCkgewotCQkJcmV0dmFsID0gbXNfcHJvX3Jlc2V0X2Zsb3coY2hpcCwgMCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9IGVsc2UgewotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQl9Ci0KLQlyZXR2YWwgPSBtc19yZWFkX2F0dHJpYnV0ZV9pbmZvKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotI2lmZGVmIFhDX1BPV0VSQ0xBU1MKLQlpZiAoQ0hLX0hHOEJJVChtc19jYXJkKSkKLQkJY2hhbmdlX3Bvd2VyX2NsYXNzID0gMDsKLQotCWlmIChjaGFuZ2VfcG93ZXJfY2xhc3MgJiYgQ0hLX01TWEMobXNfY2FyZCkpIHsKLQkJdTggcG93ZXJfY2xhc3NfbW9kZSA9IChtc19jYXJkLT5yYXdfc3lzX2luZm9bNDZdICYgMHgxOCkgPj4gMzsKLQkJUlRTNTFYX0RFQlVHUCgicG93ZXJfY2xhc3NfbW9kZSA9IDB4JXgiLCBwb3dlcl9jbGFzc19tb2RlKTsKLQkJaWYgKGNoYW5nZV9wb3dlcl9jbGFzcyA+IHBvd2VyX2NsYXNzX21vZGUpCi0JCQljaGFuZ2VfcG93ZXJfY2xhc3MgPSBwb3dlcl9jbGFzc19tb2RlOwotCQlpZiAoY2hhbmdlX3Bvd2VyX2NsYXNzKSB7Ci0JCQlyZXR2YWwgPSBtc3hjX2NoYW5nZV9wb3dlcihjaGlwLCBjaGFuZ2VfcG93ZXJfY2xhc3MpOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWNoYW5nZV9wb3dlcl9jbGFzcy0tOwotCQkJCWdvdG8gUmV0cnk7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0FURQotCXJldHZhbCA9IG1nX3NldF90cGNfcGFyYV9zdWIoY2hpcCwgMCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0jZW5kaWYKLQotCWlmIChDSEtfSEc4QklUKG1zX2NhcmQpKQotCQljaGlwLT5jYXJkX2J1c193aWR0aFtjaGlwLT5jYXJkMmx1bltNU19DQVJEXV0gPSA4OwotCWVsc2UKLQkJY2hpcC0+Y2FyZF9idXNfd2lkdGhbY2hpcC0+Y2FyZDJsdW5bTVNfQ0FSRF1dID0gNDsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtc19yZWFkX3N0YXR1c19yZWcoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0JdTggdmFsWzJdOwotCi0JcmV0dmFsID0gbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIFN0YXR1c1JlZzAsIDIsIDAsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gbXNfcmVhZF9ieXRlcyhjaGlwLCBSRUFEX1JFRywgMiwgTk9fV0FJVF9JTlQsIHZhbCwgMik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JaWYgKHZhbFsxXSAmIChTVFNfVUNEVCB8IFNUU19VQ0VYIHwgU1RTX1VDRkcpKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19GTEFTSF9SRUFEX0VSUk9SKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfY2hlY2tfYm9vdF9ibG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBibG9ja19hZGRyKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCXU4IGV4dHJhW01TX0VYVFJBX1NJWkVdLCBkYXRhWzEwXSwgdmFsID0gMDsKLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4ODsKLQl9IGVsc2UgewotCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDgwOwotCX0KLQkvKiBCbG9jayBBZGRyZXNzICovCi0JZGF0YVsxXSA9IDA7Ci0JZGF0YVsyXSA9ICh1OCkgKGJsb2NrX2FkZHIgPj4gOCk7Ci0JZGF0YVszXSA9ICh1OCkgYmxvY2tfYWRkcjsKLQkvKiBQYWdlIE51bWJlcgotCSAqIEV4dHJhIGRhdGEgYWNjZXNzIG1vZGUgKi8KLQlkYXRhWzRdID0gMHg0MDsKLQlkYXRhWzVdID0gMDsKLQotCXJldHZhbCA9IG1zX3NldF9jbWQoY2hpcCwgT3ZlcndyaXRlRmxhZywgTVNfRVhUUkFfU0laRSwgU3lzdGVtUGFybSwgNiwKLQkJCSAgICBCTE9DS19SRUFELCBXQUlUX0lOVCwgZGF0YSwgNiwgJnZhbCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAodmFsICYgSU5UX1JFR19DTUROSykgewotCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQ01EX05LKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0JaWYgKHZhbCAmIElOVF9SRUdfQ0VEKSB7Ci0JCWlmICh2YWwgJiBJTlRfUkVHX0VSUikgewotCQkJcmV0dmFsID0gbXNfcmVhZF9zdGF0dXNfcmVnKGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIE92ZXJ3cml0ZUZsYWcsCi0JCQkJCSAgICAgICBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLCA2KTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQl9Ci0KLQlyZXR2YWwgPQotCSAgICBtc19yZWFkX2J5dGVzKGNoaXAsIFJFQURfUkVHLCBNU19FWFRSQV9TSVpFLCBOT19XQUlUX0lOVCwgZXh0cmEsCi0JCQkgIE1TX0VYVFJBX1NJWkUpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKCEoZXh0cmFbMF0gJiBCTE9DS19PSykgfHwgKGV4dHJhWzFdICYgTk9UX0JPT1RfQkxPQ0spKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1zX3JlYWRfZXh0cmFfZGF0YShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsCi0JCQkgICAgICB1MTYgYmxvY2tfYWRkciwgdTggcGFnZV9udW0sIHU4ICpidWYsCi0JCQkgICAgICBpbnQgYnVmX2xlbikKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQl1OCB2YWwgPSAwLCBkYXRhWzEwXTsKLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4ODsKLQl9IGVsc2UgewotCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDgwOwotCX0KLQkvKiBCbG9jayBBZGRyZXNzICovCi0JZGF0YVsxXSA9IDA7Ci0JZGF0YVsyXSA9ICh1OCkgKGJsb2NrX2FkZHIgPj4gOCk7Ci0JZGF0YVszXSA9ICh1OCkgYmxvY2tfYWRkcjsKLQkvKiBQYWdlIE51bWJlcgotCSAqIEV4dHJhIGRhdGEgYWNjZXNzIG1vZGUgKi8KLQlkYXRhWzRdID0gMHg0MDsKLQlkYXRhWzVdID0gcGFnZV9udW07Ci0KLSNpZmRlZiBNU19TUEVFRFVQCi0JcmV0dmFsID0KLQkgICAgbXNfYXV0b19zZXRfY21kKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sIDYsCi0JCQkgICAgQkxPQ0tfUkVBRCwgV0FJVF9JTlQsIGRhdGEsIDYsICZ2YWwpOwotI2Vsc2UKLQlyZXR2YWwgPSBtc19zZXRfY21kKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sIDYsCi0JCQkgICAgQkxPQ0tfUkVBRCwgV0FJVF9JTlQsIGRhdGEsIDYsICZ2YWwpOwotI2VuZGlmCi0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAodmFsICYgSU5UX1JFR19DTUROSykgewotCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQ01EX05LKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0JaWYgKHZhbCAmIElOVF9SRUdfQ0VEKSB7Ci0JCWlmICh2YWwgJiBJTlRfUkVHX0VSUikgewotCQkJcmV0dmFsID0gbXNfcmVhZF9zdGF0dXNfcmVnKGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIE92ZXJ3cml0ZUZsYWcsCi0JCQkJCSAgICAgICBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLCA2KTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQl9Ci0KLQlyZXR2YWwgPQotCSAgICBtc19yZWFkX2J5dGVzKGNoaXAsIFJFQURfUkVHLCBNU19FWFRSQV9TSVpFLCBOT19XQUlUX0lOVCwgZGF0YSwKLQkJCSAgTVNfRVhUUkFfU0laRSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAoYnVmICYmIGJ1Zl9sZW4pIHsKLQkJaWYgKGJ1Zl9sZW4gPiBNU19FWFRSQV9TSVpFKQotCQkJYnVmX2xlbiA9IE1TX0VYVFJBX1NJWkU7Ci0JCW1lbWNweShidWYsIGRhdGEsIGJ1Zl9sZW4pOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtc193cml0ZV9leHRyYV9kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJCSAgICAgICB1MTYgYmxvY2tfYWRkciwgdTggcGFnZV9udW0sIHU4ICpidWYsCi0JCQkgICAgICAgaW50IGJ1Zl9sZW4pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWwsIGk7Ci0JdTggdmFsID0gMCwgZGF0YVsxNl07Ci0KLQlpZiAoIWJ1ZiB8fCAoYnVmX2xlbiA8IE1TX0VYVFJBX1NJWkUpKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCS8qIFdyaXRlIFJFRyAqLwotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4ODsKLQl9IGVsc2UgewotCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDgwOwotCX0KLQkvKiBCbG9jayBBZGRyZXNzICovCi0JZGF0YVsxXSA9IDA7Ci0JZGF0YVsyXSA9ICh1OCkgKGJsb2NrX2FkZHIgPj4gOCk7Ci0JZGF0YVszXSA9ICh1OCkgYmxvY2tfYWRkcjsKLQkvKiBQYWdlIE51bWJlcgotCSAqIEV4dHJhIGRhdGEgYWNjZXNzIG1vZGUgKi8KLQlkYXRhWzRdID0gMHg0MDsKLQlkYXRhWzVdID0gcGFnZV9udW07Ci0KLQlmb3IgKGkgPSA2OyBpIDwgTVNfRVhUUkFfU0laRSArIDY7IGkrKykKLQkJZGF0YVtpXSA9IGJ1ZltpIC0gNl07Ci0KLSNpZmRlZiBNU19TUEVFRFVQCi0JcmV0dmFsID0KLQkgICAgbXNfYXV0b19zZXRfY21kKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sCi0JCQkgICAgNiArIE1TX0VYVFJBX1NJWkUsIEJMT0NLX1dSSVRFLCBXQUlUX0lOVCwgZGF0YSwgMTYsCi0JCQkgICAgJnZhbCk7Ci0jZWxzZQotCXJldHZhbCA9Ci0JICAgIG1zX3NldF9jbWQoY2hpcCwgT3ZlcndyaXRlRmxhZywgTVNfRVhUUkFfU0laRSwgU3lzdGVtUGFybSwKLQkJICAgICAgIDYgKyBNU19FWFRSQV9TSVpFLCBCTE9DS19XUklURSwgV0FJVF9JTlQsIGRhdGEsIDE2LAotCQkgICAgICAgJnZhbCk7Ci0jZW5kaWYKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQlpZiAodmFsICYgSU5UX1JFR19DRUQpIHsKLQkJaWYgKHZhbCAmIElOVF9SRUdfRVJSKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfV1JJVEVfRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtc19yZWFkX3BhZ2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgYmxvY2tfYWRkciwgdTggcGFnZV9udW0pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggdmFsID0gMCwgZGF0YVs2XTsKLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4ODsKLQl9IGVsc2UgewotCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDgwOwotCX0KLQkvKiBCbG9jayBBZGRyZXNzICovCi0JZGF0YVsxXSA9IDA7Ci0JZGF0YVsyXSA9ICh1OCkgKGJsb2NrX2FkZHIgPj4gOCk7Ci0JZGF0YVszXSA9ICh1OCkgYmxvY2tfYWRkcjsKLQkvKiBQYWdlIE51bWJlcgotCSAqIFNpbmdsZSBwYWdlIGFjY2VzcyBtb2RlICovCi0JZGF0YVs0XSA9IDB4MjA7Ci0JZGF0YVs1XSA9IHBhZ2VfbnVtOwotCi0JcmV0dmFsID0gbXNfc2V0X2NtZChjaGlwLCBPdmVyd3JpdGVGbGFnLCBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLCA2LAotCQkJICAgIEJMT0NLX1JFQUQsIFdBSVRfSU5ULCBkYXRhLCA2LCAmdmFsKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmICh2YWwgJiBJTlRfUkVHX0NFRCkgewotCQlpZiAodmFsICYgSU5UX1JFR19FUlIpIHsKLQkJCWlmICghKHZhbCAmIElOVF9SRUdfQlJFUSkpIHsKLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfUkVBRF9FUlJPUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJCXJldHZhbCA9IG1zX3JlYWRfc3RhdHVzX3JlZyhjaGlwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0ZMQVNIX1dSSVRFX0VSUk9SKTsKLQkJfSBlbHNlIHsKLQkJCWlmICghKHZhbCAmIElOVF9SRUdfQlJFUSkpIHsKLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQlJFUV9FUlJPUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHZhbCA9Ci0JICAgIG1zX3RyYW5zZmVyX3RwYyhjaGlwLCBNU19UTV9OT1JNQUxfUkVBRCwgUkVBRF9QQUdFX0RBVEEsIDAsCi0JCQkgICAgTk9fV0FJVF9JTlQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCWlmIChtc19jaGVja19lcnJfY29kZShjaGlwLCBNU19GTEFTSF9XUklURV9FUlJPUikpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfc2V0X2JhZF9ibG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBwaHlfYmxrKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCXU4IHZhbCA9IDAsIGRhdGFbOF0sIGV4dHJhW01TX0VYVFJBX1NJWkVdOwotCi0JcmV0dmFsID0gbXNfcmVhZF9leHRyYV9kYXRhKGNoaXAsIHBoeV9ibGssIDAsIGV4dHJhLCBNU19FWFRSQV9TSVpFKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQlpZiAoQ0hLX01TNEJJVChtc19jYXJkKSkgewotCQkvKiBQYXJhbGxlbCBpbnRlcmZhY2UgKi8KLQkJZGF0YVswXSA9IDB4ODg7Ci0JfSBlbHNlIHsKLQkJLyogU2VyaWFsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4MDsKLQl9Ci0JLyogQmxvY2sgQWRkcmVzcyAqLwotCWRhdGFbMV0gPSAwOwotCWRhdGFbMl0gPSAodTgpIChwaHlfYmxrID4+IDgpOwotCWRhdGFbM10gPSAodTgpIHBoeV9ibGs7Ci0JZGF0YVs0XSA9IDB4ODA7Ci0JZGF0YVs1XSA9IDA7Ci0JZGF0YVs2XSA9IGV4dHJhWzBdICYgMHg3RjsKLQlkYXRhWzddID0gMHhGRjsKLQotI2lmZGVmIE1TX1NQRUVEVVAKLQlyZXR2YWwgPSBtc19zZXRfY21kKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sIDcsCi0JCQkgICAgQkxPQ0tfV1JJVEUsIFdBSVRfSU5ULCBkYXRhLCA3LCAmdmFsKTsKLSNlbHNlCi0JcmV0dmFsID0gbXNfc2V0X2NtZChjaGlwLCBPdmVyd3JpdGVGbGFnLCBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLCA3LAotCQkJICAgIEJMT0NLX1dSSVRFLCBXQUlUX0lOVCwgZGF0YSwgNywgJnZhbCk7Ci0jZW5kaWYKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmICh2YWwgJiBJTlRfUkVHX0NFRCkgewotCQlpZiAodmFsICYgSU5UX1JFR19FUlIpIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19GTEFTSF9XUklURV9FUlJPUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1zX2VyYXNlX2Jsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IHBoeV9ibGspCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWwsIGkgPSAwOwotCXU4IHZhbCA9IDAsIGRhdGFbNl07Ci0KLQlyZXR2YWwgPQotCSAgICBtc19zZXRfcndfcmVnX2FkZHIoY2hpcCwgT3ZlcndyaXRlRmxhZywgTVNfRVhUUkFfU0laRSwgU3lzdGVtUGFybSwKLQkJCSAgICAgICA2KTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQlpZiAoQ0hLX01TNEJJVChtc19jYXJkKSkgewotCQkvKiBQYXJhbGxlbCBpbnRlcmZhY2UgKi8KLQkJZGF0YVswXSA9IDB4ODg7Ci0JfSBlbHNlIHsKLQkJLyogU2VyaWFsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4MDsKLQl9Ci0JLyogQmxvY2sgQWRkcmVzcyAqLwotCWRhdGFbMV0gPSAwOwotCWRhdGFbMl0gPSAodTgpIChwaHlfYmxrID4+IDgpOwotCWRhdGFbM10gPSAodTgpIHBoeV9ibGs7Ci0JZGF0YVs0XSA9IDA7Ci0JZGF0YVs1XSA9IDA7Ci0KLUVSQVNFX1JUWToKLSNpZmRlZiBNU19TUEVFRFVQCi0JcmV0dmFsID0KLQkgICAgbXNfYXV0b19zZXRfY21kKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sIDYsCi0JCQkgICAgQkxPQ0tfRVJBU0UsIFdBSVRfSU5ULCBkYXRhLCA2LCAmdmFsKTsKLSNlbHNlCi0JcmV0dmFsID0gbXNfc2V0X2NtZChjaGlwLCBPdmVyd3JpdGVGbGFnLCBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLCA2LAotCQkJICAgIEJMT0NLX0VSQVNFLCBXQUlUX0lOVCwgZGF0YSwgNiwgJnZhbCk7Ci0jZW5kaWYKLQotCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCWlmIChpIDwgMykgewotCQkJaSsrOwotCQkJZ290byBFUkFTRV9SVFk7Ci0JCX0KLQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0NNRF9OSyk7Ci0JCW1zX3NldF9iYWRfYmxvY2soY2hpcCwgcGh5X2Jsayk7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JaWYgKHZhbCAmIElOVF9SRUdfQ0VEKSB7Ci0JCWlmICh2YWwgJiBJTlRfUkVHX0VSUikgewotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0ZMQVNIX1dSSVRFX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zX3NldF9wYWdlX3N0YXR1cyh1MTYgbG9nX2JsaywgdTggdHlwZSwgdTggKmV4dHJhLCBpbnQgZXh0cmFfbGVuKQotewotCWlmICghZXh0cmEgfHwgKGV4dHJhX2xlbiA8IE1TX0VYVFJBX1NJWkUpKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoZXh0cmEsIDB4RkYsIE1TX0VYVFJBX1NJWkUpOwotCi0JaWYgKHR5cGUgPT0gc2V0UFNfTkcpCi0JCWV4dHJhWzBdID0gMHhCODsKLQllbHNlCi0JCWV4dHJhWzBdID0gMHg5ODsKLQotCWV4dHJhWzJdID0gKHU4KSAobG9nX2JsayA+PiA4KTsKLQlleHRyYVszXSA9ICh1OCkgbG9nX2JsazsKLX0KLQotc3RhdGljIGludCBtc19pbml0X3BhZ2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgcGh5X2JsaywgdTE2IGxvZ19ibGssCi0JCQl1OCBzdGFydF9wYWdlLCB1OCBlbmRfcGFnZSkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IGV4dHJhW01TX0VYVFJBX1NJWkVdLCBpOwotCi0JbWVtc2V0KGV4dHJhLCAweGZmLCBNU19FWFRSQV9TSVpFKTsKLQotCWV4dHJhWzBdID0gMHhmODsgLyogQmxvY2ssIHBhZ2UgT0ssIGRhdGEgZXJhc2VkICovCi0JZXh0cmFbMV0gPSAweGZmOwotCWV4dHJhWzJdID0gKHU4KSAobG9nX2JsayA+PiA4KTsKLQlleHRyYVszXSA9ICh1OCkgbG9nX2JsazsKLQotCWZvciAoaSA9IHN0YXJ0X3BhZ2U7IGkgPCBlbmRfcGFnZTsgaSsrKSB7Ci0JCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgTVNfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCQlyZXR2YWwgPQotCQkgICAgbXNfd3JpdGVfZXh0cmFfZGF0YShjaGlwLCBwaHlfYmxrLCBpLCBleHRyYSwgTVNfRVhUUkFfU0laRSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfY29weV9wYWdlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IG9sZF9ibGssIHUxNiBuZXdfYmxrLAotCQkJdTE2IGxvZ19ibGssIHU4IHN0YXJ0X3BhZ2UsIHU4IGVuZF9wYWdlKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBydHlfY250LCB1bmNvcnJlY3RfZmxhZyA9IDA7Ci0JdTggZXh0cmFbTVNfRVhUUkFfU0laRV0sIHZhbCwgaSwgaiwgZGF0YVsxNl07Ci0KLQlSVFM1MVhfREVCVUdQKCJDb3B5IHBhZ2UgZnJvbSAweCV4IHRvIDB4JXgsIGxvZ2ljYWwgYmxvY2sgaXMgMHgleFxuIiwKLQkJICAgICAgIG9sZF9ibGssIG5ld19ibGssIGxvZ19ibGspOwotCVJUUzUxWF9ERUJVR1AoInN0YXJ0X3BhZ2UgPSAlZCwgZW5kX3BhZ2UgPSAlZFxuIiwgc3RhcnRfcGFnZSwKLQkJICAgICAgIGVuZF9wYWdlKTsKLQotCXJldHZhbCA9IG1zX3JlYWRfZXh0cmFfZGF0YShjaGlwLCBuZXdfYmxrLCAwLCBleHRyYSwgTVNfRVhUUkFfU0laRSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBtc19yZWFkX3N0YXR1c19yZWcoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgUFBCVUZfQkFTRTIsICZ2YWwpOwotCi0JaWYgKHZhbCAmIEJVRl9GVUxMKSB7Ci0JCS8qIENsZWFyIEJ1ZmZlciAqLwotCQlyZXR2YWwgPSBtc19zZW5kX2NtZChjaGlwLCBDTEVBUl9CVUYsIFdBSVRfSU5UKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkvKiBHRVRfSU5UIFJlZ2lzdGVyICovCi0JCXJldHZhbCA9IG1zX3JlYWRfYnl0ZXMoY2hpcCwgR0VUX0lOVCwgMSwgTk9fV0FJVF9JTlQsICZ2YWwsIDEpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJaWYgKCEodmFsICYgSU5UX1JFR19DRUQpKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfV1JJVEVfRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCX0KLQotCWZvciAoaSA9IHN0YXJ0X3BhZ2U7IGkgPCBlbmRfcGFnZTsgaSsrKSB7Ci0JCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgTVNfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCQltc19yZWFkX2V4dHJhX2RhdGEoY2hpcCwgb2xkX2JsaywgaSwgZXh0cmEsIE1TX0VYVFJBX1NJWkUpOwotCi0JCXJldHZhbCA9Ci0JCSAgICBtc19zZXRfcndfcmVnX2FkZHIoY2hpcCwgT3ZlcndyaXRlRmxhZywgTVNfRVhUUkFfU0laRSwKLQkJCQkgICAgICAgU3lzdGVtUGFybSwgNik7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJLyogV3JpdGUgUkVHICovCi0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQkJaWYgKENIS19NUzRCSVQobXNfY2FyZCkpIHsKLQkJCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQkJZGF0YVswXSA9IDB4ODg7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCQlkYXRhWzBdID0gMHg4MDsKLQkJfQotCQkvKiBCbG9jayBBZGRyZXNzICovCi0JCWRhdGFbMV0gPSAwOwotCQlkYXRhWzJdID0gKHU4KSAob2xkX2JsayA+PiA4KTsKLQkJZGF0YVszXSA9ICh1OCkgb2xkX2JsazsKLQkJZGF0YVs0XSA9IDB4MjA7Ci0JCWRhdGFbNV0gPSBpOwotCi0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBXUklURV9SRUcsIDYsIE5PX1dBSVRfSU5ULCBkYXRhLCA2KTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXJldHZhbCA9IG1zX3NlbmRfY21kKGNoaXAsIEJMT0NLX1JFQUQsIFdBSVRfSU5UKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0JCXJldHZhbCA9IG1zX3JlYWRfYnl0ZXMoY2hpcCwgR0VUX0lOVCwgMSwgTk9fV0FJVF9JTlQsICZ2YWwsIDEpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJaWYgKHZhbCAmIElOVF9SRUdfQ01ETkspIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCWlmICh2YWwgJiBJTlRfUkVHX0NFRCkgewotCQkJaWYgKHZhbCAmIElOVF9SRUdfRVJSKSB7Ci0JCQkJcmV0dmFsID0gbXNfcmVhZF9zdGF0dXNfcmVnKGNoaXApOwotCQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQkJdW5jb3JyZWN0X2ZsYWcgPSAxOwotCQkJCQlSVFM1MVhfREVCVUdQKCJVbmNvcnJlY3RhYmxlIGVycm9yXG4iKTsKLQkJCQl9IGVsc2UgewotCQkJCQl1bmNvcnJlY3RfZmxhZyA9IDA7Ci0JCQkJfQotCi0JCQkJcmV0dmFsID0KLQkJCQkgICAgbXNfdHJhbnNmZXJfdHBjKGNoaXAsIE1TX1RNX05PUk1BTF9SRUFELAotCQkJCQlSRUFEX1BBR0VfREFUQSwgMCwgTk9fV0FJVF9JTlQpOwotCQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJCWlmICh1bmNvcnJlY3RfZmxhZykgewotCQkJCQltc19zZXRfcGFnZV9zdGF0dXMobG9nX2Jsaywgc2V0UFNfTkcsCi0JCQkJCQlleHRyYSwgTVNfRVhUUkFfU0laRSk7Ci0JCQkJCWlmIChpID09IDApCi0JCQkJCQlleHRyYVswXSAmPSAweEVGOwotCQkJCQltc193cml0ZV9leHRyYV9kYXRhKGNoaXAsIG9sZF9ibGssIGksCi0JCQkJCQkJICAgIGV4dHJhLAotCQkJCQkJCSAgICBNU19FWFRSQV9TSVpFKTsKLQkJCQkJUlRTNTFYX0RFQlVHUCgicGFnZSAlZCA6IGV4dHJhWzBdID0gMHgleFxuIiwKLQkJCQkJCQlpLCBleHRyYVswXSk7Ci0JCQkJCU1TX1NFVF9CQURfQkxPQ0tfRkxHKG1zX2NhcmQpOwotCi0JCQkJCW1zX3NldF9wYWdlX3N0YXR1cyhsb2dfYmxrLCBzZXRQU19FcnJvciwKLQkJCQkJCQlleHRyYSwgTVNfRVhUUkFfU0laRSk7Ci0JCQkJCW1zX3dyaXRlX2V4dHJhX2RhdGEoY2hpcCwgbmV3X2JsaywgaSwKLQkJCQkJCWV4dHJhLCBNU19FWFRSQV9TSVpFKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJZm9yIChydHlfY250ID0gMDsgcnR5X2NudCA8IE1TX01BWF9SRVRSWV9DT1VOVDsKLQkJCQkgICAgIHJ0eV9jbnQrKykgewotCQkJCQlyZXR2YWwgPQotCQkJCQkgICAgbXNfdHJhbnNmZXJfdHBjKGNoaXAsCi0JCQkJCQkJICAgIE1TX1RNX05PUk1BTF9XUklURSwKLQkJCQkJCQkgICAgV1JJVEVfUEFHRV9EQVRBLCAwLAotCQkJCQkJCSAgICBOT19XQUlUX0lOVCk7Ci0JCQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKHJ0eV9jbnQgPT0gTVNfTUFYX1JFVFJZX0NPVU5UKQotCQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCi0JCQlpZiAoISh2YWwgJiBJTlRfUkVHX0JSRVEpKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0JSRVFfRVJST1IpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR2YWwgPSBtc19zZXRfcndfcmVnX2FkZHIoY2hpcCwgT3ZlcndyaXRlRmxhZywKLQkJCQkJICAgIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sCi0JCQkJCSAgICAoNiArIE1TX0VYVFJBX1NJWkUpKTsKLQotCQkvKiBXcml0ZSBSRUcgKi8KLQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX05PX0VSUk9SKTsKLQotCQlpZiAoQ0hLX01TNEJJVChtc19jYXJkKSkgewotCQkJLyogUGFyYWxsZWwgaW50ZXJmYWNlICovCi0JCQlkYXRhWzBdID0gMHg4ODsKLQkJfSBlbHNlIHsKLQkJCS8qIFNlcmlhbCBpbnRlcmZhY2UgKi8KLQkJCWRhdGFbMF0gPSAweDgwOwotCQl9Ci0JCS8qIEJsb2NrIEFkZHJlc3MgKi8KLQkJZGF0YVsxXSA9IDA7Ci0JCWRhdGFbMl0gPSAodTgpIChuZXdfYmxrID4+IDgpOwotCQlkYXRhWzNdID0gKHU4KSBuZXdfYmxrOwotCQlkYXRhWzRdID0gMHgyMDsKLQkJZGF0YVs1XSA9IGk7Ci0KLQkJLyogZm9yIE1TIGNoZWNrIHByb2NlZHVyZSAqLwotCQlpZiAoKGV4dHJhWzBdICYgMHg2MCkgIT0gMHg2MCkKLQkJCWRhdGFbNl0gPSBleHRyYVswXTsKLQkJZWxzZQotCQkJZGF0YVs2XSA9IDB4Rjg7Ci0KLQkJZGF0YVs2ICsgMV0gPSAweEZGOwotCQlkYXRhWzYgKyAyXSA9ICh1OCkgKGxvZ19ibGsgPj4gOCk7Ci0JCWRhdGFbNiArIDNdID0gKHU4KSBsb2dfYmxrOwotCi0JCWZvciAoaiA9IDQ7IGogPD0gTVNfRVhUUkFfU0laRTsgaisrKQotCQkJZGF0YVs2ICsgal0gPSAweEZGOwotCi0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBXUklURV9SRUcsICg2ICsgTVNfRVhUUkFfU0laRSksCi0JCQkJICAgTk9fV0FJVF9JTlQsIGRhdGEsIDE2KTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXJldHZhbCA9IG1zX3NlbmRfY21kKGNoaXAsIEJMT0NLX1dSSVRFLCBXQUlUX0lOVCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJLyogR0VUX0lOVCBSZWdpc3RlciAqLwotCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfTk9fRVJST1IpOwotCQlyZXR2YWwgPSBtc19yZWFkX2J5dGVzKGNoaXAsIEdFVF9JTlQsIDEsIE5PX1dBSVRfSU5ULCAmdmFsLCAxKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQ01EX05LKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQotCQlpZiAodmFsICYgSU5UX1JFR19DRUQpIHsKLQkJCWlmICh2YWwgJiBJTlRfUkVHX0VSUikgewotCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19GTEFTSF9XUklURV9FUlJPUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCi0JCWlmIChpID09IDApIHsKLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIE92ZXJ3cml0ZUZsYWcsCi0JCQkJCSAgICAgICBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLCA3KTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQkJCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCQkJLyogUGFyYWxsZWwgaW50ZXJmYWNlICovCi0JCQkJZGF0YVswXSA9IDB4ODg7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFNlcmlhbCBpbnRlcmZhY2UgKi8KLQkJCQlkYXRhWzBdID0gMHg4MDsKLQkJCX0KLQkJCS8qIEJsb2NrIEFkZHJlc3MgKi8KLQkJCWRhdGFbMV0gPSAwOwotCQkJZGF0YVsyXSA9ICh1OCkgKG9sZF9ibGsgPj4gOCk7Ci0JCQlkYXRhWzNdID0gKHU4KSBvbGRfYmxrOwotCQkJZGF0YVs0XSA9IDB4ODA7Ci0JCQlkYXRhWzVdID0gMDsKLQkJCWRhdGFbNl0gPSAweEVGOwotCQkJZGF0YVs3XSA9IDB4RkY7Ci0KLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfd3JpdGVfYnl0ZXMoY2hpcCwgV1JJVEVfUkVHLCA3LCBOT19XQUlUX0lOVCwKLQkJCQkJICAgZGF0YSwgOCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCQlyZXR2YWwgPSBtc19zZW5kX2NtZChjaGlwLCBCTE9DS19XUklURSwgV0FJVF9JTlQpOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX05PX0VSUk9SKTsKLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfcmVhZF9ieXRlcyhjaGlwLCBHRVRfSU5ULCAxLCBOT19XQUlUX0lOVCwgJnZhbCwKLQkJCQkJICAxKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0NNRF9OSyk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQotCQkJaWYgKHZhbCAmIElOVF9SRUdfQ0VEKSB7Ci0JCQkJaWYgKHZhbCAmIElOVF9SRUdfRVJSKSB7Ci0JCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLAotCQkJCQkJCU1TX0ZMQVNIX1dSSVRFX0VSUk9SKTsKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLSNpZmRlZiBNU19TUEVFRFVQCi1zdGF0aWMgaW50IG1zX2F1dG9fY29weV9wYWdlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IG9sZF9ibGssIHUxNiBuZXdfYmxrLAotCQkJICAgICB1MTYgbG9nX2JsaywgdTggc3RhcnRfcGFnZSwgdTggZW5kX3BhZ2UpCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggcGFnZV9sZW4sIGJ1c193aWR0aCwgdmFsID0gMDsKLQl1OCBleHRyYVtNU19FWFRSQV9TSVpFXTsKLQotCVJUUzUxWF9ERUJVR1AoIkF1dG8gY29weSBwYWdlIGZyb20gMHgleCB0byAweCV4LCBsb2dpY2FsIGJsb2NrIGlzIDB4JXhcbiIsCi0JCQkJb2xkX2JsaywgbmV3X2JsaywgbG9nX2Jsayk7Ci0JUlRTNTFYX0RFQlVHUCgic3RhcnRfcGFnZSA9ICVkLCBlbmRfcGFnZSA9ICVkXG4iLCBzdGFydF9wYWdlLAotCQkgICAgICAgZW5kX3BhZ2UpOwotCi0JcGFnZV9sZW4gPSBlbmRfcGFnZSAtIHN0YXJ0X3BhZ2U7Ci0KLQlyZXR2YWwgPSBtc19yZWFkX2V4dHJhX2RhdGEoY2hpcCwgbmV3X2JsaywgMCwgZXh0cmEsIE1TX0VYVFJBX1NJWkUpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gbXNfcmVhZF9zdGF0dXNfcmVnKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JUlRTNTFYX1JFQURfUkVHKGNoaXAsIFBQQlVGX0JBU0UyLCAmdmFsKTsKLQotCWlmICh2YWwgJiBCVUZfRlVMTCkgewotCQlyZXR2YWwgPSBtc19zZW5kX2NtZChjaGlwLCBDTEVBUl9CVUYsIFdBSVRfSU5UKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXJldHZhbCA9IG1zX3JlYWRfYnl0ZXMoY2hpcCwgR0VUX0lOVCwgMSwgTk9fV0FJVF9JTlQsICZ2YWwsIDEpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJaWYgKCEodmFsICYgSU5UX1JFR19DRUQpKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfV1JJVEVfRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCX0KLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlidXNfd2lkdGggPSAweDg4OwotCX0gZWxzZSB7Ci0JCS8qIFNlcmlhbCBpbnRlcmZhY2UgKi8KLQkJYnVzX3dpZHRoID0gMHg4MDsKLQl9Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19PTERfQkxPQ0tfMCwgMHhGRiwgKHU4KSBvbGRfYmxrKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19PTERfQkxPQ0tfMSwgMHhGRiwKLQkJICAgICAgICh1OCkgKG9sZF9ibGsgPj4gOCkpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX05FV19CTE9DS18wLCAweEZGLCAodTgpIG5ld19ibGspOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX05FV19CTE9DS18xLCAweEZGLAotCQkgICAgICAgKHU4KSAobmV3X2JsayA+PiA4KSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfTE9HX0JMT0NLXzAsIDB4RkYsICh1OCkgbG9nX2Jsayk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfTE9HX0JMT0NLXzEsIDB4RkYsCi0JCSAgICAgICAodTgpIChsb2dfYmxrID4+IDgpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19QQUdFX1NUQVJULCAweEZGLCBzdGFydF9wYWdlKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19QQUdFX0xFTkdUSCwgMHhGRiwgcGFnZV9sZW4pOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0JVU19XSURUSCwgMHhGRiwgYnVzX3dpZHRoKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgTVNfVFJBTlNGRVJfU1RBUlQgfCBNU19UTV9DT1BZX1BBR0UpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIE1TX1RSQU5TRkVSLCBNU19UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBNU19UUkFOU0ZFUl9FTkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDUwMDApOwotCi0JaWYgKENIRUNLX01TX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkgewotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1RJTUVET1VUKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgRmFpbCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCi1GYWlsOgotCXJldHZhbCA9IG1zX2VyYXNlX2Jsb2NrKGNoaXAsIG5ld19ibGspOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0KLQkgICAgbXNfY29weV9wYWdlKGNoaXAsIG9sZF9ibGssIG5ld19ibGssIGxvZ19ibGssIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IHJlc2V0X21zKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQl1MTYgaSwgcmVnX2FkZHIsIGJsb2NrX3NpemU7Ci0JdTggdmFsLCBqLCAqcHRyOwotI2lmbmRlZiBTVVBQT1JUX01BR0lDX0dBVEUKLQl1MTYgZWJsb2NrX2NudDsKLSNlbmRpZgotCi0JcmV0dmFsID0gbXNfcHJlcGFyZV9yZXNldChjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCW1zX2NhcmQtPm1zX3R5cGUgfD0gVFlQRV9NUzsKLQotCXJldHZhbCA9IG1zX3NlbmRfY21kKGNoaXAsIE1TX1JFU0VULCBOT19XQUlUX0lOVCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBtc19yZWFkX3N0YXR1c19yZWcoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgUFBCVUZfQkFTRTIsICZ2YWwpOwotCWlmICh2YWwgJiBXUlRfUFJUQ1QpCi0JCWNoaXAtPmNhcmRfd3AgfD0gTVNfQ0FSRDsKLQllbHNlCi0JCWNoaXAtPmNhcmRfd3AgJj0gfk1TX0NBUkQ7Ci0KLQlpID0gMDsKLQotUkVfU0VBUkNIOgotCS8qIFNlYXJjaCBGb3IgQm9vdCBCbG9jayAqLwotCXdoaWxlIChpIDwgKE1BWF9ERUZFQ1RJVkVfQkxPQ0sgKyAyKSkgewotCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIE1TX0NBUkQpID09IENEX05PVF9FWElTVCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQkJcmV0dmFsID0gbXNfY2hlY2tfYm9vdF9ibG9jayhjaGlwLCBpKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaSsrOwotCQkJY29udGludWU7Ci0JCX0KLQotCQltc19jYXJkLT5ib290X2Jsb2NrID0gaTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGkgPT0gKE1BWF9ERUZFQ1RJVkVfQkxPQ0sgKyAyKSkgewotCQlSVFM1MVhfREVCVUdQKCJObyBib290IGJsb2NrIGZvdW5kISIpOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7Ci0JCXJldHZhbCA9IG1zX3JlYWRfcGFnZShjaGlwLCBtc19jYXJkLT5ib290X2Jsb2NrLCBqKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaWYgKG1zX2NoZWNrX2Vycl9jb2RlKGNoaXAsIE1TX0ZMQVNIX1dSSVRFX0VSUk9SKSkgewotCQkJCWkgPSBtc19jYXJkLT5ib290X2Jsb2NrICsgMTsKLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfTk9fRVJST1IpOwotCQkJCWdvdG8gUkVfU0VBUkNIOwotCQkJfQotCQl9Ci0JfQotCi0JLyogUmVhZCBib290IGJsb2NrIGNvbnRlbnRzICovCi0JcmV0dmFsID0gbXNfcmVhZF9wYWdlKGNoaXAsIG1zX2NhcmQtPmJvb3RfYmxvY2ssIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCS8qIFJlYWQgTVMgc3lzdGVtIGluZm9ybWF0aW9uIGFzIHN5c19pbmZvICovCi0JcmV0dmFsID0KLQkgICAgcnRzNTF4X3NlcV9yZWFkX3JlZ2lzdGVyKGNoaXAsIFBQQlVGX0JBU0UyICsgMHgxQTAsIDk2LAotCQkJCSAgICAgbXNfY2FyZC0+cmF3X3N5c19pbmZvKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkvKiBSZWFkIHVzZWZ1bCBibG9jayBjb250ZW50cyAqLwotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgSEVBREVSX0lEMCwgMCwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBIRUFERVJfSUQxLCAwLCAwKTsKLQotCWZvciAocmVnX2FkZHIgPSBESVNBQkxFRF9CTE9DSzA7IHJlZ19hZGRyIDw9IERJU0FCTEVEX0JMT0NLMzsKLQkgICAgIHJlZ19hZGRyKyspIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCByZWdfYWRkciwgMCwgMCk7Ci0JfQotCi0JZm9yIChyZWdfYWRkciA9IEJMT0NLX1NJWkVfMDsgcmVnX2FkZHIgPD0gUEFHRV9TSVpFXzE7IHJlZ19hZGRyKyspCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgcmVnX2FkZHIsIDAsIDApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBNU19EZXZpY2VfVHlwZSwgMCwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBNU180Yml0X1N1cHBvcnQsIDAsIDApOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAxNiwgMTAwKTsKLQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcHRyID0gcnRzNTF4X2dldF9yc3BfZGF0YShjaGlwKTsKLQotCVJUUzUxWF9ERUJVR1AoIkJvb3QgYmxvY2sgZGF0YTpcbiIpOwotCVJUUzUxWF9EVU1QKHB0ciwgMTYpOwotCi0JaWYgKHB0clswXSAhPSAweDAwIHx8IHB0clsxXSAhPSAweDAxKSB7Ci0JCWkgPSBtc19jYXJkLT5ib290X2Jsb2NrICsgMTsKLQkJZ290byBSRV9TRUFSQ0g7Ci0JfQotCWlmIChwdHJbMTJdICE9IDB4MDIgfHwgcHRyWzEzXSAhPSAweDAwKSB7Ci0JCWkgPSBtc19jYXJkLT5ib290X2Jsb2NrICsgMTsKLQkJZ290byBSRV9TRUFSQ0g7Ci0JfQotCWlmICgocHRyWzE0XSA9PSAxKSB8fCAocHRyWzE0XSA9PSAzKSkKLQkJY2hpcC0+Y2FyZF93cCB8PSBNU19DQVJEOwotCWJsb2NrX3NpemUgPSAoKHUxNikgcHRyWzZdIDw8IDgpIHwgcHRyWzddOwotCWlmIChibG9ja19zaXplID09IDB4MDAxMCkgewotCQltc19jYXJkLT5ibG9ja19zaGlmdCA9IDU7Ci0JCW1zX2NhcmQtPnBhZ2Vfb2ZmID0gMHgxRjsKLQl9IGVsc2UgaWYgKGJsb2NrX3NpemUgPT0gMHgwMDA4KSB7Ci0JCW1zX2NhcmQtPmJsb2NrX3NoaWZ0ID0gNDsKLQkJbXNfY2FyZC0+cGFnZV9vZmYgPSAweDBGOwotCX0KLQltc19jYXJkLT50b3RhbF9ibG9jayA9ICgodTE2KSBwdHJbOF0gPDwgOCkgfCBwdHJbOV07Ci0KLSNpZmRlZiBTVVBQT1JUX01BR0lDX0dBVEUKLQlqID0gcHRyWzEwXTsKLQotCWlmIChtc19jYXJkLT5ibG9ja19zaGlmdCA9PSA0KSB7Ci0JCWlmIChqIDwgMikKLQkJCW1zX2NhcmQtPmNhcGFjaXR5ID0gMHgxRUUwOwotCQllbHNlCi0JCQltc19jYXJkLT5jYXBhY2l0eSA9IDB4M0RFMDsKLQl9IGVsc2UgewotCQlpZiAoaiA8IDUpCi0JCQltc19jYXJkLT5jYXBhY2l0eSA9IDB4N0JDMDsKLQkJZWxzZSBpZiAoaiA8IDB4QSkKLQkJCW1zX2NhcmQtPmNhcGFjaXR5ID0gMHhGN0MwOwotCQllbHNlIGlmIChqIDwgMHgxMSkKLQkJCW1zX2NhcmQtPmNhcGFjaXR5ID0gMHgxRUY4MDsKLQkJZWxzZQotCQkJbXNfY2FyZC0+Y2FwYWNpdHkgPSAweDNERjAwOwotCX0KLSNlbHNlCi0JZWJsb2NrX2NudCA9ICgodTE2KSBwdHJbMTBdIDw8IDgpIHwgcHRyWzExXTsKLQotCW1zX2NhcmQtPmNhcGFjaXR5ID0gKCh1MzIpIGVibG9ja19jbnQgLSAyKSA8PCBtc19jYXJkLT5ibG9ja19zaGlmdDsKLSNlbmRpZgotCi0JY2hpcC0+Y2FwYWNpdHlbY2hpcC0+Y2FyZDJsdW5bTVNfQ0FSRF1dID0gbXNfY2FyZC0+Y2FwYWNpdHk7Ci0KLQlpZiAocHRyWzE1XSkgewotCQlyZXR2YWwgPSBtc19zZXRfcndfcmVnX2FkZHIoY2hpcCwgMCwgMCwgU3lzdGVtUGFybSwgMSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFBQQlVGX0JBU0UyLCAweEZGLCAweDg4KTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBQUEJVRl9CQVNFMiArIDEsIDB4RkYsIDApOwotCi0JCXJldHZhbCA9Ci0JCSAgICBtc190cmFuc2Zlcl90cGMoY2hpcCwgTVNfVE1fV1JJVEVfQllURVMsIFdSSVRFX1JFRywgMSwKLQkJCQkgICAgTk9fV0FJVF9JTlQpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBNU19DRkcsIDB4NTggfCBNU19OT19DSEVDS19JTlQsCi0JCQkJIE1TX0JVU19XSURUSF80IHwgUFVTSF9USU1FX09ERCB8Ci0JCQkJIE1TX05PX0NIRUNLX0lOVCk7Ci0KLQkJbXNfY2FyZC0+bXNfdHlwZSB8PSBNU180QklUOwotCX0KLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKQotCQljaGlwLT5jYXJkX2J1c193aWR0aFtjaGlwLT5jYXJkMmx1bltNU19DQVJEXV0gPSA0OwotCWVsc2UKLQkJY2hpcC0+Y2FyZF9idXNfd2lkdGhbY2hpcC0+Y2FyZDJsdW5bTVNfQ0FSRF1dID0gMTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtc19pbml0X2wycF90Ymwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgc2l6ZSwgaSwgc2VnX25vLCByZXR2YWw7Ci0JdTE2IGRlZmVjdF9ibG9jaywgcmVnX2FkZHI7Ci0JdTggdmFsMSwgdmFsMjsKLQotCW1zX2NhcmQtPnNlZ21lbnRfY250ID0gbXNfY2FyZC0+dG90YWxfYmxvY2sgPj4gOTsKLQlSVFM1MVhfREVCVUdQKCJtc19jYXJkLT5zZWdtZW50X2NudCA9ICVkXG4iLCBtc19jYXJkLT5zZWdtZW50X2NudCk7Ci0KLQlzaXplID0gbXNfY2FyZC0+c2VnbWVudF9jbnQgKiBzaXplb2Yoc3RydWN0IHpvbmVfZW50cnkpOwotCW1zX2NhcmQtPnNlZ21lbnQgPSB2bWFsbG9jKHNpemUpOwotCWlmIChtc19jYXJkLT5zZWdtZW50ID09IE5VTEwpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JbWVtc2V0KG1zX2NhcmQtPnNlZ21lbnQsIDAsIHNpemUpOwotCi0JcmV0dmFsID0gbXNfcmVhZF9wYWdlKGNoaXAsIG1zX2NhcmQtPmJvb3RfYmxvY2ssIDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX0dPVE8oY2hpcCwgSU5JVF9GQUlMKTsKLQotCXJlZ19hZGRyID0gUFBCVUZfQkFTRTI7Ci0JZm9yIChpID0gMDsgaSA8ICgoKG1zX2NhcmQtPnRvdGFsX2Jsb2NrID4+IDkpICogMTApICsgMSk7IGkrKykgewotCQlyZXR2YWwgPSBydHM1MXhfcmVhZF9yZWdpc3RlcihjaGlwLCByZWdfYWRkcisrLCAmdmFsMSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIElOSVRfRkFJTCk7Ci0JCXJldHZhbCA9IHJ0czUxeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIHJlZ19hZGRyKyssICZ2YWwyKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgSU5JVF9GQUlMKTsKLQotCQlkZWZlY3RfYmxvY2sgPSAoKHUxNikgdmFsMSA8PCA4KSB8IHZhbDI7Ci0JCWlmIChkZWZlY3RfYmxvY2sgPT0gMHhGRkZGKQotCQkJYnJlYWs7Ci0JCXNlZ19ubyA9IGRlZmVjdF9ibG9jayAvIDUxMjsKLQkJbXNfY2FyZC0+c2VnbWVudFtzZWdfbm9dLmRlZmVjdF9saXN0W21zX2NhcmQtPnNlZ21lbnRbc2VnX25vXS4KLQkJCQkJCSAgICAgZGlzYWJsZV9jb3VudCsrXSA9Ci0JCSAgICBkZWZlY3RfYmxvY2s7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG1zX2NhcmQtPnNlZ21lbnRfY250OyBpKyspIHsKLQkJbXNfY2FyZC0+c2VnbWVudFtpXS5idWlsZF9mbGFnID0gMDsKLQkJbXNfY2FyZC0+c2VnbWVudFtpXS5sMnBfdGFibGUgPSBOVUxMOwotCQltc19jYXJkLT5zZWdtZW50W2ldLmZyZWVfdGFibGUgPSBOVUxMOwotCQltc19jYXJkLT5zZWdtZW50W2ldLmdldF9pbmRleCA9IDA7Ci0JCW1zX2NhcmQtPnNlZ21lbnRbaV0uc2V0X2luZGV4ID0gMDsKLQkJbXNfY2FyZC0+c2VnbWVudFtpXS51bnVzZWRfYmxrX2NudCA9IDA7Ci0KLQkJUlRTNTFYX0RFQlVHUCgiZGVmZWN0aXZlIGJsb2NrIGNvdW50IG9mIHNlZ21lbnQgJWQgaXMgJWRcbiIsCi0JCQkgICAgICAgaSwgbXNfY2FyZC0+c2VnbWVudFtpXS5kaXNhYmxlX2NvdW50KTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0KLUlOSVRfRkFJTDoKLQlpZiAobXNfY2FyZC0+c2VnbWVudCkgewotCQl2ZnJlZShtc19jYXJkLT5zZWdtZW50KTsKLQkJbXNfY2FyZC0+c2VnbWVudCA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19GQUlMOwotfQotCi1zdGF0aWMgdTE2IG1zX2dldF9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IHNlZ19ubywgdTE2IGxvZ19vZmYpCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCXN0cnVjdCB6b25lX2VudHJ5ICpzZWdtZW50OwotCi0JaWYgKG1zX2NhcmQtPnNlZ21lbnQgPT0gTlVMTCkKLQkJcmV0dXJuIDB4RkZGRjsKLQotCXNlZ21lbnQgPSAmKG1zX2NhcmQtPnNlZ21lbnRbc2VnX25vXSk7Ci0KLQlpZiAoc2VnbWVudC0+bDJwX3RhYmxlKQotCQlyZXR1cm4gc2VnbWVudC0+bDJwX3RhYmxlW2xvZ19vZmZdOwotCi0JcmV0dXJuIDB4RkZGRjsKLX0KLQotc3RhdGljIHZvaWQgbXNfc2V0X2wycF90Ymwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgc2VnX25vLCB1MTYgbG9nX29mZiwKLQkJCSAgIHUxNiBwaHlfYmxrKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlzdHJ1Y3Qgem9uZV9lbnRyeSAqc2VnbWVudDsKLQotCWlmIChtc19jYXJkLT5zZWdtZW50ID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNlZ21lbnQgPSAmKG1zX2NhcmQtPnNlZ21lbnRbc2VnX25vXSk7Ci0JaWYgKHNlZ21lbnQtPmwycF90YWJsZSkKLQkJc2VnbWVudC0+bDJwX3RhYmxlW2xvZ19vZmZdID0gcGh5X2JsazsKLX0KLQotc3RhdGljIHZvaWQgbXNfc2V0X3VudXNlZF9ibG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBwaHlfYmxrKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlzdHJ1Y3Qgem9uZV9lbnRyeSAqc2VnbWVudDsKLQlpbnQgc2VnX25vOwotCi0Jc2VnX25vID0gKGludClwaHlfYmxrID4+IDk7Ci0Jc2VnbWVudCA9ICYobXNfY2FyZC0+c2VnbWVudFtzZWdfbm9dKTsKLQotCXNlZ21lbnQtPmZyZWVfdGFibGVbc2VnbWVudC0+c2V0X2luZGV4KytdID0gcGh5X2JsazsKLQlpZiAoc2VnbWVudC0+c2V0X2luZGV4ID49IE1TX0ZSRUVfVEFCTEVfQ05UKQotCQlzZWdtZW50LT5zZXRfaW5kZXggPSAwOwotCXNlZ21lbnQtPnVudXNlZF9ibGtfY250Kys7Ci19Ci0KLXN0YXRpYyB1MTYgbXNfZ2V0X3VudXNlZF9ibG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBzZWdfbm8pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCXN0cnVjdCB6b25lX2VudHJ5ICpzZWdtZW50OwotCXUxNiBwaHlfYmxrOwotCi0Jc2VnbWVudCA9ICYobXNfY2FyZC0+c2VnbWVudFtzZWdfbm9dKTsKLQotCWlmIChzZWdtZW50LT51bnVzZWRfYmxrX2NudCA8PSAwKQotCQlyZXR1cm4gMHhGRkZGOwotCi0JcGh5X2JsayA9IHNlZ21lbnQtPmZyZWVfdGFibGVbc2VnbWVudC0+Z2V0X2luZGV4XTsKLQlzZWdtZW50LT5mcmVlX3RhYmxlW3NlZ21lbnQtPmdldF9pbmRleCsrXSA9IDB4RkZGRjsKLQlpZiAoc2VnbWVudC0+Z2V0X2luZGV4ID49IE1TX0ZSRUVfVEFCTEVfQ05UKQotCQlzZWdtZW50LT5nZXRfaW5kZXggPSAwOwotCXNlZ21lbnQtPnVudXNlZF9ibGtfY250LS07Ci0KLQlyZXR1cm4gcGh5X2JsazsKLX0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1zX3N0YXJ0X2lkeFtdID0gewotCTAsIDQ5NCwgOTkwLCAxNDg2LCAxOTgyLCAyNDc4LCAyOTc0LCAzNDcwLAotCTM5NjYsIDQ0NjIsIDQ5NTgsIDU0NTQsIDU5NTAsIDY0NDYsIDY5NDIsIDc0MzgsIDc5MzQKLX07Ci0KLXN0YXRpYyBpbnQgbXNfYXJiaXRyYXRlX2wycChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBwaHlfYmxrLCB1MTYgbG9nX29mZiwKLQkJCSAgICB1OCB1czEsIHU4IHVzMikKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0Jc3RydWN0IHpvbmVfZW50cnkgKnNlZ21lbnQ7Ci0JaW50IHNlZ19ubzsKLQl1MTYgdG1wX2JsazsKLQotCXNlZ19ubyA9IChpbnQpcGh5X2JsayA+PiA5OwotCXNlZ21lbnQgPSAmKG1zX2NhcmQtPnNlZ21lbnRbc2VnX25vXSk7Ci0JdG1wX2JsayA9IHNlZ21lbnQtPmwycF90YWJsZVtsb2dfb2ZmXTsKLQotCWlmICh1czEgIT0gdXMyKSB7Ci0JCWlmICh1czEgPT0gMCkgewotCQkJaWYgKCEoY2hpcC0+Y2FyZF93cCAmIE1TX0NBUkQpKQotCQkJCW1zX2VyYXNlX2Jsb2NrKGNoaXAsIHRtcF9ibGspOwotCQkJbXNfc2V0X3VudXNlZF9ibG9jayhjaGlwLCB0bXBfYmxrKTsKLQkJCXNlZ21lbnQtPmwycF90YWJsZVtsb2dfb2ZmXSA9IHBoeV9ibGs7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIShjaGlwLT5jYXJkX3dwICYgTVNfQ0FSRCkpCi0JCQkJbXNfZXJhc2VfYmxvY2soY2hpcCwgcGh5X2Jsayk7Ci0JCQltc19zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBoeV9ibGsgPCB0bXBfYmxrKSB7Ci0JCQlpZiAoIShjaGlwLT5jYXJkX3dwICYgTVNfQ0FSRCkpCi0JCQkJbXNfZXJhc2VfYmxvY2soY2hpcCwgcGh5X2Jsayk7Ci0JCQltc19zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQl9IGVsc2UgewotCQkJaWYgKCEoY2hpcC0+Y2FyZF93cCAmIE1TX0NBUkQpKQotCQkJCW1zX2VyYXNlX2Jsb2NrKGNoaXAsIHRtcF9ibGspOwotCQkJbXNfc2V0X3VudXNlZF9ibG9jayhjaGlwLCB0bXBfYmxrKTsKLQkJCXNlZ21lbnQtPmwycF90YWJsZVtsb2dfb2ZmXSA9IHBoeV9ibGs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbXNfYnVpbGRfbDJwX3RibChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBzZWdfbm8pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCXN0cnVjdCB6b25lX2VudHJ5ICpzZWdtZW50OwotCWludCByZXR2YWwsIHRhYmxlX3NpemUsIGRpc2FibGVfY250LCBkZWZlY3RfZmxhZywgaTsKLQl1MTYgc3RhcnQsIGVuZCwgcGh5X2JsaywgbG9nX2JsaywgdG1wX2JsazsKLQl1OCBleHRyYVtNU19FWFRSQV9TSVpFXSwgdXMxLCB1czI7Ci0KLQlSVFM1MVhfREVCVUdQKCJtc19idWlsZF9sMnBfdGJsOiAlZFxuIiwgc2VnX25vKTsKLQotCWlmIChtc19jYXJkLT5zZWdtZW50ID09IE5VTEwpIHsKLQkJcmV0dmFsID0gbXNfaW5pdF9sMnBfdGJsKGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JaWYgKG1zX2NhcmQtPnNlZ21lbnRbc2VnX25vXS5idWlsZF9mbGFnKSB7Ci0JCVJUUzUxWF9ERUJVR1AoImwycCB0YWJsZSBvZiBzZWdtZW50ICVkIGhhcyBiZWVuIGJ1aWx0XG4iLAotCQkJICAgICAgIHNlZ19ubyk7Ci0JCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQl9Ci0KLQlpZiAoc2VnX25vID09IDApCi0JCXRhYmxlX3NpemUgPSA0OTQ7Ci0JZWxzZQotCQl0YWJsZV9zaXplID0gNDk2OwotCi0Jc2VnbWVudCA9ICYobXNfY2FyZC0+c2VnbWVudFtzZWdfbm9dKTsKLQotCWlmIChzZWdtZW50LT5sMnBfdGFibGUgPT0gTlVMTCkgewotCQlzZWdtZW50LT5sMnBfdGFibGUgPSB2bWFsbG9jKHRhYmxlX3NpemUgKiAyKTsKLQkJaWYgKHNlZ21lbnQtPmwycF90YWJsZSA9PSBOVUxMKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBCVUlMRF9GQUlMKTsKLQl9Ci0JbWVtc2V0KCh1OCAqKSAoc2VnbWVudC0+bDJwX3RhYmxlKSwgMHhmZiwgdGFibGVfc2l6ZSAqIDIpOwotCi0JaWYgKHNlZ21lbnQtPmZyZWVfdGFibGUgPT0gTlVMTCkgewotCQlzZWdtZW50LT5mcmVlX3RhYmxlID0gdm1hbGxvYyhNU19GUkVFX1RBQkxFX0NOVCAqIDIpOwotCQlpZiAoc2VnbWVudC0+ZnJlZV90YWJsZSA9PSBOVUxMKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBCVUlMRF9GQUlMKTsKLQl9Ci0JbWVtc2V0KCh1OCAqKSAoc2VnbWVudC0+ZnJlZV90YWJsZSksIDB4ZmYsIE1TX0ZSRUVfVEFCTEVfQ05UICogMik7Ci0KLQlzdGFydCA9ICh1MTYpIHNlZ19ubyA8PCA5OwotCWVuZCA9ICh1MTYpIChzZWdfbm8gKyAxKSA8PCA5OwotCi0JZGlzYWJsZV9jbnQgPSBzZWdtZW50LT5kaXNhYmxlX2NvdW50OwotCi0Jc2VnbWVudC0+Z2V0X2luZGV4ID0gc2VnbWVudC0+c2V0X2luZGV4ID0gMDsKLQlzZWdtZW50LT51bnVzZWRfYmxrX2NudCA9IDA7Ci0KLQlmb3IgKHBoeV9ibGsgPSBzdGFydDsgcGh5X2JsayA8IGVuZDsgcGh5X2JsaysrKSB7Ci0JCWlmIChkaXNhYmxlX2NudCkgewotCQkJZGVmZWN0X2ZsYWcgPSAwOwotCQkJZm9yIChpID0gMDsgaSA8IHNlZ21lbnQtPmRpc2FibGVfY291bnQ7IGkrKykgewotCQkJCWlmIChwaHlfYmxrID09IHNlZ21lbnQtPmRlZmVjdF9saXN0W2ldKSB7Ci0JCQkJCWRlZmVjdF9mbGFnID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGRlZmVjdF9mbGFnKSB7Ci0JCQkJZGlzYWJsZV9jbnQtLTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCXJldHZhbCA9Ci0JCSAgICBtc19yZWFkX2V4dHJhX2RhdGEoY2hpcCwgcGh5X2JsaywgMCwgZXh0cmEsIE1TX0VYVFJBX1NJWkUpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlSVFM1MVhfREVCVUdQKCJyZWFkIGV4dHJhIGRhdGEgZmFpbFxuIik7Ci0JCQltc19zZXRfYmFkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc2VnX25vID09IG1zX2NhcmQtPnNlZ21lbnRfY250IC0gMSkgewotCQkJaWYgKCEoZXh0cmFbMV0gJiBOT1RfVFJBTlNMQVRJT05fVEFCTEUpKSB7Ci0JCQkJaWYgKCEoY2hpcC0+Y2FyZF93cCAmIE1TX0NBUkQpKSB7Ci0JCQkJCXJldHZhbCA9IG1zX2VyYXNlX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQkJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWV4dHJhWzJdID0gMHhmZjsKLQkJCQkJZXh0cmFbM10gPSAweGZmOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmICghKGV4dHJhWzBdICYgQkxPQ0tfT0spKQotCQkJY29udGludWU7Ci0JCWlmICghKGV4dHJhWzFdICYgTk9UX0JPT1RfQkxPQ0spKQotCQkJY29udGludWU7Ci0JCWlmICgoZXh0cmFbMF0gJiBQQUdFX09LKSAhPSBQQUdFX09LKQotCQkJY29udGludWU7Ci0KLQkJbG9nX2JsayA9ICgodTE2KSBleHRyYVsyXSA8PCA4KSB8IGV4dHJhWzNdOwotCi0JCWlmIChsb2dfYmxrID09IDB4RkZGRikgewotCQkJaWYgKCEoY2hpcC0+Y2FyZF93cCAmIE1TX0NBUkQpKSB7Ci0JCQkJcmV0dmFsID0gbXNfZXJhc2VfYmxvY2soY2hpcCwgcGh5X2Jsayk7Ci0JCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0JCQltc19zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoKGxvZ19ibGsgPCBtc19zdGFydF9pZHhbc2VnX25vXSkgfHwKLQkJICAgIChsb2dfYmxrID49IG1zX3N0YXJ0X2lkeFtzZWdfbm8gKyAxXSkpIHsKLQkJCWlmICghKGNoaXAtPmNhcmRfd3AgJiBNU19DQVJEKSkgewotCQkJCXJldHZhbCA9IG1zX2VyYXNlX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJbXNfc2V0X3VudXNlZF9ibG9jayhjaGlwLCBwaHlfYmxrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHNlZ21lbnQtPmwycF90YWJsZVtsb2dfYmxrIC0gbXNfc3RhcnRfaWR4W3NlZ19ub11dID09Ci0JCSAgICAweEZGRkYpIHsKLQkJCXNlZ21lbnQtPmwycF90YWJsZVtsb2dfYmxrIC0gbXNfc3RhcnRfaWR4W3NlZ19ub11dID0KLQkJCSAgICBwaHlfYmxrOwotCQkJY29udGludWU7Ci0JCX0KLQotCQl1czEgPSBleHRyYVswXSAmIDB4MTA7Ci0JCXRtcF9ibGsgPSBzZWdtZW50LT5sMnBfdGFibGVbbG9nX2JsayAtIG1zX3N0YXJ0X2lkeFtzZWdfbm9dXTsKLQkJcmV0dmFsID0KLQkJICAgIG1zX3JlYWRfZXh0cmFfZGF0YShjaGlwLCB0bXBfYmxrLCAwLCBleHRyYSwgTVNfRVhUUkFfU0laRSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQljb250aW51ZTsKLQkJdXMyID0gZXh0cmFbMF0gJiAweDEwOwotCi0JCSh2b2lkKW1zX2FyYml0cmF0ZV9sMnAoY2hpcCwgcGh5X2JsaywKLQkJCQkgICAgICAgbG9nX2JsayAtIG1zX3N0YXJ0X2lkeFtzZWdfbm9dLCB1czEsCi0JCQkJICAgICAgIHVzMik7Ci0JCWNvbnRpbnVlOwotCX0KLQotCXNlZ21lbnQtPmJ1aWxkX2ZsYWcgPSAxOwotCi0JUlRTNTFYX0RFQlVHUCgidW51c2VkIGJsb2NrIGNvdW50OiAlZFxuIiwgc2VnbWVudC0+dW51c2VkX2Jsa19jbnQpOwotCi0JaWYgKHNlZ19ubyA9PSBtc19jYXJkLT5zZWdtZW50X2NudCAtIDEpIHsKLQkJaWYgKHNlZ21lbnQtPnVudXNlZF9ibGtfY250IDwgMikKLQkJCWNoaXAtPmNhcmRfd3AgfD0gTVNfQ0FSRDsKLQl9IGVsc2UgewotCQlpZiAoc2VnbWVudC0+dW51c2VkX2Jsa19jbnQgPCAxKQotCQkJY2hpcC0+Y2FyZF93cCB8PSBNU19DQVJEOwotCX0KLQotCWlmIChjaGlwLT5jYXJkX3dwICYgTVNfQ0FSRCkKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCi0JZm9yIChsb2dfYmxrID0gbXNfc3RhcnRfaWR4W3NlZ19ub107IGxvZ19ibGsgPCBtc19zdGFydF9pZHhbc2VnX25vICsgMV07Ci0JICAgICBsb2dfYmxrKyspIHsKLQkJaWYgKHNlZ21lbnQtPmwycF90YWJsZVtsb2dfYmxrIC0gbXNfc3RhcnRfaWR4W3NlZ19ub11dID09Ci0JCSAgICAweEZGRkYpIHsKLQkJCXBoeV9ibGsgPSBtc19nZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHNlZ19ubyk7Ci0JCQlpZiAocGh5X2JsayA9PSAweEZGRkYpIHsKLQkJCQljaGlwLT5jYXJkX3dwIHw9IE1TX0NBUkQ7Ci0JCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQkJfQotCQkJcmV0dmFsID0gbXNfaW5pdF9wYWdlKGNoaXAsIHBoeV9ibGssIGxvZ19ibGssIDAsIDEpOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9HT1RPKGNoaXAsIEJVSUxEX0ZBSUwpOwotCQkJc2VnbWVudC0+bDJwX3RhYmxlW2xvZ19ibGsgLSBtc19zdGFydF9pZHhbc2VnX25vXV0gPQotCQkJICAgIHBoeV9ibGs7Ci0JCQlpZiAoc2VnX25vID09IG1zX2NhcmQtPnNlZ21lbnRfY250IC0gMSkgewotCQkJCWlmIChzZWdtZW50LT51bnVzZWRfYmxrX2NudCA8IDIpIHsKLQkJCQkJY2hpcC0+Y2FyZF93cCB8PSBNU19DQVJEOwotCQkJCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc2VnbWVudC0+dW51c2VkX2Jsa19jbnQgPCAxKSB7Ci0JCQkJCWNoaXAtPmNhcmRfd3AgfD0gTVNfQ0FSRDsKLQkJCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWlmIChzZWdfbm8gPT0gMCkgewotCQlmb3IgKGxvZ19ibGsgPSAwOyBsb2dfYmxrIDwgNDk0OyBsb2dfYmxrKyspIHsKLQkJCXRtcF9ibGsgPSBzZWdtZW50LT5sMnBfdGFibGVbbG9nX2Jsa107Ci0JCQlpZiAodG1wX2JsayA8IG1zX2NhcmQtPmJvb3RfYmxvY2spIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJCb290IGJsb2NrIGlzIG5vdCB0aGUgZmlyc3Qgbm9ybWFsIGJsb2NrLlxuIik7Ci0KLQkJCQlpZiAoY2hpcC0+Y2FyZF93cCAmIE1TX0NBUkQpCi0JCQkJCWJyZWFrOwotCi0JCQkJcGh5X2JsayA9IG1zX2dldF91bnVzZWRfYmxvY2soY2hpcCwgMCk7Ci0jaWZkZWYgTVNfU1BFRURVUAotCQkJCXJldHZhbCA9Ci0JCQkJICAgIG1zX2F1dG9fY29weV9wYWdlKGNoaXAsIHRtcF9ibGssIHBoeV9ibGssCi0JCQkJCQkgICAgICBsb2dfYmxrLCAwLAotCQkJCQkJICAgICAgbXNfY2FyZC0+cGFnZV9vZmYgKyAxKTsKLSNlbHNlCi0JCQkJcmV0dmFsID0gbXNfY29weV9wYWdlKGNoaXAsIHRtcF9ibGssIHBoeV9ibGssCi0JCQkJCQkgICAgICBsb2dfYmxrLCAwLAotCQkJCQkJICAgICAgbXNfY2FyZC0+cGFnZV9vZmYgKyAxKTsKLSNlbmRpZgotCQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCQkJc2VnbWVudC0+bDJwX3RhYmxlW2xvZ19ibGtdID0gcGh5X2JsazsKLQotCQkJCXJldHZhbCA9IG1zX3NldF9iYWRfYmxvY2soY2hpcCwgdG1wX2Jsayk7Ci0JCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0KLUJVSUxEX0ZBSUw6Ci0Jc2VnbWVudC0+YnVpbGRfZmxhZyA9IDA7Ci0JaWYgKHNlZ21lbnQtPmwycF90YWJsZSkgewotCQl2ZnJlZShzZWdtZW50LT5sMnBfdGFibGUpOwotCQlzZWdtZW50LT5sMnBfdGFibGUgPSBOVUxMOwotCX0KLQlpZiAoc2VnbWVudC0+ZnJlZV90YWJsZSkgewotCQl2ZnJlZShzZWdtZW50LT5mcmVlX3RhYmxlKTsKLQkJc2VnbWVudC0+ZnJlZV90YWJsZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19GQUlMOwotfQotCi1pbnQgcnRzNTF4X3Jlc2V0X21zX2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCi0JbWVtc2V0KG1zX2NhcmQsIDAsIHNpemVvZihzdHJ1Y3QgbXNfaW5mbykpOwotCi0JcnRzNTF4X2VuYWJsZV9jYXJkX2Nsb2NrKGNoaXAsIE1TX0NBUkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbGVjdF9jYXJkKGNoaXAsIE1TX0NBUkQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JbXNfY2FyZC0+bXNfdHlwZSA9IDA7Ci0JbXNfY2FyZC0+bGFzdF9yd19pbnQgPSAwOwotCi0JcmV0dmFsID0gcmVzZXRfbXNfcHJvKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJaWYgKG1zX2NhcmQtPmNoZWNrX21zX2Zsb3cpIHsKLQkJCXJldHZhbCA9IHJlc2V0X21zKGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWlmIChjaGlwLT5vcHRpb24ucmVzZXRfb3JfcndfZmFpbF9zZXRfcGFkX2RyaXZlKSB7Ci0JCQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLAotCQkJCQkJQ0FSRF9EUklWRV9TRUwsIFNEMjBfRFJJVkVfTUFTSywKLQkJCQkJCURSSVZFXzhtQSk7Ci0JCQkJfQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGNoaXAtPm9wdGlvbi5yZXNldF9vcl9yd19mYWlsX3NldF9wYWRfZHJpdmUpIHsKLQkJCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9EUklWRV9TRUwsCi0JCQkJCQkgICAgICBTRDIwX0RSSVZFX01BU0ssCi0JCQkJCQkgICAgICBEUklWRV84bUEpOwotCQkJfQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQl9Ci0KLQlyZXR2YWwgPSBtc19zZXRfaW5pdF9wYXJhKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKCFDSEtfTVNQUk8obXNfY2FyZCkpIHsKLQkJcmV0dmFsID0gbXNfYnVpbGRfbDJwX3RibChjaGlwLCBtc19jYXJkLT50b3RhbF9ibG9jayAvIDUxMiAtIDEpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JUlRTNTFYX0RFQlVHUCgibXNfY2FyZC0+bXNfdHlwZSA9IDB4JXhcbiIsIG1zX2NhcmQtPm1zX3R5cGUpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1zcHJvX3NldF9yd19jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgc3RhcnRfc2VjLAotCQkJICAgIHUxNiBzZWNfY250LCB1OCBjbWQpCi17Ci0JaW50IHJldHZhbCwgaTsKLQl1OCBkYXRhWzhdOwotCi0JZGF0YVswXSA9IGNtZDsKLQlkYXRhWzFdID0gKHU4KSAoc2VjX2NudCA+PiA4KTsKLQlkYXRhWzJdID0gKHU4KSBzZWNfY250OwotCWRhdGFbM10gPSAodTgpIChzdGFydF9zZWMgPj4gMjQpOwotCWRhdGFbNF0gPSAodTgpIChzdGFydF9zZWMgPj4gMTYpOwotCWRhdGFbNV0gPSAodTgpIChzdGFydF9zZWMgPj4gOCk7Ci0JZGF0YVs2XSA9ICh1OCkgc3RhcnRfc2VjOwotCWRhdGFbN10gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBQUk9fRVhfU0VUX0NNRCwgNywgV0FJVF9JTlQsIGRhdGEsIDgpOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IE1TX01BWF9SRVRSWV9DT1VOVCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgbXNwcm9fc3RvcF9zZXFfbW9kZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlpZiAobXNfY2FyZC0+c2VxX21vZGUpIHsKLQkJcmV0dmFsID0gbXNfc3dpdGNoX2Nsb2NrKGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJcmV0dXJuOwotCi0JCW1zX2NhcmQtPnNlcV9tb2RlID0gMDsKLQkJbXNfY2FyZC0+dG90YWxfc2VjX2NudCA9IDA7Ci0JCW1zX2NhcmQtPmxhc3RfcndfaW50ID0gMDsKLQkJbXNfc2VuZF9jbWQoY2hpcCwgUFJPX1NUT1AsIFdBSVRfSU5UKTsKLQotCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0ZJRk9fQ1RMLCBGSUZPX0ZMVVNILAotCQkJCQkgIEZJRk9fRkxVU0gpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXNfYXV0b190dW5lX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQotCWlmIChjaGlwLT5hc2ljX2NvZGUpIHsKLQkJaWYgKG1zX2NhcmQtPm1zX2Nsb2NrID4gMzApCi0JCQltc19jYXJkLT5tc19jbG9jayAtPSAyMDsKLQl9IGVsc2UgewotCQlpZiAobXNfY2FyZC0+bXNfY2xvY2sgPT0gQ0xLXzgwKQotCQkJbXNfY2FyZC0+bXNfY2xvY2sgPSBDTEtfNjA7Ci0JCWVsc2UgaWYgKG1zX2NhcmQtPm1zX2Nsb2NrID09IENMS182MCkKLQkJCW1zX2NhcmQtPm1zX2Nsb2NrID0gQ0xLXzQwOwotCX0KLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtc3Byb19yd19tdWx0aV9zZWN0b3Ioc3RydWN0IHNjc2lfY21uZCAqc3JiLAotCQkJCSBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBzdGFydF9zZWN0b3IsCi0JCQkJIHUxNiBzZWN0b3JfY250KQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBtb2RlXzJrID0gMDsKLQl1MTYgY291bnQ7Ci0JdTggdmFsLCB0cmFuc19tb2RlLCByd190cGMsIHJ3X2NtZDsKLQotCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQltc19jYXJkLT5jb3VudGVyID0gMDsKLQotCWlmIChDSEtfTVNIRyhtc19jYXJkKSkgewotCQlpZiAoKHN0YXJ0X3NlY3RvciAlIDQpIHx8IChzZWN0b3JfY250ICUgNCkpIHsKLQkJCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgewotCQkJCXJ3X3RwYyA9IFBST19SRUFEX0xPTkdfREFUQTsKLQkJCQlyd19jbWQgPSBQUk9fUkVBRF9EQVRBOwotCQkJfSBlbHNlIHsKLQkJCQlyd190cGMgPSBQUk9fV1JJVEVfTE9OR19EQVRBOwotCQkJCXJ3X2NtZCA9IFBST19XUklURV9EQVRBOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCQkJcndfdHBjID0gUFJPX1JFQURfUVVBRF9EQVRBOwotCQkJCXJ3X2NtZCA9IFBST19SRUFEXzJLX0RBVEE7Ci0JCQl9IGVsc2UgewotCQkJCXJ3X3RwYyA9IFBST19XUklURV9RVUFEX0RBVEE7Ci0JCQkJcndfY21kID0gUFJPX1dSSVRFXzJLX0RBVEE7Ci0JCQl9Ci0JCQltb2RlXzJrID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgewotCQkJcndfdHBjID0gUFJPX1JFQURfTE9OR19EQVRBOwotCQkJcndfY21kID0gUFJPX1JFQURfREFUQTsKLQkJfSBlbHNlIHsKLQkJCXJ3X3RwYyA9IFBST19XUklURV9MT05HX0RBVEE7Ci0JCQlyd19jbWQgPSBQUk9fV1JJVEVfREFUQTsKLQkJfQotCX0KLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKLQkJdHJhbnNfbW9kZSA9IE1TX1RNX0FVVE9fUkVBRDsKLQllbHNlCi0JCXRyYW5zX21vZGUgPSBNU19UTV9BVVRPX1dSSVRFOwotCi0JdmFsID0gbXNfY2FyZC0+bGFzdF9yd19pbnQ7Ci0KLQlpZiAobXNfY2FyZC0+c2VxX21vZGUpIHsKLQkJaWYgKChtc19jYXJkLT5wcmVfZGlyICE9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24pCi0JCSAgICB8fCAoKG1zX2NhcmQtPnByZV9zZWNfYWRkciArIG1zX2NhcmQtPnByZV9zZWNfY250KSAhPQotCQkJc3RhcnRfc2VjdG9yKQotCQkgICAgfHwgKG1vZGVfMmsgJiYgKG1zX2NhcmQtPnNlcV9tb2RlICYgTU9ERV81MTJfU0VRKSkKLQkJICAgIHx8ICghbW9kZV8yayAmJiAobXNfY2FyZC0+c2VxX21vZGUgJiBNT0RFXzJLX1NFUSkpCi0JCSAgICB8fCAhKHZhbCAmIE1TX0lOVF9CUkVRKQotCQkgICAgfHwgKChtc19jYXJkLT50b3RhbF9zZWNfY250ICsgc2VjdG9yX2NudCkgPiAweEZFMDApKSB7Ci0JCQltc19jYXJkLT5zZXFfbW9kZSA9IDA7Ci0JCQltc19jYXJkLT50b3RhbF9zZWNfY250ID0gMDsKLQkJCW1zX2NhcmQtPmxhc3RfcndfaW50ID0gMDsKLQkJCWlmICh2YWwgJiBNU19JTlRfQlJFUSkgewotCQkJCXJldHZhbCA9IG1zX3NlbmRfY21kKGNoaXAsIFBST19TVE9QLCBXQUlUX0lOVCk7Ci0JCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0ZJRk9fQ1RMLAotCQkJCQlGSUZPX0ZMVVNILCBGSUZPX0ZMVVNIKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghbXNfY2FyZC0+c2VxX21vZGUpIHsKLQkJbXNfY2FyZC0+dG90YWxfc2VjX2NudCA9IDA7Ci0JCWlmIChzZWN0b3JfY250ID49IDB4ODApIHsKLQkJCWlmICgobXNfY2FyZC0+Y2FwYWNpdHkgLSBzdGFydF9zZWN0b3IpID4gMHhGRTAwKQotCQkJCWNvdW50ID0gMHhGRTAwOwotCQkJZWxzZQotCQkJCWNvdW50ID0KLQkJCQkgICAgKHUxNikgKG1zX2NhcmQtPmNhcGFjaXR5IC0gc3RhcnRfc2VjdG9yKTsKLQkJCWlmIChjb3VudCA+IHNlY3Rvcl9jbnQpIHsKLQkJCQlpZiAobW9kZV8yaykKLQkJCQkJbXNfY2FyZC0+c2VxX21vZGUgfD0gTU9ERV8yS19TRVE7Ci0JCQkJZWxzZQotCQkJCQltc19jYXJkLT5zZXFfbW9kZSB8PSBNT0RFXzUxMl9TRVE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQljb3VudCA9IHNlY3Rvcl9jbnQ7Ci0JCX0KLQkJcmV0dmFsID0gbXNwcm9fc2V0X3J3X2NtZChjaGlwLCBzdGFydF9zZWN0b3IsIGNvdW50LCByd19jbWQpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQltc19jYXJkLT5zZXFfbW9kZSA9IDA7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJfQotCX0KLQotCXJldHZhbCA9Ci0JICAgIG1zX3RyYW5zZmVyX2RhdGEoY2hpcCwgdHJhbnNfbW9kZSwgcndfdHBjLCBzZWN0b3JfY250LCBXQUlUX0lOVCwKLQkJCSAgICAgbW9kZV8yaywgc2NzaV9zZ19jb3VudChzcmIpLCBzY3NpX3NnbGlzdChzcmIpLAotCQkJICAgICBzY3NpX2J1ZmZsZW4oc3JiKSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQltc19jYXJkLT5zZXFfbW9kZSA9IDA7Ci0JCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBNU19UUkFOU19DRkcsICZ2YWwpOwotCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCWlmICh2YWwgJiBNU19JTlRfQlJFUSkKLQkJCW1zX3NlbmRfY21kKGNoaXAsIFBST19TVE9QLCBXQUlUX0lOVCk7Ci0JCWlmICh2YWwgJiAoTVNfQ1JDMTZfRVJSIHwgTVNfUkRZX1RJTUVPVVQpKSB7Ci0JCQlSVFM1MVhfREVCVUdQKCJNU1BybyBDUkMgZXJyb3IsIHR1bmUgY2xvY2shXG4iKTsKLQkJCW1zX2F1dG9fdHVuZV9jbG9jayhjaGlwKTsKLQkJfQotCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCW1zX2NhcmQtPnByZV9zZWNfYWRkciA9IHN0YXJ0X3NlY3RvcjsKLQltc19jYXJkLT5wcmVfc2VjX2NudCA9IHNlY3Rvcl9jbnQ7Ci0JbXNfY2FyZC0+cHJlX2RpciA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb247Ci0JbXNfY2FyZC0+dG90YWxfc2VjX2NudCArPSBzZWN0b3JfY250OwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1zcHJvX3JlYWRfZm9ybWF0X3Byb2dyZXNzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJCQkgICAgICBjb25zdCBpbnQgc2hvcnRfZGF0YV9sZW4pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWwsIGk7Ci0JdTMyIHRvdGFsX3Byb2dyZXNzLCBjdXJfcHJvZ3Jlc3M7Ci0JdTggY250LCB0bXA7Ci0JdTggZGF0YVs4XTsKLQotCW1zX2NhcmQtPmZvcm1hdF9zdGF0dXMgPSBGT1JNQVRfRkFJTDsKLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBNU19UUkFOU19DRkcsICZ0bXApOwotCi0JaWYgKCh0bXAgJiAoTVNfSU5UX0NFRCB8IE1TX0lOVF9DTUROSyB8IE1TX0lOVF9FUlIpKSA9PSBNU19JTlRfQ0VEKSB7Ci0JCW1zX2NhcmQtPmZvcm1hdF9zdGF0dXMgPSBGT1JNQVRfU1VDQ0VTUzsKLQkJbXNfY2FyZC0+cHJvX3VuZGVyX2Zvcm1hdHRpbmcgPSAwOwotCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0JfQotCWlmICghCi0JICAgICgodG1wICYgKE1TX0lOVF9CUkVRIHwgTVNfSU5UX0NFRCB8IE1TX0lOVF9DTUROSyB8IE1TX0lOVF9FUlIpKSA9PQotCSAgICAgTVNfSU5UX0JSRVEpKSB7Ci0JCW1zX2NhcmQtPnByb191bmRlcl9mb3JtYXR0aW5nID0gMDsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlpZiAoc2hvcnRfZGF0YV9sZW4gPj0gMjU2KQotCQljbnQgPSAwOwotCWVsc2UKLQkJY250ID0gKHU4KSBzaG9ydF9kYXRhX2xlbjsKLQotCXJldHZhbCA9Ci0JICAgIG1zX3JlYWRfYnl0ZXMoY2hpcCwgUFJPX1JFQURfU0hPUlRfREFUQSwgY250LCBXQUlUX0lOVCwgZGF0YSwgOCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQl0b3RhbF9wcm9ncmVzcyA9Ci0JICAgIChkYXRhWzBdIDw8IDI0KSB8IChkYXRhWzFdIDw8IDE2KSB8IChkYXRhWzJdIDw8IDgpIHwgZGF0YVszXTsKLQljdXJfcHJvZ3Jlc3MgPQotCSAgICAoZGF0YVs0XSA8PCAyNCkgfCAoZGF0YVs1XSA8PCAxNikgfCAoZGF0YVs2XSA8PCA4KSB8IGRhdGFbN107Ci0KLQlSVFM1MVhfREVCVUdQKCJ0b3RhbF9wcm9ncmVzcyA9ICVkLCBjdXJfcHJvZ3Jlc3MgPSAlZFxuIiwKLQkJICAgICAgIHRvdGFsX3Byb2dyZXNzLCBjdXJfcHJvZ3Jlc3MpOwotCi0JaWYgKHRvdGFsX3Byb2dyZXNzID09IDApIHsKLQkJbXNfY2FyZC0+cHJvZ3Jlc3MgPSAwOwotCX0gZWxzZSB7Ci0JCXU2NCB1bGx0bXAgPSAodTY0KSBjdXJfcHJvZ3Jlc3MgKiAodTY0KSA2NTUzNTsKLQkJZG9fZGl2KHVsbHRtcCwgdG90YWxfcHJvZ3Jlc3MpOwotCQltc19jYXJkLT5wcm9ncmVzcyA9ICh1MTYpIHVsbHRtcDsKLQl9Ci0JUlRTNTFYX0RFQlVHUCgicHJvZ3Jlc3MgPSAlZFxuIiwgbXNfY2FyZC0+cHJvZ3Jlc3MpOwotCi0JZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykgewotCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgTVNfVFJBTlNfQ0ZHLCAmdG1wKTsKLQkJaWYgKHRtcCAmCi0JCSAgICAoTVNfSU5UX0NFRCB8IE1TX0lOVF9DTUROSyB8IE1TX0lOVF9CUkVRIHwgTVNfSU5UX0VSUikpCi0JCQlicmVhazsKLQotCQl3YWl0X3RpbWVvdXQoMSk7Ci0JfQotCi0JaWYgKGkgPT0gMjUwMCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCVJUUzUxWF9ERUJVR1AoIk1TUHJvIGZvcm1hdCB0bXA6JWRcbiIsIHRtcCk7Ci0KLQlpZiAodG1wICYgKE1TX0lOVF9DTUROSyB8IE1TX0lOVF9FUlIpKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCWlmICh0bXAgJiBNU19JTlRfQ0VEKSB7Ci0JCW1zX2NhcmQtPmZvcm1hdF9zdGF0dXMgPSBGT1JNQVRfU1VDQ0VTUzsKLQkJbXNfY2FyZC0+cHJvX3VuZGVyX2Zvcm1hdHRpbmcgPSAwOwotCX0gZWxzZSBpZiAodG1wICYgTVNfSU5UX0JSRVEpIHsKLQkJbXNfY2FyZC0+Zm9ybWF0X3N0YXR1cyA9IEZPUk1BVF9JTl9QUk9HUkVTUzsKLQl9IGVsc2UgewotCQltc19jYXJkLT5mb3JtYXRfc3RhdHVzID0gRk9STUFUX0ZBSUw7Ci0JCW1zX2NhcmQtPnByb191bmRlcl9mb3JtYXR0aW5nID0gMDsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlSVFM1MVhfREVCVUdQKCJNU1BybyBmb3JtYXQgZm9ybWF0X3N0YXR1czolZFxuIiwKLQkJICAgICAgIG1zX2NhcmQtPmZvcm1hdF9zdGF0dXMpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi12b2lkIHJ0czUxeF9tc3Byb19wb2xsaW5nX2Zvcm1hdF9zdGF0dXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgaTsKLQotCWlmIChtc19jYXJkLT5wcm9fdW5kZXJfZm9ybWF0dGluZykgewotCQlmb3IgKGkgPSAwOyBpIDwgNjU1MzU7IGkrKykgewotCQkJbXNwcm9fcmVhZF9mb3JtYXRfcHJvZ3Jlc3MoY2hpcCwgTVNfU0hPUlRfREFUQV9MRU4pOwotCQkJaWYgKG1zX2NhcmQtPmZvcm1hdF9zdGF0dXMgIT0gRk9STUFUX0lOX1BST0dSRVNTKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuOwotfQotCi12b2lkIHJ0czUxeF9tc3Byb19mb3JtYXRfc2Vuc2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQotCWlmIChDSEtfRk9STUFUX1NUQVRVUyhtc19jYXJkLCBGT1JNQVRfU1VDQ0VTUykpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9OT19TRU5TRSk7Ci0JCW1zX2NhcmQtPnByb191bmRlcl9mb3JtYXR0aW5nID0gMDsKLQkJbXNfY2FyZC0+cHJvZ3Jlc3MgPSAwOwotCX0gZWxzZSBpZiAoQ0hLX0ZPUk1BVF9TVEFUVVMobXNfY2FyZCwgRk9STUFUX0lOX1BST0dSRVNTKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX2RhdGEoY2hpcCwgbHVuLCBDVVJfRVJSLCAweDAyLCAwLCAweDA0LCAweDA0LAotCQkJICAgICAgIDAsICh1MTYpIChtc19jYXJkLT5wcm9ncmVzcykpOwotCX0gZWxzZSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfRk9STUFUX0NNRF9GQUlMRUQpOwotCQltc19jYXJkLT5wcm9fdW5kZXJfZm9ybWF0dGluZyA9IDA7Ci0JCW1zX2NhcmQtPnByb2dyZXNzID0gMDsKLQl9Ci19Ci0KLWludCBydHM1MXhfbXNwcm9fZm9ybWF0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkgaW50IHNob3J0X2RhdGFfbGVuLCBpbnQgcXVpY2tfZm9ybWF0KQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBpOwotCXU4IGJ1Zls4XSwgdG1wOwotCXUxNiBwYXJhOwotCi0JcmV0dmFsID0gbXNfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIDB4MDAsIDB4MDAsIFByb19UUENQYXJtLCAweDAxKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCW1lbXNldChidWYsIDAsIDIpOwotCXN3aXRjaCAoc2hvcnRfZGF0YV9sZW4pIHsKLQljYXNlIDMyOgotCQlidWZbMF0gPSAwOwotCQlicmVhazsKLQljYXNlIDY0OgotCQlidWZbMF0gPSAxOwotCQlicmVhazsKLQljYXNlIDEyODoKLQkJYnVmWzBdID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSAyNTY6Ci0JZGVmYXVsdDoKLQkJYnVmWzBdID0gMzsKLQkJYnJlYWs7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBQUk9fV1JJVEVfUkVHLCAxLCBOT19XQUlUX0lOVCwgYnVmLCAyKTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBNU19NQVhfUkVUUllfQ09VTlQpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JLyogRm9ybWF0IGNvbW1hbmQgKi8KLQlpZiAocXVpY2tfZm9ybWF0KQotCQlwYXJhID0gMHgwMDAwOwotCWVsc2UKLQkJcGFyYSA9IDB4MDAwMTsKLQlyZXR2YWwgPSBtc3Byb19zZXRfcndfY21kKGNoaXAsIDAsIHBhcmEsIFBST19GT1JNQVQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCS8qIENoZWNrIElOVCAqLwotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBNU19UUkFOU19DRkcsICZ0bXApOwotCWlmICh0bXAgJiAoTVNfSU5UX0NNRE5LIHwgTVNfSU5UX0VSUikpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlpZiAoKHRtcCAmIChNU19JTlRfQlJFUSB8IE1TX0lOVF9DRUQpKSA9PSBNU19JTlRfQlJFUSkgewotCQltc19jYXJkLT5wcm9fdW5kZXJfZm9ybWF0dGluZyA9IDE7Ci0JCW1zX2NhcmQtPnByb2dyZXNzID0gMDsKLQkJbXNfY2FyZC0+Zm9ybWF0X3N0YXR1cyA9IEZPUk1BVF9JTl9QUk9HUkVTUzsKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCX0KLQotCWlmICh0bXAgJiBNU19JTlRfQ0VEKSB7Ci0JCW1zX2NhcmQtPnByb191bmRlcl9mb3JtYXR0aW5nID0gMDsKLQkJbXNfY2FyZC0+cHJvZ3Jlc3MgPSAwOwotCQltc19jYXJkLT5mb3JtYXRfc3RhdHVzID0gRk9STUFUX1NVQ0NFU1M7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBTQ1NJX0xVTihzcmIpLCBTRU5TRV9UWVBFX05PX1NFTlNFKTsKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCX0KLQotCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci19Ci0KLSNpZmRlZiBNU19TUEVFRFVQCi1zdGF0aWMgaW50IG1zX3JlYWRfbXVsdGlwbGVfcGFnZXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgcGh5X2JsaywKLQkJCQkgIHUxNiBsb2dfYmxrLCB1OCBzdGFydF9wYWdlLCB1OCBlbmRfcGFnZSwKLQkJCQkgIHU4ICpidWYsIHZvaWQgKipwdHIsIHVuc2lnbmVkIGludCAqb2Zmc2V0KQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCWludCBzZW5kX2Jsa2VuZDsKLQl1OCBleHRyYVtNU19FWFRSQV9TSVpFXSwgdmFsMSwgdmFsMiwgZGF0YVs2XTsKLQl1OCBwYWdlX2NudCA9IGVuZF9wYWdlIC0gc3RhcnRfcGFnZSwgcGFnZV9hZGRyLCBzZWNfY250OwotCi0JaWYgKGVuZF9wYWdlICE9IChtc19jYXJkLT5wYWdlX29mZiArIDEpKQotCQlzZW5kX2Jsa2VuZCA9IDE7Ci0JZWxzZQotCQlzZW5kX2Jsa2VuZCA9IDA7Ci0KLQlyZXR2YWwgPQotCSAgICBtc19yZWFkX2V4dHJhX2RhdGEoY2hpcCwgcGh5X2Jsaywgc3RhcnRfcGFnZSwgZXh0cmEsIE1TX0VYVFJBX1NJWkUpOwotCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJaWYgKChleHRyYVsxXSAmIDB4MzApICE9IDB4MzApIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19GTEFTSF9SRUFEX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9Ci0KLQlpZiAoQ0hLX01TNEJJVChtc19jYXJkKSkgewotCQkvKiBQYXJhbGxlbCBpbnRlcmZhY2UgKi8KLQkJZGF0YVswXSA9IDB4ODg7Ci0JfSBlbHNlIHsKLQkJLyogU2VyaWFsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4MDsKLQl9Ci0JLyogQmxvY2sgQWRkcmVzcyAqLwotCWRhdGFbMV0gPSAwOwotCWRhdGFbMl0gPSAodTgpIChwaHlfYmxrID4+IDgpOwotCWRhdGFbM10gPSAodTgpIHBoeV9ibGs7Ci0JLyogUGFnZSBOdW1iZXIKLQkgKiBFeHRyYSBkYXRhIGFjY2VzcyBtb2RlICovCi0JZGF0YVs0XSA9IDA7Ci0JZGF0YVs1XSA9IHN0YXJ0X3BhZ2U7Ci0KLQlyZXR2YWwgPQotCSAgICBtc19hdXRvX3NldF9jbWQoY2hpcCwgT3ZlcndyaXRlRmxhZywgTVNfRVhUUkFfU0laRSwgU3lzdGVtUGFybSwgNiwKLQkJCSAgICBCTE9DS19SRUFELCBXQUlUX0lOVCwgZGF0YSwgNiwgJnZhbDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JaWYgKHNlbmRfYmxrZW5kKQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19CTEtFTkQsIFNFVF9CTEtFTkQsCi0JCQkgICAgICAgU0VUX0JMS0VORCk7Ci0JZWxzZQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19CTEtFTkQsIFNFVF9CTEtFTkQsIDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TX0NGRywgV0FJVF9JTlQsCi0JCSAgICAgICBOT19XQUlUX0lOVCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfU0VDVE9SX0NOVF9MLCAweEZGLAotCQkgICAgICAgKHU4KSBwYWdlX2NudCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfU0VDVE9SX0NOVF9ILCAweEZGLCAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUEMsIDB4RkYsIFJFQURfUEFHRV9EQVRBKTsKLQotCXJ0czUxeF90cmFuc19kbWFfZW5hYmxlKERNQV9GUk9NX0RFVklDRSwgY2hpcCwgNTEyICogcGFnZV9jbnQsIERNQV81MTIpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBNU19UUkFOU0ZFUl9TVEFSVCB8IE1TX1RNX01VTFRJX1JFQUQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIE1TX1RSQU5TRkVSLCBNU19UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBNU19UUkFOU0ZFUl9FTkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ0RJUiB8IFNUQUdFX01TX1NUQVRVUywgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9Ci0JICAgIHJ0czUxeF90cmFuc2Zlcl9kYXRhX3BhcnRpYWwoY2hpcCwgUkNWX0JVTEtfUElQRShjaGlwKSwgKHZvaWQgKilidWYsCi0JCQkJCSBwdHIsIG9mZnNldCwgNTEyICogcGFnZV9jbnQsCi0JCQkJCSBzY3NpX3NnX2NvdW50KGNoaXAtPnNyYiksIE5VTEwsIDIwMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQlUUkFDRV9HT1RPKGNoaXAsIEZhaWwpOwotCX0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAzLCAyMDApOwotCWlmIChDSEVDS19NU19UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkpIHsKLQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQlUUkFDRV9HT1RPKGNoaXAsIEZhaWwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQotRmFpbDoKLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIE1TX1NFQ1RPUl9DTlRfTCwgMCwgMCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiB8IFNUQUdFX01TX1NUQVRVUywgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDMsIDIwMCk7Ci0KLQlpZiAoQ0hFQ0tfTVNfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0Jc2VjX2NudCA9IGNoaXAtPnJzcF9idWZbMF07Ci0JUlRTNTFYX0RFQlVHUCgiJWQgcGFnZXMgbmVlZCBiZSB0cmFuc2ZlcnJlZCwgJWQgcGFnZXMgcmVtYWluZWRcbiIsCi0JCSAgICAgICAoaW50KXBhZ2VfY250LCAoaW50KXNlY19jbnQpOwotCXBhZ2VfYWRkciA9IHN0YXJ0X3BhZ2UgKyAocGFnZV9jbnQgLSBzZWNfY250KTsKLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCXZhbDEgPSBjaGlwLT5yc3BfYnVmWzFdOwotCQlSVFM1MVhfREVCVUdQKCJNU19UUkFOU19DRkc6IDB4JXhcbiIsIHZhbDEpOwotCX0gZWxzZSB7Ci0JCXZhbDEgPSAwOwotCX0KLQotCXZhbDIgPSBjaGlwLT5yc3BfYnVmWzJdOwotCVJUUzUxWF9ERUJVR1AoIkdFVF9JTlQ6IDB4JXhcbiIsIHZhbDIpOwotCi0JaWYgKCh2YWwxICYgSU5UX0NNRE5LKSB8fCAodmFsMiAmIElOVF9SRUdfQ01ETkspKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19DTURfTkspOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmICgodmFsMSAmIElOVF9FUlIpIHx8ICh2YWwyICYgSU5UX1JFR19FUlIpKSB7Ci0JCWlmICgodmFsMSAmIElOVF9CUkVRKSB8fCAodmFsMiAmIElOVF9SRUdfQlJFUSkpIHsKLQkJCXJldHZhbCA9IG1zX3JlYWRfc3RhdHVzX3JlZyhjaGlwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlpZiAoIShjaGlwLT5jYXJkX3dwICYgTVNfQ0FSRCkpIHsKLQkJCQkJcmVzZXRfbXMoY2hpcCk7Ci0JCQkJCW1zX3NldF9wYWdlX3N0YXR1cyhsb2dfYmxrLCBzZXRQU19ORywKLQkJCQkJCWV4dHJhLCBNU19FWFRSQV9TSVpFKTsKLQkJCQkJbXNfd3JpdGVfZXh0cmFfZGF0YShjaGlwLCBwaHlfYmxrLAotCQkJCQkJcGFnZV9hZGRyLCBleHRyYSwKLQkJCQkJCU1TX0VYVFJBX1NJWkUpOwotCQkJCX0KLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfUkVBRF9FUlJPUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19GTEFTSF9SRUFEX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoQ0hLX01TNEJJVChtc19jYXJkKSkgewotCQkJaWYgKCEodmFsMSAmIElOVF9CUkVRKSAmJiAhKHZhbDIgJiBJTlRfUkVHX0JSRVEpKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0JSRVFfRVJST1IpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoISh2YWwyICYgSU5UX1JFR19CUkVRKSkgewotCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19CUkVRX0VSUk9SKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0JfQotCi0JVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLX0KLQotc3RhdGljIGludCBtc193cml0ZV9tdWx0aXBsZV9wYWdlcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBvbGRfYmxrLAotCQkJCSAgIHUxNiBuZXdfYmxrLCB1MTYgbG9nX2JsaywgdTggc3RhcnRfcGFnZSwKLQkJCQkgICB1OCBlbmRfcGFnZSwgdTggKmJ1Ziwgdm9pZCAqKnB0ciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbCwgaTsKLQlpbnQgc2VuZF9ibGtlbmQ7Ci0JdTggdmFsLCBkYXRhWzE2XTsKLQl1OCBwYWdlX2NudCA9IGVuZF9wYWdlIC0gc3RhcnRfcGFnZTsKLQotCWlmICgoZW5kX3BhZ2UgPT0gKG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMSkpIHx8IChwYWdlX2NudCA9PSAxKSkKLQkJc2VuZF9ibGtlbmQgPSAwOwotCWVsc2UKLQkJc2VuZF9ibGtlbmQgPSAxOwotCi0JaWYgKCFzdGFydF9wYWdlKSB7Ci0JCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCQkvKiBQYXJhbGxlbCBpbnRlcmZhY2UgKi8KLQkJCWRhdGFbMF0gPSAweDg4OwotCQl9IGVsc2UgewotCQkJLyogU2VyaWFsIGludGVyZmFjZSAqLwotCQkJZGF0YVswXSA9IDB4ODA7Ci0JCX0KLQkJLyogQmxvY2sgQWRkcmVzcyAqLwotCQlkYXRhWzFdID0gMDsKLQkJZGF0YVsyXSA9ICh1OCkgKG9sZF9ibGsgPj4gOCk7Ci0JCWRhdGFbM10gPSAodTgpIG9sZF9ibGs7Ci0JCWRhdGFbNF0gPSAweDgwOwotCQlkYXRhWzVdID0gMDsKLQkJZGF0YVs2XSA9IDB4RUY7Ci0JCWRhdGFbN10gPSAweEZGOwotCi0JCXJldHZhbCA9Ci0JCSAgICBtc19hdXRvX3NldF9jbWQoY2hpcCwgT3ZlcndyaXRlRmxhZywgTVNfRVhUUkFfU0laRSwKLQkJCQkgICAgU3lzdGVtUGFybSwgNywgQkxPQ0tfV1JJVEUsIFdBSVRfSU5ULCBkYXRhLAotCQkJCSAgICA3LCAmdmFsKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHZhbCA9Ci0JICAgIG1zX3NldF9yd19yZWdfYWRkcihjaGlwLCBPdmVyd3JpdGVGbGFnLCBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLAotCQkJICAgICAgICg2ICsgTVNfRVhUUkFfU0laRSkpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX05PX0VSUk9SKTsKLQotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4ODsKLQl9IGVsc2UgewotCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDgwOwotCX0KLQkvKiBCbG9jayBBZGRyZXNzICovCi0JZGF0YVsxXSA9IDA7Ci0JZGF0YVsyXSA9ICh1OCkgKG5ld19ibGsgPj4gOCk7Ci0JZGF0YVszXSA9ICh1OCkgbmV3X2JsazsKLQkvKiBQYWdlIE51bWJlcgotCSAqIEV4dHJhIGRhdGEgYWNjZXNzIG1vZGUgKi8KLQlpZiAocGFnZV9jbnQgPT0gMSkgewotCQkvKiBTaW5nbGUgcGFnZSBhY2Nlc3MgbW9kZSAqLwotCQlkYXRhWzRdID0gMHgyMDsKLQl9IGVsc2UgewotCQkvKiBCbG9jayBhY2Nlc3MgbW9kZSAqLwotCQlkYXRhWzRdID0gMDsKLQl9Ci0JZGF0YVs1XSA9IHN0YXJ0X3BhZ2U7Ci0JZGF0YVs2XSA9IDB4Rjg7Ci0JZGF0YVs3XSA9IDB4RkY7Ci0JZGF0YVs4XSA9ICh1OCkgKGxvZ19ibGsgPj4gOCk7Ci0JZGF0YVs5XSA9ICh1OCkgbG9nX2JsazsKLQotCWZvciAoaSA9IDB4MEE7IGkgPCAweDEwOyBpKyspIHsKLQkJLyogRUNDICovCi0JCWRhdGFbaV0gPSAweEZGOwotCX0KLQotCXJldHZhbCA9Ci0JICAgIG1zX2F1dG9fc2V0X2NtZChjaGlwLCBPdmVyd3JpdGVGbGFnLCBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLAotCQkJICAgICg2ICsgTVNfRVhUUkFfU0laRSksIEJMT0NLX1dSSVRFLCBXQUlUX0lOVCwgZGF0YSwKLQkJCSAgICAxNiwgJnZhbCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlpZiAoc2VuZF9ibGtlbmQpCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0JMS0VORCwgU0VUX0JMS0VORCwKLQkJCSAgICAgICBTRVRfQkxLRU5EKTsKLQllbHNlCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX0JMS0VORCwgU0VUX0JMS0VORCwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNfQ0ZHLCBXQUlUX0lOVCwKLQkJICAgICAgIE5PX1dBSVRfSU5UKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19TRUNUT1JfQ05UX0wsIDB4RkYsCi0JCSAgICAgICAodTgpIHBhZ2VfY250KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19TRUNUT1JfQ05UX0gsIDB4RkYsIDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RQQywgMHhGRiwgV1JJVEVfUEFHRV9EQVRBKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkgICAgICAgUklOR19CVUZGRVIpOwotCi0JcnRzNTF4X3RyYW5zX2RtYV9lbmFibGUoRE1BX1RPX0RFVklDRSwgY2hpcCwgNTEyICogcGFnZV9jbnQsIERNQV81MTIpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBNU19UUkFOU0ZFUl9TVEFSVCB8IE1TX1RNX01VTFRJX1dSSVRFKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBNU19UUkFOU0ZFUiwgTVNfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgTVNfVFJBTlNGRVJfRU5EKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NET1IgfCBTVEFHRV9NU19TVEFUVVMsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPQotCSAgICBydHM1MXhfdHJhbnNmZXJfZGF0YV9wYXJ0aWFsKGNoaXAsIFNORF9CVUxLX1BJUEUoY2hpcCksICh2b2lkICopYnVmLAotCQkJCQkgcHRyLCBvZmZzZXQsIDUxMiAqIHBhZ2VfY250LAotCQkJCQkgc2NzaV9zZ19jb3VudChjaGlwLT5zcmIpLCBOVUxMLCAyMDAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9jbGVhcl9tc19lcnJvcihjaGlwKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMywgMjAwMCk7Ci0KLQotCWlmIChDSEVDS19NU19UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkpIHsKLQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGludCBtc19yZWFkX211bHRpcGxlX3BhZ2VzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IHBoeV9ibGssCi0JCQkJICB1MTYgbG9nX2JsaywgdTggc3RhcnRfcGFnZSwgdTggZW5kX3BhZ2UsCi0JCQkJICB1OCAqYnVmLCB2b2lkICoqcHRyLCB1bnNpZ25lZCBpbnQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbCwgaTsKLQl1OCBleHRyYVtNU19FWFRSQV9TSVpFXSwgcGFnZV9hZGRyLCB2YWwsIHRyYW5zX2NmZywgZGF0YVs2XTsKLQotCXJldHZhbCA9Ci0JICAgIG1zX3JlYWRfZXh0cmFfZGF0YShjaGlwLCBwaHlfYmxrLCBzdGFydF9wYWdlLCBleHRyYSwgTVNfRVhUUkFfU0laRSk7Ci0JaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQlpZiAoKGV4dHJhWzFdICYgMHgzMCkgIT0gMHgzMCkgewotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0ZMQVNIX1JFQURfRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCX0KLQotCXJldHZhbCA9Ci0JICAgIG1zX3NldF9yd19yZWdfYWRkcihjaGlwLCBPdmVyd3JpdGVGbGFnLCBNU19FWFRSQV9TSVpFLCBTeXN0ZW1QYXJtLAotCQkJICAgICAgIDYpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCS8qIFdyaXRlIFJFRyAqLwotCWlmIChDSEtfTVM0QklUKG1zX2NhcmQpKSB7Ci0JCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQlkYXRhWzBdID0gMHg4ODsKLQl9IGVsc2UgewotCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDgwOwotCX0KLQkvKiBCbG9jayBBZGRyZXNzICovCi0JZGF0YVsxXSA9IDA7Ci0JZGF0YVsyXSA9ICh1OCkgKHBoeV9ibGsgPj4gOCk7Ci0JZGF0YVszXSA9ICh1OCkgcGh5X2JsazsKLQkvKiBQYWdlIE51bWJlcgotCSAqIEV4dHJhIGRhdGEgYWNjZXNzIG1vZGUgKi8KLQlkYXRhWzRdID0gMDsKLQlkYXRhWzVdID0gc3RhcnRfcGFnZTsKLQotCWZvciAoaSA9IDA7IGkgPCBNU19NQVhfUkVUUllfQ09VTlQ7IGkrKykgewotCQlyZXR2YWwgPQotCQkgICAgbXNfd3JpdGVfYnl0ZXMoY2hpcCwgV1JJVEVfUkVHLCA2LCBOT19XQUlUX0lOVCwgZGF0YSwgNik7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTVNfTUFYX1JFVFJZX0NPVU5UKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX05PX0VSUk9SKTsKLQotCXJldHZhbCA9IG1zX3NlbmRfY21kKGNoaXAsIEJMT0NLX1JFQUQsIFdBSVRfSU5UKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWZvciAocGFnZV9hZGRyID0gc3RhcnRfcGFnZTsgcGFnZV9hZGRyIDwgZW5kX3BhZ2U7IHBhZ2VfYWRkcisrKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBNU19DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19DQVJEKTsKLQkJCWNoaXAtPmNhcmRfZXhpc3QgJj0gfk1TX0NBUkQ7Ci0JCQljaGlwLT5jYXJkX3JlYWR5ICY9IH5NU19DQVJEOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCQkvKiBHRVRfSU5UIFJlZ2lzdGVyICovCi0JCXJldHZhbCA9IG1zX3JlYWRfYnl0ZXMoY2hpcCwgR0VUX0lOVCwgMSwgTk9fV0FJVF9JTlQsICZ2YWwsIDEpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCWlmICh2YWwgJiBJTlRfUkVHX0NNRE5LKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQ01EX05LKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQkJaWYgKHZhbCAmIElOVF9SRUdfRVJSKSB7Ci0JCQlpZiAodmFsICYgSU5UX1JFR19CUkVRKSB7Ci0JCQkJcmV0dmFsID0gbXNfcmVhZF9zdGF0dXNfcmVnKGNoaXApOwotCQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQkJaWYgKCEoY2hpcC0+Y2FyZF93cCAmIE1TX0NBUkQpKSB7Ci0JCQkJCQlyZXNldF9tcyhjaGlwKTsKLQkJCQkJCW1zX3NldF9wYWdlX3N0YXR1cyhsb2dfYmxrLAotCQkJCQkJCXNldFBTX05HLCBleHRyYSwKLQkJCQkJCQlNU19FWFRSQV9TSVpFKTsKLQkJCQkJCW1zX3dyaXRlX2V4dHJhX2RhdGEoY2hpcCwKLQkJCQkJCQlwaHlfYmxrLCBwYWdlX2FkZHIsCi0JCQkJCQkJZXh0cmEsIE1TX0VYVFJBX1NJWkUpOwotCQkJCQl9Ci0JCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLAotCQkJCQkJCU1TX0ZMQVNIX1JFQURfRVJST1IpOwotCQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0ZMQVNIX1JFQURfRVJST1IpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoISh2YWwgJiBJTlRfUkVHX0JSRVEpKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0JSRVFfRVJST1IpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocGFnZV9hZGRyID09IChlbmRfcGFnZSAtIDEpKSB7Ci0JCQlpZiAoISh2YWwgJiBJTlRfUkVHX0NFRCkpIHsKLQkJCQlyZXR2YWwgPSBtc19zZW5kX2NtZChjaGlwLCBCTE9DS19FTkQsIFdBSVRfSU5UKTsKLQkJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCX0KLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfcmVhZF9ieXRlcyhjaGlwLCBHRVRfSU5ULCAxLCBOT19XQUlUX0lOVCwgJnZhbCwKLQkJCQkJICAxKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQlpZiAoISh2YWwgJiBJTlRfUkVHX0NFRCkpIHsKLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfUkVBRF9FUlJPUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQotCQkJdHJhbnNfY2ZnID0gTk9fV0FJVF9JTlQ7Ci0JCX0gZWxzZSB7Ci0JCQl0cmFuc19jZmcgPSBXQUlUX0lOVDsKLQkJfQotCi0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUEMsIDB4RkYsCi0JCQkgICAgICAgUkVBRF9QQUdFX0RBVEEpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUkFOU19DRkcsIDB4RkYsCi0JCQkgICAgICAgdHJhbnNfY2ZnKTsKLQotCQlydHM1MXhfdHJhbnNfZG1hX2VuYWJsZShETUFfRlJPTV9ERVZJQ0UsIGNoaXAsIDUxMiwgRE1BXzUxMik7Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNGRVIsIDB4RkYsCi0JCQkgICAgICAgTVNfVFJBTlNGRVJfU1RBUlQgfCBNU19UTV9OT1JNQUxfUkVBRCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIE1TX1RSQU5TRkVSLAotCQkJICAgICAgIE1TX1RSQU5TRkVSX0VORCwgTVNfVFJBTlNGRVJfRU5EKTsKLQotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DRElSLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJcmV0dmFsID0KLQkJICAgIHJ0czUxeF90cmFuc2Zlcl9kYXRhX3BhcnRpYWwoY2hpcCwgUkNWX0JVTEtfUElQRShjaGlwKSwKLQkJCQkJCSAodm9pZCAqKWJ1ZiwgcHRyLCBvZmZzZXQsIDUxMiwKLQkJCQkJCSBzY3NpX3NnX2NvdW50KGNoaXAtPnNyYiksIE5VTEwsCi0JCQkJCQkgMjAwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1RJTUVET1VUKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX1RPX0VSUk9SKTsKLQkJCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQl9Ci0KLQkJCXJldHZhbCA9Ci0JCQkgICAgcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIE1TX1RSQU5TX0NGRywgJnZhbCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX1RPX0VSUk9SKTsKLQkJCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJCWlmICh2YWwgJiAoTVNfQ1JDMTZfRVJSIHwgTVNfUkRZX1RJTUVPVVQpKSB7Ci0JCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0NSQzE2X0VSUk9SKTsKLQkJCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCi0JCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDIwMDApOwotCQlpZiAoQ0hFQ0tfTVNfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkgewotCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19UT19FUlJPUik7Ci0JCQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCi0JCQlyZXR2YWwgPQotCQkJICAgIHJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBNU19UUkFOU19DRkcsICZ2YWwpOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19UT19FUlJPUik7Ci0JCQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCQkJaWYgKHZhbCAmIChNU19DUkMxNl9FUlIgfCBNU19SRFlfVElNRU9VVCkpIHsKLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfQ1JDMTZfRVJST1IpOwotCQkJCXJ0czUxeF9jbGVhcl9tc19lcnJvcihjaGlwKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1zX3dyaXRlX211bHRpcGxlX3BhZ2VzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IG9sZF9ibGssCi0JCQkJICAgdTE2IG5ld19ibGssIHUxNiBsb2dfYmxrLCB1OCBzdGFydF9wYWdlLAotCQkJCSAgIHU4IGVuZF9wYWdlLCB1OCAqYnVmLCB2b2lkICoqcHRyLAotCQkJCSAgIHVuc2lnbmVkIGludCAqb2Zmc2V0KQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBpOwotCXU4IHBhZ2VfYWRkciwgdmFsLCBkYXRhWzE2XTsKLQotCWlmICghc3RhcnRfcGFnZSkgewotCQlyZXR2YWwgPQotCQkgICAgbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsCi0JCQkJICAgICAgIFN5c3RlbVBhcm0sIDcpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJaWYgKENIS19NUzRCSVQobXNfY2FyZCkpIHsKLQkJCS8qIFBhcmFsbGVsIGludGVyZmFjZSAqLwotCQkJZGF0YVswXSA9IDB4ODg7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXJpYWwgaW50ZXJmYWNlICovCi0JCQlkYXRhWzBdID0gMHg4MDsKLQkJfQotCQkvKiBCbG9jayBBZGRyZXNzICovCi0JCWRhdGFbMV0gPSAwOwotCQlkYXRhWzJdID0gKHU4KSAob2xkX2JsayA+PiA4KTsKLQkJZGF0YVszXSA9ICh1OCkgb2xkX2JsazsKLQkJZGF0YVs0XSA9IDB4ODA7Ci0JCWRhdGFbNV0gPSAwOwotCQlkYXRhWzZdID0gMHhFRjsKLQkJZGF0YVs3XSA9IDB4RkY7Ci0KLQkJcmV0dmFsID0KLQkJICAgIG1zX3dyaXRlX2J5dGVzKGNoaXAsIFdSSVRFX1JFRywgNywgTk9fV0FJVF9JTlQsIGRhdGEsIDgpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJcmV0dmFsID0gbXNfc2VuZF9jbWQoY2hpcCwgQkxPQ0tfV1JJVEUsIFdBSVRfSU5UKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkvKiBHRVRfSU5UIFJlZ2lzdGVyICovCi0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc190cmFuc2Zlcl90cGMoY2hpcCwgTVNfVE1fUkVBRF9CWVRFUywgR0VUX0lOVCwgMSwKLQkJCQkgICAgTk9fV0FJVF9JTlQpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dmFsID0KLQkgICAgbXNfc2V0X3J3X3JlZ19hZGRyKGNoaXAsIE92ZXJ3cml0ZUZsYWcsIE1TX0VYVFJBX1NJWkUsIFN5c3RlbVBhcm0sCi0JCQkgICAgICAgKDYgKyBNU19FWFRSQV9TSVpFKSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfTk9fRVJST1IpOwotCi0JaWYgKENIS19NUzRCSVQobXNfY2FyZCkpIHsKLQkJLyogUGFyYWxsZWwgaW50ZXJmYWNlICovCi0JCWRhdGFbMF0gPSAweDg4OwotCX0gZWxzZSB7Ci0JCS8qIFNlcmlhbCBpbnRlcmZhY2UgKi8KLQkJZGF0YVswXSA9IDB4ODA7Ci0JfQotCS8qIEJsb2NrIEFkZHJlc3MgKi8KLQlkYXRhWzFdID0gMDsKLQlkYXRhWzJdID0gKHU4KSAobmV3X2JsayA+PiA4KTsKLQlkYXRhWzNdID0gKHU4KSBuZXdfYmxrOwotCS8qIFBhZ2UgTnVtYmVyCi0JICogRXh0cmEgZGF0YSBhY2Nlc3MgbW9kZSAqLwotCWlmICgoZW5kX3BhZ2UgLSBzdGFydF9wYWdlKSA9PSAxKSB7Ci0JCS8qIFNpbmdsZSBwYWdlIGFjY2VzcyBtb2RlICovCi0JCWRhdGFbNF0gPSAweDIwOwotCX0gZWxzZSB7Ci0JCS8qIEJsb2NrIGFjY2VzcyBtb2RlICovCi0JCWRhdGFbNF0gPSAwOwotCX0KLQlkYXRhWzVdID0gc3RhcnRfcGFnZTsKLQlkYXRhWzZdID0gMHhGODsKLQlkYXRhWzddID0gMHhGRjsKLQlkYXRhWzhdID0gKHU4KSAobG9nX2JsayA+PiA4KTsKLQlkYXRhWzldID0gKHU4KSBsb2dfYmxrOwotCi0JZm9yIChpID0gMHgwQTsgaSA8IDB4MTA7IGkrKykgewotCQkvKiBFQ0MgKi8KLQkJZGF0YVtpXSA9IDB4RkY7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBXUklURV9SRUcsIDYgKyBNU19FWFRSQV9TSVpFLAotCQkJCSAgIE5PX1dBSVRfSU5ULCBkYXRhLCAxNik7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTVNfTUFYX1JFVFJZX0NPVU5UKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JZm9yIChpID0gMDsgaSA8IE1TX01BWF9SRVRSWV9DT1VOVDsgaSsrKSB7Ci0JCXJldHZhbCA9IG1zX3NlbmRfY21kKGNoaXAsIEJMT0NLX1dSSVRFLCBXQUlUX0lOVCk7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTVNfTUFYX1JFVFJZX0NPVU5UKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCS8qIEdFVF9JTlQgUmVnaXN0ZXIgKi8KLQlyZXR2YWwgPSBtc19yZWFkX2J5dGVzKGNoaXAsIEdFVF9JTlQsIDEsIE5PX1dBSVRfSU5ULCAmdmFsLCAxKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWZvciAocGFnZV9hZGRyID0gc3RhcnRfcGFnZTsgcGFnZV9hZGRyIDwgZW5kX3BhZ2U7IHBhZ2VfYWRkcisrKSB7Ci0JCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBNU19DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19DQVJEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQotCQlpZiAodmFsICYgSU5UX1JFR19DTUROSykgewotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0NNRF9OSyk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JCWlmICh2YWwgJiBJTlRfUkVHX0VSUikgewotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0ZMQVNIX1dSSVRFX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQkJaWYgKCEodmFsICYgSU5UX1JFR19CUkVRKSkgewotCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsIE1TX0JSRVFfRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCXVkZWxheSgzMCk7Ci0KLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RQQywgMHhGRiwKLQkJCSAgICAgICBXUklURV9QQUdFX0RBVEEpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUkFOU19DRkcsIDB4RkYsCi0JCQkgICAgICAgV0FJVF9JTlQpOwotCi0JCXJ0czUxeF90cmFuc19kbWFfZW5hYmxlKERNQV9UT19ERVZJQ0UsIGNoaXAsIDUxMiwgRE1BXzUxMik7Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTVNfVFJBTlNGRVIsIDB4RkYsCi0JCQkgICAgICAgTVNfVFJBTlNGRVJfU1RBUlQgfCBNU19UTV9OT1JNQUxfV1JJVEUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBNU19UUkFOU0ZFUiwKLQkJCSAgICAgICBNU19UUkFOU0ZFUl9FTkQsIE1TX1RSQU5TRkVSX0VORCk7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ0RPUiwgMTAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXJldHZhbCA9Ci0JCSAgICBydHM1MXhfdHJhbnNmZXJfZGF0YV9wYXJ0aWFsKGNoaXAsIFNORF9CVUxLX1BJUEUoY2hpcCksCi0JCQkJCQkgKHZvaWQgKilidWYsIHB0ciwgb2Zmc2V0LCA1MTIsCi0JCQkJCQkgc2NzaV9zZ19jb3VudChjaGlwLT5zcmIpLCBOVUxMLAotCQkJCQkJIDIwMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfVE9fRVJST1IpOwotCQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCi0JCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX1RJTUVET1VUKTsKLQkJCWVsc2UKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgMjAwMCk7Ci0JCWlmIChDSEVDS19NU19UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkpIHsKLQkJCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19UT19FUlJPUik7Ci0JCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0KLQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1RJTUVET1VUKQotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfVElNRURPVVQpOwotCQkJZWxzZQotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQkJLyogR0VUX0lOVCBSZWdpc3RlciAqLwotCQlyZXR2YWwgPSBtc19yZWFkX2J5dGVzKGNoaXAsIEdFVF9JTlQsIDEsIE5PX1dBSVRfSU5ULCAmdmFsLCAxKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCWlmICgoZW5kX3BhZ2UgLSBzdGFydF9wYWdlKSA9PSAxKSB7Ci0JCQlpZiAoISh2YWwgJiBJTlRfUkVHX0NFRCkpIHsKLQkJCQkvKiBDb21tYW5kIGNhbiBub3QgYmUgZXhlY3V0ZWQgKi8KLQkJCQltc19zZXRfZXJyX2NvZGUoY2hpcCwgTVNfRkxBU0hfV1JJVEVfRVJST1IpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGFnZV9hZGRyID09IChlbmRfcGFnZSAtIDEpKSB7Ci0JCQkJaWYgKCEodmFsICYgSU5UX1JFR19DRUQpKSB7Ci0JCQkJCXJldHZhbCA9Ci0JCQkJCSAgICBtc19zZW5kX2NtZChjaGlwLCBCTE9DS19FTkQsCi0JCQkJCQkJV0FJVF9JTlQpOwotCQkJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQkJfQotCQkJCS8qIEdFVF9JTlQgUmVnaXN0ZXIgKi8KLQkJCQlyZXR2YWwgPQotCQkJCSAgICBtc19yZWFkX2J5dGVzKGNoaXAsIEdFVF9JTlQsIDEsIE5PX1dBSVRfSU5ULAotCQkJCQkJICAmdmFsLCAxKTsKLQkJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCX0KLQotCQkJaWYgKChwYWdlX2FkZHIgPT0gKGVuZF9wYWdlIC0gMSkpCi0JCQkgICAgfHwgKHBhZ2VfYWRkciA9PSBtc19jYXJkLT5wYWdlX29mZikpIHsKLQkJCQlpZiAoISh2YWwgJiBJTlRfUkVHX0NFRCkpIHsKLQkJCQkJbXNfc2V0X2Vycl9jb2RlKGNoaXAsCi0JCQkJCQkJTVNfRkxBU0hfV1JJVEVfRVJST1IpOwotCQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IG1zX2ZpbmlzaF93cml0ZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBvbGRfYmxrLCB1MTYgbmV3X2JsaywKLQkJCSAgIHUxNiBsb2dfYmxrLCB1OCBwYWdlX29mZikKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbCwgc2VnX25vOwotCi0jaWZkZWYgTVNfU1BFRURVUAotCXJldHZhbCA9IG1zX2F1dG9fY29weV9wYWdlKGNoaXAsIG9sZF9ibGssIG5ld19ibGssIGxvZ19ibGssCi0JCQkJICAgcGFnZV9vZmYsIG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMSk7Ci0jZWxzZQotCXJldHZhbCA9IG1zX2NvcHlfcGFnZShjaGlwLCBvbGRfYmxrLCBuZXdfYmxrLCBsb2dfYmxrLAotCQkJICAgICAgcGFnZV9vZmYsIG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMSk7Ci0jZW5kaWYKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXNlZ19ubyA9IG9sZF9ibGsgPj4gOTsKLQotCWlmIChNU19UU1RfQkFEX0JMT0NLX0ZMRyhtc19jYXJkKSkgewotCQlNU19DTFJfQkFEX0JMT0NLX0ZMRyhtc19jYXJkKTsKLQkJbXNfc2V0X2JhZF9ibG9jayhjaGlwLCBvbGRfYmxrKTsKLQl9IGVsc2UgewotCQlyZXR2YWwgPSBtc19lcmFzZV9ibG9jayhjaGlwLCBvbGRfYmxrKTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCW1zX3NldF91bnVzZWRfYmxvY2soY2hpcCwgb2xkX2Jsayk7Ci0JfQotCi0JbXNfc2V0X2wycF90YmwoY2hpcCwgc2VnX25vLCBsb2dfYmxrIC0gbXNfc3RhcnRfaWR4W3NlZ19ub10sIG5ld19ibGspOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1zX3ByZXBhcmVfd3JpdGUoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgb2xkX2JsaywgdTE2IG5ld19ibGssCi0JCQkgICAgdTE2IGxvZ19ibGssIHU4IHN0YXJ0X3BhZ2UpCi17Ci0JaW50IHJldHZhbDsKLQotCWlmIChzdGFydF9wYWdlKSB7Ci0jaWZkZWYgTVNfU1BFRURVUAotCQlyZXR2YWwgPQotCQkgICAgbXNfYXV0b19jb3B5X3BhZ2UoY2hpcCwgb2xkX2JsaywgbmV3X2JsaywgbG9nX2JsaywgMCwKLQkJCQkgICAgICBzdGFydF9wYWdlKTsKLSNlbHNlCi0JCXJldHZhbCA9Ci0JCSAgICBtc19jb3B5X3BhZ2UoY2hpcCwgb2xkX2JsaywgbmV3X2JsaywgbG9nX2JsaywgMCwKLQkJCQkgc3RhcnRfcGFnZSk7Ci0jZW5kaWYKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9tc19kZWxheV93cml0ZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCXN0cnVjdCBydHM1MXhfbXNfZGVsYXlfd3JpdGVfdGFnICpkZWxheV93cml0ZSA9ICYobXNfY2FyZC0+ZGVsYXlfd3JpdGUpOwotCWludCByZXR2YWw7Ci0KLQlpZiAoZGVsYXlfd3JpdGUtPmRlbGF5X3dyaXRlX2ZsYWcpIHsKLQkJcmV0dmFsID0gbXNfc2V0X2luaXRfcGFyYShjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCWRlbGF5X3dyaXRlLT5kZWxheV93cml0ZV9mbGFnID0gMDsKLQkJcmV0dmFsID0gbXNfZmluaXNoX3dyaXRlKGNoaXAsCi0JCQkJCSBkZWxheV93cml0ZS0+b2xkX3BoeWJsb2NrLAotCQkJCQkgZGVsYXlfd3JpdGUtPm5ld19waHlibG9jaywKLQkJCQkJIGRlbGF5X3dyaXRlLT5sb2dibG9jaywKLQkJCQkJIGRlbGF5X3dyaXRlLT5wYWdlb2ZmKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0czUxeF9tc19yd19mYWlsKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIFNDU0lfTFVOKHNyYiksCi0JCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCWVsc2UKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIFNDU0lfTFVOKHNyYiksIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLX0KLQotc3RhdGljIGludCBydHM1MXhfbXNfcndfbXVsdGlfc2VjdG9yKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkJICAgICAgdTMyIHN0YXJ0X3NlY3RvciwgdTE2IHNlY3Rvcl9jbnQpCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWludCByZXR2YWwsIHNlZ19ubzsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKLQl1MTYgb2xkX2JsayA9IDAsIG5ld19ibGsgPSAwLCBsb2dfYmxrLCB0b3RhbF9zZWNfY250ID0gc2VjdG9yX2NudDsKLQl1OCBzdGFydF9wYWdlLCBlbmRfcGFnZSA9IDAsIHBhZ2VfY250OwotCXU4ICpidWY7Ci0Jdm9pZCAqcHRyID0gTlVMTDsKLQlzdHJ1Y3QgcnRzNTF4X21zX2RlbGF5X3dyaXRlX3RhZyAqZGVsYXlfd3JpdGUgPSAmKG1zX2NhcmQtPmRlbGF5X3dyaXRlKTsKLQotCW1zX3NldF9lcnJfY29kZShjaGlwLCBNU19OT19FUlJPUik7Ci0KLQltc19jYXJkLT5jb3VudGVyID0gMDsKLQotCWJ1ZiA9ICh1OCAqKSBzY3NpX3NnbGlzdChzcmIpOwotCi0JcmV0dmFsID0gbXNfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X21zX3J3X2ZhaWwoc3JiLCBjaGlwKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JbG9nX2JsayA9ICh1MTYpIChzdGFydF9zZWN0b3IgPj4gbXNfY2FyZC0+YmxvY2tfc2hpZnQpOwotCXN0YXJ0X3BhZ2UgPSAodTgpIChzdGFydF9zZWN0b3IgJiBtc19jYXJkLT5wYWdlX29mZik7Ci0KLQlmb3IgKHNlZ19ubyA9IDA7IHNlZ19ubyA8IEFSUkFZX1NJWkUobXNfc3RhcnRfaWR4KSAtIDE7IHNlZ19ubysrKSB7Ci0JCWlmIChsb2dfYmxrIDwgbXNfc3RhcnRfaWR4W3NlZ19ubyArIDFdKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKG1zX2NhcmQtPnNlZ21lbnRbc2VnX25vXS5idWlsZF9mbGFnID09IDApIHsKLQkJcmV0dmFsID0gbXNfYnVpbGRfbDJwX3RibChjaGlwLCBzZWdfbm8pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQljaGlwLT5jYXJkX2ZhaWwgfD0gTVNfQ0FSRDsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfTk9UX1BSRVNFTlQpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQl9Ci0KLQlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7Ci0JCWlmIChkZWxheV93cml0ZS0+ZGVsYXlfd3JpdGVfZmxhZyAmJgotCQkgICAgKGRlbGF5X3dyaXRlLT5sb2dibG9jayA9PSBsb2dfYmxrKSAmJgotCQkgICAgKHN0YXJ0X3BhZ2UgPiBkZWxheV93cml0ZS0+cGFnZW9mZikpIHsKLQkJCWRlbGF5X3dyaXRlLT5kZWxheV93cml0ZV9mbGFnID0gMDsKLSNpZmRlZiBNU19TUEVFRFVQCi0JCQlyZXR2YWwgPSBtc19hdXRvX2NvcHlfcGFnZShjaGlwLAotCQkJCQkJICAgZGVsYXlfd3JpdGUtPm9sZF9waHlibG9jaywKLQkJCQkJCSAgIGRlbGF5X3dyaXRlLT5uZXdfcGh5YmxvY2ssCi0JCQkJCQkgICBsb2dfYmxrLAotCQkJCQkJICAgZGVsYXlfd3JpdGUtPnBhZ2VvZmYsCi0JCQkJCQkgICBzdGFydF9wYWdlKTsKLSNlbHNlCi0JCQlyZXR2YWwgPSBtc19jb3B5X3BhZ2UoY2hpcCwKLQkJCQkJICAgICAgZGVsYXlfd3JpdGUtPm9sZF9waHlibG9jaywKLQkJCQkJICAgICAgZGVsYXlfd3JpdGUtPm5ld19waHlibG9jaywKLQkJCQkJICAgICAgbG9nX2JsaywgZGVsYXlfd3JpdGUtPnBhZ2VvZmYsCi0JCQkJCSAgICAgIHN0YXJ0X3BhZ2UpOwotI2VuZGlmCi0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCX0KLQkJCW9sZF9ibGsgPSBkZWxheV93cml0ZS0+b2xkX3BoeWJsb2NrOwotCQkJbmV3X2JsayA9IGRlbGF5X3dyaXRlLT5uZXdfcGh5YmxvY2s7Ci0JCX0gZWxzZSBpZiAoZGVsYXlfd3JpdGUtPmRlbGF5X3dyaXRlX2ZsYWcgJiYKLQkJCSAgIChkZWxheV93cml0ZS0+bG9nYmxvY2sgPT0gbG9nX2JsaykgJiYKLQkJCSAgIChzdGFydF9wYWdlID09IGRlbGF5X3dyaXRlLT5wYWdlb2ZmKSkgewotCQkJZGVsYXlfd3JpdGUtPmRlbGF5X3dyaXRlX2ZsYWcgPSAwOwotCQkJb2xkX2JsayA9IGRlbGF5X3dyaXRlLT5vbGRfcGh5YmxvY2s7Ci0JCQluZXdfYmxrID0gZGVsYXlfd3JpdGUtPm5ld19waHlibG9jazsKLQkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IHJ0czUxeF9tc19kZWxheV93cml0ZShjaGlwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCQkJb2xkX2JsayA9Ci0JCQkgICAgbXNfZ2V0X2wycF90YmwoY2hpcCwgc2VnX25vLAotCQkJCQkgICBsb2dfYmxrIC0gbXNfc3RhcnRfaWR4W3NlZ19ub10pOwotCQkJbmV3X2JsayA9IG1zX2dldF91bnVzZWRfYmxvY2soY2hpcCwgc2VnX25vKTsKLQkJCWlmICgob2xkX2JsayA9PSAweEZGRkYpIHx8IChuZXdfYmxrID09IDB4RkZGRikpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0KLQkJCXJldHZhbCA9Ci0JCQkgICAgbXNfcHJlcGFyZV93cml0ZShjaGlwLCBvbGRfYmxrLCBuZXdfYmxrLCBsb2dfYmxrLAotCQkJCQkgICAgIHN0YXJ0X3BhZ2UpOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgTVNfQ0FSRCkgPT0KLQkJCQkgICAgQ0RfTk9UX0VYSVNUKSB7Ci0JCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCQlTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCQl9Ci0KLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gcnRzNTF4X21zX2RlbGF5X3dyaXRlKGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIE1TX0NBUkQpID09IENEX05PVF9FWElTVCkgewotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCi0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJfQotCQlvbGRfYmxrID0KLQkJICAgIG1zX2dldF9sMnBfdGJsKGNoaXAsIHNlZ19ubywKLQkJCQkgICBsb2dfYmxrIC0gbXNfc3RhcnRfaWR4W3NlZ19ub10pOwotCQlpZiAob2xkX2JsayA9PSAweEZGRkYpIHsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfVU5SRUNPVkVSX1JFQURfRVJSKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9Ci0KLQlSVFM1MVhfREVCVUdQKCJzZWdfbm8gPSAlZCwgb2xkX2JsayA9IDB4JXgsIG5ld19ibGsgPSAweCV4XG4iLCBzZWdfbm8sCi0JCSAgICAgICBvbGRfYmxrLCBuZXdfYmxrKTsKLQotCXdoaWxlICh0b3RhbF9zZWNfY250KSB7Ci0JCWlmICgoc3RhcnRfcGFnZSArIHRvdGFsX3NlY19jbnQpID4gKG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMSkpCi0JCQllbmRfcGFnZSA9IG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMTsKLQkJZWxzZQotCQkJZW5kX3BhZ2UgPSBzdGFydF9wYWdlICsgKHU4KSB0b3RhbF9zZWNfY250OwotCQlwYWdlX2NudCA9IGVuZF9wYWdlIC0gc3RhcnRfcGFnZTsKLQotCQlSVFM1MVhfREVCVUdQKCJzdGFydF9wYWdlID0gJWQsIGVuZF9wYWdlID0gJWQsIHBhZ2VfY250ID0gJWRcbiIsCi0JCQkJCXN0YXJ0X3BhZ2UsIGVuZF9wYWdlLCBwYWdlX2NudCk7Ci0KLQkJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQotCQkJcmV0dmFsID0gbXNfcmVhZF9tdWx0aXBsZV9wYWdlcyhjaGlwLAotCQkJCQkJCW9sZF9ibGssIGxvZ19ibGssCi0JCQkJCQkJc3RhcnRfcGFnZSwgZW5kX3BhZ2UsCi0JCQkJCQkJYnVmLCAmcHRyLCAmb2Zmc2V0KTsKLQkJZWxzZQotCQkJcmV0dmFsID0gbXNfd3JpdGVfbXVsdGlwbGVfcGFnZXMoY2hpcCwgb2xkX2JsaywKLQkJCQkJCQkgbmV3X2JsaywgbG9nX2JsaywKLQkJCQkJCQkgc3RhcnRfcGFnZSwgZW5kX3BhZ2UsCi0JCQkJCQkJIGJ1ZiwgJnB0ciwgJm9mZnNldCk7Ci0KLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBNU19DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQotCQkJcnRzNTF4X21zX3J3X2ZhaWwoc3JiLCBjaGlwKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0JCS8qIFVwZGF0ZSBMMlAgdGFibGUgaWYgbmVlZCAqLwotCQlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7Ci0JCQlpZiAoZW5kX3BhZ2UgPT0gKG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMSkpIHsKLQkJCQlyZXR2YWwgPSBtc19lcmFzZV9ibG9jayhjaGlwLCBvbGRfYmxrKTsKLQkJCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJCQltc19zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIG9sZF9ibGspOwotCQkJCW1zX3NldF9sMnBfdGJsKGNoaXAsIHNlZ19ubywKLQkJCQkJICAgICAgIGxvZ19ibGsgLSBtc19zdGFydF9pZHhbc2VnX25vXSwKLQkJCQkJICAgICAgIG5ld19ibGspOwotCQkJfQotCQl9Ci0KLQkJdG90YWxfc2VjX2NudCAtPSBwYWdlX2NudDsKLQotCQlpZiAodG90YWxfc2VjX2NudCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJbG9nX2JsaysrOwotCi0JCWZvciAoc2VnX25vID0gMDsgc2VnX25vIDwgQVJSQVlfU0laRShtc19zdGFydF9pZHgpIC0gMTsKLQkJCQlzZWdfbm8rKykgewotCQkJaWYgKGxvZ19ibGsgPCBtc19zdGFydF9pZHhbc2VnX25vICsgMV0pCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAobXNfY2FyZC0+c2VnbWVudFtzZWdfbm9dLmJ1aWxkX2ZsYWcgPT0gMCkgewotCQkJcmV0dmFsID0gbXNfYnVpbGRfbDJwX3RibChjaGlwLCBzZWdfbm8pOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWNoaXAtPmNhcmRfZmFpbCB8PSBNU19DQVJEOwotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCX0KLQkJfQotCi0JCW9sZF9ibGsgPQotCQkgICAgbXNfZ2V0X2wycF90YmwoY2hpcCwgc2VnX25vLAotCQkJCSAgIGxvZ19ibGsgLSBtc19zdGFydF9pZHhbc2VnX25vXSk7Ci0JCWlmIChvbGRfYmxrID09IDB4RkZGRikgewotCQkJcnRzNTF4X21zX3J3X2ZhaWwoc3JiLCBjaGlwKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQotCQlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7Ci0JCQluZXdfYmxrID0gbXNfZ2V0X3VudXNlZF9ibG9jayhjaGlwLCBzZWdfbm8pOwotCQkJaWYgKG5ld19ibGsgPT0gMHhGRkZGKSB7Ci0JCQkJcnRzNTF4X21zX3J3X2ZhaWwoc3JiLCBjaGlwKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0KLQkJUlRTNTFYX0RFQlVHUCgic2VnX25vID0gJWQsIG9sZF9ibGsgPSAweCV4LCBuZXdfYmxrID0gMHgleFxuIiwKLQkJCSAgICAgICBzZWdfbm8sIG9sZF9ibGssIG5ld19ibGspOwotCi0JCXN0YXJ0X3BhZ2UgPSAwOwotCX0KLQotCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKLQkJaWYgKGVuZF9wYWdlIDwgKG1zX2NhcmQtPnBhZ2Vfb2ZmICsgMSkpIHsKLQkJCWRlbGF5X3dyaXRlLT5kZWxheV93cml0ZV9mbGFnID0gMTsKLQkJCWRlbGF5X3dyaXRlLT5vbGRfcGh5YmxvY2sgPSBvbGRfYmxrOwotCQkJZGVsYXlfd3JpdGUtPm5ld19waHlibG9jayA9IG5ld19ibGs7Ci0JCQlkZWxheV93cml0ZS0+bG9nYmxvY2sgPSBsb2dfYmxrOwotCQkJZGVsYXlfd3JpdGUtPnBhZ2VvZmYgPSBlbmRfcGFnZTsKLQkJfQotCX0KLQotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgMCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfbXNfcncoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBzdGFydF9zZWN0b3IsCi0JICB1MTYgc2VjdG9yX2NudCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQotCWlmIChDSEtfTVNQUk8obXNfY2FyZCkpCi0JCXJldHZhbCA9Ci0JCSAgICBtc3Byb19yd19tdWx0aV9zZWN0b3Ioc3JiLCBjaGlwLCBzdGFydF9zZWN0b3IsIHNlY3Rvcl9jbnQpOwotCWVsc2UKLQkJcmV0dmFsID0KLQkJICAgIHJ0czUxeF9tc19yd19tdWx0aV9zZWN0b3Ioc3JiLCBjaGlwLCBzdGFydF9zZWN0b3IsIHNlY3Rvcl9jbnQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBydHM1MXhfbXNfZnJlZV9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IGkgPSAwOwotCi0JaWYgKG1zX2NhcmQtPnNlZ21lbnQgIT0gTlVMTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbXNfY2FyZC0+c2VnbWVudF9jbnQ7IGkrKykgewotCQkJaWYgKG1zX2NhcmQtPnNlZ21lbnRbaV0ubDJwX3RhYmxlICE9IE5VTEwpIHsKLQkJCQl2ZnJlZShtc19jYXJkLT5zZWdtZW50W2ldLmwycF90YWJsZSk7Ci0JCQkJbXNfY2FyZC0+c2VnbWVudFtpXS5sMnBfdGFibGUgPSBOVUxMOwotCQkJfQotCQkJaWYgKG1zX2NhcmQtPnNlZ21lbnRbaV0uZnJlZV90YWJsZSAhPSBOVUxMKSB7Ci0JCQkJdmZyZWUobXNfY2FyZC0+c2VnbWVudFtpXS5mcmVlX3RhYmxlKTsKLQkJCQltc19jYXJkLT5zZWdtZW50W2ldLmZyZWVfdGFibGUgPSBOVUxMOwotCQkJfQotCQl9Ci0JCXZmcmVlKG1zX2NhcmQtPnNlZ21lbnQpOwotCQltc19jYXJkLT5zZWdtZW50ID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgcnRzNTF4X21zX2NsZWFudXBfd29yayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCi0JaWYgKENIS19NU1BSTyhtc19jYXJkKSkgewotCQlpZiAobXNfY2FyZC0+c2VxX21vZGUpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIk1TIFBybzogc3RvcCB0cmFuc21pc3Npb25cbiIpOwotCQkJbXNwcm9fc3RvcF9zZXFfbW9kZShjaGlwKTsKLQkJCW1zX2NhcmQtPmNvdW50ZXIgPSAwOwotCQl9Ci0JCWlmIChDSEtfTVNIRyhtc19jYXJkKSkgewotCQkJdTggdmFsdWU7Ci0JCQlydHM1MXhfcmVhZF9yZWdpc3RlcihjaGlwLCBNU19DRkcsICZ2YWx1ZSk7Ci0JCQlpZiAodmFsdWUgJiBNU18yS19TRUNUT1JfTU9ERSkKLQkJCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgTVNfQ0ZHLAotCQkJCQkJICAgICAgTVNfMktfU0VDVE9SX01PREUsIDB4MDApOwotCQl9Ci0JfSBlbHNlIGlmICgoIUNIS19NU1BSTyhtc19jYXJkKSkKLQkJICAgJiYgbXNfY2FyZC0+ZGVsYXlfd3JpdGUuZGVsYXlfd3JpdGVfZmxhZykgewotCQlSVFM1MVhfREVCVUdQKCJNUzogZGVsYXkgd3JpdGVcbiIpOwotCQlydHM1MXhfbXNfZGVsYXlfd3JpdGUoY2hpcCk7Ci0JCW1zX2NhcmQtPmNvdW50ZXIgPSAwOwotCX0KLX0KLQotc3RhdGljIGludCBtc19wb3dlcl9vZmZfY2FyZDN2MyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfQ0xLX0VOLCBNU19DTEtfRU4sIDApOwotCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCW1zX3B1bGxfY3RsX2Rpc2FibGUoY2hpcCk7Ci0JZWxzZQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBGUEdBX1BVTExfQ1RMLAotCQkJICAgICAgIEZQR0FfTVNfUFVMTF9DVExfQklUIHwgMHgyMCwKLQkJCSAgICAgICBGUEdBX01TX1BVTExfQ1RMX0JJVCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9PRSwgTVNfT1VUUFVUX0VOLCAwKTsKLQlpZiAoIWNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFdSX0NUTCwgUE9XRVJfTUFTSywKLQkJCSAgICAgICBQT1dFUl9PRkYpOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfcmVsZWFzZV9tc19jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQotCVJUUzUxWF9ERUJVR1AoInJ0czUxeF9yZWxlYXNlX21zX2NhcmRcbiIpOwotCi0JbXNfY2FyZC0+ZGVsYXlfd3JpdGUuZGVsYXlfd3JpdGVfZmxhZyA9IDA7Ci0JbXNfY2FyZC0+cHJvX3VuZGVyX2Zvcm1hdHRpbmcgPSAwOwotCi0JY2hpcC0+Y2FyZF9yZWFkeSAmPSB+TVNfQ0FSRDsKLQljaGlwLT5jYXJkX2ZhaWwgJj0gfk1TX0NBUkQ7Ci0JY2hpcC0+Y2FyZF93cCAmPSB+TVNfQ0FSRDsKLQotCXJ0czUxeF9tc19mcmVlX2wycF90YmwoY2hpcCk7Ci0KLQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU0ZTTV9FRCwgSFdfQ01EX1NUT1AsIEhXX0NNRF9TVE9QKTsKLQotCW1lbXNldChtc19jYXJkLT5yYXdfc3lzX2luZm8sIDAsIDk2KTsKLSNpZmRlZiBTVVBQT1JUX1BDR0xfMVAxOAotCW1lbXNldChtc19jYXJkLT5yYXdfbW9kZWxfbmFtZSwgMCwgNDgpOwotI2VuZGlmCi0KLQlyZXR2YWwgPSBtc19wb3dlcl9vZmZfY2FyZDN2MyhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L21zLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9tcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTdjMTk3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L21zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKiBIZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaWZuZGVmIF9fUlRTNTFYX01TX0gKLSNkZWZpbmUgX19SVFM1MVhfTVNfSAotCi0jaW5jbHVkZSAicnRzNTF4X2NoaXAuaCIKLQotI2RlZmluZQlNU19NQVhfUkVUUllfQ09VTlQJCTMKLQotI2RlZmluZQlNU19FWFRSQV9TSVpFCQkJMHg5Ci0KLSNkZWZpbmUJV1JUX1BSVENUCQkJMHgwMQotCi0vKiBFcnJvciBDb2RlICovCi0jZGVmaW5lCU1TX05PX0VSUk9SCQkJCTB4MDAKLSNkZWZpbmUJTVNfQ1JDMTZfRVJST1IJCQkJMHg4MAotI2RlZmluZQlNU19UT19FUlJPUgkJCQkweDQwCi0jZGVmaW5lCU1TX05PX0NBUkQJCQkJMHgyMAotI2RlZmluZQlNU19OT19NRU1PUlkJCQkJMHgxMAotI2RlZmluZQlNU19DTURfTksJCQkJMHgwOAotI2RlZmluZQlNU19GTEFTSF9SRUFEX0VSUk9SCQkJMHgwNAotI2RlZmluZQlNU19GTEFTSF9XUklURV9FUlJPUgkJCTB4MDIKLSNkZWZpbmUJTVNfQlJFUV9FUlJPUgkJCQkweDAxCi0jZGVmaW5lCU1TX05PVF9GT1VORAkJCQkweDAzCi0KLS8qIFRyYW5zZmVyIFByb3RvY29sIENvbW1hbmQgKi8KLSNkZWZpbmUgUkVBRF9QQUdFX0RBVEEJCQkJMHgwMgotI2RlZmluZSBSRUFEX1JFRwkJCQkweDA0Ci0jZGVmaW5lCUdFVF9JTlQJCQkJCTB4MDcKLSNkZWZpbmUgV1JJVEVfUEFHRV9EQVRBCQkJCTB4MEQKLSNkZWZpbmUgV1JJVEVfUkVHCQkJCTB4MEIKLSNkZWZpbmUgU0VUX1JXX1JFR19BRFJTCQkJCTB4MDgKLSNkZWZpbmUgU0VUX0NNRAkJCQkJMHgwRQotCi0jZGVmaW5lCVBST19SRUFEX0xPTkdfREFUQQkJCTB4MDIKLSNkZWZpbmUJUFJPX1JFQURfU0hPUlRfREFUQQkJCTB4MDMKLSNkZWZpbmUgUFJPX1JFQURfUkVHCQkJCTB4MDQKLSNkZWZpbmUJUFJPX1JFQURfUVVBRF9EQVRBCQkJMHgwNQotI2RlZmluZSBQUk9fR0VUX0lOVAkJCQkweDA3Ci0jZGVmaW5lCVBST19XUklURV9MT05HX0RBVEEJCQkweDBECi0jZGVmaW5lCVBST19XUklURV9TSE9SVF9EQVRBCQkJMHgwQwotI2RlZmluZQlQUk9fV1JJVEVfUVVBRF9EQVRBCQkJMHgwQQotI2RlZmluZSBQUk9fV1JJVEVfUkVHCQkJCTB4MEIKLSNkZWZpbmUgUFJPX1NFVF9SV19SRUdfQURSUwkJCTB4MDgKLSNkZWZpbmUgUFJPX1NFVF9DTUQJCQkJMHgwRQotI2RlZmluZSBQUk9fRVhfU0VUX0NNRAkJCQkweDA5Ci0KLSNpZmRlZiBTVVBQT1JUX01BR0lDX0dBVEUKLSNkZWZpbmUgTUdfR0VUX0lECQkweDQwCi0jZGVmaW5lIE1HX1NFVF9MSUQJCTB4NDEKLSNkZWZpbmUgTUdfR0VUX0xFS0IJCTB4NDIKLSNkZWZpbmUgTUdfU0VUX1JECQkweDQzCi0jZGVmaW5lIE1HX01BS0VfUk1TCQkweDQ0Ci0jZGVmaW5lIE1HX01BS0VfS1NFCQkweDQ1Ci0jZGVmaW5lIE1HX1NFVF9JQkQJCTB4NDYKLSNkZWZpbmUgTUdfR0VUX0lCRAkJMHg0NwotI2VuZGlmCi0KLSNpZmRlZiBYQ19QT1dFUkNMQVNTCi0jZGVmaW5lIFhDX0NIR19QT1dFUgkJMHgxNgotI2VuZGlmCi0KLS8qICsrIENNRCBvdmVyIE1lbW9yeSBTdGljayAqLwotLyogIEZsYXNoIENNRCAqLwotI2RlZmluZSBCTE9DS19SRUFECQkweEFBCi0jZGVmaW5lCUJMT0NLX1dSSVRFCQkweDU1Ci0jZGVmaW5lIEJMT0NLX0VORAkJMHgzMwotI2RlZmluZSBCTE9DS19FUkFTRQkJMHg5OQotI2RlZmluZSBGTEFTSF9TVE9QCQkweENDCi0KLS8qICBGdW5jdGlvbiBDTUQgKi8KLSNkZWZpbmUgU0xFRVAJCQkweDVBCi0jZGVmaW5lIENMRUFSX0JVRgkJMHhDMwotI2RlZmluZSBNU19SRVNFVAkJMHgzQwotLyogLS0gQ01EIG92ZXIgTWVtb3J5IFN0aWNrICovCi0KLS8qICsrIENNRCBvdmVyIE1lbW9yeSBTdGljayBQcm8gKi8KLS8qICBGbGFzaCBDTUQgKi8KLSNkZWZpbmUgUFJPX1JFQURfREFUQQkJMHgyMAotI2RlZmluZQlQUk9fV1JJVEVfREFUQQkJMHgyMQotI2RlZmluZSBQUk9fUkVBRF9BVFJCCQkweDI0Ci0jZGVmaW5lIFBST19TVE9QCQkweDI1Ci0jZGVmaW5lIFBST19FUkFTRQkJMHgyNgotI2RlZmluZQlQUk9fUkVBRF8yS19EQVRBCTB4MjcKLSNkZWZpbmUJUFJPX1dSSVRFXzJLX0RBVEEJMHgyOAotCi0vKiAgRnVuY3Rpb24gQ01EICovCi0jZGVmaW5lIFBST19GT1JNQVQJCTB4MTAKLSNkZWZpbmUgUFJPX1NMRUVQCQkweDExCi0vKiAtLSBDTUQgb3ZlciBNZW1vcnkgU3RpY2sgUHJvICovCi0KLS8qICByZWdpc3RlciBpbnNpZGUgbWVtb3J5IHN0aWNrICovCi0jZGVmaW5lCUludFJlZwkJCTB4MDEKLSNkZWZpbmUgU3RhdHVzUmVnMAkJMHgwMgotI2RlZmluZSBTdGF0dXNSZWcxCQkweDAzCi0KLSNkZWZpbmUgU3lzdGVtUGFybQkJMHgxMAotI2RlZmluZSBCbG9ja0FkcnMJCTB4MTEKLSNkZWZpbmUgQ01EUGFybQkJCTB4MTQKLSNkZWZpbmUgUGFnZUFkcnMJCTB4MTUKLQotI2RlZmluZSBPdmVyd3JpdGVGbGFnCQkweDE2Ci0jZGVmaW5lIE1hbmFnZW1lbkZsYWcJCTB4MTcKLSNkZWZpbmUgTG9naWNhbEFkcnMJCTB4MTgKLSNkZWZpbmUgUmVzZXJ2ZUFyZWEJCTB4MUEKLQotLyogIHJlZ2lzdGVyIGluc2lkZSBtZW1vcnkgcHJvICovCi0jZGVmaW5lCVByb19JbnRSZWcJCTB4MDEKLSNkZWZpbmUgUHJvX1N0YXR1c1JlZwkJMHgwMgotI2RlZmluZSBQcm9fVHlwZVJlZwkJMHgwNAotI2RlZmluZQlQcm9fSUZNb2RlUmVnCQkweDA1Ci0jZGVmaW5lIFByb19DYXRhZ29yeVJlZwkJMHgwNgotI2RlZmluZSBQcm9fQ2xhc3NSZWcJCTB4MDcKLQotI2RlZmluZSBQcm9fU3lzdGVtUGFybQkJMHgxMAotI2RlZmluZSBQcm9fRGF0YUNvdW50MQkJMHgxMQotI2RlZmluZSBQcm9fRGF0YUNvdW50MAkJMHgxMgotI2RlZmluZSBQcm9fRGF0YUFkZHIzCQkweDEzCi0jZGVmaW5lIFByb19EYXRhQWRkcjIJCTB4MTQKLSNkZWZpbmUgUHJvX0RhdGFBZGRyMQkJMHgxNQotI2RlZmluZSBQcm9fRGF0YUFkZHIwCQkweDE2Ci0KLSNkZWZpbmUgUHJvX1RQQ1Bhcm0JCTB4MTcKLSNkZWZpbmUgUHJvX0NNRFBhcm0JCTB4MTgKLQotLyogIGRlZmluZSBmb3IgSU5UIFJlZ2lzdGVyICovCi0jZGVmaW5lCUlOVF9SRUdfQ0VECQkweDgwCi0jZGVmaW5lCUlOVF9SRUdfRVJSCQkweDQwCi0jZGVmaW5lCUlOVF9SRUdfQlJFUQkJMHgyMAotI2RlZmluZQlJTlRfUkVHX0NNRE5LCQkweDAxCi0KLS8qICBJTlQgc2lnbmFsICovCi0jZGVmaW5lCUlOVF9DRUQJCQkweDAxCi0jZGVmaW5lCUlOVF9FUlIJCQkweDAyCi0jZGVmaW5lCUlOVF9CUkVRCQkweDA0Ci0jZGVmaW5lCUlOVF9DTUROSwkJMHgwOAotCi0vKiAgZGVmaW5lIGZvciBPdmVyd3JpdGVGbGFnIFJlZ2lzdGVyICovCi0jZGVmaW5lCUJMT0NLX0JPT1QJCTB4QzAKLSNkZWZpbmUJQkxPQ0tfT0sJCTB4ODAKLSNkZWZpbmUJUEFHRV9PSwkJCTB4NjAKLSNkZWZpbmUJREFUQV9DT01QTAkJMHgxMAotCi0vKiAgZGVmaW5lIGZvciBNYW5hZ2VtZW5GbGFnIFJlZ2lzdGVyICovCi0jZGVmaW5lCU5PVF9CT09UX0JMT0NLCQkweDQKLSNkZWZpbmUJTk9UX1RSQU5TTEFUSU9OX1RBQkxFCTB4OAotCi0vKiAgSGVhZGVyICovCi0jZGVmaW5lCUhFQURFUl9JRDAJCShQUEJVRl9CQVNFMikJCQkvKiAwICovCi0jZGVmaW5lCUhFQURFUl9JRDEJCShQUEJVRl9CQVNFMiArIDEpCQkvKiAxICovCi0vKiAgU3lzdGVtIEVudHJ5ICovCi0jZGVmaW5lCURJU0FCTEVEX0JMT0NLMAkJKFBQQlVGX0JBU0UyICsgMHgxNzAgKyA0KQkvKiAyICovCi0jZGVmaW5lCURJU0FCTEVEX0JMT0NLMQkJKFBQQlVGX0JBU0UyICsgMHgxNzAgKyA1KQkvKiAzICovCi0jZGVmaW5lCURJU0FCTEVEX0JMT0NLMgkJKFBQQlVGX0JBU0UyICsgMHgxNzAgKyA2KQkvKiA0ICovCi0jZGVmaW5lCURJU0FCTEVEX0JMT0NLMwkJKFBQQlVGX0JBU0UyICsgMHgxNzAgKyA3KQkvKiA1ICovCi0vKiAgQm9vdCAmIEF0dHJpYnV0ZSBJbmZvcm1hdGlvbiAqLwotI2RlZmluZQlCTE9DS19TSVpFXzAJCShQUEJVRl9CQVNFMiArIDB4MWEwICsgMikJLyogNiAqLwotI2RlZmluZQlCTE9DS19TSVpFXzEJCShQUEJVRl9CQVNFMiArIDB4MWEwICsgMykJLyogNyAqLwotI2RlZmluZQlCTE9DS19DT1VOVF8wCQkoUFBCVUZfQkFTRTIgKyAweDFhMCArIDQpCS8qIDggKi8KLSNkZWZpbmUJQkxPQ0tfQ09VTlRfMQkJKFBQQlVGX0JBU0UyICsgMHgxYTAgKyA1KQkvKiA5ICovCi0jZGVmaW5lCUVCTE9DS19DT1VOVF8wCQkoUFBCVUZfQkFTRTIgKyAweDFhMCArIDYpCS8qIDEwICovCi0jZGVmaW5lCUVCTE9DS19DT1VOVF8xCQkoUFBCVUZfQkFTRTIgKyAweDFhMCArIDcpCS8qIDExICovCi0jZGVmaW5lCVBBR0VfU0laRV8wCQkoUFBCVUZfQkFTRTIgKyAweDFhMCArIDgpCS8qIDEyICovCi0jZGVmaW5lCVBBR0VfU0laRV8xCQkoUFBCVUZfQkFTRTIgKyAweDFhMCArIDkpCS8qIDEzICovCi0KLS8qIGpvZXkgMjAwNC0wOC0wNyBmb3IgTVMgY2hlY2sgUHJvY2VkdXJlICovCi0jZGVmaW5lIE1TX0RldmljZV9UeXBlCShQUEJVRl9CQVNFMiArIDB4MUQ4KQkvKiAxNCAqLwotLyogZW5kICovCi0KLS8qIGpvZXkgMjAwNC0wNS0wMyAqLwotI2RlZmluZQlNU180Yml0X1N1cHBvcnQJKFBQQlVGX0JBU0UyICsgMHgxRDMpCS8qIDE1ICovCi0vKiBlbmQgKi8KLQotI2RlZmluZSBzZXRQU19ORwkxCi0jZGVmaW5lIHNldFBTX0Vycm9yCTAKLQotLyogIGRlZmluZSBmb3IgUHJvX1N5c3RlbVBhcm0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJUEFSQUxMRUxfOEJJVF9JRgkweDQwCi0jZGVmaW5lCVBBUkFMTEVMXzRCSVRfSUYJMHgwMAotI2RlZmluZQlTRVJJQUxfSUYJCTB4ODAKLQotLyogIGRlZmluZSBmb3IgU3RhdHVzUmVnMCBSZWdpc3RlciAqLwotI2RlZmluZSBCVUZfRlVMTAkweDEwCi0jZGVmaW5lIEJVRl9FTVBUWQkweDIwCi0KLS8qICBkZWZpbmUgZm9yIFN0YXR1c1JlZzEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTUVESUFfQlVTWQkweDgwCi0jZGVmaW5lCUZMQVNIX0JVU1kJMHg0MAotI2RlZmluZQlEQVRBX0VSUk9SCTB4MjAKLSNkZWZpbmUJU1RTX1VDRFQJMHgxMAotI2RlZmluZQlFWFRSQV9FUlJPUgkweDA4Ci0jZGVmaW5lCVNUU19VQ0VYCTB4MDQKLSNkZWZpbmUJRkxBR19FUlJPUgkweDAyCi0jZGVmaW5lCVNUU19VQ0ZHCTB4MDEKLQotI2RlZmluZSBNU19TSE9SVF9EQVRBX0xFTgkzMgotCi0jZGVmaW5lIEZPUk1BVF9TVUNDRVNTCQkwCi0jZGVmaW5lIEZPUk1BVF9GQUlMCQkxCi0jZGVmaW5lIEZPUk1BVF9JTl9QUk9HUkVTUwkyCi0KLSNkZWZpbmUJTVNfU0VUX0JBRF9CTE9DS19GTEcobXNfY2FyZCkJKChtc19jYXJkKS0+bXVsdGlfZmxhZyB8PSAweDgwKQotI2RlZmluZSBNU19DTFJfQkFEX0JMT0NLX0ZMRyhtc19jYXJkKQkoKG1zX2NhcmQpLT5tdWx0aV9mbGFnICY9IDB4N0YpCi0jZGVmaW5lIE1TX1RTVF9CQURfQkxPQ0tfRkxHKG1zX2NhcmQpCSgobXNfY2FyZCktPm11bHRpX2ZsYWcgJiAweDgwKQotCi0jZGVmaW5lIENIRUNLX01TX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKQlcCi0JKCgocmV0dmFsKSAhPSBTVEFUVVNfU1VDQ0VTUykgfHwgXAotCShjaGlwLT5yc3BfYnVmWzBdICYgTVNfVFJBTlNGRVJfRVJSKSkKLQotdm9pZCBydHM1MXhfbXNwcm9fcG9sbGluZ19mb3JtYXRfc3RhdHVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci12b2lkIHJ0czUxeF9tc3Byb19mb3JtYXRfc2Vuc2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKTsKLQotaW50IHJ0czUxeF9yZXNldF9tc19jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X21zX3J3KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgc3RhcnRfc2VjdG9yLAotCSAgdTE2IHNlY3Rvcl9jbnQpOwotaW50IHJ0czUxeF9tc3Byb19mb3JtYXQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsCi0JCSBpbnQgc2hvcnRfZGF0YV9sZW4sIGludCBxdWlja19mb3JtYXQpOwotdm9pZCBydHM1MXhfbXNfZnJlZV9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci12b2lkIHJ0czUxeF9tc19jbGVhbnVwX3dvcmsoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfcmVsZWFzZV9tc19jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X21zX2RlbGF5X3dyaXRlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci0KLSNpZmRlZiBTVVBQT1JUX01BR0lDX0dBVEUKLQotaW50IG1zX3N3aXRjaF9jbG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IG1zX3dyaXRlX2J5dGVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggdHBjLCB1OCBjbnQsIHU4IGNmZywgdTggKmRhdGEsCi0JCSAgIGludCBkYXRhX2xlbik7Ci1pbnQgbXNfcmVhZF9ieXRlcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHRwYywgdTggY250LCB1OCBjZmcsIHU4ICpkYXRhLAotCQkgIGludCBkYXRhX2xlbik7Ci1pbnQgbXNfc2V0X3J3X3JlZ19hZGRyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggcmVhZF9zdGFydCwgdTggcmVhZF9jbnQsCi0JCSAgICAgICB1OCB3cml0ZV9zdGFydCwgdTggd3JpdGVfY250KTsKLWludCBtc190cmFuc2Zlcl9kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggdHJhbnNfbW9kZSwgdTggdHBjLAotCQkgICAgIHUxNiBzZWNfY250LCB1OCBjZmcsIGludCBtb2RlXzJrLCBpbnQgdXNlX3NnLCB2b2lkICpidWYsCi0JCSAgICAgaW50IGJ1Zl9sZW4pOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1JUUzUxWF9NU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9tc19tZy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvbXNfbWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4NjJjMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9tc19tZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQzICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInJ0czUxeC5oIgotI2luY2x1ZGUgInJ0czUxeF90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJydHM1MXhfc2NzaS5oIgotI2luY2x1ZGUgInJ0czUxeF9jYXJkLmgiCi0jaW5jbHVkZSAibXMuaCIKLSNpbmNsdWRlICJtc19tZy5oIgotCi0jaWZkZWYgU1VQUE9SVF9NQUdJQ19HQVRFCi0KLXN0YXRpYyBpbnQgbWdfY2hlY2tfaW50X2Vycm9yKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQl1OCB2YWx1ZTsKLQotCXJ0czUxeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIE1TX1RSQU5TX0NGRywgJnZhbHVlKTsKLQlpZiAodmFsdWUgJiAoSU5UX0VSUiB8IElOVF9DTUROSykpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbWdfc2VuZF9leF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBjbWQsIHU4IGVudHJ5X251bSkKLXsKLQlpbnQgcmV0dmFsLCBpOwotCXU4IGRhdGFbOF07Ci0KLQlkYXRhWzBdID0gY21kOwotCWRhdGFbMV0gPSAwOwotCWRhdGFbMl0gPSAwOwotCWRhdGFbM10gPSAwOwotCWRhdGFbNF0gPSAwOwotCWRhdGFbNV0gPSAwOwotCWRhdGFbNl0gPSBlbnRyeV9udW07Ci0JZGF0YVs3XSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTVNfTUFYX1JFVFJZX0NPVU5UOyBpKyspIHsKLQkJcmV0dmFsID0KLQkJICAgIG1zX3dyaXRlX2J5dGVzKGNoaXAsIFBST19FWF9TRVRfQ01ELCA3LCBXQUlUX0lOVCwgZGF0YSwgOCk7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTVNfTUFYX1JFVFJZX0NPVU5UKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCXJldHZhbCA9IG1nX2NoZWNrX2ludF9lcnJvcihjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgbWdfc2V0X3RwY19wYXJhX3N1YihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCB0eXBlLCB1OCBtZ19lbnRyeV9udW0pCi17Ci0JaW50IHJldHZhbDsKLQl1OCBidWZbNl07Ci0KLQlSVFM1MVhfREVCVUdQKCItLSVzLS1cbiIsIF9fZnVuY19fKTsKLQotCWlmICh0eXBlID09IDApCi0JCXJldHZhbCA9IG1zX3NldF9yd19yZWdfYWRkcihjaGlwLCAwLCAwLCBQcm9fVFBDUGFybSwgMSk7Ci0JZWxzZQotCQlyZXR2YWwgPSBtc19zZXRfcndfcmVnX2FkZHIoY2hpcCwgMCwgMCwgUHJvX0RhdGFDb3VudDEsIDYpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JYnVmWzBdID0gMDsKLQlidWZbMV0gPSAwOwotCWlmICh0eXBlID09IDEpIHsKLQkJYnVmWzJdID0gMDsKLQkJYnVmWzNdID0gMDsKLQkJYnVmWzRdID0gMDsKLQkJYnVmWzVdID0gbWdfZW50cnlfbnVtOwotCX0KLQlyZXR2YWwgPQotCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBQUk9fV1JJVEVfUkVHLCAodHlwZSA9PSAwKSA/IDEgOiA2LAotCQkJICAgTk9fV0FJVF9JTlQsIGJ1ZiwgNik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLS8qKgotICAqIEdldCBNYWdjaUdhdGUgSUQgYW5kIHNldCBMZWFmIElEIHRvIG1lZGl1bS4KLQotICAqIEFmdGVyIHJlY2VpdmluZyB0aGlzIFNDU0kgY29tbWFuZCwgYWRhcHRlciBzaGFsbCBmdWxmaWxsIDIgdGFza3MKLSAgKiBiZWxvdyBpbiBvcmRlcjoKLSAgKiAxLiBzZW5kIEdFVF9JRCBUUEMgY29tbWFuZCB0byBnZXQgTWFnaWNHYXRlIElEIGFuZCBob2xkIGl0IHRpbGwKLSAgKiBSZXNwb25zZSZjaGFsbGVuZ2UgQ01ELgotICAqIDIuIHNlbmQgU0VUX0lEIFRQQyBjb21tYW5kIHRvIG1lZGl1bSB3aXRoIExlYWYgSUQgcmVsZWFzZWQgYnkgaG9zdAotICAqIGluIHRoaXMgU0NTSSBDTUQuCi0gICovCi1pbnQgcnRzNTF4X21nX3NldF9sZWFmX2lkKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0JdTggYnVmMVszMl0sIGJ1ZjJbMTJdOwotCi0JUlRTNTFYX0RFQlVHUCgiLS0lcy0tXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoc2NzaV9idWZmbGVuKHNyYikgPCAxMikgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0JcnRzNTF4X21zX2NsZWFudXBfd29yayhjaGlwKTsKLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IG1nX3NlbmRfZXhfY21kKGNoaXAsIE1HX1NFVF9MSUQsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfRVNUQUIpOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQltZW1zZXQoYnVmMSwgMCwgMzIpOwotCXJ0czUxeF9nZXRfeGZlcl9idWYoYnVmMiwgbWluKDEyLCAoaW50KXNjc2lfYnVmZmxlbihzcmIpKSwgc3JiKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlidWYxWzggKyBpXSA9IGJ1ZjJbNCArIGldOwotCXJldHZhbCA9Ci0JICAgIG1zX3dyaXRlX2J5dGVzKGNoaXAsIFBST19XUklURV9TSE9SVF9EQVRBLCAzMiwgV0FJVF9JTlQsIGJ1ZjEsIDMyKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0VTVEFCKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCXJldHZhbCA9IG1nX2NoZWNrX2ludF9lcnJvcihjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0VTVEFCKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi0vKioKLSAgKiBTZW5kIExvY2FsIEVLQiB0byBob3N0LgotCi0gICogQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgU0NTSSBjb21tYW5kLCBhZGFwdGVyIHNoYWxsIHJlYWQgdGhlIGRpdmlkZWQKLSAgKiBkYXRhKDE1MzYgYnl0ZXMgdG90YWxseSkgZnJvbSBtZWRpdW0gYnkgdXNpbmcgUkVBRF9MT05HX0RBVEEgVFBDCi0gICogZm9yIDMgdGltZXMsIGFuZCByZXBvcnQgZGF0YSB0byBob3N0IHdpdGggZGF0YS1sZW5ndGggaXMgMTA1MiBieXRlcy4KLSAgKi8KLWludCBydHM1MXhfbWdfZ2V0X2xvY2FsX0VLQihzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsID0gU1RBVFVTX0ZBSUw7Ci0JaW50IGJ1ZmZsZW47Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0JdTggKmJ1ZiA9IE5VTEw7Ci0KLQlSVFM1MVhfREVCVUdQKCItLSVzLS1cbiIsIF9fZnVuY19fKTsKLQotCXJ0czUxeF9tc19jbGVhbnVwX3dvcmsoY2hpcCk7Ci0KLQlyZXR2YWwgPSBtc19zd2l0Y2hfY2xvY2soY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlidWYgPSBrbWFsbG9jKDE1NDAsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX05PTUVNKTsKLQotCWJ1ZlswXSA9IDB4MDQ7Ci0JYnVmWzFdID0gMHgxQTsKLQlidWZbMl0gPSAweDAwOwotCWJ1ZlszXSA9IDB4MDA7Ci0KLQlyZXR2YWwgPSBtZ19zZW5kX2V4X2NtZChjaGlwLCBNR19HRVRfTEVLQiwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0tFWV9GQUlMX05PVF9BVVRIRU4pOwotCQlUUkFDRV9HT1RPKGNoaXAsIEdldEVLQkZpbmlzaCk7Ci0JfQotCi0JcmV0dmFsID0gbXNfdHJhbnNmZXJfZGF0YShjaGlwLCBNU19UTV9BVVRPX1JFQUQsIFBST19SRUFEX0xPTkdfREFUQSwKLQkJCQkgIDMsIFdBSVRfSU5ULCAwLCAwLCBidWYgKyA0LCAxNTM2KTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0FVVEhFTik7Ci0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1NUT1AsIE1TX1NUT1AgfCBNU19DTFJfRVJSLAotCQkJCSAgICAgIE1TX1NUT1AgfCBNU19DTFJfRVJSKTsKLQkJVFJBQ0VfR09UTyhjaGlwLCBHZXRFS0JGaW5pc2gpOwotCX0KLQlyZXR2YWwgPSBtZ19jaGVja19pbnRfZXJyb3IoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0tFWV9GQUlMX05PVF9BVVRIRU4pOwotCQlUUkFDRV9HT1RPKGNoaXAsIEdldEVLQkZpbmlzaCk7Ci0JfQotCi0JYnVmZmxlbiA9IG1pbigxMDUyLCAoaW50KXNjc2lfYnVmZmxlbihzcmIpKTsKLQlydHM1MXhfc2V0X3hmZXJfYnVmKGJ1ZiwgYnVmZmxlbiwgc3JiKTsKLQotR2V0RUtCRmluaXNoOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gICogU2VuZCBjaGFsbGVuZ2UoaG9zdCkgdG8gbWVkaXVtLgotCi0gICogQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgU0NTSSBjb21tYW5kLCBhZGFwdGVyIHNoYWxsIHNlcXVlbnRpYWxseSBpc3N1ZXMKLSAgKiBUUEMgY29tbWFuZHMgdG8gdGhlIG1lZGl1bSBmb3Igd3JpdGluZyA4LWJ5dGVzIGRhdGEgYXMgY2hhbGxlbmdlCi0gICogYnkgaG9zdCB3aXRoaW4gYSBzaG9ydCBkYXRhIHBhY2tldC4KLSAgKi8KLWludCBydHM1MXhfbWdfY2hnKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsOwotCWludCBidWZmbGVuOwotCWludCBpOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCXU4IGJ1ZlszMl0sIHRtcDsKLQotCVJUUzUxWF9ERUJVR1AoIi0tJXMtLVxuIiwgX19mdW5jX18pOwotCi0JcnRzNTF4X21zX2NsZWFudXBfd29yayhjaGlwKTsKLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IG1nX3NlbmRfZXhfY21kKGNoaXAsIE1HX0dFVF9JRCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0lOQ09NUEFUSUJMRV9NRURJVU0pOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR2YWwgPQotCSAgICBtc19yZWFkX2J5dGVzKGNoaXAsIFBST19SRUFEX1NIT1JUX0RBVEEsIDMyLCBXQUlUX0lOVCwgYnVmLCAzMik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0lOQ09NUEFUSUJMRV9NRURJVU0pOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0JcmV0dmFsID0gbWdfY2hlY2tfaW50X2Vycm9yKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NR19JTkNPTVBBVElCTEVfTUVESVVNKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JbWVtY3B5KG1zX2NhcmQtPm1hZ2ljX2dhdGVfaWQsIGJ1ZiwgMTYpOwotCi0JZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykgewotCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgTVNfVFJBTlNfQ0ZHLCAmdG1wKTsKLQkJaWYgKHRtcCAmCi0JCSAgICAoTVNfSU5UX0NFRCB8IE1TX0lOVF9DTUROSyB8IE1TX0lOVF9CUkVRIHwgTVNfSU5UX0VSUikpCi0JCQlicmVhazsKLQotCQl3YWl0X3RpbWVvdXQoMSk7Ci0JfQotCi0JaWYgKGkgPT0gMjUwMCkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0lOQ09NUEFUSUJMRV9NRURJVU0pOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXJldHZhbCA9IG1nX3NlbmRfZXhfY21kKGNoaXAsIE1HX1NFVF9SRCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0lOQ09NUEFUSUJMRV9NRURJVU0pOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlidWZmbGVuID0gbWluKDEyLCAoaW50KXNjc2lfYnVmZmxlbihzcmIpKTsKLQlydHM1MXhfZ2V0X3hmZXJfYnVmKGJ1ZiwgYnVmZmxlbiwgc3JiKTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWJ1ZltpXSA9IGJ1Zls0ICsgaV07Ci0JZm9yIChpID0gMDsgaSA8IDI0OyBpKyspCi0JCWJ1Zls4ICsgaV0gPSAwOwotCXJldHZhbCA9Ci0JICAgIG1zX3dyaXRlX2J5dGVzKGNoaXAsIFBST19XUklURV9TSE9SVF9EQVRBLCAzMiwgV0FJVF9JTlQsIGJ1ZiwgMzIpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NR19JTkNPTVBBVElCTEVfTUVESVVNKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCXJldHZhbCA9IG1nX2NoZWNrX2ludF9lcnJvcihjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfSU5DT01QQVRJQkxFX01FRElVTSk7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCW1zX2NhcmQtPm1nX2F1dGggPSAwOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi0vKioKLSAgKiBTZW5kIFJlc3BvbnNlIGFuZCBDaGFsbGVuZ2UgZGF0YSAgdG8gaG9zdC4KLQotICAqIEFmdGVyIHJlY2VpdmluZyB0aGlzIFNDU0kgY29tbWFuZCwgYWRhcHRlciBzaGFsbCBjb21tdW5pY2F0ZXMgd2l0aAotICAqIHRoZSBtZWRpdW0sIGdldCBwYXJhbWV0ZXJzKEhSZCwgUm1zLCBNYWdpY0dhdGVJRCkgYnkgdXNpbmcgUkVBRF9TSE9SVF9EQVRBCi0gICogVFBDIGFuZCBzZW5kIHRoZSBkYXRhIHRvIGhvc3QgYWNjb3JkaW5nIHRvIGNlcnRhaW4gZm9ybWF0IHJlcXVpcmVkIGJ5Ci0gICogTUctUiBzcGVjaWZpY2F0aW9uLgotICAqIFRoZSBwYXJlbWV0ZXIgTWFnaWNHYXRlSUQgaXMgdGhlIG9uZSB0aGF0IGFkYXB0ZXIgaGFzIG9idGFpbmVkIGZyb20KLSAgKiB0aGUgbWVkaXVtIGJ5IFRQQyBjb21tYW5kcyBpbiBTZXQgTGVhZiBJRCBjb21tYW5kIHBoYXNlIHByZXZpb3VzbHkuCi0gICovCi1pbnQgcnRzNTF4X21nX2dldF9yc3BfY2hnKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQlpbnQgcmV0dmFsLCBpOwotCWludCBidWZmbGVuOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCXU4IGJ1ZjFbMzJdLCBidWYyWzM2XSwgdG1wOwotCi0JUlRTNTFYX0RFQlVHUCgiLS0lcy0tXG4iLCBfX2Z1bmNfXyk7Ci0KLQlydHM1MXhfbXNfY2xlYW51cF93b3JrKGNoaXApOwotCi0JcmV0dmFsID0gbXNfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gbWdfc2VuZF9leF9jbWQoY2hpcCwgTUdfTUFLRV9STVMsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfQVVUSEVOKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dmFsID0KLQkgICAgbXNfcmVhZF9ieXRlcyhjaGlwLCBQUk9fUkVBRF9TSE9SVF9EQVRBLCAzMiwgV0FJVF9JTlQsIGJ1ZjEsIDMyKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0FVVEhFTik7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQlyZXR2YWwgPSBtZ19jaGVja19pbnRfZXJyb3IoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0tFWV9GQUlMX05PVF9BVVRIRU4pOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlidWYyWzBdID0gMHgwMDsKLQlidWYyWzFdID0gMHgyMjsKLQlidWYyWzJdID0gMHgwMDsKLQlidWYyWzNdID0gMHgwMDsKLQotCW1lbWNweShidWYyICsgNCwgbXNfY2FyZC0+bWFnaWNfZ2F0ZV9pZCwgMTYpOwotCW1lbWNweShidWYyICsgMjAsIGJ1ZjEsIDE2KTsKLQotCWJ1ZmZsZW4gPSBtaW4oMzYsIChpbnQpc2NzaV9idWZmbGVuKHNyYikpOwotCXJ0czUxeF9zZXRfeGZlcl9idWYoYnVmMiwgYnVmZmxlbiwgc3JiKTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNTAwOyBpKyspIHsKLQkJUlRTNTFYX1JFQURfUkVHKGNoaXAsIE1TX1RSQU5TX0NGRywgJnRtcCk7Ci0JCWlmICh0bXAgJiAoTVNfSU5UX0NFRCB8IE1TX0lOVF9DTUROSyB8Ci0JCQkJTVNfSU5UX0JSRVEgfCBNU19JTlRfRVJSKSkKLQkJCWJyZWFrOwotCi0JCXdhaXRfdGltZW91dCgxKTsKLQl9Ci0KLQlpZiAoaSA9PSAyNTAwKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0FVVEhFTik7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi0vKioKLSAgKiBTZW5kIHJlc3BvbnNlKGhvc3QpIHRvIG1lZGl1bS4KLQotICAqIEFmdGVyIHJlY2VpdmluZyB0aGlzIFNDU0kgY29tbWFuZCwgYWRhcHRlciBzaGFsbCBzZXF1ZW50aWFsbHkKLSAgKiBpc3N1ZXMgVFBDIGNvbW1hbmRzIHRvIHRoZSBtZWRpdW0gZm9yIHdyaXRpbmcgOC1ieXRlcyBkYXRhIGFzCi0gICogY2hhbGxlbmdlIGJ5IGhvc3Qgd2l0aGluIGEgc2hvcnQgZGF0YSBwYWNrZXQuCi0gICovCi1pbnQgcnRzNTF4X21nX3JzcChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQlpbnQgaTsKLQlpbnQgYnVmZmxlbjsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1OCBidWZbMzJdOwotCi0JUlRTNTFYX0RFQlVHUCgiLS0lcy0tXG4iLCBfX2Z1bmNfXyk7Ci0KLQlydHM1MXhfbXNfY2xlYW51cF93b3JrKGNoaXApOwotCi0JcmV0dmFsID0gbXNfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gbWdfc2VuZF9leF9jbWQoY2hpcCwgTUdfTUFLRV9LU0UsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfQVVUSEVOKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JYnVmZmxlbiA9IG1pbigxMiwgKGludClzY3NpX2J1ZmZsZW4oc3JiKSk7Ci0JcnRzNTF4X2dldF94ZmVyX2J1ZihidWYsIGJ1ZmZsZW4sIHNyYik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlidWZbaV0gPSBidWZbNCArIGldOwotCWZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKQotCQlidWZbOCArIGldID0gMDsKLQlyZXR2YWwgPQotCSAgICBtc193cml0ZV9ieXRlcyhjaGlwLCBQUk9fV1JJVEVfU0hPUlRfREFUQSwgMzIsIFdBSVRfSU5ULCBidWYsIDMyKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0FVVEhFTik7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQlyZXR2YWwgPSBtZ19jaGVja19pbnRfZXJyb3IoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX0tFWV9GQUlMX05PVF9BVVRIRU4pOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQltc19jYXJkLT5tZ19hdXRoID0gMTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotLyoqICogU2VuZCBJQ1YgZGF0YSB0byBob3N0LgotCi0gICogQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgU0NTSSBjb21tYW5kLCBhZGFwdGVyIHNoYWxsIHJlYWQgdGhlIGRpdmlkZWQKLSAgKiBkYXRhKDEwMjQgYnl0ZXMgdG90YWxseSkgZnJvbSBtZWRpdW0gYnkgdXNpbmcgUkVBRF9MT05HX0RBVEEgVFBDCi0gICogZm9yIDIgdGltZXMsIGFuZCByZXBvcnQgZGF0YSB0byBob3N0IHdpdGggZGF0YS1sZW5ndGggaXMgMTAyOCBieXRlcy4KLSAgKgotICAqIFNpbmNlIHRoZSBleHRyYSA0IGJ5dGVzIGRhdGEgaXMganVzdCBvbmx5IGEgcHJlZml4IHRvIG9yaWdpbmFsIGRhdGEKLSAgKiB0aGF0IHJlYWQgZnJvbSBtZWRpdW0sIHNvIHRoYXQgdGhlIDQtYnl0ZSBkYXRhIHB1c2hlZCBpbnRvIFJpbmcgYnVmZmVyCi0gICogcHJlY2VkZXMgZGF0YSB0cmFuc21pc3Npb24gZnJvbSBtZWRpdW0gdG8gUmluZyBidWZmZXIgYnkgRE1BIG1lY2hhbmlzbQotICAqIGluIG9yZGVyIHRvIGdldCBtYXhpbXVtIHBlcmZvcm1hbmNlIGFuZCBtaW5pbXVtIGNvZGUgc2l6ZSBzaW11bHRhbmVvdXNseS4KLSAgKi8KLWludCBydHM1MXhfbWdfZ2V0X0lDVihzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQlpbnQgYnVmZmxlbjsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1OCAqYnVmID0gTlVMTDsKLQotCVJUUzUxWF9ERUJVR1AoIi0tJXMtLVxuIiwgX19mdW5jX18pOwotCi0JcnRzNTF4X21zX2NsZWFudXBfd29yayhjaGlwKTsKLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWJ1ZiA9IGttYWxsb2MoMTAyOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCi0JYnVmWzBdID0gMHgwNDsKLQlidWZbMV0gPSAweDAyOwotCWJ1ZlsyXSA9IDB4MDA7Ci0JYnVmWzNdID0gMHgwMDsKLQotCXJldHZhbCA9IG1nX3NlbmRfZXhfY21kKGNoaXAsIE1HX0dFVF9JQkQsIG1zX2NhcmQtPm1nX2VudHJ5X251bSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgR2V0SUNWRmluaXNoKTsKLQl9Ci0KLQlyZXR2YWwgPSBtc190cmFuc2Zlcl9kYXRhKGNoaXAsIE1TX1RNX0FVVE9fUkVBRCwgUFJPX1JFQURfTE9OR19EQVRBLAotCQkJCSAgMiwgV0FJVF9JTlQsIDAsIDAsIGJ1ZiArIDQsIDEwMjQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9TVE9QLCBNU19TVE9QIHwgTVNfQ0xSX0VSUiwKLQkJCQkgICAgICBNU19TVE9QIHwgTVNfQ0xSX0VSUik7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgR2V0SUNWRmluaXNoKTsKLQl9Ci0JcmV0dmFsID0gbWdfY2hlY2tfaW50X2Vycm9yKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCQlUUkFDRV9HT1RPKGNoaXAsIEdldElDVkZpbmlzaCk7Ci0JfQotCi0JYnVmZmxlbiA9IG1pbigxMDI4LCAoaW50KXNjc2lfYnVmZmxlbihzcmIpKTsKLQlydHM1MXhfc2V0X3hmZXJfYnVmKGJ1ZiwgYnVmZmxlbiwgc3JiKTsKLQotR2V0SUNWRmluaXNoOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gICogU2VuZCBJQ1YgZGF0YSB0byBtZWRpdW0uCi0KLSAgKiBBZnRlciByZWNlaXZpbmcgdGhpcyBTQ1NJIGNvbW1hbmQsIGFkYXB0ZXIgc2hhbGwgcmVjZWl2ZSAxMDI4IGJ5dGVzCi0gICogYW5kIHdyaXRlIHRoZSBsYXRlciAxMDI0IGJ5dGVzIHRvIG1lZGl1bSBieSBXUklURV9MT05HX0RBVEEgVFBDCi0gICogY29uc2VjdXRpdmVseS4KLSAgKgotICAqIFNpbmNlIHRoZSBmaXJzdCA0LWJ5dGVzIGRhdGEgaXMganVzdCBvbmx5IGEgcHJlZml4IHRvIG9yaWdpbmFsIGRhdGEKLSAgKiB0aGF0IHNlbnQgYnkgaG9zdCwgYW5kIGl0IHNob3VsZCBiZSBza2lwcGVkIGJ5IHNoaWZ0aW5nIERNQSBwb2ludGVyCi0gICogYmVmb3JlIHdyaXRpbmcgMTAyNCBieXRlcyB0byBtZWRpdW0uCi0gICovCi1pbnQgcnRzNTF4X21nX3NldF9JQ1Yoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0JaW50IGJ1ZmZsZW47Ci0jaWZkZWYgTUdfU0VUX0lDVl9TTE9XCi0JaW50IGk7Ci0jZW5kaWYKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1OCAqYnVmID0gTlVMTDsKLQotCVJUUzUxWF9ERUJVR1AoIi0tJXMtLVxuIiwgX19mdW5jX18pOwotCi0JcnRzNTF4X21zX2NsZWFudXBfd29yayhjaGlwKTsKLQotCXJldHZhbCA9IG1zX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWJ1ZiA9IGttYWxsb2MoMTAyOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCi0JYnVmZmxlbiA9IG1pbigxMDI4LCAoaW50KXNjc2lfYnVmZmxlbihzcmIpKTsKLQlydHM1MXhfZ2V0X3hmZXJfYnVmKGJ1ZiwgYnVmZmxlbiwgc3JiKTsKLQotCXJldHZhbCA9IG1nX3NlbmRfZXhfY21kKGNoaXAsIE1HX1NFVF9JQkQsIG1zX2NhcmQtPm1nX2VudHJ5X251bSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlpZiAobXNfY2FyZC0+bWdfYXV0aCA9PSAwKSB7Ci0JCQlpZiAoKGJ1Zls1XSAmIDB4QzApICE9IDApCi0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfRVNUQUIpOwotCQkJZWxzZQotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCVNFTlNFX1RZUEVfTUdfV1JJVEVfRVJSKTsKLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfV1JJVEVfRVJSKTsKLQkJfQotCQlUUkFDRV9HT1RPKGNoaXAsIFNldElDVkZpbmlzaCk7Ci0JfQotCi0jaWZkZWYgTUdfU0VUX0lDVl9TTE9XCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQl1ZGVsYXkoNTApOwotCi0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUEMsIDB4RkYsCi0JCQkgICAgICAgUFJPX1dSSVRFX0xPTkdfREFUQSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1TX1RSQU5TX0NGRywgMHhGRiwKLQkJCSAgICAgICBXQUlUX0lOVCk7Ci0KLQkJcnRzNTF4X3RyYW5zX2RtYV9lbmFibGUoRE1BX1RPX0RFVklDRSwgY2hpcCwgNTEyLCBETUFfNTEyKTsKLQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNU19UUkFOU0ZFUiwgMHhGRiwKLQkJCSAgICAgICBNU19UUkFOU0ZFUl9TVEFSVCB8IE1TX1RNX05PUk1BTF9XUklURSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIE1TX1RSQU5TRkVSLAotCQkJICAgICAgIE1TX1RSQU5TRkVSX0VORCwgTVNfVFJBTlNGRVJfRU5EKTsKLQotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DRE9SLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01HX1dSSVRFX0VSUik7Ci0JCQlUUkFDRV9HT1RPKGNoaXAsIFNldElDVkZpbmlzaCk7Ci0JCX0KLQotCQlyZXR2YWwgPSBydHM1MXhfdHJhbnNmZXJfZGF0YV9yY2MoY2hpcCwgU05EX0JVTEtfUElQRShjaGlwKSwKLQkJCQkJCSAgYnVmICsgNCArIGkgKiA1MTIsIDUxMiwgMCwKLQkJCQkJCSAgTlVMTCwgMzAwMCwgU1RBR0VfRE8pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlydHM1MXhfY2xlYXJfbXNfZXJyb3IoY2hpcCk7Ci0JCQlpZiAobXNfY2FyZC0+bWdfYXV0aCA9PSAwKSB7Ci0JCQkJaWYgKChidWZbNV0gJiAweEMwKSAhPSAwKQotCQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkJU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfRVNUQUIpOwotCQkJCWVsc2UKLQkJCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJCVNFTlNFX1RZUEVfTUdfV1JJVEVfRVJSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJICAgICAgIFNFTlNFX1RZUEVfTUdfV1JJVEVfRVJSKTsKLQkJCX0KLQkJCXJldHZhbCA9IFNUQVRVU19GQUlMOwotCQkJVFJBQ0VfR09UTyhjaGlwLCBTZXRJQ1ZGaW5pc2gpOwotCQl9Ci0KLQkJcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgMzAwMCk7Ci0JCWlmIChDSEVDS19NU19UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkKLQkJICAgIHx8IG1nX2NoZWNrX2ludF9lcnJvcihjaGlwKSkgewotCQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQkJaWYgKG1zX2NhcmQtPm1nX2F1dGggPT0gMCkgewotCQkJCWlmICgoYnVmWzVdICYgMHhDMCkgIT0gMCkKLQkJCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJCVNFTlNFX1RZUEVfTUdfS0VZX0ZBSUxfTk9UX0VTVEFCKTsKLQkJCQllbHNlCi0JCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCQlTRU5TRV9UWVBFX01HX1dSSVRFX0VSUik7Ci0JCQl9IGVsc2UgewotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCSAgICAgICBTRU5TRV9UWVBFX01HX1dSSVRFX0VSUik7Ci0JCQl9Ci0JCQlyZXR2YWwgPSBTVEFUVVNfRkFJTDsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU2V0SUNWRmluaXNoKTsKLQkJfQotCX0KLSNlbHNlCi0JcmV0dmFsID0gbXNfdHJhbnNmZXJfZGF0YShjaGlwLCBNU19UTV9BVVRPX1dSSVRFLCBQUk9fV1JJVEVfTE9OR19EQVRBLAotCQkJCSAgMiwgV0FJVF9JTlQsIDAsIDAsIGJ1ZiArIDQsIDEwMjQpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX21zX2Vycm9yKGNoaXApOwotCQlpZiAobXNfY2FyZC0+bWdfYXV0aCA9PSAwKSB7Ci0JCQlpZiAoKGJ1Zls1XSAmIDB4QzApICE9IDApCi0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfRVNUQUIpOwotCQkJZWxzZQotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCVNFTlNFX1RZUEVfTUdfV1JJVEVfRVJSKTsKLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfV1JJVEVfRVJSKTsKLQkJfQotCQlUUkFDRV9HT1RPKGNoaXAsIFNldElDVkZpbmlzaCk7Ci0JfQotI2VuZGlmCi0KLVNldElDVkZpbmlzaDoKLQlrZnJlZShidWYpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLSNlbmRpZiAvKiBTVVBQT1JUX01BR0lDX0dBVEUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L21zX21nLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9tc19tZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTU3MzNhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L21zX21nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqIEhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpZm5kZWYgX19SVFM1MVhfTVNfTUdfSAotI2RlZmluZSBfX1JUUzUxWF9NU19NR19ICi0KLSNpbmNsdWRlICJydHM1MXhfY2hpcC5oIgotI2luY2x1ZGUgIm1zLmgiCi0KLWludCBydHM1MXhfbWdfc2V0X2xlYWZfaWQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9tZ19nZXRfbG9jYWxfRUtCKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfbWdfY2hnKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfbWdfZ2V0X3JzcF9jaGcoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9tZ19yc3Aoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9tZ19nZXRfSUNWKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfbWdfc2V0X0lDVihzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci0KLSNlbmRpZiAvKiBfX1JUUzUxWF9NU19NR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGQwNmQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeC5jCisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2RldmluZm8uaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJtcy5oIgotI2luY2x1ZGUgInJ0czUxeC5oIgotI2luY2x1ZGUgInJ0czUxeF9jaGlwLmgiCi0jaW5jbHVkZSAicnRzNTF4X2NhcmQuaCIKLSNpbmNsdWRlICJydHM1MXhfc2NzaS5oIgotI2luY2x1ZGUgInJ0czUxeF90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJydHM1MXhfZm9wLmgiCi0KLU1PRFVMRV9ERVNDUklQVElPTihSVFM1MVhfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7Ci0KLXN0YXRpYyBpbnQgYXV0b19kZWxpbmtfZW47Ci1tb2R1bGVfcGFyYW0oYXV0b19kZWxpbmtfZW4sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvX2RlbGlua19lbiwgImVuYWJsZSBhdXRvIGRlbGluayIpOwotCi1zdGF0aWMgaW50IHNzX2VuOwotbW9kdWxlX3BhcmFtKHNzX2VuLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0Moc3NfZW4sICJlbmFibGUgc2VsZWN0aXZlIHN1c3BlbmQiKTsKLQotc3RhdGljIGludCBzc19kZWxheSA9IDUwOwotbW9kdWxlX3BhcmFtKHNzX2RlbGF5LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0Moc3NfZGVsYXksCi0JCSAic2Vjb25kcyB0byBkZWxheSBiZWZvcmUgZW50ZXJpbmcgc2VsZWN0aXZlIHN1c3BlbmQiKTsKLQotc3RhdGljIGludCBuZWVkc19yZW1vdGVfd2FrZXVwOwotbW9kdWxlX3BhcmFtKG5lZWRzX3JlbW90ZV93YWtldXAsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhuZWVkc19yZW1vdGVfd2FrZXVwLCAic3Mgc3RhdGUgbmVlZHMgcmVtb3RlIHdha2V1cCBzdXBwb3J0ZWQiKTsKLQotI2lmZGVmIFNVUFBPUlRfRklMRV9PUAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRzNTF4X2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnJlYWQgPSBydHM1MXhfcmVhZCwKLQkud3JpdGUgPSBydHM1MXhfd3JpdGUsCi0JLnVubG9ja2VkX2lvY3RsID0gcnRzNTF4X2lvY3RsLAotCS5vcGVuID0gcnRzNTF4X29wZW4sCi0JLnJlbGVhc2UgPSBydHM1MXhfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAotICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggdGhlIGRyaXZlciBjb3JlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBydHM1MXhfY2xhc3MgPSB7Ci0JLm5hbWUgPSAicnRzNTF4JWQiLAotCS5mb3BzID0gJnJ0czUxeF9mb3BzLAotCS5taW5vcl9iYXNlID0gMTkyLAotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNCQkvKiBNaW5pbWFsIHN1cHBvcnQgZm9yIHN1c3BlbmQgYW5kIHJlc3VtZSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX2F1dG9wbV9lbmFibGUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JYXRvbWljX3NldCgmaW50Zi0+cG1fdXNhZ2VfY250LCAxKTsKLQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfYXV0b3BtX2Rpc2FibGUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JYXRvbWljX3NldCgmaW50Zi0+cG1fdXNhZ2VfY250LCAwKTsKLQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50Zik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0czUxeF90cnlfdG9fZW50ZXJfc3Moc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCVJUUzUxWF9ERUJVR1AoIlJlYWR5IHRvIGVudGVyIFNTIHN0YXRlXG4iKTsKLQl1c2JfYXV0b3BtX2VuYWJsZShjaGlwLT51c2ItPnB1c2JfaW50Zik7Ci19Ci0KLXZvaWQgcnRzNTF4X3RyeV90b19leGl0X3NzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlSVFM1MVhfREVCVUdQKCJFeGl0IGZyb20gU1Mgc3RhdGVcbiIpOwotCXVzYl9hdXRvcG1fZGlzYWJsZShjaGlwLT51c2ItPnB1c2JfaW50Zik7Ci19Ci0KLWludCBydHM1MXhfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwotCi0JUlRTNTFYX0RFQlVHUCgiJXMsIG1lc3NhZ2UuZXZlbnQgPSAweCV4XG4iLCBfX2Z1bmNfXywgbWVzc2FnZS5ldmVudCk7Ci0KLQkvKiBXYWl0IHVudGlsIG5vIGNvbW1hbmQgaXMgcnVubmluZyAqLwotCW11dGV4X2xvY2soJmNoaXAtPnVzYi0+ZGV2X211dGV4KTsKLQotCWNoaXAtPmZha2VfY2FyZF9yZWFkeSA9IGNoaXAtPmNhcmRfcmVhZHk7Ci0JcnRzNTF4X2RvX2JlZm9yZV9wb3dlcl9kb3duKGNoaXApOwotCi0JaWYgKG1lc3NhZ2UuZXZlbnQgPT0gUE1fRVZFTlRfQVVUT19TVVNQRU5EKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIkVudGVyIFNTIHN0YXRlIik7Ci0JCWNoaXAtPnJlc3VtZV9mcm9tX3Njc2kgPSAwOwotCQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9TUyk7Ci0JfSBlbHNlIHsKLQkJUlRTNTFYX0RFQlVHUCgiRW50ZXIgU1VTUEVORCBzdGF0ZSIpOwotCQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9TVVNQRU5EKTsKLQl9Ci0KLQkvKiBXaGVuIHJ1bnRpbWUgUE0gaXMgd29ya2luZywgd2UnbGwgc2V0IGEgZmxhZyB0byBpbmRpY2F0ZQotCSAqIHdoZXRoZXIgd2Ugc2hvdWxkIGF1dG9yZXN1bWUgd2hlbiBhIFNDU0kgcmVxdWVzdCBhcnJpdmVzLiAqLwotCi0JbXV0ZXhfdW5sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBydHM1MXhfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKLXsKLQlzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKLQotCVJUUzUxWF9ERUJVR1AoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoIVJUUzUxWF9DSEtfU1RBVChjaGlwLCBTVEFUX1NTKSB8fCAhY2hpcC0+cmVzdW1lX2Zyb21fc2NzaSkgewotCQltdXRleF9sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0KLQkJaWYgKGNoaXAtPm9wdGlvbi5zc19lbikgewotCQkJaWYgKEdFVF9QTV9VU0FHRV9DTlQoY2hpcCkgPD0gMCkgewotCQkJCS8qIFJlbW90ZSB3YWtlIHVwLCBpbmNyZWFzZSBwbV91c2FnZV9jbnQgKi8KLQkJCQlSVFM1MVhfREVCVUdQKCJJbmNyIHBtX3VzYWdlX2NudFxuIik7Ci0JCQkJU0VUX1BNX1VTQUdFX0NOVChjaGlwLCAxKTsKLQkJCX0KLQkJfQotCi0JCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLQkJcnRzNTF4X2luaXRfY2hpcChjaGlwKTsKLQkJcnRzNTF4X2luaXRfY2FyZHMoY2hpcCk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydHM1MXhfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKLXsKLQlzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKLQotCVJUUzUxWF9ERUJVR1AoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0KLQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCi0JaWYgKGNoaXAtPm9wdGlvbi5zc19lbikKLQkJU0VUX1BNX1VTQUdFX0NOVChjaGlwLCAxKTsKLQotCXJ0czUxeF9pbml0X2NoaXAoY2hpcCk7Ci0JcnRzNTF4X2luaXRfY2FyZHMoY2hpcCk7Ci0KLQltdXRleF91bmxvY2soJmNoaXAtPnVzYi0+ZGV2X211dGV4KTsKLQotCS8qIEZJWE1FOiBOb3RpZnkgdGhlIHN1YmRyaXZlcnMgdGhhdCB0aGV5IG5lZWQgdG8gcmVpbml0aWFsaXplCi0JICogdGhlIGRldmljZSAqLwotCXJldHVybiAwOwotfQotCi0jZWxzZSAvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHZvaWQgcnRzNTF4X3RyeV90b19lbnRlcl9zcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci19Ci0KLXZvaWQgcnRzNTF4X3RyeV90b19leGl0X3NzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0vKgotICogVGhlIG5leHQgdHdvIHJvdXRpbmVzIGdldCBjYWxsZWQganVzdCBiZWZvcmUgYW5kIGp1c3QgYWZ0ZXIKLSAqIGEgVVNCIHBvcnQgcmVzZXQsIHdoZXRoZXIgZnJvbSB0aGlzIGRyaXZlciBvciBhIGRpZmZlcmVudCBvbmUuCi0gKi8KLQotc3RhdGljIGludCBydHM1MXhfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKLXsKLQlzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKLQotCVJUUzUxWF9ERUJVR1AoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBNYWtlIHN1cmUgbm8gY29tbWFuZCBydW5zIGR1cmluZyB0aGUgcmVzZXQgKi8KLQltdXRleF9sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRzNTF4X3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwotCi0JUlRTNTFYX0RFQlVHUCgiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIFJlcG9ydCB0aGUgcmVzZXQgdG8gdGhlIFNDU0kgY29yZSAqLwotCS8qIHVzYl9zdG9yX3JlcG9ydF9idXNfcmVzZXQodXMpOyAqLwotCi0JLyogRklYTUU6IE5vdGlmeSB0aGUgc3ViZHJpdmVycyB0aGF0IHRoZXkgbmVlZCB0byByZWluaXRpYWxpemUKLQkgKiB0aGUgZGV2aWNlICovCi0KLQltdXRleF91bmxvY2soJmNoaXAtPnVzYi0+ZGV2X211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydHM1MXhfY29udHJvbF90aHJlYWQodm9pZCAqX19jaGlwKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCA9IChzdHJ1Y3QgcnRzNTF4X2NoaXAgKilfX2NoaXA7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHJ0czUxeF90b19ob3N0KGNoaXApOwotCi0JZm9yICg7OykgewotCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjaGlwLT51c2ItPmNtbmRfcmVhZHkpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHRlc3RfYml0KEZMSURYX0RJU0NPTk5FQ1RJTkcsICZjaGlwLT51c2ItPmRmbGFncykpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIi0tIGV4aXRpbmcgZnJvbSBydHM1MXgtY29udHJvbFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwotCQltdXRleF9sb2NrKCYoY2hpcC0+dXNiLT5kZXZfbXV0ZXgpKTsKLQotCQkvKiBsb2NrIGFjY2VzcyB0byB0aGUgc3RhdGUgKi8KLQkJc2NzaV9sb2NrKGhvc3QpOwotCi0JCS8qIFdoZW4gd2UgYXJlIGNhbGxlZCB3aXRoIG5vIGNvbW1hbmQgcGVuZGluZywgd2UncmUgZG9uZSAqLwotCQlpZiAoY2hpcC0+c3JiID09IE5VTEwpIHsKLQkJCXNjc2lfdW5sb2NrKGhvc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0JCQlSVFM1MVhfREVCVUdQKCItLSBleGl0aW5nIGZyb20gY29udHJvbCB0aHJlYWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBoYXMgdGhlIGNvbW1hbmQgdGltZWQgb3V0ICphbHJlYWR5KiA/ICovCi0JCWlmICh0ZXN0X2JpdChGTElEWF9USU1FRF9PVVQsICZjaGlwLT51c2ItPmRmbGFncykpIHsKLQkJCWNoaXAtPnNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQkJZ290byBTa2lwRm9yQWJvcnQ7Ci0JCX0KLQotCQlzY3NpX3VubG9jayhob3N0KTsKLQotCQkvKiByZWplY3QgdGhlIGNvbW1hbmQgaWYgdGhlIGRpcmVjdGlvbiBpbmRpY2F0b3IKLQkJICogaXMgVU5LTk9XTgotCQkgKi8KLQkJaWYgKGNoaXAtPnNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIlVOS05PV04gZGF0YSBkaXJlY3Rpb25cbiIpOwotCQkJY2hpcC0+c3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7Ci0JCX0KLQotCQkvKiByZWplY3QgaWYgdGFyZ2V0ICE9IDAgb3IgaWYgTFVOIGlzIGhpZ2hlciB0aGFuCi0JCSAqIHRoZSBtYXhpbXVtIGtub3duIExVTgotCQkgKi8KLQkJZWxzZSBpZiAoY2hpcC0+c3JiLT5kZXZpY2UtPmlkKSB7Ci0JCQlSVFM1MVhfREVCVUdQKCJCYWQgdGFyZ2V0IG51bWJlciAoJWQ6JWQpXG4iLAotCQkJCSAgICAgICBjaGlwLT5zcmItPmRldmljZS0+aWQsCi0JCQkJICAgICAgIGNoaXAtPnNyYi0+ZGV2aWNlLT5sdW4pOwotCQkJY2hpcC0+c3JiLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLQkJfQotCi0JCWVsc2UgaWYgKGNoaXAtPnNyYi0+ZGV2aWNlLT5sdW4gPiBjaGlwLT5tYXhfbHVuKSB7Ci0JCQlSVFM1MVhfREVCVUdQKCJCYWQgTFVOICglZDolZClcbiIsCi0JCQkJICAgICAgIGNoaXAtPnNyYi0+ZGV2aWNlLT5pZCwKLQkJCQkgICAgICAgY2hpcC0+c3JiLT5kZXZpY2UtPmx1bik7Ci0JCQljaGlwLT5zcmItPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQl9Ci0KLQkJLyogd2UndmUgZ290IGEgY29tbWFuZCwgbGV0J3MgZG8gaXQhICovCi0JCWVsc2UgewotCQkJUlRTNTFYX0RFQlVHKHJ0czUxeF9zY3NpX3Nob3dfY29tbWFuZChjaGlwLT5zcmIpKTsKLQkJCXJ0czUxeF9pbnZva2VfdHJhbnNwb3J0KGNoaXAtPnNyYiwgY2hpcCk7Ci0JCX0KLQotCQkvKiBsb2NrIGFjY2VzcyB0byB0aGUgc3RhdGUgKi8KLQkJc2NzaV9sb2NrKGhvc3QpOwotCi0JCS8qIGluZGljYXRlIHRoYXQgdGhlIGNvbW1hbmQgaXMgZG9uZSAqLwotCQlpZiAoY2hpcC0+c3JiLT5yZXN1bHQgIT0gRElEX0FCT1JUIDw8IDE2KQotCQkJY2hpcC0+c3JiLT5zY3NpX2RvbmUoY2hpcC0+c3JiKTsKLQkJZWxzZQotU2tpcEZvckFib3J0IDoKLQkJCVJUUzUxWF9ERUJVR1AoInNjc2kgY29tbWFuZCBhYm9ydGVkXG4iKTsKLQotCQkvKiBJZiBhbiBhYm9ydCByZXF1ZXN0IHdhcyByZWNlaXZlZCB3ZSBuZWVkIHRvIHNpZ25hbCB0aGF0Ci0JCSAqIHRoZSBhYm9ydCBoYXMgZmluaXNoZWQuICBUaGUgcHJvcGVyIHRlc3QgZm9yIHRoaXMgaXMKLQkJICogdGhlIFRJTUVEX09VVCBmbGFnLCBub3Qgc3JiLT5yZXN1bHQgPT0gRElEX0FCT1JULCBiZWNhdXNlCi0JCSAqIHRoZSB0aW1lb3V0IG1pZ2h0IGhhdmUgb2NjdXJyZWQgYWZ0ZXIgdGhlIGNvbW1hbmQgaGFkCi0JCSAqIGFscmVhZHkgY29tcGxldGVkIHdpdGggYSBkaWZmZXJlbnQgcmVzdWx0IGNvZGUuICovCi0JCWlmICh0ZXN0X2JpdChGTElEWF9USU1FRF9PVVQsICZjaGlwLT51c2ItPmRmbGFncykpIHsKLQkJCWNvbXBsZXRlKCYoY2hpcC0+dXNiLT5ub3RpZnkpKTsKLQotCQkJLyogQWxsb3cgVVNCIHRyYW5zZmVycyB0byByZXN1bWUgKi8KLQkJCWNsZWFyX2JpdChGTElEWF9BQk9SVElORywgJmNoaXAtPnVzYi0+ZGZsYWdzKTsKLQkJCWNsZWFyX2JpdChGTElEWF9USU1FRF9PVVQsICZjaGlwLT51c2ItPmRmbGFncyk7Ci0JCX0KLQotCQkvKiBmaW5pc2hlZCB3b3JraW5nIG9uIHRoaXMgY29tbWFuZCAqLwotCQljaGlwLT5zcmIgPSBOVUxMOwotCQlzY3NpX3VubG9jayhob3N0KTsKLQotCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwotCQltdXRleF91bmxvY2soJmNoaXAtPnVzYi0+ZGV2X211dGV4KTsKLQl9CQkJLyogZm9yICg7OykgKi8KLQotCWNvbXBsZXRlKCZjaGlwLT51c2ItPmNvbnRyb2xfZXhpdCk7Ci0KLQkvKiBXYWl0IHVudGlsIHdlIGFyZSB0b2xkIHRvIHN0b3AgKi8KLS8qCWZvciAoOzspIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOwotCQlzY2hlZHVsZSgpOwotCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ki8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydHM1MXhfcG9sbGluZ190aHJlYWQodm9pZCAqX19jaGlwKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCA9IChzdHJ1Y3QgcnRzNTF4X2NoaXAgKilfX2NoaXA7Ci0KLQlmb3IgKDs7KSB7Ci0JCXdhaXRfdGltZW91dChQT0xMSU5HX0lOVEVSVkFMKTsKLQotCQkvKiBpZiB0aGUgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQsIHdlIGFyZSBmcmVlIHRvIGV4aXQgKi8KLQkJaWYgKHRlc3RfYml0KEZMSURYX0RJU0NPTk5FQ1RJTkcsICZjaGlwLT51c2ItPmRmbGFncykpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIi0tIGV4aXRpbmcgZnJvbSBydHM1MXgtcG9sbGluZ1xuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGlmIHRoZSBkZXZpY2UgaGFzIGRpc2Nvbm5lY3RlZCwgd2UgYXJlIGZyZWUgdG8gZXhpdCAqLwotCQkvKiBpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTdG9wIHBvbGxpbmcgdGhyZWFkIVxuIik7Ci0JCQlicmVhazsKLQkJfSAqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0JCWlmIChSVFM1MVhfQ0hLX1NUQVQoY2hpcCwgU1RBVF9TUykgfHwKLQkJICAgIFJUUzUxWF9DSEtfU1RBVChjaGlwLCBTVEFUX1NTX1BSRSkgfHwKLQkJICAgIFJUUzUxWF9DSEtfU1RBVChjaGlwLCBTVEFUX1NVU1BFTkQpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzc19lbikgewotCQkJaWYgKFJUUzUxWF9DSEtfU1RBVChjaGlwLCBTVEFUX0lETEUpKSB7Ci0JCQkJaWYgKGNoaXAtPnNzX2NvdW50ZXIgPAotCQkJCSAgICAoc3NfZGVsYXkgKiAxMDAwIC8gUE9MTElOR19JTlRFUlZBTCkpIHsKLQkJCQkJY2hpcC0+c3NfY291bnRlcisrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIFByZXBhcmUgU1Mgc3RhdGUgKi8KLQkJCQkJUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfU1NfUFJFKTsKLQkJCQkJcnRzNTF4X3RyeV90b19lbnRlcl9zcyhjaGlwKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQljaGlwLT5zc19jb3VudGVyID0gMDsKLQkJCX0KLQkJfQotI2VuZGlmCi0KLQkJcnRzNTF4X21zcHJvX3BvbGxpbmdfZm9ybWF0X3N0YXR1cyhjaGlwKTsKLQotCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KLQkJbXV0ZXhfbG9jaygmKGNoaXAtPnVzYi0+ZGV2X211dGV4KSk7Ci0KLQkJcnRzNTF4X3BvbGxpbmdfZnVuYyhjaGlwKTsKLQotCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwotCQltdXRleF91bmxvY2soJmNoaXAtPnVzYi0+ZGV2X211dGV4KTsKLQl9CQkJLyogZm9yICg7OykgKi8KLQotCWNvbXBsZXRlKCZjaGlwLT51c2ItPnBvbGxpbmdfZXhpdCk7Ci0KLQkvKiBXYWl0IHVudGlsIHdlIGFyZSB0b2xkIHRvIHN0b3AgKi8KLQkvKiBmb3IgKDs7KSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCWJyZWFrOwotCQlzY2hlZHVsZSgpOwotCQl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOyAqLwotCXJldHVybiAwOwotfQotCi0vKiBBc3NvY2lhdGUgb3VyIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBVU0IgZGV2aWNlICovCi1zdGF0aWMgaW50IGFzc29jaWF0ZV9kZXYoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgcnRzNTF4X3VzYiAqcnRzNTF4ID0gY2hpcC0+dXNiOwotI2lmZGVmIFNVUFBPUlRfRklMRV9PUAotCWludCByZXR2YWw7Ci0jZW5kaWYKLQotCS8qIEZpbGwgaW4gdGhlIGRldmljZS1yZWxhdGVkIGZpZWxkcyAqLwotCXJ0czUxeC0+cHVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXJ0czUxeC0+cHVzYl9pbnRmID0gaW50ZjsKLQlydHM1MXgtPmlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQlSVFM1MVhfREVCVUdQKCJWZW5kb3I6IDB4JTA0eCwgUHJvZHVjdDogMHglMDR4LCBSZXZpc2lvbjogMHglMDR4XG4iLAotCQkgICAgICAgbGUxNl90b19jcHUocnRzNTF4LT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JCSAgICAgICBsZTE2X3RvX2NwdShydHM1MXgtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCi0JCSAgICAgICBsZTE2X3RvX2NwdShydHM1MXgtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOwotCVJUUzUxWF9ERUJVR1AoIkludGVyZmFjZSBTdWJjbGFzczogMHglMDJ4LCBQcm90b2NvbDogMHglMDJ4XG4iLAotCQkgICAgICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzLAotCQkgICAgICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVByb3RvY29sKTsKLQotCS8qIFN0b3JlIG91ciBwcml2YXRlIGRhdGEgaW4gdGhlIGludGVyZmFjZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2hpcCk7Ci0KLSNpZmRlZiBTVVBQT1JUX0ZJTEVfT1AKLQkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmcnRzNTF4X2NsYXNzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRyaXZlciAqLwotCQlSVFM1MVhfREVCVUdQKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLSNlbmRpZgotCi0JLyogQWxsb2NhdGUgdGhlIGRldmljZS1yZWxhdGVkIERNQS1tYXBwZWQgYnVmZmVycyAqLwotCXJ0czUxeC0+Y3IgPSB1c2JfYnVmZmVyX2FsbG9jKHJ0czUxeC0+cHVzYl9kZXYsIHNpemVvZigqcnRzNTF4LT5jciksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCwgJnJ0czUxeC0+Y3JfZG1hKTsKLQlpZiAoIXJ0czUxeC0+Y3IpIHsKLQkJUlRTNTFYX0RFQlVHUCgidXNiX2N0cmxyZXF1ZXN0IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcnRzNTF4LT5pb2J1ZiA9IHVzYl9idWZmZXJfYWxsb2MocnRzNTF4LT5wdXNiX2RldiwgUlRTNTFYX0lPQlVGX1NJWkUsCi0JCQkJCSBHRlBfS0VSTkVMLCAmcnRzNTF4LT5pb2J1Zl9kbWEpOwotCWlmICghcnRzNTF4LT5pb2J1ZikgewotCQlSVFM1MVhfREVCVUdQKCJJL08gYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBydHM1MXhfaW5pdF9vcHRpb25zKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgcnRzNTF4X29wdGlvbiAqb3B0aW9uID0gJihjaGlwLT5vcHRpb24pOwotCi0Jb3B0aW9uLT5ydHM1MXhfbXNwcm9fZm9ybWF0dGVyX2VuYWJsZSA9IDE7Ci0KLQlvcHRpb24tPmZwZ2Ffc2Rfc2RyMTA0X2NsayA9IENMS18xMDA7Ci0Jb3B0aW9uLT5mcGdhX3NkX3NkcjUwX2NsayA9IENMS18xMDA7Ci0Jb3B0aW9uLT5mcGdhX3NkX2RkcjUwX2NsayA9IENMS18xMDA7Ci0Jb3B0aW9uLT5mcGdhX3NkX2hzX2NsayA9IENMS18xMDA7Ci0Jb3B0aW9uLT5mcGdhX21tY181Mm1fY2xrID0gQ0xLXzgwOwotCW9wdGlvbi0+ZnBnYV9tc19oZ19jbGsgPSBDTEtfODA7Ci0Jb3B0aW9uLT5mcGdhX21zXzRiaXRfY2xrID0gQ0xLXzgwOwotCi0Jb3B0aW9uLT5hc2ljX3NkX3NkcjEwNF9jbGsgPSA5ODsKLQlvcHRpb24tPmFzaWNfc2Rfc2RyNTBfY2xrID0gOTg7Ci0Jb3B0aW9uLT5hc2ljX3NkX2RkcjUwX2NsayA9IDk4OwotCW9wdGlvbi0+YXNpY19zZF9oc19jbGsgPSA5NzsKLQlvcHRpb24tPmFzaWNfbW1jXzUybV9jbGsgPSA5NTsKLQlvcHRpb24tPmFzaWNfbXNfaGdfY2xrID0gMTE2OwotCW9wdGlvbi0+YXNpY19tc180Yml0X2NsayA9IDc3OwotCi0Jb3B0aW9uLT5zZF9kZHJfdHhfcGhhc2UgPSAwOwotCW9wdGlvbi0+bW1jX2Rkcl90eF9waGFzZSA9IDE7Ci0KLQlvcHRpb24tPnNkX3NwZWVkX3ByaW9yID0gMDsKLQlvcHRpb24tPnNkX2N0bCA9Ci0JICAgIFNEX1BVU0hfUE9JTlRfQVVUTyB8IFNEX1NBTVBMRV9QT0lOVF9BVVRPIHwgU1VQUE9SVF9VSFM1MF9NTUM0NDsKLQotCW9wdGlvbi0+c3NfZW4gPSBzc19lbjsKLQlvcHRpb24tPnNzX2RlbGF5ID0gc3NfZGVsYXk7Ci0KLQlvcHRpb24tPmF1dG9fZGVsaW5rX2VuID0gYXV0b19kZWxpbmtfZW47Ci0KLQlvcHRpb24tPkZUMl9mYXN0X21vZGUgPSAwOwotCW9wdGlvbi0+cHdyX2RlbGF5ID0gODAwOwotCW9wdGlvbi0+cnRzNTF4X3hkX3J3X3N0ZXAgPSAwOwotCW9wdGlvbi0+RDMzMThfb2ZmX2RlbGF5ID0gNTA7Ci0Jb3B0aW9uLT5kZWxpbmtfZGVsYXkgPSAxMDA7Ci0Jb3B0aW9uLT5ydHM1MTI5X0QzMzE4X29mZl9lbmFibGUgPSAwOwotCW9wdGlvbi0+c2QyMF9wYWRfZHJpdmUgPSAwOwotCW9wdGlvbi0+cmVzZXRfb3JfcndfZmFpbF9zZXRfcGFkX2RyaXZlID0gMTsKLQlvcHRpb24tPmRlYm91bmNlX251bSA9IDI7Ci0Jb3B0aW9uLT5sZWRfdG9nZ2xlX2ludGVydmFsID0gNjsKLQlvcHRpb24tPnJ0czUxeF94ZF9yd25fc3RlcCA9IDA7Ci0Jb3B0aW9uLT5zZF9zZW5kX3N0YXR1c19lbiA9IDA7Ci0Jb3B0aW9uLT5zZHI1MF90eF9waGFzZSA9IDB4MDE7Ci0Jb3B0aW9uLT5zZHI1MF9yeF9waGFzZSA9IDB4MDU7Ci0Jb3B0aW9uLT5kZHI1MF90eF9waGFzZSA9IDB4MDk7Ci0Jb3B0aW9uLT5kZHI1MF9yeF9waGFzZSA9IDB4MDY7Ci0Jb3B0aW9uLT5zZHI1MF9waGFzZV9zZWwgPSAwOwotCW9wdGlvbi0+c2QzMF9wYWRfZHJpdmUgPSAxOwotCW9wdGlvbi0+bXNfZXJycmVnX2ZpeCA9IDA7Ci0Jb3B0aW9uLT5yZXNldF9tbWNfZmlyc3QgPSAwOwotCW9wdGlvbi0+c3BlZWRfbW1jID0gMTsKLQlvcHRpb24tPmxlZF9hbHdheXNfb24gPSAwOwotfQotCi0vKiBHZXQgdGhlIHBpcGUgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgZ2V0X3BpcGVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgcnRzNTF4X3VzYiAqcnRzNTF4ID0gY2hpcC0+dXNiOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHNldHRpbmcgPQotCSAgICBydHM1MXgtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JaW50IGk7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2luID0gTlVMTDsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX291dCA9IE5VTEw7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pbnQgPSBOVUxMOwotCi0JLyoKLQkgKiBGaW5kIHRoZSBmaXJzdCBlbmRwb2ludCBvZiBlYWNoIHR5cGUgd2UgbmVlZC4KLQkgKiBXZSBhcmUgZXhwZWN0aW5nIGEgbWluaW11bSBvZiAyIGVuZHBvaW50cyAtIGluIGFuZCBvdXQgKGJ1bGspLgotCSAqIEFuIG9wdGlvbmFsIGludGVycnVwdC1pbiBpcyBPSyAobmVjZXNzYXJ5IGZvciBDQkkgcHJvdG9jb2wpLgotCSAqIFdlIHdpbGwgaWdub3JlIGFueSBvdGhlcnMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7Ci0JCWVwID0gJmFsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2M7Ci0KLQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXApKSB7Ci0JCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpIHsKLQkJCQlpZiAoIWVwX2luKQotCQkJCQllcF9pbiA9IGVwOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIWVwX291dCkKLQkJCQkJZXBfb3V0ID0gZXA7Ci0JCQl9Ci0JCX0KLQotCQllbHNlIGlmICh1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVwKSkgewotCQkJaWYgKCFlcF9pbnQpCi0JCQkJZXBfaW50ID0gZXA7Ci0JCX0KLQl9Ci0KLQlpZiAoIWVwX2luIHx8ICFlcF9vdXQpIHsKLQkJUlRTNTFYX0RFQlVHUCgiRW5kcG9pbnQgc2FuaXR5IGNoZWNrIGZhaWxlZCEiCi0JCQkJCSJSZWplY3RpbmcgZGV2LlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIENhbGN1bGF0ZSBhbmQgc3RvcmUgdGhlIHBpcGUgdmFsdWVzICovCi0JcnRzNTF4LT5zZW5kX2N0cmxfcGlwZSA9IHVzYl9zbmRjdHJscGlwZShydHM1MXgtPnB1c2JfZGV2LCAwKTsKLQlydHM1MXgtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHJ0czUxeC0+cHVzYl9kZXYsIDApOwotCXJ0czUxeC0+c2VuZF9idWxrX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUocnRzNTF4LT5wdXNiX2RldiwKLQkJCQkJCSB1c2JfZW5kcG9pbnRfbnVtKGVwX291dCkpOwotCXJ0czUxeC0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUocnRzNTF4LT5wdXNiX2RldiwKLQkJCQkJCSB1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7Ci0JaWYgKGVwX2ludCkgewotCQlydHM1MXgtPnJlY3ZfaW50cl9waXBlID0gdXNiX3JjdmludHBpcGUocnRzNTF4LT5wdXNiX2RldiwKLQkJCQkJCQl1c2JfZW5kcG9pbnRfbnVtCi0JCQkJCQkJKGVwX2ludCkpOwotCQlydHM1MXgtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogSW5pdGlhbGl6ZSBhbGwgdGhlIGR5bmFtaWMgcmVzb3VyY2VzIHdlIG5lZWQgKi8KLXN0YXRpYyBpbnQgcnRzNTF4X2FjcXVpcmVfcmVzb3VyY2VzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgcnRzNTF4X3VzYiAqcnRzNTF4ID0gY2hpcC0+dXNiOwotCWludCByZXR2YWw7Ci0KLQlydHM1MXgtPmN1cnJlbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJ0czUxeC0+Y3VycmVudF91cmIpIHsKLQkJUlRTNTFYX0RFQlVHUCgiVVJCIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcnRzNTF4LT5pbnRyX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFydHM1MXgtPmludHJfdXJiKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIlVSQiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNoaXAtPmNtZF9idWYgPSBjaGlwLT5yc3BfYnVmID0gcnRzNTF4LT5pb2J1ZjsKLQotCXJ0czUxeF9pbml0X29wdGlvbnMoY2hpcCk7Ci0KLQkvKiBJbml0IHJ0czUxeHggZGV2aWNlICovCi0JcmV0dmFsID0gcnRzNTF4X2luaXRfY2hpcChjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKiBSZWxlYXNlIGFsbCBvdXIgZHluYW1pYyByZXNvdXJjZXMgKi8KLXN0YXRpYyB2b2lkIHJ0czUxeF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JUlRTNTFYX0RFQlVHUCgiLS0gJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIFRlbGwgdGhlIGNvbnRyb2wgdGhyZWFkIHRvIGV4aXQuICBUaGUgU0NTSSBob3N0IG11c3QKLQkgKiBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkIGFuZCB0aGUgRElTQ09OTkVDVElORyBmbGFnIHNldAotCSAqIHNvIHRoYXQgd2Ugd29uJ3QgYWNjZXB0IGFueSBtb3JlIGNvbW1hbmRzLgotCSAqLwotCVJUUzUxWF9ERUJVR1AoIi0tIHNlbmRpbmcgZXhpdCBjb21tYW5kIHRvIHRocmVhZFxuIik7Ci0JY29tcGxldGUoJmNoaXAtPnVzYi0+Y21uZF9yZWFkeSk7Ci0JaWYgKGNoaXAtPnVzYi0+Y3RsX3RocmVhZCkKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmY2hpcC0+dXNiLT5jb250cm9sX2V4aXQpOwotCQkvKiBrdGhyZWFkX3N0b3AoY2hpcC0+dXNiLT5jdGxfdGhyZWFkKTsgKi8KLQlpZiAoY2hpcC0+dXNiLT5wb2xsaW5nX3RocmVhZCkKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmY2hpcC0+dXNiLT5wb2xsaW5nX2V4aXQpOwotCi0JLyogaWYgKGNoaXAtPnVzYi0+cG9sbGluZ190aHJlYWQpCi0JCWt0aHJlYWRfc3RvcChjaGlwLT51c2ItPnBvbGxpbmdfdGhyZWFkKTsgKi8KLQotCXdhaXRfdGltZW91dCgyMDApOwotCi0JLyogUmVsZWFzZSBydHM1MXh4IGRldmljZSBoZXJlICovCi0JcnRzNTF4X3JlbGVhc2VfY2hpcChjaGlwKTsKLQotCXVzYl9mcmVlX3VyYihjaGlwLT51c2ItPmN1cnJlbnRfdXJiKTsKLQl1c2JfZnJlZV91cmIoY2hpcC0+dXNiLT5pbnRyX3VyYik7Ci19Ci0KLS8qIERpc3NvY2lhdGUgZnJvbSB0aGUgVVNCIGRldmljZSAqLwotc3RhdGljIHZvaWQgZGlzc29jaWF0ZV9kZXYoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBydHM1MXhfdXNiICpydHM1MXggPSBjaGlwLT51c2I7Ci0KLQlSVFM1MVhfREVCVUdQKCItLSAlc1xuIiwgX19mdW5jX18pOwotCi0JLyogRnJlZSB0aGUgZGV2aWNlLXJlbGF0ZWQgRE1BLW1hcHBlZCBidWZmZXJzICovCi0JaWYgKHJ0czUxeC0+Y3IpCi0JCXVzYl9idWZmZXJfZnJlZShydHM1MXgtPnB1c2JfZGV2LCBzaXplb2YoKnJ0czUxeC0+Y3IpLAotCQkJCXJ0czUxeC0+Y3IsIHJ0czUxeC0+Y3JfZG1hKTsKLQlpZiAocnRzNTF4LT5pb2J1ZikKLQkJdXNiX2J1ZmZlcl9mcmVlKHJ0czUxeC0+cHVzYl9kZXYsIFJUUzUxWF9JT0JVRl9TSVpFLAotCQkJCXJ0czUxeC0+aW9idWYsIHJ0czUxeC0+aW9idWZfZG1hKTsKLQotCS8qIFJlbW92ZSBvdXIgcHJpdmF0ZSBkYXRhIGZyb20gdGhlIGludGVyZmFjZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEocnRzNTF4LT5wdXNiX2ludGYsIE5VTEwpOwotCi0jaWZkZWYgU1VQUE9SVF9GSUxFX09QCi0JLyogZ2l2ZSBiYWNrIG91ciBtaW5vciAqLwotCXVzYl9kZXJlZ2lzdGVyX2RldihydHM1MXgtPnB1c2JfaW50ZiwgJnJ0czUxeF9jbGFzcyk7Ci0jZW5kaWYKLQotCWtmcmVlKHJ0czUxeCk7Ci0JY2hpcC0+dXNiID0gTlVMTDsKLX0KLQotLyogRmlyc3Qgc3RhZ2Ugb2YgZGlzY29ubmVjdCBwcm9jZXNzaW5nOiBzdG9wIFNDU0kgc2Nhbm5pbmcsCi0gKiByZW1vdmUgdGhlIGhvc3QsIGFuZCBzdG9wIGFjY2VwdGluZyBuZXcgY29tbWFuZHMKLSAqLwotc3RhdGljIHZvaWQgcXVpZXNjZV9hbmRfcmVtb3ZlX2hvc3Qoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBydHM1MXhfdXNiICpydHM1MXggPSBjaGlwLT51c2I7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHJ0czUxeF90b19ob3N0KGNoaXApOwotCi0JLyogSWYgdGhlIGRldmljZSBpcyByZWFsbHkgZ29uZSwgY3V0IHNob3J0IHJlc2V0IGRlbGF5cyAqLwotCWlmIChydHM1MXgtPnB1c2JfZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCi0JCXNldF9iaXQoRkxJRFhfRElTQ09OTkVDVElORywgJnJ0czUxeC0+ZGZsYWdzKTsKLQotCS8qIFJlbW92aW5nIHRoZSBob3N0IHdpbGwgcGVyZm9ybSBhbiBvcmRlcmx5IHNodXRkb3duOiBjYWNoZXMKLQkgKiBzeW5jaHJvbml6ZWQsIGRpc2tzIHNwdW4gZG93biwgZXRjLgotCSAqLwotCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7Ci0KLQkvKiBQcmV2ZW50IGFueSBuZXcgY29tbWFuZHMgZnJvbSBiZWluZyBhY2NlcHRlZCBhbmQgY3V0IHNob3J0Ci0JICogcmVzZXQgZGVsYXlzLgotCSAqLwotCXNjc2lfbG9jayhob3N0KTsKLQlzZXRfYml0KEZMSURYX0RJU0NPTk5FQ1RJTkcsICZydHM1MXgtPmRmbGFncyk7Ci0Jc2NzaV91bmxvY2soaG9zdCk7Ci19Ci0KLS8qIFNlY29uZCBzdGFnZSBvZiBkaXNjb25uZWN0IHByb2Nlc3Npbmc6IGRlYWxsb2NhdGUgYWxsIHJlc291cmNlcyAqLwotc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVyeXRoaW5nKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlydHM1MXhfcmVsZWFzZV9yZXNvdXJjZXMoY2hpcCk7Ci0JZGlzc29jaWF0ZV9kZXYoY2hpcCk7Ci0KLQkvKiBEcm9wIG91ciByZWZlcmVuY2UgdG8gdGhlIGhvc3Q7IHRoZSBTQ1NJIGNvcmUgd2lsbCBmcmVlIGl0Ci0JICogKGFuZCAiY2hpcCIgYWxvbmcgd2l0aCBpdCkgd2hlbiB0aGUgcmVmY291bnQgYmVjb21lcyAwLiAqLwotCXNjc2lfaG9zdF9wdXQocnRzNTF4X3RvX2hvc3QoY2hpcCkpOwotfQotCi1zdGF0aWMgaW50IHJ0czUxeF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcDsKLQlzdHJ1Y3QgcnRzNTF4X3VzYiAqcnRzNTF4OwotCWludCByZXN1bHQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0aDsKLQotCVJUUzUxWF9ERUJVR1AoIiVzIGRldGVjdGVkXG4iLCBSVFM1MVhfTkFNRSk7Ci0KLQlydHM1MXggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnRzNTF4X3VzYiksIEdGUF9LRVJORUwpOwotCWlmICghcnRzNTF4KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUlRTNTFYX1RJUAotCQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBydHM1MXhfdXNiXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiBBc2sgdGhlIFNDU0kgbGF5ZXIgdG8gYWxsb2NhdGUgYSBob3N0IHN0cnVjdHVyZSwgd2l0aCBleHRyYQotCSAqIHNwYWNlIGF0IHRoZSBlbmQgZm9yIG91ciBwcml2YXRlIHVzX2RhdGEgc3RydWN0dXJlLgotCSAqLwotCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnJ0czUxeF9ob3N0X3RlbXBsYXRlLCBzaXplb2YoKmNoaXApKTsKLQlpZiAoIWhvc3QpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBSVFM1MVhfVElQCi0JCSAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBzY3NpIGhvc3RcbiIpOwotCQlrZnJlZShydHM1MXgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIEFsbG93IDE2LWJ5dGUgQ0RCcyBhbmQgdGh1cyA+IDJUQgotCSAqLwotCWhvc3QtPm1heF9jbWRfbGVuID0gMTY7Ci0JY2hpcCA9IGhvc3RfdG9fcnRzNTF4KGhvc3QpOwotCW1lbXNldChjaGlwLCAwLCBzaXplb2Yoc3RydWN0IHJ0czUxeF9jaGlwKSk7Ci0KLQljaGlwLT52ZW5kb3JfaWQgPSBpZC0+aWRWZW5kb3I7Ci0JY2hpcC0+cHJvZHVjdF9pZCA9IGlkLT5pZFByb2R1Y3Q7Ci0KLQltdXRleF9pbml0KCYocnRzNTF4LT5kZXZfbXV0ZXgpKTsKLQlpbml0X2NvbXBsZXRpb24oJnJ0czUxeC0+Y21uZF9yZWFkeSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZydHM1MXgtPmNvbnRyb2xfZXhpdCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZydHM1MXgtPnBvbGxpbmdfZXhpdCk7Ci0JaW5pdF9jb21wbGV0aW9uKCYocnRzNTF4LT5ub3RpZnkpKTsKLQotCWNoaXAtPnVzYiA9IHJ0czUxeDsKLQotCS8qIEFzc29jaWF0ZSB0aGUgdXNfZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgVVNCIGRldmljZSAqLwotCXJlc3VsdCA9IGFzc29jaWF0ZV9kZXYoY2hpcCwgaW50Zik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBCYWREZXZpY2U7Ci0KLQkvKiBGaW5kIHRoZSBlbmRwb2ludHMgYW5kIGNhbGN1bGF0ZSBwaXBlIHZhbHVlcyAqLwotCXJlc3VsdCA9IGdldF9waXBlcyhjaGlwKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIEJhZERldmljZTsKLQotCS8qIEFjcXVpcmUgYWxsIHRoZSBvdGhlciByZXNvdXJjZXMgYW5kIGFkZCB0aGUgaG9zdCAqLwotCXJlc3VsdCA9IHJ0czUxeF9hY3F1aXJlX3Jlc291cmNlcyhjaGlwKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIEJhZERldmljZTsKLQotCS8qIFN0YXJ0IHVwIG91ciBjb250cm9sIHRocmVhZCAqLwotCXRoID0ga3RocmVhZF9ydW4ocnRzNTF4X2NvbnRyb2xfdGhyZWFkLCBjaGlwLCBSVFM1MVhfQ1RMX1RIUkVBRCk7Ci0JaWYgKElTX0VSUih0aCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBSVFM1MVhfVElQCi0JCSAgICAgICAiVW5hYmxlIHRvIHN0YXJ0IGNvbnRyb2wgdGhyZWFkXG4iKTsKLQkJcmVzdWx0ID0gUFRSX0VSUih0aCk7Ci0JCWdvdG8gQmFkRGV2aWNlOwotCX0KLQlydHM1MXgtPmN0bF90aHJlYWQgPSB0aDsKLQotCXJlc3VsdCA9IHNjc2lfYWRkX2hvc3QocnRzNTF4X3RvX2hvc3QoY2hpcCksICZydHM1MXgtPnB1c2JfaW50Zi0+ZGV2KTsKLQlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUlRTNTFYX1RJUCAiVW5hYmxlIHRvIGFkZCB0aGUgc2NzaSBob3N0XG4iKTsKLQkJZ290byBCYWREZXZpY2U7Ci0JfQotCXNjc2lfc2Nhbl9ob3N0KHJ0czUxeF90b19ob3N0KGNoaXApKTsKLQotCS8qIFN0YXJ0IHVwIG91ciBwb2xsaW5nIHRocmVhZCAqLwotCXRoID0ga3RocmVhZF9ydW4ocnRzNTF4X3BvbGxpbmdfdGhyZWFkLCBjaGlwLCBSVFM1MVhfUE9MTElOR19USFJFQUQpOwotCWlmIChJU19FUlIodGgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUlRTNTFYX1RJUAotCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCBwb2xsaW5nIHRocmVhZFxuIik7Ci0JCXJlc3VsdCA9IFBUUl9FUlIodGgpOwotCQlnb3RvIEJhZERldmljZTsKLQl9Ci0JcnRzNTF4LT5wb2xsaW5nX3RocmVhZCA9IHRoOwotCi0jaWZkZWYgQ09ORklHX1BNCi0JaWYgKHNzX2VuKSB7Ci0JCXJ0czUxeC0+cHVzYl9pbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gbmVlZHNfcmVtb3RlX3dha2V1cDsKLQkJU0VUX1BNX1VTQUdFX0NOVChjaGlwLCAxKTsKLQkJUlRTNTFYX0RFQlVHUCgicG1fdXNhZ2VfY250ID0gJWRcbiIsIEdFVF9QTV9VU0FHRV9DTlQoY2hpcCkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci0KLQkvKiBXZSBjb21lIGhlcmUgaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyAqLwotQmFkRGV2aWNlOgotCVJUUzUxWF9ERUJVR1AoInJ0czUxeF9wcm9iZSgpIGZhaWxlZFxuIik7Ci0JcmVsZWFzZV9ldmVyeXRoaW5nKGNoaXApOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0czUxeF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCA9IChzdHJ1Y3QgcnRzNTF4X2NoaXAgKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JUlRTNTFYX0RFQlVHUCgicnRzNTF4X2Rpc2Nvbm5lY3QoKSBjYWxsZWRcbiIpOwotCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KGNoaXApOwotCXJlbGVhc2VfZXZlcnl0aGluZyhjaGlwKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydHM1MTM5X3VzYl9pZHNbXSA9IHsKLQl7VVNCX0RFVklDRSgweDBCREEsIDB4MDEzOSl9LAotCXtVU0JfREVWSUNFKDB4MEJEQSwgMHgwMTI5KX0sCi0Je30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJ0czUxMzlfdXNiX2lkcyk7Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBydHM1MTM5X3VzYl9pZHMpOwotCi1zdHJ1Y3QgdXNiX2RyaXZlciBydHM1MXhfZHJpdmVyID0gewotCS5uYW1lID0gUlRTNTFYX05BTUUsCi0JLnByb2JlID0gcnRzNTF4X3Byb2JlLAotCS5kaXNjb25uZWN0ID0gcnRzNTF4X2Rpc2Nvbm5lY3QsCi0JLnN1c3BlbmQgPSBydHM1MXhfc3VzcGVuZCwKLQkucmVzdW1lID0gcnRzNTF4X3Jlc3VtZSwKLQkucmVzZXRfcmVzdW1lID0gcnRzNTF4X3Jlc2V0X3Jlc3VtZSwKLQkucHJlX3Jlc2V0ID0gcnRzNTF4X3ByZV9yZXNldCwKLQkucG9zdF9yZXNldCA9IHJ0czUxeF9wb3N0X3Jlc2V0LAotCS5pZF90YWJsZSA9IHJ0czUxMzlfdXNiX2lkcywKLQkuc29mdF91bmJpbmQgPSAxLAotfTsKLQotbW9kdWxlX3VzYl9kcml2ZXIocnRzNTF4X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2MwMTA5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICogSGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQXV0aG9yOgotICogICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICogTWFpbnRhaW5lcjoKLSAqICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKi8KLQotI2lmbmRlZiBfX1JUUzUxWF9ICi0jZGVmaW5lIF9fUlRTNTFYX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aW5mby5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJ2MS4wNCIKLQotI2RlZmluZSBSVFM1MVhfREVTQwkJIlJlYWx0ZWsgUlRTNTEzOS8yOSBVU0IgY2FyZCByZWFkZXIgZHJpdmVyIgotI2RlZmluZSBSVFM1MVhfTkFNRQkJInJ0czUxMzkiCi0jZGVmaW5lIFJUUzUxWF9DVExfVEhSRUFECSJydHM1MTM5LWNvbnRyb2wiCi0jZGVmaW5lIFJUUzUxWF9QT0xMSU5HX1RIUkVBRAkicnRzNTEzOS1wb2xsaW5nIgotCi0jZGVmaW5lIFBPTExJTkdfSU5fVEhSRUFECi0jZGVmaW5lIFNVUFBPUlRfRklMRV9PUAotCi0jZGVmaW5lIHdhaXRfdGltZW91dF94KHRhc2tfc3RhdGUsIG1zZWNzKQlcCi1kbyB7CQkJCQkJXAotCXNldF9jdXJyZW50X3N0YXRlKCh0YXNrX3N0YXRlKSk7CVwKLQlzY2hlZHVsZV90aW1lb3V0KChtc2VjcykgKiBIWiAvIDEwMDApOwlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHdhaXRfdGltZW91dChtc2VjcykJd2FpdF90aW1lb3V0X3goVEFTS19JTlRFUlJVUFRJQkxFLCAobXNlY3MpKQotCi0jZGVmaW5lIFNDU0lfTFVOKHNyYikJCSgoc3JiKS0+ZGV2aWNlLT5sdW4pCi0KLS8qIFNpemUgb2YgdGhlIERNQS1tYXBwZWQgSS9PIGJ1ZmZlciAqLwotI2RlZmluZSBSVFM1MVhfSU9CVUZfU0laRQkxMDI0Ci0KLS8qIER5bmFtaWMgYml0ZmxhZyBkZWZpbml0aW9ucyAoZGZsYWdzKTogdXNlZCBpbiBzZXRfYml0KCkgZXRjLiAqLwotI2RlZmluZSBGTElEWF9VUkJfQUNUSVZFCTAJLyogY3VycmVudF91cmIgaXMgaW4gdXNlICAgICovCi0jZGVmaW5lIEZMSURYX1NHX0FDVElWRQkJMQkvKiBjdXJyZW50X3NnIGlzIGluIHVzZSAgICAgKi8KLSNkZWZpbmUgRkxJRFhfQUJPUlRJTkcJCTIJLyogYWJvcnQgaXMgaW4gcHJvZ3Jlc3MgICAgICovCi0jZGVmaW5lIEZMSURYX0RJU0NPTk5FQ1RJTkcJMwkvKiBkaXNjb25uZWN0IGluIHByb2dyZXNzICAgKi8KLSNkZWZpbmUgRkxJRFhfUkVTRVRUSU5HCQk0CS8qIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBGTElEWF9USU1FRF9PVVQJCTUJLyogU0NTSSBtaWRsYXllciB0aW1lZCBvdXQgICovCi0KLXN0cnVjdCBydHM1MXhfY2hpcDsKLQotc3RydWN0IHJ0czUxeF91c2IgewotCS8qIFRoZSBkZXZpY2Ugd2UncmUgd29ya2luZyB3aXRoCi0JICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZToKLQkgKiAgICAobykgeW91IG11c3QgaG9sZCBkZXZfbXV0ZXggdG8gY2hhbmdlIHB1c2JfZGV2Ci0JICovCi0Jc3RydWN0IG11dGV4IGRldl9tdXRleDsJLyogcHJvdGVjdCBwdXNiX2RldiAqLwotCXN0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldjsJLyogdGhpcyB1c2JfZGV2aWNlICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKnB1c2JfaW50ZjsJLyogdGhpcyBpbnRlcmZhY2UgKi8KLQotCXVuc2lnbmVkIGxvbmcgZGZsYWdzOwkvKiBkeW5hbWljIGF0b21pYyBiaXRmbGFncyAqLwotCi0JdW5zaWduZWQgaW50IHNlbmRfYnVsa19waXBlOwkvKiBjYWNoZWQgcGlwZSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBpbnQgcmVjdl9idWxrX3BpcGU7Ci0JdW5zaWduZWQgaW50IHNlbmRfY3RybF9waXBlOwotCXVuc2lnbmVkIGludCByZWN2X2N0cmxfcGlwZTsKLQl1bnNpZ25lZCBpbnQgcmVjdl9pbnRyX3BpcGU7Ci0KLQl1OCBpZm51bTsJCS8qIGludGVyZmFjZSBudW1iZXIgICAqLwotCXU4IGVwX2JJbnRlcnZhbDsJLyogaW50ZXJydXB0IGludGVydmFsICovCi0KLQkvKiBjb250cm9sIGFuZCBidWxrIGNvbW11bmljYXRpb25zIGRhdGEgKi8KLQlzdHJ1Y3QgdXJiICpjdXJyZW50X3VyYjsJLyogVVNCIHJlcXVlc3RzICAgICAgICAgKi8KLQlzdHJ1Y3QgdXJiICppbnRyX3VyYjsJLyogSW50ZXJydXB0IFVTQiByZXF1ZXN0ICovCi0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3I7CS8qIGNvbnRyb2wgcmVxdWVzdHMgICAgICovCi0Jc3RydWN0IHVzYl9zZ19yZXF1ZXN0IGN1cnJlbnRfc2c7CS8qIHNjYXR0ZXItZ2F0aGVyIHJlcS4gICovCi0JdW5zaWduZWQgY2hhciAqaW9idWY7CS8qIEkvTyBidWZmZXIgICAgICAgICAgICovCi0JZG1hX2FkZHJfdCBjcl9kbWE7CS8qIGJ1ZmZlciBETUEgYWRkcmVzc2VzICovCi0JZG1hX2FkZHJfdCBpb2J1Zl9kbWE7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpjdGxfdGhyZWFkOwkvKiB0aGUgY29udHJvbCB0aHJlYWQgICAqLwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcG9sbGluZ190aHJlYWQ7CS8qIHRoZSBwb2xsaW5nIHRocmVhZCAgICovCi0KLQkvKiBtdXR1YWwgZXhjbHVzaW9uIGFuZCBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAqLwotCXN0cnVjdCBjb21wbGV0aW9uIGNtbmRfcmVhZHk7CS8qIHRvIHNsZWVwIHRocmVhZCBvbiAgICAgICovCi0Jc3RydWN0IGNvbXBsZXRpb24gY29udHJvbF9leGl0OwkvKiBjb250cm9sIHRocmVhZCBleGl0ICAgICAqLwotCXN0cnVjdCBjb21wbGV0aW9uIHBvbGxpbmdfZXhpdDsJLyogcG9sbGluZyB0aHJlYWQgZXhpdCAgICAgKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiBub3RpZnk7CS8qIHRocmVhZCBiZWdpbi9lbmQgICAgICAgICovCi19OwotCi1leHRlcm4gc3RydWN0IHVzYl9kcml2ZXIgcnRzNTF4X2RyaXZlcjsKLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9jdXJyZW50X3RpbWUodTggKnRpbWV2YWxfYnVmLCBpbnQgYnVmX2xlbikKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQotCWlmICghdGltZXZhbF9idWYgfHwgKGJ1Zl9sZW4gPCA4KSkKLQkJcmV0dXJuOwotCi0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLQl0aW1ldmFsX2J1ZlswXSA9ICh1OCkgKHR2LnR2X3NlYyA+PiAyNCk7Ci0JdGltZXZhbF9idWZbMV0gPSAodTgpICh0di50dl9zZWMgPj4gMTYpOwotCXRpbWV2YWxfYnVmWzJdID0gKHU4KSAodHYudHZfc2VjID4+IDgpOwotCXRpbWV2YWxfYnVmWzNdID0gKHU4KSAodHYudHZfc2VjKTsKLQl0aW1ldmFsX2J1Zls0XSA9ICh1OCkgKHR2LnR2X3VzZWMgPj4gMjQpOwotCXRpbWV2YWxfYnVmWzVdID0gKHU4KSAodHYudHZfdXNlYyA+PiAxNik7Ci0JdGltZXZhbF9idWZbNl0gPSAodTgpICh0di50dl91c2VjID4+IDgpOwotCXRpbWV2YWxfYnVmWzddID0gKHU4KSAodHYudHZfdXNlYyk7Ci19Ci0KLSNkZWZpbmUgU05EX0NUUkxfUElQRShjaGlwKQkoKGNoaXApLT51c2ItPnNlbmRfY3RybF9waXBlKQotI2RlZmluZSBSQ1ZfQ1RSTF9QSVBFKGNoaXApCSgoY2hpcCktPnVzYi0+cmVjdl9jdHJsX3BpcGUpCi0jZGVmaW5lIFNORF9CVUxLX1BJUEUoY2hpcCkJKChjaGlwKS0+dXNiLT5zZW5kX2J1bGtfcGlwZSkKLSNkZWZpbmUgUkNWX0JVTEtfUElQRShjaGlwKQkoKGNoaXApLT51c2ItPnJlY3ZfYnVsa19waXBlKQotI2RlZmluZSBSQ1ZfSU5UUl9QSVBFKGNoaXApCSgoY2hpcCktPnVzYi0+cmVjdl9pbnRyX3BpcGUpCi0KLS8qIFRoZSBzY3NpX2xvY2soKSBhbmQgc2NzaV91bmxvY2soKSBtYWNyb3MgcHJvdGVjdCB0aGUgc21fc3RhdGUgYW5kIHRoZQotICogc2luZ2xlIHF1ZXVlIGVsZW1lbnQgc3JiIGZvciB3cml0ZSBhY2Nlc3MgKi8KLSNkZWZpbmUgc2NzaV91bmxvY2soaG9zdCkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jaykKLSNkZWZpbmUgc2NzaV9sb2NrKGhvc3QpCQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jaykKLQotI2RlZmluZSBHRVRfUE1fVVNBR0VfQ05UKGNoaXApCVwKLQlhdG9taWNfcmVhZCgmKChjaGlwKS0+dXNiLT5wdXNiX2ludGYtPnBtX3VzYWdlX2NudCkpCi0jZGVmaW5lIFNFVF9QTV9VU0FHRV9DTlQoY2hpcCwgY250KQlcCi0JYXRvbWljX3NldCgmKChjaGlwKS0+dXNiLT5wdXNiX2ludGYtPnBtX3VzYWdlX2NudCksIChjbnQpKQotCi0vKiBDb21wYXRpYmxlIG1hY3JvcyB3aGlsZSB3ZSBzd2l0Y2ggb3ZlciAqLwotc3RhdGljIGlubGluZSB2b2lkICp1c2JfYnVmZmVyX2FsbG9jKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgZ2ZwX3QgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpkbWEpCi17Ci0JcmV0dXJuIHVzYl9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIG1lbV9mbGFncywgZG1hKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzYl9idWZmZXJfZnJlZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICB2b2lkICphZGRyLCBkbWFfYWRkcl90IGRtYSkKLXsKLQlyZXR1cm4gdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBhZGRyLCBkbWEpOwotfQotCi0vKiBDb252ZXJ0IGJldHdlZW4gdXNfZGF0YSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgU2NzaV9Ib3N0ICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBTY3NpX0hvc3QgKnJ0czUxeF90b19ob3N0KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopY2hpcCwgc3RydWN0IFNjc2lfSG9zdCwgaG9zdGRhdGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydHM1MXhfY2hpcCAqaG9zdF90b19ydHM1MXgoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlyZXR1cm4gKHN0cnVjdCBydHM1MXhfY2hpcCAqKShob3N0LT5ob3N0ZGF0YSk7Ci19Ci0KLS8qIHN0cnVjdCBzY3NpX2NtbmQgdHJhbnNmZXIgYnVmZmVyIGFjY2VzcyB1dGlsaXRpZXMgKi8KLWVudW0geGZlcl9idWZfZGlyIHsgVE9fWEZFUl9CVUYsIEZST01fWEZFUl9CVUYgfTsKLQotLyogR2VuZXJhbCByb3V0aW5lcyBwcm92aWRlZCBieSB0aGUgdXNiLXN0b3JhZ2Ugc3RhbmRhcmQgY29yZSAqLwotI2lmZGVmIENPTkZJR19QTQotdm9pZCBydHM1MXhfdHJ5X3RvX2V4aXRfc3Moc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKLWludCBydHM1MXhfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7Ci1pbnQgcnRzNTF4X3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOwotI2Vsc2UKLSNkZWZpbmUgcnRzNTF4X3N1c3BlbmQJCU5VTEwKLSNkZWZpbmUgcnRzNTF4X3Jlc3VtZQkJTlVMTAotI2RlZmluZSBydHM1MXhfcmVzZXRfcmVzdW1lCU5VTEwKLSNlbmRpZgotCi1leHRlcm4gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBydHM1MXhfaG9zdF90ZW1wbGF0ZTsKLQotI2VuZGlmIC8qIF9fUlRTNTFYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9jYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfY2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzQ1NmQ5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9jYXJkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDAgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQotI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicnRzNTF4LmgiCi0jaW5jbHVkZSAicnRzNTF4X2NoaXAuaCIKLSNpbmNsdWRlICJydHM1MXhfY2FyZC5oIgotI2luY2x1ZGUgInJ0czUxeF90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJ4ZC5oIgotI2luY2x1ZGUgInNkLmgiCi0jaW5jbHVkZSAibXMuaCIKLQotdm9pZCBydHM1MXhfZG9fcmVtYWluaW5nX3dvcmsoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCi0JaWYgKGNoaXAtPmNhcmRfcmVhZHkgJiBTRF9DQVJEKSB7Ci0JCWlmIChzZF9jYXJkLT5zZXFfbW9kZSkgewotCQkJUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfUlVOKTsKLQkJCXNkX2NhcmQtPmNvdW50ZXIrKzsKLQkJfSBlbHNlIHsKLQkJCXNkX2NhcmQtPmNvdW50ZXIgPSAwOwotCQl9Ci0JfQotCi0JaWYgKGNoaXAtPmNhcmRfcmVhZHkgJiBYRF9DQVJEKSB7Ci0JCWlmICh4ZF9jYXJkLT5kZWxheV93cml0ZS5kZWxheV93cml0ZV9mbGFnKSB7Ci0JCQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCQkJeGRfY2FyZC0+Y291bnRlcisrOwotCQl9IGVsc2UgewotCQkJeGRfY2FyZC0+Y291bnRlciA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hpcC0+Y2FyZF9yZWFkeSAmIE1TX0NBUkQpIHsKLQkJaWYgKENIS19NU1BSTyhtc19jYXJkKSkgewotCQkJaWYgKG1zX2NhcmQtPnNlcV9tb2RlKSB7Ci0JCQkJUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfUlVOKTsKLQkJCQltc19jYXJkLT5jb3VudGVyKys7Ci0JCQl9IGVsc2UgewotCQkJCW1zX2NhcmQtPmNvdW50ZXIgPSAwOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG1zX2NhcmQtPmRlbGF5X3dyaXRlLmRlbGF5X3dyaXRlX2ZsYWcpIHsKLQkJCQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCQkJCW1zX2NhcmQtPmNvdW50ZXIrKzsKLQkJCX0gZWxzZSB7Ci0JCQkJbXNfY2FyZC0+Y291bnRlciA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoc2RfY2FyZC0+Y291bnRlciA+IFBPTExJTkdfV0FJVF9DTlQpCi0JCXJ0czUxeF9zZF9jbGVhbnVwX3dvcmsoY2hpcCk7Ci0KLQlpZiAoeGRfY2FyZC0+Y291bnRlciA+IFBPTExJTkdfV0FJVF9DTlQpCi0JCXJ0czUxeF94ZF9jbGVhbnVwX3dvcmsoY2hpcCk7Ci0KLQlpZiAobXNfY2FyZC0+Y291bnRlciA+IFBPTExJTkdfV0FJVF9DTlQpCi0JCXJ0czUxeF9tc19jbGVhbnVwX3dvcmsoY2hpcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3J0czUxeF9yZXNldF94ZF9jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKGNoaXAtPmNhcmQybHVuW1hEX0NBUkRdID49IE1BWF9BTExPV0VEX0xVTl9DTlQpCi0JCXJldHVybjsKLQotCXJldHZhbCA9IHJ0czUxeF9yZXNldF94ZF9jYXJkKGNoaXApOwotCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJY2hpcC0+Y2FyZF9yZWFkeSB8PSBYRF9DQVJEOwotCQljaGlwLT5jYXJkX2ZhaWwgJj0gflhEX0NBUkQ7Ci0JCWNoaXAtPnJ3X2NhcmRbY2hpcC0+Y2FyZDJsdW5bWERfQ0FSRF1dID0gcnRzNTF4X3hkX3J3OwotCX0gZWxzZSB7Ci0JCWNoaXAtPmNhcmRfcmVhZHkgJj0gflhEX0NBUkQ7Ci0JCWNoaXAtPmNhcmRfZmFpbCB8PSBYRF9DQVJEOwotCQljaGlwLT5jYXBhY2l0eVtjaGlwLT5jYXJkMmx1bltYRF9DQVJEXV0gPSAwOwotCQljaGlwLT5yd19jYXJkW2NoaXAtPmNhcmQybHVuW1hEX0NBUkRdXSA9IE5VTEw7Ci0KLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX09FLCBYRF9PVVRQVVRfRU4sIDApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BXUl9DVEwsIFBPV0VSX01BU0ssCi0JCQkgICAgICAgUE9XRVJfT0ZGKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9DTEtfRU4sIFhEX0NMS19FTiwgMCk7Ci0JCXJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JfQotfQotCi12b2lkIHJ0czUxeF9kb19ydHM1MXhfcmVzZXRfc2RfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQotCWlmIChjaGlwLT5jYXJkMmx1bltTRF9DQVJEXSA+PSBNQVhfQUxMT1dFRF9MVU5fQ05UKQotCQlyZXR1cm47Ci0KLQlyZXR2YWwgPSBydHM1MXhfcmVzZXRfc2RfY2FyZChjaGlwKTsKLQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWNoaXAtPmNhcmRfcmVhZHkgfD0gU0RfQ0FSRDsKLQkJY2hpcC0+Y2FyZF9mYWlsICY9IH5TRF9DQVJEOwotCQljaGlwLT5yd19jYXJkW2NoaXAtPmNhcmQybHVuW1NEX0NBUkRdXSA9IHJ0czUxeF9zZF9ydzsKLQl9IGVsc2UgewotCQljaGlwLT5jYXJkX3JlYWR5ICY9IH5TRF9DQVJEOwotCQljaGlwLT5jYXJkX2ZhaWwgfD0gU0RfQ0FSRDsKLQkJY2hpcC0+Y2FwYWNpdHlbY2hpcC0+Y2FyZDJsdW5bU0RfQ0FSRF1dID0gMDsKLQkJY2hpcC0+cndfY2FyZFtjaGlwLT5jYXJkMmx1bltTRF9DQVJEXV0gPSBOVUxMOwotCi0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9PRSwgU0RfT1VUUFVUX0VOLCAwKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QV1JfQ1RMLCBQT1dFUl9NQVNLLAotCQkJICAgICAgIFBPV0VSX09GRik7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfQ0xLX0VOLCBTRF9DTEtfRU4sIDApOwotCQlydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZG9fcnRzNTF4X3Jlc2V0X21zX2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0KLQlpZiAoY2hpcC0+Y2FyZDJsdW5bTVNfQ0FSRF0gPj0gTUFYX0FMTE9XRURfTFVOX0NOVCkKLQkJcmV0dXJuOwotCi0JcmV0dmFsID0gcnRzNTF4X3Jlc2V0X21zX2NhcmQoY2hpcCk7Ci0JaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQljaGlwLT5jYXJkX3JlYWR5IHw9IE1TX0NBUkQ7Ci0JCWNoaXAtPmNhcmRfZmFpbCAmPSB+TVNfQ0FSRDsKLQkJY2hpcC0+cndfY2FyZFtjaGlwLT5jYXJkMmx1bltNU19DQVJEXV0gPSBydHM1MXhfbXNfcnc7Ci0JfSBlbHNlIHsKLQkJY2hpcC0+Y2FyZF9yZWFkeSAmPSB+TVNfQ0FSRDsKLQkJY2hpcC0+Y2FyZF9mYWlsIHw9IE1TX0NBUkQ7Ci0JCWNoaXAtPmNhcGFjaXR5W2NoaXAtPmNhcmQybHVuW01TX0NBUkRdXSA9IDA7Ci0JCWNoaXAtPnJ3X2NhcmRbY2hpcC0+Y2FyZDJsdW5bTVNfQ0FSRF1dID0gTlVMTDsKLQotCQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfT0UsIE1TX09VVFBVVF9FTiwgMCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFdSX0NUTCwgUE9XRVJfTUFTSywKLQkJCSAgICAgICBQT1dFUl9PRkYpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0NMS19FTiwgTVNfQ0xLX0VOLCAwKTsKLQkJcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMTAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGNhcmRfY2RfZGVib3VuY2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCAqbmVlZF9yZXNldCwKLQkJICAgICAgdTggKm5lZWRfcmVsZWFzZSkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IHJlbGVhc2VfbWFwID0gMCwgcmVzZXRfbWFwID0gMDsKLQl1OCB2YWx1ZTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfY2FyZF9zdGF0dXMoY2hpcCwgJihjaGlwLT5jYXJkX3N0YXR1cykpOwotI2lmZGVmIFNVUFBPUlRfT0NQCi0JY2hpcC0+b2NwX3N0YXQgPSAoY2hpcC0+Y2FyZF9zdGF0dXMgPj4gNCkgJiAweDAzOwotI2VuZGlmCi0KLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlnb3RvIEV4aXRfRGVib3VuY2U7Ci0KLQlpZiAoY2hpcC0+Y2FyZF9leGlzdCkgewotCQlyZXR2YWwgPSBydHM1MXhfcmVhZF9yZWdpc3RlcihjaGlwLCBDQVJEX0lOVF9QRU5ELCAmdmFsdWUpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0ZJRk9fQ1RMLCBGSUZPX0ZMVVNILAotCQkJCQkJICBGSUZPX0ZMVVNIKTsKLQkJCXJ0czUxeF9lcDBfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU0ZTTV9FRCwgMHhmOCwgMHhmOCk7Ci0JCQl2YWx1ZSA9IDA7Ci0JCX0KLQotCQlpZiAoY2hpcC0+Y2FyZF9leGlzdCAmIFhEX0NBUkQpIHsKLQkJCWlmICghKGNoaXAtPmNhcmRfc3RhdHVzICYgWERfQ0QpKQotCQkJCXJlbGVhc2VfbWFwIHw9IFhEX0NBUkQ7Ci0JCX0gZWxzZSBpZiAoY2hpcC0+Y2FyZF9leGlzdCAmIFNEX0NBUkQpIHsKLQkJCS8qIGlmICghKGNoaXAtPmNhcmRfc3RhdHVzICYgU0RfQ0QpKSB7ICovCi0JCQlpZiAoIShjaGlwLT5jYXJkX3N0YXR1cyAmIFNEX0NEKSB8fCAodmFsdWUgJiBTRF9JTlQpKQotCQkJCXJlbGVhc2VfbWFwIHw9IFNEX0NBUkQ7Ci0JCX0gZWxzZSBpZiAoY2hpcC0+Y2FyZF9leGlzdCAmIE1TX0NBUkQpIHsKLQkJCS8qIGlmICghKGNoaXAtPmNhcmRfc3RhdHVzICYgTVNfQ0QpKSB7ICovCi0JCQlpZiAoIShjaGlwLT5jYXJkX3N0YXR1cyAmIE1TX0NEKSB8fCAodmFsdWUgJiBNU19JTlQpKQotCQkJCXJlbGVhc2VfbWFwIHw9IE1TX0NBUkQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoY2hpcC0+Y2FyZF9zdGF0dXMgJiBYRF9DRCkKLQkJCXJlc2V0X21hcCB8PSBYRF9DQVJEOwotCQllbHNlIGlmIChjaGlwLT5jYXJkX3N0YXR1cyAmIFNEX0NEKQotCQkJcmVzZXRfbWFwIHw9IFNEX0NBUkQ7Ci0JCWVsc2UgaWYgKGNoaXAtPmNhcmRfc3RhdHVzICYgTVNfQ0QpCi0JCQlyZXNldF9tYXAgfD0gTVNfQ0FSRDsKLQl9Ci0KLQlpZiAoQ0hFQ0tfUEtHKGNoaXAsIFFGTjI0KSAmJiByZXNldF9tYXApIHsKLQkJaWYgKGNoaXAtPmNhcmRfZXhpc3QgJiBYRF9DQVJEKSB7Ci0JCQlyZXNldF9tYXAgPSAwOwotCQkJZ290byBFeGl0X0RlYm91bmNlOwotCQl9Ci0JfQotCi0JaWYgKHJlc2V0X21hcCkgewotCQlpbnQgeGRfY250ID0gMCwgc2RfY250ID0gMCwgbXNfY250ID0gMDsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IChjaGlwLT5vcHRpb24uZGVib3VuY2VfbnVtKTsgaSsrKSB7Ci0JCQlyZXR2YWwgPQotCQkJICAgIHJ0czUxeF9nZXRfY2FyZF9zdGF0dXMoY2hpcCwgJihjaGlwLT5jYXJkX3N0YXR1cykpOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCXJlc2V0X21hcCA9IHJlbGVhc2VfbWFwID0gMDsKLQkJCQlnb3RvIEV4aXRfRGVib3VuY2U7Ci0JCQl9Ci0JCQlpZiAoY2hpcC0+Y2FyZF9zdGF0dXMgJiBYRF9DRCkKLQkJCQl4ZF9jbnQrKzsKLQkJCWVsc2UKLQkJCQl4ZF9jbnQgPSAwOwotCQkJaWYgKGNoaXAtPmNhcmRfc3RhdHVzICYgU0RfQ0QpCi0JCQkJc2RfY250Kys7Ci0JCQllbHNlCi0JCQkJc2RfY250ID0gMDsKLQkJCWlmIChjaGlwLT5jYXJkX3N0YXR1cyAmIE1TX0NEKQotCQkJCW1zX2NudCsrOwotCQkJZWxzZQotCQkJCW1zX2NudCA9IDA7Ci0JCQl3YWl0X3RpbWVvdXQoMzApOwotCQl9Ci0KLQkJcmVzZXRfbWFwID0gMDsKLQkJaWYgKCEoY2hpcC0+Y2FyZF9leGlzdCAmIFhEX0NBUkQpCi0JCSAgICAmJiAoeGRfY250ID4gKGNoaXAtPm9wdGlvbi5kZWJvdW5jZV9udW0gLSAxKSkpIHsKLQkJCXJlc2V0X21hcCB8PSBYRF9DQVJEOwotCQl9Ci0JCWlmICghKGNoaXAtPmNhcmRfZXhpc3QgJiBTRF9DQVJEKQotCQkgICAgJiYgKHNkX2NudCA+IChjaGlwLT5vcHRpb24uZGVib3VuY2VfbnVtIC0gMSkpKSB7Ci0JCQlyZXNldF9tYXAgfD0gU0RfQ0FSRDsKLQkJfQotCQlpZiAoIShjaGlwLT5jYXJkX2V4aXN0ICYgTVNfQ0FSRCkKLQkJICAgICYmIChtc19jbnQgPiAoY2hpcC0+b3B0aW9uLmRlYm91bmNlX251bSAtIDEpKSkgewotCQkJcmVzZXRfbWFwIHw9IE1TX0NBUkQ7Ci0JCX0KLQl9Ci0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfSU5UX1BFTkQsIFhEX0lOVCB8IE1TX0lOVCB8IFNEX0lOVCwKLQkJCSAgICAgIFhEX0lOVCB8IE1TX0lOVCB8IFNEX0lOVCk7Ci0KLUV4aXRfRGVib3VuY2U6Ci0JaWYgKG5lZWRfcmVzZXQpCi0JCSpuZWVkX3Jlc2V0ID0gcmVzZXRfbWFwOwotCWlmIChuZWVkX3JlbGVhc2UpCi0JCSpuZWVkX3JlbGVhc2UgPSByZWxlYXNlX21hcDsKLX0KLQotdm9pZCBydHM1MXhfaW5pdF9jYXJkcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JdTggbmVlZF9yZXNldCA9IDAsIG5lZWRfcmVsZWFzZSA9IDA7Ci0KLQljYXJkX2NkX2RlYm91bmNlKGNoaXAsICZuZWVkX3Jlc2V0LCAmbmVlZF9yZWxlYXNlKTsKLQotCWlmIChuZWVkX3JlbGVhc2UpIHsKLQkJUlRTNTFYX0RFQlVHUCgibmVlZF9yZWxlYXNlID0gMHgleFxuIiwgbmVlZF9yZWxlYXNlKTsKLQotCQlydHM1MXhfcHJlcGFyZV9ydW4oY2hpcCk7Ci0JCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLSNpZmRlZiBTVVBQT1JUX09DUAotCQlpZiAoY2hpcC0+b2NwX3N0YXQgJiAoTVNfT0NQX05PVyB8IE1TX09DUF9FVkVSKSkgewotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE9DUENUTCwgTVNfT0NQX0NMRUFSLAotCQkJCQkgICAgICBNU19PQ1BfQ0xFQVIpOwotCQkJY2hpcC0+b2NwX3N0YXQgPSAwOwotCQkJUlRTNTFYX0RFQlVHUCgiQ2xlYXIgT0NQIHN0YXR1cy5cbiIpOwotCQl9Ci0jZW5kaWYKLQotCQlpZiAobmVlZF9yZWxlYXNlICYgWERfQ0FSRCkgewotCQkJY2hpcC0+Y2FyZF9leGlzdCAmPSB+WERfQ0FSRDsKLQkJCWNoaXAtPmNhcmRfZWplY3RlZCA9IDA7Ci0JCQlpZiAoY2hpcC0+Y2FyZF9yZWFkeSAmIFhEX0NBUkQpIHsKLQkJCQlydHM1MXhfcmVsZWFzZV94ZF9jYXJkKGNoaXApOwotCQkJCWNoaXAtPnJ3X2NhcmRbY2hpcC0+Y2FyZDJsdW5bWERfQ0FSRF1dID0gTlVMTDsKLQkJCQljbGVhcl9iaXQoY2hpcC0+Y2FyZDJsdW5bWERfQ0FSRF0sCi0JCQkJCSAgJihjaGlwLT5sdW5fbWMpKTsKLQkJCX0KLQkJfQotCi0JCWlmIChuZWVkX3JlbGVhc2UgJiBTRF9DQVJEKSB7Ci0JCQljaGlwLT5jYXJkX2V4aXN0ICY9IH5TRF9DQVJEOwotCQkJY2hpcC0+Y2FyZF9lamVjdGVkID0gMDsKLQkJCWlmIChjaGlwLT5jYXJkX3JlYWR5ICYgU0RfQ0FSRCkgewotCQkJCXJ0czUxeF9yZWxlYXNlX3NkX2NhcmQoY2hpcCk7Ci0JCQkJY2hpcC0+cndfY2FyZFtjaGlwLT5jYXJkMmx1bltTRF9DQVJEXV0gPSBOVUxMOwotCQkJCWNsZWFyX2JpdChjaGlwLT5jYXJkMmx1bltTRF9DQVJEXSwKLQkJCQkJICAmKGNoaXAtPmx1bl9tYykpOwotCQkJfQotCQl9Ci0KLQkJaWYgKG5lZWRfcmVsZWFzZSAmIE1TX0NBUkQpIHsKLQkJCWNoaXAtPmNhcmRfZXhpc3QgJj0gfk1TX0NBUkQ7Ci0JCQljaGlwLT5jYXJkX2VqZWN0ZWQgPSAwOwotCQkJaWYgKGNoaXAtPmNhcmRfcmVhZHkgJiBNU19DQVJEKSB7Ci0JCQkJcnRzNTF4X3JlbGVhc2VfbXNfY2FyZChjaGlwKTsKLQkJCQljaGlwLT5yd19jYXJkW2NoaXAtPmNhcmQybHVuW01TX0NBUkRdXSA9IE5VTEw7Ci0JCQkJY2xlYXJfYml0KGNoaXAtPmNhcmQybHVuW01TX0NBUkRdLAotCQkJCQkgICYoY2hpcC0+bHVuX21jKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAobmVlZF9yZXNldCAmJiAhY2hpcC0+Y2FyZF9yZWFkeSkgewotCQlSVFM1MVhfREVCVUdQKCJuZWVkX3Jlc2V0ID0gMHgleFxuIiwgbmVlZF9yZXNldCk7Ci0KLQkJcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCi0JCWlmIChuZWVkX3Jlc2V0ICYgWERfQ0FSRCkgewotCQkJY2hpcC0+Y2FyZF9leGlzdCB8PSBYRF9DQVJEOwotCQkJZG9fcnRzNTF4X3Jlc2V0X3hkX2NhcmQoY2hpcCk7Ci0JCX0gZWxzZSBpZiAobmVlZF9yZXNldCAmIFNEX0NBUkQpIHsKLQkJCWNoaXAtPmNhcmRfZXhpc3QgfD0gU0RfQ0FSRDsKLQkJCXJ0czUxeF9kb19ydHM1MXhfcmVzZXRfc2RfY2FyZChjaGlwKTsKLQkJfSBlbHNlIGlmIChuZWVkX3Jlc2V0ICYgTVNfQ0FSRCkgewotCQkJY2hpcC0+Y2FyZF9leGlzdCB8PSBNU19DQVJEOwotCQkJZG9fcnRzNTF4X3Jlc2V0X21zX2NhcmQoY2hpcCk7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgcnRzNTF4X3JlbGVhc2VfY2FyZHMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWlmIChjaGlwLT5jYXJkX3JlYWR5ICYgU0RfQ0FSRCkgewotCQlydHM1MXhfc2RfY2xlYW51cF93b3JrKGNoaXApOwotCQlydHM1MXhfcmVsZWFzZV9zZF9jYXJkKGNoaXApOwotCQljaGlwLT5jYXJkX3JlYWR5ICY9IH5TRF9DQVJEOwotCX0KLQotCWlmIChjaGlwLT5jYXJkX3JlYWR5ICYgWERfQ0FSRCkgewotCQlydHM1MXhfeGRfY2xlYW51cF93b3JrKGNoaXApOwotCQlydHM1MXhfcmVsZWFzZV94ZF9jYXJkKGNoaXApOwotCQljaGlwLT5jYXJkX3JlYWR5ICY9IH5YRF9DQVJEOwotCX0KLQotCWlmIChjaGlwLT5jYXJkX3JlYWR5ICYgTVNfQ0FSRCkgewotCQlydHM1MXhfbXNfY2xlYW51cF93b3JrKGNoaXApOwotCQlydHM1MXhfcmVsZWFzZV9tc19jYXJkKGNoaXApOwotCQljaGlwLT5jYXJkX3JlYWR5ICY9IH5NU19DQVJEOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB1OCBkb3VibGVfZGVwdGgodTggZGVwdGgpCi17Ci0JcmV0dXJuIChkZXB0aCA+IDEpID8gKGRlcHRoIC0gMSkgOiBkZXB0aDsKLX0KLQotaW50IHJ0czUxeF9zd2l0Y2hfc3NjX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IGNsaykKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggTiA9ICh1OCkgKGNsayAtIDIpLCBtaW5fTiwgbWF4X047Ci0JdTggbWN1X2NudCwgZGl2LCBtYXhfZGl2LCBzc2NfZGVwdGg7Ci0JaW50IHNkX3ZwY2xrX3BoYXNlX3Jlc2V0ID0gMDsKLQotCWlmIChjaGlwLT5jdXJfY2xrID09IGNsaykKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCi0JbWluX04gPSA2MDsKLQltYXhfTiA9IDEyMDsKLQltYXhfZGl2ID0gQ0xLX0RJVl80OwotCi0JUlRTNTFYX0RFQlVHUCgiU3dpdGNoIFNTQyBjbG9jayB0byAlZE1IelxuIiwgY2xrKTsKLQotCWlmICgoY2xrIDw9IDIpIHx8IChOID4gbWF4X04pKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JbWN1X2NudCA9ICh1OCkgKDYwIC8gY2xrICsgMyk7Ci0JaWYgKG1jdV9jbnQgPiAxNSkKLQkJbWN1X2NudCA9IDE1OwotCS8qIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBTU0MgY2xvY2sgZGl2X24gaXMKLQkgKiBlcXVhbCBvciBncmVhdGVyIHRoYW4gbWluX04gKi8KLQlkaXYgPSBDTEtfRElWXzE7Ci0Jd2hpbGUgKChOIDwgbWluX04pICYmIChkaXYgPCBtYXhfZGl2KSkgewotCQlOID0gKE4gKyAyKSAqIDIgLSAyOwotCQlkaXYrKzsKLQl9Ci0JUlRTNTFYX0RFQlVHUCgiTiA9ICVkLCBkaXYgPSAlZFxuIiwgTiwgZGl2KTsKLQotCWlmIChjaGlwLT5vcHRpb24uc3NjX2VuKSB7Ci0JCWlmIChjaGlwLT5jdXJfY2FyZCA9PSBTRF9DQVJEKSB7Ci0JCQlpZiAoQ0hLX1NEX1NEUjEwNChzZF9jYXJkKSkgewotCQkJCXNzY19kZXB0aCA9IGNoaXAtPm9wdGlvbi5zc2NfZGVwdGhfc2Rfc2RyMTA0OwotCQkJfSBlbHNlIGlmIChDSEtfU0RfU0RSNTAoc2RfY2FyZCkpIHsKLQkJCQlzc2NfZGVwdGggPSBjaGlwLT5vcHRpb24uc3NjX2RlcHRoX3NkX3NkcjUwOwotCQkJfSBlbHNlIGlmIChDSEtfU0RfRERSNTAoc2RfY2FyZCkpIHsKLQkJCQlzc2NfZGVwdGggPQotCQkJCSAgICBkb3VibGVfZGVwdGgoY2hpcC0+b3B0aW9uLgotCQkJCQkJIHNzY19kZXB0aF9zZF9kZHI1MCk7Ci0JCQl9IGVsc2UgaWYgKENIS19TRF9IUyhzZF9jYXJkKSkgewotCQkJCXNzY19kZXB0aCA9Ci0JCQkJICAgIGRvdWJsZV9kZXB0aChjaGlwLT5vcHRpb24uc3NjX2RlcHRoX3NkX2hzKTsKLQkJCX0gZWxzZSBpZiAoQ0hLX01NQ181Mk0oc2RfY2FyZCkKLQkJCQkgICB8fCBDSEtfTU1DX0REUjUyKHNkX2NhcmQpKSB7Ci0JCQkJc3NjX2RlcHRoID0KLQkJCQkgICAgZG91YmxlX2RlcHRoKGNoaXAtPm9wdGlvbi4KLQkJCQkJCSBzc2NfZGVwdGhfbW1jXzUybSk7Ci0JCQl9IGVsc2UgewotCQkJCXNzY19kZXB0aCA9Ci0JCQkJICAgIGRvdWJsZV9kZXB0aChjaGlwLT5vcHRpb24uCi0JCQkJCQkgc3NjX2RlcHRoX2xvd19zcGVlZCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoY2hpcC0+Y3VyX2NhcmQgPT0gTVNfQ0FSRCkgewotCQkJaWYgKENIS19NU1BSTyhtc19jYXJkKSkgewotCQkJCWlmIChDSEtfSEc4QklUKG1zX2NhcmQpKSB7Ci0JCQkJCXNzY19kZXB0aCA9Ci0JCQkJCSAgICBkb3VibGVfZGVwdGgoY2hpcC0+b3B0aW9uLgotCQkJCQkJCSBzc2NfZGVwdGhfbXNfaGcpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNzY19kZXB0aCA9Ci0JCQkJCSAgICBkb3VibGVfZGVwdGgoY2hpcC0+b3B0aW9uLgotCQkJCQkJCSBzc2NfZGVwdGhfbXNfNGJpdCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoQ0hLX01TNEJJVChtc19jYXJkKSkgewotCQkJCQlzc2NfZGVwdGggPQotCQkJCQkgICAgZG91YmxlX2RlcHRoKGNoaXAtPm9wdGlvbi4KLQkJCQkJCQkgc3NjX2RlcHRoX21zXzRiaXQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNzY19kZXB0aCA9Ci0JCQkJCSAgICBkb3VibGVfZGVwdGgoY2hpcC0+b3B0aW9uLgotCQkJCQkJCSBzc2NfZGVwdGhfbG93X3NwZWVkKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzc2NfZGVwdGggPQotCQkJICAgIGRvdWJsZV9kZXB0aChjaGlwLT5vcHRpb24uc3NjX2RlcHRoX2xvd19zcGVlZCk7Ci0JCX0KLQotCQlpZiAoc3NjX2RlcHRoKSB7Ci0JCQlpZiAoZGl2ID09IENMS19ESVZfMikgewotCQkJCS8qIElmIGNsb2NrIGRpdmlkZWQgYnkgMiwgc3NjIGRlcHRoIG11c3QKLQkJCQkgKiBiZSBtdWx0aXBsaWVkIGJ5IDIgKi8KLQkJCQlpZiAoc3NjX2RlcHRoID4gMSkKLQkJCQkJc3NjX2RlcHRoIC09IDE7Ci0JCQkJZWxzZQotCQkJCQlzc2NfZGVwdGggPSBTU0NfREVQVEhfMk07Ci0JCQl9IGVsc2UgaWYgKGRpdiA9PSBDTEtfRElWXzQpIHsKLQkJCQkvKiBJZiBjbG9jayBkaXZpZGVkIGJ5IDQsIHNzYyBkZXB0aCBtdXN0Ci0JCQkJICogYmUgbXVsdGlwbGllZCBieSA0ICovCi0JCQkJaWYgKHNzY19kZXB0aCA+IDIpCi0JCQkJCXNzY19kZXB0aCAtPSAyOwotCQkJCWVsc2UKLQkJCQkJc3NjX2RlcHRoID0gU1NDX0RFUFRIXzJNOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBTU0MgKi8KLQkJc3NjX2RlcHRoID0gMDsKLQl9Ci0KLQlSVFM1MVhfREVCVUdQKCJzc2NfZGVwdGggPSAlZFxuIiwgc3NjX2RlcHRoKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDTEtfRElWLCBDTEtfQ0hBTkdFLCBDTEtfQ0hBTkdFKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDTEtfRElWLCAweDNGLAotCQkgICAgICAgKGRpdiA8PCA0KSB8IG1jdV9jbnQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNTQ19DVEwxLCBTU0NfUlNUQiwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU1NDX0NUTDIsIFNTQ19ERVBUSF9NQVNLLAotCQkgICAgICAgc3NjX2RlcHRoKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTU0NfRElWX05fMCwgMHhGRiwgTik7Ci0JaWYgKHNkX3ZwY2xrX3BoYXNlX3Jlc2V0KSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1ZQQ0xLMF9DVEwsCi0JCQkgICAgICAgUEhBU0VfTk9UX1JFU0VULCAwKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfVlBDTEswX0NUTCwKLQkJCSAgICAgICBQSEFTRV9OT1RfUkVTRVQsIFBIQVNFX05PVF9SRVNFVCk7Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMjAwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JaWYgKGNoaXAtPm9wdGlvbi5zc2NfZW4gJiYgc3NjX2RlcHRoKQotCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU1NDX0NUTDEsIDB4ZmYsIDB4RDApOwotCWVsc2UKLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNTQ19DVEwxLCAweGZmLCAweDUwKTsKLQl1ZGVsYXkoMTAwKTsKLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENMS19ESVYsIENMS19DSEFOR0UsIDApOwotCi0JY2hpcC0+Y3VyX2NsayA9IGNsazsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9zd2l0Y2hfbm9ybWFsX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IGNsaykKLXsKLQlpbnQgcmV0dmFsOwotCXU4IHNlbCwgZGl2LCBtY3VfY250OwotCWludCBzZF92cGNsa19waGFzZV9yZXNldCA9IDA7Ci0KLQlpZiAoY2hpcC0+Y3VyX2NsayA9PSBjbGspCi0JCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQotCWlmIChjaGlwLT5jdXJfY2FyZCA9PSBTRF9DQVJEKSB7Ci0JCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQkJaWYgKENIS19TRDMwX1NQRUVEKHNkX2NhcmQpIHx8IENIS19NTUNfRERSNTIoc2RfY2FyZCkpCi0JCQlzZF92cGNsa19waGFzZV9yZXNldCA9IDE7Ci0JfQotCi0Jc3dpdGNoIChjbGspIHsKLQljYXNlIENMS18yMDoKLQkJUlRTNTFYX0RFQlVHUCgiU3dpdGNoIGNsb2NrIHRvIDIwTUh6XG4iKTsKLQkJc2VsID0gU1NDXzgwOwotCQlkaXYgPSBDTEtfRElWXzQ7Ci0JCW1jdV9jbnQgPSA1OwotCQlicmVhazsKLQotCWNhc2UgQ0xLXzMwOgotCQlSVFM1MVhfREVCVUdQKCJTd2l0Y2ggY2xvY2sgdG8gMzBNSHpcbiIpOwotCQlzZWwgPSBTU0NfNjA7Ci0JCWRpdiA9IENMS19ESVZfMjsKLQkJbWN1X2NudCA9IDQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTEtfNDA6Ci0JCVJUUzUxWF9ERUJVR1AoIlN3aXRjaCBjbG9jayB0byA0ME1IelxuIik7Ci0JCXNlbCA9IFNTQ184MDsKLQkJZGl2ID0gQ0xLX0RJVl8yOwotCQltY3VfY250ID0gMzsKLQkJYnJlYWs7Ci0KLQljYXNlIENMS181MDoKLQkJUlRTNTFYX0RFQlVHUCgiU3dpdGNoIGNsb2NrIHRvIDUwTUh6XG4iKTsKLQkJc2VsID0gU1NDXzEwMDsKLQkJZGl2ID0gQ0xLX0RJVl8yOwotCQltY3VfY250ID0gMzsKLQkJYnJlYWs7Ci0KLQljYXNlIENMS182MDoKLQkJUlRTNTFYX0RFQlVHUCgiU3dpdGNoIGNsb2NrIHRvIDYwTUh6XG4iKTsKLQkJc2VsID0gU1NDXzYwOwotCQlkaXYgPSBDTEtfRElWXzE7Ci0JCW1jdV9jbnQgPSAzOwotCQlicmVhazsKLQotCWNhc2UgQ0xLXzgwOgotCQlSVFM1MVhfREVCVUdQKCJTd2l0Y2ggY2xvY2sgdG8gODBNSHpcbiIpOwotCQlzZWwgPSBTU0NfODA7Ci0JCWRpdiA9IENMS19ESVZfMTsKLQkJbWN1X2NudCA9IDI7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTEtfMTAwOgotCQlSVFM1MVhfREVCVUdQKCJTd2l0Y2ggY2xvY2sgdG8gMTAwTUh6XG4iKTsKLQkJc2VsID0gU1NDXzEwMDsKLQkJZGl2ID0gQ0xLX0RJVl8xOwotCQltY3VfY250ID0gMjsKLQkJYnJlYWs7Ci0KLQkvKiBjYXNlIENMS18xMjA6Ci0JCVJUUzUxWF9ERUJVR1AoIlN3aXRjaCBjbG9jayB0byAxMjBNSHpcbiIpOwotCQlzZWwgPSBTU0NfMTIwOwotCQlkaXYgPSBDTEtfRElWXzE7Ci0JCW1jdV9jbnQgPSAyOwotCQlicmVhazsKLQotCWNhc2UgQ0xLXzE1MDoKLQkJUlRTNTFYX0RFQlVHUCgiU3dpdGNoIGNsb2NrIHRvIDE1ME1IelxuIik7Ci0JCXNlbCA9IFNTQ18xNTA7Ci0JCWRpdiA9IENMS19ESVZfMTsKLQkJbWN1X2NudCA9IDI7Ci0JCWJyZWFrOyAqLwotCi0JZGVmYXVsdDoKLQkJUlRTNTFYX0RFQlVHUCgiVHJ5IHRvIHN3aXRjaCB0byBhbiBpbGxlZ2FsIGNsb2NrICglZClcbiIsCi0JCQkgICAgICAgY2xrKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlpZiAoIXNkX3ZwY2xrX3BoYXNlX3Jlc2V0KSB7Ci0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDTEtfRElWLCBDTEtfQ0hBTkdFLAotCQkJICAgICAgIENMS19DSEFOR0UpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDTEtfRElWLCAweDNGLAotCQkJICAgICAgIChkaXYgPDwgNCkgfCBtY3VfY250KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU1NDX0NMS19GUEdBX1NFTCwgMHhGRiwKLQkJCSAgICAgICBzZWwpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDTEtfRElWLCBDTEtfQ0hBTkdFLCAwKTsKLQotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENMS19ESVYsIENMS19DSEFOR0UsCi0JCQkgICAgICAgQ0xLX0NIQU5HRSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1ZQQ0xLMF9DVEwsCi0JCQkgICAgICAgUEhBU0VfTk9UX1JFU0VULCAwKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfVlBDTEsxX0NUTCwKLQkJCSAgICAgICBQSEFTRV9OT1RfUkVTRVQsIDApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDTEtfRElWLCAweDNGLAotCQkJICAgICAgIChkaXYgPDwgNCkgfCBtY3VfY250KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU1NDX0NMS19GUEdBX1NFTCwgMHhGRiwKLQkJCSAgICAgICBzZWwpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQl1ZGVsYXkoMjAwKTsKLQotCQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfVlBDTEswX0NUTCwKLQkJCSAgICAgICBQSEFTRV9OT1RfUkVTRVQsIFBIQVNFX05PVF9SRVNFVCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1ZQQ0xLMV9DVEwsCi0JCQkgICAgICAgUEhBU0VfTk9UX1JFU0VULCBQSEFTRV9OT1RfUkVTRVQpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQl1ZGVsYXkoMjAwKTsKLQotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENMS19ESVYsIENMS19DSEFOR0UsIDApOwotCX0KLQotCWNoaXAtPmN1cl9jbGsgPSBjbGs7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfY2FyZF9ydyhzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJdTMyIHNlY19hZGRyLCB1MTYgc2VjX2NudCkKLXsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWludCBpOwotCi0JaWYgKGNoaXAtPnJ3X2NhcmRbbHVuXSA9PSBOVUxMKQotCQlyZXR1cm4gU1RBVFVTX0ZBSUw7Ci0KLQlSVFM1MVhfREVCVUdQKCIlcyBjYXJkLCBzZWN0b3IgYWRkcjogMHgleCwgc2VjdG9yIGNudDogJWRcbiIsCi0JCSAgICAgICAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PQotCQkJRE1BX1RPX0RFVklDRSkgPyAiV3JpdGUiIDogIlJlYWQiLCBzZWNfYWRkciwgc2VjX2NudCk7Ci0KLQljaGlwLT5yd19uZWVkX3JldHJ5ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXJldHZhbCA9IGNoaXAtPnJ3X2NhcmRbbHVuXSAoc3JiLCBjaGlwLCBzZWNfYWRkciwgc2VjX2NudCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCUNBVENIX1RSSUdHRVIoY2hpcCk7Ci0JCQlpZiAoY2hpcC0+b3B0aW9uLnJlc2V0X29yX3J3X2ZhaWxfc2V0X3BhZF9kcml2ZSkgewotCQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX0RSSVZFX1NFTCwKLQkJCQkJCSAgICAgIFNEMjBfRFJJVkVfTUFTSywKLQkJCQkJCSAgICAgIERSSVZFXzhtQSk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIWNoaXAtPnJ3X25lZWRfcmV0cnkpCi0JCQlicmVhazsKLQotCQlSVFM1MVhfREVCVUdQKCJSZXRyeSBSVywgKGkgPSAlZFxuKSIsIGkpOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXU4IHJ0czUxeF9nZXRfbHVuX2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCWlmICgoY2hpcC0+Y2FyZF9yZWFkeSAmIGNoaXAtPmx1bjJjYXJkW2x1bl0pID09IFhEX0NBUkQpCi0JCXJldHVybiAodTgpIFhEX0NBUkQ7Ci0JZWxzZSBpZiAoKGNoaXAtPmNhcmRfcmVhZHkgJiBjaGlwLT5sdW4yY2FyZFtsdW5dKSA9PSBTRF9DQVJEKQotCQlyZXR1cm4gKHU4KSBTRF9DQVJEOwotCWVsc2UgaWYgKChjaGlwLT5jYXJkX3JlYWR5ICYgY2hpcC0+bHVuMmNhcmRbbHVuXSkgPT0gTVNfQ0FSRCkKLQkJcmV0dXJuICh1OCkgTVNfQ0FSRDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNhcmRfc2hhcmVfbW9kZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBjYXJkKQotewotCXU4IHZhbHVlOwotCi0JaWYgKGNhcmQgPT0gU0RfQ0FSRCkKLQkJdmFsdWUgPSBDQVJEX1NIQVJFX1NEOwotCWVsc2UgaWYgKGNhcmQgPT0gTVNfQ0FSRCkKLQkJdmFsdWUgPSBDQVJEX1NIQVJFX01TOwotCWVsc2UgaWYgKGNhcmQgPT0gWERfQ0FSRCkKLQkJdmFsdWUgPSBDQVJEX1NIQVJFX1hEOwotCWVsc2UKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgQ0FSRF9TSEFSRV9NT0RFLCBDQVJEX1NIQVJFX01BU0ssIHZhbHVlKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9zZWxlY3RfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBjYXJkKQotewotCWludCByZXR2YWw7Ci0KLQlpZiAoY2hpcC0+Y3VyX2NhcmQgIT0gY2FyZCkgewotCQl1OCBtb2Q7Ci0KLQkJaWYgKGNhcmQgPT0gU0RfQ0FSRCkKLQkJCW1vZCA9IFNEX01PRF9TRUw7Ci0JCWVsc2UgaWYgKGNhcmQgPT0gTVNfQ0FSRCkKLQkJCW1vZCA9IE1TX01PRF9TRUw7Ci0JCWVsc2UgaWYgKGNhcmQgPT0gWERfQ0FSRCkKLQkJCW1vZCA9IFhEX01PRF9TRUw7Ci0JCWVsc2UKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgQ0FSRF9TRUxFQ1QsIDB4MDcsIG1vZCk7Ci0JCWNoaXAtPmN1cl9jYXJkID0gY2FyZDsKLQotCQlyZXR2YWwgPSBjYXJkX3NoYXJlX21vZGUoY2hpcCwgY2FyZCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXZvaWQgcnRzNTF4X2VqZWN0X2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCVJUUzUxWF9ERUJVR1AoImVqZWN0IGNhcmRcbiIpOwotCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0JcnRzNTF4X2RvX3JlbWFpbmluZ193b3JrKGNoaXApOwotCi0JaWYgKChjaGlwLT5jYXJkX3JlYWR5ICYgY2hpcC0+bHVuMmNhcmRbbHVuXSkgPT0gU0RfQ0FSRCkgewotCQlydHM1MXhfcmVsZWFzZV9zZF9jYXJkKGNoaXApOwotCQljaGlwLT5jYXJkX2VqZWN0ZWQgfD0gU0RfQ0FSRDsKLQkJY2hpcC0+Y2FyZF9yZWFkeSAmPSB+U0RfQ0FSRDsKLQkJY2hpcC0+Y2FwYWNpdHlbbHVuXSA9IDA7Ci0JfSBlbHNlIGlmICgoY2hpcC0+Y2FyZF9yZWFkeSAmIGNoaXAtPmx1bjJjYXJkW2x1bl0pID09IFhEX0NBUkQpIHsKLQkJcnRzNTF4X3JlbGVhc2VfeGRfY2FyZChjaGlwKTsKLQkJY2hpcC0+Y2FyZF9lamVjdGVkIHw9IFhEX0NBUkQ7Ci0JCWNoaXAtPmNhcmRfcmVhZHkgJj0gflhEX0NBUkQ7Ci0JCWNoaXAtPmNhcGFjaXR5W2x1bl0gPSAwOwotCX0gZWxzZSBpZiAoKGNoaXAtPmNhcmRfcmVhZHkgJiBjaGlwLT5sdW4yY2FyZFtsdW5dKSA9PSBNU19DQVJEKSB7Ci0JCXJ0czUxeF9yZWxlYXNlX21zX2NhcmQoY2hpcCk7Ci0JCWNoaXAtPmNhcmRfZWplY3RlZCB8PSBNU19DQVJEOwotCQljaGlwLT5jYXJkX3JlYWR5ICY9IH5NU19DQVJEOwotCQljaGlwLT5jYXBhY2l0eVtsdW5dID0gMDsKLQl9Ci0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfSU5UX1BFTkQsIFhEX0lOVCB8IE1TX0lOVCB8IFNEX0lOVCwKLQkJCSAgICAgIFhEX0lOVCB8IE1TX0lOVCB8IFNEX0lOVCk7Ci19Ci0KLXZvaWQgcnRzNTF4X3RyYW5zX2RtYV9lbmFibGUoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAotCQlzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBieXRlX2NudCwgdTggcGFja19zaXplKQotewotCWlmIChwYWNrX3NpemUgPiBETUFfMTAyNCkKLQkJcGFja19zaXplID0gRE1BXzUxMjsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBSSU5HX0JVRkZFUik7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNQ19ETUFfVEMzLCAweEZGLAotCQkgICAgICAgKHU4KSAoYnl0ZV9jbnQgPj4gMjQpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNQ19ETUFfVEMyLCAweEZGLAotCQkgICAgICAgKHU4KSAoYnl0ZV9jbnQgPj4gMTYpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNQ19ETUFfVEMxLCAweEZGLAotCQkgICAgICAgKHU4KSAoYnl0ZV9jbnQgPj4gOCkpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIE1DX0RNQV9UQzAsIDB4RkYsICh1OCkgYnl0ZV9jbnQpOwotCi0JaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgTUNfRE1BX0NUTCwKLQkJCSAgICAgICAweDAzIHwgRE1BX1BBQ0tfU0laRV9NQVNLLAotCQkJICAgICAgIERNQV9ESVJfRlJPTV9DQVJEIHwgRE1BX0VOIHwgcGFja19zaXplKTsKLQl9IGVsc2UgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBNQ19ETUFfQ1RMLAotCQkJICAgICAgIDB4MDMgfCBETUFfUEFDS19TSVpFX01BU0ssCi0JCQkgICAgICAgRE1BX0RJUl9UT19DQVJEIHwgRE1BX0VOIHwgcGFja19zaXplKTsKLQl9Ci19Ci0KLWludCBydHM1MXhfZW5hYmxlX2NhcmRfY2xvY2soc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBjYXJkKQotewotCXU4IGNsa19lbiA9IDA7Ci0KLQlpZiAoY2FyZCAmIFhEX0NBUkQpCi0JCWNsa19lbiB8PSBYRF9DTEtfRU47Ci0JaWYgKGNhcmQgJiBTRF9DQVJEKQotCQljbGtfZW4gfD0gU0RfQ0xLX0VOOwotCWlmIChjYXJkICYgTVNfQ0FSRCkKLQkJY2xrX2VuIHw9IE1TX0NMS19FTjsKLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgQ0FSRF9DTEtfRU4sIGNsa19lbiwgY2xrX2VuKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9jYXJkX3Bvd2VyX29uKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggY2FyZCkKLXsKLQl1OCBtYXNrLCB2YWwxLCB2YWwyOwotCi0JbWFzayA9IFBPV0VSX01BU0s7Ci0JdmFsMSA9IFBBUlRJQUxfUE9XRVJfT047Ci0JdmFsMiA9IFBPV0VSX09OOwotCi0jaWZkZWYgU0RfWERfSU9fRk9MTE9XX1BXUgotCWlmICgoY2FyZCA9PSBTRF9DQVJEKSB8fCAoY2FyZCA9PSBYRF9DQVJEKSkgewotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfUFdSX0NUTCwgbWFzayB8IExETzMzMThfUFdSX01BU0ssCi0JCQkJIHZhbDEgfCBMRE9fU1VTUEVORCk7Ci0JfSBlbHNlIHsKLSNlbmRpZgotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfUFdSX0NUTCwgbWFzaywgdmFsMSk7Ci0jaWZkZWYgU0RfWERfSU9fRk9MTE9XX1BXUgotCX0KLSNlbmRpZgotCXVkZWxheShjaGlwLT5vcHRpb24ucHdyX2RlbGF5KTsKLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfUFdSX0NUTCwgbWFzaywgdmFsMik7Ci0jaWZkZWYgU0RfWERfSU9fRk9MTE9XX1BXUgotCWlmIChjYXJkID09IFNEX0NBUkQpIHsKLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfUFdSX0NUTCwgTERPMzMxOF9QV1JfTUFTSywKLQkJCQkgICAgICBMRE9fT04pOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgbW9uaXRvcl9jYXJkX2NkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggY2FyZCkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IGNhcmRfY2RbMzJdID0geyAwIH07Ci0KLQljYXJkX2NkW1NEX0NBUkRdID0gU0RfQ0Q7Ci0JY2FyZF9jZFtYRF9DQVJEXSA9IFhEX0NEOwotCWNhcmRfY2RbTVNfQ0FSRF0gPSBNU19DRDsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfY2FyZF9zdGF0dXMoY2hpcCwgJihjaGlwLT5jYXJkX3N0YXR1cykpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCXJldHVybiBDRF9OT1RfRVhJU1Q7Ci0KLQlpZiAoY2hpcC0+Y2FyZF9zdGF0dXMgJiBjYXJkX2NkW2NhcmRdKQotCQlyZXR1cm4gQ0RfRVhJU1Q7Ci0KLQlyZXR1cm4gQ0RfTk9UX0VYSVNUOwotfQotCi1pbnQgcnRzNTF4X3RvZ2dsZV9ncGlvKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZ3BpbykKLXsKLQlpbnQgcmV0dmFsOwotCXU4IHRlbXBfcmVnOwotCXU4IGdwaW9fb3V0cHV0WzRdID0gewotCQkweDAxLAotCX07Ci0JdTggZ3Bpb19vZVs0XSA9IHsKLQkJMHgwMiwKLQl9OwotCWlmIChjaGlwLT5ydHM1MTc5KSB7Ci0JCXJldHZhbCA9IHJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBDQVJEX0dQSU8sICZ0ZW1wX3JlZyk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl0ZW1wX3JlZyBePSBncGlvX29lW2dwaW9dOwotCQl0ZW1wX3JlZyAmPSAweGZlOyAvKiBiaXQgMCBhbHdheXMgc2V0IDAgKi8KLQkJcmV0dmFsID0KLQkJICAgIHJ0czUxeF9lcDBfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9HUElPLCAweDAzLCB0ZW1wX3JlZyk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0gZWxzZSB7Ci0JCXJldHZhbCA9IHJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBDQVJEX0dQSU8sICZ0ZW1wX3JlZyk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl0ZW1wX3JlZyBePSBncGlvX291dHB1dFtncGlvXTsKLQkJcmV0dmFsID0KLQkJICAgIHJ0czUxeF9lcDBfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9HUElPLCAweEZGLAotCQkJCQkgICAgICB0ZW1wX3JlZyB8IGdwaW9fb2VbZ3Bpb10pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfdHVybl9vbl9sZWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBncGlvKQotewotCWludCByZXR2YWw7Ci0JdTggZ3Bpb19vZVs0XSA9IHsKLQkJMHgwMiwKLQl9OwotCXU4IGdwaW9fbWFza1s0XSA9IHsKLQkJMHgwMywKLQl9OwotCi0JcmV0dmFsID0KLQkgICAgcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX0dQSU8sIGdwaW9fbWFza1tncGlvXSwKLQkJCQkgICAgICBncGlvX29lW2dwaW9dKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcnRzNTF4X3R1cm5fb2ZmX2xlZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGdwaW8pCi17Ci0JaW50IHJldHZhbDsKLQl1OCBncGlvX291dHB1dFs0XSA9IHsKLQkJMHgwMSwKLQl9OwotCXU4IGdwaW9fb2VbNF0gPSB7Ci0JCTB4MDIsCi0JfTsKLQl1OCBncGlvX21hc2tbNF0gPSB7Ci0JCTB4MDMsCi0JfTsKLQotCXJldHZhbCA9Ci0JICAgIHJ0czUxeF9lcDBfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9HUElPLCBncGlvX21hc2tbZ3Bpb10sCi0JCQkJICAgICAgZ3Bpb19vZVtncGlvXSB8IGdwaW9fb3V0cHV0W2dwaW9dKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X2NhcmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9jYXJkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODgxNmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X2NhcmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqIEhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpZm5kZWYgX19SVFM1MVhfQ0FSRF9ICi0jZGVmaW5lIF9fUlRTNTFYX0NBUkRfSAotCi0jaW5jbHVkZSAicnRzNTF4X2NoaXAuaCIKLQotLyogUmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KLQotLyogQ2FyZCBQb3dlciBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPV0VSX09GRgkJCTB4MDMKLSNkZWZpbmUgUEFSVElBTF9QT1dFUl9PTgkJMHgwMgotI2RlZmluZSBQT1dFUl9PTgkJCTB4MDAKLSNkZWZpbmUgUE9XRVJfTUFTSwkJCTB4MDMKLSNkZWZpbmUgTERPMzMxOF9QV1JfTUFTSwkJMHgwQwotI2RlZmluZSBMRE9fT04JCQkJMHgwMAotI2RlZmluZSBMRE9fU1VTUEVORAkJCTB4MDgKLSNkZWZpbmUgTERPX09GRgkJCQkweDBDCi0jZGVmaW5lIERWMzMxOF9BVVRPX1BXUl9PRkYJCTB4MTAKLSNkZWZpbmUgRk9SQ0VfTERPX1BPV0VSQgkweDYwCi0KLS8qIENhcmQgT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBYRF9PVVRQVVRfRU4JCQkweDAyCi0jZGVmaW5lIFNEX09VVFBVVF9FTgkJCTB4MDQKLSNkZWZpbmUgTVNfT1VUUFVUX0VOCQkJMHgwOAotCi0vKiBTeXN0ZW0gQ2xvY2sgQ29udHJvbCBSZWdpc3RlciAqLwotCi0vKiBTeXN0ZW0gQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLwotI2RlZmluZSBDTEtfQ0hBTkdFCQkJMHg4MAotI2RlZmluZSBDTEtfRElWXzEJCQkweDAwCi0jZGVmaW5lIENMS19ESVZfMgkJCTB4MDEKLSNkZWZpbmUgQ0xLX0RJVl80CQkJMHgwMgotI2RlZmluZSBDTEtfRElWXzgJCQkweDAzCi0KLS8qIFN5c3RlbSBDbG9jayBTZWxlY3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1NDXzYwCQkJCTAKLSNkZWZpbmUgU1NDXzgwCQkJCTEKLSNkZWZpbmUgU1NDXzEwMAkJCQkyCi0jZGVmaW5lIFNTQ18xMjAJCQkJMwotI2RlZmluZSBTU0NfMTUwCQkJCTQKLQotLyogQ2FyZCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWERfQ0xLX0VOCQkJMHgwMgotI2RlZmluZSBTRF9DTEtfRU4JCQkweDA0Ci0jZGVmaW5lIE1TX0NMS19FTgkJCTB4MDgKLQotLyogQ2FyZCBTZWxlY3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWERfTU9EX1NFTAkJCTEKLSNkZWZpbmUgU0RfTU9EX1NFTAkJCTIKLSNkZWZpbmUgTVNfTU9EX1NFTAkJCTMKLQotLyogQ2FyZCBUcmFuc2ZlciBSZXNldCBSZWdpc3RlciAqLwotI2RlZmluZSBYRF9TVE9QCQkJCTB4MDIKLSNkZWZpbmUgU0RfU1RPUAkJCQkweDA0Ci0jZGVmaW5lIE1TX1NUT1AJCQkJMHgwOAotI2RlZmluZSBYRF9DTFJfRVJSCQkJMHgyMAotI2RlZmluZSBTRF9DTFJfRVJSCQkJMHg0MAotI2RlZmluZSBNU19DTFJfRVJSCQkJMHg4MAotCi0vKiBTRDMwX2RyaXZlX3NlbCAqLwotI2RlZmluZSBTRDMwX0RSSVZFX01BU0sJMHgwNwotCi0vKiBDQVJEX0RSSVZFX1NFTCAqLwotI2RlZmluZSBTRDIwX0RSSVZFX01BU0sJMHgwMwotI2RlZmluZSBEUklWRV80bUEJCQkweDAwCi0jZGVmaW5lIERSSVZFXzhtQQkJCTB4MDEKLSNkZWZpbmUgRFJJVkVfMTJtQQkJCTB4MDIKLQotLyogRlBHQV9QVUxMX0NUTCAqLwotI2RlZmluZSBGUEdBX01TX1BVTExfQ1RMX0VOCQkweEVGCi0jZGVmaW5lIEZQR0FfU0RfUFVMTF9DVExfRU4JCTB4RjcKLSNkZWZpbmUgRlBHQV9YRF9QVUxMX0NUTF9FTjEJCTB4RkUKLSNkZWZpbmUgRlBHQV9YRF9QVUxMX0NUTF9FTjIJCTB4RkQKLSNkZWZpbmUgRlBHQV9YRF9QVUxMX0NUTF9FTjMJCTB4RkIKLQotI2RlZmluZSBGUEdBX01TX1BVTExfQ1RMX0JJVAkJMHgxMAotI2RlZmluZSBGUEdBX1NEX1BVTExfQ1RMX0JJVAkJMHgwOAotCi0vKiBDYXJkIERhdGEgU291cmNlIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBJTkdQT05HX0JVRkZFUgkJCTB4MDEKLSNkZWZpbmUgUklOR19CVUZGRVIJCQkweDAwCi0KLS8qIFNGU01fRUQgKi8KLSNkZWZpbmUgSFdfQ01EX1NUT1AJCQkweDgwCi0jZGVmaW5lIENMUl9TVEFHRV9TVEFMTAkJCTB4MDgKLSNkZWZpbmUgQ0FSRF9FUlIJCQkJMHgxMAotCi0vKiBDQVJEX1NIQVJFX01PREUgKi8KLSNkZWZpbmUJQ0FSRF9TSEFSRV9MUUZQNDgJCTB4MDQKLSNkZWZpbmUJQ0FSRF9TSEFSRV9RRk4yNAkJMHgwMAotI2RlZmluZSBDQVJEX1NIQVJFX0xRRlBfU0VMCQkweDA0Ci0jZGVmaW5lCUNBUkRfU0hBUkVfWEQJCQkweDAwCi0jZGVmaW5lCUNBUkRfU0hBUkVfU0QJCQkweDAxCi0jZGVmaW5lCUNBUkRfU0hBUkVfTVMJCQkweDAyCi0jZGVmaW5lIENBUkRfU0hBUkVfTUFTSwkJCTB4MDMKLQotLyogQ0FSRF9BVVRPX0JMSU5LICovCi0jZGVmaW5lIEJMSU5LX0VOQUJMRQkJCTB4MDgKLSNkZWZpbmUgQkxJTktfU1BFRURfTUFTSwkJMHgwNwotCi0vKiBDQVJEX0dQSU8gKi8KLSNkZWZpbmUgR1BJT19PRQkJCQkweDAyCi0jZGVmaW5lIEdQSU9fT1VUUFVUCQkJMHgwMQotCi0vKiBDQVJEX0NMS19TT1VSQ0UgKi8KLSNkZWZpbmUgQ1JDX0ZJWF9DTEsJCQkoMHgwMCA8PCAwKQotI2RlZmluZSBDUkNfVkFSX0NMSzAJCQkoMHgwMSA8PCAwKQotI2RlZmluZSBDUkNfVkFSX0NMSzEJCQkoMHgwMiA8PCAwKQotI2RlZmluZSBTRDMwX0ZJWF9DTEsJCQkoMHgwMCA8PCAyKQotI2RlZmluZSBTRDMwX1ZBUl9DTEswCQkJKDB4MDEgPDwgMikKLSNkZWZpbmUgU0QzMF9WQVJfQ0xLMQkJCSgweDAyIDw8IDIpCi0jZGVmaW5lIFNBTVBMRV9GSVhfQ0xLCQkJKDB4MDAgPDwgNCkKLSNkZWZpbmUgU0FNUExFX1ZBUl9DTEswCQkJKDB4MDEgPDwgNCkKLSNkZWZpbmUgU0FNUExFX1ZBUl9DTEsxCQkJKDB4MDIgPDwgNCkKLQotLyogRENNX0RSUF9DVEwgKi8KLSNkZWZpbmUgRENNX1JFU0VUCQkJMHgwOAotI2RlZmluZSBEQ01fTE9DS0VECQkJMHgwNAotI2RlZmluZSBEQ01fMjA4TQkJCTB4MDAKLSNkZWZpbmUgRENNX1RYCQkJICAgICAgICAweDAxCi0jZGVmaW5lIERDTV9SWAkJCSAgICAgICAgMHgwMgotCi0vKiBEQ01fRFJQX1RSSUcgKi8KLSNkZWZpbmUgRFJQX1NUQVJUCQkJMHg4MAotI2RlZmluZSBEUlBfRE9ORQkJCTB4NDAKLQotLyogRENNX0RSUF9DRkcgKi8KLSNkZWZpbmUgRFJQX1dSSVRFCQkJMHg4MAotI2RlZmluZSBEUlBfUkVBRAkJCTB4MDAKLSNkZWZpbmUgRENNX1dSSVRFX0FERFJFU1NfNTAJCTB4NTAKLSNkZWZpbmUgRENNX1dSSVRFX0FERFJFU1NfNTEJCTB4NTEKLSNkZWZpbmUgRENNX1JFQURfQUREUkVTU18wMAkJMHgwMAotI2RlZmluZSBEQ01fUkVBRF9BRERSRVNTXzUxCQkweDUxCi0KLS8qIEhXX1ZFUlNJT04gKi8KLSNkZWZpbmUgRlBHQV9WRVIJCQkweDgwCi0jZGVmaW5lIEhXX1ZFUl9NQVNLCQkJMHgwRgotCi0vKiBDRF9ERUdMSVRDSF9FTiAqLwotI2RlZmluZSBESVNBQkxFX1NEX0NECQkJMHgwOAotI2RlZmluZSBESVNBQkxFX01TX0NECQkJMHgxMAotI2RlZmluZSBESVNBQkxFX1hEX0NECQkJMHgyMAotI2RlZmluZSBTRF9DRF9ERUdMSVRDSF9FTgkJMHgwMQotI2RlZmluZSBNU19DRF9ERUdMSVRDSF9FTgkJMHgwMgotI2RlZmluZSBYRF9DRF9ERUdMSVRDSF9FTgkJMHgwNAotCi0vKiBPQ1BDVEwgKi8KLSNkZWZpbmUgQ0FSRF9PQ19ERVRFQ1RfRU4JCTB4MDgKLSNkZWZpbmUgQ0FSRF9PQ19DTFIJCQkweDAxCi0KLS8qIENBUkRfRE1BMV9DVEwgKi8KLSNkZWZpbmUgRVhURU5EX0RNQTFfQVNZTkNfU0lHTkFMCTB4MDIKLQotLyogSFNfVVNCX1NUQVQgKi8KLSNkZWZpbmUgVVNCX0hJX1NQRUVECQkJMHgwMQotCi0vKiBDRkdfTU9ERV8xICovCi0jZGVmaW5lIFJUUzUxNzkJCQkJMHgwMgotCi0vKiBTWVNfRFVNTVkwICovCi0jZGVmaW5lIE5ZRVRfRU4JCQkJMHgwMQotI2RlZmluZSBOWUVUX01TQUsJCQkweDAxCi0KLS8qIFNTQ19DVEwxICovCi0jZGVmaW5lIFNTQ19SU1RCCQkJMHg4MAotI2RlZmluZSBTU0NfOFhfRU4JCQkweDQwCi0jZGVmaW5lIFNTQ19GSVhfRlJBQwkJCTB4MjAKLSNkZWZpbmUgU1NDX1NFTF8xTQkJCTB4MDAKLSNkZWZpbmUgU1NDX1NFTF8yTQkJCTB4MDgKLSNkZWZpbmUgU1NDX1NFTF80TQkJCTB4MTAKLSNkZWZpbmUgU1NDX1NFTF84TQkJCTB4MTgKLQotLyogU1NDX0NUTDIgKi8KLSNkZWZpbmUgU1NDX0RFUFRIX01BU0sJCQkweDAzCi0jZGVmaW5lIFNTQ19ERVBUSF9ESVNBTEJFCQkweDAwCi0jZGVmaW5lIFNTQ19ERVBUSF8yTQkJCTB4MDEKLSNkZWZpbmUgU1NDX0RFUFRIXzFNCQkJMHgwMgotI2RlZmluZSBTU0NfREVQVEhfNTEySwkJCTB4MDMKLQotLyogTERPX1BPV0VSX0NGRyAqLwotI2RlZmluZSBUVU5FX1NEMThfTUFTSwkJCTB4MUMKLSNkZWZpbmUgVFVORV9TRDE4XzFWOAkJCSgweDAxIDw8IDIpCi0jZGVmaW5lIFRVTkVfU0QxOF8zVjMJCQkoMHgwNyA8PCAyKQotCi0vKiBYRF9DUF9XQUlUVElNRSAqLwotI2RlZmluZSBXQUlUXzFGCQkJCTB4MDAKLSNkZWZpbmUgV0FJVF8zRgkJCQkweDAxCi0jZGVmaW5lIFdBSVRfN0YJCQkJMHgwMgotI2RlZmluZSBXQUlUX0ZGCQkJCTB4MDMKLQotLyogWERfSU5JVCAqLwotI2RlZmluZQlYRF9QV1JfT0ZGX0RFTEFZMAkJMHgwMAotI2RlZmluZQlYRF9QV1JfT0ZGX0RFTEFZMQkJMHgwMgotI2RlZmluZQlYRF9QV1JfT0ZGX0RFTEFZMgkJMHgwNAotI2RlZmluZQlYRF9QV1JfT0ZGX0RFTEFZMwkJMHgwNgotI2RlZmluZQlYRF9BVVRPX1BXUl9PRkZfRU4JCTB4RjcKLSNkZWZpbmUJWERfTk9fQVVUT19QV1JfT0ZGCQkweDA4Ci0KLS8qIFhEX0RUQ1RMICovCi0vKiBYRF9DQVRDVEwgKi8KLSNkZWZpbmUJWERfVElNRV9SV05fMQkJCTB4MDAKLSNkZWZpbmUJWERfVElNRV9SV05fU1RFUAkJMHgyMAotI2RlZmluZQlYRF9USU1FX1JXXzEJCQkweDAwCi0jZGVmaW5lCVhEX1RJTUVfUldfU1RFUAkJCTB4MDQKLSNkZWZpbmUJWERfVElNRV9TRVRVUF8xCQkJMHgwMAotI2RlZmluZQlYRF9USU1FX1NFVFVQX1NURVAJCTB4MDEKLQotLyogWERfQ1RMICovCi0jZGVmaW5lCVhEX0VDQzJfVU5DT1JSRUNUQUJMRQkJMHg4MAotI2RlZmluZQlYRF9FQ0MyX0VSUk9SCQkJMHg0MAotI2RlZmluZQlYRF9FQ0MxX1VOQ09SUkVDVEFCTEUJCTB4MjAKLSNkZWZpbmUJWERfRUNDMV9FUlJPUgkJCTB4MTAKLSNkZWZpbmUJWERfUkRZCQkJCTB4MDQKLSNkZWZpbmUJWERfQ0VfRU4JCQkweEZECi0jZGVmaW5lCVhEX0NFX0RJU0VOCQkJMHgwMgotI2RlZmluZQlYRF9XUF9FTgkJCTB4RkUKLSNkZWZpbmUJWERfV1BfRElTRU4JCQkweDAxCi0KLS8qIFhEX1RSQU5TRkVSICovCi0jZGVmaW5lCVhEX1RSQU5TRkVSX1NUQVJUCQkweDgwCi0jZGVmaW5lCVhEX1RSQU5TRkVSX0VORAkJCTB4NDAKLSNkZWZpbmUJWERfUFBCX0VNUFRZCQkJMHgyMAotI2RlZmluZQlYRF9FUlIJCQkJMHgxMAotI2RlZmluZQlYRF9SRVNFVAkJCTB4MDAKLSNkZWZpbmUJWERfRVJBU0UJCQkweDAxCi0jZGVmaW5lCVhEX1JFQURfU1RBVFVTCQkJMHgwMgotI2RlZmluZQlYRF9SRUFEX0lECQkJMHgwMwotI2RlZmluZQlYRF9SRUFEX1JFRFVOREFOVAkJMHgwNAotI2RlZmluZQlYRF9SRUFEX1BBR0VTCQkJMHgwNQotI2RlZmluZQlYRF9TRVRfQ01ECQkJMHgwNgotI2RlZmluZQlYRF9OT1JNQUxfUkVBRAkJCTB4MDcKLSNkZWZpbmUJWERfV1JJVEVfUEFHRVMJCQkweDA4Ci0jZGVmaW5lCVhEX05PUk1BTF9XUklURQkJCTB4MDkKLSNkZWZpbmUJWERfV1JJVEVfUkVEVU5EQU5UCQkweDBBCi0jZGVmaW5lCVhEX1NFVF9BRERSCQkJMHgwQgotI2RlZmluZSBYRF9DT1BZX1BBR0VTCQkJMHgwQwotCi0vKiBYRF9DRkcgKi8KLSNkZWZpbmUJWERfUFBCX1RPX1NJRQkJCTB4ODAKLSNkZWZpbmUJWERfVE9fUFBCX09OTFkJCQkweDAwCi0jZGVmaW5lCVhEX0JBX1RSQU5TRk9STQkJCTB4NDAKLSNkZWZpbmUJWERfQkFfTk9fVFJBTlNGT1JNCQkweDAwCi0jZGVmaW5lCVhEX05PX0NBTENfRUNDCQkJMHgyMAotI2RlZmluZQlYRF9DQUxDX0VDQwkJCTB4MDAKLSNkZWZpbmUJWERfSUdOT1JFX0VDQwkJCTB4MTAKLSNkZWZpbmUJWERfQ0hFQ0tfRUNDCQkJMHgwMAotI2RlZmluZQlYRF9ESVJFQ1RfVE9fUkIJCQkweDA4Ci0jZGVmaW5lIFhEX0FERFJfTUFTSwkJCTB4MDcKLSNkZWZpbmUJWERfQUREUl9MRU5HVEhfMAkJMHgwMAotI2RlZmluZQlYRF9BRERSX0xFTkdUSF8xCQkweDAxCi0jZGVmaW5lCVhEX0FERFJfTEVOR1RIXzIJCTB4MDIKLSNkZWZpbmUJWERfQUREUl9MRU5HVEhfMwkJMHgwMwotI2RlZmluZQlYRF9BRERSX0xFTkdUSF80CQkweDA0Ci0KLS8qIFhEX1BBR0VfU1RBVFVTICovCi0jZGVmaW5lCVhEX0dQRwkJCQkweEZGCi0jZGVmaW5lCVhEX0JQRwkJCQkweDAwCi0KLS8qIFhEX0JMT0NLX1NUQVRVUyAqLwotI2RlZmluZQlYRF9HQkxLCQkJCTB4RkYKLSNkZWZpbmUJWERfTEFURVJfQkJMSwkJCTB4RjAKLQotLyogWERfUEFSSVRZICovCi0jZGVmaW5lCVhEX0VDQzJfQUxMMQkJCTB4ODAKLSNkZWZpbmUJWERfRUNDMV9BTEwxCQkJMHg0MAotI2RlZmluZQlYRF9CQTJfQUxMMAkJCTB4MjAKLSNkZWZpbmUJWERfQkExX0FMTDAJCQkweDEwCi0jZGVmaW5lCVhEX0JBMV9CQTJfRVFMCQkJMHgwNAotI2RlZmluZQlYRF9CQTJfVkFMSUQJCQkweDAyCi0jZGVmaW5lCVhEX0JBMV9WQUxJRAkJCTB4MDEKLQotLyogWERfQ0hLX0RBVEFfU1RBVFVTICovCi0jZGVmaW5lCVhEX1BHU1RTX1pFUk9CSVRfT1ZFUjQJCTB4MDAKLSNkZWZpbmUJWERfUEdTVFNfTk9UX0ZGCQkJMHgwMgotI2RlZmluZQlYRF9BVVRPX0NIS19EQVRBX1NUQVRVUwkJMHgwMQotCi0vKiBTRF9DRkcxICovCi0jZGVmaW5lIFNEX0NMS19ESVZJREVfMAkJCTB4MDAKLSNkZWZpbmUJU0RfQ0xLX0RJVklERV8yNTYJCTB4QzAKLSNkZWZpbmUJU0RfQ0xLX0RJVklERV8xMjgJCTB4ODAKLSNkZWZpbmUgU0RfQ0xLX0RJVklERV9NQVNLCQkweEMwCi0jZGVmaW5lCVNEX0JVU19XSURUSF8xCQkJMHgwMAotI2RlZmluZQlTRF9CVVNfV0lEVEhfNAkJCTB4MDEKLSNkZWZpbmUJU0RfQlVTX1dJRFRIXzgJCQkweDAyCi0jZGVmaW5lCVNEX0FTWU5DX0ZJRk9fUlNUCQkweDEwCi0jZGVmaW5lCVNEXzIwX01PREUJCQkweDAwCi0jZGVmaW5lCVNEX0REUl9NT0RFCQkJMHgwNAotI2RlZmluZQlTRF8zMF9NT0RFCQkJMHgwOAotCi0vKiBTRF9DRkcyICovCi0jZGVmaW5lCVNEX0NBTENVTEFURV9DUkM3CQkweDAwCi0jZGVmaW5lCVNEX05PX0NBTENVTEFURV9DUkM3CQkweDgwCi0jZGVmaW5lCVNEX0NIRUNLX0NSQzE2CQkJMHgwMAotI2RlZmluZQlTRF9OT19DSEVDS19DUkMxNgkJMHg0MAotI2RlZmluZSBTRF9XQUlUX0NSQ19UT19FTgkJMHgyMAotI2RlZmluZQlTRF9XQUlUX0JVU1lfRU5ECQkweDA4Ci0jZGVmaW5lCVNEX05PX1dBSVRfQlVTWV9FTkQJCTB4MDAKLSNkZWZpbmUJU0RfQ0hFQ0tfQ1JDNwkJCTB4MDAKLSNkZWZpbmUJU0RfTk9fQ0hFQ0tfQ1JDNwkJMHgwNAotI2RlZmluZQlTRF9SU1BfTEVOXzAJCQkweDAwCi0jZGVmaW5lCVNEX1JTUF9MRU5fNgkJCTB4MDEKLSNkZWZpbmUJU0RfUlNQX0xFTl8xNwkJCTB4MDIKLS8qIFNEL01NQyBSZXNwb25zZSBUeXBlIERlZmluaXRpb24gKi8KLS8qIFNEX0NBTENVTEFURV9DUkM3LCBTRF9DSEVDS19DUkMxNiwKLSAqIFNEX05PX1dBSVRfQlVTWV9FTkQsIFNEX05PX0NIRUNLX0NSQzcsCi0gKiBTRF9SU1BfTEVOXzAgKi8KLSNkZWZpbmUJU0RfUlNQX1RZUEVfUjAJCQkweDA0Ci0vKiBTRF9DQUxDVUxBVEVfQ1JDNywgU0RfQ0hFQ0tfQ1JDMTYsCi0gKiBTRF9OT19XQUlUX0JVU1lfRU5ELCBTRF9DSEVDS19DUkM3LAotICogU0RfUlNQX0xFTl82ICovCi0jZGVmaW5lCVNEX1JTUF9UWVBFX1IxCQkJMHgwMQotLyogU0RfQ0FMQ1VMQVRFX0NSQzcsIFNEX0NIRUNLX0NSQzE2LAotICogU0RfV0FJVF9CVVNZX0VORCwgU0RfQ0hFQ0tfQ1JDNywKLSAqIFNEX1JTUF9MRU5fNiAqLwotI2RlZmluZQlTRF9SU1BfVFlQRV9SMWIJCQkweDA5Ci0vKiBTRF9DQUxDVUxBVEVfQ1JDNywgU0RfQ0hFQ0tfQ1JDMTYsCi0gKiBTRF9OT19XQUlUX0JVU1lfRU5ELCBTRF9DSEVDS19DUkM3LAotICogU0RfUlNQX0xFTl8xNyAqLwotI2RlZmluZQlTRF9SU1BfVFlQRV9SMgkJCTB4MDIKLS8qIFNEX0NBTENVTEFURV9DUkM3LCBTRF9DSEVDS19DUkMxNiwKLSAqIFNEX05PX1dBSVRfQlVTWV9FTkQsIFNEX05PX0NIRUNLX0NSQzcsCi0gKiBTRF9SU1BfTEVOXzYgKi8KLSNkZWZpbmUJU0RfUlNQX1RZUEVfUjMJCQkweDA1Ci0vKiBTRF9DQUxDVUxBVEVfQ1JDNywgU0RfQ0hFQ0tfQ1JDMTYsCi0gKiBTRF9OT19XQUlUX0JVU1lfRU5ELCBTRF9OT19DSEVDS19DUkM3LAotICogU0RfUlNQX0xFTl82ICovCi0jZGVmaW5lCVNEX1JTUF9UWVBFX1I0CQkJMHgwNQotLyogU0RfQ0FMQ1VMQVRFX0NSQzcsIFNEX0NIRUNLX0NSQzE2LAotICogU0RfTk9fV0FJVF9CVVNZX0VORCwgU0RfQ0hFQ0tfQ1JDNywKLSAqIFNEX1JTUF9MRU5fNiAqLwotI2RlZmluZQlTRF9SU1BfVFlQRV9SNQkJCTB4MDEKLS8qIFNEX0NBTENVTEFURV9DUkM3LCBTRF9DSEVDS19DUkMxNiwKLSAqIFNEX05PX1dBSVRfQlVTWV9FTkQsIFNEX0NIRUNLX0NSQzcsCi0gKiBTRF9SU1BfTEVOXzYgKi8KLSNkZWZpbmUJU0RfUlNQX1RZUEVfUjYJCQkweDAxCi0vKiBTRF9DQUxDVUxBVEVfQ1JDNywgU0RfQ0hFQ0tfQ1JDMTYsCi0gKiBTRF9OT19XQUlUX0JVU1lfRU5ELCBTRF9DSEVDS19DUkM3LAotICogU0RfUlNQX0xFTl82ICAqLwotI2RlZmluZQlTRF9SU1BfVFlQRV9SNwkJCTB4MDEKLQotLyogU0RfQ0ZHMyAqLwotI2RlZmluZQlTRF9SU1BfODBDTEtfVElNRU9VVF9FTgkJMHgwMQotCi0vKiBTRF9TVEFUMSAqLwotI2RlZmluZQlTRF9DUkM3X0VSUgkJCTB4ODAKLSNkZWZpbmUJU0RfQ1JDMTZfRVJSCQkJMHg0MAotI2RlZmluZQlTRF9DUkNfV1JJVEVfRVJSCQkweDIwCi0jZGVmaW5lCVNEX0NSQ19XUklURV9FUlJfTUFTSwkJMHgxQwotI2RlZmluZQlHRVRfQ1JDX1RJTUVfT1VUCQkweDAyCi0jZGVmaW5lCVNEX1RVTklOR19DT01QQVJFX0VSUgkJMHgwMQotCi0vKiBTRF9TVEFUMiAqLwotI2RlZmluZQlTRF9SU1BfODBDTEtfVElNRU9VVAkJMHgwMQotCi0vKiBTRF9CVVNfU1RBVCAqLwotI2RlZmluZQlTRF9DTEtfVE9HR0xFX0VOCQkweDgwCi0jZGVmaW5lCVNEX0NMS19GT1JDRV9TVE9QCSAgICAgICAgMHg0MAotI2RlZmluZQlTRF9EQVQzX1NUQVRVUwkJICAgICAgICAweDEwCi0jZGVmaW5lCVNEX0RBVDJfU1RBVFVTCQkgICAgICAgIDB4MDgKLSNkZWZpbmUJU0RfREFUMV9TVEFUVVMJCSAgICAgICAgMHgwNAotI2RlZmluZQlTRF9EQVQwX1NUQVRVUwkJICAgICAgICAweDAyCi0jZGVmaW5lCVNEX0NNRF9TVEFUVVMJCQkweDAxCi0KLS8qIFNEX1BBRF9DVEwgKi8KLSNkZWZpbmUJU0RfSU9fVVNJTkdfMVY4CQkgICAgICAgIDB4ODAKLSNkZWZpbmUJU0RfSU9fVVNJTkdfM1YzCQkgICAgICAgIDB4N0YKLSNkZWZpbmUJVFlQRV9BX0RSSVZJTkcJCSAgICAgICAgMHgwMAotI2RlZmluZQlUWVBFX0JfRFJJVklORwkJCTB4MDEKLSNkZWZpbmUJVFlQRV9DX0RSSVZJTkcJCQkweDAyCi0jZGVmaW5lCVRZUEVfRF9EUklWSU5HCQkgICAgICAgIDB4MDMKLQotLyogU0RfU0FNUExFX1BPSU5UX0NUTCAqLwotI2RlZmluZQlERFJfRklYX1JYX0RBVAkJCTB4MDAKLSNkZWZpbmUJRERSX1ZBUl9SWF9EQVQJCQkweDgwCi0jZGVmaW5lCUREUl9GSVhfUlhfREFUX0VER0UJCTB4MDAKLSNkZWZpbmUJRERSX0ZJWF9SWF9EQVRfMTRfREVMQVkJCTB4NDAKLSNkZWZpbmUJRERSX0ZJWF9SWF9DTUQJCQkweDAwCi0jZGVmaW5lCUREUl9WQVJfUlhfQ01ECQkJMHgyMAotI2RlZmluZQlERFJfRklYX1JYX0NNRF9QT1NfRURHRQkJMHgwMAotI2RlZmluZQlERFJfRklYX1JYX0NNRF8xNF9ERUxBWQkJMHgxMAotI2RlZmluZQlTRDIwX1JYX1BPU19FREdFCQkweDAwCi0jZGVmaW5lCVNEMjBfUlhfMTRfREVMQVkJCTB4MDgKLSNkZWZpbmUgU0QyMF9SWF9TRUxfTUFTSwkJMHgwOAotCi0vKiBTRF9QVVNIX1BPSU5UX0NUTCAqLwotI2RlZmluZQlERFJfRklYX1RYX0NNRF9EQVQJCTB4MDAKLSNkZWZpbmUJRERSX1ZBUl9UWF9DTURfREFUCQkweDgwCi0jZGVmaW5lCUREUl9GSVhfVFhfREFUXzE0X1RTVQkJMHgwMAotI2RlZmluZQlERFJfRklYX1RYX0RBVF8xMl9UU1UJCTB4NDAKLSNkZWZpbmUJRERSX0ZJWF9UWF9DTURfTkVHX0VER0UJCTB4MDAKLSNkZWZpbmUJRERSX0ZJWF9UWF9DTURfMTRfQUhFQUQJCTB4MjAKLSNkZWZpbmUJU0QyMF9UWF9ORUdfRURHRQkJMHgwMAotI2RlZmluZQlTRDIwX1RYXzE0X0FIRUFECQkweDEwCi0jZGVmaW5lIFNEMjBfVFhfU0VMX01BU0sJCTB4MTAKLSNkZWZpbmUJRERSX1ZBUl9TRENMS19QT0xfU1dBUAkJMHgwMQotCi0vKiBTRF9UUkFOU0ZFUiAqLwotI2RlZmluZQlTRF9UUkFOU0ZFUl9TVEFSVAkJMHg4MAotI2RlZmluZQlTRF9UUkFOU0ZFUl9FTkQJCQkweDQwCi0jZGVmaW5lIFNEX1NUQVRfSURMRQkJCTB4MjAKLSNkZWZpbmUJU0RfVFJBTlNGRVJfRVJSCQkJMHgxMAotLyogU0QgVHJhbnNmZXIgTW9kZSBkZWZpbml0aW9uICovCi0jZGVmaW5lCVNEX1RNX05PUk1BTF9XUklURQkJMHgwMAotI2RlZmluZQlTRF9UTV9BVVRPX1dSSVRFXzMJCTB4MDEKLSNkZWZpbmUJU0RfVE1fQVVUT19XUklURV80CQkweDAyCi0jZGVmaW5lCVNEX1RNX0FVVE9fUkVBRF8zCQkweDA1Ci0jZGVmaW5lCVNEX1RNX0FVVE9fUkVBRF80CQkweDA2Ci0jZGVmaW5lCVNEX1RNX0NNRF9SU1AJCQkweDA4Ci0jZGVmaW5lCVNEX1RNX0FVVE9fV1JJVEVfMQkJMHgwOQotI2RlZmluZQlTRF9UTV9BVVRPX1dSSVRFXzIJCTB4MEEKLSNkZWZpbmUJU0RfVE1fTk9STUFMX1JFQUQJCTB4MEMKLSNkZWZpbmUJU0RfVE1fQVVUT19SRUFEXzEJCTB4MEQKLSNkZWZpbmUJU0RfVE1fQVVUT19SRUFEXzIJCTB4MEUKLSNkZWZpbmUJU0RfVE1fQVVUT19UVU5JTkcJCTB4MEYKLQotLyogU0RfVlBUWF9DVEwgLyBTRF9WUFJYX0NUTCAqLwotI2RlZmluZSBQSEFTRV9DSEFOR0UJCQkweDgwCi0jZGVmaW5lIFBIQVNFX05PVF9SRVNFVAkJCTB4NDAKLQotLyogU0RfRENNUFNfVFhfQ1RMIC8gU0RfRENNUFNfUlhfQ1RMICovCi0jZGVmaW5lIERDTVBTX0NIQU5HRQkJCTB4ODAKLSNkZWZpbmUgRENNUFNfQ0hBTkdFX0RPTkUJCTB4NDAKLSNkZWZpbmUgRENNUFNfRVJST1IJCQkweDIwCi0jZGVmaW5lIERDTVBTX0NVUlJFTlRfUEhBU0UJCTB4MUYKLQotLyogU0RfQ01EX1NUQVRFICovCi0jZGVmaW5lIFNEX0NNRF9JRExFCQkJMHg4MAotCi0vKiBTRF9EQVRBX1NUQVRFICovCi0jZGVmaW5lIFNEX0RBVEFfSURMRQkJCTB4ODAKLQotLyogTVNfQkxLRU5EICovCi0jZGVmaW5lIFNFVF9CTEtFTkQJCQkweDAxCi0KLS8qIE1TX0NGRyAqLwotI2RlZmluZQlTQU1QTEVfVElNRV9SSVNJTkcJCTB4MDAKLSNkZWZpbmUJU0FNUExFX1RJTUVfRkFMTElORwkJMHg4MAotI2RlZmluZQlQVVNIX1RJTUVfREVGQVVMVAkJMHgwMAotI2RlZmluZQlQVVNIX1RJTUVfT0RECQkJMHg0MAotI2RlZmluZQlOT19FWFRFTkRfVE9HR0xFCQkweDAwCi0jZGVmaW5lCUVYVEVORF9UT0dHTEVfQ0hLCQkweDIwCi0jZGVmaW5lCU1TX0JVU19XSURUSF8xCQkJMHgwMAotI2RlZmluZQlNU19CVVNfV0lEVEhfNAkJCTB4MTAKLSNkZWZpbmUJTVNfQlVTX1dJRFRIXzgJCQkweDE4Ci0jZGVmaW5lCU1TXzJLX1NFQ1RPUl9NT0RFCQkweDA0Ci0jZGVmaW5lCU1TXzUxMl9TRUNUT1JfTU9ERQkJMHgwMAotI2RlZmluZQlNU19UT0dHTEVfVElNRU9VVF9FTgkJMHgwMAotI2RlZmluZQlNU19UT0dHTEVfVElNRU9VVF9ESVNFTgkJMHgwMQotI2RlZmluZSBNU19OT19DSEVDS19JTlQJCQkweDAyCi0KLS8qIE1TX1RSQU5TX0NGRyAqLwotI2RlZmluZQlXQUlUX0lOVAkJCTB4ODAKLSNkZWZpbmUJTk9fV0FJVF9JTlQJCQkweDAwCi0jZGVmaW5lCU5PX0FVVE9fUkVBRF9JTlRfUkVHCQkweDAwCi0jZGVmaW5lCUFVVE9fUkVBRF9JTlRfUkVHCQkweDQwCi0jZGVmaW5lCU1TX0NSQzE2X0VSUgkJCTB4MjAKLSNkZWZpbmUJTVNfUkRZX1RJTUVPVVQJCQkweDEwCi0jZGVmaW5lCU1TX0lOVF9DTUROSwkJCTB4MDgKLSNkZWZpbmUJTVNfSU5UX0JSRVEJCQkweDA0Ci0jZGVmaW5lCU1TX0lOVF9FUlIJCQkweDAyCi0jZGVmaW5lCU1TX0lOVF9DRUQJCQkweDAxCi0KLS8qIE1TX1RSQU5TRkVSICovCi0jZGVmaW5lCU1TX1RSQU5TRkVSX1NUQVJUCQkweDgwCi0jZGVmaW5lCU1TX1RSQU5TRkVSX0VORAkJCTB4NDAKLSNkZWZpbmUJTVNfVFJBTlNGRVJfRVJSCQkJMHgyMAotI2RlZmluZQlNU19CU19TVEFURQkJCTB4MTAKLSNkZWZpbmUJTVNfVE1fUkVBRF9CWVRFUwkJMHgwMAotI2RlZmluZQlNU19UTV9OT1JNQUxfUkVBRAkJMHgwMQotI2RlZmluZQlNU19UTV9XUklURV9CWVRFUwkJMHgwNAotI2RlZmluZQlNU19UTV9OT1JNQUxfV1JJVEUJCTB4MDUKLSNkZWZpbmUJTVNfVE1fQVVUT19SRUFECQkJMHgwOAotI2RlZmluZQlNU19UTV9BVVRPX1dSSVRFCQkweDBDCi0jZGVmaW5lIE1TX1RNX1NFVF9DTUQJCQkweDA2Ci0jZGVmaW5lIE1TX1RNX0NPUFlfUEFHRQkJCTB4MDcKLSNkZWZpbmUgTVNfVE1fTVVMVElfUkVBRAkJMHgwMgotI2RlZmluZSBNU19UTV9NVUxUSV9XUklURQkJMHgwMwotCi0vKiBNQ19ETUFfQ1RMICovCi0jZGVmaW5lIERNQV9UQ19FUV8wCQkJMHg4MAotI2RlZmluZSBETUFfRElSX1RPX0NBUkQJCQkweDAwCi0jZGVmaW5lIERNQV9ESVJfRlJPTV9DQVJECQkweDAyCi0jZGVmaW5lIERNQV9FTgkJCQkweDAxCi0jZGVmaW5lIERNQV8xMjgJCQkJKDAgPDwgMikKLSNkZWZpbmUgRE1BXzI1NgkJCQkoMSA8PCAyKQotI2RlZmluZSBETUFfNTEyCQkJCSgyIDw8IDIpCi0jZGVmaW5lIERNQV8xMDI0CQkJKDMgPDwgMikKLSNkZWZpbmUgRE1BX1BBQ0tfU0laRV9NQVNLCQkweDBDCi0KLS8qIENBUkRfSU5UX1BFTkQgKi8KLSNkZWZpbmUgWERfSU5UCQkJCTB4MTAKLSNkZWZpbmUgTVNfSU5UCQkJCTB4MDgKLSNkZWZpbmUgU0RfSU5UCQkJCTB4MDQKLQotLyogTUNfRklGT19DVEwgKi8KLSNkZWZpbmUgRklGT19GTFVTSAkJCTB4MDEKLQotLyogQVVUT19ERUxJTktfRU4gKi8KLSNkZWZpbmUgQVVUT19ERUxJTksJCQkweDAyCi0jZGVmaW5lIEZPUkNFX0RFTElOSwkJCTB4MDEKLQotLyogTUNfRE1BX1JTVCAqLwotI2RlZmluZSBETUFfUkVTRVQgIDB4MDEKLQotI2RlZmluZSBTU0NfUE9XRVJfTUFTSwkJCTB4MDEKLSNkZWZpbmUgU1NDX1BPV0VSX0RPV04JCQkweDAxCi0jZGVmaW5lIFNTQ19QT1dFUl9PTgkJCTB4MDAKLQotLyogT0NQQ1RMICovCi0jZGVmaW5lIE1TX09DUF9ERVRFQ1RfRU4JCTB4MDgKLSNkZWZpbmUJTVNfT0NQX0lOVF9FTgkJCTB4MDQKLSNkZWZpbmUJTVNfT0NQX0lOVF9DTFIJCQkweDAyCi0jZGVmaW5lCU1TX09DUF9DTEVBUgkJCTB4MDEKLQotLyogT0NQU1RBVCAqLwotI2RlZmluZSBNU19PQ1BfREVURUNUCQkJMHg4MAotI2RlZmluZSBNU19PQ1BfTk9XCQkJMHgwMgotI2RlZmluZSBNU19PQ1BfRVZFUgkJCTB4MDEKLQotLyogTUNfRklGT19TVEFUICovCi0jZGVmaW5lIEZJRk9fRlVMTAkJMHgwMQotI2RlZmluZSBGSUZPX0VNUFRZCQkweDAyCi0KLS8qIFJDQ1RMICovCi0jZGVmaW5lIFVfSFdfQ01EX0VOX01BU0sJCTB4MDIKLSNkZWZpbmUgVV9IV19DTURfRU4JCQkweDAyCi0jZGVmaW5lIFVfSFdfQ01EX0RJUwkJCTB4MDAKLQotLyogUmVnaXN0ZXIgYWRkcmVzcyAqLwotI2RlZmluZSBGUERDVEwJCQkJMHhGQzAwCi0jZGVmaW5lIFNTQ19ESVZfTl8wCQkJMHhGQzA3Ci0jZGVmaW5lIFNTQ19DVEwxCQkJMHhGQzA5Ci0jZGVmaW5lIFNTQ19DVEwyCQkJMHhGQzBBCi0jZGVmaW5lIENGR19NT0RFXzEJCTB4RkMwRgotI2RlZmluZSBSQ0NUTAkJCTB4RkMxNAotI2RlZmluZSBTWVNfRFVNTVkwCQkJMHhGQzMwCi0jZGVmaW5lIFhEX0NQX1dBSVRUSU1FCQkJMHhGRDAwCi0jZGVmaW5lIFhEX0NQX1BBR0VMRU4JCQkweEZEMDEKLSNkZWZpbmUgWERfQ1BfUkVBREFERFIwCQkJMHhGRDAyCi0jZGVmaW5lIFhEX0NQX1JFQURBRERSMQkJCTB4RkQwMwotI2RlZmluZSBYRF9DUF9SRUFEQUREUjIJCQkweEZEMDQKLSNkZWZpbmUgWERfQ1BfUkVBREFERFIzCQkJMHhGRDA1Ci0jZGVmaW5lIFhEX0NQX1JFQURBRERSNAkJCTB4RkQwNgotI2RlZmluZSBYRF9DUF9XUklURUFERFIwCQkweEZEMDcKLSNkZWZpbmUgWERfQ1BfV1JJVEVBRERSMQkJMHhGRDA4Ci0jZGVmaW5lIFhEX0NQX1dSSVRFQUREUjIJCTB4RkQwOQotI2RlZmluZSBYRF9DUF9XUklURUFERFIzCQkweEZEMEEKLSNkZWZpbmUgWERfQ1BfV1JJVEVBRERSNAkJMHhGRDBCCi0jZGVmaW5lIFhEX0lOSVQJCQkJMHhGRDEwCi0jZGVmaW5lIFhEX0RUQ1RMCQkJMHhGRDExCi0jZGVmaW5lIFhEX0NUTAkJCQkweEZEMTIKLSNkZWZpbmUgWERfVFJBTlNGRVIJCQkweEZEMTMKLSNkZWZpbmUgWERfQ0ZHCQkJCTB4RkQxNAotI2RlZmluZSBYRF9BRERSRVNTMAkJCTB4RkQxNQotI2RlZmluZSBYRF9BRERSRVNTMQkJCTB4RkQxNgotI2RlZmluZSBYRF9BRERSRVNTMgkJCTB4RkQxNwotI2RlZmluZSBYRF9BRERSRVNTMwkJCTB4RkQxOAotI2RlZmluZSBYRF9BRERSRVNTNAkJCTB4RkQxOQotI2RlZmluZSBYRF9EQVQJCQkJMHhGRDFBCi0jZGVmaW5lIFhEX1BBR0VfQ05UCQkJMHhGRDFCCi0jZGVmaW5lIFhEX1BBR0VfU1RBVFVTCQkJMHhGRDFDCi0jZGVmaW5lIFhEX0JMT0NLX1NUQVRVUwkJCTB4RkQxRAotI2RlZmluZSBYRF9CTE9DS19BRERSMV9MCQkweEZEMUUKLSNkZWZpbmUgWERfQkxPQ0tfQUREUjFfSAkJMHhGRDFGCi0jZGVmaW5lIFhEX0JMT0NLX0FERFIyX0wJCTB4RkQyMAotI2RlZmluZSBYRF9CTE9DS19BRERSMl9ICQkweEZEMjEKLSNkZWZpbmUgWERfQllURV9DTlRfTAkJCTB4RkQyMgotI2RlZmluZSBYRF9CWVRFX0NOVF9ICQkJMHhGRDIzCi0jZGVmaW5lCVhEX1BBUklUWQkJCTB4RkQyNAotI2RlZmluZSBYRF9FQ0NfQklUMQkJCTB4RkQyNQotI2RlZmluZSBYRF9FQ0NfQllURTEJCQkweEZEMjYKLSNkZWZpbmUgWERfRUNDX0JJVDIJCQkweEZEMjcKLSNkZWZpbmUgWERfRUNDX0JZVEUyCQkJMHhGRDI4Ci0jZGVmaW5lIFhEX1JFU0VSVkVEMAkJCTB4RkQyOQotI2RlZmluZSBYRF9SRVNFUlZFRDEJCQkweEZEMkEKLSNkZWZpbmUgWERfUkVTRVJWRUQyCQkJMHhGRDJCCi0jZGVmaW5lIFhEX1JFU0VSVkVEMwkJCTB4RkQyQwotI2RlZmluZSBYRF9DSEtfREFUQV9TVEFUVVMJCTB4RkQyRAotI2RlZmluZSBYRF9DQVRDVEwJCQkweEZEMkUKLQotI2RlZmluZSBNU19CTEtFTkQJCQkweEZEMzAKLSNkZWZpbmUgTVNfUkVBRF9TVEFSVAkJCTB4RkQzMQotI2RlZmluZSBNU19SRUFEX0NPVU5UCQkJMHhGRDMyCi0jZGVmaW5lIE1TX1dSSVRFX1NUQVJUCQkJMHhGRDMzCi0jZGVmaW5lIE1TX1dSSVRFX0NPVU5UCQkJMHhGRDM0Ci0jZGVmaW5lIE1TX0NPTU1BTkQJCQkweEZEMzUKLSNkZWZpbmUgTVNfT0xEX0JMT0NLXzAJCQkweEZEMzYKLSNkZWZpbmUgTVNfT0xEX0JMT0NLXzEJCQkweEZEMzcKLSNkZWZpbmUgTVNfTkVXX0JMT0NLXzAJCQkweEZEMzgKLSNkZWZpbmUgTVNfTkVXX0JMT0NLXzEJCQkweEZEMzkKLSNkZWZpbmUgTVNfTE9HX0JMT0NLXzAJCQkweEZEM0EKLSNkZWZpbmUgTVNfTE9HX0JMT0NLXzEJCQkweEZEM0IKLSNkZWZpbmUgTVNfQlVTX1dJRFRICQkJMHhGRDNDCi0jZGVmaW5lIE1TX1BBR0VfU1RBUlQJCQkweEZEM0QKLSNkZWZpbmUgTVNfUEFHRV9MRU5HVEgJCQkweEZEM0UKLSNkZWZpbmUgTVNfQ0ZHCQkJCTB4RkQ0MAotI2RlZmluZSBNU19UUEMJCQkJMHhGRDQxCi0jZGVmaW5lIE1TX1RSQU5TX0NGRwkJCTB4RkQ0MgotI2RlZmluZSBNU19UUkFOU0ZFUgkJCTB4RkQ0MwotI2RlZmluZSBNU19JTlRfUkVHCQkJMHhGRDQ0Ci0jZGVmaW5lIE1TX0JZVEVfQ05UCQkJMHhGRDQ1Ci0jZGVmaW5lIE1TX1NFQ1RPUl9DTlRfTAkJCTB4RkQ0NgotI2RlZmluZSBNU19TRUNUT1JfQ05UX0gJCQkweEZENDcKLSNkZWZpbmUgTVNfREJVU19ICQkJMHhGRDQ4Ci0KLSNkZWZpbmUgQ0FSRF9ETUExX0NUTAkJCTB4RkQ1QwotI2RlZmluZSBDQVJEX1BVTExfQ1RMMQkJCTB4RkQ2MAotI2RlZmluZSBDQVJEX1BVTExfQ1RMMgkJCTB4RkQ2MQotI2RlZmluZSBDQVJEX1BVTExfQ1RMMwkJCTB4RkQ2MgotI2RlZmluZSBDQVJEX1BVTExfQ1RMNAkJCTB4RkQ2MwotI2RlZmluZSBDQVJEX1BVTExfQ1RMNQkJCTB4RkQ2NAotI2RlZmluZSBDQVJEX1BVTExfQ1RMNgkJCTB4RkQ2NQotI2RlZmluZSBDQVJEX0VYSVNUCQkJCTB4RkQ2RgotI2RlZmluZSBDQVJEX0lOVF9QRU5ECQkJMHhGRDcxCi0KLSNkZWZpbmUgTERPX1BPV0VSX0NGRwkJCTB4RkQ3QgotCi0jZGVmaW5lIFNEX0NGRzEJCQkJMHhGREEwCi0jZGVmaW5lIFNEX0NGRzIJCQkJMHhGREExCi0jZGVmaW5lIFNEX0NGRzMJCQkJMHhGREEyCi0jZGVmaW5lIFNEX1NUQVQxCQkJMHhGREEzCi0jZGVmaW5lIFNEX1NUQVQyCQkJMHhGREE0Ci0jZGVmaW5lIFNEX0JVU19TVEFUCQkJMHhGREE1Ci0jZGVmaW5lIFNEX1BBRF9DVEwJCQkweEZEQTYKLSNkZWZpbmUgU0RfU0FNUExFX1BPSU5UX0NUTAkJMHhGREE3Ci0jZGVmaW5lIFNEX1BVU0hfUE9JTlRfQ1RMCQkweEZEQTgKLSNkZWZpbmUgU0RfQ01EMAkJCQkweEZEQTkKLSNkZWZpbmUgU0RfQ01EMQkJCQkweEZEQUEKLSNkZWZpbmUgU0RfQ01EMgkJCQkweEZEQUIKLSNkZWZpbmUgU0RfQ01EMwkJCQkweEZEQUMKLSNkZWZpbmUgU0RfQ01ENAkJCQkweEZEQUQKLSNkZWZpbmUgU0RfQ01ENQkJCQkweEZEQUUKLSNkZWZpbmUgU0RfQllURV9DTlRfTAkJCTB4RkRBRgotI2RlZmluZSBTRF9CWVRFX0NOVF9ICQkJMHhGREIwCi0jZGVmaW5lIFNEX0JMT0NLX0NOVF9MCQkJMHhGREIxCi0jZGVmaW5lIFNEX0JMT0NLX0NOVF9ICQkJMHhGREIyCi0jZGVmaW5lIFNEX1RSQU5TRkVSCQkJMHhGREIzCi0jZGVmaW5lIFNEX0NNRF9TVEFURQkJCTB4RkRCNQotI2RlZmluZSBTRF9EQVRBX1NUQVRFCQkJMHhGREI2Ci0jZGVmaW5lIFNEX1ZQQ0xLMF9DVEwJCQkweEZDMkEKLSNkZWZpbmUgU0RfVlBDTEsxX0NUTAkJCTB4RkMyQgotI2RlZmluZSBTRF9EQ01QUzBfQ1RMCQkJMHhGQzJDCi0jZGVmaW5lIFNEX0RDTVBTMV9DVEwJCQkweEZDMkQKLQotI2RlZmluZSBDQVJEX0RNQTFfQ1RMCQkJMHhGRDVDCi0KLSNkZWZpbmUgSFdfVkVSU0lPTgkJCTB4RkMwMQotCi0jZGVmaW5lIFNTQ19DTEtfRlBHQV9TRUwJCTB4RkMwMgotI2RlZmluZSBDTEtfRElWCQkJCTB4RkMwMwotI2RlZmluZSBTRlNNX0VECQkJCTB4RkMwNAotCi0jZGVmaW5lIENEX0RFR0xJVENIX1dJRFRICQkweEZDMjAKLSNkZWZpbmUgQ0RfREVHTElUQ0hfRU4JCQkweEZDMjEKLSNkZWZpbmUgQVVUT19ERUxJTktfRU4JCQkweEZDMjMKLQotI2RlZmluZSBGUEdBX1BVTExfQ1RMCQkJMHhGQzFECi0jZGVmaW5lIENBUkRfQ0xLX1NPVVJDRQkJCTB4RkMyRQotCi0jZGVmaW5lIENBUkRfU0hBUkVfTU9ERQkJCTB4RkQ1MQotI2RlZmluZSBDQVJEX0RSSVZFX1NFTAkJCTB4RkQ1MgotI2RlZmluZSBDQVJEX1NUT1AJCQkweEZENTMKLSNkZWZpbmUgQ0FSRF9PRQkJCQkweEZENTQKLSNkZWZpbmUgQ0FSRF9BVVRPX0JMSU5LCQkJMHhGRDU1Ci0jZGVmaW5lIENBUkRfR1BJTwkJCTB4RkQ1NgotI2RlZmluZSBTRDMwX0RSSVZFX1NFTAkJMHhGRDU3Ci0KLSNkZWZpbmUgQ0FSRF9EQVRBX1NPVVJDRQkJMHhGRDVECi0jZGVmaW5lIENBUkRfU0VMRUNUCQkJMHhGRDVFCi0KLSNkZWZpbmUgQ0FSRF9DTEtfRU4JCQkweEZENzkKLSNkZWZpbmUgQ0FSRF9QV1JfQ1RMCQkJMHhGRDdBCi0KLSNkZWZpbmUgT0NQQ1RMCQkJCTB4RkQ4MAotI2RlZmluZSBPQ1BQQVJBMQkJCTB4RkQ4MQotI2RlZmluZSBPQ1BQQVJBMgkJCTB4RkQ4MgotI2RlZmluZSBPQ1BTVEFUCQkJCTB4RkQ4MwotCi0jZGVmaW5lIEhTX1VTQl9TVEFUCQkJMHhGRTAxCi0jZGVmaW5lIEhTX1ZDT05UUk9MCQkJMHhGRTI2Ci0jZGVmaW5lIEhTX1ZTVEFJTgkJCTB4RkUyNwotI2RlZmluZSBIU19WTE9BRE0JCQkweEZFMjgKLSNkZWZpbmUgSFNfVlNUQU9VVAkJCTB4RkUyOQotCi0jZGVmaW5lIE1DX0lSUQkJCQkweEZGMDAKLSNkZWZpbmUgTUNfSVJRRU4JCQkweEZGMDEKLSNkZWZpbmUgTUNfRklGT19DVEwJCQkweEZGMDIKLSNkZWZpbmUgTUNfRklGT19CQzAJCQkweEZGMDMKLSNkZWZpbmUgTUNfRklGT19CQzEJCQkweEZGMDQKLSNkZWZpbmUgTUNfRklGT19TVEFUCQkJMHhGRjA1Ci0jZGVmaW5lIE1DX0ZJRk9fTU9ERQkJCTB4RkYwNgotI2RlZmluZSBNQ19GSUZPX1JEX1BUUjAJCTB4RkYwNwotI2RlZmluZSBNQ19GSUZPX1JEX1BUUjEJCTB4RkYwOAotI2RlZmluZSBNQ19ETUFfQ1RMCQkJMHhGRjEwCi0jZGVmaW5lIE1DX0RNQV9UQzAJCQkweEZGMTEKLSNkZWZpbmUgTUNfRE1BX1RDMQkJCTB4RkYxMgotI2RlZmluZSBNQ19ETUFfVEMyCQkJMHhGRjEzCi0jZGVmaW5lIE1DX0RNQV9UQzMJCQkweEZGMTQKLSNkZWZpbmUgTUNfRE1BX1JTVAkJCTB4RkYxNQotCi0vKiBNZW1vcnkgbWFwcGluZyAqLwotI2RlZmluZSBSQlVGX1NJWkVfTUFTSwkJMHhGQkZGCi0jZGVmaW5lIFJCVUZfQkFTRQkJCTB4RjAwMAotI2RlZmluZSBQUEJVRl9CQVNFMQkJCTB4RjgwMAotI2RlZmluZSBQUEJVRl9CQVNFMgkJCTB4RkEwMAotCi0vKiBpbnQgbW9uaXRvcl9jYXJkX2NkICovCi0jZGVmaW5lIENEX0VYSVNUCQkJMAotI2RlZmluZSBDRF9OT1RfRVhJU1QJCQkxCi0KLSNkZWZpbmUgREVCT1VOQ0VfQ05UCQkJNQotCi1pbnQgbW9uaXRvcl9jYXJkX2NkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggY2FyZCk7Ci0KLXZvaWQgcnRzNTF4X2RvX3JlbWFpbmluZ193b3JrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci12b2lkIHJ0czUxeF9kb19ydHM1MXhfcmVzZXRfc2RfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotdm9pZCBydHM1MXhfaW5pdF9jYXJkcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotdm9pZCBydHM1MXhfcmVsZWFzZV9jYXJkcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9zd2l0Y2hfc3NjX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IGNsayk7Ci1pbnQgcnRzNTF4X3N3aXRjaF9ub3JtYWxfY2xvY2soc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgY2xrKTsKLWludCBydHM1MXhfY2FyZF9ydyhzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJdTMyIHNlY19hZGRyLCB1MTYgc2VjX2NudCk7Ci11OCBydHM1MXhfZ2V0X2x1bl9jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1bik7Ci1pbnQgcnRzNTF4X3NlbGVjdF9jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IGNhcmQpOwotdm9pZCBydHM1MXhfZWplY3RfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4pOwotdm9pZCBydHM1MXhfdHJhbnNfZG1hX2VuYWJsZShlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCi0JCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTMyIGJ5dGVfY250LCB1OCBwYWNrX3NpemUpOwotaW50IHJ0czUxeF9lbmFibGVfY2FyZF9jbG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGNhcmQpOwotaW50IHJ0czUxeF9jYXJkX3Bvd2VyX29uKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggY2FyZCk7Ci1pbnQgcnRzNTF4X3RvZ2dsZV9ncGlvKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZ3Bpbyk7Ci1pbnQgcnRzNTF4X3R1cm5fb25fbGVkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZ3Bpbyk7Ci1pbnQgcnRzNTF4X3R1cm5fb2ZmX2xlZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGdwaW8pOwotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19jYXJkX3JlYWR5KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1bikKLXsKLQlpZiAoY2hpcC0+Y2FyZF9yZWFkeSAmIGNoaXAtPmx1bjJjYXJkW2x1bl0pCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2NhcmRfZXhpc3Qoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCWlmIChjaGlwLT5jYXJkX2V4aXN0ICYgY2hpcC0+bHVuMmNhcmRbbHVuXSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfY2FyZF93cChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4pCi17Ci0JaWYgKGNoaXAtPmNhcmRfd3AgJiBjaGlwLT5sdW4yY2FyZFtsdW5dKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19jYXJkX2ZhaWwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCWlmIChjaGlwLT5jYXJkX2ZhaWwgJiBjaGlwLT5sdW4yY2FyZFtsdW5dKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19jYXJkX2VqZWN0ZWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCWlmIChjaGlwLT5jYXJkX2VqZWN0ZWQgJiBjaGlwLT5sdW4yY2FyZFtsdW5dKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19mYWtlX2NhcmRfcmVhZHkoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBpbnQgbHVuKQotewotCWlmIChjaGlwLT5mYWtlX2NhcmRfcmVhZHkgJiBjaGlwLT5sdW4yY2FyZFtsdW5dKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGdldF9sdW4yY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4pCi17Ci0JcmV0dXJuIGNoaXAtPmx1bjJjYXJkW2x1bl07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2x1bl9tYyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4pCi17Ci0JcmV0dXJuIENIS19CSVQoY2hpcC0+bHVuX21jLCBsdW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2x1bl9tYyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4pCi17Ci0JU0VUX0JJVChjaGlwLT5sdW5fbWMsIGx1bik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9sdW5fbWMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuKQotewotCUNMUl9CSVQoY2hpcC0+bHVuX21jLCBsdW4pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzd2l0Y2hfY2xvY2soc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgY2xrKQotewotCWludCByZXR2YWwgPSAwOwotCi0JaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJcmV0dmFsID0gcnRzNTF4X3N3aXRjaF9zc2NfY2xvY2soY2hpcCwgY2xrKTsKLQllbHNlCi0JCXJldHZhbCA9IHJ0czUxeF9zd2l0Y2hfbm9ybWFsX2Nsb2NrKGNoaXAsIGNsayk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRzNTF4X2NsZWFyX3hkX2Vycm9yKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfU1RPUCwKLQkJCQkgIFhEX1NUT1AgfCBYRF9DTFJfRVJSLCBYRF9TVE9QIHwgWERfQ0xSX0VSUik7Ci0KLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0ZJRk9fQ1RMLCBGSUZPX0ZMVVNILCBGSUZPX0ZMVVNIKTsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0RNQV9SU1QsIERNQV9SRVNFVCwgRE1BX1JFU0VUKTsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNGU01fRUQsIDB4ZjgsIDB4ZjgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRzNTF4X2NsZWFyX3NkX2Vycm9yKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfU1RPUCwKLQkJCQkgIFNEX1NUT1AgfCBTRF9DTFJfRVJSLCBTRF9TVE9QIHwgU0RfQ0xSX0VSUik7Ci0KLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0ZJRk9fQ1RMLCBGSUZPX0ZMVVNILCBGSUZPX0ZMVVNIKTsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0RNQV9SU1QsIERNQV9SRVNFVCwgRE1BX1JFU0VUKTsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNGU01fRUQsIDB4ZjgsIDB4ZjgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRzNTF4X2NsZWFyX21zX2Vycm9yKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfU1RPUCwKLQkJCQkgIE1TX1NUT1AgfCBNU19DTFJfRVJSLCBNU19TVE9QIHwgTVNfQ0xSX0VSUik7Ci0KLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0ZJRk9fQ1RMLCBGSUZPX0ZMVVNILCBGSUZPX0ZMVVNIKTsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIE1DX0RNQV9SU1QsIERNQV9SRVNFVCwgRE1BX1JFU0VUKTsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNGU01fRUQsIDB4ZjgsIDB4ZjgpOwotfQotCi0jZW5kaWYgLyogX19SVFM1MVhfQ0FSRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfY2hpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X2NoaXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q3NTEwZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfY2hpcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxNCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQXV0aG9yOgotICogICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICogTWFpbnRhaW5lcjoKLSAqICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInJ0czUxeC5oIgotI2luY2x1ZGUgInJ0czUxeF9jaGlwLmgiCi0jaW5jbHVkZSAicnRzNTF4X2NhcmQuaCIKLSNpbmNsdWRlICJydHM1MXhfdHJhbnNwb3J0LmgiCi0jaW5jbHVkZSAieGQuaCIKLSNpbmNsdWRlICJtcy5oIgotI2luY2x1ZGUgInNkLmgiCi0KLXN0YXRpYyBpbnQgY2hlY2tfc2Rfc3BlZWRfcHJpb3IodTMyIHNkX3NwZWVkX3ByaW9yKQotewotCWludCBpLCBmYWtlX3BhcmEgPSAwOwotCi0JLyogQ2hlY2sgdGhlIGxlZ2FsaXR5IG9mIHNkX3NwZWVkX3ByaW9yICovCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQl1OCB0bXAgPSAodTgpIChzZF9zcGVlZF9wcmlvciA+PiAoaSAqIDgpKTsKLQkJaWYgKCh0bXAgPCAweDAxKSB8fCAodG1wID4gMHgwNCkpIHsKLQkJCWZha2VfcGFyYSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAhZmFrZV9wYXJhOwotfQotCi1pbnQgcnRzNTF4X3Jlc2V0X2NoaXAoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0KLQlpZiAoQ0hFQ0tfUEtHKGNoaXAsIExRRlA0OCkpIHsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDQVJEX1BXUl9DVEwsIExETzMzMThfUFdSX01BU0ssCi0JCQkJIExET19TVVNQRU5EKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDQVJEX1BXUl9DVEwsIEZPUkNFX0xET19QT1dFUkIsCi0JCQkJIEZPUkNFX0xET19QT1dFUkIpOwotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfUFVMTF9DVEwxLCAweDMwLCAweDEwKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDQVJEX1BVTExfQ1RMNSwgMHgwMywgMHgwMSk7Ci0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgQ0FSRF9QVUxMX0NUTDYsIDB4MEMsIDB4MDQpOwotCX0KLQlpZiAoY2hpcC0+YXNpY19jb2RlKSB7Ci0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU1lTX0RVTU1ZMCwgTllFVF9NU0FLLCBOWUVUX0VOKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDRF9ERUdMSVRDSF9XSURUSCwgMHhGRiwgMHgwOCk7Ci0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDRF9ERUdMSVRDSF9FTiwgWERfQ0RfREVHTElUQ0hfRU4sCi0JCQkJICAgICAgMHgwMCk7Ci0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBTRDMwX0RSSVZFX1NFTCwgU0QzMF9EUklWRV9NQVNLLAotCQkJCSAgICAgIGNoaXAtPm9wdGlvbi5zZDMwX3BhZF9kcml2ZSk7Ci0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX0RSSVZFX1NFTCwgU0QyMF9EUklWRV9NQVNLLAotCQkJCSAgICAgIGNoaXAtPm9wdGlvbi5zZDIwX3BhZF9kcml2ZSk7Ci0JCWlmIChjaGlwLT5ydHM1MTc5KQotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfUFVMTF9DVEw1LCAweDAzLCAweDAxKTsKLQkJaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9QVUxMX0NUTDMsCi0JCQkJCSAgICAgIDB4ODAsIDB4ODApOwotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfUFVMTF9DVEw2LAotCQkJCQkgICAgICAweGYwLCAweEEwKTsKLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1BVTExfQ1RMMSwKLQkJCQkJICAgICAgMHgzMCwgMHgyMCk7Ci0JCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9QVUxMX0NUTDMsCi0JCQkJCSAgICAgIDB4ODAsIDB4ODApOwotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfUFVMTF9DVEw2LAotCQkJCQkgICAgICAweDBjLCAweDA4KTsKLQkJfQotCX0KLQlpZiAoY2hpcC0+b3B0aW9uLnNkX2N0bCAmIFNVUFBPUlRfVUhTNTBfTU1DNDQpIHsKLQkJU0VUX1VIUzUwKGNoaXApOwotCQlSVFM1MVhfREVCVUdQKCJvcHRpb24gZW5hYmxlIFVIUzUwJk1NQzQ0LHNkX2N0bDoweCV4XG4iLAotCQkJY2hpcC0+b3B0aW9uLnNkX2N0bCk7Ci0JfSBlbHNlIHsKLQkJLyogaWYoQ0hFQ0tfUElEKGNoaXAsIDB4MDEzOSkmJkNIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSAqLwotCQlpZiAoKENIRUNLX1BJRChjaGlwLCAweDAxMzkpICYmIENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKQotCQkgICAgfHwgY2hpcC0+cnRzNTE3OSkgewotCQkJU0VUX1VIUzUwKGNoaXApOwotCQkJUlRTNTFYX0RFQlVHUCgiUElEIGVuYWJsZSBVSFM1MCZNTUM0NFxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlDTEVBUl9VSFM1MChjaGlwKTsKLQkJCVJUUzUxWF9ERUJVR1AoIlBJRCBkaXNhYmxlIFVIUzUwJk1NQzQ0XG4iKTsKLQkJfQotCX0KLQotCWlmIChjaGlwLT5vcHRpb24ubXNfZXJycmVnX2ZpeCAmJiAoY2hpcC0+aWNfdmVyc2lvbiA+IDEpKQotCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgMHhGRDRELCAweDAxLCAweDAxKTsKLQlyZXR2YWwgPSBydHM1MXhfd3JpdGVfcGh5X3JlZ2lzdGVyKGNoaXAsIDB4QzIsIDB4N0MpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JLyogR1BJTyBPRSAqLwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfR1BJTywgR1BJT19PRSwgR1BJT19PRSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9ETUExX0NUTCwKLQkJICAgICAgIEVYVEVORF9ETUExX0FTWU5DX1NJR05BTCwgRVhURU5EX0RNQTFfQVNZTkNfU0lHTkFMKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0jaWZkZWYgU1VQUE9SVF9PQ1AKLQlpZiAoY2hpcC0+YXNpY19jb2RlKSB7Ci0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBPQ1BDVEwsIE1TX09DUF9ERVRFQ1RfRU4sCi0JCQkJICAgICAgTVNfT0NQX0RFVEVDVF9FTik7Ci0JCVJUUzUxWF9ERUJVR1AoIkVuYWJsZSBPQ1AgZGV0ZWN0IVxuIik7Ci0JfQotI2VuZGlmCi0JaWYgKGNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKSB7Ci0JCXJ0czUxeF9jYXJkX3Bvd2VyX29uKGNoaXAsIFNEX0NBUkQgfCBNU19DQVJEIHwgWERfQ0FSRCk7Ci0JCXdhaXRfdGltZW91dCgxMCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcnRzNTF4X2luaXRfY2hpcChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQl1OCB2YWw7Ci0KLQljaGlwLT5tYXhfbHVuID0gMDsKLQljaGlwLT5jdXJfY2xrID0gMDsKLQljaGlwLT5jdXJfY2FyZCA9IDA7Ci0KLQljaGlwLT5jYXJkMmx1bltYRF9DQVJEXSA9IDA7Ci0JY2hpcC0+Y2FyZDJsdW5bU0RfQ0FSRF0gPSAwOwotCWNoaXAtPmNhcmQybHVuW01TX0NBUkRdID0gMDsKLQljaGlwLT5jYXJkX2VqZWN0ZWQgPSAwOwotCi0JY2hpcC0+bHVuMmNhcmRbMF0gPSBYRF9DQVJEIHwgU0RfQ0FSRCB8IE1TX0NBUkQ7Ci0jaWZkZWYgQ0xPU0VfU1NDX1BPV0VSCi0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIEZQRENUTCwgU1NDX1BPV0VSX01BU0ssIFNTQ19QT1dFUl9PTik7Ci0JdWRlbGF5KDEwMCk7Ci0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENMS19ESVYsIENMS19DSEFOR0UsIDB4MDApOwotI2VuZGlmCi0JUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfUlVOKTsKLQotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBIV19WRVJTSU9OLCAmdmFsKTsKLQlSVFM1MVhfREVCVUdQKCJIV19WRVJTSU9OOiAweCV4XG4iLCB2YWwpOwotCWlmICh2YWwgJiBGUEdBX1ZFUikgewotCQljaGlwLT5hc2ljX2NvZGUgPSAwOwotCQlSVFM1MVhfREVCVUdQKCJGUEdBIVxuIik7Ci0JfSBlbHNlIHsKLQkJY2hpcC0+YXNpY19jb2RlID0gMTsKLQkJUlRTNTFYX0RFQlVHUCgiQVNJQyFcbiIpOwotCX0KLQljaGlwLT5pY192ZXJzaW9uID0gdmFsICYgSFdfVkVSX01BU0s7Ci0KLQlpZiAoIWNoZWNrX3NkX3NwZWVkX3ByaW9yKGNoaXAtPm9wdGlvbi5zZF9zcGVlZF9wcmlvcikpCi0JCWNoaXAtPm9wdGlvbi5zZF9zcGVlZF9wcmlvciA9IDB4MDEwMjA0MDM7Ci0JUlRTNTFYX0RFQlVHUCgic2Rfc3BlZWRfcHJpb3IgPSAweCUwOHhcbiIsCi0JCSAgICAgICBjaGlwLT5vcHRpb24uc2Rfc3BlZWRfcHJpb3IpOwotCi0JUlRTNTFYX1JFQURfUkVHKGNoaXAsIENBUkRfU0hBUkVfTU9ERSwgJnZhbCk7Ci0JaWYgKHZhbCAmIENBUkRfU0hBUkVfTFFGUF9TRUwpIHsKLQkJY2hpcC0+cGFja2FnZSA9IExRRlA0ODsKLQkJUlRTNTFYX0RFQlVHUCgiUGFja2FnZTogTFFGUDQ4XG4iKTsKLQl9IGVsc2UgewotCQljaGlwLT5wYWNrYWdlID0gUUZOMjQ7Ci0JCVJUUzUxWF9ERUJVR1AoIlBhY2thZ2U6IFFGTjI0XG4iKTsKLQl9Ci0KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgSFNfVVNCX1NUQVQsICZ2YWwpOwotCWlmICh2YWwgJiBVU0JfSElfU1BFRUQpIHsKLQkJY2hpcC0+dXNiX3NwZWVkID0gVVNCXzIwOwotCQlSVFM1MVhfREVCVUdQKCJVU0IgSGlnaCBTcGVlZFxuIik7Ci0JfSBlbHNlIHsKLQkJY2hpcC0+dXNiX3NwZWVkID0gVVNCXzExOwotCQlSVFM1MVhfREVCVUdQKCJVU0IgRnVsbCBTcGVlZFxuIik7Ci0JfQotCi0JUlRTNTFYX1JFQURfUkVHKGNoaXAsIENGR19NT0RFXzEsICZ2YWwpOwotCWlmICh2YWwgJiBSVFM1MTc5KSB7Ci0JCWNoaXAtPnJ0czUxNzkgPSAxOwotCQlSVFM1MVhfREVCVUdQKCJkZXZpY2UgaXMgcnRzNTE3OVxuIik7Ci0JfSBlbHNlIHsKLQkJY2hpcC0+cnRzNTE3OSA9IDA7Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X3Jlc2V0X2NoaXAoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9yZWxlYXNlX2NoaXAoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXJ0czUxeF94ZF9mcmVlX2wycF90YmwoY2hpcCk7Ci0JcnRzNTF4X21zX2ZyZWVfbDJwX3RibChjaGlwKTsKLQljaGlwLT5jYXJkX3JlYWR5ID0gMDsKLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydHM1MXhfYmxpbmtfbGVkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQkvKiBSZWFkL1dyaXRlICovCi0JaWYgKGNoaXAtPmNhcmRfcmVhZHkpIHsKLQkJaWYgKGNoaXAtPmxlZF90b2dnbGVfY291bnRlciA8Ci0JCQkJY2hpcC0+b3B0aW9uLmxlZF90b2dnbGVfaW50ZXJ2YWwpIHsKLQkJCWNoaXAtPmxlZF90b2dnbGVfY291bnRlcisrOwotCQl9IGVsc2UgewotCQkJY2hpcC0+bGVkX3RvZ2dsZV9jb3VudGVyID0gMDsKLQkJCXJ0czUxeF90b2dnbGVfZ3BpbyhjaGlwLCBMRURfR1BJTyk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0czUxeF9hdXRvX2RlbGlua19jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBBVVRPX0RFTElOS19FTiwKLQkJCUFVVE9fREVMSU5LLCBBVVRPX0RFTElOSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0czUxeF9hdXRvX2RlbGlua19mb3JjZV9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBBVVRPX0RFTElOS19FTiwKLQkJCUFVVE9fREVMSU5LIHwgRk9SQ0VfREVMSU5LLAotCQkJQVVUT19ERUxJTksgfCBGT1JDRV9ERUxJTkspOwotfQotCi0jaWZkZWYgVVNJTkdfUE9MTElOR19DWUNMRV9ERUxJTksKLS8qIHVzaW5nIHBvbGxpbmcgY3ljbGUgYXMgZGVsaW5rIHRpbWUgKi8KLXN0YXRpYyB2b2lkIHJ0czUxeF9hdXRvX2RlbGlua19wb2xsaW5nX2N5Y2xlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpZiAoY2hpcC0+YXV0b19kZWxpbmtfY291bnRlciA8PQotCQkJY2hpcC0+b3B0aW9uLmRlbGlua19kZWxheSAqIDIpIHsKLQkJaWYgKGNoaXAtPmF1dG9fZGVsaW5rX2NvdW50ZXIgPT0KLQkJICAgIGNoaXAtPm9wdGlvbi5kZWxpbmtfZGVsYXkpIHsKLQkJCWlmIChjaGlwLT5jYXJkX2V4aXN0KSB7Ci0JCQkJLyogRmFsc2UgY2FyZCAqLwotCQkJCWlmICghY2hpcC0+Y2FyZF9lamVjdGVkKSB7Ci0JCQkJCS8qIGlmIGNhcmQgaXMgbm90IGVqZWN0ZWQgb3Igc2FmZWx5Ci0JCQkJCSAqIHJlbW92ZSx0aGVuIGRvIGZvcmNlIGRlbGluayAqLwotCQkJCQlSVFM1MVhfREVCVUdQKCJGYWxzZSBjYXJkIGluc2VydGVkLCIKLQkJCQkJCQkiZG8gZm9yY2UgZGVsaW5rXG4iKTsKLQkJCQkJcnRzNTF4X2F1dG9fZGVsaW5rX2ZvcmNlX2NtZChjaGlwKTsKLQkJCQkJY2hpcC0+YXV0b19kZWxpbmtfY291bnRlciA9Ci0JCQkJCSAgICBjaGlwLT5vcHRpb24uZGVsaW5rX2RlbGF5ICogMiArIDE7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJObyBjYXJkIGluc2VydGVkLCBkbyBkZWxpbmtcbiIpOwotCQkJCS8qIHJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1BXUl9DVEwsCi0JCQkJCQlEVjMzMThfQVVUT19QV1JfT0ZGLCAwKTsgKi8KLQkJCQlydHM1MXhfYXV0b19kZWxpbmtfY21kKGNoaXApOwotCQkJfQotCQl9Ci0JCWlmIChjaGlwLT5hdXRvX2RlbGlua19jb3VudGVyID09Ci0JCSAgICBjaGlwLT5vcHRpb24uZGVsaW5rX2RlbGF5ICogMikgewotCQkJUlRTNTFYX0RFQlVHUCgiVHJ5IHRvIGRvIGZvcmNlIGRlbGlua1xuIik7Ci0JCQlydHM1MXhfYXV0b19kZWxpbmtfZm9yY2VfY21kKGNoaXApOwotCQl9Ci0JCWNoaXAtPmF1dG9fZGVsaW5rX2NvdW50ZXIrKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0czUxeF9hdXRvX2RlbGluayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JcnRzNTF4X2F1dG9fZGVsaW5rX3BvbGxpbmdfY3ljbGUoY2hpcCk7Ci19Ci0jZWxzZQotLyogc29tZSBvZiBjYWxsZWQgZnVuY3MgYXJlIG5vdCBpbXBsZW1lbnRlZCwgc28gY29tbWVudCBpdCBvdXQgKi8KLXN0YXRpYyB2b2lkIHJ0czUxeF9hdXRvX2RlbGluayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBydHM1MXhfcG9sbGluZ19mdW5jKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQotCXJ0czUxeF9pbml0X2NhcmRzKGNoaXApOwotCi0jaWZkZWYgU1VQUE9SVF9PQ1AKLQkvKiBpZiBPQ1AgaGFwcGVuIGFuZCBjYXJkIGV4aXN0LCB0aGVuIGNsb3NlIGNhcmQgT0UgKi8KLQlpZiAoKGNoaXAtPm9jcF9zdGF0ICYgKE1TX09DUF9OT1cgfCBNU19PQ1BfRVZFUikpICYmCi0JCQkoY2hpcC0+Y2FyZF9leGlzdCkpIHsKLQotCQlydHM1MXhfcHJlcGFyZV9ydW4oY2hpcCk7Ci0KLQkJaWYgKGNoaXAtPmNhcmRfZXhpc3QgJiBTRF9DQVJEKQotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfT0UsIFNEX09VVFBVVF9FTiwgMCk7Ci0JCWVsc2UgaWYgKGNoaXAtPmNhcmRfZXhpc3QgJiBNU19DQVJEKQotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfT0UsIE1TX09VVFBVVF9FTiwgMCk7Ci0JCWVsc2UgaWYgKGNoaXAtPmNhcmRfZXhpc3QgJiBYRF9DQVJEKQotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfT0UsIFhEX09VVFBVVF9FTiwgMCk7Ci0JfQotI2VuZGlmCi0KLQlpZiAoY2hpcC0+aWRsZV9jb3VudGVyIDwgSURMRV9NQVhfQ09VTlQpIHsKLQkJY2hpcC0+aWRsZV9jb3VudGVyKys7Ci0JfSBlbHNlIHsKLQkJaWYgKCFSVFM1MVhfQ0hLX1NUQVQoY2hpcCwgU1RBVF9JRExFKSkgewotCQkJUlRTNTFYX0RFQlVHUCgiSWRsZSBzdGF0ZSFcbiIpOwotCQkJUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfSURMRSk7Ci0JCQljaGlwLT5sZWRfdG9nZ2xlX2NvdW50ZXIgPSAwOwotCQkJLyogSWRsZSBzdGF0ZSwgdHVybiBvZmYgTEVECi0JCQkgKiB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24gKi8KLQkJCWlmIChjaGlwLT5vcHRpb24ubGVkX2Fsd2F5c19vbgotCQkJICAgICYmIChjaGlwLT5jYXJkX2V4aXN0ICYKLQkJCQkoU0RfQ0FSRCB8IE1TX0NBUkQgfCBYRF9DQVJEKSkKLQkJCSAgICAmJiAoIWNoaXAtPmNhcmRfZWplY3RlZCkpIHsKLQkJCQlydHM1MXhfdHVybl9vbl9sZWQoY2hpcCwgTEVEX0dQSU8pOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY2hpcC0+cnRzNTE3OSkgewotCQkJCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsCi0JCQkJCQkJCSAgQ0FSRF9HUElPLAotCQkJCQkJCQkgIDB4MDMsIDB4MDApOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJ0czUxeF90dXJuX29mZl9sZWQoY2hpcCwgTEVEX0dQSU8pOwotCQkJCX0KLQotCQkJfQotCi0jaWZkZWYgQ0xPU0VfU1NDX1BPV0VSCi0JCQlpZiAoIWNoaXAtPmNhcmRfcmVhZHkpIHsKLQkJCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0xLX0RJViwgQ0xLX0NIQU5HRSwKLQkJCQkJCSAgICAgIENMS19DSEFOR0UpOwotCQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBGUERDVEwsCi0JCQkJCQkgICAgICBTU0NfUE9XRVJfTUFTSywKLQkJCQkJCSAgICAgIFNTQ19QT1dFUl9ET1dOKTsKLQkJCQlSVFM1MVhfREVCVUdQKCJDbG9zZSBTU0MgY2xvY2sgcG93ZXIhXG4iKTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0JfQotCi0Jc3dpdGNoIChSVFM1MVhfR0VUX1NUQVQoY2hpcCkpIHsKLQljYXNlIFNUQVRfUlVOOgotCQlydHM1MXhfYmxpbmtfbGVkKGNoaXApOwotCQlydHM1MXhfZG9fcmVtYWluaW5nX3dvcmsoY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTVEFUX0lETEU6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNoaXAtPm9wdGlvbi5hdXRvX2RlbGlua19lbiAmJiAhY2hpcC0+Y2FyZF9yZWFkeSkKLQkJcnRzNTF4X2F1dG9fZGVsaW5rKGNoaXApOwotCWVsc2UKLQkJY2hpcC0+YXV0b19kZWxpbmtfY291bnRlciA9IDA7Ci19Ci0KLXZvaWQgcnRzNTF4X2FkZF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkgICAgdTggY21kX3R5cGUsIHUxNiByZWdfYWRkciwgdTggbWFzaywgdTggZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmIChjaGlwLT5jbWRfaWR4IDwgKChDTURfQlVGX0xFTiAtIENNRF9PRkZTRVQpIC8gNCkpIHsKLQkJaSA9IENNRF9PRkZTRVQgKyBjaGlwLT5jbWRfaWR4ICogNDsKLQkJY2hpcC0+Y21kX2J1ZltpKytdID0KLQkJICAgICgoY21kX3R5cGUgJiAweDAzKSA8PCA2KSB8ICh1OCkgKChyZWdfYWRkciA+PiA4KSAmIDB4M0YpOwotCQljaGlwLT5jbWRfYnVmW2krK10gPSAodTgpIHJlZ19hZGRyOwotCQljaGlwLT5jbWRfYnVmW2krK10gPSBtYXNrOwotCQljaGlwLT5jbWRfYnVmW2krK10gPSBkYXRhOwotCQljaGlwLT5jbWRfaWR4Kys7Ci0JfQotfQotCi1pbnQgcnRzNTF4X3NlbmRfY21kKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZmxhZywgaW50IHRpbWVvdXQpCi17Ci0JaW50IHJlc3VsdDsKLQotCWNoaXAtPmNtZF9idWZbQ05UX0hdID0gKHU4KSAoY2hpcC0+Y21kX2lkeCA+PiA4KTsKLQljaGlwLT5jbWRfYnVmW0NOVF9MXSA9ICh1OCkgKGNoaXAtPmNtZF9pZHgpOwotCWNoaXAtPmNtZF9idWZbU1RBR0VfRkxBR10gPSBmbGFnOwotCi0JcmVzdWx0ID0gcnRzNTF4X3RyYW5zZmVyX2RhdGFfcmNjKGNoaXAsIFNORF9CVUxLX1BJUEUoY2hpcCksCi0JCQkJCSAgKHZvaWQgKikoY2hpcC0+Y21kX2J1ZiksCi0JCQkJCSAgY2hpcC0+Y21kX2lkeCAqIDQgKyBDTURfT0ZGU0VULAotCQkJCQkgIDAsIE5VTEwsIHRpbWVvdXQsIE1PREVfQyk7Ci0JaWYgKHJlc3VsdCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJlc3VsdCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfZ2V0X3JzcChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCByc3BfbGVuLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKHJzcF9sZW4gPD0gMCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19FUlJPUik7Ci0JLyogcnNwX2xlbiBtdXN0IGFsaWduZWQgdG8gZHdvcmQgKi8KLQlpZiAocnNwX2xlbiAlIDQpCi0JCXJzcF9sZW4gKz0gKDQgLSByc3BfbGVuICUgNCk7Ci0KLQlyZXN1bHQgPSBydHM1MXhfdHJhbnNmZXJfZGF0YV9yY2MoY2hpcCwgUkNWX0JVTEtfUElQRShjaGlwKSwKLQkJCQkJICAodm9pZCAqKWNoaXAtPnJzcF9idWYsIHJzcF9sZW4sCi0JCQkJCSAgMCwgTlVMTCwgdGltZW91dCwgU1RBR0VfUik7Ci0JaWYgKHJlc3VsdCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJlc3VsdCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfZ2V0X2NhcmRfc3RhdHVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2ICpzdGF0dXMpCi17Ci0JaW50IHJldHZhbDsKLQl1MTYgdmFsOwotCi0jaWZkZWYgR0VUX0NBUkRfU1RBVFVTX1VTSU5HX0VQQwotCXJldHZhbCA9IHJ0czUxeF9nZXRfZXBjX3N0YXR1cyhjaGlwLCAmdmFsKTsKLQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotI2Vsc2UKLQlyZXR2YWwgPSBydHM1MXhfY3RybF90cmFuc2ZlcihjaGlwLCBSQ1ZfQ1RSTF9QSVBFKGNoaXApLCAweDAyLCAweEMwLAotCQkJCSAgICAgIDAsIDAsICZ2YWwsIDIsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0jZW5kaWYKLQotCWlmIChzdGF0dXMpCi0JCSpzdGF0dXMgPSB2YWw7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgYWRkciwgdTggbWFzaywgdTggZGF0YSkKLXsKLQlpbnQgcmV0dmFsOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIGFkZHIsIG1hc2ssIGRhdGEpOwotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9yZWFkX3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IGFkZHIsIHU4ICpkYXRhKQotewotCWludCByZXR2YWw7Ci0KLQlpZiAoZGF0YSkKLQkJKmRhdGEgPSAwOwotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIGFkZHIsIDAsIDApOwotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAxLCAxMDApOwotCi0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCWlmIChkYXRhKQotCQkqZGF0YSA9IGNoaXAtPnJzcF9idWZbMF07Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IGFkZHIsIHU4IG1hc2ssCi0JCQkgICAgICB1OCBkYXRhKQotewotCWludCByZXR2YWw7Ci0JdTE2IHZhbHVlID0gMCwgaW5kZXggPSAwOwotCi0JdmFsdWUgfD0gKHUxNikgKDMgJiAweDAzKSA8PCAxNDsKLQl2YWx1ZSB8PSAodTE2KSAoYWRkciAmIDB4M0ZGRik7Ci0JaW5kZXggfD0gKHUxNikgbWFzayA8PCA4OwotCWluZGV4IHw9ICh1MTYpIGRhdGE7Ci0KLQlyZXR2YWwgPSBydHM1MXhfY3RybF90cmFuc2ZlcihjaGlwLCBTTkRfQ1RSTF9QSVBFKGNoaXApLCAweDAwLCAweDQwLAotCQkJCSAgICAgIGNwdV90b19iZTE2KHZhbHVlKSwgY3B1X3RvX2JlMTYoaW5kZXgpLAotCQkJCSAgICAgIE5VTEwsIDAsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgYWRkciwgdTggKmRhdGEpCi17Ci0JaW50IHJldHZhbDsKLQl1MTYgdmFsdWUgPSAwOwotCXU4IHZhbDsKLQotCWlmIChkYXRhKQotCQkqZGF0YSA9IDA7Ci0KLQl2YWx1ZSB8PSAodTE2KSAoMiAmIDB4MDMpIDw8IDE0OwotCXZhbHVlIHw9ICh1MTYpIChhZGRyICYgMHgzRkZGKTsKLQotCXJldHZhbCA9IHJ0czUxeF9jdHJsX3RyYW5zZmVyKGNoaXAsIFJDVl9DVFJMX1BJUEUoY2hpcCksIDB4MDAsIDB4QzAsCi0JCQkJICAgICAgY3B1X3RvX2JlMTYodmFsdWUpLCAwLCAmdmFsLCAxLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKGRhdGEpCi0JCSpkYXRhID0gdmFsOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcnRzNTF4X3NlcV93cml0ZV9yZWdpc3RlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBhZGRyLCB1MTYgbGVuLAotCQkJICAgICAgdTggKmRhdGEpCi17Ci0JaW50IHJlc3VsdDsKLQl1MTYgY21kX2xlbiA9IGxlbiArIDEyOwotCi0JaWYgKCFkYXRhKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0VSUk9SKTsKLQotCWNtZF9sZW4gPSAoY21kX2xlbiA8PSBDTURfQlVGX0xFTikgPyBjbWRfbGVuIDogQ01EX0JVRl9MRU47Ci0KLQkvKiBjbWRfbGVuIG11c3QgYWxpZ25lZCB0byBkd29yZCAqLwotCWlmIChjbWRfbGVuICUgNCkKLQkJY21kX2xlbiArPSAoNCAtIGNtZF9sZW4gJSA0KTsKLQotCWNoaXAtPmNtZF9idWZbMF0gPSAnUic7Ci0JY2hpcC0+Y21kX2J1ZlsxXSA9ICdUJzsKLQljaGlwLT5jbWRfYnVmWzJdID0gJ0MnOwotCWNoaXAtPmNtZF9idWZbM10gPSAnUic7Ci0JY2hpcC0+Y21kX2J1ZltQQUNLRVRfVFlQRV0gPSBTRVFfV1JJVEU7Ci0JY2hpcC0+Y21kX2J1Zls1XSA9ICh1OCkgKGxlbiA+PiA4KTsKLQljaGlwLT5jbWRfYnVmWzZdID0gKHU4KSBsZW47Ci0JY2hpcC0+Y21kX2J1ZltTVEFHRV9GTEFHXSA9IDA7Ci0JY2hpcC0+Y21kX2J1Zls4XSA9ICh1OCkgKGFkZHIgPj4gOCk7Ci0JY2hpcC0+Y21kX2J1Zls5XSA9ICh1OCkgYWRkcjsKLQotCW1lbWNweShjaGlwLT5jbWRfYnVmICsgMTIsIGRhdGEsIGxlbik7Ci0KLQlyZXN1bHQgPSBydHM1MXhfdHJhbnNmZXJfZGF0YV9yY2MoY2hpcCwgU05EX0JVTEtfUElQRShjaGlwKSwKLQkJCQkJICAodm9pZCAqKShjaGlwLT5jbWRfYnVmKSwgY21kX2xlbiwgMCwKLQkJCQkJICBOVUxMLCAxMDAsIE1PREVfQyk7Ci0JaWYgKHJlc3VsdCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJlc3VsdCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfc2VxX3JlYWRfcmVnaXN0ZXIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MTYgYWRkciwgdTE2IGxlbiwKLQkJCSAgICAgdTggKmRhdGEpCi17Ci0JaW50IHJlc3VsdDsKLQl1MTYgcnNwX2xlbjsKLQotCWlmICghZGF0YSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19FUlJPUik7Ci0JLyogcnNwX2xlbiBtdXN0IGFsaWduZWQgdG8gZHdvcmQgKi8KLQlpZiAobGVuICUgNCkKLQkJcnNwX2xlbiA9IGxlbiArICg0IC0gbGVuICUgNCk7Ci0JZWxzZQotCQlyc3BfbGVuID0gbGVuOwotCi0JY2hpcC0+Y21kX2J1ZlswXSA9ICdSJzsKLQljaGlwLT5jbWRfYnVmWzFdID0gJ1QnOwotCWNoaXAtPmNtZF9idWZbMl0gPSAnQyc7Ci0JY2hpcC0+Y21kX2J1ZlszXSA9ICdSJzsKLQljaGlwLT5jbWRfYnVmW1BBQ0tFVF9UWVBFXSA9IFNFUV9SRUFEOwotCWNoaXAtPmNtZF9idWZbNV0gPSAodTgpIChyc3BfbGVuID4+IDgpOwotCWNoaXAtPmNtZF9idWZbNl0gPSAodTgpIHJzcF9sZW47Ci0JY2hpcC0+Y21kX2J1ZltTVEFHRV9GTEFHXSA9IFNUQUdFX1I7Ci0JY2hpcC0+Y21kX2J1Zls4XSA9ICh1OCkgKGFkZHIgPj4gOCk7Ci0JY2hpcC0+Y21kX2J1Zls5XSA9ICh1OCkgYWRkcjsKLQotCXJlc3VsdCA9IHJ0czUxeF90cmFuc2Zlcl9kYXRhX3JjYyhjaGlwLCBTTkRfQlVMS19QSVBFKGNoaXApLAotCQkJCQkgICh2b2lkICopKGNoaXAtPmNtZF9idWYpLCAxMiwgMCwgTlVMTCwKLQkJCQkJICAxMDAsIE1PREVfQyk7Ci0JaWYgKHJlc3VsdCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJlc3VsdCk7Ci0KLQlyZXN1bHQgPSBydHM1MXhfdHJhbnNmZXJfZGF0YV9yY2MoY2hpcCwgUkNWX0JVTEtfUElQRShjaGlwKSwKLQkJCQkJICAodm9pZCAqKWRhdGEsIHJzcF9sZW4sIDAsIE5VTEwsIDEwMCwKLQkJCQkJICBTVEFHRV9ESSk7Ci0JaWYgKHJlc3VsdCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJlc3VsdCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfcmVhZF9wcGJ1ZihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4ICpidWYsIGludCBidWZfbGVuKQotewotCWludCByZXR2YWw7Ci0KLQlpZiAoIWJ1ZikKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19FUlJPUik7Ci0KLQlyZXR2YWwgPQotCSAgICBydHM1MXhfc2VxX3JlYWRfcmVnaXN0ZXIoY2hpcCwgUFBCVUZfQkFTRTIsICh1MTYpIGJ1Zl9sZW4sIGJ1Zik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfd3JpdGVfcHBidWYoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCAqYnVmLCBpbnQgYnVmX2xlbikKLXsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCFidWYpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwotCi0JcmV0dmFsID0KLQkgICAgcnRzNTF4X3NlcV93cml0ZV9yZWdpc3RlcihjaGlwLCBQUEJVRl9CQVNFMiwgKHUxNikgYnVmX2xlbiwgYnVmKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF93cml0ZV9waHlfcmVnaXN0ZXIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBhZGRyLCB1OCB2YWwpCi17Ci0JaW50IHJldHZhbDsKLQotCVJUUzUxWF9ERUJVR1AoIldyaXRlIDB4JXggdG8gcGh5IHJlZ2lzdGVyIDB4JXhcbiIsIHZhbCwgYWRkcik7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WU1RBSU4sIDB4RkYsIHZhbCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkNPTlRST0wsIDB4RkYsIGFkZHIgJiAweDBGKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WTE9BRE0sIDB4RkYsIDB4MDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEhTX1ZMT0FETSwgMHhGRiwgMHgwMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkxPQURNLCAweEZGLCAweDAxKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WQ09OVFJPTCwgMHhGRiwKLQkJICAgICAgIChhZGRyID4+IDQpICYgMHgwRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkxPQURNLCAweEZGLCAweDAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WTE9BRE0sIDB4RkYsIDB4MDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEhTX1ZMT0FETSwgMHhGRiwgMHgwMSk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcnRzNTF4X3JlYWRfcGh5X3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggYWRkciwgdTggKnZhbCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JUlRTNTFYX0RFQlVHUCgiUmVhZCBmcm9tIHBoeSByZWdpc3RlciAweCV4XG4iLCBhZGRyKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEhTX1ZDT05UUk9MLCAweEZGLCAweDA3KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WTE9BRE0sIDB4RkYsIDB4MDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEhTX1ZMT0FETSwgMHhGRiwgMHgwMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkxPQURNLCAweEZGLCAweDAxKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WQ09OVFJPTCwgMHhGRiwKLQkJICAgICAgIChhZGRyID4+IDQpICYgMHgwRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkxPQURNLCAweEZGLCAweDAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WTE9BRE0sIDB4RkYsIDB4MDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEhTX1ZMT0FETSwgMHhGRiwgMHgwMSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkNPTlRST0wsIDB4RkYsIGFkZHIgJiAweDBGKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBIU19WTE9BRE0sIDB4RkYsIDB4MDApOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEhTX1ZMT0FETSwgMHhGRiwgMHgwMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgSFNfVkxPQURNLCAweEZGLCAweDAxKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIEhTX1ZTVEFPVVQsIDAsIDApOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAxLCAxMDApOwotCi0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAodmFsKQotCQkqdmFsID0gY2hpcC0+cnNwX2J1ZlswXTsKLQotCVJUUzUxWF9ERUJVR1AoIlJldHVybiB2YWx1ZTogMHgleFxuIiwgY2hpcC0+cnNwX2J1ZlswXSk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXZvaWQgcnRzNTF4X2RvX2JlZm9yZV9wb3dlcl9kb3duKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlSVFM1MVhfREVCVUdQKCJydHM1MXhfZG9fYmVmb3JlX3Bvd2VyX2Rvd25cbiIpOwotCi0JcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCi0JcnRzNTF4X3JlbGVhc2VfY2FyZHMoY2hpcCk7Ci0JaWYgKGNoaXAtPnJ0czUxNzkpCi0JCXJ0czUxeF9lcDBfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9HUElPLCAweDAzLCAweDAwKTsKLQllbHNlCi0JCXJ0czUxeF90dXJuX29mZl9sZWQoY2hpcCwgTEVEX0dQSU8pOwotCi0JY2hpcC0+Y3VyX2NsayA9IDA7Ci0JY2hpcC0+Y2FyZF9leGlzdCA9IDA7Ci0JY2hpcC0+Y3VyX2NhcmQgPSAwOwotCWlmIChjaGlwLT5hc2ljX2NvZGUpIHsKLQkJaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9QVUxMX0NUTDMsIDB4ODAsIDB4MDApOwotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfUFVMTF9DVEw2LCAweGYwLCAweDUwKTsKLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1BVTExfQ1RMMSwgMHgzMCwgMHgxMCk7Ci0JCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9QVUxMX0NUTDMsIDB4ODAsIDB4MDApOwotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfUFVMTF9DVEw2LCAweDBjLCAweDA0KTsKLQkJfQotCX0KLQlpZiAoQ0hFQ0tfUEtHKGNoaXAsIExRRlA0OCkpCi0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1BXUl9DVEwsIExETzMzMThfUFdSX01BU0ssCi0JCQkJICAgICAgTERPX09GRik7Ci19Ci0KLXZvaWQgcnRzNTF4X2NsZWFyX2h3X2Vycm9yKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNGU01fRUQsIDB4ZjgsIDB4ZjgpOwotfQotCi12b2lkIHJ0czUxeF9wcmVwYXJlX3J1bihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0jaWZkZWYgQ0xPU0VfU1NDX1BPV0VSCi0JaWYgKFJUUzUxWF9DSEtfU1RBVChjaGlwLCBTVEFUX0lETEUpICYmICghY2hpcC0+Y2FyZF9yZWFkeSkpIHsKLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIEZQRENUTCwgU1NDX1BPV0VSX01BU0ssCi0JCQkJICAgICAgU1NDX1BPV0VSX09OKTsKLQkJdWRlbGF5KDEwMCk7Ci0JCVJUUzUxWF9ERUJVR1AoIk9wZW4gU1NDIGNsb2NrIHBvd2VyLlxuIik7Ci0KLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENMS19ESVYsIENMS19DSEFOR0UsIDB4MDApOwotCX0KLSNlbmRpZgotfQotCi0jaWZkZWYgX01TR19UUkFDRQotdm9pZCBydHM1MXhfdHJhY2VfbXNnKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY2xlYXIpCi17Ci0JdW5zaWduZWQgY2hhciAqcHRyOwotCWludCBpLCBtc2dfY250OwotCi0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCXB0ciA9IGJ1ZjsKLQotCWlmIChjaGlwLT50cmFjZV9tc2dbY2hpcC0+bXNnX2lkeF0udmFsaWQpCi0JCW1zZ19jbnQgPSBUUkFDRV9JVEVNX0NOVDsKLQllbHNlCi0JCW1zZ19jbnQgPSBjaGlwLT5tc2dfaWR4OwotCSoocHRyKyspID0gKHU4KSAobXNnX2NudCA+PiAyNCk7Ci0JKihwdHIrKykgPSAodTgpIChtc2dfY250ID4+IDE2KTsKLQkqKHB0cisrKSA9ICh1OCkgKG1zZ19jbnQgPj4gOCk7Ci0JKihwdHIrKykgPSAodTgpIG1zZ19jbnQ7Ci0JUlRTNTFYX0RFQlVHUCgiVHJhY2UgbWVzc2FnZSBjb3VudCBpcyAlZFxuIiwgbXNnX2NudCk7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IG1zZ19jbnQ7IGkrKykgewotCQlpbnQgaiwgaWR4OwotCi0JCWlkeCA9IGNoaXAtPm1zZ19pZHggLSBpOwotCQlpZiAoaWR4IDwgMCkKLQkJCWlkeCArPSBUUkFDRV9JVEVNX0NOVDsKLQotCQkqKHB0cisrKSA9ICh1OCkgKGNoaXAtPnRyYWNlX21zZ1tpZHhdLmxpbmUgPj4gOCk7Ci0JCSoocHRyKyspID0gKHU4KSAoY2hpcC0+dHJhY2VfbXNnW2lkeF0ubGluZSk7Ci0JCWZvciAoaiA9IDA7IGogPCBNU0dfRlVOQ19MRU47IGorKykKLQkJCSoocHRyKyspID0gY2hpcC0+dHJhY2VfbXNnW2lkeF0uZnVuY1tqXTsKLQkJZm9yIChqID0gMDsgaiA8IE1TR19GSUxFX0xFTjsgaisrKQotCQkJKihwdHIrKykgPSBjaGlwLT50cmFjZV9tc2dbaWR4XS5maWxlW2pdOwotCQlmb3IgKGogPSAwOyBqIDwgVElNRV9WQUxfTEVOOyBqKyspCi0JCQkqKHB0cisrKSA9IGNoaXAtPnRyYWNlX21zZ1tpZHhdLnRpbWV2YWxfYnVmW2pdOwotCX0KLQotCWlmIChjbGVhcikgewotCQljaGlwLT5tc2dfaWR4ID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IFRSQUNFX0lURU1fQ05UOyBpKyspCi0JCQljaGlwLT50cmFjZV9tc2dbaV0udmFsaWQgPSAwOwotCX0KLX0KLSNlbmRpZgotCi12b2lkIHJ0czUxeF9wcF9zdGF0dXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuLCB1OCAqc3RhdHVzLAotCQkgICAgICB1OCBzdGF0dXNfbGVuKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JdTggY2FyZCA9IHJ0czUxeF9nZXRfbHVuX2NhcmQoY2hpcCwgbHVuKTsKLSNpZmRlZiBTVVBQT1JUX09DCi0JdTggb2Nfbm93X21hc2sgPSAwLCBvY19ldmVyX21hc2sgPSAwOwotI2VuZGlmCi0KLQlpZiAoIXN0YXR1cyB8fCAoc3RhdHVzX2xlbiA8IDMyKSkKLQkJcmV0dXJuOwotCS8qIElDIFZlcnNpb24gKi8KLQlzdGF0dXNbMF0gPSAodTgpIFJUUzUxWF9HRVRfUElEKGNoaXApOwotCXN0YXR1c1sxXSA9ICh1OCkgKGNoaXAtPmljX3ZlcnNpb24pOwotCi0JLyogQXV0byBkZWxpbmsgbW9kZSAqLwotCWlmIChjaGlwLT5vcHRpb24uYXV0b19kZWxpbmtfZW4pCi0JCXN0YXR1c1syXSA9IDB4MTA7Ci0JZWxzZQotCQlzdGF0dXNbMl0gPSAweDAwOwotCi0JLyogU3BlYyB2ZXJzaW9uICovCi0Jc3RhdHVzWzNdID0gMjA7Ci0Jc3RhdHVzWzRdID0gMTA7Ci0Jc3RhdHVzWzVdID0gMDU7Ci0Jc3RhdHVzWzZdID0gMjE7Ci0KLQkvKiBDYXJkIFdQICovCi0JaWYgKGNoaXAtPmNhcmRfd3ApCi0JCXN0YXR1c1s3XSA9IDB4MjA7Ci0JZWxzZQotCQlzdGF0dXNbN10gPSAweDAwOwotCi0jaWZkZWYgU1VQUE9SVF9PQwotCS8qIE92ZXIgY3VycmVudCBzdGF0dXMgKi8KLQlzdGF0dXNbOF0gPSAwOwotCW9jX25vd19tYXNrID0gTVNfT0NQX05PVzsKLQlvY19ldmVyX21hc2sgPSBNU19PQ1BfRVZFUjsKLQotCWlmIChjaGlwLT5vY3Bfc3RhdCAmIG9jX25vd19tYXNrKQotCQlzdGF0dXNbOF0gfD0gMHgwMjsKLQlpZiAoY2hpcC0+b2NwX3N0YXQgJiBvY19ldmVyX21hc2spCi0JCXN0YXR1c1s4XSB8PSAweDAxOwotI2VuZGlmCi0KLQlpZiAoY2FyZCA9PSBTRF9DQVJEKSB7Ci0JCWlmIChDSEtfU0Qoc2RfY2FyZCkpIHsKLQkJCWlmIChDSEtfU0RfSENYQyhzZF9jYXJkKSkgewotCQkJCWlmIChzZF9jYXJkLT5jYXBhY2l0eSA+IDB4NDAwMDAwMCkKLQkJCQkJLyogU0RYQyAqLwotCQkJCQlzdGF0dXNbMHgwRV0gPSAweDAyOwotCQkJCWVsc2UgLyogU0RIQyAqLwotCQkJCQlzdGF0dXNbMHgwRV0gPSAweDAxOwotCQkJfSBlbHNlIHsgLyogU0RTQyAqLwotCQkJCXN0YXR1c1sweDBFXSA9IDB4MDA7Ci0JCQl9Ci0KLQkJCWlmIChDSEtfU0RfU0RSMTA0KHNkX2NhcmQpKQotCQkJCXN0YXR1c1sweDBGXSA9IDB4MDM7Ci0JCQllbHNlIGlmIChDSEtfU0RfRERSNTAoc2RfY2FyZCkpCi0JCQkJc3RhdHVzWzB4MEZdID0gMHgwNDsKLQkJCWVsc2UgaWYgKENIS19TRF9TRFI1MChzZF9jYXJkKSkKLQkJCQlzdGF0dXNbMHgwRl0gPSAweDAyOwotCQkJZWxzZSBpZiAoQ0hLX1NEX0hTKHNkX2NhcmQpKQotCQkJCXN0YXR1c1sweDBGXSA9IDB4MDE7Ci0JCQllbHNlCi0JCQkJc3RhdHVzWzB4MEZdID0gMHgwMDsgLyogTm9ybWFsIHNwZWVkICovCi0JCX0gZWxzZSB7Ci0JCQlpZiAoQ0hLX01NQ19TRUNUT1JfTU9ERShzZF9jYXJkKSkKLQkJCQlzdGF0dXNbMHgwRV0gPSAweDAxOyAvKiBIaWdoIGNhcGFjaXR5ICovCi0JCQllbHNlCi0JCQkJc3RhdHVzWzB4MEVdID0gMHgwMDsgLyogTm9ybWFsIGNhcGFjaXR5ICovCi0KLQkJCWlmIChDSEtfTU1DX0REUjUyKHNkX2NhcmQpKQotCQkJCXN0YXR1c1sweDBGXSA9IDB4MDM7IC8qIEREUiA1Mk0gKi8KLQkJCWVsc2UgaWYgKENIS19NTUNfNTJNKHNkX2NhcmQpKQotCQkJCXN0YXR1c1sweDBGXSA9IDB4MDI7IC8qIFNEUiA1Mk0gKi8KLQkJCWVsc2UgaWYgKENIS19NTUNfMjZNKHNkX2NhcmQpKQotCQkJCXN0YXR1c1sweDBGXSA9IDB4MDE7IC8qIFNEUiAyNk0gKi8KLQkJCWVsc2UKLQkJCQlzdGF0dXNbMHgwRl0gPSAweDAwOyAvKiBOb3JtYWwgc3BlZWQgKi8KLQkJfQotCX0gZWxzZSBpZiAoY2FyZCA9PSBNU19DQVJEKSB7Ci0JCWlmIChDSEtfTVNQUk8obXNfY2FyZCkpIHsKLQkJCWlmIChDSEtfTVNYQyhtc19jYXJkKSkKLQkJCQlzdGF0dXNbMHgwRV0gPSAweDAxOyAvKiBYQyAqLwotCQkJZWxzZQotCQkJCXN0YXR1c1sweDBFXSA9IDB4MDA7Ci0KLQkJCWlmIChDSEtfSEc4QklUKG1zX2NhcmQpKQotCQkJCXN0YXR1c1sweDBGXSA9IDB4MDE7Ci0JCQllbHNlCi0JCQkJc3RhdHVzWzB4MEZdID0gMHgwMDsKLQkJfQotCX0KLQotCS8qIEZ1bmN0aW9uIDAKLQkgKiBTdXBwb3J0IE1hZ2ljIEdhdGUsIENQUk0gYW5kIFBoeVJlZ2lzdGVyIFIvVyAqLwotCXN0YXR1c1sweDE4XSA9IDB4OEE7Ci0KLQkvKiBGdW5jdGlvbiAyCi0JICogU3VwcG9ydCBPQyBMVU4gc3RhdHVzICYgV1AgTFVOIHN0YXR1cyAqLwotCXN0YXR1c1sweDFBXSA9IDB4Mjg7Ci0KLQkvKiBGdW5jdGlvbiAyCi0JICogU3VwcG9ydCBPQyBMVU4gc3RhdHVzICYgV1AgTFVOIHN0YXR1cyAqLwotCXN0YXR1c1sweDFBXSA9IDB4Mjg7Ci19Ci0KLXZvaWQgcnRzNTF4X3JlYWRfc3RhdHVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1biwKLQkJCXU4ICpydHM1MXhfc3RhdHVzLCB1OCBzdGF0dXNfbGVuKQotewotCWlmICghcnRzNTF4X3N0YXR1cyB8fCAoc3RhdHVzX2xlbiA8IDE2KSkKLQkJcmV0dXJuOwotCS8qIFZJRCAqLwotCXJ0czUxeF9zdGF0dXNbMF0gPSAodTgpIChSVFM1MVhfR0VUX1ZJRChjaGlwKSA+PiA4KTsKLQlydHM1MXhfc3RhdHVzWzFdID0gKHU4KSBSVFM1MVhfR0VUX1ZJRChjaGlwKTsKLQotCS8qIFBJRCAqLwotCXJ0czUxeF9zdGF0dXNbMl0gPSAodTgpIChSVFM1MVhfR0VUX1BJRChjaGlwKSA+PiA4KTsKLQlydHM1MXhfc3RhdHVzWzNdID0gKHU4KSBSVFM1MVhfR0VUX1BJRChjaGlwKTsKLQotCS8qIGdiTFVOICovCi0JcnRzNTF4X3N0YXR1c1s0XSA9ICh1OCkgbHVuOwotCi0JLyogTHVuIENhcmQgTnVtYmVyICovCi0JaWYgKGNoaXAtPmNhcmRfZXhpc3QpIHsKLQkJaWYgKGNoaXAtPmNhcmRfZXhpc3QgJiBYRF9DQVJEKQotCQkJcnRzNTF4X3N0YXR1c1s1XSA9IDQ7IC8qIHhEIENhcmQgKi8KLQkJZWxzZSBpZiAoY2hpcC0+Y2FyZF9leGlzdCAmIFNEX0NBUkQpCi0JCQlydHM1MXhfc3RhdHVzWzVdID0gMjsgLyogU0QgQ2FyZCAqLwotCQllbHNlIGlmIChjaGlwLT5jYXJkX2V4aXN0ICYgTVNfQ0FSRCkKLQkJCXJ0czUxeF9zdGF0dXNbNV0gPSAzOyAvKiBNUyBDYXJkICovCi0JCWVsc2UKLQkJCXJ0czUxeF9zdGF0dXNbNV0gPSA3OyAvKiBNdWx0aSAqLwotCX0gZWxzZSB7Ci0JCXJ0czUxeF9zdGF0dXNbNV0gPSA3OwkvKiBNdWx0aSAqLwotCX0KLQotCS8qIFRvdGFsIExVTnMgKi8KLQlydHM1MXhfc3RhdHVzWzZdID0gMTsKLQotCS8qIElDIFZlcnNpb24gKi8KLQlydHM1MXhfc3RhdHVzWzddID0gKHU4KSBSVFM1MVhfR0VUX1BJRChjaGlwKTsKLQlydHM1MXhfc3RhdHVzWzhdID0gY2hpcC0+aWNfdmVyc2lvbjsKLQotCS8qIFBoeXNpY2FsIEV4aXN0ICovCi0JaWYgKGNoZWNrX2NhcmRfZXhpc3QoY2hpcCwgbHVuKSkKLQkJcnRzNTF4X3N0YXR1c1s5XSA9IDE7Ci0JZWxzZQotCQlydHM1MXhfc3RhdHVzWzldID0gMDsKLQotCS8qIE11bHRpIEZsYWcgKi8KLQlydHM1MXhfc3RhdHVzWzEwXSA9IDE7Ci0KLQkvKiBMVU4gVmFsaWQgTWFwICovCi0JcnRzNTF4X3N0YXR1c1sxMV0gPSBYRF9DQVJEIHwgU0RfQ0FSRCB8IE1TX0NBUkQ7Ci0KLQkvKiBMb2dpY2FsIEV4aXN0ICovCi0JaWYgKGNoZWNrX2NhcmRfcmVhZHkoY2hpcCwgbHVuKSkKLQkJcnRzNTF4X3N0YXR1c1sxMl0gPSAxOwotCWVsc2UKLQkJcnRzNTF4X3N0YXR1c1sxMl0gPSAwOwotCi0JLyogRGV0YWlsZWQgVHlwZSAqLwotCWlmIChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgPT0gWERfQ0FSRCkgewotCQlydHM1MXhfc3RhdHVzWzEzXSA9IDB4NDA7Ci0JfSBlbHNlIGlmIChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgPT0gU0RfQ0FSRCkgewotCQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0KLQkJcnRzNTF4X3N0YXR1c1sxM10gPSAweDIwOwotCQlpZiAoQ0hLX1NEKHNkX2NhcmQpKSB7Ci0JCQlpZiAoQ0hLX1NEX0hDWEMoc2RfY2FyZCkpCi0JCQkJcnRzNTF4X3N0YXR1c1sxM10gfD0gMHgwNDsgLyogSGkgY2FwYWNpdHkgU0QgKi8KLQkJCWlmIChDSEtfU0RfSFMoc2RfY2FyZCkpCi0JCQkJcnRzNTF4X3N0YXR1c1sxM10gfD0gMHgwMjsgLyogSGkgc3BlZWQgU0QgKi8KLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF9zdGF0dXNbMTNdIHw9IDB4MDg7IC8qIE1NQyBjYXJkICovCi0JCQlpZiAoQ0hLX01NQ181Mk0oc2RfY2FyZCkpCi0JCQkJcnRzNTF4X3N0YXR1c1sxM10gfD0gMHgwMjsgLyogSGkgc3BlZWQgKi8KLQkJCWlmIChDSEtfTU1DX1NFQ1RPUl9NT0RFKHNkX2NhcmQpKQotCQkJCXJ0czUxeF9zdGF0dXNbMTNdIHw9IDB4MDQ7IC8qIEhpIGNhcGFjaXR5ICovCi0JCX0KLQl9IGVsc2UgaWYgKHJ0czUxeF9nZXRfbHVuX2NhcmQoY2hpcCwgbHVuKSA9PSBNU19DQVJEKSB7Ci0JCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQotCQlpZiAoQ0hLX01TUFJPKG1zX2NhcmQpKSB7Ci0JCQlydHM1MXhfc3RhdHVzWzEzXSA9IDB4Mzg7IC8qIE1TIFBybyAqLwotCQkJaWYgKENIS19IRzhCSVQobXNfY2FyZCkpCi0JCQkJcnRzNTF4X3N0YXR1c1sxM10gfD0gMHgwNDsgLyogSEcgKi8KLSNpZmRlZiBTVVBQT1JUX01TWEMKLQkJCWlmIChDSEtfTVNYQyhtc19jYXJkKSkKLQkJCQlydHM1MXhfc3RhdHVzWzEzXSB8PSAweDAxOyAvKiBNU1hDICovCi0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF9zdGF0dXNbMTNdID0gMHgzMDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJ0czUxeF9zdGF0dXNbMTNdID0gMHg3MDsKLQl9Ci0vKiBTdXBwb3J0IE9DLCBhdXRvIGRlbGluaywgdmVuZG9yIHIvdywgZ2V0IGJ1cyB3aWR0aCAqLwotCXJ0czUxeF9zdGF0dXNbMTRdID0gMHg3ODsKLQotCXJ0czUxeF9zdGF0dXNbMTVdID0gMHg4MjsKLX0KLQotaW50IHJ0czUxeF90cmFuc2Zlcl9kYXRhX3JjYyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBwaXBlLAotCQkJICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sIGludCB1c2Vfc2csCi0JCQkgICAgIHVuc2lnbmVkIGludCAqYWN0X2xlbiwgaW50IHRpbWVvdXQsIHU4IHN0YWdlX2ZsYWcpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9Ci0JICAgIHJ0czUxeF90cmFuc2Zlcl9kYXRhKGNoaXAsIHBpcGUsIGJ1ZiwgbGVuLCB1c2Vfc2csIGFjdF9sZW4sCi0JCQkJIHRpbWVvdXQpOwotCi0JcmV0dXJuIHJldHZhbDsKLQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X2NoaXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9jaGlwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZGViMjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X2NoaXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyMSArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqIEhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpZm5kZWYgX19SVFM1MVhfQ0hJUF9ICi0jZGVmaW5lIF9fUlRTNTFYX0NISVBfSAotCi0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiX3VzdWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLQotI2luY2x1ZGUgInRyYWNlLmgiCi0KLSNkZWZpbmUgU1VQUE9SVF9DUFJNCi0jZGVmaW5lIFNVUFBPUlRfTUFHSUNfR0FURQotI2RlZmluZSBTVVBQT1JUX01TWEMKLSNkZWZpbmUgVVNJTkdfUE9MTElOR19DWUNMRV9ERUxJTksKLQotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0EKLS8qIFVzaW5nIE5PUk1BTF9XUklURSBpbnN0ZWFkIG9mIEFVVE9fV1JJVEUgdG8gc2V0IElDVlRFICovCi0jZGVmaW5lIE1HX1NFVF9JQ1ZfU0xPVwotI2VuZGlmCi0KLSNpZmRlZiBTVVBQT1JUX01TWEMKLSNkZWZpbmUgWENfUE9XRVJDTEFTUwotI2RlZmluZSBTVVBQT1JUX1BDR0xfMVAxOAotI2VuZGlmCi0KLSNkZWZpbmUgR0VUX0NBUkRfU1RBVFVTX1VTSU5HX0VQQwotCi0jZGVmaW5lIENMT1NFX1NTQ19QT1dFUgotCi0jZGVmaW5lIFNVUFBPUlRfT0NQCi0KLSNkZWZpbmUgTVNfU1BFRURVUAotCi0jZGVmaW5lIFNEX1hEX0lPX0ZPTExPV19QV1IKLQotI2RlZmluZSBTRF9OUgkJMgotI2RlZmluZSBNU19OUgkJMwotI2RlZmluZSBYRF9OUgkJNAotI2RlZmluZSBTRF9DQVJECQkoMSA8PCBTRF9OUikKLSNkZWZpbmUgTVNfQ0FSRAkJKDEgPDwgTVNfTlIpCi0jZGVmaW5lIFhEX0NBUkQJCSgxIDw8IFhEX05SKQotCi0jZGVmaW5lIFNEX0NECQkweDAxCi0jZGVmaW5lIE1TX0NECQkweDAyCi0jZGVmaW5lIFhEX0NECQkweDA0Ci0jZGVmaW5lIFNEX1dQCQkweDA4Ci0KLSNkZWZpbmUgTUFYX0FMTE9XRURfTFVOX0NOVAk4Ci0jZGVmaW5lIENNRF9CVUZfTEVOCQkxMDI0Ci0jZGVmaW5lIFBPTExJTkdfSU5URVJWQUwJNTAJLyogNTBtcyAqLwotCi0jZGVmaW5lIFhEX0ZSRUVfVEFCTEVfQ05UCTEyMDAKLSNkZWZpbmUgTVNfRlJFRV9UQUJMRV9DTlQJNTEyCi0KLS8qIEJpdCBPcGVyYXRpb24gKi8KLSNkZWZpbmUgU0VUX0JJVChkYXRhLCBpZHgpCSgoZGF0YSkgfD0gMSA8PCAoaWR4KSkKLSNkZWZpbmUgQ0xSX0JJVChkYXRhLCBpZHgpCSgoZGF0YSkgJj0gfigxIDw8IChpZHgpKSkKLSNkZWZpbmUgQ0hLX0JJVChkYXRhLCBpZHgpCSgoZGF0YSkgJiAoMSA8PCAoaWR4KSkpCi0KLS8qIENvbW1hbmQgdHlwZSAqLwotI2RlZmluZSBSRUFEX1JFR19DTUQJCTAKLSNkZWZpbmUgV1JJVEVfUkVHX0NNRAkJMQotI2RlZmluZSBDSEVDS19SRUdfQ01ECQkyCi0KLSNkZWZpbmUgUEFDS0VUX1RZUEUJCTQKLSNkZWZpbmUgQ05UX0gJCQk1Ci0jZGVmaW5lIENOVF9MCQkJNgotI2RlZmluZSBTVEFHRV9GTEFHCQk3Ci0jZGVmaW5lIENNRF9PRkZTRVQJCTgKLQotLyogUGFja2V0IHR5cGUgKi8KLSNkZWZpbmUgQkFUQ0hfQ01ECQkwCi0jZGVmaW5lIFNFUV9SRUFECQkxCi0jZGVmaW5lIFNFUV9XUklURQkJMgotCi0vKiBTdGFnZSBmbGFnICovCi0jZGVmaW5lIFNUQUdFX1IJCQkweDAxCi0jZGVmaW5lIFNUQUdFX0RJCQkweDAyCi0jZGVmaW5lIFNUQUdFX0RPCQkweDA0Ci0vKiBSZXR1cm4gTVNfVFJBTlNfQ0ZHLCBHRVRfSU5UICovCi0jZGVmaW5lIFNUQUdFX01TX1NUQVRVUwkJMHgwOAotLyogUmV0dXJuIFhEX0NGRywgWERfQ1RMLCBYRF9QQUdFX1NUQVRVUyAqLwotI2RlZmluZSBTVEFHRV9YRF9TVEFUVVMJCTB4MTAKLS8qIENvbW1hbmQgc3RhZ2UgbW9kZSAqLwotI2RlZmluZSBNT0RFX0MJCQkweDAwCi0jZGVmaW5lIE1PREVfQ1IJCQkoU1RBR0VfUikKLSNkZWZpbmUgTU9ERV9DRElSCQkoU1RBR0VfUiB8IFNUQUdFX0RJKQotI2RlZmluZSBNT0RFX0NET1IJCShTVEFHRV9SIHwgU1RBR0VfRE8pCi0KLS8qIEZ1bmN0aW9uIHJldHVybiBjb2RlICovCi0jaWZuZGVmIFNUQVRVU19TVUNDRVNTCi0jZGVmaW5lIFNUQVRVU19TVUNDRVNTCQkwCi0jZW5kaWYKLQotI2RlZmluZSBTVEFUVVNfRkFJTAkJMQotI2RlZmluZSBTVEFUVVNfVElNRURPVVQJCTQKLSNkZWZpbmUgU1RBVFVTX05PTUVNCQk1Ci0jZGVmaW5lIFNUQVRVU19UUkFOU19TSE9SVAk2Ci0jZGVmaW5lIFNUQVRVU19UUkFOU19MT05HCTcKLSNkZWZpbmUgU1RBVFVTX1NUQUxMRUQJCTgKLSNkZWZpbmUgU1RBVFVTX0VSUk9SCQkxMAotCi0jZGVmaW5lIElETEVfTUFYX0NPVU5UCQkxMAotI2RlZmluZSBQT0xMSU5HX1dBSVRfQ05UCTEKLSNkZWZpbmUgTEVEX0dQSU8JCTAKLQotLyogcGFja2FnZSAqLwotI2RlZmluZSBRRk4yNAkJCTAKLSNkZWZpbmUgTFFGUDQ4CQkJMQotCi0jZGVmaW5lIFVTQl8xMQkJCTAKLSNkZWZpbmUgVVNCXzIwCQkJMQotCi0vKgotICogVHJhbnNwb3J0IHJldHVybiBjb2RlcwotICovCi0vKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBnb29kICovCi0jZGVmaW5lIFRSQU5TUE9SVF9HT09ECQkwCi0vKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBmYWlsZWQgKi8KLSNkZWZpbmUgVFJBTlNQT1JUX0ZBSUxFRAkxCi0vKiBUcmFuc3BvcnQgYmFkIChpLmUuIGRldmljZSBkZWFkKSAqLwotI2RlZmluZSBUUkFOU1BPUlRfRVJST1IJCTMKLQotLyogU3VwcG9ydGVkIENsb2NrICovCi1lbnVtIGNhcmRfY2xvY2sgeyBDTEtfMjAgPSAxLCBDTEtfMzAsIENMS180MCwgQ0xLXzUwLCBDTEtfNjAsIENMS184MCwgQ0xLXzEwMCB9OwotCi0jaWZkZWYgX01TR19UUkFDRQotCi0jZGVmaW5lIFRSQUNFX0lURU1fQ05UCQk2NAotCi1zdHJ1Y3QgdHJhY2VfbXNnX3QgewotCXUxNiBsaW5lOwotI2RlZmluZSBNU0dfRlVOQ19MRU4gNjQKLQljaGFyIGZ1bmNbTVNHX0ZVTkNfTEVOXTsKLSNkZWZpbmUgTVNHX0ZJTEVfTEVOIDMyCi0JY2hhciBmaWxlW01TR19GSUxFX0xFTl07Ci0jZGVmaW5lIFRJTUVfVkFMX0xFTiAxNgotCXU4IHRpbWV2YWxfYnVmW1RJTUVfVkFMX0xFTl07Ci0JdTggdmFsaWQ7Ci19OwotCi0jZW5kaWYgLyogX01TR19UUkFDRSAqLwotCi0vKiBTaXplIG9mIHRoZSBhdXRvc2Vuc2UgZGF0YSBidWZmZXIgKi8KLSNkZWZpbmUgU0VOU0VfU0laRQkJMTgKLQotLyogU2Vuc2UgdHlwZSAqLwotI2RlZmluZQlTRU5TRV9UWVBFX05PX1NFTlNFCQkJCTAKLSNkZWZpbmUJU0VOU0VfVFlQRV9NRURJQV9DSEFOR0UJCQkJMQotI2RlZmluZQlTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UCQkJMgotI2RlZmluZQlTRU5TRV9UWVBFX01FRElBX0xCQV9PVkVSX1JBTkdFCQkJMwotI2RlZmluZQlTRU5TRV9UWVBFX01FRElBX0xVTl9OT1RfU1VQUE9SVAkJNAotI2RlZmluZQlTRU5TRV9UWVBFX01FRElBX1dSSVRFX1BST1RFQ1QJCQk1Ci0jZGVmaW5lCVNFTlNFX1RZUEVfTUVESUFfSU5WQUxJRF9DTURfRklFTEQJCTYKLSNkZWZpbmUJU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIJCTcKLSNkZWZpbmUJU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIJCQk4Ci0jZGVmaW5lIFNFTlNFX1RZUEVfRk9STUFUX0NNRF9GQUlMRUQJCQkxMAotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0FURQotLyogQ09QWSBQUk9URUNUSU9OIEtFWSBFWENIQU5HRSBGQUlMVVJFIC0gS0VZIE5PVCBFU1RBQkxJU0hFRCAqLwotI2RlZmluZSBTRU5TRV9UWVBFX01HX0tFWV9GQUlMX05PVF9FU1RBQgkJMHgwYgotLyogQ09QWSBQUk9URUNUSU9OIEtFWSBFWENIQU5HRSBGQUlMVVJFIC0gQVVUSEVOVElDQVRJT04gRkFJTFVSRSAqLwotI2RlZmluZSBTRU5TRV9UWVBFX01HX0tFWV9GQUlMX05PVF9BVVRIRU4JCTB4MGMKLS8qIElOQ09NUEFUSUJMRSBNRURJVU0gSU5TVEFMTEVEICovCi0jZGVmaW5lIFNFTlNFX1RZUEVfTUdfSU5DT01QQVRJQkxFX01FRElVTQkJMHgwZAotLyogV1JJVEUgRVJST1IgKi8KLSNkZWZpbmUgU0VOU0VfVFlQRV9NR19XUklURV9FUlIJCQkJMHgwZQotI2VuZGlmCi0KLS8qLS0tLSBzZW5zZSBrZXkgLS0tLSovCi0jZGVmaW5lIElMR0FMX1JFUSAgICAgICAgICAgICAgIDB4MDUJLyogQ0RCL3BhcmFtZXRlci9pZGVudGlmeSBtc2cgZXJyb3IgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIFNFTlNFX0RBVEEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0tIGVycm9yIGNvZGUgLS0tLSovCi0jZGVmaW5lIENVUl9FUlIgICAgICAgICAgICAgICAgIDB4NzAJLyogY3VycmVudCBlcnJvciAgICAgICAgICAgICAgICAgICAgKi8KLQotLyotLS0tIHNlbnNlIGtleSBJbmZvcm1hdGlvbiAtLS0tKi8KLQotI2RlZmluZSBTS1NWICAgICAgICAgICAgICAgICAgICAweDgwCi0jZGVmaW5lIENEQl9JTExFR0FMICAgICAgICAgICAgIDB4NDAKLQotLyotLS0tIEFTQyAtLS0tKi8KLSNkZWZpbmUgQVNDX0lOVkxEX0NEQiAgICAgICAgICAgMHgyNAotCi0vKi0tLS0gQVNRQyAtLS0tKi8KLSNkZWZpbmUgQVNDUV9JTlZMRF9DREIgICAgICAgICAgMHgwMAotCi1zdHJ1Y3Qgc2Vuc2VfZGF0YV90IHsKLQl1bnNpZ25lZCBjaGFyIGVycl9jb2RlOwkvKiBlcnJvciBjb2RlICovCi0JLyogYml0NyA6IHZhbGlkICAgICAgICAgICAgICAgICAgICAqLwotCS8qICAgKDEgOiBTQ1NJMikgICAgICAgICAgICAgICAgICAgICovCi0JLyogICAoMCA6IFZlbmRvciBzcGVjaWZpYykgICAgICAgICAgKi8KLQkvKiBiaXQ2LTAgOiBlcnJvciBjb2RlICAgICAgICAgICAgICovCi0JLyogICgweDcwIDogY3VycmVudCBlcnJvcikgICAgICAgICAgKi8KLQkvKiAgKDB4NzEgOiBzcGVjaWZpYyBjb21tYW5kIGVycm9yKSAqLwotCXVuc2lnbmVkIGNoYXIgc2VnX25vOwkvKiBzZWdtZW50IE5vLiAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwkvKiBieXRlNSA6IElMSSAgICAgICAgICAgICAgICAgICAgICAqLwotCS8qIGJpdDMtMCA6IHNlbnNlIGtleSAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIGluZm9bNF07CS8qIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgYWRfc2Vuc2VfbGVuOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGRhdGEgbGVuZ3RoICAgICAqLwotCXVuc2lnbmVkIGNoYXIgY21kX2luZm9bNF07CS8qIGNvbW1hbmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gICAgICAqLwotCXVuc2lnbmVkIGNoYXIgYXNjOwkvKiBBU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgYXNjcTsJLyogQVNDUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHJmdTsJLyogRlJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHNuc19rZXlfaW5mb1szXTsJLyogc2Vuc2Uga2V5IHNwZWNpZmljIGluZm9ybWF0aW9uICAgICovCi19OwotCi0vKiBzZF9jdGwgYml0IG1hcCAqLwotLyogU0QgcHVzaCBwb2ludCBjb250cm9sLCBiaXQgMCwgMSAqLwotI2RlZmluZSBTRF9QVVNIX1BPSU5UX0NUTF9NQVNLCQkweDAzCi0jZGVmaW5lIFNEX1BVU0hfUE9JTlRfREVMQVkJCTB4MDEKLSNkZWZpbmUgU0RfUFVTSF9QT0lOVF9BVVRPCQkweDAyCi0vKiBTRCBzYW1wbGUgcG9pbnQgY29udHJvbCwgYml0IDIsIDMgKi8KLSNkZWZpbmUgU0RfU0FNUExFX1BPSU5UX0NUTF9NQVNLCTB4MEMKLSNkZWZpbmUgU0RfU0FNUExFX1BPSU5UX0RFTEFZCQkweDA0Ci0jZGVmaW5lIFNEX1NBTVBMRV9QT0lOVF9BVVRPCQkweDA4Ci0vKiBTRCBERFIgVHggcGhhc2Ugc2V0IGJ5IHVzZXIsIGJpdCA0ICovCi0jZGVmaW5lIFNEX0REUl9UWF9QSEFTRV9TRVRfQllfVVNFUgkweDEwCi0vKiBNTUMgRERSIFR4IHBoYXNlIHNldCBieSB1c2VyLCBiaXQgNSAqLwotI2RlZmluZSBNTUNfRERSX1RYX1BIQVNFX1NFVF9CWV9VU0VSCTB4MjAKLS8qIFN1cHBvcnQgTU1DIEREUiBtb2RlLCBiaXQgNiAqLwotLyojZGVmaW5lIFNVUFBPUlRfTU1DX0REUl9NT0RFICAgICAgICAgIDB4NDAgKi8KLSNkZWZpbmUgU1VQUE9SVF9VSFM1MF9NTUM0NAkJMHg0MAotCi1zdHJ1Y3QgcnRzNTF4X29wdGlvbiB7Ci0JaW50IHJ0czUxeF9tc3Byb19mb3JtYXR0ZXJfZW5hYmxlOwotCi0JLyogY2FyZCBjbG9jayBleHBlY3RlZCBieSB1c2VyIGZvciBmcGdhIHBsYXRmb3JtICovCi0JaW50IGZwZ2Ffc2Rfc2RyMTA0X2NsazsKLQlpbnQgZnBnYV9zZF9kZHI1MF9jbGs7Ci0JaW50IGZwZ2Ffc2Rfc2RyNTBfY2xrOwotCWludCBmcGdhX3NkX2hzX2NsazsKLQlpbnQgZnBnYV9tbWNfNTJtX2NsazsKLQlpbnQgZnBnYV9tc19oZ19jbGs7Ci0JaW50IGZwZ2FfbXNfNGJpdF9jbGs7Ci0KLQkvKiBjYXJkIGNsb2NrIGV4cGVjdGVkIGJ5IHVzZXIgZm9yIGFzaWMgcGxhdGZvcm0gKi8KLQlpbnQgYXNpY19zZF9zZHIxMDRfY2xrOwotCWludCBhc2ljX3NkX2RkcjUwX2NsazsKLQlpbnQgYXNpY19zZF9zZHI1MF9jbGs7Ci0JaW50IGFzaWNfc2RfaHNfY2xrOwotCWludCBhc2ljX21tY181Mm1fY2xrOwotCWludCBhc2ljX21zX2hnX2NsazsKLQlpbnQgYXNpY19tc180Yml0X2NsazsKLQotCXU4IHNzY19kZXB0aF9zZF9zZHIxMDQ7CS8qIHN3ICovCi0JdTggc3NjX2RlcHRoX3NkX2RkcjUwOwkvKiBzdyAqLwotCXU4IHNzY19kZXB0aF9zZF9zZHI1MDsJLyogc3cgKi8KLQl1OCBzc2NfZGVwdGhfc2RfaHM7CS8qIHN3ICovCi0JdTggc3NjX2RlcHRoX21tY181Mm07CS8qIHN3ICovCi0JdTggc3NjX2RlcHRoX21zX2hnOwkvKiBzdyAqLwotCXU4IHNzY19kZXB0aF9tc180Yml0OwkvKiBzdyAqLwotCXU4IHNzY19kZXB0aF9sb3dfc3BlZWQ7CS8qIHN3ICovCi0KLQkvKiBTRC9NTUMgVHggcGhhc2UgKi8KLQlpbnQgc2RfZGRyX3R4X3BoYXNlOwkvKiBFbmFibGVkIGJ5IGJpdCA0IG9mIHNkX2N0bCAqLwotCWludCBtbWNfZGRyX3R4X3BoYXNlOwkvKiBFbmFibGVkIGJ5IGJpdCA1IG9mIHNkX2N0bCAqLwotCi0JLyogcHJpb3JpdHkgb2YgY2hvb3Npbmcgc2Qgc3BlZWQgZnVuY2l0b24gKi8KLQl1MzIgc2Rfc3BlZWRfcHJpb3I7Ci0KLQkvKiBzZCBjYXJkIGNvbnRyb2wgKi8KLQl1MzIgc2RfY3RsOwotCi0JLyogRW5hYmxlIFNlbGVjdGl2ZSBTdXNwZW5kICovCi0JaW50IHNzX2VuOwotCS8qIEludGVydmFsIHRvIGVudGVyIFNTIGZyb20gSURMRSBzdGF0ZSAoc2Vjb25kKSAqLwotCWludCBzc19kZWxheTsKLQotCS8qIEVuYWJsZSBTU0MgY2xvY2sgKi8KLQlpbnQgc3NjX2VuOwotCi0JaW50IGF1dG9fZGVsaW5rX2VuOwotCi0JLyogc2FuZ2R5MjAxMC0wNy0xMzphZGQgRlQyIGZhc3QgbW9kZSAqLwotCWludCBGVDJfZmFzdF9tb2RlOwotCS8qIHNhbmdkeTIwMTAtMDctMTU6Ci0JICogYWRkIGZvciBjb25maWcgZGVsYXkgYmV0d2VlbiAxLzQgUE1PUyBhbmQgMy80IFBNT1MgKi8KLQlpbnQgcHdyX2RlbGF5OwotCi0JaW50IHJ0czUxeF94ZF9yd19zdGVwOwkJLyogYWRkIHRvIHR1bmUgeGQgdFJQICovCi0JaW50IEQzMzE4X29mZl9kZWxheTsJLyogYWRkIHRvIHR1bmUgRDMzMTggb2ZmIGRlbGF5IHRpbWUgKi8KLQlpbnQgZGVsaW5rX2RlbGF5OwkvKiBhZGQgdG8gdHVuZSBkZWxpbmsgZGVsYXkgdGltZSAqLwotCS8qIGFkZCBmb3IgcnRzNTEyOSB0byBlbmFibGUvZGlzYWJsZSBEMzMxOCBvZmYgKi8KLQl1OCBydHM1MTI5X0QzMzE4X29mZl9lbmFibGU7Ci0JdTggc2QyMF9wYWRfZHJpdmU7CS8qIGFkZCB0byBjb25maWcgU0QyMCBQQUQgZHJpdmUgKi8KLQl1OCBzZDMwX3BhZF9kcml2ZTsJLyogYWRkIHRvIGNvbmZpZyBTRDMwIHBhZCBkcml2ZSAqLwotCS8qaWYgcmVzZXQgb3IgcncgZmFpbCx0aGVuIHNldCBTRDIwIHBhZCBkcml2ZSBhZ2FpbiAqLwotCXU4IHJlc2V0X29yX3J3X2ZhaWxfc2V0X3BhZF9kcml2ZTsKLQotCXU4IGRlYm91bmNlX251bTsJLyogZGVib3VuY2UgbnVtYmVyICovCi0JdTggbGVkX3RvZ2dsZV9pbnRlcnZhbDsJLyogdXNlZCB0byBjb250cm9sIGxlZCB0b2dnbGUgc3BlZWQgKi8KLQlpbnQgcnRzNTF4X3hkX3J3bl9zdGVwOwotCXU4IHNkX3NlbmRfc3RhdHVzX2VuOwotCS8qIHVzZWQgdG8gc3RvcmUgZGVmYXVsdCBwaGFzZSB3aGljaCBpcwotCSAqIHVzZWQgd2hlbiBwaGFzZSB0dW5lIGFsbCBwYXNzLiAqLwotCXU4IGRkcjUwX3R4X3BoYXNlOwotCXU4IGRkcjUwX3J4X3BoYXNlOwotCXU4IHNkcjUwX3R4X3BoYXNlOwotCXU4IHNkcjUwX3J4X3BoYXNlOwotCS8qIHVzZWQgdG8gZW5hYmxlIHNlbGVjdCBzZHI1MCB0eCBwaGFzZSBhY2NvcmRpbmcgdG8gcHJvcG9ydGlvbi4gKi8KLQl1OCBzZHI1MF9waGFzZV9zZWw7Ci0JdTggbXNfZXJycmVnX2ZpeDsKLQl1OCByZXNldF9tbWNfZmlyc3Q7Ci0JdTggc3BlZWRfbW1jOwkJLyogd2hlbiBzZXQsIHRoZW4gdHJ5IENNRDU1IG9ubHkgdHdpY2UgKi8KLQl1OCBsZWRfYWx3YXlzX29uOwkvKiBpZiBzZXQsIHRoZW4gbGVkIGFsd2F5cyBvbiB3aGVuIGNhcmQgZXhpc3QgKi8KLQl1OCBkdjE4X3ZvbHRhZ2U7CS8qIGFkZCB0byB0dW5lIGR2MTggdm9sdGFnZSAqLwotfTsKLQotI2RlZmluZSBNU19GT1JNQVRURVJfRU5BQkxFRChjaGlwKQkoKGNoaXApLT5vcHRpb24ucnRzNTF4X21zcHJvX2Zvcm1hdHRlcl9lbmFibGUpCi0KLXN0cnVjdCBydHM1MXhfY2hpcDsKLQotdHlwZWRlZiBpbnQgKCpydHM1MXhfY2FyZF9yd19mdW5jKSAoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsCi0JCQkgICAgIHUzMiBzZWNfYWRkciwgdTE2IHNlY19jbnQpOwotCi0vKiBGb3IgTVMgQ2FyZCAqLwotI2RlZmluZSAgICBNQVhfREVGRUNUSVZFX0JMT0NLICAgICAxMAotCi1zdHJ1Y3Qgem9uZV9lbnRyeSB7Ci0JdTE2ICpsMnBfdGFibGU7Ci0JdTE2ICpmcmVlX3RhYmxlOwotCXUxNiBkZWZlY3RfbGlzdFtNQVhfREVGRUNUSVZFX0JMT0NLXTsJLyogRm9yIE1TIGNhcmQgb25seSAqLwotCWludCBzZXRfaW5kZXg7Ci0JaW50IGdldF9pbmRleDsKLQlpbnQgdW51c2VkX2Jsa19jbnQ7Ci0JaW50IGRpc2FibGVfY291bnQ7Ci0JLyogVG8gaW5kaWNhdGUgd2hldGhlciB0aGUgTDJQIHRhYmxlIG9mIHRoaXMgem9uZSBoYXMgYmVlbiBidWlsdC4gKi8KLQlpbnQgYnVpbGRfZmxhZzsKLX07Ci0KLXN0cnVjdCB4ZF9kZWxheV93cml0ZV90YWcgewotCXUzMiBvbGRfcGh5YmxvY2s7Ci0JdTMyIG5ld19waHlibG9jazsKLQl1MzIgbG9nYmxvY2s7Ci0JdTggcGFnZW9mZjsKLQl1OCBkZWxheV93cml0ZV9mbGFnOwotfTsKLQotc3RydWN0IHhkX2luZm8gewotCXU4IG1ha2VyX2NvZGU7Ci0JdTggZGV2aWNlX2NvZGU7Ci0JdTggYmxvY2tfc2hpZnQ7Ci0JdTggcGFnZV9vZmY7Ci0JdTggYWRkcl9jeWNsZTsKLQl1MTYgY2lzX2Jsb2NrOwotCXU4IG11bHRpX2ZsYWc7Ci0JdTggZXJyX2NvZGU7Ci0JdTMyIGNhcGFjaXR5OwotCi0Jc3RydWN0IHpvbmVfZW50cnkgKnpvbmU7Ci0JaW50IHpvbmVfY250OwotCi0Jc3RydWN0IHhkX2RlbGF5X3dyaXRlX3RhZyBkZWxheV93cml0ZTsKLQotCWludCBjb3VudGVyOwotCi0JaW50IHhkX2Nsb2NrOwotfTsKLQotI2RlZmluZSBUWVBFX1NECQkJMHgwMDAwCi0jZGVmaW5lIFRZUEVfTU1DCQkweDAwMDEKLQotLyogVFlQRV9TRCAqLwotI2RlZmluZSBTRF9IUwkJCTB4MDEwMAotI2RlZmluZSBTRF9TRFI1MAkJMHgwMjAwCi0jZGVmaW5lIFNEX0REUjUwCQkweDA0MDAKLSNkZWZpbmUgU0RfU0RSMTA0CQkweDA4MDAKLSNkZWZpbmUgU0RfSENYQwkJCTB4MTAwMAotCi0vKiBUWVBFX01NQyAqLwotI2RlZmluZSBNTUNfMjZNCQkJMHgwMTAwCi0jZGVmaW5lIE1NQ181Mk0JCQkweDAyMDAKLSNkZWZpbmUgTU1DXzRCSVQJCTB4MDQwMAotI2RlZmluZSBNTUNfOEJJVAkJMHgwODAwCi0jZGVmaW5lIE1NQ19TRUNUT1JfTU9ERQkJMHgxMDAwCi0jZGVmaW5lIE1NQ19ERFI1MgkJMHgyMDAwCi0KLS8qIFNEIGNhcmQgKi8KLSNkZWZpbmUgQ0hLX1NEKHNkX2NhcmQpCQkJKCgoc2RfY2FyZCktPnNkX3R5cGUgJiAweEZGKSA9PSBUWVBFX1NEKQotI2RlZmluZSBDSEtfU0RfSFMoc2RfY2FyZCkJXAotCShDSEtfU0Qoc2RfY2FyZCkgJiYgKChzZF9jYXJkKS0+c2RfdHlwZSAmIFNEX0hTKSkKLSNkZWZpbmUgQ0hLX1NEX1NEUjUwKHNkX2NhcmQpCQlcCi0JKENIS19TRChzZF9jYXJkKSAmJiAoKHNkX2NhcmQpLT5zZF90eXBlICYgU0RfU0RSNTApKQotI2RlZmluZSBDSEtfU0RfRERSNTAoc2RfY2FyZCkJXAotCShDSEtfU0Qoc2RfY2FyZCkgJiYgKChzZF9jYXJkKS0+c2RfdHlwZSAmIFNEX0REUjUwKSkKLSNkZWZpbmUgQ0hLX1NEX1NEUjEwNChzZF9jYXJkKQlcCi0JKENIS19TRChzZF9jYXJkKSAmJiAoKHNkX2NhcmQpLT5zZF90eXBlICYgU0RfU0RSMTA0KSkKLSNkZWZpbmUgQ0hLX1NEX0hDWEMoc2RfY2FyZCkJXAotCShDSEtfU0Qoc2RfY2FyZCkgJiYgKChzZF9jYXJkKS0+c2RfdHlwZSAmIFNEX0hDWEMpKQotI2RlZmluZSBDSEtfU0QzMF9TUEVFRChzZF9jYXJkKQlcCi0JKENIS19TRF9TRFI1MChzZF9jYXJkKSB8fCBDSEtfU0RfRERSNTAoc2RfY2FyZCkgfHxcCi0JIENIS19TRF9TRFIxMDQoc2RfY2FyZCkpCi0KLSNkZWZpbmUgU0VUX1NEKHNkX2NhcmQpCQkJKChzZF9jYXJkKS0+c2RfdHlwZSA9IFRZUEVfU0QpCi0jZGVmaW5lIFNFVF9TRF9IUyhzZF9jYXJkKQkJKChzZF9jYXJkKS0+c2RfdHlwZSB8PSBTRF9IUykKLSNkZWZpbmUgU0VUX1NEX1NEUjUwKHNkX2NhcmQpCQkoKHNkX2NhcmQpLT5zZF90eXBlIHw9IFNEX1NEUjUwKQotI2RlZmluZSBTRVRfU0RfRERSNTAoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgfD0gU0RfRERSNTApCi0jZGVmaW5lIFNFVF9TRF9TRFIxMDQoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgfD0gU0RfU0RSMTA0KQotI2RlZmluZSBTRVRfU0RfSENYQyhzZF9jYXJkKQkJKChzZF9jYXJkKS0+c2RfdHlwZSB8PSBTRF9IQ1hDKQotCi0jZGVmaW5lIENMUl9TRF9IUyhzZF9jYXJkKQkJKChzZF9jYXJkKS0+c2RfdHlwZSAmPSB+U0RfSFMpCi0jZGVmaW5lIENMUl9TRF9TRFI1MChzZF9jYXJkKQkJKChzZF9jYXJkKS0+c2RfdHlwZSAmPSB+U0RfU0RSNTApCi0jZGVmaW5lIENMUl9TRF9ERFI1MChzZF9jYXJkKQkJKChzZF9jYXJkKS0+c2RfdHlwZSAmPSB+U0RfRERSNTApCi0jZGVmaW5lIENMUl9TRF9TRFIxMDQoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgJj0gflNEX1NEUjEwNCkKLSNkZWZpbmUgQ0xSX1NEX0hDWEMoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgJj0gflNEX0hDWEMpCi0jZGVmaW5lIENMUl9TRDMwX1NQRUVEKHNkX2NhcmQpCVwKLQkoKHNkX2NhcmQpLT5zZF90eXBlICY9IH4oU0RfU0RSNTB8U0RfRERSNTB8U0RfU0RSMTA0KSkKLQotLyogTU1DIGNhcmQgKi8KLSNkZWZpbmUgQ0hLX01NQyhzZF9jYXJkKQlcCi0JKCgoc2RfY2FyZCktPnNkX3R5cGUgJiAweEZGKSA9PSBUWVBFX01NQykKLSNkZWZpbmUgQ0hLX01NQ18yNk0oc2RfY2FyZCkJXAotCShDSEtfTU1DKHNkX2NhcmQpICYmICgoc2RfY2FyZCktPnNkX3R5cGUgJiBNTUNfMjZNKSkKLSNkZWZpbmUgQ0hLX01NQ181Mk0oc2RfY2FyZCkJXAotCShDSEtfTU1DKHNkX2NhcmQpICYmICgoc2RfY2FyZCktPnNkX3R5cGUgJiBNTUNfNTJNKSkKLSNkZWZpbmUgQ0hLX01NQ180QklUKHNkX2NhcmQpCVwKLQkoQ0hLX01NQyhzZF9jYXJkKSAmJiAoKHNkX2NhcmQpLT5zZF90eXBlICYgTU1DXzRCSVQpKQotI2RlZmluZSBDSEtfTU1DXzhCSVQoc2RfY2FyZCkJXAotCShDSEtfTU1DKHNkX2NhcmQpICYmICgoc2RfY2FyZCktPnNkX3R5cGUgJiBNTUNfOEJJVCkpCi0jZGVmaW5lIENIS19NTUNfU0VDVE9SX01PREUoc2RfY2FyZClcCi0JKENIS19NTUMoc2RfY2FyZCkgJiYgKChzZF9jYXJkKS0+c2RfdHlwZSAmIE1NQ19TRUNUT1JfTU9ERSkpCi0jZGVmaW5lIENIS19NTUNfRERSNTIoc2RfY2FyZCkJXAotCShDSEtfTU1DKHNkX2NhcmQpICYmICgoc2RfY2FyZCktPnNkX3R5cGUgJiBNTUNfRERSNTIpKQotCi0jZGVmaW5lIFNFVF9NTUMoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgPSBUWVBFX01NQykKLSNkZWZpbmUgU0VUX01NQ18yNk0oc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgfD0gTU1DXzI2TSkKLSNkZWZpbmUgU0VUX01NQ181Mk0oc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgfD0gTU1DXzUyTSkKLSNkZWZpbmUgU0VUX01NQ180QklUKHNkX2NhcmQpCQkoKHNkX2NhcmQpLT5zZF90eXBlIHw9IE1NQ180QklUKQotI2RlZmluZSBTRVRfTU1DXzhCSVQoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgfD0gTU1DXzhCSVQpCi0jZGVmaW5lIFNFVF9NTUNfU0VDVE9SX01PREUoc2RfY2FyZCkJKChzZF9jYXJkKS0+c2RfdHlwZSB8PSBNTUNfU0VDVE9SX01PREUpCi0jZGVmaW5lIFNFVF9NTUNfRERSNTIoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgfD0gTU1DX0REUjUyKQotCi0jZGVmaW5lIENMUl9NTUNfMjZNKHNkX2NhcmQpCQkoKHNkX2NhcmQpLT5zZF90eXBlICY9IH5NTUNfMjZNKQotI2RlZmluZSBDTFJfTU1DXzUyTShzZF9jYXJkKQkJKChzZF9jYXJkKS0+c2RfdHlwZSAmPSB+TU1DXzUyTSkKLSNkZWZpbmUgQ0xSX01NQ180QklUKHNkX2NhcmQpCQkoKHNkX2NhcmQpLT5zZF90eXBlICY9IH5NTUNfNEJJVCkKLSNkZWZpbmUgQ0xSX01NQ184QklUKHNkX2NhcmQpCQkoKHNkX2NhcmQpLT5zZF90eXBlICY9IH5NTUNfOEJJVCkKLSNkZWZpbmUgQ0xSX01NQ19TRUNUT1JfTU9ERShzZF9jYXJkKQkoKHNkX2NhcmQpLT5zZF90eXBlICY9IH5NTUNfU0VDVE9SX01PREUpCi0jZGVmaW5lIENMUl9NTUNfRERSNTIoc2RfY2FyZCkJCSgoc2RfY2FyZCktPnNkX3R5cGUgJj0gfk1NQ19ERFI1MikKLQotI2RlZmluZSBDSEtfTU1DX0hTKHNkX2NhcmQpCVwKLQkoQ0hLX01NQ181Mk0oc2RfY2FyZCkgJiYgQ0hLX01NQ18yNk0oc2RfY2FyZCkpCi0jZGVmaW5lIENMUl9NTUNfSFMoc2RfY2FyZCkJCQlcCi1kbyB7CQkJCQkJXAotCUNMUl9NTUNfRERSNTIoc2RfY2FyZCk7CQkJXAotCUNMUl9NTUNfNTJNKHNkX2NhcmQpOwkJCVwKLQlDTFJfTU1DXzI2TShzZF9jYXJkKTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNEX1NVUFBPUlRfQ0xBU1NfVEVOCQkweDAxCi0jZGVmaW5lIFNEX1NVUFBPUlRfMVY4CQkJMHgwMgotCi0jZGVmaW5lIFNEX1NFVF9DTEFTU19URU4oc2RfY2FyZCkJXAotCSgoc2RfY2FyZCktPnNkX3NldHRpbmcgfD0gU0RfU1VQUE9SVF9DTEFTU19URU4pCi0jZGVmaW5lIFNEX0NIS19DTEFTU19URU4oc2RfY2FyZCkJXAotCSgoc2RfY2FyZCktPnNkX3NldHRpbmcgJiBTRF9TVVBQT1JUX0NMQVNTX1RFTikKLSNkZWZpbmUgU0RfQ0xSX0NMQVNTX1RFTihzZF9jYXJkKQlcCi0JKChzZF9jYXJkKS0+c2Rfc2V0dGluZyAmPSB+U0RfU1VQUE9SVF9DTEFTU19URU4pCi0jZGVmaW5lIFNEX1NFVF8xVjgoc2RfY2FyZCkJCVwKLQkoKHNkX2NhcmQpLT5zZF9zZXR0aW5nIHw9IFNEX1NVUFBPUlRfMVY4KQotI2RlZmluZSBTRF9DSEtfMVY4KHNkX2NhcmQpCQlcCi0JKChzZF9jYXJkKS0+c2Rfc2V0dGluZyAmIFNEX1NVUFBPUlRfMVY4KQotI2RlZmluZSBTRF9DTFJfMVY4KHNkX2NhcmQpCQlcCi0JKChzZF9jYXJkKS0+c2Rfc2V0dGluZyAmPSB+U0RfU1VQUE9SVF8xVjgpCi0jZGVmaW5lIENMUl9SRVRSWV9TRDIwX01PREUoc2RfY2FyZCkJCVwKLQkoKHNkX2NhcmQpLT5yZXRyeV9TRDIwX21vZGUgPSAwKQotI2RlZmluZSBTRVRfUkVUUllfU0QyMF9NT0RFKHNkX2NhcmQpCQlcCi0JKChzZF9jYXJkKS0+cmV0cnlfU0QyMF9tb2RlID0gMSkKLSNkZWZpbmUgQ0hLX1JFVFJZX1NEMjBfTU9ERShzZF9jYXJkKQkJXAotCSgoc2RfY2FyZCktPnJldHJ5X1NEMjBfbW9kZSA9PSAxKQotCi1zdHJ1Y3Qgc2RfaW5mbyB7Ci0JdTE2IHNkX3R5cGU7Ci0JdTggZXJyX2NvZGU7Ci0JdTggc2RfZGF0YV9idWZfcmVhZHk7Ci0JdTMyIHNkX2FkZHI7Ci0JdTMyIGNhcGFjaXR5OwotCi0JdTggcmF3X2NzZFsxNl07Ci0JdTggcmF3X3Njcls4XTsKLQotCS8qIFNlcXVlbnRpYWwgUlcgKi8KLQlpbnQgc2VxX21vZGU7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gcHJlX2RpcjsKLQl1MzIgcHJlX3NlY19hZGRyOwotCXUxNiBwcmVfc2VjX2NudDsKLQotCWludCBjb3VudGVyOwotCi0JaW50IHNkX2Nsb2NrOwotCi0jaWZkZWYgU1VQUE9SVF9DUFJNCi0JaW50IHNkX3Bhc3NfdGhydV9lbjsKLQlpbnQgcHJlX2NtZF9lcnI7Ci0JdTggbGFzdF9yc3BfdHlwZTsKLQl1OCByc3BbMTddOwotI2VuZGlmCi0KLQl1OCBmdW5jX2dyb3VwMV9tYXNrOwotCXU4IGZ1bmNfZ3JvdXAyX21hc2s7Ci0JdTggZnVuY19ncm91cDNfbWFzazsKLQl1OCBmdW5jX2dyb3VwNF9tYXNrOwotCi0JdTggc2Rfc3dpdGNoX2ZhaWw7Ci0JdTggc2RfcmVhZF9waGFzZTsKLQl1OCByZXRyeV9TRDIwX21vZGU7CS8qIHNhbmdkeTIwMTAtMDYtMTAgKi8KLQl1OCBzZF9yZXNldF9mYWlsOwkvKiBzYW5nZHkyMDEwLTA3LTAxICovCi0JdTggc2Rfc2VuZF9zdGF0dXNfZW47Ci0KLX07Ci0KLSNkZWZpbmUgTU9ERV81MTJfU0VRCQkweDAxCi0jZGVmaW5lIE1PREVfMktfU0VRCQkweDAyCi0KLSNkZWZpbmUgVFlQRV9NUwkJCTB4MDAwMAotI2RlZmluZSBUWVBFX01TUFJPCQkweDAwMDEKLQotI2RlZmluZSBNU180QklUCQkJMHgwMTAwCi0jZGVmaW5lIE1TXzhCSVQJCQkweDAyMDAKLSNkZWZpbmUgTVNfSEcJCQkweDA0MDAKLSNkZWZpbmUgTVNfWEMJCQkweDA4MDAKLQotI2RlZmluZSBIRzhCSVQJCQkoTVNfSEcgfCBNU184QklUKQotCi0jZGVmaW5lIENIS19NU1BSTyhtc19jYXJkKQlcCi0JKCgobXNfY2FyZCktPm1zX3R5cGUgJiAweEZGKSA9PSBUWVBFX01TUFJPKQotI2RlZmluZSBDSEtfSEc4QklUKG1zX2NhcmQpCVwKLQkoQ0hLX01TUFJPKG1zX2NhcmQpICYmICgoKG1zX2NhcmQpLT5tc190eXBlICYgSEc4QklUKSA9PSBIRzhCSVQpKQotI2RlZmluZSBDSEtfTVNYQyhtc19jYXJkKQlcCi0JKENIS19NU1BSTyhtc19jYXJkKSAmJiAoKG1zX2NhcmQpLT5tc190eXBlICYgTVNfWEMpKQotI2RlZmluZSBDSEtfTVNIRyhtc19jYXJkKQlcCi0JKENIS19NU1BSTyhtc19jYXJkKSAmJiAoKG1zX2NhcmQpLT5tc190eXBlICYgTVNfSEcpKQotCi0jZGVmaW5lIENIS19NUzhCSVQobXNfY2FyZCkJKCgobXNfY2FyZCktPm1zX3R5cGUgJiBNU184QklUKSkKLSNkZWZpbmUgQ0hLX01TNEJJVChtc19jYXJkKQkoKChtc19jYXJkKS0+bXNfdHlwZSAmIE1TXzRCSVQpKQotCi1zdHJ1Y3QgcnRzNTF4X21zX2RlbGF5X3dyaXRlX3RhZyB7Ci0JdTE2IG9sZF9waHlibG9jazsKLQl1MTYgbmV3X3BoeWJsb2NrOwotCXUxNiBsb2dibG9jazsKLQl1OCBwYWdlb2ZmOwotCXU4IGRlbGF5X3dyaXRlX2ZsYWc7Ci19OwotCi1zdHJ1Y3QgbXNfaW5mbyB7Ci0JdTE2IG1zX3R5cGU7Ci0JdTggYmxvY2tfc2hpZnQ7Ci0JdTggcGFnZV9vZmY7Ci0JdTE2IHRvdGFsX2Jsb2NrOwotCXUxNiBib290X2Jsb2NrOwotCXUzMiBjYXBhY2l0eTsKLQotCXU4IGNoZWNrX21zX2Zsb3c7Ci0JdTggc3dpdGNoXzhiaXRfZmFpbDsKLQl1OCBlcnJfY29kZTsKLQotCXN0cnVjdCB6b25lX2VudHJ5ICpzZWdtZW50OwotCWludCBzZWdtZW50X2NudDsKLQotCWludCBwcm9fdW5kZXJfZm9ybWF0dGluZzsKLQlpbnQgZm9ybWF0X3N0YXR1czsKLQl1MTYgcHJvZ3Jlc3M7Ci0JdTggcmF3X3N5c19pbmZvWzk2XTsKLSNpZmRlZiBTVVBQT1JUX1BDR0xfMVAxOAotCXU4IHJhd19tb2RlbF9uYW1lWzQ4XTsKLSNlbmRpZgotCi0JdTggbXVsdGlfZmxhZzsKLQotCS8qIFNlcXVlbnRpYWwgUlcgKi8KLQl1OCBzZXFfbW9kZTsKLQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBwcmVfZGlyOwotCXUzMiBwcmVfc2VjX2FkZHI7Ci0JdTE2IHByZV9zZWNfY250OwotCXUzMiB0b3RhbF9zZWNfY250OwotCXU4IGxhc3RfcndfaW50OwotCi0Jc3RydWN0IHJ0czUxeF9tc19kZWxheV93cml0ZV90YWcgZGVsYXlfd3JpdGU7Ci0KLQlpbnQgY291bnRlcjsKLQotCWludCBtc19jbG9jazsKLQotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0FURQotCXU4IG1hZ2ljX2dhdGVfaWRbMTZdOwotCXU4IG1nX2VudHJ5X251bTsKLQlpbnQgbWdfYXV0aDsJCS8qIGZsYWcgdG8gaW5kaWNhdGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyAqLwotI2VuZGlmCi19OwotCi0jZGVmaW5lIFBST19VTkRFUl9GT1JNQVRUSU5HKG1zX2NhcmQpCQlcCi0JKChtc19jYXJkKS0+cHJvX3VuZGVyX2Zvcm1hdHRpbmcpCi0jZGVmaW5lIFNFVF9GT1JNQVRfU1RBVFVTKG1zX2NhcmQsIHN0YXR1cykJXAotCSgobXNfY2FyZCktPmZvcm1hdF9zdGF0dXMgPSAoc3RhdHVzKSkKLSNkZWZpbmUgQ0hLX0ZPUk1BVF9TVEFUVVMobXNfY2FyZCwgc3RhdHVzKQlcCi0JKChtc19jYXJkKS0+Zm9ybWF0X3N0YXR1cyA9PSAoc3RhdHVzKSkKLQotc3RydWN0IHNjc2lfY21uZDsKLQotZW51bSBDSElQX1NUQVQgeyBTVEFUX0lOSVQsIFNUQVRfSURMRSwgU1RBVF9SVU4sIFNUQVRfU1NfUFJFLCBTVEFUX1NTLAotCSAgICBTVEFUX1NVU1BFTkQgfTsKLQotc3RydWN0IHJ0czUxeF9jaGlwIHsKLQl1MTYgdmVuZG9yX2lkOwotCXUxNiBwcm9kdWN0X2lkOwotCWNoYXIgbWF4X2x1bjsKLQotCXN0cnVjdCBzY3NpX2NtbmQgKnNyYjsKLQlzdHJ1Y3Qgc2Vuc2VfZGF0YV90IHNlbnNlX2J1ZmZlcltNQVhfQUxMT1dFRF9MVU5fQ05UXTsKLQotCWludCBsZWRfdG9nZ2xlX2NvdW50ZXI7Ci0KLQlpbnQgc3NfY291bnRlcjsKLQlpbnQgaWRsZV9jb3VudGVyOwotCWludCBhdXRvX2RlbGlua19jb3VudGVyOwotCWVudW0gQ0hJUF9TVEFUIGNoaXBfc3RhdDsKLQotCWludCByZXN1bWVfZnJvbV9zY3NpOwotCi0JLyogQ2FyZCBpbmZvcm1hdGlvbiAqLwotCXN0cnVjdCB4ZF9pbmZvIHhkX2NhcmQ7Ci0Jc3RydWN0IHNkX2luZm8gc2RfY2FyZDsKLQlzdHJ1Y3QgbXNfaW5mbyBtc19jYXJkOwotCi0JaW50IGN1cl9jbGs7CQkvKiBjdXJyZW50IGNhcmQgY2xvY2sgKi8KLQlpbnQgY3VyX2NhcmQ7CQkvKiBDdXJyZW50IGNhcmQgbW9kdWxlICovCi0KLQl1OCBjYXJkX2V4aXN0OwkJLyogY2FyZCBleGlzdCBiaXQgbWFwIChwaHlzaWNhbCBleGlzdCkgKi8KLQl1OCBjYXJkX3JlYWR5OwkJLyogY2FyZCByZWFkeSBiaXQgbWFwIChyZXNldCBzdWNjZXNzZnVsbHkpICovCi0JdTggY2FyZF9mYWlsOwkJLyogY2FyZCByZXNldCBmYWlsIGJpdCBtYXAgKi8KLQl1OCBjYXJkX2VqZWN0ZWQ7CS8qIGNhcmQgZWplY3RlZCBiaXQgbWFwICovCi0JdTggY2FyZF93cDsJCS8qIGNhcmQgd3JpdGUgcHJvdGVjdGVkIGJpdCBtYXAgKi8KLQotCXU4IGZha2VfY2FyZF9yZWFkeTsKLQkvKiBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gYW5zd2VyIE1lZGlhQ2hhbmdlICovCi0JdW5zaWduZWQgbG9uZyBsdW5fbWM7Ci0KLQkvKiBjYXJkIGJ1cyB3aWR0aCAqLwotCXU4IGNhcmRfYnVzX3dpZHRoW01BWF9BTExPV0VEX0xVTl9DTlRdOwotCS8qIGNhcmQgY2FwYWNpdHkgKi8KLQl1MzIgY2FwYWNpdHlbTUFYX0FMTE9XRURfTFVOX0NOVF07Ci0KLQkvKiByZWFkL3dyaXRlIGNhcmQgZnVuY3Rpb24gcG9pbnRlciAqLwotCXJ0czUxeF9jYXJkX3J3X2Z1bmMgcndfY2FyZFtNQVhfQUxMT1dFRF9MVU5fQ05UXTsKLQkvKiByZWFkL3dyaXRlIGNhcGFjaXR5LCB1c2VkIGZvciBHUElPIFRvZ2dsZSAqLwotCXUzMiByd19jYXBbTUFYX0FMTE9XRURfTFVOX0NOVF07Ci0JLyogY2FyZCB0byBsdW4gbWFwcGluZyB0YWJsZSAqLwotCXU4IGNhcmQybHVuWzMyXTsKLQkvKiBsdW4gdG8gY2FyZCBtYXBwaW5nIHRhYmxlICovCi0JdTggbHVuMmNhcmRbTUFYX0FMTE9XRURfTFVOX0NOVF07Ci0KLSNpZmRlZiBfTVNHX1RSQUNFCi0Jc3RydWN0IHRyYWNlX21zZ190IHRyYWNlX21zZ1tUUkFDRV9JVEVNX0NOVF07Ci0JaW50IG1zZ19pZHg7Ci0jZW5kaWYKLQotCWludCByd19uZWVkX3JldHJ5OwotCi0JLyogQVNJQyBvciBGUEdBICovCi0JaW50IGFzaWNfY29kZTsKLQotCS8qIFFGTjI0IG9yIExRRlA0OCAqLwotCWludCBwYWNrYWdlOwotCi0JLyogRnVsbCBTcGVlZCBvciBIaWdoIFNwZWVkICovCi0JaW50IHVzYl9zcGVlZDsKLQotCS8qc2FuZ2R5OmVuYWJsZSBvciBkaXNhYmxlIFVIUzUwIGFuZCBNTUM0LjQgKi8KLQlpbnQgdWhzNTBfbW1jNDRfZW47Ci0KLQl1OCBpY192ZXJzaW9uOwotCi0JLyogQ29tbWFuZCBidWZmZXIgKi8KLQl1OCAqY21kX2J1ZjsKLQl1bnNpZ25lZCBpbnQgY21kX2lkeDsKLQkvKiBSZXNwb25zZSBidWZmZXIgKi8KLQl1OCAqcnNwX2J1ZjsKLQotCXUxNiBjYXJkX3N0YXR1czsKLQotI2lmZGVmIFNVUFBPUlRfT0NQCi0JdTE2IG9jcF9zdGF0OwotI2VuZGlmCi0KLQlzdHJ1Y3QgcnRzNTF4X29wdGlvbiBvcHRpb247Ci0Jc3RydWN0IHJ0czUxeF91c2IgKnVzYjsKLQotCXU4IHJjY19yZWFkX3Jlc3BvbnNlOwotCWludCByZXNldF9uZWVkX3JldHJ5OwotCXU4IHJ0czUxNzk7Ci19OwotCi0jZGVmaW5lIFVIUzUwX0VOIDB4MDAwMQotI2RlZmluZSBVSFM1MF9ESVMgMHgwMDAwCi0jZGVmaW5lIFNFVF9VSFM1MChjaGlwKSAgICgoY2hpcCktPnVoczUwX21tYzQ0X2VuID0gVUhTNTBfRU4pCi0jZGVmaW5lIENMRUFSX1VIUzUwKGNoaXApICAoKGNoaXApLT51aHM1MF9tbWM0NF9lbiA9IFVIUzUwX0RJUykKLSNkZWZpbmUgQ0hFQ0tfVUhTNTAoY2hpcCkgICgoKGNoaXApLT51aHM1MF9tbWM0NF9lbiYweGZmKSA9PSBVSFM1MF9FTikKLQotI2RlZmluZSBSVFM1MVhfR0VUX1ZJRChjaGlwKQkJKChjaGlwKS0+dmVuZG9yX2lkKQotI2RlZmluZSBSVFM1MVhfR0VUX1BJRChjaGlwKQkJKChjaGlwKS0+cHJvZHVjdF9pZCkKLQotI2RlZmluZSBSVFM1MVhfU0VUX1NUQVQoY2hpcCwgc3RhdCkJCQlcCi1kbyB7CQkJCQkJCVwKLQlpZiAoKHN0YXQpICE9IFNUQVRfSURMRSkgewkJCVwKLQkJKGNoaXApLT5pZGxlX2NvdW50ZXIgPSAwOwkJXAotCX0JCQkJCQlcCi0JKGNoaXApLT5jaGlwX3N0YXQgPSAoZW51bSBDSElQX1NUQVQpKHN0YXQpOwlcCi19IHdoaWxlICgwKQotI2RlZmluZSBSVFM1MVhfQ0hLX1NUQVQoY2hpcCwgc3RhdCkJKChjaGlwKS0+Y2hpcF9zdGF0ID09IChzdGF0KSkKLSNkZWZpbmUgUlRTNTFYX0dFVF9TVEFUKGNoaXApCQkoKGNoaXApLT5jaGlwX3N0YXQpCi0KLSNkZWZpbmUgQ0hFQ0tfUElEKGNoaXAsIHBpZCkJCShSVFM1MVhfR0VUX1BJRChjaGlwKSA9PSAocGlkKSkKLSNkZWZpbmUgQ0hFQ0tfUEtHKGNoaXAsIHBrZykJCSgoY2hpcCktPnBhY2thZ2UgPT0gKHBrZykpCi0jZGVmaW5lIENIRUNLX1VTQihjaGlwLCBzcGVlZCkJCSgoY2hpcCktPnVzYl9zcGVlZCA9PSAoc3BlZWQpKQotCi1pbnQgcnRzNTF4X3Jlc2V0X2NoaXAoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfaW5pdF9jaGlwKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X3JlbGVhc2VfY2hpcChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotdm9pZCBydHM1MXhfcG9sbGluZ19mdW5jKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydHM1MXhfaW5pdF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWNoaXAtPmNtZF9pZHggPSAwOwotCWNoaXAtPmNtZF9idWZbMF0gPSAnUic7Ci0JY2hpcC0+Y21kX2J1ZlsxXSA9ICdUJzsKLQljaGlwLT5jbWRfYnVmWzJdID0gJ0MnOwotCWNoaXAtPmNtZF9idWZbM10gPSAnUic7Ci0JY2hpcC0+Y21kX2J1ZltQQUNLRVRfVFlQRV0gPSBCQVRDSF9DTUQ7Ci19Ci0KLXZvaWQgcnRzNTF4X2FkZF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkgICAgdTggY21kX3R5cGUsIHUxNiByZWdfYWRkciwgdTggbWFzaywgdTggZGF0YSk7Ci1pbnQgcnRzNTF4X3NlbmRfY21kKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZmxhZywgaW50IHRpbWVvdXQpOwotaW50IHJ0czUxeF9nZXRfcnNwKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IHJzcF9sZW4sIGludCB0aW1lb3V0KTsKLQotc3RhdGljIGlubGluZSB2b2lkIHJ0czUxeF9yZWFkX3JzcF9idWYoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgb2Zmc2V0LAotCQkJCSAgICAgICB1OCAqYnVmLCBpbnQgYnVmX2xlbikKLXsKLQltZW1jcHkoYnVmLCBjaGlwLT5yc3BfYnVmICsgb2Zmc2V0LCBidWZfbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB1OCAqcnRzNTF4X2dldF9yc3BfZGF0YShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JcmV0dXJuIGNoaXAtPnJzcF9idWY7Ci19Ci0KLWludCBydHM1MXhfZ2V0X2NhcmRfc3RhdHVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2ICpzdGF0dXMpOwotaW50IHJ0czUxeF93cml0ZV9yZWdpc3RlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBhZGRyLCB1OCBtYXNrLCB1OCBkYXRhKTsKLWludCBydHM1MXhfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBhZGRyLCB1OCAqZGF0YSk7Ci1pbnQgcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiBhZGRyLCB1OCBtYXNrLAotCQkJICAgICAgdTggZGF0YSk7Ci1pbnQgcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IGFkZHIsIHU4ICpkYXRhKTsKLWludCBydHM1MXhfc2VxX3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IGFkZHIsIHUxNiBsZW4sCi0JCQkgICAgICB1OCAqZGF0YSk7Ci1pbnQgcnRzNTF4X3NlcV9yZWFkX3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTE2IGFkZHIsIHUxNiBsZW4sCi0JCQkgICAgIHU4ICpkYXRhKTsKLWludCBydHM1MXhfcmVhZF9wcGJ1ZihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4ICpidWYsIGludCBidWZfbGVuKTsKLWludCBydHM1MXhfd3JpdGVfcHBidWYoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCAqYnVmLCBpbnQgYnVmX2xlbik7Ci1pbnQgcnRzNTF4X3dyaXRlX3BoeV9yZWdpc3RlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGFkZHIsIHU4IHZhbCk7Ci1pbnQgcnRzNTF4X3JlYWRfcGh5X3JlZ2lzdGVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggYWRkciwgdTggKnZhbCk7Ci12b2lkIHJ0czUxeF9kb19iZWZvcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotdm9pZCBydHM1MXhfY2xlYXJfaHdfZXJyb3Ioc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLXZvaWQgcnRzNTF4X3ByZXBhcmVfcnVuKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci12b2lkIHJ0czUxeF90cmFjZV9tc2coc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjbGVhcik7Ci12b2lkIHJ0czUxeF9wcF9zdGF0dXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuLCB1OCAqc3RhdHVzLAotCQkgICAgICB1OCBzdGF0dXNfbGVuKTsKLXZvaWQgcnRzNTF4X3JlYWRfc3RhdHVzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1biwKLQkJCXU4ICpydHM1MXhfc3RhdHVzLCB1OCBzdGF0dXNfbGVuKTsKLWludCBydHM1MXhfdHJhbnNmZXJfZGF0YV9yY2Moc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJCSAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgdXNlX3NnLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKmFjdF9sZW4sIGludCB0aW1lb3V0LCB1OCBzdGFnZV9mbGFnKTsKLQotI2RlZmluZSBSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIGFkZHIsIG1hc2ssIGRhdGEpCVwKLWRvIHsJCQkJCQkJXAotCWludCBfcmV0dmFsID0gcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKChjaGlwKSwJXAotCQkJKGFkZHIpLCAobWFzayksIChkYXRhKSk7CVwKLQlpZiAoX3JldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewkJXAotCQlUUkFDRV9SRVQoKGNoaXApLCBfcmV0dmFsKTsJCVwKLQl9CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSVFM1MVhfUkVBRF9SRUcoY2hpcCwgYWRkciwgZGF0YSkJCVwKLWRvIHsJCQkJCQkJXAotCWludCBfcmV0dmFsID0gcnRzNTF4X3JlYWRfcmVnaXN0ZXIoKGNoaXApLAlcCi0JCQkoYWRkciksIChkYXRhKSk7CQlcCi0JaWYgKF9yZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsJCVwKLQkJVFJBQ0VfUkVUKChjaGlwKSwgX3JldHZhbCk7CQlcCi0JfQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBfX1JUUzUxWF9DSElQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9mb3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9mb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3ZDE4Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfZm9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpbmNsdWRlICJydHM1MXguaCIKLQotI2lmZGVmIFNVUFBPUlRfRklMRV9PUAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgInJ0czUxeF9jaGlwLmgiCi0jaW5jbHVkZSAicnRzNTF4X2NhcmQuaCIKLSNpbmNsdWRlICJydHM1MXhfZm9wLmgiCi0jaW5jbHVkZSAic2RfY3BybS5oIgotCi0jZGVmaW5lIFJUUzUxMzlfSU9DX01BR0lDCQkweDM5Ci0KLSNkZWZpbmUgUlRTNTEzOV9JT0NfU0RfRElSRUNUCQlfSU9XUihSVFM1MTM5X0lPQ19NQUdJQywgMHhBMCwgaW50KQotI2RlZmluZSBSVFM1MTM5X0lPQ19TRF9HRVRfUlNQCQlfSU9XUihSVFM1MTM5X0lPQ19NQUdJQywgMHhBMSwgaW50KQotCi1zdGF0aWMgaW50IHJ0czUxeF9zZF9kaXJlY3RfY21uZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsCi0JCQkJIHN0cnVjdCBzZF9kaXJlY3RfY21uZCAqY21uZCkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IGRpciwgY21kMTIsIHN0YW5kYnksIGFjbWQsIGNtZF9pZHgsIHJzcF9jb2RlOwotCXU4ICpidWY7Ci0JdTMyIGFyZywgbGVuOwotCi0JZGlyID0gKGNtbmQtPmNtbmRbMF0gPj4gMykgJiAweDAzOwotCWNtZDEyID0gKGNtbmQtPmNtbmRbMF0gPj4gMikgJiAweDAxOwotCXN0YW5kYnkgPSAoY21uZC0+Y21uZFswXSA+PiAxKSAmIDB4MDE7Ci0JYWNtZCA9IGNtbmQtPmNtbmRbMF0gJiAweDAxOwotCWNtZF9pZHggPSBjbW5kLT5jbW5kWzFdOwotCWFyZyA9ICgodTMyKSAoY21uZC0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpIChjbW5kLT5jbW5kWzNdKSA8PCAxNikgfAotCSAgICAoKHUzMikgKGNtbmQtPmNtbmRbNF0pIDw8IDgpIHwgY21uZC0+Y21uZFs1XTsKLQlsZW4gPQotCSAgICAoKHUzMikgKGNtbmQtPmNtbmRbNl0pIDw8IDE2KSB8ICgodTMyKSAoY21uZC0+Y21uZFs3XSkgPDwgOCkgfAotCSAgICBjbW5kLT5jbW5kWzhdOwotCXJzcF9jb2RlID0gY21uZC0+Y21uZFs5XTsKLQotCWlmIChkaXIpIHsKLQkJaWYgKCFjbW5kLT5idWYgfHwgKGNtbmQtPmJ1Zl9sZW4gPCBsZW4pKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlzd2l0Y2ggKGRpcikgewotCWNhc2UgMDoKLQkJLyogTm8gZGF0YSAqLwotCQlyZXR2YWwgPSBleHRfcnRzNTF4X3NkX2V4ZWN1dGVfbm9fZGF0YShjaGlwLCBjaGlwLT5jYXJkMmx1bltTRF9DQVJEXSwKLQkJCQkJCWNtZF9pZHgsIHN0YW5kYnksIGFjbWQsCi0JCQkJCQlyc3BfY29kZSwgYXJnKTsKLQkJaWYgKHJldHZhbCAhPSBUUkFOU1BPUlRfR09PRCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgotCQkvKiBSZWFkIGZyb20gY2FyZCAqLwotCQlidWYgPSBremFsbG9jKGNtbmQtPmJ1Zl9sZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIWJ1ZikKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCi0JCXJldHZhbCA9IGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV9yZWFkX2RhdGEoY2hpcCwgY2hpcC0+Y2FyZDJsdW5bU0RfQ0FSRF0sCi0JCQkJCQkgIGNtZF9pZHgsIGNtZDEyLCBzdGFuZGJ5LCBhY21kLAotCQkJCQkJICByc3BfY29kZSwgYXJnLCBsZW4sIGJ1ZiwKLQkJCQkJCSAgY21uZC0+YnVmX2xlbiwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gVFJBTlNQT1JUX0dPT0QpIHsKLQkJCWtmcmVlKGJ1Zik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJcmV0dmFsID0KLQkJICAgIGNvcHlfdG9fdXNlcihjbW5kLT5idWYsICh2b2lkICopYnVmLCBjbW5kLT5idWZfbGVuKTsKLQkJaWYgKHJldHZhbCkgewotCQkJa2ZyZWUoYnVmKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCQl9Ci0KLQkJa2ZyZWUoYnVmKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDI6Ci0JCS8qIFdyaXRlIHRvIGNhcmQgKi8KLQkJYnVmID0ga21hbGxvYyhjbW5kLT5idWZfbGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFidWYpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX05PTUVNKTsKLQotCQlyZXR2YWwgPQotCQkgICAgY29weV9mcm9tX3VzZXIoKHZvaWQgKilidWYsIGNtbmQtPmJ1ZiwKLQkJCQkgICBjbW5kLT5idWZfbGVuKTsKLQkJaWYgKHJldHZhbCkgewotCQkJa2ZyZWUoYnVmKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCQl9Ci0KLQkJcmV0dmFsID0KLQkJICAgIGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV93cml0ZV9kYXRhKGNoaXAsIGNoaXAtPmNhcmQybHVuW1NEX0NBUkRdLAotCQkJCQkgICAgICBjbWRfaWR4LCBjbWQxMiwgc3RhbmRieSwgYWNtZCwKLQkJCQkJICAgICAgcnNwX2NvZGUsIGFyZywgbGVuLCBidWYsCi0JCQkJCSAgICAgIGNtbmQtPmJ1Zl9sZW4sIDApOwotCQlpZiAocmV0dmFsICE9IFRSQU5TUE9SVF9HT09EKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCWtmcmVlKGJ1Zik7Ci0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBydHM1MXhfc2RfZ2V0X3JzcChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHN0cnVjdCBzZF9yc3AgKnJzcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IGNvdW50ID0gMCwgcmV0dmFsOwotCi0JaWYgKHNkX2NhcmQtPnByZV9jbWRfZXJyKSB7Ci0JCXNkX2NhcmQtPnByZV9jbWRfZXJyID0gMDsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlpZiAoc2RfY2FyZC0+bGFzdF9yc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQllbHNlIGlmIChzZF9jYXJkLT5sYXN0X3JzcF90eXBlID09IFNEX1JTUF9UWVBFX1IyKQotCQljb3VudCA9IChyc3AtPnJzcF9sZW4gPCAxNykgPyByc3AtPnJzcF9sZW4gOiAxNzsKLQllbHNlCi0JCWNvdW50ID0gKHJzcC0+cnNwX2xlbiA8IDYpID8gcnNwLT5yc3BfbGVuIDogNjsKLQotCXJldHZhbCA9IGNvcHlfdG9fdXNlcihyc3AtPnJzcCwgKHZvaWQgKilzZF9jYXJkLT5yc3AsIGNvdW50KTsKLQlpZiAocmV0dmFsKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX05PTUVNKTsKLQotCVJUUzUxWF9ERUJVR1AoIlJlc3BvbnNlIGxlbmd0aDogJWRcbiIsIGNvdW50KTsKLQlSVFM1MVhfREVCVUdQKCJSZXNwb25zZTogMHgleCAweCV4IDB4JXggMHgleFxuIiwKLQkJICAgICAgIHNkX2NhcmQtPnJzcFswXSwgc2RfY2FyZC0+cnNwWzFdLCBzZF9jYXJkLT5yc3BbMl0sCi0JCSAgICAgICBzZF9jYXJkLT5yc3BbM10pOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcnRzNTF4X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwOwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0JaW50IHN1Ym1pbm9yOwotCWludCByZXR2YWwgPSAwOwotCi0Jc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOwotCi0JaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZydHM1MXhfZHJpdmVyLCBzdWJtaW5vcik7Ci0JaWYgKCFpbnRlcmZhY2UpIHsKLQkJUlRTNTFYX0RFQlVHUCgiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBzdWJtaW5vcik7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQljaGlwID0gKHN0cnVjdCBydHM1MXhfY2hpcCAqKXVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQlpZiAoIWNoaXApIHsKLQkJUlRTNTFYX0RFQlVHUCgiQ2FuJ3QgZmluZCBjaGlwXG4iKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIEluY3JlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIGhvc3QgKi8KLQlzY3NpX2hvc3RfZ2V0KHJ0czUxeF90b19ob3N0KGNoaXApKTsKLQotCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwotCW11dGV4X2xvY2soJihjaGlwLT51c2ItPmRldl9tdXRleCkpOwotCi0JLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBjaGlwOwotCi0JLyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KLQltdXRleF91bmxvY2soJmNoaXAtPnVzYi0+ZGV2X211dGV4KTsKLQotZXhpdDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1pbnQgcnRzNTF4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwOwotCi0JY2hpcCA9IChzdHJ1Y3QgcnRzNTF4X2NoaXAgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBEcm9wIG91ciByZWZlcmVuY2UgdG8gdGhlIGhvc3Q7IHRoZSBTQ1NJIGNvcmUgd2lsbCBmcmVlIGl0Ci0JICogKGFuZCAiY2hpcCIgYWxvbmcgd2l0aCBpdCkgd2hlbiB0aGUgcmVmY291bnQgYmVjb21lcyAwLiAqLwotCXNjc2lfaG9zdF9wdXQocnRzNTF4X3RvX2hvc3QoY2hpcCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXNzaXplX3QgcnRzNTF4X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKLQkJICAgIGxvZmZfdCAqZl9wb3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXNzaXplX3QgcnRzNTF4X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JCSAgICAgbG9mZl90ICpmX3BvcykKLXsKLQlyZXR1cm4gMDsKLX0KLQotbG9uZyBydHM1MXhfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcDsKLQlzdHJ1Y3Qgc2RfZGlyZWN0X2NtbmQgY21uZDsKLQlzdHJ1Y3Qgc2RfcnNwIHJzcDsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWNoaXAgPSAoc3RydWN0IHJ0czUxeF9jaGlwICopZmlscC0+cHJpdmF0ZV9kYXRhOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCi0JbXV0ZXhfbG9jaygmKGNoaXAtPnVzYi0+ZGV2X211dGV4KSk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRTNTEzOV9JT0NfU0RfRElSRUNUOgotCQlyZXR2YWwgPQotCQkgICAgY29weV9mcm9tX3VzZXIoKHZvaWQgKikmY21uZCwgKHZvaWQgX191c2VyICopYXJnLAotCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2RfZGlyZWN0X2NtbmQpKTsKLQkJaWYgKHJldHZhbCkgewotCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgZXhpdCk7Ci0JCX0KLQkJcmV0dmFsID0gcnRzNTF4X3NkX2RpcmVjdF9jbW5kKGNoaXAsICZjbW5kKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcmV0dmFsID0gLUVJTzsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgZXhpdCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFJUUzUxMzlfSU9DX1NEX0dFVF9SU1A6Ci0JCXJldHZhbCA9Ci0JCSAgICBjb3B5X2Zyb21fdXNlcigmcnNwLCAodm9pZCBfX3VzZXIgKilhcmcsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBzZF9yc3ApKTsKLQkJaWYgKHJldHZhbCkgewotCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgZXhpdCk7Ci0JCX0KLQkJcmV0dmFsID0gcnRzNTF4X3NkX2dldF9yc3AoY2hpcCwgJnJzcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJldHZhbCA9IC1FSU87Ci0JCQlUUkFDRV9HT1RPKGNoaXAsIGV4aXQpOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi1leGl0OgotCS8qIHVubG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCi0JbXV0ZXhfdW5sb2NrKCZjaGlwLT51c2ItPmRldl9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9mb3AuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9mb3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY5MWVlOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfZm9wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQXV0aG9yOgotICogICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICogTWFpbnRhaW5lcjoKLSAqICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKi8KLQotI2lmbmRlZiBfX1JUUzUxWF9GT1BfSAotI2RlZmluZSBfX1JUUzUxWF9GT1BfSAotCi0jaW5jbHVkZSAicnRzNTF4LmgiCi0KLSNpZmRlZiBTVVBQT1JUX0ZJTEVfT1AKLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IHNkX2RpcmVjdF9jbW5kIHsKLQl1OCBjbW5kWzEyXTsKLQl2b2lkIF9fdXNlciAqYnVmOwotCWludCBidWZfbGVuOwotfTsKLQotc3RydWN0IHNkX3JzcCB7Ci0Jdm9pZCBfX3VzZXIgKnJzcDsKLQlpbnQgcnNwX2xlbjsKLX07Ci0KLWludCBydHM1MXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1pbnQgcnRzNTF4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwotc3NpemVfdCBydHM1MXhfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkgICAgbG9mZl90ICpmX3Bvcyk7Ci1zc2l6ZV90IHJ0czUxeF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkgICAgIGxvZmZfdCAqZl9wb3MpOwotbG9uZyBydHM1MXhfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1JUUzUxWF9GT1BfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X3Njc2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9zY3NpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjgyZmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X3Njc2kuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMzUgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotCi0jaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJydHM1MXguaCIKLSNpbmNsdWRlICJydHM1MXhfY2hpcC5oIgotI2luY2x1ZGUgInJ0czUxeF9zY3NpLmgiCi0jaW5jbHVkZSAicnRzNTF4X2NhcmQuaCIKLSNpbmNsdWRlICJydHM1MXhfdHJhbnNwb3J0LmgiCi0jaW5jbHVkZSAic2RfY3BybS5oIgotI2luY2x1ZGUgIm1zX21nLmgiCi0jaW5jbHVkZSAidHJhY2UuaCIKLQotdm9pZCBydHM1MXhfc2NzaV9zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQotewotCWNoYXIgKndoYXQgPSBOVUxMOwotCWludCBpLCB1bmtub3duX2NtZCA9IDA7Ci0KLQlzd2l0Y2ggKHNyYi0+Y21uZFswXSkgewotCWNhc2UgVEVTVF9VTklUX1JFQURZOgotCQl3aGF0ID0gKGNoYXIgKikiVEVTVF9VTklUX1JFQURZIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRVpFUk9fVU5JVDoKLQkJd2hhdCA9IChjaGFyICopIlJFWkVST19VTklUIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRVFVRVNUX1NFTlNFOgotCQl3aGF0ID0gKGNoYXIgKikiUkVRVUVTVF9TRU5TRSI7Ci0JCWJyZWFrOwotCWNhc2UgRk9STUFUX1VOSVQ6Ci0JCXdoYXQgPSAoY2hhciAqKSJGT1JNQVRfVU5JVCI7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9CTE9DS19MSU1JVFM6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEX0JMT0NLX0xJTUlUUyI7Ci0JCWJyZWFrOwotCWNhc2UgMHgwNzoKLQkJd2hhdCA9IChjaGFyICopIlJFQVNTSUdOX0JMT0NLUyI7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF82OgotCQl3aGF0ID0gKGNoYXIgKikiUkVBRF82IjsKLQkJYnJlYWs7Ci0JY2FzZSBXUklURV82OgotCQl3aGF0ID0gKGNoYXIgKikiV1JJVEVfNiI7Ci0JCWJyZWFrOwotCWNhc2UgU0VFS182OgotCQl3aGF0ID0gKGNoYXIgKikiU0VFS182IjsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEX1JFVkVSU0U6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEX1JFVkVSU0UiOwotCQlicmVhazsKLQljYXNlIFdSSVRFX0ZJTEVNQVJLUzoKLQkJd2hhdCA9IChjaGFyICopIldSSVRFX0ZJTEVNQVJLUyI7Ci0JCWJyZWFrOwotCWNhc2UgU1BBQ0U6Ci0JCXdoYXQgPSAoY2hhciAqKSJTUEFDRSI7Ci0JCWJyZWFrOwotCWNhc2UgSU5RVUlSWToKLQkJd2hhdCA9IChjaGFyICopIklOUVVJUlkiOwotCQlicmVhazsKLQljYXNlIFJFQ09WRVJfQlVGRkVSRURfREFUQToKLQkJd2hhdCA9IChjaGFyICopIlJFQ09WRVJfQlVGRkVSRURfREFUQSI7Ci0JCWJyZWFrOwotCWNhc2UgTU9ERV9TRUxFQ1Q6Ci0JCXdoYXQgPSAoY2hhciAqKSJNT0RFX1NFTEVDVCI7Ci0JCWJyZWFrOwotCWNhc2UgUkVTRVJWRToKLQkJd2hhdCA9IChjaGFyICopIlJFU0VSVkUiOwotCQlicmVhazsKLQljYXNlIFJFTEVBU0U6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUxFQVNFIjsKLQkJYnJlYWs7Ci0JY2FzZSBDT1BZOgotCQl3aGF0ID0gKGNoYXIgKikiQ09QWSI7Ci0JCWJyZWFrOwotCWNhc2UgRVJBU0U6Ci0JCXdoYXQgPSAoY2hhciAqKSJFUkFTRSI7Ci0JCWJyZWFrOwotCWNhc2UgTU9ERV9TRU5TRToKLQkJd2hhdCA9IChjaGFyICopIk1PREVfU0VOU0UiOwotCQlicmVhazsKLQljYXNlIFNUQVJUX1NUT1A6Ci0JCXdoYXQgPSAoY2hhciAqKSJTVEFSVF9TVE9QIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRUNFSVZFX0RJQUdOT1NUSUM6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUNFSVZFX0RJQUdOT1NUSUMiOwotCQlicmVhazsKLQljYXNlIFNFTkRfRElBR05PU1RJQzoKLQkJd2hhdCA9IChjaGFyICopIlNFTkRfRElBR05PU1RJQyI7Ci0JCWJyZWFrOwotCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6Ci0JCXdoYXQgPSAoY2hhciAqKSJBTExPV19NRURJVU1fUkVNT1ZBTCI7Ci0JCWJyZWFrOwotCWNhc2UgU0VUX1dJTkRPVzoKLQkJd2hhdCA9IChjaGFyICopIlNFVF9XSU5ET1ciOwotCQlicmVhazsKLQljYXNlIFJFQURfQ0FQQUNJVFk6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEX0NBUEFDSVRZIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEXzEwOgotCQl3aGF0ID0gKGNoYXIgKikiUkVBRF8xMCI7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfMTA6Ci0JCXdoYXQgPSAoY2hhciAqKSJXUklURV8xMCI7Ci0JCWJyZWFrOwotCWNhc2UgU0VFS18xMDoKLQkJd2hhdCA9IChjaGFyICopIlNFRUtfMTAiOwotCQlicmVhazsKLQljYXNlIFdSSVRFX1ZFUklGWToKLQkJd2hhdCA9IChjaGFyICopIldSSVRFX1ZFUklGWSI7Ci0JCWJyZWFrOwotCWNhc2UgVkVSSUZZOgotCQl3aGF0ID0gKGNoYXIgKikiVkVSSUZZIjsKLQkJYnJlYWs7Ci0JY2FzZSBTRUFSQ0hfSElHSDoKLQkJd2hhdCA9IChjaGFyICopIlNFQVJDSF9ISUdIIjsKLQkJYnJlYWs7Ci0JY2FzZSBTRUFSQ0hfRVFVQUw6Ci0JCXdoYXQgPSAoY2hhciAqKSJTRUFSQ0hfRVFVQUwiOwotCQlicmVhazsKLQljYXNlIFNFQVJDSF9MT1c6Ci0JCXdoYXQgPSAoY2hhciAqKSJTRUFSQ0hfTE9XIjsKLQkJYnJlYWs7Ci0JY2FzZSBTRVRfTElNSVRTOgotCQl3aGF0ID0gKGNoYXIgKikiU0VUX0xJTUlUUyI7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9QT1NJVElPTjoKLQkJd2hhdCA9IChjaGFyICopIlJFQURfUE9TSVRJT04iOwotCQlicmVhazsKLQljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgotCQl3aGF0ID0gKGNoYXIgKikiU1lOQ0hST05JWkVfQ0FDSEUiOwotCQlicmVhazsKLQljYXNlIExPQ0tfVU5MT0NLX0NBQ0hFOgotCQl3aGF0ID0gKGNoYXIgKikiTE9DS19VTkxPQ0tfQ0FDSEUiOwotCQlicmVhazsKLQljYXNlIFJFQURfREVGRUNUX0RBVEE6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEX0RFRkVDVF9EQVRBIjsKLQkJYnJlYWs7Ci0JY2FzZSBNRURJVU1fU0NBTjoKLQkJd2hhdCA9IChjaGFyICopIk1FRElVTV9TQ0FOIjsKLQkJYnJlYWs7Ci0JY2FzZSBDT01QQVJFOgotCQl3aGF0ID0gKGNoYXIgKikiQ09NUEFSRSI7Ci0JCWJyZWFrOwotCWNhc2UgQ09QWV9WRVJJRlk6Ci0JCXdoYXQgPSAoY2hhciAqKSJDT1BZX1ZFUklGWSI7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfQlVGRkVSOgotCQl3aGF0ID0gKGNoYXIgKikiV1JJVEVfQlVGRkVSIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEX0JVRkZFUjoKLQkJd2hhdCA9IChjaGFyICopIlJFQURfQlVGRkVSIjsKLQkJYnJlYWs7Ci0JY2FzZSBVUERBVEVfQkxPQ0s6Ci0JCXdoYXQgPSAoY2hhciAqKSJVUERBVEVfQkxPQ0siOwotCQlicmVhazsKLQljYXNlIFJFQURfTE9ORzoKLQkJd2hhdCA9IChjaGFyICopIlJFQURfTE9ORyI7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfTE9ORzoKLQkJd2hhdCA9IChjaGFyICopIldSSVRFX0xPTkciOwotCQlicmVhazsKLQljYXNlIENIQU5HRV9ERUZJTklUSU9OOgotCQl3aGF0ID0gKGNoYXIgKikiQ0hBTkdFX0RFRklOSVRJT04iOwotCQlicmVhazsKLQljYXNlIFdSSVRFX1NBTUU6Ci0JCXdoYXQgPSAoY2hhciAqKSJXUklURV9TQU1FIjsKLQkJYnJlYWs7Ci0JY2FzZSBHUENNRF9SRUFEX1NVQkNIQU5ORUw6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEIFNVQkNIQU5ORUwiOwotCQlicmVhazsKLQljYXNlIFJFQURfVE9DOgotCQl3aGF0ID0gKGNoYXIgKikiUkVBRF9UT0MiOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1JFQURfSEVBREVSOgotCQl3aGF0ID0gKGNoYXIgKikiUkVBRCBIRUFERVIiOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1BMQVlfQVVESU9fMTA6Ci0JCXdoYXQgPSAoY2hhciAqKSJQTEFZIEFVRElPICgxMCkiOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1BMQVlfQVVESU9fTVNGOgotCQl3aGF0ID0gKGNoYXIgKikiUExBWSBBVURJTyBNU0YiOwotCQlicmVhazsKLQljYXNlIEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OOgotCQl3aGF0ID0gKGNoYXIgKikiR0VUIEVWRU5UL1NUQVRVUyBOT1RJRklDQVRJT04iOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1BBVVNFX1JFU1VNRToKLQkJd2hhdCA9IChjaGFyICopIlBBVVNFL1JFU1VNRSI7Ci0JCWJyZWFrOwotCWNhc2UgTE9HX1NFTEVDVDoKLQkJd2hhdCA9IChjaGFyICopIkxPR19TRUxFQ1QiOwotCQlicmVhazsKLQljYXNlIExPR19TRU5TRToKLQkJd2hhdCA9IChjaGFyICopIkxPR19TRU5TRSI7Ci0JCWJyZWFrOwotCWNhc2UgR1BDTURfU1RPUF9QTEFZX1NDQU46Ci0JCXdoYXQgPSAoY2hhciAqKSJTVE9QIFBMQVkvU0NBTiI7Ci0JCWJyZWFrOwotCWNhc2UgR1BDTURfUkVBRF9ESVNDX0lORk86Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEIERJU0MgSU5GT1JNQVRJT04iOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1JFQURfVFJBQ0tfUlpPTkVfSU5GTzoKLQkJd2hhdCA9IChjaGFyICopIlJFQUQgVFJBQ0sgSU5GT1JNQVRJT04iOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1JFU0VSVkVfUlpPTkVfVFJBQ0s6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRVNFUlZFIFRSQUNLIjsKLQkJYnJlYWs7Ci0JY2FzZSBHUENNRF9TRU5EX09QQzoKLQkJd2hhdCA9IChjaGFyICopIlNFTkQgT1BDIjsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTEVDVF8xMDoKLQkJd2hhdCA9IChjaGFyICopIk1PREVfU0VMRUNUXzEwIjsKLQkJYnJlYWs7Ci0JY2FzZSBHUENNRF9SRVBBSVJfUlpPTkVfVFJBQ0s6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRVBBSVIgVFJBQ0siOwotCQlicmVhazsKLQljYXNlIDB4NTk6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEIE1BU1RFUiBDVUUiOwotCQlicmVhazsKLQljYXNlIE1PREVfU0VOU0VfMTA6Ci0JCXdoYXQgPSAoY2hhciAqKSJNT0RFX1NFTlNFXzEwIjsKLQkJYnJlYWs7Ci0JY2FzZSBHUENNRF9DTE9TRV9UUkFDSzoKLQkJd2hhdCA9IChjaGFyICopIkNMT1NFIFRSQUNLL1NFU1NJT04iOwotCQlicmVhazsKLQljYXNlIDB4NUM6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEIEJVRkZFUiBDQVBBQ0lUWSI7Ci0JCWJyZWFrOwotCWNhc2UgMHg1RDoKLQkJd2hhdCA9IChjaGFyICopIlNFTkQgQ1VFIFNIRUVUIjsKLQkJYnJlYWs7Ci0JY2FzZSBHUENNRF9CTEFOSzoKLQkJd2hhdCA9IChjaGFyICopIkJMQU5LIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRVBPUlRfTFVOUzoKLQkJd2hhdCA9IChjaGFyICopIlJFUE9SVCBMVU5TIjsKLQkJYnJlYWs7Ci0JY2FzZSBNT1ZFX01FRElVTToKLQkJd2hhdCA9IChjaGFyICopIk1PVkVfTUVESVVNIG9yIFBMQVkgQVVESU8gKDEyKSI7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF8xMjoKLQkJd2hhdCA9IChjaGFyICopIlJFQURfMTIiOwotCQlicmVhazsKLQljYXNlIFdSSVRFXzEyOgotCQl3aGF0ID0gKGNoYXIgKikiV1JJVEVfMTIiOwotCQlicmVhazsKLQljYXNlIFdSSVRFX1ZFUklGWV8xMjoKLQkJd2hhdCA9IChjaGFyICopIldSSVRFX1ZFUklGWV8xMiI7Ci0JCWJyZWFrOwotCWNhc2UgU0VBUkNIX0hJR0hfMTI6Ci0JCXdoYXQgPSAoY2hhciAqKSJTRUFSQ0hfSElHSF8xMiI7Ci0JCWJyZWFrOwotCWNhc2UgU0VBUkNIX0VRVUFMXzEyOgotCQl3aGF0ID0gKGNoYXIgKikiU0VBUkNIX0VRVUFMXzEyIjsKLQkJYnJlYWs7Ci0JY2FzZSBTRUFSQ0hfTE9XXzEyOgotCQl3aGF0ID0gKGNoYXIgKikiU0VBUkNIX0xPV18xMiI7Ci0JCWJyZWFrOwotCWNhc2UgU0VORF9WT0xVTUVfVEFHOgotCQl3aGF0ID0gKGNoYXIgKikiU0VORF9WT0xVTUVfVEFHIjsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEX0VMRU1FTlRfU1RBVFVTOgotCQl3aGF0ID0gKGNoYXIgKikiUkVBRF9FTEVNRU5UX1NUQVRVUyI7Ci0JCWJyZWFrOwotCWNhc2UgR1BDTURfUkVBRF9DRF9NU0Y6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEIENEIE1TRiI7Ci0JCWJyZWFrOwotCWNhc2UgR1BDTURfU0NBTjoKLQkJd2hhdCA9IChjaGFyICopIlNDQU4iOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1NFVF9TUEVFRDoKLQkJd2hhdCA9IChjaGFyICopIlNFVCBDRCBTUEVFRCI7Ci0JCWJyZWFrOwotCWNhc2UgR1BDTURfTUVDSEFOSVNNX1NUQVRVUzoKLQkJd2hhdCA9IChjaGFyICopIk1FQ0hBTklTTSBTVEFUVVMiOwotCQlicmVhazsKLQljYXNlIEdQQ01EX1JFQURfQ0Q6Ci0JCXdoYXQgPSAoY2hhciAqKSJSRUFEIENEIjsKLQkJYnJlYWs7Ci0JY2FzZSAweEUxOgotCQl3aGF0ID0gKGNoYXIgKikiV1JJVEUgQ09OVElOVUUiOwotCQlicmVhazsKLQljYXNlIFdSSVRFX0xPTkdfMjoKLQkJd2hhdCA9IChjaGFyICopIldSSVRFX0xPTkdfMiI7Ci0JCWJyZWFrOwotCWNhc2UgVkVORE9SX0NNTkQ6Ci0JCXdoYXQgPSAoY2hhciAqKSJSZWFsdGVrJ3MgdmVuZG9yIGNvbW1hbmQiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl3aGF0ID0gKGNoYXIgKikiKHVua25vd24gY29tbWFuZCkiOwotCQl1bmtub3duX2NtZCA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChzcmItPmNtbmRbMF0gIT0gVEVTVF9VTklUX1JFQURZKQotCQlSVFM1MVhfREVCVUdQKCJDb21tYW5kICVzICglZCBieXRlcylcbiIsIHdoYXQsIHNyYi0+Y21kX2xlbik7Ci0JaWYgKHVua25vd25fY21kKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgc3JiLT5jbWRfbGVuICYmIGkgPCAxNjsgaSsrKQotCQkJUlRTNTFYX0RFQlVHUE4oIiAlMDJ4Iiwgc3JiLT5jbW5kW2ldKTsKLQkJUlRTNTFYX0RFQlVHUE4oIlxuIik7Ci0JfQotfQotCi12b2lkIHJ0czUxeF9zZXRfc2Vuc2VfdHlwZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4sIGludCBzZW5zZV90eXBlKQotewotCXN3aXRjaCAoc2Vuc2VfdHlwZSkgewotCWNhc2UgU0VOU0VfVFlQRV9NRURJQV9DSEFOR0U6Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfZGF0YShjaGlwLCBsdW4sIENVUl9FUlIsIDB4MDYsIDAsIDB4MjgsIDAsIDAsIDApOwotCQlicmVhazsKLQotCWNhc2UgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVDoKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMHgwMiwgMCwgMHgzQSwgMCwgMCwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRU5TRV9UWVBFX01FRElBX0xCQV9PVkVSX1JBTkdFOgotCQlydHM1MXhfc2V0X3NlbnNlX2RhdGEoY2hpcCwgbHVuLCBDVVJfRVJSLCAweDA1LCAwLCAweDIxLCAwLCAwLCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNFTlNFX1RZUEVfTUVESUFfTFVOX05PVF9TVVBQT1JUOgotCQlydHM1MXhfc2V0X3NlbnNlX2RhdGEoY2hpcCwgbHVuLCBDVVJfRVJSLCAweDA1LCAwLCAweDI1LCAwLCAwLCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfUFJPVEVDVDoKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMHgwNywgMCwgMHgyNywgMCwgMCwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUjoKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMHgwMywgMCwgMHgxMSwgMCwgMCwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRU5TRV9UWVBFX01FRElBX1dSSVRFX0VSUjoKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMHgwMywgMCwgMHgwQywgMHgwMiwgMCwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEOgotCQlydHM1MXhfc2V0X3NlbnNlX2RhdGEoY2hpcCwgbHVuLCBDVVJfRVJSLCBJTEdBTF9SRVEsIDAsCi0JCQkgICAgICAgQVNDX0lOVkxEX0NEQiwgQVNDUV9JTlZMRF9DREIsIENEQl9JTExFR0FMLCAxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNFTlNFX1RZUEVfRk9STUFUX0NNRF9GQUlMRUQ6Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfZGF0YShjaGlwLCBsdW4sIENVUl9FUlIsIDB4MDMsIDAsIDB4MzEsIDB4MDEsIDAsIDApOwotCQlicmVhazsKLQotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0FURQotCWNhc2UgU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfRVNUQUI6Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfZGF0YShjaGlwLCBsdW4sIENVUl9FUlIsIDB4MDUsIDAsIDB4NkYsIDB4MDIsIDAsIDApOwotCQlicmVhazsKLQotCWNhc2UgU0VOU0VfVFlQRV9NR19LRVlfRkFJTF9OT1RfQVVUSEVOOgotCQlydHM1MXhfc2V0X3NlbnNlX2RhdGEoY2hpcCwgbHVuLCBDVVJfRVJSLCAweDA1LCAwLCAweDZGLCAweDAwLCAwLCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNFTlNFX1RZUEVfTUdfSU5DT01QQVRJQkxFX01FRElVTToKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMHgwMiwgMCwgMHgzMCwgMHgwMCwgMCwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRU5TRV9UWVBFX01HX1dSSVRFX0VSUjoKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMHgwMywgMCwgMHgwQywgMHgwMCwgMCwgMCk7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLQljYXNlIFNFTlNFX1RZUEVfTk9fU0VOU0U6Ci0JZGVmYXVsdDoKLQkJcnRzNTF4X3NldF9zZW5zZV9kYXRhKGNoaXAsIGx1biwgQ1VSX0VSUiwgMCwgMCwgMCwgMCwgMCwgMCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9pZCBydHM1MXhfc2V0X3NlbnNlX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuLCB1OCBlcnJfY29kZSwKLQkJICAgIHU4IHNlbnNlX2tleSwgdTMyIGluZm8sIHU4IGFzYywgdTggYXNjcSwgdTggc25zX2tleV9pbmZvMCwKLQkJICAgIHUxNiBzbnNfa2V5X2luZm8xKQotewotCXN0cnVjdCBzZW5zZV9kYXRhX3QgKnNlbnNlID0gJihjaGlwLT5zZW5zZV9idWZmZXJbbHVuXSk7Ci0KLQlzZW5zZS0+ZXJyX2NvZGUgPSBlcnJfY29kZTsKLQlzZW5zZS0+c2Vuc2Vfa2V5ID0gc2Vuc2Vfa2V5OwotCXNlbnNlLT5pbmZvWzBdID0gKHU4KSAoaW5mbyA+PiAyNCk7Ci0Jc2Vuc2UtPmluZm9bMV0gPSAodTgpIChpbmZvID4+IDE2KTsKLQlzZW5zZS0+aW5mb1syXSA9ICh1OCkgKGluZm8gPj4gOCk7Ci0Jc2Vuc2UtPmluZm9bM10gPSAodTgpIGluZm87Ci0KLQlzZW5zZS0+YWRfc2Vuc2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBzZW5zZV9kYXRhX3QpIC0gODsKLQlzZW5zZS0+YXNjID0gYXNjOwotCXNlbnNlLT5hc2NxID0gYXNjcTsKLQlpZiAoc25zX2tleV9pbmZvMCAhPSAwKSB7Ci0JCXNlbnNlLT5zbnNfa2V5X2luZm9bMF0gPSBTS1NWIHwgc25zX2tleV9pbmZvMDsKLQkJc2Vuc2UtPnNuc19rZXlfaW5mb1sxXSA9IChzbnNfa2V5X2luZm8xICYgMHhmMCkgPj4gODsKLQkJc2Vuc2UtPnNuc19rZXlfaW5mb1syXSA9IHNuc19rZXlfaW5mbzEgJiAweDBmOwotCX0KLX0KLQotc3RhdGljIGludCB0ZXN0X3VuaXRfcmVhZHkoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0KLQlydHM1MXhfaW5pdF9jYXJkcyhjaGlwKTsKLQotCWlmICghY2hlY2tfY2FyZF9yZWFkeShjaGlwLCBsdW4pKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfTk9UX1BSRVNFTlQpOwotCQlyZXR1cm4gVFJBTlNQT1JUX0ZBSUxFRDsKLQl9Ci0KLQlpZiAoIWNoZWNrX2x1bl9tYyhjaGlwLCBsdW4pKSB7Ci0JCXNldF9sdW5fbWMoY2hpcCwgbHVuKTsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9DSEFOR0UpOwotCQlyZXR1cm4gVFJBTlNQT1JUX0ZBSUxFRDsKLQl9Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZvcm1hdHRlcl9pbnF1aXJ5X3N0clsyMF0gPSB7Ci0JJ00nLCAnRScsICdNJywgJ08nLCAnUicsICdZJywgJ1MnLCAnVCcsICdJJywgJ0MnLCAnSycsCi0JJy0nLCAnTScsICdHJywJCS8qIEJ5dGVbNDc6NDldICovCi0JMHgwQiwJCQkvKiBCeXRlWzUwXTogTUcsIE1TLCBNU1BybywgTVNYQyAqLwotCTB4MDAsCQkJLyogQnl0ZVs1MV06IENhdGVnb3J5IFNwZWNpZmljIENvbW1hbmRzICovCi0JMHgwMCwJCQkvKiBCeXRlWzUyXTogQWNjZXNzIENvbnRyb2wgYW5kIGZlYXR1cmUgKi8KLQkweDIwLCAweDIwLCAweDIwLAkvKiBCeXRlWzUzOjU1XSAqLwotfTsKLQotc3RhdGljIGludCBpbnF1aXJ5KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWNoYXIgKmlucXVpcnlfZGVmYXVsdCA9IChjaGFyICopIkdlbmVyaWMteEQvU0QvTS5TLiAgICAgIDEuMDAgIjsKLQljaGFyICppbnF1aXJ5X3N0cmluZzsKLQl1bnNpZ25lZCBjaGFyIHNlbmRieXRlczsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0JdTggY2FyZCA9IHJ0czUxeF9nZXRfbHVuX2NhcmQoY2hpcCwgbHVuKTsKLQlpbnQgcHJvX2Zvcm1hdHRlcl9mbGFnID0gMDsKLQl1bnNpZ25lZCBjaGFyIGlucXVpcnlfYnVmW10gPSB7Ci0JCVFVTElGSVJFIHwgRFJDVF9BQ0NFU1NfREVWLAotCQlSTUJfRElTQyB8IDB4MEQsCi0JCTB4MDAsCi0JCTB4MDEsCi0JCTB4MWYsCi0JCTB4MDIsCi0JCTAsCi0JCVJFTF9BRFIgfCBXQlVTXzMyIHwgV0JVU18xNiB8IFNZTkMgfCBMSU5LRUQgfCBDTURfUVVFIHwgU0ZUX1JFLAotCX07Ci0KLQlpbnF1aXJ5X3N0cmluZyA9IGlucXVpcnlfZGVmYXVsdDsKLQotCWJ1ZiA9IHZtYWxsb2Moc2NzaV9idWZmbGVuKHNyYikpOwotCWlmIChidWYgPT0gTlVMTCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9FUlJPUik7Ci0KLQlpZiAoTVNfRk9STUFUVEVSX0VOQUJMRUQoY2hpcCkgJiYgKGdldF9sdW4yY2FyZChjaGlwLCBsdW4pICYgTVNfQ0FSRCkpIHsKLQkJaWYgKCFjYXJkIHx8IChjYXJkID09IE1TX0NBUkQpKQotCQkJcHJvX2Zvcm1hdHRlcl9mbGFnID0gMTsKLQl9Ci0KLQlpZiAocHJvX2Zvcm1hdHRlcl9mbGFnKSB7Ci0JCWlmIChzY3NpX2J1ZmZsZW4oc3JiKSA8IDU2KQotCQkJc2VuZGJ5dGVzID0gKHVuc2lnbmVkIGNoYXIpKHNjc2lfYnVmZmxlbihzcmIpKTsKLQkJZWxzZQotCQkJc2VuZGJ5dGVzID0gNTY7Ci0JfSBlbHNlIHsKLQkJaWYgKHNjc2lfYnVmZmxlbihzcmIpIDwgMzYpCi0JCQlzZW5kYnl0ZXMgPSAodW5zaWduZWQgY2hhcikoc2NzaV9idWZmbGVuKHNyYikpOwotCQllbHNlCi0JCQlzZW5kYnl0ZXMgPSAzNjsKLQl9Ci0KLQlpZiAoc2VuZGJ5dGVzID4gOCkgewotCQltZW1jcHkoYnVmLCBpbnF1aXJ5X2J1ZiwgOCk7Ci0JCW1lbWNweShidWYgKyA4LCBpbnF1aXJ5X3N0cmluZywgc2VuZGJ5dGVzIC0gOCk7Ci0JCWlmIChwcm9fZm9ybWF0dGVyX2ZsYWcpCi0JCQlidWZbNF0gPSAweDMzOwkvKiBBZGRpdGlvbmFsIExlbmd0aCAqLwotCX0gZWxzZSB7Ci0JCW1lbWNweShidWYsIGlucXVpcnlfYnVmLCBzZW5kYnl0ZXMpOwotCX0KLQotCWlmIChwcm9fZm9ybWF0dGVyX2ZsYWcpIHsKLQkJaWYgKHNlbmRieXRlcyA+IDM2KQotCQkJbWVtY3B5KGJ1ZiArIDM2LCBmb3JtYXR0ZXJfaW5xdWlyeV9zdHIsIHNlbmRieXRlcyAtIDM2KTsKLQl9Ci0KLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCi0JcnRzNTF4X3NldF94ZmVyX2J1ZihidWYsIHNjc2lfYnVmZmxlbihzcmIpLCBzcmIpOwotCXZmcmVlKGJ1Zik7Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0KLXN0YXRpYyBpbnQgc3RhcnRfc3RvcF91bml0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCi0Jc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSk7Ci0KLQlpZiAoc3JiLT5jbW5kWzFdID09IDEpCi0JCXJldHVybiBUUkFOU1BPUlRfR09PRDsKLQotCXN3aXRjaCAoc3JiLT5jbW5kWzB4NF0pIHsKLQljYXNlIFNUT1BfTUVESVVNOgotCQkvKiBNZWRpYSBkaXNhYmxlZCAqLwotCQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci0KLQljYXNlIFVOTE9BRF9NRURJVU06Ci0JCS8qIE1lZGlhIHNoYWxsIGJlIHVubG9hZCAqLwotCQlpZiAoY2hlY2tfY2FyZF9yZWFkeShjaGlwLCBsdW4pKQotCQkJcnRzNTF4X2VqZWN0X2NhcmQoY2hpcCwgbHVuKTsKLQkJcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotCi0JY2FzZSBNQUtFX01FRElVTV9SRUFEWToKLQljYXNlIExPQURfTUVESVVNOgotCQlpZiAoY2hlY2tfY2FyZF9yZWFkeShjaGlwLCBsdW4pKSB7Ci0JCQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci0JCX0gZWxzZSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCi0JCWJyZWFrOwotCX0KLQotCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRVJST1IpOwotfQotCi1zdGF0aWMgaW50IGFsbG93X21lZGl1bV9yZW1vdmFsKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCBwcmV2ZW50OwotCi0JcHJldmVudCA9IHNyYi0+Y21uZFs0XSAmIDB4MTsKLQotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgMCk7Ci0KLQlpZiAocHJldmVudCkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgU0NTSV9MVU4oc3JiKSwKLQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCXJldHVybiBUUkFOU1BPUlRfR09PRDsKLX0KLQotc3RhdGljIHZvaWQgbXNfbW9kZV9zZW5zZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGNtZCwKLQkJCSAgaW50IGx1biwgdTggKmJ1ZiwgaW50IGJ1Zl9sZW4pCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCWludCBzeXNfaW5mb19vZmZzZXQ7Ci0JaW50IGRhdGFfc2l6ZSA9IGJ1Zl9sZW47Ci0JaW50IHN1cHBvcnRfZm9ybWF0ID0gMDsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAoY21kID09IE1PREVfU0VOU0UpIHsKLQkJc3lzX2luZm9fb2Zmc2V0ID0gODsKLQkJaWYgKGRhdGFfc2l6ZSA+IDB4NjgpCi0JCQlkYXRhX3NpemUgPSAweDY4OwotCQlidWZbaSsrXSA9IDB4Njc7CS8qIE1vZGUgRGF0YSBMZW5ndGggKi8KLQl9IGVsc2UgewotCQlzeXNfaW5mb19vZmZzZXQgPSAxMjsKLQkJaWYgKGRhdGFfc2l6ZSA+IDB4NkMpCi0JCQlkYXRhX3NpemUgPSAweDZDOwotCQlidWZbaSsrXSA9IDB4MDA7CS8qIE1vZGUgRGF0YSBMZW5ndGggKE1TQikgKi8KLQkJYnVmW2krK10gPSAweDZBOwkvKiBNb2RlIERhdGEgTGVuZ3RoIChMU0IpICovCi0JfQotCi0JLyogTWVkaXVtIFR5cGUgQ29kZSAqLwotCWlmIChjaGVja19jYXJkX3JlYWR5KGNoaXAsIGx1bikpIHsKLQkJaWYgKENIS19NU1hDKG1zX2NhcmQpKSB7Ci0JCQlzdXBwb3J0X2Zvcm1hdCA9IDE7Ci0JCQlidWZbaSsrXSA9IDB4NDA7Ci0JCX0gZWxzZSBpZiAoQ0hLX01TUFJPKG1zX2NhcmQpKSB7Ci0JCQlzdXBwb3J0X2Zvcm1hdCA9IDE7Ci0JCQlidWZbaSsrXSA9IDB4MjA7Ci0JCX0gZWxzZSB7Ci0JCQlidWZbaSsrXSA9IDB4MTA7Ci0JCX0KLQotCQkvKiBXUCAqLwotCQlpZiAoY2hlY2tfY2FyZF93cChjaGlwLCBsdW4pKQotCQkJYnVmW2krK10gPSAweDgwOwotCQllbHNlCi0JCQlidWZbaSsrXSA9IDB4MDA7Ci0JfSBlbHNlIHsKLQkJYnVmW2krK10gPSAweDAwOwkvKiBNZWRpYVR5cGUgKi8KLQkJYnVmW2krK10gPSAweDAwOwkvKiBXUCAqLwotCX0KLQotCWJ1ZltpKytdID0gMHgwMDsJLyogUmVzZXJ2ZWQgKi8KLQotCWlmIChjbWQgPT0gTU9ERV9TRU5TRV8xMCkgewotCQlidWZbaSsrXSA9IDB4MDA7CS8qIFJlc2VydmVkICovCi0JCWJ1ZltpKytdID0gMHgwMDsJLyogQmxvY2sgZGVzY3JpcHRvciBsZW5ndGgoTVNCKSAqLwotCQlidWZbaSsrXSA9IDB4MDA7CS8qIEJsb2NrIGRlc2NyaXB0b3IgbGVuZ3RoKExTQikgKi8KLQotCQkvKiBUaGUgRm9sbG93aW5nIERhdGEgaXMgdGhlIGNvbnRlbnQgb2YgIlBhZ2UgMHgyMCIgKi8KLQkJaWYgKGRhdGFfc2l6ZSA+PSA5KQotCQkJYnVmW2krK10gPSAweDIwOwkvKiBQYWdlIENvZGUgKi8KLQkJaWYgKGRhdGFfc2l6ZSA+PSAxMCkKLQkJCWJ1ZltpKytdID0gMHg2MjsJLyogUGFnZSBMZW5ndGggKi8KLQkJaWYgKGRhdGFfc2l6ZSA+PSAxMSkKLQkJCWJ1ZltpKytdID0gMHgwMDsJLyogTm8gQWNjZXNzIENvbnRyb2wgKi8KLQkJaWYgKGRhdGFfc2l6ZSA+PSAxMikgewotCQkJaWYgKHN1cHBvcnRfZm9ybWF0KQotCQkJCWJ1ZltpKytdID0gMHhDMDsJLyogU0YsIFNHTSAqLwotCQkJZWxzZQotCQkJCWJ1ZltpKytdID0gMHgwMDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFRoZSBGb2xsb3dpbmcgRGF0YSBpcyB0aGUgY29udGVudCBvZiAiUGFnZSAweDIwIiAqLwotCQlpZiAoZGF0YV9zaXplID49IDUpCi0JCQlidWZbaSsrXSA9IDB4MjA7CS8qIFBhZ2UgQ29kZSAqLwotCQlpZiAoZGF0YV9zaXplID49IDYpCi0JCQlidWZbaSsrXSA9IDB4NjI7CS8qIFBhZ2UgTGVuZ3RoICovCi0JCWlmIChkYXRhX3NpemUgPj0gNykKLQkJCWJ1ZltpKytdID0gMHgwMDsJLyogTm8gQWNjZXNzIENvbnRyb2wgKi8KLQkJaWYgKGRhdGFfc2l6ZSA+PSA4KSB7Ci0JCQlpZiAoc3VwcG9ydF9mb3JtYXQpCi0JCQkJYnVmW2krK10gPSAweEMwOwkvKiBTRiwgU0dNICovCi0JCQllbHNlCi0JCQkJYnVmW2krK10gPSAweDAwOwotCQl9Ci0JfQotCi0JaWYgKGRhdGFfc2l6ZSA+IHN5c19pbmZvX29mZnNldCkgewotCQkvKiA5NiBCeXRlcyBBdHRyaWJ1dGUgRGF0YSAqLwotCQlpbnQgbGVuID0gZGF0YV9zaXplIC0gc3lzX2luZm9fb2Zmc2V0OwotCQlsZW4gPSAobGVuIDwgOTYpID8gbGVuIDogOTY7Ci0KLQkJbWVtY3B5KGJ1ZiArIHN5c19pbmZvX29mZnNldCwgbXNfY2FyZC0+cmF3X3N5c19pbmZvLCBsZW4pOwotCX0KLX0KLQotc3RhdGljIGludCBtb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCXVuc2lnbmVkIGludCBkYXRhU2l6ZTsKLQlpbnQgc3RhdHVzOwotCWludCBwcm9fZm9ybWF0dGVyX2ZsYWc7Ci0JdW5zaWduZWQgY2hhciBwYWdlQ29kZSwgKmJ1ZjsKLQl1OCBjYXJkID0gcnRzNTF4X2dldF9sdW5fY2FyZChjaGlwLCBsdW4pOwotCi0JaWYgKCFjaGVja19jYXJkX3JlYWR5KGNoaXAsIGx1bikpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JcHJvX2Zvcm1hdHRlcl9mbGFnID0gMDsKLQlkYXRhU2l6ZSA9IDg7Ci0JLyogSW4gQ29tYm8gbW9kZSwgZGV2aWNlIHJlc3BvbnNlcyBNb2RlU2Vuc2UgY29tbWFuZCBhcyBhIE1TIExVTgotCSAqIHdoZW4gbm8gY2FyZCBpcyBpbnNlcnRlZCAqLwotCWlmICgoZ2V0X2x1bjJjYXJkKGNoaXAsIGx1bikgJiBNU19DQVJEKSkgewotCQlpZiAoIWNhcmQgfHwgKGNhcmQgPT0gTVNfQ0FSRCkpIHsKLQkJCWRhdGFTaXplID0gMTA4OwotCQkJaWYgKGNoaXAtPm9wdGlvbi5ydHM1MXhfbXNwcm9fZm9ybWF0dGVyX2VuYWJsZSkKLQkJCQlwcm9fZm9ybWF0dGVyX2ZsYWcgPSAxOwotCQl9Ci0JfQotCi0JYnVmID0ga21hbGxvYyhkYXRhU2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKQotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0VSUk9SKTsKLQotCXBhZ2VDb2RlID0gc3JiLT5jbW5kWzJdICYgMHgzZjsKLQotCWlmICgocGFnZUNvZGUgPT0gMHgzRikgfHwgKHBhZ2VDb2RlID09IDB4MUMpIHx8Ci0JICAgIChwYWdlQ29kZSA9PSAweDAwKSB8fCAocHJvX2Zvcm1hdHRlcl9mbGFnICYmIChwYWdlQ29kZSA9PSAweDIwKSkpIHsKLQkJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFKSB7Ci0JCQlpZiAoKHBhZ2VDb2RlID09IDB4M0YpIHx8IChwYWdlQ29kZSA9PSAweDIwKSkgewotCQkJCW1zX21vZGVfc2Vuc2UoY2hpcCwgc3JiLT5jbW5kWzBdLCBsdW4sIGJ1ZiwKLQkJCQkJICAgICAgZGF0YVNpemUpOwotCQkJfSBlbHNlIHsKLQkJCQlkYXRhU2l6ZSA9IDQ7Ci0JCQkJYnVmWzBdID0gMHgwMzsKLQkJCQlidWZbMV0gPSAweDAwOwotCQkJCWlmIChjaGVja19jYXJkX3dwKGNoaXAsIGx1bikpCi0JCQkJCWJ1ZlsyXSA9IDB4ODA7Ci0JCQkJZWxzZQotCQkJCWJ1ZlszXSA9IDB4MDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHBhZ2VDb2RlID09IDB4M0YpIHx8IChwYWdlQ29kZSA9PSAweDIwKSkgewotCQkJCW1zX21vZGVfc2Vuc2UoY2hpcCwgc3JiLT5jbW5kWzBdLCBsdW4sIGJ1ZiwKLQkJCQkJICAgICAgZGF0YVNpemUpOwotCQkJfSBlbHNlIHsKLQkJCQlkYXRhU2l6ZSA9IDg7Ci0JCQkJYnVmWzBdID0gMHgwMDsKLQkJCQlidWZbMV0gPSAweDA2OwotCQkJCWJ1ZlsyXSA9IDB4MDA7Ci0JCQkJaWYgKGNoZWNrX2NhcmRfd3AoY2hpcCwgbHVuKSkKLQkJCQkJYnVmWzNdID0gMHg4MDsKLQkJCQllbHNlCi0JCQkJCWJ1ZlszXSA9IDB4MDA7Ci0JCQkJYnVmWzRdID0gMHgwMDsKLQkJCQlidWZbNV0gPSAweDAwOwotCQkJCWJ1Zls2XSA9IDB4MDA7Ci0JCQkJYnVmWzddID0gMHgwMDsKLQkJCX0KLQkJfQotCQlzdGF0dXMgPSBUUkFOU1BPUlRfR09PRDsKLQl9IGVsc2UgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSk7Ci0JCXN0YXR1cyA9IFRSQU5TUE9SVF9GQUlMRUQ7Ci0JfQotCi0JaWYgKHN0YXR1cyA9PSBUUkFOU1BPUlRfR09PRCkgewotCQl1bnNpZ25lZCBpbnQgbGVuID0gbWluKHNjc2lfYnVmZmxlbihzcmIpLCBkYXRhU2l6ZSk7Ci0JCXJ0czUxeF9zZXRfeGZlcl9idWYoYnVmLCBsZW4sIHNyYik7Ci0JCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBsZW4pOwotCX0KLQlrZnJlZShidWYpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCByZXF1ZXN0X3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZW5zZV9kYXRhX3QgKnNlbnNlOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQl1bnNpZ25lZCBjaGFyICp0bXAsICpidWY7Ci0KLQlzZW5zZSA9ICYoY2hpcC0+c2Vuc2VfYnVmZmVyW2x1bl0pOwotCi0JaWYgKChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgPT0gTVNfQ0FSRCkKLQkgICAgJiYgUFJPX1VOREVSX0ZPUk1BVFRJTkcobXNfY2FyZCkpIHsKLQkJcnRzNTF4X21zcHJvX2Zvcm1hdF9zZW5zZShjaGlwLCBsdW4pOwotCX0KLQotCWJ1ZiA9IHZtYWxsb2Moc2NzaV9idWZmbGVuKHNyYikpOwotCWlmIChidWYgPT0gTlVMTCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9FUlJPUik7Ci0KLQl0bXAgPSAodW5zaWduZWQgY2hhciAqKXNlbnNlOwotCW1lbWNweShidWYsIHRtcCwgc2NzaV9idWZmbGVuKHNyYikpOwotCi0JcnRzNTF4X3NldF94ZmVyX2J1ZihidWYsIHNjc2lfYnVmZmxlbihzcmIpLCBzcmIpOwotCXZmcmVlKGJ1Zik7Ci0KLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCS8qIFJlc2V0IFNlbnNlIERhdGEgKi8KLQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX05PX1NFTlNFKTsKLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF93cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQlpbnQgcmV0dmFsOwotCXUzMiBzdGFydF9zZWM7Ci0JdTE2IHNlY19jbnQ7Ci0KLQlpZiAoIWNoZWNrX2NhcmRfcmVhZHkoY2hpcCwgbHVuKSB8fCAoY2hpcC0+Y2FwYWNpdHlbbHVuXSA9PSAwKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmICghY2hlY2tfbHVuX21jKGNoaXAsIGx1bikpIHsKLQkJc2V0X2x1bl9tYyhjaGlwLCBsdW4pOwotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0NIQU5HRSk7Ci0JCXJldHVybiBUUkFOU1BPUlRfRkFJTEVEOwotCX0KLQotCXJ0czUxeF9wcmVwYXJlX3J1bihjaGlwKTsKLQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCi0JaWYgKChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCkgfHwgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkpIHsKLQkJc3RhcnRfc2VjID0KLQkJICAgICgodTMyKSBzcmItPmNtbmRbMl0gPDwgMjQpIHwKLQkJICAgICgodTMyKSBzcmItPmNtbmRbM10gPDwgMTYpIHwKLQkJICAgICgodTMyKSBzcmItPmNtbmRbNF0gPDwgOCkgfAotCQkgICAgKCh1MzIpIHNyYi0+Y21uZFs1XSk7Ci0JCXNlY19jbnQgPSAoKHUxNikgKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCBzcmItPmNtbmRbOF07Ci0JfSBlbHNlIGlmICgoc3JiLT5jbW5kWzBdID09IFJFQURfNikgfHwgKHNyYi0+Y21uZFswXSA9PSBXUklURV82KSkgewotCQlzdGFydF9zZWMgPSAoKHUzMikgKHNyYi0+Y21uZFsxXSAmIDB4MUYpIDw8IDE2KSB8Ci0JCSAgICAoKHUzMikgc3JiLT5jbW5kWzJdIDw8IDgpIHwgKCh1MzIpIHNyYi0+Y21uZFszXSk7Ci0JCXNlY19jbnQgPSBzcmItPmNtbmRbNF07Ci0JfSBlbHNlIGlmICgoc3JiLT5jbW5kWzBdID09IFZFTkRPUl9DTU5EKSAmJgotCQkJKHNyYi0+Y21uZFsxXSA9PSBTQ1NJX0FQUF9DTUQpICYmCi0JCQkoKHNyYi0+Y21uZFsyXSA9PSBQUF9SRUFEMTApIHx8Ci0JCQkgKHNyYi0+Y21uZFsyXSA9PSBQUF9XUklURTEwKSkpIHsKLQkJc3RhcnRfc2VjID0gKCh1MzIpIHNyYi0+Y21uZFs0XSA8PCAyNCkgfAotCQkJKCh1MzIpIHNyYi0+Y21uZFs1XSA8PCAxNikgfAotCQkJKCh1MzIpIHNyYi0+Y21uZFs2XSA8PCA4KSB8Ci0JCQkoKHUzMikgc3JiLT5jbW5kWzddKTsKLQkJc2VjX2NudCA9ICgodTE2KSAoc3JiLT5jbW5kWzldKSA8PCA4KSB8IHNyYi0+Y21uZFsxMF07Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlpZiAoKHN0YXJ0X3NlYyA+IGNoaXAtPmNhcGFjaXR5W2x1bl0pIHx8Ci0JICAgICgoc3RhcnRfc2VjICsgc2VjX2NudCkgPiBjaGlwLT5jYXBhY2l0eVtsdW5dKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0xCQV9PVkVSX1JBTkdFKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmIChzZWNfY250ID09IDApIHsKLQkJc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQkJcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotCX0KLQotCWlmICgoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCSAgICAmJiBjaGVja19jYXJkX3dwKGNoaXAsIGx1bikpIHsKLQkJUlRTNTFYX0RFQlVHUCgiV3JpdGUgcHJvdGVjdGVkIGNhcmQhXG4iKTsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9XUklURV9QUk9URUNUKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9jYXJkX3J3KHNyYiwgY2hpcCwgc3RhcnRfc2VjLCBzZWNfY250KTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgewotCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCQl9IGVsc2UgewotCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQl9Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IHJlYWRfZm9ybWF0X2NhcGFjaXR5KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1bnNpZ25lZCBpbnQgYnVmX2xlbjsKLQl1OCBjYXJkID0gcnRzNTF4X2dldF9sdW5fY2FyZChjaGlwLCBsdW4pOwotCWludCBkZXNjX2NudDsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAoIWNoZWNrX2NhcmRfcmVhZHkoY2hpcCwgbHVuKSkgewotCQlpZiAoIWNoaXAtPm9wdGlvbi5ydHM1MXhfbXNwcm9fZm9ybWF0dGVyX2VuYWJsZSkgewotCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0KLQl9Ci0KLQlidWZfbGVuID0gKHNjc2lfYnVmZmxlbihzcmIpID4gMTIpID8gMHgxNCA6IDEyOwotCi0JYnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmID09IE5VTEwpCi0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRVJST1IpOwotCi0JYnVmW2krK10gPSAwOwotCWJ1ZltpKytdID0gMDsKLQlidWZbaSsrXSA9IDA7Ci0KLQkvKiBDYXBhY2l0eSBMaXN0IExlbmd0aCAqLwotCWlmICgoYnVmX2xlbiA+IDEyKSAmJiBjaGlwLT5vcHRpb24ucnRzNTF4X21zcHJvX2Zvcm1hdHRlcl9lbmFibGUgJiYKLQkgICAgKGNoaXAtPmx1bjJjYXJkW2x1bl0gJiBNU19DQVJEKSAmJiAoIWNhcmQgfHwgKGNhcmQgPT0gTVNfQ0FSRCkpKSB7Ci0JCWJ1ZltpKytdID0gMHgxMDsKLQkJZGVzY19jbnQgPSAyOwotCX0gZWxzZSB7Ci0JCWJ1ZltpKytdID0gMHgwODsKLQkJZGVzY19jbnQgPSAxOwotCX0KLQotCXdoaWxlIChkZXNjX2NudCkgewotCQlpZiAoY2hlY2tfY2FyZF9yZWFkeShjaGlwLCBsdW4pKSB7Ci0JCQlidWZbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoY2hpcC0+Y2FwYWNpdHlbbHVuXSkgPj4gMjQpOwotCQkJYnVmW2krK10gPSAodW5zaWduZWQgY2hhcikoKGNoaXAtPmNhcGFjaXR5W2x1bl0pID4+IDE2KTsKLQkJCWJ1ZltpKytdID0gKHVuc2lnbmVkIGNoYXIpKChjaGlwLT5jYXBhY2l0eVtsdW5dKSA+PiA4KTsKLQkJCWJ1ZltpKytdID0gKHVuc2lnbmVkIGNoYXIpKGNoaXAtPmNhcGFjaXR5W2x1bl0pOwotCi0JCQlpZiAoZGVzY19jbnQgPT0gMikKLQkJCQkvKiBCeXRlWzhdOiBEZXNjcmlwdG9yIFR5cGU6IEZvcm1hdHRlZCBtZWRpdW0gKi8KLQkJCQlidWZbaSsrXSA9IDI7Ci0JCQllbHNlCi0JCQkJYnVmW2krK10gPSAwOwkvKiBCeXRlWzE2XSAqLwotCQl9IGVsc2UgewotCQkJYnVmW2krK10gPSAweEZGOwotCQkJYnVmW2krK10gPSAweEZGOwotCQkJYnVmW2krK10gPSAweEZGOwotCQkJYnVmW2krK10gPSAweEZGOwotCi0JCQlpZiAoZGVzY19jbnQgPT0gMikKLQkJCQkvKiBCeXRlWzhdOiBEZXNjcmlwdG9yIFR5cGU6IE5vIG1lZGl1bSAqLwotCQkJCWJ1ZltpKytdID0gMzsKLQkJCWVsc2UKLQkJCQlidWZbaSsrXSA9IDA7CS8qQnl0ZVsxNl0gKi8KLQkJfQotCi0JCWJ1ZltpKytdID0gMHgwMDsKLQkJYnVmW2krK10gPSAweDAyOwotCQlidWZbaSsrXSA9IDB4MDA7Ci0KLQkJZGVzY19jbnQtLTsKLQl9Ci0KLQlidWZfbGVuID0gbWluKHNjc2lfYnVmZmxlbihzcmIpLCBidWZfbGVuKTsKLQlydHM1MXhfc2V0X3hmZXJfYnVmKGJ1ZiwgYnVmX2xlbiwgc3JiKTsKLQlrZnJlZShidWYpOwotCi0Jc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIGJ1Zl9sZW4pOwotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY2FwYWNpdHkoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCi0JaWYgKCFjaGVja19jYXJkX3JlYWR5KGNoaXAsIGx1bikpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlpZiAoIWNoZWNrX2x1bl9tYyhjaGlwLCBsdW4pKSB7Ci0JCXNldF9sdW5fbWMoY2hpcCwgbHVuKTsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9DSEFOR0UpOwotCQlyZXR1cm4gVFJBTlNQT1JUX0ZBSUxFRDsKLQl9Ci0KLQlidWYgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWlmIChidWYgPT0gTlVMTCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9FUlJPUik7Ci0KLQlidWZbMF0gPSAodW5zaWduZWQgY2hhcikoKGNoaXAtPmNhcGFjaXR5W2x1bl0gLSAxKSA+PiAyNCk7Ci0JYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKChjaGlwLT5jYXBhY2l0eVtsdW5dIC0gMSkgPj4gMTYpOwotCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoY2hpcC0+Y2FwYWNpdHlbbHVuXSAtIDEpID4+IDgpOwotCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKShjaGlwLT5jYXBhY2l0eVtsdW5dIC0gMSk7Ci0KLQlidWZbNF0gPSAweDAwOwotCWJ1Zls1XSA9IDB4MDA7Ci0JYnVmWzZdID0gMHgwMjsKLQlidWZbN10gPSAweDAwOwotCi0JcnRzNTF4X3NldF94ZmVyX2J1ZihidWYsIHNjc2lfYnVmZmxlbihzcmIpLCBzcmIpOwotCWtmcmVlKGJ1Zik7Ci0KLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IGdldF9kZXZfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCXVuc2lnbmVkIGludCBidWZfbGVuOwotCXU4IHN0YXR1c1szMl0gPSB7IDAgfTsKLQotCXJ0czUxeF9wcF9zdGF0dXMoY2hpcCwgbHVuLCBzdGF0dXMsIDMyKTsKLQotCWJ1Zl9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNjc2lfYnVmZmxlbihzcmIpLCBzaXplb2Yoc3RhdHVzKSk7Ci0JcnRzNTF4X3NldF94ZmVyX2J1ZihzdGF0dXMsIGJ1Zl9sZW4sIHNyYik7Ci0Jc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIGJ1Zl9sZW4pOwotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IHJlYWRfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXU4IHJ0czUxeF9zdGF0dXNbMTZdOwotCXVuc2lnbmVkIGludCBidWZfbGVuOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCi0JcnRzNTF4X3JlYWRfc3RhdHVzKGNoaXAsIGx1biwgcnRzNTF4X3N0YXR1cywgMTYpOwotCi0JYnVmX2xlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2NzaV9idWZmbGVuKHNyYiksIHNpemVvZihydHM1MXhfc3RhdHVzKSk7Ci0JcnRzNTF4X3NldF94ZmVyX2J1ZihydHM1MXhfc3RhdHVzLCBidWZfbGVuLCBzcmIpOwotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBidWZfbGVuKTsKLQotCXJldHVybiBUUkFOU1BPUlRfR09PRDsKLX0KLQotc3RhdGljIGludCByZWFkX21lbShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1bnNpZ25lZCBzaG9ydCBhZGRyLCBsZW4sIGk7Ci0JaW50IHJldHZhbDsKLQl1OCAqYnVmOwotCi0JcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLQlhZGRyID0gKCh1MTYpIHNyYi0+Y21uZFsyXSA8PCA4KSB8IHNyYi0+Y21uZFszXTsKLQlsZW4gPSAoKHUxNikgc3JiLT5jbW5kWzRdIDw8IDgpIHwgc3JiLT5jbW5kWzVdOwotCi0JaWYgKGFkZHIgPCAweGUwMDApIHsKLQkJUlRTNTFYX0RFQlVHUCgiZmlsdGVyIWFkZHI9MHgleFxuIiwgYWRkcik7Ci0JCXJldHVybiBUUkFOU1BPUlRfR09PRDsKLQl9Ci0KLQlidWYgPSB2bWFsbG9jKGxlbik7Ci0JaWYgKCFidWYpCi0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRVJST1IpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXJldHZhbCA9IHJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBhZGRyICsgaSwgYnVmICsgaSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXZmcmVlKGJ1Zik7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0KLQl9Ci0KLQlsZW4gPSAodW5zaWduZWQgc2hvcnQpbWluKHNjc2lfYnVmZmxlbihzcmIpLCAodW5zaWduZWQgaW50KWxlbik7Ci0JcnRzNTF4X3NldF94ZmVyX2J1ZihidWYsIGxlbiwgc3JiKTsKLQlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gbGVuKTsKLQotCXZmcmVlKGJ1Zik7Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfbWVtKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCXVuc2lnbmVkIHNob3J0IGFkZHIsIGxlbiwgaTsKLQlpbnQgcmV0dmFsOwotCXU4ICpidWY7Ci0KLQlydHM1MXhfcHJlcGFyZV9ydW4oY2hpcCk7Ci0JUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfUlVOKTsKLQotCWFkZHIgPSAoKHUxNikgc3JiLT5jbW5kWzJdIDw8IDgpIHwgc3JiLT5jbW5kWzNdOwotCWxlbiA9ICgodTE2KSBzcmItPmNtbmRbNF0gPDwgOCkgfCBzcmItPmNtbmRbNV07Ci0KLQlpZiAoYWRkciA8IDB4ZTAwMCkgewotCQlSVFM1MVhfREVCVUdQKCJmaWx0ZXIhYWRkcj0weCV4XG4iLCBhZGRyKTsKLQkJcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotCX0KLQotCWxlbiA9ICh1bnNpZ25lZCBzaG9ydCltaW4oc2NzaV9idWZmbGVuKHNyYiksICh1bnNpZ25lZCBpbnQpbGVuKTsKLQlidWYgPSB2bWFsbG9jKGxlbik7Ci0JaWYgKCFidWYpCi0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRVJST1IpOwotCi0JcnRzNTF4X2dldF94ZmVyX2J1ZihidWYsIGxlbiwgc3JiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlyZXR2YWwgPQotCQkgICAgcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcihjaGlwLCBhZGRyICsgaSwgMHhGRiwgYnVmW2ldKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJdmZyZWUoYnVmKTsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCX0KLQotCXZmcmVlKGJ1Zik7Ci0Jc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIGxlbik7Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3NkX2NzZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0KLQlpZiAoIWNoZWNrX2NhcmRfcmVhZHkoY2hpcCwgbHVuKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmIChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgIT0gU0RfQ0FSRCkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCXJ0czUxeF9zZXRfeGZlcl9idWYoc2RfY2FyZC0+cmF3X2NzZCwgc2NzaV9idWZmbGVuKHNyYiksIHNyYik7Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF9waHlfcmVnaXN0ZXIoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQl1OCBhZGRyLCBsZW4sIGk7Ci0JdTggKmJ1ZjsKLQotCXJ0czUxeF9wcmVwYXJlX3J1bihjaGlwKTsKLQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCi0JYWRkciA9IHNyYi0+Y21uZFs1XTsKLQlsZW4gPSBzcmItPmNtbmRbN107Ci0KLQlpZiAobGVuKSB7Ci0JCWJ1ZiA9IHZtYWxsb2MobGVuKTsKLQkJaWYgKCFidWYpCi0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0VSUk9SKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCXJldHZhbCA9Ci0JCQkgICAgcnRzNTF4X3JlYWRfcGh5X3JlZ2lzdGVyKGNoaXAsIGFkZHIgKyBpLCBidWYgKyBpKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQl2ZnJlZShidWYpOwotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBTQ1NJX0xVTihzcmIpLAotCQkJCQlTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCQkJfQotCQl9Ci0KLQkJbGVuID0gbWluKHNjc2lfYnVmZmxlbihzcmIpLCAodW5zaWduZWQgaW50KWxlbik7Ci0JCXJ0czUxeF9zZXRfeGZlcl9idWYoYnVmLCBsZW4sIHNyYik7Ci0JCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBsZW4pOwotCi0JCXZmcmVlKGJ1Zik7Ci0JfQotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX3BoeV9yZWdpc3RlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IGFkZHIsIGxlbiwgaTsKLQl1OCAqYnVmOwotCi0JcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLQlhZGRyID0gc3JiLT5jbW5kWzVdOwotCWxlbiA9IHNyYi0+Y21uZFs3XTsKLQotCWlmIChsZW4pIHsKLQkJbGVuID0gbWluKHNjc2lfYnVmZmxlbihzcmIpLCAodW5zaWduZWQgaW50KWxlbik7Ci0KLQkJYnVmID0gdm1hbGxvYyhsZW4pOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0VSUk9SKTsKLQotCQlydHM1MXhfZ2V0X3hmZXJfYnVmKGJ1ZiwgbGVuLCBzcmIpOwotCQlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gbGVuKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCXJldHZhbCA9Ci0JCQkgICAgcnRzNTF4X3dyaXRlX3BoeV9yZWdpc3RlcihjaGlwLCBhZGRyICsgaSwgYnVmW2ldKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQl2ZnJlZShidWYpOwotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBTQ1NJX0xVTihzcmIpLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJCX0KLQkJfQotCi0JCXZmcmVlKGJ1Zik7Ci0JfQotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IGdldF9jYXJkX2J1c193aWR0aChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1OCBjYXJkLCBidXNfd2lkdGg7Ci0KLQlpZiAoIWNoZWNrX2NhcmRfcmVhZHkoY2hpcCwgbHVuKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWNhcmQgPSBydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bik7Ci0JaWYgKChjYXJkID09IFNEX0NBUkQpIHx8IChjYXJkID09IE1TX0NBUkQpKSB7Ci0JCWJ1c193aWR0aCA9IGNoaXAtPmNhcmRfYnVzX3dpZHRoW2x1bl07Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0Jc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQlydHM1MXhfc2V0X3hmZXJfYnVmKCZidXNfd2lkdGgsIHNjc2lfYnVmZmxlbihzcmIpLCBzcmIpOwotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi0jaWZkZWYgX01TR19UUkFDRQotc3RhdGljIGludCB0cmFjZV9tc2dfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0JdTggY2xlYXI7Ci0JdW5zaWduZWQgaW50IGJ1Zl9sZW47Ci0KLQlidWZfbGVuID0KLQkgICAgNCArCi0JICAgICgoMiArIE1TR19GVU5DX0xFTiArIE1TR19GSUxFX0xFTiArIFRJTUVfVkFMX0xFTikgKiBUUkFDRV9JVEVNX0NOVCk7Ci0KLQlpZiAoKHNjc2lfYnVmZmxlbihzcmIpIDwgYnVmX2xlbikgfHwgKHNjc2lfc2dsaXN0KHNyYikgPT0gTlVMTCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIFNDU0lfTFVOKHNyYiksCi0JCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JY2xlYXIgPSBzcmItPmNtbmRbMl07Ci0KLQlidWYgPSB2bWFsbG9jKHNjc2lfYnVmZmxlbihzcmIpKTsKLQlpZiAoYnVmID09IE5VTEwpCi0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRVJST1IpOwotCi0JcnRzNTF4X3RyYWNlX21zZyhjaGlwLCBidWYsIGNsZWFyKTsKLQotCXJ0czUxeF9zZXRfeGZlcl9idWYoYnVmLCBzY3NpX2J1ZmZsZW4oc3JiKSwgc3JiKTsKLQl2ZnJlZShidWYpOwotCi0Jc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCByd19tZW1fY21kX2J1ZihzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsID0gU1RBVFVTX1NVQ0NFU1M7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0JdTggY21kX3R5cGUsIG1hc2ssIHZhbHVlLCBpZHgsIG1vZGUsIGxlbjsKLQl1MTYgYWRkcjsKLQl1MzIgdGltZW91dDsKLQotCXJ0czUxeF9wcmVwYXJlX3J1bihjaGlwKTsKLQlSVFM1MVhfU0VUX1NUQVQoY2hpcCwgU1RBVF9SVU4pOwotCi0Jc3dpdGNoIChzcmItPmNtbmRbM10pIHsKLQljYXNlIElOSVRfQkFUQ0hDTUQ6Ci0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFERF9CQVRDSENNRDoKLQkJY21kX3R5cGUgPSBzcmItPmNtbmRbNF07Ci0JCWlmIChjbWRfdHlwZSA+IDIpIHsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfSU5WQUxJRF9DTURfRklFTEQpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCQl9Ci0JCWFkZHIgPSAoc3JiLT5jbW5kWzVdIDw8IDgpIHwgc3JiLT5jbW5kWzZdOwotCQltYXNrID0gc3JiLT5jbW5kWzddOwotCQl2YWx1ZSA9IHNyYi0+Y21uZFs4XTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgY21kX3R5cGUsIGFkZHIsIG1hc2ssIHZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNFTkRfQkFUQ0hDTUQ6Ci0JCW1vZGUgPSBzcmItPmNtbmRbNF07Ci0JCWxlbiA9IHNyYi0+Y21uZFs1XTsKLQkJdGltZW91dCA9Ci0JCSAgICAoKHUzMikgc3JiLT5jbW5kWzZdIDw8IDI0KSB8ICgodTMyKSBzcmItPgotCQkJCQkJICBjbW5kWzddIDw8IDE2KSB8ICgodTMyKSBzcmItPgotCQkJCQkJCQkgICAgY21uZFs4XSA8PAotCQkJCQkJCQkgICAgOCkgfCAoKHUzMikKLQkJCQkJCQkJCSAgc3JiLT4KLQkJCQkJCQkJCSAgY21uZAotCQkJCQkJCQkJICBbOV0pOwotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgbW9kZSwgMTAwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlpZiAobW9kZSAmIFNUQUdFX1IpIHsKLQkJCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIGxlbiwgdGltZW91dCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJU0VOU0VfVFlQRV9NRURJQV9VTlJFQ09WRVJfUkVBRF9FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgR0VUX0JBVENIUlNQOgotCQlpZHggPSBzcmItPmNtbmRbNF07Ci0JCXZhbHVlID0gY2hpcC0+cnNwX2J1ZltpZHhdOwotCQlpZiAoc2NzaV9idWZmbGVuKHNyYikgPCAxKSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlydHM1MXhfc2V0X3hmZXJfYnVmKCZ2YWx1ZSwgMSwgc3JiKTsKLQkJc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IHN1aXRfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXN1bHQ7Ci0KLQlzd2l0Y2ggKHNyYi0+Y21uZFszXSkgewotCWNhc2UgSU5JVF9CQVRDSENNRDoKLQljYXNlIEFERF9CQVRDSENNRDoKLQljYXNlIFNFTkRfQkFUQ0hDTUQ6Ci0JY2FzZSBHRVRfQkFUQ0hSU1A6Ci0JCXJlc3VsdCA9IHJ3X21lbV9jbWRfYnVmKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlc3VsdCA9IFRSQU5TUE9SVF9FUlJPUjsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGFwcF9jbWQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJlc3VsdDsKLQotCXN3aXRjaCAoc3JiLT5jbW5kWzJdKSB7Ci0JY2FzZSBQUF9SRUFEMTA6Ci0JY2FzZSBQUF9XUklURTEwOgotCQlyZXN1bHQgPSByZWFkX3dyaXRlKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTVUlUX0NNRDoKLQkJcmVzdWx0ID0gc3VpdF9jbWQoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFJFQURfUEhZOgotCQlyZXN1bHQgPSByZWFkX3BoeV9yZWdpc3RlcihzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgV1JJVEVfUEhZOgotCQlyZXN1bHQgPSB3cml0ZV9waHlfcmVnaXN0ZXIoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEdFVF9ERVZfU1RBVFVTOgotCQlyZXN1bHQgPSBnZXRfZGV2X3N0YXR1cyhzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBTQ1NJX0xVTihzcmIpLAotCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfSU5WQUxJRF9DTURfRklFTEQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCB2ZW5kb3JfY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmVzdWx0ID0gVFJBTlNQT1JUX0dPT0Q7Ci0KLQlzd2l0Y2ggKHNyYi0+Y21uZFsxXSkgewotCWNhc2UgUkVBRF9TVEFUVVM6Ci0JCXJlc3VsdCA9IHJlYWRfc3RhdHVzKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBSRUFEX01FTToKLQkJcmVzdWx0ID0gcmVhZF9tZW0oc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFdSSVRFX01FTToKLQkJcmVzdWx0ID0gd3JpdGVfbWVtKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBHRVRfQlVTX1dJRFRIOgotCQlyZXN1bHQgPSBnZXRfY2FyZF9idXNfd2lkdGgoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEdFVF9TRF9DU0Q6Ci0JCXJlc3VsdCA9IGdldF9zZF9jc2Qoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBfTVNHX1RSQUNFCi0JY2FzZSBUUkFDRV9NU0c6Ci0JCXJlc3VsdCA9IHRyYWNlX21zZ19jbWQoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWNhc2UgU0NTSV9BUFBfQ01EOgotCQlyZXN1bHQgPSBhcHBfY21kKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIFNDU0lfTFVOKHNyYiksCi0JCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IG1zX2Zvcm1hdF9jbW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQlpbnQgcmV0dmFsLCBxdWlja19mb3JtYXQ7Ci0KLQlpZiAocnRzNTF4X2dldF9sdW5fY2FyZChjaGlwLCBsdW4pICE9IE1TX0NBUkQpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9MVU5fTk9UX1NVUFBPUlQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JaWYgKChzcmItPmNtbmRbM10gIT0gMHg0RCkgfHwgKHNyYi0+Y21uZFs0XSAhPSAweDQ3KQotCSAgICB8fCAoc3JiLT5jbW5kWzVdICE9IDB4NjYpIHx8IChzcmItPmNtbmRbNl0gIT0gMHg2RCkKLQkgICAgfHwgKHNyYi0+Y21uZFs3XSAhPSAweDc0KSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmIChzcmItPmNtbmRbOF0gJiAweDAxKQotCQlxdWlja19mb3JtYXQgPSAwOwotCWVsc2UKLQkJcXVpY2tfZm9ybWF0ID0gMTsKLQotCWlmICghKGNoaXAtPmNhcmRfcmVhZHkgJiBNU19DQVJEKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmIChjaGlwLT5jYXJkX3dwICYgTVNfQ0FSRCkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX1dSSVRFX1BST1RFQ1QpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JaWYgKCFDSEtfTVNQUk8obXNfY2FyZCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9MVU5fTk9UX1NVUFBPUlQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLQlyZXR2YWwgPSBydHM1MXhfbXNwcm9fZm9ybWF0KHNyYiwgY2hpcCwgTVNfU0hPUlRfREFUQV9MRU4sIHF1aWNrX2Zvcm1hdCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX0ZPUk1BVF9DTURfRkFJTEVEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgMCk7Ci0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi0jaWZkZWYgU1VQUE9SVF9QQ0dMXzFQMTgKLXN0YXRpYyBpbnQgZ2V0X21zX2luZm9ybWF0aW9uKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQl1OCBkZXZfaW5mb19pZCwgZGF0YV9sZW47Ci0JdTggKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgYnVmX2xlbjsKLQlpbnQgaTsKLQotCWlmICghY2hlY2tfY2FyZF9yZWFkeShjaGlwLCBsdW4pKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfTk9UX1BSRVNFTlQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCWlmICgocnRzNTF4X2dldF9sdW5fY2FyZChjaGlwLCBsdW4pICE9IE1TX0NBUkQpKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfTFVOX05PVF9TVVBQT1JUKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmICgoc3JiLT5jbW5kWzJdICE9IDB4QjApIHx8IChzcmItPmNtbmRbNF0gIT0gMHg0RCkgfHwKLQkgICAgKHNyYi0+Y21uZFs1XSAhPSAweDUzKSB8fCAoc3JiLT5jbW5kWzZdICE9IDB4NDkpIHx8Ci0JICAgIChzcmItPmNtbmRbN10gIT0gMHg0NCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlkZXZfaW5mb19pZCA9IHNyYi0+Y21uZFszXTsKLQlpZiAoKENIS19NU1hDKG1zX2NhcmQpICYmIChkZXZfaW5mb19pZCA9PSAweDEwKSkgfHwKLQkgICAgKCFDSEtfTVNYQyhtc19jYXJkKSAmJiAoZGV2X2luZm9faWQgPT0gMHgxMykpIHx8Ci0JICAgICFDSEtfTVNQUk8obXNfY2FyZCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlpZiAoZGV2X2luZm9faWQgPT0gMHgxNSkKLQkJYnVmX2xlbiA9IGRhdGFfbGVuID0gMHgzQTsKLQllbHNlCi0JCWJ1Zl9sZW4gPSBkYXRhX2xlbiA9IDB4NkE7Ci0KLQlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0VSUk9SKTsKLQotCWkgPSAwOwotCS8qIEdFVCBNZW1vcnkgU3RpY2sgTWVkaWEgSW5mb3JtYXRpb24gUmVzcG9uc2UgSGVhZGVyICovCi0JYnVmW2krK10gPSAweDAwOwkvKiBEYXRhIGxlbmd0aCBNU0IgKi8KLQlidWZbaSsrXSA9IGRhdGFfbGVuOwkvKiBEYXRhIGxlbmd0aCBMU0IgKi8KLQkvKiBEZXZpY2UgSW5mb3JtYXRpb24gVHlwZSBDb2RlICovCi0JaWYgKENIS19NU1hDKG1zX2NhcmQpKQotCQlidWZbaSsrXSA9IDB4MDM7Ci0JZWxzZQotCQlidWZbaSsrXSA9IDB4MDI7Ci0JLyogU0dNIGJpdCAqLwotCWJ1ZltpKytdID0gMHgwMTsKLQkvKiBSZXNlcnZlZCAqLwotCWJ1ZltpKytdID0gMHgwMDsKLQlidWZbaSsrXSA9IDB4MDA7Ci0JYnVmW2krK10gPSAweDAwOwotCS8qIE51bWJlciBvZiBEZXZpY2UgSW5mb3JtYXRpb24gKi8KLQlidWZbaSsrXSA9IDB4MDE7Ci0KLQkvKiAgRGV2aWNlIEluZm9ybWF0aW9uIEJvZHkKLQkgKiAgRGV2aWNlIEluZm9ybWF0aW9uIElEIE51bWJlciAqLwotCWJ1ZltpKytdID0gZGV2X2luZm9faWQ7Ci0JLyogRGV2aWNlIEluZm9ybWF0aW9uIExlbmd0aCAqLwotCWlmIChkZXZfaW5mb19pZCA9PSAweDE1KQotCQlkYXRhX2xlbiA9IDB4MzE7Ci0JZWxzZQotCQlkYXRhX2xlbiA9IDB4NjE7Ci0JYnVmW2krK10gPSAweDAwOwkvKiBEYXRhIGxlbmd0aCBNU0IgKi8KLQlidWZbaSsrXSA9IGRhdGFfbGVuOwkvKiBEYXRhIGxlbmd0aCBMU0IgKi8KLQkvKiBWYWxpZCBCaXQgKi8KLQlidWZbaSsrXSA9IDB4ODA7Ci0JaWYgKChkZXZfaW5mb19pZCA9PSAweDEwKSB8fCAoZGV2X2luZm9faWQgPT0gMHgxMykpIHsKLQkJLyogU3lzdGVtIEluZm9ybWF0aW9uICovCi0JCW1lbWNweShidWYgKyBpLCBtc19jYXJkLT5yYXdfc3lzX2luZm8sIDk2KTsKLQl9IGVsc2UgewotCQkvKiBNb2RlbCBOYW1lICovCi0JCW1lbWNweShidWYgKyBpLCBtc19jYXJkLT5yYXdfbW9kZWxfbmFtZSwgNDgpOwotCX0KLQotCXJ0czUxeF9zZXRfeGZlcl9idWYoYnVmLCBidWZfbGVuLCBzcmIpOwotCi0JaWYgKGRldl9pbmZvX2lkID09IDB4MTUpCi0JCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSAweDNDKTsKLQllbHNlCi0JCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSAweDZDKTsKLQotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbXNfc3BfY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsID0gVFJBTlNQT1JUX0VSUk9SOwotCi0JaWYgKHNyYi0+Y21uZFsyXSA9PSBNU19GT1JNQVQpCi0JCXJldHZhbCA9IG1zX2Zvcm1hdF9jbW5kKHNyYiwgY2hpcCk7Ci0jaWZkZWYgU1VQUE9SVF9QQ0dMXzFQMTgKLQllbHNlIGlmIChzcmItPmNtbmRbMl0gPT0gR0VUX01TX0lORk9STUFUSU9OKQotCQlyZXR2YWwgPSBnZXRfbXNfaW5mb3JtYXRpb24oc3JiLCBjaGlwKTsKLSNlbmRpZgotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2lmZGVmIFNVUFBPUlRfQ1BSTQotc3RhdGljIGludCBzZF9leHRlbnRpb25fY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQlpbnQgcmVzdWx0OwotCi0JcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLQlydHM1MXhfc2RfY2xlYW51cF93b3JrKGNoaXApOwotCi0JaWYgKCFjaGVja19jYXJkX3JlYWR5KGNoaXAsIGx1bikpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0JaWYgKChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgIT0gU0RfQ0FSRCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9MVU5fTk9UX1NVUFBPUlQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0Jc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKLQljYXNlIFNEX1BBU1NfVEhSVV9NT0RFOgotCQlyZXN1bHQgPSBydHM1MXhfc2RfcGFzc190aHJ1X21vZGUoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNEX0VYRUNVVEVfTk9fREFUQToKLQkJcmVzdWx0ID0gcnRzNTF4X3NkX2V4ZWN1dGVfbm9fZGF0YShzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgU0RfRVhFQ1VURV9SRUFEOgotCQlyZXN1bHQgPSBydHM1MXhfc2RfZXhlY3V0ZV9yZWFkX2RhdGEoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNEX0VYRUNVVEVfV1JJVEU6Ci0JCXJlc3VsdCA9IHJ0czUxeF9zZF9leGVjdXRlX3dyaXRlX2RhdGEoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNEX0dFVF9SU1A6Ci0JCXJlc3VsdCA9IHJ0czUxeF9zZF9nZXRfY21kX3JzcChzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgU0RfSFdfUlNUOgotCQlyZXN1bHQgPSBydHM1MXhfc2RfaHdfcnN0KHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBTVVBQT1JUX01BR0lDX0dBVEUKLXN0YXRpYyBpbnQgbWdfcmVwb3J0X2tleShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgbXNfaW5mbyAqbXNfY2FyZCA9ICYoY2hpcC0+bXNfY2FyZCk7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0JaW50IHJldHZhbDsKLQl1OCBrZXlfZm9ybWF0OwotCi0JcnRzNTF4X3ByZXBhcmVfcnVuKGNoaXApOwotCVJUUzUxWF9TRVRfU1RBVChjaGlwLCBTVEFUX1JVTik7Ci0KLQlydHM1MXhfbXNfY2xlYW51cF93b3JrKGNoaXApOwotCi0JaWYgKCFjaGVja19jYXJkX3JlYWR5KGNoaXAsIGx1bikpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0JaWYgKChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgIT0gTVNfQ0FSRCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9MVU5fTk9UX1NVUFBPUlQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JaWYgKHNyYi0+Y21uZFs3XSAhPSBLQ19NR19SX1BSTykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmICghQ0hLX01TUFJPKG1zX2NhcmQpKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfSU5DT01QQVRJQkxFX01FRElVTSk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlrZXlfZm9ybWF0ID0gc3JiLT5jbW5kWzEwXSAmIDB4M0Y7Ci0KLQlzd2l0Y2ggKGtleV9mb3JtYXQpIHsKLQljYXNlIEtGX0dFVF9MT0NfRUtCOgotCQlpZiAoKHNjc2lfYnVmZmxlbihzcmIpID09IDB4NDFDKSAmJgotCQkgICAgKHNyYi0+Y21uZFs4XSA9PSAweDA0KSAmJiAoc3JiLT5jbW5kWzldID09IDB4MUMpKSB7Ci0JCQlyZXR2YWwgPSBydHM1MXhfbWdfZ2V0X2xvY2FsX0VLQihzcmIsIGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0gZWxzZSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgS0ZfUlNQX0NIRzoKLQkJaWYgKChzY3NpX2J1ZmZsZW4oc3JiKSA9PSAweDI0KSAmJgotCQkgICAgKHNyYi0+Y21uZFs4XSA9PSAweDAwKSAmJiAoc3JiLT5jbW5kWzldID09IDB4MjQpKSB7Ci0JCQlyZXR2YWwgPSBydHM1MXhfbWdfZ2V0X3JzcF9jaGcoc3JiLCBjaGlwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCQl9IGVsc2UgewotCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEtGX0dFVF9JQ1Y6Ci0JCW1zX2NhcmQtPm1nX2VudHJ5X251bSA9IHNyYi0+Y21uZFs1XTsKLQkJaWYgKChzY3NpX2J1ZmZsZW4oc3JiKSA9PSAweDQwNCkgJiYKLQkJICAgIChzcmItPmNtbmRbOF0gPT0gMHgwNCkgJiYKLQkJICAgIChzcmItPmNtbmRbOV0gPT0gMHgwNCkgJiYKLQkJICAgIChzcmItPmNtbmRbMl0gPT0gMHgwMCkgJiYKLQkJICAgIChzcmItPmNtbmRbM10gPT0gMHgwMCkgJiYKLQkJICAgIChzcmItPmNtbmRbNF0gPT0gMHgwMCkgJiYgKHNyYi0+Y21uZFs1XSA8IDMyKSkgewotCQkJcmV0dmFsID0gcnRzNTF4X21nX2dldF9JQ1Yoc3JiLCBjaGlwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCQl9IGVsc2UgewotCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgMCk7Ci0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotCi1zdGF0aWMgaW50IG1nX3NlbmRfa2V5KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQlpbnQgcmV0dmFsOwotCXU4IGtleV9mb3JtYXQ7Ci0KLQlydHM1MXhfcHJlcGFyZV9ydW4oY2hpcCk7Ci0JUlRTNTFYX1NFVF9TVEFUKGNoaXAsIFNUQVRfUlVOKTsKLQotCXJ0czUxeF9tc19jbGVhbnVwX3dvcmsoY2hpcCk7Ci0KLQlpZiAoIWNoZWNrX2NhcmRfcmVhZHkoY2hpcCwgbHVuKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQlpZiAoY2hlY2tfY2FyZF93cChjaGlwLCBsdW4pKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfUFJPVEVDVCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0JaWYgKChydHM1MXhfZ2V0X2x1bl9jYXJkKGNoaXAsIGx1bikgIT0gTVNfQ0FSRCkpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9MVU5fTk9UX1NVUFBPUlQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JaWYgKHNyYi0+Y21uZFs3XSAhPSBLQ19NR19SX1BSTykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmICghQ0hLX01TUFJPKG1zX2NhcmQpKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUdfSU5DT01QQVRJQkxFX01FRElVTSk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlrZXlfZm9ybWF0ID0gc3JiLT5jbW5kWzEwXSAmIDB4M0Y7Ci0KLQlzd2l0Y2ggKGtleV9mb3JtYXQpIHsKLQljYXNlIEtGX1NFVF9MRUFGX0lEOgotCQlpZiAoKHNjc2lfYnVmZmxlbihzcmIpID09IDB4MEMpICYmCi0JCSAgICAoc3JiLT5jbW5kWzhdID09IDB4MDApICYmIChzcmItPmNtbmRbOV0gPT0gMHgwQykpIHsKLQkJCXJldHZhbCA9IHJ0czUxeF9tZ19zZXRfbGVhZl9pZChzcmIsIGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0gZWxzZSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgS0ZfQ0hHX0hPU1Q6Ci0JCWlmICgoc2NzaV9idWZmbGVuKHNyYikgPT0gMHgwQykgJiYKLQkJICAgIChzcmItPmNtbmRbOF0gPT0gMHgwMCkgJiYgKHNyYi0+Y21uZFs5XSA9PSAweDBDKSkgewotCQkJcmV0dmFsID0gcnRzNTF4X21nX2NoZyhzcmIsIGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0gZWxzZSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgS0ZfUlNQX0hPU1Q6Ci0JCWlmICgoc2NzaV9idWZmbGVuKHNyYikgPT0gMHgwQykgJiYKLQkJICAgIChzcmItPmNtbmRbOF0gPT0gMHgwMCkgJiYgKHNyYi0+Y21uZFs5XSA9PSAweDBDKSkgewotCQkJcmV0dmFsID0gcnRzNTF4X21nX3JzcChzcmIsIGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0gZWxzZSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgS0ZfU0VUX0lDVjoKLQkJbXNfY2FyZC0+bWdfZW50cnlfbnVtID0gc3JiLT5jbW5kWzVdOwotCQlpZiAoKHNjc2lfYnVmZmxlbihzcmIpID09IDB4NDA0KSAmJgotCQkgICAgKHNyYi0+Y21uZFs4XSA9PSAweDA0KSAmJgotCQkgICAgKHNyYi0+Y21uZFs5XSA9PSAweDA0KSAmJgotCQkgICAgKHNyYi0+Y21uZFsyXSA9PSAweDAwKSAmJgotCQkgICAgKHNyYi0+Y21uZFszXSA9PSAweDAwKSAmJgotCQkgICAgKHNyYi0+Y21uZFs0XSA9PSAweDAwKSAmJiAoc3JiLT5jbW5kWzVdIDwgMzIpKSB7Ci0JCQlyZXR2YWwgPSBydHM1MXhfbWdfc2V0X0lDVihzcmIsIGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0gZWxzZSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfSU5WQUxJRF9DTURfRklFTEQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0Jc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci19Ci0jZW5kaWYKLQotaW50IHJ0czUxeF9zY3NpX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG1zX2luZm8gKm1zX2NhcmQgPSAmKGNoaXAtPm1zX2NhcmQpOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWludCByZXN1bHQgPSBUUkFOU1BPUlRfR09PRDsKLQotCWlmICgocnRzNTF4X2dldF9sdW5fY2FyZChjaGlwLCBsdW4pID09IE1TX0NBUkQpICYmCi0JICAgIChtc19jYXJkLT5mb3JtYXRfc3RhdHVzID09IEZPUk1BVF9JTl9QUk9HUkVTUykpIHsKLQkJaWYgKChzcmItPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSkKLQkJICAgICYmIChzcmItPmNtbmRbMF0gIT0gSU5RVUlSWSkpIHsKLQkJCS8qIExvZ2ljYWwgVW5pdCBOb3QgUmVhZHkgRm9ybWF0IGluIFByb2dyZXNzICovCi0JCQlydHM1MXhfc2V0X3NlbnNlX2RhdGEoY2hpcCwgbHVuLCBDVVJfRVJSLCAweDAyLCAwLCAweDA0LCAweDA0LAotCQkJCSAgICAgICAwLCAodTE2KSAobXNfY2FyZC0+cHJvZ3Jlc3MpKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkJfQotCX0KLQotCXN3aXRjaCAoc3JiLT5jbW5kWzBdKSB7Ci0JY2FzZSBSRUFEXzEwOgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBSRUFEXzY6Ci0JY2FzZSBXUklURV82OgotCQlyZXN1bHQgPSByZWFkX3dyaXRlKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBURVNUX1VOSVRfUkVBRFk6Ci0JCXJlc3VsdCA9IHRlc3RfdW5pdF9yZWFkeShzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgSU5RVUlSWToKLQkJcmVzdWx0ID0gaW5xdWlyeShzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgUkVBRF9DQVBBQ0lUWToKLQkJcmVzdWx0ID0gcmVhZF9jYXBhY2l0eShzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgU1RBUlRfU1RPUDoKLQkJcmVzdWx0ID0gc3RhcnRfc3RvcF91bml0KHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKLQkJcmVzdWx0ID0gYWxsb3dfbWVkaXVtX3JlbW92YWwoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFJFUVVFU1RfU0VOU0U6Ci0JCXJlc3VsdCA9IHJlcXVlc3Rfc2Vuc2Uoc3JiLCBjaGlwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1PREVfU0VOU0U6Ci0JY2FzZSBNT0RFX1NFTlNFXzEwOgotCQlyZXN1bHQgPSBtb2RlX3NlbnNlKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDIzOgotCQlyZXN1bHQgPSByZWFkX2Zvcm1hdF9jYXBhY2l0eShzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgVkVORE9SX0NNTkQ6Ci0JCXJlc3VsdCA9IHZlbmRvcl9jbW5kKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNU19TUF9DTU5EOgotCQlyZXN1bHQgPSBtc19zcF9jbW5kKHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotCi0jaWZkZWYgU1VQUE9SVF9DUFJNCi0JY2FzZSBTRF9QQVNTX1RIUlVfTU9ERToKLQljYXNlIFNEX0VYRUNVVEVfTk9fREFUQToKLQljYXNlIFNEX0VYRUNVVEVfUkVBRDoKLQljYXNlIFNEX0VYRUNVVEVfV1JJVEU6Ci0JY2FzZSBTRF9HRVRfUlNQOgotCWNhc2UgU0RfSFdfUlNUOgotCQlyZXN1bHQgPSBzZF9leHRlbnRpb25fY21uZChzcmIsIGNoaXApOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgU1VQUE9SVF9NQUdJQ19HQVRFCi0JY2FzZSBDTURfTVNQUk9fTUdfUktFWToKLQkJcmVzdWx0ID0gbWdfcmVwb3J0X2tleShzcmIsIGNoaXApOwotCQlicmVhazsKLQotCWNhc2UgQ01EX01TUFJPX01HX1NLRVk6Ci0JCXJlc3VsdCA9IG1nX3NlbmRfa2V5KHNyYiwgY2hpcCk7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLQljYXNlIEZPUk1BVF9VTklUOgotCWNhc2UgTU9ERV9TRUxFQ1Q6Ci0JY2FzZSBWRVJJRlk6Ci0JCXJlc3VsdCA9IFRSQU5TUE9SVF9HT09EOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfSU5WQUxJRF9DTURfRklFTEQpOwotCQlyZXN1bHQgPSBUUkFOU1BPUlRfRkFJTEVEOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSG9zdCBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW50IHNsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQkvKgotCSAqIFNldCB0aGUgSU5RVUlSWSB0cmFuc2ZlciBsZW5ndGggdG8gMzYuICBXZSBkb24ndCB1c2UgYW55IG9mCi0JICogdGhlIGV4dHJhIGRhdGEgYW5kIG1hbnkgZGV2aWNlcyBjaG9rZSBpZiBhc2tlZCBmb3IgbW9yZSBvcgotCSAqIGxlc3MgdGhhbiAzNiBieXRlcy4KLQkgKi8KLQlzZGV2LT5pbnF1aXJ5X2xlbiA9IDM2OwotCXJldHVybiAwOwotfQotCi1pbnQgc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQkvKiBTY2F0dGVyLWdhdGhlciBidWZmZXJzIChhbGwgYnV0IHRoZSBsYXN0KSBtdXN0IGhhdmUgYSBsZW5ndGgKLQkgKiBkaXZpc2libGUgYnkgdGhlIGJ1bGsgbWF4cGFja2V0IHNpemUuICBPdGhlcndpc2UgYSBkYXRhIHBhY2tldAotCSAqIHdvdWxkIGVuZCB1cCBiZWluZyBzaG9ydCwgY2F1c2luZyBhIHByZW1hdHVyZSBlbmQgdG8gdGhlIGRhdGEKLQkgKiB0cmFuc2Zlci4gIFNpbmNlIGhpZ2gtc3BlZWQgYnVsayBwaXBlcyBoYXZlIGEgbWF4cGFja2V0IHNpemUKLQkgKiBvZiA1MTIsIHdlJ2xsIHVzZSB0aGF0IGFzIHRoZSBzY3NpIGRldmljZSBxdWV1ZSdzIERNQSBhbGlnbm1lbnQKLQkgKiBtYXNrLiAgR3VhcmFudGVlaW5nIHByb3BlciBhbGlnbm1lbnQgb2YgdGhlIGZpcnN0IGJ1ZmZlciB3aWxsCi0JICogaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QgYmVjYXVzZSwgZXhjZXB0IGF0IHRoZSBiZWdpbm5pbmcgYW5kCi0JICogdGhlIGVuZCwgc2NhdHRlci1nYXRoZXIgYnVmZmVycyBmb2xsb3cgcGFnZSBib3VuZGFyaWVzLiAqLwotCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsICg1MTIgLSAxKSk7Ci0KLQkvKiBTZXQgdGhlIFNDU0kgbGV2ZWwgdG8gYXQgbGVhc3QgMi4gIFdlJ2xsIGxlYXZlIGl0IGF0IDMgaWYgdGhhdCdzCi0JICogd2hhdCBpcyBvcmlnaW5hbGx5IHJlcG9ydGVkLiAgV2UgbmVlZCB0aGlzIHRvIGF2b2lkIGNvbmZ1c2luZwotCSAqIHRoZSBTQ1NJIGxheWVyIHdpdGggZGV2aWNlcyB0aGF0IHJlcG9ydCAwIG9yIDEsIGJ1dCBuZWVkIDEwLWJ5dGUKLQkgKiBjb21tYW5kcyAoYWxhIEFUQVBJIGRldmljZXMgYmVoaW5kIGNlcnRhaW4gYnJpZGdlcywgb3IgZGV2aWNlcwotCSAqIHdoaWNoIHNpbXBseSBoYXZlIGJyb2tlbiBJTlFVSVJZIGRhdGEpLgotCSAqCi0JICogTk9URTogVGhpcyBtZWFucyAvZGV2L3NnIHByb2dyYW1zIChhbGEgY2RyZWNvcmQpIHdpbGwgZ2V0IHRoZQotCSAqIGFjdHVhbCBpbmZvcm1hdGlvbi4gIFRoaXMgc2VlbXMgdG8gYmUgdGhlIHByZWZlcmVuY2UgZm9yCi0JICogcHJvZ3JhbXMgbGlrZSB0aGF0LgotCSAqCi0JICogTk9URTogVGhpcyBhbHNvIG1lYW5zIHRoYXQgL3Byb2Mvc2NzaS9zY3NpIGFuZCBzeXNmcyBtYXkgcmVwb3J0Ci0JICogdGhlIGFjdHVhbCB2YWx1ZSBvciB0aGUgbW9kaWZpZWQgb25lLCBkZXBlbmRpbmcgb24gd2hlcmUgdGhlCi0JICogZGF0YSBjb21lcyBmcm9tLgotCSAqLwotCWlmIChzZGV2LT5zY3NpX2xldmVsIDwgU0NTSV8yKQotCQlzZGV2LT5zY3NpX2xldmVsID0gc2Rldi0+c2Rldl90YXJnZXQtPnNjc2lfbGV2ZWwgPSBTQ1NJXzI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAvcHJvYy9zY3NpLyBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogd2UgdXNlIHRoaXMgbWFjcm8gdG8gaGVscCB1cyB3cml0ZSBpbnRvIHRoZSBidWZmZXIgKi8KLSN1bmRlZiBTUFJJTlRGCi0jZGVmaW5lIFNQUklOVEYoYXJncy4uLikgc2VxX3ByaW50ZihtLCAjI2FyZ3MpCi0KLXN0YXRpYyBpbnQgd3JpdGVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgpCi17Ci0JLyogaWYgc29tZW9uZSBpcyBzZW5kaW5nIHVzIGRhdGEsIGp1c3QgdGhyb3cgaXQgYXdheSAqLwotCXJldHVybiBsZW5ndGg7Ci19Ci0KLXN0YXRpYyBpbnQgc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQkvKiBwcmludCB0aGUgY29udHJvbGxlciBuYW1lICovCi0JU1BSSU5URigiICAgSG9zdCBzY3NpJWQ6ICVzXG4iLCBob3N0LT5ob3N0X25vLCBSVFM1MVhfTkFNRSk7Ci0KLQkvKiBwcmludCBwcm9kdWN0LCB2ZW5kb3IsIGFuZCBkcml2ZXIgdmVyc2lvbiBzdHJpbmdzICovCi0JU1BSSU5URigiICAgICAgIFZlbmRvcjogUmVhbHRlayBDb3JwLlxuIik7Ci0JU1BSSU5URigiICAgICAgUHJvZHVjdDogUlRTNTF4eCBVU0IgQ2FyZCBSZWFkZXJcbiIpOwotCVNQUklOVEYoIiAgICAgIFZlcnNpb246ICVzXG4iLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHF1ZXVlIGEgY29tbWFuZCAqLwotLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KLXN0YXRpYyBpbnQgcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKLXsKLQlzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAgPSBob3N0X3RvX3J0czUxeChzcmItPmRldmljZS0+aG9zdCk7Ci0KLQkvKiBjaGVjayBmb3Igc3RhdGUtdHJhbnNpdGlvbiBlcnJvcnMgKi8KLQlpZiAoY2hpcC0+c3JiICE9IE5VTEwpIHsKLQkJUlRTNTFYX0RFQlVHUCgiRXJyb3IgaW4gJXM6IGNoaXAtPnNyYiA9ICVwXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBjaGlwLT5zcmIpOwotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQl9Ci0KLQkvKiBmYWlsIHRoZSBjb21tYW5kIGlmIHdlIGFyZSBkaXNjb25uZWN0aW5nICovCi0JaWYgKHRlc3RfYml0KEZMSURYX0RJU0NPTk5FQ1RJTkcsICZjaGlwLT51c2ItPmRmbGFncykpIHsKLQkJUlRTNTFYX0RFQlVHUCgiRmFpbCBjb21tYW5kIGR1cmluZyBkaXNjb25uZWN0XG4iKTsKLQkJc3JiLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKLQkJZG9uZShzcmIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBlbnF1ZXVlIHRoZSBjb21tYW5kIGFuZCB3YWtlIHVwIHRoZSBjb250cm9sIHRocmVhZCAqLwotCXNyYi0+c2NzaV9kb25lID0gZG9uZTsKLQljaGlwLT5zcmIgPSBzcmI7Ci0JY29tcGxldGUoJmNoaXAtPnVzYi0+Y21uZF9yZWFkeSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotREVGX1NDU0lfUUNNRChxdWV1ZWNvbW1hbmQpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29tbWFuZCB0aW1lb3V0IGFuZCBhYm9ydCAqLwotaW50IGNvbW1hbmRfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQotewotCXN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCA9IGhvc3RfdG9fcnRzNTF4KHNyYi0+ZGV2aWNlLT5ob3N0KTsKLQotCVJUUzUxWF9ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOwotCi0JLyogdXMtPnNyYiB0b2dldGhlciB3aXRoIHRoZSBUSU1FRF9PVVQsIFJFU0VUVElORywgYW5kIEFCT1JUSU5HCi0JICogYml0cyBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBob3N0IGxvY2suICovCi0Jc2NzaV9sb2NrKHJ0czUxeF90b19ob3N0KGNoaXApKTsKLQotCS8qIElzIHRoaXMgY29tbWFuZCBzdGlsbCBhY3RpdmU/ICovCi0JaWYgKGNoaXAtPnNyYiAhPSBzcmIpIHsKLQkJc2NzaV91bmxvY2socnRzNTF4X3RvX2hvc3QoY2hpcCkpOwotCQlSVFM1MVhfREVCVUdQKCItLSBub3RoaW5nIHRvIGFib3J0XG4iKTsKLQkJcmV0dXJuIEZBSUxFRDsKLQl9Ci0KLQkvKiBTZXQgdGhlIFRJTUVEX09VVCBiaXQuICBBbHNvIHNldCB0aGUgQUJPUlRJTkcgYml0LCBidXQgb25seSBpZgotCSAqIGEgZGV2aWNlIHJlc2V0IGlzbid0IGFscmVhZHkgaW4gcHJvZ3Jlc3MgKHRvIGF2b2lkIGludGVyZmVyaW5nCi0JICogd2l0aCB0aGUgcmVzZXQpLiAgTm90ZSB0aGF0IHdlIG11c3QgcmV0YWluIHRoZSBob3N0IGxvY2sgd2hpbGUKLQkgKiBjYWxsaW5nIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KCk7IG90aGVyd2lzZSBpdCBtaWdodCBpbnRlcmZlcmUKLQkgKiB3aXRoIGFuIGF1dG8tcmVzZXQgdGhhdCBiZWdpbnMgYXMgc29vbiBhcyB3ZSByZWxlYXNlIHRoZSBsb2NrLiAqLwotCXNldF9iaXQoRkxJRFhfVElNRURfT1VULCAmY2hpcC0+dXNiLT5kZmxhZ3MpOwotCWlmICghdGVzdF9iaXQoRkxJRFhfUkVTRVRUSU5HLCAmY2hpcC0+dXNiLT5kZmxhZ3MpKSB7Ci0JCXNldF9iaXQoRkxJRFhfQUJPUlRJTkcsICZjaGlwLT51c2ItPmRmbGFncyk7Ci0JCS8qIHJ0czUxeF9zdG9wX3RyYW5zcG9ydCh1cyk7ICovCi0JfQotCXNjc2lfdW5sb2NrKHJ0czUxeF90b19ob3N0KGNoaXApKTsKLQotCS8qIFdhaXQgZm9yIHRoZSBhYm9ydGVkIGNvbW1hbmQgdG8gZmluaXNoICovCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmY2hpcC0+dXNiLT5ub3RpZnkpOwotCXJldHVybiBTVUNDRVNTOwotfQotCi0vKiBUaGlzIGludm9rZXMgdGhlIHRyYW5zcG9ydCByZXNldCBtZWNoYW5pc20gdG8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZQotICogZGV2aWNlICovCi1zdGF0aWMgaW50IGRldmljZV9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlSVFM1MVhfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiByZXN1bHQgPCAwID8gRkFJTEVEIDogU1VDQ0VTUzsKLX0KLQotLyogU2ltdWxhdGUgYSBTQ1NJIGJ1cyByZXNldCBieSByZXNldHRpbmcgdGhlIGRldmljZSdzIFVTQiBwb3J0LiAqLwotaW50IGJ1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlSVFM1MVhfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiByZXN1bHQgPCAwID8gRkFJTEVEIDogU1VDQ0VTUzsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnJ0czUxMzlfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQotewotCXJldHVybiAiU0NTSSBlbXVsYXRpb24gZm9yIFJUUzUxMzkgVVNCIGNhcmQgcmVhZGVyIjsKLX0KLQotc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBydHM1MXhfaG9zdF90ZW1wbGF0ZSA9IHsKLQkvKiBiYXNpYyB1c2VybGFuZCBpbnRlcmZhY2Ugc3R1ZmYgKi8KLQkubmFtZSA9IFJUUzUxWF9OQU1FLAotCS5wcm9jX25hbWUgPSBSVFM1MVhfTkFNRSwKLQkuc2hvd19pbmZvID0gc2hvd19pbmZvLAotCS53cml0ZV9pbmZvID0gd3JpdGVfaW5mbywKLQkuaW5mbyA9IHJ0czUxMzlfaW5mbywKLQotCS8qIGNvbW1hbmQgaW50ZXJmYWNlIC0tIHF1ZXVlZCBvbmx5ICovCi0JLnF1ZXVlY29tbWFuZCA9IHF1ZXVlY29tbWFuZCwKLQotCS8qIGVycm9yIGFuZCBhYm9ydCBoYW5kbGVycyAqLwotCS5laF9hYm9ydF9oYW5kbGVyID0gY29tbWFuZF9hYm9ydCwKLQkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBkZXZpY2VfcmVzZXQsCi0JLmVoX2J1c19yZXNldF9oYW5kbGVyID0gYnVzX3Jlc2V0LAotCi0JLyogcXVldWUgY29tbWFuZHMgb25seSwgb25seSBvbmUgY29tbWFuZCBwZXIgTFVOICovCi0JLmNhbl9xdWV1ZSA9IDEsCi0JLmNtZF9wZXJfbHVuID0gMSwKLQotCS8qIHVua25vd24gaW5pdGlhdG9yIGlkICovCi0JLnRoaXNfaWQgPSAtMSwKLQotCS5zbGF2ZV9hbGxvYyA9IHNsYXZlX2FsbG9jLAotCS5zbGF2ZV9jb25maWd1cmUgPSBzbGF2ZV9jb25maWd1cmUsCi0KLQkvKiBsb3RzIG9mIHNnIHNlZ21lbnRzIGNhbiBiZSBoYW5kbGVkICovCi0JLnNnX3RhYmxlc2l6ZSA9IFNHX0FMTCwKLQotCS8qIGxpbWl0IHRoZSB0b3RhbCBzaXplIG9mIGEgdHJhbnNmZXIgdG8gMTIwIEtCICovCi0JLm1heF9zZWN0b3JzID0gMjQwLAotCi0JLyogbWVyZ2UgY29tbWFuZHMuLi4gdGhpcyBzZWVtcyB0byBoZWxwIHBlcmZvcm1hbmNlLCBidXQKLQkgKiBwZXJpb2RpY2FsbHkgc29tZW9uZSBzaG91bGQgdGVzdCB0byBzZWUgd2hpY2ggc2V0dGluZyBpcyBtb3JlCi0JICogb3B0aW1hbC4KLQkgKi8KLQkudXNlX2NsdXN0ZXJpbmcgPSAxLAotCi0JLyogZW11bGF0ZWQgSEJBICovCi0JLmVtdWxhdGVkID0gMSwKLQotCS8qIHdlIGRvIG91ciBvd24gZGVsYXkgYWZ0ZXIgYSBkZXZpY2Ugb3IgYnVzIHJlc2V0ICovCi0JLnNraXBfc2V0dGxlX2RlbGF5ID0gMSwKLQotCS8qIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzICovCi0JLyogLnNkZXZfYXR0cnMgPSBzeXNmc19kZXZpY2VfYXR0cl9saXN0LCAqLwotCi0JLyogbW9kdWxlIG1hbmFnZW1lbnQgKi8KLQkubW9kdWxlID0gVEhJU19NT0RVTEUKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9zY3NpLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfc2NzaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTBkNzA1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF9zY3NpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKiBIZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaWZuZGVmIF9fUlRTNTFYX1NDU0lfSAotI2RlZmluZSBfX1JUUzUxWF9TQ1NJX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KLSNpbmNsdWRlICJydHM1MXhfY2hpcC5oIgotCi0jZGVmaW5lIE1TX1NQX0NNTkQJCTB4RkEKLSNkZWZpbmUgTVNfRk9STUFUCQkweEEwCi0jZGVmaW5lIEdFVF9NU19JTkZPUk1BVElPTgkweEIwCi0KLSNkZWZpbmUgVkVORE9SX0NNTkQJCTB4RjAKLQotI2RlZmluZSBSRUFEX1NUQVRVUwkJMHgwOQotCi0jZGVmaW5lIFJFQURfTUVNCQkweDBECi0jZGVmaW5lIFdSSVRFX01FTQkJMHgwRQotI2RlZmluZSBHRVRfQlVTX1dJRFRICQkweDEzCi0jZGVmaW5lIEdFVF9TRF9DU0QJCTB4MTQKLSNkZWZpbmUgVE9HR0xFX0dQSU8JCTB4MTUKLSNkZWZpbmUgVFJBQ0VfTVNHCQkweDE4Ci0KLSNkZWZpbmUgU0NTSV9BUFBfQ01ECQkweDEwCi0KLSNkZWZpbmUgUFBfUkVBRDEwCQkweDFBCi0jZGVmaW5lIFBQX1dSSVRFMTAJCTB4MEEKLSNkZWZpbmUgUkVBRF9IT1NUX1JFRwkJMHgxRAotI2RlZmluZSBXUklURV9IT1NUX1JFRwkJMHgwRAotI2RlZmluZSBTRVRfVkFSCQkJMHgwNQotI2RlZmluZSBHRVRfVkFSCQkJMHgxNQotI2RlZmluZSBETUFfUkVBRAkJMHgxNgotI2RlZmluZSBETUFfV1JJVEUJCTB4MDYKLSNkZWZpbmUgR0VUX0RFVl9TVEFUVVMJCTB4MTAKLSNkZWZpbmUgU0VUX0NISVBfTU9ERQkJMHgyNwotI2RlZmluZSBTVUlUX0NNRAkJMHhFMAotI2RlZmluZSBXUklURV9QSFkJCTB4MDcKLSNkZWZpbmUgUkVBRF9QSFkJCTB4MTcKLQotI2RlZmluZSBJTklUX0JBVENIQ01ECQkweDQxCi0jZGVmaW5lIEFERF9CQVRDSENNRAkJMHg0MgotI2RlZmluZSBTRU5EX0JBVENIQ01ECQkweDQzCi0jZGVmaW5lIEdFVF9CQVRDSFJTUAkJMHg0NAotCi0jaWZkZWYgU1VQUE9SVF9DUFJNCi0vKiBTRCBQYXNzIFRocm91Z2ggQ29tbWFuZCBFeHRlbnNpb24gKi8KLSNkZWZpbmUgU0RfUEFTU19USFJVX01PREUJMHhEMAotI2RlZmluZSBTRF9FWEVDVVRFX05PX0RBVEEJMHhEMQotI2RlZmluZSBTRF9FWEVDVVRFX1JFQUQJCTB4RDIKLSNkZWZpbmUgU0RfRVhFQ1VURV9XUklURQkweEQzCi0jZGVmaW5lIFNEX0dFVF9SU1AJCTB4RDQKLSNkZWZpbmUgU0RfSFdfUlNUCQkweEQ2Ci0jZW5kaWYKLQotI2lmZGVmIFNVUFBPUlRfTUFHSUNfR0FURQotI2RlZmluZSBDTURfTVNQUk9fTUdfUktFWQkweEE0CS8qIFJlcG9ydCBLZXkgQ29tbWFuZCAqLwotI2RlZmluZSBDTURfTVNQUk9fTUdfU0tFWQkweEEzCS8qIFNlbmQgS2V5IENvbW1hbmQgKi8KLQotLyogQ0JXQ0IgZmllbGQ6IGtleSBjbGFzcyAqLwotI2RlZmluZSBLQ19NR19SX1BSTwkJMHhCRQkvKiBNRy1SIFBSTyAqLwotCi0vKiBDQldDQiBmaWVsZDoga2V5IGZvcm1hdCAqLwotI2RlZmluZSBLRl9TRVRfTEVBRl9JRAkJMHgzMQkvKiBTZXQgTGVhZiBJRCAqLwotI2RlZmluZSBLRl9HRVRfTE9DX0VLQgkJMHgzMgkvKiBHZXQgTG9jYWwgRUtCICovCi0jZGVmaW5lIEtGX0NIR19IT1NUCQkweDMzCS8qIENoYWxsZW5nZSAoaG9zdCkgKi8KLSNkZWZpbmUgS0ZfUlNQX0NIRwkJMHgzNAkvKiBSZXNwb25zZSBhbmQgQ2hhbGxlbmdlIChkZXZpY2UpICAqLwotI2RlZmluZSBLRl9SU1BfSE9TVAkJMHgzNQkvKiBSZXNwb25zZSAoaG9zdCkgKi8KLSNkZWZpbmUgS0ZfR0VUX0lDVgkJMHgzNgkvKiBHZXQgSUNWICovCi0jZGVmaW5lIEtGX1NFVF9JQ1YJCTB4MzcJLyogU1NldCBJQ1YgKi8KLSNlbmRpZgotCi1zdHJ1Y3QgcnRzNTF4X2NoaXA7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBTdGFydC1TdG9wLVVuaXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgU1RPUF9NRURJVU0JCQkweDAwCS8qIGFjY2VzcyBkaXNhYmxlICovCi0jZGVmaW5lIE1BS0VfTUVESVVNX1JFQURZCQkweDAxCS8qIGFjY2VzcyBlbmFibGUgKi8KLSNkZWZpbmUgVU5MT0FEX01FRElVTQkJCTB4MDIJLyogdW5sb2FkICovCi0jZGVmaW5lIExPQURfTUVESVVNCQkJMHgwMwkvKiBsb2FkICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBTVEFOREFSRF9JTlFVSVJZCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIFFVTElGSVJFICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgQUVOQ19GTkMgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBUUk1MX0lPUCAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFJFTF9BRFIgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgV0JVU18zMiAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBXQlVTXzE2ICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFNZTkMgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTElOS0VEICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBDTURfUVVFICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFNGVF9SRSAgICAgICAgICAgICAgICAgIDB4MDAKLQotI2RlZmluZSBWRU5fSURfTEVOICAgICAgICAgICAgICA4CS8qIFZlbmRvciBJRCBMZW5ndGggICAgICAgICAqLwotI2RlZmluZSBQUkRDVF9JRF9MRU4gICAgICAgICAgICAxNgkvKiBQcm9kdWN0IElEIExlbmd0aCAgICAgICAgKi8KLSNkZWZpbmUgUFJEQ1RfUkVWX0xFTiAgICAgICAgICAgNAkvKiBQcm9kdWN0IExPVCBMZW5ndGggICAgICAgKi8KLQotI2RlZmluZSBEUkNUX0FDQ0VTU19ERVYgICAgICAgICAweDAwCS8qIERpcmVjdCBBY2Nlc3MgRGV2aWNlICAgICAgICAgICAgICovCi0jZGVmaW5lIFJNQl9ESVNDICAgICAgICAgICAgICAgIDB4ODAJLyogVGhlIERldmljZSBpcyBSZW1vdmFibGUgICAgICAgICAgKi8KLSNkZWZpbmUgQU5TSV9TQ1NJMiAgICAgICAgICAgICAgMHgwMgkvKiBCYXNlZCBvbiBBTlNJLVNDU0kyICAgICAgICAgICAgICAqLwotCi0jZGVmaW5lIFNDU0kgICAgICAgICAgICAgICAgICAgIDB4MDAJLyogSW50ZXJmYWNlIElEICAgICAgICAgICAgICAgICAgICAgKi8KLQotdm9pZCBydHM1MXhfc2NzaV9zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKLXZvaWQgcnRzNTF4X3NldF9zZW5zZV90eXBlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1biwgaW50IHNlbnNlX3R5cGUpOwotdm9pZCBydHM1MXhfc2V0X3NlbnNlX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuLCB1OCBlcnJfY29kZSwKLQkJICAgIHU4IHNlbnNlX2tleSwgdTMyIGluZm8sIHU4IGFzYywgdTggYXNjcSwgdTggc25zX2tleV9pbmZvMCwKLQkJICAgIHUxNiBzbnNfa2V5X2luZm8xKTsKLQotaW50IHJ0czUxeF9zY3NpX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotCi1zdHJ1Y3QgU2NzaV9Ib3N0Owotc3RydWN0IHNjc2lfZGV2aWNlOwotc3RydWN0IHNjc2lfY21uZDsKLQotaW50IHNsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci1pbnQgc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci1pbnQgcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLWludCBjb21tYW5kX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Ci1pbnQgYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Ci0KLSNlbmRpZiAvKiBfX1JUUzUxWF9TQ1NJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF90cmFuc3BvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF90cmFuc3BvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ1ODhkMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9ydHM1MXhfdHJhbnNwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInJ0czUxeC5oIgotI2luY2x1ZGUgInJ0czUxeF9jaGlwLmgiCi0jaW5jbHVkZSAicnRzNTF4X2NhcmQuaCIKLSNpbmNsdWRlICJydHM1MXhfc2NzaS5oIgotI2luY2x1ZGUgInJ0czUxeF90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIGJ1ZmZlciBhY2Nlc3Mgcm91dGluZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQ29weSBhIGJ1ZmZlciBvZiBsZW5ndGggYnVmbGVuIHRvL2Zyb20gdGhlIHNyYidzIHRyYW5zZmVyIGJ1ZmZlci4KLSAqIFVwZGF0ZSB0aGUgKipzZ3B0ciBhbmQgKm9mZnNldCB2YXJpYWJsZXMgc28gdGhhdCB0aGUgbmV4dCBjb3B5IHdpbGwKLSAqIHBpY2sgdXAgZnJvbSB3aGVyZSB0aGlzIG9uZSBsZWZ0IG9mZi4KLSAqLwotCi11bnNpZ25lZCBpbnQgcnRzNTF4X2FjY2Vzc19zZ2xpc3QodW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJCSAgdW5zaWduZWQgaW50IGJ1Zmxlbiwgdm9pZCAqc2dsaXN0LAotCQkJCSAgdm9pZCAqKnNncHRyLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwKLQkJCQkgIGVudW0geGZlcl9idWZfZGlyIGRpcikKLXsKLQl1bnNpZ25lZCBpbnQgY250OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKnNncHRyOwotCi0JLyogV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBsaXN0IG9uZSBlbnRyeQotCSAqIGF0IGEgdGltZS4gIEVhY2ggcy1nIGVudHJ5IGNvbnRhaW5zIHNvbWUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKLQkgKiBlYWNoIHBhZ2UgaGFzIHRvIGJlIGttYXAoKSdlZCBzZXBhcmF0ZWx5LiAgSWYgdGhlIHBhZ2UgaXMgYWxyZWFkeQotCSAqIGluIGtlcm5lbC1hZGRyZXNzYWJsZSBtZW1vcnkgdGhlbiBrbWFwKCkgd2lsbCByZXR1cm4gaXRzIGFkZHJlc3MuCi0JICogSWYgdGhlIHBhZ2UgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgLS0gc3VjaCBhcyBhIHVzZXIgYnVmZmVyCi0JICogbG9jYXRlZCBpbiBoaWdoIG1lbW9yeSAtLSB0aGVuIGttYXAoKSB3aWxsIG1hcCBpdCB0byBhIHRlbXBvcmFyeQotCSAqIHBvc2l0aW9uIGluIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCi0JICovCi0KLQlpZiAoIXNnKQotCQlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzZ2xpc3Q7Ci0KLQkvKiBUaGlzIGxvb3AgaGFuZGxlcyBhIHNpbmdsZSBzLWcgbGlzdCBlbnRyeSwgd2hpY2ggbWF5Ci0JICogaW5jbHVkZSBtdWx0aXBsZSBwYWdlcy4gIEZpbmQgdGhlIGluaXRpYWwgcGFnZSBzdHJ1Y3R1cmUKLQkgKiBhbmQgdGhlIHN0YXJ0aW5nIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UsIGFuZCB1cGRhdGUKLQkgKiB0aGUgKm9mZnNldCBhbmQgKipzZ3B0ciB2YWx1ZXMgZm9yIHRoZSBuZXh0IGxvb3AuCi0JICovCi0JY250ID0gMDsKLQl3aGlsZSAoY250IDwgYnVmbGVuICYmIHNnKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShzZykgKwotCQkgICAgKChzZy0+b2Zmc2V0ICsgKm9mZnNldCkgPj4gUEFHRV9TSElGVCk7Ci0JCXVuc2lnbmVkIGludCBwb2ZmID0gKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSAmIChQQUdFX1NJWkUgLSAxKTsKLQkJdW5zaWduZWQgaW50IHNnbGVuID0gc2ctPmxlbmd0aCAtICpvZmZzZXQ7Ci0KLQkJaWYgKHNnbGVuID4gYnVmbGVuIC0gY250KSB7Ci0KLQkJCS8qIFRyYW5zZmVyIGVuZHMgd2l0aGluIHRoaXMgcy1nIGVudHJ5ICovCi0JCQlzZ2xlbiA9IGJ1ZmxlbiAtIGNudDsKLQkJCSpvZmZzZXQgKz0gc2dsZW47Ci0JCX0gZWxzZSB7Ci0KLQkJCS8qIFRyYW5zZmVyIGNvbnRpbnVlcyB0byBuZXh0IHMtZyBlbnRyeSAqLwotCQkJKm9mZnNldCA9IDA7Ci0JCQlzZyA9IHNnX25leHQoc2cpOwotCQl9Ci0KLQkJLyogVHJhbnNmZXIgdGhlIGRhdGEgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhpcwotCQkgKiBzLWcgZW50cnkuICBGb3IgZWFjaCBwYWdlOiBjYWxsIGttYXAoKSwgZG8gdGhlCi0JCSAqIHRyYW5zZmVyLCBhbmQgY2FsbCBrdW5tYXAoKSBpbW1lZGlhdGVseSBhZnRlci4gKi8KLQkJd2hpbGUgKHNnbGVuID4gMCkgewotCQkJdW5zaWduZWQgaW50IHBsZW4gPSBtaW4oc2dsZW4sICh1bnNpZ25lZCBpbnQpCi0JCQkJCQlQQUdFX1NJWkUgLSBwb2ZmKTsKLQkJCXVuc2lnbmVkIGNoYXIgKnB0ciA9IGttYXAocGFnZSk7Ci0KLQkJCWlmIChkaXIgPT0gVE9fWEZFUl9CVUYpCi0JCQkJbWVtY3B5KHB0ciArIHBvZmYsIGJ1ZmZlciArIGNudCwgcGxlbik7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KGJ1ZmZlciArIGNudCwgcHRyICsgcG9mZiwgcGxlbik7Ci0JCQlrdW5tYXAocGFnZSk7Ci0KLQkJCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcGFnZSAqLwotCQkJcG9mZiA9IDA7Ci0JCQkrK3BhZ2U7Ci0JCQljbnQgKz0gcGxlbjsKLQkJCXNnbGVuIC09IHBsZW47Ci0JCX0KLQl9Ci0JKnNncHRyID0gc2c7Ci0KLQkvKiBSZXR1cm4gdGhlIGFtb3VudCBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLwotCXJldHVybiBjbnQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnRzNTF4X2FjY2Vzc194ZmVyX2J1Zih1bnNpZ25lZCBjaGFyICpidWZmZXIsCi0JCQkJICAgIHVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwKLQkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2dwdHIsCi0JCQkJICAgIHVuc2lnbmVkIGludCAqb2Zmc2V0LCBlbnVtIHhmZXJfYnVmX2RpciBkaXIpCi17Ci0JcmV0dXJuIHJ0czUxeF9hY2Nlc3Nfc2dsaXN0KGJ1ZmZlciwgYnVmbGVuLCAodm9pZCAqKXNjc2lfc2dsaXN0KHNyYiksCi0JCQkJICAgICh2b2lkICoqKXNncHRyLCBvZmZzZXQsIGRpcik7Ci19Ci0KLS8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKLSAqIFNDU0kgcmVzaWR1ZS4KLSAqLwotdm9pZCBydHM1MXhfc2V0X3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKLQkJCSB1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCi17Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IDA7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IE5VTEw7Ci0KLQlidWZsZW4gPSBtaW4oYnVmbGVuLCBzY3NpX2J1ZmZsZW4oc3JiKSk7Ci0JYnVmbGVuID0gcnRzNTF4X2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGJ1Zmxlbiwgc3JiLCAmc2csICZvZmZzZXQsCi0JCQkJCVRPX1hGRVJfQlVGKTsKLQlpZiAoYnVmbGVuIDwgc2NzaV9idWZmbGVuKHNyYikpCi0JCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBidWZsZW4pOwotfQotCi12b2lkIHJ0czUxeF9nZXRfeGZlcl9idWYodW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJIHVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKLXsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gTlVMTDsKLQotCWJ1ZmxlbiA9IG1pbihidWZsZW4sIHNjc2lfYnVmZmxlbihzcmIpKTsKLQlidWZsZW4gPSBydHM1MXhfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgYnVmbGVuLCBzcmIsICZzZywgJm9mZnNldCwKLQkJCQkJRlJPTV9YRkVSX0JVRik7Ci0JaWYgKGJ1ZmxlbiA8IHNjc2lfYnVmZmxlbihzcmIpKQotCQlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gYnVmbGVuKTsKLX0KLQotLyogVGhpcyBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdoaWNoIHdpbGwgd2FrZSB1cyB1cCB3aGVuIGFuIFVSQgotICogY29tcGxldGVzLgotICovCi1zdGF0aWMgdm9pZCB1cmJfZG9uZV9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqdXJiX2RvbmVfcHRyID0gdXJiLT5jb250ZXh0OwotCi0JaWYgKHVyYl9kb25lX3B0cikKLQkJY29tcGxldGUodXJiX2RvbmVfcHRyKTsKLX0KLQotLyogVGhpcyBpcyB0aGUgY29tbW9uIHBhcnQgb2YgdGhlIFVSQiBtZXNzYWdlIHN1Ym1pc3Npb24gY29kZQotICoKLSAqIEFsbCBVUkJzIGZyb20gdGhlIGRyaXZlciBpbnZvbHZlZCBpbiBoYW5kbGluZyBhIHF1ZXVlZCBzY3NpCi0gKiBjb21tYW5kIF9tdXN0XyBwYXNzIHRocm91Z2ggdGhpcyBmdW5jdGlvbiAob3Igc29tZXRoaW5nIGxpa2UgaXQpIGZvciB0aGUKLSAqIGFib3J0IG1lY2hhbmlzbXMgdG8gd29yayBwcm9wZXJseS4KLSAqLwotc3RhdGljIGludCBydHM1MXhfbXNnX2NvbW1vbihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHN0cnVjdCB1cmIgKnVyYiwKLQkJCSAgICAgaW50IHRpbWVvdXQpCi17Ci0Jc3RydWN0IHJ0czUxeF91c2IgKnJ0czUxeCA9IGNoaXAtPnVzYjsKLQlzdHJ1Y3QgY29tcGxldGlvbiB1cmJfZG9uZTsKLQlsb25nIHRpbWVsZWZ0OwotCWludCBzdGF0dXM7Ci0KLQkvKiBkb24ndCBzdWJtaXQgVVJCcyBkdXJpbmcgYWJvcnQgcHJvY2Vzc2luZyAqLwotCWlmICh0ZXN0X2JpdChGTElEWF9BQk9SVElORywgJnJ0czUxeC0+ZGZsYWdzKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIC1FSU8pOwotCi0JLyogc2V0IHVwIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIHdha2V1cCBzeXN0ZW0gKi8KLQlpbml0X2NvbXBsZXRpb24oJnVyYl9kb25lKTsKLQotCS8qIGZpbGwgdGhlIGNvbW1vbiBmaWVsZHMgaW4gdGhlIFVSQiAqLwotCXVyYi0+Y29udGV4dCA9ICZ1cmJfZG9uZTsKLQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOwotCXVyYi0+ZXJyb3JfY291bnQgPSAwOwotCXVyYi0+c3RhdHVzID0gMDsKLQotCS8qIHdlIGFzc3VtZSB0aGF0IGlmIHRyYW5zZmVyX2J1ZmZlciBpc24ndCB1cy0+aW9idWYgdGhlbiBpdAotCSAqIGhhc24ndCBiZWVuIG1hcHBlZCBmb3IgRE1BLiAgWWVzLCB0aGlzIGlzIGNsdW5reSwgYnV0IGl0J3MKLQkgKiBlYXNpZXIgdGhhbiBhbHdheXMgaGF2aW5nIHRoZSBjYWxsZXIgdGVsbCB1cyB3aGV0aGVyIHRoZQotCSAqIHRyYW5zZmVyIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIG1hcHBlZC4gKi8KLQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1NFVFVQX0RNQV9NQVA7Ci0JaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IHJ0czUxeC0+aW9idWYpIHsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQkJdXJiLT50cmFuc2Zlcl9kbWEgPSBydHM1MXgtPmlvYnVmX2RtYTsKLQl9Ci0JdXJiLT5zZXR1cF9kbWEgPSBydHM1MXgtPmNyX2RtYTsKLQotCS8qIHN1Ym1pdCB0aGUgVVJCICovCi0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfTk9JTyk7Ci0JaWYgKHN0YXR1cykgewotCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLwotCQlUUkFDRV9SRVQoY2hpcCwgc3RhdHVzKTsKLQl9Ci0KLQkvKiBzaW5jZSB0aGUgVVJCIGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHksIGl0J3Mgbm93IG9rYXkKLQkgKiB0byBjYW5jZWwgaXQgKi8KLQlzZXRfYml0KEZMSURYX1VSQl9BQ1RJVkUsICZydHM1MXgtPmRmbGFncyk7Ci0KLQkvKiBkaWQgYW4gYWJvcnQgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLwotCWlmICh0ZXN0X2JpdChGTElEWF9BQk9SVElORywgJnJ0czUxeC0+ZGZsYWdzKSkgewotCi0JCS8qIGNhbmNlbCB0aGUgVVJCLCBpZiBpdCBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgYWxyZWFkeSAqLwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMSURYX1VSQl9BQ1RJVkUsICZydHM1MXgtPmRmbGFncykpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIi0tIGNhbmNlbGxpbmcgVVJCXG4iKTsKLQkJCXVzYl91bmxpbmtfdXJiKHVyYik7Ci0JCX0KLQl9Ci0KLQkvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgVVJCICovCi0JdGltZWxlZnQgPQotCSAgICB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmdXJiX2RvbmUsCi0JCQkJCQkgICAgICAodGltZW91dCAqIEhaIC8KLQkJCQkJCSAgICAgICAxMDAwKSA/IDoKLQkJCQkJCSAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQotCWNsZWFyX2JpdChGTElEWF9VUkJfQUNUSVZFLCAmcnRzNTF4LT5kZmxhZ3MpOwotCi0JaWYgKHRpbWVsZWZ0IDw9IDApIHsKLQkJUlRTNTFYX0RFQlVHUCgiJXMgLS0gY2FuY2VsbGluZyBVUkJcbiIsCi0JCQkgICAgICAgdGltZWxlZnQgPT0gMCA/ICJUaW1lb3V0IiA6ICJTaWduYWwiKTsKLQkJdXNiX2tpbGxfdXJiKHVyYik7Ci0JCWlmICh0aW1lbGVmdCA9PSAwKQotCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJZWxzZQotCQkJc3RhdHVzID0gLUVJTlRSOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgcnRzNTF4X2NsZWFyX2hhbHQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgcGlwZSk7Ci0KLS8qCi0gKiBJbnRlcnByZXQgdGhlIHJlc3VsdHMgb2YgYSBVUkIgdHJhbnNmZXIKLSAqLwotc3RhdGljIGludCBpbnRlcnByZXRfdXJiX3Jlc3VsdChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBwaXBlLAotCQkJCXVuc2lnbmVkIGludCBsZW5ndGgsIGludCByZXN1bHQsCi0JCQkJdW5zaWduZWQgaW50IHBhcnRpYWwpCi17Ci0JaW50IHJldHZhbCA9IFNUQVRVU19TVUNDRVNTOwotCi0JLyogUlRTNTFYX0RFQlVHUCgiU3RhdHVzIGNvZGUgJWQ7IHRyYW5zZmVycmVkICV1LyV1XG4iLAotCQkJCXJlc3VsdCwgcGFydGlhbCwgbGVuZ3RoKTsgKi8KLQlzd2l0Y2ggKHJlc3VsdCkgewotCQkvKiBubyBlcnJvciBjb2RlOyBkaWQgd2Ugc2VuZCBhbGwgdGhlIGRhdGE/ICovCi0JY2FzZSAwOgotCQlpZiAocGFydGlhbCAhPSBsZW5ndGgpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIi0tIHNob3J0IHRyYW5zZmVyXG4iKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfVFJBTlNfU0hPUlQpOwotCQl9Ci0JCS8qIFJUUzUxWF9ERUJVR1AoIi0tIHRyYW5zZmVyIGNvbXBsZXRlXG4iKTsgKi8KLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQkvKiBzdGFsbGVkICovCi0JY2FzZSAtRVBJUEU6Ci0JCS8qIGZvciBjb250cm9sIGVuZHBvaW50cywgKHVzZWQgYnkgQ0JbSV0pIGEgc3RhbGwgaW5kaWNhdGVzCi0JCSAqIGEgZmFpbGVkIGNvbW1hbmQgKi8KLQkJaWYgKHVzYl9waXBlY29udHJvbChwaXBlKSkgewotCQkJUlRTNTFYX0RFQlVHUCgiLS0gc3RhbGwgb24gY29udHJvbCBwaXBlXG4iKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfU1RBTExFRCk7Ci0JCX0KLQkJLyogZm9yIG90aGVyIHNvcnRzIG9mIGVuZHBvaW50LCBjbGVhciB0aGUgc3RhbGwgKi8KLQkJUlRTNTFYX0RFQlVHUCgiY2xlYXJpbmcgZW5kcG9pbnQgaGFsdCBmb3IgcGlwZSAweCV4XG4iLCBwaXBlKTsKLQkJaWYgKHJ0czUxeF9jbGVhcl9oYWx0KGNoaXAsIHBpcGUpIDwgMCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwotCQlyZXR2YWwgPSBTVEFUVVNfU1RBTExFRDsKLQkJVFJBQ0VfR09UTyhjaGlwLCBFeGl0KTsKLQotCQkvKiBiYWJibGUgLSB0aGUgZGV2aWNlIHRyaWVkIHRvIHNlbmQgbW9yZSB0aGFuCi0JCSAqIHdlIHdhbnRlZCB0byByZWFkICovCi0JY2FzZSAtRU9WRVJGTE9XOgotCQlSVFM1MVhfREVCVUdQKCItLSBiYWJibGVcbiIpOwotCQlyZXR2YWwgPSBTVEFUVVNfVFJBTlNfTE9ORzsKLQkJVFJBQ0VfR09UTyhjaGlwLCBFeGl0KTsKLQotCQkvKiB0aGUgdHJhbnNmZXIgd2FzIGNhbmNlbGxlZCBieSBhYm9ydCwKLQkJICogZGlzY29ubmVjdCwgb3IgdGltZW91dCAqLwotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCVJUUzUxWF9ERUJVR1AoIi0tIHRyYW5zZmVyIGNhbmNlbGxlZFxuIik7Ci0JCXJldHZhbCA9IFNUQVRVU19FUlJPUjsKLQkJVFJBQ0VfR09UTyhjaGlwLCBFeGl0KTsKLQotCQkvKiBzaG9ydCBzY2F0dGVyLWdhdGhlciByZWFkIHRyYW5zZmVyICovCi0JY2FzZSAtRVJFTU9URUlPOgotCQlSVFM1MVhfREVCVUdQKCItLSBzaG9ydCByZWFkIHRyYW5zZmVyXG4iKTsKLQkJcmV0dmFsID0gU1RBVFVTX1RSQU5TX1NIT1JUOwotCQlUUkFDRV9HT1RPKGNoaXAsIEV4aXQpOwotCi0JCS8qIGFib3J0IG9yIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3MgKi8KLQljYXNlIC1FSU86Ci0JCVJUUzUxWF9ERUJVR1AoIi0tIGFib3J0IG9yIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3NcbiIpOwotCQlyZXR2YWwgPSBTVEFUVVNfRVJST1I7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgRXhpdCk7Ci0KLQljYXNlIC1FVElNRURPVVQ6Ci0JCVJUUzUxWF9ERUJVR1AoIi0tIHRpbWUgb3V0XG4iKTsKLQkJcmV0dmFsID0gU1RBVFVTX1RJTUVET1VUOwotCQlUUkFDRV9HT1RPKGNoaXAsIEV4aXQpOwotCi0JCS8qIHRoZSBjYXRjaC1hbGwgZXJyb3IgY2FzZSAqLwotCWRlZmF1bHQ6Ci0JCVJUUzUxWF9ERUJVR1AoIi0tIHVua25vd24gZXJyb3JcbiIpOwotCQlyZXR2YWwgPSBTVEFUVVNfRVJST1I7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgRXhpdCk7Ci0JfQotCi1FeGl0OgotCWlmICgocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSAmJiAhdXNiX3BpcGVjb250cm9sKHBpcGUpKQotCQlydHM1MXhfY2xlYXJfaHdfZXJyb3IoY2hpcCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1pbnQgcnRzNTF4X2N0cmxfdHJhbnNmZXIoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJCSB1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCi0JCQkgdm9pZCAqZGF0YSwgdTE2IHNpemUsIGludCB0aW1lb3V0KQotewotCXN0cnVjdCBydHM1MXhfdXNiICpydHM1MXggPSBjaGlwLT51c2I7Ci0JaW50IHJlc3VsdDsKLQotCVJUUzUxWF9ERUJVR1AoIiVzOiBycT0lMDJ4IHJxdHlwZT0lMDJ4IHZhbHVlPSUwNHggaW5kZXg9JTAyeCBsZW49JXVcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwgc2l6ZSk7Ci0KLQkvKiBmaWxsIGluIHRoZSBkZXZyZXF1ZXN0IHN0cnVjdHVyZSAqLwotCXJ0czUxeC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlOwotCXJ0czUxeC0+Y3ItPmJSZXF1ZXN0ID0gcmVxdWVzdDsKLQlydHM1MXgtPmNyLT53VmFsdWUgPSBjcHVfdG9fbGUxNih2YWx1ZSk7Ci0JcnRzNTF4LT5jci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOwotCXJ0czUxeC0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQotCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCi0JdXNiX2ZpbGxfY29udHJvbF91cmIocnRzNTF4LT5jdXJyZW50X3VyYiwgcnRzNTF4LT5wdXNiX2RldiwgcGlwZSwKLQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilydHM1MXgtPmNyLCBkYXRhLCBzaXplLAotCQkJICAgICB1cmJfZG9uZV9jb21wbGV0aW9uLCBOVUxMKTsKLQlyZXN1bHQgPSBydHM1MXhfbXNnX2NvbW1vbihjaGlwLCBydHM1MXgtPmN1cnJlbnRfdXJiLCB0aW1lb3V0KTsKLQotCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdChjaGlwLCBwaXBlLCBzaXplLCByZXN1bHQsCi0JCQkJICAgIHJ0czUxeC0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOwotfQotCi1zdGF0aWMgaW50IHJ0czUxeF9jbGVhcl9oYWx0KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IHBpcGUpCi17Ci0JaW50IHJlc3VsdDsKLQlpbnQgZW5kcCA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7Ci0KLQlpZiAodXNiX3BpcGVpbihwaXBlKSkKLQkJZW5kcCB8PSBVU0JfRElSX0lOOwotCi0JcmVzdWx0ID0gcnRzNTF4X2N0cmxfdHJhbnNmZXIoY2hpcCwgU05EX0NUUkxfUElQRShjaGlwKSwKLQkJCQkgICAgICBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsIFVTQl9SRUNJUF9FTkRQT0lOVCwKLQkJCQkgICAgICBVU0JfRU5EUE9JTlRfSEFMVCwgZW5kcCwgTlVMTCwgMCwgMzAwMCk7Ci0JaWYgKHJlc3VsdCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXVzYl9yZXNldF9lbmRwb2ludChjaGlwLT51c2ItPnB1c2JfZGV2LCBlbmRwKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgcnRzNTF4X3NnX2NsZWFuKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8pCi17Ci0JaWYgKGlvLT51cmJzKSB7Ci0JCXdoaWxlIChpby0+ZW50cmllcy0tKQotCQkJdXNiX2ZyZWVfdXJiKGlvLT51cmJzW2lvLT5lbnRyaWVzXSk7Ci0JCWtmcmVlKGlvLT51cmJzKTsKLQkJaW8tPnVyYnMgPSBOVUxMOwotCX0KLQlpby0+ZGV2ID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBydHM1MXhfc2dfaW5pdChzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QgKmlvLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkgICB1bnNpZ25lZCBwaXBlLCB1bnNpZ25lZCBwZXJpb2QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgIGludCBuZW50cywgc2l6ZV90IGxlbmd0aCwgZ2ZwX3QgbWVtX2ZsYWdzKQotewotCXJldHVybiB1c2Jfc2dfaW5pdChpbywgZGV2LCBwaXBlLCBwZXJpb2QsIHNnLCBuZW50cywgbGVuZ3RoLCBtZW1fZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHJ0czUxeF9zZ193YWl0KHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8sIGludCB0aW1lb3V0KQotewotCWxvbmcgdGltZWxlZnQ7Ci0JaW50IGk7Ci0JaW50IGVudHJpZXMgPSBpby0+ZW50cmllczsKLQotCS8qIHF1ZXVlIHRoZSB1cmJzLiAgKi8KLQlzcGluX2xvY2tfaXJxKCZpby0+bG9jayk7Ci0JaSA9IDA7Ci0Jd2hpbGUgKGkgPCBlbnRyaWVzICYmICFpby0+c3RhdHVzKSB7Ci0JCWludCByZXR2YWw7Ci0KLQkJaW8tPnVyYnNbaV0tPmRldiA9IGlvLT5kZXY7Ci0JCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGlvLT51cmJzW2ldLCBHRlBfQVRPTUlDKTsKLQotCQkvKiBhZnRlciB3ZSBzdWJtaXQsIGxldCBjb21wbGV0aW9ucyBvciBjYW5jZWxhdGlvbnMgZmlyZTsKLQkJICogd2UgaGFuZHNoYWtlIHVzaW5nIGlvLT5zdGF0dXMuCi0JCSAqLwotCQlzcGluX3VubG9ja19pcnEoJmlvLT5sb2NrKTsKLQkJc3dpdGNoIChyZXR2YWwpIHsKLQkJCS8qIG1heWJlIHRoZSByZXRyeSB3aWxsIHJlY292ZXIgKi8KLQkJY2FzZSAtRU5YSU86CS8qIGhjIGRpZG4ndCBxdWV1ZSB0aGlzIG9uZSAqLwotCQljYXNlIC1FQUdBSU46Ci0JCWNhc2UgLUVOT01FTToKLQkJCWlvLT51cmJzW2ldLT5kZXYgPSBOVUxMOwotCQkJcmV0dmFsID0gMDsKLQkJCXlpZWxkKCk7Ci0JCQlicmVhazsKLQotCQkJLyogbm8gZXJyb3I/IGNvbnRpbnVlIGltbWVkaWF0ZWx5LgotCQkJICoKLQkJCSAqIE5PVEU6IHRvIHdvcmsgYmV0dGVyIHdpdGggVUhDSSAoNEsgSS9PIGJ1ZmZlciBtYXkKLQkJCSAqIG5lZWQgM0sgb2YgVERzKSBpdCBtYXkgYmUgZ29vZCB0byBsaW1pdCBob3cgbWFueQotCQkJICogVVJCcyBhcmUgcXVldWVkIGF0IG9uY2U7IE4gbWlsbGlzZWNvbmRzPwotCQkJICovCi0JCWNhc2UgMDoKLQkJCSsraTsKLQkJCWNwdV9yZWxheCgpOwotCQkJYnJlYWs7Ci0KLQkJCS8qIGZhaWwgYW55IHVuY29tcGxldGVkIHVyYnMgKi8KLQkJZGVmYXVsdDoKLQkJCWlvLT51cmJzW2ldLT5kZXYgPSBOVUxMOwotCQkJaW8tPnVyYnNbaV0tPnN0YXR1cyA9IHJldHZhbDsKLQkJCWRldl9kYmcoJmlvLT5kZXYtPmRldiwgIiVzLCBzdWJtaXQgLS0+ICVkXG4iLAotCQkJCV9fZnVuY19fLCByZXR2YWwpOwotCQkJdXNiX3NnX2NhbmNlbChpbyk7Ci0JCX0KLQkJc3Bpbl9sb2NrX2lycSgmaW8tPmxvY2spOwotCQlpZiAocmV0dmFsICYmIChpby0+c3RhdHVzID09IDAgfHwgaW8tPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkpCi0JCQlpby0+c3RhdHVzID0gcmV0dmFsOwotCX0KLQlpby0+Y291bnQgLT0gZW50cmllcyAtIGk7Ci0JaWYgKGlvLT5jb3VudCA9PSAwKQotCQljb21wbGV0ZSgmaW8tPmNvbXBsZXRlKTsKLQlzcGluX3VubG9ja19pcnEoJmlvLT5sb2NrKTsKLQotCXRpbWVsZWZ0ID0KLQkgICAgd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmlvLT5jb21wbGV0ZSwKLQkJCQkJCSAgICAgICh0aW1lb3V0ICogSFogLwotCQkJCQkJICAgICAgIDEwMDApID8gOgotCQkJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCWlmICh0aW1lbGVmdCA8PSAwKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIiVzIC0tIGNhbmNlbGxpbmcgU0cgcmVxdWVzdFxuIiwKLQkJCSAgICAgICB0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIpOwotCQl1c2Jfc2dfY2FuY2VsKGlvKTsKLQkJaWYgKHRpbWVsZWZ0ID09IDApCi0JCQlpby0+c3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJZWxzZQotCQkJaW8tPnN0YXR1cyA9IC1FSU5UUjsKLQl9Ci0KLQlydHM1MXhfc2dfY2xlYW4oaW8pOwotCXJldHVybiBpby0+c3RhdHVzOwotfQotCi0vKgotICogVHJhbnNmZXIgYSBzY2F0dGVyLWdhdGhlciBsaXN0IHZpYSBidWxrIHRyYW5zZmVyCi0gKgotICogVGhpcyBmdW5jdGlvbiBkb2VzIGJhc2ljYWxseSB0aGUgc2FtZSB0aGluZyBhcyB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZigpCi0gKiBhYm92ZSwgYnV0IGl0IHVzZXMgdGhlIHVzYmNvcmUgc2NhdHRlci1nYXRoZXIgbGlicmFyeS4KLSAqLwotc3RhdGljIGludCBydHM1MXhfYnVsa190cmFuc2Zlcl9zZ2xpc3Qoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG51bV9zZywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICphY3RfbGVuLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JLyogZG9uJ3Qgc3VibWl0IHMtZyByZXF1ZXN0cyBkdXJpbmcgYWJvcnQgcHJvY2Vzc2luZyAqLwotCWlmICh0ZXN0X2JpdChGTElEWF9BQk9SVElORywgJmNoaXAtPnVzYi0+ZGZsYWdzKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19FUlJPUik7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBzY2F0dGVyLWdhdGhlciByZXF1ZXN0IGJsb2NrICovCi0JUlRTNTFYX0RFQlVHUCgiJXM6IHhmZXIgJXUgYnl0ZXMsICVkIGVudHJpZXNcbiIsIF9fZnVuY19fLAotCQkgICAgICAgbGVuZ3RoLCBudW1fc2cpOwotCXJlc3VsdCA9Ci0JICAgIHJ0czUxeF9zZ19pbml0KCZjaGlwLT51c2ItPmN1cnJlbnRfc2csIGNoaXAtPnVzYi0+cHVzYl9kZXYsIHBpcGUsIDAsCi0JCQkgICBzZywgbnVtX3NnLCBsZW5ndGgsIEdGUF9OT0lPKTsKLQlpZiAocmVzdWx0KSB7Ci0JCVJUUzUxWF9ERUJVR1AoInJ0czUxeF9zZ19pbml0IHJldHVybmVkICVkXG4iLCByZXN1bHQpOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0VSUk9SKTsKLQl9Ci0KLQkvKiBzaW5jZSB0aGUgYmxvY2sgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LCBpdCdzIG5vdwotCSAqIG9rYXkgdG8gY2FuY2VsIGl0ICovCi0Jc2V0X2JpdChGTElEWF9TR19BQ1RJVkUsICZjaGlwLT51c2ItPmRmbGFncyk7Ci0KLQkvKiBkaWQgYW4gYWJvcnQgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLwotCWlmICh0ZXN0X2JpdChGTElEWF9BQk9SVElORywgJmNoaXAtPnVzYi0+ZGZsYWdzKSkgewotCi0JCS8qIGNhbmNlbCB0aGUgcmVxdWVzdCwgaWYgaXQgaGFzbid0IGJlZW4gY2FuY2VsbGVkIGFscmVhZHkgKi8KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTElEWF9TR19BQ1RJVkUsICZjaGlwLT51c2ItPmRmbGFncykpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIi0tIGNhbmNlbGxpbmcgc2cgcmVxdWVzdFxuIik7Ci0JCQl1c2Jfc2dfY2FuY2VsKCZjaGlwLT51c2ItPmN1cnJlbnRfc2cpOwotCQl9Ci0JfQotCi0JLyogd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRyYW5zZmVyICovCi0JcmVzdWx0ID0gcnRzNTF4X3NnX3dhaXQoJmNoaXAtPnVzYi0+Y3VycmVudF9zZywgdGltZW91dCk7Ci0KLQljbGVhcl9iaXQoRkxJRFhfU0dfQUNUSVZFLCAmY2hpcC0+dXNiLT5kZmxhZ3MpOwotCi0JLyogcmVzdWx0ID0gdXMtPmN1cnJlbnRfc2cuc3RhdHVzOyAqLwotCWlmIChhY3RfbGVuKQotCQkqYWN0X2xlbiA9IGNoaXAtPnVzYi0+Y3VycmVudF9zZy5ieXRlczsKLQlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQoY2hpcCwgcGlwZSwgbGVuZ3RoLCByZXN1bHQsCi0JCQkJICAgIGNoaXAtPnVzYi0+Y3VycmVudF9zZy5ieXRlcyk7Ci19Ci0KLXN0YXRpYyBpbnQgcnRzNTF4X2J1bGtfdHJhbnNmZXJfYnVmKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJCSAgICAgdW5zaWduZWQgaW50IHBpcGUsCi0JCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCSAgICAgdW5zaWduZWQgaW50ICphY3RfbGVuLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JLyogZmlsbCBhbmQgc3VibWl0IHRoZSBVUkIgKi8KLQl1c2JfZmlsbF9idWxrX3VyYihjaGlwLT51c2ItPmN1cnJlbnRfdXJiLCBjaGlwLT51c2ItPnB1c2JfZGV2LCBwaXBlLAotCQkJICBidWYsIGxlbmd0aCwgdXJiX2RvbmVfY29tcGxldGlvbiwgTlVMTCk7Ci0JcmVzdWx0ID0gcnRzNTF4X21zZ19jb21tb24oY2hpcCwgY2hpcC0+dXNiLT5jdXJyZW50X3VyYiwgdGltZW91dCk7Ci0KLQkvKiBzdG9yZSB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCAqLwotCWlmIChhY3RfbGVuKQotCQkqYWN0X2xlbiA9IGNoaXAtPnVzYi0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGg7Ci0JcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KGNoaXAsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LAotCQkJCSAgICBjaGlwLT51c2ItPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLX0KLQotaW50IHJ0czUxeF90cmFuc2Zlcl9kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IHBpcGUsCi0JCQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgdXNlX3NnLAotCQkJIHVuc2lnbmVkIGludCAqYWN0X2xlbiwgaW50IHRpbWVvdXQpCi17Ci0JaW50IHJlc3VsdDsKLQotCWlmICh0aW1lb3V0IDwgNjAwKQotCQl0aW1lb3V0ID0gNjAwOwotCi0JaWYgKHVzZV9zZykgewotCQlyZXN1bHQgPQotCQkgICAgcnRzNTF4X2J1bGtfdHJhbnNmZXJfc2dsaXN0KGNoaXAsIHBpcGUsCi0JCQkJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopYnVmLAotCQkJCQkJdXNlX3NnLCBsZW4sIGFjdF9sZW4sIHRpbWVvdXQpOwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9Ci0JCSAgICBydHM1MXhfYnVsa190cmFuc2Zlcl9idWYoY2hpcCwgcGlwZSwgYnVmLCBsZW4sIGFjdF9sZW4sCi0JCQkJCSAgICAgdGltZW91dCk7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IHJ0czUxeF90cmFuc2Zlcl9kYXRhX3BhcnRpYWwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJCQkgdm9pZCAqYnVmLCB2b2lkICoqcHRyLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwKLQkJCQkgdW5zaWduZWQgaW50IGxlbiwgaW50IHVzZV9zZywKLQkJCQkgdW5zaWduZWQgaW50ICphY3RfbGVuLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKHRpbWVvdXQgPCA2MDApCi0JCXRpbWVvdXQgPSA2MDA7Ci0KLQlpZiAodXNlX3NnKSB7Ci0JCXZvaWQgKnRtcF9idWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdG1wX2J1ZikKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCi0JCWlmICh1c2JfcGlwZW91dChwaXBlKSkgewotCQkJcnRzNTF4X2FjY2Vzc19zZ2xpc3QodG1wX2J1ZiwgbGVuLCBidWYsIHB0ciwgb2Zmc2V0LAotCQkJCQkgICAgIEZST01fWEZFUl9CVUYpOwotCQl9Ci0JCXJlc3VsdCA9Ci0JCSAgICBydHM1MXhfYnVsa190cmFuc2Zlcl9idWYoY2hpcCwgcGlwZSwgdG1wX2J1ZiwgbGVuLCBhY3RfbGVuLAotCQkJCQkgICAgIHRpbWVvdXQpOwotCQlpZiAocmVzdWx0ID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlpZiAodXNiX3BpcGVpbihwaXBlKSkgewotCQkJCXJ0czUxeF9hY2Nlc3Nfc2dsaXN0KHRtcF9idWYsIGxlbiwgYnVmLCBwdHIsCi0JCQkJCQkgICAgIG9mZnNldCwgVE9fWEZFUl9CVUYpOwotCQkJfQotCQl9Ci0KLQkJa2ZyZWUodG1wX2J1Zik7Ci0JfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IHN0ZXAgPSAwOwotCQlpZiAob2Zmc2V0KQotCQkJc3RlcCA9ICpvZmZzZXQ7Ci0JCXJlc3VsdCA9Ci0JCSAgICBydHM1MXhfYnVsa190cmFuc2Zlcl9idWYoY2hpcCwgcGlwZSwgYnVmICsgc3RlcCwgbGVuLAotCQkJCQkgICAgIGFjdF9sZW4sIHRpbWVvdXQpOwotCQlpZiAoYWN0X2xlbikKLQkJCXN0ZXAgKz0gKmFjdF9sZW47Ci0JCWVsc2UKLQkJCXN0ZXAgKz0gbGVuOwotCQlpZiAob2Zmc2V0KQotCQkJKm9mZnNldCA9IHN0ZXA7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IHJ0czUxeF9nZXRfZXBjX3N0YXR1cyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiAqc3RhdHVzKQotewotCXVuc2lnbmVkIGludCBwaXBlID0gUkNWX0lOVFJfUElQRShjaGlwKTsKLQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOwotCXN0cnVjdCBjb21wbGV0aW9uIHVyYl9kb25lOwotCWludCByZXN1bHQ7Ci0KLQlpZiAoIXN0YXR1cykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19FUlJPUik7Ci0KLQkvKiBzZXQgdXAgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgd2FrZXVwIHN5c3RlbSAqLwotCWluaXRfY29tcGxldGlvbigmdXJiX2RvbmUpOwotCi0JZXAgPSBjaGlwLT51c2ItPnB1c2JfZGV2LT5lcF9pblt1c2JfcGlwZWVuZHBvaW50KHBpcGUpXTsKLQotCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCi0JLyogU2V0IGludGVydmFsIHRvIDEwIGhlcmUgdG8gbWF0Y2ggdGhlIGVuZHBvaW50IGRlc2NyaXB0b3IsCi0JICogdGhlIHBvbGxpbmcgaW50ZXJ2YWwgaXMgY29udHJvbGxlZCBieSB0aGUgcG9sbGluZyB0aHJlYWQgKi8KLQl1c2JfZmlsbF9pbnRfdXJiKGNoaXAtPnVzYi0+aW50cl91cmIsIGNoaXAtPnVzYi0+cHVzYl9kZXYsIHBpcGUsCi0JCQkgc3RhdHVzLCAyLCB1cmJfZG9uZV9jb21wbGV0aW9uLCAmdXJiX2RvbmUsIDEwKTsKLQotCXJlc3VsdCA9IHJ0czUxeF9tc2dfY29tbW9uKGNoaXAsIGNoaXAtPnVzYi0+aW50cl91cmIsIDEwMCk7Ci0KLQlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQoY2hpcCwgcGlwZSwgMiwgcmVzdWx0LAotCQkJCSAgICBjaGlwLT51c2ItPmludHJfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLX0KLQotc3RhdGljIHU4IG1lZGlhX25vdF9wcmVzZW50W10gPSB7Ci0JMHg3MCwgMCwgMHgwMiwgMCwgMCwgMCwgMCwgMTAsIDAsIDAsIDAsIDAsIDB4M0EsIDAsIDAsIDAsIDAsIDAgfTsKLXN0YXRpYyB1OCBpbnZhbGlkX2NtZF9maWVsZFtdID0gewotCTB4NzAsIDAsIDB4MDUsIDAsIDAsIDAsIDAsIDEwLCAwLCAwLCAwLCAwLCAweDI0LCAwLCAwLCAwLCAwLCAwIH07Ci0KLXZvaWQgcnRzNTF4X2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJlc3VsdDsKLQotI2lmZGVmIENPTkZJR19QTQotCWlmIChjaGlwLT5vcHRpb24uc3NfZW4pIHsKLQkJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKLQkJCWlmIChSVFM1MVhfQ0hLX1NUQVQoY2hpcCwgU1RBVF9TUykpIHsKLQkJCQlpZiAoY2hlY2tfZmFrZV9jYXJkX3JlYWR5KGNoaXAsCi0JCQkJCQkJU0NTSV9MVU4oc3JiKSkpIHsKLQkJCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwotCQkJCQltZW1jcHkoc3JiLT5zZW5zZV9idWZmZXIsCi0JCQkJCSAgICAgICBtZWRpYV9ub3RfcHJlc2VudCwgU0VOU0VfU0laRSk7Ci0JCQkJfQotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlIGlmIChzcmItPmNtbmRbMF0gPT0gQUxMT1dfTUVESVVNX1JFTU9WQUwpIHsKLQkJCWlmIChSVFM1MVhfQ0hLX1NUQVQoY2hpcCwgU1RBVF9TUykpIHsKLQkJCQlpbnQgcHJldmVudCA9IHNyYi0+Y21uZFs0XSAmIDB4MTsKLQotCQkJCWlmIChwcmV2ZW50KSB7Ci0JCQkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwotCQkJCQltZW1jcHkoc3JiLT5zZW5zZV9idWZmZXIsCi0JCQkJCSAgICAgICBpbnZhbGlkX2NtZF9maWVsZCwgU0VOU0VfU0laRSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOwotCQkJCX0KLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoUlRTNTFYX0NIS19TVEFUKGNoaXAsIFNUQVRfU1MpCi0JCQkgICAgfHwgUlRTNTFYX0NIS19TVEFUKGNoaXAsIFNUQVRfU1NfUFJFKSkgewotCQkJCS8qIFdha2UgdXAgZGV2aWNlICovCi0JCQkJUlRTNTFYX0RFQlVHUCgiVHJ5IHRvIHdha2UgdXAgZGV2aWNlXG4iKTsKLQkJCQljaGlwLT5yZXN1bWVfZnJvbV9zY3NpID0gMTsKLQotCQkJCXJ0czUxeF90cnlfdG9fZXhpdF9zcyhjaGlwKTsKLQotCQkJCWlmIChSVFM1MVhfQ0hLX1NUQVQoY2hpcCwgU1RBVF9TUykpIHsKLQkJCQkJd2FpdF90aW1lb3V0KDMwMDApOwotCi0JCQkJCXJ0czUxeF9pbml0X2NoaXAoY2hpcCk7Ci0JCQkJCXJ0czUxeF9pbml0X2NhcmRzKGNoaXApOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotCi0JcmVzdWx0ID0gcnRzNTF4X3Njc2lfaGFuZGxlcihzcmIsIGNoaXApOwotCi0JLyogaWYgdGhlcmUgaXMgYSB0cmFuc3BvcnQgZXJyb3IsIHJlc2V0IGFuZCBkb24ndCBhdXRvLXNlbnNlICovCi0JaWYgKHJlc3VsdCA9PSBUUkFOU1BPUlRfRVJST1IpIHsKLQkJUlRTNTFYX0RFQlVHUCgiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBlcnJvciwgcmVzZXR0aW5nXG4iKTsKLQkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7Ci0JCWdvdG8gSGFuZGxlX0Vycm9yczsKLQl9Ci0KLQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7Ci0KLQkvKgotCSAqIElmIHdlIGhhdmUgYSBmYWlsdXJlLCB3ZSdyZSBnb2luZyB0byBkbyBhIFJFUVVFU1RfU0VOU0UKLQkgKiBhdXRvbWF0aWNhbGx5LiAgTm90ZSB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhIGNvbW1hbmQKLQkgKiAiZmFpbHVyZSIgYW5kIGFuICJlcnJvciIgaW4gdGhlIHRyYW5zcG9ydCBtZWNoYW5pc20uCi0JICovCi0JaWYgKHJlc3VsdCA9PSBUUkFOU1BPUlRfRkFJTEVEKSB7Ci0JCS8qIHNldCB0aGUgcmVzdWx0IHNvIHRoZSBoaWdoZXIgbGF5ZXJzIGV4cGVjdCB0aGlzIGRhdGEgKi8KLQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047Ci0JCW1lbWNweShzcmItPnNlbnNlX2J1ZmZlciwKLQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJihjaGlwLT5zZW5zZV9idWZmZXJbU0NTSV9MVU4oc3JiKV0pLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzZW5zZV9kYXRhX3QpKTsKLQl9Ci0KLQlyZXR1cm47Ci0KLQkvKiBFcnJvciBhbmQgYWJvcnQgcHJvY2Vzc2luZzogdHJ5IHRvIHJlc3luY2hyb25pemUgd2l0aCB0aGUgZGV2aWNlCi0JICogYnkgaXNzdWluZyBhIHBvcnQgcmVzZXQuICBJZiB0aGF0IGZhaWxzLCB0cnkgYSBjbGFzcy1zcGVjaWZpYwotCSAqIGRldmljZSByZXNldC4gKi8KLUhhbmRsZV9FcnJvcnM6Ci0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X3RyYW5zcG9ydC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvcnRzNTF4X3RyYW5zcG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjRmMTE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3J0czUxeF90cmFuc3BvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICogSGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQXV0aG9yOgotICogICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICogTWFpbnRhaW5lcjoKLSAqICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKi8KLQotI2lmbmRlZiBfX1JUUzUxWF9UUkFOU1BPUlRfSAotI2RlZmluZSBfX1JUUzUxWF9UUkFOU1BPUlRfSAotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlICJydHM1MXguaCIKLSNpbmNsdWRlICJydHM1MXhfY2hpcC5oIgotCi0jaWYgMSAvKiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAzNCkgKi8KLSNkZWZpbmUgVVJCX05PX1NFVFVQX0RNQV9NQVAJCTAKLSNlbmRpZgotCi11bnNpZ25lZCBpbnQgcnRzNTF4X2FjY2Vzc19zZ2xpc3QodW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJCSAgdW5zaWduZWQgaW50IGJ1Zmxlbiwgdm9pZCAqc2dsaXN0LAotCQkJCSAgdm9pZCAqKnNncHRyLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwKLQkJCQkgIGVudW0geGZlcl9idWZfZGlyIGRpcik7Ci12b2lkIHJ0czUxeF9zZXRfeGZlcl9idWYodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLAotCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Ci12b2lkIHJ0czUxeF9nZXRfeGZlcl9idWYodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLAotCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Ci0KLWludCBydHM1MXhfY3RybF90cmFuc2ZlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBwaXBlLAotCQkJIHU4IHJlcXVlc3QsIHU4IHJlcXVlc3R0eXBlLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKLQkJCSB2b2lkICpkYXRhLCB1MTYgc2l6ZSwgaW50IHRpbWVvdXQpOwotaW50IHJ0czUxeF90cmFuc2Zlcl9kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IHBpcGUsCi0JCQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgdXNlX3NnLAotCQkJIHVuc2lnbmVkIGludCAqYWN0X2xlbiwgaW50IHRpbWVvdXQpOwotaW50IHJ0czUxeF90cmFuc2Zlcl9kYXRhX3BhcnRpYWwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJCQkgdm9pZCAqYnVmLCB2b2lkICoqcHRyLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwKLQkJCQkgdW5zaWduZWQgaW50IGxlbiwgaW50IHVzZV9zZywKLQkJCQkgdW5zaWduZWQgaW50ICphY3RfbGVuLCBpbnQgdGltZW91dCk7Ci0KLSNpZm5kZWYgUE9MTElOR19JTl9USFJFQUQKLWludCBydHM1MXhfc3RhcnRfZXBjX3RyYW5zZmVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci12b2lkIHJ0czUxeF9jYW5jZWxfZXBjX3RyYW5zZmVyKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci0jZW5kaWYKLQotaW50IHJ0czUxeF9nZXRfZXBjX3N0YXR1cyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUxNiAqc3RhdHVzKTsKLXZvaWQgcnRzNTF4X2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotCi0jZW5kaWYgLyogX19SVFM1MVhfVFJBTlNQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3NkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9zZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTVhOWI4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3NkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjc0ICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInRyYWNlLmgiCi0jaW5jbHVkZSAicnRzNTF4LmgiCi0jaW5jbHVkZSAicnRzNTF4X3RyYW5zcG9ydC5oIgotI2luY2x1ZGUgInJ0czUxeF9zY3NpLmgiCi0jaW5jbHVkZSAicnRzNTF4X2NhcmQuaCIKLSNpbmNsdWRlICJzZC5oIgotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2Rfc2V0X3Jlc2V0X2ZhaWwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBlcnJfY29kZSkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0KLQlzZF9jYXJkLT5zZF9yZXNldF9mYWlsIHw9IGVycl9jb2RlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2RfY2xlYXJfcmVzZXRfZmFpbChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCi0Jc2RfY2FyZC0+c2RfcmVzZXRfZmFpbCA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNkX2NoZWNrX3Jlc2V0X2ZhaWwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBlcnJfY29kZSkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0KLQlyZXR1cm4gc2RfY2FyZC0+c2RfcmVzZXRfZmFpbCAmIGVycl9jb2RlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2Rfc2V0X2Vycl9jb2RlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZXJyX2NvZGUpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCi0Jc2RfY2FyZC0+ZXJyX2NvZGUgfD0gZXJyX2NvZGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZF9jbHJfZXJyX2NvZGUoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQotCXNkX2NhcmQtPmVycl9jb2RlID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2RfY2hlY2tfZXJyX2NvZGUoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBlcnJfY29kZSkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0KLQlyZXR1cm4gc2RfY2FyZC0+ZXJyX2NvZGUgJiBlcnJfY29kZTsKLX0KLQotc3RhdGljIGludCBzZF9wYXJzZV9lcnJfY29kZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLX0KLQotaW50IHNkX2NoZWNrX2RhdGEwX3N0YXR1cyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQl1OCBzdGF0OwotCi0JcmV0dmFsID0gcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX0JVU19TVEFULCAmc3RhdCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JaWYgKCEoc3RhdCAmIFNEX0RBVDBfU1RBVFVTKSkgewotCQlzZF9zZXRfZXJyX2NvZGUoY2hpcCwgU0RfQlVTWSk7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX3NlbmRfY21kX2dldF9yc3Aoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBjbWRfaWR4LAotCQkJICAgICAgIHUzMiBhcmcsIHU4IHJzcF90eXBlLCB1OCAqcnNwLCBpbnQgcnNwX2xlbikKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQlpbnQgdGltZW91dCA9IDUwOwotCXUxNiByZWdfYWRkcjsKLQl1OCBidWZbMTddLCBzdGF0OwotCWludCBsZW4gPSAyOwotCWludCBydHlfY250ID0gMDsKLQotCXNkX2Nscl9lcnJfY29kZShjaGlwKTsKLQotCVJUUzUxWF9ERUJVR1AoIlNEL01NQyBDTUQgJWQsIGFyZyA9IDB4JTA4eFxuIiwgY21kX2lkeCwgYXJnKTsKLQotCWlmIChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMWIpCi0JCXRpbWVvdXQgPSAzMDAwOwotCi1SVFlfU0VORF9DTUQ6Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQwLCAweEZGLCAweDQwIHwgY21kX2lkeCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMSwgMHhGRiwgKHU4KSAoYXJnID4+IDI0KSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMiwgMHhGRiwgKHU4KSAoYXJnID4+IDE2KSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMywgMHhGRiwgKHU4KSAoYXJnID4+IDgpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQ0LCAweEZGLCAodTgpIGFyZyk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcyLCAweEZGLCByc3BfdHlwZSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9EQVRBX1NPVVJDRSwgMHgwMSwKLQkJICAgICAgIFBJTkdQT05HX0JVRkZFUik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBTRF9UTV9DTURfUlNQIHwgU0RfVFJBTlNGRVJfU1RBUlQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFNEX1RSQU5TRkVSLAotCQkgICAgICAgU0RfVFJBTlNGRVJfRU5EIHwgU0RfU1RBVF9JRExFLAotCQkgICAgICAgU0RfVFJBTlNGRVJfRU5EIHwgU0RfU1RBVF9JRExFKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgU0RfU1RBVDEsIDAsIDApOwotCi0JaWYgKENIRUNLX1VTQihjaGlwLCBVU0JfMjApKSB7Ci0JCWlmIChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMikgewotCQkJLyogUmVhZCBkYXRhIGZyb20gcGluZy1wb25nIGJ1ZmZlciAqLwotCQkJZm9yIChyZWdfYWRkciA9IFBQQlVGX0JBU0UyOwotCQkJICAgICByZWdfYWRkciA8IFBQQlVGX0JBU0UyICsgMTY7IHJlZ19hZGRyKyspIHsKLQkJCQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIHJlZ19hZGRyLCAwLAotCQkJCQkgICAgICAgMCk7Ci0JCQl9Ci0JCQlsZW4gPSAxODsKLQkJfSBlbHNlIGlmIChyc3BfdHlwZSAhPSBTRF9SU1BfVFlQRV9SMCkgewotCQkJLyogUmVhZCBkYXRhIGZyb20gU0RfQ01EeCByZWdpc3RlcnMgKi8KLQkJCWZvciAocmVnX2FkZHIgPSBTRF9DTUQwOyByZWdfYWRkciA8PSBTRF9DTUQ0OwotCQkJICAgICByZWdfYWRkcisrKSB7Ci0JCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCByZWdfYWRkciwgMCwKLQkJCQkJICAgICAgIDApOwotCQkJfQotCQkJbGVuID0gNzsKLQkJfSBlbHNlIHsKLQkJCWxlbiA9IDI7Ci0JCX0KLQl9IGVsc2UgewotCQlsZW4gPSAyOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgbGVuLCB0aW1lb3V0KTsKLQotCWlmIChDSEVDS19TRF9UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkpIHsKLQkJdTggdmFsOwotCi0JCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9TVEFUMSwgJnZhbCk7Ci0JCVJUUzUxWF9ERUJVR1AoIlNEX1NUQVQxOiAweCV4XG4iLCB2YWwpOwotCi0JCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9TVEFUMiwgJnZhbCk7Ci0JCVJUUzUxWF9ERUJVR1AoIlNEX1NUQVQyOiAweCV4XG4iLCB2YWwpOwotCi0JCWlmICh2YWwgJiBTRF9SU1BfODBDTEtfVElNRU9VVCkKLQkJCXNkX3NldF9lcnJfY29kZShjaGlwLCBTRF9SU1BfVElNRU9VVCk7Ci0KLQkJcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX0JVU19TVEFULCAmdmFsKTsKLQkJUlRTNTFYX0RFQlVHUCgiU0RfQlVTX1NUQVQ6IDB4JXhcbiIsIHZhbCk7Ci0KLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfVElNRURPVVQpIHsKLQkJCWlmIChyc3BfdHlwZSAmIFNEX1dBSVRfQlVTWV9FTkQpIHsKLQkJCQlyZXR2YWwgPSBzZF9jaGVja19kYXRhMF9zdGF0dXMoY2hpcCk7Ci0JCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQl9IGVsc2UgewotCQkJCXNkX3NldF9lcnJfY29kZShjaGlwLCBTRF9UT19FUlIpOwotCQkJfQotCQl9Ci0JCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmIChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMCkKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCi0JaWYgKENIRUNLX1VTQihjaGlwLCBVU0JfMjApKSB7Ci0JCXJ0czUxeF9yZWFkX3JzcF9idWYoY2hpcCwgMiwgYnVmLCBsZW4gLSAyKTsKLQl9IGVsc2UgewotCQlpZiAocnNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjIpIHsKLQkJCXJlZ19hZGRyID0gUFBCVUZfQkFTRTI7Ci0JCQlsZW4gPSAxNjsKLQkJfSBlbHNlIHsKLQkJCXJlZ19hZGRyID0gU0RfQ01EMDsKLQkJCWxlbiA9IDU7Ci0JCX0KLQkJcmV0dmFsID0gcnRzNTF4X3NlcV9yZWFkX3JlZ2lzdGVyKGNoaXAsIHJlZ19hZGRyLAotCQkJCQkJICAgICAodW5zaWduZWQgc2hvcnQpbGVuLCBidWYpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCXN0YXQgPSBjaGlwLT5yc3BfYnVmWzFdOwotCi0JLyogQ2hlY2sgKFN0YXJ0LFRyYW5zbWlzc2lvbikgYml0IG9mIFJlc3BvbnNlICovCi0JaWYgKChidWZbMF0gJiAweEMwKSAhPSAwKSB7Ci0JCXNkX3NldF9lcnJfY29kZShjaGlwLCBTRF9TVFNfRVJSKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0JLyogQ2hlY2sgQ1JDNyAqLwotCWlmICghKHJzcF90eXBlICYgU0RfTk9fQ0hFQ0tfQ1JDNykpIHsKLQkJaWYgKHN0YXQgJiBTRF9DUkM3X0VSUikgewotCQkJaWYgKGNtZF9pZHggPT0gV1JJVEVfTVVMVElQTEVfQkxPQ0spIHsKLQkJCQlzZF9zZXRfZXJyX2NvZGUoY2hpcCwgU0RfQ1JDX0VSUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJCWlmIChydHlfY250IDwgU0RfTUFYX1JFVFJZX0NPVU5UKSB7Ci0JCQkJd2FpdF90aW1lb3V0KDIwKTsKLQkJCQlydHlfY250Kys7Ci0JCQkJZ290byBSVFlfU0VORF9DTUQ7Ci0JCQl9IGVsc2UgewotCQkJCXNkX3NldF9lcnJfY29kZShjaGlwLCBTRF9DUkNfRVJSKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0JfQotCS8qIENoZWNrIFN0YXR1cyAqLwotCWlmICgocnNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjEpIHx8IChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMWIpKSB7Ci0JCWlmICgoY21kX2lkeCAhPSBTRU5EX1JFTEFUSVZFX0FERFIpCi0JCSAgICAmJiAoY21kX2lkeCAhPSBTRU5EX0lGX0NPTkQpKSB7Ci0JCQlpZiAoY21kX2lkeCAhPSBTVE9QX1RSQU5TTUlTU0lPTikgewotCQkJCWlmIChidWZbMV0gJiAweDgwKQotCQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQkJaWYgKGJ1ZlsxXSAmIDB4N0YpIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJidWZbMV06IDB4JTAyeFxuIiwgYnVmWzFdKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQkJaWYgKGJ1ZlsyXSAmIDB4RkYpIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJidWZbMl06IDB4JTAyeFxuIiwgYnVmWzJdKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQkJaWYgKGJ1ZlszXSAmIDB4ODApIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJidWZbM106IDB4JTAyeFxuIiwgYnVmWzNdKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQkJaWYgKGJ1ZlszXSAmIDB4MDEpIHsKLQkJCQkvKiBHZXQgIlJFQURZX0ZPUl9EQVRBIiBiaXQgKi8KLQkJCQlzZF9jYXJkLT5zZF9kYXRhX2J1Zl9yZWFkeSA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCXNkX2NhcmQtPnNkX2RhdGFfYnVmX3JlYWR5ID0gMDsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChyc3AgJiYgcnNwX2xlbikKLQkJbWVtY3B5KHJzcCwgYnVmLCByc3BfbGVuKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNkX3ByaW50X2RlYnVnX3JlZyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0jaWZkZWYgQ09ORklHX1JUUzUxMzlfREVCVUcKLQl1OCB2YWwgPSAwOwotCi0JcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX1NUQVQxLCAmdmFsKTsKLQlSVFM1MVhfREVCVUdQKCJTRF9TVEFUMTogMHgleFxuIiwgdmFsKTsKLQlydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfU1RBVDIsICZ2YWwpOwotCVJUUzUxWF9ERUJVR1AoIlNEX1NUQVQyOiAweCV4XG4iLCB2YWwpOwotCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9CVVNfU1RBVCwgJnZhbCk7Ci0JUlRTNTFYX0RFQlVHUCgiU0RfQlVTX1NUQVQ6IDB4JXhcbiIsIHZhbCk7Ci0jZW5kaWYKLX0KLQotaW50IHNkX3JlYWRfZGF0YShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHRyYW5zX21vZGUsIHU4ICpjbWQsIGludCBjbWRfbGVuLAotCQkgdTE2IGJ5dGVfY250LCB1MTYgYmxrX2NudCwgdTggYnVzX3dpZHRoLCB1OCAqYnVmLCBpbnQgYnVmX2xlbiwKLQkJIGludCB0aW1lb3V0KQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsOwotCWludCBpOwotCi0Jc2RfY2xyX2Vycl9jb2RlKGNoaXApOwotCi0JaWYgKCFidWYpCi0JCWJ1Zl9sZW4gPSAwOwotCi0JaWYgKGJ1Zl9sZW4gPiA1MTIpCi0JCS8qIFRoaXMgZnVuY3Rpb24gY2FuJ3QgcmVhZCBkYXRhIG1vcmUgdGhhbiBvbmUgcGFnZSAqLwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JaWYgKGNtZF9sZW4pIHsKLQkJUlRTNTFYX0RFQlVHUCgiU0QvTU1DIENNRCAlZFxuIiwgY21kWzBdIC0gMHg0MCk7Ci0JCWZvciAoaSA9IDA7IGkgPCAoY21kX2xlbiA8IDYgPyBjbWRfbGVuIDogNik7IGkrKykgewotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMCArIGksIDB4RkYsCi0JCQkJICAgICAgIGNtZFtpXSk7Ci0JCX0KLQl9Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgKHU4KSBieXRlX2NudCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfSCwgMHhGRiwKLQkJICAgICAgICh1OCkgKGJ5dGVfY250ID4+IDgpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfTCwgMHhGRiwgKHU4KSBibGtfY250KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfSCwgMHhGRiwKLQkJICAgICAgICh1OCkgKGJsa19jbnQgPj4gOCkpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwgMHgwMywgYnVzX3dpZHRoKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsCi0JCSAgICAgICBTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwgU0RfTk9fV0FJVF9CVVNZX0VORAotCQkgICAgICAgfCBTRF9DSEVDS19DUkM3IHwgU0RfUlNQX0xFTl82KTsKLQlpZiAodHJhbnNfbW9kZSAhPSBTRF9UTV9BVVRPX1RVTklORykgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkJICAgICAgIFBJTkdQT05HX0JVRkZFUik7Ci0JfQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgdHJhbnNfbW9kZSB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgU0RfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgU0RfVFJBTlNGRVJfRU5EKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgdGltZW91dCk7Ci0KLQlpZiAoQ0hFQ0tfU0RfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCXNkX3ByaW50X2RlYnVnX3JlZyhjaGlwKTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfVElNRURPVVQpIHsKLQkJCXNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VORF9TVEFUVVMsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJCSAgICBTRF9SU1BfVFlQRV9SMSwgTlVMTCwgMCk7Ci0JCX0KLQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmIChidWYgJiYgYnVmX2xlbikgewotCQlyZXR2YWwgPSBydHM1MXhfcmVhZF9wcGJ1ZihjaGlwLCBidWYsIGJ1Zl9sZW4pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX3dyaXRlX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCB0cmFuc19tb2RlLAotCQkJIHU4ICpjbWQsIGludCBjbWRfbGVuLCB1MTYgYnl0ZV9jbnQsIHUxNiBibGtfY250LAotCQkJIHU4IGJ1c193aWR0aCwgdTggKmJ1ZiwgaW50IGJ1Zl9sZW4sIGludCB0aW1lb3V0KQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsOwotCWludCBpOwotCi0Jc2RfY2xyX2Vycl9jb2RlKGNoaXApOwotCi0JaWYgKCFidWYpCi0JCWJ1Zl9sZW4gPSAwOwotCi0JLyogVGhpcyBmdW5jdGlvbiBjYW4ndCB3cml0ZSBkYXRhIG1vcmUgdGhhbiBvbmUgcGFnZSAqLwotCWlmIChidWZfbGVuID4gNTEyKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JaWYgKGJ1ZiAmJiBidWZfbGVuKSB7Ci0JCXJldHZhbCA9IHJ0czUxeF93cml0ZV9wcGJ1ZihjaGlwLCBidWYsIGJ1Zl9sZW4pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JaWYgKGNtZF9sZW4pIHsKLQkJUlRTNTFYX0RFQlVHUCgiU0QvTU1DIENNRCAlZFxuIiwgY21kWzBdIC0gMHg0MCk7Ci0JCWZvciAoaSA9IDA7IGkgPCAoY21kX2xlbiA8IDYgPyBjbWRfbGVuIDogNik7IGkrKykgewotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMCArIGksIDB4RkYsCi0JCQkJICAgICAgIGNtZFtpXSk7Ci0JCX0KLQl9Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgKHU4KSBieXRlX2NudCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfSCwgMHhGRiwKLQkJICAgICAgICh1OCkgKGJ5dGVfY250ID4+IDgpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfTCwgMHhGRiwgKHU4KSBibGtfY250KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfSCwgMHhGRiwKLQkJICAgICAgICh1OCkgKGJsa19jbnQgPj4gOCkpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwgMHgwMywgYnVzX3dpZHRoKTsKLQotCWlmIChjbWRfbGVuKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsCi0JCQkgICAgICAgU0RfQ0FMQ1VMQVRFX0NSQzcgfCBTRF9DSEVDS19DUkMxNiB8Ci0JCQkgICAgICAgU0RfV0FJVF9CVVNZX0VORCB8IFNEX0NIRUNLX0NSQzcgfCBTRF9SU1BfTEVOXzYpOwotCi0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMiwgMHhGRiwKLQkJCSAgICAgICBTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwKLQkJCSAgICAgICBTRF9OT19XQUlUX0JVU1lfRU5EIHwgU0RfQ0hFQ0tfQ1JDNyB8Ci0JCQkgICAgICAgU0RfUlNQX0xFTl82KTsKLQl9Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgMHhGRiwKLQkJICAgICAgIHRyYW5zX21vZGUgfCBTRF9UUkFOU0ZFUl9TVEFSVCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIFNEX1RSQU5TRkVSX0VORCwKLQkJICAgICAgIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiwgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIHRpbWVvdXQpOwotCi0JaWYgKENIRUNLX1NEX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkgewotCQlzZF9wcmludF9kZWJ1Z19yZWcoY2hpcCk7Ci0KLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfVElNRURPVVQpCi0JCQlzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQkgICAgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDApOwotCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX2NoZWNrX2NzZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGNoYXIgY2hlY2tfd3ApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0JdTggY3NkX3ZlciwgdHJhbnNfc3BlZWQ7Ci0JdTggcnNwWzE2XTsKLQotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBTRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCXNkX3NldF9yZXNldF9mYWlsKGNoaXAsIFNEX1JFU0VUX0ZBSUwpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCXJldHZhbCA9Ci0JCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfQ1NELCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQlTRF9SU1BfVFlQRV9SMiwgcnNwLCAxNik7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSA2KQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCW1lbWNweShzZF9jYXJkLT5yYXdfY3NkLCByc3AgKyAxLCAxNSk7Ci0JLyogR2V0IENSQzcgKi8KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgU0RfQ01ENSwgc2RfY2FyZC0+cmF3X2NzZCArIDE1KTsKLQotCVJUUzUxWF9ERUJVR1AoIkNTRCBSZXNwb25zZTpcbiIpOwotCVJUUzUxWF9EVU1QKHJzcCwgMTYpOwotCi0JLyogR2V0IENTRCBWZXJzaW9uICovCi0JY3NkX3ZlciA9IChyc3BbMV0gJiAweGMwKSA+PiA2OwotCVJUUzUxWF9ERUJVR1AoImNzZF92ZXIgPSAlZFxuIiwgY3NkX3Zlcik7Ci0KLQl0cmFuc19zcGVlZCA9IHJzcFs0XTsKLQlpZiAoKHRyYW5zX3NwZWVkICYgMHgwNykgPT0gMHgwMikgewkvKiAxME1iaXRzL3MgKi8KLQkJaWYgKCh0cmFuc19zcGVlZCAmIDB4ZjgpID49IDB4MzApIHsJLyogPjI1TWJpdHMvcyAqLwotCQkJaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJCQlzZF9jYXJkLT5zZF9jbG9jayA9IDQ2OwotCQkJZWxzZQotCQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gQ0xLXzUwOwotCQl9IGVsc2UgaWYgKCh0cmFuc19zcGVlZCAmIDB4ZjgpID09IDB4MjgpIHsgLyogMjBNYml0cy9zICovCi0JCQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gMzk7Ci0JCQllbHNlCi0JCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSBDTEtfNDA7Ci0JCX0gZWxzZSBpZiAoKHRyYW5zX3NwZWVkICYgMHhmOCkgPT0gMHgyMCkgeyAvKiAxNU1iaXRzL3MgKi8KLQkJCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSAyOTsKLQkJCWVsc2UKLQkJCQlzZF9jYXJkLT5zZF9jbG9jayA9IENMS18zMDsKLQkJfSBlbHNlIGlmICgodHJhbnNfc3BlZWQgJiAweGY4KSA+PSAweDEwKSB7IC8qIDEyTWJpdHMvcyAqLwotCQkJaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJCQlzZF9jYXJkLT5zZF9jbG9jayA9IDIzOwotCQkJZWxzZQotCQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gQ0xLXzIwOwotCQl9IGVsc2UgaWYgKCh0cmFuc19zcGVlZCAmIDB4MDgpID49IDB4MDgpIHsgLyogMTBNYml0cy9zICovCi0JCQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gMTk7Ci0JCQllbHNlCi0JCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSBDTEtfMjA7Ci0JCX0gLyplbHNlIHsgKi8KLQkJCS8qSWYgdGhpcyAsdGhlbiBzbG93IGNhcmQgd2lsbCB1c2UgMzBNIGNsb2NrICovCi0JCQkvKiBUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOyAqLwotCQkvKiB9ICovCi0JfQotCS8qZWxzZSB7Ci0JICAgVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkgICB9ICovCi0JaWYgKENIS19NTUNfU0VDVE9SX01PREUoc2RfY2FyZCkpIHsKLQkJc2RfY2FyZC0+Y2FwYWNpdHkgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIEZvciBIaWdoLUNhcGFjaXR5IENhcmQsIENTRF9TVFJVQ1RVUkUgYWx3YXlzIGJlICIweDEiICovCi0JCWlmICgoIUNIS19TRF9IQ1hDKHNkX2NhcmQpKSB8fCAoY3NkX3ZlciA9PSAwKSkgewotCQkJLyogQ2FsY3VsYXRlIHRvdGFsIHNlY3RvciBhY2NvcmRpbmcgdG8gQ19TSVpFLAotCQkJICogQ19TSVpFX01VTFQgJiBSRUFEX0JMX0xFTiAqLwotCQkJdTggYmxrX3NpemUsIGNfc2l6ZV9tdWx0OwotCQkJdTE2IGNfc2l6ZTsKLQkJCS8qIEdldCBSRUFEX0JMX0xFTiAqLwotCQkJYmxrX3NpemUgPSByc3BbNl0gJiAweDBGOwotCQkJLyogR2V0IENfU0laRSAqLwotCQkJY19zaXplID0gKCh1MTYpIChyc3BbN10gJiAweDAzKSA8PCAxMCkKLQkJCSAgICArICgodTE2KSByc3BbOF0gPDwgMikKLQkJCSAgICArICgodTE2KSAocnNwWzldICYgMHhDMCkgPj4gNik7Ci0JCQkvKiBHZXQgQ19TSVpFX01VTCAqLwotCQkJY19zaXplX211bHQgPSAodTgpICgocnNwWzEwXSAmIDB4MDMpIDw8IDEpOwotCQkJY19zaXplX211bHQgKz0gKHJzcFsxMV0gJiAweDgwKSA+PiA3OwotCQkJLyogQ2FsY3VsYXRlIHRvdGFsIENhcGFjaXR5ICAqLwotCQkJc2RfY2FyZC0+Y2FwYWNpdHkgPQotCQkJICAgICgoKHUzMikgKGNfc2l6ZSArIDEpKSAqCi0JCQkgICAgICgxIDw8IChjX3NpemVfbXVsdCArIDIpKSkgPDwgKGJsa19zaXplIC0gOSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBIaWdoIENhcGFjaXR5IENhcmQgYW5kIFVzZSBDU0QyLjAgVmVyc2lvbiAqLwotCQkJdTMyIHRvdGFsX3NlY3RvciA9IDA7Ci0JCQl0b3RhbF9zZWN0b3IgPSAoKCh1MzIpIHJzcFs4XSAmIDB4M2YpIDw8IDE2KSB8Ci0JCQkgICAgKCh1MzIpIHJzcFs5XSA8PCA4KSB8ICh1MzIpIHJzcFsxMF07Ci0JCQkvKiBUb3RhbCBDYXBhY2l0eT0gKENfU0laRSsxKSAqCi0JCQkgKiA1MTJLIEJ5dGUgPSAoQ19TSVpFKzEpSyBTZWN0b3IsMUsgPSAxMDI0IEJ5dGVzICovCi0JCQlzZF9jYXJkLT5jYXBhY2l0eSA9ICh0b3RhbF9zZWN0b3IgKyAxKSA8PCAxMDsKLQkJfQotCX0KLQotCS8qIFdlIG5lZWQgY2hlY2sgV3JpdGUtUHJvdGVjdGVkIFN0YXR1cyBieSBGaWVsZCBQRVJNIFdQIG9yIFRFTVAgV1AgKi8KLQlpZiAoY2hlY2tfd3ApIHsKLQkJaWYgKHJzcFsxNV0gJiAweDMwKQotCQkJY2hpcC0+Y2FyZF93cCB8PSBTRF9DQVJEOwotCQlSVFM1MVhfREVCVUdQKCJDU0QgV1AgU3RhdHVzOiAweCV4XG4iLCByc3BbMTVdKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2Rfc2V0X3NhbXBsZV9wdXNoX3RpbWluZyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlpZiAoQ0hLX1NEX1NEUjEwNChzZF9jYXJkKSB8fCBDSEtfU0RfU0RSNTAoc2RfY2FyZCkpIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwKLQkJCSAgICAgICAweDBDIHwgU0RfQVNZTkNfRklGT19SU1QsCi0JCQkgICAgICAgU0RfMzBfTU9ERSB8IFNEX0FTWU5DX0ZJRk9fUlNUKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9DTEtfU09VUkNFLCAweEZGLAotCQkJICAgICAgIENSQ19WQVJfQ0xLMCB8IFNEMzBfRklYX0NMSyB8IFNBTVBMRV9WQVJfQ0xLMSk7Ci0JfSBlbHNlIGlmIChDSEtfU0RfRERSNTAoc2RfY2FyZCkgfHwgQ0hLX01NQ19ERFI1MihzZF9jYXJkKSkgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcxLAotCQkJICAgICAgIDB4MEMgfCBTRF9BU1lOQ19GSUZPX1JTVCwKLQkJCSAgICAgICBTRF9ERFJfTU9ERSB8IFNEX0FTWU5DX0ZJRk9fUlNUKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9DTEtfU09VUkNFLCAweEZGLAotCQkJICAgICAgIENSQ19WQVJfQ0xLMCB8IFNEMzBfRklYX0NMSyB8IFNBTVBMRV9WQVJfQ0xLMSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1BVU0hfUE9JTlRfQ1RMLAotCQkJICAgICAgIEREUl9WQVJfVFhfQ01EX0RBVCwgRERSX1ZBUl9UWF9DTURfREFUKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfU0FNUExFX1BPSU5UX0NUTCwKLQkJCSAgICAgICBERFJfVkFSX1JYX0RBVCB8IEREUl9WQVJfUlhfQ01ELAotCQkJICAgICAgIEREUl9WQVJfUlhfREFUIHwgRERSX1ZBUl9SWF9DTUQpOwotCX0gZWxzZSB7Ci0JCXU4IHZhbCA9IDA7Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwgMHgwQywgU0RfMjBfTU9ERSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfQ0xLX1NPVVJDRSwgMHhGRiwKLQkJCSAgICAgICBDUkNfRklYX0NMSyB8IFNEMzBfVkFSX0NMSzAgfCBTQU1QTEVfVkFSX0NMSzEpOwotCi0JCWlmICgoY2hpcC0+b3B0aW9uLnNkX2N0bCAmIFNEX1BVU0hfUE9JTlRfQ1RMX01BU0spID09Ci0JCSAgICBTRF9QVVNIX1BPSU5UX0FVVE8pIHsKLQkJCXZhbCA9IFNEMjBfVFhfTkVHX0VER0U7Ci0JCX0gZWxzZSBpZiAoKGNoaXAtPm9wdGlvbi5zZF9jdGwgJiBTRF9QVVNIX1BPSU5UX0NUTF9NQVNLKSA9PQotCQkJICAgU0RfUFVTSF9QT0lOVF9ERUxBWSkgewotCQkJdmFsID0gU0QyMF9UWF8xNF9BSEVBRDsKLQkJfSBlbHNlIHsKLQkJCXZhbCA9IFNEMjBfVFhfTkVHX0VER0U7Ci0JCX0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfUFVTSF9QT0lOVF9DVEwsCi0JCQkgICAgICAgU0QyMF9UWF9TRUxfTUFTSywgdmFsKTsKLQotCQlpZiAoKGNoaXAtPm9wdGlvbi5zZF9jdGwgJiBTRF9TQU1QTEVfUE9JTlRfQ1RMX01BU0spID09Ci0JCSAgICBTRF9TQU1QTEVfUE9JTlRfQVVUTykgewotCQkJaWYgKGNoaXAtPmFzaWNfY29kZSkgewotCQkJCWlmIChDSEtfU0RfSFMoc2RfY2FyZCkgfHwgQ0hLX01NQ181Mk0oc2RfY2FyZCkpCi0JCQkJCXZhbCA9IFNEMjBfUlhfMTRfREVMQVk7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSBTRDIwX1JYX1BPU19FREdFOwotCQkJfSBlbHNlIHsKLQkJCQl2YWwgPSBTRDIwX1JYXzE0X0RFTEFZOwotCQkJfQotCQl9IGVsc2UgaWYgKChjaGlwLT5vcHRpb24uc2RfY3RsICYgU0RfU0FNUExFX1BPSU5UX0NUTF9NQVNLKSA9PQotCQkJICAgU0RfU0FNUExFX1BPSU5UX0RFTEFZKSB7Ci0JCQl2YWwgPSBTRDIwX1JYXzE0X0RFTEFZOwotCQl9IGVsc2UgewotCQkJdmFsID0gU0QyMF9SWF9QT1NfRURHRTsKLQkJfQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9TQU1QTEVfUE9JTlRfQ1RMLAotCQkJICAgICAgIFNEMjBfUlhfU0VMX01BU0ssIHZhbCk7Ci0JfQotCi0JaWYgKENIS19NTUNfRERSNTIoc2RfY2FyZCkgJiYgQ0hLX01NQ184QklUKHNkX2NhcmQpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfRE1BMV9DVEwsCi0JCQkgICAgICAgRVhURU5EX0RNQTFfQVNZTkNfU0lHTkFMLCAwKTsKLQl9Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBzZF9jaG9vc2VfcHJvcGVyX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0KLQlpZiAoQ0hLX1NEX1NEUjEwNChzZF9jYXJkKSkgewotCQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSBjaGlwLT5vcHRpb24uYXNpY19zZF9zZHIxMDRfY2xrOwotCQllbHNlCi0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IGNoaXAtPm9wdGlvbi5mcGdhX3NkX3NkcjEwNF9jbGs7Ci0JfSBlbHNlIGlmIChDSEtfU0RfRERSNTAoc2RfY2FyZCkpIHsKLQkJaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gY2hpcC0+b3B0aW9uLmFzaWNfc2RfZGRyNTBfY2xrOwotCQllbHNlCi0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IGNoaXAtPm9wdGlvbi5mcGdhX3NkX2RkcjUwX2NsazsKLQl9IGVsc2UgaWYgKENIS19TRF9TRFI1MChzZF9jYXJkKSkgewotCQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSBjaGlwLT5vcHRpb24uYXNpY19zZF9zZHI1MF9jbGs7Ci0JCWVsc2UKLQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gY2hpcC0+b3B0aW9uLmZwZ2Ffc2Rfc2RyNTBfY2xrOwotCX0gZWxzZSBpZiAoQ0hLX1NEX0hTKHNkX2NhcmQpKSB7Ci0JCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IGNoaXAtPm9wdGlvbi5hc2ljX3NkX2hzX2NsazsKLQkJZWxzZQotCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSBjaGlwLT5vcHRpb24uZnBnYV9zZF9oc19jbGs7Ci0JfSBlbHNlIGlmIChDSEtfTU1DXzUyTShzZF9jYXJkKSB8fCBDSEtfTU1DX0REUjUyKHNkX2NhcmQpKSB7Ci0JCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IGNoaXAtPm9wdGlvbi5hc2ljX21tY181Mm1fY2xrOwotCQllbHNlCi0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IGNoaXAtPm9wdGlvbi5mcGdhX21tY181Mm1fY2xrOwotCX0gZWxzZSBpZiAoQ0hLX01NQ18yNk0oc2RfY2FyZCkpIHsKLQkJaWYgKGNoaXAtPmFzaWNfY29kZSkgewotCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSA0NjsKLQkJCVJUUzUxWF9ERUJVR1AoIlNldCBNTUMgY2xvY2sgdG8gMjIuNU1IelxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IENMS181MDsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBzZF9zZXRfaW5pdF9wYXJhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHNkX3NldF9zYW1wbGVfcHVzaF90aW1pbmcoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlzZF9jaG9vc2VfcHJvcGVyX2Nsb2NrKGNoaXApOwotCi0JcmV0dmFsID0gc3dpdGNoX2Nsb2NrKGNoaXAsIHNkX2NhcmQtPnNkX2Nsb2NrKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9zZF9zZWxlY3RfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBzZWxlY3QpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggY21kX2lkeCwgY21kX3R5cGU7Ci0JdTMyIGFkZHI7Ci0KLQlpZiAoc2VsZWN0KSB7Ci0JCWNtZF9pZHggPSBTRUxFQ1RfQ0FSRDsKLQkJY21kX3R5cGUgPSBTRF9SU1BfVFlQRV9SMTsKLQkJYWRkciA9IHNkX2NhcmQtPnNkX2FkZHI7Ci0JfSBlbHNlIHsKLQkJY21kX2lkeCA9IERFU0VMRUNUX0NBUkQ7Ci0JCWNtZF90eXBlID0gU0RfUlNQX1RZUEVfUjA7Ci0JCWFkZHIgPSAwOwotCX0KLQotCXJldHZhbCA9IHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgY21kX2lkeCwgYWRkciwgY21kX3R5cGUsIE5VTEwsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX3dhaXRfY3VycmVudHN0YXRlX2RhdGFyZWFkeShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHN0YXRlY2hrLAotCQkJCSAgIHU4IHJkeWNoaywgdTE2IHBvbGxpbmdjbnQpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggcnNwWzVdOwotCXUxNiBpOwotCi0JZm9yIChpID0gMDsgaSA8IHBvbGxpbmdjbnQ7IGkrKykgewotCi0JCXJldHZhbCA9Ci0JCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQlTRF9SU1BfVFlQRV9SMSwgcnNwLCA1KTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaWYgKCgocnNwWzNdICYgMHgxRSkgPT0gc3RhdGVjaGspCi0JCQkgICAgJiYgKChyc3BbM10gJiAweDAxKSA9PSByZHljaGspKSB7Ci0JCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQkJfQotCQl9IGVsc2UgewotCQkJcnRzNTF4X2NsZWFyX3NkX2Vycm9yKGNoaXApOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCX0KLQotCXJldHVybiBTVEFUVVNfVElNRURPVVQ7Ci19Ci0KLXN0YXRpYyBpbnQgc2Rfdm9sdGFnZV9zd2l0Y2goc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0JdTggc3RhdDsKLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQlVTX1NUQVQsCi0JCQkgU0RfQ0xLX1RPR0dMRV9FTiB8IFNEX0NMS19GT1JDRV9TVE9QLAotCQkJIFNEX0NMS19UT0dHTEVfRU4pOwotCi0JcmV0dmFsID0KLQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBWT0xUQUdFX1NXSVRDSCwgMCwgU0RfUlNQX1RZUEVfUjEsIE5VTEwsCi0JCQkJMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgU0RfQlVTX1NUQVQsICZzdGF0KTsKLQlpZiAoc3RhdCAmIChTRF9DTURfU1RBVFVTIHwgU0RfREFUM19TVEFUVVMgfCBTRF9EQVQyX1NUQVRVUyB8Ci0JCSAgICBTRF9EQVQxX1NUQVRVUyB8IFNEX0RBVDBfU1RBVFVTKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CVVNfU1RBVCwgMHhGRiwKLQkJICAgICAgIFNEX0NMS19GT1JDRV9TVE9QKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9QQURfQ1RMLCBTRF9JT19VU0lOR18xVjgsCi0JCSAgICAgICBTRF9JT19VU0lOR18xVjgpOwotCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIExET19QT1dFUl9DRkcsCi0JCQkgICAgICAgVFVORV9TRDE4X01BU0ssIFRVTkVfU0QxOF8xVjgpOwotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQl3YWl0X3RpbWVvdXQoY2hpcC0+b3B0aW9uLkQzMzE4X29mZl9kZWxheSk7Ci0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFNEX0JVU19TVEFULCAweEZGLCBTRF9DTEtfVE9HR0xFX0VOKTsKLQl3YWl0X3RpbWVvdXQoMTApOwotCi0JUlRTNTFYX1JFQURfUkVHKGNoaXAsIFNEX0JVU19TVEFULCAmc3RhdCk7Ci0JaWYgKChzdGF0ICYgKFNEX0NNRF9TVEFUVVMgfCBTRF9EQVQzX1NUQVRVUyB8IFNEX0RBVDJfU1RBVFVTIHwKLQkJICAgICBTRF9EQVQxX1NUQVRVUyB8IFNEX0RBVDBfU1RBVFVTKSkgIT0KLQkgICAgKFNEX0NNRF9TVEFUVVMgfCBTRF9EQVQzX1NUQVRVUyB8IFNEX0RBVDJfU1RBVFVTIHwKLQkgICAgIFNEX0RBVDFfU1RBVFVTIHwgU0RfREFUMF9TVEFUVVMpKSB7Ci0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQlVTX1NUQVQsIDB4RkYsCi0JCQkgICAgICAgU0RfQ0xLX0ZPUkNFX1NUT1ApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0NMS19FTiwgMHhGRiwgMCk7Ci0JCXJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQlVTX1NUQVQsCi0JCQkgU0RfQ0xLX1RPR0dMRV9FTiB8IFNEX0NMS19GT1JDRV9TVE9QLCAwKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzZF9jaGFuZ2VfcGhhc2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBzYW1wbGVfcG9pbnQsCi0JCQkgICB1OCB0dW5lX2RpcikKLXsKLQl1MTYgU0RfVlBfQ1RMLCBTRF9EQ01QU19DVEw7Ci0JdTggdmFsOwotCWludCByZXR2YWw7Ci0KLQlSVFM1MVhfREVCVUdQKCJzZF9jaGFuZ2VfcGhhc2UgKHNhbXBsZV9wb2ludCA9ICVkLCB0dW5lX2RpciA9ICVkKVxuIiwKLQkJICAgICAgIHNhbXBsZV9wb2ludCwgdHVuZV9kaXIpOwotCi0JaWYgKHR1bmVfZGlyID09IFRVTkVfUlgpIHsKLQkJU0RfVlBfQ1RMID0gU0RfVlBDTEsxX0NUTDsKLQkJU0RfRENNUFNfQ1RMID0gU0RfRENNUFMxX0NUTDsKLQl9IGVsc2UgewotCQlTRF9WUF9DVEwgPSBTRF9WUENMSzBfQ1RMOwotCQlTRF9EQ01QU19DVEwgPSBTRF9EQ01QUzBfQ1RMOwotCX0KLQotCWlmIChjaGlwLT5hc2ljX2NvZGUpIHsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDTEtfRElWLCBDTEtfQ0hBTkdFLCBDTEtfQ0hBTkdFKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBTRF9WUF9DVEwsIDB4MUYsIHNhbXBsZV9wb2ludCk7Ci0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfVlBDTEswX0NUTCwgUEhBU0VfTk9UX1JFU0VULCAwKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBTRF9WUENMSzBfQ1RMLCBQSEFTRV9OT1RfUkVTRVQsCi0JCQkJIFBIQVNFX05PVF9SRVNFVCk7Ci0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgQ0xLX0RJViwgQ0xLX0NIQU5HRSwgMCk7Ci0JfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfUlRTNTEzOV9ERUJVRwotCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgU0RfVlBfQ1RMLCAmdmFsKTsKLQkJUlRTNTFYX0RFQlVHUCgiU0RfVlBfQ1RMOiAweCV4XG4iLCB2YWwpOwotCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgU0RfRENNUFNfQ1RMLCAmdmFsKTsKLQkJUlRTNTFYX0RFQlVHUCgiU0RfRENNUFNfQ1RMOiAweCV4XG4iLCB2YWwpOwotI2VuZGlmCi0KLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDTEtfRElWLCBDTEtfQ0hBTkdFLCBDTEtfQ0hBTkdFKTsKLQkJdWRlbGF5KDEwMCk7Ci0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfVlBfQ1RMLCAweEZGLAotCQkJCSBQSEFTRV9OT1RfUkVTRVQgfCBzYW1wbGVfcG9pbnQpOwotCQl1ZGVsYXkoMjAwKTsKLQotCQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0RDTVBTX0NUTCwgRENNUFNfQ0hBTkdFLAotCQkJICAgICAgIERDTVBTX0NIQU5HRSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFNEX0RDTVBTX0NUTCwKLQkJCSAgICAgICBEQ01QU19DSEFOR0VfRE9ORSwgRENNUFNfQ0hBTkdFX0RPTkUpOwotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiwgMTAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgRmFpbCk7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgNTAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgRmFpbCk7Ci0KLQkJdmFsID0gY2hpcC0+cnNwX2J1ZlswXTsKLQkJaWYgKHZhbCAmIERDTVBTX0VSUk9SKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBGYWlsKTsKLQkJaWYgKCh2YWwgJiBEQ01QU19DVVJSRU5UX1BIQVNFKSAhPSBzYW1wbGVfcG9pbnQpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIEZhaWwpOwotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFNEX0RDTVBTX0NUTCwgRENNUFNfQ0hBTkdFLCAwKTsKLQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDTEtfRElWLCBDTEtfQ0hBTkdFLCAwKTsKLQkJdWRlbGF5KDEwMCk7Ci0JfQotCi0JUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBTRF9DRkcxLCBTRF9BU1lOQ19GSUZPX1JTVCwgMCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0KLUZhaWw6Ci0jaWZkZWYgQ09ORklHX1JUUzUxMzlfREVCVUcKLQlydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfVlBfQ1RMLCAmdmFsKTsKLQlSVFM1MVhfREVCVUdQKCJTRF9WUF9DVEw6IDB4JXhcbiIsIHZhbCk7Ci0JcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX0RDTVBTX0NUTCwgJnZhbCk7Ci0JUlRTNTFYX0RFQlVHUCgiU0RfRENNUFNfQ1RMOiAweCV4XG4iLCB2YWwpOwotI2VuZGlmCi0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFNEX0RDTVBTX0NUTCwgRENNUFNfQ0hBTkdFLCAwKTsKLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFNEX1ZQX0NUTCwgUEhBU0VfQ0hBTkdFLCAwKTsKLQl3YWl0X3RpbWVvdXQoMTApOwotCi0JcmV0dXJuIFNUQVRVU19GQUlMOwotfQotCi1zdGF0aWMgaW50IHNkX2NoZWNrX3NwZWMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBidXNfd2lkdGgpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggY21kWzVdLCBidWZbOF07Ci0KLQlyZXR2YWwgPQotCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIEFQUF9DTUQsIHNkX2NhcmQtPnNkX2FkZHIsIFNEX1JTUF9UWVBFX1IxLAotCQkJCU5VTEwsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQljbWRbMF0gPSAweDQwIHwgU0VORF9TQ1I7Ci0JY21kWzFdID0gMDsKLQljbWRbMl0gPSAwOwotCWNtZFszXSA9IDA7Ci0JY21kWzRdID0gMDsKLQotCXJldHZhbCA9Ci0JICAgIHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9OT1JNQUxfUkVBRCwgY21kLCA1LCA4LCAxLCBidXNfd2lkdGgsIGJ1ZiwKLQkJCSA4LCAyNTApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX3NkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQltZW1jcHkoc2RfY2FyZC0+cmF3X3NjciwgYnVmLCA4KTsKLQotCWlmICgoYnVmWzBdICYgMHgwRikgPT0gMCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzZF9xdWVyeV9zd2l0Y2hfcmVzdWx0KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggZnVuY19ncm91cCwKLQkJCQkgIHU4IGZ1bmNfdG9fc3dpdGNoLCB1OCAqYnVmLCBpbnQgYnVmX2xlbikKLXsKLQl1OCBzdXBwb3J0X21hc2sgPSAwLCBxdWVyeV9zd2l0Y2ggPSAwLCBzd2l0Y2hfYnVzeSA9IDA7Ci0JaW50IHN1cHBvcnRfb2Zmc2V0ID0gMCwgcXVlcnlfc3dpdGNoX29mZnNldCA9IDAsIGNoZWNrX2J1c3lfb2Zmc2V0ID0gMDsKLQotCWlmIChmdW5jX2dyb3VwID09IFNEX0ZVTkNfR1JPVVBfMSkgewotCQlzdXBwb3J0X29mZnNldCA9IEZVTkNUSU9OX0dST1VQMV9TVVBQT1JUX09GRlNFVDsKLQkJcXVlcnlfc3dpdGNoX29mZnNldCA9IEZVTkNUSU9OX0dST1VQMV9RVUVSWV9TV0lUQ0hfT0ZGU0VUOwotCQljaGVja19idXN5X29mZnNldCA9IEZVTkNUSU9OX0dST1VQMV9DSEVDS19CVVNZX09GRlNFVDsKLQotCQlzd2l0Y2ggKGZ1bmNfdG9fc3dpdGNoKSB7Ci0JCWNhc2UgSFNfU1VQUE9SVDoKLQkJCXN1cHBvcnRfbWFzayA9IEhTX1NVUFBPUlRfTUFTSzsKLQkJCXF1ZXJ5X3N3aXRjaCA9IEhTX1FVRVJZX1NXSVRDSF9PSzsKLQkJCXN3aXRjaF9idXN5ID0gSFNfU1dJVENIX0JVU1k7Ci0JCQlicmVhazsKLQotCQljYXNlIFNEUjUwX1NVUFBPUlQ6Ci0JCQlzdXBwb3J0X21hc2sgPSBTRFI1MF9TVVBQT1JUX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBTRFI1MF9RVUVSWV9TV0lUQ0hfT0s7Ci0JCQlzd2l0Y2hfYnVzeSA9IFNEUjUwX1NXSVRDSF9CVVNZOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTRFIxMDRfU1VQUE9SVDoKLQkJCXN1cHBvcnRfbWFzayA9IFNEUjEwNF9TVVBQT1JUX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBTRFIxMDRfUVVFUllfU1dJVENIX09LOwotCQkJc3dpdGNoX2J1c3kgPSBTRFIxMDRfU1dJVENIX0JVU1k7Ci0JCQlicmVhazsKLQotCQljYXNlIEREUjUwX1NVUFBPUlQ6Ci0JCQlzdXBwb3J0X21hc2sgPSBERFI1MF9TVVBQT1JUX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBERFI1MF9RVUVSWV9TV0lUQ0hfT0s7Ci0JCQlzd2l0Y2hfYnVzeSA9IEREUjUwX1NXSVRDSF9CVVNZOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9IGVsc2UgaWYgKGZ1bmNfZ3JvdXAgPT0gU0RfRlVOQ19HUk9VUF8zKSB7Ci0JCXN1cHBvcnRfb2Zmc2V0ID0gRlVOQ1RJT05fR1JPVVAzX1NVUFBPUlRfT0ZGU0VUOwotCQlxdWVyeV9zd2l0Y2hfb2Zmc2V0ID0gRlVOQ1RJT05fR1JPVVAzX1FVRVJZX1NXSVRDSF9PRkZTRVQ7Ci0JCWNoZWNrX2J1c3lfb2Zmc2V0ID0gRlVOQ1RJT05fR1JPVVAzX0NIRUNLX0JVU1lfT0ZGU0VUOwotCi0JCXN3aXRjaCAoZnVuY190b19zd2l0Y2gpIHsKLQkJY2FzZSBEUklWSU5HX1RZUEVfQToKLQkJCXN1cHBvcnRfbWFzayA9IERSSVZJTkdfVFlQRV9BX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBUWVBFX0FfUVVFUllfU1dJVENIX09LOwotCQkJc3dpdGNoX2J1c3kgPSBUWVBFX0FfU1dJVENIX0JVU1k7Ci0JCQlicmVhazsKLQotCQljYXNlIERSSVZJTkdfVFlQRV9DOgotCQkJc3VwcG9ydF9tYXNrID0gRFJJVklOR19UWVBFX0NfTUFTSzsKLQkJCXF1ZXJ5X3N3aXRjaCA9IFRZUEVfQ19RVUVSWV9TV0lUQ0hfT0s7Ci0JCQlzd2l0Y2hfYnVzeSA9IFRZUEVfQ19TV0lUQ0hfQlVTWTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRFJJVklOR19UWVBFX0Q6Ci0JCQlzdXBwb3J0X21hc2sgPSBEUklWSU5HX1RZUEVfRF9NQVNLOwotCQkJcXVlcnlfc3dpdGNoID0gVFlQRV9EX1FVRVJZX1NXSVRDSF9PSzsKLQkJCXN3aXRjaF9idXN5ID0gVFlQRV9EX1NXSVRDSF9CVVNZOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9IGVsc2UgaWYgKGZ1bmNfZ3JvdXAgPT0gU0RfRlVOQ19HUk9VUF80KSB7Ci0JCXN1cHBvcnRfb2Zmc2V0ID0gRlVOQ1RJT05fR1JPVVA0X1NVUFBPUlRfT0ZGU0VUOwotCQlxdWVyeV9zd2l0Y2hfb2Zmc2V0ID0gRlVOQ1RJT05fR1JPVVA0X1FVRVJZX1NXSVRDSF9PRkZTRVQ7Ci0JCWNoZWNrX2J1c3lfb2Zmc2V0ID0gRlVOQ1RJT05fR1JPVVA0X0NIRUNLX0JVU1lfT0ZGU0VUOwotCi0JCXN3aXRjaCAoZnVuY190b19zd2l0Y2gpIHsKLQkJY2FzZSBDVVJSRU5UX0xJTUlUXzQwMDoKLQkJCXN1cHBvcnRfbWFzayA9IENVUlJFTlRfTElNSVRfNDAwX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBDVVJSRU5UX0xJTUlUXzQwMF9RVUVSWV9TV0lUQ0hfT0s7Ci0JCQlzd2l0Y2hfYnVzeSA9IENVUlJFTlRfTElNSVRfNDAwX1NXSVRDSF9CVVNZOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDVVJSRU5UX0xJTUlUXzYwMDoKLQkJCXN1cHBvcnRfbWFzayA9IENVUlJFTlRfTElNSVRfNjAwX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBDVVJSRU5UX0xJTUlUXzYwMF9RVUVSWV9TV0lUQ0hfT0s7Ci0JCQlzd2l0Y2hfYnVzeSA9IENVUlJFTlRfTElNSVRfNjAwX1NXSVRDSF9CVVNZOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDVVJSRU5UX0xJTUlUXzgwMDoKLQkJCXN1cHBvcnRfbWFzayA9IENVUlJFTlRfTElNSVRfODAwX01BU0s7Ci0JCQlxdWVyeV9zd2l0Y2ggPSBDVVJSRU5UX0xJTUlUXzgwMF9RVUVSWV9TV0lUQ0hfT0s7Ci0JCQlzd2l0Y2hfYnVzeSA9IENVUlJFTlRfTElNSVRfODAwX1NXSVRDSF9CVVNZOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQl9IGVsc2UgewotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmIChmdW5jX2dyb3VwID09IFNEX0ZVTkNfR1JPVVBfNCkKLQkJYnVmW3F1ZXJ5X3N3aXRjaF9vZmZzZXRdID0KLQkJICAgIChidWZbcXVlcnlfc3dpdGNoX29mZnNldF0gJiAweGYwKSA+PiA0OwotCWlmICghKGJ1ZltzdXBwb3J0X29mZnNldF0gJiBzdXBwb3J0X21hc2spIHx8Ci0JICAgICgoYnVmW3F1ZXJ5X3N3aXRjaF9vZmZzZXRdICYgMHgwRikgIT0gcXVlcnlfc3dpdGNoKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCWlmICgoYnVmW0RBVEFfU1RSVUNUVVJFX1ZFUl9PRkZTRVRdID09IDB4MDEpICYmCi0JICAgICgoYnVmW2NoZWNrX2J1c3lfb2Zmc2V0XSAmIHN3aXRjaF9idXN5KSA9PSBzd2l0Y2hfYnVzeSkpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfY2hlY2tfc3dpdGNoX21vZGUoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBtb2RlLAotCQkJCXU4IGZ1bmNfZ3JvdXAsIHU4IGZ1bmNfdG9fc3dpdGNoLCB1OCBidXNfd2lkdGgpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggY21kWzVdLCBidWZbNjRdOwotCi0JUlRTNTFYX0RFQlVHUCgic2RfY2hlY2tfc3dpdGNoX21vZGUgKG1vZGUgPSAlZCwgZnVuY19ncm91cCA9ICVkLCIKLQkJImZ1bmNfdG9fc3dpdGNoID0gJWQpXG4iLCBtb2RlLCBmdW5jX2dyb3VwLCBmdW5jX3RvX3N3aXRjaCk7Ci0KLQljbWRbMF0gPSAweDQwIHwgU1dJVENIOwotCWNtZFsxXSA9IG1vZGU7Ci0KLQlpZiAoZnVuY19ncm91cCA9PSBTRF9GVU5DX0dST1VQXzEpIHsKLQkJY21kWzJdID0gMHhGRjsKLQkJY21kWzNdID0gMHhGRjsKLQkJY21kWzRdID0gMHhGMCArIGZ1bmNfdG9fc3dpdGNoOwotCX0gZWxzZSBpZiAoZnVuY19ncm91cCA9PSBTRF9GVU5DX0dST1VQXzMpIHsKLQkJY21kWzJdID0gMHhGRjsKLQkJY21kWzNdID0gMHhGMCArIGZ1bmNfdG9fc3dpdGNoOwotCQljbWRbNF0gPSAweEZGOwotCX0gZWxzZSBpZiAoZnVuY19ncm91cCA9PSBTRF9GVU5DX0dST1VQXzQpIHsKLQkJY21kWzJdID0gMHhGRjsKLQkJY21kWzNdID0gMHgwRiArIChmdW5jX3RvX3N3aXRjaCA8PCA0KTsKLQkJY21kWzRdID0gMHhGRjsKLQl9IGVsc2UgewotCQljbWRbMV0gPSBTRF9DSEVDS19NT0RFOwotCQljbWRbMl0gPSAweEZGOwotCQljbWRbM10gPSAweEZGOwotCQljbWRbNF0gPSAweEZGOwotCX0KLQotCXJldHZhbCA9Ci0JICAgIHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9OT1JNQUxfUkVBRCwgY21kLCA1LCA2NCwgMSwgYnVzX3dpZHRoLCBidWYsCi0JCQkgNjQsIDI1MCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfY2xlYXJfc2RfZXJyb3IoY2hpcCk7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCWlmIChmdW5jX2dyb3VwID09IE5PX0FSR1VNRU5UKSB7Ci0JCXNkX2NhcmQtPmZ1bmNfZ3JvdXAxX21hc2sgPSBidWZbMHgwRF07Ci0JCXNkX2NhcmQtPmZ1bmNfZ3JvdXAyX21hc2sgPSBidWZbMHgwQl07Ci0JCXNkX2NhcmQtPmZ1bmNfZ3JvdXAzX21hc2sgPSBidWZbMHgwOV07Ci0JCXNkX2NhcmQtPmZ1bmNfZ3JvdXA0X21hc2sgPSBidWZbMHgwN107Ci0KLQkJUlRTNTFYX0RFQlVHUCgiZnVuY19ncm91cDFfbWFzayA9IDB4JTAyeFxuIiwgYnVmWzB4MERdKTsKLQkJUlRTNTFYX0RFQlVHUCgiZnVuY19ncm91cDJfbWFzayA9IDB4JTAyeFxuIiwgYnVmWzB4MEJdKTsKLQkJUlRTNTFYX0RFQlVHUCgiZnVuY19ncm91cDNfbWFzayA9IDB4JTAyeFxuIiwgYnVmWzB4MDldKTsKLQkJUlRTNTFYX0RFQlVHUCgiZnVuY19ncm91cDRfbWFzayA9IDB4JTAyeFxuIiwgYnVmWzB4MDddKTsKLQl9IGVsc2UgewotCQlpZiAoKGJ1ZlswXSA9PSAwKSAmJiAoYnVmWzFdID09IDApKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJcmV0dmFsID0KLQkJICAgIHNkX3F1ZXJ5X3N3aXRjaF9yZXN1bHQoY2hpcCwgZnVuY19ncm91cCwgZnVuY190b19zd2l0Y2gsCi0JCQkJCSAgIGJ1ZiwgNjQpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX2NoZWNrX3N3aXRjaChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsCi0JCQkgICB1OCBmdW5jX2dyb3VwLCB1OCBmdW5jX3RvX3N3aXRjaCwgdTggYnVzX3dpZHRoKQotewotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0JaW50IHN3aXRjaF9nb29kID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBTRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCXNkX3NldF9yZXNldF9mYWlsKGNoaXAsIFNEX1JFU0VUX0ZBSUwpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCXJldHZhbCA9IHNkX2NoZWNrX3N3aXRjaF9tb2RlKGNoaXAsIFNEX0NIRUNLX01PREUsIGZ1bmNfZ3JvdXAsCi0JCQkJCSAgICAgIGZ1bmNfdG9fc3dpdGNoLCBidXNfd2lkdGgpOwotCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQl1OCBzdGF0OwotCi0JCQlyZXR2YWwgPSBzZF9jaGVja19zd2l0Y2hfbW9kZShjaGlwLCBTRF9TV0lUQ0hfTU9ERSwKLQkJCQkJZnVuY19ncm91cCwgZnVuY190b19zd2l0Y2gsIGJ1c193aWR0aCk7Ci0JCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJc3dpdGNoX2dvb2QgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgU0RfU1RBVDEsICZzdGF0KTsKLQotCQkJaWYgKHN0YXQgJiBTRF9DUkMxNl9FUlIpIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJTRCBDUkMxNiBlcnJvciB3aGVuIHN3aXRjaGluZyIKLQkJCQkJCQkibW9kZVxuIik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCi0JCXdhaXRfdGltZW91dCgyMCk7Ci0JfQotCi0JaWYgKCFzd2l0Y2hfZ29vZCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzZF9zd2l0Y2hfZnVuY3Rpb24oc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBidXNfd2lkdGgpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0JdTggZnVuY190b19zd2l0Y2ggPSAwOwotCi0JLyogR2V0IHN1cHBvcnRlZCBmdW5jdGlvbnMgKi8KLQlyZXR2YWwgPSBzZF9jaGVja19zd2l0Y2hfbW9kZShjaGlwLCBTRF9DSEVDS19NT0RFLAotCQkJCSAgICAgIE5PX0FSR1VNRU5ULCBOT19BUkdVTUVOVCwgYnVzX3dpZHRoKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXNkX2NhcmQtPmZ1bmNfZ3JvdXAxX21hc2sgJj0gfihzZF9jYXJkLT5zZF9zd2l0Y2hfZmFpbCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXN3aXRjaCAoKHU4KSAoY2hpcC0+b3B0aW9uLnNkX3NwZWVkX3ByaW9yID4+IChpICogOCkpKSB7Ci0JCWNhc2UgRERSNTBfU1VQUE9SVDoKLQkJCWlmICgoc2RfY2FyZC0+ZnVuY19ncm91cDFfbWFzayAmIEREUjUwX1NVUFBPUlRfTUFTSykKLQkJCSAgICAmJiAoQ0hFQ0tfVUhTNTAoY2hpcCkpKQotCQkJCWZ1bmNfdG9fc3dpdGNoID0gRERSNTBfU1VQUE9SVDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0RSNTBfU1VQUE9SVDoKLQkJCWlmICgoc2RfY2FyZC0+ZnVuY19ncm91cDFfbWFzayAmIFNEUjUwX1NVUFBPUlRfTUFTSykKLQkJCSAgICAmJiAoQ0hFQ0tfVUhTNTAoY2hpcCkpKQotCQkJCWZ1bmNfdG9fc3dpdGNoID0gU0RSNTBfU1VQUE9SVDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSFNfU1VQUE9SVDoKLQkJCWlmIChzZF9jYXJkLT5mdW5jX2dyb3VwMV9tYXNrICYgSFNfU1VQUE9SVF9NQVNLKQotCQkJCWZ1bmNfdG9fc3dpdGNoID0gSFNfU1VQUE9SVDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChmdW5jX3RvX3N3aXRjaCkKLQkJCWJyZWFrOwotCX0KLQlSVFM1MVhfREVCVUdQKCJTRF9GVU5DX0dST1VQXzE6IGZ1bmNfdG9fc3dpdGNoID0gMHglMDJ4IiwKLQkJICAgICAgIGZ1bmNfdG9fc3dpdGNoKTsKLQotCWlmIChmdW5jX3RvX3N3aXRjaCkgewotCQlyZXR2YWwgPQotCQkgICAgc2RfY2hlY2tfc3dpdGNoKGNoaXAsIFNEX0ZVTkNfR1JPVVBfMSwgZnVuY190b19zd2l0Y2gsCi0JCQkJICAgIGJ1c193aWR0aCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmIChmdW5jX3RvX3N3aXRjaCA9PSBTRFIxMDRfU1VQUE9SVCkKLQkJCQlzZF9jYXJkLT5zZF9zd2l0Y2hfZmFpbCA9IFNEUjEwNF9TVVBQT1JUX01BU0s7Ci0JCQllbHNlIGlmIChmdW5jX3RvX3N3aXRjaCA9PSBERFI1MF9TVVBQT1JUKQotCQkJCXNkX2NhcmQtPnNkX3N3aXRjaF9mYWlsID0gRERSNTBfU1VQUE9SVF9NQVNLOwotCQkJZWxzZSBpZiAoZnVuY190b19zd2l0Y2ggPT0gU0RSNTBfU1VQUE9SVCkKLQkJCQlzZF9jYXJkLT5zZF9zd2l0Y2hfZmFpbCA9IFNEUjUwX1NVUFBPUlRfTUFTSzsKLQkJCWVsc2UgaWYgKGZ1bmNfdG9fc3dpdGNoID09IEhTX1NVUFBPUlQpCi0JCQkJc2RfY2FyZC0+c2Rfc3dpdGNoX2ZhaWwgPSBIU19TVVBQT1JUX01BU0s7Ci0KLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0KLQkJaWYgKGZ1bmNfdG9fc3dpdGNoID09IFNEUjEwNF9TVVBQT1JUKQotCQkJU0VUX1NEX1NEUjEwNChzZF9jYXJkKTsKLQkJZWxzZSBpZiAoZnVuY190b19zd2l0Y2ggPT0gRERSNTBfU1VQUE9SVCkKLQkJCVNFVF9TRF9ERFI1MChzZF9jYXJkKTsKLQkJZWxzZSBpZiAoZnVuY190b19zd2l0Y2ggPT0gU0RSNTBfU1VQUE9SVCkKLQkJCVNFVF9TRF9TRFI1MChzZF9jYXJkKTsKLQkJZWxzZQotCQkJU0VUX1NEX0hTKHNkX2NhcmQpOwotCX0KLQotCWlmIChDSEtfU0RfRERSNTAoc2RfY2FyZCkpCi0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQ0ZHMSwgMHgwQywgU0RfRERSX01PREUpOwotCi0JZnVuY190b19zd2l0Y2ggPSAwOwotCWlmIChzZF9jYXJkLT5mdW5jX2dyb3VwNF9tYXNrICYgQ1VSUkVOVF9MSU1JVF80MDBfTUFTSykKLQkJZnVuY190b19zd2l0Y2ggPSBDVVJSRU5UX0xJTUlUXzQwMDsKLQotCWlmIChmdW5jX3RvX3N3aXRjaCkgewotCQlSVFM1MVhfREVCVUdQKCJUcnkgdG8gc3dpdGNoIGN1cnJlbnRfbGltaXRfNDAwXG4iKTsKLQkJcmV0dmFsID0KLQkJICAgIHNkX2NoZWNrX3N3aXRjaChjaGlwLCBTRF9GVU5DX0dST1VQXzQsIGZ1bmNfdG9fc3dpdGNoLAotCQkJCSAgICBidXNfd2lkdGgpOwotCQlSVFM1MVhfREVCVUdQKCJTd2l0Y2ggY3VycmVudF9saW1pdF80MDAgc3RhdHVzOiAoJWQpXG4iLAotCQkJICAgICAgIHJldHZhbCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX3dhaXRfZGF0YV9pZGxlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsID0gU1RBVFVTX1RJTUVET1VUOwotCWludCBpOwotCXU4IHZhbCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJcmV0dmFsID0gcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX0RBVEFfU1RBVEUsICZ2YWwpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJaWYgKHZhbCAmIFNEX0RBVEFfSURMRSkgewotCQkJcmV0dmFsID0gU1RBVFVTX1NVQ0NFU1M7Ci0JCQlicmVhazsKLQkJfQotCQl1ZGVsYXkoMTAwKTsKLQl9Ci0JUlRTNTFYX0RFQlVHUCgiU0RfREFUQV9TVEFURTogMHglMDJ4XG4iLCB2YWwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBzZF9zZHJfdHVuaW5nX3J4X2NtZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHNhbXBsZV9wb2ludCkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IGNtZFs1XTsKLQotCXJldHZhbCA9IHNkX2NoYW5nZV9waGFzZShjaGlwLCBzYW1wbGVfcG9pbnQsIFRVTkVfUlgpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JY21kWzBdID0gMHg0MCB8IFNFTkRfVFVOSU5HX1BBVFRFUk47Ci0JY21kWzFdID0gMDsKLQljbWRbMl0gPSAwOwotCWNtZFszXSA9IDA7Ci0JY21kWzRdID0gMDsKLQotCXJldHZhbCA9IHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9BVVRPX1RVTklORywKLQkJCSAgICAgIGNtZCwgNSwgMHg0MCwgMSwgU0RfQlVTX1dJRFRIXzQsIE5VTEwsIDAsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkvKiBXYWl0IHRpbGwgU0QgREFUQSBJRExFICovCi0JCSh2b2lkKXNkX3dhaXRfZGF0YV9pZGxlKGNoaXApOwotCi0JCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZGRyX3R1bmluZ19yeF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBzYW1wbGVfcG9pbnQpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggY21kWzVdOwotCi0JcmV0dmFsID0gc2RfY2hhbmdlX3BoYXNlKGNoaXAsIHNhbXBsZV9wb2ludCwgVFVORV9SWCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfREVCVUdQKCJzZCBkZHIgdHVuaW5nIHJ4XG4iKTsKLQotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgQVBQX0NNRCwgc2RfY2FyZC0+c2RfYWRkciwgU0RfUlNQX1RZUEVfUjEsCi0JCQkJTlVMTCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQljbWRbMF0gPSAweDQwIHwgU0RfU1RBVFVTOwotCWNtZFsxXSA9IDA7Ci0JY21kWzJdID0gMDsKLQljbWRbM10gPSAwOwotCWNtZFs0XSA9IDA7Ci0KLQlyZXR2YWwgPSBzZF9yZWFkX2RhdGEoY2hpcCwgU0RfVE1fTk9STUFMX1JFQUQsCi0JCQkgICAgICBjbWQsIDUsIDY0LCAxLCBTRF9CVVNfV0lEVEhfNCwgTlVMTCwgMCwgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCS8qIFdhaXQgdGlsbCBTRCBEQVRBIElETEUgKi8KLQkJKHZvaWQpc2Rfd2FpdF9kYXRhX2lkbGUoY2hpcCk7Ci0KLQkJcnRzNTF4X2NsZWFyX3NkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBtbWNfZGRyX3R1bm5pbmdfcnhfY21kKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggc2FtcGxlX3BvaW50KQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsOwotCXU4IGNtZFs1XSwgYnVzX3dpZHRoOwotCi0JaWYgKENIS19NTUNfOEJJVChzZF9jYXJkKSkKLQkJYnVzX3dpZHRoID0gU0RfQlVTX1dJRFRIXzg7Ci0JZWxzZSBpZiAoQ0hLX01NQ180QklUKHNkX2NhcmQpKQotCQlidXNfd2lkdGggPSBTRF9CVVNfV0lEVEhfNDsKLQllbHNlCi0JCWJ1c193aWR0aCA9IFNEX0JVU19XSURUSF8xOwotCi0JcmV0dmFsID0gc2RfY2hhbmdlX3BoYXNlKGNoaXAsIHNhbXBsZV9wb2ludCwgVFVORV9SWCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfREVCVUdQKCJtbWMgZGRyIHR1bmluZyByeFxuIik7Ci0KLQljbWRbMF0gPSAweDQwIHwgU0VORF9FWFRfQ1NEOwotCWNtZFsxXSA9IDA7Ci0JY21kWzJdID0gMDsKLQljbWRbM10gPSAwOwotCWNtZFs0XSA9IDA7Ci0KLQlyZXR2YWwgPSBzZF9yZWFkX2RhdGEoY2hpcCwgU0RfVE1fTk9STUFMX1JFQUQsCi0JCQkgICAgICBjbWQsIDUsIDB4MjAwLCAxLCBidXNfd2lkdGgsIE5VTEwsIDAsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkvKiBXYWl0IHRpbGwgU0QgREFUQSBJRExFICovCi0JCSh2b2lkKXNkX3dhaXRfZGF0YV9pZGxlKGNoaXApOwotCi0JCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2Rfc2RyX3R1bmluZ190eF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBzYW1wbGVfcG9pbnQpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBzZF9jaGFuZ2VfcGhhc2UoY2hpcCwgc2FtcGxlX3BvaW50LCBUVU5FX1RYKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQ0ZHMywgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4sCi0JCQkgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4pOwotCi0JcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRU5EX1NUQVRVUywgc2RfY2FyZC0+c2RfYWRkciwKLQkJCQkgICAgIFNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWlmIChzZF9jaGVja19lcnJfY29kZShjaGlwLCBTRF9SU1BfVElNRU9VVCkpIHsKLQkJCS8qIFR1bm5pbmcgVFggZmFpbCAqLwotCQkJcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcihjaGlwLCBTRF9DRkczLAotCQkJCQkJICBTRF9SU1BfODBDTEtfVElNRU9VVF9FTiwgMCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JfQotCi0JUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBTRF9DRkczLCBTRF9SU1BfODBDTEtfVElNRU9VVF9FTiwgMCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZGRyX3R1bmluZ190eF9jbWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBzYW1wbGVfcG9pbnQpCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTggY21kWzVdLCBidXNfd2lkdGg7Ci0KLQlyZXR2YWwgPSBzZF9jaGFuZ2VfcGhhc2UoY2hpcCwgc2FtcGxlX3BvaW50LCBUVU5FX1RYKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmIChDSEtfU0Qoc2RfY2FyZCkpIHsKLQkJYnVzX3dpZHRoID0gU0RfQlVTX1dJRFRIXzQ7Ci0JfSBlbHNlIHsKLQkJaWYgKENIS19NTUNfOEJJVChzZF9jYXJkKSkKLQkJCWJ1c193aWR0aCA9IFNEX0JVU19XSURUSF84OwotCQllbHNlIGlmIChDSEtfTU1DXzRCSVQoc2RfY2FyZCkpCi0JCQlidXNfd2lkdGggPSBTRF9CVVNfV0lEVEhfNDsKLQkJZWxzZQotCQkJYnVzX3dpZHRoID0gU0RfQlVTX1dJRFRIXzE7Ci0JfQotCXJldHZhbCA9IHNkX3dhaXRfY3VycmVudHN0YXRlX2RhdGFyZWFkeShjaGlwLCAweDA4LCAxLCAyMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQ0ZHMywgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4sCi0JCQkgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4pOwotCi0JY21kWzBdID0gMHg0MCB8IFBST0dSQU1fQ1NEOwotCWNtZFsxXSA9IDA7Ci0JY21kWzJdID0gMDsKLQljbWRbM10gPSAwOwotCWNtZFs0XSA9IDA7Ci0KLQlyZXR2YWwgPSBzZF93cml0ZV9kYXRhKGNoaXAsIFNEX1RNX0FVVE9fV1JJVEVfMiwKLQkJCWNtZCwgNSwgMTYsIDEsIGJ1c193aWR0aCwgc2RfY2FyZC0+cmF3X2NzZCwgMTYsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfY2xlYXJfc2RfZXJyb3IoY2hpcCk7Ci0JCS8qIFR1bm5pbmcgVFggZmFpbCAqLwotCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNEX0NGRzMsCi0JCQkJCSAgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4sIDApOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQ0ZHMywgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4sIDApOwotCi0Jc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRU5EX1NUQVRVUywgc2RfY2FyZC0+c2RfYWRkciwgU0RfUlNQX1RZUEVfUjEsCi0JCQkgICAgTlVMTCwgMCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB1OCBzZF9zZWFyY2hfZmluYWxfcGhhc2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgcGhhc2VfbWFwLAotCQkJCXU4IHR1bmVfZGlyKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlzdHJ1Y3QgdGltaW5nX3BoYXNlX3BhdGggcGF0aFtNQVhfUEhBU0UgKyAxXTsKLQlpbnQgaSwgaiwgY29udF9wYXRoX2NudDsKLQlpbnQgbmV3X2Jsb2NrLCBtYXhfbGVuOwotCXU4IGZpbmFsX3BoYXNlID0gMHhGRjsKLQlpbnQgZmluYWxfcGF0aF9pZHg7Ci0KLQlpZiAocGhhc2VfbWFwID09IDB4ZmZmZikgewotCQlpZiAoQ0hLX1NEX0REUjUwKHNkX2NhcmQpKSB7Ci0JCQlpZiAodHVuZV9kaXIgPT0gVFVORV9UWCkKLQkJCQlmaW5hbF9waGFzZSA9IGNoaXAtPm9wdGlvbi5kZHI1MF90eF9waGFzZTsKLQkJCWVsc2UKLQkJCQlmaW5hbF9waGFzZSA9IGNoaXAtPm9wdGlvbi5kZHI1MF9yeF9waGFzZTsKLQkJCVJUUzUxWF9ERUJVR1AoIkREUjUwIHR1bmluZyBkaXI6JWQgYWxsIHBhc3MsIgotCQkJCQkic28gc2VsZWN0IGRlZmF1bHQgcGhhc2U6MHgleC5cbiIsCi0JCQkJCXR1bmVfZGlyLCBmaW5hbF9waGFzZSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAodHVuZV9kaXIgPT0gVFVORV9UWCkKLQkJCQlmaW5hbF9waGFzZSA9IGNoaXAtPm9wdGlvbi5zZHI1MF90eF9waGFzZTsKLQkJCWVsc2UKLQkJCQlmaW5hbF9waGFzZSA9IGNoaXAtPm9wdGlvbi5zZHI1MF9yeF9waGFzZTsKLQkJCVJUUzUxWF9ERUJVR1AoIlNEUjUwIHR1bmluZyBkaXI6JWQgYWxsIHBhc3MsIgotCQkJCQkic28gc2VsZWN0IGRlZmF1bHQgcGhhc2U6MHgleC5cbiIsCi0JCQkJCXR1bmVfZGlyLCBmaW5hbF9waGFzZSk7Ci0JCX0KLQkJZ290byBTZWFyY2hfRmluaXNoOwotCX0KLQotCWNvbnRfcGF0aF9jbnQgPSAwOwotCW5ld19ibG9jayA9IDE7Ci0JaiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9QSEFTRSArIDE7IGkrKykgewotCQlpZiAocGhhc2VfbWFwICYgKDEgPDwgaSkpIHsKLQkJCWlmIChuZXdfYmxvY2spIHsKLQkJCQluZXdfYmxvY2sgPSAwOwotCQkJCWogPSBjb250X3BhdGhfY250Kys7Ci0JCQkJcGF0aFtqXS5zdGFydCA9IGk7Ci0JCQkJcGF0aFtqXS5lbmQgPSBpOwotCQkJfSBlbHNlIHsKLQkJCQlwYXRoW2pdLmVuZCA9IGk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQluZXdfYmxvY2sgPSAxOwotCQkJaWYgKGNvbnRfcGF0aF9jbnQpIHsKLQkJCQlpbnQgaWR4ID0gY29udF9wYXRoX2NudCAtIDE7Ci0JCQkJcGF0aFtpZHhdLmxlbiA9Ci0JCQkJICAgIHBhdGhbaWR4XS5lbmQgLSBwYXRoW2lkeF0uc3RhcnQgKyAxOwotCQkJCXBhdGhbaWR4XS5taWQgPQotCQkJCSAgICBwYXRoW2lkeF0uc3RhcnQgKyBwYXRoW2lkeF0ubGVuIC8gMjsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChjb250X3BhdGhfY250ID09IDApIHsKLQkJUlRTNTFYX0RFQlVHUCgiTm8gY29udGludW91cyBwaGFzZSBwYXRoXG4iKTsKLQkJZ290byBTZWFyY2hfRmluaXNoOwotCX0gZWxzZSB7Ci0JCWludCBpZHggPSBjb250X3BhdGhfY250IC0gMTsKLQkJcGF0aFtpZHhdLmxlbiA9IHBhdGhbaWR4XS5lbmQgLSBwYXRoW2lkeF0uc3RhcnQgKyAxOwotCQlwYXRoW2lkeF0ubWlkID0gcGF0aFtpZHhdLnN0YXJ0ICsgcGF0aFtpZHhdLmxlbiAvIDI7Ci0JfQotCi0JaWYgKChwYXRoWzBdLnN0YXJ0ID09IDApICYmCi0JCQkocGF0aFtjb250X3BhdGhfY250IC0gMV0uZW5kID09IE1BWF9QSEFTRSkpIHsKLQkJcGF0aFswXS5zdGFydCA9IHBhdGhbY29udF9wYXRoX2NudCAtIDFdLnN0YXJ0IC0gTUFYX1BIQVNFIC0gMTsKLQkJcGF0aFswXS5sZW4gKz0gcGF0aFtjb250X3BhdGhfY250IC0gMV0ubGVuOwotCQlwYXRoWzBdLm1pZCA9IHBhdGhbMF0uc3RhcnQgKyBwYXRoWzBdLmxlbiAvIDI7Ci0JCWlmIChwYXRoWzBdLm1pZCA8IDApCi0JCQlwYXRoWzBdLm1pZCArPSBNQVhfUEhBU0UgKyAxOwotCQljb250X3BhdGhfY250LS07Ci0JfQotCW1heF9sZW4gPSAwOwotCWZpbmFsX3BoYXNlID0gMDsKLQlmaW5hbF9wYXRoX2lkeCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvbnRfcGF0aF9jbnQ7IGkrKykgewotCQlpZiAocGF0aFtpXS5sZW4gPiBtYXhfbGVuKSB7Ci0JCQltYXhfbGVuID0gcGF0aFtpXS5sZW47Ci0JCQlmaW5hbF9waGFzZSA9ICh1OCkgcGF0aFtpXS5taWQ7Ci0JCQlmaW5hbF9wYXRoX2lkeCA9IGk7Ci0JCX0KLQotCQlSVFM1MVhfREVCVUdQKCJwYXRoWyVkXS5zdGFydCA9ICVkXG4iLCBpLCBwYXRoW2ldLnN0YXJ0KTsKLQkJUlRTNTFYX0RFQlVHUCgicGF0aFslZF0uZW5kID0gJWRcbiIsIGksIHBhdGhbaV0uZW5kKTsKLQkJUlRTNTFYX0RFQlVHUCgicGF0aFslZF0ubGVuID0gJWRcbiIsIGksIHBhdGhbaV0ubGVuKTsKLQkJUlRTNTFYX0RFQlVHUCgicGF0aFslZF0ubWlkID0gJWRcbiIsIGksIHBhdGhbaV0ubWlkKTsKLQkJUlRTNTFYX0RFQlVHUCgiXG4iKTsKLQl9Ci0KLQlpZiAoKHR1bmVfZGlyID09IFRVTkVfVFgpICYmIChDSEtfU0RfU0RSNTAoc2RfY2FyZCkpCi0JICAgICYmIGNoaXAtPm9wdGlvbi5zZHI1MF9waGFzZV9zZWwpIHsKLQkJaWYgKG1heF9sZW4gPiA2KSB7Ci0JCQlpbnQgdGVtcF9taWQgPSAobWF4X2xlbiAtIDYpIC8gMjsKLQkJCWludCB0ZW1wX2ZpbmFsX3BoYXNlID0KLQkJCSAgICBwYXRoW2ZpbmFsX3BhdGhfaWR4XS5lbmQgLSAobWF4X2xlbiAtCi0JCQkJCQkJKDMgKyB0ZW1wX21pZCkpOwotCi0JCQlpZiAodGVtcF9maW5hbF9waGFzZSA8IDApCi0JCQkJZmluYWxfcGhhc2UgPSB0ZW1wX2ZpbmFsX3BoYXNlICsgTUFYX1BIQVNFICsgMTsKLQkJCWVsc2UKLQkJCQlmaW5hbF9waGFzZSA9ICh1OCkgdGVtcF9maW5hbF9waGFzZTsKLQkJfQotCX0KLQotU2VhcmNoX0ZpbmlzaDoKLQlSVFM1MVhfREVCVUdQKCJGaW5hbCBjaG9zZW4gcGhhc2U6ICVkXG4iLCBmaW5hbF9waGFzZSk7Ci0JcmV0dXJuIGZpbmFsX3BoYXNlOwotfQotCi1zdGF0aWMgaW50IHNkX3R1bmluZ19yeChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JaW50IGksIGo7Ci0JdTMyIHJhd19waGFzZV9tYXBbM10sIHBoYXNlX21hcDsKLQl1OCBmaW5hbF9waGFzZTsKLQlpbnQgKCp0dW5pbmdfY21kKShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHNhbXBsZV9wb2ludCk7Ci0KLQlpZiAoQ0hLX1NEKHNkX2NhcmQpKSB7Ci0JCWlmIChDSEtfU0RfRERSNTAoc2RfY2FyZCkpCi0JCQl0dW5pbmdfY21kID0gc2RfZGRyX3R1bmluZ19yeF9jbWQ7Ci0JCWVsc2UKLQkJCXR1bmluZ19jbWQgPSBzZF9zZHJfdHVuaW5nX3J4X2NtZDsKLQl9IGVsc2UgewotCQlpZiAoQ0hLX01NQ19ERFI1MihzZF9jYXJkKSkKLQkJCXR1bmluZ19jbWQgPSBtbWNfZGRyX3R1bm5pbmdfcnhfY21kOwotCQllbHNlCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcmF3X3BoYXNlX21hcFtpXSA9IDA7Ci0JCWZvciAoaiA9IE1BWF9QSEFTRTsgaiA+PSAwOyBqLS0pIHsKLQkJCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgU0RfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKSB7Ci0JCQkJc2Rfc2V0X3Jlc2V0X2ZhaWwoY2hpcCwgU0RfUkVTRVRfRkFJTCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQotCQkJcmV0dmFsID0gdHVuaW5nX2NtZChjaGlwLCAodTgpIGopOwotCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlyYXdfcGhhc2VfbWFwW2ldIHw9IDEgPDwgajsKLQkJCWVsc2UKLQkJCQlSVFM1MVhfREVCVUdQKCJUdW5pbmcgcGhhc2UgJWQgZmFpbFxuIiwgaik7Ci0JCX0KLQl9Ci0KLQlwaGFzZV9tYXAgPSByYXdfcGhhc2VfbWFwWzBdICYgcmF3X3BoYXNlX21hcFsxXSAmIHJhd19waGFzZV9tYXBbMl07Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJUlRTNTFYX0RFQlVHUCgiUlggcmF3X3BoYXNlX21hcFslZF0gPSAweCUwNHhcbiIsIGksCi0JCQkgICAgICAgcmF3X3BoYXNlX21hcFtpXSk7Ci0JUlRTNTFYX0RFQlVHUCgiUlggcGhhc2VfbWFwID0gMHglMDR4XG4iLCBwaGFzZV9tYXApOwotCi0JZmluYWxfcGhhc2UgPSBzZF9zZWFyY2hfZmluYWxfcGhhc2UoY2hpcCwgcGhhc2VfbWFwLCBUVU5FX1JYKTsKLQlpZiAoZmluYWxfcGhhc2UgPT0gMHhGRikKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHZhbCA9IHR1bmluZ19jbWQoY2hpcCwgZmluYWxfcGhhc2UpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX2Rkcl9wcmVfdHVuaW5nX3R4KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQl1OCBpOwotCXU4IHByZV90dW5lX3R4X3BoYXNlOwotCXUzMiBwcmVfdHVuZV9waGFzZV9tYXA7Ci0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFNEX0NGRzMsIFNEX1JTUF84MENMS19USU1FT1VUX0VOLAotCQkJIFNEX1JTUF84MENMS19USU1FT1VUX0VOKTsKLQotCXByZV90dW5lX3R4X3BoYXNlID0gMHhGRjsKLQlwcmVfdHVuZV9waGFzZV9tYXAgPSAweDAwMDA7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9QSEFTRSArIDE7IGkrKykgewotCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIFNEX0NBUkQpID09IENEX05PVF9FWElTVCkgewotCQkJc2Rfc2V0X3Jlc2V0X2ZhaWwoY2hpcCwgU0RfUkVTRVRfRkFJTCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJcmV0dmFsID0gc2RfY2hhbmdlX3BoYXNlKGNoaXAsICh1OCkgaSwgVFVORV9UWCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQlyZXR2YWwgPQotCQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRU5EX1NUQVRVUywgc2RfY2FyZC0+c2RfYWRkciwKLQkJCQkJU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDApOwotCQlpZiAoKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJICAgIHx8ICFzZF9jaGVja19lcnJfY29kZShjaGlwLCBTRF9SU1BfVElNRU9VVCkpCi0JCQlwcmVfdHVuZV9waGFzZV9tYXAgfD0gKHUzMikgMSA8PCBpOwotCX0KLQotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQ0ZHMywgU0RfUlNQXzgwQ0xLX1RJTUVPVVRfRU4sIDApOwotCi0JcHJlX3R1bmVfdHhfcGhhc2UgPQotCSAgICBzZF9zZWFyY2hfZmluYWxfcGhhc2UoY2hpcCwgcHJlX3R1bmVfcGhhc2VfbWFwLCBUVU5FX1RYKTsKLQlpZiAocHJlX3R1bmVfdHhfcGhhc2UgPT0gMHhGRikKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXNkX2NoYW5nZV9waGFzZShjaGlwLCBwcmVfdHVuZV90eF9waGFzZSwgVFVORV9UWCk7Ci0JUlRTNTFYX0RFQlVHUCgiRERSIFRYIHByZSB0dW5lIHBoYXNlOiAlZFxuIiwgKGludClwcmVfdHVuZV90eF9waGFzZSk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfdHVuaW5nX3R4KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQlpbnQgaSwgajsKLQl1MzIgcmF3X3BoYXNlX21hcFszXSwgcGhhc2VfbWFwOwotCXU4IGZpbmFsX3BoYXNlOwotCWludCAoKnR1bmluZ19jbWQpKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggc2FtcGxlX3BvaW50KTsKLQotCWlmIChDSEtfU0Qoc2RfY2FyZCkpIHsKLQkJaWYgKENIS19TRF9ERFI1MChzZF9jYXJkKSkKLQkJCXR1bmluZ19jbWQgPSBzZF9kZHJfdHVuaW5nX3R4X2NtZDsKLQkJZWxzZQotCQkJdHVuaW5nX2NtZCA9IHNkX3Nkcl90dW5pbmdfdHhfY21kOwotCX0gZWxzZSB7Ci0JCWlmIChDSEtfTU1DX0REUjUyKHNkX2NhcmQpKQotCQkJdHVuaW5nX2NtZCA9IHNkX2Rkcl90dW5pbmdfdHhfY21kOwotCQllbHNlCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcmF3X3BoYXNlX21hcFtpXSA9IDA7Ci0JCWZvciAoaiA9IE1BWF9QSEFTRTsgaiA+PSAwOyBqLS0pIHsKLQkJCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgU0RfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKSB7Ci0JCQkJc2Rfc2V0X3Jlc2V0X2ZhaWwoY2hpcCwgU0RfUkVTRVRfRkFJTCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQotCQkJcmV0dmFsID0gdHVuaW5nX2NtZChjaGlwLCAodTgpIGopOwotCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlyYXdfcGhhc2VfbWFwW2ldIHw9IDEgPDwgajsKLQkJCWVsc2UKLQkJCQlSVFM1MVhfREVCVUdQKCJUdW5pbmcgcGhhc2UgJWQgZmFpbFxuIiwgaik7Ci0JCX0KLQl9Ci0KLQlwaGFzZV9tYXAgPSByYXdfcGhhc2VfbWFwWzBdICYgcmF3X3BoYXNlX21hcFsxXSAmIHJhd19waGFzZV9tYXBbMl07Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJUlRTNTFYX0RFQlVHUCgiVFggcmF3X3BoYXNlX21hcFslZF0gPSAweCUwNHhcbiIsIGksCi0JCQkgICAgICAgcmF3X3BoYXNlX21hcFtpXSk7Ci0JUlRTNTFYX0RFQlVHUCgiVFggcGhhc2VfbWFwID0gMHglMDR4XG4iLCBwaGFzZV9tYXApOwotCi0JZmluYWxfcGhhc2UgPSBzZF9zZWFyY2hfZmluYWxfcGhhc2UoY2hpcCwgcGhhc2VfbWFwLCBUVU5FX1RYKTsKLQlpZiAoZmluYWxfcGhhc2UgPT0gMHhGRikKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHZhbCA9IHR1bmluZ19jbWQoY2hpcCwgZmluYWxfcGhhc2UpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNkX3Nkcl90dW5pbmcoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBzZF90dW5pbmdfdHgoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBzZF90dW5pbmdfcngoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZGRyX3R1bmluZyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQotCWlmICghKGNoaXAtPm9wdGlvbi5zZF9jdGwgJiBTRF9ERFJfVFhfUEhBU0VfU0VUX0JZX1VTRVIpKSB7Ci0JCXJldHZhbCA9IHNkX2Rkcl9wcmVfdHVuaW5nX3R4KGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0KLQkJICAgIHNkX2NoYW5nZV9waGFzZShjaGlwLCAodTgpIGNoaXAtPm9wdGlvbi5zZF9kZHJfdHhfcGhhc2UsCi0JCQkJICAgIFRVTkVfVFgpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dmFsID0gc2RfdHVuaW5nX3J4KGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKCEoY2hpcC0+b3B0aW9uLnNkX2N0bCAmIFNEX0REUl9UWF9QSEFTRV9TRVRfQllfVVNFUikpIHsKLQkJcmV0dmFsID0gc2RfdHVuaW5nX3R4KGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IG1tY19kZHJfdHVuaW5nKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCEoY2hpcC0+b3B0aW9uLnNkX2N0bCAmIE1NQ19ERFJfVFhfUEhBU0VfU0VUX0JZX1VTRVIpKSB7Ci0JCXJldHZhbCA9IHNkX2Rkcl9wcmVfdHVuaW5nX3R4KGNoaXApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0KLQkJICAgIHNkX2NoYW5nZV9waGFzZShjaGlwLCAodTgpIGNoaXAtPm9wdGlvbi5tbWNfZGRyX3R4X3BoYXNlLAotCQkJCSAgICBUVU5FX1RYKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHZhbCA9IHNkX3R1bmluZ19yeChjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmICghKGNoaXAtPm9wdGlvbi5zZF9jdGwgJiBNTUNfRERSX1RYX1BIQVNFX1NFVF9CWV9VU0VSKSkgewotCQlyZXR2YWwgPSBzZF90dW5pbmdfdHgoY2hpcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfc2Rfc3dpdGNoX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQlpbnQgcmVfdHVuaW5nID0gMDsKLQotCXJldHZhbCA9IHJ0czUxeF9zZWxlY3RfY2FyZChjaGlwLCBTRF9DQVJEKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWlmIChDSEtfU0QzMF9TUEVFRChzZF9jYXJkKSB8fCBDSEtfTU1DX0REUjUyKHNkX2NhcmQpKSB7Ci0JCWlmIChzZF9jYXJkLT5zZF9jbG9jayAhPSBjaGlwLT5jdXJfY2xrKQotCQkJcmVfdHVuaW5nID0gMTsKLQl9Ci0KLQlyZXR2YWwgPSBzd2l0Y2hfY2xvY2soY2hpcCwgc2RfY2FyZC0+c2RfY2xvY2spOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKHJlX3R1bmluZykgewotCQlpZiAoQ0hLX1NEKHNkX2NhcmQpKSB7Ci0JCQlpZiAoQ0hLX1NEX0REUjUwKHNkX2NhcmQpKQotCQkJCXJldHZhbCA9IHNkX2Rkcl90dW5pbmcoY2hpcCk7Ci0JCQllbHNlCi0JCQkJcmV0dmFsID0gc2Rfc2RyX3R1bmluZyhjaGlwKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChDSEtfTU1DX0REUjUyKHNkX2NhcmQpKQotCQkJCXJldHZhbCA9IG1tY19kZHJfdHVuaW5nKGNoaXApOwotCQl9Ci0KLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzZF9wcmVwYXJlX3Jlc2V0KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQotCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCXNkX2NhcmQtPnNkX2Nsb2NrID0gMjk7Ci0JZWxzZQotCQlzZF9jYXJkLT5zZF9jbG9jayA9IENMS18zMDsKLQotCS8qIFNldCBTRCBDbG9ja3MgKi8KLQlyZXR2YWwgPSBzZF9zZXRfaW5pdF9wYXJhKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwgMHhGRiwKLQkJICAgICAgIFNEX0NMS19ESVZJREVfMTI4IHwgU0RfMjBfTU9ERSB8IFNEX0JVU19XSURUSF8xKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9TQU1QTEVfUE9JTlRfQ1RMLCAweEZGLAotCQkgICAgICAgU0QyMF9SWF9QT1NfRURHRSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfUFVTSF9QT0lOVF9DVEwsIDB4RkYsIDApOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZWxlY3RfY2FyZChjaGlwLCBTRF9DQVJEKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgc2RfcHVsbF9jdGxfZGlzYWJsZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwxLCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDIsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMywgMHhGRiwgMHg5NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw0LCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDUsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNiwgMHhGRiwgMHhBNSk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDEsIDB4RkYsIDB4NjUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg1NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwzLCAweEZGLCAweDk1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDQsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNSwgMHhGRiwgMHg1Nik7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw2LCAweEZGLCAweDU5KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNkX3B1bGxfY3RsX2VuYWJsZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwxLCAweEZGLCAweEFBKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDIsIDB4RkYsIDB4QUEpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMywgMHhGRiwgMHhBOSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw0LCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDUsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNiwgMHhGRiwgMHhBNSk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDEsIDB4RkYsIDB4QTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg5QSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwzLCAweEZGLCAweEE1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDQsIDB4RkYsIDB4OUEpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNSwgMHhGRiwgMHg2NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw2LCAweEZGLCAweDVBKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2RfaW5pdF9wb3dlcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFdSX0NUTCwgTERPMzMxOF9QV1JfTUFTSywKLQkJICAgICAgIExET19PTik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfUEFEX0NUTCwgU0RfSU9fVVNJTkdfMVY4LAotCQkgICAgICAgU0RfSU9fVVNJTkdfM1YzKTsKLQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBMRE9fUE9XRVJfQ0ZHLAotCQkJICAgICAgIFRVTkVfU0QxOF9NQVNLLCBUVU5FX1NEMThfM1YzKTsKLQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQlzZF9wdWxsX2N0bF9kaXNhYmxlKGNoaXApOwotCWVsc2UKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgRlBHQV9QVUxMX0NUTCwKLQkJCSAgICAgICBGUEdBX1NEX1BVTExfQ1RMX0JJVCB8IDB4MjAsCi0JCQkgICAgICAgRlBHQV9TRF9QVUxMX0NUTF9CSVQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfT0UsIFNEX09VVFBVVF9FTiwgMCk7Ci0JaWYgKCFjaGlwLT5vcHRpb24uRlQyX2Zhc3RfbW9kZSkKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QV1JfQ1RMLCBQT1dFUl9NQVNLLAotCQkJICAgICAgIFBPV0VSX09GRik7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCWlmICghY2hpcC0+b3B0aW9uLkZUMl9mYXN0X21vZGUpIHsKLSNpZmRlZiBTRF9YRF9JT19GT0xMT1dfUFdSCi0JCWlmIChDSEVDS19QS0coY2hpcCwgTFFGUDQ4KQotCQkgICAgfHwgY2hpcC0+b3B0aW9uLnJ0czUxMjlfRDMzMThfb2ZmX2VuYWJsZSkKLQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1BXUl9DVEwsCi0JCQkJCUxET19PRkYsIExET19PRkYpOwotI2VuZGlmCi0JCXdhaXRfdGltZW91dCgyNTApOwotCi0jaWZkZWYgU0RfWERfSU9fRk9MTE9XX1BXUgotCQlpZiAoQ0hFQ0tfUEtHKGNoaXAsIExRRlA0OCkKLQkJICAgIHx8IGNoaXAtPm9wdGlvbi5ydHM1MTI5X0QzMzE4X29mZl9lbmFibGUpIHsKLQkJCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQkJCWlmIChjaGlwLT5hc2ljX2NvZGUpCi0JCQkJc2RfcHVsbF9jdGxfZW5hYmxlKGNoaXApOwotCQkJZWxzZQotCQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsCi0JCQkJCSAgICAgICBGUEdBX1BVTExfQ1RMLAotCQkJCQkgICAgICAgRlBHQV9TRF9QVUxMX0NUTF9CSVQgfCAweDIwLCAwKTsKLQkJCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9IGVsc2UgewotCQkJaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9QVUxMX0NUTDYsCi0JCQkJCQkgICAgICAweDAzLCAweDAwKTsKLQkJfQotI2VuZGlmCi0KLQkJLyogUG93ZXIgb24gY2FyZCAqLwotCQlyZXR2YWwgPSBydHM1MXhfY2FyZF9wb3dlcl9vbihjaGlwLCBTRF9DQVJEKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXdhaXRfdGltZW91dCgyNjApOwotCi0jaWZkZWYgU1VQUE9SVF9PQ1AKLQkJcnRzNTF4X2dldF9jYXJkX3N0YXR1cyhjaGlwLCAmKGNoaXAtPmNhcmRfc3RhdHVzKSk7Ci0JCWNoaXAtPm9jcF9zdGF0ID0gKGNoaXAtPmNhcmRfc3RhdHVzID4+IDQpICYgMHgwMzsKLQotCQlpZiAoY2hpcC0+b2NwX3N0YXQgJiAoTVNfT0NQX05PVyB8IE1TX09DUF9FVkVSKSkgewotCQkJUlRTNTFYX0RFQlVHUCgiT3ZlciBjdXJyZW50LCBPQ1BTVEFUIGlzIDB4JXhcbiIsCi0JCQkJICAgICAgIGNoaXAtPm9jcF9zdGF0KTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLSNlbmRpZgotCX0KLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQlpZiAoY2hpcC0+YXNpY19jb2RlKSB7Ci0JCXNkX3B1bGxfY3RsX2VuYWJsZShjaGlwKTsKLQl9IGVsc2UgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBGUEdBX1BVTExfQ1RMLAotCQkJICAgICAgIEZQR0FfU0RfUFVMTF9DVExfQklUIHwgMHgyMCwgMCk7Ci0JfQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0jaWZkZWYgU0RfWERfSU9fRk9MTE9XX1BXUgotCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX0lOVF9QRU5ELCBYRF9JTlQgfCBNU19JTlQgfCBTRF9JTlQsCi0JCQkgICAgICBYRF9JTlQgfCBNU19JTlQgfCBTRF9JTlQpOwotI2VuZGlmCi0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfT0UsIFNEX09VVFBVVF9FTiwgU0RfT1VUUFVUX0VOKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzZF9kdW1teV9jbG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBTRF9CVVNfU1RBVCwgU0RfQ0xLX1RPR0dMRV9FTiwgU0RfQ0xLX1RPR0dMRV9FTik7Ci0Jd2FpdF90aW1lb3V0KDUpOwotCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfQlVTX1NUQVQsIFNEX0NMS19UT0dHTEVfRU4sIDB4MDApOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcmVzZXRfc2Qoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsLCBpID0gMCwgaiA9IDAsIGsgPSAwLCBoaV9jYXBfZmxvdyA9IDA7Ci0JaW50IHNkX2RvbnRfc3dpdGNoID0gMDsKLQlpbnQgc3VwcG9ydF8xdjggPSAwOwotCXU4IHJzcFsxNl07Ci0JdTggc3dpdGNoX2J1c193aWR0aDsKLQl1MzIgdm9sdGFnZSA9IDA7Ci0JdTggY21kWzVdLCBidWZbNjRdOwotCXUxNiBzZF9jYXJkX3R5cGU7Ci0KLQlTRVRfU0Qoc2RfY2FyZCk7Ci0JQ0xSX1JFVFJZX1NEMjBfTU9ERShzZF9jYXJkKTsKLVN3aXRjaF9GYWlsOgotCWkgPSAwOwotCWogPSAwOwotCWsgPSAwOwotCWhpX2NhcF9mbG93ID0gMDsKLQlzdXBwb3J0XzF2OCA9IDA7Ci0KLQlyZXR2YWwgPSBzZF9wcmVwYXJlX3Jlc2V0KGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0Jc2RfZHVtbXlfY2xvY2soY2hpcCk7Ci0KLQkvKiBTdGFydCBJbml0aWFsaXphdGlvbiBQcm9jZXNzIG9mIFNEIENhcmQgKi8KLVJUWV9TRF9SU1Q6Ci0JcmV0dmFsID0KLQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBHT19JRExFX1NUQVRFLCAwLCBTRF9SU1BfVFlQRV9SMCwgTlVMTCwKLQkJCQkwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXdhaXRfdGltZW91dCgyMCk7Ci0KLQlyZXR2YWwgPQotCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfSUZfQ09ORCwgMHgwMDAwMDFBQSwgU0RfUlNQX1RZUEVfUjcsCi0JCQkJcnNwLCA1KTsKLQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWlmICgocnNwWzRdID09IDB4QUEpICYmICgocnNwWzNdICYgMHgwZikgPT0gMHgwMSkpIHsKLQkJCWhpX2NhcF9mbG93ID0gMTsKLQkJCWlmIChDSEtfUkVUUllfU0QyMF9NT0RFKHNkX2NhcmQpKSB7Ci0JCQkJdm9sdGFnZSA9Ci0JCQkJICAgIFNVUFBPUlRfVk9MVEFHRSB8Ci0JCQkJICAgIFNVUFBPUlRfSElHSF9BTkRfRVhURU5ERURfQ0FQQUNJVFk7Ci0JCQl9IGVsc2UgewotCQkJCXZvbHRhZ2UgPQotCQkJCSAgICBTVVBQT1JUX1ZPTFRBR0UgfAotCQkJCSAgICBTVVBQT1JUX0hJR0hfQU5EX0VYVEVOREVEX0NBUEFDSVRZIHwKLQkJCQkgICAgU1VQUE9SVF9NQVhfUE9XRVJfUEVSTUFOQ0UgfCBTVVBQT1JUXzFWODsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghaGlfY2FwX2Zsb3cpIHsKLQkJdm9sdGFnZSA9IFNVUFBPUlRfVk9MVEFHRTsKLQotCQlyZXR2YWwgPQotCQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBHT19JRExFX1NUQVRFLCAwLCBTRF9SU1BfVFlQRV9SMCwKLQkJCQkJTlVMTCwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJd2FpdF90aW1lb3V0KDIwKTsKLQl9Ci0KLQkvKiBBQ01ENDEgKi8KLQlkbyB7Ci0JCXsKLQkJCXU4IHRlbXAgPSAwOwotCQkJcnRzNTF4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9JTlRfUEVORCwgJnRlbXApOwotCQkJUlRTNTFYX0RFQlVHUCgiQ0FSRF9JTlRfUEVORDoleFxuIiwgdGVtcCk7Ci0JCQlpZiAodGVtcCAmIFNEX0lOVCkgewotCQkJCWNoaXAtPnJlc2V0X25lZWRfcmV0cnkgPSAxOwotCQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX0lOVF9QRU5ELAotCQkJCQkJICAgICAgWERfSU5UIHwgU0RfSU5UIHwgTVNfSU5ULAotCQkJCQkJICAgICAgWERfSU5UIHwgU0RfSU5UIHwgTVNfSU5UKTsKLQkJCQlzZF9zZXRfcmVzZXRfZmFpbChjaGlwLCBTRF9SRVNFVF9GQUlMKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0KLVJUWV9DTUQ1NToKLQkJcmV0dmFsID0KLQkJICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgQVBQX0NNRCwgMCwgU0RfUlNQX1RZUEVfUjEsIE5VTEwsCi0JCQkJCTApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIFNEX0NBUkQpID09IENEX05PVF9FWElTVCkgewotCQkJCXNkX3NldF9yZXNldF9mYWlsKGNoaXAsIFNEX1JFU0VUX0ZBSUwpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0KLQkJCWorKzsKLQkJCWlmIChjaGlwLT5vcHRpb24uc3BlZWRfbW1jKSB7Ci0JCQkJaWYgKGogPCAyKQotCQkJCQlnb3RvIFJUWV9DTUQ1NTsKLQkJCQllbHNlCi0JCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChqIDwgMykKLQkJCQkJZ290byBSVFlfU0RfUlNUOwotCQkJCWVsc2UKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCi0JCXJldHZhbCA9Ci0JCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNEX0FQUF9PUF9DT05ELCB2b2x0YWdlLAotCQkJCQlTRF9SU1BfVFlQRV9SMywgcnNwLCA1KTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaysrOwotCQkJaWYgKGsgPCAzKQotCQkJCWdvdG8gUlRZX1NEX1JTVDsKLQkJCWVsc2UKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJaSsrOwotCQl3YWl0X3RpbWVvdXQoMjApOwotCX0gd2hpbGUgKCEocnNwWzFdICYgMHg4MCkgJiYgKGkgPCAyNTUpKTsgLyogTm90IGNvbXBsZXRlIHBvd2VyIG9uICovCi0KLQlpZiAoaSA9PSAyNTUpIHsKLQkJLyogVGltZSBvdXQgKi8KLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlpZiAoaGlfY2FwX2Zsb3cpIHsKLQkJaWYgKHJzcFsxXSAmIDB4NDApCi0JCQlTRVRfU0RfSENYQyhzZF9jYXJkKTsKLQkJZWxzZQotCQkJQ0xSX1NEX0hDWEMoc2RfY2FyZCk7Ci0JCWlmICghQ0hLX1JFVFJZX1NEMjBfTU9ERShzZF9jYXJkKSkgewotCQkJaWYgKChDSEtfU0RfSENYQyhzZF9jYXJkKSkgJiYgKENIRUNLX1VIUzUwKGNoaXApKSkgewotCQkJCXN1cHBvcnRfMXY4ID0gKHJzcFsxXSAmIDB4MDEpID8gMSA6IDA7Ci0JCQkJUlRTNTFYX0RFQlVHUCgic3VwcG9ydF8xdjggPSAlZFxuIiwKLQkJCQkJICAgICAgIHN1cHBvcnRfMXY4KTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCUNMUl9TRF9IQ1hDKHNkX2NhcmQpOwotCQlzdXBwb3J0XzF2OCA9IDA7Ci0JfQotCi0JLyogQ01EMTE6IFN3aXRjaCBWb2x0YWdlICovCi0JaWYgKHN1cHBvcnRfMXY4ICYmIENIRUNLX1VIUzUwKGNoaXApCi0JICAgICYmICEoKCh1OCkgY2hpcC0+b3B0aW9uLnNkX3NwZWVkX3ByaW9yICYgU0RSMTA0X1NVUFBPUlQpID09Ci0JCSBIU19TVVBQT1JUKSkgewotCQlyZXR2YWwgPSBzZF92b2x0YWdlX3N3aXRjaChjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJU0VUX1JFVFJZX1NEMjBfTU9ERShzZF9jYXJkKTsKLQkJCXNkX2luaXRfcG93ZXIoY2hpcCk7Ci0JCQlSVFM1MVhfREVCVUdQKCIxLjh2IHN3aXRjaCBmYWlsXG4iKTsKLQkJCWdvdG8gU3dpdGNoX0ZhaWw7Ci0JCX0KLQl9Ci0KLQkvKiBDTUQgMiAqLwotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgQUxMX1NFTkRfQ0lELCAwLCBTRF9SU1BfVFlQRV9SMiwgTlVMTCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkvKiBDTUQgMyAqLwotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VORF9SRUxBVElWRV9BRERSLCAwLCBTRF9SU1BfVFlQRV9SNiwKLQkJCQlyc3AsIDUpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0Jc2RfY2FyZC0+c2RfYWRkciA9ICh1MzIpIHJzcFsxXSA8PCAyNDsKLQlzZF9jYXJkLT5zZF9hZGRyICs9ICh1MzIpIHJzcFsyXSA8PCAxNjsKLQotCS8qIEdldCBDU0QgcmVnaXN0ZXIgZm9yIENhbGN1bGF0aW5nIFRpbWluZyxDYXBhY2l0eSwKLQkgKiBDaGVjayBDU0QgdG8gZGV0ZXJtaW5lIGFzIGlmIHRoaXMgaXMgdGhlIFNEIFJPTSBjYXJkICovCi0JcmV0dmFsID0gc2RfY2hlY2tfY3NkKGNoaXAsIDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCS8qIFNlbGVjdCBTRCBjYXJkICovCi0JcmV0dmFsID0gcnRzNTF4X3NkX3NlbGVjdF9jYXJkKGNoaXAsIDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JLyogQUNNRDQyICovCi0JcmV0dmFsID0KLQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBBUFBfQ01ELCBzZF9jYXJkLT5zZF9hZGRyLCBTRF9SU1BfVFlQRV9SMSwKLQkJCQlOVUxMLCAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VUX0NMUl9DQVJEX0RFVEVDVCwgMCwgU0RfUlNQX1RZUEVfUjEsCi0JCQkJTlVMTCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAoc3VwcG9ydF8xdjgpIHsKLQkJLyogQUNNRDYgKi8KLQkJcmV0dmFsID0KLQkJICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgQVBQX0NNRCwgc2RfY2FyZC0+c2RfYWRkciwKLQkJCQkJU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCS8qIEVuYWJsZSA0IGJpdCBkYXRhIGJ1cyAqLwotCQlyZXR2YWwgPQotCQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRVRfQlVTX1dJRFRILCAyLCBTRF9SU1BfVFlQRV9SMSwKLQkJCQkJTlVMTCwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJc3dpdGNoX2J1c193aWR0aCA9IFNEX0JVU19XSURUSF80OwotCX0gZWxzZSB7Ci0JCXN3aXRjaF9idXNfd2lkdGggPSBTRF9CVVNfV0lEVEhfMTsKLQl9Ci0KLQkvKiBTZXQgYmxvY2sgbGVuZ3RoIDUxMiBieXRlcyBmb3IgYWxsIGJsb2NrIGNvbW1hbmRzICovCi0JcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRVRfQkxPQ0tMRU4sCi0JCQkweDIwMCwgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBTRF9DRkcxLCBTRF9DTEtfRElWSURFX01BU0ssIFNEX0NMS19ESVZJREVfMCk7Ci0KLQlpZiAoIShzZF9jYXJkLT5yYXdfY3NkWzRdICYgMHg0MCkpIHsKLQkJc2RfZG9udF9zd2l0Y2ggPSAxOwotCQlSVFM1MVhfREVCVUdQKCJOb3Qgc3VwcG9ydCBjbGFzcyB0ZW5cbiIpOwotCX0KLQotCWlmICghc2RfZG9udF9zd2l0Y2gpIHsKLQkJLyogQ2hlY2sgdGhlIGNhcmQgd2hldGhlciBmbG93IFNEMS4xIHNwZWMgb3IgaGlnaGVyICovCi0JCXJldHZhbCA9IHNkX2NoZWNrX3NwZWMoY2hpcCwgc3dpdGNoX2J1c193aWR0aCk7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJldHZhbCA9IHNkX3N3aXRjaF9mdW5jdGlvbihjaGlwLCBzd2l0Y2hfYnVzX3dpZHRoKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlpZiAoKHNkX2NhcmQtPnNkX3N3aXRjaF9mYWlsID09Ci0JCQkJICAgICBTRFIxMDRfU1VQUE9SVF9NQVNLKQotCQkJCSAgICB8fCAoc2RfY2FyZC0+c2Rfc3dpdGNoX2ZhaWwgPT0KLQkJCQkJRERSNTBfU1VQUE9SVF9NQVNLKQotCQkJCSAgICB8fCAoc2RfY2FyZC0+c2Rfc3dpdGNoX2ZhaWwgPT0KLQkJCQkJICAgIFNEUjUwX1NVUFBPUlRfTUFTSykpIHsKLQkJCQkJc2RfaW5pdF9wb3dlcihjaGlwKTsKLQkJCQkJU0VUX1JFVFJZX1NEMjBfTU9ERShzZF9jYXJkKTsKLQkJCQl9IGVsc2UgaWYgKHNkX2NhcmQtPnNkX3N3aXRjaF9mYWlsID09Ci0JCQkJCQlIU19TVVBQT1JUX01BU0spIHsKLQkJCQkJc2RfZG9udF9zd2l0Y2ggPSAxOwotCQkJCX0KLQkJCQlnb3RvIFN3aXRjaF9GYWlsOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHN1cHBvcnRfMXY4KSB7Ci0JCQkJU0VUX1JFVFJZX1NEMjBfTU9ERShzZF9jYXJkKTsKLQkJCQlzZF9pbml0X3Bvd2VyKGNoaXApOwotCQkJCXNkX2RvbnRfc3dpdGNoID0gMTsKLQotCQkJCWdvdG8gU3dpdGNoX0ZhaWw7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIXN1cHBvcnRfMXY4KSB7Ci0JCS8qIEFDTUQ2ICovCi0JCXJldHZhbCA9Ci0JCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIEFQUF9DTUQsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJCVNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkvKiBFbmFibGUgNCBiaXQgZGF0YSBidXMgKi8KLQkJcmV0dmFsID0KLQkJICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VUX0JVU19XSURUSCwgMiwgU0RfUlNQX1RZUEVfUjEsCi0JCQkJCU5VTEwsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JaWYgKENIS19TRDMwX1NQRUVEKHNkX2NhcmQpKSB7Ci0JCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBTRDMwX0RSSVZFX1NFTCwgU0QzMF9EUklWRV9NQVNLLAotCQkJCSAgICAgIDB4MDMpOwotCi0JCXJldHZhbCA9IHNkX3NldF9pbml0X3BhcmEoY2hpcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQlpZiAoQ0hLX1NEX0REUjUwKHNkX2NhcmQpKQotCQkJcmV0dmFsID0gc2RfZGRyX3R1bmluZyhjaGlwKTsKLQkJZWxzZQotCQkJcmV0dmFsID0gc2Rfc2RyX3R1bmluZyhjaGlwKTsKLQotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlTRVRfUkVUUllfU0QyMF9NT0RFKHNkX2NhcmQpOwotCQkJUlRTNTFYX0RFQlVHUCgidHVuaW5nIHBoYXNlIGZhaWwsZ290byBTRDIwIG1vZGVcbiIpOwotCQkJc2RfaW5pdF9wb3dlcihjaGlwKTsKLQkJCUNMUl9TRDMwX1NQRUVEKHNkX2NhcmQpOwotCQkJZ290byBTd2l0Y2hfRmFpbDsKLQkJfQotCQlpZiAoU1RBVFVTX1NVQ0NFU1MgPT0KLQkJICAgIHNkX3dhaXRfY3VycmVudHN0YXRlX2RhdGFyZWFkeShjaGlwLCAweDA4LCAxLCAyMCkpIHsKLQkJCWNtZFswXSA9IDB4NDAgfCBSRUFEX1NJTkdMRV9CTE9DSzsKLQkJCWNtZFsxXSA9IDB4MDA7Ci0JCQljbWRbMl0gPSAweDAwOwotCQkJY21kWzNdID0gMHgwMDsKLQkJCWNtZFs0XSA9IDB4MDA7Ci0JCQlyZXR2YWwgPQotCQkJICAgIHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9OT1JNQUxfUkVBRCwgY21kLCA1LCA1MTIsCi0JCQkJCSAxLCBTRF9CVVNfV0lEVEhfNCwgTlVMTCwgMCwgNjAwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlTRVRfUkVUUllfU0QyMF9NT0RFKHNkX2NhcmQpOwotCQkJCVJUUzUxWF9ERUJVR1AoInJlYWQgbGJhMCBmYWlsLCIKLQkJCQkJCQkiZ290byBTRDIwIG1vZGVcbiIpOwotCQkJCXNkX2luaXRfcG93ZXIoY2hpcCk7Ci0JCQkJQ0xSX1NEMzBfU1BFRUQoc2RfY2FyZCk7Ci0JCQkJZ290byBTd2l0Y2hfRmFpbDsKLQkJCX0KLQkJfQotCX0KLQlzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLCBzZF9jYXJkLT5zZF9hZGRyLCBTRF9SU1BfVFlQRV9SMSwKLQkJCSAgICBOVUxMLCAwKTsKLQotCXJldHZhbCA9IHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgQVBQX0NNRCwgc2RfY2FyZC0+c2RfYWRkciwKLQkJCVNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwKTsKLQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWludCByZXQ7Ci0JCWNtZFswXSA9IDB4NDAgfCBTRU5EX1NUQVRVUzsKLQkJY21kWzFdID0gMHgwMDsKLQkJY21kWzJdID0gMHgwMDsKLQkJY21kWzNdID0gMHgwMDsKLQkJY21kWzRdID0gMHgwMDsKLQkJcmV0ID0KLQkJICAgIHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9OT1JNQUxfUkVBRCwgY21kLCA1LCA2NCwgMSwKLQkJCQkgU0RfQlVTX1dJRFRIXzQsIGJ1ZiwgNjQsIDYwMCk7Ci0JCWlmIChyZXQgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXNkX2NhcmRfdHlwZSA9ICgodTE2KSBidWZbMl0gPDwgOCkgfCAodTE2KSBidWZbM107Ci0JCQlSVFM1MVhfREVCVUdQKCJzZF9jYXJkX3R5cGU6MHglNHhcbiIsIHNkX2NhcmRfdHlwZSk7Ci0JCQlpZiAoKHNkX2NhcmRfdHlwZSA9PSAweDAwMDEpCi0JCQkgICAgfHwgKHNkX2NhcmRfdHlwZSA9PSAweDAwMDIpKQotCQkJCWNoaXAtPmNhcmRfd3AgfD0gU0RfQ0FSRDsKLQkJfSBlbHNlIHsKLQkJCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQkJCXNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VORF9TVEFUVVMsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJCSAgICBTRF9SU1BfVFlQRV9SMSwgTlVMTCwgMCk7Ci0JCX0KLQl9IGVsc2UgewotCQlydHM1MXhfY2xlYXJfc2RfZXJyb3IoY2hpcCk7Ci0JCXNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VORF9TVEFUVVMsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJICAgIFNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwKTsKLQl9Ci0KLQkvKiBDaGVjayBTRCBNYWNoYW5pY2FsIFdyaXRlLVByb3RlY3QgU3dpdGNoICovCi0JcmV0dmFsID0gcnRzNTF4X2dldF9jYXJkX3N0YXR1cyhjaGlwLCAmKGNoaXAtPmNhcmRfc3RhdHVzKSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JaWYgKGNoaXAtPmNhcmRfc3RhdHVzICYgU0RfV1ApCi0JCWNoaXAtPmNhcmRfd3AgfD0gU0RfQ0FSRDsKLQotCWNoaXAtPmNhcmRfYnVzX3dpZHRoW2NoaXAtPmNhcmQybHVuW1NEX0NBUkRdXSA9IDQ7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgbW1jX3Rlc3Rfc3dpdGNoX2J1cyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IHdpZHRoKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsOwotCXU4IGJ1Zls4XSA9IHsgMCB9LCBidXNfd2lkdGg7Ci0JdTE2IGJ5dGVfY250OwotCWludCBsZW47Ci0KLQlyZXR2YWwgPQotCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIEJVU1RFU1RfVywgMCwgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKHdpZHRoID09IE1NQ184QklUX0JVUykgewotCQlidWZbMF0gPSAweDU1OwotCQlidWZbMV0gPSAweEFBOwotCQlsZW4gPSA4OwotCQlieXRlX2NudCA9IDg7Ci0JCWJ1c193aWR0aCA9IFNEX0JVU19XSURUSF84OwotCX0gZWxzZSB7Ci0JCWJ1ZlswXSA9IDB4NUE7Ci0JCWxlbiA9IDQ7Ci0JCWJ5dGVfY250ID0gNDsKLQkJYnVzX3dpZHRoID0gU0RfQlVTX1dJRFRIXzQ7Ci0JfQotCi0JcmV0dmFsID0gc2Rfd3JpdGVfZGF0YShjaGlwLCBTRF9UTV9BVVRPX1dSSVRFXzMsCi0JCQkgICAgICAgTlVMTCwgMCwgYnl0ZV9jbnQsIDEsIGJ1c193aWR0aCwgYnVmLCBsZW4sIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQl1OCB2YWwxID0gMCwgdmFsMiA9IDA7Ci0JCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9TVEFUMSwgJnZhbDEpOwotCQlydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfU1RBVDIsICZ2YWwyKTsKLQkJcnRzNTF4X2NsZWFyX3NkX2Vycm9yKGNoaXApOwotCQlpZiAoKHZhbDEgJiAweEUwKSB8fCB2YWwyKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0JUlRTNTFYX0RFQlVHUCgiU0QvTU1DIENNRCAlZFxuIiwgQlVTVEVTVF9SKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCS8qIENNRDE0ICovCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMCwgMHhGRiwgMHg0MCB8IEJVU1RFU1RfUik7Ci0KLQlpZiAod2lkdGggPT0gTU1DXzhCSVRfQlVTKQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CWVRFX0NOVF9MLCAweEZGLCAweDA4KTsKLQllbHNlCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0wsIDB4RkYsIDB4MDQpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQkxPQ0tfQ05UX0wsIDB4RkYsIDEpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9ILCAweEZGLCAwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsCi0JCSAgICAgICBTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX05PX0NIRUNLX0NSQzE2IHwKLQkJICAgICAgIFNEX05PX1dBSVRfQlVTWV9FTkQgfCBTRF9DSEVDS19DUkM3IHwgU0RfUlNQX0xFTl82KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkgICAgICAgUElOR1BPTkdfQlVGRkVSKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgMHhGRiwKLQkJICAgICAgIFNEX1RNX05PUk1BTF9SRUFEIHwgU0RfVFJBTlNGRVJfU1RBUlQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFNEX1RSQU5TRkVSLCBTRF9UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBTRF9UUkFOU0ZFUl9FTkQpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBQUEJVRl9CQVNFMiwgMCwgMCk7Ci0JaWYgKHdpZHRoID09IE1NQ184QklUX0JVUykgewotCQlsZW4gPSAzOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgMSwgMCwgMCk7Ci0JfSBlbHNlIHsKLQkJbGVuID0gMjsKLQl9Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiwgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIGxlbiwgMTAwKTsKLQlpZiAoQ0hFQ0tfU0RfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlydHM1MXhfcmVhZF9yc3BfYnVmKGNoaXAsIDEsIGJ1ZiwgMik7Ci0KLQlpZiAod2lkdGggPT0gTU1DXzhCSVRfQlVTKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIkJVU1RFU1RfUiBbOGJpdHNdOiAweCUwMnggMHglMDJ4XG4iLAotCQkJCQlidWZbMF0sIGJ1ZlsxXSk7Ci0JCWlmICgoYnVmWzBdID09IDB4QUEpICYmIChidWZbMV0gPT0gMHg1NSkpIHsKLQkJCXU4IHJzcFs1XTsKLQkJCXUzMiBhcmc7Ci0KLQkJCWlmIChDSEtfTU1DX0REUjUyKHNkX2NhcmQpKQotCQkJCWFyZyA9IDB4MDNCNzA2MDA7Ci0JCQllbHNlCi0JCQkJYXJnID0gMHgwM0I3MDIwMDsKLQkJCS8qIFN3aXRjaCBNTUMgdG8gIDgtYml0IG1vZGUgKi8KLQkJCXJldHZhbCA9Ci0JCQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTV0lUQ0gsIGFyZywKLQkJCQkJCVNEX1JTUF9UWVBFX1IxYiwgcnNwLCA1KTsKLQkJCWlmICgocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJICAgICYmICEocnNwWzRdICYgTU1DX1NXSVRDSF9FUlIpKQotCQkJCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQkJfQotCX0gZWxzZSB7Ci0JCVJUUzUxWF9ERUJVR1AoIkJVU1RFU1RfUiBbNGJpdHNdOiAweCUwMnhcbiIsIGJ1ZlswXSk7Ci0JCWlmIChidWZbMF0gPT0gMHhBNSkgewotCQkJdTggcnNwWzVdOwotCQkJdTMyIGFyZzsKLQotCQkJaWYgKENIS19NTUNfRERSNTIoc2RfY2FyZCkpCi0JCQkJYXJnID0gMHgwM0I3MDUwMDsKLQkJCWVsc2UKLQkJCQlhcmcgPSAweDAzQjcwMTAwOwotCQkJLyogU3dpdGNoIE1NQyB0byAgNC1iaXQgbW9kZSAqLwotCQkJcmV0dmFsID0KLQkJCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNXSVRDSCwgYXJnLAotCQkJCQkJU0RfUlNQX1RZUEVfUjFiLCByc3AsIDUpOwotCQkJaWYgKChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkgICAgJiYgIShyc3BbNF0gJiBNTUNfU1dJVENIX0VSUikpCi0JCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQl9Ci0JfQotCi0JVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLX0KLQotc3RhdGljIGludCBtbWNfc3dpdGNoX3RpbWluZ19idXMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsOwotCXU4IGNhcmRfdHlwZSwgY2FyZF90eXBlX21hc2sgPSAwOwotCXU4IGJ1Zls2XTsKLQotCUNMUl9NTUNfSFMoc2RfY2FyZCk7Ci0KLQlSVFM1MVhfREVCVUdQKCJTRC9NTUMgQ01EICVkXG4iLCBTRU5EX0VYVF9DU0QpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JLyogU0VORF9FWFRfQ1NEIGNvbW1hbmQgKi8KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQwLCAweEZGLAotCQkJMHg0MCB8IFNFTkRfRVhUX0NTRCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMSwgMHhGRiwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMiwgMHhGRiwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMywgMHhGRiwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01ENCwgMHhGRiwgMCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CWVRFX0NOVF9MLCAweEZGLCAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CWVRFX0NOVF9ILCAweEZGLCAyKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfTCwgMHhGRiwgMSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQkxPQ0tfQ05UX0gsIDB4RkYsIDApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMiwgMHhGRiwKLQkJICAgICAgIFNEX0NBTENVTEFURV9DUkM3IHwgU0RfQ0hFQ0tfQ1JDMTYgfCBTRF9OT19XQUlUX0JVU1lfRU5ECi0JCSAgICAgICB8IFNEX0NIRUNLX0NSQzcgfCBTRF9SU1BfTEVOXzYpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBQSU5HUE9OR19CVUZGRVIpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgU0RfVE1fTk9STUFMX1JFQUQgfCBTRF9UUkFOU0ZFUl9TVEFSVCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIFNEX1RSQU5TRkVSX0VORCwKLQkJICAgICAgIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgMTk2LCAweEZGLCAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgMjEyLCAweEZGLCAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgMjEzLCAweEZGLCAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgMjE0LCAweEZGLCAwKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFBQQlVGX0JBU0UyICsgMjE1LCAweEZGLCAwKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgNiwgMTAwMCk7Ci0KLQlpZiAoQ0hFQ0tfU0RfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1RJTUVET1VUKSB7Ci0JCQlydHM1MXhfY2xlYXJfc2RfZXJyb3IoY2hpcCk7Ci0JCQlzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQkgICAgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDApOwotCQl9Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JcnRzNTF4X3JlYWRfcnNwX2J1ZihjaGlwLCAwLCBidWYsIDYpOwotCi0JaWYgKGJ1ZlswXSAmIFNEX1RSQU5TRkVSX0VSUikgewotCQlzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCSAgICBTRF9SU1BfVFlQRV9SMSwgTlVMTCwgMCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCWlmIChDSEtfTU1DX1NFQ1RPUl9NT0RFKHNkX2NhcmQpKQotCQlzZF9jYXJkLT5jYXBhY2l0eSA9Ci0JCSAgICAoKHUzMikgYnVmWzVdIDw8IDI0KSB8ICgodTMyKSBidWZbNF0gPDwgMTYpIHwKLQkJICAgICgodTMyKSBidWZbM10gPDwgOCkgfCAoKHUzMikgYnVmWzJdKTsKLQlpZiAoQ0hFQ0tfVUhTNTAoY2hpcCkpCi0JCWNhcmRfdHlwZV9tYXNrID0gMHgwNzsKLQllbHNlCi0JCWNhcmRfdHlwZV9tYXNrID0gMHgwMzsKLQotCWNhcmRfdHlwZSA9IGJ1ZlsxXSAmIGNhcmRfdHlwZV9tYXNrOwotCWlmIChjYXJkX3R5cGUpIHsKLQkJLyogQ0FSRCBUWVBFIEZJRUxEID0gRERSNTJNSHosIDUyTUh6IG9yIDI2TUh6ICovCi0JCXU4IHJzcFs1XTsKLQotCQlpZiAoY2FyZF90eXBlICYgMHgwNCkKLQkJCVNFVF9NTUNfRERSNTIoc2RfY2FyZCk7Ci0JCWVsc2UgaWYgKGNhcmRfdHlwZSAmIDB4MDIpCi0JCQlTRVRfTU1DXzUyTShzZF9jYXJkKTsKLQkJZWxzZQotCQkJU0VUX01NQ18yNk0oc2RfY2FyZCk7Ci0KLQkJcmV0dmFsID0KLQkJICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU1dJVENILCAweDAzQjkwMTAwLAotCQkJCQlTRF9SU1BfVFlQRV9SMWIsIHJzcCwgNSk7Ci0JCWlmICgocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB8fCAocnNwWzRdICYgTU1DX1NXSVRDSF9FUlIpKQotCQkJQ0xSX01NQ19IUyhzZF9jYXJkKTsKLQl9Ci0Jc2RfY2hvb3NlX3Byb3Blcl9jbG9jayhjaGlwKTsKLQlyZXR2YWwgPSBzd2l0Y2hfY2xvY2soY2hpcCwgc2RfY2FyZC0+c2RfY2xvY2spOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JLyogVGVzdCBCdXMgUHJvY2VkdXJlICovCi0JaWYgKG1tY190ZXN0X3N3aXRjaF9idXMoY2hpcCwgTU1DXzhCSVRfQlVTKSA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQlTRVRfTU1DXzhCSVQoc2RfY2FyZCk7Ci0JCWNoaXAtPmNhcmRfYnVzX3dpZHRoW2NoaXAtPmNhcmQybHVuW1NEX0NBUkRdXSA9IDg7Ci0JfSBlbHNlIGlmIChtbWNfdGVzdF9zd2l0Y2hfYnVzKGNoaXAsIE1NQ180QklUX0JVUykgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJU0VUX01NQ180QklUKHNkX2NhcmQpOwotCQljaGlwLT5jYXJkX2J1c193aWR0aFtjaGlwLT5jYXJkMmx1bltTRF9DQVJEXV0gPSA0OwotCX0gZWxzZSB7Ci0JCUNMUl9NTUNfOEJJVChzZF9jYXJkKTsKLQkJQ0xSX01NQ180QklUKHNkX2NhcmQpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCByZXNldF9tbWMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsLCBpID0gMCwgaiA9IDAsIGsgPSAwOwotCXU4IHJzcFsxNl07Ci0JdTggc3BlY192ZXIgPSAwOwotCXU4IGNoYW5nZV90b19kZHI1MiA9IDE7Ci0JdTggY21kWzVdOwotCi1NTUNfRERSX0ZBSUw6Ci0KLQlyZXR2YWwgPSBzZF9wcmVwYXJlX3Jlc2V0KGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JU0VUX01NQyhzZF9jYXJkKTsKLQotUlRZX01NQ19SU1Q6Ci0JcmV0dmFsID0KLQkgICAgc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBHT19JRExFX1NUQVRFLCAwLCBTRF9SU1BfVFlQRV9SMCwgTlVMTCwKLQkJCQkwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWRvIHsKLQkJewotCQkJdTggdGVtcCA9IDA7Ci0JCQlydHM1MXhfcmVhZF9yZWdpc3RlcihjaGlwLCBDQVJEX0lOVF9QRU5ELCAmdGVtcCk7Ci0JCQlpZiAodGVtcCAmIFNEX0lOVCkgewotCQkJCWNoaXAtPnJlc2V0X25lZWRfcmV0cnkgPSAxOwotCQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX0lOVF9QRU5ELAotCQkJCQkJICAgICAgWERfSU5UIHwgU0RfSU5UIHwgTVNfSU5ULAotCQkJCQkJICAgICAgWERfSU5UIHwgU0RfSU5UIHwgTVNfSU5UKTsKLQkJCQlzZF9zZXRfcmVzZXRfZmFpbChjaGlwLCBNTUNfUkVTRVRfRkFJTCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCi0JCS8qIENNRCAgMSAqLwotCQlyZXR2YWwgPSBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfT1BfQ09ORCwKLQkJCQkJICAgICAoU1VQUE9SVF9WT0xUQUdFIHwgMHg0MDAwMDAwMCksCi0JCQkJCSAgICAgU0RfUlNQX1RZUEVfUjMsIHJzcCwgNSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgU0RfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKSB7Ci0JCQkJc2Rfc2V0X3Jlc2V0X2ZhaWwoY2hpcCwgTU1DX1JFU0VUX0ZBSUwpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0KLQkJCWlmIChzZF9jaGVja19lcnJfY29kZShjaGlwLCBTRF9CVVNZKQotCQkJICAgIHx8IHNkX2NoZWNrX2Vycl9jb2RlKGNoaXAsIFNEX1RPX0VSUikpIHsKLQkJCQlrKys7Ci0JCQkJaWYgKGsgPCAyMCkgewotCQkJCQlzZF9jbHJfZXJyX2NvZGUoY2hpcCk7Ci0JCQkJCWdvdG8gUlRZX01NQ19SU1Q7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWorKzsKLQkJCQlpZiAoaiA8IDEwMCkgewotCQkJCQlzZF9jbHJfZXJyX2NvZGUoY2hpcCk7Ci0JCQkJCWdvdG8gUlRZX01NQ19SU1Q7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQl3YWl0X3RpbWVvdXQoMjApOwotCQlpKys7Ci0JfSB3aGlsZSAoIShyc3BbMV0gJiAweDgwKSAmJiAoaSA8IDEwMCkpOyAvKiBOb3QgY29tcGxldGUgcG93ZXIgb24gKi8KLQotCWlmIChpID09IDEwMCkgewotCQkvKiBUaW1lIG91dCAqLwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmICgocnNwWzFdICYgMHg2MCkgPT0gMHg0MCkKLQkJU0VUX01NQ19TRUNUT1JfTU9ERShzZF9jYXJkKTsKLQllbHNlCi0JCUNMUl9NTUNfU0VDVE9SX01PREUoc2RfY2FyZCk7Ci0KLQkvKiBDTUQgMiAqLwotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgQUxMX1NFTkRfQ0lELCAwLCBTRF9SU1BfVFlQRV9SMiwgTlVMTCwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkvKiBDTUQgMyAqLwotCXNkX2NhcmQtPnNkX2FkZHIgPSAweDAwMTAwMDAwOwotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VUX1JFTEFUSVZFX0FERFIsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJU0RfUlNQX1RZUEVfUjYsIHJzcCwgNSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkvKiBHZXQgQ1NEIHJlZ2lzdGVyIGZvciBDYWxjdWxhdGluZyBUaW1pbmcsQ2FwYWNpdHkKLQkgKiBDaGVjayBDU0QgdG8gZGV0ZXJtaW5lIGFzIGlmIHRoaXMgaXMgdGhlIFNEIFJPTSBjYXJkICovCi0JcmV0dmFsID0gc2RfY2hlY2tfY3NkKGNoaXAsIDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCS8qIEdldCBNTUMgU3BlY19WZXIgaW4gdGhlIENTRCByZWdpc3RlciAqLwotCXNwZWNfdmVyID0gKHNkX2NhcmQtPnJhd19jc2RbMF0gJiAweDNDKSA+PiAyOwotCi0JLyogU2VsZWN0IE1NQyBjYXJkICovCi0JcmV0dmFsID0gcnRzNTF4X3NkX3NlbGVjdF9jYXJkKGNoaXAsIDEpOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JLyogU2V0IGJsb2NrIGxlbmd0aCA1MTIgYnl0ZXMgZm9yIGFsbCBibG9jayBjb21tYW5kcyAqLwotCXJldHZhbCA9Ci0JICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VUX0JMT0NLTEVOLCAweDIwMCwgU0RfUlNQX1RZUEVfUjEsIE5VTEwsCi0JCQkJMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFNEX0NGRzEsIFNEX0NMS19ESVZJREVfTUFTSywgU0RfQ0xLX0RJVklERV8wKTsKLQotCWlmIChjaGlwLT5pY192ZXJzaW9uIDwgMikKLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNEMzBfRFJJVkVfU0VMLCBTRDMwX0RSSVZFX01BU0ssCi0JCQkJICAgICAgMHgwMik7Ci0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfRFJJVkVfU0VMLCBTRDIwX0RSSVZFX01BU0ssIERSSVZFXzhtQSk7Ci0KLQljaGlwLT5jYXJkX2J1c193aWR0aFtjaGlwLT5jYXJkMmx1bltTRF9DQVJEXV0gPSAxOwotCWlmIChzcGVjX3ZlciA9PSA0KSB7Ci0JCS8qIE1NQyA0LnggQ2FyZHMgKi8KLQkJKHZvaWQpbW1jX3N3aXRjaF90aW1pbmdfYnVzKGNoaXApOwotCX0KLQotCWlmIChDSEtfTU1DX1NFQ1RPUl9NT0RFKHNkX2NhcmQpICYmIChzZF9jYXJkLT5jYXBhY2l0eSA9PSAwKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCWlmIChDSEtfTU1DX0REUjUyKHNkX2NhcmQpICYmIGNoYW5nZV90b19kZHI1MikgewotCQkvKiBDYXJkIGlzIGV4dHJhY3RlZCB3aGlsZSBpZGVudGlmeWluZyAqLwotCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIFNEX0NBUkQpID09IENEX05PVF9FWElTVCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQkJcmV0dmFsID0gc2Rfc2V0X2luaXRfcGFyYShjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJQ0xSX01NQ19ERFI1MihzZF9jYXJkKTsKLQkJCXNkX2luaXRfcG93ZXIoY2hpcCk7Ci0JCQljaGFuZ2VfdG9fZGRyNTIgPSAwOwotCQkJZ290byBNTUNfRERSX0ZBSUw7Ci0JCX0KLQotCQlyZXR2YWwgPSBtbWNfZGRyX3R1bmluZyhjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJQ0xSX01NQ19ERFI1MihzZF9jYXJkKTsKLQkJCXNkX2luaXRfcG93ZXIoY2hpcCk7Ci0JCQljaGFuZ2VfdG9fZGRyNTIgPSAwOwotCQkJZ290byBNTUNfRERSX0ZBSUw7Ci0JCX0KLQotCQlpZiAoU1RBVFVTX1NVQ0NFU1MgPT0KLQkJICAgIHNkX3dhaXRfY3VycmVudHN0YXRlX2RhdGFyZWFkeShjaGlwLCAweDA4LCAxLCAyMCkpIHsKLQkJCWNtZFswXSA9IDB4NDAgfCBSRUFEX1NJTkdMRV9CTE9DSzsKLQkJCWNtZFsxXSA9IDB4MDA7Ci0JCQljbWRbMl0gPSAweDAwOwotCQkJY21kWzNdID0gMHgwMDsKLQkJCWNtZFs0XSA9IDB4MDA7Ci0JCQlpZiAoQ0hLX01NQ184QklUKHNkX2NhcmQpKSB7Ci0JCQkJcmV0dmFsID0KLQkJCQkgICAgc2RfcmVhZF9kYXRhKGNoaXAsIFNEX1RNX05PUk1BTF9SRUFELCBjbWQsCi0JCQkJCQkgNSwgNTEyLCAxLCBTRF9CVVNfV0lEVEhfOCwKLQkJCQkJCSBOVUxMLCAwLCA2MDApOwotCQkJfSBlbHNlIGlmIChDSEtfTU1DXzRCSVQoc2RfY2FyZCkpIHsKLQkJCQlyZXR2YWwgPQotCQkJCSAgICBzZF9yZWFkX2RhdGEoY2hpcCwgU0RfVE1fTk9STUFMX1JFQUQsIGNtZCwKLQkJCQkJCSA1LCA1MTIsIDEsIFNEX0JVU19XSURUSF80LAotCQkJCQkJIE5VTEwsIDAsIDYwMCk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHZhbCA9Ci0JCQkJICAgIHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9OT1JNQUxfUkVBRCwgY21kLAotCQkJCQkJIDUsIDUxMiwgMSwgU0RfQlVTX1dJRFRIXzEsCi0JCQkJCQkgTlVMTCwgMCwgNjAwKTsKLQkJCX0KLQotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCUNMUl9NTUNfRERSNTIoc2RfY2FyZCk7Ci0JCQkJY2hhbmdlX3RvX2RkcjUyID0gMDsKLQkJCQlSVFM1MVhfREVCVUdQKCJyZWFkIGxiYTAgZmFpbCwiCi0JCQkJCQkJImdvdG8gU0QyMCBtb2RlXG4iKTsKLQkJCQlzZF9pbml0X3Bvd2VyKGNoaXApOwotCQkJCWdvdG8gTU1DX0REUl9GQUlMOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9jYXJkX3N0YXR1cyhjaGlwLCAmKGNoaXAtPmNhcmRfc3RhdHVzKSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JaWYgKGNoaXAtPmNhcmRfc3RhdHVzICYgU0RfV1ApCi0JCWNoaXAtPmNhcmRfd3AgfD0gU0RfQ0FSRDsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF9yZXNldF9zZF9jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQlpbnQgaTsKLQotCW1lbXNldChzZF9jYXJkLCAwLCBzaXplb2Yoc3RydWN0IHNkX2luZm8pKTsKLQotCS8qIEluaXQgdmFyaWFibGVzICovCi0Jc2RfY2FyZC0+c2RfdHlwZSA9IDA7Ci0Jc2RfY2FyZC0+c2VxX21vZGUgPSAwOwotCXNkX2NhcmQtPnNkX2RhdGFfYnVmX3JlYWR5ID0gMDsKLQlzZF9jYXJkLT5jYXBhY2l0eSA9IDA7Ci0Jc2RfY2FyZC0+c2Rfc3dpdGNoX2ZhaWwgPSAwOwotCi0Jc2RfY2xlYXJfcmVzZXRfZmFpbChjaGlwKTsKLQlydHM1MXhfZW5hYmxlX2NhcmRfY2xvY2soY2hpcCwgU0RfQ0FSRCk7Ci0KLQlzZF9pbml0X3Bvd2VyKGNoaXApOwotCi0JY2hpcC0+cmVzZXRfbmVlZF9yZXRyeSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlpZiAoIWNoaXAtPm9wdGlvbi5yZXNldF9tbWNfZmlyc3QpIHsgLyogcmVzZXQgc2QgZmlyc3QgKi8KLQkJCXJldHZhbCA9IHJlc2V0X3NkKGNoaXApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCS8qIFN3aXRjaCBTRCBidXMgdG8gM1YzIHNpZ25hbCAqLwotCQkJCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgU0RfUEFEX0NUTCwKLQkJCQkJCSBTRF9JT19VU0lOR18xVjgsIDApOwotCQkJCWlmIChzZF9jaGVja19yZXNldF9mYWlsKGNoaXAsIFNEX1JFU0VUX0ZBSUwpKQotCQkJCQlzZF9jbGVhcl9yZXNldF9mYWlsKGNoaXApOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gcmVzZXRfbW1jKGNoaXApOwotCQkJfQotCQl9IGVsc2UgeyAvKiByZXNldCBNTUMgZmlyc3QgKi8KLQkJCXJldHZhbCA9IHJlc2V0X21tYyhjaGlwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlpZiAoc2RfY2hlY2tfcmVzZXRfZmFpbChjaGlwLCBNTUNfUkVTRVRfRkFJTCkpIHsKLQkJCQkJc2RfY2xlYXJfcmVzZXRfZmFpbChjaGlwKTsKLQkJCQl9IGVsc2UgewotCQkJCQlyZXR2YWwgPSByZXNldF9zZChjaGlwKTsKLQkJCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCQkJLyogU3dpdGNoIFNEIGJ1cyB0bwotCQkJCQkJICogM1YzIHNpZ25hbCAqLwotCQkJCQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLAotCQkJCQkJCVNEX1BBRF9DVEwsCi0JCQkJCQkJU0RfSU9fVVNJTkdfMVY4LCAwKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmICgocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB8fCAoIWNoaXAtPnJlc2V0X25lZWRfcmV0cnkpKSB7Ci0JCQkvKiBpZiByZXNldCBzdWNjZXNzIG9yIGRvbid0IG5lZWQgcmV0cnksdGhlbiBicmVhayAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBTRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCS8qIGNhcmQgaXMgZXh0cmFjdGVkICovCi0JCQlicmVhazsKLQkJfQotCQlSVFM1MVhfREVCVUdQKCJyZXRyeSByZXNldCBzZCBjYXJkLCVkXG4iLCBpKTsKLQkJY2hpcC0+cmVzZXRfbmVlZF9yZXRyeSA9IDA7Ci0JfQotCi0Jc2RfY2xlYXJfcmVzZXRfZmFpbChjaGlwKTsKLQljaGlwLT5yZXNldF9uZWVkX3JldHJ5ID0gMDsKLQotCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcxLCBTRF9DTEtfRElWSURFX01BU0ssCi0JCQkgICAgICAgU0RfQ0xLX0RJVklERV8wKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0gsIDB4RkYsIDIpOwotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfSBlbHNlIHsKLQkJY2hpcC0+Y2FwYWNpdHlbY2hpcC0+Y2FyZDJsdW5bU0RfQ0FSRF1dID0gc2RfY2FyZC0+Y2FwYWNpdHkgPSAwOwotCQlpZiAoY2hpcC0+b3B0aW9uLnJlc2V0X29yX3J3X2ZhaWxfc2V0X3BhZF9kcml2ZSkgewotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfRFJJVkVfU0VMLAotCQkJCQkgICAgICBTRDIwX0RSSVZFX01BU0ssIERSSVZFXzhtQSk7Ci0JCX0KLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQljaGlwLT5jYXBhY2l0eVtjaGlwLT5jYXJkMmx1bltTRF9DQVJEXV0gPSBzZF9jYXJkLT5jYXBhY2l0eTsKLQotCWlmIChjaGlwLT5vcHRpb24uc2Rfc2VuZF9zdGF0dXNfZW4pIHsKLQkJc2RfY2FyZC0+c2Rfc2VuZF9zdGF0dXNfZW4gPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChzZF9jYXJkLT5jYXBhY2l0eSA+IDB4MjAwMDApIHsgLyogNjRNQiAqLwotCQkJc2RfY2FyZC0+c2Rfc2VuZF9zdGF0dXNfZW4gPSAwOwotCQl9IGVsc2UgewotCQkJc2RfY2FyZC0+c2Rfc2VuZF9zdGF0dXNfZW4gPSAxOwotCQl9Ci0JfQotCVJUUzUxWF9ERUJVR1AoInNkX2NhcmQtPnNkX3NlbmRfc3RhdHVzID0gJWRcbiIsCi0JCSAgICAgICBzZF9jYXJkLT5zZF9zZW5kX3N0YXR1c19lbik7Ci0KLQlyZXR2YWwgPSBzZF9zZXRfaW5pdF9wYXJhKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JUlRTNTFYX0RFQlVHUCgic2RfY2FyZC0+c2RfdHlwZSA9IDB4JXhcbiIsIHNkX2NhcmQtPnNkX3R5cGUpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi0jZGVmaW5lIFdBSVRfREFUQV9SRUFEWV9SVFlfQ05UCQkyNTUKLQotc3RhdGljIGludCB3YWl0X2RhdGFfYnVmX3JlYWR5KHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IGksIHJldHZhbDsKLQotCWZvciAoaSA9IDA7IGkgPCBXQUlUX0RBVEFfUkVBRFlfUlRZX0NOVDsgaSsrKSB7Ci0JCWlmIChtb25pdG9yX2NhcmRfY2QoY2hpcCwgU0RfQ0FSRCkgPT0gQ0RfTk9UX0VYSVNUKQotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCQlzZF9jYXJkLT5zZF9kYXRhX2J1Zl9yZWFkeSA9IDA7Ci0KLQkJcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRU5EX1NUQVRVUywKLQkJCQkJICAgICBzZF9jYXJkLT5zZF9hZGRyLCBTRF9SU1BfVFlQRV9SMSwKLQkJCQkJICAgICBOVUxMLCAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCWlmIChzZF9jYXJkLT5zZF9kYXRhX2J1Zl9yZWFkeSkKLQkJCXJldHVybiBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLAotCQkJCQkJICAgc2RfY2FyZC0+c2RfYWRkciwKLQkJCQkJCSAgIFNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwKTsKLQl9Ci0KLQlzZF9zZXRfZXJyX2NvZGUoY2hpcCwgU0RfVE9fRVJSKTsKLQotCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNkX3N0b3Bfc2VxX21vZGUoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKHNkX2NhcmQtPnNlcV9tb2RlKSB7Ci0JCXJldHZhbCA9IHJ0czUxeF9zZF9zd2l0Y2hfY2xvY2soY2hpcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlyZXR1cm47Ci0KLQkJcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTVE9QX1RSQU5TTUlTU0lPTiwgMCwKLQkJCQkJICAgICBTRF9SU1BfVFlQRV9SMWIsIE5VTEwsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJc2Rfc2V0X2Vycl9jb2RlKGNoaXAsIFNEX1NUU19FUlIpOwotCQlzZF9jYXJkLT5zZXFfbW9kZSA9IDA7Ci0KLQkJcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcihjaGlwLCBNQ19GSUZPX0NUTCwgRklGT19GTFVTSCwKLQkJCQkJICBGSUZPX0ZMVVNIKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNkX2F1dG9fdHVuZV9jbG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlpZiAoY2hpcC0+YXNpY19jb2RlKSB7Ci0JCWlmIChzZF9jYXJkLT5zZF9jbG9jayA+IDMwKQotCQkJc2RfY2FyZC0+c2RfY2xvY2sgLT0gMjA7Ci0JfSBlbHNlIHsKLQkJaWYgKHNkX2NhcmQtPnNkX2Nsb2NrID09IENMS18xMDApCi0JCQlzZF9jYXJkLT5zZF9jbG9jayA9IENMS184MDsKLQkJZWxzZSBpZiAoc2RfY2FyZC0+c2RfY2xvY2sgPT0gQ0xLXzgwKQotCQkJc2RfY2FyZC0+c2RfY2xvY2sgPSBDTEtfNjA7Ci0JCWVsc2UgaWYgKHNkX2NhcmQtPnNkX2Nsb2NrID09IENMS182MCkKLQkJCXNkX2NhcmQtPnNkX2Nsb2NrID0gQ0xLXzUwOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9zZF9zd2l0Y2hfY2xvY2soY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfc2Rfcncoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBzdGFydF9zZWN0b3IsCi0JICB1MTYgc2VjdG9yX2NudCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JdTMyIGRhdGFfYWRkcjsKLQlpbnQgcmV0dmFsOwotCXU4IGZsYWc7Ci0JdW5zaWduZWQgaW50IHBpcGU7Ci0JdTggc3RhZ2VmbGFnOwotCi0Jc2RfY2FyZC0+Y291bnRlciA9IDA7Ci0KLQlpZiAoIUNIS19TRF9IQ1hDKHNkX2NhcmQpICYmICFDSEtfTU1DX1NFQ1RPUl9NT0RFKHNkX2NhcmQpKQotCQlkYXRhX2FkZHIgPSBzdGFydF9zZWN0b3IgPDwgOTsKLQllbHNlCi0JCWRhdGFfYWRkciA9IHN0YXJ0X3NlY3RvcjsKLQotCVJUUzUxWF9ERUJVR1AoInJ0czUxeF9zZF9ydywgZGF0YV9hZGRyID0gMHgleFxuIiwgZGF0YV9hZGRyKTsKLQotCXNkX2Nscl9lcnJfY29kZShjaGlwKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZF9zd2l0Y2hfY2xvY2soY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlpZiAoc2RfY2FyZC0+c2VxX21vZGUgJiYgKChzZF9jYXJkLT5wcmVfZGlyICE9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24pCi0JCQkJICB8fAotCQkJCSAgKChzZF9jYXJkLT5wcmVfc2VjX2FkZHIgKwotCQkJCSAgICBzZF9jYXJkLT5wcmVfc2VjX2NudCkgIT0gc3RhcnRfc2VjdG9yKSkpIHsKLQkJaWYgKChzZF9jYXJkLT5wcmVfZGlyID09IERNQV9GUk9NX0RFVklDRSkKLQkJICAgICYmICFDSEtfU0QzMF9TUEVFRChzZF9jYXJkKQotCQkgICAgJiYgIUNIS19TRF9IUyhzZF9jYXJkKQotCQkgICAgJiYgIUNIS19NTUNfSFMoc2RfY2FyZCkKLQkJICAgICYmIHNkX2NhcmQtPnNkX3NlbmRfc3RhdHVzX2VuKSB7Ci0JCQlzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLAotCQkJCQkgICAgc2RfY2FyZC0+c2RfYWRkciwgU0RfUlNQX1RZUEVfUjEsCi0JCQkJCSAgICBOVUxMLCAwKTsKLQkJfQotCi0JCXJldHZhbCA9Ci0JCSAgICBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNUT1BfVFJBTlNNSVNTSU9OLCAwLAotCQkJCQlTRF9SU1BfVFlQRV9SMWIsIE5VTEwsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlzZF9zZXRfZXJyX2NvZGUoY2hpcCwgU0RfU1RTX0VSUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgc2RfcGFyc2VfZXJyX2NvZGUoY2hpcCkpOwotCQl9Ci0KLQkJc2RfY2FyZC0+c2VxX21vZGUgPSAwOwotCi0JCVJUUzUxWF9XUklURV9SRUcoY2hpcCwgTUNfRklGT19DVEwsIEZJRk9fRkxVU0gsIEZJRk9fRkxVU0gpOwotCi0JCWlmICghQ0hLX1NEMzBfU1BFRUQoc2RfY2FyZCkKLQkJICAgICYmICFDSEtfU0RfSFMoc2RfY2FyZCkKLQkJICAgICYmICFDSEtfTU1DX0hTKHNkX2NhcmQpCi0JCSAgICAmJiBzZF9jYXJkLT5zZF9zZW5kX3N0YXR1c19lbikgewotCQkJLyogcmFuZG9tIHJ3LCBzbyBwcmVfc2VjX2NudCA8IDB4ODAgKi8KLQkJCXNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VORF9TVEFUVVMsCi0JCQkJCSAgICBzZF9jYXJkLT5zZF9hZGRyLCBTRF9SU1BfVFlQRV9SMSwKLQkJCQkJICAgIE5VTEwsIDApOwotCQl9Ci0JfQotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMHgwMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfSCwgMHhGRiwgMHgwMik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQkxPQ0tfQ05UX0wsIDB4RkYsCi0JCSAgICAgICAodTgpIHNlY3Rvcl9jbnQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9ILCAweEZGLAotCQkgICAgICAgKHU4KSAoc2VjdG9yX2NudCA+PiA4KSk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLCAweDAxLAotCQkgICAgICAgUklOR19CVUZGRVIpOwotCi0JaWYgKENIS19NTUNfOEJJVChzZF9jYXJkKSkKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwgMHgwMywKLQkJCSAgICAgICBTRF9CVVNfV0lEVEhfOCk7Ci0JZWxzZSBpZiAoQ0hLX01NQ180QklUKHNkX2NhcmQpIHx8IENIS19TRChzZF9jYXJkKSkKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMSwgMHgwMywKLQkJCSAgICAgICBTRF9CVVNfV0lEVEhfNCk7Ci0JZWxzZQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcxLCAweDAzLAotCQkJICAgICAgIFNEX0JVU19XSURUSF8xKTsKLQotCWlmIChzZF9jYXJkLT5zZXFfbW9kZSkgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcyLCAweEZGLAotCQkJICAgICAgIFNEX05PX0NBTENVTEFURV9DUkM3IHwgU0RfQ0hFQ0tfQ1JDMTYgfAotCQkJICAgICAgIFNEX05PX1dBSVRfQlVTWV9FTkQgfCBTRF9OT19DSEVDS19DUkM3IHwKLQkJCSAgICAgICBTRF9SU1BfTEVOXzApOwotCi0JCXJ0czUxeF90cmFuc19kbWFfZW5hYmxlKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24sIGNoaXAsIHNlY3Rvcl9jbnQgKiA1MTIsCi0JCQkJIERNQV81MTIpOwotCi0JCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgewotCQkJZmxhZyA9IE1PREVfQ0RJUjsKLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLCAweEZGLAotCQkJCSAgICAgICBTRF9UTV9BVVRPX1JFQURfMyB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQkJfSBlbHNlIHsKLQkJCWZsYWcgPSBNT0RFX0NET1I7Ci0JCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgMHhGRiwKLQkJCQkgICAgICAgU0RfVE1fQVVUT19XUklURV8zIHwgU0RfVFJBTlNGRVJfU1RBUlQpOwotCQl9Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCi0JCQkgICAgICAgU0RfVFJBTlNGRVJfRU5ELCBTRF9UUkFOU0ZFUl9FTkQpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBmbGFnLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCQlSVFM1MVhfREVCVUdQKCJTRC9NTUMgQ01EICVkXG4iLCBSRUFEX01VTFRJUExFX0JMT0NLKTsKLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDAsIDB4RkYsCi0JCQkJICAgICAgIDB4NDAgfCBSRUFEX01VTFRJUExFX0JMT0NLKTsKLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDEsIDB4RkYsCi0JCQkJICAgICAgICh1OCkgKGRhdGFfYWRkciA+PiAyNCkpOwotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMiwgMHhGRiwKLQkJCQkgICAgICAgKHU4KSAoZGF0YV9hZGRyID4+IDE2KSk7Ci0JCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQzLCAweEZGLAotCQkJCSAgICAgICAodTgpIChkYXRhX2FkZHIgPj4gOCkpOwotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01ENCwgMHhGRiwKLQkJCQkgICAgICAgKHU4KSBkYXRhX2FkZHIpOwotCi0JCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcyLCAweEZGLAotCQkJCSAgICAgICBTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwKLQkJCQkgICAgICAgU0RfTk9fV0FJVF9CVVNZX0VORCB8IFNEX0NIRUNLX0NSQzcgfAotCQkJCSAgICAgICBTRF9SU1BfTEVOXzYpOwotCi0JCQlydHM1MXhfdHJhbnNfZG1hX2VuYWJsZShzcmItPnNjX2RhdGFfZGlyZWN0aW9uLCBjaGlwLAotCQkJCQkgc2VjdG9yX2NudCAqIDUxMiwgRE1BXzUxMik7Ci0KLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLCAweEZGLAotCQkJCSAgICAgICBTRF9UTV9BVVRPX1JFQURfMiB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFNEX1RSQU5TRkVSLAotCQkJCSAgICAgICBTRF9UUkFOU0ZFUl9FTkQsIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQkJCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NESVIsIDEwMCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgNTApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQotCQkJCXNkX3NldF9lcnJfY29kZShjaGlwLCBTRF9UT19FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBzZF9wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JCQl9Ci0KLQkJCXJldHZhbCA9IHdhaXRfZGF0YV9idWZfcmVhZHkoY2hpcCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJc2Rfc2V0X2Vycl9jb2RlKGNoaXAsIFNEX1RPX0VSUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIHNkX3BhcnNlX2Vycl9jb2RlKGNoaXApKTsKLQkJCX0KLQotCQkJcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBXUklURV9NVUxUSVBMRV9CTE9DSywKLQkJCQkJCSAgICAgZGF0YV9hZGRyLCBTRF9SU1BfVFlQRV9SMSwKLQkJCQkJCSAgICAgTlVMTCwgMCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJc2Rfc2V0X2Vycl9jb2RlKGNoaXAsIFNEX0NSQ19FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCBzZF9wYXJzZV9lcnJfY29kZShjaGlwKSk7Ci0JCQl9Ci0KLQkJCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMiwgMHhGRiwKLQkJCQkgICAgICAgU0RfTk9fQ0FMQ1VMQVRFX0NSQzcgfCBTRF9DSEVDS19DUkMxNiB8Ci0JCQkJICAgICAgIFNEX05PX1dBSVRfQlVTWV9FTkQgfCBTRF9OT19DSEVDS19DUkM3IHwKLQkJCQkgICAgICAgU0RfUlNQX0xFTl8wKTsKLQotCQkJcnRzNTF4X3RyYW5zX2RtYV9lbmFibGUoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiwgY2hpcCwKLQkJCQkJIHNlY3Rvcl9jbnQgKiA1MTIsIERNQV81MTIpOwotCi0JCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgMHhGRiwKLQkJCQkgICAgICAgU0RfVE1fQVVUT19XUklURV8zIHwgU0RfVFJBTlNGRVJfU1RBUlQpOwotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCi0JCQkJICAgICAgIFNEX1RSQU5TRkVSX0VORCwgU0RfVFJBTlNGRVJfRU5EKTsKLQotCQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ0RPUiwgMTAwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQotCQlzZF9jYXJkLT5zZXFfbW9kZSA9IDE7Ci0JfQotCi0JaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCXBpcGUgPSBSQ1ZfQlVMS19QSVBFKGNoaXApOwotCQlzdGFnZWZsYWcgPSBTVEFHRV9ESTsKLQl9IGVsc2UgewotCQlwaXBlID0gU05EX0JVTEtfUElQRShjaGlwKTsKLQkJc3RhZ2VmbGFnID0gU1RBR0VfRE87Ci0JfQotCi0JcmV0dmFsID0KLQkgICAgcnRzNTF4X3RyYW5zZmVyX2RhdGFfcmNjKGNoaXAsIHBpcGUsIHNjc2lfc2dsaXN0KHNyYiksCi0JCQkJICAgICBzY3NpX2J1ZmZsZW4oc3JiKSwgc2NzaV9zZ19jb3VudChzcmIpLAotCQkJCSAgICAgTlVMTCwgMTAwMDAsIHN0YWdlZmxhZyk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQl1OCBzdGF0ID0gMDsKLQkJaW50IGVyciA9IHJldHZhbDsKLQotCQlzZF9wcmludF9kZWJ1Z19yZWcoY2hpcCk7Ci0KLQkJcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX1NUQVQxLCAmc3RhdCk7Ci0JCVJUUzUxWF9ERUJVR1AoIlNEX1NUQVQxOiAweCV4XG4iLCBzdGF0KTsKLQotCQlydHM1MXhfY2xlYXJfc2RfZXJyb3IoY2hpcCk7Ci0KLQkJcmV0dmFsID0KLQkJICAgIHNkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU1RPUF9UUkFOU01JU1NJT04sIDAsCi0JCQkJCVNEX1JTUF9UWVBFX1IxYiwgTlVMTCwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXNkX3NldF9lcnJfY29kZShjaGlwLCBTRF9TVFNfRVJSKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0KLQkJaWYgKHN0YXQgJiAoU0RfQ1JDN19FUlIgfCBTRF9DUkMxNl9FUlIgfCBTRF9DUkNfV1JJVEVfRVJSKSkgewotCQkJUlRTNTFYX0RFQlVHUCgiU0QgQ1JDIGVycm9yLCB0dW5lIGNsb2NrIVxuIik7Ci0JCQlzZF9hdXRvX3R1bmVfY2xvY2soY2hpcCk7Ci0JCX0KLQotCQlzZF9jYXJkLT5zZXFfbW9kZSA9IDA7Ci0KLQkJVFJBQ0VfUkVUKGNoaXAsIGVycik7Ci0JfQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDIwMDApOwotCWlmIChDSEVDS19TRF9UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkpIHsKLQkJcnRzNTF4X2NsZWFyX3NkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXNkX2NhcmQtPnByZV9zZWNfYWRkciA9IHN0YXJ0X3NlY3RvcjsKLQlzZF9jYXJkLT5wcmVfc2VjX2NudCA9IHNlY3Rvcl9jbnQ7Ci0Jc2RfY2FyZC0+cHJlX2RpciA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb247Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXZvaWQgcnRzNTF4X3NkX2NsZWFudXBfd29yayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCi0JaWYgKHNkX2NhcmQtPnNlcV9tb2RlKSB7Ci0JCVJUUzUxWF9ERUJVR1AoIlNEOiBzdG9wIHRyYW5zbWlzc2lvblxuIik7Ci0JCXNkX3N0b3Bfc2VxX21vZGUoY2hpcCk7Ci0JCXNkX2NhcmQtPmNvdW50ZXIgPSAwOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNkX2ZpbGxfcG93ZXJfb2ZmX2NhcmQzdjMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfQ0xLX0VOLCBTRF9DTEtfRU4sIDApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9PRSwgU0RfT1VUUFVUX0VOLCAwKTsKLQlpZiAoIWNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKSB7Ci0jaWZkZWYgU0RfWERfSU9fRk9MTE9XX1BXUgotCQlpZiAoQ0hFQ0tfUEtHKGNoaXAsIExRRlA0OCkKLQkJICAgIHx8IGNoaXAtPm9wdGlvbi5ydHM1MTI5X0QzMzE4X29mZl9lbmFibGUpCi0JCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BXUl9DVEwsCi0JCQkJICAgICAgIFBPV0VSX01BU0sgfCBMRE9fT0ZGLAotCQkJCSAgICAgICBQT1dFUl9PRkYgfCBMRE9fT0ZGKTsKLQkJZWxzZQotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QV1JfQ1RMLAotCQkJCSAgICAgICBQT1dFUl9NQVNLLCBQT1dFUl9PRkYpOwotI2Vsc2UKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QV1JfQ1RMLCBQT1dFUl9NQVNLLAotCQkJICAgICAgIFBPV0VSX09GRik7Ci0jZW5kaWYKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2RfcG93ZXJfb2ZmX2NhcmQzdjMoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCWludCByZXR2YWw7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlzZF9maWxsX3Bvd2VyX29mZl9jYXJkM3YzKGNoaXApOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLSNpZmRlZiBTRF9YRF9JT19GT0xMT1dfUFdSCi0JaWYgKCFjaGlwLT5vcHRpb24uRlQyX2Zhc3RfbW9kZSkKLQkJd2FpdF90aW1lb3V0KGNoaXAtPm9wdGlvbi5EMzMxOF9vZmZfZGVsYXkpOwotI2VuZGlmCi0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydHM1MXhfcmVsZWFzZV9zZF9jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbDsKLQotCVJUUzUxWF9ERUJVR1AoInJ0czUxeF9yZWxlYXNlX3NkX2NhcmRcbiIpOwotCi0JY2hpcC0+Y2FyZF9yZWFkeSAmPSB+U0RfQ0FSRDsKLQljaGlwLT5jYXJkX2ZhaWwgJj0gflNEX0NBUkQ7Ci0JY2hpcC0+Y2FyZF93cCAmPSB+U0RfQ0FSRDsKLQotCW1lbXNldChzZF9jYXJkLT5yYXdfY3NkLCAwLCAxNik7Ci0JbWVtc2V0KHNkX2NhcmQtPnJhd19zY3IsIDAsIDgpOwotCi0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNGU01fRUQsIEhXX0NNRF9TVE9QLCBIV19DTURfU1RPUCk7Ci0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNEX1BBRF9DVEwsIFNEX0lPX1VTSU5HXzFWOCwgMCk7Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpIHx8IGNoaXAtPm9wdGlvbi5ydHM1MTI5X0QzMzE4X29mZl9lbmFibGUpCi0JCXNkX3Bvd2VyX29mZl9jYXJkM3YzKGNoaXApOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCWlmICghKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpIHx8IGNoaXAtPm9wdGlvbi5ydHM1MTI5X0QzMzE4X29mZl9lbmFibGUpKQotCQlzZF9maWxsX3Bvd2VyX29mZl9jYXJkM3YzKGNoaXApOwotCi0JaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJc2RfcHVsbF9jdGxfZGlzYWJsZShjaGlwKTsKLQllbHNlCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEZQR0FfUFVMTF9DVEwsCi0JCQkgICAgICAgRlBHQV9TRF9QVUxMX0NUTF9CSVQgfCAweDIwLAotCQkJICAgICAgIEZQR0FfU0RfUFVMTF9DVExfQklUKTsKLQotCS8qIFN3aXRjaCBMRE8zMzE4IHRvIDMuM1YgKi8KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBMRE9fUE9XRVJfQ0ZHLCBUVU5FX1NEMThfTUFTSywKLQkJICAgICAgIFRVTkVfU0QxOF8zVjMpOwotCi0JaWYgKENIS19NTUNfRERSNTIoc2RfY2FyZCkgJiYgQ0hLX01NQ184QklUKHNkX2NhcmQpKQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RNQTFfQ1RMLAotCQkJICAgICAgIEVYVEVORF9ETUExX0FTWU5DX1NJR05BTCwKLQkJCSAgICAgICBFWFRFTkRfRE1BMV9BU1lOQ19TSUdOQUwpOwotCWlmIChDSEtfU0QzMF9TUEVFRChzZF9jYXJkKSB8fCBDSEtfTU1DKHNkX2NhcmQpKQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRDMwX0RSSVZFX1NFTCwKLQkJCSAgICAgICBTRDMwX0RSSVZFX01BU0ssIGNoaXAtPm9wdGlvbi5zZDMwX3BhZF9kcml2ZSk7Ci0JLyogU3VzcGVuZCBMRE8zMzE4ICovCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QV1JfQ1RMLCBMRE8zMzE4X1BXUl9NQVNLLAotCQkgICAgICAgTERPX1NVU1BFTkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl3YWl0X3RpbWVvdXQoMjApOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvc2QuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3NkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZDk0M2Y1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3NkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKiBIZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaWZuZGVmIF9fUlRTNTFYX1NEX0gKLSNkZWZpbmUgX19SVFM1MVhfU0RfSAotCi0jaW5jbHVkZSAicnRzNTF4X2NoaXAuaCIKLQotI2RlZmluZSBTRF9NQVhfUkVUUllfQ09VTlQJMwotCi0jZGVmaW5lIFNVUFBPUlRfVk9MVEFHRQkweDAwM0MwMDAwCi0KLSNkZWZpbmUgU0RfUkVTRVRfRkFJTAkweDAxCi0jZGVmaW5lIE1NQ19SRVNFVF9GQUlMICAweDAyCi0KLS8qIEVycm9yIENvZGUgKi8KLSNkZWZpbmUJU0RfTk9fRVJST1IJCTB4MAotI2RlZmluZQlTRF9DUkNfRVJSCQkweDgwCi0jZGVmaW5lCVNEX1RPX0VSUgkJMHg0MAotI2RlZmluZQlTRF9OT19DQVJECQkweDIwCi0jZGVmaW5lIFNEX0JVU1kJCQkweDEwCi0jZGVmaW5lCVNEX1NUU19FUlIJCTB4MDgKLSNkZWZpbmUgU0RfUlNQX1RJTUVPVVQJCTB4MDQKLQotLyogTU1DL1NEIENvbW1hbmQgSW5kZXggKi8KLS8qIEJhc2ljIGNvbW1hbmQgKGNsYXNzIDApICovCi0jZGVmaW5lIEdPX0lETEVfU1RBVEUJCTAKLSNkZWZpbmUJU0VORF9PUF9DT05ECQkxIC8qIHJlc2VydmVkIGZvciBTRCAqLwotI2RlZmluZQlBTExfU0VORF9DSUQJCTIKLSNkZWZpbmUJU0VUX1JFTEFUSVZFX0FERFIJMwotI2RlZmluZQlTRU5EX1JFTEFUSVZFX0FERFIJMwotI2RlZmluZQlTRVRfRFNSCQkJNAotI2RlZmluZSBJT19TRU5EX09QX0NPTkQJCTUKLSNkZWZpbmUJU1dJVENICQkJNgotI2RlZmluZQlTRUxFQ1RfQ0FSRAkJNwotI2RlZmluZQlERVNFTEVDVF9DQVJECQk3Ci0vKiBDTUQ4IGlzICJTRU5EX0VYVF9DU0QiIGZvciBNTUM0LnggU3BlYwotICogd2hpbGUgaXMgIlNFTkRfSUZfQ09ORCIgZm9yIFNEIDIuMCAqLwotI2RlZmluZQlTRU5EX0VYVF9DU0QJCTgKLSNkZWZpbmUJU0VORF9JRl9DT05ECQk4Ci0vKiBlbmQgICovCi0jZGVmaW5lCVNFTkRfQ1NECQk5Ci0jZGVmaW5lCVNFTkRfQ0lECQkxMAotI2RlZmluZQlWT0xUQUdFX1NXSVRDSAkJMTEKLSNkZWZpbmUJUkVBRF9EQVRfVVRJTF9TVE9QCTExIC8qIHJlc2VydmVkIGZvciBTRCAqLwotI2RlZmluZQlTVE9QX1RSQU5TTUlTU0lPTgkxMgotI2RlZmluZQlTRU5EX1NUQVRVUwkJMTMKLSNkZWZpbmUJR09fSU5BQ1RJVkVfU1RBVEUJMTUKLQotLyogQmxvY2sgb3JpZW50ZWQgcmVhZCBjb21tYW5kcyAoY2xhc3MgMikgKi8KLSNkZWZpbmUJU0VUX0JMT0NLTEVOCQkxNgotI2RlZmluZQlSRUFEX1NJTkdMRV9CTE9DSwkxNwotI2RlZmluZQlSRUFEX01VTFRJUExFX0JMT0NLCTE4Ci0jZGVmaW5lCVNFTkRfVFVOSU5HX1BBVFRFUk4JMTkKLQotLyogQnVzIFdpZHRoIFRlc3QgKi8KLSNkZWZpbmUJQlVTVEVTVF9SCQkxNAotI2RlZmluZQlCVVNURVNUX1cJCTE5Ci0vKiBlbmQgKi8KLQotLyogQmxvY2sgb3JpZW50ZWQgd3JpdGUgY29tbWFuZHMgKGNsYXNzIDQpICovCi0jZGVmaW5lCVdSSVRFX0JMT0NLCQkyNAotI2RlZmluZQlXUklURV9NVUxUSVBMRV9CTE9DSwkyNQotI2RlZmluZQlQUk9HUkFNX0NTRAkJMjcKLQotLyogRXJhc2UgY29tbWFuZHMgKi8KLSNkZWZpbmUJRVJBU0VfV1JfQkxLX1NUQVJUCTMyCi0jZGVmaW5lCUVSQVNFX1dSX0JMS19FTkQJMzMKLSNkZWZpbmUJRVJBU0VfQ01ECQkzOAotCi0vKiBCbG9jayBPcmllbnRlZCBXcml0ZSBQcm90ZWN0aW9uIENvbW1hbmRzICovCi0jZGVmaW5lIExPQ0tfVU5MT0NLCQk0MgotCi0jZGVmaW5lCUlPX1JXX0RJUkVDVAkJNTIKLQotLyogQXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZHMgKGNsYXNzIDgpICovCi0jZGVmaW5lCUFQUF9DTUQJCQk1NQotI2RlZmluZQlHRU5fQ01ECQkJNTYKLQotLyogU0QgQXBwbGljYXRpb24gY29tbWFuZCBJbmRleCAqLwotI2RlZmluZQlTRVRfQlVTX1dJRFRICQkJNgotI2RlZmluZQlTRF9TVEFUVVMJCQkxMwotI2RlZmluZQlTRU5EX05VTV9XUl9CTE9DS1MJCTIyCi0jZGVmaW5lCVNFVF9XUl9CTEtfRVJBU0VfQ09VTlQJCTIzCi0jZGVmaW5lCVNEX0FQUF9PUF9DT05ECQkJNDEKLSNkZWZpbmUJU0VUX0NMUl9DQVJEX0RFVEVDVAkJNDIKLSNkZWZpbmUJU0VORF9TQ1IJCQk1MQotCi0vKiBTRCBUSU1FT1VUIGZ1bmN0aW9uIHJldHVybiBlcnJvciAqLwotI2RlZmluZQlTRF9SRUFEX0NPTVBMRVRFCTB4MDAKLSNkZWZpbmUJU0RfUkVBRF9UTwkJMHgwMQotI2RlZmluZQlTRF9SRUFEX0FEVkVOQ0UJCTB4MDIKLQotLyogU0QgdjEuMSBDTUQ2IFNXSVRDSCBmdW5jdGlvbiAqLwotI2RlZmluZQlTRF9DSEVDS19NT0RFCQkweDAwCi0jZGVmaW5lCVNEX1NXSVRDSF9NT0RFCQkweDgwCi0jZGVmaW5lCVNEX0ZVTkNfR1JPVVBfMQkJMHgwMQotI2RlZmluZQlTRF9GVU5DX0dST1VQXzIJCTB4MDIKLSNkZWZpbmUJU0RfRlVOQ19HUk9VUF8zCQkweDAzCi0jZGVmaW5lCVNEX0ZVTkNfR1JPVVBfNAkJMHgwNAotI2RlZmluZQlTRF9DSEVDS19TUEVDX1YxXzEJMHhGRgotCi0vKiBTRCBDb21tYW5kIEFyZ3VtZW50ICovCi0jZGVmaW5lCU5PX0FSR1VNRU5UCSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUJQ0hFQ0tfUEFUVEVSTgkJCQkweDAwMDAwMEFBCi0jZGVmaW5lCVZPTFRBR0VfU1VQUExZX1JBTkdFCQkJMHgwMDAwMDEwMCAvKiAyLjd+My42ViAqLwotI2RlZmluZQlTVVBQT1JUX0hJR0hfQU5EX0VYVEVOREVEX0NBUEFDSVRZCTB4NDAwMDAwMDAKLSNkZWZpbmUJU1VQUE9SVF9NQVhfUE9XRVJfUEVSTUFOQ0UJICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lCVNVUFBPUlRfMVY4CSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLQotLyogU3dpdGNoIENvbW1hbmQgRXJyb3IgQ29kZSAqLwotI2RlZmluZQlTV1RJQ0hfTk9fRVJSCSAgMHgwMAotI2RlZmluZQlDQVJEX05PVF9FWElTVAkgIDB4MDEKLSNkZWZpbmUJU1BFQ19OT1RfU1VQUE9SVCAgMHgwMgotI2RlZmluZQlDSEVDS19NT0RFX0VSUgkgIDB4MDMKLSNkZWZpbmUJQ0hFQ0tfTk9UX1JFQURZCSAgMHgwNAotI2RlZmluZQlTV0lUQ0hfQ1JDX0VSUgkgIDB4MDUKLSNkZWZpbmUJU1dJVENIX01PREVfRVJSCSAgMHgwNgotI2RlZmluZQlTV0lUQ0hfUEFTUwkgIDB4MDcKLQotLyogRnVuY3Rpb24gR3JvdXAgRGVmaW5pdGlvbiAqLwotLyogRnVuY3Rpb24gR3JvdXAgMSAqLwotI2RlZmluZQlIU19TVVBQT1JUCQkJMHgwMQotI2RlZmluZQlTRFI1MF9TVVBQT1JUCQkJMHgwMgotI2RlZmluZQlTRFIxMDRfU1VQUE9SVAkJCTB4MDMKLSNkZWZpbmUJRERSNTBfU1VQUE9SVAkJCTB4MDQKLSNkZWZpbmUJSFNfU1VQUE9SVF9NQVNLCQkJMHgwMgotI2RlZmluZQlTRFI1MF9TVVBQT1JUX01BU0sJCTB4MDQKLSNkZWZpbmUJU0RSMTA0X1NVUFBPUlRfTUFTSwkJMHgwOAotI2RlZmluZQlERFI1MF9TVVBQT1JUX01BU0sJCTB4MTAKLSNkZWZpbmUJSFNfUVVFUllfU1dJVENIX09LCQkweDAxCi0jZGVmaW5lCVNEUjUwX1FVRVJZX1NXSVRDSF9PSwkJMHgwMgotI2RlZmluZQlTRFIxMDRfUVVFUllfU1dJVENIX09LCQkweDAzCi0jZGVmaW5lCUREUjUwX1FVRVJZX1NXSVRDSF9PSwkJMHgwNAotI2RlZmluZQlIU19TV0lUQ0hfQlVTWQkJCTB4MDIKLSNkZWZpbmUJU0RSNTBfU1dJVENIX0JVU1kJCTB4MDQKLSNkZWZpbmUJU0RSMTA0X1NXSVRDSF9CVVNZCQkweDA4Ci0jZGVmaW5lCUREUjUwX1NXSVRDSF9CVVNZCQkweDEwCi0jZGVmaW5lCUZVTkNUSU9OX0dST1VQMV9TVVBQT1JUX09GRlNFVCAgICAgICAweDBECi0jZGVmaW5lIEZVTkNUSU9OX0dST1VQMV9RVUVSWV9TV0lUQ0hfT0ZGU0VUICAweDEwCi0jZGVmaW5lIEZVTkNUSU9OX0dST1VQMV9DSEVDS19CVVNZX09GRlNFVCAgICAweDFECi0vKiBGdW5jdGlvbiBHcm91cCAzICovCi0jZGVmaW5lCURSSVZJTkdfVFlQRV9BCSAgICAgICAgMHgwMQotI2RlZmluZQlEUklWSU5HX1RZUEVfQgkJICAgIDB4MDAKLSNkZWZpbmUJRFJJVklOR19UWVBFX0MJCSAgICAweDAyCi0jZGVmaW5lCURSSVZJTkdfVFlQRV9ECSAgICAgICAgMHgwMwotI2RlZmluZQlEUklWSU5HX1RZUEVfQV9NQVNLCSAgICAweDAyCi0jZGVmaW5lCURSSVZJTkdfVFlQRV9CX01BU0sJICAgIDB4MDEKLSNkZWZpbmUJRFJJVklOR19UWVBFX0NfTUFTSwkgICAgMHgwNAotI2RlZmluZQlEUklWSU5HX1RZUEVfRF9NQVNLCSAgICAweDA4Ci0jZGVmaW5lCVRZUEVfQV9RVUVSWV9TV0lUQ0hfT0sJMHgwMQotI2RlZmluZQlUWVBFX0JfUVVFUllfU1dJVENIX09LCTB4MDAKLSNkZWZpbmUJVFlQRV9DX1FVRVJZX1NXSVRDSF9PSyAgMHgwMgotI2RlZmluZQlUWVBFX0RfUVVFUllfU1dJVENIX09LICAweDAzCi0jZGVmaW5lCVRZUEVfQV9TV0lUQ0hfQlVTWQkgICAgMHgwMgotI2RlZmluZQlUWVBFX0JfU1dJVENIX0JVU1kJICAgIDB4MDEKLSNkZWZpbmUJVFlQRV9DX1NXSVRDSF9CVVNZICAgICAgMHgwNAotI2RlZmluZQlUWVBFX0RfU1dJVENIX0JVU1kgICAgICAweDA4Ci0jZGVmaW5lCUZVTkNUSU9OX0dST1VQM19TVVBQT1JUX09GRlNFVCAgICAgICAweDA5Ci0jZGVmaW5lIEZVTkNUSU9OX0dST1VQM19RVUVSWV9TV0lUQ0hfT0ZGU0VUICAweDBGCi0jZGVmaW5lIEZVTkNUSU9OX0dST1VQM19DSEVDS19CVVNZX09GRlNFVCAgICAweDE5Ci0vKiBGdW5jdGlvbiBHcm91cCA0ICovCi0jZGVmaW5lCUNVUlJFTlRfTElNSVRfMjAwCSAgICAweDAwCi0jZGVmaW5lCUNVUlJFTlRfTElNSVRfNDAwCSAgICAweDAxCi0jZGVmaW5lCUNVUlJFTlRfTElNSVRfNjAwCSAgICAweDAyCi0jZGVmaW5lCUNVUlJFTlRfTElNSVRfODAwCSAgICAweDAzCi0jZGVmaW5lCUNVUlJFTlRfTElNSVRfMjAwX01BU0sJMHgwMQotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzQwMF9NQVNLCTB4MDIKLSNkZWZpbmUJQ1VSUkVOVF9MSU1JVF82MDBfTUFTSwkweDA0Ci0jZGVmaW5lCUNVUlJFTlRfTElNSVRfODAwX01BU0sJMHgwOAotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzIwMF9RVUVSWV9TV0lUQ0hfT0sgICAgMHgwMAotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzQwMF9RVUVSWV9TV0lUQ0hfT0sgICAgMHgwMQotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzYwMF9RVUVSWV9TV0lUQ0hfT0sgICAgMHgwMgotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzgwMF9RVUVSWV9TV0lUQ0hfT0sgICAgMHgwMwotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzIwMF9TV0lUQ0hfQlVTWSAgICAgICAgMHgwMQotI2RlZmluZQlDVVJSRU5UX0xJTUlUXzQwMF9TV0lUQ0hfQlVTWQkgICAgIDB4MDIKLSNkZWZpbmUJQ1VSUkVOVF9MSU1JVF82MDBfU1dJVENIX0JVU1kgICAgICAgIDB4MDQKLSNkZWZpbmUJQ1VSUkVOVF9MSU1JVF84MDBfU1dJVENIX0JVU1kgICAgICAgIDB4MDgKLSNkZWZpbmUJRlVOQ1RJT05fR1JPVVA0X1NVUFBPUlRfT0ZGU0VUICAgICAgIDB4MDcKLSNkZWZpbmUgRlVOQ1RJT05fR1JPVVA0X1FVRVJZX1NXSVRDSF9PRkZTRVQgIDB4MEYKLSNkZWZpbmUgRlVOQ1RJT05fR1JPVVA0X0NIRUNLX0JVU1lfT0ZGU0VUICAgIDB4MTcKLS8qIFN3aXRjaCBGdW5jdGlvbiBTdGF0dXMgT2Zmc2V0ICovCi0jZGVmaW5lCURBVEFfU1RSVUNUVVJFX1ZFUl9PRkZTRVQgICAweDExIC8qIFRoZSBoaWdoIG9mZnNldCAqLwotI2RlZmluZSBNQVhfUEhBU0UJCTE1Ci0vKiAjZGVmaW5lICAgICAgVE9UQUxfUkVBRF9QSEFTRSAgICAweDIwICovCi0vKiAjZGVmaW5lICAgICAgVE9UQUxfV1JJVEVfUEhBU0UgICAgMHgyMCAqLwotLyogTU1DIHY0LjAgKi8KLS8qICNkZWZpbmUgTU1DXzUyTUhaX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgKi8KLS8qICNkZWZpbmUgTU1DXzI2TUhaX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgKi8KLSNkZWZpbmUgTU1DXzhCSVRfQlVTCQkJMHgwMDEwCi0jZGVmaW5lIE1NQ180QklUX0JVUwkJCTB4MDAyMAotLyogI2RlZmluZSBNTUNfU0VDVE9SX01PREUgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAqLwotI2RlZmluZSBNTUNfU1dJVENIX0VSUgkJCTB4ODAKLS8qIFR1bmluZyBkaXJlY3Rpb24gUlggb3IgVFggKi8KLSNkZWZpbmUgVFVORV9UWCAgICAweDAwCi0jZGVmaW5lIFRVTkVfUlgJICAgMHgwMQotLyogRm9yIENoYW5nZV9EQ01fRnJlcU1vZGUgRnVuY3Rpb24gKi8KLSNkZWZpbmUgQ0hBTkdFX1RYICAweDAwCi0jZGVmaW5lIENIQU5HRV9SWCAgMHgwMQotI2RlZmluZSBEQ01fSElHSF9GUkVRVUVOQ1lfTU9ERSAgMHgwMAotI2RlZmluZSBEQ01fTE9XX0ZSRVFVRU5DWV9NT0RFICAgMHgwMQotI2RlZmluZSBEQ01fSElHSF9GUkVRVUVOQ1lfTU9ERV9TRVQgIDB4MEMKLSNkZWZpbmUgRENNX0xvd19GUkVRVUVOQ1lfTU9ERV9TRVQgICAweDAwCi0vKiBGb3IgQ2hhbmdlX0ZQR0FfU1NDQ2xvY2sgRnVuY3Rpb24gKi8KLSNkZWZpbmUgTVVMVElQTFlfQllfMSAgICAweDAwCi0jZGVmaW5lIE1VTFRJUExZX0JZXzIgICAgMHgwMQotI2RlZmluZSBNVUxUSVBMWV9CWV8zICAgIDB4MDIKLSNkZWZpbmUgTVVMVElQTFlfQllfNCAgICAweDAzCi0jZGVmaW5lIE1VTFRJUExZX0JZXzUgICAgMHgwNAotI2RlZmluZSBNVUxUSVBMWV9CWV82ICAgIDB4MDUKLSNkZWZpbmUgTVVMVElQTFlfQllfNyAgICAweDA2Ci0jZGVmaW5lIE1VTFRJUExZX0JZXzggICAgMHgwNwotI2RlZmluZSBNVUxUSVBMWV9CWV85ICAgIDB4MDgKLSNkZWZpbmUgTVVMVElQTFlfQllfMTAgICAweDA5Ci0jZGVmaW5lIERJVklERV9CWV8yICAgICAgMHgwMQotI2RlZmluZSBESVZJREVfQllfMyAgICAgIDB4MDIKLSNkZWZpbmUgRElWSURFX0JZXzQgICAgICAweDAzCi0jZGVmaW5lIERJVklERV9CWV81ICAgICAgMHgwNAotI2RlZmluZSBESVZJREVfQllfNiAgICAgIDB4MDUKLSNkZWZpbmUgRElWSURFX0JZXzcgICAgICAweDA2Ci0jZGVmaW5lIERJVklERV9CWV84ICAgICAgMHgwNwotI2RlZmluZSBESVZJREVfQllfOSAgICAgIDB4MDgKLSNkZWZpbmUgRElWSURFX0JZXzEwICAgICAweDA5Ci0jZGVmaW5lIENIRUNLX1NEX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKQlcCi0JKCgocmV0dmFsKSAhPSBTVEFUVVNfU1VDQ0VTUykgfHwgXAotCQkJKGNoaXAtPnJzcF9idWZbMF0gJiBTRF9UUkFOU0ZFUl9FUlIpKQotLyogU0QgVHVuaW5nIERhdGEgU3RydWN0dXJlICovCi0vKiBSZWNvcmQgY29udGludW91cyB0aW1pbmcgcGhhc2UgcGF0aCAqLwotc3RydWN0IHRpbWluZ19waGFzZV9wYXRoIHsKLQlpbnQgc3RhcnQ7Ci0JaW50IGVuZDsKLQlpbnQgbWlkOwotCWludCBsZW47Ci19OwotCi1pbnQgcnRzNTF4X3NkX3NlbGVjdF9jYXJkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IHNlbGVjdCk7Ci1pbnQgcnRzNTF4X3Jlc2V0X3NkX2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfc2Rfc3dpdGNoX2Nsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X3NkX3J3KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgc3RhcnRfc2VjdG9yLAotCSAgdTE2IHNlY3Rvcl9jbnQpOwotdm9pZCBydHM1MXhfc2RfY2xlYW51cF93b3JrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X3JlbGVhc2Vfc2RfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotCi0jaWZkZWYgU1VQUE9SVF9DUFJNCi1leHRlcm4gaW50IHJlc2V0X3NkKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1leHRlcm4gaW50IHNkX2NoZWNrX2RhdGEwX3N0YXR1cyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotZXh0ZXJuIGludCBzZF9yZWFkX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCB0cmFuc19tb2RlLCB1OCAqY21kLAotCQlpbnQgY21kX2xlbiwgdTE2IGJ5dGVfY250LCB1MTYgYmxrX2NudCwgdTggYnVzX3dpZHRoLAotCQl1OCAqYnVmLCBpbnQgYnVmX2xlbiwgaW50IHRpbWVvdXQpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1JUUzUxWF9TRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9zZF9jcHJtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9zZF9jcHJtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZGU2YzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvc2RfY3BybS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA1NiArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQXV0aG9yOgotICogICB3d2FuZyAod2VpX3dhbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICogTWFpbnRhaW5lcjoKLSAqICAgRWR3aW4gUm9uZyAoZWR3aW5fcm9uZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAidHJhY2UuaCIKLSNpbmNsdWRlICJydHM1MXguaCIKLSNpbmNsdWRlICJydHM1MXhfdHJhbnNwb3J0LmgiCi0jaW5jbHVkZSAicnRzNTF4X3Njc2kuaCIKLSNpbmNsdWRlICJydHM1MXhfY2FyZC5oIgotI2luY2x1ZGUgInJ0czUxeF9jaGlwLmgiCi0jaW5jbHVkZSAic2RfY3BybS5oIgotI2luY2x1ZGUgInNkLmgiCi0KLSNpZmRlZiBTVVBQT1JUX0NQUk0KLQotc3RhdGljIGlubGluZSBpbnQgZ2V0X3JzcF90eXBlKHU4IHJzcF9jb2RlLCB1OCAqcnNwX3R5cGUsIGludCAqcnNwX2xlbikKLXsKLQlpZiAoIXJzcF90eXBlIHx8ICFyc3BfbGVuKQotCQlyZXR1cm4gU1RBVFVTX0ZBSUw7Ci0KLQlzd2l0Y2ggKHJzcF9jb2RlKSB7Ci0JY2FzZSAweDAzOgotCQkqcnNwX3R5cGUgPSBTRF9SU1BfVFlQRV9SMDsgLyogbm8gcmVzcG9uc2UgKi8KLQkJKnJzcF9sZW4gPSAwOwotCQlicmVhazsKLQotCWNhc2UgMHgwNDoKLQkJKnJzcF90eXBlID0gU0RfUlNQX1RZUEVfUjE7IC8qIFIxLFI2KCxSNCxSNSkgKi8KLQkJKnJzcF9sZW4gPSA2OwotCQlicmVhazsKLQotCWNhc2UgMHgwNToKLQkJKnJzcF90eXBlID0gU0RfUlNQX1RZUEVfUjFiOwkvKiBSMWIgKi8KLQkJKnJzcF9sZW4gPSA2OwotCQlicmVhazsKLQotCWNhc2UgMHgwNjoKLQkJKnJzcF90eXBlID0gU0RfUlNQX1RZUEVfUjI7CS8qIFIyICovCi0JCSpyc3BfbGVuID0gMTc7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDA3OgotCQkqcnNwX3R5cGUgPSBTRF9SU1BfVFlQRV9SMzsJLyogUjMgKi8KLQkJKnJzcF9sZW4gPSA2OwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiBTVEFUVVNfRkFJTDsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0X3NkX3NlbmRfY21kX2dldF9yc3Aoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBjbWRfaWR4LAotCQkJICAgIHUzMiBhcmcsIHU4IHJzcF90eXBlLCB1OCAqcnNwLCBpbnQgcnNwX2xlbiwKLQkJCSAgICBpbnQgc3BlY2lhbF9jaGVjaykKLXsKLQlpbnQgcmV0dmFsOwotCWludCB0aW1lb3V0ID0gNTA7Ci0JdTE2IHJlZ19hZGRyOwotCXU4IGJ1ZlsxN10sIHN0YXQ7Ci0JaW50IGxlbiA9IDI7Ci0JaW50IHJ0eV9jbnQgPSAwOwotCi0JUlRTNTFYX0RFQlVHUCgiRVhUIFNEL01NQyBDTUQgJWRcbiIsIGNtZF9pZHgpOwotCi0JaWYgKHJzcF90eXBlID09IFNEX1JTUF9UWVBFX1IxYikKLQkJdGltZW91dCA9IDMwMDA7Ci0KLVJUWV9TRU5EX0NNRDoKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDAsIDB4RkYsIDB4NDAgfCBjbWRfaWR4KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQxLCAweEZGLCAodTgpIChhcmcgPj4gMjQpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQyLCAweEZGLCAodTgpIChhcmcgPj4gMTYpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DTUQzLCAweEZGLCAodTgpIChhcmcgPj4gOCkpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDQsIDB4RkYsICh1OCkgYXJnKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsIHJzcF90eXBlKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLAotCQkgICAgICAgMHgwMSwgUElOR1BPTkdfQlVGRkVSKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwKLQkJICAgICAgIDB4RkYsIFNEX1RNX0NNRF9SU1AgfCBTRF9UUkFOU0ZFUl9TVEFSVCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIFNEX1RSQU5TRkVSX0VORCwKLQkJICAgICAgIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFNEX1NUQVQxLCAwLCAwKTsKLQotCWlmIChDSEVDS19VU0IoY2hpcCwgVVNCXzIwKSkgewotCQlpZiAocnNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjIpIHsKLQkJCWZvciAocmVnX2FkZHIgPSBQUEJVRl9CQVNFMjsKLQkJCSAgICAgcmVnX2FkZHIgPCBQUEJVRl9CQVNFMiArIDE2OyByZWdfYWRkcisrKSB7Ci0JCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCByZWdfYWRkciwgMCwKLQkJCQkJICAgICAgIDApOwotCQkJfQotCQkJbGVuID0gMTk7Ci0JCX0gZWxzZSBpZiAocnNwX3R5cGUgIT0gU0RfUlNQX1RZUEVfUjApIHsKLQkJCS8qIFJlYWQgZGF0YSBmcm9tIFNEX0NNRHggcmVnaXN0ZXJzICovCi0JCQlmb3IgKHJlZ19hZGRyID0gU0RfQ01EMDsgcmVnX2FkZHIgPD0gU0RfQ01ENDsKLQkJCSAgICAgcmVnX2FkZHIrKykgewotCQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgcmVnX2FkZHIsIDAsCi0JCQkJCSAgICAgICAwKTsKLQkJCX0KLQkJCWxlbiA9IDg7Ci0JCX0gZWxzZSB7Ci0JCQlsZW4gPSAzOwotCQl9Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgU0RfQ01ENSwgMCwgMCk7Ci0JfSBlbHNlIHsKLQkJbGVuID0gMjsKLQl9Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiwgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIGxlbiwgdGltZW91dCk7Ci0KLQlpZiAoQ0hFQ0tfU0RfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCXJ0czUxeF9jbGVhcl9zZF9lcnJvcihjaGlwKTsKLQotCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkgewotCQkJaWYgKHJzcF90eXBlICYgU0RfV0FJVF9CVVNZX0VORCkgewotCQkJCXJldHZhbCA9IHNkX2NoZWNrX2RhdGEwX3N0YXR1cyhjaGlwKTsKLQkJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCX0KLQkJfQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCWlmIChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMCkKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCi0JaWYgKENIRUNLX1VTQihjaGlwLCBVU0JfMjApKSB7Ci0JCXJ0czUxeF9yZWFkX3JzcF9idWYoY2hpcCwgMiwgYnVmLCBsZW4gLSAyKTsKLQl9IGVsc2UgewotCQlpZiAocnNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjIpIHsKLQkJCXJlZ19hZGRyID0gUFBCVUZfQkFTRTI7Ci0JCQlsZW4gPSAxNjsKLQkJfSBlbHNlIHsKLQkJCXJlZ19hZGRyID0gU0RfQ01EMDsKLQkJCWxlbiA9IDU7Ci0JCX0KLQkJcmV0dmFsID0KLQkJICAgIHJ0czUxeF9zZXFfcmVhZF9yZWdpc3RlcihjaGlwLCByZWdfYWRkciwKLQkJCQkJCSAgICAgKHVuc2lnbmVkIHNob3J0KWxlbiwgYnVmKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgU0RfQ01ENSwgYnVmICsgbGVuKTsKLQl9Ci0Jc3RhdCA9IGNoaXAtPnJzcF9idWZbMV07Ci0KLQlpZiAoKGJ1ZlswXSAmIDB4QzApICE9IDApCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlpZiAoIShyc3BfdHlwZSAmIFNEX05PX0NIRUNLX0NSQzcpKSB7Ci0JCWlmIChzdGF0ICYgU0RfQ1JDN19FUlIpIHsKLQkJCWlmIChjbWRfaWR4ID09IFdSSVRFX01VTFRJUExFX0JMT0NLKQotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQlpZiAocnR5X2NudCA8IFNEX01BWF9SRVRSWV9DT1VOVCkgewotCQkJCXdhaXRfdGltZW91dCgyMCk7Ci0JCQkJcnR5X2NudCsrOwotCQkJCWdvdG8gUlRZX1NFTkRfQ01EOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbWRfaWR4ID09IFNFTEVDVF9DQVJEKSB8fCAoY21kX2lkeCA9PSBBUFBfQ01EKSB8fAotCSAgICAoY21kX2lkeCA9PSBTRU5EX1NUQVRVUykgfHwgKGNtZF9pZHggPT0gU1RPUF9UUkFOU01JU1NJT04pKSB7Ci0JCWlmICgoY21kX2lkeCAhPSBTVE9QX1RSQU5TTUlTU0lPTikgJiYgKHNwZWNpYWxfY2hlY2sgPT0gMCkpIHsKLQkJCWlmIChidWZbMV0gJiAweDgwKQotCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQkJaWYgKGJ1ZlsxXSAmIDB4N0YpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQlpZiAoYnVmWzJdICYgMHhGOCkKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQkJaWYgKGNtZF9pZHggPT0gU0VMRUNUX0NBUkQpIHsKLQkJCWlmIChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMikgewotCQkJCWlmICgoYnVmWzNdICYgMHgxRSkgIT0gMHgwNCkKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0gZWxzZSBpZiAocnNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjIpIHsKLQkJCQlpZiAoKGJ1ZlszXSAmIDB4MUUpICE9IDB4MDMpCi0JCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAocnNwICYmIHJzcF9sZW4pCi0JCW1lbWNweShyc3AsIGJ1ZiwgcnNwX2xlbik7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0X3NkX2dldF9yc3Aoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgbGVuLAotCQkJdTggKnJzcCwgdTggcnNwX3R5cGUpCi17Ci0JaW50IHJldHZhbCwgcnNwX2xlbjsKLQl1MTYgcmVnX2FkZHI7Ci0KLQlpZiAocnNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjApCi0JCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCWlmIChyc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMikgewotCQlmb3IgKHJlZ19hZGRyID0gUFBCVUZfQkFTRTI7IHJlZ19hZGRyIDwgUFBCVUZfQkFTRTIgKyAxNjsKLQkJICAgICByZWdfYWRkcisrKSB7Ci0JCQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIHJlZ19hZGRyLCAweEZGLCAwKTsKLQkJfQotCQlyc3BfbGVuID0gMTc7Ci0JfSBlbHNlIGlmIChyc3BfdHlwZSAhPSBTRF9SU1BfVFlQRV9SMCkgewotCQlmb3IgKHJlZ19hZGRyID0gU0RfQ01EMDsgcmVnX2FkZHIgPD0gU0RfQ01ENDsgcmVnX2FkZHIrKykKLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgcmVnX2FkZHIsIDB4RkYsIDApOwotCQlyc3BfbGVuID0gNjsKLQl9Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBTRF9DTUQ1LCAweEZGLCAwKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgcnNwX2xlbiwgMTAwKTsKLQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKHJzcCkgewotCQlpbnQgbWluX2xlbiA9IChyc3BfbGVuIDwgbGVuKSA/IHJzcF9sZW4gOiBsZW47Ci0KLQkJbWVtY3B5KHJzcCwgcnRzNTF4X2dldF9yc3BfZGF0YShjaGlwKSwgbWluX2xlbik7Ci0KLQkJUlRTNTFYX0RFQlVHUCgibWluX2xlbiA9ICVkXG4iLCBtaW5fbGVuKTsKLQkJUlRTNTFYX0RFQlVHUCgiUmVzcG9uc2UgaW4gY21kIGJ1ZjogMHgleCAweCV4IDB4JXggMHgleFxuIiwKLQkJCSAgICAgICByc3BbMF0sIHJzcFsxXSwgcnNwWzJdLCByc3BbM10pOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV9ub19kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1biwKLQkJCSAgIHU4IGNtZF9pZHgsIHU4IHN0YW5kYnksIHU4IGFjbWQsIHU4IHJzcF9jb2RlLAotCQkJICAgdTMyIGFyZykKLXsKLQlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7Ci0JaW50IHJldHZhbCwgcnNwX2xlbjsKLQl1OCByc3BfdHlwZTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZF9zd2l0Y2hfY2xvY2soY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCi0JaWYgKHNkX2NhcmQtPnByZV9jbWRfZXJyKSB7Ci0JCXNkX2NhcmQtPnByZV9jbWRfZXJyID0gMDsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9DSEFOR0UpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCXJldHZhbCA9IGdldF9yc3BfdHlwZShyc3BfY29kZSwgJnJzcF90eXBlLCAmcnNwX2xlbik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQlzZF9jYXJkLT5sYXN0X3JzcF90eXBlID0gcnNwX3R5cGU7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2Rfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQkvKiBTZXQgSC9XIFNEL01NQyBCdXMgV2lkdGggKi8KLQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU0RfQ0ZHMSwgMHgwMywgU0RfQlVTX1dJRFRIXzQpOwotCi0JaWYgKHN0YW5kYnkpIHsKLQkJcmV0dmFsID0gcnRzNTF4X3NkX3NlbGVjdF9jYXJkKGNoaXAsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX0NtZF9GYWlsZWQpOwotCX0KLQotCWlmIChhY21kKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBleHRfc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBBUFBfQ01ELCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQkgICAgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDAsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX0NtZF9GYWlsZWQpOwotCX0KLQotCXJldHZhbCA9IGV4dF9zZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIGNtZF9pZHgsIGFyZywgcnNwX3R5cGUsCi0JCQkJCSBzZF9jYXJkLT5yc3AsIHJzcF9sZW4sIDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9DbWRfRmFpbGVkKTsKLQotCWlmIChzdGFuZGJ5KSB7Ci0JCXJldHZhbCA9IHJ0czUxeF9zZF9zZWxlY3RfY2FyZChjaGlwLCAxKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9DbWRfRmFpbGVkKTsKLQl9Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci0KLVNEX0V4ZWN1dGVfQ21kX0ZhaWxlZDoKLQlzZF9jYXJkLT5wcmVfY21kX2VyciA9IDE7Ci0JcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9OT19TRU5TRSk7Ci0JcnRzNTF4X3JlbGVhc2Vfc2RfY2FyZChjaGlwKTsKLQlydHM1MXhfZG9fcnRzNTF4X3Jlc2V0X3NkX2NhcmQoY2hpcCk7Ci0JaWYgKCEoY2hpcC0+Y2FyZF9yZWFkeSAmIFNEX0NBUkQpKQotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX05PVF9QUkVTRU5UKTsKLQotCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLX0KLQotaW50IGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV9yZWFkX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuLAotCQkJICAgICB1OCBjbWRfaWR4LCB1OCBjbWQxMiwgdTggc3RhbmRieSwKLQkJCSAgICAgdTggYWNtZCwgdTggcnNwX2NvZGUsIHUzMiBhcmcsIHUzMiBkYXRhX2xlbiwKLQkJCSAgICAgdm9pZCAqZGF0YV9idWYsIHVuc2lnbmVkIGludCBidWZfbGVuLCBpbnQgdXNlX3NnKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsLCByc3BfbGVuLCBpOwotCWludCBjbWQxM19jaGVja2JpdCA9IDAsIHJlYWRfZXJyID0gMDsKLQl1OCByc3BfdHlwZSwgYnVzX3dpZHRoOwotCi0JaWYgKHNkX2NhcmQtPnByZV9jbWRfZXJyKSB7Ci0JCXNkX2NhcmQtPnByZV9jbWRfZXJyID0gMDsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9DSEFOR0UpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X3NkX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCXJldHZhbCA9IGdldF9yc3BfdHlwZShyc3BfY29kZSwgJnJzcF90eXBlLCAmcnNwX2xlbik7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQlzZF9jYXJkLT5sYXN0X3JzcF90eXBlID0gcnNwX3R5cGU7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2Rfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQlidXNfd2lkdGggPSBTRF9CVVNfV0lEVEhfNDsKLQotCWlmIChkYXRhX2xlbiA8IDUxMikgewotCQlyZXR2YWwgPSBleHRfc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRVRfQkxPQ0tMRU4sIGRhdGFfbGVuLAotCQkJCQkJIFNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwLCAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9SZWFkX0NtZF9GYWlsZWQpOwotCX0KLQotCWlmIChzdGFuZGJ5KSB7Ci0JCXJldHZhbCA9IHJ0czUxeF9zZF9zZWxlY3RfY2FyZChjaGlwLCAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9SZWFkX0NtZF9GYWlsZWQpOwotCX0KLQotCWlmIChhY21kKSB7Ci0JCXJldHZhbCA9Ci0JCSAgICBleHRfc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBBUFBfQ01ELCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQkgICAgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDAsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1JlYWRfQ21kX0ZhaWxlZCk7Ci0JfQotCi0JaWYgKGRhdGFfbGVuIDw9IDUxMikgewotCQlpbnQgbWluX2xlbjsKLQkJdTggKmJ1ZjsKLQkJdTE2IGJ5dGVfY250LCBibGtfY250OwotCQl1OCBjbWRbNV07Ci0JCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwotCQl2b2lkICpzZyA9IE5VTEw7Ci0KLQkJYnl0ZV9jbnQgPSAodTE2KSAoZGF0YV9sZW4gJiAweDNGRik7Ci0JCWJsa19jbnQgPSAxOwotCi0JCWNtZFswXSA9IDB4NDAgfCBjbWRfaWR4OwotCQljbWRbMV0gPSAodTgpIChhcmcgPj4gMjQpOwotCQljbWRbMl0gPSAodTgpIChhcmcgPj4gMTYpOwotCQljbWRbM10gPSAodTgpIChhcmcgPj4gOCk7Ci0JCWNtZFs0XSA9ICh1OCkgYXJnOwotCi0JCWJ1ZiA9IGttYWxsb2MoZGF0YV9sZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0VSUk9SKTsKLQotCQlyZXR2YWwgPSBzZF9yZWFkX2RhdGEoY2hpcCwgU0RfVE1fTk9STUFMX1JFQUQsIGNtZCwgNSwgYnl0ZV9jbnQsCi0JCQkJICAgICAgYmxrX2NudCwgYnVzX3dpZHRoLCBidWYsIGRhdGFfbGVuLCAyMDAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcmVhZF9lcnIgPSAxOwotCQkJa2ZyZWUoYnVmKTsKLQkJCXJ0czUxeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1NUT1AsCi0JCQkJCSAgICAgIFNEX1NUT1AgfCBTRF9DTFJfRVJSLAotCQkJCQkgICAgICBTRF9TVE9QIHwgU0RfQ0xSX0VSUik7Ci0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfUmVhZF9DbWRfRmFpbGVkKTsKLQkJfQotCi0JCW1pbl9sZW4gPSBtaW4oZGF0YV9sZW4sIGJ1Zl9sZW4pOwotCQlpZiAodXNlX3NnKQotCQkJcnRzNTF4X2FjY2Vzc19zZ2xpc3QoYnVmLCBtaW5fbGVuLCAodm9pZCAqKWRhdGFfYnVmLAotCQkJCQkgICAgICZzZywgJm9mZnNldCwgVE9fWEZFUl9CVUYpOwotCQllbHNlCi0JCQltZW1jcHkoZGF0YV9idWYsIGJ1ZiwgbWluX2xlbik7Ci0KLQkJa2ZyZWUoYnVmKTsKLQl9IGVsc2UgaWYgKCEoZGF0YV9sZW4gJiAweDFGRikpIHsKLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CWVRFX0NOVF9ILCAweEZGLCAweDAyKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMHgwMCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9ILAotCQkJICAgICAgIDB4RkYsICh1OCkgKGRhdGFfbGVuID4+IDE3KSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9MLAotCQkJICAgICAgIDB4RkYsICh1OCkgKChkYXRhX2xlbiAmIDB4MDAwMUZFMDApID4+IDkpKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMCwgMHhGRiwKLQkJCSAgICAgICAweDQwIHwgY21kX2lkeCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDEsIDB4RkYsCi0JCQkgICAgICAgKHU4KSAoYXJnID4+IDI0KSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDIsIDB4RkYsCi0JCQkgICAgICAgKHU4KSAoYXJnID4+IDE2KSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDMsIDB4RkYsCi0JCQkgICAgICAgKHU4KSAoYXJnID4+IDgpKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQ01ENCwgMHhGRiwgKHU4KSBhcmcpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcxLCAweDAzLCBidXNfd2lkdGgpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9DRkcyLCAweEZGLCByc3BfdHlwZSk7Ci0JCXJ0czUxeF90cmFuc19kbWFfZW5hYmxlKERNQV9GUk9NX0RFVklDRSwgY2hpcCwgZGF0YV9sZW4sIERNQV81MTIpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgMHhGRiwKLQkJCSAgICAgICBTRF9UTV9BVVRPX1JFQURfMiB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCi0JCQkgICAgICAgU0RfVFJBTlNGRVJfRU5ELCBTRF9UUkFOU0ZFUl9FTkQpOwotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DRElSLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlyZWFkX2VyciA9IDE7Ci0JCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfU1RPUCwKLQkJCQkJCSAgU0RfU1RPUCB8IFNEX0NMUl9FUlIsCi0JCQkJCQkgIFNEX1NUT1AgfCBTRF9DTFJfRVJSKTsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9SZWFkX0NtZF9GYWlsZWQpOwotCQl9Ci0KLQkJcmV0dmFsID0KLQkJICAgIHJ0czUxeF90cmFuc2Zlcl9kYXRhX3JjYyhjaGlwLCBSQ1ZfQlVMS19QSVBFKGNoaXApLAotCQkJCQkgICAgIGRhdGFfYnVmLCBidWZfbGVuLCB1c2Vfc2csIE5VTEwsCi0JCQkJCSAgICAgMTAwMDAsIFNUQUdFX0RJKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcmVhZF9lcnIgPSAxOwotCQkJcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1NUT1AsCi0JCQkJCQkgIFNEX1NUT1AgfCBTRF9DTFJfRVJSLAotCQkJCQkJICBTRF9TVE9QIHwgU0RfQ0xSX0VSUik7Ci0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfUmVhZF9DbWRfRmFpbGVkKTsKLQkJfQotCQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAxLCA1MDApOwotCQlpZiAoQ0hFQ0tfU0RfVFJBTlNfRkFJTChjaGlwLCByZXR2YWwpKSB7Ci0JCQlyZWFkX2VyciA9IDE7Ci0JCQlydHM1MXhfZXAwX3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfU1RPUCwKLQkJCQkJCSAgU0RfU1RPUCB8IFNEX0NMUl9FUlIsCi0JCQkJCQkgIFNEX1NUT1AgfCBTRF9DTFJfRVJSKTsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9SZWFkX0NtZF9GYWlsZWQpOwotCQl9Ci0JfSBlbHNlIHsKLQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1JlYWRfQ21kX0ZhaWxlZCk7Ci0JfQotCi0JcmV0dmFsID0gZXh0X3NkX2dldF9yc3AoY2hpcCwgcnNwX2xlbiwgc2RfY2FyZC0+cnNwLCByc3BfdHlwZSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1JlYWRfQ21kX0ZhaWxlZCk7Ci0KLQlpZiAoc3RhbmRieSkgewotCQlyZXR2YWwgPSBydHM1MXhfc2Rfc2VsZWN0X2NhcmQoY2hpcCwgMSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfUmVhZF9DbWRfRmFpbGVkKTsKLQl9Ci0KLQlpZiAoY21kMTIpIHsKLQkJcmV0dmFsID0gZXh0X3NkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU1RPUF9UUkFOU01JU1NJT04sCi0JCQkJCQkgMCwgU0RfUlNQX1RZUEVfUjFiLCBOVUxMLCAwLAotCQkJCQkJIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1JlYWRfQ21kX0ZhaWxlZCk7Ci0JfQotCi0JaWYgKGRhdGFfbGVuIDwgNTEyKSB7Ci0JCXJldHZhbCA9IGV4dF9zZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFVF9CTE9DS0xFTiwgMHgyMDAsCi0JCQkJCQkgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDAsIDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1JlYWRfQ21kX0ZhaWxlZCk7Ci0KLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNEX0JZVEVfQ05UX0gsIDB4RkYsIDB4MDIpOwotCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMHgwMCk7Ci0JfQotCi0JaWYgKHN0YW5kYnkgfHwgY21kMTIpCi0JCWNtZDEzX2NoZWNrYml0ID0gMTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcmV0dmFsID0KLQkJICAgIGV4dF9zZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNFTkRfU1RBVFVTLCBzZF9jYXJkLT5zZF9hZGRyLAotCQkJCQkgICAgU0RfUlNQX1RZUEVfUjEsIE5VTEwsIDAsCi0JCQkJCSAgICBjbWQxM19jaGVja2JpdCk7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQl9Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1JlYWRfQ21kX0ZhaWxlZCk7Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci0KLVNEX0V4ZWN1dGVfUmVhZF9DbWRfRmFpbGVkOgotCXNkX2NhcmQtPnByZV9jbWRfZXJyID0gMTsKLQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX05PX1NFTlNFKTsKLQlpZiAocmVhZF9lcnIpCi0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfVU5SRUNPVkVSX1JFQURfRVJSKTsKLQlydHM1MXhfcmVsZWFzZV9zZF9jYXJkKGNoaXApOwotCXJ0czUxeF9kb19ydHM1MXhfcmVzZXRfc2RfY2FyZChjaGlwKTsKLQlpZiAoIShjaGlwLT5jYXJkX3JlYWR5ICYgU0RfQ0FSRCkpCi0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfTk9UX1BSRVNFTlQpOwotCi0JVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotfQotCi1pbnQgZXh0X3J0czUxeF9zZF9leGVjdXRlX3dyaXRlX2RhdGEoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgbHVuLAotCQkJICAgICAgdTggY21kX2lkeCwgdTggY21kMTIsIHU4IHN0YW5kYnksIHU4IGFjbWQsCi0JCQkgICAgICB1OCByc3BfY29kZSwgdTMyIGFyZywgdTMyIGRhdGFfbGVuLAotCQkJICAgICAgdm9pZCAqZGF0YV9idWYsIHVuc2lnbmVkIGludCBidWZfbGVuLCBpbnQgdXNlX3NnKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQlpbnQgcmV0dmFsLCByc3BfbGVuOwotCWludCBjbWQxM19jaGVja2JpdCA9IDAsIHdyaXRlX2VyciA9IDA7Ci0JdTggcnNwX3R5cGU7Ci0JdTMyIGk7Ci0KLQlpZiAoc2RfY2FyZC0+cHJlX2NtZF9lcnIpIHsKLQkJc2RfY2FyZC0+cHJlX2NtZF9lcnIgPSAwOwotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0NIQU5HRSk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2Rfc3dpdGNoX2Nsb2NrKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlyZXR2YWwgPSBnZXRfcnNwX3R5cGUocnNwX2NvZGUsICZyc3BfdHlwZSwgJnJzcF9sZW4pOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0Jc2RfY2FyZC0+bGFzdF9yc3BfdHlwZSA9IHJzcF90eXBlOwotCi0JcmV0dmFsID0gcnRzNTF4X3NkX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNEX0NGRzEsIDB4MDMsIFNEX0JVU19XSURUSF80KTsKLQotCWlmIChkYXRhX2xlbiA8IDUxMikgewotCQlyZXR2YWwgPSBleHRfc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBTRVRfQkxPQ0tMRU4sIGRhdGFfbGVuLAotCQkJCQkJIFNEX1JTUF9UWVBFX1IxLCBOVUxMLCAwLCAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQl9Ci0KLQlpZiAoc3RhbmRieSkgewotCQlyZXR2YWwgPSBydHM1MXhfc2Rfc2VsZWN0X2NhcmQoY2hpcCwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZCk7Ci0JfQotCi0JaWYgKGFjbWQpIHsKLQkJcmV0dmFsID0KLQkJICAgIGV4dF9zZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIEFQUF9DTUQsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJCSAgICBTRF9SU1BfVFlQRV9SMSwgTlVMTCwgMCwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZCk7Ci0JfQotCi0JcmV0dmFsID0gZXh0X3NkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgY21kX2lkeCwgYXJnLCByc3BfdHlwZSwKLQkJCQkJIHNkX2NhcmQtPnJzcCwgcnNwX2xlbiwgMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1dyaXRlX0NtZF9GYWlsZWQpOwotCi0JaWYgKGRhdGFfbGVuIDw9IDUxMikgewotCQl1OCAqYnVmOwotCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKLQkJdm9pZCAqc2cgPSBOVUxMOwotCi0JCWJ1ZiA9IGttYWxsb2MoZGF0YV9sZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0VSUk9SKTsKLQotCQlpZiAodXNlX3NnKQotCQkJcnRzNTF4X2FjY2Vzc19zZ2xpc3QoYnVmLCBkYXRhX2xlbiwgKHZvaWQgKilkYXRhX2J1ZiwKLQkJCQkJICAgICAmc2csICZvZmZzZXQsIEZST01fWEZFUl9CVUYpOwotCQllbHNlCi0JCQltZW1jcHkoYnVmLCBkYXRhX2J1ZiwgZGF0YV9sZW4pOwotCi0KLQkJaWYgKGRhdGFfbGVuID4gMjU2KSB7Ci0JCQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELAotCQkJCQkgICAgICAgKHUxNikgKFBQQlVGX0JBU0UyICsgaSksIDB4RkYsCi0JCQkJCSAgICAgICBidWZbaV0pOwotCQkJfQotCQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMjUwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlrZnJlZShidWYpOwotCQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQkJCX0KLQotCQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCQkJZm9yIChpID0gMjU2OyBpIDwgZGF0YV9sZW47IGkrKykgewotCQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsCi0JCQkJCSAgICAgICAodTE2KSAoUFBCVUZfQkFTRTIgKyBpKSwgMHhGRiwKLQkJCQkJICAgICAgIGJ1ZltpXSk7Ci0JCQl9Ci0JCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAyNTApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWtmcmVlKGJ1Zik7Ci0JCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1dyaXRlX0NtZF9GYWlsZWQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCQkJZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuOyBpKyspIHsKLQkJCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELAotCQkJCQkgICAgICAgKHUxNikgKFBQQlVGX0JBU0UyICsgaSksIDB4RkYsCi0JCQkJCSAgICAgICBidWZbaV0pOwotCQkJfQotCQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQywgMjUwKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlrZnJlZShidWYpOwotCQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQkJCX0KLQkJfQotCi0JCWtmcmVlKGJ1Zik7Ci0KLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0gsIDB4RkYsCi0JCQkgICAgICAgKHU4KSAoKGRhdGFfbGVuID4+IDgpICYgMHgwMykpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CWVRFX0NOVF9MLCAweEZGLAotCQkJICAgICAgICh1OCkgZGF0YV9sZW4pOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfSCwgMHhGRiwgMHgwMCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9MLCAweEZGLCAweDAxKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9EQVRBX1NPVVJDRSwgMHgwMSwKLQkJCSAgICAgICBQSU5HUE9OR19CVUZGRVIpOwotCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLCAweEZGLAotCQkJICAgICAgIFNEX1RNX0FVVE9fV1JJVEVfMyB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCi0JCQkgICAgICAgU0RfVFJBTlNGRVJfRU5ELCBTRF9UUkFOU0ZFUl9FTkQpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1dyaXRlX0NtZF9GYWlsZWQpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDI1MCk7Ci0JCWlmIChDSEVDS19TRF9UUkFOU19GQUlMKGNoaXAsIHJldHZhbCkpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZCk7Ci0JfSBlbHNlIGlmICghKGRhdGFfbGVuICYgMHgxRkYpKSB7Ci0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBTRF9CWVRFX0NOVF9ILCAweEZGLCAweDAyKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMHgwMCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9ILAotCQkJICAgICAgIDB4RkYsICh1OCkgKGRhdGFfbGVuID4+IDE3KSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9MLAotCQkJICAgICAgIDB4RkYsICh1OCkgKChkYXRhX2xlbiAmIDB4MDAwMUZFMDApID4+IDkpKTsKLQotCQlydHM1MXhfdHJhbnNfZG1hX2VuYWJsZShETUFfVE9fREVWSUNFLCBjaGlwLCBkYXRhX2xlbiwgRE1BXzUxMik7Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIDB4RkYsCi0JCQkgICAgICAgU0RfVE1fQVVUT19XUklURV8zIHwgU0RfVFJBTlNGRVJfU1RBUlQpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBTRF9UUkFOU0ZFUiwKLQkJCSAgICAgICBTRF9UUkFOU0ZFUl9FTkQsIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ0RPUiwgMTAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQotCQlyZXR2YWwgPQotCQkgICAgcnRzNTF4X3RyYW5zZmVyX2RhdGFfcmNjKGNoaXAsIFNORF9CVUxLX1BJUEUoY2hpcCksCi0JCQkJCSAgICAgZGF0YV9idWYsIGJ1Zl9sZW4sIHVzZV9zZywgTlVMTCwKLQkJCQkJICAgICAxMDAwMCwgU1RBR0VfRE8pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBTRF9FeGVjdXRlX1dyaXRlX0NtZF9GYWlsZWQpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDEwMDAwKTsKLQkJaWYgKENIRUNLX1NEX1RSQU5TX0ZBSUwoY2hpcCwgcmV0dmFsKSkKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQotCX0gZWxzZSB7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQl9Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQl3cml0ZV9lcnIgPSAxOwotCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9TVE9QLCBTRF9TVE9QIHwgU0RfQ0xSX0VSUiwKLQkJCQkgICAgICBTRF9TVE9QIHwgU0RfQ0xSX0VSUik7Ci0JCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQl9Ci0KLQlpZiAoc3RhbmRieSkgewotCQlyZXR2YWwgPSBydHM1MXhfc2Rfc2VsZWN0X2NhcmQoY2hpcCwgMSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZCk7Ci0JfQotCi0JaWYgKGNtZDEyKSB7Ci0JCXJldHZhbCA9IGV4dF9zZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIFNUT1BfVFJBTlNNSVNTSU9OLAotCQkJCQkJIDAsIFNEX1JTUF9UWVBFX1IxYiwgTlVMTCwgMCwKLQkJCQkJCSAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX0dPVE8oY2hpcCwgU0RfRXhlY3V0ZV9Xcml0ZV9DbWRfRmFpbGVkKTsKLQl9Ci0KLQlpZiAoZGF0YV9sZW4gPCA1MTIpIHsKLQkJcmV0dmFsID0gZXh0X3NkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VUX0JMT0NLTEVOLCAweDIwMCwKLQkJCQkJCSBTRF9SU1BfVFlQRV9SMSwgTlVMTCwgMCwgMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZCk7Ci0KLQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIFNEX0JZVEVfQ05UX0gsIDB4RkYsIDB4MDIpOwotCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMHgwMCk7Ci0JfQotCi0JaWYgKGNtZDEyIHx8IHN0YW5kYnkpIHsKLQkJLyogVGhlcmUgaXMgQ01ENyBvciBDTUQxMiBzZW50IGJlZm9yZSBDTUQxMyAqLwotCQljbWQxM19jaGVja2JpdCA9IDE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlyZXR2YWwgPQotCQkgICAgZXh0X3NkX3NlbmRfY21kX2dldF9yc3AoY2hpcCwgU0VORF9TVEFUVVMsIHNkX2NhcmQtPnNkX2FkZHIsCi0JCQkJCSAgICBTRF9SU1BfVFlQRV9SMSwgTlVMTCwgMCwKLQkJCQkJICAgIGNtZDEzX2NoZWNrYml0KTsKLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCX0KLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9HT1RPKGNoaXAsIFNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZCk7Ci0KLQlyZXR1cm4gVFJBTlNQT1JUX0dPT0Q7Ci0KLVNEX0V4ZWN1dGVfV3JpdGVfQ21kX0ZhaWxlZDoKLQlzZF9jYXJkLT5wcmVfY21kX2VyciA9IDE7Ci0JcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9OT19TRU5TRSk7Ci0JaWYgKHdyaXRlX2VycikKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCXJ0czUxeF9yZWxlYXNlX3NkX2NhcmQoY2hpcCk7Ci0JcnRzNTF4X2RvX3J0czUxeF9yZXNldF9zZF9jYXJkKGNoaXApOwotCWlmICghKGNoaXAtPmNhcmRfcmVhZHkgJiBTRF9DQVJEKSkKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0KLQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci19Ci0KLWludCBydHM1MXhfc2RfcGFzc190aHJ1X21vZGUoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWludCBsZW47Ci0JdTggYnVmWzE4XSA9IHsKLQkJMHgwMCwKLQkJMHgwMCwKLQkJMHgwMCwKLQkJMHgwRSwKLQkJMHgwMCwJCS8qIFZlcnNpb24gTnVtYmVyICovCi0JCTB4MDAsCQkvKiBXUCB8IE1lZGlhIFR5cGUgKi8KLQkJMHgwMCwJCS8qIFJDQSAoTG93IGJ5dGUpICovCi0JCTB4MDAsCQkvKiBSQ0EgKEhpZ2ggYnl0ZSkgKi8KLQkJMHg1MywJCS8qICdTJyAqLwotCQkweDQ0LAkJLyogJ0QnICovCi0JCTB4MjAsCQkvKiAnICcgKi8KLQkJMHg0MywJCS8qICdDJyAqLwotCQkweDYxLAkJLyogJ2EnICovCi0JCTB4NzIsCQkvKiAncicgKi8KLQkJMHg2NCwJCS8qICdkJyAqLwotCQkweDAwLAkJLyogTWF4IExVTiBOdW1iZXIgKi8KLQkJMHgwMCwKLQkJMHgwMCwKLQl9OwotCi0Jc2RfY2FyZC0+cHJlX2NtZF9lcnIgPSAwOwotCi0JaWYgKCEoQ0hLX0JJVChjaGlwLT5sdW5fbWMsIGx1bikpKSB7Ci0JCVNFVF9CSVQoY2hpcC0+bHVuX21jLCBsdW4pOwotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0NIQU5HRSk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlpZiAoKDB4NTMgIT0gc3JiLT5jbW5kWzJdKSB8fCAoMHg0NCAhPSBzcmItPmNtbmRbM10pCi0JICAgIHx8ICgweDIwICE9IHNyYi0+Y21uZFs0XSkgfHwgKDB4NDMgIT0gc3JiLT5jbW5kWzVdKQotCSAgICB8fCAoMHg2MSAhPSBzcmItPmNtbmRbNl0pIHx8ICgweDcyICE9IHNyYi0+Y21uZFs3XSkKLQkgICAgfHwgKDB4NjQgIT0gc3JiLT5jbW5kWzhdKSkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCXN3aXRjaCAoc3JiLT5jbW5kWzFdICYgMHgwRikgewotCWNhc2UgMDoKLQkJc2RfY2FyZC0+c2RfcGFzc190aHJ1X2VuID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIDE6Ci0JCXNkX2NhcmQtPnNkX3Bhc3NfdGhydV9lbiA9IDE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQkvKiAweDAxOlNEIE1lbW9yeSBDYXJkOyAweDAyOk90aGVyIE1lZGlhOyAweDAzOklsbGVnYWwgTWVkaWE7ICovCi0JYnVmWzVdID0gKDEgPT0gQ0hLX1NEKHNkX2NhcmQpKSA/IDB4MDEgOiAweDAyOwotCWlmIChjaGlwLT5jYXJkX3dwICYgU0RfQ0FSRCkKLQkJYnVmWzVdIHw9IDB4ODA7Ci0KLQlidWZbNl0gPSAodTgpIChzZF9jYXJkLT5zZF9hZGRyID4+IDE2KTsKLQlidWZbN10gPSAodTgpIChzZF9jYXJkLT5zZF9hZGRyID4+IDI0KTsKLQotCWJ1ZlsxNV0gPSBjaGlwLT5tYXhfbHVuOwotCi0JbGVuID0gbWluX3QodW5zaWduZWQsIDE4LCBzY3NpX2J1ZmZsZW4oc3JiKSk7Ci0JcnRzNTF4X3NldF94ZmVyX2J1ZihidWYsIGxlbiwgc3JiKTsKLQotCXJldHVybiBUUkFOU1BPUlRfR09PRDsKLX0KLQotaW50IHJ0czUxeF9zZF9leGVjdXRlX25vX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWludCByZXR2YWw7Ci0JdTggY21kX2lkeCwgcnNwX2NvZGU7Ci0JdTggc3RhbmRieSA9IDAsIGFjbWQgPSAwOwotCXUzMiBhcmc7Ci0KLQlpZiAoIXNkX2NhcmQtPnNkX3Bhc3NfdGhydV9lbikgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWNtZF9pZHggPSBzcmItPmNtbmRbMl0gJiAweDNGOwotCWlmIChzcmItPmNtbmRbMV0gJiAweDAyKQotCQlzdGFuZGJ5ID0gMTsKLQlpZiAoc3JiLT5jbW5kWzFdICYgMHgwMSkKLQkJYWNtZCA9IDE7Ci0KLQlhcmcgPSAoKHUzMikgc3JiLT5jbW5kWzNdIDw8IDI0KSB8ICgodTMyKSBzcmItPmNtbmRbNF0gPDwgMTYpIHwKLQkgICAgKCh1MzIpIHNyYi0+Y21uZFs1XSA8PCA4KSB8IHNyYi0+Y21uZFs2XTsKLQotCXJzcF9jb2RlID0gc3JiLT5jbW5kWzEwXTsKLQotCXJldHZhbCA9Ci0JICAgIGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV9ub19kYXRhKGNoaXAsIGx1biwgY21kX2lkeCwgc3RhbmRieSwgYWNtZCwgcnNwX2NvZGUsCi0JCQkJICAgYXJnKTsKLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBydHM1MXhfc2RfZXhlY3V0ZV9yZWFkX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0JdTggY21kX2lkeCwgcnNwX2NvZGUsIHNlbmRfY21kMTIgPSAwLCBzdGFuZGJ5ID0gMCwgYWNtZCA9IDA7Ci0JdTMyIGFyZywgZGF0YV9sZW47Ci0KLQlpZiAoIXNkX2NhcmQtPnNkX3Bhc3NfdGhydV9lbikgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWNtZF9pZHggPSBzcmItPmNtbmRbMl0gJiAweDNGOwotCWlmIChzcmItPmNtbmRbMV0gJiAweDA0KQotCQlzZW5kX2NtZDEyID0gMTsKLQlpZiAoc3JiLT5jbW5kWzFdICYgMHgwMikKLQkJc3RhbmRieSA9IDE7Ci0JaWYgKHNyYi0+Y21uZFsxXSAmIDB4MDEpCi0JCWFjbWQgPSAxOwotCi0JYXJnID0gKCh1MzIpIHNyYi0+Y21uZFszXSA8PCAyNCkgfCAoKHUzMikgc3JiLT5jbW5kWzRdIDw8IDE2KSB8Ci0JICAgICgodTMyKSBzcmItPmNtbmRbNV0gPDwgOCkgfCBzcmItPmNtbmRbNl07Ci0KLQlkYXRhX2xlbiA9Ci0JICAgICgodTMyKSBzcmItPmNtbmRbN10gPDwgMTYpIHwgKCh1MzIpIHNyYi0+Y21uZFs4XSA8PCA4KSB8Ci0JICAgIHNyYi0+Y21uZFs5XTsKLQlyc3BfY29kZSA9IHNyYi0+Y21uZFsxMF07Ci0KLQlyZXR2YWwgPQotCSAgICBleHRfcnRzNTF4X3NkX2V4ZWN1dGVfcmVhZF9kYXRhKGNoaXAsIGx1biwgY21kX2lkeCwgc2VuZF9jbWQxMiwgc3RhbmRieSwKLQkJCQkgICAgIGFjbWQsIHJzcF9jb2RlLCBhcmcsIGRhdGFfbGVuLAotCQkJCSAgICAgc2NzaV9zZ2xpc3Qoc3JiKSwgc2NzaV9idWZmbGVuKHNyYiksCi0JCQkJICAgICBzY3NpX3NnX2NvdW50KHNyYikpOwotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgMCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50IHJ0czUxeF9zZF9leGVjdXRlX3dyaXRlX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0JdTggY21kX2lkeCwgcnNwX2NvZGUsIHNlbmRfY21kMTIgPSAwLCBzdGFuZGJ5ID0gMCwgYWNtZCA9IDA7Ci0JdTMyIGRhdGFfbGVuLCBhcmc7Ci0KLQlpZiAoIXNkX2NhcmQtPnNkX3Bhc3NfdGhydV9lbikgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWNtZF9pZHggPSBzcmItPmNtbmRbMl0gJiAweDNGOwotCWlmIChzcmItPmNtbmRbMV0gJiAweDA0KQotCQlzZW5kX2NtZDEyID0gMTsKLQlpZiAoc3JiLT5jbW5kWzFdICYgMHgwMikKLQkJc3RhbmRieSA9IDE7Ci0JaWYgKHNyYi0+Y21uZFsxXSAmIDB4MDEpCi0JCWFjbWQgPSAxOwotCi0JZGF0YV9sZW4gPQotCSAgICAoKHUzMikgc3JiLT5jbW5kWzddIDw8IDE2KSB8ICgodTMyKSBzcmItPmNtbmRbOF0gPDwgOCkgfAotCSAgICBzcmItPmNtbmRbOV07Ci0JYXJnID0KLQkgICAgKCh1MzIpIHNyYi0+Y21uZFszXSA8PCAyNCkgfCAoKHUzMikgc3JiLT5jbW5kWzRdIDw8IDE2KSB8Ci0JICAgICgodTMyKSBzcmItPmNtbmRbNV0gPDwgOCkgfCBzcmItPmNtbmRbNl07Ci0JcnNwX2NvZGUgPSBzcmItPmNtbmRbMTBdOwotCi0JcmV0dmFsID0KLQkgICAgZXh0X3J0czUxeF9zZF9leGVjdXRlX3dyaXRlX2RhdGEoY2hpcCwgbHVuLCBjbWRfaWR4LCBzZW5kX2NtZDEyLCBzdGFuZGJ5LAotCQkJCSAgICAgIGFjbWQsIHJzcF9jb2RlLCBhcmcsIGRhdGFfbGVuLAotCQkJCSAgICAgIHNjc2lfc2dsaXN0KHNyYiksIHNjc2lfYnVmZmxlbihzcmIpLAotCQkJCSAgICAgIHNjc2lfc2dfY291bnQoc3JiKSk7Ci0Jc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1pbnQgcnRzNTF4X3NkX2dldF9jbWRfcnNwKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCBzZF9pbmZvICpzZF9jYXJkID0gJihjaGlwLT5zZF9jYXJkKTsKLQl1bnNpZ25lZCBpbnQgbHVuID0gU0NTSV9MVU4oc3JiKTsKLQlpbnQgY291bnQ7Ci0JdTE2IGRhdGFfbGVuOwotCi0JaWYgKCFzZF9jYXJkLT5zZF9wYXNzX3RocnVfZW4pIHsKLQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9JTlZBTElEX0NNRF9GSUVMRCk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlpZiAoc2RfY2FyZC0+cHJlX2NtZF9lcnIpIHsKLQkJc2RfY2FyZC0+cHJlX2NtZF9lcnIgPSAwOwotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0NIQU5HRSk7Ci0JCVRSQUNFX1JFVChjaGlwLCBUUkFOU1BPUlRfRkFJTEVEKTsKLQl9Ci0KLQlkYXRhX2xlbiA9ICgodTE2KSBzcmItPmNtbmRbN10gPDwgOCkgfCBzcmItPmNtbmRbOF07Ci0KLQlpZiAoc2RfY2FyZC0+bGFzdF9yc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMCkgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0gZWxzZSBpZiAoc2RfY2FyZC0+bGFzdF9yc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMikgewotCQljb3VudCA9IChkYXRhX2xlbiA8IDE3KSA/IGRhdGFfbGVuIDogMTc7Ci0JfSBlbHNlIHsKLQkJY291bnQgPSAoZGF0YV9sZW4gPCA2KSA/IGRhdGFfbGVuIDogNjsKLQl9Ci0JcnRzNTF4X3NldF94ZmVyX2J1ZihzZF9jYXJkLT5yc3AsIGNvdW50LCBzcmIpOwotCi0JUlRTNTFYX0RFQlVHUCgiUmVzcG9uc2UgbGVuZ3RoOiAlZFxuIiwgZGF0YV9sZW4pOwotCVJUUzUxWF9ERUJVR1AoIlJlc3BvbnNlOiAweCV4IDB4JXggMHgleCAweCV4XG4iLAotCQkgICAgICAgc2RfY2FyZC0+cnNwWzBdLCBzZF9jYXJkLT5yc3BbMV0sIHNkX2NhcmQtPnJzcFsyXSwKLQkJICAgICAgIHNkX2NhcmQtPnJzcFszXSk7Ci0KLQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCXJldHVybiBUUkFOU1BPUlRfR09PRDsKLX0KLQotaW50IHJ0czUxeF9zZF9od19yc3Qoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHNkX2luZm8gKnNkX2NhcmQgPSAmKGNoaXAtPnNkX2NhcmQpOwotCXVuc2lnbmVkIGludCBsdW4gPSBTQ1NJX0xVTihzcmIpOwotCWludCByZXR2YWw7Ci0KLQlpZiAoIXNkX2NhcmQtPnNkX3Bhc3NfdGhydV9lbikgewotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmIChzZF9jYXJkLT5wcmVfY21kX2VycikgewotCQlzZF9jYXJkLT5wcmVfY21kX2VyciA9IDA7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfQ0hBTkdFKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCWlmICgoMHg1MyAhPSBzcmItPmNtbmRbMl0pIHx8ICgweDQ0ICE9IHNyYi0+Y21uZFszXSkKLQkgICAgfHwgKDB4MjAgIT0gc3JiLT5jbW5kWzRdKSB8fCAoMHg0MyAhPSBzcmItPmNtbmRbNV0pCi0JICAgIHx8ICgweDYxICE9IHNyYi0+Y21uZFs2XSkgfHwgKDB4NzIgIT0gc3JiLT5jbW5kWzddKQotCSAgICB8fCAoMHg2NCAhPSBzcmItPmNtbmRbOF0pKSB7Ci0JCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfSU5WQUxJRF9DTURfRklFTEQpOwotCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JfQotCi0Jc3dpdGNoIChzcmItPmNtbmRbMV0gJiAweDBGKSB7Ci0JY2FzZSAwOgotCQkvKiBTRCBDYXJkIFBvd2VyIE9mZiAtPiBPTiBhbmQgSW5pdGlhbGl6YXRpb24gKi8KLQkJcmV0dmFsID0gcnRzNTF4X3Jlc2V0X3NkX2NhcmQoY2hpcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sIFNFTlNFX1RZUEVfTUVESUFfTk9UX1BSRVNFTlQpOwotCQkJc2RfY2FyZC0+cHJlX2NtZF9lcnIgPSAxOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgotCQkvKiByZXNldCBDTUQoQ01EMCkgYW5kIEluaXRpYWxpemF0aW9uCi0JCSAqICh3aXRob3V0IFNEIENhcmQgUG93ZXIgT2ZmIC0+IE9OKSAqLwotCQlyZXR2YWwgPSByZXNldF9zZChjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCQlzZF9jYXJkLT5wcmVfY21kX2VyciA9IDE7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgVFJBTlNQT1JUX0ZBSUxFRCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLCBTRU5TRV9UWVBFX01FRElBX0lOVkFMSURfQ01EX0ZJRUxEKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIFRSQU5TUE9SVF9GQUlMRUQpOwotCX0KLQotCXNjc2lfc2V0X3Jlc2lkKHNyYiwgMCk7Ci0JcmV0dXJuIFRSQU5TUE9SVF9HT09EOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9zZF9jcHJtLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS9zZF9jcHJtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZGZkMjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvc2RfY3BybS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKiBIZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaWZuZGVmIF9fUlRTNTFYX1NEX0NQUk1fSAotI2RlZmluZSBfX1JUUzUxWF9TRF9DUFJNX0gKLQotI2luY2x1ZGUgInJ0czUxeF9jaGlwLmgiCi0jaW5jbHVkZSAic2QuaCIKLQotI2lmZGVmIFNVUFBPUlRfQ1BSTQotaW50IGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV9ub19kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1biwKLQkJCSAgIHU4IGNtZF9pZHgsIHU4IHN0YW5kYnksIHU4IGFjbWQsIHU4IHJzcF9jb2RlLAotCQkJICAgdTMyIGFyZyk7Ci1pbnQgZXh0X3J0czUxeF9zZF9leGVjdXRlX3JlYWRfZGF0YShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBsdW4sCi0JCQkgICAgIHU4IGNtZF9pZHgsIHU4IGNtZDEyLCB1OCBzdGFuZGJ5LCB1OCBhY21kLAotCQkJICAgICB1OCByc3BfY29kZSwgdTMyIGFyZywgdTMyIGRhdGFfbGVuLCB2b2lkICpkYXRhX2J1ZiwKLQkJCSAgICAgdW5zaWduZWQgaW50IGJ1Zl9sZW4sIGludCB1c2Vfc2cpOwotaW50IGV4dF9ydHM1MXhfc2RfZXhlY3V0ZV93cml0ZV9kYXRhKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGx1biwKLQkJCSAgICAgIHU4IGNtZF9pZHgsIHU4IGNtZDEyLCB1OCBzdGFuZGJ5LCB1OCBhY21kLAotCQkJICAgICAgdTggcnNwX2NvZGUsIHUzMiBhcmcsIHUzMiBkYXRhX2xlbiwKLQkJCSAgICAgIHZvaWQgKmRhdGFfYnVmLCB1bnNpZ25lZCBpbnQgYnVmX2xlbiwgaW50IHVzZV9zZyk7Ci0KLWludCBydHM1MXhfc2RfcGFzc190aHJ1X21vZGUoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9zZF9leGVjdXRlX25vX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9zZF9leGVjdXRlX3JlYWRfZGF0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X3NkX2V4ZWN1dGVfd3JpdGVfZGF0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCk7Ci1pbnQgcnRzNTF4X3NkX2dldF9jbWRfcnNwKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfc2RfaHdfcnN0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogX19SVFM1MVhfU0RfQ1BSTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS90cmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkvdHJhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1OGI0NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS90cmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyogRHJpdmVyIGZvciBSZWFsdGVrIFJUUzUxeHggVVNCIGNhcmQgcmVhZGVyCi0gKiBIZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaWZuZGVmIF9fUlRTNTFYX1RSQUNFX0gKLSNkZWZpbmUgX19SVFM1MVhfVFJBQ0VfSAotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJkZWJ1Zy5oIgotCi0jZGVmaW5lIF9NU0dfVFJBQ0UKLQotI2lmZGVmIF9NU0dfVFJBQ0UKLSNkZWZpbmUgVFJBQ0VfUkVUKGNoaXAsIHJldCkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWNvbnN0IGNoYXIgKl9maWxlID0ga2Jhc2VuYW1lKF9fRklMRV9fKTsJCQlcCi0JUlRTNTFYX0RFQlVHUCgiWyVzXVslc106WyVkXVxuIiwgX2ZpbGUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CVwKLQkoY2hpcCktPnRyYWNlX21zZ1soY2hpcCktPm1zZ19pZHhdLmxpbmUgPSAodTE2KShfX0xJTkVfXyk7CVwKLQlzdHJuY3B5KChjaGlwKS0+dHJhY2VfbXNnWyhjaGlwKS0+bXNnX2lkeF0uZnVuYywJCVwKLQkJCV9fZnVuY19fLCBNU0dfRlVOQ19MRU4tMSk7CQkJXAotCXN0cm5jcHkoKGNoaXApLT50cmFjZV9tc2dbKGNoaXApLT5tc2dfaWR4XS5maWxlLAkJXAotCQkJX2ZpbGUsIE1TR19GSUxFX0xFTi0xKTsJCQkJXAotCWdldF9jdXJyZW50X3RpbWUoKGNoaXApLT50cmFjZV9tc2dbKGNoaXApLT5tc2dfaWR4XS50aW1ldmFsX2J1ZixcCi0JCQlUSU1FX1ZBTF9MRU4pOwlcCi0JKGNoaXApLT50cmFjZV9tc2dbKGNoaXApLT5tc2dfaWR4XS52YWxpZCA9IDE7CQkJXAotCShjaGlwKS0+bXNnX2lkeCsrOwkJCQkJCVwKLQlpZiAoKGNoaXApLT5tc2dfaWR4ID49IFRSQUNFX0lURU1fQ05UKSB7CQkJXAotCQkoY2hpcCktPm1zZ19pZHggPSAwOwkJCQkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFRSQUNFX0dPVE8oY2hpcCwgbGFiZWwpCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQljb25zdCBjaGFyICpfZmlsZSA9IGtiYXNlbmFtZShfX0ZJTEVfXyk7CQkJXAotCVJUUzUxWF9ERUJVR1AoIlslc11bJXNdOlslZF1cbiIsIF9maWxlLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCi0JKGNoaXApLT50cmFjZV9tc2dbKGNoaXApLT5tc2dfaWR4XS5saW5lID0gKHUxNikoX19MSU5FX18pOwlcCi0Jc3RybmNweSgoY2hpcCktPnRyYWNlX21zZ1soY2hpcCktPm1zZ19pZHhdLmZ1bmMsCQlcCi0JCQlfX2Z1bmNfXywgTVNHX0ZVTkNfTEVOLTEpOwkJCVwKLQlzdHJuY3B5KChjaGlwKS0+dHJhY2VfbXNnWyhjaGlwKS0+bXNnX2lkeF0uZmlsZSwJCVwKLQkJCV9maWxlLCBNU0dfRklMRV9MRU4tMSk7CQkJCVwKLQlnZXRfY3VycmVudF90aW1lKChjaGlwKS0+dHJhY2VfbXNnWyhjaGlwKS0+bXNnX2lkeF0udGltZXZhbF9idWYsXAotCQkJVElNRV9WQUxfTEVOKTsJCQkJCVwKLQkoY2hpcCktPnRyYWNlX21zZ1soY2hpcCktPm1zZ19pZHhdLnZhbGlkID0gMTsJCQlcCi0JKGNoaXApLT5tc2dfaWR4Kys7CQkJCQkJXAotCWlmICgoY2hpcCktPm1zZ19pZHggPj0gVFJBQ0VfSVRFTV9DTlQpIHsJCQlcCi0JCShjaGlwKS0+bXNnX2lkeCA9IDA7CQkJCQlcCi0JfQkJCQkJCQkJXAotCWdvdG8gbGFiZWw7CQkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBUUkFDRV9SRVQoY2hpcCwgcmV0KQlyZXR1cm4gKHJldCkKLSNkZWZpbmUgVFJBQ0VfR09UTyhjaGlwLCBsYWJlbCkJZ290byBsYWJlbAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUlRTNTEzOV9ERUJVRwotI2RlZmluZSBSVFM1MVhfRFVNUChidWYsIGJ1Zl9sZW4pCQkJCQlcCi0JcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgUlRTNTFYX1RJUCwgRFVNUF9QUkVGSVhfTk9ORSwJXAotCQkJCTE2LCAxLCAoYnVmKSwgKGJ1Zl9sZW4pLCBmYWxzZSkKLQotI2RlZmluZSBDQVRDSF9UUklHR0VSKGNoaXApCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JcnRzNTF4X2VwMF93cml0ZV9yZWdpc3RlcigoY2hpcCksIDB4RkMzMSwgMHgwMSwgMHgwMSk7CVwKLQlSVFM1MVhfREVCVUdQKCJDYXRjaCB0cmlnZ2VyIVxuIik7CQkJXAotfSB3aGlsZSAoMCkKLQotI2Vsc2UKLSNkZWZpbmUgUlRTNTFYX0RVTVAoYnVmLCBidWZfbGVuKQotI2RlZmluZSBDQVRDSF9UUklHR0VSKGNoaXApCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fUlRTNTFYX1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3hkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTEzOS94ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTQzMjM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3hkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQ1ICswLDAgQEAKLS8qIERyaXZlciBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcgotICoKLSAqIENvcHlyaWdodChjKSAyMDA5IFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBBdXRob3I6Ci0gKiAgIHd3YW5nICh3ZWlfd2FuZ0ByZWFsc2lsLmNvbS5jbikKLSAqICAgTm8uIDQ1MCwgU2hlbmh1IFJvYWQsIFN1emhvdSBJbmR1c3RyeSBQYXJrLCBTdXpob3UsIENoaW5hCi0gKiBNYWludGFpbmVyOgotICogICBFZHdpbiBSb25nIChlZHdpbl9yb25nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInJ0czUxeC5oIgotI2luY2x1ZGUgInJ0czUxeF90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJydHM1MXhfc2NzaS5oIgotI2luY2x1ZGUgInJ0czUxeF9jYXJkLmgiCi0jaW5jbHVkZSAieGQuaCIKLQotc3RhdGljIGludCB4ZF9idWlsZF9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IHpvbmVfbm8pOwotc3RhdGljIGludCB4ZF9pbml0X3BhZ2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgcGh5X2JsaywgdTE2IGxvZ29mZiwKLQkJCXU4IHN0YXJ0X3BhZ2UsIHU4IGVuZF9wYWdlKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHhkX3NldF9lcnJfY29kZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHU4IGVycl9jb2RlKQotewotCXN0cnVjdCB4ZF9pbmZvICp4ZF9jYXJkID0gJihjaGlwLT54ZF9jYXJkKTsKLQotCXhkX2NhcmQtPmVycl9jb2RlID0gZXJyX2NvZGU7Ci19Ci0KLXN0YXRpYyBpbnQgeGRfc2V0X2luaXRfcGFyYShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQl4ZF9jYXJkLT54ZF9jbG9jayA9IDQ3OwotCWVsc2UKLQkJeGRfY2FyZC0+eGRfY2xvY2sgPSBDTEtfNTA7Ci0KLQlyZXR2YWwgPSBzd2l0Y2hfY2xvY2soY2hpcCwgeGRfY2FyZC0+eGRfY2xvY2spOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX3N3aXRjaF9jbG9jayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VsZWN0X2NhcmQoY2hpcCwgWERfQ0FSRCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBzd2l0Y2hfY2xvY2soY2hpcCwgeGRfY2FyZC0+eGRfY2xvY2spOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX3JlYWRfaWQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1OCBpZF9jbWQsIHU4ICppZF9idWYsCi0JCSAgICAgIHU4IGJ1Zl9sZW4pCi17Ci0JaW50IHJldHZhbCwgaTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX0RBVCwgMHhGRiwgaWRfY21kKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9UUkFOU0ZFUiwgMHhGRiwKLQkJICAgICAgIFhEX1RSQU5TRkVSX1NUQVJUIHwgWERfUkVBRF9JRCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgWERfVFJBTlNGRVIsIFhEX1RSQU5TRkVSX0VORCwKLQkJICAgICAgIFhEX1RSQU5TRkVSX0VORCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgKHUxNikgKFhEX0FERFJFU1MxICsgaSksIDAsCi0JCQkgICAgICAgMCk7Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDIwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDUsIDIwKTsKLQotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlpZiAoaWRfYnVmICYmIGJ1Zl9sZW4pIHsKLQkJaWYgKGJ1Zl9sZW4gPiA0KQotCQkJYnVmX2xlbiA9IDQ7Ci0JCXJ0czUxeF9yZWFkX3JzcF9idWYoY2hpcCwgMSwgaWRfYnVmLCBidWZfbGVuKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB2b2lkIHhkX2Fzc2lnbl9waHlfYWRkcihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBhZGRyLCB1OCBtb2RlKQotewotCXN0cnVjdCB4ZF9pbmZvICp4ZF9jYXJkID0gJihjaGlwLT54ZF9jYXJkKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgWERfUldfQUREUjoKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQUREUkVTUzAsIDB4RkYsIDApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9BRERSRVNTMSwgMHhGRiwKLQkJCSAgICAgICAodTgpIGFkZHIpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9BRERSRVNTMiwgMHhGRiwKLQkJCSAgICAgICAodTgpIChhZGRyID4+IDgpKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQUREUkVTUzMsIDB4RkYsCi0JCQkgICAgICAgKHU4KSAoYWRkciA+PiAxNikpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DRkcsIDB4RkYsCi0JCQkgICAgICAgeGRfY2FyZC0+YWRkcl9jeWNsZSB8IFhEX0NBTENfRUNDIHwKLQkJCSAgICAgICBYRF9CQV9OT19UUkFOU0ZPUk0pOwotCQlicmVhazsKLQotCWNhc2UgWERfRVJBU0VfQUREUjoKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQUREUkVTUzAsIDB4RkYsCi0JCQkgICAgICAgKHU4KSBhZGRyKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQUREUkVTUzEsIDB4RkYsCi0JCQkgICAgICAgKHU4KSAoYWRkciA+PiA4KSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX0FERFJFU1MyLCAweEZGLAotCQkJICAgICAgICh1OCkgKGFkZHIgPj4gMTYpKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQ0ZHLCAweEZGLAotCQkJICAgICAgICh4ZF9jYXJkLT5hZGRyX2N5Y2xlIC0gMSkgfAotCQkJICAgICAgIFhEX0NBTENfRUNDIHwgWERfQkFfTk9fVFJBTlNGT1JNKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgeGRfcmVhZF9yZWR1bmRhbnQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgcGFnZV9hZGRyLCB1OCAqYnVmLAotCQkJICAgICBpbnQgYnVmX2xlbikKLXsKLQlpbnQgcmV0dmFsLCBpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JeGRfYXNzaWduX3BoeV9hZGRyKGNoaXAsIHBhZ2VfYWRkciwgWERfUldfQUREUik7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9UUkFOU0ZFUiwgMHhGRiwKLQkJICAgICAgIFhEX1RSQU5TRkVSX1NUQVJUIHwgWERfUkVBRF9SRURVTkRBTlQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFhEX1RSQU5TRkVSLCBYRF9UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQpOwotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsICh1MTYpIChYRF9QQUdFX1NUQVRVUyArIGkpLAotCQkJICAgICAgIDAsIDApOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgKHUxNikgKFhEX1JFU0VSVkVEMCArIGkpLCAwLAotCQkJICAgICAgIDApOwotCX0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFhEX1BBUklUWSwgMCwgMCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiwgMTAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDExLCA1MDApOwotCi0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfY2xlYXJfeGRfZXJyb3IoY2hpcCk7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCWlmIChidWYgJiYgYnVmX2xlbikgewotCQlpZiAoYnVmX2xlbiA+IDExKQotCQkJYnVmX2xlbiA9IDExOwotCQlydHM1MXhfcmVhZF9yc3BfYnVmKGNoaXAsIDEsIGJ1ZiwgYnVmX2xlbik7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX3JlYWRfZGF0YV9mcm9tX3BwYihzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIGludCBvZmZzZXQsIHU4ICpidWYsCi0JCQkJIGludCBidWZfbGVuKQotewotCWludCByZXR2YWwsIGk7Ci0KLQlpZiAoIWJ1ZiB8fCAoYnVmX2xlbiA8PSAwKSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBidWZfbGVuOyBpKyspIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBQUEJVRl9CQVNFMiArIG9mZnNldCArIGksIDAsCi0JCQkgICAgICAgMCk7Ci0JfQotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCBidWZfbGVuLCAyMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcnRzNTF4X3JlYWRfcnNwX2J1ZihjaGlwLCAwLCBidWYsIGJ1Zl9sZW4pOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX3JlYWRfY2lzKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTMyIHBhZ2VfYWRkciwgdTggKmJ1ZiwKLQkJICAgICAgIGludCBidWZfbGVuKQotewotCWludCByZXR2YWw7Ci0JdTggcmVnOwotCi0JaWYgKCFidWYgfHwgKGJ1Zl9sZW4gPCAxMCkpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQl4ZF9hc3NpZ25fcGh5X2FkZHIoY2hpcCwgcGFnZV9hZGRyLCBYRF9SV19BRERSKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBQSU5HUE9OR19CVUZGRVIpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1BBR0VfQ05ULCAweEZGLCAxKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DSEtfREFUQV9TVEFUVVMsCi0JCSAgICAgICBYRF9BVVRPX0NIS19EQVRBX1NUQVRVUywgWERfQVVUT19DSEtfREFUQV9TVEFUVVMpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9TVEFSVCB8IFhEX1JFQURfUEFHRVMpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFhEX1RSQU5TRkVSLAotCQkgICAgICAgWERfVFJBTlNGRVJfRU5EIHwgWERfUFBCX0VNUFRZLAotCQkgICAgICAgWERfVFJBTlNGRVJfRU5EIHwgWERfUFBCX0VNUFRZKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgNTAwKTsKLQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkgewotCQlydHM1MXhfY2xlYXJfeGRfZXJyb3IoY2hpcCk7Ci0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBYRF9QQUdFX1NUQVRVUywgJnJlZyk7Ci0JaWYgKHJlZyAhPSBYRF9HUEcpIHsKLQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCVJUUzUxWF9SRUFEX1JFRyhjaGlwLCBYRF9DVEwsICZyZWcpOwotCi0JaWYgKCEocmVnICYgWERfRUNDMV9FUlJPUikgfHwgIShyZWcgJiBYRF9FQ0MxX1VOQ09SUkVDVEFCTEUpKSB7Ci0JCXJldHZhbCA9IHhkX3JlYWRfZGF0YV9mcm9tX3BwYihjaGlwLCAwLCBidWYsIGJ1Zl9sZW4pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCWlmIChyZWcgJiBYRF9FQ0MxX0VSUk9SKSB7CS8qIGNvcnJlY3RhYmxlIGVycm9yICovCi0JCQl1OCBlY2NfYml0LCBlY2NfYnl0ZTsKLQotCQkJUlRTNTFYX1JFQURfUkVHKGNoaXAsIFhEX0VDQ19CSVQxLCAmZWNjX2JpdCk7Ci0JCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgWERfRUNDX0JZVEUxLCAmZWNjX2J5dGUpOwotCi0JCQlSVFM1MVhfREVCVUdQKCJFQ0NfQklUMSA9IDB4JXgsIEVDQ19CWVRFMSA9IDB4JXhcbiIsCi0JCQkJICAgICAgIGVjY19iaXQsIGVjY19ieXRlKTsKLQkJCWlmIChlY2NfYnl0ZSA8IGJ1Zl9sZW4pIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJCZWZvcmUgY29ycmVjdDogMHgleFxuIiwKLQkJCQkJICAgICAgIGJ1ZltlY2NfYnl0ZV0pOwotCQkJCWJ1ZltlY2NfYnl0ZV0gXj0gKDEgPDwgZWNjX2JpdCk7Ci0JCQkJUlRTNTFYX0RFQlVHUCgiQWZ0ZXIgY29ycmVjdDogMHgleFxuIiwKLQkJCQkJICAgICAgIGJ1ZltlY2NfYnl0ZV0pOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICghKHJlZyAmIFhEX0VDQzJfRVJST1IpIHx8ICEocmVnICYgWERfRUNDMl9VTkNPUlJFQ1RBQkxFKSkgewotCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfU1RPUCwgWERfU1RPUCB8IFhEX0NMUl9FUlIsCi0JCQkJIFhEX1NUT1AgfCBYRF9DTFJfRVJSKTsKLQotCQlyZXR2YWwgPSB4ZF9yZWFkX2RhdGFfZnJvbV9wcGIoY2hpcCwgMjU2LCBidWYsIGJ1Zl9sZW4pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCWlmIChyZWcgJiBYRF9FQ0MyX0VSUk9SKSB7Ci0JCQl1OCBlY2NfYml0LCBlY2NfYnl0ZTsKLQotCQkJUlRTNTFYX1JFQURfUkVHKGNoaXAsIFhEX0VDQ19CSVQyLCAmZWNjX2JpdCk7Ci0JCQlSVFM1MVhfUkVBRF9SRUcoY2hpcCwgWERfRUNDX0JZVEUyLCAmZWNjX2J5dGUpOwotCi0JCQlSVFM1MVhfREVCVUdQKCJFQ0NfQklUMiA9IDB4JXgsIEVDQ19CWVRFMiA9IDB4JXhcbiIsCi0JCQkJICAgICAgIGVjY19iaXQsIGVjY19ieXRlKTsKLQkJCWlmIChlY2NfYnl0ZSA8IGJ1Zl9sZW4pIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJCZWZvcmUgY29ycmVjdDogMHgleFxuIiwKLQkJCQkJICAgICAgIGJ1ZltlY2NfYnl0ZV0pOwotCQkJCWJ1ZltlY2NfYnl0ZV0gXj0gKDEgPDwgZWNjX2JpdCk7Ci0JCQkJUlRTNTFYX0RFQlVHUCgiQWZ0ZXIgY29ycmVjdDogMHgleFxuIiwKLQkJCQkJICAgICAgIGJ1ZltlY2NfYnl0ZV0pOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgeGRfcHVsbF9jdGxfZGlzYWJsZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwxLCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDIsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMywgMHhGRiwgMHg5NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw0LCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDUsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNiwgMHhGRiwgMHhBNSk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDEsIDB4RkYsIDB4NjUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg1NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwzLCAweEZGLCAweDk1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDQsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNSwgMHhGRiwgMHg1Nik7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw2LCAweEZGLCAweDU5KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHhkX3B1bGxfY3RsX2VuYWJsZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwxLCAweEZGLCAweEFBKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDIsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMywgMHhGRiwgMHg5NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw0LCAweEZGLCAweDU1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDUsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNiwgMHhGRiwgMHhBNSk7Ci0JfSBlbHNlIHsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDEsIDB4RkYsIDB4QTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg1OSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEwzLCAweEZGLCAweDk1KTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QVUxMX0NUTDQsIDB4RkYsIDB4NTUpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BVTExfQ1RMNSwgMHhGRiwgMHg1NSk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFVMTF9DVEw2LCAweEZGLCAweDU5KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcmVzZXRfeGQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCB4ZF9pbmZvICp4ZF9jYXJkID0gJihjaGlwLT54ZF9jYXJkKTsKLQlpbnQgcmV0dmFsLCBpLCBqOwotCXU4IGlkX2J1Zls0XSwgcmVkdW50WzExXTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZWxlY3RfY2FyZChjaGlwLCBYRF9DQVJEKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQ0hLX0RBVEFfU1RBVFVTLCAweEZGLAotCQkgICAgICAgWERfUEdTVFNfTk9UX0ZGKTsKLQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQl4ZF9wdWxsX2N0bF9kaXNhYmxlKGNoaXApOwotCWVsc2UKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgRlBHQV9QVUxMX0NUTCwgMHhGRiwKLQkJCSAgICAgICAoRlBHQV9YRF9QVUxMX0NUTF9FTjEgJiBGUEdBX1hEX1BVTExfQ1RMX0VOMykpOwotCi0JaWYgKCFjaGlwLT5vcHRpb24uRlQyX2Zhc3RfbW9kZSkgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9JTklULCBYRF9OT19BVVRPX1BXUl9PRkYsCi0JCQkgICAgICAgMCk7Ci0JCWlmIChDSEVDS19QS0coY2hpcCwgTFFGUDQ4KSB8fAotCQkJCWNoaXAtPm9wdGlvbi5ydHM1MTI5X0QzMzE4X29mZl9lbmFibGUpIHsKLQkJCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFdSX0NUTCwKLQkJCQkgICAgICAgRFYzMzE4X0FVVE9fUFdSX09GRiwKLQkJCQkgICAgICAgRFYzMzE4X0FVVE9fUFdSX09GRik7Ci0JCX0KLQl9Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9PRSwgWERfT1VUUFVUX0VOLCAwKTsKLQlpZiAoIWNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKSB7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfUFdSX0NUTCwgUE9XRVJfTUFTSywKLQkJCSAgICAgICBQT1dFUl9PRkYpOwotCX0KLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0MsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JaWYgKCFjaGlwLT5vcHRpb24uRlQyX2Zhc3RfbW9kZSkgewotI2lmZGVmIFNEX1hEX0lPX0ZPTExPV19QV1IKLQkJaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpCi0JCSAgICB8fCBjaGlwLT5vcHRpb24ucnRzNTEyOV9EMzMxOF9vZmZfZW5hYmxlKSB7Ci0JCQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgQ0FSRF9QV1JfQ1RMLAotCQkJCQlMRE9fT0ZGLCBMRE9fT0ZGKTsKLQkJfQotI2VuZGlmCi0KLQkJd2FpdF90aW1lb3V0KDI1MCk7Ci0KLSNpZmRlZiBTRF9YRF9JT19GT0xMT1dfUFdSCi0JCWlmIChDSEVDS19QS0coY2hpcCwgTFFGUDQ4KQotCQkgICAgfHwgY2hpcC0+b3B0aW9uLnJ0czUxMjlfRDMzMThfb2ZmX2VuYWJsZSkgewotCQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCQkJaWYgKGNoaXAtPmFzaWNfY29kZSkgewotCQkJCXhkX3B1bGxfY3RsX2VuYWJsZShjaGlwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwKLQkJCQkJRlBHQV9QVUxMX0NUTCwgMHhGRiwKLQkJCQkJKEZQR0FfWERfUFVMTF9DVExfRU4xICYKLQkJCQkJCUZQR0FfWERfUFVMTF9DVExfRU4yKSk7Ci0JCQl9Ci0JCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0jZW5kaWYKLQotCQlyZXR2YWwgPSBydHM1MXhfY2FyZF9wb3dlcl9vbihjaGlwLCBYRF9DQVJEKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotI2lmZGVmIFNVUFBPUlRfT0NQCi0JCXdhaXRfdGltZW91dCg1MCk7Ci0JCXJ0czUxeF9nZXRfY2FyZF9zdGF0dXMoY2hpcCwgJihjaGlwLT5jYXJkX3N0YXR1cykpOwotCQljaGlwLT5vY3Bfc3RhdCA9IChjaGlwLT5jYXJkX3N0YXR1cyA+PiA0KSAmIDB4MDM7Ci0KLQkJaWYgKGNoaXAtPm9jcF9zdGF0ICYgKE1TX09DUF9OT1cgfCBNU19PQ1BfRVZFUikpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIk92ZXIgY3VycmVudCwgT0NQU1RBVCBpcyAweCV4XG4iLAotCQkJCSAgICAgICBjaGlwLT5vY3Bfc3RhdCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlpZiAoY2hpcC0+YXNpY19jb2RlKQotCQl4ZF9wdWxsX2N0bF9lbmFibGUoY2hpcCk7Ci0JZWxzZQotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBGUEdBX1BVTExfQ1RMLCAweEZGLAotCQkJICAgICAgIChGUEdBX1hEX1BVTExfQ1RMX0VOMSAmIEZQR0FfWERfUFVMTF9DVExfRU4yKSk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9PRSwgWERfT1VUUFVUX0VOLAotCQkgICAgICAgWERfT1VUUFVUX0VOKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DVEwsIFhEX0NFX0RJU0VOLCBYRF9DRV9ESVNFTik7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlpZiAoIWNoaXAtPm9wdGlvbi5GVDJfZmFzdF9tb2RlKQotCQl3YWl0X3RpbWVvdXQoMjAwKTsKLQotCXJldHZhbCA9IHhkX3NldF9pbml0X3BhcmEoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkvKiBSZWFkIElEIHRvIGNoZWNrIGlmIHRoZSB0aW1pbmcgc2V0dGluZyBpcyByaWdodCAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJdTggeGRfZGF0LCB4ZF9jdGw7Ci0KLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBYRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfRFRDVEwsIDB4RkYsCi0JCQlYRF9USU1FX1NFVFVQX1NURVAgKiAzICsgWERfVElNRV9SV19TVEVQICoKLQkJCSgyICsgaSArIGNoaXAtPm9wdGlvbi5ydHM1MXhfeGRfcndfc3RlcCkKLQkJCSsgWERfVElNRV9SV05fU1RFUCAqCi0JCQkoaSArIGNoaXAtPm9wdGlvbi5ydHM1MXhfeGRfcnduX3N0ZXApKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQ0FUQ1RMLCAweEZGLAotCQkJWERfVElNRV9TRVRVUF9TVEVQICogMyArIFhEX1RJTUVfUldfU1RFUCAqICg0ICsKLQkJCWkpICsgWERfVElNRV9SV05fU1RFUCAqICgzICsgaSkpOwotCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1RSQU5TRkVSLCAweEZGLAotCQkJICAgICAgIFhEX1RSQU5TRkVSX1NUQVJUIHwgWERfUkVTRVQpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBYRF9UUkFOU0ZFUiwKLQkJCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQsIFhEX1RSQU5TRkVSX0VORCk7Ci0KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBYRF9EQVQsIDAsIDApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFhEX0NUTCwgMCwgMCk7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0KLQkJcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMywgMTAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0KLQotCQl4ZF9kYXQgPSBjaGlwLT5yc3BfYnVmWzFdOwotCQl4ZF9jdGwgPSBjaGlwLT5yc3BfYnVmWzJdOwotCQlSVFM1MVhfREVCVUdQKCJYRF9EQVQ6IDB4JXgsIFhEX0NUTDogMHgleFxuIiwgeGRfZGF0LCB4ZF9jdGwpOwotCi0JCWlmICgoKHhkX2RhdCAmIFJFQURZX0ZMQUcpICE9IFJFQURZX1NUQVRFKQotCQkgICAgfHwgISh4ZF9jdGwgJiBYRF9SRFkpKQotCQkJY29udGludWU7Ci0KLQkJcmV0dmFsID0geGRfcmVhZF9pZChjaGlwLCBSRUFEX0lELCBpZF9idWYsIDQpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJUlRTNTFYX0RFQlVHUCgiUkVBRF9JRDogMHgleCAweCV4IDB4JXggMHgleFxuIiwKLQkJCSAgICAgICBpZF9idWZbMF0sIGlkX2J1ZlsxXSwgaWRfYnVmWzJdLCBpZF9idWZbM10pOwotCi0JCXhkX2NhcmQtPmRldmljZV9jb2RlID0gaWRfYnVmWzFdOwotCi0JCXN3aXRjaCAoeGRfY2FyZC0+ZGV2aWNlX2NvZGUpIHsKLQkJY2FzZSBYRF80TV9YOF81MTJfMToKLQkJY2FzZSBYRF80TV9YOF81MTJfMjoKLQkJCXhkX2NhcmQtPmJsb2NrX3NoaWZ0ID0gNDsJLyogMTYgcGFnZXMgcGVyIGJsb2NrICovCi0JCQl4ZF9jYXJkLT5wYWdlX29mZiA9IDB4MEY7Ci0JCQl4ZF9jYXJkLT5hZGRyX2N5Y2xlID0gMzsKLQkJCXhkX2NhcmQtPnpvbmVfY250ID0gMTsKLQkJCXhkX2NhcmQtPmNhcGFjaXR5ID0gODAwMDsJLyogNTAwICogMiBeIDQgKi8KLQkJCVhEX1NFVF80TUIoeGRfY2FyZCk7Ci0JCQlicmVhazsKLQkJY2FzZSBYRF84TV9YOF81MTI6Ci0JCQl4ZF9jYXJkLT5ibG9ja19zaGlmdCA9IDQ7Ci0JCQl4ZF9jYXJkLT5wYWdlX29mZiA9IDB4MEY7Ci0JCQl4ZF9jYXJkLT5hZGRyX2N5Y2xlID0gMzsKLQkJCXhkX2NhcmQtPnpvbmVfY250ID0gMTsKLQkJCXhkX2NhcmQtPmNhcGFjaXR5ID0gMTYwMDA7CS8qIDEwMDAgKiAyIF4gNCAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgWERfMTZNX1g4XzUxMjoKLQkJCVhEX1BBR0VfNTEyKHhkX2NhcmQpOwkvKiAzMiBwYWdlcyBwZXIgYmxvY2sgKi8KLQkJCXhkX2NhcmQtPmFkZHJfY3ljbGUgPSAzOwotCQkJeGRfY2FyZC0+em9uZV9jbnQgPSAxOwotCQkJeGRfY2FyZC0+Y2FwYWNpdHkgPSAzMjAwMDsJLyogMTAwMCAqIDIgXiA1ICovCi0JCQlicmVhazsKLQkJY2FzZSBYRF8zMk1fWDhfNTEyOgotCQkJWERfUEFHRV81MTIoeGRfY2FyZCk7Ci0JCQl4ZF9jYXJkLT5hZGRyX2N5Y2xlID0gMzsKLQkJCXhkX2NhcmQtPnpvbmVfY250ID0gMjsKLQkJCXhkX2NhcmQtPmNhcGFjaXR5ID0gNjQwMDA7CS8qIDIwMDAgKiAyIF4gNSAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgWERfNjRNX1g4XzUxMjoKLQkJCVhEX1BBR0VfNTEyKHhkX2NhcmQpOwotCQkJeGRfY2FyZC0+YWRkcl9jeWNsZSA9IDQ7Ci0JCQl4ZF9jYXJkLT56b25lX2NudCA9IDQ7Ci0JCQl4ZF9jYXJkLT5jYXBhY2l0eSA9IDEyODAwMDsJLyogNDAwMCAqIDIgXiA1ICovCi0JCQlicmVhazsKLQkJY2FzZSBYRF8xMjhNX1g4XzUxMjoKLQkJCVhEX1BBR0VfNTEyKHhkX2NhcmQpOwotCQkJeGRfY2FyZC0+YWRkcl9jeWNsZSA9IDQ7Ci0JCQl4ZF9jYXJkLT56b25lX2NudCA9IDg7Ci0JCQl4ZF9jYXJkLT5jYXBhY2l0eSA9IDI1NjAwMDsJLyogODAwMCAqIDIgXiA1ICovCi0JCQlicmVhazsKLQkJY2FzZSBYRF8yNTZNX1g4XzUxMjoKLQkJCVhEX1BBR0VfNTEyKHhkX2NhcmQpOwotCQkJeGRfY2FyZC0+YWRkcl9jeWNsZSA9IDQ7Ci0JCQl4ZF9jYXJkLT56b25lX2NudCA9IDE2OwotCQkJeGRfY2FyZC0+Y2FwYWNpdHkgPSA1MTIwMDA7CS8qIDE2MDAwICogMiBeIDUgKi8KLQkJCWJyZWFrOwotCQljYXNlIFhEXzUxMk1fWDg6Ci0JCQlYRF9QQUdFXzUxMih4ZF9jYXJkKTsKLQkJCXhkX2NhcmQtPmFkZHJfY3ljbGUgPSA0OwotCQkJeGRfY2FyZC0+em9uZV9jbnQgPSAzMjsKLQkJCXhkX2NhcmQtPmNhcGFjaXR5ID0gMTAyNDAwMDsJLyogMzIwMDAgKiAyIF4gNSAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgeERfMUdfWDhfNTEyOgotCQkJWERfUEFHRV81MTIoeGRfY2FyZCk7Ci0JCQl4ZF9jYXJkLT5hZGRyX2N5Y2xlID0gNDsKLQkJCXhkX2NhcmQtPnpvbmVfY250ID0gNjQ7Ci0JCQl4ZF9jYXJkLT5jYXBhY2l0eSA9IDIwNDgwMDA7CS8qIDY0MDAwICogMiBeIDUgKi8KLQkJCWJyZWFrOwotCQljYXNlIHhEXzJHX1g4XzUxMjoKLQkJCVhEX1BBR0VfNTEyKHhkX2NhcmQpOwotCQkJeGRfY2FyZC0+YWRkcl9jeWNsZSA9IDQ7Ci0JCQl4ZF9jYXJkLT56b25lX2NudCA9IDEyODsKLQkJCXhkX2NhcmQtPmNhcGFjaXR5ID0gNDA5NjAwMDsJLyogMTI4MDAwICogMiBeIDUgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBDb25maXJtIHRpbWluZyBzZXR0aW5nICovCi0JCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKSB7Ci0JCQlyZXR2YWwgPSB4ZF9yZWFkX2lkKGNoaXAsIFJFQURfSUQsIGlkX2J1ZiwgNCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCQlpZiAoaWRfYnVmWzFdICE9IHhkX2NhcmQtPmRldmljZV9jb2RlKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogQ3VycmVudCB0aW1pbmcgcGFzcyAqLwotCQlpZiAoaiA9PSAxMCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IDQpIHsKLQkJeGRfY2FyZC0+YmxvY2tfc2hpZnQgPSAwOwotCQl4ZF9jYXJkLT5wYWdlX29mZiA9IDA7Ci0JCXhkX2NhcmQtPmFkZHJfY3ljbGUgPSAwOwotCQl4ZF9jYXJkLT5jYXBhY2l0eSA9IDA7Ci0KLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQl9Ci0KLQlyZXR2YWwgPSB4ZF9yZWFkX2lkKGNoaXAsIFJFQURfeERfSUQsIGlkX2J1ZiwgNCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JUlRTNTFYX0RFQlVHUCgiUkVBRF94RF9JRDogMHgleCAweCV4IDB4JXggMHgleFxuIiwKLQkJICAgICAgIGlkX2J1ZlswXSwgaWRfYnVmWzFdLCBpZF9idWZbMl0sIGlkX2J1ZlszXSk7Ci0JaWYgKGlkX2J1ZlsyXSAhPSBYRF9JRF9DT0RFKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JLyogU2VhcmNoIENJUyBibG9jayAqLwotCWZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7Ci0JCXUzMiBwYWdlX2FkZHI7Ci0KLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBYRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpCi0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JCXBhZ2VfYWRkciA9ICh1MzIpIGkgPDwgeGRfY2FyZC0+YmxvY2tfc2hpZnQ7Ci0KLQkJZm9yIChqID0gMDsgaiA8IDM7IGorKykgewotCQkJcmV0dmFsID0geGRfcmVhZF9yZWR1bmRhbnQoY2hpcCwgcGFnZV9hZGRyLCByZWR1bnQsIDExKTsKLQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGogPT0gMykKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChyZWR1bnRbQkxPQ0tfU1RBVFVTXSAhPSBYRF9HQkxLKQotCQkJY29udGludWU7Ci0KLQkJaiA9IDA7Ci0JCS8qIENoZWNrIHBhZ2Ugc3RhdHVzICovCi0JCWlmIChyZWR1bnRbUEFHRV9TVEFUVVNdICE9IFhEX0dQRykgewotCQkJZm9yIChqID0gMTsgaiA8PSA4OyBqKyspIHsKLQkJCQlyZXR2YWwgPQotCQkJCSAgICB4ZF9yZWFkX3JlZHVuZGFudChjaGlwLCBwYWdlX2FkZHIgKyBqLAotCQkJCQkJICAgICAgcmVkdW50LCAxMSk7Ci0JCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCQlpZiAocmVkdW50W1BBR0VfU1RBVFVTXSA9PSBYRF9HUEcpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChqID09IDkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKHJlZHVudFtCTE9DS19TVEFUVVNdID09IFhEX0dCTEspCi0JCSAgICAmJiAocmVkdW50W1BBUklUWV0gJiBYRF9CQTFfQUxMMCkpIHsKLQkJCXU4IGJ1ZlsxMF07Ci0KLQkJCXBhZ2VfYWRkciArPSBqOwotCi0JCQlyZXR2YWwgPSB4ZF9yZWFkX2NpcyhjaGlwLCBwYWdlX2FkZHIsIGJ1ZiwgMTApOwotCQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQkJaWYgKChidWZbMF0gPT0gMHgwMSkgJiYgKGJ1ZlsxXSA9PSAweDAzKQotCQkJICAgICYmIChidWZbMl0gPT0gMHhEOSkKLQkJCSAgICAmJiAoYnVmWzNdID09IDB4MDEpICYmIChidWZbNF0gPT0gMHhGRikKLQkJCSAgICAmJiAoYnVmWzVdID09IDB4MTgpICYmIChidWZbNl0gPT0gMHgwMikKLQkJCSAgICAmJiAoYnVmWzddID09IDB4REYpICYmIChidWZbOF0gPT0gMHgwMSkKLQkJCSAgICAmJiAoYnVmWzldID09IDB4MjApKSB7Ci0JCQkJeGRfY2FyZC0+Y2lzX2Jsb2NrID0gKHUxNikgaTsKLQkJCX0KLQkJfQotCi0JCWJyZWFrOwotCX0KLQotCVJUUzUxWF9ERUJVR1AoIkNJUyBibG9jazogMHgleFxuIiwgeGRfY2FyZC0+Y2lzX2Jsb2NrKTsKLQlpZiAoeGRfY2FyZC0+Y2lzX2Jsb2NrID09IDB4RkZGRikKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCWNoaXAtPmNhcGFjaXR5W2NoaXAtPmNhcmQybHVuW1hEX0NBUkRdXSA9IHhkX2NhcmQtPmNhcGFjaXR5OwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX2NoZWNrX2RhdGFfYmxhbmsodTggKnJlZHVudCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJaWYgKHJlZHVudFtQQUdFX1NUQVRVUyArIGldICE9IDB4RkYpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoKHJlZHVudFtQQVJJVFldICYgKFhEX0VDQzFfQUxMMSB8IFhEX0VDQzJfQUxMMSkpICE9Ci0JICAgIChYRF9FQ0MxX0FMTDEgfCBYRF9FQ0MyX0FMTDEpKQotCQlyZXR1cm4gMDsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaWYgKHJlZHVudFtSRVNFUlZFRDAgKyBpXSAhPSAweEZGKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1MTYgeGRfbG9hZF9sb2dfYmxvY2tfYWRkcih1OCAqcmVkdW50KQotewotCXUxNiBhZGRyID0gMHhGRkZGOwotCi0JaWYgKHJlZHVudFtQQVJJVFldICYgWERfQkExX0JBMl9FUUwpCi0JCWFkZHIgPQotCQkgICAgKCh1MTYpIHJlZHVudFtCTE9DS19BRERSMV9IXSA8PCA4KSB8IHJlZHVudFtCTE9DS19BRERSMV9MXTsKLQllbHNlIGlmIChyZWR1bnRbUEFSSVRZXSAmIFhEX0JBMV9WQUxJRCkKLQkJYWRkciA9Ci0JCSAgICAoKHUxNikgcmVkdW50W0JMT0NLX0FERFIxX0hdIDw8IDgpIHwgcmVkdW50W0JMT0NLX0FERFIxX0xdOwotCWVsc2UgaWYgKHJlZHVudFtQQVJJVFldICYgWERfQkEyX1ZBTElEKQotCQlhZGRyID0KLQkJICAgICgodTE2KSByZWR1bnRbQkxPQ0tfQUREUjJfSF0gPDwgOCkgfCByZWR1bnRbQkxPQ0tfQUREUjJfTF07Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGludCB4ZF9pbml0X2wycF90Ymwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKQotewotCXN0cnVjdCB4ZF9pbmZvICp4ZF9jYXJkID0gJihjaGlwLT54ZF9jYXJkKTsKLQlpbnQgc2l6ZSwgaTsKLQotCVJUUzUxWF9ERUJVR1AoInhkX2luaXRfbDJwX3RibDogem9uZV9jbnQgPSAlZFxuIiwgeGRfY2FyZC0+em9uZV9jbnQpOwotCi0JaWYgKHhkX2NhcmQtPnpvbmVfY250IDwgMSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXNpemUgPSB4ZF9jYXJkLT56b25lX2NudCAqIHNpemVvZihzdHJ1Y3Qgem9uZV9lbnRyeSk7Ci0JUlRTNTFYX0RFQlVHUCgiQnVmZmVyIHNpemUgZm9yIGwycCB0YWJsZSBpcyAlZFxuIiwgc2l6ZSk7Ci0KLQl4ZF9jYXJkLT56b25lID0gdm1hbGxvYyhzaXplKTsKLQlpZiAoIXhkX2NhcmQtPnpvbmUpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfTk9NRU0pOwotCi0JZm9yIChpID0gMDsgaSA8IHhkX2NhcmQtPnpvbmVfY250OyBpKyspIHsKLQkJeGRfY2FyZC0+em9uZVtpXS5idWlsZF9mbGFnID0gMDsKLQkJeGRfY2FyZC0+em9uZVtpXS5sMnBfdGFibGUgPSBOVUxMOwotCQl4ZF9jYXJkLT56b25lW2ldLmZyZWVfdGFibGUgPSBOVUxMOwotCQl4ZF9jYXJkLT56b25lW2ldLmdldF9pbmRleCA9IDA7Ci0JCXhkX2NhcmQtPnpvbmVbaV0uc2V0X2luZGV4ID0gMDsKLQkJeGRfY2FyZC0+em9uZVtpXS51bnVzZWRfYmxrX2NudCA9IDA7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV96b25lKHN0cnVjdCB6b25lX2VudHJ5ICp6b25lKQotewotCVJUUzUxWF9ERUJVR1AoImZyZWVfem9uZVxuIik7Ci0JaWYgKCF6b25lKQotCQlyZXR1cm47Ci0Jem9uZS0+YnVpbGRfZmxhZyA9IDA7Ci0Jem9uZS0+c2V0X2luZGV4ID0gMDsKLQl6b25lLT5nZXRfaW5kZXggPSAwOwotCXpvbmUtPnVudXNlZF9ibGtfY250ID0gMDsKLQlpZiAoem9uZS0+bDJwX3RhYmxlKSB7Ci0JCXZmcmVlKHpvbmUtPmwycF90YWJsZSk7Ci0JCXpvbmUtPmwycF90YWJsZSA9IE5VTEw7Ci0JfQotCWlmICh6b25lLT5mcmVlX3RhYmxlKSB7Ci0JCXZmcmVlKHpvbmUtPmZyZWVfdGFibGUpOwotCQl6b25lLT5mcmVlX3RhYmxlID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHhkX3NldF91bnVzZWRfYmxvY2soc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCB1MzIgcGh5X2JsaykKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0Jc3RydWN0IHpvbmVfZW50cnkgKnpvbmU7Ci0JaW50IHpvbmVfbm87Ci0KLQl6b25lX25vID0gKGludClwaHlfYmxrID4+IDEwOwotCWlmICh6b25lX25vID49IHhkX2NhcmQtPnpvbmVfY250KSB7Ci0JCVJUUzUxWF9ERUJVR1AoIlNldCB1bnVzZWQgYmxvY2sgdG8gaW52YWxpZCB6b25lIgotCQkJCQkiKHpvbmVfbm8gPSAlZCwgem9uZV9jbnQgPSAlZClcbiIsCi0JCQkJCXpvbmVfbm8sIHhkX2NhcmQtPnpvbmVfY250KTsKLQkJcmV0dXJuOwotCX0KLQl6b25lID0gJih4ZF9jYXJkLT56b25lW3pvbmVfbm9dKTsKLQotCWlmICh6b25lLT5mcmVlX3RhYmxlID09IE5VTEwpIHsKLQkJaWYgKHhkX2J1aWxkX2wycF90YmwoY2hpcCwgem9uZV9ubykgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlyZXR1cm47Ci0JfQotCi0JaWYgKCh6b25lLT5zZXRfaW5kZXggPj0gWERfRlJFRV9UQUJMRV9DTlQpCi0JICAgIHx8ICh6b25lLT5zZXRfaW5kZXggPCAwKSkgewotCQlmcmVlX3pvbmUoem9uZSk7Ci0JCVJUUzUxWF9ERUJVR1AoIlNldCB1bnVzZWQgYmxvY2sgZmFpbCwgaW52YWxpZCBzZXRfaW5kZXhcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JUlRTNTFYX0RFQlVHUCgiU2V0IHVudXNlZCBibG9jayB0byBpbmRleCAlZFxuIiwgem9uZS0+c2V0X2luZGV4KTsKLQotCXpvbmUtPmZyZWVfdGFibGVbem9uZS0+c2V0X2luZGV4KytdID0gKHUxNikgKHBoeV9ibGsgJiAweDNmZik7Ci0JaWYgKHpvbmUtPnNldF9pbmRleCA+PSBYRF9GUkVFX1RBQkxFX0NOVCkKLQkJem9uZS0+c2V0X2luZGV4ID0gMDsKLQl6b25lLT51bnVzZWRfYmxrX2NudCsrOwotfQotCi1zdGF0aWMgdTMyIHhkX2dldF91bnVzZWRfYmxvY2soc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgem9uZV9ubykKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0Jc3RydWN0IHpvbmVfZW50cnkgKnpvbmU7Ci0JdTMyIHBoeV9ibGs7Ci0KLQlpZiAoem9uZV9ubyA+PSB4ZF9jYXJkLT56b25lX2NudCkgewotCQlSVFM1MVhfREVCVUdQKCJHZXQgdW51c2VkIGJsb2NrIGZyb20gaW52YWxpZCB6b25lIgotCQkJCQkiKHpvbmVfbm8gPSAlZCwgem9uZV9jbnQgPSAlZClcbiIsCi0JCQkJCXpvbmVfbm8sIHhkX2NhcmQtPnpvbmVfY250KTsKLQkJVFJBQ0VfUkVUKGNoaXAsIEJMS19OT1RfRk9VTkQpOwotCX0KLQl6b25lID0gJih4ZF9jYXJkLT56b25lW3pvbmVfbm9dKTsKLQotCWlmICgoem9uZS0+dW51c2VkX2Jsa19jbnQgPT0gMCkgfHwKLQkJCSh6b25lLT5zZXRfaW5kZXggPT0gem9uZS0+Z2V0X2luZGV4KSkgewotCQlmcmVlX3pvbmUoem9uZSk7Ci0JCVJUUzUxWF9ERUJVR1AoIkdldCB1bnVzZWQgYmxvY2sgZmFpbCwiCi0JCQkJCSJubyB1bnVzZWQgYmxvY2sgYXZhaWxhYmxlXG4iKTsKLQkJVFJBQ0VfUkVUKGNoaXAsIEJMS19OT1RfRk9VTkQpOwotCX0KLQlpZiAoKHpvbmUtPmdldF9pbmRleCA+PSBYRF9GUkVFX1RBQkxFX0NOVCkgfHwgKHpvbmUtPmdldF9pbmRleCA8IDApKSB7Ci0JCWZyZWVfem9uZSh6b25lKTsKLQkJUlRTNTFYX0RFQlVHUCgiR2V0IHVudXNlZCBibG9jayBmYWlsLCBpbnZhbGlkIGdldF9pbmRleFxuIik7Ci0JCVRSQUNFX1JFVChjaGlwLCBCTEtfTk9UX0ZPVU5EKTsKLQl9Ci0KLQlSVFM1MVhfREVCVUdQKCJHZXQgdW51c2VkIGJsb2NrIGZyb20gaW5kZXggJWRcbiIsIHpvbmUtPmdldF9pbmRleCk7Ci0KLQlwaHlfYmxrID0gem9uZS0+ZnJlZV90YWJsZVt6b25lLT5nZXRfaW5kZXhdOwotCXpvbmUtPmZyZWVfdGFibGVbem9uZS0+Z2V0X2luZGV4KytdID0gMHhGRkZGOwotCWlmICh6b25lLT5nZXRfaW5kZXggPj0gWERfRlJFRV9UQUJMRV9DTlQpCi0JCXpvbmUtPmdldF9pbmRleCA9IDA7Ci0Jem9uZS0+dW51c2VkX2Jsa19jbnQtLTsKLQotCXBoeV9ibGsgKz0gKCh1MzIpICh6b25lX25vKSA8PCAxMCk7Ci0JcmV0dXJuIHBoeV9ibGs7Ci19Ci0KLXN0YXRpYyB2b2lkIHhkX3NldF9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IHpvbmVfbm8sIHUxNiBsb2dfb2ZmLAotCQkJICAgdTE2IHBoeV9vZmYpCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCXN0cnVjdCB6b25lX2VudHJ5ICp6b25lOwotCi0Jem9uZSA9ICYoeGRfY2FyZC0+em9uZVt6b25lX25vXSk7Ci0Jem9uZS0+bDJwX3RhYmxlW2xvZ19vZmZdID0gcGh5X29mZjsKLX0KLQotc3RhdGljIGludCB4ZF9kZWxheV93cml0ZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotCi1zdGF0aWMgdTMyIHhkX2dldF9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgaW50IHpvbmVfbm8sIHUxNiBsb2dfb2ZmKQotewotCXN0cnVjdCB4ZF9pbmZvICp4ZF9jYXJkID0gJihjaGlwLT54ZF9jYXJkKTsKLQlzdHJ1Y3Qgem9uZV9lbnRyeSAqem9uZTsKLQlpbnQgcmV0dmFsOwotCi0Jem9uZSA9ICYoeGRfY2FyZC0+em9uZVt6b25lX25vXSk7Ci0JaWYgKHpvbmUtPmwycF90YWJsZVtsb2dfb2ZmXSA9PSAweEZGRkYpIHsKLQkJdTMyIHBoeV9ibGsgPSAwOwotCQlpbnQgaTsKLQotCQlyZXR2YWwgPSB4ZF9kZWxheV93cml0ZShjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJUlRTNTFYX0RFQlVHUCgiSW4geGRfZ2V0X2wycF90YmwsIgotCQkJCQkJImRlbGF5IHdyaXRlIGZhaWwhXG4iKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBCTEtfTk9UX0ZPVU5EKTsKLQkJfQotCi0JCWlmICh6b25lLT51bnVzZWRfYmxrX2NudCA8PSAwKSB7Ci0JCQlSVFM1MVhfREVCVUdQKCJObyB1bnVzZWQgYmxvY2shXG4iKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBCTEtfTk9UX0ZPVU5EKTsKLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCB6b25lLT51bnVzZWRfYmxrX2NudDsgaSsrKSB7Ci0JCQlwaHlfYmxrID0geGRfZ2V0X3VudXNlZF9ibG9jayhjaGlwLCB6b25lX25vKTsKLQkJCWlmIChwaHlfYmxrID09IEJMS19OT1RfRk9VTkQpIHsKLQkJCQlSVFM1MVhfREVCVUdQKCJObyB1bnVzZWQgYmxvY2sgYXZhaWxhYmxlIVxuIik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIEJMS19OT1RfRk9VTkQpOwotCQkJfQotCi0JCQlyZXR2YWwgPQotCQkJICAgIHhkX2luaXRfcGFnZShjaGlwLCBwaHlfYmxrLCBsb2dfb2ZmLCAwLAotCQkJCQkgeGRfY2FyZC0+cGFnZV9vZmYgKyAxKTsKLQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPj0gem9uZS0+dW51c2VkX2Jsa19jbnQpIHsKLQkJCVJUUzUxWF9ERUJVR1AoIk5vIGdvb2QgdW51c2VkIGJsb2NrIGF2YWlsYWJsZSFcbiIpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIEJMS19OT1RfRk9VTkQpOwotCQl9Ci0KLQkJeGRfc2V0X2wycF90YmwoY2hpcCwgem9uZV9ubywgbG9nX29mZiwgKHUxNikgKHBoeV9ibGsgJiAweDNGRikpOwotCQlyZXR1cm4gcGh5X2JsazsKLQl9Ci0KLQlyZXR1cm4gKHUzMikgem9uZS0+bDJwX3RhYmxlW2xvZ19vZmZdICsgKCh1MzIpICh6b25lX25vKSA8PCAxMCk7Ci19Ci0KLWludCBydHM1MXhfcmVzZXRfeGRfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQltZW1zZXQoeGRfY2FyZCwgMCwgc2l6ZW9mKHN0cnVjdCB4ZF9pbmZvKSk7Ci0KLQl4ZF9jYXJkLT5ibG9ja19zaGlmdCA9IDA7Ci0JeGRfY2FyZC0+cGFnZV9vZmYgPSAwOwotCXhkX2NhcmQtPmFkZHJfY3ljbGUgPSAwOwotCXhkX2NhcmQtPmNhcGFjaXR5ID0gMDsKLQl4ZF9jYXJkLT56b25lX2NudCA9IDA7Ci0JeGRfY2FyZC0+Y2lzX2Jsb2NrID0gMHhGRkZGOwotCXhkX2NhcmQtPmRlbGF5X3dyaXRlLmRlbGF5X3dyaXRlX2ZsYWcgPSAwOwotCi0JcnRzNTF4X2VuYWJsZV9jYXJkX2Nsb2NrKGNoaXAsIFhEX0NBUkQpOwotCi0JcmV0dmFsID0gcmVzZXRfeGQoY2hpcCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlpZiAoY2hpcC0+b3B0aW9uLnJlc2V0X29yX3J3X2ZhaWxfc2V0X3BhZF9kcml2ZSkgewotCQkJcnRzNTF4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfRFJJVkVfU0VMLAotCQkJCQkgICAgICBTRDIwX0RSSVZFX01BU0ssIERSSVZFXzhtQSk7Ci0JCX0KLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JfQotCi0JcmV0dmFsID0geGRfaW5pdF9sMnBfdGJsKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX21hcmtfYmFkX2Jsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTMyIHBoeV9ibGspCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTMyIHBhZ2VfYWRkcjsKLQl1OCByZWcgPSAwOwotCi0JUlRTNTFYX0RFQlVHUCgibWFyayBibG9jayAweCV4IGFzIGJhZCBibG9ja1xuIiwgcGh5X2Jsayk7Ci0KLQlpZiAocGh5X2JsayA9PSBCTEtfTk9UX0ZPVU5EKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfUEFHRV9TVEFUVVMsIDB4RkYsIFhEX0dQRyk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQkxPQ0tfU1RBVFVTLCAweEZGLAotCQkgICAgICAgWERfTEFURVJfQkJMSyk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQkxPQ0tfQUREUjFfSCwgMHhGRiwgMHhGRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQkxPQ0tfQUREUjFfTCwgMHhGRiwgMHhGRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQkxPQ0tfQUREUjJfSCwgMHhGRiwgMHhGRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfQkxPQ0tfQUREUjJfTCwgMHhGRiwgMHhGRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfUkVTRVJWRUQwLCAweEZGLCAweEZGKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9SRVNFUlZFRDEsIDB4RkYsIDB4RkYpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1JFU0VSVkVEMiwgMHhGRiwgMHhGRik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfUkVTRVJWRUQzLCAweEZGLCAweEZGKTsKLQotCXBhZ2VfYWRkciA9IHBoeV9ibGsgPDwgeGRfY2FyZC0+YmxvY2tfc2hpZnQ7Ci0KLQl4ZF9hc3NpZ25fcGh5X2FkZHIoY2hpcCwgcGFnZV9hZGRyLCBYRF9SV19BRERSKTsKLQotCS8qIFNwZWNpZnkgcGFnZSBjb3VudCAqLwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1BBR0VfQ05ULCAweEZGLAotCQkgICAgICAgeGRfY2FyZC0+cGFnZV9vZmYgKyAxKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgWERfVFJBTlNGRVJfU1RBUlQgfCBYRF9XUklURV9SRURVTkRBTlQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFhEX1RSQU5TRkVSLCBYRF9UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDEwMCk7Ci0KLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQkJcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFhEX0RBVCwgJnJlZyk7Ci0JCWlmIChyZWcgJiBQUk9HUkFNX0VSUk9SKQotCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1BSR19FUlJPUik7Ci0JCWVsc2UKLQkJCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9UT19FUlJPUik7Ci0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHhkX2luaXRfcGFnZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBwaHlfYmxrLCB1MTYgbG9nb2ZmLAotCQkJdTggc3RhcnRfcGFnZSwgdTggZW5kX3BhZ2UpCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCWludCByZXR2YWw7Ci0JdTMyIHBhZ2VfYWRkcjsKLQl1OCByZWcgPSAwOwotCi0JUlRTNTFYX0RFQlVHUCgiSW5pdCBibG9jayAweCV4XG4iLCBwaHlfYmxrKTsKLQotCWlmIChzdGFydF9wYWdlID4gZW5kX3BhZ2UpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JaWYgKHBoeV9ibGsgPT0gQkxLX05PVF9GT1VORCkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1BBR0VfU1RBVFVTLCAweEZGLCAweEZGKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9CTE9DS19TVEFUVVMsIDB4RkYsIDB4RkYpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX0JMT0NLX0FERFIxX0gsIDB4RkYsCi0JCSAgICAgICAodTgpIChsb2dvZmYgPj4gOCkpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX0JMT0NLX0FERFIxX0wsIDB4RkYsCi0JCSAgICAgICAodTgpIGxvZ29mZik7Ci0KLQlwYWdlX2FkZHIgPSAocGh5X2JsayA8PCB4ZF9jYXJkLT5ibG9ja19zaGlmdCkgKyBzdGFydF9wYWdlOwotCi0JeGRfYXNzaWduX3BoeV9hZGRyKGNoaXAsIHBhZ2VfYWRkciwgWERfUldfQUREUik7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DRkcsIFhEX0JBX1RSQU5TRk9STSwKLQkJICAgICAgIFhEX0JBX1RSQU5TRk9STSk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9QQUdFX0NOVCwgMHhGRiwKLQkJICAgICAgIChlbmRfcGFnZSAtIHN0YXJ0X3BhZ2UpKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgWERfVFJBTlNGRVJfU1RBUlQgfCBYRF9XUklURV9SRURVTkRBTlQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFhEX1RSQU5TRkVSLCBYRF9UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDEsIDUwMCk7Ci0KLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQkJcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFhEX0RBVCwgJnJlZyk7Ci0JCWlmIChyZWcgJiBQUk9HUkFNX0VSUk9SKSB7Ci0JCQl4ZF9tYXJrX2JhZF9ibG9jayhjaGlwLCBwaHlfYmxrKTsKLQkJCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9QUkdfRVJST1IpOwotCQl9IGVsc2UgewotCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1RPX0VSUk9SKTsKLQkJfQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCB4ZF9jb3B5X3BhZ2Uoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLAotCQkJdTMyIG9sZF9ibGssIHUzMiBuZXdfYmxrLCB1OCBzdGFydF9wYWdlLCB1OCBlbmRfcGFnZSkKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0JdTMyIG9sZF9wYWdlLCBuZXdfcGFnZTsKLQl1OCBpLCByZWcgPSAwOwotCWludCByZXR2YWw7Ci0KLQlSVFM1MVhfREVCVUdQKCJDb3B5IHBhZ2UgZnJvbSBibG9jayAweCV4IHRvIGJsb2NrIDB4JXhcbiIsIG9sZF9ibGssCi0JCSAgICAgICBuZXdfYmxrKTsKLQotCWlmIChzdGFydF9wYWdlID4gZW5kX3BhZ2UpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlpZiAoKG9sZF9ibGsgPT0gQkxLX05PVF9GT1VORCkgfHwgKG5ld19ibGsgPT0gQkxLX05PVF9GT1VORCkpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlvbGRfcGFnZSA9IChvbGRfYmxrIDw8IHhkX2NhcmQtPmJsb2NrX3NoaWZ0KSArIHN0YXJ0X3BhZ2U7Ci0JbmV3X3BhZ2UgPSAobmV3X2JsayA8PCB4ZF9jYXJkLT5ibG9ja19zaGlmdCkgKyBzdGFydF9wYWdlOwotCi0JWERfQ0xSX0JBRF9ORVdCTEsoeGRfY2FyZCk7Ci0KLQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsIFBJTkdQT05HX0JVRkZFUik7Ci0KLQlmb3IgKGkgPSBzdGFydF9wYWdlOyBpIDwgZW5kX3BhZ2U7IGkrKykgewotCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIFhEX0NBUkQpID09IENEX05PVF9FWElTVCkgewotCQkJUlRTNTFYX1dSSVRFX1JFRyhjaGlwLCBDQVJEX1NUT1AsIFhEX1NUT1AgfCBYRF9DTFJfRVJSLAotCQkJCQkgWERfU1RPUCB8IFhEX0NMUl9FUlIpOwotCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX05PX0NBUkQpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJfQotCi0JCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCQl4ZF9hc3NpZ25fcGh5X2FkZHIoY2hpcCwgb2xkX3BhZ2UsIFhEX1JXX0FERFIpOwotCi0JCS8qIFNpbmdsZSBwYWdlIHJlYWQgKi8KLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfUEFHRV9DTlQsIDB4RkYsIDEpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DSEtfREFUQV9TVEFUVVMsCi0JCQkgICAgICAgWERfQVVUT19DSEtfREFUQV9TVEFUVVMsIDApOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9UUkFOU0ZFUiwgMHhGRiwKLQkJCSAgICAgICBYRF9UUkFOU0ZFUl9TVEFSVCB8IFhEX1JFQURfUEFHRVMpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBYRF9UUkFOU0ZFUiwKLQkJCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQsIFhEX1RSQU5TRkVSX0VORCk7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IgfCBTVEFHRV9YRF9TVEFUVVMsIDEwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCA0LCA1MDApOwotCQlpZiAoKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgfHwKLQkJICAgIChjaGlwLT5yc3BfYnVmWzJdICYgKFhEX0VDQzFfRVJST1IgfCBYRF9FQ0MyX0VSUk9SKSkpIHsKLQkJCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQkJCXJlZyA9IDA7Ci0JCQlydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoY2hpcCwgWERfQ1RMLCAmcmVnKTsKLQkJCWlmIChyZWcgJiAoWERfRUNDMV9FUlJPUiB8IFhEX0VDQzJfRVJST1IpKSB7Ci0JCQkJd2FpdF90aW1lb3V0KDEwMCk7Ci0KLQkJCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIFhEX0NBUkQpID09Ci0JCQkJICAgIENEX05PVF9FWElTVCkgewotCQkJCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfTk9fQ0FSRCk7Ci0JCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQkJfQotCi0JCQkJaWYgKCgocmVnICYKLQkJCQkgICAgICAoWERfRUNDMV9FUlJPUiB8IFhEX0VDQzFfVU5DT1JSRUNUQUJMRSkpCi0JCQkJICAgICA9PSAoWERfRUNDMV9FUlJPUiB8IFhEX0VDQzFfVU5DT1JSRUNUQUJMRSkpCi0JCQkJICAgIHx8ICgocmVnICYgKFhEX0VDQzJfRVJST1IgfAotCQkJCQlYRF9FQ0MyX1VOQ09SUkVDVEFCTEUpKSA9PQotCQkJCSAgICAgKFhEX0VDQzJfRVJST1IgfCBYRF9FQ0MyX1VOQ09SUkVDVEFCTEUpKSkgewotCQkJCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFhEX1BBR0VfU1RBVFVTLAotCQkJCQkJCSAweEZGLCBYRF9CUEcpOwotCQkJCQlSVFM1MVhfV1JJVEVfUkVHKGNoaXAsIFhEX0JMT0NLX1NUQVRVUywKLQkJCQkJCQkgMHhGRiwgWERfR0JMSyk7Ci0JCQkJCVhEX1NFVF9CQURfT0xEQkxLKHhkX2NhcmQpOwotCQkJCQlSVFM1MVhfREVCVUdQKCJvbGQgYmxvY2sgMHgleCIKLQkJCQkJCSJlY2MgZXJyb3JcbiIsIG9sZF9ibGspOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1RPX0VSUk9SKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0JCWlmIChYRF9DSEtfQkFEX09MREJMSyh4ZF9jYXJkKSkKLQkJCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQotCQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQkJeGRfYXNzaWduX3BoeV9hZGRyKGNoaXAsIG5ld19wYWdlLCBYRF9SV19BRERSKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfUEFHRV9DTlQsIDB4RkYsIDEpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9UUkFOU0ZFUiwgMHhGRiwKLQkJCSAgICAgICBYRF9UUkFOU0ZFUl9TVEFSVCB8IFhEX1dSSVRFX1BBR0VTKTsKLQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgQ0hFQ0tfUkVHX0NNRCwgWERfVFJBTlNGRVIsCi0JCQkgICAgICAgWERfVFJBTlNGRVJfRU5ELCBYRF9UUkFOU0ZFUl9FTkQpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NSLCAxMDApOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQkJcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgMzAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQkJcmVnID0gMDsKLQkJCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBYRF9EQVQsICZyZWcpOwotCQkJaWYgKHJlZyAmIFBST0dSQU1fRVJST1IpIHsKLQkJCQl4ZF9tYXJrX2JhZF9ibG9jayhjaGlwLCBuZXdfYmxrKTsKLQkJCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfUFJHX0VSUk9SKTsKLQkJCQlYRF9TRVRfQkFEX05FV0JMSyh4ZF9jYXJkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1RPX0VSUk9SKTsKLQkJCX0KLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0KLQkJb2xkX3BhZ2UrKzsKLQkJbmV3X3BhZ2UrKzsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgeGRfcmVzZXRfY21kKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlpbnQgcmV0dmFsOwotCXU4IHhkX2RhdCwgeGRfY3RsOwotCi0JcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9TVEFSVCB8IFhEX1JFU0VUKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBYRF9UUkFOU0ZFUiwgWERfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgWERfVFJBTlNGRVJfRU5EKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBSRUFEX1JFR19DTUQsIFhEX0RBVCwgMCwgMCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgUkVBRF9SRUdfQ01ELCBYRF9DVEwsIDAsIDApOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAzLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQl4ZF9kYXQgPSBjaGlwLT5yc3BfYnVmWzFdOwotCXhkX2N0bCA9IGNoaXAtPnJzcF9idWZbMl07Ci0JaWYgKCgoeGRfZGF0ICYgUkVBRFlfRkxBRykgPT0gUkVBRFlfU1RBVEUpICYmICh4ZF9jdGwgJiBYRF9SRFkpKQotCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0KLQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotfQotCi1zdGF0aWMgaW50IHhkX2VyYXNlX2Jsb2NrKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTMyIHBoeV9ibGspCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCXUzMiBwYWdlX2FkZHI7Ci0JdTggcmVnID0gMCwgeGRfZGF0OwotCWludCBpLCByZXR2YWw7Ci0KLQlpZiAocGh5X2JsayA9PSBCTEtfTk9UX0ZPVU5EKQotCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCi0JcGFnZV9hZGRyID0gcGh5X2JsayA8PCB4ZF9jYXJkLT5ibG9ja19zaGlmdDsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcnRzNTF4X2luaXRfY21kKGNoaXApOwotCi0JCXhkX2Fzc2lnbl9waHlfYWRkcihjaGlwLCBwYWdlX2FkZHIsIFhEX0VSQVNFX0FERFIpOwotCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1RSQU5TRkVSLCAweEZGLAotCQkJICAgICAgIFhEX1RSQU5TRkVSX1NUQVJUIHwgWERfRVJBU0UpOwotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBYRF9UUkFOU0ZFUiwKLQkJCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQsIFhEX1RSQU5TRkVSX0VORCk7Ci0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFJFQURfUkVHX0NNRCwgWERfREFULCAwLCAwKTsKLQotCQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DUiwgMTAwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCXJldHZhbCA9IHJ0czUxeF9nZXRfcnNwKGNoaXAsIDIsIDMwMCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQkJCXJ0czUxeF9lcDBfcmVhZF9yZWdpc3RlcihjaGlwLCBYRF9EQVQsICZyZWcpOwotCQkJaWYgKHJlZyAmIFBST0dSQU1fRVJST1IpIHsKLQkJCQl4ZF9tYXJrX2JhZF9ibG9jayhjaGlwLCBwaHlfYmxrKTsKLQkJCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfUFJHX0VSUk9SKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfSBlbHNlIHsKLQkJCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfRVJBU0VfRkFJTCk7Ci0JCQl9Ci0JCQlyZXR2YWwgPSB4ZF9yZXNldF9jbWQoY2hpcCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJY29udGludWU7Ci0JCX0KLQkJeGRfZGF0ID0gY2hpcC0+cnNwX2J1ZlsxXTsKLQkJaWYgKHhkX2RhdCAmIFBST0dSQU1fRVJST1IpIHsKLQkJCXhkX21hcmtfYmFkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1BSR19FUlJPUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCX0KLQotCXhkX21hcmtfYmFkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9FUkFTRV9GQUlMKTsKLQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotfQotCi1zdGF0aWMgaW50IHhkX2J1aWxkX2wycF90Ymwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwLCBpbnQgem9uZV9ubykKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0Jc3RydWN0IHpvbmVfZW50cnkgKnpvbmU7Ci0JaW50IHJldHZhbDsKLQl1MzIgc3RhcnQsIGVuZCwgaTsKLQl1MTYgbWF4X2xvZ29mZiwgY3VyX2ZzdF9wYWdlX2xvZ29mZiwgY3VyX2xzdF9wYWdlX2xvZ29mZiwKLQkgICAgZW50X2xzdF9wYWdlX2xvZ29mZjsKLQl1OCByZWR1bnRbMTFdOwotCi0JUlRTNTFYX0RFQlVHUCgieGRfYnVpbGRfbDJwX3RibDogJWRcbiIsIHpvbmVfbm8pOwotCi0JaWYgKHhkX2NhcmQtPnpvbmUgPT0gTlVMTCkgewotCQlyZXR2YWwgPSB4ZF9pbml0X2wycF90YmwoY2hpcCk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlpZiAoeGRfY2FyZC0+em9uZVt6b25lX25vXS5idWlsZF9mbGFnKSB7Ci0JCVJUUzUxWF9ERUJVR1AoImwycCB0YWJsZSBvZiB6b25lICVkIGhhcyBiZWVuIGJ1aWx0XG4iLAotCQkJICAgICAgIHpvbmVfbm8pOwotCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0JfQotCi0Jem9uZSA9ICYoeGRfY2FyZC0+em9uZVt6b25lX25vXSk7Ci0KLQlpZiAoem9uZS0+bDJwX3RhYmxlID09IE5VTEwpIHsKLQkJem9uZS0+bDJwX3RhYmxlID0gdm1hbGxvYygyMDAwKTsKLQkJaWYgKHpvbmUtPmwycF90YWJsZSA9PSBOVUxMKQotCQkJVFJBQ0VfR09UTyhjaGlwLCBCdWlsZF9GYWlsKTsKLQl9Ci0JbWVtc2V0KCh1OCAqKSAoem9uZS0+bDJwX3RhYmxlKSwgMHhmZiwgMjAwMCk7Ci0KLQlpZiAoem9uZS0+ZnJlZV90YWJsZSA9PSBOVUxMKSB7Ci0JCXpvbmUtPmZyZWVfdGFibGUgPSB2bWFsbG9jKFhEX0ZSRUVfVEFCTEVfQ05UICogMik7Ci0JCWlmICh6b25lLT5mcmVlX3RhYmxlID09IE5VTEwpCi0JCQlUUkFDRV9HT1RPKGNoaXAsIEJ1aWxkX0ZhaWwpOwotCX0KLQltZW1zZXQoKHU4ICopICh6b25lLT5mcmVlX3RhYmxlKSwgMHhmZiwgWERfRlJFRV9UQUJMRV9DTlQgKiAyKTsKLQotCWlmICh6b25lX25vID09IDApIHsKLQkJaWYgKHhkX2NhcmQtPmNpc19ibG9jayA9PSAweEZGRkYpCi0JCQlzdGFydCA9IDA7Ci0JCWVsc2UKLQkJCXN0YXJ0ID0geGRfY2FyZC0+Y2lzX2Jsb2NrICsgMTsKLQkJaWYgKFhEX0NIS180TUIoeGRfY2FyZCkpIHsKLQkJCWVuZCA9IDB4MjAwOwotCQkJbWF4X2xvZ29mZiA9IDQ5OTsKLQkJfSBlbHNlIHsKLQkJCWVuZCA9IDB4NDAwOwotCQkJbWF4X2xvZ29mZiA9IDk5OTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0YXJ0ID0gKHUzMikgKHpvbmVfbm8pIDw8IDEwOwotCQllbmQgPSAodTMyKSAoem9uZV9ubyArIDEpIDw8IDEwOwotCQltYXhfbG9nb2ZmID0gOTk5OwotCX0KLQotCVJUUzUxWF9ERUJVR1AoInN0YXJ0IGJsb2NrIDB4JXgsIGVuZCBibG9jayAweCV4XG4iLCBzdGFydCwgZW5kKTsKLQotCXpvbmUtPnNldF9pbmRleCA9IHpvbmUtPmdldF9pbmRleCA9IDA7Ci0Jem9uZS0+dW51c2VkX2Jsa19jbnQgPSAwOwotCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotCQl1MzIgcGFnZV9hZGRyID0gaSA8PCB4ZF9jYXJkLT5ibG9ja19zaGlmdDsKLQkJdTMyIHBoeV9ibG9jazsKLQotCQlyZXR2YWwgPSB4ZF9yZWFkX3JlZHVuZGFudChjaGlwLCBwYWdlX2FkZHIsIHJlZHVudCwgMTEpOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlZHVudFtCTE9DS19TVEFUVVNdICE9IDB4RkYpIHsKLQkJCVJUUzUxWF9ERUJVR1AoImJhZCBibG9ja1xuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICh4ZF9jaGVja19kYXRhX2JsYW5rKHJlZHVudCkpIHsKLQkJCVJUUzUxWF9ERUJVR1AoImJsYW5rIGJsb2NrXG4iKTsKLQkJCXhkX3NldF91bnVzZWRfYmxvY2soY2hpcCwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWN1cl9mc3RfcGFnZV9sb2dvZmYgPSB4ZF9sb2FkX2xvZ19ibG9ja19hZGRyKHJlZHVudCk7Ci0JCWlmICgoY3VyX2ZzdF9wYWdlX2xvZ29mZiA9PSAweEZGRkYpCi0JCSAgICB8fCAoY3VyX2ZzdF9wYWdlX2xvZ29mZiA+IG1heF9sb2dvZmYpKSB7Ci0JCQlyZXR2YWwgPSB4ZF9lcmFzZV9ibG9jayhjaGlwLCBpKTsKLQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJeGRfc2V0X3VudXNlZF9ibG9jayhjaGlwLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoem9uZV9ubyA9PSAwKSAmJiAoY3VyX2ZzdF9wYWdlX2xvZ29mZiA9PSAwKQotCQkgICAgJiYgKHJlZHVudFtQQUdFX1NUQVRVU10gIT0gWERfR1BHKSkKLQkJCVhEX1NFVF9NQlJfRkFJTCh4ZF9jYXJkKTsKLQotCQlpZiAoem9uZS0+bDJwX3RhYmxlW2N1cl9mc3RfcGFnZV9sb2dvZmZdID09IDB4RkZGRikgewotCQkJem9uZS0+bDJwX3RhYmxlW2N1cl9mc3RfcGFnZV9sb2dvZmZdID0KLQkJCSAgICAodTE2KSAoaSAmIDB4M0ZGKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcGh5X2Jsb2NrID0KLQkJICAgIHpvbmUtPmwycF90YWJsZVtjdXJfZnN0X3BhZ2VfbG9nb2ZmXSArCi0JCSAgICAoKHUzMikgKCh6b25lX25vKSA8PCAxMCkpOwotCi0JCXBhZ2VfYWRkciA9ICgoaSArIDEpIDw8IHhkX2NhcmQtPmJsb2NrX3NoaWZ0KSAtIDE7Ci0KLQkJcmV0dmFsID0geGRfcmVhZF9yZWR1bmRhbnQoY2hpcCwgcGFnZV9hZGRyLCByZWR1bnQsIDExKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCWNvbnRpbnVlOwotCi0JCWN1cl9sc3RfcGFnZV9sb2dvZmYgPSB4ZF9sb2FkX2xvZ19ibG9ja19hZGRyKHJlZHVudCk7Ci0JCWlmIChjdXJfbHN0X3BhZ2VfbG9nb2ZmID09IGN1cl9mc3RfcGFnZV9sb2dvZmYpIHsKLQkJCWludCBtOwotCi0JCQlwYWdlX2FkZHIgPQotCQkJICAgICgocGh5X2Jsb2NrICsgMSkgPDwgeGRfY2FyZC0+YmxvY2tfc2hpZnQpIC0gMTsKLQotCQkJZm9yIChtID0gMDsgbSA8IDM7IG0rKykgewotCQkJCXJldHZhbCA9Ci0JCQkJICAgIHhkX3JlYWRfcmVkdW5kYW50KGNoaXAsIHBhZ2VfYWRkciwgcmVkdW50LAotCQkJCQkJICAgICAgMTEpOwotCQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAobSA9PSAzKSB7Ci0JCQkJem9uZS0+bDJwX3RhYmxlW2N1cl9mc3RfcGFnZV9sb2dvZmZdID0KLQkJCQkgICAgKHUxNikgKGkgJiAweDNGRik7Ci0JCQkJcmV0dmFsID0geGRfZXJhc2VfYmxvY2soY2hpcCwgcGh5X2Jsb2NrKTsKLQkJCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJCQl4ZF9zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHBoeV9ibG9jayk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWVudF9sc3RfcGFnZV9sb2dvZmYgPSB4ZF9sb2FkX2xvZ19ibG9ja19hZGRyKHJlZHVudCk7Ci0JCQlpZiAoZW50X2xzdF9wYWdlX2xvZ29mZiAhPSBjdXJfZnN0X3BhZ2VfbG9nb2ZmKSB7Ci0JCQkJem9uZS0+bDJwX3RhYmxlW2N1cl9mc3RfcGFnZV9sb2dvZmZdID0KLQkJCQkgICAgKHUxNikgKGkgJiAweDNGRik7Ci0JCQkJcmV0dmFsID0geGRfZXJhc2VfYmxvY2soY2hpcCwgcGh5X2Jsb2NrKTsKLQkJCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJCQl4ZF9zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHBoeV9ibG9jayk7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgewotCQkJCXJldHZhbCA9IHhkX2VyYXNlX2Jsb2NrKGNoaXAsIGkpOwotCQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCXhkX3NldF91bnVzZWRfYmxvY2soY2hpcCwgaSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSB4ZF9lcmFzZV9ibG9jayhjaGlwLCBpKTsKLQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJeGRfc2V0X3VudXNlZF9ibG9jayhjaGlwLCBpKTsKLQkJfQotCX0KLQotCWlmIChYRF9DSEtfNE1CKHhkX2NhcmQpKQotCQllbmQgPSA1MDA7Ci0JZWxzZQotCQllbmQgPSAxMDAwOwotCi0JaSA9IDA7Ci0JZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0JCWlmICh6b25lLT5sMnBfdGFibGVbc3RhcnRdID09IDB4RkZGRikKLQkJCWkrKzsKLQl9Ci0KLQlSVFM1MVhfREVCVUdQKCJCbG9jayBjb3VudCAlZCwgaW52YWxpZCBMMlAgZW50cnkgJWRcbiIsIGVuZCwgaSk7Ci0JUlRTNTFYX0RFQlVHUCgiVG90YWwgdW51c2VkIGJsb2NrOiAlZFxuIiwgem9uZS0+dW51c2VkX2Jsa19jbnQpOwotCi0JaWYgKCh6b25lLT51bnVzZWRfYmxrX2NudCAtIGkpIDwgMSkKLQkJY2hpcC0+Y2FyZF93cCB8PSBYRF9DQVJEOwotCi0Jem9uZS0+YnVpbGRfZmxhZyA9IDE7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0KLUJ1aWxkX0ZhaWw6Ci0JaWYgKHpvbmUtPmwycF90YWJsZSkgewotCQl2ZnJlZSh6b25lLT5sMnBfdGFibGUpOwotCQl6b25lLT5sMnBfdGFibGUgPSBOVUxMOwotCX0KLQlpZiAoem9uZS0+ZnJlZV90YWJsZSkgewotCQl2ZnJlZSh6b25lLT5mcmVlX3RhYmxlKTsKLQkJem9uZS0+ZnJlZV90YWJsZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19GQUlMOwotfQotCi1zdGF0aWMgaW50IHhkX3NlbmRfY21kKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwgdTggY21kKQotewotCWludCByZXR2YWw7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9EQVQsIDB4RkYsIGNtZCk7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9TVEFSVCB8IFhEX1NFVF9DTUQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIENIRUNLX1JFR19DTUQsIFhEX1RSQU5TRkVSLCBYRF9UUkFOU0ZFUl9FTkQsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9FTkQpOwotCi0JcmV0dmFsID0gcnRzNTF4X3NlbmRfY21kKGNoaXAsIE1PREVfQ1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAxLCAyMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgeGRfcmVhZF9tdWx0aXBsZV9wYWdlcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBwaHlfYmxrLAotCQkJCSAgdTMyIGxvZ19ibGssIHU4IHN0YXJ0X3BhZ2UsIHU4IGVuZF9wYWdlLAotCQkJCSAgdTggKmJ1Ziwgdm9pZCAqKnB0ciwgdW5zaWduZWQgaW50ICpvZmZzZXQpCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCXUzMiBwYWdlX2FkZHIsIG5ld19ibGs7Ci0JdTE2IGxvZ19vZmY7Ci0JdTggcmVnX3ZhbCwgcGFnZV9jbnQ7Ci0JaW50IHpvbmVfbm8sIHJldHZhbCwgaTsKLQotCWlmIChzdGFydF9wYWdlID4gZW5kX3BhZ2UpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQlwYWdlX2NudCA9IGVuZF9wYWdlIC0gc3RhcnRfcGFnZTsKLQl6b25lX25vID0gKGludCkobG9nX2JsayAvIDEwMDApOwotCWxvZ19vZmYgPSAodTE2KSAobG9nX2JsayAlIDEwMDApOwotCi0JaWYgKChwaHlfYmxrICYgMHgzRkYpID09IDB4M0ZGKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJcGFnZV9hZGRyID0gKCh1MzIpIGkpIDw8IHhkX2NhcmQtPmJsb2NrX3NoaWZ0OwotCi0JCQlyZXR2YWwgPSB4ZF9yZWFkX3JlZHVuZGFudChjaGlwLCBwYWdlX2FkZHIsIE5VTEwsIDApOwotCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlicmVhazsKLQotCQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBYRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfTk9fQ0FSRCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfQotCX0KLQotCXBhZ2VfYWRkciA9IChwaHlfYmxrIDw8IHhkX2NhcmQtPmJsb2NrX3NoaWZ0KSArIHN0YXJ0X3BhZ2U7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQl4ZF9hc3NpZ25fcGh5X2FkZHIoY2hpcCwgcGFnZV9hZGRyLCBYRF9SV19BRERSKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX0NGRywgWERfUFBCX1RPX1NJRSwKLQkJICAgICAgIFhEX1BQQl9UT19TSUUpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBSSU5HX0JVRkZFUik7Ci0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfUEFHRV9DTlQsIDB4RkYsIHBhZ2VfY250KTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DSEtfREFUQV9TVEFUVVMsCi0JCSAgICAgICBYRF9BVVRPX0NIS19EQVRBX1NUQVRVUywgWERfQVVUT19DSEtfREFUQV9TVEFUVVMpOwotCi0JcnRzNTF4X3RyYW5zX2RtYV9lbmFibGUoY2hpcC0+c3JiLT5zY19kYXRhX2RpcmVjdGlvbiwgY2hpcCwKLQkJCXBhZ2VfY250ICogNTEyLCBETUFfNTEyKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1RSQU5TRkVSLCAweEZGLAotCQkgICAgICAgWERfVFJBTlNGRVJfU1RBUlQgfCBYRF9SRUFEX1BBR0VTKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBYRF9UUkFOU0ZFUiwKLQkJICAgICAgIFhEX1RSQU5TRkVSX0VORCB8IFhEX1BQQl9FTVBUWSwKLQkJICAgICAgIFhEX1RSQU5TRkVSX0VORCB8IFhEX1BQQl9FTVBUWSk7Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DRElSLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dmFsID0KLQkgICAgcnRzNTF4X3RyYW5zZmVyX2RhdGFfcGFydGlhbChjaGlwLCBSQ1ZfQlVMS19QSVBFKGNoaXApLCAodm9pZCAqKWJ1ZiwKLQkJCQkJIHB0ciwgb2Zmc2V0LCBwYWdlX2NudCAqIDUxMiwKLQkJCQkJIHNjc2lfc2dfY291bnQoY2hpcC0+c3JiKSwgTlVMTCwgMjAwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHM1MXhfY2xlYXJfeGRfZXJyb3IoY2hpcCk7Ci0KLQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfVElNRURPVVQpIHsKLQkJCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9UT19FUlJPUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFX0dPVE8oY2hpcCwgRmFpbCk7Ci0JCX0KLQl9Ci0JcmV0dmFsID0gcnRzNTF4X2dldF9yc3AoY2hpcCwgMSwgMjAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQotCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkgewotCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1RPX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9IGVsc2UgewotCQkJVFJBQ0VfR09UTyhjaGlwLCBGYWlsKTsKLQkJfQotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQotRmFpbDoKLQlydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoY2hpcCwgWERfUEFHRV9TVEFUVVMsICZyZWdfdmFsKTsKLQlSVFM1MVhfREVCVUdQKCJYRF9QQUdFX1NUQVRVUzogMHgleFxuIiwgcmVnX3ZhbCk7Ci0KLQlpZiAocmVnX3ZhbCAhPSBYRF9HUEcpCi0JCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9QUkdfRVJST1IpOwotCi0JcnRzNTF4X2VwMF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFhEX0NUTCwgJnJlZ192YWwpOwotCVJUUzUxWF9ERUJVR1AoIlhEX0NUTDogMHgleFxuIiwgcmVnX3ZhbCk7Ci0KLQkvKiBIYW5kbGUgdW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKi8KLQlpZiAoKChyZWdfdmFsICYgKFhEX0VDQzFfRVJST1IgfCBYRF9FQ0MxX1VOQ09SUkVDVEFCTEUpKQotCSAgICAgPT0gKFhEX0VDQzFfRVJST1IgfCBYRF9FQ0MxX1VOQ09SUkVDVEFCTEUpKQotCSAgICB8fCAoKHJlZ192YWwgJiAoWERfRUNDMl9FUlJPUiB8IFhEX0VDQzJfVU5DT1JSRUNUQUJMRSkpCi0JCT09IChYRF9FQ0MyX0VSUk9SIHwgWERfRUNDMl9VTkNPUlJFQ1RBQkxFKSkpIHsKLQkJd2FpdF90aW1lb3V0KDEwMCk7Ci0KLQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBYRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9OT19DQVJEKTsKLQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCX0KLQotCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfRUNDX0VSUk9SKTsKLQotCQluZXdfYmxrID0geGRfZ2V0X3VudXNlZF9ibG9jayhjaGlwLCB6b25lX25vKTsKLQkJaWYgKG5ld19ibGsgPT0gTk9fTkVXX0JMSykgewotCQkJWERfQ0xSX0JBRF9PTERCTEsoeGRfY2FyZCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JCXJldHZhbCA9Ci0JCSAgICB4ZF9jb3B5X3BhZ2UoY2hpcCwgcGh5X2JsaywgbmV3X2JsaywgMCwKLQkJCQkgeGRfY2FyZC0+cGFnZV9vZmYgKyAxKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaWYgKCFYRF9DSEtfQkFEX05FV0JMSyh4ZF9jYXJkKSkgewotCQkJCXJldHZhbCA9IHhkX2VyYXNlX2Jsb2NrKGNoaXAsIG5ld19ibGspOwotCQkJCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCXhkX3NldF91bnVzZWRfYmxvY2soY2hpcCwgbmV3X2Jsayk7Ci0JCQl9IGVsc2UgewotCQkJCVhEX0NMUl9CQURfTkVXQkxLKHhkX2NhcmQpOwotCQkJfQotCQkJWERfQ0xSX0JBRF9PTERCTEsoeGRfY2FyZCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JCXhkX3NldF9sMnBfdGJsKGNoaXAsIHpvbmVfbm8sIGxvZ19vZmYsICh1MTYpIChuZXdfYmxrICYgMHgzRkYpKTsKLQkJeGRfZXJhc2VfYmxvY2soY2hpcCwgcGh5X2Jsayk7Ci0JCXhkX21hcmtfYmFkX2Jsb2NrKGNoaXAsIHBoeV9ibGspOwotCQlYRF9DTFJfQkFEX09MREJMSyh4ZF9jYXJkKTsKLQl9Ci0KLQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotfQotCi1zdGF0aWMgaW50IHhkX2ZpbmlzaF93cml0ZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsCi0JCQkgICB1MzIgb2xkX2JsaywgdTMyIG5ld19ibGssIHUzMiBsb2dfYmxrLCB1OCBwYWdlX29mZikKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0JaW50IHJldHZhbCwgem9uZV9ubzsKLQl1MTYgbG9nX29mZjsKLQotCVJUUzUxWF9ERUJVR1AoInhkX2ZpbmlzaF93cml0ZSwgb2xkX2JsayA9IDB4JXgsIG5ld19ibGsgPSAweCV4LCIKLQkJCQkibG9nX2JsayA9IDB4JXhcbiIsIG9sZF9ibGssIG5ld19ibGssIGxvZ19ibGspOwotCi0JaWYgKHBhZ2Vfb2ZmID4geGRfY2FyZC0+cGFnZV9vZmYpCi0JCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0KLQl6b25lX25vID0gKGludCkobG9nX2JsayAvIDEwMDApOwotCWxvZ19vZmYgPSAodTE2KSAobG9nX2JsayAlIDEwMDApOwotCi0JaWYgKG9sZF9ibGsgPT0gQkxLX05PVF9GT1VORCkgewotCQlyZXR2YWwgPSB4ZF9pbml0X3BhZ2UoY2hpcCwgbmV3X2JsaywgbG9nX29mZiwKLQkJCQkgICAgICBwYWdlX29mZiwgeGRfY2FyZC0+cGFnZV9vZmYgKyAxKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcmV0dmFsID0geGRfZXJhc2VfYmxvY2soY2hpcCwgbmV3X2Jsayk7Ci0JCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJCXhkX3NldF91bnVzZWRfYmxvY2soY2hpcCwgbmV3X2Jsayk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0geGRfY29weV9wYWdlKGNoaXAsIG9sZF9ibGssIG5ld19ibGssCi0JCQkJICAgICAgcGFnZV9vZmYsIHhkX2NhcmQtPnBhZ2Vfb2ZmICsgMSk7Ci0JCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmICghWERfQ0hLX0JBRF9ORVdCTEsoeGRfY2FyZCkpIHsKLQkJCQlyZXR2YWwgPSB4ZF9lcmFzZV9ibG9jayhjaGlwLCBuZXdfYmxrKTsKLQkJCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKQotCQkJCQl4ZF9zZXRfdW51c2VkX2Jsb2NrKGNoaXAsIG5ld19ibGspOwotCQkJfQotCQkJWERfQ0xSX0JBRF9ORVdCTEsoeGRfY2FyZCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJcmV0dmFsID0geGRfZXJhc2VfYmxvY2soY2hpcCwgb2xkX2Jsayk7Ci0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmIChYRF9DSEtfQkFEX09MREJMSyh4ZF9jYXJkKSkgewotCQkJCXhkX21hcmtfYmFkX2Jsb2NrKGNoaXAsIG9sZF9ibGspOwotCQkJCVhEX0NMUl9CQURfT0xEQkxLKHhkX2NhcmQpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBBZGQgc291cmNlIGJsb2NrIHRvIHVudXNlZCBibG9jayAqLwotCQkJCXhkX3NldF91bnVzZWRfYmxvY2soY2hpcCwgb2xkX2Jsayk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfTk9fRVJST1IpOwotCQkJWERfQ0xSX0JBRF9PTERCTEsoeGRfY2FyZCk7Ci0JCX0KLQl9Ci0KLQkvKiBBZGQgdGFyZ2V0IGJsb2NrIHRvIEwyUCB0YWJsZSAqLwotCXhkX3NldF9sMnBfdGJsKGNoaXAsIHpvbmVfbm8sIGxvZ19vZmYsICh1MTYpIChuZXdfYmxrICYgMHgzRkYpKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCB4ZF9wcmVwYXJlX3dyaXRlKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQkJCSAgICB1MzIgb2xkX2JsaywgdTMyIG5ld19ibGssIHUzMiBsb2dfYmxrLCB1OCBwYWdlX29mZikKLXsKLQlpbnQgcmV0dmFsOwotCi0JUlRTNTFYX0RFQlVHUCgieGRfcHJlcGFyZV93cml0ZSwgb2xkX2JsayA9IDB4JXgsIG5ld19ibGsgPSAweCV4LCIKLQkJCQkibG9nX2JsayA9IDB4JXgsIHBhZ2Vfb2ZmID0gJWRcbiIsCi0JCQkJb2xkX2JsaywgbmV3X2JsaywgbG9nX2JsaywgKGludClwYWdlX29mZik7Ci0KLQlpZiAocGFnZV9vZmYpIHsKLQkJcmV0dmFsID0geGRfY29weV9wYWdlKGNoaXAsIG9sZF9ibGssIG5ld19ibGssIDAsIHBhZ2Vfb2ZmKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCB4ZF93cml0ZV9tdWx0aXBsZV9wYWdlcyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBvbGRfYmxrLAotCQkJCSAgIHUzMiBuZXdfYmxrLCB1MzIgbG9nX2JsaywgdTggc3RhcnRfcGFnZSwKLQkJCQkgICB1OCBlbmRfcGFnZSwgdTggKmJ1Ziwgdm9pZCAqKnB0ciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0JdTMyIHBhZ2VfYWRkcjsKLQlpbnQgem9uZV9ubywgcmV0dmFsOwotCXUxNiBsb2dfb2ZmOwotCXU4IHBhZ2VfY250LCByZWdfdmFsOwotCi0JUlRTNTFYX0RFQlVHUCgieGRfd3JpdGVfbXVsdGlwbGVfcGFnZXMsIG9sZF9ibGsgPSAweCV4LCIKLQkJCQkibmV3X2JsayA9IDB4JXgsIGxvZ19ibGsgPSAweCV4XG4iLAotCQkJCW9sZF9ibGssIG5ld19ibGssIGxvZ19ibGspOwotCi0JaWYgKHN0YXJ0X3BhZ2UgPiBlbmRfcGFnZSkKLQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQotCXBhZ2VfY250ID0gZW5kX3BhZ2UgLSBzdGFydF9wYWdlOwotCXpvbmVfbm8gPSAoaW50KShsb2dfYmxrIC8gMTAwMCk7Ci0JbG9nX29mZiA9ICh1MTYpIChsb2dfYmxrICUgMTAwMCk7Ci0KLQlwYWdlX2FkZHIgPSAobmV3X2JsayA8PCB4ZF9jYXJkLT5ibG9ja19zaGlmdCkgKyBzdGFydF9wYWdlOwotCi0JLyogU2VuZCBpbmRleCBjb21tYW5kICovCi0JcmV0dmFsID0geGRfc2VuZF9jbWQoY2hpcCwgUkVBRDFfMSk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlydHM1MXhfaW5pdF9jbWQoY2hpcCk7Ci0KLQkvKiBQcmVwYXJlIHJlZHVuZGFudCBmaWVsZCAqLwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX0JMT0NLX0FERFIxX0gsIDB4RkYsCi0JCSAgICAgICAodTgpIChsb2dfb2ZmID4+IDgpKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9CTE9DS19BRERSMV9MLCAweEZGLAotCQkgICAgICAgKHU4KSBsb2dfb2ZmKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9CTE9DS19TVEFUVVMsIDB4RkYsIFhEX0dCTEspOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIFhEX1BBR0VfU1RBVFVTLCAweEZGLCBYRF9HUEcpOwotCi0JeGRfYXNzaWduX3BoeV9hZGRyKGNoaXAsIHBhZ2VfYWRkciwgWERfUldfQUREUik7Ci0KLQkvKiBUcmFuc2Zvcm0gdGhlIGJsb2NrIGFkZHJlc3MgYnkgaGFyZHdhcmUgKi8KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9DRkcsIFhEX0JBX1RSQU5TRk9STSwKLQkJICAgICAgIFhEX0JBX1RSQU5TRk9STSk7Ci0KLQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBYRF9QQUdFX0NOVCwgMHhGRiwgcGFnZV9jbnQpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsIDB4MDEsCi0JCSAgICAgICBSSU5HX0JVRkZFUik7Ci0KLQlydHM1MXhfdHJhbnNfZG1hX2VuYWJsZShjaGlwLT5zcmItPnNjX2RhdGFfZGlyZWN0aW9uLCBjaGlwLAotCQkJcGFnZV9jbnQgKiA1MTIsIERNQV81MTIpOwotCi0JcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgWERfVFJBTlNGRVIsIDB4RkYsCi0JCSAgICAgICBYRF9UUkFOU0ZFUl9TVEFSVCB8IFhEX1dSSVRFX1BBR0VTKTsKLQlydHM1MXhfYWRkX2NtZChjaGlwLCBDSEVDS19SRUdfQ01ELCBYRF9UUkFOU0ZFUiwgWERfVFJBTlNGRVJfRU5ELAotCQkgICAgICAgWERfVFJBTlNGRVJfRU5EKTsKLQotCXJldHZhbCA9IHJ0czUxeF9zZW5kX2NtZChjaGlwLCBNT0RFX0NET1IsIDEwMCk7Ci0JaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0KLQlyZXR2YWwgPQotCSAgICBydHM1MXhfdHJhbnNmZXJfZGF0YV9wYXJ0aWFsKGNoaXAsIFNORF9CVUxLX1BJUEUoY2hpcCksICh2b2lkICopYnVmLAotCQkJCQkgcHRyLCBvZmZzZXQsIHBhZ2VfY250ICogNTEyLAotCQkJCQkgc2NzaV9zZ19jb3VudChjaGlwLT5zcmIpLCBOVUxMLCAyMDAwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXJ0czUxeF9jbGVhcl94ZF9lcnJvcihjaGlwKTsKLQotCQlpZiAocmV0dmFsID09IFNUQVRVU19USU1FRE9VVCkgewotCQkJeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX1RPX0VSUk9SKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9IGVsc2UgewotCQkJVFJBQ0VfR09UTyhjaGlwLCBGYWlsKTsKLQkJfQotCX0KLQlyZXR2YWwgPSBydHM1MXhfZ2V0X3JzcChjaGlwLCAxLCAyMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzNTF4X2NsZWFyX3hkX2Vycm9yKGNoaXApOwotCi0JCWlmIChyZXR2YWwgPT0gU1RBVFVTX1RJTUVET1VUKSB7Ci0JCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfVE9fRVJST1IpOwotCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRV9HT1RPKGNoaXAsIEZhaWwpOwotCQl9Ci0JfQotCi0JaWYgKGVuZF9wYWdlID09ICh4ZF9jYXJkLT5wYWdlX29mZiArIDEpKSB7Ci0JCXhkX2NhcmQtPmRlbGF5X3dyaXRlLmRlbGF5X3dyaXRlX2ZsYWcgPSAwOwotCi0JCWlmIChvbGRfYmxrICE9IEJMS19OT1RfRk9VTkQpIHsKLQkJCXJldHZhbCA9IHhkX2VyYXNlX2Jsb2NrKGNoaXAsIG9sZF9ibGspOwotCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWlmIChYRF9DSEtfQkFEX09MREJMSyh4ZF9jYXJkKSkgewotCQkJCQl4ZF9tYXJrX2JhZF9ibG9jayhjaGlwLCBvbGRfYmxrKTsKLQkJCQkJWERfQ0xSX0JBRF9PTERCTEsoeGRfY2FyZCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJeGRfc2V0X3VudXNlZF9ibG9jayhjaGlwLCBvbGRfYmxrKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXhkX3NldF9lcnJfY29kZShjaGlwLCBYRF9OT19FUlJPUik7Ci0JCQkJWERfQ0xSX0JBRF9PTERCTEsoeGRfY2FyZCk7Ci0JCQl9Ci0JCX0KLQkJeGRfc2V0X2wycF90YmwoY2hpcCwgem9uZV9ubywgbG9nX29mZiwgKHUxNikgKG5ld19ibGsgJiAweDNGRikpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLQotRmFpbDoKLQlydHM1MXhfZXAwX3JlYWRfcmVnaXN0ZXIoY2hpcCwgWERfREFULCAmcmVnX3ZhbCk7Ci0JUlRTNTFYX0RFQlVHUCgiWERfREFUOiAweCV4XG4iLCByZWdfdmFsKTsKLQotCWlmIChyZWdfdmFsICYgUFJPR1JBTV9FUlJPUikgewotCQl4ZF9zZXRfZXJyX2NvZGUoY2hpcCwgWERfUFJHX0VSUk9SKTsKLQkJeGRfbWFya19iYWRfYmxvY2soY2hpcCwgbmV3X2Jsayk7Ci0JfQotCi0JVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLX0KLQotc3RhdGljIGludCB4ZF9kZWxheV93cml0ZShzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCXN0cnVjdCB4ZF9kZWxheV93cml0ZV90YWcgKmRlbGF5X3dyaXRlID0gJih4ZF9jYXJkLT5kZWxheV93cml0ZSk7Ci0JaW50IHJldHZhbDsKLQotCWlmIChkZWxheV93cml0ZS0+ZGVsYXlfd3JpdGVfZmxhZykgewotCQlSVFM1MVhfREVCVUdQKCJ4ZF9kZWxheV93cml0ZVxuIik7Ci0JCXJldHZhbCA9IHhkX3N3aXRjaF9jbG9jayhjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JCWRlbGF5X3dyaXRlLT5kZWxheV93cml0ZV9mbGFnID0gMDsKLQkJcmV0dmFsID0geGRfZmluaXNoX3dyaXRlKGNoaXAsCi0JCQkJCSBkZWxheV93cml0ZS0+b2xkX3BoeWJsb2NrLAotCQkJCQkgZGVsYXlfd3JpdGUtPm5ld19waHlibG9jaywKLQkJCQkJIGRlbGF5X3dyaXRlLT5sb2dibG9jaywKLQkJCQkJIGRlbGF5X3dyaXRlLT5wYWdlb2ZmKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCX0KLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotaW50IHJ0czUxeF94ZF9ydyhzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCwKLQl1MzIgc3RhcnRfc2VjdG9yLCB1MTYgc2VjdG9yX2NudCkKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0JdW5zaWduZWQgaW50IGx1biA9IFNDU0lfTFVOKHNyYik7Ci0Jc3RydWN0IHhkX2RlbGF5X3dyaXRlX3RhZyAqZGVsYXlfd3JpdGUgPSAmKHhkX2NhcmQtPmRlbGF5X3dyaXRlKTsKLQlpbnQgcmV0dmFsLCB6b25lX25vOwotCXUzMiBsb2dfYmxrLCBvbGRfYmxrID0gMCwgbmV3X2JsayA9IDA7Ci0JdTE2IGxvZ19vZmYsIHRvdGFsX3NlY19jbnQgPSBzZWN0b3JfY250OwotCXU4IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlID0gMCwgcGFnZV9jbnQ7Ci0JdTggKmJ1ZjsKLQl2b2lkICpwdHIgPSBOVUxMOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwotCi0JeGRfc2V0X2Vycl9jb2RlKGNoaXAsIFhEX05PX0VSUk9SKTsKLQotCXhkX2NhcmQtPmNvdW50ZXIgPSAwOwotCi0JUlRTNTFYX0RFQlVHUCgicnRzNTF4X3hkX3J3OiBzY3NpX2J1ZmZsZW4gPSAlZCwgc2NzaV9zZ19jb3VudCA9ICVkXG4iLAotCQkgICAgICAgc2NzaV9idWZmbGVuKHNyYiksIHNjc2lfc2dfY291bnQoc3JiKSk7Ci0JUlRTNTFYX0RFQlVHUCgiRGF0YSBkaXJlY3Rpb246ICVzXG4iLAotCQkgICAgICAgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0KLQkJCURNQV9UT19ERVZJQ0UpID8gIndyaXRlIiA6ICJyZWFkIik7Ci0KLQlidWYgPSAodTggKikgc2NzaV9zZ2xpc3Qoc3JiKTsKLQotCXJldHZhbCA9IHhkX3N3aXRjaF9jbG9jayhjaGlwKTsKLQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQotCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQotCWxvZ19ibGsgPSBzdGFydF9zZWN0b3IgPj4geGRfY2FyZC0+YmxvY2tfc2hpZnQ7Ci0Jc3RhcnRfcGFnZSA9ICh1OCkgc3RhcnRfc2VjdG9yICYgeGRfY2FyZC0+cGFnZV9vZmY7Ci0Jem9uZV9ubyA9IChpbnQpKGxvZ19ibGsgLyAxMDAwKTsKLQlsb2dfb2ZmID0gKHUxNikgKGxvZ19ibGsgJSAxMDAwKTsKLQotCVJUUzUxWF9ERUJVR1AoImxvZ19ibGsgPSAweCV4XG4iLCBsb2dfYmxrKTsKLQotCWlmICh4ZF9jYXJkLT56b25lW3pvbmVfbm9dLmJ1aWxkX2ZsYWcgPT0gMCkgewotCQlyZXR2YWwgPSB4ZF9idWlsZF9sMnBfdGJsKGNoaXAsIHpvbmVfbm8pOwotCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQljaGlwLT5jYXJkX2ZhaWwgfD0gWERfQ0FSRDsKLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJfQotCX0KLQotCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKLQkJaWYgKGRlbGF5X3dyaXRlLT5kZWxheV93cml0ZV9mbGFnICYmCi0JCSAgICAoZGVsYXlfd3JpdGUtPmxvZ2Jsb2NrID09IGxvZ19ibGspICYmCi0JCSAgICAoc3RhcnRfcGFnZSA+IGRlbGF5X3dyaXRlLT5wYWdlb2ZmKSkgewotCQkJZGVsYXlfd3JpdGUtPmRlbGF5X3dyaXRlX2ZsYWcgPSAwOwotCQkJaWYgKGRlbGF5X3dyaXRlLT5vbGRfcGh5YmxvY2sgIT0gQkxLX05PVF9GT1VORCkgewotCQkJCXJldHZhbCA9IHhkX2NvcHlfcGFnZShjaGlwLAotCQkJCQkJICAgICAgZGVsYXlfd3JpdGUtPm9sZF9waHlibG9jaywKLQkJCQkJCSAgICAgIGRlbGF5X3dyaXRlLT5uZXdfcGh5YmxvY2ssCi0JCQkJCQkgICAgICBkZWxheV93cml0ZS0+cGFnZW9mZiwKLQkJCQkJCSAgICAgIHN0YXJ0X3BhZ2UpOwotCQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJCVNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQkJfQotCQkJfQotCQkJb2xkX2JsayA9IGRlbGF5X3dyaXRlLT5vbGRfcGh5YmxvY2s7Ci0JCQluZXdfYmxrID0gZGVsYXlfd3JpdGUtPm5ld19waHlibG9jazsKLQkJfSBlbHNlIGlmIChkZWxheV93cml0ZS0+ZGVsYXlfd3JpdGVfZmxhZyAmJgotCQkJICAgKGRlbGF5X3dyaXRlLT5sb2dibG9jayA9PSBsb2dfYmxrKSAmJgotCQkJICAgKHN0YXJ0X3BhZ2UgPT0gZGVsYXlfd3JpdGUtPnBhZ2VvZmYpKSB7Ci0JCQlkZWxheV93cml0ZS0+ZGVsYXlfd3JpdGVfZmxhZyA9IDA7Ci0JCQlvbGRfYmxrID0gZGVsYXlfd3JpdGUtPm9sZF9waHlibG9jazsKLQkJCW5ld19ibGsgPSBkZWxheV93cml0ZS0+bmV3X3BoeWJsb2NrOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0geGRfZGVsYXlfd3JpdGUoY2hpcCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgcmV0dmFsKTsKLQkJCX0KLQkJCW9sZF9ibGsgPSB4ZF9nZXRfbDJwX3RibChjaGlwLCB6b25lX25vLCBsb2dfb2ZmKTsKLQkJCW5ld19ibGsgPSB4ZF9nZXRfdW51c2VkX2Jsb2NrKGNoaXAsIHpvbmVfbm8pOwotCQkJaWYgKChvbGRfYmxrID09IEJMS19OT1RfRk9VTkQpCi0JCQkgICAgfHwgKG5ld19ibGsgPT0gQkxLX05PVF9GT1VORCkpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9XUklURV9FUlIpOwotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCi0JCQlyZXR2YWwgPQotCQkJICAgIHhkX3ByZXBhcmVfd3JpdGUoY2hpcCwgb2xkX2JsaywgbmV3X2JsaywgbG9nX2JsaywKLQkJCQkJICAgICBzdGFydF9wYWdlKTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlpZiAobW9uaXRvcl9jYXJkX2NkKGNoaXAsIFhEX0NBUkQpID09Ci0JCQkJICAgIENEX05PVF9FWElTVCkgewotCQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkJU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7Ci0JCQkJfQotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX1dSSVRFX0VSUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIHJldHZhbCk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlyZXR2YWwgPSB4ZF9kZWxheV93cml0ZShjaGlwKTsKLQkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJaWYgKG1vbml0b3JfY2FyZF9jZChjaGlwLCBYRF9DQVJEKSA9PSBDRF9OT1RfRVhJU1QpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQkgICAgICAgU0VOU0VfVFlQRV9NRURJQV9OT1RfUFJFU0VOVCk7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfVU5SRUNPVkVSX1JFQURfRVJSKTsKLQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQl9Ci0KLQkJb2xkX2JsayA9IHhkX2dldF9sMnBfdGJsKGNoaXAsIHpvbmVfbm8sIGxvZ19vZmYpOwotCQlpZiAob2xkX2JsayA9PSBCTEtfTk9UX0ZPVU5EKSB7Ci0JCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0JfQotCi0JUlRTNTFYX0RFQlVHUCgib2xkX2JsayA9IDB4JXhcbiIsIG9sZF9ibGspOwotCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCi0JCVJUUzUxWF9ERUJVR1AoIm5ld19ibGsgPSAweCV4XG4iLCBuZXdfYmxrKTsKLQotCXdoaWxlICh0b3RhbF9zZWNfY250KSB7Ci0JCWlmICgoc3RhcnRfcGFnZSArIHRvdGFsX3NlY19jbnQpID4gKHhkX2NhcmQtPnBhZ2Vfb2ZmICsgMSkpCi0JCQllbmRfcGFnZSA9IHhkX2NhcmQtPnBhZ2Vfb2ZmICsgMTsKLQkJZWxzZQotCQkJZW5kX3BhZ2UgPSBzdGFydF9wYWdlICsgKHU4KSB0b3RhbF9zZWNfY250OwotCQlwYWdlX2NudCA9IGVuZF9wYWdlIC0gc3RhcnRfcGFnZTsKLQkJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCQlyZXR2YWwgPSB4ZF9yZWFkX211bHRpcGxlX3BhZ2VzKGNoaXAsIG9sZF9ibGssIGxvZ19ibGssCi0JCQkJCQkJc3RhcnRfcGFnZSwgZW5kX3BhZ2UsCi0JCQkJCQkJYnVmLCAmcHRyLCAmb2Zmc2V0KTsKLQkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQlTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldHZhbCA9Ci0JCQkgICAgeGRfd3JpdGVfbXVsdGlwbGVfcGFnZXMoY2hpcCwgb2xkX2JsaywgbmV3X2JsaywKLQkJCQkJCSAgICBsb2dfYmxrLCBzdGFydF9wYWdlLAotCQkJCQkJICAgIGVuZF9wYWdlLCBidWYsICZwdHIsCi0JCQkJCQkgICAgJm9mZnNldCk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0KLQkJdG90YWxfc2VjX2NudCAtPSBwYWdlX2NudDsKLQotCQlpZiAodG90YWxfc2VjX2NudCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJbG9nX2JsaysrOwotCQl6b25lX25vID0gKGludCkobG9nX2JsayAvIDEwMDApOwotCQlsb2dfb2ZmID0gKHUxNikgKGxvZ19ibGsgJSAxMDAwKTsKLQotCQlpZiAoeGRfY2FyZC0+em9uZVt6b25lX25vXS5idWlsZF9mbGFnID09IDApIHsKLQkJCXJldHZhbCA9IHhkX2J1aWxkX2wycF90YmwoY2hpcCwgem9uZV9ubyk7Ci0JCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJY2hpcC0+Y2FyZF9mYWlsIHw9IFhEX0NBUkQ7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfTk9UX1BSRVNFTlQpOwotCQkJCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCQkJfQotCQl9Ci0KLQkJb2xkX2JsayA9IHhkX2dldF9sMnBfdGJsKGNoaXAsIHpvbmVfbm8sIGxvZ19vZmYpOwotCQlpZiAob2xkX2JsayA9PSBCTEtfTk9UX0ZPVU5EKSB7Ci0JCQlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKLQkJCQlydHM1MXhfc2V0X3NlbnNlX3R5cGUoY2hpcCwgbHVuLAotCQkJCQlTRU5TRV9UWVBFX01FRElBX1VOUkVDT1ZFUl9SRUFEX0VSUik7Ci0JCQl9IGVsc2UgewotCQkJCXJ0czUxeF9zZXRfc2Vuc2VfdHlwZShjaGlwLCBsdW4sCi0JCQkJCSAgICAgICBTRU5TRV9UWVBFX01FRElBX1dSSVRFX0VSUik7Ci0JCQl9Ci0JCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQl9Ci0KLQkJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewotCQkJbmV3X2JsayA9IHhkX2dldF91bnVzZWRfYmxvY2soY2hpcCwgem9uZV9ubyk7Ci0JCQlpZiAobmV3X2JsayA9PSBCTEtfTk9UX0ZPVU5EKSB7Ci0JCQkJcnRzNTF4X3NldF9zZW5zZV90eXBlKGNoaXAsIGx1biwKLQkJCQkJICAgICAgIFNFTlNFX1RZUEVfTUVESUFfV1JJVEVfRVJSKTsKLQkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwotCQkJfQotCQl9Ci0KLQkJc3RhcnRfcGFnZSA9IDA7Ci0JfQotCi0JaWYgKChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpICYmCi0JICAgIChlbmRfcGFnZSAhPSAoeGRfY2FyZC0+cGFnZV9vZmYgKyAxKSkpIHsKLQkJZGVsYXlfd3JpdGUtPmRlbGF5X3dyaXRlX2ZsYWcgPSAxOwotCQlkZWxheV93cml0ZS0+b2xkX3BoeWJsb2NrID0gb2xkX2JsazsKLQkJZGVsYXlfd3JpdGUtPm5ld19waHlibG9jayA9IG5ld19ibGs7Ci0JCWRlbGF5X3dyaXRlLT5sb2dibG9jayA9IGxvZ19ibGs7Ci0JCWRlbGF5X3dyaXRlLT5wYWdlb2ZmID0gZW5kX3BhZ2U7Ci0JfQotCi0Jc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotdm9pZCBydHM1MXhfeGRfZnJlZV9sMnBfdGJsKHN0cnVjdCBydHM1MXhfY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgeGRfaW5mbyAqeGRfY2FyZCA9ICYoY2hpcC0+eGRfY2FyZCk7Ci0JaW50IGkgPSAwOwotCi0JaWYgKHhkX2NhcmQtPnpvbmUgIT0gTlVMTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgeGRfY2FyZC0+em9uZV9jbnQ7IGkrKykgewotCQkJaWYgKHhkX2NhcmQtPnpvbmVbaV0ubDJwX3RhYmxlICE9IE5VTEwpIHsKLQkJCQl2ZnJlZSh4ZF9jYXJkLT56b25lW2ldLmwycF90YWJsZSk7Ci0JCQkJeGRfY2FyZC0+em9uZVtpXS5sMnBfdGFibGUgPSBOVUxMOwotCQkJfQotCQkJaWYgKHhkX2NhcmQtPnpvbmVbaV0uZnJlZV90YWJsZSAhPSBOVUxMKSB7Ci0JCQkJdmZyZWUoeGRfY2FyZC0+em9uZVtpXS5mcmVlX3RhYmxlKTsKLQkJCQl4ZF9jYXJkLT56b25lW2ldLmZyZWVfdGFibGUgPSBOVUxMOwotCQkJfQotCQl9Ci0JCXZmcmVlKHhkX2NhcmQtPnpvbmUpOwotCQl4ZF9jYXJkLT56b25lID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgcnRzNTF4X3hkX2NsZWFudXBfd29yayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCi0JaWYgKHhkX2NhcmQtPmRlbGF5X3dyaXRlLmRlbGF5X3dyaXRlX2ZsYWcpIHsKLQkJUlRTNTFYX0RFQlVHUCgieEQ6IGRlbGF5IHdyaXRlXG4iKTsKLQkJeGRfZGVsYXlfd3JpdGUoY2hpcCk7Ci0JCXhkX2NhcmQtPmNvdW50ZXIgPSAwOwotCX0KLX0KLQotc3RhdGljIGludCB4ZF9wb3dlcl9vZmZfY2FyZDN2MyhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0JaW50IHJldHZhbDsKLQotCXJ0czUxeF9pbml0X2NtZChjaGlwKTsKLQotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfQ0xLX0VOLCBYRF9DTEtfRU4sIDApOwotCi0JaWYgKGNoaXAtPmFzaWNfY29kZSkKLQkJeGRfcHVsbF9jdGxfZGlzYWJsZShjaGlwKTsKLQllbHNlCi0JCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIEZQR0FfUFVMTF9DVEwsIDB4RkYsIDB4REYpOwotCXJ0czUxeF9hZGRfY21kKGNoaXAsIFdSSVRFX1JFR19DTUQsIENBUkRfT0UsIFhEX09VVFBVVF9FTiwgMCk7Ci0JaWYgKCFjaGlwLT5vcHRpb24uRlQyX2Zhc3RfbW9kZSkgewotCQlydHM1MXhfYWRkX2NtZChjaGlwLCBXUklURV9SRUdfQ01ELCBDQVJEX1BXUl9DVEwsIFBPV0VSX01BU0ssCi0JCQkgICAgICAgUE9XRVJfT0ZGKTsKLQkJaWYgKENIRUNLX1BLRyhjaGlwLCBMUUZQNDgpCi0JCSAgICB8fCBjaGlwLT5vcHRpb24ucnRzNTEyOV9EMzMxOF9vZmZfZW5hYmxlKQotCQkJcnRzNTF4X2FkZF9jbWQoY2hpcCwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9QV1JfQ1RMLAotCQkJCSAgICAgICBEVjMzMThfQVVUT19QV1JfT0ZGLCAwKTsKLQl9Ci0KLQlyZXR2YWwgPSBydHM1MXhfc2VuZF9jbWQoY2hpcCwgTU9ERV9DLCAxMDApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgcnRzNTF4X3JlbGVhc2VfeGRfY2FyZChzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwotCWludCByZXR2YWw7Ci0KLQlSVFM1MVhfREVCVUdQKCJydHM1MXhfcmVsZWFzZV94ZF9jYXJkXG4iKTsKLQotCWNoaXAtPmNhcmRfcmVhZHkgJj0gflhEX0NBUkQ7Ci0JY2hpcC0+Y2FyZF9mYWlsICY9IH5YRF9DQVJEOwotCWNoaXAtPmNhcmRfd3AgJj0gflhEX0NBUkQ7Ci0KLQl4ZF9jYXJkLT5kZWxheV93cml0ZS5kZWxheV93cml0ZV9mbGFnID0gMDsKLQotCXJ0czUxeF94ZF9mcmVlX2wycF90YmwoY2hpcCk7Ci0KLQlydHM1MXhfd3JpdGVfcmVnaXN0ZXIoY2hpcCwgU0ZTTV9FRCwgSFdfQ01EX1NUT1AsIEhXX0NNRF9TVE9QKTsKLQotCXJldHZhbCA9IHhkX3Bvd2VyX29mZl9jYXJkM3YzKGNoaXApOwotCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCVRSQUNFX1JFVChjaGlwLCByZXR2YWwpOwotCi0JaWYgKGNoaXAtPmFzaWNfY29kZSAmJiBDSEVDS19QS0coY2hpcCwgUUZOMjQpKQotCQl3YWl0X3RpbWVvdXQoMjApOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkveGQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MTM5L3hkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NWEwYjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0czUxMzkveGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXIKLSAqIEhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDkgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICoKLSAqIEF1dGhvcjoKLSAqICAgd3dhbmcgKHdlaV93YW5nQHJlYWxzaWwuY29tLmNuKQotICogICBOby4gNDUwLCBTaGVuaHUgUm9hZCwgU3V6aG91IEluZHVzdHJ5IFBhcmssIFN1emhvdSwgQ2hpbmEKLSAqIE1haW50YWluZXI6Ci0gKiAgIEVkd2luIFJvbmcgKGVkd2luX3JvbmdAcmVhbHNpbC5jb20uY24pCi0gKiAgIE5vLiA0NTAsIFNoZW5odSBSb2FkLCBTdXpob3UgSW5kdXN0cnkgUGFyaywgU3V6aG91LCBDaGluYQotICovCi0KLSNpZm5kZWYgX19SVFM1MVhfWERfSAotI2RlZmluZSBfX1JUUzUxWF9YRF9ICi0KLS8qIEVycm9yIENvZGVzICovCi0jZGVmaW5lCVhEX05PX0VSUk9SCQkJMHgwMAotI2RlZmluZQlYRF9OT19NRU1PUlkJCQkweDgwCi0jZGVmaW5lCVhEX1BSR19FUlJPUgkJCTB4NDAKLSNkZWZpbmUJWERfTk9fQ0FSRAkJCTB4MjAKLSNkZWZpbmUJWERfUkVBRF9GQUlMCQkJMHgxMAotI2RlZmluZQlYRF9FUkFTRV9GQUlMCQkJMHgwOAotI2RlZmluZQlYRF9XUklURV9GQUlMCQkJMHgwNAotI2RlZmluZQlYRF9FQ0NfRVJST1IJCQkweDAyCi0jZGVmaW5lCVhEX1RPX0VSUk9SCQkJMHgwMQotCi0vKiBYRCBDb21tYW5kcyAqLwotI2RlZmluZQlSRUFEMV8xCQkJCTB4MDAKLSNkZWZpbmUJUkVBRDFfMgkJCQkweDAxCi0jZGVmaW5lCVJFQUQyCQkJCTB4NTAKLSNkZWZpbmUgUkVBRF9JRAkJCQkweDkwCi0jZGVmaW5lIFJFU0VUCQkJCTB4ZmYKLSNkZWZpbmUgUEFHRV9QUkdfMQkJCTB4ODAKLSNkZWZpbmUgUEFHRV9QUkdfMgkJCTB4MTAKLSNkZWZpbmUJQkxLX0VSQVNFXzEJCQkweDYwCi0jZGVmaW5lCUJMS19FUkFTRV8yCQkJMHhEMAotI2RlZmluZSBSRUFEX1NUUwkJCTB4NzAKLSNkZWZpbmUgUkVBRF94RF9JRAkJCTB4OUEKLSNkZWZpbmUJQ09QWV9CQUNLXzUxMgkJCTB4OEEKLSNkZWZpbmUJQ09QWV9CQUNLXzJLCQkJMHg4NQotI2RlZmluZQlSRUFEMV8xXzIJCQkweDMwCi0jZGVmaW5lCVJFQUQxXzFfMwkJCTB4MzUKLSNkZWZpbmUJQ0hHX0RBVF9PVVRfMQkJCTB4MDUKLSNkZWZpbmUgUkRNX0RBVF9PVVRfMQkJCTB4MDUKLSNkZWZpbmUJQ0hHX0RBVF9PVVRfMgkJCTB4RTAKLSNkZWZpbmUgUkRNX0RBVF9PVVRfMgkJCTB4RTAKLSNkZWZpbmUJQ0hHX0RBVF9PVVRfMgkJCTB4RTAKLSNkZWZpbmUJQ0hHX0RBVF9JTl8xCQkJMHg4NQotI2RlZmluZQlDQUNIRV9QUkcJCQkweDE1Ci0KLS8qIFJlZHVuZGFudCBBcmVhIFJlbGF0ZWQgKi8KLSNkZWZpbmUgWERfRVhUUkFfU0laRQkJCTB4MTAKLSNkZWZpbmUgWERfMktfRVhUUkFfU0laRQkJMHg0MAotCi0vKiBEZWZpbmUgZm9yIFhEIFN0YXR1cyAgKi8KLSNkZWZpbmUJTk9UX1dSSVRFX1BST1RFQ1RFRAkJMHg4MAotI2RlZmluZQlSRUFEWV9TVEFURQkJCTB4NDAKLSNkZWZpbmUJUFJPR1JBTV9FUlJPUgkJCTB4MDEKLSNkZWZpbmUJUFJPR1JBTV9FUlJPUl9OXzEJCTB4MDIKLSNkZWZpbmUJSU5URVJOQUxfUkVBRFkJCQkweDIwCi0jZGVmaW5lCVJFQURZX0ZMQUcJCQkweDVGCi0KLS8qIERlZmluZSBmb3IgZGV2aWNlIGNvZGUgKi8KLSNkZWZpbmUJWERfOE1fWDhfNTEyCQkJMHhFNgotI2RlZmluZQlYRF8xNk1fWDhfNTEyCQkJMHg3MwotI2RlZmluZQlYRF8zMk1fWDhfNTEyCQkJMHg3NQotI2RlZmluZQlYRF82NE1fWDhfNTEyCQkJMHg3NgotI2RlZmluZQlYRF8xMjhNX1g4XzUxMgkJCTB4NzkKLSNkZWZpbmUJWERfMjU2TV9YOF81MTIJCQkweDcxCi0jZGVmaW5lCVhEXzEyOE1fWDhfMjA0OAkJCTB4RjEKLSNkZWZpbmUJWERfMjU2TV9YOF8yMDQ4CQkJMHhEQQotI2RlZmluZQlYRF81MTJNX1g4CQkJMHhEQwotI2RlZmluZQlYRF8xMjhNX1gxNl8yMDQ4CQkweEMxCi0jZGVmaW5lCVhEXzRNX1g4XzUxMl8xCQkJMHhFMwotI2RlZmluZQlYRF80TV9YOF81MTJfMgkJCTB4RTUKLSNkZWZpbmUJeERfMUdfWDhfNTEyCQkJMHhEMwotI2RlZmluZQl4RF8yR19YOF81MTIJCQkweEQ1Ci0KLSNkZWZpbmUJWERfSURfQ09ERQkJCTB4QjUKLQotI2RlZmluZQlWRU5ET1JfQkxPQ0sJCQkweEVGRkYKLSNkZWZpbmUJQ0lTX0JMT0NLCQkJMHhERkZGCi0KLSNkZWZpbmUJQkxLX05PVF9GT1VORAkJCTB4RkZGRkZGRkYKLQotI2RlZmluZQlOT19ORVdfQkxLCQkJMHhGRkZGRkZGRgotCi0jZGVmaW5lCVBBR0VfQ09SUkVDVEFCTEUJCTB4MAotI2RlZmluZQlQQUdFX05PVENPUlJFQ1RBQkxFCQkweDEKLQotI2RlZmluZQlOT19PRkZTRVQJCQkweDAKLSNkZWZpbmUJV0lUSF9PRkZTRVQJCQkweDEKLQotI2RlZmluZQlTZWN0X1Blcl9QYWdlCQkJNAotI2RlZmluZQlYRF9BRERSX01PREVfMkMJCQlYRF9BRERSX01PREVfMkEKLQotI2RlZmluZSBaT05FMF9CQURfQkxPQ0sJCQkyMwotI2RlZmluZSBOT1RfWk9ORTBfQkFEX0JMT0NLCQkyNAotCi0vKiBBc3NpZ24gYWRkcmVzcyBtb2RlICovCi0jZGVmaW5lCVhEX1JXX0FERFIJCQkweDAxCi0jZGVmaW5lCVhEX0VSQVNFX0FERFIJCQkweDAyCi0KLS8qIE1hY3JvIERlZmluaXRpb24gKi8KLSNkZWZpbmUJWERfUEFHRV81MTIoeGRfY2FyZCkJCVwKLQlkbyB7CVwKLQkJKHhkX2NhcmQpLT5ibG9ja19zaGlmdCA9IDU7CVwKLQkJKHhkX2NhcmQpLT5wYWdlX29mZiA9IDB4MUY7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lCVhEX1NFVF9CQURfTkVXQkxLKHhkX2NhcmQpCSgoeGRfY2FyZCktPm11bHRpX2ZsYWcgfD0gMHgwMSkKLSNkZWZpbmUJWERfQ0xSX0JBRF9ORVdCTEsoeGRfY2FyZCkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyAmPSB+MHgwMSkKLSNkZWZpbmUJWERfQ0hLX0JBRF9ORVdCTEsoeGRfY2FyZCkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyAmIDB4MDEpCi0KLSNkZWZpbmUJWERfU0VUX0JBRF9PTERCTEsoeGRfY2FyZCkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyB8PSAweDAyKQotI2RlZmluZQlYRF9DTFJfQkFEX09MREJMSyh4ZF9jYXJkKQkoKHhkX2NhcmQpLT5tdWx0aV9mbGFnICY9IH4weDAyKQotI2RlZmluZQlYRF9DSEtfQkFEX09MREJMSyh4ZF9jYXJkKQkoKHhkX2NhcmQpLT5tdWx0aV9mbGFnICYgMHgwMikKLQotI2RlZmluZQlYRF9TRVRfTUJSX0ZBSUwoeGRfY2FyZCkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyB8PSAweDA0KQotI2RlZmluZQlYRF9DTFJfTUJSX0ZBSUwoeGRfY2FyZCkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyAmPSB+MHgwNCkKLSNkZWZpbmUJWERfQ0hLX01CUl9GQUlMKHhkX2NhcmQpCSgoeGRfY2FyZCktPm11bHRpX2ZsYWcgJiAweDA0KQotCi0jZGVmaW5lCVhEX1NFVF9FQ0NfRkxEX0VSUih4ZF9jYXJkKQkoKHhkX2NhcmQpLT5tdWx0aV9mbGFnIHw9IDB4MDgpCi0jZGVmaW5lCVhEX0NMUl9FQ0NfRkxEX0VSUih4ZF9jYXJkKQkoKHhkX2NhcmQpLT5tdWx0aV9mbGFnICY9IH4weDA4KQotI2RlZmluZQlYRF9DSEtfRUNDX0ZMRF9FUlIoeGRfY2FyZCkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyAmIDB4MDgpCi0KLSNkZWZpbmUJWERfU0VUXzRNQih4ZF9jYXJkKQkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyB8PSAweDEwKQotI2RlZmluZQlYRF9DTFJfNE1CKHhkX2NhcmQpCQkoKHhkX2NhcmQpLT5tdWx0aV9mbGFnICY9IH4weDEwKQotI2RlZmluZQlYRF9DSEtfNE1CKHhkX2NhcmQpCQkoKHhkX2NhcmQpLT5tdWx0aV9mbGFnICYgMHgxMCkKLQotI2RlZmluZQlYRF9TRVRfRUNDX0VSUih4ZF9jYXJkKQkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyB8PSAweDQwKQotI2RlZmluZQlYRF9DTFJfRUNDX0VSUih4ZF9jYXJkKQkJKCh4ZF9jYXJkKS0+bXVsdGlfZmxhZyAmPSB+MHg0MCkKLSNkZWZpbmUJWERfQ0hLX0VDQ19FUlIoeGRfY2FyZCkJCSgoeGRfY2FyZCktPm11bHRpX2ZsYWcgJiAweDQwKQotCi0vKiBPZmZzZXQgaW4geEQgcmVkdW5kYW50IGJ1ZmZlciAqLwotI2RlZmluZSBQQUdFX1NUQVRVUwkJMAotI2RlZmluZSBCTE9DS19TVEFUVVMJCTEKLSNkZWZpbmUgQkxPQ0tfQUREUjFfTAkJMgotI2RlZmluZSBCTE9DS19BRERSMV9ICQkzCi0jZGVmaW5lIEJMT0NLX0FERFIyX0wJCTQKLSNkZWZpbmUgQkxPQ0tfQUREUjJfSAkJNQotI2RlZmluZSBSRVNFUlZFRDAJCTYKLSNkZWZpbmUgUkVTRVJWRUQxCQk3Ci0jZGVmaW5lIFJFU0VSVkVEMgkJOAotI2RlZmluZSBSRVNFUlZFRDMJCTkKLSNkZWZpbmUgUEFSSVRZCQkJMTAKLQotLyogRm9yIENJUyBibG9jayAqLwotI2RlZmluZQlDSVMwXzAJCQkwCi0jZGVmaW5lCUNJUzBfMQkJCTEKLSNkZWZpbmUJQ0lTMF8yCQkJMgotI2RlZmluZQlDSVMwXzMJCQkzCi0jZGVmaW5lCUNJUzBfNAkJCTQKLSNkZWZpbmUJQ0lTMF81CQkJNQotI2RlZmluZQlDSVMwXzYJCQk2Ci0jZGVmaW5lCUNJUzBfNwkJCTcKLSNkZWZpbmUJQ0lTMF84CQkJOAotI2RlZmluZQlDSVMwXzkJCQk5Ci0jZGVmaW5lCUNJUzFfMAkJCTI1NgotI2RlZmluZQlDSVMxXzEJCQkoMjU2ICsgMSkKLSNkZWZpbmUJQ0lTMV8yCQkJKDI1NiArIDIpCi0jZGVmaW5lCUNJUzFfMwkJCSgyNTYgKyAzKQotI2RlZmluZQlDSVMxXzQJCQkoMjU2ICsgNCkKLSNkZWZpbmUJQ0lTMV81CQkJKDI1NiArIDUpCi0jZGVmaW5lCUNJUzFfNgkJCSgyNTYgKyA2KQotI2RlZmluZQlDSVMxXzcJCQkoMjU2ICsgNykKLSNkZWZpbmUJQ0lTMV84CQkJKDI1NiArIDgpCi0jZGVmaW5lCUNJUzFfOQkJCSgyNTYgKyA5KQotCi1pbnQgcnRzNTF4X3Jlc2V0X3hkX2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLWludCBydHM1MXhfeGRfcncoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXAsIHUzMiBzdGFydF9zZWN0b3IsCi0JICB1MTYgc2VjdG9yX2NudCk7Ci12b2lkIHJ0czUxeF94ZF9mcmVlX2wycF90Ymwoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLXZvaWQgcnRzNTF4X3hkX2NsZWFudXBfd29yayhzdHJ1Y3QgcnRzNTF4X2NoaXAgKmNoaXApOwotaW50IHJ0czUxeF9yZWxlYXNlX3hkX2NhcmQoc3RydWN0IHJ0czUxeF9jaGlwICpjaGlwKTsKLQotI2VuZGlmIC8qIF9fUlRTNTFYX1hEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHM1MjA4L3J0c3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHM1MjA4L3J0c3guYwppbmRleCBkMmQxMzQ1Li5jMGEwZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTIwOC9ydHN4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0czUyMDgvcnRzeC5jCkBAIC0xMDMwLDcgKzEwMzAsNyBAQAogfQogCiAvKiBQQ0kgSURzICovCi1zdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRzeF9pZHMpID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0c3hfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg1MjA4KSwKIAkJUENJX0NMQVNTX09USEVSUyA8PCAxNiwgMHhGRjAwMDAgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDUyODgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0czUyMDgvcnRzeF9jaGlwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTIwOC9ydHN4X2NoaXAuYwppbmRleCA2NDI2ODA3Li43OTA3ZTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzNTIwOC9ydHN4X2NoaXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzNTIwOC9ydHN4X2NoaXAuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaWYgKGNoaXAtPmljX3ZlcnNpb24gPj0gSUNfVkVSX0MpCiAJCXJlZyB8PSBERUxJTktfSU5UX0VOOwogI2lmZGVmIFNVUFBPUlRfT0NQCi0JCXJlZyB8PSBPQ19JTlRfRU47CisJcmVnIHw9IE9DX0lOVF9FTjsKICNlbmRpZgogCWlmICghY2hpcC0+YWRtYV9tb2RlKQogCQlyZWcgfD0gREFUQV9ET05FX0lOVF9FTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvMnQzZTMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvMnQzZTMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdiZjcyMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy8ydDNlMy5oCisrKyAvZGV2L251bGwKQEAgLTEsODg5ICswLDAgQEAKLS8qCi0gKiBTQkUgMlQzRTMgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQgZHJpdmVyIGZvciBMaW51eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYSBkcml2ZXIgd3JpdHRlbiBieSBTQkUgSW5jLgotICovCi0KLSNpZm5kZWYgVDNFM19ICi0jZGVmaW5lIFQzRTNfSAotCi0jaW5jbHVkZSA8bGludXgvaGRsYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSAiY3RybC5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAyMTE0MwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBDU1IgKi8KLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1JFR19CVVNfTU9ERQkJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX1RSQU5TTUlUX1BPTExfREVNQU5ECQkJMQotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX1JFQ0VJVkVfUE9MTF9ERU1BTkQJCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX1JFQ0VJVkVfTElTVF9CQVNFX0FERFJFU1MJCQkzCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19SRUdfVFJBTlNNSVRfTElTVF9CQVNFX0FERFJFU1MJCQk0Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19SRUdfU1RBVFVTCQkJCQk1Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19SRUdfT1BFUkFUSU9OX01PREUJCQkJNgotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX0lOVEVSUlVQVF9FTkFCTEUJCQkJNwotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX01JU1NFRF9GUkFNRVNfQU5EX09WRVJGTE9XX0NPVU5URVIJCTgKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVAk5Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fUFJPR1JBTU1JTkdfQUREUkVTUwkJMTAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1JFR19HRU5FUkFMX1BVUlBPU0VfVElNRVJfQU5EX0lOVEVSUlVQVF9NSVRJR0FUSU9OX0NPTlRST0wgMTEKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1JFR19TSUFfU1RBVFVTCQkJCQkxMgotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX1NJQV9DT05ORUNUSVZJVFkJCQkJMTMKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1JFR19TSUFfVFJBTlNNSVRfQU5EX1JFQ0VJVkUJCQkxNAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfUkVHX1NJQV9BTkRfR0VORVJBTF9QVVJQT1NFX1BPUlQJCTE1Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19SRUdfTUFYCQkJCQkJMTYKLQotLyogQ1NSMCAtIEJVU19NT0RFICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfV1JJVEVfQU5EX0lOVkFMSURBVEVfRU5BQkxFCQkweDAxMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVBRF9MSU5FX0VOQUJMRQkJCTB4MDA4MDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUFEX01VTFRJUExFX0VOQUJMRQkJMHgwMDIwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX0FVVE9NQVRJQ19QT0xMSU5HXzIwMHVzCTB4MDAwMjAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9BVVRPTUFUSUNfUE9MTElOR19ESVNBQkxFRAkweDAwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfQ0FDSEVfQUxJR05NRU5UXzMyCQkJMHgwMDAwYzAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0NBQ0hFX0FMSUdOTUVOVF8xNgkJCTB4MDAwMDgwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9DQUNIRV9BTElHTk1FTlRfOAkJCTB4MDAwMDQwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9CVVNfQVJCSVRSQVRJT05fUlIJCQkweDAwMDAwMDAyCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfU09GVFdBUkVfUkVTRVQJCQkweDAwMDAwMDAxCi0KLS8qIENTUjUgLSBTVEFUVVMgKi8KLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9HRU5FUkFMX1BVUlBPU0VfUE9SVF9JTlRFUlJVUFQJMHgwNDAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0VSUk9SX0JJVFMJCQkJMHgwMzgwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1BBUklUWV9FUlJPUgkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9NQVNURVJfQUJPUlQJCQkweDAwODAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVEFSR0VUX0FCT1JUCQkJMHgwMTAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlTU0lPTl9QUk9DRVNTX1NUQVRFCQkweDAwNzAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFhfU1RPUFBFRAkJCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFhfU1VTUEVOREVECQkJMHgwMDYwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfUFJPQ0VTU19TVEFURQkJMHgwMDBlMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1JYX1NUT1BQRUQJCQkJMHgwMDAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1JYX1NVU1BFTkRFRAkJCTB4MDAwYTAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9OT1JNQUxfSU5URVJSVVBUX1NVTU1BUlkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9BQk5PUk1BTF9JTlRFUlJVUFRfU1VNTUFSWQkJMHgwMDAwODAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0VBUkxZX1JFQ0VJVkVfSU5URVJSVVBUCQkweDAwMDA0MDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfRkFUQUxfQlVTX0VSUk9SCQkJMHgwMDAwMjAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0dFTkVSQUxfUFVSUE9TRV9USU1FUl9FWFBJUkVECTB4MDAwMDA4MDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9FQVJMWV9UUkFOU01JVF9JTlRFUlJVUFQJCTB4MDAwMDA0MDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX1dBVENIRE9HX1RJTUVPVVQJCTB4MDAwMDAyMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX1BST0NFU1NfU1RPUFBFRAkJMHgwMDAwMDEwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfQlVGRkVSX1VOQVZBSUxBQkxFCQkweDAwMDAwMDgwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9JTlRFUlJVUFQJCQkweDAwMDAwMDQwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfVU5ERVJGTE9XCQkJMHgwMDAwMDAyMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX0pBQkJFUl9USU1FT1VUCQkweDAwMDAwMDA4Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfQlVGRkVSX1VOQVZBSUxBQkxFCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfUFJPQ0VTU19TVE9QUEVECQkweDAwMDAwMDAyCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfSU5URVJSVVBUCQkJMHgwMDAwMDAwMQotCi0vKiBDU1I2IC0gT1BFUkFUSU9OX01PREUgKi8KLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TUEVDSUFMX0NBUFRVUkVfRUZGRUNUX0VOQUJMRQkweDgwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9BTEwJCQkJMHg0MDAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX01VU1RfQkVfT05FCQkJCTB4MDIwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TQ1JBTUJMRVJfTU9ERQkJCTB4MDEwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9QQ1NfRlVOQ1RJT04JCQkweDAwODAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfVEhSRVNIT0xEX01PREVfMTBNYnMJMHgwMDQwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX1RIUkVTSE9MRF9NT0RFXzEwME1icwkweDAwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfU1RPUkVfQU5EX0ZPUldBUkQJCQkweDAwMjAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfSEVBUlRCRUFUX0RJU0FCTEUJCQkweDAwMDgwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUE9SVF9TRUxFQ1QJCQkJMHgwMDA0MDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0NBUFRVUkVfRUZGRUNUX0VOQUJMRQkJMHgwMDAyMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RIUkVTSE9MRF9DT05UUk9MX0JJVFMJCTB4MDAwMGMwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTXzEJCTB4MDAwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTXzIJCTB4MDAwMDQwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTXzMJCTB4MDAwMDgwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTXzQJCTB4MDAwMGMwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JU1NJT05fU1RBUlQJCQkweDAwMDAyMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfT1BFUkFUSU5HX01PREUJCQkweDAwMDAwYzAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfTE9PUEJBQ0tfT0ZGCQkJMHgwMDAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0xPT1BCQUNLX0VYVEVSTkFMCQkJMHgwMDAwMDgwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0xPT1BCQUNLX0lOVEVSTkFMCQkJMHgwMDAwMDQwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0ZVTExfRFVQTEVYX01PREUJCQkweDAwMDAwMjAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUEFTU19BTExfTVVMVElDQVNUCQkJMHgwMDAwMDA4MAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1BST01JU0NVT1VTX01PREUJCQkweDAwMDAwMDQwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUEFTU19CQURfRlJBTUVTCQkJMHgwMDAwMDAwOAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfU1RBUlQJCQkweDAwMDAwMDAyCi0KLS8qIENTUjcgLSBJTlRFUlJVUFRfRU5BQkxFICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfTElOS19DSEFOR0VEX0VOQUJMRQkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9HRU5FUkFMX1BVUlBPU0VfUE9SVF9FTkFCTEUJCTB4MDQwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9OT1JNQUxfSU5URVJSVVBUX1NVTU1BUllfRU5BQkxFCTB4MDAwMTAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9BQk5PUk1BTF9JTlRFUlJVUFRfU1VNTUFSWV9FTkFCTEUJMHgwMDAwODAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0VBUkxZX1JFQ0VJVkVfSU5URVJSVVBUX0VOQUJMRQkweDAwMDA0MDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfRkFUQUxfQlVTX0VSUk9SX0VOQUJMRQkJMHgwMDAwMjAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0xJTktfRkFJTF9FTkFCTEUJCQkweDAwMDAxMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfR0VORVJBTF9QVVJQT1NFX1RJTUVSX0VOQUJMRQkweDAwMDAwODAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfRUFSTFlfVFJBTlNNSVRfSU5URVJSVVBUX0VOQUJMRQkweDAwMDAwNDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9XQVRDSERPR19USU1FT1VUX0VOQUJMRQkweDAwMDAwMjAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9TVE9QUEVEX0VOQUJMRQkJMHgwMDAwMDEwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfQlVGRkVSX1VOQVZBSUxBQkxFX0VOQUJMRQkweDAwMDAwMDgwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9JTlRFUlJVUFRfRU5BQkxFCQkweDAwMDAwMDQwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfVU5ERVJGTE9XX0lOVEVSUlVQVF9FTkFCTEUJMHgwMDAwMDAyMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX0pBQkJFUl9USU1FT1VUX0VOQUJMRQkweDAwMDAwMDA4Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfQlVGRkVSX1VOQVZBSUxBQkxFX0VOQUJMRQkweDAwMDAwMDA0Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfU1RPUFBFRF9FTkFCTEUJCTB4MDAwMDAwMDIKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9JTlRFUlJVUFRfRU5BQkxFCQkweDAwMDAwMDAxCi0KLS8qIENTUjggLSBNSVNTRURfRlJBTUVTX0FORF9PVkVSRkxPV19DT1VOVEVSICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfT1ZFUkZMT1dfQ09VTlRFUl9PVkVSRkxPVwkJMHgxMDAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX09WRVJGTE9XX0NPVU5URVIJCQkweDBmZmUwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfTUlTU0VEX0ZSQU1FX09WRVJGTE9XCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfTUlTU0VEX0ZSQU1FU19DT1VOVEVSCQkweDAwMDBmZmZmCi0KLS8qIENTUjkgLSBCT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCAqLwotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX01JSV9NQU5BR0VNRU5UX0RBVEFfSU4JCTB4MDAwODAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9NSUlfTUFOQUdFTUVOVF9SRUFEX01PREUJCTB4MDAwNDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9NSUlfTUFOQUdFTUVOVF9EQVRBX09VVAkJMHgwMDAyMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX01JSV9NQU5BR0VNRU5UX0NMT0NLCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVBRF9PUEVSQVRJT04JCQkweDAwMDA0MDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfV1JJVEVfT1BFUkFUSU9OCQkJMHgwMDAwMjAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0JPT1RfUk9NX1NFTEVDVAkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVAkJCTB4MDAwMDA4MDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9CT09UX1JPTV9EQVRBCQkJMHgwMDAwMDBmZgotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fREFUQV9PVVQJCQkweDAwMDAwMDA4Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9EQVRBX0lOCQkJMHgwMDAwMDAwNAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fQ0xPQ0sJCQkweDAwMDAwMDAyCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9DSElQX1NFTEVDVAkJMHgwMDAwMDAwMQotCi0vKiBDU1IxMSAtIEdFTkVSQUxfUFVSUE9TRV9USU1FUl9BTkRfSU5URVJSVVBUX01JVElHQVRJT05fQ09OVFJPTCAqLwotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0NZQ0xFX1NJWkUJCQkJMHg4MDAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX1RJTUVSCQkJMHg3ODAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX05VTUJFUl9PRl9UUkFOU01JVF9QQUNLRVRTCQkweDA3MDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9USU1FUgkJCTB4MDBmMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9OVU1CRVJfT0ZfUkVDRUlWRV9QQUNLRVRTCQkweDAwMGUwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfQ09OVElOVU9VU19NT0RFCQkJMHgwMDAxMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RJTUVSX1ZBTFVFCQkJCTB4MDAwMGZmZmYKLQotLyogQ1NSMTIgLSBTSUFfU1RBVFVTICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfMTBCQVNFX1RfUkVDRUlWRV9QT1JUX0FDVElWSVRZCTB4MDAwMDAyMDAKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9BVUlfUkVDRUlWRV9QT1JUX0FDVElWSVRZCQkweDAwMDAwMTAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfMTBNYnNfTElOS19TVEFUVVMJCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfMTAwTWJzX0xJTktfU1RBVFVTCQkJMHgwMDAwMDAwMgotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX01JSV9SRUNFSVZFX1BPUlRfQUNUSVZJVFkJCTB4MDAwMDAwMDEKLQotLyogQ1NSMTMgLSBTSUFfQ09OTkVDVElWSVRZICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfMTBCQVNFX1RfT1JfQVVJCQkJMHgwMDAwMDAwOAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX1NJQV9SRVNFVAkJCQkweDAwMDAwMDAxCi0KLS8qIENTUjE0IC0gU0lBX1RSQU5TTUlUX0FORF9SRUNFSVZFICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfMTAwQkFTRV9UWF9GVUxMX0RVUExFWAkJMHgwMDAyMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0NPTExJU0lPTl9ERVRFQ1RfRU5BQkxFCQkweDAwMDAwNDAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfQ09MTElTSU9OX1NRVUVMQ0hfRU5BQkxFCQkweDAwMDAwMjAwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9TUVVFTENIX0VOQUJMRQkJMHgwMDAwMDEwMAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0xJTktfUFVMU0VfU0VORF9FTkFCTEUJCTB4MDAwMDAwMDQKLSNkZWZpbmUgU0JFXzJUM0UzXzIxMTQzX1ZBTF9FTkNPREVSX0VOQUJMRQkJCTB4MDAwMDAwMDEKLQotLyogQ1NSMTUgLSBTSUFfQU5EX0dFTkVSQUxfUFVSUE9TRV9QT1JUICovCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9XQVRDSERPR19ESVNBQkxFCQkweDAwMDAwMDEwCi0jZGVmaW5lIFNCRV8yVDNFM18yMTE0M19WQUxfQVVJX0JOQ19NT0RFCQkJMHgwMDAwMDAwOAotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0hPU1RfVU5KQUIJCQkJMHgwMDAwMDAwMgotI2RlZmluZSBTQkVfMlQzRTNfMjExNDNfVkFMX0pBQkJFUl9ESVNBQkxFCQkJMHgwMDAwMDAwMQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBDUExECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHJlZ19tYXAgaW5kZXhlcyAqLwotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQQkJCQkwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1JFR19QQ1JCCQkJCTEKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX1BMQ1IJCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9SRUdfUExUUgkJCQkzCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1JFR19QUEZSCQkJCTQKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX0JPQVJEX0lECQkJNQotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9SRUdfRlBHQV9WRVJTSU9OCQkJNgotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9SRUdfRlJBTUVSX0JBU0VfQUREUkVTUwkJNwotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9SRUdfU0VSSUFMX0NISVBfU0VMRUNUCQk4Ci0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1JFR19TVEFUSUNfUkVTRVQJCQk5Ci0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1JFR19QVUxTRV9SRVNFVAkJCTEwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1JFR19GUEdBX1JFQ09ORklHVVJBVElPTgkJMTEKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX0xFRFIJCQkJMTIKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX1BJQ1NSCQkJMTMKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX1BJRVIJCQkJMTQKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkMJCQkJMTUKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX1BCV0YJCQkJMTYKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfUkVHX1BCV0wJCQkJMTcKLQotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9SRUdfTUFYCQkJCTE4Ci0KLS8qKioqKioqKioqLwotCi0vKiB2YWxfbWFwIGluZGV4ZXMgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX0xJVV9TRUxFQ1QJCQkwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9EQUNfU0VMRUNUCQkJMQotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfTE9PUF9USU1JTkdfU09VUkNFCQkyCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9MSVVfRlJBTUVSX1JFU0VUCQkzCi0KLS8qIFBDUkEgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX0NSQzMyCQkJCTB4NDAKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1RSQU5TUEFSRU5UX01PREUJCQkweDIwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9SRUFSX1BBTkVMCQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1JBV19NT0RFCQkJCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX0FMVAkJCQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfTE9PUF9USU1JTkcJCQkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfTE9DQUxfQ0xPQ0tfRTMJCQkweDAxCi0KLS8qIFBDUkIgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1BBRF9DT1VOVAkJCQkweDMwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfMQkJCQkweDAwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfMgkJCQkweDEwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfMwkJCQkweDIwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfNAkJCQkweDMwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9TQ1JBTUJMRVJfVFlQRQkJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1NDUkFNQkxFUl9FTkFCTEUJCQkweDAxCi0KLS8qIFBDUkMgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX0ZSQUNUSU9OQUxfTU9ERV9OT05FCQkJMHgwMAotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfRlJBQ1RJT05BTF9NT0RFXzAJCQkweDAxCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9GUkFDVElPTkFMX01PREVfMQkJCTB4MTEKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX0ZSQUNUSU9OQUxfTU9ERV8yCQkJMHgyMQotCi0vKiBQTFRSICovCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9MQ1ZfQ09VTlRFUgkJCQkweGZmCi0KLS8qIFNDU1IgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX0VFUFJPTV9TRUxFQ1QJCQkweDEwCi0KLS8qIFBJQ1NSICovCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9MT1NTX09GX1NJR05BTF9USFJFU0hPTERfTEVWRUxfMQkweDgwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9SRUNFSVZFX0xPU1NfT0ZfU0lHTkFMX0NIQU5HRQkweDQwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9JTlRFUlJVUFRfRlJPTV9FVEhFUk5FVF9BU1NFUlRFRAkweDIwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9JTlRFUlJVUFRfRlJPTV9GUkFNRVJfQVNTRVJURUQJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfTENWX0xJTUlUX0VYQ0VFREVECQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfRE1PX1NJR05BTF9ERVRFQ1RFRAkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1JFQ0VJVkVfTE9TU19PRl9MT0NLX0RFVEVDVEVECTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1JFQ0VJVkVfTE9TU19PRl9TSUdOQUxfREVURUNURUQJMHgwMQotCi0vKiBQSUVSICovCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9SRUNFSVZFX0xPU19DSEFOR0VfRU5BQkxFCQkweDQwCi0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9JTlRFUlJVUFRfRlJPTV9FVEhFUk5FVF9FTkFCTEUJMHgyMAotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfSU5URVJSVVBUX0ZST01fRlJBTUVSX0VOQUJMRQkJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfTENWX0lOVEVSUlVQVF9FTkFCTEUJCQkweDA4Ci0jZGVmaW5lIFNCRV8yVDNFM19DUExEX1ZBTF9ETU9fRU5BQkxFCQkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0NQTERfVkFMX1JFQ0VJVkVfTE9TU19PRl9MT0NLX0VOQUJMRQkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfQ1BMRF9WQUxfUkVDRUlWRV9MT1NTX09GX1NJR05BTF9FTkFCTEUJMHgwMQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBGcmFtZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogcmVnX21hcCBpbmRleGVzICovCi0vKiBjb21tb24gKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfT1BFUkFUSU5HX01PREUJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19JT19DT05UUk9MCQkJCQkxCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0JMT0NLX0lOVEVSUlVQVF9FTkFCTEUJCQkyCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0JMT0NLX0lOVEVSUlVQVF9TVEFUVVMJCQkzCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fTENWX0VWRU5UX0NPVU5UX01TQgkJCTI4Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fTENWX0VWRU5UX0NPVU5UX0xTQgkJCTI5Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fRlJBTUlOR19CSVRfRVJST1JfRVZFTlRfQ09VTlRfTVNCCTMwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fRlJBTUlOR19CSVRfRVJST1JfRVZFTlRfQ09VTlRfTFNCCTMxCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fUEFSSVRZX0VSUk9SX0VWRU5UX0NPVU5UX01TQgkJMzIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9QQVJJVFlfRVJST1JfRVZFTlRfQ09VTlRfTFNCCQkzMwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19QTU9OX0ZFQkVfRVZFTlRfQ09VTlRfTVNCCQkJMzQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9GRUJFX0VWRU5UX0NPVU5UX0xTQgkJCTM1Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fQ1BfQklUX0VSUk9SX0VWRU5UX0NPVU5UX01TQgkJMzYKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9DUF9CSVRfRVJST1JfRVZFTlRfQ09VTlRfTFNCCQkzNwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19QTU9OX0hPTERJTkdfUkVHSVNURVIJCQkzOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19PTkVfU0VDT05EX0VSUk9SX1NUQVRVUwkJCTM5Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0xDVl9PTkVfU0VDT05EX0FDQ1VNVUxBVE9SX01TQgkJNDAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfTENWX09ORV9TRUNPTkRfQUNDVU1VTEFUT1JfTFNCCQk0MQotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19GUkFNRV9QQVJJVFlfRVJST1JfT05FX1NFQ09ORF9BQ0NVTVVMQVRPUl9NU0IgIDQyCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0ZSQU1FX1BBUklUWV9FUlJPUl9PTkVfU0VDT05EX0FDQ1VNVUxBVE9SX0xTQiAgNDMKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRlJBTUVfQ1BfQklUX0VSUk9SX09ORV9TRUNPTkRfQUNDVU1VTEFUT1JfTVNCICA0NAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19GUkFNRV9DUF9CSVRfRVJST1JfT05FX1NFQ09ORF9BQ0NVTVVMQVRPUl9MU0IgIDQ1Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0xJTkVfSU5URVJGQUNFX0RSSVZFCQkJNDYKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfTElORV9JTlRFUkZBQ0VfU0NBTgkJCTQ3Ci0KLS8qIFQzICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTCQkJNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9TVEFUVVMJCQkJNQotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9JTlRFUlJVUFRfRU5BQkxFCQkJNgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9JTlRFUlJVUFRfU1RBVFVTCQkJNwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9TWU5DX0RFVEVDVF9FTkFCTEUJCQk4Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0ZFQUMJCQkJCTEwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0ZFQUNfSU5URVJSVVBUX0VOQUJMRV9TVEFUVVMJCTExCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0xBUERfQ09OVFJPTAkJCQkxMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9MQVBEX1NUQVRVUwkJCQkxMwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19UWF9DT05GSUdVUkFUSU9OCQkJMTYKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfVFhfRkVBQ19DT05GSUdVUkFUSU9OX1NUQVRVUwkJMTcKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfVFhfRkVBQwkJCQkJMTgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfVFhfTEFQRF9DT05GSUdVUkFUSU9OCQkJMTkKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfVFhfTEFQRF9TVEFUVVMJCQkJMjAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfVFhfTUJJVF9NQVNLCQkJCTIxCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1RYX0ZCSVRfTUFTSwkJCQkyMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19UWF9GQklUX01BU0tfMgkJCQkyMwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19UWF9GQklUX01BU0tfMwkJCQkyNAotCi0vKiBFMyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19SWF9DT05GSUdVUkFUSU9OX1NUQVRVU18xCQk0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTXzIJCTUKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfSU5URVJSVVBUX0VOQUJMRV8xCQkJNgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19SWF9JTlRFUlJVUFRfRU5BQkxFXzIJCQk3Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9TVEFUVVNfMQkJCTgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfSU5URVJSVVBUX1NUQVRVU18yCQkJOQotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19SWF9MQVBEX0NPTlRST0wJCQkJMTIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfTEFQRF9TVEFUVVMJCQkJMTMKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfTlJfQllURQkJCQkxNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19SWF9TRVJWSUNFX0JJVFMJCQkJMTQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfR0NfQllURQkJCQkxNQotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19UWF9DT05GSUdVUkFUSU9OCQkJMTYKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfTEFQRF9DT05GSUdVUkFUSU9OCQkJMTkKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfTEFQRF9TVEFUVVMJCQkJMTkKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfR0NfQllURQkJCQkyMQotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19UWF9TRVJWSUNFX0JJVFMJCQkJMjEKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfTUFfQllURQkJCQkyMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19UWF9OUl9CWVRFCQkJCTIzCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1RYX0ZBMV9FUlJPUl9NQVNLCQkJMjUKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfRkFTX0VSUk9SX01BU0tfVVBQRVIJCQkyNQotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19UWF9GQTJfRVJST1JfTUFTSwkJCTI2Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1RYX0ZBU19FUlJPUl9NQVNLX0xPV0VSCQkJMjYKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfQklQOF9NQVNLCQkJCTI3Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1RYX0JJUDRfTUFTSwkJCQkyNwotCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfUkVHX01BWAkJCQkJNDgKLQotLyoqKioqKioqKiovCi0KLS8qIE9QRVJBVElOR19NT0RFICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0xPQ0FMX0xPT1BCQUNLX01PREUJCTB4ODAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfRTNfU0VMRUNUCQkJMHg0MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9JTlRFUk5BTF9MT1NfRU5BQkxFCQkweDIwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1JFU0VUCQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfSU5URVJSVVBUX0VOQUJMRV9SRVNFVAkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9GUkFNRV9GT1JNQVRfU0VMRUNUCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1RJTUlOR19BU1lOQ0hfVFhJTkNMSwkJMHgwMwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19HNzUxCQkJCTB4MDAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfRzgzMgkJCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX0NCSVQJCQkJMHg0MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19NMTMJCQkJMHg0NAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9MT09QQkFDS19PTgkJCTB4ODAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfTE9PUEJBQ0tfT0ZGCQkJMHgwMAotCi0vKiBJT19DT05UUk9MICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0RJU0FCTEVfVFhfTE9TU19PRl9DTE9DSwkJMHg4MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9MT1NTX09GX0NMT0NLX1NUQVRVUwkJMHg0MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9ESVNBQkxFX1JYX0xPU1NfT0ZfQ0xPQ0sJCTB4MjAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfQU1JX0xJTkVfQ09ERQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVU5JUE9MQVIJCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UWF9MSU5FX0NMT0NLX0lOVkVSVAkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9MSU5FX0NMT0NLX0lOVkVSVAkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SRUZSQU1FCQkJCTB4MDEKLQotLyogQkxPQ0tfSU5URVJSVVBUX0VOQUJMRSAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9JTlRFUlJVUFRfRU5BQkxFCQkweDgwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1RYX0lOVEVSUlVQVF9FTkFCTEUJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfT05FX1NFQ09ORF9JTlRFUlJVUFRfRU5BQkxFCTB4MDEKLQotLyogQkxPQ0tfSU5URVJSVVBUX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9JTlRFUlJVUFRfU1RBVFVTCQkweDgwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1RYX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfT05FX1NFQ09ORF9JTlRFUlJVUFRfU1RBVFVTCTB4MDEKLQotLyoqKioqKioqKiovCi0KLS8qIFQzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0FJUwkJCQkweDgwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0xPUwkJCQkweDQwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0lETEUJCQkJMHgyMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9PT0YJCQkJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GUkFNSU5HX09OX1BBUklUWQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GX1NZTkNfQUxHTwkJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfTV9TWU5DX0FMR08JCQkweDAxCi0KLS8qIFQzX1JYX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GRVJGCQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfQUlDCQkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfRkVCRQkJCQkweDA3Ci0KLS8qIFQzX1JYX0lOVEVSUlVQVF9FTkFCTEUgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfQ1BfQklUX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgMHg4MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9MT1NfSU5URVJSVVBUX0VOQUJMRQkJMHg0MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9BSVNfSU5URVJSVVBUX0VOQUJMRQkJMHgyMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9JRExFX0lOVEVSUlVQVF9FTkFCTEUJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GRVJGX0lOVEVSUlVQVF9FTkFCTEUJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9BSUNfSU5URVJSVVBUX0VOQUJMRQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9PT0ZfSU5URVJSVVBUX0VOQUJMRQkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9QX0JJVF9JTlRFUlJVUFRfRU5BQkxFCTB4MDEKLQotLyogVDNfUlhfSU5URVJSVVBUX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9DUF9CSVRfRVJST1JfSU5URVJSVVBUX1NUQVRVUyAweDgwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0xPU19JTlRFUlJVUFRfU1RBVFVTCQkweDQwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0FJU19JTlRFUlJVUFRfU1RBVFVTCQkweDIwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0lETEVfSU5URVJSVVBUX1NUQVRVUwkweDEwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0ZFUkZfSU5URVJSVVBUX1NUQVRVUwkweDA4Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0FJQ19JTlRFUlJVUFRfU1RBVFVTCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX09PRl9JTlRFUlJVUFRfU1RBVFVTCQkweDAyCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX1BfQklUX0lOVEVSUlVQVF9TVEFUVVMJMHgwMQotCi0vKiBUM19SWF9GRUFDX0lOVEVSUlVQVF9FTkFCTEVfU1RBVFVTICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0ZFQUNfVkFMSUQJCQkweDEwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0ZFQUNfUkVNT1ZFX0lOVEVSUlVQVF9FTkFCTEUJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GRUFDX1JFTU9WRV9JTlRFUlJVUFRfU1RBVFVTCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfRkVBQ19WQUxJRF9JTlRFUlJVUFRfRU5BQkxFCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfRkVBQ19WQUxJRF9JTlRFUlJVUFRfU1RBVFVTCTB4MDEKLQotLyogVDNfUlhfTEFQRF9DT05UUk9MICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0xBUERfRU5BQkxFCQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9MQVBEX0lOVEVSUlVQVF9FTkFCTEUJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9MQVBEX0lOVEVSUlVQVF9TVEFUVVMJMHgwMQotCi0vKiBUM19SWF9MQVBEX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9BQk9SVAkJCTB4NDAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfTEFQRF9UWVBFCQkJMHgzMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9DUl9UWVBFCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GQ1NfRVJST1IJCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0VORF9PRl9NRVNTQUdFCQkweDAyCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0ZMQUdfUFJFU0VOVAkJCTB4MDEKLQotLyogVDNfVFhfQ09ORklHVVJBVElPTiAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9ZRUxMT1dfQUxBUk0JCQkweDgwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1RYX1hfQklUCQkJMHg0MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9JRExFCQkJCTB4MjAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfQUlTCQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfTE9TCQkJCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfRkVSRl9PTl9MT1MJCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1RYX0ZFUkZfT05fT09GCQkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9GRVJGX09OX0FJUwkJCTB4MDEKLQotLyogVDNfVFhfRkVBQ19DT05GSUdVUkFUSU9OX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9GRUFDX0lOVEVSUlVQVF9FTkFCTEUJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9GRUFDX0lOVEVSUlVQVF9TVEFUVVMJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9GRUFDX0VOQUJMRQkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfRkVBQ19HTwkJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfRkVBQ19CVVNZCQkJMHgwMQotCi0vKiBUM19UWF9MQVBEX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19UWF9ETF9TVEFSVAkJCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfRExfQlVTWQkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfTEFQRF9JTlRFUlJVUFRfRU5BQkxFCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfVFhfTEFQRF9JTlRFUlJVUFRfU1RBVFVTCTB4MDEKLQotLyoqKioqKioqKiovCi0KLS8qIEUzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTXzEgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfUEFZTE9BRF9UWVBFCQkJMHhlMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9GRVJGX0FMR08JCQkweDEwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX1RfTUFSS19BTEdPCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9QQVlMT0FEX0VYUEVDVEVECQkweDA3Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0JJUDQJCQkJMHgwMQotCi0vKiBFM19SWF9DT05GSUdVUkFUSU9OX1NUQVRVU18yICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0xPRl9BTEdPCQkJMHg4MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MT0YJCQkJMHg0MAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9PT0YJCQkJMHgyMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MT1MJCQkJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9BSVMJCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9QQVlMT0FEX1VOU1RBQkxFCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX1RfTUFSSwkJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfRkVSRgkJCQkweDAxCi0KLS8qIEUzX1JYX0lOVEVSUlVQVF9FTkFCTEVfMSAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9DT0ZBX0lOVEVSUlVQVF9FTkFCTEUJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9PT0ZfSU5URVJSVVBUX0VOQUJMRQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MT0ZfSU5URVJSVVBUX0VOQUJMRQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MT1NfSU5URVJSVVBUX0VOQUJMRQkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9BSVNfSU5URVJSVVBUX0VOQUJMRQkJMHgwMQotCi0vKiBFM19SWF9JTlRFUlJVUFRfRU5BQkxFXzIgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfVFRCX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFCTB4NDAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfRkVCRV9JTlRFUlJVUFRfRU5BQkxFCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfRkVSRl9JTlRFUlJVUFRfRU5BQkxFCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfQklQOF9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfQklQNF9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfRlJBTUlOR19CWVRFX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9QQVlMT0FEX01JU01BVENIX0lOVEVSUlVQVF9FTkFCTEUgMHgwMQotCi0vKiBFM19SWF9JTlRFUlJVUFRfU1RBVFVTXzEgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfQ09GQV9JTlRFUlJVUFRfU1RBVFVTCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfT09GX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfTE9GX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfTE9TX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfQUlTX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDEKLQotLyogRTNfUlhfSU5URVJSVVBUX1NUQVRVU18yICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX1RUQl9DSEFOR0VfSU5URVJSVVBUX1NUQVRVUwkweDQwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0ZFQkVfSU5URVJSVVBUX1NUQVRVUwkweDEwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0ZFUkZfSU5URVJSVVBUX1NUQVRVUwkweDA4Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0JJUDhfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0JJUDRfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0ZSQU1JTkdfQllURV9FUlJPUl9JTlRFUlJVUFRfU1RBVFVTIDB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfUEFZTE9BRF9NSVNNQVRDSF9JTlRFUlJVUFRfU1RBVFVTIDB4MDEKLQotLyogRTNfUlhfTEFQRF9DT05UUk9MICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0RMX0ZST01fTlIJCQkweDA4Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0xBUERfRU5BQkxFCQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MQVBEX0lOVEVSUlVQVF9FTkFCTEUJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MQVBEX0lOVEVSUlVQVF9TVEFUVVMJMHgwMQotCi0vKiBFM19SWF9MQVBEX1NUQVRVUyAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9BQk9SVAkJCTB4NDAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfTEFQRF9UWVBFCQkJMHgzMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9DUl9UWVBFCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9GQ1NfRVJST1IJCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0VORF9PRl9NRVNTQUdFCQkweDAyCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0ZMQUdfUFJFU0VOVAkJCTB4MDEKLQotLyogRTNfVFhfQ09ORklHVVJBVElPTiAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9CSVA0X0VOQUJMRQkJCTB4ODAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfVFhfQV9TT1VSQ0VfU0VMRUNUCQkweDYwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1RYX0RMX0lOX05SCQkJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9OX1NPVVJDRV9TRUxFQ1QJCTB4MTgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfVFhfQUlTX0VOQUJMRQkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfVFhfTE9TX0VOQUJMRQkJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfVFhfTUFfUlgJCQkweDAxCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1RYX0ZBU19TT1VSQ0VfU0VMRUNUCQkweDAxCi0KLS8qIEUzX1RYX0xBUERfQ09ORklHVVJBVElPTiAqLwotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9BVVRPX1JFVFJBTlNNSVQJCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfVFhfTEFQRF9NRVNTQUdFX0xFTkdUSAkJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9MQVBEX0VOQUJMRQkJCTB4MDEKLQotLyogRTNfVFhfTEFQRF9TVEFUVVNfSU5URVJSVVBUICovCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1RYX0RMX1NUQVJUCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9ETF9CVVNZCQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9MQVBEX0lOVEVSUlVQVF9FTkFCTEUJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19UWF9MQVBEX0lOVEVSUlVQVF9TVEFUVVMJMHgwMQotCi0KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgTElVCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHJlZ19tYXAgaW5kZXhlcyAqLwotI2RlZmluZSBTQkVfMlQzRTNfTElVX1JFR19SRUcwCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1JFR19SRUcxCQkJMQotI2RlZmluZSBTQkVfMlQzRTNfTElVX1JFR19SRUcyCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfTElVX1JFR19SRUczCQkJMwotI2RlZmluZSBTQkVfMlQzRTNfTElVX1JFR19SRUc0CQkJNAotCi0jZGVmaW5lCVNCRV8yVDNFM19MSVVfUkVHX01BWAkJCTUKLQotLyoqKioqKioqKiovCi0KLS8qIFJFRzAgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfUkVDRUlWRV9MT1NTX09GX0xPQ0tfU1RBVFVTCQkweDEwCi0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX1JFQ0VJVkVfTE9TU19PRl9TSUdOQUxfU1RBVFVTCQkweDA4Ci0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX0FOQUxPR19MT1NTX09GX1NJR05BTF9TVEFUVVMJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfRElHSVRBTF9MT1NTX09GX1NJR05BTF9TVEFUVVMJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfRE1PX1NUQVRVUwkJCQkweDAxCi0KLS8qIFJFRzEgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfVFJBTlNNSVRURVJfT0ZGCQkJMHgxMAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9UUkFOU01JVF9BTExfT05FUwkJCTB4MDgKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfVFJBTlNNSVRfQ0xPQ0tfSU5WRVJUCQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9UUkFOU01JVF9MRVZFTF9TRUxFQ1QJCQkweDAyCi0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX1RSQU5TTUlUX0JJTkFSWV9EQVRBCQkJMHgwMQotCi0vKiBSRUcyICovCi0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX0RFQ09ERVJfRElTQUJMRQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfRU5DT0RFUl9ESVNBQkxFCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9BTkFMT0dfTE9TU19PRl9TSUdOQUxfRElTQUJMRQkJMHgwNAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9ESUdJVEFMX0xPU1NfT0ZfU0lHTkFMX0RJU0FCTEUJMHgwMgotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9SRUNFSVZFX0VRVUFMSVpBVElPTl9ESVNBQkxFCQkweDAxCi0KLS8qIFJFRzMgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfUkVDRUlWRV9CSU5BUllfREFUQQkJCTB4MTAKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfUkVDT1ZFUkVEX0RBVEFfTVVUSU5HCQkJMHgwOAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9SRUNFSVZFX0NMT0NLX09VVFBVVF8yCQkweDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX0lOVkVSVF9SRUNFSVZFX0NMT0NLXzIJCTB4MDIKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfSU5WRVJUX1JFQ0VJVkVfQ0xPQ0tfMQkJMHgwMQotCi0vKiBSRUc0ICovCi0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX1QzX01PREVfU0VMRUNUCQkJMHgwMAotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9FM19NT0RFX1NFTEVDVAkJCTB4MDQKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfTE9DQUxfTE9PUEJBQ0sJCQkweDAyCi0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX1JFTU9URV9MT09QQkFDSwkJCTB4MDEKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfTE9PUEJBQ0tfT0ZGCQkJCTB4MDAKLSNkZWZpbmUgU0JFXzJUM0UzX0xJVV9WQUxfTE9PUEJBQ0tfUkVNT1RFCQkJMHgwMQotI2RlZmluZSBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19BTkFMT0cJCQkweDAyCi0jZGVmaW5lIFNCRV8yVDNFM19MSVVfVkFMX0xPT1BCQUNLX0RJR0lUQUwJCQkweDAzCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogZGVzY3JpcHRvciBsaXN0IGFuZCBkYXRhIGJ1ZmZlcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHQzZTNfcnhfZGVzYyB7Ci0JdTMyIHJkZXMwOwotCXUzMiByZGVzMTsKLQl1MzIgcmRlczI7Ci0JdTMyIHJkZXMzOwotfTsKLQotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19SSU5HX1NJWkUJCQk2NAotCi0vKiBSREVTMCAqLwotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ18yMTE0M19PV04JCQkwWDgwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX0ZSQU1FX0xFTkdUSAkJCTB4M2ZmZjAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzX1JYX0RFU0NfRlJBTUVfTEVOR1RIX1NISUZUCQkxNgotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19FUlJPUl9TVU1NQVJZCQkJMHgwMDAwODAwMAotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19ERVNDX0VSUk9SCQkJMHgwMDAwNDAwMAotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19EQVRBX1RZUEUJCQkweDAwMDAzMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX1JVTlRfRlJBTUUJCQkweDAwMDAwODAwCi0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX0ZJUlNUX0RFU0MJCQkweDAwMDAwMjAwCi0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX0xBU1RfREVTQwkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgU0JFXzJUM0UzX1JYX0RFU0NfRlJBTUVfVE9PX0xPTkcJCTB4MDAwMDAwODAKLSNkZWZpbmUgU0JFXzJUM0UzX1JYX0RFU0NfQ09MTElTSU9OX1NFRU4JCTB4MDAwMDAwNDAKLSNkZWZpbmUgU0JFXzJUM0UzX1JYX0RFU0NfRlJBTUVfVFlQRQkJCTB4MDAwMDAwMjAKLSNkZWZpbmUgU0JFXzJUM0UzX1JYX0RFU0NfUkVDRUlWRV9XQVRDSERPRwkJMHgwMDAwMDAxMAotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19NSUlfRVJST1IJCQkweDAwMDAwMDA4Ci0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX0RSSUJCTElOR19CSVQJCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX0NSQ19FUlJPUgkJCTB4MDAwMDAwMDIKLQotLyogUkRFUzEgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX1JYX0RFU0NfRU5EX09GX1JJTkcJCQkweDAyMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19SWF9ERVNDX1NFQ09ORF9BRERSRVNTX0NIQUlORUQJMHgwMTAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19CVUZGRVJfMl9TSVpFCQkJMHgwMDNmZjgwMAotI2RlZmluZSBTQkVfMlQzRTNfUlhfREVTQ19CVUZGRVJfMV9TSVpFCQkJMHgwMDAwMDdmZgotCi0vKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgdDNlM190eF9kZXNjIHsKLQl1MzIgdGRlczA7Ci0JdTMyIHRkZXMxOwotCXUzMiB0ZGVzMjsKLQl1MzIgdGRlczM7Ci19OwotCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX1JJTkdfU0laRQkJCTI1NgotCi0vKiBUREVTMCAqLwotI2RlZmluZSBTQkVfMlQzRTNfVFhfREVTQ18yMTE0M19PV04JCQkweDgwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0VSUk9SX1NVTU1BUlkJCQkweDAwMDA4MDAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX1RSQU5TTUlUX0pBQkJFUl9USU1FT1VUCTB4MDAwMDQwMDAKLSNkZWZpbmUgU0JFXzJUM0UzX1RYX0RFU0NfTE9TU19PRl9DQVJSSUVSCQkweDAwMDAwODAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX05PX0NBUlJJRVIJCQkweDAwMDAwNDAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0xJTktfRkFJTF9SRVBPUlQJCTB4MDAwMDAwMDQKLSNkZWZpbmUgU0JFXzJUM0UzX1RYX0RFU0NfVU5ERVJGTE9XX0VSUk9SCQkweDAwMDAwMDAyCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0RFRkZFUkVECQkJMHgwMDAwMDAwMQotCi0vKiBUREVTMSAqLwotI2RlZmluZSBTQkVfMlQzRTNfVFhfREVTQ19JTlRFUlJVUFRfT05fQ09NUExFVElPTgkweDgwMDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0xBU1RfU0VHTUVOVAkJCTB4NDAwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzX1RYX0RFU0NfRklSU1RfU0VHTUVOVAkJCTB4MjAwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzX1RYX0RFU0NfQ1JDX0RJU0FCTEUJCQkweDA0MDAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0VORF9PRl9SSU5HCQkJMHgwMjAwMDAwMAotI2RlZmluZSBTQkVfMlQzRTNfVFhfREVTQ19TRUNPTkRfQUREUkVTU19DSEFJTkVECTB4MDEwMDAwMDAKLSNkZWZpbmUgU0JFXzJUM0UzX1RYX0RFU0NfRElTQUJMRV9QQURESU5HCQkweDAwODAwMDAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0JVRkZFUl8yX1NJWkUJCQkweDAwM2ZmODAwCi0jZGVmaW5lIFNCRV8yVDNFM19UWF9ERVNDX0JVRkZFUl8xX1NJWkUJCQkweDAwMDAwN2ZmCi0KLQotI2RlZmluZSBTQkVfMlQzRTNfTVRVCQkJCQkxNjAwCi0jZGVmaW5lIFNCRV8yVDNFM19DUkMxNl9MRU5HVEgJCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfQ1JDMzJfTEVOR1RICQkJCTQKLQotI2RlZmluZSBNQ0xCWVRFUyAoU0JFXzJUM0UzX01UVSArIDEyOCkKLQotc3RydWN0IGNoYW5uZWwgewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGNhcmQgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwkvKiBERUNjaGlwICovCi0KLQlpbnQgbGVkczsKLQotCS8qIHBjaSBzcGVjaWZpYyAqLwotCXN0cnVjdCB7Ci0JCXUzMiBzbG90OyAgICAgICAgICAgLyogc2hvdWxkIGJlIDAgb3IgMSAqLwotCQl1MzIgY29tbWFuZDsKLQkJdTggY2FjaGVfc2l6ZTsKLQl9IGg7Ci0KLQkvKiBzdGF0aXN0aWNzICovCi0Jc3RydWN0IHQzZTNfc3RhdHMgczsKLQotCS8qIHJ1bm5pbmcgKi8KLQlzdHJ1Y3QgewotCQl1MzIgZmxhZ3M7Ci0JfSByOwotCi0JLyogcGFyYW1ldGVycyAqLwotCXN0cnVjdCB0M2UzX3BhcmFtIHA7Ci0KLQl1MzIgbGl1X3JlZ3NbU0JFXzJUM0UzX0xJVV9SRUdfTUFYXTsJICAgLyogTElVIHJlZ2lzdGVycyAqLwotCXUzMiBmcmFtZXJfcmVnc1tTQkVfMlQzRTNfRlJBTUVSX1JFR19NQVhdOyAvKiBGcmFtZXIgcmVnaXN0ZXJzICovCi0KLQkvKiBFdGhlcm5ldCBDb250cm9sbGVyICovCi0Jc3RydWN0IHsKLQkJdV9pbnQxNl90IGNhcmRfc2VyaWFsX251bWJlclszXTsKLQotCQl1MzIgcmVnW1NCRV8yVDNFM18yMTE0M19SRUdfTUFYXTsgLyogcmVnaXN0ZXJzIGkuZS4gQ1NSICovCi0KLQkJdTMyIGludGVycnVwdF9lbmFibGVfbWFzazsKLQotCQkvKiByZWNlaXZlIGNoYWluL3JpbmcgKi8KLQkJc3RydWN0IHQzZTNfcnhfZGVzYyAqcnhfcmluZzsKLQkJc3RydWN0IHNrX2J1ZmYgKnJ4X2RhdGFbU0JFXzJUM0UzX1JYX0RFU0NfUklOR19TSVpFXTsKLQkJdTMyIHJ4X3JpbmdfY3VycmVudF9yZWFkOwotCi0JCS8qIHRyYW5zbWl0IGNoYWluL3JpbmcgKi8KLQkJc3RydWN0IHQzZTNfdHhfZGVzYyAqdHhfcmluZzsKLQkJc3RydWN0IHNrX2J1ZmYgKnR4X2RhdGFbU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFXTsKLQkJdTMyIHR4X3JpbmdfY3VycmVudF9yZWFkOwotCQl1MzIgdHhfcmluZ19jdXJyZW50X3dyaXRlOwotCQlpbnQgdHhfZnVsbDsKLQkJaW50IHR4X2ZyZWVfY250OwotCQlzcGlubG9ja190IHR4X2xvY2s7Ci0JfSBldGhlcjsKLQotCWludDMyX3QgaW50ZXJydXB0X2FjdGl2ZTsKLQlpbnQzMl90IHJjdl9jb3VudDsKLX07Ci0KLXN0cnVjdCBjYXJkIHsKLQlzcGlubG9ja190IGJvb3Ryb21fbG9jazsKLQl1bnNpZ25lZCBsb25nIGJvb3Ryb21fYWRkcjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsgLyogZm9yIHVwZGF0aW5nIExFRHMgKi8KLQlzdHJ1Y3QgY2hhbm5lbCBjaGFubmVsc1swXTsKLX07Ci0KLSNkZWZpbmUgU0JFXzJUM0UzX0ZMQUdfTkVUV09SS19VUAkJMHgwMDAwMDAwMQotI2RlZmluZSBTQkVfMlQzRTNfRkxBR19OT19FUlJPUl9NRVNTQUdFUwkweDAwMDAwMDAyCi0KLWV4dGVybiBjb25zdCB1MzIgY3BsZF9yZWdfbWFwW11bMl07Ci1leHRlcm4gY29uc3QgdTMyIGNwbGRfdmFsX21hcFtdWzJdOwotZXh0ZXJuIGNvbnN0IHUzMiB0M2UzX2ZyYW1lcl9yZWdfbWFwW107Ci1leHRlcm4gY29uc3QgdTMyIHQzZTNfbGl1X3JlZ19tYXBbXTsKLQotdm9pZCB0M2UzX2luaXQoc3RydWN0IGNoYW5uZWwgKik7Ci12b2lkIHQzZTNfaWZfdXAoc3RydWN0IGNoYW5uZWwgKik7Ci12b2lkIHQzZTNfaWZfZG93bihzdHJ1Y3QgY2hhbm5lbCAqKTsKLWludCB0M2UzX2lmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIHQzZTNfaWZfY29uZmlnKHN0cnVjdCBjaGFubmVsICosIHUzMiwgY2hhciAqLCBzdHJ1Y3QgdDNlM19yZXNwICosIGludCAqKTsKLXZvaWQgdDNlM19zZXRfZnJhbWVfdHlwZShzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdTMyIHQzZTNfZWVwcm9tX3JlYWRfd29yZChzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCB0M2UzX3JlYWRfY2FyZF9zZXJpYWxfbnVtYmVyKHN0cnVjdCBjaGFubmVsICopOwotCi0vKiBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLWlycXJldHVybl90IHQzZTNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwotdm9pZCBkY19pbnRyKHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19pbnRyX3J4KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19pbnRyX3R4KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19pbnRyX3R4X3VuZGVyZmxvdyhzdHJ1Y3QgY2hhbm5lbCAqKTsKLXZvaWQgZXhhcjcyNTBfaW50cihzdHJ1Y3QgY2hhbm5lbCAqKTsKLXZvaWQgZXhhcjcyNTBfRTNfaW50cihzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCBleGFyNzI1MF9UM19pbnRyKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci0KLS8qIEV0aGVybmV0IGNvbnRyb2xsZXIgKi8KLXUzMiBib290cm9tX3JlYWQoc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgYm9vdHJvbV93cml0ZShzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIsIHUzMik7Ci12b2lkIGRjX2luaXQoc3RydWN0IGNoYW5uZWwgKik7Ci12b2lkIGRjX3N0YXJ0KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19zdG9wKHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19zdGFydF9pbnRyKHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19zdG9wX2ludHIoc3RydWN0IGNoYW5uZWwgKik7Ci12b2lkIGRjX3Jlc2V0KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19yZXN0YXJ0KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19yZWNlaXZlcl9vbm9mZihzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCBkY190cmFuc21pdHRlcl9vbm9mZihzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCBkY19zZXRfbG9vcGJhY2soc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgZGNfY2xlYXJfZGVzY3JpcHRvcl9saXN0KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBkY19kcm9wX2Rlc2NyaXB0b3JfbGlzdChzdHJ1Y3QgY2hhbm5lbCAqKTsKLXZvaWQgZGNfc2V0X291dHB1dF9wb3J0KHN0cnVjdCBjaGFubmVsICopOwotdm9pZCB0M2UzX3NjX2luaXQoc3RydWN0IGNoYW5uZWwgKik7Ci0KLS8qIENQTEQgKi8KLXZvaWQgY3BsZF9pbml0KHN0cnVjdCBjaGFubmVsICpzYyk7Ci11MzIgY3BsZF9yZWFkKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIHJlZyk7Ci12b2lkIGNwbGRfc2V0X2NyYyhzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCBjcGxkX3N0YXJ0X2ludHIoc3RydWN0IGNoYW5uZWwgKik7Ci12b2lkIGNwbGRfc3RvcF9pbnRyKHN0cnVjdCBjaGFubmVsICopOwotdm9pZCBjcGxkX3NldF9jbG9jayhzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBtb2RlKTsKLXZvaWQgY3BsZF9zZXRfc2NyYW1ibGVyKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGNwbGRfc2VsZWN0X3BhbmVsKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGNwbGRfc2V0X2ZyYW1lX21vZGUoc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgY3BsZF9zZXRfZnJhbWVfdHlwZShzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCBjcGxkX3NldF9wYWRfY291bnQoc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgY3BsZF9zZXRfZnJhY3Rpb25hbF9tb2RlKHN0cnVjdCBjaGFubmVsICosIHUzMiwgdTMyLCB1MzIpOwotdm9pZCBjcGxkX0xPU191cGRhdGUoc3RydWN0IGNoYW5uZWwgKik7Ci0KLS8qIEZyYW1lciAqLwotZXh0ZXJuIHUzMiBleGFyNzI1MF9yZWFkKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci1leHRlcm4gdm9pZCBleGFyNzI1MF93cml0ZShzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIsIHUzMik7Ci12b2lkIGV4YXI3MjUwX2luaXQoc3RydWN0IGNoYW5uZWwgKik7Ci12b2lkIGV4YXI3MjUwX3N0YXJ0X2ludHIoc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgZXhhcjcyNTBfc3RvcF9pbnRyKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGV4YXI3MjUwX3NldF9mcmFtZV90eXBlKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGV4YXI3MjUwX3NldF9sb29wYmFjayhzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotdm9pZCBleGFyNzI1MF91bmlwb2xhcl9vbm9mZihzdHJ1Y3QgY2hhbm5lbCAqLCB1MzIpOwotCi0vKiBMSVUgKi8KLXUzMiBleGFyNzMwMF9yZWFkKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGV4YXI3MzAwX3dyaXRlKHN0cnVjdCBjaGFubmVsICosIHUzMiwgdTMyKTsKLXZvaWQgZXhhcjczMDBfaW5pdChzdHJ1Y3QgY2hhbm5lbCAqKTsKLXZvaWQgZXhhcjczMDBfbGluZV9idWlsZF9vdXRfb25vZmYoc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgZXhhcjczMDBfc2V0X2ZyYW1lX3R5cGUoc3RydWN0IGNoYW5uZWwgKiwgdTMyKTsKLXZvaWQgZXhhcjczMDBfc2V0X2xvb3BiYWNrKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGV4YXI3MzAwX3RyYW5zbWl0X2FsbF9vbmVzX29ub2ZmKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGV4YXI3MzAwX3JlY2VpdmVfZXF1YWxpemF0aW9uX29ub2ZmKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci12b2lkIGV4YXI3MzAwX3VuaXBvbGFyX29ub2ZmKHN0cnVjdCBjaGFubmVsICosIHUzMik7Ci0KLXZvaWQgdXBkYXRlX2xlZChzdHJ1Y3QgY2hhbm5lbCAqLCBpbnQpOwotaW50IHNldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2hhbm5lbCAqc2MpOwotCi1zdGF0aWMgaW5saW5lIGludCBoYXNfdHdvX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXJldHVybiBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9TVUJERVZJQ0VfSURfU0JFXzJUM0UzX1AwOwotfQotCi0jZGVmaW5lIGRldl90b19wcml2KGRldikgKCooc3RydWN0IGNoYW5uZWwgKiopICgoaGRsY19kZXZpY2UgKikoZGV2KSArIDEpKQotCi1zdGF0aWMgaW5saW5lIHUzMiBkY19yZWFkKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHJlZykKLXsKLQlyZXR1cm4gaW5sKGFkZHIgKyAocmVnIDw8IDMpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRjX3dyaXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlvdXRsKHZhbCwgYWRkciArIChyZWcgPDwgMykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNfc2V0X2JpdHModW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgcmVnLCB1MzIgYml0cykKLXsKLQlkY193cml0ZShhZGRyLCByZWcsIGRjX3JlYWQoYWRkciwgcmVnKSB8IGJpdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNfY2xlYXJfYml0cyh1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiByZWcsIHUzMiBiaXRzKQotewotCWRjX3dyaXRlKGFkZHIsIHJlZywgZGNfcmVhZChhZGRyLCByZWcpICYgfmJpdHMpOwotfQotCi0jZGVmaW5lIENQTERfTUFQX1JFRyhyZWcsIHNjKQkoY3BsZF9yZWdfbWFwWyhyZWcpXVsoc2MpLT5oLnNsb3RdKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3BsZF93cml0ZShzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgcmVnLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fbG9jaywgZmxhZ3MpOwotCWJvb3Ryb21fd3JpdGUoY2hhbm5lbCwgQ1BMRF9NQVBfUkVHKHJlZywgY2hhbm5lbCksIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci19Ci0KLSNkZWZpbmUgZXhhcjcyNTBfc2V0X2JpdChzYywgcmVnLCBiaXQpCQkJXAotCWV4YXI3MjUwX3dyaXRlKChzYyksIChyZWcpLAkJCVwKLQkJICAgICAgIGV4YXI3MjUwX3JlYWQoc2MsIHJlZykgfCAoYml0KSkKLQotI2RlZmluZSBleGFyNzI1MF9jbGVhcl9iaXQoc2MsIHJlZywgYml0KQkJXAotCWV4YXI3MjUwX3dyaXRlKChzYyksIChyZWcpLAkJCVwKLQkJICAgICAgIGV4YXI3MjUwX3JlYWQoc2MsIHJlZykgJiB+KGJpdCkpCi0KLSNkZWZpbmUgZXhhcjczMDBfc2V0X2JpdChzYywgcmVnLCBiaXQpCQkJXAotCWV4YXI3MzAwX3dyaXRlKChzYyksIChyZWcpLAkJCVwKLQkJICAgICAgIGV4YXI3MzAwX3JlYWQoc2MsIHJlZykgfCAoYml0KSkKLQotI2RlZmluZSBleGFyNzMwMF9jbGVhcl9iaXQoc2MsIHJlZywgYml0KQkJXAotCWV4YXI3MzAwX3dyaXRlKChzYyksIChyZWcpLAkJCVwKLQkJICAgICAgIGV4YXI3MzAwX3JlYWQoc2MsIHJlZykgJiB+KGJpdCkpCi0KLQotI2VuZGlmIC8qIFQzRTNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWM4NmNmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1jb25maWcgU0JFXzJUM0UzCi0JdHJpc3RhdGUgIlNCRSB3YW5QTUMtMlQzRTMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEhETEMgJiYgUENJCi0JaGVscAotCSAgRHJpdmVyIGZvciB3YW5QTUMtMlQzRTMgY2FyZHMgYnkgU0JFIEluYy4KLQotCSAgSWYgeW91IGhhdmUgc3VjaCBhIGNhcmQsIHNheSBZIGhlcmUgYW5kIHNlZQotCSAgPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2hkbGMvPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYmUtMnQzZTMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlMmE3YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1vYmotJChDT05GSUdfU0JFXzJUM0UzKSArPSBzYmUtMnQzZTMubwotCi1zYmUtMnQzZTMteSA6PSBtb2R1bGUubyBuZXRkZXYubyBtYXBzLm8JXAotCW1haW4ubyBjcGxkLm8gaW50ci5vIGN0cmwubyBpby5vIGRjLm8gZXhhcjcyNTAubyBleGFyNzMwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNGIyMGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1UT0RPOgotCS0gYWRkaXRpb25hbCBjbGVhbmluZyBhbmQgdGVzdHMKLQktIHdhaXQgZm9yIHRoZSBuZXcgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgaW4gZ2VuZXJpYyBIRExDIGxheWVyIGFuZAotCSAgd2hlbiBhdmFpbGFibGUsIGNvbnZlcnQgdGhlIGRyaXZlciB0byBpdAotCi1QbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvY3BsZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9jcGxkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MzcwZDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9jcGxkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTEgKzAsMCBAQAotLyoKLSAqIFNCRSAyVDNFMyBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZCBkcml2ZXIgZm9yIExpbnV4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBhIGRyaXZlciB3cml0dGVuIGJ5IFNCRSBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiMnQzZTMuaCIKLSNpbmNsdWRlICJjdHJsLmgiCi0KLSNkZWZpbmUgYm9vdHJvbV9zZXRfYml0KHNjLCByZWcsIGJpdCkJCQkJXAotCWJvb3Ryb21fd3JpdGUoKHNjKSwgKHJlZyksCQkJCVwKLQkJICAgICAgYm9vdHJvbV9yZWFkKChzYyksIChyZWcpKSB8IChiaXQpKQotCi0jZGVmaW5lIGJvb3Ryb21fY2xlYXJfYml0KHNjLCByZWcsIGJpdCkJCQkJXAotCWJvb3Ryb21fd3JpdGUoKHNjKSwgKHJlZyksCQkJCVwKLQkJICAgICAgYm9vdHJvbV9yZWFkKChzYyksIChyZWcpKSAmIH4oYml0KSkKLQotc3RhdGljIGlubGluZSB2b2lkIGNwbGRfc2V0X2JpdChzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgcmVnLCB1MzIgYml0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fbG9jaywgZmxhZ3MpOwotCWJvb3Ryb21fc2V0X2JpdChjaGFubmVsLCBDUExEX01BUF9SRUcocmVnLCBjaGFubmVsKSwgYml0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5jYXJkLT5ib290cm9tX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNwbGRfY2xlYXJfYml0KHN0cnVjdCBjaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCByZWcsIHUzMiBiaXQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci0JYm9vdHJvbV9jbGVhcl9iaXQoY2hhbm5lbCwgQ1BMRF9NQVBfUkVHKHJlZywgY2hhbm5lbCksIGJpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgY3BsZF9pbml0KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgdmFsOwotCi0JLyogUENSQSAqLwotCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9DUkMzMiB8Ci0JCWNwbGRfdmFsX21hcFtTQkVfMlQzRTNfQ1BMRF9WQUxfTE9PUF9USU1JTkdfU09VUkNFXVtzYy0+aC5zbG90XTsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQSwgdmFsKTsKLQotCS8qIFBDUkIgKi8KLQl2YWwgPSAwOwotCWNwbGRfd3JpdGUoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QQ1JCLCB2YWwpOwotCi0JLyogUENSQyAqLwotCXZhbCA9IDA7Ci0JY3BsZF93cml0ZShzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkMsIHZhbCk7Ci0KLQkvKiBQQldGICovCi0JdmFsID0gMDsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUEJXRiwgdmFsKTsKLQotCS8qIFBCV0wgKi8KLQl2YWwgPSAwOwotCWNwbGRfd3JpdGUoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QQldMLCB2YWwpOwotCi0JLyogUExUUiAqLwotCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9MQ1ZfQ09VTlRFUjsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUExUUiwgdmFsKTsKLQl1ZGVsYXkoMTAwMCk7Ci0KLQkvKiBQTENSICovCi0JdmFsID0gMDsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUExDUiwgdmFsKTsKLQl1ZGVsYXkoMTAwMCk7Ci0KLQkvKiBQUEZSICovCi0JdmFsID0gMHg1NTsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUFBGUiwgdmFsKTsKLQkvKiBUT0RPOiB0aGlzIGRvZXNuJ3Qgd29yayEhISAqLwotCi0JLyogU0VSSUFMX0NISVBfU0VMRUNUICovCi0JdmFsID0gMDsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfU0VSSUFMX0NISVBfU0VMRUNULCB2YWwpOwotCi0JLyogUElDU1IgKi8KLQl2YWwgPSBTQkVfMlQzRTNfQ1BMRF9WQUxfRE1PX1NJR05BTF9ERVRFQ1RFRCB8Ci0JCVNCRV8yVDNFM19DUExEX1ZBTF9SRUNFSVZFX0xPU1NfT0ZfTE9DS19ERVRFQ1RFRCB8Ci0JCVNCRV8yVDNFM19DUExEX1ZBTF9SRUNFSVZFX0xPU1NfT0ZfU0lHTkFMX0RFVEVDVEVEOwotCWNwbGRfd3JpdGUoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QSUNTUiwgdmFsKTsKLQotCWNwbGRfc3RhcnRfaW50cihzYyk7Ci0KLQl1ZGVsYXkoMTAwMCk7Ci19Ci0KLXZvaWQgY3BsZF9zdGFydF9pbnRyKHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgdmFsOwotCi0JLyogUElFUiAqLwotCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9JTlRFUlJVUFRfRlJPTV9FVEhFUk5FVF9FTkFCTEUgfAotCQlTQkVfMlQzRTNfQ1BMRF9WQUxfSU5URVJSVVBUX0ZST01fRlJBTUVSX0VOQUJMRTsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUElFUiwgdmFsKTsKLX0KLQotdm9pZCBjcGxkX3N0b3BfaW50cihzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JdTMyIHZhbDsKLQotCS8qIFBJRVIgKi8KLQl2YWwgPSAwOwotCWNwbGRfd3JpdGUoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QSUVSLCB2YWwpOwotfQotCi12b2lkIGNwbGRfc2V0X2ZyYW1lX21vZGUoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgbW9kZSkKLXsKLQlpZiAoc2MtPnAuZnJhbWVfbW9kZSA9PSBtb2RlKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9NT0RFX0hETEM6Ci0JCWNwbGRfY2xlYXJfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQSwKLQkJCSAgICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfVFJBTlNQQVJFTlRfTU9ERSB8Ci0JCQkgICAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1JBV19NT0RFKTsKLQkJZXhhcjcyNTBfdW5pcG9sYXJfb25vZmYoc2MsIFNCRV8yVDNFM19PRkYpOwotCQlleGFyNzMwMF91bmlwb2xhcl9vbm9mZihzYywgU0JFXzJUM0UzX09GRik7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX01PREVfVFJBTlNQQVJFTlQ6Ci0JCWNwbGRfY2xlYXJfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQSwKLQkJCSAgICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfUkFXX01PREUpOwotCQljcGxkX3NldF9iaXQoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QQ1JBLAotCQkJICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfVFJBTlNQQVJFTlRfTU9ERSk7Ci0JCWV4YXI3MjUwX3VuaXBvbGFyX29ub2ZmKHNjLCBTQkVfMlQzRTNfT0ZGKTsKLQkJZXhhcjczMDBfdW5pcG9sYXJfb25vZmYoc2MsIFNCRV8yVDNFM19PRkYpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9NT0RFX1JBVzoKLQkJY3BsZF9zZXRfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQSwKLQkJCSAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1JBV19NT0RFKTsKLQkJZXhhcjcyNTBfdW5pcG9sYXJfb25vZmYoc2MsIFNCRV8yVDNFM19PTik7Ci0JCWV4YXI3MzAwX3VuaXBvbGFyX29ub2ZmKHNjLCBTQkVfMlQzRTNfT04pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0Jc2MtPnAuZnJhbWVfbW9kZSA9IG1vZGU7Ci19Ci0KLS8qIHNldCByYXRlIG9mIHRoZSBsb2NhbCBjbG9jayAqLwotdm9pZCBjcGxkX3NldF9mcmFtZV90eXBlKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIHR5cGUpCi17Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HNzUxOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzgzMjoKLQkJY3BsZF9zZXRfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQSwKLQkJCSAgICAgU0JFXzJUM0UzX0NQTERfVkFMX0xPQ0FMX0NMT0NLX0UzKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9UM19DQklUOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfTTEzOgotCQljcGxkX2NsZWFyX2JpdChzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkEsCi0JCQkgICAgICAgU0JFXzJUM0UzX0NQTERfVkFMX0xPQ0FMX0NMT0NLX0UzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLX0KLQotdm9pZCBjcGxkX3NldF9zY3JhbWJsZXIoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgbW9kZSkKLXsKLQlpZiAoc2MtPnAuc2NyYW1ibGVyID09IG1vZGUpCi0JCXJldHVybjsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgU0JFXzJUM0UzX1NDUkFNQkxFUl9PRkY6Ci0JCWNwbGRfY2xlYXJfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQiwKLQkJCSAgICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfU0NSQU1CTEVSX0VOQUJMRSk7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX1NDUkFNQkxFUl9MQVJTQ09NOgotCQljcGxkX2NsZWFyX2JpdChzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkIsCi0JCQkgICAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1NDUkFNQkxFUl9UWVBFKTsKLQkJY3BsZF9zZXRfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQiwKLQkJCSAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1NDUkFNQkxFUl9FTkFCTEUpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19TQ1JBTUJMRVJfQURDX0tFTlRST1hfRElHSVRBTDoKLQkJY3BsZF9zZXRfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQiwKLQkJCSAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1NDUkFNQkxFUl9UWVBFKTsKLQkJY3BsZF9zZXRfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQiwKLQkJCSAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1NDUkFNQkxFUl9FTkFCTEUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0Jc2MtPnAuc2NyYW1ibGVyID0gbW9kZTsKLX0KLQotCi12b2lkIGNwbGRfc2V0X2NyYyhzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBjcmMpCi17Ci0JaWYgKHNjLT5wLmNyYyA9PSBjcmMpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoY3JjKSB7Ci0JY2FzZSBTQkVfMlQzRTNfQ1JDXzE2OgotCQljcGxkX2NsZWFyX2JpdChzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkEsCi0JCQkgICAgICAgU0JFXzJUM0UzX0NQTERfVkFMX0NSQzMyKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfQ1JDXzMyOgotCQljcGxkX3NldF9iaXQoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QQ1JBLAotCQkJICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfQ1JDMzIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0Jc2MtPnAuY3JjID0gY3JjOwotfQotCi0KLXZvaWQgY3BsZF9zZWxlY3RfcGFuZWwoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgcGFuZWwpCi17Ci0JaWYgKHNjLT5wLnBhbmVsID09IHBhbmVsKQotCQlyZXR1cm47Ci0Jc3dpdGNoIChwYW5lbCkgewotCWNhc2UgU0JFXzJUM0UzX1BBTkVMX0ZST05UOgotCQljcGxkX2NsZWFyX2JpdChzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkEsCi0JCQkgICAgICAgU0JFXzJUM0UzX0NQTERfVkFMX1JFQVJfUEFORUwpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19QQU5FTF9SRUFSOgotCQljcGxkX3NldF9iaXQoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QQ1JBLAotCQkJICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfUkVBUl9QQU5FTCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQl1ZGVsYXkoMTAwKTsKLQotCXNjLT5wLnBhbmVsID0gcGFuZWw7Ci19Ci0KLQotdm9pZCBjcGxkX3NldF9jbG9jayhzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBtb2RlKQotewotCWlmIChzYy0+cC5jbG9ja19zb3VyY2UgPT0gbW9kZSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfVElNSU5HX0xPQ0FMOgotCQljcGxkX3NldF9iaXQoc2MsIFNCRV8yVDNFM19DUExEX1JFR19QQ1JBLAotCQkJICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfQUxUKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfVElNSU5HX0xPT1A6Ci0JCWNwbGRfY2xlYXJfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQSwKLQkJCSAgICAgICBTQkVfMlQzRTNfQ1BMRF9WQUxfQUxUKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXNjLT5wLmNsb2NrX3NvdXJjZSA9IG1vZGU7Ci19Ci0KLXZvaWQgY3BsZF9zZXRfcGFkX2NvdW50KHN0cnVjdCBjaGFubmVsICpzYywgdTMyIGNvdW50KQotewotCXUzMiB2YWw7Ci0KLQlpZiAoc2MtPnAucGFkX2NvdW50ID09IGNvdW50KQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGNvdW50KSB7Ci0JY2FzZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzE6Ci0JCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfMTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzI6Ci0JCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfMjsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzM6Ci0JCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfMzsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzQ6Ci0JCXZhbCA9IFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlRfNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCWNwbGRfY2xlYXJfYml0KHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUENSQiwKLQkJICAgICAgIFNCRV8yVDNFM19DUExEX1ZBTF9QQURfQ09VTlQpOwotCWNwbGRfc2V0X2JpdChzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkIsIHZhbCk7Ci0Jc2MtPnAucGFkX2NvdW50ID0gY291bnQ7Ci19Ci0KLXZvaWQgY3BsZF9MT1NfdXBkYXRlKHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1X2ludDhfdCBsb3M7Ci0KLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUElDU1IsCi0JCSAgIFNCRV8yVDNFM19DUExEX1ZBTF9ETU9fU0lHTkFMX0RFVEVDVEVEIHwKLQkJICAgU0JFXzJUM0UzX0NQTERfVkFMX1JFQ0VJVkVfTE9TU19PRl9MT0NLX0RFVEVDVEVEIHwKLQkJICAgU0JFXzJUM0UzX0NQTERfVkFMX1JFQ0VJVkVfTE9TU19PRl9TSUdOQUxfREVURUNURUQpOwotCWxvcyA9IGNwbGRfcmVhZChzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BJQ1NSKSAmCi0JCVNCRV8yVDNFM19DUExEX1ZBTF9SRUNFSVZFX0xPU1NfT0ZfU0lHTkFMX0RFVEVDVEVEOwotCi0JaWYgKGxvcyAhPSBzYy0+cy5MT1MpCi0JCWRldl9pbmZvKCZzYy0+cGRldi0+ZGV2LCAiU0JFIDJUM0UzOiBMT1Mgc3RhdHVzOiAlc1xuIiwKLQkJCSBsb3MgPyAiTG9zcyBvZiBzaWduYWwiIDogIlNpZ25hbCBPSyIpOwotCXNjLT5zLkxPUyA9IGxvczsKLX0KLQotdm9pZCBjcGxkX3NldF9mcmFjdGlvbmFsX21vZGUoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgbW9kZSwKLQkJCSAgICAgIHUzMiBzdGFydCwgdTMyIHN0b3ApCi17Ci0JaWYgKG1vZGUgPT0gU0JFXzJUM0UzX0ZSQUNUSU9OQUxfTU9ERV9OT05FKSB7Ci0JCXN0YXJ0ID0gMDsKLQkJc3RvcCA9IDA7Ci0JfQotCi0JaWYgKHNjLT5wLmZyYWN0aW9uYWxfbW9kZSA9PSBtb2RlICYmIHNjLT5wLmJhbmR3aWR0aF9zdGFydCA9PSBzdGFydCAmJgotCSAgICBzYy0+cC5iYW5kd2lkdGhfc3RvcCA9PSBzdG9wKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFNCRV8yVDNFM19GUkFDVElPTkFMX01PREVfTk9ORToKLQkJY3BsZF93cml0ZShzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkMsCi0JCQkgICBTQkVfMlQzRTNfQ1BMRF9WQUxfRlJBQ1RJT05BTF9NT0RFX05PTkUpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19GUkFDVElPTkFMX01PREVfMDoKLQkJY3BsZF93cml0ZShzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkMsCi0JCQkgICBTQkVfMlQzRTNfQ1BMRF9WQUxfRlJBQ1RJT05BTF9NT0RFXzApOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19GUkFDVElPTkFMX01PREVfMToKLQkJY3BsZF93cml0ZShzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkMsCi0JCQkgICBTQkVfMlQzRTNfQ1BMRF9WQUxfRlJBQ1RJT05BTF9NT0RFXzEpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19GUkFDVElPTkFMX01PREVfMjoKLQkJY3BsZF93cml0ZShzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BDUkMsCi0JCQkgICBTQkVfMlQzRTNfQ1BMRF9WQUxfRlJBQ1RJT05BTF9NT0RFXzIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluZXRkZXZfZXJyKHNjLT5kZXYsICJ3cm9uZyBtb2RlIGluIHNldF9mcmFjdGlvbmFsX21vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY3BsZF93cml0ZShzYywgU0JFXzJUM0UzX0NQTERfUkVHX1BCV0YsIHN0YXJ0KTsKLQljcGxkX3dyaXRlKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUEJXTCwgc3RvcCk7Ci0KLQlzYy0+cC5mcmFjdGlvbmFsX21vZGUgPSBtb2RlOwotCXNjLT5wLmJhbmR3aWR0aF9zdGFydCA9IHN0YXJ0OwotCXNjLT5wLmJhbmR3aWR0aF9zdG9wID0gc3RvcDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvY3RybC5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9jdHJsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOTY0YWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9jdHJsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTAgKzAsMCBAQAotLyoKLSAqIFNCRSAyVDNFMyBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZCBkcml2ZXIgZm9yIExpbnV4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBhIGRyaXZlciB3cml0dGVuIGJ5IFNCRSBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSAiMnQzZTMuaCIKLSNpbmNsdWRlICJjdHJsLmgiCi0KLXZvaWQgdDNlM19zZXRfZnJhbWVfdHlwZShzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBtb2RlKQotewotCWlmIChzYy0+cC5mcmFtZV90eXBlID09IG1vZGUpCi0JCXJldHVybjsKLQotCWlmIChzYy0+ci5mbGFncyAmIFNCRV8yVDNFM19GTEFHX05FVFdPUktfVVApIHsKLQkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogY2hhbmdpbmcgZnJhbWUgdHlwZSBkdXJpbmcgYWN0aXZlIGNvbm5lY3Rpb25cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZXhhcjczMDBfc2V0X2ZyYW1lX3R5cGUoc2MsIG1vZGUpOwotCWV4YXI3MjUwX3NldF9mcmFtZV90eXBlKHNjLCBtb2RlKTsKLQljcGxkX3NldF9mcmFtZV90eXBlKHNjLCBtb2RlKTsKLQotCXNjLT5wLmZyYW1lX3R5cGUgPSBtb2RlOwotfQotCi1zdGF0aWMgdm9pZCB0M2UzX3NldF9sb29wYmFjayhzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBtb2RlKQotewotCXUzMiB0eCwgcng7Ci0KLQlpZiAoc2MtPnAubG9vcGJhY2sgPT0gbW9kZSkKLQkJcmV0dXJuOwotCi0JdHggPSBzYy0+cC50cmFuc21pdHRlcl9vbjsKLQlyeCA9IHNjLT5wLnJlY2VpdmVyX29uOwotCWlmICh0eCA9PSBTQkVfMlQzRTNfT04pCi0JCWRjX3RyYW5zbWl0dGVyX29ub2ZmKHNjLCBTQkVfMlQzRTNfT0ZGKTsKLQlpZiAocnggPT0gU0JFXzJUM0UzX09OKQotCQlkY19yZWNlaXZlcl9vbm9mZihzYywgU0JFXzJUM0UzX09GRik7Ci0KLQkvKiBzdG9wIGN1cnJlbnQgbG9vcGJhY2sgaWYgYW55IGV4aXN0cyAqLwotCXN3aXRjaCAoc2MtPnAubG9vcGJhY2spIHsKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19OT05FOgotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19FVEhFUk5FVDoKLQkJZGNfc2V0X2xvb3BiYWNrKHNjLCBTQkVfMlQzRTNfMjExNDNfVkFMX0xPT1BCQUNLX09GRik7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0xPT1BCQUNLX0ZSQU1FUjoKLQkJZXhhcjcyNTBfc2V0X2xvb3BiYWNrKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9MT09QQkFDS19PRkYpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19MSVVfRElHSVRBTDoKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19MSVVfQU5BTE9HOgotCWNhc2UgU0JFXzJUM0UzX0xPT1BCQUNLX0xJVV9SRU1PVEU6Ci0JCWV4YXI3MzAwX3NldF9sb29wYmFjayhzYywgU0JFXzJUM0UzX0xJVV9WQUxfTE9PUEJBQ0tfT0ZGKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgU0JFXzJUM0UzX0xPT1BCQUNLX05PTkU6Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0xPT1BCQUNLX0VUSEVSTkVUOgotCQlkY19zZXRfbG9vcGJhY2soc2MsIFNCRV8yVDNFM18yMTE0M19WQUxfTE9PUEJBQ0tfSU5URVJOQUwpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19GUkFNRVI6Ci0JCWV4YXI3MjUwX3NldF9sb29wYmFjayhzYywgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfTE9PUEJBQ0tfT04pOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19MSVVfRElHSVRBTDoKLQkJZXhhcjczMDBfc2V0X2xvb3BiYWNrKHNjLCBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19ESUdJVEFMKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfTE9PUEJBQ0tfTElVX0FOQUxPRzoKLQkJZXhhcjczMDBfc2V0X2xvb3BiYWNrKHNjLCBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19BTkFMT0cpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19MT09QQkFDS19MSVVfUkVNT1RFOgotCQlleGFyNzMwMF9zZXRfbG9vcGJhY2soc2MsIFNCRV8yVDNFM19MSVVfVkFMX0xPT1BCQUNLX1JFTU9URSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+cC5sb29wYmFjayA9IG1vZGU7Ci0KLQlpZiAodHggPT0gU0JFXzJUM0UzX09OKQotCQlkY190cmFuc21pdHRlcl9vbm9mZihzYywgU0JFXzJUM0UzX09OKTsKLQlpZiAocnggPT0gU0JFXzJUM0UzX09OKQotCQlkY19yZWNlaXZlcl9vbm9mZihzYywgU0JFXzJUM0UzX09OKTsKLX0KLQotCi1zdGF0aWMgdm9pZCB0M2UzX3JlZ19yZWFkKHN0cnVjdCBjaGFubmVsICpzYywgdTMyICpyZWcsIHUzMiAqdmFsKQotewotCXUzMiBpOwotCi0JKnZhbCA9IDA7Ci0KLQlzd2l0Y2ggKHJlZ1swXSkgewotCWNhc2UgU0JFXzJUM0UzX0NISVBfMjExNDM6Ci0JCWlmICghKHJlZ1sxXSAmIDcpKQotCQkJKnZhbCA9IGRjX3JlYWQoc2MtPmFkZHIsIHJlZ1sxXSAvIDgpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19DSElQX0NQTEQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBTQkVfMlQzRTNfQ1BMRF9SRUdfTUFYOyBpKyspCi0JCQlpZiAoY3BsZF9yZWdfbWFwW2ldW3NjLT5oLnNsb3RdID09IHJlZ1sxXSkgewotCQkJCSp2YWwgPSBjcGxkX3JlYWQoc2MsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19DSElQX0ZSQU1FUjoKLQkJZm9yIChpID0gMDsgaSA8IFNCRV8yVDNFM19GUkFNRVJfUkVHX01BWDsgaSsrKQotCQkJaWYgKHQzZTNfZnJhbWVyX3JlZ19tYXBbaV0gPT0gcmVnWzFdKSB7Ci0JCQkJKnZhbCA9IGV4YXI3MjUwX3JlYWQoc2MsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19DSElQX0xJVToKLQkJZm9yIChpID0gMDsgaSA8IFNCRV8yVDNFM19MSVVfUkVHX01BWDsgaSsrKQotCQkJaWYgKHQzZTNfbGl1X3JlZ19tYXBbaV0gPT0gcmVnWzFdKSB7Ci0JCQkJKnZhbCA9IGV4YXI3MzAwX3JlYWQoc2MsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHQzZTNfcmVnX3dyaXRlKHN0cnVjdCBjaGFubmVsICpzYywgdTMyICpyZWcpCi17Ci0JdTMyIGk7Ci0KLQlzd2l0Y2ggKHJlZ1swXSkgewotCWNhc2UgU0JFXzJUM0UzX0NISVBfMjExNDM6Ci0JCWRjX3dyaXRlKHNjLT5hZGRyLCByZWdbMV0sIHJlZ1syXSk7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0NISVBfQ1BMRDoKLQkJZm9yIChpID0gMDsgaSA8IFNCRV8yVDNFM19DUExEX1JFR19NQVg7IGkrKykKLQkJCWlmIChjcGxkX3JlZ19tYXBbaV1bc2MtPmguc2xvdF0gPT0gcmVnWzFdKSB7Ci0JCQkJY3BsZF93cml0ZShzYywgaSwgcmVnWzJdKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfQ0hJUF9GUkFNRVI6Ci0JCWZvciAoaSA9IDA7IGkgPCBTQkVfMlQzRTNfRlJBTUVSX1JFR19NQVg7IGkrKykKLQkJCWlmICh0M2UzX2ZyYW1lcl9yZWdfbWFwW2ldID09IHJlZ1sxXSkgewotCQkJCWV4YXI3MjUwX3dyaXRlKHNjLCBpLCByZWdbMl0pOwotCQkJCWJyZWFrOwotCQkJfQotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19DSElQX0xJVToKLQkJZm9yIChpID0gMDsgaSA8IFNCRV8yVDNFM19MSVVfUkVHX01BWDsgaSsrKQotCQkJaWYgKHQzZTNfbGl1X3JlZ19tYXBbaV0gPT0gcmVnWzFdKSB7Ci0JCQkJZXhhcjczMDBfd3JpdGUoc2MsIGksIHJlZ1syXSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdDNlM19wb3J0X2dldChzdHJ1Y3QgY2hhbm5lbCAqc2MsIHN0cnVjdCB0M2UzX3BhcmFtICpwYXJhbSkKLXsKLQltZW1jcHkocGFyYW0sICYoc2MtPnApLCBzaXplb2Yoc3RydWN0IHQzZTNfcGFyYW0pKTsKLX0KLQotc3RhdGljIHZvaWQgdDNlM19wb3J0X3NldChzdHJ1Y3QgY2hhbm5lbCAqc2MsIHN0cnVjdCB0M2UzX3BhcmFtICpwYXJhbSkKLXsKLQlpZiAocGFyYW0tPmZyYW1lX21vZGUgIT0gMHhmZikKLQkJY3BsZF9zZXRfZnJhbWVfbW9kZShzYywgcGFyYW0tPmZyYW1lX21vZGUpOwotCi0JaWYgKHBhcmFtLT5mcmFjdGlvbmFsX21vZGUgIT0gMHhmZikKLQkJY3BsZF9zZXRfZnJhY3Rpb25hbF9tb2RlKHNjLCBwYXJhbS0+ZnJhY3Rpb25hbF9tb2RlLAotCQkJCQkgcGFyYW0tPmJhbmR3aWR0aF9zdGFydCwKLQkJCQkJIHBhcmFtLT5iYW5kd2lkdGhfc3RvcCk7Ci0KLQlpZiAocGFyYW0tPnBhZF9jb3VudCAhPSAweGZmKQotCQljcGxkX3NldF9wYWRfY291bnQoc2MsIHBhcmFtLT5wYWRfY291bnQpOwotCi0JaWYgKHBhcmFtLT5jcmMgIT0gMHhmZikKLQkJY3BsZF9zZXRfY3JjKHNjLCBwYXJhbS0+Y3JjKTsKLQotCWlmIChwYXJhbS0+cmVjZWl2ZXJfb24gIT0gMHhmZikKLQkJZGNfcmVjZWl2ZXJfb25vZmYoc2MsIHBhcmFtLT5yZWNlaXZlcl9vbik7Ci0KLQlpZiAocGFyYW0tPnRyYW5zbWl0dGVyX29uICE9IDB4ZmYpCi0JCWRjX3RyYW5zbWl0dGVyX29ub2ZmKHNjLCBwYXJhbS0+dHJhbnNtaXR0ZXJfb24pOwotCi0JaWYgKHBhcmFtLT5mcmFtZV90eXBlICE9IDB4ZmYpCi0JCXQzZTNfc2V0X2ZyYW1lX3R5cGUoc2MsIHBhcmFtLT5mcmFtZV90eXBlKTsKLQotCWlmIChwYXJhbS0+cGFuZWwgIT0gMHhmZikKLQkJY3BsZF9zZWxlY3RfcGFuZWwoc2MsIHBhcmFtLT5wYW5lbCk7Ci0KLQlpZiAocGFyYW0tPmxpbmVfYnVpbGRfb3V0ICE9IDB4ZmYpCi0JCWV4YXI3MzAwX2xpbmVfYnVpbGRfb3V0X29ub2ZmKHNjLCBwYXJhbS0+bGluZV9idWlsZF9vdXQpOwotCi0JaWYgKHBhcmFtLT5yZWNlaXZlX2VxdWFsaXphdGlvbiAhPSAweGZmKQotCQlleGFyNzMwMF9yZWNlaXZlX2VxdWFsaXphdGlvbl9vbm9mZihzYywgcGFyYW0tPnJlY2VpdmVfZXF1YWxpemF0aW9uKTsKLQotCWlmIChwYXJhbS0+dHJhbnNtaXRfYWxsX29uZXMgIT0gMHhmZikKLQkJZXhhcjczMDBfdHJhbnNtaXRfYWxsX29uZXNfb25vZmYoc2MsIHBhcmFtLT50cmFuc21pdF9hbGxfb25lcyk7Ci0KLQlpZiAocGFyYW0tPmxvb3BiYWNrICE9IDB4ZmYpCi0JCXQzZTNfc2V0X2xvb3BiYWNrKHNjLCBwYXJhbS0+bG9vcGJhY2spOwotCi0JaWYgKHBhcmFtLT5jbG9ja19zb3VyY2UgIT0gMHhmZikKLQkJY3BsZF9zZXRfY2xvY2soc2MsIHBhcmFtLT5jbG9ja19zb3VyY2UpOwotCi0JaWYgKHBhcmFtLT5zY3JhbWJsZXIgIT0gMHhmZikKLQkJY3BsZF9zZXRfc2NyYW1ibGVyKHNjLCBwYXJhbS0+c2NyYW1ibGVyKTsKLX0KLQotc3RhdGljIHZvaWQgdDNlM19wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgY2hhbm5lbCAqc2MsIHN0cnVjdCB0M2UzX3N0YXRzICpzdGF0cykKLXsKLQl1MzIgcmVzdWx0OwotCi0Jc2MtPnMuTE9DID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfSU9fQ09OVFJPTCkKLQkJJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9MT1NTX09GX0NMT0NLX1NUQVRVUyA/IDEgOiAwOwotCi0Jc3dpdGNoIChzYy0+cC5mcmFtZV90eXBlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HNzUxOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzgzMjoKLQkJcmVzdWx0ID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfQ09ORklHVVJBVElPTl9TVEFUVVNfMik7Ci0JCXNjLT5zLkxPRiA9IHJlc3VsdCAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0xPRiA/IDEgOiAwOwotCQlzYy0+cy5PT0YgPSByZXN1bHQgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9PT0YgPyAxIDogMDsKLQotCQljcGxkX0xPU191cGRhdGUoc2MpOwotCi0JCXNjLT5zLkFJUyA9IHJlc3VsdCAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX0FJUyA/IDEgOiAwOwotCQlzYy0+cy5GRVJGID0gcmVzdWx0ICYgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfRkVSRiA/IDEgOiAwOwotCQlicmVhazsKLQotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfQ0JJVDoKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX00xMzoKLQkJcmVzdWx0ID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfUlhfQ09ORklHVVJBVElPTl9TVEFUVVMpOwotCQlzYy0+cy5BSVMgPSByZXN1bHQgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9BSVMgPyAxIDogMDsKLQotCQljcGxkX0xPU191cGRhdGUoc2MpOwotCi0JCXNjLT5zLklETEUgPSByZXN1bHQgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9JRExFID8gMSA6IDA7Ci0JCXNjLT5zLk9PRiA9IHJlc3VsdCAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX09PRiA/IDEgOiAwOwotCi0JCXJlc3VsdCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX1NUQVRVUyk7Ci0JCXNjLT5zLkZFUkYgPSByZXN1bHQgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GRVJGID8gMSA6IDA7Ci0JCXNjLT5zLkFJQyA9IHJlc3VsdCAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX0FJQyA/IDEgOiAwOwotCQlzYy0+cy5GRUJFX2NvZGUgPSByZXN1bHQgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9GRUJFOwotCi0JCXNjLT5zLkZFQUMgPSBleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9GRUFDKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXN1bHQgPSBleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19QTU9OX0xDVl9FVkVOVF9DT1VOVF9NU0IpIDw8IDg7Ci0JcmVzdWx0ICs9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fSE9MRElOR19SRUdJU1RFUik7Ci0Jc2MtPnMuTENWICs9IHJlc3VsdDsKLQotCXJlc3VsdCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fRlJBTUlOR19CSVRfRVJST1JfRVZFTlRfQ09VTlRfTVNCKSA8PCA4OwotCXJlc3VsdCArPSBleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19QTU9OX0hPTERJTkdfUkVHSVNURVIpOwotCXNjLT5zLkZSQU1JTkdfQklUICs9IHJlc3VsdDsKLQotCXJlc3VsdCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fUEFSSVRZX0VSUk9SX0VWRU5UX0NPVU5UX01TQikgPDwgODsKLQlyZXN1bHQgKz0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9IT0xESU5HX1JFR0lTVEVSKTsKLQlzYy0+cy5QQVJJVFlfRVJST1IgKz0gcmVzdWx0OwotCi0JcmVzdWx0ID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9GRUJFX0VWRU5UX0NPVU5UX01TQikgPDwgODsKLQlyZXN1bHQgKz0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9IT0xESU5HX1JFR0lTVEVSKTsKLQlzYy0+cy5GRUJFX2NvdW50ICs9IHJlc3VsdDsKLQotCXJlc3VsdCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1BNT05fQ1BfQklUX0VSUk9SX0VWRU5UX0NPVU5UX01TQikgPDwgODsKLQlyZXN1bHQgKz0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfUE1PTl9IT0xESU5HX1JFR0lTVEVSKTsKLQlzYy0+cy5DUF9CSVQgKz0gcmVzdWx0OwotCi0JbWVtY3B5KHN0YXRzLCAmKHNjLT5zKSwgc2l6ZW9mKHN0cnVjdCB0M2UzX3N0YXRzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHQzZTNfcG9ydF9kZWxfc3RhdHMoc3RydWN0IGNoYW5uZWwgKnNjKQotewotCW1lbXNldCgmKHNjLT5zKSwgMCwgc2l6ZW9mKHN0cnVjdCB0M2UzX3N0YXRzKSk7Ci19Ci0KLXZvaWQgdDNlM19pZl9jb25maWcoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgY21kLCBjaGFyICpzZXQsCi0JCSAgICBzdHJ1Y3QgdDNlM19yZXNwICpyZXQsIGludCAqcmxlbikKLXsKLQlzdHJ1Y3QgdDNlM19wYXJhbSAqcGFyYW0gPSAoc3RydWN0IHQzZTNfcGFyYW0gKilzZXQ7Ci0JdTMyICpkYXRhID0gKHUzMiAqKXNldDsKLQotCS8qIHR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHQgKi8KLQkvKiBjcGxkX3N0b3BfaW50cihzYyk7ICovCi0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0JFXzJUM0UzX1BPUlRfR0VUOgotCQl0M2UzX3BvcnRfZ2V0KHNjLCAmKHJldC0+dS5wYXJhbSkpOwotCQkqcmxlbiA9IHNpemVvZihyZXQtPnUucGFyYW0pOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19QT1JUX1NFVDoKLQkJdDNlM19wb3J0X3NldChzYywgcGFyYW0pOwotCQkqcmxlbiA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX1BPUlRfR0VUX1NUQVRTOgotCQl0M2UzX3BvcnRfZ2V0X3N0YXRzKHNjLCAmKHJldC0+dS5zdGF0cykpOwotCQkqcmxlbiA9IHNpemVvZihyZXQtPnUuc3RhdHMpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19QT1JUX0RFTF9TVEFUUzoKLQkJdDNlM19wb3J0X2RlbF9zdGF0cyhzYyk7Ci0JCSpybGVuID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfUE9SVF9SRUFEX1JFR1M6Ci0JCXQzZTNfcmVnX3JlYWQoc2MsIGRhdGEsICYocmV0LT51LmRhdGEpKTsKLQkJKnJsZW4gPSBzaXplb2YocmV0LT51LmRhdGEpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19QT1JUX1dSSVRFX1JFR1M6Ci0JCXQzZTNfcmVnX3dyaXRlKHNjLCBkYXRhKTsKLQkJKnJsZW4gPSAwOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19MT0dfTEVWRUw6Ci0JCSpybGVuID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnJsZW4gPSAwOwotCQlicmVhazsKLQl9Ci19Ci0KLXZvaWQgdDNlM19zY19pbml0KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQltZW1zZXQoc2MsIDAsIHNpemVvZigqc2MpKTsKLQotCXNjLT5wLmZyYW1lX21vZGUgPSBTQkVfMlQzRTNfRlJBTUVfTU9ERV9IRExDOwotCXNjLT5wLmZyYWN0aW9uYWxfbW9kZSA9IFNCRV8yVDNFM19GUkFDVElPTkFMX01PREVfTk9ORTsKLQlzYy0+cC5jcmMgPSBTQkVfMlQzRTNfQ1JDXzMyOwotCXNjLT5wLnJlY2VpdmVyX29uID0gU0JFXzJUM0UzX09GRjsKLQlzYy0+cC50cmFuc21pdHRlcl9vbiA9IFNCRV8yVDNFM19PRkY7Ci0Jc2MtPnAuZnJhbWVfdHlwZSA9IFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX0NCSVQ7Ci0Jc2MtPnAucGFuZWwgPSBTQkVfMlQzRTNfUEFORUxfRlJPTlQ7Ci0Jc2MtPnAubGluZV9idWlsZF9vdXQgPSBTQkVfMlQzRTNfT0ZGOwotCXNjLT5wLnJlY2VpdmVfZXF1YWxpemF0aW9uID0gU0JFXzJUM0UzX09GRjsKLQlzYy0+cC50cmFuc21pdF9hbGxfb25lcyA9IFNCRV8yVDNFM19PRkY7Ci0Jc2MtPnAubG9vcGJhY2sgPSBTQkVfMlQzRTNfTE9PUEJBQ0tfTk9ORTsKLQlzYy0+cC5jbG9ja19zb3VyY2UgPSBTQkVfMlQzRTNfVElNSU5HX0xPQ0FMOwotCXNjLT5wLnNjcmFtYmxlciA9IFNCRV8yVDNFM19TQ1JBTUJMRVJfT0ZGOwotCXNjLT5wLnBhZF9jb3VudCA9IFNCRV8yVDNFM19QQURfQ09VTlRfMTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvY3RybC5oIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9jdHJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZjE0NGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9jdHJsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIFNCRSAyVDNFMyBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZCBkcml2ZXIgZm9yIExpbnV4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBhIGRyaXZlciB3cml0dGVuIGJ5IFNCRSBJbmMuCi0gKi8KLQotI2lmbmRlZiBDVFJMX0gKLSNkZWZpbmUgQ1RSTF9ICi0KLSNkZWZpbmUgU0JFXzJUM0UzX09GRgkJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfT04JCQkJCTEKLQotI2RlZmluZSBTQkVfMlQzRTNfTEVEX05PTkUJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfTEVEX0dSRUVOCQkJCTEKLSNkZWZpbmUgU0JFXzJUM0UzX0xFRF9ZRUxMT1cJCQkJMgotCi0jZGVmaW5lIFNCRV8yVDNFM19DQUJMRV9MRU5HVEhfTEVTU19USEFOXzI1NV9GRUVUCTAKLSNkZWZpbmUgU0JFXzJUM0UzX0NBQkxFX0xFTkdUSF9HUkVBVEVSX1RIQU5fMjU1X0ZFRVQJMQotCi0jZGVmaW5lIFNCRV8yVDNFM19DUkNfMTYJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfQ1JDXzMyCQkJCTEKLQotI2RlZmluZSBTQkVfMlQzRTNfUEFORUxfRlJPTlQJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfUEFORUxfUkVBUgkJCQkxCi0KLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FX01PREVfSERMQwkJCTAKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FX01PREVfVFJBTlNQQVJFTlQJCTEKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQU1FX01PREVfUkFXCQkJMgotCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRV9UWVBFX0UzX0c3NTEJCQkwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRV9UWVBFX0UzX0c4MzIJCQkxCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX0NCSVQJCQkyCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX00xMwkJCTMKLQotI2RlZmluZSBTQkVfMlQzRTNfRlJBQ1RJT05BTF9NT0RFX05PTkUJCQkwCi0jZGVmaW5lIFNCRV8yVDNFM19GUkFDVElPTkFMX01PREVfMAkJCTEKLSNkZWZpbmUgU0JFXzJUM0UzX0ZSQUNUSU9OQUxfTU9ERV8xCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfRlJBQ1RJT05BTF9NT0RFXzIJCQkzCi0KLSNkZWZpbmUgU0JFXzJUM0UzX1NDUkFNQkxFUl9PRkYJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfU0NSQU1CTEVSX0xBUlNDT00JCQkxCi0jZGVmaW5lIFNCRV8yVDNFM19TQ1JBTUJMRVJfQURDX0tFTlRST1hfRElHSVRBTAkJMgotCi0jZGVmaW5lIFNCRV8yVDNFM19USU1JTkdfTE9DQUwJCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfVElNSU5HX0xPT1AJCQkJMQotCi0jZGVmaW5lIFNCRV8yVDNFM19MT09QQkFDS19OT05FCQkJCTAKLSNkZWZpbmUgU0JFXzJUM0UzX0xPT1BCQUNLX0VUSEVSTkVUCQkJMQotI2RlZmluZSBTQkVfMlQzRTNfTE9PUEJBQ0tfRlJBTUVSCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfTE9PUEJBQ0tfTElVX0RJR0lUQUwJCQkzCi0jZGVmaW5lIFNCRV8yVDNFM19MT09QQkFDS19MSVVfQU5BTE9HCQkJNAotI2RlZmluZSBTQkVfMlQzRTNfTE9PUEJBQ0tfTElVX1JFTU9URQkJCTUKLQotI2RlZmluZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzEJCQkJMQotI2RlZmluZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzIJCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzMJCQkJMwotI2RlZmluZSBTQkVfMlQzRTNfUEFEX0NPVU5UXzQJCQkJNAotCi0jZGVmaW5lIFNCRV8yVDNFM19DSElQXzIxMTQzCQkJCTAKLSNkZWZpbmUgU0JFXzJUM0UzX0NISVBfQ1BMRAkJCQkxCi0jZGVmaW5lIFNCRV8yVDNFM19DSElQX0ZSQU1FUgkJCQkyCi0jZGVmaW5lIFNCRV8yVDNFM19DSElQX0xJVQkJCQkzCi0KLSNkZWZpbmUgU0JFXzJUM0UzX0xPR19MRVZFTF9OT05FCQkJMAotI2RlZmluZSBTQkVfMlQzRTNfTE9HX0xFVkVMX0VSUk9SCQkJMQotI2RlZmluZSBTQkVfMlQzRTNfTE9HX0xFVkVMX1dBUk5JTkcJCQkyCi0jZGVmaW5lIFNCRV8yVDNFM19MT0dfTEVWRUxfSU5GTwkJCTMKLQotLyogY29tbWFuZHMgKi8KLSNkZWZpbmUgU0JFXzJUM0UzX1BPUlRfR0VUCQkJCTAKLSNkZWZpbmUgU0JFXzJUM0UzX1BPUlRfU0VUCQkJCTEKLSNkZWZpbmUgU0JFXzJUM0UzX1BPUlRfR0VUX1NUQVRTCQkJMgotI2RlZmluZSBTQkVfMlQzRTNfUE9SVF9ERUxfU1RBVFMJCQkzCi0jZGVmaW5lIFNCRV8yVDNFM19QT1JUX1JFQURfUkVHUwkJCTQKLSNkZWZpbmUgU0JFXzJUM0UzX0xPR19MRVZFTAkJCQk1Ci0jZGVmaW5lIFNCRV8yVDNFM19QT1JUX1dSSVRFX1JFR1MJCQk2Ci0KLSNkZWZpbmUgTkdfU0JFXzJUM0UzX05PREVfVFlQRSAgInNiZTJUM0UzIgotI2RlZmluZSBOR19TQkVfMlQzRTNfQ09PS0lFICAgICAweDAzODAwODkxCi0KLXN0cnVjdCB0M2UzX3BhcmFtIHsKLQl1X2ludDhfdCBmcmFtZV9tb2RlOwkJLyogRlJBTUVfTU9ERV8qICovCi0JdV9pbnQ4X3QgY3JjOwkJCS8qIENSQ18qICovCi0JdV9pbnQ4X3QgcmVjZWl2ZXJfb247CQkvKiBPTi9PRkYgKi8KLQl1X2ludDhfdCB0cmFuc21pdHRlcl9vbjsJLyogT04vT0ZGICovCi0JdV9pbnQ4X3QgZnJhbWVfdHlwZTsJCS8qIEZSQU1FX1RZUEVfKiAqLwotCXVfaW50OF90IHBhbmVsOwkJCS8qIFBBTkVMXyogKi8KLQl1X2ludDhfdCBsaW5lX2J1aWxkX291dDsJLyogT04vT0ZGICovCi0JdV9pbnQ4X3QgcmVjZWl2ZV9lcXVhbGl6YXRpb247CS8qIE9OL09GRiAqLwotCXVfaW50OF90IHRyYW5zbWl0X2FsbF9vbmVzOwkvKiBPTi9PRkYgKi8KLQl1X2ludDhfdCBsb29wYmFjazsJCS8qIExPT1BCQUNLXyogKi8KLQl1X2ludDhfdCBjbG9ja19zb3VyY2U7CQkvKiBUSU1JTkdfKiAqLwotCXVfaW50OF90IHNjcmFtYmxlcjsJCS8qIFNDUkFNQkxFUl8qICovCi0JdV9pbnQ4X3QgcGFkX2NvdW50OwkJLyogUEFEX0NPVU5UXyogKi8KLQl1X2ludDhfdCBsb2dfbGV2ZWw7CQkvKiBMT0dfTEVWRUxfKiAtIHVudXNlZCAqLwotCXVfaW50OF90IGZyYWN0aW9uYWxfbW9kZTsJLyogRlJBQ1RJT05BTF9NT0RFXyogKi8KLQl1X2ludDhfdCBiYW5kd2lkdGhfc3RhcnQ7CS8qIDAtMjU1ICovCi0JdV9pbnQ4X3QgYmFuZHdpZHRoX3N0b3A7CS8qIDAtMjU1ICovCi19OwotCi1zdHJ1Y3QgdDNlM19zdGF0cyB7Ci0JdV9pbnQ2NF90IGluX2J5dGVzOwotCXUzMiBpbl9wYWNrZXRzLCBpbl9kcm9wcGVkOwotCXUzMiBpbl9lcnJvcnMsIGluX2Vycm9yX2Rlc2MsIGluX2Vycm9yX2NvbGwsIGluX2Vycm9yX2RyaWIsCi0JCWluX2Vycm9yX2NyYywgaW5fZXJyb3JfbWlpOwotCXVfaW50NjRfdCBvdXRfYnl0ZXM7Ci0JdTMyIG91dF9wYWNrZXRzLCBvdXRfZHJvcHBlZDsKLQl1MzIgb3V0X2Vycm9ycywgb3V0X2Vycm9yX2phYiwgb3V0X2Vycm9yX2xvc3RfY2FyciwKLQkJb3V0X2Vycm9yX25vX2NhcnIsIG91dF9lcnJvcl9saW5rX2ZhaWwsIG91dF9lcnJvcl91bmRlcmZsb3csCi0JCW91dF9lcnJvcl9kZXJlZmVycmVkOwotCXVfaW50OF90IExPQywgTE9GLCBPT0YsIExPUywgQUlTLCBGRVJGLCBJRExFLCBBSUMsIEZFQUM7Ci0JdV9pbnQxNl90IEZFQkVfY29kZTsKLQl1MzIgTENWLCBGUkFNSU5HX0JJVCwgUEFSSVRZX0VSUk9SLCBGRUJFX2NvdW50LCBDUF9CSVQ7Ci19OwotCi0KLXN0cnVjdCB0M2UzX3Jlc3AgewotCXVuaW9uIHsKLQkJc3RydWN0IHQzZTNfcGFyYW0gcGFyYW07Ci0JCXN0cnVjdCB0M2UzX3N0YXRzIHN0YXRzOwotCQl1MzIgZGF0YTsKLQl9IHU7Ci19OwotCi0jZW5kaWYgLyogQ1RSTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL2RjLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL2RjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTEwZjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9kYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qCi0gKiBTQkUgMlQzRTMgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQgZHJpdmVyIGZvciBMaW51eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYSBkcml2ZXIgd3JpdHRlbiBieSBTQkUgSW5jLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlICIydDNlMy5oIgotI2luY2x1ZGUgImN0cmwuaCIKLQotc3RhdGljIGludCBkY19pbml0X2Rlc2NyaXB0b3JfbGlzdChzdHJ1Y3QgY2hhbm5lbCAqc2MpOwotCi12b2lkIGRjX2luaXQoc3RydWN0IGNoYW5uZWwgKnNjKQotewotCXUzMiB2YWw7Ci0KLQlkY19zdG9wKHNjKTsKLQkvKmRjX3Jlc2V0KHNjKTsqLyAvKiBkbyBub3Qgd2FudCB0byByZXNldCBoZXJlICovCi0KLQkvKgotCSAqIEJVU19NT0RFIChDU1IwKQotCSAqLwotCXZhbCA9IFNCRV8yVDNFM18yMTE0M19WQUxfUkVBRF9MSU5FX0VOQUJMRSB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfUkVBRF9NVUxUSVBMRV9FTkFCTEUgfAotCQlTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX0FVVE9NQVRJQ19QT0xMSU5HXzIwMHVzIHwKLQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9CVVNfQVJCSVRSQVRJT05fUlI7Ci0KLQlpZiAoc2MtPmguY29tbWFuZCAmIDE2KQotCQl2YWwgfD0gU0JFXzJUM0UzXzIxMTQzX1ZBTF9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEU7Ci0KLQlzd2l0Y2ggKHNjLT5oLmNhY2hlX3NpemUpIHsKLQljYXNlIDMyOgotCQl2YWwgfD0gU0JFXzJUM0UzXzIxMTQzX1ZBTF9DQUNIRV9BTElHTk1FTlRfMzI7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCXZhbCB8PSBTQkVfMlQzRTNfMjExNDNfVkFMX0NBQ0hFX0FMSUdOTUVOVF8xNjsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQl2YWwgfD0gU0JFXzJUM0UzXzIxMTQzX1ZBTF9DQUNIRV9BTElHTk1FTlRfODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQlVTX01PREUsIHZhbCk7Ci0KLQkvKiBPUEVSQVRJT05fTU9ERSAoQ1NSNikgKi8KLQl2YWwgPSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfQUxMIHwKLQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9NVVNUX0JFX09ORSB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfVEhSRVNIT0xEX0NPTlRST0xfQklUU18xIHwKLQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9MT09QQkFDS19PRkYgfAotCQlTQkVfMlQzRTNfMjExNDNfVkFMX1BBU1NfQUxMX01VTFRJQ0FTVCB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfUFJPTUlTQ1VPVVNfTU9ERSB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfUEFTU19CQURfRlJBTUVTOwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFLCB2YWwpOwotCWlmIChzYy0+cC5sb29wYmFjayA9PSBTQkVfMlQzRTNfTE9PUEJBQ0tfRVRIRVJORVQpCi0JCXNjLT5wLmxvb3BiYWNrID0gU0JFXzJUM0UzX0xPT1BCQUNLX05PTkU7Ci0KLQkvKgotCSAqIEdFTkVSQUxfUFVSUE9TRV9USU1FUl9BTkRfSU5URVJSVVBUX01JVElHQVRJT05fQ09OVFJPTCAoQ1NSMTEpCi0JICovCi0JdmFsID0gU0JFXzJUM0UzXzIxMTQzX1ZBTF9DWUNMRV9TSVpFIHwKLQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9USU1FUiB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfTlVNQkVSX09GX1RSQU5TTUlUX1BBQ0tFVFMgfAotCQlTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfVElNRVIgfAotCQlTQkVfMlQzRTNfMjExNDNfVkFMX05VTUJFUl9PRl9SRUNFSVZFX1BBQ0tFVFM7Ci0JZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfR0VORVJBTF9QVVJQT1NFX1RJTUVSX0FORF9JTlRFUlJVUFRfTUlUSUdBVElPTl9DT05UUk9MLCB2YWwpOwotCi0JLyogcHJlcGFyZSBkZXNjcmlwdG9ycyBhbmQgZGF0YSBmb3IgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcHJvY2Vzc2VzICovCi0JaWYgKGRjX2luaXRfZGVzY3JpcHRvcl9saXN0KHNjKSAhPSAwKQotCQlyZXR1cm47Ci0KLQkvKiBjbGVhciBldGhlcm5ldCBpbnRlcnJ1cHRzIHN0YXR1cyAqLwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NUQVRVUywgMHhGRkZGRkZGRik7Ci0KLQkvKiBTSUEgbW9kZSByZWdpc3RlcnMgKi8KLQlkY19zZXRfb3V0cHV0X3BvcnQoc2MpOwotfQotCi12b2lkIGRjX3N0YXJ0KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgdmFsOwotCi0JaWYgKCEoc2MtPnIuZmxhZ3MgJiBTQkVfMlQzRTNfRkxBR19ORVRXT1JLX1VQKSkKLQkJcmV0dXJuOwotCi0JZGNfaW5pdChzYyk7Ci0KLQkvKiBnZXQgYWN0dWFsIExPUyBhbmQgT09GIHN0YXR1cyAqLwotCXN3aXRjaCAoc2MtPnAuZnJhbWVfdHlwZSkgewotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzc1MToKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX0UzX0c4MzI6Ci0JCXZhbCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTXzIpOwotCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LCAiU3RhcnQgRnJhbWVyIFJ4IFN0YXR1cyA9ICUwMlhcbiIsIHZhbCk7Ci0JCXNjLT5zLk9PRiA9IHZhbCAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX09PRiA/IDEgOiAwOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX0NCSVQ6Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9UM19NMTM6Ci0JCXZhbCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTKTsKLQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIlN0YXJ0IEZyYW1lciBSeCBTdGF0dXMgPSAlMDJYXG4iLCB2YWwpOwotCQlzYy0+cy5PT0YgPSB2YWwgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9PT0YgPyAxIDogMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCWNwbGRfTE9TX3VwZGF0ZShzYyk7Ci0KLQkvKiBzdGFydCByZWNlaXZlIGFuZCB0cmFuc21pdCBwcm9jZXNzZXMgKi8KLQlkY190cmFuc21pdHRlcl9vbm9mZihzYywgU0JFXzJUM0UzX09OKTsKLQlkY19yZWNlaXZlcl9vbm9mZihzYywgU0JFXzJUM0UzX09OKTsKLQotCS8qIHN0YXJ0IGludGVycnVwdHMgKi8KLQlkY19zdGFydF9pbnRyKHNjKTsKLX0KLQotI2RlZmluZSBNQVhfSU5UX1dBSVRfQ05UCTEyMDAwCi12b2lkIGRjX3N0b3Aoc3RydWN0IGNoYW5uZWwgKnNjKQotewotCWludCB3Y250OwotCi0JLyogc3RvcCByZWNlaXZlIGFuZCB0cmFuc21pdCBwcm9jZXNzZXMgKi8KLQlkY19yZWNlaXZlcl9vbm9mZihzYywgU0JFXzJUM0UzX09GRik7Ci0JZGNfdHJhbnNtaXR0ZXJfb25vZmYoc2MsIFNCRV8yVDNFM19PRkYpOwotCi0JLyogdHVybiBvZmYgZXRoZXJuZXQgaW50ZXJydXB0cyAqLwotCWRjX3N0b3BfaW50cihzYyk7Ci0KLQkvKiB3YWl0IHRvIGVuc3VyZSB0aGUgaW50ZXJydXB0cyBoYXZlIGJlZW4gY29tcGxldGVkICovCi0JZm9yICh3Y250ID0gMDsgd2NudCA8IE1BWF9JTlRfV0FJVF9DTlQ7IHdjbnQrKykgewotCQl1ZGVsYXkoNSk7Ci0JCWlmICghc2MtPmludGVycnVwdF9hY3RpdmUpCi0JCQlicmVhazsKLQl9Ci0JaWYgKHdjbnQgPj0gTUFYX0lOVF9XQUlUX0NOVCkKLQkJZGV2X3dhcm4oJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IEludGVycnVwdCBhY3RpdmUgdG9vIGxvbmdcbiIpOwotCi0JLyogY2xlYXIgYWxsIHJlY2VpdmUvdHJhbnNtaXQgZGF0YSAqLwotCWRjX2Ryb3BfZGVzY3JpcHRvcl9saXN0KHNjKTsKLX0KLQotdm9pZCBkY19zdGFydF9pbnRyKHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQlpZiAoc2MtPnAubG9vcGJhY2sgPT0gU0JFXzJUM0UzX0xPT1BCQUNLX05PTkUgJiYgc2MtPnMuT09GKQotCQlyZXR1cm47Ci0KLQlpZiAoc2MtPnAucmVjZWl2ZXJfb24gfHwgc2MtPnAudHJhbnNtaXR0ZXJfb24pIHsKLQkJaWYgKCFzYy0+ZXRoZXIuaW50ZXJydXB0X2VuYWJsZV9tYXNrKQotCQkJZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfU1RBVFVTLCAweEZGRkZGRkZGKTsKLQotCQlzYy0+ZXRoZXIuaW50ZXJydXB0X2VuYWJsZV9tYXNrID0KLQkJCVNCRV8yVDNFM18yMTE0M19WQUxfTk9STUFMX0lOVEVSUlVQVF9TVU1NQVJZX0VOQUJMRSB8Ci0JCQlTQkVfMlQzRTNfMjExNDNfVkFMX0FCTk9STUFMX0lOVEVSUlVQVF9TVU1NQVJZX0VOQUJMRSB8Ci0JCQlTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfU1RPUFBFRF9FTkFCTEUgfAotCQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX0JVRkZFUl9VTkFWQUlMQUJMRV9FTkFCTEUgfAotCQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9VTkRFUkZMT1dfSU5URVJSVVBUX0VOQUJMRSB8Ci0JCQlTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX0JVRkZFUl9VTkFWQUlMQUJMRV9FTkFCTEUgfAotCQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9TVE9QUEVEX0VOQUJMRSB8Ci0JCQlTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX0lOVEVSUlVQVF9FTkFCTEU7Ci0KLQkJZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfSU5URVJSVVBUX0VOQUJMRSwKLQkJCSBzYy0+ZXRoZXIuaW50ZXJydXB0X2VuYWJsZV9tYXNrKTsKLQl9Ci19Ci0KLXZvaWQgZGNfc3RvcF9pbnRyKHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQlzYy0+ZXRoZXIuaW50ZXJydXB0X2VuYWJsZV9tYXNrID0gMDsKLQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19JTlRFUlJVUFRfRU5BQkxFLCAwKTsKLX0KLQotdm9pZCBkY19yZXNldChzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JLyogdHVybiBvZmYgZXRoZXJuZXQgaW50ZXJydXB0cyAqLwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0lOVEVSUlVQVF9FTkFCTEUsIDApOwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NUQVRVUywgMHhGRkZGRkZGRik7Ci0KLQkvKiBzb2Z0d2FyZSByZXNldCAqLwotCWRjX3NldF9iaXRzKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JVU19NT0RFLAotCQkgICBTQkVfMlQzRTNfMjExNDNfVkFMX1NPRlRXQVJFX1JFU0VUKTsKLQl1ZGVsYXkoNCk7IC8qIDUwIFBDSSBjeWNsZXMgPCAydXMgKi8KLQotCS8qIGNsZWFyIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gKi8KLQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CVVNfTU9ERSwgMCk7Ci0KLQkvKiBjbGVhciBzb2Z0d2FyZSBjb25maWd1cmF0aW9uICovCi0JZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfT1BFUkFUSU9OX01PREUsIDApOwotCi0JLyogdHVybiBvZmYgU0lBIHJlc2V0ICovCi0JZGNfc2V0X2JpdHMoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfU0lBX0NPTk5FQ1RJVklUWSwKLQkJICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TSUFfUkVTRVQpOwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NJQV9UUkFOU01JVF9BTkRfUkVDRUlWRSwgMCk7Ci0JZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfU0lBX0FORF9HRU5FUkFMX1BVUlBPU0VfUE9SVCwgMCk7Ci19Ci0KLQotdm9pZCBkY19yZWNlaXZlcl9vbm9mZihzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBtb2RlKQotewotCXUzMiBpLCBzdGF0ZSA9IDA7Ci0KLQlpZiAoc2MtPnAucmVjZWl2ZXJfb24gPT0gbW9kZSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfT0ZGOgotCQlpZiAoZGNfcmVhZChzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSkgJgotCQkgICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX1NUQVJUKSB7Ci0JCQlkY19jbGVhcl9iaXRzKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFLAotCQkJCSAgICAgIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9TVEFSVCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCQkJc3RhdGUgPSBkY19yZWFkKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NUQVRVUykgJgotCQkJCQlTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfUFJPQ0VTU19TVEFURTsKLQkJCQlpZiAoc3RhdGUgPT0gU0JFXzJUM0UzXzIxMTQzX1ZBTF9SWF9TVE9QUEVEKQotCQkJCQlicmVhazsKLQkJCQl1ZGVsYXkoNSk7Ci0JCQl9Ci0JCQlpZiAoc3RhdGUgIT0gU0JFXzJUM0UzXzIxMTQzX1ZBTF9SWF9TVE9QUEVEKQotCQkJCWRldl93YXJuKCZzYy0+cGRldi0+ZGV2LCAiU0JFIDJUM0UzOiBSeCBmYWlsZWQgdG8gc3RvcFxuIik7Ci0JCQllbHNlCi0JCQkJZGV2X2luZm8oJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IFJ4IG9mZlxuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfT046Ci0JCWRjX3NldF9iaXRzKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFLAotCQkJICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX1NUQVJUKTsKLQkJdWRlbGF5KDEwMCk7Ci0JCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1JFQ0VJVkVfUE9MTF9ERU1BTkQsIDB4RkZGRkZGRkYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0Jc2MtPnAucmVjZWl2ZXJfb24gPSBtb2RlOwotfQotCi12b2lkIGRjX3RyYW5zbWl0dGVyX29ub2ZmKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIG1vZGUpCi17Ci0JdTMyIGksIHN0YXRlID0gMDsKLQotCWlmIChzYy0+cC50cmFuc21pdHRlcl9vbiA9PSBtb2RlKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFNCRV8yVDNFM19PRkY6Ci0JCWlmIChkY19yZWFkKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFKSAmCi0JCSAgICBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlTU0lPTl9TVEFSVCkgewotCQkJZGNfY2xlYXJfYml0cyhzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwKLQkJCQkgICAgICBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlTU0lPTl9TVEFSVCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCQkJc3RhdGUgPSBkY19yZWFkKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NUQVRVUykgJgotCQkJCQlTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlTU0lPTl9QUk9DRVNTX1NUQVRFOwotCQkJCWlmIChzdGF0ZSA9PSBTQkVfMlQzRTNfMjExNDNfVkFMX1RYX1NUT1BQRUQpCi0JCQkJCWJyZWFrOwotCQkJCXVkZWxheSg1KTsKLQkJCX0KLQkJCWlmIChzdGF0ZSAhPSBTQkVfMlQzRTNfMjExNDNfVkFMX1RYX1NUT1BQRUQpCi0JCQkJZGV2X3dhcm4oJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IFR4IGZhaWxlZCB0byBzdG9wXG4iKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19PTjoKLQkJZGNfc2V0X2JpdHMoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfT1BFUkFUSU9OX01PREUsCi0JCQkgICBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlTU0lPTl9TVEFSVCk7Ci0JCXVkZWxheSgxMDApOwotCQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19UUkFOU01JVF9QT0xMX0RFTUFORCwgMHhGRkZGRkZGRik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+cC50cmFuc21pdHRlcl9vbiA9IG1vZGU7Ci19Ci0KLQotCi12b2lkIGRjX3NldF9sb29wYmFjayhzdHJ1Y3QgY2hhbm5lbCAqc2MsIHUzMiBtb2RlKQotewotCXUzMiB2YWw7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFNCRV8yVDNFM18yMTE0M19WQUxfTE9PUEJBQ0tfT0ZGOgotCWNhc2UgU0JFXzJUM0UzXzIxMTQzX1ZBTF9MT09QQkFDS19JTlRFUk5BTDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCS8qIHNlbGVjdCBsb29wYmFjayBtb2RlICovCi0JdmFsID0gZGNfcmVhZChzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSkgJgotCQl+U0JFXzJUM0UzXzIxMTQzX1ZBTF9PUEVSQVRJTkdfTU9ERTsKLQl2YWwgfD0gbW9kZTsKLQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwgdmFsKTsKLQotCWlmIChtb2RlID09IFNCRV8yVDNFM18yMTE0M19WQUxfTE9PUEJBQ0tfT0ZGKQotCQlkY19zZXRfYml0cyhzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwKLQkJCSAgIFNCRV8yVDNFM18yMTE0M19WQUxfRlVMTF9EVVBMRVhfTU9ERSk7Ci0JZWxzZQotCQlkY19jbGVhcl9iaXRzKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFLAotCQkJICAgICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9GVUxMX0RVUExFWF9NT0RFKTsKLX0KLQotc3RhdGljIGludCBkY19pbml0X2Rlc2NyaXB0b3JfbGlzdChzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JdTMyIGksIGo7Ci0Jc3RydWN0IHNrX2J1ZmYgKm07Ci0KLQlpZiAoc2MtPmV0aGVyLnJ4X3JpbmcgPT0gTlVMTCkKLQkJc2MtPmV0aGVyLnJ4X3JpbmcgPSBrY2FsbG9jKFNCRV8yVDNFM19SWF9ERVNDX1JJTkdfU0laRSwKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdDNlM19yeF9kZXNjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNjLT5ldGhlci5yeF9yaW5nID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKHNjLT5ldGhlci50eF9yaW5nID09IE5VTEwpCi0JCXNjLT5ldGhlci50eF9yaW5nID0ga2NhbGxvYyhTQkVfMlQzRTNfVFhfREVTQ19SSU5HX1NJWkUsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHQzZTNfdHhfZGVzYyksIEdGUF9LRVJORUwpOwotCWlmIChzYy0+ZXRoZXIudHhfcmluZyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHNjLT5ldGhlci5yeF9yaW5nKTsKLQkJc2MtPmV0aGVyLnJ4X3JpbmcgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQotCS8qCi0JICogUmVjZWl2ZSByaW5nCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFNCRV8yVDNFM19SWF9ERVNDX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXNjLT5ldGhlci5yeF9yaW5nW2ldLnJkZXMwID0gU0JFXzJUM0UzX1JYX0RFU0NfMjExNDNfT1dOOwotCQlzYy0+ZXRoZXIucnhfcmluZ1tpXS5yZGVzMSA9Ci0JCQlTQkVfMlQzRTNfUlhfREVTQ19TRUNPTkRfQUREUkVTU19DSEFJTkVEIHwgU0JFXzJUM0UzX01UVTsKLQotCQlpZiAoc2MtPmV0aGVyLnJ4X2RhdGFbaV0gPT0gTlVMTCkgewotCQkJbSA9IGRldl9hbGxvY19za2IoTUNMQllURVMpOwotCQkJaWYgKCFtKSB7Ci0JCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShzYy0+ZXRoZXIucnhfZGF0YVtqXSk7Ci0JCQkJCXNjLT5ldGhlci5yeF9kYXRhW2pdID0gTlVMTDsKLQkJCQl9Ci0JCQkJa2ZyZWUoc2MtPmV0aGVyLnJ4X3JpbmcpOwotCQkJCXNjLT5ldGhlci5yeF9yaW5nID0gTlVMTDsKLQkJCQlrZnJlZShzYy0+ZXRoZXIudHhfcmluZyk7Ci0JCQkJc2MtPmV0aGVyLnR4X3JpbmcgPSBOVUxMOwotCQkJCWRldl9lcnIoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IHRva2VuX2FsbG9jIGVycjoiCi0JCQkJCSIgbm8gYnVmZmVyIHNwYWNlIGZvciBSWCByaW5nXG4iKTsKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQl9Ci0JCQlzYy0+ZXRoZXIucnhfZGF0YVtpXSA9IG07Ci0JCX0KLQkJc2MtPmV0aGVyLnJ4X3JpbmdbaV0ucmRlczIgPSB2aXJ0X3RvX3BoeXMoc2MtPmV0aGVyLnJ4X2RhdGFbaV0tPmRhdGEpOwotCi0JCXNjLT5ldGhlci5yeF9yaW5nW2ldLnJkZXMzID0gdmlydF90b19waHlzKAotCQkJJnNjLT5ldGhlci5yeF9yaW5nWyhpICsgMSkgJSBTQkVfMlQzRTNfUlhfREVTQ19SSU5HX1NJWkVdKTsKLQl9Ci0Jc2MtPmV0aGVyLnJ4X3JpbmdbU0JFXzJUM0UzX1JYX0RFU0NfUklOR19TSVpFIC0gMV0ucmRlczEgfD0KLQkJU0JFXzJUM0UzX1JYX0RFU0NfRU5EX09GX1JJTkc7Ci0Jc2MtPmV0aGVyLnJ4X3JpbmdfY3VycmVudF9yZWFkID0gMDsKLQotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1JFQ0VJVkVfTElTVF9CQVNFX0FERFJFU1MsCi0JCSB2aXJ0X3RvX3BoeXMoJnNjLT5ldGhlci5yeF9yaW5nWzBdKSk7Ci0KLQkvKgotCSAqIFRyYW5zbWl0IHJpbmcKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFOyBpKyspIHsKLQkJc2MtPmV0aGVyLnR4X3JpbmdbaV0udGRlczAgPSAwOwotCQlzYy0+ZXRoZXIudHhfcmluZ1tpXS50ZGVzMSA9IFNCRV8yVDNFM19UWF9ERVNDX1NFQ09ORF9BRERSRVNTX0NIQUlORUQgfAotCQkJU0JFXzJUM0UzX1RYX0RFU0NfRElTQUJMRV9QQURESU5HOwotCi0JCXNjLT5ldGhlci50eF9yaW5nW2ldLnRkZXMyID0gMDsKLQkJc2MtPmV0aGVyLnR4X2RhdGFbaV0gPSBOVUxMOwotCi0JCXNjLT5ldGhlci50eF9yaW5nW2ldLnRkZXMzID0gdmlydF90b19waHlzKAotCQkJJnNjLT5ldGhlci50eF9yaW5nWyhpICsgMSkgJSBTQkVfMlQzRTNfVFhfREVTQ19SSU5HX1NJWkVdKTsKLQl9Ci0Jc2MtPmV0aGVyLnR4X3JpbmdbU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFIC0gMV0udGRlczEgfD0KLQkJU0JFXzJUM0UzX1RYX0RFU0NfRU5EX09GX1JJTkc7Ci0KLQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19UUkFOU01JVF9MSVNUX0JBU0VfQUREUkVTUywKLQkJIHZpcnRfdG9fcGh5cygmc2MtPmV0aGVyLnR4X3JpbmdbMF0pKTsKLQlzYy0+ZXRoZXIudHhfcmluZ19jdXJyZW50X3JlYWQgPSAwOwotCXNjLT5ldGhlci50eF9yaW5nX2N1cnJlbnRfd3JpdGUgPSAwOwotCXNjLT5ldGhlci50eF9mcmVlX2NudCA9IFNCRV8yVDNFM19UWF9ERVNDX1JJTkdfU0laRTsKLQlzcGluX2xvY2tfaW5pdCgmc2MtPmV0aGVyLnR4X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZGNfY2xlYXJfZGVzY3JpcHRvcl9saXN0KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgaTsKLQotCS8qIGNsZWFyIENTUjMgYW5kIENTUjQgKi8KLQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19SRUNFSVZFX0xJU1RfQkFTRV9BRERSRVNTLCAwKTsKLQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19UUkFOU01JVF9MSVNUX0JBU0VfQUREUkVTUywgMCk7Ci0KLQkvKiBmcmVlIGFsbCBkYXRhIGJ1ZmZlcnMgb24gVFggcmluZyAqLwotCWZvciAoaSA9IDA7IGkgPCBTQkVfMlQzRTNfVFhfREVTQ19SSU5HX1NJWkU7IGkrKykgewotCQlpZiAoc2MtPmV0aGVyLnR4X2RhdGFbaV0gIT0gTlVMTCkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2MtPmV0aGVyLnR4X2RhdGFbaV0pOwotCQkJc2MtPmV0aGVyLnR4X2RhdGFbaV0gPSBOVUxMOwotCQl9Ci0JfQotfQotCi12b2lkIGRjX2Ryb3BfZGVzY3JpcHRvcl9saXN0KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgaTsKLQotCWRjX2NsZWFyX2Rlc2NyaXB0b3JfbGlzdChzYyk7Ci0KLQkvKiBmcmVlIGFsbCBkYXRhIGJ1ZmZlcnMgb24gUlggcmluZyAqLwotCWZvciAoaSA9IDA7IGkgPCBTQkVfMlQzRTNfUlhfREVTQ19SSU5HX1NJWkU7IGkrKykgewotCQlpZiAoc2MtPmV0aGVyLnJ4X2RhdGFbaV0gIT0gTlVMTCkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2MtPmV0aGVyLnJ4X2RhdGFbaV0pOwotCQkJc2MtPmV0aGVyLnJ4X2RhdGFbaV0gPSBOVUxMOwotCQl9Ci0JfQotCi0Ja2ZyZWUoc2MtPmV0aGVyLnJ4X3JpbmcpOwotCXNjLT5ldGhlci5yeF9yaW5nID0gTlVMTDsKLQlrZnJlZShzYy0+ZXRoZXIudHhfcmluZyk7Ci0Jc2MtPmV0aGVyLnR4X3JpbmcgPSBOVUxMOwotfQotCi0KLXZvaWQgZGNfc2V0X291dHB1dF9wb3J0KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQlkY19jbGVhcl9iaXRzKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFLAotCQkgICAgICBTQkVfMlQzRTNfMjExNDNfVkFMX1BPUlRfU0VMRUNUKTsKLQotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NJQV9TVEFUVVMsIDB4MDAwMDAzMDEpOwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NJQV9DT05ORUNUSVZJVFksIDApOwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NJQV9UUkFOU01JVF9BTkRfUkVDRUlWRSwgMCk7Ci0JZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfU0lBX0FORF9HRU5FUkFMX1BVUlBPU0VfUE9SVCwgMHgwODAwMDAxMSk7Ci0KLQlkY19zZXRfYml0cyhzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwKLQkJICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9USFJFU0hPTERfTU9ERV8xMDBNYnMgfAotCQkgICBTQkVfMlQzRTNfMjExNDNfVkFMX0hFQVJUQkVBVF9ESVNBQkxFIHwKLQkJICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9QT1JUX1NFTEVDVCB8Ci0JCSAgIFNCRV8yVDNFM18yMTE0M19WQUxfRlVMTF9EVVBMRVhfTU9ERSk7Ci19Ci0KLXZvaWQgZGNfcmVzdGFydChzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JZGV2X3dhcm4oJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IDIxMTQzIHJlc3RhcnRcbiIpOwotCi0JZGNfc3RvcChzYyk7Ci0JZGNfcmVzZXQoc2MpOwotCWRjX2luaXQoc2MpOwkvKiBzdG9wICsgcmVzZXQgKyBpbml0ICovCi0JZGNfc3RhcnQoc2MpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9leGFyNzI1MC5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9leGFyNzI1MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2RkZDE0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvZXhhcjcyNTAuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogU0JFIDJUM0UzIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkIGRyaXZlciBmb3IgTGludXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGEgZHJpdmVyIHdyaXR0ZW4gYnkgU0JFIEluYy4KLSAqLwotCi0jaW5jbHVkZSAiMnQzZTMuaCIKLSNpbmNsdWRlICJjdHJsLmgiCi0KLXZvaWQgZXhhcjcyNTBfaW5pdChzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX09QRVJBVElOR19NT0RFLAotCQkgICAgICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfQ0JJVCB8Ci0JCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9JTlRFUlJVUFRfRU5BQkxFX1JFU0VUIHwKLQkJICAgICAgIFNCRV8yVDNFM19GUkFNRVJfVkFMX1RJTUlOR19BU1lOQ0hfVFhJTkNMSyk7Ci0KLQlleGFyNzI1MF93cml0ZShzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfSU9fQ09OVFJPTCwKLQkJICAgICAgIFNCRV8yVDNFM19GUkFNRVJfVkFMX0RJU0FCTEVfVFhfTE9TU19PRl9DTE9DSyB8Ci0JCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9ESVNBQkxFX1JYX0xPU1NfT0ZfQ0xPQ0sgfAotCQkgICAgICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfQU1JX0xJTkVfQ09ERSB8Ci0JCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9MSU5FX0NMT0NLX0lOVkVSVCk7Ci0KLQlleGFyNzI1MF9zZXRfZnJhbWVfdHlwZShzYywgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfQ0JJVCk7Ci19Ci0KLXZvaWQgZXhhcjcyNTBfc2V0X2ZyYW1lX3R5cGUoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgdHlwZSkKLXsKLQl1MzIgdmFsOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HNzUxOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzgzMjoKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX0NCSVQ6Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9UM19NMTM6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlleGFyNzI1MF9zdG9wX2ludHIoc2MsIHR5cGUpOwotCi0JdmFsID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfT1BFUkFUSU5HX01PREUpOwotCXZhbCAmPSB+KFNCRV8yVDNFM19GUkFNRVJfVkFMX0xPQ0FMX0xPT1BCQUNLX01PREUgfAotCQkgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfRTNfU0VMRUNUIHwKLQkJIFNCRV8yVDNFM19GUkFNRVJfVkFMX0ZSQU1FX0ZPUk1BVF9TRUxFQ1QpOwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzc1MToKLQkJdmFsIHw9IFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX0c3NTE7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzgzMjoKLQkJdmFsIHw9IFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX0c4MzI7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfQ0JJVDoKLQkJdmFsIHw9IFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX0NCSVQ7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfTTEzOgotCQl2YWwgfD0gU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfTTEzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCWV4YXI3MjUwX3dyaXRlKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19PUEVSQVRJTkdfTU9ERSwgdmFsKTsKLQlleGFyNzI1MF9zdGFydF9pbnRyKHNjLCB0eXBlKTsKLX0KLQotCi12b2lkIGV4YXI3MjUwX3N0YXJ0X2ludHIoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgdHlwZSkKLXsKLQl1MzIgdmFsOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HNzUxOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzgzMjoKLQkJdmFsID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfQ09ORklHVVJBVElPTl9TVEFUVVNfMik7Ci0KLQkJY3BsZF9MT1NfdXBkYXRlKHNjKTsKLQotCQlzYy0+cy5PT0YgPSB2YWwgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9PT0YgPyAxIDogMDsKLQkJZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfSU5URVJSVVBUX1NUQVRVU18xKTsKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9FTkFCTEVfMSwKLQkJCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9PT0ZfSU5URVJSVVBUX0VOQUJMRSB8Ci0JCQkgICAgICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfTE9TX0lOVEVSUlVQVF9FTkFCTEUpOwotCi0JCWV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9TVEFUVVNfMik7Ci0JCWJyZWFrOwotCi0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9UM19DQklUOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfTTEzOgotCQl2YWwgPSBleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9DT05GSUdVUkFUSU9OX1NUQVRVUyk7Ci0KLQkJY3BsZF9MT1NfdXBkYXRlKHNjKTsKLQotCQlzYy0+cy5PT0YgPSB2YWwgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9PT0YgPyAxIDogMDsKLQotCQlleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0lOVEVSUlVQVF9FTkFCTEUsCi0JCQkgICAgICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfTE9TX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJICAgICAgIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX09PRl9JTlRFUlJVUFRfRU5BQkxFKTsKLQotCQlleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9GRUFDX0lOVEVSUlVQVF9FTkFCTEVfU1RBVFVTKTsKLQotCQlleGFyNzI1MF93cml0ZShzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfUlhfTEFQRF9DT05UUk9MLCAwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfQkxPQ0tfSU5URVJSVVBUX1NUQVRVUyk7Ci0JZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0JMT0NLX0lOVEVSUlVQVF9FTkFCTEUsCi0JCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9JTlRFUlJVUFRfRU5BQkxFIHwKLQkJICAgICAgIFNCRV8yVDNFM19GUkFNRVJfVkFMX1RYX0lOVEVSUlVQVF9FTkFCTEUpOwotfQotCi0KLXZvaWQgZXhhcjcyNTBfc3RvcF9pbnRyKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIHR5cGUpCi17Ci0JZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0JMT0NLX0lOVEVSUlVQVF9FTkFCTEUsIDApOwotCWV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0JMT0NLX0lOVEVSUlVQVF9TVEFUVVMpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HNzUxOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzgzMjoKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9FTkFCTEVfMSwgMCk7Ci0JCWV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9TVEFUVVNfMSk7Ci0JCWV4YXI3MjUwX3dyaXRlKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19SWF9JTlRFUlJVUFRfRU5BQkxFXzIsIDApOwotCQlleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19FM19SWF9JTlRFUlJVUFRfU1RBVFVTXzIpOwotCQlleGFyNzI1MF93cml0ZShzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfTEFQRF9DT05UUk9MLCAwKTsKLQkJZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfTEFQRF9DT05UUk9MKTsKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1RYX0xBUERfU1RBVFVTLCAwKTsKLQkJZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfTEFQRF9TVEFUVVMpOwotCQlicmVhazsKLQotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfQ0JJVDoKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX00xMzoKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0lOVEVSUlVQVF9FTkFCTEUsIDApOwotCQlleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0ZFQUNfSU5URVJSVVBUX0VOQUJMRV9TVEFUVVMsIDApOwotCQlleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19SWF9GRUFDX0lOVEVSUlVQVF9FTkFCTEVfU1RBVFVTKTsKLQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0xBUERfQ09OVFJPTCwgMCk7Ci0JCWV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0xBUERfQ09OVFJPTCk7Ci0JCWV4YXI3MjUwX3dyaXRlKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19UWF9GRUFDX0NPTkZJR1VSQVRJT05fU1RBVFVTLCAwKTsKLQkJZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfVFhfRkVBQ19DT05GSUdVUkFUSU9OX1NUQVRVUyk7Ci0JCWV4YXI3MjUwX3dyaXRlKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19UWF9MQVBEX1NUQVRVUywgMCk7Ci0JCWV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1RYX0xBUERfU1RBVFVTKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0KLQotCi12b2lkIGV4YXI3MjUwX3VuaXBvbGFyX29ub2ZmKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIG1vZGUpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfT0ZGOgotCQlleGFyNzMwMF9jbGVhcl9iaXQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0lPX0NPTlRST0wsCi0JCQkJICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVU5JUE9MQVIpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM19PTjoKLQkJZXhhcjczMDBfc2V0X2JpdChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfSU9fQ09OVFJPTCwKLQkJCQkgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVU5JUE9MQVIpOwotCQlicmVhazsKLQl9Ci19Ci0KLXZvaWQgZXhhcjcyNTBfc2V0X2xvb3BiYWNrKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIG1vZGUpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9MT09QQkFDS19PRkY6Ci0JCWV4YXI3MzAwX2NsZWFyX2JpdChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfT1BFUkFUSU5HX01PREUsCi0JCQkJICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfTE9DQUxfTE9PUEJBQ0tfTU9ERSk7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfTE9PUEJBQ0tfT046Ci0JCWV4YXI3MzAwX3NldF9iaXQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX09QRVJBVElOR19NT0RFLAotCQkJCSBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9MT0NBTF9MT09QQkFDS19NT0RFKTsKLQkJYnJlYWs7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9leGFyNzMwMC5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9leGFyNzMwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDIyOTk5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvZXhhcjczMDAuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogU0JFIDJUM0UzIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkIGRyaXZlciBmb3IgTGludXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGEgZHJpdmVyIHdyaXR0ZW4gYnkgU0JFIEluYy4KLSAqLwotCi0jaW5jbHVkZSAiMnQzZTMuaCIKLSNpbmNsdWRlICJjdHJsLmgiCi0KLXZvaWQgZXhhcjczMDBfaW5pdChzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JZXhhcjczMDBfd3JpdGUoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzEsIDApOwotCi0JLyogZW5hYmxlIGxpbmUgZGVjb2RlZXIgYW5kIGVuY29kZXIgKi8KLQlleGFyNzMwMF93cml0ZShzYywgU0JFXzJUM0UzX0xJVV9SRUdfUkVHMiwgMCk7Ci0JZXhhcjczMDBfd3JpdGUoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzMsIDApOwotCWV4YXI3MzAwX3dyaXRlKHNjLCBTQkVfMlQzRTNfTElVX1JFR19SRUc0LAotCQkgICAgICAgU0JFXzJUM0UzX0xJVV9WQUxfVDNfTU9ERV9TRUxFQ1QgfAotCQkgICAgICAgU0JFXzJUM0UzX0xJVV9WQUxfTE9PUEJBQ0tfT0ZGKTsKLX0KLQotdm9pZCBleGFyNzMwMF9zZXRfbG9vcGJhY2soc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgbW9kZSkKLXsKLQl1MzIgdmFsOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19PRkY6Ci0JY2FzZSBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19SRU1PVEU6Ci0JY2FzZSBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19BTkFMT0c6Ci0JY2FzZSBTQkVfMlQzRTNfTElVX1ZBTF9MT09QQkFDS19ESUdJVEFMOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JdmFsID0gZXhhcjczMDBfcmVhZChzYywgU0JFXzJUM0UzX0xJVV9SRUdfUkVHNCk7Ci0JdmFsICY9IH4oU0JFXzJUM0UzX0xJVV9WQUxfTE9DQUxfTE9PUEJBQ0sgfCBTQkVfMlQzRTNfTElVX1ZBTF9SRU1PVEVfTE9PUEJBQ0spOwotCXZhbCB8PSBtb2RlOwotCWV4YXI3MzAwX3dyaXRlKHNjLCBTQkVfMlQzRTNfTElVX1JFR19SRUc0LCB2YWwpOwotfQotCi12b2lkIGV4YXI3MzAwX3NldF9mcmFtZV90eXBlKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIHR5cGUpCi17Ci0JdTMyIHZhbDsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfQ0JJVDoKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX00xMzoKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX0UzX0c3NTE6Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HODMyOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JdmFsID0gZXhhcjczMDBfcmVhZChzYywgU0JFXzJUM0UzX0xJVV9SRUdfUkVHNCk7Ci0JdmFsICY9IH4oU0JFXzJUM0UzX0xJVV9WQUxfVDNfTU9ERV9TRUxFQ1QgfAotCQkgU0JFXzJUM0UzX0xJVV9WQUxfRTNfTU9ERV9TRUxFQ1QpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9UM19DQklUOgotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfTTEzOgotCQl2YWwgfD0gU0JFXzJUM0UzX0xJVV9WQUxfVDNfTU9ERV9TRUxFQ1Q7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfRTNfRzc1MToKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX0UzX0c4MzI6Ci0JCXZhbCB8PSBTQkVfMlQzRTNfTElVX1ZBTF9FM19NT0RFX1NFTEVDVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCWV4YXI3MzAwX3dyaXRlKHNjLCBTQkVfMlQzRTNfTElVX1JFR19SRUc0LCB2YWwpOwotfQotCi0KLXZvaWQgZXhhcjczMDBfdHJhbnNtaXRfYWxsX29uZXNfb25vZmYoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgbW9kZSkKLXsKLQlpZiAoc2MtPnAudHJhbnNtaXRfYWxsX29uZXMgPT0gbW9kZSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfT046Ci0JCWV4YXI3MzAwX3NldF9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzEsCi0JCQkJIFNCRV8yVDNFM19MSVVfVkFMX1RSQU5TTUlUX0FMTF9PTkVTKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfT0ZGOgotCQlleGFyNzMwMF9jbGVhcl9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzEsCi0JCQkJICAgU0JFXzJUM0UzX0xJVV9WQUxfVFJBTlNNSVRfQUxMX09ORVMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0Jc2MtPnAudHJhbnNtaXRfYWxsX29uZXMgPSBtb2RlOwotfQotCi12b2lkIGV4YXI3MzAwX3JlY2VpdmVfZXF1YWxpemF0aW9uX29ub2ZmKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIG1vZGUpCi17Ci0JaWYgKHNjLT5wLnJlY2VpdmVfZXF1YWxpemF0aW9uID09IG1vZGUpCi0JCXJldHVybjsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgU0JFXzJUM0UzX09GRjoKLQkJZXhhcjczMDBfc2V0X2JpdChzYywgU0JFXzJUM0UzX0xJVV9SRUdfUkVHMiwKLQkJCQkgU0JFXzJUM0UzX0xJVV9WQUxfUkVDRUlWRV9FUVVBTElaQVRJT05fRElTQUJMRSk7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX09OOgotCQlleGFyNzMwMF9jbGVhcl9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzIsCi0JCQkJICAgU0JFXzJUM0UzX0xJVV9WQUxfUkVDRUlWRV9FUVVBTElaQVRJT05fRElTQUJMRSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+cC5yZWNlaXZlX2VxdWFsaXphdGlvbiA9IG1vZGU7Ci19Ci0KLXZvaWQgZXhhcjczMDBfbGluZV9idWlsZF9vdXRfb25vZmYoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgbW9kZSkKLXsKLQlpZiAoc2MtPnAubGluZV9idWlsZF9vdXQgPT0gbW9kZSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfT0ZGOgotCQlleGFyNzMwMF9zZXRfYml0KHNjLCBTQkVfMlQzRTNfTElVX1JFR19SRUcxLAotCQkJCSBTQkVfMlQzRTNfTElVX1ZBTF9UUkFOU01JVF9MRVZFTF9TRUxFQ1QpOwotCQlleGFyNzMwMF9yZWNlaXZlX2VxdWFsaXphdGlvbl9vbm9mZihzYywgU0JFXzJUM0UzX09GRik7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzX09OOgotCQlleGFyNzMwMF9jbGVhcl9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzEsCi0JCQkJICAgU0JFXzJUM0UzX0xJVV9WQUxfVFJBTlNNSVRfTEVWRUxfU0VMRUNUKTsKLQkJZXhhcjczMDBfcmVjZWl2ZV9lcXVhbGl6YXRpb25fb25vZmYoc2MsIFNCRV8yVDNFM19PTik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+cC5saW5lX2J1aWxkX291dCA9IG1vZGU7Ci19Ci0KLS8qIFRPRE8gLSB3aGF0IGFib3V0IGVuY29kZXIgaW4gcmF3IG1vZGU/Pz8gZGlzYWJsZSBpdCB0b28/ICovCi12b2lkIGV4YXI3MzAwX3VuaXBvbGFyX29ub2ZmKHN0cnVjdCBjaGFubmVsICpzYywgdTMyIG1vZGUpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTQkVfMlQzRTNfT0ZGOgotCQlleGFyNzMwMF9jbGVhcl9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzMsCi0JCQkJICAgU0JFXzJUM0UzX0xJVV9WQUxfREVDT0RFUl9ESVNBQkxFKTsKLQkJZXhhcjczMDBfY2xlYXJfYml0KHNjLCBTQkVfMlQzRTNfTElVX1JFR19SRUcxLAotCQkJCSAgIFNCRV8yVDNFM19MSVVfVkFMX1RSQU5TTUlUX0JJTkFSWV9EQVRBKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfT046Ci0JCWV4YXI3MzAwX3NldF9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzMsCi0JCQkJIFNCRV8yVDNFM19MSVVfVkFMX0RFQ09ERVJfRElTQUJMRSk7Ci0JCWV4YXI3MzAwX3NldF9iaXQoc2MsIFNCRV8yVDNFM19MSVVfUkVHX1JFRzEsCi0JCQkJIFNCRV8yVDNFM19MSVVfVkFMX1RSQU5TTUlUX0JJTkFSWV9EQVRBKTsKLQkJYnJlYWs7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9pbnRyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL2ludHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJmNzRiNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL2ludHIuYworKysgL2Rldi9udWxsCkBAIC0xLDU3OSArMCwwIEBACi0vKgotICogU0JFIDJUM0UzIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkIGRyaXZlciBmb3IgTGludXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGEgZHJpdmVyIHdyaXR0ZW4gYnkgU0JFIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaGRsYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgIjJ0M2UzLmgiCi0KLWlycXJldHVybl90IHQzZTNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKnNjID0gZGV2X3RvX3ByaXYoZGV2X2luc3RhbmNlKTsKLQl1MzIgdmFsOwotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwotCi0Jc2MtPmludGVycnVwdF9hY3RpdmUgPSAxOwotCi0JdmFsID0gY3BsZF9yZWFkKHNjLCBTQkVfMlQzRTNfQ1BMRF9SRUdfUElDU1IpOwotCi0JaWYgKHZhbCAmIFNCRV8yVDNFM19DUExEX1ZBTF9SRUNFSVZFX0xPU1NfT0ZfU0lHTkFMX0NIQU5HRSkgewotCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LAotCQkJIlJ4IExPUyBDaG5nIEludCByPSUwMnggKExPU3xPT0Y9JTAyeClcbiIsCi0JCQl2YWwsIChzYy0+cy5MT1MgPDwgNCkgfCBzYy0+cy5PT0YpOwotCQljcGxkX0xPU191cGRhdGUoc2MpOwotCQlyZXQgPSBJUlFfSEFORExFRDsKLQl9Ci0KLQlpZiAodmFsICYgU0JFXzJUM0UzX0NQTERfVkFMX0lOVEVSUlVQVF9GUk9NX0VUSEVSTkVUX0FTU0VSVEVEKSB7Ci0JCWRjX2ludHIoc2MpOwotCQlyZXQgPSBJUlFfSEFORExFRDsKLQl9Ci0KLQlpZiAodmFsICYgU0JFXzJUM0UzX0NQTERfVkFMX0lOVEVSUlVQVF9GUk9NX0ZSQU1FUl9BU1NFUlRFRCkgewotCQlleGFyNzI1MF9pbnRyKHNjKTsKLQkJcmV0ID0gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JLyoKLQkgIHdlIGRvbid0IGNhcmUgYWJvdXQgb3RoZXIgaW50ZXJydXB0IHNvdXJjZXMgKERNTywgTE9TLCBMQ1YpIGJlY2F1c2UKLQkgIHRoZXkgYXJlIGhhbmRsZWQgYnkgRnJhbWVyIHRvbwotCSovCi0KLQlzYy0+aW50ZXJydXB0X2FjdGl2ZSA9IDA7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBkY19pbnRyKHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgdmFsOwotCi0JLyogZGlzYWJsZSBldGhlcm5ldCBpbnRlcnJ1cHRzICovCi0JLyogZ3JyciB0aGlzIGNsZWFycyBpbnRlcnJ1cHQgc3VtbWFyeSBiaXRzICEhISAqLwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0lOVEVSUlVQVF9FTkFCTEUsIDApOwotCi0Jd2hpbGUgKCh2YWwgPSBkY19yZWFkKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1NUQVRVUykpICYKLQkgICAgICAgKFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9QUk9DRVNTX1NUT1BQRUQgfAotCQlTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfQlVGRkVSX1VOQVZBSUxBQkxFIHwKLQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX0lOVEVSUlVQVCB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfVU5ERVJGTE9XIHwKLQkJU0JFXzJUM0UzXzIxMTQzX1ZBTF9UUkFOU01JVF9CVUZGRVJfVU5BVkFJTEFCTEUgfAotCQlTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX1BST0NFU1NfU1RPUFBFRCB8Ci0JCVNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfSU5URVJSVVBUKSkgewotCQlkY193cml0ZShzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19TVEFUVVMsIHZhbCk7Ci0KLQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogRXRoZXJuZXQgY29udHJvbGxlciBpbnRlcnJ1cHQhIChDU1I1ID0gJTA4WClcbiIsCi0JCQl2YWwpOwotCi0JCWlmICh2YWwgJiAoU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX0lOVEVSUlVQVCB8Ci0JCQkgICBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfQlVGRkVSX1VOQVZBSUxBQkxFIHwKLQkJCSAgIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9QUk9DRVNTX1NUT1BQRUQpKSB7Ci0JCQlpZiAodmFsICYgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUNFSVZFX0lOVEVSUlVQVCkKLQkJCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LAotCQkJCQkiUmVjZWl2ZSBpbnRlcnJ1cHQgKExPUz0lZCwgT09GPSVkKVxuIiwKLQkJCQkJc2MtPnMuTE9TLCBzYy0+cy5PT0YpOwotCQkJaWYgKHZhbCAmIFNCRV8yVDNFM18yMTE0M19WQUxfUkVDRUlWRV9CVUZGRVJfVU5BVkFJTEFCTEUpCi0JCQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwKLQkJCQkJIlJlY2VpdmUgYnVmZmVyIHVuYXZhaWxhYmxlXG4iKTsKLQkJCWlmICh2YWwgJiBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQ0VJVkVfUFJPQ0VTU19TVE9QUEVEKQotCQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJCSJSZWNlaXZlIHByb2Nlc3Mgc3RvcHBlZFxuIik7Ci0JCQlkY19pbnRyX3J4KHNjKTsKLQkJfQotCi0JCWlmICh2YWwgJiBTQkVfMlQzRTNfMjExNDNfVkFMX1RSQU5TTUlUX1VOREVSRkxPVykgewotCQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIlRyYW5zbWl0IHVuZGVyZmxvd1xuIik7Ci0JCQlkY19pbnRyX3R4X3VuZGVyZmxvdyhzYyk7Ci0JCX0KLQotCQlpZiAodmFsICYgKFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfQlVGRkVSX1VOQVZBSUxBQkxFIHwKLQkJCSAgIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfSU5URVJSVVBUIHwKLQkJCSAgIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfUFJPQ0VTU19TVE9QUEVEKSkgewotCQkJaWYgKHZhbCAmIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfSU5URVJSVVBUKQotCQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsICJUcmFuc21pdCBpbnRlcnJ1cHRcbiIpOwotCQkJaWYgKHZhbCAmIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfQlVGRkVSX1VOQVZBSUxBQkxFKQotCQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJCSJUcmFuc21pdCBidWZmZXIgdW5hdmFpbGFibGVcbiIpOwotCQkJaWYgKHZhbCAmIFNCRV8yVDNFM18yMTE0M19WQUxfVFJBTlNNSVRfUFJPQ0VTU19TVE9QUEVEKQotCQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJCSJUcmFuc21pdCBwcm9jZXNzIHN0b3BwZWRcbiIpOwotCQkJZGNfaW50cl90eChzYyk7Ci0JCX0KLQl9Ci0KLQkvKiBlbmFibGUgZXRoZXJuZXQgaW50ZXJydXB0cyAqLwotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0lOVEVSUlVQVF9FTkFCTEUsCi0JCSBzYy0+ZXRoZXIuaW50ZXJydXB0X2VuYWJsZV9tYXNrKTsKLX0KLQotdm9pZCBkY19pbnRyX3J4KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgY3VycmVudF9yZWFkOwotCXUzMiBlcnJvcl9tYXNrLCBlcnJvcjsKLQlzdHJ1Y3QgdDNlM19yeF9kZXNjICpjdXJyZW50X2Rlc2M7Ci0Jc3RydWN0IHNrX2J1ZmYgKm0sICptMjsKLQl1bnNpZ25lZCByY3ZfbGVuOwotCi0Jc2MtPnJjdl9jb3VudCsrOyAvKiBmb3IgdGhlIGFjdGl2aXR5IExFRCAqLwotCi0JY3VycmVudF9yZWFkID0gc2MtPmV0aGVyLnJ4X3JpbmdfY3VycmVudF9yZWFkOwotCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsICJpbnRyX3J4IGN1cnJlbnRfcmVhZCA9ICVkXG4iLCBjdXJyZW50X3JlYWQpOwotCi0JLyogd2hlbiBldGhlcm5ldCBsb29wYmFjayBpcyBzZXQsIGlnbm9yZSBmcmFtZXIgc2lnbmFscyAqLwotCWlmICgoc2MtPnAubG9vcGJhY2sgIT0gU0JFXzJUM0UzX0xPT1BCQUNLX0VUSEVSTkVUKSAmJiBzYy0+cy5PT0YpIHsKLQkJd2hpbGUgKCEoc2MtPmV0aGVyLnJ4X3JpbmdbY3VycmVudF9yZWFkXS5yZGVzMCAmCi0JCQkgU0JFXzJUM0UzX1JYX0RFU0NfMjExNDNfT1dOKSkgewotCQkJY3VycmVudF9kZXNjID0gJnNjLT5ldGhlci5yeF9yaW5nW2N1cnJlbnRfcmVhZF07Ci0JCQljdXJyZW50X2Rlc2MtPnJkZXMxICY9IFNCRV8yVDNFM19SWF9ERVNDX0VORF9PRl9SSU5HIHwKLQkJCQlTQkVfMlQzRTNfUlhfREVTQ19TRUNPTkRfQUREUkVTU19DSEFJTkVEOwotCQkJY3VycmVudF9kZXNjLT5yZGVzMSB8PSBTQkVfMlQzRTNfTVRVOwotCQkJY3VycmVudF9kZXNjLT5yZGVzMCA9IFNCRV8yVDNFM19SWF9ERVNDXzIxMTQzX09XTjsKLQkJCWN1cnJlbnRfcmVhZCA9IChjdXJyZW50X3JlYWQgKyAxKSAlIFNCRV8yVDNFM19SWF9ERVNDX1JJTkdfU0laRTsKLQkJfQotCQlzYy0+ZXRoZXIucnhfcmluZ19jdXJyZW50X3JlYWQgPSBjdXJyZW50X3JlYWQ7Ci0JCXJldHVybjsKLQl9Ci0KLQl3aGlsZSAoIShzYy0+ZXRoZXIucnhfcmluZ1tjdXJyZW50X3JlYWRdLnJkZXMwICYKLQkJIFNCRV8yVDNFM19SWF9ERVNDXzIxMTQzX09XTikpIHsKLQkJY3VycmVudF9kZXNjID0gJnNjLT5ldGhlci5yeF9yaW5nW2N1cnJlbnRfcmVhZF07Ci0KLQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgInJkZXMwOiAlMDhYICAgICAgICByZGVzMTogJTA4WFxuIiwKLQkJCWN1cnJlbnRfZGVzYy0+cmRlczAsIGN1cnJlbnRfZGVzYy0+cmRlczEpOwotCi0JCW0gPSBzYy0+ZXRoZXIucnhfZGF0YVtjdXJyZW50X3JlYWRdOwotCQlyY3ZfbGVuID0gKGN1cnJlbnRfZGVzYy0+cmRlczAgJiBTQkVfMlQzRTNfUlhfREVTQ19GUkFNRV9MRU5HVEgpID4+Ci0JCQlTQkVfMlQzRTNfUlhfREVTQ19GUkFNRV9MRU5HVEhfU0hJRlQ7Ci0KLQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIm1idWYgd2FzIHJlY2VpdmVkIChtYnVmIGxlbiA9ICVkKVxuIiwKLQkJCXJjdl9sZW4pOwotCi0JCXN3aXRjaCAoc2MtPnAuY3JjKSB7Ci0JCWNhc2UgU0JFXzJUM0UzX0NSQ18xNjoKLQkJCXJjdl9sZW4gLT0gU0JFXzJUM0UzX0NSQzE2X0xFTkdUSDsKLQkJCWJyZWFrOwotCQljYXNlIFNCRV8yVDNFM19DUkNfMzI6Ci0JCQlyY3ZfbGVuIC09IFNCRV8yVDNFM19DUkMzMl9MRU5HVEg7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGN1cnJlbnRfZGVzYy0+cmRlczAgJiBTQkVfMlQzRTNfUlhfREVTQ19MQVNUX0RFU0MpIHsKLQotCQkJLyogVE9ETzogaXMgY29sbGlzaW9uIHBvc3NpYmxlPyAqLwotCQkJZXJyb3JfbWFzayA9IFNCRV8yVDNFM19SWF9ERVNDX0RFU0NfRVJST1IgfAotCQkJCVNCRV8yVDNFM19SWF9ERVNDX0NPTExJU0lPTl9TRUVOIHwKLQkJCQlTQkVfMlQzRTNfUlhfREVTQ19EUklCQkxJTkdfQklUOwotCi0JCQlzd2l0Y2ggKHNjLT5wLmZyYW1lX21vZGUpIHsKLQkJCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX01PREVfSERMQzoKLQkJCQllcnJvcl9tYXNrIHw9IFNCRV8yVDNFM19SWF9ERVNDX01JSV9FUlJPUjsKLQkJCQlpZiAoc2MtPnAuY3JjID09IFNCRV8yVDNFM19DUkNfMzIpCi0JCQkJCWVycm9yX21hc2sgfD0gU0JFXzJUM0UzX1JYX0RFU0NfQ1JDX0VSUk9SOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTQkVfMlQzRTNfRlJBTUVfTU9ERV9UUkFOU1BBUkVOVDoKLQkJCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX01PREVfUkFXOgotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQllcnJvcl9tYXNrID0gMDsKLQkJCX0KLQotCQkJaWYgKHNjLT5zLkxPUykgewotCQkJCWVycm9yX21hc2sgJj0gfihTQkVfMlQzRTNfUlhfREVTQ19EUklCQkxJTkdfQklUIHwKLQkJCQkJCVNCRV8yVDNFM19SWF9ERVNDX01JSV9FUlJPUik7Ci0JCQl9Ci0KLQkJCWVycm9yID0gY3VycmVudF9kZXNjLT5yZGVzMCAmIGVycm9yX21hc2s7Ci0JCQlpZiAoZXJyb3IpIHsKLQkJCQlzYy0+cy5pbl9lcnJvcnMrKzsKLQkJCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LAotCQkJCQkiZXJyb3IgaW50ZXJydXB0OiBOT19FUlJPUl9NRVNTQUdFID0gJWRcbiIsCi0JCQkJCXNjLT5yLmZsYWdzICYgU0JFXzJUM0UzX0ZMQUdfTk9fRVJST1JfTUVTU0FHRVMgPyAxIDogMCk7Ci0KLQkJCQljdXJyZW50X2Rlc2MtPnJkZXMxICY9IFNCRV8yVDNFM19SWF9ERVNDX0VORF9PRl9SSU5HIHwKLQkJCQkJU0JFXzJUM0UzX1JYX0RFU0NfU0VDT05EX0FERFJFU1NfQ0hBSU5FRDsKLQkJCQljdXJyZW50X2Rlc2MtPnJkZXMxIHw9IFNCRV8yVDNFM19NVFU7Ci0JCQkJY3VycmVudF9kZXNjLT5yZGVzMCA9IFNCRV8yVDNFM19SWF9ERVNDXzIxMTQzX09XTjsKLQotCQkJCWlmIChlcnJvciAmIFNCRV8yVDNFM19SWF9ERVNDX0RFU0NfRVJST1IpIHsKLQkJCQkJaWYgKCEoc2MtPnIuZmxhZ3MgJiBTQkVfMlQzRTNfRkxBR19OT19FUlJPUl9NRVNTQUdFUykpCi0JCQkJCQlkZXZfZXJyKCZzYy0+cGRldi0+ZGV2LAotCQkJCQkJCSJTQkUgMlQzRTM6IGRlc2NyaXB0b3IgZXJyb3JcbiIpOwotCQkJCQlzYy0+cy5pbl9lcnJvcl9kZXNjKys7Ci0JCQkJfQotCi0JCQkJaWYgKGVycm9yICYgU0JFXzJUM0UzX1JYX0RFU0NfQ09MTElTSU9OX1NFRU4pIHsKLQkJCQkJaWYgKCEoc2MtPnIuZmxhZ3MgJiBTQkVfMlQzRTNfRkxBR19OT19FUlJPUl9NRVNTQUdFUykpCi0JCQkJCQlkZXZfZXJyKCZzYy0+cGRldi0+ZGV2LAotCQkJCQkJCSJTQkUgMlQzRTM6IGNvbGxpc2lvbiBzZWVuXG4iKTsKLQkJCQkJc2MtPnMuaW5fZXJyb3JfY29sbCsrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChlcnJvciAmIFNCRV8yVDNFM19SWF9ERVNDX0RSSUJCTElOR19CSVQpIHsKLQkJCQkJCWlmICghKHNjLT5yLmZsYWdzICYgU0JFXzJUM0UzX0ZMQUdfTk9fRVJST1JfTUVTU0FHRVMpKQotCQkJCQkJCWRldl9lcnIoJnNjLT5wZGV2LT5kZXYsCi0JCQkJCQkJCSJTQkUgMlQzRTM6IGRyaWJibGluZyBiaXRzIGVycm9yXG4iKTsKLQkJCQkJCXNjLT5zLmluX2Vycm9yX2RyaWIrKzsKLQkJCQkJfQotCi0JCQkJCWlmIChlcnJvciAmIFNCRV8yVDNFM19SWF9ERVNDX0NSQ19FUlJPUikgewotCQkJCQkJaWYgKCEoc2MtPnIuZmxhZ3MgJiBTQkVfMlQzRTNfRkxBR19OT19FUlJPUl9NRVNTQUdFUykpCi0JCQkJCQkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwKLQkJCQkJCQkJIlNCRSAyVDNFMzogY3JjIGVycm9yXG4iKTsKLQkJCQkJCXNjLT5zLmluX2Vycm9yX2NyYysrOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKGVycm9yICYgU0JFXzJUM0UzX1JYX0RFU0NfTUlJX0VSUk9SKSB7Ci0JCQkJCWlmICghKHNjLT5yLmZsYWdzICYgU0JFXzJUM0UzX0ZMQUdfTk9fRVJST1JfTUVTU0FHRVMpKQotCQkJCQkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogbWlpIGVycm9yXG4iKTsKLQkJCQkJc2MtPnMuaW5fZXJyb3JfbWlpKys7Ci0JCQkJfQotCi0JCQkJY3VycmVudF9yZWFkID0gKGN1cnJlbnRfcmVhZCArIDEpICUgU0JFXzJUM0UzX1JYX0RFU0NfUklOR19TSVpFOwotCQkJCXNjLT5yLmZsYWdzIHw9IFNCRV8yVDNFM19GTEFHX05PX0VSUk9SX01FU1NBR0VTOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0KLQkJY3VycmVudF9kZXNjLT5yZGVzMSAmPSBTQkVfMlQzRTNfUlhfREVTQ19FTkRfT0ZfUklORyB8Ci0JCQlTQkVfMlQzRTNfUlhfREVTQ19TRUNPTkRfQUREUkVTU19DSEFJTkVEOwotCQljdXJyZW50X2Rlc2MtPnJkZXMxIHw9IFNCRV8yVDNFM19NVFU7Ci0KLQkJaWYgKHJjdl9sZW4gPiAxNjAwKSB7Ci0JCQlzYy0+cy5pbl9lcnJvcnMrKzsKLQkJCXNjLT5zLmluX2Ryb3BwZWQrKzsKLQkJCWlmICghKHNjLT5yLmZsYWdzICYgU0JFXzJUM0UzX0ZMQUdfTk9fRVJST1JfTUVTU0FHRVMpKQotCQkJCWRldl9lcnIoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IG92ZXJzaXplZCByeDogcmRlczAgPSAlMDhYXG4iLAotCQkJCQljdXJyZW50X2Rlc2MtPnJkZXMwKTsKLQkJfSBlbHNlIHsKLQkJCW0yID0gZGV2X2FsbG9jX3NrYihNQ0xCWVRFUyk7Ci0JCQlpZiAobTIgIT0gTlVMTCkgewotCQkJCWN1cnJlbnRfZGVzYy0+cmRlczIgPSB2aXJ0X3RvX3BoeXMobTItPmRhdGEpOwotCQkJCXNjLT5ldGhlci5yeF9kYXRhW2N1cnJlbnRfcmVhZF0gPSBtMjsKLQkJCQlzYy0+cy5pbl9wYWNrZXRzKys7Ci0JCQkJc2MtPnMuaW5fYnl0ZXMgKz0gcmN2X2xlbjsKLQkJCQltLT5kZXYgPSBzYy0+ZGV2OwotCQkJCXNrYl9wdXQobSwgcmN2X2xlbik7Ci0JCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIobSk7Ci0JCQkJbS0+cHJvdG9jb2wgPSBoZGxjX3R5cGVfdHJhbnMobSwgbS0+ZGV2KTsKLQkJCQluZXRpZl9yeChtKTsKLQotCQkJCS8qIGdvb2QgcGFja2V0IHdhcyByZWNlaXZlZCBzbyB3ZSB3aWxsIHNob3cgZXJyb3IgbWVzc2FnZXMgYWdhaW4uLi4gKi8KLQkJCQlpZiAoc2MtPnIuZmxhZ3MgJiBTQkVfMlQzRTNfRkxBR19OT19FUlJPUl9NRVNTQUdFUykgewotCQkJCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LAotCQkJCQkJInNldHRpbmcgRVJST1JfTUVTU0FHRVMtPjBcbiIpOwotCQkJCQlzYy0+ci5mbGFncyAmPSB+U0JFXzJUM0UzX0ZMQUdfTk9fRVJST1JfTUVTU0FHRVM7Ci0JCQkJfQotCi0JCQl9IGVsc2UgewotCQkJCXNjLT5zLmluX2Vycm9ycysrOwotCQkJCXNjLT5zLmluX2Ryb3BwZWQrKzsKLQkJCX0KLQkJfQotCQljdXJyZW50X2Rlc2MtPnJkZXMwID0gU0JFXzJUM0UzX1JYX0RFU0NfMjExNDNfT1dOOwotCQljdXJyZW50X3JlYWQgPSAoY3VycmVudF9yZWFkICsgMSkgJSBTQkVfMlQzRTNfUlhfREVTQ19SSU5HX1NJWkU7Ci0JfQotCi0Jc2MtPmV0aGVyLnJ4X3JpbmdfY3VycmVudF9yZWFkID0gY3VycmVudF9yZWFkOwotCi0JZGNfd3JpdGUoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfUkVDRUlWRV9QT0xMX0RFTUFORCwgMHhGRkZGRkZGRik7Ci19Ci0KLXZvaWQgZGNfaW50cl90eChzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JdTMyIGN1cnJlbnRfcmVhZCwgY3VycmVudF93cml0ZTsKLQl1MzIgbGFzdF9zZWdtZW50LCBlcnJvcjsKLQlzdHJ1Y3QgdDNlM190eF9kZXNjICpjdXJyZW50X2Rlc2M7Ci0KLQlzcGluX2xvY2soJnNjLT5ldGhlci50eF9sb2NrKTsKLQotCWN1cnJlbnRfcmVhZCA9IHNjLT5ldGhlci50eF9yaW5nX2N1cnJlbnRfcmVhZDsKLQljdXJyZW50X3dyaXRlID0gc2MtPmV0aGVyLnR4X3JpbmdfY3VycmVudF93cml0ZTsKLQotCXdoaWxlIChjdXJyZW50X3JlYWQgIT0gY3VycmVudF93cml0ZSkgewotCQljdXJyZW50X2Rlc2MgPSAmc2MtPmV0aGVyLnR4X3JpbmdbY3VycmVudF9yZWFkXTsKLQotCQlpZiAoY3VycmVudF9kZXNjLT50ZGVzMCAmIFNCRV8yVDNFM19SWF9ERVNDXzIxMTQzX09XTikKLQkJCWJyZWFrOwotCi0JCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkidHhlb2Y6IHRkZXMwID0gJTA4WCAgICAgICAgdGRlczEgPSAlMDhYXG4iLAotCQkJY3VycmVudF9kZXNjLT50ZGVzMCwgY3VycmVudF9kZXNjLT50ZGVzMSk7Ci0KLQkJZXJyb3IgPSBjdXJyZW50X2Rlc2MtPnRkZXMwICYgKFNCRV8yVDNFM19UWF9ERVNDX0VSUk9SX1NVTU1BUlkgfAotCQkJCQkgICAgICAgU0JFXzJUM0UzX1RYX0RFU0NfVFJBTlNNSVRfSkFCQkVSX1RJTUVPVVQgfAotCQkJCQkgICAgICAgU0JFXzJUM0UzX1RYX0RFU0NfTE9TU19PRl9DQVJSSUVSIHwKLQkJCQkJICAgICAgIFNCRV8yVDNFM19UWF9ERVNDX05PX0NBUlJJRVIgfAotCQkJCQkgICAgICAgU0JFXzJUM0UzX1RYX0RFU0NfTElOS19GQUlMX1JFUE9SVCB8Ci0JCQkJCSAgICAgICBTQkVfMlQzRTNfVFhfREVTQ19VTkRFUkZMT1dfRVJST1IgfAotCQkJCQkgICAgICAgU0JFXzJUM0UzX1RYX0RFU0NfREVGRkVSRUQpOwotCi0JCWxhc3Rfc2VnbWVudCA9IGN1cnJlbnRfZGVzYy0+dGRlczEgJiBTQkVfMlQzRTNfVFhfREVTQ19MQVNUX1NFR01FTlQ7Ci0KLQkJY3VycmVudF9kZXNjLT50ZGVzMCA9IDA7Ci0JCWN1cnJlbnRfZGVzYy0+dGRlczEgJj0gU0JFXzJUM0UzX1RYX0RFU0NfRU5EX09GX1JJTkcgfAotCQkJU0JFXzJUM0UzX1RYX0RFU0NfU0VDT05EX0FERFJFU1NfQ0hBSU5FRDsKLQkJY3VycmVudF9kZXNjLT50ZGVzMiA9IDA7Ci0JCXNjLT5ldGhlci50eF9mcmVlX2NudCsrOwotCi0JCWlmIChsYXN0X3NlZ21lbnQgIT0gU0JFXzJUM0UzX1RYX0RFU0NfTEFTVF9TRUdNRU5UKSB7Ci0JCQljdXJyZW50X3JlYWQgPSAoY3VycmVudF9yZWFkICsgMSkgJSBTQkVfMlQzRTNfVFhfREVTQ19SSU5HX1NJWkU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0KLQkJaWYgKHNjLT5ldGhlci50eF9kYXRhW2N1cnJlbnRfcmVhZF0pIHsKLQkJCXNjLT5zLm91dF9wYWNrZXRzKys7Ci0JCQlzYy0+cy5vdXRfYnl0ZXMgKz0gc2MtPmV0aGVyLnR4X2RhdGFbY3VycmVudF9yZWFkXS0+bGVuOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2MtPmV0aGVyLnR4X2RhdGFbY3VycmVudF9yZWFkXSk7Ci0JCQlzYy0+ZXRoZXIudHhfZGF0YVtjdXJyZW50X3JlYWRdID0gTlVMTDsKLQkJfQotCi0JCWlmIChlcnJvciA+IDApIHsKLQkJCXNjLT5zLm91dF9lcnJvcnMrKzsKLQotCQkJaWYgKGVycm9yICYgU0JFXzJUM0UzX1RYX0RFU0NfVFJBTlNNSVRfSkFCQkVSX1RJTUVPVVQpIHsKLQkJCQlkZXZfZXJyKCZzYy0+cGRldi0+ZGV2LCAiU0JFIDJUM0UzOiB0cmFuc21pdCBqYWJiZXIgdGltZW91dFxuIik7Ci0JCQkJc2MtPnMub3V0X2Vycm9yX2phYisrOwotCQkJfQotCi0JCQlpZiAoc2MtPnAubG9vcGJhY2sgIT0gU0JFXzJUM0UzX0xPT1BCQUNLX0VUSEVSTkVUKSB7Ci0JCQkJaWYgKGVycm9yICYgU0JFXzJUM0UzX1RYX0RFU0NfTE9TU19PRl9DQVJSSUVSKSB7Ci0JCQkJCWRldl9lcnIoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IGxvc3Mgb2YgY2FycmllclxuIik7Ci0JCQkJCXNjLT5zLm91dF9lcnJvcl9sb3N0X2NhcnIrKzsKLQkJCQl9Ci0KLQkJCQlpZiAoZXJyb3IgJiBTQkVfMlQzRTNfVFhfREVTQ19OT19DQVJSSUVSKSB7Ci0JCQkJCWRldl9lcnIoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IG5vIGNhcnJpZXJcbiIpOwotCQkJCQlzYy0+cy5vdXRfZXJyb3Jfbm9fY2FycisrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGVycm9yICYgU0JFXzJUM0UzX1RYX0RFU0NfTElOS19GQUlMX1JFUE9SVCkgewotCQkJCWRldl9lcnIoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IGxpbmsgZmFpbCByZXBvcnRcbiIpOwotCQkJCXNjLT5zLm91dF9lcnJvcl9saW5rX2ZhaWwrKzsKLQkJCX0KLQotCQkJaWYgKGVycm9yICYgU0JFXzJUM0UzX1RYX0RFU0NfVU5ERVJGTE9XX0VSUk9SKSB7Ci0JCQkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzoiCi0JCQkJCSIgdHJhbnNtaXNzaW9uIHVuZGVyZmxvdyBlcnJvclxuIik7Ci0JCQkJc2MtPnMub3V0X2Vycm9yX3VuZGVyZmxvdysrOwotCQkJCXNwaW5fdW5sb2NrKCZzYy0+ZXRoZXIudHhfbG9jayk7Ci0KLQkJCQlkY19yZXN0YXJ0KHNjKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0KLQkJCWlmIChlcnJvciAmIFNCRV8yVDNFM19UWF9ERVNDX0RFRkZFUkVEKSB7Ci0JCQkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogdHJhbnNtaXNzaW9uIGRlZmVycmVkXG4iKTsKLQkJCQlzYy0+cy5vdXRfZXJyb3JfZGVyZWZlcnJlZCsrOwotCQkJfQotCQl9Ci0KLQkJY3VycmVudF9yZWFkID0gKGN1cnJlbnRfcmVhZCArIDEpICUgU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFOwotCX0KLQotCXNjLT5ldGhlci50eF9yaW5nX2N1cnJlbnRfcmVhZCA9IGN1cnJlbnRfcmVhZDsKLQotCS8qIFJlbGlldmUgZmxvdyBjb250cm9sIHdoZW4gdGhlIFRYIHF1ZXVlIGlzIGRyYWluZWQgYXQgbGVhc3QgaGFsZiB3YXkgKi8KLQlpZiAoc2MtPmV0aGVyLnR4X2Z1bGwgJiYKLQkgICAgKHNjLT5ldGhlci50eF9mcmVlX2NudCA+PSAoU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFIC8gMikpKSB7Ci0JCXNjLT5ldGhlci50eF9mdWxsID0gMDsKLQkJbmV0aWZfd2FrZV9xdWV1ZShzYy0+ZGV2KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnNjLT5ldGhlci50eF9sb2NrKTsKLX0KLQotCi12b2lkIGRjX2ludHJfdHhfdW5kZXJmbG93KHN0cnVjdCBjaGFubmVsICpzYykKLXsKLQl1MzIgdmFsOwotCi0JZGNfdHJhbnNtaXR0ZXJfb25vZmYoc2MsIFNCRV8yVDNFM19PRkYpOwotCi0JdmFsID0gZGNfcmVhZChzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSk7Ci0JZGNfY2xlYXJfYml0cyhzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwKLQkJICAgICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTKTsKLQotCXN3aXRjaCAodmFsICYgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTKSB7Ci0JY2FzZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RIUkVTSE9MRF9DT05UUk9MX0JJVFNfMToKLQkJZGNfc2V0X2JpdHMoc2MtPmFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfT1BFUkFUSU9OX01PREUsCi0JCQkgICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTXzIpOwotCQlicmVhazsKLQljYXNlIFNCRV8yVDNFM18yMTE0M19WQUxfVEhSRVNIT0xEX0NPTlRST0xfQklUU18yOgotCQlkY19zZXRfYml0cyhzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwKLQkJCSAgICBTQkVfMlQzRTNfMjExNDNfVkFMX1RIUkVTSE9MRF9DT05UUk9MX0JJVFNfMyk7Ci0JCWJyZWFrOwotCWNhc2UgU0JFXzJUM0UzXzIxMTQzX1ZBTF9USFJFU0hPTERfQ09OVFJPTF9CSVRTXzM6Ci0JCWRjX3NldF9iaXRzKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX09QRVJBVElPTl9NT0RFLAotCQkJICAgIFNCRV8yVDNFM18yMTE0M19WQUxfVEhSRVNIT0xEX0NPTlRST0xfQklUU180KTsKLQkJYnJlYWs7Ci0JY2FzZSBTQkVfMlQzRTNfMjExNDNfVkFMX1RIUkVTSE9MRF9DT05UUk9MX0JJVFNfNDoKLQlkZWZhdWx0OgotCQlkY19zZXRfYml0cyhzYy0+YWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19PUEVSQVRJT05fTU9ERSwKLQkJCSAgICBTQkVfMlQzRTNfMjExNDNfVkFMX1NUT1JFX0FORF9GT1JXQVJEKTsKLQkJYnJlYWs7Ci0JfQotCi0JZGNfdHJhbnNtaXR0ZXJfb25vZmYoc2MsIFNCRV8yVDNFM19PTik7Ci19Ci0KLQotCi0KLXZvaWQgZXhhcjcyNTBfaW50cihzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JdTMyIHN0YXR1cywgb2xkX09PRjsKLQotCW9sZF9PT0YgPSBzYy0+cy5PT0Y7Ci0KLQlzdGF0dXMgPSBleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19CTE9DS19JTlRFUlJVUFRfU1RBVFVTKTsKLQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LCAiU0JFIDJUM0UzOiBGcmFtZXIgaW50ZXJydXB0ISAoUkVHWzB4MDVdID0gJTAyWClcbiIsIHN0YXR1cyk7Ci0KLQlzd2l0Y2ggKHNjLT5wLmZyYW1lX3R5cGUpIHsKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX0UzX0c3NTE6Ci0JY2FzZSBTQkVfMlQzRTNfRlJBTUVfVFlQRV9FM19HODMyOgotCQlleGFyNzI1MF9FM19pbnRyKHNjLCBzdGF0dXMpOwotCQlicmVhazsKLQotCWNhc2UgU0JFXzJUM0UzX0ZSQU1FX1RZUEVfVDNfQ0JJVDoKLQljYXNlIFNCRV8yVDNFM19GUkFNRV9UWVBFX1QzX00xMzoKLQkJZXhhcjcyNTBfVDNfaW50cihzYywgc3RhdHVzKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlpZiAoc2MtPnMuT09GICE9IG9sZF9PT0YpIHsKLQkJaWYgKHNjLT5zLk9PRikgewotCQkJaWYgKHNjLT5wLmxvb3BiYWNrID09IFNCRV8yVDNFM19MT09QQkFDS19OT05FKSB7Ci0JCQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogRGlzYWJsaW5nIGV0aCBpbnRlcnJ1cHRzXG4iKTsKLQkJCQkvKiB0dXJuIG9mZiBldGhlcm5ldCBpbnRlcnJ1cHRzICovCi0JCQkJZGNfc3RvcF9pbnRyKHNjKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChzYy0+ci5mbGFncyAmIFNCRV8yVDNFM19GTEFHX05FVFdPUktfVVApIHsKLQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IEVuYWJsaW5nIGV0aCBpbnRlcnJ1cHRzXG4iKTsKLQkJCS8qIHN0YXJ0IGludGVycnVwdHMgKi8KLQkJCXNjLT5zLk9PRiA9IDE7Ci0JCQlkY19pbnRyX3J4KHNjKTsKLQkJCXNjLT5zLk9PRiA9IDA7Ci0JCQlpZiAoc2MtPnAucmVjZWl2ZXJfb24pIHsKLQkJCQlkY19yZWNlaXZlcl9vbm9mZihzYywgU0JFXzJUM0UzX09GRik7Ci0JCQkJZGNfcmVjZWl2ZXJfb25vZmYoc2MsIFNCRV8yVDNFM19PTik7Ci0JCQl9Ci0JCQlkY19zdGFydF9pbnRyKHNjKTsKLQkJfQotCX0KLX0KLQotCi12b2lkIGV4YXI3MjUwX1QzX2ludHIoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgYmxvY2tfc3RhdHVzKQotewotCXUzMiBzdGF0dXMsIHJlc3VsdDsKLQotCWlmIChibG9ja19zdGF0dXMgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9JTlRFUlJVUFRfU1RBVFVTKSB7Ci0JCXN0YXR1cyA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0lOVEVSUlVQVF9TVEFUVVMpOwotCi0JCWlmIChzdGF0dXMpIHsKLQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJIkZyYW1lciBpbnRlcnJ1cHQgVDMgUlggKFJFR1sweDEzXSA9ICUwMlgpXG4iLAotCQkJCXN0YXR1cyk7Ci0KLQkJCXJlc3VsdCA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTKTsKLQotCQkJY3BsZF9MT1NfdXBkYXRlKHNjKTsKLQotCQkJaWYgKHN0YXR1cyAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX1QzX1JYX09PRl9JTlRFUlJVUFRfU1RBVFVTKSB7Ci0JCQkJc2MtPnMuT09GID0gcmVzdWx0ICYgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfT09GID8gMSA6IDA7Ci0JCQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwKLQkJCQkJIkZyYW1lciBpbnRlcnJ1cHQgVDM6IE9PRiAoJWQpXG4iLAotCQkJCQlzYy0+cy5PT0YpOwotCQkJfQotCi0JCQlleGFyNzI1MF93cml0ZShzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfUlhfSU5URVJSVVBUX0VOQUJMRSwKLQkJCQkgICAgICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVDNfUlhfTE9TX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9UM19SWF9PT0ZfSU5URVJSVVBUX0VOQUJMRSk7Ci0JCQkJfQotCi0JCXN0YXR1cyA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1JYX0ZFQUNfSU5URVJSVVBUX0VOQUJMRV9TVEFUVVMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LAotCQkJCSJGcmFtZXIgaW50ZXJydXB0IFQzIFJYIChSRUdbMHgxN10gPSAlMDJYKVxuIiwKLQkJCQlzdGF0dXMpOwotCQl9Ci0KLQkJc3RhdHVzID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfVDNfUlhfTEFQRF9DT05UUk9MKTsKLQkJaWYgKHN0YXR1cykKLQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJIkZyYW1lciBpbnRlcnJ1cHQgVDMgUlggKFJFR1sweDE4XSA9ICUwMlgpXG4iLAotCQkJCXN0YXR1cyk7Ci0JfQotCi0KLQlpZiAoYmxvY2tfc3RhdHVzICYgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfVFhfSU5URVJSVVBUX1NUQVRVUykgewotCQlzdGF0dXMgPSBleGFyNzI1MF9yZWFkKHNjLCBTQkVfMlQzRTNfRlJBTUVSX1JFR19UM19UWF9GRUFDX0NPTkZJR1VSQVRJT05fU1RBVFVTKTsKLQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogRnJhbWVyIGludGVycnVwdCBUMyBUWCAoUkVHWzB4MzFdID0gJTAyWClcbiIsCi0JCQlzdGF0dXMpOwotCi0JCXN0YXR1cyA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX1QzX1RYX0xBUERfU1RBVFVTKTsKLQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogRnJhbWVyIGludGVycnVwdCBUMyBUWCAoUkVHWzB4MzRdID0gJTAyWClcbiIsCi0JCQlzdGF0dXMpOwotCX0KLX0KLQotCi12b2lkIGV4YXI3MjUwX0UzX2ludHIoc3RydWN0IGNoYW5uZWwgKnNjLCB1MzIgYmxvY2tfc3RhdHVzKQotewotCXUzMiBzdGF0dXMsIHJlc3VsdDsKLQotCWlmIChibG9ja19zdGF0dXMgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9SWF9JTlRFUlJVUFRfU1RBVFVTKSB7Ci0JCXN0YXR1cyA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9TVEFUVVNfMSk7Ci0KLQkJaWYgKHN0YXR1cykgewotCQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwKLQkJCQkiRnJhbWVyIGludGVycnVwdCBFMyBSWCAoUkVHWzB4MTRdID0gJTAyWClcbiIsCi0JCQkJc3RhdHVzKTsKLQotCQkJcmVzdWx0ID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfUlhfQ09ORklHVVJBVElPTl9TVEFUVVNfMik7Ci0KLQkJCWNwbGRfTE9TX3VwZGF0ZShzYyk7Ci0KLQkJCWlmIChzdGF0dXMgJiBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9PT0ZfSU5URVJSVVBUX1NUQVRVUykgewotCQkJCXNjLT5zLk9PRiA9IHJlc3VsdCAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX0UzX1JYX09PRiA/IDEgOiAwOwotCQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJCSJGcmFtZXIgaW50ZXJydXB0IEUzOiBPT0YgKCVkKVxuIiwKLQkJCQkJc2MtPnMuT09GKTsKLQkJCX0KLQotCQkJZXhhcjcyNTBfd3JpdGUoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9FTkFCTEVfMSwKLQkJCQkgICAgICAgU0JFXzJUM0UzX0ZSQU1FUl9WQUxfRTNfUlhfT09GX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJCSAgICAgICBTQkVfMlQzRTNfRlJBTUVSX1ZBTF9FM19SWF9MT1NfSU5URVJSVVBUX0VOQUJMRQotCQkJCSk7Ci0JCQkJfQotCi0JCXN0YXR1cyA9IGV4YXI3MjUwX3JlYWQoc2MsIFNCRV8yVDNFM19GUkFNRVJfUkVHX0UzX1JYX0lOVEVSUlVQVF9TVEFUVVNfMik7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsCi0JCQkJIkZyYW1lciBpbnRlcnJ1cHQgRTMgUlggKFJFR1sweDE1XSA9ICUwMlgpXG4iLAotCQkJCXN0YXR1cyk7Ci0KLQkJfQotCi0JfQotCi0JaWYgKGJsb2NrX3N0YXR1cyAmIFNCRV8yVDNFM19GUkFNRVJfVkFMX1RYX0lOVEVSUlVQVF9TVEFUVVMpIHsKLQkJc3RhdHVzID0gZXhhcjcyNTBfcmVhZChzYywgU0JFXzJUM0UzX0ZSQU1FUl9SRUdfRTNfVFhfTEFQRF9TVEFUVVMpOwotCQlkZXZfZGJnKCZzYy0+cGRldi0+ZGV2LCAiU0JFIDJUM0UzOiBGcmFtZXIgaW50ZXJydXB0IEUzIFRYIChSRUdbMHgzNF0gPSAlMDJYKVxuIiwKLQkJCXN0YXR1cyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTk0N2IxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0vKgotICogU0JFIDJUM0UzIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkIGRyaXZlciBmb3IgTGludXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGEgZHJpdmVyIHdyaXR0ZW4gYnkgU0JFIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlICIydDNlMy5oIgotI2luY2x1ZGUgImN0cmwuaCIKLQotLyogQWxsIGFjY2VzcyB0byByZWdpc3RlcnMgZG9uZSB2aWEgdGhlIDIxMTQzIG9uIHBvcnQgMCBtdXN0IGJlCi0gKiBwcm90ZWN0ZWQgdmlhIHRoZSBjYXJkLT5ib290cm9tX2xvY2suICovCi0KLS8qIHByaXZhdGUgZGVmaW5lIHRvIGJlIHVzZWQgaGVyZSBvbmx5IC0gbXVzdCBiZSBwcm90ZWN0ZWQgYnkgY2FyZC0+Ym9vdHJvbV9sb2NrICovCi0jZGVmaW5lIGNwbGRfd3JpdGVfbm9sb2NrKGNoYW5uZWwsIHJlZywgdmFsKQkJCVwKLQlib290cm9tX3dyaXRlKChjaGFubmVsKSwgQ1BMRF9NQVBfUkVHKHJlZywgY2hhbm5lbCksIHZhbCkKLQotdTMyIGNwbGRfcmVhZChzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCwgdTMyIHJlZykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci0JdmFsID0gYm9vdHJvbV9yZWFkKChjaGFubmVsKSwgQ1BMRF9NQVBfUkVHKHJlZywgY2hhbm5lbCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fbG9jaywgZmxhZ3MpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBY2Nlc3MgdmlhIEJvb3RST00gcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXUzMiBib290cm9tX3JlYWQoc3RydWN0IGNoYW5uZWwgKmNoYW5uZWwsIHUzMiByZWcpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9hZGRyOwotCXUzMiByZXN1bHQ7Ci0KLQkvKiBzZWxlY3QgQm9vdFJPTSBhZGRyZXNzICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9QUk9HUkFNTUlOR19BRERSRVNTLCByZWcgJiAweDNGRkZGKTsKLQotCS8qIHNlbGVjdCByZWFkaW5nIGZyb20gQm9vdFJPTSAqLwotCWRjX3dyaXRlKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQsCi0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQURfT1BFUkFUSU9OIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfQk9PVF9ST01fU0VMRUNUKTsKLQotCXVkZWxheSgyKTsgLyogMjAgUENJIGN5Y2xlcyAqLwotCi0JLyogcmVhZCBmcm9tIEJvb3RST00gKi8KLQlyZXN1bHQgPSBkY19yZWFkKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQpICYgMHhmZjsKLQotCS8qIHJlc2V0IENTUjkgKi8KLQlkY193cml0ZShhZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JPT1RfUk9NX1NFUklBTF9ST01fQU5EX01JSV9NQU5BR0VNRU5ULCAwKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgYm9vdHJvbV93cml0ZShzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBjaGFubmVsLT5jYXJkLT5ib290cm9tX2FkZHI7Ci0KLQkvKiBzZWxlY3QgQm9vdFJPTSBhZGRyZXNzICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9QUk9HUkFNTUlOR19BRERSRVNTLCByZWcgJiAweDNGRkZGKTsKLQotCS8qIHNlbGVjdCB3cml0dGluZyB0byBCb290Uk9NICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfV1JJVEVfT1BFUkFUSU9OIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfQk9PVF9ST01fU0VMRUNUIHwKLQkJICh2YWwgJiAweGZmKSk7Ci0KLQl1ZGVsYXkoMik7IC8qIDIwIFBDSSBjeWNsZXMgKi8KLQotCS8qIHJlc2V0IENTUjkgKi8KLQlkY193cml0ZShhZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JPT1RfUk9NX1NFUklBTF9ST01fQU5EX01JSV9NQU5BR0VNRU5ULCAwKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQWNjZXNzIHZpYSBTZXJpYWwgSS9PIHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdTMyIHNlcmlhbHJvbV9yZWFkX2JpdChzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBjaGFubmVsLT5jYXJkLT5ib290cm9tX2FkZHI7Ci0JdTMyIGJpdDsKLQotCWRjX3dyaXRlKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQsCi0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQURfT1BFUkFUSU9OIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9TRUxFQ1QgfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX0NMT0NLIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9DSElQX1NFTEVDVCk7CS8qIGNsb2NrIGhpZ2ggKi8KLQotCWJpdCA9IChkY19yZWFkKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQpICYKLQkgICAgICAgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX0RBVEFfT1VUKSA+IDAgPyAxIDogMDsKLQotCWRjX3dyaXRlKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQsCi0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQURfT1BFUkFUSU9OIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9TRUxFQ1QgfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX0NISVBfU0VMRUNUKTsJLyogY2xvY2sgbG93ICovCi0KLQlyZXR1cm4gYml0OwotfQotCi1zdGF0aWMgdm9pZCBzZXJpYWxyb21fd3JpdGVfYml0KHN0cnVjdCBjaGFubmVsICpjaGFubmVsLCB1MzIgYml0KQotewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fYWRkcjsKLQl1MzIgbGFzdGJpdCA9IC0xOwotCi0JYml0ICY9IDE7Ci0KLQlpZiAoYml0ICE9IGxhc3RiaXQpIHsKLQkJZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCwKLQkJCSBTQkVfMlQzRTNfMjExNDNfVkFMX1dSSVRFX09QRVJBVElPTiB8Ci0JCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVCB8Ci0JCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX0NISVBfU0VMRUNUIHwKLQkJCSAoYml0IDw8IDIpKTsgLyogY2xvY2sgbG93ICovCi0KLQkJbGFzdGJpdCA9IGJpdDsKLQl9Ci0KLQlkY193cml0ZShhZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JPT1RfUk9NX1NFUklBTF9ST01fQU5EX01JSV9NQU5BR0VNRU5ULAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9XUklURV9PUEVSQVRJT04gfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVCB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fQ0xPQ0sgfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX0NISVBfU0VMRUNUIHwKLQkJIChiaXQgPDwgMikpOyAvKiBjbG9jayBoaWdoICovCi0KLQlkY193cml0ZShhZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JPT1RfUk9NX1NFUklBTF9ST01fQU5EX01JSV9NQU5BR0VNRU5ULAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9XUklURV9PUEVSQVRJT04gfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVCB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fQ0hJUF9TRUxFQ1QgfAotCQkgKGJpdCA8PCAyKSk7IC8qIGNsb2NrIGxvdyAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQWNjZXNzIHRvIFNlcmlhbFJPTSAoZWVwcm9tKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXUzMiB0M2UzX2VlcHJvbV9yZWFkX3dvcmQoc3RydWN0IGNoYW5uZWwgKmNoYW5uZWwsIHUzMiBhZGRyZXNzKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fYWRkcjsKLQl1MzIgaSwgdmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlhZGRyZXNzICY9IDB4M2Y7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci0KLQkvKiBzZWxlY3QgY29ycmVjdCBTZXJpYWwgQ2hpcCAqLwotCWNwbGRfd3JpdGVfbm9sb2NrKGNoYW5uZWwsIFNCRV8yVDNFM19DUExEX1JFR19TRVJJQUxfQ0hJUF9TRUxFQ1QsCi0JCQkgIFNCRV8yVDNFM19DUExEX1ZBTF9FRVBST01fU0VMRUNUKTsKLQotCS8qIHNlbGVjdCByZWFkaW5nIGZyb20gU2VyaWFsIEkvTyBCdXMgKi8KLQlkY193cml0ZShhZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JPT1RfUk9NX1NFUklBTF9ST01fQU5EX01JSV9NQU5BR0VNRU5ULAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9SRUFEX09QRVJBVElPTiB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fU0VMRUNUIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9DSElQX1NFTEVDVCk7ICAgICAgICAvKiBjbG9jayBsb3cgKi8KLQotCS8qIHNlbGVjdCByZWFkIG9wZXJhdGlvbiAqLwotCXNlcmlhbHJvbV93cml0ZV9iaXQoY2hhbm5lbCwgMCk7Ci0Jc2VyaWFscm9tX3dyaXRlX2JpdChjaGFubmVsLCAxKTsKLQlzZXJpYWxyb21fd3JpdGVfYml0KGNoYW5uZWwsIDEpOwotCXNlcmlhbHJvbV93cml0ZV9iaXQoY2hhbm5lbCwgMCk7Ci0KLQlmb3IgKGkgPSAweDIwOyBpOyBpID4+PSAxKQotCQlzZXJpYWxyb21fd3JpdGVfYml0KGNoYW5uZWwsIGFkZHJlc3MgJiBpID8gMSA6IDApOwotCi0JdmFsID0gMDsKLQlmb3IgKGkgPSAweDgwMDA7IGk7IGkgPj49IDEpCi0JCXZhbCB8PSAoc2VyaWFscm9tX3JlYWRfYml0KGNoYW5uZWwpID8gaSA6IDApOwotCi0JLyogUmVzZXQgMjExNDMncyBDU1I5ICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfUkVBRF9PUEVSQVRJT04gfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVCB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fQ0hJUF9TRUxFQ1QpOyAgICAgICAgLyogY2xvY2sgbG93ICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCwgMCk7Ci0KLQkvKiBVbnNlbGVjdCBTZXJpYWwgQ2hpcCAqLwotCWNwbGRfd3JpdGVfbm9sb2NrKGNoYW5uZWwsIFNCRV8yVDNFM19DUExEX1JFR19TRVJJQUxfQ0hJUF9TRUxFQ1QsIDApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gbnRvaHModmFsKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQWNjZXNzIHRvIEZyYW1lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXUzMiBleGFyNzI1MF9yZWFkKHN0cnVjdCBjaGFubmVsICpjaGFubmVsLCB1MzIgcmVnKQotewotCXUzMiByZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFubmVsLT5jYXJkLT5ib290cm9tX2xvY2ssIGZsYWdzKTsKLQotCXJlc3VsdCA9IGJvb3Ryb21fcmVhZChjaGFubmVsLCBjcGxkX3JlZ19tYXBbU0JFXzJUM0UzX0NQTERfUkVHX0ZSQU1FUl9CQVNFX0FERFJFU1NdCi0JCQkgICAgICBbY2hhbm5lbC0+aC5zbG90XSArICh0M2UzX2ZyYW1lcl9yZWdfbWFwW3JlZ10gPDwgMikpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIGV4YXI3MjUwX3dyaXRlKHN0cnVjdCBjaGFubmVsICpjaGFubmVsLCB1MzIgcmVnLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl2YWwgJj0gMHhmZjsKLQljaGFubmVsLT5mcmFtZXJfcmVnc1tyZWddID0gdmFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fbG9jaywgZmxhZ3MpOwotCi0JYm9vdHJvbV93cml0ZShjaGFubmVsLCBjcGxkX3JlZ19tYXBbU0JFXzJUM0UzX0NQTERfUkVHX0ZSQU1FUl9CQVNFX0FERFJFU1NdCi0JCSAgICAgIFtjaGFubmVsLT5oLnNsb3RdICsgKHQzZTNfZnJhbWVyX3JlZ19tYXBbcmVnXSA8PCAyKSwgdmFsKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fbG9jaywgZmxhZ3MpOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBY2Nlc3MgdG8gTElVCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdTMyIGV4YXI3MzAwX3JlYWQoc3RydWN0IGNoYW5uZWwgKmNoYW5uZWwsIHUzMiByZWcpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9hZGRyLCBmbGFnczsKLQl1MzIgaSwgdmFsOwotCi0JLyogc2VsZWN0IGNvcnJlY3QgU2VyaWFsIENoaXAgKi8KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFubmVsLT5jYXJkLT5ib290cm9tX2xvY2ssIGZsYWdzKTsKLQotCWNwbGRfd3JpdGVfbm9sb2NrKGNoYW5uZWwsIFNCRV8yVDNFM19DUExEX1JFR19TRVJJQUxfQ0hJUF9TRUxFQ1QsCi0JCQkgIGNwbGRfdmFsX21hcFtTQkVfMlQzRTNfQ1BMRF9WQUxfTElVX1NFTEVDVF1bY2hhbm5lbC0+aC5zbG90XSk7Ci0KLQkvKiBzZWxlY3QgcmVhZGluZyBmcm9tIFNlcmlhbCBJL08gQnVzICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfUkVBRF9PUEVSQVRJT04gfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVCB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fQ0hJUF9TRUxFQ1QpOwkvKiBjbG9jayBsb3cgKi8KLQotCS8qIHNlbGVjdCByZWFkIG9wZXJhdGlvbiAqLwotCXNlcmlhbHJvbV93cml0ZV9iaXQoY2hhbm5lbCwgMSk7Ci0KLQkvKiBFeGFyNzMwMCByZWdpc3RlciBhZGRyZXNzIGlzIDQgYml0IGxvbmcgKi8KLQlyZWcgPSB0M2UzX2xpdV9yZWdfbWFwW3JlZ107Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgcmVnID4+PSAxKSAvKiA0IGJpdHMgb2YgU2VyaWFsUk9NIGFkZHJlc3MgKi8KLQkJc2VyaWFscm9tX3dyaXRlX2JpdChjaGFubmVsLCByZWcgJiAxKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQkvKiByZW1haW5pbmcgMyBiaXRzIG9mIFNlcmlhbFJPTSBhZGRyZXNzICovCi0JCXNlcmlhbHJvbV93cml0ZV9iaXQoY2hhbm5lbCwgMCk7Ci0KLQl2YWwgPSAwOyAvKiBFeGFyNzMwMCByZWdpc3RlciB2YWx1ZSBpcyA1IGJpdCBsb25nICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykJLyogOCBiaXRzIG9mIFNlcmlhbFJPTSB2YWx1ZSAqLwotCQl2YWwgKz0gKHNlcmlhbHJvbV9yZWFkX2JpdChjaGFubmVsKSA8PCBpKTsKLQotCS8qIFJlc2V0IDIxMTQzJ3MgQ1NSOSAqLwotCWRjX3dyaXRlKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQsCi0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1JFQURfT1BFUkFUSU9OIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9TRUxFQ1QgfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX0NISVBfU0VMRUNUKTsJLyogY2xvY2sgbG93ICovCi0JZGNfd3JpdGUoYWRkciwgU0JFXzJUM0UzXzIxMTQzX1JFR19CT09UX1JPTV9TRVJJQUxfUk9NX0FORF9NSUlfTUFOQUdFTUVOVCwgMCk7Ci0KLQkvKiBVbnNlbGVjdCBTZXJpYWwgQ2hpcCAqLwotCWNwbGRfd3JpdGVfbm9sb2NrKGNoYW5uZWwsIFNCRV8yVDNFM19DUExEX1JFR19TRVJJQUxfQ0hJUF9TRUxFQ1QsIDApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+Y2FyZC0+Ym9vdHJvbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi12b2lkIGV4YXI3MzAwX3dyaXRlKHN0cnVjdCBjaGFubmVsICpjaGFubmVsLCB1MzIgcmVnLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fYWRkciwgZmxhZ3M7Ci0JdTMyIGk7Ci0KLQljaGFubmVsLT5saXVfcmVnc1tyZWddID0gdmFsOwotCi0JLyogc2VsZWN0IGNvcnJlY3QgU2VyaWFsIENoaXAgKi8KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFubmVsLT5jYXJkLT5ib290cm9tX2xvY2ssIGZsYWdzKTsKLQotCWNwbGRfd3JpdGVfbm9sb2NrKGNoYW5uZWwsIFNCRV8yVDNFM19DUExEX1JFR19TRVJJQUxfQ0hJUF9TRUxFQ1QsCi0JCQkgIGNwbGRfdmFsX21hcFtTQkVfMlQzRTNfQ1BMRF9WQUxfTElVX1NFTEVDVF1bY2hhbm5lbC0+aC5zbG90XSk7Ci0KLQkvKiBzZWxlY3Qgd3JpdHRpbmcgdG8gU2VyaWFsIEkvTyBCdXMgKi8KLQlkY193cml0ZShhZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX0JPT1RfUk9NX1NFUklBTF9ST01fQU5EX01JSV9NQU5BR0VNRU5ULAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9XUklURV9PUEVSQVRJT04gfAotCQkgU0JFXzJUM0UzXzIxMTQzX1ZBTF9TRVJJQUxfUk9NX1NFTEVDVCB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fQ0hJUF9TRUxFQ1QpOwkvKiBjbG9jayBsb3cgKi8KLQotCS8qIHNlbGVjdCB3cml0ZSBvcGVyYXRpb24gKi8KLQlzZXJpYWxyb21fd3JpdGVfYml0KGNoYW5uZWwsIDApOwotCi0JLyogRXhhcjczMDAgcmVnaXN0ZXIgYWRkcmVzcyBpcyA0IGJpdCBsb25nICovCi0JcmVnID0gdDNlM19saXVfcmVnX21hcFtyZWddOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsJLyogNCBiaXRzICovCi0JCXNlcmlhbHJvbV93cml0ZV9iaXQoY2hhbm5lbCwgcmVnICYgMSk7Ci0JCXJlZyA+Pj0gMTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykJLyogcmVtYWluaW5nIDMgYml0cyBvZiBTZXJpYWxST00gYWRkcmVzcyAqLwotCQlzZXJpYWxyb21fd3JpdGVfYml0KGNoYW5uZWwsIDApOwotCi0JLyogRXhhcjczMDAgcmVnaXN0ZXIgdmFsdWUgaXMgNSBiaXQgbG9uZyAqLwotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJc2VyaWFscm9tX3dyaXRlX2JpdChjaGFubmVsLCB2YWwgJiAxKTsKLQkJdmFsID4+PSAxOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQkvKiByZW1haW5pbmcgMyBiaXRzIG9mIFNlcmlhbFJPTSB2YWx1ZSAqLwotCQlzZXJpYWxyb21fd3JpdGVfYml0KGNoYW5uZWwsIDApOwotCi0JLyogUmVzZXQgMjExNDNfQ1NSOSAqLwotCWRjX3dyaXRlKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQsCi0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1dSSVRFX09QRVJBVElPTiB8Ci0JCSBTQkVfMlQzRTNfMjExNDNfVkFMX1NFUklBTF9ST01fU0VMRUNUIHwKLQkJIFNCRV8yVDNFM18yMTE0M19WQUxfU0VSSUFMX1JPTV9DSElQX1NFTEVDVCk7CS8qIGNsb2NrIGxvdyAqLwotCWRjX3dyaXRlKGFkZHIsIFNCRV8yVDNFM18yMTE0M19SRUdfQk9PVF9ST01fU0VSSUFMX1JPTV9BTkRfTUlJX01BTkFHRU1FTlQsIDApOwotCi0JLyogVW5zZWxlY3QgU2VyaWFsIENoaXAgKi8KLQljcGxkX3dyaXRlX25vbG9jayhjaGFubmVsLCBTQkVfMlQzRTNfQ1BMRF9SRUdfU0VSSUFMX0NISVBfU0VMRUNULCAwKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPmNhcmQtPmJvb3Ryb21fbG9jaywgZmxhZ3MpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhlMDM5OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogU0JFIDJUM0UzIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkIGRyaXZlciBmb3IgTGludXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGEgZHJpdmVyIHdyaXR0ZW4gYnkgU0JFIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSAiMnQzZTMuaCIKLQotdm9pZCB0M2UzX2luaXQoc3RydWN0IGNoYW5uZWwgKnNjKQotewotCWNwbGRfaW5pdChzYyk7Ci0JZGNfcmVzZXQoc2MpOwotCWRjX2luaXQoc2MpOwotCWV4YXI3MjUwX2luaXQoc2MpOwotCWV4YXI3MzAwX2luaXQoc2MpOwotfQotCi1pbnQgdDNlM19pZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKnNjID0gZGV2X3RvX3ByaXYoZGV2KTsKLQl1MzIgY3VycmVudF93cml0ZSwgbGFzdF93cml0ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2IyOwotCi0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCXNjLT5zLm91dF9lcnJvcnMrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHNjLT5wLnRyYW5zbWl0dGVyX29uICE9IFNCRV8yVDNFM19PTikgewotCQlzYy0+cy5vdXRfZXJyb3JzKys7Ci0JCXNjLT5zLm91dF9kcm9wcGVkKys7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzYy0+cy5PT0YgJiYgc2MtPnAubG9vcGJhY2sgPT0gU0JFXzJUM0UzX0xPT1BCQUNLX05PTkUpIHsKLQkJc2MtPnMub3V0X2Ryb3BwZWQrKzsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ldGhlci50eF9sb2NrLCBmbGFncyk7Ci0KLQljdXJyZW50X3dyaXRlID0gc2MtPmV0aGVyLnR4X3JpbmdfY3VycmVudF93cml0ZTsKLQlmb3IgKHNrYjIgPSBza2I7IHNrYjIgIT0gTlVMTDsgc2tiMiA9IE5VTEwpIHsKLQkJaWYgKHNrYjItPmxlbikgewotCQkJaWYgKChzYy0+ZXRoZXIudHhfcmluZ1tjdXJyZW50X3dyaXRlXS50ZGVzMSAmCi0JCQkgICAgIFNCRV8yVDNFM19UWF9ERVNDX0JVRkZFUl8xX1NJWkUpID4gMCkKLQkJCQlicmVhazsKLQkJCWN1cnJlbnRfd3JpdGUgPSAoY3VycmVudF93cml0ZSArIDEpICUgU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFOwotCQkJLyoKLQkJCSAqIExlYXZlIGF0IGxlYXN0IDEgdHggZGVzYyBmcmVlIHNvIHRoYXQgZGNfaW50cl90eCgpIGNhbgotCQkJICogaWRlbnRpZnkgZW1wdHkgbGlzdAotCQkJICovCi0JCQlpZiAoY3VycmVudF93cml0ZSA9PSBzYy0+ZXRoZXIudHhfcmluZ19jdXJyZW50X3JlYWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHNrYjIgIT0gTlVMTCkgewotCQluZXRpZl9zdG9wX3F1ZXVlKHNjLT5kZXYpOwotCQlzYy0+ZXRoZXIudHhfZnVsbCA9IDE7Ci0JCWRldl9kYmcoJnNjLT5wZGV2LT5kZXYsICJTQkUgMlQzRTM6IG91dCBvZiBkZXNjcmlwdG9yc1xuIik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5ldGhlci50eF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KLQljdXJyZW50X3dyaXRlID0gbGFzdF93cml0ZSA9IHNjLT5ldGhlci50eF9yaW5nX2N1cnJlbnRfd3JpdGU7Ci0JZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgInNlbmRpbmcgbWJ1ZiAoY3VycmVudF93cml0ZSA9ICVkKVxuIiwKLQkJY3VycmVudF93cml0ZSk7Ci0KLQlmb3IgKHNrYjIgPSBza2I7IHNrYjIgIT0gTlVMTDsgc2tiMiA9IE5VTEwpIHsKLQkJaWYgKHNrYjItPmxlbikgewotCQkJZGV2X2RiZygmc2MtPnBkZXYtPmRldiwKLQkJCQkic2VuZGluZyBtYnVmIChsZW4gPSAlZCwgbmV4dCA9ICVwKVxuIiwKLQkJCQlza2IyLT5sZW4sIE5VTEwpOwotCi0JCQlzYy0+ZXRoZXIudHhfZnJlZV9jbnQtLTsKLQkJCXNjLT5ldGhlci50eF9yaW5nW2N1cnJlbnRfd3JpdGVdLnRkZXMwID0gMDsKLQkJCXNjLT5ldGhlci50eF9yaW5nW2N1cnJlbnRfd3JpdGVdLnRkZXMxICY9Ci0JCQkJU0JFXzJUM0UzX1RYX0RFU0NfRU5EX09GX1JJTkcgfAotCQkJCVNCRV8yVDNFM19UWF9ERVNDX1NFQ09ORF9BRERSRVNTX0NIQUlORUQ7Ci0vKiBESVNBQkxFX1BBRERJTkcgc29tZXRpbWVzIGdldHMgbG9zdCBzb21laG93LCBoYW5kcyBvZmYuLi4gKi8KLQkJCXNjLT5ldGhlci50eF9yaW5nW2N1cnJlbnRfd3JpdGVdLnRkZXMxIHw9Ci0JCQkJU0JFXzJUM0UzX1RYX0RFU0NfRElTQUJMRV9QQURESU5HIHwgc2tiMi0+bGVuOwotCi0JCQlpZiAoY3VycmVudF93cml0ZSA9PSBzYy0+ZXRoZXIudHhfcmluZ19jdXJyZW50X3dyaXRlKSB7Ci0JCQkJc2MtPmV0aGVyLnR4X3JpbmdbY3VycmVudF93cml0ZV0udGRlczEgfD0KLQkJCQkJU0JFXzJUM0UzX1RYX0RFU0NfRklSU1RfU0VHTUVOVDsKLQkJCX0gZWxzZSB7Ci0JCQkJc2MtPmV0aGVyLnR4X3JpbmdbY3VycmVudF93cml0ZV0udGRlczAgPQotCQkJCQlTQkVfMlQzRTNfVFhfREVTQ18yMTE0M19PV047Ci0JCQl9Ci0KLQkJCXNjLT5ldGhlci50eF9yaW5nW2N1cnJlbnRfd3JpdGVdLnRkZXMyID0gdmlydF90b19waHlzKHNrYjItPmRhdGEpOwotCQkJc2MtPmV0aGVyLnR4X2RhdGFbY3VycmVudF93cml0ZV0gPSBOVUxMOwotCi0JCQlsYXN0X3dyaXRlID0gY3VycmVudF93cml0ZTsKLQkJCWN1cnJlbnRfd3JpdGUgPSAoY3VycmVudF93cml0ZSArIDEpICUgU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFOwotCQl9Ci0JfQotCi0Jc2MtPmV0aGVyLnR4X2RhdGFbbGFzdF93cml0ZV0gPSBza2I7Ci0Jc2MtPmV0aGVyLnR4X3JpbmdbbGFzdF93cml0ZV0udGRlczEgfD0KLQkJU0JFXzJUM0UzX1RYX0RFU0NfTEFTVF9TRUdNRU5UIHwKLQkJU0JFXzJUM0UzX1RYX0RFU0NfSU5URVJSVVBUX09OX0NPTVBMRVRJT047Ci0Jc2MtPmV0aGVyLnR4X3Jpbmdbc2MtPmV0aGVyLnR4X3JpbmdfY3VycmVudF93cml0ZV0udGRlczAgfD0KLQkJU0JFXzJUM0UzX1RYX0RFU0NfMjExNDNfT1dOOwotCXNjLT5ldGhlci50eF9yaW5nX2N1cnJlbnRfd3JpdGUgPSBjdXJyZW50X3dyaXRlOwotCi0JZGV2X2RiZygmc2MtPnBkZXYtPmRldiwgInR4cHV0OiB0ZGVzMCA9ICUwOFggICAgICAgIHRkZXMxID0gJTA4WFxuIiwKLQkJc2MtPmV0aGVyLnR4X3JpbmdbbGFzdF93cml0ZV0udGRlczAsCi0JCXNjLT5ldGhlci50eF9yaW5nW2xhc3Rfd3JpdGVdLnRkZXMxKTsKLQotCWRjX3dyaXRlKHNjLT5hZGRyLCBTQkVfMlQzRTNfMjExNDNfUkVHX1RSQU5TTUlUX1BPTExfREVNQU5ELAotCQkgMHhmZmZmZmZmZik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+ZXRoZXIudHhfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0KLXZvaWQgdDNlM19yZWFkX2NhcmRfc2VyaWFsX251bWJlcihzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlzYy0+ZXRoZXIuY2FyZF9zZXJpYWxfbnVtYmVyW2ldID0gdDNlM19lZXByb21fcmVhZF93b3JkKHNjLCAxMCArIGkpOwotCi0JbmV0ZGV2X2luZm8oc2MtPmRldiwgIlNCRSB3YW5QTUMtMlQzRTMgc2VyaWFsIG51bWJlcjogJTA0WCUwNFglMDRYXG4iLAotCQkgICAgc2MtPmV0aGVyLmNhcmRfc2VyaWFsX251bWJlclswXSwKLQkJICAgIHNjLT5ldGhlci5jYXJkX3NlcmlhbF9udW1iZXJbMV0sCi0JCSAgICBzYy0+ZXRoZXIuY2FyZF9zZXJpYWxfbnVtYmVyWzJdKTsKLX0KLQotLyoKLSAgYml0IDAgbGVkMSAoZ3JlZW4pCi0gIGJpdCAxIGxlZDEgKHllbGxvdykKLQotICBiaXQgMiBsZWQyIChncmVlbikKLSAgYml0IDMgbGVkMiAoeWVsbG93KQotCi0gIGJpdCA0IGxlZDMgKGdyZWVuKQotICBiaXQgNSBsZWQzICh5ZWxsb3cpCi0KLSAgYml0IDYgbGVkNCAoZ3JlZW4pCi0gIGJpdCA3IGxlZDQgKHllbGxvdykKLSovCi0KLXZvaWQgdXBkYXRlX2xlZChzdHJ1Y3QgY2hhbm5lbCAqc2MsIGludCBibGlua2VyKQotewotCWludCBsZWRzOwotCWlmIChzYy0+cy5MT1MpCi0JCWxlZHMgPSAwOyAvKiBsZWQxID0gb2ZmICovCi0JZWxzZSBpZiAoc2MtPnMuT09GKQotCQlsZWRzID0gMjsgLyogbGVkMSA9IHllbGxvdyAqLwotCWVsc2UgaWYgKChibGlua2VyICYgMSkgJiYgc2MtPnJjdl9jb3VudCkgewotCQlsZWRzID0gMDsgLyogbGVkMSA9IG9mZiAqLwotCQlzYy0+cmN2X2NvdW50ID0gMDsKLQl9IGVsc2UKLQkJbGVkcyA9IDE7IC8qIGxlZDEgPSBncmVlbiAqLwotCWNwbGRfd3JpdGUoc2MsIFNCRV8yVDNFM19DUExEX1JFR19MRURSLCBsZWRzKTsKLQlzYy0+bGVkcyA9IGxlZHM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL21hcHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvbWFwcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTQ5NDUwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvbWFwcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBTQkUgMlQzRTMgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQgZHJpdmVyIGZvciBMaW51eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYSBkcml2ZXIgd3JpdHRlbiBieSBTQkUgSW5jLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlICIydDNlMy5oIgotCi1jb25zdCB1MzIgY3BsZF9yZWdfbWFwW11bMl0gPSB7Ci0JeyAweDAwMDAsIDB4MDA4MCB9LCAvKiAwIC0gUG9ydCBDb250cm9sIFJlZ2lzdGVyIEEgKFBDUkEpICovCi0JeyAweDAwMDQsIDB4MDA4NCB9LCAvKiAxIC0gUG9ydCBDb250cm9sIFJlZ2lzdGVyIEIgKFBDUkIpICovCi0JeyAweDAwMDgsIDB4MDA4OCB9LCAvKiAyIC0gTENWIENvdW50IFJlZ2lzdGVyIChQTENSKSAqLwotCXsgMHgwMDBjLCAweDAwOGMgfSwgLyogMyAtIExDViBUaHJlc2hvbGQgcmVnaXN0ZXIgKFBMVFIpICovCi0JeyAweDAwMTAsIDB4MDA5MCB9LCAvKiA0IC0gUGF5bG9hZCBGaWxsIFJlZ2lzdGVyIChQUEZSKSAqLwotCXsgMHgwMjAwLCAweDAyMDAgfSwgLyogNSAtIEJvYXJkIElEIC8gRlBHQSBQcm9ncmFtbWluZyBTdGF0dXMgUmVnaXN0ZXIgKi8KLQl7IDB4MDIwNCwgMHgwMjA0IH0sIC8qIDYgLSBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KLQl7IDB4MDgwMCwgMHgxMDAwIH0sIC8qIDcgLSBGcmFtZXIgUmVnaXN0ZXJzIEJhc2UgQWRkcmVzcyAqLwotCXsgMHgyMDAwLCAweDIwMDAgfSwgLyogOCAtIFNlcmlhbCBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLwotCXsgMHgyMDA0LCAweDIwMDQgfSwgLyogOSAtIFN0YXRpYyBSZXNldCBSZWdpc3RlciAqLwotCXsgMHgyMDA4LCAweDIwMDggfSwgLyogMTAgLSBQdWxzZSBSZXNldCBSZWdpc3RlciAqLwotCXsgMHgyMDBjLCAweDIwMGMgfSwgLyogMTEgLSBGUEdBIFJlY29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotCXsgMHgyMDEwLCAweDIwMTQgfSwgLyogMTIgLSBMRUQgUmVnaXN0ZXIgKExFRFIpICovCi0JeyAweDIwMTgsIDB4MjAxYyB9LCAvKiAxMyAtIExJVSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKFBJU0NSKSAqLwotCXsgMHgyMDIwLCAweDIwMjQgfSwgLyogMTQgLSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChQSUVSKSAqLwotCXsgMHgwMDY4LCAweDAwZTggfSwgLyogMTUgLSBQb3J0IENvbnRyb2wgUmVnaXN0ZXIgQyAoUENSQykgKi8KLQl7IDB4MDA2YywgMHgwMGVjIH0sIC8qIDE2IC0gUG9ydCBCYW5kd2lkdGggU3RhcnQgKFBCV0YpICovCi0JeyAweDAwNzAsIDB4MDBmMCB9LCAvKiAxNyAtIFBvcnQgQmFuZHdpZHRoIFN0b3AgKFBCV0wpICovCi19OwotCi1jb25zdCB1MzIgY3BsZF92YWxfbWFwW11bMl0gPSB7Ci0JeyAweDAxLCAweDAyIH0sIC8qIExJVTEgLyBMSVUyIHNlbGVjdCBmb3IgU2VyaWFsIENoaXAgU2VsZWN0ICovCi0JeyAweDA0LCAweDA4IH0sIC8qIERBQzEgLyBEQUMyIHNlbGVjdCBmb3IgU2VyaWFsIENoaXAgU2VsZWN0ICovCi0JeyAweDAwLCAweDA0IH0sIC8qIExPT1AxIC8gTE9PUDIgLSBzZWxlY3Qgb2YgbG9vcCB0aW1pbmcgc291cmNlICovCi0JeyAweDAxLCAweDAyIH0gIC8qIFBPUlQxIC8gUE9SVDIgLSBzZWxlY3QgTElVIGFuZCBGcmFtZXIgZm9yIHJlc2V0ICovCi19OwotCi1jb25zdCB1MzIgdDNlM19mcmFtZXJfcmVnX21hcFtdID0gewotCTB4MDAsIC8qIDAgLSBPUEVSQVRJTkdfTU9ERSAqLwotCTB4MDEsIC8qIDEgLSBJT19DT05UUk9MICovCi0JMHgwNCwgLyogMiAtIEJMT0NLX0lOVEVSUlVQVF9FTkFCTEUgKi8KLQkweDA1LCAvKiAzIC0gQkxPQ0tfSU5URVJSVVBUX1NUQVRVUyAqLwotCTB4MTAsIC8qIDQgLSBUM19SWF9DT05GSUdVUkFUSU9OX1NUQVRVUywgRTNfUlhfQ09ORklHVVJBVElPTl9TVEFUVVNfMSAqLwotCTB4MTEsIC8qIDUgLSBUM19SWF9TVEFUVVMsIEUzX1JYX0NPTkZJR1VSQVRJT05fU1RBVFVTXzIgKi8KLQkweDEyLCAvKiA2IC0gVDNfUlhfSU5URVJSVVBUX0VOQUJMRSwgRTNfUlhfSU5URVJSVVBUX0VOQUJMRV8xICovCi0JMHgxMywgLyogNyAtIFQzX1JYX0lOVEVSUlVQVF9TVEFUVVMsIEUzX1JYX0lOVEVSUlVQVF9FTkFCTEVfMiAqLwotCTB4MTQsIC8qIDggLSBUM19SWF9TWU5DX0RFVEVDVF9FTkFCTEUsIEUzX1JYX0lOVEVSUlVQVF9TVEFUVVNfMSAqLwotCTB4MTUsIC8qIDkgLSBFM19SWF9JTlRFUlJVUFRfU1RBVFVTXzIgKi8KLQkweDE2LCAvKiAxMCAtIFQzX1JYX0ZFQUMgKi8KLQkweDE3LCAvKiAxMSAtIFQzX1JYX0ZFQUNfSU5URVJSVVBUX0VOQUJMRV9TVEFUVVMgKi8KLQkweDE4LCAvKiAxMiAtIFQzX1JYX0xBUERfQ09OVFJPTCwgRTNfUlhfTEFQRF9DT05UUk9MICovCi0JMHgxOSwgLyogMTMgLSBUM19SWF9MQVBEX1NUQVRVUywgRTNfUlhfTEFQRF9TVEFUVVMgKi8KLQkweDFhLCAvKiAxNCAtIEUzX1JYX05SX0JZVEUsIEUzX1JYX1NFUlZJQ0VfQklUUyAqLwotCTB4MWIsIC8qIDE1IC0gRTNfUlhfR0NfQllURSAqLwotCTB4MzAsIC8qIDE2IC0gVDNfVFhfQ09ORklHVVJBVElPTiwgRTNfVFhfQ09ORklHVVJBVElPTiAqLwotCTB4MzEsIC8qIDE3IC0gVDNfVFhfRkVBQ19DT05GSUdVUkFUSU9OX1NUQVRVUyAqLwotCTB4MzIsIC8qIDE4IC0gVDNfVFhfRkVBQyAqLwotCTB4MzMsIC8qIDE5IC0gVDNfVFhfTEFQRF9DT05GSUdVUkFUSU9OLCBFM19UWF9MQVBEX0NPTkZJR1VSQVRJT04gKi8KLQkweDM0LCAvKiAyMCAtIFQzX1RYX0xBUERfU1RBVFVTLCBFM19UWF9MQVBEX1NUQVRVU19JTlRFUlJVUFQgKi8KLQkweDM1LCAvKiAyMSAtIFQzX1RYX01CSVRfTUFTSywgRTNfVFhfR0NfQllURSwgRTNfVFhfU0VSVklDRV9CSVRTICovCi0JMHgzNiwgLyogMjIgLSBUM19UWF9GQklUX01BU0ssIEUzX1RYX01BX0JZVEUgKi8KLQkweDM3LCAvKiAyMyAtIFQzX1RYX0ZCSVRfTUFTS18yLCBFM19UWF9OUl9CWVRFICovCi0JMHgzOCwgLyogMjQgLSBUM19UWF9GQklUX01BU0tfMyAqLwotCTB4NDgsIC8qIDI1IC0gRTNfVFhfRkExX0VSUk9SX01BU0ssIEUzX1RYX0ZBU19FUlJPUl9NQVNLX1VQUEVSICovCi0JMHg0OSwgLyogMjYgLSBFM19UWF9GQTJfRVJST1JfTUFTSywgRTNfVFhfRkFTX0VSUk9SX01BU0tfTE9XRVIgKi8KLQkweDRhLCAvKiAyNyAtIEUzX1RYX0JJUDhfTUFTSywgRTNfVFhfQklQNF9NQVNLICovCi0JMHg1MCwgLyogMjggLSBQTU9OX0xDVl9FVkVOVF9DT1VOVF9NU0IgKi8KLQkweDUxLCAvKiAyOSAtIFBNT05fTENWX0VWRU5UX0NPVU5UX0xTQiAqLwotCTB4NTIsIC8qIDMwIC0gUE1PTl9GUkFNSU5HX0JJVF9FUlJPUl9FVkVOVF9DT1VOVF9NU0IgKi8KLQkweDUzLCAvKiAzMSAtIFBNT05fRlJBTUlOR19CSVRfRVJST1JfRVZFTlRfQ09VTlRfTFNCICovCi0JMHg1NCwgLyogMzIgLSBQTU9OX1BBUklUWV9FUlJPUl9FVkVOVF9DT1VOVF9NU0IgKi8KLQkweDU1LCAvKiAzMyAtIFBNT05fUEFSSVRZX0VSUk9SX0VWRU5UX0NPVU5UX0xTQiAqLwotCTB4NTYsIC8qIDM0IC0gUE1PTl9GRUJFX0VWRU5UX0NPVU5UX01TQiAqLwotCTB4NTcsIC8qIDM1IC0gUE1PTl9GRUJFX0VWRU5UX0NPVU5UX0xTQiAqLwotCTB4NTgsIC8qIDM2IC0gUE1PTl9DUF9CSVRfRVJST1JfRVZFTlRfQ09VTlRfTVNCICovCi0JMHg1OSwgLyogMzcgLSBQTU9OX0NQX0JJVF9FUlJPUl9FVkVOVF9DT1VOVF9MU0IgKi8KLQkweDZjLCAvKiAzOCAtIFBNT05fSE9MRElOR19SRUdJU1RFUiAqLwotCTB4NmQsIC8qIDM5IC0gT05FX1NFQ09ORF9FUlJPUl9TVEFUVVMgKi8KLQkweDZlLCAvKiA0MCAtIExDVl9PTkVfU0VDT05EX0FDQ1VNVUxBVE9SX01TQiAqLwotCTB4NmYsIC8qIDQxIC0gTENWX09ORV9TRUNPTkRfQUNDVU1VTEFUT1JfTFNCICovCi0JMHg3MCwgLyogNDIgLSBGUkFNRV9QQVJJVFlfRVJST1JfT05FX1NFQ09ORF9BQ0NVTVVMQVRPUl9NU0IgKi8KLQkweDcxLCAvKiA0MyAtIEZSQU1FX1BBUklUWV9FUlJPUl9PTkVfU0VDT05EX0FDQ1VNVUxBVE9SX0xTQiAqLwotCTB4NzIsIC8qIDQ0IC0gRlJBTUVfQ1BfQklUX0VSUk9SX09ORV9TRUNPTkRfQUNDVU1VTEFUT1JfTVNCICovCi0JMHg3MywgLyogNDUgLSBGUkFNRV9DUF9CSVRfRVJST1JfT05FX1NFQ09ORF9BQ0NVTVVMQVRPUl9MU0IgKi8KLQkweDgwLCAvKiA0NiAtIExJTkVfSU5URVJGQUNFX0RSSVZFICovCi0JMHg4MSAgLyogNDcgLSBMSU5FX0lOVEVSRkFDRV9TQ0FOICovCi19OwotCi1jb25zdCB1MzIgdDNlM19saXVfcmVnX21hcFtdID0gewotCTB4MDAsIC8qIFJFRzAgKi8KLQkweDAxLCAvKiBSRUcxICovCi0JMHgwMiwgLyogUkVHMiAqLwotCTB4MDMsIC8qIFJFRzMgKi8KLQkweDA0IC8qIFJFRzQgKi8KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9tb2R1bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmOTNhNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qCi0gKiBTQkUgMlQzRTMgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQgZHJpdmVyIGZvciBMaW51eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYSBkcml2ZXIgd3JpdHRlbiBieSBTQkUgSW5jLgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkbGMuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlICIydDNlMy5oIgotCi1zdGF0aWMgdm9pZCBjaGVja19sZWRzKHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBjYXJkICpjYXJkID0gKHN0cnVjdCBjYXJkICopYXJnOwotCXN0cnVjdCBjaGFubmVsICpjaGFubmVsMCA9ICZjYXJkLT5jaGFubmVsc1swXTsKLQlzdGF0aWMgaW50IGJsaW5rZXI7Ci0KLQl1cGRhdGVfbGVkKGNoYW5uZWwwLCArK2JsaW5rZXIpOwotCWlmIChoYXNfdHdvX3BvcnRzKGNoYW5uZWwwLT5wZGV2KSkKLQkJdXBkYXRlX2xlZCgmY2FyZC0+Y2hhbm5lbHNbMV0sIGJsaW5rZXIpOwotCi0JY2FyZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAvIDEwOwotCWFkZF90aW1lcigmY2FyZC0+dGltZXIpOwotfQotCi1zdGF0aWMgdm9pZCB0M2UzX3JlbW92ZV9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpjaGFubmVsKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gY2hhbm5lbC0+cGRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2hhbm5lbC0+ZGV2OwotCi0JLyogc3lzdGVtIGhhbmdzIGlmIGJvYXJkIGFzc2VydHMgaXJxIHdoaWxlIG1vZHVsZSBpcyB1bmxvYWRlZCAqLwotCWNwbGRfc3RvcF9pbnRyKGNoYW5uZWwpOwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCWRjX2Ryb3BfZGVzY3JpcHRvcl9saXN0KGNoYW5uZWwpOwotCXVucmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTsKLQlmcmVlX25ldGRldihkZXYpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLX0KLQotc3RhdGljIGludCB0M2UzX2luaXRfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBjYXJkICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIlNCRSAyVDNFMyIpOwotCWlmIChlcnIpCi0JCWdvdG8gZGlzYWJsZTsKLQotCWRldiA9IGFsbG9jX2hkbGNkZXYoY2hhbm5lbCk7Ci0JaWYgKCFkZXYpIHsKLQkJcHJfZXJyKCJPdXQgb2YgbWVtb3J5XG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmcmVlX3JlZ2lvbnM7Ci0JfQotCi0JdDNlM19zY19pbml0KGNoYW5uZWwpOwotCWRldl90b19wcml2KGRldikgPSBjaGFubmVsOwotCi0JY2hhbm5lbC0+cGRldiA9IHBkZXY7Ci0JY2hhbm5lbC0+ZGV2ID0gZGV2OwotCWNoYW5uZWwtPmNhcmQgPSBjYXJkOwotCWNoYW5uZWwtPmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JaWYgKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDEpCi0JCWNoYW5uZWwtPmguc2xvdCA9IDE7Ci0JZWxzZQotCQljaGFubmVsLT5oLnNsb3QgPSAwOwotCi0JZXJyID0gc2V0dXBfZGV2aWNlKGRldiwgY2hhbm5lbCk7Ci0JaWYgKGVycikKLQkJZ290byBmcmVlX2RldjsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChjaGFubmVsLT5wZGV2LCAweDQwLCAmdmFsKTsgLyogbWFzayBzbGVlcCBtb2RlICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChjaGFubmVsLT5wZGV2LCAweDQwLCB2YWwgJiAweDNGRkZGRkZGKTsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGNoYW5uZWwtPnBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjaGFubmVsLT5oLmNhY2hlX3NpemUpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChjaGFubmVsLT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNoYW5uZWwtPmguY29tbWFuZCk7Ci0JdDNlM19pbml0KGNoYW5uZWwpOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0M2UzX2ludHIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKGVycikgewotCQluZXRkZXZfd2FybihjaGFubmVsLT5kZXYsICIlczogY291bGQgbm90IGdldCBpcnE6ICVkXG4iLAotCQkJICAgIGRldi0+bmFtZSwgZGV2LT5pcnEpOwotCQlnb3RvIHVucmVnaXN0ZXJfZGV2OwotCX0KLQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGFubmVsKTsKLQlyZXR1cm4gMDsKLQotdW5yZWdpc3Rlcl9kZXY6Ci0JdW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpOwotZnJlZV9kZXY6Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLWZyZWVfcmVnaW9uczoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotZGlzYWJsZToKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdDNlM19yZW1vdmVfY2FyZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGNhcmQgKmNhcmQgPSBjaGFubmVsMC0+Y2FyZDsKLQotCWRlbF90aW1lcl9zeW5jKCZjYXJkLT50aW1lcik7Ci0JaWYgKGhhc190d29fcG9ydHMoY2hhbm5lbDAtPnBkZXYpKSB7Ci0JCXQzZTNfcmVtb3ZlX2NoYW5uZWwoJmNhcmQtPmNoYW5uZWxzWzFdKTsKLQkJcGNpX2Rldl9wdXQoY2FyZC0+Y2hhbm5lbHNbMV0ucGRldik7Ci0JfQotCXQzZTNfcmVtb3ZlX2NoYW5uZWwoY2hhbm5lbDApOwotCWtmcmVlKGNhcmQpOwotfQotCi1zdGF0aWMgaW50IHQzZTNfaW5pdF9jYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCS8qIHBkZXYgcG9pbnRzIHRvIGNoYW5uZWwgIzAgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjEgPSBOVUxMOwotCXN0cnVjdCBjYXJkICpjYXJkOwotCWludCBjaGFubmVscyA9IDEsIGVycjsKLQotCWlmIChoYXNfdHdvX3BvcnRzKHBkZXYpKSB7Ci0JCXdoaWxlICgocGRldjEgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfMjExNDIsCi0JCQkJCSAgICAgICBQQ0lfVkVORE9SX0lEX1NCRSwgUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDEsCi0JCQkJCSAgICAgICBwZGV2MSkpKQotCQkJaWYgKHBkZXYxLT5idXMgPT0gcGRldi0+YnVzICYmCi0JCQkgICAgcGRldjEtPmRldmZuID09IHBkZXYtPmRldmZuICsgOCAvKiBuZXh0IGRldmljZSBvbiB0aGUgc2FtZSBidXMgKi8pCi0JCQkJYnJlYWs7IC8qIGZvdW5kIHRoZSBzZWNvbmQgY2hhbm5lbCAqLwotCi0JCWlmICghcGRldjEpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGZpbmQgdGhlIHNlY29uZCBjaGFubmVsXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCWNoYW5uZWxzID0gMjsKLQkJLyogaG9sZHMgdGhlIHJlZmVyZW5jZSBmb3IgcGRldjEgKi8KLQl9Ci0KLQljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhcmQpICsgY2hhbm5lbHMgKiBzaXplb2Yoc3RydWN0IGNoYW5uZWwpLAotCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+Ym9vdHJvbV9sb2NrKTsKLQljYXJkLT5ib290cm9tX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0KLQllcnIgPSB0M2UzX2luaXRfY2hhbm5lbCgmY2FyZC0+Y2hhbm5lbHNbMF0sIHBkZXYsIGNhcmQpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZV9jYXJkOwotCi0JaWYgKGNoYW5uZWxzID09IDIpIHsKLQkJZXJyID0gdDNlM19pbml0X2NoYW5uZWwoJmNhcmQtPmNoYW5uZWxzWzFdLCBwZGV2MSwgY2FyZCk7Ci0JCWlmIChlcnIpIHsKLQkJCXQzZTNfcmVtb3ZlX2NoYW5uZWwoJmNhcmQtPmNoYW5uZWxzWzBdKTsKLQkJCWdvdG8gZnJlZV9jYXJkOwotCQl9Ci0JfQotCi0JLyogc3RhcnQgTEVEIHRpbWVyICovCi0JaW5pdF90aW1lcigmY2FyZC0+dGltZXIpOwotCWNhcmQtPnRpbWVyLmZ1bmN0aW9uID0gY2hlY2tfbGVkczsKLQljYXJkLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaIC8gMTA7Ci0JY2FyZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNhcmQ7Ci0JYWRkX3RpbWVyKCZjYXJkLT50aW1lcik7Ci0JcmV0dXJuIDA7Ci0KLWZyZWVfY2FyZDoKLQlrZnJlZShjYXJkKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdDNlM19wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfMjExNDIsCi0JICBQQ0lfVkVORE9SX0lEX1NCRSwgUENJX1NVQkRFVklDRV9JRF9TQkVfVDNFMywgMCwgMCwgMCB9LAotCXsgUENJX1ZFTkRPUl9JRF9ERUMsIFBDSV9ERVZJQ0VfSURfREVDXzIxMTQyLAotCSAgUENJX1ZFTkRPUl9JRF9TQkUsIFBDSV9TVUJERVZJQ0VfSURfU0JFXzJUM0UzX1AwLCAwLCAwLCAwIH0sCi0JLyogY2hhbm5lbCAxIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgY2hhbm5lbCAwICovCi0JeyAwLCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdDNlM19wY2lfZHJpdmVyID0gewotCS5uYW1lICAgICA9ICJTQkUgVDNFMyIsCi0JLmlkX3RhYmxlID0gdDNlM19wY2lfdGJsLAotCS5wcm9iZSAgICA9IHQzZTNfaW5pdF9jYXJkLAotCS5yZW1vdmUgICA9IHQzZTNfcmVtb3ZlX2NhcmQsCi19OwotCi1tb2R1bGVfcGNpX2RyaXZlcih0M2UzX3BjaV9kcml2ZXIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQzZTNfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL25ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9uZXRkZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2Yzk1MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL25ldGRldi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBTQkUgMlQzRTMgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQgZHJpdmVyIGZvciBMaW51eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYSBkcml2ZXIgd3JpdHRlbiBieSBTQkUgSW5jLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRsYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgIjJ0M2UzLmgiCi0KLXN0YXRpYyBpbnQgdDNlM19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqc2MgPSBkZXZfdG9fcHJpdihkZXYpOwotCWludCBjbWRfMnQzZTMsIGxlbiwgcmxlbjsKLQlzdHJ1Y3QgdDNlM19wYXJhbSBwYXJhbTsKLQlzdHJ1Y3QgdDNlM19yZXNwIHJlc3A7Ci0Jdm9pZCBfX3VzZXIgKmRhdGEgPSBpZnItPmlmcl9kYXRhICsgc2l6ZW9mKGNtZF8ydDNlMykgKyBzaXplb2YobGVuKTsKLQotCWlmIChjbWQgPT0gU0lPQ1dBTkRFVikKLQkJcmV0dXJuIGhkbGNfaW9jdGwoZGV2LCBpZnIsIGNtZCk7Ci0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChjbWQgIT0gU0lPQ0RFVlBSSVZBVEUgKyAxNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmNtZF8ydDNlMywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZF8ydDNlMykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJmxlbiwgaWZyLT5pZnJfZGF0YSArIHNpemVvZihjbWRfMnQzZTMpLCBzaXplb2YobGVuKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGxlbiA+IHNpemVvZihwYXJhbSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGxlbikKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbSwgZGF0YSwgbGVuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JdDNlM19pZl9jb25maWcoc2MsIGNtZF8ydDNlMywgKGNoYXIgKikmcGFyYW0sICZyZXNwLCAmcmxlbik7Ci0KLQlpZiAocmxlbikKLQkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCAmcmVzcCwgcmxlbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnQzZTNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5zdGF0cyA9ICZkZXYtPnN0YXRzOwotCXN0cnVjdCBjaGFubmVsICpzYyA9IGRldl90b19wcml2KGRldik7Ci0Jc3RydWN0IHQzZTNfc3RhdHMgKnN0YXRzID0gJnNjLT5zOwotCi0JbWVtc2V0KG5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7Ci0JbnN0YXRzLT5yeF9wYWNrZXRzID0gc3RhdHMtPmluX3BhY2tldHM7Ci0JbnN0YXRzLT50eF9wYWNrZXRzID0gc3RhdHMtPm91dF9wYWNrZXRzOwotCW5zdGF0cy0+cnhfYnl0ZXMgPSBzdGF0cy0+aW5fYnl0ZXM7Ci0JbnN0YXRzLT50eF9ieXRlcyA9IHN0YXRzLT5vdXRfYnl0ZXM7Ci0KLQluc3RhdHMtPnJ4X2Vycm9ycyA9IHN0YXRzLT5pbl9lcnJvcnM7Ci0JbnN0YXRzLT50eF9lcnJvcnMgPSBzdGF0cy0+b3V0X2Vycm9yczsKLQluc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBzdGF0cy0+aW5fZXJyb3JfY3JjOwotCi0KLQluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBzdGF0cy0+aW5fZHJvcHBlZDsKLQluc3RhdHMtPnR4X2Ryb3BwZWQgPSBzdGF0cy0+b3V0X2Ryb3BwZWQ7Ci0JbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9IHN0YXRzLT5vdXRfZXJyb3JfbG9zdF9jYXJyICsKLQkJc3RhdHMtPm91dF9lcnJvcl9ub19jYXJyOwotCi0JcmV0dXJuIG5zdGF0czsKLX0KLQotc3RhdGljIGludCB0M2UzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqc2MgPSBkZXZfdG9fcHJpdihkZXYpOwotCWludCByZXQgPSBoZGxjX29wZW4oZGV2KTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzYy0+ci5mbGFncyB8PSBTQkVfMlQzRTNfRkxBR19ORVRXT1JLX1VQOwotCWRjX3N0YXJ0KGRldl90b19wcml2KGRldikpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHQzZTNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqc2MgPSBkZXZfdG9fcHJpdihkZXYpOwotCWhkbGNfY2xvc2UoZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JZGNfc3RvcChzYyk7Ci0Jc2MtPnIuZmxhZ3MgJj0gflNCRV8yVDNFM19GTEFHX05FVFdPUktfVVA7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdDNlM19hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgZm9vMSwKLQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGZvbzIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdDNlM19vcHMgPSB7Ci0JLm5kb19vcGVuICAgICAgID0gdDNlM19vcGVuLAotCS5uZG9fc3RvcCAgICAgICA9IHQzZTNfY2xvc2UsCi0JLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAotCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKLQkubmRvX2RvX2lvY3RsICAgPSB0M2UzX2lvY3RsLAotCS5uZG9fZ2V0X3N0YXRzICA9IHQzZTNfZ2V0X3N0YXRzLAotfTsKLQotaW50IHNldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2hhbm5lbCAqc2MpCi17Ci0JaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwotCWludCByZXR2YWw7Ci0KLQlkZXYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChzYy0+cGRldiwgMCk7Ci0JZGV2LT5pcnEgPSBzYy0+cGRldi0+aXJxOwotCWRldi0+bmV0ZGV2X29wcyA9ICZ0M2UzX29wczsKLQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLQloZGxjLT54bWl0ID0gdDNlM19pZl9zdGFydF94bWl0OwotCWhkbGMtPmF0dGFjaCA9IHQzZTNfYXR0YWNoOwotCXJldHZhbCA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZzYy0+cGRldi0+ZGV2LCAiZXJyb3IgcmVnaXN0ZXJpbmcgSERMQyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2NyeXB0by5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfY3J5cHRvLmMKaW5kZXggOTY1NDg1Zi4uNDE1ZjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfY3J5cHRvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfY3J5cHRvLmMKQEAgLTkzLDYgKzkzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2VwX3dvcmtfc3RydWN0ICpzZXBfd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQlzdHJ1Y3Qgc2VwX3dvcmtfc3RydWN0LCB3b3JrKTsKKwogCWlmIChzZXBfd29yayAhPSBOVUxMKSB7CiAJCShzZXBfd29yay0+Y2FsbGJhY2spKHNlcF93b3JrLT5kYXRhKTsKIAkJa2ZyZWUoc2VwX3dvcmspOwpAQCAtNjQ5LDYgKzY1MCw3IEBACiBzdGF0aWMgdTMyIHNlcF9zZ19uZW50cyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogewogCXUzMiBjdDEgPSAwOworCiAJd2hpbGUgKHNnKSB7CiAJCWN0MSArPSAxOwogCQlzZyA9IHNnX25leHQoc2cpOwpAQCAtNjY2LDYgKzY2OCw3IEBACiBzdGF0aWMgdTMyIHNlcF9zdGFydF9tc2coc3RydWN0IHRoaXNfdGFza19jdHggKnRhX2N0eCkKIHsKIAl1MzIgKndvcmRfcHRyOworCiAJdGFfY3R4LT5tc2dfbGVuX3dvcmRzID0gMjsKIAl0YV9jdHgtPm1zZ3B0ciA9IHRhX2N0eC0+bXNnOwogCW1lbXNldCh0YV9jdHgtPm1zZywgMCwgU0VQX0RSSVZFUl9NRVNTQUdFX1NIQVJFRF9BUkVBX1NJWkVfSU5fQllURVMpOwpAQCAtNzQwLDYgKzc0Myw3IEBACiB7CiAJdTMyICp3b3JkX3B0cjsKIAl2b2lkICp2b2lkX3B0cjsKKwogCXZvaWRfcHRyID0gdGFfY3R4LT5tc2dwdHIgKyAqbXNnX29mZnNldDsKIAl3b3JkX3B0ciA9ICh1MzIgKil2b2lkX3B0cjsKIAltZW1jcHkodm9pZF9wdHIsIGluX2FkZHIsIHNpemUpOwpAQCAtNzQ4LDYgKzc1Miw3IEBACiAJLyogRG8gd2UgbmVlZCB0byBtYW5pcHVsYXRlIGVuZGlhbj8gKi8KIAlpZiAoYnl0ZV9hcnJheSkgewogCQl1MzIgaTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgKChzaXplICsgMykgLyA0KTsgaSArPSAxKQogCQkJKih3b3JkX3B0ciArIGkpID0gQ0hHX0VORElBTigqKHdvcmRfcHRyICsgaSkpOwogCX0KQEAgLTc4OCwxMiArNzkzLDE0IEBACiB7CiAJdTMyICp3b3JkX3B0cjsKIAl2b2lkICp2b2lkX3B0cjsKKwogCXZvaWRfcHRyID0gdGFfY3R4LT5tc2dwdHIgKyAqbXNnX29mZnNldDsKIAl3b3JkX3B0ciA9ICh1MzIgKil2b2lkX3B0cjsKIAogCS8qIERvIHdlIG5lZWQgdG8gbWFuaXB1bGF0ZSBlbmRpYW4/ICovCiAJaWYgKGJ5dGVfYXJyYXkpIHsKIAkJdTMyIGk7CisKIAkJZm9yIChpID0gMDsgaSA8ICgoc2l6ZSArIDMpIC8gNCk7IGkgKz0gMSkKIAkJCSood29yZF9wdHIgKyBpKSA9IENIR19FTkRJQU4oKih3b3JkX3B0ciArIGkpKTsKIAl9CkBAIC04NjUsNiArODcyLDcgQEAKIAl2b2lkICpkc3QsIHUzMiBsZW4pCiB7CiAJdTMyIG1heF9sZW5ndGggPSAoKGxlbiArIDMpIC8gc2l6ZW9mKHUzMikpICogc2l6ZW9mKHUzMik7CisKIAlzZXBfcmVhZF9tc2codGFfY3R4LCBkc3QsIGxlbiwgbWF4X2xlbmd0aCwgbXNnX29mZnNldCwgMCk7CiB9CiAKQEAgLTg4NCw2ICs4OTIsNyBAQAogCXZvaWQgKnNyYywgdTMyIGxlbikKIHsKIAl1MzIgbWF4X2xlbmd0aCA9ICgobGVuICsgMykgLyBzaXplb2YodTMyKSkgKiBzaXplb2YodTMyKTsKKwogCXNlcF93cml0ZV9tc2codGFfY3R4LCBzcmMsIGxlbiwgbWF4X2xlbmd0aCwgbXNnX29mZnNldCwgMCk7CiB9CiAKQEAgLTM4OTMsNiArMzkwMiw3IEBACiBpbnQgc2VwX2NyeXB0b19zZXR1cCh2b2lkKQogewogCWludCBlcnIsIGksIGosIGs7CisKIAl0YXNrbGV0X2luaXQoJnNlcF9kZXYtPmZpbmlzaF90YXNrbGV0LCBzZXBfZmluaXNoLAogCQkodW5zaWduZWQgbG9uZylzZXBfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kZXYuaAppbmRleCA1ZjZhMDdmLi5iZjU2YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kZXYuaApAQCAtMTUyLDYgKzE1Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2VwX3dhaXRfc3JhbV93cml0ZShzdHJ1Y3Qgc2VwX2RldmljZSAqZGV2KQogewogCXUzMiByZWdfdmFsOworCiAJZG8gewogCQlyZWdfdmFsID0gc2VwX3JlYWRfcmVnKGRldiwgSFdfU1JBTV9EQVRBX1JFQURZX1JFR19BRERSKTsKIAl9IHdoaWxlICghKHJlZ192YWwgJiAxKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9tYWluLmMKaW5kZXggZTMwMTIwNy4uNzVjYTE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX21haW4uYwpAQCAtMTQwMCw3ICsxNDAwLDYgQEAKIAlzdHJ1Y3Qgc2VwX2RtYV9jb250ZXh0ICpkbWFfY3R4KQogCiB7Ci0JaW50IGVycm9yID0gMDsKIAl1MzIgY291bnQ7CiAJLyogVGhlIHRoZSBwYWdlIG9mIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi8KIAl1MzIgZW5kX3BhZ2U7CkBAIC0xNDkxLDcgKzE0OTAsNyBAQAogCWRtYV9jdHgtPmRtYV9yZXNfYXJyW2RtYV9jdHgtPm5yX2RjYl9jcmVhdF0ub3V0X21hcF9hcnJheSA9IE5VTEw7CiAJZG1hX2N0eC0+ZG1hX3Jlc19hcnJbZG1hX2N0eC0+bnJfZGNiX2NyZWF0XS5vdXRfbWFwX251bV9lbnRyaWVzID0gMDsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9zZXJxdF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9zZXJxdF91c2IyLmMKaW5kZXggMDI2N2RkOC4uOTk4YzM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYjIvc2VycXRfdXNiMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IyL3NlcnF0X3VzYjIuYwpAQCAtOTkwLDE4ICs5OTAsMTAgQEAKIHN0YXRpYyB2b2lkIHF0X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlzdHJ1Y3QgcXVhdGVjaF9wb3J0ICpxdF9wb3J0OwotCXN0cnVjdCBxdWF0ZWNoX3BvcnQgKnBvcnQwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JaW50IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci0Jc3RhdHVzID0gMDsKLQotCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwotCWluZGV4ID0gcG9ydC0+cG9ydF9udW1iZXI7Ci0KLQlxdF9wb3J0ID0gcXRfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsKLQlwb3J0MCA9IHF0X2dldF9wb3J0X3ByaXZhdGUoc2VyaWFsLT5wb3J0WzBdKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJdW5zaWduZWQgaW50IGluZGV4ID0gcG9ydC0+cG9ydF9udW1iZXI7CisJc3RydWN0IHF1YXRlY2hfcG9ydCAqcXRfcG9ydCA9IHF0X2dldF9wb3J0X3ByaXZhdGUocG9ydCk7CisJc3RydWN0IHF1YXRlY2hfcG9ydCAqcG9ydDAgPSBxdF9nZXRfcG9ydF9wcml2YXRlKHNlcmlhbC0+cG9ydFswXSk7CiAKIAkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCiAJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQpAQCAtMTAxNSw4ICsxMDA3LDcgQEAKIAl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIENsb3NlIHVhcnQgY2hhbm5lbCAqLwotCXN0YXR1cyA9IHF0X2Nsb3NlX2NoYW5uZWwoc2VyaWFsLCBpbmRleCk7Ci0JaWYgKHN0YXR1cyA8IDApCisJaWYgKHF0X2Nsb3NlX2NoYW5uZWwoc2VyaWFsLCBpbmRleCkgPCAwKQogCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHF0X2Nsb3NlX2NoYW5uZWwgZmFpbGVkLlxuIiwKIAkJCV9fZnVuY19fKTsKIApAQCAtMTI2OCw5ICsxMjU5LDkgQEAKIAlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CiAJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKLQkJc3RhdHVzID0KLQkJICAgIGJveF9zZXRfc3dfZmxvd19jdHJsKHBvcnQtPnNlcmlhbCwgaW5kZXgsIHN0b3BfY2hhciwKLQkJCQkgICAgICBzdGFydF9jaGFyKTsKKworCQlzdGF0dXMgPSBib3hfc2V0X3N3X2Zsb3dfY3RybChwb3J0LT5zZXJpYWwsIGluZGV4LCBzdG9wX2NoYXIsCisJCQkJCSAgICAgIHN0YXJ0X2NoYXIpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWRldl9kYmcoJnBvcnQtPmRldiwKIAkJCQkiYm94X3NldF9zd19mbG93X2N0cmwgKGVuYWJsZWQpIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2lsaWNvbS9icGN0bF9tb2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9zaWxpY29tL2JwY3RsX21vZC5jCmluZGV4IDZiOTM2NWIuLjc2NWZjZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zaWxpY29tL2JwY3RsX21vZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zaWxpY29tL2JwY3RsX21vZC5jCkBAIC00MSw3ICs0MSw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oQlBfTU9EX0RFU0NSKTsKIE1PRFVMRV9WRVJTSU9OKEJQX01PRF9WRVIpOwotc3BpbmxvY2tfdCBicHZtX2xvY2s7CitzdGF0aWMgc3BpbmxvY2tfdCBicHZtX2xvY2s7CiAKICNkZWZpbmUgdW5sb2NrX2JwY3RsKCkJCQkJCVwKIAl1cCgmYnBjdGxfc2VtYSk7CkBAIC0xMTksNyArMTE5LDYgQEAKIAogc3RhdGljIGludCBieXBhc3NfcHJvY19jcmVhdGVfZGV2X3NkKHN0cnVjdCBicGN0bF9kZXYgKnBicF9kZXZpY2VfYmxvY2spOwogc3RhdGljIGludCBieXBhc3NfcHJvY19yZW1vdmVfZGV2X3NkKHN0cnVjdCBicGN0bF9kZXYgKnBicF9kZXZpY2VfYmxvY2spOwotc3RhdGljIGludCBicF9wcm9jX2NyZWF0ZSh2b2lkKTsKIAogc3RhdGljIGludCBpc19ieXBhc3NfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2Rldik7CiBzdGF0aWMgaW50IGdldF9kZXZfaWR4X2JzZihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpOwpAQCAtMjIwLDggKzIxOSwxMiBAQAogCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKIAkJCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQkJCWlmICgoKGRldl9udW0gPSBnZXRfZGV2X2lkeChkZXYtPmlmaW5kZXgpKSA9PSAtMSkgfHwKLQkJCSAgICAoIShwYnBjdGxfZGV2ID0gJmJwY3RsX2Rldl9hcnJbZGV2X251bV0pKSkKKwkJCWRldl9udW0gPSBnZXRfZGV2X2lkeChkZXYtPmlmaW5kZXgpOworCQkJaWYgKGRldl9udW0gPT0gLTEpCisJCQkJcmV0dXJuIE5PVElGWV9ET05FOworCisJCQlwYnBjdGxfZGV2ID0gJmJwY3RsX2Rldl9hcnJbZGV2X251bV07CisJCQlpZiAoIXBicGN0bF9kZXYpCiAJCQkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJCQlpZiAoKGlzX2J5cGFzc19mbihwYnBjdGxfZGV2KSkgPT0gMSkKQEAgLTc0OSw2ICs3NTIsNyBAQAogCXVpbnQzMl90IGN0cmxfZXh0ID0gMCwgY3RybCA9IDA7CiAJc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2Rldl9jID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKHBicGN0bF9kZXYtPmJwXzEwZzkpIHsKIAkJcGJwY3RsX2Rldl9jID0gZ2V0X3N0YXR1c19wb3J0X2ZuKHBicGN0bF9kZXYpOwogCQlpZiAoIXBicGN0bF9kZXZfYykKQEAgLTkyNCw2ICs5MjgsNyBAQAogCiAjaWZkZWYgQlBfU1lOQ19GTEFHCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwYnBjdGxfZGV2LT5ieXBhc3Nfd3JfbG9jaywgZmxhZ3MpOwogI2Vsc2UKIAlhdG9taWNfc2V0KCZwYnBjdGxfZGV2LT53ZHRfYnVzeSwgMSk7CkBAIC0xNTU5LDcgKzE1NjQsOCBAQAogCiBpbnQgemVyb19zZXRfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldikKIHsKLQl1aW50MzJfdCBjdHJsX2V4dCA9IDAsIGN0cmxfdmFsdWUgPSAwOworCXVpbnQzMl90IGN0cmxfZXh0ID0gMDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC0xNTc5LDEyICsxNTg1LDEzIEBACiAJCQkJCQkJICAgQlBDVExJX0NUUkxfRVhUX01ESU9fREFUQSkpKTsKIAogCX0KLQlyZXR1cm4gY3RybF92YWx1ZTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHB1bHNlX2dldDJfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldikKIHsKIAl1aW50MzJfdCBjdHJsX2V4dCA9IDAsIGN0cmxfdmFsdWUgPSAwOworCiAJaWYgKCFwYnBjdGxfZGV2KQogCQlyZXR1cm4gLTE7CiAKQEAgLTE2MDAsNiArMTYwNyw3IEBACiBpbnQgcHVsc2VfZ2V0MV9mbihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewogCXVpbnQzMl90IGN0cmxfZXh0ID0gMCwgY3RybF92YWx1ZSA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtMTY2Myw2ICsxNjcxLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpwOwogCWludCBuOworCiAJZm9yIChuID0gMCwgcCA9IGJwY3RsX2Rldl9hcnI7IG4gPCBkZXZpY2VfbnVtICYmIHAtPnBkZXY7IG4rKykgewogCQlpZiAocC0+YnVzID09IGRldi0+YnVzCiAJCSAgICAmJiBwLT5zbG90ID09IGRldi0+c2xvdApAQCAtMTg0MCw2ICsxODQ5LDcgQEAKIHN0YXRpYyBpbnQgdGFwX29mZihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewogCWludCByZXQgPSBCUF9OT1RfQ0FQOworCiAJaWYgKChwYnBjdGxfZGV2LT5icF9jYXBzICYgVEFQX0NBUCkKIAkgICAgJiYgKHBicGN0bF9kZXYtPmJwX2V4dF92ZXIgPj0gUFhHMlRCUElfVkVSKSkgewogCQl3cml0ZV9kYXRhKHBicGN0bF9kZXYsIFRBUF9PRkYpOwpAQCAtMTg1Myw2ICsxODYzLDcgQEAKIHN0YXRpYyBpbnQgdGFwX29uKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IEJQX05PVF9DQVA7CisKIAlpZiAoKHBicGN0bF9kZXYtPmJwX2NhcHMgJiBUQVBfQ0FQKQogCSAgICAmJiAocGJwY3RsX2Rldi0+YnBfZXh0X3ZlciA+PSBQWEcyVEJQSV9WRVIpKSB7CiAJCXdyaXRlX2RhdGEocGJwY3RsX2RldiwgVEFQX09OKTsKQEAgLTE4NjYsNiArMTg3Nyw3IEBACiBzdGF0aWMgaW50IGRpc2Nfb2ZmKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoKHBicGN0bF9kZXYtPmJwX2NhcHMgJiBESVNDX0NBUCkgJiYgKHBicGN0bF9kZXYtPmJwX2V4dF92ZXIgPj0gMHg4KSkgewogCQl3cml0ZV9kYXRhKHBicGN0bF9kZXYsIERJU0NfT0ZGKTsKIAkJbXNlY19kZWxheV9icChMQVRDSF9ERUxBWSk7CkBAIC0xODc4LDYgKzE4OTAsNyBAQAogc3RhdGljIGludCBkaXNjX29uKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoKHBicGN0bF9kZXYtPmJwX2NhcHMgJiBESVNDX0NBUCkgJiYgKHBicGN0bF9kZXYtPmJwX2V4dF92ZXIgPj0gMHg4KSkgewogCQl3cml0ZV9kYXRhKHBicGN0bF9kZXYsIC8qRElTQ19PTiAqLyAweDg1KTsKIAkJbXNlY19kZWxheV9icChMQVRDSF9ERUxBWSk7CkBAIC0yMjY3LDYgKzIyODAsNyBAQAogewogCWludCByZXQgPSAwLCBjdHJsID0gMDsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2X207CisKIAlpZiAoKGlzX2J5cGFzc19mbihwYnBjdGxfZGV2KSkgPT0gMSkKIAkJcGJwY3RsX2Rldl9tID0gcGJwY3RsX2RldjsKIAllbHNlCkBAIC0yNzk5LDYgKzI4MTMsNyBAQAogc3RhdGljIGludCB3ZHRfdGltZXIoc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldiwgaW50ICp0aW1lX2xlZnQpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAocGJwY3RsX2Rldi0+YnBfY2FwcyAmIFdEX0NUTF9DQVApIHsKIAkJewogCQkJaWYgKHBicGN0bF9kZXYtPndkdF9zdGF0dXMgPT0gV0RUX1NUQVRVU19VTktOT1dOKQpAQCAtMzAxMSw2ICszMDI2LDcgQEAKIHsKIAl1aW50MzJfdCBjdHJsID0gMDsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2X207CisKIAlpZiAoKGlzX2J5cGFzc19mbihwYnBjdGxfZGV2KSkgPT0gMSkKIAkJcGJwY3RsX2Rldl9tID0gcGJwY3RsX2RldjsKIAllbHNlCkBAIC0zMTkyLDYgKzMyMDgsNyBAQAogc3RhdGljIGludCBieXBhc3Nfc3RhdHVzKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJdTMyIGN0cmxfZXh0ID0gMDsKKwogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgQlBfQ0FQKSB7CiAKIAkJc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2Rldl9iID0gTlVMTDsKQEAgLTMzMjAsNiArMzMzNyw3IEBACiBzdGF0aWMgaW50IHdkdF9wcm9ncmFtbWVkKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYsIGludCAqdGltZW91dCkKIHsKIAlpbnQgcmV0ID0gMDsKKwogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgV0RfQ1RMX0NBUCkgewogCQlpZiAocGJwY3RsX2Rldi0+YnBfZXh0X3ZlciA+PSBQWEcyQlBJX1ZFUikgewogCQkJaWYgKChyZWFkX3JlZyhwYnBjdGxfZGV2LCBTVEFUVVNfUkVHX0FERFIpKSAmCkBAIC0zMzgzLDYgKzM0MDEsNyBAQAogc3RhdGljIGludCB0YXBfZmxhZ19zdGF0dXNfY2xlYXIoc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldikKIHsKIAl1aW50MzJfdCBzdGF0dXNfcmVnID0gMDsKKwogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgVEFQX1NUQVRVU19DQVApIHsKIAkJaWYgKHBicGN0bF9kZXYtPmJwX2V4dF92ZXIgPj0gUFhHMlRCUElfVkVSKSB7CiAJCQlzdGF0dXNfcmVnID0gcmVhZF9yZWcocGJwY3RsX2RldiwgU1RBVFVTX1RBUF9SRUdfQUREUik7CkBAIC0zMzk3LDYgKzM0MTYsNyBAQAogc3RhdGljIGludCB0YXBfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewogCWludCByZXQgPSBCUF9OT1RfQ0FQOworCiAJaWYgKHBicGN0bF9kZXYtPmJwX2V4dF92ZXIgPj0gUFhHMlRCUElfVkVSKSB7CiAJCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgVEFQX0NBUCkgewogCQkJaWYgKHBicGN0bF9kZXYtPmJwX2NhcHMgJiBCUF9DQVApIHsKQEAgLTM0ODcsNiArMzUwNyw3IEBACiBzdGF0aWMgaW50IGRpc2NfZmxhZ19zdGF0dXNfY2xlYXIoc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldikKIHsKIAl1aW50MzJfdCBzdGF0dXNfcmVnID0gMDsKKwogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgRElTQ19DQVApIHsKIAkJaWYgKHBicGN0bF9kZXYtPmJwX2V4dF92ZXIgPj0gMHg4KSB7CiAJCQlzdGF0dXNfcmVnID0gcmVhZF9yZWcocGJwY3RsX2RldiwgU1RBVFVTX0RJU0NfUkVHX0FERFIpOwpAQCAtMzUwMSw2ICszNTIyLDcgQEAKIHN0YXRpYyBpbnQgZGlzY19jaGFuZ2Vfc3RhdHVzKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IEJQX05PVF9DQVA7CisKIAlpZiAocGJwY3RsX2Rldi0+YnBfY2FwcyAmIERJU0NfQ0FQKSB7CiAJCXJldCA9IGRpc2NfZmxhZ19zdGF0dXMocGJwY3RsX2Rldik7CiAJCWRpc2NfZmxhZ19zdGF0dXNfY2xlYXIocGJwY3RsX2Rldik7CkBAIC0zNTk2LDYgKzM2MTgsNyBAQAogc3RhdGljIGludCBkaXNjX3N0YXR1cyhzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewogCWludCBjdHJsID0gMDsKKwogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgRElTQ19DQVApIHsKIAkJY3RybCA9IGRpc2Nfb2ZmX3N0YXR1cyhwYnBjdGxfZGV2KTsKIAkJaWYgKGN0cmwgPCAwKQpAQCAtMzc0MSw2ICszNzY0LDcgQEAKIAogI2lmZGVmIEJZUEFTU19ERUJVRwogCWludCByZXQgPSAwOworCiAJaWYgKCEoSU5URUxfSUZfU0VSSUVTKGFkYXB0ZXItPmJwX2RldmljZV9ibG9jay5zdWJkZXZpY2UpKSkgewogCQlyZXQgPSByZWFkX3JlZyhwYnBjdGxfZGV2LCBWRVJfUkVHX0FERFIpOwogCQlwcmludGsoIlZFUl9SRUcgcmVnMT0leFxuIiwgcmV0KTsKQEAgLTQxNTIsNiArNDE3Niw3IEBACiBzdGF0aWMgaW50IHNldF9kaXNfYnlwYXNzX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYsIGludCBkaXNfcGFyYW0pCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDE3OSw2ICs0MjA0LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2J5cGFzc19wd29mZl9mbihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2LCBpbnQgYnlwYXNzX21vZGUpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDIwNiw2ICs0MjMyLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2J5cGFzc19wd3VwX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYsIGludCBieXBhc3NfbW9kZSkKIHsKIAlpbnQgcmV0ID0gMDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC00MjMzLDYgKzQyNjAsNyBAQAogc3RhdGljIGludCBzZXRfYnlwYXNzX3dkX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYsIGludCB0aW1lb3V0KQogewogCWludCByZXQgPSAwOworCiAJaWYgKCFwYnBjdGxfZGV2KQogCQlyZXR1cm4gLTE7CiAKQEAgLTQyNzksOCArNDMwNyw4IEBACiBzdGF0aWMgaW50IGdldF93ZF9zZXRfY2Fwc19mbihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewogCWludCBicF9zdGF0dXMgPSAwOwotCiAJdW5zaWduZWQgaW50IHN0ZXBfdmFsdWUgPSBUSU1FT1VUX01BWF9TVEVQICsgMSwgYml0X2NudCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDMwMyw2ICs0MzMxLDcgQEAKIHN0YXRpYyBpbnQgc2V0X3N0ZF9uaWNfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldiwgaW50IG5pY19tb2RlKQogewogCWludCByZXQgPSAwOworCiAJaWYgKCFwYnBjdGxfZGV2KQogCQlyZXR1cm4gLTE7CiAKQEAgLTQzNTUsNiArNDM4NCw3IEBACiBzdGF0aWMgaW50IHNldF90YXBfcHd1cF9mbihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2LCBpbnQgdGFwX21vZGUpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDM3Myw2ICs0NDAzLDcgQEAKIHN0YXRpYyBpbnQgZ2V0X3RhcF9wd3VwX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDM5Myw2ICs0NDI0LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2Rpc190YXBfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldiwgaW50IGRpc19wYXJhbSkKIHsKIAlpbnQgcmV0ID0gMDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC00NDM1LDYgKzQ0NjcsNyBAQAogc3RhdGljIGludCBnZXRfZGlzY19mbihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewogCWludCByZXQgPSAwOworCiAJaWYgKCFwYnBjdGxfZGV2KQogCQlyZXR1cm4gLTE7CiAKQEAgLTQ0NDYsNiArNDQ3OSw3IEBACiBzdGF0aWMgaW50IHNldF9kaXNjX3B3dXBfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldiwgaW50IGRpc2NfbW9kZSkKIHsKIAlpbnQgcmV0ID0gMDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC00NDY0LDYgKzQ0OTgsNyBAQAogc3RhdGljIGludCBnZXRfZGlzY19wd3VwX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDQ3NCw2ICs0NTA5LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2Rpc2NfY2hhbmdlX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDQ4NCw2ICs0NTIwLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2Rpc19kaXNjX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYsIGludCBkaXNfcGFyYW0pCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDUwMiw2ICs0NTM5LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2Rpc19kaXNjX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDUyOCw4ICs0NTY2LDggQEAKIAogc3RhdGljIGludCBzZXRfdHhfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldiwgaW50IHR4X3N0YXRlKQogewotCiAJc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2Rldl9iID0gTlVMTDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC00NjA3LDYgKzQ2NDUsNyBAQAogCQkJICAgICAgIHN0cnVjdCBicGN0bF9kZXYgKipwYnBjdGxfZGV2X291dCkKIHsKIAlpbnQgaWR4X2RldiA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDY1MCw2ICs0Njg5LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X3R4X2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2Rldl9iID0gTlVMTDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC00NzMyLDEwICs0NzcyLDkgQEAKIAogc3RhdGljIHZvaWQgcmVtb3ZlX2J5cGFzc190cGxfYXV0byhzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2KQogewotCXN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXZfYiA9IE5VTEw7CisJc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2Rldl9iOwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuOwotCXBicGN0bF9kZXZfYiA9IGdldF9zdGF0dXNfcG9ydF9mbihwYnBjdGxfZGV2KTsKIAogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgVFBMX0NBUCkgewogCQlkZWxfdGltZXJfc3luYygmcGJwY3RsX2Rldi0+YnBfdHBsX3RpbWVyKTsKQEAgLTQ3ODIsMTIgKzQ4MjEsMTAgQEAKIHN0YXRpYyBpbnQgc2V0X3RwbF9mbihzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2LCBpbnQgdHBsX21vZGUpCiB7CiAKLQlzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2X2IgPSBOVUxMOworCXN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXZfYjsKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIAotCXBicGN0bF9kZXZfYiA9IGdldF9zdGF0dXNfcG9ydF9mbihwYnBjdGxfZGV2KTsKLQogCWlmIChwYnBjdGxfZGV2LT5icF9jYXBzICYgVFBMX0NBUCkgewogCQlpZiAodHBsX21vZGUpIHsKIAkJCXBicGN0bF9kZXZfYiA9IGdldF9zdGF0dXNfcG9ydF9mbihwYnBjdGxfZGV2KTsKQEAgLTQ4MTIsNiArNDg0OSw3IEBACiBzdGF0aWMgaW50IGdldF90cGxfZm4oc3RydWN0IGJwY3RsX2RldiAqcGJwY3RsX2RldikKIHsKIAlpbnQgcmV0ID0gQlBfTk9UX0NBUDsKKwogCWlmICghcGJwY3RsX2RldikKIAkJcmV0dXJuIC0xOwogCkBAIC00ODQ2LDYgKzQ4ODQsNyBAQAogc3RhdGljIGludCBnZXRfYnBfd2FpdF9hdF9wd3VwX2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDg3OSw2ICs0OTE4LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2JwX2h3X3Jlc2V0X2ZuKHN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXYpCiB7CiAJaW50IHJldCA9IDA7CisKIAlpZiAoIXBicGN0bF9kZXYpCiAJCXJldHVybiAtMTsKIApAQCAtNDkwNiw2ICs0OTQ2LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2Rldl9pZHhfYnNmKGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykKIHsKIAlpbnQgaWR4X2RldiA9IDA7CisKIAlmb3IgKGlkeF9kZXYgPSAwOwogCSAgICAgKChicGN0bF9kZXZfYXJyW2lkeF9kZXZdLnBkZXYgIT0gTlVMTCkgJiYgKGlkeF9kZXYgPCBkZXZpY2VfbnVtKSk7CiAJICAgICBpZHhfZGV2KyspIHsKQEAgLTYzNjgsNTYgKzY0MDksMzAgQEAKIAogCXNlbWFfaW5pdCgmYnBjdGxfc2VtYSwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmJwdm1fbG9jayk7Ci0JewogCi0JCXN0cnVjdCBicGN0bF9kZXYgKnBicGN0bF9kZXZfYyA9IE5VTEw7Ci0JCWZvciAoaWR4X2RldiA9IDAsIGRldiA9IGJwY3RsX2Rldl9hcnI7Ci0JCSAgICAgaWR4X2RldiA8IGRldmljZV9udW0gJiYgZGV2LT5wZGV2OwotCQkgICAgIGlkeF9kZXYrKywgZGV2KyspIHsKLQkJCWlmIChkZXYtPmJwXzEwZzkpIHsKLQkJCQlwYnBjdGxfZGV2X2MgPSBnZXRfc3RhdHVzX3BvcnRfZm4oZGV2KTsKLQkJCQlpZiAoaXNfYnlwYXNzX2ZuKGRldikpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZm91bmQsICIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJCQlkZXYtPmJwX2Z3X3ZlciA9IGJ5cGFzc19md192ZXIoZGV2KTsKLQkJCQkJcHJpbnRrKCJmaXJtd2FyZSB2ZXJzaW9uOiAweCV4XG4iLAotCQkJCQkgICAgICAgZGV2LT5icF9md192ZXIpOwotCQkJCX0KLQkJCQlkZXYtPndkdF9zdGF0dXMgPSBXRFRfU1RBVFVTX1VOS05PV047Ci0JCQkJZGV2LT5yZXNldF90aW1lID0gMDsKLQkJCQlhdG9taWNfc2V0KCZkZXYtPndkdF9idXN5LCAwKTsKLQkJCQlkZXYtPmJwX3N0YXR1c191biA9IDE7Ci0KLQkJCQlieXBhc3NfY2Fwc19pbml0KGRldik7Ci0KLQkJCQlpbml0X2J5cGFzc193ZF9hdXRvKGRldik7Ci0JCQkJaW5pdF9ieXBhc3NfdHBsX2F1dG8oZGV2KTsKLQorCWZvciAoaWR4X2RldiA9IDAsIGRldiA9IGJwY3RsX2Rldl9hcnI7CisJICAgICBpZHhfZGV2IDwgZGV2aWNlX251bSAmJiBkZXYtPnBkZXY7CisJICAgICBpZHhfZGV2KyssIGRldisrKSB7CisJCWlmIChkZXYtPmJwXzEwZzkpIHsKKwkJCWlmIChpc19ieXBhc3NfZm4oZGV2KSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzIGZvdW5kLCAiLCBkZXYtPm5hbWUpOworCQkJCWRldi0+YnBfZndfdmVyID0gYnlwYXNzX2Z3X3ZlcihkZXYpOworCQkJCXByaW50aygiZmlybXdhcmUgdmVyc2lvbjogMHgleFxuIiwKKwkJCQkgICAgICAgZGV2LT5icF9md192ZXIpOwogCQkJfQorCQkJZGV2LT53ZHRfc3RhdHVzID0gV0RUX1NUQVRVU19VTktOT1dOOworCQkJZGV2LT5yZXNldF90aW1lID0gMDsKKwkJCWF0b21pY19zZXQoJmRldi0+d2R0X2J1c3ksIDApOworCQkJZGV2LT5icF9zdGF0dXNfdW4gPSAxOwogCisJCQlieXBhc3NfY2Fwc19pbml0KGRldik7CisKKwkJCWluaXRfYnlwYXNzX3dkX2F1dG8oZGV2KTsKKwkJCWluaXRfYnlwYXNzX3RwbF9hdXRvKGRldik7CiAJCX0KIAl9CiAKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmJwX25vdGlmaWVyX2Jsb2NrKTsKLSNpZmRlZiBCUF9QUk9DX1NVUFBPUlQKLQl7Ci0JCWludCBpID0gMDsKLQkJLyogdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KLQkJLyogcmN1X3JlYWRfbG9jaygpOyAqLwotCQlicF9wcm9jX2NyZWF0ZSgpOwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2aWNlX251bTsgaSsrKSB7Ci0JCQlpZiAoYnBjdGxfZGV2X2FycltpXS5pZmluZGV4KSB7Ci0JCQkJLyogc3Bpbl9sb2NrX2lycXNhdmUoJmJwdm1fbG9jaywgZmxhZ3MpOyAqLwotCQkJCWJ5cGFzc19wcm9jX3JlbW92ZV9kZXZfc2QoJmJwY3RsX2Rldl9hcnJbaV0pOwotCQkJCWJ5cGFzc19wcm9jX2NyZWF0ZV9kZXZfc2QoJmJwY3RsX2Rldl9hcnJbaV0pOwotCQkJCS8qIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwdm1fbG9jaywgZmxhZ3MpOyAqLwotCQkJfQotCi0JCX0KLQkJLyogcmN1X3JlYWRfdW5sb2NrKCk7ICovCi0JfQotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjQyNywxNyArNjQ0MiwxMSBAQAogc3RhdGljIHZvaWQgX19leGl0IGJ5cGFzc19jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBpOworCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmJwX25vdGlmaWVyX2Jsb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXZpY2VfbnVtOyBpKyspIHsKIAkJLyogdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KLSNpZmRlZiBCUF9QUk9DX1NVUFBPUlQKLS8qCXNwaW5fbG9ja19pcnFzYXZlKCZicHZtX2xvY2ssIGZsYWdzKTsKLQlyY3VfcmVhZF9sb2NrKCk7ICovCi0JCWJ5cGFzc19wcm9jX3JlbW92ZV9kZXZfc2QoJmJwY3RsX2Rldl9hcnJbaV0pOwotLyoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnB2bV9sb2NrLCBmbGFncyk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7ICovCi0jZW5kaWYKIAkJcmVtb3ZlX2J5cGFzc193ZF9hdXRvKCZicGN0bF9kZXZfYXJyW2ldKTsKIAkJYnBjdGxfZGV2X2FycltpXS5yZXNldF90aW1lID0gMDsKIApAQCAtNjczOCw2ICs2NzQ3LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBjdGxfZGV2X291dDsKIAlpbnQgcmV0ID0gZ2V0X2J5cGFzc19zbGF2ZV9mbihnZXRfZGV2X2lkeF9wKGlmaW5kZXgpLCAmcGJwY3RsX2Rldl9vdXQpOworCiAJaWYgKHJldCA9PSAxKQogCQlyZXR1cm4gcGJwY3RsX2Rldl9vdXQtPmlmaW5kZXg7CiAJcmV0dXJuIC0xOwpAQCAtNjc4MywyMiArNjc5MywxMSBAQAogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpicF9wcm9jZnNfZGlyOwogCi1zdGF0aWMgaW50IGJwX3Byb2NfY3JlYXRlKHZvaWQpCi17Ci0JYnBfcHJvY2ZzX2RpciA9IHByb2NfbWtkaXIoQlBfUFJPQ19ESVIsIGluaXRfbmV0LnByb2NfbmV0KTsKLQlpZiAoYnBfcHJvY2ZzX2RpciA9PSAoc3RydWN0IHByb2NfZGlyX2VudHJ5ICopMCkgewotCQlwcmludGsoS0VSTl9ERUJVRwotCQkgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgcHJvY2ZzIG5pY2luZm8gZGlyZWN0b3J5ICVzXG4iLAotCQkgICAgICAgQlBfUFJPQ19ESVIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHByb2Nmc19hZGQoY2hhciAqcHJvY19uYW1lLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAogCQkgICAgICBzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGJ5cGFzc19wZnNfc2QgKnBmcyA9ICZkZXYtPmJ5cGFzc19wZnNfc2V0OworCiAJaWYgKCFwcm9jX2NyZWF0ZV9kYXRhKHByb2NfbmFtZSwgMDY0NCwgcGZzLT5ieXBhc3NfZW50cnksIGZvcHMsIGRldikpCiAJCXJldHVybiAtMTsKIAlyZXR1cm4gMDsKQEAgLTY4NDMsNiArNjg0Miw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpzbGF2ZSA9IGdldF9zdGF0dXNfcG9ydF9mbihkZXYpOworCiAJaWYgKCFzbGF2ZSkKIAkJc2xhdmUgPSBkZXY7CiAJaWYgKCFzbGF2ZSkKQEAgLTY4NTcsNiArNjg1Nyw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gZ2V0X2J5cGFzc19jYXBzX2ZuKGRldik7CisKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICItMVxuIik7CiAJZWxzZQpAQCAtNjg2OSw2ICs2ODcwLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfd2Rfc2V0X2NhcHNfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgIi0xXG4iKTsKIAllbHNlCkBAIC02OTA1LDYgKzY5MDcsNyBAQAogCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgYnlwYXNzX3BhcmFtID0gdXNlcl9vbl9vZmYoYnVmZmVyLCBjb3VudCk7CisKIAlpZiAoYnlwYXNzX3BhcmFtIDwgMCkKIAkJcmV0dXJuIC0xOwogCkBAIC02OTE1LDYgKzY5MTgsNyBAQAogewogCXN0cnVjdCBicGN0bF9kZXYgKmRldiA9IG0tPnByaXZhdGU7CiAJaW50IHJldCA9IGdldF9ieXBhc3NfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAxKQpAQCAtNjkyOSw2ICs2OTMzLDcgQEAKIAkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IHRhcF9wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKHRhcF9wYXJhbSA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtNjkzOSw2ICs2OTQ0LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfdGFwX2ZuKGRldik7CisKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICJmYWlsXG4iKTsKIAllbHNlIGlmIChyZXQgPT0gMSkKQEAgLTY5NTMsNiArNjk1OSw3IEBACiAJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCB0YXBfcGFyYW0gPSB1c2VyX29uX29mZihidWZmZXIsIGNvdW50KTsKKwogCWlmICh0YXBfcGFyYW0gPCAwKQogCQlyZXR1cm4gLTE7CiAKQEAgLTY5NjMsNiArNjk3MCw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gZ2V0X2Rpc2NfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAxKQpAQCAtNjk3Nyw2ICs2OTg1LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfYnlwYXNzX2NoYW5nZV9mbihkZXYpOworCiAJaWYgKHJldCA9PSAxKQogCQlzZXFfcHV0cyhtLCAib25cbiIpOwogCWVsc2UgaWYgKHJldCA9PSAwKQpAQCAtNjk5MSw2ICs3MDAwLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfdGFwX2NoYW5nZV9mbihkZXYpOworCiAJaWYgKHJldCA9PSAxKQogCQlzZXFfcHV0cyhtLCAib25cbiIpOwogCWVsc2UgaWYgKHJldCA9PSAwKQpAQCAtNzAwNSw2ICs3MDE1LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfZGlzY19jaGFuZ2VfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gMSkKIAkJc2VxX3B1dHMobSwgIm9uXG4iKTsKIAllbHNlIGlmIChyZXQgPT0gMCkKQEAgLTcwMjEsNiArNzAzMiw3IEBACiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSk7CiAJaW50IHRpbWVvdXQ7CiAJaW50IHJldCA9IGtzdHJ0b2ludF9mcm9tX3VzZXIoYnVmZmVyLCBjb3VudCwgMTAsICZ0aW1lb3V0KTsKKwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJc2V0X2J5cGFzc193ZF9mbihkZXYsIHRpbWVvdXQpOwpAQCAtNzA0OCw2ICs3MDYwLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSAwLCB0aW1lb3V0ID0gMDsKKwogCXJldCA9IGdldF93ZF9leHBpcmVfdGltZV9mbihkZXYsICZ0aW1lb3V0KTsKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICJmYWlsXG4iKTsKQEAgLTcwNjYsNiArNzA3OSw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSk7CiAJaW50IHRwbF9wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKHRwbF9wYXJhbSA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtNzA3Niw2ICs3MDkwLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfdHBsX2ZuKGRldik7CisKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICJmYWlsXG4iKTsKIAllbHNlIGlmIChyZXQgPT0gMSkKQEAgLTcwOTIsNiArNzEwNyw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSk7CiAJaW50IHRwbF9wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKHRwbF9wYXJhbSA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtNzEwMiw2ICs3MTE4LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfYnBfd2FpdF9hdF9wd3VwX2ZuKGRldik7CisKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICJmYWlsXG4iKTsKIAllbHNlIGlmIChyZXQgPT0gMSkKQEAgLTcxMTcsNiArNzEzNCw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSk7CiAJaW50IHRwbF9wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKHRwbF9wYXJhbSA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtNzEyNyw2ICs3MTQ1LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfYnBfaHdfcmVzZXRfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAxKQpAQCAtNzE0Myw2ICs3MTYyLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSByZXNldF9ieXBhc3Nfd2RfdGltZXJfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAwKQpAQCAtNzE1Nyw2ICs3MTc3LDcgQEAKIAkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IGJ5cGFzc19wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKGJ5cGFzc19wYXJhbSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03MTY3LDYgKzcxODgsNyBAQAogewogCXN0cnVjdCBicGN0bF9kZXYgKmRldiA9IG0tPnByaXZhdGU7CiAJaW50IHJldCA9IGdldF9kaXNfYnlwYXNzX2ZuKGRldik7CisKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICJmYWlsXG4iKTsKIAllbHNlIGlmIChyZXQgPT0gMCkKQEAgLTcxODEsNiArNzIwMyw3IEBACiAJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCB0YXBfcGFyYW0gPSB1c2VyX29uX29mZihidWZmZXIsIGNvdW50KTsKKwogCWlmICh0YXBfcGFyYW0gPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzE5MSw2ICs3MjE0LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfZGlzX3RhcF9mbihkZXYpOworCiAJaWYgKHJldCA9PSBCUF9OT1RfQ0FQKQogCQlzZXFfcHV0cyhtLCAiZmFpbFxuIik7CiAJZWxzZSBpZiAocmV0ID09IDApCkBAIC03MjA1LDYgKzcyMjksNyBAQAogCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgdGFwX3BhcmFtID0gdXNlcl9vbl9vZmYoYnVmZmVyLCBjb3VudCk7CisKIAlpZiAodGFwX3BhcmFtIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTcyMTUsNiArNzI0MCw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gZ2V0X2Rpc19kaXNjX2ZuKGRldik7CisKIAlpZiAocmV0ID09IEJQX05PVF9DQVApCiAJCXNlcV9wdXRzKG0sICJmYWlsXG4iKTsKIAllbHNlIGlmIChyZXQgPT0gMCkKQEAgLTcyMjksNiArNzI1NSw3IEBACiAJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCBieXBhc3NfcGFyYW0gPSB1c2VyX29uX29mZihidWZmZXIsIGNvdW50KTsKKwogCWlmIChieXBhc3NfcGFyYW0gPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzIzOSw2ICs3MjY2LDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfYnlwYXNzX3B3dXBfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAwKQpAQCAtNzI1Myw2ICs3MjgxLDcgQEAKIAkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IGJ5cGFzc19wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKGJ5cGFzc19wYXJhbSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03MjYzLDYgKzcyOTIsNyBAQAogewogCXN0cnVjdCBicGN0bF9kZXYgKmRldiA9IG0tPnByaXZhdGU7CiAJaW50IHJldCA9IGdldF9ieXBhc3NfcHdvZmZfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAwKQpAQCAtNzI3Nyw2ICs3MzA3LDcgQEAKIAkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IHRhcF9wYXJhbSA9IHVzZXJfb25fb2ZmKGJ1ZmZlciwgY291bnQpOworCiAJaWYgKHRhcF9wYXJhbSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03Mjg3LDYgKzczMTgsNyBAQAogewogCXN0cnVjdCBicGN0bF9kZXYgKmRldiA9IG0tPnByaXZhdGU7CiAJaW50IHJldCA9IGdldF90YXBfcHd1cF9mbihkZXYpOworCiAJaWYgKHJldCA9PSBCUF9OT1RfQ0FQKQogCQlzZXFfcHV0cyhtLCAiZmFpbFxuIik7CiAJZWxzZSBpZiAocmV0ID09IDApCkBAIC03MzAxLDYgKzczMzMsNyBAQAogCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgdGFwX3BhcmFtID0gdXNlcl9vbl9vZmYoYnVmZmVyLCBjb3VudCk7CisKIAlpZiAodGFwX3BhcmFtIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTczMTEsNiArNzM0NCw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gZ2V0X2Rpc2NfcHd1cF9mbihkZXYpOworCiAJaWYgKHJldCA9PSBCUF9OT1RfQ0FQKQogCQlzZXFfcHV0cyhtLCAiZmFpbFxuIik7CiAJZWxzZSBpZiAocmV0ID09IDApCkBAIC03MzI1LDYgKzczNTksNyBAQAogCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgYnlwYXNzX3BhcmFtID0gdXNlcl9vbl9vZmYoYnVmZmVyLCBjb3VudCk7CisKIAlpZiAoYnlwYXNzX3BhcmFtIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTczMzUsNiArNzM3MCw3IEBACiB7CiAJc3RydWN0IGJwY3RsX2RldiAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gZ2V0X3N0ZF9uaWNfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gQlBfTk9UX0NBUCkKIAkJc2VxX3B1dHMobSwgImZhaWxcbiIpOwogCWVsc2UgaWYgKHJldCA9PSAwKQpAQCAtNzM3Nyw2ICs3NDEzLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfd2RfZXhwX21vZGVfZm4oZGV2KTsKKwogCWlmIChyZXQgPT0gMSkKIAkJc2VxX3B1dHMobSwgInRhcFxuIik7CiAJZWxzZSBpZiAocmV0ID09IDApCkBAIC03Mzk0LDYgKzc0MzEsNyBAQAogewogCWludCB0aW1lb3V0OwogCWludCByZXQgPSBrc3RydG9pbnRfZnJvbV91c2VyKGJ1ZmZlciwgY291bnQsIDEwLCAmdGltZW91dCk7CisKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCXNldF93ZF9hdXRvcmVzZXRfZm4oUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSksIHRpbWVvdXQpOwpAQCAtNzQwMyw2ICs3NDQxLDcgQEAKIHsKIAlzdHJ1Y3QgYnBjdGxfZGV2ICpkZXYgPSBtLT5wcml2YXRlOwogCWludCByZXQgPSBnZXRfd2RfYXV0b3Jlc2V0X2ZuKGRldik7CisKIAlpZiAocmV0ID49IDApCiAJCXNlcV9wcmludGYobSwgIiVkXG4iLCByZXQpOwogCWVsc2UKQEAgLTc0ODMsOCArNzUyMiw4IEBACiAKIHN0YXRpYyBpbnQgYnlwYXNzX3Byb2NfcmVtb3ZlX2Rldl9zZChzdHJ1Y3QgYnBjdGxfZGV2ICpwYnBfZGV2aWNlX2Jsb2NrKQogewotCiAJc3RydWN0IGJ5cGFzc19wZnNfc2QgKmN1cnJlbnRfcGZzID0gJnBicF9kZXZpY2VfYmxvY2stPmJ5cGFzc19wZnNfc2V0OworCiAJcmVtb3ZlX3Byb2Nfc3VidHJlZShjdXJyZW50X3Bmcy0+ZGlyX25hbWUsIGJwX3Byb2Nmc19kaXIpOwogCWN1cnJlbnRfcGZzLT5ieXBhc3NfZW50cnkgPSBOVUxMOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NpbGljb20vYnlwYXNzbGliL2JwX2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvc2lsaWNvbS9ieXBhc3NsaWIvYnBfaW9jdGwuaAppbmRleCBiZjQ3Zjc4Li5hMTM5MzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2lsaWNvbS9ieXBhc3NsaWIvYnBfaW9jdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2lsaWNvbS9ieXBhc3NsaWIvYnBfaW9jdGwuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAJU0VUX0JQX1dBSVRfQVRfUFdVUCwKIAlHRVRfQlBfSFdfUkVTRVQsCiAJU0VUX0JQX0hXX1JFU0VULAotfSBDTU5EX1RZUEU7Cit9OwogCiBlbnVtIHsKIAlJRl9TQ0FOX1NELApAQCAtMTU0LDcgKzE1NCw3IEBACiAJR0VUX0JQX0hXX1JFU0VUX1NELAogCVNFVF9CUF9IV19SRVNFVF9TRCwKIAotfSBDTU5EX1RZUEVfU0Q7Cit9OwogCiAjZGVmaW5lIFNJT0NHSUZCWVBBU1MgKFNJT0NERVZQUklWQVRFKzEwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2lsaWNvbS9ieXBhc3NsaWIvYnlwYXNzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2lsaWNvbS9ieXBhc3NsaWIvYnlwYXNzLmMKaW5kZXggMDllMDBkYS4uOGU3MTRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NpbGljb20vYnlwYXNzbGliL2J5cGFzcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zaWxpY29tL2J5cGFzc2xpYi9ieXBhc3MuYwpAQCAtMTM1LDYgKzEzNSw3IEBACiBzdGF0aWMgaW50IGlzX2Rldl9zZChpbnQgaWZfaW5kZXgpCiB7CiAJaW50IHJldCA9IDA7CisKIAlTRVRfQlBMSUJfSU5UX0ZOKGlzX2J5cGFzcywgaW50LCBpZl9pbmRleCwgcmV0KTsKIAlyZXR1cm4gcmV0ID49IDAgPyAxIDogMDsKIH0KQEAgLTE0OSwzOCArMTUwLDMzIEBACiAKIAl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIHBkZXYpKSkgewogCQlkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JCWlmIChkZXYgIT0gTlVMTCkgewotCQkJZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCQkJaWYgKChkZXYgIT0gTlVMTCkgJiYgKGRldi0+aWZpbmRleCA9PSBpZl9pbmRleCkpIHsKLQkJCQlpZiAoKHBkZXYtPnZlbmRvciA9PSBTSUxJQ09NX1ZJRCkgJiYKLQkJCQkgICAgKHBkZXYtPmRldmljZSA+PSBTSUxJQ09NX0JQX1BJRF9NSU4pICYmCi0JCQkJICAgIChwZGV2LT5kZXZpY2UgPD0gU0lMSUNPTV9CUF9QSURfTUFYKSkgewotCQkJCQlnb3RvIHNlbmRfY21kOwotCQkJCX0KLSNpZiBkZWZpbmVkKEJQX1ZFTkRPUl9TVVBQT1JUKSAmJiBkZWZpbmVkKEVUSFRPT0xfR0RSVklORk8pCi0JCQkJZWxzZSB7Ci0JCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKLQkJCQkJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPQotCQkJCQkgICAgZGV2LT5ldGh0b29sX29wczsKLQkJCQkJaW50IGsgPSAwOwotCi0JCQkJCWlmIChvcHMtPmdldF9kcnZpbmZvKSB7Ci0JCQkJCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0JCQkJCQlpbmZvLmNtZCA9IEVUSFRPT0xfR0RSVklORk87Ci0JCQkJCQlvcHMtPmdldF9kcnZpbmZvKGRldiwgJmluZm8pOwotCQkJCQkJZm9yICg7IGJwX2Rlc2NfYXJyYXlba107IGsrKykKLQkJCQkJCQlpZiAoIQotCQkJCQkJCSAgICAoc3RyY21wCi0JCQkJCQkJICAgICAoYnBfZGVzY19hcnJheVtrXSwKLQkJCQkJCQkgICAgICBpbmZvLmRyaXZlcikpKQotCQkJCQkJCQlnb3RvIHNlbmRfY21kOwotCi0JCQkJCX0KLQotCQkJCX0KLSNlbmRpZgotCQkJCXJldHVybiAtMTsKKwkJaWYgKChkZXYgIT0gTlVMTCkgJiYgKGRldi0+aWZpbmRleCA9PSBpZl9pbmRleCkpIHsKKwkJCWlmICgocGRldi0+dmVuZG9yID09IFNJTElDT01fVklEKSAmJgorCQkJICAgIChwZGV2LT5kZXZpY2UgPj0gU0lMSUNPTV9CUF9QSURfTUlOKSAmJgorCQkJICAgIChwZGV2LT5kZXZpY2UgPD0gU0lMSUNPTV9CUF9QSURfTUFYKSkgeworCQkJCWdvdG8gc2VuZF9jbWQ7CiAJCQl9CisjaWYgZGVmaW5lZChCUF9WRU5ET1JfU1VQUE9SVCkgJiYgZGVmaW5lZChFVEhUT09MX0dEUlZJTkZPKQorCQkJZWxzZSB7CisJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvOworCQkJCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0KKwkJCQkJZGV2LT5ldGh0b29sX29wczsKKwkJCQlpbnQgayA9IDA7CisKKwkJCQlpZiAob3BzLT5nZXRfZHJ2aW5mbykgeworCQkJCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJCQkJCWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTzsKKwkJCQkJb3BzLT5nZXRfZHJ2aW5mbyhkZXYsICZpbmZvKTsKKwkJCQkJZm9yICg7IGJwX2Rlc2NfYXJyYXlba107IGsrKykKKwkJCQkJCWlmICghKHN0cmNtcChicF9kZXNjX2FycmF5W2tdLAorCQkJCQkJCSAgICAgaW5mby5kcml2ZXIpKSkKKwkJCQkJCQlnb3RvIHNlbmRfY21kOworCisJCQkJfQorCisJCQl9CisjZW5kaWYKKwkJCXJldHVybiAtMTsKIAkJfQogCX0KICBzZW5kX2NtZDoKQEAgLTE5MSw2ICsxODcsNyBAQAogc3RhdGljIGludCBpc19ieXBhc3MoaW50IGlmX2luZGV4KQogewogCWludCByZXQgPSAwOworCiAJU0VUX0JQTElCX0lOVF9GTihpc19ieXBhc3MsIGludCwgaWZfaW5kZXgsIHJldCk7CiAKIAlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NrZWluL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxNzJiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9LY29uZmlnCkBAIC0wLDAgKzEsMzIgQEAKK2NvbmZpZyBDUllQVE9fU0tFSU4KKwlib29sICJTa2VpbiBkaWdlc3QgYWxnb3JpdGhtIgorCWRlcGVuZHMgb24gKFg4NiB8fCBVTUxfWDg2KSAmJiA2NEJJVCAmJiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX1RIUkVFRklTSAorCXNlbGVjdCBDUllQVE9fSEFTSAorCWhlbHAKKwkgIFNrZWluIHNlY3VyZSBoYXNoIGFsZ29yaXRobSBpcyBvbmUgb2YgNSBmaW5hbGlzdHMgZnJvbSB0aGUgTklTVCBTSEEzCisJICBjb21wZXRpdGlvbi4KKworCSAgU2tlaW4gaXMgb3B0aW1pemVkIGZvciBtb2Rlcm4sIDY0Yml0IHByb2Nlc3NvcnMgYW5kIGlzIGhpZ2hseQorCSAgY3VzdG9taXphYmxlLiAgU2VlOgorCisJICBodHRwOi8vd3d3LnNrZWluLWhhc2guaW5mby9zaXRlcy9kZWZhdWx0L2ZpbGVzL3NrZWluMS4zLnBkZgorCisJICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIHRocmVlZmlzaCBibG9jaworCSAgY2lwaGVyIG1vZHVsZS4KKworY29uZmlnIENSWVBUT19USFJFRUZJU0gKKwlib29sICJUaHJlZWZpc2ggdHdlYWthYmxlIGJsb2NrIGNpcGhlciIKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQgJiYgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwloZWxwCisJICBUaHJlZWZpc2ggY2lwaGVyIGFsZ29yaXRobSBpcyB0aGUgdHdlYWthYmxlIGJsb2NrIGNpcGhlciB1bmRlcm5lYXRoCisJICB0aGUgU2tlaW4gZmFtaWx5IG9mIHNlY3VyZSBoYXNoIGFsZ29yaXRobXMuICBTa2VpbiBpcyBvbmUgb2YgNQorCSAgZmluYWxpc3RzIGZyb20gdGhlIE5JU1QgU0hBMyBjb21wZXRpdGlvbi4KKworCSAgU2tlaW4gaXMgb3B0aW1pemVkIGZvciBtb2Rlcm4sIDY0Yml0IHByb2Nlc3NvcnMgYW5kIGlzIGhpZ2hseQorCSAgY3VzdG9taXphYmxlLiAgU2VlOgorCisJICBodHRwOi8vd3d3LnNrZWluLWhhc2guaW5mby9zaXRlcy9kZWZhdWx0L2ZpbGVzL3NrZWluMS4zLnBkZgorCisJICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRhYWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NrZWluL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHNrZWluIHNlY3VyZSBoYXNoIGFsZ29yaXRobQorIworb2JqLSQoQ09ORklHX0NSWVBUT19TS0VJTikgKz0gICBza2Vpbi5vIFwKKwkJCQlza2Vpbl9hcGkubyBcCisJCQkJc2tlaW5fYmxvY2subworCitvYmotJChDT05GSUdfQ1JZUFRPX1RIUkVFRklTSCkgKz0gdGhyZWVmaXNoX2Jsb2NrLm8gXAorCQkJCSAgdGhyZWVmaXNoX2FwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzUwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vVE9ETwpAQCAtMCwwICsxLDggQEAKK3NrZWluL3RocmVlZmlzaCBUT0RPCisKKyAtIG1vdmUgbWFjcm9zIGludG8gYXBwcm9wcmlhdGUgaGVhZGVyIGZpbGVzCisgLSBhZGQgLyBwYXNzIHRlc3QgdmVjdG9ycworIC0gbW9kdWxlIHN1cHBvcnQKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBKYXNvbiBDb29wZXIgPGphc29uQGxha2VkYWVtb24ubmV0PiBpbiBhZGRpdGlvbiB0byB0aGUKK3N0YWdpbmcgdHJlZSBtYWlsaW5nbGlzdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3NrZWluL3NrZWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjODM1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbi5jCkBAIC0wLDAgKzEsODgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCisqKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2tlaW4gaGFzaCBmdW5jdGlvbi4KKyoqCisqKiBTb3VyY2UgY29kZSBhdXRob3I6IERvdWcgV2hpdGluZywgMjAwOC4KKyoqCisqKiBUaGlzIGFsZ29yaXRobSBhbmQgc291cmNlIGNvZGUgaXMgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4uCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lICBTS0VJTl9QT1JUX0NPREUgLyogaW5zdGFudGlhdGUgYW55IGNvZGUgaW4gc2tlaW5fcG9ydC5oICovCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4gICAgICAgLyogZ2V0IHRoZSBtZW1jcHkvbWVtc2V0IGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgInNrZWluLmgiIC8qIGdldCB0aGUgU2tlaW4gQVBJIGRlZmluaXRpb25zICAgKi8KKyNpbmNsdWRlICJza2Vpbl9pdi5oIiAgICAvKiBnZXQgcHJlY29tcHV0ZWQgSVZzICovCisjaW5jbHVkZSAic2tlaW5fYmxvY2suaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgIDI1Ni1iaXQgU2tlaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLyogaW5pdCB0aGUgY29udGV4dCBmb3IgYSBzdHJhaWdodCBoYXNoaW5nIG9wZXJhdGlvbiAgKi8KK2ludCBza2Vpbl8yNTZfaW5pdChzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCAqY3R4LCBzaXplX3QgaGFzaF9iaXRfbGVuKQoreworCXVuaW9uIHsKKwkJdTggYltTS0VJTl8yNTZfU1RBVEVfQllURVNdOworCQl1NjQgd1tTS0VJTl8yNTZfU1RBVEVfV09SRFNdOworCX0gY2ZnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZyBibG9jayAqLworCisJc2tlaW5fYXNzZXJ0X3JldChoYXNoX2JpdF9sZW4gPiAwLCBTS0VJTl9CQURfSEFTSExFTik7CisJY3R4LT5oLmhhc2hfYml0X2xlbiA9IGhhc2hfYml0X2xlbjsgICAgICAgICAvKiBvdXRwdXQgaGFzaCBiaXQgY291bnQgKi8KKworCXN3aXRjaCAoaGFzaF9iaXRfbGVuKSB7IC8qIHVzZSBwcmUtY29tcHV0ZWQgdmFsdWVzLCB3aGVyZSBhdmFpbGFibGUgKi8KKwljYXNlICAyNTY6CisJCW1lbWNweShjdHgtPngsIFNLRUlOXzI1Nl9JVl8yNTYsIHNpemVvZihjdHgtPngpKTsKKwkJYnJlYWs7CisJY2FzZSAgMjI0OgorCQltZW1jcHkoY3R4LT54LCBTS0VJTl8yNTZfSVZfMjI0LCBzaXplb2YoY3R4LT54KSk7CisJCWJyZWFrOworCWNhc2UgIDE2MDoKKwkJbWVtY3B5KGN0eC0+eCwgU0tFSU5fMjU2X0lWXzE2MCwgc2l6ZW9mKGN0eC0+eCkpOworCQlicmVhazsKKwljYXNlICAxMjg6CisJCW1lbWNweShjdHgtPngsIFNLRUlOXzI1Nl9JVl8xMjgsIHNpemVvZihjdHgtPngpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaGVyZSBpZiB0aGVyZSBpcyBubyBwcmVjb21wdXRlZCBJViB2YWx1ZSBhdmFpbGFibGUgKi8KKwkJLyoKKwkJICogYnVpbGQvcHJvY2VzcyB0aGUgY29uZmlnIGJsb2NrLCB0eXBlID09IENPTkZJRyAoY291bGQgYmUKKwkJICogcHJlY29tcHV0ZWQpCisJCSAqLworCQkvKiBzZXQgdHdlYWtzOiBUMD0wOyBUMT1DRkcgfCBGSU5BTCAqLworCQlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIENGR19GSU5BTCk7CisKKwkJLyogc2V0IHRoZSBzY2hlbWEsIHZlcnNpb24gKi8KKwkJY2ZnLndbMF0gPSBza2Vpbl9zd2FwNjQoU0tFSU5fU0NIRU1BX1ZFUik7CisJCS8qIGhhc2ggcmVzdWx0IGxlbmd0aCBpbiBiaXRzICovCisJCWNmZy53WzFdID0gc2tlaW5fc3dhcDY0KGhhc2hfYml0X2xlbik7CisJCWNmZy53WzJdID0gc2tlaW5fc3dhcDY0KFNLRUlOX0NGR19UUkVFX0lORk9fU0VRVUVOVElBTCk7CisJCS8qIHplcm8gcGFkIGNvbmZpZyBibG9jayAqLworCQltZW1zZXQoJmNmZy53WzNdLCAwLCBzaXplb2YoY2ZnKSAtIDMqc2l6ZW9mKGNmZy53WzBdKSk7CisKKwkJLyogY29tcHV0ZSB0aGUgaW5pdGlhbCBjaGFpbmluZyB2YWx1ZXMgZnJvbSBjb25maWcgYmxvY2sgKi8KKwkJLyogemVybyB0aGUgY2hhaW5pbmcgdmFyaWFibGVzICovCisJCW1lbXNldChjdHgtPngsIDAsIHNpemVvZihjdHgtPngpKTsKKwkJc2tlaW5fMjU2X3Byb2Nlc3NfYmxvY2soY3R4LCBjZmcuYiwgMSwgU0tFSU5fQ0ZHX1NUUl9MRU4pOworCQlicmVhazsKKwl9CisJLyogVGhlIGNoYWluaW5nIHZhcnMgY3R4LT54IGFyZSBub3cgaW5pdGlhbGl6ZWQgZm9yIGhhc2hfYml0X2xlbi4gKi8KKwkvKiBTZXQgdXAgdG8gcHJvY2VzcyB0aGUgZGF0YSBtZXNzYWdlIHBvcnRpb24gb2YgdGhlIGhhc2ggKGRlZmF1bHQpICovCisJc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4LCBNU0cpOyAgICAgICAgICAgICAgLyogVDA9MCwgVDE9IE1TRyB0eXBlICovCisKKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGluaXQgdGhlIGNvbnRleHQgZm9yIGEgTUFDIGFuZC9vciB0cmVlIGhhc2ggb3BlcmF0aW9uICovCisvKiBbaWRlbnRpY2FsIHRvIHNrZWluXzI1Nl9pbml0KCkgd2hlbiBrZXlfYnl0ZXMgPT0gMCAmJiBcCisgKgl0cmVlX2luZm8gPT0gU0tFSU5fQ0ZHX1RSRUVfSU5GT19TRVFVRU5USUFMXSAqLworaW50IHNrZWluXzI1Nl9pbml0X2V4dChzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCAqY3R4LCBzaXplX3QgaGFzaF9iaXRfbGVuLAorCQkgICAgICAgdTY0IHRyZWVfaW5mbywgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9ieXRlcykKK3sKKwl1bmlvbiB7CisJCXU4ICBiW1NLRUlOXzI1Nl9TVEFURV9CWVRFU107CisJCXU2NCB3W1NLRUlOXzI1Nl9TVEFURV9XT1JEU107CisJfSBjZmc7IC8qIGNvbmZpZyBibG9jayAqLworCisJc2tlaW5fYXNzZXJ0X3JldChoYXNoX2JpdF9sZW4gPiAwLCBTS0VJTl9CQURfSEFTSExFTik7CisJc2tlaW5fYXNzZXJ0X3JldChrZXlfYnl0ZXMgPT0gMCB8fCBrZXkgIT0gTlVMTCwgU0tFSU5fRkFJTCk7CisKKwkvKiBjb21wdXRlIHRoZSBpbml0aWFsIGNoYWluaW5nIHZhbHVlcyBjdHgtPnhbXSwgYmFzZWQgb24ga2V5ICovCisJaWYgKGtleV9ieXRlcyA9PSAwKSB7IC8qIGlzIHRoZXJlIGEga2V5PyAqLworCQkvKiBubyBrZXk6IHVzZSBhbGwgemVyb2VzIGFzIGtleSBmb3IgY29uZmlnIGJsb2NrICovCisJCW1lbXNldChjdHgtPngsIDAsIHNpemVvZihjdHgtPngpKTsKKwl9IGVsc2UgeyAvKiBoZXJlIHRvIHByZS1wcm9jZXNzIGEga2V5ICovCisJCXNrZWluX2Fzc2VydChzaXplb2YoY2ZnLmIpID49IHNpemVvZihjdHgtPngpKTsKKwkJLyogZG8gYSBtaW5pLUluaXQgcmlnaHQgaGVyZSAqLworCQkvKiBzZXQgb3V0cHV0IGhhc2ggYml0IGNvdW50ID0gc3RhdGUgc2l6ZSAqLworCQljdHgtPmguaGFzaF9iaXRfbGVuID0gOCpzaXplb2YoY3R4LT54KTsKKwkJLyogc2V0IHR3ZWFrczogVDAgPSAwOyBUMSA9IEtFWSB0eXBlICovCisJCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgS0VZKTsKKwkJLyogemVybyB0aGUgaW5pdGlhbCBjaGFpbmluZyB2YXJpYWJsZXMgKi8KKwkJbWVtc2V0KGN0eC0+eCwgMCwgc2l6ZW9mKGN0eC0+eCkpOworCQkvKiBoYXNoIHRoZSBrZXkgKi8KKwkJc2tlaW5fMjU2X3VwZGF0ZShjdHgsIGtleSwga2V5X2J5dGVzKTsKKwkJLyogcHV0IHJlc3VsdCBpbnRvIGNmZy5iW10gKi8KKwkJc2tlaW5fMjU2X2ZpbmFsX3BhZChjdHgsIGNmZy5iKTsKKwkJLyogY29weSBvdmVyIGludG8gY3R4LT54W10gKi8KKwkJbWVtY3B5KGN0eC0+eCwgY2ZnLmIsIHNpemVvZihjZmcuYikpOworCX0KKwkvKgorCSAqIGJ1aWxkL3Byb2Nlc3MgdGhlIGNvbmZpZyBibG9jaywgdHlwZSA9PSBDT05GSUcgKGNvdWxkIGJlCisJICogcHJlY29tcHV0ZWQgZm9yIGVhY2gga2V5KQorCSAqLworCS8qIG91dHB1dCBoYXNoIGJpdCBjb3VudCAqLworCWN0eC0+aC5oYXNoX2JpdF9sZW4gPSBoYXNoX2JpdF9sZW47CisJc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4LCBDRkdfRklOQUwpOworCisJLyogcHJlLXBhZCBjZmcud1tdIHdpdGggemVyb2VzICovCisJbWVtc2V0KCZjZmcudywgMCwgc2l6ZW9mKGNmZy53KSk7CisJY2ZnLndbMF0gPSBza2Vpbl9zd2FwNjQoU0tFSU5fU0NIRU1BX1ZFUik7CisJLyogaGFzaCByZXN1bHQgbGVuZ3RoIGluIGJpdHMgKi8KKwljZmcud1sxXSA9IHNrZWluX3N3YXA2NChoYXNoX2JpdF9sZW4pOworCS8qIHRyZWUgaGFzaCBjb25maWcgaW5mbyAob3IgU0tFSU5fQ0ZHX1RSRUVfSU5GT19TRVFVRU5USUFMKSAqLworCWNmZy53WzJdID0gc2tlaW5fc3dhcDY0KHRyZWVfaW5mbyk7CisKKwlza2Vpbl9zaG93X2tleSgyNTYsICZjdHgtPmgsIGtleSwga2V5X2J5dGVzKTsKKworCS8qIGNvbXB1dGUgdGhlIGluaXRpYWwgY2hhaW5pbmcgdmFsdWVzIGZyb20gY29uZmlnIGJsb2NrICovCisJc2tlaW5fMjU2X3Byb2Nlc3NfYmxvY2soY3R4LCBjZmcuYiwgMSwgU0tFSU5fQ0ZHX1NUUl9MRU4pOworCisJLyogVGhlIGNoYWluaW5nIHZhcnMgY3R4LT54IGFyZSBub3cgaW5pdGlhbGl6ZWQgKi8KKwkvKiBTZXQgdXAgdG8gcHJvY2VzcyB0aGUgZGF0YSBtZXNzYWdlIHBvcnRpb24gb2YgdGhlIGhhc2ggKGRlZmF1bHQpICovCisJc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4LCBNU0cpOworCisJcmV0dXJuIFNLRUlOX1NVQ0NFU1M7Cit9CisKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyovCisvKiBwcm9jZXNzIHRoZSBpbnB1dCBieXRlcyAqLworaW50IHNrZWluXzI1Nl91cGRhdGUoc3RydWN0IHNrZWluXzI1Nl9jdHggKmN0eCwgY29uc3QgdTggKm1zZywKKwkJICAgICBzaXplX3QgbXNnX2J5dGVfY250KQoreworCXNpemVfdCBuOworCisJLyogY2F0Y2ggdW5pbml0aWFsaXplZCBjb250ZXh0ICovCisJc2tlaW5fYXNzZXJ0X3JldChjdHgtPmguYl9jbnQgPD0gU0tFSU5fMjU2X0JMT0NLX0JZVEVTLCBTS0VJTl9GQUlMKTsKKworCS8qIHByb2Nlc3MgZnVsbCBibG9ja3MsIGlmIGFueSAqLworCWlmIChtc2dfYnl0ZV9jbnQgKyBjdHgtPmguYl9jbnQgPiBTS0VJTl8yNTZfQkxPQ0tfQllURVMpIHsKKwkJLyogZmluaXNoIHVwIGFueSBidWZmZXJlZCBtZXNzYWdlIGRhdGEgKi8KKwkJaWYgKGN0eC0+aC5iX2NudCkgeworCQkJLyogIyBieXRlcyBmcmVlIGluIGJ1ZmZlciBiW10gKi8KKwkJCW4gPSBTS0VJTl8yNTZfQkxPQ0tfQllURVMgLSBjdHgtPmguYl9jbnQ7CisJCQlpZiAobikgeworCQkJCS8qIGNoZWNrIG9uIG91ciBsb2dpYyBoZXJlICovCisJCQkJc2tlaW5fYXNzZXJ0KG4gPCBtc2dfYnl0ZV9jbnQpOworCQkJCW1lbWNweSgmY3R4LT5iW2N0eC0+aC5iX2NudF0sIG1zZywgbik7CisJCQkJbXNnX2J5dGVfY250ICAtPSBuOworCQkJCW1zZyAgICAgICAgICs9IG47CisJCQkJY3R4LT5oLmJfY250ICs9IG47CisJCQl9CisJCQlza2Vpbl9hc3NlcnQoY3R4LT5oLmJfY250ID09IFNLRUlOXzI1Nl9CTE9DS19CWVRFUyk7CisJCQlza2Vpbl8yNTZfcHJvY2Vzc19ibG9jayhjdHgsIGN0eC0+YiwgMSwKKwkJCQkJCVNLRUlOXzI1Nl9CTE9DS19CWVRFUyk7CisJCQljdHgtPmguYl9jbnQgPSAwOworCQl9CisJCS8qCisJCSAqIG5vdyBwcm9jZXNzIGFueSByZW1haW5pbmcgZnVsbCBibG9ja3MsIGRpcmVjdGx5IGZyb20gaW5wdXQKKwkJICogbWVzc2FnZSBkYXRhCisJCSAqLworCQlpZiAobXNnX2J5dGVfY250ID4gU0tFSU5fMjU2X0JMT0NLX0JZVEVTKSB7CisJCQkvKiBudW1iZXIgb2YgZnVsbCBibG9ja3MgdG8gcHJvY2VzcyAqLworCQkJbiA9IChtc2dfYnl0ZV9jbnQtMSkgLyBTS0VJTl8yNTZfQkxPQ0tfQllURVM7CisJCQlza2Vpbl8yNTZfcHJvY2Vzc19ibG9jayhjdHgsIG1zZywgbiwKKwkJCQkJCVNLRUlOXzI1Nl9CTE9DS19CWVRFUyk7CisJCQltc2dfYnl0ZV9jbnQgLT0gbiAqIFNLRUlOXzI1Nl9CTE9DS19CWVRFUzsKKwkJCW1zZyAgICAgICAgKz0gbiAqIFNLRUlOXzI1Nl9CTE9DS19CWVRFUzsKKwkJfQorCQlza2Vpbl9hc3NlcnQoY3R4LT5oLmJfY250ID09IDApOworCX0KKworCS8qIGNvcHkgYW55IHJlbWFpbmluZyBzb3VyY2UgbWVzc2FnZSBkYXRhIGJ5dGVzIGludG8gYltdICovCisJaWYgKG1zZ19ieXRlX2NudCkgeworCQlza2Vpbl9hc3NlcnQobXNnX2J5dGVfY250ICsgY3R4LT5oLmJfY250IDw9CisJCQkgICAgIFNLRUlOXzI1Nl9CTE9DS19CWVRFUyk7CisJCW1lbWNweSgmY3R4LT5iW2N0eC0+aC5iX2NudF0sIG1zZywgbXNnX2J5dGVfY250KTsKKwkJY3R4LT5oLmJfY250ICs9IG1zZ19ieXRlX2NudDsKKwl9CisKKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGZpbmFsaXplIHRoZSBoYXNoIGNvbXB1dGF0aW9uIGFuZCBvdXRwdXQgdGhlIHJlc3VsdCAqLworaW50IHNrZWluXzI1Nl9maW5hbChzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCAqY3R4LCB1OCAqaGFzaF92YWwpCit7CisJc2l6ZV90IGksIG4sIGJ5dGVfY250OworCXU2NCB4W1NLRUlOXzI1Nl9TVEFURV9XT1JEU107CisJLyogY2F0Y2ggdW5pbml0aWFsaXplZCBjb250ZXh0ICovCisJc2tlaW5fYXNzZXJ0X3JldChjdHgtPmguYl9jbnQgPD0gU0tFSU5fMjU2X0JMT0NLX0JZVEVTLCBTS0VJTl9GQUlMKTsKKworCS8qIHRhZyBhcyB0aGUgZmluYWwgYmxvY2sgKi8KKwljdHgtPmgudHdlYWtbMV0gfD0gU0tFSU5fVDFfRkxBR19GSU5BTDsKKwkvKiB6ZXJvIHBhZCBiW10gaWYgbmVjZXNzYXJ5ICovCisJaWYgKGN0eC0+aC5iX2NudCA8IFNLRUlOXzI1Nl9CTE9DS19CWVRFUykKKwkJbWVtc2V0KCZjdHgtPmJbY3R4LT5oLmJfY250XSwgMCwKKwkJCVNLRUlOXzI1Nl9CTE9DS19CWVRFUyAtIGN0eC0+aC5iX2NudCk7CisKKwkvKiBwcm9jZXNzIHRoZSBmaW5hbCBibG9jayAqLworCXNrZWluXzI1Nl9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBjdHgtPmguYl9jbnQpOworCisJLyogbm93IG91dHB1dCB0aGUgcmVzdWx0ICovCisJLyogdG90YWwgbnVtYmVyIG9mIG91dHB1dCBieXRlcyAqLworCWJ5dGVfY250ID0gKGN0eC0+aC5oYXNoX2JpdF9sZW4gKyA3KSA+PiAzOworCisJLyogcnVuIFRocmVlZmlzaCBpbiAiY291bnRlciBtb2RlIiB0byBnZW5lcmF0ZSBvdXRwdXQgKi8KKwkvKiB6ZXJvIG91dCBiW10sIHNvIGl0IGNhbiBob2xkIHRoZSBjb3VudGVyICovCisJbWVtc2V0KGN0eC0+YiwgMCwgc2l6ZW9mKGN0eC0+YikpOworCS8qIGtlZXAgYSBsb2NhbCBjb3B5IG9mIGNvdW50ZXIgbW9kZSAia2V5IiAqLworCW1lbWNweSh4LCBjdHgtPngsIHNpemVvZih4KSk7CisJZm9yIChpID0gMDsgaSpTS0VJTl8yNTZfQkxPQ0tfQllURVMgPCBieXRlX2NudDsgaSsrKSB7CisJCS8qIGJ1aWxkIHRoZSBjb3VudGVyIGJsb2NrICovCisJCSgodTY0ICopY3R4LT5iKVswXSA9IHNrZWluX3N3YXA2NCgodTY0KSBpKTsKKwkJc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4LCBPVVRfRklOQUwpOworCQkvKiBydW4gImNvdW50ZXIgbW9kZSIgKi8KKwkJc2tlaW5fMjU2X3Byb2Nlc3NfYmxvY2soY3R4LCBjdHgtPmIsIDEsIHNpemVvZih1NjQpKTsKKwkJLyogbnVtYmVyIG9mIG91dHB1dCBieXRlcyBsZWZ0IHRvIGdvICovCisJCW4gPSBieXRlX2NudCAtIGkqU0tFSU5fMjU2X0JMT0NLX0JZVEVTOworCQlpZiAobiA+PSBTS0VJTl8yNTZfQkxPQ0tfQllURVMpCisJCQluICA9IFNLRUlOXzI1Nl9CTE9DS19CWVRFUzsKKwkJLyogIm91dHB1dCIgdGhlIGN0ciBtb2RlIGJ5dGVzICovCisJCXNrZWluX3B1dDY0X2xzYl9maXJzdChoYXNoX3ZhbCtpKlNLRUlOXzI1Nl9CTE9DS19CWVRFUywgY3R4LT54LAorCQkJCSAgICAgIG4pOworCQlza2Vpbl9zaG93X2ZpbmFsKDI1NiwgJmN0eC0+aCwgbiwKKwkJCQkgaGFzaF92YWwraSpTS0VJTl8yNTZfQkxPQ0tfQllURVMpOworCQkvKiByZXN0b3JlIHRoZSBjb3VudGVyIG1vZGUga2V5IGZvciBuZXh0IHRpbWUgKi8KKwkJbWVtY3B5KGN0eC0+eCwgeCwgc2l6ZW9mKHgpKTsKKwl9CisJcmV0dXJuIFNLRUlOX1NVQ0NFU1M7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICA1MTItYml0IFNrZWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGluaXQgdGhlIGNvbnRleHQgZm9yIGEgc3RyYWlnaHQgaGFzaGluZyBvcGVyYXRpb24gICovCitpbnQgc2tlaW5fNTEyX2luaXQoc3RydWN0IHNrZWluXzUxMl9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbikKK3sKKwl1bmlvbiB7CisJCXU4IGJbU0tFSU5fNTEyX1NUQVRFX0JZVEVTXTsKKwkJdTY0IHdbU0tFSU5fNTEyX1NUQVRFX1dPUkRTXTsKKwl9IGNmZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25maWcgYmxvY2sgKi8KKworCXNrZWluX2Fzc2VydF9yZXQoaGFzaF9iaXRfbGVuID4gMCwgU0tFSU5fQkFEX0hBU0hMRU4pOworCWN0eC0+aC5oYXNoX2JpdF9sZW4gPSBoYXNoX2JpdF9sZW47ICAgICAgICAgLyogb3V0cHV0IGhhc2ggYml0IGNvdW50ICovCisKKwlzd2l0Y2ggKGhhc2hfYml0X2xlbikgeyAvKiB1c2UgcHJlLWNvbXB1dGVkIHZhbHVlcywgd2hlcmUgYXZhaWxhYmxlICovCisJY2FzZSAgNTEyOgorCQltZW1jcHkoY3R4LT54LCBTS0VJTl81MTJfSVZfNTEyLCBzaXplb2YoY3R4LT54KSk7CisJCWJyZWFrOworCWNhc2UgIDM4NDoKKwkJbWVtY3B5KGN0eC0+eCwgU0tFSU5fNTEyX0lWXzM4NCwgc2l6ZW9mKGN0eC0+eCkpOworCQlicmVhazsKKwljYXNlICAyNTY6CisJCW1lbWNweShjdHgtPngsIFNLRUlOXzUxMl9JVl8yNTYsIHNpemVvZihjdHgtPngpKTsKKwkJYnJlYWs7CisJY2FzZSAgMjI0OgorCQltZW1jcHkoY3R4LT54LCBTS0VJTl81MTJfSVZfMjI0LCBzaXplb2YoY3R4LT54KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGhlcmUgaWYgdGhlcmUgaXMgbm8gcHJlY29tcHV0ZWQgSVYgdmFsdWUgYXZhaWxhYmxlICovCisJCS8qCisJCSAqIGJ1aWxkL3Byb2Nlc3MgdGhlIGNvbmZpZyBibG9jaywgdHlwZSA9PSBDT05GSUcgKGNvdWxkIGJlCisJCSAqIHByZWNvbXB1dGVkKQorCQkgKi8KKwkJLyogc2V0IHR3ZWFrczogVDA9MDsgVDE9Q0ZHIHwgRklOQUwgKi8KKwkJc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4LCBDRkdfRklOQUwpOworCisJCS8qIHNldCB0aGUgc2NoZW1hLCB2ZXJzaW9uICovCisJCWNmZy53WzBdID0gc2tlaW5fc3dhcDY0KFNLRUlOX1NDSEVNQV9WRVIpOworCQkvKiBoYXNoIHJlc3VsdCBsZW5ndGggaW4gYml0cyAqLworCQljZmcud1sxXSA9IHNrZWluX3N3YXA2NChoYXNoX2JpdF9sZW4pOworCQljZmcud1syXSA9IHNrZWluX3N3YXA2NChTS0VJTl9DRkdfVFJFRV9JTkZPX1NFUVVFTlRJQUwpOworCQkvKiB6ZXJvIHBhZCBjb25maWcgYmxvY2sgKi8KKwkJbWVtc2V0KCZjZmcud1szXSwgMCwgc2l6ZW9mKGNmZykgLSAzKnNpemVvZihjZmcud1swXSkpOworCisJCS8qIGNvbXB1dGUgdGhlIGluaXRpYWwgY2hhaW5pbmcgdmFsdWVzIGZyb20gY29uZmlnIGJsb2NrICovCisJCS8qIHplcm8gdGhlIGNoYWluaW5nIHZhcmlhYmxlcyAqLworCQltZW1zZXQoY3R4LT54LCAwLCBzaXplb2YoY3R4LT54KSk7CisJCXNrZWluXzUxMl9wcm9jZXNzX2Jsb2NrKGN0eCwgY2ZnLmIsIDEsIFNLRUlOX0NGR19TVFJfTEVOKTsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBUaGUgY2hhaW5pbmcgdmFycyBjdHgtPnggYXJlIG5vdyBpbml0aWFsaXplZCBmb3IgdGhlIGdpdmVuCisJICogaGFzaF9iaXRfbGVuLgorCSAqLworCS8qIFNldCB1cCB0byBwcm9jZXNzIHRoZSBkYXRhIG1lc3NhZ2UgcG9ydGlvbiBvZiB0aGUgaGFzaCAoZGVmYXVsdCkgKi8KKwlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIE1TRyk7ICAgICAgICAgICAgICAvKiBUMD0wLCBUMT0gTVNHIHR5cGUgKi8KKworCXJldHVybiBTS0VJTl9TVUNDRVNTOworfQorCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLyogaW5pdCB0aGUgY29udGV4dCBmb3IgYSBNQUMgYW5kL29yIHRyZWUgaGFzaCBvcGVyYXRpb24gKi8KKy8qIFtpZGVudGljYWwgdG8gc2tlaW5fNTEyX2luaXQoKSB3aGVuIGtleV9ieXRlcyA9PSAwICYmIFwKKyAqCXRyZWVfaW5mbyA9PSBTS0VJTl9DRkdfVFJFRV9JTkZPX1NFUVVFTlRJQUxdICovCitpbnQgc2tlaW5fNTEyX2luaXRfZXh0KHN0cnVjdCBza2Vpbl81MTJfY3R4ICpjdHgsIHNpemVfdCBoYXNoX2JpdF9sZW4sCisJCSAgICAgICB1NjQgdHJlZV9pbmZvLCBjb25zdCB1OCAqa2V5LCBzaXplX3Qga2V5X2J5dGVzKQoreworCXVuaW9uIHsKKwkJdTggYltTS0VJTl81MTJfU1RBVEVfQllURVNdOworCQl1NjQgd1tTS0VJTl81MTJfU1RBVEVfV09SRFNdOworCX0gY2ZnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZyBibG9jayAqLworCisJc2tlaW5fYXNzZXJ0X3JldChoYXNoX2JpdF9sZW4gPiAwLCBTS0VJTl9CQURfSEFTSExFTik7CisJc2tlaW5fYXNzZXJ0X3JldChrZXlfYnl0ZXMgPT0gMCB8fCBrZXkgIT0gTlVMTCwgU0tFSU5fRkFJTCk7CisKKwkvKiBjb21wdXRlIHRoZSBpbml0aWFsIGNoYWluaW5nIHZhbHVlcyBjdHgtPnhbXSwgYmFzZWQgb24ga2V5ICovCisJaWYgKGtleV9ieXRlcyA9PSAwKSB7IC8qIGlzIHRoZXJlIGEga2V5PyAqLworCQkvKiBubyBrZXk6IHVzZSBhbGwgemVyb2VzIGFzIGtleSBmb3IgY29uZmlnIGJsb2NrICovCisJCW1lbXNldChjdHgtPngsIDAsIHNpemVvZihjdHgtPngpKTsKKwl9IGVsc2UgeyAvKiBoZXJlIHRvIHByZS1wcm9jZXNzIGEga2V5ICovCisJCXNrZWluX2Fzc2VydChzaXplb2YoY2ZnLmIpID49IHNpemVvZihjdHgtPngpKTsKKwkJLyogZG8gYSBtaW5pLUluaXQgcmlnaHQgaGVyZSAqLworCQkvKiBzZXQgb3V0cHV0IGhhc2ggYml0IGNvdW50ID0gc3RhdGUgc2l6ZSAqLworCQljdHgtPmguaGFzaF9iaXRfbGVuID0gOCpzaXplb2YoY3R4LT54KTsKKwkJLyogc2V0IHR3ZWFrczogVDAgPSAwOyBUMSA9IEtFWSB0eXBlICovCisJCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgS0VZKTsKKwkJLyogemVybyB0aGUgaW5pdGlhbCBjaGFpbmluZyB2YXJpYWJsZXMgKi8KKwkJbWVtc2V0KGN0eC0+eCwgMCwgc2l6ZW9mKGN0eC0+eCkpOworCQkvKiBoYXNoIHRoZSBrZXkgKi8KKwkJc2tlaW5fNTEyX3VwZGF0ZShjdHgsIGtleSwga2V5X2J5dGVzKTsKKwkJLyogcHV0IHJlc3VsdCBpbnRvIGNmZy5iW10gKi8KKwkJc2tlaW5fNTEyX2ZpbmFsX3BhZChjdHgsIGNmZy5iKTsKKwkJLyogY29weSBvdmVyIGludG8gY3R4LT54W10gKi8KKwkJbWVtY3B5KGN0eC0+eCwgY2ZnLmIsIHNpemVvZihjZmcuYikpOworCX0KKwkvKgorCSAqIGJ1aWxkL3Byb2Nlc3MgdGhlIGNvbmZpZyBibG9jaywgdHlwZSA9PSBDT05GSUcgKGNvdWxkIGJlCisJICogcHJlY29tcHV0ZWQgZm9yIGVhY2gga2V5KQorCSAqLworCWN0eC0+aC5oYXNoX2JpdF9sZW4gPSBoYXNoX2JpdF9sZW47ICAgICAgICAgIC8qIG91dHB1dCBoYXNoIGJpdCBjb3VudCAqLworCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgQ0ZHX0ZJTkFMKTsKKworCS8qIHByZS1wYWQgY2ZnLndbXSB3aXRoIHplcm9lcyAqLworCW1lbXNldCgmY2ZnLncsIDAsIHNpemVvZihjZmcudykpOworCWNmZy53WzBdID0gc2tlaW5fc3dhcDY0KFNLRUlOX1NDSEVNQV9WRVIpOworCS8qIGhhc2ggcmVzdWx0IGxlbmd0aCBpbiBiaXRzICovCisJY2ZnLndbMV0gPSBza2Vpbl9zd2FwNjQoaGFzaF9iaXRfbGVuKTsKKwkvKiB0cmVlIGhhc2ggY29uZmlnIGluZm8gKG9yIFNLRUlOX0NGR19UUkVFX0lORk9fU0VRVUVOVElBTCkgKi8KKwljZmcud1syXSA9IHNrZWluX3N3YXA2NCh0cmVlX2luZm8pOworCisJc2tlaW5fc2hvd19rZXkoNTEyLCAmY3R4LT5oLCBrZXksIGtleV9ieXRlcyk7CisKKwkvKiBjb21wdXRlIHRoZSBpbml0aWFsIGNoYWluaW5nIHZhbHVlcyBmcm9tIGNvbmZpZyBibG9jayAqLworCXNrZWluXzUxMl9wcm9jZXNzX2Jsb2NrKGN0eCwgY2ZnLmIsIDEsIFNLRUlOX0NGR19TVFJfTEVOKTsKKworCS8qIFRoZSBjaGFpbmluZyB2YXJzIGN0eC0+eCBhcmUgbm93IGluaXRpYWxpemVkICovCisJLyogU2V0IHVwIHRvIHByb2Nlc3MgdGhlIGRhdGEgbWVzc2FnZSBwb3J0aW9uIG9mIHRoZSBoYXNoIChkZWZhdWx0KSAqLworCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgTVNHKTsKKworCXJldHVybiBTS0VJTl9TVUNDRVNTOworfQorCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLyogcHJvY2VzcyB0aGUgaW5wdXQgYnl0ZXMgKi8KK2ludCBza2Vpbl81MTJfdXBkYXRlKHN0cnVjdCBza2Vpbl81MTJfY3R4ICpjdHgsIGNvbnN0IHU4ICptc2csCisJCSAgICAgc2l6ZV90IG1zZ19ieXRlX2NudCkKK3sKKwlzaXplX3QgbjsKKworCS8qIGNhdGNoIHVuaW5pdGlhbGl6ZWQgY29udGV4dCAqLworCXNrZWluX2Fzc2VydF9yZXQoY3R4LT5oLmJfY250IDw9IFNLRUlOXzUxMl9CTE9DS19CWVRFUywgU0tFSU5fRkFJTCk7CisKKwkvKiBwcm9jZXNzIGZ1bGwgYmxvY2tzLCBpZiBhbnkgKi8KKwlpZiAobXNnX2J5dGVfY250ICsgY3R4LT5oLmJfY250ID4gU0tFSU5fNTEyX0JMT0NLX0JZVEVTKSB7CisJCS8qIGZpbmlzaCB1cCBhbnkgYnVmZmVyZWQgbWVzc2FnZSBkYXRhICovCisJCWlmIChjdHgtPmguYl9jbnQpIHsKKwkJCS8qICMgYnl0ZXMgZnJlZSBpbiBidWZmZXIgYltdICovCisJCQluID0gU0tFSU5fNTEyX0JMT0NLX0JZVEVTIC0gY3R4LT5oLmJfY250OworCQkJaWYgKG4pIHsKKwkJCQkvKiBjaGVjayBvbiBvdXIgbG9naWMgaGVyZSAqLworCQkJCXNrZWluX2Fzc2VydChuIDwgbXNnX2J5dGVfY250KTsKKwkJCQltZW1jcHkoJmN0eC0+YltjdHgtPmguYl9jbnRdLCBtc2csIG4pOworCQkJCW1zZ19ieXRlX2NudCAgLT0gbjsKKwkJCQltc2cgICAgICAgICArPSBuOworCQkJCWN0eC0+aC5iX2NudCArPSBuOworCQkJfQorCQkJc2tlaW5fYXNzZXJ0KGN0eC0+aC5iX2NudCA9PSBTS0VJTl81MTJfQkxPQ0tfQllURVMpOworCQkJc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2soY3R4LCBjdHgtPmIsIDEsCisJCQkJCQlTS0VJTl81MTJfQkxPQ0tfQllURVMpOworCQkJY3R4LT5oLmJfY250ID0gMDsKKwkJfQorCQkvKgorCQkgKiBub3cgcHJvY2VzcyBhbnkgcmVtYWluaW5nIGZ1bGwgYmxvY2tzLCBkaXJlY3RseSBmcm9tIGlucHV0CisJCSAqIG1lc3NhZ2UgZGF0YQorCQkgKi8KKwkJaWYgKG1zZ19ieXRlX2NudCA+IFNLRUlOXzUxMl9CTE9DS19CWVRFUykgeworCQkJLyogbnVtYmVyIG9mIGZ1bGwgYmxvY2tzIHRvIHByb2Nlc3MgKi8KKwkJCW4gPSAobXNnX2J5dGVfY250LTEpIC8gU0tFSU5fNTEyX0JMT0NLX0JZVEVTOworCQkJc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2soY3R4LCBtc2csIG4sCisJCQkJCQlTS0VJTl81MTJfQkxPQ0tfQllURVMpOworCQkJbXNnX2J5dGVfY250IC09IG4gKiBTS0VJTl81MTJfQkxPQ0tfQllURVM7CisJCQltc2cgICAgICAgICs9IG4gKiBTS0VJTl81MTJfQkxPQ0tfQllURVM7CisJCX0KKwkJc2tlaW5fYXNzZXJ0KGN0eC0+aC5iX2NudCA9PSAwKTsKKwl9CisKKwkvKiBjb3B5IGFueSByZW1haW5pbmcgc291cmNlIG1lc3NhZ2UgZGF0YSBieXRlcyBpbnRvIGJbXSAqLworCWlmIChtc2dfYnl0ZV9jbnQpIHsKKwkJc2tlaW5fYXNzZXJ0KG1zZ19ieXRlX2NudCArIGN0eC0+aC5iX2NudCA8PQorCQkJICAgICBTS0VJTl81MTJfQkxPQ0tfQllURVMpOworCQltZW1jcHkoJmN0eC0+YltjdHgtPmguYl9jbnRdLCBtc2csIG1zZ19ieXRlX2NudCk7CisJCWN0eC0+aC5iX2NudCArPSBtc2dfYnl0ZV9jbnQ7CisJfQorCisJcmV0dXJuIFNLRUlOX1NVQ0NFU1M7Cit9CisKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyovCisvKiBmaW5hbGl6ZSB0aGUgaGFzaCBjb21wdXRhdGlvbiBhbmQgb3V0cHV0IHRoZSByZXN1bHQgKi8KK2ludCBza2Vpbl81MTJfZmluYWwoc3RydWN0IHNrZWluXzUxMl9jdHggKmN0eCwgdTggKmhhc2hfdmFsKQoreworCXNpemVfdCBpLCBuLCBieXRlX2NudDsKKwl1NjQgeFtTS0VJTl81MTJfU1RBVEVfV09SRFNdOworCS8qIGNhdGNoIHVuaW5pdGlhbGl6ZWQgY29udGV4dCAqLworCXNrZWluX2Fzc2VydF9yZXQoY3R4LT5oLmJfY250IDw9IFNLRUlOXzUxMl9CTE9DS19CWVRFUywgU0tFSU5fRkFJTCk7CisKKwkvKiB0YWcgYXMgdGhlIGZpbmFsIGJsb2NrICovCisJY3R4LT5oLnR3ZWFrWzFdIHw9IFNLRUlOX1QxX0ZMQUdfRklOQUw7CisJLyogemVybyBwYWQgYltdIGlmIG5lY2Vzc2FyeSAqLworCWlmIChjdHgtPmguYl9jbnQgPCBTS0VJTl81MTJfQkxPQ0tfQllURVMpCisJCW1lbXNldCgmY3R4LT5iW2N0eC0+aC5iX2NudF0sIDAsCisJCQlTS0VJTl81MTJfQkxPQ0tfQllURVMgLSBjdHgtPmguYl9jbnQpOworCisJLyogcHJvY2VzcyB0aGUgZmluYWwgYmxvY2sgKi8KKwlza2Vpbl81MTJfcHJvY2Vzc19ibG9jayhjdHgsIGN0eC0+YiwgMSwgY3R4LT5oLmJfY250KTsKKworCS8qIG5vdyBvdXRwdXQgdGhlIHJlc3VsdCAqLworCS8qIHRvdGFsIG51bWJlciBvZiBvdXRwdXQgYnl0ZXMgKi8KKwlieXRlX2NudCA9IChjdHgtPmguaGFzaF9iaXRfbGVuICsgNykgPj4gMzsKKworCS8qIHJ1biBUaHJlZWZpc2ggaW4gImNvdW50ZXIgbW9kZSIgdG8gZ2VuZXJhdGUgb3V0cHV0ICovCisJLyogemVybyBvdXQgYltdLCBzbyBpdCBjYW4gaG9sZCB0aGUgY291bnRlciAqLworCW1lbXNldChjdHgtPmIsIDAsIHNpemVvZihjdHgtPmIpKTsKKwkvKiBrZWVwIGEgbG9jYWwgY29weSBvZiBjb3VudGVyIG1vZGUgImtleSIgKi8KKwltZW1jcHkoeCwgY3R4LT54LCBzaXplb2YoeCkpOworCWZvciAoaSA9IDA7IGkqU0tFSU5fNTEyX0JMT0NLX0JZVEVTIDwgYnl0ZV9jbnQ7IGkrKykgeworCQkvKiBidWlsZCB0aGUgY291bnRlciBibG9jayAqLworCQkoKHU2NCAqKWN0eC0+YilbMF0gPSBza2Vpbl9zd2FwNjQoKHU2NCkgaSk7CisJCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgT1VUX0ZJTkFMKTsKKwkJLyogcnVuICJjb3VudGVyIG1vZGUiICovCisJCXNrZWluXzUxMl9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBzaXplb2YodTY0KSk7CisJCS8qIG51bWJlciBvZiBvdXRwdXQgYnl0ZXMgbGVmdCB0byBnbyAqLworCQluID0gYnl0ZV9jbnQgLSBpKlNLRUlOXzUxMl9CTE9DS19CWVRFUzsKKwkJaWYgKG4gPj0gU0tFSU5fNTEyX0JMT0NLX0JZVEVTKQorCQkJbiAgPSBTS0VJTl81MTJfQkxPQ0tfQllURVM7CisJCS8qICJvdXRwdXQiIHRoZSBjdHIgbW9kZSBieXRlcyAqLworCQlza2Vpbl9wdXQ2NF9sc2JfZmlyc3QoaGFzaF92YWwraSpTS0VJTl81MTJfQkxPQ0tfQllURVMsIGN0eC0+eCwKKwkJCQkgICAgICBuKTsKKwkJc2tlaW5fc2hvd19maW5hbCg1MTIsICZjdHgtPmgsIG4sCisJCQkJIGhhc2hfdmFsK2kqU0tFSU5fNTEyX0JMT0NLX0JZVEVTKTsKKwkJLyogcmVzdG9yZSB0aGUgY291bnRlciBtb2RlIGtleSBmb3IgbmV4dCB0aW1lICovCisJCW1lbWNweShjdHgtPngsIHgsIHNpemVvZih4KSk7CisJfQorCXJldHVybiBTS0VJTl9TVUNDRVNTOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAxMDI0LWJpdCBTa2VpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyovCisvKiBpbml0IHRoZSBjb250ZXh0IGZvciBhIHN0cmFpZ2h0IGhhc2hpbmcgb3BlcmF0aW9uICAqLworaW50IHNrZWluXzEwMjRfaW5pdChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbikKK3sKKwl1bmlvbiB7CisJCXU4IGJbU0tFSU5fMTAyNF9TVEFURV9CWVRFU107CisJCXU2NCB3W1NLRUlOXzEwMjRfU1RBVEVfV09SRFNdOworCX0gY2ZnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZyBibG9jayAqLworCisJc2tlaW5fYXNzZXJ0X3JldChoYXNoX2JpdF9sZW4gPiAwLCBTS0VJTl9CQURfSEFTSExFTik7CisJY3R4LT5oLmhhc2hfYml0X2xlbiA9IGhhc2hfYml0X2xlbjsgICAgICAgICAvKiBvdXRwdXQgaGFzaCBiaXQgY291bnQgKi8KKworCXN3aXRjaCAoaGFzaF9iaXRfbGVuKSB7IC8qIHVzZSBwcmUtY29tcHV0ZWQgdmFsdWVzLCB3aGVyZSBhdmFpbGFibGUgKi8KKwljYXNlICA1MTI6CisJCW1lbWNweShjdHgtPngsIFNLRUlOXzEwMjRfSVZfNTEyLCBzaXplb2YoY3R4LT54KSk7CisJCWJyZWFrOworCWNhc2UgIDM4NDoKKwkJbWVtY3B5KGN0eC0+eCwgU0tFSU5fMTAyNF9JVl8zODQsIHNpemVvZihjdHgtPngpKTsKKwkJYnJlYWs7CisJY2FzZSAxMDI0OgorCQltZW1jcHkoY3R4LT54LCBTS0VJTl8xMDI0X0lWXzEwMjQsIHNpemVvZihjdHgtPngpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaGVyZSBpZiB0aGVyZSBpcyBubyBwcmVjb21wdXRlZCBJViB2YWx1ZSBhdmFpbGFibGUgKi8KKwkJLyoKKwkJICogYnVpbGQvcHJvY2VzcyB0aGUgY29uZmlnIGJsb2NrLCB0eXBlID09IENPTkZJRworCQkgKiAoY291bGQgYmUgcHJlY29tcHV0ZWQpCisJCSAqLworCQkvKiBzZXQgdHdlYWtzOiBUMD0wOyBUMT1DRkcgfCBGSU5BTCAqLworCQlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIENGR19GSU5BTCk7CisKKwkJLyogc2V0IHRoZSBzY2hlbWEsIHZlcnNpb24gKi8KKwkJY2ZnLndbMF0gPSBza2Vpbl9zd2FwNjQoU0tFSU5fU0NIRU1BX1ZFUik7CisJCS8qIGhhc2ggcmVzdWx0IGxlbmd0aCBpbiBiaXRzICovCisJCWNmZy53WzFdID0gc2tlaW5fc3dhcDY0KGhhc2hfYml0X2xlbik7CisJCWNmZy53WzJdID0gc2tlaW5fc3dhcDY0KFNLRUlOX0NGR19UUkVFX0lORk9fU0VRVUVOVElBTCk7CisJCS8qIHplcm8gcGFkIGNvbmZpZyBibG9jayAqLworCQltZW1zZXQoJmNmZy53WzNdLCAwLCBzaXplb2YoY2ZnKSAtIDMqc2l6ZW9mKGNmZy53WzBdKSk7CisKKwkJLyogY29tcHV0ZSB0aGUgaW5pdGlhbCBjaGFpbmluZyB2YWx1ZXMgZnJvbSBjb25maWcgYmxvY2sgKi8KKwkJLyogemVybyB0aGUgY2hhaW5pbmcgdmFyaWFibGVzICovCisJCW1lbXNldChjdHgtPngsIDAsIHNpemVvZihjdHgtPngpKTsKKwkJc2tlaW5fMTAyNF9wcm9jZXNzX2Jsb2NrKGN0eCwgY2ZnLmIsIDEsIFNLRUlOX0NGR19TVFJfTEVOKTsKKwkJYnJlYWs7CisJfQorCisJLyogVGhlIGNoYWluaW5nIHZhcnMgY3R4LT54IGFyZSBub3cgaW5pdGlhbGl6ZWQgZm9yIHRoZSBoYXNoX2JpdF9sZW4uICovCisJLyogU2V0IHVwIHRvIHByb2Nlc3MgdGhlIGRhdGEgbWVzc2FnZSBwb3J0aW9uIG9mIHRoZSBoYXNoIChkZWZhdWx0KSAqLworCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgTVNHKTsgICAgICAgICAgICAgIC8qIFQwPTAsIFQxPSBNU0cgdHlwZSAqLworCisJcmV0dXJuIFNLRUlOX1NVQ0NFU1M7Cit9CisKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyovCisvKiBpbml0IHRoZSBjb250ZXh0IGZvciBhIE1BQyBhbmQvb3IgdHJlZSBoYXNoIG9wZXJhdGlvbiAqLworLyogW2lkZW50aWNhbCB0byBza2Vpbl8xMDI0X2luaXQoKSB3aGVuIGtleV9ieXRlcyA9PSAwICYmIFwKKyAqCXRyZWVfaW5mbyA9PSBTS0VJTl9DRkdfVFJFRV9JTkZPX1NFUVVFTlRJQUxdICovCitpbnQgc2tlaW5fMTAyNF9pbml0X2V4dChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbiwKKwkJCXU2NCB0cmVlX2luZm8sIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfYnl0ZXMpCit7CisJdW5pb24geworCQl1OCBiW1NLRUlOXzEwMjRfU1RBVEVfQllURVNdOworCQl1NjQgd1tTS0VJTl8xMDI0X1NUQVRFX1dPUkRTXTsKKwl9IGNmZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25maWcgYmxvY2sgKi8KKworCXNrZWluX2Fzc2VydF9yZXQoaGFzaF9iaXRfbGVuID4gMCwgU0tFSU5fQkFEX0hBU0hMRU4pOworCXNrZWluX2Fzc2VydF9yZXQoa2V5X2J5dGVzID09IDAgfHwga2V5ICE9IE5VTEwsIFNLRUlOX0ZBSUwpOworCisJLyogY29tcHV0ZSB0aGUgaW5pdGlhbCBjaGFpbmluZyB2YWx1ZXMgY3R4LT54W10sIGJhc2VkIG9uIGtleSAqLworCWlmIChrZXlfYnl0ZXMgPT0gMCkgeyAvKiBpcyB0aGVyZSBhIGtleT8gKi8KKwkJLyogbm8ga2V5OiB1c2UgYWxsIHplcm9lcyBhcyBrZXkgZm9yIGNvbmZpZyBibG9jayAqLworCQltZW1zZXQoY3R4LT54LCAwLCBzaXplb2YoY3R4LT54KSk7CisJfSBlbHNlIHsgLyogaGVyZSB0byBwcmUtcHJvY2VzcyBhIGtleSAqLworCQlza2Vpbl9hc3NlcnQoc2l6ZW9mKGNmZy5iKSA+PSBzaXplb2YoY3R4LT54KSk7CisJCS8qIGRvIGEgbWluaS1Jbml0IHJpZ2h0IGhlcmUgKi8KKwkJLyogc2V0IG91dHB1dCBoYXNoIGJpdCBjb3VudCA9IHN0YXRlIHNpemUgKi8KKwkJY3R4LT5oLmhhc2hfYml0X2xlbiA9IDgqc2l6ZW9mKGN0eC0+eCk7CisJCS8qIHNldCB0d2Vha3M6IFQwID0gMDsgVDEgPSBLRVkgdHlwZSAqLworCQlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIEtFWSk7CisJCS8qIHplcm8gdGhlIGluaXRpYWwgY2hhaW5pbmcgdmFyaWFibGVzICovCisJCW1lbXNldChjdHgtPngsIDAsIHNpemVvZihjdHgtPngpKTsKKwkJLyogaGFzaCB0aGUga2V5ICovCisJCXNrZWluXzEwMjRfdXBkYXRlKGN0eCwga2V5LCBrZXlfYnl0ZXMpOworCQkvKiBwdXQgcmVzdWx0IGludG8gY2ZnLmJbXSAqLworCQlza2Vpbl8xMDI0X2ZpbmFsX3BhZChjdHgsIGNmZy5iKTsKKwkJLyogY29weSBvdmVyIGludG8gY3R4LT54W10gKi8KKwkJbWVtY3B5KGN0eC0+eCwgY2ZnLmIsIHNpemVvZihjZmcuYikpOworCX0KKwkvKgorCSAqIGJ1aWxkL3Byb2Nlc3MgdGhlIGNvbmZpZyBibG9jaywgdHlwZSA9PSBDT05GSUcgKGNvdWxkIGJlCisJICogcHJlY29tcHV0ZWQgZm9yIGVhY2gga2V5KQorCSAqLworCS8qIG91dHB1dCBoYXNoIGJpdCBjb3VudCAqLworCWN0eC0+aC5oYXNoX2JpdF9sZW4gPSBoYXNoX2JpdF9sZW47CisJc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4LCBDRkdfRklOQUwpOworCisJLyogcHJlLXBhZCBjZmcud1tdIHdpdGggemVyb2VzICovCisJbWVtc2V0KCZjZmcudywgMCwgc2l6ZW9mKGNmZy53KSk7CisJY2ZnLndbMF0gPSBza2Vpbl9zd2FwNjQoU0tFSU5fU0NIRU1BX1ZFUik7CisJLyogaGFzaCByZXN1bHQgbGVuZ3RoIGluIGJpdHMgKi8KKwljZmcud1sxXSA9IHNrZWluX3N3YXA2NChoYXNoX2JpdF9sZW4pOworCS8qIHRyZWUgaGFzaCBjb25maWcgaW5mbyAob3IgU0tFSU5fQ0ZHX1RSRUVfSU5GT19TRVFVRU5USUFMKSAqLworCWNmZy53WzJdID0gc2tlaW5fc3dhcDY0KHRyZWVfaW5mbyk7CisKKwlza2Vpbl9zaG93X2tleSgxMDI0LCAmY3R4LT5oLCBrZXksIGtleV9ieXRlcyk7CisKKwkvKiBjb21wdXRlIHRoZSBpbml0aWFsIGNoYWluaW5nIHZhbHVlcyBmcm9tIGNvbmZpZyBibG9jayAqLworCXNrZWluXzEwMjRfcHJvY2Vzc19ibG9jayhjdHgsIGNmZy5iLCAxLCBTS0VJTl9DRkdfU1RSX0xFTik7CisKKwkvKiBUaGUgY2hhaW5pbmcgdmFycyBjdHgtPnggYXJlIG5vdyBpbml0aWFsaXplZCAqLworCS8qIFNldCB1cCB0byBwcm9jZXNzIHRoZSBkYXRhIG1lc3NhZ2UgcG9ydGlvbiBvZiB0aGUgaGFzaCAoZGVmYXVsdCkgKi8KKwlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIE1TRyk7CisKKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIHByb2Nlc3MgdGhlIGlucHV0IGJ5dGVzICovCitpbnQgc2tlaW5fMTAyNF91cGRhdGUoc3RydWN0IHNrZWluXzEwMjRfY3R4ICpjdHgsIGNvbnN0IHU4ICptc2csCisJCSAgICAgIHNpemVfdCBtc2dfYnl0ZV9jbnQpCit7CisJc2l6ZV90IG47CisKKwkvKiBjYXRjaCB1bmluaXRpYWxpemVkIGNvbnRleHQgKi8KKwlza2Vpbl9hc3NlcnRfcmV0KGN0eC0+aC5iX2NudCA8PSBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTLCBTS0VJTl9GQUlMKTsKKworCS8qIHByb2Nlc3MgZnVsbCBibG9ja3MsIGlmIGFueSAqLworCWlmIChtc2dfYnl0ZV9jbnQgKyBjdHgtPmguYl9jbnQgPiBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTKSB7CisJCS8qIGZpbmlzaCB1cCBhbnkgYnVmZmVyZWQgbWVzc2FnZSBkYXRhICovCisJCWlmIChjdHgtPmguYl9jbnQpIHsKKwkJCS8qICMgYnl0ZXMgZnJlZSBpbiBidWZmZXIgYltdICovCisJCQluID0gU0tFSU5fMTAyNF9CTE9DS19CWVRFUyAtIGN0eC0+aC5iX2NudDsKKwkJCWlmIChuKSB7CisJCQkJLyogY2hlY2sgb24gb3VyIGxvZ2ljIGhlcmUgKi8KKwkJCQlza2Vpbl9hc3NlcnQobiA8IG1zZ19ieXRlX2NudCk7CisJCQkJbWVtY3B5KCZjdHgtPmJbY3R4LT5oLmJfY250XSwgbXNnLCBuKTsKKwkJCQltc2dfYnl0ZV9jbnQgIC09IG47CisJCQkJbXNnICAgICAgICAgKz0gbjsKKwkJCQljdHgtPmguYl9jbnQgKz0gbjsKKwkJCX0KKwkJCXNrZWluX2Fzc2VydChjdHgtPmguYl9jbnQgPT0gU0tFSU5fMTAyNF9CTE9DS19CWVRFUyk7CisJCQlza2Vpbl8xMDI0X3Byb2Nlc3NfYmxvY2soY3R4LCBjdHgtPmIsIDEsCisJCQkJCQkgU0tFSU5fMTAyNF9CTE9DS19CWVRFUyk7CisJCQljdHgtPmguYl9jbnQgPSAwOworCQl9CisJCS8qCisJCSAqIG5vdyBwcm9jZXNzIGFueSByZW1haW5pbmcgZnVsbCBibG9ja3MsIGRpcmVjdGx5IGZyb20gaW5wdXQKKwkJICogbWVzc2FnZSBkYXRhCisJCSAqLworCQlpZiAobXNnX2J5dGVfY250ID4gU0tFSU5fMTAyNF9CTE9DS19CWVRFUykgeworCQkJLyogbnVtYmVyIG9mIGZ1bGwgYmxvY2tzIHRvIHByb2Nlc3MgKi8KKwkJCW4gPSAobXNnX2J5dGVfY250LTEpIC8gU0tFSU5fMTAyNF9CTE9DS19CWVRFUzsKKwkJCXNrZWluXzEwMjRfcHJvY2Vzc19ibG9jayhjdHgsIG1zZywgbiwKKwkJCQkJCSBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTKTsKKwkJCW1zZ19ieXRlX2NudCAtPSBuICogU0tFSU5fMTAyNF9CTE9DS19CWVRFUzsKKwkJCW1zZyAgICAgICAgKz0gbiAqIFNLRUlOXzEwMjRfQkxPQ0tfQllURVM7CisJCX0KKwkJc2tlaW5fYXNzZXJ0KGN0eC0+aC5iX2NudCA9PSAwKTsKKwl9CisKKwkvKiBjb3B5IGFueSByZW1haW5pbmcgc291cmNlIG1lc3NhZ2UgZGF0YSBieXRlcyBpbnRvIGJbXSAqLworCWlmIChtc2dfYnl0ZV9jbnQpIHsKKwkJc2tlaW5fYXNzZXJ0KG1zZ19ieXRlX2NudCArIGN0eC0+aC5iX2NudCA8PQorCQkJICAgICBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTKTsKKwkJbWVtY3B5KCZjdHgtPmJbY3R4LT5oLmJfY250XSwgbXNnLCBtc2dfYnl0ZV9jbnQpOworCQljdHgtPmguYl9jbnQgKz0gbXNnX2J5dGVfY250OworCX0KKworCXJldHVybiBTS0VJTl9TVUNDRVNTOworfQorCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLyogZmluYWxpemUgdGhlIGhhc2ggY29tcHV0YXRpb24gYW5kIG91dHB1dCB0aGUgcmVzdWx0ICovCitpbnQgc2tlaW5fMTAyNF9maW5hbChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgdTggKmhhc2hfdmFsKQoreworCXNpemVfdCBpLCBuLCBieXRlX2NudDsKKwl1NjQgeFtTS0VJTl8xMDI0X1NUQVRFX1dPUkRTXTsKKwkvKiBjYXRjaCB1bmluaXRpYWxpemVkIGNvbnRleHQgKi8KKwlza2Vpbl9hc3NlcnRfcmV0KGN0eC0+aC5iX2NudCA8PSBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTLCBTS0VJTl9GQUlMKTsKKworCS8qIHRhZyBhcyB0aGUgZmluYWwgYmxvY2sgKi8KKwljdHgtPmgudHdlYWtbMV0gfD0gU0tFSU5fVDFfRkxBR19GSU5BTDsKKwkvKiB6ZXJvIHBhZCBiW10gaWYgbmVjZXNzYXJ5ICovCisJaWYgKGN0eC0+aC5iX2NudCA8IFNLRUlOXzEwMjRfQkxPQ0tfQllURVMpCisJCW1lbXNldCgmY3R4LT5iW2N0eC0+aC5iX2NudF0sIDAsCisJCQlTS0VJTl8xMDI0X0JMT0NLX0JZVEVTIC0gY3R4LT5oLmJfY250KTsKKworCS8qIHByb2Nlc3MgdGhlIGZpbmFsIGJsb2NrICovCisJc2tlaW5fMTAyNF9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBjdHgtPmguYl9jbnQpOworCisJLyogbm93IG91dHB1dCB0aGUgcmVzdWx0ICovCisJLyogdG90YWwgbnVtYmVyIG9mIG91dHB1dCBieXRlcyAqLworCWJ5dGVfY250ID0gKGN0eC0+aC5oYXNoX2JpdF9sZW4gKyA3KSA+PiAzOworCisJLyogcnVuIFRocmVlZmlzaCBpbiAiY291bnRlciBtb2RlIiB0byBnZW5lcmF0ZSBvdXRwdXQgKi8KKwkvKiB6ZXJvIG91dCBiW10sIHNvIGl0IGNhbiBob2xkIHRoZSBjb3VudGVyICovCisJbWVtc2V0KGN0eC0+YiwgMCwgc2l6ZW9mKGN0eC0+YikpOworCS8qIGtlZXAgYSBsb2NhbCBjb3B5IG9mIGNvdW50ZXIgbW9kZSAia2V5IiAqLworCW1lbWNweSh4LCBjdHgtPngsIHNpemVvZih4KSk7CisJZm9yIChpID0gMDsgaSpTS0VJTl8xMDI0X0JMT0NLX0JZVEVTIDwgYnl0ZV9jbnQ7IGkrKykgeworCQkvKiBidWlsZCB0aGUgY291bnRlciBibG9jayAqLworCQkoKHU2NCAqKWN0eC0+YilbMF0gPSBza2Vpbl9zd2FwNjQoKHU2NCkgaSk7CisJCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgT1VUX0ZJTkFMKTsKKwkJLyogcnVuICJjb3VudGVyIG1vZGUiICovCisJCXNrZWluXzEwMjRfcHJvY2Vzc19ibG9jayhjdHgsIGN0eC0+YiwgMSwgc2l6ZW9mKHU2NCkpOworCQkvKiBudW1iZXIgb2Ygb3V0cHV0IGJ5dGVzIGxlZnQgdG8gZ28gKi8KKwkJbiA9IGJ5dGVfY250IC0gaSpTS0VJTl8xMDI0X0JMT0NLX0JZVEVTOworCQlpZiAobiA+PSBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTKQorCQkJbiAgPSBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTOworCQkvKiAib3V0cHV0IiB0aGUgY3RyIG1vZGUgYnl0ZXMgKi8KKwkJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KGhhc2hfdmFsK2kqU0tFSU5fMTAyNF9CTE9DS19CWVRFUywgY3R4LT54LAorCQkJCSAgICAgIG4pOworCQlza2Vpbl9zaG93X2ZpbmFsKDEwMjQsICZjdHgtPmgsIG4sCisJCQkJIGhhc2hfdmFsK2kqU0tFSU5fMTAyNF9CTE9DS19CWVRFUyk7CisJCS8qIHJlc3RvcmUgdGhlIGNvdW50ZXIgbW9kZSBrZXkgZm9yIG5leHQgdGltZSAqLworCQltZW1jcHkoY3R4LT54LCB4LCBzaXplb2YoeCkpOworCX0KKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKiogRnVuY3Rpb25zIHRvIHN1cHBvcnQgTUFDL3RyZWUgaGFzaGluZyAqKioqKioqKioqKioqKiovCisvKiAgICh0aGlzIGNvZGUgaXMgaWRlbnRpY2FsIGZvciBPcHRpbWl6ZWQgYW5kIFJlZmVyZW5jZSB2ZXJzaW9ucykgICAgKi8KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGZpbmFsaXplIHRoZSBoYXNoIGNvbXB1dGF0aW9uIGFuZCBvdXRwdXQgdGhlIGJsb2NrLCBubyBPVVRQVVQgc3RhZ2UgKi8KK2ludCBza2Vpbl8yNTZfZmluYWxfcGFkKHN0cnVjdCBza2Vpbl8yNTZfY3R4ICpjdHgsIHU4ICpoYXNoX3ZhbCkKK3sKKwkvKiBjYXRjaCB1bmluaXRpYWxpemVkIGNvbnRleHQgKi8KKwlza2Vpbl9hc3NlcnRfcmV0KGN0eC0+aC5iX2NudCA8PSBTS0VJTl8yNTZfQkxPQ0tfQllURVMsIFNLRUlOX0ZBSUwpOworCisJLyogdGFnIGFzIHRoZSBmaW5hbCBibG9jayAqLworCWN0eC0+aC50d2Vha1sxXSB8PSBTS0VJTl9UMV9GTEFHX0ZJTkFMOworCS8qIHplcm8gcGFkIGJbXSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY3R4LT5oLmJfY250IDwgU0tFSU5fMjU2X0JMT0NLX0JZVEVTKQorCQltZW1zZXQoJmN0eC0+YltjdHgtPmguYl9jbnRdLCAwLAorCQkJU0tFSU5fMjU2X0JMT0NLX0JZVEVTIC0gY3R4LT5oLmJfY250KTsKKwkvKiBwcm9jZXNzIHRoZSBmaW5hbCBibG9jayAqLworCXNrZWluXzI1Nl9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBjdHgtPmguYl9jbnQpOworCisJLyogIm91dHB1dCIgdGhlIHN0YXRlIGJ5dGVzICovCisJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KGhhc2hfdmFsLCBjdHgtPngsIFNLRUlOXzI1Nl9CTE9DS19CWVRFUyk7CisKKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGZpbmFsaXplIHRoZSBoYXNoIGNvbXB1dGF0aW9uIGFuZCBvdXRwdXQgdGhlIGJsb2NrLCBubyBPVVRQVVQgc3RhZ2UgKi8KK2ludCBza2Vpbl81MTJfZmluYWxfcGFkKHN0cnVjdCBza2Vpbl81MTJfY3R4ICpjdHgsIHU4ICpoYXNoX3ZhbCkKK3sKKwkvKiBjYXRjaCB1bmluaXRpYWxpemVkIGNvbnRleHQgKi8KKwlza2Vpbl9hc3NlcnRfcmV0KGN0eC0+aC5iX2NudCA8PSBTS0VJTl81MTJfQkxPQ0tfQllURVMsIFNLRUlOX0ZBSUwpOworCisJLyogdGFnIGFzIHRoZSBmaW5hbCBibG9jayAqLworCWN0eC0+aC50d2Vha1sxXSB8PSBTS0VJTl9UMV9GTEFHX0ZJTkFMOworCS8qIHplcm8gcGFkIGJbXSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY3R4LT5oLmJfY250IDwgU0tFSU5fNTEyX0JMT0NLX0JZVEVTKQorCQltZW1zZXQoJmN0eC0+YltjdHgtPmguYl9jbnRdLCAwLAorCQkJU0tFSU5fNTEyX0JMT0NLX0JZVEVTIC0gY3R4LT5oLmJfY250KTsKKwkvKiBwcm9jZXNzIHRoZSBmaW5hbCBibG9jayAqLworCXNrZWluXzUxMl9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBjdHgtPmguYl9jbnQpOworCisJLyogIm91dHB1dCIgdGhlIHN0YXRlIGJ5dGVzICovCisJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KGhhc2hfdmFsLCBjdHgtPngsIFNLRUlOXzUxMl9CTE9DS19CWVRFUyk7CisKKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGZpbmFsaXplIHRoZSBoYXNoIGNvbXB1dGF0aW9uIGFuZCBvdXRwdXQgdGhlIGJsb2NrLCBubyBPVVRQVVQgc3RhZ2UgKi8KK2ludCBza2Vpbl8xMDI0X2ZpbmFsX3BhZChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgdTggKmhhc2hfdmFsKQoreworCS8qIGNhdGNoIHVuaW5pdGlhbGl6ZWQgY29udGV4dCAqLworCXNrZWluX2Fzc2VydF9yZXQoY3R4LT5oLmJfY250IDw9IFNLRUlOXzEwMjRfQkxPQ0tfQllURVMsIFNLRUlOX0ZBSUwpOworCisJLyogdGFnIGFzIHRoZSBmaW5hbCBibG9jayAqLworCWN0eC0+aC50d2Vha1sxXSB8PSBTS0VJTl9UMV9GTEFHX0ZJTkFMOworCS8qIHplcm8gcGFkIGJbXSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY3R4LT5oLmJfY250IDwgU0tFSU5fMTAyNF9CTE9DS19CWVRFUykKKwkJbWVtc2V0KCZjdHgtPmJbY3R4LT5oLmJfY250XSwgMCwKKwkJCVNLRUlOXzEwMjRfQkxPQ0tfQllURVMgLSBjdHgtPmguYl9jbnQpOworCS8qIHByb2Nlc3MgdGhlIGZpbmFsIGJsb2NrICovCisJc2tlaW5fMTAyNF9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBjdHgtPmguYl9jbnQpOworCisJLyogIm91dHB1dCIgdGhlIHN0YXRlIGJ5dGVzICovCisJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KGhhc2hfdmFsLCBjdHgtPngsIFNLRUlOXzEwMjRfQkxPQ0tfQllURVMpOworCisJcmV0dXJuIFNLRUlOX1NVQ0NFU1M7Cit9CisKKyNpZiBTS0VJTl9UUkVFX0hBU0gKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyovCisvKiBqdXN0IGRvIHRoZSBPVVRQVVQgc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworaW50IHNrZWluXzI1Nl9vdXRwdXQoc3RydWN0IHNrZWluXzI1Nl9jdHggKmN0eCwgdTggKmhhc2hfdmFsKQoreworCXNpemVfdCBpLCBuLCBieXRlX2NudDsKKwl1NjQgeFtTS0VJTl8yNTZfU1RBVEVfV09SRFNdOworCS8qIGNhdGNoIHVuaW5pdGlhbGl6ZWQgY29udGV4dCAqLworCXNrZWluX2Fzc2VydF9yZXQoY3R4LT5oLmJfY250IDw9IFNLRUlOXzI1Nl9CTE9DS19CWVRFUywgU0tFSU5fRkFJTCk7CisKKwkvKiBub3cgb3V0cHV0IHRoZSByZXN1bHQgKi8KKwkvKiB0b3RhbCBudW1iZXIgb2Ygb3V0cHV0IGJ5dGVzICovCisJYnl0ZV9jbnQgPSAoY3R4LT5oLmhhc2hfYml0X2xlbiArIDcpID4+IDM7CisKKwkvKiBydW4gVGhyZWVmaXNoIGluICJjb3VudGVyIG1vZGUiIHRvIGdlbmVyYXRlIG91dHB1dCAqLworCS8qIHplcm8gb3V0IGJbXSwgc28gaXQgY2FuIGhvbGQgdGhlIGNvdW50ZXIgKi8KKwltZW1zZXQoY3R4LT5iLCAwLCBzaXplb2YoY3R4LT5iKSk7CisJLyoga2VlcCBhIGxvY2FsIGNvcHkgb2YgY291bnRlciBtb2RlICJrZXkiICovCisJbWVtY3B5KHgsIGN0eC0+eCwgc2l6ZW9mKHgpKTsKKwlmb3IgKGkgPSAwOyBpKlNLRUlOXzI1Nl9CTE9DS19CWVRFUyA8IGJ5dGVfY250OyBpKyspIHsKKwkJLyogYnVpbGQgdGhlIGNvdW50ZXIgYmxvY2sgKi8KKwkJKCh1NjQgKiljdHgtPmIpWzBdID0gc2tlaW5fc3dhcDY0KCh1NjQpIGkpOworCQlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIE9VVF9GSU5BTCk7CisJCS8qIHJ1biAiY291bnRlciBtb2RlIiAqLworCQlza2Vpbl8yNTZfcHJvY2Vzc19ibG9jayhjdHgsIGN0eC0+YiwgMSwgc2l6ZW9mKHU2NCkpOworCQkvKiBudW1iZXIgb2Ygb3V0cHV0IGJ5dGVzIGxlZnQgdG8gZ28gKi8KKwkJbiA9IGJ5dGVfY250IC0gaSpTS0VJTl8yNTZfQkxPQ0tfQllURVM7CisJCWlmIChuID49IFNLRUlOXzI1Nl9CTE9DS19CWVRFUykKKwkJCW4gID0gU0tFSU5fMjU2X0JMT0NLX0JZVEVTOworCQkvKiAib3V0cHV0IiB0aGUgY3RyIG1vZGUgYnl0ZXMgKi8KKwkJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KGhhc2hfdmFsK2kqU0tFSU5fMjU2X0JMT0NLX0JZVEVTLCBjdHgtPngsCisJCQkJICAgICAgbik7CisJCXNrZWluX3Nob3dfZmluYWwoMjU2LCAmY3R4LT5oLCBuLAorCQkJCSBoYXNoX3ZhbCtpKlNLRUlOXzI1Nl9CTE9DS19CWVRFUyk7CisJCS8qIHJlc3RvcmUgdGhlIGNvdW50ZXIgbW9kZSBrZXkgZm9yIG5leHQgdGltZSAqLworCQltZW1jcHkoY3R4LT54LCB4LCBzaXplb2YoeCkpOworCX0KKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8qIGp1c3QgZG8gdGhlIE9VVFBVVCBzdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQgc2tlaW5fNTEyX291dHB1dChzdHJ1Y3Qgc2tlaW5fNTEyX2N0eCAqY3R4LCB1OCAqaGFzaF92YWwpCit7CisJc2l6ZV90IGksIG4sIGJ5dGVfY250OworCXU2NCB4W1NLRUlOXzUxMl9TVEFURV9XT1JEU107CisJLyogY2F0Y2ggdW5pbml0aWFsaXplZCBjb250ZXh0ICovCisJc2tlaW5fYXNzZXJ0X3JldChjdHgtPmguYl9jbnQgPD0gU0tFSU5fNTEyX0JMT0NLX0JZVEVTLCBTS0VJTl9GQUlMKTsKKworCS8qIG5vdyBvdXRwdXQgdGhlIHJlc3VsdCAqLworCS8qIHRvdGFsIG51bWJlciBvZiBvdXRwdXQgYnl0ZXMgKi8KKwlieXRlX2NudCA9IChjdHgtPmguaGFzaF9iaXRfbGVuICsgNykgPj4gMzsKKworCS8qIHJ1biBUaHJlZWZpc2ggaW4gImNvdW50ZXIgbW9kZSIgdG8gZ2VuZXJhdGUgb3V0cHV0ICovCisJLyogemVybyBvdXQgYltdLCBzbyBpdCBjYW4gaG9sZCB0aGUgY291bnRlciAqLworCW1lbXNldChjdHgtPmIsIDAsIHNpemVvZihjdHgtPmIpKTsKKwkvKiBrZWVwIGEgbG9jYWwgY29weSBvZiBjb3VudGVyIG1vZGUgImtleSIgKi8KKwltZW1jcHkoeCwgY3R4LT54LCBzaXplb2YoeCkpOworCWZvciAoaSA9IDA7IGkqU0tFSU5fNTEyX0JMT0NLX0JZVEVTIDwgYnl0ZV9jbnQ7IGkrKykgeworCQkvKiBidWlsZCB0aGUgY291bnRlciBibG9jayAqLworCQkoKHU2NCAqKWN0eC0+YilbMF0gPSBza2Vpbl9zd2FwNjQoKHU2NCkgaSk7CisJCXNrZWluX3N0YXJ0X25ld190eXBlKGN0eCwgT1VUX0ZJTkFMKTsKKwkJLyogcnVuICJjb3VudGVyIG1vZGUiICovCisJCXNrZWluXzUxMl9wcm9jZXNzX2Jsb2NrKGN0eCwgY3R4LT5iLCAxLCBzaXplb2YodTY0KSk7CisJCS8qIG51bWJlciBvZiBvdXRwdXQgYnl0ZXMgbGVmdCB0byBnbyAqLworCQluID0gYnl0ZV9jbnQgLSBpKlNLRUlOXzUxMl9CTE9DS19CWVRFUzsKKwkJaWYgKG4gPj0gU0tFSU5fNTEyX0JMT0NLX0JZVEVTKQorCQkJbiAgPSBTS0VJTl81MTJfQkxPQ0tfQllURVM7CisJCS8qICJvdXRwdXQiIHRoZSBjdHIgbW9kZSBieXRlcyAqLworCQlza2Vpbl9wdXQ2NF9sc2JfZmlyc3QoaGFzaF92YWwraSpTS0VJTl81MTJfQkxPQ0tfQllURVMsIGN0eC0+eCwKKwkJCQkgICAgICBuKTsKKwkJc2tlaW5fc2hvd19maW5hbCgyNTYsICZjdHgtPmgsIG4sCisJCQkJIGhhc2hfdmFsK2kqU0tFSU5fNTEyX0JMT0NLX0JZVEVTKTsKKwkJLyogcmVzdG9yZSB0aGUgY291bnRlciBtb2RlIGtleSBmb3IgbmV4dCB0aW1lICovCisJCW1lbWNweShjdHgtPngsIHgsIHNpemVvZih4KSk7CisJfQorCXJldHVybiBTS0VJTl9TVUNDRVNTOworfQorCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLyoganVzdCBkbyB0aGUgT1VUUFVUIHN0YWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2ludCBza2Vpbl8xMDI0X291dHB1dChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgdTggKmhhc2hfdmFsKQoreworCXNpemVfdCBpLCBuLCBieXRlX2NudDsKKwl1NjQgeFtTS0VJTl8xMDI0X1NUQVRFX1dPUkRTXTsKKwkvKiBjYXRjaCB1bmluaXRpYWxpemVkIGNvbnRleHQgKi8KKwlza2Vpbl9hc3NlcnRfcmV0KGN0eC0+aC5iX2NudCA8PSBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTLCBTS0VJTl9GQUlMKTsKKworCS8qIG5vdyBvdXRwdXQgdGhlIHJlc3VsdCAqLworCS8qIHRvdGFsIG51bWJlciBvZiBvdXRwdXQgYnl0ZXMgKi8KKwlieXRlX2NudCA9IChjdHgtPmguaGFzaF9iaXRfbGVuICsgNykgPj4gMzsKKworCS8qIHJ1biBUaHJlZWZpc2ggaW4gImNvdW50ZXIgbW9kZSIgdG8gZ2VuZXJhdGUgb3V0cHV0ICovCisJLyogemVybyBvdXQgYltdLCBzbyBpdCBjYW4gaG9sZCB0aGUgY291bnRlciAqLworCW1lbXNldChjdHgtPmIsIDAsIHNpemVvZihjdHgtPmIpKTsKKwkvKiBrZWVwIGEgbG9jYWwgY29weSBvZiBjb3VudGVyIG1vZGUgImtleSIgKi8KKwltZW1jcHkoeCwgY3R4LT54LCBzaXplb2YoeCkpOworCWZvciAoaSA9IDA7IGkqU0tFSU5fMTAyNF9CTE9DS19CWVRFUyA8IGJ5dGVfY250OyBpKyspIHsKKwkJLyogYnVpbGQgdGhlIGNvdW50ZXIgYmxvY2sgKi8KKwkJKCh1NjQgKiljdHgtPmIpWzBdID0gc2tlaW5fc3dhcDY0KCh1NjQpIGkpOworCQlza2Vpbl9zdGFydF9uZXdfdHlwZShjdHgsIE9VVF9GSU5BTCk7CisJCS8qIHJ1biAiY291bnRlciBtb2RlIiAqLworCQlza2Vpbl8xMDI0X3Byb2Nlc3NfYmxvY2soY3R4LCBjdHgtPmIsIDEsIHNpemVvZih1NjQpKTsKKwkJLyogbnVtYmVyIG9mIG91dHB1dCBieXRlcyBsZWZ0IHRvIGdvICovCisJCW4gPSBieXRlX2NudCAtIGkqU0tFSU5fMTAyNF9CTE9DS19CWVRFUzsKKwkJaWYgKG4gPj0gU0tFSU5fMTAyNF9CTE9DS19CWVRFUykKKwkJCW4gID0gU0tFSU5fMTAyNF9CTE9DS19CWVRFUzsKKwkJLyogIm91dHB1dCIgdGhlIGN0ciBtb2RlIGJ5dGVzICovCisJCXNrZWluX3B1dDY0X2xzYl9maXJzdChoYXNoX3ZhbCtpKlNLRUlOXzEwMjRfQkxPQ0tfQllURVMsIGN0eC0+eCwKKwkJCQkgICAgICBuKTsKKwkJc2tlaW5fc2hvd19maW5hbCgyNTYsICZjdHgtPmgsIG4sCisJCQkJIGhhc2hfdmFsK2kqU0tFSU5fMTAyNF9CTE9DS19CWVRFUyk7CisJCS8qIHJlc3RvcmUgdGhlIGNvdW50ZXIgbW9kZSBrZXkgZm9yIG5leHQgdGltZSAqLworCQltZW1jcHkoY3R4LT54LCB4LCBzaXplb2YoeCkpOworCX0KKwlyZXR1cm4gU0tFSU5fU1VDQ0VTUzsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NrZWluL3NrZWluLmggYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY2OWYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NrZWluL3NrZWluLmgKQEAgLTAsMCArMSwzNDYgQEAKKyNpZm5kZWYgX1NLRUlOX0hfCisjZGVmaW5lIF9TS0VJTl9IXyAgICAgMQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKgorKiogSW50ZXJmYWNlIGRlY2xhcmF0aW9ucyBhbmQgaW50ZXJuYWwgZGVmaW5pdGlvbnMgZm9yIFNrZWluIGhhc2hpbmcuCisqKgorKiogU291cmNlIGNvZGUgYXV0aG9yOiBEb3VnIFdoaXRpbmcsIDIwMDguCisqKgorKiogVGhpcyBhbGdvcml0aG0gYW5kIHNvdXJjZSBjb2RlIGlzIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLgorKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyoqIFRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIHN3aXRjaGVzIG1heSBiZSBkZWZpbmVkIHRvIGNvbnRyb2wgc29tZQorKiogdHJhZGVvZmZzIGJldHdlZW4gc3BlZWQsIGNvZGUgc2l6ZSwgZXJyb3IgY2hlY2tpbmcsIGFuZCBzZWN1cml0eS4KKyoqCisqKiBUaGUgImRlZmF1bHQiIG5vdGUgZXhwbGFpbnMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHN3aXRjaCBpcyBub3QgZGVmaW5lZC4KKyoqCisqKiAgU0tFSU5fREVCVUcgICAgICAgICAgICAtLSBtYWtlIGNhbGxvdXRzIGZyb20gaW5zaWRlIFNrZWluIGNvZGUKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGV4YW1pbmUvZGlzcGxheSBpbnRlcm1lZGlhdGUgdmFsdWVzLgorKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHQ6IG5vIGNhbGxvdXRzIChubyBvdmVyaGVhZCldCisqKgorKiogIFNLRUlOX0VSUl9DSEVDSyAgICAgICAgLS0gaG93IGVycm9yIGNoZWNraW5nIGlzIGhhbmRsZWQgaW5zaWRlIFNrZWluCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLiBJZiBub3QgZGVmaW5lZCwgbW9zdCBlcnJvciBjaGVja2luZworKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZGlzYWJsZWQgKGZvciBwZXJmb3JtYW5jZSkuIE90aGVyd2lzZSwKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzd2l0Y2ggdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXM6CisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogdXNlIGFzc2VydCgpICAgICAgdG8gZmxhZyBlcnJvcnMKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiByZXR1cm4gU0tFSU5fRkFJTCB0byBmbGFnIGVycm9ycworKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiByb3RsXzY0CisjZGVmaW5lIHJvdGxfNjQoeCwgTikgICAgKCgoeCkgPDwgKE4pKSB8ICgoeCkgPj4gKDY0LShOKSkpKQorI2VuZGlmCisKKy8qIGJlbG93IHR3byBwcm90b3R5cGUgYXNzdW1lIHdlIGFyZSBoYW5kZWQgYWxpZ25lZCBkYXRhICovCisjZGVmaW5lIHNrZWluX3B1dDY0X2xzYl9maXJzdChkc3QwOCwgc3JjNjQsIGJfY250KSBtZW1jcHkoZHN0MDgsIHNyYzY0LCBiX2NudCkKKyNkZWZpbmUgc2tlaW5fZ2V0NjRfbHNiX2ZpcnN0KGRzdDY0LCBzcmMwOCwgd19jbnQpIFwKKwkJbWVtY3B5KGRzdDY0LCBzcmMwOCwgOCood19jbnQpKQorI2RlZmluZSBza2Vpbl9zd2FwNjQodzY0KSAgKHc2NCkKKworZW51bSB7CisJU0tFSU5fU1VDQ0VTUyAgICAgICAgID0gICAgICAwLCAvKiByZXR1cm4gY29kZXMgZnJvbSBTa2VpbiBjYWxscyAqLworCVNLRUlOX0ZBSUwgICAgICAgICAgICA9ICAgICAgMSwKKwlTS0VJTl9CQURfSEFTSExFTiAgICAgPSAgICAgIDIKK307CisKKyNkZWZpbmUgIFNLRUlOX01PRElGSUVSX1dPUkRTICAgKDIpIC8qIG51bWJlciBvZiBtb2RpZmllciAodHdlYWspIHdvcmRzICovCisKKyNkZWZpbmUgIFNLRUlOXzI1Nl9TVEFURV9XT1JEUyAgKDQpCisjZGVmaW5lICBTS0VJTl81MTJfU1RBVEVfV09SRFMgICg4KQorI2RlZmluZSAgU0tFSU5fMTAyNF9TVEFURV9XT1JEUyAoMTYpCisjZGVmaW5lICBTS0VJTl9NQVhfU1RBVEVfV09SRFMgKDE2KQorCisjZGVmaW5lICBTS0VJTl8yNTZfU1RBVEVfQllURVMgICg4KlNLRUlOXzI1Nl9TVEFURV9XT1JEUykKKyNkZWZpbmUgIFNLRUlOXzUxMl9TVEFURV9CWVRFUyAgKDgqU0tFSU5fNTEyX1NUQVRFX1dPUkRTKQorI2RlZmluZSAgU0tFSU5fMTAyNF9TVEFURV9CWVRFUyAgKDgqU0tFSU5fMTAyNF9TVEFURV9XT1JEUykKKworI2RlZmluZSAgU0tFSU5fMjU2X1NUQVRFX0JJVFMgICg2NCpTS0VJTl8yNTZfU1RBVEVfV09SRFMpCisjZGVmaW5lICBTS0VJTl81MTJfU1RBVEVfQklUUyAgKDY0KlNLRUlOXzUxMl9TVEFURV9XT1JEUykKKyNkZWZpbmUgIFNLRUlOXzEwMjRfU1RBVEVfQklUUyAgKDY0KlNLRUlOXzEwMjRfU1RBVEVfV09SRFMpCisKKyNkZWZpbmUgIFNLRUlOXzI1Nl9CTE9DS19CWVRFUyAgKDgqU0tFSU5fMjU2X1NUQVRFX1dPUkRTKQorI2RlZmluZSAgU0tFSU5fNTEyX0JMT0NLX0JZVEVTICAoOCpTS0VJTl81MTJfU1RBVEVfV09SRFMpCisjZGVmaW5lICBTS0VJTl8xMDI0X0JMT0NLX0JZVEVTICAoOCpTS0VJTl8xMDI0X1NUQVRFX1dPUkRTKQorCitzdHJ1Y3Qgc2tlaW5fY3R4X2hkciB7CisJc2l6ZV90IGhhc2hfYml0X2xlbjsJCS8qIHNpemUgb2YgaGFzaCByZXN1bHQsIGluIGJpdHMgKi8KKwlzaXplX3QgYl9jbnQ7CQkJLyogY3VycmVudCBieXRlIGNvdW50IGluIGJ1ZmZlciBiW10gKi8KKwl1NjQgdHdlYWtbU0tFSU5fTU9ESUZJRVJfV09SRFNdOyAvKiB0d2Vha1swXT1ieXRlIGNudCwgdHdlYWtbMV09ZmxhZ3MgKi8KK307CisKK3N0cnVjdCBza2Vpbl8yNTZfY3R4IHsgLyogMjU2LWJpdCBTa2VpbiBoYXNoIGNvbnRleHQgc3RydWN0dXJlICovCisJc3RydWN0IHNrZWluX2N0eF9oZHIgaDsJCS8qIGNvbW1vbiBoZWFkZXIgY29udGV4dCB2YXJpYWJsZXMgKi8KKwl1NjQgeFtTS0VJTl8yNTZfU1RBVEVfV09SRFNdOwkvKiBjaGFpbmluZyB2YXJpYWJsZXMgKi8KKwl1OCBiW1NLRUlOXzI1Nl9CTE9DS19CWVRFU107CS8qIHBhcnRpYWwgYmxvY2sgYnVmICg4LWJ5dGUgYWxpZ25lZCkgKi8KK307CisKK3N0cnVjdCBza2Vpbl81MTJfY3R4IHsgLyogNTEyLWJpdCBTa2VpbiBoYXNoIGNvbnRleHQgc3RydWN0dXJlICovCisJc3RydWN0IHNrZWluX2N0eF9oZHIgaDsJCS8qIGNvbW1vbiBoZWFkZXIgY29udGV4dCB2YXJpYWJsZXMgKi8KKwl1NjQgeFtTS0VJTl81MTJfU1RBVEVfV09SRFNdOwkvKiBjaGFpbmluZyB2YXJpYWJsZXMgKi8KKwl1OCBiW1NLRUlOXzUxMl9CTE9DS19CWVRFU107CS8qIHBhcnRpYWwgYmxvY2sgYnVmICg4LWJ5dGUgYWxpZ25lZCkgKi8KK307CisKK3N0cnVjdCBza2Vpbl8xMDI0X2N0eCB7IC8qIDEwMjQtYml0IFNrZWluIGhhc2ggY29udGV4dCBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3Qgc2tlaW5fY3R4X2hkciBoOwkJLyogY29tbW9uIGhlYWRlciBjb250ZXh0IHZhcmlhYmxlcyAqLworCXU2NCB4W1NLRUlOXzEwMjRfU1RBVEVfV09SRFNdOwkvKiBjaGFpbmluZyB2YXJpYWJsZXMgKi8KKwl1OCBiW1NLRUlOXzEwMjRfQkxPQ0tfQllURVNdOwkvKiBwYXJ0aWFsIGJsb2NrIGJ1ZiAoOC1ieXRlIGFsaWduZWQpICovCit9OworCisvKiBTa2VpbiBBUElzIGZvciAoaW5jcmVtZW50YWwpICJzdHJhaWdodCBoYXNoaW5nIiAqLworaW50IHNrZWluXzI1Nl9pbml0KHN0cnVjdCBza2Vpbl8yNTZfY3R4ICpjdHgsIHNpemVfdCBoYXNoX2JpdF9sZW4pOworaW50IHNrZWluXzUxMl9pbml0KHN0cnVjdCBza2Vpbl81MTJfY3R4ICpjdHgsIHNpemVfdCBoYXNoX2JpdF9sZW4pOworaW50IHNrZWluXzEwMjRfaW5pdChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbik7CisKK2ludCBza2Vpbl8yNTZfdXBkYXRlKHN0cnVjdCBza2Vpbl8yNTZfY3R4ICpjdHgsIGNvbnN0IHU4ICptc2csCisJCSAgICAgc2l6ZV90IG1zZ19ieXRlX2NudCk7CitpbnQgc2tlaW5fNTEyX3VwZGF0ZShzdHJ1Y3Qgc2tlaW5fNTEyX2N0eCAqY3R4LCBjb25zdCB1OCAqbXNnLAorCQkgICAgIHNpemVfdCBtc2dfYnl0ZV9jbnQpOworaW50IHNrZWluXzEwMjRfdXBkYXRlKHN0cnVjdCBza2Vpbl8xMDI0X2N0eCAqY3R4LCBjb25zdCB1OCAqbXNnLAorCQkgICAgICBzaXplX3QgbXNnX2J5dGVfY250KTsKKworaW50IHNrZWluXzI1Nl9maW5hbChzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCAqY3R4LCB1OCAqaGFzaF92YWwpOworaW50IHNrZWluXzUxMl9maW5hbChzdHJ1Y3Qgc2tlaW5fNTEyX2N0eCAqY3R4LCB1OCAqaGFzaF92YWwpOworaW50IHNrZWluXzEwMjRfZmluYWwoc3RydWN0IHNrZWluXzEwMjRfY3R4ICpjdHgsIHU4ICpoYXNoX3ZhbCk7CisKKy8qCisqKiAgIFNrZWluIEFQSXMgZm9yICJleHRlbmRlZCIgaW5pdGlhbGl6YXRpb246IE1BQyBrZXlzLCB0cmVlIGhhc2hpbmcuCisqKiAgIEFmdGVyIGFuIGluaXRfZXh0KCkgY2FsbCwganVzdCB1c2UgdXBkYXRlL2ZpbmFsIGNhbGxzIGFzIHdpdGggaW5pdCgpLgorKioKKyoqICAgTm90ZXM6IFNhbWUgcGFyYW1ldGVycyBhcyBfaW5pdCgpIGNhbGxzLCBwbHVzIHRyZWVfaW5mby9rZXkva2V5X2J5dGVzLgorKiogICAgICAgICAgV2hlbiBrZXlfYnl0ZXMgPT0gMCBhbmQgdHJlZV9pbmZvID09IFNLRUlOX1NFUVVFTlRJQUwsCisqKiAgICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgaW5pdF9leHQoKSBhcmUgaWRlbnRpY2FsIHRvIGNhbGxpbmcgaW5pdCgpLgorKiogICAgICAgICAgVGhlIGZ1bmN0aW9uIGluaXQoKSBtYXkgYmUgY2FsbGVkIG9uY2UgdG8gInByZWNvbXB1dGUiIHRoZSBJViBmb3IKKyoqICAgICAgICAgICAgICBhIGdpdmVuIGhhc2hfYml0X2xlbiB2YWx1ZSwgdGhlbiBieSBzYXZpbmcgYSBjb3B5IG9mIHRoZSBjb250ZXh0CisqKiAgICAgICAgICAgICAgdGhlIElWIGNvbXB1dGF0aW9uIG1heSBiZSBhdm9pZGVkIGluIGxhdGVyIGNhbGxzLgorKiogICAgICAgICAgU2ltaWxhcmx5LCB0aGUgZnVuY3Rpb24gaW5pdF9leHQoKSBtYXkgYmUgY2FsbGVkIG9uY2UgcGVyIE1BQyBrZXkKKyoqICAgICAgICAgICAgICB0byBwcmVjb21wdXRlIHRoZSBNQUMgSVYsIHRoZW4gYSBjb3B5IG9mIHRoZSBjb250ZXh0IHNhdmVkIGFuZAorKiogICAgICAgICAgICAgIHJldXNlZCBmb3IgZWFjaCBuZXcgTUFDIGNvbXB1dGF0aW9uLgorKiovCitpbnQgc2tlaW5fMjU2X2luaXRfZXh0KHN0cnVjdCBza2Vpbl8yNTZfY3R4ICpjdHgsIHNpemVfdCBoYXNoX2JpdF9sZW4sCisJCSAgICAgICB1NjQgdHJlZV9pbmZvLCBjb25zdCB1OCAqa2V5LCBzaXplX3Qga2V5X2J5dGVzKTsKK2ludCBza2Vpbl81MTJfaW5pdF9leHQoc3RydWN0IHNrZWluXzUxMl9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbiwKKwkJICAgICAgIHU2NCB0cmVlX2luZm8sIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfYnl0ZXMpOworaW50IHNrZWluXzEwMjRfaW5pdF9leHQoc3RydWN0IHNrZWluXzEwMjRfY3R4ICpjdHgsIHNpemVfdCBoYXNoX2JpdF9sZW4sCisJCQl1NjQgdHJlZV9pbmZvLCBjb25zdCB1OCAqa2V5LCBzaXplX3Qga2V5X2J5dGVzKTsKKworLyoKKyoqICAgU2tlaW4gQVBJcyBmb3IgTUFDIGFuZCB0cmVlIGhhc2g6CisqKiAgICAgIGZpbmFsX3BhZDogIHBhZCwgZG8gZmluYWwgYmxvY2ssIGJ1dCBubyBPVVRQVVQgdHlwZQorKiogICAgICBvdXRwdXQ6ICAgICBkbyBqdXN0IHRoZSBvdXRwdXQgc3RhZ2UKKyovCitpbnQgc2tlaW5fMjU2X2ZpbmFsX3BhZChzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCAqY3R4LCB1OCAqaGFzaF92YWwpOworaW50IHNrZWluXzUxMl9maW5hbF9wYWQoc3RydWN0IHNrZWluXzUxMl9jdHggKmN0eCwgdTggKmhhc2hfdmFsKTsKK2ludCBza2Vpbl8xMDI0X2ZpbmFsX3BhZChzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgdTggKmhhc2hfdmFsKTsKKworI2lmbmRlZiBTS0VJTl9UUkVFX0hBU0gKKyNkZWZpbmUgU0tFSU5fVFJFRV9IQVNIICgxKQorI2VuZGlmCisjaWYgIFNLRUlOX1RSRUVfSEFTSAoraW50IHNrZWluXzI1Nl9vdXRwdXQoc3RydWN0IHNrZWluXzI1Nl9jdHggKmN0eCwgdTggKmhhc2hfdmFsKTsKK2ludCBza2Vpbl81MTJfb3V0cHV0KHN0cnVjdCBza2Vpbl81MTJfY3R4ICpjdHgsIHU4ICpoYXNoX3ZhbCk7CitpbnQgc2tlaW5fMTAyNF9vdXRwdXQoc3RydWN0IHNrZWluXzEwMjRfY3R4ICpjdHgsIHU4ICpoYXNoX3ZhbCk7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAiSW50ZXJuYWwiIFNrZWluIGRlZmluaXRpb25zCisqKiAgICAtLSBub3QgbmVlZGVkIGZvciBzZXF1ZW50aWFsIGhhc2hpbmcgQVBJLCBidXQgd2lsbCBiZQorKiogICAgICAgICAgIGhlbHBmdWwgZm9yIG90aGVyIHVzZXMgb2YgU2tlaW4gKGUuZy4sIHRyZWUgaGFzaCBtb2RlKS4KKyoqICAgIC0tIGluY2x1ZGVkIGhlcmUgc28gdGhhdCB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbgorKiogICAgICAgICAgIHJlZmVyZW5jZSBhbmQgb3B0aW1pemVkIGNvZGUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHR3ZWFrIHdvcmQgdHdlYWtbMV06IGJpdCBmaWVsZCBzdGFydGluZyBwb3NpdGlvbnMgKi8KKyNkZWZpbmUgU0tFSU5fVDFfQklUKEJJVCkgICAgICAgKChCSVQpIC0gNjQpICAgICAgLyogc2Vjb25kIHdvcmQgICovCisKKyNkZWZpbmUgU0tFSU5fVDFfUE9TX1RSRUVfTFZMICAgU0tFSU5fVDFfQklUKDExMikgLyogMTEyLi4xMTggaGFzaCB0cmVlIGxldmVsICovCisjZGVmaW5lIFNLRUlOX1QxX1BPU19CSVRfUEFEICAgIFNLRUlOX1QxX0JJVCgxMTkpIC8qIDExOSBwYXJ0LiBmaW5hbCBpbiBieXRlICovCisjZGVmaW5lIFNLRUlOX1QxX1BPU19CTEtfVFlQRSAgIFNLRUlOX1QxX0JJVCgxMjApIC8qIDEyMC4uMTI1IHR5cGUgZmllbGQgYCovCisjZGVmaW5lIFNLRUlOX1QxX1BPU19GSVJTVCAgICAgIFNLRUlOX1QxX0JJVCgxMjYpIC8qIDEyNiAgICAgIGZpcnN0IGJsayBmbGFnICovCisjZGVmaW5lIFNLRUlOX1QxX1BPU19GSU5BTCAgICAgIFNLRUlOX1QxX0JJVCgxMjcpIC8qIDEyNyAgICAgIGZpbmFsIGJsayBmbGFnICovCisKKy8qIHR3ZWFrIHdvcmQgdHdlYWtbMV06IGZsYWcgYml0IGRlZmluaXRpb24ocykgKi8KKyNkZWZpbmUgU0tFSU5fVDFfRkxBR19GSVJTVCAgICAgKCgodTY0KSAgMSkgPDwgU0tFSU5fVDFfUE9TX0ZJUlNUKQorI2RlZmluZSBTS0VJTl9UMV9GTEFHX0ZJTkFMICAgICAoKCh1NjQpICAxKSA8PCBTS0VJTl9UMV9QT1NfRklOQUwpCisjZGVmaW5lIFNLRUlOX1QxX0ZMQUdfQklUX1BBRCAgICgoKHU2NCkgIDEpIDw8IFNLRUlOX1QxX1BPU19CSVRfUEFEKQorCisvKiB0d2VhayB3b3JkIHR3ZWFrWzFdOiB0cmVlIGxldmVsIGJpdCBmaWVsZCBtYXNrICovCisjZGVmaW5lIFNLRUlOX1QxX1RSRUVfTFZMX01BU0sgICgoKHU2NCkweDdGKSA8PCBTS0VJTl9UMV9QT1NfVFJFRV9MVkwpCisjZGVmaW5lIFNLRUlOX1QxX1RSRUVfTEVWRUwobikgICgoKHU2NCkgKG4pKSA8PCBTS0VJTl9UMV9QT1NfVFJFRV9MVkwpCisKKy8qIHR3ZWFrIHdvcmQgdHdlYWtbMV06IGJsb2NrIHR5cGUgZmllbGQgKi8KKyNkZWZpbmUgU0tFSU5fQkxLX1RZUEVfS0VZICAgICAgICgwKSAvKiBrZXksIGZvciBNQUMgYW5kIEtERiAqLworI2RlZmluZSBTS0VJTl9CTEtfVFlQRV9DRkcgICAgICAgKDQpIC8qIGNvbmZpZ3VyYXRpb24gYmxvY2sgKi8KKyNkZWZpbmUgU0tFSU5fQkxLX1RZUEVfUEVSUyAgICAgICg4KSAvKiBwZXJzb25hbGl6YXRpb24gc3RyaW5nICovCisjZGVmaW5lIFNLRUlOX0JMS19UWVBFX1BLICAgICAgICgxMikgLyogcHVia2V5IChmb3IgZGlnaXRhbCBzaWdzKSAqLworI2RlZmluZSBTS0VJTl9CTEtfVFlQRV9LREYgICAgICAoMTYpIC8qIGtleSBpZGVudGlmaWVyIGZvciBLREYgKi8KKyNkZWZpbmUgU0tFSU5fQkxLX1RZUEVfTk9OQ0UgICAgKDIwKSAvKiBub25jZSBmb3IgUFJORyAqLworI2RlZmluZSBTS0VJTl9CTEtfVFlQRV9NU0cgICAgICAoNDgpIC8qIG1lc3NhZ2UgcHJvY2Vzc2luZyAqLworI2RlZmluZSBTS0VJTl9CTEtfVFlQRV9PVVQgICAgICAoNjMpIC8qIG91dHB1dCBzdGFnZSAqLworI2RlZmluZSBTS0VJTl9CTEtfVFlQRV9NQVNLICAgICAoNjMpIC8qIGJpdCBmaWVsZCBtYXNrICovCisKKyNkZWZpbmUgU0tFSU5fVDFfQkxLX1RZUEUoVCkgICAoKCh1NjQpIChTS0VJTl9CTEtfVFlQRV8jI1QpKSA8PCBcCisJCQkJCVNLRUlOX1QxX1BPU19CTEtfVFlQRSkKKyNkZWZpbmUgU0tFSU5fVDFfQkxLX1RZUEVfS0VZICAgU0tFSU5fVDFfQkxLX1RZUEUoS0VZKSAgLyogZm9yIE1BQyBhbmQgS0RGICovCisjZGVmaW5lIFNLRUlOX1QxX0JMS19UWVBFX0NGRyAgIFNLRUlOX1QxX0JMS19UWVBFKENGRykgIC8qIGNvbmZpZyBibG9jayAqLworI2RlZmluZSBTS0VJTl9UMV9CTEtfVFlQRV9QRVJTICBTS0VJTl9UMV9CTEtfVFlQRShQRVJTKSAvKiBwZXJzb25hbGl6YXRpb24gKi8KKyNkZWZpbmUgU0tFSU5fVDFfQkxLX1RZUEVfUEsgICAgU0tFSU5fVDFfQkxLX1RZUEUoUEspICAgLyogcHVia2V5IChmb3Igc2lncykgKi8KKyNkZWZpbmUgU0tFSU5fVDFfQkxLX1RZUEVfS0RGICAgU0tFSU5fVDFfQkxLX1RZUEUoS0RGKSAgLyoga2V5IGlkZW50IGZvciBLREYgKi8KKyNkZWZpbmUgU0tFSU5fVDFfQkxLX1RZUEVfTk9OQ0UgU0tFSU5fVDFfQkxLX1RZUEUoTk9OQ0UpLyogbm9uY2UgZm9yIFBSTkcgKi8KKyNkZWZpbmUgU0tFSU5fVDFfQkxLX1RZUEVfTVNHICAgU0tFSU5fVDFfQkxLX1RZUEUoTVNHKSAgLyogbWVzc2FnZSBwcm9jZXNzaW5nICovCisjZGVmaW5lIFNLRUlOX1QxX0JMS19UWVBFX09VVCAgIFNLRUlOX1QxX0JMS19UWVBFKE9VVCkgIC8qIG91dHB1dCBzdGFnZSAqLworI2RlZmluZSBTS0VJTl9UMV9CTEtfVFlQRV9NQVNLICBTS0VJTl9UMV9CTEtfVFlQRShNQVNLKSAvKiBmaWVsZCBiaXQgbWFzayAqLworCisjZGVmaW5lIFNLRUlOX1QxX0JMS19UWVBFX0NGR19GSU5BTCAgICAoU0tFSU5fVDFfQkxLX1RZUEVfQ0ZHIHwgXAorCQkJCQlTS0VJTl9UMV9GTEFHX0ZJTkFMKQorI2RlZmluZSBTS0VJTl9UMV9CTEtfVFlQRV9PVVRfRklOQUwgICAgKFNLRUlOX1QxX0JMS19UWVBFX09VVCB8IFwKKwkJCQkJU0tFSU5fVDFfRkxBR19GSU5BTCkKKworI2RlZmluZSBTS0VJTl9WRVJTSU9OICAgICAgICAgICAoMSkKKworI2lmbmRlZiBTS0VJTl9JRF9TVFJJTkdfTEUgICAgICAvKiBhbGxvdyBjb21waWxlLXRpbWUgcGVyc29uYWxpemF0aW9uICovCisjZGVmaW5lIFNLRUlOX0lEX1NUUklOR19MRSAgICAgICgweDMzNDE0ODUzKSAvKiAiU0hBMyIgKGxpdHRsZS1lbmRpYW4pKi8KKyNlbmRpZgorCisjZGVmaW5lIFNLRUlOX01LXzY0KGhpMzIsIGxvMzIpICAoKGxvMzIpICsgKCgodTY0KSAoaGkzMikpIDw8IDMyKSkKKyNkZWZpbmUgU0tFSU5fU0NIRU1BX1ZFUiAgICAgICAgU0tFSU5fTUtfNjQoU0tFSU5fVkVSU0lPTiwgU0tFSU5fSURfU1RSSU5HX0xFKQorI2RlZmluZSBTS0VJTl9LU19QQVJJVFkgICAgICAgICBTS0VJTl9NS182NCgweDFCRDExQkRBLCAweEE5RkMxQTIyKQorCisjZGVmaW5lIFNLRUlOX0NGR19TVFJfTEVOICAgICAgICg0KjgpCisKKy8qIGJpdCBmaWVsZCBkZWZpbml0aW9ucyBpbiBjb25maWcgYmxvY2sgdHJlZV9pbmZvIHdvcmQgKi8KKyNkZWZpbmUgU0tFSU5fQ0ZHX1RSRUVfTEVBRl9TSVpFX1BPUyAgKDApCisjZGVmaW5lIFNLRUlOX0NGR19UUkVFX05PREVfU0laRV9QT1MgICg4KQorI2RlZmluZSBTS0VJTl9DRkdfVFJFRV9NQVhfTEVWRUxfUE9TICAoMTYpCisKKyNkZWZpbmUgU0tFSU5fQ0ZHX1RSRUVfTEVBRl9TSVpFX01TSyAoKCh1NjQpMHhGRikgPDwgXAorCQkJCQlTS0VJTl9DRkdfVFJFRV9MRUFGX1NJWkVfUE9TKQorI2RlZmluZSBTS0VJTl9DRkdfVFJFRV9OT0RFX1NJWkVfTVNLICgoKHU2NCkweEZGKSA8PCBcCisJCQkJCVNLRUlOX0NGR19UUkVFX05PREVfU0laRV9QT1MpCisjZGVmaW5lIFNLRUlOX0NGR19UUkVFX01BWF9MRVZFTF9NU0sgKCgodTY0KTB4RkYpIDw8IFwKKwkJCQkJU0tFSU5fQ0ZHX1RSRUVfTUFYX0xFVkVMX1BPUykKKworI2RlZmluZSBTS0VJTl9DRkdfVFJFRV9JTkZPKGxlYWYsIG5vZGUsIG1heF9sdmwpICAgICAgICAgICAgICAgICAgIFwKKwkoKCgodTY0KShsZWFmKSkgICA8PCBTS0VJTl9DRkdfVFJFRV9MRUFGX1NJWkVfUE9TKSB8ICAgIFwKKwkgKCgodTY0KShub2RlKSkgICA8PCBTS0VJTl9DRkdfVFJFRV9OT0RFX1NJWkVfUE9TKSB8ICAgIFwKKwkgKCgodTY0KShtYXhfbHZsKSkgPDwgU0tFSU5fQ0ZHX1RSRUVfTUFYX0xFVkVMX1BPUykpCisKKy8qIHVzZSBhcyB0cmVlX2luZm8gaW4gSW5pdEV4dCgpIGNhbGwgZm9yIHNlcXVlbnRpYWwgcHJvY2Vzc2luZyAqLworI2RlZmluZSBTS0VJTl9DRkdfVFJFRV9JTkZPX1NFUVVFTlRJQUwgU0tFSU5fQ0ZHX1RSRUVfSU5GTygwLCAwLCAwKQorCisvKgorKiogICBTa2VpbiBtYWNyb3MgZm9yIGdldHRpbmcvc2V0dGluZyB0d2VhayB3b3JkcywgZXRjLgorKiogICBUaGVzZSBhcmUgdXNlZnVsIGZvciBwYXJ0aWFsIGlucHV0IGJ5dGVzLCBoYXNoIHRyZWUgaW5pdC91cGRhdGUsIGV0Yy4KKyoqLworI2RlZmluZSBza2Vpbl9nZXRfdHdlYWsoY3R4X3B0ciwgVFdLX05VTSkgICAgICAgICAgKChjdHhfcHRyKS0+aC50d2Vha1tUV0tfTlVNXSkKKyNkZWZpbmUgc2tlaW5fc2V0X3R3ZWFrKGN0eF9wdHIsIFRXS19OVU0sIHRfdmFsKSB7IFwKKwkJKGN0eF9wdHIpLT5oLnR3ZWFrW1RXS19OVU1dID0gKHRfdmFsKTsgXAorCX0KKworI2RlZmluZSBza2Vpbl9nZXRfVDAoY3R4X3B0cikgICAgIHNrZWluX2dldF90d2VhayhjdHhfcHRyLCAwKQorI2RlZmluZSBza2Vpbl9nZXRfVDEoY3R4X3B0cikgICAgIHNrZWluX2dldF90d2VhayhjdHhfcHRyLCAxKQorI2RlZmluZSBza2Vpbl9zZXRfVDAoY3R4X3B0ciwgVDApIHNrZWluX3NldF90d2VhayhjdHhfcHRyLCAwLCBUMCkKKyNkZWZpbmUgc2tlaW5fc2V0X1QxKGN0eF9wdHIsIFQxKSBza2Vpbl9zZXRfdHdlYWsoY3R4X3B0ciwgMSwgVDEpCisKKy8qIHNldCBib3RoIHR3ZWFrIHdvcmRzIGF0IG9uY2UgKi8KKyNkZWZpbmUgc2tlaW5fc2V0X1QwX1QxKGN0eF9wdHIsIFQwLCBUMSkgICAgICAgICAgIFwKKwl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXNrZWluX3NldF9UMChjdHhfcHRyLCAoVDApKTsgICAgICAgICAgICAgICBcCisJc2tlaW5fc2V0X1QxKGN0eF9wdHIsIChUMSkpOyAgICAgICAgICAgICAgIFwKKwl9CisKKyNkZWZpbmUgc2tlaW5fc2V0X3R5cGUoY3R4X3B0ciwgQkxLX1RZUEUpICAgICAgICAgXAorCXNrZWluX3NldF9UMShjdHhfcHRyLCBTS0VJTl9UMV9CTEtfVFlQRV8jI0JMS19UWVBFKQorCisvKgorICogc2V0dXAgZm9yIHN0YXJ0aW5nIHdpdGggYSBuZXcgdHlwZToKKyAqIGgudHdlYWtbMF09MDsgaC50d2Vha1sxXSA9IE5FV19UWVBFOyBoLmJfY250PTA7CisgKi8KKyNkZWZpbmUgc2tlaW5fc3RhcnRfbmV3X3R5cGUoY3R4X3B0ciwgQkxLX1RZUEUpIHsgXAorCQlza2Vpbl9zZXRfVDBfVDEoY3R4X3B0ciwgMCwgU0tFSU5fVDFfRkxBR19GSVJTVCB8IFwKKwkJCQlTS0VJTl9UMV9CTEtfVFlQRV8jI0JMS19UWVBFKTsgXAorCQkoY3R4X3B0ciktPmguYl9jbnQgPSAwOyBcCisJfQorCisjZGVmaW5lIHNrZWluX2NsZWFyX2ZpcnN0X2ZsYWcoaGRyKSB7IFwKKwkJKGhkcikudHdlYWtbMV0gJj0gflNLRUlOX1QxX0ZMQUdfRklSU1Q7IFwKKwl9CisjZGVmaW5lIHNrZWluX3NldF9iaXRfcGFkX2ZsYWcoaGRyKSB7IFwKKwkJKGhkcikudHdlYWtbMV0gfD0gIFNLRUlOX1QxX0ZMQUdfQklUX1BBRDsgXAorCX0KKworI2RlZmluZSBza2Vpbl9zZXRfdHJlZV9sZXZlbChoZHIsIGhlaWdodCkgeyBcCisJCShoZHIpLnR3ZWFrWzFdIHw9IFNLRUlOX1QxX1RSRUVfTEVWRUwoaGVpZ2h0KTsgXAorCX0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAiSW50ZXJuYWwiIFNrZWluIGRlZmluaXRpb25zIGZvciBkZWJ1Z2dpbmcgYW5kIGVycm9yIGNoZWNraW5nCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgU0tFSU5fREVCVUcgICAgICAgICAgICAgLyogZXhhbWluZS9kaXNwbGF5IGludGVybWVkaWF0ZSB2YWx1ZXM/ICovCisjaW5jbHVkZSAic2tlaW5fZGVidWcuaCIKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBpcyBubyBjYWxsb3V0cyAqLworI2RlZmluZSBza2Vpbl9zaG93X2Jsb2NrKGJpdHMsIGN0eCwgeCwgYmxrX3B0ciwgd19wdHIsIGtzX2V2ZW50X3B0ciwga3Nfb2RkX3B0cikKKyNkZWZpbmUgc2tlaW5fc2hvd19yb3VuZChiaXRzLCBjdHgsIHIsIHgpCisjZGVmaW5lIHNrZWluX3Nob3dfcl9wdHIoYml0cywgY3R4LCByLCB4X3B0cikKKyNkZWZpbmUgc2tlaW5fc2hvd19maW5hbChiaXRzLCBjdHgsIGNudCwgb3V0X3B0cikKKyNkZWZpbmUgc2tlaW5fc2hvd19rZXkoYml0cywgY3R4LCBrZXksIGtleV9ieXRlcykKKyNlbmRpZgorCisvKiBpZ25vcmUgYWxsIGFzc2VydHMsIGZvciBwZXJmb3JtYW5jZSAqLworI2RlZmluZSBza2Vpbl9hc3NlcnRfcmV0KHgsIHJldF9jb2RlKQorI2RlZmluZSBza2Vpbl9hc3NlcnQoeCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBTa2VpbiBibG9jayBmdW5jdGlvbiBjb25zdGFudHMgKHNoYXJlZCBhY3Jvc3MgUmVmIGFuZCBPcHQgY29kZSkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0geworCSAgICAvKiBTS0VJTl8yNTYgcm91bmQgcm90YXRpb24gY29uc3RhbnRzICovCisJUl8yNTZfMF8wID0gMTQsIFJfMjU2XzBfMSA9IDE2LAorCVJfMjU2XzFfMCA9IDUyLCBSXzI1Nl8xXzEgPSA1NywKKwlSXzI1Nl8yXzAgPSAyMywgUl8yNTZfMl8xID0gNDAsCisJUl8yNTZfM18wID0gIDUsIFJfMjU2XzNfMSA9IDM3LAorCVJfMjU2XzRfMCA9IDI1LCBSXzI1Nl80XzEgPSAzMywKKwlSXzI1Nl81XzAgPSA0NiwgUl8yNTZfNV8xID0gMTIsCisJUl8yNTZfNl8wID0gNTgsIFJfMjU2XzZfMSA9IDIyLAorCVJfMjU2XzdfMCA9IDMyLCBSXzI1Nl83XzEgPSAzMiwKKworCSAgICAvKiBTS0VJTl81MTIgcm91bmQgcm90YXRpb24gY29uc3RhbnRzICovCisJUl81MTJfMF8wID0gNDYsIFJfNTEyXzBfMSA9IDM2LCBSXzUxMl8wXzIgPSAxOSwgUl81MTJfMF8zID0gMzcsCisJUl81MTJfMV8wID0gMzMsIFJfNTEyXzFfMSA9IDI3LCBSXzUxMl8xXzIgPSAxNCwgUl81MTJfMV8zID0gNDIsCisJUl81MTJfMl8wID0gMTcsIFJfNTEyXzJfMSA9IDQ5LCBSXzUxMl8yXzIgPSAzNiwgUl81MTJfMl8zID0gMzksCisJUl81MTJfM18wID0gNDQsIFJfNTEyXzNfMSA9ICA5LCBSXzUxMl8zXzIgPSA1NCwgUl81MTJfM18zID0gNTYsCisJUl81MTJfNF8wID0gMzksIFJfNTEyXzRfMSA9IDMwLCBSXzUxMl80XzIgPSAzNCwgUl81MTJfNF8zID0gMjQsCisJUl81MTJfNV8wID0gMTMsIFJfNTEyXzVfMSA9IDUwLCBSXzUxMl81XzIgPSAxMCwgUl81MTJfNV8zID0gMTcsCisJUl81MTJfNl8wID0gMjUsIFJfNTEyXzZfMSA9IDI5LCBSXzUxMl82XzIgPSAzOSwgUl81MTJfNl8zID0gNDMsCisJUl81MTJfN18wID0gIDgsIFJfNTEyXzdfMSA9IDM1LCBSXzUxMl83XzIgPSA1NiwgUl81MTJfN18zID0gMjIsCisKKwkgICAgLyogU0tFSU5fMTAyNCByb3VuZCByb3RhdGlvbiBjb25zdGFudHMgKi8KKwlSMTAyNF8wXzAgPSAyNCwgUjEwMjRfMF8xID0gMTMsIFIxMDI0XzBfMiA9ICA4LCBSMTAyNF8wXzMgPSA0NywKKwlSMTAyNF8wXzQgPSAgOCwgUjEwMjRfMF81ID0gMTcsIFIxMDI0XzBfNiA9IDIyLCBSMTAyNF8wXzcgPSAzNywKKwlSMTAyNF8xXzAgPSAzOCwgUjEwMjRfMV8xID0gMTksIFIxMDI0XzFfMiA9IDEwLCBSMTAyNF8xXzMgPSA1NSwKKwlSMTAyNF8xXzQgPSA0OSwgUjEwMjRfMV81ID0gMTgsIFIxMDI0XzFfNiA9IDIzLCBSMTAyNF8xXzcgPSA1MiwKKwlSMTAyNF8yXzAgPSAzMywgUjEwMjRfMl8xID0gIDQsIFIxMDI0XzJfMiA9IDUxLCBSMTAyNF8yXzMgPSAxMywKKwlSMTAyNF8yXzQgPSAzNCwgUjEwMjRfMl81ID0gNDEsIFIxMDI0XzJfNiA9IDU5LCBSMTAyNF8yXzcgPSAxNywKKwlSMTAyNF8zXzAgPSAgNSwgUjEwMjRfM18xID0gMjAsIFIxMDI0XzNfMiA9IDQ4LCBSMTAyNF8zXzMgPSA0MSwKKwlSMTAyNF8zXzQgPSA0NywgUjEwMjRfM181ID0gMjgsIFIxMDI0XzNfNiA9IDE2LCBSMTAyNF8zXzcgPSAyNSwKKwlSMTAyNF80XzAgPSA0MSwgUjEwMjRfNF8xID0gIDksIFIxMDI0XzRfMiA9IDM3LCBSMTAyNF80XzMgPSAzMSwKKwlSMTAyNF80XzQgPSAxMiwgUjEwMjRfNF81ID0gNDcsIFIxMDI0XzRfNiA9IDQ0LCBSMTAyNF80XzcgPSAzMCwKKwlSMTAyNF81XzAgPSAxNiwgUjEwMjRfNV8xID0gMzQsIFIxMDI0XzVfMiA9IDU2LCBSMTAyNF81XzMgPSA1MSwKKwlSMTAyNF81XzQgPSAgNCwgUjEwMjRfNV81ID0gNTMsIFIxMDI0XzVfNiA9IDQyLCBSMTAyNF81XzcgPSA0MSwKKwlSMTAyNF82XzAgPSAzMSwgUjEwMjRfNl8xID0gNDQsIFIxMDI0XzZfMiA9IDQ3LCBSMTAyNF82XzMgPSA0NiwKKwlSMTAyNF82XzQgPSAxOSwgUjEwMjRfNl81ID0gNDIsIFIxMDI0XzZfNiA9IDQ0LCBSMTAyNF82XzcgPSAyNSwKKwlSMTAyNF83XzAgPSAgOSwgUjEwMjRfN18xID0gNDgsIFIxMDI0XzdfMiA9IDM1LCBSMTAyNF83XzMgPSA1MiwKKwlSMTAyNF83XzQgPSAyMywgUjEwMjRfN181ID0gMzEsIFIxMDI0XzdfNiA9IDM3LCBSMTAyNF83XzcgPSAyMAorfTsKKworI2lmbmRlZiBTS0VJTl9ST1VORFMKKyNkZWZpbmUgU0tFSU5fMjU2X1JPVU5EU19UT1RBTCAoNzIpCS8qICMgcm91bmRzIGZvciBkaWZmIGJsb2NrIHNpemVzICovCisjZGVmaW5lIFNLRUlOXzUxMl9ST1VORFNfVE9UQUwgKDcyKQorI2RlZmluZSBTS0VJTl8xMDI0X1JPVU5EU19UT1RBTCAoODApCisjZWxzZQkJCS8qIGFsbG93IGNvbW1hbmQtbGluZSBkZWZpbmUgaW4gcmFuZ2UgOCooNS4uMTQpICAgKi8KKyNkZWZpbmUgU0tFSU5fMjU2X1JPVU5EU19UT1RBTCAoOCooKCgoU0tFSU5fUk9VTkRTLzEwMCkgKyA1KSAlIDEwKSArIDUpKQorI2RlZmluZSBTS0VJTl81MTJfUk9VTkRTX1RPVEFMICg4KigoKChTS0VJTl9ST1VORFMvMTApICArIDUpICUgMTApICsgNSkpCisjZGVmaW5lIFNLRUlOXzEwMjRfUk9VTkRTX1RPVEFMICg4KigoKChTS0VJTl9ST1VORFMpICAgICArIDUpICUgMTApICsgNSkpCisjZW5kaWYKKworI2VuZGlmICAvKiBpZm5kZWYgX1NLRUlOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5fYXBpLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5fYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3MDBlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbl9hcGkuYwpAQCAtMCwwICsxLDIzOSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCBXZXJuZXIgRGl0dG1hbm4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKK0hPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlICJza2Vpbl9hcGkuaCIKKworaW50IHNrZWluX2N0eF9wcmVwYXJlKHN0cnVjdCBza2Vpbl9jdHggKmN0eCwgZW51bSBza2Vpbl9zaXplIHNpemUpCit7CisJc2tlaW5fYXNzZXJ0X3JldChjdHggJiYgc2l6ZSwgU0tFSU5fRkFJTCk7CisKKwltZW1zZXQoY3R4ICwgMCwgc2l6ZW9mKHN0cnVjdCBza2Vpbl9jdHgpKTsKKwljdHgtPnNrZWluX3NpemUgPSBzaXplOworCisJcmV0dXJuIFNLRUlOX1NVQ0NFU1M7Cit9CisKK2ludCBza2Vpbl9pbml0KHN0cnVjdCBza2Vpbl9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbikKK3sKKwlpbnQgcmV0ID0gU0tFSU5fRkFJTDsKKwlzaXplX3QgeF9sZW4gPSAwOworCXU2NCAqeCA9IE5VTEw7CisJdTY0IHRyZWVfaW5mbyA9IFNLRUlOX0NGR19UUkVFX0lORk9fU0VRVUVOVElBTDsKKworCXNrZWluX2Fzc2VydF9yZXQoY3R4LCBTS0VJTl9GQUlMKTsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHJlbHkgb2YgdGhlIGZhY3QgdGhhdCB0aGUgcmVhbCBTa2VpbgorCSAqIGNvbnRleHRzIGFyZSBhIHVuaW9uIGluIG91dCBjb250ZXh0IGFuZCB0aHVzIGhhdmUgdGhhIG1heGltdW0KKwkgKiBtZW1vcnkgYXZhaWxhYmxlLiAgVGhlIGJlYXV0eSBvZiBDIDotKSAuCisJICovCisJeCA9IGN0eC0+bS5zMjU2Lng7CisJeF9sZW4gPSBjdHgtPnNrZWluX3NpemUvODsKKwkvKgorCSAqIElmIHNpemUgaXMgdGhlIHNhbWUgYW5kIGhhc2ggYml0IGxlbmd0aCBpcyB6ZXJvIHRoZW4gcmV1c2UKKwkgKiB0aGUgc2F2ZSBjaGFpbmluZyB2YXJpYWJsZXMuCisJICovCisJc3dpdGNoIChjdHgtPnNrZWluX3NpemUpIHsKKwljYXNlIFNLRUlOXzI1NjoKKwkJcmV0ID0gc2tlaW5fMjU2X2luaXRfZXh0KCZjdHgtPm0uczI1NiwgaGFzaF9iaXRfbGVuLAorCQkJCQkgdHJlZV9pbmZvLCBOVUxMLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTS0VJTl81MTI6CisJCXJldCA9IHNrZWluXzUxMl9pbml0X2V4dCgmY3R4LT5tLnM1MTIsIGhhc2hfYml0X2xlbiwKKwkJCQkJIHRyZWVfaW5mbywgTlVMTCwgMCk7CisJCWJyZWFrOworCWNhc2UgU0tFSU5fMTAyNDoKKwkJcmV0ID0gc2tlaW5fMTAyNF9pbml0X2V4dCgmY3R4LT5tLnMxMDI0LCBoYXNoX2JpdF9sZW4sCisJCQkJCSAgdHJlZV9pbmZvLCBOVUxMLCAwKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA9PSBTS0VJTl9TVUNDRVNTKSB7CisJCS8qCisJCSAqIFNhdmUgY2hhaW5pbmcgdmFyaWFibGVzIGZvciB0aGlzIGNvbWJpbmF0aW9uIG9mIHNpemUgYW5kCisJCSAqIGhhc2hfYml0X2xlbgorCQkgKi8KKwkJbWVtY3B5KGN0eC0+eF9zYXZlLCB4LCB4X2xlbik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBza2Vpbl9tYWNfaW5pdChzdHJ1Y3Qgc2tlaW5fY3R4ICpjdHgsIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAorCQkgICBzaXplX3QgaGFzaF9iaXRfbGVuKQoreworCWludCByZXQgPSBTS0VJTl9GQUlMOworCXU2NCAqeCA9IE5VTEw7CisJc2l6ZV90IHhfbGVuID0gMDsKKwl1NjQgdHJlZV9pbmZvID0gU0tFSU5fQ0ZHX1RSRUVfSU5GT19TRVFVRU5USUFMOworCisJc2tlaW5fYXNzZXJ0X3JldChjdHgsIFNLRUlOX0ZBSUwpOworCisJeCA9IGN0eC0+bS5zMjU2Lng7CisJeF9sZW4gPSBjdHgtPnNrZWluX3NpemUvODsKKworCXNrZWluX2Fzc2VydF9yZXQoaGFzaF9iaXRfbGVuLCBTS0VJTl9CQURfSEFTSExFTik7CisKKwlzd2l0Y2ggKGN0eC0+c2tlaW5fc2l6ZSkgeworCWNhc2UgU0tFSU5fMjU2OgorCQlyZXQgPSBza2Vpbl8yNTZfaW5pdF9leHQoJmN0eC0+bS5zMjU2LCBoYXNoX2JpdF9sZW4sCisJCQkJCSB0cmVlX2luZm8sCisJCQkJCSAoY29uc3QgdTggKilrZXksIGtleV9sZW4pOworCisJCWJyZWFrOworCWNhc2UgU0tFSU5fNTEyOgorCQlyZXQgPSBza2Vpbl81MTJfaW5pdF9leHQoJmN0eC0+bS5zNTEyLCBoYXNoX2JpdF9sZW4sCisJCQkJCSB0cmVlX2luZm8sCisJCQkJCSAoY29uc3QgdTggKilrZXksIGtleV9sZW4pOworCQlicmVhazsKKwljYXNlIFNLRUlOXzEwMjQ6CisJCXJldCA9IHNrZWluXzEwMjRfaW5pdF9leHQoJmN0eC0+bS5zMTAyNCwgaGFzaF9iaXRfbGVuLAorCQkJCQkgIHRyZWVfaW5mbywKKwkJCQkJICAoY29uc3QgdTggKilrZXksIGtleV9sZW4pOworCisJCWJyZWFrOworCX0KKwlpZiAocmV0ID09IFNLRUlOX1NVQ0NFU1MpIHsKKwkJLyoKKwkJICogU2F2ZSBjaGFpbmluZyB2YXJpYWJsZXMgZm9yIHRoaXMgY29tYmluYXRpb24gb2Yga2V5LAorCQkgKiBrZXlfbGVuLCBoYXNoX2JpdF9sZW4KKwkJICovCisJCW1lbWNweShjdHgtPnhfc2F2ZSwgeCwgeF9sZW4pOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNrZWluX3Jlc2V0KHN0cnVjdCBza2Vpbl9jdHggKmN0eCkKK3sKKwlzaXplX3QgeF9sZW4gPSAwOworCXU2NCAqeCA9IE5VTEw7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHJlbHkgb2YgdGhlIGZhY3QgdGhhdCB0aGUgcmVhbCBTa2VpbgorCSAqIGNvbnRleHRzIGFyZSBhIHVuaW9uIGluIG91dCBjb250ZXh0IGFuZCB0aHVzIGhhdmUgdGhhIG1heGltdW0KKwkgKiBtZW1vcnkgYXZhaWxhYmxlLiAgVGhlIGJlYXV0aXkgb2YgQyA6LSkgLgorCSAqLworCXggPSBjdHgtPm0uczI1Ni54OworCXhfbGVuID0gY3R4LT5za2Vpbl9zaXplLzg7CisJLyogUmVzdG9yZSB0aGUgY2hhaW5nIHZhcmlhYmxlLCByZXNldCBieXRlIGNvdW50ZXIgKi8KKwltZW1jcHkoeCwgY3R4LT54X3NhdmUsIHhfbGVuKTsKKworCS8qIFNldHVwIGNvbnRleHQgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZSAqLworCXNrZWluX3N0YXJ0X25ld190eXBlKCZjdHgtPm0sIE1TRyk7Cit9CisKK2ludCBza2Vpbl91cGRhdGUoc3RydWN0IHNrZWluX2N0eCAqY3R4LCBjb25zdCB1OCAqbXNnLAorCQkgc2l6ZV90IG1zZ19ieXRlX2NudCkKK3sKKwlpbnQgcmV0ID0gU0tFSU5fRkFJTDsKKworCXNrZWluX2Fzc2VydF9yZXQoY3R4LCBTS0VJTl9GQUlMKTsKKworCXN3aXRjaCAoY3R4LT5za2Vpbl9zaXplKSB7CisJY2FzZSBTS0VJTl8yNTY6CisJCXJldCA9IHNrZWluXzI1Nl91cGRhdGUoJmN0eC0+bS5zMjU2LCAoY29uc3QgdTggKiltc2csCisJCQkJICAgICAgIG1zZ19ieXRlX2NudCk7CisJCWJyZWFrOworCWNhc2UgU0tFSU5fNTEyOgorCQlyZXQgPSBza2Vpbl81MTJfdXBkYXRlKCZjdHgtPm0uczUxMiwgKGNvbnN0IHU4ICopbXNnLAorCQkJCSAgICAgICBtc2dfYnl0ZV9jbnQpOworCQlicmVhazsKKwljYXNlIFNLRUlOXzEwMjQ6CisJCXJldCA9IHNrZWluXzEwMjRfdXBkYXRlKCZjdHgtPm0uczEwMjQsIChjb25zdCB1OCAqKW1zZywKKwkJCQkJbXNnX2J5dGVfY250KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7CisKK30KKworaW50IHNrZWluX3VwZGF0ZV9iaXRzKHN0cnVjdCBza2Vpbl9jdHggKmN0eCwgY29uc3QgdTggKm1zZywKKwkJICAgICAgc2l6ZV90IG1zZ19iaXRfY250KQoreworCS8qCisJICogSSd2ZSB1c2VkIHRoZSBiaXQgcGFkIGltcGxlbWVudGF0aW9uIGZyb20gc2tlaW5fdGVzdC5jIChzZWUgTklTVCBDRCkKKwkgKiBhbmQgbW9kaWZpZWQgaXQgdG8gdXNlIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYW5kIGFkZGVkIHNvbWUKKwkgKiBwb2ludGVyIGFyaXRobWV0aWMuCisJICovCisJc2l6ZV90IGxlbmd0aDsKKwl1OCBtYXNrOworCXU4ICp1cDsKKworCS8qCisJICogb25seSB0aGUgZmluYWwgVXBkYXRlKCkgY2FsbCBpcyBhbGxvd2VkIGRvIHBhcnRpYWwgYnl0ZXMsIGVsc2UKKwkgKiBhc3NlcnQgYW4gZXJyb3IKKwkgKi8KKwlza2Vpbl9hc3NlcnRfcmV0KChjdHgtPm0uaC5UWzFdICYgU0tFSU5fVDFfRkxBR19CSVRfUEFEKSA9PSAwIHx8CisJCQkgbXNnX2JpdF9jbnQgPT0gMCwgU0tFSU5fRkFJTCk7CisKKwkvKiBpZiBudW1iZXIgb2YgYml0cyBpcyBhIG11bHRpcGxlIG9mIGJ5dGVzIC0gdGhhdCdzIGVhc3kgKi8KKwlpZiAoKG1zZ19iaXRfY250ICYgMHg3KSA9PSAwKQorCQlyZXR1cm4gc2tlaW5fdXBkYXRlKGN0eCwgbXNnLCBtc2dfYml0X2NudCA+PiAzKTsKKworCXNrZWluX3VwZGF0ZShjdHgsIG1zZywgKG1zZ19iaXRfY250ID4+IDMpICsgMSk7CisKKwkvKgorCSAqIFRoZSBuZXh0IGxpbmUgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZSByZWFsIFNrZWluIGNvbnRleHRzCisJICogYXJlIGEgdW5pb24gaW4gb3VyIGNvbnRleHQuIEFmdGVyIHRoZSBhZGRpdGlvbiB0aGUgcG9pbnRlciBwb2ludHMgdG8KKwkgKiBTa2VpbidzIHJlYWwgcGFydGlhbCBibG9jayBidWZmZXIuCisJICogSWYgdGhpcyBsYXlvdXQgZXZlciBjaGFuZ2VzIHdlIGhhdmUgdG8gYWRhcHQgdGhpcyBhcyB3ZWxsLgorCSAqLworCXVwID0gKHU4ICopY3R4LT5tLnMyNTYueCArIGN0eC0+c2tlaW5fc2l6ZSAvIDg7CisKKwkvKiBzZXQgdHdlYWsgZmxhZyBmb3IgdGhlIHNrZWluX2ZpbmFsIGNhbGwgKi8KKwlza2Vpbl9zZXRfYml0X3BhZF9mbGFnKGN0eC0+bS5oKTsKKworCS8qIG5vdyAicGFkIiB0aGUgZmluYWwgcGFydGlhbCBieXRlIHRoZSB3YXkgTklTVCBsaWtlcyAqLworCS8qIGdldCB0aGUgYl9jbnQgdmFsdWUgKHNhbWUgbG9jYXRpb24gZm9yIGFsbCBibG9jayBzaXplcykgKi8KKwlsZW5ndGggPSBjdHgtPm0uaC5iX2NudDsKKwkvKiBpbnRlcm5hbCBzYW5pdHkgY2hlY2s6IHRoZXJlIElTIGEgcGFydGlhbCBieXRlIGluIHRoZSBidWZmZXIhICovCisJc2tlaW5fYXNzZXJ0KGxlbmd0aCAhPSAwKTsKKwkvKiBwYXJ0aWFsIGJ5dGUgYml0IG1hc2sgKi8KKwltYXNrID0gKHU4KSAoMXUgPDwgKDcgLSAobXNnX2JpdF9jbnQgJiA3KSkpOworCS8qIGFwcGx5IGJpdCBwYWRkaW5nIG9uIGZpbmFsIGJ5dGUgKGluIHRoZSBidWZmZXIpICovCisJdXBbbGVuZ3RoLTFdICA9ICh1OCkoKHVwW2xlbmd0aC0xXSAmICgwLW1hc2spKXxtYXNrKTsKKworCXJldHVybiBTS0VJTl9TVUNDRVNTOworfQorCitpbnQgc2tlaW5fZmluYWwoc3RydWN0IHNrZWluX2N0eCAqY3R4LCB1OCAqaGFzaCkKK3sKKwlpbnQgcmV0ID0gU0tFSU5fRkFJTDsKKworCXNrZWluX2Fzc2VydF9yZXQoY3R4LCBTS0VJTl9GQUlMKTsKKworCXN3aXRjaCAoY3R4LT5za2Vpbl9zaXplKSB7CisJY2FzZSBTS0VJTl8yNTY6CisJCXJldCA9IHNrZWluXzI1Nl9maW5hbCgmY3R4LT5tLnMyNTYsICh1OCAqKWhhc2gpOworCQlicmVhazsKKwljYXNlIFNLRUlOXzUxMjoKKwkJcmV0ID0gc2tlaW5fNTEyX2ZpbmFsKCZjdHgtPm0uczUxMiwgKHU4ICopaGFzaCk7CisJCWJyZWFrOworCWNhc2UgU0tFSU5fMTAyNDoKKwkJcmV0ID0gc2tlaW5fMTAyNF9maW5hbCgmY3R4LT5tLnMxMDI0LCAodTggKiloYXNoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5fYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5fYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyZmExOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbl9hcGkuaApAQCAtMCwwICsxLDIzMCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCBXZXJuZXIgRGl0dG1hbm4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKK0hPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyovCisKKyNpZm5kZWYgU0tFSU5BUElfSAorI2RlZmluZSBTS0VJTkFQSV9ICisKKy8qKgorICogQGZpbGUgc2tlaW5fYXBpLmgKKyAqIEBicmllZiBBIFNrZWluIEFQSSBhbmQgaXRzIGZ1bmN0aW9ucy4KKyAqIEB7CisgKgorICogVGhpcyBBUEkgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhpcyBBUEkgc2ltcGxpZnkgdGhlIHVzYWdlCisgKiBvZiBTa2Vpbi4gVGhlIGRlc2lnbiBhbmQgdGhlIHdheSB0byB1c2UgdGhlIGZ1bmN0aW9ucyBmb2xsb3cgdGhlIG9wZW5TU0wKKyAqIGRlc2lnbiBidXQgYXQgdGhlIHNhbWUgdGltZSB0YWtlIGNhcmUgb2Ygc29tZSBTa2VpbiBzcGVjaWZpYyBiZWhhdmlvdXIKKyAqIGFuZCBwb3NzaWJpbGl0aWVzLgorICoKKyAqIFRoZSBmdW5jdGlvbnMgZW5hYmxlIGFwcGxpY2F0aW9ucyB0byBjcmVhdGUgYSBub3JtYWwgU2tlaW4gaGFzaGVzIGFuZAorICogbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlcyAoTUFDKS4KKyAqCisgKiBVc2luZyB0aGVzZSBmdW5jdGlvbnMgaXMgc2ltcGxlIGFuZCBzdHJhaWdodCBmb3J3YXJkOgorICoKKyAqIEBjb2RlCisgKgorICogI2luY2x1ZGUgInNrZWluX2FwaS5oIgorICoKKyAqIC4uLgorICogc3RydWN0IHNrZWluX2N0eCBjdHg7ICAgICAgICAgICAgIC8vIGEgU2tlaW4gaGFzaCBvciBNQUMgY29udGV4dAorICoKKyAqIC8vIHByZXBhcmUgY29udGV4dCwgaGVyZSBmb3IgYSBTa2VpbiB3aXRoIGEgc3RhdGUgc2l6ZSBvZiA1MTIgYml0cy4KKyAqIHNrZWluX2N0eF9wcmVwYXJlKCZjdHgsIFNLRUlOXzUxMik7CisgKgorICogLy8gSW5pdGlhbGl6ZSB0aGUgY29udGV4dCB0byBzZXQgdGhlIHJlcXVlc3RlZCBoYXNoIGxlbmd0aCBpbiBiaXRzCisgKiAvLyBoZXJlIHJlcXVlc3QgYSBvdXRwdXQgaGFzaCBzaXplIG9mIDMxIGJpdHMgKFNrZWluIHN1cHBvcnRzIHZhcmlhYmxlCisgKiAvLyBvdXRwdXQgc2l6ZXMgZXZlbiB2ZXJ5IHN0cmFuZ2Ugc2l6ZXMpCisgKiBza2Vpbl9pbml0KCZjdHgsIDMxKTsKKyAqCisgKiAvLyBOb3cgdXBkYXRlIFNrZWluIHdpdGggYW55IG51bWJlciBvZiBtZXNzYWdlIGJpdHMuIEEgZnVuY3Rpb24gdGhhdAorICogLy8gdGFrZXMgYSBudW1iZXIgb2YgYnl0ZXMgaXMgYWxzbyBhdmFpbGFibGUuCisgKiBza2Vpbl91cGRhdGVfYml0cygmY3R4LCBtZXNzYWdlLCBtc2dfbGVuZ3RoKTsKKyAqCisgKiAvLyBOb3cgZ2V0IHRoZSByZXN1bHQgb2YgdGhlIFNrZWluIGhhc2guIFRoZSBvdXRwdXQgYnVmZmVyIG11c3QgYmUKKyAqIC8vIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByZXF1ZXN0IG51bWJlciBvZiBvdXRwdXQgYml0cy4gVGhlIGFwcGxpY2F0aW9uCisgKiAvLyBtYXkgbm93IGV4dHJhY3QgdGhlIGJpdHMuCisgKiBza2Vpbl9maW5hbCgmY3R4LCByZXN1bHQpOworICogLi4uCisgKiBAZW5kY29kZQorICoKKyAqIEFuIGFwcGxpY2F0aW9uIG1heSB1c2UgQGMgc2tlaW5fcmVzZXQgdG8gcmVzZXQgYSBTa2VpbiBjb250ZXh0IGFuZCB1c2UKKyAqIGl0IGZvciBjcmVhdGlvbiBvZiBhbm90aGVyIGhhc2ggd2l0aCB0aGUgc2FtZSBTa2VpbiBzdGF0ZSBzaXplIGFuZCBvdXRwdXQKKyAqIGJpdCBsZW5ndGguIEluIHRoaXMgY2FzZSB0aGUgQVBJIGltcGxlbWVudGF0aW9uIHJlc3RvcmVzIHNvbWUgaW50ZXJuYWwKKyAqIGludGVybmFsIHN0YXRlIGRhdGEgYW5kIHNhdmVzIGEgZnVsbCBTa2VpbiBpbml0aWFsaXphdGlvbiByb3VuZC4KKyAqCisgKiBUbyBjcmVhdGUgYSBNQUMgdGhlIGFwcGxpY2F0aW9uIGp1c3QgdXNlcyBAYyBza2Vpbl9tYWNfaW5pdCBpbnN0ZWFkIG9mCisgKiBAYyBza2Vpbl9pbml0LiBBbGwgb3RoZXIgZnVuY3Rpb25zIGNhbGxzIHJlbWFpbiB0aGUgc2FtZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAic2tlaW4uaCIKKworLyoqCisgKiBXaGljaCBTa2VpbiBzaXplIHRvIHVzZQorICovCitlbnVtIHNrZWluX3NpemUgeworCVNLRUlOXzI1NiA9IDI1NiwgICAgIC8qITwgU2tlaW4gd2l0aCAyNTYgYml0IHN0YXRlICovCisJU0tFSU5fNTEyID0gNTEyLCAgICAgLyohPCBTa2VpbiB3aXRoIDUxMiBiaXQgc3RhdGUgKi8KKwlTS0VJTl8xMDI0ID0gMTAyNCAgICAvKiE8IFNrZWluIHdpdGggMTAyNCBiaXQgc3RhdGUgKi8KK307CisKKy8qKgorICogQ29udGV4dCBmb3IgU2tlaW4uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgd2FzIHNldHVwIHdpdGggc29tZSBrbm93LWhvdyBvZiB0aGUgaW50ZXJuYWwKKyAqIFNrZWluIHN0cnVjdHVyZXMsIGluIHBhcnRpY3VsYXIgb3JkZXJpbmcgb2YgaGVhZGVyIGFuZCBzaXplIGRlcGVuZGVudAorICogdmFyaWFibGVzLiBJZiBTa2VpbiBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIHRoaXMsIHRoZW4gYWRhcHQgdGhlc2UKKyAqIHN0cnVjdHVyZXMgYXMgd2VsbC4KKyAqLworc3RydWN0IHNrZWluX2N0eCB7CisJdTY0IHNrZWluX3NpemU7CisJdTY0IHhfc2F2ZVtTS0VJTl9NQVhfU1RBVEVfV09SRFNdOyAgIC8qIHNhdmUgYXJlYSBmb3Igc3RhdGUgdmFyaWFibGVzICovCisJdW5pb24geworCQlzdHJ1Y3Qgc2tlaW5fY3R4X2hkciBoOworCQlzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCBzMjU2OworCQlzdHJ1Y3Qgc2tlaW5fNTEyX2N0eCBzNTEyOworCQlzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggczEwMjQ7CisJfSBtOworfTsKKworLyoqCisgKiBQcmVwYXJlIGEgU2tlaW4gY29udGV4dC4KKyAqCisgKiBBbiBhcHBsaWNhdGlvbiBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgaXQgY2FuIHVzZSB0aGUgU2tlaW4KKyAqIGNvbnRleHQuIFRoZSBmdW5jdGlvbnMgY2xlYXJzIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZXMgc2l6ZSBkZXBlbmRlbnQKKyAqIHZhcmlhYmxlcy4KKyAqCisgKiBAcGFyYW0gY3R4CisgKiAgICAgUG9pbnRlciB0byBhIFNrZWluIGNvbnRleHQuCisgKiBAcGFyYW0gc2l6ZQorICogICAgIFdoaWNoIFNrZWluIHNpemUgdG8gdXNlLgorICogQHJldHVybgorICogICAgIFNLRUlOX1NVQ0VTUyBvZiBTS0VJTl9GQUlMCisgKi8KK2ludCBza2Vpbl9jdHhfcHJlcGFyZShzdHJ1Y3Qgc2tlaW5fY3R4ICpjdHgsIGVudW0gc2tlaW5fc2l6ZSBzaXplKTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgU2tlaW4gY29udGV4dC4KKyAqCisgKiBJbml0aWFsaXplcyB0aGUgY29udGV4dCB3aXRoIHRoaXMgZGF0YSBhbmQgc2F2ZXMgdGhlIHJlc3VsdGluZyBTa2VpbgorICogc3RhdGUgdmFyaWFibGVzIGZvciBmdXJ0aGVyIHVzZS4KKyAqCisgKiBAcGFyYW0gY3R4CisgKiAgICAgUG9pbnRlciB0byBhIFNrZWluIGNvbnRleHQuCisgKiBAcGFyYW0gaGFzaF9iaXRfbGVuCisgKiAgICAgTnVtYmVyIG9mIE1BQyBoYXNoIGJpdHMgdG8gY29tcHV0ZQorICogQHJldHVybgorICogICAgIFNLRUlOX1NVQ0VTUyBvZiBTS0VJTl9GQUlMCisgKiBAc2VlIHNrZWluX3Jlc2V0CisgKi8KK2ludCBza2Vpbl9pbml0KHN0cnVjdCBza2Vpbl9jdHggKmN0eCwgc2l6ZV90IGhhc2hfYml0X2xlbik7CisKKy8qKgorICogUmVzZXRzIGEgU2tlaW4gY29udGV4dCBmb3IgZnVydGhlciB1c2UuCisgKgorICogUmVzdG9yZXMgdGhlIHNhdmVkIGNoYWluaW5nIHZhcmlhYmxlcyB0byByZXNldCB0aGUgU2tlaW4gY29udGV4dC4KKyAqIFRodXMgYXBwbGljYXRpb25zIGNhbiByZXVzZSB0aGUgc2FtZSBzZXR1cCB0byAgcHJvY2VzcyBzZXZlcmFsCisgKiBtZXNzYWdlcy4gVGhpcyBzYXZlcyBhIGNvbXBsZXRlIFNrZWluIGluaXRpYWxpemF0aW9uIGN5Y2xlLgorICoKKyAqIEBwYXJhbSBjdHgKKyAqICAgICBQb2ludGVyIHRvIGEgcHJlLWluaXRpYWxpemVkIFNrZWluIE1BQyBjb250ZXh0CisgKi8KK3ZvaWQgc2tlaW5fcmVzZXQoc3RydWN0IHNrZWluX2N0eCAqY3R4KTsKKworLyoqCisgKiBJbml0aWFsaXplcyBhIFNrZWluIGNvbnRleHQgZm9yIE1BQyB1c2FnZS4KKyAqCisgKiBJbml0aWFsaXplcyB0aGUgY29udGV4dCB3aXRoIHRoaXMgZGF0YSBhbmQgc2F2ZXMgdGhlIHJlc3VsdGluZyBTa2VpbgorICogc3RhdGUgdmFyaWFibGVzIGZvciBmdXJ0aGVyIHVzZS4KKyAqCisgKiBBcHBsaWNhdGlvbnMgY2FsbCB0aGUgbm9ybWFsIFNrZWluIGZ1bmN0aW9ucyB0byB1cGRhdGUgdGhlIE1BQyBhbmQKKyAqIGdldCB0aGUgZmluYWwgcmVzdWx0LgorICoKKyAqIEBwYXJhbSBjdHgKKyAqICAgICBQb2ludGVyIHRvIGFuIGVtcHR5IG9yIHByZWluaXRpYWxpemVkIFNrZWluIE1BQyBjb250ZXh0CisgKiBAcGFyYW0ga2V5CisgKiAgICAgUG9pbnRlciB0byBrZXkgYnl0ZXMgb3IgTlVMTAorICogQHBhcmFtIGtleV9sZW4KKyAqICAgICBMZW5ndGggb2YgdGhlIGtleSBpbiBieXRlcyBvciB6ZXJvCisgKiBAcGFyYW0gaGFzaF9iaXRfbGVuCisgKiAgICAgTnVtYmVyIG9mIE1BQyBoYXNoIGJpdHMgdG8gY29tcHV0ZQorICogQHJldHVybgorICogICAgIFNLRUlOX1NVQ0VTUyBvZiBTS0VJTl9GQUlMCisgKi8KK2ludCBza2Vpbl9tYWNfaW5pdChzdHJ1Y3Qgc2tlaW5fY3R4ICpjdHgsIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAorCQkgICBzaXplX3QgaGFzaF9iaXRfbGVuKTsKKworLyoqCisgKiBVcGRhdGUgU2tlaW4gd2l0aCB0aGUgbmV4dCBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorICoKKyAqIEBwYXJhbSBjdHgKKyAqICAgICBQb2ludGVyIHRvIGluaXRpYWxpemVkIFNrZWluIGNvbnRleHQKKyAqIEBwYXJhbSBtc2cKKyAqICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlLgorICogQHBhcmFtIG1zZ19ieXRlX2NudAorICogICAgIExlbmd0aCBvZiB0aGUgbWVzc2FnZSBpbiBAYiBieXRlcworICogQHJldHVybgorICogICAgIFN1Y2Nlc3Mgb3IgZXJyb3IgY29kZS4KKyAqLworaW50IHNrZWluX3VwZGF0ZShzdHJ1Y3Qgc2tlaW5fY3R4ICpjdHgsIGNvbnN0IHU4ICptc2csCisJCSBzaXplX3QgbXNnX2J5dGVfY250KTsKKworLyoqCisgKiBVcGRhdGUgdGhlIGhhc2ggd2l0aCBhIG1lc3NhZ2UgYml0IHN0cmluZy4KKyAqCisgKiBTa2VpbiBjYW4gaGFuZGxlIGRhdGEgbm90IG9ubHkgYXMgYnl0ZXMgYnV0IGFsc28gYXMgYml0IHN0cmluZ3Mgb2YKKyAqIGFyYml0cmFyeSBsZW5ndGggKHVwIHRvIGl0cyBtYXhpbXVtIGRlc2lnbiBzaXplKS4KKyAqCisgKiBAcGFyYW0gY3R4CisgKiAgICAgUG9pbnRlciB0byBpbml0aWFsaXplZCBTa2VpbiBjb250ZXh0CisgKiBAcGFyYW0gbXNnCisgKiAgICAgUG9pbnRlciB0byB0aGUgbWVzc2FnZS4KKyAqIEBwYXJhbSBtc2dfYml0X2NudAorICogICAgIExlbmd0aCBvZiB0aGUgbWVzc2FnZSBpbiBAYiBiaXRzLgorICovCitpbnQgc2tlaW5fdXBkYXRlX2JpdHMoc3RydWN0IHNrZWluX2N0eCAqY3R4LCBjb25zdCB1OCAqbXNnLAorCQkgICAgICBzaXplX3QgbXNnX2JpdF9jbnQpOworCisvKioKKyAqIEZpbmFsaXplIFNrZWluIGFuZCByZXR1cm4gdGhlIGhhc2guCisgKgorICogQmVmb3JlIGFuIGFwcGxpY2F0aW9uIGNhbiByZXVzZSBhIFNrZWluIHNldHVwIHRoZSBhcHBsaWNhdGlvbiBtdXN0CisgKiByZXNldCB0aGUgU2tlaW4gY29udGV4dC4KKyAqCisgKiBAcGFyYW0gY3R4CisgKiAgICAgUG9pbnRlciB0byBpbml0aWFsaXplZCBTa2VpbiBjb250ZXh0CisgKiBAcGFyYW0gaGFzaAorICogICAgIFBvaW50ZXIgdG8gYnVmZmVyIHRoYXQgcmVjZWl2ZXMgdGhlIGhhc2guIFRoZSBidWZmZXIgbXVzdCBiZSBsYXJnZQorICogICAgIGVub3VnaCB0byBzdG9yZSBAYyBoYXNoX2JpdF9sZW4gYml0cy4KKyAqIEByZXR1cm4KKyAqICAgICBTdWNjZXNzIG9yIGVycm9yIGNvZGUuCisgKiBAc2VlIHNrZWluX3Jlc2V0CisgKi8KK2ludCBza2Vpbl9maW5hbChzdHJ1Y3Qgc2tlaW5fY3R4ICpjdHgsIHU4ICpoYXNoKTsKKworLyoqCisgKiBAfQorICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbl9ibG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL3NrZWluL3NrZWluX2Jsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjZTFkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbl9ibG9jay5jCkBAIC0wLDAgKzEsNzc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCisqKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2tlaW4gYmxvY2sgZnVuY3Rpb25zLgorKioKKyoqIFNvdXJjZSBjb2RlIGF1dGhvcjogRG91ZyBXaGl0aW5nLCAyMDA4LgorKioKKyoqIFRoaXMgYWxnb3JpdGhtIGFuZCBzb3VyY2UgY29kZSBpcyByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbi4KKyoqCisqKiBDb21waWxlLXRpbWUgc3dpdGNoZXM6CisqKgorKiogIFNLRUlOX1VTRV9BU00gIC0tIHNldCBiaXRzICgyNTYvNTEyLzEwMjQpIHRvIHNlbGVjdCB3aGljaAorKiogICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIHVzZSBBU00gY29kZSBmb3IgYmxvY2sgcHJvY2Vzc2luZworKiogICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0OiB1c2UgQyBmb3IgYWxsIGJsb2NrIHNpemVzXQorKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgInNrZWluLmgiCisjaW5jbHVkZSAic2tlaW5fYmxvY2suaCIKKworI2lmbmRlZiBTS0VJTl9VU0VfQVNNCisjZGVmaW5lIFNLRUlOX1VTRV9BU00gICAoMCkgLyogZGVmYXVsdCBpcyBhbGwgQyBjb2RlIChubyBBU00pICovCisjZW5kaWYKKworI2lmbmRlZiBTS0VJTl9MT09QCisjZGVmaW5lIFNLRUlOX0xPT1AgMDAxIC8qIGRlZmF1bHQ6IHVucm9sbCAyNTYgYW5kIDUxMiwgYnV0IG5vdCAxMDI0ICovCisjZW5kaWYKKworI2RlZmluZSBCTEtfQklUUyAgICAgICAgKFdDTlQqNjQpIC8qIHNvbWUgdXNlZnVsIGRlZmluaXRpb25zIGZvciBjb2RlIGhlcmUgKi8KKyNkZWZpbmUgS1dfVFdLX0JBU0UgICAgICgwKQorI2RlZmluZSBLV19LRVlfQkFTRSAgICAgKDMpCisjZGVmaW5lIGtzICAgICAgICAgICAgICAoa3cgKyBLV19LRVlfQkFTRSkKKyNkZWZpbmUgdHMgICAgICAgICAgICAgIChrdyArIEtXX1RXS19CQVNFKQorCisjaWZkZWYgU0tFSU5fREVCVUcKKyNkZWZpbmUgZGVidWdfc2F2ZV90d2VhayhjdHgpIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5oLnR3ZWFrWzBdID0gdHNbMF07IGN0eC0+aC50d2Vha1sxXSA9IHRzWzFdOyB9CisjZWxzZQorI2RlZmluZSBkZWJ1Z19zYXZlX3R3ZWFrKGN0eCkKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIFNLRUlOXzI1NiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgIShTS0VJTl9VU0VfQVNNICYgMjU2KQordm9pZCBza2Vpbl8yNTZfcHJvY2Vzc19ibG9jayhzdHJ1Y3Qgc2tlaW5fMjU2X2N0eCAqY3R4LCBjb25zdCB1OCAqYmxrX3B0ciwKKwkJCSAgICAgc2l6ZV90IGJsa19jbnQsIHNpemVfdCBieXRlX2NudF9hZGQpCisJeyAvKiBkbyBpdCBpbiBDICovCisJZW51bSB7CisJCVdDTlQgPSBTS0VJTl8yNTZfU1RBVEVfV09SRFMKKwl9OworI3VuZGVmICBSQ05UCisjZGVmaW5lIFJDTlQgIChTS0VJTl8yNTZfUk9VTkRTX1RPVEFMLzgpCisKKyNpZmRlZiBTS0VJTl9MT09QIC8qIGNvbmZpZ3VyZSBob3cgbXVjaCB0byB1bnJvbGwgdGhlIGxvb3AgKi8KKyNkZWZpbmUgU0tFSU5fVU5ST0xMXzI1NiAoKChTS0VJTl9MT09QKS8xMDApJTEwKQorI2Vsc2UKKyNkZWZpbmUgU0tFSU5fVU5ST0xMXzI1NiAoMCkKKyNlbmRpZgorCisjaWYgU0tFSU5fVU5ST0xMXzI1NgorI2lmIChSQ05UICUgU0tFSU5fVU5ST0xMXzI1NikKKyNlcnJvciAiSW52YWxpZCBTS0VJTl9VTlJPTExfMjU2IiAvKiBzYW5pdHkgY2hlY2sgb24gdW5yb2xsIGNvdW50ICovCisjZW5kaWYKKwlzaXplX3QgIHI7CisJdTY0ICBrd1tXQ05UKzQrUkNOVCoyXTsgLyoga2V5IHNjaGVkdWxlOiBjaGFpbmluZyB2YXJzICsgdHdlYWsgKyAicm90IiovCisjZWxzZQorCXU2NCAga3dbV0NOVCs0XTsgLyoga2V5IHNjaGVkdWxlIHdvcmRzIDogY2hhaW5pbmcgdmFycyArIHR3ZWFrICovCisjZW5kaWYKKwl1NjQgIFgwLCBYMSwgWDIsIFgzOyAvKiBsb2NhbCBjb3B5IG9mIGNvbnRleHQgdmFycywgZm9yIHNwZWVkICovCisJdTY0ICB3W1dDTlRdOyAvKiBsb2NhbCBjb3B5IG9mIGlucHV0IGJsb2NrICovCisjaWZkZWYgU0tFSU5fREVCVUcKKwljb25zdCB1NjQgKlhfcHRyWzRdOyAvKiB1c2UgZm9yIGRlYnVnZ2luZyAoaGVscCBjYyBwdXQgWG4gaW4gcmVncykgKi8KKworCVhfcHRyWzBdID0gJlgwOyAgWF9wdHJbMV0gPSAmWDE7ICBYX3B0clsyXSA9ICZYMjsgIFhfcHRyWzNdID0gJlgzOworI2VuZGlmCisJc2tlaW5fYXNzZXJ0KGJsa19jbnQgIT0gMCk7IC8qIG5ldmVyIGNhbGwgd2l0aCBibGtfY250ID09IDAhICovCisJdHNbMF0gPSBjdHgtPmgudHdlYWtbMF07CisJdHNbMV0gPSBjdHgtPmgudHdlYWtbMV07CisJZG8gIHsKKwkJLyoKKwkJICogdGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIDIqKjY0IGlucHV0IGJ5dGVzCisJCSAqIChubyBjYXJyeSBvdXQgaGVyZSkKKwkJICovCisJCXRzWzBdICs9IGJ5dGVfY250X2FkZDsgLyogdXBkYXRlIHByb2Nlc3NlZCBsZW5ndGggKi8KKworCQkvKiBwcmVjb21wdXRlIHRoZSBrZXkgc2NoZWR1bGUgZm9yIHRoaXMgYmxvY2sgKi8KKwkJa3NbMF0gPSBjdHgtPnhbMF07CisJCWtzWzFdID0gY3R4LT54WzFdOworCQlrc1syXSA9IGN0eC0+eFsyXTsKKwkJa3NbM10gPSBjdHgtPnhbM107CisJCWtzWzRdID0ga3NbMF0gXiBrc1sxXSBeIGtzWzJdIF4ga3NbM10gXiBTS0VJTl9LU19QQVJJVFk7CisKKwkJdHNbMl0gPSB0c1swXSBeIHRzWzFdOworCisJCS8qIGdldCBpbnB1dCBibG9jayBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLworCQlza2Vpbl9nZXQ2NF9sc2JfZmlyc3QodywgYmxrX3B0ciwgV0NOVCk7CisJCWRlYnVnX3NhdmVfdHdlYWsoY3R4KTsKKwkJc2tlaW5fc2hvd19ibG9jayhCTEtfQklUUywgJmN0eC0+aCwgY3R4LT54LCBibGtfcHRyLCB3LCBrcywgdHMpOworCisJCVgwID0gd1swXSArIGtzWzBdOyAvKiBkbyB0aGUgZmlyc3QgZnVsbCBrZXkgaW5qZWN0aW9uICovCisJCVgxID0gd1sxXSArIGtzWzFdICsgdHNbMF07CisJCVgyID0gd1syXSArIGtzWzJdICsgdHNbMV07CisJCVgzID0gd1szXSArIGtzWzNdOworCisJCS8qIHNob3cgc3RhcnRpbmcgc3RhdGUgdmFsdWVzICovCisJCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIFNLRUlOX1JORF9LRVlfSU5JVElBTCwKKwkJCQkgeF9wdHIpOworCisJCWJsa19wdHIgKz0gU0tFSU5fMjU2X0JMT0NLX0JZVEVTOworCisJCS8qIHJ1biB0aGUgcm91bmRzICovCisKKyNkZWZpbmUgUk9VTkQyNTYocDAsIHAxLCBwMiwgcDMsIFJPVCwgcl9udW0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyBcCisJWCMjcDAgKz0gWCMjcDE7IFgjI3AxID0gcm90bF82NChYIyNwMSwgUk9UIyNfMCk7IFgjI3AxIF49IFgjI3AwOyBcCisJWCMjcDIgKz0gWCMjcDM7IFgjI3AzID0gcm90bF82NChYIyNwMywgUk9UIyNfMSk7IFgjI3AzIF49IFgjI3AyOyBcCit9IHdoaWxlICgwKQorCisjaWYgU0tFSU5fVU5ST0xMXzI1NiA9PSAwCisjZGVmaW5lIFIyNTYocDAsIHAxLCBwMiwgcDMsIFJPVCwgcl9udW0pIC8qIGZ1bGx5IHVucm9sbGVkICovIFwKK2RvIHsgXAorCVJPVU5EMjU2KHAwLCBwMSwgcDIsIHAzLCBST1QsIHJfbnVtKTsgXAorCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIHJfbnVtLCBYX3B0cik7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSTI1NihSKSBcCitkbyB7IFwKKwkvKiBpbmplY3QgdGhlIGtleSBzY2hlZHVsZSB2YWx1ZSAqLyBcCisJWDAgICArPSBrc1soKFIpKzEpICUgNV07IFwKKwlYMSAgICs9IGtzWygoUikrMikgJSA1XSArIHRzWygoUikrMSkgJSAzXTsgXAorCVgyICAgKz0ga3NbKChSKSszKSAlIDVdICsgdHNbKChSKSsyKSAlIDNdOyBcCisJWDMgICArPSBrc1soKFIpKzQpICUgNV0gKyAgICAgKFIpKzE7ICAgICAgIFwKKwlza2Vpbl9zaG93X3JfcHRyKEJMS19CSVRTLCAmY3R4LT5oLCBTS0VJTl9STkRfS0VZX0lOSkVDVCwgWF9wdHIpOyBcCit9IHdoaWxlICgwKQorI2Vsc2UgLyogbG9vcGluZyB2ZXJzaW9uICovCisjZGVmaW5lIFIyNTYocDAsIHAxLCBwMiwgcDMsIFJPVCwgcl9udW0pIFwKK2RvIHsgXAorCVJPVU5EMjU2KHAwLCBwMSwgcDIsIHAzLCBST1QsIHJfbnVtKTsgXAorCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIDQgKiAociAtIDEpICsgcl9udW0sIFhfcHRyKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJMjU2KFIpIFwKK2RvIHsgXAorCS8qIGluamVjdCB0aGUga2V5IHNjaGVkdWxlIHZhbHVlICovIFwKKwlYMCAgICs9IGtzW3IrKFIpKzBdOyBcCisJWDEgICArPSBrc1tyKyhSKSsxXSArIHRzW3IrKFIpKzBdOyBcCisJWDIgICArPSBrc1tyKyhSKSsyXSArIHRzW3IrKFIpKzFdOyBcCisJWDMgICArPSBrc1tyKyhSKSszXSArICAgIHIrKFIpOyAgICBcCisJLyogcm90YXRlIGtleSBzY2hlZHVsZSAqLyBcCisJa3NbciArIChSKSArIDRdICAgPSBrc1tyICsgKFIpIC0gMV07IFwKKwl0c1tyICsgKFIpICsgMl0gICA9IHRzW3IgKyAoUikgLSAxXTsgXAorCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIFNLRUlOX1JORF9LRVlfSU5KRUNULCBYX3B0cik7IFwKK30gd2hpbGUgKDApCisKKwlmb3IgKHIgPSAxOyByIDwgMiAqIFJDTlQ7IHIgKz0gMiAqIFNLRUlOX1VOUk9MTF8yNTYpCisjZW5kaWYKKwkJeworI2RlZmluZSBSMjU2XzhfUk9VTkRTKFIpICAgICAgICAgICAgICAgICAgXAorZG8geyBcCisJCVIyNTYoMCwgMSwgMiwgMywgUl8yNTZfMCwgOCAqIChSKSArIDEpOyAgXAorCQlSMjU2KDAsIDMsIDIsIDEsIFJfMjU2XzEsIDggKiAoUikgKyAyKTsgIFwKKwkJUjI1NigwLCAxLCAyLCAzLCBSXzI1Nl8yLCA4ICogKFIpICsgMyk7ICBcCisJCVIyNTYoMCwgMywgMiwgMSwgUl8yNTZfMywgOCAqIChSKSArIDQpOyAgXAorCQlJMjU2KDIgKiAoUikpOyAgICAgICAgICAgICAgICAgICAgICBcCisJCVIyNTYoMCwgMSwgMiwgMywgUl8yNTZfNCwgOCAqIChSKSArIDUpOyAgXAorCQlSMjU2KDAsIDMsIDIsIDEsIFJfMjU2XzUsIDggKiAoUikgKyA2KTsgIFwKKwkJUjI1NigwLCAxLCAyLCAzLCBSXzI1Nl82LCA4ICogKFIpICsgNyk7ICBcCisJCVIyNTYoMCwgMywgMiwgMSwgUl8yNTZfNywgOCAqIChSKSArIDgpOyAgXAorCQlJMjU2KDIgKiAoUikgKyAxKTsgXAorfSB3aGlsZSAoMCkKKworCQlSMjU2XzhfUk9VTkRTKDApOworCisjZGVmaW5lIFIyNTZfVU5ST0xMX1IoTk4pIFwKKwkoKFNLRUlOX1VOUk9MTF8yNTYgPT0gMCAmJiBcCisJICBTS0VJTl8yNTZfUk9VTkRTX1RPVEFMLzggPiAoTk4pKSB8fCBcCisJIChTS0VJTl9VTlJPTExfMjU2ID4gKE5OKSkpCisKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDEpCisJCVIyNTZfOF9ST1VORFMoMSk7CisJI2VuZGlmCisJI2lmICAgUjI1Nl9VTlJPTExfUigyKQorCQlSMjU2XzhfUk9VTkRTKDIpOworCSNlbmRpZgorCSNpZiAgIFIyNTZfVU5ST0xMX1IoMykKKwkJUjI1Nl84X1JPVU5EUygzKTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDQpCisJCVIyNTZfOF9ST1VORFMoNCk7CisJI2VuZGlmCisJI2lmICAgUjI1Nl9VTlJPTExfUig1KQorCQlSMjU2XzhfUk9VTkRTKDUpOworCSNlbmRpZgorCSNpZiAgIFIyNTZfVU5ST0xMX1IoNikKKwkJUjI1Nl84X1JPVU5EUyg2KTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDcpCisJCVIyNTZfOF9ST1VORFMoNyk7CisJI2VuZGlmCisJI2lmICAgUjI1Nl9VTlJPTExfUig4KQorCQlSMjU2XzhfUk9VTkRTKDgpOworCSNlbmRpZgorCSNpZiAgIFIyNTZfVU5ST0xMX1IoOSkKKwkJUjI1Nl84X1JPVU5EUyg5KTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDEwKQorCQlSMjU2XzhfUk9VTkRTKDEwKTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDExKQorCQlSMjU2XzhfUk9VTkRTKDExKTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDEyKQorCQlSMjU2XzhfUk9VTkRTKDEyKTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDEzKQorCQlSMjU2XzhfUk9VTkRTKDEzKTsKKwkjZW5kaWYKKwkjaWYgICBSMjU2X1VOUk9MTF9SKDE0KQorCQlSMjU2XzhfUk9VTkRTKDE0KTsKKwkjZW5kaWYKKwkjaWYgIChTS0VJTl9VTlJPTExfMjU2ID4gMTQpCisjZXJyb3IgICJuZWVkIG1vcmUgdW5yb2xsaW5nIGluIHNrZWluXzI1Nl9wcm9jZXNzX2Jsb2NrIgorCSNlbmRpZgorCQl9CisJCS8qIGRvIHRoZSBmaW5hbCAiZmVlZGZvcndhcmQiIHhvciwgdXBkYXRlIGNvbnRleHQgY2hhaW5pbmcgKi8KKwkJY3R4LT54WzBdID0gWDAgXiB3WzBdOworCQljdHgtPnhbMV0gPSBYMSBeIHdbMV07CisJCWN0eC0+eFsyXSA9IFgyIF4gd1syXTsKKwkJY3R4LT54WzNdID0gWDMgXiB3WzNdOworCisJCXNrZWluX3Nob3dfcm91bmQoQkxLX0JJVFMsICZjdHgtPmgsIFNLRUlOX1JORF9GRUVEX0ZXRCwgY3R4LT54KTsKKworCQl0c1sxXSAmPSB+U0tFSU5fVDFfRkxBR19GSVJTVDsKKwl9IHdoaWxlICgtLWJsa19jbnQpOworCWN0eC0+aC50d2Vha1swXSA9IHRzWzBdOworCWN0eC0+aC50d2Vha1sxXSA9IHRzWzFdOworfQorCisjaWYgZGVmaW5lZChTS0VJTl9DT0RFX1NJWkUpIHx8IGRlZmluZWQoU0tFSU5fUEVSRikKK3NpemVfdCBza2Vpbl8yNTZfcHJvY2Vzc19ibG9ja19jb2RlX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gKCh1OCAqKSBza2Vpbl8yNTZfcHJvY2Vzc19ibG9ja19jb2RlX3NpemUpIC0KKwkJKCh1OCAqKSBza2Vpbl8yNTZfcHJvY2Vzc19ibG9jayk7Cit9Cit1bnNpZ25lZCBpbnQgc2tlaW5fMjU2X3Vucm9sbF9jbnQodm9pZCkKK3sKKwlyZXR1cm4gU0tFSU5fVU5ST0xMXzI1NjsKK30KKyNlbmRpZgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgU0tFSU5fNTEyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAhKFNLRUlOX1VTRV9BU00gJiA1MTIpCit2b2lkIHNrZWluXzUxMl9wcm9jZXNzX2Jsb2NrKHN0cnVjdCBza2Vpbl81MTJfY3R4ICpjdHgsIGNvbnN0IHU4ICpibGtfcHRyLAorCQkJICAgICBzaXplX3QgYmxrX2NudCwgc2l6ZV90IGJ5dGVfY250X2FkZCkKK3sgLyogZG8gaXQgaW4gQyAqLworCWVudW0geworCQlXQ05UID0gU0tFSU5fNTEyX1NUQVRFX1dPUkRTCisJfTsKKyN1bmRlZiAgUkNOVAorI2RlZmluZSBSQ05UICAoU0tFSU5fNTEyX1JPVU5EU19UT1RBTC84KQorCisjaWZkZWYgU0tFSU5fTE9PUCAvKiBjb25maWd1cmUgaG93IG11Y2ggdG8gdW5yb2xsIHRoZSBsb29wICovCisjZGVmaW5lIFNLRUlOX1VOUk9MTF81MTIgKCgoU0tFSU5fTE9PUCkvMTApJTEwKQorI2Vsc2UKKyNkZWZpbmUgU0tFSU5fVU5ST0xMXzUxMiAoMCkKKyNlbmRpZgorCisjaWYgU0tFSU5fVU5ST0xMXzUxMgorI2lmIChSQ05UICUgU0tFSU5fVU5ST0xMXzUxMikKKyNlcnJvciAiSW52YWxpZCBTS0VJTl9VTlJPTExfNTEyIiAvKiBzYW5pdHkgY2hlY2sgb24gdW5yb2xsIGNvdW50ICovCisjZW5kaWYKKwlzaXplX3QgIHI7CisJdTY0ICBrd1tXQ05UKzQrUkNOVCoyXTsgLyoga2V5IHNjaGVkOiBjaGFpbmluZyB2YXJzICsgdHdlYWsgKyAicm90IiovCisjZWxzZQorCXU2NCAga3dbV0NOVCs0XTsgLyoga2V5IHNjaGVkdWxlIHdvcmRzIDogY2hhaW5pbmcgdmFycyArIHR3ZWFrICovCisjZW5kaWYKKwl1NjQgIFgwLCBYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNzsgLyogbG9jYWwgY29waWVzLCBmb3Igc3BlZWQgKi8KKwl1NjQgIHdbV0NOVF07IC8qIGxvY2FsIGNvcHkgb2YgaW5wdXQgYmxvY2sgKi8KKyNpZmRlZiBTS0VJTl9ERUJVRworCWNvbnN0IHU2NCAqWF9wdHJbOF07IC8qIHVzZSBmb3IgZGVidWdnaW5nIChoZWxwIGNjIHB1dCBYbiBpbiByZWdzKSAqLworCisJWF9wdHJbMF0gPSAmWDA7ICBYX3B0clsxXSA9ICZYMTsgIFhfcHRyWzJdID0gJlgyOyAgWF9wdHJbM10gPSAmWDM7CisJWF9wdHJbNF0gPSAmWDQ7ICBYX3B0cls1XSA9ICZYNTsgIFhfcHRyWzZdID0gJlg2OyAgWF9wdHJbN10gPSAmWDc7CisjZW5kaWYKKworCXNrZWluX2Fzc2VydChibGtfY250ICE9IDApOyAvKiBuZXZlciBjYWxsIHdpdGggYmxrX2NudCA9PSAwISAqLworCXRzWzBdID0gY3R4LT5oLnR3ZWFrWzBdOworCXRzWzFdID0gY3R4LT5oLnR3ZWFrWzFdOworCWRvICB7CisJCS8qCisJCSAqIHRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyAyKio2NCBpbnB1dCBieXRlcworCQkgKiAobm8gY2Fycnkgb3V0IGhlcmUpCisJCSAqLworCQl0c1swXSArPSBieXRlX2NudF9hZGQ7IC8qIHVwZGF0ZSBwcm9jZXNzZWQgbGVuZ3RoICovCisKKwkJLyogcHJlY29tcHV0ZSB0aGUga2V5IHNjaGVkdWxlIGZvciB0aGlzIGJsb2NrICovCisJCWtzWzBdID0gY3R4LT54WzBdOworCQlrc1sxXSA9IGN0eC0+eFsxXTsKKwkJa3NbMl0gPSBjdHgtPnhbMl07CisJCWtzWzNdID0gY3R4LT54WzNdOworCQlrc1s0XSA9IGN0eC0+eFs0XTsKKwkJa3NbNV0gPSBjdHgtPnhbNV07CisJCWtzWzZdID0gY3R4LT54WzZdOworCQlrc1s3XSA9IGN0eC0+eFs3XTsKKwkJa3NbOF0gPSBrc1swXSBeIGtzWzFdIF4ga3NbMl0gXiBrc1szXSBeCisJCQlrc1s0XSBeIGtzWzVdIF4ga3NbNl0gXiBrc1s3XSBeIFNLRUlOX0tTX1BBUklUWTsKKworCQl0c1syXSA9IHRzWzBdIF4gdHNbMV07CisKKwkJLyogZ2V0IGlucHV0IGJsb2NrIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCisJCXNrZWluX2dldDY0X2xzYl9maXJzdCh3LCBibGtfcHRyLCBXQ05UKTsKKwkJZGVidWdfc2F2ZV90d2VhayhjdHgpOworCQlza2Vpbl9zaG93X2Jsb2NrKEJMS19CSVRTLCAmY3R4LT5oLCBjdHgtPngsIGJsa19wdHIsIHcsIGtzLCB0cyk7CisKKwkJWDAgICA9IHdbMF0gKyBrc1swXTsgLyogZG8gdGhlIGZpcnN0IGZ1bGwga2V5IGluamVjdGlvbiAqLworCQlYMSAgID0gd1sxXSArIGtzWzFdOworCQlYMiAgID0gd1syXSArIGtzWzJdOworCQlYMyAgID0gd1szXSArIGtzWzNdOworCQlYNCAgID0gd1s0XSArIGtzWzRdOworCQlYNSAgID0gd1s1XSArIGtzWzVdICsgdHNbMF07CisJCVg2ICAgPSB3WzZdICsga3NbNl0gKyB0c1sxXTsKKwkJWDcgICA9IHdbN10gKyBrc1s3XTsKKworCQlibGtfcHRyICs9IFNLRUlOXzUxMl9CTE9DS19CWVRFUzsKKworCQlza2Vpbl9zaG93X3JfcHRyKEJMS19CSVRTLCAmY3R4LT5oLCBTS0VJTl9STkRfS0VZX0lOSVRJQUwsCisJCQkJIFhfcHRyKTsKKwkJLyogcnVuIHRoZSByb3VuZHMgKi8KKyNkZWZpbmUgUk9VTkQ1MTIocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBST1QsIHJfbnVtKSBcCitkbyB7IFwKKwlYIyNwMCArPSBYIyNwMTsgWCMjcDEgPSByb3RsXzY0KFgjI3AxLCBST1QjI18wKTsgWCMjcDEgXj0gWCMjcDA7IFwKKwlYIyNwMiArPSBYIyNwMzsgWCMjcDMgPSByb3RsXzY0KFgjI3AzLCBST1QjI18xKTsgWCMjcDMgXj0gWCMjcDI7IFwKKwlYIyNwNCArPSBYIyNwNTsgWCMjcDUgPSByb3RsXzY0KFgjI3A1LCBST1QjI18yKTsgWCMjcDUgXj0gWCMjcDQ7IFwKKwlYIyNwNiArPSBYIyNwNzsgWCMjcDcgPSByb3RsXzY0KFgjI3A3LCBST1QjI18zKTsgWCMjcDcgXj0gWCMjcDY7IFwKK30gd2hpbGUgKDApCisKKyNpZiBTS0VJTl9VTlJPTExfNTEyID09IDAKKyNkZWZpbmUgUjUxMihwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIFJPVCwgcl9udW0pIC8qIHVucm9sbGVkICovIFwKK2RvIHsgXAorCVJPVU5ENTEyKHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2LCBwNywgUk9ULCByX251bSkgXAorCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIHJfbnVtLCBYX3B0cik7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSTUxMihSKSBcCitkbyB7IFwKKwkvKiBpbmplY3QgdGhlIGtleSBzY2hlZHVsZSB2YWx1ZSAqLyBcCisJWDAgICArPSBrc1soKFIpICsgMSkgJSA5XTsgXAorCVgxICAgKz0ga3NbKChSKSArIDIpICUgOV07IFwKKwlYMiAgICs9IGtzWygoUikgKyAzKSAlIDldOyBcCisJWDMgICArPSBrc1soKFIpICsgNCkgJSA5XTsgXAorCVg0ICAgKz0ga3NbKChSKSArIDUpICUgOV07IFwKKwlYNSAgICs9IGtzWygoUikgKyA2KSAlIDldICsgdHNbKChSKSArIDEpICUgM107IFwKKwlYNiAgICs9IGtzWygoUikgKyA3KSAlIDldICsgdHNbKChSKSArIDIpICUgM107IFwKKwlYNyAgICs9IGtzWygoUikgKyA4KSAlIDldICsgICAgIChSKSArIDE7ICAgICAgIFwKKwlza2Vpbl9zaG93X3JfcHRyKEJMS19CSVRTLCAmY3R4LT5oLCBTS0VJTl9STkRfS0VZX0lOSkVDVCwgWF9wdHIpOyBcCit9IHdoaWxlICgwKQorI2Vsc2UgLyogbG9vcGluZyB2ZXJzaW9uICovCisjZGVmaW5lIFI1MTIocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBST1QsIHJfbnVtKSBcCitkbyB7IFwKKwlST1VORDUxMihwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIFJPVCwgcl9udW0pOyBcCisJc2tlaW5fc2hvd19yX3B0cihCTEtfQklUUywgJmN0eC0+aCwgNCAqIChyIC0gMSkgKyByX251bSwgWF9wdHIpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEk1MTIoUikgXAorZG8geyBcCisJLyogaW5qZWN0IHRoZSBrZXkgc2NoZWR1bGUgdmFsdWUgKi8gXAorCVgwICAgKz0ga3NbciArIChSKSArIDBdOyBcCisJWDEgICArPSBrc1tyICsgKFIpICsgMV07IFwKKwlYMiAgICs9IGtzW3IgKyAoUikgKyAyXTsgXAorCVgzICAgKz0ga3NbciArIChSKSArIDNdOyBcCisJWDQgICArPSBrc1tyICsgKFIpICsgNF07IFwKKwlYNSAgICs9IGtzW3IgKyAoUikgKyA1XSArIHRzW3IgKyAoUikgKyAwXTsgXAorCVg2ICAgKz0ga3NbciArIChSKSArIDZdICsgdHNbciArIChSKSArIDFdOyBcCisJWDcgICArPSBrc1tyICsgKFIpICsgN10gKyAgICAgICAgIHIgKyAoUik7IFwKKwkvKiByb3RhdGUga2V5IHNjaGVkdWxlICovIFwKKwlrc1tyICsgICAgICAgICAoUikgKyA4XSA9IGtzW3IgKyAoUikgLSAxXTsgXAorCXRzW3IgKyAgICAgICAgIChSKSArIDJdID0gdHNbciArIChSKSAtIDFdOyBcCisJc2tlaW5fc2hvd19yX3B0cihCTEtfQklUUywgJmN0eC0+aCwgU0tFSU5fUk5EX0tFWV9JTkpFQ1QsIFhfcHRyKTsgXAorfSB3aGlsZSAoMCkKKworCQlmb3IgKHIgPSAxOyByIDwgMiAqIFJDTlQ7IHIgKz0gMiAqIFNLRUlOX1VOUk9MTF81MTIpCisjZW5kaWYgLyogZW5kIG9mIGxvb3BlZCBjb2RlIGRlZmluaXRpb25zICovCisJCXsKKyNkZWZpbmUgUjUxMl84X1JPVU5EUyhSKSAgLyogZG8gOCBmdWxsIHJvdW5kcyAqLyAgXAorZG8geyBcCisJCVI1MTIoMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgUl81MTJfMCwgOCAqIChSKSArIDEpOyAgIFwKKwkJUjUxMigyLCAxLCA0LCA3LCA2LCA1LCAwLCAzLCBSXzUxMl8xLCA4ICogKFIpICsgMik7ICAgXAorCQlSNTEyKDQsIDEsIDYsIDMsIDAsIDUsIDIsIDcsIFJfNTEyXzIsIDggKiAoUikgKyAzKTsgICBcCisJCVI1MTIoNiwgMSwgMCwgNywgMiwgNSwgNCwgMywgUl81MTJfMywgOCAqIChSKSArIDQpOyAgIFwKKwkJSTUxMigyICogKFIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCVI1MTIoMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgUl81MTJfNCwgOCAqIChSKSArIDUpOyAgIFwKKwkJUjUxMigyLCAxLCA0LCA3LCA2LCA1LCAwLCAzLCBSXzUxMl81LCA4ICogKFIpICsgNik7ICAgXAorCQlSNTEyKDQsIDEsIDYsIDMsIDAsIDUsIDIsIDcsIFJfNTEyXzYsIDggKiAoUikgKyA3KTsgICBcCisJCVI1MTIoNiwgMSwgMCwgNywgMiwgNSwgNCwgMywgUl81MTJfNywgOCAqIChSKSArIDgpOyAgIFwKKwkJSTUxMigyICogKFIpICsgMSk7ICAgICAgICAvKiBhbmQga2V5IGluamVjdGlvbiAqLyBcCit9IHdoaWxlICgwKQorCisJCQlSNTEyXzhfUk9VTkRTKDApOworCisjZGVmaW5lIFI1MTJfVU5ST0xMX1IoTk4pIFwKKwkJKChTS0VJTl9VTlJPTExfNTEyID09IDAgJiYgXAorCQkgIFNLRUlOXzUxMl9ST1VORFNfVE9UQUwvOCA+IChOTikpIHx8IFwKKwkJIChTS0VJTl9VTlJPTExfNTEyID4gKE5OKSkpCisKKwkjaWYgICBSNTEyX1VOUk9MTF9SKDEpCisJCQlSNTEyXzhfUk9VTkRTKDEpOworCSNlbmRpZgorCSNpZiAgIFI1MTJfVU5ST0xMX1IoMikKKwkJCVI1MTJfOF9ST1VORFMoMik7CisJI2VuZGlmCisJI2lmICAgUjUxMl9VTlJPTExfUigzKQorCQkJUjUxMl84X1JPVU5EUygzKTsKKwkjZW5kaWYKKwkjaWYgICBSNTEyX1VOUk9MTF9SKDQpCisJCQlSNTEyXzhfUk9VTkRTKDQpOworCSNlbmRpZgorCSNpZiAgIFI1MTJfVU5ST0xMX1IoNSkKKwkJCVI1MTJfOF9ST1VORFMoNSk7CisJI2VuZGlmCisJI2lmICAgUjUxMl9VTlJPTExfUig2KQorCQkJUjUxMl84X1JPVU5EUyg2KTsKKwkjZW5kaWYKKwkjaWYgICBSNTEyX1VOUk9MTF9SKDcpCisJCQlSNTEyXzhfUk9VTkRTKDcpOworCSNlbmRpZgorCSNpZiAgIFI1MTJfVU5ST0xMX1IoOCkKKwkJCVI1MTJfOF9ST1VORFMoOCk7CisJI2VuZGlmCisJI2lmICAgUjUxMl9VTlJPTExfUig5KQorCQkJUjUxMl84X1JPVU5EUyg5KTsKKwkjZW5kaWYKKwkjaWYgICBSNTEyX1VOUk9MTF9SKDEwKQorCQkJUjUxMl84X1JPVU5EUygxMCk7CisJI2VuZGlmCisJI2lmICAgUjUxMl9VTlJPTExfUigxMSkKKwkJCVI1MTJfOF9ST1VORFMoMTEpOworCSNlbmRpZgorCSNpZiAgIFI1MTJfVU5ST0xMX1IoMTIpCisJCQlSNTEyXzhfUk9VTkRTKDEyKTsKKwkjZW5kaWYKKwkjaWYgICBSNTEyX1VOUk9MTF9SKDEzKQorCQkJUjUxMl84X1JPVU5EUygxMyk7CisJI2VuZGlmCisJI2lmICAgUjUxMl9VTlJPTExfUigxNCkKKwkJCVI1MTJfOF9ST1VORFMoMTQpOworCSNlbmRpZgorCSNpZiAgKFNLRUlOX1VOUk9MTF81MTIgPiAxNCkKKyNlcnJvciAgIm5lZWQgbW9yZSB1bnJvbGxpbmcgaW4gc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2siCisJI2VuZGlmCisJCX0KKworCQkvKiBkbyB0aGUgZmluYWwgImZlZWRmb3J3YXJkIiB4b3IsIHVwZGF0ZSBjb250ZXh0IGNoYWluaW5nICovCisJCWN0eC0+eFswXSA9IFgwIF4gd1swXTsKKwkJY3R4LT54WzFdID0gWDEgXiB3WzFdOworCQljdHgtPnhbMl0gPSBYMiBeIHdbMl07CisJCWN0eC0+eFszXSA9IFgzIF4gd1szXTsKKwkJY3R4LT54WzRdID0gWDQgXiB3WzRdOworCQljdHgtPnhbNV0gPSBYNSBeIHdbNV07CisJCWN0eC0+eFs2XSA9IFg2IF4gd1s2XTsKKwkJY3R4LT54WzddID0gWDcgXiB3WzddOworCQlza2Vpbl9zaG93X3JvdW5kKEJMS19CSVRTLCAmY3R4LT5oLCBTS0VJTl9STkRfRkVFRF9GV0QsIGN0eC0+eCk7CisKKwkJdHNbMV0gJj0gflNLRUlOX1QxX0ZMQUdfRklSU1Q7CisJfSB3aGlsZSAoLS1ibGtfY250KTsKKwljdHgtPmgudHdlYWtbMF0gPSB0c1swXTsKKwljdHgtPmgudHdlYWtbMV0gPSB0c1sxXTsKK30KKworI2lmIGRlZmluZWQoU0tFSU5fQ09ERV9TSVpFKSB8fCBkZWZpbmVkKFNLRUlOX1BFUkYpCitzaXplX3Qgc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2tfY29kZV9zaXplKHZvaWQpCit7CisJcmV0dXJuICgodTggKikgc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2tfY29kZV9zaXplKSAtCisJCSgodTggKikgc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2spOworfQordW5zaWduZWQgaW50IHNrZWluXzUxMl91bnJvbGxfY250KHZvaWQpCit7CisJcmV0dXJuIFNLRUlOX1VOUk9MTF81MTI7Cit9CisjZW5kaWYKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIFNLRUlOXzEwMjQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmICEoU0tFSU5fVVNFX0FTTSAmIDEwMjQpCit2b2lkIHNrZWluXzEwMjRfcHJvY2Vzc19ibG9jayhzdHJ1Y3Qgc2tlaW5fMTAyNF9jdHggKmN0eCwgY29uc3QgdTggKmJsa19wdHIsCisJCQkgICAgICBzaXplX3QgYmxrX2NudCwgc2l6ZV90IGJ5dGVfY250X2FkZCkKK3sgLyogZG8gaXQgaW4gQywgYWx3YXlzIGxvb3BpbmcgKHVucm9sbGVkIGlzIGJpZ2dlciBBTkQgc2xvd2VyISkgKi8KKwllbnVtIHsKKwkJV0NOVCA9IFNLRUlOXzEwMjRfU1RBVEVfV09SRFMKKwl9OworI3VuZGVmICBSQ05UCisjZGVmaW5lIFJDTlQgIChTS0VJTl8xMDI0X1JPVU5EU19UT1RBTC84KQorCisjaWZkZWYgU0tFSU5fTE9PUCAvKiBjb25maWd1cmUgaG93IG11Y2ggdG8gdW5yb2xsIHRoZSBsb29wICovCisjZGVmaW5lIFNLRUlOX1VOUk9MTF8xMDI0ICgoU0tFSU5fTE9PUCklMTApCisjZWxzZQorI2RlZmluZSBTS0VJTl9VTlJPTExfMTAyNCAoMCkKKyNlbmRpZgorCisjaWYgKFNLRUlOX1VOUk9MTF8xMDI0ICE9IDApCisjaWYgKFJDTlQgJSBTS0VJTl9VTlJPTExfMTAyNCkKKyNlcnJvciAiSW52YWxpZCBTS0VJTl9VTlJPTExfMTAyNCIgLyogc2FuaXR5IGNoZWNrIG9uIHVucm9sbCBjb3VudCAqLworI2VuZGlmCisJc2l6ZV90ICByOworCXU2NCAga3dbV0NOVCs0K1JDTlQqMl07IC8qIGtleSBzY2hlZDogY2hhaW5pbmcgdmFycyArIHR3ZWFrICsgInJvdCIgKi8KKyNlbHNlCisJdTY0ICBrd1tXQ05UKzRdOyAvKiBrZXkgc2NoZWR1bGUgd29yZHMgOiBjaGFpbmluZyB2YXJzICsgdHdlYWsgKi8KKyNlbmRpZgorCisJLyogbG9jYWwgY29weSBvZiB2YXJzLCBmb3Igc3BlZWQgKi8KKwl1NjQgIFgwMCwgWDAxLCBYMDIsIFgwMywgWDA0LCBYMDUsIFgwNiwgWDA3LAorCSAgICAgWDA4LCBYMDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0LCBYMTU7CisJdTY0ICB3W1dDTlRdOyAvKiBsb2NhbCBjb3B5IG9mIGlucHV0IGJsb2NrICovCisjaWZkZWYgU0tFSU5fREVCVUcKKwljb25zdCB1NjQgKlhfcHRyWzE2XTsgLyogdXNlIGZvciBkZWJ1Z2dpbmcgKGhlbHAgY2MgcHV0IFhuIGluIHJlZ3MpICovCisKKwlYX3B0clswXSAgPSAmWDAwOyAgWF9wdHJbMV0gID0gJlgwMTsgIFhfcHRyWzJdICA9ICZYMDI7CisJWF9wdHJbM10gID0gJlgwMzsgIFhfcHRyWzRdICA9ICZYMDQ7ICBYX3B0cls1XSAgPSAmWDA1OworCVhfcHRyWzZdICA9ICZYMDY7ICBYX3B0cls3XSAgPSAmWDA3OyAgWF9wdHJbOF0gID0gJlgwODsKKwlYX3B0cls5XSAgPSAmWDA5OyAgWF9wdHJbMTBdID0gJlgxMDsgIFhfcHRyWzExXSA9ICZYMTE7CisJWF9wdHJbMTJdID0gJlgxMjsgIFhfcHRyWzEzXSA9ICZYMTM7ICBYX3B0clsxNF0gPSAmWDE0OworCVhfcHRyWzE1XSA9ICZYMTU7CisjZW5kaWYKKworCXNrZWluX2Fzc2VydChibGtfY250ICE9IDApOyAvKiBuZXZlciBjYWxsIHdpdGggYmxrX2NudCA9PSAwISAqLworCXRzWzBdID0gY3R4LT5oLnR3ZWFrWzBdOworCXRzWzFdID0gY3R4LT5oLnR3ZWFrWzFdOworCWRvICB7CisJCS8qCisJCSAqIHRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyAyKio2NCBpbnB1dCBieXRlcworCQkgKiAobm8gY2Fycnkgb3V0IGhlcmUpCisJCSAqLworCQl0c1swXSArPSBieXRlX2NudF9hZGQ7IC8qIHVwZGF0ZSBwcm9jZXNzZWQgbGVuZ3RoICovCisKKwkJLyogcHJlY29tcHV0ZSB0aGUga2V5IHNjaGVkdWxlIGZvciB0aGlzIGJsb2NrICovCisJCWtzWzBdICA9IGN0eC0+eFswXTsKKwkJa3NbMV0gID0gY3R4LT54WzFdOworCQlrc1syXSAgPSBjdHgtPnhbMl07CisJCWtzWzNdICA9IGN0eC0+eFszXTsKKwkJa3NbNF0gID0gY3R4LT54WzRdOworCQlrc1s1XSAgPSBjdHgtPnhbNV07CisJCWtzWzZdICA9IGN0eC0+eFs2XTsKKwkJa3NbN10gID0gY3R4LT54WzddOworCQlrc1s4XSAgPSBjdHgtPnhbOF07CisJCWtzWzldICA9IGN0eC0+eFs5XTsKKwkJa3NbMTBdID0gY3R4LT54WzEwXTsKKwkJa3NbMTFdID0gY3R4LT54WzExXTsKKwkJa3NbMTJdID0gY3R4LT54WzEyXTsKKwkJa3NbMTNdID0gY3R4LT54WzEzXTsKKwkJa3NbMTRdID0gY3R4LT54WzE0XTsKKwkJa3NbMTVdID0gY3R4LT54WzE1XTsKKwkJa3NbMTZdID0gIGtzWzBdIF4gIGtzWzFdIF4gIGtzWzJdIF4gIGtzWzNdIF4KKwkJCSAga3NbNF0gXiAga3NbNV0gXiAga3NbNl0gXiAga3NbN10gXgorCQkJICBrc1s4XSBeICBrc1s5XSBeIGtzWzEwXSBeIGtzWzExXSBeCisJCQkgIGtzWzEyXSBeIGtzWzEzXSBeIGtzWzE0XSBeIGtzWzE1XSBeIFNLRUlOX0tTX1BBUklUWTsKKworCQl0c1syXSAgPSB0c1swXSBeIHRzWzFdOworCisJCS8qIGdldCBpbnB1dCBibG9jayBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLworCQlza2Vpbl9nZXQ2NF9sc2JfZmlyc3QodywgYmxrX3B0ciwgV0NOVCk7CisJCWRlYnVnX3NhdmVfdHdlYWsoY3R4KTsKKwkJc2tlaW5fc2hvd19ibG9jayhCTEtfQklUUywgJmN0eC0+aCwgY3R4LT54LCBibGtfcHRyLCB3LCBrcywgdHMpOworCisJCVgwMCAgICA9ICB3WzBdICsgIGtzWzBdOyAvKiBkbyB0aGUgZmlyc3QgZnVsbCBrZXkgaW5qZWN0aW9uICovCisJCVgwMSAgICA9ICB3WzFdICsgIGtzWzFdOworCQlYMDIgICAgPSAgd1syXSArICBrc1syXTsKKwkJWDAzICAgID0gIHdbM10gKyAga3NbM107CisJCVgwNCAgICA9ICB3WzRdICsgIGtzWzRdOworCQlYMDUgICAgPSAgd1s1XSArICBrc1s1XTsKKwkJWDA2ICAgID0gIHdbNl0gKyAga3NbNl07CisJCVgwNyAgICA9ICB3WzddICsgIGtzWzddOworCQlYMDggICAgPSAgd1s4XSArICBrc1s4XTsKKwkJWDA5ICAgID0gIHdbOV0gKyAga3NbOV07CisJCVgxMCAgICA9IHdbMTBdICsga3NbMTBdOworCQlYMTEgICAgPSB3WzExXSArIGtzWzExXTsKKwkJWDEyICAgID0gd1sxMl0gKyBrc1sxMl07CisJCVgxMyAgICA9IHdbMTNdICsga3NbMTNdICsgdHNbMF07CisJCVgxNCAgICA9IHdbMTRdICsga3NbMTRdICsgdHNbMV07CisJCVgxNSAgICA9IHdbMTVdICsga3NbMTVdOworCisJCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIFNLRUlOX1JORF9LRVlfSU5JVElBTCwKKwkJCQkgWF9wdHIpOworCisjZGVmaW5lIFJPVU5EMTAyNChwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIHA4LCBwOSwgcEEsIHBCLCBwQywgcEQsIHBFLCBcCisJCQlwRiwgUk9ULCByX251bSkgXAorZG8geyBcCisJWCMjcDAgKz0gWCMjcDE7IFgjI3AxID0gcm90bF82NChYIyNwMSwgUk9UIyNfMCk7IFgjI3AxIF49IFgjI3AwOyAgIFwKKwlYIyNwMiArPSBYIyNwMzsgWCMjcDMgPSByb3RsXzY0KFgjI3AzLCBST1QjI18xKTsgWCMjcDMgXj0gWCMjcDI7ICAgXAorCVgjI3A0ICs9IFgjI3A1OyBYIyNwNSA9IHJvdGxfNjQoWCMjcDUsIFJPVCMjXzIpOyBYIyNwNSBePSBYIyNwNDsgICBcCisJWCMjcDYgKz0gWCMjcDc7IFgjI3A3ID0gcm90bF82NChYIyNwNywgUk9UIyNfMyk7IFgjI3A3IF49IFgjI3A2OyAgIFwKKwlYIyNwOCArPSBYIyNwOTsgWCMjcDkgPSByb3RsXzY0KFgjI3A5LCBST1QjI180KTsgWCMjcDkgXj0gWCMjcDg7ICAgXAorCVgjI3BBICs9IFgjI3BCOyBYIyNwQiA9IHJvdGxfNjQoWCMjcEIsIFJPVCMjXzUpOyBYIyNwQiBePSBYIyNwQTsgICBcCisJWCMjcEMgKz0gWCMjcEQ7IFgjI3BEID0gcm90bF82NChYIyNwRCwgUk9UIyNfNik7IFgjI3BEIF49IFgjI3BDOyAgIFwKKwlYIyNwRSArPSBYIyNwRjsgWCMjcEYgPSByb3RsXzY0KFgjI3BGLCBST1QjI183KTsgWCMjcEYgXj0gWCMjcEU7ICAgXAorfSB3aGlsZSAoMCkKKworI2lmIFNLRUlOX1VOUk9MTF8xMDI0ID09IDAKKyNkZWZpbmUgUjEwMjQocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBwOCwgcDksIHBBLCBwQiwgcEMsIHBELCBwRSwgcEYsIFwKKwkJUk9ULCBybikgXAorZG8geyBcCisJUk9VTkQxMDI0KHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2LCBwNywgcDgsIHA5LCBwQSwgcEIsIHBDLCBwRCwgcEUsIFwKKwkJCXBGLCBST1QsIHJuKTsgXAorCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFMsICZjdHgtPmgsIHJuLCBYX3B0cik7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSTEwMjQoUikgXAorZG8geyBcCisJLyogaW5qZWN0IHRoZSBrZXkgc2NoZWR1bGUgdmFsdWUgKi8gXAorCVgwMCAgICs9IGtzWygoUikgKyAgMSkgJSAxN107IFwKKwlYMDEgICArPSBrc1soKFIpICsgIDIpICUgMTddOyBcCisJWDAyICAgKz0ga3NbKChSKSArICAzKSAlIDE3XTsgXAorCVgwMyAgICs9IGtzWygoUikgKyAgNCkgJSAxN107IFwKKwlYMDQgICArPSBrc1soKFIpICsgIDUpICUgMTddOyBcCisJWDA1ICAgKz0ga3NbKChSKSArICA2KSAlIDE3XTsgXAorCVgwNiAgICs9IGtzWygoUikgKyAgNykgJSAxN107IFwKKwlYMDcgICArPSBrc1soKFIpICsgIDgpICUgMTddOyBcCisJWDA4ICAgKz0ga3NbKChSKSArICA5KSAlIDE3XTsgXAorCVgwOSAgICs9IGtzWygoUikgKyAxMCkgJSAxN107IFwKKwlYMTAgICArPSBrc1soKFIpICsgMTEpICUgMTddOyBcCisJWDExICAgKz0ga3NbKChSKSArIDEyKSAlIDE3XTsgXAorCVgxMiAgICs9IGtzWygoUikgKyAxMykgJSAxN107IFwKKwlYMTMgICArPSBrc1soKFIpICsgMTQpICUgMTddICsgdHNbKChSKSArIDEpICUgM107IFwKKwlYMTQgICArPSBrc1soKFIpICsgMTUpICUgMTddICsgdHNbKChSKSArIDIpICUgM107IFwKKwlYMTUgICArPSBrc1soKFIpICsgMTYpICUgMTddICsgICAgIChSKSArIDE7ICAgICAgIFwKKwlza2Vpbl9zaG93X3JfcHRyKEJMS19CSVRTLCAmY3R4LT5oLCBTS0VJTl9STkRfS0VZX0lOSkVDVCwgWF9wdHIpOyBcCit9IHdoaWxlICgwKQorI2Vsc2UgLyogbG9vcGluZyB2ZXJzaW9uICovCisjZGVmaW5lIFIxMDI0KHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2LCBwNywgcDgsIHA5LCBwQSwgcEIsIHBDLCBwRCwgcEUsIHBGLCBcCisJCVJPVCwgcm4pIFwKK2RvIHsgXAorCVJPVU5EMTAyNChwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIHA4LCBwOSwgcEEsIHBCLCBwQywgcEQsIHBFLCBcCisJCQlwRiwgUk9ULCBybik7IFwKKwlza2Vpbl9zaG93X3JfcHRyKEJMS19CSVRTLCAmY3R4LT5oLCA0ICogKHIgLSAxKSArIHJuLCBYX3B0cik7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSTEwMjQoUikgXAorZG8geyBcCisJLyogaW5qZWN0IHRoZSBrZXkgc2NoZWR1bGUgdmFsdWUgKi8gXAorCVgwMCAgICs9IGtzW3IgKyAoUikgKyAgMF07IFwKKwlYMDEgICArPSBrc1tyICsgKFIpICsgIDFdOyBcCisJWDAyICAgKz0ga3NbciArIChSKSArICAyXTsgXAorCVgwMyAgICs9IGtzW3IgKyAoUikgKyAgM107IFwKKwlYMDQgICArPSBrc1tyICsgKFIpICsgIDRdOyBcCisJWDA1ICAgKz0ga3NbciArIChSKSArICA1XTsgXAorCVgwNiAgICs9IGtzW3IgKyAoUikgKyAgNl07IFwKKwlYMDcgICArPSBrc1tyICsgKFIpICsgIDddOyBcCisJWDA4ICAgKz0ga3NbciArIChSKSArICA4XTsgXAorCVgwOSAgICs9IGtzW3IgKyAoUikgKyAgOV07IFwKKwlYMTAgICArPSBrc1tyICsgKFIpICsgMTBdOyBcCisJWDExICAgKz0ga3NbciArIChSKSArIDExXTsgXAorCVgxMiAgICs9IGtzW3IgKyAoUikgKyAxMl07IFwKKwlYMTMgICArPSBrc1tyICsgKFIpICsgMTNdICsgdHNbciArIChSKSArIDBdOyBcCisJWDE0ICAgKz0ga3NbciArIChSKSArIDE0XSArIHRzW3IgKyAoUikgKyAxXTsgXAorCVgxNSAgICs9IGtzW3IgKyAoUikgKyAxNV0gKyAgICAgICAgIHIgKyAoUik7IFwKKwkvKiByb3RhdGUga2V5IHNjaGVkdWxlICovIFwKKwlrc1tyICArICAgICAgICAgKFIpICsgMTZdID0ga3NbciArIChSKSAtIDFdOyBcCisJdHNbciAgKyAgICAgICAgIChSKSArICAyXSA9IHRzW3IgKyAoUikgLSAxXTsgXAorCXNrZWluX3Nob3dfcl9wdHIoQkxLX0JJVFNpLCAmY3R4LT5oLCBTS0VJTl9STkRfS0VZX0lOSkVDVCwgWF9wdHIpOyBcCit9IHdoaWxlICgwKQorCisJCWZvciAociA9IDE7IHIgPD0gMiAqIFJDTlQ7IHIgKz0gMiAqIFNLRUlOX1VOUk9MTF8xMDI0KQorI2VuZGlmCisJCXsKKyNkZWZpbmUgUjEwMjRfOF9ST1VORFMoUikgXAorZG8geyBcCisJUjEwMjQoMDAsIDAxLCAwMiwgMDMsIDA0LCAwNSwgMDYsIDA3LCAwOCwgMDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIFwKKwkJUjEwMjRfMCwgOCooUikgKyAxKTsgXAorCVIxMDI0KDAwLCAwOSwgMDIsIDEzLCAwNiwgMTEsIDA0LCAxNSwgMTAsIDA3LCAxMiwgMDMsIDE0LCAwNSwgMDgsIDAxLCBcCisJCVIxMDI0XzEsIDgqKFIpICsgMik7IFwKKwlSMTAyNCgwMCwgMDcsIDAyLCAwNSwgMDQsIDAzLCAwNiwgMDEsIDEyLCAxNSwgMTQsIDEzLCAwOCwgMTEsIDEwLCAwOSwgXAorCQlSMTAyNF8yLCA4KihSKSArIDMpOyBcCisJUjEwMjQoMDAsIDE1LCAwMiwgMTEsIDA2LCAxMywgMDQsIDA5LCAxNCwgMDEsIDA4LCAwNSwgMTAsIDAzLCAxMiwgMDcsIFwKKwkJUjEwMjRfMywgOCooUikgKyA0KTsgXAorCUkxMDI0KDIqKFIpKTsgXAorCVIxMDI0KDAwLCAwMSwgMDIsIDAzLCAwNCwgMDUsIDA2LCAwNywgMDgsIDA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCBcCisJCVIxMDI0XzQsIDgqKFIpICsgNSk7IFwKKwlSMTAyNCgwMCwgMDksIDAyLCAxMywgMDYsIDExLCAwNCwgMTUsIDEwLCAwNywgMTIsIDAzLCAxNCwgMDUsIDA4LCAwMSwgXAorCQlSMTAyNF81LCA4KihSKSArIDYpOyBcCisJUjEwMjQoMDAsIDA3LCAwMiwgMDUsIDA0LCAwMywgMDYsIDAxLCAxMiwgMTUsIDE0LCAxMywgMDgsIDExLCAxMCwgMDksIFwKKwkJUjEwMjRfNiwgOCooUikgKyA3KTsgXAorCVIxMDI0KDAwLCAxNSwgMDIsIDExLCAwNiwgMTMsIDA0LCAwOSwgMTQsIDAxLCAwOCwgMDUsIDEwLCAwMywgMTIsIDA3LCBcCisJCVIxMDI0XzcsIDgqKFIpICsgOCk7IFwKKwlJMTAyNCgyKihSKSsxKTsgXAorfSB3aGlsZSAoMCkKKworCQkJUjEwMjRfOF9ST1VORFMoMCk7CisKKyNkZWZpbmUgUjEwMjRfVU5ST0xMX1IoTk4pIFwKKwkJKChTS0VJTl9VTlJPTExfMTAyNCA9PSAwICYmIFwKKwkJICBTS0VJTl8xMDI0X1JPVU5EU19UT1RBTC84ID4gKE5OKSkgfHwgXAorCQkgKFNLRUlOX1VOUk9MTF8xMDI0ID4gKE5OKSkpCisKKwkjaWYgICBSMTAyNF9VTlJPTExfUigxKQorCQkJUjEwMjRfOF9ST1VORFMoMSk7CisJI2VuZGlmCisJI2lmICAgUjEwMjRfVU5ST0xMX1IoMikKKwkJCVIxMDI0XzhfUk9VTkRTKDIpOworCSNlbmRpZgorCSNpZiAgIFIxMDI0X1VOUk9MTF9SKDMpCisJCQlSMTAyNF84X1JPVU5EUygzKTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUig0KQorCQkJUjEwMjRfOF9ST1VORFMoNCk7CisJI2VuZGlmCisJI2lmICAgUjEwMjRfVU5ST0xMX1IoNSkKKwkJCVIxMDI0XzhfUk9VTkRTKDUpOworCSNlbmRpZgorCSNpZiAgIFIxMDI0X1VOUk9MTF9SKDYpCisJCQlSMTAyNF84X1JPVU5EUyg2KTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUig3KQorCQkJUjEwMjRfOF9ST1VORFMoNyk7CisJI2VuZGlmCisJI2lmICAgUjEwMjRfVU5ST0xMX1IoOCkKKwkJCVIxMDI0XzhfUk9VTkRTKDgpOworCSNlbmRpZgorCSNpZiAgIFIxMDI0X1VOUk9MTF9SKDkpCisJCQlSMTAyNF84X1JPVU5EUyg5KTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUigxMCkKKwkJCVIxMDI0XzhfUk9VTkRTKDEwKTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUigxMSkKKwkJCVIxMDI0XzhfUk9VTkRTKDExKTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUigxMikKKwkJCVIxMDI0XzhfUk9VTkRTKDEyKTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUigxMykKKwkJCVIxMDI0XzhfUk9VTkRTKDEzKTsKKwkjZW5kaWYKKwkjaWYgICBSMTAyNF9VTlJPTExfUigxNCkKKwkJCVIxMDI0XzhfUk9VTkRTKDE0KTsKKwkjZW5kaWYKKyNpZiAgKFNLRUlOX1VOUk9MTF8xMDI0ID4gMTQpCisjZXJyb3IgICJuZWVkIG1vcmUgdW5yb2xsaW5nIGluIFNrZWluXzEwMjRfUHJvY2Vzc19CbG9jayIKKyAgI2VuZGlmCisJCX0KKwkJLyogZG8gdGhlIGZpbmFsICJmZWVkZm9yd2FyZCIgeG9yLCB1cGRhdGUgY29udGV4dCBjaGFpbmluZyAqLworCisJCWN0eC0+eFswXSA9IFgwMCBeIHdbMF07CisJCWN0eC0+eFsxXSA9IFgwMSBeIHdbMV07CisJCWN0eC0+eFsyXSA9IFgwMiBeIHdbMl07CisJCWN0eC0+eFszXSA9IFgwMyBeIHdbM107CisJCWN0eC0+eFs0XSA9IFgwNCBeIHdbNF07CisJCWN0eC0+eFs1XSA9IFgwNSBeIHdbNV07CisJCWN0eC0+eFs2XSA9IFgwNiBeIHdbNl07CisJCWN0eC0+eFs3XSA9IFgwNyBeIHdbN107CisJCWN0eC0+eFs4XSA9IFgwOCBeIHdbOF07CisJCWN0eC0+eFs5XSA9IFgwOSBeIHdbOV07CisJCWN0eC0+eFsxMF0gPSBYMTAgXiB3WzEwXTsKKwkJY3R4LT54WzExXSA9IFgxMSBeIHdbMTFdOworCQljdHgtPnhbMTJdID0gWDEyIF4gd1sxMl07CisJCWN0eC0+eFsxM10gPSBYMTMgXiB3WzEzXTsKKwkJY3R4LT54WzE0XSA9IFgxNCBeIHdbMTRdOworCQljdHgtPnhbMTVdID0gWDE1IF4gd1sxNV07CisKKwkJc2tlaW5fc2hvd19yb3VuZChCTEtfQklUUywgJmN0eC0+aCwgU0tFSU5fUk5EX0ZFRURfRldELCBjdHgtPngpOworCisJCXRzWzFdICY9IH5TS0VJTl9UMV9GTEFHX0ZJUlNUOworCQlibGtfcHRyICs9IFNLRUlOXzEwMjRfQkxPQ0tfQllURVM7CisJfSB3aGlsZSAoLS1ibGtfY250KTsKKwljdHgtPmgudHdlYWtbMF0gPSB0c1swXTsKKwljdHgtPmgudHdlYWtbMV0gPSB0c1sxXTsKK30KKworI2lmIGRlZmluZWQoU0tFSU5fQ09ERV9TSVpFKSB8fCBkZWZpbmVkKFNLRUlOX1BFUkYpCitzaXplX3Qgc2tlaW5fMTAyNF9wcm9jZXNzX2Jsb2NrX2NvZGVfc2l6ZSh2b2lkKQoreworCXJldHVybiAoKHU4ICopIHNrZWluXzEwMjRfcHJvY2Vzc19ibG9ja19jb2RlX3NpemUpIC0KKwkJKCh1OCAqKSBza2Vpbl8xMDI0X3Byb2Nlc3NfYmxvY2spOworfQordW5zaWduZWQgaW50IHNrZWluXzEwMjRfdW5yb2xsX2NudCh2b2lkKQoreworCXJldHVybiBTS0VJTl9VTlJPTExfMTAyNDsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5fYmxvY2suaCBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbl9ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkN2JkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5fYmxvY2suaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCisqKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2tlaW4gaGFzaCBmdW5jdGlvbi4KKyoqCisqKiBTb3VyY2UgY29kZSBhdXRob3I6IERvdWcgV2hpdGluZywgMjAwOC4KKyoqCisqKiBUaGlzIGFsZ29yaXRobSBhbmQgc291cmNlIGNvZGUgaXMgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4uCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfU0tFSU5fQkxPQ0tfSF8KKyNkZWZpbmUgX1NLRUlOX0JMT0NLX0hfCisKKyNpbmNsdWRlICJza2Vpbi5oIiAvKiBnZXQgdGhlIFNrZWluIEFQSSBkZWZpbml0aW9ucyAgICovCisKK3ZvaWQgc2tlaW5fMjU2X3Byb2Nlc3NfYmxvY2soc3RydWN0IHNrZWluXzI1Nl9jdHggKmN0eCwgY29uc3QgdTggKmJsa19wdHIsCisJCQkgICAgIHNpemVfdCBibGtfY250LCBzaXplX3QgYnl0ZV9jbnRfYWRkKTsKK3ZvaWQgc2tlaW5fNTEyX3Byb2Nlc3NfYmxvY2soc3RydWN0IHNrZWluXzUxMl9jdHggKmN0eCwgY29uc3QgdTggKmJsa19wdHIsCisJCQkgICAgIHNpemVfdCBibGtfY250LCBzaXplX3QgYnl0ZV9jbnRfYWRkKTsKK3ZvaWQgc2tlaW5fMTAyNF9wcm9jZXNzX2Jsb2NrKHN0cnVjdCBza2Vpbl8xMDI0X2N0eCAqY3R4LCBjb25zdCB1OCAqYmxrX3B0ciwKKwkJCSAgICAgIHNpemVfdCBibGtfY250LCBzaXplX3QgYnl0ZV9jbnRfYWRkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5faXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi9za2Vpbl9pdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzcwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vc2tlaW5faXYuaApAQCAtMCwwICsxLDE4NiBAQAorI2lmbmRlZiBfU0tFSU5fSVZfSF8KKyNkZWZpbmUgX1NLRUlOX0lWX0hfCisKKyNpbmNsdWRlICJza2Vpbi5oIiAgICAvKiBnZXQgU2tlaW4gbWFjcm9zIGFuZCB0eXBlcyAqLworCisvKgorKioqKioqKioqKioqKioqKiogUHJlLWNvbXB1dGVkIFNrZWluIElWcyAqKioqKioqKioqKioqKioqKioqCisqKgorKiogTk9URTogdGhlc2UgdmFsdWVzIGFyZSBub3QgIm1hZ2ljIiBjb25zdGFudHMsIGJ1dAorKiogYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUgVGhyZWVmaXNoIGJsb2NrIGZ1bmN0aW9uLgorKiogVGhleSBhcmUgcHJlLWNvbXB1dGVkIGhlcmUgb25seSBmb3Igc3BlZWQ7IGkuZS4sIHRvCisqKiBhdm9pZCB0aGUgbmVlZCBmb3IgYSBUaHJlZWZpc2ggY2FsbCBkdXJpbmcgSW5pdCgpLgorKioKKyoqIFRoZSBJViBmb3IgYW55IGZpeGVkIGhhc2ggbGVuZ3RoIG1heSBiZSBwcmUtY29tcHV0ZWQuCisqKiBPbmx5IHRoZSBtb3N0IGNvbW1vbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGhlcmUuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKi8KKworI2RlZmluZSBNS182NCBTS0VJTl9NS182NAorCisvKiBibGtTaXplID0gIDI1NiBiaXRzLiBoYXNoU2l6ZSA9ICAxMjggYml0cyAqLworY29uc3QgdTY0IFNLRUlOXzI1Nl9JVl8xMjhbXSA9IHsKKwlNS182NCgweEUxMTExOTA2LCAweDk2NEQ3MjYwKSwKKwlNS182NCgweDg4M0RBQUE3LCAweDdDOEQ4MTFDKSwKKwlNS182NCgweDEwMDgwREY0LCAweDkxOTYwRjdBKSwKKwlNS182NCgweENDRjdEREU1LCAweEI0NUJDMUMyKQorfTsKKworLyogYmxrU2l6ZSA9ICAyNTYgYml0cy4gaGFzaFNpemUgPSAgMTYwIGJpdHMgKi8KK2NvbnN0IHU2NCBTS0VJTl8yNTZfSVZfMTYwW10gPSB7CisJTUtfNjQoMHgxNDIwMjMxNCwgMHg3MjgyNUU5OCksCisJTUtfNjQoMHgyQUM0RTlBMiwgMHg1QTc3RTU5MCksCisJTUtfNjQoMHhENDdBNTg1NiwgMHg4ODM4RDYzRSksCisJTUtfNjQoMHgyREQyRTQ5NiwgMHg4NTg2QUI3RCkKK307CisKKy8qIGJsa1NpemUgPSAgMjU2IGJpdHMuIGhhc2hTaXplID0gIDIyNCBiaXRzICovCitjb25zdCB1NjQgU0tFSU5fMjU2X0lWXzIyNFtdID0geworCU1LXzY0KDB4QzYwOThBOEMsIDB4OUFFNUVBMEIpLAorCU1LXzY0KDB4ODc2RDU2ODYsIDB4MDhDNTE5MUMpLAorCU1LXzY0KDB4OTlDQjg4RDcsIDB4RDdGNTM4ODQpLAorCU1LXzY0KDB4Mzg0QkREQjEsIDB4QUVEREI1REUpCit9OworCisvKiBibGtTaXplID0gIDI1NiBiaXRzLiBoYXNoU2l6ZSA9ICAyNTYgYml0cyAqLworY29uc3QgdTY0IFNLRUlOXzI1Nl9JVl8yNTZbXSA9IHsKKwlNS182NCgweEZDOURBODYwLCAweEQwNDhCNDQ5KSwKKwlNS182NCgweDJGQ0E2NjQ3LCAweDlGQTdEODMzKSwKKwlNS182NCgweEIzM0JDMzg5LCAweDY2NTY4NDBGKSwKKwlNS182NCgweDZBNTRFOTIwLCAweEZERThEQTY5KQorfTsKKworLyogYmxrU2l6ZSA9ICA1MTIgYml0cy4gaGFzaFNpemUgPSAgMTI4IGJpdHMgKi8KK2NvbnN0IHU2NCBTS0VJTl81MTJfSVZfMTI4W10gPSB7CisJTUtfNjQoMHhBOEJDN0JGMywgMHg2RkJGOUY1MiksCisJTUtfNjQoMHgxRTk4NzJDRSwgMHhCRDFBRjBBQSksCisJTUtfNjQoMHgzMDlCMTc5MCwgMHhCMzIxOTBEMyksCisJTUtfNjQoMHhCQ0ZCQjg1NCwgMHgzRjk0ODA1QyksCisJTUtfNjQoMHgwREE2MUJDRCwgMHg2RTMxQjExQiksCisJTUtfNjQoMHgxQTE4RUJFQSwgMHhENDZBMzJFMyksCisJTUtfNjQoMHhBMkNDNUIxOCwgMHhDRTg0QUE4MiksCisJTUtfNjQoMHg2OTgyQUIyOCwgMHg5RDQ2OTgyRCkKK307CisKKy8qIGJsa1NpemUgPSAgNTEyIGJpdHMuIGhhc2hTaXplID0gIDE2MCBiaXRzICovCitjb25zdCB1NjQgU0tFSU5fNTEyX0lWXzE2MFtdID0geworCU1LXzY0KDB4MjhCODFBMkEsIDB4RTAxM0JEOTEpLAorCU1LXzY0KDB4QzJGMTE2NjgsIDB4QjVCREY3OEYpLAorCU1LXzY0KDB4MTc2MEQ4RjMsIDB4RjZBNTZGMTIpLAorCU1LXzY0KDB4NEZCNzQ3NTgsIDB4ODIzOTkwNEYpLAorCU1LXzY0KDB4MjFFREUwN0YsIDB4N0VBRjUwNTYpLAorCU1LXzY0KDB4RDkwODkyMkUsIDB4NjNFRDcwQjgpLAorCU1LXzY0KDB4QjhFQzc2RkYsIDB4RUNDQjUyRkEpLAorCU1LXzY0KDB4MDFBNDdCQjgsIDB4QTNGMjdBNkUpCit9OworCisvKiBibGtTaXplID0gIDUxMiBiaXRzLiBoYXNoU2l6ZSA9ICAyMjQgYml0cyAqLworY29uc3QgdTY0IFNLRUlOXzUxMl9JVl8yMjRbXSA9IHsKKwlNS182NCgweENDRDA2MTYyLCAweDQ4Njc3MjI0KSwKKwlNS182NCgweENCQTY1Q0YzLCAweEE5MjMzOUVGKSwKKwlNS182NCgweDhDQ0Q2OUQ2LCAweDUyRkY0QjY0KSwKKwlNS182NCgweDM5OEFFRDdCLCAweDNBQjg5MEI0KSwKKwlNS182NCgweDBGNTlEMUIxLCAweDQ1N0QyQkQwKSwKKwlNS182NCgweDY3NzZGRTY1LCAweDc1RDRFQjNEKSwKKwlNS182NCgweDk5RkJDNzBFLCAweDk5NzQxM0U5KSwKKwlNS182NCgweDlFMkNGQ0NGLCAweEUxQzQxRUY3KQorfTsKKworLyogYmxrU2l6ZSA9ICA1MTIgYml0cy4gaGFzaFNpemUgPSAgMjU2IGJpdHMgKi8KK2NvbnN0IHU2NCBTS0VJTl81MTJfSVZfMjU2W10gPSB7CisJTUtfNjQoMHhDQ0QwNDRBMSwgMHgyRkRCM0UxMyksCisJTUtfNjQoMHhFODM1OTAzMCwgMHgxQTc5QTlFQiksCisJTUtfNjQoMHg1NUFFQTA2MSwgMHg0RjgxNkU2RiksCisJTUtfNjQoMHgyQTI3NjdBNCwgMHhBRTlCOTREQiksCisJTUtfNjQoMHhFQzA2MDI1RSwgMHg3NERENzY4MyksCisJTUtfNjQoMHhFN0E0MzZDRCwgMHhDNDc0NjI1MSksCisJTUtfNjQoMHhDMzZGQkFGOSwgMHgzOTNBRDE4NSksCisJTUtfNjQoMHgzRUVEQkExOCwgMHgzM0VERkMxMykKK307CisKKy8qIGJsa1NpemUgPSAgNTEyIGJpdHMuIGhhc2hTaXplID0gIDM4NCBiaXRzICovCitjb25zdCB1NjQgU0tFSU5fNTEyX0lWXzM4NFtdID0geworCU1LXzY0KDB4QTNGNkM2QkYsIDB4M0E3NUVGNUYpLAorCU1LXzY0KDB4QjBGRUY5Q0MsIDB4RkQ4NEZBQTQpLAorCU1LXzY0KDB4OUQ3N0RENjYsIDB4M0Q3NzBDRkUpLAorCU1LXzY0KDB4RDc5OENCRjMsIDB4QjQ2OEZEREEpLAorCU1LXzY0KDB4MUJDNEE2NjYsIDB4OEEwRTQ0NjUpLAorCU1LXzY0KDB4N0VEN0Q0MzQsIDB4RTU4MDc0MDcpLAorCU1LXzY0KDB4NTQ4RkMxQUMsIDB4RDRFQzQ0RDYpLAorCU1LXzY0KDB4MjY2RTE3NTQsIDB4NkFBMThGRjgpCit9OworCisvKiBibGtTaXplID0gIDUxMiBiaXRzLiBoYXNoU2l6ZSA9ICA1MTIgYml0cyAqLworY29uc3QgdTY0IFNLRUlOXzUxMl9JVl81MTJbXSA9IHsKKwlNS182NCgweDQ5MDNBREZGLCAweDc0OUM1MUNFKSwKKwlNS182NCgweDBEOTVERTM5LCAweDk3NDZERjAzKSwKKwlNS182NCgweDhGRDE5MzQxLCAweDI3Qzc5QkNFKSwKKwlNS182NCgweDlBMjU1NjI5LCAweEZGMzUyQ0IxKSwKKwlNS182NCgweDVEQjYyNTk5LCAweERGNkNBN0IwKSwKKwlNS182NCgweEVBQkUzOTRDLCAweEE5RDVDM0Y0KSwKKwlNS182NCgweDk5MTExMkM3LCAweDFBNzVCNTIzKSwKKwlNS182NCgweEFFMThBNDBCLCAweDY2MEZDQzMzKQorfTsKKworLyogYmxrU2l6ZSA9IDEwMjQgYml0cy4gaGFzaFNpemUgPSAgMzg0IGJpdHMgKi8KK2NvbnN0IHU2NCBTS0VJTl8xMDI0X0lWXzM4NFtdID0geworCU1LXzY0KDB4NTEwMkI2QjgsIDB4QzE4OTRBMzUpLAorCU1LXzY0KDB4RkVFQkM5RTMsIDB4RkU4QUYxMUEpLAorCU1LXzY0KDB4MEM4MDdGMDYsIDB4RTMyQkVENzEpLAorCU1LXzY0KDB4NjBDMTNBNTIsIDB4QjQxQTkxRjYpLAorCU1LXzY0KDB4OTcxNkQzNUQsIDB4RDQ5MTdDMzgpLAorCU1LXzY0KDB4RTc4MERGMTIsIDB4NkZEMzFEM0EpLAorCU1LXzY0KDB4Nzk3ODQ2QjYsIDB4Qzg5ODMwM0EpLAorCU1LXzY0KDB4QjE3MkMyQTgsIDB4QjM1NzJBM0IpLAorCU1LXzY0KDB4QzlCQzgyMDMsIDB4QTYxMDRBNkMpLAorCU1LXzY0KDB4NjU5MDkzMzgsIDB4RDc1NjI0RjQpLAorCU1LXzY0KDB4OTRCQ0M1NjgsIDB4NEIzRjgxQTApLAorCU1LXzY0KDB4M0VCQkY1MUUsIDB4MTBFQ0ZENDYpLAorCU1LXzY0KDB4MkRGNTBGMEIsIDB4RUVCMDg1NDIpLAorCU1LXzY0KDB4M0I1QTY1MzAsIDB4MERCQzY1MTYpLAorCU1LXzY0KDB4NDg0QjlDRDIsIDB4MTY3QkJDRTEpLAorCU1LXzY0KDB4MkQxMzY5NDcsIDB4RDRDQkFGRUEpCit9OworCisvKiBibGtTaXplID0gMTAyNCBiaXRzLiBoYXNoU2l6ZSA9ICA1MTIgYml0cyAqLworY29uc3QgdTY0IFNLRUlOXzEwMjRfSVZfNTEyW10gPSB7CisJTUtfNjQoMHhDQUVDMEU1RCwgMHg3QzFCMUIxOCksCisJTUtfNjQoMHhBMDFCMEUwNCwgMHg1RjAzRTgwMiksCisJTUtfNjQoMHgzMzg0MDQ1MSwgMHhFRDkxMjg4NSksCisJTUtfNjQoMHgzNzRBRkIwNCwgMHhFQUVDMkUxQyksCisJTUtfNjQoMHhERjI1QTBFMiwgMHg4MTM1ODFGNyksCisJTUtfNjQoMHhFNDAwNDA5MywgMHg4QjEyRjlEMiksCisJTUtfNjQoMHhBNjYyRDUzOSwgMHhDMkVEMzlCNiksCisJTUtfNjQoMHhGQThCODVDRiwgMHg0NUQ4Qzc1QSksCisJTUtfNjQoMHg4MzE2RUQ4RSwgMHgyOUVERTc5NiksCisJTUtfNjQoMHgwNTMyODlDMCwgMHgyRTlGOTFCOCksCisJTUtfNjQoMHhDM0Y4RUYxRCwgMHg2RDUxOEI3MyksCisJTUtfNjQoMHhCRENFQzNDNCwgMHhENUVGMzMyRSksCisJTUtfNjQoMHg1NDlBN0U1MiwgMHgyMjk3NDQ4NyksCisJTUtfNjQoMHg2NzA3MDg3MiwgMHg1Qjc0OTgxNiksCisJTUtfNjQoMHhCOUNEMjhGQiwgMHhGMDU4MUJEMSksCisJTUtfNjQoMHgwRTI5NDBCOCwgMHgxNTgwNDk3NCkKK307CisKKy8qIGJsa1NpemUgPSAxMDI0IGJpdHMuIGhhc2hTaXplID0gMTAyNCBiaXRzICovCitjb25zdCB1NjQgU0tFSU5fMTAyNF9JVl8xMDI0W10gPSB7CisJTUtfNjQoMHhENTkzREEwNywgMHg0MUU3MjM1NSksCisJTUtfNjQoMHgxNUI1RTUxMSwgMHhBQzczRTAwQyksCisJTUtfNjQoMHg1MTgwRTVBRSwgMHhCQUYyQzRGMCksCisJTUtfNjQoMHgwM0JENDFEMywgMHhGQ0JDQUZBRiksCisJTUtfNjQoMHgxQ0FFQzZGRCwgMHgxOTgzQTg5OCksCisJTUtfNjQoMHg2RTUxMEI4QiwgMHhDREQwNTg5RiksCisJTUtfNjQoMHg3N0UyQkRGRCwgMHhDNjM5NEFEQSksCisJTUtfNjQoMHhDMTFFMURCNSwgMHgyNERDQjBBMyksCisJTUtfNjQoMHhENkQxNEFGOSwgMHhDNjMyOUFCNSksCisJTUtfNjQoMHg2QTlCMEJGQywgMHg2RUI2N0UwRCksCisJTUtfNjQoMHg5MjQzQzYwRCwgMHhDQ0ZGMTMzMiksCisJTUtfNjQoMHgxQTFGMURERSwgMHg3NDNGMDJENCksCisJTUtfNjQoMHgwOTk2NzUzQywgMHgxMEVEMEJCOCksCisJTUtfNjQoMHg2NTcyREQyMiwgMHhGMkI0OTY5QSksCisJTUtfNjQoMHg2MUZEMzA2MiwgMHhEMDBBNTc5QSksCisJTUtfNjQoMHgxREUwNTM2RSwgMHg4NjgyRTUzOSkKK307CisKKyNlbmRpZiAvKiBfU0tFSU5fSVZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi90aHJlZWZpc2hfYXBpLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vdGhyZWVmaXNoX2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNjQ5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vdGhyZWVmaXNoX2FwaS5jCkBAIC0wLDAgKzEsNzcgQEAKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlICJ0aHJlZWZpc2hfYXBpLmgiCisKK3ZvaWQgdGhyZWVmaXNoX3NldF9rZXkoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsCisJCSAgICAgICBlbnVtIHRocmVlZmlzaF9zaXplIHN0YXRlX3NpemUsCisJCSAgICAgICB1NjQgKmtleV9kYXRhLCB1NjQgKnR3ZWFrKQoreworCWludCBrZXlfd29yZHMgPSBzdGF0ZV9zaXplIC8gNjQ7CisJaW50IGk7CisJdTY0IHBhcml0eSA9IEtFWV9TQ0hFRFVMRV9DT05TVDsKKworCWtleV9jdHgtPnR3ZWFrWzBdID0gdHdlYWtbMF07CisJa2V5X2N0eC0+dHdlYWtbMV0gPSB0d2Vha1sxXTsKKwlrZXlfY3R4LT50d2Vha1syXSA9IHR3ZWFrWzBdIF4gdHdlYWtbMV07CisKKwlmb3IgKGkgPSAwOyBpIDwga2V5X3dvcmRzOyBpKyspIHsKKwkJa2V5X2N0eC0+a2V5W2ldID0ga2V5X2RhdGFbaV07CisJCXBhcml0eSBePSBrZXlfZGF0YVtpXTsKKwl9CisJa2V5X2N0eC0+a2V5W2ldID0gcGFyaXR5OworCWtleV9jdHgtPnN0YXRlX3NpemUgPSBzdGF0ZV9zaXplOworfQorCit2b2lkIHRocmVlZmlzaF9lbmNyeXB0X2Jsb2NrX2J5dGVzKHN0cnVjdCB0aHJlZWZpc2hfa2V5ICprZXlfY3R4LCB1OCAqaW4sCisJCQkJICAgdTggKm91dCkKK3sKKwl1NjQgcGxhaW5bU0tFSU5fTUFYX1NUQVRFX1dPUkRTXTsgICAgICAgIC8qIG1heCBudW1iZXIgb2Ygd29yZHMqLworCXU2NCBjaXBoZXJbU0tFSU5fTUFYX1NUQVRFX1dPUkRTXTsKKworCXNrZWluX2dldDY0X2xzYl9maXJzdChwbGFpbiwgaW4sIGtleV9jdHgtPnN0YXRlX3NpemUgLyA2NCk7CisJdGhyZWVmaXNoX2VuY3J5cHRfYmxvY2tfd29yZHMoa2V5X2N0eCwgcGxhaW4sIGNpcGhlcik7CisJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KG91dCwgY2lwaGVyLCBrZXlfY3R4LT5zdGF0ZV9zaXplIC8gOCk7Cit9CisKK3ZvaWQgdGhyZWVmaXNoX2VuY3J5cHRfYmxvY2tfd29yZHMoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW4sCisJCQkJICAgdTY0ICpvdXQpCit7CisJc3dpdGNoIChrZXlfY3R4LT5zdGF0ZV9zaXplKSB7CisJY2FzZSBUSFJFRUZJU0hfMjU2OgorCQl0aHJlZWZpc2hfZW5jcnlwdF8yNTYoa2V5X2N0eCwgaW4sIG91dCk7CisJCWJyZWFrOworCWNhc2UgVEhSRUVGSVNIXzUxMjoKKwkJdGhyZWVmaXNoX2VuY3J5cHRfNTEyKGtleV9jdHgsIGluLCBvdXQpOworCQlicmVhazsKKwljYXNlIFRIUkVFRklTSF8xMDI0OgorCQl0aHJlZWZpc2hfZW5jcnlwdF8xMDI0KGtleV9jdHgsIGluLCBvdXQpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgdGhyZWVmaXNoX2RlY3J5cHRfYmxvY2tfYnl0ZXMoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU4ICppbiwKKwkJCQkgICB1OCAqb3V0KQoreworCXU2NCBwbGFpbltTS0VJTl9NQVhfU1RBVEVfV09SRFNdOyAgICAgICAgLyogbWF4IG51bWJlciBvZiB3b3JkcyovCisJdTY0IGNpcGhlcltTS0VJTl9NQVhfU1RBVEVfV09SRFNdOworCisJc2tlaW5fZ2V0NjRfbHNiX2ZpcnN0KGNpcGhlciwgaW4sIGtleV9jdHgtPnN0YXRlX3NpemUgLyA2NCk7CisJdGhyZWVmaXNoX2RlY3J5cHRfYmxvY2tfd29yZHMoa2V5X2N0eCwgY2lwaGVyLCBwbGFpbik7CisJc2tlaW5fcHV0NjRfbHNiX2ZpcnN0KG91dCwgcGxhaW4sIGtleV9jdHgtPnN0YXRlX3NpemUgLyA4KTsKK30KKwordm9pZCB0aHJlZWZpc2hfZGVjcnlwdF9ibG9ja193b3JkcyhzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbiwKKwkJCQkgICB1NjQgKm91dCkKK3sKKwlzd2l0Y2ggKGtleV9jdHgtPnN0YXRlX3NpemUpIHsKKwljYXNlIFRIUkVFRklTSF8yNTY6CisJCXRocmVlZmlzaF9kZWNyeXB0XzI1NihrZXlfY3R4LCBpbiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBUSFJFRUZJU0hfNTEyOgorCQl0aHJlZWZpc2hfZGVjcnlwdF81MTIoa2V5X2N0eCwgaW4sIG91dCk7CisJCWJyZWFrOworCWNhc2UgVEhSRUVGSVNIXzEwMjQ6CisJCXRocmVlZmlzaF9kZWNyeXB0XzEwMjQoa2V5X2N0eCwgaW4sIG91dCk7CisJCWJyZWFrOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NrZWluL3RocmVlZmlzaF9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi90aHJlZWZpc2hfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1ZGRmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9za2Vpbi90aHJlZWZpc2hfYXBpLmgKQEAgLTAsMCArMSwxNzAgQEAKKworI2lmbmRlZiBUSFJFRUZJU0hBUElfSAorI2RlZmluZSBUSFJFRUZJU0hBUElfSAorCisvKioKKyAqIEBmaWxlIHRocmVlZmlzaF9hcGkuaAorICogQGJyaWVmIEEgVGhyZWVmaXNoIGNpcGhlciBBUEkgYW5kIGl0cyBmdW5jdGlvbnMuCisgKiBAeworICoKKyAqIFRoaXMgQVBJIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoaXMgQVBJIHNpbXBsaWZ5IHRoZSB1c2FnZQorICogb2YgdGhlIFRocmVlZmlzaCBjaXBoZXIuIFRoZSBkZXNpZ24gYW5kIHRoZSB3YXkgdG8gdXNlIHRoZSBmdW5jdGlvbnMKKyAqIGZvbGxvdyB0aGUgb3BlblNTTCBkZXNpZ24gYnV0IGF0IHRoZSBzYW1lIHRpbWUgdGFrZSBjYXJlIG9mIHNvbWUgVGhyZWVmaXNoCisgKiBzcGVjaWZpYyBiZWhhdmlvdXIgYW5kIHBvc3NpYmlsaXRpZXMuCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIFRocmVlZmlzaCBibG9ja3Mgb25seS4KKyAqIEltcGxlbWVudGF0aW9ucyBmb3IgY2lwaGVyIG1vZGVzIHN1Y2ggYXMgRUNCLCBDRkIsIG9yIENCQyBtYXkgdXNlIHRoZXNlCisgKiBmdW5jdGlvbnMuCisgKgorQGNvZGUKKwkvLyBUaHJlZWZpc2ggY2lwaGVyIGNvbnRleHQgZGF0YQorCXN0cnVjdCB0aHJlZWZpc2hfa2V5IGtleV9jdHg7CisKKwkvLyBJbml0aWFsaXplIHRoZSBjb250ZXh0CisJdGhyZWVmaXNoX3NldF9rZXkoJmtleV9jdHgsIFRIUkVFRklTSF81MTIsIGtleSwgdHdlYWspOworCisJLy8gRW5jcnlwdAorCXRocmVlZmlzaF9lbmNyeXB0X2Jsb2NrX2J5dGVzKCZrZXlfY3R4LCBpbnB1dCwgY2lwaGVyKTsKK0BlbmRjb2RlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAic2tlaW4uaCIKKworI2RlZmluZSBLRVlfU0NIRURVTEVfQ09OU1QgMHgxQkQxMUJEQUE5RkMxQTIyTAorCisvKioKKyAqIFdoaWNoIFRocmVlZmlzaCBzaXplIHRvIHVzZQorICovCitlbnVtIHRocmVlZmlzaF9zaXplIHsKKwlUSFJFRUZJU0hfMjU2ID0gMjU2LCAgICAgLyohPCBTa2VpbiB3aXRoIDI1NiBiaXQgc3RhdGUgKi8KKwlUSFJFRUZJU0hfNTEyID0gNTEyLCAgICAgLyohPCBTa2VpbiB3aXRoIDUxMiBiaXQgc3RhdGUgKi8KKwlUSFJFRUZJU0hfMTAyNCA9IDEwMjQgICAgLyohPCBTa2VpbiB3aXRoIDEwMjQgYml0IHN0YXRlICovCit9OworCisvKioKKyAqIENvbnRleHQgZm9yIFRocmVlZmlzaCBrZXkgYW5kIHR3ZWFrIHdvcmRzLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIHdhcyBzZXR1cCB3aXRoIHNvbWUga25vdy1ob3cgb2YgdGhlIGludGVybmFsCisgKiBTa2VpbiBzdHJ1Y3R1cmVzLCBpbiBwYXJ0aWN1bGFyIG9yZGVyaW5nIG9mIGhlYWRlciBhbmQgc2l6ZSBkZXBlbmRlbnQKKyAqIHZhcmlhYmxlcy4gSWYgU2tlaW4gaW1wbGVtZW50YXRpb24gY2hhbmdlcyB0aGlzLCB0aGUgYWRhcHQgdGhlc2UKKyAqIHN0cnVjdHVyZXMgYXMgd2VsbC4KKyAqLworc3RydWN0IHRocmVlZmlzaF9rZXkgeworCXU2NCBzdGF0ZV9zaXplOworCXU2NCBrZXlbU0tFSU5fTUFYX1NUQVRFX1dPUkRTKzFdOyAgIC8qIG1heCBudW1iZXIgb2Yga2V5IHdvcmRzKi8KKwl1NjQgdHdlYWtbM107Cit9OworCisvKioKKyAqIFNldCBUaHJlZWZpc2gga2V5IGFuZCB0d2VhayBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUga2V5IGFuZCB0d2VhayBkYXRhIGZvciB0aGUgVGhyZWVmaXNoIGNpcGhlciBvZgorICogdGhlIGdpdmVuIHNpemUuIFRoZSBrZXkgZGF0YSBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIChudW1iZXIgb2YgYml0cykKKyAqIGFzIHRoZSBzdGF0ZSBzaXplCisgKgorICogQHBhcmFtIGtleV9jdHgKKyAqICAgICBQb2ludGVyIHRvIGEgVGhyZWVmaXNoIGtleSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gc2l6ZQorICogICAgIFdoaWNoIFNrZWluIHNpemUgdG8gdXNlLgorICogQHBhcmFtIGtleV9kYXRhCisgKiAgICAgUG9pbnRlciB0byB0aGUga2V5IHdvcmRzICh3b3JkIGhhcyA2NCBiaXRzKS4KKyAqIEBwYXJhbSB0d2VhaworICogICAgIFBvaW50ZXIgdG8gdGhlIHR3byB0d2VhayB3b3JkcyAod29yZCBoYXMgNjQgYml0cykuCisgKi8KK3ZvaWQgdGhyZWVmaXNoX3NldF9rZXkoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsCisJCSAgICAgICBlbnVtIHRocmVlZmlzaF9zaXplIHN0YXRlX3NpemUsCisJCSAgICAgICB1NjQgKmtleV9kYXRhLCB1NjQgKnR3ZWFrKTsKKworLyoqCisgKiBFbmNyeXB0IFRocmVlZmlzaCBibG9jayAoYnl0ZXMpLgorICoKKyAqIFRoZSBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IHRoZSBzYW1lIGxlbmd0aCAobnVtYmVyIG9mIGJpdHMpIGFzIHRoZQorICogc3RhdGUgc2l6ZSBmb3IgdGhpcyBrZXkuIFRoZSBmdW5jdGlvbiB1c2VzIHRoZSBmaXJzdCBAYyBzdGF0ZV9zaXplIGJpdHMKKyAqIG9mIHRoZSBpbnB1dCBidWZmZXIsIGVuY3J5cHRzIHRoZW0gYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0ga2V5X2N0eAorICogICAgIFBvaW50ZXIgdG8gYSBUaHJlZWZpc2gga2V5IHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBpbgorICogICAgIFBvaW9udGVyIHRvIHBsYWludGV4dCBkYXRhIGJ1ZmZlci4KKyAqIEBwYXJhbSBvdXQKKyAqICAgICBQb2ludGVyIHRvIGNpcGhlciBidWZmZXIuCisgKi8KK3ZvaWQgdGhyZWVmaXNoX2VuY3J5cHRfYmxvY2tfYnl0ZXMoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU4ICppbiwKKwkJCQkgICB1OCAqb3V0KTsKKworLyoqCisgKiBFbmNyeXB0IFRocmVlZmlzaCBibG9jayAod29yZHMpLgorICoKKyAqIFRoZSBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IHRoZSBzYW1lIGxlbmd0aCAobnVtYmVyIG9mIGJpdHMpIGFzIHRoZQorICogc3RhdGUgc2l6ZSBmb3IgdGhpcyBrZXkuIFRoZSBmdW5jdGlvbiB1c2VzIHRoZSBmaXJzdCBAYyBzdGF0ZV9zaXplIGJpdHMKKyAqIG9mIHRoZSBpbnB1dCBidWZmZXIsIGVuY3J5cHRzIHRoZW0gYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4KKyAqCisgKiBUaGUgd29yZHNpemUgaXN0IHNldCB0byA2NCBiaXRzLgorICoKKyAqIEBwYXJhbSBrZXlfY3R4CisgKiAgICAgUG9pbnRlciB0byBhIFRocmVlZmlzaCBrZXkgc3RydWN0dXJlLgorICogQHBhcmFtIGluCisgKiAgICAgUG9pb250ZXIgdG8gcGxhaW50ZXh0IGRhdGEgYnVmZmVyLgorICogQHBhcmFtIG91dAorICogICAgIFBvaW50ZXIgdG8gY2lwaGVyIGJ1ZmZlci4KKyAqLwordm9pZCB0aHJlZWZpc2hfZW5jcnlwdF9ibG9ja193b3JkcyhzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbiwKKwkJCQkgICB1NjQgKm91dCk7CisKKy8qKgorICogRGVjcnlwdCBUaHJlZWZpc2ggYmxvY2sgKGJ5dGVzKS4KKyAqCisgKiBUaGUgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCB0aGUgc2FtZSBsZW5ndGggKG51bWJlciBvZiBiaXRzKSBhcyB0aGUKKyAqIHN0YXRlIHNpemUgZm9yIHRoaXMga2V5LiBUaGUgZnVuY3Rpb24gdXNlcyB0aGUgZmlyc3QgQGMgc3RhdGVfc2l6ZSBiaXRzCisgKiBvZiB0aGUgaW5wdXQgYnVmZmVyLCBkZWNyeXB0cyB0aGVtIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgb3V0cHV0CisgKiBidWZmZXIKKyAqCisgKiBAcGFyYW0ga2V5X2N0eAorICogICAgIFBvaW50ZXIgdG8gYSBUaHJlZWZpc2gga2V5IHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBpbgorICogICAgIFBvaW9udGVyIHRvIGNpcGhlciBkYXRhIGJ1ZmZlci4KKyAqIEBwYXJhbSBvdXQKKyAqICAgICBQb2ludGVyIHRvIHBsYWludGV4dCBidWZmZXIuCisgKi8KK3ZvaWQgdGhyZWVmaXNoX2RlY3J5cHRfYmxvY2tfYnl0ZXMoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU4ICppbiwKKwkJCQkgICB1OCAqb3V0KTsKKworLyoqCisgKiBEZWNyeXB0IFRocmVlZmlzaCBibG9jayAod29yZHMpLgorICoKKyAqIFRoZSBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IHRoZSBzYW1lIGxlbmd0aCAobnVtYmVyIG9mIGJpdHMpIGFzIHRoZQorICogc3RhdGUgc2l6ZSBmb3IgdGhpcyBrZXkuIFRoZSBmdW5jdGlvbiB1c2VzIHRoZSBmaXJzdCBAYyBzdGF0ZV9zaXplIGJpdHMKKyAqIG9mIHRoZSBpbnB1dCBidWZmZXIsIGVuY3J5cHRzIHRoZW0gYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4KKyAqCisgKiBUaGUgd29yZHNpemUgaXN0IHNldCB0byA2NCBiaXRzLgorICoKKyAqIEBwYXJhbSBrZXlfY3R4CisgKiAgICAgUG9pbnRlciB0byBhIFRocmVlZmlzaCBrZXkgc3RydWN0dXJlLgorICogQHBhcmFtIGluCisgKiAgICAgUG9pb250ZXIgdG8gY2lwaGVyIGRhdGEgYnVmZmVyLgorICogQHBhcmFtIG91dAorICogICAgIFBvaW50ZXIgdG8gcGxhaW50ZXh0IGJ1ZmZlci4KKyAqLwordm9pZCB0aHJlZWZpc2hfZGVjcnlwdF9ibG9ja193b3JkcyhzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbiwKKwkJCQkgICB1NjQgKm91dCk7CisKK3ZvaWQgdGhyZWVmaXNoX2VuY3J5cHRfMjU2KHN0cnVjdCB0aHJlZWZpc2hfa2V5ICprZXlfY3R4LCB1NjQgKmlucHV0LAorCQkJICAgdTY0ICpvdXRwdXQpOwordm9pZCB0aHJlZWZpc2hfZW5jcnlwdF81MTIoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW5wdXQsCisJCQkgICB1NjQgKm91dHB1dCk7Cit2b2lkIHRocmVlZmlzaF9lbmNyeXB0XzEwMjQoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW5wdXQsCisJCQkgICAgdTY0ICpvdXRwdXQpOwordm9pZCB0aHJlZWZpc2hfZGVjcnlwdF8yNTYoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW5wdXQsCisJCQkgICB1NjQgKm91dHB1dCk7Cit2b2lkIHRocmVlZmlzaF9kZWNyeXB0XzUxMihzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbnB1dCwKKwkJCSAgIHU2NCAqb3V0cHV0KTsKK3ZvaWQgdGhyZWVmaXNoX2RlY3J5cHRfMTAyNChzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbnB1dCwKKwkJCSAgICB1NjQgKm91dHB1dCk7CisvKioKKyAqIEB9CisgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NrZWluL3RocmVlZmlzaF9ibG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL3NrZWluL3RocmVlZmlzaF9ibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWUxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2tlaW4vdGhyZWVmaXNoX2Jsb2NrLmMKQEAgLTAsMCArMSw4MjU4IEBACisjaW5jbHVkZSAidGhyZWVmaXNoX2FwaS5oIgorCit2b2lkIHRocmVlZmlzaF9lbmNyeXB0XzI1NihzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbnB1dCwKKwkJCSAgIHU2NCAqb3V0cHV0KQoreworCXU2NCBiMCA9IGlucHV0WzBdLCBiMSA9IGlucHV0WzFdLAorCSAgICBiMiA9IGlucHV0WzJdLCBiMyA9IGlucHV0WzNdOworCXU2NCBrMCA9IGtleV9jdHgtPmtleVswXSwgazEgPSBrZXlfY3R4LT5rZXlbMV0sCisJICAgIGsyID0ga2V5X2N0eC0+a2V5WzJdLCBrMyA9IGtleV9jdHgtPmtleVszXSwKKwkgICAgazQgPSBrZXlfY3R4LT5rZXlbNF07CisJdTY0IHQwID0ga2V5X2N0eC0+dHdlYWtbMF0sIHQxID0ga2V5X2N0eC0+dHdlYWtbMV0sCisJICAgIHQyID0ga2V5X2N0eC0+dHdlYWtbMl07CisKKwliMSArPSBrMSArIHQwOworCWIwICs9IGIxICsgazA7CisJYjEgPSAoKGIxIDw8IDE0KSB8IChiMSA+PiAoNjQgLSAxNCkpKSBeIGIwOworCisJYjMgKz0gazM7CisJYjIgKz0gYjMgKyBrMiArIHQxOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1MikgfCAoYjMgPj4gKDY0IC0gNTIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCA1NykgfCAoYjEgPj4gKDY0IC0gNTcpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCAyMykgfCAoYjEgPj4gKDY0IC0gMjMpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCA0MCkgfCAoYjMgPj4gKDY0IC0gNDApKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1KSB8IChiMyA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzcpIHwgKGIxID4+ICg2NCAtIDM3KSkpIF4gYjI7CisKKwliMSArPSBrMiArIHQxOworCWIwICs9IGIxICsgazE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGIwOworCisJYjMgKz0gazQgKyAxOworCWIyICs9IGIzICsgazMgKyB0MjsKKwliMyA9ICgoYjMgPDwgMzMpIHwgKGIzID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDYpIHwgKGIzID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTIpIHwgKGIxID4+ICg2NCAtIDEyKSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTgpIHwgKGIxID4+ICg2NCAtIDU4KSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzIpIHwgKGIzID4+ICg2NCAtIDMyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzIpIHwgKGIxID4+ICg2NCAtIDMyKSkpIF4gYjI7CisKKworCWIxICs9IGszICsgdDI7CisJYjAgKz0gYjEgKyBrMjsKKwliMSA9ICgoYjEgPDwgMTQpIHwgKGIxID4+ICg2NCAtIDE0KSkpIF4gYjA7CisKKwliMyArPSBrMCArIDI7CisJYjIgKz0gYjMgKyBrNCArIHQwOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1MikgfCAoYjMgPj4gKDY0IC0gNTIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCA1NykgfCAoYjEgPj4gKDY0IC0gNTcpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCAyMykgfCAoYjEgPj4gKDY0IC0gMjMpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCA0MCkgfCAoYjMgPj4gKDY0IC0gNDApKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1KSB8IChiMyA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzcpIHwgKGIxID4+ICg2NCAtIDM3KSkpIF4gYjI7CisKKwliMSArPSBrNCArIHQwOworCWIwICs9IGIxICsgazM7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGIwOworCisJYjMgKz0gazEgKyAzOworCWIyICs9IGIzICsgazAgKyB0MTsKKwliMyA9ICgoYjMgPDwgMzMpIHwgKGIzID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDYpIHwgKGIzID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTIpIHwgKGIxID4+ICg2NCAtIDEyKSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTgpIHwgKGIxID4+ICg2NCAtIDU4KSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzIpIHwgKGIzID4+ICg2NCAtIDMyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzIpIHwgKGIxID4+ICg2NCAtIDMyKSkpIF4gYjI7CisKKworCWIxICs9IGswICsgdDE7CisJYjAgKz0gYjEgKyBrNDsKKwliMSA9ICgoYjEgPDwgMTQpIHwgKGIxID4+ICg2NCAtIDE0KSkpIF4gYjA7CisKKwliMyArPSBrMiArIDQ7CisJYjIgKz0gYjMgKyBrMSArIHQyOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1MikgfCAoYjMgPj4gKDY0IC0gNTIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCA1NykgfCAoYjEgPj4gKDY0IC0gNTcpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCAyMykgfCAoYjEgPj4gKDY0IC0gMjMpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCA0MCkgfCAoYjMgPj4gKDY0IC0gNDApKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1KSB8IChiMyA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzcpIHwgKGIxID4+ICg2NCAtIDM3KSkpIF4gYjI7CisKKwliMSArPSBrMSArIHQyOworCWIwICs9IGIxICsgazA7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGIwOworCisJYjMgKz0gazMgKyA1OworCWIyICs9IGIzICsgazIgKyB0MDsKKwliMyA9ICgoYjMgPDwgMzMpIHwgKGIzID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDYpIHwgKGIzID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTIpIHwgKGIxID4+ICg2NCAtIDEyKSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTgpIHwgKGIxID4+ICg2NCAtIDU4KSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzIpIHwgKGIzID4+ICg2NCAtIDMyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzIpIHwgKGIxID4+ICg2NCAtIDMyKSkpIF4gYjI7CisKKworCWIxICs9IGsyICsgdDA7CisJYjAgKz0gYjEgKyBrMTsKKwliMSA9ICgoYjEgPDwgMTQpIHwgKGIxID4+ICg2NCAtIDE0KSkpIF4gYjA7CisKKwliMyArPSBrNCArIDY7CisJYjIgKz0gYjMgKyBrMyArIHQxOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1MikgfCAoYjMgPj4gKDY0IC0gNTIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCA1NykgfCAoYjEgPj4gKDY0IC0gNTcpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCAyMykgfCAoYjEgPj4gKDY0IC0gMjMpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCA0MCkgfCAoYjMgPj4gKDY0IC0gNDApKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1KSB8IChiMyA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzcpIHwgKGIxID4+ICg2NCAtIDM3KSkpIF4gYjI7CisKKwliMSArPSBrMyArIHQxOworCWIwICs9IGIxICsgazI7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGIwOworCisJYjMgKz0gazAgKyA3OworCWIyICs9IGIzICsgazQgKyB0MjsKKwliMyA9ICgoYjMgPDwgMzMpIHwgKGIzID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDYpIHwgKGIzID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTIpIHwgKGIxID4+ICg2NCAtIDEyKSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTgpIHwgKGIxID4+ICg2NCAtIDU4KSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzIpIHwgKGIzID4+ICg2NCAtIDMyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzIpIHwgKGIxID4+ICg2NCAtIDMyKSkpIF4gYjI7CisKKworCWIxICs9IGs0ICsgdDI7CisJYjAgKz0gYjEgKyBrMzsKKwliMSA9ICgoYjEgPDwgMTQpIHwgKGIxID4+ICg2NCAtIDE0KSkpIF4gYjA7CisKKwliMyArPSBrMSArIDg7CisJYjIgKz0gYjMgKyBrMCArIHQwOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1MikgfCAoYjMgPj4gKDY0IC0gNTIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCA1NykgfCAoYjEgPj4gKDY0IC0gNTcpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCAyMykgfCAoYjEgPj4gKDY0IC0gMjMpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCA0MCkgfCAoYjMgPj4gKDY0IC0gNDApKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1KSB8IChiMyA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzcpIHwgKGIxID4+ICg2NCAtIDM3KSkpIF4gYjI7CisKKwliMSArPSBrMCArIHQwOworCWIwICs9IGIxICsgazQ7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGIwOworCisJYjMgKz0gazIgKyA5OworCWIyICs9IGIzICsgazEgKyB0MTsKKwliMyA9ICgoYjMgPDwgMzMpIHwgKGIzID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDYpIHwgKGIzID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTIpIHwgKGIxID4+ICg2NCAtIDEyKSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTgpIHwgKGIxID4+ICg2NCAtIDU4KSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzIpIHwgKGIzID4+ICg2NCAtIDMyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzIpIHwgKGIxID4+ICg2NCAtIDMyKSkpIF4gYjI7CisKKworCWIxICs9IGsxICsgdDE7CisJYjAgKz0gYjEgKyBrMDsKKwliMSA9ICgoYjEgPDwgMTQpIHwgKGIxID4+ICg2NCAtIDE0KSkpIF4gYjA7CisKKwliMyArPSBrMyArIDEwOworCWIyICs9IGIzICsgazIgKyB0MjsKKwliMyA9ICgoYjMgPDwgMTYpIHwgKGIzID4+ICg2NCAtIDE2KSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTIpIHwgKGIzID4+ICg2NCAtIDUyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTcpIHwgKGIxID4+ICg2NCAtIDU3KSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDApIHwgKGIzID4+ICg2NCAtIDQwKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNSkgfCAoYjMgPj4gKDY0IC0gNSkpKSBeIGIwOworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDM3KSB8IChiMSA+PiAoNjQgLSAzNykpKSBeIGIyOworCisJYjEgKz0gazIgKyB0MjsKKwliMCArPSBiMSArIGsxOworCWIxID0gKChiMSA8PCAyNSkgfCAoYjEgPj4gKDY0IC0gMjUpKSkgXiBiMDsKKworCWIzICs9IGs0ICsgMTE7CisJYjIgKz0gYjMgKyBrMyArIHQwOworCWIzID0gKChiMyA8PCAzMykgfCAoYjMgPj4gKDY0IC0gMzMpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA0NikgfCAoYjMgPj4gKDY0IC0gNDYpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAxMikgfCAoYjEgPj4gKDY0IC0gMTIpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCA1OCkgfCAoYjEgPj4gKDY0IC0gNTgpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCAzMikgfCAoYjMgPj4gKDY0IC0gMzIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAzMikgfCAoYjEgPj4gKDY0IC0gMzIpKSkgXiBiMjsKKworCisJYjEgKz0gazMgKyB0MDsKKwliMCArPSBiMSArIGsyOworCWIxID0gKChiMSA8PCAxNCkgfCAoYjEgPj4gKDY0IC0gMTQpKSkgXiBiMDsKKworCWIzICs9IGswICsgMTI7CisJYjIgKz0gYjMgKyBrNCArIHQxOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1MikgfCAoYjMgPj4gKDY0IC0gNTIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCA1NykgfCAoYjEgPj4gKDY0IC0gNTcpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCAyMykgfCAoYjEgPj4gKDY0IC0gMjMpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCA0MCkgfCAoYjMgPj4gKDY0IC0gNDApKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA1KSB8IChiMyA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzcpIHwgKGIxID4+ICg2NCAtIDM3KSkpIF4gYjI7CisKKwliMSArPSBrNCArIHQxOworCWIwICs9IGIxICsgazM7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGIwOworCisJYjMgKz0gazEgKyAxMzsKKwliMiArPSBiMyArIGswICsgdDI7CisJYjMgPSAoKGIzIDw8IDMzKSB8IChiMyA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ2KSB8IChiMyA+PiAoNjQgLSA0NikpKSBeIGIwOworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEyKSB8IChiMSA+PiAoNjQgLSAxMikpKSBeIGIyOworCisJYjAgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDU4KSB8IChiMSA+PiAoNjQgLSA1OCkpKSBeIGIwOworCisJYjIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDIyKSB8IChiMyA+PiAoNjQgLSAyMikpKSBeIGIyOworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDMyKSB8IChiMyA+PiAoNjQgLSAzMikpKSBeIGIwOworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMyKSB8IChiMSA+PiAoNjQgLSAzMikpKSBeIGIyOworCisKKwliMSArPSBrMCArIHQyOworCWIwICs9IGIxICsgazQ7CisJYjEgPSAoKGIxIDw8IDE0KSB8IChiMSA+PiAoNjQgLSAxNCkpKSBeIGIwOworCisJYjMgKz0gazIgKyAxNDsKKwliMiArPSBiMyArIGsxICsgdDA7CisJYjMgPSAoKGIzIDw8IDE2KSB8IChiMyA+PiAoNjQgLSAxNikpKSBeIGIyOworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUyKSB8IChiMyA+PiAoNjQgLSA1MikpKSBeIGIwOworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDU3KSB8IChiMSA+PiAoNjQgLSA1NykpKSBeIGIyOworCisJYjAgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDIzKSB8IChiMSA+PiAoNjQgLSAyMykpKSBeIGIwOworCisJYjIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQwKSB8IChiMyA+PiAoNjQgLSA0MCkpKSBeIGIyOworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUpIHwgKGIzID4+ICg2NCAtIDUpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAzNykgfCAoYjEgPj4gKDY0IC0gMzcpKSkgXiBiMjsKKworCWIxICs9IGsxICsgdDA7CisJYjAgKz0gYjEgKyBrMDsKKwliMSA9ICgoYjEgPDwgMjUpIHwgKGIxID4+ICg2NCAtIDI1KSkpIF4gYjA7CisKKwliMyArPSBrMyArIDE1OworCWIyICs9IGIzICsgazIgKyB0MTsKKwliMyA9ICgoYjMgPDwgMzMpIHwgKGIzID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDYpIHwgKGIzID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTIpIHwgKGIxID4+ICg2NCAtIDEyKSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTgpIHwgKGIxID4+ICg2NCAtIDU4KSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzIpIHwgKGIzID4+ICg2NCAtIDMyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzIpIHwgKGIxID4+ICg2NCAtIDMyKSkpIF4gYjI7CisKKworCWIxICs9IGsyICsgdDE7CisJYjAgKz0gYjEgKyBrMTsKKwliMSA9ICgoYjEgPDwgMTQpIHwgKGIxID4+ICg2NCAtIDE0KSkpIF4gYjA7CisKKwliMyArPSBrNCArIDE2OworCWIyICs9IGIzICsgazMgKyB0MjsKKwliMyA9ICgoYjMgPDwgMTYpIHwgKGIzID4+ICg2NCAtIDE2KSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTIpIHwgKGIzID4+ICg2NCAtIDUyKSkpIF4gYjA7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTcpIHwgKGIxID4+ICg2NCAtIDU3KSkpIF4gYjI7CisKKwliMCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjA7CisKKwliMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDApIHwgKGIzID4+ICg2NCAtIDQwKSkpIF4gYjI7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNSkgfCAoYjMgPj4gKDY0IC0gNSkpKSBeIGIwOworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDM3KSB8IChiMSA+PiAoNjQgLSAzNykpKSBeIGIyOworCisJYjEgKz0gazMgKyB0MjsKKwliMCArPSBiMSArIGsyOworCWIxID0gKChiMSA8PCAyNSkgfCAoYjEgPj4gKDY0IC0gMjUpKSkgXiBiMDsKKworCWIzICs9IGswICsgMTc7CisJYjIgKz0gYjMgKyBrNCArIHQwOworCWIzID0gKChiMyA8PCAzMykgfCAoYjMgPj4gKDY0IC0gMzMpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA0NikgfCAoYjMgPj4gKDY0IC0gNDYpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAxMikgfCAoYjEgPj4gKDY0IC0gMTIpKSkgXiBiMjsKKworCWIwICs9IGIxOworCWIxID0gKChiMSA8PCA1OCkgfCAoYjEgPj4gKDY0IC0gNTgpKSkgXiBiMDsKKworCWIyICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiMjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCAzMikgfCAoYjMgPj4gKDY0IC0gMzIpKSkgXiBiMDsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAzMikgfCAoYjEgPj4gKDY0IC0gMzIpKSkgXiBiMjsKKworCW91dHB1dFswXSA9IGIwICsgazM7CisJb3V0cHV0WzFdID0gYjEgKyBrNCArIHQwOworCW91dHB1dFsyXSA9IGIyICsgazAgKyB0MTsKKwlvdXRwdXRbM10gPSBiMyArIGsxICsgMTg7Cit9CisKK3ZvaWQgdGhyZWVmaXNoX2RlY3J5cHRfMjU2KHN0cnVjdCB0aHJlZWZpc2hfa2V5ICprZXlfY3R4LCB1NjQgKmlucHV0LAorCQkJICAgdTY0ICpvdXRwdXQpCit7CisJdTY0IGIwID0gaW5wdXRbMF0sIGIxID0gaW5wdXRbMV0sCisJICAgIGIyID0gaW5wdXRbMl0sIGIzID0gaW5wdXRbM107CisJdTY0IGswID0ga2V5X2N0eC0+a2V5WzBdLCBrMSA9IGtleV9jdHgtPmtleVsxXSwKKwkgICAgazIgPSBrZXlfY3R4LT5rZXlbMl0sIGszID0ga2V5X2N0eC0+a2V5WzNdLAorCSAgICBrNCA9IGtleV9jdHgtPmtleVs0XTsKKwl1NjQgdDAgPSBrZXlfY3R4LT50d2Vha1swXSwgdDEgPSBrZXlfY3R4LT50d2Vha1sxXSwKKwkgICAgdDIgPSBrZXlfY3R4LT50d2Vha1syXTsKKworCXU2NCB0bXA7CisKKwliMCAtPSBrMzsKKwliMSAtPSBrNCArIHQwOworCWIyIC09IGswICsgdDE7CisJYjMgLT0gazEgKyAxODsKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAzMikgfCAodG1wIDw8ICg2NCAtIDMyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMikgfCAodG1wIDw8ICg2NCAtIDMyKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA1OCkgfCAodG1wIDw8ICg2NCAtIDU4KSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMikgfCAodG1wIDw8ICg2NCAtIDEyKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjAgLT0gYjEgKyBrMjsKKwliMSAtPSBrMyArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIyIC09IGIzICsgazQgKyB0MDsKKwliMyAtPSBrMCArIDE3OworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDQwKSB8ICh0bXAgPDwgKDY0IC0gNDApKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUyKSB8ICh0bXAgPDwgKDY0IC0gNTIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDU3KSB8ICh0bXAgPDwgKDY0IC0gNTcpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDE0KSB8ICh0bXAgPDwgKDY0IC0gMTQpKTsKKwliMCAtPSBiMSArIGsxOworCWIxIC09IGsyICsgdDE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjIgLT0gYjMgKyBrMyArIHQyOworCWIzIC09IGs0ICsgMTY7CisKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDU4KSB8ICh0bXAgPDwgKDY0IC0gNTgpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMCAtPSBiMSArIGswOworCWIxIC09IGsxICsgdDA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjMgKyBrMiArIHQxOworCWIzIC09IGszICsgMTU7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1KSB8ICh0bXAgPDwgKDY0IC0gNSkpOworCWIwIC09IGIzOworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIyIC09IGIxOworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gMjMpIHwgKHRtcCA8PCAoNjQgLSAyMykpOworCWIwIC09IGIxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gNDApIHwgKHRtcCA8PCAoNjQgLSA0MCkpOworCWIyIC09IGIzOworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWIwIC09IGIzOworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gNTcpIHwgKHRtcCA8PCAoNjQgLSA1NykpOworCWIyIC09IGIxOworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gMTQpIHwgKHRtcCA8PCAoNjQgLSAxNCkpOworCWIwIC09IGIxICsgazQ7CisJYjEgLT0gazAgKyB0MjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMiAtPSBiMyArIGsxICsgdDA7CisJYjMgLT0gazIgKyAxNDsKKworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gMzIpIHwgKHRtcCA8PCAoNjQgLSAzMikpOworCWIwIC09IGIzOworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gMzIpIHwgKHRtcCA8PCAoNjQgLSAzMikpOworCWIyIC09IGIxOworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gNTgpIHwgKHRtcCA8PCAoNjQgLSA1OCkpOworCWIwIC09IGIxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMjIpIHwgKHRtcCA8PCAoNjQgLSAyMikpOworCWIyIC09IGIzOworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWIwIC09IGIzOworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gMTIpIHwgKHRtcCA8PCAoNjQgLSAxMikpOworCWIyIC09IGIxOworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gMjUpIHwgKHRtcCA8PCAoNjQgLSAyNSkpOworCWIwIC09IGIxICsgazM7CisJYjEgLT0gazQgKyB0MTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDMzKSB8ICh0bXAgPDwgKDY0IC0gMzMpKTsKKwliMiAtPSBiMyArIGswICsgdDI7CisJYjMgLT0gazEgKyAxMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA0MCkgfCAodG1wIDw8ICg2NCAtIDQwKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiA1NykgfCAodG1wIDw8ICg2NCAtIDU3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjAgLT0gYjEgKyBrMjsKKwliMSAtPSBrMyArIHQwOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIyIC09IGIzICsgazQgKyB0MTsKKwliMyAtPSBrMCArIDEyOworCisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAzMikgfCAodG1wIDw8ICg2NCAtIDMyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMikgfCAodG1wIDw8ICg2NCAtIDMyKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA1OCkgfCAodG1wIDw8ICg2NCAtIDU4KSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMikgfCAodG1wIDw8ICg2NCAtIDEyKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjAgLT0gYjEgKyBrMTsKKwliMSAtPSBrMiArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIyIC09IGIzICsgazMgKyB0MDsKKwliMyAtPSBrNCArIDExOworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDQwKSB8ICh0bXAgPDwgKDY0IC0gNDApKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUyKSB8ICh0bXAgPDwgKDY0IC0gNTIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDU3KSB8ICh0bXAgPDwgKDY0IC0gNTcpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDE0KSB8ICh0bXAgPDwgKDY0IC0gMTQpKTsKKwliMCAtPSBiMSArIGswOworCWIxIC09IGsxICsgdDE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjIgLT0gYjMgKyBrMiArIHQyOworCWIzIC09IGszICsgMTA7CisKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDU4KSB8ICh0bXAgPDwgKDY0IC0gNTgpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMCAtPSBiMSArIGs0OworCWIxIC09IGswICsgdDA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjMgKyBrMSArIHQxOworCWIzIC09IGsyICsgOTsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA0MCkgfCAodG1wIDw8ICg2NCAtIDQwKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiA1NykgfCAodG1wIDw8ICg2NCAtIDU3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjAgLT0gYjEgKyBrMzsKKwliMSAtPSBrNCArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIyIC09IGIzICsgazAgKyB0MDsKKwliMyAtPSBrMSArIDg7CisKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDU4KSB8ICh0bXAgPDwgKDY0IC0gNTgpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMCAtPSBiMSArIGsyOworCWIxIC09IGszICsgdDE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjMgKyBrNCArIHQyOworCWIzIC09IGswICsgNzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA0MCkgfCAodG1wIDw8ICg2NCAtIDQwKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiA1NykgfCAodG1wIDw8ICg2NCAtIDU3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjAgLT0gYjEgKyBrMTsKKwliMSAtPSBrMiArIHQwOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIyIC09IGIzICsgazMgKyB0MTsKKwliMyAtPSBrNCArIDY7CisKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDU4KSB8ICh0bXAgPDwgKDY0IC0gNTgpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMCAtPSBiMSArIGswOworCWIxIC09IGsxICsgdDI7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjMgKyBrMiArIHQwOworCWIzIC09IGszICsgNTsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA0MCkgfCAodG1wIDw8ICg2NCAtIDQwKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiA1NykgfCAodG1wIDw8ICg2NCAtIDU3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjAgLT0gYjEgKyBrNDsKKwliMSAtPSBrMCArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIyIC09IGIzICsgazEgKyB0MjsKKwliMyAtPSBrMiArIDQ7CisKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDU4KSB8ICh0bXAgPDwgKDY0IC0gNTgpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMCAtPSBiMSArIGszOworCWIxIC09IGs0ICsgdDA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjMgKyBrMCArIHQxOworCWIzIC09IGsxICsgMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA0MCkgfCAodG1wIDw8ICg2NCAtIDQwKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiA1NykgfCAodG1wIDw8ICg2NCAtIDU3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjAgLT0gYjEgKyBrMjsKKwliMSAtPSBrMyArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIyIC09IGIzICsgazQgKyB0MDsKKwliMyAtPSBrMCArIDI7CisKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMyKSB8ICh0bXAgPDwgKDY0IC0gMzIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDU4KSB8ICh0bXAgPDwgKDY0IC0gNTgpKTsKKwliMCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMiAtPSBiMzsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMCAtPSBiMSArIGsxOworCWIxIC09IGsyICsgdDE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjMgKyBrMyArIHQyOworCWIzIC09IGs0ICsgMTsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjAgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA0MCkgfCAodG1wIDw8ICg2NCAtIDQwKSk7CisJYjIgLT0gYjM7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiA1NykgfCAodG1wIDw8ICg2NCAtIDU3KSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjAgLT0gYjEgKyBrMDsKKwliMSAtPSBrMSArIHQwOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIyIC09IGIzICsgazIgKyB0MTsKKwliMyAtPSBrMzsKKworCW91dHB1dFswXSA9IGIwOworCW91dHB1dFsxXSA9IGIxOworCW91dHB1dFsyXSA9IGIyOworCW91dHB1dFszXSA9IGIzOworfQorCit2b2lkIHRocmVlZmlzaF9lbmNyeXB0XzUxMihzdHJ1Y3QgdGhyZWVmaXNoX2tleSAqa2V5X2N0eCwgdTY0ICppbnB1dCwKKwkJCSAgIHU2NCAqb3V0cHV0KQoreworCXU2NCBiMCA9IGlucHV0WzBdLCBiMSA9IGlucHV0WzFdLAorCSAgICBiMiA9IGlucHV0WzJdLCBiMyA9IGlucHV0WzNdLAorCSAgICBiNCA9IGlucHV0WzRdLCBiNSA9IGlucHV0WzVdLAorCSAgICBiNiA9IGlucHV0WzZdLCBiNyA9IGlucHV0WzddOworCXU2NCBrMCA9IGtleV9jdHgtPmtleVswXSwgazEgPSBrZXlfY3R4LT5rZXlbMV0sCisJICAgIGsyID0ga2V5X2N0eC0+a2V5WzJdLCBrMyA9IGtleV9jdHgtPmtleVszXSwKKwkgICAgazQgPSBrZXlfY3R4LT5rZXlbNF0sIGs1ID0ga2V5X2N0eC0+a2V5WzVdLAorCSAgICBrNiA9IGtleV9jdHgtPmtleVs2XSwgazcgPSBrZXlfY3R4LT5rZXlbN10sCisJICAgIGs4ID0ga2V5X2N0eC0+a2V5WzhdOworCXU2NCB0MCA9IGtleV9jdHgtPnR3ZWFrWzBdLCB0MSA9IGtleV9jdHgtPnR3ZWFrWzFdLAorCSAgICB0MiA9IGtleV9jdHgtPnR3ZWFrWzJdOworCisJYjEgKz0gazE7CisJYjAgKz0gYjEgKyBrMDsKKwliMSA9ICgoYjEgPDwgNDYpIHwgKGIxID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMyArPSBrMzsKKwliMiArPSBiMyArIGsyOworCWIzID0gKChiMyA8PCAzNikgfCAoYjMgPj4gKDY0IC0gMzYpKSkgXiBiMjsKKworCWI1ICs9IGs1ICsgdDA7CisJYjQgKz0gYjUgKyBrNDsKKwliNSA9ICgoYjUgPDwgMTkpIHwgKGI1ID4+ICg2NCAtIDE5KSkpIF4gYjQ7CisKKwliNyArPSBrNzsKKwliNiArPSBiNyArIGs2ICsgdDE7CisJYjcgPSAoKGI3IDw8IDM3KSB8IChiNyA+PiAoNjQgLSAzNykpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMzKSB8IChiMSA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI3KSB8IChiNyA+PiAoNjQgLSAyNykpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDE0KSB8IChiNSA+PiAoNjQgLSAxNCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQyKSB8IChiMyA+PiAoNjQgLSA0MikpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDE3KSB8IChiMSA+PiAoNjQgLSAxNykpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ5KSB8IChiMyA+PiAoNjQgLSA0OSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM2KSB8IChiNSA+PiAoNjQgLSAzNikpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM5KSB8IChiNyA+PiAoNjQgLSAzOSkpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ0KSB8IChiMSA+PiAoNjQgLSA0NCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDkpIHwgKGI3ID4+ICg2NCAtIDkpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NCkgfCAoYjUgPj4gKDY0IC0gNTQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1NikgfCAoYjMgPj4gKDY0IC0gNTYpKSkgXiBiNDsKKworCWIxICs9IGsyOworCWIwICs9IGIxICsgazE7CisJYjEgPSAoKGIxIDw8IDM5KSB8IChiMSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjMgKz0gazQ7CisJYjIgKz0gYjMgKyBrMzsKKwliMyA9ICgoYjMgPDwgMzApIHwgKGIzID4+ICg2NCAtIDMwKSkpIF4gYjI7CisKKwliNSArPSBrNiArIHQxOworCWI0ICs9IGI1ICsgazU7CisJYjUgPSAoKGI1IDw8IDM0KSB8IChiNSA+PiAoNjQgLSAzNCkpKSBeIGI0OworCisJYjcgKz0gazggKyAxOworCWI2ICs9IGI3ICsgazcgKyB0MjsKKwliNyA9ICgoYjcgPDwgMjQpIHwgKGI3ID4+ICg2NCAtIDI0KSkpIF4gYjY7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjI7CisKKwliNCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNTApIHwgKGI3ID4+ICg2NCAtIDUwKSkpIF4gYjQ7CisKKwliNiArPSBiNTsKKwliNSA9ICgoYjUgPDwgMTApIHwgKGI1ID4+ICg2NCAtIDEwKSkpIF4gYjY7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTcpIHwgKGIzID4+ICg2NCAtIDE3KSkpIF4gYjA7CisKKwliNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjUpIHwgKGIxID4+ICg2NCAtIDI1KSkpIF4gYjQ7CisKKwliNiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjkpIHwgKGIzID4+ICg2NCAtIDI5KSkpIF4gYjY7CisKKwliMCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMzkpIHwgKGI1ID4+ICg2NCAtIDM5KSkpIF4gYjA7CisKKwliMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDMpIHwgKGI3ID4+ICg2NCAtIDQzKSkpIF4gYjI7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgOCkgfCAoYjEgPj4gKDY0IC0gOCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM1KSB8IChiNyA+PiAoNjQgLSAzNSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDU2KSB8IChiNSA+PiAoNjQgLSA1NikpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDIyKSB8IChiMyA+PiAoNjQgLSAyMikpKSBeIGI0OworCisJYjEgKz0gazM7CisJYjAgKz0gYjEgKyBrMjsKKwliMSA9ICgoYjEgPDwgNDYpIHwgKGIxID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMyArPSBrNTsKKwliMiArPSBiMyArIGs0OworCWIzID0gKChiMyA8PCAzNikgfCAoYjMgPj4gKDY0IC0gMzYpKSkgXiBiMjsKKworCWI1ICs9IGs3ICsgdDI7CisJYjQgKz0gYjUgKyBrNjsKKwliNSA9ICgoYjUgPDwgMTkpIHwgKGI1ID4+ICg2NCAtIDE5KSkpIF4gYjQ7CisKKwliNyArPSBrMCArIDI7CisJYjYgKz0gYjcgKyBrOCArIHQwOworCWI3ID0gKChiNyA8PCAzNykgfCAoYjcgPj4gKDY0IC0gMzcpKSkgXiBiNjsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAzMykgfCAoYjEgPj4gKDY0IC0gMzMpKSkgXiBiMjsKKworCWI0ICs9IGI3OworCWI3ID0gKChiNyA8PCAyNykgfCAoYjcgPj4gKDY0IC0gMjcpKSkgXiBiNDsKKworCWI2ICs9IGI1OworCWI1ID0gKChiNSA8PCAxNCkgfCAoYjUgPj4gKDY0IC0gMTQpKSkgXiBiNjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA0MikgfCAoYjMgPj4gKDY0IC0gNDIpKSkgXiBiMDsKKworCWI0ICs9IGIxOworCWIxID0gKChiMSA8PCAxNykgfCAoYjEgPj4gKDY0IC0gMTcpKSkgXiBiNDsKKworCWI2ICs9IGIzOworCWIzID0gKChiMyA8PCA0OSkgfCAoYjMgPj4gKDY0IC0gNDkpKSkgXiBiNjsKKworCWIwICs9IGI1OworCWI1ID0gKChiNSA8PCAzNikgfCAoYjUgPj4gKDY0IC0gMzYpKSkgXiBiMDsKKworCWIyICs9IGI3OworCWI3ID0gKChiNyA8PCAzOSkgfCAoYjcgPj4gKDY0IC0gMzkpKSkgXiBiMjsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA0NCkgfCAoYjEgPj4gKDY0IC0gNDQpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCA5KSB8IChiNyA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNTQpIHwgKGI1ID4+ICg2NCAtIDU0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTYpIHwgKGIzID4+ICg2NCAtIDU2KSkpIF4gYjQ7CisKKwliMSArPSBrNDsKKwliMCArPSBiMSArIGszOworCWIxID0gKChiMSA8PCAzOSkgfCAoYjEgPj4gKDY0IC0gMzkpKSkgXiBiMDsKKworCWIzICs9IGs2OworCWIyICs9IGIzICsgazU7CisJYjMgPSAoKGIzIDw8IDMwKSB8IChiMyA+PiAoNjQgLSAzMCkpKSBeIGIyOworCisJYjUgKz0gazggKyB0MDsKKwliNCArPSBiNSArIGs3OworCWI1ID0gKChiNSA8PCAzNCkgfCAoYjUgPj4gKDY0IC0gMzQpKSkgXiBiNDsKKworCWI3ICs9IGsxICsgMzsKKwliNiArPSBiNyArIGswICsgdDE7CisJYjcgPSAoKGI3IDw8IDI0KSB8IChiNyA+PiAoNjQgLSAyNCkpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDUwKSB8IChiNyA+PiAoNjQgLSA1MCkpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDEwKSB8IChiNSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE3KSB8IChiMyA+PiAoNjQgLSAxNykpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDI5KSB8IChiMyA+PiAoNjQgLSAyOSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM5KSB8IChiNSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQzKSB8IChiNyA+PiAoNjQgLSA0MykpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDgpIHwgKGIxID4+ICg2NCAtIDgpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzNSkgfCAoYjcgPj4gKDY0IC0gMzUpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NikgfCAoYjUgPj4gKDY0IC0gNTYpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiNDsKKworCWIxICs9IGs1OworCWIwICs9IGIxICsgazQ7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGIwOworCisJYjMgKz0gazc7CisJYjIgKz0gYjMgKyBrNjsKKwliMyA9ICgoYjMgPDwgMzYpIHwgKGIzID4+ICg2NCAtIDM2KSkpIF4gYjI7CisKKwliNSArPSBrMCArIHQxOworCWI0ICs9IGI1ICsgazg7CisJYjUgPSAoKGI1IDw8IDE5KSB8IChiNSA+PiAoNjQgLSAxOSkpKSBeIGI0OworCisJYjcgKz0gazIgKyA0OworCWI2ICs9IGI3ICsgazEgKyB0MjsKKwliNyA9ICgoYjcgPDwgMzcpIHwgKGI3ID4+ICg2NCAtIDM3KSkpIF4gYjY7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMzMpIHwgKGIxID4+ICg2NCAtIDMzKSkpIF4gYjI7CisKKwliNCArPSBiNzsKKwliNyA9ICgoYjcgPDwgMjcpIHwgKGI3ID4+ICg2NCAtIDI3KSkpIF4gYjQ7CisKKwliNiArPSBiNTsKKwliNSA9ICgoYjUgPDwgMTQpIHwgKGI1ID4+ICg2NCAtIDE0KSkpIF4gYjY7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDIpIHwgKGIzID4+ICg2NCAtIDQyKSkpIF4gYjA7CisKKwliNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTcpIHwgKGIxID4+ICg2NCAtIDE3KSkpIF4gYjQ7CisKKwliNiArPSBiMzsKKwliMyA9ICgoYjMgPDwgNDkpIHwgKGIzID4+ICg2NCAtIDQ5KSkpIF4gYjY7CisKKwliMCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMzYpIHwgKGI1ID4+ICg2NCAtIDM2KSkpIF4gYjA7CisKKwliMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgMzkpIHwgKGI3ID4+ICg2NCAtIDM5KSkpIF4gYjI7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgNDQpIHwgKGIxID4+ICg2NCAtIDQ0KSkpIF4gYjY7CisKKwliMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgOSkgfCAoYjcgPj4gKDY0IC0gOSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDU0KSB8IChiNSA+PiAoNjQgLSA1NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDU2KSB8IChiMyA+PiAoNjQgLSA1NikpKSBeIGI0OworCisJYjEgKz0gazY7CisJYjAgKz0gYjEgKyBrNTsKKwliMSA9ICgoYjEgPDwgMzkpIHwgKGIxID4+ICg2NCAtIDM5KSkpIF4gYjA7CisKKwliMyArPSBrODsKKwliMiArPSBiMyArIGs3OworCWIzID0gKChiMyA8PCAzMCkgfCAoYjMgPj4gKDY0IC0gMzApKSkgXiBiMjsKKworCWI1ICs9IGsxICsgdDI7CisJYjQgKz0gYjUgKyBrMDsKKwliNSA9ICgoYjUgPDwgMzQpIHwgKGI1ID4+ICg2NCAtIDM0KSkpIF4gYjQ7CisKKwliNyArPSBrMyArIDU7CisJYjYgKz0gYjcgKyBrMiArIHQwOworCWI3ID0gKChiNyA8PCAyNCkgfCAoYjcgPj4gKDY0IC0gMjQpKSkgXiBiNjsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAxMykgfCAoYjEgPj4gKDY0IC0gMTMpKSkgXiBiMjsKKworCWI0ICs9IGI3OworCWI3ID0gKChiNyA8PCA1MCkgfCAoYjcgPj4gKDY0IC0gNTApKSkgXiBiNDsKKworCWI2ICs9IGI1OworCWI1ID0gKChiNSA8PCAxMCkgfCAoYjUgPj4gKDY0IC0gMTApKSkgXiBiNjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCAxNykgfCAoYjMgPj4gKDY0IC0gMTcpKSkgXiBiMDsKKworCWI0ICs9IGIxOworCWIxID0gKChiMSA8PCAyNSkgfCAoYjEgPj4gKDY0IC0gMjUpKSkgXiBiNDsKKworCWI2ICs9IGIzOworCWIzID0gKChiMyA8PCAyOSkgfCAoYjMgPj4gKDY0IC0gMjkpKSkgXiBiNjsKKworCWIwICs9IGI1OworCWI1ID0gKChiNSA8PCAzOSkgfCAoYjUgPj4gKDY0IC0gMzkpKSkgXiBiMDsKKworCWIyICs9IGI3OworCWI3ID0gKChiNyA8PCA0MykgfCAoYjcgPj4gKDY0IC0gNDMpKSkgXiBiMjsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA4KSB8IChiMSA+PiAoNjQgLSA4KSkpIF4gYjY7CisKKwliMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgMzUpIHwgKGI3ID4+ICg2NCAtIDM1KSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNTYpIHwgKGI1ID4+ICg2NCAtIDU2KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjIpIHwgKGIzID4+ICg2NCAtIDIyKSkpIF4gYjQ7CisKKwliMSArPSBrNzsKKwliMCArPSBiMSArIGs2OworCWIxID0gKChiMSA8PCA0NikgfCAoYjEgPj4gKDY0IC0gNDYpKSkgXiBiMDsKKworCWIzICs9IGswOworCWIyICs9IGIzICsgazg7CisJYjMgPSAoKGIzIDw8IDM2KSB8IChiMyA+PiAoNjQgLSAzNikpKSBeIGIyOworCisJYjUgKz0gazIgKyB0MDsKKwliNCArPSBiNSArIGsxOworCWI1ID0gKChiNSA8PCAxOSkgfCAoYjUgPj4gKDY0IC0gMTkpKSkgXiBiNDsKKworCWI3ICs9IGs0ICsgNjsKKwliNiArPSBiNyArIGszICsgdDE7CisJYjcgPSAoKGI3IDw8IDM3KSB8IChiNyA+PiAoNjQgLSAzNykpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMzKSB8IChiMSA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI3KSB8IChiNyA+PiAoNjQgLSAyNykpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDE0KSB8IChiNSA+PiAoNjQgLSAxNCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQyKSB8IChiMyA+PiAoNjQgLSA0MikpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDE3KSB8IChiMSA+PiAoNjQgLSAxNykpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ5KSB8IChiMyA+PiAoNjQgLSA0OSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM2KSB8IChiNSA+PiAoNjQgLSAzNikpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM5KSB8IChiNyA+PiAoNjQgLSAzOSkpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ0KSB8IChiMSA+PiAoNjQgLSA0NCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDkpIHwgKGI3ID4+ICg2NCAtIDkpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NCkgfCAoYjUgPj4gKDY0IC0gNTQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1NikgfCAoYjMgPj4gKDY0IC0gNTYpKSkgXiBiNDsKKworCWIxICs9IGs4OworCWIwICs9IGIxICsgazc7CisJYjEgPSAoKGIxIDw8IDM5KSB8IChiMSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjMgKz0gazE7CisJYjIgKz0gYjMgKyBrMDsKKwliMyA9ICgoYjMgPDwgMzApIHwgKGIzID4+ICg2NCAtIDMwKSkpIF4gYjI7CisKKwliNSArPSBrMyArIHQxOworCWI0ICs9IGI1ICsgazI7CisJYjUgPSAoKGI1IDw8IDM0KSB8IChiNSA+PiAoNjQgLSAzNCkpKSBeIGI0OworCisJYjcgKz0gazUgKyA3OworCWI2ICs9IGI3ICsgazQgKyB0MjsKKwliNyA9ICgoYjcgPDwgMjQpIHwgKGI3ID4+ICg2NCAtIDI0KSkpIF4gYjY7CisKKwliMiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjI7CisKKwliNCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNTApIHwgKGI3ID4+ICg2NCAtIDUwKSkpIF4gYjQ7CisKKwliNiArPSBiNTsKKwliNSA9ICgoYjUgPDwgMTApIHwgKGI1ID4+ICg2NCAtIDEwKSkpIF4gYjY7CisKKwliMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTcpIHwgKGIzID4+ICg2NCAtIDE3KSkpIF4gYjA7CisKKwliNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjUpIHwgKGIxID4+ICg2NCAtIDI1KSkpIF4gYjQ7CisKKwliNiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMjkpIHwgKGIzID4+ICg2NCAtIDI5KSkpIF4gYjY7CisKKwliMCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMzkpIHwgKGI1ID4+ICg2NCAtIDM5KSkpIF4gYjA7CisKKwliMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDMpIHwgKGI3ID4+ICg2NCAtIDQzKSkpIF4gYjI7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgOCkgfCAoYjEgPj4gKDY0IC0gOCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM1KSB8IChiNyA+PiAoNjQgLSAzNSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDU2KSB8IChiNSA+PiAoNjQgLSA1NikpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDIyKSB8IChiMyA+PiAoNjQgLSAyMikpKSBeIGI0OworCisJYjEgKz0gazA7CisJYjAgKz0gYjEgKyBrODsKKwliMSA9ICgoYjEgPDwgNDYpIHwgKGIxID4+ICg2NCAtIDQ2KSkpIF4gYjA7CisKKwliMyArPSBrMjsKKwliMiArPSBiMyArIGsxOworCWIzID0gKChiMyA8PCAzNikgfCAoYjMgPj4gKDY0IC0gMzYpKSkgXiBiMjsKKworCWI1ICs9IGs0ICsgdDI7CisJYjQgKz0gYjUgKyBrMzsKKwliNSA9ICgoYjUgPDwgMTkpIHwgKGI1ID4+ICg2NCAtIDE5KSkpIF4gYjQ7CisKKwliNyArPSBrNiArIDg7CisJYjYgKz0gYjcgKyBrNSArIHQwOworCWI3ID0gKChiNyA8PCAzNykgfCAoYjcgPj4gKDY0IC0gMzcpKSkgXiBiNjsKKworCWIyICs9IGIxOworCWIxID0gKChiMSA8PCAzMykgfCAoYjEgPj4gKDY0IC0gMzMpKSkgXiBiMjsKKworCWI0ICs9IGI3OworCWI3ID0gKChiNyA8PCAyNykgfCAoYjcgPj4gKDY0IC0gMjcpKSkgXiBiNDsKKworCWI2ICs9IGI1OworCWI1ID0gKChiNSA8PCAxNCkgfCAoYjUgPj4gKDY0IC0gMTQpKSkgXiBiNjsKKworCWIwICs9IGIzOworCWIzID0gKChiMyA8PCA0MikgfCAoYjMgPj4gKDY0IC0gNDIpKSkgXiBiMDsKKworCWI0ICs9IGIxOworCWIxID0gKChiMSA8PCAxNykgfCAoYjEgPj4gKDY0IC0gMTcpKSkgXiBiNDsKKworCWI2ICs9IGIzOworCWIzID0gKChiMyA8PCA0OSkgfCAoYjMgPj4gKDY0IC0gNDkpKSkgXiBiNjsKKworCWIwICs9IGI1OworCWI1ID0gKChiNSA8PCAzNikgfCAoYjUgPj4gKDY0IC0gMzYpKSkgXiBiMDsKKworCWIyICs9IGI3OworCWI3ID0gKChiNyA8PCAzOSkgfCAoYjcgPj4gKDY0IC0gMzkpKSkgXiBiMjsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA0NCkgfCAoYjEgPj4gKDY0IC0gNDQpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCA5KSB8IChiNyA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNTQpIHwgKGI1ID4+ICg2NCAtIDU0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTYpIHwgKGIzID4+ICg2NCAtIDU2KSkpIF4gYjQ7CisKKwliMSArPSBrMTsKKwliMCArPSBiMSArIGswOworCWIxID0gKChiMSA8PCAzOSkgfCAoYjEgPj4gKDY0IC0gMzkpKSkgXiBiMDsKKworCWIzICs9IGszOworCWIyICs9IGIzICsgazI7CisJYjMgPSAoKGIzIDw8IDMwKSB8IChiMyA+PiAoNjQgLSAzMCkpKSBeIGIyOworCisJYjUgKz0gazUgKyB0MDsKKwliNCArPSBiNSArIGs0OworCWI1ID0gKChiNSA8PCAzNCkgfCAoYjUgPj4gKDY0IC0gMzQpKSkgXiBiNDsKKworCWI3ICs9IGs3ICsgOTsKKwliNiArPSBiNyArIGs2ICsgdDE7CisJYjcgPSAoKGI3IDw8IDI0KSB8IChiNyA+PiAoNjQgLSAyNCkpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDUwKSB8IChiNyA+PiAoNjQgLSA1MCkpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDEwKSB8IChiNSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE3KSB8IChiMyA+PiAoNjQgLSAxNykpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDI5KSB8IChiMyA+PiAoNjQgLSAyOSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM5KSB8IChiNSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQzKSB8IChiNyA+PiAoNjQgLSA0MykpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDgpIHwgKGIxID4+ICg2NCAtIDgpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzNSkgfCAoYjcgPj4gKDY0IC0gMzUpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NikgfCAoYjUgPj4gKDY0IC0gNTYpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiNDsKKworCWIxICs9IGsyOworCWIwICs9IGIxICsgazE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGIwOworCisJYjMgKz0gazQ7CisJYjIgKz0gYjMgKyBrMzsKKwliMyA9ICgoYjMgPDwgMzYpIHwgKGIzID4+ICg2NCAtIDM2KSkpIF4gYjI7CisKKwliNSArPSBrNiArIHQxOworCWI0ICs9IGI1ICsgazU7CisJYjUgPSAoKGI1IDw8IDE5KSB8IChiNSA+PiAoNjQgLSAxOSkpKSBeIGI0OworCisJYjcgKz0gazggKyAxMDsKKwliNiArPSBiNyArIGs3ICsgdDI7CisJYjcgPSAoKGI3IDw8IDM3KSB8IChiNyA+PiAoNjQgLSAzNykpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMzKSB8IChiMSA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI3KSB8IChiNyA+PiAoNjQgLSAyNykpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDE0KSB8IChiNSA+PiAoNjQgLSAxNCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQyKSB8IChiMyA+PiAoNjQgLSA0MikpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDE3KSB8IChiMSA+PiAoNjQgLSAxNykpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ5KSB8IChiMyA+PiAoNjQgLSA0OSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM2KSB8IChiNSA+PiAoNjQgLSAzNikpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM5KSB8IChiNyA+PiAoNjQgLSAzOSkpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ0KSB8IChiMSA+PiAoNjQgLSA0NCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDkpIHwgKGI3ID4+ICg2NCAtIDkpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NCkgfCAoYjUgPj4gKDY0IC0gNTQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1NikgfCAoYjMgPj4gKDY0IC0gNTYpKSkgXiBiNDsKKworCWIxICs9IGszOworCWIwICs9IGIxICsgazI7CisJYjEgPSAoKGIxIDw8IDM5KSB8IChiMSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjMgKz0gazU7CisJYjIgKz0gYjMgKyBrNDsKKwliMyA9ICgoYjMgPDwgMzApIHwgKGIzID4+ICg2NCAtIDMwKSkpIF4gYjI7CisKKwliNSArPSBrNyArIHQyOworCWI0ICs9IGI1ICsgazY7CisJYjUgPSAoKGI1IDw8IDM0KSB8IChiNSA+PiAoNjQgLSAzNCkpKSBeIGI0OworCisJYjcgKz0gazAgKyAxMTsKKwliNiArPSBiNyArIGs4ICsgdDA7CisJYjcgPSAoKGI3IDw8IDI0KSB8IChiNyA+PiAoNjQgLSAyNCkpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDUwKSB8IChiNyA+PiAoNjQgLSA1MCkpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDEwKSB8IChiNSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE3KSB8IChiMyA+PiAoNjQgLSAxNykpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDI5KSB8IChiMyA+PiAoNjQgLSAyOSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM5KSB8IChiNSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQzKSB8IChiNyA+PiAoNjQgLSA0MykpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDgpIHwgKGIxID4+ICg2NCAtIDgpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzNSkgfCAoYjcgPj4gKDY0IC0gMzUpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NikgfCAoYjUgPj4gKDY0IC0gNTYpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiNDsKKworCWIxICs9IGs0OworCWIwICs9IGIxICsgazM7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGIwOworCisJYjMgKz0gazY7CisJYjIgKz0gYjMgKyBrNTsKKwliMyA9ICgoYjMgPDwgMzYpIHwgKGIzID4+ICg2NCAtIDM2KSkpIF4gYjI7CisKKwliNSArPSBrOCArIHQwOworCWI0ICs9IGI1ICsgazc7CisJYjUgPSAoKGI1IDw8IDE5KSB8IChiNSA+PiAoNjQgLSAxOSkpKSBeIGI0OworCisJYjcgKz0gazEgKyAxMjsKKwliNiArPSBiNyArIGswICsgdDE7CisJYjcgPSAoKGI3IDw8IDM3KSB8IChiNyA+PiAoNjQgLSAzNykpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMzKSB8IChiMSA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI3KSB8IChiNyA+PiAoNjQgLSAyNykpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDE0KSB8IChiNSA+PiAoNjQgLSAxNCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQyKSB8IChiMyA+PiAoNjQgLSA0MikpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDE3KSB8IChiMSA+PiAoNjQgLSAxNykpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ5KSB8IChiMyA+PiAoNjQgLSA0OSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM2KSB8IChiNSA+PiAoNjQgLSAzNikpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM5KSB8IChiNyA+PiAoNjQgLSAzOSkpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ0KSB8IChiMSA+PiAoNjQgLSA0NCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDkpIHwgKGI3ID4+ICg2NCAtIDkpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NCkgfCAoYjUgPj4gKDY0IC0gNTQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1NikgfCAoYjMgPj4gKDY0IC0gNTYpKSkgXiBiNDsKKworCWIxICs9IGs1OworCWIwICs9IGIxICsgazQ7CisJYjEgPSAoKGIxIDw8IDM5KSB8IChiMSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjMgKz0gazc7CisJYjIgKz0gYjMgKyBrNjsKKwliMyA9ICgoYjMgPDwgMzApIHwgKGIzID4+ICg2NCAtIDMwKSkpIF4gYjI7CisKKwliNSArPSBrMCArIHQxOworCWI0ICs9IGI1ICsgazg7CisJYjUgPSAoKGI1IDw8IDM0KSB8IChiNSA+PiAoNjQgLSAzNCkpKSBeIGI0OworCisJYjcgKz0gazIgKyAxMzsKKwliNiArPSBiNyArIGsxICsgdDI7CisJYjcgPSAoKGI3IDw8IDI0KSB8IChiNyA+PiAoNjQgLSAyNCkpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDUwKSB8IChiNyA+PiAoNjQgLSA1MCkpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDEwKSB8IChiNSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE3KSB8IChiMyA+PiAoNjQgLSAxNykpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDI5KSB8IChiMyA+PiAoNjQgLSAyOSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM5KSB8IChiNSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQzKSB8IChiNyA+PiAoNjQgLSA0MykpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDgpIHwgKGIxID4+ICg2NCAtIDgpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzNSkgfCAoYjcgPj4gKDY0IC0gMzUpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NikgfCAoYjUgPj4gKDY0IC0gNTYpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiNDsKKworCWIxICs9IGs2OworCWIwICs9IGIxICsgazU7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGIwOworCisJYjMgKz0gazg7CisJYjIgKz0gYjMgKyBrNzsKKwliMyA9ICgoYjMgPDwgMzYpIHwgKGIzID4+ICg2NCAtIDM2KSkpIF4gYjI7CisKKwliNSArPSBrMSArIHQyOworCWI0ICs9IGI1ICsgazA7CisJYjUgPSAoKGI1IDw8IDE5KSB8IChiNSA+PiAoNjQgLSAxOSkpKSBeIGI0OworCisJYjcgKz0gazMgKyAxNDsKKwliNiArPSBiNyArIGsyICsgdDA7CisJYjcgPSAoKGI3IDw8IDM3KSB8IChiNyA+PiAoNjQgLSAzNykpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMzKSB8IChiMSA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI3KSB8IChiNyA+PiAoNjQgLSAyNykpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDE0KSB8IChiNSA+PiAoNjQgLSAxNCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQyKSB8IChiMyA+PiAoNjQgLSA0MikpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDE3KSB8IChiMSA+PiAoNjQgLSAxNykpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ5KSB8IChiMyA+PiAoNjQgLSA0OSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM2KSB8IChiNSA+PiAoNjQgLSAzNikpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM5KSB8IChiNyA+PiAoNjQgLSAzOSkpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ0KSB8IChiMSA+PiAoNjQgLSA0NCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDkpIHwgKGI3ID4+ICg2NCAtIDkpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NCkgfCAoYjUgPj4gKDY0IC0gNTQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1NikgfCAoYjMgPj4gKDY0IC0gNTYpKSkgXiBiNDsKKworCWIxICs9IGs3OworCWIwICs9IGIxICsgazY7CisJYjEgPSAoKGIxIDw8IDM5KSB8IChiMSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjMgKz0gazA7CisJYjIgKz0gYjMgKyBrODsKKwliMyA9ICgoYjMgPDwgMzApIHwgKGIzID4+ICg2NCAtIDMwKSkpIF4gYjI7CisKKwliNSArPSBrMiArIHQwOworCWI0ICs9IGI1ICsgazE7CisJYjUgPSAoKGI1IDw8IDM0KSB8IChiNSA+PiAoNjQgLSAzNCkpKSBeIGI0OworCisJYjcgKz0gazQgKyAxNTsKKwliNiArPSBiNyArIGszICsgdDE7CisJYjcgPSAoKGI3IDw8IDI0KSB8IChiNyA+PiAoNjQgLSAyNCkpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDUwKSB8IChiNyA+PiAoNjQgLSA1MCkpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDEwKSB8IChiNSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE3KSB8IChiMyA+PiAoNjQgLSAxNykpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDI5KSB8IChiMyA+PiAoNjQgLSAyOSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM5KSB8IChiNSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQzKSB8IChiNyA+PiAoNjQgLSA0MykpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDgpIHwgKGIxID4+ICg2NCAtIDgpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzNSkgfCAoYjcgPj4gKDY0IC0gMzUpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NikgfCAoYjUgPj4gKDY0IC0gNTYpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiNDsKKworCWIxICs9IGs4OworCWIwICs9IGIxICsgazc7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGIwOworCisJYjMgKz0gazE7CisJYjIgKz0gYjMgKyBrMDsKKwliMyA9ICgoYjMgPDwgMzYpIHwgKGIzID4+ICg2NCAtIDM2KSkpIF4gYjI7CisKKwliNSArPSBrMyArIHQxOworCWI0ICs9IGI1ICsgazI7CisJYjUgPSAoKGI1IDw8IDE5KSB8IChiNSA+PiAoNjQgLSAxOSkpKSBeIGI0OworCisJYjcgKz0gazUgKyAxNjsKKwliNiArPSBiNyArIGs0ICsgdDI7CisJYjcgPSAoKGI3IDw8IDM3KSB8IChiNyA+PiAoNjQgLSAzNykpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDMzKSB8IChiMSA+PiAoNjQgLSAzMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI3KSB8IChiNyA+PiAoNjQgLSAyNykpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDE0KSB8IChiNSA+PiAoNjQgLSAxNCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQyKSB8IChiMyA+PiAoNjQgLSA0MikpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDE3KSB8IChiMSA+PiAoNjQgLSAxNykpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ5KSB8IChiMyA+PiAoNjQgLSA0OSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM2KSB8IChiNSA+PiAoNjQgLSAzNikpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDM5KSB8IChiNyA+PiAoNjQgLSAzOSkpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ0KSB8IChiMSA+PiAoNjQgLSA0NCkpKSBeIGI2OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDkpIHwgKGI3ID4+ICg2NCAtIDkpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NCkgfCAoYjUgPj4gKDY0IC0gNTQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1NikgfCAoYjMgPj4gKDY0IC0gNTYpKSkgXiBiNDsKKworCWIxICs9IGswOworCWIwICs9IGIxICsgazg7CisJYjEgPSAoKGIxIDw8IDM5KSB8IChiMSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjMgKz0gazI7CisJYjIgKz0gYjMgKyBrMTsKKwliMyA9ICgoYjMgPDwgMzApIHwgKGIzID4+ICg2NCAtIDMwKSkpIF4gYjI7CisKKwliNSArPSBrNCArIHQyOworCWI0ICs9IGI1ICsgazM7CisJYjUgPSAoKGI1IDw8IDM0KSB8IChiNSA+PiAoNjQgLSAzNCkpKSBeIGI0OworCisJYjcgKz0gazYgKyAxNzsKKwliNiArPSBiNyArIGs1ICsgdDA7CisJYjcgPSAoKGI3IDw8IDI0KSB8IChiNyA+PiAoNjQgLSAyNCkpKSBeIGI2OworCisJYjIgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjQgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDUwKSB8IChiNyA+PiAoNjQgLSA1MCkpKSBeIGI0OworCisJYjYgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDEwKSB8IChiNSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE3KSB8IChiMyA+PiAoNjQgLSAxNykpKSBeIGIwOworCisJYjQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDI1KSB8IChiMSA+PiAoNjQgLSAyNSkpKSBeIGI0OworCisJYjYgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDI5KSB8IChiMyA+PiAoNjQgLSAyOSkpKSBeIGI2OworCisJYjAgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDM5KSB8IChiNSA+PiAoNjQgLSAzOSkpKSBeIGIwOworCisJYjIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQzKSB8IChiNyA+PiAoNjQgLSA0MykpKSBeIGIyOworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDgpIHwgKGIxID4+ICg2NCAtIDgpKSkgXiBiNjsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzNSkgfCAoYjcgPj4gKDY0IC0gMzUpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA1NikgfCAoYjUgPj4gKDY0IC0gNTYpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCAyMikgfCAoYjMgPj4gKDY0IC0gMjIpKSkgXiBiNDsKKworCW91dHB1dFswXSA9IGIwICsgazA7CisJb3V0cHV0WzFdID0gYjEgKyBrMTsKKwlvdXRwdXRbMl0gPSBiMiArIGsyOworCW91dHB1dFszXSA9IGIzICsgazM7CisJb3V0cHV0WzRdID0gYjQgKyBrNDsKKwlvdXRwdXRbNV0gPSBiNSArIGs1ICsgdDA7CisJb3V0cHV0WzZdID0gYjYgKyBrNiArIHQxOworCW91dHB1dFs3XSA9IGI3ICsgazcgKyAxODsKK30KKwordm9pZCB0aHJlZWZpc2hfZGVjcnlwdF81MTIoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW5wdXQsCisJCQkgICB1NjQgKm91dHB1dCkKK3sKKwl1NjQgYjAgPSBpbnB1dFswXSwgYjEgPSBpbnB1dFsxXSwKKwkgICAgYjIgPSBpbnB1dFsyXSwgYjMgPSBpbnB1dFszXSwKKwkgICAgYjQgPSBpbnB1dFs0XSwgYjUgPSBpbnB1dFs1XSwKKwkgICAgYjYgPSBpbnB1dFs2XSwgYjcgPSBpbnB1dFs3XTsKKwl1NjQgazAgPSBrZXlfY3R4LT5rZXlbMF0sIGsxID0ga2V5X2N0eC0+a2V5WzFdLAorCSAgICBrMiA9IGtleV9jdHgtPmtleVsyXSwgazMgPSBrZXlfY3R4LT5rZXlbM10sCisJICAgIGs0ID0ga2V5X2N0eC0+a2V5WzRdLCBrNSA9IGtleV9jdHgtPmtleVs1XSwKKwkgICAgazYgPSBrZXlfY3R4LT5rZXlbNl0sIGs3ID0ga2V5X2N0eC0+a2V5WzddLAorCSAgICBrOCA9IGtleV9jdHgtPmtleVs4XTsKKwl1NjQgdDAgPSBrZXlfY3R4LT50d2Vha1swXSwgdDEgPSBrZXlfY3R4LT50d2Vha1sxXSwKKwkgICAgdDIgPSBrZXlfY3R4LT50d2Vha1syXTsKKworCXU2NCB0bXA7CisKKwliMCAtPSBrMDsKKwliMSAtPSBrMTsKKwliMiAtPSBrMjsKKwliMyAtPSBrMzsKKwliNCAtPSBrNDsKKwliNSAtPSBrNSArIHQwOworCWI2IC09IGs2ICsgdDE7CisJYjcgLT0gazcgKyAxODsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiA0MykgfCAodG1wIDw8ICg2NCAtIDQzKSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiAyOSkgfCAodG1wIDw8ICg2NCAtIDI5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiA1MCkgfCAodG1wIDw8ICg2NCAtIDUwKSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjYgLT0gYjcgKyBrNSArIHQwOworCWI3IC09IGs2ICsgMTc7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjQgLT0gYjUgKyBrMzsKKwliNSAtPSBrNCArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzApIHwgKHRtcCA8PCAoNjQgLSAzMCkpOworCWIyIC09IGIzICsgazE7CisJYjMgLT0gazI7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjEgKyBrODsKKwliMSAtPSBrMDsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU0KSB8ICh0bXAgPDwgKDY0IC0gNTQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiAyNykgfCAodG1wIDw8ICg2NCAtIDI3KSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjYgLT0gYjcgKyBrNCArIHQyOworCWI3IC09IGs1ICsgMTY7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjQgLT0gYjUgKyBrMjsKKwliNSAtPSBrMyArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzYpIHwgKHRtcCA8PCAoNjQgLSAzNikpOworCWIyIC09IGIzICsgazA7CisJYjMgLT0gazE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjEgKyBrNzsKKwliMSAtPSBrODsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiA0MykgfCAodG1wIDw8ICg2NCAtIDQzKSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiAyOSkgfCAodG1wIDw8ICg2NCAtIDI5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiA1MCkgfCAodG1wIDw8ICg2NCAtIDUwKSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjYgLT0gYjcgKyBrMyArIHQxOworCWI3IC09IGs0ICsgMTU7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjQgLT0gYjUgKyBrMTsKKwliNSAtPSBrMiArIHQwOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzApIHwgKHRtcCA8PCAoNjQgLSAzMCkpOworCWIyIC09IGIzICsgazg7CisJYjMgLT0gazA7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjEgKyBrNjsKKwliMSAtPSBrNzsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU0KSB8ICh0bXAgPDwgKDY0IC0gNTQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiAyNykgfCAodG1wIDw8ICg2NCAtIDI3KSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjYgLT0gYjcgKyBrMiArIHQwOworCWI3IC09IGszICsgMTQ7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjQgLT0gYjUgKyBrMDsKKwliNSAtPSBrMSArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzYpIHwgKHRtcCA8PCAoNjQgLSAzNikpOworCWIyIC09IGIzICsgazc7CisJYjMgLT0gazg7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjEgKyBrNTsKKwliMSAtPSBrNjsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiA0MykgfCAodG1wIDw8ICg2NCAtIDQzKSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiAyOSkgfCAodG1wIDw8ICg2NCAtIDI5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiA1MCkgfCAodG1wIDw8ICg2NCAtIDUwKSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjYgLT0gYjcgKyBrMSArIHQyOworCWI3IC09IGsyICsgMTM7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjQgLT0gYjUgKyBrODsKKwliNSAtPSBrMCArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzApIHwgKHRtcCA8PCAoNjQgLSAzMCkpOworCWIyIC09IGIzICsgazY7CisJYjMgLT0gazc7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjEgKyBrNDsKKwliMSAtPSBrNTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU0KSB8ICh0bXAgPDwgKDY0IC0gNTQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiAyNykgfCAodG1wIDw8ICg2NCAtIDI3KSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjYgLT0gYjcgKyBrMCArIHQxOworCWI3IC09IGsxICsgMTI7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjQgLT0gYjUgKyBrNzsKKwliNSAtPSBrOCArIHQwOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzYpIHwgKHRtcCA8PCAoNjQgLSAzNikpOworCWIyIC09IGIzICsgazU7CisJYjMgLT0gazY7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjEgKyBrMzsKKwliMSAtPSBrNDsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiA0MykgfCAodG1wIDw8ICg2NCAtIDQzKSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiAyOSkgfCAodG1wIDw8ICg2NCAtIDI5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiA1MCkgfCAodG1wIDw8ICg2NCAtIDUwKSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjYgLT0gYjcgKyBrOCArIHQwOworCWI3IC09IGswICsgMTE7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjQgLT0gYjUgKyBrNjsKKwliNSAtPSBrNyArIHQyOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzApIHwgKHRtcCA8PCAoNjQgLSAzMCkpOworCWIyIC09IGIzICsgazQ7CisJYjMgLT0gazU7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjEgKyBrMjsKKwliMSAtPSBrMzsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU0KSB8ICh0bXAgPDwgKDY0IC0gNTQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiAyNykgfCAodG1wIDw8ICg2NCAtIDI3KSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjYgLT0gYjcgKyBrNyArIHQyOworCWI3IC09IGs4ICsgMTA7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjQgLT0gYjUgKyBrNTsKKwliNSAtPSBrNiArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzYpIHwgKHRtcCA8PCAoNjQgLSAzNikpOworCWIyIC09IGIzICsgazM7CisJYjMgLT0gazQ7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjEgKyBrMTsKKwliMSAtPSBrMjsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiA0MykgfCAodG1wIDw8ICg2NCAtIDQzKSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiAyOSkgfCAodG1wIDw8ICg2NCAtIDI5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiA1MCkgfCAodG1wIDw8ICg2NCAtIDUwKSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjYgLT0gYjcgKyBrNiArIHQxOworCWI3IC09IGs3ICsgOTsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliNCAtPSBiNSArIGs0OworCWI1IC09IGs1ICsgdDA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjIgLT0gYjMgKyBrMjsKKwliMyAtPSBrMzsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDM5KSB8ICh0bXAgPDwgKDY0IC0gMzkpKTsKKwliMCAtPSBiMSArIGswOworCWIxIC09IGsxOworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNTQpIHwgKHRtcCA8PCAoNjQgLSA1NCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gOSkgfCAodG1wIDw8ICg2NCAtIDkpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGI3IF4gYjI7CisJYjcgPSAodG1wID4+IDM5KSB8ICh0bXAgPDwgKDY0IC0gMzkpKTsKKwliMiAtPSBiNzsKKworCXRtcCA9IGI1IF4gYjA7CisJYjUgPSAodG1wID4+IDM2KSB8ICh0bXAgPDwgKDY0IC0gMzYpKTsKKwliMCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjY7CisJYjMgPSAodG1wID4+IDQ5KSB8ICh0bXAgPDwgKDY0IC0gNDkpKTsKKwliNiAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjQ7CisJYjEgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliNCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQyKSB8ICh0bXAgPDwgKDY0IC0gNDIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjY7CisJYjUgPSAodG1wID4+IDE0KSB8ICh0bXAgPDwgKDY0IC0gMTQpKTsKKwliNiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjQ7CisJYjcgPSAodG1wID4+IDI3KSB8ICh0bXAgPDwgKDY0IC0gMjcpKTsKKwliNCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMzKSB8ICh0bXAgPDwgKDY0IC0gMzMpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliNiAtPSBiNyArIGs1ICsgdDA7CisJYjcgLT0gazYgKyA4OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMTkpIHwgKHRtcCA8PCAoNjQgLSAxOSkpOworCWI0IC09IGI1ICsgazM7CisJYjUgLT0gazQgKyB0MjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDM2KSB8ICh0bXAgPDwgKDY0IC0gMzYpKTsKKwliMiAtPSBiMyArIGsxOworCWIzIC09IGsyOworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWIwIC09IGIxICsgazg7CisJYjEgLT0gazA7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA1NikgfCAodG1wIDw8ICg2NCAtIDU2KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI2IC09IGIxOworCisJdG1wID0gYjcgXiBiMjsKKwliNyA9ICh0bXAgPj4gNDMpIHwgKHRtcCA8PCAoNjQgLSA0MykpOworCWIyIC09IGI3OworCisJdG1wID0gYjUgXiBiMDsKKwliNSA9ICh0bXAgPj4gMzkpIHwgKHRtcCA8PCAoNjQgLSAzOSkpOworCWIwIC09IGI1OworCisJdG1wID0gYjMgXiBiNjsKKwliMyA9ICh0bXAgPj4gMjkpIHwgKHRtcCA8PCAoNjQgLSAyOSkpOworCWI2IC09IGIzOworCisJdG1wID0gYjEgXiBiNDsKKwliMSA9ICh0bXAgPj4gMjUpIHwgKHRtcCA8PCAoNjQgLSAyNSkpOworCWI0IC09IGIxOworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIwIC09IGIzOworCisJdG1wID0gYjUgXiBiNjsKKwliNSA9ICh0bXAgPj4gMTApIHwgKHRtcCA8PCAoNjQgLSAxMCkpOworCWI2IC09IGI1OworCisJdG1wID0gYjcgXiBiNDsKKwliNyA9ICh0bXAgPj4gNTApIHwgKHRtcCA8PCAoNjQgLSA1MCkpOworCWI0IC09IGI3OworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWIyIC09IGIxOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMjQpIHwgKHRtcCA8PCAoNjQgLSAyNCkpOworCWI2IC09IGI3ICsgazQgKyB0MjsKKwliNyAtPSBrNSArIDc7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjQgLT0gYjUgKyBrMjsKKwliNSAtPSBrMyArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzApIHwgKHRtcCA8PCAoNjQgLSAzMCkpOworCWIyIC09IGIzICsgazA7CisJYjMgLT0gazE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjEgKyBrNzsKKwliMSAtPSBrODsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU0KSB8ICh0bXAgPDwgKDY0IC0gNTQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiAyNykgfCAodG1wIDw8ICg2NCAtIDI3KSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjYgLT0gYjcgKyBrMyArIHQxOworCWI3IC09IGs0ICsgNjsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliNCAtPSBiNSArIGsxOworCWI1IC09IGsyICsgdDA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjIgLT0gYjMgKyBrODsKKwliMyAtPSBrMDsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliMCAtPSBiMSArIGs2OworCWIxIC09IGs3OworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gMjIpIHwgKHRtcCA8PCAoNjQgLSAyMikpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzUpIHwgKHRtcCA8PCAoNjQgLSAzNSkpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gOCkgfCAodG1wIDw8ICg2NCAtIDgpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGI3IF4gYjI7CisJYjcgPSAodG1wID4+IDQzKSB8ICh0bXAgPDwgKDY0IC0gNDMpKTsKKwliMiAtPSBiNzsKKworCXRtcCA9IGI1IF4gYjA7CisJYjUgPSAodG1wID4+IDM5KSB8ICh0bXAgPDwgKDY0IC0gMzkpKTsKKwliMCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjY7CisJYjMgPSAodG1wID4+IDI5KSB8ICh0bXAgPDwgKDY0IC0gMjkpKTsKKwliNiAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjQ7CisJYjEgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliNCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjY7CisJYjUgPSAodG1wID4+IDEwKSB8ICh0bXAgPDwgKDY0IC0gMTApKTsKKwliNiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjQ7CisJYjcgPSAodG1wID4+IDUwKSB8ICh0bXAgPDwgKDY0IC0gNTApKTsKKwliNCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliNiAtPSBiNyArIGsyICsgdDA7CisJYjcgLT0gazMgKyA1OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWI0IC09IGI1ICsgazA7CisJYjUgLT0gazEgKyB0MjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDMwKSB8ICh0bXAgPDwgKDY0IC0gMzApKTsKKwliMiAtPSBiMyArIGs3OworCWIzIC09IGs4OworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gMzkpIHwgKHRtcCA8PCAoNjQgLSAzOSkpOworCWIwIC09IGIxICsgazU7CisJYjEgLT0gazY7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiA1NikgfCAodG1wIDw8ICg2NCAtIDU2KSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA1NCkgfCAodG1wIDw8ICg2NCAtIDU0KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWI2IC09IGIxOworCisJdG1wID0gYjcgXiBiMjsKKwliNyA9ICh0bXAgPj4gMzkpIHwgKHRtcCA8PCAoNjQgLSAzOSkpOworCWIyIC09IGI3OworCisJdG1wID0gYjUgXiBiMDsKKwliNSA9ICh0bXAgPj4gMzYpIHwgKHRtcCA8PCAoNjQgLSAzNikpOworCWIwIC09IGI1OworCisJdG1wID0gYjMgXiBiNjsKKwliMyA9ICh0bXAgPj4gNDkpIHwgKHRtcCA8PCAoNjQgLSA0OSkpOworCWI2IC09IGIzOworCisJdG1wID0gYjEgXiBiNDsKKwliMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWI0IC09IGIxOworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIwIC09IGIzOworCisJdG1wID0gYjUgXiBiNjsKKwliNSA9ICh0bXAgPj4gMTQpIHwgKHRtcCA8PCAoNjQgLSAxNCkpOworCWI2IC09IGI1OworCisJdG1wID0gYjcgXiBiNDsKKwliNyA9ICh0bXAgPj4gMjcpIHwgKHRtcCA8PCAoNjQgLSAyNykpOworCWI0IC09IGI3OworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIyIC09IGIxOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWI2IC09IGI3ICsgazEgKyB0MjsKKwliNyAtPSBrMiArIDQ7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjQgLT0gYjUgKyBrODsKKwliNSAtPSBrMCArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzYpIHwgKHRtcCA8PCAoNjQgLSAzNikpOworCWIyIC09IGIzICsgazY7CisJYjMgLT0gazc7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0NikgfCAodG1wIDw8ICg2NCAtIDQ2KSk7CisJYjAgLT0gYjEgKyBrNDsKKwliMSAtPSBrNTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiA0MykgfCAodG1wIDw8ICg2NCAtIDQzKSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiAyOSkgfCAodG1wIDw8ICg2NCAtIDI5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiA1MCkgfCAodG1wIDw8ICg2NCAtIDUwKSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjYgLT0gYjcgKyBrMCArIHQxOworCWI3IC09IGsxICsgMzsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliNCAtPSBiNSArIGs3OworCWI1IC09IGs4ICsgdDA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjIgLT0gYjMgKyBrNTsKKwliMyAtPSBrNjsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDM5KSB8ICh0bXAgPDwgKDY0IC0gMzkpKTsKKwliMCAtPSBiMSArIGszOworCWIxIC09IGs0OworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNTQpIHwgKHRtcCA8PCAoNjQgLSA1NCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gOSkgfCAodG1wIDw8ICg2NCAtIDkpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGI3IF4gYjI7CisJYjcgPSAodG1wID4+IDM5KSB8ICh0bXAgPDwgKDY0IC0gMzkpKTsKKwliMiAtPSBiNzsKKworCXRtcCA9IGI1IF4gYjA7CisJYjUgPSAodG1wID4+IDM2KSB8ICh0bXAgPDwgKDY0IC0gMzYpKTsKKwliMCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjY7CisJYjMgPSAodG1wID4+IDQ5KSB8ICh0bXAgPDwgKDY0IC0gNDkpKTsKKwliNiAtPSBiMzsKKworCXRtcCA9IGIxIF4gYjQ7CisJYjEgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliNCAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjA7CisJYjMgPSAodG1wID4+IDQyKSB8ICh0bXAgPDwgKDY0IC0gNDIpKTsKKwliMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjY7CisJYjUgPSAodG1wID4+IDE0KSB8ICh0bXAgPDwgKDY0IC0gMTQpKTsKKwliNiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjQ7CisJYjcgPSAodG1wID4+IDI3KSB8ICh0bXAgPDwgKDY0IC0gMjcpKTsKKwliNCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjI7CisJYjEgPSAodG1wID4+IDMzKSB8ICh0bXAgPDwgKDY0IC0gMzMpKTsKKwliMiAtPSBiMTsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliNiAtPSBiNyArIGs4ICsgdDA7CisJYjcgLT0gazAgKyAyOworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMTkpIHwgKHRtcCA8PCAoNjQgLSAxOSkpOworCWI0IC09IGI1ICsgazY7CisJYjUgLT0gazcgKyB0MjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDM2KSB8ICh0bXAgPDwgKDY0IC0gMzYpKTsKKwliMiAtPSBiMyArIGs0OworCWIzIC09IGs1OworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWIwIC09IGIxICsgazI7CisJYjEgLT0gazM7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA1NikgfCAodG1wIDw8ICg2NCAtIDU2KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI2IC09IGIxOworCisJdG1wID0gYjcgXiBiMjsKKwliNyA9ICh0bXAgPj4gNDMpIHwgKHRtcCA8PCAoNjQgLSA0MykpOworCWIyIC09IGI3OworCisJdG1wID0gYjUgXiBiMDsKKwliNSA9ICh0bXAgPj4gMzkpIHwgKHRtcCA8PCAoNjQgLSAzOSkpOworCWIwIC09IGI1OworCisJdG1wID0gYjMgXiBiNjsKKwliMyA9ICh0bXAgPj4gMjkpIHwgKHRtcCA8PCAoNjQgLSAyOSkpOworCWI2IC09IGIzOworCisJdG1wID0gYjEgXiBiNDsKKwliMSA9ICh0bXAgPj4gMjUpIHwgKHRtcCA8PCAoNjQgLSAyNSkpOworCWI0IC09IGIxOworCisJdG1wID0gYjMgXiBiMDsKKwliMyA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIwIC09IGIzOworCisJdG1wID0gYjUgXiBiNjsKKwliNSA9ICh0bXAgPj4gMTApIHwgKHRtcCA8PCAoNjQgLSAxMCkpOworCWI2IC09IGI1OworCisJdG1wID0gYjcgXiBiNDsKKwliNyA9ICh0bXAgPj4gNTApIHwgKHRtcCA8PCAoNjQgLSA1MCkpOworCWI0IC09IGI3OworCisJdG1wID0gYjEgXiBiMjsKKwliMSA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWIyIC09IGIxOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMjQpIHwgKHRtcCA8PCAoNjQgLSAyNCkpOworCWI2IC09IGI3ICsgazcgKyB0MjsKKwliNyAtPSBrOCArIDE7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjQgLT0gYjUgKyBrNTsKKwliNSAtPSBrNiArIHQxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMzApIHwgKHRtcCA8PCAoNjQgLSAzMCkpOworCWIyIC09IGIzICsgazM7CisJYjMgLT0gazQ7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjAgLT0gYjEgKyBrMTsKKwliMSAtPSBrMjsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDU0KSB8ICh0bXAgPDwgKDY0IC0gNTQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGIyOworCWI3ID0gKHRtcCA+PiAzOSkgfCAodG1wIDw8ICg2NCAtIDM5KSk7CisJYjIgLT0gYjc7CisKKwl0bXAgPSBiNSBeIGIwOworCWI1ID0gKHRtcCA+PiAzNikgfCAodG1wIDw8ICg2NCAtIDM2KSk7CisJYjAgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGI2OworCWIzID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjYgLT0gYjM7CisKKwl0bXAgPSBiMSBeIGI0OworCWIxID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjQgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGIwOworCWIzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI2OworCWI1ID0gKHRtcCA+PiAxNCkgfCAodG1wIDw8ICg2NCAtIDE0KSk7CisJYjYgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGI0OworCWI3ID0gKHRtcCA+PiAyNykgfCAodG1wIDw8ICg2NCAtIDI3KSk7CisJYjQgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGIyOworCWIxID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjIgLT0gYjE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjYgLT0gYjcgKyBrNiArIHQxOworCWI3IC09IGs3OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMTkpIHwgKHRtcCA8PCAoNjQgLSAxOSkpOworCWI0IC09IGI1ICsgazQ7CisJYjUgLT0gazUgKyB0MDsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDM2KSB8ICh0bXAgPDwgKDY0IC0gMzYpKTsKKwliMiAtPSBiMyArIGsyOworCWIzIC09IGszOworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWIwIC09IGIxICsgazA7CisJYjEgLT0gazE7CisKKwlvdXRwdXRbMF0gPSBiMDsKKwlvdXRwdXRbMV0gPSBiMTsKKwlvdXRwdXRbMl0gPSBiMjsKKwlvdXRwdXRbM10gPSBiMzsKKworCW91dHB1dFs3XSA9IGI3OworCW91dHB1dFs2XSA9IGI2OworCW91dHB1dFs1XSA9IGI1OworCW91dHB1dFs0XSA9IGI0OworfQorCit2b2lkIHRocmVlZmlzaF9lbmNyeXB0XzEwMjQoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW5wdXQsCisJCQkgICAgdTY0ICpvdXRwdXQpCit7CisJdTY0IGIwID0gaW5wdXRbMF0sIGIxID0gaW5wdXRbMV0sCisJICAgIGIyID0gaW5wdXRbMl0sIGIzID0gaW5wdXRbM10sCisJICAgIGI0ID0gaW5wdXRbNF0sIGI1ID0gaW5wdXRbNV0sCisJICAgIGI2ID0gaW5wdXRbNl0sIGI3ID0gaW5wdXRbN10sCisJICAgIGI4ID0gaW5wdXRbOF0sIGI5ID0gaW5wdXRbOV0sCisJICAgIGIxMCA9IGlucHV0WzEwXSwgYjExID0gaW5wdXRbMTFdLAorCSAgICBiMTIgPSBpbnB1dFsxMl0sIGIxMyA9IGlucHV0WzEzXSwKKwkgICAgYjE0ID0gaW5wdXRbMTRdLCBiMTUgPSBpbnB1dFsxNV07CisJdTY0IGswID0ga2V5X2N0eC0+a2V5WzBdLCBrMSA9IGtleV9jdHgtPmtleVsxXSwKKwkgICAgazIgPSBrZXlfY3R4LT5rZXlbMl0sIGszID0ga2V5X2N0eC0+a2V5WzNdLAorCSAgICBrNCA9IGtleV9jdHgtPmtleVs0XSwgazUgPSBrZXlfY3R4LT5rZXlbNV0sCisJICAgIGs2ID0ga2V5X2N0eC0+a2V5WzZdLCBrNyA9IGtleV9jdHgtPmtleVs3XSwKKwkgICAgazggPSBrZXlfY3R4LT5rZXlbOF0sIGs5ID0ga2V5X2N0eC0+a2V5WzldLAorCSAgICBrMTAgPSBrZXlfY3R4LT5rZXlbMTBdLCBrMTEgPSBrZXlfY3R4LT5rZXlbMTFdLAorCSAgICBrMTIgPSBrZXlfY3R4LT5rZXlbMTJdLCBrMTMgPSBrZXlfY3R4LT5rZXlbMTNdLAorCSAgICBrMTQgPSBrZXlfY3R4LT5rZXlbMTRdLCBrMTUgPSBrZXlfY3R4LT5rZXlbMTVdLAorCSAgICBrMTYgPSBrZXlfY3R4LT5rZXlbMTZdOworCXU2NCB0MCA9IGtleV9jdHgtPnR3ZWFrWzBdLCB0MSA9IGtleV9jdHgtPnR3ZWFrWzFdLAorCSAgICB0MiA9IGtleV9jdHgtPnR3ZWFrWzJdOworCisJYjEgKz0gazE7CisJYjAgKz0gYjEgKyBrMDsKKwliMSA9ICgoYjEgPDwgMjQpIHwgKGIxID4+ICg2NCAtIDI0KSkpIF4gYjA7CisKKwliMyArPSBrMzsKKwliMiArPSBiMyArIGsyOworCWIzID0gKChiMyA8PCAxMykgfCAoYjMgPj4gKDY0IC0gMTMpKSkgXiBiMjsKKworCWI1ICs9IGs1OworCWI0ICs9IGI1ICsgazQ7CisJYjUgPSAoKGI1IDw8IDgpIHwgKGI1ID4+ICg2NCAtIDgpKSkgXiBiNDsKKworCWI3ICs9IGs3OworCWI2ICs9IGI3ICsgazY7CisJYjcgPSAoKGI3IDw8IDQ3KSB8IChiNyA+PiAoNjQgLSA0NykpKSBeIGI2OworCisJYjkgKz0gazk7CisJYjggKz0gYjkgKyBrODsKKwliOSA9ICgoYjkgPDwgOCkgfCAoYjkgPj4gKDY0IC0gOCkpKSBeIGI4OworCisJYjExICs9IGsxMTsKKwliMTAgKz0gYjExICsgazEwOworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazEzICsgdDA7CisJYjEyICs9IGIxMyArIGsxMjsKKwliMTMgPSAoKGIxMyA8PCAyMikgfCAoYjEzID4+ICg2NCAtIDIyKSkpIF4gYjEyOworCisJYjE1ICs9IGsxNTsKKwliMTQgKz0gYjE1ICsgazE0ICsgdDE7CisJYjE1ID0gKChiMTUgPDwgMzcpIHwgKGIxNSA+PiAoNjQgLSAzNykpKSBeIGIxNDsKKworCWIwICs9IGI5OworCWI5ID0gKChiOSA8PCAzOCkgfCAoYjkgPj4gKDY0IC0gMzgpKSkgXiBiMDsKKworCWIyICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAxOSkgfCAoYjEzID4+ICg2NCAtIDE5KSkpIF4gYjI7CisKKwliNiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMTApIHwgKGIxMSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjQgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDU1KSB8IChiMTUgPj4gKDY0IC0gNTUpKSkgXiBiNDsKKworCWIxMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDkpIHwgKGI3ID4+ICg2NCAtIDQ5KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCAxOCkgfCAoYjMgPj4gKDY0IC0gMTgpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDIzKSB8IChiNSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA1MikgfCAoYjEgPj4gKDY0IC0gNTIpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMykgfCAoYjcgPj4gKDY0IC0gMzMpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0KSB8IChiNSA+PiAoNjQgLSA0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTEpIHwgKGIzID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjY7CisKKwliMTIgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDM0KSB8IChiMTUgPj4gKDY0IC0gMzQpKSkgXiBiMTI7CisKKwliMTQgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQxKSB8IChiMTMgPj4gKDY0IC0gNDEpKSkgXiBiMTQ7CisKKwliOCArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNTkpIHwgKGIxMSA+PiAoNjQgLSA1OSkpKSBeIGI4OworCisJYjEwICs9IGI5OworCWI5ID0gKChiOSA8PCAxNykgfCAoYjkgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNSkgfCAoYjE1ID4+ICg2NCAtIDUpKSkgXiBiMDsKKworCWIyICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCAyMCkgfCAoYjExID4+ICg2NCAtIDIwKSkpIF4gYjI7CisKKwliNiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDgpIHwgKGIxMyA+PiAoNjQgLSA0OCkpKSBeIGI2OworCisJYjQgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDQxKSB8IChiOSA+PiAoNjQgLSA0MSkpKSBeIGI0OworCisJYjE0ICs9IGIxOworCWIxID0gKChiMSA8PCA0NykgfCAoYjEgPj4gKDY0IC0gNDcpKSkgXiBiMTQ7CisKKwliOCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMjgpIHwgKGI1ID4+ICg2NCAtIDI4KSkpIF4gYjg7CisKKwliMTAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE2KSB8IChiMyA+PiAoNjQgLSAxNikpKSBeIGIxMDsKKworCWIxMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgMjUpIHwgKGI3ID4+ICg2NCAtIDI1KSkpIF4gYjEyOworCisJYjEgKz0gazI7CisJYjAgKz0gYjEgKyBrMTsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrNDsKKwliMiArPSBiMyArIGszOworCWIzID0gKChiMyA8PCA5KSB8IChiMyA+PiAoNjQgLSA5KSkpIF4gYjI7CisKKwliNSArPSBrNjsKKwliNCArPSBiNSArIGs1OworCWI1ID0gKChiNSA8PCAzNykgfCAoYjUgPj4gKDY0IC0gMzcpKSkgXiBiNDsKKworCWI3ICs9IGs4OworCWI2ICs9IGI3ICsgazc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGI2OworCisJYjkgKz0gazEwOworCWI4ICs9IGI5ICsgazk7CisJYjkgPSAoKGI5IDw8IDEyKSB8IChiOSA+PiAoNjQgLSAxMikpKSBeIGI4OworCisJYjExICs9IGsxMjsKKwliMTAgKz0gYjExICsgazExOworCWIxMSA9ICgoYjExIDw8IDQ3KSB8IChiMTEgPj4gKDY0IC0gNDcpKSkgXiBiMTA7CisKKwliMTMgKz0gazE0ICsgdDE7CisJYjEyICs9IGIxMyArIGsxMzsKKwliMTMgPSAoKGIxMyA8PCA0NCkgfCAoYjEzID4+ICg2NCAtIDQ0KSkpIF4gYjEyOworCisJYjE1ICs9IGsxNiArIDE7CisJYjE0ICs9IGIxNSArIGsxNSArIHQyOworCWIxNSA9ICgoYjE1IDw8IDMwKSB8IChiMTUgPj4gKDY0IC0gMzApKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTYpIHwgKGI5ID4+ICg2NCAtIDE2KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMzQpIHwgKGIxMyA+PiAoNjQgLSAzNCkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU2KSB8IChiMTEgPj4gKDY0IC0gNTYpKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1MSkgfCAoYjE1ID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQpIHwgKGI3ID4+ICg2NCAtIDQpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUzKSB8IChiMyA+PiAoNjQgLSA1MykpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgNDIpIHwgKGI1ID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQ0KSB8IChiNSA+PiAoNjQgLSA0NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ3KSB8IChiMyA+PiAoNjQgLSA0NykpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAxOSkgfCAoYjE1ID4+ICg2NCAtIDE5KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MikgfCAoYjEzID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ0KSB8IChiMTEgPj4gKDY0IC0gNDQpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMjUpIHwgKGI5ID4+ICg2NCAtIDI1KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDkpIHwgKGIxNSA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNDgpIHwgKGIxMSA+PiAoNjQgLSA0OCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM1KSB8IChiMTMgPj4gKDY0IC0gMzUpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA1MikgfCAoYjkgPj4gKDY0IC0gNTIpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDMxKSB8IChiNSA+PiAoNjQgLSAzMSkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAzNykgfCAoYjMgPj4gKDY0IC0gMzcpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDIwKSB8IChiNyA+PiAoNjQgLSAyMCkpKSBeIGIxMjsKKworCWIxICs9IGszOworCWIwICs9IGIxICsgazI7CisJYjEgPSAoKGIxIDw8IDI0KSB8IChiMSA+PiAoNjQgLSAyNCkpKSBeIGIwOworCisJYjMgKz0gazU7CisJYjIgKz0gYjMgKyBrNDsKKwliMyA9ICgoYjMgPDwgMTMpIHwgKGIzID4+ICg2NCAtIDEzKSkpIF4gYjI7CisKKwliNSArPSBrNzsKKwliNCArPSBiNSArIGs2OworCWI1ID0gKChiNSA8PCA4KSB8IChiNSA+PiAoNjQgLSA4KSkpIF4gYjQ7CisKKwliNyArPSBrOTsKKwliNiArPSBiNyArIGs4OworCWI3ID0gKChiNyA8PCA0NykgfCAoYjcgPj4gKDY0IC0gNDcpKSkgXiBiNjsKKworCWI5ICs9IGsxMTsKKwliOCArPSBiOSArIGsxMDsKKwliOSA9ICgoYjkgPDwgOCkgfCAoYjkgPj4gKDY0IC0gOCkpKSBeIGI4OworCisJYjExICs9IGsxMzsKKwliMTAgKz0gYjExICsgazEyOworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazE1ICsgdDI7CisJYjEyICs9IGIxMyArIGsxNDsKKwliMTMgPSAoKGIxMyA8PCAyMikgfCAoYjEzID4+ICg2NCAtIDIyKSkpIF4gYjEyOworCisJYjE1ICs9IGswICsgMjsKKwliMTQgKz0gYjE1ICsgazE2ICsgdDA7CisJYjE1ID0gKChiMTUgPDwgMzcpIHwgKGIxNSA+PiAoNjQgLSAzNykpKSBeIGIxNDsKKworCWIwICs9IGI5OworCWI5ID0gKChiOSA8PCAzOCkgfCAoYjkgPj4gKDY0IC0gMzgpKSkgXiBiMDsKKworCWIyICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAxOSkgfCAoYjEzID4+ICg2NCAtIDE5KSkpIF4gYjI7CisKKwliNiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMTApIHwgKGIxMSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjQgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDU1KSB8IChiMTUgPj4gKDY0IC0gNTUpKSkgXiBiNDsKKworCWIxMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDkpIHwgKGI3ID4+ICg2NCAtIDQ5KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCAxOCkgfCAoYjMgPj4gKDY0IC0gMTgpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDIzKSB8IChiNSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA1MikgfCAoYjEgPj4gKDY0IC0gNTIpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMykgfCAoYjcgPj4gKDY0IC0gMzMpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0KSB8IChiNSA+PiAoNjQgLSA0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTEpIHwgKGIzID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjY7CisKKwliMTIgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDM0KSB8IChiMTUgPj4gKDY0IC0gMzQpKSkgXiBiMTI7CisKKwliMTQgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQxKSB8IChiMTMgPj4gKDY0IC0gNDEpKSkgXiBiMTQ7CisKKwliOCArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNTkpIHwgKGIxMSA+PiAoNjQgLSA1OSkpKSBeIGI4OworCisJYjEwICs9IGI5OworCWI5ID0gKChiOSA8PCAxNykgfCAoYjkgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNSkgfCAoYjE1ID4+ICg2NCAtIDUpKSkgXiBiMDsKKworCWIyICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCAyMCkgfCAoYjExID4+ICg2NCAtIDIwKSkpIF4gYjI7CisKKwliNiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDgpIHwgKGIxMyA+PiAoNjQgLSA0OCkpKSBeIGI2OworCisJYjQgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDQxKSB8IChiOSA+PiAoNjQgLSA0MSkpKSBeIGI0OworCisJYjE0ICs9IGIxOworCWIxID0gKChiMSA8PCA0NykgfCAoYjEgPj4gKDY0IC0gNDcpKSkgXiBiMTQ7CisKKwliOCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMjgpIHwgKGI1ID4+ICg2NCAtIDI4KSkpIF4gYjg7CisKKwliMTAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE2KSB8IChiMyA+PiAoNjQgLSAxNikpKSBeIGIxMDsKKworCWIxMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgMjUpIHwgKGI3ID4+ICg2NCAtIDI1KSkpIF4gYjEyOworCisJYjEgKz0gazQ7CisJYjAgKz0gYjEgKyBrMzsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrNjsKKwliMiArPSBiMyArIGs1OworCWIzID0gKChiMyA8PCA5KSB8IChiMyA+PiAoNjQgLSA5KSkpIF4gYjI7CisKKwliNSArPSBrODsKKwliNCArPSBiNSArIGs3OworCWI1ID0gKChiNSA8PCAzNykgfCAoYjUgPj4gKDY0IC0gMzcpKSkgXiBiNDsKKworCWI3ICs9IGsxMDsKKwliNiArPSBiNyArIGs5OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiNjsKKworCWI5ICs9IGsxMjsKKwliOCArPSBiOSArIGsxMTsKKwliOSA9ICgoYjkgPDwgMTIpIHwgKGI5ID4+ICg2NCAtIDEyKSkpIF4gYjg7CisKKwliMTEgKz0gazE0OworCWIxMCArPSBiMTEgKyBrMTM7CisJYjExID0gKChiMTEgPDwgNDcpIHwgKGIxMSA+PiAoNjQgLSA0NykpKSBeIGIxMDsKKworCWIxMyArPSBrMTYgKyB0MDsKKwliMTIgKz0gYjEzICsgazE1OworCWIxMyA9ICgoYjEzIDw8IDQ0KSB8IChiMTMgPj4gKDY0IC0gNDQpKSkgXiBiMTI7CisKKwliMTUgKz0gazEgKyAzOworCWIxNCArPSBiMTUgKyBrMCArIHQxOworCWIxNSA9ICgoYjE1IDw8IDMwKSB8IChiMTUgPj4gKDY0IC0gMzApKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTYpIHwgKGI5ID4+ICg2NCAtIDE2KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMzQpIHwgKGIxMyA+PiAoNjQgLSAzNCkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU2KSB8IChiMTEgPj4gKDY0IC0gNTYpKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1MSkgfCAoYjE1ID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQpIHwgKGI3ID4+ICg2NCAtIDQpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUzKSB8IChiMyA+PiAoNjQgLSA1MykpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgNDIpIHwgKGI1ID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQ0KSB8IChiNSA+PiAoNjQgLSA0NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ3KSB8IChiMyA+PiAoNjQgLSA0NykpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAxOSkgfCAoYjE1ID4+ICg2NCAtIDE5KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MikgfCAoYjEzID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ0KSB8IChiMTEgPj4gKDY0IC0gNDQpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMjUpIHwgKGI5ID4+ICg2NCAtIDI1KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDkpIHwgKGIxNSA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNDgpIHwgKGIxMSA+PiAoNjQgLSA0OCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM1KSB8IChiMTMgPj4gKDY0IC0gMzUpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA1MikgfCAoYjkgPj4gKDY0IC0gNTIpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDMxKSB8IChiNSA+PiAoNjQgLSAzMSkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAzNykgfCAoYjMgPj4gKDY0IC0gMzcpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDIwKSB8IChiNyA+PiAoNjQgLSAyMCkpKSBeIGIxMjsKKworCWIxICs9IGs1OworCWIwICs9IGIxICsgazQ7CisJYjEgPSAoKGIxIDw8IDI0KSB8IChiMSA+PiAoNjQgLSAyNCkpKSBeIGIwOworCisJYjMgKz0gazc7CisJYjIgKz0gYjMgKyBrNjsKKwliMyA9ICgoYjMgPDwgMTMpIHwgKGIzID4+ICg2NCAtIDEzKSkpIF4gYjI7CisKKwliNSArPSBrOTsKKwliNCArPSBiNSArIGs4OworCWI1ID0gKChiNSA8PCA4KSB8IChiNSA+PiAoNjQgLSA4KSkpIF4gYjQ7CisKKwliNyArPSBrMTE7CisJYjYgKz0gYjcgKyBrMTA7CisJYjcgPSAoKGI3IDw8IDQ3KSB8IChiNyA+PiAoNjQgLSA0NykpKSBeIGI2OworCisJYjkgKz0gazEzOworCWI4ICs9IGI5ICsgazEyOworCWI5ID0gKChiOSA8PCA4KSB8IChiOSA+PiAoNjQgLSA4KSkpIF4gYjg7CisKKwliMTEgKz0gazE1OworCWIxMCArPSBiMTEgKyBrMTQ7CisJYjExID0gKChiMTEgPDwgMTcpIHwgKGIxMSA+PiAoNjQgLSAxNykpKSBeIGIxMDsKKworCWIxMyArPSBrMCArIHQxOworCWIxMiArPSBiMTMgKyBrMTY7CisJYjEzID0gKChiMTMgPDwgMjIpIHwgKGIxMyA+PiAoNjQgLSAyMikpKSBeIGIxMjsKKworCWIxNSArPSBrMiArIDQ7CisJYjE0ICs9IGIxNSArIGsxICsgdDI7CisJYjE1ID0gKChiMTUgPDwgMzcpIHwgKGIxNSA+PiAoNjQgLSAzNykpKSBeIGIxNDsKKworCWIwICs9IGI5OworCWI5ID0gKChiOSA8PCAzOCkgfCAoYjkgPj4gKDY0IC0gMzgpKSkgXiBiMDsKKworCWIyICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAxOSkgfCAoYjEzID4+ICg2NCAtIDE5KSkpIF4gYjI7CisKKwliNiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMTApIHwgKGIxMSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjQgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDU1KSB8IChiMTUgPj4gKDY0IC0gNTUpKSkgXiBiNDsKKworCWIxMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDkpIHwgKGI3ID4+ICg2NCAtIDQ5KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCAxOCkgfCAoYjMgPj4gKDY0IC0gMTgpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDIzKSB8IChiNSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA1MikgfCAoYjEgPj4gKDY0IC0gNTIpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMykgfCAoYjcgPj4gKDY0IC0gMzMpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0KSB8IChiNSA+PiAoNjQgLSA0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTEpIHwgKGIzID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjY7CisKKwliMTIgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDM0KSB8IChiMTUgPj4gKDY0IC0gMzQpKSkgXiBiMTI7CisKKwliMTQgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQxKSB8IChiMTMgPj4gKDY0IC0gNDEpKSkgXiBiMTQ7CisKKwliOCArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNTkpIHwgKGIxMSA+PiAoNjQgLSA1OSkpKSBeIGI4OworCisJYjEwICs9IGI5OworCWI5ID0gKChiOSA8PCAxNykgfCAoYjkgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNSkgfCAoYjE1ID4+ICg2NCAtIDUpKSkgXiBiMDsKKworCWIyICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCAyMCkgfCAoYjExID4+ICg2NCAtIDIwKSkpIF4gYjI7CisKKwliNiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDgpIHwgKGIxMyA+PiAoNjQgLSA0OCkpKSBeIGI2OworCisJYjQgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDQxKSB8IChiOSA+PiAoNjQgLSA0MSkpKSBeIGI0OworCisJYjE0ICs9IGIxOworCWIxID0gKChiMSA8PCA0NykgfCAoYjEgPj4gKDY0IC0gNDcpKSkgXiBiMTQ7CisKKwliOCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMjgpIHwgKGI1ID4+ICg2NCAtIDI4KSkpIF4gYjg7CisKKwliMTAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE2KSB8IChiMyA+PiAoNjQgLSAxNikpKSBeIGIxMDsKKworCWIxMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgMjUpIHwgKGI3ID4+ICg2NCAtIDI1KSkpIF4gYjEyOworCisJYjEgKz0gazY7CisJYjAgKz0gYjEgKyBrNTsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrODsKKwliMiArPSBiMyArIGs3OworCWIzID0gKChiMyA8PCA5KSB8IChiMyA+PiAoNjQgLSA5KSkpIF4gYjI7CisKKwliNSArPSBrMTA7CisJYjQgKz0gYjUgKyBrOTsKKwliNSA9ICgoYjUgPDwgMzcpIHwgKGI1ID4+ICg2NCAtIDM3KSkpIF4gYjQ7CisKKwliNyArPSBrMTI7CisJYjYgKz0gYjcgKyBrMTE7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGI2OworCisJYjkgKz0gazE0OworCWI4ICs9IGI5ICsgazEzOworCWI5ID0gKChiOSA8PCAxMikgfCAoYjkgPj4gKDY0IC0gMTIpKSkgXiBiODsKKworCWIxMSArPSBrMTY7CisJYjEwICs9IGIxMSArIGsxNTsKKwliMTEgPSAoKGIxMSA8PCA0NykgfCAoYjExID4+ICg2NCAtIDQ3KSkpIF4gYjEwOworCisJYjEzICs9IGsxICsgdDI7CisJYjEyICs9IGIxMyArIGswOworCWIxMyA9ICgoYjEzIDw8IDQ0KSB8IChiMTMgPj4gKDY0IC0gNDQpKSkgXiBiMTI7CisKKwliMTUgKz0gazMgKyA1OworCWIxNCArPSBiMTUgKyBrMiArIHQwOworCWIxNSA9ICgoYjE1IDw8IDMwKSB8IChiMTUgPj4gKDY0IC0gMzApKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTYpIHwgKGI5ID4+ICg2NCAtIDE2KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMzQpIHwgKGIxMyA+PiAoNjQgLSAzNCkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU2KSB8IChiMTEgPj4gKDY0IC0gNTYpKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1MSkgfCAoYjE1ID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQpIHwgKGI3ID4+ICg2NCAtIDQpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUzKSB8IChiMyA+PiAoNjQgLSA1MykpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgNDIpIHwgKGI1ID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQ0KSB8IChiNSA+PiAoNjQgLSA0NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ3KSB8IChiMyA+PiAoNjQgLSA0NykpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAxOSkgfCAoYjE1ID4+ICg2NCAtIDE5KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MikgfCAoYjEzID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ0KSB8IChiMTEgPj4gKDY0IC0gNDQpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMjUpIHwgKGI5ID4+ICg2NCAtIDI1KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDkpIHwgKGIxNSA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNDgpIHwgKGIxMSA+PiAoNjQgLSA0OCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM1KSB8IChiMTMgPj4gKDY0IC0gMzUpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA1MikgfCAoYjkgPj4gKDY0IC0gNTIpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDMxKSB8IChiNSA+PiAoNjQgLSAzMSkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAzNykgfCAoYjMgPj4gKDY0IC0gMzcpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDIwKSB8IChiNyA+PiAoNjQgLSAyMCkpKSBeIGIxMjsKKworCWIxICs9IGs3OworCWIwICs9IGIxICsgazY7CisJYjEgPSAoKGIxIDw8IDI0KSB8IChiMSA+PiAoNjQgLSAyNCkpKSBeIGIwOworCisJYjMgKz0gazk7CisJYjIgKz0gYjMgKyBrODsKKwliMyA9ICgoYjMgPDwgMTMpIHwgKGIzID4+ICg2NCAtIDEzKSkpIF4gYjI7CisKKwliNSArPSBrMTE7CisJYjQgKz0gYjUgKyBrMTA7CisJYjUgPSAoKGI1IDw8IDgpIHwgKGI1ID4+ICg2NCAtIDgpKSkgXiBiNDsKKworCWI3ICs9IGsxMzsKKwliNiArPSBiNyArIGsxMjsKKwliNyA9ICgoYjcgPDwgNDcpIHwgKGI3ID4+ICg2NCAtIDQ3KSkpIF4gYjY7CisKKwliOSArPSBrMTU7CisJYjggKz0gYjkgKyBrMTQ7CisJYjkgPSAoKGI5IDw8IDgpIHwgKGI5ID4+ICg2NCAtIDgpKSkgXiBiODsKKworCWIxMSArPSBrMDsKKwliMTAgKz0gYjExICsgazE2OworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazIgKyB0MDsKKwliMTIgKz0gYjEzICsgazE7CisJYjEzID0gKChiMTMgPDwgMjIpIHwgKGIxMyA+PiAoNjQgLSAyMikpKSBeIGIxMjsKKworCWIxNSArPSBrNCArIDY7CisJYjE0ICs9IGIxNSArIGszICsgdDE7CisJYjE1ID0gKChiMTUgPDwgMzcpIHwgKGIxNSA+PiAoNjQgLSAzNykpKSBeIGIxNDsKKworCWIwICs9IGI5OworCWI5ID0gKChiOSA8PCAzOCkgfCAoYjkgPj4gKDY0IC0gMzgpKSkgXiBiMDsKKworCWIyICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAxOSkgfCAoYjEzID4+ICg2NCAtIDE5KSkpIF4gYjI7CisKKwliNiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMTApIHwgKGIxMSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjQgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDU1KSB8IChiMTUgPj4gKDY0IC0gNTUpKSkgXiBiNDsKKworCWIxMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDkpIHwgKGI3ID4+ICg2NCAtIDQ5KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCAxOCkgfCAoYjMgPj4gKDY0IC0gMTgpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDIzKSB8IChiNSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA1MikgfCAoYjEgPj4gKDY0IC0gNTIpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMykgfCAoYjcgPj4gKDY0IC0gMzMpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0KSB8IChiNSA+PiAoNjQgLSA0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTEpIHwgKGIzID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjY7CisKKwliMTIgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDM0KSB8IChiMTUgPj4gKDY0IC0gMzQpKSkgXiBiMTI7CisKKwliMTQgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQxKSB8IChiMTMgPj4gKDY0IC0gNDEpKSkgXiBiMTQ7CisKKwliOCArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNTkpIHwgKGIxMSA+PiAoNjQgLSA1OSkpKSBeIGI4OworCisJYjEwICs9IGI5OworCWI5ID0gKChiOSA8PCAxNykgfCAoYjkgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNSkgfCAoYjE1ID4+ICg2NCAtIDUpKSkgXiBiMDsKKworCWIyICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCAyMCkgfCAoYjExID4+ICg2NCAtIDIwKSkpIF4gYjI7CisKKwliNiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDgpIHwgKGIxMyA+PiAoNjQgLSA0OCkpKSBeIGI2OworCisJYjQgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDQxKSB8IChiOSA+PiAoNjQgLSA0MSkpKSBeIGI0OworCisJYjE0ICs9IGIxOworCWIxID0gKChiMSA8PCA0NykgfCAoYjEgPj4gKDY0IC0gNDcpKSkgXiBiMTQ7CisKKwliOCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMjgpIHwgKGI1ID4+ICg2NCAtIDI4KSkpIF4gYjg7CisKKwliMTAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE2KSB8IChiMyA+PiAoNjQgLSAxNikpKSBeIGIxMDsKKworCWIxMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgMjUpIHwgKGI3ID4+ICg2NCAtIDI1KSkpIF4gYjEyOworCisJYjEgKz0gazg7CisJYjAgKz0gYjEgKyBrNzsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrMTA7CisJYjIgKz0gYjMgKyBrOTsKKwliMyA9ICgoYjMgPDwgOSkgfCAoYjMgPj4gKDY0IC0gOSkpKSBeIGIyOworCisJYjUgKz0gazEyOworCWI0ICs9IGI1ICsgazExOworCWI1ID0gKChiNSA8PCAzNykgfCAoYjUgPj4gKDY0IC0gMzcpKSkgXiBiNDsKKworCWI3ICs9IGsxNDsKKwliNiArPSBiNyArIGsxMzsKKwliNyA9ICgoYjcgPDwgMzEpIHwgKGI3ID4+ICg2NCAtIDMxKSkpIF4gYjY7CisKKwliOSArPSBrMTY7CisJYjggKz0gYjkgKyBrMTU7CisJYjkgPSAoKGI5IDw8IDEyKSB8IChiOSA+PiAoNjQgLSAxMikpKSBeIGI4OworCisJYjExICs9IGsxOworCWIxMCArPSBiMTEgKyBrMDsKKwliMTEgPSAoKGIxMSA8PCA0NykgfCAoYjExID4+ICg2NCAtIDQ3KSkpIF4gYjEwOworCisJYjEzICs9IGszICsgdDE7CisJYjEyICs9IGIxMyArIGsyOworCWIxMyA9ICgoYjEzIDw8IDQ0KSB8IChiMTMgPj4gKDY0IC0gNDQpKSkgXiBiMTI7CisKKwliMTUgKz0gazUgKyA3OworCWIxNCArPSBiMTUgKyBrNCArIHQyOworCWIxNSA9ICgoYjE1IDw8IDMwKSB8IChiMTUgPj4gKDY0IC0gMzApKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTYpIHwgKGI5ID4+ICg2NCAtIDE2KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMzQpIHwgKGIxMyA+PiAoNjQgLSAzNCkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU2KSB8IChiMTEgPj4gKDY0IC0gNTYpKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1MSkgfCAoYjE1ID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQpIHwgKGI3ID4+ICg2NCAtIDQpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUzKSB8IChiMyA+PiAoNjQgLSA1MykpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgNDIpIHwgKGI1ID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQ0KSB8IChiNSA+PiAoNjQgLSA0NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ3KSB8IChiMyA+PiAoNjQgLSA0NykpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAxOSkgfCAoYjE1ID4+ICg2NCAtIDE5KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MikgfCAoYjEzID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ0KSB8IChiMTEgPj4gKDY0IC0gNDQpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMjUpIHwgKGI5ID4+ICg2NCAtIDI1KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDkpIHwgKGIxNSA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNDgpIHwgKGIxMSA+PiAoNjQgLSA0OCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM1KSB8IChiMTMgPj4gKDY0IC0gMzUpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA1MikgfCAoYjkgPj4gKDY0IC0gNTIpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDMxKSB8IChiNSA+PiAoNjQgLSAzMSkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAzNykgfCAoYjMgPj4gKDY0IC0gMzcpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDIwKSB8IChiNyA+PiAoNjQgLSAyMCkpKSBeIGIxMjsKKworCWIxICs9IGs5OworCWIwICs9IGIxICsgazg7CisJYjEgPSAoKGIxIDw8IDI0KSB8IChiMSA+PiAoNjQgLSAyNCkpKSBeIGIwOworCisJYjMgKz0gazExOworCWIyICs9IGIzICsgazEwOworCWIzID0gKChiMyA8PCAxMykgfCAoYjMgPj4gKDY0IC0gMTMpKSkgXiBiMjsKKworCWI1ICs9IGsxMzsKKwliNCArPSBiNSArIGsxMjsKKwliNSA9ICgoYjUgPDwgOCkgfCAoYjUgPj4gKDY0IC0gOCkpKSBeIGI0OworCisJYjcgKz0gazE1OworCWI2ICs9IGI3ICsgazE0OworCWI3ID0gKChiNyA8PCA0NykgfCAoYjcgPj4gKDY0IC0gNDcpKSkgXiBiNjsKKworCWI5ICs9IGswOworCWI4ICs9IGI5ICsgazE2OworCWI5ID0gKChiOSA8PCA4KSB8IChiOSA+PiAoNjQgLSA4KSkpIF4gYjg7CisKKwliMTEgKz0gazI7CisJYjEwICs9IGIxMSArIGsxOworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazQgKyB0MjsKKwliMTIgKz0gYjEzICsgazM7CisJYjEzID0gKChiMTMgPDwgMjIpIHwgKGIxMyA+PiAoNjQgLSAyMikpKSBeIGIxMjsKKworCWIxNSArPSBrNiArIDg7CisJYjE0ICs9IGIxNSArIGs1ICsgdDA7CisJYjE1ID0gKChiMTUgPDwgMzcpIHwgKGIxNSA+PiAoNjQgLSAzNykpKSBeIGIxNDsKKworCWIwICs9IGI5OworCWI5ID0gKChiOSA8PCAzOCkgfCAoYjkgPj4gKDY0IC0gMzgpKSkgXiBiMDsKKworCWIyICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAxOSkgfCAoYjEzID4+ICg2NCAtIDE5KSkpIF4gYjI7CisKKwliNiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMTApIHwgKGIxMSA+PiAoNjQgLSAxMCkpKSBeIGI2OworCisJYjQgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDU1KSB8IChiMTUgPj4gKDY0IC0gNTUpKSkgXiBiNDsKKworCWIxMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgNDkpIHwgKGI3ID4+ICg2NCAtIDQ5KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCAxOCkgfCAoYjMgPj4gKDY0IC0gMTgpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDIzKSB8IChiNSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA1MikgfCAoYjEgPj4gKDY0IC0gNTIpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMykgfCAoYjcgPj4gKDY0IC0gMzMpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0KSB8IChiNSA+PiAoNjQgLSA0KSkpIF4gYjI7CisKKwliNCArPSBiMzsKKwliMyA9ICgoYjMgPDwgNTEpIHwgKGIzID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliNiArPSBiMTsKKwliMSA9ICgoYjEgPDwgMTMpIHwgKGIxID4+ICg2NCAtIDEzKSkpIF4gYjY7CisKKwliMTIgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDM0KSB8IChiMTUgPj4gKDY0IC0gMzQpKSkgXiBiMTI7CisKKwliMTQgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQxKSB8IChiMTMgPj4gKDY0IC0gNDEpKSkgXiBiMTQ7CisKKwliOCArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNTkpIHwgKGIxMSA+PiAoNjQgLSA1OSkpKSBeIGI4OworCisJYjEwICs9IGI5OworCWI5ID0gKChiOSA8PCAxNykgfCAoYjkgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNSkgfCAoYjE1ID4+ICg2NCAtIDUpKSkgXiBiMDsKKworCWIyICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCAyMCkgfCAoYjExID4+ICg2NCAtIDIwKSkpIF4gYjI7CisKKwliNiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDgpIHwgKGIxMyA+PiAoNjQgLSA0OCkpKSBeIGI2OworCisJYjQgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDQxKSB8IChiOSA+PiAoNjQgLSA0MSkpKSBeIGI0OworCisJYjE0ICs9IGIxOworCWIxID0gKChiMSA8PCA0NykgfCAoYjEgPj4gKDY0IC0gNDcpKSkgXiBiMTQ7CisKKwliOCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMjgpIHwgKGI1ID4+ICg2NCAtIDI4KSkpIF4gYjg7CisKKwliMTAgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE2KSB8IChiMyA+PiAoNjQgLSAxNikpKSBeIGIxMDsKKworCWIxMiArPSBiNzsKKwliNyA9ICgoYjcgPDwgMjUpIHwgKGI3ID4+ICg2NCAtIDI1KSkpIF4gYjEyOworCisJYjEgKz0gazEwOworCWIwICs9IGIxICsgazk7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGIwOworCisJYjMgKz0gazEyOworCWIyICs9IGIzICsgazExOworCWIzID0gKChiMyA8PCA5KSB8IChiMyA+PiAoNjQgLSA5KSkpIF4gYjI7CisKKwliNSArPSBrMTQ7CisJYjQgKz0gYjUgKyBrMTM7CisJYjUgPSAoKGI1IDw8IDM3KSB8IChiNSA+PiAoNjQgLSAzNykpKSBeIGI0OworCisJYjcgKz0gazE2OworCWI2ICs9IGI3ICsgazE1OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiNjsKKworCWI5ICs9IGsxOworCWI4ICs9IGI5ICsgazA7CisJYjkgPSAoKGI5IDw8IDEyKSB8IChiOSA+PiAoNjQgLSAxMikpKSBeIGI4OworCisJYjExICs9IGszOworCWIxMCArPSBiMTEgKyBrMjsKKwliMTEgPSAoKGIxMSA8PCA0NykgfCAoYjExID4+ICg2NCAtIDQ3KSkpIF4gYjEwOworCisJYjEzICs9IGs1ICsgdDA7CisJYjEyICs9IGIxMyArIGs0OworCWIxMyA9ICgoYjEzIDw8IDQ0KSB8IChiMTMgPj4gKDY0IC0gNDQpKSkgXiBiMTI7CisKKwliMTUgKz0gazcgKyA5OworCWIxNCArPSBiMTUgKyBrNiArIHQxOworCWIxNSA9ICgoYjE1IDw8IDMwKSB8IChiMTUgPj4gKDY0IC0gMzApKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTYpIHwgKGI5ID4+ICg2NCAtIDE2KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMzQpIHwgKGIxMyA+PiAoNjQgLSAzNCkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU2KSB8IChiMTEgPj4gKDY0IC0gNTYpKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1MSkgfCAoYjE1ID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQpIHwgKGI3ID4+ICg2NCAtIDQpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUzKSB8IChiMyA+PiAoNjQgLSA1MykpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgNDIpIHwgKGI1ID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQ0KSB8IChiNSA+PiAoNjQgLSA0NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ3KSB8IChiMyA+PiAoNjQgLSA0NykpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAxOSkgfCAoYjE1ID4+ICg2NCAtIDE5KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MikgfCAoYjEzID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ0KSB8IChiMTEgPj4gKDY0IC0gNDQpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMjUpIHwgKGI5ID4+ICg2NCAtIDI1KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDkpIHwgKGIxNSA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNDgpIHwgKGIxMSA+PiAoNjQgLSA0OCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM1KSB8IChiMTMgPj4gKDY0IC0gMzUpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA1MikgfCAoYjkgPj4gKDY0IC0gNTIpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDMxKSB8IChiNSA+PiAoNjQgLSAzMSkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAzNykgfCAoYjMgPj4gKDY0IC0gMzcpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDIwKSB8IChiNyA+PiAoNjQgLSAyMCkpKSBeIGIxMjsKKworCWIxICs9IGsxMTsKKwliMCArPSBiMSArIGsxMDsKKwliMSA9ICgoYjEgPDwgMjQpIHwgKGIxID4+ICg2NCAtIDI0KSkpIF4gYjA7CisKKwliMyArPSBrMTM7CisJYjIgKz0gYjMgKyBrMTI7CisJYjMgPSAoKGIzIDw8IDEzKSB8IChiMyA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjUgKz0gazE1OworCWI0ICs9IGI1ICsgazE0OworCWI1ID0gKChiNSA8PCA4KSB8IChiNSA+PiAoNjQgLSA4KSkpIF4gYjQ7CisKKwliNyArPSBrMDsKKwliNiArPSBiNyArIGsxNjsKKwliNyA9ICgoYjcgPDwgNDcpIHwgKGI3ID4+ICg2NCAtIDQ3KSkpIF4gYjY7CisKKwliOSArPSBrMjsKKwliOCArPSBiOSArIGsxOworCWI5ID0gKChiOSA8PCA4KSB8IChiOSA+PiAoNjQgLSA4KSkpIF4gYjg7CisKKwliMTEgKz0gazQ7CisJYjEwICs9IGIxMSArIGszOworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazYgKyB0MTsKKwliMTIgKz0gYjEzICsgazU7CisJYjEzID0gKChiMTMgPDwgMjIpIHwgKGIxMyA+PiAoNjQgLSAyMikpKSBeIGIxMjsKKworCWIxNSArPSBrOCArIDEwOworCWIxNCArPSBiMTUgKyBrNyArIHQyOworCWIxNSA9ICgoYjE1IDw8IDM3KSB8IChiMTUgPj4gKDY0IC0gMzcpKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMzgpIHwgKGI5ID4+ICg2NCAtIDM4KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMTkpIHwgKGIxMyA+PiAoNjQgLSAxOSkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDEwKSB8IChiMTEgPj4gKDY0IC0gMTApKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1NSkgfCAoYjE1ID4+ICg2NCAtIDU1KSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQ5KSB8IChiNyA+PiAoNjQgLSA0OSkpKSBeIGIxMDsKKworCWIxMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTgpIHwgKGIzID4+ICg2NCAtIDE4KSkpIF4gYjEyOworCisJYjE0ICs9IGI1OworCWI1ID0gKChiNSA8PCAyMykgfCAoYjUgPj4gKDY0IC0gMjMpKSkgXiBiMTQ7CisKKwliOCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTIpIHwgKGIxID4+ICg2NCAtIDUyKSkpIF4gYjg7CisKKwliMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgMzMpIHwgKGI3ID4+ICg2NCAtIDMzKSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNCkgfCAoYjUgPj4gKDY0IC0gNCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUxKSB8IChiMyA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAzNCkgfCAoYjE1ID4+ICg2NCAtIDM0KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MSkgfCAoYjEzID4+ICg2NCAtIDQxKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU5KSB8IChiMTEgPj4gKDY0IC0gNTkpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTcpIHwgKGI5ID4+ICg2NCAtIDE3KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDUpIHwgKGIxNSA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMjApIHwgKGIxMSA+PiAoNjQgLSAyMCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQ4KSB8IChiMTMgPj4gKDY0IC0gNDgpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA0MSkgfCAoYjkgPj4gKDY0IC0gNDEpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNDcpIHwgKGIxID4+ICg2NCAtIDQ3KSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDI4KSB8IChiNSA+PiAoNjQgLSAyOCkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI1KSB8IChiNyA+PiAoNjQgLSAyNSkpKSBeIGIxMjsKKworCWIxICs9IGsxMjsKKwliMCArPSBiMSArIGsxMTsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrMTQ7CisJYjIgKz0gYjMgKyBrMTM7CisJYjMgPSAoKGIzIDw8IDkpIHwgKGIzID4+ICg2NCAtIDkpKSkgXiBiMjsKKworCWI1ICs9IGsxNjsKKwliNCArPSBiNSArIGsxNTsKKwliNSA9ICgoYjUgPDwgMzcpIHwgKGI1ID4+ICg2NCAtIDM3KSkpIF4gYjQ7CisKKwliNyArPSBrMTsKKwliNiArPSBiNyArIGswOworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiNjsKKworCWI5ICs9IGszOworCWI4ICs9IGI5ICsgazI7CisJYjkgPSAoKGI5IDw8IDEyKSB8IChiOSA+PiAoNjQgLSAxMikpKSBeIGI4OworCisJYjExICs9IGs1OworCWIxMCArPSBiMTEgKyBrNDsKKwliMTEgPSAoKGIxMSA8PCA0NykgfCAoYjExID4+ICg2NCAtIDQ3KSkpIF4gYjEwOworCisJYjEzICs9IGs3ICsgdDI7CisJYjEyICs9IGIxMyArIGs2OworCWIxMyA9ICgoYjEzIDw8IDQ0KSB8IChiMTMgPj4gKDY0IC0gNDQpKSkgXiBiMTI7CisKKwliMTUgKz0gazkgKyAxMTsKKwliMTQgKz0gYjE1ICsgazggKyB0MDsKKwliMTUgPSAoKGIxNSA8PCAzMCkgfCAoYjE1ID4+ICg2NCAtIDMwKSkpIF4gYjE0OworCisJYjAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDE2KSB8IChiOSA+PiAoNjQgLSAxNikpKSBeIGIwOworCisJYjIgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM0KSB8IChiMTMgPj4gKDY0IC0gMzQpKSkgXiBiMjsKKworCWI2ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA1NikgfCAoYjExID4+ICg2NCAtIDU2KSkpIF4gYjY7CisKKwliNCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNTEpIHwgKGIxNSA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjEwICs9IGI3OworCWI3ID0gKChiNyA8PCA0KSB8IChiNyA+PiAoNjQgLSA0KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCA1MykgfCAoYjMgPj4gKDY0IC0gNTMpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQyKSB8IChiNSA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA0MSkgfCAoYjEgPj4gKDY0IC0gNDEpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0NCkgfCAoYjUgPj4gKDY0IC0gNDQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA0NykgfCAoYjMgPj4gKDY0IC0gNDcpKSkgXiBiNDsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA0NikgfCAoYjEgPj4gKDY0IC0gNDYpKSkgXiBiNjsKKworCWIxMiArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgMTkpIHwgKGIxNSA+PiAoNjQgLSAxOSkpKSBeIGIxMjsKKworCWIxNCArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDIpIHwgKGIxMyA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA0NCkgfCAoYjExID4+ICg2NCAtIDQ0KSkpIF4gYjg7CisKKwliMTAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDI1KSB8IChiOSA+PiAoNjQgLSAyNSkpKSBeIGIxMDsKKworCWIwICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA5KSB8IChiMTUgPj4gKDY0IC0gOSkpKSBeIGIwOworCisJYjIgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ4KSB8IChiMTEgPj4gKDY0IC0gNDgpKSkgXiBiMjsKKworCWI2ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAzNSkgfCAoYjEzID4+ICg2NCAtIDM1KSkpIF4gYjY7CisKKwliNCArPSBiOTsKKwliOSA9ICgoYjkgPDwgNTIpIHwgKGI5ID4+ICg2NCAtIDUyKSkpIF4gYjQ7CisKKwliMTQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDIzKSB8IChiMSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGI1OworCWI1ID0gKChiNSA8PCAzMSkgfCAoYjUgPj4gKDY0IC0gMzEpKSkgXiBiODsKKworCWIxMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzcpIHwgKGIzID4+ICg2NCAtIDM3KSkpIF4gYjEwOworCisJYjEyICs9IGI3OworCWI3ID0gKChiNyA8PCAyMCkgfCAoYjcgPj4gKDY0IC0gMjApKSkgXiBiMTI7CisKKwliMSArPSBrMTM7CisJYjAgKz0gYjEgKyBrMTI7CisJYjEgPSAoKGIxIDw8IDI0KSB8IChiMSA+PiAoNjQgLSAyNCkpKSBeIGIwOworCisJYjMgKz0gazE1OworCWIyICs9IGIzICsgazE0OworCWIzID0gKChiMyA8PCAxMykgfCAoYjMgPj4gKDY0IC0gMTMpKSkgXiBiMjsKKworCWI1ICs9IGswOworCWI0ICs9IGI1ICsgazE2OworCWI1ID0gKChiNSA8PCA4KSB8IChiNSA+PiAoNjQgLSA4KSkpIF4gYjQ7CisKKwliNyArPSBrMjsKKwliNiArPSBiNyArIGsxOworCWI3ID0gKChiNyA8PCA0NykgfCAoYjcgPj4gKDY0IC0gNDcpKSkgXiBiNjsKKworCWI5ICs9IGs0OworCWI4ICs9IGI5ICsgazM7CisJYjkgPSAoKGI5IDw8IDgpIHwgKGI5ID4+ICg2NCAtIDgpKSkgXiBiODsKKworCWIxMSArPSBrNjsKKwliMTAgKz0gYjExICsgazU7CisJYjExID0gKChiMTEgPDwgMTcpIHwgKGIxMSA+PiAoNjQgLSAxNykpKSBeIGIxMDsKKworCWIxMyArPSBrOCArIHQwOworCWIxMiArPSBiMTMgKyBrNzsKKwliMTMgPSAoKGIxMyA8PCAyMikgfCAoYjEzID4+ICg2NCAtIDIyKSkpIF4gYjEyOworCisJYjE1ICs9IGsxMCArIDEyOworCWIxNCArPSBiMTUgKyBrOSArIHQxOworCWIxNSA9ICgoYjE1IDw8IDM3KSB8IChiMTUgPj4gKDY0IC0gMzcpKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMzgpIHwgKGI5ID4+ICg2NCAtIDM4KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMTkpIHwgKGIxMyA+PiAoNjQgLSAxOSkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDEwKSB8IChiMTEgPj4gKDY0IC0gMTApKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1NSkgfCAoYjE1ID4+ICg2NCAtIDU1KSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQ5KSB8IChiNyA+PiAoNjQgLSA0OSkpKSBeIGIxMDsKKworCWIxMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTgpIHwgKGIzID4+ICg2NCAtIDE4KSkpIF4gYjEyOworCisJYjE0ICs9IGI1OworCWI1ID0gKChiNSA8PCAyMykgfCAoYjUgPj4gKDY0IC0gMjMpKSkgXiBiMTQ7CisKKwliOCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTIpIHwgKGIxID4+ICg2NCAtIDUyKSkpIF4gYjg7CisKKwliMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgMzMpIHwgKGI3ID4+ICg2NCAtIDMzKSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNCkgfCAoYjUgPj4gKDY0IC0gNCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUxKSB8IChiMyA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAzNCkgfCAoYjE1ID4+ICg2NCAtIDM0KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MSkgfCAoYjEzID4+ICg2NCAtIDQxKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU5KSB8IChiMTEgPj4gKDY0IC0gNTkpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTcpIHwgKGI5ID4+ICg2NCAtIDE3KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDUpIHwgKGIxNSA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMjApIHwgKGIxMSA+PiAoNjQgLSAyMCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQ4KSB8IChiMTMgPj4gKDY0IC0gNDgpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA0MSkgfCAoYjkgPj4gKDY0IC0gNDEpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNDcpIHwgKGIxID4+ICg2NCAtIDQ3KSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDI4KSB8IChiNSA+PiAoNjQgLSAyOCkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI1KSB8IChiNyA+PiAoNjQgLSAyNSkpKSBeIGIxMjsKKworCWIxICs9IGsxNDsKKwliMCArPSBiMSArIGsxMzsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrMTY7CisJYjIgKz0gYjMgKyBrMTU7CisJYjMgPSAoKGIzIDw8IDkpIHwgKGIzID4+ICg2NCAtIDkpKSkgXiBiMjsKKworCWI1ICs9IGsxOworCWI0ICs9IGI1ICsgazA7CisJYjUgPSAoKGI1IDw8IDM3KSB8IChiNSA+PiAoNjQgLSAzNykpKSBeIGI0OworCisJYjcgKz0gazM7CisJYjYgKz0gYjcgKyBrMjsKKwliNyA9ICgoYjcgPDwgMzEpIHwgKGI3ID4+ICg2NCAtIDMxKSkpIF4gYjY7CisKKwliOSArPSBrNTsKKwliOCArPSBiOSArIGs0OworCWI5ID0gKChiOSA8PCAxMikgfCAoYjkgPj4gKDY0IC0gMTIpKSkgXiBiODsKKworCWIxMSArPSBrNzsKKwliMTAgKz0gYjExICsgazY7CisJYjExID0gKChiMTEgPDwgNDcpIHwgKGIxMSA+PiAoNjQgLSA0NykpKSBeIGIxMDsKKworCWIxMyArPSBrOSArIHQxOworCWIxMiArPSBiMTMgKyBrODsKKwliMTMgPSAoKGIxMyA8PCA0NCkgfCAoYjEzID4+ICg2NCAtIDQ0KSkpIF4gYjEyOworCisJYjE1ICs9IGsxMSArIDEzOworCWIxNCArPSBiMTUgKyBrMTAgKyB0MjsKKwliMTUgPSAoKGIxNSA8PCAzMCkgfCAoYjE1ID4+ICg2NCAtIDMwKSkpIF4gYjE0OworCisJYjAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDE2KSB8IChiOSA+PiAoNjQgLSAxNikpKSBeIGIwOworCisJYjIgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM0KSB8IChiMTMgPj4gKDY0IC0gMzQpKSkgXiBiMjsKKworCWI2ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA1NikgfCAoYjExID4+ICg2NCAtIDU2KSkpIF4gYjY7CisKKwliNCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNTEpIHwgKGIxNSA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjEwICs9IGI3OworCWI3ID0gKChiNyA8PCA0KSB8IChiNyA+PiAoNjQgLSA0KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCA1MykgfCAoYjMgPj4gKDY0IC0gNTMpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQyKSB8IChiNSA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA0MSkgfCAoYjEgPj4gKDY0IC0gNDEpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0NCkgfCAoYjUgPj4gKDY0IC0gNDQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA0NykgfCAoYjMgPj4gKDY0IC0gNDcpKSkgXiBiNDsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA0NikgfCAoYjEgPj4gKDY0IC0gNDYpKSkgXiBiNjsKKworCWIxMiArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgMTkpIHwgKGIxNSA+PiAoNjQgLSAxOSkpKSBeIGIxMjsKKworCWIxNCArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDIpIHwgKGIxMyA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA0NCkgfCAoYjExID4+ICg2NCAtIDQ0KSkpIF4gYjg7CisKKwliMTAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDI1KSB8IChiOSA+PiAoNjQgLSAyNSkpKSBeIGIxMDsKKworCWIwICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA5KSB8IChiMTUgPj4gKDY0IC0gOSkpKSBeIGIwOworCisJYjIgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ4KSB8IChiMTEgPj4gKDY0IC0gNDgpKSkgXiBiMjsKKworCWI2ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAzNSkgfCAoYjEzID4+ICg2NCAtIDM1KSkpIF4gYjY7CisKKwliNCArPSBiOTsKKwliOSA9ICgoYjkgPDwgNTIpIHwgKGI5ID4+ICg2NCAtIDUyKSkpIF4gYjQ7CisKKwliMTQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDIzKSB8IChiMSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGI1OworCWI1ID0gKChiNSA8PCAzMSkgfCAoYjUgPj4gKDY0IC0gMzEpKSkgXiBiODsKKworCWIxMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzcpIHwgKGIzID4+ICg2NCAtIDM3KSkpIF4gYjEwOworCisJYjEyICs9IGI3OworCWI3ID0gKChiNyA8PCAyMCkgfCAoYjcgPj4gKDY0IC0gMjApKSkgXiBiMTI7CisKKwliMSArPSBrMTU7CisJYjAgKz0gYjEgKyBrMTQ7CisJYjEgPSAoKGIxIDw8IDI0KSB8IChiMSA+PiAoNjQgLSAyNCkpKSBeIGIwOworCisJYjMgKz0gazA7CisJYjIgKz0gYjMgKyBrMTY7CisJYjMgPSAoKGIzIDw8IDEzKSB8IChiMyA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjUgKz0gazI7CisJYjQgKz0gYjUgKyBrMTsKKwliNSA9ICgoYjUgPDwgOCkgfCAoYjUgPj4gKDY0IC0gOCkpKSBeIGI0OworCisJYjcgKz0gazQ7CisJYjYgKz0gYjcgKyBrMzsKKwliNyA9ICgoYjcgPDwgNDcpIHwgKGI3ID4+ICg2NCAtIDQ3KSkpIF4gYjY7CisKKwliOSArPSBrNjsKKwliOCArPSBiOSArIGs1OworCWI5ID0gKChiOSA8PCA4KSB8IChiOSA+PiAoNjQgLSA4KSkpIF4gYjg7CisKKwliMTEgKz0gazg7CisJYjEwICs9IGIxMSArIGs3OworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazEwICsgdDI7CisJYjEyICs9IGIxMyArIGs5OworCWIxMyA9ICgoYjEzIDw8IDIyKSB8IChiMTMgPj4gKDY0IC0gMjIpKSkgXiBiMTI7CisKKwliMTUgKz0gazEyICsgMTQ7CisJYjE0ICs9IGIxNSArIGsxMSArIHQwOworCWIxNSA9ICgoYjE1IDw8IDM3KSB8IChiMTUgPj4gKDY0IC0gMzcpKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMzgpIHwgKGI5ID4+ICg2NCAtIDM4KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMTkpIHwgKGIxMyA+PiAoNjQgLSAxOSkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDEwKSB8IChiMTEgPj4gKDY0IC0gMTApKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1NSkgfCAoYjE1ID4+ICg2NCAtIDU1KSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQ5KSB8IChiNyA+PiAoNjQgLSA0OSkpKSBeIGIxMDsKKworCWIxMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTgpIHwgKGIzID4+ICg2NCAtIDE4KSkpIF4gYjEyOworCisJYjE0ICs9IGI1OworCWI1ID0gKChiNSA8PCAyMykgfCAoYjUgPj4gKDY0IC0gMjMpKSkgXiBiMTQ7CisKKwliOCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTIpIHwgKGIxID4+ICg2NCAtIDUyKSkpIF4gYjg7CisKKwliMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgMzMpIHwgKGI3ID4+ICg2NCAtIDMzKSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNCkgfCAoYjUgPj4gKDY0IC0gNCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUxKSB8IChiMyA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAzNCkgfCAoYjE1ID4+ICg2NCAtIDM0KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MSkgfCAoYjEzID4+ICg2NCAtIDQxKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU5KSB8IChiMTEgPj4gKDY0IC0gNTkpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTcpIHwgKGI5ID4+ICg2NCAtIDE3KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDUpIHwgKGIxNSA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMjApIHwgKGIxMSA+PiAoNjQgLSAyMCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQ4KSB8IChiMTMgPj4gKDY0IC0gNDgpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA0MSkgfCAoYjkgPj4gKDY0IC0gNDEpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNDcpIHwgKGIxID4+ICg2NCAtIDQ3KSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDI4KSB8IChiNSA+PiAoNjQgLSAyOCkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI1KSB8IChiNyA+PiAoNjQgLSAyNSkpKSBeIGIxMjsKKworCWIxICs9IGsxNjsKKwliMCArPSBiMSArIGsxNTsKKwliMSA9ICgoYjEgPDwgNDEpIHwgKGIxID4+ICg2NCAtIDQxKSkpIF4gYjA7CisKKwliMyArPSBrMTsKKwliMiArPSBiMyArIGswOworCWIzID0gKChiMyA8PCA5KSB8IChiMyA+PiAoNjQgLSA5KSkpIF4gYjI7CisKKwliNSArPSBrMzsKKwliNCArPSBiNSArIGsyOworCWI1ID0gKChiNSA8PCAzNykgfCAoYjUgPj4gKDY0IC0gMzcpKSkgXiBiNDsKKworCWI3ICs9IGs1OworCWI2ICs9IGI3ICsgazQ7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGI2OworCisJYjkgKz0gazc7CisJYjggKz0gYjkgKyBrNjsKKwliOSA9ICgoYjkgPDwgMTIpIHwgKGI5ID4+ICg2NCAtIDEyKSkpIF4gYjg7CisKKwliMTEgKz0gazk7CisJYjEwICs9IGIxMSArIGs4OworCWIxMSA9ICgoYjExIDw8IDQ3KSB8IChiMTEgPj4gKDY0IC0gNDcpKSkgXiBiMTA7CisKKwliMTMgKz0gazExICsgdDA7CisJYjEyICs9IGIxMyArIGsxMDsKKwliMTMgPSAoKGIxMyA8PCA0NCkgfCAoYjEzID4+ICg2NCAtIDQ0KSkpIF4gYjEyOworCisJYjE1ICs9IGsxMyArIDE1OworCWIxNCArPSBiMTUgKyBrMTIgKyB0MTsKKwliMTUgPSAoKGIxNSA8PCAzMCkgfCAoYjE1ID4+ICg2NCAtIDMwKSkpIF4gYjE0OworCisJYjAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDE2KSB8IChiOSA+PiAoNjQgLSAxNikpKSBeIGIwOworCisJYjIgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM0KSB8IChiMTMgPj4gKDY0IC0gMzQpKSkgXiBiMjsKKworCWI2ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA1NikgfCAoYjExID4+ICg2NCAtIDU2KSkpIF4gYjY7CisKKwliNCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNTEpIHwgKGIxNSA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjEwICs9IGI3OworCWI3ID0gKChiNyA8PCA0KSB8IChiNyA+PiAoNjQgLSA0KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCA1MykgfCAoYjMgPj4gKDY0IC0gNTMpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQyKSB8IChiNSA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA0MSkgfCAoYjEgPj4gKDY0IC0gNDEpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0NCkgfCAoYjUgPj4gKDY0IC0gNDQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA0NykgfCAoYjMgPj4gKDY0IC0gNDcpKSkgXiBiNDsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA0NikgfCAoYjEgPj4gKDY0IC0gNDYpKSkgXiBiNjsKKworCWIxMiArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgMTkpIHwgKGIxNSA+PiAoNjQgLSAxOSkpKSBeIGIxMjsKKworCWIxNCArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDIpIHwgKGIxMyA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA0NCkgfCAoYjExID4+ICg2NCAtIDQ0KSkpIF4gYjg7CisKKwliMTAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDI1KSB8IChiOSA+PiAoNjQgLSAyNSkpKSBeIGIxMDsKKworCWIwICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA5KSB8IChiMTUgPj4gKDY0IC0gOSkpKSBeIGIwOworCisJYjIgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ4KSB8IChiMTEgPj4gKDY0IC0gNDgpKSkgXiBiMjsKKworCWI2ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAzNSkgfCAoYjEzID4+ICg2NCAtIDM1KSkpIF4gYjY7CisKKwliNCArPSBiOTsKKwliOSA9ICgoYjkgPDwgNTIpIHwgKGI5ID4+ICg2NCAtIDUyKSkpIF4gYjQ7CisKKwliMTQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDIzKSB8IChiMSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGI1OworCWI1ID0gKChiNSA8PCAzMSkgfCAoYjUgPj4gKDY0IC0gMzEpKSkgXiBiODsKKworCWIxMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzcpIHwgKGIzID4+ICg2NCAtIDM3KSkpIF4gYjEwOworCisJYjEyICs9IGI3OworCWI3ID0gKChiNyA8PCAyMCkgfCAoYjcgPj4gKDY0IC0gMjApKSkgXiBiMTI7CisKKwliMSArPSBrMDsKKwliMCArPSBiMSArIGsxNjsKKwliMSA9ICgoYjEgPDwgMjQpIHwgKGIxID4+ICg2NCAtIDI0KSkpIF4gYjA7CisKKwliMyArPSBrMjsKKwliMiArPSBiMyArIGsxOworCWIzID0gKChiMyA8PCAxMykgfCAoYjMgPj4gKDY0IC0gMTMpKSkgXiBiMjsKKworCWI1ICs9IGs0OworCWI0ICs9IGI1ICsgazM7CisJYjUgPSAoKGI1IDw8IDgpIHwgKGI1ID4+ICg2NCAtIDgpKSkgXiBiNDsKKworCWI3ICs9IGs2OworCWI2ICs9IGI3ICsgazU7CisJYjcgPSAoKGI3IDw8IDQ3KSB8IChiNyA+PiAoNjQgLSA0NykpKSBeIGI2OworCisJYjkgKz0gazg7CisJYjggKz0gYjkgKyBrNzsKKwliOSA9ICgoYjkgPDwgOCkgfCAoYjkgPj4gKDY0IC0gOCkpKSBeIGI4OworCisJYjExICs9IGsxMDsKKwliMTAgKz0gYjExICsgazk7CisJYjExID0gKChiMTEgPDwgMTcpIHwgKGIxMSA+PiAoNjQgLSAxNykpKSBeIGIxMDsKKworCWIxMyArPSBrMTIgKyB0MTsKKwliMTIgKz0gYjEzICsgazExOworCWIxMyA9ICgoYjEzIDw8IDIyKSB8IChiMTMgPj4gKDY0IC0gMjIpKSkgXiBiMTI7CisKKwliMTUgKz0gazE0ICsgMTY7CisJYjE0ICs9IGIxNSArIGsxMyArIHQyOworCWIxNSA9ICgoYjE1IDw8IDM3KSB8IChiMTUgPj4gKDY0IC0gMzcpKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMzgpIHwgKGI5ID4+ICg2NCAtIDM4KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMTkpIHwgKGIxMyA+PiAoNjQgLSAxOSkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDEwKSB8IChiMTEgPj4gKDY0IC0gMTApKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1NSkgfCAoYjE1ID4+ICg2NCAtIDU1KSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQ5KSB8IChiNyA+PiAoNjQgLSA0OSkpKSBeIGIxMDsKKworCWIxMiArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTgpIHwgKGIzID4+ICg2NCAtIDE4KSkpIF4gYjEyOworCisJYjE0ICs9IGI1OworCWI1ID0gKChiNSA8PCAyMykgfCAoYjUgPj4gKDY0IC0gMjMpKSkgXiBiMTQ7CisKKwliOCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNTIpIHwgKGIxID4+ICg2NCAtIDUyKSkpIF4gYjg7CisKKwliMCArPSBiNzsKKwliNyA9ICgoYjcgPDwgMzMpIHwgKGI3ID4+ICg2NCAtIDMzKSkpIF4gYjA7CisKKwliMiArPSBiNTsKKwliNSA9ICgoYjUgPDwgNCkgfCAoYjUgPj4gKDY0IC0gNCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUxKSB8IChiMyA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDEzKSB8IChiMSA+PiAoNjQgLSAxMykpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAzNCkgfCAoYjE1ID4+ICg2NCAtIDM0KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MSkgfCAoYjEzID4+ICg2NCAtIDQxKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU5KSB8IChiMTEgPj4gKDY0IC0gNTkpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTcpIHwgKGI5ID4+ICg2NCAtIDE3KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDUpIHwgKGIxNSA+PiAoNjQgLSA1KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgMjApIHwgKGIxMSA+PiAoNjQgLSAyMCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDQ4KSB8IChiMTMgPj4gKDY0IC0gNDgpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA0MSkgfCAoYjkgPj4gKDY0IC0gNDEpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgNDcpIHwgKGIxID4+ICg2NCAtIDQ3KSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDI4KSB8IChiNSA+PiAoNjQgLSAyOCkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAxNikgfCAoYjMgPj4gKDY0IC0gMTYpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDI1KSB8IChiNyA+PiAoNjQgLSAyNSkpKSBeIGIxMjsKKworCWIxICs9IGsxOworCWIwICs9IGIxICsgazA7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGIwOworCisJYjMgKz0gazM7CisJYjIgKz0gYjMgKyBrMjsKKwliMyA9ICgoYjMgPDwgOSkgfCAoYjMgPj4gKDY0IC0gOSkpKSBeIGIyOworCisJYjUgKz0gazU7CisJYjQgKz0gYjUgKyBrNDsKKwliNSA9ICgoYjUgPDwgMzcpIHwgKGI1ID4+ICg2NCAtIDM3KSkpIF4gYjQ7CisKKwliNyArPSBrNzsKKwliNiArPSBiNyArIGs2OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiNjsKKworCWI5ICs9IGs5OworCWI4ICs9IGI5ICsgazg7CisJYjkgPSAoKGI5IDw8IDEyKSB8IChiOSA+PiAoNjQgLSAxMikpKSBeIGI4OworCisJYjExICs9IGsxMTsKKwliMTAgKz0gYjExICsgazEwOworCWIxMSA9ICgoYjExIDw8IDQ3KSB8IChiMTEgPj4gKDY0IC0gNDcpKSkgXiBiMTA7CisKKwliMTMgKz0gazEzICsgdDI7CisJYjEyICs9IGIxMyArIGsxMjsKKwliMTMgPSAoKGIxMyA8PCA0NCkgfCAoYjEzID4+ICg2NCAtIDQ0KSkpIF4gYjEyOworCisJYjE1ICs9IGsxNSArIDE3OworCWIxNCArPSBiMTUgKyBrMTQgKyB0MDsKKwliMTUgPSAoKGIxNSA8PCAzMCkgfCAoYjE1ID4+ICg2NCAtIDMwKSkpIF4gYjE0OworCisJYjAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDE2KSB8IChiOSA+PiAoNjQgLSAxNikpKSBeIGIwOworCisJYjIgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM0KSB8IChiMTMgPj4gKDY0IC0gMzQpKSkgXiBiMjsKKworCWI2ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA1NikgfCAoYjExID4+ICg2NCAtIDU2KSkpIF4gYjY7CisKKwliNCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNTEpIHwgKGIxNSA+PiAoNjQgLSA1MSkpKSBeIGI0OworCisJYjEwICs9IGI3OworCWI3ID0gKChiNyA8PCA0KSB8IChiNyA+PiAoNjQgLSA0KSkpIF4gYjEwOworCisJYjEyICs9IGIzOworCWIzID0gKChiMyA8PCA1MykgfCAoYjMgPj4gKDY0IC0gNTMpKSkgXiBiMTI7CisKKwliMTQgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQyKSB8IChiNSA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxOworCWIxID0gKChiMSA8PCA0MSkgfCAoYjEgPj4gKDY0IC0gNDEpKSkgXiBiODsKKworCWIwICs9IGI3OworCWI3ID0gKChiNyA8PCAzMSkgfCAoYjcgPj4gKDY0IC0gMzEpKSkgXiBiMDsKKworCWIyICs9IGI1OworCWI1ID0gKChiNSA8PCA0NCkgfCAoYjUgPj4gKDY0IC0gNDQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA0NykgfCAoYjMgPj4gKDY0IC0gNDcpKSkgXiBiNDsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCA0NikgfCAoYjEgPj4gKDY0IC0gNDYpKSkgXiBiNjsKKworCWIxMiArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgMTkpIHwgKGIxNSA+PiAoNjQgLSAxOSkpKSBeIGIxMjsKKworCWIxNCArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDIpIHwgKGIxMyA+PiAoNjQgLSA0MikpKSBeIGIxNDsKKworCWI4ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA0NCkgfCAoYjExID4+ICg2NCAtIDQ0KSkpIF4gYjg7CisKKwliMTAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDI1KSB8IChiOSA+PiAoNjQgLSAyNSkpKSBeIGIxMDsKKworCWIwICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA5KSB8IChiMTUgPj4gKDY0IC0gOSkpKSBeIGIwOworCisJYjIgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ4KSB8IChiMTEgPj4gKDY0IC0gNDgpKSkgXiBiMjsKKworCWI2ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCAzNSkgfCAoYjEzID4+ICg2NCAtIDM1KSkpIF4gYjY7CisKKwliNCArPSBiOTsKKwliOSA9ICgoYjkgPDwgNTIpIHwgKGI5ID4+ICg2NCAtIDUyKSkpIF4gYjQ7CisKKwliMTQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDIzKSB8IChiMSA+PiAoNjQgLSAyMykpKSBeIGIxNDsKKworCWI4ICs9IGI1OworCWI1ID0gKChiNSA8PCAzMSkgfCAoYjUgPj4gKDY0IC0gMzEpKSkgXiBiODsKKworCWIxMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMzcpIHwgKGIzID4+ICg2NCAtIDM3KSkpIF4gYjEwOworCisJYjEyICs9IGI3OworCWI3ID0gKChiNyA8PCAyMCkgfCAoYjcgPj4gKDY0IC0gMjApKSkgXiBiMTI7CisKKwliMSArPSBrMjsKKwliMCArPSBiMSArIGsxOworCWIxID0gKChiMSA8PCAyNCkgfCAoYjEgPj4gKDY0IC0gMjQpKSkgXiBiMDsKKworCWIzICs9IGs0OworCWIyICs9IGIzICsgazM7CisJYjMgPSAoKGIzIDw8IDEzKSB8IChiMyA+PiAoNjQgLSAxMykpKSBeIGIyOworCisJYjUgKz0gazY7CisJYjQgKz0gYjUgKyBrNTsKKwliNSA9ICgoYjUgPDwgOCkgfCAoYjUgPj4gKDY0IC0gOCkpKSBeIGI0OworCisJYjcgKz0gazg7CisJYjYgKz0gYjcgKyBrNzsKKwliNyA9ICgoYjcgPDwgNDcpIHwgKGI3ID4+ICg2NCAtIDQ3KSkpIF4gYjY7CisKKwliOSArPSBrMTA7CisJYjggKz0gYjkgKyBrOTsKKwliOSA9ICgoYjkgPDwgOCkgfCAoYjkgPj4gKDY0IC0gOCkpKSBeIGI4OworCisJYjExICs9IGsxMjsKKwliMTAgKz0gYjExICsgazExOworCWIxMSA9ICgoYjExIDw8IDE3KSB8IChiMTEgPj4gKDY0IC0gMTcpKSkgXiBiMTA7CisKKwliMTMgKz0gazE0ICsgdDA7CisJYjEyICs9IGIxMyArIGsxMzsKKwliMTMgPSAoKGIxMyA8PCAyMikgfCAoYjEzID4+ICg2NCAtIDIyKSkpIF4gYjEyOworCisJYjE1ICs9IGsxNiArIDE4OworCWIxNCArPSBiMTUgKyBrMTUgKyB0MTsKKwliMTUgPSAoKGIxNSA8PCAzNykgfCAoYjE1ID4+ICg2NCAtIDM3KSkpIF4gYjE0OworCisJYjAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDM4KSB8IChiOSA+PiAoNjQgLSAzOCkpKSBeIGIwOworCisJYjIgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDE5KSB8IChiMTMgPj4gKDY0IC0gMTkpKSkgXiBiMjsKKworCWI2ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCAxMCkgfCAoYjExID4+ICg2NCAtIDEwKSkpIF4gYjY7CisKKwliNCArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgNTUpIHwgKGIxNSA+PiAoNjQgLSA1NSkpKSBeIGI0OworCisJYjEwICs9IGI3OworCWI3ID0gKChiNyA8PCA0OSkgfCAoYjcgPj4gKDY0IC0gNDkpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDE4KSB8IChiMyA+PiAoNjQgLSAxOCkpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgMjMpIHwgKGI1ID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDUyKSB8IChiMSA+PiAoNjQgLSA1MikpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMzKSB8IChiNyA+PiAoNjQgLSAzMykpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQpIHwgKGI1ID4+ICg2NCAtIDQpKSkgXiBiMjsKKworCWI0ICs9IGIzOworCWIzID0gKChiMyA8PCA1MSkgfCAoYjMgPj4gKDY0IC0gNTEpKSkgXiBiNDsKKworCWI2ICs9IGIxOworCWIxID0gKChiMSA8PCAxMykgfCAoYjEgPj4gKDY0IC0gMTMpKSkgXiBiNjsKKworCWIxMiArPSBiMTU7CisJYjE1ID0gKChiMTUgPDwgMzQpIHwgKGIxNSA+PiAoNjQgLSAzNCkpKSBeIGIxMjsKKworCWIxNCArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgNDEpIHwgKGIxMyA+PiAoNjQgLSA0MSkpKSBeIGIxNDsKKworCWI4ICs9IGIxMTsKKwliMTEgPSAoKGIxMSA8PCA1OSkgfCAoYjExID4+ICg2NCAtIDU5KSkpIF4gYjg7CisKKwliMTAgKz0gYjk7CisJYjkgPSAoKGI5IDw8IDE3KSB8IChiOSA+PiAoNjQgLSAxNykpKSBeIGIxMDsKKworCWIwICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1KSB8IChiMTUgPj4gKDY0IC0gNSkpKSBeIGIwOworCisJYjIgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDIwKSB8IChiMTEgPj4gKDY0IC0gMjApKSkgXiBiMjsKKworCWI2ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0OCkgfCAoYjEzID4+ICg2NCAtIDQ4KSkpIF4gYjY7CisKKwliNCArPSBiOTsKKwliOSA9ICgoYjkgPDwgNDEpIHwgKGI5ID4+ICg2NCAtIDQxKSkpIF4gYjQ7CisKKwliMTQgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ3KSB8IChiMSA+PiAoNjQgLSA0NykpKSBeIGIxNDsKKworCWI4ICs9IGI1OworCWI1ID0gKChiNSA8PCAyOCkgfCAoYjUgPj4gKDY0IC0gMjgpKSkgXiBiODsKKworCWIxMCArPSBiMzsKKwliMyA9ICgoYjMgPDwgMTYpIHwgKGIzID4+ICg2NCAtIDE2KSkpIF4gYjEwOworCisJYjEyICs9IGI3OworCWI3ID0gKChiNyA8PCAyNSkgfCAoYjcgPj4gKDY0IC0gMjUpKSkgXiBiMTI7CisKKwliMSArPSBrMzsKKwliMCArPSBiMSArIGsyOworCWIxID0gKChiMSA8PCA0MSkgfCAoYjEgPj4gKDY0IC0gNDEpKSkgXiBiMDsKKworCWIzICs9IGs1OworCWIyICs9IGIzICsgazQ7CisJYjMgPSAoKGIzIDw8IDkpIHwgKGIzID4+ICg2NCAtIDkpKSkgXiBiMjsKKworCWI1ICs9IGs3OworCWI0ICs9IGI1ICsgazY7CisJYjUgPSAoKGI1IDw8IDM3KSB8IChiNSA+PiAoNjQgLSAzNykpKSBeIGI0OworCisJYjcgKz0gazk7CisJYjYgKz0gYjcgKyBrODsKKwliNyA9ICgoYjcgPDwgMzEpIHwgKGI3ID4+ICg2NCAtIDMxKSkpIF4gYjY7CisKKwliOSArPSBrMTE7CisJYjggKz0gYjkgKyBrMTA7CisJYjkgPSAoKGI5IDw8IDEyKSB8IChiOSA+PiAoNjQgLSAxMikpKSBeIGI4OworCisJYjExICs9IGsxMzsKKwliMTAgKz0gYjExICsgazEyOworCWIxMSA9ICgoYjExIDw8IDQ3KSB8IChiMTEgPj4gKDY0IC0gNDcpKSkgXiBiMTA7CisKKwliMTMgKz0gazE1ICsgdDE7CisJYjEyICs9IGIxMyArIGsxNDsKKwliMTMgPSAoKGIxMyA8PCA0NCkgfCAoYjEzID4+ICg2NCAtIDQ0KSkpIF4gYjEyOworCisJYjE1ICs9IGswICsgMTk7CisJYjE0ICs9IGIxNSArIGsxNiArIHQyOworCWIxNSA9ICgoYjE1IDw8IDMwKSB8IChiMTUgPj4gKDY0IC0gMzApKSkgXiBiMTQ7CisKKwliMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMTYpIHwgKGI5ID4+ICg2NCAtIDE2KSkpIF4gYjA7CisKKwliMiArPSBiMTM7CisJYjEzID0gKChiMTMgPDwgMzQpIHwgKGIxMyA+PiAoNjQgLSAzNCkpKSBeIGIyOworCisJYjYgKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDU2KSB8IChiMTEgPj4gKDY0IC0gNTYpKSkgXiBiNjsKKworCWI0ICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCA1MSkgfCAoYjE1ID4+ICg2NCAtIDUxKSkpIF4gYjQ7CisKKwliMTAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDQpIHwgKGI3ID4+ICg2NCAtIDQpKSkgXiBiMTA7CisKKwliMTIgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDUzKSB8IChiMyA+PiAoNjQgLSA1MykpKSBeIGIxMjsKKworCWIxNCArPSBiNTsKKwliNSA9ICgoYjUgPDwgNDIpIHwgKGI1ID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQxKSB8IChiMSA+PiAoNjQgLSA0MSkpKSBeIGI4OworCisJYjAgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDMxKSB8IChiNyA+PiAoNjQgLSAzMSkpKSBeIGIwOworCisJYjIgKz0gYjU7CisJYjUgPSAoKGI1IDw8IDQ0KSB8IChiNSA+PiAoNjQgLSA0NCkpKSBeIGIyOworCisJYjQgKz0gYjM7CisJYjMgPSAoKGIzIDw8IDQ3KSB8IChiMyA+PiAoNjQgLSA0NykpKSBeIGI0OworCisJYjYgKz0gYjE7CisJYjEgPSAoKGIxIDw8IDQ2KSB8IChiMSA+PiAoNjQgLSA0NikpKSBeIGI2OworCisJYjEyICs9IGIxNTsKKwliMTUgPSAoKGIxNSA8PCAxOSkgfCAoYjE1ID4+ICg2NCAtIDE5KSkpIF4gYjEyOworCisJYjE0ICs9IGIxMzsKKwliMTMgPSAoKGIxMyA8PCA0MikgfCAoYjEzID4+ICg2NCAtIDQyKSkpIF4gYjE0OworCisJYjggKz0gYjExOworCWIxMSA9ICgoYjExIDw8IDQ0KSB8IChiMTEgPj4gKDY0IC0gNDQpKSkgXiBiODsKKworCWIxMCArPSBiOTsKKwliOSA9ICgoYjkgPDwgMjUpIHwgKGI5ID4+ICg2NCAtIDI1KSkpIF4gYjEwOworCisJYjAgKz0gYjE1OworCWIxNSA9ICgoYjE1IDw8IDkpIHwgKGIxNSA+PiAoNjQgLSA5KSkpIF4gYjA7CisKKwliMiArPSBiMTE7CisJYjExID0gKChiMTEgPDwgNDgpIHwgKGIxMSA+PiAoNjQgLSA0OCkpKSBeIGIyOworCisJYjYgKz0gYjEzOworCWIxMyA9ICgoYjEzIDw8IDM1KSB8IChiMTMgPj4gKDY0IC0gMzUpKSkgXiBiNjsKKworCWI0ICs9IGI5OworCWI5ID0gKChiOSA8PCA1MikgfCAoYjkgPj4gKDY0IC0gNTIpKSkgXiBiNDsKKworCWIxNCArPSBiMTsKKwliMSA9ICgoYjEgPDwgMjMpIHwgKGIxID4+ICg2NCAtIDIzKSkpIF4gYjE0OworCisJYjggKz0gYjU7CisJYjUgPSAoKGI1IDw8IDMxKSB8IChiNSA+PiAoNjQgLSAzMSkpKSBeIGI4OworCisJYjEwICs9IGIzOworCWIzID0gKChiMyA8PCAzNykgfCAoYjMgPj4gKDY0IC0gMzcpKSkgXiBiMTA7CisKKwliMTIgKz0gYjc7CisJYjcgPSAoKGI3IDw8IDIwKSB8IChiNyA+PiAoNjQgLSAyMCkpKSBeIGIxMjsKKworCW91dHB1dFswXSA9IGIwICsgazM7CisJb3V0cHV0WzFdID0gYjEgKyBrNDsKKwlvdXRwdXRbMl0gPSBiMiArIGs1OworCW91dHB1dFszXSA9IGIzICsgazY7CisJb3V0cHV0WzRdID0gYjQgKyBrNzsKKwlvdXRwdXRbNV0gPSBiNSArIGs4OworCW91dHB1dFs2XSA9IGI2ICsgazk7CisJb3V0cHV0WzddID0gYjcgKyBrMTA7CisJb3V0cHV0WzhdID0gYjggKyBrMTE7CisJb3V0cHV0WzldID0gYjkgKyBrMTI7CisJb3V0cHV0WzEwXSA9IGIxMCArIGsxMzsKKwlvdXRwdXRbMTFdID0gYjExICsgazE0OworCW91dHB1dFsxMl0gPSBiMTIgKyBrMTU7CisJb3V0cHV0WzEzXSA9IGIxMyArIGsxNiArIHQyOworCW91dHB1dFsxNF0gPSBiMTQgKyBrMCArIHQwOworCW91dHB1dFsxNV0gPSBiMTUgKyBrMSArIDIwOworfQorCit2b2lkIHRocmVlZmlzaF9kZWNyeXB0XzEwMjQoc3RydWN0IHRocmVlZmlzaF9rZXkgKmtleV9jdHgsIHU2NCAqaW5wdXQsCisJCQkgICAgdTY0ICpvdXRwdXQpCit7CisJdTY0IGIwID0gaW5wdXRbMF0sIGIxID0gaW5wdXRbMV0sCisJICAgIGIyID0gaW5wdXRbMl0sIGIzID0gaW5wdXRbM10sCisJICAgIGI0ID0gaW5wdXRbNF0sIGI1ID0gaW5wdXRbNV0sCisJICAgIGI2ID0gaW5wdXRbNl0sIGI3ID0gaW5wdXRbN10sCisJICAgIGI4ID0gaW5wdXRbOF0sIGI5ID0gaW5wdXRbOV0sCisJICAgIGIxMCA9IGlucHV0WzEwXSwgYjExID0gaW5wdXRbMTFdLAorCSAgICBiMTIgPSBpbnB1dFsxMl0sIGIxMyA9IGlucHV0WzEzXSwKKwkgICAgYjE0ID0gaW5wdXRbMTRdLCBiMTUgPSBpbnB1dFsxNV07CisJdTY0IGswID0ga2V5X2N0eC0+a2V5WzBdLCBrMSA9IGtleV9jdHgtPmtleVsxXSwKKwkgICAgazIgPSBrZXlfY3R4LT5rZXlbMl0sIGszID0ga2V5X2N0eC0+a2V5WzNdLAorCSAgICBrNCA9IGtleV9jdHgtPmtleVs0XSwgazUgPSBrZXlfY3R4LT5rZXlbNV0sCisJICAgIGs2ID0ga2V5X2N0eC0+a2V5WzZdLCBrNyA9IGtleV9jdHgtPmtleVs3XSwKKwkgICAgazggPSBrZXlfY3R4LT5rZXlbOF0sIGs5ID0ga2V5X2N0eC0+a2V5WzldLAorCSAgICBrMTAgPSBrZXlfY3R4LT5rZXlbMTBdLCBrMTEgPSBrZXlfY3R4LT5rZXlbMTFdLAorCSAgICBrMTIgPSBrZXlfY3R4LT5rZXlbMTJdLCBrMTMgPSBrZXlfY3R4LT5rZXlbMTNdLAorCSAgICBrMTQgPSBrZXlfY3R4LT5rZXlbMTRdLCBrMTUgPSBrZXlfY3R4LT5rZXlbMTVdLAorCSAgICBrMTYgPSBrZXlfY3R4LT5rZXlbMTZdOworCXU2NCB0MCA9IGtleV9jdHgtPnR3ZWFrWzBdLCB0MSA9IGtleV9jdHgtPnR3ZWFrWzFdLAorCSAgICB0MiA9IGtleV9jdHgtPnR3ZWFrWzJdOworCXU2NCB0bXA7CisKKwliMCAtPSBrMzsKKwliMSAtPSBrNDsKKwliMiAtPSBrNTsKKwliMyAtPSBrNjsKKwliNCAtPSBrNzsKKwliNSAtPSBrODsKKwliNiAtPSBrOTsKKwliNyAtPSBrMTA7CisJYjggLT0gazExOworCWI5IC09IGsxMjsKKwliMTAgLT0gazEzOworCWIxMSAtPSBrMTQ7CisJYjEyIC09IGsxNTsKKwliMTMgLT0gazE2ICsgdDI7CisJYjE0IC09IGswICsgdDA7CisJYjE1IC09IGsxICsgMjA7CisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDUzKSB8ICh0bXAgPDwgKDY0IC0gNTMpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjE0IC09IGIxNSArIGsxNiArIHQyOworCWIxNSAtPSBrMCArIDE5OworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIxMiAtPSBiMTMgKyBrMTQ7CisJYjEzIC09IGsxNSArIHQxOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxMCAtPSBiMTEgKyBrMTI7CisJYjExIC09IGsxMzsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliOCAtPSBiOSArIGsxMDsKKwliOSAtPSBrMTE7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzMSkgfCAodG1wIDw8ICg2NCAtIDMxKSk7CisJYjYgLT0gYjcgKyBrODsKKwliNyAtPSBrOTsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliNCAtPSBiNSArIGs2OworCWI1IC09IGs3OworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gOSkgfCAodG1wIDw8ICg2NCAtIDkpKTsKKwliMiAtPSBiMyArIGs0OworCWIzIC09IGs1OworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWIwIC09IGIxICsgazI7CisJYjEgLT0gazM7CisKKwl0bXAgPSBiNyBeIGIxMjsKKwliNyA9ICh0bXAgPj4gMjUpIHwgKHRtcCA8PCAoNjQgLSAyNSkpOworCWIxMiAtPSBiNzsKKworCXRtcCA9IGIzIF4gYjEwOworCWIzID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjEwIC09IGIzOworCisJdG1wID0gYjUgXiBiODsKKwliNSA9ICh0bXAgPj4gMjgpIHwgKHRtcCA8PCAoNjQgLSAyOCkpOworCWI4IC09IGI1OworCisJdG1wID0gYjEgXiBiMTQ7CisJYjEgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliMTQgLT0gYjE7CisKKwl0bXAgPSBiOSBeIGI0OworCWI5ID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjQgLT0gYjk7CisKKwl0bXAgPSBiMTMgXiBiNjsKKwliMTMgPSAodG1wID4+IDQ4KSB8ICh0bXAgPDwgKDY0IC0gNDgpKTsKKwliNiAtPSBiMTM7CisKKwl0bXAgPSBiMTEgXiBiMjsKKwliMTEgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMiAtPSBiMTE7CisKKwl0bXAgPSBiMTUgXiBiMDsKKwliMTUgPSAodG1wID4+IDUpIHwgKHRtcCA8PCAoNjQgLSA1KSk7CisJYjAgLT0gYjE1OworCisJdG1wID0gYjkgXiBiMTA7CisJYjkgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliMTAgLT0gYjk7CisKKwl0bXAgPSBiMTEgXiBiODsKKwliMTEgPSAodG1wID4+IDU5KSB8ICh0bXAgPDwgKDY0IC0gNTkpKTsKKwliOCAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMTQ7CisJYjEzID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjE0IC09IGIxMzsKKworCXRtcCA9IGIxNSBeIGIxMjsKKwliMTUgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMTIgLT0gYjE1OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWI2IC09IGIxOworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNTEpIHwgKHRtcCA8PCAoNjQgLSA1MSkpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMzKSB8ICh0bXAgPDwgKDY0IC0gMzMpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDUyKSB8ICh0bXAgPDwgKDY0IC0gNTIpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDE4KSB8ICh0bXAgPDwgKDY0IC0gMTgpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNDkpIHwgKHRtcCA8PCAoNjQgLSA0OSkpOworCWIxMCAtPSBiNzsKKworCXRtcCA9IGIxNSBeIGI0OworCWIxNSA9ICh0bXAgPj4gNTUpIHwgKHRtcCA8PCAoNjQgLSA1NSkpOworCWI0IC09IGIxNTsKKworCXRtcCA9IGIxMSBeIGI2OworCWIxMSA9ICh0bXAgPj4gMTApIHwgKHRtcCA8PCAoNjQgLSAxMCkpOworCWI2IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIyOworCWIxMyA9ICh0bXAgPj4gMTkpIHwgKHRtcCA8PCAoNjQgLSAxOSkpOworCWIyIC09IGIxMzsKKworCXRtcCA9IGI5IF4gYjA7CisJYjkgPSAodG1wID4+IDM4KSB8ICh0bXAgPDwgKDY0IC0gMzgpKTsKKwliMCAtPSBiOTsKKworCXRtcCA9IGIxNSBeIGIxNDsKKwliMTUgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliMTQgLT0gYjE1ICsgazE1ICsgdDE7CisJYjE1IC09IGsxNiArIDE4OworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gMjIpIHwgKHRtcCA8PCAoNjQgLSAyMikpOworCWIxMiAtPSBiMTMgKyBrMTM7CisJYjEzIC09IGsxNCArIHQwOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrMTE7CisJYjExIC09IGsxMjsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjggLT0gYjkgKyBrOTsKKwliOSAtPSBrMTA7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjYgLT0gYjcgKyBrNzsKKwliNyAtPSBrODsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjQgLT0gYjUgKyBrNTsKKwliNSAtPSBrNjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliMiAtPSBiMyArIGszOworCWIzIC09IGs0OworCisJdG1wID0gYjEgXiBiMDsKKwliMSA9ICh0bXAgPj4gMjQpIHwgKHRtcCA8PCAoNjQgLSAyNCkpOworCWIwIC09IGIxICsgazE7CisJYjEgLT0gazI7CisKKwl0bXAgPSBiNyBeIGIxMjsKKwliNyA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIxMiAtPSBiNzsKKworCXRtcCA9IGIzIF4gYjEwOworCWIzID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjEwIC09IGIzOworCisJdG1wID0gYjUgXiBiODsKKwliNSA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI4IC09IGI1OworCisJdG1wID0gYjEgXiBiMTQ7CisJYjEgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjE7CisKKwl0bXAgPSBiOSBeIGI0OworCWI5ID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjQgLT0gYjk7CisKKwl0bXAgPSBiMTMgXiBiNjsKKwliMTMgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliNiAtPSBiMTM7CisKKwl0bXAgPSBiMTEgXiBiMjsKKwliMTEgPSAodG1wID4+IDQ4KSB8ICh0bXAgPDwgKDY0IC0gNDgpKTsKKwliMiAtPSBiMTE7CisKKwl0bXAgPSBiMTUgXiBiMDsKKwliMTUgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjE1OworCisJdG1wID0gYjkgXiBiMTA7CisJYjkgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTAgLT0gYjk7CisKKwl0bXAgPSBiMTEgXiBiODsKKwliMTEgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliOCAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMTQ7CisJYjEzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGIxMzsKKworCXRtcCA9IGIxNSBeIGIxMjsKKwliMTUgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMTIgLT0gYjE1OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWI2IC09IGIxOworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDQyKSB8ICh0bXAgPDwgKDY0IC0gNDIpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gNTMpIHwgKHRtcCA8PCAoNjQgLSA1MykpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIxMCAtPSBiNzsKKworCXRtcCA9IGIxNSBeIGI0OworCWIxNSA9ICh0bXAgPj4gNTEpIHwgKHRtcCA8PCAoNjQgLSA1MSkpOworCWI0IC09IGIxNTsKKworCXRtcCA9IGIxMSBeIGI2OworCWIxMSA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWI2IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIyOworCWIxMyA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIyIC09IGIxMzsKKworCXRtcCA9IGI5IF4gYjA7CisJYjkgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMCAtPSBiOTsKKworCXRtcCA9IGIxNSBeIGIxNDsKKwliMTUgPSAodG1wID4+IDMwKSB8ICh0bXAgPDwgKDY0IC0gMzApKTsKKwliMTQgLT0gYjE1ICsgazE0ICsgdDA7CisJYjE1IC09IGsxNSArIDE3OworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIxMiAtPSBiMTMgKyBrMTI7CisJYjEzIC09IGsxMyArIHQyOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxMCAtPSBiMTEgKyBrMTA7CisJYjExIC09IGsxMTsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliOCAtPSBiOSArIGs4OworCWI5IC09IGs5OworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI2IC09IGI3ICsgazY7CisJYjcgLT0gazc7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjQgLT0gYjUgKyBrNDsKKwliNSAtPSBrNTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjIgLT0gYjMgKyBrMjsKKwliMyAtPSBrMzsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMCAtPSBiMSArIGswOworCWIxIC09IGsxOworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDI4KSB8ICh0bXAgPDwgKDY0IC0gMjgpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiAyMCkgfCAodG1wIDw8ICg2NCAtIDIwKSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA1KSB8ICh0bXAgPDwgKDY0IC0gNSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA1OSkgfCAodG1wIDw8ICg2NCAtIDU5KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQpIHwgKHRtcCA8PCAoNjQgLSA0KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI4OworCWIxID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjggLT0gYjE7CisKKwl0bXAgPSBiNSBeIGIxNDsKKwliNSA9ICh0bXAgPj4gMjMpIHwgKHRtcCA8PCAoNjQgLSAyMykpOworCWIxNCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjEyOworCWIzID0gKHRtcCA+PiAxOCkgfCAodG1wIDw8ICg2NCAtIDE4KSk7CisJYjEyIC09IGIzOworCisJdG1wID0gYjcgXiBiMTA7CisJYjcgPSAodG1wID4+IDQ5KSB8ICh0bXAgPDwgKDY0IC0gNDkpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDU1KSB8ICh0bXAgPDwgKDY0IC0gNTUpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDEwKSB8ICh0bXAgPDwgKDY0IC0gMTApKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAzOCkgfCAodG1wIDw8ICg2NCAtIDM4KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjE0IC09IGIxNSArIGsxMyArIHQyOworCWIxNSAtPSBrMTQgKyAxNjsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMTIgLT0gYjEzICsgazExOworCWIxMyAtPSBrMTIgKyB0MTsKKworCXRtcCA9IGIxMSBeIGIxMDsKKwliMTEgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliMTAgLT0gYjExICsgazk7CisJYjExIC09IGsxMDsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjggLT0gYjkgKyBrNzsKKwliOSAtPSBrODsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNiAtPSBiNyArIGs1OworCWI3IC09IGs2OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gOCkgfCAodG1wIDw8ICg2NCAtIDgpKTsKKwliNCAtPSBiNSArIGszOworCWI1IC09IGs0OworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWIyIC09IGIzICsgazE7CisJYjMgLT0gazI7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjAgLT0gYjEgKyBrMTY7CisJYjEgLT0gazA7CisKKwl0bXAgPSBiNyBeIGIxMjsKKwliNyA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIxMiAtPSBiNzsKKworCXRtcCA9IGIzIF4gYjEwOworCWIzID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjEwIC09IGIzOworCisJdG1wID0gYjUgXiBiODsKKwliNSA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI4IC09IGI1OworCisJdG1wID0gYjEgXiBiMTQ7CisJYjEgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjE7CisKKwl0bXAgPSBiOSBeIGI0OworCWI5ID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjQgLT0gYjk7CisKKwl0bXAgPSBiMTMgXiBiNjsKKwliMTMgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliNiAtPSBiMTM7CisKKwl0bXAgPSBiMTEgXiBiMjsKKwliMTEgPSAodG1wID4+IDQ4KSB8ICh0bXAgPDwgKDY0IC0gNDgpKTsKKwliMiAtPSBiMTE7CisKKwl0bXAgPSBiMTUgXiBiMDsKKwliMTUgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjE1OworCisJdG1wID0gYjkgXiBiMTA7CisJYjkgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTAgLT0gYjk7CisKKwl0bXAgPSBiMTEgXiBiODsKKwliMTEgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliOCAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMTQ7CisJYjEzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGIxMzsKKworCXRtcCA9IGIxNSBeIGIxMjsKKwliMTUgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMTIgLT0gYjE1OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWI2IC09IGIxOworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDQyKSB8ICh0bXAgPDwgKDY0IC0gNDIpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gNTMpIHwgKHRtcCA8PCAoNjQgLSA1MykpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIxMCAtPSBiNzsKKworCXRtcCA9IGIxNSBeIGI0OworCWIxNSA9ICh0bXAgPj4gNTEpIHwgKHRtcCA8PCAoNjQgLSA1MSkpOworCWI0IC09IGIxNTsKKworCXRtcCA9IGIxMSBeIGI2OworCWIxMSA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWI2IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIyOworCWIxMyA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIyIC09IGIxMzsKKworCXRtcCA9IGI5IF4gYjA7CisJYjkgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMCAtPSBiOTsKKworCXRtcCA9IGIxNSBeIGIxNDsKKwliMTUgPSAodG1wID4+IDMwKSB8ICh0bXAgPDwgKDY0IC0gMzApKTsKKwliMTQgLT0gYjE1ICsgazEyICsgdDE7CisJYjE1IC09IGsxMyArIDE1OworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIxMiAtPSBiMTMgKyBrMTA7CisJYjEzIC09IGsxMSArIHQwOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxMCAtPSBiMTEgKyBrODsKKwliMTEgLT0gazk7CisKKwl0bXAgPSBiOSBeIGI4OworCWI5ID0gKHRtcCA+PiAxMikgfCAodG1wIDw8ICg2NCAtIDEyKSk7CisJYjggLT0gYjkgKyBrNjsKKwliOSAtPSBrNzsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliNiAtPSBiNyArIGs0OworCWI3IC09IGs1OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWI0IC09IGI1ICsgazI7CisJYjUgLT0gazM7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIyIC09IGIzICsgazA7CisJYjMgLT0gazE7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrMTU7CisJYjEgLT0gazE2OworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDI4KSB8ICh0bXAgPDwgKDY0IC0gMjgpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiAyMCkgfCAodG1wIDw8ICg2NCAtIDIwKSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA1KSB8ICh0bXAgPDwgKDY0IC0gNSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA1OSkgfCAodG1wIDw8ICg2NCAtIDU5KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQpIHwgKHRtcCA8PCAoNjQgLSA0KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI4OworCWIxID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjggLT0gYjE7CisKKwl0bXAgPSBiNSBeIGIxNDsKKwliNSA9ICh0bXAgPj4gMjMpIHwgKHRtcCA8PCAoNjQgLSAyMykpOworCWIxNCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjEyOworCWIzID0gKHRtcCA+PiAxOCkgfCAodG1wIDw8ICg2NCAtIDE4KSk7CisJYjEyIC09IGIzOworCisJdG1wID0gYjcgXiBiMTA7CisJYjcgPSAodG1wID4+IDQ5KSB8ICh0bXAgPDwgKDY0IC0gNDkpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDU1KSB8ICh0bXAgPDwgKDY0IC0gNTUpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDEwKSB8ICh0bXAgPDwgKDY0IC0gMTApKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAzOCkgfCAodG1wIDw8ICg2NCAtIDM4KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjE0IC09IGIxNSArIGsxMSArIHQwOworCWIxNSAtPSBrMTIgKyAxNDsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDIyKSB8ICh0bXAgPDwgKDY0IC0gMjIpKTsKKwliMTIgLT0gYjEzICsgazk7CisJYjEzIC09IGsxMCArIHQyOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrNzsKKwliMTEgLT0gazg7CisKKwl0bXAgPSBiOSBeIGI4OworCWI5ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI4IC09IGI5ICsgazU7CisJYjkgLT0gazY7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjYgLT0gYjcgKyBrMzsKKwliNyAtPSBrNDsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjQgLT0gYjUgKyBrMTsKKwliNSAtPSBrMjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliMiAtPSBiMyArIGsxNjsKKwliMyAtPSBrMDsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliMCAtPSBiMSArIGsxNDsKKwliMSAtPSBrMTU7CisKKwl0bXAgPSBiNyBeIGIxMjsKKwliNyA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIxMiAtPSBiNzsKKworCXRtcCA9IGIzIF4gYjEwOworCWIzID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjEwIC09IGIzOworCisJdG1wID0gYjUgXiBiODsKKwliNSA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI4IC09IGI1OworCisJdG1wID0gYjEgXiBiMTQ7CisJYjEgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjE7CisKKwl0bXAgPSBiOSBeIGI0OworCWI5ID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjQgLT0gYjk7CisKKwl0bXAgPSBiMTMgXiBiNjsKKwliMTMgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliNiAtPSBiMTM7CisKKwl0bXAgPSBiMTEgXiBiMjsKKwliMTEgPSAodG1wID4+IDQ4KSB8ICh0bXAgPDwgKDY0IC0gNDgpKTsKKwliMiAtPSBiMTE7CisKKwl0bXAgPSBiMTUgXiBiMDsKKwliMTUgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjE1OworCisJdG1wID0gYjkgXiBiMTA7CisJYjkgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTAgLT0gYjk7CisKKwl0bXAgPSBiMTEgXiBiODsKKwliMTEgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliOCAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMTQ7CisJYjEzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGIxMzsKKworCXRtcCA9IGIxNSBeIGIxMjsKKwliMTUgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMTIgLT0gYjE1OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWI2IC09IGIxOworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDQyKSB8ICh0bXAgPDwgKDY0IC0gNDIpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gNTMpIHwgKHRtcCA8PCAoNjQgLSA1MykpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIxMCAtPSBiNzsKKworCXRtcCA9IGIxNSBeIGI0OworCWIxNSA9ICh0bXAgPj4gNTEpIHwgKHRtcCA8PCAoNjQgLSA1MSkpOworCWI0IC09IGIxNTsKKworCXRtcCA9IGIxMSBeIGI2OworCWIxMSA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWI2IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIyOworCWIxMyA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIyIC09IGIxMzsKKworCXRtcCA9IGI5IF4gYjA7CisJYjkgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMCAtPSBiOTsKKworCXRtcCA9IGIxNSBeIGIxNDsKKwliMTUgPSAodG1wID4+IDMwKSB8ICh0bXAgPDwgKDY0IC0gMzApKTsKKwliMTQgLT0gYjE1ICsgazEwICsgdDI7CisJYjE1IC09IGsxMSArIDEzOworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIxMiAtPSBiMTMgKyBrODsKKwliMTMgLT0gazkgKyB0MTsKKworCXRtcCA9IGIxMSBeIGIxMDsKKwliMTEgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliMTAgLT0gYjExICsgazY7CisJYjExIC09IGs3OworCisJdG1wID0gYjkgXiBiODsKKwliOSA9ICh0bXAgPj4gMTIpIHwgKHRtcCA8PCAoNjQgLSAxMikpOworCWI4IC09IGI5ICsgazQ7CisJYjkgLT0gazU7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzMSkgfCAodG1wIDw8ICg2NCAtIDMxKSk7CisJYjYgLT0gYjcgKyBrMjsKKwliNyAtPSBrMzsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliNCAtPSBiNSArIGswOworCWI1IC09IGsxOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gOSkgfCAodG1wIDw8ICg2NCAtIDkpKTsKKwliMiAtPSBiMyArIGsxNTsKKwliMyAtPSBrMTY7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrMTM7CisJYjEgLT0gazE0OworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDI4KSB8ICh0bXAgPDwgKDY0IC0gMjgpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiAyMCkgfCAodG1wIDw8ICg2NCAtIDIwKSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA1KSB8ICh0bXAgPDwgKDY0IC0gNSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA1OSkgfCAodG1wIDw8ICg2NCAtIDU5KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQpIHwgKHRtcCA8PCAoNjQgLSA0KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI4OworCWIxID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjggLT0gYjE7CisKKwl0bXAgPSBiNSBeIGIxNDsKKwliNSA9ICh0bXAgPj4gMjMpIHwgKHRtcCA8PCAoNjQgLSAyMykpOworCWIxNCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjEyOworCWIzID0gKHRtcCA+PiAxOCkgfCAodG1wIDw8ICg2NCAtIDE4KSk7CisJYjEyIC09IGIzOworCisJdG1wID0gYjcgXiBiMTA7CisJYjcgPSAodG1wID4+IDQ5KSB8ICh0bXAgPDwgKDY0IC0gNDkpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDU1KSB8ICh0bXAgPDwgKDY0IC0gNTUpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDEwKSB8ICh0bXAgPDwgKDY0IC0gMTApKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAzOCkgfCAodG1wIDw8ICg2NCAtIDM4KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjE0IC09IGIxNSArIGs5ICsgdDE7CisJYjE1IC09IGsxMCArIDEyOworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gMjIpIHwgKHRtcCA8PCAoNjQgLSAyMikpOworCWIxMiAtPSBiMTMgKyBrNzsKKwliMTMgLT0gazggKyB0MDsKKworCXRtcCA9IGIxMSBeIGIxMDsKKwliMTEgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliMTAgLT0gYjExICsgazU7CisJYjExIC09IGs2OworCisJdG1wID0gYjkgXiBiODsKKwliOSA9ICh0bXAgPj4gOCkgfCAodG1wIDw8ICg2NCAtIDgpKTsKKwliOCAtPSBiOSArIGszOworCWI5IC09IGs0OworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI2IC09IGI3ICsgazE7CisJYjcgLT0gazI7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI0IC09IGI1ICsgazE2OworCWI1IC09IGswOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWIyIC09IGIzICsgazE0OworCWIzIC09IGsxNTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliMCAtPSBiMSArIGsxMjsKKwliMSAtPSBrMTM7CisKKwl0bXAgPSBiNyBeIGIxMjsKKwliNyA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIxMiAtPSBiNzsKKworCXRtcCA9IGIzIF4gYjEwOworCWIzID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjEwIC09IGIzOworCisJdG1wID0gYjUgXiBiODsKKwliNSA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI4IC09IGI1OworCisJdG1wID0gYjEgXiBiMTQ7CisJYjEgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjE7CisKKwl0bXAgPSBiOSBeIGI0OworCWI5ID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjQgLT0gYjk7CisKKwl0bXAgPSBiMTMgXiBiNjsKKwliMTMgPSAodG1wID4+IDM1KSB8ICh0bXAgPDwgKDY0IC0gMzUpKTsKKwliNiAtPSBiMTM7CisKKwl0bXAgPSBiMTEgXiBiMjsKKwliMTEgPSAodG1wID4+IDQ4KSB8ICh0bXAgPDwgKDY0IC0gNDgpKTsKKwliMiAtPSBiMTE7CisKKwl0bXAgPSBiMTUgXiBiMDsKKwliMTUgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjAgLT0gYjE1OworCisJdG1wID0gYjkgXiBiMTA7CisJYjkgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTAgLT0gYjk7CisKKwl0bXAgPSBiMTEgXiBiODsKKwliMTEgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliOCAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMTQ7CisJYjEzID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGIxMzsKKworCXRtcCA9IGIxNSBeIGIxMjsKKwliMTUgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMTIgLT0gYjE1OworCisJdG1wID0gYjEgXiBiNjsKKwliMSA9ICh0bXAgPj4gNDYpIHwgKHRtcCA8PCAoNjQgLSA0NikpOworCWI2IC09IGIxOworCisJdG1wID0gYjMgXiBiNDsKKwliMyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI0IC09IGIzOworCisJdG1wID0gYjUgXiBiMjsKKwliNSA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDQyKSB8ICh0bXAgPDwgKDY0IC0gNDIpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gNTMpIHwgKHRtcCA8PCAoNjQgLSA1MykpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIxMCAtPSBiNzsKKworCXRtcCA9IGIxNSBeIGI0OworCWIxNSA9ICh0bXAgPj4gNTEpIHwgKHRtcCA8PCAoNjQgLSA1MSkpOworCWI0IC09IGIxNTsKKworCXRtcCA9IGIxMSBeIGI2OworCWIxMSA9ICh0bXAgPj4gNTYpIHwgKHRtcCA8PCAoNjQgLSA1NikpOworCWI2IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIyOworCWIxMyA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIyIC09IGIxMzsKKworCXRtcCA9IGI5IF4gYjA7CisJYjkgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMCAtPSBiOTsKKworCXRtcCA9IGIxNSBeIGIxNDsKKwliMTUgPSAodG1wID4+IDMwKSB8ICh0bXAgPDwgKDY0IC0gMzApKTsKKwliMTQgLT0gYjE1ICsgazggKyB0MDsKKwliMTUgLT0gazkgKyAxMTsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMTIgLT0gYjEzICsgazY7CisJYjEzIC09IGs3ICsgdDI7CisKKwl0bXAgPSBiMTEgXiBiMTA7CisJYjExID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjEwIC09IGIxMSArIGs0OworCWIxMSAtPSBrNTsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliOCAtPSBiOSArIGsyOworCWI5IC09IGszOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI2IC09IGI3ICsgazA7CisJYjcgLT0gazE7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjQgLT0gYjUgKyBrMTU7CisJYjUgLT0gazE2OworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gOSkgfCAodG1wIDw8ICg2NCAtIDkpKTsKKwliMiAtPSBiMyArIGsxMzsKKwliMyAtPSBrMTQ7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrMTE7CisJYjEgLT0gazEyOworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDI1KSB8ICh0bXAgPDwgKDY0IC0gMjUpKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMTYpIHwgKHRtcCA8PCAoNjQgLSAxNikpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDI4KSB8ICh0bXAgPDwgKDY0IC0gMjgpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiAyMCkgfCAodG1wIDw8ICg2NCAtIDIwKSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA1KSB8ICh0bXAgPDwgKDY0IC0gNSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAxNykgfCAodG1wIDw8ICg2NCAtIDE3KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA1OSkgfCAodG1wIDw8ICg2NCAtIDU5KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDEpIHwgKHRtcCA8PCAoNjQgLSA0MSkpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAzNCkgfCAodG1wIDw8ICg2NCAtIDM0KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQpIHwgKHRtcCA8PCAoNjQgLSA0KSk7CisJYjIgLT0gYjU7CisKKwl0bXAgPSBiNyBeIGIwOworCWI3ID0gKHRtcCA+PiAzMykgfCAodG1wIDw8ICg2NCAtIDMzKSk7CisJYjAgLT0gYjc7CisKKwl0bXAgPSBiMSBeIGI4OworCWIxID0gKHRtcCA+PiA1MikgfCAodG1wIDw8ICg2NCAtIDUyKSk7CisJYjggLT0gYjE7CisKKwl0bXAgPSBiNSBeIGIxNDsKKwliNSA9ICh0bXAgPj4gMjMpIHwgKHRtcCA8PCAoNjQgLSAyMykpOworCWIxNCAtPSBiNTsKKworCXRtcCA9IGIzIF4gYjEyOworCWIzID0gKHRtcCA+PiAxOCkgfCAodG1wIDw8ICg2NCAtIDE4KSk7CisJYjEyIC09IGIzOworCisJdG1wID0gYjcgXiBiMTA7CisJYjcgPSAodG1wID4+IDQ5KSB8ICh0bXAgPDwgKDY0IC0gNDkpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDU1KSB8ICh0bXAgPDwgKDY0IC0gNTUpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDEwKSB8ICh0bXAgPDwgKDY0IC0gMTApKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDE5KSB8ICh0bXAgPDwgKDY0IC0gMTkpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAzOCkgfCAodG1wIDw8ICg2NCAtIDM4KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjE0IC09IGIxNSArIGs3ICsgdDI7CisJYjE1IC09IGs4ICsgMTA7CisKKwl0bXAgPSBiMTMgXiBiMTI7CisJYjEzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjEyIC09IGIxMyArIGs1OworCWIxMyAtPSBrNiArIHQxOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrMzsKKwliMTEgLT0gazQ7CisKKwl0bXAgPSBiOSBeIGI4OworCWI5ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI4IC09IGI5ICsgazE7CisJYjkgLT0gazI7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjYgLT0gYjcgKyBrMTY7CisJYjcgLT0gazA7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI0IC09IGI1ICsgazE0OworCWI1IC09IGsxNTsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDEzKSB8ICh0bXAgPDwgKDY0IC0gMTMpKTsKKwliMiAtPSBiMyArIGsxMjsKKwliMyAtPSBrMTM7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjAgLT0gYjEgKyBrMTA7CisJYjEgLT0gazExOworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDUzKSB8ICh0bXAgPDwgKDY0IC0gNTMpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjE0IC09IGIxNSArIGs2ICsgdDE7CisJYjE1IC09IGs3ICsgOTsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMTIgLT0gYjEzICsgazQ7CisJYjEzIC09IGs1ICsgdDA7CisKKwl0bXAgPSBiMTEgXiBiMTA7CisJYjExID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjEwIC09IGIxMSArIGsyOworCWIxMSAtPSBrMzsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliOCAtPSBiOSArIGswOworCWI5IC09IGsxOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI2IC09IGI3ICsgazE1OworCWI3IC09IGsxNjsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDM3KSB8ICh0bXAgPDwgKDY0IC0gMzcpKTsKKwliNCAtPSBiNSArIGsxMzsKKwliNSAtPSBrMTQ7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIyIC09IGIzICsgazExOworCWIzIC09IGsxMjsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMCAtPSBiMSArIGs5OworCWIxIC09IGsxMDsKKworCXRtcCA9IGI3IF4gYjEyOworCWI3ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEyIC09IGI3OworCisJdG1wID0gYjMgXiBiMTA7CisJYjMgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMTAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI4OworCWI1ID0gKHRtcCA+PiAyOCkgfCAodG1wIDw8ICg2NCAtIDI4KSk7CisJYjggLT0gYjU7CisKKwl0bXAgPSBiMSBeIGIxNDsKKwliMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxNCAtPSBiMTsKKworCXRtcCA9IGI5IF4gYjQ7CisJYjkgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliNCAtPSBiOTsKKworCXRtcCA9IGIxMyBeIGI2OworCWIxMyA9ICh0bXAgPj4gNDgpIHwgKHRtcCA8PCAoNjQgLSA0OCkpOworCWI2IC09IGIxMzsKKworCXRtcCA9IGIxMSBeIGIyOworCWIxMSA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIyIC09IGIxMTsKKworCXRtcCA9IGIxNSBeIGIwOworCWIxNSA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMTU7CisKKwl0bXAgPSBiOSBeIGIxMDsKKwliOSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiOTsKKworCXRtcCA9IGIxMSBeIGI4OworCWIxMSA9ICh0bXAgPj4gNTkpIHwgKHRtcCA8PCAoNjQgLSA1OSkpOworCWI4IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIxNDsKKwliMTMgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMTQgLT0gYjEzOworCisJdG1wID0gYjE1IF4gYjEyOworCWIxNSA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIxMiAtPSBiMTU7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiA1MSkgfCAodG1wIDw8ICg2NCAtIDUxKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gMTgpIHwgKHRtcCA8PCAoNjQgLSAxOCkpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjEwIC09IGI3OworCisJdG1wID0gYjE1IF4gYjQ7CisJYjE1ID0gKHRtcCA+PiA1NSkgfCAodG1wIDw8ICg2NCAtIDU1KSk7CisJYjQgLT0gYjE1OworCisJdG1wID0gYjExIF4gYjY7CisJYjExID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjExOworCisJdG1wID0gYjEzIF4gYjI7CisJYjEzID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjIgLT0gYjEzOworCisJdG1wID0gYjkgXiBiMDsKKwliOSA9ICh0bXAgPj4gMzgpIHwgKHRtcCA8PCAoNjQgLSAzOCkpOworCWIwIC09IGI5OworCisJdG1wID0gYjE1IF4gYjE0OworCWIxNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxNCAtPSBiMTUgKyBrNSArIHQwOworCWIxNSAtPSBrNiArIDg7CisKKwl0bXAgPSBiMTMgXiBiMTI7CisJYjEzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjEyIC09IGIxMyArIGszOworCWIxMyAtPSBrNCArIHQyOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrMTsKKwliMTEgLT0gazI7CisKKwl0bXAgPSBiOSBeIGI4OworCWI5ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI4IC09IGI5ICsgazE2OworCWI5IC09IGswOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI2IC09IGI3ICsgazE0OworCWI3IC09IGsxNTsKKworCXRtcCA9IGI1IF4gYjQ7CisJYjUgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjQgLT0gYjUgKyBrMTI7CisJYjUgLT0gazEzOworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWIyIC09IGIzICsgazEwOworCWIzIC09IGsxMTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliMCAtPSBiMSArIGs4OworCWIxIC09IGs5OworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDUzKSB8ICh0bXAgPDwgKDY0IC0gNTMpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjE0IC09IGIxNSArIGs0ICsgdDI7CisJYjE1IC09IGs1ICsgNzsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMTIgLT0gYjEzICsgazI7CisJYjEzIC09IGszICsgdDE7CisKKwl0bXAgPSBiMTEgXiBiMTA7CisJYjExID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjEwIC09IGIxMSArIGswOworCWIxMSAtPSBrMTsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliOCAtPSBiOSArIGsxNTsKKwliOSAtPSBrMTY7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiAzMSkgfCAodG1wIDw8ICg2NCAtIDMxKSk7CisJYjYgLT0gYjcgKyBrMTM7CisJYjcgLT0gazE0OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWI0IC09IGI1ICsgazExOworCWI1IC09IGsxMjsKKworCXRtcCA9IGIzIF4gYjI7CisJYjMgPSAodG1wID4+IDkpIHwgKHRtcCA8PCAoNjQgLSA5KSk7CisJYjIgLT0gYjMgKyBrOTsKKwliMyAtPSBrMTA7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrNzsKKwliMSAtPSBrODsKKworCXRtcCA9IGI3IF4gYjEyOworCWI3ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEyIC09IGI3OworCisJdG1wID0gYjMgXiBiMTA7CisJYjMgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMTAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI4OworCWI1ID0gKHRtcCA+PiAyOCkgfCAodG1wIDw8ICg2NCAtIDI4KSk7CisJYjggLT0gYjU7CisKKwl0bXAgPSBiMSBeIGIxNDsKKwliMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxNCAtPSBiMTsKKworCXRtcCA9IGI5IF4gYjQ7CisJYjkgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliNCAtPSBiOTsKKworCXRtcCA9IGIxMyBeIGI2OworCWIxMyA9ICh0bXAgPj4gNDgpIHwgKHRtcCA8PCAoNjQgLSA0OCkpOworCWI2IC09IGIxMzsKKworCXRtcCA9IGIxMSBeIGIyOworCWIxMSA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIyIC09IGIxMTsKKworCXRtcCA9IGIxNSBeIGIwOworCWIxNSA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMTU7CisKKwl0bXAgPSBiOSBeIGIxMDsKKwliOSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiOTsKKworCXRtcCA9IGIxMSBeIGI4OworCWIxMSA9ICh0bXAgPj4gNTkpIHwgKHRtcCA8PCAoNjQgLSA1OSkpOworCWI4IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIxNDsKKwliMTMgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMTQgLT0gYjEzOworCisJdG1wID0gYjE1IF4gYjEyOworCWIxNSA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIxMiAtPSBiMTU7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiA1MSkgfCAodG1wIDw8ICg2NCAtIDUxKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gMTgpIHwgKHRtcCA8PCAoNjQgLSAxOCkpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjEwIC09IGI3OworCisJdG1wID0gYjE1IF4gYjQ7CisJYjE1ID0gKHRtcCA+PiA1NSkgfCAodG1wIDw8ICg2NCAtIDU1KSk7CisJYjQgLT0gYjE1OworCisJdG1wID0gYjExIF4gYjY7CisJYjExID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjExOworCisJdG1wID0gYjEzIF4gYjI7CisJYjEzID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjIgLT0gYjEzOworCisJdG1wID0gYjkgXiBiMDsKKwliOSA9ICh0bXAgPj4gMzgpIHwgKHRtcCA8PCAoNjQgLSAzOCkpOworCWIwIC09IGI5OworCisJdG1wID0gYjE1IF4gYjE0OworCWIxNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxNCAtPSBiMTUgKyBrMyArIHQxOworCWIxNSAtPSBrNCArIDY7CisKKwl0bXAgPSBiMTMgXiBiMTI7CisJYjEzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjEyIC09IGIxMyArIGsxOworCWIxMyAtPSBrMiArIHQwOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrMTY7CisJYjExIC09IGswOworCisJdG1wID0gYjkgXiBiODsKKwliOSA9ICh0bXAgPj4gOCkgfCAodG1wIDw8ICg2NCAtIDgpKTsKKwliOCAtPSBiOSArIGsxNDsKKwliOSAtPSBrMTU7CisKKwl0bXAgPSBiNyBeIGI2OworCWI3ID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjYgLT0gYjcgKyBrMTI7CisJYjcgLT0gazEzOworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gOCkgfCAodG1wIDw8ICg2NCAtIDgpKTsKKwliNCAtPSBiNSArIGsxMDsKKwliNSAtPSBrMTE7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjMgKyBrODsKKwliMyAtPSBrOTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliMCAtPSBiMSArIGs2OworCWIxIC09IGs3OworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDUzKSB8ICh0bXAgPDwgKDY0IC0gNTMpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjE0IC09IGIxNSArIGsyICsgdDA7CisJYjE1IC09IGszICsgNTsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMTIgLT0gYjEzICsgazA7CisJYjEzIC09IGsxICsgdDI7CisKKwl0bXAgPSBiMTEgXiBiMTA7CisJYjExID0gKHRtcCA+PiA0NykgfCAodG1wIDw8ICg2NCAtIDQ3KSk7CisJYjEwIC09IGIxMSArIGsxNTsKKwliMTEgLT0gazE2OworCisJdG1wID0gYjkgXiBiODsKKwliOSA9ICh0bXAgPj4gMTIpIHwgKHRtcCA8PCAoNjQgLSAxMikpOworCWI4IC09IGI5ICsgazEzOworCWI5IC09IGsxNDsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliNiAtPSBiNyArIGsxMTsKKwliNyAtPSBrMTI7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiAzNykgfCAodG1wIDw8ICg2NCAtIDM3KSk7CisJYjQgLT0gYjUgKyBrOTsKKwliNSAtPSBrMTA7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIyIC09IGIzICsgazc7CisJYjMgLT0gazg7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrNTsKKwliMSAtPSBrNjsKKworCXRtcCA9IGI3IF4gYjEyOworCWI3ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEyIC09IGI3OworCisJdG1wID0gYjMgXiBiMTA7CisJYjMgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMTAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI4OworCWI1ID0gKHRtcCA+PiAyOCkgfCAodG1wIDw8ICg2NCAtIDI4KSk7CisJYjggLT0gYjU7CisKKwl0bXAgPSBiMSBeIGIxNDsKKwliMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxNCAtPSBiMTsKKworCXRtcCA9IGI5IF4gYjQ7CisJYjkgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliNCAtPSBiOTsKKworCXRtcCA9IGIxMyBeIGI2OworCWIxMyA9ICh0bXAgPj4gNDgpIHwgKHRtcCA8PCAoNjQgLSA0OCkpOworCWI2IC09IGIxMzsKKworCXRtcCA9IGIxMSBeIGIyOworCWIxMSA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIyIC09IGIxMTsKKworCXRtcCA9IGIxNSBeIGIwOworCWIxNSA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMTU7CisKKwl0bXAgPSBiOSBeIGIxMDsKKwliOSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiOTsKKworCXRtcCA9IGIxMSBeIGI4OworCWIxMSA9ICh0bXAgPj4gNTkpIHwgKHRtcCA8PCAoNjQgLSA1OSkpOworCWI4IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIxNDsKKwliMTMgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMTQgLT0gYjEzOworCisJdG1wID0gYjE1IF4gYjEyOworCWIxNSA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIxMiAtPSBiMTU7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiA1MSkgfCAodG1wIDw8ICg2NCAtIDUxKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gMTgpIHwgKHRtcCA8PCAoNjQgLSAxOCkpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjEwIC09IGI3OworCisJdG1wID0gYjE1IF4gYjQ7CisJYjE1ID0gKHRtcCA+PiA1NSkgfCAodG1wIDw8ICg2NCAtIDU1KSk7CisJYjQgLT0gYjE1OworCisJdG1wID0gYjExIF4gYjY7CisJYjExID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjExOworCisJdG1wID0gYjEzIF4gYjI7CisJYjEzID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjIgLT0gYjEzOworCisJdG1wID0gYjkgXiBiMDsKKwliOSA9ICh0bXAgPj4gMzgpIHwgKHRtcCA8PCAoNjQgLSAzOCkpOworCWIwIC09IGI5OworCisJdG1wID0gYjE1IF4gYjE0OworCWIxNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxNCAtPSBiMTUgKyBrMSArIHQyOworCWIxNSAtPSBrMiArIDQ7CisKKwl0bXAgPSBiMTMgXiBiMTI7CisJYjEzID0gKHRtcCA+PiAyMikgfCAodG1wIDw8ICg2NCAtIDIyKSk7CisJYjEyIC09IGIxMyArIGsxNjsKKwliMTMgLT0gazAgKyB0MTsKKworCXRtcCA9IGIxMSBeIGIxMDsKKwliMTEgPSAodG1wID4+IDE3KSB8ICh0bXAgPDwgKDY0IC0gMTcpKTsKKwliMTAgLT0gYjExICsgazE0OworCWIxMSAtPSBrMTU7CisKKwl0bXAgPSBiOSBeIGI4OworCWI5ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI4IC09IGI5ICsgazEyOworCWI5IC09IGsxMzsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNiAtPSBiNyArIGsxMDsKKwliNyAtPSBrMTE7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI0IC09IGI1ICsgazg7CisJYjUgLT0gazk7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjMgKyBrNjsKKwliMyAtPSBrNzsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliMCAtPSBiMSArIGs0OworCWIxIC09IGs1OworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDUzKSB8ICh0bXAgPDwgKDY0IC0gNTMpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjE0IC09IGIxNSArIGswICsgdDE7CisJYjE1IC09IGsxICsgMzsKKworCXRtcCA9IGIxMyBeIGIxMjsKKwliMTMgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMTIgLT0gYjEzICsgazE1OworCWIxMyAtPSBrMTYgKyB0MDsKKworCXRtcCA9IGIxMSBeIGIxMDsKKwliMTEgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliMTAgLT0gYjExICsgazEzOworCWIxMSAtPSBrMTQ7CisKKwl0bXAgPSBiOSBeIGI4OworCWI5ID0gKHRtcCA+PiAxMikgfCAodG1wIDw8ICg2NCAtIDEyKSk7CisJYjggLT0gYjkgKyBrMTE7CisJYjkgLT0gazEyOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gMzEpIHwgKHRtcCA8PCAoNjQgLSAzMSkpOworCWI2IC09IGI3ICsgazk7CisJYjcgLT0gazEwOworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWI0IC09IGI1ICsgazc7CisJYjUgLT0gazg7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIyIC09IGIzICsgazU7CisJYjMgLT0gazY7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrMzsKKwliMSAtPSBrNDsKKworCXRtcCA9IGI3IF4gYjEyOworCWI3ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEyIC09IGI3OworCisJdG1wID0gYjMgXiBiMTA7CisJYjMgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMTAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI4OworCWI1ID0gKHRtcCA+PiAyOCkgfCAodG1wIDw8ICg2NCAtIDI4KSk7CisJYjggLT0gYjU7CisKKwl0bXAgPSBiMSBeIGIxNDsKKwliMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxNCAtPSBiMTsKKworCXRtcCA9IGI5IF4gYjQ7CisJYjkgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliNCAtPSBiOTsKKworCXRtcCA9IGIxMyBeIGI2OworCWIxMyA9ICh0bXAgPj4gNDgpIHwgKHRtcCA8PCAoNjQgLSA0OCkpOworCWI2IC09IGIxMzsKKworCXRtcCA9IGIxMSBeIGIyOworCWIxMSA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIyIC09IGIxMTsKKworCXRtcCA9IGIxNSBeIGIwOworCWIxNSA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMTU7CisKKwl0bXAgPSBiOSBeIGIxMDsKKwliOSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiOTsKKworCXRtcCA9IGIxMSBeIGI4OworCWIxMSA9ICh0bXAgPj4gNTkpIHwgKHRtcCA8PCAoNjQgLSA1OSkpOworCWI4IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIxNDsKKwliMTMgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMTQgLT0gYjEzOworCisJdG1wID0gYjE1IF4gYjEyOworCWIxNSA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIxMiAtPSBiMTU7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiA1MSkgfCAodG1wIDw8ICg2NCAtIDUxKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gMTgpIHwgKHRtcCA8PCAoNjQgLSAxOCkpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjEwIC09IGI3OworCisJdG1wID0gYjE1IF4gYjQ7CisJYjE1ID0gKHRtcCA+PiA1NSkgfCAodG1wIDw8ICg2NCAtIDU1KSk7CisJYjQgLT0gYjE1OworCisJdG1wID0gYjExIF4gYjY7CisJYjExID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjExOworCisJdG1wID0gYjEzIF4gYjI7CisJYjEzID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjIgLT0gYjEzOworCisJdG1wID0gYjkgXiBiMDsKKwliOSA9ICh0bXAgPj4gMzgpIHwgKHRtcCA8PCAoNjQgLSAzOCkpOworCWIwIC09IGI5OworCisJdG1wID0gYjE1IF4gYjE0OworCWIxNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxNCAtPSBiMTUgKyBrMTYgKyB0MDsKKwliMTUgLT0gazAgKyAyOworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gMjIpIHwgKHRtcCA8PCAoNjQgLSAyMikpOworCWIxMiAtPSBiMTMgKyBrMTQ7CisJYjEzIC09IGsxNSArIHQyOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrMTI7CisJYjExIC09IGsxMzsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjggLT0gYjkgKyBrMTA7CisJYjkgLT0gazExOworCisJdG1wID0gYjcgXiBiNjsKKwliNyA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWI2IC09IGI3ICsgazg7CisJYjcgLT0gazk7CisKKwl0bXAgPSBiNSBeIGI0OworCWI1ID0gKHRtcCA+PiA4KSB8ICh0bXAgPDwgKDY0IC0gOCkpOworCWI0IC09IGI1ICsgazY7CisJYjUgLT0gazc7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjIgLT0gYjMgKyBrNDsKKwliMyAtPSBrNTsKKworCXRtcCA9IGIxIF4gYjA7CisJYjEgPSAodG1wID4+IDI0KSB8ICh0bXAgPDwgKDY0IC0gMjQpKTsKKwliMCAtPSBiMSArIGsyOworCWIxIC09IGszOworCisJdG1wID0gYjcgXiBiMTI7CisJYjcgPSAodG1wID4+IDIwKSB8ICh0bXAgPDwgKDY0IC0gMjApKTsKKwliMTIgLT0gYjc7CisKKwl0bXAgPSBiMyBeIGIxMDsKKwliMyA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxMCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjg7CisJYjUgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliOCAtPSBiNTsKKworCXRtcCA9IGIxIF4gYjE0OworCWIxID0gKHRtcCA+PiAyMykgfCAodG1wIDw8ICg2NCAtIDIzKSk7CisJYjE0IC09IGIxOworCisJdG1wID0gYjkgXiBiNDsKKwliOSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI0IC09IGI5OworCisJdG1wID0gYjEzIF4gYjY7CisJYjEzID0gKHRtcCA+PiAzNSkgfCAodG1wIDw8ICg2NCAtIDM1KSk7CisJYjYgLT0gYjEzOworCisJdG1wID0gYjExIF4gYjI7CisJYjExID0gKHRtcCA+PiA0OCkgfCAodG1wIDw8ICg2NCAtIDQ4KSk7CisJYjIgLT0gYjExOworCisJdG1wID0gYjE1IF4gYjA7CisJYjE1ID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIwIC09IGIxNTsKKworCXRtcCA9IGI5IF4gYjEwOworCWI5ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEwIC09IGI5OworCisJdG1wID0gYjExIF4gYjg7CisJYjExID0gKHRtcCA+PiA0NCkgfCAodG1wIDw8ICg2NCAtIDQ0KSk7CisJYjggLT0gYjExOworCisJdG1wID0gYjEzIF4gYjE0OworCWIxMyA9ICh0bXAgPj4gNDIpIHwgKHRtcCA8PCAoNjQgLSA0MikpOworCWIxNCAtPSBiMTM7CisKKwl0bXAgPSBiMTUgXiBiMTI7CisJYjE1ID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjEyIC09IGIxNTsKKworCXRtcCA9IGIxIF4gYjY7CisJYjEgPSAodG1wID4+IDQ2KSB8ICh0bXAgPDwgKDY0IC0gNDYpKTsKKwliNiAtPSBiMTsKKworCXRtcCA9IGIzIF4gYjQ7CisJYjMgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNCAtPSBiMzsKKworCXRtcCA9IGI1IF4gYjI7CisJYjUgPSAodG1wID4+IDQ0KSB8ICh0bXAgPDwgKDY0IC0gNDQpKTsKKwliMiAtPSBiNTsKKworCXRtcCA9IGI3IF4gYjA7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliMCAtPSBiNzsKKworCXRtcCA9IGIxIF4gYjg7CisJYjEgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliOCAtPSBiMTsKKworCXRtcCA9IGI1IF4gYjE0OworCWI1ID0gKHRtcCA+PiA0MikgfCAodG1wIDw8ICg2NCAtIDQyKSk7CisJYjE0IC09IGI1OworCisJdG1wID0gYjMgXiBiMTI7CisJYjMgPSAodG1wID4+IDUzKSB8ICh0bXAgPDwgKDY0IC0gNTMpKTsKKwliMTIgLT0gYjM7CisKKwl0bXAgPSBiNyBeIGIxMDsKKwliNyA9ICh0bXAgPj4gNCkgfCAodG1wIDw8ICg2NCAtIDQpKTsKKwliMTAgLT0gYjc7CisKKwl0bXAgPSBiMTUgXiBiNDsKKwliMTUgPSAodG1wID4+IDUxKSB8ICh0bXAgPDwgKDY0IC0gNTEpKTsKKwliNCAtPSBiMTU7CisKKwl0bXAgPSBiMTEgXiBiNjsKKwliMTEgPSAodG1wID4+IDU2KSB8ICh0bXAgPDwgKDY0IC0gNTYpKTsKKwliNiAtPSBiMTE7CisKKwl0bXAgPSBiMTMgXiBiMjsKKwliMTMgPSAodG1wID4+IDM0KSB8ICh0bXAgPDwgKDY0IC0gMzQpKTsKKwliMiAtPSBiMTM7CisKKwl0bXAgPSBiOSBeIGIwOworCWI5ID0gKHRtcCA+PiAxNikgfCAodG1wIDw8ICg2NCAtIDE2KSk7CisJYjAgLT0gYjk7CisKKwl0bXAgPSBiMTUgXiBiMTQ7CisJYjE1ID0gKHRtcCA+PiAzMCkgfCAodG1wIDw8ICg2NCAtIDMwKSk7CisJYjE0IC09IGIxNSArIGsxNSArIHQyOworCWIxNSAtPSBrMTYgKyAxOworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gNDQpIHwgKHRtcCA8PCAoNjQgLSA0NCkpOworCWIxMiAtPSBiMTMgKyBrMTM7CisJYjEzIC09IGsxNCArIHQxOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxMCAtPSBiMTEgKyBrMTE7CisJYjExIC09IGsxMjsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDEyKSB8ICh0bXAgPDwgKDY0IC0gMTIpKTsKKwliOCAtPSBiOSArIGs5OworCWI5IC09IGsxMDsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDMxKSB8ICh0bXAgPDwgKDY0IC0gMzEpKTsKKwliNiAtPSBiNyArIGs3OworCWI3IC09IGs4OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWI0IC09IGI1ICsgazU7CisJYjUgLT0gazY7CisKKwl0bXAgPSBiMyBeIGIyOworCWIzID0gKHRtcCA+PiA5KSB8ICh0bXAgPDwgKDY0IC0gOSkpOworCWIyIC09IGIzICsgazM7CisJYjMgLT0gazQ7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiA0MSkgfCAodG1wIDw8ICg2NCAtIDQxKSk7CisJYjAgLT0gYjEgKyBrMTsKKwliMSAtPSBrMjsKKworCXRtcCA9IGI3IF4gYjEyOworCWI3ID0gKHRtcCA+PiAyNSkgfCAodG1wIDw8ICg2NCAtIDI1KSk7CisJYjEyIC09IGI3OworCisJdG1wID0gYjMgXiBiMTA7CisJYjMgPSAodG1wID4+IDE2KSB8ICh0bXAgPDwgKDY0IC0gMTYpKTsKKwliMTAgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGI4OworCWI1ID0gKHRtcCA+PiAyOCkgfCAodG1wIDw8ICg2NCAtIDI4KSk7CisJYjggLT0gYjU7CisKKwl0bXAgPSBiMSBeIGIxNDsKKwliMSA9ICh0bXAgPj4gNDcpIHwgKHRtcCA8PCAoNjQgLSA0NykpOworCWIxNCAtPSBiMTsKKworCXRtcCA9IGI5IF4gYjQ7CisJYjkgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliNCAtPSBiOTsKKworCXRtcCA9IGIxMyBeIGI2OworCWIxMyA9ICh0bXAgPj4gNDgpIHwgKHRtcCA8PCAoNjQgLSA0OCkpOworCWI2IC09IGIxMzsKKworCXRtcCA9IGIxMSBeIGIyOworCWIxMSA9ICh0bXAgPj4gMjApIHwgKHRtcCA8PCAoNjQgLSAyMCkpOworCWIyIC09IGIxMTsKKworCXRtcCA9IGIxNSBeIGIwOworCWIxNSA9ICh0bXAgPj4gNSkgfCAodG1wIDw8ICg2NCAtIDUpKTsKKwliMCAtPSBiMTU7CisKKwl0bXAgPSBiOSBeIGIxMDsKKwliOSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiOTsKKworCXRtcCA9IGIxMSBeIGI4OworCWIxMSA9ICh0bXAgPj4gNTkpIHwgKHRtcCA8PCAoNjQgLSA1OSkpOworCWI4IC09IGIxMTsKKworCXRtcCA9IGIxMyBeIGIxNDsKKwliMTMgPSAodG1wID4+IDQxKSB8ICh0bXAgPDwgKDY0IC0gNDEpKTsKKwliMTQgLT0gYjEzOworCisJdG1wID0gYjE1IF4gYjEyOworCWIxNSA9ICh0bXAgPj4gMzQpIHwgKHRtcCA8PCAoNjQgLSAzNCkpOworCWIxMiAtPSBiMTU7CisKKwl0bXAgPSBiMSBeIGI2OworCWIxID0gKHRtcCA+PiAxMykgfCAodG1wIDw8ICg2NCAtIDEzKSk7CisJYjYgLT0gYjE7CisKKwl0bXAgPSBiMyBeIGI0OworCWIzID0gKHRtcCA+PiA1MSkgfCAodG1wIDw8ICg2NCAtIDUxKSk7CisJYjQgLT0gYjM7CisKKwl0bXAgPSBiNSBeIGIyOworCWI1ID0gKHRtcCA+PiA0KSB8ICh0bXAgPDwgKDY0IC0gNCkpOworCWIyIC09IGI1OworCisJdG1wID0gYjcgXiBiMDsKKwliNyA9ICh0bXAgPj4gMzMpIHwgKHRtcCA8PCAoNjQgLSAzMykpOworCWIwIC09IGI3OworCisJdG1wID0gYjEgXiBiODsKKwliMSA9ICh0bXAgPj4gNTIpIHwgKHRtcCA8PCAoNjQgLSA1MikpOworCWI4IC09IGIxOworCisJdG1wID0gYjUgXiBiMTQ7CisJYjUgPSAodG1wID4+IDIzKSB8ICh0bXAgPDwgKDY0IC0gMjMpKTsKKwliMTQgLT0gYjU7CisKKwl0bXAgPSBiMyBeIGIxMjsKKwliMyA9ICh0bXAgPj4gMTgpIHwgKHRtcCA8PCAoNjQgLSAxOCkpOworCWIxMiAtPSBiMzsKKworCXRtcCA9IGI3IF4gYjEwOworCWI3ID0gKHRtcCA+PiA0OSkgfCAodG1wIDw8ICg2NCAtIDQ5KSk7CisJYjEwIC09IGI3OworCisJdG1wID0gYjE1IF4gYjQ7CisJYjE1ID0gKHRtcCA+PiA1NSkgfCAodG1wIDw8ICg2NCAtIDU1KSk7CisJYjQgLT0gYjE1OworCisJdG1wID0gYjExIF4gYjY7CisJYjExID0gKHRtcCA+PiAxMCkgfCAodG1wIDw8ICg2NCAtIDEwKSk7CisJYjYgLT0gYjExOworCisJdG1wID0gYjEzIF4gYjI7CisJYjEzID0gKHRtcCA+PiAxOSkgfCAodG1wIDw8ICg2NCAtIDE5KSk7CisJYjIgLT0gYjEzOworCisJdG1wID0gYjkgXiBiMDsKKwliOSA9ICh0bXAgPj4gMzgpIHwgKHRtcCA8PCAoNjQgLSAzOCkpOworCWIwIC09IGI5OworCisJdG1wID0gYjE1IF4gYjE0OworCWIxNSA9ICh0bXAgPj4gMzcpIHwgKHRtcCA8PCAoNjQgLSAzNykpOworCWIxNCAtPSBiMTUgKyBrMTQgKyB0MTsKKwliMTUgLT0gazE1OworCisJdG1wID0gYjEzIF4gYjEyOworCWIxMyA9ICh0bXAgPj4gMjIpIHwgKHRtcCA8PCAoNjQgLSAyMikpOworCWIxMiAtPSBiMTMgKyBrMTI7CisJYjEzIC09IGsxMyArIHQwOworCisJdG1wID0gYjExIF4gYjEwOworCWIxMSA9ICh0bXAgPj4gMTcpIHwgKHRtcCA8PCAoNjQgLSAxNykpOworCWIxMCAtPSBiMTEgKyBrMTA7CisJYjExIC09IGsxMTsKKworCXRtcCA9IGI5IF4gYjg7CisJYjkgPSAodG1wID4+IDgpIHwgKHRtcCA8PCAoNjQgLSA4KSk7CisJYjggLT0gYjkgKyBrODsKKwliOSAtPSBrOTsKKworCXRtcCA9IGI3IF4gYjY7CisJYjcgPSAodG1wID4+IDQ3KSB8ICh0bXAgPDwgKDY0IC0gNDcpKTsKKwliNiAtPSBiNyArIGs2OworCWI3IC09IGs3OworCisJdG1wID0gYjUgXiBiNDsKKwliNSA9ICh0bXAgPj4gOCkgfCAodG1wIDw8ICg2NCAtIDgpKTsKKwliNCAtPSBiNSArIGs0OworCWI1IC09IGs1OworCisJdG1wID0gYjMgXiBiMjsKKwliMyA9ICh0bXAgPj4gMTMpIHwgKHRtcCA8PCAoNjQgLSAxMykpOworCWIyIC09IGIzICsgazI7CisJYjMgLT0gazM7CisKKwl0bXAgPSBiMSBeIGIwOworCWIxID0gKHRtcCA+PiAyNCkgfCAodG1wIDw8ICg2NCAtIDI0KSk7CisJYjAgLT0gYjEgKyBrMDsKKwliMSAtPSBrMTsKKworCW91dHB1dFsxNV0gPSBiMTU7CisJb3V0cHV0WzE0XSA9IGIxNDsKKwlvdXRwdXRbMTNdID0gYjEzOworCW91dHB1dFsxMl0gPSBiMTI7CisJb3V0cHV0WzExXSA9IGIxMTsKKwlvdXRwdXRbMTBdID0gYjEwOworCW91dHB1dFs5XSA9IGI5OworCW91dHB1dFs4XSA9IGI4OworCW91dHB1dFs3XSA9IGI3OworCW91dHB1dFs2XSA9IGI2OworCW91dHB1dFs1XSA9IGI1OworCW91dHB1dFs0XSA9IGI0OworCW91dHB1dFszXSA9IGIzOworCW91dHB1dFsyXSA9IGIyOworCW91dHB1dFsxXSA9IGIxOworCW91dHB1dFswXSA9IGIwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1RPRE8KaW5kZXggNjJmZjEwMC4uMjBjYzlhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9UT0RPCkBAIC0xOCw3ICsxOCw2IEBACiAJICB1c2UgZXRodG9vbCBpbnN0ZWFkCiAJLSByZW9yZGVyIGNvZGUgdG8gZWxtaW5hdGUgdXNlIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zCiAJLSBkb24ndCBrZWVwIHByaXZhdGUgbGlua2VkIGxpc3Qgb2YgZHJpdmVycy4KLQktIHJlbW92ZSBhbGwgdGhlIGdyYXRpdXRvdXMgZGVidWcgaW5mcmFzdHJ1Y3R1cmUKIAktIHVzZSBQQ0lfREVWSUNFKCkKIAktIGRvIGV0aHRvb2wgY29ycmVjdGx5IHVzaW5nIGV0aHRvb2xfb3BzCiAJLSBOQVBJPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCmluZGV4IDcwMjkwMmMuLjNhNWFhODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKQEAgLTMxMCw4ICszMTAsNiBAQAogCXUzMiAgICAgICAgICAgbG9hZHRpbWVyc2V0OwogCXVpbnQgICAgICAgICAgICAgIGNvbmZpZ19zZXQ7CiAJc3RydWN0IHNsaWNfY29uZmlnICBjb25maWc7Ci0Jc3RydWN0IGRlbnRyeSAgICAgICpkZWJ1Z2ZzX2RpcjsKLQlzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfY2FyZGluZm87CiAJc3RydWN0IGFkYXB0ZXIgICptYXN0ZXI7CiAJc3RydWN0IGFkYXB0ZXIgICphZGFwdGVyW1NMSUNfTUFYX1BPUlRTXTsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKm5leHQ7CkBAIC0zNjQsMTIgKzM2Miw2IEBACiAJdm9sYXRpbGUgc3RydWN0IHNsaWNfc3RhdHMgICAgIGluaWNzdGF0czsKIH07CiAKLXN0cnVjdCBzbGljX3JlZ19wYXJhbXMgewotCXUzMiAgICAgICBsaW5rc3BlZWQ7Ci0JdTMyICAgICAgIGxpbmtkdXBsZXg7Ci0JdTMyICAgICAgIGZhaWxfb25fYmFkX2VlcHJvbTsKLX07Ci0KIHN0cnVjdCBzbGljX3VwciB7CiAJdWludCAgICAgICAgICAgICAgIGFkYXB0ZXI7CiAJdTMyICAgICAgICAgICAgdXByX3JlcXVlc3Q7CkBAIC00MDksNyArNDAxLDYgQEAKIAl1aW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKIAl1aW50ICAgICAgICAgICAgICAgIGNoaXBpZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgKm5ldGRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAgKm5leHRfbmV0ZGV2aWNlOwogCXN0cnVjdCBzbGljX3NwaW5sb2NrICAgICBhZGFwdGVyX2xvY2s7CiAJc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIHJlc2V0X2xvY2s7CiAJc3RydWN0IHBjaV9kZXYgICAgICpwY2lkZXY7CkBAIC00MjAsOCArNDExLDYgQEAKIAl1c2hvcnQgICAgICAgICAgICAgIGRldmlkOwogCXVzaG9ydCAgICAgICAgICAgICAgc3Vic3lzaWQ7CiAJdTMyICAgICAgICAgICAgIGlycTsKLQl2b2lkIF9faW9tZW0gKm1lbW9yeWJhc2U7Ci0JdTMyICAgICAgICAgICAgIG1lbW9yeWxlbmd0aDsKIAl1MzIgICAgICAgICAgICAgZHJhbWJhc2U7CiAJdTMyICAgICAgICAgICAgIGRyYW1sZW5ndGg7CiAJdWludCAgICAgICAgICAgICAgICBxdWV1ZXNfaW5pdGlhbGl6ZWQ7CkBAIC00NTIsNyArNDQxLDYgQEAKIAl1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OwogCXN0cnVjdCB0aW1lcl9saXN0ICAgbG9hZHRpbWVyOwogCXUzMiAgICAgICAgICAgICBsb2FkdGltZXJzZXQ7Ci0Jc3RydWN0IGRlbnRyeSAgICAgICpkZWJ1Z2ZzX2VudHJ5OwogCXN0cnVjdCBzbGljX3NwaW5sb2NrICAgICB1cHJfbG9jazsKIAlzdHJ1Y3Qgc2xpY19zcGlubG9jayAgICAgYml0NjRyZWdsb2NrOwogCXN0cnVjdCBzbGljX3JzcHF1ZXVlICAgICByc3BxdWV1ZTsKQEAgLTQ5OCw3ICs0ODYsNiBAQAogCXUzMiAgICAgICAgICAgICBpbnRhZ2dfcGVyaW9kOwogCXN0cnVjdCBpbmljcG1fc3RhdGUgICAgKmluaWNwbV9pbmZvOwogCXZvaWQgKnBpbmljcG1faW5mbzsKLQlzdHJ1Y3Qgc2xpY19yZWdfcGFyYW1zICAgcmVnX3BhcmFtczsKIAlzdHJ1Y3Qgc2xpY19pZmV2ZW50cyAgaWZfZXZlbnRzOwogCXN0cnVjdCBzbGljX3N0YXRzICAgICAgICBpbmljc3RhdHNfcHJldjsKIAlzdHJ1Y3Qgc2xpY25ldF9zdGF0cyAgICAgc2xpY19zdGF0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwppbmRleCBlMjdiODhmLi40ODg0MWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCkBAIC04MSw3ICs4MSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNCwxOSArMTAzLDExIEBACiAJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKSI7CiAKIHN0YXRpYyBjaGFyICpzbGljX3Byb2NfdmVyc2lvbiA9ICIyLjAuMzUxICAyMDA2LzA3LzE0IDEyOjI2OjAwIjsKLXN0YXRpYyBjaGFyICpzbGljX3Byb2R1Y3RfbmFtZSA9ICJTTElDIFRlY2hub2xvZ3kodG0pIFNlcnZlciAiCi0JCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKSI7Ci1zdGF0aWMgY2hhciAqc2xpY192ZW5kb3IgPSAiQWxhY3JpdGVjaCwgSW5jLiI7Ci0KLXN0YXRpYyBpbnQgc2xpY19kZWJ1ZyA9IDE7Ci1zdGF0aWMgaW50IGRlYnVnID0gLTE7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmhlYWRfbmV0ZGV2aWNlOwogCiBzdGF0aWMgc3RydWN0IGJhc2VfZHJpdmVyIHNsaWNfZ2xvYmFsID0geyB7fSwgMCwgMCwgMCwgMSwgTlVMTCwgTlVMTCB9Owogc3RhdGljIGludCBpbnRhZ2dfZGVsYXkgPSAxMDA7CiBzdGF0aWMgdTMyIGR5bmFtaWNfaW50YWdnOwogc3RhdGljIHVuc2lnbmVkIGludCByY3ZfY291bnQ7Ci1zdGF0aWMgc3RydWN0IGRlbnRyeSAqc2xpY19kZWJ1Z2ZzOwogCiAjZGVmaW5lIERSVl9OQU1FICAgICAgICAgICJzbGljb3NzIgogI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgICAiMi4wLjEiCkBAIC00MDQsNyArMzk1LDcgQEAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAotCQkJIlNMSUNPU1M6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBmaWxlKTsKKwkJCSJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00ODIsNyArNDczLDcgQEAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAotCQkJIlNMSUNPU1M6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBmaWxlKTsKKwkJCSJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CiAJCXJldHVybiByZXQ7CiAJfQogCW51bXNlY3RzID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CkBAIC0xMTQwLDExNiArMTEzMSwzMyBAQAogCQkJCWFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAotCQkJCQkJCXUzMiBjb25maWdfaCkKK3N0YXRpYyBpbnQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLCB1MzIgY29uZmlnX2gpCiB7Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKLQkJCQkgIFNMSUNfVVBSX1JDT05GSUcsCi0JCQkJICAodTMyKSBjb25maWcsICh1MzIpIGNvbmZpZ19oLCAwLCAwKTsKKwlyZXR1cm4gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9SQ09ORklHLCBjb25maWcsIGNvbmZpZ19oLAorCQkJCTAsIDApOwogfQogCiAvKgotICogIHRoaXMgaXMgaGVyZSB0byBjaGVja3N1bSB0aGUgZWVwcm9tLCB0aGVyZSBpcyBzb21lIHVjb2RlIGJ1ZwotICogIHdoaWNoIHByZXZlbnMgdXMgZnJvbSB1c2luZyB0aGUgdWNvZGUgcmVzdWx0LgotICogIHJlbW92ZSB0aGlzIG9uY2UgdWNvZGUgaXMgZml4ZWQuCisgKiBDb21wdXRlIGEgY2hlY2tzdW0gb2YgdGhlIEVFUFJPTSBhY2NvcmRpbmcgdG8gUkZDIDEwNzEuCiAgKi8KLXN0YXRpYyB1c2hvcnQgc2xpY19lZXByb21fY2tzdW0oY2hhciAqbSwgaW50IGxlbikKK3N0YXRpYyB1MTYgc2xpY19lZXByb21fY2tzdW0odm9pZCAqZWVwcm9tLCB1bnNpZ25lZCBsZW4pCiB7Ci0jZGVmaW5lIEFERENBUlJZKHgpICAoeCA+IDY1NTM1ID8geCAtPSA2NTUzNSA6IHgpCi0jZGVmaW5lIFJFRFVDRSB7bF91dGlsLmwgPSBzdW07IHN1bSA9IGxfdXRpbC5zWzBdICsgbF91dGlsLnNbMV07IEFERENBUlJZKHN1bSk7XAotCQl9CisJdTE2ICp3cCA9IGVlcHJvbTsKKwl1MzIgY2hlY2tzdW0gPSAwOwogCi0JdTE2ICp3OwotCXUzMiBzdW0gPSAwOwotCXUzMiBieXRlX3N3YXBwZWQgPSAwOwotCXUzMiB3X2ludDsKLQotCXVuaW9uIHsKLQkJY2hhciBjWzJdOwotCQl1c2hvcnQgczsKLQl9IHNfdXRpbDsKLQotCXVuaW9uIHsKLQkJdXNob3J0IHNbMl07Ci0JCWludCBsOwotCX0gbF91dGlsOwotCi0JbF91dGlsLmwgPSAwOwotCXNfdXRpbC5zID0gMDsKLQotCXcgPSAodTE2ICopbTsKLSNpZiBCSVRTX1BFUl9MT05HID09IDY0Ci0Jd19pbnQgPSAodTMyKSAoKHVsb25nKSB3ICYgMHgwMDAwMDAwMEZGRkZGRkZGKTsKLSNlbHNlCi0Jd19pbnQgPSAodTMyKSAodyk7Ci0jZW5kaWYKLQlpZiAoKDEgJiB3X2ludCkgJiYgKGxlbiA+IDApKSB7Ci0JCVJFRFVDRTsKLQkJc3VtIDw8PSA4OwotCQlzX3V0aWwuY1swXSA9ICoodW5zaWduZWQgY2hhciAqKXc7Ci0JCXcgPSAodTE2ICopKChjaGFyICopdyArIDEpOwotCQlsZW4tLTsKLQkJYnl0ZV9zd2FwcGVkID0gMTsKKwl3aGlsZSAobGVuID4gMSkgeworCQljaGVja3N1bSArPSAqKHdwKyspOworCQlsZW4gLT0gMjsKIAl9CiAKLQkvKiBVbnJvbGwgdGhlIGxvb3AgdG8gbWFrZSBvdmVyaGVhZCBmcm9tIGJyYW5jaGVzICZjIHNtYWxsLiAqLwotCXdoaWxlICgobGVuIC09IDMyKSA+PSAwKSB7Ci0JCXN1bSArPSB3WzBdOwotCQlzdW0gKz0gd1sxXTsKLQkJc3VtICs9IHdbMl07Ci0JCXN1bSArPSB3WzNdOwotCQlzdW0gKz0gd1s0XTsKLQkJc3VtICs9IHdbNV07Ci0JCXN1bSArPSB3WzZdOwotCQlzdW0gKz0gd1s3XTsKLQkJc3VtICs9IHdbOF07Ci0JCXN1bSArPSB3WzldOwotCQlzdW0gKz0gd1sxMF07Ci0JCXN1bSArPSB3WzExXTsKLQkJc3VtICs9IHdbMTJdOwotCQlzdW0gKz0gd1sxM107Ci0JCXN1bSArPSB3WzE0XTsKLQkJc3VtICs9IHdbMTVdOwotCQl3ID0gKHUxNiAqKSgodWxvbmcpIHcgKyAxNik7CS8qIHZlcmlmeSAqLwotCX0KLQlsZW4gKz0gMzI7Ci0Jd2hpbGUgKChsZW4gLT0gOCkgPj0gMCkgewotCQlzdW0gKz0gd1swXTsKLQkJc3VtICs9IHdbMV07Ci0JCXN1bSArPSB3WzJdOwotCQlzdW0gKz0gd1szXTsKLQkJdyA9ICh1MTYgKikoKHVsb25nKSB3ICsgNCk7CS8qIHZlcmlmeSAqLwotCX0KLQlsZW4gKz0gODsKLQlpZiAobGVuICE9IDAgfHwgYnl0ZV9zd2FwcGVkICE9IDApIHsKLQkJUkVEVUNFOwotCQl3aGlsZSAoKGxlbiAtPSAyKSA+PSAwKQotCQkJc3VtICs9ICp3Kys7CS8qIHZlcmlmeSAqLwotCQlpZiAoYnl0ZV9zd2FwcGVkKSB7Ci0JCQlSRURVQ0U7Ci0JCQlzdW0gPDw9IDg7Ci0JCQlieXRlX3N3YXBwZWQgPSAwOwotCQkJaWYgKGxlbiA9PSAtMSkgewotCQkJCXNfdXRpbC5jWzFdID0gKihjaGFyICopIHc7Ci0JCQkJc3VtICs9IHNfdXRpbC5zOwotCQkJCWxlbiA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWxlbiA9IC0xOwotCQkJfQorCWlmIChsZW4gPiAwKQorCQljaGVja3N1bSArPSAqKHU4ICopIHdwOwogCi0JCX0gZWxzZSBpZiAobGVuID09IC0xKSB7Ci0JCQlzX3V0aWwuY1swXSA9ICooY2hhciAqKSB3OwotCQl9CiAKLQkJaWYgKGxlbiA9PSAtMSkgewotCQkJc191dGlsLmNbMV0gPSAwOwotCQkJc3VtICs9IHNfdXRpbC5zOwotCQl9Ci0JfQotCVJFRFVDRTsKLQlyZXR1cm4gKHVzaG9ydCkgc3VtOworCXdoaWxlIChjaGVja3N1bSA+PiAxNikKKwkJY2hlY2tzdW0gPSAoY2hlY2tzdW0gJiAweEZGRkYpICsgKChjaGVja3N1bSA+PiAxNikgJiAweEZGRkYpOworCisJcmV0dXJuIH5jaGVja3N1bTsKIH0KIAogc3RhdGljIHZvaWQgc2xpY19yc3BxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQpAQCAtMTQyMiw4ICsxMzMwLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssCiAJCQkJYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOwogCQlwc2xpY19oYW5kbGUgID0gIGFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlczsKLQkJaWYgKHBzbGljX2hhbmRsZSkKLQkJCWFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IHBzbGljX2hhbmRsZS0+bmV4dDsKKwkJYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzID0gcHNsaWNfaGFuZGxlLT5uZXh0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrLAogCQkJCWFkYXB0ZXItPmhhbmRsZV9sb2NrLmZsYWdzKTsKIAkJcHNsaWNfaGFuZGxlLT50eXBlID0gU0xJQ19IQU5ETEVfQ01EOwpAQCAtMTgwMiw0MzAgKzE3MDksNiBAQAogCXJldHVybiByY3ZxLT5jb3VudDsKIH0KIAotc3RhdGljIGludCBzbGljX2RlYnVnX2NhcmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLSNpZmRlZiBNT09LVE9ETwotCWludCBpOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3Qgc2xpY19jb25maWcgKmNvbmZpZyA9ICZjYXJkLT5jb25maWc7Ci0JdW5zaWduZWQgY2hhciAqZnJ1ID0gKHVuc2lnbmVkIGNoYXIgKikoJmNhcmQtPmNvbmZpZy5hdGtfZnJ1KTsKLQl1bnNpZ25lZCBjaGFyICpvZW1mcnUgPSAodW5zaWduZWQgY2hhciAqKSgmY2FyZC0+Y29uZmlnLk9lbUZydSk7Ci0jZW5kaWYKLQotCXNlcV9wcmludGYoc2VxLCAiZHJpdmVyX3ZlcnNpb24gICAgICAgICAgIDogJXNcbiIsIHNsaWNfcHJvY192ZXJzaW9uKTsKLQlzZXFfcHV0cyhzZXEsICJNaWNyb2NvZGUgdmVyc2lvbnM6XG4iKTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgICBHaWdhYml0IChnYikgICAgICAgICA6ICVzICVzXG4iLAotCQkgICAgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HLCBNT0pBVkVfVUNPREVfVkVSU19EQVRFKTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgICBHaWdhYml0IFJlY2VpdmVyICAgICA6ICVzICVzXG4iLAotCQkgICAgR0JfUkNWVUNPREVfVkVSU19TVFJJTkcsIEdCX1JDVlVDT0RFX1ZFUlNfREFURSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJWZW5kb3IgICAgICAgICAgICAgICAgICAgOiAlc1xuIiwgc2xpY192ZW5kb3IpOwotCXNlcV9wcmludGYoc2VxLCAiUHJvZHVjdCBOYW1lICAgICAgICAgICAgIDogJXNcbiIsIHNsaWNfcHJvZHVjdF9uYW1lKTsKLSNpZmRlZiBNT09LVE9ETwotCXNlcV9wcmludGYoc2VxLCAiVmVuZG9ySWQgICAgICAgICAgICAgICAgIDogJTQuNFhcbiIsCi0JCSAgICBjb25maWctPlZlbmRvcklkKTsKLQlzZXFfcHJpbnRmKHNlcSwgIkRldmljZUlkICAgICAgICAgICAgICAgICA6ICU0LjRYXG4iLAotCQkgICAgY29uZmlnLT5EZXZpY2VJZCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJSZXZpc2lvbklkICAgICAgICAgICAgICAgOiAlMi4yeFxuIiwKLQkJICAgIGNvbmZpZy0+UmV2aXNpb25JZCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJCdXMgICAgIyAgICAgICAgICAgICAgICAgOiAlZFxuIiwgY2FyZC0+YnVzbnVtYmVyKTsKLQlzZXFfcHJpbnRmKHNlcSwgIkRldmljZSAjICAgICAgICAgICAgICAgICA6ICVkXG4iLCBjYXJkLT5zbG90bnVtYmVyKTsKLQlzZXFfcHJpbnRmKHNlcSwgIkludGVyZmFjZXMgICAgICAgICAgICAgICA6ICVkXG4iLCBjYXJkLT5jYXJkX3NpemUpOwotCXNlcV9wcmludGYoc2VxLCAiICAgICBJbml0aWFsaXplZCAgICAgICAgIDogJWRcbiIsCi0JCSAgICBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpOwotCXNlcV9wcmludGYoc2VxLCAiICAgICBBbGxvY2F0ZWQgICAgICAgICAgIDogJWRcbiIsCi0JCSAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jYXJkX3NpemU7IGkrKykgewotCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICIgICAgIE1BQyVkIDogJTIuMlggJTIuMlggJTIuMlggJTIuMlggJTIuMlggJTIuMlhcbiIsCi0JCQkgICBpLCBjb25maWctPm1hY2luZm9baV0ubWFjYWRkckFbMF0sCi0JCQkgICBjb25maWctPm1hY2luZm9baV0ubWFjYWRkckFbMV0sCi0JCQkgICBjb25maWctPm1hY2luZm9baV0ubWFjYWRkckFbMl0sCi0JCQkgICBjb25maWctPm1hY2luZm9baV0ubWFjYWRkckFbM10sCi0JCQkgICBjb25maWctPm1hY2luZm9baV0ubWFjYWRkckFbNF0sCi0JCQkgICBjb25maWctPm1hY2luZm9baV0ubWFjYWRkckFbNV0pOwotCX0KLQlzZXFfcHV0cyhzZXEsICIgICAgIElGICBJbml0IFN0YXRlIER1cGxleC9TcGVlZCBpcnFcbiIpOwotCXNlcV9wdXRzKHNlcSwgIiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZDsgaSsrKSB7Ci0JCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCi0JCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOwotCQlpZiAoYWRhcHRlcikgewotCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJICAgICIgICAgICVkICAgJWQgICAlcyAgJXMgICVzICAgIDB4JVhcbiIsCi0JCQkJICAgIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5zdGF0ZSwKLQkJCQkgICAgU0xJQ19MSU5LU1RBVEUoYWRhcHRlci0+bGlua3N0YXRlKSwKLQkJCQkgICAgU0xJQ19EVVBMRVgoYWRhcHRlci0+bGlua2R1cGxleCksCi0JCQkJICAgIFNMSUNfU1BFRUQoYWRhcHRlci0+bGlua3NwZWVkKSwKLQkJCQkgICAgKHVpbnQpIGFkYXB0ZXItPmlycSk7Ci0JCX0KLQl9Ci0Jc2VxX3ByaW50ZihzZXEsICJHZW5lcmF0aW9uICMgICAgICAgICAgICAgOiAlNC40WFxuIiwgY2FyZC0+Z2VubnVtYmVyKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlJjdlEgbWF4IGVudHJpZXMgICAgICAgICA6ICU0LjRYXG4iLAotCQkgICAgU0xJQ19SQ1ZRX0VOVFJJRVMpOwotCXNlcV9wcmludGYoc2VxLCAiUGluZyBTdGF0dXMgICAgICAgICAgICAgIDogJTguOFhcbiIsCi0JCSAgICBjYXJkLT5waW5nc3RhdHVzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIk1pbmltdW0gZ3JhbnQgICAgICAgICAgICA6ICUyLjJ4XG4iLAotCQkgICAgY29uZmlnLT5NaW5HcmFudCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJNYXhpbXVtIExhdGVuY3kgICAgICAgICAgOiAlMi4yeFxuIiwgY29uZmlnLT5NYXhMYXQpOwotCXNlcV9wcmludGYoc2VxLCAiUGNpU3RhdHVzICAgICAgICAgICAgICAgIDogJTQuNHhcbiIsCi0JCSAgICBjb25maWctPlBjaXN0YXR1cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJEZWJ1ZyBEZXZpY2UgSWQgICAgICAgICAgOiAlNC40eFxuIiwKLQkJICAgIGNvbmZpZy0+RGJnRGV2SWQpOwotCXNlcV9wcmludGYoc2VxLCAiRFJBTSBST00gRnVuY3Rpb24gICAgICAgIDogJTQuNHhcbiIsCi0JCSAgICBjb25maWctPkRyYW1Sb21Gbik7Ci0Jc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIGludGVyZmFjZSBQaW4gMSAgOiAlMi4yeFxuIiwKLQkJICAgIGNvbmZpZy0+TmV0SW50UGluMSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIGludGVyZmFjZSBQaW4gMiAgOiAlMi4yeFxuIiwKLQkJICAgIGNvbmZpZy0+TmV0SW50UGluMSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIGludGVyZmFjZSBQaW4gMyAgOiAlMi4yeFxuIiwKLQkJICAgIGNvbmZpZy0+TmV0SW50UGluMSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJQTSBjYXBhYmlsaXRpZXMgICAgICAgICAgOiAlNC40WFxuIiwKLQkJICAgIGNvbmZpZy0+UE1FQ2FwYWIpOwotCXNlcV9wcmludGYoc2VxLCAiTmV0d29yayBDbG9jayBDb250cm9scyAgIDogJTQuNFhcbiIsCi0JCSAgICBjb25maWctPk53Q2xrQ3RybHMpOwotCi0Jc3dpdGNoIChjb25maWctPkZydUZvcm1hdCkgewotCWNhc2UgQVRLX0ZSVV9GT1JNQVQ6Ci0JCXsKLQkJCXNlcV9wdXRzKHNlcSwKLQkJCSAgICAiVmVuZG9yICAgICAgICAgICAgICAgICAgIDogQWxhY3JpdGVjaCwgSW5jLlxuIik7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICAiQXNzZW1ibHkgIyAgICAgICAgICAgICAgIDogJWMlYyVjJWMlYyVjXG4iLAotCQkJCSAgICBmcnVbMF0sIGZydVsxXSwgZnJ1WzJdLCBmcnVbM10sIGZydVs0XSwKLQkJCQkgICAgZnJ1WzVdKTsKLQkJCXNlcV9wcmludGYoc2VxLAotCQkJCSAgICAiUmV2aXNpb24gIyAgICAgICAgICAgICAgIDogJWMlY1xuIiwKLQkJCQkgICAgZnJ1WzZdLCBmcnVbN10pOwotCi0JCQlpZiAoY29uZmlnLT5PRU1GcnVGb3JtYXQgPT0gVkVORE9SNF9GUlVfRk9STUFUKSB7Ci0JCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJCSAgICAiU2VyaWFsICAgIyAgICAgICAgICAgICAgIDogJWMlYyVjJWMlYyVjJWMlYyVjJWMlYyVjXG4iLAotCQkJCQkgICAgZnJ1WzhdLCBmcnVbOV0sIGZydVsxMF0sCi0JCQkJCSAgICBmcnVbMTFdLCBmcnVbMTJdLCBmcnVbMTNdLAotCQkJCQkgICAgZnJ1WzE2XSwgZnJ1WzE3XSwgZnJ1WzE4XSwKLQkJCQkJICAgIGZydVsxOV0sIGZydVsyMF0sIGZydVsyMV0pOwotCQkJfSBlbHNlIHsKLQkJCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkJICAgICJTZXJpYWwgICAjICAgICAgICAgICAgICAgOiAlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWMlYyVjXG4iLAotCQkJCQkgICAgZnJ1WzhdLCBmcnVbOV0sIGZydVsxMF0sCi0JCQkJCSAgICBmcnVbMTFdLCBmcnVbMTJdLCBmcnVbMTNdLAotCQkJCQkgICAgZnJ1WzE0XSwgZnJ1WzE1XSwgZnJ1WzE2XSwKLQkJCQkJICAgIGZydVsxN10sIGZydVsxOF0sIGZydVsxOV0sCi0JCQkJCSAgICBmcnVbMjBdLCBmcnVbMjFdKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQl7Ci0JCQlzZXFfcHV0cyhzZXEsCi0JCQkgICAgIlZlbmRvciAgICAgICAgICAgICAgICAgICA6IEFsYWNyaXRlY2gsIEluYy5cbiIpOwotCQkJc2VxX3B1dHMoc2VxLAotCQkJICAgICJTZXJpYWwgICAjICAgICAgICAgICAgICAgOiBFbXB0eSBGUlVcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKGNvbmZpZy0+T0VNRnJ1Rm9ybWF0KSB7Ci0JY2FzZSBWRU5ET1IxX0ZSVV9GT1JNQVQ6Ci0JCXsKLQkJCXNlcV9wdXRzKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOwotCQkJc2VxX3ByaW50ZihzZXEsICIgICAgQ29tbW9kaXR5ICMgICAgICAgICAgOiAlY1xuIiwKLQkJCQkgICAgb2VtZnJ1WzBdKTsKLQkJCXNlcV9wcmludGYoc2VxLAotCQkJCSAgICAiICAgIEFzc2VtYmx5ICMgICAgICAgICAgIDogJWMlYyVjJWNcbiIsCi0JCQkJICAgIG9lbWZydVsxXSwgb2VtZnJ1WzJdLCBvZW1mcnVbM10sIG9lbWZydVs0XSk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkgICAgIiAgICBSZXZpc2lvbiAjICAgICAgICAgICA6ICVjJWNcbiIsCi0JCQkJICAgIG9lbWZydVs1XSwgb2VtZnJ1WzZdKTsKLQkJCXNlcV9wcmludGYoc2VxLAotCQkJCSAgICAiICAgIFN1cHBsaWVyICMgICAgICAgICAgIDogJWMlY1xuIiwKLQkJCQkgICAgb2VtZnJ1WzddLCBvZW1mcnVbOF0pOwotCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJICAgICIgICAgRGF0ZSAgICAgICAgICAgICAgICAgOiAlYyVjXG4iLAotCQkJCSAgICBvZW1mcnVbOV0sIG9lbWZydVsxMF0pOwotCQkJc2VxX3NwcmludGYoc2VxLAotCQkJCSAgICAiICAgIFNlcXVlbmNlICMgICAgICAgICAgIDogJWMlYyVjXG4iLAotCQkJCSAgICBvZW1mcnVbMTFdLCBvZW1mcnVbMTJdLCBvZW1mcnVbMTNdKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIFZFTkRPUjJfRlJVX0ZPUk1BVDoKLQkJewotCQkJc2VxX3B1dHMoc2VxLCAiRlJVIEluZm9ybWF0aW9uOlxuIik7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkgICAgIiAgICBQYXJ0ICAgICAjICAgICAgICAgICA6ICVjJWMlYyVjJWMlYyVjJWNcbiIsCi0JCQkJICAgIG9lbWZydVswXSwgb2VtZnJ1WzFdLCBvZW1mcnVbMl0sCi0JCQkJICAgIG9lbWZydVszXSwgb2VtZnJ1WzRdLCBvZW1mcnVbNV0sCi0JCQkJICAgIG9lbWZydVs2XSwgb2VtZnJ1WzddKTsKLQkJCXNlcV9wcmludGYoc2VxLAotCQkJCSAgICAiICAgIFN1cHBsaWVyICMgICAgICAgICAgIDogJWMlYyVjJWMlY1xuIiwKLQkJCQkgICAgb2VtZnJ1WzhdLCBvZW1mcnVbOV0sIG9lbWZydVsxMF0sCi0JCQkJICAgIG9lbWZydVsxMV0sIG9lbWZydVsxMl0pOwotCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJICAgICIgICAgRGF0ZSAgICAgICAgICAgICAgICAgOiAlYyVjJWNcbiIsCi0JCQkJICAgIG9lbWZydVsxM10sIG9lbWZydVsxNF0sIG9lbWZydVsxNV0pOwotCQkJc2VxX3NwcmludGYoc2VxLAotCQkJCSAgICAiICAgIFNlcXVlbmNlICMgICAgICAgICAgIDogJWMlYyVjJWNcbiIsCi0JCQkJICAgIG9lbWZydVsxNl0sIG9lbWZydVsxN10sIG9lbWZydVsxOF0sCi0JCQkJICAgIG9lbWZydVsxOV0pOwotCQkJYnJlYWs7Ci0JCX0KLQotCWNhc2UgVkVORE9SM19GUlVfRk9STUFUOgotCQl7Ci0JCQlzZXFfcHV0cyhzZXEsICJGUlUgSW5mb3JtYXRpb246XG4iKTsKLQkJfQotCi0JY2FzZSBWRU5ET1I0X0ZSVV9GT1JNQVQ6Ci0JCXsKLQkJCXNlcV9wdXRzKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOwotCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJICAgICIgICAgRlJVIE51bWJlciAgICAgICAgICAgOiAlYyVjJWMlYyVjJWMlYyVjXG4iLAotCQkJCSAgICBvZW1mcnVbMF0sIG9lbWZydVsxXSwgb2VtZnJ1WzJdLAotCQkJCSAgICBvZW1mcnVbM10sIG9lbWZydVs0XSwgb2VtZnJ1WzVdLAotCQkJCSAgICBvZW1mcnVbNl0sIG9lbWZydVs3XSk7Ci0JCQlzZXFfc3ByaW50ZihzZXEsCi0JCQkJICAgICIgICAgUGFydCBOdW1iZXIgICAgICAgICAgOiAlYyVjJWMlYyVjJWMlYyVjXG4iLAotCQkJCSAgICBvZW1mcnVbOF0sIG9lbWZydVs5XSwgb2VtZnJ1WzEwXSwKLQkJCQkgICAgb2VtZnJ1WzExXSwgb2VtZnJ1WzEyXSwgb2VtZnJ1WzEzXSwKLQkJCQkgICAgb2VtZnJ1WzE0XSwgb2VtZnJ1WzE1XSk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkgICAgIiAgICBFQyBMZXZlbCAgICAgICAgICAgICA6ICVjJWMlYyVjJWMlYyVjJWNcbiIsCi0JCQkJICAgIG9lbWZydVsxNl0sIG9lbWZydVsxN10sIG9lbWZydVsxOF0sCi0JCQkJICAgIG9lbWZydVsxOV0sIG9lbWZydVsyMF0sIG9lbWZydVsyMV0sCi0JCQkJICAgIG9lbWZydVsyMl0sIG9lbWZydVsyM10pOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19kZWJ1Z19hZGFwdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQotCXNlcV9wcmludGYoc2VxLCAiaW5mbzogaW50ZXJmYWNlICAgICAgICAgIDogJXNcbiIsCi0JCQkgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQlzZXFfcHJpbnRmKHNlcSwgImluZm86IHN0YXR1cyAgICAgICAgICAgICA6ICVzXG4iLAotCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpKTsKLQlzZXFfcHJpbnRmKHNlcSwgImluZm86IHBvcnQgICAgICAgICAgICAgICA6ICVkXG4iLAotCQlhZGFwdGVyLT5waHlzcG9ydCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJpbmZvOiBzcGVlZCAgICAgICAgICAgICAgOiAlc1xuIiwKLQkJU0xJQ19TUEVFRChhZGFwdGVyLT5saW5rc3BlZWQpKTsKLQlzZXFfcHJpbnRmKHNlcSwgImluZm86IGR1cGxleCAgICAgICAgICAgICA6ICVzXG4iLAotCQlTTElDX0RVUExFWChhZGFwdGVyLT5saW5rZHVwbGV4KSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpcnEgICAgICAgICAgICAgICAgOiAweCVYXG4iLAotCQkodWludCkgYWRhcHRlci0+aXJxKTsKLQlzZXFfcHJpbnRmKHNlcSwgImluZm86IEludGVycnVwdCBBZ2cgRGVsYXk6ICVkIHVzZWNcbiIsCi0JCWFkYXB0ZXItPmNhcmQtPmxvYWRsZXZlbF9jdXJyZW50KTsKLQlzZXFfcHJpbnRmKHNlcSwgImluZm86IFJjdlEgbWF4IGVudHJpZXMgICA6ICU0LjRYXG4iLAotCQlTTElDX1JDVlFfRU5UUklFUyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJpbmZvOiBSY3ZRIGN1cnJlbnQgICAgICAgOiAlNC40WFxuIiwKLQkJICAgIGFkYXB0ZXItPnJjdnF1ZXVlLmNvdW50KTsKLQlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBwYWNrZXRzICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCi0JCSAgICBuZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMpOwotCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGJ5dGVzICAgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJICAgIG5ldGRldi0+c3RhdHMucnhfYnl0ZXMpOwotCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGJyb2FkY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkgICAgYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMpOwotCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IG11bHRpY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkgICAgYWRhcHRlci0+cmN2X211bHRpY2FzdHMpOwotCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IHVuaWNhc3RzICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkgICAgYWRhcHRlci0+cmN2X3VuaWNhc3RzKTsKLQlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBlcnJvcnMgICAgICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKLQkJICAgICh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9ycyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogTWlzc2VkIGVycm9ycyAgICAgICAgICAgIDogJTguOFhcbiIsCi0JCSAgICAodTMyKSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkcyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogZHJvcHMgICAgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCi0JCQkodTMyKSBhZGFwdGVyLT5yY3ZfZHJvcHMpOwotCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IHBhY2tldHMgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogYnl0ZXMgICAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAotCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogZXJyb3JzICAgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCi0JCQkodTMyKSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnMpOwotCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IG11bHRpY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJCW5ldGRldi0+c3RhdHMubXVsdGljYXN0KTsKLQlzZXFfcHJpbnRmKHNlcSwgInR4IHN0YXRzOiBjb2xsaXNpb24gZXJyb3JzICAgICAgICAgOiAlOC44WFxuIiwKLQkJCSh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG1pdF9jb2xsaXNpb25zKTsKLQlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IE1heCByY3YgZnJhbWVzL2lzciAgICAgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPm1heF9pc3JfcmN2cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiBSY3YgaW50ZXJydXB0IHlpZWxkcyAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0X3lpZWxkcyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiBNYXggeG1pdCBjb21wbGV0ZS9pc3IgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5tYXhfaXNyX3htaXRzKTsKLQlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IGVycm9yIGludGVycnVwdHMgICAgICAgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMpOwotCXNlcV9wcmludGYoc2VxLCAicGVyZjogZXJyb3Igcm1pc3MgaW50ZXJydXB0cyAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+ZXJyb3Jfcm1pc3NfaW50ZXJydXB0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiByY3YgaW50ZXJydXB0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiB4bWl0IGludGVycnVwdHMgICAgICAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMpOwotCXNlcV9wcmludGYoc2VxLCAicGVyZjogbGluayBldmVudCBpbnRlcnJ1cHRzICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+bGlua2V2ZW50X2ludGVycnVwdHMpOwotCXNlcV9wcmludGYoc2VxLCAicGVyZjogVVBSIGludGVycnVwdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMpOwotCXNlcV9wcmludGYoc2VxLCAicGVyZjogaW50ZXJydXB0IGNvdW50ICAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+bnVtX2lzcnMpOwotCXNlcV9wcmludGYoc2VxLCAicGVyZjogZmFsc2UgaW50ZXJydXB0cyAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+ZmFsc2VfaW50ZXJydXB0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiBBbGwgcmVnaXN0ZXIgd3JpdGVzICAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiBJQ1IgcmVnaXN0ZXIgd3JpdGVzICAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5pY3JfcmVnX3dyaXRlcyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJmOiBJU1IgcmVnaXN0ZXIgd3JpdGVzICAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5pc3JfcmVnX3dyaXRlcyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogb3ZlcmZsb3cgODAyIGVycm9ycyAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIpOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IHRyYW5zcG9ydCBvdmVyZmxvdyBlcnJvcnM6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogdW5kZXJmbG93IGVycm9ycyAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIpOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IHJlY2VpdmUgZWFybHkgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5KTsKLQlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBidWZmZXIgb3ZlcmZsb3dzICAgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5CdWZvdik7Ci0Jc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogY2FycmllciBlcnJvcnMgICAgICAgICAgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuQ2FycmUpOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IExvbmcgICAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLkxvbmdlKTsKLQlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBpbnZhbGlkIHByZWFtYmxlcyAgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JbnZwKTsKLQlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBDUkMgZXJyb3JzICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DcmMpOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IGRyaWJibGUgbmliYmxlcyAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwpOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IENvZGUgdmlvbGF0aW9ucyAgICAgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNvZGUpOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IFRDUCBjaGVja3N1bSBlcnJvcnMgICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogVENQIGhlYWRlciBzaG9ydCBlcnJvcnMgIDogJTguOFhcbiIsCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBIbGVuKTsKLQlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBJUCBjaGVja3N1bSBlcnJvcnMgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0pOwotCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IElQIGZyYW1lIGluY29tcGxldGVzICAgICA6ICU4LjhYXG4iLAotCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKTsKLQlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBJUCBoZWFkZXJzIHNob3J0cyAgICAgICAgOiAlOC44WFxuIiwKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcEhsZW4pOwotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHNsaWNfZGVidWdfYWRhcHRlcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzbGljX2RlYnVnX2FkYXB0ZXJfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19kZWJ1Z19jYXJkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNsaWNfZGVidWdfY2FyZF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2xpY19kZWJ1Z19hZGFwdGVyX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHNsaWNfZGVidWdfYWRhcHRlcl9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbGljX2RlYnVnX2NhcmRfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gc2xpY19kZWJ1Z19jYXJkX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZDsKLQljaGFyICAgIG5hbWVbN107Ci0Jc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKLQotCWlmICghY2FyZC0+ZGVidWdmc19kaXIpCi0JCXJldHVybjsKLQotCXNwcmludGYobmFtZSwgInBvcnQlZCIsIGFkYXB0ZXItPnBvcnQpOwotCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSVJVR08sCi0JCQkJY2FyZC0+ZGVidWdmc19kaXIsIGFkYXB0ZXIsCi0JCQkJJnNsaWNfZGVidWdfYWRhcHRlcl9mb3BzKTsKLQlpZiAoIWQgfHwgSVNfRVJSKGQpKQotCQlwcl9pbmZvKFBGWCAiJXM6IGRlYnVnZnMgY3JlYXRlIGZhaWxlZFxuIiwgbmFtZSk7Ci0JZWxzZQotCQlhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5ID0gZDsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2Rlc3Ryb3koc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JZGVidWdmc19yZW1vdmUoYWRhcHRlci0+ZGVidWdmc19lbnRyeSk7Ci0JYWRhcHRlci0+ZGVidWdmc19lbnRyeSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9jcmVhdGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCXN0cnVjdCBkZW50cnkgKmQ7Ci0JY2hhciAgICBuYW1lW0lGTkFNU0laXTsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInNsaWMlZCIsIGNhcmQtPmNhcmRudW0pOwotCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgc2xpY19kZWJ1Z2ZzKTsKLQlpZiAoIWQgfHwgSVNfRVJSKGQpKQotCQlwcl9pbmZvKFBGWCAiJXM6IGRlYnVnZnMgY3JlYXRlIGRpciBmYWlsZWRcbiIsCi0JCQkJbmFtZSk7Ci0JZWxzZSB7Ci0JCWNhcmQtPmRlYnVnZnNfZGlyID0gZDsKLQkJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNhcmRpbmZvIiwgU19JUlVHTywKLQkJCQlzbGljX2RlYnVnZnMsIGNhcmQsCi0JCQkJJnNsaWNfZGVidWdfY2FyZF9mb3BzKTsKLQkJaWYgKCFkIHx8IElTX0VSUihkKSkKLQkJCXByX2luZm8oUEZYICIlczogZGVidWdmcyBjcmVhdGUgZmFpbGVkXG4iLAotCQkJCQluYW1lKTsKLQkJZWxzZQotCQkJY2FyZC0+ZGVidWdmc19jYXJkaW5mbyA9IGQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfZGVzdHJveShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKLQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7Ci0KLQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07Ci0JCWlmIChhZGFwdGVyKQotCQkJc2xpY19kZWJ1Z19hZGFwdGVyX2Rlc3Ryb3koYWRhcHRlcik7Ci0JfQotCWRlYnVnZnNfcmVtb3ZlKGNhcmQtPmRlYnVnZnNfY2FyZGluZm8pOwotCWRlYnVnZnNfcmVtb3ZlKGNhcmQtPmRlYnVnZnNfZGlyKTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZW50OwotCi0JZW50ID0gZGVidWdmc19jcmVhdGVfZGlyKCJzbGljIiwgTlVMTCk7Ci0JaWYgKCFlbnQgfHwgSVNfRVJSKGVudCkpIHsKLQkJcHJfaW5mbyhQRlggImRlYnVnZnMgY3JlYXRlIGRpcmVjdG9yeSBmYWlsZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc2xpY19kZWJ1Z2ZzID0gZW50OwotfQotCi1zdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NsZWFudXAodm9pZCkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShzbGljX2RlYnVnZnMpOwotfQotCiAvKgogICogc2xpY19saW5rX2V2ZW50X2hhbmRsZXIgLQogICoKQEAgLTI5NDcsMzAgKzI0MzAsMjEgQEAKIAkJZGVsX3RpbWVyX3N5bmMoJmNhcmQtPmxvYWR0aW1lcik7CiAJfQogCi0Jc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koY2FyZCk7Ci0KIAlrZnJlZShjYXJkKTsKIH0KIAogc3RhdGljIHZvaWQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7Ci0JdTMyIG1taW9fc3RhcnQgPSAwOwotCXVpbnQgbW1pb19sZW4gPSAwOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CiAJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciwgKm1saXN0OwogCi0Jc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7Ci0Jc2xpY191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLQltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7Ci0JbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CisJc2xpY191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKIAkvKiBmcmVlIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KIAltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CiAJd2hpbGUgKG1saXN0KSB7CkBAIC0zMjI1LDEzICsyNjk5LDggQEAKIAogCS8qIERvd25sb2FkIHRoZSBtaWNyb2NvZGUgKi8KIAlzdGF0dXMgPSBzbGljX2NhcmRfZG93bmxvYWQoYWRhcHRlcik7Ci0KLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkiZG93bmxvYWQgZmFpbGVkIGJ1cyAlZCBzbG90ICVkXG4iLAotCQkJYWRhcHRlci0+YnVzbnVtYmVyLCBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwotCX0KIAogCWlmICghY2FyZC0+Y29uZmlnX3NldCkgewogCQlwZWVwcm9tID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LApAQCAtMzI0Myw4ICsyNzEyLDcgQEAKIAogCQlpZiAoIXBlZXByb20pIHsKIAkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAotCQkJCSJlZXByb20gcmVhZCBmYWlsZWQgdG8gZ2V0IG1lbW9yeSBidXMgJWQgc2xvdCAlZFxuIiwgYWRhcHRlci0+YnVzbnVtYmVyLAotCQkJCWFkYXB0ZXItPnNsb3RudW1iZXIpOworCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgRE1BIG1lbW9yeSBmb3IgRUVQUk9NLlxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfSBlbHNlIHsKIAkJCW1lbXNldChwZWVwcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSk7CkBAIC0zMjU2LDEzICsyNzI0LDE5IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAogCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwotCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+aXNyKSwgRE9OVF9GTFVTSCk7CiAJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3AsCiAJCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCiAJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CiAKLQkJc2xpY19jb25maWdfZ2V0KGFkYXB0ZXIsIHBoeXNfY29uZmlnbCwgcGh5c19jb25maWdoKTsKKwkJc3RhdHVzID0gc2xpY19jb25maWdfZ2V0KGFkYXB0ZXIsIHBoeXNfY29uZmlnbCwgcGh5c19jb25maWdoKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJIkZhaWxlZCB0byBmZXRjaCBjb25maWcgZGF0YSBmcm9tIGRldmljZS5cbiIpOworCQkJZ290byBjYXJkX2luaXRfZXJyOworCQl9CiAKIAkJZm9yICg7OykgewogCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSB7CkBAIC0zMjg3LDEzICsyNzYxLDEzIEBACiAJCQkJaSsrOwogCQkJCWlmIChpID4gNTAwMCkgewogCQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKLQkJCQkJCSIlZCBjb25maWcgZGF0YSBmZXRjaCB0aW1lZCBvdXQhXG4iLAotCQkJCQkJYWRhcHRlci0+cG9ydCk7CisJCQkJCQkiRmV0Y2ggb2YgY29uZmlnIGRhdGEgdGltZWQgb3V0LlxuIik7CiAJCQkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwKIAkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfaXNwLCAwLAogCQkJCQkJJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAogCQkJCQkJMCwgRkxVU0gpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCQkJZ290byBjYXJkX2luaXRfZXJyOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzMzOSw5ICsyODEzLDggQEAKIAkJCS8qCiAJCQkgICAgY2FsY3VsYXRlIHRoZSBFRVBST00gY2hlY2tzdW0KIAkJCSovCi0JCQljYWxjX2Noa3N1bSA9Ci0JCQkgICAgfnNsaWNfZWVwcm9tX2Nrc3VtKChjaGFyICopIHBlZXByb20sCi0JCQkJCSAgICAgICAoZWVjb2Rlc2l6ZSAtIDIpKTsKKwkJCWNhbGNfY2hrc3VtID0gc2xpY19lZXByb21fY2tzdW0ocGVlcHJvbSwKKwkJCQkJCQllZWNvZGVzaXplIC0gMik7CiAJCQkvKgogCQkJICAgIGlmIHRoZSB1Y2RvZSBjaGtzdW0gZmxhZyBiaXQgd29ya2VkLAogCQkJICAgIHdlIHdvdWxkbid0IG5lZWQgdGhpcwpAQCAtMzM2NywyNCArMjg0MCwyMCBAQAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKIAkJCQkgICAgcGVlcHJvbSwgcGh5c19jb25maWcpOwogCi0JCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKLQkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKKwkJaWYgKCFjYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpIHsKIAkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCiAJCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCiAJCQkJCSAwLCBGTFVTSCk7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKLQkJCQkidW5zdXBwb3J0ZWQgQ09ORklHVVJBVElPTiBFRVBST00gaW52YWxpZFxuIik7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwgIkVFUFJPTSBpbnZhbGlkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWNhcmQtPmNvbmZpZ19zZXQgPSAxOwogCX0KIAotCWlmIChzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3YoYWRhcHRlcikpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkidW5hYmxlIHRvIGRvd25sb2FkIEdCIHJlY2VpdmUgbWljcm9jb2RlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXN0YXR1cyA9IHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKQogCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgMCk7CkBAIC0zNDAzLDYgKzI4NzIsMTEgQEAKIAljYXJkLT5yZXNldF9pbl9wcm9ncmVzcyA9IDA7CiAKIAlyZXR1cm4gMDsKKworY2FyZF9pbml0X2VycjoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQkgICAgcGVlcHJvbSwgcGh5c19jb25maWcpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCkKQEAgLTM0MTAsNyArMjg4NCw2IEBACiAJaWYgKHNsaWNfZmlyc3RfaW5pdCkgewogCQlzbGljX2ZpcnN0X2luaXQgPSAwOwogCQlzcGluX2xvY2tfaW5pdCgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jayk7Ci0JCXNsaWNfZGVidWdfaW5pdCgpOwogCX0KIH0KIApAQCAtMzQzMCwxNiArMjkwMywxMiBAQAogCWFkYXB0ZXItPmJ1c251bWJlciA9IHBjaWRldi0+YnVzLT5udW1iZXI7CiAJYWRhcHRlci0+c2xvdG51bWJlciA9ICgocGNpZGV2LT5kZXZmbiA+PiAzKSAmIDB4MUYpOwogCWFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyID0gKHBjaWRldi0+ZGV2Zm4gJiAweDcpOwotCWFkYXB0ZXItPm1lbW9yeWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKIAlhZGFwdGVyLT5zbGljX3JlZ3MgPSAoX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICopbWVtYWRkcjsKIAlhZGFwdGVyLT5pcnEgPSBwY2lkZXYtPmlycTsKIC8qCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsqLwotCWFkYXB0ZXItPm5leHRfbmV0ZGV2aWNlID0gaGVhZF9uZXRkZXZpY2U7Ci0JaGVhZF9uZXRkZXZpY2UgPSBuZXRkZXY7CiAJYWRhcHRlci0+Y2hpcGlkID0gY2hpcF9pZHg7CiAJYWRhcHRlci0+cG9ydCA9IDA7CS8qYWRhcHRlci0+ZnVuY3Rpb25udW1iZXI7Ki8KIAlhZGFwdGVyLT5jYXJkaW5kZXggPSBhZGFwdGVyLT5wb3J0OwotCWFkYXB0ZXItPm1lbW9yeWJhc2UgPSBtZW1hZGRyOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT51cHJfbG9jay5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5hZGFwdGVyX2xvY2subG9jayk7CkBAIC0zNTI5LDggKzI5OTgsNiBAQAogCQkJfQogCQl9CiAJCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKys7Ci0KLQkJc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShjYXJkKTsKIAl9IGVsc2UgewogCQkvKiBDYXJkIGV4aXN0cywgZmluZCB0aGUgY2FyZCB0aGlzIGFkYXB0ZXIgYmVsb25ncyB0byAqLwogCQl3aGlsZSAoY2FyZCkgewpAQCAtMzU5NSw3ICszMDYyLDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwogCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkciA9IE5VTEw7Ci0JdTMyIHN0YXR1cyA9IDA7CiAJdWxvbmcgbW1pb19zdGFydCA9IDA7CiAJdWxvbmcgbW1pb19sZW4gPSAwOwogCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IE5VTEw7CkBAIC0zNjA4LDkgKzMwNzQsOSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoc2xpY19kZWJ1ZyA+IDAgJiYgZGlkX3ZlcnNpb24rKyA9PSAwKSB7Ci0JCWRldl9kYmcoJnBjaWRldi0+ZGV2LCAiJXNcbiIsIHNsaWNfYmFubmVyKTsKLQkJZGV2X2RiZygmcGNpZGV2LT5kZXYsICIlc1xuIiwgc2xpY19wcm9jX3ZlcnNpb24pOworCWlmIChkaWRfdmVyc2lvbisrID09IDApIHsKKwkJZGV2X2luZm8oJnBjaWRldi0+ZGV2LCAiJXNcbiIsIHNsaWNfYmFubmVyKTsKKwkJZGV2X2luZm8oJnBjaWRldi0+ZGV2LCAiJXNcbiIsIHNsaWNfcHJvY192ZXJzaW9uKTsKIAl9CiAKIAlpZiAoIXBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soNjQpKSkgewpAQCAtMzY4NiwyMyArMzE1MiwxNiBAQAogCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOwogCX0KIAotCXN0YXR1cyA9IHNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOworCWVyciA9IHNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF91bm1hcDsKIAotCWlmIChzdGF0dXMgIT0gMCkgewotCQljYXJkLT5zdGF0ZSA9IENBUkRfRkFJTDsKLQkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOwotCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047Ci0JCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiRkFJTEVEIHN0YXR1c1sleF1cbiIsIHN0YXR1cyk7Ci0JfSBlbHNlIHsKLQkJc2xpY19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7Ci0JfQorCXNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOwogCi0JbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5tZW1vcnliYXNlOworCW5ldGRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbW1hcHBlZF9pb2FkZHI7CiAJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7CiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnNsaWNfbmV0ZGV2X29wczsKIAotCXNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoYWRhcHRlcik7Ci0KIAlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0zNzEyLDcgKzMxNzEsNyBAQAogCiAJY2FyZHNfZm91bmQrKzsKIAotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIDA7CiAKIGVycl9vdXRfdW5tYXA6CiAJaW91bm1hcChtZW1tYXBwZWRfaW9hZGRyKTsKQEAgLTM3MzYsMTggKzMxOTUsMTIgQEAKIHsKIAlzbGljX2luaXRfZHJpdmVyKCk7CiAKLQlpZiAoZGVidWcgPj0gMCAmJiBzbGljX2RlYnVnICE9IGRlYnVnKQotCQlwcl9kZWJ1ZygiZGVidWcgbGV2ZWwgaXMgJWQuXG4iLCBkZWJ1Zyk7Ci0JaWYgKGRlYnVnID49IDApCi0JCXNsaWNfZGVidWcgPSBkZWJ1ZzsKLQogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbGljX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGljX21vZHVsZV9jbGVhbnVwKHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzbGljX2RyaXZlcik7Ci0Jc2xpY19kZWJ1Z19jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KHNsaWNfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMKaW5kZXggMWNhOTFmNy4uMmVmN2Y2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jCkBAIC02NDEsNyArNjQxLDcgQEAKIAkJaWYgKGtzdHJ0b2woY3AsIDEwLCAmdmFsdWUpID09IDApCiAJCQlyZXQgPSBzcGtfc2V0X251bV92YXIodmFsdWUsIHBhcmFtLCBsZW4pOwogCQllbHNlCi0JCQlwcl93YXJuKCJvdmVyZmxvdyBvciBwYXJzaW5nIGVycm9yIGhhcyBvY2N1cmVkIik7CisJCQlwcl93YXJuKCJvdmVyZmxvdyBvciBwYXJzaW5nIGVycm9yIGhhcyBvY2N1cnJlZCIpOwogCQlpZiAocmV0ID09IC1FUkFOR0UpIHsKIAkJCXZhcl9kYXRhID0gcGFyYW0tPmRhdGE7CiAJCQlwcl93YXJuKCJ2YWx1ZSBmb3IgJXMgb3V0IG9mIHJhbmdlLCBleHBlY3QgJWQgdG8gJWRcbiIsCkBAIC04NTEsNzUgKzg1MSw3NSBAQAogICogRGVjbGFyZSB0aGUgYXR0cmlidXRlcy4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBrZXltYXBfYXR0cmlidXRlID0KLQlfX0FUVFIoa2V5bWFwLCBTX0lXVVNSfFNfSVJVR08sIGtleW1hcF9zaG93LCBrZXltYXBfc3RvcmUpOworCV9fQVRUUl9SVyhrZXltYXApOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzaWxlbnRfYXR0cmlidXRlID0KLQlfX0FUVFIoc2lsZW50LCBTX0lXVUdPLCBOVUxMLCBzaWxlbnRfc3RvcmUpOworCV9fQVRUUl9XTyhzaWxlbnQpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzeW50aF9hdHRyaWJ1dGUgPQotCV9fQVRUUihzeW50aCwgU19JV1VHT3xTX0lSVUdPLCBzeW50aF9zaG93LCBzeW50aF9zdG9yZSk7CisJX19BVFRSX1JXKHN5bnRoKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgc3ludGhfZGlyZWN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHN5bnRoX2RpcmVjdCwgU19JV1VHTywgTlVMTCwgc3ludGhfZGlyZWN0X3N0b3JlKTsKKwlfX0FUVFJfV08oc3ludGhfZGlyZWN0KTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdmVyc2lvbl9hdHRyaWJ1dGUgPQogCV9fQVRUUl9STyh2ZXJzaW9uKTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkZWxpbWl0ZXJzX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGRlbGltaXRlcnMsIFNfSVdVR098U19JUlVHTywgcHVuY19zaG93LCBwdW5jX3N0b3JlKTsKKwlfX0FUVFIoZGVsaW1pdGVycywgU19JV1VTUnxTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBleF9udW1fYXR0cmlidXRlID0KLQlfX0FUVFIoZXhfbnVtLCBTX0lXVUdPfFNfSVJVR08sIHB1bmNfc2hvdywgcHVuY19zdG9yZSk7CisJX19BVFRSKGV4X251bSwgU19JV1VTUnxTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jX2FsbF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwdW5jX2FsbCwgU19JV1VHT3xTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOworCV9fQVRUUihwdW5jX2FsbCwgU19JV1VTUnxTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jX21vc3RfYXR0cmlidXRlID0KLQlfX0FUVFIocHVuY19tb3N0LCBTX0lXVUdPfFNfSVJVR08sIHB1bmNfc2hvdywgcHVuY19zdG9yZSk7CisJX19BVFRSKHB1bmNfbW9zdCwgU19JV1VTUnxTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jX3NvbWVfYXR0cmlidXRlID0KLQlfX0FUVFIocHVuY19zb21lLCBTX0lXVUdPfFNfSVJVR08sIHB1bmNfc2hvdywgcHVuY19zdG9yZSk7CisJX19BVFRSKHB1bmNfc29tZSwgU19JV1VTUnxTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByZXBlYXRzX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJlcGVhdHMsIFNfSVdVR098U19JUlVHTywgcHVuY19zaG93LCBwdW5jX3N0b3JlKTsKKwlfX0FUVFIocmVwZWF0cywgU19JV1VTUnxTX0lSVUdPLCBwdW5jX3Nob3csIHB1bmNfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGF0dHJpYl9ibGVlcF9hdHRyaWJ1dGUgPQotCV9fQVRUUihhdHRyaWJfYmxlZXAsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoYXR0cmliX2JsZWVwLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGJlbGxfcG9zX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGJlbGxfcG9zLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGJlbGxfcG9zLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGJsZWVwX3RpbWVfYXR0cmlidXRlID0KLQlfX0FUVFIoYmxlZXBfdGltZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihibGVlcF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGJsZWVwc19hdHRyaWJ1dGUgPQotCV9fQVRUUihibGVlcHMsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoYmxlZXBzLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGN1cnNvcl90aW1lX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGN1cnNvcl90aW1lLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGN1cnNvcl90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtleV9lY2hvX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGtleV9lY2hvLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGtleV9lY2hvLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIG5vX2ludGVycnVwdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihub19pbnRlcnJ1cHQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIobm9faW50ZXJydXB0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHB1bmNfbGV2ZWxfYXR0cmlidXRlID0KLQlfX0FUVFIocHVuY19sZXZlbCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwdW5jX2xldmVsLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHJlYWRpbmdfcHVuY19hdHRyaWJ1dGUgPQotCV9fQVRUUihyZWFkaW5nX3B1bmMsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmVhZGluZ19wdW5jLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHNheV9jb250cm9sX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHNheV9jb250cm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHNheV9jb250cm9sLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHNheV93b3JkX2N0bF9hdHRyaWJ1dGUgPQotCV9fQVRUUihzYXlfd29yZF9jdGwsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoc2F5X3dvcmRfY3RsLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHNwZWxsX2RlbGF5X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHNwZWxsX2RlbGF5LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHNwZWxsX2RlbGF5LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiAKIC8qCiAgKiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBpMThuIHJlbGF0ZWQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgYW5ub3VuY2VtZW50c19hdHRyaWJ1dGUgPQotCV9fQVRUUihhbm5vdW5jZW1lbnRzLCBTX0lXVUdPfFNfSVJVR08sIG1lc3NhZ2Vfc2hvdywgbWVzc2FnZV9zdG9yZSk7CisJX19BVFRSKGFubm91bmNlbWVudHMsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2hhcmFjdGVyc19hdHRyaWJ1dGUgPQotCV9fQVRUUihjaGFyYWN0ZXJzLCBTX0lXVUdPfFNfSVJVR08sIGNoYXJzX2NoYXJ0YWJfc2hvdywgY2hhcnNfY2hhcnRhYl9zdG9yZSk7CisJX19BVFRSKGNoYXJhY3RlcnMsIFNfSVdVU1J8U19JUlVHTywgY2hhcnNfY2hhcnRhYl9zaG93LCBjaGFyc19jaGFydGFiX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2hhcnRhYl9hdHRyaWJ1dGUgPQotCV9fQVRUUihjaGFydGFiLCBTX0lXVUdPfFNfSVJVR08sIGNoYXJzX2NoYXJ0YWJfc2hvdywgY2hhcnNfY2hhcnRhYl9zdG9yZSk7CisJX19BVFRSKGNoYXJ0YWIsIFNfSVdVU1J8U19JUlVHTywgY2hhcnNfY2hhcnRhYl9zaG93LCBjaGFyc19jaGFydGFiX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY3RsX2tleXNfYXR0cmlidXRlID0KLQlfX0FUVFIoY3RsX2tleXMsIFNfSVdVR098U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKKwlfX0FUVFIoY3RsX2tleXMsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY29sb3JzX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNvbG9ycywgU19JV1VHT3xTX0lSVUdPLCBtZXNzYWdlX3Nob3csIG1lc3NhZ2Vfc3RvcmUpOworCV9fQVRUUihjb2xvcnMsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZm9ybWF0dGVkX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGZvcm1hdHRlZCwgU19JV1VHT3xTX0lSVUdPLCBtZXNzYWdlX3Nob3csIG1lc3NhZ2Vfc3RvcmUpOworCV9fQVRUUihmb3JtYXR0ZWQsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnVuY3Rpb25fbmFtZXNfYXR0cmlidXRlID0KLQlfX0FUVFIoZnVuY3Rpb25fbmFtZXMsIFNfSVdVR098U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKKwlfX0FUVFIoZnVuY3Rpb25fbmFtZXMsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2V5X25hbWVzX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGtleV9uYW1lcywgU19JV1VHT3xTX0lSVUdPLCBtZXNzYWdlX3Nob3csIG1lc3NhZ2Vfc3RvcmUpOworCV9fQVRUUihrZXlfbmFtZXMsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgc3RhdGVzX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHN0YXRlcywgU19JV1VHT3xTX0lSVUdPLCBtZXNzYWdlX3Nob3csIG1lc3NhZ2Vfc3RvcmUpOworCV9fQVRUUihzdGF0ZXMsIFNfSVdVU1J8U19JUlVHTywgbWVzc2FnZV9zaG93LCBtZXNzYWdlX3N0b3JlKTsKIAogLyoKICAqIENyZWF0ZSBncm91cHMgb2YgYXR0cmlidXRlcyBzbyB0aGF0IHdlIGNhbiBjcmVhdGUgYW5kIGRlc3Ryb3kgdGhlbSBhbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYWNudHBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2FjbnRwYy5jCmluZGV4IGU3ZGZhNDMuLjMxZjk1MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYWNudHBjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9hY250cGMuYwpAQCAtNjIsMjIgKzYyLDIyIEBACiAgKiBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYXBwZWFyIGluIC9zeXMvYWNjZXNzaWJpbGl0eS9zcGVha3VwL2FjbnRwYy4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0b25lX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHRvbmUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodG9uZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2xfYXR0cmlidXRlID0KLQlfX0FUVFIodm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvbCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRlbGF5X3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZGVsYXlfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkaXJlY3RfYXR0cmlidXRlID0KLQlfX0FUVFIoZGlyZWN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGRpcmVjdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmdWxsX3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZnVsbF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGppZmZ5X2RlbHRhX2F0dHJpYnV0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2FjbnRzYS5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9hY250c2EuYwppbmRleCBjN2YwMTRlLi4xZjM3NDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2FjbnRzYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYWNudHNhLmMKQEAgLTQ3LDIyICs0NywyMiBAQAogICogVGhlc2UgYXR0cmlidXRlcyB3aWxsIGFwcGVhciBpbiAvc3lzL2FjY2Vzc2liaWxpdHkvc3BlYWt1cC9hY250c2EuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdGFydF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdG9wX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RvcCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGl0Y2hfYXR0cmlidXRlID0KLQlfX0FUVFIocGl0Y2gsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocGl0Y2gsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcmF0ZV9hdHRyaWJ1dGUgPQotCV9fQVRUUihyYXRlLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHJhdGUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG9uZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih0b25lLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHRvbmUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdm9sX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHZvbCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2wsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkZWxheV90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGRlbGF5X3RpbWUsIFNfSVJVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGlyZWN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGRpcmVjdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihkaXJlY3QsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnVsbF90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGZ1bGxfdGltZSwgU19JUlVTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBqaWZmeV9kZWx0YV9hdHRyaWJ1dGUgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9hcG9sbG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYXBvbGxvLmMKaW5kZXggMzhjOGMyMjIuLjY3OGIyNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYXBvbGxvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9hcG9sbG8uYwpAQCAtNTMsMjQgKzUzLDI0IEBACiAgKiBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYXBwZWFyIGluIC9zeXMvYWNjZXNzaWJpbGl0eS9zcGVha3VwL2Fwb2xsby4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBsYW5nX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGxhbmcsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIobGFuZywgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2ljZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2ljZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2ljZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2xfYXR0cmlidXRlID0KLQlfX0FUVFIodm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvbCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRlbGF5X3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZGVsYXlfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkaXJlY3RfYXR0cmlidXRlID0KLQlfX0FUVFIoZGlyZWN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGRpcmVjdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmdWxsX3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZnVsbF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGppZmZ5X2RlbHRhX2F0dHJpYnV0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2F1ZHB0ci5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9hdWRwdHIuYwppbmRleCBkZTViNGE1Li4zNjJmOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2F1ZHB0ci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYXVkcHRyLmMKQEAgLTQ5LDI0ICs0OSwyNCBAQAogICogVGhlc2UgYXR0cmlidXRlcyB3aWxsIGFwcGVhciBpbiAvc3lzL2FjY2Vzc2liaWxpdHkvc3BlYWt1cC9hdWRwdHIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdGFydF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdG9wX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RvcCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGl0Y2hfYXR0cmlidXRlID0KLQlfX0FUVFIocGl0Y2gsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocGl0Y2gsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcHVuY3RfYXR0cmlidXRlID0KLQlfX0FUVFIocHVuY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocHVuY3QsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcmF0ZV9hdHRyaWJ1dGUgPQotCV9fQVRUUihyYXRlLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHJhdGUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG9uZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih0b25lLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHRvbmUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdm9sX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHZvbCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2wsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkZWxheV90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGRlbGF5X3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGlyZWN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGRpcmVjdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihkaXJlY3QsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnVsbF90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGZ1bGxfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBqaWZmeV9kZWx0YV9hdHRyaWJ1dGUgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9ibnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfYm5zLmMKaW5kZXggNDkzOWU4Yy4uMmYwNzAyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9ibnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2Jucy5jCkBAIC00NCwyMiArNDQsMjIgQEAKICAqIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBhcHBlYXIgaW4gL3N5cy9hY2Nlc3NpYmlsaXR5L3NwZWFrdXAvYm5zLgogICovCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RhcnRfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RvcF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHBpdGNoX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHBpdGNoLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHBpdGNoLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHJhdGVfYXR0cmlidXRlID0KLQlfX0FUVFIocmF0ZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihyYXRlLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHRvbmVfYXR0cmlidXRlID0KLQlfX0FUVFIodG9uZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih0b25lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHZvbF9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2wsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodm9sLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGVsYXlfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihkZWxheV90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRpcmVjdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihkaXJlY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZGlyZWN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZ1bGxfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihmdWxsX3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgamlmZnlfZGVsdGFfYXR0cmlidXRlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZGVjZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2RlY2V4dC5jCmluZGV4IGIxN2FmOTguLjY3YjdkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZGVjZXh0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kZWNleHQuYwpAQCAtNzAsMjQgKzcwLDI0IEBACiAgKiBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYXBwZWFyIGluIC9zeXMvYWNjZXNzaWJpbGl0eS9zcGVha3VwL2RlY2V4dC4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwdW5jdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwdW5jdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2ljZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2ljZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2ljZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2xfYXR0cmlidXRlID0KLQlfX0FUVFIodm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvbCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRlbGF5X3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZGVsYXlfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkaXJlY3RfYXR0cmlidXRlID0KLQlfX0FUVFIoZGlyZWN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGRpcmVjdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmdWxsX3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZnVsbF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGppZmZ5X2RlbHRhX2F0dHJpYnV0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2RlY3BjLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2RlY3BjLmMKaW5kZXggY2ZhNGJjMC4uNjc2NzhkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kZWNwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZGVjcGMuYwpAQCAtMTY0LDI0ICsxNjQsMjQgQEAKICAqIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBhcHBlYXIgaW4gL3N5cy9hY2Nlc3NpYmlsaXR5L3NwZWFrdXAvZGVjcGMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdGFydF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdG9wX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RvcCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGl0Y2hfYXR0cmlidXRlID0KLQlfX0FUVFIocGl0Y2gsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocGl0Y2gsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcHVuY3RfYXR0cmlidXRlID0KLQlfX0FUVFIocHVuY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocHVuY3QsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcmF0ZV9hdHRyaWJ1dGUgPQotCV9fQVRUUihyYXRlLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHJhdGUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdm9pY2VfYXR0cmlidXRlID0KLQlfX0FUVFIodm9pY2UsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodm9pY2UsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdm9sX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHZvbCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2wsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkZWxheV90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGRlbGF5X3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGlyZWN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGRpcmVjdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihkaXJlY3QsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnVsbF90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGZ1bGxfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBqaWZmeV9kZWx0YV9hdHRyaWJ1dGUgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kZWN0bGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZGVjdGxrLmMKaW5kZXggMWZjYWU1NS4uYWY4NDg2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kZWN0bGsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2RlY3Rsay5jCkBAIC03MCwyNCArNzAsMjQgQEAKICAqIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBhcHBlYXIgaW4gL3N5cy9hY2Nlc3NpYmlsaXR5L3NwZWFrdXAvZGVjdGxrLgogICovCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RhcnRfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RvcF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHBpdGNoX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHBpdGNoLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHBpdGNoLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHB1bmN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHB1bmN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHB1bmN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHJhdGVfYXR0cmlidXRlID0KLQlfX0FUVFIocmF0ZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihyYXRlLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHZvaWNlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHZvaWNlLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvaWNlLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHZvbF9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2wsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodm9sLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGVsYXlfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihkZWxheV90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRpcmVjdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihkaXJlY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZGlyZWN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZ1bGxfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihmdWxsX3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgamlmZnlfZGVsdGFfYXR0cmlidXRlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZHRsay5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmMKaW5kZXggNWM2YzM0MS4uOThkMWY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmMKQEAgLTY3LDI4ICs2NywyOCBAQAogICogVGhlc2UgYXR0cmlidXRlcyB3aWxsIGFwcGVhciBpbiAvc3lzL2FjY2Vzc2liaWxpdHkvc3BlYWt1cC9kdGxrLgogICovCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RhcnRfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RvcF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZyZXFfYXR0cmlidXRlID0KLQlfX0FUVFIoZnJlcSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihmcmVxLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHBpdGNoX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHBpdGNoLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHBpdGNoLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHB1bmN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHB1bmN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHB1bmN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHJhdGVfYXR0cmlidXRlID0KLQlfX0FUVFIocmF0ZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihyYXRlLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHRvbmVfYXR0cmlidXRlID0KLQlfX0FUVFIodG9uZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih0b25lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHZvaWNlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHZvaWNlLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvaWNlLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHZvbF9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2wsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodm9sLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGVsYXlfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihkZWxheV90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRpcmVjdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihkaXJlY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZGlyZWN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZ1bGxfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihmdWxsX3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgamlmZnlfZGVsdGFfYXR0cmlidXRlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZHVtbXkuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfZHVtbXkuYwppbmRleCBlMTllOTk5Li4zNjIzNDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2R1bW15LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kdW1teS5jCkBAIC00NiwyMiArNDYsMjIgQEAKICAqIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBhcHBlYXIgaW4gL3N5cy9hY2Nlc3NpYmlsaXR5L3NwZWFrdXAvZHVtbXkuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdGFydF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2Fwc19zdG9wX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RvcCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGl0Y2hfYXR0cmlidXRlID0KLQlfX0FUVFIocGl0Y2gsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocGl0Y2gsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcmF0ZV9hdHRyaWJ1dGUgPQotCV9fQVRUUihyYXRlLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHJhdGUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG9uZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih0b25lLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHRvbmUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdm9sX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHZvbCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2wsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkZWxheV90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGRlbGF5X3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGlyZWN0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGRpcmVjdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihkaXJlY3QsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnVsbF90aW1lX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGZ1bGxfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBqaWZmeV9kZWx0YV9hdHRyaWJ1dGUgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9rZXlwYy5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9rZXlwYy5jCmluZGV4IDljMjQ2ZDcuLjlkMzBjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfa2V5cGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2tleXBjLmMKQEAgLTU5LDE4ICs1OSwxOCBAQAogICogVGhlc2UgYXR0cmlidXRlcyB3aWxsIGFwcGVhciBpbiAvc3lzL2FjY2Vzc2liaWxpdHkvc3BlYWt1cC9rZXlwYy4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRlbGF5X3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZGVsYXlfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkaXJlY3RfYXR0cmlidXRlID0KLQlfX0FUVFIoZGlyZWN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGRpcmVjdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmdWxsX3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZnVsbF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGppZmZ5X2RlbHRhX2F0dHJpYnV0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2x0bGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfbHRsay5jCmluZGV4IGM5YmU2ZjUuLmQ2ZGU3MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfbHRsay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfbHRsay5jCkBAIC01MCwyOCArNTAsMjggQEAKICAqIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBhcHBlYXIgaW4gL3N5cy9hY2Nlc3NpYmlsaXR5L3NwZWFrdXAvbHRsay4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmcmVxX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGZyZXEsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZnJlcSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwdW5jdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwdW5jdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0b25lX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHRvbmUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodG9uZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2ljZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2ljZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2ljZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2xfYXR0cmlidXRlID0KLQlfX0FUVFIodm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvbCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRlbGF5X3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZGVsYXlfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkaXJlY3RfYXR0cmlidXRlID0KLQlfX0FUVFIoZGlyZWN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGRpcmVjdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmdWxsX3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZnVsbF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGppZmZ5X2RlbHRhX2F0dHJpYnV0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX3NvZnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfc29mdC5jCmluZGV4IGVlNjA4OTUuLjllZDcyNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfc29mdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfc29mdC5jCkBAIC02MSwzNSArNjEsMzUgQEAKICAqIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBhcHBlYXIgaW4gL3N5cy9hY2Nlc3NpYmlsaXR5L3NwZWFrdXAvc29mdC4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmcmVxX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGZyZXEsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZnJlcSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwdW5jdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwdW5jdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0b25lX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHRvbmUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodG9uZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2ljZV9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2ljZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih2b2ljZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2xfYXR0cmlidXRlID0KLQlfX0FUVFIodm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvbCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiAvKgogICogV2Ugc2hvdWxkIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24sIHdoZW4gd2UgYWdyZWUgb24gYQogICogbWV0aG9kIG9mIHBhc3NpbmcgYSBsYW5ndWFnZSBkZXNpZ25hdGlvbiB0byB0aGUgc29mdHdhcmUgc3ludGhlc2l6ZXIuCiAgKiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxhbmdfYXR0cmlidXRlID0KLSAqCV9fQVRUUihsYW5nLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisgKglfX0FUVFIobGFuZywgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogICovCiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGVsYXlfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihkZWxheV90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRpcmVjdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihkaXJlY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZGlyZWN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZ1bGxfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihmdWxsX3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgamlmZnlfZGVsdGFfYXR0cmlidXRlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfc3Brb3V0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX3Nwa291dC5jCmluZGV4IDcxMWNmMTEuLjc3ZjJkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfc3Brb3V0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9zcGtvdXQuYwpAQCAtNDgsMjQgKzQ4LDI0IEBACiAgKiBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYXBwZWFyIGluIC9zeXMvYWNjZXNzaWJpbGl0eS9zcGVha3VwL3Nwa291dC4KICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0YXJ0X2F0dHJpYnV0ZSA9Ci0JX19BVFRSKGNhcHNfc3RhcnQsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYXBzX3N0b3BfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGNhcHNfc3RvcCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaXRjaF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwaXRjaCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwaXRjaCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwdW5jdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihwdW5jdCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihwdW5jdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSByYXRlX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHJhdGUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIocmF0ZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0b25lX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHRvbmUsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodG9uZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2b2xfYXR0cmlidXRlID0KLQlfX0FUVFIodm9sLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHZvbCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRlbGF5X3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZGVsYXlfdGltZSwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkaXJlY3RfYXR0cmlidXRlID0KLQlfX0FUVFIoZGlyZWN0LCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKGRpcmVjdCwgU19JV1VTUnxTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmdWxsX3RpbWVfYXR0cmlidXRlID0KIAlfX0FUVFIoZnVsbF90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGppZmZ5X2RlbHRhX2F0dHJpYnV0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX3R4cHJ0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX3R4cHJ0LmMKaW5kZXggM2YwYmUwNC4uZGJlODRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF90eHBydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3NwZWFrdXBfdHhwcnQuYwpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgKiBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYXBwZWFyIGluIC9zeXMvYWNjZXNzaWJpbGl0eS9zcGVha3VwL3R4cHJ0LgogICovCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RhcnRfYXR0cmlidXRlID0KLQlfX0FUVFIoY2Fwc19zdGFydCwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihjYXBzX3N0YXJ0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhcHNfc3RvcF9hdHRyaWJ1dGUgPQotCV9fQVRUUihjYXBzX3N0b3AsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoY2Fwc19zdG9wLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHBpdGNoX2F0dHJpYnV0ZSA9Ci0JX19BVFRSKHBpdGNoLCBTX0lXVUdPfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CisJX19BVFRSKHBpdGNoLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHJhdGVfYXR0cmlidXRlID0KLQlfX0FUVFIocmF0ZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUihyYXRlLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHRvbmVfYXR0cmlidXRlID0KLQlfX0FUVFIodG9uZSwgU19JV1VHT3xTX0lSVUdPLCBzcGtfdmFyX3Nob3csIHNwa192YXJfc3RvcmUpOworCV9fQVRUUih0b25lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHZvbF9hdHRyaWJ1dGUgPQotCV9fQVRUUih2b2wsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIodm9sLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGVsYXlfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihkZWxheV90aW1lLCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRpcmVjdF9hdHRyaWJ1dGUgPQotCV9fQVRUUihkaXJlY3QsIFNfSVdVR098U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKKwlfX0FUVFIoZGlyZWN0LCBTX0lXVVNSfFNfSVJVR08sIHNwa192YXJfc2hvdywgc3BrX3Zhcl9zdG9yZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZ1bGxfdGltZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihmdWxsX3RpbWUsIFNfSVdVU1J8U19JUlVHTywgc3BrX3Zhcl9zaG93LCBzcGtfdmFyX3N0b3JlKTsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgamlmZnlfZGVsdGFfYXR0cmlidXRlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3N5bnRoLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zeW50aC5jCmluZGV4IDBiMzU0OWIuLjE3MmNmNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3N5bnRoLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3ludGguYwpAQCAtMjEyLDYgKzIxMiw5IEBACiAKIHZvaWQgc3BrX2RvX2ZsdXNoKHZvaWQpCiB7CisJaWYgKCFzeW50aCkKKwkJcmV0dXJuOworCiAJc3BlYWt1cF9pbmZvLmZsdXNoaW5nID0gMTsKIAlzeW50aF9idWZmZXJfY2xlYXIoKTsKIAlpZiAoc3ludGgtPmFsaXZlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9kc3AtY2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCmluZGV4IDJmMDg0ZTE4Li5hMWFjYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9kc3AtY2xvY2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9kc3AtY2xvY2suYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJY2FzZSBHUFRfQ0xLOgogCQlzdGF0dXMgPSBvbWFwX2RtX3RpbWVyX3N0YXJ0KHRpbWVyW2Nsa19pZCAtIDFdKTsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX09NQVBfTUNCU1AKKyNpZmRlZiBDT05GSUdfU05EX09NQVBfU09DX01DQlNQCiAJY2FzZSBNQ0JTUF9DTEs6CiAJCW9tYXBfbWNic3BfcmVxdWVzdChNQ0JTUF9JRChjbGtfaWQpKTsKIAkJb21hcDJfbWNic3Bfc2V0X2Nsa3Nfc3JjKE1DQlNQX0lEKGNsa19pZCksIE1DQlNQX0NMS1NfUEFEX1NSQyk7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAljYXNlIEdQVF9DTEs6CiAJCXN0YXR1cyA9IG9tYXBfZG1fdGltZXJfc3RvcCh0aW1lcltjbGtfaWQgLSAxXSk7CiAJCWJyZWFrOwotI2lmZGVmIENPTkZJR19PTUFQX01DQlNQCisjaWZkZWYgQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUAogCWNhc2UgTUNCU1BfQ0xLOgogCQlvbWFwMl9tY2JzcF9zZXRfY2xrc19zcmMoTUNCU1BfSUQoY2xrX2lkKSwgTUNCU1BfQ0xLU19QUkNNX1NSQyk7CiAJCW9tYXBfbWNic3BfZnJlZShNQ0JTUF9JRChjbGtfaWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY2hhbm5lbHMvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jaGFubmVscy9jaGFubmVsLmMKaW5kZXggZjY0NTI1OS4uNzIyM2ExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jaGFubmVscy9jaGFubmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jaGFubmVscy9jaGFubmVsLmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKy8qIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NoYW5uZWxzL2NoYW5zdHViLmMgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NoYW5uZWxzL2NoYW5zdHViLmMKaW5kZXggZjUwNGY0OS4uMWU3ZDZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jaGFubmVscy9jaGFuc3R1Yi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY2hhbm5lbHMvY2hhbnN0dWIuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDExICsyNSwxNCBAQAogCiAjaW5jbHVkZSAiY2hhbm5lbC5oIgogI2luY2x1ZGUgImNoYW5zdHViLmgiCisjaW5jbHVkZSAidGltc2ttb2R1dGlscy5oIgogI2luY2x1ZGUgInZlcnNpb24uaCIKIAogc3RhdGljIF9faW5pdCBpbnQKIGNoYW5uZWxfbW9kX2luaXQodm9pZCkKIHsKKwlpZiAoIXVuaXN5c19zcGFyX3BsYXRmb3JtKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jaGFubmVscy9jaGFuc3R1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jaGFubmVscy9jaGFuc3R1Yi5oCmluZGV4IDhkNzI3ZGUuLmJkZWU1ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY2hhbm5lbHMvY2hhbnN0dWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NoYW5uZWxzL2NoYW5zdHViLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKy8qIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvY2hhbm5lbC5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2NoYW5uZWwuaAppbmRleCBhZWUyMDQxLi5kMTk3MTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvY2hhbm5lbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9jaGFubmVsLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKy8qIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNiw2ICsxNiw4IEBACiAjaWZuZGVmIF9fQ0hBTk5FTF9IX18KICNkZWZpbmUgX19DSEFOTkVMX0hfXwogCisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgorCiAvKgogKiBXaGVuZXZlciB0aGlzIGZpbGUgaXMgY2hhbmdlZCBhIGNvcnJlc3BvbmRpbmcgY2hhbmdlIG11c3QgYmUgbWFkZSBpbgogKiB0aGUgQ29uc29sZS9TZXJ2aWNlUGFydC92aXNvcmRpYWdfZWFybHkvc3VwZXJ2aXNvcl9jaGFubmVsLmggZmlsZQpAQCAtMjQsNyArMjYsNyBAQAogKi8KIAogLyogZGVmaW5lIHRoZSBmb2xsb3dpbmcgdG8gcHJldmVudCBpbmNsdWRlIG5lc3RpbmcgaW4ga2VybmVsIGhlYWRlcgotICogZmlsZXMgb2Ygc2ltaWxhciBhYnJldmlhdGVkIGNvbnRlbnQKKyAqIGZpbGVzIG9mIHNpbWlsYXIgYWJicmV2aWF0ZWQgY29udGVudAogICovCiAjZGVmaW5lIF9fU1VQRVJWSVNPUl9DSEFOTkVMX0hfXwogCkBAIC00NiwxOSArNDgsNiBAQAogI2RlZmluZSBDT1ZFUih2LCBkKSAgICgoZCkqQ09WRVJRKHYsIGQpKQogI2VuZGlmCiAKLSNpZm5kZWYgR1VJRDAKLSNkZWZpbmUgR1VJRDAgezAsIDAsIDAsIHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9Ci0jZW5kaWYKLQotLyogIFRoZSBDIGxhbmd1YWdlIGlzIGluY29uc2lzdGVudCB3aXRoIHJlc3BlY3QgdG8gd2hlcmUgaXQgYWxsb3dzIGxpdGVyYWwKLSAqICBjb25zdGFudHMsIGVzcGVjaWFsbHkgbGl0ZXJhbCBjb25zdGFudCBzdHJ1Y3RzLiAgTGl0ZXJhbCBjb25zdGFudCBzdHJ1Y3RzCi0gKiAgYXJlIGFsbG93ZWQgZm9yIGluaXRpYWxpemF0aW9uIG9ubHksIHdoZXJlYXMgb3RoZXIgdHlwZXMgb2YgbGl0ZXJhbAotICogIGNvbnN0YW50cyBhcmUgYWxsb3dlZCBhbnl3aGVyZS4gIFdlIGdldCBhcm91bmQgdGhpcyBpbmNvbnNpc3RlbmN5IGJ5Ci0gKiAgZGVjbGFyaW5nIGEgInN0YXRpYyBjb25zdCIgdmFyaWFibGUgZm9yIGVhY2ggR1VJRC4gIFRoaXMgdmFyaWFibGUgY2FuIGJlCi0gKiAgdXNlZCBpbiBleHByZXNzaW9ucyB3aGVyZSB0aGUgbGl0ZXJhbCBjb25zdGFudCB3b3VsZCBub3QgYmUgYWxsb3dlZC4KLSAqLwotc3RhdGljIGNvbnN0IEdVSUQgR3VpZDAgPSBHVUlEMDsKLQogI2RlZmluZSBVTFRSQV9DSEFOTkVMX1BST1RPQ09MX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyKCdFJywgJ0MnLCAnTicsICdMJykKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTIyNiwxMyArMjE1LDEzIEBACiAJVTMyIEhlYWRlclNpemU7CQkvKiBzaXplb2YoQ0hBTk5FTF9IRUFERVIpICovCiAJVTY0IFNpemU7CQkvKiBUb3RhbCBzaXplIG9mIHRoaXMgY2hhbm5lbCBpbiBieXRlcyAqLwogCVU2NCBGZWF0dXJlczsJCS8qIEZsYWdzIHRvIG1vZGlmeSBiZWhhdmlvciAqLwotCUdVSUQgVHlwZTsJCS8qIENoYW5uZWwgdHlwZTogZGF0YSwgYnVzLCBjb250cm9sLCBldGMuICovCisJdXVpZF9sZSBUeXBlOwkJLyogQ2hhbm5lbCB0eXBlOiBkYXRhLCBidXMsIGNvbnRyb2wsIGV0Yy4gKi8KIAlVNjQgUGFydGl0aW9uSGFuZGxlOwkvKiBJRCBvZiBndWVzdCBwYXJ0aXRpb24gKi8KIAlVNjQgSGFuZGxlOwkJLyogRGV2aWNlIG51bWJlciBvZiB0aGlzIGNoYW5uZWwgaW4gY2xpZW50ICovCiAJVTY0IG9DaGFubmVsU3BhY2U7CS8qIE9mZnNldCBpbiBieXRlcyB0byBjaGFubmVsIHNwZWNpZmljIGFyZWEgKi8KIAlVMzIgVmVyc2lvbklkOwkJLyogQ0hBTk5FTF9IRUFERVIgVmVyc2lvbiBJRCAqLwogCVUzMiBQYXJ0aXRpb25JbmRleDsJLyogSW5kZXggb2YgZ3Vlc3QgcGFydGl0aW9uICovCi0JR1VJRCBab25lR3VpZDsJCS8qIEd1aWQgb2YgQ2hhbm5lbCdzIHpvbmUgKi8KKwl1dWlkX2xlIFpvbmVHdWlkOwkJLyogR3VpZCBvZiBDaGFubmVsJ3Mgem9uZSAqLwogCVUzMiBvQ2xpZW50U3RyaW5nOwkvKiBvZmZzZXQgZnJvbSBjaGFubmVsIGhlYWRlciB0bwogCQkJCSAqIG51bC10ZXJtaW5hdGVkIENsaWVudFN0cmluZyAoMCBpZgogCQkJCSAqIENsaWVudFN0cmluZyBub3QgcHJlc2VudCkgKi8KQEAgLTMyMCwxNyArMzA5LDE3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBVTFRSQV9jaGVja19jaGFubmVsX2NsaWVudCh2b2lkIF9faW9tZW0gKnBDaGFubmVsLAotCQkJICAgR1VJRCBleHBlY3RlZFR5cGVHdWlkLAorCQkJICAgdXVpZF9sZSBleHBlY3RlZFR5cGVHdWlkLAogCQkJICAgY2hhciAqY2hhbm5lbE5hbWUsCiAJCQkgICBVNjQgZXhwZWN0ZWRNaW5CeXRlcywKIAkJCSAgIFUzMiBleHBlY3RlZFZlcnNpb25JZCwKIAkJCSAgIFU2NCBleHBlY3RlZFNpZ25hdHVyZSwKIAkJCSAgIGNoYXIgKmZpbGVOYW1lLCBpbnQgbGluZU51bWJlciwgdm9pZCAqbG9nQ3R4KQogewotCWlmIChNRU1DTVAoJmV4cGVjdGVkVHlwZUd1aWQsICZHdWlkMCwgc2l6ZW9mKEdVSUQpKSAhPSAwKQorCWlmICh1dWlkX2xlX2NtcChleHBlY3RlZFR5cGVHdWlkLCBOVUxMX1VVSURfTEUpICE9IDApCiAJCS8qIGNhbGxlciB3YW50cyB1cyB0byB2ZXJpZnkgdHlwZSBHVUlEICovCiAJCWlmIChNRU1DTVBfSU8oJigoKENIQU5ORUxfSEVBREVSIF9faW9tZW0gKikgKHBDaGFubmVsKSktPlR5cGUpLAotCQkJICAgJmV4cGVjdGVkVHlwZUd1aWQsIHNpemVvZihHVUlEKSkgIT0gMCkgeworCQkJICAgJmV4cGVjdGVkVHlwZUd1aWQsIHNpemVvZih1dWlkX2xlKSkgIT0gMCkgewogCQkJQ0hBTk5FTF9HVUlEX01JU01BVENIKGV4cGVjdGVkVHlwZUd1aWQsIGNoYW5uZWxOYW1lLAogCQkJCQkgICAgICAidHlwZSIsIGV4cGVjdGVkVHlwZUd1aWQsCiAJCQkJCSAgICAgICgoQ0hBTk5FTF9IRUFERVIgX19pb21lbSAqKQpAQCAtMzQ0LDggKzMzMyw5IEBACiAJCQkgICAocENoYW5uZWwpKS0+U2l6ZSkgPCBleHBlY3RlZE1pbkJ5dGVzKSB7CiAJCQlDSEFOTkVMX1U2NF9NSVNNQVRDSChleHBlY3RlZFR5cGVHdWlkLCBjaGFubmVsTmFtZSwKIAkJCQkJICAgICAic2l6ZSIsIGV4cGVjdGVkTWluQnl0ZXMsCi0JCQkJCSAgICAgKChDSEFOTkVMX0hFQURFUiBfX2lvbWVtICopCi0JCQkJCSAgICAgIChwQ2hhbm5lbCkpLT5TaXplLCBmaWxlTmFtZSwKKwkJCQkJICAgICByZWFkcSgmKChDSEFOTkVMX0hFQURFUiBfX2lvbWVtICopCisJCQkJCQkgICAgIChwQ2hhbm5lbCkpLT5TaXplKSwKKwkJCQkJICAgICBmaWxlTmFtZSwKIAkJCQkJICAgICBsaW5lTnVtYmVyLCBsb2dDdHgpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTM1NSw5ICszNDUsOSBAQAogCQkgICAgIT0gZXhwZWN0ZWRWZXJzaW9uSWQpIHsKIAkJCUNIQU5ORUxfVTMyX01JU01BVENIKGV4cGVjdGVkVHlwZUd1aWQsIGNoYW5uZWxOYW1lLAogCQkJCQkgICAgICJ2ZXJzaW9uIiwgZXhwZWN0ZWRWZXJzaW9uSWQsCi0JCQkJCSAgICAgKChDSEFOTkVMX0hFQURFUiBfX2lvbWVtICopCi0JCQkJCSAgICAgIChwQ2hhbm5lbCkpLT5WZXJzaW9uSWQsIGZpbGVOYW1lLAotCQkJCQkgICAgIGxpbmVOdW1iZXIsIGxvZ0N0eCk7CisJCQkJCSAgICAgcmVhZGwoJigoQ0hBTk5FTF9IRUFERVIgX19pb21lbSAqKQorCQkJCQkJICAgICAocENoYW5uZWwpKS0+VmVyc2lvbklkKSwKKwkJCQkJICAgICBmaWxlTmFtZSwgbGluZU51bWJlciwgbG9nQ3R4KTsKIAkJCXJldHVybiAwOwogCQl9CiAJaWYgKGV4cGVjdGVkU2lnbmF0dXJlID4gMCkJLyogY2FsbGVyIHdhbnRzIHVzIHRvIHZlcmlmeQpAQCAtMzY2LDggKzM1Niw5IEBACiAJCSAgICAhPSBleHBlY3RlZFNpZ25hdHVyZSkgewogCQkJQ0hBTk5FTF9VNjRfTUlTTUFUQ0goZXhwZWN0ZWRUeXBlR3VpZCwgY2hhbm5lbE5hbWUsCiAJCQkJCSAgICAgInNpZ25hdHVyZSIsIGV4cGVjdGVkU2lnbmF0dXJlLAotCQkJCQkgICAgICgoQ0hBTk5FTF9IRUFERVIgX19pb21lbSAqKQotCQkJCQkgICAgICAocENoYW5uZWwpKS0+U2lnbmF0dXJlLCBmaWxlTmFtZSwKKwkJCQkJICAgICByZWFkcSgmKChDSEFOTkVMX0hFQURFUiBfX2lvbWVtICopCisJCQkJCQkgICAgIChwQ2hhbm5lbCkpLT5TaWduYXR1cmUpLAorCQkJCQkgICAgIGZpbGVOYW1lLAogCQkJCQkgICAgIGxpbmVOdW1iZXIsIGxvZ0N0eCk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMzgwLDcgKzM3MSw3IEBACiAgKiBpcyB1c2VkIHRvIHBhc3MgdGhlIEVGSV9ESUFHX0NBUFRVUkVfUFJPVE9DT0wgbmVlZGVkIHRvIGxvZyBtZXNzYWdlcy4KICAqLwogc3RhdGljIGlubGluZSBpbnQKLVVMVFJBX2NoZWNrX2NoYW5uZWxfc2VydmVyKEdVSUQgdHlwZUd1aWQsCitVTFRSQV9jaGVja19jaGFubmVsX3NlcnZlcih1dWlkX2xlIHR5cGVHdWlkLAogCQkJICAgY2hhciAqY2hhbm5lbE5hbWUsCiAJCQkgICBVNjQgZXhwZWN0ZWRNaW5CeXRlcywKIAkJCSAgIFU2NCBhY3R1YWxCeXRlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9jaGFubmVsX2d1aWQuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9jaGFubmVsX2d1aWQuaAppbmRleCBhZTBkYzJiLi42M2M2N2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvY2hhbm5lbF9ndWlkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2NoYW5uZWxfZ3VpZC5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjEsNDQgKzIxLDQ0IEBACiAgKiB7NDE0ODE1ZWQtYzU4Yy0xMWRhLTk1YTktMDBlMDgxNjExNjVmfQogICovCiAjZGVmaW5lIFVMVFJBX1ZIQkFfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEIFwKLQl7IDB4NDE0ODE1ZWQsIDB4YzU4YywgMHgxMWRhLCBcCi0JCXsgMHg5NSwgMHhhOSwgMHgwLCAweGUwLCAweDgxLCAweDYxLCAweDE2LCAweDVmIH0gfQotc3RhdGljIGNvbnN0IEdVSUQgVWx0cmFWaGJhQ2hhbm5lbFByb3RvY29sR3VpZCA9CisJCVVVSURfTEUoMHg0MTQ4MTVlZCwgMHhjNThjLCAweDExZGEsIFwKKwkJCQkweDk1LCAweGE5LCAweDAsIDB4ZTAsIDB4ODEsIDB4NjEsIDB4MTYsIDB4NWYpCitzdGF0aWMgY29uc3QgdXVpZF9sZSBVbHRyYVZoYmFDaGFubmVsUHJvdG9jb2xHdWlkID0KIAlVTFRSQV9WSEJBX0NIQU5ORUxfUFJPVE9DT0xfR1VJRDsKIAogLyogVXNlZCBpbiBJT0NoYW5uZWwKICAqIHs4Y2Q1OTk0ZC1jNThlLTExZGEtOTVhOS0wMGUwODE2MTE2NWZ9CiAgKi8KICNkZWZpbmUgVUxUUkFfVk5JQ19DSEFOTkVMX1BST1RPQ09MX0dVSUQgXAotCXsgMHg4Y2Q1OTk0ZCwgMHhjNThlLCAweDExZGEsIFwKLQkJeyAweDk1LCAweGE5LCAweDAsIDB4ZTAsIDB4ODEsIDB4NjEsIDB4MTYsIDB4NWYgfSB9Ci1zdGF0aWMgY29uc3QgR1VJRCBVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkID0KKwkJVVVJRF9MRSgweDhjZDU5OTRkLCAweGM1OGUsIDB4MTFkYSwgXAorCQkJCTB4OTUsIDB4YTksIDB4MCwgMHhlMCwgMHg4MSwgMHg2MSwgMHgxNiwgMHg1ZikKK3N0YXRpYyBjb25zdCB1dWlkX2xlIFVsdHJhVm5pY0NoYW5uZWxQcm90b2NvbEd1aWQgPQogCVVMVFJBX1ZOSUNfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEOwogCiAvKiBVc2VkIGluIElPQ2hhbm5lbAogICogezcyMTIwMDA4LTRBQUItMTFEQy04NTMwLTQ0NDU1MzU0NDIwMH0KICAqLwogI2RlZmluZSBVTFRSQV9TSU9WTV9HVUlEIFwKLQl7IDB4NzIxMjAwMDgsIDB4NEFBQiwgMHgxMURDLAkJCQkJXAotCQl7IDB4ODUsIDB4MzAsIDB4NDQsIDB4NDUsIDB4NTMsIDB4NTQsIDB4NDIsIDB4MDAgfSB9Ci1zdGF0aWMgY29uc3QgR1VJRCBVbHRyYVNJT1ZNR3VpZCA9IFVMVFJBX1NJT1ZNX0dVSUQ7CisJCVVVSURfTEUoMHg3MjEyMDAwOCwgMHg0QUFCLCAweDExREMsIFwKKwkJCQkweDg1LCAweDMwLCAweDQ0LCAweDQ1LCAweDUzLCAweDU0LCAweDQyLCAweDAwKQorc3RhdGljIGNvbnN0IHV1aWRfbGUgVWx0cmFTSU9WTUd1aWQgPSBVTFRSQV9TSU9WTV9HVUlEOwogCiAKIC8qIFVzZWQgaW4gdmlzb3Jub29wL3Zpc29ybm9vcF9tYWluLmMKICAqIHs1YjUyYzVhYy1lNWY1LTRkNDItOGRmZi00MjllYWVjZDIyMWZ9CiAgKi8KICNkZWZpbmUgVUxUUkFfQ09OVFJPTERJUkVDVE9SX0NIQU5ORUxfUFJPVE9DT0xfR1VJRCAgXAotCXsgMHg1YjUyYzVhYywgMHhlNWY1LCAweDRkNDIsIFwKLQkJeyAweDhkLCAweGZmLCAweDQyLCAweDllLCAweGFlLCAweGNkLCAweDIyLCAweDFmIH0gfQorCQlVVUlEX0xFKDB4NWI1MmM1YWMsIDB4ZTVmNSwgMHg0ZDQyLCBcCisJCQkJMHg4ZCwgMHhmZiwgMHg0MiwgMHg5ZSwgMHhhZSwgMHhjZCwgMHgyMiwgMHgxZikKIAotc3RhdGljIGNvbnN0IEdVSUQgVWx0cmFDb250cm9sRGlyZWN0b3JDaGFubmVsUHJvdG9jb2xHdWlkID0KK3N0YXRpYyBjb25zdCB1dWlkX2xlIFVsdHJhQ29udHJvbERpcmVjdG9yQ2hhbm5lbFByb3RvY29sR3VpZCA9CiAJVUxUUkFfQ09OVFJPTERJUkVDVE9SX0NIQU5ORUxfUFJPVE9DT0xfR1VJRDsKIAogLyogVXNlZCBpbiB2aXNvcmNoaXBzZXQvdmlzb3JjaGlwc2V0X21haW4uYwogICoge0I0RTc5NjI1LUFFREUtNEVBQS05RTExLUQzRUREQ0Q0NTA0Q30KICAqLwogI2RlZmluZSBVTFRSQV9ESUFHX1BPT0xfQ0hBTk5FTF9QUk9UT0NPTF9HVUlECQkJCVwKLQl7MHhiNGU3OTYyNSwgMHhhZWRlLCAweDRlYWEsCQkJCQlcCi0JCXsgMHg5ZSwgMHgxMSwgMHhkMywgMHhlZCwgMHhkYywgMHhkNCwgMHg1MCwgMHg0YyB9IH0KKwkJVVVJRF9MRSgweGI0ZTc5NjI1LCAweGFlZGUsIDB4NGVhYSwgXAorCQkJCTB4OWUsIDB4MTEsIDB4ZDMsIDB4ZWQsIDB4ZGMsIDB4ZDQsIDB4NTAsIDB4NGMpCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2NvbnRyb2xmcmFtZXdvcmsuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9jb250cm9sZnJhbWV3b3JrLmgKaW5kZXggNTEyNjQzMy4uMWExYzUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2NvbnRyb2xmcmFtZXdvcmsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvY29udHJvbGZyYW1ld29yay5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IMKpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9jb250cm9sdm1jaGFubmVsLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvY29udHJvbHZtY2hhbm5lbC5oCmluZGV4IDQ3ZjFjNGYuLmQ4YjEyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9jb250cm9sdm1jaGFubmVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2NvbnRyb2x2bWNoYW5uZWwuaApAQCAtMSw0ICsxLDQgQEAKLS8qIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE2LDYgKzE2LDcgQEAKICNpZm5kZWYgX19DT05UUk9MVk1DSEFOTkVMX0hfXwogI2RlZmluZSBfX0NPTlRST0xWTUNIQU5ORUxfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAjaW5jbHVkZSAiY29tbW9udHlwZXMuaCIKICNpbmNsdWRlICJjaGFubmVsLmgiCiAjaW5jbHVkZSAiY29udHJvbGZyYW1ld29yay5oIgpAQCAtMjUsMTAgKzI2LDEwIEBACiAKIC8qIHsyQjNDMkQxMC03RUY1LTRhZDgtQjk2Ni0zNDQ4QjczODZCM0R9ICovCiAjZGVmaW5lIFVMVFJBX0NPTlRST0xWTV9DSEFOTkVMX1BST1RPQ09MX0dVSUQJXAotCXsweDJiM2MyZDEwLCAweDdlZjUsIDB4NGFkOCwgXAotCQl7MHhiOSwgMHg2NiwgMHgzNCwgMHg0OCwgMHhiNywgMHgzOCwgMHg2YiwgMHgzZH0gfQorCQlVVUlEX0xFKDB4MmIzYzJkMTAsIDB4N2VmNSwgMHg0YWQ4LCBcCisJCQkJMHhiOSwgMHg2NiwgMHgzNCwgMHg0OCwgMHhiNywgMHgzOCwgMHg2YiwgMHgzZCkKIAotc3RhdGljIGNvbnN0IEdVSUQgVWx0cmFDb250cm9sdm1DaGFubmVsUHJvdG9jb2xHdWlkID0KK3N0YXRpYyBjb25zdCB1dWlkX2xlIFVsdHJhQ29udHJvbHZtQ2hhbm5lbFByb3RvY29sR3VpZCA9CiAJVUxUUkFfQ09OVFJPTFZNX0NIQU5ORUxfUFJPVE9DT0xfR1VJRDsKIAogI2RlZmluZSBVTFRSQV9DT05UUk9MVk1fQ0hBTk5FTF9QUk9UT0NPTF9TSUdOQVRVUkUgXApAQCAtMjkzLDggKzI5NCw4IEBACiAJCQkqICAgY2FuIGJlIGRlcmVmZXJlbmNlZCBieSB0aGUgcmVjZWl2ZXIKIAkJCSogICBvZiB0aGlzIENvbnRyb2xWbSBjb21tYW5kICovCiAJVTY0IGNoYW5uZWxCeXRlczsgLyoqPCBzcGVjaWZpZXMgc2l6ZSBvZiB0aGUgY2hhbm5lbCBpbiBieXRlcyAqLwotCUdVSUQgZGF0YVR5cGVHdWlkOy8qKjwgc3BlY2lmaWVzIGZvcm1hdCBvZiBkYXRhIGluIGNoYW5uZWwgKi8KLQlHVUlEIGRldkluc3RHdWlkOyAvKio8IGluc3RhbmNlIGd1aWQgZm9yIHRoZSBkZXZpY2UgKi8KKwl1dWlkX2xlIGRhdGFUeXBlR3VpZDsvKio8IHNwZWNpZmllcyBmb3JtYXQgb2YgZGF0YSBpbiBjaGFubmVsICovCisJdXVpZF9sZSBkZXZJbnN0R3VpZDsgLyoqPCBpbnN0YW5jZSBndWlkIGZvciB0aGUgZGV2aWNlICovCiAJc3RydWN0IEludGVycnVwdEluZm8gaW50cjsgLyoqPCBzcGVjaWZpZXMgaW50ZXJydXB0IGluZm9ybWF0aW9uICovCiB9IENPTlRST0xWTV9QQUNLRVRfREVWSUNFX0NSRUFURTsJLyogZm9yIENPTlRST0xWTV9ERVZJQ0VfQ1JFQVRFICovCiAKQEAgLTMzMyw5ICszMzQsOSBAQAogCQkJCQkgICAgICAqICAgZGVyZWZlcmVuY2VkIGJ5IHRoZSByZWNlaXZlcgogCQkJCQkgICAgICAqICAgb2YgdGhpcyBDb250cm9sVm0gY29tbWFuZCAqLwogCQkJVTY0IGNoYW5uZWxCeXRlczsgICAgLyo8IHNpemUgb2YgdGhlIGNoYW5uZWwgaW4gYnl0ZXMgKi8KLQkJCUdVSUQgYnVzRGF0YVR5cGVHdWlkOy8qPCBpbmRpY2F0ZXMgZm9ybWF0IG9mIGRhdGEgaW4gYnVzCi0JCQkJCSAgICAgICogY2hhbm5lbCAqLwotCQkJR1VJRCBidXNJbnN0R3VpZDsgICAgLyo8IGluc3RhbmNlIGd1aWQgZm9yIHRoZSBidXMgKi8KKwkJCXV1aWRfbGUgYnVzRGF0YVR5cGVHdWlkOy8qPCBpbmRpY2F0ZXMgZm9ybWF0IG9mIGRhdGEgaW4KKwkJCQkJCSAgICBidXMgY2hhbm5lbCAqLworCQkJdXVpZF9sZSBidXNJbnN0R3VpZDsgICAgLyo8IGluc3RhbmNlIGd1aWQgZm9yIHRoZSBidXMgKi8KIAkJfSBjcmVhdGVCdXM7CS8qIGZvciBDT05UUk9MVk1fQlVTX0NSRUFURSAqLwogCQlzdHJ1Y3QgIHsKIAkJCVUzMiBidXNObzsJICAgICAgLyo8IGJ1cyAjICgwLi5uLTEpIGZyb20gdGhlIG1zZwpAQCAtNjExLDcgKzYxMiw3IEBACiAJVTMyIENsaWVudExlbmd0aDsKIAlVMzIgTmFtZU9mZnNldDsKIAlVMzIgTmFtZUxlbmd0aDsKLQlHVUlEIElkOworCXV1aWRfbGUgSWQ7CiAJVTMyIFJldmlzaW9uOwogCVUzMiBSZXNlcnZlZDsJCS8qIE5hdHVyYWwgYWxpZ25tZW50ICovCiB9IFVMVFJBX0NPTlRST0xWTV9QQVJBTUVURVJTX0hFQURFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9kaWFnY2hhbm5lbC5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2RpYWdjaGFubmVsLmgKaW5kZXggYzkzNTE1ZS4uMWJlYTJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2RpYWdjaGFubmVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2RpYWdjaGFubmVsLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKy8qIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zOCwxNiArMzgsMTYgQEAKIAogLyoge0VFQTdBNTczLURCODItNDQ3Yy04NzE2LUVGQkVBQUFFNDg1OH0gKi8KICNkZWZpbmUgVUxUUkFfRElBR19DSEFOTkVMX1BST1RPQ09MX0dVSUQgXAotCXsweGVlYTdhNTczLCAweGRiODIsIDB4NDQ3YywgXAotCQl7MHg4NywgMHgxNiwgMHhlZiwgMHhiZSwgMHhhYSwgMHhhZSwgMHg0OCwgMHg1OH0gfQorCQlVVUlEX0xFKDB4ZWVhN2E1NzMsIDB4ZGI4MiwgMHg0NDdjLCBcCisJCQkJMHg4NywgMHgxNiwgMHhlZiwgMHhiZSwgMHhhYSwgMHhhZSwgMHg0OCwgMHg1OCkKIAotc3RhdGljIGNvbnN0IEdVSUQgVWx0cmFEaWFnQ2hhbm5lbFByb3RvY29sR3VpZCA9CitzdGF0aWMgY29uc3QgdXVpZF9sZSBVbHRyYURpYWdDaGFubmVsUHJvdG9jb2xHdWlkID0KIAlVTFRSQV9ESUFHX0NIQU5ORUxfUFJPVE9DT0xfR1VJRDsKIAogLyoge0U4NTBGOTY4LTMyNjMtNDQ4NC04Q0E1LTJBMzVEMDg3QTVBOH0gKi8KICNkZWZpbmUgVUxUUkFfRElBR19ST09UX0NIQU5ORUxfUFJPVE9DT0xfR1VJRCBcCi0JezB4ZTg1MGY5NjgsIDB4MzI2MywgMHg0NDg0LCBcCi0JCXsweDhjLCAweGE1LCAweDJhLCAweDM1LCAweGQwLCAweDg3LCAweGE1LCAweGE4fSB9CisJCVVVSURfTEUoMHhlODUwZjk2OCwgMHgzMjYzLCAweDQ0ODQsIFwKKwkJCQkweDhjLCAweGE1LCAweDJhLCAweDM1LCAweGQwLCAweDg3LCAweGE1LCAweGE4KQogCiAjZGVmaW5lIFVMVFJBX0RJQUdfQ0hBTk5FTF9QUk9UT0NPTF9TSUdOQVRVUkUgIFVMVFJBX0NIQU5ORUxfUFJPVE9DT0xfU0lHTkFUVVJFCiAKQEAgLTM1Niw3ICszNTYsNyBAQAogICpJc0NoYW5uZWxJbml0aWFsaXplZDogMSBpZmYgU2lnbmFsSW5pdCB3YXMgY2FsbGVkIGZvciB0aGlzIGNoYW5uZWw7IG90aGVyd2lzZQogICoJCQkwLCBhbmQgYXNzdW1lIHRoZSBjaGFubmVsIGlzIG5vdCByZWFkeSBmb3IgdXNlIHlldC4KICAqCi0gKiBSZXNlcnZlZDogUGFkZGluZyB0byBhbGxpZ24gdGhlIGZpZWxkcyBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqIFJlc2VydmVkOiBQYWRkaW5nIHRvIGFsaWduIHRoZSBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3R1cmUuCiAgKgogICpTdWJzeXN0ZW1TZXZlcml0eUZpbHRlcjogTGV2ZWwgb2Ygc2V2ZXJpdHkgb24gYSBzdWJzeXN0ZW0gYmFzaXMgdGhhdCBjb250cm9scwogICoJCQl3aGV0aGVyIGV2ZW50cyBhcmUgbG9nZ2VkLiAgQW55IGV2ZW50J3Mgc2V2ZXJpdHkgZm9yIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9pb2NoYW5uZWwuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jaGFubmVscy9pb2NoYW5uZWwuaAppbmRleCA4ZGUxZDI0Li42ZGNmYTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvaW9jaGFubmVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL2lvY2hhbm5lbC5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OICovCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTiAqLwogLyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KICNpZm5kZWYgX19JT0NIQU5ORUxfSF9fCiAjZGVmaW5lIF9fSU9DSEFOTkVMX0hfXwpAQCAtMjksNiArMjksOCBAQAogKiAgICAgICAgQ0hBTk5FTF9BVFRBQ0hFRCAtPiBDSEFOTkVMX09QRU5FRCAocGVyZm9ybWVkIG9ubHkgYnkgR3Vlc3RQYXJ0KQogKi8KIAorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KKwogI2luY2x1ZGUgImNvbW1vbnR5cGVzLmgiCiAjaW5jbHVkZSAidm1jYWxsaW50ZXJmYWNlLmgiCiAKQEAgLTE5Miw3ICsxOTQsNyBAQAogCS8qIHVpc25pYyAtPiB2aXJ0bmljICovCiAJTkVUX01BQ0FERFIsCQkvKiBpbmRpY2F0ZXMgdGhlIGNsaWVudCBoYXMgcmVxdWVzdGVkIHRvIHVwZGF0ZQogCQkJCSAqIGl0cyBNQUMgYWRkciAqLwotCU5FVF9NQUNBRERSX0FDSywJLyogTWFjIGFkZHJlcyAgKi8KKwlORVRfTUFDQUREUl9BQ0ssCS8qIE1BQyBhZGRyZXNzICAqLwogCiB9IE5FVF9UWVBFUzsKIApAQCAtNjk2LDcgKzY5OCw3IEBACiAJCQlVOCBtYWNhZGRyW01BWF9NQUNBRERSX0xFTl07CS8qIDYgYnl0ZXMgKi8KIAkJCVUzMiBudW1fcmN2X2J1ZnM7CS8qIDQgKi8KIAkJCVUzMiBtdHU7CS8qIDQgKi8KLQkJCUdVSUQgem9uZUd1aWQ7CS8qIDE2ICovCisJCQl1dWlkX2xlIHpvbmVHdWlkOwkvKiAxNiAqLwogCQl9IHZuaWM7CQkvKiB0b3RhbCAgICAgMzAgKi8KIAl9OwogCkBAIC04MDcsNyArODA5LDcgQEAKIAl4LT5DaGFubmVsSGVhZGVyLkhlYWRlclNpemUgPSBzaXplb2YoeC0+Q2hhbm5lbEhlYWRlcik7CiAJeC0+Q2hhbm5lbEhlYWRlci5TaXplID0gQ09WRVIoYnl0ZXMsIDQwOTYpOwogCXgtPkNoYW5uZWxIZWFkZXIuVHlwZSA9IFVsdHJhVmhiYUNoYW5uZWxQcm90b2NvbEd1aWQ7Ci0JeC0+Q2hhbm5lbEhlYWRlci5ab25lR3VpZCA9IEd1aWQwOworCXgtPkNoYW5uZWxIZWFkZXIuWm9uZUd1aWQgPSBOVUxMX1VVSURfTEU7CiAJeC0+dmhiYS53d25uID0gKnd3bm47CiAJeC0+dmhiYS5tYXggPSAqbWF4OwogCUlOSVRfQ0xJRU5UU1RSSU5HKHgsIFVMVFJBX0lPX0NIQU5ORUxfUFJPVE9DT0wsIGNsaWVudFN0ciwKQEAgLTgzMiw3ICs4MzQsNyBAQAogc3RhdGljIGlubGluZSBpbnQgVUxUUkFfVk5JQ19pbml0X2NoYW5uZWwoVUxUUkFfSU9fQ0hBTk5FTF9QUk9UT0NPTCAqeCwKIAkJCQkJCSB1bnNpZ25lZCBjaGFyICptYWNhZGRyLAogCQkJCQkJIFUzMiBudW1fcmN2X2J1ZnMsIFUzMiBtdHUsCi0JCQkJCQkgR1VJRCB6b25lR3VpZCwKKwkJCQkJCSB1dWlkX2xlIHpvbmVHdWlkLAogCQkJCQkJIHVuc2lnbmVkIGNoYXIgKmNsaWVudFN0ciwKIAkJCQkJCSBVMzIgY2xpZW50U3RyTGVuLAogCQkJCQkJIFU2NCBieXRlcykgIHsKQEAgLTg0Myw3ICs4NDUsNyBAQAogCXgtPkNoYW5uZWxIZWFkZXIuSGVhZGVyU2l6ZSA9IHNpemVvZih4LT5DaGFubmVsSGVhZGVyKTsKIAl4LT5DaGFubmVsSGVhZGVyLlNpemUgPSBDT1ZFUihieXRlcywgNDA5Nik7CiAJeC0+Q2hhbm5lbEhlYWRlci5UeXBlID0gVWx0cmFWbmljQ2hhbm5lbFByb3RvY29sR3VpZDsKLQl4LT5DaGFubmVsSGVhZGVyLlpvbmVHdWlkID0gR3VpZDA7CisJeC0+Q2hhbm5lbEhlYWRlci5ab25lR3VpZCA9IE5VTExfVVVJRF9MRTsKIAlNRU1DUFkoeC0+dm5pYy5tYWNhZGRyLCBtYWNhZGRyLCBNQVhfTUFDQUREUl9MRU4pOwogCXgtPnZuaWMubnVtX3Jjdl9idWZzID0gbnVtX3Jjdl9idWZzOwogCXgtPnZuaWMubXR1ID0gbXR1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NoYW5uZWxzL3ZidXNjaGFubmVsLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvdmJ1c2NoYW5uZWwuaAppbmRleCA5OWRiYmNmLi4wZGQzZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvdmJ1c2NoYW5uZWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY2hhbm5lbHMvdmJ1c2NoYW5uZWwuaApAQCAtMSw0ICsxLDQgQEAKLS8qIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDE1ICsyMywxNiBAQAogICogIFdlIGN1cnJlbnRseSB1c2UgdGhpcyBmb3IgdGhlIGNsaWVudCB0byBwcm92aWRlIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQKICAqICB0aGUgY2xpZW50IGRldmljZXMgYW5kIGNsaWVudCBkcml2ZXJzIGZvciB0aGUgc2VydmVyIGVuZCB0byBzZWUuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAjaW5jbHVkZSAiY29tbW9udHlwZXMuaCIKICNpbmNsdWRlICJ2YnVzZGV2aWNlaW5mby5oIgogI2luY2x1ZGUgImNoYW5uZWwuaCIKIAogLyogezE5M2IzMzFiLWM1OGYtMTFkYS05NWE5LTAwZTA4MTYxMTY1Zn0gKi8KICNkZWZpbmUgVUxUUkFfVkJVU19DSEFOTkVMX1BST1RPQ09MX0dVSUQgXAotCXsweDE5M2IzMzFiLCAweGM1OGYsIDB4MTFkYSwgXAotCQl7MHg5NSwgMHhhOSwgMHgwLCAweGUwLCAweDgxLCAweDYxLCAweDE2LCAweDVmfSB9Ci1zdGF0aWMgY29uc3QgR1VJRCBVbHRyYVZidXNDaGFubmVsUHJvdG9jb2xHdWlkID0KKwkJVVVJRF9MRSgweDE5M2IzMzFiLCAweGM1OGYsIDB4MTFkYSwgXAorCQkJCTB4OTUsIDB4YTksIDB4MCwgMHhlMCwgMHg4MSwgMHg2MSwgMHgxNiwgMHg1ZikKK3N0YXRpYyBjb25zdCB1dWlkX2xlIFVsdHJhVmJ1c0NoYW5uZWxQcm90b2NvbEd1aWQgPQogCVVMVFJBX1ZCVVNfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEOwogCiAjZGVmaW5lIFVMVFJBX1ZCVVNfQ0hBTk5FTF9QUk9UT0NPTF9TSUdOQVRVUkUgVUxUUkFfQ0hBTk5FTF9QUk9UT0NPTF9TSUdOQVRVUkUKQEAgLTExMiw4ICsxMTMsNyBAQAogCXdyaXRlcShieXRlc0FsbG9jYXRlZCwgJngtPkNoYW5uZWxIZWFkZXIuU2l6ZSk7CiAJbWVtY3B5X3RvaW8oJngtPkNoYW5uZWxIZWFkZXIuVHlwZSwgJlVsdHJhVmJ1c0NoYW5uZWxQcm90b2NvbEd1aWQsCiAJCSAgICBzaXplb2YoeC0+Q2hhbm5lbEhlYWRlci5UeXBlKSk7Ci0JbWVtY3B5X3RvaW8oJngtPkNoYW5uZWxIZWFkZXIuWm9uZUd1aWQsICZHdWlkMCwKLQkJICAgIHNpemVvZih4LT5DaGFubmVsSGVhZGVyLlpvbmVHdWlkKSk7CisJbWVtY3B5X3RvaW8oJngtPkNoYW5uZWxIZWFkZXIuWm9uZUd1aWQsICZOVUxMX1VVSURfTEUsIHNpemVvZih1dWlkX2xlKSk7CiAJd3JpdGVsKHNpemVvZihVTFRSQV9WQlVTX0hFQURFUklORk8pLCAmeC0+SGRySW5mby5zdHJ1Y3RCeXRlcyk7CiAJd3JpdGVsKHNpemVvZihVTFRSQV9WQlVTX0hFQURFUklORk8pLCAmeC0+SGRySW5mby5jaHBJbmZvQnl0ZU9mZnNldCk7CiAJd3JpdGVsKHJlYWRsKCZ4LT5IZHJJbmZvLmNocEluZm9CeXRlT2Zmc2V0KSArCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY29udHJvbHZtY29tcGxldGlvbnN0YXR1cy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2NvbnRyb2x2bWNvbXBsZXRpb25zdGF0dXMuaAppbmRleCBkZTMwZDMyLi5kYjc3ZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvY29udHJvbHZtY29tcGxldGlvbnN0YXR1cy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9jb250cm9sdm1jb21wbGV0aW9uc3RhdHVzLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjb250cm9sdm1jb21wbGV0aW9uc3RhdHVzLmMKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvZGlhZ25vc3RpY3MvYXBwb3Nfc3Vic3lzdGVtcy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2RpYWdub3N0aWNzL2FwcG9zX3N1YnN5c3RlbXMuaAppbmRleCA0YzYyOTRkLi4xOGNjOWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvZGlhZ25vc3RpY3MvYXBwb3Nfc3Vic3lzdGVtcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS9kaWFnbm9zdGljcy9hcHBvc19zdWJzeXN0ZW1zLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKy8qIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvaW92bWNhbGxfZ251Yy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2lvdm1jYWxsX2dudWMuaAppbmRleCA3MzA0ZTlhMC4uZmU5NTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL2lvdm1jYWxsX2dudWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvaW92bWNhbGxfZ251Yy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IMKpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS92YnVzZGV2aWNlaW5mby5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL3ZidXNkZXZpY2VpbmZvLmgKaW5kZXggYWU3MDhmYS4uOGMwMjU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL3ZidXNkZXZpY2VpbmZvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL3ZidXNkZXZpY2VpbmZvLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgwqkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL3ZlcnNpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS92ZXJzaW9uLmgKaW5kZXggMDBiMGViYi4uZjI1MjA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvdmVyc2lvbi5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IMKpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS92bWNhbGxpbnRlcmZhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvY29tbW9uLXNwYXIvaW5jbHVkZS92bWNhbGxpbnRlcmZhY2UuaAppbmRleCAxNGM0MDQzLi5jNWMxMGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2NvbW1vbi1zcGFyL2luY2x1ZGUvdm1jYWxsaW50ZXJmYWNlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9jb21tb24tc3Bhci9pbmNsdWRlL3ZtY2FsbGludGVyZmFjZS5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IMKpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9jb21tb250eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL2NvbW1vbnR5cGVzLmgKaW5kZXggZWYxMmFmNC4uOWRlNmY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL2NvbW1vbnR5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL2NvbW1vbnR5cGVzLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgwqkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTcsMTMgKzE3LDE0IEBACiAjZGVmaW5lIF9DT01NT05UWVBFU19IXwogCiAvKiBkZWZpbmUgdGhlIGZvbGxvd2luZyB0byBwcmV2ZW50IGluY2x1ZGUgbmVzdGluZyBpbiBrZXJuZWwgaGVhZGVyIGZpbGVzIG9mCi0gKiBzaW1pbGFyIGFicmV2aWF0ZWQgY29udGVudCAqLworICogc2ltaWxhciBhYmJyZXZpYXRlZCBjb250ZW50ICovCiAjZGVmaW5lIF9TVVBFUlZJU09SX0NPTU1PTlRZUEVTX0hfCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAjZWxzZQogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN5c2xvZy5oPgpAQCAtNTksMTYgKzYwLDYgQEAKIAogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHsKLQlVMzIgZGF0YTE7Ci0JVTE2IGRhdGEyOwotCVUxNiBkYXRhMzsKLQlVOCBkYXRhNFs4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBHVUlEOwotCi0jaWZuZGVmIEdVSUQwCi0jZGVmaW5lIEdVSUQwIHswLCAwLCAwLCB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfQotI2VuZGlmCiB0eXBlZGVmIFU2NCBHVUVTVF9QSFlTSUNBTF9BRERSRVNTOwogCiAjZGVmaW5lIE1FTVNFVChwdHIsIHZhbCwgbGVuKSBtZW1zZXQocHRyLCB2YWwsIGxlbikKQEAgLTg5LDE4ICs4MCwxNiBAQAogI2RlZmluZSBDSEFOTkVMX0dVSURfTUlTTUFUQ0goY2hUeXBlLCBjaE5hbWUsIGZpZWxkLCBleHBlY3RlZCwgYWN0dWFsLCBmaWwsIFwKIAkJCSAgICAgIGxpbiwgbG9nQ3R4KQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQljaGFyIHMxWzUwXSwgczJbNTBdLCBzM1s1MF07CQkJCVwKLQkJcHJfZXJyKCJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXMpIGZpZWxkPSVzIGV4cGVjdGVkPSVzIGFjdHVhbD0lcyBAJXM6JWRcbiIsIFwKLQkJICAgICAgIGNoTmFtZSwgR1VJRF9mb3JtYXQyKCZjaFR5cGUsIHMxKSwgZmllbGQsCVwKLQkJICAgICAgIEdVSURfZm9ybWF0MigmZXhwZWN0ZWQsIHMyKSwgR1VJRF9mb3JtYXQyKCZhY3R1YWwsIHMzKSwgXAorCQlwcl9lcnIoIkNoYW5uZWwgbWlzbWF0Y2ggb24gY2hhbm5lbD0lcyglcFVMKSBmaWVsZD0lcyBleHBlY3RlZD0lcFVMIGFjdHVhbD0lcFVMIEAlczolZFxuIiwgXAorCQkgICAgICAgY2hOYW1lLCAmY2hUeXBlLCBmaWVsZCwJXAorCQkgICAgICAgJmV4cGVjdGVkLCAmYWN0dWFsLCBcCiAJCSAgICAgICBmaWwsIGxpbik7CQkJCQlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ0hBTk5FTF9VMzJfTUlTTUFUQ0goY2hUeXBlLCBjaE5hbWUsIGZpZWxkLCBleHBlY3RlZCwgYWN0dWFsLCBmaWwsIFwKIAkJCSAgICAgbGluLCBsb2dDdHgpCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWNoYXIgczFbNTBdOwkJCQkJCVwKLQkJcHJfZXJyKCJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXMpIGZpZWxkPSVzIGV4cGVjdGVkPTB4JS04LjhseCBhY3R1YWw9MHglLTguOGx4IEAlczolZFxuIiwgXAotCQkgICAgICAgY2hOYW1lLCBHVUlEX2Zvcm1hdDIoJmNoVHlwZSwgczEpLCBmaWVsZCwJXAorCQlwcl9lcnIoIkNoYW5uZWwgbWlzbWF0Y2ggb24gY2hhbm5lbD0lcyglcFVMKSBmaWVsZD0lcyBleHBlY3RlZD0weCUtOC44bHggYWN0dWFsPTB4JS04LjhseCBAJXM6JWRcbiIsIFwKKwkJICAgICAgIGNoTmFtZSwgJmNoVHlwZSwgZmllbGQsCVwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nKWV4cGVjdGVkLCAodW5zaWduZWQgbG9uZylhY3R1YWwsCVwKIAkJICAgICAgIGZpbCwgbGluKTsJCQkJCVwKIAl9IHdoaWxlICgwKQpAQCAtMTA4LDkgKzk3LDggQEAKICNkZWZpbmUgQ0hBTk5FTF9VNjRfTUlTTUFUQ0goY2hUeXBlLCBjaE5hbWUsIGZpZWxkLCBleHBlY3RlZCwgYWN0dWFsLCBmaWwsIFwKIAkJCSAgICAgbGluLCBsb2dDdHgpCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWNoYXIgczFbNTBdOwkJCQkJCVwKLQkJcHJfZXJyKCJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXMpIGZpZWxkPSVzIGV4cGVjdGVkPTB4JS04LjhMeCBhY3R1YWw9MHglLTguOEx4IEAlczolZFxuIiwgXAotCQkgICAgICAgY2hOYW1lLCBHVUlEX2Zvcm1hdDIoJmNoVHlwZSwgczEpLCBmaWVsZCwJXAorCQlwcl9lcnIoIkNoYW5uZWwgbWlzbWF0Y2ggb24gY2hhbm5lbD0lcyglcFVMKSBmaWVsZD0lcyBleHBlY3RlZD0weCUtOC44THggYWN0dWFsPTB4JS04LjhMeCBAJXM6JWRcbiIsIFwKKwkJICAgICAgIGNoTmFtZSwgJmNoVHlwZSwgZmllbGQsCVwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXhwZWN0ZWQsCQkJXAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhY3R1YWwsCQkJXAogCQkgICAgICAgZmlsLCBsaW4pOwkJCQkJXApAQCAtMTI4LDIxICsxMTYsMTkgQEAKICNkZWZpbmUgQ0hBTk5FTF9HVUlEX01JU01BVENIKGNoVHlwZSwgY2hOYW1lLCBmaWVsZCwgZXhwZWN0ZWQsIGFjdHVhbCwgZmlsLCBcCiAJCQkgICAgICBsaW4sIGxvZ0N0eCkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJY2hhciBzMVs1MF0sIHMyWzUwXSwgczNbNTBdOwkJCQlcCiAJCXN5c2xvZyhMT0dfVVNFUiB8IExPR19FUlIsCQkJCVwKLQkJICAgICAgICJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXMpIGZpZWxkPSVzIGV4cGVjdGVkPSVzIGFjdHVhbD0lcyBAJXM6JWQiLCBcCi0JCSAgICAgICBjaE5hbWUsIEdVSURfZm9ybWF0MigmY2hUeXBlLCBzMSksIGZpZWxkLAlcCi0JCSAgICAgICBHVUlEX2Zvcm1hdDIoJmV4cGVjdGVkLCBzMiksIEdVSURfZm9ybWF0MigmYWN0dWFsLCBzMyksIFwKKwkJICAgICAgICJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXBVTCkgZmllbGQ9JXMgZXhwZWN0ZWQ9JXBVTCBhY3R1YWw9JXBVTCBAJXM6JWQiLCBcCisJCSAgICAgICBjaE5hbWUsICZjaFR5cGUsIGZpZWxkLAlcCisJCSAgICAgICAmZXhwZWN0ZWQsICZhY3R1YWwsIFwKIAkJICAgICAgIGZpbCwgbGluKTsJCQkJCVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIENIQU5ORUxfVTMyX01JU01BVENIKGNoVHlwZSwgY2hOYW1lLCBmaWVsZCwgZXhwZWN0ZWQsIGFjdHVhbCwgZmlsLCBcCiAJCQkgICAgIGxpbiwgbG9nQ3R4KQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQljaGFyIHMxWzUwXTsJCQkJCQlcCiAJCXN5c2xvZyhMT0dfVVNFUiB8IExPR19FUlIsCQkJCVwKLQkJICAgICAgICJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXMpIGZpZWxkPSVzIGV4cGVjdGVkPTB4JS04LjhseCBhY3R1YWw9MHglLTguOGx4IEAlczolZCIsIFwKLQkJICAgICAgIGNoTmFtZSwgR1VJRF9mb3JtYXQyKCZjaFR5cGUsIHMxKSwgZmllbGQsCVwKKwkJICAgICAgICJDaGFubmVsIG1pc21hdGNoIG9uIGNoYW5uZWw9JXMoJXBVTCkgZmllbGQ9JXMgZXhwZWN0ZWQ9MHglLTguOGx4IGFjdHVhbD0weCUtOC44bHggQCVzOiVkIiwgXAorCQkgICAgICAgY2hOYW1lLCBjaFR5cGUsIGZpZWxkLAlcCiAJCSAgICAgICAodW5zaWduZWQgbG9uZylleHBlY3RlZCwgKHVuc2lnbmVkIGxvbmcpYWN0dWFsLAlcCiAJCSAgICAgICBmaWwsIGxpbik7CQkJCQlcCiAJfSB3aGlsZSAoMCkKQEAgLTE1MCwxMCArMTM2LDkgQEAKICNkZWZpbmUgQ0hBTk5FTF9VNjRfTUlTTUFUQ0goY2hUeXBlLCBjaE5hbWUsIGZpZWxkLCBleHBlY3RlZCwgYWN0dWFsLCBmaWwsIFwKIAkJCSAgICAgbGluLCBsb2dDdHgpCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWNoYXIgczFbNTBdOwkJCQkJCVwKIAkJc3lzbG9nKExPR19VU0VSIHwgTE9HX0VSUiwJCQkJXAotCQkgICAgICAgIkNoYW5uZWwgbWlzbWF0Y2ggb24gY2hhbm5lbD0lcyglcykgZmllbGQ9JXMgZXhwZWN0ZWQ9MHglLTguOEx4IGFjdHVhbD0weCUtOC44THggQCVzOiVkIiwgXAotCQkgICAgICAgY2hOYW1lLCBHVUlEX2Zvcm1hdDIoJmNoVHlwZSwgczEpLCBmaWVsZCwJXAorCQkgICAgICAgIkNoYW5uZWwgbWlzbWF0Y2ggb24gY2hhbm5lbD0lcyglcFVMKSBmaWVsZD0lcyBleHBlY3RlZD0weCUtOC44THggYWN0dWFsPTB4JS04LjhMeCBAJXM6JWQiLCBcCisJCSAgICAgICBjaE5hbWUsIGNoVHlwZSwgZmllbGQsCVwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXhwZWN0ZWQsCQkJXAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhY3R1YWwsCQkJXAogCQkgICAgICAgZmlsLCBsaW4pOwkJCQkJXApAQCAtMTY3LDQgKzE1Miw0IEBACiAjZGVmaW5lIFZvbGF0aWxlQmFycmllcigpIE1FTU9SWUJBUlJJRVIKIAogI2VuZGlmCi0jaW5jbHVkZSAiZ3VpZHV0aWxzLmgiCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9ndWVzdGxpbnV4ZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9ndWVzdGxpbnV4ZGVidWcuaAppbmRleCBjM2RlODQ5Li5lZmM0MDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvZ3Vlc3RsaW51eGRlYnVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL2d1ZXN0bGludXhkZWJ1Zy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IMKpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorLyogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE3LDcgKzE3LDcgQEAKICNkZWZpbmUgX19HVUVTVExJTlVYREVCVUdfSF9fCiAKIC8qCi0qIFRoaXMgZmlsZSBjb250YWlucyBzdXBwb3J0aW5nIGludGVyZmFjZSBmb3IgInZtY2FsbGludGVyZmFjZS5oIiwgcGFydGljdWFybHkKKyogVGhpcyBmaWxlIGNvbnRhaW5zIHN1cHBvcnRpbmcgaW50ZXJmYWNlIGZvciAidm1jYWxsaW50ZXJmYWNlLmgiLCBwYXJ0aWN1bGFybHkKICogcmVnYXJkaW5nIGFkZGluZyBhZGRpdGlvbmFsIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25hbGl0eSB0byBsaW51eAogKiBJU1NVRV9JT19WTUNBTExfUE9TVENPREVfU0VWRVJJVFkgKi8KIApAQCAtMTQyLDcgKzE0Miw3IEBACiAgKiBQbGVhc2UgYWxzbyBub3RlIHRoYXQgdGhlIHJlc3VsdGluZyBwb3N0Y29kZSBpcyBpbiBoZXgsIHNvIGlmIHlvdSBhcmUKICAqIHNlYXJjaGluZyBmb3IgdGhlIF9fTElORV9fIG51bWJlciwgY29udmVydCBpdCBmaXJzdCB0byBkZWNpbWFsLiAgVGhlIGxpbmUKICAqIG51bWJlciBjb21iaW5lZCB3aXRoIGRyaXZlciBhbmQgdHlwZSBvZiBjYWxsLCB3aWxsIGFsbG93IHlvdSB0byB0cmFjayBkb3duCi0gKiBleGFjdGx5IHdoYXQgbGluZSBhbiBlcnJvciBvY2N1cmVkIG9uLCBvciB3aGVyZSB0aGUgbGFzdCBkcml2ZXIKKyAqIGV4YWN0bHkgd2hhdCBsaW5lIGFuIGVycm9yIG9jY3VycmVkIG9uLCBvciB3aGVyZSB0aGUgbGFzdCBkcml2ZXIKICAqIGVudGVyZWQvZXhpdGVkIGZyb20uCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL2d1aWR1dGlscy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL2d1aWR1dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWNhZjkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9ndWlkdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKiBDb3B5cmlnaHQgwqkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqLwotCi0vKiBndWlkdXRpbHMuaAotICoKLSAqIFRoZXNlIGFyZSBHVUlEIG1hbmlwdWxhdGlvbiBpbmxpbmVzIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSBlaXRoZXIKLSAqIGtlcm5lbC1tb2RlIG9yIHVzZXItbW9kZS4KLSAqCi0gKi8KLSNpZm5kZWYgX19HVUlEVVRJTFNfSF9fCi0jZGVmaW5lIF9fR1VJRFVUSUxTX0hfXwotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jZGVmaW5lIEdVSURfU1RSVE9VTCBrc3RydG91bAotI2Vsc2UKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNkZWZpbmUgR1VJRF9TVFJUT1VMIHN0cnRvdWwKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGNoYXIgKgotR1VJRF9mb3JtYXQxKGNvbnN0IEdVSUQgKmd1aWQsIGNoYXIgKnMpCi17Ci0Jc3ByaW50ZihzLCAieyUtOC44bHgtJS00LjR4LSUtNC40eC0lLTIuMnglLTIuMnglLTIuMnglLTIuMnglLTIuMnglLTIuMnglLTIuMnglLTIuMnh9IiwKLQkJKHVsb25nKSBndWlkLT5kYXRhMSwKLQkJZ3VpZC0+ZGF0YTIsCi0JCWd1aWQtPmRhdGEzLAotCQlndWlkLT5kYXRhNFswXSwKLQkJZ3VpZC0+ZGF0YTRbMV0sCi0JCWd1aWQtPmRhdGE0WzJdLAotCQlndWlkLT5kYXRhNFszXSwKLQkJZ3VpZC0+ZGF0YTRbNF0sIGd1aWQtPmRhdGE0WzVdLCBndWlkLT5kYXRhNFs2XSwgZ3VpZC0+ZGF0YTRbN10pOwotCXJldHVybiBzOwotfQotCi0vKiogRm9ybWF0IGEgR1VJRCBpbiBNaWNyb3NvZnQncyAnd2hhdCBpbiB0aGUgd29ybGQgd2VyZSB0aGV5IHRoaW5raW5nJwotICogIGZvcm1hdC4KLSAqLwotc3RhdGljIGlubGluZSBjaGFyICoKLUdVSURfZm9ybWF0Mihjb25zdCBHVUlEICpndWlkLCBjaGFyICpzKQotewotCXNwcmludGYocywgInslLTguOGx4LSUtNC40eC0lLTQuNHgtJS0yLjJ4JS0yLjJ4LSUtMi4yeCUtMi4yeCUtMi4yeCUtMi4yeCUtMi4yeCUtMi4yeH0iLAotCQkodWxvbmcpIGd1aWQtPmRhdGExLAotCQlndWlkLT5kYXRhMiwKLQkJZ3VpZC0+ZGF0YTMsCi0JCWd1aWQtPmRhdGE0WzBdLAotCQlndWlkLT5kYXRhNFsxXSwKLQkJZ3VpZC0+ZGF0YTRbMl0sCi0JCWd1aWQtPmRhdGE0WzNdLAotCQlndWlkLT5kYXRhNFs0XSwgZ3VpZC0+ZGF0YTRbNV0sIGd1aWQtPmRhdGE0WzZdLCBndWlkLT5kYXRhNFs3XSk7Ci0JcmV0dXJuIHM7Ci19Ci0KLS8qKgotICogTGlrZSBHVUlEX2Zvcm1hdDIgYnV0IHdpdGhvdXQgdGhlIGN1cmx5IGJyYWNlcyBhbmQgdGhlCi0gKiBoZXggZGlnaXRzIGluIHVwcGVyIGNhc2UKLSAqLwotc3RhdGljIGlubGluZSBjaGFyICoKLUdVSURfZm9ybWF0Myhjb25zdCBHVUlEICpndWlkLCBjaGFyICpzKQotewotCXNwcmludGYocywgIiUtOC44bFgtJS00LjRYLSUtNC40WC0lLTIuMlglLTIuMlgtJS0yLjJYJS0yLjJYJS0yLjJYJS0yLjJYJS0yLjJYJS0yLjJYIiwKLQkJKHVsb25nKSBndWlkLT5kYXRhMSwKLQkJZ3VpZC0+ZGF0YTIsCi0JCWd1aWQtPmRhdGEzLAotCQlndWlkLT5kYXRhNFswXSwKLQkJZ3VpZC0+ZGF0YTRbMV0sCi0JCWd1aWQtPmRhdGE0WzJdLAotCQlndWlkLT5kYXRhNFszXSwKLQkJZ3VpZC0+ZGF0YTRbNF0sIGd1aWQtPmRhdGE0WzVdLCBndWlkLT5kYXRhNFs2XSwgZ3VpZC0+ZGF0YTRbN10pOwotCXJldHVybiBzOwotfQotCi0vKiogUGFyc2UgYSBndWlkIHN0cmluZyBpbiBhbnkgb2YgdGhlc2UgZm9ybXM6Ci0gKiAgICAgIHsxMTExMTExMS0yMjIyLTMzMzMtNDQ1NS02Njc3ODg5OWFhYmJ9Ci0gKiAgICAgIHsxMTExMTExMS0yMjIyLTMzMzMtNDQ1NTY2Nzc4ODk5YWFiYn0KLSAqICAgICAgMTExMTExMTEtMjIyMi0zMzMzLTQ0NTUtNjY3Nzg4OTlhYWJiCi0gKiAgICAgIDExMTExMTExLTIyMjItMzMzMy00NDU1NjY3Nzg4OTlhYWJiCi0gKi8KLXN0YXRpYyBpbmxpbmUgR1VJRAotR1VJRF9zY2FuKFU4ICpwKQotewotCUdVSUQgZ3VpZCA9IEdVSUQwOwotCVU4IHhbMzNdOwotCWludCBjb3VudCA9IDA7Ci0JaW50IGMsIGkgPSAwOwotCVU4IGNkYXRhMVs5XTsKLQlVOCBjZGF0YTJbNV07Ci0JVTggY2RhdGEzWzVdOwotCVU4IGNkYXRhNFszXTsKLQlpbnQgZGFzaGNvdW50ID0gMDsKLQlpbnQgYnJhY2UgPSAwOwotCXVuc2lnbmVkIGxvbmcgdWxkYXRhOwotCi0JaWYgKCFwKQotCQlyZXR1cm4gZ3VpZDsKLQlpZiAoKnAgPT0gJ3snKSB7Ci0JCXArKzsKLQkJYnJhY2UgPSAxOwotCX0KLQl3aGlsZSAoY291bnQgPCAzMikgewotCQlpZiAoKnAgPT0gJ30nKQotCQkJcmV0dXJuIGd1aWQ7Ci0JCWlmICgqcCA9PSAnXDAnKQotCQkJcmV0dXJuIGd1aWQ7Ci0JCWMgPSB0b3VwcGVyKCpwKTsKLQkJcCsrOwotCQlpZiAoYyA9PSAnLScpIHsKLQkJCXN3aXRjaCAoZGFzaGNvdW50KSB7Ci0JCQljYXNlIDA6Ci0JCQkJaWYgKGkgIT0gOCkKLQkJCQkJcmV0dXJuIGd1aWQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJaWYgKGkgIT0gNCkKLQkJCQkJcmV0dXJuIGd1aWQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI6Ci0JCQkJaWYgKGkgIT0gNCkKLQkJCQkJcmV0dXJuIGd1aWQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJaWYgKGkgIT0gNCkKLQkJCQkJcmV0dXJuIGd1aWQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiBndWlkOwotCQkJfQotCQkJZGFzaGNvdW50Kys7Ci0JCQlpID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IChjID49ICdBJyAmJiBjIDw9ICdGJykpCi0JCQlpKys7Ci0JCWVsc2UKLQkJCXJldHVybiBndWlkOwotCQl4W2NvdW50KytdID0gYzsKLQl9Ci0JeFtjb3VudF0gPSAnXDAnOwotCWlmIChicmFjZSkgewotCQlpZiAoKnAgPT0gJ30nKQotCQkJcCsrOwotCQllbHNlCi0JCQlyZXR1cm4gZ3VpZDsKLQl9Ci0JaWYgKGRhc2hjb3VudCA9PSAzIHx8IGRhc2hjb3VudCA9PSA0KQotCQk7Ci0JZWxzZQotCQlyZXR1cm4gZ3VpZDsKLQltZW1zZXQoY2RhdGExLCAwLCBzaXplb2YoY2RhdGExKSk7Ci0JbWVtc2V0KGNkYXRhMiwgMCwgc2l6ZW9mKGNkYXRhMikpOwotCW1lbXNldChjZGF0YTMsIDAsIHNpemVvZihjZGF0YTMpKTsKLQltZW1zZXQoY2RhdGE0LCAwLCBzaXplb2YoY2RhdGE0KSk7Ci0JbWVtY3B5KGNkYXRhMSwgeCArIDAsIDgpOwotCW1lbWNweShjZGF0YTIsIHggKyA4LCA0KTsKLQltZW1jcHkoY2RhdGEzLCB4ICsgMTIsIDQpOwotCi0JaWYgKEdVSURfU1RSVE9VTCgoY2hhciAqKSBjZGF0YTEsIDE2LCAmdWxkYXRhKSA9PSAwKQotCQlndWlkLmRhdGExID0gKFUzMil1bGRhdGE7Ci0JaWYgKEdVSURfU1RSVE9VTCgoY2hhciAqKSBjZGF0YTIsIDE2LCAmdWxkYXRhKSA9PSAwKQotCQlndWlkLmRhdGEyID0gKFUxNil1bGRhdGE7Ci0JaWYgKEdVSURfU1RSVE9VTCgoY2hhciAqKSBjZGF0YTMsIDE2LCAmdWxkYXRhKSA9PSAwKQotCQlndWlkLmRhdGEzID0gKFUxNil1bGRhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCW1lbWNweShjZGF0YTQsIHggKyAxNiArIChpICogMiksIDIpOwotCQlpZiAoR1VJRF9TVFJUT1VMKChjaGFyICopIGNkYXRhNCwgMTYsICZ1bGRhdGEpID09IDApCi0JCQlndWlkLmRhdGE0W2ldID0gKFU4KSB1bGRhdGE7Ci0JfQotCi0JcmV0dXJuIGd1aWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqCi1HVUlEX3Nhbml0aXplKGNoYXIgKmlucHV0R3VpZFN0ciwgY2hhciAqb3V0cHV0R3VpZFN0cikKLXsKLQlHVUlEIGc7Ci0JR1VJRCBndWlkMCA9IEdVSUQwOwotCSpvdXRwdXRHdWlkU3RyID0gJ1wwJzsKLQlnID0gR1VJRF9zY2FuKChVOCAqKSBpbnB1dEd1aWRTdHIpOwotCWlmIChtZW1jbXAoJmcsICZndWlkMCwgc2l6ZW9mKEdVSUQpKSA9PSAwKQotCQlyZXR1cm4gb3V0cHV0R3VpZFN0cjsJLyogYmFkIEdVSUQgZm9ybWF0ICovCi0JcmV0dXJuIEdVSURfZm9ybWF0MSgmZywgb3V0cHV0R3VpZFN0cik7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3BlcmlvZGljX3dvcmsuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9wZXJpb2RpY193b3JrLmgKaW5kZXggNmM3MTkwYi4uNDE4YmE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3BlcmlvZGljX3dvcmsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvcGVyaW9kaWNfd29yay5oCkBAIC0xLDYgKzEsNiBAQAogLyogcGVyaW9kaWNfd29yay5oCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3Byb2NvYmplY3R0cmVlLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvcHJvY29iamVjdHRyZWUuaAppbmRleCBjODFkMTEyLi4xMTc0MDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvcHJvY29iamVjdHRyZWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvcHJvY29iamVjdHRyZWUuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHByb2NvYmplY3R0cmVlLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvc3BhcnN0b3AuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9zcGFyc3RvcC5oCmluZGV4IDM2MDNhYzYuLjA1ODM3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9zcGFyc3RvcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS9zcGFyc3RvcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogc3BhcnN0b3AuaAogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS90aW1za21vZC5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3RpbXNrbW9kLmgKaW5kZXggNWZkNWFkNS4uZWNmMWE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3RpbXNrbW9kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3RpbXNrbW9kLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aW1za21vZC5oCiAgKgotICogQ29weXJpZ2h0IO+/vSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdGltc2ttb2R1dGlscy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3RpbXNrbW9kdXRpbHMuaAppbmRleCAyZDgxZDQ2Li5jMzE2Yzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdGltc2ttb2R1dGlscy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS90aW1za21vZHV0aWxzLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aW1za21vZHV0aWxzLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC03Miw0ICs3Miw2IEBACiBzdHJ1Y3Qgc2VxX2ZpbGUgKnZpc29yX3NlcV9maWxlX25ld19idWZmZXIodm9pZCAqYnVmLCBzaXplX3QgYnVmX3NpemUpOwogdm9pZCB2aXNvcl9zZXFfZmlsZV9kb25lX2J1ZmZlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwogCitleHRlcm4gaW50IHVuaXN5c19zcGFyX3BsYXRmb3JtOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS91aXNxdWV1ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3Vpc3F1ZXVlLmgKaW5kZXggNmRhYjM5MC4uMmE1YmVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3Vpc3F1ZXVlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3Vpc3F1ZXVlLmgKQEAgLTEsNiArMSw2IEBACiAvKiB1aXNxdWV1ZS5oCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgInVuaWtsb2cuaCIKICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAKICNpbmNsdWRlICJjb250cm9sdm1jaGFubmVsLmgiCiAjaW5jbHVkZSAiY29udHJvbHZtY29tcGxldGlvbnN0YXR1cy5oIgpAQCAtMTM2LDggKzEzNyw4IEBACiAJdm9pZCBfX2lvbWVtICpjaGFucHRyOwogCVU2NCBjaGFubmVsQWRkcjsKIAlVNjQgY2hhbm5lbEJ5dGVzOwotCUdVSUQgY2hhbm5lbFR5cGVHdWlkOwotCUdVSUQgZGV2SW5zdEd1aWQ7CisJdXVpZF9sZSBjaGFubmVsVHlwZUd1aWQ7CisJdXVpZF9sZSBkZXZJbnN0R3VpZDsKIAlzdHJ1Y3QgSW50ZXJydXB0SW5mbyBpbnRyOwogCXN0cnVjdCBzd2l0Y2hfaW5mbyAqc3d0Y2g7CiAJY2hhciBkZXZpZFszMF07CQkvKiAidmJ1czxidXNubz46ZGV2PGRldm5vPiIgKi8KQEAgLTE2Myw3ICsxNjQsNyBAQAogCVUzMiBidXNObywgZGV2aWNlQ291bnQ7CiAJc3RydWN0IGRldmljZV9pbmZvICoqZGV2aWNlOwogCVU2NCBndWVzdEhhbmRsZSwgcmVjdkJ1c0ludGVycnVwdEhhbmRsZTsKLQlHVUlEIGJ1c0luc3RHdWlkOworCXV1aWRfbGUgYnVzSW5zdEd1aWQ7CiAJVUxUUkFfVkJVU19DSEFOTkVMX1BST1RPQ09MIF9faW9tZW0gKnBCdXNDaGFubmVsOwogCWludCBidXNDaGFubmVsQnl0ZXM7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2RpcjsJLyogcHJvYy91aXNsaWIvdmJ1cy88eD4gKi8KQEAgLTM1Niw4ICszNTcsOCBAQAogCQkJCQkgKiBOT1QgWUVUIFVTRUQgKi8KIAlVMzIgYnVzTm87CQkvKiBidXMgbnVtYmVyIHRvIGJlIGNyZWF0ZWQvZGVsZXRlZCAqLwogCVUzMiBkZXZpY2VDb3VudDsJLyogbWF4IG51bSBvZiBkZXZpY2VzIG9uIGJ1cyAqLwotCUdVSUQgYnVzVHlwZUd1aWQ7CS8qIGluZGljYXRlcyB0eXBlIG9mIGJ1cyAqLwotCUdVSUQgYnVzSW5zdEd1aWQ7CS8qIGluc3RhbmNlIGd1aWQgZm9yIGRldmljZSAqLworCXV1aWRfbGUgYnVzVHlwZUd1aWQ7CS8qIGluZGljYXRlcyB0eXBlIG9mIGJ1cyAqLworCXV1aWRfbGUgYnVzSW5zdEd1aWQ7CS8qIGluc3RhbmNlIGd1aWQgZm9yIGRldmljZSAqLwogfTsKIAogc3RydWN0IGRlbF92YnVzX2d1ZXN0cGFydCB7CkBAIC0zNzEsNyArMzcyLDcgQEAKIAl2b2lkIF9faW9tZW0gKmNoYW5wdHI7CQkvKiBwb2ludGVyIHRvIGRhdGEgY2hhbm5lbCAqLwogCVUzMiBidXNObzsJCS8qIGJ1cyBudW1iZXIgZm9yIHRoZSBvcGVyYXRpb24gKi8KIAlVMzIgZGV2aWNlTm87CQkvKiBudW1iZXIgb2YgZGV2aWNlIG9uIHRoZSBidXMgKi8KLQlHVUlEIGRldkluc3RHdWlkOwkvKiBpbnN0YW5jZSBndWlkIGZvciBkZXZpY2UgKi8KKwl1dWlkX2xlIGRldkluc3RHdWlkOwkvKiBpbnN0YW5jZSBndWlkIGZvciBkZXZpY2UgKi8KIAlzdHJ1Y3QgSW50ZXJydXB0SW5mbyBpbnRyOwkvKiByZWN2L3NlbmQgaW50ZXJydXB0IGluZm8gKi8KIAkvKiByZWN2SW50ZXJydXB0SGFuZGxlIGNvbnRhaW5zIGluZm8gbmVlZGVkIGluIG9yZGVyIHRvCiAJICogcmVnaXN0ZXIgdG8gcmVjZWl2ZSBpbnRlcnJ1cHRzIG9uIHRoZSBkYXRhIGNoYW5uZWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdWlzdGhyZWFkLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdWlzdGhyZWFkLmgKaW5kZXggMmIxZmJhNy4uMjY4Mzc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3Vpc3RocmVhZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS91aXN0aHJlYWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHVpc3RocmVhZC5oCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3Vpc3V0aWxzLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdWlzdXRpbHMuaAppbmRleCA1ZmRhYjNhLi43MDc3NmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdWlzdXRpbHMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdWlzdXRpbHMuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHVpc3V0aWxzLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KIAogI2luY2x1ZGUgInZtY2FsbGludGVyZmFjZS5oIgogI2luY2x1ZGUgImNoYW5uZWwuaCIKQEAgLTU0LDcgKzU1LDcgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgTUFDQVJSQVlbTUFYX01BQ0FERFJfTEVOXTsKIHR5cGVkZWYgc3RydWN0IFJlcUhhbmRsZXJJbmZvX3N0cnVjdCB7Ci0JR1VJRCBzd2l0Y2hUeXBlR3VpZDsKKwl1dWlkX2xlIHN3aXRjaFR5cGVHdWlkOwogCWludCAoKmNvbnRyb2xmdW5jKShzdHJ1Y3QgaW9fbXNncyAqKTsKIAl1bnNpZ25lZCBsb25nIG1pbl9jaGFubmVsX2J5dGVzOwogCWludCAoKlNlcnZlcl9DaGFubmVsX09rKSh1bnNpZ25lZCBsb25nIGNoYW5uZWxCeXRlcyk7CkBAIC02NCw3ICs2NSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2xpbms7CS8qIGxpbmtzIGludG8gUmVxSGFuZGxlckluZm9fbGlzdCAqLwogfSBSZXFIYW5kbGVySW5mb190OwogCi1SZXFIYW5kbGVySW5mb190ICpSZXFIYW5kbGVyQWRkKEdVSUQgc3dpdGNoVHlwZUd1aWQsCitSZXFIYW5kbGVySW5mb190ICpSZXFIYW5kbGVyQWRkKHV1aWRfbGUgc3dpdGNoVHlwZUd1aWQsCiAJCQkJY29uc3QgY2hhciAqc3dpdGNoX3R5cGVfbmFtZSwKIAkJCQlpbnQgKCpjb250cm9sZnVuYykoc3RydWN0IGlvX21zZ3MgKiksCiAJCQkJdW5zaWduZWQgbG9uZyBtaW5fY2hhbm5lbF9ieXRlcywKQEAgLTczLDggKzc0LDggQEAKIAkJCQlpbnQgKCpTZXJ2ZXJfQ2hhbm5lbF9Jbml0KQogCQkJCSAodm9pZCAqeCwgdW5zaWduZWQgY2hhciAqY2xpZW50U3RyLAogCQkJCSAgVTMyIGNsaWVudFN0ckxlbiwgVTY0IGJ5dGVzKSk7Ci1SZXFIYW5kbGVySW5mb190ICpSZXFIYW5kbGVyRmluZChHVUlEIHN3aXRjaFR5cGVHdWlkKTsKLWludCBSZXFIYW5kbGVyRGVsKEdVSUQgc3dpdGNoVHlwZUd1aWQpOworUmVxSGFuZGxlckluZm9fdCAqUmVxSGFuZGxlckZpbmQodXVpZF9sZSBzd2l0Y2hUeXBlR3VpZCk7CitpbnQgUmVxSGFuZGxlckRlbCh1dWlkX2xlIHN3aXRjaFR5cGVHdWlkKTsKIAogI2RlZmluZSB1aXNsaWJfaW9yZW1hcF9jYWNoZShhZGRyLCBzaXplKSBcCiAJZGJnX2lvcmVtYXBfY2FjaGUoYWRkciwgc2l6ZSwgX19GSUxFX18sIF9fTElORV9fKQpAQCAtMTEyLDcgKzExMyw3IEBACiAKIGludCB1aXNjdHJsX3JlZ2lzdGVyX3JlcV9oYW5kbGVyKGludCB0eXBlLCB2b2lkICpmcHRyLAogCQkJCSBVTFRSQV9WQlVTX0RFVklDRUlORk8gKmNoaXBzZXRfRHJpdmVySW5mbyk7Ci1pbnQgdWlzY3RybF9yZWdpc3Rlcl9yZXFfaGFuZGxlcl9leChHVUlEIHN3aXRjaFR5cGVHdWlkLAoraW50IHVpc2N0cmxfcmVnaXN0ZXJfcmVxX2hhbmRsZXJfZXgodXVpZF9sZSBzd2l0Y2hUeXBlR3VpZCwKIAkJCQkgICAgY29uc3QgY2hhciAqc3dpdGNoX3R5cGVfbmFtZSwKIAkJCQkgICAgaW50ICgqZnB0cikoc3RydWN0IGlvX21zZ3MgKiksCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgbWluX2NoYW5uZWxfYnl0ZXMsCkBAIC0xMjMsNyArMTI0LDcgQEAKIAkJCQkgICAgIFUzMiBjbGllbnRTdHJMZW4sIFU2NCBieXRlcyksCiAJCQkJICAgIFVMVFJBX1ZCVVNfREVWSUNFSU5GTyAqY2hpcHNldF9Ecml2ZXJJbmZvKTsKIAotaW50IHVpc2N0cmxfdW5yZWdpc3Rlcl9yZXFfaGFuZGxlcl9leChHVUlEIHN3aXRjaFR5cGVHdWlkKTsKK2ludCB1aXNjdHJsX3VucmVnaXN0ZXJfcmVxX2hhbmRsZXJfZXgodXVpZF9sZSBzd2l0Y2hUeXBlR3VpZCk7CiB1bnNpZ25lZCBjaGFyICp1dGlsX21hcF92aXJ0KHN0cnVjdCBwaHlzX2luZm8gKnNnKTsKIHZvaWQgdXRpbF91bm1hcF92aXJ0KHN0cnVjdCBwaHlzX2luZm8gKnNnKTsKIHVuc2lnbmVkIGNoYXIgKnV0aWxfbWFwX3ZpcnRfYXRvbWljKHN0cnVjdCBwaHlzX2luZm8gKnNnKTsKQEAgLTEzMywyMCArMTM0LDIwIEBACiAJCQkJICBwQ0hBTk5FTF9IRUFERVIgKipjaGFuKTsKIHZvaWQgdWlzbGliX3NlcnZlcl9pbmplY3RfZGVsX3ZuaWMoVTMyIHN3aXRjaE5vLCBVMzIgYnVzTm8sIFUzMiBudW1JbnRQb3J0cywKIAkJCQkgICBVMzIgbnVtRXh0UG9ydHMpOwotaW50IHVpc2xpYl9jbGllbnRfaW5qZWN0X2FkZF9idXMoVTMyIGJ1c05vLCBHVUlEIGluc3RHdWlkLAoraW50IHVpc2xpYl9jbGllbnRfaW5qZWN0X2FkZF9idXMoVTMyIGJ1c05vLCB1dWlkX2xlIGluc3RHdWlkLAogCQkJCSBVNjQgY2hhbm5lbEFkZHIsIHVsb25nIG5DaGFubmVsQnl0ZXMpOwogaW50ICB1aXNsaWJfY2xpZW50X2luamVjdF9kZWxfYnVzKFUzMiBidXNObyk7CiAKIGludCB1aXNsaWJfY2xpZW50X2luamVjdF9hZGRfdmhiYShVMzIgYnVzTm8sIFUzMiBkZXZObywKIAkJCQkgIFU2NCBwaHlzX2NoYW5fYWRkciwgVTMyIGNoYW5fYnl0ZXMsCi0JCQkJICBpbnQgaXNfdGVzdF9hZGRyLCBHVUlEIGluc3RHdWlkLAorCQkJCSAgaW50IGlzX3Rlc3RfYWRkciwgdXVpZF9sZSBpbnN0R3VpZCwKIAkJCQkgIHN0cnVjdCBJbnRlcnJ1cHRJbmZvICppbnRyKTsKIGludCAgdWlzbGliX2NsaWVudF9pbmplY3RfcGF1c2VfdmhiYShVMzIgYnVzTm8sIFUzMiBkZXZObyk7CiBpbnQgIHVpc2xpYl9jbGllbnRfaW5qZWN0X3Jlc3VtZV92aGJhKFUzMiBidXNObywgVTMyIGRldk5vKTsKIGludCB1aXNsaWJfY2xpZW50X2luamVjdF9kZWxfdmhiYShVMzIgYnVzTm8sIFUzMiBkZXZObyk7CiBpbnQgdWlzbGliX2NsaWVudF9pbmplY3RfYWRkX3ZuaWMoVTMyIGJ1c05vLCBVMzIgZGV2Tm8sCiAJCQkJICBVNjQgcGh5c19jaGFuX2FkZHIsIFUzMiBjaGFuX2J5dGVzLAotCQkJCSAgaW50IGlzX3Rlc3RfYWRkciwgR1VJRCBpbnN0R3VpZCwKKwkJCQkgIGludCBpc190ZXN0X2FkZHIsIHV1aWRfbGUgaW5zdEd1aWQsCiAJCQkJICBzdHJ1Y3QgSW50ZXJydXB0SW5mbyAqaW50cik7CiBpbnQgdWlzbGliX2NsaWVudF9pbmplY3RfcGF1c2Vfdm5pYyhVMzIgYnVzTm8sIFUzMiBkZXZObyk7CiBpbnQgdWlzbGliX2NsaWVudF9pbmplY3RfcmVzdW1lX3ZuaWMoVTMyIGJ1c05vLCBVMzIgZGV2Tm8pOwpAQCAtMTkzLDE0ICsxOTQsMjEgQEAKICAqIGNvcnJlY3RseSBhdCBERVZJQ0VfQ1JFQVRFIHRpbWUsIElOU1RFQUQgT0Ygd2FpdGluZyB1bnRpbAogICogREVWSUNFX0NPTkZJR1VSRSB0aW1lLgogICovCi0jZGVmaW5lIFdBSVRfRk9SX1ZBTElEX0dVSUQoZ3VpZCkgXAotCWRvIHsJCQkJCQkgICBcCi0JCXdoaWxlIChNRU1DTVBfSU8oJmd1aWQsICZHdWlkMCwgc2l6ZW9mKEd1aWQwKSkgPT0gMCkgewlcCi0JCQlMT0dFUlIoIldhaXRpbmcgZm9yIG5vbi0wIEdVSUQgKHdoeT8/PykuLi5cbiIpOyBcCi0JCQlVSVNfVEhSRUFEX1dBSVRfU0VDKDUpOwkJCQlcCi0JCX0JCQkJCQkJXAotCQlMT0dFUlIoIk9LLi4uIEdVSUQgaXMgbm9uLTAgbm93XG4iKTsJCQlcCi0JfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAord2FpdF9mb3JfdmFsaWRfZ3VpZCh1dWlkX2xlIF9faW9tZW0gKmd1aWQpCit7CisJdXVpZF9sZSB0bXBndWlkOworCisJd2hpbGUgKDEpIHsKKwkJbWVtY3B5X2Zyb21pbygodm9pZCAqKSZ0bXBndWlkLAorCQkJICAgICAgKHZvaWQgX19pb21lbSAqKWd1aWQsIHNpemVvZih1dWlkX2xlKSk7CisJCWlmICh1dWlkX2xlX2NtcCh0bXBndWlkLCBOVUxMX1VVSURfTEUpICE9IDApCisJCQlicmVhazsKKwkJTE9HRVJSKCJXYWl0aW5nIGZvciBub24tMCBHVUlEICh3aHk/Pz8pLi4uXG4iKTsKKwkJVUlTX1RIUkVBRF9XQUlUX1NFQyg1KTsKKwl9CisJTE9HRVJSKCJPSy4uLiBHVUlEIGlzIG5vbi0wIG5vd1xuIik7Cit9CiAKIC8qIENvcHlGcmFnc0luZm9Gcm9tU2tiIHJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGFkZGVkIHRvIGZyYWdzIGFycmF5CiAgKiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdW5pa2xvZy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy9pbmNsdWRlL3VuaWtsb2cuaAppbmRleCA0ZDdiODdjLi42MTc4Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL2luY2x1ZGUvdW5pa2xvZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZS91bmlrbG9nLmgKQEAgLTEsNiArMSw2IEBACiAvKiB1bmlrbG9nLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Vpc2xpYi91aXNsaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc2xpYi5jCmluZGV4IDMxNTJhMjEuLmQ0YTdlZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc2xpYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc2xpYi5jCkBAIC0xLDYgKzEsNiBAQAogLyogdWlzbGliLmMKICAqCi0gKiBDb3B5cmlnaHQg77+9IDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxjb25maWcvbW9kdmVyc2lvbnMuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2luY2x1ZGUgImNvbW1vbnR5cGVzLmgiCiAKQEAgLTQ1LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBTRVRfUFJPQ19PV05FUih4LCB5KQogCi0jZGVmaW5lIFVJU0xJQl9URVNUX1BST0MKICNkZWZpbmUgUE9MTEpJRkZJRVNfTk9STUFMIDEKIC8qIENob29zZSB3aGV0aGVyIG9yIG5vdCB5b3Ugd2FudCB0byB3YWtldXAgdGhlIHJlcXVlc3QtcG9sbGluZyB0aHJlYWQKICAqIGFmdGVyIGFuIElPIHRlcm1pbmF0aW9uOgpAQCAtODksMTQ2ICs4OSwzNCBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKFdha2V1cF9Qb2xsaW5nX0RldmljZV9DaGFubmVscyk7CiBzdGF0aWMgaW50IEdvX1BvbGxpbmdfRGV2aWNlX0NoYW5uZWxzOwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp1aXNsaWJfcHJvY19kaXI7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp1aXNsaWJfcHJvY192YnVzX2RpcjsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnZuaWNfcHJvY19lbnRyeTsJLyogVXNlZCB0byBiZSAiZGF0YWNoYW4iICovCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjdHJsY2hhbl9wcm9jX2VudHJ5Owotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcG1lbV9wcm9jX2VudHJ5Owotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaW5mb19wcm9jX2VudHJ5Owotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc3dpdGNoX3Byb2NfZW50cnk7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpleHRwb3J0X3Byb2NfZW50cnk7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwbGF0Zm9ybW51bWJlcl9wcm9jX2VudHJ5Owotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYnVzX3Byb2NfZW50cnk7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZXZfcHJvY19lbnRyeTsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNoaXBzZXRfcHJvY19lbnRyeTsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmN5Y2xlc19iZWZvcmVfd2FpdF9wcm9jX2VudHJ5Owotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcmVzZXRfY291bnRzX3Byb2NfZW50cnk7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzbWFydF93YWtldXBfcHJvY19lbnRyeTsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpc2FibGVfcHJvY19lbnRyeTsKLQotI2RlZmluZSBESVJfUFJPQ19FTlRSWSAidWlzbGliIgotI2RlZmluZSBESVJfVkJVU19QUk9DX0VOVFJZICJ2YnVzIgotI2RlZmluZSBWTklDX1BST0NfRU5UUllfRk4gInZuaWMiCS8qIFVzZWQgdG8gYmUgImRhdGFjaGFuIiAqLwotI2RlZmluZSBDVFJMQ0hBTl9QUk9DX0VOVFJZX0ZOICJjdHJsY2hhbiIKLSNkZWZpbmUgUE1FTV9QUk9DX0VOVFJZX0ZOICJwaHlzX3RvX3ZpcnQiCi0jZGVmaW5lIElORk9fUFJPQ19FTlRSWV9GTiAiaW5mbyIKLSNkZWZpbmUgU1dJVENIX1BST0NfRU5UUllfRk4gInN3aXRjaCIKLSNkZWZpbmUgU1dJVENIX0NPVU5UX1BST0NfRU5UUllfRk4gInN3aXRjaF9jb3VudCIKLSNkZWZpbmUgRVhUUE9SVF9QUk9DX0VOVFJZX0ZOICJleHRwb3J0IgotI2RlZmluZSBQTEFURk9STU5VTUJFUl9QUk9DX0VOVFJZX0ZOICJwbGF0Zm9ybSIKLSNkZWZpbmUgQlVTX1BST0NfRU5UUllfRk4gImJ1cyIKLSNkZWZpbmUgREVWX1BST0NfRU5UUllfRk4gImRldmljZSIKLSNkZWZpbmUgQ0hJUFNFVF9QUk9DX0VOVFJZX0ZOICJjaGlwc2V0IgotI2RlZmluZSBDWUNMRVNfQkVGT1JFX1dBSVRfUFJPQ19FTlRSWV9GTiAiY3ljbGVzX2JlZm9yZV93YWl0IgotI2RlZmluZSBSRVNFVF9DT1VOVFNfUFJPQ19FTlRSWV9GTiAicmVzZXRfY291bnRzIgotI2RlZmluZSBTTUFSVF9XQUtFVVBfUFJPQ19FTlRSWV9GTiAic21hcnRfd2FrZXVwIgogI2RlZmluZSBDQUxMSE9NRV9QUk9DX0VOVFJZX0ZOICJjYWxsaG9tZSIKICNkZWZpbmUgQ0FMTEhPTUVfVEhST1RUTEVEX1BST0NfRU5UUllfRk4gImNhbGxob21lX3Rocm90dGxlZCIKLSNkZWZpbmUgRElTQUJMRV9QUk9DX0VOVFJZX0ZOICJzd2l0Y2hfc3RhdGUiCi0jaWZkZWYgVUlTTElCX1RFU1RfUFJPQwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqdGVzdF9wcm9jX2VudHJ5OwotI2RlZmluZSBURVNUX1BST0NfRU5UUllfRk4gInRlc3QiCi0jZW5kaWYKKworI2RlZmluZSBESVJfREVCVUdGU19FTlRSWSAidWlzbGliIgorc3RhdGljIHN0cnVjdCBkZW50cnkgKmRpcl9kZWJ1Z2ZzOworCisjZGVmaW5lIFBMQVRGT1JNTlVNQkVSX0RFQlVHRlNfRU5UUllfRk4gInBsYXRmb3JtIgorc3RhdGljIHN0cnVjdCBkZW50cnkgKnBsYXRmb3JtbnVtYmVyX2RlYnVnZnNfcmVhZDsKKworI2RlZmluZSBDWUNMRVNfQkVGT1JFX1dBSVRfREVCVUdGU19FTlRSWV9GTiAiY3ljbGVzX2JlZm9yZV93YWl0Igorc3RhdGljIHN0cnVjdCBkZW50cnkgKmN5Y2xlc19iZWZvcmVfd2FpdF9kZWJ1Z2ZzX3JlYWQ7CisKKyNkZWZpbmUgU01BUlRfV0FLRVVQX0RFQlVHRlNfRU5UUllfRk4gInNtYXJ0X3dha2V1cCIKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzbWFydF93YWtldXBfZGVidWdmc19lbnRyeTsKKworI2RlZmluZSBJTkZPX0RFQlVHRlNfRU5UUllfRk4gImluZm8iCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaW5mb19kZWJ1Z2ZzX2VudHJ5OworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc19iZWZvcmVfd2FpdCwgd2FpdF9jeWNsZXM7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGxvY2FsIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBwcm9jX2luZm9fdmJ1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7Ci1zdGF0aWMgaW50Ci1wcm9jX2luZm9fdmJ1c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCS8qIHByb2NfaW5mb192YnVzX3Nob3cgd2lsbCBncmFiIHRoaXMgZnJvbSBzZXFfZmlsZS5wcml2YXRlOiAqLwotCXN0cnVjdCBidXNfaW5mbyAqYnVzID0gUERFX0RBVEEoaW5vZGUpOwotCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBwcm9jX2luZm9fdmJ1c19zaG93LCBidXMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2luZm9fdmJ1c19mb3BzID0gewotCS5vcGVuID0gcHJvY19pbmZvX3ZidXNfb3BlbiwKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHVpc2xpYl9wcm9jX3JlYWRfd3JpdGVvbmx5KHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQkgIGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotCi1zdGF0aWMgc3NpemVfdCB2bmljX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3ZuaWNfZm9wcyA9IHsKLQkucmVhZCA9IHVpc2xpYl9wcm9jX3JlYWRfd3JpdGVvbmx5LAotCS53cml0ZSA9IHZuaWNfcHJvY193cml0ZSwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGNoaXBzZXRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jaGlwc2V0X2ZvcHMgPSB7Ci0JLnJlYWQgPSB1aXNsaWJfcHJvY19yZWFkX3dyaXRlb25seSwKLQkud3JpdGUgPSBjaGlwc2V0X3Byb2Nfd3JpdGUsCi19OwotCi1zdGF0aWMgc3NpemVfdCBpbmZvX3Byb2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IGluZm9fZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19pbmZvX2ZvcHMgPSB7Ci0JLnJlYWQgPSBpbmZvX3Byb2NfcmVhZCwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHBsYXRmb3JtbnVtYmVyX3Byb2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wbGF0Zm9ybW51bWJlcl9mb3BzID0gewotCS5yZWFkID0gcGxhdGZvcm1udW1iZXJfcHJvY19yZWFkLAotfTsKLQotc3RhdGljIHNzaXplX3QgY3ljbGVzX2JlZm9yZV93YWl0X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2N5Y2xlc19iZWZvcmVfd2FpdF9mb3BzID0gewotCS5yZWFkID0gdWlzbGliX3Byb2NfcmVhZF93cml0ZW9ubHksCi0JLndyaXRlID0gY3ljbGVzX2JlZm9yZV93YWl0X3Byb2Nfd3JpdGUsCi19OwotCi1zdGF0aWMgc3NpemVfdCByZXNldF9jb3VudHNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19yZXNldF9jb3VudHNfZm9wcyA9IHsKLQkucmVhZCA9IHVpc2xpYl9wcm9jX3JlYWRfd3JpdGVvbmx5LAotCS53cml0ZSA9IHJlc2V0X2NvdW50c19wcm9jX3dyaXRlLAotfTsKLQotc3RhdGljIHNzaXplX3Qgc21hcnRfd2FrZXVwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc21hcnRfd2FrZXVwX2ZvcHMgPSB7Ci0JLnJlYWQgPSB1aXNsaWJfcHJvY19yZWFkX3dyaXRlb25seSwKLQkud3JpdGUgPSBzbWFydF93YWtldXBfcHJvY193cml0ZSwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHRlc3RfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdGVzdF9mb3BzID0gewotCS5yZWFkID0gdWlzbGliX3Byb2NfcmVhZF93cml0ZW9ubHksCi0JLndyaXRlID0gdGVzdF9wcm9jX3dyaXRlLAotfTsKLQotc3RhdGljIHNzaXplX3QgYnVzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19idXNfZm9wcyA9IHsKLQkucmVhZCA9IHVpc2xpYl9wcm9jX3JlYWRfd3JpdGVvbmx5LAotCS53cml0ZSA9IGJ1c19wcm9jX3dyaXRlLAotfTsKLQotc3RhdGljIHNzaXplX3QgZGV2X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19kZXZfZm9wcyA9IHsKLQkucmVhZCA9IHVpc2xpYl9wcm9jX3JlYWRfd3JpdGVvbmx5LAotCS53cml0ZSA9IGRldl9wcm9jX3dyaXRlLAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19pbmZvX2ZvcHMgPSB7CisJLnJlYWQgPSBpbmZvX2RlYnVnZnNfcmVhZCwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0yNDAsMzEgKzEyOCwxMCBAQAogCW1zZy0+aGRyLkZsYWdzLnNlcnZlciA9IHN2cjsKIH0KIAotc3RhdGljIHZvaWQKLWNyZWF0ZV9idXNfcHJvY19lbnRyaWVzKHN0cnVjdCBidXNfaW5mbyAqYnVzKQotewotCWJ1cy0+cHJvY19kaXIgPSBwcm9jX21rZGlyKGJ1cy0+bmFtZSwgdWlzbGliX3Byb2NfdmJ1c19kaXIpOwotCWlmICghYnVzLT5wcm9jX2RpcikgewotCQlMT0dFUlIoImZhaWxlZCB0byBjcmVhdGUgL3Byb2MvdWlzbGliL3ZidXMvJXMgZGlyZWN0b3J5IiwKLQkJICAgICAgIGJ1cy0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JYnVzLT5wcm9jX2luZm8gPSBwcm9jX2NyZWF0ZV9kYXRhKCJpbmZvIiwgMCwgYnVzLT5wcm9jX2RpciwKLQkJCQkJICAmcHJvY19pbmZvX3ZidXNfZm9wcywgYnVzKTsKLQlpZiAoIWJ1cy0+cHJvY19pbmZvKSB7Ci0JCUxPR0VSUigiZmFpbGVkIHRvIGNyZWF0ZSAvcHJvYy91aXNsaWIvdmJ1cy8lcy9pbmZvIiwgYnVzLT5uYW1lKTsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoYnVzLT5uYW1lLCB1aXNsaWJfcHJvY192YnVzX2Rpcik7Ci0JCWJ1cy0+cHJvY19kaXIgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotCVNFVF9QUk9DX09XTkVSKGJ1cy0+cHJvY19pbmZvLCBUSElTX01PRFVMRSk7Ci0KLX0KLQogc3RhdGljIF9faW9tZW0gdm9pZCAqCiBpbml0X3ZidXNfY2hhbm5lbChVNjQgY2hhbm5lbEFkZHIsIFUzMiBjaGFubmVsQnl0ZXMsIGludCBpc1NlcnZlcikKIHsKLQl2b2lkICpyYyA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICpyYyA9IE5VTEw7CiAJdm9pZCBfX2lvbWVtICpwQ2hhbiA9IHVpc2xpYl9pb3JlbWFwX2NhY2hlKGNoYW5uZWxBZGRyLCBjaGFubmVsQnl0ZXMpOwogCWlmICghcENoYW4pIHsKIAkJTE9HRVJSKCJDT05UUk9MVk1fQlVTX0NSRUFURSBlcnJvcjogaW9yZW1hcF9jYWNoZSBvZiBjaGFubmVsQWRkcjolTHggZm9yIGNoYW5uZWxCeXRlczolbGx1IGZhaWxlZCIsCkBAIC0zOTYsNyArMjYzLDYgQEAKIAkJCSAgICBDT05UUk9MVk1fUkVTUF9FUlJPUl9WSVJUUENJX0RSSVZFUl9DQUxMQkFDS19FUlJPUjsKIAkJfQogCX0KLQljcmVhdGVfYnVzX3Byb2NfZW50cmllcyhidXMpOwogCiAJLyogYWRkIGJ1cyBhdCB0aGUgaGVhZCBvZiBvdXIgbGlzdCAqLwogCXdyaXRlX2xvY2soJkJ1c0xpc3RMb2NrKTsKQEAgLTQ3MywxNCArMzM5LDYgQEAKIAkJcmVhZF91bmxvY2soJkJ1c0xpc3RMb2NrKTsKIAkJcmV0dXJuIENPTlRST0xWTV9SRVNQX0VSUk9SX0FMUkVBRFlfRE9ORTsKIAl9Ci0JaWYgKGJ1cy0+cHJvY19pbmZvKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJpbmZvIiwgYnVzLT5wcm9jX2Rpcik7Ci0JCWJ1cy0+cHJvY19pbmZvID0gTlVMTDsKLQl9Ci0JaWYgKGJ1cy0+cHJvY19kaXIpIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoYnVzLT5uYW1lLCB1aXNsaWJfcHJvY192YnVzX2Rpcik7Ci0JCWJ1cy0+cHJvY19kaXIgPSBOVUxMOwotCX0KIAlpZiAoYnVzLT5wQnVzQ2hhbm5lbCkgewogCQl1aXNsaWJfaW91bm1hcChidXMtPnBCdXNDaGFubmVsKTsKIAkJYnVzLT5wQnVzQ2hhbm5lbCA9IE5VTEw7CkBAIC01ODcsMTEgKzQ0NSw5IEBACiAJCQkgKi8KIAkJCWlmICghbXNnLT5oZHIuRmxhZ3Muc2VydmVyKSB7CiAJCQkJc3RydWN0IGd1ZXN0X21zZ3MgY21kOwotCQkJCWlmICghbWVtY21wCi0JCQkJICAgICgmZGV2LT5jaGFubmVsVHlwZUd1aWQsCi0JCQkJICAgICAmVWx0cmFWaGJhQ2hhbm5lbFByb3RvY29sR3VpZCwKLQkJCQkgICAgIHNpemVvZihHVUlEKSkpIHsKLQkJCQkJV0FJVF9GT1JfVkFMSURfR1VJRCgoKENIQU5ORUxfSEVBREVSCisJCQkJaWYgKCF1dWlkX2xlX2NtcChkZXYtPmNoYW5uZWxUeXBlR3VpZCwKKwkJCQkgICAgIFVsdHJhVmhiYUNoYW5uZWxQcm90b2NvbEd1aWQpKSB7CisJCQkJCXdhaXRfZm9yX3ZhbGlkX2d1aWQoJigoQ0hBTk5FTF9IRUFERVIKIAkJCQkJCQkgICAgICBfX2lvbWVtICopIChkZXYtPgogCQkJCQkJCQkgIGNoYW5wdHIpKS0+CiAJCQkJCQkJICAgIFR5cGUpOwpAQCAtNjE0LDExICs0NzAsOSBAQAogCQkJCQkgICAgZGV2LT5kZXZJbnN0R3VpZDsKIAkJCQkJY21kLmFkZF92aGJhLmludHIgPSBkZXYtPmludHI7CiAJCQkJfSBlbHNlCi0JCQkJICAgIGlmICghbWVtY21wCi0JCQkJCSgmZGV2LT5jaGFubmVsVHlwZUd1aWQsCi0JCQkJCSAmVWx0cmFWbmljQ2hhbm5lbFByb3RvY29sR3VpZCwKLQkJCQkJIHNpemVvZihHVUlEKSkpIHsKLQkJCQkJV0FJVF9GT1JfVkFMSURfR1VJRCgoKENIQU5ORUxfSEVBREVSCisJCQkJICAgIGlmICghdXVpZF9sZV9jbXAoZGV2LT5jaGFubmVsVHlwZUd1aWQsCisJCQkJCSBVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkKSkgeworCQkJCQl3YWl0X2Zvcl92YWxpZF9ndWlkKCYoKENIQU5ORUxfSEVBREVSCiAJCQkJCQkJICAgICAgX19pb21lbSAqKSAoZGV2LT4KIAkJCQkJCQkJICBjaGFucHRyKSktPgogCQkJCQkJCSAgICBUeXBlKTsKQEAgLTcyMywxNiArNTc3LDEzIEBACiAJCQkvKiB0aGUgbXNnIGlzIGJvdW5kIGZvciB2aXJ0cGNpOyBzZW5kCiAJCQkgKiBndWVzdF9tc2dzIHN0cnVjdCB0byBjYWxsYmFjawogCQkJICovCi0JCQlpZiAoIW1lbWNtcAotCQkJICAgICgmZGV2LT5jaGFubmVsVHlwZUd1aWQsCi0JCQkgICAgICZVbHRyYVZoYmFDaGFubmVsUHJvdG9jb2xHdWlkLCBzaXplb2YoR1VJRCkpKSB7CisJCQlpZiAoIXV1aWRfbGVfY21wKGRldi0+Y2hhbm5lbFR5cGVHdWlkLAorCQkJCQlVbHRyYVZoYmFDaGFubmVsUHJvdG9jb2xHdWlkKSkgewogCQkJCWNtZC5tc2d0eXBlID0gR1VFU1RfUEFVU0VfVkhCQTsKIAkJCQljbWQucGF1c2VfdmhiYS5jaGFucHRyID0gZGV2LT5jaGFucHRyOwogCQkJfSBlbHNlCi0JCQkgICAgaWYgKCFtZW1jbXAKLQkJCQkoJmRldi0+Y2hhbm5lbFR5cGVHdWlkLAotCQkJCSAmVWx0cmFWbmljQ2hhbm5lbFByb3RvY29sR3VpZCwKLQkJCQkgc2l6ZW9mKEdVSUQpKSkgeworCQkJICAgIGlmICghdXVpZF9sZV9jbXAoZGV2LT5jaGFubmVsVHlwZUd1aWQsCisJCQkJCSAgICBVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkKSkgewogCQkJCWNtZC5tc2d0eXBlID0gR1VFU1RfUEFVU0VfVk5JQzsKIAkJCQljbWQucGF1c2Vfdm5pYy5jaGFucHRyID0gZGV2LT5jaGFucHRyOwogCQkJfSBlbHNlIHsKQEAgLTc5OCwxNSArNjQ5LDEzIEBACiAJCQkvKiB0aGUgbXNnIGlzIGJvdW5kIGZvciB2aXJ0cGNpOyBzZW5kCiAJCQkgKiBndWVzdF9tc2dzIHN0cnVjdCB0byBjYWxsYmFjawogCQkJICovCi0JCQlpZiAoIW1lbWNtcCgmZGV2LT5jaGFubmVsVHlwZUd1aWQsCi0JCQkJICAgICZVbHRyYVZoYmFDaGFubmVsUHJvdG9jb2xHdWlkLAotCQkJCSAgICBzaXplb2YoR1VJRCkpKSB7CisJCQlpZiAoIXV1aWRfbGVfY21wKGRldi0+Y2hhbm5lbFR5cGVHdWlkLAorCQkJCQlVbHRyYVZoYmFDaGFubmVsUHJvdG9jb2xHdWlkKSkgewogCQkJCWNtZC5tc2d0eXBlID0gR1VFU1RfUkVTVU1FX1ZIQkE7CiAJCQkJY21kLnJlc3VtZV92aGJhLmNoYW5wdHIgPSBkZXYtPmNoYW5wdHI7CiAJCQl9IGVsc2UKLQkJCSAgICBpZiAoIW1lbWNtcCgmZGV2LT5jaGFubmVsVHlwZUd1aWQsCi0JCQkJCSZVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkLAotCQkJCQlzaXplb2YoR1VJRCkpKSB7CisJCQkgICAgaWYgKCF1dWlkX2xlX2NtcChkZXYtPmNoYW5uZWxUeXBlR3VpZCwKKwkJCQkJICAgIFVsdHJhVm5pY0NoYW5uZWxQcm90b2NvbEd1aWQpKSB7CiAJCQkJY21kLm1zZ3R5cGUgPSBHVUVTVF9SRVNVTUVfVk5JQzsKIAkJCQljbWQucmVzdW1lX3ZuaWMuY2hhbnB0ciA9IGRldi0+Y2hhbnB0cjsKIAkJCX0gZWxzZSB7CkBAIC04NzMsMTYgKzcyMiwxMyBAQAogCQkJLyogdGhlIG1zZyBpcyBib3VuZCBmb3IgdmlydHBjaTsgc2VuZAogCQkJICogZ3Vlc3RfbXNncyBzdHJ1Y3QgdG8gY2FsbGJhY2sKIAkJCSAqLwotCQkJaWYgKCFtZW1jbXAKLQkJCSAgICAoJmRldi0+Y2hhbm5lbFR5cGVHdWlkLAotCQkJICAgICAmVWx0cmFWaGJhQ2hhbm5lbFByb3RvY29sR3VpZCwgc2l6ZW9mKEdVSUQpKSkgeworCQkJaWYgKCF1dWlkX2xlX2NtcChkZXYtPmNoYW5uZWxUeXBlR3VpZCwKKwkJCQkJVWx0cmFWaGJhQ2hhbm5lbFByb3RvY29sR3VpZCkpIHsKIAkJCQljbWQubXNndHlwZSA9IEdVRVNUX0RFTF9WSEJBOwogCQkJCWNtZC5kZWxfdmhiYS5jaGFucHRyID0gZGV2LT5jaGFucHRyOwogCQkJfSBlbHNlCi0JCQkgICAgaWYgKCFtZW1jbXAKLQkJCQkoJmRldi0+Y2hhbm5lbFR5cGVHdWlkLAotCQkJCSAmVWx0cmFWbmljQ2hhbm5lbFByb3RvY29sR3VpZCwKLQkJCQkgc2l6ZW9mKEdVSUQpKSkgeworCQkJICAgIGlmICghdXVpZF9sZV9jbXAoZGV2LT5jaGFubmVsVHlwZUd1aWQsCisJCQkJCSAgICBVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkKSkgewogCQkJCWNtZC5tc2d0eXBlID0gR1VFU1RfREVMX1ZOSUM7CiAJCQkJY21kLmRlbF92bmljLmNoYW5wdHIgPSBkZXYtPmNoYW5wdHI7CiAJCQl9IGVsc2UgewpAQCAtOTU3LDI3ICs4MDMsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1zdG9wX2NoaXBzZXQoQ09OVFJPTFZNX01FU1NBR0UgKm1zZywgY2hhciAqYnVmKQotewotCS8qIENoZWNrIHRoYXQgYWxsIGJ1c2VzIGFuZCBzd2l0Y2hlcyBoYXZlIGJlZW4gdG9ybiBkb3duIGFuZAotCSAqIGRlc3Ryb3llZC4KLQkgKi8KLQlpZiAoQnVzTGlzdEhlYWQpIHsKLQkJLyogQnVzZXMgc3RpbGwgZXhpc3QuICovCi0JCUxPR0VSUigiQ09OVFJPTFZNX0NISVBTRVRfU1RPUDogQnVzTGlzdEhlYWQgaXMgbm90IE5VTEwiKTsKLQkJcmV0dXJuIENPTlRST0xWTV9SRVNQX0VSUk9SX0NISVBTRVRfU1RPUF9GQUlMRURfQlVTOwotCX0KLQlpZiAoQnVzTGlzdENvdW50KSB7Ci0JCS8qIEJ1c0xpc3RIZWFkIGlzIE5VTEwsIGJ1dCBCdXNMaXN0Q291bnQgIT0gMCAqLwotCQlMT0dFUlIoIkNPTlRST0xWTV9DSElQU0VUX1NUT1A6IEJ1c0xpc3RDb3VudCAhPSAwIik7Ci0JCXJldHVybiBDT05UUk9MVk1fUkVTUF9FUlJPUl9DSElQU0VUX1NUT1BfRkFJTEVEX0JVUzsKLQl9Ci0KLQkvKiBCdXNlcyBhcmUgc2h1dCBkb3duLiAqLwotCXJldHVybiB2aXNvcmNoaXBzZXRfY2hpcHNldF9ub3RyZWFkeSgpOwotfQotCi1zdGF0aWMgaW50CiBkZWxldGVfYnVzX2dsdWUoVTMyIGJ1c05vKQogewogCUNPTlRST0xWTV9NRVNTQUdFIG1zZzsKQEAgLTEwMDgsNyArODMzLDcgQEAKIH0KIAogaW50Ci11aXNsaWJfY2xpZW50X2luamVjdF9hZGRfYnVzKFUzMiBidXNObywgR1VJRCBpbnN0R3VpZCwKK3Vpc2xpYl9jbGllbnRfaW5qZWN0X2FkZF9idXMoVTMyIGJ1c05vLCB1dWlkX2xlIGluc3RHdWlkLAogCQkJICAgICBVNjQgY2hhbm5lbEFkZHIsIHVsb25nIG5DaGFubmVsQnl0ZXMpCiB7CiAJQ09OVFJPTFZNX01FU1NBR0UgbXNnOwpAQCAtMTEwOSw3ICs5MzQsNyBAQAogaW50CiB1aXNsaWJfY2xpZW50X2luamVjdF9hZGRfdmhiYShVMzIgYnVzTm8sIFUzMiBkZXZObywKIAkJCSAgICAgIFU2NCBwaHlzX2NoYW5fYWRkciwgVTMyIGNoYW5fYnl0ZXMsCi0JCQkgICAgICBpbnQgaXNfdGVzdF9hZGRyLCBHVUlEIGluc3RHdWlkLAorCQkJICAgICAgaW50IGlzX3Rlc3RfYWRkciwgdXVpZF9sZSBpbnN0R3VpZCwKIAkJCSAgICAgIHN0cnVjdCBJbnRlcnJ1cHRJbmZvICppbnRyKQogewogCUNPTlRST0xWTV9NRVNTQUdFIG1zZzsKQEAgLTExNjgsNyArOTkzLDcgQEAKIGludAogdWlzbGliX2NsaWVudF9pbmplY3RfYWRkX3ZuaWMoVTMyIGJ1c05vLCBVMzIgZGV2Tm8sCiAJCQkgICAgICBVNjQgcGh5c19jaGFuX2FkZHIsIFUzMiBjaGFuX2J5dGVzLAotCQkJICAgICAgaW50IGlzX3Rlc3RfYWRkciwgR1VJRCBpbnN0R3VpZCwKKwkJCSAgICAgIGludCBpc190ZXN0X2FkZHIsIHV1aWRfbGUgaW5zdEd1aWQsCiAJCQkgICAgICBzdHJ1Y3QgSW50ZXJydXB0SW5mbyAqaW50cikKIHsKIAlDT05UUk9MVk1fTUVTU0FHRSBtc2c7CkBAIC0xMjcyLDcgKzEwOTcsNiBAQAogCUJPT0wgYnVzQ3JlYXRlZCA9IEZBTFNFOwogCWludCBkZXZObyA9IDA7CQkvKiBEZWZhdWx0IHRvIDAsIHNpbmNlIG9ubHkgb25lIGRldmljZQogCQkJCSAqIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBidXMuLi4gKi8KLQlHVUlEIGR1bW15R3VpZCA9IEdVSUQwOwogCUNPTlRST0xWTV9NRVNTQUdFIG1zZzsKIAogCWluaXRfbXNnX2hlYWRlcigmbXNnLCBDT05UUk9MVk1fQlVTX0NSRUFURSwgMCwgMCk7CkBAIC0xMjkxLDcgKzExMTUsNyBAQAogCW1zZy5oZHIuRmxhZ3MudGVzdE1lc3NhZ2UgPSAxOwogCW1zZy5jbWQuY3JlYXRlRGV2aWNlLmJ1c05vID0gYnVzTm87CiAJbXNnLmNtZC5jcmVhdGVEZXZpY2UuZGV2Tm8gPSBkZXZObzsKLQltc2cuY21kLmNyZWF0ZURldmljZS5kZXZJbnN0R3VpZCA9IGR1bW15R3VpZDsKKwltc2cuY21kLmNyZWF0ZURldmljZS5kZXZJbnN0R3VpZCA9IE5VTExfVVVJRF9MRTsKIAltZW1zZXQoJm1zZy5jbWQuY3JlYXRlRGV2aWNlLmludHIsIDAsIHNpemVvZihzdHJ1Y3QgSW50ZXJydXB0SW5mbykpOwogCW1zZy5jbWQuY3JlYXRlRGV2aWNlLmNoYW5uZWxBZGRyID0gUGh5c2ljYWxEYXRhQ2hhbjsKIAltc2cuY21kLmNyZWF0ZURldmljZS5jaGFubmVsQnl0ZXMgPSBNSU5fSU9fQ0hBTk5FTF9TSVpFOwpAQCAtMTM3NiwxMzUgKzEyMDAsMTEgQEAKIC8qIHByb2MgZmlsZXN5c3RlbSBjYWxsYmFjayBmdW5jdGlvbnMgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHNzaXplX3QKLXZuaWNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IGFjdGlvbiA9IDB4ZmZmZiwgYnVzTm8gPSAwLCBpLCByZXN1bHQgPSAwOwotCWNoYXIgYnVmWzRdOwotCWNoYXIgZGlyZWN0aW9uOwotLyogR1VJRCBndWlkOyAqLwotCWlmIChjb3VudCA+PSBBUlJBWV9TSVpFKGJ1ZikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKLQkJTE9HRVJSKCJlY2hvID4gL3Byb2MvdWlzbGliL3ZuaWMgY29weV9mcm9tX3VzZXIgKioqKkZBSUxFRC5cbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpID0gc3NjYW5mKGJ1ZiwgIiVkJWMiLCAmYWN0aW9uLCAmZGlyZWN0aW9uKTsKLQlpZiAoaSAhPSAyKSB7Ci0JCUxPR0VSUigidW5hYmxlIHRvIHBhcnNlIHZuaWMgcHJvYyBwYXJhbWV0ZXJzLlxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWlmICgoZGlyZWN0aW9uICE9ICctJykgJiYgKGRpcmVjdGlvbiAhPSAnKycpKSB7Ci0JCUxPR0VSUigidW5hYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGFkZCBvciBkZWxldGUgdm5pY1xuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIGlmIChpIDwgMSksIGkuZS4sIGlmIHdlIGRpZG4ndCBldmVuIHJlYWQgdGhlIGFjdGlvbiBmaWVsZCwKLQkqIHRoZW4gYWN0aW9uIHdpbGwgZGVmYXVsdCB0byAweGZmZmYgYW5kIHRoZSBjb2RlIGJlbG93IHdpbGwKLQkqIGZhbGwgdGhyb3VnaCB0aGUgc3dpdGNoIGFuZCBwcmludCB1c2FnZS4KLQkqLwotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSAwOgotCQkvKiBjYWxsIGNsaWVudCBtZXRob2QuLi4gKi8KLQkJYnVzTm8gPSAwOwkvKiBBbGwgY2xpZW50IGRyaXZlcnMgdXNlIGJ1cyB2YWx1ZSBvZiAwLi4uICovCi0JCWlmIChkaXJlY3Rpb24gPT0gJysnKQotCQkJcmVzdWx0ID0gdWlzbGliX2NsaWVudF9hZGRfdm5pYyhidXNObyk7Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IHVpc2xpYl9jbGllbnRfZGVsZXRlX3ZuaWMoYnVzTm8pOwotCQlpZiAoIXJlc3VsdCkgewotCQkJTE9HRVJSKCJlY2hvIDAlYyA+IC9wcm9jL3Vpc2xpYi92bmljIGZhaWxlZCAoY2xpZW50IGVuZCkiLAotCQkJICAgICBkaXJlY3Rpb24pOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJcmV0dXJuIGNvdW50OwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JTE9HRVJSKCJVU0FHRTogZWNobyA8YWN0aW9uPjxkaXJlY3Rpb24gKHVwL2Rvd24pPiA+IC9wcm9jL3Vpc2xpYi92bmljIik7Ci0JTE9HRVJSKCIgIik7Ci0JTE9HRVJSKCJDbGllbnQgU3ludGF4Iik7Ci0JTE9HRVJSKCItLS0tLS0tLS0tLS0tIik7Ci0JTE9HRVJSKCIwKyAgICA9PT4gYWRkIHZuaWMiKTsKLQlMT0dFUlIoIjAtICAgID09PiBkZWxldGUgdm5pYyIpOwotCUxPR0VSUigiICIpOwotCXJldHVybiBjb3VudDsKLX0JCQkJLyogZW5kIHZuaWNfcHJvY193cml0ZSAqLwotCi1zdGF0aWMgc3NpemVfdAotY2hpcHNldF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgaSwgYWN0aW9uID0gMHhmZmZmOwotCWNoYXIgYnVmWzRdOwotCUNPTlRST0xWTV9NRVNTQUdFIG1zZzsKLQotCWlmIChjb3VudCA+PSBBUlJBWV9TSVpFKGJ1ZikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZtc2csIDAsIHNpemVvZihDT05UUk9MVk1fTUVTU0FHRSkpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKLQkJTE9HRVJSKCJjb3B5X2Zyb21fdXNlciAqKioqRkFJTEVELlxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWlmIChjaGlwc2V0X2luaXRlZCkgewotCQlMT0dJTkYoIkNoaXBzZXQgYWxyZWFkeSBpbml0aWFsaXplZFxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlpID0gc3NjYW5mKGJ1ZiwgIiV4IiwgJmFjdGlvbik7Ci0KLQkvKiBpZiAoaSA8IDEpLCBpLmUuLCBpZiB3ZSBkaWRuJ3QgZXZlbiByZWFkIHRoZSBhY3Rpb24gZmllbGQsCi0JKiB0aGVuIGFjdGlvbiB3aWxsIGRlZmF1bHQgdG8gMHhmZmZmIGFuZCB0aGUgY29kZSBiZWxvdyB3aWxsCi0JKiBmYWxsIHRocm91Z2ggdGhlIHN3aXRjaCBhbmQgcHJpbnQgdXNhZ2UuCi0JKi8KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgMToKLQkJLyogR1VFU1QgKi8KLQkJLyogc3RlcDogaW5pdGlhbGl6ZSB0aGUgY2hpcHNldCAqLwotCQlpbml0X21zZ19oZWFkZXIoJm1zZywgQ09OVFJPTFZNX0NISVBTRVRfSU5JVCwgMCwgMCk7Ci0JCW1zZy5oZHIuRmxhZ3MudGVzdE1lc3NhZ2UgPSAwOwotCQltc2cuY21kLmluaXRDaGlwc2V0LmJ1c0NvdW50ID0gMjM7Ci0JCW1zZy5jbWQuaW5pdENoaXBzZXQuc3dpdGNoQ291bnQgPSAyMzsKLQotCQlpZiAoaW5pdF9jaGlwc2V0KCZtc2csIE5VTEwpICE9IENPTlRST0xWTV9SRVNQX1NVQ0NFU1MpIHsKLQkJCUxPR0VSUigiaW5pdF9jaGlwc2V0IGZhaWxlZC5cbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JY2FzZSAyOgotCQkvKiBCT1RIICovCi0JCWluaXRfbXNnX2hlYWRlcigmbXNnLCBDT05UUk9MVk1fQ0hJUFNFVF9JTklULCAwLCAwKTsKLQkJbXNnLmhkci5GbGFncy50ZXN0TWVzc2FnZSA9IDE7Ci0JCW1zZy5jbWQuaW5pdENoaXBzZXQuYnVzQ291bnQgPSAyMzsKLQkJbXNnLmNtZC5pbml0Q2hpcHNldC5zd2l0Y2hDb3VudCA9IDIzOwotCi0JCWlmIChpbml0X2NoaXBzZXQoJm1zZywgTlVMTCkgIT0gQ09OVFJPTFZNX1JFU1BfU1VDQ0VTUykgewotCQkJTE9HRVJSKCJpbml0X2NoaXBzZXQgZmFpbGVkLlxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlyZXR1cm4gMTsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCUxPR0VSUigidXNhZ2U6IDEgPT0+IGluaXRfY2hpcHNldCBjbGllbnRcbiIpOwotCUxPR0VSUigidXNhZ2U6IDIgPT0+IGluaXRfY2hpcHNldCB0ZXN0XG4iKTsKLQlyZXR1cm4gLUVGQVVMVDsKLX0KLQogI2RlZmluZSBQTElORSguLi4pIHVpc3V0aWxfYWRkX3Byb2NfbGluZV9leCgmdG90LCBidWZmLCBcCiAJCQkJCSAgICAgICBidWZmX2xlbiwgX19WQV9BUkdTX18pCiAKIHN0YXRpYyBpbnQKLWluZm9fcHJvY19yZWFkX2hlbHBlcihjaGFyICoqYnVmZiwgaW50ICpidWZmX2xlbikKK2luZm9fZGVidWdmc19yZWFkX2hlbHBlcihjaGFyICoqYnVmZiwgaW50ICpidWZmX2xlbikKIHsKIAlpbnQgaSwgdG90ID0gMDsKIAlzdHJ1Y3QgYnVzX2luZm8gKmJ1czsKQEAgLTE1NjQsNyArMTI2NCw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1pbmZvX3Byb2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpCitpbmZvX2RlYnVnZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpCiB7CiAJY2hhciAqdGVtcDsKIAlpbnQgdG90YWxCeXRlcyA9IDA7CkBAIC0xNTg0LDkgKzEyODUsOSBAQAogCXRlbXAgPSBQcm9jUmVhZEJ1ZmZlcjsKIAogCWlmICgoKm9mZnNldCA9PSAwKSB8fCAoIVByb2NSZWFkQnVmZmVyVmFsaWQpKSB7Ci0JCURCR0lORigiY2FsbGluZyBpbmZvX3Byb2NfcmVhZF9oZWxwZXIuXG4iKTsKKwkJREJHSU5GKCJjYWxsaW5nIGluZm9fZGVidWdmc19yZWFkX2hlbHBlci5cbiIpOwogCQkvKiBpZiB0aGUgcmVhZCBmYWlscywgdGhlbiAtMSB3aWxsIGJlIHJldHVybmVkICovCi0JCXRvdGFsQnl0ZXMgPSBpbmZvX3Byb2NfcmVhZF9oZWxwZXIoJnRlbXAsICZyZW1haW5pbmdfYnl0ZXMpOworCQl0b3RhbEJ5dGVzID0gaW5mb19kZWJ1Z2ZzX3JlYWRfaGVscGVyKCZ0ZW1wLCAmcmVtYWluaW5nX2J5dGVzKTsKIAkJUHJvY1JlYWRCdWZmZXJWYWxpZCA9IDE7CiAJfSBlbHNlCiAJCXRvdGFsQnl0ZXMgPSBzdHJsZW4oUHJvY1JlYWRCdWZmZXIpOwpAQCAtMTU5NSw0MzIgKzEyOTYsNiBAQAogCQkJCSAgICAgICBQcm9jUmVhZEJ1ZmZlciwgdG90YWxCeXRlcyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1wbGF0Zm9ybW51bWJlcl9wcm9jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpCi17Ci0JaW50IGxlbmd0aCA9IDA7Ci0JY2hhciAqdmJ1ZjsKLQlsb2ZmX3QgcG9zID0gKm9mZnNldDsKLQotCWlmIChwb3MgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwb3MgPiAwIHx8ICFsZW4pCi0JCXJldHVybiAwOwotCi0JdmJ1ZiA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXZidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbGVuZ3RoID0gc3ByaW50Zih2YnVmLCAiJWRcbiIsIFBsYXRmb3JtTnVtYmVyKTsKLQotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCB2YnVmLCBsZW5ndGgpKSB7Ci0JCWtmcmVlKHZidWYpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlrZnJlZSh2YnVmKTsKLQkqb2Zmc2V0ICs9IGxlbmd0aDsKLQlyZXR1cm4gbGVuZ3RoOwotfQotCi0jaWZkZWYgVUlTTElCX1RFU1RfUFJPQwotCi0vKiBwcm9jL3Vpc2xpYi92YnVzLzx4Pi9pbmZvICovCi1zdGF0aWMgaW50Ci1wcm9jX2luZm9fdmJ1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgYnVzX2luZm8gKmJ1cyA9IG0tPnByaXZhdGU7Ci0JaW50IGksIGRldkluZm9Db3VudCwgeDsKLQljaGFyIGJ1Zls5OTldOwotCi0JaWYgKGJ1cyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlzZXFfcHJpbnRmKG0sICJDbGllbnQgZGV2aWNlIC8gY2xpZW50IGRyaXZlciBpbmZvIGZvciAlcyBwYXJ0aXRpb24gKHZidXMgIyVkKTpcbiIsCi0JCSAgIGJ1cy0+cGFydGl0aW9uTmFtZSwgYnVzLT5idXNObyk7Ci0JaWYgKChidXMtPmJ1c0NoYW5uZWxCeXRlcyA9PSAwKSB8fCAoYnVzLT5wQnVzQ2hhbm5lbCA9PSBOVUxMKSkKLQkJcmV0dXJuIDA7Ci0JZGV2SW5mb0NvdW50ID0KLQkgICAgKGJ1cy0+YnVzQ2hhbm5lbEJ5dGVzIC0KLQkgICAgIHNpemVvZihVTFRSQV9WQlVTX0NIQU5ORUxfUFJPVE9DT0wpKSAvCi0JICAgIHNpemVvZihVTFRSQV9WQlVTX0RFVklDRUlORk8pOwotCXggPSBWQlVTQ0hBTk5FTF9kZXZJbmZvVG9TdHJpbmdCdWZmZXIoJmJ1cy0+cEJ1c0NoYW5uZWwtPkNocEluZm8sIGJ1ZiwKLQkJCQkJICAgICAgc2l6ZW9mKGJ1ZikgLSAxLCAtMSk7Ci0JYnVmW3hdID0gJ1wwJzsKLQlzZXFfcHJpbnRmKG0sICIlcyIsIGJ1Zik7Ci0JeCA9IFZCVVNDSEFOTkVMX2RldkluZm9Ub1N0cmluZ0J1ZmZlcigmYnVzLT5wQnVzQ2hhbm5lbC0+QnVzSW5mbywKLQkJCQkJICAgICAgYnVmLCBzaXplb2YoYnVmKSAtIDEsIC0xKTsKLQlidWZbeF0gPSAnXDAnOwotCXNlcV9wcmludGYobSwgIiVzIiwgYnVmKTsKLQlmb3IgKGkgPSAwOyBpIDwgZGV2SW5mb0NvdW50OyBpKyspIHsKLQkJeCA9IFZCVVNDSEFOTkVMX2RldkluZm9Ub1N0cmluZ0J1ZmZlcigmYnVzLT5wQnVzQ2hhbm5lbC0+Ci0JCQkJCQkgICAgICBEZXZJbmZvW2ldLCBidWYsCi0JCQkJCQkgICAgICBzaXplb2YoYnVmKSAtIDEsIGkpOwotCQlpZiAoeCA+IDApIHsKLQkJCWJ1Zlt4XSA9ICdcMCc7Ci0JCQlzZXFfcHJpbnRmKG0sICIlcyIsIGJ1Zik7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1idXNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IHNlcnZlcl9mbGFnID0gMDsKLQlpbnQgaSwgYWN0aW9uID0gMHhmZmZmLCByZXN1bHQ7Ci0JY2hhciBidWZbMTZdOwotCUNPTlRST0xWTV9NRVNTQUdFIG1zZzsKLQlVMzIgYnVzTm8sIGRldmljZUNvdW50OwotCi0JaWYgKGNvdW50ID49IEFSUkFZX1NJWkUoYnVmKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKENPTlRST0xWTV9NRVNTQUdFKSk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkgewotCQlMT0dFUlIoImVjaG8gPiAvcHJvYy91aXNsaWIvYnVzOiBjb3B5X2Zyb21fdXNlciAqKioqRkFJTEVELiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpID0gc3NjYW5mKGJ1ZiwgIiV4LSVkLSVkIiwgJmFjdGlvbiwgJmJ1c05vLCAmZGV2aWNlQ291bnQpOwotCi0JLyogaWYgKGkgPCAxKSwgaS5lLiwgaWYgd2UgZGlkbid0IGV2ZW4gcmVhZCB0aGUgYWN0aW9uIGZpZWxkLAotCSogdGhlbiBhY3Rpb24gd2lsbCBkZWZhdWx0IHRvIDB4ZmZmZiBhbmQgdGhlIGNvZGUgYmVsb3cgd2lsbAotCSogZmFsbCB0aHJvdWdoIHRoZSBzd2l0Y2ggYW5kIHByaW50IHVzYWdlLgotCSovCi0Jc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIDA6Ci0JCS8qIGRlc3Ryb3kgYSBidXMgKi8KLQkJaWYgKGkgIT0gMikKLQkJCWJyZWFrOwotCQlpbml0X21zZ19oZWFkZXIoJm1zZywgQ09OVFJPTFZNX0JVU19ERVNUUk9ZLCAwLCBzZXJ2ZXJfZmxhZyk7Ci0JCW1zZy5jbWQuZGVzdHJveUJ1cy5idXNObyA9IGJ1c05vOwotCi0JCXJlc3VsdCA9IGRlc3Ryb3lfYnVzKCZtc2csIE5VTEwpOwotCi0JCWlmIChyZXN1bHQgIT0gQ09OVFJPTFZNX1JFU1BfU1VDQ0VTUykgewotCQkJTE9HRVJSKCJlY2hvIDAtJWQgPiAvcHJvYy91aXNsaWIvYnVzIHtDT05UUk9MVk1fQlVTX0RFU1RST1kgRmFpbGVkfSBSZXN1bHQoJWQpIiwKLQkJCSAgICAgYnVzTm8sIHJlc3VsdCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlyZXR1cm4gY291bnQ7Ci0JY2FzZSAxOgotCQkvKiBjcmVhdGUgYSBidXMgKi8KLQkJaWYgKGkgIT0gMykKLQkJCWJyZWFrOwotCQlpbml0X21zZ19oZWFkZXIoJm1zZywgQ09OVFJPTFZNX0JVU19DUkVBVEUsIDAsIHNlcnZlcl9mbGFnKTsKLQkJbXNnLmNtZC5jcmVhdGVCdXMuYnVzTm8gPSBidXNObzsKLQkJbXNnLmNtZC5jcmVhdGVCdXMuZGV2aWNlQ291bnQgPSBkZXZpY2VDb3VudDsKLQotCQlyZXN1bHQgPSBjcmVhdGVfYnVzKCZtc2csIE5VTEwpOwotCi0JCWlmIChyZXN1bHQgIT0gQ09OVFJPTFZNX1JFU1BfU1VDQ0VTUykgewotCQkJTE9HRVJSKCJlY2hvIDEtJWQtJWQgPiAvcHJvYy91aXNsaWIvYnVzIHtDT05UUk9MVk1fQlVTX0NSRUFURSBGYWlsZWR9IFJlc3VsdCglZCkiLAotCQkJICAgICBidXNObywgZGV2aWNlQ291bnQsIHJlc3VsdCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCXJldHVybiBjb3VudDsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlMT0dFUlIoIlVTQUdFOiBlY2hvIDxhY3Rpb24+LTxidXNObz4uLi4gPiAvcHJvYy91aXNsaWIvYnVzIik7Ci0JTE9HRVJSKCIgIik7Ci0JTE9HRVJSKCJEZXN0cnVjdCBTeW50YXggICAgIENvbnRyb2xWTSBNZXNzYWdlIElkIik7Ci0JTE9HRVJSKCItLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCUxPR0VSUigiMC08YnVzTm8+ICAgICAgID09PiBDT05UUk9MVk1fQlVTX0RFU1RST1kiKTsKLQlMT0dFUlIoIiAiKTsKLQlMT0dFUlIoIkNvbnN0cnVjdCBTeW50YXggICAgICAgICAgICBDb250cm9sVk0gTWVzc2FnZSBJZCIpOwotCUxPR0VSUigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICIpOwotCUxPR0VSUigiMS08YnVzTm8+LTxkZXZpY2VDb3VudD4gPT0+IENPTlRST0xWTV9CVVNfQ1JFQVRFIik7Ci0KLQlyZXR1cm4gLUVGQVVMVDsKLX0KLQotc3RhdGljIHNzaXplX3QKLXVpc2xpYl9wcm9jX3JlYWRfd3JpdGVvbmx5KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QKLWRldl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgc2VydmVyX2ZsYWcgPSAwOwotCUNPTlRST0xWTV9NRVNTQUdFIG1zZzsKLQlVMzIgYnVzTm8sIGRldk5vOwotCWNoYXIgYnVmWzMyXTsKLQl1bnNpZ25lZCBpbnQgY2hhbnB0cjsKLQlpbnQgdHlwZSwgaSwgYWN0aW9uID0gMHhmZmZmLCByZXN1bHQ7Ci0KLQlpZiAoY291bnQgPj0gQVJSQVlfU0laRShidWYpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7Ci0JCUxPR0VSUigiZWNobyA+IC9wcm9jL3Vpc2xpYi9kZXZpY2U6IGNvcHlfZnJvbV91c2VyICoqKipGQUlMRUQuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWkgPSBzc2NhbmYoYnVmLCAiJXgtJWQtJWQtJXgtJWQiLAotCQkgICAmYWN0aW9uLCAmYnVzTm8sICZkZXZObywgJmNoYW5wdHIsICZ0eXBlKTsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSAwOgotCQlpZiAoaSAhPSAzKQotCQkJYnJlYWs7Ci0KLQkJLyogZGVzdHJveSBhIGRldmljZSAqLwotCQlpbml0X21zZ19oZWFkZXIoJm1zZywgQ09OVFJPTFZNX0RFVklDRV9ERVNUUk9ZLCAwLCBzZXJ2ZXJfZmxhZyk7Ci0JCW1zZy5jbWQuZGVzdHJveURldmljZS5idXNObyA9IGJ1c05vOwotCQltc2cuY21kLmRlc3Ryb3lEZXZpY2UuZGV2Tm8gPSBkZXZObzsKLQotCQlyZXN1bHQgPSBkZXN0cm95X2RldmljZSgmbXNnLCBOVUxMKTsKLQotCQlpZiAocmVzdWx0ICE9IENPTlRST0xWTV9SRVNQX1NVQ0NFU1MpIHsKLQkJCUxPR0VSUigiZWNobyAwLSVkLSVkID4gL3Byb2MvdWlzbGliL2RldmljZSB7Q09OVFJPTFZNX0RFVklDRV9ERVNUUk9ZIEZhaWxlZH0gUmVzdWx0KCVkKSIsCi0JCQkgICAgIGJ1c05vLCBkZXZObywgcmVzdWx0KTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJcmV0dXJuIGNvdW50OwotCi0JY2FzZSAxOgotCQlpZiAoaSAhPSA1KQotCQkJYnJlYWs7Ci0KLQkJLyogY3JlYXRlIGEgZGV2aWNlICovCi0JCWluaXRfbXNnX2hlYWRlcigmbXNnLCBDT05UUk9MVk1fREVWSUNFX0NSRUFURSwgMCwgc2VydmVyX2ZsYWcpOwotCQltc2cuY21kLmNyZWF0ZURldmljZS5idXNObyA9IGJ1c05vOwotCQltc2cuY21kLmNyZWF0ZURldmljZS5kZXZObyA9IGRldk5vOwotCQltc2cuY21kLmNyZWF0ZURldmljZS5jaGFubmVsQWRkciA9IF9fcGEoY2hhbnB0cik7Ci0JCW1zZy5jbWQuY3JlYXRlRGV2aWNlLmNoYW5uZWxCeXRlcyA9IE1JTl9JT19DSEFOTkVMX1NJWkU7Ci0KLQkJaWYgKHR5cGUgPT0gMCkKLQkJCW1zZy5jbWQuY3JlYXRlRGV2aWNlLmRhdGFUeXBlR3VpZCA9Ci0JCQkgICAgVWx0cmFWaGJhQ2hhbm5lbFByb3RvY29sR3VpZDsKLQkJZWxzZSBpZiAodHlwZSA9PSAxKQotCQkJbXNnLmNtZC5jcmVhdGVEZXZpY2UuZGF0YVR5cGVHdWlkID0KLQkJCSAgICBVbHRyYVZuaWNDaGFubmVsUHJvdG9jb2xHdWlkOwotCQllbHNlIHsKLQkJCUxPR0VSUigiZWNobyAxLSVkLSVkLSV4LTx0eXBlPiA+IC9wcm9jL3Vpc2xpYi9kZXZjZSBmYWlsZWQ6IGludmFsaWQgZGV2aWNlIHR5cGUgJWQuIiwKLQkJCSAgICAgYnVzTm8sIGRldk5vLCBjaGFucHRyLCB0eXBlKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJcmVzdWx0ID0gY3JlYXRlX2RldmljZSgmbXNnLCBOVUxMKTsKLQotCQlpZiAocmVzdWx0ICE9IENPTlRST0xWTV9SRVNQX1NVQ0NFU1MpIHsKLQkJCWlmICh0eXBlID09IDApCi0JCQkJTE9HRVJSKCJlY2hvIDEtJWQtJWQtJXgtMCA+IC9wcm9jL3Vpc2xpYi9kZXZpY2Uge0NPTlRST0xWTV9ERVZJQ0VfQ1JFQVRFW3ZIQkFdIEZhaWxlZH0gUmVzdWx0KCVkKSIsCi0JCQkJICAgICBidXNObywgZGV2Tm8sIGNoYW5wdHIsIHJlc3VsdCk7Ci0JCQllbHNlCi0JCQkJTE9HRVJSKCJlY2hvIDEtJWQtJWQtJXgtMSA+IC9wcm9jL3Vpc2xpYi9kZXZpY2Uge0NPTlRST0xWTV9ERVZJQ0VfQ1JFQVRFW3ZOSUNdIEZhaWxlZH0gUmVzdWx0KCVkKSIsCi0JCQkJICAgICBidXNObywgZGV2Tm8sIGNoYW5wdHIsIHJlc3VsdCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JTE9HRVJSKCJVU0FHRTogZWNobyA8YWN0aW9uPi08YnVzTm8+LTxkZXZObz4uLi4gPiAvcHJvYy91aXNsaWIvZGV2aWNlIik7Ci0JTE9HRVJSKCIgIik7Ci0JTE9HRVJSKCJEZXN0cnVjdCBTeW50YXggICAgICAgQ29udHJvbFZNIE1lc3NhZ2UgSWQiKTsKLQlMT0dFUlIoIi0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlMT0dFUlIoIjAtPGJ1c05vPi08ZGV2Tm8+ID09PiBDT05UUk9MVk1fREVWSUNFX0RFU1RST1kiKTsKLQlMT0dFUlIoIiAiKTsKLQlMT0dFUlIoIkNvbnN0cnVjdCBTeW50YXggICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xWTSBNZXNzYWdlIElkIik7Ci0JTE9HRVJSCi0JICAgICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIik7Ci0JTE9HRVJSCi0JICAgICgiMS08YnVzTm8+LTxkZXZObz4tPGNoYW5wdHI+LTx0eXBlPiA9PT4gQ09OVFJPTFZNX0RFVklDRV9DUkVBVEUiKTsKLQlMT0dFUlIoIiAgICAgIDx0eXBlID0gMD46IHZIQkEiKTsKLQlMT0dFUlIoIiAgICAgIDx0eXBlID0gMT46IHZOSUMiKTsKLQlMT0dFUlIoIiAiKTsKLQotCXJldHVybiAtRUZBVUxUOwotfQotCi1zdGF0aWMgc3NpemVfdAotY3ljbGVzX2JlZm9yZV93YWl0X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGJ1ZlsxNl07Ci0KLSNkZWZpbmUgQ1lDTEVTX0JFRk9SRV9XQUlUX1VTRV9FUlJPUiAgeyBcCi0JTE9HRVJSKCJJbmNvcnJlY3QgQ2FsbCBIb21lIElucHV0LlxuIik7IFwKLQlwcl9pbmZvKCJQbGVhc2UgcGFzcyBDYWxsIEhvbWUgRXZlbnQgUGFyYW1ldGVycyBpbiB0aGUgZm9ybTpcbiIpOyBcCi0JcHJfaW5mbygiRXZlbnRJRCBDYXRlZ29yeSBUeXBlW3BhcmFtZXRlcjFdW3BhcmFtZXRlcjJdW3BhcmFtZXRlcjNdW3BhcmFtZXRlcjRdW3BhcmFtZXRlcjVdW3BhcmFtZXRlcjZdXG4iKTsgXAotCXJldHVybiAtRUZBVUxUOyBcCi19Ci0JaWYgKGNvdW50ID49IEFSUkFZX1NJWkUoYnVmKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY291bnQgPT0gMCkKLQkJQ1lDTEVTX0JFRk9SRV9XQUlUX1VTRV9FUlJPUjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7Ci0JCUxPR0VSUigiY29weV9mcm9tX3VzZXIgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlidWZbY291bnQgLSAxXSA9ICdcMCc7CS8qIFJlcGxhY2UgdGhlIExGIGF0IHRoZSBlbmQgb2YgdGhlCi0JCQkJICogaW5wdXQgd2l0aCBhIE5VTEwgKi8KLQkvKiBQdWxsIG91dCB0aGUgY3ljbGVzX2JlZm9yZV93YWl0IG11c3QgYmUgZGVjaW1hbCBpbnRlZ2VyICovCi0JaWYgKHNzY2FuZihidWYsICIlbGxkIiwgJmN5Y2xlc19iZWZvcmVfd2FpdCkgIT0gMSkKLQkJQ1lDTEVTX0JFRk9SRV9XQUlUX1VTRV9FUlJPUjsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QKLXJlc2V0X2NvdW50c19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciBidWZbMTZdOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfdmFsdWU7Ci0Jc3RydWN0IGJ1c19pbmZvICpidXM7Ci0JaW50IGk7Ci0KLSNkZWZpbmUgUkVTRVRfQ09VTlRTX1VTRV9FUlJPUiAgeyBcCi0JTE9HRVJSKCJJbmNvcnJlY3QgcmVzZXRfY291bnRzIElucHV0LlxuIik7IFwKLQlwcl9pbmZvKCJQbGVhc2UgcGFzcyB0aGUgbmV3IHZhbHVlIGZvciB0aGUgY291bnRlcnM6XG4iKTsgXAotCXByX2luZm8oImUuZy4gZWNobyAwID4gcmVzZXRfY291bnRzXG4iKTsgXAotCXJldHVybiAtRUZBVUxUOyBcCi0JfQotCi0JaWYgKGNvdW50ID49IEFSUkFZX1NJWkUoYnVmKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY291bnQgPT0gMCkKLQkJUkVTRVRfQ09VTlRTX1VTRV9FUlJPUjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7Ci0JCUxPR0VSUigiY29weV9mcm9tX3VzZXIgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlidWZbY291bnQgLSAxXSA9ICdcMCc7CS8qIFJlcGxhY2UgdGhlIExGIGF0IHRoZSBlbmQgb2YgdGhlCi0JCQkJICogaW5wdXQgd2l0aCBhIE5VTEwgKi8KLQkvKiBQdWxsIG91dCB0aGUgcmVzZXRfY291bnRzIG11c3QgYmUgZGVjaW1hbCBpbnRlZ2VyICovCi0JaWYgKHNzY2FuZihidWYsICIlbGx1IiwgJm5ld192YWx1ZSkgIT0gMSkKLQkJUkVTRVRfQ09VTlRTX1VTRV9FUlJPUjsKLQlyZWFkX2xvY2soJkJ1c0xpc3RMb2NrKTsKLQlmb3IgKGJ1cyA9IEJ1c0xpc3RIZWFkOyBidXM7IGJ1cyA9IGJ1cy0+bmV4dCkgewotCi0JCWZvciAoaSA9IDA7IGkgPCBidXMtPmRldmljZUNvdW50OyBpKyspIHsKLQkJCWlmIChidXMtPmRldmljZVtpXSkgewotCQkJCWJ1cy0+ZGV2aWNlW2ldLT5maXJzdF9idXN5X2NudCA9IG5ld192YWx1ZTsKLQkJCQlidXMtPmRldmljZVtpXS0+bW92ZWRfdG9fdGFpbF9jbnQgPSBuZXdfdmFsdWU7Ci0JCQkJYnVzLT5kZXZpY2VbaV0tPmxhc3Rfb25fbGlzdF9jbnQgPSBuZXdfdmFsdWU7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2soJkJ1c0xpc3RMb2NrKTsKLQl0b3RfbW92ZWRfdG9fdGFpbF9jbnQgPSBuZXdfdmFsdWU7Ci0JdG90X3dhaXRfY250ID0gbmV3X3ZhbHVlOwotCXRvdF93YWtldXBfY250ID0gbmV3X3ZhbHVlOwotCXRvdF9zY2hlZHVsZV9jbnQgPSBuZXdfdmFsdWU7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdAotc21hcnRfd2FrZXVwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGJ1ZlsxNl07Ci0JaW50IG5ld192YWx1ZTsKLQotI2RlZmluZSBTTUFSVF9XQUtFVVBfVVNFX0VSUk9SICB7IFwKLQlMT0dFUlIoIkluY29ycmVjdCBzbWFydF93YWtldXAgSW5wdXQgMCBkaXNhYmxlcyBzbWFydF93YWtldXAsIGFuZCAxIGVuYWJsZXMgc21hcnRfd2FrZXVwLlxuIik7IFwKLQlwcl9pbmZvKCJlY2hvIDAgPiBzbWFydF93YWtldXBcbiIpOyBcCi0JcHJfaW5mbygiZWNobyAxID4gc21hcnRfd2FrZXVwXG4iKTsgXAotCXJldHVybiAtRUZBVUxUOyBcCi0JfQotCi0JaWYgKGNvdW50ID49IEFSUkFZX1NJWkUoYnVmKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY291bnQgPT0gMCkKLQkJU01BUlRfV0FLRVVQX1VTRV9FUlJPUjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7Ci0JCUxPR0VSUigiY29weV9mcm9tX3VzZXIgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlidWZbY291bnQgLSAxXSA9ICdcMCc7CS8qIFJlcGxhY2UgdGhlIExGIGF0IHRoZSBlbmQgb2YgdGhlCi0JCQkJICogaW5wdXQgd2l0aCBhIE5VTEwgKi8KLQkvKiBQdWxsIG91dCB0aGUgc21hcnRfd2FrZXVwIG11c3QgYmUgZGVjaW1hbCBpbnRlZ2VyICovCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpCi0JCVNNQVJUX1dBS0VVUF9VU0VfRVJST1I7Ci0JZW5fc21hcnRfd2FrZXVwID0gbmV3X3ZhbHVlOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QKLXRlc3RfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IGksIGFjdGlvbiA9IDB4ZmZmZjsKLQljaGFyIGJ1ZlsxNl07Ci0JQ09OVFJPTFZNX01FU1NBR0UgbXNnOwotCVM2NCB2cnRjX29mZnNldDsKLQotCWlmIChjb3VudCA+PSBBUlJBWV9TSVpFKGJ1ZikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZtc2csIDAsIHNpemVvZihDT05UUk9MVk1fTUVTU0FHRSkpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKLQkJTE9HRVJSKCJjb3B5X2Zyb21fdXNlciAqKioqRkFJTEVELlxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWkgPSBzc2NhbmYoYnVmLCAiJXgiLCAmYWN0aW9uKTsKLQotCS8qIGlmIChpIDwgMSksIGkuZS4sIGlmIHdlIGRpZG4ndCBldmVuIHJlYWQgdGhlIGFjdGlvbiBmaWVsZCwKLQkqIHRoZW4gYWN0aW9uIHdpbGwgZGVmYXVsdCB0byAweGZmZmYgYW5kIHRoZSBjb2RlIGJlbG93IHdpbGwKLQkqIGZhbGwgdGhyb3VnaCB0aGUgc3dpdGNoIGFuZCBwcmludCB1c2FnZS4gKi8KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgNjoKLQkJbXNnLmhkci5JZCA9IENPTlRST0xWTV9DSElQU0VUX1NUT1A7Ci0JCW1zZy5oZHIuRmxhZ3MucmVzcG9uc2VFeHBlY3RlZCA9IDE7Ci0JCXN0b3BfY2hpcHNldCgmbXNnLCBOVUxMKTsKLQkJYnJlYWs7Ci0JY2FzZSA3OgotCQl2cnRjX29mZnNldCA9IDA7Ci0JCUxPR0VSUigiYWJvdXQgdG8gaXNzdWUgUVVFUlkgdnJ0Y19vZmZzZXQ9JUxYIiwgdnJ0Y19vZmZzZXQpOwotCQl2cnRjX29mZnNldCA9IElzc3VlX1ZNQ0FMTF9RVUVSWV9HVUVTVF9WSVJUVUFMX1RJTUVfT0ZGU0VUKCk7Ci0JCUxPR0VSUigicmVzdWx0IGlzIHZydGNfb2Zmc2V0PSVMWCIsIHZydGNfb2Zmc2V0KTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQl2cnRjX29mZnNldCA9IDYwOwotCQlMT0dFUlIoImFib3V0IHRvIGluY3JlYXNlIHBoeXNpY2FsIHRpbWUgYnkgMHglTFggc2Vjb25kcyIsCi0JCSAgICAgICB2cnRjX29mZnNldCk7Ci0JCXZydGNfb2Zmc2V0ID0gSXNzdWVfVk1DQUxMX1VQREFURV9QSFlTSUNBTF9USU1FKHZydGNfb2Zmc2V0KTsKLQkJYnJlYWs7Ci0JY2FzZSA5OgotCQl2cnRjX29mZnNldCA9IC02MDsKLQkJTE9HRVJSKCJhYm91dCB0byBkZWNyZWFzZSBwaHlzaWNhbCB0aW1lIGJ5IDB4JUxYIHNlY29uZHMiLAotCQkgICAgICAgdnJ0Y19vZmZzZXQpOwotCQl2cnRjX29mZnNldCA9IElzc3VlX1ZNQ0FMTF9VUERBVEVfUEhZU0lDQUxfVElNRSh2cnRjX29mZnNldCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUxPR0VSUigidXNhZ2U6IDYgZm9yIENISVBTRVRfU1RPUFxuIik7Ci0JCUxPR0VSUigiICAgICAgIDcgZm9yIFZNQ0FMTF9RVUVSWV9HVUVTVF9WSVJUVUFMX1RJTUVfT0ZGU0VUKClcbiIpOwotCQlMT0dFUlIoIiAgICAgICA4IGZvciBWTUNBTExfVVBEQVRFX1BIWVNJQ0FMX1RJTUUoNjApXG4iKTsKLQkJTE9HRVJSKCIgICAgICAgOSBmb3IgVk1DQUxMX1VQREFURV9QSFlTSUNBTF9USU1FKC02MClcbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotI2VuZGlmCQkJCS8qIFVJU0xJQl9URVNUX1BST0MgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2luZm8gKgogZmluZF9kZXYoVTMyIGJ1c05vLCBVMzIgZGV2Tm8pCiB7CkBAIC0yMjc3LDYgKzE1NTIsOSBAQAogdWlzbGliX21vZF9pbml0KHZvaWQpCiB7CiAKKwlpZiAoIXVuaXN5c19zcGFyX3BsYXRmb3JtKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCUxPR0lORigiTU9OSVRPUkFQSVMiKTsKIAogCUxPR0lORigic2l6ZW9mKHN0cnVjdCB1aXNjbWRyc3ApOiVsdSBieXRlc1xuIiwKQEAgLTIzMDgsNTkgKzE1ODYsMjUgQEAKIAkgKiB0aGVuIG1hcCB0aGlzIHBoeXNpY2FsIGFkZHJlc3MgdG8gYSB2aXJ0dWFsIGFkZHJlc3MuICovCiAJUE9TVENPREVfTElOVVhfMihEUklWRVJfRU5UUllfUEMsIFBPU1RDT0RFX1NFVkVSSVRZX0lORk8pOwogCi0JLyogY3JlYXRlIHRoZSBwcm9jIGVudHJpZXMgZm9yIHRoZSBjaGFubmVscyAqLwotCXVpc2xpYl9wcm9jX2RpciA9IHByb2NfbWtkaXIoRElSX1BST0NfRU5UUlksIE5VTEwpOwotCS8qIChlLmcuLCBmb3IgL3Byb2MvdWlzbGliL3ZidXMvPHg+L2luZm8pICovCi0JdWlzbGliX3Byb2NfdmJ1c19kaXIgPSBwcm9jX21rZGlyKERJUl9WQlVTX1BST0NfRU5UUlksIHVpc2xpYl9wcm9jX2Rpcik7CisJZGlyX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoRElSX0RFQlVHRlNfRU5UUlksIE5VTEwpOworCWlmIChkaXJfZGVidWdmcykgeworCQlpbmZvX2RlYnVnZnNfZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKAorCQkJSU5GT19ERUJVR0ZTX0VOVFJZX0ZOLCAwNDQ0LCBkaXJfZGVidWdmcywgTlVMTCwKKwkJCSZkZWJ1Z2ZzX2luZm9fZm9wcyk7CiAKLQl2bmljX3Byb2NfZW50cnkgPSBwcm9jX2NyZWF0ZShWTklDX1BST0NfRU5UUllfRk4sIDAsIHVpc2xpYl9wcm9jX2RpciwKLQkJCQkgICAgICAmcHJvY192bmljX2ZvcHMpOwotCVNFVF9QUk9DX09XTkVSKHZuaWNfcHJvY19lbnRyeSwgVEhJU19NT0RVTEUpOworCQlwbGF0Zm9ybW51bWJlcl9kZWJ1Z2ZzX3JlYWQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoCisJCQlQTEFURk9STU5VTUJFUl9ERUJVR0ZTX0VOVFJZX0ZOLCAwNDQ0LCBkaXJfZGVidWdmcywKKwkJCSZQbGF0Zm9ybU51bWJlcik7CiAKLQkvKiBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LCBjcmVhdGUgdGhlIHByb2MgZW50cmllcyBmb3IKLQkgKiBlbnF1ZXVpbmcgQ29udHJvbCBDaGFubmVsIG1lc3NhZ2VzICovCi0JY2hpcHNldF9wcm9jX2VudHJ5ID0KLQkgICAgcHJvY19jcmVhdGUoQ0hJUFNFVF9QUk9DX0VOVFJZX0ZOLCAwLCB1aXNsaWJfcHJvY19kaXIsCi0JCQkmcHJvY19jaGlwc2V0X2ZvcHMpOwotCVNFVF9QUk9DX09XTkVSKGNoaXBzZXRfcHJvY19lbnRyeSwgVEhJU19NT0RVTEUpOworCQljeWNsZXNfYmVmb3JlX3dhaXRfZGVidWdmc19yZWFkID0gZGVidWdmc19jcmVhdGVfdTY0KAorCQkJQ1lDTEVTX0JFRk9SRV9XQUlUX0RFQlVHRlNfRU5UUllfRk4sIDA2NjYsIGRpcl9kZWJ1Z2ZzLAorCQkJJmN5Y2xlc19iZWZvcmVfd2FpdCk7CiAKLQlpbmZvX3Byb2NfZW50cnkgPSBwcm9jX2NyZWF0ZShJTkZPX1BST0NfRU5UUllfRk4sIDAsIHVpc2xpYl9wcm9jX2RpciwKLQkJCQkgICAgICAmcHJvY19pbmZvX2ZvcHMpOwotCVNFVF9QUk9DX09XTkVSKGluZm9fcHJvY19lbnRyeSwgVEhJU19NT0RVTEUpOworCQlzbWFydF93YWtldXBfZGVidWdmc19lbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2Jvb2woCisJCQlTTUFSVF9XQUtFVVBfREVCVUdGU19FTlRSWV9GTiwgMDY2NiwgZGlyX2RlYnVnZnMsCisJCQkmZW5fc21hcnRfd2FrZXVwKTsKKwl9CiAKLQlwbGF0Zm9ybW51bWJlcl9wcm9jX2VudHJ5ID0KLQkgICAgcHJvY19jcmVhdGUoUExBVEZPUk1OVU1CRVJfUFJPQ19FTlRSWV9GTiwgMCwgdWlzbGliX3Byb2NfZGlyLAotCQkJJnByb2NfcGxhdGZvcm1udW1iZXJfZm9wcyk7Ci0JU0VUX1BST0NfT1dORVIocGxhdGZvcm1udW1iZXJpbmZvX3Byb2NfZW50cnksIFRISVNfTU9EVUxFKTsKLQotCWN5Y2xlc19iZWZvcmVfd2FpdF9wcm9jX2VudHJ5ID0KLQkgICAgcHJvY19jcmVhdGUoQ1lDTEVTX0JFRk9SRV9XQUlUX1BST0NfRU5UUllfRk4sIDAsIHVpc2xpYl9wcm9jX2RpciwKLQkJCSZwcm9jX2N5Y2xlc19iZWZvcmVfd2FpdF9mb3BzKTsKLQlTRVRfUFJPQ19PV05FUihjeWNsZXNfYmVmb3JlX3dhaXRfcHJvY19lbnRyeSwgVEhJU19NT0RVTEUpOwotCi0JcmVzZXRfY291bnRzX3Byb2NfZW50cnkgPQotCSAgICBwcm9jX2NyZWF0ZShSRVNFVF9DT1VOVFNfUFJPQ19FTlRSWV9GTiwgMCwgdWlzbGliX3Byb2NfZGlyLAotCQkJJnByb2NfcmVzZXRfY291bnRzX2ZvcHMpOwotCVNFVF9QUk9DX09XTkVSKHJlc2V0X2NvdW50c19wcm9jX2VudHJ5LCBUSElTX01PRFVMRSk7Ci0KLQlzbWFydF93YWtldXBfcHJvY19lbnRyeSA9Ci0JICAgIHByb2NfY3JlYXRlKFNNQVJUX1dBS0VVUF9QUk9DX0VOVFJZX0ZOLCAwLCB1aXNsaWJfcHJvY19kaXIsCi0JCQkmcHJvY19zbWFydF93YWtldXBfZm9wcyk7Ci0JU0VUX1BST0NfT1dORVIoc21hcnRfd2FrZXVwX3Byb2NfZW50cnksIFRISVNfTU9EVUxFKTsKLQotI2lmZGVmIFVJU0xJQl9URVNUX1BST0MKLQl0ZXN0X3Byb2NfZW50cnkgPSBwcm9jX2NyZWF0ZShURVNUX1BST0NfRU5UUllfRk4sIDAsIHVpc2xpYl9wcm9jX2RpciwKLQkJCQkgICAgICAmcHJvY190ZXN0X2ZvcHMpOwotCVNFVF9QUk9DX09XTkVSKHRlc3RfcHJvY19lbnRyeSwgVEhJU19NT0RVTEUpOwotCi0JYnVzX3Byb2NfZW50cnkgPSBwcm9jX2NyZWF0ZShCVVNfUFJPQ19FTlRSWV9GTiwgMCwgdWlzbGliX3Byb2NfZGlyLAotCQkJCSAgICAgJnByb2NfYnVzX2ZvcHMpOwotCVNFVF9QUk9DX09XTkVSKGJ1c19wcm9jX2VudHJ5LCBUSElTX01PRFVMRSk7Ci0KLQlkZXZfcHJvY19lbnRyeSA9IHByb2NfY3JlYXRlKERFVl9QUk9DX0VOVFJZX0ZOLCAwLCB1aXNsaWJfcHJvY19kaXIsCi0JCQkJICAgICAmcHJvY19kZXZfZm9wcyk7Ci0JU0VUX1BST0NfT1dORVIoZGV2X3Byb2NfZW50cnksIFRISVNfTU9EVUxFKTsKLSNlbmRpZgkJCQkvKiBVSVNMSUJfVEVTVF9QUk9DICovCiAJUE9TVENPREVfTElOVVhfMyhEUklWRVJfRVhJVF9QQywgMCwgUE9TVENPREVfU0VWRVJJVFlfSU5GTyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzY4LDQ2ICsxNjEyLDE3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHVpc2xpYl9tb2RfZXhpdCh2b2lkKQogewotCWlmIChkaXNhYmxlX3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KERJU0FCTEVfUFJPQ19FTlRSWV9GTiwgdWlzbGliX3Byb2NfZGlyKTsKLQlpZiAoY3ljbGVzX2JlZm9yZV93YWl0X3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KENZQ0xFU19CRUZPUkVfV0FJVF9QUk9DX0VOVFJZX0ZOLAotCQkJCSAgdWlzbGliX3Byb2NfZGlyKTsKLQlpZiAocmVzZXRfY291bnRzX3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFJFU0VUX0NPVU5UU19QUk9DX0VOVFJZX0ZOLCB1aXNsaWJfcHJvY19kaXIpOwotCWlmIChzbWFydF93YWtldXBfcHJvY19lbnRyeSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoU01BUlRfV0FLRVVQX1BST0NfRU5UUllfRk4sIHVpc2xpYl9wcm9jX2Rpcik7Ci0JaWYgKGN0cmxjaGFuX3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KENUUkxDSEFOX1BST0NfRU5UUllfRk4sIHVpc2xpYl9wcm9jX2Rpcik7Ci0JaWYgKHBtZW1fcHJvY19lbnRyeSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoUE1FTV9QUk9DX0VOVFJZX0ZOLCB1aXNsaWJfcHJvY19kaXIpOwotCWlmIChpbmZvX3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KElORk9fUFJPQ19FTlRSWV9GTiwgdWlzbGliX3Byb2NfZGlyKTsKLQlpZiAoc3dpdGNoX3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFNXSVRDSF9QUk9DX0VOVFJZX0ZOLCB1aXNsaWJfcHJvY19kaXIpOwotCWlmIChleHRwb3J0X3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KEVYVFBPUlRfUFJPQ19FTlRSWV9GTiwgdWlzbGliX3Byb2NfZGlyKTsKLQlpZiAocGxhdGZvcm1udW1iZXJfcHJvY19lbnRyeSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoUExBVEZPUk1OVU1CRVJfUFJPQ19FTlRSWV9GTiwKLQkJCQkgIHVpc2xpYl9wcm9jX2Rpcik7Ci0JaWYgKGJ1c19wcm9jX2VudHJ5KQotCQlyZW1vdmVfcHJvY19lbnRyeShCVVNfUFJPQ19FTlRSWV9GTiwgdWlzbGliX3Byb2NfZGlyKTsKLQlpZiAoZGV2X3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KERFVl9QUk9DX0VOVFJZX0ZOLCB1aXNsaWJfcHJvY19kaXIpOwotCWlmICh2bmljX3Byb2NfZW50cnkpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFZOSUNfUFJPQ19FTlRSWV9GTiwgdWlzbGliX3Byb2NfZGlyKTsKLQlpZiAoY2hpcHNldF9wcm9jX2VudHJ5KQotCQlyZW1vdmVfcHJvY19lbnRyeShDSElQU0VUX1BST0NfRU5UUllfRk4sIHVpc2xpYl9wcm9jX2Rpcik7Ci0JaWYgKHVpc2xpYl9wcm9jX3ZidXNfZGlyKQotCQlyZW1vdmVfcHJvY19lbnRyeShESVJfVkJVU19QUk9DX0VOVFJZLCB1aXNsaWJfcHJvY19kaXIpOwotCWlmICh1aXNsaWJfcHJvY19kaXIpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KERJUl9QUk9DX0VOVFJZLCBOVUxMKTsKLQogCWlmIChQcm9jUmVhZEJ1ZmZlcikgewogCQl2ZnJlZShQcm9jUmVhZEJ1ZmZlcik7CiAJCVByb2NSZWFkQnVmZmVyID0gTlVMTDsKIAl9CiAKKwlkZWJ1Z2ZzX3JlbW92ZShpbmZvX2RlYnVnZnNfZW50cnkpOworCWRlYnVnZnNfcmVtb3ZlKHNtYXJ0X3dha2V1cF9kZWJ1Z2ZzX2VudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShjeWNsZXNfYmVmb3JlX3dhaXRfZGVidWdmc19yZWFkKTsKKwlkZWJ1Z2ZzX3JlbW92ZShwbGF0Zm9ybW51bWJlcl9kZWJ1Z2ZzX3JlYWQpOworCWRlYnVnZnNfcmVtb3ZlKGRpcl9kZWJ1Z2ZzKTsKKwogCURCR0lORigiZ29vZGJ5ZS5cbiIpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc3F1ZXVlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Vpc2xpYi91aXNxdWV1ZS5jCmluZGV4IDQwNTk4ZmYuLmQ0YTYwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc3F1ZXVlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy91aXNsaWIvdWlzcXVldWUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHVpc3F1ZXVlLmMKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Vpc2xpYi91aXN0aHJlYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc3RocmVhZC5jCmluZGV4IDc4MmIwNmEuLmM5M2FiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc3RocmVhZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc3RocmVhZC5jCkBAIC0xLDYgKzEsNiBAQAogLyogdWlzdGhyZWFkLmMKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Vpc2xpYi91aXN1dGlscy5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy91aXNsaWIvdWlzdXRpbHMuYwppbmRleCAzMTc4Zjc1Li4wZjFiYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Vpc2xpYi91aXN1dGlscy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdWlzbGliL3Vpc3V0aWxzLmMKQEAgLTEsNiArMSw2IEBACiAvKiB1aXN1dGlscy5jCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjQsOCArMjQsOSBAQAogI2luY2x1ZGUgInVpc3V0aWxzLmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgogI2luY2x1ZGUgInZidXNoZWxwZXIuaCIKLSNpbmNsdWRlICJndWlkdXRpbHMuaCIKKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgogI2lmZGVmIENPTkZJR19ISUdITUVNCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2VuZGlmCkBAIC0xMDQsNyArMTA1LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHVpc2N0cmxfcmVnaXN0ZXJfcmVxX2hhbmRsZXIpOwogCiBpbnQKLXVpc2N0cmxfcmVnaXN0ZXJfcmVxX2hhbmRsZXJfZXgoR1VJRCBzd2l0Y2hUeXBlR3VpZCwKK3Vpc2N0cmxfcmVnaXN0ZXJfcmVxX2hhbmRsZXJfZXgodXVpZF9sZSBzd2l0Y2hUeXBlR3VpZCwKIAkJCQljb25zdCBjaGFyICpzd2l0Y2hfdHlwZV9uYW1lLAogCQkJCWludCAoKmNvbnRyb2xmdW5jKShzdHJ1Y3QgaW9fbXNncyAqKSwKIAkJCQl1bnNpZ25lZCBsb25nIG1pbl9jaGFubmVsX2J5dGVzLApAQCAtMTE1LDI0ICsxMTYsMjIgQEAKIAkJCQkgIFUzMiBjbGllbnRTdHJMZW4sIFU2NCBieXRlcyksCiAJCQkJVUxUUkFfVkJVU19ERVZJQ0VJTkZPICpjaGlwc2V0X0RyaXZlckluZm8pCiB7Ci0JY2hhciBzWzk5XTsKIAlSZXFIYW5kbGVySW5mb190ICpwUmVxSGFuZGxlckluZm87CiAJaW50IHJjID0gMDsJCS8qIGFzc3VtZSBmYWlsdXJlICovCi0JTE9HSU5GKCJ0eXBlPSVzLCBjb250cm9sZnVuYz0weCVwLlxuIiwKLQkgICAgICAgR1VJRF9mb3JtYXQxKCZzd2l0Y2hUeXBlR3VpZCwgcyksIGNvbnRyb2xmdW5jKTsKKwlMT0dJTkYoInR5cGU9JXBVTCwgY29udHJvbGZ1bmM9MHglcC5cbiIsCisJICAgICAgICZzd2l0Y2hUeXBlR3VpZCwgY29udHJvbGZ1bmMpOwogCWlmICghY29udHJvbGZ1bmMpIHsKLQkJTE9HRVJSKCIlczogY29udHJvbGZ1bmMgbXVzdCBiZSBzdXBwbGllZFxuIiwKLQkJICAgICAgIEdVSURfZm9ybWF0MSgmc3dpdGNoVHlwZUd1aWQsIHMpKTsKKwkJTE9HRVJSKCIlcFVMOiBjb250cm9sZnVuYyBtdXN0IGJlIHN1cHBsaWVkXG4iLCAmc3dpdGNoVHlwZUd1aWQpOwogCQlnb3RvIEF3YXk7CiAJfQogCWlmICghU2VydmVyX0NoYW5uZWxfT2spIHsKLQkJTE9HRVJSKCIlczogU2VydmVyX0NoYW5uZWxfT2sgbXVzdCBiZSBzdXBwbGllZFxuIiwKLQkJICAgICAgIEdVSURfZm9ybWF0MSgmc3dpdGNoVHlwZUd1aWQsIHMpKTsKKwkJTE9HRVJSKCIlcFVMOiBTZXJ2ZXJfQ2hhbm5lbF9PayBtdXN0IGJlIHN1cHBsaWVkXG4iLAorCQkJCSZzd2l0Y2hUeXBlR3VpZCk7CiAJCWdvdG8gQXdheTsKIAl9CiAJaWYgKCFTZXJ2ZXJfQ2hhbm5lbF9Jbml0KSB7Ci0JCUxPR0VSUigiJXM6IFNlcnZlcl9DaGFubmVsX0luaXQgbXVzdCBiZSBzdXBwbGllZFxuIiwKLQkJICAgICAgIEdVSURfZm9ybWF0MSgmc3dpdGNoVHlwZUd1aWQsIHMpKTsKKwkJTE9HRVJSKCIlcFVMOiBTZXJ2ZXJfQ2hhbm5lbF9Jbml0IG11c3QgYmUgc3VwcGxpZWRcbiIsCisJCQkJJnN3aXRjaFR5cGVHdWlkKTsKIAkJZ290byBBd2F5OwogCX0KIAlwUmVxSGFuZGxlckluZm8gPSBSZXFIYW5kbGVyQWRkKHN3aXRjaFR5cGVHdWlkLApAQCAtMTQxLDggKzE0MCw3IEBACiAJCQkJCW1pbl9jaGFubmVsX2J5dGVzLAogCQkJCQlTZXJ2ZXJfQ2hhbm5lbF9PaywgU2VydmVyX0NoYW5uZWxfSW5pdCk7CiAJaWYgKCFwUmVxSGFuZGxlckluZm8pIHsKLQkJTE9HRVJSKCJmYWlsZWQgdG8gYWRkICVzIHRvIHNlcnZlciBsaXN0XG4iLAotCQkgICAgICAgR1VJRF9mb3JtYXQxKCZzd2l0Y2hUeXBlR3VpZCwgcykpOworCQlMT0dFUlIoImZhaWxlZCB0byBhZGQgJXBVTCB0byBzZXJ2ZXIgbGlzdFxuIiwgJnN3aXRjaFR5cGVHdWlkKTsKIAkJZ290byBBd2F5OwogCX0KIApAQCAtMTU2LDMwICsxNTQsMjcgQEAKIAkJCQkJICAgVkVSU0lPTiwgTlVMTCwKIAkJCQkJICAgX19EQVRFX18sIF9fVElNRV9fKTsKIAl9IGVsc2UKLQkJTE9HRVJSKCJmYWlsZWQgdG8gcmVnaXN0ZXIgdHlwZSAlcy5cbiIsCi0JCSAgICAgICBHVUlEX2Zvcm1hdDEoJnN3aXRjaFR5cGVHdWlkLCBzKSk7CisJCUxPR0VSUigiZmFpbGVkIHRvIHJlZ2lzdGVyIHR5cGUgJXBVTC5cbiIsICZzd2l0Y2hUeXBlR3VpZCk7CiAKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1aXNjdHJsX3JlZ2lzdGVyX3JlcV9oYW5kbGVyX2V4KTsKIAogaW50Ci11aXNjdHJsX3VucmVnaXN0ZXJfcmVxX2hhbmRsZXJfZXgoR1VJRCBzd2l0Y2hUeXBlR3VpZCkKK3Vpc2N0cmxfdW5yZWdpc3Rlcl9yZXFfaGFuZGxlcl9leCh1dWlkX2xlIHN3aXRjaFR5cGVHdWlkKQogewotCWNoYXIgc1s5OV07CiAJaW50IHJjID0gMDsJCS8qIGFzc3VtZSBmYWlsdXJlICovCi0JTE9HSU5GKCJ0eXBlPSVzLlxuIiwgR1VJRF9mb3JtYXQxKCZzd2l0Y2hUeXBlR3VpZCwgcykpOworCUxPR0lORigidHlwZT0lcFVMLlxuIiwgJnN3aXRjaFR5cGVHdWlkKTsKIAlpZiAoUmVxSGFuZGxlckRlbChzd2l0Y2hUeXBlR3VpZCkgPCAwKSB7Ci0JCUxPR0VSUigiZmFpbGVkIHRvIHJlbW92ZSAlcyBmcm9tIHNlcnZlciBsaXN0XG4iLAotCQkgICAgICAgR1VJRF9mb3JtYXQxKCZzd2l0Y2hUeXBlR3VpZCwgcykpOworCQlMT0dFUlIoImZhaWxlZCB0byByZW1vdmUgJXBVTCBmcm9tIHNlcnZlciBsaXN0XG4iLAorCQkJCSZzd2l0Y2hUeXBlR3VpZCk7CiAJCWdvdG8gQXdheTsKIAl9CiAJYXRvbWljX2RlYygmVWlzVXRpbHNfUmVnaXN0ZXJlZF9TZXJ2aWNlcyk7CiAJcmMgPSAxOwkJCS8qIHN1Y2Nlc3MgKi8KIEF3YXk6CiAJaWYgKCFyYykKLQkJTE9HRVJSKCJmYWlsZWQgdG8gdW5yZWdpc3RlciB0eXBlICVzLlxuIiwKLQkJICAgICAgIEdVSURfZm9ybWF0MSgmc3dpdGNoVHlwZUd1aWQsIHMpKTsKKwkJTE9HRVJSKCJmYWlsZWQgdG8gdW5yZWdpc3RlciB0eXBlICVwVUwuXG4iLCAmc3dpdGNoVHlwZUd1aWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVpc2N0cmxfdW5yZWdpc3Rlcl9yZXFfaGFuZGxlcl9leCk7CkBAIC0yODEsNyArMjc2LDcgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soUmVxSGFuZGxlckluZm9fbGlzdF9sb2NrKTsKIAogUmVxSGFuZGxlckluZm9fdCAqCi1SZXFIYW5kbGVyQWRkKEdVSUQgc3dpdGNoVHlwZUd1aWQsCitSZXFIYW5kbGVyQWRkKHV1aWRfbGUgc3dpdGNoVHlwZUd1aWQsCiAJICAgICAgY29uc3QgY2hhciAqc3dpdGNoX3R5cGVfbmFtZSwKIAkgICAgICBpbnQgKCpjb250cm9sZnVuYykoc3RydWN0IGlvX21zZ3MgKiksCiAJICAgICAgdW5zaWduZWQgbG9uZyBtaW5fY2hhbm5lbF9ieXRlcywKQEAgLTMxMCwxNiArMzA1LDE0IEBACiB9CiAKIFJlcUhhbmRsZXJJbmZvX3QgKgotUmVxSGFuZGxlckZpbmQoR1VJRCBzd2l0Y2hUeXBlR3VpZCkKK1JlcUhhbmRsZXJGaW5kKHV1aWRfbGUgc3dpdGNoVHlwZUd1aWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGVsdCwgKnRtcDsKIAlSZXFIYW5kbGVySW5mb190ICplbnRyeSA9IE5VTEw7CiAJc3Bpbl9sb2NrKCZSZXFIYW5kbGVySW5mb19saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShsZWx0LCB0bXAsICZSZXFIYW5kbGVySW5mb19saXN0KSB7CiAJCWVudHJ5ID0gbGlzdF9lbnRyeShsZWx0LCBSZXFIYW5kbGVySW5mb190LCBsaXN0X2xpbmspOwotCQlpZiAobWVtY21wCi0JCSAgICAoJmVudHJ5LT5zd2l0Y2hUeXBlR3VpZCwgJnN3aXRjaFR5cGVHdWlkLAotCQkgICAgIHNpemVvZihHVUlEKSkgPT0gMCkgeworCQlpZiAodXVpZF9sZV9jbXAoZW50cnktPnN3aXRjaFR5cGVHdWlkLCBzd2l0Y2hUeXBlR3VpZCkgPT0gMCkgewogCQkJc3Bpbl91bmxvY2soJlJlcUhhbmRsZXJJbmZvX2xpc3RfbG9jayk7CiAJCQlyZXR1cm4gZW50cnk7CiAJCX0KQEAgLTMyOSw3ICszMjIsNyBAQAogfQogCiBpbnQKLVJlcUhhbmRsZXJEZWwoR1VJRCBzd2l0Y2hUeXBlR3VpZCkKK1JlcUhhbmRsZXJEZWwodXVpZF9sZSBzd2l0Y2hUeXBlR3VpZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsZWx0LCAqdG1wOwogCVJlcUhhbmRsZXJJbmZvX3QgKmVudHJ5ID0gTlVMTDsKQEAgLTMzNyw5ICszMzAsNyBAQAogCXNwaW5fbG9jaygmUmVxSGFuZGxlckluZm9fbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGVsdCwgdG1wLCAmUmVxSGFuZGxlckluZm9fbGlzdCkgewogCQllbnRyeSA9IGxpc3RfZW50cnkobGVsdCwgUmVxSGFuZGxlckluZm9fdCwgbGlzdF9saW5rKTsKLQkJaWYgKG1lbWNtcAotCQkgICAgKCZlbnRyeS0+c3dpdGNoVHlwZUd1aWQsICZzd2l0Y2hUeXBlR3VpZCwKLQkJICAgICBzaXplb2YoR1VJRCkpID09IDApIHsKKwkJaWYgKHV1aWRfbGVfY21wKGVudHJ5LT5zd2l0Y2hUeXBlR3VpZCwgc3dpdGNoVHlwZUd1aWQpID09IDApIHsKIAkJCWxpc3RfZGVsKGxlbHQpOwogCQkJa2ZyZWUoZW50cnkpOwogCQkJcmMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlydGhiYS92aXJ0aGJhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRoYmEvdmlydGhiYS5jCmluZGV4IDgxN2IxMWQuLjVjNWFhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlydGhiYS92aXJ0aGJhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXJ0aGJhL3ZpcnRoYmEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHZpcnRoYmEuYwogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTgyLDggKzgyLDE2IEBACiBzdGF0aWMgaW50IHZpcnRoYmFfcXVldWVfY29tbWFuZF9sY2soc3RydWN0IHNjc2lfY21uZCAqc2NzaWNtZCwKIAkJCQkgICAgIHZvaWQgKCp2aXJ0aGJhX2NtbmRfZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB1bmlzeXNfc3Bhcl9pZHNbXSA9IHsKKwl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDYyLCBYODZfRkVBVFVSRV9BTlkgfSwKKwl7fQorfTsKKworLyogQXV0b2xvYWQgKi8KK01PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB1bmlzeXNfc3Bhcl9pZHMpOworCiAjaWZkZWYgREVGX1NDU0lfUUNNRAotREVGX1NDU0lfUUNNRCh2aXJ0aGJhX3F1ZXVlX2NvbW1hbmQpCitzdGF0aWMgREVGX1NDU0lfUUNNRCh2aXJ0aGJhX3F1ZXVlX2NvbW1hbmQpCiAjZWxzZQogI2RlZmluZSB2aXJ0aGJhX3F1ZXVlX2NvbW1hbmQgdmlydGhiYV9xdWV1ZV9jb21tYW5kX2xjawogI2VuZGlmCkBAIC0xMDQ2LDcgKzEwNTQsNyBAQAogdmlydGhiYV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkZXYpCiB7CiAJLyogdGhpcyBjYWxsZWQgYnkgdGhlIG1pZGxheWVyIGJlZm9yZSBzY2FuIGZvciBuZXcgZGV2aWNlcyAtCi0JICogTExEIGNhbiBhbGxvYyBhbnkgc3RydWMgJiBkbyBpbml0IGlmIG5lZWRlZC4KKwkgKiBMTEQgY2FuIGFsbG9jIGFueSBzdHJ1Y3QgJiBkbyBpbml0IGlmIG5lZWRlZC4KIAkgKi8KIAlzdHJ1Y3QgdmlydGRpc2tfaW5mbyAqdmRpc2s7CiAJc3RydWN0IHZpcnRkaXNrX2luZm8gKnRtcHZkaXNrOwpAQCAtMTQwMCw3ICsxNDA4LDcgQEAKIAkJdmlydGhiYWluZm8gPSBWaXJ0SGJhc09wZW5baV0udmlydGhiYWluZm87CiAJCWxlbmd0aCArPSBzcHJpbnRmKHZidWYgKyBsZW5ndGgsICJDSEFOU09DSyBpcyBub3QgZGVmaW5lZC5cbiIpOwogCi0JCWxlbmd0aCArPSBzcHJpbnRmKHZidWYgKyBsZW5ndGgsICJNYXhCdWZmTGVuOiVkXG4iLCBNYXhCdWZmTGVuKTsKKwkJbGVuZ3RoICs9IHNwcmludGYodmJ1ZiArIGxlbmd0aCwgIk1heEJ1ZmZMZW46JXVcbiIsIE1heEJ1ZmZMZW4pOwogCiAJCWxlbmd0aCArPSBzcHJpbnRmKHZidWYgKyBsZW5ndGgsICJcbnZpcnRoYmEgcmVzdWx0IHF1ZXVlIHBvbGwgd2FpdDolZCB1c2Vjcy5cbiIsCiAJCQkJICByc2x0cV93YWl0X3VzZWNzKTsKQEAgLTE1MzQsNyArMTU0Miw3IEBACiAJICAgICAgIHZpcnRwY2lkZXYtPmRldmljZU5vKTsKIAogCWlmICghdmlydGhiYWluZm8tPnNlcnZlcmRvd24pIHsKLQkJREJHSU5GKCJTZXJ2ZXIgdXAgbWVzc2FnZSByZWNpZXZlZCB3aGlsZSBzZXJ2ZXIgaXMgYWxyZWFkeSB1cC5cbiIpOworCQlEQkdJTkYoIlNlcnZlciB1cCBtZXNzYWdlIHJlY2VpdmVkIHdoaWxlIHNlcnZlciBpcyBhbHJlYWR5IHVwLlxuIik7CiAJCXJldHVybiAxOwogCX0KIAlpZiAodmlydGhiYWluZm8tPnNlcnZlcmNoYW5naW5nc3RhdGUpIHsKQEAgLTE2OTEsNiArMTY5OSw5IEBACiAJaW50IGVycm9yOwogCWludCBpOwogCisJaWYgKCF1bmlzeXNfc3Bhcl9wbGF0Zm9ybSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlMT0dJTkYoIkVudGVyaW5nIHZpcnRoYmFfbW9kX2luaXQuLi5cbiIpOwogCiAJUE9TVENPREVfTElOVVhfMihWSEJBX0NSRUFURV9FTlRSWV9QQywgUE9TVENPREVfU0VWRVJJVFlfSU5GTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRoYmEvdmlydGhiYS5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXJ0aGJhL3ZpcnRoYmEuaAppbmRleCA4OGI3OTc0Li5kNGI4MDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRoYmEvdmlydGhiYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlydGhiYS92aXJ0aGJhLmgKQEAgLTEsNiArMSw2IEBACiAvKiB2aXJ0aGJhLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRwY2kvdmlydHBjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXJ0cGNpL3ZpcnRwY2kuYwppbmRleCA4ZTM0NjUwLi43MTI0NmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRwY2kvdmlydHBjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlydHBjaS92aXJ0cGNpLmMKQEAgLTEsNiArMSw2IEBACiAvKiB2aXJ0cGNpLmMKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgInZlcnNpb24uaCIKICNpbmNsdWRlICJndWVzdGxpbnV4ZGVidWcuaCIKKyNpbmNsdWRlICJ0aW1za21vZHV0aWxzLmgiCiAKIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7CiAJc3RydWN0IGtvYmplY3Qga29iajsKQEAgLTM2NCw3ICszNjUsNyBAQAogCQltZW1jcHlfZnJvbWlvKCZuZXQuem9uZUd1aWQsIFwKIAkJCSAgICAgICYoKFVMVFJBX0lPX0NIQU5ORUxfUFJPVE9DT0wgX19pb21lbSAqKQlcCiAJCQkJY2hhbnB0ciktPnZuaWMuem9uZUd1aWQsCQlcCi0JCQkgICAgICBzaXplb2YoR1VJRCkpOwkJCQlcCisJCQkgICAgICBzaXplb2YodXVpZF9sZSkpOwkJCQlcCiB9CiAKIC8qIGFkZHMgYSB2bmljCkBAIC0zOTAsMTQgKzM5MSwxMCBAQAogCiAJR0VUX0JVU19ERVYoYWRkcGFyYW1zLT5idXNObyk7CiAKLQlMT0dJTkYoIkFkZGluZyB2bmljIG1hY2FkZHI6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggcmN2YnVmczolZCBtdHU6JWQgY2hhbnB0cjolcHslLTguOGx4LSUtNC40eC0lLTQuNHgtJS0yLjJ4JS0yLjJ4JS0yLjJ4JS0yLjJ4JS0yLjJ4JS0yLjJ4JS0yLjJ4JS0yLjJ4fVxuIiwKKwlMT0dJTkYoIkFkZGluZyB2bmljIG1hY2FkZHI6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggcmN2YnVmczolZCBtdHU6JWQgY2hhbnB0cjolcCVwVUxcbiIsCiAJICAgICBuZXQubWFjX2FkZHJbMF0sIG5ldC5tYWNfYWRkclsxXSwgbmV0Lm1hY19hZGRyWzJdLCBuZXQubWFjX2FkZHJbM10sCiAJICAgICBuZXQubWFjX2FkZHJbNF0sIG5ldC5tYWNfYWRkcls1XSwgbmV0Lm51bV9yY3ZfYnVmcywgbmV0Lm10dSwKLQkgICAgIGFkZHBhcmFtcy0+Y2hhbnB0ciwgKHVsb25nKSBuZXQuem9uZUd1aWQuZGF0YTEsIG5ldC56b25lR3VpZC5kYXRhMiwKLQkgICAgIG5ldC56b25lR3VpZC5kYXRhMywgbmV0LnpvbmVHdWlkLmRhdGE0WzBdLCBuZXQuem9uZUd1aWQuZGF0YTRbMV0sCi0JICAgICBuZXQuem9uZUd1aWQuZGF0YTRbMl0sIG5ldC56b25lR3VpZC5kYXRhNFszXSwKLQkgICAgIG5ldC56b25lR3VpZC5kYXRhNFs0XSwgbmV0LnpvbmVHdWlkLmRhdGE0WzVdLAotCSAgICAgbmV0LnpvbmVHdWlkLmRhdGE0WzZdLCBuZXQuem9uZUd1aWQuZGF0YTRbN10pOworCSAgICAgYWRkcGFyYW1zLT5jaGFucHRyLCAmbmV0LnpvbmVHdWlkKTsKIAlpID0gdmlydHBjaV9kZXZpY2VfYWRkKHZidXMsIFZJUlROSUNfVFlQRSwgYWRkcGFyYW1zLCBOVUxMLCAmbmV0KTsKIAlpZiAoaSkgewogCQlMT0dJTkYoIkFkZGVkIHZuaWMgbWFjYWRkcjolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKQEAgLTE1MDksNyArMTUwNiw2IEBACiAJc3RydWN0IGFkZF92aXJ0X2d1ZXN0cGFydCBhZGRwYXJhbXM7CiAJc3RydWN0IGRlbF92YnVzX2d1ZXN0cGFydCBidXNkZWxwYXJhbXM7CiAJc3RydWN0IGRlbF92aXJ0X2d1ZXN0cGFydCBkZWxwYXJhbXM7Ci0JR1VJRCBkdW1teUd1aWQgPSBHVUlEMDsKICNpZmRlZiBTVE9SQUdFX0NIQU5ORUwKIAlVNjQgc3RvcmFnZWNoYW5uZWw7CiAjZW5kaWYKQEAgLTE1NjAsNyArMTU1Niw3IEBACiAJCQkJCQkgICBfX3BhKGNoYW5wdHIpLAogCQkJCQkJICAgTUlOX0lPX0NIQU5ORUxfU0laRSwKIAkJCQkJCSAgIDEsIC8qIHRlc3QgbXNnICovCi0JCQkJCQkgICBkdW1teUd1aWQsIC8qIGluc3QgZ3VpZCAqLworCQkJCQkJICAgTlVMTF9VVUlEX0xFLCAvKiBpbnN0IGd1aWQgKi8KIAkJCQkJCSAgIE5VTEwpKSB7IC8qaW50ZXJydXB0IGluZm8gKi8KIAkJCUxPR0VSUigiRkFJTEVEIHRvIGluamVjdCBhZGQgdm5pY1xuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE2ODcsNiArMTY4Myw5IEBACiAJaW50IHJldDsKIAogCisJaWYgKCF1bmlzeXNfc3Bhcl9wbGF0Zm9ybSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlMT0dJTkYoIk1vZHVsZSBidWlsZDogRGF0ZTolcyBUaW1lOiVzLi4uXG4iLCBfX0RBVEVfXywgX19USU1FX18pOwogCiAJUE9TVENPREVfTElOVVhfMihWUENJX0NSRUFURV9FTlRSWV9QQywgUE9TVENPREVfU0VWRVJJVFlfSU5GTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRwY2kvdmlydHBjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXJ0cGNpL3ZpcnRwY2kuaAppbmRleCBiOGZkMDdiLi5mN2JlMTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3ZpcnRwY2kvdmlydHBjaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlydHBjaS92aXJ0cGNpLmgKQEAgLTEsNiArMSw2IEBACiAvKiB2aXJ0cGNpLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJ1aXNxdWV1ZS5oIgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSEJBIDB4QUEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlROSUMgMHhBQjAwCkBAIC00MSw3ICs0Miw3IEBACiAJdTggbWFjX2FkZHJbTUFYX01BQ0FERFJfTEVOXTsKIAlpbnQgbnVtX3Jjdl9idWZzOwogCXVuc2lnbmVkIG10dTsKLQlHVUlEIHpvbmVHdWlkOworCXV1aWRfbGUgem9uZUd1aWQ7CiB9OwogCiB0eXBlZGVmIGVudW0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoYW5uZWwvZ2xvYmFscy5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoYW5uZWwvZ2xvYmFscy5oCmluZGV4IDY2OGY4MzIuLjA3NjUzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGFubmVsL2dsb2JhbHMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC9nbG9iYWxzLmgKQEAgLTEsNiArMSw2IEBACiAvKiBnbG9iYWxzLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC92aXNvcmNoYW5uZWwuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGFubmVsL3Zpc29yY2hhbm5lbC5oCmluZGV4IDYyZDI5YTIuLmVjZjBkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGFubmVsL3Zpc29yY2hhbm5lbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGFubmVsL3Zpc29yY2hhbm5lbC5oCkBAIC0xLDYgKzEsNiBAQAogLyogdmlzb3JjaGFubmVsLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xOCw2ICsxOCw4IEBACiAjaWZuZGVmIF9fVklTT1JDSEFOTkVMX0hfXwogI2RlZmluZSBfX1ZJU09SQ0hBTk5FTF9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KKwogI2luY2x1ZGUgImNvbW1vbnR5cGVzLmgiCiAjaW5jbHVkZSAibWVtcmVnaW9uLmgiCiAjaW5jbHVkZSAiY2hhbm5lbC5oIgpAQCAtMzgsMTUgKzQwLDE1IEBACiAgKiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZXMgY2FuIHNpbXBseSBiZSByZWFkIGZyb20gdGhlIGNoYW5uZWwgaGVhZGVyLgogICovCiBWSVNPUkNIQU5ORUwgKnZpc29yY2hhbm5lbF9jcmVhdGUoSE9TVEFERFJFU1MgcGh5c2FkZHIsCi0JCQkJICB1bG9uZyBjaGFubmVsQnl0ZXMsIEdVSUQgZ3VpZCk7CisJCQkJICB1bG9uZyBjaGFubmVsQnl0ZXMsIHV1aWRfbGUgZ3VpZCk7CiBWSVNPUkNIQU5ORUwgKnZpc29yY2hhbm5lbF9jcmVhdGVfb3ZlcmxhcHBlZCh1bG9uZyBjaGFubmVsQnl0ZXMsCiAJCQkJCSAgICAgVklTT1JDSEFOTkVMICpwYXJlbnQsIHVsb25nIG9mZiwKLQkJCQkJICAgICBHVUlEIGd1aWQpOworCQkJCQkgICAgIHV1aWRfbGUgZ3VpZCk7CiBWSVNPUkNIQU5ORUwgKnZpc29yY2hhbm5lbF9jcmVhdGVfd2l0aF9sb2NrKEhPU1RBRERSRVNTIHBoeXNhZGRyLAotCQkJCQkgICAgdWxvbmcgY2hhbm5lbEJ5dGVzLCBHVUlEIGd1aWQpOworCQkJCQkgICAgdWxvbmcgY2hhbm5lbEJ5dGVzLCB1dWlkX2xlIGd1aWQpOwogVklTT1JDSEFOTkVMICp2aXNvcmNoYW5uZWxfY3JlYXRlX292ZXJsYXBwZWRfd2l0aF9sb2NrKHVsb25nIGNoYW5uZWxCeXRlcywKIAkJCQkJCSAgICAgICBWSVNPUkNIQU5ORUwgKnBhcmVudCwKLQkJCQkJCSAgICAgICB1bG9uZyBvZmYsIEdVSUQgZ3VpZCk7CisJCQkJCQkgICAgICAgdWxvbmcgb2ZmLCB1dWlkX2xlIGd1aWQpOwogdm9pZCB2aXNvcmNoYW5uZWxfZGVzdHJveShWSVNPUkNIQU5ORUwgKmNoYW5uZWwpOwogaW50IHZpc29yY2hhbm5lbF9yZWFkKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCwgdWxvbmcgb2Zmc2V0LAogCQkgICAgICB2b2lkICpsb2NhbCwgdWxvbmcgbmJ5dGVzKTsKQEAgLTY0LDQzICs2NiwxMyBAQAogY2hhciAqdmlzb3JjaGFubmVsX2lkKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCwgY2hhciAqcyk7CiBjaGFyICp2aXNvcmNoYW5uZWxfem9uZWlkKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCwgY2hhciAqcyk7CiBVNjQgdmlzb3JjaGFubmVsX2dldF9jbGllbnRwYXJ0aXRpb24oVklTT1JDSEFOTkVMICpjaGFubmVsKTsKLUdVSUQgdmlzb3JjaGFubmVsX2dldF9HVUlEKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCk7Cit1dWlkX2xlIHZpc29yY2hhbm5lbF9nZXRfdXVpZChWSVNPUkNIQU5ORUwgKmNoYW5uZWwpOwogTUVNUkVHSU9OICp2aXNvcmNoYW5uZWxfZ2V0X21lbXJlZ2lvbihWSVNPUkNIQU5ORUwgKmNoYW5uZWwpOwotY2hhciAqdmlzb3JjaGFubmVsX0dVSURfaWQoR1VJRCAqZ3VpZCwgY2hhciAqcyk7CitjaGFyICp2aXNvcmNoYW5uZWxfdXVpZF9pZCh1dWlkX2xlICpndWlkLCBjaGFyICpzKTsKIHZvaWQgdmlzb3JjaGFubmVsX2RlYnVnKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCwgaW50IG5RdWV1ZXMsCiAJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgVTMyIG9mZik7CiB2b2lkIHZpc29yY2hhbm5lbF9kdW1wX3NlY3Rpb24oVklTT1JDSEFOTkVMICpjaGFuLCBjaGFyICpzLAogCQkJICAgICAgIGludCBvZmYsIGludCBsZW4sIHN0cnVjdCBzZXFfZmlsZSAqc2VxKTsKLXZvaWQgKnZpc29yY2hhbm5lbF9nZXRfaGVhZGVyKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCk7Ci0KLSNkZWZpbmUJVklTT1JDSEFOTkVMX0NIQU5HRV9TRVJWRVJfU1RBVEUoY2hhbiwgY2hhbklkLCBuZXdzdGF0ZSkJXAotCWRvIHsJCQkJCQkJCVwKLQkJVTggKnAgPSAoVTggKil2aXNvcmNoYW5uZWxfZ2V0X2hlYWRlcihjaGFuKTsJCVwKLQkJaWYgKHApIHsJCQkJCQlcCi0JCQlVTFRSQV9DSEFOTkVMX1NFUlZFUl9UUkFOU0lUSU9OKHAsIGNoYW5JZCwgU3J2U3RhdGUsIFwKLQkJCQkJCQluZXdzdGF0ZSwgbG9nQ3R4KTsgXAotCQkJdmlzb3JjaGFubmVsX3dyaXRlCQkJCVwKLQkJCQkoY2hhbiwJCQkJCVwKLQkJCQkgb2Zmc2V0b2YoVUxUUkFfQ0hBTk5FTF9QUk9UT0NPTCwgU3J2U3RhdGUpLCBcCi0JCQkJIHAgKwkJCQkJXAotCQkJCSBvZmZzZXRvZihVTFRSQV9DSEFOTkVMX1BST1RPQ09MLCBTcnZTdGF0ZSksIFwKLQkJCQkgc2l6ZW9mKFUzMikpOwkJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJVklTT1JDSEFOTkVMX0NIQU5HRV9DTElFTlRfU1RBVEUoY2hhbiwgY2hhbklkLCBuZXdzdGF0ZSkJXAotCWRvIHsJCQkJCQkJCVwKLQkJVTggKnAgPSAoVTggKil2aXNvcmNoYW5uZWxfZ2V0X2hlYWRlcihjaGFuKTsJCVwKLQkJaWYgKHApIHsJCQkJCQlcCi0JCQlVTFRSQV9DSEFOTkVMX0NMSUVOVF9UUkFOU0lUSU9OKHAsIGNoYW5JZCwJXAotCQkJCQkJCW5ld3N0YXRlLCBsb2dDdHgpOyBcCi0JCQl2aXNvcmNoYW5uZWxfd3JpdGUJCQkJXAotCQkJCShjaGFuLAkJCQkJXAotCQkJCSBvZmZzZXRvZihVTFRSQV9DSEFOTkVMX1BST1RPQ09MLCBDbGlTdGF0ZU9TKSwgXAotCQkJCSBwICsJCQkJCVwKLQkJCQkgb2Zmc2V0b2YoVUxUUkFfQ0hBTk5FTF9QUk9UT0NPTCwgQ2xpU3RhdGVPUyksIFwKLQkJCQkgc2l6ZW9mKFUzMikpOwkJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCit2b2lkIF9faW9tZW0gKnZpc29yY2hhbm5lbF9nZXRfaGVhZGVyKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoYW5uZWwvdmlzb3JjaGFubmVsX2Z1bmNzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC92aXNvcmNoYW5uZWxfZnVuY3MuYwppbmRleCAwNTM2ODE2Li5hNDRkYTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC92aXNvcmNoYW5uZWxfZnVuY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC92aXNvcmNoYW5uZWxfZnVuY3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHZpc29yY2hhbm5lbF9mdW5jcy5jCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjQsMTQgKzI0LDE0IEBACiAKICNpbmNsdWRlICJnbG9iYWxzLmgiCiAjaW5jbHVkZSAidmlzb3JjaGFubmVsLmgiCi0jaW5jbHVkZSAiZ3VpZHV0aWxzLmgiCisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgogCiAjZGVmaW5lIE1ZRFJWTkFNRSAidmlzb3JjaGFubmVsIgogCiBzdHJ1Y3QgVklTT1JDSEFOTkVMX1RhZyB7CiAJTUVNUkVHSU9OICptZW1yZWdpb247CS8qIGZyb20gdmlzb3JfbWVtcmVnaW9uX2NyZWF0ZSgpICovCiAJQ0hBTk5FTF9IRUFERVIgY2hhbl9oZHI7Ci0JR1VJRCBndWlkOworCXV1aWRfbGUgZ3VpZDsKIAl1bG9uZyBzaXplOwogCUJPT0wgbmVlZHNfbG9jazsKIAlzcGlubG9ja190IGluc2VydF9sb2NrOwpAQCAtNTAsNyArNTAsNyBAQAogICovCiBzdGF0aWMgVklTT1JDSEFOTkVMICoKIHZpc29yY2hhbm5lbF9jcmVhdGVfZ3V0cyhIT1NUQUREUkVTUyBwaHlzYWRkciwgdWxvbmcgY2hhbm5lbEJ5dGVzLAotCQkJIFZJU09SQ0hBTk5FTCAqcGFyZW50LCB1bG9uZyBvZmYsIEdVSUQgZ3VpZCwKKwkJCSBWSVNPUkNIQU5ORUwgKnBhcmVudCwgdWxvbmcgb2ZmLCB1dWlkX2xlIGd1aWQsCiAJCQkgQk9PTCBuZWVkc19sb2NrKQogewogCVZJU09SQ0hBTk5FTCAqcCA9IE5VTEw7CkBAIC05MCw3ICs5MCw3IEBACiAJaWYgKGNoYW5uZWxCeXRlcyA9PSAwKQogCQkvKiB3ZSBoYWQgYmV0dGVyIGJlIGEgQ0xJRU5UIG9mIHRoaXMgY2hhbm5lbCAqLwogCQljaGFubmVsQnl0ZXMgPSAodWxvbmcpIHAtPmNoYW5faGRyLlNpemU7Ci0JaWYgKFNUUlVDVFNFUVVBTChndWlkLCBHdWlkMCkpCisJaWYgKHV1aWRfbGVfY21wKGd1aWQsIE5VTExfVVVJRF9MRSkgPT0gMCkKIAkJLyogd2UgaGFkIGJldHRlciBiZSBhIENMSUVOVCBvZiB0aGlzIGNoYW5uZWwgKi8KIAkJZ3VpZCA9IHAtPmNoYW5faGRyLlR5cGU7CiAJaWYgKHZpc29yX21lbXJlZ2lvbl9yZXNpemUocC0+bWVtcmVnaW9uLCBjaGFubmVsQnl0ZXMpIDwgMCkgewpAQCAtMTE0LDcgKzExNCw3IEBACiB9CiAKIFZJU09SQ0hBTk5FTCAqCi12aXNvcmNoYW5uZWxfY3JlYXRlKEhPU1RBRERSRVNTIHBoeXNhZGRyLCB1bG9uZyBjaGFubmVsQnl0ZXMsIEdVSUQgZ3VpZCkKK3Zpc29yY2hhbm5lbF9jcmVhdGUoSE9TVEFERFJFU1MgcGh5c2FkZHIsIHVsb25nIGNoYW5uZWxCeXRlcywgdXVpZF9sZSBndWlkKQogewogCXJldHVybiB2aXNvcmNoYW5uZWxfY3JlYXRlX2d1dHMocGh5c2FkZHIsIGNoYW5uZWxCeXRlcywgTlVMTCwgMCwgZ3VpZCwKIAkJCQkJRkFMU0UpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAKIFZJU09SQ0hBTk5FTCAqCiB2aXNvcmNoYW5uZWxfY3JlYXRlX3dpdGhfbG9jayhIT1NUQUREUkVTUyBwaHlzYWRkciwgdWxvbmcgY2hhbm5lbEJ5dGVzLAotCQkJICAgICAgR1VJRCBndWlkKQorCQkJICAgICAgdXVpZF9sZSBndWlkKQogewogCXJldHVybiB2aXNvcmNoYW5uZWxfY3JlYXRlX2d1dHMocGh5c2FkZHIsIGNoYW5uZWxCeXRlcywgTlVMTCwgMCwgZ3VpZCwKIAkJCQkJVFJVRSk7CkBAIC0xMzIsNyArMTMyLDcgQEAKIAogVklTT1JDSEFOTkVMICoKIHZpc29yY2hhbm5lbF9jcmVhdGVfb3ZlcmxhcHBlZCh1bG9uZyBjaGFubmVsQnl0ZXMsCi0JCQkgICAgICAgVklTT1JDSEFOTkVMICpwYXJlbnQsIHVsb25nIG9mZiwgR1VJRCBndWlkKQorCQkJICAgICAgIFZJU09SQ0hBTk5FTCAqcGFyZW50LCB1bG9uZyBvZmYsIHV1aWRfbGUgZ3VpZCkKIHsKIAlyZXR1cm4gdmlzb3JjaGFubmVsX2NyZWF0ZV9ndXRzKDAsIGNoYW5uZWxCeXRlcywgcGFyZW50LCBvZmYsIGd1aWQsCiAJCQkJCUZBTFNFKTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogVklTT1JDSEFOTkVMICoKIHZpc29yY2hhbm5lbF9jcmVhdGVfb3ZlcmxhcHBlZF93aXRoX2xvY2sodWxvbmcgY2hhbm5lbEJ5dGVzLAogCQkJCQkgVklTT1JDSEFOTkVMICpwYXJlbnQsIHVsb25nIG9mZiwKLQkJCQkJIEdVSUQgZ3VpZCkKKwkJCQkJIHV1aWRfbGUgZ3VpZCkKIHsKIAlyZXR1cm4gdmlzb3JjaGFubmVsX2NyZWF0ZV9ndXRzKDAsIGNoYW5uZWxCeXRlcywgcGFyZW50LCBvZmYsIGd1aWQsCiAJCQkJCVRSVUUpOwpAQCAtMTc3LDIzICsxNzcsMjQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHZpc29yY2hhbm5lbF9nZXRfbmJ5dGVzKTsKIAogY2hhciAqCi12aXNvcmNoYW5uZWxfR1VJRF9pZChHVUlEICpndWlkLCBjaGFyICpzKQordmlzb3JjaGFubmVsX3V1aWRfaWQodXVpZF9sZSAqZ3VpZCwgY2hhciAqcykKIHsKLQlyZXR1cm4gR1VJRF9mb3JtYXQxKGd1aWQsIHMpOworCXNwcmludGYocywgIiVwVUwiLCBndWlkKTsKKwlyZXR1cm4gczsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHZpc29yY2hhbm5lbF9HVUlEX2lkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHZpc29yY2hhbm5lbF91dWlkX2lkKTsKIAogY2hhciAqCiB2aXNvcmNoYW5uZWxfaWQoVklTT1JDSEFOTkVMICpjaGFubmVsLCBjaGFyICpzKQogewotCXJldHVybiB2aXNvcmNoYW5uZWxfR1VJRF9pZCgmY2hhbm5lbC0+Z3VpZCwgcyk7CisJcmV0dXJuIHZpc29yY2hhbm5lbF91dWlkX2lkKCZjaGFubmVsLT5ndWlkLCBzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpc29yY2hhbm5lbF9pZCk7CiAKIGNoYXIgKgogdmlzb3JjaGFubmVsX3pvbmVpZChWSVNPUkNIQU5ORUwgKmNoYW5uZWwsIGNoYXIgKnMpCiB7Ci0JcmV0dXJuIHZpc29yY2hhbm5lbF9HVUlEX2lkKCZjaGFubmVsLT5jaGFuX2hkci5ab25lR3VpZCwgcyk7CisJcmV0dXJuIHZpc29yY2hhbm5lbF91dWlkX2lkKCZjaGFubmVsLT5jaGFuX2hkci5ab25lR3VpZCwgcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aXNvcmNoYW5uZWxfem9uZWlkKTsKIApAQCAtMjA0LDEyICsyMDUsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpc29yY2hhbm5lbF9nZXRfY2xpZW50cGFydGl0aW9uKTsKIAotR1VJRAotdmlzb3JjaGFubmVsX2dldF9HVUlEKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCkKK3V1aWRfbGUKK3Zpc29yY2hhbm5lbF9nZXRfdXVpZChWSVNPUkNIQU5ORUwgKmNoYW5uZWwpCiB7CiAJcmV0dXJuIGNoYW5uZWwtPmd1aWQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aXNvcmNoYW5uZWxfZ2V0X0dVSUQpOworRVhQT1JUX1NZTUJPTF9HUEwodmlzb3JjaGFubmVsX2dldF91dWlkKTsKIAogTUVNUkVHSU9OICoKIHZpc29yY2hhbm5lbF9nZXRfbWVtcmVnaW9uKFZJU09SQ0hBTk5FTCAqY2hhbm5lbCkKQEAgLTI3OCwxMCArMjc5LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aXNvcmNoYW5uZWxfY2xlYXIpOwogCi12b2lkICoKK3ZvaWQgX19pb21lbSAgKgogdmlzb3JjaGFubmVsX2dldF9oZWFkZXIoVklTT1JDSEFOTkVMICpjaGFubmVsKQogewotCXJldHVybiAodm9pZCAqKSAmKGNoYW5uZWwtPmNoYW5faGRyKTsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAmKGNoYW5uZWwtPmNoYW5faGRyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpc29yY2hhbm5lbF9nZXRfaGVhZGVyKTsKIApAQCAtNTU4LDcgKzU1OSw2IEBACiAJTUVNUkVHSU9OICptZW1yZWdpb24gPSBOVUxMOwogCUNIQU5ORUxfSEVBREVSIGhkcjsKIAlDSEFOTkVMX0hFQURFUiAqcGhkciA9ICZoZHI7Ci0JY2hhciBzWzk5XTsKIAlpbnQgaSA9IDA7CiAJaW50IGVycmNvZGUgPSAwOwogCkBAIC01ODgsOSArNTg4LDggQEAKIAluYnl0ZXMgPSAodWxvbmcpIChwaGRyLT5TaXplKTsKIAlzZXFfcHJpbnRmKHNlcSwgIi0tLSBCZWdpbiBjaGFubmVsIEAweCUtMTYuMTZMeCBmb3IgMHglbHggYnl0ZXMgKHJlZ2lvbj0weCVseCBieXRlcykgLS0tXG4iLAogCQkgICBhZGRyICsgb2ZmLCBuYnl0ZXMsIG5ieXRlc19yZWdpb24pOwotCXNlcV9wcmludGYoc2VxLCAiVHlwZSAgICAgICAgICAgID0gJXNcbiIsIEdVSURfZm9ybWF0MigmcGhkci0+VHlwZSwgcykpOwotCXNlcV9wcmludGYoc2VxLCAiWm9uZUd1aWQgICAgICAgID0gJXNcbiIsCi0JCSAgIEdVSURfZm9ybWF0MigmcGhkci0+Wm9uZUd1aWQsIHMpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlR5cGUgICAgICAgICAgICA9ICVwVUxcbiIsICZwaGRyLT5UeXBlKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlpvbmVHdWlkICAgICAgICA9ICVwVUxcbiIsICZwaGRyLT5ab25lR3VpZCk7CiAJc2VxX3ByaW50ZihzZXEsICJTaWduYXR1cmUgICAgICAgPSAweCUtMTYuMTZMeFxuIiwKIAkJICAgKGxvbmcgbG9uZykgcGhkci0+U2lnbmF0dXJlKTsKIAlzZXFfcHJpbnRmKHNlcSwgIkxlZ2FjeVN0YXRlICAgICA9ICVsdVxuIiwgKHVsb25nKSBwaGRyLT5MZWdhY3lTdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC92aXNvcmNoYW5uZWxfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoYW5uZWwvdmlzb3JjaGFubmVsX21haW4uYwppbmRleCA0ODJlZTBhLi5mNGJlMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hhbm5lbC92aXNvcmNoYW5uZWxfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGFubmVsL3Zpc29yY2hhbm5lbF9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKiB2aXNvcmNoYW5uZWxfbWFpbi5jCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjIsMTMgKzIyLDE2IEBACiAjaW5jbHVkZSAiZ2xvYmFscy5oIgogI2luY2x1ZGUgImNoYW5uZWwuaCIKICNpbmNsdWRlICJ2aXNvcmNoYW5uZWwuaCIKLSNpbmNsdWRlICJndWlkdXRpbHMuaCIKKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAKICNkZWZpbmUgTVlEUlZOQU1FICJ2aXNvcmNoYW5uZWwiCiAKIHN0YXRpYyBpbnQgX19pbml0CiB2aXNvcmNoYW5uZWxfaW5pdCh2b2lkKQogeworCWlmICghdW5pc3lzX3NwYXJfcGxhdGZvcm0pCisJCXJldHVybiAtRU5PREVWOworCiAJSU5GT0RSVigiZHJpdmVyIHZlcnNpb24gJXMgbG9hZGVkIiwgVkVSU0lPTik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L01ha2VmaWxlCmluZGV4IGY1ZTg2NTAuLmVhZDRiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBvYmotJChDT05GSUdfVU5JU1lTX1ZJU09SQ0hJUFNFVCkJKz0gdmlzb3JjaGlwc2V0Lm8KIAotdmlzb3JjaGlwc2V0LXkgOj0gdmlzb3JjaGlwc2V0X21haW4ubyBjb250cm9sdm1fZGlyZWN0Lm8gZmlsZS5vIGZpbGV4ZmVyLm8gXAordmlzb3JjaGlwc2V0LXkgOj0gdmlzb3JjaGlwc2V0X21haW4ubyBjb250cm9sdm1fZGlyZWN0Lm8gZmlsZS5vIFwKIAkJCXBhcnNlci5vCiAKIGNjZmxhZ3MteSArPSAtSWRyaXZlcnMvc3RhZ2luZy91bmlzeXMvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvY29udHJvbHZtLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9jb250cm9sdm0uaAppbmRleCA4NzNmYTEyLi4wMTI4OTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9jb250cm9sdm0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9jb250cm9sdm0uaApAQCAtMSw2ICsxLDYgQEAKIC8qIGNvbnRyb2x2bS5oCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvY29udHJvbHZtX2RpcmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvY29udHJvbHZtX2RpcmVjdC5jCmluZGV4IGI5MTFlYTguLmNkMTBlM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L2NvbnRyb2x2bV9kaXJlY3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9jb250cm9sdm1fZGlyZWN0LmMKQEAgLTEsNiArMSw2IEBACiAvKiBjb250cm9sdm1fZGlyZWN0LmMKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9maWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9maWxlLmMKaW5kZXggZTIxNGExMS4uZmNjYzRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvZmlsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L2ZpbGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGZpbGUuYwogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L2ZpbGUuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L2ZpbGUuaAppbmRleCA1OTcyODJhLi4yMWJiOTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9maWxlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvZmlsZS5oCkBAIC0xLDYgKzEsNiBAQAogLyogZmlsZS5oCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvZmlsZXhmZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L2ZpbGV4ZmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NTBkNmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvZmlsZXhmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDUwNiArMCwwIEBACi0vKiBmaWxleGZlci5jCi0gKgotICogQ29weXJpZ2h0IKkgMjAxMyAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqLwotCi0vKiBDb2RlIGhlcmUtaW4gaXMgdGhlICJnbHVlIiB0aGF0IGNvbm5lY3RzIGNvbnRyb2x2bSBtZXNzYWdlcyB3aXRoIHRoZQotICogc3BhcmZpbGV4ZmVyIGRyaXZlciwgd2hpY2ggaXMgdXNlZCB0byB0cmFuc2ZlciBmaWxlIGNvbnRlbnRzIGFzIHBheWxvYWQKLSAqIGFjcm9zcyB0aGUgY29udHJvbHZtIGNoYW5uZWwuCi0gKi8KLQotI2luY2x1ZGUgImdsb2JhbHMuaCIKLSNpbmNsdWRlICJjb250cm9sdm0uaCIKLSNpbmNsdWRlICJ2aXNvcmNoaXBzZXQuaCIKLSNpbmNsdWRlICJmaWxleGZlci5oIgotCi0jaWZkZWYgRU5BQkxFX1NQQVJGSUxFWEZFUiAvKiBzcGFyZmlsZXhmZXIga2VybmVsIG1vZHVsZSBlbmFibGVkIGluIGJ1aWxkICovCi0jaW5jbHVkZSAic3BhcmZpbGV4ZmVyLmgiCi0KLS8qIERyaXZlci1nbG9iYWwgbWVtb3J5ICovCi1zdGF0aWMgTElTVF9IRUFEKFJlcXVlc3RfbGlzdCk7CS8qIGxpc3Qgb2Ygc3RydWN0IGFueV9yZXF1ZXN0ICosIHZpYQotCQkJCSAqIHJlcV9saXN0IG1lbWIgKi8KLQotLyogbG9jayBmb3IgYWJvdmUgcG9vbCBmb3IgYWxsb2NhdGlvbiBvZiBhbnlfcmVxdWVzdCBzdHJ1Y3RzLCBhbmQgcG9vbAotKiBuYW1lOyBub3RlIHRoYXQga21lbV9jYWNoZV9jcmVhdGUgcmVxdWlyZXMgdGhhdCB3ZSBrZWVwIHRoZSBzdG9yYWdlCi0qIGZvciB0aGUgcG9vbCBuYW1lIGZvciB0aGUgbGlmZSBvZiB0aGUgcG9vbAotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKFJlcXVlc3RfbGlzdF9sb2NrKTsKLQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpSZXF1ZXN0X21lbW9yeV9wb29sOwotc3RhdGljIGNvbnN0IGNoYXIgUmVxdWVzdF9tZW1vcnlfcG9vbF9uYW1lW10gPSAiZmlsZXhmZXJfcmVxdWVzdF9wb29sIjsKLXNpemVfdCBDYWxsZXJfcmVxX2NvbnRleHRfYnl0ZXMgPSAwOwkvKiBwYXNzZWQgdG8gZmlsZXhmZXJfY29uc3RydWN0b3IoKSAqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGEgc2luZ2xlIGNvbnRyb2x2bSBHRVRGSUxFIGNvbnZlcnNhdGlvbiwgd2hpY2gKLSAqIGNvbnNpc3RzIG9mIGEgc2luZ2xlIGNvbnRyb2x2bSByZXF1ZXN0IG1lc3NhZ2UgYW5kIDEgb3IgbW9yZSBjb250cm9sdm0KLSAqIHJlc3BvbnNlIG1lc3NhZ2VzLgotICovCi1zdHJ1Y3QgZ2V0ZmlsZV9yZXF1ZXN0IHsKLQlDT05UUk9MVk1fTUVTU0FHRV9IRUFERVIgY29udHJvbHZtX2hlYWRlcjsKLQlhdG9taWNfdCBidWZmZXJzX2luX3VzZTsKLQlHRVRfQ09OVElHVU9VU19DT05UUk9MVk1fUEFZTE9BRF9GVU5DIGdldF9jb250aWd1b3VzX2NvbnRyb2x2bV9wYXlsb2FkOwotCUNPTlRST0xWTV9SRVNQT05EX1dJVEhfUEFZTE9BRF9GVU5DIGNvbnRyb2x2bV9yZXNwb25kX3dpdGhfcGF5bG9hZDsKLX07Ci0KLS8qIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYSBzaW5nbGUgY29udHJvbHZtIFBVVEZJTEUgY29udmVyc2F0aW9uLCB3aGljaAotICogY29uc2lzdHMgb2YgYSBzaW5nbGUgY29udHJvbHZtIHJlcXVlc3Qgd2l0aCBhIGZpbGVuYW1lLCBhbmQgYWRkaXRpb25hbAotICogY29udHJvbHZtIG1lc3NhZ2VzIHdpdGggZmlsZSBkYXRhLgotICovCi1zdHJ1Y3QgcHV0ZmlsZV9yZXF1ZXN0IHsKLQlHRVRfQ09OVFJPTFZNX0ZJTEVEQVRBX0ZVTkMgZ2V0X2NvbnRyb2x2bV9maWxlZGF0YTsKLQlDT05UUk9MVk1fUkVTUE9ORF9GVU5DIGNvbnRyb2x2bV9lbmRfcHV0RmlsZTsKLX07Ci0KLS8qIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYSBzaW5nbGUgZmlsZSB0cmFuc2ZlciBvcGVyYXRpb24sIHdoaWNoIGNhbiBlaXRoZXIKLSAqIGJlIGEgR0VURklMRSBvciBQVVRGSUxFLgotICovCi1zdHJ1Y3QgYW55X3JlcXVlc3QgewotCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7Ci0JdWxvbmcyIGZpbGVfcmVxdWVzdF9udW1iZXI7Ci0JdWxvbmcyIGRhdGFfc2VxdWVuY2VfbnVtYmVyOwotCVRSQU5TTUlURklMRV9EVU1QX0ZVTkMgZHVtcF9mdW5jOwotCUJPT0wgaXNfZ2V0OwotCXVuaW9uIHsKLQkJc3RydWN0IGdldGZpbGVfcmVxdWVzdCBnZXQ7Ci0JCXN0cnVjdCBwdXRmaWxlX3JlcXVlc3QgcHV0OwotCX07Ci0JLyogU2l6ZSBvZiBjYWxsZXJfY29udGV4dF9kYXRhIHdpbGwgYmUKLQkgKiA8Q2FsbGVyX3JlcV9jb250ZXh0X2J5dGVzPiBieXRlcy4gIEkgYWxpZ25lZCB0aGlzIGJlY2F1c2UgSQotCSAqIGFtIHBhcmFub2lkIGFib3V0IHdoYXQgaGFwcGVucyB3aGVuIGFuIGFyYml0cmFyeSBkYXRhCi0JICogc3RydWN0dXJlIHdpdGggdW5rbm93biBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGdldHMgY29waWVkCi0JICogaGVyZS4gIEkgd2FudCBjYWxsZXJfY29udGV4dF9kYXRhIHRvIGJlIGFsaWduZWQgdG8gdGhlCi0JICogY29hcnNlc3QgcG9zc2libGUgYWxpZ25tZW50IGJvdW5kYXJ5IHRoYXQgY291bGQgYmUgcmVxdWlyZWQKLQkgKiBmb3IgYW55IHVzZXIgZGF0YSBzdHJ1Y3R1cmUuCi0JICovCi0JdTggY2FsbGVyX2NvbnRleHRfZGF0YVsxXSBfX2FsaWduZWQoc2l6ZW9mKHVsb25nMikpOwotfTsKLQotLyoKLSAqIExpbmtzIHRoZSBhbnlfcmVxdWVzdCBpbnRvIHRoZSBnbG9iYWwgbGlzdCBvZiBhbGxvY2F0ZWQgcmVxdWVzdHMKLSAqICg8UmVxdWVzdF9saXN0PikuCi0gKi8KLXN0YXRpYyB2b2lkCi11bml0X3RyYWNraW5nX2NyZWF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfbGlzdF9saW5rKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJlJlcXVlc3RfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoZGV2X2xpc3RfbGluaywgJlJlcXVlc3RfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUmVxdWVzdF9saXN0X2xvY2ssIGZsYWdzKTsKLX0KLQotLyogVW5saW5rcyBhIGFueV9yZXF1ZXN0IGZyb20gdGhlIGdsb2JhbCBsaXN0ICg8UmVxdWVzdF9saXN0PikuCi0gKi8KLXN0YXRpYyB2b2lkCi11bml0X3RyYWNraW5nX2Rlc3Ryb3koc3RydWN0IGxpc3RfaGVhZCAqZGV2X2xpc3RfbGluaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZSZXF1ZXN0X2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKGRldl9saXN0X2xpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlJlcXVlc3RfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYW5kIHJldHVybiBhIG5ldyBhbnlfcmVxdWVzdCBzdHJ1Y3QsIGFuZAotICogbGluayBpdCB0byB0aGUgZ2xvYmFsIGxpc3Qgb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYW55X3JlcXVlc3QgKgotYWxsb2NfcmVxdWVzdChjaGFyICpmbiwgaW50IGxuKQotewotCXN0cnVjdCBhbnlfcmVxdWVzdCAqcmVxID0gKHN0cnVjdCBhbnlfcmVxdWVzdCAqKQotCSAgICAodmlzb3JjaGlwc2V0X2NhY2hlX2FsbG9jKFJlcXVlc3RfbWVtb3J5X3Bvb2wsCi0JCQkJICAgICAgRkFMU0UsCi0JCQkJICAgICAgZm4sIGxuKSk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiBOVUxMOwotCW1lbXNldChyZXEsIDAsIHNpemVvZihzdHJ1Y3QgYW55X3JlcXVlc3QpICsgQ2FsbGVyX3JlcV9jb250ZXh0X2J5dGVzKTsKLQl1bml0X3RyYWNraW5nX2NyZWF0ZSgmcmVxLT5yZXFfbGlzdCk7Ci0JcmV0dXJuIHJlcTsKLX0KLQotLyogQm9vay1lbmQgZm9yIGFsbG9jX3JlcXVlc3QoKS4KLSAqLwotc3RhdGljIHZvaWQKLWZyZWVfcmVxdWVzdChzdHJ1Y3QgYW55X3JlcXVlc3QgKnJlcSwgY2hhciAqZm4sIGludCBsbikKLXsKLQl1bml0X3RyYWNraW5nX2Rlc3Ryb3koJnJlcS0+cmVxX2xpc3QpOwotCXZpc29yY2hpcHNldF9jYWNoZV9mcmVlKFJlcXVlc3RfbWVtb3J5X3Bvb2wsIHJlcSwgZm4sIGxuKTsKLX0KLQotLyogQ29uc3RydWN0b3IgZm9yIGZpbGV4ZmVyLm8uCi0gKi8KLWludAotZmlsZXhmZXJfY29uc3RydWN0b3Ioc2l6ZV90IHJlcV9jb250ZXh0X2J5dGVzKQotewotCWludCByYyA9IC0xOwotCi0JQ2FsbGVyX3JlcV9jb250ZXh0X2J5dGVzID0gcmVxX2NvbnRleHRfYnl0ZXM7Ci0JUmVxdWVzdF9tZW1vcnlfcG9vbCA9Ci0JICAgIGttZW1fY2FjaGVfY3JlYXRlKFJlcXVlc3RfbWVtb3J5X3Bvb2xfbmFtZSwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYW55X3JlcXVlc3QpICsKLQkJCSAgICAgIENhbGxlcl9yZXFfY29udGV4dF9ieXRlcywKLQkJCSAgICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0JaWYgKCFSZXF1ZXN0X21lbW9yeV9wb29sKSB7Ci0JCUxPR0VSUigiZmFpbGVkIHRvIGFsbG9jIFJlcXVlc3RfbWVtb3J5X3Bvb2wiKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIEF3YXk7Ci0JfQotCXJjID0gMDsKLUF3YXk6Ci0JaWYgKHJjIDwgMCkgewotCQlpZiAoUmVxdWVzdF9tZW1vcnlfcG9vbCkgewotCQkJa21lbV9jYWNoZV9kZXN0cm95KFJlcXVlc3RfbWVtb3J5X3Bvb2wpOwotCQkJUmVxdWVzdF9tZW1vcnlfcG9vbCA9IE5VTEw7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotfQotCi0vKiBEZXN0cnVjdG9yIGZvciBmaWxleGZlci5vLgotICovCi12b2lkCi1maWxleGZlcl9kZXN0cnVjdG9yKHZvaWQpCi17Ci0JaWYgKFJlcXVlc3RfbWVtb3J5X3Bvb2wpIHsKLQkJa21lbV9jYWNoZV9kZXN0cm95KFJlcXVlc3RfbWVtb3J5X3Bvb2wpOwotCQlSZXF1ZXN0X21lbW9yeV9wb29sID0gTlVMTDsKLQl9Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBvYnRhaW4gYW4gYXZhaWxhYmxlIGNodW5rIGZyb20gdGhlIGNvbnRyb2x2bSBwYXlsb2FkIGFyZWEsCi0gKiBzdG9yZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2h1bmsgaW4gPGFjdHVhbF9zaXplPiwgYW5kIHJldHVybiBhIHBvaW50ZXIKLSAqIHRvIHRoZSBjaHVuay4gIFRoZSBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gdGhlIHNwYXJmaWxleGZlciBkcml2ZXIsIHdoaWNoIGNhbGxzCi0gKiBpdCB3aGVuZXZlciBwYXlsb2FkIHNwYWNlIGlzIHJlcXVpcmVkIHRvIGNvcHkgZmlsZSBkYXRhIGludG8uCi0gKi8KLXN0YXRpYyB2b2lkICoKLWdldF9lbXB0eV9idWNrZXRfZm9yX2dldGZpbGVfZGF0YSh2b2lkICpjb250ZXh0LAotCQkJCSAgdWxvbmcgbWluX3NpemUsIHVsb25nIG1heF9zaXplLAotCQkJCSAgdWxvbmcgKmFjdHVhbF9zaXplKQotewotCXZvaWQgKmJ1Y2tldDsKLQlzdHJ1Y3QgYW55X3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3QgYW55X3JlcXVlc3QgKikgY29udGV4dDsKLQotCWlmICghcmVxLT5pc19nZXQpIHsKLQkJTE9HRVJSKCIlcyAtIHVuZXhwZWN0ZWQgY2FsbCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWJ1Y2tldCA9ICgqcmVxLT5nZXQuZ2V0X2NvbnRpZ3VvdXNfY29udHJvbHZtX3BheWxvYWQpCi0JICAgIChtaW5fc2l6ZSwgbWF4X3NpemUsIGFjdHVhbF9zaXplKTsKLQlpZiAoYnVja2V0ICE9IE5VTEwpIHsKLQkJYXRvbWljX2luYygmcmVxLT5nZXQuYnVmZmVyc19pbl91c2UpOwotCQlEQkdJTkYoIiVzIC0gc2VudCAlbHUtYnl0ZSBidWZmZXIiLCBfX2Z1bmNfXywgKmFjdHVhbF9zaXplKTsKLQl9Ci0JcmV0dXJuIGJ1Y2tldDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgYSBjb250cm9sdm0gcmVzcG9uc2Ugd2l0aCBkYXRhIGluIHRoZSBwYXlsb2FkCi0gKiAod2hvc2Ugc3BhY2Ugd2FzIG9idGFpbmVkIHdpdGggZ2V0X2VtcHR5X2J1Y2tldF9mb3JfZ2V0ZmlsZV9kYXRhKS4gIFRoZQotICogZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHRoZSBzcGFyZmlsZXhmZXIgZHJpdmVyLCB3aGljaCBjYWxscyBpdCB3aGVuZXZlciBpdAotICogd2FudHMgdG8gc2VuZCBmaWxlIGRhdGEgYmFjayBhY3Jvc3MgdGhlIGNvbnRyb2x2bSBjaGFubmVsLgotICovCi1zdGF0aWMgaW50Ci1zZW5kX2Z1bGxfZ2V0ZmlsZV9kYXRhX2J1Y2tldCh2b2lkICpjb250ZXh0LCB2b2lkICpidWNrZXQsCi0JCQkgICAgICB1bG9uZyBidWNrZXRfYWN0dWFsX3NpemUsIHVsb25nIGJ1Y2tldF91c2VkX3NpemUpCi17Ci0Jc3RydWN0IGFueV9yZXF1ZXN0ICpyZXEgPSAoc3RydWN0IGFueV9yZXF1ZXN0ICopIGNvbnRleHQ7Ci0KLQlpZiAoIXJlcS0+aXNfZ2V0KSB7Ci0JCUxPR0VSUigiJXMgLSB1bmV4cGVjdGVkIGNhbGwiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOwotCX0KLQlEQkdJTkYoInNlbmRpbmcgYnVmZmVyIGZvciAlbHUvJWx1IiwKLQkgICAgICAgYnVja2V0X3VzZWRfc2l6ZSwgYnVja2V0X2FjdHVhbF9zaXplKTsKLQlpZiAoISgqcmVxLT5nZXQuY29udHJvbHZtX3Jlc3BvbmRfd2l0aF9wYXlsb2FkKQotCSAgICAoJnJlcS0+Z2V0LmNvbnRyb2x2bV9oZWFkZXIsCi0JICAgICByZXEtPmZpbGVfcmVxdWVzdF9udW1iZXIsCi0JICAgICByZXEtPmRhdGFfc2VxdWVuY2VfbnVtYmVyKyssCi0JICAgICAwLCBidWNrZXQsIGJ1Y2tldF9hY3R1YWxfc2l6ZSwgYnVja2V0X3VzZWRfc2l6ZSwgVFJVRSkpCi0JCWF0b21pY19kZWMoJnJlcS0+Z2V0LmJ1ZmZlcnNfaW5fdXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgYSBjb250cm9sdm0gcmVzcG9uc2UgaW5kaWNhdGluZyB0aGUgZW5kIG9mIGEKLSAqIEdFVEZJTEUgdHJhbnNmZXIuICBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHRoZSBzcGFyZmlsZXhmZXIgZHJpdmVyLgotICovCi1zdGF0aWMgdm9pZAotc2VuZF9lbmRfb2ZfZ2V0ZmlsZV9kYXRhKHZvaWQgKmNvbnRleHQsIGludCBzdGF0dXMpCi17Ci0Jc3RydWN0IGFueV9yZXF1ZXN0ICpyZXEgPSAoc3RydWN0IGFueV9yZXF1ZXN0ICopIGNvbnRleHQ7Ci0JaWYgKCFyZXEtPmlzX2dldCkgewotCQlMT0dFUlIoIiVzIC0gdW5leHBlY3RlZCBjYWxsIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCUxPR0lORigic3RhdHVzPSVkIiwgc3RhdHVzKTsKLQkoKnJlcS0+Z2V0LmNvbnRyb2x2bV9yZXNwb25kX3dpdGhfcGF5bG9hZCkKLQkgICAgKCZyZXEtPmdldC5jb250cm9sdm1faGVhZGVyLAotCSAgICAgcmVxLT5maWxlX3JlcXVlc3RfbnVtYmVyLAotCSAgICAgcmVxLT5kYXRhX3NlcXVlbmNlX251bWJlcisrLCBzdGF0dXMsIE5VTEwsIDAsIDAsIEZBTFNFKTsKLQlmcmVlX3JlcXVlc3QocmVxLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIHN1cHBsaWVzIGRhdGEgZm9yIGEgUFVURklMRSB0cmFuc2Zlci4KLSAqIFRoZSBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gdGhlIHNwYXJmaWxleGZlciBkcml2ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWdldF9wdXRmaWxlX2RhdGEodm9pZCAqY29udGV4dCwgdm9pZCAqcGJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCi0JCSBCT09MIGJ1Zl9pc191c2Vyc3BhY2UsIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCi17Ci0Jc3RydWN0IGFueV9yZXF1ZXN0ICpyZXEgPSAoc3RydWN0IGFueV9yZXF1ZXN0ICopIGNvbnRleHQ7Ci0JaWYgKHJlcS0+aXNfZ2V0KSB7Ci0JCUxPR0VSUigiJXMgLSB1bmV4cGVjdGVkIGNhbGwiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuICgqcmVxLT5wdXQuZ2V0X2NvbnRyb2x2bV9maWxlZGF0YSkgKCZyZXEtPmNhbGxlcl9jb250ZXh0X2RhdGFbMF0sCi0JCQkJCQkgICBwYnVmLCBidWZzaXplLAotCQkJCQkJICAgYnVmX2lzX3VzZXJzcGFjZSwKLQkJCQkJCSAgIGJ5dGVzX3RyYW5zZmVycmVkKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiBhIFBVVEZJTEUgdHJhbnNmZXIuCi0gKiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHRoZSBzcGFyZmlsZXhmZXIgZHJpdmVyLgotICovCi1zdGF0aWMgdm9pZAotZW5kX3B1dGZpbGUodm9pZCAqY29udGV4dCwgaW50IHN0YXR1cykKLXsKLQlzdHJ1Y3QgYW55X3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3QgYW55X3JlcXVlc3QgKikgY29udGV4dDsKLQlpZiAocmVxLT5pc19nZXQpIHsKLQkJTE9HRVJSKCIlcyAtIHVuZXhwZWN0ZWQgY2FsbCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQkoKnJlcS0+cHV0LmNvbnRyb2x2bV9lbmRfcHV0RmlsZSkgKCZyZXEtPmNhbGxlcl9jb250ZXh0X2RhdGFbMF0sCi0JCQkJCSAgIHN0YXR1cyk7Ci0JZnJlZV9yZXF1ZXN0KHJlcSwgX19GSUxFX18sIF9fTElORV9fKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLX0KLQotLyogUmVmZXIgdG8gZmlsZXhmZXIuaCBmb3IgZGVzY3JpcHRpb24uICovCi1CT09MCi1maWxleGZlcl9nZXRGaWxlKENPTlRST0xWTV9NRVNTQUdFX0hFQURFUiAqbXNnSGRyLAotCQkgdWxvbmcyIGZpbGVfcmVxdWVzdF9udW1iZXIsCi0JCSB1aW50IHVwbGlua19pbmRleCwKLQkJIHVpbnQgZGlza19pbmRleCwKLQkJIGNoYXIgKmZpbGVfbmFtZSwKLQkJIEdFVF9DT05USUdVT1VTX0NPTlRST0xWTV9QQVlMT0FEX0ZVTkMKLQkJIGdldF9jb250aWd1b3VzX2NvbnRyb2x2bV9wYXlsb2FkLAotCQkgQ09OVFJPTFZNX1JFU1BPTkRfV0lUSF9QQVlMT0FEX0ZVTkMKLQkJIGNvbnRyb2x2bV9yZXNwb25kX3dpdGhfcGF5bG9hZCwKLQkJIFRSQU5TTUlURklMRV9EVU1QX0ZVTkMgZHVtcF9mdW5jKQotewotCUJPT0wgdXNlX2NvdW50X3VwID0gRkFMU0U7Ci0JQk9PTCBmYWlsZWQgPSBUUlVFOwotCXN0cnVjdCBhbnlfcmVxdWVzdCAqcmVxID0gYWxsb2NfcmVxdWVzdChfX0ZJTEVfXywgX19MSU5FX18pOwotCi0JaWYgKCFyZXEpIHsKLQkJTE9HRVJSKCJhbGxvY2F0aW9uIG9mIGFueV9yZXF1ZXN0IGZhaWxlZCIpOwotCQlnb3RvIEF3YXk7Ci0JfQotCS8qIFdlIG5lZWQgdG8gaW5jcmVtZW50IHRoaXMgbW9kdWxlJ3MgdXNlIGNvdW50IGJlY2F1c2Ugd2UncmUgaGFuZGluZwotCSAqIG9mZiBwb2ludGVycyB0byBmdW5jdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlIHRvIGJlIHVzZWQgYnkKLQkgKiBhbm90aGVyIG1vZHVsZS4KLQkgKi8KLQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXVzZV9jb3VudF91cCA9IFRSVUU7Ci0JcmVxLT5pc19nZXQgPSBUUlVFOwotCXJlcS0+ZmlsZV9yZXF1ZXN0X251bWJlciA9IGZpbGVfcmVxdWVzdF9udW1iZXI7Ci0JcmVxLT5kYXRhX3NlcXVlbmNlX251bWJlciA9IDA7Ci0JcmVxLT5kdW1wX2Z1bmMgPSBkdW1wX2Z1bmM7Ci0JcmVxLT5nZXQuY29udHJvbHZtX2hlYWRlciA9ICptc2dIZHI7Ci0JYXRvbWljX3NldCgmcmVxLT5nZXQuYnVmZmVyc19pbl91c2UsIDApOwotCXJlcS0+Z2V0LmdldF9jb250aWd1b3VzX2NvbnRyb2x2bV9wYXlsb2FkID0KLQkgICAgZ2V0X2NvbnRpZ3VvdXNfY29udHJvbHZtX3BheWxvYWQ7Ci0JcmVxLT5nZXQuY29udHJvbHZtX3Jlc3BvbmRfd2l0aF9wYXlsb2FkID0KLQkgICAgY29udHJvbHZtX3Jlc3BvbmRfd2l0aF9wYXlsb2FkOwotCWlmIChzcGFyZmlsZXhmZXJfbG9jYWwycmVtb3RlKHJlcSwJLyogY29udGV4dCwgcGFzc2VkIHRvCi0JCQkJCQkgKiBjYWxsYmFjayBmdW5jcyAqLwotCQkJCSAgICAgIGZpbGVfbmFtZSwKLQkJCQkgICAgICBmaWxlX3JlcXVlc3RfbnVtYmVyLAotCQkJCSAgICAgIHVwbGlua19pbmRleCwKLQkJCQkgICAgICBkaXNrX2luZGV4LAotCQkJCSAgICAgIGdldF9lbXB0eV9idWNrZXRfZm9yX2dldGZpbGVfZGF0YSwKLQkJCQkgICAgICBzZW5kX2Z1bGxfZ2V0ZmlsZV9kYXRhX2J1Y2tldCwKLQkJCQkgICAgICBzZW5kX2VuZF9vZl9nZXRmaWxlX2RhdGEpIDwgMCkgewotCQlMT0dFUlIoInNwYXJmaWxleGZlcl9sb2NhbDJyZW1vdGUgZmFpbGVkIik7Ci0JCWdvdG8gQXdheTsKLQl9Ci0JZmFpbGVkID0gRkFMU0U7Ci1Bd2F5OgotCWlmIChmYWlsZWQpIHsKLQkJaWYgKHVzZV9jb3VudF91cCkgewotCQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JCQl1c2VfY291bnRfdXAgPSBGQUxTRTsKLQkJfQotCQlpZiAocmVxKSB7Ci0JCQlmcmVlX3JlcXVlc3QocmVxLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCQkJcmVxID0gTlVMTDsKLQkJfQotCQlyZXR1cm4gRkFMU0U7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIFRSVUU7Ci0JCS8qIHN1Y2Nlc3M7IHNlbmQgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIGZvciByZXNwb25zZXMgKi8KLQl9Ci19Ci0KLS8qIFJlZmVyIHRvIGZpbGV4ZmVyLmggZm9yIGRlc2NyaXB0aW9uLiAqLwotdm9pZCAqCi1maWxleGZlcl9wdXRGaWxlKENPTlRST0xWTV9NRVNTQUdFX0hFQURFUiAqbXNnSGRyLAotCQkgdWxvbmcyIGZpbGVfcmVxdWVzdF9udW1iZXIsCi0JCSB1aW50IHVwbGlua19pbmRleCwKLQkJIHVpbnQgZGlza19pbmRleCwKLQkJIGNoYXIgKmZpbGVfbmFtZSwKLQkJIFRSQU5TTUlURklMRV9JTklUX0NPTlRFWFRfRlVOQyBpbml0X2NvbnRleHQsCi0JCSBHRVRfQ09OVFJPTFZNX0ZJTEVEQVRBX0ZVTkMgZ2V0X2NvbnRyb2x2bV9maWxlZGF0YSwKLQkJIENPTlRST0xWTV9SRVNQT05EX0ZVTkMgY29udHJvbHZtX2VuZF9wdXRGaWxlLAotCQkgVFJBTlNNSVRGSUxFX0RVTVBfRlVOQyBkdW1wX2Z1bmMpCi17Ci0JQk9PTCB1c2VfY291bnRfdXAgPSBGQUxTRTsKLQlCT09MIGZhaWxlZCA9IFRSVUU7Ci0Jc3RydWN0IGFueV9yZXF1ZXN0ICpyZXEgPSBhbGxvY19yZXF1ZXN0KF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0Jdm9pZCAqY2FsbGVyX2N0eCA9IE5VTEw7Ci0KLQlpZiAoIXJlcSkgewotCQlMT0dFUlIoImFsbG9jYXRpb24gb2YgYW55X3JlcXVlc3QgZmFpbGVkIik7Ci0JCWdvdG8gQXdheTsKLQl9Ci0JY2FsbGVyX2N0eCA9ICh2b2lkICopICgmKHJlcS0+Y2FsbGVyX2NvbnRleHRfZGF0YVswXSkpOwotCS8qIFdlIG5lZWQgdG8gaW5jcmVtZW50IHRoaXMgbW9kdWxlJ3MgdXNlIGNvdW50IGJlY2F1c2Ugd2UncmUgaGFuZGluZwotCSAqIG9mZiBwb2ludGVycyB0byBmdW5jdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlIHRvIGJlIHVzZWQgYnkKLQkgKiBhbm90aGVyIG1vZHVsZS4KLQkgKi8KLQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXVzZV9jb3VudF91cCA9IFRSVUU7Ci0JcmVxLT5pc19nZXQgPSBGQUxTRTsKLQlyZXEtPmZpbGVfcmVxdWVzdF9udW1iZXIgPSBmaWxlX3JlcXVlc3RfbnVtYmVyOwotCXJlcS0+ZGF0YV9zZXF1ZW5jZV9udW1iZXIgPSAwOwotCXJlcS0+ZHVtcF9mdW5jID0gZHVtcF9mdW5jOwotCXJlcS0+cHV0LmdldF9jb250cm9sdm1fZmlsZWRhdGEgPSBnZXRfY29udHJvbHZtX2ZpbGVkYXRhOwotCXJlcS0+cHV0LmNvbnRyb2x2bV9lbmRfcHV0RmlsZSA9IGNvbnRyb2x2bV9lbmRfcHV0RmlsZTsKLQkoKmluaXRfY29udGV4dCkgKGNhbGxlcl9jdHgsIG1zZ0hkciwgZmlsZV9yZXF1ZXN0X251bWJlcik7Ci0JaWYgKHNwYXJmaWxleGZlcl9yZW1vdGUybG9jYWwocmVxLAkvKiBjb250ZXh0LCBwYXNzZWQgdG8KLQkJCQkJCSAqIGNhbGxiYWNrIGZ1bmNzICovCi0JCQkJICAgICAgZmlsZV9uYW1lLAotCQkJCSAgICAgIGZpbGVfcmVxdWVzdF9udW1iZXIsCi0JCQkJICAgICAgdXBsaW5rX2luZGV4LAotCQkJCSAgICAgIGRpc2tfaW5kZXgsCi0JCQkJICAgICAgZ2V0X3B1dGZpbGVfZGF0YSwgZW5kX3B1dGZpbGUpIDwgMCkgewotCQlMT0dFUlIoInNwYXJmaWxleGZlcl9yZW1vdGUybG9jYWwgZmFpbGVkIik7Ci0JCWdvdG8gQXdheTsKLQl9Ci0JZmFpbGVkID0gRkFMU0U7Ci1Bd2F5OgotCWlmIChmYWlsZWQpIHsKLQkJaWYgKHVzZV9jb3VudF91cCkgewotCQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JCQl1c2VfY291bnRfdXAgPSBGQUxTRTsKLQkJfQotCQlpZiAocmVxKSB7Ci0JCQlmcmVlX3JlcXVlc3QocmVxLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCQkJcmVxID0gTlVMTDsKLQkJfQotCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotCQlyZXR1cm4gY2FsbGVyX2N0eDsKLQkJLyogc3VjY2VzczsgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIGZvciByZXNwb25zZXMgKi8KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kdW1wX2dldF9yZXF1ZXN0KHN0cnVjdCBzZXFfZmlsZSAqZiwgc3RydWN0IGdldGZpbGVfcmVxdWVzdCAqZ2V0cmVxKQotewotCXNlcV9wcmludGYoZiwgIiAgYnVmZmVyc19pbl91c2U9JWRcbiIsCi0JCSAgIGF0b21pY19yZWFkKCZnZXRyZXEtPmJ1ZmZlcnNfaW5fdXNlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kdW1wX3B1dF9yZXF1ZXN0KHN0cnVjdCBzZXFfZmlsZSAqZiwgc3RydWN0IHB1dGZpbGVfcmVxdWVzdCAqcHV0cmVxKQotewotfQotCi1zdGF0aWMgdm9pZAotZHVtcF9yZXF1ZXN0KHN0cnVjdCBzZXFfZmlsZSAqZiwgc3RydWN0IGFueV9yZXF1ZXN0ICpyZXEpCi17Ci0Jc2VxX3ByaW50ZihmLCAiKiAlcyBpZD0lbGx1IHNlcT0lbGx1XG4iLAotCQkgICAoKHJlcS0+aXNfZ2V0KSA/ICJHZXQiIDogIlB1dCIpLAotCQkgICByZXEtPmZpbGVfcmVxdWVzdF9udW1iZXIsIHJlcS0+ZGF0YV9zZXF1ZW5jZV9udW1iZXIpOwotCWlmIChyZXEtPmlzX2dldCkKLQkJZHVtcF9nZXRfcmVxdWVzdChmLCAmcmVxLT5nZXQpOwotCWVsc2UKLQkJZHVtcF9wdXRfcmVxdWVzdChmLCAmcmVxLT5wdXQpOwotCWlmIChyZXEtPmR1bXBfZnVuYykKLQkJKCpyZXEtPmR1bXBfZnVuYykgKGYsICYocmVxLT5jYWxsZXJfY29udGV4dF9kYXRhWzBdKSwgIiAgIik7Ci19Ci0KLXZvaWQKLWZpbGV4ZmVyX2R1bXAoc3RydWN0IHNlcV9maWxlICpmKQotewotCXVsb25nIGZsYWdzOwotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwotCi0Jc2VxX3B1dHMoZiwgIk91dHN0YW5kaW5nIFRSQU5TTUlUX0ZJTEUgcmVxdWVzdHM6XG4iKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmUmVxdWVzdF9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmUmVxdWVzdF9saXN0KSB7Ci0JCXN0cnVjdCBhbnlfcmVxdWVzdCAqcmVxOwotCQlyZXEgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgYW55X3JlcXVlc3QsIHJlcV9saXN0KTsKLQkJZHVtcF9yZXF1ZXN0KGYsIHJlcSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlJlcXVlc3RfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci0KLSNlbHNlCQkJCS8qIGlmZGVmIEVOQUJMRV9TUEFSRklMRVhGRVIgKi8KLWludAotZmlsZXhmZXJfY29uc3RydWN0b3Ioc2l6ZV90IHJlcV9jb250ZXh0X2J5dGVzKQotewotCXJldHVybiAwOwkJLyogc3VjY2VzcyAqLwotfQotCi12b2lkCi1maWxleGZlcl9kZXN0cnVjdG9yKHZvaWQpCi17Ci19Ci0KLUJPT0wKLWZpbGV4ZmVyX2dldEZpbGUoQ09OVFJPTFZNX01FU1NBR0VfSEVBREVSICptc2dIZHIsCi0JCSB1NjQgZmlsZV9yZXF1ZXN0X251bWJlciwKLQkJIHVpbnQgdXBsaW5rX2luZGV4LAotCQkgdWludCBkaXNrX2luZGV4LAotCQkgY2hhciAqZmlsZV9uYW1lLAotCQkgR0VUX0NPTlRJR1VPVVNfQ09OVFJPTFZNX1BBWUxPQURfRlVOQwotCQkgZ2V0X2NvbnRpZ3VvdXNfY29udHJvbHZtX3BheWxvYWQsCi0JCSBDT05UUk9MVk1fUkVTUE9ORF9XSVRIX1BBWUxPQURfRlVOQwotCQkgY29udHJvbHZtX3Jlc3BvbmRfd2l0aF9wYXlsb2FkLAotCQkgVFJBTlNNSVRGSUxFX0RVTVBfRlVOQyBkdW1wX2Z1bmMpCi17Ci0JLyogc2luY2Ugbm8gc3BhcmZpbGV4ZmVyIG1vZHVsZSBleGlzdHMgdG8gY2FsbCwgd2UganVzdCBmYWlsICovCi0JcmV0dXJuIEZBTFNFOwotfQotCi12b2lkICoKLWZpbGV4ZmVyX3B1dEZpbGUoQ09OVFJPTFZNX01FU1NBR0VfSEVBREVSICptc2dIZHIsCi0JCSB1NjQgZmlsZV9yZXF1ZXN0X251bWJlciwKLQkJIHVpbnQgdXBsaW5rX2luZGV4LAotCQkgdWludCBkaXNrX2luZGV4LAotCQkgY2hhciAqZmlsZV9uYW1lLAotCQkgVFJBTlNNSVRGSUxFX0lOSVRfQ09OVEVYVF9GVU5DIGluaXRfY29udGV4dCwKLQkJIEdFVF9DT05UUk9MVk1fRklMRURBVEFfRlVOQyBnZXRfY29udHJvbHZtX2ZpbGVkYXRhLAotCQkgQ09OVFJPTFZNX1JFU1BPTkRfRlVOQyBjb250cm9sdm1fZW5kX3B1dEZpbGUsCi0JCSBUUkFOU01JVEZJTEVfRFVNUF9GVU5DIGR1bXBfZnVuYykKLXsKLQkvKiBzaW5jZSBubyBzcGFyZmlsZXhmZXIgbW9kdWxlIGV4aXN0cyB0byBjYWxsLCB3ZSBqdXN0IGZhaWwgKi8KLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZAotZmlsZXhmZXJfZHVtcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCi17Ci19Ci0KLSNlbmRpZgkJCQkvKiBpZmRlZiBFTkFCTEVfU1BBUkZJTEVYRkVSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9maWxleGZlci5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvZmlsZXhmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFiZmNhNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9maWxleGZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qIGZpbGV4ZmVyLmgKLSAqCi0gKiBDb3B5cmlnaHQgqSAyMDEzIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKLSAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKLSAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKiBkZXRhaWxzLgotICovCi0KLS8qIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIHRoYXQgZmlsZXhmZXIuYyBwcm92aWRlcyB0byBvdGhlcgotICogY29kZSBpbiB0aGUgdmlzb3JjaGlwc2V0IGRyaXZlci4KLSAqLwotCi0jaWZuZGVmIF9fRklMRVhGRVJfSF9fCi0jZGVmaW5lIF9fRklMRVhGRVJfSF9fCi0KLSNpbmNsdWRlICJnbG9iYWxzLmgiCi0jaW5jbHVkZSAiY29udHJvbHZtY2hhbm5lbC5oIgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0KLXR5cGVkZWYgdm9pZCAqKCpHRVRfQ09OVElHVU9VU19DT05UUk9MVk1fUEFZTE9BRF9GVU5DKSAodWxvbmcgbWluX3NpemUsCi0JCQkJCQkJdWxvbmcgbWF4X3NpemUsCi0JCQkJCQkJdWxvbmcgKmFjdHVhbF9zaXplKTsKLQotdHlwZWRlZiBCT09MCi0oKkNPTlRST0xWTV9SRVNQT05EX1dJVEhfUEFZTE9BRF9GVU5DKSAoQ09OVFJPTFZNX01FU1NBR0VfSEVBREVSICptc2dIZHIsCi0JCQkJCXU2NCBmaWxlUmVxdWVzdE51bWJlciwKLQkJCQkJdTY0IGRhdGFTZXF1ZW5jZU51bWJlciwKLQkJCQkJaW50IHJlc3BvbnNlLAotCQkJCQl2b2lkICpidWNrZXQsIHVsb25nIHBheWxvYWRDaHVua1NpemUsCi0JCQkJCXVsb25nIHBheWxvYWRVc2VkQnl0ZXMsIEJPT0wgcGFydGlhbCk7Ci0KLXR5cGVkZWYgdm9pZAotKCpUUkFOU01JVEZJTEVfSU5JVF9DT05URVhUX0ZVTkMpKHZvaWQgKmN0eCwKLQkJCQkgIGNvbnN0IENPTlRST0xWTV9NRVNTQUdFX0hFQURFUiAqaGRyLAotCQkJCSAgdTY0IGZpbGVfcmVxdWVzdF9udW1iZXIpOwotdHlwZWRlZiB2b2lkICgqVFJBTlNNSVRGSUxFX0RVTVBfRlVOQykgKHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqY3R4LAotCQkJCQljb25zdCBjaGFyICpwZngpOwotdHlwZWRlZiBpbnQgKCpHRVRfQ09OVFJPTFZNX0ZJTEVEQVRBX0ZVTkMpICh2b2lkICpjdHgsCi0JCQkJCSAgICB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLAotCQkJCQkgICAgQk9PTCBidWZfaXNfdXNlcnNwYWNlLAotCQkJCQkgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7Ci10eXBlZGVmIHZvaWQgKCpDT05UUk9MVk1fUkVTUE9ORF9GVU5DKSAodm9pZCAqY3R4LCBpbnQgcmVzcG9uc2UpOwotCi0vKiBDYWxsIG9uY2UgdG8gaW5pdGlhbGl6ZSBmaWxleGZlci5vLgotICogcmVxX2NvbnRleHRfYnl0ZXMgbnVtYmVyIG9mIGJ5dGVzIHRoZSBjYWxsZXIgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiBlYWNoIGZpbGUKLSAqIHRyYW5zZmVyIGNvbnZlcnNhdGlvbi4gIFRoZSA8Y3R4X2luaXRfdmFsdWU+IHBhc3NlZCB0byBmaWxleGZlcl9wdXRGaWxlKCkgaXMKLSAqIGFzc3VtZWQgdG8gYmUgdGhpcyBtYW55IGJ5dGVzIGluIHNpemUuICBDb2RlIHdpdGhpbiBmaWxleGZlci5vIHdpbGwgY29weSB0aGlzCi0gKiBpbnRvIGEgZHluYW1pY2FsbHktYWxsb2NhdGVkIGFyZWEsIGFuZCBwYXNzIGJhY2sgYSBwb2ludGVyIHRvIHRoYXQgYXJlYSBpbgotICogY2FsbGJhY2sgZnVuY3Rpb25zLgotICovCi1pbnQgZmlsZXhmZXJfY29uc3RydWN0b3Ioc2l6ZV90IHJlcV9jb250ZXh0X2J5dGVzKTsKLQotLyogQ2FsbCBvbmNlIHRvIGNsZWFuIHVwIGZpbGV4ZmVyLm8gKi8KLXZvaWQgZmlsZXhmZXJfZGVzdHJ1Y3Rvcih2b2lkKTsKLQotLyogQ2FsbCB0aGlzIHRvIGR1bXAgZGlhZ25vc3RpYyBpbmZvIGFib3V0IGFsbCBvdXRzdGFuZGluZyBnZXRGaWxlcy9wdXRGaWxlcyAqLwotdm9pZCBmaWxleGZlcl9kdW1wKHN0cnVjdCBzZXFfZmlsZSAqZik7Ci0KLS8qIENhbGwgdG8gdHJhbnNmZXIgYSBmaWxlIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0gKGkuZS4sIGZyb20gdGhlIGVudmlyb25tZW50Ci0gKiB3aGVyZSB0aGlzIGRyaXZlciBpcyBydW5uaW5nKSBhY3Jvc3MgdGhlIGNvbnRyb2x2bSBjaGFubmVsIHRvIGEgcmVtb3RlCi0gKiBlbnZpcm9ubWVudC4gIDEgb3IgbW9yZSBjb250cm9sdm0gcmVzcG9uc2VzIHdpbGwgYmUgc2VudCBhcyBhIHJlc3VsdCwgZWFjaAotICogb2Ygd2hpY2ggd2hvc2UgcGF5bG9hZCBjb250YWlucyBmaWxlIGRhdGEuICBPbmx5IHRoZSBsYXN0IGNvbnRyb2x2bSBtZXNzYWdlCi0gKiB3aWxsIGhhdmUgRmxhZ3MucGFydGlhbENvbXBsZXRpb249PTAuCi0gKgotICogICBtc2dIZHIgICAgICB0aGUgY29udHJvbHZtIG1lc3NhZ2UgaGVhZGVyIG9mIHRoZSBHRVRGSUxFIHJlcXVlc3Qgd2hpY2gKLSAqICAgICAgICAgICAgICAgd2UganVzdCByZWNlaXZlZAotICogICBmaWxlX3JlcXVlc3RfbnVtYmVyICB0aGlzIGlzIGFsbCBkYXRhIGZyb20gdGhlIEdFVEZJTEUgcmVxdWVzdCB0aGF0Ci0gKiAgIHVwbGlua19pbmRleCAgICAgICAgIGRlZmluZSB3aGljaCBmaWxlIGlzIHRvIGJlIHRyYW5zZmVycmVkCi0gKiAgIGRpc2tfaW5kZXgKLSAqICAgZmlsZV9uYW1lCi0gKiAgIGdldF9jb250aWd1b3VzX2NvbnRyb2x2bV9wYXlsb2FkICBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc3BhY2UgaXMgbmVlZGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcGF5bG9hZCBhcmVhCi0gKiAgIGNvbnRyb2x2bV9yZXNwb25kX3dpdGhfcGF5bG9hZCAgICBmdW5jdGlvbiB0byBjYWxsIHRvIHNlbmQgZWFjaCBjb250cm9sdm0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIGNvbnRhaW5pbmcgZmlsZSBkYXRhIGFzIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDsgcmV0dXJucyBGQUxTRSBvbmx5IGlmIHRoZQotICoJCQkJICAgICAgIHBheWxvYWQgYnVmZmVyIHdhcyBmcmVlZCBpbmxpbmUKLSAqICAgZHVtcF9mdW5jICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIGR1bXAgY29udGV4dCBkYXRhIGluCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodW1hbi1yZWFkYWJsZSBmb3JtYXQKLSAqCi0gKiAgUmV0dXJucyBUUlVFIGlmZiB0aGUgZmlsZSB0cmFuc2ZlciByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbml0aWF0ZWQsCi0gKiAgb3IgRkFMU0UgdG8gaW5kaWNhdGUgZmFpbHVyZS4KLSAqLwotQk9PTAotZmlsZXhmZXJfZ2V0RmlsZShDT05UUk9MVk1fTUVTU0FHRV9IRUFERVIgKm1zZ0hkciwKLQkJIHU2NCBmaWxlX3JlcXVlc3RfbnVtYmVyLAotCQkgdWludCB1cGxpbmtfaW5kZXgsCi0JCSB1aW50IGRpc2tfaW5kZXgsCi0JCSBjaGFyICpmaWxlX25hbWUsCi0JCSBHRVRfQ09OVElHVU9VU19DT05UUk9MVk1fUEFZTE9BRF9GVU5DCi0JCSBnZXRfY29udGlndW91c19jb250cm9sdm1fcGF5bG9hZCwKLQkJIENPTlRST0xWTV9SRVNQT05EX1dJVEhfUEFZTE9BRF9GVU5DCi0JCSBjb250cm9sdm1fcmVzcG9uZF93aXRoX3BheWxvYWQsCi0JCSBUUkFOU01JVEZJTEVfRFVNUF9GVU5DIGR1bXBfZnVuYyk7Ci0KLS8qIENhbGwgdG8gY3JlYXRlIGEgZmlsZSBpbiB0aGUgbG9jYWwgZmlsZXN5c3RlbSAoaS5lLiwgaW4gdGhlIGVudmlyb25tZW50Ci0gKiB3aGVyZSB0aGlzIGRyaXZlciBpcyBydW5uaW5nKSBmcm9tIGRhdGEgcmVjZWl2ZWQgYXMgcGF5bG9hZCBpbgotICogY29udHJvbHZtIGNoYW5uZWwgbWVzc2FnZXMgZnJvbSBhIHJlbW90ZSBlbnZpcm9ubWVudC4gIDEgb3IgbW9yZSBjb250cm9sdm0KLSAqIG1lc3NhZ2VzIHdpbGwgYmUgcmVjZWl2ZWQgZm9yIHRoaXMgdHJhbnNmZXIsIGFuZCBvbmx5IHRoZSBsYXN0IHdpbGwgaGF2ZQotICogRmxhZ3MucGFydGlhbENvbXBsZXRpb249PTAuCi0gKgotICogICBtc2dIZHIgICAgICB0aGUgY29udHJvbHZtIG1lc3NhZ2UgaGVhZGVyIG9mIHRoZSBQVVRGSUxFIHJlcXVlc3Qgd2hpY2gKLSAqICAgICAgICAgICAgICAgd2UganVzdCByZWNlaXZlZAotICogICBmaWxlX3JlcXVlc3RfbnVtYmVyICB0aGlzIGlzIGFsbCBkYXRhIGZyb20gdGhlIFBVVEZJTEUgcmVxdWVzdCB0aGF0Ci0gKiAgIHVwbGlua19pbmRleCAgICAgICAgIGRlZmluZSB3aGljaCBmaWxlIGlzIHRvIGJlIGNyZWF0ZWQgaW4gdGhlIGxvY2FsCi0gKiAgIGRpc2tfaW5kZXggICAgICAgICAgIGZpbGVzeXN0ZW0KLSAqICAgZmlsZV9uYW1lCi0gKiAgIGluaXRfY29udGV4dCAgICAgICAgIGZ1bmN0aW9uIHRvIGNhbGwgdG8gaW5pdGlhbGl6ZSB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgPHJlcV9jb250ZXh0X2J5dGVzPi1zaXplZCBzdG9yYWdlIGFyZWEgcmV0dXJuZWQgYnkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmdW5jOyBub3RlIHRoYXQgaXQgd291bGQgTk9UIGJlIHN1ZmZpY2llbnQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgdGhlIGNhbGxlciB0byBpbml0aWFsaXplIHRoaXMgdXBvbiByZXR1cm4sIGFzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0aGUgb3RoZXIgdXNlci1zdXBwbGllZCBjYWxsYmFja3MgbWlnaHQgaGF2ZQotICogICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gY2FsbGVkIGJ5IHRoZW4KLSAqICAgZ2V0X2NvbnRyb2x2bV9maWxlZGF0YSAgIGZ1bmN0aW9uIHRvIGNhbGwgdG8gb2J0YWluIG1vcmUgZGF0YSBmb3IgdGhlIGZpbGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHdyaXR0ZW47IHJlZmVyIHRvIGdldF9jb250cm9sdm1fZmlsZWRhdGEoKQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdmlzb3JjaGlwc2V0X21haW4uYyBmb3IgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgcGFyYW1ldGVycwotICogICBjb250cm9sdm1fZW5kX3B1dEZpbGUgICAgZnVuY3Rpb24gdG8gY2FsbCB0byBpbmRpY2F0ZSB0aGF0IGNyZWF0aW9uIG9mIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmlsZSBoYXMgY29tcGxldGVkOyAgc2V0IDxyZXNwb25zZT4gdG8gYQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgdmFsdWUgdG8gaW5kaWNhdGUgYW4gZXJyb3IKLSAqICAgZHVtcF9mdW5jICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIGR1bXAgY29udGV4dCBkYXRhIGluIGh1bWFuLXJlYWRhYmxlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQKLSAqCi0gKiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBkeW5hbWljYWxseS1hbGxvY2F0ZWQgc3RvcmFnZSBhcmVhIG9mIHNpemUKLSAqICA8cmVxX2NvbnRleHRfYnl0ZXM+IHdoaWNoIHRoZSBjYWxsZXIgY2FuIHVzZSwgb3IgTlVMTCBmb3IgZXJyb3IuICBUaGUKLSAqICBjYWxsZXIgc2hvdWxkIE5FVkVSIGZyZWUgdGhlIHJldHVybmVkIHBvaW50ZXIsIGJ1dCBzaG91bGQgZXhwZWN0IHRvIHJlY2VpdmUKLSAqICBpdCBhcyB0aGUgPGN0eD4gYXJndW1lbnQgd2hlbiBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIGNhbGxlZC4KLSAqLwotdm9pZCAqZmlsZXhmZXJfcHV0RmlsZShDT05UUk9MVk1fTUVTU0FHRV9IRUFERVIgKm1zZ0hkciwKLQkJICAgICAgIHU2NCBmaWxlX3JlcXVlc3RfbnVtYmVyLAotCQkgICAgICAgdWludCB1cGxpbmtfaW5kZXgsCi0JCSAgICAgICB1aW50IGRpc2tfaW5kZXgsCi0JCSAgICAgICBjaGFyICpmaWxlX25hbWUsCi0JCSAgICAgICBUUkFOU01JVEZJTEVfSU5JVF9DT05URVhUX0ZVTkMgaW5pdF9jb250ZXh0LAotCQkgICAgICAgR0VUX0NPTlRST0xWTV9GSUxFREFUQV9GVU5DIGdldF9jb250cm9sdm1fZmlsZWRhdGEsCi0JCSAgICAgICBDT05UUk9MVk1fUkVTUE9ORF9GVU5DIGNvbnRyb2x2bV9lbmRfcHV0RmlsZSwKLQkJICAgICAgIFRSQU5TTUlURklMRV9EVU1QX0ZVTkMgZHVtcF9mdW5jKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9nbG9iYWxzLmggYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC9nbG9iYWxzLmgKaW5kZXggYTBlNmQ0Zi4uMGZlMTQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvZ2xvYmFscy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L2dsb2JhbHMuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGdsb2JhbHMuaAogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3BhcnNlci5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvcGFyc2VyLmMKaW5kZXggYjQwOGQ0MS4uNDI3NGRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvcGFyc2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvcGFyc2VyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBwYXJzZXIuYwogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb250cm9sdm1jaGFubmVsLmgiCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KIAogI2RlZmluZSBNWURSVk5BTUUgInZpc29yY2hpcHNldF9wYXJzZXIiCiAjZGVmaW5lIENVUlJFTlRfRklMRV9QQyBWSVNPUl9DSElQU0VUX1BDX3BhcnNlcl9jCkBAIC0xOTEsNyArMTkyLDcgQEAKIAlyZXR1cm4gKHZvaWQgKikgY3R4LT5kYXRhOwogfQogCi1HVUlECit1dWlkX2xlCiBwYXJzZXJfaWRfZ2V0KFBBUlNFUl9DT05URVhUICpjdHgpCiB7CiAJVUxUUkFfQ09OVFJPTFZNX1BBUkFNRVRFUlNfSEVBREVSICpwaGRyID0gTlVMTDsKQEAgLTE5OSw3ICsyMDAsNyBAQAogCWlmIChjdHggPT0gTlVMTCkgewogCQlFUlJEUlYoIiVzICglczolZCkgLSBubyBjb250ZXh0IiwKIAkJICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCQlyZXR1cm4gR3VpZDA7CisJCXJldHVybiBOVUxMX1VVSURfTEU7CiAJfQogCXBoZHIgPSAoVUxUUkFfQ09OVFJPTFZNX1BBUkFNRVRFUlNfSEVBREVSICopIChjdHgtPmRhdGEpOwogCXJldHVybiBwaGRyLT5JZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3BhcnNlci5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvcGFyc2VyLmgKaW5kZXggYTBjYzUwYS4uYmU4NWZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvcGFyc2VyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvcGFyc2VyLmgKQEAgLTEsNiArMSw2IEBACiAvKiBwYXJzZXIuaAogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE4LDYgKzE4LDggQEAKICNpZm5kZWYgX19QQVJTRVJfSF9fCiAjZGVmaW5lIF9fUEFSU0VSX0hfXwogCisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgorCiAjaW5jbHVkZSAidW5pa2xvZy5oIgogI2luY2x1ZGUgInRpbXNrbW9kLmgiCiAjaW5jbHVkZSAiY2hhbm5lbC5oIgpAQCAtMzcsNyArMzksNyBAQAogdm9pZCBwYXJzZXJfcGFyYW1fc3RhcnQoUEFSU0VSX0NPTlRFWFQgKmN0eCwgUEFSU0VSX1dISUNIX1NUUklORyB3aGljaF9zdHJpbmcpOwogdm9pZCAqcGFyc2VyX3BhcmFtX2dldChQQVJTRVJfQ09OVEVYVCAqY3R4LCBjaGFyICpuYW0sIGludCBuYW1lc2l6ZSk7CiB2b2lkICpwYXJzZXJfc3RyaW5nX2dldChQQVJTRVJfQ09OVEVYVCAqY3R4KTsKLUdVSUQgcGFyc2VyX2lkX2dldChQQVJTRVJfQ09OVEVYVCAqY3R4KTsKK3V1aWRfbGUgcGFyc2VyX2lkX2dldChQQVJTRVJfQ09OVEVYVCAqY3R4KTsKIGNoYXIgKnBhcnNlcl9zaW1wbGVTdHJpbmdfZ2V0KFBBUlNFUl9DT05URVhUICpjdHgpOwogdm9pZCAqcGFyc2VyX2J5dGVTdHJlYW1fZ2V0KFBBUlNFUl9DT05URVhUICpjdHgsIHVsb25nICpuYnl0ZXMpOwogdm9pZCBwYXJzZXJfZG9uZShQQVJTRVJfQ09OVEVYVCAqY3R4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Rlc3RpbmcuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Rlc3RpbmcuaAppbmRleCBhNDRmNTU1Li4wMTVkNTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC90ZXN0aW5nLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvdGVzdGluZy5oCkBAIC0xLDYgKzEsNiBAQAogLyogdGVzdGluZy5oCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBfX1ZJU09SQ0hJUFNFVF9URVNUSU5HX0hfXwogCiAjZGVmaW5lIFZJU09SQ0hJUFNFVF9URVNUX1BST0MKKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CiAjaW5jbHVkZSAiZ2xvYmFscy5oIgogI2luY2x1ZGUgImNvbnRyb2x2bWNoYW5uZWwuaCIKIApAQCAtMjgsMTAgKzI5LDEwIEBACiB2b2lkIHRlc3RfbWFudWZhY3R1cmVfdm5pY19jbGllbnRfYWRkX3BoeXMoSE9TVEFERFJFU1MgYWRkcik7CiB2b2lkIHRlc3RfbWFudWZhY3R1cmVfcHJlYW1ibGVfbWVzc2FnZXModm9pZCk7CiB2b2lkIHRlc3RfbWFudWZhY3R1cmVfZGV2aWNlX2F0dGFjaCh1bG9uZyBidXNObywgdWxvbmcgZGV2Tm8pOwotdm9pZCB0ZXN0X21hbnVmYWN0dXJlX2RldmljZV9hZGQodWxvbmcgYnVzTm8sIHVsb25nIGRldk5vLCBHVUlEIGRhdGFUeXBlR3VpZCwKK3ZvaWQgdGVzdF9tYW51ZmFjdHVyZV9kZXZpY2VfYWRkKHVsb25nIGJ1c05vLCB1bG9uZyBkZXZObywgdXVpZF9sZSBkYXRhVHlwZUd1aWQsCiAJCQkJIHZvaWQgKnBDaGFubmVsKTsKIHZvaWQgdGVzdF9tYW51ZmFjdHVyZV9hZGRfYnVzKHVsb25nIGJ1c05vLCB1bG9uZyBtYXhEZXZpY2VzLAotCQkJICAgICAgR1VJRCBpZCwgdTggKm5hbWUsIEJPT0wgaXNTZXJ2ZXIpOworCQkJICAgICAgdXVpZF9sZSBpZCwgdTggKm5hbWUsIEJPT0wgaXNTZXJ2ZXIpOwogdm9pZCB0ZXN0X21hbnVmYWN0dXJlX2RldmljZV9kZXN0cm95KHVsb25nIGJ1c05vLCB1bG9uZyBkZXZObyk7CiB2b2lkIHRlc3RfbWFudWZhY3R1cmVfYnVzX2Rlc3Ryb3kodWxvbmcgYnVzTm8pOwogdm9pZCB0ZXN0X21hbnVmYWN0dXJlX2RldGFjaF9leHRlcm5hbFBvcnQodWxvbmcgc3dpdGNoTm8sIHVsb25nIGV4dGVybmFsUG9ydE5vKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Zpc29yY2hpcHNldC5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvdmlzb3JjaGlwc2V0LmgKaW5kZXggZDk1ODI1ZC4uZTAxY2M3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvdmlzb3JjaGlwc2V0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvdmlzb3JjaGlwc2V0LmgKQEAgLTEsNiArMSw2IEBACiAvKiB2aXNvcmNoaXBzZXQuaAogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE4LDYgKzE4LDggQEAKICNpZm5kZWYgX19WSVNPUkNISVBTRVRfSF9fCiAjZGVmaW5lIF9fVklTT1JDSElQU0VUX0hfXwogCisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgorCiAjaW5jbHVkZSAidGltc2ttb2QuaCIKICNpbmNsdWRlICJjaGFubmVsLmgiCiAjaW5jbHVkZSAiY29udHJvbHZtY2hhbm5lbC5oIgpAQCAtNjMsOCArNjUsOCBAQAogCUhPU1RBRERSRVNTIGNoYW5uZWxBZGRyOwogCXN0cnVjdCBJbnRlcnJ1cHRJbmZvIGludHI7CiAJVTY0IG5DaGFubmVsQnl0ZXM7Ci0JR1VJRCBjaGFubmVsVHlwZUd1aWQ7Ci0JR1VJRCBjaGFubmVsSW5zdEd1aWQ7CisJdXVpZF9sZSBjaGFubmVsVHlwZUd1aWQ7CisJdXVpZF9sZSBjaGFubmVsSW5zdEd1aWQ7CiAKIH0gVklTT1JDSElQU0VUX0NIQU5ORUxfSU5GTzsKIApAQCAtNzcsNyArNzksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CiAJVTMyIGJ1c05vOwogCVUzMiBkZXZObzsKLQlHVUlEIGRldkluc3RHdWlkOworCXV1aWRfbGUgZGV2SW5zdEd1aWQ7CiAJVklTT1JDSElQU0VUX1NUQVRFIHN0YXRlOwogCVZJU09SQ0hJUFNFVF9DSEFOTkVMX0lORk8gY2hhbkluZm87CiAJVTMyIFJlc2VydmVkMTsJCS8qIENPTlRST0xWTV9JRCAqLwpAQCAtMTI1LDcgKzEyNyw3IEBACiAJVTMyIGJ1c05vOwogCVZJU09SQ0hJUFNFVF9TVEFURSBzdGF0ZTsKIAlWSVNPUkNISVBTRVRfQ0hBTk5FTF9JTkZPIGNoYW5JbmZvOwotCUdVSUQgcGFydGl0aW9uR3VpZDsKKwl1dWlkX2xlIHBhcnRpdGlvbkd1aWQ7CiAJVTY0IHBhcnRpdGlvbkhhbmRsZTsKIAlVOCAqbmFtZTsJCS8qIFVURjggKi8KIAlVOCAqZGVzY3JpcHRpb247CS8qIFVURjggKi8KQEAgLTE2MSw3ICsxNjMsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCVUzMiBzd2l0Y2hObzsKIAlWSVNPUkNISVBTRVRfU1RBVEUgc3RhdGU7Ci0JR1VJRCBzd2l0Y2hUeXBlR3VpZDsKKwl1dWlkX2xlIHN3aXRjaFR5cGVHdWlkOwogCVU4ICphdXRoU2VydmljZTE7CiAJVTggKmF1dGhTZXJ2aWNlMjsKIAlVOCAqYXV0aFNlcnZpY2UzOwpAQCAtMTgxLDcgKzE4Myw3IEBACiAJVTMyIHN3aXRjaE5vOwogCVUzMiBleHRlcm5hbFBvcnRObzsKIAlWSVNPUkNISVBTRVRfU1RBVEUgc3RhdGU7Ci0JR1VJRCBuZXR3b3JrWm9uZUd1aWQ7CisJdXVpZF9sZSBuZXR3b3JrWm9uZUd1aWQ7CiAJaW50IHBkUG9ydDsKIAlVOCAqaXA7CiAJVTggKmlwTmV0bWFzazsKQEAgLTIyNCw3ICsyMjYsNyBAQAogCXZvaWQgKCpkZXZpY2VfZGVzdHJveSkodWxvbmcgYnVzTm8sIHVsb25nIGRldk5vKTsKIAl2b2lkICgqZGV2aWNlX3BhdXNlKSh1bG9uZyBidXNObywgdWxvbmcgZGV2Tm8pOwogCXZvaWQgKCpkZXZpY2VfcmVzdW1lKSh1bG9uZyBidXNObywgdWxvbmcgZGV2Tm8pOwotCWludCAoKmdldF9jaGFubmVsX2luZm8pKEdVSUQgdHlwZUd1aWQsIHVsb25nICptaW5TaXplLAorCWludCAoKmdldF9jaGFubmVsX2luZm8pKHV1aWRfbGUgdHlwZUd1aWQsIHVsb25nICptaW5TaXplLAogCQkJCSB1bG9uZyAqbWF4U2l6ZSk7CiB9IFZJU09SQ0hJUFNFVF9CVVNERVZfTk9USUZJRVJTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC92aXNvcmNoaXBzZXRfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcmNoaXBzZXQvdmlzb3JjaGlwc2V0X21haW4uYwppbmRleCBjNDc1ZTI1Li4wYTYwMmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC92aXNvcmNoaXBzZXRfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Zpc29yY2hpcHNldF9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKiB2aXNvcmNoaXBzZXRfbWFpbi5jCiAgKgotICogQ29weXJpZ2h0IO+/vSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJwYXJzZXIuaCIKICNpbmNsdWRlICJ1bmlrbG9nLmgiCiAjaW5jbHVkZSAidWlzdXRpbHMuaCIKLSNpbmNsdWRlICJndWlkdXRpbHMuaCIKICNpbmNsdWRlICJjb250cm9sdm1jb21wbGV0aW9uc3RhdHVzLmgiCiAjaW5jbHVkZSAiZ3Vlc3RsaW51eGRlYnVnLmgiCi0jaW5jbHVkZSAiZmlsZXhmZXIuaCIKIAogI2luY2x1ZGUgPGxpbnV4L25scy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KIAogI2RlZmluZSBDVVJSRU5UX0ZJTEVfUEMgVklTT1JfQ0hJUFNFVF9QQ192aXNvcmNoaXBzZXRfbWFpbl9jCiAjZGVmaW5lIFRFU1RfVk5JQ19QSFlTSVRGICJldGgwIgkvKiBwaHlzaWNhbCBuZXR3b3JrIGl0ZiBmb3IKQEAgLTgyLDcgKzgxLDcgQEAKIHN0YXRpYyBDT05UUk9MVk1fTUVTU0FHRV9IRUFERVIgZ19EaWFnTXNnSGRyOwogc3RhdGljIENPTlRST0xWTV9NRVNTQUdFX0hFQURFUiBnX0NoaXBTZXRNc2dIZHI7CiBzdGF0aWMgQ09OVFJPTFZNX01FU1NBR0VfSEVBREVSIGdfRGVsRHVtcE1zZ0hkcjsKLXN0YXRpYyBjb25zdCBHVUlEIFVsdHJhRGlhZ1Bvb2xDaGFubmVsUHJvdG9jb2xHdWlkID0KK3N0YXRpYyBjb25zdCB1dWlkX2xlIFVsdHJhRGlhZ1Bvb2xDaGFubmVsUHJvdG9jb2xHdWlkID0KIAlVTFRSQV9ESUFHX1BPT0xfQ0hBTk5FTF9QUk9UT0NPTF9HVUlEOwogLyogMHhmZmZmZmYgaXMgYW4gaW52YWxpZCBCdXMvRGV2aWNlIG51bWJlciAqLwogc3RhdGljIHVsb25nIGdfZGlhZ3Bvb2xCdXNObyA9IDB4ZmZmZmZmOwpAQCAtOTMsMTUgKzkyLDEyIEBACiAgKiAidmlzb3JoYWNrYnVzIikKICAqLwogI2RlZmluZSBGT1JfVklTT1JIQUNLQlVTKGNoYW5uZWxfdHlwZV9ndWlkKSBcCi0JKChtZW1jbXAoJmNoYW5uZWxfdHlwZV9ndWlkLCAmVWx0cmFWbmljQ2hhbm5lbFByb3RvY29sR3VpZCwgXAotCQkgc2l6ZW9mKEdVSUQpKSA9PSAwKSB8fAkJCQkgICAgXAotCSAobWVtY21wKCZjaGFubmVsX3R5cGVfZ3VpZCwgJlVsdHJhVmhiYUNoYW5uZWxQcm90b2NvbEd1aWQsIFwKLQkJIHNpemVvZihHVUlEKSkgPT0gMCkpCisJKCgodXVpZF9sZV9jbXAoY2hhbm5lbF90eXBlX2d1aWQsIFVsdHJhVm5pY0NoYW5uZWxQcm90b2NvbEd1aWQpID09IDApXAorCXx8ICh1dWlkX2xlX2NtcChjaGFubmVsX3R5cGVfZ3VpZCwgVWx0cmFWaGJhQ2hhbm5lbFByb3RvY29sR3VpZCkgPT0gMCkpKQogI2RlZmluZSBGT1JfVklTT1JCVVMoY2hhbm5lbF90eXBlX2d1aWQpICghKEZPUl9WSVNPUkhBQ0tCVVMoY2hhbm5lbF90eXBlX2d1aWQpKSkKIAogI2RlZmluZSBpc19kaWFncG9vbF9jaGFubmVsKGNoYW5uZWxfdHlwZV9ndWlkKSBcCi0JIChtZW1jbXAoJmNoYW5uZWxfdHlwZV9ndWlkLCBcCi0JCSAmVWx0cmFEaWFnUG9vbENoYW5uZWxQcm90b2NvbEd1aWQsIHNpemVvZihHVUlEKSkgPT0gMCkKKwkgKHV1aWRfbGVfY21wKGNoYW5uZWxfdHlwZV9ndWlkLCBVbHRyYURpYWdQb29sQ2hhbm5lbFByb3RvY29sR3VpZCkgPT0gMCkKIAogdHlwZWRlZiBlbnVtIHsKIAlQQVJUUFJPUF9pbnZhbGlkLApAQCAtMTE4OSw3ICsxMTg1LDcgQEAKIAlwYXJzZXJfcGFyYW1fc3RhcnQocGFyc2VyX2N0eCwgUEFSU0VSU1RSSU5HX05BTUUpOwogCXBCdXNJbmZvLT5uYW1lID0gcGFyc2VyX3N0cmluZ19nZXQocGFyc2VyX2N0eCk7CiAKLQl2aXNvcmNoYW5uZWxfR1VJRF9pZCgmcEJ1c0luZm8tPnBhcnRpdGlvbkd1aWQsIHMpOworCXZpc29yY2hhbm5lbF91dWlkX2lkKCZwQnVzSW5mby0+cGFydGl0aW9uR3VpZCwgcyk7CiAJcEJ1c0luZm8tPnByb2NPYmplY3QgPQogCSAgICB2aXNvcl9wcm9jX0NyZWF0ZU9iamVjdChQYXJ0aXRpb25UeXBlLCBzLCAodm9pZCAqKSAocEJ1c0luZm8pKTsKIAlpZiAocEJ1c0luZm8tPnByb2NPYmplY3QgPT0gTlVMTCkgewpAQCAtMjY5OSw2ICsyNjk1LDkgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnRvb2xhY3Rpb25fZmlsZTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmJvb3RUb1Rvb2xfZmlsZTsKIAorCWlmICghdW5pc3lzX3NwYXJfcGxhdGZvcm0pCisJCXJldHVybiAtRU5PREVWOworCiAJTE9HSU5GKCJjaGlwc2V0IGRyaXZlciB2ZXJzaW9uICVzIGxvYWRlZCIsIFZFUlNJT04pOwogCS8qIHByb2Nlc3MgbW9kdWxlIG9wdGlvbnMgKi8KIAlQT1NUQ09ERV9MSU5VWF8yKERSSVZFUl9FTlRSWV9QQywgUE9TVENPREVfU0VWRVJJVFlfSU5GTyk7CkBAIC0yNzczLDEyICsyNzcyLDYgQEAKIAkJCVByb2NEaXIsICZwYXJhaG90cGx1Z19wcm9jX2ZvcHMpOwogCW1lbXNldCgmZ19EZWxEdW1wTXNnSGRyLCAwLCBzaXplb2YoQ09OVFJPTFZNX01FU1NBR0VfSEVBREVSKSk7CiAKLQlpZiAoZmlsZXhmZXJfY29uc3RydWN0b3Ioc2l6ZW9mKHN0cnVjdCBwdXRmaWxlX3JlcXVlc3QpKSA8IDApIHsKLQkJRVJSRFJWKCJmaWxleGZlcl9jb25zdHJ1Y3RvciBmYWlsZWQ6IChzdGF0dXM9LTEpXG4iKTsKLQkJUE9TVENPREVfTElOVVhfMihDSElQU0VUX0lOSVRfRkFJTFVSRV9QQywgRElBR19TRVZFUklUWV9FUlIpOwotCQlyYyA9IC0xOwotCQlnb3RvIEF3YXk7Ci0JfQogCVB1dGZpbGVfYnVmZmVyX2xpc3RfcG9vbCA9CiAJICAgIGttZW1fY2FjaGVfY3JlYXRlKFB1dGZpbGVfYnVmZmVyX2xpc3RfcG9vbF9uYW1lLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBwdXRmaWxlX2J1ZmZlcl9lbnRyeSksCkBAIC0yODYyLDcgKzI4NTUsNiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koUHV0ZmlsZV9idWZmZXJfbGlzdF9wb29sKTsKIAkJUHV0ZmlsZV9idWZmZXJfbGlzdF9wb29sID0gTlVMTDsKIAl9Ci0JZmlsZXhmZXJfZGVzdHJ1Y3RvcigpOwogCWlmIChDb250cm9sVm1PYmplY3QpIHsKIAkJdmlzb3JfcHJvY19EZXN0cm95T2JqZWN0KENvbnRyb2xWbU9iamVjdCk7CiAJCUNvbnRyb2xWbU9iamVjdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29yY2hpcHNldC92aXNvcmNoaXBzZXRfdW1vZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Zpc29yY2hpcHNldF91bW9kZS5oCmluZGV4IDI1OWU4NDAuLjA2YmE1YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Zpc29yY2hpcHNldF91bW9kZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3JjaGlwc2V0L3Zpc29yY2hpcHNldF91bW9kZS5oCkBAIC0xLDYgKzEsNiBAQAogLyogdmlzb3JjaGlwc2V0X3Vtb2RlLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9jaGFycXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2NoYXJxdWV1ZS5jCmluZGV4IDBjZWVkZTEuLjIyMjQxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2NoYXJxdWV1ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2NoYXJxdWV1ZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogY2hhcnF1ZXVlLmMKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00MSw2ICs0MSw3IEBACiB7CiAJaW50IGFsbG9jX3NpemUgPSBzaXplb2YoQ0hBUlFVRVVFKSArIG5zbG90cyArIDE7CiAJQ0hBUlFVRVVFICpjcSA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTHxfX0dGUF9OT1JFVFJZKTsKKwogCWlmIChjcSA9PSBOVUxMKSB7CiAJCUVSUkRSVigidmlzb3JfY2hhcnF1ZXVlX2NyZWF0ZSBhbGxvY2F0aW9uIGZhaWxlZCAoYWxsb2Nfc2l6ZT0lZCkiLAogCQkgICAgICAgYWxsb2Nfc2l6ZSk7CkBAIC03NSw2ICs3Niw3IEBACiBCT09MIHZpc29yX2NoYXJxdWV1ZV9pc19lbXB0eShDSEFSUVVFVUUgKmNoYXJxdWV1ZSkKIHsKIAlCT09MIGI7CisKIAlzcGluX2xvY2soJmNoYXJxdWV1ZS0+bG9jayk7CiAJYiA9IElTX0VNUFRZKGNoYXJxdWV1ZSk7CiAJc3Bpbl91bmxvY2soJmNoYXJxdWV1ZS0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9jaGFycXVldWUuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2NoYXJxdWV1ZS5oCmluZGV4IGU4MmFlMGIuLmQ2ZjE2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2NoYXJxdWV1ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2NoYXJxdWV1ZS5oCkBAIC0xLDYgKzEsNiBAQAogLyogY2hhcnF1ZXVlLmgKICAqCi0gKiBDb3B5cmlnaHQgqSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9lYXN5cHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvZWFzeXByb2MuYwppbmRleCA2MGI2YjgzLi4zYjM4ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9lYXN5cHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2Vhc3lwcm9jLmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgwqkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjEsNiArNjEsNyBAQAogCWNyZWF0ZVByb2NEaXIoY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwID0gcHJvY19ta2Rpcl9tb2RlKG5hbWUsIFNfSUZESVIsIHBhcmVudCk7CisKIAlpZiAocCA9PSBOVUxMKQogCQlFUlJEUlYoImZhaWxlZCB0byBjcmVhdGUgL3Byb2MgZGlyZWN0b3J5ICVzIiwgbmFtZSk7CiAJcmV0dXJuIHA7CkBAIC0xOTYsNiArMTk3LDcgQEAKIHsKIAlpZiAoKHBkcml2ZXItPlByb2NEZXZpY2VEaXIgIT0gTlVMTCkgJiYgKHAtPnByb2NEZXZpY2V4RGlyID09IE5VTEwpKSB7CiAJCWNoYXIgc1syOV07CisKIAkJc3ByaW50ZihzLCAiJWQiLCBkZXZubyk7CiAJCXAtPnByb2NEZXZpY2V4RGlyID0gY3JlYXRlUHJvY0RpcihzLCBwZHJpdmVyLT5Qcm9jRGV2aWNlRGlyKTsKIAkJcC0+ZGV2bm8gPSBkZXZubzsKQEAgLTI2Nyw2ICsyNjksNyBAQAogCQkJCSBzdHJ1Y3QgZWFzeXByb2NfZGV2aWNlX2luZm8gKnAsIGludCBkZXZubykKIHsKIAlzaXplX3QgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHAtPmRldmljZV9wcm9wZXJ0eV9pbmZvKTsgaSsrKSB7CiAJCWlmIChwLT5kZXZpY2VfcHJvcGVydHlfaW5mb1tpXS5wcm9jRW50cnkgIT0gTlVMTCkgewogCQkJc3RydWN0IGVhc3lwcm9jX2RldmljZV9wcm9wZXJ0eV9pbmZvICpweCA9CkBAIC0yODEsNiArMjg0LDcgQEAKIAl9CiAJaWYgKHAtPnByb2NEZXZpY2V4RGlyICE9IE5VTEwpIHsKIAkJY2hhciBzWzI5XTsKKwogCQlzcHJpbnRmKHMsICIlZCIsIGRldm5vKTsKIAkJcmVtb3ZlX3Byb2NfZW50cnkocywgcGRyaXZlci0+UHJvY0RldmljZURpcik7CiAJCXAtPnByb2NEZXZpY2V4RGlyID0gTlVMTDsKQEAgLTMzNCw2ICszMzgsNyBAQAogCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZWFzeXByb2NfZHJpdmVyX2luZm8gKnAgPSBOVUxMOwogCWNoYXIgbG9jYWxfYnVmWzI1Nl07CisKIAlpZiAoc2VxID09IE5VTEwpCiAJCXJldHVybiAwOwogCXAgPSAoc3RydWN0IGVhc3lwcm9jX2RyaXZlcl9pbmZvICopKHNlcS0+cHJpdmF0ZSk7CkBAIC0zNTYsNiArMzYxLDcgQEAKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGVhc3lwcm9jX2RldmljZV9pbmZvICpwID0gTlVMTDsKIAljaGFyIGxvY2FsX2J1ZlsyNTZdOworCiAJaWYgKHNlcSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAlwID0gKHN0cnVjdCBlYXN5cHJvY19kZXZpY2VfaW5mbyAqKShzZXEtPnByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvZWFzeXByb2MuaCBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL2Vhc3lwcm9jLmgKaW5kZXggMWNlZjFmZC4uNmNlN2Q1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvZWFzeXByb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9lYXN5cHJvYy5oCkBAIC0xLDYgKzEsNiBAQAogLyogZWFzeXByb2MuaAogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL21lbXJlZ2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvbWVtcmVnaW9uLmgKaW5kZXggYmIxMjJkYi4uZjRhNjVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvbWVtcmVnaW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvbWVtcmVnaW9uLmgKQEAgLTEsNiArMSw2IEBACiAvKiBtZW1yZWdpb24uaAogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTM4LDYgKzM4LDYgQEAKIHVsb25nIHZpc29yX21lbXJlZ2lvbl9nZXRfbmJ5dGVzKE1FTVJFR0lPTiAqbWVtcmVnaW9uKTsKIHZvaWQgbWVtcmVnaW9uX2R1bXAoTUVNUkVHSU9OICptZW1yZWdpb24sIGNoYXIgKnMsCiAJCSAgICB1bG9uZyBvZmYsIHVsb25nIGxlbiwgc3RydWN0IHNlcV9maWxlICpzZXEpOwotdm9pZCAqdmlzb3JfbWVtcmVnaW9uX2dldF9wb2ludGVyKE1FTVJFR0lPTiAqbWVtcmVnaW9uKTsKK3ZvaWQgX19pb21lbSAqdmlzb3JfbWVtcmVnaW9uX2dldF9wb2ludGVyKE1FTVJFR0lPTiAqbWVtcmVnaW9uKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9tZW1yZWdpb25fZGlyZWN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9tZW1yZWdpb25fZGlyZWN0LmMKaW5kZXggMmMxMDYxZC4uMjhkZmJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvbWVtcmVnaW9uX2RpcmVjdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL21lbXJlZ2lvbl9kaXJlY3QuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIG1lbXJlZ2lvbl9kaXJlY3QuYwogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI5LDcgKzI5LDcgQEAKIHN0cnVjdCBNRU1SRUdJT05fVGFnIHsKIAlIT1NUQUREUkVTUyBwaHlzYWRkcjsKIAl1bG9uZyBuYnl0ZXM7Ci0Jdm9pZCAqbWFwcGVkOworCXZvaWQgX19pb21lbSAqbWFwcGVkOwogCUJPT0wgcmVxdWVzdGVkOwogCUJPT0wgb3ZlcmxhcHBlZDsKIH07CkBAIC05Myw3ICs5Myw3IEBACiAKIAltZW1yZWdpb24tPnBoeXNhZGRyID0gcGFyZW50LT5waHlzYWRkciArIG9mZnNldDsKIAltZW1yZWdpb24tPm5ieXRlcyA9IG5ieXRlczsKLQltZW1yZWdpb24tPm1hcHBlZCA9ICgodTggKikgKHBhcmVudC0+bWFwcGVkKSkgKyBvZmZzZXQ7CisJbWVtcmVnaW9uLT5tYXBwZWQgPSAoKHU4IF9faW9tZW0gKikgKHBhcmVudC0+bWFwcGVkKSkgKyBvZmZzZXQ7CiAJbWVtcmVnaW9uLT5yZXF1ZXN0ZWQgPSBGQUxTRTsKIAltZW1yZWdpb24tPm92ZXJsYXBwZWQgPSBUUlVFOwogCXJldHVybiBtZW1yZWdpb247CkBAIC0xNDksNyArMTQ5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpc29yX21lbXJlZ2lvbl9nZXRfbmJ5dGVzKTsKIAotdm9pZCAqCit2b2lkIF9faW9tZW0gKgogdmlzb3JfbWVtcmVnaW9uX2dldF9wb2ludGVyKE1FTVJFR0lPTiAqbWVtcmVnaW9uKQogewogCXJldHVybiBtZW1yZWdpb24tPm1hcHBlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL3BlcmlvZGljX3dvcmsuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL3BlcmlvZGljX3dvcmsuYwppbmRleCAwNjcwYTMxLi4zOGE2MGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9wZXJpb2RpY193b3JrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvcGVyaW9kaWNfd29yay5jCkBAIC0xLDYgKzEsNiBAQAogLyogcGVyaW9kaWNfd29yay5jCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtOTIsNiArOTIsNyBAQAogQk9PTCB2aXNvcl9wZXJpb2RpY193b3JrX25leHRwZXJpb2QoUEVSSU9ESUNfV09SSyAqcGVyaW9kaWNfd29yaykKIHsKIAlCT09MIHJjID0gRkFMU0U7CisKIAl3cml0ZV9sb2NrKCZwZXJpb2RpY193b3JrLT5sb2NrKTsKIAlpZiAocGVyaW9kaWNfd29yay0+d2FudF90b19zdG9wKSB7CiAJCXBlcmlvZGljX3dvcmstPmlzX3NjaGVkdWxlZCA9IEZBTFNFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvcHJvY29iamVjdHRyZWUuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL3Byb2NvYmplY3R0cmVlLmMKaW5kZXggNjdhMTllMS4uNWM4Yzk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvcHJvY29iamVjdHRyZWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC9wcm9jb2JqZWN0dHJlZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogcHJvY29iamVjdHRyZWUuYwogICoKLSAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMyBVTklTWVMgQ09SUE9SQVRJT04KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTk1LDYgKzk1LDcgQEAKIGNyZWF0ZVByb2NEaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwID0gcHJvY19ta2Rpcl9tb2RlKG5hbWUsIFNfSUZESVIsIHBhcmVudCk7CisKIAlpZiAocCA9PSBOVUxMKQogCQlFUlJEUlYoImZhaWxlZCB0byBjcmVhdGUgL3Byb2MgZGlyZWN0b3J5ICVzIiwgbmFtZSk7CiAJcmV0dXJuIHA7CkBAIC0xOTcsOSArMTk4LDExIEBACiAJCXJldHVybjsKIAlpZiAodHlwZS0+cHJvY0RpcnMgIT0gTlVMTCkgewogCQlpbnQgaSA9IHR5cGUtPm5OYW1lcy0xOworCiAJCXdoaWxlIChpID49IDApIHsKIAkJCWlmICh0eXBlLT5wcm9jRGlyc1tpXSAhPSBOVUxMKSB7CiAJCQkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQgPSBOVUxMOworCiAJCQkJaWYgKGkgPT0gMCkKIAkJCQkJcGFyZW50ID0gdHlwZS0+cHJvY0RpclJvb3Q7CiAJCQkJZWxzZQpAQCAtMjk5LDYgKzMwMiw3IEBACiB2b2lkIHZpc29yX3Byb2NfRGVzdHJveU9iamVjdChNWVBST0NPQkpFQ1QgKm9iaikKIHsKIAlNWVBST0NUWVBFICp0eXBlID0gTlVMTDsKKwogCWlmIChvYmogPT0gTlVMTCkKIAkJcmV0dXJuOwogCXR5cGUgPSBvYmotPnR5cGU7CkBAIC0zMDYsNiArMzEwLDcgQEAKIAkJcmV0dXJuOwogCWlmIChvYmotPnByb2NEaXJQcm9wZXJ0aWVzICE9IE5VTEwpIHsKIAkJaW50IGkgPSAwOworCiAJCWZvciAoaSA9IDA7IGkgPCB0eXBlLT5uUHJvcGVydGllczsgaSsrKSB7CiAJCQlpZiAob2JqLT5wcm9jRGlyUHJvcGVydGllc1tpXSAhPSBOVUxMKSB7CiAJCQkJcmVtb3ZlX3Byb2NfZW50cnkodHlwZS0+cHJvcGVydHlOYW1lc1tpXSwKQEAgLTMzOCw2ICszNDMsNyBAQAogc3RhdGljIGludCBzZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCVBST0NESVJFTlRSWUNPTlRFWFQgKmN0eCA9IChQUk9DRElSRU5UUllDT05URVhUICopKHNlcS0+cHJpdmF0ZSk7CisKIAlpZiAoY3R4ID09IE5VTEwpIHsKIAkJRVJSRFJWKCJJIGRvbid0IGhhdmUgYSBmcmVha2luJyBjbHVlLi4uIik7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvdmlzb3JrbW9kdXRpbHMuYyBiL2RyaXZlcnMvc3RhZ2luZy91bmlzeXMvdmlzb3J1dGlsL3Zpc29ya21vZHV0aWxzLmMKaW5kZXggYTdkMWU5NC4uMTBkNzdjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VuaXN5cy92aXNvcnV0aWwvdmlzb3JrbW9kdXRpbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdW5pc3lzL3Zpc29ydXRpbC92aXNvcmttb2R1dGlscy5jCkBAIC0xLDYgKzEsNiBAQAogLyogdGltc2ttb2R1dGlscy5jCiAgKgotICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjAsNiArMjAsMjIgQEAKIAogI2RlZmluZSBNWURSVk5BTUUgInRpbXNrbW9kdXRpbHMiCiAKKy8qIHMtUGFyIHVzZXMgdGhlIEludGVsIHByb2Nlc3NvcidzIFZULVggZmVhdHVyZXMgdG8gc2VwYXJhdGUgZ3JvdXBzIG9mCisgKiBwcm9jZXNzb3JzIGludG8gcGFydGl0aW9ucy4gVGhlIGZpcm13YXJlIHNldHMgdGhlIGh5cGVydmlzb3IgYml0IGFuZAorICogcmVwb3J0cyBhbiBJRCBpbiB0aGUgSFYgY2FwYWJpbGl0aWVzIGxlYWYgc28gdGhhdCB0aGUgcGFydGl0aW9uJ3MgT1MKKyAqIGtub3dzIHMtUGFyIGlzIHByZXNlbnQgYW5kIG1hbmFnaW5nIHRoZSBwcm9jZXNzb3JzLgorICovCisKKyNkZWZpbmUgVU5JU1lTX1NQQVJfTEVBRl9JRCAweDQwMDAwMDAwCisKKy8qIFRoZSBzLVBhciBsZWFmIElEIHJldHVybnMgIlVuaXN5c1NwYXI2NCIgZW5jb2RlZCBhY3Jvc3MgZWJ4LCBlY3gsIGVkeCAqLworI2RlZmluZSBVTklTWVNfU1BBUl9JRF9FQlggMHg3MzY5NmU1NQorI2RlZmluZSBVTklTWVNfU1BBUl9JRF9FQ1ggMHg3MDUzNzM3OQorI2RlZmluZSBVTklTWVNfU1BBUl9JRF9FRFggMHgzNDM2NzI2MQorCitpbnQgdW5pc3lzX3NwYXJfcGxhdGZvcm07CitFWFBPUlRfU1lNQk9MX0dQTCh1bmlzeXNfc3Bhcl9wbGF0Zm9ybSk7CisKIC8qKiBDYWxsZXJzIHRvIGludGVyZmFjZXMgdGhhdCBzZXQgX19HRlBfTk9SRVRSWSBmbGFnIGJlbG93CiAgKiAgbXVzdCBjaGVjayBmb3IgYSBOVUxMIChlcnJvcikgcmVzdWx0IGFzIHdlIGFyZSB0ZWxsaW5nIHRoZQogICogIGtlcm5lbCBpbnRlcmZhY2UgdGhhdCBpdCBpcyBva2F5IHRvIGZhaWwuCkBAIC02OSwzICs4NSw0MiBAQAogCWtmcmVlKG0pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlzb3Jfc2VxX2ZpbGVfZG9uZV9idWZmZXIpOworCitzdGF0aWMgX19pbml0IHVpbnQzMl90Cit2aXNvcnV0aWxfc3Bhcl9kZXRlY3Qodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OworCisJaWYgKGNwdV9oYXNfaHlwZXJ2aXNvcikgeworCQkvKiBjaGVjayB0aGUgSUQgKi8KKwkJY3B1aWQoVU5JU1lTX1NQQVJfTEVBRl9JRCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisJCXJldHVybiAgKGVieCA9PSBVTklTWVNfU1BBUl9JRF9FQlgpICYmCisJCQkoZWN4ID09IFVOSVNZU19TUEFSX0lEX0VDWCkgJiYKKwkJCShlZHggPT0gVU5JU1lTX1NQQVJfSURfRURYKTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKK30KKworCisKKworc3RhdGljIF9faW5pdCBpbnQKK3Zpc29ydXRpbF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh2aXNvcnV0aWxfc3Bhcl9kZXRlY3QoKSkgeworCQl1bmlzeXNfc3Bhcl9wbGF0Zm9ybSA9IFRSVUU7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkCit2aXNvcnV0aWxfbW9kX2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQodmlzb3J1dGlsX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHZpc29ydXRpbF9tb2RfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKaW5kZXggZGU2OTJkNy4uNTFkMGM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTk5LDYgKzk5LDcgQEAKIAogCWlmIChzb2NrZmQgIT0gLTEpIHsKIAkJaW50IGVycjsKKwogCQlkZXZfaW5mbyhkZXYsICJzdHViIHVwXG4iKTsKIAogCQlzcGluX2xvY2tfaXJxKCZzZGV2LT51ZC5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jCmluZGV4IDE2MjI1NjMuLmRiY2FiYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCWVsc2UKIAkJCWlvdm51bSA9IDI7CiAKLQkJaW92ID0ga3phbGxvYyhpb3ZudW0gKiBzaXplb2Yoc3RydWN0IGt2ZWMpLCBHRlBfS0VSTkVMKTsKKwkJaW92ID0ga2NhbGxvYyhpb3ZudW0sIHNpemVvZihzdHJ1Y3Qga3ZlYyksIEdGUF9LRVJORUwpOwogCiAJCWlmICghaW92KSB7CiAJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CkBAIC0yMTgsNiArMjE4LDcgQEAKIAkJCSAqLwogCiAJCQlpbnQgaTsKKwogCQkJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewogCQkJCWlvdltpb3ZudW1dLmlvdl9iYXNlID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAppbmRleCBmNTU1ZDgzLi40ZGEzODY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0zMjEsMTIgKzMyMSwxNCBAQAogc3RhdGljIGlubGluZSBpbnQgaW50ZXJmYWNlX3RvX2J1c251bShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCiAJcmV0dXJuIHVkZXYtPmJ1cy0+YnVzbnVtOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpbnRlcmZhY2VfdG9fZGV2bnVtKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisKIAlyZXR1cm4gdWRldi0+ZGV2bnVtOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvUkVBRE1FCmluZGV4IGY1MjhiYTQuLjgzMWY0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvUkVBRE1FCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvUkVBRE1FCkBAIC0xOTUsNyArMTk1LDYgQEAKICAgICAtIFNodXRkb3duIGZpcmV3YWxsLgogCS0gdXNiaXAgbm93IHVzZXMgVENQIHBvcnQgMzI0MC4KICAgICAtIERpc2FibGUgU0VMaW51eC4KLSAgICAtIElmIHBvc3NpYmxlLCBjb21waWxlIHlvdXIga2VybmVsIHdpdGggQ09ORklHX1VTQl9ERUJVRyBmbGFnIGFuZCB0cnkgYWdhaW4uCiAgICAgLSBDaGVjayB0aGUga2VybmVsIGFuZCBkYWVtb24gbWVzc2FnZXMuCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdXNiaXBfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uYwppbmRleCAyMzhiZjViLi5hYzczNzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uYwpAQCAtNzUsNiArNzUsNyBAQAogdm9pZCBkdW1wX3VzYl9pbnRlcmZhY2Uoc3RydWN0IHVzYmlwX3VzYl9pbnRlcmZhY2UgKnVpbmYpCiB7CiAJY2hhciBidWZmWzEwMF07CisKIAl1c2JpcF9uYW1lc19nZXRfY2xhc3MoYnVmZiwgc2l6ZW9mKGJ1ZmYpLAogCQkJdWluZi0+YkludGVyZmFjZUNsYXNzLAogCQkJdWluZi0+YkludGVyZmFjZVN1YkNsYXNzLApAQCAtODYsNyArODcsNiBAQAogewogCWNoYXIgYnVmZlsxMDBdOwogCi0KIAlkYmcoIiUtMjBzID0gJXMiLCAicGF0aCIsICB1ZGV2LT5wYXRoKTsKIAlkYmcoIiUtMjBzID0gJXMiLCAiYnVzaWQiLCB1ZGV2LT5idXNpZCk7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXJldHVybiBuYW1lc19pbml0KGYpOwogfQogCi12b2lkIHVzYmlwX25hbWVzX2ZyZWUoKQordm9pZCB1c2JpcF9uYW1lc19mcmVlKHZvaWQpCiB7CiAJbmFtZXNfZnJlZSgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdXNiaXBfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uaAppbmRleCAyM2JlODQ4Li41YTBlOTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uaApAQCAtNDcsNyArNDcsNyBAQAogCiAjZGVmaW5lIHByX2ZtdChmbXQpCSIlczogJXM6ICIgZm10ICJcbiIsIFBST0dOQU1FCiAjZGVmaW5lIGRiZ19mbXQoZm10KQlwcl9mbXQoIiVzOiVkOlslc10gIiBmbXQpLCAiZGVidWciLAlcCi0JCSAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18KKwkJICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fCiAKICNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdmhjaV9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3ZoY2lfZHJpdmVyLmMKaW5kZXggODkwMWZjYi4uYWQ5MjA0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdmhjaV9kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy92aGNpX2RyaXZlci5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIH0KIAogCi12b2lkIHVzYmlwX3ZoY2lfZHJpdmVyX2Nsb3NlKCkKK3ZvaWQgdXNiaXBfdmhjaV9kcml2ZXJfY2xvc2Uodm9pZCkKIHsKIAlpZiAoIXZoY2lfZHJpdmVyKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcF9hdHRhY2guYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwX2F0dGFjaC5jCmluZGV4IDcxNmE3OWUuLmQ1OGExNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwX2F0dGFjaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwX2F0dGFjaC5jCkBAIC01Niw2ICs1Niw3IEBACiAJCS8qIGlmIFZIQ0lfU1RBVEVfUEFUSCBleGlzdHMsIHRoZW4gaXQgYmV0dGVyIGJlIGEgZGlyZWN0b3J5ICovCiAJCWlmIChlcnJubyA9PSBFRVhJU1QpIHsKIAkJCXN0cnVjdCBzdGF0IHM7CisKIAkJCXJldCA9IHN0YXQoVkhDSV9TVEFURV9QQVRILCAmcyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcF9wb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcF9wb3J0LmMKaW5kZXggNTJhYTE2OC4uYTJlODg0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwX3BvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcF9wb3J0LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlICJ2aGNpX2RyaXZlci5oIgogI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgogCi1zdGF0aWMgaW50IGxpc3RfaW1wb3J0ZWRfZGV2aWNlcygpCitzdGF0aWMgaW50IGxpc3RfaW1wb3J0ZWRfZGV2aWNlcyh2b2lkKQogewogCWludCBpOwogCXN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgKmlkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcGQuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwZC5jCmluZGV4IDJjYWU0Y2UuLjJmODdmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwZC5jCkBAIC0zNzIsNiArMzcyLDcgQEAKIAogCWZvciAoYWkgPSBhaV9oZWFkOyBhaSAmJiBuc29ja2ZkIDwgbWF4c29ja2ZkOyBhaSA9IGFpLT5haV9uZXh0KSB7CiAJCWludCBzb2NrOworCiAJCWFkZHJpbmZvX3RvX3RleHQoYWksIGFpX2J1ZiwgYWlfYnVmX3NpemUpOwogCQlkYmcoIm9wZW5pbmcgJXMiLCBhaV9idWYpOwogCQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKQEAgLTQ1NywxMSArNDU4LDEzIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpwaWRfZmlsZTsKIAotc3RhdGljIHZvaWQgd3JpdGVfcGlkX2ZpbGUoKQorc3RhdGljIHZvaWQgd3JpdGVfcGlkX2ZpbGUodm9pZCkKIHsKIAlpZiAocGlkX2ZpbGUpIHsKIAkJZGJnKCJjcmVhdGluZyBwaWQgZmlsZSAlcyIsIHBpZF9maWxlKTsKLQkJRklMRSAqZnAgPSBmb3BlbihwaWRfZmlsZSwgInciKTsKKwkJRklMRSAqZnA7CisKKwkJZnAgPSBmb3BlbihwaWRfZmlsZSwgInciKTsKIAkJaWYgKCFmcCkgewogCQkJZXJyKCJwaWRfZmlsZTogJXM6ICVkICglcykiLAogCQkJICAgIHBpZF9maWxlLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTQ3Miw3ICs0NzUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlX3BpZF9maWxlKCkKK3N0YXRpYyB2b2lkIHJlbW92ZV9waWRfZmlsZSh2b2lkKQogewogCWlmIChwaWRfZmlsZSkgewogCQlkYmcoInJlbW92aW5nIHBpZCBmaWxlICVzIiwgcGlkX2ZpbGUpOwpAQCAtNjAyLDYgKzYwNSw3IEBACiAJaW50IGRhZW1vbml6ZSA9IDA7CiAJaW50IGlwdjQgPSAwLCBpcHY2ID0gMDsKIAlpbnQgb3B0LCByYyA9IC0xOworCiAJcGlkX2ZpbGUgPSBOVUxMOwogCiAJdXNiaXBfdXNlX3N0ZGVyciA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCmluZGV4IDcwZTE3NTUuLjAwMDdkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCkBAIC02MzUsNiArNjM1LDcgQEAKIAogCXsKIAkJaW50IHJldCA9IDA7CisKIAkJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOwogCQlpZiAocmV0KSB7CiAJCQlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwpAQCAtODg1LDYgKzg4Niw3IEBACiAKIAlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgewogCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSAmdmhjaS0+dmRldltyaHBvcnRdOworCiAJCXZoY2lfZGV2aWNlX2luaXQodmRldik7CiAJCXZkZXYtPnJocG9ydCA9IHJocG9ydDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCmluZGV4IGZmYjRlZWUuLjJkODQ5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCkBAIC02ODQsNyArNjg0LDcgQEAKIHN0YXRpYyBpbnQgdm1lX3VzZXJfcHJvYmUoc3RydWN0IHZtZV9kZXYgKnZkZXYpCiB7CiAJaW50IGksIGVycjsKLQljaGFyIG5hbWVbMTJdOworCWNoYXIgKm5hbWU7CiAKIAkvKiBTYXZlIHBvaW50ZXIgdG8gdGhlIGJyaWRnZSBkZXZpY2UgKi8KIAlpZiAodm1lX3VzZXJfYnJpZGdlICE9IE5VTEwpIHsKQEAgLTc5MiwxNSArNzkyLDE2IEBACiAJLyogQWRkIHN5c2ZzIEVudHJpZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgVk1FX0RFVlM7IGkrKykgewogCQlpbnQgbnVtOworCiAJCXN3aXRjaCAodHlwZVtpXSkgewogCQljYXNlIE1BU1RFUl9NSU5PUjoKLQkJCXNwcmludGYobmFtZSwgImJ1cy92bWUvbSUlZCIpOworCQkJbmFtZSA9ICJidXMvdm1lL20lZCI7CiAJCQlicmVhazsKIAkJY2FzZSBDT05UUk9MX01JTk9SOgotCQkJc3ByaW50ZihuYW1lLCAiYnVzL3ZtZS9jdGwiKTsKKwkJCW5hbWUgPSAiYnVzL3ZtZS9jdGwiOwogCQkJYnJlYWs7CiAJCWNhc2UgU0xBVkVfTUlOT1I6Ci0JCQlzcHJpbnRmKG5hbWUsICJidXMvdm1lL3MlJWQiKTsKKwkJCW5hbWUgPSAiYnVzL3ZtZS9zJWQiOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0lFRUUxMWguYwppbmRleCBkZmRhM2M4Li42Y2ZhZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0lFRUUxMWguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0lFRUUxMWguYwpAQCAtMTkyLDggKzE5Miw2IEBACiAJaWYgKGNzTWdtdF94bWl0KHBNZ210LT5wQWRhcHRlciwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpCiAJCXJldHVybiBmYWxzZTsKIAlyZXR1cm4gdHJ1ZTsKLS8qICAgIHJldHVybiBDQVJEYlNlbmRQYWNrZXQocE1nbXQtPnBBZGFwdGVyLCBwRnJhbWUsIFBLVF9UWVBFXzgwMl8xMV9NTkcsCi0gICAgICBzaXplb2YoV0xBTl9GUkFNRV9UUENSRVApKTsgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI3NCw4ICsyNzIsNiBAQAogCQkJcEFjdGlvbi0+YnlDYXRlZ29yeSk7CiAJCXBBY3Rpb24tPmJ5Q2F0ZWdvcnkgfD0gMHg4MDsKIAotCQkvKnJldHVybiBDQVJEYlNlbmRQYWNrZXQocE1nbXQtPnBBZGFwdGVyLCBwQWN0aW9uLCBQS1RfVFlQRV84MDJfMTFfTU5HLAotCQkgIHVMZW5ndGgpOyovCiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gdHJ1ZTsKQEAgLTMxNyw2ICszMTMsNCBAQAogCWlmIChjc01nbXRfeG1pdChwTWdtdC0+cEFkYXB0ZXIsIHBUeFBhY2tldCkgIT0gQ01EX1NUQVRVU19QRU5ESU5HKQogCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHRydWU7Ci0vKiAgICByZXR1cm4gQ0FSRGJTZW5kUGFja2V0KHBNZ210LT5wQWRhcHRlciwgcE1TUlJlcCwgUEtUX1RZUEVfODAyXzExX01ORywKLSAgICAgIHVMZW5ndGgpOyAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5jCmluZGV4IGZhMTQ2NTkuLjZmOTVmYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmMKQEAgLTEwOTUsNyArMTA5NSw2IEBACiAJezB4NjksIDB4MDB9LAogCXsweDZhLCAweDAwfSwKIAl7MHg2YiwgMHgwMH0sCi0JLy97MHg2YywgMHg4MH0sCiAJezB4NmMsIDB4MDB9LCAvL1JvYmVydFl1OjIwMDUwMTI1LCByZXF1ZXN0IGJ5IEpKU3VlCiAJezB4NmQsIDB4MDN9LAogCXsweDZlLCAweDAxfSwKQEAgLTEzNTcsNyArMTM1Niw2IEBACiAJezB4NjksIDB4MDB9LAogCXsweDZhLCAweDAwfSwKIAl7MHg2YiwgMHgwMH0sCi0JLy97MHg2YywgMHg4MH0sCiAJezB4NmMsIDB4MDB9LCAvL1JvYmVydFl1OjIwMDUwMTI1LCByZXF1ZXN0IGJ5IEpKU3VlCiAJezB4NmQsIDB4MDN9LAogCXsweDZlLCAweDAxfSwKQEAgLTE3ODYsMjkgKzE3ODQsMjcgQEAKIAl1UmF0ZSA9ICh1bnNpZ25lZCBpbnQpYXdjRnJhbWVUaW1lW3VSYXRlSWR4XTsKIAogCWlmICh1UmF0ZUlkeCA8PSAzKSB7ICAgICAgICAgIC8vQ0NLIG1vZGUKLQotCQlpZiAoYnlQcmVhbWJsZVR5cGUgPT0gMSkgey8vU2hvcnQKKwkJaWYgKGJ5UHJlYW1ibGVUeXBlID09IDEpIC8vU2hvcnQKIAkJCXVQcmVhbWJsZSA9IDk2OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQl1UHJlYW1ibGUgPSAxOTI7Ci0JCX0KKwogCQl1RnJhbWVUaW1lID0gKGNiRnJhbWVMZW5ndGggKiA4MCkgLyB1UmF0ZTsgIC8vPz8/Pz8KIAkJdVRtcCA9ICh1RnJhbWVUaW1lICogdVJhdGUpIC8gODA7Ci0JCWlmIChjYkZyYW1lTGVuZ3RoICE9IHVUbXApIHsKKwkJaWYgKGNiRnJhbWVMZW5ndGggIT0gdVRtcCkKIAkJCXVGcmFtZVRpbWUrKzsKLQkJfQogCiAJCXJldHVybiB1UHJlYW1ibGUgKyB1RnJhbWVUaW1lOwogCX0gZWxzZSB7CiAJCXVGcmFtZVRpbWUgPSAoY2JGcmFtZUxlbmd0aCAqIDggKyAyMikgLyB1UmF0ZTsgICAvLz8/Pz8/Pz8/CiAJCXVUbXAgPSAoKHVGcmFtZVRpbWUgKiB1UmF0ZSkgLSAyMikgLyA4OwotCQlpZiAoY2JGcmFtZUxlbmd0aCAhPSB1VG1wKSB7CisJCWlmIChjYkZyYW1lTGVuZ3RoICE9IHVUbXApCiAJCQl1RnJhbWVUaW1lKys7Ci0JCX0KKwogCQl1RnJhbWVUaW1lID0gdUZyYW1lVGltZSAqIDQ7ICAgIC8vPz8/Pz8/PwotCQlpZiAoYnlQa3RUeXBlICE9IFBLX1RZUEVfMTFBKSB7CisJCWlmIChieVBrdFR5cGUgIT0gUEtfVFlQRV8xMUEpCiAJCQl1RnJhbWVUaW1lICs9IDY7ICAgICAvLz8/Pz8/PwotCQl9CisKIAkJcmV0dXJuIDIwICsgdUZyYW1lVGltZTsgLy8/Pz8/Pz8KIAl9CiB9CkBAIC0yMTI5LDE2ICsyMTI1LDE2IEBACiAKIAlpZiAoYnlSRlR5cGUgPT0gUkZfUkZNRDI5NTkpIHsKIAkJaWYgKGJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB7Ci0JCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNfSU5JVF9GT1JfUkZNRDsgaWkrKykgeworCQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfVlQzMjUzX0lOSVRfRk9SX1JGTUQ7IGlpKyspCiAJCQkJYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieVZUMzI1M0luaXRUYWJfUkZNRFtpaV1bMF0sIGJ5VlQzMjUzSW5pdFRhYl9SRk1EW2lpXVsxXSk7Ci0JCQl9CisKIAkJfSBlbHNlIHsKLQkJCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0lOSVRfRk9SX1JGTUQ7IGlpKyspIHsKKwkJCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0lOSVRfRk9SX1JGTUQ7IGlpKyspCiAJCQkJYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieVZUMzI1M0IwX1JGTURbaWldWzBdLCBieVZUMzI1M0IwX1JGTURbaWldWzFdKTsKLQkJCX0KLQkJCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0FHQ19GT1JfUkZNRDI5NTk7IGlpKyspIHsKKworCQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfVlQzMjUzQjBfQUdDX0ZPUl9SRk1EMjk1OTsgaWkrKykKIAkJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfQUdDNF9SRk1EMjk1OVtpaV1bMF0sIGJ5VlQzMjUzQjBfQUdDNF9SRk1EMjk1OVtpaV1bMV0pOwotCQkJfQorCiAJCQlWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0lUUlRNU0VULCAweDIzKTsKIAkJCU1BQ3ZSZWdCaXRzT24oZHdJb0Jhc2UsIE1BQ19SRUdfUEFQRURFTEFZLCBCSVQwKTsKIAkJfQpAQCAtMjE1MSwxMiArMjE0NywxMiBAQAogCQlwRGV2aWNlLT5sZEJtVGhyZXNob2xkWzJdID0gMDsKIAkJcERldmljZS0+bGRCbVRocmVzaG9sZFszXSA9IDA7CiAJfSBlbHNlIGlmICgoYnlSRlR5cGUgPT0gUkZfQUlST0hBKSB8fCAoYnlSRlR5cGUgPT0gUkZfQUwyMjMwUykpIHsKLQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfQUlST0hBMjIzMDsgaWkrKykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9JTklUX0ZPUl9BSVJPSEEyMjMwOyBpaSsrKQogCQkJYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieVZUMzI1M0IwX0FJUk9IQTIyMzBbaWldWzBdLCBieVZUMzI1M0IwX0FJUk9IQTIyMzBbaWldWzFdKTsKLQkJfQotCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspIHsKKworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspCiAJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfQUdDW2lpXVswXSwgYnlWVDMyNTNCMF9BR0NbaWldWzFdKTsKLQkJfQorCiAJCXBEZXZpY2UtPmFieUJCVkdBWzBdID0gMHgxQzsKIAkJcERldmljZS0+YWJ5QkJWR0FbMV0gPSAweDEwOwogCQlwRGV2aWNlLT5hYnlCQlZHQVsyXSA9IDB4MDsKQEAgLTIxNjYsMTIgKzIxNjIsMTIgQEAKIAkJcERldmljZS0+bGRCbVRocmVzaG9sZFsyXSA9IDA7CiAJCXBEZXZpY2UtPmxkQm1UaHJlc2hvbGRbM10gPSAwOwogCX0gZWxzZSBpZiAoYnlSRlR5cGUgPT0gUkZfVVcyNDUxKSB7Ci0JCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0lOSVRfRk9SX1VXMjQ1MTsgaWkrKykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9JTklUX0ZPUl9VVzI0NTE7IGlpKyspCiAJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfVVcyNDUxW2lpXVswXSwgYnlWVDMyNTNCMF9VVzI0NTFbaWldWzFdKTsKLQkJfQotCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspIHsKKworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspCiAJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfQUdDW2lpXVswXSwgYnlWVDMyNTNCMF9BR0NbaWldWzFdKTsKLQkJfQorCiAJCVZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfSVRSVE1TRVQsIDB4MjMpOwogCQlNQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX1BBUEVERUxBWSwgQklUMCk7CiAKQEAgLTIxODQsOSArMjE4MCw5IEBACiAJCXBEZXZpY2UtPmxkQm1UaHJlc2hvbGRbMl0gPSAwOwogCQlwRGV2aWNlLT5sZEJtVGhyZXNob2xkWzNdID0gMDsKIAl9IGVsc2UgaWYgKGJ5UkZUeXBlID09IFJGX1VXMjQ1MikgewotCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9JTklUX0ZPUl9VVzI0NTE7IGlpKyspIHsKKwkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfVVcyNDUxOyBpaSsrKQogCQkJYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieVZUMzI1M0IwX1VXMjQ1MVtpaV1bMF0sIGJ5VlQzMjUzQjBfVVcyNDUxW2lpXVsxXSk7Ci0JCX0KKwogCQkvLyBJbml0IEFOVCBCIHNlbGVjdCxUWCBDb25maWcgQ1IwOSA9IDB4NjEtPjB4NDUsIDB4NDUtPjB4NDEoVkMxL1ZDMiBkZWZpbmUsIG1ha2UgdGhlIEFOVF9BLCBBTlRfQiBpbnZlcnRlZCkKIAkJLy9iUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsMHgwOSwweDQxKTsKIAkJLy8gSW5pdCBBTlQgQiBzZWxlY3QsUlggQ29uZmlnIENSMTAgPSAweDI4LT4weDJBLCAweDJBLT4weDI4KFZDMS9WQzIgZGVmaW5lLCBtYWtlIHRoZSBBTlRfQSwgQU5UX0IgaW52ZXJ0ZWQpCkBAIC0yMjA1LDExICsyMjAxLDggQEAKIAkJLy99fQogCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIDB4YjAsIDB4NTgpOwogCi0JCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0FHQzsgaWkrKykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspCiAJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfQUdDW2lpXVswXSwgYnlWVDMyNTNCMF9BR0NbaWldWzFdKTsKLQkJfQotCQkvL1ZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfSVRSVE1TRVQsIDB4MjMpOyAvLyBSb2JlcnRZdTogMjAwNTAxMDQsIDIwMDUwMTMxIGRpc2FibGUgUEFfRGVsYXkKLQkJLy9NQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX1BBUEVERUxBWSwgQklUMCk7IC8vIFJvYmVydFl1OiAyMDA1MDEwNCwgMjAwNTAxMzEgZGlzYWJsZSBQQV9EZWxheQogCiAJCXBEZXZpY2UtPmFieUJCVkdBWzBdID0gMHgxNDsKIAkJcERldmljZS0+YWJ5QkJWR0FbMV0gPSAweDBBOwpAQCAtMjIyMiwxMiArMjIxNSwxMiBAQAogCQkvL319IFJvYmVydFl1CiAKIAl9IGVsc2UgaWYgKGJ5UkZUeXBlID09IFJGX1ZUMzIyNikgewotCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9JTklUX0ZPUl9BSVJPSEEyMjMwOyBpaSsrKSB7CisJCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0lOSVRfRk9SX0FJUk9IQTIyMzA7IGlpKyspCiAJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfQUlST0hBMjIzMFtpaV1bMF0sIGJ5VlQzMjUzQjBfQUlST0hBMjIzMFtpaV1bMV0pOwotCQl9Ci0JCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0FHQzsgaWkrKykgeworCisJCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0FHQzsgaWkrKykKIAkJCWJSZXN1bHQgJj0gQkJiV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwgYnlWVDMyNTNCMF9BR0NbaWldWzBdLCBieVZUMzI1M0IwX0FHQ1tpaV1bMV0pOwotCQl9CisKIAkJcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDFDOwogCQlwRGV2aWNlLT5hYnlCQlZHQVsxXSA9IDB4MTA7CiAJCXBEZXZpY2UtPmFieUJCVkdBWzJdID0gMHgwOwpAQCAtMjI0MCw5ICsyMjMzLDkgQEAKIAkJTUFDdlNldFJGTEVfTGF0Y2hCYXNlKGR3SW9CYXNlKTsKIAkJLy97eyBSb2JlcnRZdTogMjAwNTAxMDQKIAl9IGVsc2UgaWYgKGJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzApIHsKLQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfQUlST0hBMjIzMDsgaWkrKykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9JTklUX0ZPUl9BSVJPSEEyMjMwOyBpaSsrKQogCQkJYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieVZUMzI1M0IwX0FJUk9IQTIyMzBbaWldWzBdLCBieVZUMzI1M0IwX0FJUk9IQTIyMzBbaWldWzFdKTsKLQkJfQorCiAKIAkJLy97eyBSb2JlcnRZdToyMDA1MDIyMywgcmVxdWVzdCBieSBKZXJyeUNodW5nCiAJCS8vIEluaXQgQU5UIEIgc2VsZWN0LFRYIENvbmZpZyBDUjA5ID0gMHg2MS0+MHg0NSwgMHg0NS0+MHg0MShWQzEvVkMyIGRlZmluZSwgbWFrZSB0aGUgQU5UX0EsIEFOVF9CIGludmVydGVkKQpAQCAtMjI1Myw5ICsyMjQ2LDkgQEAKIAkJYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCAweGQ3LCAweDA2KTsKIAkJLy99fQogCi0JCWZvciAoaWkgPSAwOyBpaSA8IENCX1ZUMzI1M0IwX0FHQzsgaWkrKykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspCiAJCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIGJ5VlQzMjUzQjBfQUdDW2lpXVswXSwgYnlWVDMyNTNCMF9BR0NbaWldWzFdKTsKLQkJfQorCiAJCXBEZXZpY2UtPmFieUJCVkdBWzBdID0gMHgxQzsKIAkJcERldmljZS0+YWJ5QkJWR0FbMV0gPSAweDEwOwogCQlwRGV2aWNlLT5hYnlCQlZHQVsyXSA9IDB4MDsKQEAgLTI0MTEsMTcgKzI0MDQsMTUgQEAKIAogCUJCYlJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDBBLCAmYnlCQlJ4Q29uZik7Ly9DUjEwCiAKLQlpZiAocERldmljZS0+YlNob3J0U2xvdFRpbWUpIHsKKwlpZiAocERldmljZS0+YlNob3J0U2xvdFRpbWUpCiAJCWJ5QkJSeENvbmYgJj0gMHhERjsvLzExMDEgMTExMQotCX0gZWxzZSB7CisJZWxzZQogCQlieUJCUnhDb25mIHw9IDB4MjA7Ly8wMDEwIDAwMDAKLQl9CiAKIAkvLyBwYXRjaCBmb3IgMzI1M0IwIEJhc2ViYW5kIHdpdGggQ2FyZGJ1cyBtb2R1bGUKIAlCQmJSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHhFNywgJmJ5QkJWR0EpOwotCWlmIChieUJCVkdBID09IHBEZXZpY2UtPmFieUJCVkdBWzBdKSB7CisJaWYgKGJ5QkJWR0EgPT0gcERldmljZS0+YWJ5QkJWR0FbMF0pCiAJCWJ5QkJSeENvbmYgfD0gMHgyMDsvLzAwMTAgMDAwMAotCX0KIAogCUJCYldyaXRlRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHgwQSwgYnlCQlJ4Q29uZik7Ly9DUjEwCiB9CkBAIC0yNjEzLDEzICsyNjA0LDExIEBACiAJaWYgKHBEZXZpY2UtPnVOdW1TUTNbUkFURV81NE1dICE9IDApIHsKIAkJdWxQYWNrZXROdW0gPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNTRNXTsKIAkJdWxSYXRpbyA9ICh1bFBhY2tldE51bSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKLQkJLy91bFJhdGlvID0gKHBEZXZpY2UtPnVOdW1TUTNbUkFURV81NE1dICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwogCQl1bFJhdGlvICs9IFRPUF9SQVRFXzU0TTsKIAl9CiAJaWYgKHBEZXZpY2UtPnVOdW1TUTNbUkFURV80OE1dID4gdWxNYXhQYWNrZXQpIHsKIAkJdWxQYWNrZXROdW0gPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNTRNXSArIHBEZXZpY2UtPnVOdW1TUTNbUkFURV80OE1dOwogCQl1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotCQkvL3VsUmF0aW8gPSAocERldmljZS0+dU51bVNRM1tSQVRFXzQ4TV0gKiAxMDAwIC8gcERldmljZS0+dURpdmVyc2l0eUNudCk7CiAJCXVsUmF0aW8gKz0gVE9QX1JBVEVfNDhNOwogCQl1bE1heFBhY2tldCA9IHBEZXZpY2UtPnVOdW1TUTNbUkFURV80OE1dOwogCX0KQEAgLTI2MjcsNyArMjYxNiw2IEBACiAJCXVsUGFja2V0TnVtID0gcERldmljZS0+dU51bVNRM1tSQVRFXzU0TV0gKyBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNDhNXSArCiAJCQlwRGV2aWNlLT51TnVtU1EzW1JBVEVfMzZNXTsKIAkJdWxSYXRpbyA9ICh1bFBhY2tldE51bSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKLQkJLy91bFJhdGlvID0gKHBEZXZpY2UtPnVOdW1TUTNbUkFURV8zNk1dICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwogCQl1bFJhdGlvICs9IFRPUF9SQVRFXzM2TTsKIAkJdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMzZNXTsKIAl9CkBAIC0yNjM1LDcgKzI2MjMsNiBAQAogCQl1bFBhY2tldE51bSA9IHBEZXZpY2UtPnVOdW1TUTNbUkFURV81NE1dICsgcERldmljZS0+dU51bVNRM1tSQVRFXzQ4TV0gKwogCQkJcERldmljZS0+dU51bVNRM1tSQVRFXzM2TV0gKyBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMjRNXTsKIAkJdWxSYXRpbyA9ICh1bFBhY2tldE51bSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKLQkJLy91bFJhdGlvID0gKHBEZXZpY2UtPnVOdW1TUTNbUkFURV8yNE1dICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwogCQl1bFJhdGlvICs9IFRPUF9SQVRFXzI0TTsKIAkJdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMjRNXTsKIAl9CkBAIC0yNjQ0LDcgKzI2MzEsNiBAQAogCQkJcERldmljZS0+dU51bVNRM1tSQVRFXzM2TV0gKyBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMjRNXSArCiAJCQlwRGV2aWNlLT51TnVtU1EzW1JBVEVfMThNXTsKIAkJdWxSYXRpbyA9ICh1bFBhY2tldE51bSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKLQkJLy91bFJhdGlvID0gKHBEZXZpY2UtPnVOdW1TUTNbUkFURV8xOE1dICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwogCQl1bFJhdGlvICs9IFRPUF9SQVRFXzE4TTsKIAkJdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMThNXTsKIAl9CkBAIC0yNjUzLDcgKzI2MzksNiBAQAogCQkJcERldmljZS0+dU51bVNRM1tSQVRFXzM2TV0gKyBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMjRNXSArCiAJCQlwRGV2aWNlLT51TnVtU1EzW1JBVEVfMThNXSArIHBEZXZpY2UtPnVOdW1TUTNbUkFURV8xMk1dOwogCQl1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotCQkvL3VsUmF0aW8gPSAocERldmljZS0+dU51bVNRM1tSQVRFXzEyTV0gKiAxMDAwIC8gcERldmljZS0+dURpdmVyc2l0eUNudCk7CiAJCXVsUmF0aW8gKz0gVE9QX1JBVEVfMTJNOwogCQl1bE1heFBhY2tldCA9IHBEZXZpY2UtPnVOdW1TUTNbUkFURV8xMk1dOwogCX0KQEAgLTI2NjIsNyArMjY0Nyw2IEBACiAJCQlwRGV2aWNlLT51TnVtU1EzW1JBVEVfMk1dIC0gcERldmljZS0+dU51bVNRM1tSQVRFXzVNXSAtCiAJCQlwRGV2aWNlLT51TnVtU1EzW1JBVEVfNk1dIC0gcERldmljZS0+dU51bVNRM1tSQVRFXzlNXTsKIAkJdWxSYXRpbyA9ICh1bFBhY2tldE51bSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKLQkJLy91bFJhdGlvID0gKHBEZXZpY2UtPnVOdW1TUTNbUkFURV8xMU1dICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwogCQl1bFJhdGlvICs9IFRPUF9SQVRFXzExTTsKIAkJdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMTFNXTsKIAl9CkBAIC0yNjcxLDcgKzI2NTUsNiBAQAogCQkJcERldmljZS0+dU51bVNRM1tSQVRFXzJNXSAtIHBEZXZpY2UtPnVOdW1TUTNbUkFURV81TV0gLQogCQkJcERldmljZS0+dU51bVNRM1tSQVRFXzZNXTsKIAkJdWxSYXRpbyA9ICh1bFBhY2tldE51bSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKLQkJLy91bFJhdGlvID0gKHBEZXZpY2UtPnVOdW1TUTNbUkFURV85TV0gKiAxMDAwIC8gcERldmljZS0+dURpdmVyc2l0eUNudCk7CiAJCXVsUmF0aW8gKz0gVE9QX1JBVEVfOU07CiAJCXVsTWF4UGFja2V0ID0gcERldmljZS0+dU51bVNRM1tSQVRFXzlNXTsKIAl9CkBAIC0yNjc5LDcgKzI2NjIsNiBAQAogCQl1bFBhY2tldE51bSA9IHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQgLSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMU1dIC0KIAkJCXBEZXZpY2UtPnVOdW1TUTNbUkFURV8yTV0gLSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNU1dOwogCQl1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotCQkvL3VsUmF0aW8gPSAocERldmljZS0+dU51bVNRM1tSQVRFXzZNXSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKIAkJdWxSYXRpbyArPSBUT1BfUkFURV82TTsKIAkJdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNk1dOwogCX0KQEAgLTI2ODcsMjEgKzI2NjksMTggQEAKIAkJdWxQYWNrZXROdW0gPSBwRGV2aWNlLT51RGl2ZXJzaXR5Q250IC0gcERldmljZS0+dU51bVNRM1tSQVRFXzFNXSAtCiAJCQlwRGV2aWNlLT51TnVtU1EzW1JBVEVfMk1dOwogCQl1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotCQkvL3VsUmF0aW8gPSAocERldmljZS0+dU51bVNRM1tSQVRFXzVNXSAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKIAkJdWxSYXRpbyArPSBUT1BfUkFURV81NU07CiAJCXVsTWF4UGFja2V0ID0gcERldmljZS0+dU51bVNRM1tSQVRFXzVNXTsKIAl9CiAJaWYgKHBEZXZpY2UtPnVOdW1TUTNbUkFURV8yTV0gPiB1bE1heFBhY2tldCkgewogCQl1bFBhY2tldE51bSA9IHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQgLSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfMU1dOwogCQl1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotCQkvL3VsUmF0aW8gPSAocERldmljZS0+dU51bVNRM1tSQVRFXzJNXSAgKiAxMDAwIC8gcERldmljZS0+dURpdmVyc2l0eUNudCk7CiAJCXVsUmF0aW8gKz0gVE9QX1JBVEVfMk07CiAJCXVsTWF4UGFja2V0ID0gcERldmljZS0+dU51bVNRM1tSQVRFXzJNXTsKIAl9CiAJaWYgKHBEZXZpY2UtPnVOdW1TUTNbUkFURV8xTV0gPiB1bE1heFBhY2tldCkgewogCQl1bFBhY2tldE51bSA9IHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQ7CiAJCXVsUmF0aW8gPSAodWxQYWNrZXROdW0gKiAxMDAwIC8gcERldmljZS0+dURpdmVyc2l0eUNudCk7Ci0JCS8vdWxSYXRpbyA9IChwRGV2aWNlLT51TnVtU1EzW1JBVEVfMU1dICAqIDEwMDAgLyBwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKIAkJdWxSYXRpbyArPSBUT1BfUkFURV8xTTsKIAl9CiAKQEAgLTI3MTQsOSArMjY5Myw4IEBACiAJdW5zaWduZWQgaW50IGlpOwogCiAJcERldmljZS0+dURpdmVyc2l0eUNudCA9IDA7Ci0JZm9yIChpaSA9IDA7IGlpIDwgTUFYX1JBVEU7IGlpKyspIHsKKwlmb3IgKGlpID0gMDsgaWkgPCBNQVhfUkFURTsgaWkrKykKIAkJcERldmljZS0+dU51bVNRM1tpaV0gPSAwOwotCX0KIH0KIAogLyoKQEAgLTI3MzcsMTEgKzI3MTUsMTAgQEAKIHZvaWQKIEJCdkFudGVubmFEaXZlcnNpdHkoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciBieVJ4UmF0ZSwgdW5zaWduZWQgY2hhciBieVNRMykKIHsKLQlpZiAoKGJ5UnhSYXRlID49IE1BWF9SQVRFKSB8fCAocERldmljZS0+d0FudERpdmVyc2l0eU1heFJhdGUgPj0gTUFYX1JBVEUpKSB7CisJaWYgKChieVJ4UmF0ZSA+PSBNQVhfUkFURSkgfHwgKHBEZXZpY2UtPndBbnREaXZlcnNpdHlNYXhSYXRlID49IE1BWF9SQVRFKSkKIAkJcmV0dXJuOwotCX0KKwogCXBEZXZpY2UtPnVEaXZlcnNpdHlDbnQrKzsKLQkvLyBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT51RGl2ZXJzaXR5Q250ID0gJWRcbiIsIChpbnQpcERldmljZS0+dURpdmVyc2l0eUNudCk7CiAKIAlwRGV2aWNlLT51TnVtU1EzW2J5UnhSYXRlXSsrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMKaW5kZXggZDdlZmQwMTcuLjU5Njc5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMKQEAgLTQ5Nyw5ICs0OTcsOCBAQAogCQl9CiAJfQogCi0JaWYgKGJQYXJzaW5nUXVpZXQgJiYgKHBRdWlldCAhPSBOVUxMKSkgeworCWlmIChiUGFyc2luZ1F1aWV0ICYmIChwUXVpZXQgIT0gTlVMTCkpCiAJCUNBUkRiU3RhcnRRdWlldChwTWdtdC0+cEFkYXB0ZXIpOwotCX0KIAogCXBCU1NMaXN0LT51SUVMZW5ndGggPSB1SUVMZW5ndGg7CiAJaWYgKHBCU1NMaXN0LT51SUVMZW5ndGggPiBXTEFOX0JFQUNPTl9GUl9NQVhMRU4pCkBAIC02NjIsOSArNjYxLDggQEAKIAkJfQogCX0KIAotCWlmIChiUGFyc2luZ1F1aWV0ICYmIChwUXVpZXQgIT0gTlVMTCkpIHsKKwlpZiAoYlBhcnNpbmdRdWlldCAmJiAocFF1aWV0ICE9IE5VTEwpKQogCQlDQVJEYlN0YXJ0UXVpZXQocE1nbXQtPnBBZGFwdGVyKTsKLQl9CiAKIAlwQlNTTGlzdC0+dUlFTGVuZ3RoID0gdUlFTGVuZ3RoOwogCWlmIChwQlNTTGlzdC0+dUlFTGVuZ3RoID4gV0xBTl9CRUFDT05fRlJfTUFYTEVOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5oCmluZGV4IDVjNzc2NzcuLmEwOTM4YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmgKQEAgLTExMiw3ICsxMTIsNiBAQAogCXVuc2lnbmVkIGNoYXIgYWJ5U1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKIAl1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlOwogCi0vLyAgICB1bnNpZ25lZCBzaG9ydCB3QVRJTVdpbmRvdzsKIAl1bnNpZ25lZCBjaGFyIGJ5UlNTSVN0YXRDbnQ7CiAJbG9uZyAgICAgICAgICAgIGxkQm1NQVg7CiAJbG9uZyAgICAgICAgICAgIGxkQm1BdmVyYWdlW1JTU0lfU1RBVF9DT1VOVF07CkBAIC0xNDcsNyArMTQ2LDYgQEAKIAogCS8vIENsZWFyIGNvdW50CiAJdW5zaWduZWQgaW50CXVDbGVhckNvdW50OwotLy8gICAgdW5zaWduZWQgY2hhciBhYnlJRXNbV0xBTl9CRUFDT05fRlJfTUFYTEVOXTsKIAl1bnNpZ25lZCBpbnQJdUlFTGVuZ3RoOwogCVFXT1JEICAgICAgICAgICBxd0JTU1RpbWVzdGFtcDsKIAlRV09SRCAgICAgICAgICAgcXdMb2NhbFRTRjsgICAgIC8vIGxvY2FsIFRTRiB0aW1lcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwppbmRleCBkYjM4Y2EwLi4wNWJmNDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwpAQCAtMjQsNyArMjQsNiBAQAogICogICAgICB2VXBkYXRlSUZTIC0gVXBkYXRlIHNsb3RUaW1lLFNJRlMsRElGUywgYW5kIEVJRlMKICAqICAgICAgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUgLSBVcGRhdGUgQmFzaWNUb3BSYXRlCiAgKiAgICAgIENBUkRiQWRkQmFzaWNSYXRlIC0gQWRkIHRvIEJhc2ljUmF0ZVNldAotICogICAgICBDQVJEYlNldEJhc2ljUmF0ZSAtIFNldCBCYXNpYyBUeCBSYXRlCiAgKiAgICAgIENBUkRiSXNPRkRNaW5CYXNpY1JhdGUgLSBDaGVjayBpZiBhbnkgT0ZETSByYXRlIGlzIGluIEJhc2ljUmF0ZVNldAogICogICAgICBDQVJEdlNldExvb3BiYWNrTW9kZSAtIFNldCBMb29wYmFjayBtb2RlCiAgKiAgICAgIENBUkRiU29mdHdhcmVSZXNldCAtIFNvcnR3YXJlIHJlc2V0IE5JQwpAQCAtNjAsNyArNTksNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfSU5GTzsKIAogI2RlZmluZSBDX1NJRlNfQSAgICAgICAgMTYgICAgICAvLyBtaWNybyBzZWMuCkBAIC0zMzksMzYgKzMzNyw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgotICogRGVzY3JpcHRpb246IENhcmQgU2VuZCBwYWNrZXQgZnVuY3Rpb24KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwRGV2aWNlSGFuZGxlciAgICAgIC0gVGhlIGFkYXB0ZXIgdG8gYmUgc2V0Ci0gKiAgICAgIHBQYWNrZXQgICAgICAgICAgICAgLSBQYWNrZXQgYnVmZmVyIHBvaW50ZXIKLSAqICAgICAgZVBrdFR5cGUgICAgICAgICAgICAtIFBhY2tldCB0eXBlCi0gKiAgICAgIHVMZW5ndGggICAgICAgICAgICAgLSBQYWNrZXQgbGVuZ3RoCi0gKiAgT3V0OgotICogICAgICBub25lCi0gKgotICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgotICoKLSAqLwotLyoKLSAgYm9vbCBDQVJEYlNlbmRQYWNrZXQgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB2b2lkICpwUGFja2V0LCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlLCB1bnNpZ25lZCBpbnQgdUxlbmd0aCkgewotICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9NTkcpIHsKLSAgcmV0dXJuIFRYYlREMFNlbmQocERldmljZSwgcFBhY2tldCwgdUxlbmd0aCk7Ci0gIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0JDTikgewotICByZXR1cm4gVFhiQmVhY29uU2VuZChwRGV2aWNlLCBwUGFja2V0LCB1TGVuZ3RoKTsKLSAgfSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0RBVEEpIHsKLSAgcmV0dXJuIFRYYlREMVNlbmQocERldmljZSwgcFBhY2tldCwgdUxlbmd0aCk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLSAgfQotKi8KLQotLyoKICAqIERlc2NyaXB0aW9uOiBHZXQgQ2FyZCBzaG9ydCBwcmVhbWJsZSBvcHRpb24gdmFsdWUKICAqCiAgKiBQYXJhbWV0ZXJzOgpAQCAtMzgzLDkgKzM1MSw5IEBACiBib29sIENBUkRiSXNTaG9ydFByZWFtYmxlKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQogewogCVBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotCWlmIChwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSA9PSAwKSB7CisJaWYgKHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID09IDApCiAJCXJldHVybiBmYWxzZTsKLQl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDI3LDE1ICszOTUsMTQgQEAKIAl1bnNpZ25lZCBjaGFyIGJ5U0lGUyA9IDA7CiAJdW5zaWduZWQgY2hhciBieURJRlMgPSAwOwogCXVuc2lnbmVkIGNoYXIgYnlEYXRhOwotLy8gICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwUmF0ZXMgPSBOVUxMOwogCVBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBvcnRSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSBwdlN1cHBvcnRSYXRlSUVzOwogCVBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBvcnRSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSBwdkV4dFN1cHBvcnRSYXRlSUVzOwogCiAJLy9TZXQgU0lGUywgRElGUywgRUlGUywgU2xvdFRpbWUsIEN3TWluCiAJaWYgKGVQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgewotCQlpZiAocFN1cHBvcnRSYXRlcyA9PSBOVUxMKSB7CisJCWlmIChwU3VwcG9ydFJhdGVzID09IE5VTEwpCiAJCQlwU3VwcG9ydFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIGFieURlZmF1bHRTdXBwUmF0ZXNBOwotCQl9CisKIAkJaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzApIHsKIAkJCS8vIEFMNzIzMCB1c2Ugc2luZ2xlIFBBUEUgYW5kIGNvbm5lY3QgdG8gUEFQRV8yLjRHCiAJCQlNQUN2U2V0QkJUeXBlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIEJCX1RZUEVfMTFHKTsKQEAgLTQ0Myw5ICs0MTAsOSBAQAogCQkJcERldmljZS0+YWJ5QkJWR0FbMl0gPSAweDEwOwogCQkJcERldmljZS0+YWJ5QkJWR0FbM10gPSAweDEwOwogCQkJQkJiUmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4RTcsICZieURhdGEpOwotCQkJaWYgKGJ5RGF0YSA9PSAweDFDKSB7CisJCQlpZiAoYnlEYXRhID09IDB4MUMpCiAJCQkJQkJiV3JpdGVFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweEU3LCBwRGV2aWNlLT5hYnlCQlZHQVswXSk7Ci0JCQl9CisKIAkJfSBlbHNlIGlmIChwRGV2aWNlLT5ieVJGVHlwZSA9PSBSRl9VVzI0NTIpIHsKIAkJCU1BQ3ZTZXRCQlR5cGUocERldmljZS0+UG9ydE9mZnNldCwgQkJfVFlQRV8xMUEpOwogCQkJcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDE4OwpAQCAtNDYzLDE4ICs0MzAsMTggQEAKIAkJYnlESUZTID0gQ19TSUZTX0EgKyAyKkNfU0xPVF9TSE9SVDsKIAkJYnlDV01heE1pbiA9IDB4QTQ7CiAJfSBlbHNlIGlmIChlUEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKLQkJaWYgKHBTdXBwb3J0UmF0ZXMgPT0gTlVMTCkgeworCQlpZiAocFN1cHBvcnRSYXRlcyA9PSBOVUxMKQogCQkJcFN1cHBvcnRSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSBhYnlEZWZhdWx0U3VwcFJhdGVzQjsKLQkJfQorCiAJCU1BQ3ZTZXRCQlR5cGUocERldmljZS0+UG9ydE9mZnNldCwgQkJfVFlQRV8xMUIpOwogCQlpZiAocERldmljZS0+YnlSRlR5cGUgPT0gUkZfQUlST0hBNzIzMCkgewogCQkJcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDFDOwogCQkJcERldmljZS0+YWJ5QkJWR0FbMl0gPSAweDAwOwogCQkJcERldmljZS0+YWJ5QkJWR0FbM10gPSAweDAwOwogCQkJQkJiUmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4RTcsICZieURhdGEpOwotCQkJaWYgKGJ5RGF0YSA9PSAweDIwKSB7CisJCQlpZiAoYnlEYXRhID09IDB4MjApCiAJCQkJQkJiV3JpdGVFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweEU3LCBwRGV2aWNlLT5hYnlCQlZHQVswXSk7Ci0JCQl9CisKIAkJfSBlbHNlIGlmIChwRGV2aWNlLT5ieVJGVHlwZSA9PSBSRl9VVzI0NTIpIHsKIAkJCXBEZXZpY2UtPmFieUJCVkdBWzBdID0gMHgxNDsKIAkJCUJCYlJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweEU3LCAmYnlEYXRhKTsKQEAgLTQ5OSw5ICs0NjYsOSBAQAogCQkJcERldmljZS0+YWJ5QkJWR0FbMl0gPSAweDAwOwogCQkJcERldmljZS0+YWJ5QkJWR0FbM10gPSAweDAwOwogCQkJQkJiUmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4RTcsICZieURhdGEpOwotCQkJaWYgKGJ5RGF0YSA9PSAweDIwKSB7CisJCQlpZiAoYnlEYXRhID09IDB4MjApCiAJCQkJQkJiV3JpdGVFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweEU3LCBwRGV2aWNlLT5hYnlCQlZHQVswXSk7Ci0JCQl9CisKIAkJfSBlbHNlIGlmIChwRGV2aWNlLT5ieVJGVHlwZSA9PSBSRl9VVzI0NTIpIHsKIAkJCXBEZXZpY2UtPmFieUJCVkdBWzBdID0gMHgxNDsKIAkJCUJCYlJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweEU3LCAmYnlEYXRhKTsKQEAgLTUxOSwyNiArNDg2LDI1IEBACiAJCQlieVNsb3QgPSBDX1NMT1RfTE9ORzsKIAkJCWJ5RElGUyA9IENfU0lGU19CRyArIDIqQ19TTE9UX0xPTkc7CiAJCX0KLQkJaWYgKFZOVFdJRklieUdldE1heFN1cHBvcnRSYXRlKHBTdXBwb3J0UmF0ZXMsIHBFeHRTdXBwb3J0UmF0ZXMpID4gUkFURV8xMU0pIHsKKwkJaWYgKFZOVFdJRklieUdldE1heFN1cHBvcnRSYXRlKHBTdXBwb3J0UmF0ZXMsIHBFeHRTdXBwb3J0UmF0ZXMpID4gUkFURV8xMU0pCiAJCQlieUNXTWF4TWluID0gMHhBNDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJYnlDV01heE1pbiA9IDB4QTU7Ci0JCX0KKwogCQlpZiAocERldmljZS0+YlByb3RlY3RNb2RlICE9IFZOVFdJRkliSXNQcm90ZWN0TW9kZShieUVSUEZpZWxkKSkgewogCQkJcERldmljZS0+YlByb3RlY3RNb2RlID0gVk5UV0lGSWJJc1Byb3RlY3RNb2RlKGJ5RVJQRmllbGQpOwotCQkJaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSkgeworCQkJaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSkKIAkJCQlNQUN2RW5hYmxlUHJvdGVjdE1EKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlNQUN2RGlzYWJsZVByb3RlY3RNRChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLQkJCX0KKwogCQl9CiAJCWlmIChwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCAhPSBWTlRXSUZJYklzQmFya2VyTW9kZShieUVSUEZpZWxkKSkgewogCQkJcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBWTlRXSUZJYklzQmFya2VyTW9kZShieUVSUEZpZWxkKTsKLQkJCWlmIChwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCkgeworCQkJaWYgKHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kKQogCQkJCU1BQ3ZFbmFibGVCYXJrZXJQcmVhbWJsZU1kKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlNQUN2RGlzYWJsZUJhcmtlclByZWFtYmxlTWQocERldmljZS0+UG9ydE9mZnNldCk7Ci0JCQl9CiAJCX0KIAl9CiAKQEAgLTU2NywyMiArNTMzLDIyIEBACiAJaWYgKHBEZXZpY2UtPmJ5U2xvdCAhPSBieVNsb3QpIHsKIAkJcERldmljZS0+YnlTbG90ID0gYnlTbG90OwogCQlWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfU0xPVCwgcERldmljZS0+YnlTbG90KTsKLQkJaWYgKHBEZXZpY2UtPmJ5U2xvdCA9PSBDX1NMT1RfU0hPUlQpIHsKKwkJaWYgKHBEZXZpY2UtPmJ5U2xvdCA9PSBDX1NMT1RfU0hPUlQpCiAJCQlwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IHRydWU7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lID0gZmFsc2U7Ci0JCX0KKwogCQlCQnZTZXRTaG9ydFNsb3RUaW1lKHBEZXZpY2UpOwogCX0KIAlpZiAocERldmljZS0+YnlDV01heE1pbiAhPSBieUNXTWF4TWluKSB7CiAJCXBEZXZpY2UtPmJ5Q1dNYXhNaW4gPSBieUNXTWF4TWluOwogCQlWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfQ1dNQVhNSU4wLCBwRGV2aWNlLT5ieUNXTWF4TWluKTsKIAl9Ci0JaWYgKFZOVFdJRkliSXNTaG9ydFByZWFtYmxlKHdDYXBJbmZvKSkgeworCWlmIChWTlRXSUZJYklzU2hvcnRQcmVhbWJsZSh3Q2FwSW5mbykpCiAJCXBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID0gcERldmljZS0+YnlTaG9ydFByZWFtYmxlOwotCX0gZWxzZSB7CisJZWxzZQogCQlwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSA9IDA7Ci0JfQorCiAJc192U2V0UlNQSU5GKHBEZXZpY2UsIGVQSFlUeXBlLCBwU3VwcG9ydFJhdGVzLCBwRXh0U3VwcG9ydFJhdGVzKTsKIAlwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPSBlUEhZVHlwZTsKIAkvLyBzZXQgZm9yIE5ESVMgT0lEXzgwMl8xMVNVUFBPUlRFRF9SQVRFUwpAQCAtNjYyLDkgKzYyOCw5IEBACiAJdUxvd1JlbWFpbiA9IHVCZWFjb25JbnRlcnZhbCAtIHVMb3dSZW1haW47CiAKIAkvLyBjaGVjayBpZiBjYXJyeSB3aGVuIGFkZCBvbmUgYmVhY29uIGludGVydmFsCi0JaWYgKCh+dUxvd05leHRUQlRUKSA8IHVMb3dSZW1haW4pIHsKKwlpZiAoKH51TG93TmV4dFRCVFQpIDwgdUxvd1JlbWFpbikKIAkJSElEV09SRChxd05leHRUQlRUKSsrOwotCX0KKwogCUxPRFdPUkQocXdOZXh0VEJUVCkgPSB1TG93TmV4dFRCVFQgKyB1TG93UmVtYWluOwogCiAJLy8gc2V0IEhXIGJlYWNvbiBpbnRlcnZhbApAQCAtNzIwLDE1ICs2ODYsMTMgQEAKIAl9CiAJLy8gd2FpdCBhbGwgVEQwIGNvbXBsZXRlCiAJaWYgKHBEZXZpY2UtPmJTdG9wVHgwUGt0ID09IHRydWUpIHsKLQkJaWYgKHBEZXZpY2UtPmlURFVzZWRbVFlQRV9UWERNQTBdICE9IDApIHsKKwkJaWYgKHBEZXZpY2UtPmlURFVzZWRbVFlQRV9UWERNQTBdICE9IDApCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAJLy8gd2FpdCBhbGwgRGF0YSBURCBjb21wbGV0ZQogCWlmIChwRGV2aWNlLT5iU3RvcERhdGFQa3QgPT0gdHJ1ZSkgewotCQlpZiAocERldmljZS0+aVREVXNlZFtUWVBFX0FDMERNQV0gIT0gMCkgeworCQlpZiAocERldmljZS0+aVREVXNlZFtUWVBFX0FDMERNQV0gIT0gMCkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAogCXJldHVybiB0cnVlOwpAQCAtNzkyLDE2ICs3NTYsMTYgQEAKIAogCU1BQ3ZXcml0ZUJTU0lEQWRkcmVzcyhwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwYnlCU1NJRCk7CiAJbWVtY3B5KHBEZXZpY2UtPmFieUJTU0lELCBwYnlCU1NJRCwgV0xBTl9CU1NJRF9MRU4pOwotCWlmIChlT1BNb2RlID09IE9QX01PREVfQURIT0MpIHsKKwlpZiAoZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKQogCQlNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfSE9TVENSLCBIT1NUQ1JfQURIT0MpOwotCX0gZWxzZSB7CisJZWxzZQogCQlNQUN2UmVnQml0c09mZihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX0hPU1RDUiwgSE9TVENSX0FESE9DKTsKLQl9Ci0JaWYgKGVPUE1vZGUgPT0gT1BfTU9ERV9BUCkgeworCisJaWYgKGVPUE1vZGUgPT0gT1BfTU9ERV9BUCkKIAkJTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX0hPU1RDUiwgSE9TVENSX0FQKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19IT1NUQ1IsIEhPU1RDUl9BUCk7Ci0JfQorCiAJaWYgKGVPUE1vZGUgPT0gT1BfTU9ERV9VTktOT1dOKSB7CiAJCU1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUkNSLCBSQ1JfQlNTSUQpOwogCQlwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPSBmYWxzZTsKQEAgLTEwNDQsMzEgKzEwMDgsMzEgQEAKIAkJbWVtc2V0KCZwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLCAwLCBzaXplb2YoU1BNS0lEQ2FuZGlkYXRlRXZlbnQpKTsKIAl9CiAKLQlmb3IgKGlpID0gMDsgaWkgPCA2OyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgNjsgaWkrKykKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJTAyWCAiLCAqKHBieUJTU0lEICsgaWkpKTsKLQl9CisKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJcbiIpOwogCiAJLy8gVXBkYXRlIE9sZCBDYW5kaWRhdGUKIAlmb3IgKGlpID0gMDsgaWkgPCBwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXM7IGlpKyspIHsKIAkJcENhbmRpZGF0ZUxpc3QgPSAmcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5DYW5kaWRhdGVMaXN0W2lpXTsKIAkJaWYgKCFtZW1jbXAocENhbmRpZGF0ZUxpc3QtPkJTU0lELCBwYnlCU1NJRCwgRVRIX0FMRU4pKSB7Ci0JCQlpZiAoYlJTTkNhcEV4aXN0ICYmICh3UlNOQ2FwICYgQklUMCkpIHsKKwkJCWlmIChiUlNOQ2FwRXhpc3QgJiYgKHdSU05DYXAgJiBCSVQwKSkKIAkJCQlwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgfD0gTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRDsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJcENhbmRpZGF0ZUxpc3QtPkZsYWdzICY9IH4oTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRCk7Ci0JCQl9CisKIAkJCXJldHVybiB0cnVlOwogCQl9CiAJfQogCiAJLy8gTmV3IENhbmRpZGF0ZQogCXBDYW5kaWRhdGVMaXN0ID0gJnBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuQ2FuZGlkYXRlTGlzdFtwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXNdOwotCWlmIChiUlNOQ2FwRXhpc3QgJiYgKHdSU05DYXAgJiBCSVQwKSkgeworCWlmIChiUlNOQ2FwRXhpc3QgJiYgKHdSU05DYXAgJiBCSVQwKSkKIAkJcENhbmRpZGF0ZUxpc3QtPkZsYWdzIHw9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQ7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXBDYW5kaWRhdGVMaXN0LT5GbGFncyAmPSB+KE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQpOwotCX0KKwogCW1lbWNweShwQ2FuZGlkYXRlTGlzdC0+QlNTSUQsIHBieUJTU0lELCBFVEhfQUxFTik7CiAJcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKys7CiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTnVtQ2FuZGlkYXRlczolZFxuIiwgKGludClwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXMpOwpAQCAtMTE0OSwxNiArMTExMywxNiBAQAogCQkJCS8vIHN0YXJ0IGltbWVkaWF0ZWx5IGJ5IHNldHRpbmcgc3RhcnQgVFNGID09IGN1cnJlbnQgVFNGICsgMiBUVQogCQkJCUxPRFdPUkQocXdTdGFydFRTRikgPSBMT0RXT1JEKHF3Q3VyclRTRikgKyAyMDQ4OwogCQkJCUhJRFdPUkQocXdTdGFydFRTRikgPSBISURXT1JEKHF3Q3VyclRTRik7Ci0JCQkJaWYgKExPRFdPUkQocXdDdXJyVFNGKSA+IExPRFdPUkQocXdTdGFydFRTRikpIHsKKwkJCQlpZiAoTE9EV09SRChxd0N1cnJUU0YpID4gTE9EV09SRChxd1N0YXJ0VFNGKSkKIAkJCQkJSElEV09SRChxd1N0YXJ0VFNGKSsrOwotCQkJCX0KKwogCQkJCWJFeHBpcmVkID0gZmFsc2U7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCS8vIHN0YXJ0IGF0IHNldHRpbmcgc3RhcnQgVFNGIC0gMVRVKGZvciBjaGFubmVsIHN3aXRjaGluZykKLQkJCQlpZiAoTE9EV09SRChxd1N0YXJ0VFNGKSA8IDEwMjQpIHsKKwkJCQlpZiAoTE9EV09SRChxd1N0YXJ0VFNGKSA8IDEwMjQpCiAJCQkJCUhJRFdPUkQocXdTdGFydFRTRiktLTsKLQkJCQl9CisKIAkJCQlMT0RXT1JEKHF3U3RhcnRUU0YpIC09IDEwMjQ7CiAJCQl9CiAKQEAgLTEyNDcsOSArMTIxMSw5IEBACiAJcERldmljZS0+YnlDaGFubmVsU3dpdGNoQ291bnQgPSBieUNvdW50OwogCXBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCA9IGJ5TmV3Q2hhbm5lbDsKIAlwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9IHRydWU7Ci0JaWYgKGJ5TW9kZSA9PSAxKSB7CisJaWYgKGJ5TW9kZSA9PSAxKQogCQliUmVzdWx0ID0gQ0FSRGJTdG9wVHhQYWNrZXQocERldmljZSwgUEtUX1RZUEVfODAyXzExX0FMTCk7Ci0JfQorCiAJcmV0dXJuIGJSZXN1bHQ7CiB9CiAKQEAgLTEyODIsOSArMTI0Niw5IEBACiAKIAlpZiAoYlJlc2V0UXVpZXQpIHsKIAkJTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIChNU1JDVExfUVVJRVRUWENISyB8IE1TUkNUTF9RVUlFVEVOKSk7Ci0JCWZvciAoaWkgPSAwOyBpaSA8IE1BWF9RVUlFVF9DT1VOVDsgaWkrKykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBNQVhfUVVJRVRfQ09VTlQ7IGlpKyspCiAJCQlwRGV2aWNlLT5zUXVpZXRbaWldLmJFbmFibGUgPSBmYWxzZTsKLQkJfQorCiAJCXBEZXZpY2UtPnVRdWlldEVucXVldWUgPSAwOwogCQlwRGV2aWNlLT5iRW5hYmxlRmlyc3RRdWlldCA9IGZhbHNlOwogCQlwRGV2aWNlLT5iUXVpZXRFbmFibGUgPSBmYWxzZTsKQEAgLTEyOTksMTEgKzEyNjMsOCBAQAogCQlwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgKz0gd1F1aWV0T2Zmc2V0OwogCQlwRGV2aWNlLT51UXVpZXRFbnF1ZXVlKys7CiAJCXBEZXZpY2UtPnVRdWlldEVucXVldWUgJT0gTUFYX1FVSUVUX0NPVU5UOwotCQlpZiAocERldmljZS0+YnlRdWlldFN0YXJ0Q291bnQgPCBieVF1aWV0Q291bnQpIHsKKwkJaWYgKHBEZXZpY2UtPmJ5UXVpZXRTdGFydENvdW50IDwgYnlRdWlldENvdW50KQogCQkJcERldmljZS0+YnlRdWlldFN0YXJ0Q291bnQgPSBieVF1aWV0Q291bnQ7Ci0JCX0KLQl9IGVsc2UgewotCQkvLyB3ZSBjYW4gbm90IGhhbmRsZSBRdWlldCBFSUQgbW9yZQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTEzOTksOSArMTM2MCw5IEBACiAJCWlmIChwRGV2aWNlLT5kd0N1cnJlbnRRdWlldEVuZFRpbWUgPiAweDgwMDEwMDAwKSB7CiAJCQkvLyBkZWNyZWFtZW50IGFsbCB0aW1lIHRvIGF2b2lkIHdyYXAgYXJvdW5kCiAJCQlmb3IgKGlpID0gMDsgaWkgPCBNQVhfUVVJRVRfQ09VTlQ7IGlpKyspIHsKLQkJCQlpZiAocERldmljZS0+c1F1aWV0W2lpXS5iRW5hYmxlID09IHRydWUpIHsKKwkJCQlpZiAocERldmljZS0+c1F1aWV0W2lpXS5iRW5hYmxlID09IHRydWUpCiAJCQkJCXBEZXZpY2UtPnNRdWlldFtpaV0uZHdTdGFydFRpbWUgLT0gMHg4MDAwMDAwMDsKLQkJCQl9CisKIAkJCX0KIAkJCXBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSAtPSAweDgwMDAwMDAwOwogCQl9CkBAIC0xNDMzLDEzICsxMzk0LDEzIEBACiAJUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKIAlpZiAoYnlDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7Ci0JCWlmIChwRGV2aWNlLT5iQ291bnRyeUluZm81RyA9PSB0cnVlKSB7CisJCWlmIChwRGV2aWNlLT5iQ291bnRyeUluZm81RyA9PSB0cnVlKQogCQkJcERldmljZS0+YWJ5TG9jYWxQd3JbYnlDaGFubmVsXSA9IHBEZXZpY2UtPmFieVJlZ1B3cltieUNoYW5uZWxdIC0gYnlQb3dlcjsKLQkJfQorCiAJfSBlbHNlIHsKLQkJaWYgKHBEZXZpY2UtPmJDb3VudHJ5SW5mbzI0RyA9PSB0cnVlKSB7CisJCWlmIChwRGV2aWNlLT5iQ291bnRyeUluZm8yNEcgPT0gdHJ1ZSkKIAkJCXBEZXZpY2UtPmFieUxvY2FsUHdyW2J5Q2hhbm5lbF0gPSBwRGV2aWNlLT5hYnlSZWdQd3JbYnlDaGFubmVsXSAtIGJ5UG93ZXI7Ci0JCX0KKwogCX0KIH0KIApAQCAtMTYxOCw5ICsxNTc5LDkgQEAKIAl1bnNpZ25lZCBpbnQgdWkgPSAodW5zaWduZWQgaW50KSB3UmF0ZUlkeDsKIAogCXdoaWxlICh1aSA+IFJBVEVfMU0pIHsKLQkJaWYgKHBEZXZpY2UtPndCYXNpY1JhdGUgJiAoKHVuc2lnbmVkIHNob3J0KTEgPDwgdWkpKSB7CisJCWlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKCh1bnNpZ25lZCBzaG9ydCkxIDw8IHVpKSkKIAkJCXJldHVybiAodW5zaWduZWQgc2hvcnQpdWk7Ci0JCX0KKwogCQl1aS0tOwogCX0KIAlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KVJBVEVfMU07CkBAIC0xODIwLDExICsxNzgxLDExIEBACiAJCWJ5TWF4TWluID0gNTsKIAl9IGVsc2UgeyAvLyBQS19UWVBFXzExR0EgJiBQS19UWVBFXzExR0IKIAkJcERldmljZS0+dVNJRlMgPSBDX1NJRlNfQkc7Ci0JCWlmIChwRGV2aWNlLT5iU2hvcnRTbG90VGltZSkgeworCQlpZiAocERldmljZS0+YlNob3J0U2xvdFRpbWUpCiAJCQlwRGV2aWNlLT51U2xvdCA9IENfU0xPVF9TSE9SVDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcERldmljZS0+dVNsb3QgPSBDX1NMT1RfTE9ORzsKLQkJfQorCiAJCXBEZXZpY2UtPnVESUZTID0gQ19TSUZTX0JHICsgMipwRGV2aWNlLT51U2xvdDsKIAkJaWYgKHBEZXZpY2UtPndCYXNpY1JhdGUgJiAweDAxNTApIHsgLy8wMDAwIDAwMDEgMDEwMSAwMDAwLDI0TSwxMk0sNk0KIAkJCXBEZXZpY2UtPnVDd01pbiA9IENfQ1dNSU5fQTsKQEAgLTE4NzcsMTkgKzE4MzgsNiBAQAogCXBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlID0gYnlUb3BDQ0s7CiB9CiAKLS8qCi0gKiBEZXNjcmlwdGlvbjogU2V0IE5JQyBUeCBCYXNpYyBSYXRlCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZSAgICAgICAgIC0gVGhlIGFkYXB0ZXIgdG8gYmUgc2V0Ci0gKiAgICAgIHdCYXNpY1JhdGUgICAgICAtIEJhc2ljIFJhdGUgdG8gYmUgc2V0Ci0gKiAgT3V0OgotICogICAgICBub25lCi0gKgotICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgotICoKLSAqLwogYm9vbCBDQVJEYkFkZEJhc2ljUmF0ZSh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgc2hvcnQgd1JhdGVJZHgpCiB7CiAJUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CkBAIC0xOTE5LDEzICsxODY3LDEyIEBACiB7CiAJUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKLQlpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEgfHwgcERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUIpIHsKKwlpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEgfHwgcERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUIpCiAJCXJldHVybiAodW5zaWduZWQgY2hhcilwRGV2aWNlLT5ieUJCVHlwZTsKLQl9IGVsc2UgaWYgKENBUkRiSXNPRkRNaW5CYXNpY1JhdGUoKHZvaWQgKilwRGV2aWNlKSkgeworCWVsc2UgaWYgKENBUkRiSXNPRkRNaW5CYXNpY1JhdGUoKHZvaWQgKilwRGV2aWNlKSkKIAkJcmV0dXJuIFBLX1RZUEVfMTFHQTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dXJuIFBLX1RZUEVfMTFHQjsKLQl9CiB9CiAKIC8qCkBAIC0yMDA0LDkgKzE5NTEsOSBAQAogCUxPRFdPUkQocXdUU0ZPZmZzZXQpID0gMDsKIAl3UnhCY25UU0ZPZmZzdCA9IGN3UlhCQ05UU0ZPZmZbYnlSeFJhdGUlTUFYX1JBVEVdOwogCShxd1RTRjIpLnUuZHdMb3dEd29yZCArPSAodW5zaWduZWQgbG9uZykod1J4QmNuVFNGT2Zmc3QpOwotCWlmICgocXdUU0YyKS51LmR3TG93RHdvcmQgPCAodW5zaWduZWQgbG9uZykod1J4QmNuVFNGT2Zmc3QpKSB7CisJaWYgKChxd1RTRjIpLnUuZHdMb3dEd29yZCA8ICh1bnNpZ25lZCBsb25nKSh3UnhCY25UU0ZPZmZzdCkpCiAJCShxd1RTRjIpLnUuZHdIaWdoRHdvcmQrKzsKLQl9CisKIAlMT0RXT1JEKHF3VFNGT2Zmc2V0KSA9IExPRFdPUkQocXdUU0YxKSAtIExPRFdPUkQocXdUU0YyKTsKIAlpZiAoTE9EV09SRChxd1RTRjEpIDwgTE9EV09SRChxd1RTRjIpKSB7CiAJCS8vIGlmIGJvcnJvdyBuZWVkZWQKQEAgLTIwNzQsOCArMjAyMSw2IEBACiAJdUxvd05leHRUQlRUID0gKExPRFdPUkQocXdUU0YpID4+IDEwKSA8PCAxMDsKIAkvLyBsb3cgZHdvcmQgKG1vZCkgYmNuCiAJdUxvd1JlbWFpbiA9ICh1TG93TmV4dFRCVFQpICUgdUJlYWNvbkludGVydmFsOwotLy8gICAgdUhpZ2hSZW1haW4gPSAoKDB4ODAwMDAwMDAgJSB1QmVhY29uSW50ZXJ2YWwpKiAyICogSElEV09SRChxd1RTRikpCi0vLyAgICAgICAgICAgICAgICAgICUgdUJlYWNvbkludGVydmFsOwogCS8vIGhpZ2ggZHdvcmQgKG1vZCkgYmNuCiAJdUhpZ2hSZW1haW4gPSAoKCgweGZmZmZmZmZmICUgdUJlYWNvbkludGVydmFsKSArIDEpICogSElEV09SRChxd1RTRikpCiAJCSUgdUJlYWNvbkludGVydmFsOwpAQCAtMjExNyw3ICsyMDYyLDcgQEAKIAlWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX05FWFRUQlRULCBMT0RXT1JEKHF3TmV4dFRCVFQpKTsKIAlWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX05FWFRUQlRUICsgNCwgSElEV09SRChxd05leHRUQlRUKSk7CiAJTUFDdlJlZ0JpdHNPbihkd0lvQmFzZSwgTUFDX1JFR19URlRDVEwsIFRGVENUTF9UQlRUU1lOQ0VOKTsKLQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkNhcmQ6Rmlyc3QgTmV4dCBUQlRUWyU4eGg6JTh4aF0gXG4iLCBISURXT1JEKHF3TmV4dFRCVFQpLCBMT0RXT1JEKHF3TmV4dFRCVFQpKTsKKwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaAppbmRleCBhYzZlMmI0Li44MjliZTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaApAQCAtMTA0LDcgKzEwNCw2IEBACiAvL3h4eAogYm9vbCBDQVJEYlJhZGlvUG93ZXJPZmYodm9pZCAqcERldmljZUhhbmRsZXIpOwogYm9vbCBDQVJEYlJhZGlvUG93ZXJPbih2b2lkICpwRGV2aWNlSGFuZGxlcik7Ci0vL2Jvb2wgQ0FSRGJTZW5kUGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB2b2lkICpwUGFja2V0LCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlLCB1bnNpZ25lZCBpbnQgdUxlbmd0aCk7CiBib29sIENBUkRiSXNTaG9ydFByZWFtYmxlKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKIGJvb2wgQ0FSRGJJc1Nob3JTbG90VGltZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7CiBib29sIENBUkRiU2V0UGh5UGFyYW1ldGVyKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlLCB1bnNpZ25lZCBzaG9ydCB3Q2FwSW5mbywgdW5zaWduZWQgY2hhciBieUVSUEZpZWxkLCB2b2lkICpwdlN1cHBvcnRSYXRlSUVzLCB2b2lkICpwdkV4dFN1cHBvcnRSYXRlSUVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmMKaW5kZXggMzE5OGEzMS4uZDViODliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmMKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2RlZmluZSBDQVJEX01BWF9DSEFOTkVMX1RCTCAgICA1NgogCi0vL3N0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfREVCVUc7CiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00MjEsOSArNDIwLDggQEAKIAlib29sIGJNdWx0aUJhbmQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgaWk7CiAKLQlmb3IgKGlpID0gMTsgaWkgPD0gQ0FSRF9NQVhfQ0hBTk5FTF9UQkw7IGlpKyspIHsKKwlmb3IgKGlpID0gMTsgaWkgPD0gQ0FSRF9NQVhfQ0hBTk5FTF9UQkw7IGlpKyspCiAJCXNDaGFubmVsVGJsW2lpXS5iVmFsaWQgPSBmYWxzZTsKLQl9CiAKIAlzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CiAJY2FzZSBSRl9SRk1EMjk1OToKQEAgLTUwOSw3ICs1MDcsNiBAQAogCiB1bnNpZ25lZCBjaGFyIGdldF9jaGFubmVsX251bWJlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciBieUNoYW5uZWxJbmRleCkKIHsKLQkvL1BTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCXJldHVybiBzQ2hhbm5lbFRibFtieUNoYW5uZWxJbmRleF0uYnlDaGFubmVsTnVtYmVyOwogfQogCkBAIC01MjcsMTMgKzUyNCwxMSBAQAogCVBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCWJvb2wgYlJlc3VsdCA9IHRydWU7CiAKLQlpZiAocERldmljZS0+YnlDdXJyZW50Q2ggPT0gdUNvbm5lY3Rpb25DaGFubmVsKSB7CisJaWYgKHBEZXZpY2UtPmJ5Q3VycmVudENoID09IHVDb25uZWN0aW9uQ2hhbm5lbCkKIAkJcmV0dXJuIGJSZXN1bHQ7Ci0JfQogCi0JaWYgKCFzQ2hhbm5lbFRibFt1Q29ubmVjdGlvbkNoYW5uZWxdLmJWYWxpZCkgeworCWlmICghc0NoYW5uZWxUYmxbdUNvbm5lY3Rpb25DaGFubmVsXS5iVmFsaWQpCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKIAlpZiAoKHVDb25uZWN0aW9uQ2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykgJiYKIAkgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSAhPSBQSFlfVFlQRV8xMUEpKSB7CkBAIC01NDgsOSArNTQzLDggQEAKIAkvL3t7IFJvYmVydFl1OiAyMDA0MTIwMgogCS8vLy8gVFhfUEUgd2lsbCByZXNlcnZlIDMgdXMgZm9yIE1BWDI4MjkgQSBtb2RlIG9ubHksIGl0IGlzIGZvciBiZXR0ZXIgVFggdGhyb3VnaHB1dAogCi0JaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzApIHsKKwlpZiAocERldmljZS0+YnlSRlR5cGUgPT0gUkZfQUlST0hBNzIzMCkKIAkJUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5Q3VycmVudENoLCAodW5zaWduZWQgY2hhcil1Q29ubmVjdGlvbkNoYW5uZWwpOwotCX0KIAkvL319IFJvYmVydFl1CiAKIAlwRGV2aWNlLT5ieUN1cnJlbnRDaCA9ICh1bnNpZ25lZCBjaGFyKXVDb25uZWN0aW9uQ2hhbm5lbDsKQEAgLTU2MCw3ICs1NTQsNiBAQAogCWlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKQogCQlSRnZXcml0ZVdha2VQcm9nU3luKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5UkZUeXBlLCB1Q29ubmVjdGlvbkNoYW5uZWwpOwogCi0JLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJDQVJEYlNldE1lZGlhQ2hhbm5lbDogJWRcbiIsICh1bnNpZ25lZCBjaGFyKXVDb25uZWN0aW9uQ2hhbm5lbCk7CiAJQkJ2U29mdHdhcmVSZXNldChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKIAogCWlmIChwRGV2aWNlLT5ieUxvY2FsSUQgPiBSRVZfSURfVlQzMjUzX0IxKSB7CkBAIC01NzMsMTEgKzU2NiwxMCBAQAogCQlNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAJfQogCi0JaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKKwlpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikKIAkJUkZiU2V0UG93ZXIocERldmljZSwgUkFURV8xTSwgcERldmljZS0+YnlDdXJyZW50Q2gpOwotCX0gZWxzZSB7CisJZWxzZQogCQlSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0JfQogCiAJcmV0dXJuIGJSZXN1bHQ7CiB9CkBAIC02MDQsMTUgKzU5NiwxNSBAQAogCiAJaWYgKGVQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgewogCQlwRGV2aWNlLT5iQ291bnRyeUluZm81RyA9IHRydWU7Ci0JCWZvciAoaWkgPSBDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxOyBpaSA8PSBDQVJEX01BWF9DSEFOTkVMX1RCTDsgaWkrKykgeworCQlmb3IgKGlpID0gQ0JfTUFYX0NIQU5ORUxfMjRHICsgMTsgaWkgPD0gQ0FSRF9NQVhfQ0hBTk5FTF9UQkw7IGlpKyspCiAJCQlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gZmFsc2U7Ci0JCX0KKwogCQlzdGVwID0gNDsKIAl9IGVsc2UgewogCQlwRGV2aWNlLT5iQ291bnRyeUluZm8yNEcgPSB0cnVlOwotCQlmb3IgKGlpID0gMTsgaWkgPD0gQ0JfTUFYX0NIQU5ORUxfMjRHOyBpaSsrKSB7CisJCWZvciAoaWkgPSAxOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTF8yNEc7IGlpKyspCiAJCQlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gZmFsc2U7Ci0JCX0KKwogCQlzdGVwID0gMTsKIAl9CiAJcERldmljZS0+YWJ5Q291bnRyeUNvZGVbMF0gPSBwSUVfQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1swXTsKQEAgLTY1NSwxOSArNjQ3LDE5IEBACiAJYnlDb3VudCA9IDA7CiAJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFsyOF0gPT0gdHJ1ZSkgewogCQlmb3IgKGlpID0gMjg7IGlpIDwgMzY7IGlpICs9IDIpIHsKLQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpCiAJCQkJYnlDb3VudCsrOwotCQkJfQogCQl9CisKIAkJKnBieUNoVHVwcGxlKysgPSAzNDsKIAkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OwogCQlieUxlbiArPSAyOwogCX0gZWxzZSBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0WzI5XSA9PSB0cnVlKSB7CiAJCWZvciAoaWkgPSAyOTsgaWkgPCAzNjsgaWkgKz0gMikgewotCQkJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gdHJ1ZSkgeworCQkJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gdHJ1ZSkKIAkJCQlieUNvdW50Kys7Ci0JCQl9CiAJCX0KKwogCQkqcGJ5Q2hUdXBwbGUrKyA9IDM2OwogCQkqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7CiAJCWJ5TGVuICs9IDI7CkBAIC02NzYsMTAgKzY2OCwxMCBAQAogCWJ5Q291bnQgPSAwOwogCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMzZdID09IHRydWUpIHsKIAkJZm9yIChpaSA9IDM2OyBpaSA8IDQwOyBpaSsrKSB7Ci0JCQlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSA9PSB0cnVlKSB7CisJCQlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSA9PSB0cnVlKQogCQkJCWJ5Q291bnQrKzsKLQkJCX0KIAkJfQorCiAJCSpwYnlDaFR1cHBsZSsrID0gNTI7CiAJCSpwYnlDaFR1cHBsZSsrID0gYnlDb3VudDsKIAkJYnlMZW4gKz0gMjsKQEAgLTY4OCwxOSArNjgwLDE5IEBACiAJYnlDb3VudCA9IDA7CiAJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFs0MF0gPT0gdHJ1ZSkgewogCQlmb3IgKGlpID0gNDA7IGlpIDwgNTE7IGlpKyspIHsKLQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpCiAJCQkJYnlDb3VudCsrOwotCQkJfQogCQl9CisKIAkJKnBieUNoVHVwcGxlKysgPSAxMDA7CiAJCSpwYnlDaFR1cHBsZSsrID0gYnlDb3VudDsKIAkJYnlMZW4gKz0gMjsKIAl9IGVsc2UgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFs1MV0gPT0gdHJ1ZSkgewogCQlmb3IgKGlpID0gNTE7IGlpIDwgNTY7IGlpKyspIHsKLQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpCiAJCQkJYnlDb3VudCsrOwotCQkJfQogCQl9CisKIAkJKnBieUNoVHVwcGxlKysgPSAxNDk7CiAJCSpwYnlDaFR1cHBsZSsrID0gYnlDb3VudDsKIAkJYnlMZW4gKz0gMjsKQEAgLTc2NywxNCArNzU5LDEzIEBACiAJaWYgKGVQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgewogCQlmb3IgKGlpID0gQ0JfTUFYX0NIQU5ORUxfMjRHICsgMTsgaWkgPD0gQ0JfTUFYX0NIQU5ORUw7IGlpKyspIHsKIAkJCWlmIChzQ2hhbm5lbFRibFtpaV0uYlZhbGlkKSB7Ci0JCQkJaWYgKGJ5T3B0aW9uQ2hhbm5lbCA9PSAwKSB7CisJCQkJaWYgKGJ5T3B0aW9uQ2hhbm5lbCA9PSAwKQogCQkJCQlieU9wdGlvbkNoYW5uZWwgPSAodW5zaWduZWQgY2hhcikgaWk7Ci0JCQkJfQotCQkJCWlmIChzQ2hhbm5lbFRibFtpaV0uYnlNQVAgPT0gMCkgeworCisJCQkJaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9PSAwKQogCQkJCQlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpIGlpOwotCQkJCX0gZWxzZSBpZiAoIShzQ2hhbm5lbFRibFtpaV0uYnlNQVAgJiAweDA4KSkgeworCQkJCWVsc2UgaWYgKCEoc0NoYW5uZWxUYmxbaWldLmJ5TUFQICYgMHgwOCkpCiAJCQkJCWJ5T3B0aW9uQ2hhbm5lbCA9ICh1bnNpZ25lZCBjaGFyKSBpaTsKLQkJCQl9CiAJCQl9CiAJCX0KIAl9IGVsc2UgewpAQCAtNzg0LDI1ICs3NzUsMjQgQEAKIAkJCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJ5TUFQID09IDApIHsKIAkJCQkJYWlXZWlnaHRbaWldICs9IDEwMDsKIAkJCQl9IGVsc2UgaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCAmIDB4MDEpIHsKLQkJCQkJaWYgKGlpID4gMykgeworCQkJCQlpZiAoaWkgPiAzKQogCQkJCQkJYWlXZWlnaHRbaWkgLSAzXSAtPSAxMDsKLQkJCQkJfQotCQkJCQlpZiAoaWkgPiAyKSB7CisKKwkJCQkJaWYgKGlpID4gMikKIAkJCQkJCWFpV2VpZ2h0W2lpIC0gMl0gLT0gMjA7Ci0JCQkJCX0KLQkJCQkJaWYgKGlpID4gMSkgeworCisJCQkJCWlmIChpaSA+IDEpCiAJCQkJCQlhaVdlaWdodFtpaSAtIDFdIC09IDQwOwotCQkJCQl9CisKIAkJCQkJYWlXZWlnaHRbaWldIC09IDgwOwotCQkJCQlpZiAoaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEcpIHsKKwkJCQkJaWYgKGlpIDwgQ0JfTUFYX0NIQU5ORUxfMjRHKQogCQkJCQkJYWlXZWlnaHRbaWkgKyAxXSAtPSA0MDsKLQkJCQkJfQotCQkJCQlpZiAoaWkgPCAoQ0JfTUFYX0NIQU5ORUxfMjRHIC0gMSkpIHsKKworCQkJCQlpZiAoaWkgPCAoQ0JfTUFYX0NIQU5ORUxfMjRHIC0gMSkpCiAJCQkJCQlhaVdlaWdodFtpaSsyXSAtPSAyMDsKLQkJCQkJfQotCQkJCQlpZiAoaWkgPCAoQ0JfTUFYX0NIQU5ORUxfMjRHIC0gMikpIHsKKworCQkJCQlpZiAoaWkgPCAoQ0JfTUFYX0NIQU5ORUxfMjRHIC0gMikpCiAJCQkJCQlhaVdlaWdodFtpaSszXSAtPSAxMDsKLQkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5jCmluZGV4IGM5YTg5Y2QuLmY4NDIwZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGF0YXJhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmMKQEAgLTQ5LDkgKzQ5LDggQEAKIAogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFR4UmF0ZV9pd2NvbmZpZzsgLy8yMDA4LTUtOCA8YWRkPiBieSBjaGVzdGVyCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7CiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87Ci1jb25zdCB1bnNpZ25lZCBjaGFyIGFjYnlJRVJhdGVbTUFYX1JBVEVdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFjYnlJRVJhdGVbTUFYX1JBVEVdID0KIHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKIAogI2RlZmluZSBBVVRPUkFURV9UWE9LX0NOVCAgICAgICAweDA0MDAKQEAgLTI1MSwxNCArMjUwLDEyIEBACiAJCQlpZiAoYnlSYXRlID4gYnlIaWdoU3VwcFJhdGUpCiAJCQkJYnlIaWdoU3VwcFJhdGUgPSBieVJhdGU7CiAJCQkqcHdTdXBwUmF0ZSB8PSAoMTw8d0dldFJhdGVJZHgoYnlSYXRlKSk7Ci0JCQkvL0RCR19QUk5fR1JQMDkoKCJQYXJzZU1heFJhdGUgOiBIaWdoU3VwcFJhdGU6ICVkLCAlWFxuIiwgd0dldFJhdGVJZHgoYnlSYXRlKSwgYnlSYXRlKSk7CiAJCX0KLQl9IC8vaWYgKHBJdGVtRXh0UmF0ZXMgIT0gTlVMTCkKLQotCWlmICgocERldmljZS0+YnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFHQikgJiYgQ0FSRGJJc09GRE1pbkJhc2ljUmF0ZSgodm9pZCAqKXBEZXZpY2UpKSB7Ci0JCXBEZXZpY2UtPmJ5UGFja2V0VHlwZSA9IFBLX1RZUEVfMTFHQTsKIAl9CiAKKwlpZiAoKHBEZXZpY2UtPmJ5UGFja2V0VHlwZSA9PSBQS19UWVBFXzExR0IpICYmIENBUkRiSXNPRkRNaW5CYXNpY1JhdGUoKHZvaWQgKilwRGV2aWNlKSkKKwkJcERldmljZS0+YnlQYWNrZXRUeXBlID0gUEtfVFlQRV8xMUdBOworCiAJKnBieVRvcENDS1JhdGUgPSBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZTsKIAkqcGJ5VG9wT0ZETVJhdGUgPSBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGU7CiAJKnB3TWF4U3VwcFJhdGUgPSB3R2V0UmF0ZUlkeChieUhpZ2hTdXBwUmF0ZSk7CkBAIC0yOTksNyArMjk2LDYgQEAKIAlQU0RldmljZSAgICAgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAJdW5zaWduZWQgc2hvcnQgd0lkeERvd25SYXRlID0gMDsKIAl1bnNpZ25lZCBpbnQgaWk7Ci0vL3Vuc2lnbmVkIGxvbmcgZHdSYXRlVGFibGVbTUFYX1JBVEVdICA9IHsxLCAgIDIsICAgNSwgICAxMSwgIDYsICAgIDksICAgIDEyLCAgIDE4LCAgMjQsICAzNiwgIDQ4LCAgNTR9OwogCWJvb2wgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9OwogCXVuc2lnbmVkIGxvbmcgZHdUaHJvdWdocHV0VGJsW01BWF9SQVRFXSA9IHsxMCwgMjAsIDU1LCAxMTAsIDYwLCA5MCwgMTIwLCAxODAsIDI0MCwgMzYwLCA0ODAsIDU0MH07CiAJdW5zaWduZWQgbG9uZyBkd1Rocm91Z2hwdXQgPSAwOwpAQCAtMzIyLDE1ICszMTgsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChwc05vZGVEQlRhYmxlLT51VGltZUNvdW50ID49IEFVVE9SQVRFX1RJTUVPVVQpIHsKKwlpZiAocHNOb2RlREJUYWJsZS0+dVRpbWVDb3VudCA+PSBBVVRPUkFURV9USU1FT1VUKQogCQlwc05vZGVEQlRhYmxlLT51VGltZUNvdW50ID0gMDsKLQl9CiAKIAlmb3IgKGlpID0gMDsgaWkgPCBNQVhfUkFURTsgaWkrKykgewogCQlpZiAocHNOb2RlREJUYWJsZS0+d1N1cHBSYXRlICYgKDB4MDAwMTw8aWkpKSB7Ci0JCQlpZiAoYkF1dG9SYXRlW2lpXSkgeworCQkJaWYgKGJBdXRvUmF0ZVtpaV0pCiAJCQkJd0lkeFVwUmF0ZSA9ICh1bnNpZ25lZCBzaG9ydCkgaWk7Ci0JCQl9CisKIAkJfSBlbHNlIHsKIAkJCWJBdXRvUmF0ZVtpaV0gPSBmYWxzZTsKIAkJfQpAQCAtMzQwLDEzICszMzUsMTEgQEAKIAkJaWYgKChwc05vZGVEQlRhYmxlLT51VHhPa1tpaV0gIT0gMCkgfHwKIAkJICAgIChwc05vZGVEQlRhYmxlLT51VHhGYWlsW2lpXSAhPSAwKSkgewogCQkJZHdUaHJvdWdocHV0VGJsW2lpXSAqPSBwc05vZGVEQlRhYmxlLT51VHhPa1tpaV07Ci0JCQlpZiAoaWkgPCBSQVRFXzExTSkgeworCQkJaWYgKGlpIDwgUkFURV8xMU0pCiAJCQkJcHNOb2RlREJUYWJsZS0+dVR4RmFpbFtpaV0gKj0gNDsKLQkJCX0KKwogCQkJZHdUaHJvdWdocHV0VGJsW2lpXSAvPSAocHNOb2RlREJUYWJsZS0+dVR4T2tbaWldICsgcHNOb2RlREJUYWJsZS0+dVR4RmFpbFtpaV0pOwogCQl9Ci0vLyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUmF0ZSAlZCxPazogJWQsIEZhaWw6JWQsIFRocm91Z2hwdXQ6JWRcbiIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgaWksIHBzTm9kZURCVGFibGUtPnVUeE9rW2lpXSwgcHNOb2RlREJUYWJsZS0+dVR4RmFpbFtpaV0sIGR3VGhyb3VnaHB1dFRibFtpaV0pOwogCX0KIAlkd1Rocm91Z2hwdXQgPSBkd1Rocm91Z2hwdXRUYmxbcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGVdOwogCkBAIC0zNzEsNyArMzY0LDYgQEAKIC8vMjAwOC01LTggPGFkZD4gYnkgY2hlc3RlcgogCVR4UmF0ZV9pd2NvbmZpZyA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOwogCXNfdlJlc2V0Q291bnRlcihwc05vZGVEQlRhYmxlKTsKLS8vICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlJhdGU6ICVkLCBVOiVkLCBEOiVkXG4iLCBwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSwgd0lkeFVwUmF0ZSwgd0lkeERvd25SYXRlKTsKIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXNjLmgKaW5kZXggZjhlNDE0OC4uYzYyMGNiZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCkBAIC0yMTMsMjkgKzIxMyw2IEBACiAJZG1hX2FkZHJfdCAgY3Vycl9kZXNjOwogfSBERVZJQ0VfUkRfSU5GTywgICAqUERFVklDRV9SRF9JTkZPOwogCi0vKgotICBzdGF0aWMgaW5saW5lIFBERVZJQ0VfUkRfSU5GTyBhbGxvY19yZF9pbmZvKHZvaWQpIHsKLSAgUERFVklDRV9SRF9JTkZPICBwdHI7Ci0gIHB0ciA9IGttYWxsb2Moc2l6ZW9mKERFVklDRV9SRF9JTkZPKSwgR0ZQX0FUT01JQyk7Ci0gIGlmIChwdHIgPT0gTlVMTCkKLSAgcmV0dXJuIE5VTEw7Ci0gIGVsc2UgewotICBtZW1zZXQocHRyLDAsc2l6ZW9mKERFVklDRV9SRF9JTkZPKSk7Ci0gIHJldHVybiBwdHI7Ci0gIH0KLSAgfQotKi8KLQotLyoKLSAgdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICB1bnNpZ25lZCBzaG9ydCB3UmVzQ291bnQ7Ci0gIHVuc2lnbmVkIHNob3J0IHdmMU93bmVyOwotLy8gICAgdW5zaWduZWQgc2hvcnQgZjE1UmVzZXJ2ZWQgOiAxNTsKLS8vICAgIHVuc2lnbmVkIHNob3J0IGYxT3duZXIgOiAxOwotfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCi1TUkRFUzA7Ci0qLwotCiAjaWZkZWYgX19CSUdfRU5ESUFOCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1JERVMwIHsKQEAgLTI4NCwxNyArMjYxLDYgQEAKIAogI2lmZGVmIF9fQklHX0VORElBTgogCi0vKgotICB0eXBlZGVmIHN0cnVjdCB0YWdUREVTMCB7Ci0gIHZvbGF0aWxlICAgIHVuc2lnbmVkIGNoYXIgYnlUU1IwOwotICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMTsKLSAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgd093bmVyX1R4dGltZTsKLS8vICAgIHZvbGF0aWxlICAgIHVuc2lnbmVkIHNob3J0IGYxNVR4dGltZSA6IDE1OwotLy8gICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjFPd25lcjoxOwotfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCi1TVERFUzA7Ci0qLwotCiB0eXBlZGVmIHN0cnVjdCB0YWdUREVTMCB7CiAJdm9sYXRpbGUgICAgdW5zaWduZWQgY2hhciBieVRTUjA7CiAJdm9sYXRpbGUgICAgdW5zaWduZWQgY2hhciBieVRTUjE7CkBAIC0zMzksMTkgKzMwNSw2IEBACiAJdW5zaWduZWQgY2hhciBieUZsYWdzOwogfSBERVZJQ0VfVERfSU5GTywgICAgKlBERVZJQ0VfVERfSU5GTzsKIAotLyoKLSAgc3RhdGljIGlubGluZSBQREVWSUNFX1REX0lORk8gYWxsb2NfdGRfaW5mbyh2b2lkKSB7Ci0gIFBERVZJQ0VfVERfSU5GTyAgcHRyOwotICBwdHIgPSBrbWFsbG9jKHNpemVvZihERVZJQ0VfVERfSU5GTyksR0ZQX0FUT01JQyk7Ci0gIGlmIChwdHIgPT0gTlVMTCkKLSAgcmV0dXJuIE5VTEw7Ci0gIGVsc2UgewotICBtZW1zZXQocHRyLDAsc2l6ZW9mKERFVklDRV9URF9JTkZPKSk7Ci0gIHJldHVybiBwdHI7Ci0gIH0KLSAgfQotKi8KLQogLy8KIC8vIHRyYW5zbWl0IGRlc2NyaXB0b3IKIC8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaAppbmRleCAwNjJjM2EzLi40NWZjOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlLmgKQEAgLTE0OCw4ICsxNDgsMTcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBUeXBlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEQkdfUFJUKGwsIHAsIGFyZ3MuLi4pIHsgaWYgKGwgPD0gbXNnbGV2ZWwpIHByaW50ayhwLCAjI2FyZ3MpOyB9Ci0jZGVmaW5lIFBSSU5UX0socCwgYXJncy4uLikgeyBpZiAoUFJJVkFURV9NZXNzYWdlKSBwcmludGsocCwgIyNhcmdzKTsgfQorI2RlZmluZSBEQkdfUFJUKGwsIHAsIGFyZ3MuLi4pCQlcCitkbyB7CQkJCQlcCisJaWYgKGwgPD0gbXNnbGV2ZWwpCQlcCisJCXByaW50ayhwLCAjI2FyZ3MpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFBSSU5UX0socCwgYXJncy4uLikJCVwKK2RvIHsJCQkJCVwKKwlpZiAoUFJJVkFURV9NZXNzYWdlKQkJXAorCQlwcmludGsocCwgIyNhcmdzKTsJXAorfSB3aGlsZSAoMCkKIAogLy8wOjExQSAxOjExQiAyOjExRwogdHlwZWRlZiBlbnVtIF9WSUFfQkJfVFlQRQpAQCAtNzQxLDEyICs3NTAsNiBAQAogCWJvb2wgYldQQURFVlVwOwogCXN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotLyoKLSAgYm9vbCBid2V4dHN0ZXAwOwotICBib29sIGJ3ZXh0c3RlcDE7Ci0gIGJvb2wgYndleHRzdGVwMjsKLSAgYm9vbCBid2V4dHN0ZXAzOwotKi8KIAl1bnNpZ25lZCBpbnQJYndleHRjb3VudDsKIAlib29sIGJXUEFTdXBwV2V4dEVuYWJsZWQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYwppbmRleCBhOTUyZGYxLi4xZDM5MDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCkBAIC04OSw3ICs4OSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7CiBzdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID0gICBNU0dfTEVWRUxfSU5GTzsKIAogLy8KQEAgLTEwMCwxNCArOTksOCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJWSUEgTmV0d29ya2luZyBTb2xvbW9uLUEvQi9HIFdpcmVsZXNzIExBTiBBZGFwdGVyIERyaXZlciIpOwogCiBzdGF0aWMgaW50IG1sbWVfa2lsbDsKLS8vc3RhdGljICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBtbG1lX3Rhc2s7CiAKICNkZWZpbmUgREVWSUNFX1BBUkFNKE4sIEQpCi0vKgotICBzdGF0aWMgY29uc3QgaW50IE5bTUFYX1VJTlRTXT1PUFRJT05fREVGQVVMVDtcCi0gIE1PRFVMRV9QQVJNKE4sICIxLSIgX19NT0RVTEVfU1RSSU5HKE1BWF9VSU5UUykgImkiKTtcCi0gIE1PRFVMRV9QQVJNX0RFU0MoTiwgRCk7Ci0qLwogCiAjZGVmaW5lIFJYX0RFU0NfTUlOMCAgICAgMTYKICNkZWZpbmUgUlhfREVTQ19NQVgwICAgICAxMjgKQEAgLTM0NiwzOCArMzM5LDYgQEAKIAlkZXZpY2VfZnJlZV9pbmZvKHBEZXZpY2UpOwogfQogCi0vKgotICBzdGF0aWMgdm9pZAotICBkZXZpY2Vfc2V0X2ludF9vcHQoaW50ICpvcHQsIGludCB2YWwsIGludCBtaW4sIGludCBtYXgsIGludCBkZWYsY2hhciogbmFtZSxjaGFyKiBkZXZuYW1lKSB7Ci0gIGlmICh2YWw9PS0xKQotICAqb3B0PWRlZjsKLSAgZWxzZSBpZiAodmFsPG1pbiB8fCB2YWw+bWF4KSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fTk9USUNFICIlczogdGhlIHZhbHVlIG9mIHBhcmFtZXRlciAlcyBpcyBpbnZhbGlkLCB0aGUgdmFsaWQgcmFuZ2UgaXMgKCVkLSVkKVxuIiAsCi0gIGRldm5hbWUsbmFtZSwgbWluLG1heCk7Ci0gICpvcHQ9ZGVmOwotICB9IGVsc2UgewotICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIiVzOiBzZXQgdmFsdWUgb2YgcGFyYW1ldGVyICVzIHRvICVkXG4iLAotICBkZXZuYW1lLCBuYW1lLCB2YWwpOwotICAqb3B0PXZhbDsKLSAgfQotICB9Ci0KLSAgc3RhdGljIHZvaWQKLSAgZGV2aWNlX3NldF9ib29sX29wdCh1bnNpZ25lZCBpbnQgKm9wdCwgaW50IHZhbCxib29sIGRlZix1MzIgZmxhZywgY2hhciogbmFtZSxjaGFyKiBkZXZuYW1lKSB7Ci0gICgqb3B0KSY9KH5mbGFnKTsKLSAgaWYgKHZhbD09LTEpCi0gICpvcHR8PShkZWYgPyBmbGFnIDogMCk7Ci0gIGVsc2UgaWYgKHZhbDwwIHx8IHZhbD4xKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fTk9USUNFCi0gICIlczogdGhlIHZhbHVlIG9mIHBhcmFtZXRlciAlcyBpcyBpbnZhbGlkLCB0aGUgdmFsaWQgcmFuZ2UgaXMgKDAtMSlcbiIsZGV2bmFtZSxuYW1lKTsKLSAgKm9wdHw9KGRlZiA/IGZsYWcgOiAwKTsKLSAgfSBlbHNlIHsKLSAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9OT1RJQ0UgIiVzOiBzZXQgcGFyYW1ldGVyICVzIHRvICVzXG4iLAotICBkZXZuYW1lLG5hbWUgLCB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgKm9wdHw9KHZhbCA/IGZsYWcgOiAwKTsKLSAgfQotICB9Ci0qLwogc3RhdGljIHZvaWQgZGV2aWNlX2dldF9vcHRpb25zKFBTRGV2aWNlIHBEZXZpY2UsIGludCBpbmRleCwgY2hhciAqZGV2bmFtZSkKIHsKIAlQT1BUSU9OUyBwT3B0cyA9ICYocERldmljZS0+c09wdHMpOwpAQCAtMzk1LDcgKzM1Niw2IEBACiAKIAlwT3B0cy0+ZmxhZ3MgfD0gREVWSUNFX0ZMQUdTX1BSRUFNQkxFX1RZUEU7CiAJcE9wdHMtPmZsYWdzIHw9IERFVklDRV9GTEFHU19PUF9NT0RFOwotCS8vcE9wdHMtPmZsYWdzfD1ERVZJQ0VfRkxBR1NfUFNfTU9ERTsKIAlwT3B0cy0+c2hvcnRfcmV0cnkgPSBTSE9SVF9SRVRSWV9ERUY7CiAJcE9wdHMtPmxvbmdfcmV0cnkgPSBMT05HX1JFVFJZX0RFRjsKIAlwT3B0cy0+YmJwX3R5cGUgPSBCQlBfVFlQRV9ERUY7CkBAIC00MzEsNyArMzkxLDYgQEAKIAogLy9QTElDRV9ERUJVRy0+CiAJcERldmljZS0+YnlBdXRvRkJDdHJsID0gQVVUT19GQl8wOwotCS8vcERldmljZS0+YnlBdXRvRkJDdHJsID0gQVVUT19GQl8xOwogLy9QTElDRV9ERUJVRzwtCiAJcERldmljZS0+YlVwZGF0ZUJCVkdBID0gdHJ1ZTsKIAlwRGV2aWNlLT5ieUZPRVR1bmluZyA9IDA7CkBAIC01NDksMTIgKzUwOCwxMiBAQAogCQlpZiAoYnlWYWx1ZSA9PSAwKSAvLyBpZiBub3Qgc2V0IGRlZmF1bHQgaXMgQWxsCiAJCQlieVZhbHVlID0gKEVFUF9BTlRFTk5BX0FVWCB8IEVFUF9BTlRFTk5BX01BSU4pOwogCi0JCXBEZXZpY2UtPnVsRGl2ZXJzaXR5TlZhbHVlID0gMTAwKjI2MDsvLzEwMCpTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1MSk7Ci0JCXBEZXZpY2UtPnVsRGl2ZXJzaXR5TVZhbHVlID0gMTAwKjE2Oy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTIpOwotCQlwRGV2aWNlLT5ieVRNYXggPSAxOy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTMpOwotCQlwRGV2aWNlLT5ieVRNYXgyID0gNDsvL1NST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDU0KTsKLQkJcERldmljZS0+dWxTUTNUSCA9IDA7Ly8odW5zaWduZWQgbG9uZykgU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTUpOwotCQlwRGV2aWNlLT5ieVRNYXgzID0gNjQ7Ly9TUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1Nik7CisJCXBEZXZpY2UtPnVsRGl2ZXJzaXR5TlZhbHVlID0gMTAwKjI2MDsKKwkJcERldmljZS0+dWxEaXZlcnNpdHlNVmFsdWUgPSAxMDAqMTY7CisJCXBEZXZpY2UtPmJ5VE1heCA9IDE7CisJCXBEZXZpY2UtPmJ5VE1heDIgPSA0OworCQlwRGV2aWNlLT51bFNRM1RIID0gMDsKKwkJcERldmljZS0+YnlUTWF4MyA9IDY0OwogCiAJCWlmIChieVZhbHVlID09IChFRVBfQU5URU5OQV9BVVggfCBFRVBfQU5URU5OQV9NQUlOKSkgewogCQkJcERldmljZS0+YnlBbnRlbm5hQ291bnQgPSAyOwpAQCAtNTY4LDcgKzUyNyw3IEBACiAJCQkvLyBjaGVzdGVyIGZvciBhbnRlbm5hCiAJCQlieVZhbHVlMSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBFRVBfT0ZTX0FOVEVOTkEpOwogCQkJaWYgKChieVZhbHVlMSAmIDB4MDgpID09IDApCi0JCQkJcERldmljZS0+YkRpdmVyc2l0eUVuYWJsZSA9IGZhbHNlOy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTApOworCQkJCXBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgPSBmYWxzZTsKIAkJCWVsc2UKIAkJCQlwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gdHJ1ZTsKIAkJfSBlbHNlICB7CkBAIC01OTMsNyArNTUyLDYgQEAKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiYkRpdmVyc2l0eUVuYWJsZT1bJWRdLE5WYWx1ZT1bJWRdLE1WYWx1ZT1bJWRdLFRNYXg9WyVkXSxUTWF4Mj1bJWRdXG4iLAogCQkJcERldmljZS0+YkRpdmVyc2l0eUVuYWJsZSwgKGludClwRGV2aWNlLT51bERpdmVyc2l0eU5WYWx1ZSwgKGludClwRGV2aWNlLT51bERpdmVyc2l0eU1WYWx1ZSwgcERldmljZS0+YnlUTWF4LCBwRGV2aWNlLT5ieVRNYXgyKTsKIAotLy8jaWZkZWYgWm9uZVR5cGVfRGVmYXVsdFNldHRpbmcKIC8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgogLy96b25ldHlwZSBpbml0aWFsCiAJCXBEZXZpY2UtPmJ5T3JpZ2luYWxab25ldHlwZSA9IHBEZXZpY2UtPmFieUVFUFJPTVtFRVBfT0ZTX1pPTkVUWVBFXTsKQEAgLTYzNSw5ICs1OTMsOSBAQAogCQlwRGV2aWNlLT5ieVJGVHlwZSAmPSBSRl9NQVNLOwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5ieVJGVHlwZSA9ICV4XG4iLCBwRGV2aWNlLT5ieVJGVHlwZSk7CiAKLQkJaWYgKCFwRGV2aWNlLT5iWm9uZVJlZ0V4aXN0KSB7CisJCWlmICghcERldmljZS0+YlpvbmVSZWdFeGlzdCkKIAkJCXBEZXZpY2UtPmJ5Wm9uZVR5cGUgPSBwRGV2aWNlLT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV07Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5ieVpvbmVUeXBlID0gJXhcbiIsIHBEZXZpY2UtPmJ5Wm9uZVR5cGUpOwogCiAJCS8vSW5pdCBSRiBtb2R1bGUKQEAgLTY0NywyMSArNjA1LDE4IEBACiAJCXBEZXZpY2UtPmJ5Q3VyUHdyID0gMHhGRjsKIAkJcERldmljZS0+YnlDQ0tQd3IgPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgRUVQX09GU19QV1JfQ0NLKTsKIAkJcERldmljZS0+YnlPRkRNUHdyRyA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBFRVBfT0ZTX1BXUl9PRkRNRyk7Ci0JCS8vYnlDQ0tQd3JkQm0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgRUVQX09GU19DQ0tfUFdSX2RCbSk7Ci0KLQkJLy9ieU9GRE1Qd3JkQm0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgRUVQX09GU19PRkRNX1BXUl9kQm0pOwogCiAJCS8vIExvYWQgcG93ZXIgVGFibGUKIAogCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEc7IGlpKyspIHsKIAkJCXBEZXZpY2UtPmFieUNDS1B3clRibFtpaSArIDFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsICh1bnNpZ25lZCBjaGFyKShpaSArIEVFUF9PRlNfQ0NLX1BXUl9UQkwpKTsKLQkJCWlmIChwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbaWkgKyAxXSA9PSAwKSB7CisJCQlpZiAocERldmljZS0+YWJ5Q0NLUHdyVGJsW2lpICsgMV0gPT0gMCkKIAkJCQlwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbaWkrMV0gPSBwRGV2aWNlLT5ieUNDS1B3cjsKLQkJCX0KKwogCQkJcERldmljZS0+YWJ5T0ZETVB3clRibFtpaSArIDFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsICh1bnNpZ25lZCBjaGFyKShpaSArIEVFUF9PRlNfT0ZETV9QV1JfVEJMKSk7Ci0JCQlpZiAocERldmljZS0+YWJ5T0ZETVB3clRibFtpaSArIDFdID09IDApIHsKKwkJCWlmIChwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpICsgMV0gPT0gMCkKIAkJCQlwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpICsgMV0gPSBwRGV2aWNlLT5ieU9GRE1Qd3JHOwotCQkJfQorCiAJCQlwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpICsgMV0gPSBieUNDS1B3cmRCbTsKIAkJCXBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpICsgMV0gPSBieU9GRE1Qd3JkQm07CiAJCX0KQEAgLTcxNSwxNCArNjcwLDEyIEBACiAKIAkJcERldmljZS0+YnlDdXJyZW50Q2ggPSAwOwogCi0JCS8vcERldmljZS0+TmV0d29ya1R5cGUgPSBOZGlzODAyXzExQXV0b21vZGU7CiAJCS8vIFNldCBCQiBhbmQgcGFja2V0IHR5cGUgYXQgdGhlIHNhbWUgdGltZS4KIAkJLy8gU2V0IFNob3J0IFNsb3QgVGltZSwgeElGUywgYW5kIFJTUElORi4KLQkJaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA9PSBSQVRFX0FVVE8pIHsKKwkJaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA9PSBSQVRFX0FVVE8pCiAJCQlwRGV2aWNlLT53Q3VycmVudFJhdGUgPSBSQVRFXzU0TTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKLQkJfQogCiAJCS8vIGRlZmF1bHQgRyBNb2RlCiAJCVZOVFdJRkliQ29uZmlnUGh5TW9kZShwRGV2aWNlLT5wTWdtdCwgUEhZX1RZUEVfMTFHKTsKQEAgLTczOCwyMiArNjkxLDI1IEBACiAJCQlNQUN2R1BJT0luKHBEZXZpY2UtPlBvcnRPZmZzZXQsICZwRGV2aWNlLT5ieUdQSU8pOwogLy8yMDA4LTQtMTQgPGFkZD4gYnkgY2hlc3RlciBmb3IgbGVkIGlzc3VlCiAjaWZkZWYgRk9SX0xFRF9PTl9OT1RFQk9PSwotCQkJaWYgKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpIHsgcERldmljZS0+YkhXUmFkaW9PZmYgPSB0cnVlOyB9Ci0JCQlpZiAoIShwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSkgeyBwRGV2aWNlLT5iSFdSYWRpb09mZiA9IGZhbHNlOyB9CisJCQlpZiAocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkKKwkJCQlwRGV2aWNlLT5iSFdSYWRpb09mZiA9IHRydWU7CiAKKwkJCWlmICghKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpKQorCQkJCXBEZXZpY2UtPmJIV1JhZGlvT2ZmID0gZmFsc2U7CiAJCX0KLQkJaWYgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYpIHsKKworCQlpZiAocERldmljZS0+YlJhZGlvQ29udHJvbE9mZikKIAkJCUNBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKLQkJfSBlbHNlICBDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKKwkJZWxzZQorCQkJQ0FSRGJSYWRpb1Bvd2VyT24ocERldmljZSk7CiAjZWxzZQogCQlpZiAoKChwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSAmJiAhKHBEZXZpY2UtPmJ5UmFkaW9DdGwgJiBFRVBfUkFESU9DVExfSU5WKSkgfHwKIAkJICAgICghKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpICYmIChwRGV2aWNlLT5ieVJhZGlvQ3RsICYgRUVQX1JBRElPQ1RMX0lOVikpKSB7CiAJCQlwRGV2aWNlLT5iSFdSYWRpb09mZiA9IHRydWU7CiAJCX0KIAl9Ci0JaWYgKHBEZXZpY2UtPmJIV1JhZGlvT2ZmIHx8IHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYpIHsKKwlpZiAocERldmljZS0+YkhXUmFkaW9PZmYgfHwgcERldmljZS0+YlJhZGlvQ29udHJvbE9mZikKIAkJQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwotCX0KIAogI2VuZGlmCiB9CkBAIC03NjgsOSArNzI0LDggQEAKIC8vIHJlc2V0IFJ4IHBvaW50ZXIKIENBUkR2U2FmZVJlc2V0VHgocERldmljZSk7CiAKLWlmIChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkgeworaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKQogCU1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19SQ1IsIFJDUl9XUEFFUlIpOwotfQogCiBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAKQEAgLTgwNyw3ICs3NjIsNyBAQAogewogCXZpYXdnZXRfd3BhX2hlYWRlciAqd3BhaGRyOwogCWludCBpaSA9IDA7Ci0JLy8gd2FpdF9xdWV1ZV9oZWFkX3QJU2V0X3dhaXQ7CisKIAkvL3NlbmQgZGV2aWNlIGNsb3NlIHRvIHdwYV9zdXBwbGljbmF0IGxheWVyCiAJaWYgKHBEZXZpY2UtPmJXUEFERVZVcCkgewogCQl3cGFoZHIgPSAodmlhd2dldF93cGFfaGVhZGVyICopcERldmljZS0+c2tiLT5kYXRhOwpAQCAtODIzLDkgKzc3OCw2IEBACiAJCW5ldGlmX3J4KHBEZXZpY2UtPnNrYik7CiAJCXBEZXZpY2UtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwogCi0JCS8vd2FpdCByZWxlYXNlIFdQQURFVgotCQkvLyAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZTZXRfd2FpdCk7Ci0JCS8vICAgIHdhaXRfZXZlbnRfdGltZW91dChTZXRfd2FpdCwgKChwRGV2aWNlLT53cGFkZXY9PU5VTEwpJiYocERldmljZS0+c2tiID09IE5VTEwpKSw1KkhaKTsgICAgLy8xcyB3YWl0CiAJCXdoaWxlIChwRGV2aWNlLT5iV1BBREVWVXApIHsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCXNjaGVkdWxlX3RpbWVvdXQoSFogLyAyMCk7ICAgICAgICAgIC8vd2FpdCA1MG1zCkBAIC04NjksNyArODIxLDYgQEAKIAl9CiAKIAkvLyBDaGFpbiBpdCBhbGwgdG9nZXRoZXIKLQkvLyBTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGNpZC0+ZGV2KTsKIAogCWlmIChiRmlyc3QpIHsKQEAgLTkwMiw3ICs4NTMsNiBAQAogCiAjaWZkZWYJREVCVUcKIAotCS8vcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpZCwgUENJX0JBU0VfQUREUkVTU18wLCAmcERldmljZS0+YnlSZXZJZCk7CiAJcHJpbnRrKCJhZnRlciBnZXQgcGNpX2luZm8gbWVtYWRkciBpcyAleCwgaW8gYWRkciBpcyAleCxpb19zaXplIGlzICVkXG4iLCBwRGV2aWNlLT5tZW1hZGRyLCBwRGV2aWNlLT5pb2FkZHIsIHBEZXZpY2UtPmlvX3NpemUpOwogCXsKIAkJaW50IGk7CkBAIC05MTYsNyArODY2LDYgQEAKIAkJCVBDSV9CQVNFX0FERFJFU1NfNSwKIAkJCTB9OwogCQlmb3IgKGkgPSAwOyBhZGRyZXNzW2ldOyBpKyspIHsKLQkJCS8vcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lkLGFkZHJlc3NbaV0sIDB4RkZGRkZGRkYpOwogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaWQsIGFkZHJlc3NbaV0sICZiYXIpOwogCQkJcHJpbnRrKCJiYXIgJWQgaXMgJXhcbiIsIGksIGJhcik7CiAJCQlpZiAoIWJhcikgewpAQCAtOTQyLDExICs4OTEsNyBAQAogCiAjZW5kaWYKIAotI2lmZGVmCURFQlVHCi0JLy9yZXR1cm4gIDA7Ci0jZW5kaWYKIAlwRGV2aWNlLT5Qb3J0T2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChwRGV2aWNlLT5tZW1hZGRyICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSywgcERldmljZS0+aW9fc2l6ZSk7Ci0JLy9wRGV2aWNlLT5Qb3J0T2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChwRGV2aWNlLT5pb2FkZHIgJiBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0ssIHBEZXZpY2UtPmlvX3NpemUpOwogCiAJaWYgKHBEZXZpY2UtPlBvcnRPZmZzZXQgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogRmFpbGVkIHRvIElPIHJlbWFwcGluZyAuLlxuIik7CkBAIC05NjcsNyArOTEyLDYgQEAKIAogCVZOU3ZJblBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQrMHg0RiwgJnZhbHVlKTsKIAlwcmludGsoIkJlZm9yZSB3cml0ZTogdmFsdWUgaXMgJXhcbiIsIHZhbHVlKTsKLQkvL1ZOU3ZJblBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQrMHgzRiwgMHgwMCk7CiAJVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHZhbHVlKTsKIAlWTlN2SW5Qb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0KzB4NEYsICZ2YWx1ZSk7CiAJcHJpbnRrKCJBZnRlciB3cml0ZTogdmFsdWUgaXMgJXhcbiIsIHZhbHVlKTsKQEAgLTEwNzUsMTEgKzEwMTksNiBAQAogCXBEZXZpY2UtPm1lbWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZCwgMCk7CiAJcERldmljZS0+aW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWQsIDEpOwogCi0jaWZkZWYJREVCVUcKLS8vCXBEZXZpY2UtPmlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkLCAwKTsKLS8vCXBEZXZpY2UtPm1lbWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZCwxKTsKLSNlbmRpZgotCiAJY2lzX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZCwgMik7CiAKIAlwRGV2aWNlLT5wY2lkID0gcGNpZDsKQEAgLTEwODgsMTMgKzEwMjcsNiBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lkLCBQQ0lfQ09NTUFORCwgKGJ8UENJX0NPTU1BTkRfTUFTVEVSKSk7CiAKICNpZmRlZglQTElDRV9ERUJVRwotCS8vcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZCxQQ0lfTUFYX0xBVCwmbWF4X2xhdCk7Ci0JLy9mb3IgKGlpPTA7aWk8MHhGRjtpaSsrKQotCS8vcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZCxQQ0lfTUFYX0xBVCwmbWF4X2xhdCk7Ci0JLy9tYXhfbGF0ICA9IDB4MjA7Ci0JLy9wY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpZCxQQ0lfTUFYX0xBVCxtYXhfbGF0KTsKLQkvL3BjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWQsUENJX01BWF9MQVQsJm1heF9sYXQpOwotCiAJZm9yIChpaSA9IDA7IGlpIDwgMHhGRjsgaWkrKykgewogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lkLCBpaSwgJnZhbHVlKTsKIAkJcGNpX2NvbmZpZ1tpaV0gPSB2YWx1ZTsKQEAgLTE0NjgsNyArMTQwMCw2IEBACiAJZm9yIChwUkQgPSBwRGV2aWNlLT5wQ3VyclJEW3VJZHhdOwogCSAgICAgcFJELT5tX3JkMFJEMC5mMU93bmVyID09IE9XTkVEX0JZX0hPU1Q7CiAJICAgICBwUkQgPSBwUkQtPm5leHQpIHsKLS8vICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5wQ3VyclJEID0gJXgsIHdvcmtzID0gJWRcbiIsIHBSRCwgd29ya3MpOwogCQlpZiAod29ya3MrKyA+IDE1KQogCQkJYnJlYWs7CiAJCWlmIChkZXZpY2VfcmVjZWl2ZV9mcmFtZShwRGV2aWNlLCBwUkQpKSB7CkBAIC0xNTY0LDkgKzE0OTUsOSBAQAogCQkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFR4WyVkXSBPSyBidXQgaGFzIGVycm9yLiB0c3IxWyUwMlhdIHRzcjBbJTAyWF0uXG4iLAogCQkJCQkJCShpbnQpdUlkeCwgYnlUc3IxLCBieVRzcjApOwogCQkJCQl9Ci0JCQkJCWlmICgocFR4QnVmSGVhZC0+d0ZyYWdDdGwgJiBGUkFHQ1RMX0VOREZSQUcpICE9IEZSQUdDVExfTk9ORlJBRykgeworCQkJCQlpZiAoKHBUeEJ1ZkhlYWQtPndGcmFnQ3RsICYgRlJBR0NUTF9FTkRGUkFHKSAhPSBGUkFHQ1RMX05PTkZSQUcpCiAJCQkJCQlwRGV2aWNlLT5zODAyXzExQ291bnRlci5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQrKzsKLQkJCQkJfQorCiAJCQkJCXBTdGF0cy0+dHhfcGFja2V0cysrOwogCQkJCQlwU3RhdHMtPnR4X2J5dGVzICs9IHBURC0+cFRESW5mby0+c2tiLT5sZW47CiAJCQkJfSBlbHNlIHsKQEAgLTE1ODQsNyArMTUxNSw2IEBACiAJCQkJCXNrYi0+ZGV2ID0gcERldmljZS0+YXBkZXY7CiAJCQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCQkJCQkvL3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CiAJCQkJCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwogCQkJCQluZXRpZl9yeChza2IpOwogCQkJCX0KQEAgLTE1OTYsOCArMTUyNiw2IEBACiAJCQkJCQkoaW50KXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKIAkJCQl9CiAKLS8vICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBUeFslZF0gZmFpbCBoYXMgZXJyb3IuIHRzcjFbJTAyWF0gdHNyMFslMDJYXS5cbiIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CiAKIAkJCQlpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYKIAkJCQkgICAgKHBURC0+cFRESW5mby0+YnlGbGFncyAmIFREX0ZMQUdTX05FVElGX1NLQikpIHsKQEAgLTE2MzMsOSArMTU2MSw5IEBACiAJCQliRnVsbCA9IHRydWU7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgQUMwRE1BIGlzIEZ1bGwgPSAlZFxuIiwgcERldmljZS0+aVREVXNlZFt1SWR4XSk7CiAJCX0KLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSAmJiAhYkZ1bGwpIHsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSAmJiAhYkZ1bGwpCiAJCQluZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7Ci0JCX0KKwogCX0KIAogCXBEZXZpY2UtPmFwVGFpbFREW3VJZHhdID0gcFREOwpAQCAtMTY4OSwzMyArMTYxNywyMiBAQAogewogCVBTRGV2aWNlCXBEZXZpY2UgPSAgKFBTRGV2aWNlKSBDb250ZXh0OwogCVBTUnhNZ210UGFja2V0CQkJcFJ4TWdtdFBhY2tldDsKLQkvLyBpbnQgaTsKLQkvL2NvbXBsZXRlKCZwRGV2aWNlLT5ub3RpZnkpOwogCi0JLy9pID0gMDsKLSNpZiAxCiAJd2hpbGUgKDEpIHsKLQkJLy9kb3duKCZwRGV2aWNlLT5tbG1lX3NlbWFwaG9yZSk7Ci0JCS8vIHBSeE1nbXRQYWNrZXQgPSAgRGVRdWV1ZShwRGV2aWNlKTsKLSNpZiAxCiAJCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQl3aGlsZSAocERldmljZS0+cnhNYW5lUXVldWUucGFja2V0X251bSAhPSAwKSB7CiAJCQlwUnhNZ210UGFja2V0ID0gRGVRdWV1ZShwRGV2aWNlKTsKLQkJCS8vcERldmljZTsKLQkJCS8vRGVxdWV1ZU1hbmFnZU9iamVjdChwRGV2aWNlLT5GaXJzdFJlY3ZNbmdMaXN0LCBwRGV2aWNlLT5MYXN0UmVjdk1uZ0xpc3QpOwogCQkJdk1nclJ4TWFuYWdlUGFja2V0KHBEZXZpY2UsIHBEZXZpY2UtPnBNZ210LCBwUnhNZ210UGFja2V0KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQlpZiAobWxtZV9raWxsID09IDApCiAJCQlicmVhazsKLQkJLy91ZGVsYXkoMjAwKTsKLSNlbmRpZgorCiAJCXNjaGVkdWxlKCk7CiAJCWlmIChtbG1lX2tpbGwgPT0gMCkKIAkJCWJyZWFrOwogCX0KIAotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MjcsOSArMTY0NCw5IEBACiAjZW5kaWYKIAogCXBEZXZpY2UtPnJ4X2J1Zl9zeiA9IFBLVF9CVUZfU1o7Ci0JaWYgKCFkZXZpY2VfaW5pdF9yaW5ncyhwRGV2aWNlKSkgeworCWlmICghZGV2aWNlX2luaXRfcmluZ3MocERldmljZSkpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKwogLy8yMDA4LTUtMTMgPGFkZD4gYnkgY2hlc3RlcgogCWkgPSByZXF1ZXN0X2lycShwRGV2aWNlLT5wY2lkLT5pcnEsICZkZXZpY2VfaW50ciwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoaSkKQEAgLTE3NDksMTEgKzE2NjYsMTAgQEAKIAlkZXZpY2VfaW5pdF9kZWZyYWdfY2IocERldmljZSk7CiAJZGV2aWNlX2luaXRfdGQwX3JpbmcocERldmljZSk7CiAJZGV2aWNlX2luaXRfdGQxX3JpbmcocERldmljZSk7Ci0vLyAgICBWTlRXSUZJdlNldDExaChwRGV2aWNlLT5wTWdtdCwgcERldmljZS0+YjExaEVuYWJsZSk7CiAKLQlpZiAocERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OKSB7CisJaWYgKHBEZXZpY2UtPmJEaXZlcnNpdHlSZWdDdGxPTikKIAkJZGV2aWNlX2luaXRfZGl2ZXJzaXR5X3RpbWVyKHBEZXZpY2UpOwotCX0KKwogCXZNZ3JPYmplY3RJbml0KHBEZXZpY2UpOwogCXZNZ3JUaW1lckluaXQocERldmljZSk7CiAKQEAgLTE3NzMsOCArMTY4OSw2IEBACiAJbWxtZV9raWxsID0gMTsKICNlbmRpZgogCi0JLy93YWl0X2Zvcl9jb21wbGV0aW9uKCZwRGV2aWNlLT5ub3RpZnkpOwotCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiY2FsbCBkZXZpY2VfaW5pdF9yZWdpc3RlcnNcbiIpOwogCWRldmljZV9pbml0X3JlZ2lzdGVycyhwRGV2aWNlLCBERVZJQ0VfSU5JVF9DT0xEKTsKIAlNQUN2UmVhZEV0aGVyQWRkcmVzcyhwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkcik7CkBAIC0xNzg2LDEyICsxNzAwLDYgQEAKIAlhZGRfdGltZXIoJihwRGV2aWNlLT5wTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spKTsKIAogI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKLQkvKgotCSAgcERldmljZS0+YndleHRzdGVwMCA9IGZhbHNlOwotCSAgcERldmljZS0+YndleHRzdGVwMSA9IGZhbHNlOwotCSAgcERldmljZS0+YndleHRzdGVwMiA9IGZhbHNlOwotCSAgcERldmljZS0+YndleHRzdGVwMyA9IGZhbHNlOwotCSovCiAJcERldmljZS0+YndleHRjb3VudCA9IDA7CiAJcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCkBAIC0xODczLDkgKzE3ODEsNyBAQAogCXBEZXZpY2UtPmZsYWdzICY9ICh+REVWSUNFX0ZMQUdTX09QRU5FRCk7CiAJLy8yMDA4LTA3MTQtMDE8QWRkPmJ5IGNoZXN0ZXIKIAlkZXZpY2VfcmVsZWFzZV9XUEFERVYocERldmljZSk7Ci0vL1BMSUNFX0RFQlVHLT4KLQkvL3Rhc2tsZXRfa2lsbCgmcERldmljZS0+UnhNbmdXb3JrSXRlbSk7Ci0vL1BMSUNFX0RFQlVHPC0KKwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9jbG9zZS4uIFxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTIyLDcgKzE4MjgsNiBAQAogCXVuc2lnbmVkIGludCBjYkhlYWRlclNpemU7CiAJdW5zaWduZWQgaW50IGlpOwogCVNLZXlJdGVtICAgICAgICBTVGVtcEtleTsKLS8vICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJbmRleCA9IDA7CiAKIAlpZiAocERldmljZS0+YlN0b3BUeDBQa3QpIHsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKQEAgLTE5NTEsOSArMTg1Niw5IEBACiAJY2JGcmFtZUJvZHlTaXplID0gc2tiLT5sZW4gLSBFVEhfSExFTjsKIAogCS8vIDgwMi4xSAotCWlmIChudG9ocyhwRGV2aWNlLT5zVHhFdGhIZWFkZXIud1R5cGUpID4gRVRIX0RBVEFfTEVOKSB7CisJaWYgKG50b2hzKHBEZXZpY2UtPnNUeEV0aEhlYWRlci53VHlwZSkgPiBFVEhfREFUQV9MRU4pCiAJCWNiRnJhbWVCb2R5U2l6ZSArPSA4OwotCX0KKwogCXVNQUNmcmFnTnVtID0gY2JHZXRGcmFnQ291bnQocERldmljZSwgcFRyYW5zbWl0S2V5LCBjYkZyYW1lQm9keVNpemUsICZwRGV2aWNlLT5zVHhFdGhIZWFkZXIpOwogCiAJaWYgKHVNQUNmcmFnTnVtID4gQVZBSUxfVEQocERldmljZSwgVFlQRV9UWERNQTApKSB7CkBAIC0xOTY0LDExICsxODY5LDEwIEBACiAKIAlpZiAocERldmljZS0+YkZpeFJhdGUpIHsKIAkJaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKLQkJCWlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV8xMU0pIHsKKwkJCWlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV8xMU0pCiAJCQkJcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV8xMU07Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCXBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7Ci0JCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID49IFJBVEVfNTRNKQogCQkJCXBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfNTRNOwpAQCAtMTk4MCwxMSArMTg4NCwxMCBAQAogCX0KIAogCS8vcHJlYW1ibGUgdHlwZQotCWlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFByZWFtYmxlKSB7CisJaWYgKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlNob3J0UHJlYW1ibGUpCiAJCXBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID0gcERldmljZS0+YnlTaG9ydFByZWFtYmxlOwotCX0gZWxzZSB7CisJZWxzZQogCQlwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSA9IFBSRUFNQkxFX0xPTkc7Ci0JfQogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZG1hMDogcERldmljZS0+d0N1cnJlbnRSYXRlID0gJWQgXG4iLCBwRGV2aWNlLT53Q3VycmVudFJhdGUpOwogCkBAIC0xOTkzLDExICsxODk2LDEwIEBACiAJfSBlbHNlIGlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7CiAJCWJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFBOwogCX0gZWxzZSB7Ci0JCWlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUpIHsKKwkJaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSkKIAkJCWJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFHQjsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJYnlQa3RUeXBlID0gUEtfVFlQRV8xMUdBOwotCQl9CiAJfQogCiAJaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKQpAQCAtMjExOSwxMiArMjAyMSwxMSBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAKLQkJCQlpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSkgeworCQkJCWlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFByZWFtYmxlKQogCQkJCQlwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSA9IHBEZXZpY2UtPmJ5U2hvcnRQcmVhbWJsZTsKLQotCQkJCX0gZWxzZSB7CisJCQkJZWxzZQogCQkJCQlwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSA9IFBSRUFNQkxFX0xPTkc7Ci0JCQkJfQorCiAJCQkJYk5vZGVFeGlzdCA9IHRydWU7CiAKIAkJCX0KQEAgLTIxNDUsOSArMjA0Niw4IEBACiAJbWVtY3B5KHBEZXZpY2UtPnNUeEV0aEhlYWRlci5hYnlEc3RBZGRyLCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEpLCBFVEhfSExFTik7CiAJY2JGcmFtZUJvZHlTaXplID0gc2tiLT5sZW4gLSBFVEhfSExFTjsKIAkvLyA4MDIuMUgKLQlpZiAobnRvaHMocERldmljZS0+c1R4RXRoSGVhZGVyLndUeXBlKSA+IEVUSF9EQVRBX0xFTikgeworCWlmIChudG9ocyhwRGV2aWNlLT5zVHhFdGhIZWFkZXIud1R5cGUpID4gRVRIX0RBVEFfTEVOKQogCQljYkZyYW1lQm9keVNpemUgKz0gODsKLQl9CiAKIAlpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUpIHsKIAkJYk5lZWRFbmNyeXB0aW9uID0gdHJ1ZTsKQEAgLTIxODMsOSArMjA4Myw5IEBACiAJCQlwYnlCU1NJRCA9IHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHI7CiAJCQlpZiAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IGZhbHNlKSB7CiAJCQkJcFRyYW5zbWl0S2V5ID0gTlVMTDsKLQkJCQlpZiAocERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKKwkJCQlpZiAocERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpCiAJCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHICJJQlNTIGFuZCBLRVkgaXMgTlVMTC4gWyVkXVxuIiwgcERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSk7Ci0JCQkJfSBlbHNlCisJCQkJZWxzZQogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyAiTk9UIElCU1MgYW5kIEtFWSBpcyBOVUxMLiBbJWRdXG4iLCBwRGV2aWNlLT5wTWdtdC0+ZUN1cnJNb2RlKTsKIAkJCX0gZWxzZSB7CiAJCQkJYlRLSVBfVXNlR1RLID0gdHJ1ZTsKQEAgLTIyMzQsMTEgKzIxMzQsMTAgQEAKICNlbmRpZgogCiAJCWlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFCKSB7Ci0JCQlpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID49IFJBVEVfMTFNKSB7CisJCQlpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID49IFJBVEVfMTFNKQogCQkJCXBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfMTFNOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAodW5zaWduZWQgc2hvcnQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOwotCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSAmJgogCQkJICAgIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPD0gUkFURV82TSkpIHsKQEAgLTIyNzksMjQgKzIxNzgsMTggQEAKIAkJfQogCX0KIAotLy8gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiYWNkbWEwOiBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAlZCBcbiIsIHBEZXZpY2UtPndDdXJyZW50UmF0ZSk7CiAKIAlpZiAocERldmljZS0+d0N1cnJlbnRSYXRlIDw9IFJBVEVfMTFNKSB7CiAJCWJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFCOwogCX0gZWxzZSBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgewogCQlieVBrdFR5cGUgPSBQS19UWVBFXzExQTsKIAl9IGVsc2UgewotCQlpZiAocERldmljZS0+YlByb3RlY3RNb2RlKSB7CisJCWlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUpCiAJCQlieVBrdFR5cGUgPSBQS19UWVBFXzExR0I7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFHQTsKLQkJfQogCX0KIAotLy8jaWZkZWYJUExJQ0VfREVCVUcKLS8vCXByaW50aygiRklYIFJBVEU6Q3VycmVudFJhdGUgaXMgJWQiKTsKLS8vI2VuZGlmCi0KIAlpZiAoYk5lZWRFbmNyeXB0aW9uKSB7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIm50b2hzIFBrdCBUeXBlPSUwNHhcbiIsIG50b2hzKHBEZXZpY2UtPnNUeEV0aEhlYWRlci53VHlwZSkpOwogCQlpZiAoKHBEZXZpY2UtPnNUeEV0aEhlYWRlci53VHlwZSkgPT0gVFlQRV9QS1RfODAyXzF4KSB7CkBAIC0yMzY5LDE3ICsyMjYyLDEzIEBACiAjaWZkZWYgVHhJblNsZWVwCiAJcERldmljZS0+blR4RGF0YVRpbWVDb3V0ID0gMDsgLy8yMDA4LTgtMjEgY2hlc3RlciA8YWRkPiBmb3Igc2VuZCBudWxsIHBhY2tldAogI2VuZGlmCi0JaWYgKEFWQUlMX1REKHBEZXZpY2UsIFRZUEVfQUMwRE1BKSA8PSAxKSB7CisJaWYgKEFWQUlMX1REKHBEZXZpY2UsIFRZUEVfQUMwRE1BKSA8PSAxKQogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JfQogCiAJcERldmljZS0+YXBDdXJyVERbVFlQRV9BQzBETUFdID0gcEhlYWRURDsKLS8vI2lmZGVmCVBMSUNFX0RFQlVHCi0JaWYgKHBEZXZpY2UtPmJGaXhSYXRlKSB7CisKKwlpZiAocERldmljZS0+YkZpeFJhdGUpCiAJCXByaW50aygiRml4UmF0ZTpSYXRlIGlzICVkLFR4UG93ZXIgaXMgJWRcbiIsIHBEZXZpY2UtPndDdXJyZW50UmF0ZSwgcERldmljZS0+YnlDdXJQd3IpOwotCX0gZWxzZSB7Ci0JfQotLy8jZW5kaWYKIAogCXsKIAkJdW5zaWduZWQgY2hhciBQcm90b2NvbF9WZXJzaW9uOyAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgpAQCAtMjQxMSw3ICsyMzAwLDYgQEAKIAl9CiAKIAlNQUN2VHJhbnNtaXRBQzAocERldmljZS0+UG9ydE9mZnNldCk7Ci0vLyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJhY2RtYTA6cERldmljZS0+YXBDdXJyVEQ9ICVwXG4iLCBwSGVhZFREKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0yNDMwLDcgKzIzMTgsNiBAQAogCWludCAgICAgICAgICAgICBoYW5kbGVkID0gMDsKIAl1bnNpZ25lZCBjaGFyIGJ5RGF0YSA9IDA7CiAJaW50ICAgICAgICAgICAgIGlpID0gMDsKLS8vICAgIHVuc2lnbmVkIGNoYXIgYnlSU1NJOwogCiAJTUFDdlJlYWRJU1IocERldmljZS0+UG9ydE9mZnNldCwgJnBEZXZpY2UtPmR3SXNyKTsKIApAQCAtMjQ0MSwxNyArMjMyOCw2IEBACiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImR3SXNyID0gMHhmZmZmXG4iKTsKIAkJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiAJfQotCS8qCi0JLy8gMjAwOC0wNS0yMSA8bWFyaz4gYnkgUmljaGFyZHRhaSwgd2UgY2FuJ3QgcmVhZCBSU1NJIGhlcmUsIGJlY2F1c2Ugbm8gcGFja2V0IGJvdW5kIHdpdGggUlNTSQotCi0JaWYgKChwRGV2aWNlLT5kd0lzciAmIElTUl9SWERNQTApICYmCi0JKHBEZXZpY2UtPmJ5TG9jYWxJRCAhPSBSRVZfSURfVlQzMjUzX0IwKSAmJgotCShwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPT0gdHJ1ZSkpIHsKLQkvLyB1cGRhdGUgUlNTSQotCS8vQkJiUmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4M0UsICZieVJTU0kpOwotCS8vcERldmljZS0+dUN1cnJSU1NJID0gYnlSU1NJOwotCX0KLQkqLwogCiAJaGFuZGxlZCA9IDE7CiAJTUFDdkludERpc2FibGUocERldmljZS0+UG9ydE9mZnNldCk7CkBAIC0yNDU5LDkgKzIzMzUsOSBAQAogCiAJLy9NYWtlIHN1cmUgY3VycmVudCBwYWdlIGlzIDAKIAlWTlN2SW5Qb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19QQUdFMVNFTCwgJmJ5T3JnUGFnZVNlbCk7Ci0JaWYgKGJ5T3JnUGFnZVNlbCA9PSAxKSB7CisJaWYgKGJ5T3JnUGFnZVNlbCA9PSAxKQogCQlNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7Ci0JfSBlbHNlCisJZWxzZQogCQlieU9yZ1BhZ2VTZWwgPSAwOwogCiAJTUFDdlJlYWRNSUJDb3VudGVyKHBEZXZpY2UtPlBvcnRPZmZzZXQsICZkd01JQkNvdW50ZXIpOwpAQCAtMjQ5Miw3ICsyMzY4LDYgQEAKIAkJCQlWTlN2SW5Qb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19NQVI0LCAmKHBEZXZpY2UtPmR3T3JnTUFSNCkpOwogCQkJCU1BQ3ZTZWxlY3RQYWdlMChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKIAkJCQkvL3h4eHgKLQkJCQkvLyBXQ01EYkZsdXNoQ29tbWFuZFF1ZXVlKHBEZXZpY2UtPnBNZ210LCB0cnVlKTsKIAkJCQlpZiAoc2V0X2NoYW5uZWwocERldmljZSwgcERldmljZS0+cEN1cnJNZWFzdXJlRUlELT5zUmVxLmJ5Q2hhbm5lbCkpIHsKIAkJCQkJcERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID0gdHJ1ZTsKIAkJCQkJTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtMjUwMCwxMiArMjM3NSwxMSBAQAogCQkJCQlNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAJCQkJCXBEZXZpY2UtPmJ5QmFzaWNNYXAgPSAwOwogCQkJCQlwRGV2aWNlLT5ieUNDQUZyYWN0aW9uID0gMDsKLQkJCQkJZm9yIChpaSA9IDA7IGlpIDwgODsgaWkrKykgeworCQkJCQlmb3IgKGlpID0gMDsgaWkgPCA4OyBpaSsrKQogCQkJCQkJcERldmljZS0+ZHdSUElzW2lpXSA9IDA7Ci0JCQkJCX0KKwogCQkJCX0gZWxzZSB7CiAJCQkJCS8vIGNhbiBub3QgbWVhc3VyZSBiZWNhdXNlIHNldCBjaGFubmVsIGZhaWwKLQkJCQkJLy8gV0NNRGJSZXNldENvbW1hbmRRdWV1ZShwRGV2aWNlLT5wTWdtdCk7CiAJCQkJCS8vIGNsZWFyIG1lYXN1cmUgY29udHJvbAogCQkJCQlNQUN2UmVnQml0c09mZihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01TUkNUTCwgTVNSQ1RMX0VOKTsKIAkJCQkJc192Q29tcGxldGVDdXJyZW50TWVhc3VyZShwRGV2aWNlLCBNRUFTVVJFX01PREVfSU5DQVBBQkxFKTsKQEAgLTI1MjksNyArMjQwMyw2IEBACiAJCQkJTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIE1TUkNUTF9FTik7CiAJCQkJTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogCQkJCXNldF9jaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPmJ5T3JnQ2hhbm5lbCk7Ci0JCQkJLy8gV0NNRGJSZXNldENvbW1hbmRRdWV1ZShwRGV2aWNlLT5wTWdtdCk7CiAJCQkJTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogCQkJCU1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwrMSwgTVNSQ1RMMV9UWFBBVVNFKTsKIAkJCQlNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CkBAIC0yNTcyLDkgKzI0NDUsNyBAQAogCiAJCQkJfQogCQkJfQotCQkJaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgewotCQkJCS8vcERldmljZS0+YkJlYWNvblNlbnQgPSBmYWxzZTsKLQkJCX0gZWxzZSB7CisJCQlpZiAocERldmljZS0+ZU9QTW9kZSAhPSBPUF9NT0RFX0FESE9DKSB7CiAJCQkJaWYgKChwRGV2aWNlLT5iVXBkYXRlQkJWR0EpICYmIHBEZXZpY2UtPmJMaW5rUGFzcyAmJiAocERldmljZS0+dUN1cnJSU1NJICE9IDApKSB7CiAJCQkJCWxvbmcgICAgICAgICAgICBsZEJtOwogCkBAIC0yNjA1LDkgKzI0NzYsOCBAQAogCQkJfQogCiAJCQlwRGV2aWNlLT5iQmVhY29uU2VudCA9IGZhbHNlOwotCQkJaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUpIHsKKwkJCWlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKQogCQkJCVBTYklzTmV4dFRCVFRXYWtlVXAoKHZvaWQgKilwRGV2aWNlKTsKLQkJCX0KIAogCQkJaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApIHx8CiAJCQkgICAgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykpIHsKQEAgLTI2MTUsOSArMjQ4NSw3IEBACiAJCQkJCQkJICAocE1nbXQtPndJQlNTQmVhY29uUGVyaW9kIC0gTUFLRV9CRUFDT05fUkVTRVJWRUQpIDw8IDEwKTsKIAkJCX0KIAotCQkJaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQyAmJiBwRGV2aWNlLT5wTWdtdC0+d0N1cnJBVElNV2luZG93ID4gMCkgewotCQkJCS8vIHRvZG8gYWRob2MgUFMgbW9kZQotCQkJfQorCQkJLyogVE9ETzogYWRob2MgUFMgbW9kZSAqLwogCiAJCX0KIApAQCAtMjY1MSwyNyArMjUxOSwyNCBAQAogCQkJCQlNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAJCQkJCU1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwrMSwgTVNSQ1RMMV9UWFBBVVNFKTsKIAkJCQkJTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotCQkJCQkvL1ZOVFdJRkliU2VuZEJlYWNvbihwRGV2aWNlLT5wTWdtdCk7CiAJCQkJCUNBUkRiU3RhcnRUeFBhY2tldChwRGV2aWNlLCBQS1RfVFlQRV84MDJfMTFfQUxMKTsKIAkJCQl9CiAJCQl9CiAKIAkJfQogCi0JCWlmIChwRGV2aWNlLT5kd0lzciAmIElTUl9SWERNQTApIHsKKwkJaWYgKHBEZXZpY2UtPmR3SXNyICYgSVNSX1JYRE1BMCkKIAkJCW1heF9jb3VudCArPSBkZXZpY2Vfcnhfc3J2KHBEZXZpY2UsIFRZUEVfUlhETUEwKTsKLQkJfQotCQlpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfUlhETUExKSB7CisKKwkJaWYgKHBEZXZpY2UtPmR3SXNyICYgSVNSX1JYRE1BMSkKIAkJCW1heF9jb3VudCArPSBkZXZpY2Vfcnhfc3J2KHBEZXZpY2UsIFRZUEVfUlhETUExKTsKLQkJfQotCQlpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfVFhETUEwKSB7CisKKwkJaWYgKHBEZXZpY2UtPmR3SXNyICYgSVNSX1RYRE1BMCkKIAkJCW1heF9jb3VudCArPSBkZXZpY2VfdHhfc3J2KHBEZXZpY2UsIFRZUEVfVFhETUEwKTsKLQkJfQotCQlpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfQUMwRE1BKSB7CisKKwkJaWYgKHBEZXZpY2UtPmR3SXNyICYgSVNSX0FDMERNQSkKIAkJCW1heF9jb3VudCArPSBkZXZpY2VfdHhfc3J2KHBEZXZpY2UsIFRZUEVfQUMwRE1BKTsKLQkJfQotCQlpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfU09GVFRJTUVSKSB7Ci0JCX0KKwogCQlpZiAocERldmljZS0+ZHdJc3IgJiBJU1JfU09GVFRJTUVSMSkgewogCQkJaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkgewogCQkJCWlmIChwRGV2aWNlLT5iU2hvcnRTbG90VGltZSkKQEAgLTI2OTIsOSArMjU1Nyw4IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoYnlPcmdQYWdlU2VsID09IDEpIHsKKwlpZiAoYnlPcmdQYWdlU2VsID09IDEpCiAJCU1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLQl9CiAKIAlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCU1BQ3ZJbnRFbmFibGUocERldmljZS0+UG9ydE9mZnNldCwgSU1SX01BU0tfVkFMVUUpOwpAQCAtMzA5OSwxNiArMjk2Myw2IEBACiAJY2FzZSBTSU9DR0lXUFJJVjoKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdQUklWIFxuIik7CiAJCXJjID0gLUVPUE5PVFNVUFA7Ci0vKgotICBpZiAod3JxLT51LmRhdGEucG9pbnRlcikgewotICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoaXdjdGxfcHJpdmF0ZV9hcmdzKSAvIHNpemVvZihpd2N0bF9wcml2YXRlX2FyZ3NbMF0pOwotCi0gIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKLSAgKHVfY2hhciAqKSBpd2N0bF9wcml2YXRlX2FyZ3MsCi0gIHNpemVvZihpd2N0bF9wcml2YXRlX2FyZ3MpKSkKLSAgcmMgPSAtRUZBVUxUOwotICB9Ci0qLwogCQlicmVhazsKIAogLy8yMDA4LTA0MDktMDcsIDxBZGQ+IGJ5IEVpbnNuIExpdQpAQCAtMzE5NSw5ICszMDQ5LDkgQEAKIAkJCQlyYyA9IDA7CiAJCQl9CiAKLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmKHBNZ210LT51Q21kQnVzeSkpKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJihwTWdtdC0+dUNtZEJ1c3kpKSkKIAkJCXJldHVybiAtRUJVU1k7Ci0JCX0KKwogCQlyYyA9IHByaXZhdGVfaW9jdGwocERldmljZSwgcnEpOwogCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmKHBNZ210LT51Q21kQnVzeSkpOwogCQlicmVhazsKQEAgLTMyOTAsOCArMzE0NCw2IEBACiB7CiAJaW50IHJldDsKIAotLy8gICAgcmV0PXBjaV9tb2R1bGVfaW5pdCgmZGV2aWNlX2RyaXZlcik7Ci0JLy9yZXQgPSBwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlcigmZGV2aWNlX2RyaXZlcik7CiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGV2aWNlX2RyaXZlcik7CiAjaWZkZWYgQ09ORklHX1BNCiAJaWYgKHJldCA+PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmMKaW5kZXggNzcxYmYzNS4uN2RkYWYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5jCkBAIC02MCw3ICs2MCw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7CiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87CiAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWNieVJ4UmF0ZVtNQVhfUkFURV0gPQpAQCAtMTgyLDExICsxODEsMTEgQEAKIAkJCWNiSGVhZGVyU2l6ZSAtPSA4OwogCQkJcHdUeXBlID0gKHVuc2lnbmVkIHNob3J0ICopKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CiAJCQlpZiAoYklzV0VQKSB7Ci0JCQkJaWYgKGJFeHRJVikgeworCQkJCWlmIChiRXh0SVYpCiAJCQkJCSpwd1R5cGUgPSBodG9ucyhjYlBhY2tldFNpemUgLSBXTEFOX0hEUl9BRERSM19MRU4gLSA4KTsgICAgLy8gOCBpcyBJViZFeHRJVgotCQkJCX0gZWxzZSB7CisJCQkJZWxzZQogCQkJCQkqcHdUeXBlID0gaHRvbnMoY2JQYWNrZXRTaXplIC0gV0xBTl9IRFJfQUREUjNfTEVOIC0gNCk7ICAgIC8vIDQgaXMgSVYKLQkJCQl9CisKIAkJCX0gZWxzZSB7CiAJCQkJKnB3VHlwZSA9IGh0b25zKGNiUGFja2V0U2l6ZSAtIFdMQU5fSERSX0FERFIzX0xFTik7CiAJCQl9CkBAIC0xOTUsMTEgKzE5NCwxMSBAQAogCQljYkhlYWRlclNpemUgLT0gMjsKIAkJcHdUeXBlID0gKHVuc2lnbmVkIHNob3J0ICopKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CiAJCWlmIChiSXNXRVApIHsKLQkJCWlmIChiRXh0SVYpIHsKKwkJCWlmIChiRXh0SVYpCiAJCQkJKnB3VHlwZSA9IGh0b25zKGNiUGFja2V0U2l6ZSAtIFdMQU5fSERSX0FERFIzX0xFTiAtIDgpOyAgICAvLyA4IGlzIElWJkV4dElWCi0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCSpwd1R5cGUgPSBodG9ucyhjYlBhY2tldFNpemUgLSBXTEFOX0hEUl9BRERSM19MRU4gLSA0KTsgICAgLy8gNCBpcyBJVgotCQkJfQorCiAJCX0gZWxzZSB7CiAJCQkqcHdUeXBlID0gaHRvbnMoY2JQYWNrZXRTaXplIC0gV0xBTl9IRFJfQUREUjNfTEVOKTsKIAkJfQpAQCAtMjIzLDYgKzIyMiw3IEBACiAJCWlmIChhY2J5UnhSYXRlW2J5UmF0ZUlkeCAlIE1BWF9SQVRFXSA9PSBieVJhdGUpCiAJCQlyZXR1cm4gYnlSYXRlSWR4OwogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMjcsMTUgKzMyNywxMSBAQAogCVBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXI7CiAJYm9vbCBiUnhlYXBvbF9rZXkgPSBmYWxzZTsKIAotLy8gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiLS0tLS0tLS0tLSBkZXZpY2VfcmVjZWl2ZV9mcmFtZS0tLVxuIik7Ci0KIAlza2IgPSBwUkRJbmZvLT5za2I7CiAKIC8vUExJQ0VfREVCVUctPgotI2lmIDEKIAlwY2lfdW5tYXBfc2luZ2xlKHBEZXZpY2UtPnBjaWQsIHBSREluZm8tPnNrYl9kbWEsCiAJCQkgcERldmljZS0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotI2VuZGlmCiAvL1BMSUNFX0RFQlVHPC0KIAlwd0ZyYW1lU2l6ZSA9ICh1bnNpZ25lZCBzaG9ydCAqKShza2ItPmRhdGEgKyAyKTsKIAlGcmFtZVNpemUgPSBjcHVfdG9fbGUxNihwQ3VyclJELT5tX3JkMVJEMS53UmVxQ291bnQpIC0gY3B1X3RvX2xlMTYocEN1cnJSRC0+bV9yZDBSRDAud1Jlc0NvdW50KTsKQEAgLTM2Niw3ICszNjIsNiBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogLy9QTElDRV9ERUJVRy0+Ci0jaWYgMQogCS8vIHVwZGF0ZSByZWNlaXZlIHN0YXRpc3RpYyBjb3VudGVyCiAJU1RBdlVwZGF0ZVJEU3RhdENvdW50ZXIoJnBEZXZpY2UtPnNjU3RhdGlzdGljLAogCQkJCSpwYnlSc3IsCkBAIC0zNzUsMTQgKzM3MCwxMiBAQAogCQkJCXBieUZyYW1lLAogCQkJCUZyYW1lU2l6ZSk7CiAKLSNlbmRpZgotCiAJcE1BQ0hlYWRlciA9IChQUzgwMl8xMUhlYWRlcikoKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhKSArIDgpOwogLy9QTElDRV9ERUJVRzwtCiAJaWYgKHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcykgewotCQlpZiAoKCpwYnlSc3IgJiBSU1JfQ1JDT0spICE9IDApIHsKKwkJaWYgKCgqcGJ5UnNyICYgUlNSX0NSQ09LKSAhPSAwKQogCQkJcERldmljZS0+YnlCYXNpY01hcCB8PSAweDAxOwotCQl9CisKIAkJZHdEdXJhdGlvbiA9IChGcmFtZVNpemUgPDwgNCk7CiAJCWR3RHVyYXRpb24gLz0gYWNieVJ4UmF0ZVsqcGJ5UnhSYXRlJU1BWF9SQVRFXTsKIAkJaWYgKCpwYnlSeFJhdGUgPD0gUkFURV8xMU0pIHsKQEAgLTM5OSw5ICszOTIsOSBAQAogCQlSRnZSU1NJVG9kQm0ocERldmljZSwgKnBieVJTU0ksICZsZEJtKTsKIAkJbGRCbVRocmVzaG9sZCA9IC01NzsKIAkJZm9yIChpaSA9IDc7IGlpID4gMDspIHsKLQkJCWlmIChsZEJtID4gbGRCbVRocmVzaG9sZCkgeworCQkJaWYgKGxkQm0gPiBsZEJtVGhyZXNob2xkKQogCQkJCWJyZWFrOwotCQkJfQorCiAJCQlsZEJtVGhyZXNob2xkIC09IDU7CiAJCQlpaS0tOwogCQl9CkBAIC00MzYsOSArNDI5LDggQEAKIAl9CiAKIAlpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7Ci0JCWlmIChzX2JBUE1vZGVSeEN0bChwRGV2aWNlLCBwYnlGcmFtZSwgaVNBTm9kZUluZGV4KSkgeworCQlpZiAoc19iQVBNb2RlUnhDdGwocERldmljZSwgcGJ5RnJhbWUsIGlTQU5vZGVJbmRleCkpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAKIAlpZiAoSVNfRkNfV0VQKHBieUZyYW1lKSkgewpAQCAtNDg4LDEzICs0ODAsMTAgQEAKIAkJCQkgICAgKHBEZXZpY2UtPnBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBTk9ORSkgfHwKIAkJCQkgICAgKHBEZXZpY2UtPnBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgfHwKIAkJCQkgICAgKHBEZXZpY2UtPnBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykpIHsKLQkJCQkJaWYgKChwS2V5ICE9IE5VTEwpICYmIChwS2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKKwkJCQkJaWYgKChwS2V5ICE9IE5VTEwpICYmIChwS2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpCiAJCQkJCQlwRGV2aWNlLT5zODAyXzExQ291bnRlci5US0lQSUNWRXJyb3JzKys7Ci0JCQkJCX0gZWxzZSBpZiAoKHBLZXkgIT0gTlVMTCkgJiYgKHBLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9DQ01QKSkgeworCQkJCQllbHNlIGlmICgocEtleSAhPSBOVUxMKSAmJiAocEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX0NDTVApKQogCQkJCQkJcERldmljZS0+czgwMl8xMUNvdW50ZXIuQ0NNUERlY3J5cHRFcnJvcnMrKzsKLQkJCQkJfSBlbHNlIGlmICgocEtleSAhPSBOVUxMKSAmJiAocEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1dFUCkpIHsKLS8vICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUElDVkVycm9yQ291bnQuUXVhZFBhcnQrKzsKLQkJCQkJfQogCQkJCX0KIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CkBAIC01NTcsMTMgKzU0Niw5IEBACiAJCQlwUnhQYWNrZXQtPmJ5UnhSYXRlID0gc19ieUdldFJhdGVJZHgoKnBieVJ4UmF0ZSk7CiAJCQlwUnhQYWNrZXQtPmJ5UnhDaGFubmVsID0gKCpwYnlSeFN0cykgPj4gMjsKIC8vUExJQ0VfREVCVUctPgotLy9FblF1ZXVlKHBEZXZpY2UscFJ4UGFja2V0KTsKIAogI2lmZGVmCVRIUkVBRAogCQkJRW5RdWV1ZShwRGV2aWNlLCBwUnhQYWNrZXQpOwotCi0JCQkvL3VwKCZwRGV2aWNlLT5tbG1lX3NlbWFwaG9yZSk7Ci0JCQkvL0VucXVlIChwRGV2aWNlLT5GaXJzdFJlY3ZNbmdMaXN0LHBEZXZpY2UtPkxhc3RSZWN2TW5nTGlzdCxwTWdtdCk7CiAjZWxzZQogCiAjaWZkZWYJVEFTS19MRVQKQEAgLTU3MSwxMiArNTU2LDEwIEBACiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZwRGV2aWNlLT5SeE1uZ1dvcmtJdGVtKTsKICNlbHNlCiAJCQl2TWdyUnhNYW5hZ2VQYWNrZXQoKHZvaWQgKilwRGV2aWNlLCBwRGV2aWNlLT5wTWdtdCwgcFJ4UGFja2V0KTsKLQkJCS8vdGFza2xldF9zY2hlZHVsZSgmcERldmljZS0+UnhNbmdXb3JrSXRlbSk7CiAjZW5kaWYKIAogI2VuZGlmCiAvL1BMSUNFX0RFQlVHPC0KLQkJCS8vdk1nclJ4TWFuYWdlUGFja2V0KCh2b2lkICopcERldmljZSwgcERldmljZS0+cE1nbXQsIHBSeFBhY2tldCk7CiAJCQkvLyBob3N0YXAgRGVhbW9uIGhhbmRsZSA4MDIuMTEgbWFuYWdlbWVudAogCQkJaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkKSB7CiAJCQkJc2tiLT5kZXYgPSBwRGV2aWNlLT5hcGRldjsKQEAgLTU5MCw5ICs1NzMsOCBAQAogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvLyBDb250cm9sIEZyYW1lCiAJCX0KKwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewpAQCAtNjQzLDE0ICs2MjUsOSBAQAogLy8gRGF0YSBmcmFtZSBIYW5kbGUKIAogCWlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKSB7Ci0JCWlmIChJU19GQ19NT1JFREFUQSgoc2tiLT5kYXRhKzQpKSkgewotCQkJaWYgKCpwYnlSc3IgJiBSU1JfQUREUk9LKSB7Ci0JCQkJLy9QU2JTZW5kUFNQT0xMKChQU0RldmljZSlwRGV2aWNlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChwRGV2aWNlLT5wTWdtdC0+YkluVElNV2FrZSA9PSB0cnVlKSB7CisJCWlmICghSVNfRkNfTU9SRURBVEEoKHNrYi0+ZGF0YSs0KSkpIHsKKwkJCWlmIChwRGV2aWNlLT5wTWdtdC0+YkluVElNV2FrZSA9PSB0cnVlKQogCQkJCXBEZXZpY2UtPnBNZ210LT5iSW5USU1XYWtlID0gZmFsc2U7Ci0JCQl9CiAJCX0KIAl9CiAKQEAgLTY2MSw5ICs2MzgsOSBAQAogCQlCQnZBbnRlbm5hRGl2ZXJzaXR5KHBEZXZpY2UsIHNfYnlHZXRSYXRlSWR4KCpwYnlSeFJhdGUpLCAwKTsKIAl9CiAKLQlpZiAocERldmljZS0+YnlMb2NhbElEICE9IFJFVl9JRF9WVDMyNTNfQjEpIHsKKwlpZiAocERldmljZS0+YnlMb2NhbElEICE9IFJFVl9JRF9WVDMyNTNfQjEpCiAJCXBEZXZpY2UtPnVDdXJyUlNTSSA9ICpwYnlSU1NJOwotCX0KKwogCXBEZXZpY2UtPmJ5Q3VyclNRID0gKnBieVNROwogCiAJaWYgKCgqcGJ5UlNTSSAhPSAwKSAmJgpAQCAtNjczLDExICs2NTAsMTAgQEAKIAkJcE1nbXQtPnBDdXJyQlNTLT5ieVJTU0lTdGF0Q250Kys7CiAJCXBNZ210LT5wQ3VyckJTUy0+YnlSU1NJU3RhdENudCAlPSBSU1NJX1NUQVRfQ09VTlQ7CiAJCXBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbcE1nbXQtPnBDdXJyQlNTLT5ieVJTU0lTdGF0Q250XSA9IGxkQm07Ci0JCWZvciAoaWkgPSAwOyBpaSA8IFJTU0lfU1RBVF9DT1VOVDsgaWkrKykgewotCQkJaWYgKHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldICE9IDApIHsKKwkJZm9yIChpaSA9IDA7IGlpIDwgUlNTSV9TVEFUX0NPVU5UOyBpaSsrKQorCQkJaWYgKHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldICE9IDApCiAJCQkJcE1nbXQtPnBDdXJyQlNTLT5sZEJtTUFYID0gbWF4KHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKLQkJCX0KLQkJfQorCiAJfQogCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyMCw5ICs2OTYsOCBAQAogCX0KIAogCWlmICgocEtleSAhPSBOVUxMKSAmJiAocEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7Ci0JCWlmIChiSXNXRVApIHsKKwkJaWYgKGJJc1dFUCkKIAkJCUZyYW1lU2l6ZSAtPSA4OyAgLy9NSUMKLQkJfQogCX0KIAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc2NSwxNiArNzQwLDEyIEBACiAKIAkJCXBkd01JQ19MID0gKF9fbGUzMiAqKShza2ItPmRhdGEgKyA0ICsgRnJhbWVTaXplKTsKIAkJCXBkd01JQ19SID0gKF9fbGUzMiAqKShza2ItPmRhdGEgKyA0ICsgRnJhbWVTaXplICsgNCk7Ci0JCQkvL0RCR19QUk5fR1JQMTIoKCJSeEw6ICVseCwgUnhSOiAlbHhcbiIsICpwZHdNSUNfTCwgKnBkd01JQ19SKSk7Ci0JCQkvL0RCR19QUk5fR1JQMTIoKCJMb2NhbEw6ICVseCwgTG9jYWxSOiAlbHhcbiIsIGR3TG9jYWxNSUNfTCwgZHdMb2NhbE1JQ19SKSk7Ci0JCQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImR3TUlDS2V5MD0gJWx4LGR3TUlDS2V5MT0gJWx4IFxuIiwgZHdNSUNLZXkwLCBkd01JQ0tleTEpOwogCiAJCQlpZiAoKGxlMzJfdG9fY3B1KCpwZHdNSUNfTCkgIT0gZHdMb2NhbE1JQ19MKSB8fAogCQkJICAgIChsZTMyX3RvX2NwdSgqcGR3TUlDX1IpICE9IGR3TG9jYWxNSUNfUikgfHwKIAkJCSAgICBwRGV2aWNlLT5iUnhNSUNGYWlsKSB7CiAJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTUlDIGNvbXBhcmlzb24gaXMgZmFpbCFcbiIpOwogCQkJCXBEZXZpY2UtPmJSeE1JQ0ZhaWwgPSBmYWxzZTsKLQkJCQkvL3BEZXZpY2UtPnM4MDJfMTFDb3VudGVyLlRLSVBMb2NhbE1JQ0ZhaWx1cmVzLlF1YWRQYXJ0Kys7CiAJCQkJcERldmljZS0+czgwMl8xMUNvdW50ZXIuVEtJUExvY2FsTUlDRmFpbHVyZXMrKzsKIAkJCQlpZiAoYkRlRnJhZ1J4KSB7CiAJCQkJCWlmICghZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKHBEZXZpY2UsICZwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0pKSB7CkBAIC04MTMsMTAgKzc4NCw4IEBACiAJCQkJCWlmICgocERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYKIAkJCQkJICAgIChwRGV2aWNlLT5wTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0FTU09DKSAmJgogCQkJCQkgICAgKCpwYnlSc3IgJiAoUlNSX0FERFJCUk9BRCB8IFJTUl9BRERSTVVMVEkpKSA9PSAwKSB7Ci0JCQkJCQkvL3M4MDJfMTFfU3RhdHVzLkZsYWdzID0gTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX1BBSVJXSVNFX0VSUk9SOwogCQkJCQkJd3BhaGRyLT50eXBlID0gVklBV0dFVF9QVEtfTUlDX01TRzsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCS8vczgwMl8xMV9TdGF0dXMuRmxhZ3MgPSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfR1JPVVBfRVJST1I7CiAJCQkJCQl3cGFoZHItPnR5cGUgPSBWSUFXR0VUX0dUS19NSUNfTVNHOwogCQkJCQl9CiAJCQkJCXdwYWhkci0+cmVzcF9pZV9sZW4gPSAwOwpAQCAtODYzLDEwICs4MzIsOCBAQAogCQkJCSAgICAhKChkd1J4VFNDNDdfMTYgPT0gMCkgJiYgKGR3TG9jYWxUU0M0N18xNiA9PSAweEZGRkZGRkZGKSkpIHsKIAkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVFNDIGlzIGlsbGVnYWx+fiFcbiAiKTsKIAkJCQkJaWYgKHBLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKQotCQkJCQkJLy9wRGV2aWNlLT5zODAyXzExQ291bnRlci5US0lQUmVwbGF5cy5RdWFkUGFydCsrOwogCQkJCQkJcERldmljZS0+czgwMl8xMUNvdW50ZXIuVEtJUFJlcGxheXMrKzsKIAkJCQkJZWxzZQotCQkJCQkJLy9wRGV2aWNlLT5zODAyXzExQ291bnRlci5DQ01QUmVwbGF5cy5RdWFkUGFydCsrOwogCQkJCQkJcERldmljZS0+czgwMl8xMUNvdW50ZXIuQ0NNUFJlcGxheXMrKzsKIAogCQkJCQlpZiAoYkRlRnJhZ1J4KSB7CkBAIC04ODEsMTAgKzg0OCw2IEBACiAJCX0KIAl9IC8vIC0tLS0tIEVuZCBvZiBSZXBseSBDb3VudGVyIENoZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlpZiAoKHBLZXkgIT0gTlVMTCkgJiYgKGJJc1dFUCkpIHsKLS8vICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuRGVjcnlwdFN1Y2Nlc3NDb3VudC5RdWFkUGFydCsrOwotCX0KLQogCXNfdlByb2Nlc3NSeE1BQ0hlYWRlcihwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGErNCksIEZyYW1lU2l6ZSwgYklzV0VQLCBiRXh0SVYsICZjYkhlYWRlck9mZnNldCk7CiAJRnJhbWVTaXplIC09IGNiSGVhZGVyT2Zmc2V0OwogCWNiSGVhZGVyT2Zmc2V0ICs9IDQ7ICAgICAgICAvLyA0IGlzIFJjdiBidWZmZXIgaGVhZGVyCkBAIC05MTcsMjIgKzg4MCw2IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwogCiAJLy9kcm9wIGZyYW1lIG5vdCBtZXQgSUVFRSA4MDIuMwotLyoKLSAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX1ZBTF9QS1RfTEVOKSB7Ci0gIGlmICgoc2tiLT5wcm90b2NvbD09aHRvbnMoRVRIX1BfODAyXzMpKSAmJgotICAoc2tiLT5sZW4hPWh0b25zKHNrYi0+bWFjLmV0aGVybmV0LT5oX3Byb3RvKSkpIHsKLSAgcFN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7Ci0gIHBTdGF0cy0+cnhfZHJvcHBlZCsrOwotICBpZiAoYkRlRnJhZ1J4KSB7Ci0gIGlmICghZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKHBEZXZpY2UsICZwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0pKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0VSUixLRVJOX0VSUiAiJXM6IGNhbiBub3QgYWxsb2MgbW9yZSBmcmFnIGJ1ZnNcbiIsCi0gIHBEZXZpY2UtPmRldi0+bmFtZSk7Ci0gIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgfQotKi8KIAogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAlwU3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMTEyMSwxOSArMTA2OCwxMSBAQAogCiAJaWYgKHBLZXkgPT0gTlVMTCkgewogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5ID09IE5VTExcbiIpOwotCQlpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7Ci0vLyAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUFVuZGVjcnlwdGFibGVDb3VudC5RdWFkUGFydCsrOwotCQl9IGVsc2UgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcykgewotLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5EZWNyeXB0RmFpbHVyZUNvdW50LlF1YWRQYXJ0Kys7Ci0JCX0KKwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChieURlY01vZGUgIT0gcEtleS0+YnlDaXBoZXJTdWl0ZSkgewotCQlpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7Ci0vLyAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUFVuZGVjcnlwdGFibGVDb3VudC5RdWFkUGFydCsrOwotCQl9IGVsc2UgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcykgewotLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5EZWNyeXB0RmFpbHVyZUNvdW50LlF1YWRQYXJ0Kys7Ci0JCX0KKwogCQkqcEtleU91dCA9IE5VTEw7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xMTUxLDkgKzEwOTAsOSBAQAogCQkJcmM0X2luaXQoJnBEZXZpY2UtPlNCb3gsIHBEZXZpY2UtPmFieVBSTkcsIHBLZXktPnVLZXlMZW5ndGggKyAzKTsKIAkJCXJjNF9lbmNyeXB0KCZwRGV2aWNlLT5TQm94LCBwYnlJVis0LCBwYnlJVis0LCBQYXlsb2FkTGVuKTsKIAotCQkJaWYgKEVUSGJJc0J1ZmZlckNyYzMyT2socGJ5SVYrNCwgUGF5bG9hZExlbikpIHsKKwkJCWlmIChFVEhiSXNCdWZmZXJDcmMzMk9rKHBieUlWKzQsIFBheWxvYWRMZW4pKQogCQkJCSpwYnlOZXdSc3IgfD0gTkVXUlNSX0RFQ1JZUFRPSzsKLQkJCX0KKwogCQl9CiAJfSBlbHNlIGlmICgoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkgfHwKIAkJICAgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX0NDTVApKSB7CkBAIC0xMTYyLDExICsxMTAxLDExIEBACiAJCVBheWxvYWRMZW4gLT0gKFdMQU5fSERSX0FERFIzX0xFTiArIDggKyA0KTsgLy8gMjQgaXMgODAyLjExIGhlYWRlciwgOCBpcyBJViZFeHRJViwgNCBpcyBjcmMKIAkJKnBkd1J4VFNDNDdfMTYgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikocGJ5SVYgKyA0KSk7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkV4dElWOiAlbHhcbiIsICpwZHdSeFRTQzQ3XzE2KTsKLQkJaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApIHsKKwkJaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApCiAJCQkqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNihNQUtFV09SRCgqKHBieUlWICsgMiksICpwYnlJVikpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQkqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNigqKHVuc2lnbmVkIHNob3J0ICopcGJ5SVYpOwotCQl9CisKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVFNDMF8xNTogJXhcbiIsICpwd1J4VFNDMTVfMCk7CiAKIAkJaWYgKChieURlY01vZGUgPT0gS0VZX0NUTF9US0lQKSAmJgpAQCAtMTIzMSwxNCArMTE3MCw4IEBACiAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJBRVM6JWQgJWQgJWRcbiIsIHBEZXZpY2UtPnBNZ210LT5ieUNTU1BLLCBwRGV2aWNlLT5wTWdtdC0+YnlDU1NHSywgYnlEZWNNb2RlKTsKIAotCWlmIChieURlY01vZGUgIT0gcEtleS0+YnlDaXBoZXJTdWl0ZSkgewotCQlpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7Ci0vLyAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLldFUFVuZGVjcnlwdGFibGVDb3VudC5RdWFkUGFydCsrOwotCQl9IGVsc2UgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcykgewotLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5EZWNyeXB0RmFpbHVyZUNvdW50LlF1YWRQYXJ0Kys7Ci0JCX0KKwlpZiAoYnlEZWNNb2RlICE9IHBLZXktPmJ5Q2lwaGVyU3VpdGUpCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKIAlpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7CiAJCS8vIGhhbmRsZSBXRVAKQEAgLTEyNTcsOSArMTE5MCw5IEBACiAJCQlyYzRfaW5pdCgmcERldmljZS0+U0JveCwgcERldmljZS0+YWJ5UFJORywgcEtleS0+dUtleUxlbmd0aCArIDMpOwogCQkJcmM0X2VuY3J5cHQoJnBEZXZpY2UtPlNCb3gsIHBieUlWKzQsIHBieUlWKzQsIFBheWxvYWRMZW4pOwogCi0JCQlpZiAoRVRIYklzQnVmZmVyQ3JjMzJPayhwYnlJVis0LCBQYXlsb2FkTGVuKSkgeworCQkJaWYgKEVUSGJJc0J1ZmZlckNyYzMyT2socGJ5SVYrNCwgUGF5bG9hZExlbikpCiAJCQkJKnBieU5ld1JzciB8PSBORVdSU1JfREVDUllQVE9LOwotCQkJfQorCiAJCX0KIAl9IGVsc2UgaWYgKChieURlY01vZGUgPT0gS0VZX0NUTF9US0lQKSB8fAogCQkgICAoYnlEZWNNb2RlID09IEtFWV9DVExfQ0NNUCkpIHsKQEAgLTEyNjksMTEgKzEyMDIsMTEgQEAKIAkJKnBkd1J4VFNDNDdfMTYgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikocGJ5SVYgKyA0KSk7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkV4dElWOiAlbHhcbiIsICpwZHdSeFRTQzQ3XzE2KTsKIAotCQlpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkgeworCQlpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkKIAkJCSpwd1J4VFNDMTVfMCA9IGNwdV90b19sZTE2KE1BS0VXT1JEKCoocGJ5SVYrMiksICpwYnlJVikpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQkqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNigqKHVuc2lnbmVkIHNob3J0ICopcGJ5SVYpOwotCQl9CisKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVFNDMF8xNTogJXhcbiIsICpwd1J4VFNDMTVfMCk7CiAKIAkJaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApIHsKQEAgLTEzODYsOSArMTMxOSw4IEBACiAJCWlmIChiUmVsYXlBbmRGb3J3YXJkKQogCQkJaURBTm9kZUluZGV4ID0gMDsKIAotCQlpZiAoKHBEZXZpY2UtPnVBc3NvY0NvdW50ID4gMSkgJiYgKGlEQU5vZGVJbmRleCA+PSAwKSkgeworCQlpZiAoKHBEZXZpY2UtPnVBc3NvY0NvdW50ID4gMSkgJiYgKGlEQU5vZGVJbmRleCA+PSAwKSkKIAkJCVJPVVRFYlJlbGF5KHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyICopKHNrYi0+ZGF0YSArIGNiSGVhZGVyT2Zmc2V0KSwgRnJhbWVTaXplLCAodW5zaWduZWQgaW50KWlEQU5vZGVJbmRleCk7Ci0JCX0KIAogCQlpZiAoYlJlbGF5T25seSkKIAkJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaG9zdGFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2hvc3RhcC5jCmluZGV4IDZlZWNkNTMuLjMxN2MyYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaG9zdGFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ob3N0YXAuYwpAQCAtNDgsNyArNDgsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9JTkZPOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjA3LDExICsyMDYsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdU5vZGVJbmRleDsKIAotCWlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBEZXZpY2UtPnBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgeworCWlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBEZXZpY2UtPnBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkKIAkJQlNTdlJlbW92ZU9uZU5vZGUocERldmljZSwgdU5vZGVJbmRleCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXJldHVybiAtRU5PRU5UOwotCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0yMzQsMTQgKzIzMywxMyBAQAogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4OwogCi0JaWYgKCFCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgeworCWlmICghQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpCiAJCUJTU3ZDcmVhdGVPbmVOb2RlKChQU0RldmljZSlwRGV2aWNlLCAmdU5vZGVJbmRleCk7Ci0JfQorCiAJbWVtY3B5KHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYWJ5TUFDQWRkciwgcGFyYW0tPnN0YV9hZGRyLCBXTEFOX0FERFJfTEVOKTsKIAlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmVOb2RlU3RhdGUgPSBOT0RFX0FTU09DOwogCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0NhcEluZm8gPSBwYXJhbS0+dS5hZGRfc3RhLmNhcGFiaWxpdHk7CiAvLyBUT0RPIGxpc3RlbkludGVydmFsCi0vLyAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndMaXN0ZW5JbnRlcnZhbCA9IDE7CiAJcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUgPSBmYWxzZTsKIAlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJ5U3VwcFJhdGUgPSBwYXJhbS0+dS5hZGRfc3RhLnR4X3N1cHBfcmF0ZXM7CiAKQEAgLTI5Niw4ICsyOTQsNiBAQAogCWlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgewogCQlwYXJhbS0+dS5nZXRfaW5mb19zdGEuaW5hY3RpdmVfc2VjID0KIAkJCShqaWZmaWVzIC0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51bExhc3RSeEppZmZlcikgLyBIWjsKLQotCQkvL3BhcmFtLT51LmdldF9pbmZvX3N0YS50eGV4YyA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4QXR0ZW1wdHM7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQpAQCAtMzA3LDM3ICszMDMsNiBAQAogCiAvKgogICogRGVzY3JpcHRpb246Ci0gKiAgICAgIHJlc2V0IHR4ZXhlYwotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAtCi0gKiAgICAgIHBhcmFtICAgICAtCi0gKiAgT3V0OgotICogICAgICB0cnVlLCBmYWxzZQotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLS8qCi0gIHN0YXRpYyBpbnQgaG9zdGFwX3Jlc2V0X3R4ZXhjX3N0YShQU0RldmljZSBwRGV2aWNlLAotICBzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKLSAgewotICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7Ci0KLSAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBhcmFtLT5zdGFfYWRkciwgJnVOb2RlSW5kZXgpKSB7Ci0gIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4QXR0ZW1wdHMgPSAwOwotICB9IGVsc2UgewotICByZXR1cm4gLUVOT0VOVDsKLSAgfQotCi0gIHJldHVybiAwOwotICB9Ci0qLwotCi0vKgotICogRGVzY3JpcHRpb246CiAgKiAgICAgIHNldCBzdGF0aW9uIGZsYWcKICAqCiAgKiBQYXJhbWV0ZXJzOgpAQCAtNDU2LDE5ICs0MjEsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIGFieVNlcVtNQVhfS0VZX0xFTl07CiAJdW5zaWduZWQgbG9uZyBsb25nIEtleVJTQzsKIAl1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfV0VQOwotCWludCAgICAgcmV0ID0gMDsKIAlpbnQgICAgIGlOb2RlSW5kZXggPSAtMTsKIAlpbnQgICAgIGlpOwogCWJvb2wgYktleVRhYmxlRnVsbCA9IGZhbHNlOwogCXVuc2lnbmVkIHNob3J0IHdLZXlDdGwgPSAwOwogCiAJcGFyYW0tPnUuY3J5cHQuZXJyID0gMDsKLS8qCi0gIGlmIChwYXJhbV9sZW4gIT0KLSAgKGludCkgKChjaGFyICopIHBhcmFtLT51LmNyeXB0LmtleSAtIChjaGFyICopIHBhcmFtKSArCi0gIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pCi0gIHJldHVybiAtRUlOVkFMOwotKi8KIAogCWlmIChwYXJhbS0+dS5jcnlwdC5hbGcgPiBXUEFfQUxHX0NDTVApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTE2LDcgKzQ3NCw3IEBACiAJCSAgICAgICBNQVhfS0VZX0xFTgogKTsKIAotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAl9CiAKIAltZW1jcHkoYWJ5S2V5LCBwYXJhbS0+dS5jcnlwdC5rZXksIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pOwpAQCAtNTcyLDcgKzUzMCw3IEBACiAJCXBNZ210LT5ieUNTU0dLID0gS0VZX0NUTF9XRVA7CiAJCXBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYnlDaXBoZXJTdWl0ZSA9IEtFWV9DVExfV0VQOwogCQlwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmR3S2V5SW5kZXggPSBkd0tleUluZGV4OwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocGFyYW0tPnUuY3J5cHQuc2VxKSB7CkBAIC02NjMsNyArNjIxLDcgQEAKIAlwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmR3VFNDNDdfMTYgPSAwOwogCXBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0ud1RTQzE1XzAgPSAwOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTY4NCw3ICs2NDIsNiBAQAogCQkJCSBpbnQgcGFyYW1fbGVuKQogewogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotCWludCAgICAgcmV0ID0gMDsKIAlpbnQgICAgIGlpOwogCWludCAgICAgaU5vZGVJbmRleCA9IDA7CiAKQEAgLTcwMSwxMSArNjU4LDEwIEBACiAJfQogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImhvc3RhcF9nZXRfZW5jcnlwdGlvbjogJWRcbiIsIGlOb2RlSW5kZXgpOwogCW1lbXNldChwYXJhbS0+dS5jcnlwdC5zZXEsIDAsIDgpOwotCWZvciAoaWkgPSAwOyBpaSA8IDg7IGlpKyspIHsKKwlmb3IgKGlpID0gMDsgaWkgPCA4OyBpaSsrKQogCQlwYXJhbS0+dS5jcnlwdC5zZXFbaWldID0gKHVuc2lnbmVkIGNoYXIpcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5LZXlSU0MgPj4gKGlpICogOCk7Ci0JfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTc4MCwxMiArNzM2LDYgQEAKIAkJcmV0ID0gaG9zdGFwX2dldF9pbmZvX3N0YShwRGV2aWNlLCBwYXJhbSk7CiAJCWFwX2lvY3RsID0gMTsKIAkJYnJlYWs7Ci0vKgotCWNhc2UgVklBV0dFVF9IT1NUQVBEX1JFU0VUX1RYRVhDX1NUQToKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVklBV0dFVF9IT1NUQVBEX1JFU0VUX1RYRVhDX1NUQSBcbiIpOwotCQlyZXQgPSBob3N0YXBfcmVzZXRfdHhleGNfc3RhKHBEZXZpY2UsIHBhcmFtKTsKLQkJYnJlYWs7Ci0qLwogCWNhc2UgVklBV0dFVF9IT1NUQVBEX1NFVF9GTEFHU19TVEE6CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfSE9TVEFQRF9TRVRfRkxBR1NfU1RBIFxuIik7CiAJCXJldCA9IGhvc3RhcF9zZXRfZmxhZ3Nfc3RhKHBEZXZpY2UsIHBhcmFtKTsKQEAgLTgxNCw5ICs3NjQsOCBAQAogCX0KIAogCWlmICgocmV0ID09IDApICYmIGFwX2lvY3RsKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIocC0+cG9pbnRlciwgcGFyYW0sIHAtPmxlbmd0aCkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihwLT5wb2ludGVyLCBwYXJhbSwgcC0+bGVuZ3RoKSkKIAkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0KIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuYwppbmRleCBiNWNkMmU0Li4xOGQxMWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5jCkBAIC0zMDUsNyArMzA1LDggQEAKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQotCQlwTGlzdCA9IChQU0JTU0lETGlzdClrbWFsbG9jKHNpemVvZihTQlNTSURMaXN0KSArIChzTGlzdC51SXRlbSAqIHNpemVvZihTQlNTSURJdGVtKSksIChpbnQpR0ZQX0FUT01JQyk7CisJCXBMaXN0ID0gKFBTQlNTSURMaXN0KWttYWxsb2Moc2l6ZW9mKFNCU1NJRExpc3QpICsgKHNMaXN0LnVJdGVtICogc2l6ZW9mKFNCU1NJREl0ZW0pKSwKKwkJCQkJICAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKHBMaXN0ID09IE5VTEwpIHsKIAkJCXJlc3VsdCA9IC1FTk9NRU07CiAJCQlicmVhazsKQEAgLTMxOCw3ICszMTksNiBAQAogCQkJCXBMaXN0LT5zQlNTSURMaXN0W2lpXS51Q2hhbm5lbCA9IHBCU1MtPnVDaGFubmVsOwogCQkJCXBMaXN0LT5zQlNTSURMaXN0W2lpXS53QmVhY29uSW50ZXJ2YWwgPSBwQlNTLT53QmVhY29uSW50ZXJ2YWw7CiAJCQkJcExpc3QtPnNCU1NJRExpc3RbaWldLndDYXBJbmZvID0gcEJTUy0+d0NhcEluZm87Ci0JCQkJLyogcExpc3QtPnNCU1NJRExpc3RbaWldLnVSU1NJID0gcEJTUy0+dVJTU0k7ICovCiAJCQkJUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwQlNTLT51UlNTSSksICZsZEJtKTsKIAkJCQlwTGlzdC0+c0JTU0lETGlzdFtpaV0udVJTU0kgPSAodW5zaWduZWQgaW50KWxkQm07CiAJCQkJbWVtY3B5KHBMaXN0LT5zQlNTSURMaXN0W2lpXS5hYnlCU1NJRCwgcEJTUy0+YWJ5QlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKQEAgLTU3Niw3ICs1NzYsOCBAQAogCQkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9Ci0JCXBOb2RlTGlzdCA9IChQU05vZGVMaXN0KWttYWxsb2Moc2l6ZW9mKFNOb2RlTGlzdCkgKyAoc05vZGVMaXN0LnVJdGVtICogc2l6ZW9mKFNOb2RlSXRlbSkpLCAoaW50KUdGUF9BVE9NSUMpOworCQlwTm9kZUxpc3QgPSAoUFNOb2RlTGlzdClrbWFsbG9jKHNpemVvZihTTm9kZUxpc3QpICsgKHNOb2RlTGlzdC51SXRlbSAqIHNpemVvZihTTm9kZUl0ZW0pKSwKKwkJCQkJCUdGUF9BVE9NSUMpOwogCQlpZiAocE5vZGVMaXN0ID09IE5VTEwpIHsKIAkJCXJlc3VsdCA9IC1FTk9NRU07CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuaAppbmRleCBhZTI0MGZkLi4yZjBkYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5oCkBAIC00MSwxMyArNDEsNCBAQAogCiBpbnQgcHJpdmF0ZV9pb2N0bChQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3QgaWZyZXEgKnJxKTsKIAotLyoKLSAgdm9pZCB2Q29uZmlnV0VQS2V5KAotICBQU0RldmljZSBwRGV2aWNlLAotICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCi0gIHVuc2lnbmVkIGNoYXIgKnBieUtleSwKLSAgdW5zaWduZWQgbG9uZyB1S2V5TGVuZ3RoCi0pOwotKi8KLQogI2VuZGlmIC8vIF9fSU9DVExfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvd3BhLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvd3BhLmgKaW5kZXggYmZlYTAxZi4uYjdiZDE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb3dwYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW93cGEuaApAQCAtMzQsMTMgKzM0LDYgQEAKICNkZWZpbmUgV1BBX0lFX0xFTiA2NAogCiAvL1dQQSByZWxhdGVkCi0vKgotICB0eXBlZGVmIGVudW0geyBXUEFfQUxHX05PTkUsIFdQQV9BTEdfV0VQLCBXUEFfQUxHX1RLSVAsIFdQQV9BTEdfQ0NNUCB9IHdwYV9hbGc7Ci0gIHR5cGVkZWYgZW51bSB7IENJUEhFUl9OT05FLCBDSVBIRVJfV0VQNDAsIENJUEhFUl9US0lQLCBDSVBIRVJfQ0NNUCwKLSAgQ0lQSEVSX1dFUDEwNCB9IHdwYV9jaXBoZXI7Ci0gIHR5cGVkZWYgZW51bSB7IEtFWV9NR01UXzgwMl8xWCwgS0VZX01HTVRfUFNLLCBLRVlfTUdNVF9OT05FLAotICBLRVlfTUdNVF84MDJfMVhfTk9fV1BBLCBLRVlfTUdNVF9XUEFfTk9ORSB9IHdwYV9rZXlfbWdtdDsKLSovCiAKIGVudW0gewogCVZJQVdHRVRfU0VUX1dQQSA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMKaW5kZXggYWMzZmMxNi4uYWUyYjg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYwpAQCAtNjYsNyArNjYsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfSU5GTzsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTg5LDcgKzg4LDYgQEAKICNlbmRpZgogCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAodW5zaWduZWQgY2hhcikocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOwogCXBEZXZpY2UtPndzdGF0cy5xdWFsLmxldmVsID0gbGRCbTsKLQkvL3BEZXZpY2UtPndzdGF0cy5xdWFsLmxldmVsID0gMHgxMDAgLSBwRGV2aWNlLT51Q3VyclJTU0k7CiAJcERldmljZS0+d3N0YXRzLnF1YWwubm9pc2UgPSAwOwogCXBEZXZpY2UtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSAxOwogCXBEZXZpY2UtPndzdGF0cy5kaXNjYXJkLm53aWQgPSAwOwpAQCAtMjM3LDExICsyMzUsMTEgQEAKIAkJCS8vQUREIG1vZGUKIAkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCQlpZiAoV0xBTl9HRVRfQ0FQX0lORk9fRVNTKHBCU1MtPndDYXBJbmZvKSkgeworCQkJaWYgKFdMQU5fR0VUX0NBUF9JTkZPX0VTUyhwQlNTLT53Q2FwSW5mbykpCiAJCQkJaXdlLnUubW9kZSA9IElXX01PREVfSU5GUkE7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQkJfQorCiAJCQlpd2UubGVuID0gSVdfRVZfVUlOVF9MRU47CiAJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwogCQkJLy9BREQgZnJlcXVlbmN5CkBAIC0yNjgsMjYgKzI2NiwyNSBAQAogCQkJaXdlLnUucXVhbC5sZXZlbCA9IGxkQm07CiAJCQlpd2UudS5xdWFsLm5vaXNlID0gMDsKIC8vMjAwOC0wNDA5LTAxLCA8QWRkPiBieSBFaW5zbiBMaXUKLQkJCWlmICgtbGRCbSA8IDUwKSB7CisJCQlpZiAoLWxkQm0gPCA1MCkKIAkJCQlpd2UudS5xdWFsLnF1YWwgPSAxMDA7Ci0JCQl9IGVsc2UgaWYgKC1sZEJtID4gOTApIHsKKwkJCWVsc2UgaWYgKC1sZEJtID4gOTApCiAJCQkJaXdlLnUucXVhbC5xdWFsID0gMDsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJaXdlLnUucXVhbC5xdWFsID0gKDQwIC0gKC1sZEJtIC0gNTApKSAqIDEwMCAvIDQwOwotCQkJfQorCiAJCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSA3OwogCi0JCQkvLyAgaXdlLnUucXVhbC5xdWFsID0gMDsKIAkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CiAKIAkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJCQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKIAkJCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQkJCWlmIChXTEFOX0dFVF9DQVBfSU5GT19QUklWQUNZKHBCU1MtPndDYXBJbmZvKSkgeworCQkJaWYgKFdMQU5fR0VUX0NBUF9JTkZPX1BSSVZBQ1kocEJTUy0+d0NhcEluZm8pKQogCQkJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJCX0KKwogCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7CiAKIAkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CkBAIC00NDAsOSArNDM3LDkgQEAKIAljYXNlIElXX01PREVfQURIT0M6CiAJCWlmIChwTWdtdC0+ZUNvbmZpZ01vZGUgIT0gV01BQ19DT05GSUdfSUJTU19TVEEpIHsKIAkJCXBNZ210LT5lQ29uZmlnTW9kZSA9IFdNQUNfQ09ORklHX0lCU1NfU1RBOwotCQkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgeworCQkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkKIAkJCQlwRGV2aWNlLT5iQ29tbWl0ID0gdHJ1ZTsKLQkJCX0KKwogCQl9CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBtb2RlIHRvIGFkLWhvYyBcbiIpOwogCQlicmVhazsKQEAgLTQ1MCw5ICs0NDcsOSBAQAogCWNhc2UgSVdfTU9ERV9JTkZSQToKIAkJaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19FU1NfU1RBKSB7CiAJCQlwTWdtdC0+ZUNvbmZpZ01vZGUgPSBXTUFDX0NPTkZJR19FU1NfU1RBOwotCQkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgeworCQkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkKIAkJCQlwRGV2aWNlLT5iQ29tbWl0ID0gdHJ1ZTsKLQkJCX0KKwogCQl9CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBtb2RlIHRvIGluZnJhc3RydWN0dXJlIFxuIik7CiAJCWJyZWFrOwpAQCAtNDY0LDkgKzQ2MSw5IEBACiAKIAkJaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19BUCkgewogCQkJcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfQVA7Ci0JCQlpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7CisJCQlpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQogCQkJCXBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwotCQkJfQorCiAJCX0KIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAic2V0IG1vZGUgdG8gQWNjZXNzIFBvaW50IFxuIik7CiAJCWJyZWFrOwpAQCAtNjQwLDcgKzYzNyw2IEBACiAJaWYgKHBNZ210LT5lU2NhblN0YXRlID09ICBXTUFDX0lTX1NDQU5OSU5HKSB7CiAJCS8vIEluIHNjYW5uaW5nLi4KIAkJcHJpbnRrKCJTSU9DU0lXQVAoPz8pLS0+SW4gc2Nhbm5pbmcuLi5cbiIpOwotCQkvLyAgcmV0dXJuIC1FQUdBSU47CiAJfQogCWlmICh3cnEtPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCiAJCXJjID0gLUVJTlZBTDsKQEAgLTY3NCw5ICs2NzAsOSBAQAogCQkJfQogCQl9CiAKLQkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgeworCQlpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQogCQkJcERldmljZS0+YkNvbW1pdCA9IHRydWU7Ci0JCX0KKwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC03MDAsOSArNjk2LDggQEAKIAlpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBmYWxzZSkgJiYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0VTU19BUCkpCiAJCW1lbXNldCh3cnEtPnNhX2RhdGEsIDAsIDYpOwogCi0JaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgeworCWlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApCiAJCW1lbWNweSh3cnEtPnNhX2RhdGEsIHBNZ210LT5hYnlDdXJyQlNTSUQsIDYpOwotCX0KIAogCXdycS0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCkBAIC03MTksNDIgKzcxNCw2NiBAQAogCQkgICAgY2hhciAqZXh0cmEpCiB7CiAJaW50IGlpLCBqaiwgcmMgPSAwOwotCXN0cnVjdCBzb2NrYWRkciBzb2NrW0lXX01BWF9BUF07Ci0Jc3RydWN0IGl3X3F1YWxpdHkgcXVhbFtJV19NQVhfQVBdOworCXN0cnVjdCBzb2NrYWRkciAqc29jawk9IE5VTEw7CisJc3RydWN0IHNvY2thZGRyICpzCT0gTlVMTDsKKwlzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbAk9IE5VTEw7CisJc3RydWN0IGl3X3F1YWxpdHkgKnEJPSBOVUxMOworCVBLbm93bkJTUyBwQlNTCQk9IE5VTEw7CisKIAlQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKW5ldGRldl9wcml2KGRldik7CiAJUFNNZ210T2JqZWN0IHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAKLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ0dJV0FQTElTVCBcbiIpOwotCS8vIE9ubHkgc3VwZXItdXNlciBjYW4gc2VlIEFQIGxpc3QKKwlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ0dJV0FQTElTVFxuIik7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKIAkJcmMgPSAtRVBFUk07Ci0JCXJldHVybiByYzsKKwkJZ290byBleGl0OwogCX0KIAotCWlmICh3cnEtPnBvaW50ZXIpIHsKLQkJUEtub3duQlNTIHBCU1MgPSAmKHBNZ210LT5zQlNTTGlzdFswXSk7CisJaWYgKCF3cnEtPnBvaW50ZXIpCisJCWdvdG8gZXhpdDsKIAotCQlmb3IgKGlpID0gMCwgamogPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7Ci0JCQlwQlNTID0gJihwTWdtdC0+c0JTU0xpc3RbaWldKTsKLQkJCWlmICghcEJTUy0+YkFjdGl2ZSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChqaiA+PSBJV19NQVhfQVApCi0JCQkJYnJlYWs7Ci0JCQltZW1jcHkoc29ja1tqal0uc2FfZGF0YSwgcEJTUy0+YWJ5QlNTSUQsIDYpOwotCQkJc29ja1tqal0uc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJcXVhbFtqal0ubGV2ZWwgPSBwQlNTLT51UlNTSTsKLQkJCXF1YWxbampdLnF1YWwgPSBxdWFsW2pqXS5ub2lzZSA9IDA7Ci0JCQlxdWFsW2pqXS51cGRhdGVkID0gMjsKLQkJCWpqKys7Ci0JCX0KLQotCQl3cnEtPmZsYWdzID0gMTsgLy8gU2hvdWxkIGJlIGRlZmluZSdkCi0JCXdycS0+bGVuZ3RoID0gamo7Ci0JCW1lbWNweShleHRyYSwgc29jaywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqamopOwotCQltZW1jcHkoZXh0cmEgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSpqaiwgcXVhbCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSpqaik7CisJc29jayA9IGttYWxsb2NfYXJyYXkoSVdfTUFYX0FQLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NrKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBleGl0OwogCX0KIAorCXF1YWwgPSBrbWFsbG9jX2FycmF5KElXX01BWF9BUCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWFsKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaWkgPSAwLCBqaiA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKKwkJcEJTUyA9ICYocE1nbXQtPnNCU1NMaXN0W2lpXSk7CisKKwkJaWYgKCFwQlNTLT5iQWN0aXZlKQorCQkJY29udGludWU7CisJCWlmIChqaiA+PSBJV19NQVhfQVApCisJCQlicmVhazsKKworCQlzID0gJnNvY2tbampdOworCQlxID0gJnF1YWxbampdOworCisJCW1lbWNweShzLT5zYV9kYXRhLCBwQlNTLT5hYnlCU1NJRCwgNik7CisJCXMtPnNhX2ZhbWlseQk9IEFSUEhSRF9FVEhFUjsKKwkJcS0+bGV2ZWwJPSBwQlNTLT51UlNTSTsKKwkJcS0+cXVhbAkJPSAwOworCQlxLT5ub2lzZQk9IDA7CisJCXEtPnVwZGF0ZWQJPSAyOworCQlqaisrOworCX0KKworCXdycS0+ZmxhZ3MgPSAxOyAvKiBTaG91bGQgYmUgZGVmaW5lJ2QgKi8KKwl3cnEtPmxlbmd0aCA9IGpqOworCW1lbWNweShleHRyYSwgc29jaywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKiBqaik7CisJbWVtY3B5KGV4dHJhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKiBqaiwKKwkJcXVhbCwKKwkJc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIGpqKTsKK2V4aXQ6CisJa2ZyZWUoc29jayk7CisJa2ZyZWUocXVhbCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC03NzgsNyArNzk3LDYgQEAKIAlpZiAocE1nbXQtPmVTY2FuU3RhdGUgPT0gIFdNQUNfSVNfU0NBTk5JTkcpIHsKIAkJLy8gSW4gc2Nhbm5pbmcuLgogCQlwcmludGsoIlNJT0NTSVdFU1NJRCg/PyktLT5JbiBzY2FubmluZy4uLlxuIik7Ci0JCS8vICByZXR1cm4gLUVBR0FJTjsKIAl9CiAJLy8gQ2hlY2sgaWYgd2UgYXNrZWQgZm9yIGBhbnknCiAJaWYgKHdycS0+ZmxhZ3MgPT0gMCkgewpAQCAtODYyLDkgKzg4MCw4IEBACiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBlc3NpZCA9ICVzIFxuIiwgcEl0ZW1TU0lELT5hYnlTU0lEKTsKIAl9CiAKLQlpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7CisJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkKIAkJcERldmljZS0+YkNvbW1pdCA9IHRydWU7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODksNyArOTA2LDYgQEAKIAogCS8vIEdldCB0aGUgY3VycmVudCBTU0lECiAJcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEOwotCS8vcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQ7CiAJbWVtY3B5KGV4dHJhLCBwSXRlbVNTSUQtPmFieVNTSUQgLCBwSXRlbVNTSUQtPmxlbik7CiAJZXh0cmFbcEl0ZW1TU0lELT5sZW5dID0gJ1wwJzsKIAl3cnEtPmxlbmd0aCA9IHBJdGVtU1NJRC0+bGVuICsgMTsKQEAgLTEwMTYsMjEgKzEwMzIsNyBAQAogCQkJCWJyYXRlID0gYWJ5U3VwcG9ydGVkUmF0ZXNbVHhSYXRlX2l3Y29uZmlnXTsKIAkJCX0KIAkJfSBlbHNlIGJyYXRlID0gMDsKLS8vMjAwNy0wMTE4LTA1LDxNYXJrPiBieSBFaW5zbkxpdQotLy9NYXJrIHRoZSB1bm5lY2Vzc2FyeSBzZW50ZW5jZXMuCi0vKgotICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7Ci0gIGlmIChwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQikKLSAgYnJhdGUgPSAweDE2OwotICBpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUcpCi0gIGJyYXRlID0gMHg2QzsKLSAgaWYgKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKQotICBicmF0ZSA9IDB4NkM7Ci0gIH0KLSovCiAKLS8vCQlpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID09IDEzKQotLy8gICAgICAgICAgICAgICAgYnJhdGUgPSBhYnlTdXBwb3J0ZWRSYXRlc1twRGV2aWNlLT53Q3VycmVudFJhdGVdOwogCQl3cnEtPnZhbHVlID0gYnJhdGUgKiA1MDAwMDA7CiAJCS8vIElmIG1vcmUgdGhhbiBvbmUgcmF0ZSwgc2V0IGF1dG8KIAkJaWYgKHBEZXZpY2UtPmJGaXhSYXRlID09IHRydWUpCkBAIC0xMDU4LDExICsxMDYwLDExIEBACiAJCWludCBydGhyID0gd3JxLT52YWx1ZTsKIAkJaWYgKHdycS0+ZGlzYWJsZWQpCiAJCQlydGhyID0gMjMxMjsKLQkJaWYgKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzEyKSkgeworCisJCWlmICgocnRociA8IDApIHx8IChydGhyID4gMjMxMikpCiAJCQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXBEZXZpY2UtPndSVFNUaHJlc2hvbGQgPSBydGhyOwotCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTYyLDkgKzExNjQsOCBAQAogCQkJcERldmljZS0+YnlMb25nUmV0cnlMaW1pdCA9IHdycS0+dmFsdWU7CiAJCX0KIAl9Ci0JaWYgKHdycS0+ZmxhZ3MgJiBJV19SRVRSWV9MSUZFVElNRSkgeworCWlmICh3cnEtPmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUpCiAJCXBEZXZpY2UtPndNYXhUcmFuc21pdE1TRFVMaWZldGltZSA9IHdycS0+dmFsdWU7Ci0JfQogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTIzNCwxMCArMTIzNSwxMyBAQAogCQl9CiAKIAkJaWYgKGR3S2V5SW5kZXggPCAxICYmICgod3JxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCkpIHsvL3NldCBkZWZhdWx0IGtleQotCQkJaWYgKHBEZXZpY2UtPmJ5S2V5SW5kZXggPCBXTEFOX1dFUF9OS0VZUykgeworCQkJaWYgKHBEZXZpY2UtPmJ5S2V5SW5kZXggPCBXTEFOX1dFUF9OS0VZUykKIAkJCQlkd0tleUluZGV4ID0gcERldmljZS0+YnlLZXlJbmRleDsKLQkJCX0gZWxzZSBkd0tleUluZGV4ID0gMDsKLQkJfSBlbHNlIGR3S2V5SW5kZXgtLTsKKwkJCWVsc2UKKwkJCQlkd0tleUluZGV4ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWR3S2V5SW5kZXgtLTsKKwkJfQogCiAJCS8vIENoZWNrIHRoZSBzaXplIG9mIHRoZSBrZXkKIAkJaWYgKHdycS0+bGVuZ3RoID4gV0xBTl9XRVAyMzJfS0VZTEVOKSB7CkBAIC0xMjYxLDkgKzEyNjUsOCBAQAogCQkJbWVtY3B5KHBEZXZpY2UtPmFieUtleSwgZXh0cmEsIHdycS0+bGVuZ3RoKTsKIAogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiYWJ5S2V5OiAiKTsKLQkJCWZvciAoaWkgPSAwOyBpaSA8IHdycS0+bGVuZ3RoOyBpaSsrKSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCB3cnEtPmxlbmd0aDsgaWkrKykKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIlMDJ4ICIsIHBEZXZpY2UtPmFieUtleVtpaV0pOwotCQkJfQogCiAJCQlpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7CiAJCQkJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CkBAIC0xMzE5LDgyICsxMzIyLDYgQEAKIAl9CiAvL0VuZCBNb2RpZnksRWluc24KIAotLyoKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NTSVdFTkNPREUgXG4iKTsKLQotICAvLyBDaGVjayB0aGUgc2l6ZSBvZiB0aGUga2V5Ci0gIGlmICh3cnEtPmxlbmd0aCA+IFdMQU5fV0VQMjMyX0tFWUxFTikgewotICByYyA9IC1FSU5WQUw7Ci0gIHJldHVybiByYzsKLSAgfQotCi0gIGlmIChkd0tleUluZGV4ID4gV0xBTl9XRVBfTktFWVMpIHsKLSAgcmMgPSAtRUlOVkFMOwotICByZXR1cm4gcmM7Ci0gIH0KLQotICBpZiAoZHdLZXlJbmRleCA+IDApCi0gIGR3S2V5SW5kZXgtLTsKLQotICAvLyBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQKLSAgaWYgKHdycS0+bGVuZ3RoID4gMCkgewotICBpZiAod3JxLT5sZW5ndGggPT0gIFdMQU5fV0VQMjMyX0tFWUxFTikgewotICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTZXQgMjMyIGJpdCB3ZXAga2V5XG4iKTsKLSAgfSBlbHNlIGlmICh3cnEtPmxlbmd0aCA9PSAgV0xBTl9XRVAxMDRfS0VZTEVOKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNldCAxMDQgYml0IHdlcCBrZXlcbiIpOwotICB9IGVsc2UgaWYgKHdycS0+bGVuZ3RoID09IFdMQU5fV0VQNDBfS0VZTEVOKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNldCA0MCBiaXQgd2VwIGtleSwgaW5kZXg9ICVkXG4iLCAoaW50KWR3S2V5SW5kZXgpOwotICB9Ci0gIG1lbXNldChwRGV2aWNlLT5hYnlLZXksIDAsIFdMQU5fV0VQMjMyX0tFWUxFTik7Ci0gIG1lbWNweShwRGV2aWNlLT5hYnlLZXksIGV4dHJhLCB3cnEtPmxlbmd0aCk7Ci0KLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiYWJ5S2V5OiAiKTsKLSAgZm9yIChpaSA9IDA7IGlpIDwgd3JxLT5sZW5ndGg7IGlpKyspIHsKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJTAyeCAiLCBwRGV2aWNlLT5hYnlLZXlbaWldKTsKLSAgfQotCi0gIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKLSAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gIEtleWJTZXREZWZhdWx0S2V5KCYocERldmljZS0+c0tleSksCi0gICh1bnNpZ25lZCBsb25nKShwRGV2aWNlLT5ieUtleUluZGV4IHwgKDEgPDwgMzEpKSwKLSAgcERldmljZS0+dUtleUxlbmd0aCwKLSAgTlVMTCwKLSAgcERldmljZS0+YWJ5S2V5LAotICBLRVlfQ1RMX1dFUCwKLSAgcERldmljZS0+UG9ydE9mZnNldCwKLSAgcERldmljZS0+YnlMb2NhbElECi0pOwotICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICB9Ci0gIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAodW5zaWduZWQgY2hhcilkd0tleUluZGV4OwotICBwRGV2aWNlLT51S2V5TGVuZ3RoID0gd3JxLT5sZW5ndGg7Ci0gIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IHRydWU7Ci0gIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gdHJ1ZTsKLSAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCi0gIC8vIERvIHdlIHdhbnQgdG8ganVzdCBzZXQgdGhlIHRyYW5zbWl0IGtleSBpbmRleCA/Ci0gIGlmIChpbmRleCA8IDQpIHsKLSAgcERldmljZS0+YnlLZXlJbmRleCA9IGluZGV4OwotICB9IGVsc2UgaWYgKCEod3JxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSkgewotICByYyA9IC1FSU5WQUw7Ci0gIHJldHVybiByYzsKLSAgfQotICB9Ci0gIC8vIFJlYWQgdGhlIGZsYWdzCi0gIGlmICh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkRpc2FibGUgV0VQIGZ1bmN0aW9uXG4iKTsKLSAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwotICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IGZhbHNlOwotICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7Ci0gIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKLSAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gIGZvciAodXU9MDsgdXU8TUFYX0tFWV9UQUJMRTsgdXUrKykKLSAgTUFDdkRpc2FibGVLZXlFbnRyeShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCB1dSk7Ci0gIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gIH0KLSAgfQotKi8KLQogCWlmICh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRW5hYmxlIFdFUCAmIFNoYXJlS2V5IFN5c3RlbVxuIik7CiAJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSB0cnVlOwpAQCAtMTQwNiw3NyArMTMzMyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKgotICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBlbmNvZGUgbW9kZQotICovCi0vKgotICBpbnQgaXdjdGxfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gIHN0cnVjdCBpd19wb2ludCAqd3JxLAotICBjaGFyICpleHRyYSkgewotICBQU0RldmljZQkgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpbmV0ZGV2X3ByaXYoZGV2KTsKLSAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwotICBpbnQgcmMgPSAwOwotICBjaGFyIGFieUtleVtXTEFOX1dFUDIzMl9LRVlMRU5dOwotICB1bnNpZ25lZCBpbnQgaW5kZXggPSAodW5zaWduZWQgaW50KSh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKLSAgUFNLZXlJdGVtICAgcEtleSA9IE5VTEw7Ci0KLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdFTkNPREVcbiIpOwotLy8yMDA3LTAyMDctMDYsPEFkZD4gYnkgRWluc25MaXUKLS8vdGhlIGtleSBpbmRleCBpbiBpd2NvbmZpZyBpcyAxLTQgd2hlbiBvdXIgZHJpdmVyIGlzIDAtMwotLy9zbyBpdCBjYW4ndCBiZSB1c2VkIGRpcmVjdGx5LgotLy9pZiB0aGUgaW5kZXggaXMgMCx3ZSBzaG91bGQgdXNlZCB0aGUgaW5kZXggc2V0IGJ5IGRyaXZlci4KLWlmIChpbmRleCA+IFdMQU5fV0VQX05LRVlTKSB7Ci1yYyA9IC1FSU5WQUw7Ci1yZXR1cm4gcmM7Ci19Ci1pZiAoaW5kZXg8MSkgey8vc2V0IGRlZmF1bHQga2V5Ci1pZiAocERldmljZS0+YnlLZXlJbmRleDxXTEFOX1dFUF9OS0VZUykgewotaW5kZXg9cERldmljZS0+YnlLZXlJbmRleDsKLX0KLWVsc2UgaW5kZXg9MDsKLX0gZWxzZSBpbmRleC0tOwotLy9FbmQgQWRkLEVpbnNuCi0KLW1lbXNldChhYnlLZXksIDAsIHNpemVvZihhYnlLZXkpKTsKLS8vIENoZWNrIGVuY3J5cHRpb24gbW9kZQotd3JxLT5mbGFncyA9IElXX0VOQ09ERV9OT0tFWTsKLS8vIElzIFdFUCBlbmFibGVkID8/PwotaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKQotd3JxLT5mbGFncyB8PSAgSVdfRU5DT0RFX0VOQUJMRUQ7Ci1lbHNlCi13cnEtPmZsYWdzIHw9ICBJV19FTkNPREVfRElTQUJMRUQ7Ci0KLWlmIChwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtKQotd3JxLT5mbGFncyB8PSAgSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci1lbHNlCi13cnEtPmZsYWdzIHw9ICBJV19FTkNPREVfT1BFTjsKLQotaWYgKEtleWJHZXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkciwgKHVuc2lnbmVkIGNoYXIpaW5kZXggLCAmcEtleSkpIHsKLXdycS0+bGVuZ3RoID0gcEtleS0+dUtleUxlbmd0aDsKLW1lbWNweShhYnlLZXksIHBLZXktPmFieUtleSwgIHBLZXktPnVLZXlMZW5ndGgpOwotLy8yMDA3LTAyMDctMDYsPE1vZGlmeT4gYnkgRWluc25MaXUKLS8vb25seSBnZXQga2V5IHN1Y2Nlc3MgbmVlZCB0byAgY29weSBkYXRhCi0vL2luZGV4IHNob3VsZCArMS4KLS8vdGhlcmUgaXMgbm90IG5lY2Vzc2FyeSB0byByZXR1cm4gLUVJTlZBTCB3aGVuIGdldCBrZXkgZmFpbGVkCi0vL2lmIHJldHVybiAtRUlOVkFMLHRoZSBlbmNyeXB0aW9uIGl0ZW0gY2FuJ3QgYmUgZGlzcGxheSBieSB0aGUgY29tbWFuZCAiaXdjb25maWciLgotd3JxLT5mbGFncyB8PSBpbmRleCsxOwotbWVtY3B5KGV4dHJhLCAgYWJ5S2V5LCBXTEFOX1dFUDIzMl9LRVlMRU4pOwotfQotCi0vL2Vsc2UgewotLy8gICAgcmMgPSAtRUlOVkFMOwotLy8gICAgIHJldHVybiByYzsKLS8vICB9Ci0KLS8vRW5kIE1vZGlmeSxFaW5zbgotCi1yZXR1cm4gMDsKLX0KLSovCi0KLS8vMjAwOC0wNDA5LTA2LCA8QWRkPiBieSBFaW5zbiBMaXUKLQogaW50IGl3Y3RsX2dpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJICAgIHN0cnVjdCBpd19wb2ludCAqd3JxLApAQCAtMTQ5MSwxNiArMTM0NywxNyBAQAogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdFTkNPREVcbiIpOwogCi0JaWYgKGluZGV4ID4gV0xBTl9XRVBfTktFWVMpIHsKKwlpZiAoaW5kZXggPiBXTEFOX1dFUF9OS0VZUykKIAkJcmV0dXJuCS1FSU5WQUw7Ci0JfQorCiAJaWYgKGluZGV4IDwgMSkgey8vZ2V0IGRlZmF1bHQga2V5Ci0JCWlmIChwRGV2aWNlLT5ieUtleUluZGV4IDwgV0xBTl9XRVBfTktFWVMpIHsKKwkJaWYgKHBEZXZpY2UtPmJ5S2V5SW5kZXggPCBXTEFOX1dFUF9OS0VZUykKIAkJCWluZGV4ID0gcERldmljZS0+YnlLZXlJbmRleDsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCWluZGV4ID0gMDsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlpbmRleC0tOworCX0KIAogCW1lbXNldChhYnlLZXksIDAsIFdMQU5fV0VQMjMyX0tFWUxFTik7CiAJLy8gQ2hlY2sgZW5jcnlwdGlvbiBtb2RlCkBAIC0xNjU3LDM4ICsxNTE0LDM2IEBACiAJc3dpdGNoICh3cnEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewogCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKIAkJd3BhX3ZlcnNpb24gPSB3cnEtPnZhbHVlOwotCQlpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKSB7CisJCWlmICh3cnEtPnZhbHVlID09IElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQpCiAJCQlQUklOVF9LKCJpd2N0bF9zaXdhdXRoOnNldCBXUEFERVYgdG8gZGlzYWJsZSBhdCAxPz8/Pz8/XG4iKTsKLQkJCS8vcERldmljZS0+YldQQURldkVuYWJsZSA9IGZhbHNlOwotCQl9IGVsc2UgaWYgKHdycS0+dmFsdWUgPT0gSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEpIHsKKwkJZWxzZSBpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkKIAkJCVBSSU5UX0soIml3Y3RsX3Npd2F1dGg6c2V0IFdQQURFViB0byBXUEExKioqKioqXG4iKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJUFJJTlRfSygiaXdjdGxfc2l3YXV0aDpzZXQgV1BBREVWIHRvIFdQQTIqKioqKipcbiIpOwotCQl9Ci0JCS8vcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9dHJ1ZTsKKwogCQlicmVhazsKIAljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgogCQlwYWlyd2lzZSA9IHdycS0+dmFsdWU7Ci0JCWlmIChwYWlyd2lzZSA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKSB7CisJCWlmIChwYWlyd2lzZSA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKQogCQkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwotCQl9IGVsc2UgaWYgKHBhaXJ3aXNlID09IElXX0FVVEhfQ0lQSEVSX1RLSVApIHsKKwkJZWxzZSBpZiAocGFpcndpc2UgPT0gSVdfQVVUSF9DSVBIRVJfVEtJUCkKIAkJCXBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKLQkJfSBlbHNlIGlmIChwYWlyd2lzZSA9PSBJV19BVVRIX0NJUEhFUl9XRVA0MCB8fCBwYWlyd2lzZSA9PSBJV19BVVRIX0NJUEhFUl9XRVAxMDQpIHsKKwkJZWxzZSBpZiAocGFpcndpc2UgPT0gSVdfQVVUSF9DSVBIRVJfV0VQNDAgfHwgcGFpcndpc2UgPT0gSVdfQVVUSF9DSVBIRVJfV0VQMTA0KQogCQkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQl9IGVsc2UgaWYgKHBhaXJ3aXNlID09IElXX0FVVEhfQ0lQSEVSX05PTkUpIHsKLQkJCS8vZG8gbm90aGluZyxlaW5zbiBsaXUKLQkJfSBlbHNlIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJZWxzZSBpZiAocGFpcndpc2UgPT0gSVdfQVVUSF9DSVBIRVJfTk9ORSkKKwkJCTsgLyogZG8gbm90aGluZyxlaW5zbiBsaXUgKi8KKwkJZWxzZQorCQkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwogCiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CiAJCWlmICh3cGFfdmVyc2lvbiA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKQogCQkJYnJlYWs7CiAJCWlmIChwYWlyd2lzZSA9PSBJV19BVVRIX0NJUEhFUl9OT05FKSB7Ci0JCQlpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKSB7CisJCQlpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKQogCQkJCXBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCQkJfQogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKQEAgLTE2OTYsMTMgKzE1NTEsMTUgQEAKIAkJaWYgKHdwYV92ZXJzaW9uID09IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikgewogCQkJaWYgKHdycS0+dmFsdWUgPT0gSVdfQVVUSF9LRVlfTUdNVF9QU0spCiAJCQkJcE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX1dQQTJQU0s7Ci0JCQllbHNlIHBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9XUEEyOworCQkJZWxzZQorCQkJCXBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9XUEEyOwogCQl9IGVsc2UgaWYgKHdwYV92ZXJzaW9uID09IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKSB7Ci0JCQlpZiAod3JxLT52YWx1ZSA9PSAwKSB7CisJCQlpZiAod3JxLT52YWx1ZSA9PSAwKQogCQkJCXBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9XUEFOT05FOwotCQkJfSBlbHNlIGlmICh3cnEtPnZhbHVlID09IElXX0FVVEhfS0VZX01HTVRfUFNLKQorCQkJZWxzZSBpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX0tFWV9NR01UX1BTSykKIAkJCQlwTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfV1BBUFNLOwotCQkJZWxzZSBwTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfV1BBOworCQkJZWxzZQorCQkJCXBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9XUEE7CiAJCX0KIAogCQlicmVhazsKQEAgLTE3MTEsMTQgKzE1NjgsMTMgQEAKIAljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKIAkJYnJlYWs7CiAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgeworCQlpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKIAkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKLQkJfSBlbHNlIGlmICh3cnEtPnZhbHVlID09IElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKKwkJZWxzZSBpZiAod3JxLT52YWx1ZSA9PSBJV19BVVRIX0FMR19TSEFSRURfS0VZKQogCQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IHRydWU7Ci0JCX0KKwogCQlicmVhazsKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JCS8vcERldmljZS0+YldQQURldkVuYWJsZSA9ICEhIHdycS0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKIAkJYnJlYWs7CkBAIC0xNzMzLDcgKzE1ODksNiBAQAogCQkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwogCQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwogCQkJcE1nbXQtPmVBdXRoZW5Nb2RlID0gZmFsc2U7Ci0JCQkvL3BEZXZpY2UtPmJXUEFEZXZFbmFibGUgPSBmYWxzZTsKIAkJfQogCiAJCWJyZWFrOwpAQCAtMTc0MSwxNSArMTU5Niw3IEBACiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKIAl9Ci0vKgotICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJ3cGFfdmVyc2lvbiA9ICVkXG4iLHdwYV92ZXJzaW9uKTsKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicGFpcndpc2UgPSAlZFxuIixwYWlyd2lzZSk7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gJWRcbiIscERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMpOwotICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwTWdtdC0+ZUF1dGhlbk1vZGUgID0gJWRcbiIscE1nbXQtPmVBdXRoZW5Nb2RlKTsKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9ICVzXG4iLHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0/InRydWUiOiJmYWxzZSIpOwotICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9ICVzXG4iLHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlPyJ0cnVlIjoiZmFsc2UiKTsKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicERldmljZS0+YldQQURldkVuYWJsZSA9ICVzXG4iLHBEZXZpY2UtPmJXUEFEZXZFbmFibGU/InRydWUiOiJmYWxzZSIpOwotKi8KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4MDgsMTEgKzE2NTUsMTIgQEAKIAlpZiAocE1nbXQtPndXUEFJRUxlbiA+IDApIHsKIAkJd3JxLT5sZW5ndGggPSBwTWdtdC0+d1dQQUlFTGVuOwogCQlpZiAocE1nbXQtPndXUEFJRUxlbiA8PSBzcGFjZSkgewotCQkJaWYgKGNvcHlfdG9fdXNlcihleHRyYSwgcE1nbXQtPmFieVdQQUlFLCBwTWdtdC0+d1dQQUlFTGVuKSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihleHRyYSwgcE1nbXQtPmFieVdQQUlFLCBwTWdtdC0+d1dQQUlFTGVuKSkKIAkJCQlyZXQgPSAtRUZBVUxUOwotCQkJfQotCQl9IGVsc2UKKworCQl9IGVsc2UgewogCQkJcmV0ID0gLUUyQklHOworCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE4MzMsMjEgKzE2ODEsMTUgQEAKIAl1OCAgc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwogCXU4IGtleVs2NF07CiAJc2l6ZV90IHNlcV9sZW4gPSAwLCBrZXlfbGVuID0gMDsKLS8vCi0JLy8gaW50IGlpOwotCXU4ICpidWY7Ci0Jc2l6ZV90IGJsZW47CisKIAl1OCBrZXlfYXJyYXlbNjRdOwogCWludCByZXQgPSAwOwogCiAJUFJJTlRfSygiU0lPQ1NJV0VOQ09ERUVYVC4uLi4uLiBcbiIpOwogCi0JYmxlbiA9IHNpemVvZigqcGFyYW0pOwotCWJ1ZiA9IGttYWxsb2MoKGludClibGVuLCAoaW50KUdGUF9LRVJORUwpOwotCWlmIChidWYgPT0gTlVMTCkKKwlwYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbSksIEdGUF9LRVJORUwpOworCWlmIChwYXJhbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoYnVmLCAwLCBibGVuKTsKLQlwYXJhbSA9IChzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKilidWY7CiAKIC8vcmVjb3ZlciBhbGdfbmFtZQogCXN3aXRjaCAoZXh0LT5hbGcpIHsKQEAgLTE5MDksMTggKzE3NTEsMTggQEAKIC8vKioqKnNldCBpZiBjdXJyZW50IGFjdGlvbiBpcyBOZXR3b3JrIE1hbmFnZXIgY291bnQ/PwogLy8qKioqdGhpcyBtZXRob2QgaXMgc28gZm9vbGlzaCxidXQgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Pz8/CiAJaWYgKHBhcmFtLT51LndwYV9rZXkuYWxnX25hbWUgPT0gV1BBX0FMR19OT05FKSB7Ci0JCWlmIChwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCA9PSAwKSB7CisJCWlmIChwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCA9PSAwKQogCQkJcERldmljZS0+YndleHRjb3VudCsrOwotCQl9Ci0JCWlmICgocERldmljZS0+YndleHRjb3VudCA9PSAxKSAmJiAocGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXggPT0gMSkpIHsKKworCQlpZiAoKHBEZXZpY2UtPmJ3ZXh0Y291bnQgPT0gMSkgJiYgKHBhcmFtLT51LndwYV9rZXkua2V5X2luZGV4ID09IDEpKQogCQkJcERldmljZS0+YndleHRjb3VudCsrOwotCQl9Ci0JCWlmICgocERldmljZS0+YndleHRjb3VudCA9PSAyKSAmJiAocGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXggPT0gMikpIHsKKworCQlpZiAoKHBEZXZpY2UtPmJ3ZXh0Y291bnQgPT0gMikgJiYgKHBhcmFtLT51LndwYV9rZXkua2V5X2luZGV4ID09IDIpKQogCQkJcERldmljZS0+YndleHRjb3VudCsrOwotCQl9Ci0JCWlmICgocERldmljZS0+YndleHRjb3VudCA9PSAzKSAmJiAocGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXggPT0gMykpIHsKKworCQlpZiAoKHBEZXZpY2UtPmJ3ZXh0Y291bnQgPT0gMykgJiYgKHBhcmFtLT51LndwYV9rZXkua2V5X2luZGV4ID09IDMpKQogCQkJcERldmljZS0+YndleHRjb3VudCsrOwotCQl9CisKIAl9CiAJaWYgKHBEZXZpY2UtPmJ3ZXh0Y291bnQgPT0gNCkgewogCQlwcmludGsoIlNJT0NTSVdFTkNPREVFWFQ6RW5hYmxlIFdQQSBXRVhUIFNVUFBPUlQhISEhIVxuIik7CkBAIC0xOTU0LDcgKzE3OTYsNiBAQAogCVBTRGV2aWNlCQkJcERldmljZSA9IChQU0RldmljZSluZXRkZXZfcHJpdihkZXYpOwogCVBTTWdtdE9iamVjdAlwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopZXh0cmE7Ci0JLy91MTYgcmVhc29uID0gY3B1X3RvX2xlMTYobWxtZS0+cmVhc29uX2NvZGUpOwogCWludCByZXQgPSAwOwogCiAJaWYgKG1lbWNtcChwTWdtdC0+YWJ5Q3VyckJTU0lELCBtbG1lLT5hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSkgewpAQCAtMTk4OSw2OSArMTgzMCw2IEBACiAgKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKICAqLwogCi0vKgotICBzdGF0aWMgY29uc3QgaXdfaGFuZGxlcgkJaXdjdGxfaGFuZGxlcltdID0KLSAgewotICAoaXdfaGFuZGxlcikgaXdjdGxfY29tbWl0LCAgICAgIC8vIFNJT0NTSVdDT01NSVQKLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX2dpd25hbWUsICAgICAvLyBTSU9DR0lXTkFNRQotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkJLy8gU0lPQ1NJV05XSUQKLSAgKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8vIFNJT0NHSVdOV0lECi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdmcmVxLAkJLy8gU0lPQ1NJV0ZSRVEKLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX2dpd2ZyZXEsCQkvLyBTSU9DR0lXRlJFUQotICAoaXdfaGFuZGxlcikgaXdjdGxfc2l3bW9kZSwJCS8vIFNJT0NTSVdNT0RFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdtb2RlLAkJLy8gU0lPQ0dJV01PREUKLSAgKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgIC8vIFNJT0NTSVdTRU5TCi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdzZW5zLAkJICAgICAgICAvLyBTSU9DR0lXU0VOUwotICAoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgLy8gU0lPQ1NJV1JBTkdFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdyYW5nZSwJCS8vIFNJT0NHSVdSQU5HRQotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkvLyBTSU9DU0lXUFJJVgotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkvLyBTSU9DR0lXUFJJVgotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkvLyBTSU9DU0lXU1RBVFMKLSAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgLy8gU0lPQ0dJV1NUQVRTCi0gIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIC8vIFNJT0NTSVdTUFkKLSAgKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAvLyBTSU9DR0lXU1BZCi0gIChpd19oYW5kbGVyKSBOVUxMLAkJCQkgICAgLy8gLS0gaG9sZSAtLQotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgIC8vIC0tIGhvbGUgLS0KLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX3Npd2FwLAkJICAgIC8vIFNJT0NTSVdBUAotICAoaXdfaGFuZGxlcikgaXdjdGxfZ2l3YXAsCQkgICAgLy8gU0lPQ0dJV0FQCi0gIChpd19oYW5kbGVyKSBOVUxMLAkJCQkgICAgLy8gLS0gaG9sZSAtLSAweDE2Ci0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdhcGxpc3QsICAgICAgIC8vIFNJT0NHSVdBUExJU1QKLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX3Npd3NjYW4sICAgICAgICAgLy8gU0lPQ1NJV1NDQU4KLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX2dpd3NjYW4sICAgICAgICAgLy8gU0lPQ0dJV1NDQU4KLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX3Npd2Vzc2lkLAkJLy8gU0lPQ1NJV0VTU0lECi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdlc3NpZCwJCS8vIFNJT0NHSVdFU1NJRAotICAoaXdfaGFuZGxlcikgTlVMTCwJCS8vIFNJT0NTSVdOSUNLTgotICAoaXdfaGFuZGxlcikgTlVMTCwJCS8vIFNJT0NHSVdOSUNLTgotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgIC8vIC0tIGhvbGUgLS0KLSAgKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAvLyAtLSBob2xlIC0tCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdyYXRlLAkJLy8gU0lPQ1NJV1JBVEUgMHgyMAotICAoaXdfaGFuZGxlcikgaXdjdGxfZ2l3cmF0ZSwJCS8vIFNJT0NHSVdSQVRFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdydHMsCQkvLyBTSU9DU0lXUlRTCi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdydHMsCQkvLyBTSU9DR0lXUlRTCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdmcmFnLAkJLy8gU0lPQ1NJV0ZSQUcKLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX2dpd2ZyYWcsCQkvLyBTSU9DR0lXRlJBRwotICAoaXdfaGFuZGxlcikgTlVMTCwJCS8vIFNJT0NTSVdUWFBPVwotICAoaXdfaGFuZGxlcikgTlVMTCwJCS8vIFNJT0NHSVdUWFBPVwotICAoaXdfaGFuZGxlcikgaXdjdGxfc2l3cmV0cnksCQkvLyBTSU9DU0lXUkVUUlkKLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX2dpd3JldHJ5LAkJLy8gU0lPQ0dJV1JFVFJZCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdlbmNvZGUsCQkvLyBTSU9DU0lXRU5DT0RFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdlbmNvZGUsCQkvLyBTSU9DR0lXRU5DT0RFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdwb3dlciwJCS8vIFNJT0NTSVdQT1dFUgotICAoaXdfaGFuZGxlcikgaXdjdGxfZ2l3cG93ZXIsCQkvLyBTSU9DR0lXUE9XRVIKLSAgKGl3X2hhbmRsZXIpIE5VTEwsCQkJLy8gLS0gaG9sZSAtLQotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkvLyAtLSBob2xlIC0tCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdnZW5pZSwgICAgLy8gU0lPQ1NJV0dFTklFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9naXdnZW5pZSwgICAgLy8gU0lPQ0dJV0dFTklFCi0gIChpd19oYW5kbGVyKSBpd2N0bF9zaXdhdXRoLAkJLy8gU0lPQ1NJV0FVVEgKLSAgKGl3X2hhbmRsZXIpIGl3Y3RsX2dpd2F1dGgsCQkvLyBTSU9DR0lXQVVUSAotICAoaXdfaGFuZGxlcikgaXdjdGxfc2l3ZW5jb2RlZXh0LAkJLy8gU0lPQ1NJV0VOQ09ERUVYVAotICAoaXdfaGFuZGxlcikgaXdjdGxfZ2l3ZW5jb2RlZXh0LAkJLy8gU0lPQ0dJV0VOQ09ERUVYVAotICAoaXdfaGFuZGxlcikgTlVMTCwJCQkJLy8gU0lPQ1NJV1BNS1NBCi0gIChpd19oYW5kbGVyKSBOVUxMLAkJCQkvLyAtLSBob2xlIC0tCi0KLSAgfTsKLSovCi0KIHN0YXRpYyBjb25zdCBpd19oYW5kbGVyCQlpd2N0bF9oYW5kbGVyW10gPQogewogCShpd19oYW5kbGVyKSBpd2N0bF9jb21taXQsICAgICAgLy8gU0lPQ1NJV0NPTU1JVApAQCAtMjEyOSwxMyArMTkwNyw5IEBACiB7CiAJLmdldF93aXJlbGVzc19zdGF0cyA9ICZpd2N0bF9nZXRfd2lyZWxlc3Nfc3RhdHMsCiAJLm51bV9zdGFuZGFyZAk9IHNpemVvZihpd2N0bF9oYW5kbGVyKS9zaXplb2YoaXdfaGFuZGxlciksCi0vLwkubnVtX3ByaXZhdGUJPSBzaXplb2YoaXdjdGxfcHJpdmF0ZV9oYW5kbGVyKS9zaXplb2YoaXdfaGFuZGxlciksCi0vLwkubnVtX3ByaXZhdGVfYXJncyA9IHNpemVvZihpd2N0bF9wcml2YXRlX2FyZ3MpL3NpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKIAkubnVtX3ByaXZhdGUJPSAwLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gMCwKIAkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKWl3Y3RsX2hhbmRsZXIsCi0vLwkucHJpdmF0ZQk9IChpd19oYW5kbGVyICopIGl3Y3RsX3ByaXZhdGVfaGFuZGxlciwKLS8vCS5wcml2YXRlX2FyZ3MJPSAoc3RydWN0IGl3X3ByaXZfYXJncyAqKWl3Y3RsX3ByaXZhdGVfYXJncywKIAkucHJpdmF0ZQk9IE5VTEwsCiAJLnByaXZhdGVfYXJncwk9IE5VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmMKaW5kZXggNzhiNTgwOS4uMDlhOGJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5jCkBAIC00Niw3ICs0Niw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yNTUsMTEgKzI1NCwxMCBAQAogCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJLZXliU2V0S2V5KFIpOiBcbiIpOwogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicEtleS0+YktleVZhbGlkOiAlZFxuICIsIHBLZXktPmJLZXlWYWxpZCk7Ci0JCQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBLZXktPnVLZXlMZW5ndGg6ICVkXG4gIiwgcEtleS0+dUtleUxlbmd0aCk7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5hYnlLZXk6ICIpOwotCQkJZm9yIChpaSA9IDA7IGlpIDwgcEtleS0+dUtleUxlbmd0aDsgaWkrKykgeworCQkJZm9yIChpaSA9IDA7IGlpIDwgcEtleS0+dUtleUxlbmd0aDsgaWkrKykKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIlMDJ4ICIsIHBLZXktPmFieUtleVtpaV0pOwotCQkJfQorCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJcbiIpOwogCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5kd1RTQzQ3XzE2OiAlbHhcbiAiLCBwS2V5LT5kd1RTQzQ3XzE2KTsKQEAgLTMyMSw5ICszMTksOSBAQAogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5iS2V5VmFsaWQ6ICVkXG4gIiwgcEtleS0+YktleVZhbGlkKTsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicEtleS0+dUtleUxlbmd0aDogJWRcbiAiLCAoaW50KXBLZXktPnVLZXlMZW5ndGgpOwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5hYnlLZXk6ICIpOwotCQlmb3IgKGlpID0gMDsgaWkgPCBwS2V5LT51S2V5TGVuZ3RoOyBpaSsrKSB7CisJCWZvciAoaWkgPSAwOyBpaSA8IHBLZXktPnVLZXlMZW5ndGg7IGlpKyspCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIlMDJ4ICIsIHBLZXktPmFieUtleVtpaV0pOwotCQl9CisKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiXG4iKTsKIAogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5kd1RTQzQ3XzE2OiAlbHhcbiAiLCBwS2V5LT5kd1RTQzQ3XzE2KTsKQEAgLTM2MSw5ICszNTksOSBAQAogCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwYnlCU1NJRCkpIHsKIAkJLy8gZGVsZXRlIGFsbCBrZXlzCiAJCWlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgewotCQkJZm9yIChpID0gMDsgaSA8IE1BWF9LRVlfVEFCTEU7IGkrKykgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9LRVlfVEFCTEU7IGkrKykKIAkJCQlwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IGZhbHNlOwotCQkJfQorCiAJCQlzX3ZDaGVja0tleVRhYmxlVmFsaWQocFRhYmxlLCBkd0lvQmFzZSk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBlbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpIDwgTUFYX0dST1VQX0tFWSkgewpAQCAtNDI5LDkgKzQyNyw5IEBACiAJCWlmIChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSAmJgogCQkgICAgZXRoZXJfYWRkcl9lcXVhbChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELCBwYnlCU1NJRCkpIHsKIAkJCXBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gZmFsc2U7Ci0JCQlmb3IgKHUgPSAwOyB1IDwgTUFYX0dST1VQX0tFWTsgdSsrKSB7CisJCQlmb3IgKHUgPSAwOyB1IDwgTUFYX0dST1VQX0tFWTsgdSsrKQogCQkJCXBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbdV0uYktleVZhbGlkID0gZmFsc2U7Ci0JCQl9CisKIAkJCXBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKIAkJCXNfdkNoZWNrS2V5VGFibGVWYWxpZChwVGFibGUsIGR3SW9CYXNlKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNDgwLDkgKzQ3OCw4IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0dST1VQX0tFWTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9HUk9VUF9LRVk7IGkrKykKIAkJS2V5dlJlbW92ZVdFUEtleShwVGFibGUsIGksIGR3SW9CYXNlKTsKLQl9CiB9CiAKIC8qCkBAIC01MTcsOSArNTE0LDkgQEAKIAogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJLZXliR2V0VHJhbnNtaXRLZXk6Iik7CiAJCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlBBSVJXSVNFX0tFWTogS2V5VGFibGUuYWJ5QlNTSUQ6ICIpOwotCQkJCQlmb3IgKGlpID0gMDsgaWkgPCA2OyBpaSsrKSB7CisJCQkJCWZvciAoaWkgPSAwOyBpaSA8IDY7IGlpKyspCiAJCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIleCAiLCBwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lEW2lpXSk7Ci0JCQkJCX0KKwogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJcbiIpOwogCiAJCQkJCXJldHVybiB0cnVlOwpAQCAtNTM4LDkgKzUzNSw5IEBACiAKIAkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiS2V5YkdldFRyYW5zbWl0S2V5OiIpOwogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJHUk9VUF9LRVk6IEtleVRhYmxlLmFieUJTU0lEXG4iKTsKLQkJCQkJZm9yIChpaSA9IDA7IGlpIDwgNjsgaWkrKykgeworCQkJCQlmb3IgKGlpID0gMDsgaWkgPCA2OyBpaSsrKQogCQkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJXggIiwgcFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRFtpaV0pOwotCQkJCQl9CisKIAkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiXG4iKTsKIAkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHdHVEtleUluZGV4OiAlbFhcbiIsIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4KTsKIApAQCAtNTUzLDkgKzU1MCw5IEBACiAJCX0gLy8gQlNTSUQgbWF0Y2gKIAl9CiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRVJST1I6IE5PIE1hdGNoIEJTU0lEICEhISAiKTsKLQlmb3IgKGlpID0gMDsgaWkgPCA2OyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgNjsgaWkrKykKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJTAyeCAiLCAqKHBieUJTU0lEK2lpKSk7Ci0JfQorCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiXG4iKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC02MjMsMTEgKzYyMCwxMCBAQAogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRW50ZXIgS2V5YlNldERlZmF1bHRLZXk6ICUxeCwgJWQgXG4iLCAoaW50KWR3S2V5SW5kZXgsIChpbnQpdUtleUxlbmd0aCk7CiAKLQlpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsgICAgICAgICAgICAgICAgICAvLyBQYWlyd2lzZSBrZXkKKwlpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIC8vIFBhaXJ3aXNlIGtleQogCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpID49IE1BWF9HUk9VUF9LRVkpIHsKKwllbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpID49IE1BWF9HUk9VUF9LRVkpCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKIAlpZiAodUtleUxlbmd0aCA+IE1BWF9LRVlfTEVOKQogCQlyZXR1cm4gZmFsc2U7CkBAIC02ODUsOSArNjgxLDkgQEAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5iS2V5VmFsaWQ6ICVkXG4iLCBwS2V5LT5iS2V5VmFsaWQpOwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBLZXktPnVLZXlMZW5ndGg6ICVkXG4iLCAoaW50KXBLZXktPnVLZXlMZW5ndGgpOwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBLZXktPmFieUtleTogXG4iKTsKLQlmb3IgKGlpID0gMDsgaWkgPCBwS2V5LT51S2V5TGVuZ3RoOyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgcEtleS0+dUtleUxlbmd0aDsgaWkrKykKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJXgiLCBwS2V5LT5hYnlLZXlbaWldKTsKLQl9CisKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJcbiIpOwogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicEtleS0+ZHdUU0M0N18xNjogJWx4XG4iLCBwS2V5LT5kd1RTQzQ3XzE2KTsKQEAgLTczMSwxMSArNzI3LDEwIEBACiAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJFbnRlciBLZXliU2V0QWxsR3JvdXBLZXk6ICVsWFxuIiwgZHdLZXlJbmRleCk7CiAKLQlpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsgICAgICAgICAgICAgICAgICAvLyBQYWlyd2lzZSBrZXkKKwlpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIC8vIFBhaXJ3aXNlIGtleQogCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpID49IE1BWF9HUk9VUF9LRVkpIHsKKwllbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpID49IE1BWF9HUk9VUF9LRVkpCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0tFWV9UQUJMRSAtIDE7IGkrKykgewogCQlpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UpIHsKQEAgLTc4MSwxNCArNzc2LDEwIEBACiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwS2V5LT5iS2V5VmFsaWQ6ICVkXG4gIiwgcEtleS0+YktleVZhbGlkKTsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBLZXktPnVLZXlMZW5ndGg6ICVkXG4gIiwgKGludClwS2V5LT51S2V5TGVuZ3RoKTsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBLZXktPmFieUtleTogIik7Ci0JCQlmb3IgKGlpID0gMDsgaWkgPCBwS2V5LT51S2V5TGVuZ3RoOyBpaSsrKSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBwS2V5LT51S2V5TGVuZ3RoOyBpaSsrKQogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiUwMnggIiwgcEtleS0+YWJ5S2V5W2lpXSk7Ci0JCQl9Ci0JCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJcbiIpOwogCi0JCQkvL0RCR19QUk5fR1JQMTIoKCJwS2V5LT5kd1RTQzQ3XzE2OiAlbFhcbiAiLCBwS2V5LT5kd1RTQzQ3XzE2KSk7Ci0JCQkvL0RCR19QUk5fR1JQMTIoKCJwS2V5LT53VFNDMTVfMDogJVhcbiAiLCBwS2V5LT53VFNDMTVfMCkpOwotCQkJLy9EQkdfUFJOX0dSUDEyKCgicEtleS0+ZHdLZXlJbmRleDogJWxYXG4gIiwgcEtleS0+ZHdLZXlJbmRleCkpOworCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiXG4iKTsKIAogCQl9IC8vIChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSB0cnVlKQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5oCmluZGV4IDM1NmU2ZGUuLjRiOGI0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuaApAQCAtNzYsOCArNzYsNiBAQAogCXVuc2lnbmVkIGxvbmcgZHdHVEtleUluZGV4OyAgICAgICAgICAgIC8vIEdyb3VwVHJhbnNtaXRLZXkgSW5kZXgKIAlib29sIGJJblVzZTsKIAkvLzIwMDYtMTExNi0wMSw8TW9kaWZ5PiBieSBOb21hZFpoYW8KLQkvL3Vuc2lnbmVkIHNob3J0IHdLZXlDdGw7Ci0JLy9ib29sIGJTb2Z0V0VQOwogCWJvb2wgYlNvZnRXRVA7CiAJdW5zaWduZWQgc2hvcnQgd0tleUN0bDsgICAgICAvLyBmb3IgYWRkcmVzcyBvZiB3S2V5Q3RsIGF0IGFsaWduIDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmMKaW5kZXggMGVjMDc5Zi4uYWY2ODc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5jCkBAIC03NCw3ICs3NCw2IEBACiAKIHVuc2lnbmVkIHNob3J0IFR4UmF0ZV9pd2NvbmZpZzsvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfSU5GTzsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTY0MiwxNiArNjQxLDE0IEBACiAJaW50ICAgICAgICAgaWk7CiAKIAkvLyByZWFkIHBhZ2UwIHJlZ2lzdGVyCi0JZm9yIChpaSA9IDA7IGlpIDwgTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTA7IGlpKyspIHsKKwlmb3IgKGlpID0gMDsgaWkgPCBNQUNfTUFYX0NPTlRFWFRfU0laRV9QQUdFMDsgaWkrKykKIAkJVk5TdkluUG9ydEIoKGR3SW9CYXNlICsgaWkpLCAocGJ5Q3h0QnVmICsgaWkpKTsKLQl9CiAKIAlNQUN2U2VsZWN0UGFnZTEoZHdJb0Jhc2UpOwogCiAJLy8gcmVhZCBwYWdlMSByZWdpc3RlcgotCWZvciAoaWkgPSAwOyBpaSA8IE1BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UxOyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTE7IGlpKyspCiAJCVZOU3ZJblBvcnRCKChkd0lvQmFzZSArIGlpKSwgKHBieUN4dEJ1ZiArIE1BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UwICsgaWkpKTsKLQl9CiAKIAlNQUN2U2VsZWN0UGFnZTAoZHdJb0Jhc2UpOwogfQpAQCAtNjc2LDI1ICs2NzMsMjQgQEAKIAogCU1BQ3ZTZWxlY3RQYWdlMShkd0lvQmFzZSk7CiAJLy8gcmVzdG9yZSBwYWdlMQotCWZvciAoaWkgPSAwOyBpaSA8IE1BQ19NQVhfQ09OVEVYVF9TSVpFX1BBR0UxOyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTE7IGlpKyspCiAJCVZOU3ZPdXRQb3J0QigoZHdJb0Jhc2UgKyBpaSksICoocGJ5Q3h0QnVmICsgTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTAgKyBpaSkpOwotCX0KKwogCU1BQ3ZTZWxlY3RQYWdlMChkd0lvQmFzZSk7CiAKIAkvLyByZXN0b3JlIFJDUixUQ1IsSU1SLi4uCi0JZm9yIChpaSA9IE1BQ19SRUdfUkNSOyBpaSA8IE1BQ19SRUdfSVNSOyBpaSsrKSB7CisJZm9yIChpaSA9IE1BQ19SRUdfUkNSOyBpaSA8IE1BQ19SRUdfSVNSOyBpaSsrKQogCQlWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBpaSwgKihwYnlDeHRCdWYgKyBpaSkpOwotCX0KKwogCS8vIHJlc3RvcmUgTUFDIENvbmZpZy4KLQlmb3IgKGlpID0gTUFDX1JFR19MUlQ7IGlpIDwgTUFDX1JFR19QQUdFMVNFTDsgaWkrKykgeworCWZvciAoaWkgPSBNQUNfUkVHX0xSVDsgaWkgPCBNQUNfUkVHX1BBR0UxU0VMOyBpaSsrKQogCQlWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBpaSwgKihwYnlDeHRCdWYgKyBpaSkpOwotCX0KKwogCVZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfQ0ZHLCAqKHBieUN4dEJ1ZiArIE1BQ19SRUdfQ0ZHKSk7CiAKIAkvLyByZXN0b3JlIFBTIENvbmZpZy4KLQlmb3IgKGlpID0gTUFDX1JFR19QU0NGRzsgaWkgPCBNQUNfUkVHX0JCUkVHQ1RMOyBpaSsrKSB7CisJZm9yIChpaSA9IE1BQ19SRUdfUFNDRkc7IGlpIDwgTUFDX1JFR19CQlJFR0NUTDsgaWkrKykKIAkJVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgaWksICoocGJ5Q3h0QnVmICsgaWkpKTsKLQl9CiAKIAkvLyByZXN0b3JlIENVUlJfUlhfREVTQ19BRERSLCBDVVJSX1RYX0RFU0NfQUREUgogCVZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFQVFIwLCAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19UWERNQVBUUjApKTsKQEAgLTcyOSwyNCArNzI1LDIwIEBACiAKIAkvLyBjb21wYXJlIENVUlJfUlhfREVTQ19BRERSLCBDVVJSX1RYX0RFU0NfQUREUgogCVZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQVBUUjAsICZkd0RhdGEpOwotCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfVFhETUFQVFIwKSkgeworCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfVFhETUFQVFIwKSkKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAogCVZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFQVFIsICZkd0RhdGEpOwotCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfQUMwRE1BUFRSKSkgeworCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfQUMwRE1BUFRSKSkKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAogCVZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjAsICZkd0RhdGEpOwotCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIwKSkgeworCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIwKSkKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAogCVZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjEsICZkd0RhdGEpOwotCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIxKSkgeworCWlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIxKSkKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAogCXJldHVybiB0cnVlOwogfQpAQCAtNzcwLDcgKzc2Miw2IEBACiAJdW5zaWduZWQgc2hvcnQgd3c7CiAKIAkvLyB0dXJuIG9uIEhPU1RDUl9TT0ZUUlNULCBqdXN0IHdyaXRlIDB4MDEgdG8gcmVzZXQKLQkvL01BQ3ZSZWdCaXRzT24oZHdJb0Jhc2UsIE1BQ19SRUdfSE9TVENSLCBIT1NUQ1JfU09GVFJTVCk7CiAJVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19IT1NUQ1IsIDB4MDEpOwogCiAJZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewpAQCAtODA5LDcgKzgwMCw2IEBACiAJTUFDdlNhdmVDb250ZXh0KGR3SW9CYXNlLCBhYnlUbXBSZWdEYXRhKTsKIAkvLyBkbyByZXNldAogCWJSZXRWYWwgPSBNQUNiU29mdHdhcmVSZXNldChkd0lvQmFzZSk7Ci0JLy9CQnZTb2Z0d2FyZVJlc2V0KHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogCS8vIHJlc3RvcmUgTUFDIGNvbnRleHQsIGV4Y2VwdCBDUjAKIAlNQUN2UmVzdG9yZUNvbnRleHQoZHdJb0Jhc2UsIGFieVRtcFJlZ0RhdGEpOwogCkBAIC0xMDIyLDExICsxMDEyLDYgQEAKIAkvLyBkaXNhYmxlIGZvcmNlIFBNRS1lbmFibGUKIAlWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1BNQzEsIFBNRV9PVlIpOwogCS8vIG9ubHkgMzI1MyBBCi0JLyoKLQkgIE1BQ3ZQd3JFdm50RGlzYWJsZShkd0lvQmFzZSk7Ci0JICAvLyBjbGVhciBwb3dlciBzdGF0dXMKLQkgIFZOU3ZPdXRQb3J0Vyhkd0lvQmFzZSArIE1BQ19SRUdfV0FLRVVQU1IwLCAweDBGMEYpOwotCSovCiAKIAkvLyBkbyByZXNldAogCU1BQ2JTb2Z0d2FyZVJlc2V0KGR3SW9CYXNlKTsKQEAgLTEwNjMsMjEgKzEwNDgsMjEgQEAKIAl1bnNpZ25lZCBjaGFyIGJ5T3JnRE1BQ3RsOwogCiAJVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMCwgJmJ5T3JnRE1BQ3RsKTsKLQlpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKSB7CisJaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikKIAkJVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQUNUTDArMiwgRE1BQ1RMX1JVTik7Ci0JfQorCiAJZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewogCQlWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwwLCAmYnlEYXRhKTsKIAkJaWYgKCEoYnlEYXRhICYgRE1BQ1RMX1JVTikpCiAJCQlicmVhazsKIAl9Ci0JaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKKworCWlmICh3dyA9PSBXX01BWF9USU1FT1VUKQogCQlEQkdfUE9SVDgwKDB4MTMpOwotCX0KKwogCVZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFQVFIwLCBkd0N1cnJEZXNjQWRkcik7Ci0JaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikgeworCWlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pCiAJCVZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwwLCBETUFDVExfUlVOKTsKLQl9CiB9CiAKIC8qCkBAIC0xMTAxLDIxICsxMDg2LDIxIEBACiAJdW5zaWduZWQgY2hhciBieU9yZ0RNQUN0bDsKIAogCVZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQUNUTDEsICZieU9yZ0RNQUN0bCk7Ci0JaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikgeworCWlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pCiAJCVZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwxKzIsIERNQUNUTF9SVU4pOwotCX0KKwogCWZvciAod3cgPSAwOyB3dyA8IFdfTUFYX1RJTUVPVVQ7IHd3KyspIHsKIAkJVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMSwgJmJ5RGF0YSk7CiAJCWlmICghKGJ5RGF0YSAmIERNQUNUTF9SVU4pKQogCQkJYnJlYWs7CiAJfQotCWlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CisJaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpCiAJCURCR19QT1JUODAoMHgxNCk7Ci0JfQorCiAJVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjEsIGR3Q3VyckRlc2NBZGRyKTsKLQlpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKSB7CisJaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikKIAkJVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQUNUTDEsIERNQUNUTF9SVU4pOwotCX0KKwogfQogCiAvKgpAQCAtMTEzOSwyMSArMTEyNCwyMCBAQAogCXVuc2lnbmVkIGNoYXIgYnlPcmdETUFDdGw7CiAKIAlWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFDVEwwLCAmYnlPcmdETUFDdGwpOwotCWlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pIHsKKwlpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKQogCQlWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1RYRE1BQ1RMMCsyLCBETUFDVExfUlVOKTsKLQl9CisKIAlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7CiAJCVZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQUNUTDAsICZieURhdGEpOwogCQlpZiAoIShieURhdGEgJiBETUFDVExfUlVOKSkKIAkJCWJyZWFrOwogCX0KLQlpZiAod3cgPT0gV19NQVhfVElNRU9VVCkgeworCWlmICh3dyA9PSBXX01BWF9USU1FT1VUKQogCQlEQkdfUE9SVDgwKDB4MjUpOwotCX0KKwogCVZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFQVFIwLCBkd0N1cnJEZXNjQWRkcik7Ci0JaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikgeworCWlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pCiAJCVZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFDVEwwLCBETUFDVExfUlVOKTsKLQl9CiB9CiAKIC8qCkBAIC0xMTc4LDkgKzExNjIsOSBAQAogCXVuc2lnbmVkIGNoYXIgYnlPcmdETUFDdGw7CiAKIAlWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfQUMwRE1BQ1RMLCAmYnlPcmdETUFDdGwpOwotCWlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pIHsKKwlpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKQogCQlWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQUNUTCsyLCBETUFDVExfUlVOKTsKLQl9CisKIAlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7CiAJCVZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFDVEwsICZieURhdGEpOwogCQlpZiAoIShieURhdGEgJiBETUFDVExfUlVOKSkKQEAgLTExOTEsMTggKzExNzUsMTYgQEAKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIERCR19QT1JUODAoMHgyNilcbiIpOwogCX0KIAlWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQVBUUiwgZHdDdXJyRGVzY0FkZHIpOwotCWlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pIHsKKwlpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKQogCQlWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQUNUTCwgRE1BQ1RMX1JVTik7Ci0JfQogfQogCiB2b2lkIE1BQ3ZTZXRDdXJyVFhEZXNjQWRkcihpbnQgaVR4VHlwZSwgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcikKIHsKLQlpZiAoaVR4VHlwZSA9PSBUWVBFX0FDMERNQSkgeworCWlmIChpVHhUeXBlID09IFRZUEVfQUMwRE1BKQogCQlNQUN2U2V0Q3VyckFDMERlc2NBZGRyRXgoZHdJb0Jhc2UsIGR3Q3VyckRlc2NBZGRyKTsKLQl9IGVsc2UgaWYgKGlUeFR5cGUgPT0gVFlQRV9UWERNQTApIHsKKwllbHNlIGlmIChpVHhUeXBlID09IFRZUEVfVFhETUEwKQogCQlNQUN2U2V0Q3VyclR4MERlc2NBZGRyRXgoZHdJb0Jhc2UsIGR3Q3VyckRlc2NBZGRyKTsKLQl9CiB9CiAKIC8qCkBAIC0xMzkyLDkgKzEzNzQsOSBAQAogCXVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKIAl1bnNpZ25lZCBpbnQgd3c7CiAJLy8gUmVhZCBQU0NUTAotCWlmIChNQUNiSXNSZWdCaXRzT2ZmKGR3SW9CYXNlLCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9QUykpIHsKKwlpZiAoTUFDYklzUmVnQml0c09mZihkd0lvQmFzZSwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFMpKQogCQlyZXR1cm4gdHJ1ZTsKLQl9CisKIAkvLyBEaXNhYmxlIFBTCiAJTUFDdlJlZ0JpdHNPZmYoZHdJb0Jhc2UsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX1BTRU4pOwogCkBAIC0xNTQzLDkgKzE1MjUsOSBAQAogCQlWTlN2T3V0UG9ydFcoZHdJb0Jhc2UgKyBNQUNfUkVHX01JU0NGRkNUTCwgTUlTQ0ZGQ1RMX1dSSVRFKTsKIAl9CiAJZHdEYXRhID0gKnBkd0tleTsKLQlpZiAodUtleUxlbiA9PSBXTEFOX1dFUDEwNF9LRVlMRU4pIHsKKwlpZiAodUtleUxlbiA9PSBXTEFOX1dFUDEwNF9LRVlMRU4pCiAJCWR3RGF0YSB8PSAweDgwMDAwMDAwOwotCX0KKwogCVZOU3ZPdXRQb3J0Vyhkd0lvQmFzZSArIE1BQ19SRUdfTUlTQ0ZGTkRFWCwgd09mZnNldCszKTsKIAlWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01JU0NGRkRBVEEsIGR3RGF0YSk7CiAJVk5Tdk91dFBvcnRXKGR3SW9CYXNlICsgTUFDX1JFR19NSVNDRkZDVEwsIE1JU0NGRkNUTF9XUklURSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuaAppbmRleCA0NjE1ZGIwLi43MzMzYjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmgKQEAgLTEwNDIsNyArMTA0Miw2IEBACiB2b2lkIE1BQ3ZEaXNhYmxlS2V5RW50cnkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCk7CiB2b2lkIE1BQ3ZTZXREZWZhdWx0S2V5RW50cnkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVLZXlMZW4sCiAJCQkgICAgdW5zaWduZWQgaW50IHVLZXlJZHgsIHVuc2lnbmVkIGxvbmcgKnBkd0tleSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpOwotLy92b2lkIE1BQ3ZFbmFibGVEZWZhdWx0S2V5KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKTsKIHZvaWQgTUFDdkRpc2FibGVEZWZhdWx0S2V5KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwogdm9pZCBNQUN2U2V0RGVmYXVsdFRLSVBLZXlFbnRyeSh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgdUtleUxlbiwKIAkJCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuYwppbmRleCA2YTU5NjUyLi4zNjg5NTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmMKQEAgLTE4Nyw3NSArMTg3LDc1IEBACiAKIAlpZiAoYnlSeFJhdGUgPT0gMjIpIHsKIAkJcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxMU0rKzsKLQkJaWYgKGJ5UlNSICYgUlNSX0NSQ09LKSB7CisJCWlmIChieVJTUiAmIFJTUl9DUkNPSykKIAkJCXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTFNQ1JDT2srKzsKLQkJfQorCiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIjExTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjExTSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjExTUNSQ09rLCBieVJTUik7CiAJfSBlbHNlIGlmIChieVJ4UmF0ZSA9PSAxMSkgewogCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNQ1JDT2srKzsKLQkJfQorCiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiA1TTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNU1DUkNPaywgYnlSU1IpOwogCX0gZWxzZSBpZiAoYnlSeFJhdGUgPT0gNCkgewogCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNQ1JDT2srKzsKLQkJfQorCiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiAyTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjJNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk1DUkNPaywgYnlSU1IpOwogCX0gZWxzZSBpZiAoYnlSeFJhdGUgPT0gMikgewogCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNQ1JDT2srKzsKLQkJfQorCiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiAxTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMU1DUkNPaywgYnlSU1IpOwogCX0gZWxzZSBpZiAoYnlSeFJhdGUgPT0gMTIpIHsKIAkJcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I2TSsrOwotCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spIHsKKwkJaWYgKGJ5UlNSICYgUlNSX0NSQ09LKQogCQkJcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I2TUNSQ09rKys7Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgNk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjZNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNk1DUkNPayk7CiAJfSBlbHNlIGlmIChieVJ4UmF0ZSA9PSAxOCkgewogCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNQ1JDT2srKzsKLQkJfQorCiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiA5TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyOU0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I5TUNSQ09rKTsKIAl9IGVsc2UgaWYgKGJ5UnhSYXRlID09IDI0KSB7CiAJCXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTUNSQ09rKys7Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIxMk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjEyTUNSQ09rKTsKIAl9IGVsc2UgaWYgKGJ5UnhSYXRlID09IDM2KSB7CiAJCXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMThNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TUNSQ09rKys7Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIxOE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TUNSQ09rKTsKIAl9IGVsc2UgaWYgKGJ5UnhSYXRlID09IDQ4KSB7CiAJCXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMjRNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjI0TUNSQ09rKys7Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIyNE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjI0TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjI0TUNSQ09rKTsKIAl9IGVsc2UgaWYgKGJ5UnhSYXRlID09IDcyKSB7CiAJCXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TUNSQ09rKys7Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIzNk06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjM2TUNSQ09rKTsKIAl9IGVsc2UgaWYgKGJ5UnhSYXRlID09IDk2KSB7CiAJCXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNDhNKys7Ci0JCWlmIChieVJTUiAmIFJTUl9DUkNPSykgeworCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spCiAJCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TUNSQ09rKys7Ci0JCX0KKwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICI0OE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TUNSQ09rKTsKIAl9IGVsc2UgaWYgKGJ5UnhSYXRlID09IDEwOCkgewogCQlwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjU0TSsrOwotCQlpZiAoYnlSU1IgJiBSU1JfQ1JDT0spIHsKKwkJaWYgKGJ5UlNSICYgUlNSX0NSQ09LKQogCQkJcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1NE1DUkNPaysrOwotCQl9CisKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiNTRNOiBBTExbJWRdLCBPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1NE0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1NE1DUkNPayk7CiAJfSBlbHNlIHsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVW5rbm93bjogVG90YWxbJWRdLCBDUkNPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+ZHdSc3JSeFBhY2tldCsxLCAoaW50KXBTdGF0aXN0aWMtPmR3UnNyQ1JDT2spOwpAQCAtMjg4LDEzICsyODgsMTIgQEAKIAlwU3RhdGlzdGljLT5kd1JzclJ4UGFja2V0Kys7CiAJcFN0YXRpc3RpYy0+ZHdSc3JSeE9jdGV0ICs9IGNiRnJhbWVMZW5ndGg7CiAKLQlpZiAoSVNfVFlQRV9EQVRBKHBieUJ1ZmZlcikpIHsKKwlpZiAoSVNfVFlQRV9EQVRBKHBieUJ1ZmZlcikpCiAJCXBTdGF0aXN0aWMtPmR3UnNyUnhEYXRhKys7Ci0JfSBlbHNlIGlmIChJU19UWVBFX01HTVQocGJ5QnVmZmVyKSkgeworCWVsc2UgaWYgKElTX1RZUEVfTUdNVChwYnlCdWZmZXIpKQogCQlwU3RhdGlzdGljLT5kd1JzclJ4TWFuYWdlKys7Ci0JfSBlbHNlIGlmIChJU19UWVBFX0NPTlRST0wocGJ5QnVmZmVyKSkgeworCWVsc2UgaWYgKElTX1RZUEVfQ09OVFJPTChwYnlCdWZmZXIpKQogCQlwU3RhdGlzdGljLT5kd1JzclJ4Q29udHJvbCsrOwotCX0KIAogCWlmIChieVJTUiAmIFJTUl9BRERSQlJPQUQpCiAJCXBTdGF0aXN0aWMtPmR3UnNyQnJvYWRjYXN0Kys7CkBAIC0zMDYsMjMgKzMwNSwyMiBAQAogCWlmIChXTEFOX0dFVF9GQ19NT1JFRlJBRyhwSGVhZGVyLT53RnJhbWVDdGwpKQogCQlwU3RhdGlzdGljLT5kd1JzclJ4RnJhZ21lbnQrKzsKIAotCWlmIChjYkZyYW1lTGVuZ3RoIDwgRVRIX1pMRU4gKyA0KSB7CisJaWYgKGNiRnJhbWVMZW5ndGggPCBFVEhfWkxFTiArIDQpCiAJCXBTdGF0aXN0aWMtPmR3UnNyUnVudCsrOwotCX0gZWxzZSBpZiAoY2JGcmFtZUxlbmd0aCA9PSBFVEhfWkxFTiArIDQpIHsKKwllbHNlIGlmIChjYkZyYW1lTGVuZ3RoID09IEVUSF9aTEVOICsgNCkKIAkJcFN0YXRpc3RpYy0+ZHdSc3JSeEZybUxlbjY0Kys7Ci0JfSBlbHNlIGlmICgoNjUgPD0gY2JGcmFtZUxlbmd0aCkgJiYgKGNiRnJhbWVMZW5ndGggPD0gMTI3KSkgeworCWVsc2UgaWYgKCg2NSA8PSBjYkZyYW1lTGVuZ3RoKSAmJiAoY2JGcmFtZUxlbmd0aCA8PSAxMjcpKQogCQlwU3RhdGlzdGljLT5kd1JzclJ4RnJtTGVuNjVfMTI3Kys7Ci0JfSBlbHNlIGlmICgoMTI4IDw9IGNiRnJhbWVMZW5ndGgpICYmIChjYkZyYW1lTGVuZ3RoIDw9IDI1NSkpIHsKKwllbHNlIGlmICgoMTI4IDw9IGNiRnJhbWVMZW5ndGgpICYmIChjYkZyYW1lTGVuZ3RoIDw9IDI1NSkpCiAJCXBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW4xMjhfMjU1Kys7Ci0JfSBlbHNlIGlmICgoMjU2IDw9IGNiRnJhbWVMZW5ndGgpICYmIChjYkZyYW1lTGVuZ3RoIDw9IDUxMSkpIHsKKwllbHNlIGlmICgoMjU2IDw9IGNiRnJhbWVMZW5ndGgpICYmIChjYkZyYW1lTGVuZ3RoIDw9IDUxMSkpCiAJCXBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW4yNTZfNTExKys7Ci0JfSBlbHNlIGlmICgoNTEyIDw9IGNiRnJhbWVMZW5ndGgpICYmIChjYkZyYW1lTGVuZ3RoIDw9IDEwMjMpKSB7CisJZWxzZSBpZiAoKDUxMiA8PSBjYkZyYW1lTGVuZ3RoKSAmJiAoY2JGcmFtZUxlbmd0aCA8PSAxMDIzKSkKIAkJcFN0YXRpc3RpYy0+ZHdSc3JSeEZybUxlbjUxMl8xMDIzKys7Ci0JfSBlbHNlIGlmICgoMTAyNCA8PSBjYkZyYW1lTGVuZ3RoKSAmJiAoY2JGcmFtZUxlbmd0aCA8PSBFVEhfRlJBTUVfTEVOICsgNCkpIHsKKwllbHNlIGlmICgoMTAyNCA8PSBjYkZyYW1lTGVuZ3RoKSAmJiAoY2JGcmFtZUxlbmd0aCA8PSBFVEhfRlJBTUVfTEVOICsgNCkpCiAJCXBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW4xMDI0XzE1MTgrKzsKLQl9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPiBFVEhfRlJBTUVfTEVOICsgNCkgeworCWVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPiBFVEhfRlJBTUVfTEVOICsgNCkKIAkJcFN0YXRpc3RpYy0+ZHdSc3JMb25nKys7Ci0JfQogfQogCiAvKgpAQCAtMzk5LDExICszOTcsMTEgQEAKIAl1bnNpZ25lZCBjaGFyIGJ5VFNSMF9OQ1IgPSBieVRTUjAgJiBUU1IwX05DUjsKIAogCXBIZWFkZXIgPSAoUFdMQU5fODAyMTFIRFJfQTQpIHBieUJ1ZmZlcjsKLQlpZiAoV0xBTl9HRVRfRkNfVE9EUyhwSGVhZGVyLT53RnJhbWVDdGwpID09IDApIHsKKwlpZiAoV0xBTl9HRVRfRkNfVE9EUyhwSGVhZGVyLT53RnJhbWVDdGwpID09IDApCiAJCXBieURlc3RBZGRyID0gJihwSGVhZGVyLT5hYnlBZGRyMVswXSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXBieURlc3RBZGRyID0gJihwSGVhZGVyLT5hYnlBZGRyM1swXSk7Ci0JfQorCiAJLy8gaW5jcmVhc2UgdHggcGFja2V0IGNvdW50CiAJcFN0YXRpc3RpYy0+ZHdUc3JUeFBhY2tldFt1SWR4XSsrOwogCXBTdGF0aXN0aWMtPmR3VHNyVHhPY3RldFt1SWR4XSArPSBjYkZyYW1lTGVuZ3RoOwpAQCAtNTA0LDcgKzUwMiw2IEBACiAJdW5zaWduZWQgbG9uZyBkd0NvdW50ZXIKICkKIHsKLQkvL3A4MDJfMTFDb3VudGVyLT5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQKIAlwODAyXzExQ291bnRlci0+TXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3VHNyQnJvYWRjYXN0W1RZUEVfQUMwRE1BXSArCiAJCQkJCQkJCQkgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JCcm9hZGNhc3RbVFlQRV9UWERNQTBdICsKIAkJCQkJCQkJCSAgICAgICBwU3RhdGlzdGljLT5kd1Rzck11bHRpY2FzdFtUWVBFX0FDMERNQV0gKwpAQCAtNTEzLDEyICs1MTAsMTAgQEAKIAlwODAyXzExQ291bnRlci0+UmV0cnlDb3VudCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIChwU3RhdGlzdGljLT5kd1RzclJldHJ5W1RZUEVfQUMwRE1BXSArIHBTdGF0aXN0aWMtPmR3VHNyUmV0cnlbVFlQRV9UWERNQTBdKTsKIAlwODAyXzExQ291bnRlci0+TXVsdGlwbGVSZXRyeUNvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3VHNyTW9yZVRoYW5PbmNlUmV0cnlbVFlQRV9BQzBETUFdICsKIAkJCQkJCQkJICAgcFN0YXRpc3RpYy0+ZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVtUWVBFX1RYRE1BMF0pOwotCS8vcDgwMl8xMUNvdW50ZXItPkZyYW1lRHVwbGljYXRlQ291bnQKIAlwODAyXzExQ291bnRlci0+UlRTU3VjY2Vzc0NvdW50ICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpICAoZHdDb3VudGVyICYgMHgwMDAwMDBmZik7CiAJcDgwMl8xMUNvdW50ZXItPlJUU0ZhaWx1cmVDb3VudCArPSAodW5zaWduZWQgbG9uZyBsb25nKSAoKGR3Q291bnRlciAmIDB4MDAwMGZmMDApID4+IDgpOwogCXA4MDJfMTFDb3VudGVyLT5BQ0tGYWlsdXJlQ291bnQgKz0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKChkd0NvdW50ZXIgJiAweDAwZmYwMDAwKSA+PiAxNik7CiAJcDgwMl8xMUNvdW50ZXItPkZDU0Vycm9yQ291bnQgKz0gICAodW5zaWduZWQgbG9uZyBsb25nKSAoKGR3Q291bnRlciAmIDB4ZmYwMDAwMDApID4+IDI0KTsKLQkvL3A4MDJfMTFDb3VudGVyLT5SZWNlaXZlZEZyYWdtZW50Q291bnQKIAlwODAyXzExQ291bnRlci0+TXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3UnNyQnJvYWRjYXN0ICsKIAkJCQkJCQkJCSAgICBwU3RhdGlzdGljLT5kd1Jzck11bHRpY2FzdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuaAppbmRleCA2Yjk5YzExLi5jMGE1OTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmgKQEAgLTYxLDEwICs2MSw2IEBACiAJdW5zaWduZWQgbG9uZyBsb25nICAgQ0NNUFJlcGxheXM7CiAJdW5zaWduZWQgbG9uZyBsb25nICAgQ0NNUERlY3J5cHRFcnJvcnM7CiAJdW5zaWduZWQgbG9uZyBsb25nICAgRm91cldheUhhbmRzaGFrZUZhaWx1cmVzOwotLy8gICAgdW5zaWduZWQgbG9uZyBsb25nICAgV0VQVW5kZWNyeXB0YWJsZUNvdW50OwotLy8gICAgdW5zaWduZWQgbG9uZyBsb25nICAgV0VQSUNWRXJyb3JDb3VudDsKLS8vICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIERlY3J5cHRTdWNjZXNzQ291bnQ7Ci0vLyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBEZWNyeXB0RmFpbHVyZUNvdW50OwogfSBTRG90MTFDb3VudGVycywgKlBTRG90MTFDb3VudGVyczsKIAogLy8KQEAgLTMwNCwxMCArMzAwLDYgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUeE11bHRpY2FzdEJ5dGVzW1RZUEVfTUFYVERdOwogCXVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFR4RGlyZWN0ZWRCeXRlc1tUWVBFX01BWFREXTsKIAotLy8gICAgdW5zaWduZWQgbG9uZyBkd1R4UmV0cnlDb3VudFs4XTsKLQkvLwotCS8vIElTUiBzdGF0dXMgY291bnQKLQkvLwogCVNJU1JDb3VudGVycyBJU1JTdGF0OwogCiAJU0N1c3RvbUNvdW50ZXJzIEN1c3RvbVN0YXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5jCmluZGV4IGFkZTRjODUuLmVkZWU0ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5jCkBAIC00NywxMCArNDcsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfZHdHZXRVSU5UMzIodW5zaWduZWQgY2hhciAqcCk7ICAgICAgICAgLy8gR2V0IHVuc2lnbmVkIGxvbmcgZnJvbSA0IGJ5dGVzIExTQnl0ZSBmaXJzdAotICBzdGF0aWMgdm9pZCBzX3ZQdXRVSU5UMzIodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOyAvLyBQdXQgdW5zaWduZWQgbG9uZyBpbnRvIDQgYnl0ZXMgTFNCeXRlIGZpcnN0Ci0qLworCiBzdGF0aWMgdm9pZCBzX3ZDbGVhcih2b2lkKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBpbnRlcm5hbCBtZXNzYWdlLAogLy8gcmVzZXRzIHRoZSBvYmplY3QgdG8gdGhlIHN0YXRlIGp1c3QgYWZ0ZXIgY29uc3RydWN0aW9uLgogc3RhdGljIHZvaWQgc192U2V0S2V5KHUzMiAgZHdLMCwgdTMyICBkd0sxKTsKQEAgLTY1LDMwICs2Miw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qCi0gIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfZHdHZXRVSU5UMzIgKHVuc2lnbmVkIGNoYXIgKnApCi0vLyBDb252ZXJ0IGZyb20gdW5zaWduZWQgY2hhciBbXSB0byB1bnNpZ25lZCBsb25nIGluIGEgcG9ydGFibGUgd2F5Ci17Ci11bnNpZ25lZCBsb25nIHJlcyA9IDA7Ci11bnNpZ25lZCBpbnQgaTsKLWZvciAoaT0wOyBpPDQ7IGkrKykKLXsKLQlyZXMgfD0gKCpwKyspIDw8ICg4ICogaSk7Ci19Ci1yZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZCBzX3ZQdXRVSU5UMzIgKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKQotLy8gQ29udmVydCBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gdW5zaWduZWQgY2hhciBbXSBpbiBhIHBvcnRhYmxlIHdheQotewotCXVuc2lnbmVkIGludCBpOwotCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkqcCsrID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgJiAweGZmKTsKLQkJdmFsID4+PSA4OwotCX0KLX0KLSovCi0KIHN0YXRpYyB2b2lkIHNfdkNsZWFyKHZvaWQpCiB7CiAJLy8gUmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBlbXB0eSBtZXNzYWdlLgpAQCAtMTY0LDkgKzEzNyw5IEBACiAJc192QXBwZW5kQnl0ZSgwKTsKIAlzX3ZBcHBlbmRCeXRlKDApOwogCS8vIGFuZCB0aGVuIHplcm9lcyB1bnRpbCB0aGUgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgNAotCXdoaWxlIChuQnl0ZXNJbk0gIT0gMCkgeworCXdoaWxlIChuQnl0ZXNJbk0gIT0gMCkKIAkJc192QXBwZW5kQnl0ZSgwKTsKLQl9CisKIAkvLyBUaGUgc192QXBwZW5kQnl0ZSBmdW5jdGlvbiBoYXMgYWxyZWFkeSBjb21wdXRlZCB0aGUgcmVzdWx0LgogCSpwZHdMID0gTDsKIAkqcGR3UiA9IFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmMKaW5kZXggNGJkMWNjYi4uNWRmYTkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuYwpAQCAtOTUsMTQgKzk1LDEyIEBACiAJaWYgKHdMaXN0ZW5JbnRlcnZhbCA+PSAyKSB7CiAJCS8vIGNsZWFyIGFsd2F5cyBsaXN0ZW4gYmVhY29uCiAJCU1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX0FMQkNOKTsKLQkJLy9wRGV2aWNlLT53Q0ZHICY9IH5DRkdfQUxCOwogCQkvLyBmaXJzdCB0aW1lIHNldCBsaXN0ZW4gbmV4dCBiZWFjb24KIAkJTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9MTkJDTik7CiAJCXBNZ210LT53Q291bnRUb1dha2VVcCA9IHdMaXN0ZW5JbnRlcnZhbDsKIAl9IGVsc2UgewogCQkvLyBhbHdheXMgbGlzdGVuIGJlYWNvbgogCQlNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX0FMQkNOKTsKLQkJLy9wRGV2aWNlLT53Q0ZHIHw9IENGR19BTEI7CiAJCXBNZ210LT53Q291bnRUb1dha2VVcCA9IDA7CiAJfQogCkBAIC0xMTAsMTMgKzEwOCwxMCBAQAogCU1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFNFTik7CiAJcERldmljZS0+YkVuYWJsZVBTTW9kZSA9IHRydWU7CiAKLQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKSB7Ci0vLyAgICAgICAgYk1nclByZXBhcmVCZWFjb25Ub1NlbmQoKHZvaWQgKilwRGV2aWNlLCBwTWdtdCk7Ci0JfQotCS8vIFdlIGRvbid0IHNlbmQgbnVsbCBwa3QgaW4gYWQgaG9jIG1vZGUgc2luY2UgYmVhY29uIHdpbGwgaGFuZGxlIHRoaXMuCi0JZWxzZSBpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0lORlJBU1RSVUNUVVJFKSB7CisJLyogV2UgZG9uJ3Qgc2VuZCBudWxsIHBrdCBpbiBhZCBob2MgbW9kZSBzaW5jZSBiZWFjb24gd2lsbCBoYW5kbGUgdGhpcy4gKi8KKwlpZiAocERldmljZS0+ZU9QTW9kZSAhPSBPUF9NT0RFX0FESE9DICYmIHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9JTkZSQVNUUlVDVFVSRSkKIAkJUFNiU2VuZE51bGxQYWNrZXQocERldmljZSk7Ci0JfQorCiAJcERldmljZS0+YlBXQml0T24gPSB0cnVlOwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlBTOlBvd2VyIFNhdmluZyBNb2RlIEVuYWJsZS4uLiBcbiIpOwogCXJldHVybjsKQEAgLTEzOCw3ICsxMzMsNiBAQAogKQogewogCVBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwotLy8gICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAKIAkvLyBkaXNhYmxlIHBvd2VyIHNhdmluZyBodyBmdW5jdGlvbgogCU1BQ2JQU1dha2V1cChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKQEAgLTE1MSw5ICsxNDUsOSBAQAogCiAJcERldmljZS0+YkVuYWJsZVBTTW9kZSA9IGZhbHNlOwogCi0JaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9JTkZSQVNUUlVDVFVSRSkgeworCWlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpCiAJCVBTYlNlbmROdWxsUGFja2V0KHBEZXZpY2UpOwotCX0KKwogCXBEZXZpY2UtPmJQV0JpdE9uID0gZmFsc2U7CiAJcmV0dXJuOwogfQpAQCAtMjU4LDggKzI1Miw2IEBACiAJLy8gc2VuZCB0aGUgZnJhbWUKIAlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU2VuZCBQUy1Qb2xsIHBhY2tldCBmYWlsZWQuLlxuIik7Ci0JfSBlbHNlIHsKLS8vICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTZW5kIFBTLVBvbGwgcGFja2V0IHN1Y2Nlc3MuLlxuIik7CiAJfQogCiAJcmV0dXJuOwpAQCAtMjg0LDE3ICsyNzYsMTUgQEAKIAlQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAJdW5zaWduZWQgaW50IHVJZHg7CiAKLQlpZiAoIXBEZXZpY2UtPmJMaW5rUGFzcykgeworCWlmICghcERldmljZS0+YkxpbmtQYXNzKQogCQlyZXR1cm4gZmFsc2U7Ci0JfQorCiAjaWZkZWYgVHhJblNsZWVwCi0JaWYgKCFwRGV2aWNlLT5iRW5hYmxlUFNNb2RlICYmICFwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCkgeworCWlmICghcERldmljZS0+YkVuYWJsZVBTTW9kZSAmJiAhcERldmljZS0+ZlR4RGF0YUluU2xlZXApCiAJCXJldHVybiBmYWxzZTsKLQl9CiAjZWxzZQotCWlmICghcERldmljZS0+YkVuYWJsZVBTTW9kZSkgeworCWlmICghcERldmljZS0+YkVuYWJsZVBTTW9kZSkKIAkJcmV0dXJuIGZhbHNlOwotCX0KICNlbmRpZgogCWlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKSB7CiAJCWZvciAodUlkeCA9IDA7IHVJZHggPCBUWVBFX01BWFREOyB1SWR4KyspIHsKQEAgLTMyMyw5ICszMTMsOCBAQAogKSk7CiAJfQogCi0JaWYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7CisJaWYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0lCU1NfU1RBKQogCQlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLndGcmFtZUN0bCB8PSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpV0xBTl9TRVRfRkNfVE9EUygxKSk7Ci0JfQogCiAJbWVtY3B5KHBUeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEsIHBNZ210LT5hYnlDdXJyQlNTSUQsIFdMQU5fQUREUl9MRU4pOwogCW1lbWNweShwVHhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIyLCBwTWdtdC0+YWJ5TUFDQWRkciwgV0xBTl9BRERSX0xFTik7CkBAIC0zMzYsOCArMzI1LDYgQEAKIAlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU2VuZCBOdWxsIFBhY2tldCBmYWlsZWQgIVxuIik7CiAJCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotLy8gICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTZW5kIE51bGwgUGFja2V0IHN1Y2Nlc3MuLi4uXG4iKTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM2Myw5ICszNTAsOCBAQAogCWJvb2wgYldha2VVcCA9IGZhbHNlOwogCiAJaWYgKHBNZ210LT53TGlzdGVuSW50ZXJ2YWwgPj0gMikgewotCQlpZiAocE1nbXQtPndDb3VudFRvV2FrZVVwID09IDApIHsKKwkJaWYgKHBNZ210LT53Q291bnRUb1dha2VVcCA9PSAwKQogCQkJcE1nbXQtPndDb3VudFRvV2FrZVVwID0gcE1nbXQtPndMaXN0ZW5JbnRlcnZhbDsKLQkJfQogCiAJCXBNZ210LT53Q291bnRUb1dha2VVcC0tOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmgKaW5kZXggMzM3ZGQ2NS4uY2U1NjEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuaApAQCAtNDIsOSArNDIsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vLyBQU0RldmljZSBwRGV2aWNlCi0vLyBQU0RldmljZSBoRGV2aWNlQ29udGV4dAotCiBib29sCiBQU2JDb25zaWRlclBvd2VyRG93bigKIAl2b2lkICpoRGV2aWNlQ29udGV4dCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuYwppbmRleCBlZGIxYjI3Li45OWM4OWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5jCkBAIC0zOSw4ICszOSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87Ci0KICNkZWZpbmUgQllfQUwyMjMwX1JFR19MRU4gICAgIDIzIC8vMjRiaXQKICNkZWZpbmUgQ0JfQUwyMjMwX0lOSVRfU0VRICAgIDE1CiAjZGVmaW5lIFNXSVRDSF9DSEFOTkVMX0RFTEFZX0FMMjIzMCAyMDAgLy91cwpAQCAtMTgzLDcgKzE4MSw2IEBACiAJMHg4NDFGRjIwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIE5lZWQgbW9kaWZ5IGZvciAxMWE6IDQ1MUZFMgogCTB4M0ZERkEzMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBOZWVkIG1vZGlmeSBmb3IgMTFhOiA1RkRGQTMKIAkweDdGRDc4NDAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gMTFiL2cgICAgLy8gTmVlZCBtb2RpZnkgZm9yIDExYQotCS8vMHg4MDJCNDUwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIE5lZWQgbW9kaWZ5IGZvciAxMWE6IDhEMUI0NQogCS8vIFJvYmVyWXU6MjAwNTAxMTMsIFJldjAuNDcgUmVnc2l0ZXIgU2V0dGluZyBHdWlkZQogCTB4ODAyQjU1MDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBOZWVkIG1vZGlmeSBmb3IgMTFhOiA4RDFCNTUKIAkweDU2QUYzNjAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywKQEAgLTE5Miw3ICsxODksNiBAQAogCTB4MjIxQkI5MDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLAogCTB4RTAwMDBBMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBOZWVkIG1vZGlmeSBmb3IgMTFhOiBFMDYwMEEKIAkweDA4MDMxQjAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gaW5pdCAweDA4MEIxQjAwID0+IDB4MDgwRjFCMDAgZm9yIDMgd2lyZSBjb250cm9sIFR4R2FpbihEMTApCi0JLy8weDAwMDkzQzAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gTmVlZCBtb2RpZnkgZm9yIDExYTogMDAxNDNDCiAJLy8gUm9iZXJZdToyMDA1MDExMywgUmV2MC40NyBSZWdzaXRlciBTZXR0aW5nIEd1aWRlCiAJMHgwMDBBM0MwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIE5lZWQgbW9kaWZ5IGZvciAxMWE6IDAwMTQzQwogCTB4RkZGRkZEMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLApAQCAtNTg1LDEwICs1ODEsOSBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKLS8vICAgICAgICBEQkdfUE9SVDgwX0FMV0FZUygweDMyKTsKKwlpZiAod3cgPT0gV19NQVhfVElNRU9VVCkKIAkJcmV0dXJuIGZhbHNlOwotCX0KKwogCXJldHVybiB0cnVlOwogfQogCkBAIC04MzksMTMgKzgzNCwxMiBAQAogCiAJCWJ5SW5pdENvdW50ID0gQ0JfQUwyMjMwX0lOSVRfU0VRICsgMjsgLy8gSW5pdCBSZWcgKyBDaGFubmVsIFJlZyAoMikKIAkJYnlTbGVlcENvdW50ID0gMDsKLQkJaWYgKGJ5SW5pdENvdW50ID4gKE1JU0NGSUZPX1NZTkRBVEFTSVpFIC0gYnlTbGVlcENvdW50KSkgeworCQlpZiAoYnlJbml0Q291bnQgPiAoTUlTQ0ZJRk9fU1lOREFUQVNJWkUgLSBieVNsZWVwQ291bnQpKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAKLQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfQUwyMjMwX0lOSVRfU0VROyBpaSsrKSB7CisJCWZvciAoaWkgPSAwOyBpaSA8IENCX0FMMjIzMF9JTklUX1NFUTsgaWkrKykKIAkJCU1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKHVuc2lnbmVkIHNob3J0KShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDIyMzBJbml0VGFibGVbaWldKTsKLQkJfQorCiAJCU1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKHVuc2lnbmVkIHNob3J0KShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDIyMzBDaGFubmVsVGFibGUwW3VDaGFubmVsLTFdKTsKIAkJaWkrKzsKIAkJTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMMjIzMENoYW5uZWxUYWJsZTFbdUNoYW5uZWwtMV0pOwpAQCAtODU2LDE4ICs4NTAsMTUgQEAKIAljYXNlIFJGX0FJUk9IQTcyMzA6CiAJCWJ5SW5pdENvdW50ID0gQ0JfQUw3MjMwX0lOSVRfU0VRICsgMzsgLy8gSW5pdCBSZWcgKyBDaGFubmVsIFJlZyAoMykKIAkJYnlTbGVlcENvdW50ID0gMDsKLQkJaWYgKGJ5SW5pdENvdW50ID4gKE1JU0NGSUZPX1NZTkRBVEFTSVpFIC0gYnlTbGVlcENvdW50KSkgeworCQlpZiAoYnlJbml0Q291bnQgPiAoTUlTQ0ZJRk9fU1lOREFUQVNJWkUgLSBieVNsZWVwQ291bnQpKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAKIAkJaWYgKHVDaGFubmVsIDw9IENCX01BWF9DSEFOTkVMXzI0RykgewotCQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfQUw3MjMwX0lOSVRfU0VROyBpaSsrKSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9BTDcyMzBfSU5JVF9TRVE7IGlpKyspCiAJCQkJTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMEluaXRUYWJsZVtpaV0pOwotCQkJfQogCQl9IGVsc2UgewotCQkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfQUw3MjMwX0lOSVRfU0VROyBpaSsrKSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9BTDcyMzBfSU5JVF9TRVE7IGlpKyspCiAJCQkJTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMEluaXRUYWJsZUFNb2RlW2lpXSk7Ci0JCQl9CiAJCX0KIAogCQlNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMFt1Q2hhbm5lbC0xXSk7CkBAIC05MTYsMTIgKzkwNywxMSBAQAogCXVuc2lnbmVkIGNoYXIgYnlEZWMgPSAwOwogCXVuc2lnbmVkIGNoYXIgYnlQd3JkQm0gPSAwOwogCi0JaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHsKKwlpZiAocERldmljZS0+ZHdEaWFnUmVmQ291bnQgIT0gMCkKIAkJcmV0dXJuIHRydWU7Ci0JfQotCWlmICgodUNIIDwgMSkgfHwgKHVDSCA+IENCX01BWF9DSEFOTkVMKSkgeworCisJaWYgKCh1Q0ggPCAxKSB8fCAodUNIID4gQ0JfTUFYX0NIQU5ORUwpKQogCQlyZXR1cm4gZmFsc2U7Ci0JfQogCiAJc3dpdGNoICh1UkFURSkgewogCWNhc2UgUkFURV8xTToKQEAgLTkzMCwyMiArOTIwLDE5IEBACiAJY2FzZSBSQVRFXzExTToKIAkJYnlQd3IgPSBwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbdUNIXTsKIAkJYnlQd3JkQm0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW3VDSF07Ci0vL1BMSUNFX0RFQlVHLT4KLQkJLy9ieVB3cis9NTsKLS8vUExJQ0VfREVCVUcgPC0KIAkJYnJlYWs7CiAJY2FzZSBSQVRFXzZNOgogCWNhc2UgUkFURV85TToKIAljYXNlIFJBVEVfMThNOgogCQlieVB3ciA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbdUNIXTsKLQkJaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX1VXMjQ1MikgeworCQlpZiAocERldmljZS0+YnlSRlR5cGUgPT0gUkZfVVcyNDUyKQogCQkJYnlEZWMgPSBieVB3ciArIDE0OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlieURlYyA9IGJ5UHdyICsgMTA7Ci0JCX0KLQkJaWYgKGJ5RGVjID49IHBEZXZpY2UtPmJ5TWF4UHdyTGV2ZWwpIHsKKworCQlpZiAoYnlEZWMgPj0gcERldmljZS0+YnlNYXhQd3JMZXZlbCkKIAkJCWJ5RGVjID0gcERldmljZS0+YnlNYXhQd3JMZXZlbC0xOwotCQl9CisKIAkJaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX1VXMjQ1MikgewogCQkJYnlQd3JkQm0gPSBieURlYyAtIGJ5UHdyOwogCQkJYnlQd3JkQm0gLz0gMzsKQEAgLTk1MywxMSArOTQwLDkgQEAKIAkJCWJ5UHdyZEJtID0gYnlEZWMgLSBieVB3cjsKIAkJCWJ5UHdyZEJtID4+PSAxOwogCQl9CisKIAkJYnlQd3JkQm0gKz0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbdUNIXTsKIAkJYnlQd3IgPSBieURlYzsKLS8vUExJQ0VfREVCVUctPgotCQkvL2J5UHdyKz01OwotLy9QTElDRV9ERUJVRzwtCiAJCWJyZWFrOwogCWNhc2UgUkFURV8yNE06CiAJY2FzZSBSQVRFXzM2TToKQEAgLTk2NSwyMCArOTUwLDE2IEBACiAJY2FzZSBSQVRFXzU0TToKIAkJYnlQd3IgPSBwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW3VDSF07CiAJCWJ5UHdyZEJtID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbdUNIXTsKLS8vUExJQ0VfREVCVUctPgotCQkvL2J5UHdyKz01OwotLy9QTElDRV9ERUJVRzwtCiAJCWJyZWFrOwogCX0KIAotCWlmIChwRGV2aWNlLT5ieUN1clB3ciA9PSBieVB3cikgeworCWlmIChwRGV2aWNlLT5ieUN1clB3ciA9PSBieVB3cikKIAkJcmV0dXJuIHRydWU7Ci0JfQogCiAJYlJlc3VsdCA9IFJGYlJhd1NldFBvd2VyKHBEZXZpY2UsIGJ5UHdyLCB1UkFURSk7Ci0JaWYgKGJSZXN1bHQpIHsKKwlpZiAoYlJlc3VsdCkKIAkJcERldmljZS0+YnlDdXJQd3IgPSBieVB3cjsKLQl9CisKIAlyZXR1cm4gYlJlc3VsdDsKIH0KIApAQCAtMTAwNSwxNyArOTg2LDE3IEBACiAJYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKIAl1bnNpZ25lZCBsb25nIGR3TWF4NzIzMFB3ciA9IDA7CiAKLQlpZiAoYnlQd3IgPj0gIHBEZXZpY2UtPmJ5TWF4UHdyTGV2ZWwpIHsKKwlpZiAoYnlQd3IgPj0gIHBEZXZpY2UtPmJ5TWF4UHdyTGV2ZWwpCiAJCXJldHVybiBmYWxzZTsKLQl9CisKIAlzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CiAJY2FzZSBSRl9BSVJPSEE6CiAJCWJSZXN1bHQgJj0gSUZSRmJXcml0ZUVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIGR3QUwyMjMwUG93ZXJUYWJsZVtieVB3cl0pOwotCQlpZiAodVJBVEUgPD0gUkFURV8xMU0pIHsKKwkJaWYgKHVSQVRFIDw9IFJBVEVfMTFNKQogCQkJYlJlc3VsdCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHgwMDAxQjQwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1cpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQliUmVzdWx0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDAwMDVBNDAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyk7Ci0JCX0KKwogCQlicmVhazsKIAogCWNhc2UgUkZfQUwyMjMwUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKaW5kZXggYzI2NTNlYi4uMjIxOWQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKQEAgLTY4LDcgKzY4LDYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfSU5GTzsKIAogI2RlZmluZQlQTElDRV9ERUJVRwpAQCAtMjMwLDE0ICsyMjksMTQgQEAKIAkJKnBkd0lWIHw9ICh1bnNpZ25lZCBsb25nKWJ5S2V5SW5kZXggPDwgMzA7CiAJCSpwZHdJViA9IGNwdV90b19sZTMyKCpwZHdJVik7CiAJCXBEZXZpY2UtPmR3SVZDb3VudGVyKys7Ci0JCWlmIChwRGV2aWNlLT5kd0lWQ291bnRlciA+IFdFUF9JVl9NQVNLKSB7CisJCWlmIChwRGV2aWNlLT5kd0lWQ291bnRlciA+IFdFUF9JVl9NQVNLKQogCQkJcERldmljZS0+ZHdJVkNvdW50ZXIgPSAwOwotCQl9CisKIAl9IGVsc2UgaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApIHsKIAkJcFRyYW5zbWl0S2V5LT53VFNDMTVfMCsrOwotCQlpZiAocFRyYW5zbWl0S2V5LT53VFNDMTVfMCA9PSAwKSB7CisJCWlmIChwVHJhbnNtaXRLZXktPndUU0MxNV8wID09IDApCiAJCQlwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYrKzsKLQkJfQorCiAJCVRLSVB2TWl4S2V5KHBUcmFuc21pdEtleS0+YWJ5S2V5LCBwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkciwKIAkJCSAgICBwVHJhbnNtaXRLZXktPndUU0MxNV8wLCBwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYsIHBEZXZpY2UtPmFieVBSTkcpOwogCQltZW1jcHkocGJ5QnVmLCBwRGV2aWNlLT5hYnlQUk5HLCAxNik7CkBAIC0yNTEsOSArMjUwLDkgQEAKIAogCX0gZWxzZSBpZiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfQ0NNUCkgewogCQlwVHJhbnNtaXRLZXktPndUU0MxNV8wKys7Ci0JCWlmIChwVHJhbnNtaXRLZXktPndUU0MxNV8wID09IDApIHsKKwkJaWYgKHBUcmFuc21pdEtleS0+d1RTQzE1XzAgPT0gMCkKIAkJCXBUcmFuc21pdEtleS0+ZHdUU0M0N18xNisrOwotCQl9CisKIAkJbWVtY3B5KHBieUJ1ZiwgcFRyYW5zbWl0S2V5LT5hYnlLZXksIDE2KTsKIAogCQkvLyBNYWtlIElWCkBAIC0yNzgsMTEgKzI3NywxMSBAQAogCiAJCS8vRmlsbCBNSUNIRFIxCiAJCSooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxNikpID0gMDsgLy8gSExFTlsxNTo4XQotCQlpZiAocERldmljZS0+YkxvbmdIZWFkZXIpIHsKKwkJaWYgKHBEZXZpY2UtPmJMb25nSGVhZGVyKQogCQkJKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzE3KSkgPSAyODsgLy8gSExFTls3OjBdCi0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCSooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxNykpID0gMjI7IC8vIEhMRU5bNzowXQotCQl9CisKIAkJd1ZhbHVlID0gY3B1X3RvX2xlMTYocE1BQ0hlYWRlci0+d0ZyYW1lQ3RsICYgMHhDNzhGKTsKIAkJbWVtY3B5KHBNSUNIRFIrMTgsICh1bnNpZ25lZCBjaGFyICopJndWYWx1ZSwgMik7IC8vIE1TS0ZSQUNUTAogCQltZW1jcHkocE1JQ0hEUisyMCwgJihwTUFDSGVhZGVyLT5hYnlBZGRyMVswXSksIDYpOwpAQCAtMjk0LDkgKzI5Myw5IEBACiAJCXdWYWx1ZSAmPSAweDAwMEY7CiAJCXdWYWx1ZSA9IGNwdV90b19sZTE2KHdWYWx1ZSk7CiAJCW1lbWNweShwTUlDSERSKzM4LCAodW5zaWduZWQgY2hhciAqKSZ3VmFsdWUsIDIpOyAvLyBNU0tTRVFDVEwKLQkJaWYgKHBEZXZpY2UtPmJMb25nSGVhZGVyKSB7CisJCWlmIChwRGV2aWNlLT5iTG9uZ0hlYWRlcikKIAkJCW1lbWNweShwTUlDSERSKzQwLCAmKHBNQUNIZWFkZXItPmFieUFkZHI0WzBdKSwgNik7Ci0JCX0KKwogCX0KIH0KIApAQCAtMzU5LDE3ICszNTgsMTUgQEAKIAl1bnNpZ25lZCBpbnQgdURhdGFUaW1lLCB1QWNrVGltZTsKIAogCXVEYXRhVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3UmF0ZSk7Ci0JaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQikgey8vbGxiLENDSyBtb2RlCisJaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQikgLy9sbGIsQ0NLIG1vZGUKIAkJdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSk7Ci0JfSBlbHNlIHsvLzExZyAyLjRHIE9GRE0gbW9kZSAmIDExYSA1RyBPRkRNIG1vZGUKKwllbHNlIC8vMTFnIDIuNEcgT0ZETSBtb2RlICYgMTFhIDVHIE9GRE0gbW9kZQogCQl1QWNrVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCAxNCwgKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSk7Ci0JfQogCi0JaWYgKGJOZWVkQWNrKSB7CisJaWYgKGJOZWVkQWNrKQogCQlyZXR1cm4gdURhdGFUaW1lICsgcERldmljZS0+dVNJRlMgKyB1QWNrVGltZTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dXJuIHVEYXRhVGltZTsKLQl9CiB9CiAKIC8vYnlGcmVxVHlwZTogMD0+NUdIWiAxPT4yLjRHSFoKQEAgLTQyOSw5ICs0MjYsOCBAQAogCWJvb2wgYkxhc3RGcmFnID0gMDsKIAl1bnNpZ25lZCBpbnQgdUFja1RpbWUgPSAwLCB1TmV4dFBrdFRpbWUgPSAwOwogCi0JaWYgKHVGcmFnSWR4ID09ICh1TUFDZnJhZ051bS0xKSkgeworCWlmICh1RnJhZ0lkeCA9PSAodU1BQ2ZyYWdOdW0tMSkpCiAJCWJMYXN0RnJhZyA9IDE7Ci0JfQogCiAJc3dpdGNoIChieUR1clR5cGUpIHsKIAljYXNlIERBVEFEVVJfQjogICAgLy9EQVRBRFVSX0IKQEAgLTQ0MywxMSArNDM5LDExIEBACiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0gZWxzZSB7Ly9GaXJzdCBGcmFnIG9yIE1pZCBGcmFnCi0JCQlpZiAodUZyYWdJZHggPT0gKHVNQUNmcmFnTnVtLTIpKSB7CisJCQlpZiAodUZyYWdJZHggPT0gKHVNQUNmcmFnTnVtLTIpKQogCQkJCXVOZXh0UGt0VGltZSA9IHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiTGFzdEZyYWdtZW50U2l6ZSwgd1JhdGUsIGJOZWVkQWNrKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJdU5leHRQa3RUaW1lID0gc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZUxlbmd0aCwgd1JhdGUsIGJOZWVkQWNrKTsKLQkJCX0KKwogCQkJaWYgKGJOZWVkQWNrKSB7CiAJCQkJdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlKTsKIAkJCQlyZXR1cm4gcERldmljZS0+dVNJRlMgKyB1QWNrVGltZSArIHVOZXh0UGt0VGltZTsKQEAgLTQ2NiwxMSArNDYyLDExIEBACiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0gZWxzZSB7Ly9GaXJzdCBGcmFnIG9yIE1pZCBGcmFnCi0JCQlpZiAodUZyYWdJZHggPT0gKHVNQUNmcmFnTnVtLTIpKSB7CisJCQlpZiAodUZyYWdJZHggPT0gKHVNQUNmcmFnTnVtLTIpKQogCQkJCXVOZXh0UGt0VGltZSA9IHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiTGFzdEZyYWdtZW50U2l6ZSwgd1JhdGUsIGJOZWVkQWNrKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJdU5leHRQa3RUaW1lID0gc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZUxlbmd0aCwgd1JhdGUsIGJOZWVkQWNrKTsKLQkJCX0KKwogCQkJaWYgKGJOZWVkQWNrKSB7CiAJCQkJdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSk7CiAJCQkJcmV0dXJuIHBEZXZpY2UtPnVTSUZTICsgdUFja1RpbWUgKyB1TmV4dFBrdFRpbWU7CkBAIC00OTUsMjIgKzQ5MSwyMiBAQAogCQkJCWVsc2UgaWYgKHdSYXRlID4gUkFURV81NE0pCiAJCQkJCXdSYXRlID0gUkFURV81NE07CiAKLQkJCQlpZiAodUZyYWdJZHggPT0gKHVNQUNmcmFnTnVtLTIpKSB7CisJCQkJaWYgKHVGcmFnSWR4ID09ICh1TUFDZnJhZ051bS0yKSkKIAkJCQkJdU5leHRQa3RUaW1lID0gc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JMYXN0RnJhZ21lbnRTaXplLCB3RkJfT3B0MFtGQl9SQVRFMF1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCQkJfSBlbHNlIHsKKwkJCQllbHNlCiAJCQkJCXVOZXh0UGt0VGltZSA9IHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdGQl9PcHQwW0ZCX1JBVEUwXVt3UmF0ZS1SQVRFXzE4TV0sIGJOZWVkQWNrKTsKLQkJCQl9CisKIAkJCX0gZWxzZSB7IC8vIChieUZCT3B0aW9uID09IEFVVE9fRkJfMSkKIAkJCQlpZiAod1JhdGUgPCBSQVRFXzE4TSkKIAkJCQkJd1JhdGUgPSBSQVRFXzE4TTsKIAkJCQllbHNlIGlmICh3UmF0ZSA+IFJBVEVfNTRNKQogCQkJCQl3UmF0ZSA9IFJBVEVfNTRNOwogCi0JCQkJaWYgKHVGcmFnSWR4ID09ICh1TUFDZnJhZ051bS0yKSkgeworCQkJCWlmICh1RnJhZ0lkeCA9PSAodU1BQ2ZyYWdOdW0tMikpCiAJCQkJCXVOZXh0UGt0VGltZSA9IHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiTGFzdEZyYWdtZW50U2l6ZSwgd0ZCX09wdDFbRkJfUkFURTBdW3dSYXRlLVJBVEVfMThNXSwgYk5lZWRBY2spOwotCQkJCX0gZWxzZSB7CisJCQkJZWxzZQogCQkJCQl1TmV4dFBrdFRpbWUgPSBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MVtGQl9SQVRFMF1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCQkJfQorCiAJCQl9CiAKIAkJCWlmIChiTmVlZEFjaykgewpAQCAtNTM3LDExICs1MzMsMTAgQEAKIAkJCQllbHNlIGlmICh3UmF0ZSA+IFJBVEVfNTRNKQogCQkJCQl3UmF0ZSA9IFJBVEVfNTRNOwogCi0JCQkJaWYgKHVGcmFnSWR4ID09ICh1TUFDZnJhZ051bS0yKSkgeworCQkJCWlmICh1RnJhZ0lkeCA9PSAodU1BQ2ZyYWdOdW0tMikpCiAJCQkJCXVOZXh0UGt0VGltZSA9IHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiTGFzdEZyYWdtZW50U2l6ZSwgd0ZCX09wdDBbRkJfUkFURTFdW3dSYXRlLVJBVEVfMThNXSwgYk5lZWRBY2spOwotCQkJCX0gZWxzZSB7CisJCQkJZWxzZQogCQkJCQl1TmV4dFBrdFRpbWUgPSBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MFtGQl9SQVRFMV1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCQkJfQogCiAJCQl9IGVsc2UgeyAvLyAoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzEpCiAJCQkJaWYgKHdSYXRlIDwgUkFURV8xOE0pCkBAIC01NDksMTEgKzU0NCwxMCBAQAogCQkJCWVsc2UgaWYgKHdSYXRlID4gUkFURV81NE0pCiAJCQkJCXdSYXRlID0gUkFURV81NE07CiAKLQkJCQlpZiAodUZyYWdJZHggPT0gKHVNQUNmcmFnTnVtLTIpKSB7CisJCQkJaWYgKHVGcmFnSWR4ID09ICh1TUFDZnJhZ051bS0yKSkKIAkJCQkJdU5leHRQa3RUaW1lID0gc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JMYXN0RnJhZ21lbnRTaXplLCB3RkJfT3B0MVtGQl9SQVRFMV1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCQkJfSBlbHNlIHsKKwkJCQllbHNlCiAJCQkJCXVOZXh0UGt0VGltZSA9IHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdGQl9PcHQxW0ZCX1JBVEUxXVt3UmF0ZS1SQVRFXzE4TV0sIGJOZWVkQWNrKTsKLQkJCQl9CiAJCQl9CiAJCQlpZiAoYk5lZWRBY2spIHsKIAkJCQl1QWNrVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCAxNCwgcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlKTsKQEAgLTYwOSw1NCArNjAzLDU0IEBACiAKIAljYXNlIFJUU0RVUl9CQV9GMDogLy9SVFNEdXJhdGlvbl9iYV9mMAogCQl1Q1RTVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCAxNCwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUpOwotCQlpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8wKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMCkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKQogCQkJdUR1clRpbWUgPSB1Q1RTVGltZSArIDIgKiBwRGV2aWNlLT51U0lGUyArIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdGQl9PcHQwW0ZCX1JBVEUwXVt3UmF0ZS1SQVRFXzE4TV0sIGJOZWVkQWNrKTsKLQkJfSBlbHNlIGlmICgoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzEpICYmICh3UmF0ZSA+PSBSQVRFXzE4TSkgJiYgKHdSYXRlIDw9IFJBVEVfNTRNKSkgeworCQllbHNlIGlmICgoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzEpICYmICh3UmF0ZSA+PSBSQVRFXzE4TSkgJiYgKHdSYXRlIDw9IFJBVEVfNTRNKSkKIAkJCXVEdXJUaW1lID0gdUNUU1RpbWUgKyAyICogcERldmljZS0+dVNJRlMgKyBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MVtGQl9SQVRFMF1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCX0KKwogCQlicmVhazsKIAogCWNhc2UgUlRTRFVSX0FBX0YwOiAvL1JUU0R1cmF0aW9uX2FhX2YwCiAJCXVDVFNUaW1lID0gQkJ1R2V0RnJhbWVUaW1lKHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlLCBieVBrdFR5cGUsIDE0LCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUpOwotCQlpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8wKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMCkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKQogCQkJdUR1clRpbWUgPSB1Q1RTVGltZSArIDIqcERldmljZS0+dVNJRlMgKyBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MFtGQl9SQVRFMF1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCX0gZWxzZSBpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8xKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJZWxzZSBpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8xKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpCiAJCQl1RHVyVGltZSA9IHVDVFNUaW1lICsgMipwRGV2aWNlLT51U0lGUyArIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdGQl9PcHQxW0ZCX1JBVEUwXVt3UmF0ZS1SQVRFXzE4TV0sIGJOZWVkQWNrKTsKLQkJfQorCiAJCWJyZWFrOwogCiAJY2FzZSBSVFNEVVJfQkFfRjE6IC8vUlRTRHVyYXRpb25fYmFfZjEKIAkJdUNUU1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlKTsKLQkJaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMCkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKSB7CisJCWlmICgoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzApICYmICh3UmF0ZSA+PSBSQVRFXzE4TSkgJiYgKHdSYXRlIDw9IFJBVEVfNTRNKSkKIAkJCXVEdXJUaW1lID0gdUNUU1RpbWUgKyAyKnBEZXZpY2UtPnVTSUZTICsgc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZUxlbmd0aCwgd0ZCX09wdDBbRkJfUkFURTFdW3dSYXRlLVJBVEVfMThNXSwgYk5lZWRBY2spOwotCQl9IGVsc2UgaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMSkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKSB7CisJCWVsc2UgaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMSkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKQogCQkJdUR1clRpbWUgPSB1Q1RTVGltZSArIDIqcERldmljZS0+dVNJRlMgKyBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MVtGQl9SQVRFMV1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCX0KKwogCQlicmVhazsKIAogCWNhc2UgUlRTRFVSX0FBX0YxOiAvL1JUU0R1cmF0aW9uX2FhX2YxCiAJCXVDVFNUaW1lID0gQkJ1R2V0RnJhbWVUaW1lKHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlLCBieVBrdFR5cGUsIDE0LCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUpOwotCQlpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8wKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMCkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKQogCQkJdUR1clRpbWUgPSB1Q1RTVGltZSArIDIqcERldmljZS0+dVNJRlMgKyBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MFtGQl9SQVRFMV1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCX0gZWxzZSBpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8xKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJZWxzZSBpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8xKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpCiAJCQl1RHVyVGltZSA9IHVDVFNUaW1lICsgMipwRGV2aWNlLT51U0lGUyArIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdGQl9PcHQxW0ZCX1JBVEUxXVt3UmF0ZS1SQVRFXzE4TV0sIGJOZWVkQWNrKTsKLQkJfQorCiAJCWJyZWFrOwogCiAJY2FzZSBDVFNEVVJfQkFfRjA6IC8vQ1RTRHVyYXRpb25fYmFfZjAKLQkJaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMCkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKSB7CisJCWlmICgoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzApICYmICh3UmF0ZSA+PSBSQVRFXzE4TSkgJiYgKHdSYXRlIDw9IFJBVEVfNTRNKSkKIAkJCXVEdXJUaW1lID0gcERldmljZS0+dVNJRlMgKyBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MFtGQl9SQVRFMF1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCX0gZWxzZSBpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8xKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJZWxzZSBpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8xKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpCiAJCQl1RHVyVGltZSA9IHBEZXZpY2UtPnVTSUZTICsgc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIGJ5UGt0VHlwZSwgY2JGcmFtZUxlbmd0aCwgd0ZCX09wdDFbRkJfUkFURTBdW3dSYXRlLVJBVEVfMThNXSwgYk5lZWRBY2spOwotCQl9CisKIAkJYnJlYWs7CiAKIAljYXNlIENUU0RVUl9CQV9GMTogLy9DVFNEdXJhdGlvbl9iYV9mMQotCQlpZiAoKGJ5RkJPcHRpb24gPT0gQVVUT19GQl8wKSAmJiAod1JhdGUgPj0gUkFURV8xOE0pICYmICh3UmF0ZSA8PSBSQVRFXzU0TSkpIHsKKwkJaWYgKChieUZCT3B0aW9uID09IEFVVE9fRkJfMCkgJiYgKHdSYXRlID49IFJBVEVfMThNKSAmJiAod1JhdGUgPD0gUkFURV81NE0pKQogCQkJdUR1clRpbWUgPSBwRGV2aWNlLT51U0lGUyArIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdGQl9PcHQwW0ZCX1JBVEUxXVt3UmF0ZS1SQVRFXzE4TV0sIGJOZWVkQWNrKTsKLQkJfSBlbHNlIGlmICgoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzEpICYmICh3UmF0ZSA+PSBSQVRFXzE4TSkgJiYgKHdSYXRlIDw9IFJBVEVfNTRNKSkgeworCQllbHNlIGlmICgoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCXzEpICYmICh3UmF0ZSA+PSBSQVRFXzE4TSkgJiYgKHdSYXRlIDw9IFJBVEVfNTRNKSkKIAkJCXVEdXJUaW1lID0gcERldmljZS0+dVNJRlMgKyBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lTGVuZ3RoLCB3RkJfT3B0MVtGQl9SQVRFMV1bd1JhdGUtUkFURV8xOE1dLCBiTmVlZEFjayk7Ci0JCX0KKwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC02ODQsOSArNjc4LDkgQEAKIHsKIAl1bnNpZ25lZCBzaG9ydCB3TGVuID0gMHgwMDAwOwogCi0JaWYgKHBUeERhdGFIZWFkID09IE5VTEwpIHsKKwlpZiAocFR4RGF0YUhlYWQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAKIAlpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQiB8fCBieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdBKSB7CiAJCWlmIChieUZCT3B0aW9uID09IEFVVE9fRkJfTk9ORSkgewpAQCAtODQ5LDExICs4NDMsMTEgQEAKIAkJCX0gZWxzZSB7CiAJCQkJbWVtY3B5KCYocEJ1Zi0+RGF0YS5hYnlSQVswXSksICYocERldmljZS0+YWJ5QlNTSURbMF0pLCBFVEhfQUxFTik7CiAJCQl9Ci0JCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSB7CisJCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKQogCQkJCW1lbWNweSgmKHBCdWYtPkRhdGEuYWJ5VEFbMF0pLCAmKHBEZXZpY2UtPmFieUJTU0lEWzBdKSwgRVRIX0FMRU4pOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQltZW1jcHkoJihwQnVmLT5EYXRhLmFieVRBWzBdKSwgJihwc0V0aEhlYWRlci0+YWJ5U3JjQWRkclswXSksIEVUSF9BTEVOKTsKLQkJCX0KKwogCQl9IGVsc2UgewogCQkJUFNSVFNfZ19GQiBwQnVmID0gKFBTUlRTX2dfRkIpcHZSVFM7CiAJCQkvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCkBAIC04ODUsMTEgKzg3OSwxMCBAQAogCQkJCW1lbWNweSgmKHBCdWYtPkRhdGEuYWJ5UkFbMF0pLCAmKHBEZXZpY2UtPmFieUJTU0lEWzBdKSwgRVRIX0FMRU4pOwogCQkJfQogCi0JCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSB7CisJCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKQogCQkJCW1lbWNweSgmKHBCdWYtPkRhdGEuYWJ5VEFbMF0pLCAmKHBEZXZpY2UtPmFieUJTU0lEWzBdKSwgRVRIX0FMRU4pOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQltZW1jcHkoJihwQnVmLT5EYXRhLmFieVRBWzBdKSwgJihwc0V0aEhlYWRlci0+YWJ5U3JjQWRkclswXSksIEVUSF9BTEVOKTsKLQkJCX0KIAogCQl9IC8vIGlmIChieUZCT3B0aW9uID09IEFVVE9fRkJfTk9ORSkKIAl9IGVsc2UgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQSkgewpAQCAtOTEzLDExICs5MDYsMTAgQEAKIAkJCQltZW1jcHkoJihwQnVmLT5EYXRhLmFieVJBWzBdKSwgJihwRGV2aWNlLT5hYnlCU1NJRFswXSksIEVUSF9BTEVOKTsKIAkJCX0KIAotCQkJaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkgeworCQkJaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkKIAkJCQltZW1jcHkoJihwQnVmLT5EYXRhLmFieVRBWzBdKSwgJihwRGV2aWNlLT5hYnlCU1NJRFswXSksIEVUSF9BTEVOKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJbWVtY3B5KCYocEJ1Zi0+RGF0YS5hYnlUQVswXSksICYocHNFdGhIZWFkZXItPmFieVNyY0FkZHJbMF0pLCBFVEhfQUxFTik7Ci0JCQl9CiAKIAkJfSBlbHNlIHsKIAkJCVBTUlRTX2FfRkIgcEJ1ZiA9IChQU1JUU19hX0ZCKXB2UlRTOwpAQCAtOTQwLDExICs5MzIsMTAgQEAKIAkJCX0gZWxzZSB7CiAJCQkJbWVtY3B5KCYocEJ1Zi0+RGF0YS5hYnlSQVswXSksICYocERldmljZS0+YWJ5QlNTSURbMF0pLCBFVEhfQUxFTik7CiAJCQl9Ci0JCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSB7CisJCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKQogCQkJCW1lbWNweSgmKHBCdWYtPkRhdGEuYWJ5VEFbMF0pLCAmKHBEZXZpY2UtPmFieUJTU0lEWzBdKSwgRVRIX0FMRU4pOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQltZW1jcHkoJihwQnVmLT5EYXRhLmFieVRBWzBdKSwgJihwc0V0aEhlYWRlci0+YWJ5U3JjQWRkclswXSksIEVUSF9BTEVOKTsKLQkJCX0KIAkJfQogCX0gZWxzZSBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFCKSB7CiAJCVBTUlRTX2FiIHBCdWYgPSAoUFNSVFNfYWIpcHZSVFM7CkBAIC05NjYsMTEgKzk1NywxMCBAQAogCQkJbWVtY3B5KCYocEJ1Zi0+RGF0YS5hYnlSQVswXSksICYocERldmljZS0+YWJ5QlNTSURbMF0pLCBFVEhfQUxFTik7CiAJCX0KIAotCQlpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSB7CisJCWlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApCiAJCQltZW1jcHkoJihwQnVmLT5EYXRhLmFieVRBWzBdKSwgJihwRGV2aWNlLT5hYnlCU1NJRFswXSksIEVUSF9BTEVOKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJbWVtY3B5KCYocEJ1Zi0+RGF0YS5hYnlUQVswXSksICYocHNFdGhIZWFkZXItPmFieVNyY0FkZHJbMF0pLCBFVEhfQUxFTik7Ci0JCX0KIAl9CiB9CiAKQEAgLTk5MSw5ICs5ODEsOCBAQAogCXVuc2lnbmVkIGludCB1Q1RTRnJhbWVMZW4gPSAxNDsKIAl1bnNpZ25lZCBzaG9ydCB3TGVuID0gMHgwMDAwOwogCi0JaWYgKHB2Q1RTID09IE5VTEwpIHsKKwlpZiAocHZDVFMgPT0gTlVMTCkKIAkJcmV0dXJuOwotCX0KIAogCWlmIChiRGlzQ1JDKSB7CiAJCS8vIFdoZW4gQ1JDRElTIGJpdCBpcyBvbiwgSC9XIGZvcmdvdCB0byBnZW5lcmF0ZSBGQ1MgZm9yIENUUyBmcmFtZSwKQEAgLTEwOTMsMjIgKzEwODIsMTggQEAKIAl1bnNpZ25lZCBzaG9ydCB3Rmlmb0N0bDsKIAlib29sIGJEaXNDUkMgPSBmYWxzZTsKIAl1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24gPSBBVVRPX0ZCX05PTkU7Ci0vLyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUgPSBwRGV2aWNlLT53Q3VycmVudFJhdGU7CiAKLQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNfdkdlbmVyYXRlVHhQYXJhbWV0ZXIuLi5cbiIpOwogCVBTVHhCdWZIZWFkIHBGaWZvSGVhZCA9IChQU1R4QnVmSGVhZClwVHhCdWZIZWFkOwogCXBGaWZvSGVhZC0+d1Jlc2VydmVkID0gd0N1cnJlbnRSYXRlOwogCXdGaWZvQ3RsID0gcEZpZm9IZWFkLT53RklGT0N0bDsKIAotCWlmICh3Rmlmb0N0bCAmIEZJRk9DVExfQ1JDRElTKSB7CisJaWYgKHdGaWZvQ3RsICYgRklGT0NUTF9DUkNESVMpCiAJCWJEaXNDUkMgPSB0cnVlOwotCX0KIAotCWlmICh3Rmlmb0N0bCAmIEZJRk9DVExfQVVUT19GQl8wKSB7CisJaWYgKHdGaWZvQ3RsICYgRklGT0NUTF9BVVRPX0ZCXzApCiAJCWJ5RkJPcHRpb24gPSBBVVRPX0ZCXzA7Ci0JfSBlbHNlIGlmICh3Rmlmb0N0bCAmIEZJRk9DVExfQVVUT19GQl8xKSB7CisJZWxzZSBpZiAod0ZpZm9DdGwgJiBGSUZPQ1RMX0FVVE9fRkJfMSkKIAkJYnlGQk9wdGlvbiA9IEFVVE9fRkJfMTsKLQl9CiAKIAlpZiAocERldmljZS0+YkxvbmdIZWFkZXIpCiAJCWNiTUFDSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU4gKyA2OwpAQCAtMTE3NCwxMyArMTE1OSw4IEBACiAJCQl9CiAJCX0KIAl9Ci0JLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyIEVORC5cbiIpOwogfQotLyoKLSAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLC8vcG9pbnQgdG8gcFR4QnVmSGVhZAotICB1bnNpZ25lZCBzaG9ydCB3RnJhZ1R5cGUsLy8wMDpOb24tRnJhZywgMDE6U3RhcnQsIDAyOk1pZCwgMDM6TGFzdAotICB1bnNpZ25lZCBpbnQgY2JGcmFnbWVudFNpemUsLy9IZHIrcGF5b2FkK0ZDUwotKi8KKwogc3RhdGljCiB2b2lkCiBzX3ZGaWxsRnJhZ1BhcmFtZXRlcigKQEAgLTExOTMsMTAgKzExNzMsOCBAQAogKQogewogCVBTVHhCdWZIZWFkIHBUeEJ1ZkhlYWQgPSAoUFNUeEJ1ZkhlYWQpIHBieUJ1ZmZlcjsKLQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNfdkZpbGxGcmFnUGFyYW1ldGVyLi4uXG4iKTsKIAogCWlmICh1VHhUeXBlID09IFRZUEVfU1lOQ0RNQSkgewotCQkvL1BTVHhTeW5jRGVzYyBwdGRDdXJyID0gKFBTVHhTeW5jRGVzYylzX3B2R2V0VHhEZXNjSGVhZChwRGV2aWNlLCB1VHhUeXBlLCB1Q3VySWR4KTsKIAkJUFNUeFN5bmNEZXNjIHB0ZEN1cnIgPSAoUFNUeFN5bmNEZXNjKXB2dGRDdXJyOwogCiAJCS8vU2V0IEZJRk9DdGwgJiBUaW1lU3RhbXAgaW4gVHhTeW5jRGVzYwpAQCAtMTIwNCwyNiArMTE4MiwyMSBAQAogCQlwdGRDdXJyLT5tX3dUaW1lU3RhbXAgPSBwVHhCdWZIZWFkLT53VGltZVN0YW1wOwogCQkvL1NldCBUU1IxICYgUmVxQ291bnQgaW4gVHhEZXNjSGVhZAogCQlwdGRDdXJyLT5tX3RkMVREMS53UmVxQ291bnQgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKGNiUmVxQ291bnQpKTsKLQkJaWYgKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX0VOREZSQUcpIHsgLy9MYXN0IEZyYWdtZW50YXRpb24KKwkJaWYgKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX0VOREZSQUcpIC8vTGFzdCBGcmFnbWVudGF0aW9uCiAJCQlwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFApOwotCQl9CiAJfSBlbHNlIHsKLQkJLy9QU1R4RGVzYyBwdGRDdXJyID0gKFBTVHhEZXNjKXNfcHZHZXRUeERlc2NIZWFkKHBEZXZpY2UsIHVUeFR5cGUsIHVDdXJJZHgpOwogCQlQU1R4RGVzYyBwdGRDdXJyID0gKFBTVHhEZXNjKXB2dGRDdXJyOwogCQkvL1NldCBUU1IxICYgUmVxQ291bnQgaW4gVHhEZXNjSGVhZAogCQlwdGRDdXJyLT5tX3RkMVREMS53UmVxQ291bnQgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKGNiUmVxQ291bnQpKTsKLQkJaWYgKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX0VOREZSQUcpIHsgLy9MYXN0IEZyYWdtZW50YXRpb24KKwkJaWYgKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX0VOREZSQUcpIC8vTGFzdCBGcmFnbWVudGF0aW9uCiAJCQlwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFApOwotCQl9CiAJfQogCiAJcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gKHVuc2lnbmVkIHNob3J0KXdGcmFnVHlwZTsvLzB4MDAwMTsgLy8wMDAwIDAwMDAgMDAwMCAwMDAxCi0KLQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNfdkZpbGxGcmFnUGFyYW1ldGVyIEVORFxuIik7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKQEAgLTEyNDUsOCArMTIxOCw2IEBACiAJdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlOyAvLzAwOk5vbi1GcmFnLCAwMTpTdGFydCwgMTA6TWlkLCAxMTpMYXN0CiAJdW5zaWduZWQgaW50IHVEdXJhdGlvbjsKIAl1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXI7Ci0vLyAgICB1bnNpZ25lZCBpbnQgdUtleUVudHJ5SWR4ID0gTlVNX0tFWV9FTlRSWSsxOwotLy8gICAgdW5zaWduZWQgY2hhciBieUtleVNlbCA9IDB4RkY7CiAJdW5zaWduZWQgaW50IGNiSVZsZW4gPSAwOwogCXVuc2lnbmVkIGludCBjYklDVmxlbiA9IDA7CiAJdW5zaWduZWQgaW50IGNiTUlDbGVuID0gMDsKQEAgLTEyNTQsOCArMTIyNSw2IEBACiAJdW5zaWduZWQgaW50IGNiODAyXzFfSF9sZW4gPSAwOwogCXVuc2lnbmVkIGludCB1TGVuZ3RoID0gMDsKIAl1bnNpZ25lZCBpbnQgdVRtcExlbiA9IDA7Ci0vLyAgICB1bnNpZ25lZCBjaGFyIGFieVRtcFs4XTsKLS8vICAgIHVuc2lnbmVkIGxvbmcgZHdDUkM7CiAJdW5zaWduZWQgaW50IGNiTUlDSERSID0gMDsKIAl1MzIgZHdNSUNLZXkwLCBkd01JQ0tleTE7CiAJdTMyIGR3TUlDX1ByaW9yaXR5OwpAQCAtMTI3NCw3ICsxMjQzLDYgQEAKIAl1bnNpZ25lZCBjaGFyICpwYnlUeXBlOwogCVBTVHhEZXNjICAgICAgIHB0ZEN1cnI7CiAJUFNUeEJ1ZkhlYWQgICAgcHNUeEJ1ZkhkID0gKFBTVHhCdWZIZWFkKSBwYnlUeEJ1ZmZlckFkZHI7Ci0vLyAgICB1bnNpZ25lZCBpbnQgdG1wRGVzY0lkeDsKIAl1bnNpZ25lZCBpbnQgY2JIZWFkZXJMZW5ndGggPSAwOwogCXZvaWQgKnB2UnJ2VGltZTsKIAlQU01JQ0hEUkhlYWQgICBwTUlDSERSOwpAQCAtMTI4OSw3ICsxMjU3LDYgQEAKIAogCXB2UnJ2VGltZSA9IHBNSUNIRFIgPSBwdlJUUyA9IHB2Q1RTID0gcHZUeERhdGFIZCA9IE5VTEw7CiAKLQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNfY2JGaWxsVHhCdWZIZWFkLi4uXG4iKTsKIAlpZiAoKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgfHwKIAkgICAgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkpIHsKIAkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkKQEAgLTEzMTIsOSArMTI3OSw4IEBACiAJCWlmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9XRVApIHsKIAkJCWNiSVZsZW4gPSA0OwogCQkJY2JJQ1ZsZW4gPSA0OwotCQkJaWYgKHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCA9PSBXTEFOX1dFUDIzMl9LRVlMRU4pIHsKKwkJCWlmIChwVHJhbnNtaXRLZXktPnVLZXlMZW5ndGggPT0gV0xBTl9XRVAyMzJfS0VZTEVOKQogCQkJCWJJc1dFUDI1NiA9IHRydWU7Ci0JCQl9CiAJCX0KIAkJaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApIHsKIAkJCWNiSVZsZW4gPSA4Oy8vSVYrRXh0SVYKQEAgLTEzNDcsMTEgKzEzMTMsMTAgQEAKIAkvLwogCS8vIFVzZSBmb3IgQVVUTyBGQUxMIEJBQ0sKIAkvLwotCWlmIChwc1R4QnVmSGQtPndGSUZPQ3RsICYgRklGT0NUTF9BVVRPX0ZCXzApIHsKKwlpZiAocHNUeEJ1ZkhkLT53RklGT0N0bCAmIEZJRk9DVExfQVVUT19GQl8wKQogCQlieUZCT3B0aW9uID0gQVVUT19GQl8wOwotCX0gZWxzZSBpZiAocHNUeEJ1ZkhkLT53RklGT0N0bCAmIEZJRk9DVExfQVVUT19GQl8xKSB7CisJZWxzZSBpZiAocHNUeEJ1ZkhkLT53RklGT0N0bCAmIEZJRk9DVExfQVVUT19GQl8xKQogCQlieUZCT3B0aW9uID0gQVVUT19GQl8xOwotCX0KIAogCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCS8vU2V0IFJydlRpbWUvUlRTL0NUUyBCdWZmZXIKQEAgLTE0NjUsMTEgKzE0MzAsMTEgQEAKIAkJLy9GcmFnTnVtID0gKEZyYW1lU2l6ZS0oSGRyK0ZDUykpLyhGcmFnbWVudCBTaXplIC0oSHJkK0ZDUykpKQogCQl1TUFDZnJhZ051bSA9ICh1bnNpZ25lZCBzaG9ydCkgKChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgLyBjYkZyYWdQYXlsb2FkU2l6ZSk7CiAJCWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9IChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgJSBjYkZyYWdQYXlsb2FkU2l6ZTsKLQkJaWYgKGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9PSAwKSB7CisJCWlmIChjYkxhc3RGcmFnUGF5bG9hZFNpemUgPT0gMCkKIAkJCWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9IGNiRnJhZ1BheWxvYWRTaXplOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQl1TUFDZnJhZ051bSsrOwotCQl9CisKIAkJLy9bSGRyKyhJVikrbGFzdCBmcmFnbWVudCBwYXlsb2FkKyhNSUMpKyhJQ1YpK0ZDU10KIAkJY2JMYXN0RnJhZ21lbnRTaXplID0gY2JNQUNIZExlbiArIGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSArIGNiSVZsZW4gKyBjYklDVmxlbiArIGNiRkNTbGVuOwogCkBAIC0xNTY3LDcgKzE1MzIsNiBAQAogCQkJCS8vICAgIExhc3QgRnJhZ21lbnRhdGlvbgogCQkJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkxhc3QgRnJhZ21lbnRhdGlvbi4uLlxuIik7Ci0JCQkJLy90bXBEZXNjSWR4ID0gKHVEZXNjSWR4ICsgdUZyYWdJZHgpICUgcERldmljZS0+Y2JURFt1RE1BSWR4XTsKIAogCQkJCXdGcmFnVHlwZSA9IEZSQUdDVExfRU5ERlJBRzsKIApAQCAtMTYwMCw3ICsxNTY0LDYgQEAKIAkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJCQkJcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwSGVhZFRELT5wVERJbmZvLT5idWY7Ci0JCQkJLy9wYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3RtcERlc2NJZHhdLnBieVZBZGRyOwogCiAJCQkJdUxlbmd0aCA9IGNiSGVhZGVyTGVuZ3RoICsgY2JNQUNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbjsKIApAQCAtMTY0NCwxMiArMTYwNyw2IEBACiAJCQkJCQkJCSoodW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgY2hhciAqKSZkd1NhZmVNSUNfUiArIHVNSUNGcmFnTGVuIC0gNCksCiAJCQkJCQkJCShjYk1JQ2xlbiAtIHVNSUNGcmFnTGVuKSk7CiAJCQkJCQl9Ci0JCQkJCQkvKgotCQkJCQkJICBmb3IgKGlpID0gMDsgaWkgPCBjYkxhc3RGcmFnUGF5bG9hZFNpemUgKyA4ICsgMjQ7IGlpKyspIHsKLQkJCQkJCSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJTAyeCAiLCAqKCh1bnNpZ25lZCBjaGFyICopKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpIC0gOCAtIDI0KSkpOwotCQkJCQkJICB9Ci0JCQkJCQkgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlxuXG4iKTsKLQkJCQkJCSovCiAJCQkJCX0KIAkJCQkJTUlDX3ZVbkluaXQoKTsKIAkJCQl9IGVsc2UgewpAQCAtMTY5MCw3ICsxNjQ3LDYgQEAKIAkJCQkvLyAgICBNaWRkbGUgRnJhZ21lbnRhdGlvbgogCQkJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1pZGRsZSBGcmFnbWVudGF0aW9uLi4uXG4iKTsKLQkJCQkvL3RtcERlc2NJZHggPSAodURlc2NJZHggKyB1RnJhZ0lkeCkgJSBwRGV2aWNlLT5jYlREW3VETUFJZHhdOwogCiAJCQkJd0ZyYWdUeXBlID0gRlJBR0NUTF9NSURGUkFHOwogCkBAIC0xNzUzLDIxICsxNzA5LDkgQEAKIAkJCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1JRERMRTogdU1JQ0ZyYWdMZW46JWQsIGNiRnJhZ1BheWxvYWRTaXplOiVkLCB1VG1wTGVuOiVkXG4iLAogCQkJCQkJCXVNSUNGcmFnTGVuLCBjYkZyYWdQYXlsb2FkU2l6ZSwgdVRtcExlbik7CiAJCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJGaWxsIE1JQyBpbiBNaWRkbGUgZnJhZyBbJWRdXG4iLCB1TUlDRnJhZ0xlbik7Ci0JCQkJCQkvKgotCQkJCQkJICBmb3IgKGlpID0gMDsgaWkgPCB1TUlDRnJhZ0xlbjsgaWkrKykgewotCQkJCQkJICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIlMDJ4ICIsICooKHVuc2lnbmVkIGNoYXIgKikoKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuKSArIGlpKSkpOwotCQkJCQkJICB9Ci0JCQkJCQkgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlxuIik7Ci0JCQkJCQkqLwogCQkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR2V0IE1JQzolWCwgJVhcbiIsICpwZHdNSUNfTCwgKnBkd01JQ19SKTsKIAkJCQkJfQogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNaWRkbGUgZnJhZyBsZW46ICVkXG4iLCB1VG1wTGVuKTsKLQkJCQkJLyoKLQkJCQkJICBmb3IgKGlpID0gMDsgaWkgPCB1VG1wTGVuOyBpaSsrKSB7Ci0JCQkJCSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJTAyeCAiLCAqKCh1bnNpZ25lZCBjaGFyICopKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpKSkpOwotCQkJCQkgIH0KLQkJCQkJICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJcblxuIik7Ci0JCQkJCSovCiAKIAkJCQl9IGVsc2UgewogCQkJCQlBU1NFUlQodVRtcExlbiA9PSAoY2JGcmFnUGF5bG9hZFNpemUpKTsKQEAgLTE4MDQsOCArMTc0OCw2IEBACiAJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PQogCQkvLyAgICBObyBGcmFnbWVudGF0aW9uCiAJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PQotCQkvL0RCR19QUlRHUlAwMygoIk5vIEZyYWdtZW50YXRpb24uLi5cbiIpKTsKLQkJLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJObyBGcmFnbWVudGF0aW9uLi4uXG4iKTsKIAkJd0ZyYWdUeXBlID0gRlJBR0NUTF9OT05GUkFHOwogCiAJCS8vU2V0IEZyYWdDdGwgaW4gVHhCdWZmZXJIZWFkCkBAIC0xODY0LDEyICsxODA2LDYgQEAKIAogCQlpZiAoKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgewogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTGVuZ3RoOiVkLCAlZFxuIiwgY2JGcmFtZUJvZHlTaXplIC0gY2I4MDJfMV9IX2xlbiwgdUxlbmd0aCk7Ci0JCQkvKgotCQkJICBmb3IgKGlpID0gMDsgaWkgPCAoY2JGcmFtZUJvZHlTaXplIC0gY2I4MDJfMV9IX2xlbik7IGlpKyspIHsKLQkJCSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJTAyeCAiLCAqKCh1bnNpZ25lZCBjaGFyICopKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpKSkpOwotCQkJICB9Ci0JCQkgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlxuIik7Ci0JCQkqLwogCiAJCQlNSUNfdkFwcGVuZCgocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4pLCBjYkZyYW1lQm9keVNpemUpOwogCkBAIC0xODg4LDEyICsxODI0LDYgQEAKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInVMZW5ndGg6ICVkLCAlZFxuIiwgdUxlbmd0aCwgY2JGcmFtZUJvZHlTaXplKTsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImNiUmVxQ291bnQ6JWQsICVkLCAlZCwgJWRcbiIsIGNiUmVxQ291bnQsIGNiSGVhZGVyTGVuZ3RoLCB1UGFkZGluZywgY2JJVmxlbik7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNSUM6JXgsICV4XG4iLCAqcGR3TUlDX0wsICpwZHdNSUNfUik7Ci0vKgotICBmb3IgKGlpID0gMDsgaWkgPCA4OyBpaSsrKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiUwMnggIiwgKigoKHVuc2lnbmVkIGNoYXIgKikocGR3TUlDX0wpICsgaWkpKSk7Ci0gIH0KLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiXG4iKTsKLSovCiAKIAkJfQogCkBAIC0xOTE3LDEyICsxODQ3LDkgQEAKIAogCQlwRGV2aWNlLT5pVERVc2VkW3VETUFJZHhdKys7CiAKLS8vICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIHB0ZEN1cnItPm1fZHdSZXNlcnZlZDBbJWRdIHB0ZEN1cnItPm1fZHdSZXNlcnZlZDFbJWRdLlxuIiwgcHRkQ3Vyci0+cFRESW5mby0+ZHdSZXFDb3VudCwgcHRkQ3Vyci0+cFRESW5mby0+ZHdIZWFkZXJMZW5ndGgpOwotLy8gICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgY2JIZWFkZXJMZW5ndGhbJWRdXG4iLCBjYkhlYWRlckxlbmd0aCk7Ci0KIAl9CiAJKnB1TUFDZnJhZ051bSA9IHVNQUNmcmFnTnVtOwotCS8vREJHX1BSVEdSUDAzKCgic19jYkZpbGxUeEJ1ZkhlYWQgRU5EXG4iKSk7CisKIAlyZXR1cm4gY2JIZWFkZXJMZW5ndGg7CiB9CiAKQEAgLTE5NzMsNDAgKzE5MDAsMzcgQEAKIAlwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX0dFTklOVDsKIAogCS8vU2V0IEZJRk9DVExfSVNETUEwCi0JaWYgKFRZUEVfVFhETUEwID09IHVETUFJZHgpIHsKKwlpZiAoVFlQRV9UWERNQTAgPT0gdURNQUlkeCkKIAkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF9JU0RNQTA7Ci0JfQogCiAJLy9TZXQgRlJBR0NUTF9NQUNIRENOVAotCWlmIChwRGV2aWNlLT5iTG9uZ0hlYWRlcikgeworCWlmIChwRGV2aWNlLT5iTG9uZ0hlYWRlcikKIAkJY2JNYWNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIDY7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWNiTWFjSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47Ci0JfQorCiAJcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYk1hY0hkTGVuIDw8IDEwKSk7CiAKIAkvL1NldCBwYWNrZXQgdHlwZQotCWlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUEpIHsvLzAwMDAgMDAwMCAwMDAwIDAwMDAKKwlpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFBKSAvLzAwMDAgMDAwMCAwMDAwIDAwMDAKIAkJOwotCX0gZWxzZSBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFCKSB7Ly8wMDAwIDAwMDEgMDAwMCAwMDAwCisJZWxzZSBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFCKSAvLzAwMDAgMDAwMSAwMDAwIDAwMDAKIAkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF8xMUI7Ci0JfSBlbHNlIGlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdCKSB7Ly8wMDAwIDAwMTAgMDAwMCAwMDAwCisJZWxzZSBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQikgLy8wMDAwIDAwMTAgMDAwMCAwMDAwCiAJCXBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfMTFHQjsKLQl9IGVsc2UgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExR0EpIHsvLzAwMDAgMDAxMSAwMDAwIDAwMDAKKwllbHNlIGlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdBKSAvLzAwMDAgMDAxMSAwMDAwIDAwMDAKIAkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF8xMUdBOwotCX0KKwogCS8vU2V0IEZJRk9DVExfR3JwQWNrUG9saWN5Ci0JaWYgKHBEZXZpY2UtPmJHcnBBY2tQb2xpY3kgPT0gdHJ1ZSkgey8vMDAwMCAwMTAwIDAwMDAgMDAwMAorCWlmIChwRGV2aWNlLT5iR3JwQWNrUG9saWN5ID09IHRydWUpIC8vMDAwMCAwMTAwIDAwMDAgMDAwMAogCQlwVHhCdWZIZWFkLT53RklGT0N0bCB8PQlGSUZPQ1RMX0dSUEFDSzsKLQl9CiAKIAkvL1NldCBBdXRvIEZhbGxiYWNrIEN0bAogCWlmIChwRGV2aWNlLT53Q3VycmVudFJhdGUgPj0gUkFURV8xOE0pIHsKLQkJaWYgKHBEZXZpY2UtPmJ5QXV0b0ZCQ3RybCA9PSBBVVRPX0ZCXzApIHsKKwkJaWYgKHBEZXZpY2UtPmJ5QXV0b0ZCQ3RybCA9PSBBVVRPX0ZCXzApCiAJCQlwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX0FVVE9fRkJfMDsKLQkJfSBlbHNlIGlmIChwRGV2aWNlLT5ieUF1dG9GQkN0cmwgPT0gQVVUT19GQl8xKSB7CisJCWVsc2UgaWYgKHBEZXZpY2UtPmJ5QXV0b0ZCQ3RybCA9PSBBVVRPX0ZCXzEpCiAJCQlwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX0FVVE9fRkJfMTsKLQkJfQogCX0KIAogCS8vU2V0IEZSQUdDVExfV0VQVFlQCkBAIC0yMDMxLDEwICsxOTU1LDYgQEAKICNlbmRpZgogCXBUeEJ1ZkhlYWQtPmJ5VHhQb3dlciA9IHBEZXZpY2UtPmJ5Q3VyUHdyOwogCi0vKgotICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApCi0gIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsICY9ICB+KEZSQUdDVExfVEtJUCB8IEZSQUdDVExfTEVHQUNZIHxGUkFHQ1RMX0FFUyk7Ci0qLwogCSpwY2JIZWFkZXJTaXplID0gc19jYkZpbGxUeEJ1ZkhlYWQocERldmljZSwgYnlQa3RUeXBlLCBwYnlUeEJ1ZmZlckFkZHIsIGNiUGF5bG9hZFNpemUsCiAJCQkJCSAgIHVETUFJZHgsIHBIZWFkVEQsIHBzRXRoSGVhZGVyLCBwUGFja2V0LCBiTmVlZEVuY3J5cHQsCiAJCQkJCSAgIHBUcmFuc21pdEtleSwgdU5vZGVJbmRleCwgcHVNQUNmcmFnTnVtKTsKQEAgLTIwNzUsMTMgKzE5OTUsMTIgQEAKIHsKIAlQUzgwMl8xMUhlYWRlciAgcE1BQ0hlYWRlciA9IChQUzgwMl8xMUhlYWRlcilwYnlCdWZmZXJBZGRyOwogCi0JbWVtc2V0KHBNQUNIZWFkZXIsIDAsIChzaXplb2YoUzgwMl8xMUhlYWRlcikpKTsgIC8vLSBzaXplb2YocE1BQ0hlYWRlci0+ZHdJVikpKTsKKwltZW1zZXQocE1BQ0hlYWRlciwgMCwgKHNpemVvZihTODAyXzExSGVhZGVyKSkpOwogCi0JaWYgKHVETUFJZHggPT0gVFlQRV9BVElNRE1BKSB7CisJaWYgKHVETUFJZHggPT0gVFlQRV9BVElNRE1BKQogCQlwTUFDSGVhZGVyLT53RnJhbWVDdGwgPSBUWVBFXzgwMl8xMV9BVElNOwotCX0gZWxzZSB7CisJZWxzZQogCQlwTUFDSGVhZGVyLT53RnJhbWVDdGwgPSBUWVBFXzgwMl8xMV9EQVRBOwotCX0KIAogCWlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApIHsKIAkJbWVtY3B5KCYocE1BQ0hlYWRlci0+YWJ5QWRkcjFbMF0pLCAmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSwgRVRIX0FMRU4pOwpAQCAtMjEyMiw5ICsyMDQxLDggQEAKIAkJCXBEZXZpY2UtPndTZXFDb3VudGVyID0gMDsKIAl9CiAKLQlpZiAoKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX1NUQUZSQUcpIHx8ICh3RnJhZ1R5cGUgPT0gRlJBR0NUTF9NSURGUkFHKSkgeyAvL1N0YXJ0RnJhZyBvciBNaWRGcmFnCisJaWYgKCh3RnJhZ1R5cGUgPT0gRlJBR0NUTF9TVEFGUkFHKSB8fCAod0ZyYWdUeXBlID09IEZSQUdDVExfTUlERlJBRykpIC8vU3RhcnRGcmFnIG9yIE1pZEZyYWcKIAkJcE1BQ0hlYWRlci0+d0ZyYW1lQ3RsIHw9IEZDX01PUkVGUkFHOwotCX0KIH0KIAogQ01EX1NUQVRVUyBjc01nbXRfeG1pdChQU0RldmljZSBwRGV2aWNlLCBQU1R4TWdtdFBhY2tldCBwUGFja2V0KSB7CkBAIC0yMTU2LDkgKzIwNzQsOCBAQAogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogCXVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZSA9IFJBVEVfMU07CiAKLQlpZiAoQVZBSUxfVEQocERldmljZSwgVFlQRV9UWERNQTApIDw9IDApIHsKKwlpZiAoQVZBSUxfVEQocERldmljZSwgVFlQRV9UWERNQTApIDw9IDApCiAJCXJldHVybiBDTURfU1RBVFVTX1JFU09VUkNFUzsKLQl9CiAKIAlwRnJzdFREID0gcERldmljZS0+YXBDdXJyVERbVFlQRV9UWERNQTBdOwogCXBieVR4QnVmZmVyQWRkciA9ICh1bnNpZ25lZCBjaGFyICopcEZyc3RURC0+cFRESW5mby0+YnVmOwpAQCAtMjE3OSwxMSArMjA5NiwxMSBAQAogCS8vIDIwMDQuMTEuMTEgS3lsZSAtLSBVc2luZyBPRkRNIHBvd2VyIHRvIHR4IE1uZ1BrdCB3aWxsIGRlY3JlYXNlIHRoZSBjb25uZWN0aW9uIGNhcGFiaWxpdHkuCiAJLy8gICAgICAgICAgICAgICAgICAgIEFuZCBjbWQgdGltZXIgd2lsbCB3YWl0IGRhdGEgcGt0IFRYIGZpbmlzaCBiZWZvcmUgc2Nhbm5pbmcgc28gaXQncyBPSwogCS8vICAgICAgICAgICAgICAgICAgICB0byBzZXQgcG93ZXIgaGVyZS4KLQlpZiAocERldmljZS0+cE1nbXQtPmVTY2FuU3RhdGUgIT0gV01BQ19OT19TQ0FOTklORykgeworCWlmIChwRGV2aWNlLT5wTWdtdC0+ZVNjYW5TdGF0ZSAhPSBXTUFDX05PX1NDQU5OSU5HKQogCQlSRmJTZXRQb3dlcihwRGV2aWNlLCB3Q3VycmVudFJhdGUsIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJUkZiU2V0UG93ZXIocERldmljZSwgd0N1cnJlbnRSYXRlLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKLQl9CisKIAlwVHhCdWZIZWFkLT5ieVR4UG93ZXIgPSBwRGV2aWNlLT5ieUN1clB3cjsKIAkvLysrKysrKysrKysrKysrKysrKysrKyBQYXRjaCBWVDMyNTMgQTEgcGVyZm9ybWFuY2UgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAJaWYgKHBEZXZpY2UtPmJ5Rk9FVHVuaW5nKSB7CkBAIC0yMjQ3LDggKzIxNjQsNiBAQAogCQkJY2JJQ1ZsZW4gPSA0OwogCQkJcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gRlJBR0NUTF9US0lQOwogCQkJLy9XZSBuZWVkIHRvIGdldCBzZWVkIGhlcmUgZm9yIGZpbGxpbmcgVHhLZXkgZW50cnkuCi0JCQkvL1RLSVB2TWl4S2V5KHBUcmFuc21pdEtleS0+YWJ5S2V5LCBwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkciwKLQkJCS8vICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT53VFNDMTVfMCwgcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2LCBwRGV2aWNlLT5hYnlQUk5HKTsKIAkJfSBlbHNlIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB7CiAJCQljYklWbGVuID0gODsvL1JTTiBIZWFkZXIKIAkJCWNiSUNWbGVuID0gODsvL01JQwpAQCAtMjI2Myw5ICsyMTc4LDkgQEAKIAljYkZyYW1lU2l6ZSA9IGNiTWFjSGRMZW4gKyBjYkZyYW1lQm9keVNpemUgKyBjYklWbGVuICsgY2JNSUNsZW4gKyBjYklDVmxlbiArIGNiRkNTbGVuOwogCiAJLy9TZXQgRklGT0NUTF9HcnBBY2tQb2xpY3kKLQlpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSB0cnVlKSB7Ly8wMDAwIDAxMDAgMDAwMCAwMDAwCisJaWYgKHBEZXZpY2UtPmJHcnBBY2tQb2xpY3kgPT0gdHJ1ZSkgLy8wMDAwIDAxMDAgMDAwMCAwMDAwCiAJCXBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9CUZJRk9DVExfR1JQQUNLOwotCX0KKwogCS8vdGhlIHJlc3Qgb2YgcFR4QnVmSGVhZC0+d0ZyYWdDdGw6RnJhZ1R5cCB3aWxsIGJlIHNldCBsYXRlciBpbiBzX3ZGaWxsRnJhZ1BhcmFtZXRlcigpCiAKIAkvL1NldCBScnZUaW1lL1JUUy9DVFMgQnVmZmVyCkBAIC0yNDAxLDkgKzIzMTYsOCBAQAogCiAJcERldmljZS0+aVREVXNlZFtUWVBFX1RYRE1BMF0rKzsKIAotCWlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkgPD0gMSkgeworCWlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkgPD0gMSkKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIGF2YWlsYWJsZSB0ZDAgPD0gMVxuIik7Ci0JfQogCiAJcERldmljZS0+YXBDdXJyVERbVFlQRV9UWERNQTBdID0gcEZyc3RURC0+bmV4dDsKIApAQCAtMjU1OSwxMSArMjQ3MywxMCBAQAogCQljYkZyYWdQYXlsb2FkU2l6ZSA9IGNiRnJhZ21lbnRTaXplIC0gY2JNQUNIZExlbiAtIGNiSVZsZW4gLSBjYklDVmxlbiAtIGNiRkNTbGVuOwogCQl1TUFDZnJhZ051bSA9ICh1bnNpZ25lZCBzaG9ydCkgKChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgLyBjYkZyYWdQYXlsb2FkU2l6ZSk7CiAJCWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9IChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgJSBjYkZyYWdQYXlsb2FkU2l6ZTsKLQkJaWYgKGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9PSAwKSB7CisJCWlmIChjYkxhc3RGcmFnUGF5bG9hZFNpemUgPT0gMCkKIAkJCWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9IGNiRnJhZ1BheWxvYWRTaXplOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQl1TUFDZnJhZ051bSsrOwotCQl9CiAJfQogCXJldHVybiB1TUFDZnJhZ051bTsKIH0KQEAgLTI2MTMsMTUgKzI1MjYsMTQgQEAKIAl1bnNpZ25lZCBjaGFyICpwYnlNYWNIZHI7CiAKIAl1bnNpZ25lZCBpbnQgY2JFeHRTdXBwUmF0ZSA9IDA7Ci0vLyAgICBQV0xBTl9JRSAgICAgICAgcEl0ZW07CiAKIAlwdlJydlRpbWUgPSBwTUlDSERSID0gcHZSVFMgPSBwdkNUUyA9IHB2VHhEYXRhSGQgPSBOVUxMOwogCi0JaWYgKGNiTVBEVUxlbiA8PSBXTEFOX0hEUl9BRERSM19MRU4pIHsKKwlpZiAoY2JNUERVTGVuIDw9IFdMQU5fSERSX0FERFIzX0xFTikKIAkJY2JGcmFtZUJvZHlTaXplID0gMDsKLQl9IGVsc2UgeworCWVsc2UKIAkJY2JGcmFtZUJvZHlTaXplID0gY2JNUERVTGVuIC0gV0xBTl9IRFJfQUREUjNfTEVOOwotCX0KKwogCXA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpcGJNUERVOwogCiAJcEZyc3RURCA9IHBEZXZpY2UtPmFwQ3VyclREW1RZUEVfVFhETUEwXTsKQEAgLTI2NDIsMTEgKzI1NTQsMTEgQEAKIAkvLyAyMDA0LjExLjExIEt5bGUgLS0gVXNpbmcgT0ZETSBwb3dlciB0byB0eCBNbmdQa3Qgd2lsbCBkZWNyZWFzZSB0aGUgY29ubmVjdGlvbiBjYXBhYmlsaXR5LgogCS8vICAgICAgICAgICAgICAgICAgICBBbmQgY21kIHRpbWVyIHdpbGwgd2FpdCBkYXRhIHBrdCBUWCB0byBmaW5pc2ggYmVmb3JlIHNjYW5uaW5nIHNvIGl0J3MgT0sKIAkvLyAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHBvd2VyIGhlcmUuCi0JaWYgKHBEZXZpY2UtPnBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKKwlpZiAocERldmljZS0+cE1nbXQtPmVTY2FuU3RhdGUgIT0gV01BQ19OT19TQ0FOTklORykKIAkJUkZiU2V0UG93ZXIocERldmljZSwgd0N1cnJlbnRSYXRlLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCVJGYlNldFBvd2VyKHBEZXZpY2UsIHdDdXJyZW50UmF0ZSwgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7Ci0JfQorCiAJcFR4QnVmSGVhZC0+YnlUeFBvd2VyID0gcERldmljZS0+YnlDdXJQd3I7CiAKIAkvLysrKysrKysrKysrKysrKysrKysrKyBQYXRjaCBWVDMyNTMgQTEgcGVyZm9ybWFuY2UgKysrKysrKysrKysrKysrKysrKysrKysrKysrCkBAIC0yNzA0LDE3ICsyNjE2LDE0IEBACiAKIAkvLyBob3N0YXBkIGRlYW1vbiBleHQgc3VwcG9ydCByYXRlIHBhdGNoCiAJaWYgKFdMQU5fR0VUX0ZDX0ZTVFlQRShwODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwpID09IFdMQU5fRlNUWVBFX0FTU09DUkVTUCkgewotCQlpZiAoKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzKS0+bGVuICE9IDApIHsKKwkJaWYgKCgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcyktPmxlbiAhPSAwKQogCQkJY2JFeHRTdXBwUmF0ZSArPSAoKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMpLT5sZW4gKyBXTEFOX0lFSERSX0xFTjsKLQkJfQogCi0JCWlmICgoKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMpLT5sZW4gIT0gMCkgeworCQlpZiAoKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzKS0+bGVuICE9IDApCiAJCQljYkV4dFN1cHBSYXRlICs9ICgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcyktPmxlbiArIFdMQU5fSUVIRFJfTEVOOwotCQl9CiAKLQkJaWYgKGNiRXh0U3VwcFJhdGUgPiAwKSB7CisJCWlmIChjYkV4dFN1cHBSYXRlID4gMCkKIAkJCWNiRnJhbWVCb2R5U2l6ZSA9IFdMQU5fQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTOwotCQl9CiAJfQogCiAJLy9TZXQgRlJBR0NUTF9NQUNIRENOVApAQCAtMjczNiw4ICsyNjQ1LDYgQEAKIAkJCWNiSUNWbGVuID0gNDsKIAkJCXBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IEZSQUdDVExfVEtJUDsKIAkJCS8vV2UgbmVlZCB0byBnZXQgc2VlZCBoZXJlIGZvciBmaWxsaW5nIFR4S2V5IGVudHJ5LgotCQkJLy9US0lQdk1peEtleShwVHJhbnNtaXRLZXktPmFieUtleSwgcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIsCi0JCQkvLyAgICAgICAgICAgIHBUcmFuc21pdEtleS0+d1RTQzE1XzAsIHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNiwgcERldmljZS0+YWJ5UFJORyk7CiAJCX0gZWxzZSBpZiAocERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgewogCQkJY2JJVmxlbiA9IDg7Ly9SU04gSGVhZGVyCiAJCQljYklDVmxlbiA9IDg7Ly9NSUMKQEAgLTI3NTMsOSArMjY2MCw5IEBACiAJY2JGcmFtZVNpemUgPSBjYk1hY0hkTGVuICsgY2JGcmFtZUJvZHlTaXplICsgY2JJVmxlbiArIGNiTUlDbGVuICsgY2JJQ1ZsZW4gKyBjYkZDU2xlbiArIGNiRXh0U3VwcFJhdGU7CiAKIAkvL1NldCBGSUZPQ1RMX0dycEFja1BvbGljeQotCWlmIChwRGV2aWNlLT5iR3JwQWNrUG9saWN5ID09IHRydWUpIHsvLzAwMDAgMDEwMCAwMDAwIDAwMDAKKwlpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSB0cnVlKSAvLzAwMDAgMDEwMCAwMDAwIDAwMDAKIAkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0JRklGT0NUTF9HUlBBQ0s7Ci0JfQorCiAJLy90aGUgcmVzdCBvZiBwVHhCdWZIZWFkLT53RnJhZ0N0bDpGcmFnVHlwIHdpbGwgYmUgc2V0IGxhdGVyIGluIHNfdkZpbGxGcmFnUGFyYW1ldGVyKCkKIAogCWlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdCIHx8IGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExR0EpIHsvLzgwMi4xMWcgcGFja2V0CkBAIC0yODgxLDkgKzI3ODgsOCBAQAogCQkJcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53VFNDMTVfMCA9IHBUcmFuc21pdEtleS0+d1RTQzE1XzA7CiAJCX0KIAotCQlpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSkgeworCQlpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSkKIAkJCXNfdlNXZW5jcnlwdGlvbihwRGV2aWNlLCBwVHJhbnNtaXRLZXksIHBieVBheWxvYWRIZWFkLCAodW5zaWduZWQgc2hvcnQpKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSk7Ci0JCX0KIAl9CiAKIAlwTUFDSGVhZGVyLT53U2VxQ3RsID0gY3B1X3RvX2xlMTYocERldmljZS0+d1NlcUNvdW50ZXIgPDwgNCk7CkBAIC0yOTI3LDkgKzI4MzMsOCBAQAogCiAJcERldmljZS0+aVREVXNlZFtUWVBFX1RYRE1BMF0rKzsKIAotCWlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkgPD0gMSkgeworCWlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkgPD0gMSkKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIGF2YWlsYWJsZSB0ZDAgPD0gMVxuIik7Ci0JfQogCiAJcERldmljZS0+YXBDdXJyVERbVFlQRV9UWERNQTBdID0gcEZyc3RURC0+bmV4dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguaAppbmRleCA0ZjJjZjM0Li42MDFiZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguaApAQCAtMzksMTcgKzM5LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoKLSAgdm9pZAotICB2R2VuZXJhdGVNQUNIZWFkZXIoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgbG9uZyBkd1R4QnVmZmVyQWRkciwgdW5zaWduZWQgY2hhciAqcGJ5U2tiRGF0YSwKLSAgdW5zaWduZWQgaW50IGNiUGFja2V0U2l6ZSwgYm9vbCBiRE1BMFVzZWQsIHVuc2lnbmVkIGludCAqcGNiSGVhZFNpemUsCi0gIHVuc2lnbmVkIGludCAqcGNiQXBwZW5kUGF5bG9hZCk7Ci0KLSAgdm9pZAotICB2UHJvY2Vzc1J4TUFDSGVhZGVyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGxvbmcgZHdSeEJ1ZmZlckFkZHIsIHVuc2lnbmVkIGludCBjYlBhY2tldFNpemUsCi0gIGJvb2wgYklzV0VQLCB1bnNpZ25lZCBpbnQgKnBjYkhlYWRTaXplKTsKLSovCi0KIHZvaWQKIHZHZW5lcmF0ZU1BQ0hlYWRlcigKIAlQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuYwppbmRleCBhNWRjM2MwOS4uMWU3ZDNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5jCkBAIC05OCw4ICs5OCw4IEBACiAJdW5zaWduZWQgbG9uZyBkd0NSQzsKIAogCWR3Q1JDID0gQ1JDZHdHZXRDcmMzMihwYnlCdWZmZXIsIGNiRnJhbWVMZW5ndGggLSA0KTsKLQlpZiAoY3B1X3RvX2xlMzIoKigodW5zaWduZWQgbG9uZyAqKShwYnlCdWZmZXIgKyBjYkZyYW1lTGVuZ3RoIC0gNCkpKSAhPSBkd0NSQykgeworCWlmIChjcHVfdG9fbGUzMigqKCh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIGNiRnJhbWVMZW5ndGggLSA0KSkpICE9IGR3Q1JDKQogCQlyZXR1cm4gZmFsc2U7Ci0JfQorCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RraXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jCmluZGV4IGU3YzE3YzYuLmY3NThkMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jCkBAIC0xNTcsMTEgKzE1NywxMSBAQAogewogCXVuc2lnbmVkIGludCBiOwogCi0JaWYgKChhICYgMHgwMSkgPT0gMHgwMSkgeworCWlmICgoYSAmIDB4MDEpID09IDB4MDEpCiAJCWIgPSAoYSA+PiAxKSB8IDB4ODAwMDsKLQl9IGVsc2UgeworCWVsc2UKIAkJYiA9IChhID4+IDEpICYgMHg3ZmZmOwotCX0KKwogCWIgPSBiICUgNjU1MzY7CiAJcmV0dXJuIGI7CiB9CkBAIC0xODksNyArMTg5LDYgQEAKICkKIHsKIAl1bnNpZ25lZCBpbnQgcDFrWzVdOwotLy8gICAgdW5zaWduZWQgaW50IHR0YWswLCB0dGFrMSwgdHRhazIsIHR0YWszLCB0dGFrNDsKIAl1bnNpZ25lZCBpbnQgdHNjMCwgdHNjMSwgdHNjMjsKIAl1bnNpZ25lZCBpbnQgcHBrMCwgcHBrMSwgcHBrMiwgcHBrMywgcHBrNCwgcHBrNTsKIAl1bnNpZ25lZCBsb25nIGludCBwbmwsIHBuaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdm50d2lmaS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMKaW5kZXggZTc4YWVkZi4uN2Q2MTU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMKQEAgLTM5LDggKzM5LDYgQEAKICNpbmNsdWRlICJkYXRhcmF0ZS5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xNTMsOSArMTUxLDkgQEAKICkKIHsKIAlQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClwTWdtdEhhbmRsZTsKLQlpZiAocE1nbXRIYW5kbGUgIT0gTlVMTCkgeworCWlmIChwTWdtdEhhbmRsZSAhPSBOVUxMKQogCQlyZXR1cm4gcE1nbXQtPnVDdXJyQ2hhbm5lbDsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEwLDE3ICsyMDgsMTcgQEAKIAlpZiAocFN1cHBvcnRSYXRlSUVzKSB7CiAJCWZvciAoaWkgPSAwOyBpaSA8IHBTdXBwb3J0UmF0ZUlFcy0+bGVuOyBpaSsrKSB7CiAJCQlieVN1cHBvcnRSYXRlID0gREFUQVJBVEVieUdldFJhdGVJZHgocFN1cHBvcnRSYXRlSUVzLT5hYnlSYXRlc1tpaV0pOwotCQkJaWYgKGJ5U3VwcG9ydFJhdGUgPiBieU1heFN1cHBvcnRSYXRlKSB7CisJCQlpZiAoYnlTdXBwb3J0UmF0ZSA+IGJ5TWF4U3VwcG9ydFJhdGUpCiAJCQkJYnlNYXhTdXBwb3J0UmF0ZSA9IGJ5U3VwcG9ydFJhdGU7Ci0JCQl9CisKIAkJfQogCX0KIAlpZiAocEV4dFN1cHBvcnRSYXRlSUVzKSB7CiAJCWZvciAoaWkgPSAwOyBpaSA8IHBFeHRTdXBwb3J0UmF0ZUlFcy0+bGVuOyBpaSsrKSB7CiAJCQlieVN1cHBvcnRSYXRlID0gREFUQVJBVEVieUdldFJhdGVJZHgocEV4dFN1cHBvcnRSYXRlSUVzLT5hYnlSYXRlc1tpaV0pOwotCQkJaWYgKGJ5U3VwcG9ydFJhdGUgPiBieU1heFN1cHBvcnRSYXRlKSB7CisJCQlpZiAoYnlTdXBwb3J0UmF0ZSA+IGJ5TWF4U3VwcG9ydFJhdGUpCiAJCQkJYnlNYXhTdXBwb3J0UmF0ZSA9IGJ5U3VwcG9ydFJhdGU7Ci0JCQl9CisKIAkJfQogCX0KIApAQCAtMzYxLDExICszNTksMTAgQEAKIAogCWlmICgoZVBoeVR5cGUgIT0gUEhZX1RZUEVfQVVUTykgJiYKIAkgICAgKGVQaHlUeXBlICE9IHBNZ210LT5lQ3VycmVudFBIWU1vZGUpKSB7Ci0JCWlmIChDQVJEYlNldFBoeVBhcmFtZXRlcihwTWdtdC0+cEFkYXB0ZXIsIGVQaHlUeXBlLCAwLCAwLCBOVUxMLCBOVUxMKSA9PSB0cnVlKSB7CisJCWlmIChDQVJEYlNldFBoeVBhcmFtZXRlcihwTWdtdC0+cEFkYXB0ZXIsIGVQaHlUeXBlLCAwLCAwLCBOVUxMLCBOVUxMKSA9PSB0cnVlKQogCQkJcE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9IGVQaHlUeXBlOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAJcE1nbXQtPmVDb25maWdQSFlNb2RlID0gZVBoeVR5cGU7CiAJcmV0dXJuIHRydWU7CkBAIC0zNzksOSArMzc2LDggQEAKIHsKIAlQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClwTWdtdEhhbmRsZTsKIAotCWlmICgocE1nbXQgIT0gTlVMTCkgJiYgKHBlUGh5VHlwZSAhPSBOVUxMKSkgeworCWlmICgocE1nbXQgIT0gTlVMTCkgJiYgKHBlUGh5VHlwZSAhPSBOVUxMKSkKIAkJKihQQ0FSRF9QSFlfVFlQRSlwZVBoeVR5cGUgPSBwTWdtdC0+ZUNvbmZpZ1BIWU1vZGU7Ci0JfQogfQogCiAvKisKQEAgLTQyNywxMiArNDIzLDEyIEBACiAKIAlmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogCQlwQlNTID0gJihwTWdtdC0+c0JTU0xpc3RbaWldKTsKLQkJaWYgKCFwQlNTLT5iQWN0aXZlKSB7CisJCWlmICghcEJTUy0+YkFjdGl2ZSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgqcHZGaXJzdEJTUyA9PSBOVUxMKSB7CisKKwkJaWYgKCpwdkZpcnN0QlNTID09IE5VTEwpCiAJCQkqcHZGaXJzdEJTUyA9ICYocE1nbXQtPnNCU1NMaXN0W2lpXSk7Ci0JCX0KKwogCQl1Q291bnQrKzsKIAl9CiAJKnB1QlNTQ291bnQgPSB1Q291bnQ7CkBAIC00NTIsOSArNDQ4LDkgQEAKIAogCXdoaWxlICgqcHZOZXh0QlNTID09IE5VTEwpIHsKIAkJcEJTUysrOwotCQlpZiAocEJTUyA+ICYocE1nbXQtPnNCU1NMaXN0W01BWF9CU1NfTlVNXSkpIHsKKwkJaWYgKHBCU1MgPiAmKHBNZ210LT5zQlNTTGlzdFtNQVhfQlNTX05VTV0pKQogCQkJcmV0dXJuOwotCQl9CisKIAkJaWYgKHBCU1MtPmJBY3RpdmUgPT0gdHJ1ZSkgewogCQkJKnB2TmV4dEJTUyA9IHBCU1M7CiAJCQlyZXR1cm47CkBAIC00ODksMTAgKzQ4NSwxMCBAQAogCiAJaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgfHwKIAkgICAgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkpIHsKLQkJaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBieURlc3RBZGRyZXNzLCAmdU5vZGVJbmRleCkgPT0gZmFsc2UpIHsKKwkJaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBieURlc3RBZGRyZXNzLCAmdU5vZGVJbmRleCkgPT0gZmFsc2UpCiAJCQlyZXR1cm47Ci0JCX0KIAl9CisKIAlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeEF0dGVtcHRzKys7CiAJaWYgKGJUeE9rKSB7CiAJCS8vIHRyYW5zbWl0IHN1Y2Nlc3MsIFR4QXR0ZW1wdHMgYXQgbGVhc3QgcGx1cyBvbmUKQEAgLTUwMiw5ICs0OTgsOSBAQAogCQlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeEZhaWx1cmVzKys7CiAJfQogCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4UmV0cnkgKz0gcGJ5VHhGYWlsQ291bnRbTUFYX1JBVEVdOwotCWZvciAoaWkgPSAwOyBpaSA8IE1BWF9SQVRFOyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgTUFYX1JBVEU7IGlpKyspCiAJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFtpaV0gKz0gcGJ5VHhGYWlsQ291bnRbaWldOwotCX0KKwogCXJldHVybjsKIH0KIApAQCAtNTM1LDExICs1MzEsMTEgQEAKIAkJCXBTdXBwb3J0UmF0ZUlFcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5hYnlDdXJyU3VwcFJhdGVzKTsKIAkJCXBFeHRTdXBwb3J0UmF0ZUlFcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5hYnlDdXJyRXh0U3VwcFJhdGVzKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlICE9IFBIWV9UWVBFXzExQSkgeworCQkJaWYgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgIT0gUEhZX1RZUEVfMTFBKQogCQkJCXdUeERhdGFSYXRlID0gUkFURV8yTTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJd1R4RGF0YVJhdGUgPSBSQVRFXzI0TTsKLQkJCX0KKwogCQkJcFN1cHBvcnRSYXRlSUVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHBNZ210LT5hYnlDdXJyU3VwcFJhdGVzOwogCQkJcEV4dFN1cHBvcnRSYXRlSUVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzOwogCQl9CkBAIC01NTgsOSArNTU0LDkgQEAKIAkJCQkJICAgIHBTdXBwb3J0UmF0ZUlFcywKIAkJCQkJICAgIHBFeHRTdXBwb3J0UmF0ZUlFcwogKTsKLQlpZiAoYnlBQ0tSYXRlID4gKHVuc2lnbmVkIGNoYXIpIHdUeERhdGFSYXRlKSB7CisJaWYgKGJ5QUNLUmF0ZSA+ICh1bnNpZ25lZCBjaGFyKSB3VHhEYXRhUmF0ZSkKIAkJYnlBQ0tSYXRlID0gKHVuc2lnbmVkIGNoYXIpIHdUeERhdGFSYXRlOwotCX0KKwogCWJ5Q0NLQmFzaWNSYXRlID0gVk5UV0lGSWJ5R2V0QUNLVHhSYXRlKFJBVEVfMTFNLAogCQkJCQkJcFN1cHBvcnRSYXRlSUVzLAogCQkJCQkJcEV4dFN1cHBvcnRSYXRlSUVzCkBAIC01ODQsNTMgKzU4MCwxMiBAQAogewogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpcE1nbXRIYW5kbGU7CiAKLQlpZiAoYkdyb3VwS2V5KSB7CisJaWYgKGJHcm91cEtleSkKIAkJcmV0dXJuIHBNZ210LT5ieUNTU0dLOwotCX0gZWxzZSB7CisJZWxzZQogCQlyZXR1cm4gcE1nbXQtPmJ5Q1NTUEs7Ci0JfQogfQogCi0vKgotICBib29sCi0gIFZOVFdJRkliSW5pdCgKLSAgdm9pZCAqcEFkYXB0ZXJIYW5kbGVyLAotICB2b2lkICoqcE1nbXRIYW5kbGVyCi0pIHsKLSAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IE5VTEw7Ci0gIHVuc2lnbmVkIGludCBpaTsKLQotICBwTWdtdCA9IChQU01nbXRPYmplY3Qpa21hbGxvYyhzaXplb2YoU01nbXRPYmplY3QpLCAoaW50KUdGUF9BVE9NSUMpOwotICBpZiAocE1nbXQgPT0gTlVMTCkgewotICAqcE1nbXRIYW5kbGVyID0gTlVMTDsKLSAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgbWVtc2V0KHBNZ210LCAwLCBzaXplb2YoU01nbXRPYmplY3QpKTsKLSAgcE1nbXQtPnBBZGFwdGVyID0gKHZvaWQgKikgcEFkYXB0ZXJIYW5kbGVyOwotCi0gIC8vIHNob3VsZCBpbml0aWFsIE1BQyBhZGRyZXNzIGFieU1BQ0FkZHIKLSAgZm9yIChpaT0wOyBpaTxXTEFOX0JTU0lEX0xFTjsgaWkrKykgewotICBwTWdtdC0+YWJ5RGVzaXJlQlNTSURbaWldID0gMHhGRjsKLSAgfQotICBwTWdtdC0+cGJ5UFNQYWNrZXRQb29sID0gJnBNZ210LT5ieVBTUGFja2V0UG9vbFswXTsKLSAgcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sID0gJnBNZ210LT5ieU1nbXRQYWNrZXRQb29sWzBdOwotICBwTWdtdC0+YnlDU1NQSyA9IEtFWV9DVExfTk9ORTsKLSAgcE1nbXQtPmJ5Q1NTR0sgPSBLRVlfQ1RMX05PTkU7Ci0gIHBNZ210LT53SUJTU0JlYWNvblBlcmlvZCA9IERFRkFVTFRfSUJTU19CSTsKLQotICBwTWdtdC0+Y2JGcmVlQ21kUXVldWUgPSBDTURfUV9TSVpFOwotICBwTWdtdC0+dUNtZERlcXVldWVJZHggPSAwOwotICBwTWdtdC0+dUNtZEVucXVldWVJZHggPSAwOwotICBwTWdtdC0+ZUNvbW1hbmRTdGF0ZSA9IFdMQU5fQ01EX1NUQVRFX0lETEU7Ci0gIHBNZ210LT5iQ21kU3RvcCA9IGZhbHNlOwotICBwTWdtdC0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKLQotICAqcE1nbXRIYW5kbGVyID0gcE1nbXQ7Ci0gIHJldHVybiB0cnVlOwotICB9Ci0qLwotCiBib29sCiBWTlRXSUZJYlNldFBNS0lEQ2FjaGUoCiAJdm9pZCAqcE1nbXRPYmplY3QsCkBAIC02NDAsOSArNTk1LDkgQEAKIHsKIAlQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdE9iamVjdDsKIAotCWlmICh1bENvdW50ID4gTUFYX1BNS0lEX0NBQ0hFKSB7CisJaWYgKHVsQ291bnQgPiBNQVhfUE1LSURfQ0FDSEUpCiAJCXJldHVybiBmYWxzZTsKLQl9CisKIAlwTWdtdC0+Z3NQTUtJRENhY2hlLkJTU0lESW5mb0NvdW50ID0gdWxDb3VudDsKIAltZW1jcHkocE1nbXQtPmdzUE1LSURDYWNoZS5CU1NJREluZm8sIHBQTUtJREluZm8sICh1bENvdW50KnNpemVvZihQTUtJREluZm8pKSk7CiAJcmV0dXJuIHRydWU7CkBAIC02NTcsMTUgKzYxMiwxNCBAQAogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpIHBNZ210T2JqZWN0OwogCiAJZm9yICh3UmF0ZSA9IFJBVEVfNTRNOyB3UmF0ZSA+IFJBVEVfMU07IHdSYXRlLS0pIHsKLQkJaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud1N1cHBSYXRlICYgKDE8PHdSYXRlKSkgeworCQlpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS53U3VwcFJhdGUgJiAoMTw8d1JhdGUpKQogCQkJcmV0dXJuIHdSYXRlOwotCQl9CiAJfQotCWlmIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExQSkgeworCisJaWYgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFBKQogCQlyZXR1cm4gUkFURV82TTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dXJuIFJBVEVfMU07Ci0JfQogfQogCiB2b2lkCkBAIC02OTMsNyArNjQ3LDYgQEAKIAlQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdE9iamVjdDsKIAl1bnNpZ25lZCBjaGFyICpwYnlDdXJyZW50RUlEID0gKHVuc2lnbmVkIGNoYXIgKikocE1nbXQtPnBDdXJyTWVhc3VyZUVJRFJlcCk7CiAKLQkvL3NwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCWlmICgocHZNZWFzdXJlRUlEICE9IE5VTEwpICYmCiAJICAgIChwTWdtdC0+dUxlbmd0aE9mUmVwRUlEcyA8IChXTEFOX0EzRlJfTUFYTEVOIC0gc2l6ZW9mKE1FQVNFVVJFX1JFUCkgLSBzaXplb2YoV0xBTl84MDIxMUhEUl9BMykgLSAzKSkKICkgewpAQCAtNzM0LDcgKzY4Nyw3IEBACiAJaWYgKGJFbmRPZlJlcG9ydCkgewogCQlJRUVFMTFoYk1TUlJlcFR4KHBNZ210KTsKIAl9Ci0JLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTc0Niw5ICs2OTksNyBAQAogewogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpIHBNZ210T2JqZWN0OwogCi0JLy9zcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAlwTWdtdC0+dUN1cnJDaGFubmVsID0gYnlOZXdDaGFubmVsOwogCXBNZ210LT5iU3dpdGNoQ2hhbm5lbCA9IGZhbHNlOwotCS8vc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdm50d2lmaS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmgKaW5kZXggNGIwMWViZC4uODgwYjhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmgKQEAgLTIyMiwxMyArMjIyLDYgQEAKIAl1bnNpZ25lZCBjaGFyICpwYnlDQ0tCYXNpY1JhdGUsCiAJdW5zaWduZWQgY2hhciAqcGJ5T0ZETUJhc2ljUmF0ZQogKTsKLS8qCi0gIGJvb2wKLSAgVk5UV0lGSWJJbml0KAotICB2b2lkICpwQWRhcHRlckhhbmRsZXIsCi0gIHZvaWQgKipwTWdtdEhhbmRsZXIKLSk7Ci0qLwogCiB1bnNpZ25lZCBjaGFyCiBWTlRXSUZJYnlHZXRLZXlDeXBoZXIoCkBAIC0yNzYsMTIgKzI2OSw1IEBACiAJdm9pZCAqcE1nbXRPYmplY3QsCiAJdW5zaWduZWQgY2hhciBieU5ld0NoYW5uZWwKICk7Ci0vKgotICBib29sCi0gIFZOVFdJRkliUmFkYXJQcmVzZW50KAotICB2b2lkICpwTWdtdE9iamVjdCwKLSAgdW5zaWduZWQgY2hhciBieUNoYW5uZWwKLSk7Ci0qLwogCiAjZW5kaWYgLy9fX1ZOVFdJRklfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCmluZGV4IDcyY2FhYTIuLmE2ODk2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCkBAIC02MCw3ICs2MCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYwpAQCAtMTI4LDE0ICsxMjcsMTMgQEAKIAkJICAgIChwTWdtdC0+dVNjYW5DaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSkgewogCQkJYlN0b3AgPSB0cnVlOwogCQl9Ci0JCWlmIChwTWdtdC0+dUlCU1NDaGFubmVsID4gIENCX01BWF9DSEFOTkVMXzI0RykgeworCQlpZiAocE1nbXQtPnVJQlNTQ2hhbm5lbCA+ICBDQl9NQVhfQ0hBTk5FTF8yNEcpCiAJCQliU3RvcCA9IHRydWU7Ci0JCX0KKwogCX0KIAotCWlmIChiU3RvcCkgeworCWlmIChiU3RvcCkKIAkJTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOwotCX0KIH0gLyogdkFkSG9jQmVhY29uU3RvcCAqLwogCiAvKgpAQCAtMTk3LDEzICsxOTUsMTMgQEAKIAlQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKIAl1bnNpZ25lZCBpbnQgaWk7CiAKLQlpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgeworCWlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKQogCQlwYnlSYXRlID0gJmFieUN1cnJTdXBwUmF0ZXNBWzBdOwotCX0gZWxzZSBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgeworCWVsc2UgaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpCiAJCXBieVJhdGUgPSAmYWJ5Q3VyclN1cHBSYXRlc0JbMF07Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXBieVJhdGUgPSAmYWJ5Q3VyclN1cHBSYXRlc0dbMF07Ci0JfQorCiAJLy8gYnVpbGQgYW4gYXNzb2NyZXEgZnJhbWUgYW5kIHNlbmQgaXQKIAlwVHhQYWNrZXQgPSBzX01nck1ha2VQcm9iZVJlcXVlc3QKIAkJKApAQCAtMjE3LDExICsyMTUsMTAgQEAKIAogCWlmIChwVHhQYWNrZXQgIT0gTlVMTCkgewogCQlmb3IgKGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7Ci0JCQlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKKwkJCWlmIChjc01nbXRfeG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpICE9IENNRF9TVEFUVVNfUEVORElORykKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJQcm9iZSByZXF1ZXN0IHNlbmRpbmcgZmFpbC4uIFxuIik7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlByb2JlIHJlcXVlc3QgaXMgc2VuZGluZy4uIFxuIik7Ci0JCQl9CiAJCX0KIAl9CiB9CkBAIC0zNjAsMTEgKzM1NywxMSBAQAogCQkJLy8gU2V0IGNoYW5uZWwgYmFjawogCQkJc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNjYW5uaW5nLCBzZXQgYmFjayB0byBjaGFubmVsOiBbJWRdXG4iLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKLQkJCWlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgeworCQkJaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKQogCQkJCUNBUkRiU2V0QlNTSUQocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCBPUF9NT0RFX0FESE9DKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJQ0FSRGJTZXRCU1NJRChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5hYnlDdXJyQlNTSUQsIE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpOwotCQkJfQorCiAJCQl2QWRIb2NCZWFjb25SZXN0YXJ0KHBEZXZpY2UpOwogCQkJc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogCkBAIC0zNzcsNyArMzc0LDYgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpZiAocE1nbXQtPnVTY2FuQ2hhbm5lbCA9PSBwRGV2aWNlLT5ieU1pbkNoYW5uZWwpIHsKLQkJCQkvL3BNZ210LT5lU2NhblR5cGUgPSBXTUFDX1NDQU5fQUNUSVZFOwogCQkJCXBNZ210LT5hYnlTY2FuQlNTSURbMF0gPSAweEZGOwogCQkJCXBNZ210LT5hYnlTY2FuQlNTSURbMV0gPSAweEZGOwogCQkJCXBNZ210LT5hYnlTY2FuQlNTSURbMl0gPSAweEZGOwpAQCAtMzg1LDE5ICszODEsMTcgQEAKIAkJCQlwTWdtdC0+YWJ5U2NhbkJTU0lEWzRdID0gMHhGRjsKIAkJCQlwTWdtdC0+YWJ5U2NhbkJTU0lEWzVdID0gMHhGRjsKIAkJCQlwSXRlbVNTSUQtPmJ5RWxlbWVudElEID0gV0xBTl9FSURfU1NJRDsKLQkJCQkvLyBjbGVhciBic3NpZCBsaXN0Ci0JCQkJLy8gQlNTdkNsZWFyQlNTTGlzdCgodm9pZCAqKXBEZXZpY2UsIHBEZXZpY2UtPmJMaW5rUGFzcyk7CiAJCQkJcE1nbXQtPmVTY2FuU3RhdGUgPSBXTUFDX0lTX1NDQU5OSU5HOwogCiAJCQl9CiAKIAkJCXZBZEhvY0JlYWNvblN0b3AocERldmljZSk7CiAKLQkJCWlmIChzZXRfY2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT51U2NhbkNoYW5uZWwpKSB7CisJCQlpZiAoc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dVNjYW5DaGFubmVsKSkKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTQ0FOIENoYW5uZWw6ICVkXG4iLCBwTWdtdC0+dVNjYW5DaGFubmVsKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU0VUIFNDQU4gQ2hhbm5lbCBGYWlsOiAlZFxuIiwgcE1nbXQtPnVTY2FuQ2hhbm5lbCk7Ci0JCQl9CisKIAkJCUNBUkRiU2V0QlNTSUQocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCBPUF9NT0RFX1VOS05PV04pOwogCQkJcE1nbXQtPnVTY2FuQ2hhbm5lbCsrOwogLy8yMDA4LTgtNCA8bW9kaWZ5PiBieSBjaGVzdGVyCkBAIC00MzAsMTEgKzQyNCwxMCBAQAogCQkvLyBTZXQgY2hhbm5lbCBiYWNrCiAJCXNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNjYW5uaW5nLCBzZXQgYmFjayB0byBjaGFubmVsOiBbJWRdXG4iLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKLQkJaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7CisJCWlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkKIAkJCUNBUkRiU2V0QlNTSUQocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCBPUF9NT0RFX0FESE9DKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJQ0FSRGJTZXRCU1NJRChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5hYnlDdXJyQlNTSUQsIE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpOwotCQl9CiAKIAkJcE1nbXQtPmVTY2FuU3RhdGUgPSBXTUFDX05PX1NDQU5OSU5HOwogCQl2QWRIb2NCZWFjb25SZXN0YXJ0KHBEZXZpY2UpOwpAQCAtNDY4LDcgKzQ2MSw2IEBACiAJCQltZW1zZXQocEl0ZW1TU0lELT5hYnlTU0lELCAwLCBXTEFOX1NTSURfTUFYTEVOKTsKIAkJCXBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gZmFsc2U7Ci0vLyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPSBmYWxzZTsKIAkJfQogCQluZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAJCXBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0RJU0FTU09DSUFURV9XQUlUOwpAQCAtNDgwLDcgKzQ3Miw2IEBACiAJCX0KIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIENBUkRiUmFkaW9Qb3dlck9mZlxuIik7CiAJCS8vMjAwOC0wOS0wMiAgPG1hcms+CWJ5IGNoZXN0ZXIKLQkJLy8gQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwogCQlzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7CiAJCWJyZWFrOwogCkBAIC00OTIsNyArNDgzLDYgQEAKIAkJCXJldHVybjsKIAkJfQogLy8yMDA4LTA5LTAyICA8bWFyaz4gYnkgY2hlc3RlcgotCQkvLyBDQVJEYlJhZGlvUG93ZXJPZmYocERldmljZSk7CiAJCXNfYkNvbW1hbmRDb21wbGV0ZShwRGV2aWNlKTsKIAkJYnJlYWs7CiAKQEAgLTUwNCw4ICs0OTQsNiBAQAogCQkJcmV0dXJuOwogCQl9CiAJCXByaW50aygiY2hlc3Rlci1hYnlEZXNpcmVTU0lEPSVzXG4iLCAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQpLT5hYnlTU0lEKTsKLQkJLy9tZW1jcHkocE1nbXQtPmFieUFkSG9jU1NJRCxwTWdtdC0+YWJ5RGVzaXJlU1NJRCwKLQkJLy8oKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQpLT5sZW4gKyBXTEFOX0lFSERSX0xFTik7CiAJCXBJdGVtU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlEZXNpcmVTU0lEOwogCQlwSXRlbVNTSURDdXJyID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEOwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgY21kOiBkZXNpcmUgc3NpZCA9ICVzXG4iLCBwSXRlbVNTSUQtPmFieVNTSUQpOwpAQCAtNTQzLDkgKzUzMSw5IEBACiAJCWlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYgKHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfSk9JTlRFRCkpIHsKIAkJCS8vIENhbGwgbWdyIHRvIGJlZ2luIHRoZSBkZWF1dGhlbnRpY2F0aW9uCiAJCQkvLyByZWFzb24gPSAoMykgYmVjYXVzZSBzdGEgaGFzIGxlZnQgRVNTCi0JCQlpZiAocE1nbXQtPmVDdXJyU3RhdGUgPj0gV01BQ19TVEFURV9BVVRIKSB7CisJCQlpZiAocE1nbXQtPmVDdXJyU3RhdGUgPj0gV01BQ19TVEFURV9BVVRIKQogCQkJCXZNZ3JEZUF1dGhlbkJlZ2luU3RhKCh2b2lkICopcERldmljZSwgcE1nbXQsIHBNZ210LT5hYnlDdXJyQlNTSUQsICgzKSwgJlN0YXR1cyk7Ci0JCQl9CisKIAkJCS8vIENhbGwgbWdyIHRvIGJlZ2luIHRoZSBhdXRoZW50aWNhdGlvbgogCQkJdk1nckF1dGhlbkJlZ2luU3RhKCh2b2lkICopcERldmljZSwgcE1nbXQsICZTdGF0dXMpOwogCQkJaWYgKFN0YXR1cyA9PSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKQEAgLTU2MCw5ICs1NDgsOSBAQAogCQkvLyBpZiBBZGhvYyBtb2RlCiAJCWVsc2UgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7CiAJCQlpZiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9KT0lOVEVEKSB7Ci0JCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSkgeworCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpCiAJCQkJCW5ldGlmX3dha2VfcXVldWUocERldmljZS0+ZGV2KTsKLQkJCQl9CisKIAkJCQlwRGV2aWNlLT5iTGlua1Bhc3MgPSB0cnVlOwogCiAJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKQEAgLTU3MSw5ICs1NTksOSBAQAogCQkJfSBlbHNlIHsKIAkJCQkvLyBzdGFydCBvd24gSUJTUwogCQkJCXZNZ3JDcmVhdGVPd25JQlNTKCh2b2lkICopcERldmljZSwgJlN0YXR1cyk7Ci0JCQkJaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCQlpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKIAkJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFdMQU5fQ01EX0lCU1NfQ1JFQVRFIGZhaWwgISBcbiIpOwotCQkJCX0KKwogCQkJCUJTU3ZBZGRNdWx0aWNhc3ROb2RlKHBEZXZpY2UpOwogCQkJfQogCQl9CkBAIC01ODMsMTMgKzU3MSwxMyBAQAogCQkJICAgIHBNZ210LT5lQ29uZmlnTW9kZSA9PSBXTUFDX0NPTkZJR19BVVRPKSB7CiAJCQkJLy8gc3RhcnQgb3duIElCU1MKIAkJCQl2TWdyQ3JlYXRlT3duSUJTUygodm9pZCAqKXBEZXZpY2UsICZTdGF0dXMpOwotCQkJCWlmIChTdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCQkJaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCiAJCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBXTEFOX0NNRF9JQlNTX0NSRUFURSBmYWlsICEgXG4iKTsKLQkJCQl9CisKIAkJCQlCU1N2QWRkTXVsdGljYXN0Tm9kZShwRGV2aWNlKTsKLQkJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKSB7CisJCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSkKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwotCQkJCX0KKwogCQkJCXBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7CiAJCQl9IGVsc2UgewogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkRpc2Nvbm5lY3QgU1NJRCBub25lXG4iKTsKQEAgLTY0MSwxMiArNjI5LDEyIEBACiAJY2FzZSBXTEFOX0FTU09DSUFURV9XQUlUOgogCQlpZiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykgewogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0FTU09DXG4iKTsKLQkJCWlmIChwRGV2aWNlLT5lUFNNb2RlICE9IFdNQUNfUE9XRVJfQ0FNKSB7CisJCQlpZiAocERldmljZS0+ZVBTTW9kZSAhPSBXTUFDX1BPV0VSX0NBTSkKIAkJCQlQU3ZFbmFibGVQb3dlclNhdmluZygodm9pZCAqKXBEZXZpY2UsIHBNZ210LT53TGlzdGVuSW50ZXJ2YWwpOwotCQkJfQotCQkJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA+PSBXTUFDX0FVVEhfV1BBKSB7CisKKwkJCWlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPj0gV01BQ19BVVRIX1dQQSkKIAkJCQlLZXliUmVtb3ZlQWxsS2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLQkJCX0KKwogCQkJcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKIAkJCXBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCA9IDA7CiAJCQlwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA9IDA7CkBAIC02NTUsOSArNjQzLDkgQEAKIAkJCQlCQnZTZXRGT0UocERldmljZS0+UG9ydE9mZnNldCk7CiAJCQkJUFNiU2VuZE51bGxQYWNrZXQocERldmljZSk7CiAJCQl9Ci0JCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKSB7CisJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKQogCQkJCW5ldGlmX3dha2VfcXVldWUocERldmljZS0+ZGV2KTsKLQkJCX0KKwogI2lmZGVmIFR4SW5TbGVlcAogCQkJaWYgKHBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlcikgeyAgICAvL1R4RGF0YVRpbWVyIGlzIG5vdCB0cmlnZ2VyZWQgYXQgdGhlIGZpcnN0IHRpbWUKIAkJCQlkZWxfdGltZXIoJnBEZXZpY2UtPnNUaW1lclR4RGF0YSk7CkBAIC02NjcsOCArNjU1LDggQEAKIAkJCQlwRGV2aWNlLT5zVGltZXJUeERhdGEuZXhwaXJlcyA9IFJVTl9BVCgxMCpIWik7ICAgICAgLy8xMHMgY2FsbGJhY2sKIAkJCQlwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IGZhbHNlOwogCQkJCXBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7Ci0JCQl9IGVsc2UgewogCQkJfQorCiAJCQlwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgPSB0cnVlOwogCQkJYWRkX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwogI2VuZGlmCkBAIC03MDMsMTcgKzY5MSwxNyBAQAogCQkJcERldmljZS0+YkZpeFJhdGUgPSBmYWxzZTsKIAogCQkJdk1nckNyZWF0ZU93bklCU1MoKHZvaWQgKilwRGV2aWNlLCAmU3RhdHVzKTsKLQkJCWlmIChTdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCQlpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgdk1nckNyZWF0ZU93bklCU1MgZmFpbCAhIFxuIik7Ci0JCQl9CisKIAkJCS8vIGFsd2F5IHR1cm4gb2ZmIHVuaWNhc3QgYml0CiAJCQlNQUN2UmVnQml0c09mZihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1JDUiwgUkNSX1VOSUNBU1QpOwogCQkJcERldmljZS0+YnlSeE1vZGUgJj0gflJDUl9VTklDQVNUOwogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAid2NtZDogcnhfbW9kZSA9ICV4XG4iLCBwRGV2aWNlLT5ieVJ4TW9kZSk7CiAJCQlCU1N2QWRkTXVsdGljYXN0Tm9kZShwRGV2aWNlKTsKLQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpIHsKKwkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwotCQkJfQorCiAJCQlwRGV2aWNlLT5iTGlua1Bhc3MgPSB0cnVlOwogCQkJYWRkX3RpbWVyKCZwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spOwogCQl9CkBAIC03MzAsOSArNzE4LDkgQEAKIAkJCQl9IGVsc2UgewogCQkJCQlwRGV2aWNlLT5iTW9yZURhdGEgPSB0cnVlOwogCQkJCX0KLQkJCQlpZiAoIWRldmljZV9kbWEwX3htaXQocERldmljZSwgc2tiLCAwKSkgeworCQkJCWlmICghZGV2aWNlX2RtYTBfeG1pdChwRGV2aWNlLCBza2IsIDApKQogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNdWx0aWNhc3QgcHMgdHggZmFpbCBcbiIpOwotCQkJCX0KKwogCQkJCXBNZ210LT5zTm9kZURCVGFibGVbMF0ud0VuUXVldWVDbnQtLTsKIAkJCX0KIAkJfQpAQCAtNzUyLDkgKzc0MCw5IEBACiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlwRGV2aWNlLT5iTW9yZURhdGEgPSB0cnVlOwogCQkJCQl9Ci0JCQkJCWlmICghZGV2aWNlX2RtYTBfeG1pdChwRGV2aWNlLCBza2IsIGlpKSkgeworCQkJCQlpZiAoIWRldmljZV9kbWEwX3htaXQocERldmljZSwgc2tiLCBpaSkpCiAJCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJzdGEgcHMgdHggZmFpbCBcbiIpOwotCQkJCQl9CisKIAkJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0ud0VuUXVldWVDbnQtLTsKIAkJCQkJLy8gY2hlY2sgaWYgc3RhIHBzIGVuYWJsZWQsIGFuZCB3YWl0IG5leHQgcHNwb2xsLgogCQkJCQkvLyBpZiBzdGEgcHMgZGlzYWJsZSwgdGhlbiBzZW5kIGFsbCBwZW5kaW5nIGJ1ZmZlcnMuCkBAIC03ODUsNyArNzczLDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFdMQU5fQ01EX0NIRUNLX0JCU0VOU0lUSVZJVFlfQ0hBTkdFOgotCQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImVDb21tYW5kU3RhdGUgPT0gV0xBTl9DTURfQ0hFQ0tfQkJTRU5TSVRJVklUWV9TVEFSVFxuIik7CiAJCS8vIHdhaXQgYWxsIFREIGNvbXBsZXRlCiAJCWlmIChwRGV2aWNlLT5pVERVc2VkW1RZUEVfQUMwRE1BXSAhPSAwKSB7CiAJCQl2Q29tbWFuZFRpbWVyV2FpdCgodm9pZCAqKXBEZXZpY2UsIDEwKTsKQEAgLTgyMCw3ICs4MDcsNiBAQAogewogCVBXTEFOX0lFX1NTSUQgcFNTSUQ7CiAJYm9vbCBiUmFkaW9DbWQgPSBmYWxzZTsKLQkvL3Vuc2lnbmVkIHNob3J0IHdEZUF1dGhlblJlYXNvbiA9IDA7CiAJYm9vbCBiRm9yY2VTQ0FOID0gdHJ1ZTsKIAlQU01nbXRPYmplY3QgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAKQEAgLTg0MiwxOSArODI4LDExIEBACiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJlQ29tbWFuZFN0YXRlPSBXTEFOX0NNRF9CU1NJRF9TQ0FOXG4iKTsKIAkJCXBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0NNRF9TQ0FOX1NUQVJUOwogCQkJcE1nbXQtPnVTY2FuQ2hhbm5lbCA9IDA7Ci0JCQlpZiAocFNTSUQtPmxlbiAhPSAwKSB7CisJCQlpZiAocFNTSUQtPmxlbiAhPSAwKQogCQkJCW1lbWNweShwTWdtdC0+YWJ5U2NhblNTSUQsIHBTU0lELCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJbWVtc2V0KHBNZ210LT5hYnlTY2FuU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMSk7Ci0JCQl9Ci0vKgotICBpZiAoKGJGb3JjZVNDQU4gPT0gZmFsc2UpICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkpIHsKLSAgaWYgKChwU1NJRC0+bGVuID09ICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5sZW4pICYmCi0gICghbWVtY21wKHBTU0lELT5hYnlTU0lELCAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+YWJ5U1NJRCwgcFNTSUQtPmxlbikpKSB7Ci0gIHBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0NNRF9JRExFOwotICB9Ci0gIH0KLSovCisKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQ01EX1NTSUQ6CiAJCQlwRGV2aWNlLT5lQ29tbWFuZFN0YXRlID0gV0xBTl9DTURfU1NJRF9TVEFSVDsKQEAgLTkwMCw5ICs4NzgsOSBAQAogewogCVBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogCi0JaWYgKHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlID09IDApIHsKKwlpZiAocERldmljZS0+Y2JGcmVlQ21kUXVldWUgPT0gMCkKIAkJcmV0dXJuIGZhbHNlOwotCX0KKwogCXBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uZUNtZCA9IGVDb21tYW5kOwogCXBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uYkZvcmNlU0NBTiA9IHRydWU7CiAJbWVtc2V0KHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uYWJ5Q21kRGVzaXJlU1NJRCwgMCAsIFdMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDEpOwpAQCAtOTIzLDExICs5MDEsNiBAQAogCQljYXNlIFdMQU5fQ01EX0RJU0FTU09DSUFURToKIAkJCXBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uYk5lZWRSYWRpb09GRiA9ICooKGludCAqKXBieUl0ZW0wKTsKIAkJCWJyZWFrOwotLyoKLSAgY2FzZSBXTEFOX0NNRF9ERUFVVEg6Ci0gIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0ud0RlQXV0aGVuUmVhc29uID0gKigodW5zaWduZWQgc2hvcnQgKilwYnlJdGVtMCk7Ci0gIGJyZWFrOwotKi8KIAogCQljYXNlIFdMQU5fQ01EX1JYX1BTUE9MTDoKIAkJCWJyZWFrOwpAQCAtOTQ4LDEwICs5MjEsOSBAQAogCUFERF9PTkVfV0lUSF9XUkFQX0FST1VORChwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeCwgQ01EX1FfU0laRSk7CiAJcERldmljZS0+Y2JGcmVlQ21kUXVldWUtLTsKIAotCWlmICghcERldmljZS0+YkNtZFJ1bm5pbmcpIHsKKwlpZiAoIXBEZXZpY2UtPmJDbWRSdW5uaW5nKQogCQlzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7Ci0JfSBlbHNlIHsKLQl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuYwppbmRleCA5NTAwMzlmLi5mZGRlYTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuYwpAQCAtNDMsNyArNDMsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vIHN0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTEzLDcgKzExMyw2IEBACiAJCWlmIChwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgJiYKIAkJICAgIGV0aGVyX2FkZHJfZXF1YWwocERldmljZS0+c1J4REZDQltpaV0uYWJ5QWRkcjIsCiAJCQkJICAgICBwTUFDSGVhZGVyLT5hYnlBZGRyMikpIHsKLQkJCS8vCiAJCQlyZXR1cm4gaWk7CiAJCX0KIAl9CkBAIC0xOTIsOSArMTkxLDggQEAKIAkJCXBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS53RnJhZ051bSA9IChwTUFDSGVhZGVyLT53U2VxQ3RsICYgMHgwMDBGKTsKIAkJfSBlbHNlIHsKIAkJCXBEZXZpY2UtPnVDdXJyZW50REZDQklkeCA9IFdDVEx1SW5zZXJ0REZDQihwRGV2aWNlLCBwTUFDSGVhZGVyKTsKLQkJCWlmIChwRGV2aWNlLT51Q3VycmVudERGQ0JJZHggPT0gcERldmljZS0+Y2JERkNCKSB7CisJCQlpZiAocERldmljZS0+dUN1cnJlbnRERkNCSWR4ID09IHBEZXZpY2UtPmNiREZDQikKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CiAJCX0KIAkJLy8gcmVzZXJ2ZSA0IGJ5dGUgdG8gbWF0Y2ggTUFDIFJYIEJ1ZmZlcgogCQlwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKShwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0uc2tiLT5kYXRhICsgNCk7CkBAIC0yMDIsNyArMjAwLDYgQEAKIAkJcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmNiRnJhbWVMZW5ndGggPSBjYkZyYW1lTGVuZ3RoOwogCQlwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIgKz0gY2JGcmFtZUxlbmd0aDsKIAkJcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLndGcmFnTnVtKys7Ci0JCS8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRmlyc3QgcERldmljZS0+dUN1cnJlbnRERkNCSWR4PSAlZFxuIiwgcERldmljZS0+dUN1cnJlbnRERkNCSWR4KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXBEZXZpY2UtPnVDdXJyZW50REZDQklkeCA9IFdDVEx1U2VhcmNoREZDQihwRGV2aWNlLCBwTUFDSGVhZGVyKTsKQEAgLTIxNCw3ICsyMTEsNiBAQAogCQkJCXBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5jYkZyYW1lTGVuZ3RoICs9IChjYkZyYW1lTGVuZ3RoIC0gdUhlYWRlclNpemUpOwogCQkJCXBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5wYnlSeEJ1ZmZlciArPSAoY2JGcmFtZUxlbmd0aCAtIHVIZWFkZXJTaXplKTsKIAkJCQlwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ud0ZyYWdOdW0rKzsKLQkJCQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNlY29uZCBwRGV2aWNlLT51Q3VycmVudERGQ0JJZHg9ICVkXG4iLCBwRGV2aWNlLT51Q3VycmVudERGQ0JJZHgpOwogCQkJfSBlbHNlIHsKIAkJCQkvLyBzZXEgZXJyb3Igb3IgZnJhZyAjIGVycm9yIGZsdXNoIERGQ0IKIAkJCQlwRGV2aWNlLT5jYkZyZWVERkNCKys7CkBAIC0yMjgsNyArMjI0LDYgQEAKIAkJCS8vZW5xIGRlZnJhZ2NvbnRyb2xibG9jawogCQkJcERldmljZS0+Y2JGcmVlREZDQisrOwogCQkJcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmJJblVzZSA9IGZhbHNlOwotCQkJLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJMYXN0IHBEZXZpY2UtPnVDdXJyZW50REZDQklkeD0gJWRcbiIsIHBEZXZpY2UtPnVDdXJyZW50REZDQklkeCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5jCmluZGV4IGI2NzNiYzkuLjY3Mzg0NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5jCkBAIC04OCw3ICs4OCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgpAQCAtMzUxLDExICszNTAsMTAgQEAKIAlwTWdtdC0+cGJ5UFNQYWNrZXRQb29sID0gJnBNZ210LT5ieVBTUGFja2V0UG9vbFswXTsKIAlwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2wgPSAmcE1nbXQtPmJ5TWdtdFBhY2tldFBvb2xbMF07CiAJcE1nbXQtPnVDdXJyQ2hhbm5lbCA9IHBEZXZpY2UtPnVDaGFubmVsOwotCWZvciAoaWkgPSAwOyBpaSA8IFdMQU5fQlNTSURfTEVOOyBpaSsrKSB7CisJZm9yIChpaSA9IDA7IGlpIDwgV0xBTl9CU1NJRF9MRU47IGlpKyspCiAJCXBNZ210LT5hYnlEZXNpcmVCU1NJRFtpaV0gPSAweEZGOwotCX0KKwogCXBNZ210LT5zQXNzb2NJbmZvLkFzc29jSW5mby5MZW5ndGggPSBzaXplb2YoTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04pOwotCS8vbWVtc2V0KHBNZ210LT5hYnlEZXNpcmVTU0lELCAwLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKzEpOwogCXBNZ210LT5ieUNTU1BLID0gS0VZX0NUTF9OT05FOwogCXBNZ210LT5ieUNTU0dLID0gS0VZX0NUTF9OT05FOwogCXBNZ210LT53SUJTU0JlYWNvblBlcmlvZCA9IERFRkFVTFRfSUJTU19CSTsKQEAgLTQ1OCw5ICs0NTYsOSBAQAogCiAJcE1nbXQtPndDdXJyQ2FwSW5mbyA9IDA7CiAJcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19FU1MoMSk7Ci0JaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKSB7CisJaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKQogCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1BSSVZBQ1koMSk7Ci0JfQorCiAJcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKDEpOwogCWlmIChwTWdtdC0+d0xpc3RlbkludGVydmFsID09IDApCiAJCXBNZ210LT53TGlzdGVuSW50ZXJ2YWwgPSAxOyAgICAvLyBhdCBsZWFzdCBvbmUuCkBAIC00NjgsMTMgKzQ2NiwxMSBAQAogCS8vIEVSUCBQaHkgKDgwMi4xMWcpIHNob3VsZCBzdXBwb3J0IHNob3J0IHByZWFtYmxlLgogCWlmIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExRykgewogCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSk7Ci0JCWlmIChDQVJEYklzU2hvclNsb3RUaW1lKHBNZ210LT5wQWRhcHRlcikpIHsKKwkJaWYgKENBUkRiSXNTaG9yU2xvdFRpbWUocE1nbXQtPnBBZGFwdGVyKSkKIAkJCXBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgxKTsKLQkJfQogCX0gZWxzZSBpZiAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUIpIHsKLQkJaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikpIHsKKwkJaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikpCiAJCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSk7Ci0JCX0KIAl9CiAJaWYgKHBNZ210LT5iMTFoRW5hYmxlKQogCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NQRUNUUlVNTU5HKDEpOwpAQCAtNDk5LDggKzQ5NSw5IEBACiAJCQlwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfQVNTT0NQRU5ESU5HOwogCQkJKnBTdGF0dXMgPSBDTURfU1RBVFVTX1NVQ0NFU1M7CiAJCX0KLQl9IGVsc2UKKwl9IGVsc2UgewogCQkqcFN0YXR1cyA9IENNRF9TVEFUVVNfUkVTT1VSQ0VTOworCX0KIAogCXJldHVybjsKIH0KQEAgLTUyNyw5ICs1MjQsOCBAQAogCiAJcE1nbXQtPndDdXJyQ2FwSW5mbyA9IDA7CiAJcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19FU1MoMSk7Ci0JaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKSB7CisJaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKQogCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1BSSVZBQ1koMSk7Ci0JfQogCiAJcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKDEpOwogCkBAIC01MzksMTQgKzUzNSwxMyBAQAogCS8vIEVSUCBQaHkgKDgwMi4xMWcpIHNob3VsZCBzdXBwb3J0IHNob3J0IHByZWFtYmxlLgogCWlmIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExRykgewogCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSk7Ci0JCWlmIChDQVJEYklzU2hvclNsb3RUaW1lKHBNZ210LT5wQWRhcHRlcikpIHsKKwkJaWYgKENBUkRiSXNTaG9yU2xvdFRpbWUocE1nbXQtPnBBZGFwdGVyKSkKIAkJCXBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgxKTsKLQkJfQogCX0gZWxzZSBpZiAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUIpIHsKLQkJaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikpIHsKKwkJaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikpCiAJCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSk7Ci0JCX0KIAl9CisKIAlpZiAocE1nbXQtPmIxMWhFbmFibGUpCiAJCXBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU1BFQ1RSVU1NTkcoMSk7CiAKQEAgLTU2NSwxMSArNTYwLDEwIEBACiAJaWYgKHBUeFBhY2tldCAhPSBOVUxMKSB7CiAJCS8qIHNlbmQgdGhlIGZyYW1lICovCiAJCSpwU3RhdHVzID0gY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KTsKLQkJaWYgKCpwU3RhdHVzICE9IENNRF9TVEFUVVNfUEVORElORykgeworCQlpZiAoKnBTdGF0dXMgIT0gQ01EX1NUQVRVU19QRU5ESU5HKQogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTWd0OlJlYXNzb2NpYXRpb24gdHggZmFpbGVkLlxuIik7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1ndDpSZWFzc29jaWF0aW9uIHR4IHNlbmRpbmcuXG4iKTsKLQkJfQogCX0KIAogCXJldHVybjsKQEAgLTY4NiwyMSArNjgwLDIwIEBACiAJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlBTRW5hYmxlID0KIAkJCVdMQU5fR0VUX0ZDX1BXUk1HVChzRnJhbWUucEhkci0+c0EzLndGcmFtZUN0bCkgPyB0cnVlIDogZmFsc2U7CiAJCS8vIFRvZG86IGNoZWNrIHN0YSBiYXNpYyByYXRlLCBpZiBhcCBjYW4ndCBzdXBwb3J0LCBzZXQgc3RhdHVzIGNvZGUKLQkJaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKKwkJaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpCiAJCQl1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOXzExQjsKLQkJfQorCiAJCWFieUN1cnJTdXBwUmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwogCQlhYnlDdXJyU3VwcFJhdGVzWzFdID0gUkFURXVTZXRJRSgoUFdMQU5fSUVfU1VQUF9SQVRFUylzRnJhbWUucFN1cHBSYXRlcywKIAkJCQkJCSAoUFdMQU5fSUVfU1VQUF9SQVRFUylhYnlDdXJyU3VwcFJhdGVzLAogCQkJCQkJIHVSYXRlTGVuKTsKIAkJYWJ5Q3VyckV4dFN1cHBSYXRlc1swXSA9IFdMQU5fRUlEX0VYVFNVUFBfUkFURVM7Ci0JCWlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFHKSB7CisJCWlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFHKQogCQkJYWJ5Q3VyckV4dFN1cHBSYXRlc1sxXSA9IFJBVEV1U2V0SUUoKFBXTEFOX0lFX1NVUFBfUkFURVMpc0ZyYW1lLnBFeHRTdXBwUmF0ZXMsCiAJCQkJCQkJICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKWFieUN1cnJFeHRTdXBwUmF0ZXMsCiAJCQkJCQkJICAgIHVSYXRlTGVuKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJYWJ5Q3VyckV4dFN1cHBSYXRlc1sxXSA9IDA7Ci0JCX0KIAogCQlSQVRFdlBhcnNlTWF4UmF0ZSgodm9pZCAqKXBEZXZpY2UsCiAJCQkJICAoUFdMQU5fSUVfU1VQUF9SQVRFUylhYnlDdXJyU3VwcFJhdGVzLApAQCAtNzM2LDkgKzcyOSw4IEBACiAJCQlwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSB0cnVlOwogCQkJcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSB0cnVlOwogCQl9Ci0JCWlmICghcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSkgeworCQlpZiAoIXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlNob3J0UHJlYW1ibGUpCiAJCQlwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IHRydWU7Ci0JCX0KIAogCQlEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIkFzc29jaWF0ZSBBSUQ9ICVkIFxuIiwgd0Fzc29jQUlEKTsKIAkJREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJNQUM9JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlggXG4iLApAQCAtNzUxLDggKzc0Myw4IEBACiAJCQkpOwogCQlEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIk1heCBTdXBwb3J0IHJhdGUgPSAlZCBcbiIsCiAJCQlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSk7Ci0JfS8vZWxzZSB7IFRPRE86IHJlY2VpdmVkIFNUQSB1bmRlciBzdGF0ZTEgaGFuZGxlIH0KLQllbHNlIHsKKwl9IGVsc2UgeworCQkvKiBUT0RPOiByZWNlaXZlZCBTVEEgdW5kZXIgc3RhdGUxIGhhbmRsZSAqLwogCQlyZXR1cm47CiAJfQogCkBAIC03NjksMTcgKzc2MSwxNSBAQAogCQkJKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMKICk7CiAJaWYgKHBUeFBhY2tldCAhPSBOVUxMKSB7Ci0JCWlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCkgeworCQlpZiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQpCiAJCQlyZXR1cm47Ci0JCX0KKwogCQkvKiBzZW5kIHRoZSBmcmFtZSAqLwogCQlTdGF0dXMgPSBjc01nbXRfeG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpOwotCQlpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfUEVORElORykgeworCQlpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfUEVORElORykKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1ndDpBc3NvYyByZXNwb25zZSB0eCBmYWlsZWRcbiIpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6QXNzb2MgcmVzcG9uc2UgdHggc2VuZGluZy4uXG4iKTsKLQkJfQotCiAJfQogCiAJcmV0dXJuOwpAQCAtODM5LDkgKzgyOSw4IEBACiAJCQlXTEFOX0dFVF9GQ19QV1JNR1Qoc0ZyYW1lLnBIZHItPnNBMy53RnJhbWVDdGwpID8gdHJ1ZSA6IGZhbHNlOwogCQkvLyBUb2RvOiBjaGVjayBzdGEgYmFzaWMgcmF0ZSwgaWYgYXAgY2FuJ3Qgc3VwcG9ydCwgc2V0IHN0YXR1cyBjb2RlCiAKLQkJaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKKwkJaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpCiAJCQl1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOXzExQjsKLQkJfQogCiAJCWFieUN1cnJTdXBwUmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwogCQlhYnlDdXJyU3VwcFJhdGVzWzFdID0gUkFURXVTZXRJRSgoUFdMQU5fSUVfU1VQUF9SQVRFUylzRnJhbWUucFN1cHBSYXRlcywKQEAgLTg5MSw5ICs4ODAsOCBAQAogCQkJcERldmljZS0+YlByb3RlY3RNb2RlID0gdHJ1ZTsKIAkJCXBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gdHJ1ZTsKIAkJfQotCQlpZiAoIXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlNob3J0UHJlYW1ibGUpIHsKKwkJaWYgKCFwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFByZWFtYmxlKQogCQkJcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSB0cnVlOwotCQl9CiAKIAkJREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJSeCBSZUFzc29jaWF0ZSBBSUQ9ICVkIFxuIiwgd0Fzc29jQUlEKTsKIAkJREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJNQUM9JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlggXG4iLApAQCAtOTI0LDE1ICs5MTIsMTQgQEAKIAogCWlmIChwVHhQYWNrZXQgIT0gTlVMTCkgewogCQkvKiBzZW5kIHRoZSBmcmFtZSAqLwotCQlpZiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQpIHsKKwkJaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkKQogCQkJcmV0dXJuOwotCQl9CisKIAkJU3RhdHVzID0gY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KTsKLQkJaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKKwkJaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1BFTkRJTkcpCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6UmVBc3NvYyByZXNwb25zZSB0eCBmYWlsZWRcbiIpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6UmVBc3NvYyByZXNwb25zZSB0eCBzZW5kaW5nLi5cbiIpOwotCQl9CiAJfQogCXJldHVybjsKIH0KQEAgLTk5MCw5ICs5NzcsOSBAQAogCQlpZiAoY3B1X3RvX2xlMTYoKCooc0ZyYW1lLnB3U3RhdHVzKSkpID09IFdMQU5fTUdNVF9TVEFUVVNfU1VDQ0VTUykgewogCQkJLy8gc2V0IEFJRAogCQkJcE1nbXQtPndDdXJyQUlEID0gY3B1X3RvX2xlMTYoKCooc0ZyYW1lLnB3QWlkKSkpOwotCQkJaWYgKChwTWdtdC0+d0N1cnJBSUQgPj4gMTQpICE9IChCSVQwIHwgQklUMSkpIHsKKwkJCWlmICgocE1nbXQtPndDdXJyQUlEID4+IDE0KSAhPSAoQklUMCB8IEJJVDEpKQogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkFJRCBmcm9tIEFQLCBoYXMgdHdvIG1zYiBjbGVhci5cbiIpOwotCQkJfQorCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIkFzc29jaWF0aW9uIFN1Y2Nlc3NmdWwsIEFJRD0lZC5cbiIsIHBNZ210LT53Q3VyckFJRCAmIH4oQklUMTQgfCBCSVQxNSkpOwogCQkJcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0FTU09DOwogCQkJQlNTdlVwZGF0ZUFQTm9kZSgodm9pZCAqKXBEZXZpY2UsIHNGcmFtZS5wd0NhcEluZm8sIHNGcmFtZS5wU3VwcFJhdGVzLCBzRnJhbWUucEV4dFN1cHBSYXRlcyk7CkBAIC0xMTg5LDkgKzExNzYsOCBAQAogCXBUeFBhY2tldC0+Y2JQYXlsb2FkTGVuID0gc0ZyYW1lLmxlbiAtIFdMQU5fSERSX0FERFIzX0xFTjsKIAogCSpwU3RhdHVzID0gY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KTsKLQlpZiAoKnBTdGF0dXMgPT0gQ01EX1NUQVRVU19QRU5ESU5HKSB7CisJaWYgKCpwU3RhdHVzID09IENNRF9TVEFUVVNfUEVORElORykKIAkJKnBTdGF0dXMgPSBDTURfU1RBVFVTX1NVQ0NFU1M7Ci0JfQogCiAJcmV0dXJuOwogfQpAQCAtMTM0MCwxMyArMTMyNiwxMyBAQAogCXBUeFBhY2tldC0+Y2JNUERVTGVuID0gc0ZyYW1lLmxlbjsKIAlwVHhQYWNrZXQtPmNiUGF5bG9hZExlbiA9IHNGcmFtZS5sZW4gLSBXTEFOX0hEUl9BRERSM19MRU47CiAJLy8gc2VuZCB0aGUgZnJhbWUKLQlpZiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQpIHsKKwlpZiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQpCiAJCXJldHVybjsKLQl9CisKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6QXV0aHJlcV9yZXBseSBzZXF1ZW5jZV8xIHR4Li4gXG4iKTsKLQlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKKwlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpCiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1ndDpBdXRocmVxX3JlcGx5IHNlcXVlbmNlXzEgdHggZmFpbGVkLlxuIik7Ci0JfQorCiAJcmV0dXJuOwogfQogCkBAIC0xMzg0LDExICsxMzcwLDYgQEAKIAkJCXNfdk1nckxvZ1N0YXR1cyhwTWdtdCwgY3B1X3RvX2xlMTYoKCoocEZyYW1lLT5wd1N0YXR1cykpKSk7CiAJCQlwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKIAkJfQotCQlpZiAocERldmljZS0+ZUNvbW1hbmRTdGF0ZSA9PSBXTEFOX0FVVEhFTlRJQ0FURV9XQUlUKSB7Ci0vLyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotLy8gICAgICAgICAgICAgICAgdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKilwRGV2aWNlLCAwKTsKLS8vICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCQl9CiAKIAkJYnJlYWs7CiAKQEAgLTE0MjQsMTcgKzE0MDUsMTIgQEAKIAkJCXBUeFBhY2tldC0+Y2JNUERVTGVuID0gc0ZyYW1lLmxlbjsKIAkJCXBUeFBhY2tldC0+Y2JQYXlsb2FkTGVuID0gc0ZyYW1lLmxlbiAtIFdMQU5fSERSX0FERFIzX0xFTjsKIAkJCS8vIHNlbmQgdGhlIGZyYW1lCi0JCQlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKKwkJCWlmIChjc01nbXRfeG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpICE9IENNRF9TVEFUVVNfUEVORElORykKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6QXV0aF9yZXBseSBzZXF1ZW5jZV8yIHR4IGZhaWxlZC5cbiIpOwotCQkJfQorCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6QXV0aF9yZXBseSBzZXF1ZW5jZV8yIHR4IC4uLlxuIik7CiAJCX0gZWxzZSB7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6cnggQXV0aF9yZXBseSBzZXF1ZW5jZV8yIHN0YXR1cyBlcnJvciAuLi5cbiIpOwotCQkJaWYgKHBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPT0gV0xBTl9BVVRIRU5USUNBVEVfV0FJVCkgewotLy8gICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0vLyAgICAgICAgICAgICAgICAgICAgdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKilwRGV2aWNlLCAwKTsKLS8vICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQkJCX0KIAkJCXNfdk1nckxvZ1N0YXR1cyhwTWdtdCwgY3B1X3RvX2xlMTYoKCoocEZyYW1lLT5wd1N0YXR1cykpKSk7CiAJCX0KIAkJYnJlYWs7CkBAIC0xNTIzLDEyICsxNDk5LDEyIEBACiAJcFR4UGFja2V0LT5jYk1QRFVMZW4gPSBzRnJhbWUubGVuOwogCXBUeFBhY2tldC0+Y2JQYXlsb2FkTGVuID0gc0ZyYW1lLmxlbiAtIFdMQU5fSERSX0FERFIzX0xFTjsKIAkvLyBzZW5kIHRoZSBmcmFtZQotCWlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCkgeworCWlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCkKIAkJcmV0dXJuOwotCX0KLQlpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKKworCWlmIChjc01nbXRfeG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpICE9IENNRF9TVEFUVVNfUEVORElORykKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTWd0OkF1dGhyZXFfcmVwbHkgc2VxdWVuY2VfNCB0eCBmYWlsZWQuXG4iKTsKLQl9CisKIAlyZXR1cm47CiB9CiAKQEAgLTE1NTksMTIgKzE1MzUsNiBAQAogCQlzX3ZNZ3JMb2dTdGF0dXMocE1nbXQsIGNwdV90b19sZTE2KCgqKHBGcmFtZS0+cHdTdGF0dXMpKSkpOwogCQlwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKIAl9Ci0KLQlpZiAocERldmljZS0+ZUNvbW1hbmRTdGF0ZSA9PSBXTEFOX0FVVEhFTlRJQ0FURV9XQUlUKSB7Ci0vLyAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLS8vICAgICAgICB2Q29tbWFuZFRpbWVyV2FpdCgodm9pZCAqKXBEZXZpY2UsIDApOwotLy8gICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCX0KIH0KIAogLyorCkBAIC0xNTg4LDcgKzE1NTgsNiBAQAogewogCVdMQU5fRlJfRElTQVNTT0MgICAgc0ZyYW1lOwogCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKLS8vICAgIENNRF9TVEFUVVMgICAgICAgICAgQ21kU3RhdHVzOwogCXZpYXdnZXRfd3BhX2hlYWRlciAqd3BhaGRyOwogCiAJaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewpAQCAtMTU5NiwxMSArMTU2NSwxMSBAQAogCQkvLyBhIFNUQSBpcyBsZWF2aW5nIHRoaXMgQlNTLi4KIAkJc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwogCQlzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7Ci0JCWlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwUnhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIyLCAmdU5vZGVJbmRleCkpIHsKKwkJaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBSeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjIsICZ1Tm9kZUluZGV4KSkKIAkJCUJTU3ZSZW1vdmVPbmVOb2RlKHBEZXZpY2UsIHVOb2RlSW5kZXgpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJSeCBkaXNhc3NvYywgc3RhIG5vdCBmb3VuZFxuIik7Ci0JCX0KKwogCX0gZWxzZSBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgewogCQlzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47CiAJCXNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKQEAgLTE2NjgsMTEgKzE2MzcsMTAgQEAKIAkJLy8gYSBTVEEgaXMgbGVhdmluZyB0aGlzIEJTUy4uCiAJCXNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKIAkJc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwotCQlpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcFJ4UGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMiwgJnVOb2RlSW5kZXgpKSB7CisJCWlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwUnhQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIyLCAmdU5vZGVJbmRleCkpCiAJCQlCU1N2UmVtb3ZlT25lTm9kZShwRGV2aWNlLCB1Tm9kZUluZGV4KTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8gIlJ4IGRlYXV0aCwgc3RhIG5vdCBmb3VuZFxuIik7Ci0JCX0KIAl9IGVsc2UgewogCQlpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgewogCQkJc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwpAQCAtMTg3MSw3ICsxODM5LDYgQEAKIAkJCQkgICAgKHZvaWQgKilwUnhQYWNrZXQKICk7CiAJfSBlbHNlIHsKLS8vICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJ1cGRhdGUgYmNuOiBSeENoYW5uZWwgPSA6ICVkXG4iLCBieUN1cnJDaGFubmVsKTsKIAkJQlNTYlVwZGF0ZVRvQlNTTGlzdCgodm9pZCAqKXBEZXZpY2UsCiAJCQkJICAgICpzRnJhbWUucHF3VGltZXN0YW1wLAogCQkJCSAgICAqc0ZyYW1lLnB3QmVhY29uSW50ZXJ2YWwsCkBAIC0xODk0LDkgKzE4NjEsOCBAQAogCiAJfQogCi0JaWYgKGJJblNjYW4pIHsKKwlpZiAoYkluU2NhbikKIAkJcmV0dXJuOwotCX0KIAogCWlmIChieUN1cnJDaGFubmVsID09ICh1bnNpZ25lZCBjaGFyKXBNZ210LT51Q3VyckNoYW5uZWwpCiAJCWJJc0NoYW5uZWxFcXVhbCA9IHRydWU7CkBAIC0xOTQyLDEwICsxOTA4LDggQEAKIAkJcERldmljZS0+dUN1cnJSU1NJID0gcFJ4UGFja2V0LT51UlNTSTsKIAkJcERldmljZS0+YnlDdXJyU1EgPSBwUnhQYWNrZXQtPmJ5U1E7CiAKLQkJaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgIT0gMCkgeworCQlpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCAhPSAwKQogCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCA9IDA7Ci0JCQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJDTjpXYWtlIENvdW50PSBbJWRdXG4iLCBwTWdtdC0+d0NvdW50VG9XYWtlVXApOwotCQl9CiAJfQogCS8vIGNoZWNrIGlmIFNTSUQgdGhlIHNhbWUKIAlpZiAoc0ZyYW1lLnBTU0lELT5sZW4gPT0gKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlDdXJyU1NJRCktPmxlbikgewpAQCAtMTk4Miw5ICsxOTQ2LDkgQEAKIAkJCS8vCiAJCQkvLyBCYXNpYyBSYXRlIFNldCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5CiAJCQkvLwotCQkJaWYgKHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSA9PSBQSFlfVFlQRV8xMUIpIHsKKwkJCWlmIChwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPT0gUEhZX1RZUEVfMTFCKQogCQkJCXVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU5fMTFCOwotCQkJfQorCiAJCQlwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlc1sxXSA9IFJBVEV1U2V0SUUoKFBXTEFOX0lFX1NVUFBfUkFURVMpcEJTU0xpc3QtPmFieVN1cHBSYXRlcywKIAkJCQkJCQkJKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAJCQkJCQkJCXVSYXRlTGVuKTsKQEAgLTIwNDQsMjIgKzIwMDgsMjAgQEAKIAogCS8vIGNoZWNrIGlmIGJlYWNvbiBUU0YgbGFyZ2VyIG9yIHNtYWxsIHRoYW4gb3VyIGxvY2FsIFRTRgogCWlmIChISURXT1JEKHF3VGltZXN0YW1wKSA9PSBISURXT1JEKHF3TG9jYWxUU0YpKSB7Ci0JCWlmIChMT0RXT1JEKHF3VGltZXN0YW1wKSA+PSBMT0RXT1JEKHF3TG9jYWxUU0YpKSB7CisJCWlmIChMT0RXT1JEKHF3VGltZXN0YW1wKSA+PSBMT0RXT1JEKHF3TG9jYWxUU0YpKQogCQkJYlRTRk9mZnNldFBvc3RpdmUgPSB0cnVlOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQliVFNGT2Zmc2V0UG9zdGl2ZSA9IGZhbHNlOwotCQl9CiAJfSBlbHNlIGlmIChISURXT1JEKHF3VGltZXN0YW1wKSA+IEhJRFdPUkQocXdMb2NhbFRTRikpIHsKIAkJYlRTRk9mZnNldFBvc3RpdmUgPSB0cnVlOwogCX0gZWxzZSBpZiAoSElEV09SRChxd1RpbWVzdGFtcCkgPCBISURXT1JEKHF3TG9jYWxUU0YpKSB7CiAJCWJUU0ZPZmZzZXRQb3N0aXZlID0gZmFsc2U7CiAJfQogCi0JaWYgKGJUU0ZPZmZzZXRQb3N0aXZlKSB7CisJaWYgKGJUU0ZPZmZzZXRQb3N0aXZlKQogCQlxd1RTRk9mZnNldCA9IENBUkRxR2V0VFNGT2Zmc2V0KHBSeFBhY2tldC0+YnlSeFJhdGUsIChxd1RpbWVzdGFtcCksIChxd0xvY2FsVFNGKSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXF3VFNGT2Zmc2V0ID0gQ0FSRHFHZXRUU0ZPZmZzZXQocFJ4UGFja2V0LT5ieVJ4UmF0ZSwgKHF3TG9jYWxUU0YpLCAocXdUaW1lc3RhbXApKTsKLQl9CiAKIAlpZiAoSElEV09SRChxd1RTRk9mZnNldCkgIT0gMCB8fAogCSAgICAoTE9EV09SRChxd1RTRk9mZnNldCkgPiBUUklWSUFMX1NZTkNfRElGRkVSRU5DRSkpIHsKQEAgLTIxMDEsMTEgKzIwNjMsOSBAQAogCQkJICAgIChwTWdtdC0+Yk11bHRpY2FzdFRJTSAmJiAocE1nbXQtPmJ5RFRJTUNvdW50ID09IDApKSkgewogCQkJCXBNZ210LT5iSW5USU1XYWtlID0gdHJ1ZTsKIAkJCQkvLyBzZW5kIG91dCBwcy1wb2xsIHBhY2tldAotLy8gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQkNOOkluIFRJTVxuIik7Ci0JCQkJaWYgKHBNZ210LT5iSW5USU0pIHsKKworCQkJCWlmIChwTWdtdC0+YkluVElNKQogCQkJCQlQU3ZTZW5kUFNQT0xMKChQU0RldmljZSlwRGV2aWNlKTsKLS8vICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046UFMtUE9MTCBzZW50Li5cbiIpOwotCQkJCX0KIAogCQkJfSBlbHNlIHsKIAkJCQlwTWdtdC0+YkluVElNV2FrZSA9IGZhbHNlOwpAQCAtMjExNSw5ICsyMDc1LDggQEAKIAkJCQkJaWYgKFBTYlNlbmROdWxsUGFja2V0KHBEZXZpY2UpKQogCQkJCQkJcERldmljZS0+YlBXQml0T24gPSB0cnVlOwogCQkJCX0KLQkJCQlpZiAoUFNiQ29uc2lkZXJQb3dlckRvd24ocERldmljZSwgZmFsc2UsIGZhbHNlKSkgeworCQkJCWlmIChQU2JDb25zaWRlclBvd2VyRG93bihwRGV2aWNlLCBmYWxzZSwgZmFsc2UpKQogCQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046IFBvd2VyIGRvd24gbm93Li4uXG4iKTsKLQkJCQl9CiAJCQl9CiAKIAkJfQpAQCAtMjE4MSwxMSArMjE0MCw2IEBACiAJCQkJCXByaW50aygic192TWdyUnhCZWFjb246VHhEYXRhUmF0ZSBpcyAlZCxJbmRleCBpcyAlZFxuIiwgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53VHhEYXRhUmF0ZSwgdU5vZGVJbmRleCk7CiAJCQkJfQogI2VuZGlmCi0vKgotICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJTaG9ydFNsb3RUaW1lID0gV0xBTl9HRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgqc0ZyYW1lLnB3Q2FwSW5mbyk7Ci0gIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSA+IFJBVEVfMTFNKQotICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJFUlBFeGlzdCA9IHRydWU7Ci0qLwogCQkJfQogCiAJCQkvLyBpZiBvdGhlciBzdGF0aW9ucyBqb2luZWQsIGluZGljYXRlIGNvbm5lY3Rpb24gdG8gdXBwZXIgbGF5ZXIuLgpAQCAtMjE5Myw5ICsyMTQ3LDkgQEAKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJDdXJyZW50IElCU1MgU3RhdGU6IFtTdGFydGVkXS4uLi4uLi4udG86IFtKb2ludGVkXSBcbiIpOwogCQkJCXBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9KT0lOVEVEOwogCQkJCXBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7Ci0JCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSkgeworCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpCiAJCQkJCW5ldGlmX3dha2VfcXVldWUocERldmljZS0+ZGV2KTsKLQkJCQl9CisKIAkJCQlwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSB0cnVlOwogCQkJCXBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgPSAwOwogCkBAIC0yMjMwLDEyICsyMTg0LDggQEAKIAkJCQkJCSAgICAgcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAJCQkJCQkgICAgIHBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzKTsKIAotCQkJCS8vIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUkNSLCBSQ1JfQlNTSUQpOwotCQkJCS8vIHNldCBoaWdoZXN0IGJhc2ljIHJhdGUKLQkJCQkvLyBzX3ZTZXRIaWdoZXN0QmFzaWNSYXRlKHBEZXZpY2UsIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzKTsKIAkJCQkvLyBQcmVwYXJlIGJlYWNvbiBmcmFtZQogCQkJCWJNZ3JQcmVwYXJlQmVhY29uVG9TZW5kKCh2b2lkICopcERldmljZSwgcE1nbXQpOwotCQkJCS8vICB9CiAJCQl9CiAJCX0KIAl9CkBAIC0yMzY1LDkgKzIzMTUsOCBAQAogCQkJICAmd01heEJhc2ljUmF0ZSwgJndNYXhTdXBwUmF0ZSwgJndTdXBwUmF0ZSwKIAkJCSAgJmJ5VG9wQ0NLQmFzaWNSYXRlLCAmYnlUb3BPRkRNQmFzaWNSYXRlKTsKIAotCWlmIChwTWdtdC0+ZUNvbmZpZ01vZGUgPT0gV01BQ19DT05GSUdfQVApIHsKKwlpZiAocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0FQKQogCQlwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX0VTU19BUDsKLQl9CiAKIAlpZiAocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0lCU1NfU1RBKSB7CiAJCW1lbWNweShwTWdtdC0+YWJ5SUJTU0RGU093bmVyLCBwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkciwgNik7CkBAIC0yMzgzLDggKzIzMzIsNiBAQAogCU1BQ3ZXcml0ZUFUSU1XKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBNZ210LT53Q3VyckFUSU1XaW5kb3cpOwogCXBEZXZpY2UtPnVDdXJyUlNTSSA9IDA7CiAJcERldmljZS0+YnlDdXJyU1EgPSAwOwotCS8vbWVtY3B5KHBNZ210LT5hYnlEZXNpcmVTU0lELHBNZ210LT5hYnlBZEhvY1NTSUQsCi0JLy8gKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlBZEhvY1NTSUQpLT5sZW4gKyBXTEFOX0lFSERSX0xFTik7CiAJbWVtc2V0KHBNZ210LT5hYnlDdXJyU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMSk7CiAJbWVtY3B5KHBNZ210LT5hYnlDdXJyU1NJRCwKIAkgICAgICAgcE1nbXQtPmFieURlc2lyZVNTSUQsCkBAIC0yNDI4LDkgKzIzNzUsOCBAQAogCQlwTWdtdC0+YnlEVElNQ291bnQgPSBwTWdtdC0+YnlEVElNUGVyaW9kIC0gMTsKIAl9CiAKLQlpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKKwlpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpCiAJCXBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fSUJTUygxKTsKLQl9CiAKIAlpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUpIHsKIAkJcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19QUklWQUNZKDEpOwpAQCAtMjQ1Myw4ICsyMzk5LDYgQEAKIAogCXBNZ210LT5ieUVSUENvbnRleHQgPSAwOwogCi0vLyAgICBtZW1jcHkocERldmljZS0+YWJ5QlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKLQogCWlmIChwTWdtdC0+ZUNvbmZpZ01vZGUgPT0gV01BQ19DT05GSUdfQVApIHsKIAkJQ0FSRGJTZXRCU1NJRChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5hYnlDdXJyQlNTSUQsIE9QX01PREVfQVApOwogCX0gZWxzZSB7CkBAIC0yNDc0LDExICsyNDE4LDEwIEBACiAJc2V0X2NoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dUlCU1NDaGFubmVsKTsKIAlwTWdtdC0+dUN1cnJDaGFubmVsID0gcE1nbXQtPnVJQlNTQ2hhbm5lbDsKIAotCWlmIChDQVJEYklzU2hvcnRQcmVhbWJsZShwTWdtdC0+cEFkYXB0ZXIpKSB7CisJaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikpCiAJCXBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRQUkVBTUJMRSgxKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcE1nbXQtPndDdXJyQ2FwSW5mbyAmPSAofldMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSkpOwotCX0KIAogCWlmIChwTWdtdC0+YjExaEVuYWJsZSAmJgogCSAgICAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUEpKSB7CkBAIC0yNDg5LDkgKzI0MzIsOCBAQAogCiAJcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX1NUQVJURUQ7CiAJLy8gUHJlcGFyZSBiZWFjb24gdG8gc2VuZAotCWlmIChiTWdyUHJlcGFyZUJlYWNvblRvU2VuZCgodm9pZCAqKXBEZXZpY2UsIHBNZ210KSkgeworCWlmIChiTWdyUHJlcGFyZUJlYWNvblRvU2VuZCgodm9pZCAqKXBEZXZpY2UsIHBNZ210KSkKIAkJKnBTdGF0dXMgPSBDTURfU1RBVFVTX1NVQ0NFU1M7Ci0JfQogCiAJcmV0dXJuOwogfQpAQCAtMjU0MCw3ICsyNDgyLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8vIG1lbXNldChwTWdtdC0+YWJ5RGVzaXJlQlNTSUQsIDAsICBXTEFOX0JTU0lEX0xFTik7CiAJLy8gU2VhcmNoIGtub3duIEJTUyBsaXN0IGZvciBwcmVmZXIgQlNTSUQgb3IgU1NJRAogCiAJcEN1cnIgPSBCU1NwU2VhcmNoQlNTTGlzdChwRGV2aWNlLApAQCAtMjU2MCwyMyArMjUwMSw2IEBACiAJaWYgKFdMQU5fR0VUX0NBUF9JTkZPX0VTUyhjcHVfdG9fbGUxNihwQ3Vyci0+d0NhcEluZm8pKSkgewogCQlpZiAoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBKSB8fCAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFQU0spKSB7CiAJCQkvLyBwYXRjaCBmb3IgQ0lTQ08gbWlncmF0aW9uIG1vZGUKLS8qCi0gIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB7Ci0gIGlmIChXUEFfU2VhcmNoUlNOKDAsIFdQQV9US0lQLCBwQ3VycikgPT0gZmFsc2UpIHsKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTm8gbWF0Y2ggUlNOIGluZm8uICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIik7Ci0gIC8vIGVuY3J5cHRpb24gbW9kZSBlcnJvcgotICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKLSAgcmV0dXJuOwotICB9Ci0gIH0gZWxzZSBpZiAocERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgewotICBpZiAoV1BBX1NlYXJjaFJTTigwLCBXUEFfQUVTQ0NNUCwgcEN1cnIpID09IGZhbHNlKSB7Ci0gIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk5vIG1hdGNoIFJTTiBpbmZvLiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcbiIpOwotICAvLyBlbmNyeXB0aW9uIG1vZGUgZXJyb3IKLSAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7Ci0gIHJldHVybjsKLSAgfQotICB9Ci0qLwogCQl9CiAKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCkBAIC0yNTk2LDkgKzI1MjAsOCBAQAogCQkJbWVtc2V0KHBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLCAwICwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDEpOwogCQkJbWVtc2V0KHBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLCAwICwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDEpOwogCi0JCQlpZiAocEN1cnItPmVOZXR3b3JrVHlwZUluVXNlID09IFBIWV9UWVBFXzExQikgeworCQkJaWYgKHBDdXJyLT5lTmV0d29ya1R5cGVJblVzZSA9PSBQSFlfVFlQRV8xMUIpCiAJCQkJdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTl8xMUI7Ci0JCQl9CiAKIAkJCXBJdGVtUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlczsKIAkJCXBJdGVtRXh0UmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlczsKQEAgLTI2MjUsOSArMjU0OCw4IEBACiAJCQkJcEl0ZW1SYXRlcy0+bGVuICs9ICh1bnNpZ25lZCBjaGFyKWlpOwogCQkJCWlmIChwSXRlbUV4dFJhdGVzLT5sZW4gLSBpaSA+IDApIHsKIAkJCQkJcEl0ZW1FeHRSYXRlcy0+bGVuIC09ICh1bnNpZ25lZCBjaGFyKWlpOwotCQkJCQlmb3IgKHV1ID0gMDsgdXUgPCBwSXRlbUV4dFJhdGVzLT5sZW47IHV1KyspIHsKKwkJCQkJZm9yICh1dSA9IDA7IHV1IDwgcEl0ZW1FeHRSYXRlcy0+bGVuOyB1dSsrKQogCQkJCQkJcEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbdXVdID0gcEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbdXUgKyBpaV07Ci0JCQkJCX0KIAkJCQl9IGVsc2UgewogCQkJCQlwSXRlbUV4dFJhdGVzLT5sZW4gPSAwOwogCQkJCX0KQEAgLTI2NDcsOSArMjU2OSw2IEBACiAJCQlwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX0VTU19TVEE7CiAKIAkJCXBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9KT0lOVEVEOwotCQkJLy8gQWRvcHQgQlNTIHN0YXRlIGluIEFkYXB0ZXIgRGV2aWNlIE9iamVjdAotCQkJLy9wRGV2aWNlLT5ieU9wTW9kZSA9IE9QX01PREVfSU5GUkFTVFJVQ1RVUkU7Ci0vLyAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lELCBXTEFOX0JTU0lEX0xFTik7CiAKIAkJCS8vIEFkZCBjdXJyZW50IEJTUyB0byBDYW5kaWRhdGUgbGlzdAogCQkJLy8gVGhpcyBzaG91bGQgb25seSB3b3JrcyBmb3IgV1BBMiBCU1MsIGFuZCBXUEEyIEJTUyBjaGVjayBtdXN0IGJlIGRvbmUgYmVmb3JlLgpAQCAtMjcyMSwxNSArMjY0MCwxMCBAQAogCQkJbWVtc2V0KHBNZ210LT5hYnlDdXJyU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOKTsKIAkJCW1lbWNweShwTWdtdC0+YWJ5Q3VyckJTU0lELCBwQ3Vyci0+YWJ5QlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKIAkJCW1lbWNweShwTWdtdC0+YWJ5Q3VyclNTSUQsIHBDdXJyLT5hYnlTU0lELCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4pOwotLy8gICAgICAgICAgcE1nbXQtPndDdXJyQVRJTVdpbmRvdyA9IHBDdXJyLT53QVRJTVdpbmRvdzsKIAkJCU1BQ3ZXcml0ZUFUSU1XKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBNZ210LT53Q3VyckFUSU1XaW5kb3cpOwogCQkJcE1nbXQtPmVDdXJyTW9kZSA9IFdNQUNfTU9ERV9JQlNTX1NUQTsKIAogCQkJcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX1NUQVJURUQ7Ci0JCQkvLyBBZG9wdCBCU1Mgc3RhdGUgaW4gQWRhcHRlciBEZXZpY2UgT2JqZWN0Ci0JCQkvL3BEZXZpY2UtPmJ5T3BNb2RlID0gT1BfTU9ERV9BREhPQzsKLS8vICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKLS8vICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPmFieUJTU0lELCBwQ3Vyci0+YWJ5QlNTSUQsIFdMQU5fQlNTSURfTEVOKTsKIAogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiSm9pbiBJQlNTIG9rOiVwTVxuIiwKIAkJCQlwTWdtdC0+YWJ5Q3VyckJTU0lEKTsKQEAgLTI3NjYsNyArMjY4MCw3IEBACiB7CiAJQ0FSRF9QSFlfVFlQRSAgIGVQaHlUeXBlID0gUEhZX1RZUEVfMTFCOwogCVBTTWdtdE9iamVjdCAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLS8vICAgIGludCAgICAgaWk7CisKIAkvLzFNLCAgIDJNLCAgIDVNLCAgIDExTSwgIDE4TSwgIDI0TSwgIDM2TSwgIDU0TQogCXVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDfTsKIAl1bnNpZ25lZCBjaGFyIGFieUN1cnJFeHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfRVhUU1VQUF9SQVRFUywgNCwgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CkBAIC0yODYyLDkgKzI3NzYsOCBAQAogCQlDQVJEYlNldEJTU0lEKHBNZ210LT5wQWRhcHRlciwgcEN1cnItPmFieUJTU0lELCBPUF9NT0RFX0lORlJBU1RSVUNUVVJFKTsKIAkJLy8gQWRkIGN1cnJlbnQgQlNTIHRvIENhbmRpZGF0ZSBsaXN0CiAJCS8vIFRoaXMgc2hvdWxkIG9ubHkgd29ya3MgZm9yIFdQQTIgQlNTLCBhbmQgV1BBMiBCU1MgY2hlY2sgbXVzdCBiZSBkb25lIGJlZm9yZS4KLQkJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgeworCQlpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKQogCQkJQ0FSRGJBZGRfUE1LSURfQ2FuZGlkYXRlKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPmFieUN1cnJCU1NJRCwgcEN1cnItPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0LCBwQ3Vyci0+c1JTTkNhcE9iai53UlNOQ2FwKTsKLQkJfQogCX0gZWxzZSB7CiAJCUNBUkRiU2V0QlNTSUQocE1nbXQtPnBBZGFwdGVyLCBwQ3Vyci0+YWJ5QlNTSUQsIE9QX01PREVfQURIT0MpOwogCX0KQEAgLTI4ODQsMjQgKzI3OTcsNiBAQAogCQlyZXR1cm47CiAJfQogCi0vKgotICBmb3IgKGlpPTA7IGlpPEJCX1ZHQV9MRVZFTDsgaWkrKykgewotICBpZiAocEN1cnItPmxkQm1NQVg8IHBEZXZpY2UtPmxkQm1UaHJlc2hvbGRbaWldKSB7Ci0gIHBEZXZpY2UtPmJ5QkJWR0FOZXcgPSBwRGV2aWNlLT5hYnlCQlZHQVtpaV07Ci0gIGJyZWFrOwotICB9Ci0gIH0KLQotICBpZiAocERldmljZS0+YnlCQlZHQU5ldyAhPSBwRGV2aWNlLT5ieUJCVkdBQ3VycmVudCkgewotICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJSU1NJWyVkXSBOZXdHYWluWyVkXSBPbGRHYWluWyVkXSBcbiIsCi0gIChpbnQpcEN1cnItPmxkQm1NQVgsIHBEZXZpY2UtPmJ5QkJWR0FOZXcsIHBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50KTsKLSAgcHJpbnRrKCJSU1NJWyVkXSBOZXdHYWluWyVkXSBPbGRHYWluWyVkXSBcbiIsCi0gIChpbnQpcEN1cnItPmxkQm1NQVgsIHBEZXZpY2UtPmJ5QkJWR0FOZXcsIHBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50KTsKLSAgQkJ2U2V0VkdBR2Fpbk9mZnNldChwRGV2aWNlLCBwRGV2aWNlLT5ieUJCVkdBTmV3KTsKLSAgfQotICBwcmludGsoImxkQm1NQVhbJWRdIE5ld0dhaW5bJWRdIE9sZEdhaW5bJWRdIFxuIiwKLSAgKGludClwQ3Vyci0+bGRCbU1BWCwgcERldmljZS0+YnlCQlZHQU5ldywgcERldmljZS0+YnlCQlZHQUN1cnJlbnQpOwotKi8KIAlwTWdtdC0+dUN1cnJDaGFubmVsID0gcEN1cnItPnVDaGFubmVsOwogCXBNZ210LT5lQ3VycmVudFBIWU1vZGUgPSBlUGh5VHlwZTsKIAlwTWdtdC0+YnlFUlBDb250ZXh0ID0gcEN1cnItPnNFUlAuYnlFUlA7CkBAIC0yOTQzLDcgKzI4MzgsNyBAQAogCQkJfQogCQl9CiAJfQotCS8vICB9CisKIAlyZXR1cm47CiB9CiAKQEAgLTI5NzksOSArMjg3NCw5IEBACiAJCWlmICghaWkpIHsKIAkJCS8vIE1hc2sgb3V0IHRoZSBicm9hZGNhc3QgYml0IHdoaWNoIGlzIGluZGljYXRlZCBzZXBhcmF0ZWx5LgogCQkJYk11bHRpY2FzdCA9IChieU1hcCAmIGJ5TWFza1swXSkgIT0gMDsKLQkJCWlmIChiTXVsdGljYXN0KSB7CisJCQlpZiAoYk11bHRpY2FzdCkKIAkJCQlwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJSeFBTUG9sbCA9IHRydWU7Ci0JCQl9CisKIAkJCWJ5TWFwID0gMDsKIAkJfQogCQlpZiAoYnlNYXApIHsKQEAgLTMwMTEsOSArMjkwNiw4IEBACiAKIAkvLyBBcHBlbmQgdmFyaWFibGUgcGFydCBvZiBUSU0KIAotCWZvciAoaWkgPSB3U3RhcnRJbmRleCwgamogPSAwOyBpaSA8PSB3RW5kSW5kZXg7IGlpKyssIGpqKyspIHsKKwlmb3IgKGlpID0gd1N0YXJ0SW5kZXgsIGpqID0gMDsgaWkgPD0gd0VuZEluZGV4OyBpaSsrLCBqaisrKQogCQlwVElNLT5ieVZpcnRCaXRNYXBbampdID0gcE1nbXQtPmFieVBTVHhNYXBbaWldOwotCX0KIAogCS8vIEFpZCA9IDAgZG9uJ3QgdXNlZC4KIAlwVElNLT5ieVZpcnRCaXRNYXBbMF0gICY9IH5CSVQwOwpAQCAtMzA2OCw5ICsyOTYyLDggQEAKIAkJCVdMQU5fU0VUX0ZDX0ZTVFlQRShXTEFOX0ZTVFlQRV9CRUFDT04pCiApKTsKIAotCWlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKSB7CisJaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUpCiAJCXNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClXTEFOX1NFVF9GQ19QV1JNR1QoMSkpOwotCX0KIAogCW1lbWNweShzRnJhbWUucEhkci0+c0EzLmFieUFkZHIxLCBhYnlCcm9hZGNhc3RBZGRyLCBXTEFOX0FERFJfTEVOKTsKIAltZW1jcHkoc0ZyYW1lLnBIZHItPnNBMy5hYnlBZGRyMiwgcE1nbXQtPmFieU1BQ0FkZHIsIFdMQU5fQUREUl9MRU4pOwpAQCAtMzI5Myw5ICszMTg2LDggQEAKIAkqc0ZyYW1lLnB3QmVhY29uSW50ZXJ2YWwgPSBjcHVfdG9fbGUxNih3Q3VyckJlYWNvblBlcmlvZCk7CiAJKnNGcmFtZS5wd0NhcEluZm8gPSBjcHVfdG9fbGUxNih3Q3VyckNhcEluZm8pOwogCi0JaWYgKGJ5UEhZVHlwZSA9PSBCQl9UWVBFXzExQikgeworCWlmIChieVBIWVR5cGUgPT0gQkJfVFlQRV8xMUIpCiAJCSpzRnJhbWUucHdDYXBJbmZvICY9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCl+KFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUU0xPVFRJTUUoMSkpKTsKLQl9CiAKIAkvLyBDb3B5IFNTSUQKIAlzRnJhbWUucFNTSUQgPSAoUFdMQU5fSUVfU1NJRCkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKQEAgLTM1MzgsMjcgKzM0MzAsMjcgQEAKIAkJc0ZyYW1lLnBSU05XUEEtPmFieU11bHRpY2FzdFswXSA9IDB4MDA7CiAJCXNGcmFtZS5wUlNOV1BBLT5hYnlNdWx0aWNhc3RbMV0gPSAweDUwOwogCQlzRnJhbWUucFJTTldQQS0+YWJ5TXVsdGljYXN0WzJdID0gMHhmMjsKLQkJaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfV0VQKSB7CisJCWlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX1dFUCkKIAkJCXNGcmFtZS5wUlNOV1BBLT5hYnlNdWx0aWNhc3RbM10gPSBwTWdtdC0+cEN1cnJCU1MtPmJ5R0tUeXBlOwotCQl9IGVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfVEtJUCkgeworCQllbHNlIGlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX1RLSVApCiAJCQlzRnJhbWUucFJTTldQQS0+YWJ5TXVsdGljYXN0WzNdID0gV1BBX1RLSVA7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9DQ01QKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfQ0NNUCkKIAkJCXNGcmFtZS5wUlNOV1BBLT5hYnlNdWx0aWNhc3RbM10gPSBXUEFfQUVTQ0NNUDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJc0ZyYW1lLnBSU05XUEEtPmFieU11bHRpY2FzdFszXSA9IFdQQV9OT05FOwotCQl9CisKIAkJLy8gUGFpcndpc2UgS2V5IENpcGhlciBTdWl0ZQogCQlzRnJhbWUucFJTTldQQS0+d1BLQ291bnQgPSAxOwogCQlzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbMF0gPSAweDAwOwogCQlzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbMV0gPSAweDUwOwogCQlzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbMl0gPSAweGYyOwotCQlpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9US0lQKSB7CisJCWlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX1RLSVApCiAJCQlzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbM10gPSBXUEFfVEtJUDsKLQkJfSBlbHNlIGlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX0NDTVApIHsKKwkJZWxzZSBpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9DQ01QKQogCQkJc0ZyYW1lLnBSU05XUEEtPlBLU0xpc3RbMF0uYWJ5T1VJWzNdID0gV1BBX0FFU0NDTVA7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVszXSA9IFdQQV9OT05FOwotCQl9CisKIAkJLy8gQXV0aCBLZXkgTWFuYWdlbWVudCBTdWl0ZQogCQlwYnlSU04gPSAodW5zaWduZWQgY2hhciAqKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyAyICsgc0ZyYW1lLnBSU05XUEEtPmxlbik7CiAJCSpwYnlSU04rKyA9IDB4MDE7CkBAIC0zNTY3LDEzICszNDU5LDEyIEBACiAKIAkJKnBieVJTTisrID0gMHg1MDsKIAkJKnBieVJTTisrID0gMHhmMjsKLQkJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBUFNLKSB7CisJCWlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQVBTSykKIAkJCSpwYnlSU04rKyA9IFdQQV9BVVRIX1BTSzsKLQkJfSBlbHNlIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQSkgeworCQllbHNlIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQSkKIAkJCSpwYnlSU04rKyA9IFdQQV9BVVRIX0lFRUU4MDJfMVg7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCSpwYnlSU04rKyA9IFdQQV9OT05FOwotCQl9CiAKIAkJc0ZyYW1lLnBSU05XUEEtPmxlbiArPSA2OwogCkBAIC0zNjA0LDE1ICszNDk1LDE0IEBACiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bMF0gPSAweDAwOwogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzFdID0gMHgwRjsKIAkJc0ZyYW1lLnBSU04tPmFieVJTTlsyXSA9IDB4QUM7Ci0JCWlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX1dFUCkgeworCQlpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9XRVApCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzNdID0gcE1nbXQtPnBDdXJyQlNTLT5ieUNTU0dLOwotCQl9IGVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfVEtJUCkgeworCQllbHNlIGlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX1RLSVApCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzNdID0gV0xBTl8xMWlfQ1NTX1RLSVA7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9DQ01QKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfQ0NNUCkKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bM10gPSBXTEFOXzExaV9DU1NfQ0NNUDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJc0ZyYW1lLnBSU04tPmFieVJTTlszXSA9IFdMQU5fMTFpX0NTU19VTktOT1dOOwotCQl9CiAKIAkJLy8gUGFpcndpc2UgS2V5IENpcGhlciBTdWl0ZQogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzRdID0gMTsKQEAgLTM2MjAsMTUgKzM1MTAsMTUgQEAKIAkJc0ZyYW1lLnBSU04tPmFieVJTTls2XSA9IDB4MDA7CiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bN10gPSAweDBGOwogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzhdID0gMHhBQzsKLQkJaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfVEtJUCkgeworCQlpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9US0lQKQogCQkJc0ZyYW1lLnBSU04tPmFieVJTTls5XSA9IFdMQU5fMTFpX0NTU19US0lQOwotCQl9IGVsc2UgaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfQ0NNUCkgeworCQllbHNlIGlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX0NDTVApCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzldID0gV0xBTl8xMWlfQ1NTX0NDTVA7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9OT05FKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfTk9ORSkKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bOV0gPSBXTEFOXzExaV9DU1NfVVNFX0dST1VQOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzldID0gV0xBTl8xMWlfQ1NTX1VOS05PV047Ci0JCX0KKwogCQlzRnJhbWUucFJTTi0+bGVuICs9IDY7CiAKIAkJLy8gQXV0aCBLZXkgTWFuYWdlbWVudCBTdWl0ZQpAQCAtMzYzNywxMyArMzUyNywxMyBAQAogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzEyXSA9IDB4MDA7CiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bMTNdID0gMHgwRjsKIAkJc0ZyYW1lLnBSU04tPmFieVJTTlsxNF0gPSAweEFDOwotCQlpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKSB7CisJCWlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTJQU0spCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzE1XSA9IFdMQU5fMTFpX0FLTVNTX1BTSzsKLQkJfSBlbHNlIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHsKKwkJZWxzZSBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKQogCQkJc0ZyYW1lLnBSU04tPmFieVJTTlsxNV0gPSBXTEFOXzExaV9BS01TU184MDJfMVg7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bMTVdID0gV0xBTl8xMWlfQUtNU1NfVU5LTk9XTjsKLQkJfQorCiAJCXNGcmFtZS5wUlNOLT5sZW4gKz0gNjsKIAogCQkvLyBSU04gQ2FwYWJpbGl0aWVzCkBAIC0zNjY4LDkgKzM1NTgsOCBAQAogCQkJCQlwYnlSU04gKz0gMTY7CiAJCQkJfQogCQkJfQotCQkJaWYgKCpwd1BNS0lEICE9IDApIHsKKwkJCWlmICgqcHdQTUtJRCAhPSAwKQogCQkJCXNGcmFtZS5wUlNOLT5sZW4gKz0gKDIgKyAoKnB3UE1LSUQpKjE2KTsKLQkJCX0KIAkJfQogCiAJCXNGcmFtZS5sZW4gKz0gc0ZyYW1lLnBSU04tPmxlbiArIFdMQU5fSUVIRFJfTEVOOwpAQCAtMzc4NSwyNyArMzY3NCwyNyBAQAogCQlzRnJhbWUucFJTTldQQS0+YWJ5TXVsdGljYXN0WzBdID0gMHgwMDsKIAkJc0ZyYW1lLnBSU05XUEEtPmFieU11bHRpY2FzdFsxXSA9IDB4NTA7CiAJCXNGcmFtZS5wUlNOV1BBLT5hYnlNdWx0aWNhc3RbMl0gPSAweGYyOwotCQlpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9XRVApIHsKKwkJaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfV0VQKQogCQkJc0ZyYW1lLnBSU05XUEEtPmFieU11bHRpY2FzdFszXSA9IHBNZ210LT5wQ3VyckJTUy0+YnlHS1R5cGU7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9US0lQKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfVEtJUCkKIAkJCXNGcmFtZS5wUlNOV1BBLT5hYnlNdWx0aWNhc3RbM10gPSBXUEFfVEtJUDsKLQkJfSBlbHNlIGlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX0NDTVApIHsKKwkJZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9DQ01QKQogCQkJc0ZyYW1lLnBSU05XUEEtPmFieU11bHRpY2FzdFszXSA9IFdQQV9BRVNDQ01QOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzRnJhbWUucFJTTldQQS0+YWJ5TXVsdGljYXN0WzNdID0gV1BBX05PTkU7Ci0JCX0KKwogCQkvLyBQYWlyd2lzZSBLZXkgQ2lwaGVyIFN1aXRlCiAJCXNGcmFtZS5wUlNOV1BBLT53UEtDb3VudCA9IDE7CiAJCXNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVswXSA9IDB4MDA7CiAJCXNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVsxXSA9IDB4NTA7CiAJCXNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVsyXSA9IDB4ZjI7Ci0JCWlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX1RLSVApIHsKKwkJaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfVEtJUCkKIAkJCXNGcmFtZS5wUlNOV1BBLT5QS1NMaXN0WzBdLmFieU9VSVszXSA9IFdQQV9US0lQOwotCQl9IGVsc2UgaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfQ0NNUCkgeworCQllbHNlIGlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX0NDTVApCiAJCQlzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbM10gPSBXUEFfQUVTQ0NNUDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJc0ZyYW1lLnBSU05XUEEtPlBLU0xpc3RbMF0uYWJ5T1VJWzNdID0gV1BBX05PTkU7Ci0JCX0KKwogCQkvLyBBdXRoIEtleSBNYW5hZ2VtZW50IFN1aXRlCiAJCXBieVJTTiA9ICh1bnNpZ25lZCBjaGFyICopKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbiArIDIgKyBzRnJhbWUucFJTTldQQS0+bGVuKTsKIAkJKnBieVJTTisrID0gMHgwMTsKQEAgLTM4MTQsMTMgKzM3MDMsMTIgQEAKIAogCQkqcGJ5UlNOKysgPSAweDUwOwogCQkqcGJ5UlNOKysgPSAweGYyOwotCQlpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFQU0spIHsKKwkJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBUFNLKQogCQkJKnBieVJTTisrID0gV1BBX0FVVEhfUFNLOwotCQl9IGVsc2UgaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBKSB7CisJCWVsc2UgaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBKQogCQkJKnBieVJTTisrID0gV1BBX0FVVEhfSUVFRTgwMl8xWDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJKnBieVJTTisrID0gV1BBX05PTkU7Ci0JCX0KIAogCQlzRnJhbWUucFJTTldQQS0+bGVuICs9IDY7CiAKQEAgLTM4NTAsMTUgKzM3MzgsMTQgQEAKIAkJc0ZyYW1lLnBSU04tPmFieVJTTlswXSA9IDB4MDA7CiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bMV0gPSAweDBGOwogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzJdID0gMHhBQzsKLQkJaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfV0VQKSB7CisJCWlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX1dFUCkKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bM10gPSBwTWdtdC0+cEN1cnJCU1MtPmJ5Q1NTR0s7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9US0lQKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfVEtJUCkKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bM10gPSBXTEFOXzExaV9DU1NfVEtJUDsKLQkJfSBlbHNlIGlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX0NDTVApIHsKKwkJZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9DQ01QKQogCQkJc0ZyYW1lLnBSU04tPmFieVJTTlszXSA9IFdMQU5fMTFpX0NTU19DQ01QOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzNdID0gV0xBTl8xMWlfQ1NTX1VOS05PV047Ci0JCX0KIAogCQkvLyBQYWlyd2lzZSBLZXkgQ2lwaGVyIFN1aXRlCiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bNF0gPSAxOwpAQCAtMzg2NiwxNSArMzc1MywxNSBAQAogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzZdID0gMHgwMDsKIAkJc0ZyYW1lLnBSU04tPmFieVJTTls3XSA9IDB4MEY7CiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bOF0gPSAweEFDOwotCQlpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9US0lQKSB7CisJCWlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX1RLSVApCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzldID0gV0xBTl8xMWlfQ1NTX1RLSVA7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9DQ01QKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfQ0NNUCkKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bOV0gPSBXTEFOXzExaV9DU1NfQ0NNUDsKLQkJfSBlbHNlIGlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX05PTkUpIHsKKwkJZWxzZSBpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9OT05FKQogCQkJc0ZyYW1lLnBSU04tPmFieVJTTls5XSA9IFdMQU5fMTFpX0NTU19VU0VfR1JPVVA7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bOV0gPSBXTEFOXzExaV9DU1NfVU5LTk9XTjsKLQkJfQorCiAJCXNGcmFtZS5wUlNOLT5sZW4gKz0gNjsKIAogCQkvLyBBdXRoIEtleSBNYW5hZ2VtZW50IFN1aXRlCkBAIC0zODgzLDEzICszNzcwLDEzIEBACiAJCXNGcmFtZS5wUlNOLT5hYnlSU05bMTJdID0gMHgwMDsKIAkJc0ZyYW1lLnBSU04tPmFieVJTTlsxM10gPSAweDBGOwogCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzE0XSA9IDB4QUM7Ci0JCWlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTJQU0spIHsKKwkJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykKIAkJCXNGcmFtZS5wUlNOLT5hYnlSU05bMTVdID0gV0xBTl8xMWlfQUtNU1NfUFNLOwotCQl9IGVsc2UgaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgeworCQllbHNlIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpCiAJCQlzRnJhbWUucFJTTi0+YWJ5UlNOWzE1XSA9IFdMQU5fMTFpX0FLTVNTXzgwMl8xWDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJc0ZyYW1lLnBSU04tPmFieVJTTlsxNV0gPSBXTEFOXzExaV9BS01TU19VTktOT1dOOwotCQl9CisKIAkJc0ZyYW1lLnBSU04tPmxlbiArPSA2OwogCiAJCS8vIFJTTiBDYXBhYmlsaXRpZXMKQEAgLTM5MTQsOSArMzgwMSw5IEBACiAJCQkJCXBieVJTTiArPSAxNjsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoKnB3UE1LSUQgIT0gMCkgeworCisJCQlpZiAoKnB3UE1LSUQgIT0gMCkKIAkJCQlzRnJhbWUucFJTTi0+bGVuICs9ICgyICsgKCpwd1BNS0lEKSAqIDE2KTsKLQkJCX0KIAkJfQogCiAJCXNGcmFtZS5sZW4gKz0gc0ZyYW1lLnBSU04tPmxlbiArIFdMQU5fSUVIRFJfTEVOOwpAQCAtNDIyOCwxMCArNDExNSw3IEBACiAJCXNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKIAkJc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogCQl2TWdyRGVjb2RlUHJvYmVSZXF1ZXN0KCZzRnJhbWUpOwotLyoKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUHJvYmUgcmVxdWVzdCByeDpNQUMgYWRkcjolcE1cbiIsCi0gIHNGcmFtZS5wSGRyLT5zQTMuYWJ5QWRkcjIpOwotKi8KKwogCQlpZiAoc0ZyYW1lLnBTU0lELT5sZW4gIT0gMCkgewogCQkJaWYgKHNGcmFtZS5wU1NJRC0+bGVuICE9ICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5sZW4pCiAJCQkJcmV0dXJuOwpAQCAtNDI0Miw5ICs0MTI2LDggQEAKIAkJCX0KIAkJfQogCi0JCWlmICgoc0ZyYW1lLnBTdXBwUmF0ZXMtPmxlbiA+IDQpIHx8IChzRnJhbWUucEV4dFN1cHBSYXRlcyAhPSBOVUxMKSkgeworCQlpZiAoKHNGcmFtZS5wU3VwcFJhdGVzLT5sZW4gPiA0KSB8fCAoc0ZyYW1lLnBFeHRTdXBwUmF0ZXMgIT0gTlVMTCkpCiAJCQlieVBIWVR5cGUgPSBCQl9UWVBFXzExRzsKLQkJfQogCiAJCS8vIFByb2JlIHJlc3BvbnNlIHJlcGx5Li4KIAkJcFR4UGFja2V0ID0gc19NZ3JNYWtlUHJvYmVSZXNwb25zZQpAQCAtNDI2Nyw4ICs0MTUwLDYgQEAKIAkJCVN0YXR1cyA9IGNzTWdtdF94bWl0KHBEZXZpY2UsIHBUeFBhY2tldCk7CiAJCQlpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfUEVORElORykgewogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1ndDpQcm9iZSByZXNwb25zZSB0eCBmYWlsZWRcbiIpOwotCQkJfSBlbHNlIHsKLS8vICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1ndDpQcm9iZSByZXNwb25zZSB0eCBzZW5kaW5nLi5cbiIpOwogCQkJfQogCQl9CiAJfQpAQCAtNDM2MSw3ICs0MjQyLDYgQEAKIAogCWNhc2UgV0xBTl9GU1RZUEVfUFJPQkVSRVE6CiAJCS8vIEZyYW1lIENsYXNlID0gMAotCQkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInJ4IHByb2JlcmVxXG4iKTsKIAkJc192TWdyUnhQcm9iZVJlcXVlc3QocERldmljZSwgcE1nbXQsIHBSeFBhY2tldCk7CiAJCWJyZWFrOwogCkBAIC00Mzc0LDEwICs0MjU0LDkgQEAKIAogCWNhc2UgV0xBTl9GU1RZUEVfQkVBQ09OOgogCQkvLyBGcmFtZSBDbGFzZSA9IDAKLQkJLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyeCBiZWFjb25cbiIpOwotCQlpZiAocE1nbXQtPmVTY2FuU3RhdGUgIT0gV01BQ19OT19TQ0FOTklORykgeworCQlpZiAocE1nbXQtPmVTY2FuU3RhdGUgIT0gV01BQ19OT19TQ0FOTklORykKIAkJCWJJblNjYW4gPSB0cnVlOwotCQl9CisKIAkJc192TWdyUnhCZWFjb24ocERldmljZSwgcE1nbXQsIHBSeFBhY2tldCwgYkluU2Nhbik7CiAJCWJyZWFrOwogCkBAIC00NDQyLDEyICs0MzIxLDExIEBACiAJUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogCVBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0OwogCi0vLyAgICBwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPSBmYWxzZTsKLQlpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgfHwgcERldmljZS0+YkVuYWJsZTgwMjF4KSB7CisJaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlIHx8IHBEZXZpY2UtPmJFbmFibGU4MDIxeCkKIAkJcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19QUklWQUNZKDEpOwotCX0gZWxzZSB7CisJZWxzZQogCQlwTWdtdC0+d0N1cnJDYXBJbmZvICY9IH5XTEFOX1NFVF9DQVBfSU5GT19QUklWQUNZKDEpOwotCX0KKwogCXBUeFBhY2tldCA9IHNfTWdyTWFrZUJlYWNvbgogCQkoCiAJCQlwRGV2aWNlLApAQCAtNDQ1NSw3ICs0MzMzLDcgQEAKIAkJCXBNZ210LT53Q3VyckNhcEluZm8sCiAJCQlwTWdtdC0+d0N1cnJCZWFjb25QZXJpb2QsCiAJCQlwTWdtdC0+dUN1cnJDaGFubmVsLAotCQkJcE1nbXQtPndDdXJyQVRJTVdpbmRvdywgLy8wLAorCQkJcE1nbXQtPndDdXJyQVRJTVdpbmRvdywKIAkJCShQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlDdXJyU1NJRCwKIAkJCSh1bnNpZ25lZCBjaGFyICopcE1nbXQtPmFieUN1cnJCU1NJRCwKIAkJCShQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLApAQCAtNDU3NSwyMiArNDQ1MywyMiBAQAogCWZvciAoaWkgPSAwOyBpaSA8IHBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlczsgaWkrKykgewogCQlwQ2FuZGlkYXRlTGlzdCA9ICZwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLkNhbmRpZGF0ZUxpc3RbaWldOwogCQlpZiAoIW1lbWNtcChwQ2FuZGlkYXRlTGlzdC0+QlNTSUQsIHBieUJTU0lELCBFVEhfQUxFTikpIHsKLQkJCWlmIChwc1JTTkNhcE9iai0+YlJTTkNhcEV4aXN0ICYmIChwc1JTTkNhcE9iai0+d1JTTkNhcCAmIEJJVDApKSB7CisJCQlpZiAocHNSU05DYXBPYmotPmJSU05DYXBFeGlzdCAmJiAocHNSU05DYXBPYmotPndSU05DYXAgJiBCSVQwKSkKIAkJCQlwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgfD0gTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRDsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJcENhbmRpZGF0ZUxpc3QtPkZsYWdzICY9IH4oTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRCk7Ci0JCQl9CisKIAkJCXJldHVybiB0cnVlOwogCQl9CiAJfQogCiAJLy8gTmV3IENhbmRpZGF0ZQogCXBDYW5kaWRhdGVMaXN0ID0gJnBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuQ2FuZGlkYXRlTGlzdFtwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXNdOwotCWlmIChwc1JTTkNhcE9iai0+YlJTTkNhcEV4aXN0ICYmIChwc1JTTkNhcE9iai0+d1JTTkNhcCAmIEJJVDApKSB7CisJaWYgKHBzUlNOQ2FwT2JqLT5iUlNOQ2FwRXhpc3QgJiYgKHBzUlNOQ2FwT2JqLT53UlNOQ2FwICYgQklUMCkpCiAJCXBDYW5kaWRhdGVMaXN0LT5GbGFncyB8PSBORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEOwotCX0gZWxzZSB7CisJZWxzZQogCQlwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgJj0gfihORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEKTsKLQl9CisKIAltZW1jcHkocENhbmRpZGF0ZUxpc3QtPkJTU0lELCBwYnlCU1NJRCwgRVRIX0FMRU4pOwogCXBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcysrOwogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk51bUNhbmRpZGF0ZXM6JWRcbiIsIChpbnQpcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmgKaW5kZXggYjkxZjFmOC4uMjMxMmQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmgKQEAgLTExOSwzMiArMTE5LDYgQEAKIH0gU0Fzc29jSW5mbywgKlBTQXNzb2NJbmZvOwogLy8tLS0KIAotLyoKLSAgdHlwZWRlZiBlbnVtIHRhZ1dNQUNfQVVUSEVOVElDQVRJT05fTU9ERSB7Ci0gIFdNQUNfQVVUSF9PUEVOLAotICBXTUFDX0FVVEhfU0hBUkVLRVksCi0gIFdNQUNfQVVUSF9BVVRPLAotICBXTUFDX0FVVEhfV1BBLAotICBXTUFDX0FVVEhfV1BBUFNLLAotICBXTUFDX0FVVEhfV1BBTk9ORSwKLSAgV01BQ19BVVRIX1dQQTIsCi0gIFdNQUNfQVVUSF9XUEEyUFNLLAotICBXTUFDX0FVVEhfTUFYICAgICAgIC8vIE5vdCBhIHJlYWwgbW9kZSwgZGVmaW5lZCBhcyB1cHBlciBib3VuZAotCi0gIH0gV01BQ19BVVRIRU5USUNBVElPTl9NT0RFLCAqUFdNQUNfQVVUSEVOVElDQVRJT05fTU9ERTsKLSovCi0KLS8vIFByZS1jb25maWd1cmVkIE1vZGUgKGZyb20gWFApCi0vKgotICB0eXBlZGVmIGVudW0gdGFnV01BQ19DT05GSUdfTU9ERSB7Ci0gIFdNQUNfQ09ORklHX0VTU19TVEEsCi0gIFdNQUNfQ09ORklHX0lCU1NfU1RBLAotICBXTUFDX0NPTkZJR19BVVRPLAotICBXTUFDX0NPTkZJR19BUAotCi0gIH0gV01BQ19DT05GSUdfTU9ERSwgKlBXTUFDX0NPTkZJR19NT0RFOwotKi8KLQogdHlwZWRlZiBlbnVtIHRhZ1dNQUNfU0NBTl9UWVBFIHsKIAlXTUFDX1NDQU5fQUNUSVZFLAogCVdNQUNfU0NBTl9QQVNTSVZFLApAQCAtMjMyLDkgKzIwNiw2IEBACiAJdW5zaWduZWQgY2hhciBieUNTU0dLOwogCXVuc2lnbmVkIGNoYXIgYnlDU1NQSzsKIAotLy8gICAgdW5zaWduZWQgY2hhciBhYnlOZXdTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTl07Ci0vLyAgICB1bnNpZ25lZCBjaGFyIGFieU5ld0V4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKLQogCS8vIEN1cnJlbnQgc3RhdGUgdmFycwogCXVuc2lnbmVkIGludAl1Q3VyckNoYW5uZWw7CiAJdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKQEAgLTI1Niw3ICsyMjcsNiBAQAogCXVuc2lnbmVkIGNoYXIgYWJ5RGVzaXJlQlNTSURbV0xBTl9CU1NJRF9MRU5dOwogCiAJLy8gQWRob2Mgb3IgQVAgY29uZmlndXJhdGlvbiB2YXJzCi0JLy91bnNpZ25lZCBjaGFyIGFieUFkSG9jU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKIAl1bnNpZ25lZCBzaG9ydCB3SUJTU0JlYWNvblBlcmlvZDsKIAl1bnNpZ25lZCBzaG9ydCB3SUJTU0FUSU1XaW5kb3c7CiAJdW5zaWduZWQgaW50CXVJQlNTQ2hhbm5lbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5jCmluZGV4IDk5MGVhMGYuLjliZTU5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEuYwpAQCAtMTYwLDggKzE2MCw3IEBACiAJCQkJCQk7CiAJCQkJfSBlbHNlCiAJCQkJCWJyZWFrOwotCQkJCS8vREJHX1BSTl9HUlAxNCgoImFieVBLVHlwZVslZF06ICVYXG4iLCBqLTEsIHBCU1NMaXN0LT5hYnlQS1R5cGVbai0xXSkpOwotCQkJfSAvL2ZvcgorCQkJfQogCQkJcEJTU0xpc3QtPndQS0NvdW50ID0gKHVuc2lnbmVkIHNob3J0KWo7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJ3UEtDb3VudDogJWRcbiIsIHBCU1NMaXN0LT53UEtDb3VudCk7CiAJCX0KQEAgLTE4Nyw3ICsxODYsNyBAQAogCQkJCQkJOwogCQkJCX0gZWxzZQogCQkJCQlicmVhazsKLQkJCQkvL0RCR19QUk5fR1JQMTQoKCJhYnlBdXRoVHlwZVslZF06ICVYXG4iLCBqLTEsIHBCU1NMaXN0LT5hYnlBdXRoVHlwZVtqLTFdKSk7CisKIAkJCX0KIAkJCWlmIChqID4gMCkKIAkJCQlwQlNTTGlzdC0+d0F1dGhDb3VudCA9ICh1bnNpZ25lZCBzaG9ydClqOwpAQCAtMjA2LDkgKzIwNSw2IEBACiAJCQkJcEJTU0xpc3QtPmJ5UmVwbGF5SWR4ID0gMiA8PCAoKCpwYnlDYXBzID4+IFdQQV9SRVBMQVlCSVRTU0hJRlQpICYgV1BBX1JFUExBWUJJVFMpOwogCQkJCXBCU1NMaXN0LT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9IHRydWU7CiAJCQkJcEJTU0xpc3QtPnNSU05DYXBPYmoud1JTTkNhcCA9ICoodW5zaWduZWQgc2hvcnQgKilwYnlDYXBzOwotCQkJCS8vREJHX1BSTl9HUlAxNCgoInBieUNhcHM6ICVYXG4iLCAqcGJ5Q2FwcykpOwotCQkJCS8vREJHX1BSTl9HUlAxNCgoImJ5RGVmYXVsdEtfYXNfUEs6ICVYXG4iLCBwQlNTTGlzdC0+YnlEZWZhdWx0S19hc19QSykpOwotCQkJCS8vREJHX1BSTl9HUlAxNCgoImJ5UmVwbGF5SWR4OiAlWFxuIiwgcEJTU0xpc3QtPmJ5UmVwbGF5SWR4KSk7CiAJCQl9CiAJCX0KIAkJcEJTU0xpc3QtPmJXUEFWYWxpZCA9IHRydWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYTIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5jCmluZGV4IDIwMTMxMjIuLjRlMWI2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5jCkBAIC0zNyw3ICszNyw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMjIsOSArMTIxLDkgQEAKIAlXUEEyX0NsZWFyUlNOKHBCU1NOb2RlKTsKIAogCWlmIChwUlNOLT5sZW4gPT0gMikgeyAvLyB2ZXIoMikKLQkJaWYgKChwUlNOLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9SU04pICYmIChwUlNOLT53VmVyc2lvbiA9PSAxKSkgeworCQlpZiAoKHBSU04tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX1JTTikgJiYgKHBSU04tPndWZXJzaW9uID09IDEpKQogCQkJcEJTU05vZGUtPmJXUEEyVmFsaWQgPSB0cnVlOwotCQl9CisKIAkJcmV0dXJuOwogCX0KIApAQCAtMjY4LDkgKzI2Nyw5IEBACiAJdW5zaWduZWQgaW50IGlpID0gMDsKIAl1bnNpZ25lZCBzaG9ydCAqcHdQTUtJRCA9IE5VTEw7CiAKLQlpZiAocFJTTklFcyA9PSBOVUxMKSB7CisJaWYgKHBSU05JRXMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJaWYgKCgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKSB8fAogCSAgICAgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykpICYmCiAJICAgIChwTWdtdC0+cEN1cnJCU1MgIT0gTlVMTCkpIHsKQEAgLTI4MywxNSArMjgyLDE0IEBACiAJCXBSU05JRXMtPmFieVJTTlswXSA9IDB4MDA7CiAJCXBSU05JRXMtPmFieVJTTlsxXSA9IDB4MEY7CiAJCXBSU05JRXMtPmFieVJTTlsyXSA9IDB4QUM7Ci0JCWlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX1dFUCkgeworCQlpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9XRVApCiAJCQlwUlNOSUVzLT5hYnlSU05bM10gPSBwTWdtdC0+cEN1cnJCU1MtPmJ5Q1NTR0s7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTR0sgPT0gS0VZX0NUTF9US0lQKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfVEtJUCkKIAkJCXBSU05JRXMtPmFieVJTTlszXSA9IFdMQU5fMTFpX0NTU19US0lQOwotCQl9IGVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfQ0NNUCkgeworCQllbHNlIGlmIChwTWdtdC0+YnlDU1NHSyA9PSBLRVlfQ1RMX0NDTVApCiAJCQlwUlNOSUVzLT5hYnlSU05bM10gPSBXTEFOXzExaV9DU1NfQ0NNUDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcFJTTklFcy0+YWJ5UlNOWzNdID0gV0xBTl8xMWlfQ1NTX1VOS05PV047Ci0JCX0KIAogCQkvLyBQYWlyd2lzZSBLZXkgQ2lwaGVyIFN1aXRlCiAJCXBSU05JRXMtPmFieVJTTls0XSA9IDE7CkBAIC0yOTksMTUgKzI5NywxNSBAQAogCQlwUlNOSUVzLT5hYnlSU05bNl0gPSAweDAwOwogCQlwUlNOSUVzLT5hYnlSU05bN10gPSAweDBGOwogCQlwUlNOSUVzLT5hYnlSU05bOF0gPSAweEFDOwotCQlpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9US0lQKSB7CisJCWlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX1RLSVApCiAJCQlwUlNOSUVzLT5hYnlSU05bOV0gPSBXTEFOXzExaV9DU1NfVEtJUDsKLQkJfSBlbHNlIGlmIChwTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX0NDTVApIHsKKwkJZWxzZSBpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9DQ01QKQogCQkJcFJTTklFcy0+YWJ5UlNOWzldID0gV0xBTl8xMWlfQ1NTX0NDTVA7Ci0JCX0gZWxzZSBpZiAocE1nbXQtPmJ5Q1NTUEsgPT0gS0VZX0NUTF9OT05FKSB7CisJCWVsc2UgaWYgKHBNZ210LT5ieUNTU1BLID09IEtFWV9DVExfTk9ORSkKIAkJCXBSU05JRXMtPmFieVJTTls5XSA9IFdMQU5fMTFpX0NTU19VU0VfR1JPVVA7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXBSU05JRXMtPmFieVJTTls5XSA9IFdMQU5fMTFpX0NTU19VTktOT1dOOwotCQl9CisKIAkJcFJTTklFcy0+bGVuICs9IDY7CiAKIAkJLy8gQXV0aCBLZXkgTWFuYWdlbWVudCBTdWl0ZQpAQCAtMzE2LDEzICszMTQsMTMgQEAKIAkJcFJTTklFcy0+YWJ5UlNOWzEyXSA9IDB4MDA7CiAJCXBSU05JRXMtPmFieVJTTlsxM10gPSAweDBGOwogCQlwUlNOSUVzLT5hYnlSU05bMTRdID0gMHhBQzsKLQkJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykgeworCQlpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKQogCQkJcFJTTklFcy0+YWJ5UlNOWzE1XSA9IFdMQU5fMTFpX0FLTVNTX1BTSzsKLQkJfSBlbHNlIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHsKKwkJZWxzZSBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKQogCQkJcFJTTklFcy0+YWJ5UlNOWzE1XSA9IFdMQU5fMTFpX0FLTVNTXzgwMl8xWDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcFJTTklFcy0+YWJ5UlNOWzE1XSA9IFdMQU5fMTFpX0FLTVNTX1VOS05PV047Ci0JCX0KKwogCQlwUlNOSUVzLT5sZW4gKz0gNjsKIAogCQkvLyBSU04gQ2FwYWJpbGl0aWVzCkBAIC0zNDgsMTEgKzM0NiwxMCBAQAogCQkJCQlwYnlCdWZmZXIgKz0gMTY7CiAJCQkJfQogCQkJfQotCQkJaWYgKCpwd1BNS0lEICE9IDApIHsKKwkJCWlmICgqcHdQTUtJRCAhPSAwKQogCQkJCXBSU05JRXMtPmxlbiArPSAoMiArICgqcHdQTUtJRCkqMTYpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlwYnlCdWZmZXIgPSAmcFJTTklFcy0+YWJ5UlNOWzE4XTsKLQkJCX0KIAkJfQogCQlyZXR1cm4gcFJTTklFcy0+bGVuICsgV0xBTl9JRUhEUl9MRU47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhY3RsLmMKaW5kZXggZDE3MjI0Zi4uODM5MmQ0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jCkBAIC01MSw3ICs1MSw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7CiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODgsNyArMTg3LDggQEAKICAqCiAgKi8KIAotaW50IHdwYV9zZXRfa2V5cyhQU0RldmljZSBwRGV2aWNlLCB2b2lkICpjdHgsIGJvb2wgZmNwZmtlcm5lbCkKK2ludCB3cGFfc2V0X2tleXMoUFNEZXZpY2UgcERldmljZSwgdm9pZCAqY3R4LAorCQkgYm9vbCBmY3Bma2VybmVsKSBfX211c3RfaG9sZCgmcERldmljZS0+bG9jaykKIHsKIAlzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKnBhcmFtID0gY3R4OwogCVBTTWdtdE9iamVjdCBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwpAQCAtMTk2LDcgKzE5Niw2IEBACiAJdW5zaWduZWQgY2hhciBhYnlLZXlbTUFYX0tFWV9MRU5dOwogCXVuc2lnbmVkIGNoYXIgYWJ5U2VxW01BWF9LRVlfTEVOXTsKIAlRV09SRCAgIEtleVJTQzsKLS8vICAgIE5ESVNfODAyXzExX0tFWV9SU0MgS2V5UlNDOwogCXVuc2lnbmVkIGNoYXIgYnlLZXlEZWNNb2RlID0gS0VZX0NUTF9XRVA7CiAJaW50IHJldCA9IDA7CiAJaW50IHV1LCBpaTsKQEAgLTIxMywxMyArMjEyLDEyIEBACiAJCXBEZXZpY2UtPmJ5S2V5SW5kZXggPSAwOwogCQlwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBmYWxzZTsKIAkJS2V5dlJlbW92ZUFsbFdFUEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLQkJZm9yICh1dSA9IDA7IHV1IDwgTUFYX0tFWV9UQUJMRTsgdXUrKykgeworCQlmb3IgKHV1ID0gMDsgdXUgPCBNQVhfS0VZX1RBQkxFOyB1dSsrKQogCQkJTUFDdkRpc2FibGVLZXlFbnRyeShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCB1dSk7Ci0JCX0KKwogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8vc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAlpZiAocGFyYW0tPnUud3BhX2tleS5rZXkgJiYgZmNwZmtlcm5lbCkgewogCQltZW1jcHkoJmFieUtleVswXSwgcGFyYW0tPnUud3BhX2tleS5rZXksIHBhcmFtLT51LndwYV9rZXkua2V5X2xlbik7CiAJfSBlbHNlIHsKQEAgLTI1OCw3ICsyNTYsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8vc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAlpZiAocGFyYW0tPnUud3BhX2tleS5zZXEgJiYgZmNwZmtlcm5lbCkgewogCQltZW1jcHkoJmFieVNlcVswXSwgcGFyYW0tPnUud3BhX2tleS5zZXEsIHBhcmFtLT51LndwYV9rZXkuc2VxX2xlbik7CiAJfSBlbHNlIHsKQEAgLTI3Nyw3ICsyNzQsNiBAQAogCQkJCUxPRFdPUkQoS2V5UlNDKSB8PSAoYWJ5U2VxW2lpXSA8PCAoaWkgKiA4KSk7CiAJCQllbHNlCiAJCQkJSElEV09SRChLZXlSU0MpIHw9IChhYnlTZXFbaWldIDw8ICgoaWktNCkgKiA4KSk7Ci0JCQkvL0tleVJTQyB8PSAoYWJ5U2VxW2lpXSA8PCAoaWkgKiA4KSk7CiAJCX0KIAkJZHdLZXlJbmRleCB8PSAxIDw8IDI5OwogCX0KQEAgLTI4NywxMyArMjgzLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfVEtJUCkgeworCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfVEtJUCkKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCX0KIAotCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfQ0NNUCkgeworCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfQ0NNUCkKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwotCX0KIAogCWlmIChwYXJhbS0+dS53cGFfa2V5LnNldF90eCkKIAkJZHdLZXlJbmRleCB8PSAoMSA8PCAzMSk7CkBAIC0zMjQsNyArMzE4LDYgQEAKIAlpZiAoKGJ5S2V5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApICYmCiAJICAgIChwYXJhbS0+dS53cGFfa2V5LmtleV9sZW4gIT0gTUFYX0tFWV9MRU4pKSB7CiAJCS8vIFRLSVAgS2V5IG11c3QgYmUgMjU2IGJpdHMKLQkJLy9EQkdfUFJOX1dMQU4wMygoInJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0RBVEEgLSBUS0lQIEtleSBtdXN0IGJlIDI1NiBiaXRzXG4iKSk7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInJldHVybi0gVEtJUCBLZXkgbXVzdCBiZSAyNTYgYml0cyFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zMzIsNyArMzI1LDYgQEAKIAlpZiAoKGJ5S2V5RGVjTW9kZSA9PSBLRVlfQ1RMX0NDTVApICYmCiAJICAgIChwYXJhbS0+dS53cGFfa2V5LmtleV9sZW4gIT0gQUVTX0tFWV9MRU4pKSB7CiAJCS8vIEFFUyBLZXkgbXVzdCBiZSAxMjggYml0cwotCQkvL0RCR19QUk5fV0xBTjAzKCgicmV0dXJuIE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQSAtIEFFUyBLZXkgbXVzdCBiZSAxMjggYml0c1xuIikpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM2MCw4ICszNTIsNiBAQAogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR1JPVVAgS2V5IEFzc2lnbi5cbiIpOwogCiAJCX0gZWxzZSB7Ci0JCQkvL0RCR19QUk5fV0xBTjAzKCgicmV0dXJuIE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQSAtS2V5YlNldERlZmF1bHRLZXkgRmFpbC4wXG4iKSk7Ci0JCQkvLyBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMzcxLDE2ICszNjEsMTMgQEAKIAkJLy8gUGFpcndpc2UgS2V5IGNhbid0IGJlIFdFUAogCQlpZiAoYnlLZXlEZWNNb2RlID09IEtFWV9DVExfV0VQKSB7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJQYWlyd2lzZSBLZXkgY2FuJ3QgYmUgV0VQXG4iKTsKLQkJCS8vc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJZHdLZXlJbmRleCB8PSAoMSA8PCAzMCk7IC8vIHNldCBwYWlyd2lzZSBrZXkKLQkJaWYgKHBNZ210LT5lQ29uZmlnTW9kZSA9PSBXTUFDX0NPTkZJR19JQlNTX1NUQSkgewotCQkJLy9EQkdfUFJOX1dMQU4wMygoInJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0RBVEEgLSBXTUFDX0NPTkZJR19JQlNTX1NUQVxuIikpOwotCQkJLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCQlpZiAocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0lCU1NfU1RBKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwogCQlpZiAoS2V5YlNldEtleSgmKHBEZXZpY2UtPnNLZXkpLAogCQkJICAgICAgICZwYXJhbS0+YWRkclswXSwKIAkJCSAgICAgICBkd0tleUluZGV4LApAQCAtMzk0LDE3ICszODEsNyBAQAogCiAJCX0gZWxzZSB7CiAJCQkvLyBLZXkgVGFibGUgRnVsbAotCQkJaWYgKGV0aGVyX2FkZHJfZXF1YWwocGFyYW0tPmFkZHIsIHBEZXZpY2UtPmFieUJTU0lEKSkgewotCQkJCS8vREJHX1BSTl9XTEFOMDMoKCJyZXR1cm4gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBIC1LZXkgVGFibGUgRnVsbC4yXG4iKSk7Ci0JCQkJLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQl9IGVsc2UgewotCQkJCS8vIFNhdmUgS2V5IGFuZCBjb25maWd1cmUganVzdCBiZWZvcmUgYXNzb2NpYXRlL3JlYXNzb2NpYXRlIHRvIEJTU0lECi0JCQkJLy8gd2UgZG8gbm90IGltcGxlbWVudCBub3cKLQkJCQkvL3NwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0gLy8gQlNTSUQgbm90IDB4ZmZmZmZmZmZmZmZmCiAJaWYgKChyZXQgPT0gMCkgJiYgKChwYXJhbS0+dS53cGFfa2V5LnNldF90eCkgIT0gMCkpIHsKQEAgLTQxMiwxNyArMzg5LDYgQEAKIAkJcERldmljZS0+YlRyYW5zbWl0S2V5ID0gdHJ1ZTsKIAl9CiAJcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSB0cnVlOwotCS8vc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotLyoKLSAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIGtleT0leC0leC0leC0leC0leC14eHh4eFxuIiwKLSAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5hYnlXZXBLZXlbYnlLZXlJbmRleF1bMF0sCi0gIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYWJ5V2VwS2V5W2J5S2V5SW5kZXhdWzFdLAotICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmFieVdlcEtleVtieUtleUluZGV4XVsyXSwKLSAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5hYnlXZXBLZXlbYnlLZXlJbmRleF1bM10sCi0gIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYWJ5V2VwS2V5W2J5S2V5SW5kZXhdWzRdCi0pOwotKi8KIAogCXJldHVybiByZXQ7CiB9CkBAIC00NDUsMTIgKzQxMSwxMSBAQAogCQkgICAgICAgc3RydWN0IHZpYXdnZXRfd3BhX3BhcmFtICpwYXJhbSkKIHsKIAlQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLQlpbnQgcmV0ID0gMDsKIAogCXBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9PUEVOOwogCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00NzEsNyArNDM2LDYgQEAKIAkJCQlzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKnBhcmFtKQogewogCVBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJaWYgKHBEZXZpY2UtPmJMaW5rUGFzcykgewpAQCAtNDgwLDcgKzQ0NCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTAwLDE0ICs0NjQsMTIgQEAKIHN0YXRpYyBpbnQgd3BhX3NldF9zY2FuKFBTRGV2aWNlIHBEZXZpY2UsCiAJCQlzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKnBhcmFtKQogewotCWludCByZXQgPSAwOwotCiAJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJQlNTdkNsZWFyQlNTTGlzdCgodm9pZCAqKXBEZXZpY2UsIHBEZXZpY2UtPmJMaW5rUGFzcyk7CiAJYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKXBEZXZpY2UsIFdMQU5fQ01EX0JTU0lEX1NDQU4sIE5VTEwpOwogCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTI4LDExICs0OTAsMTAgQEAKIAkJCSBzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKnBhcmFtKQogewogCVBTTWdtdE9iamVjdCAgICAgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLQlpbnQgcmV0ID0gMDsKIAogCW1lbWNweShwYXJhbS0+dS53cGFfYXNzb2NpYXRlLmJzc2lkLCBwTWdtdC0+YWJ5Q3VyckJTU0lEICwgNik7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTU0LDE0ICs1MTUsMTMgQEAKIHsKIAlQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAJUFdMQU5fSUVfU1NJRCAgICAgICBwSXRlbVNTSUQ7Ci0JaW50IHJldCA9IDA7CiAKIAlwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAKIAltZW1jcHkocGFyYW0tPnUud3BhX2Fzc29jaWF0ZS5zc2lkLCBwSXRlbVNTSUQtPmFieVNTSUQgLCBwSXRlbVNTSUQtPmxlbik7CiAJcGFyYW0tPnUud3BhX2Fzc29jaWF0ZS5zc2lkX2xlbiA9IHBJdGVtU1NJRC0+bGVuOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTU5Myw3ICs1NTMsNyBAQAogCiAJdW5zaWduZWQgY2hhciAqcHRlbXBCU1M7CiAKLQlwdGVtcEJTUyA9IGttYWxsb2Moc2l6ZW9mKEtub3duQlNTKSwgKGludClHRlBfQVRPTUlDKTsKKwlwdGVtcEJTUyA9IGttYWxsb2Moc2l6ZW9mKEtub3duQlNTKSwgR0ZQX0FUT01JQyk7CiAKIAlpZiAocHRlbXBCU1MgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ1YmJsZSBzb3J0IGttYWxsb2MgbWVtb3J5IGZhaWxAQEBcbiIpOwpAQCAtNjM1LDcgKzU5NSw3IEBACiAJCWNvdW50Kys7CiAJfQogCi0JcEJ1ZiA9IGtjYWxsb2MoY291bnQsIHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCksIChpbnQpR0ZQX0FUT01JQyk7CisJcEJ1ZiA9IGtjYWxsb2MoY291bnQsIHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCksIEdGUF9BVE9NSUMpOwogCiAJaWYgKHBCdWYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtNjU0LDExICs2MTQsNyBAQAogCQkJc2Nhbl9idWYtPnNzaWRfbGVuID0gcEl0ZW1TU0lELT5sZW47CiAJCQlzY2FuX2J1Zi0+ZnJlcSA9IGZyZXF1ZW5jeV9saXN0W3BCU1MtPnVDaGFubmVsLTFdOwogCQkJc2Nhbl9idWYtPmNhcHMgPSBwQlNTLT53Q2FwSW5mbzsKLQkJCS8vc2Nhbl9idWYtPmNhcHMgPSBwQlNTLT53Q2FwSW5mbzsKLQkJCS8vc2Nhbl9idWYtPnF1YWwgPQotCQkJLy9zY2FuX2J1Zi0+bm9pc2UgPQotCQkJLy9zY2FuX2J1Zi0+bGV2ZWwgPQotCQkJLy9zY2FuX2J1Zi0+bWF4cmF0ZSA9CisKIAkJCWlmIChwQlNTLT53V1BBTGVuICE9IDApIHsKIAkJCQlzY2FuX2J1Zi0+d3BhX2llX2xlbiA9IHBCU1MtPndXUEFMZW47CiAJCQkJbWVtY3B5KHNjYW5fYnVmLT53cGFfaWUsIHBCU1MtPmJ5V1BBSUUsIHBCU1MtPndXUEFMZW4pOwpAQCAtNjc1LDExICs2MzEsMTEgQEAKIAlpZiAoamogPCBjb3VudCkKIAkJY291bnQgPSBqajsKIAotCWlmIChjb3B5X3RvX3VzZXIocGFyYW0tPnUuc2Nhbl9yZXN1bHRzLmJ1ZiwgcEJ1Ziwgc2l6ZW9mKHN0cnVjdCB2aWF3Z2V0X3NjYW5fcmVzdWx0KSAqIGNvdW50KSkgeworCWlmIChjb3B5X3RvX3VzZXIocGFyYW0tPnUuc2Nhbl9yZXN1bHRzLmJ1ZiwgcEJ1Ziwgc2l6ZW9mKHN0cnVjdCB2aWF3Z2V0X3NjYW5fcmVzdWx0KSAqIGNvdW50KSkKIAkJcmV0ID0gLUVGQVVMVDsKLQl9CisKIAlwYXJhbS0+dS5zY2FuX3Jlc3VsdHMuc2Nhbl9jb3VudCA9IGNvdW50OwotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBwYXJhbS0+dS5zY2FuX3Jlc3VsdHMuc2Nhbl9jb3VudCA9ICVkXG4iLCBjb3VudCkKKwlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgcGFyYW0tPnUuc2Nhbl9yZXN1bHRzLnNjYW5fY291bnQgPSAlZFxuIiwgY291bnQpOwogCiAJCWtmcmVlKHBCdWYpOwogCXJldHVybiByZXQ7CkBAIC03MDYsNyArNjYyLDYgQEAKIAlQV0xBTl9JRV9TU0lEICAgcEl0ZW1TU0lEOwogCXVuc2lnbmVkIGNoYXIgYWJ5TnVsbEFkZHJbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAl1bnNpZ25lZCBjaGFyIGFieVdQQUlFWzY0XTsKLQlpbnQgcmV0ID0gMDsKIAlib29sIGJXZXBFbmFibGVkID0gZmFsc2U7CiAKIAkvLyBzZXQga2V5IHR5cGUgJiBhbGdvcml0aG0KQEAgLTczOSw5ICs2OTQsOCBAQAogCS8vIHNldCBic3NpZAogCWlmIChtZW1jbXAocGFyYW0tPnUud3BhX2Fzc29jaWF0ZS5ic3NpZCwgJmFieU51bGxBZGRyWzBdLCA2KSAhPSAwKQogCQltZW1jcHkocE1nbXQtPmFieURlc2lyZUJTU0lELCBwYXJhbS0+dS53cGFfYXNzb2NpYXRlLmJzc2lkLCA2KTsKLQllbHNlIHsKKwllbHNlCiAJCWJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKilwRGV2aWNlLCBXTEFOX0NNRF9CU1NJRF9TQ0FOLCBwSXRlbVNTSUQtPmFieVNTSUQpOwotCX0KIAogCWlmIChwYXJhbS0+dS53cGFfYXNzb2NpYXRlLndwYV9pZV9sZW4gPT0gMCkgewogCQlpZiAocGFyYW0tPnUud3BhX2Fzc29jaWF0ZS5hdXRoX2FsZyAmIEFVVEhfQUxHX1NIQVJFRF9LRVkpCkBAIC03ODgsMTMgKzc0MiwxMCBAQAogCiAJaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfU0hBUkVLRVkpIHsKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQkvL3BNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9TSEFSRUtFWTsKIAkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IHRydWU7CiAJfSBlbHNlIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX09QRU4pIHsKIAkJaWYgKCFiV2VwRW5hYmxlZCkgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKIAkJZWxzZSBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7Ci0JCS8vcE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX09QRU47Ci0JCS8vcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOyAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL0ZpeCBPcGVuIG1vZGUsIFdFUCBlbmNyeXB0aW9uCiAJfQogLy9taWtlIHNhdmUgb2xkIGVuY3J5cHRpb24gc3RhdHVzCiAJcERldmljZS0+ZU9sZEVuY3J5cHRpb25TdGF0dXMgPSBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1czsKQEAgLTgzMCw3ICs3ODEsNyBAQAogCWJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKilwRGV2aWNlLCBXTEFOX0NNRF9TU0lELCBOVUxMKTsKIAlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTg1Nyw3ICs4MDgsNyBAQAogCSAgICBwLT5sZW5ndGggPiBWSUFXR0VUX1dQQV9NQVhfQlVGX1NJWkUgfHwgIXAtPnBvaW50ZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGFyYW0gPSBrbWFsbG9jKChpbnQpcC0+bGVuZ3RoLCAoaW50KUdGUF9LRVJORUwpOworCXBhcmFtID0ga21hbGxvYygoaW50KXAtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBhcmFtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuYwppbmRleCBjMzlkNWVkLi40ZGEzZmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3JvdXRlLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfSU5GTzsKLS8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L01ha2VmaWxlCmluZGV4IDFkODI5YjQuLmI1ZWM0ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9NYWtlZmlsZQpAQCAtMTgsOCArMTgsNiBAQAogCQkJZGF0YXJhdGUubyBcCiAJCQlyYzQubyBcCiAJCQl0ZXRoZXIubyBcCi0JCQl0Y3JjLm8gXAotCQkJaG9zdGFwLm8gXAogCQkJd3BhLm8gXAogCQkJa2V5Lm8gXAogCQkJdGtpcC5vIFwKQEAgLTI3LDEwICsyNSw4IEBACiAJCQlyZi5vIFwKIAkJCWl3Y3RsLm8gXAogCQkJd3BhY3RsLm8gXAotCQkJYWVzX2NjbXAubyBcCiAJCQl1c2JwaXBlLm8gXAogCQkJY2hhbm5lbC5vIFwKLQkJCWNvbnRyb2wubyBcCiAJCQlmaXJtd2FyZS5vIFwKIAkJCWludC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiZmE4ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Flc19jY21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NiwgMjAwMyBWSUEgTmV0d29ya2luZyBUZWNobm9sb2dpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKiBGaWxlOiBhZXNfY2NtcC5jCi0gKgotICogUHVycG9zZTogQUVTX0NDTVAgZGVjcnlwdGlvbgotICoKLSAqIEF1dGhvcjogV2FycmVuIEhzdQotICoKLSAqIERhdGU6IEZlYiAxNSwgMjAwNQotICoKLSAqIEZ1bmN0aW9uczoKLSAqICAgICAgQUVTYkdlbkNDTVAgLSBQYXJzaW5nIFJYLXBhY2tldAotICoKLSAqIFJldmlzaW9uIEhpc3Rvcnk6Ci0gKi8KLQotI2luY2x1ZGUgImRldmljZS5oIgotI2luY2x1ZGUgIjgwMjExaGRyLmgiCi0KLS8qCi0gKiBTQk9YIFRhYmxlCi0gKi8KLQotc3RhdGljIHU4IHNib3hfdGFibGVbMjU2XSA9IHsKLQkweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1LCAweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2LAotCTB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsCi0JMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYywgMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSwKLQkweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhLCAweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1LAotCTB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAsIDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsCi0JMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YiwgMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZiwKLQkweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1LCAweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4LAotCTB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUsIDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsCi0JMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNywgMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MywKLQkweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4LCAweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiLAotCTB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMsIDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksCi0JMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSwgMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCwKLQkweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2LCAweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhLAotCTB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUsIDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsCi0JMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCwgMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZiwKLQkweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LCAweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2Ci19OwotCi1zdGF0aWMgdTggZG90Ml90YWJsZVsyNTZdID0gewotCTB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MGEsIDB4MGMsIDB4MGUsIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MWEsIDB4MWMsIDB4MWUsCi0JMHgyMCwgMHgyMiwgMHgyNCwgMHgyNiwgMHgyOCwgMHgyYSwgMHgyYywgMHgyZSwgMHgzMCwgMHgzMiwgMHgzNCwgMHgzNiwgMHgzOCwgMHgzYSwgMHgzYywgMHgzZSwKLQkweDQwLCAweDQyLCAweDQ0LCAweDQ2LCAweDQ4LCAweDRhLCAweDRjLCAweDRlLCAweDUwLCAweDUyLCAweDU0LCAweDU2LCAweDU4LCAweDVhLCAweDVjLCAweDVlLAotCTB4NjAsIDB4NjIsIDB4NjQsIDB4NjYsIDB4NjgsIDB4NmEsIDB4NmMsIDB4NmUsIDB4NzAsIDB4NzIsIDB4NzQsIDB4NzYsIDB4NzgsIDB4N2EsIDB4N2MsIDB4N2UsCi0JMHg4MCwgMHg4MiwgMHg4NCwgMHg4NiwgMHg4OCwgMHg4YSwgMHg4YywgMHg4ZSwgMHg5MCwgMHg5MiwgMHg5NCwgMHg5NiwgMHg5OCwgMHg5YSwgMHg5YywgMHg5ZSwKLQkweGEwLCAweGEyLCAweGE0LCAweGE2LCAweGE4LCAweGFhLCAweGFjLCAweGFlLCAweGIwLCAweGIyLCAweGI0LCAweGI2LCAweGI4LCAweGJhLCAweGJjLCAweGJlLAotCTB4YzAsIDB4YzIsIDB4YzQsIDB4YzYsIDB4YzgsIDB4Y2EsIDB4Y2MsIDB4Y2UsIDB4ZDAsIDB4ZDIsIDB4ZDQsIDB4ZDYsIDB4ZDgsIDB4ZGEsIDB4ZGMsIDB4ZGUsCi0JMHhlMCwgMHhlMiwgMHhlNCwgMHhlNiwgMHhlOCwgMHhlYSwgMHhlYywgMHhlZSwgMHhmMCwgMHhmMiwgMHhmNCwgMHhmNiwgMHhmOCwgMHhmYSwgMHhmYywgMHhmZSwKLQkweDFiLCAweDE5LCAweDFmLCAweDFkLCAweDEzLCAweDExLCAweDE3LCAweDE1LCAweDBiLCAweDA5LCAweDBmLCAweDBkLCAweDAzLCAweDAxLCAweDA3LCAweDA1LAotCTB4M2IsIDB4MzksIDB4M2YsIDB4M2QsIDB4MzMsIDB4MzEsIDB4MzcsIDB4MzUsIDB4MmIsIDB4MjksIDB4MmYsIDB4MmQsIDB4MjMsIDB4MjEsIDB4MjcsIDB4MjUsCi0JMHg1YiwgMHg1OSwgMHg1ZiwgMHg1ZCwgMHg1MywgMHg1MSwgMHg1NywgMHg1NSwgMHg0YiwgMHg0OSwgMHg0ZiwgMHg0ZCwgMHg0MywgMHg0MSwgMHg0NywgMHg0NSwKLQkweDdiLCAweDc5LCAweDdmLCAweDdkLCAweDczLCAweDcxLCAweDc3LCAweDc1LCAweDZiLCAweDY5LCAweDZmLCAweDZkLCAweDYzLCAweDYxLCAweDY3LCAweDY1LAotCTB4OWIsIDB4OTksIDB4OWYsIDB4OWQsIDB4OTMsIDB4OTEsIDB4OTcsIDB4OTUsIDB4OGIsIDB4ODksIDB4OGYsIDB4OGQsIDB4ODMsIDB4ODEsIDB4ODcsIDB4ODUsCi0JMHhiYiwgMHhiOSwgMHhiZiwgMHhiZCwgMHhiMywgMHhiMSwgMHhiNywgMHhiNSwgMHhhYiwgMHhhOSwgMHhhZiwgMHhhZCwgMHhhMywgMHhhMSwgMHhhNywgMHhhNSwKLQkweGRiLCAweGQ5LCAweGRmLCAweGRkLCAweGQzLCAweGQxLCAweGQ3LCAweGQ1LCAweGNiLCAweGM5LCAweGNmLCAweGNkLCAweGMzLCAweGMxLCAweGM3LCAweGM1LAotCTB4ZmIsIDB4ZjksIDB4ZmYsIDB4ZmQsIDB4ZjMsIDB4ZjEsIDB4ZjcsIDB4ZjUsIDB4ZWIsIDB4ZTksIDB4ZWYsIDB4ZWQsIDB4ZTMsIDB4ZTEsIDB4ZTcsIDB4ZTUKLX07Ci0KLXN0YXRpYyB1OCBkb3QzX3RhYmxlWzI1Nl0gPSB7Ci0JMHgwMCwgMHgwMywgMHgwNiwgMHgwNSwgMHgwYywgMHgwZiwgMHgwYSwgMHgwOSwgMHgxOCwgMHgxYiwgMHgxZSwgMHgxZCwgMHgxNCwgMHgxNywgMHgxMiwgMHgxMSwKLQkweDMwLCAweDMzLCAweDM2LCAweDM1LCAweDNjLCAweDNmLCAweDNhLCAweDM5LCAweDI4LCAweDJiLCAweDJlLCAweDJkLCAweDI0LCAweDI3LCAweDIyLCAweDIxLAotCTB4NjAsIDB4NjMsIDB4NjYsIDB4NjUsIDB4NmMsIDB4NmYsIDB4NmEsIDB4NjksIDB4NzgsIDB4N2IsIDB4N2UsIDB4N2QsIDB4NzQsIDB4NzcsIDB4NzIsIDB4NzEsCi0JMHg1MCwgMHg1MywgMHg1NiwgMHg1NSwgMHg1YywgMHg1ZiwgMHg1YSwgMHg1OSwgMHg0OCwgMHg0YiwgMHg0ZSwgMHg0ZCwgMHg0NCwgMHg0NywgMHg0MiwgMHg0MSwKLQkweGMwLCAweGMzLCAweGM2LCAweGM1LCAweGNjLCAweGNmLCAweGNhLCAweGM5LCAweGQ4LCAweGRiLCAweGRlLCAweGRkLCAweGQ0LCAweGQ3LCAweGQyLCAweGQxLAotCTB4ZjAsIDB4ZjMsIDB4ZjYsIDB4ZjUsIDB4ZmMsIDB4ZmYsIDB4ZmEsIDB4ZjksIDB4ZTgsIDB4ZWIsIDB4ZWUsIDB4ZWQsIDB4ZTQsIDB4ZTcsIDB4ZTIsIDB4ZTEsCi0JMHhhMCwgMHhhMywgMHhhNiwgMHhhNSwgMHhhYywgMHhhZiwgMHhhYSwgMHhhOSwgMHhiOCwgMHhiYiwgMHhiZSwgMHhiZCwgMHhiNCwgMHhiNywgMHhiMiwgMHhiMSwKLQkweDkwLCAweDkzLCAweDk2LCAweDk1LCAweDljLCAweDlmLCAweDlhLCAweDk5LCAweDg4LCAweDhiLCAweDhlLCAweDhkLCAweDg0LCAweDg3LCAweDgyLCAweDgxLAotCTB4OWIsIDB4OTgsIDB4OWQsIDB4OWUsIDB4OTcsIDB4OTQsIDB4OTEsIDB4OTIsIDB4ODMsIDB4ODAsIDB4ODUsIDB4ODYsIDB4OGYsIDB4OGMsIDB4ODksIDB4OGEsCi0JMHhhYiwgMHhhOCwgMHhhZCwgMHhhZSwgMHhhNywgMHhhNCwgMHhhMSwgMHhhMiwgMHhiMywgMHhiMCwgMHhiNSwgMHhiNiwgMHhiZiwgMHhiYywgMHhiOSwgMHhiYSwKLQkweGZiLCAweGY4LCAweGZkLCAweGZlLCAweGY3LCAweGY0LCAweGYxLCAweGYyLCAweGUzLCAweGUwLCAweGU1LCAweGU2LCAweGVmLCAweGVjLCAweGU5LCAweGVhLAotCTB4Y2IsIDB4YzgsIDB4Y2QsIDB4Y2UsIDB4YzcsIDB4YzQsIDB4YzEsIDB4YzIsIDB4ZDMsIDB4ZDAsIDB4ZDUsIDB4ZDYsIDB4ZGYsIDB4ZGMsIDB4ZDksIDB4ZGEsCi0JMHg1YiwgMHg1OCwgMHg1ZCwgMHg1ZSwgMHg1NywgMHg1NCwgMHg1MSwgMHg1MiwgMHg0MywgMHg0MCwgMHg0NSwgMHg0NiwgMHg0ZiwgMHg0YywgMHg0OSwgMHg0YSwKLQkweDZiLCAweDY4LCAweDZkLCAweDZlLCAweDY3LCAweDY0LCAweDYxLCAweDYyLCAweDczLCAweDcwLCAweDc1LCAweDc2LCAweDdmLCAweDdjLCAweDc5LCAweDdhLAotCTB4M2IsIDB4MzgsIDB4M2QsIDB4M2UsIDB4MzcsIDB4MzQsIDB4MzEsIDB4MzIsIDB4MjMsIDB4MjAsIDB4MjUsIDB4MjYsIDB4MmYsIDB4MmMsIDB4MjksIDB4MmEsCi0JMHgwYiwgMHgwOCwgMHgwZCwgMHgwZSwgMHgwNywgMHgwNCwgMHgwMSwgMHgwMiwgMHgxMywgMHgxMCwgMHgxNSwgMHgxNiwgMHgxZiwgMHgxYywgMHgxOSwgMHgxYQotfTsKLQotc3RhdGljIHZvaWQgeG9yXzEyOCh1OCAqYSwgdTggKmIsIHU4ICpvdXQpCi17Ci0JdTMyICpkd1B0ckEgPSAodTMyICopIGE7Ci0JdTMyICpkd1B0ckIgPSAodTMyICopIGI7Ci0JdTMyICpkd1B0ck91dCA9ICh1MzIgKikgb3V0OwotCi0JKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7Ci0JKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7Ci0JKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7Ci0JKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhvcl8zMih1OCAqYSwgdTggKmIsIHU4ICpvdXQpCi17Ci0JdTMyICpkd1B0ckEgPSAodTMyICopIGE7Ci0JdTMyICpkd1B0ckIgPSAodTMyICopIGI7Ci0JdTMyICpkd1B0ck91dCA9ICh1MzIgKikgb3V0OwotCi0JKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7Ci19Ci0KLXN0YXRpYyB2b2lkIEFkZFJvdW5kS2V5KHU4ICprZXksIGludCByb3VuZCkKLXsKLQl1OCBzYm94X2tleVs0XTsKLQl1OCByY29uX3RhYmxlWzEwXSA9IHsgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNn07Ci0KLQlzYm94X2tleVswXSA9IHNib3hfdGFibGVba2V5WzEzXV07Ci0Jc2JveF9rZXlbMV0gPSBzYm94X3RhYmxlW2tleVsxNF1dOwotCXNib3hfa2V5WzJdID0gc2JveF90YWJsZVtrZXlbMTVdXTsKLQlzYm94X2tleVszXSA9IHNib3hfdGFibGVba2V5WzEyXV07Ci0KLQlrZXlbMF0gPSBrZXlbMF0gXiByY29uX3RhYmxlW3JvdW5kXTsKLQl4b3JfMzIoJmtleVswXSwgc2JveF9rZXksICZrZXlbMF0pOwotCi0JeG9yXzMyKCZrZXlbNF0sICZrZXlbMF0sICZrZXlbNF0pOwotCXhvcl8zMigma2V5WzhdLCAma2V5WzRdLCAma2V5WzhdKTsKLQl4b3JfMzIoJmtleVsxMl0sICZrZXlbOF0sICZrZXlbMTJdKTsKLX0KLQotc3RhdGljIHZvaWQgU3ViQnl0ZXModTggKmluLCB1OCAqb3V0KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCW91dFtpXSA9IHNib3hfdGFibGVbaW5baV1dOwotfQotCi1zdGF0aWMgdm9pZCBTaGlmdFJvd3ModTggKmluLCB1OCAqb3V0KQotewotCW91dFswXSAgPSBpblswXTsKLQlvdXRbMV0gID0gaW5bNV07Ci0Jb3V0WzJdICA9IGluWzEwXTsKLQlvdXRbM10gID0gaW5bMTVdOwotCW91dFs0XSAgPSBpbls0XTsKLQlvdXRbNV0gID0gaW5bOV07Ci0Jb3V0WzZdICA9IGluWzE0XTsKLQlvdXRbN10gID0gaW5bM107Ci0Jb3V0WzhdICA9IGluWzhdOwotCW91dFs5XSAgPSBpblsxM107Ci0Jb3V0WzEwXSA9IGluWzJdOwotCW91dFsxMV0gPSBpbls3XTsKLQlvdXRbMTJdID0gaW5bMTJdOwotCW91dFsxM10gPSBpblsxXTsKLQlvdXRbMTRdID0gaW5bNl07Ci0Jb3V0WzE1XSA9IGluWzExXTsKLX0KLQotc3RhdGljIHZvaWQgTWl4Q29sdW1ucyh1OCAqaW4sIHU4ICpvdXQpCi17Ci0KLQlvdXRbMF0gPSBkb3QyX3RhYmxlW2luWzBdXSBeIGRvdDNfdGFibGVbaW5bMV1dIF4gaW5bMl0gXiBpblszXTsKLQlvdXRbMV0gPSBpblswXSBeIGRvdDJfdGFibGVbaW5bMV1dIF4gZG90M190YWJsZVtpblsyXV0gXiBpblszXTsKLQlvdXRbMl0gPSBpblswXSBeIGluWzFdIF4gZG90Ml90YWJsZVtpblsyXV0gXiBkb3QzX3RhYmxlW2luWzNdXTsKLQlvdXRbM10gPSBkb3QzX3RhYmxlW2luWzBdXSBeIGluWzFdIF4gaW5bMl0gXiBkb3QyX3RhYmxlW2luWzNdXTsKLX0KLQotc3RhdGljIHZvaWQgQUVTdjEyOCh1OCAqa2V5LCB1OCAqZGF0YSwgdTggKmNpcGhlcnRleHQpCi17Ci0JaW50ICBpOwotCWludCAgcm91bmQ7Ci0JdTggVG1wZGF0YUFbMTZdOwotCXU4IFRtcGRhdGFCWzE2XTsKLQl1OCBhYnlSb3VuZEtleVsxNl07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJYWJ5Um91bmRLZXlbaV0gPSBrZXlbaV07Ci0KLQlmb3IgKHJvdW5kID0gMDsgcm91bmQgPCAxMTsgcm91bmQrKykgewotCQlpZiAocm91bmQgPT0gMCkgewotCQkJeG9yXzEyOChhYnlSb3VuZEtleSwgZGF0YSwgY2lwaGVydGV4dCk7Ci0JCQlBZGRSb3VuZEtleShhYnlSb3VuZEtleSwgcm91bmQpOwotCQl9IGVsc2UgaWYgKHJvdW5kID09IDEwKSB7Ci0JCQlTdWJCeXRlcyhjaXBoZXJ0ZXh0LCBUbXBkYXRhQSk7Ci0JCQlTaGlmdFJvd3MoVG1wZGF0YUEsIFRtcGRhdGFCKTsKLQkJCXhvcl8xMjgoVG1wZGF0YUIsIGFieVJvdW5kS2V5LCBjaXBoZXJ0ZXh0KTsKLQkJfSBlbHNlIHsgLyogcm91bmQgMSB+IDkgKi8KLQkJCVN1YkJ5dGVzKGNpcGhlcnRleHQsIFRtcGRhdGFBKTsKLQkJCVNoaWZ0Um93cyhUbXBkYXRhQSwgVG1wZGF0YUIpOwotCQkJTWl4Q29sdW1ucygmVG1wZGF0YUJbMF0sICZUbXBkYXRhQVswXSk7Ci0JCQlNaXhDb2x1bW5zKCZUbXBkYXRhQls0XSwgJlRtcGRhdGFBWzRdKTsKLQkJCU1peENvbHVtbnMoJlRtcGRhdGFCWzhdLCAmVG1wZGF0YUFbOF0pOwotCQkJTWl4Q29sdW1ucygmVG1wZGF0YUJbMTJdLCAmVG1wZGF0YUFbMTJdKTsKLQkJCXhvcl8xMjgoVG1wZGF0YUEsIGFieVJvdW5kS2V5LCBjaXBoZXJ0ZXh0KTsKLQkJCUFkZFJvdW5kS2V5KGFieVJvdW5kS2V5LCByb3VuZCk7Ci0JCX0KLQl9Ci0KLX0KLQotLyoKLSAqIERlc2NyaXB0aW9uOiBBRVMgZGVjcnlwdGlvbgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBieVJ4S2V5ICAgICAgICAgICAgLSBUaGUga2V5IHVzZWQgdG8gZGVjcnlwdAotICogICAgICBwYnlGcmFtZSAgICAgICAgICAgIC0gU3RhcnRpbmcgYWRkcmVzcyBvZiBwYWNrZXQgaGVhZGVyCi0gKiAgICAgIHdGcmFtZVNpemUgICAgICAgICAgLSBUb3RhbCBwYWNrZXQgc2l6ZSBpbmNsdWRpbmcgQ1JDCi0gKiAgT3V0OgotICogICAgICBub25lCi0gKgotICogUmV0dXJuIFZhbHVlOiBNSUMgY29tcGFyZSByZXN1bHQKLSAqCi0gKi8KLQotYm9vbCBBRVNiR2VuQ0NNUCh1OCAqcGJ5UnhLZXksIHU4ICpwYnlGcmFtZSwgdTE2IHdGcmFtZVNpemUpCi17Ci0JdTggICAgICAgICAgICBhYnlOb25jZVsxM107Ci0JdTggICAgICAgICAgICBNSUNfSVZbMTZdOwotCXU4ICAgICAgICAgICAgTUlDX0hEUjFbMTZdOwotCXU4ICAgICAgICAgICAgTUlDX0hEUjJbMTZdOwotCXU4ICAgICAgICAgICAgYWJ5TUlDWzE2XTsKLQl1OCAgICAgICAgICAgIGFieUNUUlBMRFsxNl07Ci0JdTggICAgICAgICAgICBhYnlUbXBbMTZdOwotCXU4ICAgICAgICAgICAgYWJ5UGxhaW5UZXh0WzE2XTsKLQl1OCAgICAgICAgICAgIGFieUxhc3RDaXBoZXJbMTZdOwotCi0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKnBNQUNIZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcGJ5RnJhbWU7Ci0JdTggKnBieUlWOwotCXU4ICpwYnlQYXlsb2FkOwotCXUxNiAgICAgICAgICAgIHdITGVuID0gMjI7Ci0JLyogOCBpcyBJViwgOCBpcyBNSUMsIDQgaXMgQ1JDICovCi0JdTE2ICAgICAgICAgICAgd1BheWxvYWRTaXplID0gd0ZyYW1lU2l6ZSAtIDggLSA4IC0gNCAtIFdMQU5fSERSX0FERFIzX0xFTjsKLQlib29sICAgICAgICAgICAgYkE0ID0gZmFsc2U7Ci0JdTggICAgICAgICAgICBieVRtcDsKLQl1MTYgICAgICAgICAgICB3Q250OwotCWludCAgICAgICAgICAgICBpaSwgamosIGtrOwotCi0JcGJ5SVYgPSBwYnlGcmFtZSArIFdMQU5fSERSX0FERFIzX0xFTjsKLQlpZiAoV0xBTl9HRVRfRkNfVE9EUygqKHUxNiAqKSBwYnlGcmFtZSkgJiYKLQkgICAgV0xBTl9HRVRfRkNfRlJPTURTKCoodTE2ICopIHBieUZyYW1lKSkgewotCQliQTQgPSB0cnVlOwotCQlwYnlJViArPSA2OyAgICAgICAgICAgICAvKiA2IGlzIDgwMi4xMSBhZGRyZXNzNCAqLwotCQl3SExlbiArPSA2OwotCQl3UGF5bG9hZFNpemUgLT0gNjsKLQl9Ci0JcGJ5UGF5bG9hZCA9IHBieUlWICsgODsgLyogSVYtbGVuZ3RoICovCi0KLQlhYnlOb25jZVswXSAgPSAweDAwOyAvKiBub3cgaXMgMCwgaWYgUW9zIGhlcmUgd2lsbCBiZSBwcmlvcml0eSAqLwotCW1lbWNweSgmKGFieU5vbmNlWzFdKSwgcE1BQ0hlYWRlci0+YWRkcjIsIEVUSF9BTEVOKTsKLQlhYnlOb25jZVs3XSAgPSBwYnlJVls3XTsKLQlhYnlOb25jZVs4XSAgPSBwYnlJVls2XTsKLQlhYnlOb25jZVs5XSAgPSBwYnlJVls1XTsKLQlhYnlOb25jZVsxMF0gPSBwYnlJVls0XTsKLQlhYnlOb25jZVsxMV0gPSBwYnlJVlsxXTsKLQlhYnlOb25jZVsxMl0gPSBwYnlJVlswXTsKLQotCS8qIE1JQ19JViAqLwotCU1JQ19JVlswXSA9IDB4NTk7Ci0JbWVtY3B5KCYoTUlDX0lWWzFdKSwgJihhYnlOb25jZVswXSksIDEzKTsKLQlNSUNfSVZbMTRdID0gKHU4KSh3UGF5bG9hZFNpemUgPj4gOCk7Ci0JTUlDX0lWWzE1XSA9ICh1OCkod1BheWxvYWRTaXplICYgMHhmZik7Ci0KLQkvKiBNSUNfSERSMSAqLwotCU1JQ19IRFIxWzBdID0gKHU4KSh3SExlbiA+PiA4KTsKLQlNSUNfSERSMVsxXSA9ICh1OCkod0hMZW4gJiAweGZmKTsKLQlieVRtcCA9ICh1OCkobGUxNl90b19jcHUocE1BQ0hlYWRlci0+ZnJhbWVfY29udHJvbCkgPj4gOCk7Ci0JTUlDX0hEUjFbMl0gPSBieVRtcCAmIDB4OGY7Ci0JYnlUbXAgPSAodTgpKGxlMTZfdG9fY3B1KHBNQUNIZWFkZXItPmZyYW1lX2NvbnRyb2wpICYgMHhmZik7Ci0JYnlUbXAgJj0gMHg4NzsKLQlNSUNfSERSMVszXSA9IGJ5VG1wIHwgMHg0MDsKLQltZW1jcHkoJihNSUNfSERSMVs0XSksIHBNQUNIZWFkZXItPmFkZHIxLCBFVEhfQUxFTik7Ci0JbWVtY3B5KCYoTUlDX0hEUjFbMTBdKSwgcE1BQ0hlYWRlci0+YWRkcjIsIEVUSF9BTEVOKTsKLQotCS8qIE1JQ19IRFIyICovCi0JbWVtY3B5KCYoTUlDX0hEUjJbMF0pLCBwTUFDSGVhZGVyLT5hZGRyMywgRVRIX0FMRU4pOwotCWJ5VG1wID0gKHU4KShsZTE2X3RvX2NwdShwTUFDSGVhZGVyLT5zZXFfY3RybCkgPj4gOCk7Ci0JTUlDX0hEUjJbNl0gPSBieVRtcCAmIDB4MGY7Ci0JTUlDX0hEUjJbN10gPSAwOwotCi0JaWYgKGJBNCkgewotCQltZW1jcHkoJihNSUNfSERSMls4XSksIHBNQUNIZWFkZXItPmFkZHI0LCBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJTUlDX0hEUjJbOF0gID0gMHgwMDsKLQkJTUlDX0hEUjJbOV0gID0gMHgwMDsKLQkJTUlDX0hEUjJbMTBdID0gMHgwMDsKLQkJTUlDX0hEUjJbMTFdID0gMHgwMDsKLQkJTUlDX0hEUjJbMTJdID0gMHgwMDsKLQkJTUlDX0hEUjJbMTNdID0gMHgwMDsKLQl9Ci0JTUlDX0hEUjJbMTRdID0gMHgwMDsKLQlNSUNfSERSMlsxNV0gPSAweDAwOwotCi0JLyogQ0NNUCAqLwotCUFFU3YxMjgocGJ5UnhLZXksIE1JQ19JViwgYWJ5TUlDKTsKLQlmb3IgKGtrID0gMDsga2sgPCAxNjsga2srKykKLQkJYWJ5VG1wW2trXSA9IE1JQ19IRFIxW2trXSBeIGFieU1JQ1tra107Ci0KLQlBRVN2MTI4KHBieVJ4S2V5LCBhYnlUbXAsIGFieU1JQyk7Ci0JZm9yIChrayA9IDA7IGtrIDwgMTY7IGtrKyspCi0JCWFieVRtcFtra10gPSBNSUNfSERSMltra10gXiBhYnlNSUNba2tdOwotCi0JQUVTdjEyOChwYnlSeEtleSwgYWJ5VG1wLCBhYnlNSUMpOwotCi0Jd0NudCA9IDE7Ci0JYWJ5Q1RSUExEWzBdID0gMHgwMTsKLQltZW1jcHkoJihhYnlDVFJQTERbMV0pLCAmKGFieU5vbmNlWzBdKSwgMTMpOwotCi0JZm9yIChqaiA9IHdQYXlsb2FkU2l6ZTsgamogPiAxNjsgamogPSBqai0xNikgewotCi0JCWFieUNUUlBMRFsxNF0gPSAodTgpICh3Q250ID4+IDgpOwotCQlhYnlDVFJQTERbMTVdID0gKHU4KSAod0NudCAmIDB4ZmYpOwotCi0JCUFFU3YxMjgocGJ5UnhLZXksIGFieUNUUlBMRCwgYWJ5VG1wKTsKLQotCQlmb3IgKGtrID0gMDsga2sgPCAxNjsga2srKykKLQkJCWFieVBsYWluVGV4dFtra10gPSBhYnlUbXBba2tdIF4gcGJ5UGF5bG9hZFtra107Ci0KLQkJZm9yIChrayA9IDA7IGtrIDwgMTY7IGtrKyspCi0JCQlhYnlUbXBba2tdID0gYWJ5TUlDW2trXSBeIGFieVBsYWluVGV4dFtra107Ci0KLQkJQUVTdjEyOChwYnlSeEtleSwgYWJ5VG1wLCBhYnlNSUMpOwotCi0JCW1lbWNweShwYnlQYXlsb2FkLCBhYnlQbGFpblRleHQsIDE2KTsKLQkJd0NudCsrOwotCQlwYnlQYXlsb2FkICs9IDE2OwotCX0gLyogZm9yIHdQYXlsb2FkU2l6ZSAqLwotCi0JLyogbGFzdCBwYXlsb2FkICovCi0JbWVtY3B5KCYoYWJ5TGFzdENpcGhlclswXSksIHBieVBheWxvYWQsIGpqKTsKLQlmb3IgKGlpID0gamo7IGlpIDwgMTY7IGlpKyspCi0JCWFieUxhc3RDaXBoZXJbaWldID0gMHgwMDsKLQotCWFieUNUUlBMRFsxNF0gPSAodTgpICh3Q250ID4+IDgpOwotCWFieUNUUlBMRFsxNV0gPSAodTgpICh3Q250ICYgMHhmZik7Ci0KLQlBRVN2MTI4KHBieVJ4S2V5LCBhYnlDVFJQTEQsIGFieVRtcCk7Ci0JZm9yIChrayA9IDA7IGtrIDwgMTY7IGtrKyspCi0JCWFieVBsYWluVGV4dFtra10gPSBhYnlUbXBba2tdIF4gYWJ5TGFzdENpcGhlcltra107Ci0KLQltZW1jcHkocGJ5UGF5bG9hZCwgYWJ5UGxhaW5UZXh0LCBqaik7Ci0JcGJ5UGF5bG9hZCArPSBqajsKLQotCS8qIGZvciBNSUMgY2FsY3VsYXRpb24gKi8KLQlmb3IgKGlpID0gamo7IGlpIDwgMTY7IGlpKyspCi0JCWFieVBsYWluVGV4dFtpaV0gPSAweDAwOwotCWZvciAoa2sgPSAwOyBrayA8IDE2OyBraysrKQotCQlhYnlUbXBba2tdID0gYWJ5TUlDW2trXSBeIGFieVBsYWluVGV4dFtra107Ci0KLQlBRVN2MTI4KHBieVJ4S2V5LCBhYnlUbXAsIGFieU1JQyk7Ci0KLQkvKiA9PiBhYm92ZSBpcyB0aGUgY2FsY3VsYXRlZCBNSUMgKi8KLQotCXdDbnQgPSAwOwotCWFieUNUUlBMRFsxNF0gPSAodTgpICh3Q250ID4+IDgpOwotCWFieUNUUlBMRFsxNV0gPSAodTgpICh3Q250ICYgMHhmZik7Ci0JQUVTdjEyOChwYnlSeEtleSwgYWJ5Q1RSUExELCBhYnlUbXApOwotCi0JZm9yIChrayA9IDA7IGtrIDwgODsga2srKykKLQkJYWJ5VG1wW2trXSA9IGFieVRtcFtra10gXiBwYnlQYXlsb2FkW2trXTsKLQotCS8qID0+IGFib3ZlIGlzIHRoZSBwYWNrZXQgZGVjLU1JQyAqLwotCi0JaWYgKCFtZW1jbXAoYWJ5TUlDLCBhYnlUbXAsIDgpKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2YTlhZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Flc19jY21wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqCi0gKiBGaWxlOiBhZXNfY2NtcC5oCi0gKgotICogUHVycG9zZTogQUVTX0NDTVAgRGVjcnlwdGlvbgotICoKLSAqIEF1dGhvcjogV2FycmVuIEhzdQotICoKLSAqIERhdGU6IEZlYiAxNSwgMjAwNQotICoKLSAqLwotCi0jaWZuZGVmIF9fQUVTX0hfXwotI2RlZmluZSBfX0FFU19IX18KLQotYm9vbCBBRVNiR2VuQ0NNUCh1OCAqIHBieVJ4S2V5LCB1OCAqIHBieUZyYW1lLCB1MTYgd0ZyYW1lU2l6ZSk7Ci0KLSNlbmRpZiAvKiBfX0FFU19DQ01QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5jCmluZGV4IDNkNDYxMGUuLjY5NGUzNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jhc2ViYW5kLmMKQEAgLTQwLDEzICs0MCw4IEBACiAjaW5jbHVkZSAibWFjLmgiCiAjaW5jbHVkZSAiYmFzZWJhbmQuaCIKICNpbmNsdWRlICJyZi5oIgotI2luY2x1ZGUgInNyb20uaCIKLSNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAidXNicGlwZS5oIgogI2luY2x1ZGUgImRhdGFyYXRlLmgiCi0jaW5jbHVkZSAicm5kaXMuaCIKLQotc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIAogc3RhdGljIHU4IGFieVZUMzE4NF9BR0NbXSA9IHsKICAgICAweDAwLCAgIC8vMApAQCAtNjM4LDgwICs2MzMsNTkgQEAKIHsxMCwgMjAsIDU1LCAxMTAsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTQ0LCAxOTIsIDIxNn07CiAKIC8qCi1zdGF0aWMKLXVuc2lnbmVkIGxvbmcKLXNfdWxHZXRMb3dTUTMoUFNEZXZpY2UgcERldmljZSk7Ci0KLXN0YXRpYwotdW5zaWduZWQgbG9uZwotc191bEdldFJhdGlvKFBTRGV2aWNlIHBEZXZpY2UpOwotCi1zdGF0aWMKLXZvaWQKLXNfdkNsZWFyU1EzVmFsdWUoUFNEZXZpY2UgcERldmljZSk7Ci0qLwotCi0vKgogICogRGVzY3JpcHRpb246IENhbGN1bGF0ZSBkYXRhIGZyYW1lIHRyYW5zbWl0dGluZyB0aW1lCiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgYnlQcmVhbWJsZVR5cGUgIC0gUHJlYW1ibGUgVHlwZQotICogICAgICBieVBrdFR5cGUgICAgICAgIC0gUEtfVFlQRV8xMUEsIFBLX1RZUEVfMTFCLCBQS19UWVBFXzExR0IsIFBLX1RZUEVfMTFHQQotICogICAgICBjYkZyYW1lTGVuZ3RoICAgLSBCYXNlYmFuZCBUeXBlCi0gKiAgICAgIHdSYXRlICAgICAgICAgICAtIFR4IFJhdGUKKyAqCXByZWFtYmxlX3R5cGUJLSBQcmVhbWJsZSBUeXBlCisgKglwa3RfdHlwZQktIFBLX1RZUEVfMTFBLCBQS19UWVBFXzExQiwgUEtfVFlQRV8xMUdCLCBQS19UWVBFXzExR0EKKyAqCWZyYW1lX2xlbmd0aAktIEJhc2ViYW5kIFR5cGUKKyAqCXR4X3JhdGUJCS0gVHggUmF0ZQogICogIE91dDoKICAqCiAgKiBSZXR1cm4gVmFsdWU6IEZyYW1lVGltZQogICoKICAqLwotdW5zaWduZWQgaW50Ci1CQnVHZXRGcmFtZVRpbWUoCi0gICAgIHU4IGJ5UHJlYW1ibGVUeXBlLAotICAgICB1OCBieVBrdFR5cGUsCi0gICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAotICAgICB1MTYgd1JhdGUKLSAgICApCit1bnNpZ25lZCBpbnQgQkJ1R2V0RnJhbWVUaW1lKHU4IHByZWFtYmxlX3R5cGUsIHU4IHBrdF90eXBlLAorCXVuc2lnbmVkIGludCBmcmFtZV9sZW5ndGgsIHUxNiB0eF9yYXRlKQogewotICAgIHVuc2lnbmVkIGludCB1RnJhbWVUaW1lOwotICAgIHVuc2lnbmVkIGludCB1UHJlYW1ibGU7Ci0gICAgdW5zaWduZWQgaW50IHVUbXA7Ci0gICAgdW5zaWduZWQgaW50IHVSYXRlSWR4ID0gKHVuc2lnbmVkIGludCl3UmF0ZTsKLSAgICB1bnNpZ25lZCBpbnQgdVJhdGUgPSAwOworCXVuc2lnbmVkIGludCBmcmFtZV90aW1lOworCXVuc2lnbmVkIGludCBwcmVhbWJsZTsKKwl1bnNpZ25lZCBpbnQgdG1wOworCXVuc2lnbmVkIGludCByYXRlID0gMDsKIAotICAgIGlmICh1UmF0ZUlkeCA+IFJBVEVfNTRNKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAodHhfcmF0ZSA+IFJBVEVfNTRNKQorCQlyZXR1cm4gMDsKIAotICAgIHVSYXRlID0gKHVuc2lnbmVkIGludClhd2NGcmFtZVRpbWVbdVJhdGVJZHhdOworCXJhdGUgPSAodW5zaWduZWQgaW50KWF3Y0ZyYW1lVGltZVt0eF9yYXRlXTsKIAotICAgIGlmICh1UmF0ZUlkeCA8PSAzKSB7ICAgICAgICAgIC8vQ0NLIG1vZGUKKwlpZiAodHhfcmF0ZSA8PSAzKSB7CisJCWlmIChwcmVhbWJsZV90eXBlID09IDEpCisJCQlwcmVhbWJsZSA9IDk2OworCQllbHNlCisJCQlwcmVhbWJsZSA9IDE5MjsKIAotICAgICAgICBpZiAoYnlQcmVhbWJsZVR5cGUgPT0gMSkgey8vU2hvcnQKLSAgICAgICAgICAgIHVQcmVhbWJsZSA9IDk2OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdVByZWFtYmxlID0gMTkyOwotICAgICAgICB9Ci0gICAgICAgIHVGcmFtZVRpbWUgPSAoY2JGcmFtZUxlbmd0aCAqIDgwKSAvIHVSYXRlOyAgLy8/Pz8/PwotICAgICAgICB1VG1wID0gKHVGcmFtZVRpbWUgKiB1UmF0ZSkgLyA4MDsKLSAgICAgICAgaWYgKGNiRnJhbWVMZW5ndGggIT0gdVRtcCkgewotICAgICAgICAgICAgdUZyYW1lVGltZSArKzsKLSAgICAgICAgfQorCQlmcmFtZV90aW1lID0gKGZyYW1lX2xlbmd0aCAqIDgwKSAvIHJhdGU7CisJCXRtcCA9IChmcmFtZV90aW1lICogcmF0ZSkgLyA4MDsKIAotICAgICAgICByZXR1cm4gKHVQcmVhbWJsZSArIHVGcmFtZVRpbWUpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgdUZyYW1lVGltZSA9IChjYkZyYW1lTGVuZ3RoICogOCArIDIyKSAvIHVSYXRlOyAgIC8vPz8/Pz8/Pz8KLSAgICAgICAgdVRtcCA9ICgodUZyYW1lVGltZSAqIHVSYXRlKSAtIDIyKSAvIDg7Ci0gICAgICAgIGlmKGNiRnJhbWVMZW5ndGggIT0gdVRtcCkgewotICAgICAgICAgICAgdUZyYW1lVGltZSArKzsKLSAgICAgICAgfQotICAgICAgICB1RnJhbWVUaW1lID0gdUZyYW1lVGltZSAqIDQ7ICAgIC8vPz8/Pz8/PwotICAgICAgICBpZihieVBrdFR5cGUgIT0gUEtfVFlQRV8xMUEpIHsKLSAgICAgICAgICAgIHVGcmFtZVRpbWUgKz0gNjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKDIwICsgdUZyYW1lVGltZSk7IC8vPz8/Pz8/Ci0gICAgfQorCQlpZiAoZnJhbWVfbGVuZ3RoICE9IHRtcCkKKwkJCWZyYW1lX3RpbWUrKzsKKworCQlyZXR1cm4gcHJlYW1ibGUgKyBmcmFtZV90aW1lOworCX0gZWxzZSB7CisJCWZyYW1lX3RpbWUgPSAoZnJhbWVfbGVuZ3RoICogOCArIDIyKSAvIHJhdGU7CisJCXRtcCA9ICgoZnJhbWVfdGltZSAqIHJhdGUpIC0gMjIpIC8gODsKKworCQlpZiAoZnJhbWVfbGVuZ3RoICE9IHRtcCkKKwkJCWZyYW1lX3RpbWUrKzsKKworCQlmcmFtZV90aW1lID0gZnJhbWVfdGltZSAqIDQ7CisKKwkJaWYgKHBrdF90eXBlICE9IFBLX1RZUEVfMTFBKQorCQkJZnJhbWVfdGltZSArPSA2OworCisJCXJldHVybiAyMCArIGZyYW1lX3RpbWU7CisJfQogfQogCiAvKgpAQCAtNzE5LDkgKzY5Myw5IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgcERldmljZSAgICAgICAgIC0gRGV2aWNlIFN0cnVjdHVyZQotICogICAgICBjYkZyYW1lTGVuZ3RoICAgLSBUeCBGcmFtZSBMZW5ndGgKLSAqICAgICAgd1JhdGUgICAgICAgICAgIC0gVHggUmF0ZQorICogICAgICBwcml2ICAgICAgICAgLSBEZXZpY2UgU3RydWN0dXJlCisgKiAgICAgIGZyYW1lX2xlbmd0aCAgIC0gVHggRnJhbWUgTGVuZ3RoCisgKiAgICAgIHR4X3JhdGUgICAgICAgICAgIC0gVHggUmF0ZQogICogIE91dDoKICAqCXN0cnVjdCB2bnRfcGh5X2ZpZWxkICpwaHkKICAqIAkJCS0gcG9pbnRlciB0byBQaHkgTGVuZ3RoIGZpZWxkCkBAIC03MzEsMTUzICs3MDUsMTM1IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgQkJ2Q2FsY3VsYXRlUGFyYW1ldGVyKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTMyIGNiRnJhbWVMZW5ndGgsCi0JdTE2IHdSYXRlLCB1OCBieVBhY2tldFR5cGUsIHN0cnVjdCB2bnRfcGh5X2ZpZWxkICpwaHkpCit2b2lkIEJCdkNhbGN1bGF0ZVBhcmFtZXRlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHUzMiBmcmFtZV9sZW5ndGgsCisJdTE2IHR4X3JhdGUsIHU4IHBrdF90eXBlLCBzdHJ1Y3Qgdm50X3BoeV9maWVsZCAqcGh5KQogewotCXUzMiBjYkJpdENvdW50OwotCXUzMiBjYlVzQ291bnQgPSAwOwotCXUzMiBjYlRtcDsKLQlpbnQgYkV4dEJpdDsKLQl1OCBieVByZWFtYmxlVHlwZSA9IHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlOwotCWludCBiQ0NLID0gcERldmljZS0+YkNDSzsKKwl1MzIgYml0X2NvdW50OworCXUzMiBjb3VudCA9IDA7CisJdTMyIHRtcDsKKwlpbnQgZXh0X2JpdDsKKwl1OCBwcmVhbWJsZV90eXBlID0gcHJpdi0+YnlQcmVhbWJsZVR5cGU7CiAKLSAgICBjYkJpdENvdW50ID0gY2JGcmFtZUxlbmd0aCAqIDg7Ci0gICAgYkV4dEJpdCA9IGZhbHNlOworCWJpdF9jb3VudCA9IGZyYW1lX2xlbmd0aCAqIDg7CisJZXh0X2JpdCA9IGZhbHNlOwogCi0gICAgc3dpdGNoICh3UmF0ZSkgewotICAgIGNhc2UgUkFURV8xTSA6Ci0gICAgICAgIGNiVXNDb3VudCA9IGNiQml0Q291bnQ7Ci0JcGh5LT5zaWduYWwgPSAweDAwOwotICAgICAgICBicmVhazsKKwlzd2l0Y2ggKHR4X3JhdGUpIHsKKwljYXNlIFJBVEVfMU06CisJCWNvdW50ID0gYml0X2NvdW50OwogCi0gICAgY2FzZSBSQVRFXzJNIDoKLSAgICAgICAgY2JVc0NvdW50ID0gY2JCaXRDb3VudCAvIDI7Ci0gICAgICAgIGlmIChieVByZWFtYmxlVHlwZSA9PSAxKQotCQlwaHktPnNpZ25hbCA9IDB4MDk7Ci0gICAgICAgIGVsc2UgLy8gbG9uZyBwcmVhbWJsZQotCQlwaHktPnNpZ25hbCA9IDB4MDE7Ci0gICAgICAgIGJyZWFrOworCQlwaHktPnNpZ25hbCA9IDB4MDA7CiAKLSAgICBjYXNlIFJBVEVfNU0gOgotICAgICAgICBpZiAoYkNDSyA9PSBmYWxzZSkKLSAgICAgICAgICAgIGNiQml0Q291bnQgKys7Ci0gICAgICAgIGNiVXNDb3VudCA9IChjYkJpdENvdW50ICogMTApIC8gNTU7Ci0gICAgICAgIGNiVG1wID0gKGNiVXNDb3VudCAqIDU1KSAvIDEwOwotICAgICAgICBpZiAoY2JUbXAgIT0gY2JCaXRDb3VudCkKLSAgICAgICAgICAgIGNiVXNDb3VudCArKzsKLSAgICAgICAgaWYgKGJ5UHJlYW1ibGVUeXBlID09IDEpCi0JCXBoeS0+c2lnbmFsID0gMHgwYTsKLSAgICAgICAgZWxzZSAvLyBsb25nIHByZWFtYmxlCi0JCXBoeS0+c2lnbmFsID0gMHgwMjsKLSAgICAgICAgYnJlYWs7CisJCWJyZWFrOworCWNhc2UgUkFURV8yTToKKwkJY291bnQgPSBiaXRfY291bnQgLyAyOwogCi0gICAgY2FzZSBSQVRFXzExTSA6CisJCWlmIChwcmVhbWJsZV90eXBlID09IDEpCisJCQlwaHktPnNpZ25hbCA9IDB4MDk7CisJCWVsc2UKKwkJCXBoeS0+c2lnbmFsID0gMHgwMTsKIAotICAgICAgICBpZiAoYkNDSyA9PSBmYWxzZSkKLSAgICAgICAgICAgIGNiQml0Q291bnQgKys7Ci0gICAgICAgIGNiVXNDb3VudCA9IGNiQml0Q291bnQgLyAxMTsKLSAgICAgICAgY2JUbXAgPSBjYlVzQ291bnQgKiAxMTsKLSAgICAgICAgaWYgKGNiVG1wICE9IGNiQml0Q291bnQpIHsKLSAgICAgICAgICAgIGNiVXNDb3VudCArKzsKLSAgICAgICAgICAgIGlmICgoY2JCaXRDb3VudCAtIGNiVG1wKSA8PSAzKQotICAgICAgICAgICAgICAgIGJFeHRCaXQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChieVByZWFtYmxlVHlwZSA9PSAxKQotCQlwaHktPnNpZ25hbCA9IDB4MGI7Ci0gICAgICAgIGVsc2UgLy8gbG9uZyBwcmVhbWJsZQotCQlwaHktPnNpZ25hbCA9IDB4MDM7Ci0gICAgICAgIGJyZWFrOworCQlicmVhazsKKwljYXNlIFJBVEVfNU06CisJCWNvdW50ID0gKGJpdF9jb3VudCAqIDEwKSAvIDU1OworCQl0bXAgPSAoY291bnQgKiA1NSkgLyAxMDsKIAotICAgIGNhc2UgUkFURV82TSA6Ci0gICAgICAgIGlmKGJ5UGFja2V0VHlwZSA9PSBQS19UWVBFXzExQSkgey8vMTFhLCA1R0haCi0JCXBoeS0+c2lnbmFsID0gMHg5YjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsvLzExZywgMi40R0haCi0JCXBoeS0+c2lnbmFsID0gMHg4YjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkJaWYgKHRtcCAhPSBiaXRfY291bnQpCisJCQljb3VudCsrOwogCi0gICAgY2FzZSBSQVRFXzlNIDoKLSAgICAgICAgaWYoYnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8xMWEsIDVHSFoKLQkJcGh5LT5zaWduYWwgPSAweDlmOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugey8vMTFnLCAyLjRHSFoKLQkJcGh5LT5zaWduYWwgPSAweDhmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCQlpZiAocHJlYW1ibGVfdHlwZSA9PSAxKQorCQkJcGh5LT5zaWduYWwgPSAweDBhOworCQllbHNlCisJCQlwaHktPnNpZ25hbCA9IDB4MDI7CiAKLSAgICBjYXNlIFJBVEVfMTJNIDoKLSAgICAgICAgaWYoYnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8xMWEsIDVHSFoKLQkJcGh5LT5zaWduYWwgPSAweDlhOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugey8vMTFnLCAyLjRHSFoKLQkJcGh5LT5zaWduYWwgPSAweDhhOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCQlicmVhazsKKwljYXNlIFJBVEVfMTFNOgorCQljb3VudCA9IGJpdF9jb3VudCAvIDExOworCQl0bXAgPSBjb3VudCAqIDExOwogCi0gICAgY2FzZSBSQVRFXzE4TSA6Ci0gICAgICAgIGlmKGJ5UGFja2V0VHlwZSA9PSBQS19UWVBFXzExQSkgey8vMTFhLCA1R0haCi0JCXBoeS0+c2lnbmFsID0gMHg5ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsvLzExZywgMi40R0haCi0JCXBoeS0+c2lnbmFsID0gMHg4ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkJaWYgKHRtcCAhPSBiaXRfY291bnQpIHsKKwkJCWNvdW50Kys7CiAKLSAgICBjYXNlIFJBVEVfMjRNIDoKLSAgICAgICAgaWYoYnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8xMWEsIDVHSFoKLQkJcGh5LT5zaWduYWwgPSAweDk5OwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugey8vMTFnLCAyLjRHSFoKLQkJcGh5LT5zaWduYWwgPSAweDg5OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCQkJaWYgKChiaXRfY291bnQgLSB0bXApIDw9IDMpCisJCQkJZXh0X2JpdCA9IHRydWU7CisJCX0KIAotICAgIGNhc2UgUkFURV8zNk0gOgotICAgICAgICBpZihieVBhY2tldFR5cGUgPT0gUEtfVFlQRV8xMUEpIHsvLzExYSwgNUdIWgotCQlwaHktPnNpZ25hbCA9IDB4OWQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ly8xMWcsIDIuNEdIWgotCQlwaHktPnNpZ25hbCA9IDB4OGQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJCWlmIChwcmVhbWJsZV90eXBlID09IDEpCisJCQlwaHktPnNpZ25hbCA9IDB4MGI7CisJCWVsc2UKKwkJCXBoeS0+c2lnbmFsID0gMHgwMzsKIAotICAgIGNhc2UgUkFURV80OE0gOgotICAgICAgICBpZihieVBhY2tldFR5cGUgPT0gUEtfVFlQRV8xMUEpIHsvLzExYSwgNUdIWgotCQlwaHktPnNpZ25hbCA9IDB4OTg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ly8xMWcsIDIuNEdIWgotCQlwaHktPnNpZ25hbCA9IDB4ODg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJCWJyZWFrOworCWNhc2UgUkFURV82TToKKwkJaWYgKHBrdF90eXBlID09IFBLX1RZUEVfMTFBKQorCQkJcGh5LT5zaWduYWwgPSAweDliOworCQllbHNlCisJCQlwaHktPnNpZ25hbCA9IDB4OGI7CiAKLSAgICBjYXNlIFJBVEVfNTRNIDoKLSAgICAgICAgaWYgKGJ5UGFja2V0VHlwZSA9PSBQS19UWVBFXzExQSkgey8vMTFhLCA1R0haCi0JCXBoeS0+c2lnbmFsID0gMHg5YzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsvLzExZywgMi40R0haCi0JCXBoeS0+c2lnbmFsID0gMHg4YzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkJYnJlYWs7CisJY2FzZSBSQVRFXzlNOgorCQlpZiAocGt0X3R5cGUgPT0gUEtfVFlQRV8xMUEpCisJCQlwaHktPnNpZ25hbCA9IDB4OWY7CisJCWVsc2UKKwkJCXBoeS0+c2lnbmFsID0gMHg4ZjsKIAotICAgIGRlZmF1bHQgOgotICAgICAgICBpZiAoYnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8xMWEsIDVHSFoKLQkJcGh5LT5zaWduYWwgPSAweDljOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugey8vMTFnLCAyLjRHSFoKLQkJcGh5LT5zaWduYWwgPSAweDhjOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKwkJYnJlYWs7CisJY2FzZSBSQVRFXzEyTToKKwkJaWYgKHBrdF90eXBlID09IFBLX1RZUEVfMTFBKQorCQkJcGh5LT5zaWduYWwgPSAweDlhOworCQllbHNlCisJCQlwaHktPnNpZ25hbCA9IDB4OGE7CiAKLQlpZiAoYnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFCKSB7CisJCWJyZWFrOworCWNhc2UgUkFURV8xOE06CisJCWlmIChwa3RfdHlwZSA9PSBQS19UWVBFXzExQSkKKwkJCXBoeS0+c2lnbmFsID0gMHg5ZTsKKwkJZWxzZQorCQkJcGh5LT5zaWduYWwgPSAweDhlOworCisJCWJyZWFrOworCWNhc2UgUkFURV8yNE06CisJCWlmIChwa3RfdHlwZSA9PSBQS19UWVBFXzExQSkKKwkJCXBoeS0+c2lnbmFsID0gMHg5OTsKKwkJZWxzZQorCQkJcGh5LT5zaWduYWwgPSAweDg5OworCisJCWJyZWFrOworCWNhc2UgUkFURV8zNk06CisJCWlmIChwa3RfdHlwZSA9PSBQS19UWVBFXzExQSkKKwkJCXBoeS0+c2lnbmFsID0gMHg5ZDsKKwkJZWxzZQorCQkJcGh5LT5zaWduYWwgPSAweDhkOworCisJCWJyZWFrOworCWNhc2UgUkFURV80OE06CisJCWlmIChwa3RfdHlwZSA9PSBQS19UWVBFXzExQSkKKwkJCXBoeS0+c2lnbmFsID0gMHg5ODsKKwkJZWxzZQorCQkJcGh5LT5zaWduYWwgPSAweDg4OworCisJCWJyZWFrOworCWNhc2UgUkFURV81NE06CisJCWlmIChwa3RfdHlwZSA9PSBQS19UWVBFXzExQSkKKwkJCXBoeS0+c2lnbmFsID0gMHg5YzsKKwkJZWxzZQorCQkJcGh5LT5zaWduYWwgPSAweDhjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAocGt0X3R5cGUgPT0gUEtfVFlQRV8xMUEpCisJCQlwaHktPnNpZ25hbCA9IDB4OWM7CisJCWVsc2UKKwkJCXBoeS0+c2lnbmFsID0gMHg4YzsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBrdF90eXBlID09IFBLX1RZUEVfMTFCKSB7CiAJCXBoeS0+c2VydmljZSA9IDB4MDA7Ci0JCWlmIChiRXh0Qml0KQorCQlpZiAoZXh0X2JpdCkKIAkJCXBoeS0+c2VydmljZSB8PSAweDgwOwotCQlwaHktPmxlbiA9IGNwdV90b19sZTE2KCh1MTYpY2JVc0NvdW50KTsKKwkJcGh5LT5sZW4gPSBjcHVfdG9fbGUxNigodTE2KWNvdW50KTsKIAl9IGVsc2UgewogCQlwaHktPnNlcnZpY2UgPSAweDAwOwotCQlwaHktPmxlbiA9IGNwdV90b19sZTE2KCh1MTYpY2JGcmFtZUxlbmd0aCk7CisJCXBoeS0+bGVuID0gY3B1X3RvX2xlMTYoKHUxNilmcmFtZV9sZW5ndGgpOwogCX0KIH0KIApAQCAtODg2LDM1ICs4NDIsMzEgQEAKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgIC0gRGV2aWNlIFN0cnVjdHVyZQotICogICAgICBieUFudGVubmFNb2RlICAgIC0gQW50ZW5uYSBNb2RlCisgKglwcml2CQktIERldmljZSBTdHJ1Y3R1cmUKKyAqCWFudGVubmFfbW9kZQktIEFudGVubmEgTW9kZQogICogIE91dDoKICAqICAgICAgbm9uZQogICoKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBCQnZTZXRBbnRlbm5hTW9kZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5QW50ZW5uYU1vZGUpCit2b2lkIEJCdlNldEFudGVubmFNb2RlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTggYW50ZW5uYV9tb2RlKQogewotICAgIHN3aXRjaCAoYnlBbnRlbm5hTW9kZSkgewotICAgICAgICBjYXNlIEFOVF9UWEE6Ci0gICAgICAgIGNhc2UgQU5UX1RYQjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFOVF9SWEE6Ci0gICAgICAgICAgICBwRGV2aWNlLT5ieUJCUnhDb25mICY9IDB4RkM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTlRfUlhCOgotICAgICAgICAgICAgcERldmljZS0+YnlCQlJ4Q29uZiAmPSAweEZFOwotICAgICAgICAgICAgcERldmljZS0+YnlCQlJ4Q29uZiB8PSAweDAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorCXN3aXRjaCAoYW50ZW5uYV9tb2RlKSB7CisJY2FzZSBBTlRfVFhBOgorCWNhc2UgQU5UX1RYQjoKKwkJYnJlYWs7CisJY2FzZSBBTlRfUlhBOgorCQlwcml2LT5ieUJCUnhDb25mICY9IDB4RkM7CisJCWJyZWFrOworCWNhc2UgQU5UX1JYQjoKKwkJcHJpdi0+YnlCQlJ4Q29uZiAmPSAweEZFOworCQlwcml2LT5ieUJCUnhDb25mIHw9IDB4MDI7CisJCWJyZWFrOworCX0KIAotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1NFVF9BTlRNRCwKLSAgICAgICAgICAgICAgICAgICAgKHUxNikgYnlBbnRlbm5hTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9TRVRfQU5UTUQsCisJCSh1MTYpYW50ZW5uYV9tb2RlLCAwLCAwLCBOVUxMKTsKIH0KIAogLyoKQEAgLTkzNCwxNCArODg2LDE0IEBACiBpbnQgQkJiVlQzMTg0SW5pdChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IHN0YXR1czsKLQl1MTYgbGVuZ2h0OworCXUxNiBsZW5ndGg7CiAJdTggKmFkZHI7CiAJdTggKmFnYzsKLQl1MTYgbGVuZ2h0X2FnYzsKKwl1MTYgbGVuZ3RoX2FnYzsKIAl1OCBhcnJheVsyNTZdOwogCXU4IGRhdGE7CiAKLQlzdGF0dXMgPSBDT05UUk9MbnNSZXF1ZXN0SW4ocHJpdiwgTUVTU0FHRV9UWVBFX1JFQUQsIDAsCisJc3RhdHVzID0gdm50X2NvbnRyb2xfaW4ocHJpdiwgTUVTU0FHRV9UWVBFX1JFQUQsIDAsCiAJCU1FU1NBR0VfUkVRVUVTVF9FRVBST00sIEVFUF9NQVhfQ09OVEVYVF9TSVpFLAogCQkJCQkJcHJpdi0+YWJ5RUVQUk9NKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQpAQCAtOTU1LDIwICs5MDcsMjAgQEAKIAkJCShwcml2LT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV0gIT0gMHgwMCkpIHsKIAkJCXByaXYtPmFieUVFUFJPTVtFRVBfT0ZTX1pPTkVUWVBFXSA9IDA7CiAJCQlwcml2LT5hYnlFRVBST01bRUVQX09GU19NQVhDSEFOTkVMXSA9IDB4MEI7Ci0JCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCi0JCQkJCQkiSW5pdCBab25lIFR5cGUgOlVTQVxuIik7CisKKwkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiSW5pdCBab25lIFR5cGUgOlVTQVxuIik7CiAJCX0gZWxzZSBpZiAoKHByaXYtPmNvbmZpZ19maWxlLlpvbmVUeXBlID09IDEpICYmCiAJCQkocHJpdi0+YWJ5RUVQUk9NW0VFUF9PRlNfWk9ORVRZUEVdICE9IDB4MDEpKSB7CiAJCQlwcml2LT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV0gPSAweDAxOwogCQkJcHJpdi0+YWJ5RUVQUk9NW0VFUF9PRlNfTUFYQ0hBTk5FTF0gPSAweDBEOwotCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJCQkJIkluaXQgWm9uZSBUeXBlIDpKYXBhblxuIik7CisKKwkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiSW5pdCBab25lIFR5cGUgOkphcGFuXG4iKTsKIAkJfSBlbHNlIGlmICgocHJpdi0+Y29uZmlnX2ZpbGUuWm9uZVR5cGUgPT0gMikgJiYKIAkJCShwcml2LT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV0gIT0gMHgwMikpIHsKIAkJCXByaXYtPmFieUVFUFJPTVtFRVBfT0ZTX1pPTkVUWVBFXSA9IDB4MDI7CiAJCQlwcml2LT5hYnlFRVBST01bRUVQX09GU19NQVhDSEFOTkVMXSA9IDB4MEQ7Ci0JCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCi0JCQkJCQkiSW5pdCBab25lIFR5cGUgOkV1cm9wZVxuIik7CisKKwkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiSW5pdCBab25lIFR5cGUgOkV1cm9wZVxuIik7CiAJCX0gZWxzZSB7CiAJCQlpZiAocHJpdi0+Y29uZmlnX2ZpbGUuWm9uZVR5cGUgIT0KIAkJCQkJcHJpdi0+YWJ5RUVQUk9NW0VFUF9PRlNfWk9ORVRZUEVdKQpAQCAtOTg4LDE4ICs5NDAsMTcgQEAKIAogCXByaXYtPmJ5UkZUeXBlID0gcHJpdi0+YWJ5RUVQUk9NW0VFUF9PRlNfUkZUWVBFXTsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iWm9uZSBUeXBlICV4XG4iLAotCQkJCQkJCXByaXYtPmJ5Wm9uZVR5cGUpOworCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiWm9uZSBUeXBlICV4XG4iLCBwcml2LT5ieVpvbmVUeXBlKTsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iUkYgVHlwZSAlZFxuIiwgcHJpdi0+YnlSRlR5cGUpOworCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiUkYgVHlwZSAlZFxuIiwgcHJpdi0+YnlSRlR5cGUpOwogCiAJaWYgKChwcml2LT5ieVJGVHlwZSA9PSBSRl9BTDIyMzApIHx8CiAJCQkJKHByaXYtPmJ5UkZUeXBlID09IFJGX0FMMjIzMFMpKSB7CiAJCXByaXYtPmJ5QkJSeENvbmYgPSBhYnlWVDMxODRfQUwyMjMwWzEwXTsKLQkJbGVuZ2h0ID0gc2l6ZW9mKGFieVZUMzE4NF9BTDIyMzApOworCQlsZW5ndGggPSBzaXplb2YoYWJ5VlQzMTg0X0FMMjIzMCk7CiAJCWFkZHIgPSBhYnlWVDMxODRfQUwyMjMwOwogCQlhZ2MgPSBhYnlWVDMxODRfQUdDOwotCQlsZW5naHRfYWdjID0gc2l6ZW9mKGFieVZUMzE4NF9BR0MpOworCQlsZW5ndGhfYWdjID0gc2l6ZW9mKGFieVZUMzE4NF9BR0MpOwogCiAJCXByaXYtPmFieUJCVkdBWzBdID0gMHgxQzsKIAkJcHJpdi0+YWJ5QkJWR0FbMV0gPSAweDEwOwpAQCAtMTAxMSwxMCArOTYyLDEwIEBACiAJCXByaXYtPmxkQm1UaHJlc2hvbGRbM10gPSAwOwogCX0gZWxzZSBpZiAocHJpdi0+YnlSRlR5cGUgPT0gUkZfQUlST0hBNzIzMCkgewogCQlwcml2LT5ieUJCUnhDb25mID0gYWJ5VlQzMTg0X0FMMjIzMFsxMF07Ci0JCWxlbmdodCA9IHNpemVvZihhYnlWVDMxODRfQUwyMjMwKTsKKwkJbGVuZ3RoID0gc2l6ZW9mKGFieVZUMzE4NF9BTDIyMzApOwogCQlhZGRyID0gYWJ5VlQzMTg0X0FMMjIzMDsKIAkJYWdjID0gYWJ5VlQzMTg0X0FHQzsKLQkJbGVuZ2h0X2FnYyA9IHNpemVvZihhYnlWVDMxODRfQUdDKTsKKwkJbGVuZ3RoX2FnYyA9IHNpemVvZihhYnlWVDMxODRfQUdDKTsKIAogCQlhZGRyWzB4ZDddID0gMHgwNjsKIApAQCAtMTAyOSwxMCArOTgwLDEwIEBACiAJfSBlbHNlIGlmICgocHJpdi0+YnlSRlR5cGUgPT0gUkZfVlQzMjI2KSB8fAogCQkJKHByaXYtPmJ5UkZUeXBlID09IFJGX1ZUMzIyNkQwKSkgewogCQlwcml2LT5ieUJCUnhDb25mID0gYWJ5VlQzMTg0X1ZUMzIyNkQwWzEwXTsKLQkJbGVuZ2h0ID0gc2l6ZW9mKGFieVZUMzE4NF9WVDMyMjZEMCk7CisJCWxlbmd0aCA9IHNpemVvZihhYnlWVDMxODRfVlQzMjI2RDApOwogCQlhZGRyID0gYWJ5VlQzMTg0X1ZUMzIyNkQwOwogCQlhZ2MgPSBhYnlWVDMxODRfQUdDOwotCQlsZW5naHRfYWdjID0gc2l6ZW9mKGFieVZUMzE4NF9BR0MpOworCQlsZW5ndGhfYWdjID0gc2l6ZW9mKGFieVZUMzE4NF9BR0MpOwogCiAJCXByaXYtPmFieUJCVkdBWzBdID0gMHgyMDsKIAkJcHJpdi0+YWJ5QkJWR0FbMV0gPSAweDEwOwpAQCAtMTA0NiwxMCArOTk3LDEwIEBACiAJCU1BQ3ZSZWdCaXRzT24ocHJpdiwgTUFDX1JFR19TT0ZUUFdSQ1RMMiwgU09GVFBXUkNUTF9SRkxFT1BUKTsKIAl9IGVsc2UgaWYgKChwcml2LT5ieVJGVHlwZSA9PSBSRl9WVDMzNDJBMCkpIHsKIAkJcHJpdi0+YnlCQlJ4Q29uZiA9IGFieVZUMzE4NF9WVDMyMjZEMFsxMF07Ci0JCWxlbmdodCA9IHNpemVvZihhYnlWVDMxODRfVlQzMjI2RDApOworCQlsZW5ndGggPSBzaXplb2YoYWJ5VlQzMTg0X1ZUMzIyNkQwKTsKIAkJYWRkciA9IGFieVZUMzE4NF9WVDMyMjZEMDsKIAkJYWdjID0gYWJ5VlQzMTg0X0FHQzsKLQkJbGVuZ2h0X2FnYyA9IHNpemVvZihhYnlWVDMxODRfQUdDKTsKKwkJbGVuZ3RoX2FnYyA9IHNpemVvZihhYnlWVDMxODRfQUdDKTsKIAogCQlwcml2LT5hYnlCQlZHQVswXSA9IDB4MjA7CiAJCXByaXYtPmFieUJCVkdBWzFdID0gMHgxMDsKQEAgLTEwNjUsNDAgKzEwMTYsMzkgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JbWVtY3B5KGFycmF5LCBhZGRyLCBsZW5naHQpOworCW1lbWNweShhcnJheSwgYWRkciwgbGVuZ3RoKTsKIAotCUNPTlRST0xuc1JlcXVlc3RPdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLCAwLAotCQlNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIGxlbmdodCwgYXJyYXkpOworCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIDAsCisJCU1FU1NBR0VfUkVRVUVTVF9CQlJFRywgbGVuZ3RoLCBhcnJheSk7CiAKLQltZW1jcHkoYXJyYXksIGFnYywgbGVuZ2h0X2FnYyk7CisJbWVtY3B5KGFycmF5LCBhZ2MsIGxlbmd0aF9hZ2MpOwogCi0JQ09OVFJPTG5zUmVxdWVzdE91dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIDAsCi0JCU1FU1NBR0VfUkVRVUVTVF9CQkFHQywgbGVuZ2h0X2FnYywgYXJyYXkpOworCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIDAsCisJCU1FU1NBR0VfUkVRVUVTVF9CQkFHQywgbGVuZ3RoX2FnYywgYXJyYXkpOwogCiAJaWYgKChwcml2LT5ieVJGVHlwZSA9PSBSRl9WVDMyMjYpIHx8CiAJCShwcml2LT5ieVJGVHlwZSA9PSBSRl9WVDMzNDJBMCkpIHsKLQkJQ29udHJvbHZXcml0ZUJ5dGUocHJpdiwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKKwkJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCiAJCQkJCQlNQUNfUkVHX0lUUlRNU0VULCAweDIzKTsKIAkJTUFDdlJlZ0JpdHNPbihwcml2LCBNQUNfUkVHX1BBUEVERUxBWSwgMHgwMSk7CiAJfSBlbHNlIGlmIChwcml2LT5ieVJGVHlwZSA9PSBSRl9WVDMyMjZEMCkgewotCQlDb250cm9sdldyaXRlQnl0ZShwcml2LCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAorCQl2bnRfY29udHJvbF9vdXRfdTgocHJpdiwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKIAkJCQkJCU1BQ19SRUdfSVRSVE1TRVQsIDB4MTEpOwogCQlNQUN2UmVnQml0c09uKHByaXYsIE1BQ19SRUdfUEFQRURFTEFZLCAweDAxKTsKIAl9CiAKLQlDb250cm9sdldyaXRlQnl0ZShwcml2LCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4MDQsIDB4N2YpOwotCUNvbnRyb2x2V3JpdGVCeXRlKHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwZCwgMHgwMSk7CisJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwNCwgMHg3Zik7CisJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwZCwgMHgwMSk7CiAKLQlSRmJSRlRhYmxlRG93bmxvYWQocHJpdik7Ci0KKwl2bnRfcmZfdGFibGVfZG93bmxvYWQocHJpdik7CiAKIAkvKiBGaXggZm9yIFRYIFVTQiByZXNldHMgZnJvbSB2ZW5kb3JzIGRyaXZlciAqLwotCUNPTlRST0xuc1JlcXVlc3RJbihwcml2LCBNRVNTQUdFX1RZUEVfUkVBRCwgVVNCX1JFRzQsCisJdm50X2NvbnRyb2xfaW4ocHJpdiwgTUVTU0FHRV9UWVBFX1JFQUQsIFVTQl9SRUc0LAogCQlNRVNTQUdFX1JFUVVFU1RfTUVNLCBzaXplb2YoZGF0YSksICZkYXRhKTsKIAogCWRhdGEgfD0gMHgyOwogCi0JQ09OVFJPTG5zUmVxdWVzdE91dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIFVTQl9SRUc0LAorCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIFVTQl9SRUc0LAogCQlNRVNTQUdFX1JFUVVFU1RfTUVNLCBzaXplb2YoZGF0YSksICZkYXRhKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMTEwOSw0MSArMTA1OSw0MiBAQAogICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgIC0gRGV2aWNlIFN0cnVjdHVyZQorICoJcHJpdgktIERldmljZSBTdHJ1Y3R1cmUKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgQkJ2U2V0U2hvcnRTbG90VGltZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCit2b2lkIEJCdlNldFNob3J0U2xvdFRpbWUoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewotICAgIHU4IGJ5QkJWR0E9MDsKKwl1OCBiYl92Z2EgPSAwOwogCi0JaWYgKHBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lKQotICAgICAgICBwRGV2aWNlLT5ieUJCUnhDb25mICY9IDB4REY7Ly8xMTAxIDExMTEKKwlpZiAocHJpdi0+YlNob3J0U2xvdFRpbWUpCisJCXByaXYtPmJ5QkJSeENvbmYgJj0gMHhkZjsKIAllbHNlCi0gICAgICAgIHBEZXZpY2UtPmJ5QkJSeENvbmYgfD0gMHgyMDsvLzAwMTAgMDAwMAorCQlwcml2LT5ieUJCUnhDb25mIHw9IDB4MjA7CiAKLSAgICBDb250cm9sdlJlYWRCeXRlIChwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4RTcsICZieUJCVkdBKTsKLQlpZiAoYnlCQlZHQSA9PSBwRGV2aWNlLT5hYnlCQlZHQVswXSkKLSAgICAgICAgcERldmljZS0+YnlCQlJ4Q29uZiB8PSAweDIwOy8vMDAxMCAwMDAwCisJdm50X2NvbnRyb2xfaW5fdTgocHJpdiwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweGU3LCAmYmJfdmdhKTsKIAotICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwQSwgcERldmljZS0+YnlCQlJ4Q29uZik7CisJaWYgKGJiX3ZnYSA9PSBwcml2LT5hYnlCQlZHQVswXSkKKwkJcHJpdi0+YnlCQlJ4Q29uZiB8PSAweDIwOworCisJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwYSwgcHJpdi0+YnlCQlJ4Q29uZik7CiB9CiAKLXZvaWQgQkJ2U2V0VkdBR2Fpbk9mZnNldChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5RGF0YSkKK3ZvaWQgQkJ2U2V0VkdBR2Fpbk9mZnNldChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IGRhdGEpCiB7CiAKLSAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4RTcsIGJ5RGF0YSk7CisJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhFNywgZGF0YSk7CiAKLSAgICAvLyBwYXRjaCBmb3IgMzI1M0IwIEJhc2ViYW5kIHdpdGggQ2FyZGJ1cyBtb2R1bGUKLQlpZiAocERldmljZS0+YlNob3J0U2xvdFRpbWUpCi0JCXBEZXZpY2UtPmJ5QkJSeENvbmYgJj0gMHhERjsgLyogMTEwMSAxMTExICovCisJLyogcGF0Y2ggZm9yIDMyNTNCMCBCYXNlYmFuZCB3aXRoIENhcmRidXMgbW9kdWxlICovCisJaWYgKHByaXYtPmJTaG9ydFNsb3RUaW1lKQorCQlwcml2LT5ieUJCUnhDb25mICY9IDB4ZGY7IC8qIDExMDEgMTExMSAqLwogCWVsc2UKLQkJcERldmljZS0+YnlCQlJ4Q29uZiB8PSAweDIwOyAvKiAwMDEwIDAwMDAgKi8KKwkJcHJpdi0+YnlCQlJ4Q29uZiB8PSAweDIwOyAvKiAwMDEwIDAwMDAgKi8KIAotICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwQSwgcERldmljZS0+YnlCQlJ4Q29uZik7Ly9DUjEwCisJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwYSwgcHJpdi0+YnlCQlJ4Q29uZik7CiB9CiAKIC8qCkBAIC0xMTUxLDczNSArMTEwMiwyODggQEAKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgIC0gRGV2aWNlIFN0cnVjdHVyZQorICoJcHJpdgktIERldmljZSBTdHJ1Y3R1cmUKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgQkJ2U2V0RGVlcFNsZWVwKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKK3ZvaWQgQkJ2U2V0RGVlcFNsZWVwKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdikKIHsKLSAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4MGMsIDB4MTcpOy8vQ1IxMgotICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwRCwgMHhCOSk7Ly9DUjEzCisJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHgwYywgMHgxNyk7LyogQ1IxMiAqLworCXZudF9jb250cm9sX291dF91OChwcml2LCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4MGQsIDB4QjkpOy8qIENSMTMgKi8KIH0KIAotdm9pZCBCQnZFeGl0RGVlcFNsZWVwKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKK3ZvaWQgQkJ2RXhpdERlZXBTbGVlcChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7Ci0gICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweDBDLCAweDAwKTsvL0NSMTIKLSAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4MEQsIDB4MDEpOy8vQ1IxMworCXZudF9jb250cm9sX291dF91OChwcml2LCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4MGMsIDB4MDApOy8qIENSMTIgKi8KKwl2bnRfY29udHJvbF9vdXRfdTgocHJpdiwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweDBkLCAweDAxKTsvKiBDUjEzICovCiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNfdWxHZXRMb3dTUTMoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKQordm9pZCBCQnZVcGRhdGVQcmVFRFRocmVzaG9sZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIGludCBzY2FubmluZykKIHsKLQlpbnQgaWk7Ci0JdW5zaWduZWQgbG9uZyB1bFNRMyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB1bE1heFBhY2tldDsKKwl1OCBjcl8yMDEgPSAweDAsIGNyXzIwNiA9IDB4MDsKKwl1OCBlZF9pbnggPSBwcml2LT5ieUJCUHJlRURJbmRleDsKIAotICAgIHVsTWF4UGFja2V0ID0gcERldmljZS0+YXVsUGt0TnVtW1JBVEVfNTRNXTsKLQlpZiAocERldmljZS0+YXVsUGt0TnVtW1JBVEVfNTRNXSAhPSAwKQotICAgICAgICB1bFNRMyA9IHBEZXZpY2UtPmF1bFNRM1ZhbFtSQVRFXzU0TV0gLyBwRGV2aWNlLT5hdWxQa3ROdW1bUkFURV81NE1dOworCXN3aXRjaCAocHJpdi0+YnlSRlR5cGUpIHsKKwljYXNlIFJGX0FMMjIzMDoKKwljYXNlIFJGX0FMMjIzMFM6CisJY2FzZSBSRl9BSVJPSEE3MjMwOgorCQlpZiAoc2Nhbm5pbmcpIHsgLyogTWF4IHNlbnNpdGl2aXR5ICovCisJCQllZF9pbnggPSAwOworCQkJY3JfMjA2ID0gMHgzMDsKKwkJCWJyZWFrOworCQl9CiAKLQlmb3IgKGlpID0gUkFURV80OE07IGlpID49IFJBVEVfNk07IGlpLS0pCi0JCWlmIChwRGV2aWNlLT5hdWxQa3ROdW1baWldID4gdWxNYXhQYWNrZXQpIHsKLSAgICAgICAgICAgIHVsTWF4UGFja2V0ID0gcERldmljZS0+YXVsUGt0TnVtW2lpXTsKLSAgICAgICAgICAgIHVsU1EzID0gcERldmljZS0+YXVsU1EzVmFsW2lpXSAvIHBEZXZpY2UtPmF1bFBrdE51bVtpaV07Ci0gICAgICAgIH0KKwkJaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNDUpIHsKKwkJCWVkX2lueCA9IDIwOworCQkJY3JfMjAxID0gMHhmZjsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDQ2KSB7CisJCQllZF9pbnggPSAxOTsKKwkJCWNyXzIwMSA9IDB4MWE7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA0NykgeworCQkJZWRfaW54ID0gMTg7CisJCQljcl8yMDEgPSAweDE1OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNDkpIHsKKwkJCWVkX2lueCA9IDE3OworCQkJY3JfMjAxID0gMHhlOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTEpIHsKKwkJCWVkX2lueCA9IDE2OworCQkJY3JfMjAxID0gMHg5OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTMpIHsKKwkJCWVkX2lueCA9IDE1OworCQkJY3JfMjAxID0gMHg2OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTUpIHsKKwkJCWVkX2lueCA9IDE0OworCQkJY3JfMjAxID0gMHgzOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTYpIHsKKwkJCWVkX2lueCA9IDEzOworCQkJY3JfMjAxID0gMHgyOworCQkJY3JfMjA2ID0gMHhhMDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDU3KSB7CisJCQllZF9pbnggPSAxMjsKKwkJCWNyXzIwMSA9IDB4MjsKKwkJCWNyXzIwNiA9IDB4MjA7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA1OCkgeworCQkJZWRfaW54ID0gMTE7CisJCQljcl8yMDEgPSAweDE7CisJCQljcl8yMDYgPSAweGEwOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTkpIHsKKwkJCWVkX2lueCA9IDEwOworCQkJY3JfMjAxID0gMHgxOworCQkJY3JfMjA2ID0gMHg1NDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYwKSB7CisJCQllZF9pbnggPSA5OworCQkJY3JfMjAxID0gMHgxOworCQkJY3JfMjA2ID0gMHgxODsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYxKSB7CisJCQllZF9pbnggPSA4OworCQkJY3JfMjA2ID0gMHhlMzsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYyKSB7CisJCQllZF9pbnggPSA3OworCQkJY3JfMjA2ID0gMHhiOTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYzKSB7CisJCQllZF9pbnggPSA2OworCQkJY3JfMjA2ID0gMHg5MzsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY0KSB7CisJCQllZF9pbnggPSA1OworCQkJY3JfMjA2ID0gMHg3OTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY1KSB7CisJCQllZF9pbnggPSA0OworCQkJY3JfMjA2ID0gMHg2MjsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY2KSB7CisJCQllZF9pbnggPSAzOworCQkJY3JfMjA2ID0gMHg1MTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY3KSB7CisJCQllZF9pbnggPSAyOworCQkJY3JfMjA2ID0gMHg0MzsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY4KSB7CisJCQllZF9pbnggPSAxOworCQkJY3JfMjA2ID0gMHgzNjsKKwkJfSBlbHNlIHsKKwkJCWVkX2lueCA9IDA7CisJCQljcl8yMDYgPSAweDMwOworCQl9CisJCWJyZWFrOwogCi0gICAgcmV0dXJuIHVsU1EzOwotfQorCWNhc2UgUkZfVlQzMjI2OgorCWNhc2UgUkZfVlQzMjI2RDA6CisJCWlmIChzY2FubmluZykJeyAvKiBNYXggc2Vuc2l0aXZpdHkgKi8KKwkJCWVkX2lueCA9IDA7CisJCQljcl8yMDYgPSAweDI0OworCQkJYnJlYWs7CisJCX0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc191bEdldFJhdGlvKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKLXsKLQlpbnQgaWksIGpqOwotCXVuc2lnbmVkIGxvbmcgdWxSYXRpbyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB1bE1heFBhY2tldDsKLQl1bnNpZ25lZCBsb25nIHVsUGFja2V0TnVtOworCQlpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA0MSkgeworCQkJZWRfaW54ID0gMjI7CisJCQljcl8yMDEgPSAweGZmOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNDIpIHsKKwkJCWVkX2lueCA9IDIxOworCQkJY3JfMjAxID0gMHgzNjsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDQzKSB7CisJCQllZF9pbnggPSAyMDsKKwkJCWNyXzIwMSA9IDB4MjY7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA0NSkgeworCQkJZWRfaW54ID0gMTk7CisJCQljcl8yMDEgPSAweDE4OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNDcpIHsKKwkJCWVkX2lueCA9IDE4OworCQkJY3JfMjAxID0gMHgxMTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDQ5KSB7CisJCQllZF9pbnggPSAxNzsKKwkJCWNyXzIwMSA9IDB4YTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDUxKSB7CisJCQllZF9pbnggPSAxNjsKKwkJCWNyXzIwMSA9IDB4NzsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDUzKSB7CisJCQllZF9pbnggPSAxNTsKKwkJCWNyXzIwMSA9IDB4NDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDU1KSB7CisJCQllZF9pbnggPSAxNDsKKwkJCWNyXzIwMSA9IDB4MjsKKwkJCWNyXzIwNiA9IDB4YzA7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA1NikgeworCQkJZWRfaW54ID0gMTM7CisJCQljcl8yMDEgPSAweDI7CisJCQljcl8yMDYgPSAweDMwOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTcpIHsKKwkJCWVkX2lueCA9IDEyOworCQkJY3JfMjAxID0gMHgxOworCQkJY3JfMjA2ID0gMHhiMDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDU4KSB7CisJCQllZF9pbnggPSAxMTsKKwkJCWNyXzIwMSA9IDB4MTsKKwkJCWNyXzIwNiA9IDB4NzA7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA1OSkgeworCQkJZWRfaW54ID0gMTA7CisJCQljcl8yMDEgPSAweDE7CisJCQljcl8yMDYgPSAweDMwOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjApIHsKKwkJCWVkX2lueCA9IDk7CisJCQljcl8yMDYgPSAweGVhOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjEpIHsKKwkJCWVkX2lueCA9IDg7CisJCQljcl8yMDYgPSAweGMwOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjIpIHsKKwkJCWVkX2lueCA9IDc7CisJCQljcl8yMDYgPSAweDljOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjMpIHsKKwkJCWVkX2lueCA9IDY7CisJCQljcl8yMDYgPSAweDgwOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjQpIHsKKwkJCWVkX2lueCA9IDU7CisJCQljcl8yMDYgPSAweDY4OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjUpIHsKKwkJCWVkX2lueCA9IDQ7CisJCQljcl8yMDYgPSAweDUyOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjYpIHsKKwkJCWVkX2lueCA9IDM7CisJCQljcl8yMDYgPSAweDQzOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjcpIHsKKwkJCWVkX2lueCA9IDI7CisJCQljcl8yMDYgPSAweDM2OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNjgpIHsKKwkJCWVkX2lueCA9IDE7CisJCQljcl8yMDYgPSAweDJkOworCQl9IGVsc2UgeworCQkJZWRfaW54ID0gMDsKKwkJCWNyXzIwNiA9IDB4MjQ7CisJCX0KKwkJYnJlYWs7CiAKLSAgICAvL1RoaXMgaXMgYSB0aG91c2FuZC1yYXRpbwotICAgIHVsTWF4UGFja2V0ID0gcERldmljZS0+YXVsUGt0TnVtW1JBVEVfNTRNXTsKLSAgICBpZiAoIHBEZXZpY2UtPmF1bFBrdE51bVtSQVRFXzU0TV0gIT0gMCApIHsKLSAgICAgICAgdWxQYWNrZXROdW0gPSBwRGV2aWNlLT5hdWxQa3ROdW1bUkFURV81NE1dOwotICAgICAgICB1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotICAgICAgICB1bFJhdGlvICs9IFRPUF9SQVRFXzU0TTsKLSAgICB9Ci0JZm9yIChpaSA9IFJBVEVfNDhNOyBpaSA+PSBSQVRFXzFNOyBpaS0tKQotICAgICAgICBpZiAoIHBEZXZpY2UtPmF1bFBrdE51bVtpaV0gPiB1bE1heFBhY2tldCApIHsKLSAgICAgICAgICAgIHVsUGFja2V0TnVtID0gMDsKLSAgICAgICAgICAgIGZvciAoIGpqPVJBVEVfNTRNO2pqPj1paTtqai0tKQotICAgICAgICAgICAgICAgIHVsUGFja2V0TnVtICs9IHBEZXZpY2UtPmF1bFBrdE51bVtqal07Ci0gICAgICAgICAgICB1bFJhdGlvID0gKHVsUGFja2V0TnVtICogMTAwMCAvIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQpOwotICAgICAgICAgICAgdWxSYXRpbyArPSBUT1BfUkFURV80OE07Ci0gICAgICAgICAgICB1bE1heFBhY2tldCA9IHBEZXZpY2UtPmF1bFBrdE51bVtpaV07Ci0gICAgICAgIH0KKwljYXNlIFJGX1ZUMzM0MkEwOgorCQlpZiAoc2Nhbm5pbmcpIHsgLyogbmVlZCBNYXggc2Vuc2l0aXZpdHkgKi8KKwkJCWVkX2lueCA9IDA7CisJCQljcl8yMDYgPSAweDM4OworCQkJYnJlYWs7CisJCX0KIAotICAgIHJldHVybiB1bFJhdGlvOwotfQorCQlpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA0MSkgeworCQkJZWRfaW54ID0gMjA7CisJCQljcl8yMDEgPSAweGZmOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNDIpIHsKKwkJCWVkX2lueCA9IDE5OworCQkJY3JfMjAxID0gMHgzNjsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDQzKSB7CisJCQllZF9pbnggPSAxODsKKwkJCWNyXzIwMSA9IDB4MjY7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA0NSkgeworCQkJZWRfaW54ID0gMTc7CisJCQljcl8yMDEgPSAweDE4OworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNDcpIHsKKwkJCWVkX2lueCA9IDE2OworCQkJY3JfMjAxID0gMHgxMTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDQ5KSB7CisJCQllZF9pbnggPSAxNTsKKwkJCWNyXzIwMSA9IDB4YTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDUxKSB7CisJCQllZF9pbnggPSAxNDsKKwkJCWNyXzIwMSA9IDB4NzsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDUzKSB7CisJCQllZF9pbnggPSAxMzsKKwkJCWNyXzIwMSA9IDB4NDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDU1KSB7CisJCQllZF9pbnggPSAxMjsKKwkJCWNyXzIwMSA9IDB4MjsKKwkJCWNyXzIwNiA9IDB4YzA7CisJCX0gZWxzZSBpZiAocHJpdi0+YnlCQlByZUVEUlNTSSA8PSA1NikgeworCQkJZWRfaW54ID0gMTE7CisJCQljcl8yMDEgPSAweDI7CisJCQljcl8yMDYgPSAweDMwOworCQl9IGVsc2UgaWYgKHByaXYtPmJ5QkJQcmVFRFJTU0kgPD0gNTcpIHsKKwkJCWVkX2lueCA9IDEwOworCQkJY3JfMjAxID0gMHgxOworCQkJY3JfMjA2ID0gMHhiMDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDU4KSB7CisJCQllZF9pbnggPSA5OworCQkJY3JfMjAxID0gMHgxOworCQkJY3JfMjA2ID0gMHg3MDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDU5KSB7CisJCQllZF9pbnggPSA4OworCQkJY3JfMjAxID0gMHgxOworCQkJY3JfMjA2ID0gMHgzMDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYwKSB7CisJCQllZF9pbnggPSA3OworCQkJY3JfMjA2ID0gMHhlYTsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYxKSB7CisJCQllZF9pbnggPSA2OworCQkJY3JfMjA2ID0gMHhjMDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYyKSB7CisJCQllZF9pbnggPSA1OworCQkJY3JfMjA2ID0gMHg5YzsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDYzKSB7CisJCQllZF9pbnggPSA0OworCQkJY3JfMjA2ID0gMHg4MDsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY0KSB7CisJCQllZF9pbnggPSAzOworCQkJY3JfMjA2ID0gMHg2ODsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY1KSB7CisJCQllZF9pbnggPSAyOworCQkJY3JfMjA2ID0gMHg1MjsKKwkJfSBlbHNlIGlmIChwcml2LT5ieUJCUHJlRURSU1NJIDw9IDY2KSB7CisJCQllZF9pbnggPSAxOworCQkJY3JfMjA2ID0gMHg0MzsKKwkJfSBlbHNlIHsKKwkJCWVkX2lueCA9IDA7CisJCQljcl8yMDYgPSAweDM4OworCQl9CisJCWJyZWFrOwogCi1zdGF0aWMgdm9pZCBzX3ZDbGVhclNRM1ZhbHVlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKLXsKLSAgICBpbnQgaWk7Ci0gICAgcERldmljZS0+dURpdmVyc2l0eUNudCA9IDA7CisJfQogCi0gICAgZm9yICggaWk9UkFURV8xTTtpaTxNQVhfUkFURTtpaSsrKSB7Ci0gICAgICAgIHBEZXZpY2UtPmF1bFBrdE51bVtpaV0gPSAwOwotICAgICAgICBwRGV2aWNlLT5hdWxTUTNWYWxbaWldID0gMDsKLSAgICB9Ci19CisJaWYgKGVkX2lueCA9PSBwcml2LT5ieUJCUHJlRURJbmRleCAmJiAhc2Nhbm5pbmcpCisJCXJldHVybjsKIAotLyoKLSAqIERlc2NyaXB0aW9uOiBBbnRlbm5hIERpdmVyc2l0eQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgICAgICAgLSBEZXZpY2UgU3RydWN0dXJlCi0gKiAgICAgIGJ5UlNSICAgICAgICAgICAgLSBSU1IgZnJvbSByZWNlaXZlZCBwYWNrZXQKLSAqICAgICAgYnlTUTMgICAgICAgICAgICAtIFNRMyB2YWx1ZSBmcm9tIHJlY2VpdmVkIHBhY2tldAotICogIE91dDoKLSAqICAgICAgbm9uZQotICoKLSAqIFJldHVybiBWYWx1ZTogbm9uZQotICoKLSAqLworCXByaXYtPmJ5QkJQcmVFREluZGV4ID0gZWRfaW54OwogCi12b2lkIEJCdkFudGVubmFEaXZlcnNpdHkoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCXU4IGJ5UnhSYXRlLCB1OCBieVNRMykKLXsKKwlkZXZfZGJnKCZwcml2LT51c2ItPmRldiwgIiVzIGJ5QkJQcmVFRFJTU0kgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBwcml2LT5ieUJCUHJlRURSU1NJKTsKIAotICAgIHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQrKzsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBEZXZpY2UtPnVEaXZlcnNpdHlDbnQgPSAlZFxuIiwgKGludClwRGV2aWNlLT51RGl2ZXJzaXR5Q250KTsKKwlpZiAoIWNyXzIwMSAmJiAhY3JfMjA2KQorCQlyZXR1cm47CiAKLSAgICBpZiAoYnlSeFJhdGUgPT0gMikgewotICAgICAgICBwRGV2aWNlLT5hdWxQa3ROdW1bUkFURV8xTV0rKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYnlSeFJhdGU9PTQpIHsKLSAgICAgICAgcERldmljZS0+YXVsUGt0TnVtW1JBVEVfMk1dKys7Ci0gICAgfQotICAgIGVsc2UgaWYgKGJ5UnhSYXRlPT0xMSkgewotICAgICAgICBwRGV2aWNlLT5hdWxQa3ROdW1bUkFURV81TV0rKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYnlSeFJhdGU9PTIyKSB7Ci0gICAgICAgIHBEZXZpY2UtPmF1bFBrdE51bVtSQVRFXzExTV0rKzsKLSAgICB9Ci0gICAgZWxzZSBpZihieVJ4UmF0ZT09MTIpewotICAgICAgICBwRGV2aWNlLT5hdWxQa3ROdW1bUkFURV82TV0rKzsKLSAgICAgICAgcERldmljZS0+YXVsU1EzVmFsW1JBVEVfNk1dICs9IGJ5U1EzOwotICAgIH0KLSAgICBlbHNlIGlmKGJ5UnhSYXRlPT0xOCl7Ci0gICAgICAgIHBEZXZpY2UtPmF1bFBrdE51bVtSQVRFXzlNXSsrOwotICAgICAgICBwRGV2aWNlLT5hdWxTUTNWYWxbUkFURV85TV0gKz0gYnlTUTM7Ci0gICAgfQotICAgIGVsc2UgaWYoYnlSeFJhdGU9PTI0KXsKLSAgICAgICAgcERldmljZS0+YXVsUGt0TnVtW1JBVEVfMTJNXSsrOwotICAgICAgICBwRGV2aWNlLT5hdWxTUTNWYWxbUkFURV8xMk1dICs9IGJ5U1EzOwotICAgIH0KLSAgICBlbHNlIGlmKGJ5UnhSYXRlPT0zNil7Ci0gICAgICAgIHBEZXZpY2UtPmF1bFBrdE51bVtSQVRFXzE4TV0rKzsKLSAgICAgICAgcERldmljZS0+YXVsU1EzVmFsW1JBVEVfMThNXSArPSBieVNRMzsKLSAgICB9Ci0gICAgZWxzZSBpZihieVJ4UmF0ZT09NDgpewotICAgICAgICBwRGV2aWNlLT5hdWxQa3ROdW1bUkFURV8yNE1dKys7Ci0gICAgICAgIHBEZXZpY2UtPmF1bFNRM1ZhbFtSQVRFXzI0TV0gKz0gYnlTUTM7Ci0gICAgfQotICAgIGVsc2UgaWYoYnlSeFJhdGU9PTcyKXsKLSAgICAgICAgcERldmljZS0+YXVsUGt0TnVtW1JBVEVfMzZNXSsrOwotICAgICAgICBwRGV2aWNlLT5hdWxTUTNWYWxbUkFURV8zNk1dICs9IGJ5U1EzOwotICAgIH0KLSAgICBlbHNlIGlmKGJ5UnhSYXRlPT05Nil7Ci0gICAgICAgIHBEZXZpY2UtPmF1bFBrdE51bVtSQVRFXzQ4TV0rKzsKLSAgICAgICAgcERldmljZS0+YXVsU1EzVmFsW1JBVEVfNDhNXSArPSBieVNRMzsKLSAgICB9Ci0gICAgZWxzZSBpZihieVJ4UmF0ZT09MTA4KXsKLSAgICAgICAgcERldmljZS0+YXVsUGt0TnVtW1JBVEVfNTRNXSsrOwotICAgICAgICBwRGV2aWNlLT5hdWxTUTNWYWxbUkFURV81NE1dICs9IGJ5U1EzOwotICAgIH0KLQotICAgIGlmIChwRGV2aWNlLT5ieUFudGVubmFTdGF0ZSA9PSAwKSB7Ci0KLSAgICAgICAgaWYgKHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQgPiBwRGV2aWNlLT51bERpdmVyc2l0eU5WYWx1ZSkgewotICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ1bERpdmVyc2l0eU5WYWx1ZT1bJWRdLDU0TS1bJWRdXG4iLChpbnQpcERldmljZS0+dWxEaXZlcnNpdHlOVmFsdWUsIChpbnQpcERldmljZS0+YXVsUGt0TnVtW1JBVEVfNTRNXSk7Ci0KLSAgICAgICAgICAgIHBEZXZpY2UtPnVsU1EzX1N0YXRlMCA9IHNfdWxHZXRMb3dTUTMocERldmljZSk7Ci0gICAgICAgICAgICBwRGV2aWNlLT51bFJhdGlvX1N0YXRlMCA9IHNfdWxHZXRSYXRpbyhwRGV2aWNlKTsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU1EzX1N0YXRlMCwgU1EzPSBbJTA4eF0gcmF0ZSA9IFslMDh4XVxuIiwoaW50KXBEZXZpY2UtPnVsU1EzX1N0YXRlMCwoaW50KXBEZXZpY2UtPnVsUmF0aW9fU3RhdGUwKTsKLQotICAgICAgICAgICAgaWYgKCAoKHBEZXZpY2UtPmF1bFBrdE51bVtSQVRFXzU0TV0gPCBwRGV2aWNlLT51bERpdmVyc2l0eU5WYWx1ZS8yKSAmJgotICAgICAgICAgICAgICAgICAgKHBEZXZpY2UtPnVsU1EzX1N0YXRlMCA+IHBEZXZpY2UtPnVsU1EzVEgpICkgfHwKLSAgICAgICAgICAgICAgICAgKHBEZXZpY2UtPnVsU1EzX1N0YXRlMCA9PSAwICkgKSAgewotCi0gICAgICAgICAgICAgICAgaWYgKCBwRGV2aWNlLT5ieVRNYXggPT0gMCApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotCQliU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsCi0JCQkJIFdMQU5fQ01EX0NIQU5HRV9BTlRFTk5BLAotCQkJCSBOVUxMKTsKLQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QW50ZW5uYVN0YXRlID0gMTsKLQotICAgICAgICAgICAgICAgIGRlbF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4Myk7Ci0gICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgyKTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgxLmV4cGlyZXMgPSAgUlVOX0FUKHBEZXZpY2UtPmJ5VE1heCAqIEhaKTsKLSAgICAgICAgICAgICAgICBhZGRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDEpOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZXhwaXJlcyA9ICBSVU5fQVQocERldmljZS0+YnlUTWF4MyAqIEhaKTsKLSAgICAgICAgICAgICAgICBhZGRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc192Q2xlYXJTUTNWYWx1ZShwRGV2aWNlKTsKLQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsgLy9ieUFudGVubmFTdGF0ZSA9PSAxCi0KLSAgICAgICAgaWYgKHBEZXZpY2UtPnVEaXZlcnNpdHlDbnQgPiBwRGV2aWNlLT51bERpdmVyc2l0eU1WYWx1ZSkgewotCi0gICAgICAgICAgICBkZWxfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDEpOwotICAgICAgICAgICAgcERldmljZS0+dWxTUTNfU3RhdGUxID0gc191bEdldExvd1NRMyhwRGV2aWNlKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPnVsUmF0aW9fU3RhdGUxID0gc191bEdldFJhdGlvKHBEZXZpY2UpOwotICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJTUTNfU3RhdGUxLCByYXRlMCA9ICUwOHgscmF0ZTEgPSAlMDh4XG4iLChpbnQpcERldmljZS0+dWxSYXRpb19TdGF0ZTAsKGludClwRGV2aWNlLT51bFJhdGlvX1N0YXRlMSk7Ci0KLSAgICAgICAgICAgIGlmICggKChwRGV2aWNlLT51bFNRM19TdGF0ZTEgPT0gMCkgJiYgKHBEZXZpY2UtPnVsU1EzX1N0YXRlMCAhPSAwKSkgfHwKLSAgICAgICAgICAgICAgICAgKChwRGV2aWNlLT51bFNRM19TdGF0ZTEgPT0gMCkgJiYgKHBEZXZpY2UtPnVsU1EzX1N0YXRlMCA9PSAwKSAmJiAocERldmljZS0+dWxSYXRpb19TdGF0ZTEgPCBwRGV2aWNlLT51bFJhdGlvX1N0YXRlMCkpIHx8Ci0gICAgICAgICAgICAgICAgICgocERldmljZS0+dWxTUTNfU3RhdGUxICE9IDApICYmIChwRGV2aWNlLT51bFNRM19TdGF0ZTAgIT0gMCkgJiYgKHBEZXZpY2UtPnVsU1EzX1N0YXRlMCA8IHBEZXZpY2UtPnVsU1EzX1N0YXRlMSkpCi0gICAgICAgICAgICAgICApIHsKLQotCQliU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsCi0JCQkJIFdMQU5fQ01EX0NIQU5HRV9BTlRFTk5BLAotCQkJCSBOVUxMKTsKLQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZXhwaXJlcyA9ICBSVU5fQVQocERldmljZS0+YnlUTWF4MyAqIEhaKTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgyLmV4cGlyZXMgPSAgUlVOX0FUKHBEZXZpY2UtPmJ5VE1heDIgKiBIWik7Ci0gICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgzKTsKLSAgICAgICAgICAgICAgICBhZGRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDIpOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwRGV2aWNlLT5ieUFudGVubmFTdGF0ZSA9IDA7Ci0gICAgICAgICAgICBzX3ZDbGVhclNRM1ZhbHVlKHBEZXZpY2UpOwotICAgICAgICB9Ci0gICAgfSAvL2J5QW50ZW5uYVN0YXRlCi19Ci0KLS8qKwotICoKLSAqIERlc2NyaXB0aW9uOgotICogIFRpbWVyIGZvciBTUTMgYW50ZW5uYSBkaXZlcnNpdHkKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwdlN5c1NwZWMxCi0gKiAgICAgIGhEZXZpY2VDb250ZXh0IC0gUG9pbnRlciB0byB0aGUgYWRhcHRlcgotICogICAgICBwdlN5c1NwZWMyCi0gKiAgICAgIHB2U3lzU3BlYzMKLSAqICBPdXQ6Ci0gKiAgICAgIG5vbmUKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IG5vbmUKLSAqCi0tKi8KLQotdm9pZCBUaW1lclNRM0NhbGxCYWNrKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKLXsKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iVGltZXJTUTNDYWxsQmFjay4uLiIpOwotICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCi0gICAgYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLCBXTEFOX0NNRF9DSEFOR0VfQU5URU5OQSwgTlVMTCk7Ci0gICAgcERldmljZS0+YnlBbnRlbm5hU3RhdGUgPSAwOwotICAgIHNfdkNsZWFyU1EzVmFsdWUocERldmljZSk7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4My5leHBpcmVzID0gIFJVTl9BVChwRGV2aWNlLT5ieVRNYXgzICogSFopOwotICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDIuZXhwaXJlcyA9ICBSVU5fQVQocERldmljZS0+YnlUTWF4MiAqIEhaKTsKLSAgICBhZGRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDMpOwotICAgIGFkZF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4Mik7Ci0KLSAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotfQotCi0vKisKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICBUaW1lciBmb3IgU1EzIGFudGVubmEgZGl2ZXJzaXR5Ci0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcHZTeXNTcGVjMQotICogICAgICBoRGV2aWNlQ29udGV4dCAtIFBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIKLSAqICAgICAgcHZTeXNTcGVjMgotICogICAgICBwdlN5c1NwZWMzCi0gKiAgT3V0OgotICogICAgICBub25lCi0gKgotICogUmV0dXJuIFZhbHVlOiBub25lCi0gKgotLSovCi0KLXZvaWQgVGltZXJTUTNUbWF4M0NhbGxCYWNrKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKLXsKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iVGltZXJTUTNUbWF4M0NhbGxCYWNrLi4uIik7Ci0gICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0KLSAgICBwRGV2aWNlLT51bFJhdGlvX1N0YXRlMCA9IHNfdWxHZXRSYXRpbyhwRGV2aWNlKTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlNRM19TdGF0ZTAgPSBbJTA4eF1cbiIsKGludClwRGV2aWNlLT51bFJhdGlvX1N0YXRlMCk7Ci0KLSAgICBzX3ZDbGVhclNRM1ZhbHVlKHBEZXZpY2UpOwotICAgIGlmICggcERldmljZS0+YnlUTWF4ID09IDAgKSB7Ci0gICAgICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZXhwaXJlcyA9ICBSVU5fQVQocERldmljZS0+YnlUTWF4MyAqIEhaKTsKLSAgICAgICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgzKTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwgV0xBTl9DTURfQ0hBTkdFX0FOVEVOTkEsIE5VTEwpOwotICAgIHBEZXZpY2UtPmJ5QW50ZW5uYVN0YXRlID0gMTsKLSAgICBkZWxfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDMpOwotICAgIGRlbF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4Mik7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4MS5leHBpcmVzID0gIFJVTl9BVChwRGV2aWNlLT5ieVRNYXggKiBIWik7Ci0gICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgxKTsKLQotICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci19Ci0KLXZvaWQgQkJ2VXBkYXRlUHJlRURUaHJlc2hvbGQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCBpbnQgYlNjYW5uaW5nKQotewotCi0gICAgc3dpdGNoKHBEZXZpY2UtPmJ5UkZUeXBlKQotICAgIHsKLSAgICAgICAgY2FzZSBSRl9BTDIyMzA6Ci0gICAgICAgIGNhc2UgUkZfQUwyMjMwUzoKLSAgICAgICAgY2FzZSBSRl9BSVJPSEE3MjMwOgotICAgICAgICAgICAgLy9Sb2JlcnRZdToyMDA2MDYyNywgdXBkYXRlIG5ldyB0YWJsZQotCi0gICAgICAgICAgICBpZiggYlNjYW5uaW5nICkKLSAgICAgICAgICAgIHsgICAvLyBuZWVkIE1heCBzZW5zaXRpdml0eSAvL1JTU0kgLTY5LCAtNzAsLi4uLgotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDMwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjksIC03MCwgLTcxLC4uLlxuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDUpIHsgLy8gUlNTSSAwLCAtMSwtMiwuLi4uLTQ1Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMjApIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMjA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweEZGKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgwMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgMCwgLTEsLTIsLi4tNDVcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDYpICB7IC8vUlNTSSAtNDYKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxOSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxOTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MUEpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDZcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDcpICB7IC8vUlNTSSAtNDcKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxOCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxODsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MTUpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDdcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDkpICB7IC8vUlNTSSAtNDgsIC00OQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE3KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE3OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwRSk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC00OCwtNDlcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTEpICB7IC8vUlNTSSAtNTAsIC01MQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE2KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE2OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwOSk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01MCwtNTFcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTMpICB7IC8vUlNTSSAtNTIsIC01MwotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE1KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE1OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwNik7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01MiwtNTNcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTUpICB7IC8vUlNTSSAtNTQsIC01NQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE0KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE0OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMyk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01NCwtNTVcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTYpICB7IC8vUlNTSSAtNTYKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxMykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxMzsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDIpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEEwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTZcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTcpICB7IC8vUlNTSSAtNTcKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxMikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxMjsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDIpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDIwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTdcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTgpICB7IC8vUlNTSSAtNTgKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxMSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxMTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDEpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEEwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNThcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTkpICB7IC8vUlNTSSAtNTkKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxMDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDEpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDU0KTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTlcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjApICB7IC8vUlNTSSAtNjAKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSA5KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDk7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAxKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgxOCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTYwXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDYxKSAgeyAvL1JTU0kgLTYxCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gOCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSA4OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4RTMpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02MVxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2MikgIHsgLy9SU1NJIC02MgotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDcpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gNzsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEI5KTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjJcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjMpICB7IC8vUlNTSSAtNjMKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSA2KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDY7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg5Myk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTYzXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDY0KSAgeyAvL1JTU0kgLTY0Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gNSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSA1OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4NzkpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02NFxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2NSkgIHsgLy9SU1NJIC02NQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDQpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gNDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDYyKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjVcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjYpICB7IC8vUlNTSSAtNjYKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAzKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDM7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg1MSk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY2XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDY3KSAgeyAvL1JTU0kgLTY3Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAyOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4NDMpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02N1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2OCkgIHsgLy9SU1NJIC02OAotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDEpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDM2KTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjhcbiIpOwotICAgICAgICAgICAgfSBlbHNlIHsgLy9SU1NJIC02OSwgLTcwLC4uLi4KLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAwKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgzMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY5LCAtNzAsLi4uXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUkZfVlQzMjI2OgotICAgICAgICBjYXNlIFJGX1ZUMzIyNkQwOgotICAgICAgICAgICAgLy9Sb2JlcnRZdToyMDA2MDYyNywgdXBkYXRlIG5ldyB0YWJsZQotCi0gICAgICAgICAgICBpZiggYlNjYW5uaW5nICkKLSAgICAgICAgICAgIHsgICAvLyBuZWVkIE1heCBzZW5zaXRpdml0eSAgLy9SU1NJIC02OSwgLTcwLCAuLi4KLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgyNCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY5LCAtNzAsLi5cbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDQxKSB7IC8vIFJTU0kgMCwgLTEsLTIsLi4uLi00MQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDIyKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDIyOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHhGRik7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDAsIC0xLC0yLC4uLTQxXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDQyKSAgeyAvL1JTU0kgLTQyCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMjEpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMjE7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDM2KTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgwMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTQyXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDQzKSAgeyAvL1JTU0kgLTQzCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMjApIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMjA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDI2KTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgwMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTQzXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDQ1KSAgeyAvL1JTU0kgLTQ0LCAtNDUKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxOSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxOTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MTgpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDQsLTQ1XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDQ3KSAgeyAvL1JTU0kgLTQ2LCAtNDcKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxOCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxODsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MTEpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDYsLTQ3XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDQ5KSAgeyAvL1JTU0kgLTQ4LCAtNDkKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxNykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxNzsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MGEpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDgsLTQ5XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDUxKSAgeyAvL1JTU0kgLTUwLCAtNTEKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxNikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxNjsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDcpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTAsLTUxXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDUzKSAgeyAvL1JTU0kgLTUyLCAtNTMKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxNSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxNTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDQpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTIsLTUzXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDU1KSAgeyAvL1JTU0kgLTU0LCAtNTUKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxNCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxNDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDIpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEMwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTQsLTU1XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDU2KSAgeyAvL1JTU0kgLTU2Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMTMpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMTM7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAyKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgzMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTU2XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDU3KSAgeyAvL1JTU0kgLTU3Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMTIpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMTI7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAxKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHhCMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTU3XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDU4KSAgeyAvL1JTU0kgLTU4Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMTEpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMTE7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAxKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg3MCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTU4XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDU5KSAgeyAvL1JTU0kgLTU5Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMTApIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMTA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAxKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgzMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTU5XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDYwKSAgeyAvL1JTU0kgLTYwCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gOSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSA5OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4RUEpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02MFxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2MSkgIHsgLy9SU1NJIC02MQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDgpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gODsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEMwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjFcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjIpICB7IC8vUlNTSSAtNjIKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSA3KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDc7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg5Qyk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTYyXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDYzKSAgeyAvL1JTU0kgLTYzCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gNikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSA2OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4ODApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02M1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2NCkgIHsgLy9SU1NJIC02NAotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDUpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gNTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDY4KTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjRcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjUpICB7IC8vUlNTSSAtNjUKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSA0KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDQ7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg1Mik7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY1XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDY2KSAgeyAvL1JTU0kgLTY2Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAzOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4NDMpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02NlxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2NykgIHsgLy9SU1NJIC02NwotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDIpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMjsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDM2KTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjdcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjgpICB7IC8vUlNTSSAtNjgKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgyRCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY4XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7IC8vUlNTSSAtNjksIC03MCwgLi4uCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAwOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MjQpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02OSwgLTcwLC4uXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUkZfVlQzMzQyQTA6IC8vUm9iZXJ0WXU6MjAwNjA2MjcsIHRlc3RpbmcgdGFibGUKLSAgICAgICAgICAgIGlmKCBiU2Nhbm5pbmcgKQotICAgICAgICAgICAgeyAgIC8vIG5lZWQgTWF4IHNlbnNpdGl2aXR5ICAvL1JTU0kgLTY3LCAtNjgsIC4uLgotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDM4KTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjcsIC02OCwuLlxuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDEpIHsgLy8gUlNTSSAwLCAtMSwtMiwuLi4uLTQxCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMjApIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMjA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweEZGKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgwMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgMCwgLTEsLTIsLi4tNDFcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDIpICB7IC8vUlNTSSAtNDIKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxOSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxOTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MzYpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDJcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDMpICB7IC8vUlNTSSAtNDMKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxOCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxODsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MjYpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDAwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNDNcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDUpICB7IC8vUlNTSSAtNDQsIC00NQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE3KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE3OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgxOCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC00NCwtNDVcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDcpICB7IC8vUlNTSSAtNDYsIC00NwotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE2KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE2OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgxMSk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC00NiwtNDdcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNDkpICB7IC8vUlNTSSAtNDgsIC00OQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE1KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE1OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwYSk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC00OCwtNDlcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTEpICB7IC8vUlNTSSAtNTAsIC01MQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDE0KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDE0OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwNyk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01MCwtNTFcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTMpICB7IC8vUlNTSSAtNTIsIC01MwotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDEzKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDEzOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwNCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MDApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01MiwtNTNcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTUpICB7IC8vUlNTSSAtNTQsIC01NQotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDEyKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDEyOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMik7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4QzApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01NCwtNTVcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTYpICB7IC8vUlNTSSAtNTYKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxMSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxMTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDIpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDMwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTZcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTcpICB7IC8vUlNTSSAtNTcKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAxMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAxMDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDEpOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEIwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNTdcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNTgpICB7IC8vUlNTSSAtNTgKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSA5KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDk7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAxKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg3MCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTU4XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDU5KSAgeyAvL1JTU0kgLTU5Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gOCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSA4OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMSk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4MzApOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC01OVxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2MCkgIHsgLy9SU1NJIC02MAotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDcpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gNzsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweEVBKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjBcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjEpICB7IC8vUlNTSSAtNjEKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSA2KSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDY7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHhDMCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTYxXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDYyKSAgeyAvL1JTU0kgLTYyCi0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gNSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSA1OwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4OUMpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02MlxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2MykgIHsgLy9SU1NJIC02MwotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDQpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gNDsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDgwKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjNcbiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPD0gNjQpICB7IC8vUlNTSSAtNjQKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAzKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDM7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHg2OCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY0XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihwRGV2aWNlLT5ieUJCUHJlRURSU1NJIDw9IDY1KSAgeyAvL1JTU0kgLTY1Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlCQlByZUVESW5kZXggPT0gMikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVESW5kZXggPSAyOwotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDOSwgMHgwMCk7IC8vQ1IyMDEoMHhDOSkKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Q0UsIDB4NTIpOyAvL0NSMjA2KDB4Q0UpCi0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURSU1NJIC02NVxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocERldmljZS0+YnlCQlByZUVEUlNTSSA8PSA2NikgIHsgLy9SU1NJIC02NgotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID09IDEpIGJyZWFrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFREluZGV4ID0gMTsKLSAgICAgICAgICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4QzksIDB4MDApOyAvL0NSMjAxKDB4QzkpCi0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweENFLCAweDQzKTsgLy9DUjIwNigweENFKQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iICAgICAgICAgICAgcERldmljZS0+YnlCQlByZUVEUlNTSSAtNjZcbiIpOwotICAgICAgICAgICAgfSBlbHNlIHsgLy9SU1NJIC02NywgLTY4LCAuLi4KLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9PSAwKSBicmVhazsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJCUHJlRURJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEM5LCAweDAwKTsgLy9DUjIwMSgweEM5KQotICAgICAgICAgICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHhDRSwgMHgzOCk7IC8vQ1IyMDYoMHhDRSkKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgLTY3LCAtNjgsLi5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICB9Ci0KKwl2bnRfY29udHJvbF9vdXRfdTgocHJpdiwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweGM5LCBjcl8yMDEpOworCXZudF9jb250cm9sX291dF91OChwcml2LCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4Y2UsIGNyXzIwNik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaAppbmRleCA3OWZhZWRmNC4uMzA0NGQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaApAQCAtODgsMjMgKzg4LDExIEBACiAJX19sZTE2IGxlbjsKIH0gX19wYWNrZWQ7CiAKLXVuc2lnbmVkIGludAotQkJ1R2V0RnJhbWVUaW1lKAotICAgICB1OCBieVByZWFtYmxlVHlwZSwKLSAgICAgdTggYnlGcmVxVHlwZSwKLSAgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCi0gICAgIHUxNiB3UmF0ZQotICAgICk7Cit1bnNpZ25lZCBpbnQgQkJ1R2V0RnJhbWVUaW1lKHU4IHByZWFtYmxlX3R5cGUsIHU4IHBrdF90eXBlLAorCXVuc2lnbmVkIGludCBmcmFtZV9sZW5ndGgsIHUxNiB0eF9yYXRlKTsKIAotdm9pZCBCQnZDYWxjdWxhdGVQYXJhbWV0ZXIoc3RydWN0IHZudF9wcml2YXRlICosIHUzMiBjYkZyYW1lTGVuZ3RoLAotCXUxNiB3UmF0ZSwgdTggYnlQYWNrZXRUeXBlLCBzdHJ1Y3Qgdm50X3BoeV9maWVsZCAqKTsKLQotLyogdGltZXIgZm9yIGFudGVubmEgZGl2ZXJzaXR5ICovCi0KLXZvaWQgVGltZXJTUTNDYWxsQmFjayhzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7Ci12b2lkIFRpbWVyU1EzVG1heDNDYWxsQmFjayhzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7Ci0KLXZvaWQgQkJ2QW50ZW5uYURpdmVyc2l0eShzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTggYnlSeFJhdGUsIHU4IGJ5U1EzKTsKK3ZvaWQgQkJ2Q2FsY3VsYXRlUGFyYW1ldGVyKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1MzIgZnJhbWVfbGVuZ3RoLAorCXUxNiB0eF9yYXRlLCB1OCBwa3RfdHlwZSwgc3RydWN0IHZudF9waHlfZmllbGQgKik7CiAKIHZvaWQgQkJ2U2V0U2hvcnRTbG90VGltZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7CiB2b2lkIEJCdlNldFZHQUdhaW5PZmZzZXQoc3RydWN0IHZudF9wcml2YXRlICosIHU4IGJ5RGF0YSk7CkBAIC0xMTIsNiArMTAwLDYgQEAKIGludCBCQmJWVDMxODRJbml0KHN0cnVjdCB2bnRfcHJpdmF0ZSAqKTsKIHZvaWQgQkJ2U2V0RGVlcFNsZWVwKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKTsKIHZvaWQgQkJ2RXhpdERlZXBTbGVlcChzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7Ci12b2lkIEJCdlVwZGF0ZVByZUVEVGhyZXNob2xkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCBpbnQgYlNjYW5uaW5nKTsKK3ZvaWQgQkJ2VXBkYXRlUHJlRURUaHJlc2hvbGQoc3RydWN0IHZudF9wcml2YXRlICosIGludCBzY2FubmluZyk7CiAKICNlbmRpZiAvKiBfX0JBU0VCQU5EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jCmluZGV4IDljNzhkYWIuLjhlOWNlOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYnNzZGIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmMKQEAgLTUzLDggKzUzLDcgQEAKICNpbmNsdWRlICJjYXJkLmgiCiAjaW5jbHVkZSAibWFjLmgiCiAjaW5jbHVkZSAid3BhMi5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKLSNpbmNsdWRlICJybmRpcy5oIgorI2luY2x1ZGUgInVzYnBpcGUuaCIKICNpbmNsdWRlICJpb3dwYS5oIgogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTQ1NiwxNiArNDU1LDE1IEBACiAJCX0KIAl9CiAKLQlpZiAocERldmljZS0+YlVwZGF0ZUJCVkdBKSB7Ci0JCS8qIE1vbml0b3IgaWYgUlNTSSBpcyB0b28gc3Ryb25nLiAqLwotCQlwQlNTTGlzdC0+YnlSU1NJU3RhdENudCA9IDA7Ci0JCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAodTgpIChwUnhQYWNrZXQtPnVSU1NJKSwKLQkJCSAgICAgJnBCU1NMaXN0LT5sZEJtTUFYKTsKLQkJcEJTU0xpc3QtPmxkQm1BdmVyYWdlWzBdID0gcEJTU0xpc3QtPmxkQm1NQVg7Ci0JCXBCU1NMaXN0LT5sZEJtQXZlclJhbmdlID0gcEJTU0xpc3QtPmxkQm1NQVg7Ci0JCWZvciAoaWkgPSAxOyBpaSA8IFJTU0lfU1RBVF9DT1VOVDsgaWkrKykKLQkJCXBCU1NMaXN0LT5sZEJtQXZlcmFnZVtpaV0gPSAwOwotCX0KKwkvKiBNb25pdG9yIGlmIFJTU0kgaXMgdG9vIHN0cm9uZy4gKi8KKwlwQlNTTGlzdC0+YnlSU1NJU3RhdENudCA9IDA7CisKKwl2bnRfcmZfcnNzaV90b19kYm0ocERldmljZSwgKHU4KXBSeFBhY2tldC0+dVJTU0ksICZwQlNTTGlzdC0+bGRCbU1BWCk7CisKKwlwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbMF0gPSBwQlNTTGlzdC0+bGRCbU1BWDsKKwlwQlNTTGlzdC0+bGRCbUF2ZXJSYW5nZSA9IHBCU1NMaXN0LT5sZEJtTUFYOworCWZvciAoaWkgPSAxOyBpaSA8IFJTU0lfU1RBVF9DT1VOVDsgaWkrKykKKwkJcEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSA9IDA7CiAKIAlwQlNTTGlzdC0+dUlFTGVuZ3RoID0gdUlFTGVuZ3RoOwogCWlmIChwQlNTTGlzdC0+dUlFTGVuZ3RoID4gV0xBTl9CRUFDT05fRlJfTUFYTEVOKQpAQCAtNTgxLDcgKzU3OSw3IEBACiAJfQogCiAJaWYgKHBSeFBhY2tldC0+dVJTU0kgIT0gMCkgewotCQlSRnZSU1NJVG9kQm0ocERldmljZSwgKHU4KSAocFJ4UGFja2V0LT51UlNTSSksICZsZEJtKTsKKwkJdm50X3JmX3Jzc2lfdG9fZGJtKHBEZXZpY2UsICh1OClwUnhQYWNrZXQtPnVSU1NJLCAmbGRCbSk7CiAJCS8qIE1vbml0b3IgaWYgUlNTSSBpcyB0b28gc3Ryb25nLiAqLwogCQlwQlNTTGlzdC0+YnlSU1NJU3RhdENudCsrOwogCQlwQlNTTGlzdC0+YnlSU1NJU3RhdENudCAlPSBSU1NJX1NUQVRfQ09VTlQ7CkBAIC03NzQsOCArNzcyLDggQEAKIHsKIAlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwogCi0JaWYgKCFwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkKLQkJbWVtc2V0KCZwTWdtdC0+c05vZGVEQlRhYmxlWzBdLCAwLCBzaXplb2YoS25vd25Ob2RlREIpKTsKKwltZW1zZXQoJnBNZ210LT5zTm9kZURCVGFibGVbMF0sIDAsIHNpemVvZihLbm93bk5vZGVEQikpOworCiAJbWVtc2V0KHBNZ210LT5zTm9kZURCVGFibGVbMF0uYWJ5TUFDQWRkciwgMHhmZiwgV0xBTl9BRERSX0xFTik7CiAJcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKIAlwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSA9IGZhbHNlOwpAQCAtODE4LDggKzgxNiw2IEBACiAJaWYgKHBEZXZpY2UtPkZsYWdzICYgZk1QX0RJU0NPTk5FQ1RFRCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0KIAlwRGV2aWNlLT51QXNzb2NDb3VudCA9IDA7CiAKIAkvKiBQb3dlciBTYXZpbmcgTW9kZSBUeCBCdXJzdCAqLwpAQCAtMTAwMSwxMCArOTk3LDggQEAKIAogCQlpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlKSB7IC8qIEFzc29jIHdpdGggQlNTICovCiAKLQkJCWlmIChwRGV2aWNlLT5iVXBkYXRlQkJWR0EpIHsKLQkJCQlzX3ZDaGVja1NlbnNpdGl2aXR5KHBEZXZpY2UpOwotCQkJCXNfdkNoZWNrUHJlRURUaHJlc2hvbGQocERldmljZSk7Ci0JCQl9CisJCQlzX3ZDaGVja1NlbnNpdGl2aXR5KHBEZXZpY2UpOworCQkJc192Q2hlY2tQcmVFRFRocmVzaG9sZChwRGV2aWNlKTsKIAogCQkJaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgPj0KIAkJCQkJCQkoTE9TVF9CRUFDT05fQ09VTlQvMikgJiYKQEAgLTEwMjIsMTAgKzEwMTYsMTAgQEAKIAkJCQlwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAJCQkJcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7Ci0JCQkJQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLAotCQkJCQkJIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCi0JCQkJCQkgTUFDX1JFR19QQVBFREVMQVksIExFRFNUU19TVFMsCi0JCQkJCQkgTEVEU1RTX1NMT1cpOworCisJCQkJdm50X21hY19zZXRfbGVkKHBEZXZpY2UsIExFRFNUU19TVFMsCisJCQkJCQkJCUxFRFNUU19TTE9XKTsKKwogCQkJCXBEZXZpY2UtPmJSb2FtaW5nID0gdHJ1ZTsKIAkJCQlwRGV2aWNlLT5iSXNSb2FtaW5nID0gZmFsc2U7CiAKQEAgLTExMjEsMTAgKzExMTUsOSBAQAogCQl9CiAJCWlmIChwTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0pPSU5URUQpIHsKIAotCQkJaWYgKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgewotCQkJCXNfdkNoZWNrU2Vuc2l0aXZpdHkocERldmljZSk7Ci0JCQkJc192Q2hlY2tQcmVFRFRocmVzaG9sZChwRGV2aWNlKTsKLQkJCX0KKwkJCXNfdkNoZWNrU2Vuc2l0aXZpdHkocERldmljZSk7CisJCQlzX3ZDaGVja1ByZUVEVGhyZXNob2xkKHBEZXZpY2UpOworCiAJCQlpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCA+PQogCQkJCQkJQURIT0NfTE9TVF9CRUFDT05fQ09VTlQpIHsKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9OT1RJQ0UsCkBAIC0xMTM0LDEwICsxMTI3LDggQEAKIAkJCQlwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfU1RBUlRFRDsKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAJCQkJcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7Ci0JCQkJQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLAotCQkJCQkJIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCi0JCQkJCQkgTUFDX1JFR19QQVBFREVMQVksIExFRFNUU19TVFMsCi0JCQkJCQkgTEVEU1RTX1NMT1cpOworCQkJCXZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLAorCQkJCQkJCQlMRURTVFNfU0xPVyk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMTU4LDggKzExNDksNiBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBEZXZpY2UtPnNlY29uZF9jYWxsYmFja193b3JrLCBIWik7CiB9CiAKQEAgLTE0MjksNyArMTQxOCw3IEBACiAJaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyAhPSB0cnVlKSB7CiAJCXBEZXZpY2UtPndzdGF0cy5xdWFsLnF1YWwgPSAwOwogCX0gZWxzZSB7Ci0JCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAodTgpIChwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CisJCXZudF9yZl9yc3NpX3RvX2RibShwRGV2aWNlLCAodTgpIChwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CiAJCWlmICgtbGRCbSA8IDUwKQogCQkJUnNzaVJhdGlvID0gNDAwMDsKIAkJZWxzZSBpZiAoLWxkQm0gPiA5MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKaW5kZXggMGQ4NzcyOC4uZDY2MmU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKQEAgLTU3LDExICs1Nyw3IEBACiAjaW5jbHVkZSAicmM0LmgiCiAjaW5jbHVkZSAiY291bnRyeS5oIgogI2luY2x1ZGUgImRhdGFyYXRlLmgiCi0jaW5jbHVkZSAicm5kaXMuaCIKLSNpbmNsdWRlICJjb250cm9sLmgiCi0KLS8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwotc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CisjaW5jbHVkZSAidXNicGlwZS5oIgogCiAvL2NvbnN0IHUxNiBjd1JYQkNOVFNGT2ZmW01BWF9SQVRFXSA9CiAvL3sxNywgMzQsIDk2LCAxOTIsIDM0LCAyMywgMTcsIDExLCA4LCA1LCA0LCAzfTsKQEAgLTk4LDI0ICs5NCwyNCBAQAogCS8qIFNldCBDaGFubmVsWzddID0gMCB0byB0ZWxsIEgvVyBjaGFubmVsIGlzIGNoYW5naW5nIG5vdy4gKi8KIAlNQUN2UmVnQml0c09mZihwcml2LCBNQUNfUkVHX0NIQU5ORUwsIDB4YjApOwogCi0JQ09OVFJPTG5zUmVxdWVzdE91dChwcml2LCBNRVNTQUdFX1RZUEVfU0VMRUNUX0NIQU5OTEUsCisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9TRUxFQ1RfQ0hBTk5MRSwKIAkJCQkJY29ubmVjdGlvbl9jaGFubmVsLCAwLCAwLCBOVUxMKTsKIAogCWlmIChwcml2LT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkgewogCQlwcml2LT5ieUN1clB3ciA9IDB4ZmY7Ci0JCVJGYlJhd1NldFBvd2VyKHByaXYsCisJCXZudF9yZl9zZXRfdHhwb3dlcihwcml2LAogCQkJcHJpdi0+YWJ5T0ZETUFQd3JUYmxbY29ubmVjdGlvbl9jaGFubmVsLTE1XSwgUkFURV81NE0pOwogCX0gZWxzZSBpZiAocHJpdi0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUcpIHsKIAkJcHJpdi0+YnlDdXJQd3IgPSAweGZmOwotCQlSRmJSYXdTZXRQb3dlcihwcml2LAorCQl2bnRfcmZfc2V0X3R4cG93ZXIocHJpdiwKIAkJCXByaXYtPmFieU9GRE1Qd3JUYmxbY29ubmVjdGlvbl9jaGFubmVsLTFdLCBSQVRFXzU0TSk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+YnlDdXJQd3IgPSAweGZmOwotCQlSRmJSYXdTZXRQb3dlcihwcml2LAorCQl2bnRfcmZfc2V0X3R4cG93ZXIocHJpdiwKIAkJCXByaXYtPmFieUNDS1B3clRibFtjb25uZWN0aW9uX2NoYW5uZWwtMV0sIFJBVEVfMU0pOwogCX0KIAotCUNvbnRyb2x2V3JpdGVCeXRlKHByaXYsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIE1BQ19SRUdfQ0hBTk5FTCwKKwl2bnRfY29udHJvbF9vdXRfdTgocHJpdiwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgTUFDX1JFR19DSEFOTkVMLAogCQkodTgpKGNvbm5lY3Rpb25fY2hhbm5lbHwweDgwKSk7CiB9CiAKQEAgLTEyNCwyMCArMTIwLDIwIEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgcERldmljZSAgICAgICAgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHNldAotICogICAgICB3UmF0ZUlkeCAgICAgICAgICAgIC0gUmVjZWl2aW5nIGRhdGEgcmF0ZQorICogICAgICBwcml2CQktIFRoZSBhZGFwdGVyIHRvIGJlIHNldAorICogICAgICByYXRlX2lkeAktIFJlY2VpdmluZyBkYXRhIHJhdGUKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCiAgKiBSZXR1cm4gVmFsdWU6IHJlc3BvbnNlIENvbnRyb2wgZnJhbWUgcmF0ZQogICoKICAqLwotc3RhdGljIHUxNiBzd0dldENDS0NvbnRyb2xSYXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTE2IHdSYXRlSWR4KQorc3RhdGljIHUxNiBzd0dldENDS0NvbnRyb2xSYXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTE2IHJhdGVfaWR4KQogewotCXUxNiB1aSA9IHdSYXRlSWR4OworCXUxNiB1aSA9IHJhdGVfaWR4OwogCiAJd2hpbGUgKHVpID4gUkFURV8xTSkgewotCQlpZiAocERldmljZS0+d0Jhc2ljUmF0ZSAmICgxIDw8IHVpKSkKKwkJaWYgKHByaXYtPndCYXNpY1JhdGUgJiAoMSA8PCB1aSkpCiAJCQlyZXR1cm4gdWk7CiAJCXVpLS07CiAJfQpAQCAtMTUwLDM5ICsxNDYsMzkgQEAKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgICAgIC0gVGhlIGFkYXB0ZXIgdG8gYmUgc2V0Ci0gKiAgICAgIHdSYXRlSWR4ICAgICAgICAgICAgLSBSZWNlaXZpbmcgZGF0YSByYXRlCisgKiAgICAgIHByaXYJCS0gVGhlIGFkYXB0ZXIgdG8gYmUgc2V0CisgKiAgICAgIHJhdGVfaWR4CS0gUmVjZWl2aW5nIGRhdGEgcmF0ZQogICogIE91dDoKICAqICAgICAgbm9uZQogICoKICAqIFJldHVybiBWYWx1ZTogcmVzcG9uc2UgQ29udHJvbCBmcmFtZSByYXRlCiAgKgogICovCi1zdGF0aWMgdTE2IHN3R2V0T0ZETUNvbnRyb2xSYXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTE2IHdSYXRlSWR4KQorc3RhdGljIHUxNiBzd0dldE9GRE1Db250cm9sUmF0ZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHUxNiByYXRlX2lkeCkKIHsKLQl1MTYgdWkgPSB3UmF0ZUlkeDsKKwl1MTYgdWkgPSByYXRlX2lkeDsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQkFTSUMgUkFURTogJVhcbiIsCi0JCXBEZXZpY2UtPndCYXNpY1JhdGUpOworCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiJXMgYmFzaWMgcmF0ZTogJWRcbiIsCisJCQkJCV9fZnVuY19fLCAgcHJpdi0+d0Jhc2ljUmF0ZSk7CiAKLQlpZiAoIUNBUkRiSXNPRkRNaW5CYXNpY1JhdGUocERldmljZSkpIHsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJInN3R2V0T0ZETUNvbnRyb2xSYXRlOihOTyBPRkRNKSAlZFxuIiwgd1JhdGVJZHgpOwotCQlpZiAod1JhdGVJZHggPiBSQVRFXzI0TSkKLQkJCXdSYXRlSWR4ID0gUkFURV8yNE07Ci0JCXJldHVybiB3UmF0ZUlkeDsKKwlpZiAoIUNBUkRiSXNPRkRNaW5CYXNpY1JhdGUocHJpdikpIHsKKwkJZGV2X2RiZygmcHJpdi0+dXNiLT5kZXYsICIlcyAoTk8gT0ZETSkgJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmF0ZV9pZHgpOworCQlpZiAocmF0ZV9pZHggPiBSQVRFXzI0TSkKKwkJCXJhdGVfaWR4ID0gUkFURV8yNE07CisJCXJldHVybiByYXRlX2lkeDsKIAl9CiAKIAl3aGlsZSAodWkgPiBSQVRFXzExTSkgewotCQlpZiAocERldmljZS0+d0Jhc2ljUmF0ZSAmICgxIDw8IHVpKSkgewotCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJCSJzd0dldE9GRE1Db250cm9sUmF0ZTogJWRcbiIsIHVpKTsKKwkJaWYgKHByaXYtPndCYXNpY1JhdGUgJiAoMSA8PCB1aSkpIHsKKwkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiJXMgcmF0ZTogJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHVpKTsKIAkJCXJldHVybiB1aTsKIAkJfQogCQl1aS0tOwogCX0KIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8ic3dHZXRPRkRNQ29udHJvbFJhdGU6IDZNXG4iKTsKKwlkZXZfZGJnKCZwcml2LT51c2ItPmRldiwgIiVzIGJhc2ljIHJhdGU6IDI0TVxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIFJBVEVfMjRNOwogfQpAQCAtMTkxLDExNCArMTg3LDk1IEBACiAgKiBEZXNjcmlwdGlvbjogQ2FsY3VsYXRlIFR4UmF0ZSBhbmQgUnN2VGltZSBmaWVsZHMgZm9yIFJTUElORiBpbiBPRkRNIG1vZGUuCiAgKgogICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgd1JhdGUgICAgICAgICAgIC0gVHggUmF0ZQotICogICAgICBieVBrdFR5cGUgICAgICAgLSBUeCBQYWNrZXQgdHlwZQotICogIE91dDoKLSAqICAgICAgcGJ5VHhSYXRlICAgICAgIC0gcG9pbnRlciB0byBSU1BJTkYgVHhSYXRlIGZpZWxkCi0gKiAgICAgIHBieVJzdlRpbWUgICAgICAtIHBvaW50ZXIgdG8gUlNQSU5GIFJzdlRpbWUgZmllbGQKKyAqIEluOgorICoJcmF0ZQktIFR4IFJhdGUKKyAqCWJiX3R5cGUJLSBUeCBQYWNrZXQgdHlwZQorICogT3V0OgorICoJdHhfcmF0ZQktIHBvaW50ZXIgdG8gUlNQSU5GIFR4UmF0ZSBmaWVsZAorICoJcnN2X3RpbWUtIHBvaW50ZXIgdG8gUlNQSU5GIFJzdlRpbWUgZmllbGQKICAqCiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXN0YXRpYyB2b2lkCi1DQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyICgKLSAgICAgIHUxNiB3UmF0ZSwKLSAgICAgIHU4IGJ5QkJUeXBlLAotICAgICB1OCAqIHBieVR4UmF0ZSwKLSAgICAgdTggKiBwYnlSc3ZUaW1lCi0gICAgKQorc3RhdGljIHZvaWQgQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlcih1MTYgcmF0ZSwgdTggYmJfdHlwZSwKKwkJCQkJdTggKnR4X3JhdGUsIHU4ICpyc3ZfdGltZSkKIHsKLSAgICBzd2l0Y2ggKHdSYXRlKSB7Ci0gICAgY2FzZSBSQVRFXzZNIDoKLSAgICAgICAgaWYgKGJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKSB7Ly81R0haCi0gICAgICAgICAgICAqcGJ5VHhSYXRlID0gMHg5QjsKLSAgICAgICAgICAgICpwYnlSc3ZUaW1lID0gMjQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAqcGJ5VHhSYXRlID0gMHg4QjsKLSAgICAgICAgICAgICpwYnlSc3ZUaW1lID0gMzA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFJBVEVfOU0gOgotICAgICAgICBpZiAoYnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEpIHsvLzVHSFoKLSAgICAgICAgICAgICpwYnlUeFJhdGUgPSAweDlGOwotICAgICAgICAgICAgKnBieVJzdlRpbWUgPSAxNjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICpwYnlUeFJhdGUgPSAweDhGOwotICAgICAgICAgICAgKnBieVJzdlRpbWUgPSAyMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgY2FzZSBSQVRFXzEyTSA6Ci0gICAgICAgIGlmIChieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkgey8vNUdIWgotICAgICAgICAgICAgKnBieVR4UmF0ZSA9IDB4OUE7Ci0gICAgICAgICAgICAqcGJ5UnN2VGltZSA9IDEyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgKnBieVR4UmF0ZSA9IDB4OEE7Ci0gICAgICAgICAgICAqcGJ5UnN2VGltZSA9IDE4OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICBjYXNlIFJBVEVfMThNIDoKLSAgICAgICAgaWYgKGJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKSB7Ly81R0haCi0gICAgICAgICAgICAqcGJ5VHhSYXRlID0gMHg5RTsKLSAgICAgICAgICAgICpwYnlSc3ZUaW1lID0gODsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICpwYnlUeFJhdGUgPSAweDhFOwotICAgICAgICAgICAgKnBieVJzdlRpbWUgPSAxNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUkFURV8zNk0gOgotICAgICAgICBpZiAoYnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEpIHsvLzVHSFoKLSAgICAgICAgICAgICpwYnlUeFJhdGUgPSAweDlEOwotICAgICAgICAgICAgKnBieVJzdlRpbWUgPSA0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgKnBieVR4UmF0ZSA9IDB4OEQ7Ci0gICAgICAgICAgICAqcGJ5UnN2VGltZSA9IDEwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSQVRFXzQ4TSA6Ci0gICAgICAgIGlmIChieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkgey8vNUdIWgotICAgICAgICAgICAgKnBieVR4UmF0ZSA9IDB4OTg7Ci0gICAgICAgICAgICAqcGJ5UnN2VGltZSA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAqcGJ5VHhSYXRlID0gMHg4ODsKLSAgICAgICAgICAgICpwYnlSc3ZUaW1lID0gMTA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJBVEVfNTRNIDoKLSAgICAgICAgaWYgKGJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKSB7Ly81R0haCi0gICAgICAgICAgICAqcGJ5VHhSYXRlID0gMHg5QzsKLSAgICAgICAgICAgICpwYnlSc3ZUaW1lID0gNDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICpwYnlUeFJhdGUgPSAweDhDOwotICAgICAgICAgICAgKnBieVJzdlRpbWUgPSAxMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUkFURV8yNE0gOgotICAgIGRlZmF1bHQgOgotICAgICAgICBpZiAoYnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEpIHsvLzVHSFoKLSAgICAgICAgICAgICpwYnlUeFJhdGUgPSAweDk5OwotICAgICAgICAgICAgKnBieVJzdlRpbWUgPSA4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgKnBieVR4UmF0ZSA9IDB4ODk7Ci0gICAgICAgICAgICAqcGJ5UnN2VGltZSA9IDE0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIFJBVEVfNk06CisJCWlmIChiYl90eXBlID09IEJCX1RZUEVfMTFBKSB7CisJCQkqdHhfcmF0ZSA9IDB4OWI7CisJCQkqcnN2X3RpbWUgPSAyNDsKKwkJfSBlbHNlIHsKKwkJCSp0eF9yYXRlID0gMHg4YjsKKwkJCSpyc3ZfdGltZSA9IDMwOworCQl9CisJCQlicmVhazsKKwljYXNlIFJBVEVfOU06CisJCWlmIChiYl90eXBlID09IEJCX1RZUEVfMTFBKSB7CisJCQkqdHhfcmF0ZSA9IDB4OWY7CisJCQkqcnN2X3RpbWUgPSAxNjsKKwkJfSBlbHNlIHsKKwkJCSp0eF9yYXRlID0gMHg4ZjsKKwkJCSpyc3ZfdGltZSA9IDIyOworCQl9CisJCWJyZWFrOworCWNhc2UgUkFURV8xMk06CisJCWlmIChiYl90eXBlID09IEJCX1RZUEVfMTFBKSB7CisJCQkqdHhfcmF0ZSA9IDB4OWE7CisJCQkqcnN2X3RpbWUgPSAxMjsKKwkJfSBlbHNlIHsKKwkJCSp0eF9yYXRlID0gMHg4YTsKKwkJCSpyc3ZfdGltZSA9IDE4OworCQl9CisJCWJyZWFrOworCWNhc2UgUkFURV8xOE06CisJCWlmIChiYl90eXBlID09IEJCX1RZUEVfMTFBKSB7CisJCQkqdHhfcmF0ZSA9IDB4OWU7CisJCQkqcnN2X3RpbWUgPSA4OworCQl9IGVsc2UgeworCQkJKnR4X3JhdGUgPSAweDhlOworCQkJKnJzdl90aW1lID0gMTQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSQVRFXzM2TToKKwkJaWYgKGJiX3R5cGUgPT0gQkJfVFlQRV8xMUEpIHsKKwkJCSp0eF9yYXRlID0gMHg5ZDsKKwkJCSpyc3ZfdGltZSA9IDQ7CisJCX0gZWxzZSB7CisJCQkqdHhfcmF0ZSA9IDB4OGQ7CisJCQkqcnN2X3RpbWUgPSAxMDsKKwkJfQorCQlicmVhazsKKwljYXNlIFJBVEVfNDhNOgorCQlpZiAoYmJfdHlwZSA9PSBCQl9UWVBFXzExQSkgeworCQkJKnR4X3JhdGUgPSAweDk4OworCQkJKnJzdl90aW1lID0gNDsKKwkJfSBlbHNlIHsKKwkJCSp0eF9yYXRlID0gMHg4ODsKKwkJCSpyc3ZfdGltZSA9IDEwOworCQl9CisJCWJyZWFrOworCWNhc2UgUkFURV81NE06CisJCWlmIChiYl90eXBlID09IEJCX1RZUEVfMTFBKSB7CisJCQkqdHhfcmF0ZSA9IDB4OWM7CisJCQkqcnN2X3RpbWUgPSA0OworCQl9IGVsc2UgeworCQkJKnR4X3JhdGUgPSAweDhjOworCQkJKnJzdl90aW1lID0gMTA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSQVRFXzI0TToKKwlkZWZhdWx0OgorCQlpZiAoYmJfdHlwZSA9PSBCQl9UWVBFXzExQSkgeworCQkJKnR4X3JhdGUgPSAweDk5OworCQkJKnJzdl90aW1lID0gODsKKwkJfSBlbHNlIHsKKwkJCSp0eF9yYXRlID0gMHg4OTsKKwkJCSpyc3ZfdGltZSA9IDE0OworCQl9CisJCWJyZWFrOworCX0KIH0KIAogLyoKQEAgLTMxMywxMTIgKzI5MCw5MSBAQAogICogUmV0dXJuIFZhbHVlOiBOb25lLgogICoKICAqLwotdm9pZCBDQVJEdlNldFJTUElORihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5QkJUeXBlKQorCit2b2lkIENBUkR2U2V0UlNQSU5GKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTggYmJfdHlwZSkKIHsKIAlzdHJ1Y3Qgdm50X3BoeV9maWVsZCBwaHlbNF07Ci0JdTggYWJ5VHhSYXRlWzldID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OyAvKiBGb3IgT0ZETSAqLwotCXU4IGFieVJzdlRpbWVbOV0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07Ci0JdTggYWJ5RGF0YVszNF07CisJdTggdHhfcmF0ZVs5XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsgLyogRm9yIE9GRE0gKi8KKwl1OCByc3ZfdGltZVs5XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKwl1OCBkYXRhWzM0XTsKIAlpbnQgaTsKIAotICAgIC8vUlNQSU5GX2JfMQotCUJCdkNhbGN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCAxNCwKLQkJc3dHZXRDQ0tDb250cm9sUmF0ZShwRGV2aWNlLCBSQVRFXzFNKSwgUEtfVFlQRV8xMUIsICZwaHlbMF0pOworCS8qUlNQSU5GX2JfMSovCisJQkJ2Q2FsY3VsYXRlUGFyYW1ldGVyKHByaXYsIDE0LAorCQlzd0dldENDS0NvbnRyb2xSYXRlKHByaXYsIFJBVEVfMU0pLCBQS19UWVBFXzExQiwgJnBoeVswXSk7CiAKLSAgICAvLy9SU1BJTkZfYl8yCi0JQkJ2Q2FsY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIDE0LAotCQlzd0dldENDS0NvbnRyb2xSYXRlKHBEZXZpY2UsIFJBVEVfMk0pLCBQS19UWVBFXzExQiwgJnBoeVsxXSk7CisJLypSU1BJTkZfYl8yKi8KKwlCQnZDYWxjdWxhdGVQYXJhbWV0ZXIocHJpdiwgMTQsCisJCXN3R2V0Q0NLQ29udHJvbFJhdGUocHJpdiwgUkFURV8yTSksIFBLX1RZUEVfMTFCLCAmcGh5WzFdKTsKIAotICAgIC8vUlNQSU5GX2JfNQotCUJCdkNhbGN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCAxNCwKLQkJc3dHZXRDQ0tDb250cm9sUmF0ZShwRGV2aWNlLCBSQVRFXzVNKSwgUEtfVFlQRV8xMUIsICZwaHlbMl0pOworCS8qUlNQSU5GX2JfNSovCisJQkJ2Q2FsY3VsYXRlUGFyYW1ldGVyKHByaXYsIDE0LAorCQlzd0dldENDS0NvbnRyb2xSYXRlKHByaXYsIFJBVEVfNU0pLCBQS19UWVBFXzExQiwgJnBoeVsyXSk7CiAKLSAgICAvL1JTUElORl9iXzExCi0JQkJ2Q2FsY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIDE0LAotCQlzd0dldENDS0NvbnRyb2xSYXRlKHBEZXZpY2UsIFJBVEVfMTFNKSwgUEtfVFlQRV8xMUIsICZwaHlbM10pOworCS8qUlNQSU5GX2JfMTEqLworCUJCdkNhbGN1bGF0ZVBhcmFtZXRlcihwcml2LCAxNCwKKwkJc3dHZXRDQ0tDb250cm9sUmF0ZShwcml2LCBSQVRFXzExTSksIFBLX1RZUEVfMTFCLCAmcGh5WzNdKTsKIAotICAgIC8vUlNQSU5GX2FfNgotICAgIENBUkR2Q2FsY3VsYXRlT0ZETVJQYXJhbWV0ZXIgKFJBVEVfNk0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUJCVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlUeFJhdGVbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJ5UnN2VGltZVswXSk7CiAKLSAgICAvL1JTUElORl9hXzkKLSAgICBDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyIChSQVRFXzlNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnlCQlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJ5VHhSYXRlWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFieVJzdlRpbWVbMV0pOworCS8qUlNQSU5GX2FfNiovCisJQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlcihSQVRFXzZNLCBiYl90eXBlLAorCQkJCQkJJnR4X3JhdGVbMF0sICZyc3ZfdGltZVswXSk7CiAKLSAgICAvL1JTUElORl9hXzEyCi0gICAgQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlciAoUkFURV8xMk0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUJCVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlUeFJhdGVbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJ5UnN2VGltZVsyXSk7CisJLypSU1BJTkZfYV85Ki8KKwlDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyKFJBVEVfOU0sIGJiX3R5cGUsCisJCQkJCQkmdHhfcmF0ZVsxXSwgJnJzdl90aW1lWzFdKTsKIAotICAgIC8vUlNQSU5GX2FfMTgKLSAgICBDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyIChSQVRFXzE4TSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5QkJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFieVR4UmF0ZVszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlSc3ZUaW1lWzNdKTsKKwkvKlJTUElORl9hXzEyKi8KKwlDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyKFJBVEVfMTJNLCBiYl90eXBlLAorCQkJCQkJJnR4X3JhdGVbMl0sICZyc3ZfdGltZVsyXSk7CiAKLSAgICAvL1JTUElORl9hXzI0Ci0gICAgQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlciAoUkFURV8yNE0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUJCVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlUeFJhdGVbNF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJ5UnN2VGltZVs0XSk7CisJLypSU1BJTkZfYV8xOCovCisJQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlcihSQVRFXzE4TSwgYmJfdHlwZSwKKwkJCQkJCSZ0eF9yYXRlWzNdLCAmcnN2X3RpbWVbM10pOwogCi0gICAgLy9SU1BJTkZfYV8zNgotICAgIENBUkR2Q2FsY3VsYXRlT0ZETVJQYXJhbWV0ZXIgKHN3R2V0T0ZETUNvbnRyb2xSYXRlKHBEZXZpY2UsIFJBVEVfMzZNKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5QkJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFieVR4UmF0ZVs1XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlSc3ZUaW1lWzVdKTsKKwkvKlJTUElORl9hXzI0Ki8KKwlDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyKFJBVEVfMjRNLCBiYl90eXBlLAorCQkJCQkJJnR4X3JhdGVbNF0sICZyc3ZfdGltZVs0XSk7CiAKLSAgICAvL1JTUElORl9hXzQ4Ci0gICAgQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlciAoc3dHZXRPRkRNQ29udHJvbFJhdGUocERldmljZSwgUkFURV80OE0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnlCQlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJ5VHhSYXRlWzZdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFieVJzdlRpbWVbNl0pOworCS8qUlNQSU5GX2FfMzYqLworCUNBUkR2Q2FsY3VsYXRlT0ZETVJQYXJhbWV0ZXIoc3dHZXRPRkRNQ29udHJvbFJhdGUocHJpdiwgUkFURV8zNk0pLAorCQkJCQliYl90eXBlLCAmdHhfcmF0ZVs1XSwgJnJzdl90aW1lWzVdKTsKIAotICAgIC8vUlNQSU5GX2FfNTQKLSAgICBDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyIChzd0dldE9GRE1Db250cm9sUmF0ZShwRGV2aWNlLCBSQVRFXzU0TSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUJCVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlUeFJhdGVbN10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWJ5UnN2VGltZVs3XSk7CisJLypSU1BJTkZfYV80OCovCisJQ0FSRHZDYWxjdWxhdGVPRkRNUlBhcmFtZXRlcihzd0dldE9GRE1Db250cm9sUmF0ZShwcml2LCBSQVRFXzQ4TSksCisJCQkJCWJiX3R5cGUsICZ0eF9yYXRlWzZdLCAmcnN2X3RpbWVbNl0pOwogCi0gICAgLy9SU1BJTkZfYV83MgotICAgIENBUkR2Q2FsY3VsYXRlT0ZETVJQYXJhbWV0ZXIgKHN3R2V0T0ZETUNvbnRyb2xSYXRlKHBEZXZpY2UsIFJBVEVfNTRNKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5QkJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFieVR4UmF0ZVs4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYnlSc3ZUaW1lWzhdKTsKKwkvKlJTUElORl9hXzU0Ki8KKwlDQVJEdkNhbGN1bGF0ZU9GRE1SUGFyYW1ldGVyKHN3R2V0T0ZETUNvbnRyb2xSYXRlKHByaXYsIFJBVEVfNTRNKSwKKwkJCQkJYmJfdHlwZSwgJnR4X3JhdGVbN10sICZyc3ZfdGltZVs3XSk7CiAKLQlwdXRfdW5hbGlnbmVkKHBoeVswXS5sZW4sICh1MTYgKikmYWJ5RGF0YVswXSk7Ci0JYWJ5RGF0YVsyXSA9IHBoeVswXS5zaWduYWw7Ci0JYWJ5RGF0YVszXSA9IHBoeVswXS5zZXJ2aWNlOworCS8qUlNQSU5GX2FfNzIqLworCUNBUkR2Q2FsY3VsYXRlT0ZETVJQYXJhbWV0ZXIoc3dHZXRPRkRNQ29udHJvbFJhdGUocHJpdiwgUkFURV81NE0pLAorCQkJCQliYl90eXBlLCAmdHhfcmF0ZVs4XSwgJnJzdl90aW1lWzhdKTsKIAotCXB1dF91bmFsaWduZWQocGh5WzFdLmxlbiwgKHUxNiAqKSZhYnlEYXRhWzRdKTsKLQlhYnlEYXRhWzZdID0gcGh5WzFdLnNpZ25hbDsKLQlhYnlEYXRhWzddID0gcGh5WzFdLnNlcnZpY2U7CisJcHV0X3VuYWxpZ25lZChwaHlbMF0ubGVuLCAodTE2ICopJmRhdGFbMF0pOworCWRhdGFbMl0gPSBwaHlbMF0uc2lnbmFsOworCWRhdGFbM10gPSBwaHlbMF0uc2VydmljZTsKIAotCXB1dF91bmFsaWduZWQocGh5WzJdLmxlbiwgKHUxNiAqKSZhYnlEYXRhWzhdKTsKLQlhYnlEYXRhWzEwXSA9IHBoeVsyXS5zaWduYWw7Ci0JYWJ5RGF0YVsxMV0gPSBwaHlbMl0uc2VydmljZTsKKwlwdXRfdW5hbGlnbmVkKHBoeVsxXS5sZW4sICh1MTYgKikmZGF0YVs0XSk7CisJZGF0YVs2XSA9IHBoeVsxXS5zaWduYWw7CisJZGF0YVs3XSA9IHBoeVsxXS5zZXJ2aWNlOwogCi0JcHV0X3VuYWxpZ25lZChwaHlbM10ubGVuLCAodTE2ICopJmFieURhdGFbMTJdKTsKLQlhYnlEYXRhWzE0XSA9IHBoeVszXS5zaWduYWw7Ci0JYWJ5RGF0YVsxNV0gPSBwaHlbM10uc2VydmljZTsKKwlwdXRfdW5hbGlnbmVkKHBoeVsyXS5sZW4sICh1MTYgKikmZGF0YVs4XSk7CisJZGF0YVsxMF0gPSBwaHlbMl0uc2lnbmFsOworCWRhdGFbMTFdID0gcGh5WzJdLnNlcnZpY2U7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7Ci0JYWJ5RGF0YVsxNitpKjJdID0gYWJ5VHhSYXRlW2ldOwotCWFieURhdGFbMTYraSoyKzFdID0gYWJ5UnN2VGltZVtpXTsKLSAgICB9CisJcHV0X3VuYWxpZ25lZChwaHlbM10ubGVuLCAodTE2ICopJmRhdGFbMTJdKTsKKwlkYXRhWzE0XSA9IHBoeVszXS5zaWduYWw7CisJZGF0YVsxNV0gPSBwaHlbM10uc2VydmljZTsKIAotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19SRUdfUlNQSU5GX0JfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAzNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZhYnlEYXRhWzBdKTsKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCWRhdGFbMTYgKyBpICogMl0gPSB0eF9yYXRlW2ldOworCQlkYXRhWzE2ICsgaSAqIDIgKyAxXSA9IHJzdl90aW1lW2ldOworCX0KIAorCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsCisJCU1BQ19SRUdfUlNQSU5GX0JfMSwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgMzQsICZkYXRhWzBdKTsKIH0KIAogLyoKQEAgLTQyNiwxMjAgKzM4MiwxMTkgQEAKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgICAgIC0gVGhlIGFkYXB0ZXIgdG8gYmUgc2V0Ci0gKiAgT3V0OgotICogICAgICBub25lCisgKglwcml2IC0gVGhlIGFkYXB0ZXIgdG8gYmUgc2V0CisgKiBPdXQ6CisgKglub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiBOb25lLgogICoKICAqLwotdm9pZCB2VXBkYXRlSUZTKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKK3ZvaWQgdlVwZGF0ZUlGUyhzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7Ci0JdTggYnlNYXhNaW4gPSAwOwotCXU4IGJ5RGF0YVs0XTsKKwl1OCBtYXhfbWluID0gMDsKKwl1OCBkYXRhWzRdOwogCi0gICAgaWYgKHBEZXZpY2UtPmJ5UGFja2V0VHlwZT09UEtfVFlQRV8xMUEpIHsvLzAwMDAgMDAwMCAwMDAwIDAwMDAsMTFhCi0gICAgICAgIHBEZXZpY2UtPnVTbG90ID0gQ19TTE9UX1NIT1JUOwotICAgICAgICBwRGV2aWNlLT51U0lGUyA9IENfU0lGU19BOwotICAgICAgICBwRGV2aWNlLT51RElGUyA9IENfU0lGU19BICsgMipDX1NMT1RfU0hPUlQ7Ci0gICAgICAgIHBEZXZpY2UtPnVDd01pbiA9IENfQ1dNSU5fQTsKLSAgICAgICAgYnlNYXhNaW4gPSA0OwotICAgIH0KLSAgICBlbHNlIGlmIChwRGV2aWNlLT5ieVBhY2tldFR5cGU9PVBLX1RZUEVfMTFCKSB7Ly8wMDAwIDAwMDEgMDAwMCAwMDAwLDExYgotICAgICAgICBwRGV2aWNlLT51U2xvdCA9IENfU0xPVF9MT05HOwotICAgICAgICBwRGV2aWNlLT51U0lGUyA9IENfU0lGU19CRzsKLSAgICAgICAgcERldmljZS0+dURJRlMgPSBDX1NJRlNfQkcgKyAyKkNfU0xPVF9MT05HOwotICAgICAgICAgIHBEZXZpY2UtPnVDd01pbiA9IENfQ1dNSU5fQjsKLSAgICAgICAgYnlNYXhNaW4gPSA1OwotICAgIH0KLSAgICBlbHNlIHsvLyBQS19UWVBFXzExR0EgJiBQS19UWVBFXzExR0IKLSAgICAgICAgdTggYnlSYXRlID0gMDsKLSAgICAgICAgYm9vbCBiT0ZETVJhdGUgPSBmYWxzZTsKLQl1bnNpZ25lZCBpbnQgaWkgPSAwOwotICAgICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBJdGVtUmF0ZXMgPSBOVUxMOworCWlmIChwcml2LT5ieVBhY2tldFR5cGUgPT0gUEtfVFlQRV8xMUEpIHsKKwkJcHJpdi0+dVNsb3QgPSBDX1NMT1RfU0hPUlQ7CisJCXByaXYtPnVTSUZTID0gQ19TSUZTX0E7CisJCXByaXYtPnVESUZTID0gQ19TSUZTX0EgKyAyICogQ19TTE9UX1NIT1JUOworCQlwcml2LT51Q3dNaW4gPSBDX0NXTUlOX0E7CisJCW1heF9taW4gPSA0OworCX0gZWxzZSBpZiAocHJpdi0+YnlQYWNrZXRUeXBlID09IFBLX1RZUEVfMTFCKSB7CisJCXByaXYtPnVTbG90ID0gQ19TTE9UX0xPTkc7CisJCXByaXYtPnVTSUZTID0gQ19TSUZTX0JHOworCQlwcml2LT51RElGUyA9IENfU0lGU19CRyArIDIgKiBDX1NMT1RfTE9ORzsKKwkJcHJpdi0+dUN3TWluID0gQ19DV01JTl9COworCQltYXhfbWluID0gNTsKKwl9IGVsc2Ugey8qIFBLX1RZUEVfMTFHQSAmIFBLX1RZUEVfMTFHQiAqLworCQl1OCByYXRlID0gMDsKKwkJYm9vbCBvZmRtX3JhdGUgPSBmYWxzZTsKKwkJdW5zaWduZWQgaW50IGlpID0gMDsKKwkJUFdMQU5fSUVfU1VQUF9SQVRFUyBpdGVtX3JhdGVzID0gTlVMTDsKIAotICAgICAgICBwRGV2aWNlLT51U0lGUyA9IENfU0lGU19CRzsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT51U2xvdCA9IENfU0xPVF9TSE9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPnVTbG90ID0gQ19TTE9UX0xPTkc7Ci0gICAgICAgIH0KLSAgICAgICAgcERldmljZS0+dURJRlMgPSBDX1NJRlNfQkcgKyAyKnBEZXZpY2UtPnVTbG90OworCQlwcml2LT51U0lGUyA9IENfU0lGU19CRzsKIAotCXBJdGVtUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwRGV2aWNlLT52bnRfbWdtdC5hYnlDdXJyU3VwcFJhdGVzOwotICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBwSXRlbVJhdGVzLT5sZW47IGlpKyspIHsKLSAgICAgICAgICAgIGJ5UmF0ZSA9ICh1OCkocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldJjB4N0YpOwotICAgICAgICAgICAgaWYgKFJBVEV3R2V0UmF0ZUlkeChieVJhdGUpID4gUkFURV8xMU0pIHsKLSAgICAgICAgICAgICAgICBiT0ZETVJhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChiT0ZETVJhdGUgPT0gZmFsc2UpIHsKLQkJcEl0ZW1SYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBEZXZpY2UtPnZudF9tZ210Ci0JCQkuYWJ5Q3VyckV4dFN1cHBSYXRlczsKLSAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHBJdGVtUmF0ZXMtPmxlbjsgaWkrKykgewotICAgICAgICAgICAgICAgIGJ5UmF0ZSA9ICh1OCkocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldJjB4N0YpOwotICAgICAgICAgICAgICAgIGlmIChSQVRFd0dldFJhdGVJZHgoYnlSYXRlKSA+IFJBVEVfMTFNKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJPRkRNUmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoYk9GRE1SYXRlID09IHRydWUpIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPnVDd01pbiA9IENfQ1dNSU5fQTsKLSAgICAgICAgICAgIGJ5TWF4TWluID0gNDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPnVDd01pbiA9IENfQ1dNSU5fQjsKLSAgICAgICAgICAgIGJ5TWF4TWluID0gNTsKLSAgICAgICAgfQotICAgIH0KKwkJaWYgKHByaXYtPmJTaG9ydFNsb3RUaW1lKQorCQkJcHJpdi0+dVNsb3QgPSBDX1NMT1RfU0hPUlQ7CisJCWVsc2UKKwkJCXByaXYtPnVTbG90ID0gQ19TTE9UX0xPTkc7CiAKLSAgICBwRGV2aWNlLT51Q3dNYXggPSBDX0NXTUFYOwotICAgIHBEZXZpY2UtPnVFSUZTID0gQ19FSUZTOworCQlwcml2LT51RElGUyA9IENfU0lGU19CRyArIDIgKiBwcml2LT51U2xvdDsKIAotICAgIGJ5RGF0YVswXSA9ICh1OClwRGV2aWNlLT51U0lGUzsKLSAgICBieURhdGFbMV0gPSAodTgpcERldmljZS0+dURJRlM7Ci0gICAgYnlEYXRhWzJdID0gKHU4KXBEZXZpY2UtPnVFSUZTOwotICAgIGJ5RGF0YVszXSA9ICh1OClwRGV2aWNlLT51U2xvdDsKLSAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1RZUEVfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBNQUNfUkVHX1NJRlMsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAotICAgICAgICAgICAgICAgICAgICAgICAgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZieURhdGFbMF0pOworCQlpdGVtX3JhdGVzID0KKwkJCShQV0xBTl9JRV9TVVBQX1JBVEVTKXByaXYtPnZudF9tZ210LmFieUN1cnJTdXBwUmF0ZXM7CiAKLSAgICBieU1heE1pbiB8PSAweEEwOy8vMTAxMCAxMTExLENfQ1dNQVggPSAxMDIzCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgTUFDX1JFR19DV01BWE1JTjAsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAotICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZieU1heE1pbik7CisJCWZvciAoaWkgPSAwOyBpaSA8IGl0ZW1fcmF0ZXMtPmxlbjsgaWkrKykgeworCQkJcmF0ZSA9ICh1OCkoaXRlbV9yYXRlcy0+YWJ5UmF0ZXNbaWldICYgMHg3Zik7CisJCQlpZiAoUkFURXdHZXRSYXRlSWR4KHJhdGUpID4gUkFURV8xMU0pIHsKKwkJCQlvZmRtX3JhdGUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG9mZG1fcmF0ZSA9PSBmYWxzZSkgeworCQkJaXRlbV9yYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXByaXYtPnZudF9tZ210CisJCQkJLmFieUN1cnJFeHRTdXBwUmF0ZXM7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBpdGVtX3JhdGVzLT5sZW47IGlpKyspIHsKKwkJCQlyYXRlID0gKHU4KShpdGVtX3JhdGVzLT5hYnlSYXRlc1tpaV0gJiAweDdmKTsKKwkJCQlpZiAoUkFURXdHZXRSYXRlSWR4KHJhdGUpID4gUkFURV8xMU0pIHsKKwkJCQkJb2ZkbV9yYXRlID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG9mZG1fcmF0ZSA9PSB0cnVlKSB7CisJCQlwcml2LT51Q3dNaW4gPSBDX0NXTUlOX0E7CisJCQltYXhfbWluID0gNDsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnVDd01pbiA9IENfQ1dNSU5fQjsKKwkJCW1heF9taW4gPSA1OworCQkJfQorCX0KKworCXByaXYtPnVDd01heCA9IENfQ1dNQVg7CisJcHJpdi0+dUVJRlMgPSBDX0VJRlM7CisKKwlkYXRhWzBdID0gKHU4KXByaXYtPnVTSUZTOworCWRhdGFbMV0gPSAodTgpcHJpdi0+dURJRlM7CisJZGF0YVsyXSA9ICh1OClwcml2LT51RUlGUzsKKwlkYXRhWzNdID0gKHU4KXByaXYtPnVTbG90OworCisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURSwgTUFDX1JFR19TSUZTLAorCQlNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCA0LCAmZGF0YVswXSk7CisKKwltYXhfbWluIHw9IDB4YTA7CisKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLCBNQUNfUkVHX0NXTUFYTUlOMCwKKwkJTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgMSwgJm1heF9taW4pOwogfQogCi12b2lkIENBUkR2VXBkYXRlQmFzaWNUb3BSYXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKK3ZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewotCXU4IGJ5VG9wT0ZETSA9IFJBVEVfMjRNLCBieVRvcENDSyA9IFJBVEVfMU07Ci0JdTggaWk7CisJdTggdG9wX29mZG0gPSBSQVRFXzI0TSwgdG9wX2NjayA9IFJBVEVfMU07CisJdTggaTsKIAotICAgICAvL0RldGVybWluZXMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZS4KLSAgICAgZm9yIChpaSA9IFJBVEVfNTRNOyBpaSA+PSBSQVRFXzZNOyBpaSAtLSkgewotICAgICAgICAgaWYgKCAocERldmljZS0+d0Jhc2ljUmF0ZSkgJiAoKHUxNikoMTw8aWkpKSApIHsKLSAgICAgICAgICAgICBieVRvcE9GRE0gPSBpaTsKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAgICAgfQotICAgICBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUgPSBieVRvcE9GRE07CisJLypEZXRlcm1pbmVzIHRoZSBoaWdoZXN0IGJhc2ljIHJhdGUuKi8KKwlmb3IgKGkgPSBSQVRFXzU0TTsgaSA+PSBSQVRFXzZNOyBpLS0pIHsKKwkJaWYgKHByaXYtPndCYXNpY1JhdGUgJiAodTE2KSgxIDw8IGkpKSB7CisJCQl0b3Bfb2ZkbSA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KIAotICAgICBmb3IgKGlpID0gUkFURV8xMU07OyBpaSAtLSkgewotICAgICAgICAgaWYgKCAocERldmljZS0+d0Jhc2ljUmF0ZSkgJiAoKHUxNikoMTw8aWkpKSApIHsKLSAgICAgICAgICAgICBieVRvcENDSyA9IGlpOwotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgICAgaWYgKGlpID09IFJBVEVfMU0pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgfQotICAgICBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSA9IGJ5VG9wQ0NLOworCXByaXYtPmJ5VG9wT0ZETUJhc2ljUmF0ZSA9IHRvcF9vZmRtOworCisJZm9yIChpID0gUkFURV8xMU07OyBpLS0pIHsKKwkJaWYgKHByaXYtPndCYXNpY1JhdGUgJiAodTE2KSgxIDw8IGkpKSB7CisJCQl0b3BfY2NrID0gaTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpID09IFJBVEVfMU0pCisJCQlicmVhazsKKwl9CisKKwlwcml2LT5ieVRvcENDS0Jhc2ljUmF0ZSA9IHRvcF9jY2s7CiAgfQogCiAvKgpAQCAtNTU1LDM5ICs1MTAsMzYgQEAKICAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLXZvaWQgQ0FSRGJBZGRCYXNpY1JhdGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1MTYgd1JhdGVJZHgpCit2b2lkIENBUkRiQWRkQmFzaWNSYXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTE2IHJhdGVfaWR4KQogewotCXUxNiB3UmF0ZSA9ICgxIDw8IHdSYXRlSWR4KTsKIAotICAgIHBEZXZpY2UtPndCYXNpY1JhdGUgfD0gd1JhdGU7CisJcHJpdi0+d0Jhc2ljUmF0ZSB8PSAoMSA8PCByYXRlX2lkeCk7CiAKLSAgICAvL0RldGVybWluZXMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZS4KLSAgICBDQVJEdlVwZGF0ZUJhc2ljVG9wUmF0ZShwRGV2aWNlKTsKKwkvKkRldGVybWluZXMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZS4qLworCUNBUkR2VXBkYXRlQmFzaWNUb3BSYXRlKHByaXYpOwogfQogCi1pbnQgQ0FSRGJJc09GRE1pbkJhc2ljUmF0ZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCitpbnQgQ0FSRGJJc09GRE1pbkJhc2ljUmF0ZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IGlpOwogCi0gICAgZm9yIChpaSA9IFJBVEVfNTRNOyBpaSA+PSBSQVRFXzZNOyBpaSAtLSkgewotICAgICAgICBpZiAoKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKCh1MTYpKDE8PGlpKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworCWZvciAoaWkgPSBSQVRFXzU0TTsgaWkgPj0gUkFURV82TTsgaWktLSkgeworCQlpZiAoKHByaXYtPndCYXNpY1JhdGUpICYgKCh1MTYpKDEgPDwgaWkpKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKIH0KIAotdTggQ0FSRGJ5R2V0UGt0VHlwZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCit1OCBDQVJEYnlHZXRQa3RUeXBlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdikKIHsKIAotICAgIGlmIChwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSB8fCBwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQikgewotICAgICAgICByZXR1cm4gKHU4KXBEZXZpY2UtPmJ5QkJUeXBlOwotICAgIH0KLSAgICBlbHNlIGlmIChDQVJEYklzT0ZETWluQmFzaWNSYXRlKHBEZXZpY2UpKSB7Ci0gICAgICAgIHJldHVybiBQS19UWVBFXzExR0E7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICByZXR1cm4gUEtfVFlQRV8xMUdCOwotICAgIH0KKwlpZiAocHJpdi0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEgfHwgcHJpdi0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUIpCisJCXJldHVybiAodTgpcHJpdi0+YnlCQlR5cGU7CisJZWxzZSBpZiAoQ0FSRGJJc09GRE1pbkJhc2ljUmF0ZShwcml2KSkKKwkJcmV0dXJuIFBLX1RZUEVfMTFHQTsKKwllbHNlCisJCXJldHVybiBQS19UWVBFXzExR0I7CiB9CiAKIC8qCkBAIC01OTYsMjcgKzU0OCwyNyBAQAogICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHN5bmMuCi0gKiAgICAgIHF3VFNGMSAgICAgICAgICAtIFJ4IEJDTidzIFRTRgotICogICAgICBxd1RTRjIgICAgICAgICAgLSBMb2NhbCBUU0YKKyAqICAgICAgcnhfcmF0ZQktIHJ4IHJhdGUuCisgKiAgICAgIHRzZjEJLSBSeCBCQ04ncyBUU0YKKyAqICAgICAgdHNmMgktIExvY2FsIFRTRgogICogIE91dDoKICAqICAgICAgbm9uZQogICoKICAqIFJldHVybiBWYWx1ZTogVFNGIE9mZnNldCB2YWx1ZQogICoKICAqLwotdTY0IENBUkRxR2V0VFNGT2Zmc2V0KHU4IGJ5UnhSYXRlLCB1NjQgcXdUU0YxLCB1NjQgcXdUU0YyKQordTY0IENBUkRxR2V0VFNGT2Zmc2V0KHU4IHJ4X3JhdGUsIHU2NCB0c2YxLCB1NjQgdHNmMikKIHsKLQl1NjQgcXdUU0ZPZmZzZXQgPSAwOwotCXUxNiB3UnhCY25UU0ZPZmZzdCA9IDA7CisJdTY0IHRzZl9vZmZzZXQgPSAwOworCXUxNiByeF9iY25fb2Zmc2V0ID0gMDsKIAotCXdSeEJjblRTRk9mZnN0ID0gY3dSWEJDTlRTRk9mZltieVJ4UmF0ZSAlIE1BWF9SQVRFXTsKKwlyeF9iY25fb2Zmc2V0ID0gY3dSWEJDTlRTRk9mZltyeF9yYXRlICUgTUFYX1JBVEVdOwogCi0JcXdUU0YyICs9ICh1NjQpd1J4QmNuVFNGT2Zmc3Q7CisJdHNmMiArPSAodTY0KXJ4X2Jjbl9vZmZzZXQ7CiAKLQlxd1RTRk9mZnNldCA9IHF3VFNGMSAtIHF3VFNGMjsKKwl0c2Zfb2Zmc2V0ID0gdHNmMSAtIHRzZjI7CiAKLQlyZXR1cm4gcXdUU0ZPZmZzZXQ7CisJcmV0dXJuIHRzZl9vZmZzZXQ7CiB9CiAKIC8qCkBAIC02MjUsNDIgKzU3NywzNCBAQAogICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHN5bmMuCi0gKiAgICAgIHF3QlNTVGltZXN0YW1wICAtIFJ4IEJDTidzIFRTRgotICogICAgICBxd0xvY2FsVFNGICAgICAgLSBMb2NhbCBUU0YKKyAqICAgICAgcHJpdgkJLSBUaGUgYWRhcHRlciB0byBiZSBzeW5jLgorICogICAgICB0aW1lX3N0YW1wCS0gUnggQkNOJ3MgVFNGCisgKiAgICAgIGxvY2FsX3RzZgktIExvY2FsIFRTRgogICogIE91dDoKICAqICAgICAgbm9uZQogICoKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBDQVJEdkFkanVzdFRTRihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5UnhSYXRlLAotCQl1NjQgcXdCU1NUaW1lc3RhbXAsIHU2NCBxd0xvY2FsVFNGKQordm9pZCBDQVJEdkFkanVzdFRTRihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHJ4X3JhdGUsCisJCXU2NCB0aW1lX3N0YW1wLCB1NjQgbG9jYWxfdHNmKQogewotCXU2NCBxd1RTRk9mZnNldCA9IDA7Ci0JdTggcGJ5RGF0YVs4XTsKKwl1NjQgdHNmX29mZnNldCA9IDA7CisJdTggZGF0YVs4XTsKIAotICAgIHF3VFNGT2Zmc2V0ID0gQ0FSRHFHZXRUU0ZPZmZzZXQoYnlSeFJhdGUsIHF3QlNTVGltZXN0YW1wLCBxd0xvY2FsVFNGKTsKLSAgICAvLyBhZGp1c3QgVFNGCi0gICAgLy8gSFcncyBUU0YgYWRkIFRTRiBPZmZzZXQgcmVnCisJdHNmX29mZnNldCA9IENBUkRxR2V0VFNGT2Zmc2V0KHJ4X3JhdGUsIHRpbWVfc3RhbXAsIGxvY2FsX3RzZik7CiAKLQlwYnlEYXRhWzBdID0gKHU4KXF3VFNGT2Zmc2V0OwotCXBieURhdGFbMV0gPSAodTgpKHF3VFNGT2Zmc2V0ID4+IDgpOwotCXBieURhdGFbMl0gPSAodTgpKHF3VFNGT2Zmc2V0ID4+IDE2KTsKLQlwYnlEYXRhWzNdID0gKHU4KShxd1RTRk9mZnNldCA+PiAyNCk7Ci0JcGJ5RGF0YVs0XSA9ICh1OCkocXdUU0ZPZmZzZXQgPj4gMzIpOwotCXBieURhdGFbNV0gPSAodTgpKHF3VFNGT2Zmc2V0ID4+IDQwKTsKLQlwYnlEYXRhWzZdID0gKHU4KShxd1RTRk9mZnNldCA+PiA0OCk7Ci0JcGJ5RGF0YVs3XSA9ICh1OCkocXdUU0ZPZmZzZXQgPj4gNTYpOworCWRhdGFbMF0gPSAodTgpdHNmX29mZnNldDsKKwlkYXRhWzFdID0gKHU4KSh0c2Zfb2Zmc2V0ID4+IDgpOworCWRhdGFbMl0gPSAodTgpKHRzZl9vZmZzZXQgPj4gMTYpOworCWRhdGFbM10gPSAodTgpKHRzZl9vZmZzZXQgPj4gMjQpOworCWRhdGFbNF0gPSAodTgpKHRzZl9vZmZzZXQgPj4gMzIpOworCWRhdGFbNV0gPSAodTgpKHRzZl9vZmZzZXQgPj4gNDApOworCWRhdGFbNl0gPSAodTgpKHRzZl9vZmZzZXQgPj4gNDgpOworCWRhdGFbN10gPSAodTgpKHRzZl9vZmZzZXQgPj4gNTYpOwogCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1NFVF9UU0ZUQlRULAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9SRVFVRVNUX1RTRiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICA4LAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQorCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfU0VUX1RTRlRCVFQsCisJCU1FU1NBR0VfUkVRVUVTVF9UU0YsIDAsIDgsIGRhdGEpOwogfQogLyoKICAqIERlc2NyaXB0aW9uOiBSZWFkIE5JQyBUU0YgY291bnRlcgpAQCAtNjY4LDE3ICs2MTIsMTcgQEAKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgLSBUaGUgYWRhcHRlciB0byBiZSByZWFkCisgKglwcml2CQktIFRoZSBhZGFwdGVyIHRvIGJlIHJlYWQKICAqICBPdXQ6Ci0gKiAgICAgIHF3Q3VyclRTRiAgICAgICAtIEN1cnJlbnQgVFNGIGNvdW50ZXIKKyAqCWN1cnJlbnRfdHNmCS0gQ3VycmVudCBUU0YgY291bnRlcgogICoKICAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLWJvb2wgQ0FSRGJHZXRDdXJyZW50VFNGKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTY0ICpwcXdDdXJyVFNGKQorYm9vbCBDQVJEYkdldEN1cnJlbnRUU0Yoc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1NjQgKmN1cnJlbnRfdHNmKQogewogCi0JKnBxd0N1cnJUU0YgPSBwRGV2aWNlLT5xd0N1cnJUU0Y7CisJKmN1cnJlbnRfdHNmID0gcHJpdi0+cXdDdXJyVFNGOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC02ODksMTcgKzYzMywxNyBAQAogICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHJlYWQKKyAqICAgICAgcHJpdgktIFRoZSBhZGFwdGVyIHRvIGJlIHJlYWQKICAqCiAgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1ib29sIENBUkRiQ2xlYXJDdXJyZW50VFNGKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKK2Jvb2wgQ0FSRGJDbGVhckN1cnJlbnRUU0Yoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewogCi0JTUFDdlJlZ0JpdHNPbihwRGV2aWNlLCBNQUNfUkVHX1RGVENUTCwgVEZUQ1RMX1RTRkNOVFJTVCk7CisJTUFDdlJlZ0JpdHNPbihwcml2LCBNQUNfUkVHX1RGVENUTCwgVEZUQ1RMX1RTRkNOVFJTVCk7CiAKLQlwRGV2aWNlLT5xd0N1cnJUU0YgPSAwOworCXByaXYtPnF3Q3VyclRTRiA9IDA7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxMCwzMCArNjU0LDMwIEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgcXdUU0YgICAgICAgICAgIC0gQ3VycmVudCBUU0YgY291bnRlcgotICogICAgICB3YmVhY29uSW50ZXJ2YWwgLSBCZWFjb24gSW50ZXJ2YWwKKyAqICAgICAgdHNmCQktIEN1cnJlbnQgVFNGIGNvdW50ZXIKKyAqICAgICAgYmVhY29uX2ludGVydmFsIC0gQmVhY29uIEludGVydmFsCiAgKiAgT3V0OgotICogICAgICBxd0N1cnJUU0YgICAgICAgLSBDdXJyZW50IFRTRiBjb3VudGVyCisgKiAgICAgIHRzZgkJLSBDdXJyZW50IFRTRiBjb3VudGVyCiAgKgogICogUmV0dXJuIFZhbHVlOiBUU0YgdmFsdWUgb2YgbmV4dCBCZWFjb24KICAqCiAgKi8KLXU2NCBDQVJEcUdldE5leHRUQlRUKHU2NCBxd1RTRiwgdTE2IHdCZWFjb25JbnRlcnZhbCkKK3U2NCBDQVJEcUdldE5leHRUQlRUKHU2NCB0c2YsIHUxNiBiZWFjb25faW50ZXJ2YWwpCiB7Ci0JdTMyIHVCZWFjb25JbnRlcnZhbDsKKwl1MzIgYmVhY29uX2ludDsKIAotCXVCZWFjb25JbnRlcnZhbCA9IHdCZWFjb25JbnRlcnZhbCAqIDEwMjQ7CisJYmVhY29uX2ludCA9IGJlYWNvbl9pbnRlcnZhbCAqIDEwMjQ7CiAKIAkvKiBOZXh0IFRCVFQgPQogCSoJKChsb2NhbF9jdXJyZW50X1RTRiAvIGJlYWNvbl9pbnRlcnZhbCkgKyAxKSAqIGJlYWNvbl9pbnRlcnZhbAogCSovCi0JaWYgKHVCZWFjb25JbnRlcnZhbCkgewotCQlkb19kaXYocXdUU0YsIHVCZWFjb25JbnRlcnZhbCk7Ci0JCXF3VFNGICs9IDE7Ci0JCXF3VFNGICo9IHVCZWFjb25JbnRlcnZhbDsKKwlpZiAoYmVhY29uX2ludCkgeworCQlkb19kaXYodHNmLCBiZWFjb25faW50KTsKKwkJdHNmICs9IDE7CisJCXRzZiAqPSBiZWFjb25faW50OwogCX0KIAotCXJldHVybiBxd1RTRjsKKwlyZXR1cm4gdHNmOwogfQogCiAvKgpAQCAtNzQzLDQxICs2ODcsMzUgQEAKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46CiAgKiAgICAgIGR3SW9CYXNlICAgICAgICAtIElPIEJhc2UKLSAqICAgICAgd0JlYWNvbkludGVydmFsIC0gQmVhY29uIEludGVydmFsCisgKgliZWFjb25faW50ZXJ2YWwgLSBCZWFjb24gSW50ZXJ2YWwKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgQ0FSRHZTZXRGaXJzdE5leHRUQlRUKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTE2IHdCZWFjb25JbnRlcnZhbCkKK3ZvaWQgQ0FSRHZTZXRGaXJzdE5leHRUQlRUKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTE2IGJlYWNvbl9pbnRlcnZhbCkKIHsKLQl1NjQgcXdOZXh0VEJUVCA9IDA7Ci0JdTggcGJ5RGF0YVs4XTsKKwl1NjQgbmV4dF90YnR0ID0gMDsKKwl1OCBkYXRhWzhdOwogCi0JQ0FSRGJDbGVhckN1cnJlbnRUU0YocERldmljZSk7Ci0gICAgLy9DQVJEYkdldEN1cnJlbnRUU0YocERldmljZSwgJnF3TmV4dFRCVFQpOyAvL0dldCBMb2NhbCBUU0YgY291bnRlcgotCXF3TmV4dFRCVFQgPSBDQVJEcUdldE5leHRUQlRUKHF3TmV4dFRCVFQsIHdCZWFjb25JbnRlcnZhbCk7Ci0gICAgLy8gU2V0IE5leHRUQlRUCisJQ0FSRGJDbGVhckN1cnJlbnRUU0YocHJpdik7CiAKLQlwYnlEYXRhWzBdID0gKHU4KXF3TmV4dFRCVFQ7Ci0JcGJ5RGF0YVsxXSA9ICh1OCkocXdOZXh0VEJUVCA+PiA4KTsKLQlwYnlEYXRhWzJdID0gKHU4KShxd05leHRUQlRUID4+IDE2KTsKLQlwYnlEYXRhWzNdID0gKHU4KShxd05leHRUQlRUID4+IDI0KTsKLQlwYnlEYXRhWzRdID0gKHU4KShxd05leHRUQlRUID4+IDMyKTsKLQlwYnlEYXRhWzVdID0gKHU4KShxd05leHRUQlRUID4+IDQwKTsKLQlwYnlEYXRhWzZdID0gKHU4KShxd05leHRUQlRUID4+IDQ4KTsKLQlwYnlEYXRhWzddID0gKHU4KShxd05leHRUQlRUID4+IDU2KTsKKwluZXh0X3RidHQgPSBDQVJEcUdldE5leHRUQlRUKG5leHRfdGJ0dCwgYmVhY29uX2ludGVydmFsKTsKIAotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9TRVRfVFNGVEJUVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfUkVRVUVTVF9UQlRULAotICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYnlEYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICApOworCWRhdGFbMF0gPSAodTgpbmV4dF90YnR0OworCWRhdGFbMV0gPSAodTgpKG5leHRfdGJ0dCA+PiA4KTsKKwlkYXRhWzJdID0gKHU4KShuZXh0X3RidHQgPj4gMTYpOworCWRhdGFbM10gPSAodTgpKG5leHRfdGJ0dCA+PiAyNCk7CisJZGF0YVs0XSA9ICh1OCkobmV4dF90YnR0ID4+IDMyKTsKKwlkYXRhWzVdID0gKHU4KShuZXh0X3RidHQgPj4gNDApOworCWRhdGFbNl0gPSAodTgpKG5leHRfdGJ0dCA+PiA0OCk7CisJZGF0YVs3XSA9ICh1OCkobmV4dF90YnR0ID4+IDU2KTsKIAotICAgIHJldHVybjsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1NFVF9UU0ZUQlRULAorCQlNRVNTQUdFX1JFUVVFU1RfVEJUVCwgMCwgOCwgZGF0YSk7CisKKwlyZXR1cm47CiB9CiAKIC8qCkBAIC03ODYsNDUgKzcyNCwzNyBAQAogICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHNldAotICogICAgICBxd1RTRiAgICAgICAgICAgLSBDdXJyZW50IFRTRiBjb3VudGVyCi0gKiAgICAgIHdCZWFjb25JbnRlcnZhbCAtIEJlYWNvbiBJbnRlcnZhbAorICoJcHJpdgkJLSBUaGUgYWRhcHRlciB0byBiZSBzZXQKKyAqICAgICAgdHNmCQktIEN1cnJlbnQgVFNGIGNvdW50ZXIKKyAqICAgICAgYmVhY29uX2ludGVydmFsIC0gQmVhY29uIEludGVydmFsCiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIENBUkR2VXBkYXRlTmV4dFRCVFQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1NjQgcXdUU0YsCi0JCQl1MTYgd0JlYWNvbkludGVydmFsKQordm9pZCBDQVJEdlVwZGF0ZU5leHRUQlRUKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTY0IHRzZiwKKwkJCXUxNiBiZWFjb25faW50ZXJ2YWwpCiB7Ci0JdTggcGJ5RGF0YVs4XTsKKwl1OCBkYXRhWzhdOwogCi0gICAgcXdUU0YgPSBDQVJEcUdldE5leHRUQlRUKHF3VFNGLCB3QmVhY29uSW50ZXJ2YWwpOworCXRzZiA9IENBUkRxR2V0TmV4dFRCVFQodHNmLCBiZWFjb25faW50ZXJ2YWwpOwogCi0gICAgLy8gU2V0IE5leHRUQlRUCisJZGF0YVswXSA9ICh1OCl0c2Y7CisJZGF0YVsxXSA9ICh1OCkodHNmID4+IDgpOworCWRhdGFbMl0gPSAodTgpKHRzZiA+PiAxNik7CisJZGF0YVszXSA9ICh1OCkodHNmID4+IDI0KTsKKwlkYXRhWzRdID0gKHU4KSh0c2YgPj4gMzIpOworCWRhdGFbNV0gPSAodTgpKHRzZiA+PiA0MCk7CisJZGF0YVs2XSA9ICh1OCkodHNmID4+IDQ4KTsKKwlkYXRhWzddID0gKHU4KSh0c2YgPj4gNTYpOwogCi0JcGJ5RGF0YVswXSA9ICh1OClxd1RTRjsKLQlwYnlEYXRhWzFdID0gKHU4KShxd1RTRiA+PiA4KTsKLQlwYnlEYXRhWzJdID0gKHU4KShxd1RTRiA+PiAxNik7Ci0JcGJ5RGF0YVszXSA9ICh1OCkocXdUU0YgPj4gMjQpOwotCXBieURhdGFbNF0gPSAodTgpKHF3VFNGID4+IDMyKTsKLQlwYnlEYXRhWzVdID0gKHU4KShxd1RTRiA+PiA0MCk7Ci0JcGJ5RGF0YVs2XSA9ICh1OCkocXdUU0YgPj4gNDgpOwotCXBieURhdGFbN10gPSAodTgpKHF3VFNGID4+IDU2KTsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1NFVF9UU0ZUQlRULAorCQlNRVNTQUdFX1JFUVVFU1RfVEJUVCwgMCwgOCwgZGF0YSk7CiAKLSAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1RZUEVfU0VUX1RTRlRCVFQsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1JFUVVFU1RfVEJUVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICA4LAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwlkZXZfZGJnKCZwcml2LT51c2ItPmRldiwgIiVzIFRCVFQ6ICU4bGx4XG4iLCBfX2Z1bmNfXywgdHNmKTsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJIkNhcmQ6VXBkYXRlIE5leHQgVEJUVFslOGx4XVxuIiwgKHVuc2lnbmVkIGxvbmcpcXdUU0YpOwotCi0gICAgcmV0dXJuOworCXJldHVybjsKIH0KIAogLyoKQEAgLTgzMiwzOCArNzYyLDM2IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgcERldmljZSAgICAgICAgIC0gVGhlIGFkYXB0ZXIgdG8gYmUgdHVybmVkIG9mZgorICogICAgICBwcml2ICAgICAgICAgLSBUaGUgYWRhcHRlciB0byBiZSB0dXJuZWQgb2ZmCiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotaW50IENBUkRiUmFkaW9Qb3dlck9mZihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCitpbnQgQ0FSRGJSYWRpb1Bvd2VyT2ZmKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdikKIHsKLQlpbnQgYlJlc3VsdCA9IHRydWU7CisJaW50IHJldCA9IHRydWU7CiAKLSAgICAvL2lmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gdHJ1ZSkKLSAgICAvLyAgICByZXR1cm4gdHJ1ZTsKKwlwcml2LT5iUmFkaW9PZmYgPSB0cnVlOwogCi0gICAgcERldmljZS0+YlJhZGlvT2ZmID0gdHJ1ZTsKKwlzd2l0Y2ggKHByaXYtPmJ5UkZUeXBlKSB7CisJY2FzZSBSRl9BTDIyMzA6CisJY2FzZSBSRl9BTDIyMzBTOgorCWNhc2UgUkZfQUlST0hBNzIzMDoKKwljYXNlIFJGX1ZUMzIyNjoKKwljYXNlIFJGX1ZUMzIyNkQwOgorCWNhc2UgUkZfVlQzMzQyQTA6CisJCU1BQ3ZSZWdCaXRzT2ZmKHByaXYsIE1BQ19SRUdfU09GVFBXUkNUTCwKKwkJCQkoU09GVFBXUkNUTF9TV1BFMiB8IFNPRlRQV1JDVExfU1dQRTMpKTsKKwkJYnJlYWs7CisJfQogCi0gICAgc3dpdGNoIChwRGV2aWNlLT5ieVJGVHlwZSkgewotICAgICAgICBjYXNlIFJGX0FMMjIzMDoKLSAgICAgICAgY2FzZSBSRl9BTDIyMzBTOgotICAgICAgICBjYXNlIFJGX0FJUk9IQTcyMzA6Ci0gICAgICAgIGNhc2UgUkZfVlQzMjI2OiAgICAgLy9Sb2JlcnRZdToyMDA1MTExMQotICAgICAgICBjYXNlIFJGX1ZUMzIyNkQwOgotICAgICAgICBjYXNlIFJGX1ZUMzM0MkEwOiAgIC8vUm9iZXJ0WXU6MjAwNjA2MDkKLSAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UsIE1BQ19SRUdfU09GVFBXUkNUTCwgKFNPRlRQV1JDVExfU1dQRTIgfCBTT0ZUUFdSQ1RMX1NXUEUzKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisJTUFDdlJlZ0JpdHNPZmYocHJpdiwgTUFDX1JFR19IT1NUQ1IsIEhPU1RDUl9SWE9OKTsKIAotICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UsIE1BQ19SRUdfSE9TVENSLCBIT1NUQ1JfUlhPTik7CisJQkJ2U2V0RGVlcFNsZWVwKHByaXYpOwogCi0gICAgQkJ2U2V0RGVlcFNsZWVwKHBEZXZpY2UpOwotCi0gICAgcmV0dXJuIGJSZXN1bHQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTg3MSw4NCArNzk5LDc5IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgcERldmljZSAgICAgICAgIC0gVGhlIGFkYXB0ZXIgdG8gYmUgdHVybmVkIG9uCisgKiAgICAgIHByaXYgICAgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHR1cm5lZCBvbgogICogIE91dDoKICAqICAgICAgbm9uZQogICoKICAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLWludCBDQVJEYlJhZGlvUG93ZXJPbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCitpbnQgQ0FSRGJSYWRpb1Bvd2VyT24oc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewotCWludCBiUmVzdWx0ID0gdHJ1ZTsKKwlpbnQgcmV0ID0gdHJ1ZTsKIAotICAgIGlmICgocERldmljZS0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSkgfHwgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gdHJ1ZSkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKwlpZiAocHJpdi0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSB8fCBwcml2LT5iUmFkaW9Db250cm9sT2ZmID09IHRydWUpCisJCXJldHVybiBmYWxzZTsKIAotICAgIC8vaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBmYWxzZSkKLSAgICAvLyAgICByZXR1cm4gdHJ1ZTsKKwlwcml2LT5iUmFkaW9PZmYgPSBmYWxzZTsKIAotICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IGZhbHNlOworCUJCdkV4aXREZWVwU2xlZXAocHJpdik7CiAKLSAgICBCQnZFeGl0RGVlcFNsZWVwKHBEZXZpY2UpOworCU1BQ3ZSZWdCaXRzT24ocHJpdiwgTUFDX1JFR19IT1NUQ1IsIEhPU1RDUl9SWE9OKTsKIAotICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZSwgTUFDX1JFR19IT1NUQ1IsIEhPU1RDUl9SWE9OKTsKKwlzd2l0Y2ggKHByaXYtPmJ5UkZUeXBlKSB7CisJY2FzZSBSRl9BTDIyMzA6CisJY2FzZSBSRl9BTDIyMzBTOgorCWNhc2UgUkZfQUlST0hBNzIzMDoKKwljYXNlIFJGX1ZUMzIyNjoKKwljYXNlIFJGX1ZUMzIyNkQwOgorCWNhc2UgUkZfVlQzMzQyQTA6CisJCU1BQ3ZSZWdCaXRzT24ocHJpdiwgTUFDX1JFR19TT0ZUUFdSQ1RMLAorCQkJKFNPRlRQV1JDVExfU1dQRTIgfCBTT0ZUUFdSQ1RMX1NXUEUzKSk7CisJCWJyZWFrOworCX0KIAotICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKLSAgICAgICAgY2FzZSBSRl9BTDIyMzA6Ci0gICAgICAgIGNhc2UgUkZfQUwyMjMwUzoKLSAgICAgICAgY2FzZSBSRl9BSVJPSEE3MjMwOgotICAgICAgICBjYXNlIFJGX1ZUMzIyNjogICAgIC8vUm9iZXJ0WXU6MjAwNTExMTEKLSAgICAgICAgY2FzZSBSRl9WVDMyMjZEMDoKLSAgICAgICAgY2FzZSBSRl9WVDMzNDJBMDogICAvL1JvYmVydFl1OjIwMDYwNjA5Ci0gICAgICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UsIE1BQ19SRUdfU09GVFBXUkNUTCwgKFNPRlRQV1JDVExfU1dQRTIgfCBTT0ZUUFdSQ1RMX1NXUEUzKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gYlJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIENBUkR2U2V0QlNTTW9kZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCit2b2lkIENBUkR2U2V0QlNTTW9kZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7Ci0gICAgLy8gU2V0IEJCIGFuZCBwYWNrZXQgdHlwZSBhdCB0aGUgc2FtZSB0aW1lLi8ve3tSb2JlcnRZdToyMDA1MDIyMiwgQUw3MjMwIGhhdmUgdHdvIFRYIFBBIG91dHB1dCwgb25seSBjb25uZXQgdG8gYi9nIG5vdwotICAgIC8vIHNvIGluIDExYSBtb2RlIG5lZWQgdG8gc2V0IHRoZSBNQUMgUmVnMHg0QyB0byAxMWIvZyBtb2RlIHRvIHR1cm4gb24gUEEKLSAgICBpZiggKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzAgKSAmJiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEpICkKLSAgICB7Ci0gICAgICAgIE1BQ3ZTZXRCQlR5cGUocERldmljZSwgQkJfVFlQRV8xMUcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBNQUN2U2V0QkJUeXBlKHBEZXZpY2UsIHBEZXZpY2UtPmJ5QkJUeXBlKTsKLSAgICB9Ci0gICAgcERldmljZS0+YnlQYWNrZXRUeXBlID0gQ0FSRGJ5R2V0UGt0VHlwZShwRGV2aWNlKTsKKwlpZiAocHJpdi0+YnlSRlR5cGUgPT0gUkZfQUlST0hBNzIzMCAmJiBwcml2LT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkKKwkJTUFDdlNldEJCVHlwZShwcml2LCBCQl9UWVBFXzExRyk7CisJZWxzZQorCQlNQUN2U2V0QkJUeXBlKHByaXYsIHByaXYtPmJ5QkJUeXBlKTsKIAotICAgIGlmIChwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkgewotICAgICAgICBDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4ODgsIDB4MDMpOwotICAgIH0gZWxzZSBpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUIpIHsKLSAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweDg4LCAweDAyKTsKLSAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFHKSB7Ci0gICAgICAgIENvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHg4OCwgMHgwOCk7Ci0gICAgfQorCXByaXYtPmJ5UGFja2V0VHlwZSA9IENBUkRieUdldFBrdFR5cGUocHJpdik7CiAKLSAgICB2VXBkYXRlSUZTKHBEZXZpY2UpOwotICAgIENBUkR2U2V0UlNQSU5GKHBEZXZpY2UsICh1OClwRGV2aWNlLT5ieUJCVHlwZSk7CisJaWYgKHByaXYtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKQorCQl2bnRfY29udHJvbF9vdXRfdTgocHJpdiwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweDg4LCAweDAzKTsKKwllbHNlIGlmIChwcml2LT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQikKKwkJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywgMHg4OCwgMHgwMik7CisJZWxzZSBpZiAocHJpdi0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUcpCisJCXZudF9jb250cm9sX291dF91OChwcml2LCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsIDB4ODgsIDB4MDgpOwogCi0gICAgaWYgKCBwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSApIHsKLSAgICAgICAgLy9yZXF1ZXN0IGJ5IEphY2sgMjAwNS0wNC0yNgotICAgICAgICBpZiAocERldmljZS0+YnlSRlR5cGUgPT0gUkZfQUlST0hBNzIzMCkgewotICAgICAgICAgICAgcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDIwOwotICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEU3LCBwRGV2aWNlLT5hYnlCQlZHQVswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcERldmljZS0+YWJ5QkJWR0FbMl0gPSAweDEwOwotICAgICAgICBwRGV2aWNlLT5hYnlCQlZHQVszXSA9IDB4MTA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9yZXF1ZXN0IGJ5IEphY2sgMjAwNS0wNC0yNgotICAgICAgICBpZiAocERldmljZS0+YnlSRlR5cGUgPT0gUkZfQUlST0hBNzIzMCkgewotICAgICAgICAgICAgcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDFDOwotICAgICAgICAgICAgQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX0JCUkVHLCAweEU3LCBwRGV2aWNlLT5hYnlCQlZHQVswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcERldmljZS0+YWJ5QkJWR0FbMl0gPSAweDA7Ci0gICAgICAgIHBEZXZpY2UtPmFieUJCVkdBWzNdID0gMHgwOwotICAgIH0KKwl2VXBkYXRlSUZTKHByaXYpOworCUNBUkR2U2V0UlNQSU5GKHByaXYsICh1OClwcml2LT5ieUJCVHlwZSk7CisKKwlpZiAocHJpdi0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEpIHsKKwkJaWYgKHByaXYtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzApIHsKKwkJCXByaXYtPmFieUJCVkdBWzBdID0gMHgyMDsKKworCQkJdm50X2NvbnRyb2xfb3V0X3U4KHByaXYsIE1FU1NBR0VfUkVRVUVTVF9CQlJFRywKKwkJCQkJCTB4ZTcsIHByaXYtPmFieUJCVkdBWzBdKTsKKwkJfQorCisJCXByaXYtPmFieUJCVkdBWzJdID0gMHgxMDsKKwkJcHJpdi0+YWJ5QkJWR0FbM10gPSAweDEwOworCX0gZWxzZSB7CisJCWlmIChwcml2LT5ieVJGVHlwZSA9PSBSRl9BSVJPSEE3MjMwKSB7CisJCQlwcml2LT5hYnlCQlZHQVswXSA9IDB4MWM7CisKKwkJCXZudF9jb250cm9sX291dF91OChwcml2LCBNRVNTQUdFX1JFUVVFU1RfQkJSRUcsCisJCQkJCQkweGU3LCBwcml2LT5hYnlCQlZHQVswXSk7CisJCX0KKworCQlwcml2LT5hYnlCQlZHQVsyXSA9IDB4MDsKKwkJcHJpdi0+YWJ5QkJWR0FbM10gPSAweDA7CisJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NhcmQuaAppbmRleCBmODQzZTUwLi5hYzczNDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NhcmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NhcmQuaApAQCAtNDYsMTAgKzQ2LDEwIEBACiBzdHJ1Y3Qgdm50X3ByaXZhdGU7CiAKIHZvaWQgQ0FSRGJTZXRNZWRpYUNoYW5uZWwoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1MzIgdUNvbm5lY3Rpb25DaGFubmVsKTsKLXZvaWQgQ0FSRHZTZXRSU1BJTkYoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCBieUJCVHlwZSk7Ci12b2lkIHZVcGRhdGVJRlMoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKTsKLXZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKTsKLXZvaWQgQ0FSRGJBZGRCYXNpY1JhdGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1MTYgd1JhdGVJZHgpOwordm9pZCBDQVJEdlNldFJTUElORihzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTgpOwordm9pZCB2VXBkYXRlSUZTKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKTsKK3ZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUoc3RydWN0IHZudF9wcml2YXRlICopOwordm9pZCBDQVJEYkFkZEJhc2ljUmF0ZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTE2KTsKIGludCBDQVJEYklzT0ZETWluQmFzaWNSYXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSk7CiB2b2lkIENBUkR2QWRqdXN0VFNGKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggYnlSeFJhdGUsCiAJCXU2NCBxd0JTU1RpbWVzdGFtcCwgdTY0IHF3TG9jYWxUU0YpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NvbnRyb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2Nzg0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NvbnRyb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYsIDIwMDMgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoKLSAqIEZpbGU6IGNvbnRyb2wuYwotICoKLSAqIFB1cnBvc2U6IEhhbmRsZSBVU0IgY29udHJvbCBlbmRwb2ludAotICoKLSAqIEF1dGhvcjogSmVycnkgQ2hlbgotICoKLSAqIERhdGU6IEFwci4gNSwgMjAwNAotICoKLSAqIEZ1bmN0aW9uczoKLSAqICAgICAgQ09OVFJPTG5zUmVxdWVzdE91dCAtIFdyaXRlIHZhcmlhYmxlIGxlbmd0aCBieXRlcyB0byBNRU0vQkIvTUFDL0VFUFJPTQotICogICAgICBDT05UUk9MbnNSZXF1ZXN0SW4gLSBSZWFkIHZhcmlhYmxlIGxlbmd0aCBieXRlcyBmcm9tIE1FTS9CQi9NQUMvRUVQUk9NCi0gKiAgICAgIENvbnRyb2x2V3JpdGVCeXRlIC0gV3JpdGUgb25lIGJ5dGUgdG8gTUVNL0JCL01BQy9FRVBST00KLSAqICAgICAgQ29udHJvbHZSZWFkQnl0ZSAtIFJlYWQgb25lIGJ5dGUgZnJvbSBNRU0vQkIvTUFDL0VFUFJPTQotICogICAgICBDb250cm9sdk1hc2tCeXRlIC0gUmVhZCBvbmUgYnl0ZSBmcm9tIE1FTS9CQi9NQUMvRUVQUk9NIGFuZCBjbGVhci9zZXQKLSAqCQkJCXNvbWUgYml0cyBpbiB0aGUgc2FtZSBhZGRyZXNzCi0gKgotICogUmV2aXNpb24gSGlzdG9yeToKLSAqICAgICAgMDQtMDUtMjAwNCBKZXJyeSBDaGVuOiAgSW5pdGlhbCByZWxlYXNlCi0gKiAgICAgIDExLTI0LTIwMDQgV2FycmVuIEhzdTogQWRkIENvbnRyb2x2V3JpdGVCeXRlLCBDb250cm9sdlJlYWRCeXRlLAotICoJCQkJCUNvbnRyb2x2TWFza0J5dGUKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbnRyb2wuaCIKLSNpbmNsdWRlICJybmRpcy5oIgotCi0vKiBzdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsgICovCi0vKiBzdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7ICovCi0KLXZvaWQgQ29udHJvbHZXcml0ZUJ5dGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCByZWcsIHU4IHJlZ19vZmYsCi0JCQl1OCBkYXRhKQotewotCi0JQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLCBNRVNTQUdFX1RZUEVfV1JJVEUsIHJlZ19vZmYsIHJlZywKLQkJc2l6ZW9mKHU4KSwgJmRhdGEpOwotCi0JcmV0dXJuOwotfQotCi12b2lkIENvbnRyb2x2UmVhZEJ5dGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCByZWcsIHU4IHJlZ19vZmYsCi0JCQl1OCAqZGF0YSkKLXsKLQlDT05UUk9MbnNSZXF1ZXN0SW4ocERldmljZSwgTUVTU0FHRV9UWVBFX1JFQUQsCi0JCQlyZWdfb2ZmLCByZWcsIHNpemVvZih1OCksIGRhdGEpOwotCXJldHVybjsKLX0KLQotdm9pZCBDb250cm9sdk1hc2tCeXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggcmVnX3R5cGUsIHU4IHJlZ19vZmYsCi0JCQl1OCByZWdfbWFzaywgdTggZGF0YSkKLXsKLQl1OCByZWdfZGF0YVsyXTsKLQotCXJlZ19kYXRhWzBdID0gZGF0YTsKLQlyZWdfZGF0YVsxXSA9IHJlZ19tYXNrOwotCi0JQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLCBNRVNTQUdFX1RZUEVfV1JJVEVfTUFTSywgcmVnX29mZiwKLQkJCXJlZ190eXBlLCBBUlJBWV9TSVpFKHJlZ19kYXRhKSwgcmVnX2RhdGEpOwotCi0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NvbnRyb2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhOWI5Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NvbnRyb2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYsIDIwMDMgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoKLSAqIEZpbGU6IGNvbnRyb2wuaAotICoKLSAqIFB1cnBvc2U6Ci0gKgotICogQXV0aG9yOiBKZXJyeSBDaGVuCi0gKgotICogRGF0ZTogQXByLiA1LCAyMDA0Ci0gKgotICovCi0KLSNpZm5kZWYgX19DT05UUk9MX0hfXwotI2RlZmluZSBfX0NPTlRST0xfSF9fCi0KLSNpbmNsdWRlICJkZXZpY2UuaCIKLSNpbmNsdWRlICJ1c2JwaXBlLmgiCi0KLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdE91dChEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpIFwKLQlQSVBFbnNDb250cm9sT3V0KERldmljZSwgUmVxdWVzdCwgVmFsdWUsIEluZGV4LCBMZW5ndGgsIEJ1ZmZlcikKLQotI2RlZmluZSBDT05UUk9MbnNSZXF1ZXN0T3V0QXN5bihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpIFwKLQlQSVBFbnNDb250cm9sT3V0QXN5bihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpCi0KLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdEluKERldmljZSwgUmVxdWVzdCwgVmFsdWUsIEluZGV4LCBMZW5ndGgsIEJ1ZmZlcikgXAotCVBJUEVuc0NvbnRyb2xJbihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpCi0KLXZvaWQgQ29udHJvbHZXcml0ZUJ5dGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCByZWcsIHU4IHJlZ19vZmYsCi0JCQl1OCBkYXRhKTsKLQotdm9pZCBDb250cm9sdlJlYWRCeXRlKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggcmVnLCB1OCByZWdfb2ZmLAotCQkJdTggKmRhdGEpOwotCi12b2lkIENvbnRyb2x2TWFza0J5dGUoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCByZWdfdHlwZSwgdTggcmVnX29mZiwKLQkJCXU4IHJlZ19tYXNrLCB1OCBkYXRhKTsKLQotI2VuZGlmIC8qIF9fQ09OVFJPTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGF0YXJhdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGF0YXJhdGUuYwppbmRleCA1NDdkYjZmLi44MDMyZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RhdGFyYXRlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kYXRhcmF0ZS5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiZGF0YXJhdGUuaCIKICNpbmNsdWRlICJjYXJkLmgiCiAjaW5jbHVkZSAiYmFzZWJhbmQuaCIKLSNpbmNsdWRlICJzcm9tLmgiCiAjaW5jbHVkZSAicmYuaCIKIAogLyogc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9ERUJVRzsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXNjLmgKaW5kZXggN2M2ZGQ1Zi4uNjE3ZDQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXNjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXNjLmgKQEAgLTM5LDI4ICszOSwxNSBAQAogLyogbWF4IHRyYW5zbWl0IG9yIHJlY2VpdmUgYnVmZmVyIHNpemUgKi8KICNkZWZpbmUgQ0JfTUFYX0JVRl9TSVpFICAgICAyOTAwVSAgICAgICAvKiBOT1RFOiBtdXN0IGJlIG11bHRpcGxlIG9mIDQgKi8KIAotLyogbWF4IFRYIGJ1ZmZlciBzaXplICovCi0jZGVmaW5lIENCX01BWF9UWF9CVUZfU0laRSAgICAgICAgQ0JfTUFYX0JVRl9TSVpFCi0vKiBtYXggUlggYnVmZmVyIHNpemUgd2hlbiBub3QgdXNlIE11bHRpLVJEICovCi0jZGVmaW5lIENCX01BWF9SWF9CVUZfU0laRV9OT1JNQUwgQ0JfTUFYX0JVRl9TSVpFCi0KLSNkZWZpbmUgQ0JfQkVBQ09OX0JVRl9TSVpFICA1MTJVICAgICAgICAvKiBkZWZhdWx0IGJlYWNvbiBidWZmZXIgc2l6ZSAqLwotCiAjZGVmaW5lIE1BWF9UT1RBTF9TSVpFX1dJVEhfQUxMX0hFQURFUlMgQ0JfTUFYX0JVRl9TSVpFCiAKICNkZWZpbmUgTUFYX0lOVEVSUlVQVF9TSVpFICAgICAgICAgICAgICAzMgogCi0jZGVmaW5lIFJYX0JMT0NLUyAgICAgICAgICAgNjQgICAgICAgICAgLyogZnJvbSAweDYwIHRvIDB4QTAgKi8KLSNkZWZpbmUgVFhfQkxPQ0tTICAgICAgICAgICAzMiAgICAgICAgICAvKiBmcm9tIDB4QTAgdG8gMHhDMCAqLwotCiAjZGVmaW5lIENCX01BWF9SWF9ERVNDICAgICAgMTI4ICAgICAgICAgLyogbWF4ICMgb2YgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgQ0JfTUlOX1JYX0RFU0MgICAgICAxNiAgICAgICAgICAvKiBtaW4gIyBvZiBSWCBkZXNjcmlwdG9ycyAqLwogI2RlZmluZSBDQl9NQVhfVFhfREVTQyAgICAgIDEyOCAgICAgICAgIC8qIG1heCAjIG9mIGRlc2NyaXB0b3JzICovCiAjZGVmaW5lIENCX01JTl9UWF9ERVNDICAgICAgMTYgICAgICAgICAgLyogbWluICMgb2YgVFggZGVzY3JpcHRvcnMgKi8KIAotI2RlZmluZSBDQl9SRF9OVU0gICAgICAgICAgIDY0ICAgICAgICAgIC8qIGRlZmF1bHQgIyBvZiBSRCAqLwotI2RlZmluZSBDQl9URF9OVU0gICAgICAgICAgIDY0ICAgICAgICAgIC8qIGRlZmF1bHQgIyBvZiBURCAqLwotCiAvKgogICogYml0cyBpbiB0aGUgUlNSIHJlZ2lzdGVyCiAgKi8KQEAgLTkxLDE1ICs3OCw2IEBACiAjZGVmaW5lIFRTUl9BQ0tEQVRBICAgICAgICAgMHgwMgogI2RlZmluZSBUU1JfVkFMSUQgICAgICAgICAgIDB4MDEKIAotI2RlZmluZSBDQl9QUk9UT0NPTF9SRVNFUlZFRF9TRUNUSU9OICAgIDE2Ci0KLS8qCi0gKiBpZiByZXRyaWVzIGV4Y2VlZCAxNSB0aW1lcywgVFggd2lsbCBhYm9ydCwgYW5kCi0gKiBpZiBUWCBmaWZvIHVuZGVyZmxvdywgVFggd2lsbCBmYWlsCi0gKiB3ZSBzaG91bGQgdHJ5IHRvIHJlc2VuZCBpdAotICovCi0jZGVmaW5lIENCX01BWF9UWF9BQk9SVF9SRVRSWSAgIDMKLQogI2RlZmluZSBGSUZPQ1RMX0FVVE9fRkJfMSAgIDB4MTAwMAogI2RlZmluZSBGSUZPQ1RMX0FVVE9fRkJfMCAgIDB4MDgwMAogI2RlZmluZSBGSUZPQ1RMX0dSUEFDSyAgICAgIDB4MDQwMApAQCAtMTI2LDUwICsxMDQsNCBAQAogI2RlZmluZSBGUkFHQ1RMX1NUQUZSQUcgICAgIDB4MDAwMQogI2RlZmluZSBGUkFHQ1RMX05PTkZSQUcgICAgIDB4MDAwMAogCi0jZGVmaW5lIFRZUEVfVFhETUEwICAgICAwCi0jZGVmaW5lIFRZUEVfQUMwRE1BICAgICAxCi0jZGVmaW5lIFRZUEVfQVRJTURNQSAgICAyCi0jZGVmaW5lIFRZUEVfU1lOQ0RNQSAgICAzCi0jZGVmaW5lIFRZUEVfTUFYVEQgICAgICAyCi0KLSNkZWZpbmUgVFlQRV9CRUFDT05ETUEgIDQKLQotI2RlZmluZSBUWVBFX1JYRE1BMCAgICAgMAotI2RlZmluZSBUWVBFX1JYRE1BMSAgICAgMQotI2RlZmluZSBUWVBFX01BWFJEICAgICAgMgotCi0vKiBURF9JTkZPIGZsYWdzIGNvbnRyb2wgYml0ICovCi0jZGVmaW5lIFREX0ZMQUdTX05FVElGX1NLQiAweDAxIC8qIGNoZWNrIGlmIG5lZWQgcmVsZWFzZSBza2IgKi8KLSNkZWZpbmUgVERfRkxBR1NfUFJJVl9TS0IgIDB4MDIgLyogY2hlY2sgaWYgY2FsbGVkIGZyb20gcHJpdmF0ZSBza2IoaG9zdGFwKSAqLwotI2RlZmluZSBURF9GTEFHU19QU19SRVRSWSAgMHgwNCAvKiBjaGVjayBpZiBQUyBTVEEgZnJhbWUgcmUtdHJhbnNtaXQgKi8KLQotLyoKLSAqIFRYIEZJRk8gaGVhZGVyCi0gKi8KLXR5cGVkZWYgc3RydWN0IHRhZ1NCRUFDT05DdGwgewotCXUzMiBCdWZSZWFkeToxOwotCXUzMiBUU0Y6MTU7Ci0JdTMyIEJ1ZkxlbjoxMTsKLQl1MzIgUmVzZXJ2ZWQ6NTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQotU0JFQUNPTkN0bDsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU1NlY3JldEtleSB7Ci0JdTMyIGR3TG93RHdvcmQ7Ci0gICAgdTggICAgYnlIaWdoQnl0ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQotU1NlY3JldEtleTsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU0tleUVudHJ5IHsKLSAgICB1OCAgYWJ5QWRkckhpWzJdOwotICAgIHUxNiAgd0tDVEw7Ci0gICAgdTggIGFieUFkZHJMb1s0XTsKLQl1MzIgZHdLZXkwWzRdOwotCXUzMiBkd0tleTFbNF07Ci0JdTMyIGR3S2V5Mls0XTsKLQl1MzIgZHdLZXkzWzRdOwotCXUzMiBkd0tleTRbNF07Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKLVNLZXlFbnRyeTsKLQogI2VuZGlmIC8qIF9fREVTQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RldmljZS5oCmluZGV4IGUyYWJlM2QuLjViNjRjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2UuaApAQCAtNTIsNTQgKzUyLDM2IEBACiAjdW5kZWYgREVWSUNFX0VUSFRPT0xfSU9DVExfU1VQUE9SVAogI2VuZGlmCiAKLS8qIHBsZWFzZSBjb3B5IGJlbG93IG1hY3JvIHRvIGRyaXZlcl9ldmVudC5jIGZvciBBUEkgKi8KLSNkZWZpbmUgUlRfSU5TTU9EX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMQotI2RlZmluZSBSVF9VUERFVl9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMgotI2RlZmluZSBSVF9ESVNDT05ORUNURURfRVZFTlRfRkxBRyAgICAgICAgICAgICAgIDB4MDEwMwotI2RlZmluZSBSVF9XUEFDT05ORUNURURfRVZFTlRfRkxBRyAgICAgICAgICAgICAweDAxMDQKLSNkZWZpbmUgUlRfRE9XTkRFVl9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA1Ci0jZGVmaW5lIFJUX1JNTU9EX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDYKKyNkZWZpbmUgTUFYX1JBVEUJCQkxMgogCiAvKgogICogZGV2aWNlIHNwZWNpZmljCiAgKi8KIAotI2luY2x1ZGUgImRldmljZV9jZmcuaCIKICNpbmNsdWRlICI4MDIxMWhkci5oIgogI2luY2x1ZGUgInRldGhlci5oIgogI2luY2x1ZGUgIndtZ3IuaCIKICNpbmNsdWRlICJ3Y21kLmgiCi0jaW5jbHVkZSAic3JvbS5oIgogI2luY2x1ZGUgInJjNC5oIgogI2luY2x1ZGUgImRlc2MuaCIKICNpbmNsdWRlICJrZXkuaCIKICNpbmNsdWRlICJjYXJkLmgiCi0jaW5jbHVkZSAicm5kaXMuaCIKIAogI2RlZmluZSBWTlRfVVNCX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgIDB4MTYwYQogI2RlZmluZSBWTlRfVVNCX1BST0RVQ1RfSUQgICAgICAgICAgICAgICAgICAgIDB4MzE4NAogCi0jZGVmaW5lIE1BQ19NQVhfQ09OVEVYVF9SRUcgICAgICgyNTYrMTI4KQorI2RlZmluZSBERVZJQ0VfTkFNRQkJCSJ2dDY2NTYiCisjZGVmaW5lIERFVklDRV9GVUxMX0RSVl9OQU0JCSJWSUEgTmV0d29ya2luZyBXaXJlbGVzcyBMQU4gVVNCIERyaXZlciIKIAotI2RlZmluZSBNQVhfTVVMVElDQVNUX0FERFJFU1NfTlVNICAgICAgIDMyCi0jZGVmaW5lIE1VTFRJQ0FTVF9BRERSRVNTX0xJU1RfU0laRSAgICAgKE1BWF9NVUxUSUNBU1RfQUREUkVTU19OVU0gKiBFVEhfQUxFTikKKyNkZWZpbmUgREVWSUNFX1ZFUlNJT04JCQkiMS4xOV8xMiIKKworI2RlZmluZSBDT05GSUdfUEFUSAkJCSIvZXRjL3ZudGNvbmZpZ3VyYXRpb24uZGF0IgorCisjZGVmaW5lIE1BWF9VSU5UUwkJCTgKKyNkZWZpbmUgT1BUSU9OX0RFRkFVTFQJCQl7IFswIC4uLiBNQVhfVUlOVFMtMV0gPSAtMX0KIAogI2RlZmluZSBEVVBMSUNBVEVfUlhfQ0FDSEVfTEVOR1RIICAgICAgIDUKIAotI2RlZmluZSBOVU1fS0VZX0VOVFJZICAgICAgICAgICAgICAgICAgIDExCi0KLSNkZWZpbmUgVFhfV0VQX05PTkUgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRYX1dFUF9PVEYgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBUWF9XRVBfU1cgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVFhfV0VQX1NXT1RQICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFRYX1dFUF9PVFBTVyAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUWF9XRVBfU1cyMzIgICAgICAgICAgICAgICAgICAgIDUKLQotI2RlZmluZSBLRVlTRUxfV0VQNDAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgS0VZU0VMX1dFUDEwNCAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEtFWVNFTF9US0lQICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBLRVlTRUxfQ0NNUCAgICAgICAgICAgICAgICAgICAgIDMKLQogI2RlZmluZSBBVVRPX0ZCX05PTkUgICAgICAgICAgICAwCiAjZGVmaW5lIEFVVE9fRkJfMCAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQVVUT19GQl8xICAgICAgICAgICAgICAgMgpAQCAtMTE5LDIzICsxMDEsODYgQEAKICNkZWZpbmUgQU5UX1JYQSAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBBTlRfUlhCICAgICAgICAgICAgICAgICAzCiAKLSNkZWZpbmUgTUFYQ0hFQ0tIQU5HQ05UICAgICAgICAgNAotCi0vKiBQYWNrZXQgdHlwZSAqLwotI2RlZmluZSBUWF9QS1RfVU5JICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFRYX1BLVF9NVUxUSSAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgVFhfUEtUX0JST0FEICAgICAgICAgICAgMHgwMgotCiAjZGVmaW5lIEJCX1ZHQV9MRVZFTCAgICAgICAgICAgIDQKICNkZWZpbmUgQkJfVkdBX0NIQU5HRV9USFJFU0hPTEQgMwogCisjZGVmaW5lIEVFUF9NQVhfQ09OVEVYVF9TSVpFICAgIDI1NgorCisvKiBDb250ZW50cyBpbiB0aGUgRUVQUk9NICovCisjZGVmaW5lIEVFUF9PRlNfUEFSCQkweDAKKyNkZWZpbmUgRUVQX09GU19BTlRFTk5BCQkweDE3CisjZGVmaW5lIEVFUF9PRlNfUkFESU9DVEwJMHgxOAorI2RlZmluZSBFRVBfT0ZTX1JGVFlQRQkJMHgxYgorI2RlZmluZSBFRVBfT0ZTX01JTkNIQU5ORUwJMHgxYworI2RlZmluZSBFRVBfT0ZTX01BWENIQU5ORUwJMHgxZAorI2RlZmluZSBFRVBfT0ZTX1NJR05BVFVSRQkweDFlCisjZGVmaW5lIEVFUF9PRlNfWk9ORVRZUEUJMHgxZgorI2RlZmluZSBFRVBfT0ZTX1JGVEFCTEUJCTB4MjAKKyNkZWZpbmUgRUVQX09GU19QV1JfQ0NLCQkweDIwCisjZGVmaW5lIEVFUF9PRlNfU0VUUFRfQ0NLCTB4MjEKKyNkZWZpbmUgRUVQX09GU19QV1JfT0ZETUcJMHgyMworCisjZGVmaW5lIEVFUF9PRlNfQ0FMSUJfVFhfSVEJMHgyNAorI2RlZmluZSBFRVBfT0ZTX0NBTElCX1RYX0RDCTB4MjUKKyNkZWZpbmUgRUVQX09GU19DQUxJQl9SWF9JUQkweDI2CisKKyNkZWZpbmUgRUVQX09GU19NQUpPUl9WRVIJMHgyZQorI2RlZmluZSBFRVBfT0ZTX01JTk9SX1ZFUgkweDJmCisKKyNkZWZpbmUgRUVQX09GU19DQ0tfUFdSX1RCTAkweDMwCisjZGVmaW5lIEVFUF9PRlNfT0ZETV9QV1JfVEJMCTB4NDAKKyNkZWZpbmUgRUVQX09GU19PRkRNQV9QV1JfVEJMCTB4NTAKKworLyogQml0cyBpbiBFRVBfT0ZTX0FOVEVOTkEgKi8KKyNkZWZpbmUgRUVQX0FOVEVOTkFfTUFJTgkweDEKKyNkZWZpbmUgRUVQX0FOVEVOTkFfQVVYCQkweDIKKyNkZWZpbmUgRUVQX0FOVElOVgkJMHg0CisKKy8qIEJpdHMgaW4gRUVQX09GU19SQURJT0NUTCAqLworI2RlZmluZSBFRVBfUkFESU9DVExfRU5BQkxFCTB4ODAKKworLyogY29udHJvbCBjb21tYW5kcyAqLworI2RlZmluZSBNRVNTQUdFX1RZUEVfUkVBRAkJMHgxCisjZGVmaW5lIE1FU1NBR0VfVFlQRV9XUklURQkJMHgwCisjZGVmaW5lIE1FU1NBR0VfVFlQRV9MT0NLX09SCQkweDIKKyNkZWZpbmUgTUVTU0FHRV9UWVBFX0xPQ0tfQU5ECQkweDMKKyNkZWZpbmUgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0sJCTB4NAorI2RlZmluZSBNRVNTQUdFX1RZUEVfQ0FSRElOSVQJCTB4NQorI2RlZmluZSBNRVNTQUdFX1RZUEVfSU5JVF9SU1AJCTB4NgorI2RlZmluZSBNRVNTQUdFX1RZUEVfTUFDU0hVVERPV04JMHg3CisjZGVmaW5lIE1FU1NBR0VfVFlQRV9TRVRLRVkJCTB4OAorI2RlZmluZSBNRVNTQUdFX1RZUEVfQ0xSS0VZRU5UUlkJMHg5CisjZGVmaW5lIE1FU1NBR0VfVFlQRV9XUklURV9NSVNDRkYJMHhhCisjZGVmaW5lIE1FU1NBR0VfVFlQRV9TRVRfQU5UTUQJCTB4YgorI2RlZmluZSBNRVNTQUdFX1RZUEVfU0VMRUNUX0NIQU5OTEUJMHhjCisjZGVmaW5lIE1FU1NBR0VfVFlQRV9TRVRfVFNGVEJUVAkweGQKKyNkZWZpbmUgTUVTU0FHRV9UWVBFX1NFVF9TU1RJRlMJCTB4ZQorI2RlZmluZSBNRVNTQUdFX1RZUEVfQ0hBTkdFX0JCVFlQRQkweGYKKyNkZWZpbmUgTUVTU0FHRV9UWVBFX0RJU0FCTEVfUFMJCTB4MTAKKyNkZWZpbmUgTUVTU0FHRV9UWVBFX1dSSVRFX0lGUkYJCTB4MTEKKworLyogY29tbWFuZCByZWFkL3dyaXRlKGluZGV4KSAqLworI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfTUVNCQkweDEKKyNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX0JCUkVHCQkweDIKKyNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRwkJMHgzCisjZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9FRVBST00JCTB4NAorI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfVFNGCQkweDUKKyNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX1RCVFQJCTB4NgorI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfQkJBR0MJCTB4NworI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfVkVSU0lPTgkJMHg4CisjZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9SRl9JTklUCQkweDkKKyNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX1JGX0lOSVQyCTB4YQorI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfUkZfQ0gwCQkweGIKKyNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX1JGX0NIMQkJMHhjCisjZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9SRl9DSDIJCTB4ZAorCisvKiBVU0IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQl9SRUc0CQkJMHg2MDQKKwogI2lmbmRlZiBSVU5fQVQKICNkZWZpbmUgUlVOX0FUKHgpICAgICAgICAgICAgICAgICAgICAgICAoamlmZmllcysoeCkpCiAjZW5kaWYKIAotLyogRE1BIHJlbGF0ZWQgKi8KLSNkZWZpbmUgUkVTRVJWX0FDMERNQSAgICAgICAgICAgICAgICAgICA0Ci0KICNkZWZpbmUgUFJJVkFURV9NZXNzYWdlICAgICAgICAgICAgICAgICAwCiAKICNkZWZpbmUgREJHX1BSVChsLCBwLCBhcmdzLi4uKSB7IGlmIChsIDw9IG1zZ2xldmVsKSBwcmludGsocCwgIyNhcmdzKTsgfQpAQCAtMTUzLDYgKzE5OCwyMyBAQAogI2RlZmluZSBERVZJQ0VfSU5JVF9SRVNFVAkweDEgLyogcmVzZXQgaW5pdCBvciBEeCB0byBEMCBwb3dlciByZW1haW4gKi8KICNkZWZpbmUgREVWSUNFX0lOSVRfRFhQTAkweDIgLyogRHggdG8gRDAgcG93ZXIgbG9zdCBpbml0ICovCiAKKy8qIERldmljZSBpbml0ICovCitzdHJ1Y3Qgdm50X2NtZF9jYXJkX2luaXQgeworCXU4IGluaXRfY2xhc3M7CisJdTggZXhpc3Rfc3dfbmV0X2FkZHI7CisJdTggc3dfbmV0X2FkZHJbNl07CisJdTggc2hvcnRfcmV0cnlfbGltaXQ7CisJdTggbG9uZ19yZXRyeV9saW1pdDsKK307CisKK3N0cnVjdCB2bnRfcnNwX2NhcmRfaW5pdCB7CisJdTggc3RhdHVzOworCXU4IG5ldF9hZGRyWzZdOworCXU4IHJmX3R5cGU7CisJdTggbWluX2NoYW5uZWw7CisJdTggbWF4X2NoYW5uZWw7Cit9OworCiAvKiBVU0IgKi8KIAogLyoKQEAgLTE3NiwxMyArMjM4LDEzIEBACiAKIC8qIHVzZWQgdG8gdHJhY2sgYnVsayBvdXQgaXJwcyAqLwogc3RydWN0IHZudF91c2Jfc2VuZF9jb250ZXh0IHsKLQl2b2lkICpwRGV2aWNlOwotCXN0cnVjdCBza19idWZmICpwUGFja2V0OwotCXN0cnVjdCB1cmIgKnBVcmI7Ci0JdW5zaWduZWQgaW50IHVCdWZMZW47CisJdm9pZCAqcHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBpbnQgYnVmX2xlbjsKIAl1OCB0eXBlOwotCWJvb2wgYkJvb2xJblVzZTsKLQl1bnNpZ25lZCBjaGFyIERhdGFbTUFYX1RPVEFMX1NJWkVfV0lUSF9BTExfSEVBREVSU107CisJYm9vbCBpbl91c2U7CisJdW5zaWduZWQgY2hhciBkYXRhW01BWF9UT1RBTF9TSVpFX1dJVEhfQUxMX0hFQURFUlNdOwogfTsKIAogLyogdHggcGFja2V0IGluZm8gZm9yIHJ4dHggKi8KQEAgLTI3OCw5ICszNDAsOSBAQAogCiAvKiBUaGUgcmVjZWl2ZSBkdXBsaWNhdGUgZGV0ZWN0aW9uIGNhY2hlIGVudHJ5ICovCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ2FjaGVFbnRyeXsKLSAgICB1MTYgICAgICAgIHdGbVNlcXVlbmNlOwotICAgIHU4ICAgICAgICBhYnlBZGRyMltFVEhfQUxFTl07Ci0gICAgdTE2ICAgICAgICB3RnJhbWVDdGw7CisJX19sZTE2IHdGbVNlcXVlbmNlOworCXU4IGFieUFkZHIyW0VUSF9BTEVOXTsKKwlfX2xlMTYgd0ZyYW1lQ3RsOwogfSBTQ2FjaGVFbnRyeSwgKlBTQ2FjaGVFbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NhY2hlewpAQCAtMzA5LDI5ICszNzEsOSBAQAogCiAvKiBmbGFncyBmb3Igb3B0aW9ucyAqLwogI2RlZmluZSAgICAgREVWSUNFX0ZMQUdTX1VOUExVRyAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgICAgIERFVklDRV9GTEFHU19QUkVBTUJMRV9UWVBFICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lICAgICBERVZJQ0VfRkxBR1NfT1BfTU9ERSAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSAgICAgREVWSUNFX0ZMQUdTX1BTX01PREUgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUJCURFVklDRV9GTEFHU184MDIxMWhfTU9ERQkgMHgwMDAwMDAxMFVMCiAKIC8qIGZsYWdzIGZvciBkcml2ZXIgc3RhdHVzICovCiAjZGVmaW5lICAgICBERVZJQ0VfRkxBR1NfT1BFTkVEICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSAgICAgREVWSUNFX0ZMQUdTX1dPTF9FTkFCTEVEICAgICAweDAwMDgwMDAwVUwKLS8qIGZsYWdzIGZvciBjYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgICAgIERFVklDRV9GTEFHU19UWF9BTElHTiAgICAgICAgMHgwMTAwMDAwMFVMCi0jZGVmaW5lICAgICBERVZJQ0VfRkxBR1NfSEFWRV9DQU0gICAgICAgIDB4MDIwMDAwMDBVTAotI2RlZmluZSAgICAgREVWSUNFX0ZMQUdTX0ZMT1dfQ1RSTCAgICAgICAweDA0MDAwMDAwVUwKLQotLyogZmxhZ3MgZm9yIE1JSSBzdGF0dXMgKi8KLSNkZWZpbmUgICAgIERFVklDRV9MSU5LX0ZBSUwgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lICAgICBERVZJQ0VfU1BFRURfMTAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSAgICAgREVWSUNFX1NQRUVEXzEwMCAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgICAgIERFVklDRV9TUEVFRF8xMDAwICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lICAgICBERVZJQ0VfRFVQTEVYX0ZVTEwgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSAgICAgREVWSUNFX0FVVE9ORUdfRU5BQkxFICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgICAgIERFVklDRV9GT1JDRURfQllfRUVQUk9NICAgICAgMHgwMDAwMDA0MFVMCi0vKiBmb3IgZGV2aWNlX3NldF9tZWRpYV9kdXBsZXggKi8KLSNkZWZpbmUgICAgIERFVklDRV9MSU5LX0NIQU5HRSAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAKIHR5cGVkZWYgc3RydWN0IF9fZGV2aWNlX29wdCB7CiAJaW50IG5SeERlc2NzMDsgIC8qIG51bWJlciBvZiBSWCBkZXNjcmlwdG9ycyAwICovCkBAIC0zNjMsMTEgKzQwNSwxMCBAQAogCXU4IGJ5UnhNb2RlOwogCiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtdXRleCB1c2JfbG9jazsKIAogCXUzMiByeF9ieXRlczsKIAotCXU4IGJ5UmV2SWQ7Ci0KIAl1MzIgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBGbGFnczsKIApAQCAtMzc5LDkgKzQyMCw3IEBACiAJdTMyIHVDdXJyZW50REZDQklkeDsKIAogCS8qIFVTQiAqLwotCXN0cnVjdCB1cmIgKnBDb250cm9sVVJCOwogCXN0cnVjdCB1cmIgKnBJbnRlcnJ1cHRVUkI7Ci0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCBzVXNiQ3RsUmVxdWVzdDsKIAl1MzIgaW50X2ludGVydmFsOwogCiAJLyogVmFyaWFibGVzIHRvIHRyYWNrIHJlc291cmNlcyBmb3IgdGhlIEJVTEsgSW4gUGlwZSAqLwpAQCAtNDUzLDMwICs0OTIsNiBAQAogCXU4IGJ5UmFkaW9DdGw7CiAJdTggYkhXUmFkaW9PZmY7CiAKLQkvKiBTUTMgZnVuY3Rpb25zIGZvciBhbnRlbm5hIGRpdmVyc2l0eSAqLwotCXN0cnVjdCB0aW1lcl9saXN0IFRpbWVyU1EzVG1heDE7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgVGltZXJTUTNUbWF4MjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBUaW1lclNRM1RtYXgzOwotCi0JaW50IGJEaXZlcnNpdHlSZWdDdGxPTjsKLQlpbnQgYkRpdmVyc2l0eUVuYWJsZTsKLQl1bnNpZ25lZCBsb25nIHVsRGl2ZXJzaXR5TlZhbHVlOwotCXVuc2lnbmVkIGxvbmcgdWxEaXZlcnNpdHlNVmFsdWU7Ci0JdTggYnlUTWF4OwotCXU4IGJ5VE1heDI7Ci0JdTggYnlUTWF4MzsKLQl1bnNpZ25lZCBsb25nIHVsU1EzVEg7Ci0KLQl1bnNpZ25lZCBsb25nIHVEaXZlcnNpdHlDbnQ7Ci0JdTggYnlBbnRlbm5hU3RhdGU7Ci0JdW5zaWduZWQgbG9uZyB1bFJhdGlvX1N0YXRlMDsKLQl1bnNpZ25lZCBsb25nIHVsUmF0aW9fU3RhdGUxOwotCXVuc2lnbmVkIGxvbmcgdWxTUTNfU3RhdGUwOwotCXVuc2lnbmVkIGxvbmcgdWxTUTNfU3RhdGUxOwotCi0JdW5zaWduZWQgbG9uZyBhdWxTUTNWYWxbTUFYX1JBVEVdOwotCXVuc2lnbmVkIGxvbmcgYXVsUGt0TnVtW01BWF9SQVRFXTsKLQogCS8qIElGUyAmIEN3ICovCiAJdTMyIHVTSUZTOyAgLyogQ3VycmVudCBTSUZTICovCiAJdTMyIHVESUZTOyAgLyogQ3VycmVudCBESUZTICovCkBAIC00OTYsMTQgKzUxMSw5IEBACiAJdTggYnlCQlR5cGU7IC8qIDA6IDExQSwgMToxMUIsIDI6MTFHICovCiAJdTggYnlQYWNrZXRUeXBlOyAvKiAwOjExYSAxOjExYiAyOjExZ2IgMzoxMWdhICovCiAJdTE2IHdCYXNpY1JhdGU7Ci0JdTggYnlBQ0tSYXRlOwogCXU4IGJ5VG9wT0ZETUJhc2ljUmF0ZTsKIAl1OCBieVRvcENDS0Jhc2ljUmF0ZTsKIAotCXUzMiBkd0FvdG9SYXRlVHhPa0NudDsKLQl1MzIgZHdBb3RvUmF0ZVR4RmFpbENudDsKLQl1MzIgZHdFcnJvclJhdGVUaHJlc2hvbGRbMTNdOwotCXUzMiBkd1RQVGFibGVbTUFYX1JBVEVdOwogCXU4IGFieUVFUFJPTVtFRVBfTUFYX0NPTlRFWFRfU0laRV07ICAvKnUzMiBhbGlnbm1lbnQgKi8KIAogCXU4IGJ5TWluQ2hhbm5lbDsKQEAgLTU0Miw3ICs1NTIsNiBAQAogCiAJdTMyIGR3TWF4UmVjZWl2ZUxpZmV0aW1lOyAgLyogZG90MTFNYXhSZWNlaXZlTGlmZXRpbWUgKi8KIAotCWludCBiQ0NLOwogCWludCBiRW5jcnlwdGlvbkVuYWJsZTsKIAlpbnQgYlNob3J0U2xvdFRpbWU7CiAJaW50IGJQcm90ZWN0TW9kZTsKQEAgLTU2OSw3ICs1NzgsNiBAQAogCWludCBiQmVhY29uU2VudDsKIAlpbnQgYkZpeFJhdGU7CiAJdTggYnlDdXJyZW50Q2g7Ci0JdTMyIHVTY2FuVGltZTsKIAogCUNNRF9TVEFURSBlQ29tbWFuZFN0YXRlOwogCkBAIC02MDAsNyArNjA4LDYgQEAKIAl1OCBiU2FtZUJTU0N1ck51bTsKIAlpbnQgYlJvYW1pbmc7CiAJaW50IGIxMWhFYWJsZTsKLQl1bnNpZ25lZCBsb25nIHVsVHhQb3dlcjsKIAogCS8qIEVuY3J5cHRpb24gKi8KIAlORElTXzgwMl8xMV9XRVBfU1RBVFVTIGVFbmNyeXB0aW9uU3RhdHVzOwpAQCAtNjI5LDcgKzYzNiw2IEBACiAJaW50IGJSeE1JQ0ZhaWw7CiAKIAkvKiBGb3IgVXBkYXRlIEJhc2VCYW5kIFZHQSBHYWluIE9mZnNldCAqLwotCWludCBiVXBkYXRlQkJWR0E7CiAJdTMyIHVCQlZHQURpZmZDb3VudDsKIAl1OCBieUJCVkdBTmV3OwogCXU4IGJ5QkJWR0FDdXJyZW50OwpAQCAtNjQxLDE4ICs2NDcsNiBAQAogCiAJaW50IGJSYWRpb0NtZDsKIAotCS8qIEZvciBGT0UgVHVuaW5nICovCi0JdTggIGJ5Rk9FVHVuaW5nOwotCi0JLyogRm9yIEF1dG8gUG93ZXIgVHVubmluZyAqLwotCXU4ICBieUF1dG9Qd3JUdW5uaW5nOwotCi0JLyogQmFzZUJhbmQgTG9vcGJhY2sgVXNlICovCi0JdTggYnlCQkNSNGQ7Ci0JdTggYnlCQkNSYzk7Ci0JdTggYnlCQkNSODg7Ci0JdTggYnlCQkNSMDk7Ci0KIAkvKiBjb21tYW5kIHRpbWVyICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBydW5fY29tbWFuZF93b3JrOwogCS8qIE9uZSBzZWNvbmQgY2FsbGJhY2sgKi8KQEAgLTY4OSwxMyArNjgzLDYgQEAKIAlpbnQgYndleHRzdGVwMzsKIAlpbnQgYldQQVN1cHBXZXh0RW5hYmxlZDsKIAotCS8qIHVzZXIgc3BhY2UgZGFlbW9uOiBob3N0YXBkLCBpcyB1c2VkIGZvciBIT1NUQVAgKi8KLQlpbnQgYkVuYWJsZUhvc3RhcGQ7Ci0JaW50IGJFbmFibGU4MDIxeDsKLQlpbnQgYkVuYWJsZUhvc3RXRVA7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmFwZGV2OwotCWludCAoKnR4XzgwMjExKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQogCXUzMiB1Q2hhbm5lbDsKIAogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsgLyogd2lyZWxlc3Mgc3RhdHMgKi8KQEAgLTczMiwyNSArNzE5LDE1IEBACiAgICAgICAgICh1VmFyKSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIGZNUF9SRVNFVF9JTl9QUk9HUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgZk1QX0RJU0NPTk5FQ1RFRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBmTVBfSEFMVF9JTl9QUk9HUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIGZNUF9TVVJQUklTRV9SRU1PVkVEICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgZk1QX1JFQ1ZfTE9PS0FTSURFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBmTVBfSU5JVF9JTl9QUk9HUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIGZNUF9TRU5EX1NJREVfUkVTT1VSQ0VfQUxMT0NBVEVEICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgZk1QX1JFQ1ZfU0lERV9SRVNPVVJDRV9BTExPQ0FURUQgICAgMHgwMDAwMDA4MAogI2RlZmluZSBmTVBfUE9TVF9SRUFEUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIGZNUF9QT1NUX1dSSVRFUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgZk1QX0NPTlRST0xfUkVBRFMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBmTVBfQ09OVFJPTF9XUklURVMgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCiAKICNkZWZpbmUgTVBfU0VUX0ZMQUcoX00sIF9GKSAgICAgICAgICAgICAoKF9NKS0+RmxhZ3MgfD0gKF9GKSkKICNkZWZpbmUgTVBfQ0xFQVJfRkxBRyhfTSwgX0YpICAgICAgICAgICAgKChfTSktPkZsYWdzICY9IH4oX0YpKQogI2RlZmluZSBNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICAgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gKF9GKSkKIAotI2RlZmluZSBNUF9JU19SRUFEWShfTSkgICAgICAgICgoKF9NKS0+RmxhZ3MgJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZk1QX0RJU0NPTk5FQ1RFRCB8IGZNUF9SRVNFVF9JTl9QUk9HUkVTUyB8IGZNUF9IQUxUX0lOX1BST0dSRVNTIHwgZk1QX0lOSVRfSU5fUFJPR1JFU1MgfCBmTVBfU1VSUFJJU0VfUkVNT1ZFRCkpID09IDApCisjZGVmaW5lIE1QX0lTX1JFQURZKF9NKSAgICAgICAgKCgoX00pLT5GbGFncyAmIGZNUF9ESVNDT05ORUNURUQpID09IDApCiAKIGludCBkZXZpY2VfYWxsb2NfZnJhZ19idWYoc3RydWN0IHZudF9wcml2YXRlICosIFBTRGVGcmFnQ29udHJvbEJsb2NrIHBEZUYpOwogdm9pZCB2bnRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RldmljZV9jZmcuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlX2NmZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjlkODM0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlX2NmZy5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NiwgMjAwMyBWSUEgTmV0d29ya2luZyBUZWNobm9sb2dpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKiBGaWxlOiBkZXZpY2VfY2ZnLmgKLSAqCi0gKiBQdXJwb3NlOiBEcml2ZXIgY29uZmlndXJhdGlvbiBoZWFkZXIKLSAqIEF1dGhvcjogTHluZG9uIENoZW4KLSAqCi0gKiBEYXRlOiBEZWMgOSwgMjAwNQotICoKLSAqLwotI2lmbmRlZiBfX0RFVklDRV9DT05GSUdfSAotI2RlZmluZSBfX0RFVklDRV9DT05GSUdfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotdHlwZWRlZgotc3RydWN0IF92ZXJzaW9uIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgbWFqb3I7Ci0gICAgdW5zaWduZWQgY2hhciAgIG1pbm9yOwotICAgIHVuc2lnbmVkIGNoYXIgICBidWlsZDsKLX0gdmVyc2lvbl90LCAqcHZlcnNpb25fdDsKLQotI2lmbmRlZiBmYWxzZQotI2RlZmluZSBmYWxzZSAgICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgdHJ1ZQotI2RlZmluZSB0cnVlICAgICghKGZhbHNlKSkKLSNlbmRpZgotCi0jZGVmaW5lIFZJRF9UQUJMRV9TSVpFICAgICAgNjQKLSNkZWZpbmUgTUNBU1RfVEFCTEVfU0laRSAgICA2NAotI2RlZmluZSBNQ0FNX1NJWkUgICAgICAgICAgIDMyCi0jZGVmaW5lIFZDQU1fU0laRSAgICAgICAgICAgMzIKLSNkZWZpbmUgVFhfUVVFVUVfTk8gICAgICAgICA4Ci0KLSNkZWZpbmUgREVWSUNFX05BTUUgICAgICAgICAidnQ2NjU2IgotI2RlZmluZSBERVZJQ0VfRlVMTF9EUlZfTkFNICJWSUEgTmV0d29ya2luZyBXaXJlbGVzcyBMQU4gVVNCIERyaXZlciIKLQotI2lmbmRlZiBNQUpPUl9WRVJTSU9OCi0jZGVmaW5lIE1BSk9SX1ZFUlNJT04gICAgICAgMQotI2VuZGlmCi0KLSNpZm5kZWYgTUlOT1JfVkVSU0lPTgotI2RlZmluZSBNSU5PUl9WRVJTSU9OICAgICAgIDEzCi0jZW5kaWYKLQotI2lmbmRlZiBERVZJQ0VfVkVSU0lPTgotI2RlZmluZSBERVZJQ0VfVkVSU0lPTiAgICAgICAiMS4xOV8xMiIKLSNlbmRpZgotCi0jZGVmaW5lIE1BWF9SQVRFCTEyCi0KLS8qIGNvbmZpZyBmaWxlICovCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2lmbmRlZiBDT05GSUdfUEFUSAotI2RlZmluZSBDT05GSUdfUEFUSCAgICAgICAgICAgICIvZXRjL3ZudGNvbmZpZ3VyYXRpb24uZGF0IgotI2VuZGlmCi0KLS8qIE1heDogMjM3OCA9IDIzMTIgUGF5bG9hZCArIDMwSEQgKyA0Q1JDICsgMlBhZGRpbmcgKyA0TGVuICsgOFRTRiArIDRSU1IgKi8KLSNkZWZpbmUgUEtUX0JVRl9TWiAgICAgICAgICAyMzkwCi0KLSNkZWZpbmUgTUFYX1VJTlRTICAgICAgICAgICA4Ci0jZGVmaW5lIE9QVElPTl9ERUZBVUxUICAgICAgeyBbMCAuLi4gTUFYX1VJTlRTLTFdID0gLTF9Ci0KLXR5cGVkZWYgZW51bSAgX2NoaXBfdHlwZSB7Ci0gICAgVlQzMTg0ID0gMQotfSBDSElQX1RZUEUsICpQQ0hJUF9UWVBFOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZHBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RwYy5jCmluZGV4IDRjY2FhN2UuLmMwZWM1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZHBjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYwpAQCAtMjYsMTAgKzI2LDcgQEAKICAqCiAgKiBGdW5jdGlvbnM6CiAgKiAgICAgIGRldmljZV9yZWNlaXZlX2ZyYW1lIC0gUmN2IDgwMi4xMSBmcmFtZSBmdW5jdGlvbgotICogICAgICBzX2JBUE1vZGVSeEN0bC0gQVAgUmN2IGZyYW1lIGZpbGVyIEN0bC4KLSAqICAgICAgc19iQVBNb2RlUnhEYXRhLSBBUCBSY3YgZGF0YSBmcmFtZSBoYW5kbGUKICAqICAgICAgc19iSGFuZGxlUnhFbmNyeXB0aW9uLSBSY3YgZGVjcnlwdGVkIGRhdGEgdmlhIG9uLWZseQotICogICAgICBzX2JIb3N0V2VwUnhFbmNyeXB0aW9uLSBSY3YgZW5jcnlwdGVkIGRhdGEgdmlhIGhvc3QKICAqICAgICAgc19ieUdldFJhdGVJZHgtIGdldCByYXRlIGluZGV4CiAgKiAgICAgIHNfdkdldERBU0EtIGdldCBkYXRhIG9mZnNldAogICogICAgICBzX3ZQcm9jZXNzUnhNQUNIZWFkZXItIFJjdiA4MDIuMTEgYW5kIHRyYW5zbGF0ZSB0byA4MDIuMwpAQCAtNDgsMTIgKzQ1LDkgQEAKICNpbmNsdWRlICJiYXNlYmFuZC5oIgogI2luY2x1ZGUgIm1pY2hhZWwuaCIKICNpbmNsdWRlICJ0a2lwLmgiCi0jaW5jbHVkZSAidGNyYy5oIgogI2luY2x1ZGUgIndjdGwuaCIKLSNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJyZi5oIgogI2luY2x1ZGUgImlvd3BhLmgiCi0jaW5jbHVkZSAiYWVzX2NjbXAuaCIKICNpbmNsdWRlICJkYXRhcmF0ZS5oIgogI2luY2x1ZGUgInVzYnBpcGUuaCIKIApAQCAtNzcsMjAgKzcxLDEwIEBACiAJdTggKnBieVJ4QnVmZmVyQWRkciwgdTMyIGNiUGFja2V0U2l6ZSwgaW50IGJJc1dFUCwgaW50IGJFeHRJViwKIAl1MzIgKnBjYkhlYWRTaXplKTsKIAotc3RhdGljIGludCBzX2JBUE1vZGVSeEN0bChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4ICpwYnlGcmFtZSwKLQlzMzIgaVNBTm9kZUluZGV4KTsKLQotc3RhdGljIGludCBzX2JBUE1vZGVSeERhdGEoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXUzMiBGcmFtZVNpemUsIHUzMiBjYkhlYWRlck9mZnNldCwgczMyIGlTQU5vZGVJbmRleCwgczMyIGlEQU5vZGVJbmRleCk7Ci0KIHN0YXRpYyBpbnQgc19iSGFuZGxlUnhFbmNyeXB0aW9uKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggKnBieUZyYW1lLAogCXUzMiBGcmFtZVNpemUsIHU4ICpwYnlSc3IsIHU4ICpwYnlOZXdSc3IsIFBTS2V5SXRlbSAqcEtleU91dCwKIAlzMzIgKnBiRXh0SVYsIHUxNiAqcHdSeFRTQzE1XzAsIHUzMiAqcGR3UnhUU0M0N18xNik7CiAKLXN0YXRpYyBpbnQgc19iSG9zdFdlcFJ4RW5jcnlwdGlvbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4ICpwYnlGcmFtZSwKLQl1MzIgRnJhbWVTaXplLCB1OCAqcGJ5UnNyLCBpbnQgYk9uRmx5LCBQU0tleUl0ZW0gcEtleSwgdTggKnBieU5ld1JzciwKLQlzMzIgKnBiRXh0SVYsIHUxNiAqcHdSeFRTQzE1XzAsIHUzMiAqcGR3UnhUU0M0N18xNik7Ci0KIC8qKwogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtMjYxLDE0ICsyNDUsMTMgQEAKIAl1MzIgY2JIZWFkZXJPZmZzZXQsIGNiSVZPZmZzZXQ7CiAJdTMyIEZyYW1lU2l6ZTsKIAl1MTYgd0V0aGVyVHlwZSA9IDA7Ci0JczMyIGlTQU5vZGVJbmRleCA9IC0xLCBpREFOb2RlSW5kZXggPSAtMTsKKwlzMzIgaVNBTm9kZUluZGV4ID0gLTE7CiAJaW50IGlpOwogCXU4ICpwYnlSeFN0cywgKnBieVJ4UmF0ZSwgKnBieVNRLCAqcGJ5M1NROwogCXUzMiBjYkhlYWRlclNpemU7CiAJUFNLZXlJdGVtIHBLZXkgPSBOVUxMOwogCXUxNiB3UnhUU0MxNV8wID0gMDsKIAl1MzIgZHdSeFRTQzQ3XzE2ID0gMDsKLQlTS2V5SXRlbSBTVGVtcEtleTsKIAkvKiBzaWduZWQgbG9uZyBsZEJtID0gMDsgKi8KIAlpbnQgYklzV0VQID0gZmFsc2U7IGludCBiRXh0SVYgPSBmYWxzZTsKIAl1MzIgZHdXYmtTdGF0dXM7CkBAIC0zOTAsNTAgKzM3MywxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewotICAgICAgICBpZiAoc19iQVBNb2RlUnhDdGwocERldmljZSwgcGJ5RnJhbWUsIGlTQU5vZGVJbmRleCkgPT0gdHJ1ZSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKElTX0ZDX1dFUChwYnlGcmFtZSkpIHsKICAgICAgICAgYm9vbCAgICAgYlJ4RGVjcnlPSyA9IGZhbHNlOwogCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icnggV0VQIHBrdFxuIik7CiAgICAgICAgIGJJc1dFUCA9IHRydWU7Ci0gICAgICAgIGlmICgocERldmljZS0+YkVuYWJsZUhvc3RXRVApICYmIChpU0FOb2RlSW5kZXggPj0gMCkpIHsKLSAgICAgICAgICAgIHBLZXkgPSAmU1RlbXBLZXk7Ci0gICAgICAgICAgICBwS2V5LT5ieUNpcGhlclN1aXRlID0gcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJ5Q2lwaGVyU3VpdGU7Ci0gICAgICAgICAgICBwS2V5LT5kd0tleUluZGV4ID0gcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmR3S2V5SW5kZXg7Ci0gICAgICAgICAgICBwS2V5LT51S2V5TGVuZ3RoID0gcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLnVXZXBLZXlMZW5ndGg7Ci0gICAgICAgICAgICBwS2V5LT5kd1RTQzQ3XzE2ID0gcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmR3VFNDNDdfMTY7Ci0gICAgICAgICAgICBwS2V5LT53VFNDMTVfMCA9IHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS53VFNDMTVfMDsKLSAgICAgICAgICAgIG1lbWNweShwS2V5LT5hYnlLZXksCi0gICAgICAgICAgICAgICAgJnBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5hYnlXZXBLZXlbMF0sCi0gICAgICAgICAgICAgICAgcEtleS0+dUtleUxlbmd0aAotICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIGJSeERlY3J5T0sgPSBzX2JIb3N0V2VwUnhFbmNyeXB0aW9uKHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieVJzciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iT25GbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TmV3UnNyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJFeHRJViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3UnhUU0MxNV8wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR3UnhUU0M0N18xNik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiUnhEZWNyeU9LID0gc19iSGFuZGxlUnhFbmNyeXB0aW9uKHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieVJzciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieU5ld1JzciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJFeHRJViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3UnhUU0MxNV8wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR3UnhUU0M0N18xNik7Ci0gICAgICAgIH0KKwliUnhEZWNyeU9LID0gc19iSGFuZGxlUnhFbmNyeXB0aW9uKHBEZXZpY2UsIHBieUZyYW1lLCBGcmFtZVNpemUsCisJCXBieVJzciwgcGJ5TmV3UnNyLCAmcEtleSwgJmJFeHRJViwgJndSeFRTQzE1XzAsICZkd1J4VFNDNDdfMTYpOwogCiAgICAgICAgIGlmIChiUnhEZWNyeU9LKSB7CiAgICAgICAgICAgICBpZiAoKCpwYnlOZXdSc3IgJiBORVdSU1JfREVDUllQVE9LKSA9PSAwKSB7CkBAIC01MTcsMjIgKzQ2NCw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwUnhQYWNrZXQtPmJ5UnhDaGFubmVsID0gKCpwYnlSeFN0cykgPj4gMjsKIAotICAgICAgICAgICAgLy8gaG9zdGFwIERlYW1vbiBoYW5kbGUgODAyLjExIG1hbmFnZW1lbnQKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCkgewotCSAgICAgICAgICAgIHNrYi0+ZGV2ID0gcERldmljZS0+YXBkZXY7Ci0JICAgICAgICAgICAgLy9za2ItPmRhdGEgKz0gNDsKLQkgICAgICAgICAgICAvL3NrYi0+dGFpbCArPSA0OwotCSAgICAgICAgICAgIHNrYi0+ZGF0YSArPSA4OwotCSAgICAgICAgICAgIHNrYi0+dGFpbCArPSA4OwotICAgICAgICAgICAgICAgIHNrYl9wdXQoc2tiLCBGcmFtZVNpemUpOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCSAgICAgICAgICAgIHNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotICAgIAkgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7Ci0JICAgICAgICAgICAgbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7Ci0JICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgICAgIH0KLQogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgUkNCIGluIHRoZSBSZWN2IE1uZyBsaXN0CiAgICAgICAgICAgICAvLwpAQCAtNjI1LDEzICs1NTYsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTm93IGl0IG9ubHkgc3VwcG9ydHMgODAyLjExZyBJbmZyYXN0cnVjdHVyZSBNb2RlLCBhbmQgc3VwcG9ydCByYXRlIG11c3QgdXAgdG8gNTQgTWJwcwotICAgIGlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlICYmIChGcmFtZVNpemU+NTApICYmCi0JcERldmljZS0+b3BfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0gICAgICAgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSkgewotICAgICAgICBCQnZBbnRlbm5hRGl2ZXJzaXR5KHBEZXZpY2UsIHNfYnlHZXRSYXRlSWR4KCpwYnlSeFJhdGUpLCAwKTsKLSAgICB9Ci0KICAgICAvLyArKysrKysrKyBGb3IgQmFzZUJhbmQgQWxnb3JpdGhtICsrKysrKysrKysrKysrKwogICAgIHBEZXZpY2UtPnVDdXJyUlNTSSA9ICpwYnlSU1NJOwogICAgIHBEZXZpY2UtPmJ5Q3VyclNRID0gKnBieVNROwpAQCAtNjU0LDQ1ICs1NzgsNiBAQAogICAgIH0KICovCiAKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApICYmIChwRGV2aWNlLT5iRW5hYmxlODAyMXggPT0gdHJ1ZSkpewotICAgICAgICB1OCAgICBhYnlNYWNIZHJbMjRdOwotCi0gICAgICAgIC8vIE9ubHkgODAyLjF4IHBhY2tldCBpbmNvbWluZyBhbGxvd2VkCi0gICAgICAgIGlmIChiSXNXRVApCi0gICAgICAgICAgICBjYklWT2Zmc2V0ID0gODsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2JJVk9mZnNldCA9IDA7Ci0gICAgICAgIHdFdGhlclR5cGUgPSAoc2tiLT5kYXRhW2NiSVZPZmZzZXQgKyA4ICsgMjQgKyA2XSA8PCA4KSB8Ci0gICAgICAgICAgICAgICAgICAgIHNrYi0+ZGF0YVtjYklWT2Zmc2V0ICsgOCArIDI0ICsgNiArIDFdOwotCi0JICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8id0V0aGVyVHlwZSA9ICUwNHggXG4iLCB3RXRoZXJUeXBlKTsKLSAgICAgICAgaWYgKHdFdGhlclR5cGUgPT0gRVRIX1BfUEFFKSB7Ci0gICAgICAgICAgICBza2ItPmRldiA9IHBEZXZpY2UtPmFwZGV2OwotCi0gICAgICAgICAgICBpZiAoYklzV0VQID09IHRydWUpIHsKLSAgICAgICAgICAgICAgICAvLyBzdHJpcCBJViBoZWFkZXIoOCkKLSAgICAgICAgICAgICAgICBtZW1jcHkoJmFieU1hY0hkclswXSwgKHNrYi0+ZGF0YSArIDgpLCAyNCk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KChza2ItPmRhdGEgKyA4ICsgY2JJVk9mZnNldCksICZhYnlNYWNIZHJbMF0sIDI0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2tiLT5kYXRhICs9ICAoY2JJVk9mZnNldCArIDgpOwotICAgICAgICAgICAgc2tiLT50YWlsICs9ICAoY2JJVk9mZnNldCArIDgpOwotICAgICAgICAgICAgc2tiX3B1dChza2IsIEZyYW1lU2l6ZSk7Ci0JICAgIHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0gICAgICAgICAgICBza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLSAgICAgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7Ci0gICAgICAgICAgICBtZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKLSAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB9Ci0gICAgICAgIC8vIGNoZWNrIGlmIDgwMi4xeCBhdXRob3JpemVkCi0gICAgICAgIGlmICghKHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5kd0ZsYWdzICYgV0xBTl9TVEFfQVVUSE9SSVpFRCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKChwS2V5ICE9IE5VTEwpICYmIChwS2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKICAgICAgICAgaWYgKGJJc1dFUCkgewogICAgICAgICAgICAgRnJhbWVTaXplIC09IDg7ICAvL01JQwpAQCAtODI3LDI2ICs3MTIsNiBAQAogICAgIGlmIChGcmFtZVNpemUgPCAxMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewotICAgICAgICBpZiAoc19iQVBNb2RlUnhEYXRhKHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYkhlYWRlck9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpU0FOb2RlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaURBTm9kZUluZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PSBmYWxzZSkgewotCi0gICAgICAgICAgICBpZiAoYkRlRnJhZ1J4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZXZpY2VfYWxsb2NfZnJhZ19idWYocERldmljZSwgJnBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSICIlczogY2FuIG5vdCBhbGxvYyBtb3JlIGZyYWcgYnVmc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgIH0KLQogCXNrYi0+ZGF0YSArPSBjYkhlYWRlck9mZnNldDsKIAlza2ItPnRhaWwgKz0gY2JIZWFkZXJPZmZzZXQ7CiAgICAgc2tiX3B1dChza2IsIEZyYW1lU2l6ZSk7CkBAIC04NjYsMTEyICs3MzEsNiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IHNfYkFQTW9kZVJ4Q3RsKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggKnBieUZyYW1lLAotCXMzMiBpU0FOb2RlSW5kZXgpCi17Ci0Jc3RydWN0IHZudF9tYW5hZ2VyICpwTWdtdCA9ICZwRGV2aWNlLT52bnRfbWdtdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcDgwMl8xMUhlYWRlcjsKLQlDTURfU1RBVFVTIFN0YXR1czsKLQotICAgIGlmIChJU19DVExfUFNQT0xMKHBieUZyYW1lKSB8fCAhSVNfVFlQRV9DT05UUk9MKHBieUZyYW1lKSkgewotCi0gICAgICAgIHA4MDJfMTFIZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgKHBieUZyYW1lKTsKLSAgICAgICAgaWYgKCFJU19UWVBFX01HTVQocGJ5RnJhbWUpKSB7Ci0KLSAgICAgICAgICAgIC8vIERhdGEgJiBQUy1Qb2xsIHBhY2tldAotICAgICAgICAgICAgLy8gY2hlY2sgZnJhbWUgY2xhc3MKLSAgICAgICAgICAgIGlmIChpU0FOb2RlSW5kZXggPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gZnJhbWUgY2xhc3MgMyBmbGl0ZXIgJiBjaGVja2luZwotICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uZU5vZGVTdGF0ZSA8IE5PREVfQVVUSCkgewotICAgICAgICAgICAgICAgICAgICAvLyBzZW5kIGRlYXV0aCBub3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gcmVhc29uID0gKDYpIGNsYXNzIDIgcmVjZWl2ZWQgZnJvbSBub25hdXRoIHN0YQotICAgICAgICAgICAgICAgICAgICB2TWdyRGVBdXRoZW5CZWdpblN0YShwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopKHA4MDJfMTFIZWFkZXItPmFkZHIyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdMQU5fTUdNVF9SRUFTT05fQ0xBU1MyX05PTkFVVEgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RhdHVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogc2VuZCB2TWdyRGVBdXRoZW5CZWdpblN0YSAxXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uZU5vZGVTdGF0ZSA8IE5PREVfQVNTT0MpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gc2VuZCBkZWFzc29jIG5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyByZWFzb24gPSAoNykgY2xhc3MgMyByZWNlaXZlZCBmcm9tIG5vbmFzc29jIHN0YQotICAgICAgICAgICAgICAgICAgICB2TWdyRGlzYXNzb2NCZWdpblN0YShwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopKHA4MDJfMTFIZWFkZXItPmFkZHIyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdMQU5fTUdNVF9SRUFTT05fQ0xBU1MzX05PTkFTU09DKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXR1cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6IHNlbmQgdk1nckRpc2Fzc29jQmVnaW5TdGEgMlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlBTRW5hYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRlbGNhcmUgcmVjZWl2ZWQgcHMtcG9sbCBldmVudAotICAgICAgICAgICAgICAgICAgICBpZiAoSVNfQ1RMX1BTUE9MTChwYnlGcmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUnhQU1BvbGwgPSB0cnVlOwotCQkJYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLAotCQkJCQkgV0xBTl9DTURfUlhfUFNQT0xMLAotCQkJCQkgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6IFdMQU5fQ01EX1JYX1BTUE9MTCAxXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIERhdGEgUFMgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIFBXIGJpdCBvZmYsIHNlbmQgb3V0IGFsbCBQUyBidWZmZXJyaW5nIHBhY2tldHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlTX0ZDX1BPV0VSTUdUKHBieUZyYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlJ4UFNQb2xsID0gdHJ1ZTsKLQkJCQliU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsCi0JCQkJCQkgV0xBTl9DTURfUlhfUFNQT0xMLAotCQkJCQkJIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogV0xBTl9DTURfUlhfUFNQT0xMIDJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgIGlmIChJU19GQ19QT1dFUk1HVChwYnlGcmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgIC8vIE9uY2UgaWYgU1RBIGluIFBTIHN0YXRlLCBlbmFibGUgbXVsdGljYXN0IGJ1ZmZlcnJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUFNFbmFibGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBjbGVhciBhbGwgcGVuZGluZyBQUyBmcmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLndFblF1ZXVlQ250ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlBTRW5hYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUnhQU1BvbGwgPSB0cnVlOwotCQkJYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLAotCQkJCQkgV0xBTl9DTURfUlhfUFNQT0xMLAotCQkJCQkgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBXTEFOX0NNRF9SWF9QU1BPTEwgM1xuIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgdk1nckRlQXV0aGVuQmVnaW5TdGEocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopKHA4MDJfMTFIZWFkZXItPmFkZHIyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXTEFOX01HTVRfUkVBU09OX0NMQVNTMl9OT05BVVRIKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogc2VuZCB2TWdyRGVBdXRoZW5CZWdpblN0YSAzXG4iKTsKLQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJTU0lEOiVwTVxuIiwKLQkJCQlwODAyXzExSGVhZGVyLT5hZGRyMyk7Ci0JCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJBRERSMjolcE1cbiIsCi0JCQkJcDgwMl8xMUhlYWRlci0+YWRkcjIpOwotCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQUREUjE6JXBNXG4iLAotCQkJCXA4MDJfMTFIZWFkZXItPmFkZHIxKTsKLSAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBmcmFtZV9jb250cm9sPSAleFxuIiwgcDgwMl8xMUhlYWRlci0+ZnJhbWVfY29udHJvbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLQotfQotCiBzdGF0aWMgaW50IHNfYkhhbmRsZVJ4RW5jcnlwdGlvbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4ICpwYnlGcmFtZSwKIAl1MzIgRnJhbWVTaXplLCB1OCAqcGJ5UnNyLCB1OCAqcGJ5TmV3UnNyLCBQU0tleUl0ZW0gKnBLZXlPdXQsCiAJczMyICpwYkV4dElWLCB1MTYgKnB3UnhUU0MxNV8wLCB1MzIgKnBkd1J4VFNDNDdfMTYpCkBAIC0xMDk4LDIxMyArODU3LDIwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgc19iSG9zdFdlcFJ4RW5jcnlwdGlvbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4ICpwYnlGcmFtZSwKLQl1MzIgRnJhbWVTaXplLCB1OCAqcGJ5UnNyLCBpbnQgYk9uRmx5LCBQU0tleUl0ZW0gcEtleSwgdTggKnBieU5ld1JzciwKLQlzMzIgKnBiRXh0SVYsIHUxNiAqcHdSeFRTQzE1XzAsIHUzMiAqcGR3UnhUU0M0N18xNikKLXsKLQlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwTUFDSGVhZGVyOwotCXUzMiBQYXlsb2FkTGVuID0gRnJhbWVTaXplOwotCXU4ICpwYnlJVjsKLQl1OCBieUtleUlkeDsKLQl1OCBieURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKLQotCSpwd1J4VFNDMTVfMCA9IDA7Ci0JKnBkd1J4VFNDNDdfMTYgPSAwOwotCi0gICAgcGJ5SVYgPSBwYnlGcmFtZSArIFdMQU5fSERSX0FERFIzX0xFTjsKLSAgICBpZiAoIFdMQU5fR0VUX0ZDX1RPRFMoKih1MTYgKilwYnlGcmFtZSkgJiYKLSAgICAgICAgIFdMQU5fR0VUX0ZDX0ZST01EUygqKHUxNiAqKXBieUZyYW1lKSApIHsKLSAgICAgICAgIHBieUlWICs9IDY7ICAgICAgICAgICAgIC8vIDYgaXMgODAyLjExIGFkZHJlc3M0Ci0gICAgICAgICBQYXlsb2FkTGVuIC09IDY7Ci0gICAgfQotICAgIGJ5S2V5SWR4ID0gKCoocGJ5SVYrMykgJiAweGMwKTsKLSAgICBieUtleUlkeCA+Pj0gNjsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlxuS2V5SWR4OiAlZFxuIiwgYnlLZXlJZHgpOwotCi0gICAgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfVEtJUCkKLSAgICAgICAgYnlEZWNNb2RlID0gS0VZX0NUTF9US0lQOwotICAgIGVsc2UgaWYgKHBNZ210LT5ieUNTU0dLID09IEtFWV9DVExfQ0NNUCkKLSAgICAgICAgYnlEZWNNb2RlID0gS0VZX0NUTF9DQ01QOwotCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJBRVM6JWQgJWQgJWRcbiIsIHBNZ210LT5ieUNTU1BLLCBwTWdtdC0+YnlDU1NHSywgYnlEZWNNb2RlKTsKLQotICAgIGlmIChieURlY01vZGUgIT0gcEtleS0+YnlDaXBoZXJTdWl0ZSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1dFUCkgewotICAgICAgICAvLyBoYW5kbGUgV0VQCi0JREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJieURlY01vZGUgPT0gS0VZX0NUTF9XRVBcbiIpOwotICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB8fAotCQkoKChQU0tleVRhYmxlKShwS2V5LT5wdktleVRhYmxlKSktPmJTb2Z0V0VQID09IHRydWUpIHx8Ci0gICAgICAgICAgICAoYk9uRmx5ID09IGZhbHNlKSkgewotICAgICAgICAgICAgLy8gU29mdHdhcmUgV0VQCi0gICAgICAgICAgICAvLyAxLiAzMjUzQQotICAgICAgICAgICAgLy8gMi4gV0VQIDI1NgotICAgICAgICAgICAgLy8gMy4gTm90T25GbHkKLQotICAgICAgICAgICAgUGF5bG9hZExlbiAtPSAoV0xBTl9IRFJfQUREUjNfTEVOICsgNCArIDQpOyAvLyAyNCBpcyA4MDIuMTEgaGVhZGVyLDQgaXMgSVYsIDQgaXMgY3JjCi0gICAgICAgICAgICBtZW1jcHkocERldmljZS0+YWJ5UFJORywgcGJ5SVYsIDMpOwotICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPmFieVBSTkcgKyAzLCBwS2V5LT5hYnlLZXksIHBLZXktPnVLZXlMZW5ndGgpOwotICAgICAgICAgICAgcmM0X2luaXQoJnBEZXZpY2UtPlNCb3gsIHBEZXZpY2UtPmFieVBSTkcsIHBLZXktPnVLZXlMZW5ndGggKyAzKTsKLSAgICAgICAgICAgIHJjNF9lbmNyeXB0KCZwRGV2aWNlLT5TQm94LCBwYnlJVis0LCBwYnlJVis0LCBQYXlsb2FkTGVuKTsKLQotICAgICAgICAgICAgaWYgKEVUSGJJc0J1ZmZlckNyYzMyT2socGJ5SVYrNCwgUGF5bG9hZExlbikpIHsKLSAgICAgICAgICAgICAgICAqcGJ5TmV3UnNyIHw9IE5FV1JTUl9ERUNSWVBUT0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKChieURlY01vZGUgPT0gS0VZX0NUTF9US0lQKSB8fAotICAgICAgICAgICAgICAgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX0NDTVApKSB7Ci0gICAgICAgIC8vIFRLSVAvQUVTCi0KLSAgICAgICAgUGF5bG9hZExlbiAtPSAoV0xBTl9IRFJfQUREUjNfTEVOICsgOCArIDQpOyAvLyAyNCBpcyA4MDIuMTEgaGVhZGVyLCA4IGlzIElWJkV4dElWLCA0IGlzIGNyYwotICAgICAgICAqcGR3UnhUU0M0N18xNiA9IGNwdV90b19sZTMyKCoodTMyICopKHBieUlWICsgNCkpOwotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRXh0SVY6ICV4XG4iLCAqcGR3UnhUU0M0N18xNik7Ci0KLSAgICAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1RLSVApIHsKLSAgICAgICAgICAgICpwd1J4VFNDMTVfMCA9IGNwdV90b19sZTE2KE1BS0VXT1JEKCoocGJ5SVYrMiksICpwYnlJVikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKnB3UnhUU0MxNV8wID0gY3B1X3RvX2xlMTYoKih1MTYgKilwYnlJVik7Ci0gICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJUU0MwXzE1OiAleFxuIiwgKnB3UnhUU0MxNV8wKTsKLQotICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkgewotCi0gICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB8fCAoYk9uRmx5ID09IGZhbHNlKSkgewotICAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIFRLSVAKLSAgICAgICAgICAgICAgICAvLyAxLiAzMjUzIEEKLSAgICAgICAgICAgICAgICAvLyAyLiBOb3RPbkZseQotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8ic29mdCBLRVlfQ1RMX1RLSVAgXG4iKTsKLSAgICAgICAgICAgICAgICBwTUFDSGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIChwYnlGcmFtZSk7Ci0gICAgICAgICAgICAgICAgVEtJUHZNaXhLZXkocEtleS0+YWJ5S2V5LCBwTUFDSGVhZGVyLT5hZGRyMiwgKnB3UnhUU0MxNV8wLCAqcGR3UnhUU0M0N18xNiwgcERldmljZS0+YWJ5UFJORyk7Ci0gICAgICAgICAgICAgICAgcmM0X2luaXQoJnBEZXZpY2UtPlNCb3gsIHBEZXZpY2UtPmFieVBSTkcsIFRLSVBfS0VZX0xFTik7Ci0gICAgICAgICAgICAgICAgcmM0X2VuY3J5cHQoJnBEZXZpY2UtPlNCb3gsIHBieUlWKzgsIHBieUlWKzgsIFBheWxvYWRMZW4pOwotICAgICAgICAgICAgICAgIGlmIChFVEhiSXNCdWZmZXJDcmMzMk9rKHBieUlWKzgsIFBheWxvYWRMZW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICpwYnlOZXdSc3IgfD0gTkVXUlNSX0RFQ1JZUFRPSzsKLSAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJJQ1YgT0shXG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIklDViBGQUlMISEhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJQYXlsb2FkTGVuID0gJWRcbiIsIFBheWxvYWRMZW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9DQ01QKSB7Ci0gICAgICAgICAgICBpZiAoYk9uRmx5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU29mdHdhcmUgQ0NNUAotICAgICAgICAgICAgICAgIC8vIE5vdE9uRmx5Ci0gICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJzb2Z0IEtFWV9DVExfQ0NNUFxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKEFFU2JHZW5DQ01QKHBLZXktPmFieUtleSwgcGJ5RnJhbWUsIEZyYW1lU2l6ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgKnBieU5ld1JzciB8PSBORVdSU1JfREVDUllQVE9LOwotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkNDTVAgTUlDIGNvbXBhcmUgT0shXG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkNDTVAgTUlDIGZhaWwhXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0vLyBlbmQgb2YgVEtJUC9BRVMKLQotICAgIGlmICgoKihwYnlJViszKSAmIDB4MjApICE9IDApCi0gICAgICAgICpwYkV4dElWID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBzX2JBUE1vZGVSeERhdGEoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXUzMiBGcmFtZVNpemUsIHUzMiBjYkhlYWRlck9mZnNldCwgczMyIGlTQU5vZGVJbmRleCwgczMyIGlEQU5vZGVJbmRleCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiY3B5OwotCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7Ci0JaW50ICBiUmVsYXlBbmRGb3J3YXJkID0gZmFsc2U7Ci0JaW50IGJSZWxheU9ubHkgPSBmYWxzZTsKLQl1OCBieU1hc2tbOF0gPSB7MSwgMiwgNCwgOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07Ci0JdTE2IHdBSUQ7Ci0KLSAgICBpZiAoRnJhbWVTaXplID4gQ0JfTUFYX0JVRl9TSVpFKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gY2hlY2sgREEKLSAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoKHU4ICopKHNrYi0+ZGF0YStjYkhlYWRlck9mZnNldCkpKSB7Ci0gICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlKSB7Ci0KLQkgICAgc2tiY3B5ID0gbmV0ZGV2X2FsbG9jX3NrYihwRGV2aWNlLT5kZXYsIHBEZXZpY2UtPnJ4X2J1Zl9zeik7Ci0KLSAgICAgICAgLy8gaWYgYW55IG5vZGUgaW4gUFMgbW9kZSwgYnVmZmVyIHBhY2tldCB1bnRpbCBEVElNLgotICAgICAgICAgICBpZiAoc2tiY3B5ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPICJyZWxheSBtdWx0aWNhc3Qgbm8gc2tiIGF2YWlsYWJsZSBcbiIpOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgc2tiY3B5LT5sZW4gPSBGcmFtZVNpemU7Ci0gICAgICAgICAgICAgICBtZW1jcHkoc2tiY3B5LT5kYXRhLCBza2ItPmRhdGErY2JIZWFkZXJPZmZzZXQsIEZyYW1lU2l6ZSk7Ci0gICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmKHBNZ210LT5zTm9kZURCVGFibGVbMF0uc1R4UFNRdWV1ZSksIHNrYmNweSk7Ci0gICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLndFblF1ZXVlQ250Kys7Ci0gICAgICAgICAgICAgICAvLyBzZXQgdHggbWFwCi0gICAgICAgICAgICAgICBwTWdtdC0+YWJ5UFNUeE1hcFswXSB8PSBieU1hc2tbMF07Ci0gICAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgZWxzZSB7Ci0gICAgICAgICAgIGJSZWxheUFuZEZvcndhcmQgPSB0cnVlOwotICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIGNoZWNrIGlmIHJlbGF5Ci0gICAgICAgIGlmIChCU1NiSXNTVEFJbk5vZGVEQihwRGV2aWNlLCAodTggKikoc2tiLT5kYXRhK2NiSGVhZGVyT2Zmc2V0KSwgJmlEQU5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lEQU5vZGVJbmRleF0uZU5vZGVTdGF0ZSA+PSBOT0RFX0FTU09DKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaURBTm9kZUluZGV4XS5iUFNFbmFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcXVldWUgdGhpcyBza2IgdW50aWwgbmV4dCBQUyB0eCwgYW5kIHRoZW4gcmVsZWFzZS4KLQotCSAgICAgICAgICAgICAgICBza2ItPmRhdGEgKz0gY2JIZWFkZXJPZmZzZXQ7Ci0JICAgICAgICAgICAgICAgIHNrYi0+dGFpbCArPSBjYkhlYWRlck9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc2tiX3B1dChza2IsIEZyYW1lU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZwTWdtdC0+c05vZGVEQlRhYmxlW2lEQU5vZGVJbmRleF0uc1R4UFNRdWV1ZSwgc2tiKTsKLQotICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lEQU5vZGVJbmRleF0ud0VuUXVldWVDbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgd0FJRCA9IHBNZ210LT5zTm9kZURCVGFibGVbaURBTm9kZUluZGV4XS53QUlEOwotICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5UFNUeE1hcFt3QUlEID4+IDNdIHw9ICBieU1hc2tbd0FJRCAmIDddOwotICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyZWxheTogaW5kZXg9ICVkLCBwTWdtdC0+YWJ5UFNUeE1hcFslZF09ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlEQU5vZGVJbmRleCwgKHdBSUQgPj4gMyksIHBNZ210LT5hYnlQU1R4TWFwW3dBSUQgPj4gM10pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJSZWxheU9ubHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChiUmVsYXlPbmx5IHx8IGJSZWxheUFuZEZvcndhcmQpIHsKLSAgICAgICAgLy8gcmVsYXkgdGhpcyBwYWNrZXQgcmlnaHQgbm93Ci0gICAgICAgIGlmIChiUmVsYXlBbmRGb3J3YXJkKQotICAgICAgICAgICAgaURBTm9kZUluZGV4ID0gMDsKLQotICAgICAgICBpZiAoKHBEZXZpY2UtPnVBc3NvY0NvdW50ID4gMSkgJiYgKGlEQU5vZGVJbmRleCA+PSAwKSkgewotCQliUmVsYXlQYWNrZXRTZW5kKHBEZXZpY2UsICh1OCAqKSAoc2tiLT5kYXRhICsgY2JIZWFkZXJPZmZzZXQpLAotCQkJCSBGcmFtZVNpemUsICh1bnNpZ25lZCBpbnQpIGlEQU5vZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYlJlbGF5T25seSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gbm9uZSBhc3NvY2lhdGUsIGRvbid0IGZvcndhcmQKLSAgICBpZiAocERldmljZS0+dUFzc29jQ291bnQgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgUlh2V29ya0l0ZW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdm50X3ByaXZhdGUsIHJlYWRfd29ya19pdGVtKTsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCB2bnRfcmNiICpyY2IgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocHJpdi0+RmxhZ3MgJiBmTVBfRElTQ09OTkVDVEVEKQogCQlyZXR1cm47CiAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0+UnggUG9sbGluZyBUaHJlYWRcbiIpOwogCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXdoaWxlICgocHJpdi0+RmxhZ3MgJiBmTVBfUE9TVF9SRUFEUykgJiYgTVBfSVNfUkVBRFkocHJpdikgJiYKIAkJCShwcml2LT5OdW1SZWN2RnJlZUxpc3QgIT0gMCkpIHsKQEAgLTEzMTksNyArODg1LDcgQEAKIAogCXByaXYtPmJJc1J4V29ya0l0ZW1RdWV1ZWQgPSBmYWxzZTsKIAotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIFJYdkZyZWVSQ0Ioc3RydWN0IHZudF9yY2IgKnJjYiwgaW50IHJlX2FsbG9jX3NrYikKQEAgLTEzNjMsMzQgKzkyOSw0MyBAQAogCXN0cnVjdCB2bnRfcmNiICpwUkNCID0gTlVMTDsKIAlzdHJ1Y3Qgdm50X3J4X21nbXQgKnBSeFBhY2tldDsKIAlpbnQgYlJlQWxsb2NTa2IgPSBmYWxzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHBEZXZpY2UtPkZsYWdzICYgZk1QX0RJU0NPTk5FQ1RFRCkKIAkJcmV0dXJuOwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tPlJ4IE1uZyBUaHJlYWRcbiIpOwogCi0gICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgd2hpbGUgKHBEZXZpY2UtPk51bVJlY3ZNbmdMaXN0IT0wKQogICAgIHsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcERldmljZS0+bG9jaywgZmxhZ3MpOworCiAgICAgICAgIHBSQ0IgPSBwRGV2aWNlLT5GaXJzdFJlY3ZNbmdMaXN0OwogICAgICAgICBwRGV2aWNlLT5OdW1SZWN2TW5nTGlzdC0tOwogICAgICAgICBEZXF1ZXVlUkNCKHBEZXZpY2UtPkZpcnN0UmVjdk1uZ0xpc3QsIHBEZXZpY2UtPkxhc3RSZWN2TW5nTGlzdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CisKICAgICAgICAgaWYoIXBSQ0IpewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcFJ4UGFja2V0ID0gJihwUkNCLT5zTW5nUGFja2V0KTsKIAl2TWdyUnhNYW5hZ2VQYWNrZXQocERldmljZSwgJnBEZXZpY2UtPnZudF9tZ210LCBwUnhQYWNrZXQpOwogICAgICAgICBwUkNCLT5SZWYtLTsKLSAgICAgICAgaWYocFJDQi0+UmVmID09IDApIHsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iUnh2RnJlZU1uZyAlZCAlZFxuIixwRGV2aWNlLT5OdW1SZWN2RnJlZUxpc3QsIHBEZXZpY2UtPk51bVJlY3ZNbmdMaXN0KTsKLSAgICAgICAgICAgIFJYdkZyZWVSQ0IocFJDQiwgYlJlQWxsb2NTa2IpOwotICAgICAgICB9IGVsc2UgeworCWlmIChwUkNCLT5SZWYgPT0gMCkgeworCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlJ4dkZyZWVNbmcgJWQgJWRcbiIsCisJCQlwRGV2aWNlLT5OdW1SZWN2RnJlZUxpc3QsIHBEZXZpY2UtPk51bVJlY3ZNbmdMaXN0KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcERldmljZS0+bG9jaywgZmxhZ3MpOworCisJCVJYdkZyZWVSQ0IocFJDQiwgYlJlQWxsb2NTa2IpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgewogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJSeCBNbmcgT25seSB3ZSBoYXZlIHRoZSByaWdodCB0byBmcmVlIFJDQlxuIik7CiAgICAgICAgIH0KICAgICB9CiAKIAlwRGV2aWNlLT5iSXNSeE1uZ1dvcmtJdGVtUXVldWVkID0gZmFsc2U7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Zpcm13YXJlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Zpcm13YXJlLmMKaW5kZXggY2QyZWE3Ni4uMTE1OWYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZmlybXdhcmUuYwpAQCAtMzEsOSArMzEsOSBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlICJmaXJtd2FyZS5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKLSNpbmNsdWRlICJybmRpcy5oIgorI2luY2x1ZGUgInVzYnBpcGUuaCIKIAogc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9JTkZPOwogLyogc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9ERUJVRzsgKi8KQEAgLTU0LDcgKzU0LDYgQEAKIAlpbnQgaWksIHJjOwogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tPkRvd25sb2FkIGZpcm13YXJlXG4iKTsKLQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCiAJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgRklSTVdBUkVfTkFNRSwgZGV2KTsKIAlpZiAocmMpIHsKQEAgLTcxLDcgKzcwLDcgQEAKIAkJd0xlbmd0aCA9IG1pbl90KGludCwgZnctPnNpemUgLSBpaSwgRklSTVdBUkVfQ0hVTktfU0laRSk7CiAJCW1lbWNweShwQnVmZmVyLCBmdy0+ZGF0YSArIGlpLCB3TGVuZ3RoKTsKIAotCQlOZGlzU3RhdHVzID0gQ09OVFJPTG5zUmVxdWVzdE91dEFzeW4ocERldmljZSwKKwkJTmRpc1N0YXR1cyA9IHZudF9jb250cm9sX291dChwRGV2aWNlLAogCQkJCQkJMCwKIAkJCQkJCTB4MTIwMCtpaSwKIAkJCQkJCTB4MDAwMCwKQEAgLTkxLDcgKzkwLDYgQEAKIG91dDoKIAlrZnJlZShwQnVmZmVyKTsKIAotCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfTkFNRSk7CkBAIC0xMDIsNyArMTAwLDcgQEAKIAogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLT5CcmFuY2ggdG8gU3JhbVxuIik7CiAKLQlOZGlzU3RhdHVzID0gQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAorCU5kaXNTdGF0dXMgPSB2bnRfY29udHJvbF9vdXQocERldmljZSwKIAkJCQkJMSwKIAkJCQkJMHgxMjAwLAogCQkJCQkweDAwMDAsCkBAIC0xMTgsNyArMTE2LDcgQEAKIHsKIAlpbnQgbnRTdGF0dXM7CiAKLQludFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RJbihwRGV2aWNlLAorCW50U3RhdHVzID0gdm50X2NvbnRyb2xfaW4ocERldmljZSwKIAkJCQkJTUVTU0FHRV9UWVBFX1JFQUQsCiAJCQkJCTAsCiAJCQkJCU1FU1NBR0VfUkVRVUVTVF9WRVJTSU9OLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ob3N0YXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaG9zdGFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YmE0OGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ob3N0YXAuYworKysgL2Rldi9udWxsCkBAIC0xLDc3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqIEZpbGU6IGhvc3RhcC5jCi0gKgotICogUHVycG9zZTogaGFuZGxlIGhvc3RhcCBkYWVtb24gaW9jdGwgaW5wdXQvb3V0IGZ1bmN0aW9ucwotICoKLSAqIEF1dGhvcjogTHluZG9uIENoZW4KLSAqCi0gKiBEYXRlOiBPY3QuIDIwLCAyMDAzCi0gKgotICogRnVuY3Rpb25zOgotICoKLSAqIFJldmlzaW9uIEhpc3Rvcnk6Ci0gKgotICovCi0KLSNpbmNsdWRlICJob3N0YXAuaCIKLSNpbmNsdWRlICJpb2NtZC5oIgotI2luY2x1ZGUgIm1hYy5oIgotI2luY2x1ZGUgImNhcmQuaCIKLSNpbmNsdWRlICJiYXNlYmFuZC5oIgotI2luY2x1ZGUgIndwYWN0bC5oIgotI2luY2x1ZGUgImtleS5oIgotI2luY2x1ZGUgImRhdGFyYXRlLmgiCi0KLSNkZWZpbmUgVklBV0dFVF9IT1NUQVBEX01BWF9CVUZfU0laRSAxMDI0Ci0jZGVmaW5lIEhPU1RBUF9DUllQVF9GTEFHX1NFVF9UWF9LRVkgQklUMAotI2RlZmluZSBIT1NUQVBfQ1JZUFRfRVJSX1VOS05PV05fQUREUiAzCi0jZGVmaW5lIEhPU1RBUF9DUllQVF9FUlJfS0VZX1NFVF9GQUlMRUQgNQotCi1zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsKLQotLyoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICByZWdpc3RlciBuZXRfZGV2aWNlIChBUCkgZm9yIGhvc3RhcCBkYWVtb24KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgICAgIC0KLSAqICAgICAgcnRubF9sb2NrZWQgICAgICAgICAtCi0gKiAgT3V0OgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLQotc3RhdGljIGludCBob3N0YXBfZW5hYmxlX2hvc3RhcGQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCBpbnQgcnRubF9sb2NrZWQpCi17Ci0Jc3RydWN0IHZudF9wcml2YXRlICphcGRldl9wcml2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwRGV2aWNlLT5kZXY7Ci0JaW50IHJldDsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXBkZXZfbmV0ZGV2X29wcyA9IHsKLQkJLm5kb19zdGFydF94bWl0ID0gcERldmljZS0+dHhfODAyMTEsCi0JfTsKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiVzOiBFbmFibGluZyBob3N0YXBkIG1vZGVcbiIsIGRldi0+bmFtZSk7Ci0KLQlwRGV2aWNlLT5hcGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBEZXZpY2UtPmFwZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0gICAgYXBkZXZfcHJpdiA9IG5ldGRldl9wcml2KHBEZXZpY2UtPmFwZGV2KTsKLSAgICAqYXBkZXZfcHJpdiA9ICpwRGV2aWNlOwotCW1lbWNweShwRGV2aWNlLT5hcGRldi0+ZGV2X2FkZHIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQotCXBEZXZpY2UtPmFwZGV2LT5uZXRkZXZfb3BzID0gJmFwZGV2X25ldGRldl9vcHM7Ci0KLQlwRGV2aWNlLT5hcGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0KLQlwRGV2aWNlLT5hcGRldi0+YmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JcERldmljZS0+YXBkZXYtPmlycSA9IGRldi0+aXJxOwotCXBEZXZpY2UtPmFwZGV2LT5tZW1fc3RhcnQgPSBkZXYtPm1lbV9zdGFydDsKLQlwRGV2aWNlLT5hcGRldi0+bWVtX2VuZCA9IGRldi0+bWVtX2VuZDsKLQlzcHJpbnRmKHBEZXZpY2UtPmFwZGV2LT5uYW1lLCAiJXNhcCIsIGRldi0+bmFtZSk7Ci0JaWYgKHJ0bmxfbG9ja2VkKQotCQlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UocERldmljZS0+YXBkZXYpOwotCWVsc2UKLQkJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KHBEZXZpY2UtPmFwZGV2KTsKLQlpZiAocmV0KSB7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiVzOiByZWdpc3Rlcl9uZXRkZXZpY2UoQVApIGZhaWxlZCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyZWQgbmV0ZGV2aWNlICVzIGZvciBBUCBtYW5hZ2VtZW50XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHBEZXZpY2UtPmFwZGV2LT5uYW1lKTsKLQotICAgIEtleXZJbml0VGFibGUocERldmljZSwmcERldmljZS0+c0tleSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICB1bnJlZ2lzdGVyIG5ldF9kZXZpY2UoQVApCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZSAgICAgICAgICAgICAtCi0gKiAgICAgIHJ0bmxfbG9ja2VkICAgICAgICAgLQotICogIE91dDoKLSAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKgotICovCi0KLXN0YXRpYyBpbnQgaG9zdGFwX2Rpc2FibGVfaG9zdGFwZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIGludCBydG5sX2xvY2tlZCkKLXsKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiVzOiBkaXNhYmxpbmcgaG9zdGFwZCBtb2RlXG4iLCBwRGV2aWNlLT5kZXYtPm5hbWUpOwotCi0gICAgaWYgKHBEZXZpY2UtPmFwZGV2ICYmIHBEZXZpY2UtPmFwZGV2LT5uYW1lICYmIHBEZXZpY2UtPmFwZGV2LT5uYW1lWzBdKSB7Ci0JCWlmIChydG5sX2xvY2tlZCkKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHBEZXZpY2UtPmFwZGV2KTsKLQkJZWxzZQotCQkJdW5yZWdpc3Rlcl9uZXRkZXYocERldmljZS0+YXBkZXYpOwotICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiJXM6IE5ldGRldmljZSAlcyB1bnJlZ2lzdGVyZWRcbiIsCi0JCSAgICAgICBwRGV2aWNlLT5kZXYtPm5hbWUsIHBEZXZpY2UtPmFwZGV2LT5uYW1lKTsKLQl9Ci0JaWYgKHBEZXZpY2UtPmFwZGV2KQotCQlmcmVlX25ldGRldihwRGV2aWNlLT5hcGRldik7Ci0JcERldmljZS0+YXBkZXYgPSBOVUxMOwotICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IGZhbHNlOwotICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gZmFsc2U7Ci0gICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBmYWxzZTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgIFNldCBlbmFibGUvZGlzYWJsZSBob3N0YXBkIG1vZGUKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwRGV2aWNlICAgICAgICAgICAgIC0KLSAqICAgICAgcnRubF9sb2NrZWQgICAgICAgICAtCi0gKiAgT3V0OgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLQotaW50IHZ0NjY1Nl9ob3N0YXBfc2V0X2hvc3RhcGQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCWludCB2YWwsIGludCBydG5sX2xvY2tlZCkKLXsKLQlpZiAodmFsIDwgMCB8fCB2YWwgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCA9PSB2YWwpCi0JCXJldHVybiAwOwotCi0JcERldmljZS0+YkVuYWJsZUhvc3RhcGQgPSB2YWw7Ci0KLQlpZiAodmFsKQotCQlyZXR1cm4gaG9zdGFwX2VuYWJsZV9ob3N0YXBkKHBEZXZpY2UsIHJ0bmxfbG9ja2VkKTsKLQllbHNlCi0JCXJldHVybiBob3N0YXBfZGlzYWJsZV9ob3N0YXBkKHBEZXZpY2UsIHJ0bmxfbG9ja2VkKTsKLX0KLQotLyoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICByZW1vdmUgc3RhdGlvbiBmdW5jdGlvbiBzdXBwb3J0ZWQgZm9yIGhvc3RhcCBkYWVtb24KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwRGV2aWNlICAgLQotICogICAgICBwYXJhbSAgICAgLQotICogIE91dDoKLSAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKgotICovCi1zdGF0aWMgaW50IGhvc3RhcF9yZW1vdmVfc3RhKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwKLQlzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKLXsKLQl1bnNpZ25lZCBpbnQgdU5vZGVJbmRleDsKLQotICAgIGlmIChCU1NiSXNTVEFJbk5vZGVEQihwRGV2aWNlLCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgewotICAgICAgICBCU1N2UmVtb3ZlT25lTm9kZShwRGV2aWNlLCB1Tm9kZUluZGV4KTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldHVybiAtRU5PRU5UOwotICAgIH0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBhZGQgYSBzdGF0aW9uIGZyb20gaG9zdGFwIGRhZW1vbgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAtCi0gKiAgICAgIHBhcmFtICAgICAtCi0gKiAgT3V0OgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLXN0YXRpYyBpbnQgaG9zdGFwX2FkZF9zdGEoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCXN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKnBhcmFtKQotewotCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7Ci0JdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7Ci0KLQlpZiAoIUJTU2JJc1NUQUluTm9kZURCKHBEZXZpY2UsIHBhcmFtLT5zdGFfYWRkciwgJnVOb2RlSW5kZXgpKQotCQlCU1N2Q3JlYXRlT25lTm9kZShwRGV2aWNlLCAmdU5vZGVJbmRleCk7Ci0KLSAgICBtZW1jcHkocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5hYnlNQUNBZGRyLCBwYXJhbS0+c3RhX2FkZHIsIFdMQU5fQUREUl9MRU4pOwotICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZU5vZGVTdGF0ZSA9IE5PREVfQVNTT0M7Ci0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53Q2FwSW5mbyA9IHBhcmFtLT51LmFkZF9zdGEuY2FwYWJpbGl0eTsKLS8vIFRPRE8gbGlzdGVuSW50ZXJ2YWwKLS8vICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0xpc3RlbkludGVydmFsID0gMTsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IGZhbHNlOwotICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYnlTdXBwUmF0ZSA9IHBhcmFtLT51LmFkZF9zdGEudHhfc3VwcF9yYXRlczsKLQotICAgIC8vIHNldCBtYXggdHggcmF0ZQotICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud1R4RGF0YVJhdGUgPQotICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZTsKLSAgICAvLyBzZXQgbWF4IGJhc2ljIHJhdGUKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhCYXNpY1JhdGUgPSBSQVRFXzJNOwotICAgIC8vIFRvZG86IGNoZWNrIHN0YSBwcmVhbWJsZSwgaWYgYXAgY2FuJ3Qgc3VwcG9ydCwgc2V0IHN0YXR1cyBjb2RlCi0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSA9Ci0gICAgICAgICAgICBXTEFOX0dFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0NhcEluZm8pOwotCi0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKHUxNilwYXJhbS0+dS5hZGRfc3RhLmFpZDsKLQotICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udWxMYXN0UnhKaWZmZXIgPSBqaWZmaWVzOwotCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQWRkIFNUQSBBSUQ9ICVkIFxuIiwgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEKTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNQUM9JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlggXG4iLAotICAgICAgICAgICAgICAgcGFyYW0tPnN0YV9hZGRyWzBdLAotICAgICAgICAgICAgICAgcGFyYW0tPnN0YV9hZGRyWzFdLAotICAgICAgICAgICAgICAgcGFyYW0tPnN0YV9hZGRyWzJdLAotICAgICAgICAgICAgICAgcGFyYW0tPnN0YV9hZGRyWzNdLAotICAgICAgICAgICAgICAgcGFyYW0tPnN0YV9hZGRyWzRdLAotICAgICAgICAgICAgICAgcGFyYW0tPnN0YV9hZGRyWzVdCi0gICAgICAgICAgICAgICkgOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1heCBTdXBwb3J0IHJhdGUgPSAlZCBcbiIsCi0gICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBnZXQgc3RhdGlvbiBpbmZvCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZSAgIC0KLSAqICAgICAgcGFyYW0gICAgIC0KLSAqICBPdXQ6Ci0gKgotICogUmV0dXJuIFZhbHVlOgotICoKLSAqLwotCi1zdGF0aWMgaW50IGhvc3RhcF9nZXRfaW5mb19zdGEoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCXN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKnBhcmFtKQotewotCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7Ci0JdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7Ci0KLSAgICBpZiAoQlNTYklzU1RBSW5Ob2RlREIocERldmljZSwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpIHsKLQkgICAgcGFyYW0tPnUuZ2V0X2luZm9fc3RhLmluYWN0aXZlX3NlYyA9Ci0JICAgICAgICAoamlmZmllcyAtIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udWxMYXN0UnhKaWZmZXIpIC8gSFo7Ci0KLQkgICAgLy9wYXJhbS0+dS5nZXRfaW5mb19zdGEudHhleGMgPSBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeEF0dGVtcHRzOwotCX0KLQllbHNlIHsKLQkgICAgcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgc2V0IHN0YXRpb24gZmxhZwotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAtCi0gKiAgICAgIHBhcmFtICAgICAtCi0gKiAgT3V0OgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLXN0YXRpYyBpbnQgaG9zdGFwX3NldF9mbGFnc19zdGEoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCQlzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKLXsKLQlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwotCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4OwotCi0gICAgaWYgKEJTU2JJc1NUQUluTm9kZURCKHBEZXZpY2UsIHBhcmFtLT5zdGFfYWRkciwgJnVOb2RlSW5kZXgpKSB7Ci0JCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdGbGFncyB8PSBwYXJhbS0+dS5zZXRfZmxhZ3Nfc3RhLmZsYWdzX29yOwotCQlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3RmxhZ3MgJj0gcGFyYW0tPnUuc2V0X2ZsYWdzX3N0YS5mbGFnc19hbmQ7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBkd0ZsYWdzID0gJXhcbiIsCi0JCQkodW5zaWduZWQgaW50KSBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3RmxhZ3MpOwotCX0KLQllbHNlIHsKLQkgICAgcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgc2V0IGdlbmVyaWMgZWxlbWVudCAod3BhIGllKQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAtCi0gKiAgICAgIHBhcmFtICAgICAtCi0gKiAgT3V0OgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLXN0YXRpYyBpbnQgaG9zdGFwX3NldF9nZW5lcmljX2VsZW1lbnQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCQkJCQlzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKLXsKLQlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwotCi0gICAgbWVtY3B5KCBwTWdtdC0+YWJ5V1BBSUUsCi0gICAgICAgICAgICBwYXJhbS0+dS5nZW5lcmljX2VsZW0uZGF0YSwKLSAgICAgICAgICAgIHBhcmFtLT51LmdlbmVyaWNfZWxlbS5sZW4KLSAgICAgICAgICAgKTsKLQotICAgIHBNZ210LT53V1BBSUVMZW4gPSAJcGFyYW0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icE1nbXQtPndXUEFJRUxlbiA9ICVkXG4iLCAgcE1nbXQtPndXUEFJRUxlbik7Ci0KLSAgICAvLyBkaXNhYmxlIHdwYQotICAgIGlmIChwTWdtdC0+d1dQQUlFTGVuID09IDApIHsKLSAgICAgICAgcE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX09QRU47Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBObyBXUEFJRSwgRGlzYWJsZSBXUEEgXG4iKTsKLSAgICB9IGVsc2UgIHsKLSAgICAgICAgLy8gZW5hYmxlIHdwYQotICAgICAgICBpZiAoKHBNZ210LT5hYnlXUEFJRVswXSA9PSBXTEFOX0VJRF9SU05fV1BBKSB8fAotICAgICAgICAgICAgIChwTWdtdC0+YWJ5V1BBSUVbMF0gPT0gV0xBTl9FSURfUlNOKSkgewotICAgICAgICAgICAgICBwTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfV1BBTk9ORTsKLSAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNldCBXUEFJRSBlbmFibGUgV1BBXG4iKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBmbHVzaCBzdGF0aW9uIG5vZGVzIHRhYmxlLgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAtCi0gKiAgT3V0OgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgaG9zdGFwX2ZsdXNoX3N0YShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCi17Ci0gICAgLy8gcmVzZXJ2ZWQgbm9kZSBpbmRleCA9MCBmb3IgbXVsdGljYXN0IG5vZGUuCi0gICAgQlNTdkNsZWFyTm9kZURCVGFibGUocERldmljZSwgMSk7Ci0gICAgcERldmljZS0+dUFzc29jQ291bnQgPSAwOwotCi0gICAgcmV0dXJuOwotfQotCi0vKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgIHNldCBlYWNoIHN0YXRpb25zIGVuY3J5cHRpb24ga2V5Ci0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZSAgIC0KLSAqICAgICAgcGFyYW0gICAgIC0KLSAqICBPdXQ6Ci0gKgotICogUmV0dXJuIFZhbHVlOgotICoKLSAqLwotc3RhdGljIGludCBob3N0YXBfc2V0X2VuY3J5cHRpb24oc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCXN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKnBhcmFtLCBpbnQgcGFyYW1fbGVuKQotewotCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7Ci0JdTMyIGR3S2V5SW5kZXggPSAwOwotCXU4IGFieUtleVtNQVhfS0VZX0xFTl07Ci0JdTggYWJ5U2VxW01BWF9LRVlfTEVOXTsKLQlORElTXzgwMl8xMV9LRVlfUlNDICAgS2V5UlNDOwotCXU4IGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfV0VQOwotCWludCByZXQgPSAwOwotCXMzMiBpTm9kZUluZGV4ID0gLTE7Ci0JaW50IGlpOwotCWJvb2wgYktleVRhYmxlRnVsbCA9IGZhbHNlOwotCXUxNiB3S2V5Q3RsID0gMDsKLQotCXBhcmFtLT51LmNyeXB0LmVyciA9IDA7Ci0KLQlpZiAocGFyYW0tPnUuY3J5cHQuYWxnID4gV1BBX0FMR19DQ01QKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgocGFyYW0tPnUuY3J5cHQuaWR4ID4gMykgfHwgKHBhcmFtLT51LmNyeXB0LmtleV9sZW4gPiBNQVhfS0VZX0xFTikpIHsKLQkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSE9TVEFQX0NSWVBUX0VSUl9LRVlfU0VUX0ZBSUxFRDsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIEhPU1RBUF9DUllQVF9FUlJfS0VZX1NFVF9GQUlMRURcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGFyYW0tPnN0YV9hZGRyKSkgewotCQlpZiAocGFyYW0tPnUuY3J5cHQuaWR4ID49IE1BWF9HUk9VUF9LRVkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgaU5vZGVJbmRleCA9IDA7Ci0KLQl9IGVsc2UgewotCSAgICBpZiAoQlNTYklzU1RBSW5Ob2RlREIocERldmljZSwgcGFyYW0tPnN0YV9hZGRyLCAmaU5vZGVJbmRleCkgPT0gZmFsc2UpIHsKLQkgICAgICAgIHBhcmFtLT51LmNyeXB0LmVyciA9IEhPU1RBUF9DUllQVF9FUlJfVU5LTk9XTl9BRERSOwotICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIEhPU1RBUF9DUllQVF9FUlJfVU5LTk9XTl9BRERSXG4iKTsKLQkgICAgICAgIHJldHVybiAtRUlOVkFMOwotCSAgICB9Ci0JfQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBob3N0YXBfc2V0X2VuY3J5cHRpb246IHN0YV9pbmRleCAlZCBcbiIsIGlOb2RlSW5kZXgpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBob3N0YXBfc2V0X2VuY3J5cHRpb246IGFsZyAlZCBcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0KLQlpZiAocGFyYW0tPnUuY3J5cHQuYWxnID09IFdQQV9BTEdfTk9ORSkgewotCi0gICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9PSB0cnVlKSB7Ci0gICAgICAgICAgICBpZiAoS2V5YlJlbW92ZUtleSggcERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBEZXZpY2UtPnNLZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5zdGFfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmR3S2V5SW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJLZXliUmVtb3ZlS2V5IGZhaWwgXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5ieUtleUluZGV4ID0gMDsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5kd0tleUluZGV4ID0gMDsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS51V2VwS2V5TGVuZ3RoID0gMDsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5LZXlSU0MgPSAwOwotICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmR3VFNDNDdfMTYgPSAwOwotICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLndUU0MxNV8wID0gMDsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5ieUNpcGhlclN1aXRlID0gMDsKLSAgICAgICAgbWVtc2V0KCZwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmFieVdlcEtleVswXSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIE1BWF9LRVlfTEVOCi0gICAgICAgICAgICAgICApOwotCi0gICAgICAgIHJldHVybiByZXQ7Ci0JfQotCi0gICAgbWVtY3B5KGFieUtleSwgcGFyYW0tPnUuY3J5cHQua2V5LCBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuKTsKLSAgICAvLyBjb3B5IHRvIG5vZGUga2V5IHRibAotICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYnlLZXlJbmRleCA9IHBhcmFtLT51LmNyeXB0LmlkeDsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLnVXZXBLZXlMZW5ndGggPSBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuOwotICAgIG1lbWNweSgmcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5hYnlXZXBLZXlbMF0sCi0gICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXksCi0gICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuCi0gICAgICAgICAgICk7Ci0KLSAgICBkd0tleUluZGV4ID0gKHUzMikocGFyYW0tPnUuY3J5cHQuaWR4KTsKLSAgICBpZiAocGFyYW0tPnUuY3J5cHQuZmxhZ3MgJiBIT1NUQVBfQ1JZUFRfRkxBR19TRVRfVFhfS0VZKSB7Ci0gICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAodTgpZHdLZXlJbmRleDsKLSAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gdHJ1ZTsKLSAgICAgICAgZHdLZXlJbmRleCB8PSAoMSA8PCAzMSk7Ci0gICAgfQotCi0JaWYgKHBhcmFtLT51LmNyeXB0LmFsZyA9PSBXUEFfQUxHX1dFUCkgewotCi0gICAgICAgIGlmICgocERldmljZS0+YkVuYWJsZTgwMjF4ID09IGZhbHNlKSB8fCAoaU5vZGVJbmRleCA9PSAwKSkgewotICAgICAgICAgICAgS2V5YlNldERlZmF1bHRLZXkoICBwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBEZXZpY2UtPnNLZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4ICYgfihCSVQzMCB8IFVTRV9LRVlSU0MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnlLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9DVExfV0VQCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDgwMjF4IGVuYWJsZSwgaW5kaXZpZHVhbCBrZXkKLSAgICAgICAgICAgIGR3S2V5SW5kZXggfD0gKDEgPDwgMzApOyAvLyBzZXQgcGFpcndpc2Uga2V5Ci0JCWlmIChLZXliU2V0S2V5KHBEZXZpY2UsICYocERldmljZS0+c0tleSksCi0JCQkmcGFyYW0tPnN0YV9hZGRyWzBdLAotCQkJZHdLZXlJbmRleCAmIH4oVVNFX0tFWVJTQyksCi0JCQlwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLAotCQkJJktleVJTQywgKHU4ICopYWJ5S2V5LAotCQkJS0VZX0NUTF9XRVAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT0gdHJ1ZSkgewotCi0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSB0cnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEtleSBUYWJsZSBGdWxsCi0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBiS2V5VGFibGVGdWxsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgcE1nbXQtPmJ5Q1NTUEsgPSBLRVlfQ1RMX1dFUDsKLSAgICAgICAgcE1nbXQtPmJ5Q1NTR0sgPSBLRVlfQ1RMX1dFUDsKLSAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5ieUNpcGhlclN1aXRlID0gS0VZX0NUTF9XRVA7Ci0gICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0JfQotCi0JaWYgKHBhcmFtLT51LmNyeXB0LnNlcSkgewotCSAgICBtZW1jcHkoJmFieVNlcSwgcGFyYW0tPnUuY3J5cHQuc2VxLCA4KTsKLQkJZm9yIChpaSA9IDAgOyBpaSA8IDggOyBpaSsrKQotCQkJS2V5UlNDIHw9ICh1bnNpZ25lZCBsb25nKWFieVNlcVtpaV0gPDwgKGlpICogOCk7Ci0KLQkJZHdLZXlJbmRleCB8PSAxIDw8IDI5OwotCQlwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLktleVJTQyA9IEtleVJTQzsKLQl9Ci0KLQlpZiAocGFyYW0tPnUuY3J5cHQuYWxnID09IFdQQV9BTEdfVEtJUCkgewotCSAgICBpZiAocGFyYW0tPnUuY3J5cHQua2V5X2xlbiAhPSBNQVhfS0VZX0xFTikKLQkgICAgICAgIHJldHVybiAtRUlOVkFMOwotCSAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7Ci0gICAgICAgIGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfVEtJUDsKLSAgICAgICAgcE1nbXQtPmJ5Q1NTUEsgPSBLRVlfQ1RMX1RLSVA7Ci0gICAgICAgIHBNZ210LT5ieUNTU0dLID0gS0VZX0NUTF9US0lQOwotCX0KLQotCWlmIChwYXJhbS0+dS5jcnlwdC5hbGcgPT0gV1BBX0FMR19DQ01QKSB7Ci0JICAgIGlmICgocGFyYW0tPnUuY3J5cHQua2V5X2xlbiAhPSBBRVNfS0VZX0xFTikgfHwKLQkgICAgICAgIChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkpCi0JICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwotICAgICAgICBieUtleURlY01vZGUgPSBLRVlfQ1RMX0NDTVA7Ci0gICAgICAgIHBNZ210LT5ieUNTU1BLID0gS0VZX0NUTF9DQ01QOwotICAgICAgICBwTWdtdC0+YnlDU1NHSyA9IEtFWV9DVExfQ0NNUDsKLSAgICB9Ci0KLSAgICBpZiAoaU5vZGVJbmRleCA9PSAwKSB7Ci0gICAgICAgS2V5YlNldERlZmF1bHRLZXkoICBwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwRGV2aWNlLT5zS2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLAotCQkJJktleVJTQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFieUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5S2V5RGVjTW9kZQotICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gdHJ1ZTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGR3S2V5SW5kZXggfD0gKDEgPDwgMzApOyAvLyBzZXQgcGFpcndpc2Uga2V5Ci0gICAgICAgIGlmIChLZXliU2V0S2V5KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICYocERldmljZS0+c0tleSksCi0gICAgICAgICAgICAgICAgICAgICAgICZwYXJhbS0+c3RhX2FkZHJbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT51LmNyeXB0LmtleV9sZW4sCi0JCQkmS2V5UlNDLAotICAgICAgICAgICAgICAgICAgICAgICAodTggKilhYnlLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgKSA9PSB0cnVlKSB7Ci0KLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gdHJ1ZTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gS2V5IFRhYmxlIEZ1bGwKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gZmFsc2U7Ci0gICAgICAgICAgICBiS2V5VGFibGVGdWxsID0gdHJ1ZTsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBLZXkgVGFibGUgRnVsbFxuIik7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGlmIChiS2V5VGFibGVGdWxsID09IHRydWUpIHsKLSAgICAgICAgd0tleUN0bCAmPSAweDdGMDA7ICAgICAgICAgICAgICAvLyBjbGVhciBhbGwga2V5IGNvbnRyb2wgZmlsZWQKLSAgICAgICAgd0tleUN0bCB8PSAoYnlLZXlEZWNNb2RlIDw8IDQpOwotICAgICAgICB3S2V5Q3RsIHw9IChieUtleURlY01vZGUpOwotICAgICAgICB3S2V5Q3RsIHw9IDB4MDA0NDsgICAgICAgICAgICAgIC8vIHVzZSBncm91cCBrZXkgZm9yIGFsbCBhZGRyZXNzCi0gICAgICAgIHdLZXlDdGwgfD0gMHg0MDAwOyAgICAgICAgICAgICAgLy8gZGlzYWJsZSBLZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdIG9uLWZseSB0byBnZW5lcm5hdGUgcnggaW50Ci0vLyBUb2RvLi4geHh4eHh4Ci0gICAgICAgIC8vTUFDdlNldERlZmF1bHRLZXlDdGwocERldmljZS0+UG9ydE9mZnNldCwgd0tleUN0bCwgTUFYX0tFWV9UQUJMRS0xLCBwRGV2aWNlLT5ieUxvY2FsSUQpOwotICAgIH0KLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTZXQga2V5IHN0YV9pbmRleD0gJWQgXG4iLCBpTm9kZUluZGV4KTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgdHhfaW5kZXg9JWQgbGVuPSVkIFxuIiwgcGFyYW0tPnUuY3J5cHQuaWR4LAotICAgICAgICAgICAgICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbiApOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBrZXk9JXgtJXgtJXgtJXgtJXgteHh4eHggXG4iLAotICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5hYnlXZXBLZXlbMF0sCi0gICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmFieVdlcEtleVsxXSwKLSAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYWJ5V2VwS2V5WzJdLAotICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5hYnlXZXBLZXlbM10sCi0gICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmFieVdlcEtleVs0XQotICAgICAgICAgICAgICApOwotCi0JLy8gc2V0IHdlcCBrZXkKLSAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7Ci0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5ieUNpcGhlclN1aXRlID0gYnlLZXlEZWNNb2RlOwotICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7Ci0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gMDsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLndUU0MxNV8wID0gMDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgZ2V0IGVhY2ggc3RhdGlvbnMgZW5jcnlwdGlvbiBrZXkKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwRGV2aWNlICAgLQotICogICAgICBwYXJhbSAgICAgLQotICogIE91dDoKLSAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKgotICovCi1zdGF0aWMgaW50IGhvc3RhcF9nZXRfZW5jcnlwdGlvbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsCi0JCQkJICAgICAgIHN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKnBhcmFtLAotCQkJCSAgICAgICBpbnQgcGFyYW1fbGVuKQotewotCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGlpOwotCXMzMiBpTm9kZUluZGV4ID0gMDsKLQotCXBhcmFtLT51LmNyeXB0LmVyciA9IDA7Ci0KLQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGFyYW0tPnN0YV9hZGRyKSkgewotICAgICAgICBpTm9kZUluZGV4ID0gMDsKLQl9IGVsc2UgewotCSAgICBpZiAoQlNTYklzU1RBSW5Ob2RlREIocERldmljZSwgcGFyYW0tPnN0YV9hZGRyLCAmaU5vZGVJbmRleCkgPT0gZmFsc2UpIHsKLQkgICAgICAgIHBhcmFtLT51LmNyeXB0LmVyciA9IEhPU1RBUF9DUllQVF9FUlJfVU5LTk9XTl9BRERSOwotICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiaG9zdGFwX2dldF9lbmNyeXB0aW9uOiBIT1NUQVBfQ1JZUFRfRVJSX1VOS05PV05fQUREUlxuIik7Ci0JICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQkgICAgfQotCX0KLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJob3N0YXBfZ2V0X2VuY3J5cHRpb246ICVkXG4iLCBpTm9kZUluZGV4KTsKLSAgICBtZW1zZXQocGFyYW0tPnUuY3J5cHQuc2VxLCAwLCA4KTsKLSAgICBmb3IgKGlpID0gMCA7IGlpIDwgOCA7IGlpKyspIHsKLSAgICAgICAgcGFyYW0tPnUuY3J5cHQuc2VxW2lpXSA9ICh1OClwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLktleVJTQyA+PiAoaWkgKiA4KTsKLSAgICB9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgIHZ0NjY1Nl9ob3N0YXBfaW9jdGwgbWFpbiBmdW5jdGlvbiBzdXBwb3J0ZWQgZm9yIGhvc3RhcCBkYWVtb24uCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZSAgIC0KLSAqICAgICAgaXdfcG9pbnQgIC0KLSAqICBPdXQ6Ci0gKgotICogUmV0dXJuIFZhbHVlOgotICoKLSAqLwotCi1pbnQgdnQ2NjU2X2hvc3RhcF9pb2N0bChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHN0cnVjdCBpd19wb2ludCAqcCkKLXsKLQlzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgYXBfaW9jdGwgPSAwOwotCi0JaWYgKHAtPmxlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtKSB8fAotCSAgICBwLT5sZW5ndGggPiBWSUFXR0VUX0hPU1RBUERfTUFYX0JVRl9TSVpFIHx8ICFwLT5wb2ludGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBhcmFtID0ga21hbGxvYygoaW50KXAtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBhcmFtID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKHBhcmFtLCBwLT5wb2ludGVyLCBwLT5sZW5ndGgpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXN3aXRjaCAocGFyYW0tPmNtZCkgewotCWNhc2UgVklBV0dFVF9IT1NUQVBEX1NFVF9FTkNSWVBUSU9OOgotCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJWSUFXR0VUX0hPU1RBUERfU0VUX0VOQ1JZUFRJT04gXG4iKTsKLSAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0JCXJldCA9IGhvc3RhcF9zZXRfZW5jcnlwdGlvbihwRGV2aWNlLCBwYXJhbSwgcC0+bGVuZ3RoKTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSUFXR0VUX0hPU1RBUERfR0VUX0VOQ1JZUFRJT046Ci0JICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfSE9TVEFQRF9HRVRfRU5DUllQVElPTiBcbiIpOwotICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQkJcmV0ID0gaG9zdGFwX2dldF9lbmNyeXB0aW9uKHBEZXZpY2UsIHBhcmFtLCBwLT5sZW5ndGgpOwotICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCQlicmVhazsKLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9TRVRfQVNTT0NfQVBfQUREUjoKLQkgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVklBV0dFVF9IT1NUQVBEX1NFVF9BU1NPQ19BUF9BRERSIFxuIik7Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9GTFVTSDoKLQkgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVklBV0dFVF9IT1NUQVBEX0ZMVVNIIFxuIik7Ci0gICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgIAlob3N0YXBfZmx1c2hfc3RhKHBEZXZpY2UpOwotICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCQlicmVhazsKLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9BRERfU1RBOgotCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJWSUFXR0VUX0hPU1RBUERfQUREX1NUQSBcbiIpOwotICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0JCSByZXQgPSBob3N0YXBfYWRkX3N0YShwRGV2aWNlLCBwYXJhbSk7Ci0gICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCQlicmVhazsKLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9SRU1PVkVfU1RBOgotCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJWSUFXR0VUX0hPU1RBUERfUkVNT1ZFX1NUQSBcbiIpOwotICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0JCSByZXQgPSBob3N0YXBfcmVtb3ZlX3N0YShwRGV2aWNlLCBwYXJhbSk7Ci0gICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCQlicmVhazsKLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9HRVRfSU5GT19TVEE6Ci0JICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfSE9TVEFQRF9HRVRfSU5GT19TVEEgXG4iKTsKLQkJIHJldCA9IGhvc3RhcF9nZXRfaW5mb19zdGEocERldmljZSwgcGFyYW0pOwotCQkgYXBfaW9jdGwgPSAxOwotCQlicmVhazsKLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9TRVRfRkxBR1NfU1RBOgotCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJWSUFXR0VUX0hPU1RBUERfU0VUX0ZMQUdTX1NUQSBcbiIpOwotCQkgcmV0ID0gaG9zdGFwX3NldF9mbGFnc19zdGEocERldmljZSwgcGFyYW0pOwotCQlicmVhazsKLQotCWNhc2UgVklBV0dFVF9IT1NUQVBEX01MTUU6Ci0JICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfSE9TVEFQRF9NTE1FIFxuIik7Ci0JICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLQotCWNhc2UgVklBV0dFVF9IT1NUQVBEX1NFVF9HRU5FUklDX0VMRU1FTlQ6Ci0JICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfSE9TVEFQRF9TRVRfR0VORVJJQ19FTEVNRU5UIFxuIik7Ci0JCXJldCA9IGhvc3RhcF9zZXRfZ2VuZXJpY19lbGVtZW50KHBEZXZpY2UsIHBhcmFtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJQVdHRVRfSE9TVEFQRF9TQ0FOX1JFUToKLQkgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVklBV0dFVF9IT1NUQVBEX1NDQU5fUkVRIFxuIik7Ci0JICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLQotCWNhc2UgVklBV0dFVF9IT1NUQVBEX1NUQV9DTEVBUl9TVEFUUzoKLQkgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVklBV0dFVF9IT1NUQVBEX1NUQV9DTEVBUl9TVEFUUyBcbiIpOwotCSAgICByZXQgPSAtRU9QTk9UU1VQUDsKLQkgICAgZ290byBvdXQ7Ci0JZGVmYXVsdDoKLQkgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAidnQ2NjU2X2hvc3RhcF9pb2N0bDogdW5rbm93biBjbWQ9JWRcbiIsCi0JCSAgICAgICAoaW50KXBhcmFtLT5jbWQpOwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKChyZXQgPT0gMCkgJiYgYXBfaW9jdGwpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihwLT5wb2ludGVyLCBwYXJhbSwgcC0+bGVuZ3RoKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0gb3V0OgotCWtmcmVlKHBhcmFtKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaG9zdGFwLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2hvc3RhcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTY4ZjdlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaG9zdGFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqIEZpbGU6IGhvc3RhcC5oCi0gKgotICogUHVycG9zZToKLSAqCi0gKiBBdXRob3I6IEx5bmRvbiBDaGVuCi0gKgotICogRGF0ZTogTWF5IDIxLCAyMDAzCi0gKgotICovCi0KLSNpZm5kZWYgX19IT1NUQVBfSF9fCi0jZGVmaW5lIF9fSE9TVEFQX0hfXwotCi0jaW5jbHVkZSAiZGV2aWNlLmgiCi0KLSNkZWZpbmUgV0xBTl9SQVRFXzFNICAgIEJJVDAKLSNkZWZpbmUgV0xBTl9SQVRFXzJNICAgIEJJVDEKLSNkZWZpbmUgV0xBTl9SQVRFXzVNNSAgIEJJVDIKLSNkZWZpbmUgV0xBTl9SQVRFXzExTSAgIEJJVDMKLSNkZWZpbmUgV0xBTl9SQVRFXzZNICAgIEJJVDQKLSNkZWZpbmUgV0xBTl9SQVRFXzlNICAgIEJJVDUKLSNkZWZpbmUgV0xBTl9SQVRFXzEyTSAgIEJJVDYKLSNkZWZpbmUgV0xBTl9SQVRFXzE4TSAgIEJJVDcKLSNkZWZpbmUgV0xBTl9SQVRFXzI0TSAgIEJJVDgKLSNkZWZpbmUgV0xBTl9SQVRFXzM2TSAgIEJJVDkKLSNkZWZpbmUgV0xBTl9SQVRFXzQ4TSAgIEJJVDEwCi0jZGVmaW5lIFdMQU5fUkFURV81NE0gICBCSVQxMQotCi0jaWZuZGVmIEVUSF9QX1BBRQotI2RlZmluZSBFVEhfUF9QQUUgMHg4ODhFIC8qIFBvcnQgQWNjZXNzIEVudGl0eSAoSUVFRSA4MDIuMVgpICovCi0jZW5kaWYgLyogRVRIX1BfUEFFICovCi0KLSNpZm5kZWYgQVJQSFJEX0lFRUU4MDIxMQotI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMQotI2VuZGlmCi0KLWludCB2dDY2NTZfaG9zdGFwX3NldF9ob3N0YXBkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCBpbnQgdmFsLCBpbnQgcnRubF9sb2NrZWQpOwotaW50IHZ0NjY1Nl9ob3N0YXBfaW9jdGwoc3RydWN0IHZudF9wcml2YXRlICosIHN0cnVjdCBpd19wb2ludCAqcCk7Ci0KLSNlbmRpZiAvKiBfX0hPU1RBUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5jCmluZGV4IGNjYTU2YjIuLmYyYTUyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW50LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pbnQuYwpAQCAtNjUsMTUgKzY1LDE2IEBACiAtKi8KIHZvaWQgSU5UdldvcmtJdGVtKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBudFN0YXR1czsKIAogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLT5JbnRlcnJ1cHQgUG9sbGluZyBUaHJlYWRcbiIpOwogCi0Jc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKIAogCW50U3RhdHVzID0gUElQRW5zSW50ZXJydXB0UmVhZChwRGV2aWNlKTsKIAotCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcERldmljZS0+bG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIElOVG5zUHJvY2Vzc0RhdGEoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2NtZC5oCmluZGV4IGYzNDA2ZGEuLmI5NTdlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvY21kLmgKQEAgLTI5LDM5NyArMjksMTAgQEAKICNpZm5kZWYgX19JT0NNRF9IX18KICNkZWZpbmUgX19JT0NNRF9IX18KIAotLy8gaW9jdGwgQ29tbWFuZCBjb2RlCi0jZGVmaW5lIE1BR0lDX0NPREUJICAgICAgICAgICAgICAgICAweDMxNDIKLSNkZWZpbmUgSU9DVExfQ01EX1RFU1QJICAgICAgICAgICAgKFNJT0NERVZQUklWQVRFICsgMCkKLSNkZWZpbmUgSU9DVExfQ01EX1NFVAkJCSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxKQotI2RlZmluZSBJT0NUTF9DTURfSE9TVEFQRCAgICAgICAgICAgKFNJT0NERVZQUklWQVRFICsgMikKLSNkZWZpbmUgSU9DVExfQ01EX1dQQSAgICAgICAgICAgICAgIChTSU9DREVWUFJJVkFURSArIDMpCi0KLXR5cGVkZWYgZW51bSB0YWdXTUFDX0NNRCB7Ci0KLSAgICBXTEFOX0NNRF9CU1NfU0NBTiwKLSAgICBXTEFOX0NNRF9CU1NfSk9JTiwKLSAgICBXTEFOX0NNRF9ESVNBU1NPQywKLSAgICBXTEFOX0NNRF9TRVRfV0VQLAotICAgIFdMQU5fQ01EX0dFVF9MSU5LLAotICAgIFdMQU5fQ01EX0dFVF9MSVNUTEVOLAotICAgIFdMQU5fQ01EX0dFVF9MSVNULAotICAgIFdMQU5fQ01EX0dFVF9NSUIsCi0gICAgV0xBTl9DTURfR0VUX1NUQVQsCi0gICAgV0xBTl9DTURfU1RPUF9NQUMsCi0gICAgV0xBTl9DTURfU1RBUlRfTUFDLAotICAgIFdMQU5fQ01EX0FQX1NUQVJULAotICAgIFdMQU5fQ01EX1NFVF9IT1NUQVBELAotICAgIFdMQU5fQ01EX1NFVF9IT1NUQVBEX1NUQSwKLSAgICBXTEFOX0NNRF9TRVRfODAyXzFYLAotICAgIFdMQU5fQ01EX1NFVF9IT1NUX1dFUCwKLSAgICBXTEFOX0NNRF9TRVRfV1BBLAotICAgIFdMQU5fQ01EX0dFVF9OT0RFX0NOVCwKLSAgICBXTEFOX0NNRF9aT05FVFlQRV9TRVQsCi0gICAgV0xBTl9DTURfR0VUX05PREVfTElTVAotCi19IFdNQUNfQ01ELCAqUFdNQUNfQ01EOwotCiB0eXBlZGVmIGVudW0gdGFnV1pPTkVUWVBFIHsKICAgWm9uZVR5cGVfVVNBID0gMCwKICAgWm9uZVR5cGVfSmFwYW4gPSAxLAogICBab25lVHlwZV9FdXJvcGUgPSAyCiB9IFdaT05FVFlQRTsKIAotI2RlZmluZSBBREhPQwkwCi0jZGVmaW5lIElORlJBCTEKLSNkZWZpbmUgQk9USAkyCi0jZGVmaW5lIEFQCSAgICAzCi0KLSNkZWZpbmUgQURIT0NfU1RBUlRFRAkgICAxCi0jZGVmaW5lIEFESE9DX0pPSU5URUQJICAgMgotCi0jZGVmaW5lIFBIWTgwMjExYSAwCi0jZGVmaW5lIFBIWTgwMjExYiAxCi0jZGVmaW5lIFBIWTgwMjExZyAyCi0KLSNkZWZpbmUgU1NJRF9JRCAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNTSURfTUFYTEVOICAgICAgICAgICAgMzIKLSNkZWZpbmUgQlNTSURfTEVOICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFdFUF9OS0VZUyAgICAgICAgICAgICAgNAotI2RlZmluZSBXRVBfS0VZTUFYTEVOICAgICAgICAgIDI5Ci0jZGVmaW5lIFdFUF80MEJJVF9MRU4gICAgICAgICAgNQotI2RlZmluZSBXRVBfMTA0QklUX0xFTiAgICAgICAgIDEzCi0jZGVmaW5lIFdFUF8yMzJCSVRfTEVOICAgICAgICAgMTYKLQotLy8gSW9jdGwgaW50ZXJmYWNlIHN0cnVjdHVyZQotLy8gQ29tbWFuZCBzdHJ1Y3R1cmUKLS8vCi10eXBlZGVmIHN0cnVjdCB0YWdTQ21kUmVxdWVzdCB7Ci0JdTggbmFtZVsxNl07Ci0Jdm9pZAkqZGF0YTsKLQl1MTYJICAgIHdSZXN1bHQ7Ci0JdTE2ICAgICB3Q21kQ29kZTsKLX0gX19wYWNrZWQgU0NtZFJlcXVlc3QsICpQU0NtZFJlcXVlc3Q7Ci0KLS8vCi0vLyBTY2FuCi0vLwotCi10eXBlZGVmIHN0cnVjdCB0YWdTQ21kU2NhbiB7Ci0KLSAgICB1OAkgICAgc3NpZFtTU0lEX01BWExFTiArIDJdOwotCi19IF9fcGFja2VkIFNDbWRTY2FuLCAqUFNDbWRTY2FuOwotCi0vLwotLy8gQlNTIEpvaW4KLS8vCi0KLXR5cGVkZWYgc3RydWN0IHRhZ1NDbWRCU1NKb2luIHsKLQotICAgIHUxNgkgICAgd0JTU1R5cGU7Ci0gICAgdTE2ICAgICB3QkJQVHlwZTsKLSAgICB1OAkgICAgc3NpZFtTU0lEX01BWExFTiArIDJdOwotICAgIHUzMgkgICAgdUNoYW5uZWw7Ci0gICAgYm9vbCAgICBiUFNFbmFibGU7Ci0gICAgYm9vbCAgICBiU2hhcmVLZXlBdXRoOwotCi19IF9fcGFja2VkIFNDbWRCU1NKb2luLCAqUFNDbWRCU1NKb2luOwotCi0vLwotLy8gWm9uZXR5cGUgU2V0dGluZwotLy8KLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU0NtZFpvbmVUeXBlU2V0IHsKLQotIGJvb2wgICAgICAgYldyaXRlOwotIFdaT05FVFlQRSAgWm9uZVR5cGU7Ci0KLX0gX19wYWNrZWQgU0NtZFpvbmVUeXBlU2V0LCAqUFNDbWRab25lVHlwZVNldDsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU1dQQVJlc3VsdCB7Ci0gICAgICAgICBjaGFyCWlmbmFtZVsxMDBdOwotCXU4IHByb3RvOwotCXU4IGtleV9tZ210OwotCXU4IGVhcF90eXBlOwotICAgICAgICAgYm9vbCBhdXRoZW50aWNhdGVkOwotfSBfX3BhY2tlZCBTV1BBUmVzdWx0LCAqUFNXUEFSZXN1bHQ7Ci0KLXR5cGVkZWYgc3RydWN0IHRhZ1NDbWRTdGFydEFQIHsKLQotICAgIHUxNgkgICAgd0JTU1R5cGU7Ci0gICAgdTE2ICAgICB3QkJQVHlwZTsKLSAgICB1OAkgICAgc3NpZFtTU0lEX01BWExFTiArIDJdOwotCXUzMiB1Q2hhbm5lbDsKLQl1MzIgdUJlYWNvbkludDsKLSAgICBib29sICAgIGJTaGFyZUtleUF1dGg7Ci0gICAgdTggICAgICBieUJhc2ljUmF0ZTsKLQotfSBfX3BhY2tlZCBTQ21kU3RhcnRBUCwgKlBTQ21kU3RhcnRBUDsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU0NtZFNldFdFUCB7Ci0KLSAgICBib29sICAgIGJFbmFibGVXZXA7Ci0gICAgdTggICAgICBieUtleUluZGV4OwotICAgIHU4ICAgICAgYWJ5V2VwS2V5W1dFUF9OS0VZU11bV0VQX0tFWU1BWExFTl07Ci0gICAgYm9vbCAgICBiV2VwS2V5QXZhaWxhYmxlW1dFUF9OS0VZU107Ci0gICAgdTMyICAgICBhdVdlcEtleUxlbmd0aFtXRVBfTktFWVNdOwotCi19IF9fcGFja2VkIFNDbWRTZXRXRVAsICpQU0NtZFNldFdFUDsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU0JTU0lESXRlbSB7Ci0KLQl1MzIJICAgIHVDaGFubmVsOwotICAgIHU4ICAgICAgYWJ5QlNTSURbQlNTSURfTEVOXTsKLSAgICB1OCAgICAgIGFieVNTSURbU1NJRF9NQVhMRU4gKyAxXTsKLSAgICB1MTYJICAgIHdCZWFjb25JbnRlcnZhbDsKLSAgICB1MTYJICAgIHdDYXBJbmZvOwotICAgIHU4ICAgICAgYnlOZXRUeXBlOwotICAgIGJvb2wgICAgYldFUE9uOwotICAgIHUzMiAgICAgdVJTU0k7Ci0KLX0gX19wYWNrZWQgU0JTU0lESXRlbTsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU0JTU0lETGlzdCB7Ci0KLQl1MzIJCSAgICB1SXRlbTsKLQlTQlNTSURJdGVtCXNCU1NJRExpc3RbMF07Ci19IF9fcGFja2VkIFNCU1NJRExpc3QsICpQU0JTU0lETGlzdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU05vZGVJdGVtIHsKLSAgICAvLyBTVEEgaW5mbwotICAgIHUxNiAgICAgICAgICAgIHdBSUQ7Ci0gICAgdTggICAgICAgICAgICAgYWJ5TUFDQWRkcls2XTsKLSAgICB1MTYgICAgICAgICAgICB3VHhEYXRhUmF0ZTsKLSAgICB1MTYgICAgICAgICAgICB3SW5BY3RpdmVDb3VudDsKLSAgICB1MTYgICAgICAgICAgICB3RW5RdWV1ZUNudDsKLSAgICB1MTYgICAgICAgICAgICB3RmxhZ3M7Ci0gICAgYm9vbCAgICAgICAgICAgYlBXQml0T247Ci0gICAgdTggICAgICAgICAgICAgYnlLZXlJbmRleDsKLSAgICB1MTYgICAgICAgICAgICB3V2VwS2V5TGVuZ3RoOwotICAgIHU4ICAgICAgICAgICAgYWJ5V2VwS2V5W1dFUF9LRVlNQVhMRU5dOwotICAgIC8vIEF1dG8gcmF0ZSBmYWxsYmFjayB2YXJzCi0gICAgYm9vbCAgICAgICAgICAgYklzSW5GYWxsYmFjazsKLSAgICB1MzIgICAgICAgICAgICB1VHhGYWlsdXJlczsKLSAgICB1MzIgICAgICAgICAgICB1VHhBdHRlbXB0czsKLSAgICB1MTYgICAgICAgICAgICB3RmFpbHVyZVJhdGlvOwotCi19IF9fcGFja2VkIFNOb2RlSXRlbTsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU05vZGVMaXN0IHsKLQotCXUzMgkJICAgIHVJdGVtOwotCVNOb2RlSXRlbQlzTm9kZUxpc3RbMF07Ci0KLX0gX19wYWNrZWQgU05vZGVMaXN0LCAqUFNOb2RlTGlzdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdGFnU0NtZExpbmtTdGF0dXMgewotCi0gICAgYm9vbCAgICBiTGluazsKLQl1MTYJICAgIHdCU1NUeXBlOwotCXU4ICAgICAgYnlTdGF0ZTsKLSAgICB1OCAgICAgIGFieUJTU0lEW0JTU0lEX0xFTl07Ci0gICAgdTggICAgICBhYnlTU0lEW1NTSURfTUFYTEVOICsgMl07Ci0gICAgdTMyICAgICB1Q2hhbm5lbDsKLSAgICB1MzIgICAgIHVMaW5rUmF0ZTsKLQotfSBfX3BhY2tlZCBTQ21kTGlua1N0YXR1cywgKlBTQ21kTGlua1N0YXR1czsKLQotLy8KLS8vIDgwMi4xMSBjb3VudGVyCi0vLwotdHlwZWRlZiBzdHJ1Y3QgdGFnU0RvdDExTUlCQ291bnQgewotICAgIHUzMiBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7Ci0gICAgdTMyIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKLSAgICB1MzIgRmFpbGVkQ291bnQ7Ci0gICAgdTMyIFJldHJ5Q291bnQ7Ci0gICAgdTMyIE11bHRpcGxlUmV0cnlDb3VudDsKLSAgICB1MzIgUlRTU3VjY2Vzc0NvdW50OwotICAgIHUzMiBSVFNGYWlsdXJlQ291bnQ7Ci0gICAgdTMyIEFDS0ZhaWx1cmVDb3VudDsKLSAgICB1MzIgRnJhbWVEdXBsaWNhdGVDb3VudDsKLSAgICB1MzIgUmVjZWl2ZWRGcmFnbWVudENvdW50OwotICAgIHUzMiBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7Ci0gICAgdTMyIEZDU0Vycm9yQ291bnQ7Ci19IF9fcGFja2VkIFNEb3QxMU1JQkNvdW50LCAqUFNEb3QxMU1JQkNvdW50OwotCi0vLwotLy8gc3RhdGlzdGljIGNvdW50ZXIKLS8vCi10eXBlZGVmIHN0cnVjdCB0YWdTU3RhdE1JQkNvdW50IHsKLSAgICAvLwotICAgIC8vIElTUiBzdGF0dXMgY291bnQKLSAgICAvLwotICAgIHUzMiAgIGR3SXNyVHgwT0s7Ci0gICAgdTMyICAgZHdJc3JUeDFPSzsKLSAgICB1MzIgICBkd0lzckJlYWNvblR4T0s7Ci0gICAgdTMyICAgZHdJc3JSeE9LOwotICAgIHUzMiAgIGR3SXNyVEJUVEludDsKLSAgICB1MzIgICBkd0lzclNUSU1FUkludDsKLSAgICB1MzIgICBkd0lzclVucmVjb3ZlcmFibGVFcnJvcjsKLSAgICB1MzIgICBkd0lzclNvZnRJbnRlcnJ1cHQ7Ci0gICAgdTMyICAgZHdJc3JSeE5vQnVmOwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCXUzMiBkd0lzclVua25vd247IC8qIHVua25vd24gaW50ZXJydXB0IGNvdW50ICovCi0KLSAgICAvLyBSU1Igc3RhdHVzIGNvdW50Ci0gICAgLy8KLSAgICB1MzIgICBkd1JzckZybUFsZ25FcnI7Ci0gICAgdTMyICAgZHdSc3JFcnI7Ci0gICAgdTMyICAgZHdSc3JDUkNFcnI7Ci0gICAgdTMyICAgZHdSc3JDUkNPazsKLSAgICB1MzIgICBkd1JzckJTU0lET2s7Ci0gICAgdTMyICAgZHdSc3JBRERST2s7Ci0gICAgdTMyICAgZHdSc3JJQ1ZPazsKLSAgICB1MzIgICBkd05ld1JzclNob3J0UHJlYW1ibGU7Ci0gICAgdTMyICAgZHdSc3JMb25nOwotICAgIHUzMiAgIGR3UnNyUnVudDsKLQotICAgIHUzMiAgIGR3UnNyUnhDb250cm9sOwotICAgIHUzMiAgIGR3UnNyUnhEYXRhOwotICAgIHUzMiAgIGR3UnNyUnhNYW5hZ2U7Ci0KLSAgICB1MzIgICBkd1JzclJ4UGFja2V0OwotICAgIHUzMiAgIGR3UnNyUnhPY3RldDsKLSAgICB1MzIgICBkd1JzckJyb2FkY2FzdDsKLSAgICB1MzIgICBkd1Jzck11bHRpY2FzdDsKLSAgICB1MzIgICBkd1JzckRpcmVjdGVkOwotICAgIC8vIDY0LWJpdCBPSUQKLSAgICB1MzIgICB1bGxSc3JPSzsKLQotICAgIC8vIGZvciBzb21lIG9wdGlvbmFsIE9JRHMgKDY0IGJpdHMpIGFuZCBETUkgc3VwcG9ydAotICAgIHUzMiAgIHVsbFJ4QnJvYWRjYXN0Qnl0ZXM7Ci0gICAgdTMyICAgdWxsUnhNdWx0aWNhc3RCeXRlczsKLSAgICB1MzIgICB1bGxSeERpcmVjdGVkQnl0ZXM7Ci0gICAgdTMyICAgdWxsUnhCcm9hZGNhc3RGcmFtZXM7Ci0gICAgdTMyICAgdWxsUnhNdWx0aWNhc3RGcmFtZXM7Ci0gICAgdTMyICAgdWxsUnhEaXJlY3RlZEZyYW1lczsKLQotICAgIHUzMiAgIGR3UnNyUnhGcmFnbWVudDsKLSAgICB1MzIgICBkd1JzclJ4RnJtTGVuNjQ7Ci0gICAgdTMyICAgZHdSc3JSeEZybUxlbjY1XzEyNzsKLSAgICB1MzIgICBkd1JzclJ4RnJtTGVuMTI4XzI1NTsKLSAgICB1MzIgICBkd1JzclJ4RnJtTGVuMjU2XzUxMTsKLSAgICB1MzIgICBkd1JzclJ4RnJtTGVuNTEyXzEwMjM7Ci0gICAgdTMyICAgZHdSc3JSeEZybUxlbjEwMjRfMTUxODsKLQotICAgIC8vIFRTUjAsMSBzdGF0dXMgY291bnQKLSAgICAvLwotCXUzMiBkd1RzclRvdGFsUmV0cnlbMl07ICAgICAgICAvKiB0b3RhbCBjb2xsaXNpb24gcmV0cnkgY291bnQgKi8KLQl1MzIgZHdUc3JPbmNlUmV0cnlbMl07ICAgICAgICAgLyogdGhpcyBwYWNrZXQgaGFkIG9uZSBjb2xsaXNpb24gKi8KLQl1MzIgZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVsyXTsgLyogdGhpcyBwYWNrZXQgaGFkIG1hbnkgY29sbGlzaW9ucyAqLwotCXUzMiBkd1RzclJldHJ5WzJdOyAgICAgICAgICAgICAvKiB0aGlzIHBhY2tldCBoYXMgZXZlciBvY2N1ciBjb2xsaXNpb24sCi0JCQkJCSogdGhhdCBpcyAoZHdUc3JPbmNlQ29sbGlzaW9uMCBwbHVzCi0JCQkJCSogZHdUc3JNb3JlVGhhbk9uY2VDb2xsaXNpb24wKSAqLwotICAgIHUzMiAgIGR3VHNyQUNLRGF0YVsyXTsKLSAgICB1MzIgICBkd1RzckVyclsyXTsKLSAgICB1MzIgICBkd0FsbFRzck9LWzJdOwotICAgIHUzMiAgIGR3VHNyUmV0cnlUaW1lb3V0WzJdOwotICAgIHUzMiAgIGR3VHNyVHJhbnNtaXRUaW1lb3V0WzJdOwotCi0gICAgdTMyICAgZHdUc3JUeFBhY2tldFsyXTsKLSAgICB1MzIgICBkd1RzclR4T2N0ZXRbMl07Ci0gICAgdTMyICAgZHdUc3JCcm9hZGNhc3RbMl07Ci0gICAgdTMyICAgZHdUc3JNdWx0aWNhc3RbMl07Ci0gICAgdTMyICAgZHdUc3JEaXJlY3RlZFsyXTsKLQotICAgIC8vIFJEL1REIGNvdW50Ci0gICAgdTMyICAgZHdDbnRSeEZybUxlbmd0aDsKLSAgICB1MzIgICBkd0NudFR4QnVmTGVuZ3RoOwotCi0gICAgdTggICAgYWJ5Q250UnhQYXR0ZXJuWzE2XTsKLSAgICB1OCAgICBhYnlDbnRUeFBhdHRlcm5bMTZdOwotCi0JLyogU29mdHdhcmUgY2hlY2suLi4uICovCi0JdTMyIGR3Q250UnhEYXRhRXJyOyAgLyogcnggYnVmZmVyIGRhdGEgQ1JDIGVyciBjb3VudCAqLwotCXUzMiBkd0NudERlY3J5cHRFcnI7IC8qIHJ4IGJ1ZmZlciBkYXRhIENSQyBlcnIgY291bnQgKi8KLQl1MzIgZHdDbnRSeElDVkVycjsgICAvKiByeCBidWZmZXIgZGF0YSBDUkMgZXJyIGNvdW50ICovCi0JdTMyIGlkeFJ4RXJyb3JEZXNjOyAgLyogaW5kZXggZm9yIHJ4IGRhdGEgZXJyb3IgUkQgKi8KLQotCS8qIDY0LWJpdCBPSUQgKi8KLQl1MzIgICB1bGxUc3JPS1syXTsKLQotICAgIC8vIGZvciBzb21lIG9wdGlvbmFsIE9JRHMgKDY0IGJpdHMpIGFuZCBETUkgc3VwcG9ydAotICAgIHUzMiAgIHVsbFR4QnJvYWRjYXN0RnJhbWVzWzJdOwotICAgIHUzMiAgIHVsbFR4TXVsdGljYXN0RnJhbWVzWzJdOwotICAgIHUzMiAgIHVsbFR4RGlyZWN0ZWRGcmFtZXNbMl07Ci0gICAgdTMyICAgdWxsVHhCcm9hZGNhc3RCeXRlc1syXTsKLSAgICB1MzIgICB1bGxUeE11bHRpY2FzdEJ5dGVzWzJdOwotICAgIHUzMiAgIHVsbFR4RGlyZWN0ZWRCeXRlc1syXTsKLX0gX19wYWNrZWQgU1N0YXRNSUJDb3VudCwgKlBTU3RhdE1JQkNvdW50OwotCi10eXBlZGVmIHN0cnVjdCB0YWdTQ21kVmFsdWUgewotCi0gICAgdTMyICAgICBkd1ZhbHVlOwotCi19IF9fcGFja2VkIFNDbWRWYWx1ZSwgICpQU0NtZFZhbHVlOwotCi0vLwotLy8gaG9zdGFwZCAmIHZpYXdnZXQgaW9jdGwgcmVsYXRlZAotLy8KLQotLy8gVklBR1dFVF9JT0NUTF9IT1NUQVBEIGlvY3RsKCkgY21kOgotZW51bSB7Ci0JVklBV0dFVF9IT1NUQVBEX0ZMVVNIID0gMSwKLQlWSUFXR0VUX0hPU1RBUERfQUREX1NUQSA9IDIsCi0JVklBV0dFVF9IT1NUQVBEX1JFTU9WRV9TVEEgPSAzLAotCVZJQVdHRVRfSE9TVEFQRF9HRVRfSU5GT19TVEEgPSA0LAotCVZJQVdHRVRfSE9TVEFQRF9TRVRfRU5DUllQVElPTiA9IDUsCi0JVklBV0dFVF9IT1NUQVBEX0dFVF9FTkNSWVBUSU9OID0gNiwKLQlWSUFXR0VUX0hPU1RBUERfU0VUX0ZMQUdTX1NUQSA9IDcsCi0JVklBV0dFVF9IT1NUQVBEX1NFVF9BU1NPQ19BUF9BRERSID0gOCwKLQlWSUFXR0VUX0hPU1RBUERfU0VUX0dFTkVSSUNfRUxFTUVOVCA9IDksCi0JVklBV0dFVF9IT1NUQVBEX01MTUUgPSAxMCwKLQlWSUFXR0VUX0hPU1RBUERfU0NBTl9SRVEgPSAxMSwKLQlWSUFXR0VUX0hPU1RBUERfU1RBX0NMRUFSX1NUQVRTID0gMTIsCi19OwotCi0jZGVmaW5lIFZJQVdHRVRfSE9TVEFQRF9HRU5FUklDX0VMRU1FTlRfSERSX0xFTiBcCi0oKGludCkgKCYoKHN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKikgMCktPnUuZ2VuZXJpY19lbGVtLmRhdGEpKQotCi0vLyBNYXhpbXVtIGxlbmd0aCBmb3IgYWxnb3JpdGhtIG5hbWVzICgtMSBmb3IgbnVsIHRlcm1pbmF0aW9uKSB1c2VkIGluIGlvY3RsKCkKLQotc3RydWN0IHZpYXdnZXRfaG9zdGFwZF9wYXJhbSB7Ci0JdTMyIGNtZDsKLQl1OCBzdGFfYWRkcls2XTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1MTYgYWlkOwotCQkJdTE2IGNhcGFiaWxpdHk7Ci0JCQl1OCB0eF9zdXBwX3JhdGVzOwotCQl9IGFkZF9zdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1MzIgaW5hY3RpdmVfc2VjOwotCQl9IGdldF9pbmZvX3N0YTsKLQkJc3RydWN0IHsKLQkJCXU4IGFsZzsKLQkJCXUzMiBmbGFnczsKLQkJCXUzMiBlcnI7Ci0JCQl1OCBpZHg7Ci0JCQl1OCBzZXFbOF07Ci0JCQl1MTYga2V5X2xlbjsKLQkJCXU4IGtleVswXTsKLQkJfSBjcnlwdDsKLQkJc3RydWN0IHsKLQkJCXUzMiBmbGFnc19hbmQ7Ci0JCQl1MzIgZmxhZ3Nfb3I7Ci0JCX0gc2V0X2ZsYWdzX3N0YTsKLQkJc3RydWN0IHsKLQkJCXUxNiByaWQ7Ci0JCQl1MTYgbGVuOwotCQkJdTggZGF0YVswXTsKLQkJfSByaWQ7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBsZW47Ci0JCQl1OCBkYXRhWzBdOwotCQl9IGdlbmVyaWNfZWxlbTsKLQkJc3RydWN0IHsKLQkJCXUxNiBjbWQ7Ci0JCQl1MTYgcmVhc29uX2NvZGU7Ci0JCX0gbWxtZTsKLQkJc3RydWN0IHsKLQkJCXU4IHNzaWRfbGVuOwotCQkJdTggc3NpZFszMl07Ci0JCX0gc2Nhbl9yZXE7Ci0JfSB1OwotfSBfX3BhY2tlZDsKLQogI2VuZGlmIC8qIF9fSU9DTURfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvd3BhLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvd3BhLmgKaW5kZXggOTdhZjMyZS4uOThmMmIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb3dwYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW93cGEuaApAQCAtMzEsNDMgKzMxLDYgQEAKIAogI2RlZmluZSBXUEFfSUVfTEVOIDY0CiAKLS8vV1BBIHJlbGF0ZWQKLS8qCi10eXBlZGVmIGVudW0geyBXUEFfQUxHX05PTkUsIFdQQV9BTEdfV0VQLCBXUEFfQUxHX1RLSVAsIFdQQV9BTEdfQ0NNUCB9IHdwYV9hbGc7Ci10eXBlZGVmIGVudW0geyBDSVBIRVJfTk9ORSwgQ0lQSEVSX1dFUDQwLCBDSVBIRVJfVEtJUCwgQ0lQSEVSX0NDTVAsCi0JICAgICAgIENJUEhFUl9XRVAxMDQgfSB3cGFfY2lwaGVyOwotdHlwZWRlZiBlbnVtIHsgS0VZX01HTVRfODAyXzFYLCBLRVlfTUdNVF9QU0ssIEtFWV9NR01UX05PTkUsCi0JICAgICAgIEtFWV9NR01UXzgwMl8xWF9OT19XUEEsIEtFWV9NR01UX1dQQV9OT05FIH0gd3BhX2tleV9tZ210OwotKi8KLQotZW51bSB7Ci0JVklBV0dFVF9TRVRfV1BBID0gMSwKLQlWSUFXR0VUX1NFVF9LRVkgPSAyLAotCVZJQVdHRVRfU0VUX1NDQU4gPSAzLAotCVZJQVdHRVRfR0VUX1NDQU4gPSA0LAotCVZJQVdHRVRfR0VUX1NTSUQgPSA1LAotCVZJQVdHRVRfR0VUX0JTU0lEID0gNiwKLQlWSUFXR0VUX1NFVF9EUk9QX1VORU5DUllQVCA9IDcsCi0JVklBV0dFVF9TRVRfREVBVVRIRU5USUNBVEUgPSA4LAotCVZJQVdHRVRfU0VUX0FTU09DSUFURSA9IDksCi0JVklBV0dFVF9TRVRfRElTQVNTT0NJQVRFID0gMTAKLX07Ci0KLWVudW0gewotCVZJQVdHRVRfQVNTT0NfTVNHID0gMSwKLQlWSUFXR0VUX0RJU0FTU09DX01TRyA9IDIsCi0JVklBV0dFVF9QVEtfTUlDX01TRyA9IDMsCi0JVklBV0dFVF9HVEtfTUlDX01TRyA9IDQsCi0JVklBV0dFVF9DQ0tNX1JPQU1fTVNHID0gNSwKLQlWSUFXR0VUX0RFVklDRUNMT1NFX01TRyA9IDYKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHZpYXdnZXRfd3BhX2hlYWRlciB7Ci0JdTggdHlwZTsKLQl1MTYgcmVxX2llX2xlbjsKLQl1MTYgcmVzcF9pZV9sZW47Ci19IF9fcGFja2VkIHZpYXdnZXRfd3BhX2hlYWRlcjsKLQogc3RydWN0IHZpYXdnZXRfd3BhX3BhcmFtIHsKIAl1MzIgY21kOwogCXU4IGFkZHJbNl07CkBAIC0xMDksMjAgKzcyLDQgQEAKIAl9IHU7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCB7Ci0JdTggYnNzaWRbNl07Ci0JdTggc3NpZFszMl07Ci0JdTE2IHNzaWRfbGVuOwotCXU4IHdwYV9pZVtXUEFfSUVfTEVOXTsKLQl1MTYgd3BhX2llX2xlbjsKLQl1OCByc25faWVbV1BBX0lFX0xFTl07Ci0JdTE2IHJzbl9pZV9sZW47Ci0JaW50IGZyZXE7IC8vIE1IegotCWludCBjYXBzOyAvLyBlLmcuIHByaXZhY3kKLQlpbnQgcXVhbDsgLy8gc2lnbmFsIHF1YWxpdHkKLQlpbnQgbm9pc2U7Ci0JaW50IGxldmVsOwotCWludCBtYXhyYXRlOwotfSBfX3BhY2tlZDsKLQogI2VuZGlmIC8qIF9fSU9XUEFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmMKaW5kZXggY2Y0YzA2YS4uYzQzNzE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaXdjdGwuYwpAQCAtMzQsMTMgKzM0LDExIEBACiAjaW5jbHVkZSAiaXdjdGwuaCIKICNpbmNsdWRlICJtYWMuaCIKICNpbmNsdWRlICJjYXJkLmgiCi0jaW5jbHVkZSAiaG9zdGFwLmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKICNpbmNsdWRlICJyZi5oIgogI2luY2x1ZGUgImlvd3BhLmgiCiAjaW5jbHVkZSAid3BhY3RsLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgotI2luY2x1ZGUgInJuZGlzLmgiCisjaW5jbHVkZSAidXNicGlwZS5oIgogI2luY2x1ZGUgImJhc2ViYW5kLmgiCiAKIHN0YXRpYyBjb25zdCBsb25nIGZyZXF1ZW5jeV9saXN0W10gPSB7CkBAIC01OSw3ICs1Nyw3IEBACiAJbG9uZyBsZEJtOwogCiAJcERldmljZS0+d3N0YXRzLnN0YXR1cyA9IHBEZXZpY2UtPm9wX21vZGU7Ci0JUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1OCkocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOworCXZudF9yZl9yc3NpX3RvX2RibShwRGV2aWNlLCAodTgpKHBEZXZpY2UtPnVDdXJyUlNTSSksICZsZEJtKTsKIAlwRGV2aWNlLT53c3RhdHMucXVhbC5sZXZlbCA9IGxkQm07CiAJcERldmljZS0+d3N0YXRzLnF1YWwubm9pc2UgPSAwOwogCXBEZXZpY2UtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSAxOwpAQCAtOTMsNiArOTEsNyBAQAogCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWV4dHJhOwogCXU4IGFieVNjYW5TU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwogCVBXTEFOX0lFX1NTSUQgcEl0ZW1TU0lEID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTcsNyArMTE2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKIAogCUJTU3ZDbGVhckJTU0xpc3QoKHZvaWQgKilwRGV2aWNlLCBwRGV2aWNlLT5iTGlua1Bhc3MpOwogCkBAIC0xMzgsNyArMTM3LDggQEAKIAkJCVBSSU5UX0soIlNJT0NTSVdTQ0FOOltkZXNpcmVkX3NzaWQ9JXMsbGVuPSVkXVxuIiwgKChQV0xBTl9JRV9TU0lEKWFieVNjYW5TU0lEKS0+YWJ5U1NJRCwKIAkJCQkoKFBXTEFOX0lFX1NTSUQpYWJ5U2NhblNTSUQpLT5sZW4pOwogCQkJYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKXBEZXZpY2UsIFdMQU5fQ01EX0JTU0lEX1NDQU4sIGFieVNjYW5TU0lEKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKIAogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSBpZiAocmVxLT5zY2FuX3R5cGUgPT0gSVdfU0NBTl9UWVBFX1BBU1NJVkUpIHsgLy8gcGFzc2l2ZSBzY2FuCkBAIC0xNTAsNyArMTUwLDggQEAKIAogCXBNZ210LT5lU2NhblR5cGUgPSBXTUFDX1NDQU5fUEFTU0lWRTsKIAliU2NoZWR1bGVDb21tYW5kKCh2b2lkICopcERldmljZSwgV0xBTl9DTURfQlNTSURfU0NBTiwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM0LDcgKzIzNSw3IEBACiAJCQkvLyBBREQgcXVhbGl0eQogCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQkJCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAodTgpKHBCU1MtPnVSU1NJKSwgJmxkQm0pOworCQkJdm50X3JmX3Jzc2lfdG9fZGJtKHBEZXZpY2UsICh1OCkocEJTUy0+dVJTU0kpLCAmbGRCbSk7CiAJCQlpd2UudS5xdWFsLmxldmVsID0gbGRCbTsKIAkJCWl3ZS51LnF1YWwubm9pc2UgPSAwOwogCkBAIC0zNzcsNiArMzc4LDcgQEAKIAlzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCV9fdTMyICp3bW9kZSA9ICZ3cnF1LT5tb2RlOwogCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NTSVdNT0RFXG4iKTsKQEAgLTM4NCwxMiArMzg2LDYgQEAKIAlpZiAocE1nbXQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQICYmIHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkKSB7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCSJDYW4ndCBzZXQgb3BlcmF0aW9uIG1vZGUsIGhvc3RhcGQgaXMgcnVubmluZ1xuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KIAlzd2l0Y2ggKCp3bW9kZSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKIAkJaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19JQlNTX1NUQSkgewpAQCAtNDA5LDE5ICs0MDUsOSBAQAogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJzZXQgbW9kZSB0byBpbmZyYXN0cnVjdHVyZVxuIik7CiAJCWJyZWFrOwogCWNhc2UgSVdfTU9ERV9NQVNURVI6Ci0KLQkJcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfRVNTX1NUQTsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CiAKLQkJaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19BUCkgewotCQkJcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfQVA7Ci0JCQlpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQotCQkJCXBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwotCQl9Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBtb2RlIHRvIEFjY2VzcyBQb2ludFxuIik7Ci0JCWJyZWFrOwotCiAJY2FzZSBJV19NT0RFX1JFUEVBVDoKIAkJcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfRVNTX1NUQTsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKQEAgLTQzMywxNiArNDE5LDE3IEBACiAJaWYgKHBEZXZpY2UtPmJDb21taXQpIHsKIAkJaWYgKHBNZ210LT5lQ29uZmlnTW9kZSA9PSBXTUFDX0NPTkZJR19BUCkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwotCQkJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CisKIAkJCWJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwKIAkJCQlXTEFOX0NNRF9SVU5fQVAsIE5VTEwpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcERldmljZS0+bG9jaywgZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwogCQkJCSJDb21taXQgdGhlIHNldHRpbmdzXG4iKTsKIAotCQkJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0KIAkJCWlmIChwRGV2aWNlLT5iTGlua1Bhc3MgJiYKIAkJCQltZW1jbXAocE1nbXQtPmFieUN1cnJTU0lELAogCQkJCQlwTWdtdC0+YWJ5RGVzaXJlU1NJRCwKQEAgLTQ1NSw5ICs0NDIsNyBAQAogCQkJCW1lbXNldChwTWdtdC0+YWJ5Q3VyckJTU0lELCAwLCA2KTsKIAkJCX0KIAotCQkJQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLAotCQkJCU1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCU1BQ19SRUdfUEFQRURFTEFZLAotCQkJCQlMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CisJCQl2bnRfbWFjX3NldF9sZWQocERldmljZSwgTEVEU1RTX1NUUywgTEVEU1RTX1NMT1cpOwogCiAJCQluZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAKQEAgLTQ3MSw4ICs0NTYsNiBAQAogCQkJYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLAogCQkJCSBXTEFOX0NNRF9TU0lELAogCQkJCSBOVUxMKTsKLQotCQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJfQogCQlwRGV2aWNlLT5iQ29tbWl0ID0gZmFsc2U7CiAJfQpAQCAtMTE3Miw3ICsxMTU1LDcgQEAKIAlzdHJ1Y3QgaXdfcG9pbnQgKndycSA9ICZ3cnF1LT5lbmNvZGluZzsKIAl1MzIgZHdLZXlJbmRleCA9ICh1MzIpKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOwogCWludCBpaTsKLQlpbnQgdXU7CisJdTggdXU7CiAJaW50IHJjID0gMDsKIAlpbnQgaW5kZXggPSAod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CiAKQEAgLTEyMTIsMTQgKzExOTUsMTIgQEAKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiUwMnggIiwgcERldmljZS0+YWJ5S2V5W2lpXSk7CiAKIAkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCQkJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJCQlLZXliU2V0RGVmYXVsdEtleShwRGV2aWNlLAogCQkJCQkmKHBEZXZpY2UtPnNLZXkpLAogCQkJCQlkd0tleUluZGV4IHwgKDEgPDwgMzEpLAogCQkJCQl3cnEtPmxlbmd0aCwgTlVMTCwKIAkJCQkJcERldmljZS0+YWJ5S2V5LAogCQkJCQlLRVlfQ1RMX1dFUCk7Ci0JCQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQl9CiAJCXBEZXZpY2UtPmJ5S2V5SW5kZXggPSAodTgpZHdLZXlJbmRleDsKIAkJcERldmljZS0+dUtleUxlbmd0aCA9IHdycS0+bGVuZ3RoOwpAQCAtMTI0MiwxMCArMTIyMyw4IEBACiAJCXBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAJCXBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKIAkJaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCQkJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJCQlmb3IgKHV1ID0gMDsgdXUgPCBNQVhfS0VZX1RBQkxFOyB1dSsrKQogCQkJCU1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSwgdXUpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJfQogCX0KIAlpZiAod3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7CkBAIC0xMzQyLDEyICsxMzIxLDkgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCiAJaWYgKHdycS0+ZGlzYWJsZWQpIHsKIAkJcERldmljZS0+ZVBTTW9kZSA9IFdNQUNfUE9XRVJfQ0FNOwogCQlQU3ZEaXNhYmxlUG93ZXJTYXZpbmcocERldmljZSk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJCXJldHVybiByYzsKIAl9CiAJaWYgKCh3cnEtPmZsYWdzICYgSVdfUE9XRVJfVFlQRSkgPT0gSVdfUE9XRVJfVElNRU9VVCkgewpAQCAtMTM1OSw4ICsxMzM1LDYgQEAKIAkJUFN2RW5hYmxlUG93ZXJTYXZpbmcoKHZvaWQgKilwRGV2aWNlLCBwTWdtdC0+d0xpc3RlbkludGVydmFsKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCiAJc3dpdGNoICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgewogCWNhc2UgSVdfUE9XRVJfVU5JQ0FTVF9SOgogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV1BPV0VSOiBJV19QT1dFUl9VTklDQVNUX1JcbiIpOwpAQCAtMTQyNSw3ICsxMzk5LDcgQEAKIAogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXU0VOU1xuIik7CiAJaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSB7Ci0JCVJGdlJTU0lUb2RCbShwRGV2aWNlLCAodTgpKHBEZXZpY2UtPnVDdXJyUlNTSSksICZsZEJtKTsKKwkJdm50X3JmX3Jzc2lfdG9fZGJtKHBEZXZpY2UsICh1OCkocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOwogCQl3cnEtPnZhbHVlID0gbGRCbTsKIAl9IGVsc2UgewogCQl3cnEtPnZhbHVlID0gMDsKQEAgLTE3MjMsOSArMTY5Nyw3IEBACiAJCUtleXZJbml0VGFibGUocERldmljZSwgJnBEZXZpY2UtPnNLZXkpOwogCX0KIC8qKioqKioqLwotCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCXJldCA9IHdwYV9zZXRfa2V5cyhwRGV2aWNlLCBwYXJhbSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAogZXJyb3I6CiAJa2ZyZWUoYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYva2V5LmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2tleS5jCmluZGV4IGJlOTJjMDQuLjM4ZWE2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYva2V5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9rZXkuYwpAQCAtMzksOCArMzksNyBAQAogI2luY2x1ZGUgIm1hYy5oIgogI2luY2x1ZGUgInRtYWNyby5oIgogI2luY2x1ZGUgImtleS5oIgotI2luY2x1ZGUgInJuZGlzLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInVzYnBpcGUuaCIKIAogc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CiAvL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKQEAgLTY4LDE1ICs2NywxMCBAQAogICAgICAgICAgICAgLy9NQUN2RGlzYWJsZUtleUVudHJ5KHBEZXZpY2UsIGkpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICggd0xlbmd0aCAhPSAwICkgewotICAgICAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX0NMUktFWUVOVFJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBieURhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIH0KKworCWlmICh3TGVuZ3RoICE9IDApCisJCXZudF9jb250cm9sX291dChwRGV2aWNlLCBNRVNTQUdFX1RZUEVfQ0xSS0VZRU5UUlksCisJCQkwLCAwLCB3TGVuZ3RoLCBwYnlEYXRhKTsKIAogfQogCkBAIC05Nyw3ICs5MSw2IEBACiAJaW50IGksIGpqOwogCXU4IHBieURhdGFbTUFYX0tFWV9UQUJMRSsxXTsKIAotICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPSBmYWxzZTsKICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBmYWxzZTsKQEAgLTExNCwxNSArMTA3LDkgQEAKICAgICAgICAgcGJ5RGF0YVtpXSA9ICh1OCkgaTsKICAgICB9CiAgICAgcGJ5RGF0YVtpXSA9ICh1OCkgaTsKLSAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1RZUEVfQ0xSS0VZRU5UUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDExLAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisJdm50X2NvbnRyb2xfb3V0KHBEZXZpY2UsIE1FU1NBR0VfVFlQRV9DTFJLRVlFTlRSWSwKKwkJCTAsIDAsIDExLCBwYnlEYXRhKTsKIAogICAgIHJldHVybjsKIH0KQEAgLTI1MSw3ICsyMzgsOSBAQAogICAgICAgICAgICAgICAgIGlmICh1S2V5TGVuZ3RoID09IFdMQU5fV0VQMTA0X0tFWUxFTikKICAgICAgICAgICAgICAgICAgICAgcEtleS0+YWJ5S2V5WzE1XSB8PSAweDgwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTUFDdlNldEtleUVudHJ5KHBEZXZpY2UsIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCwgaSwgdUtleUlkeCwgcGJ5QlNTSUQsICh1MzIgKilwS2V5LT5hYnlLZXkpOworCisJICAgIE1BQ3ZTZXRLZXlFbnRyeShwRGV2aWNlLCBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwsIGksIHVLZXlJZHgsCisJCQlwYnlCU1NJRCwgcEtleS0+YWJ5S2V5KTsKIAogCQlpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKQogCQkJcEtleS0+S2V5UlNDID0gMDsgLyogUlNDIHNldCBieSBOSUMgKi8KQEAgLTMxOSw3ICszMDgsOSBAQAogICAgICAgICAgICAgaWYgKHVLZXlMZW5ndGggPT0gV0xBTl9XRVAxMDRfS0VZTEVOKQogICAgICAgICAgICAgICAgIHBLZXktPmFieUtleVsxNV0gfD0gMHg4MDsKICAgICAgICAgfQotICAgICAgICBNQUN2U2V0S2V5RW50cnkocERldmljZSwgcFRhYmxlLT5LZXlUYWJsZVtqXS53S2V5Q3RsLCBqLCB1S2V5SWR4LCBwYnlCU1NJRCwgKHUzMiAqKXBLZXktPmFieUtleSk7CisKKwlNQUN2U2V0S2V5RW50cnkocERldmljZSwgcFRhYmxlLT5LZXlUYWJsZVtqXS53S2V5Q3RsLCBqLCB1S2V5SWR4LAorCQkJCQlwYnlCU1NJRCwgcEtleS0+YWJ5S2V5KTsKIAogCQlpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKQogCQkJcEtleS0+S2V5UlNDID0gMDsgLyogUlNDIHNldCBieSBOSUMgKi8KQEAgLTYxNCw3ICs2MDUsOSBAQAogICAgICAgICAgICAgcEtleS0+YWJ5S2V5WzE1XSB8PSAweDgwOwogICAgIH0KIAotICAgIE1BQ3ZTZXRLZXlFbnRyeShwRGV2aWNlLCBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0ud0tleUN0bCwgTUFYX0tFWV9UQUJMRS0xLCB1S2V5SWR4LCBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYWJ5QlNTSUQsICh1MzIgKikgcEtleS0+YWJ5S2V5KTsKKwlNQUN2U2V0S2V5RW50cnkocERldmljZSwgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLndLZXlDdGwsCisJCU1BWF9LRVlfVEFCTEUtMSwgdUtleUlkeCwKKwkJcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmFieUJTU0lELCBwS2V5LT5hYnlLZXkpOwogCiAJCWlmICgoZHdLZXlJbmRleCAmIFVTRV9LRVlSU0MpID09IDApCiAJCQlwS2V5LT5LZXlSU0MgPSAwOyAvKiBSU0Mgc2V0IGJ5IE5JQyAqLwpAQCAtNzA4LDcgKzcwMSw4IEBACiAgICAgICAgICAgICAgICAgICAgIHBLZXktPmFieUtleVsxNV0gfD0gMHg4MDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTUFDdlNldEtleUVudHJ5KHBEZXZpY2UsIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCwgaSwgdUtleUlkeCwgcFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgKHUzMiAqKSBwS2V5LT5hYnlLZXkpOworCSAgICBNQUN2U2V0S2V5RW50cnkocERldmljZSwgcFRhYmxlLT5LZXlUYWJsZVtpXS53S2V5Q3RsLCBpLCB1S2V5SWR4LAorCQkJcFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcEtleS0+YWJ5S2V5KTsKIAogCQlpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKQogCQkJcEtleS0+S2V5UlNDID0gMDsgLyogUlNDIHNldCBieSBOSUMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5jCmluZGV4IDNjZTE5ZGQuLmNhZGY3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuYwpAQCAtMzUsMTEgKzM1LDcgQEAKICNpbmNsdWRlICJkZXNjLmgiCiAjaW5jbHVkZSAibWFjLmgiCiAjaW5jbHVkZSAiODAyMTFoZHIuaCIKLSNpbmNsdWRlICJybmRpcy5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKLQotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7Ci1zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsKKyNpbmNsdWRlICJ1c2JwaXBlLmgiCiAKIC8qCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTU0LDExICs1MCwxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZXcml0ZU11bHRpQWRkcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU2NCBtY19maWx0ZXIpCit2b2lkIE1BQ3ZXcml0ZU11bHRpQWRkcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU2NCBtY19maWx0ZXIpCiB7CiAJX19sZTY0IGxlX21jID0gY3B1X3RvX2xlNjQobWNfZmlsdGVyKTsKIAotCUNPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwgTUVTU0FHRV9UWVBFX1dSSVRFLCBNQUNfUkVHX01BUjAsCisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURSwgTUFDX1JFR19NQVIwLAogCQlNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBzaXplb2YobGVfbWMpLCAodTggKikmbGVfbWMpOwogfQogCkBAIC03MywzMSArNjksMjAgQEAKICAqCiAgKgogICovCi12b2lkIE1BQ2JTaHV0ZG93bihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCit2b2lkIE1BQ2JTaHV0ZG93bihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7Ci0gICAgQ09OVFJPTG5zUmVxdWVzdE91dEFzeW4ocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9NQUNTSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICk7CisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9NQUNTSFVURE9XTiwgMCwgMCwgMCwgTlVMTCk7CiB9CiAKLXZvaWQgTUFDdlNldEJCVHlwZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5VHlwZSkKK3ZvaWQgTUFDdlNldEJCVHlwZShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHR5cGUpCiB7Ci0JdTggcGJ5RGF0YVsyXTsKKwl1OCBkYXRhWzJdOwogCi0gICAgcGJ5RGF0YVswXSA9IGJ5VHlwZTsKLSAgICBwYnlEYXRhWzFdID0gRW5DRkdfQkJUeXBlX01BU0s7CisJZGF0YVswXSA9IHR5cGU7CisJZGF0YVsxXSA9IEVuQ0ZHX0JCVHlwZV9NQVNLOwogCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICBNQUNfUkVHX0VOQ0ZHMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCi0JCQlBUlJBWV9TSVpFKHBieURhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0ssIE1BQ19SRUdfRU5DRkcwLAorCQlNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAlBUlJBWV9TSVpFKGRhdGEpLCBkYXRhKTsKIH0KIAogLyoKQEAgLTExNCwyMCArOTksMTAgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2RGlzYWJsZUtleUVudHJ5KHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTMyIHVFbnRyeUlkeCkKK3ZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IGVudHJ5X2lkeCkKIHsKLQl1OCBieURhdGE7Ci0KLSAgICBieURhdGEgPSAodTgpIHVFbnRyeUlkeDsKLQotICAgIC8vaXNzdWUgd3JpdGUgbWlzYyBmaWZvIGNvbW1hbmQgdG8gZGV2aWNlCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX0NMUktFWUVOVFJZLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgICAgICAgICAgJmJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX0NMUktFWUVOVFJZLCAwLCAwLAorCQlzaXplb2YoZW50cnlfaWR4KSwgJmVudHJ5X2lkeCk7CiB9CiAKIC8qCkBAIC0xNDQsMjEwICsxMTksMTM3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldEtleUVudHJ5KHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTE2IHdLZXlDdGwsIHUzMiB1RW50cnlJZHgsCi0JdTMyIHVLZXlJZHgsIHU4ICpwYnlBZGRyLCB1MzIgKnBkd0tleSkKK3ZvaWQgTUFDdlNldEtleUVudHJ5KHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTE2IGtleV9jdGwsIHUzMiBlbnRyeV9pZHgsCisJdTMyIGtleV9pZHgsIHU4ICphZGRyLCB1OCAqa2V5KQogewotCXU4ICpwYnlLZXk7Ci0JdTE2IHdPZmZzZXQ7Ci0JdTMyIGR3RGF0YTEsIGR3RGF0YTI7Ci0JaW50IGlpOwotCXU4IHBieURhdGFbMjRdOworCXN0cnVjdCB2bnRfbWFjX3NldF9rZXkgc2V0X2tleTsKKwl1MTYgb2Zmc2V0OwogCi0JaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBNQUNfUkVWSVNJT05fQTEpCi0JCWlmIChwRGV2aWNlLT52bnRfbWdtdC5ieUNTU1BLID09IEtFWV9DVExfQ0NNUCkKKwlpZiAocHJpdi0+YnlMb2NhbElEIDw9IE1BQ19SRVZJU0lPTl9BMSkKKwkJaWYgKHByaXYtPnZudF9tZ210LmJ5Q1NTUEsgPT0gS0VZX0NUTF9DQ01QKQogCQkJcmV0dXJuOwogCi0gICAgd09mZnNldCA9IE1JU0NGSUZPX0tFWUVUUlkwOwotICAgIHdPZmZzZXQgKz0gKHVFbnRyeUlkeCAqIE1JU0NGSUZPX0tFWUVOVFJZU0laRSk7CisJb2Zmc2V0ID0gTUlTQ0ZJRk9fS0VZRVRSWTA7CisJb2Zmc2V0ICs9IChlbnRyeV9pZHggKiBNSVNDRklGT19LRVlFTlRSWVNJWkUpOwogCi0gICAgZHdEYXRhMSA9IDA7Ci0gICAgZHdEYXRhMSB8PSB3S2V5Q3RsOwotICAgIGR3RGF0YTEgPDw9IDE2OwotICAgIGR3RGF0YTEgfD0gTUFLRVdPUkQoKihwYnlBZGRyKzQpLCAqKHBieUFkZHIrNSkpOworCXNldF9rZXkudS53cml0ZS5rZXlfY3RsID0gY3B1X3RvX2xlMTYoa2V5X2N0bCk7CisJbWVtY3B5KHNldF9rZXkudS53cml0ZS5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiAKLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjEuIHdPZmZzZXQ6ICVkLCBEYXRhOiAlWCwiXAotCQkiIEtleUN0bDolWFxuIiwgd09mZnNldCwgZHdEYXRhMSwgd0tleUN0bCk7CisJLyogc3dhcCBvdmVyIHN3YXBbMF0gYW5kIHN3YXBbMV0gdG8gZ2V0IGNvcnJlY3Qgd3JpdGUgb3JkZXIgKi8KKwlzd2FwKHNldF9rZXkudS5zd2FwWzBdLCBzZXRfa2V5LnUuc3dhcFsxXSk7CiAKLSAgICBkd0RhdGEyID0gMDsKLSAgICBkd0RhdGEyIHw9ICoocGJ5QWRkciszKTsKLSAgICBkd0RhdGEyIDw8PSA4OwotICAgIGR3RGF0YTIgfD0gKihwYnlBZGRyKzIpOwotICAgIGR3RGF0YTIgPDw9IDg7Ci0gICAgZHdEYXRhMiB8PSAqKHBieUFkZHIrMSk7Ci0gICAgZHdEYXRhMiA8PD0gODsKLSAgICBkd0RhdGEyIHw9ICoocGJ5QWRkciswKTsKKwltZW1jcHkoc2V0X2tleS5rZXksIGtleSwgV0xBTl9LRVlfTEVOX0NDTVApOwogCi0JREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIyLiB3T2Zmc2V0OiAlZCwgRGF0YTogJVhcbiIsCi0JCXdPZmZzZXQsIGR3RGF0YTIpOworCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAib2Zmc2V0ICVkIGtleSBjdGwgJWQgc2V0IGtleSAlMjRwaFxuIiwKKwkJCQlvZmZzZXQsIGtleV9jdGwsICh1OCAqKSZzZXRfa2V5KTsKIAotICAgIHBieUtleSA9ICh1OCAqKXBkd0tleTsKLQotICAgIHBieURhdGFbMF0gPSAodTgpZHdEYXRhMTsKLSAgICBwYnlEYXRhWzFdID0gKHU4KShkd0RhdGExPj44KTsKLSAgICBwYnlEYXRhWzJdID0gKHU4KShkd0RhdGExPj4xNik7Ci0gICAgcGJ5RGF0YVszXSA9ICh1OCkoZHdEYXRhMT4+MjQpOwotICAgIHBieURhdGFbNF0gPSAodTgpZHdEYXRhMjsKLSAgICBwYnlEYXRhWzVdID0gKHU4KShkd0RhdGEyPj44KTsKLSAgICBwYnlEYXRhWzZdID0gKHU4KShkd0RhdGEyPj4xNik7Ci0gICAgcGJ5RGF0YVs3XSA9ICh1OCkoZHdEYXRhMj4+MjQpOwotICAgIGZvciAoaWkgPSA4OyBpaSA8IDI0OyBpaSsrKQotCXBieURhdGFbaWldID0gKnBieUtleSsrOwotCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1NFVEtFWSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAodTE2KXVLZXlJZHgsCi0JCQlBUlJBWV9TSVpFKHBieURhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQorCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfU0VUS0VZLCBvZmZzZXQsCisJCSh1MTYpa2V5X2lkeCwgc2l6ZW9mKHN0cnVjdCB2bnRfbWFjX3NldF9rZXkpLCAodTggKikmc2V0X2tleSk7CiB9CiAKLXZvaWQgTUFDdlJlZ0JpdHNPZmYoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCBieVJlZ09mcywgdTggYnlCaXRzKQordm9pZCBNQUN2UmVnQml0c09mZihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHJlZ19vZnMsIHU4IGJpdHMpCiB7Ci0JdTggcGJ5RGF0YVsyXTsKKwl1OCBkYXRhWzJdOwogCi0gICAgcGJ5RGF0YVswXSA9IDA7Ci0gICAgcGJ5RGF0YVsxXSA9IGJ5Qml0czsKKwlkYXRhWzBdID0gMDsKKwlkYXRhWzFdID0gYml0czsKIAotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9XUklURV9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgYnlSZWdPZnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAotCQkJQVJSQVlfU0laRShwYnlEYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBieURhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICk7CisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURV9NQVNLLAorCQlyZWdfb2ZzLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBBUlJBWV9TSVpFKGRhdGEpLCBkYXRhKTsKIH0KIAotdm9pZCBNQUN2UmVnQml0c09uKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggYnlSZWdPZnMsIHU4IGJ5Qml0cykKK3ZvaWQgTUFDdlJlZ0JpdHNPbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHJlZ19vZnMsIHU4IGJpdHMpCiB7Ci0JdTggcGJ5RGF0YVsyXTsKKwl1OCBkYXRhWzJdOwogCi0gICAgcGJ5RGF0YVswXSA9IGJ5Qml0czsKLSAgICBwYnlEYXRhWzFdID0gYnlCaXRzOworCWRhdGFbMF0gPSBiaXRzOworCWRhdGFbMV0gPSBiaXRzOwogCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICBieVJlZ09mcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCi0JCQlBUlJBWV9TSVpFKHBieURhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0ssCisJCXJlZ19vZnMsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEpOwogfQogCi12b2lkIE1BQ3ZXcml0ZVdvcmQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCBieVJlZ09mcywgdTE2IHdEYXRhKQordm9pZCBNQUN2V3JpdGVXb3JkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTggcmVnX29mcywgdTE2IHdvcmQpCiB7Ci0JdTggcGJ5RGF0YVsyXTsKKwl1OCBkYXRhWzJdOwogCi0gICAgcGJ5RGF0YVswXSA9ICh1OCkod0RhdGEgJiAweGZmKTsKLSAgICBwYnlEYXRhWzFdID0gKHU4KSh3RGF0YSA+PiA4KTsKKwlkYXRhWzBdID0gKHU4KSh3b3JkICYgMHhmZik7CisJZGF0YVsxXSA9ICh1OCkod29yZCA+PiA4KTsKIAotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5UmVnT2ZzLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKLQkJCUFSUkFZX1NJWkUocGJ5RGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYnlEYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotCisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURSwKKwkJcmVnX29mcywgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgQVJSQVlfU0laRShkYXRhKSwgZGF0YSk7CiB9CiAKLXZvaWQgTUFDdldyaXRlQlNTSURBZGRyZXNzKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggKnBieUV0aGVyQWRkcikKK3ZvaWQgTUFDdldyaXRlQlNTSURBZGRyZXNzKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTggKmFkZHIpCiB7Ci0JdTggcGJ5RGF0YVs2XTsKLQotICAgIHBieURhdGFbMF0gPSAqKCh1OCAqKXBieUV0aGVyQWRkcik7Ci0gICAgcGJ5RGF0YVsxXSA9ICooKHU4ICopcGJ5RXRoZXJBZGRyKzEpOwotICAgIHBieURhdGFbMl0gPSAqKCh1OCAqKXBieUV0aGVyQWRkcisyKTsKLSAgICBwYnlEYXRhWzNdID0gKigodTggKilwYnlFdGhlckFkZHIrMyk7Ci0gICAgcGJ5RGF0YVs0XSA9ICooKHU4ICopcGJ5RXRoZXJBZGRyKzQpOwotICAgIHBieURhdGFbNV0gPSAqKCh1OCAqKXBieUV0aGVyQWRkcis1KTsKLQotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19SRUdfQlNTSUQwLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKLQkJCUFSUkFZX1NJWkUocGJ5RGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYnlEYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICApOworCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIE1BQ19SRUdfQlNTSUQwLAorCQlNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBFVEhfQUxFTiwgYWRkcik7CiB9CiAKLXZvaWQgTUFDdkVuYWJsZVByb3RlY3RNRChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpCit2b2lkIE1BQ3ZFbmFibGVQcm90ZWN0TUQoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewotCXU4IHBieURhdGFbMl07CisJdTggZGF0YVsyXTsKIAotICAgIHBieURhdGFbMF0gPSBFbkNGR19Qcm90ZWN0TWQ7Ci0gICAgcGJ5RGF0YVsxXSA9IEVuQ0ZHX1Byb3RlY3RNZDsKKwlkYXRhWzBdID0gRW5DRkdfUHJvdGVjdE1kOworCWRhdGFbMV0gPSBFbkNGR19Qcm90ZWN0TWQ7CiAKLSAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1RZUEVfV1JJVEVfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19SRUdfRU5DRkcwLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKLQkJCUFSUkFZX1NJWkUocGJ5RGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYnlEYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICApOworCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEVfTUFTSywKKwkJTUFDX1JFR19FTkNGRzAsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEpOwogfQogCi12b2lkIE1BQ3ZEaXNhYmxlUHJvdGVjdE1EKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSkKK3ZvaWQgTUFDdkRpc2FibGVQcm90ZWN0TUQoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewotCXU4IHBieURhdGFbMl07CisJdTggZGF0YVsyXTsKIAotICAgIHBieURhdGFbMF0gPSAwOwotICAgIHBieURhdGFbMV0gPSBFbkNGR19Qcm90ZWN0TWQ7CisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IEVuQ0ZHX1Byb3RlY3RNZDsKIAotICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9XUklURV9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgTUFDX1JFR19FTkNGRzAsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAotCQkJQVJSQVlfU0laRShwYnlEYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBieURhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICk7CisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURV9NQVNLLAorCQlNQUNfUkVHX0VOQ0ZHMCwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgQVJSQVlfU0laRShkYXRhKSwgZGF0YSk7CiB9CiAKLXZvaWQgTUFDdkVuYWJsZUJhcmtlclByZWFtYmxlTWQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKQordm9pZCBNQUN2RW5hYmxlQmFya2VyUHJlYW1ibGVNZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYpCiB7Ci0JdTggcGJ5RGF0YVsyXTsKKwl1OCBkYXRhWzJdOwogCi0gICAgcGJ5RGF0YVswXSA9IEVuQ0ZHX0JhcmtlclByZWFtOwotICAgIHBieURhdGFbMV0gPSBFbkNGR19CYXJrZXJQcmVhbTsKKwlkYXRhWzBdID0gRW5DRkdfQmFya2VyUHJlYW07CisJZGF0YVsxXSA9IEVuQ0ZHX0JhcmtlclByZWFtOwogCi0gICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICBNQUNfUkVHX0VOQ0ZHMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsCi0JCQlBUlJBWV9TSVpFKHBieURhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgcGJ5RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFX01BU0ssCisJCU1BQ19SRUdfRU5DRkcyLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBBUlJBWV9TSVpFKGRhdGEpLCBkYXRhKTsKIH0KIAotdm9pZCBNQUN2RGlzYWJsZUJhcmtlclByZWFtYmxlTWQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKQordm9pZCBNQUN2RGlzYWJsZUJhcmtlclByZWFtYmxlTWQoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQogewotCXU4IHBieURhdGFbMl07CisJdTggZGF0YVsyXTsKIAotICAgIHBieURhdGFbMF0gPSAwOwotICAgIHBieURhdGFbMV0gPSBFbkNGR19CYXJrZXJQcmVhbTsKKwlkYXRhWzBdID0gMDsKKwlkYXRhWzFdID0gRW5DRkdfQmFya2VyUHJlYW07CiAKLSAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVNTQUdFX1RZUEVfV1JJVEVfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19SRUdfRU5DRkcyLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKLQkJCUFSUkFZX1NJWkUocGJ5RGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYnlEYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICApOworCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEVfTUFTSywKKwkJTUFDX1JFR19FTkNGRzIsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEpOwogfQogCi12b2lkIE1BQ3ZXcml0ZUJlYWNvbkludGVydmFsKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTE2IHdJbnRlcnZhbCkKK3ZvaWQgTUFDdldyaXRlQmVhY29uSW50ZXJ2YWwoc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1MTYgaW50ZXJ2YWwpCiB7Ci0JdTggcGJ5RGF0YVsyXTsKKwl1OCBkYXRhWzJdOwogCi0JcGJ5RGF0YVswXSA9ICh1OCkod0ludGVydmFsICYgMHhmZik7Ci0JcGJ5RGF0YVsxXSA9ICh1OCkod0ludGVydmFsID4+IDgpOworCWRhdGFbMF0gPSAodTgpKGludGVydmFsICYgMHhmZik7CisJZGF0YVsxXSA9ICh1OCkoaW50ZXJ2YWwgPj4gOCk7CiAKLSAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0JCQlNRVNTQUdFX1RZUEVfV1JJVEUsCi0JCQlNQUNfUkVHX0JJLAotCQkJTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKLQkJCUFSUkFZX1NJWkUocGJ5RGF0YSksCi0JCQlwYnlEYXRhCi0JCQkpOworCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsCisJCU1BQ19SRUdfQkksIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEpOworfQorCit2b2lkIHZudF9tYWNfc2V0X2xlZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHN0YXRlLCB1OCBsZWQpCit7CisJdTggZGF0YVsyXTsKKworCWRhdGFbMF0gPSBsZWQ7CisJZGF0YVsxXSA9IHN0YXRlOworCisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURV9NQVNLLCBNQUNfUkVHX1BBUEVERUxBWSwKKwkJCU1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIEFSUkFZX1NJWkUoZGF0YSksIGRhdGEpOworCisJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmgKaW5kZXggNDA1M2U0My4uOTg2Y2E5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5oCkBAIC00MDMsMTEgKzQwMywyMiBAQAogI2RlZmluZSBNQUNfUkVWSVNJT05fQTAgICAgIDB4MDAKICNkZWZpbmUgTUFDX1JFVklTSU9OX0ExICAgICAweDAxCiAKK3N0cnVjdCB2bnRfbWFjX3NldF9rZXkgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGFkZHJbRVRIX0FMRU5dOworCQkJX19sZTE2IGtleV9jdGw7CisJCX0gd3JpdGUgX19wYWNrZWQ7CisJCXUzMiBzd2FwWzJdOworCX0gdTsKKwl1OCBrZXlbV0xBTl9LRVlfTEVOX0NDTVBdOworfSBfX3BhY2tlZDsKKwogdm9pZCBNQUN2V3JpdGVNdWx0aUFkZHIoc3RydWN0IHZudF9wcml2YXRlICosIHU2NCk7CiB2b2lkIE1BQ2JTaHV0ZG93bihzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7CiB2b2lkIE1BQ3ZTZXRCQlR5cGUoc3RydWN0IHZudF9wcml2YXRlICosIHU4KTsKLXZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeShzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTMyKTsKLXZvaWQgTUFDdlNldEtleUVudHJ5KHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1MTYsIHUzMiwgdTMyLCB1OCAqLCB1MzIgKik7Cit2b2lkIE1BQ3ZEaXNhYmxlS2V5RW50cnkoc3RydWN0IHZudF9wcml2YXRlICosIHU4KTsKK3ZvaWQgTUFDdlNldEtleUVudHJ5KHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1MTYsIHUzMiwgdTMyLCB1OCAqLCB1OCAqKTsKIHZvaWQgTUFDdlJlZ0JpdHNPZmYoc3RydWN0IHZudF9wcml2YXRlICosIHU4LCB1OCk7CiB2b2lkIE1BQ3ZSZWdCaXRzT24oc3RydWN0IHZudF9wcml2YXRlICosIHU4LCB1OCk7CiB2b2lkIE1BQ3ZXcml0ZVdvcmQoc3RydWN0IHZudF9wcml2YXRlICosIHU4LCB1MTYpOwpAQCAtNDE3LDUgKzQyOCw2IEBACiB2b2lkIE1BQ3ZFbmFibGVCYXJrZXJQcmVhbWJsZU1kKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKTsKIHZvaWQgTUFDdkRpc2FibGVCYXJrZXJQcmVhbWJsZU1kKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKTsKIHZvaWQgTUFDdldyaXRlQmVhY29uSW50ZXJ2YWwoc3RydWN0IHZudF9wcml2YXRlICosIHUxNik7Cit2b2lkIHZudF9tYWNfc2V0X2xlZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4LCB1OCk7CiAKICNlbmRpZiAvKiBfX01BQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwppbmRleCAzYzkzMjMwLi5lMTgwNzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCkBAIC01NywxNyArNTcsMTUgQEAKICNpbmNsdWRlICJwb3dlci5oIgogI2luY2x1ZGUgIndjbWQuaCIKICNpbmNsdWRlICJpb2NtZC5oIgotI2luY2x1ZGUgInRjcmMuaCIKICNpbmNsdWRlICJyeHR4LmgiCiAjaW5jbHVkZSAiYnNzZGIuaCIKLSNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJ3cGFjdGwuaCIKICNpbmNsdWRlICJpd2N0bC5oIgogI2luY2x1ZGUgImRwYy5oIgogI2luY2x1ZGUgImRhdGFyYXRlLmgiCiAjaW5jbHVkZSAicmYuaCIKICNpbmNsdWRlICJmaXJtd2FyZS5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlICJ1c2JwaXBlLmgiCiAjaW5jbHVkZSAiY2hhbm5lbC5oIgogI2luY2x1ZGUgImludC5oIgogI2luY2x1ZGUgImlvd3BhLmgiCkBAIC0yMTYsOCArMjE0LDYgQEAKIAogc3RhdGljIGludCBkZXZpY2VfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKTsKIHN0YXRpYyBib29sIGRldmljZV9pbml0X2RlZnJhZ19jYihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UpOwotc3RhdGljIHZvaWQgZGV2aWNlX2luaXRfZGl2ZXJzaXR5X3RpbWVyKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSk7Ci1zdGF0aWMgaW50ICBkZXZpY2VfZG1hMF90eF84MDIxMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIGludCAgZXRodG9vbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKik7CiBzdGF0aWMgdm9pZCBkZXZpY2VfZnJlZV90eF9idWZzKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSk7CkBAIC0yNjIsMzMgKzI1OCw4IEBACiAgICAgcERldmljZS0+YnlCQlR5cGUgPSBCQlBfVFlQRV9ERUY7CiAgICAgcERldmljZS0+YnlQYWNrZXRUeXBlID0gcERldmljZS0+YnlCQlR5cGU7CiAgICAgcERldmljZS0+YnlBdXRvRkJDdHJsID0gQVVUT19GQl8wOwotICAgIHBEZXZpY2UtPmJVcGRhdGVCQlZHQSA9IHRydWU7Ci0gICAgcERldmljZS0+YnlGT0VUdW5pbmcgPSAwOwotICAgIHBEZXZpY2UtPmJ5QXV0b1B3clR1bm5pbmcgPSAwOwogICAgIHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlID0gMDsKICAgICBwRGV2aWNlLT5iRXhpc3RTV05ldEFkZHIgPSBmYWxzZTsKLSAgICAvKiBwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04gPSB0cnVlOyAqLwotICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlSZWdDdGxPTiA9IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBkZXZpY2VfaW5pdF9kaXZlcnNpdHlfdGltZXIoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlKQotewotICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDEpOwotICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDEuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBEZXZpY2U7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4MS5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKVRpbWVyU1EzQ2FsbEJhY2s7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4MS5leHBpcmVzID0gUlVOX0FUKEhaKTsKLQotICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDIpOwotICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBEZXZpY2U7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4Mi5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKVRpbWVyU1EzQ2FsbEJhY2s7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4Mi5leHBpcmVzID0gUlVOX0FUKEhaKTsKLQotICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDMpOwotICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBEZXZpY2U7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4My5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKVRpbWVyU1EzVG1heDNDYWxsQmFjazsKLSAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgzLmV4cGlyZXMgPSBSVU5fQVQoSFopOwotCi0gICAgcmV0dXJuOwogfQogCiAvKgpAQCAtMzEyLDggKzI4Myw2IEBACiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiLS0tLT5JTkliSW5pdEFkYXB0ZXIuIFslZF1bJWRdXG4iLAogCQkJCURFVklDRV9JTklUX0NPTEQsIHBEZXZpY2UtPmJ5UGFja2V0VHlwZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQogCW1lbWNweShwRGV2aWNlLT5hYnlCcm9hZGNhc3RBZGRyLCBhYnlCcm9hZGNhc3RBZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHBEZXZpY2UtPmFieVNOQVBfUkZDMTA0MiwgYWJ5U05BUF9SRkMxMDQyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHBEZXZpY2UtPmFieVNOQVBfQnJpZGdldHVubmVsLCBhYnlTTkFQX0JyaWRnZXR1bm5lbCwgRVRIX0FMRU4pOwpAQCAtMzIzLDIwICsyOTIsMTcgQEAKIAkJCWlmIChGSVJNV0FSRWJCcmFjaDJTcmFtKHBEZXZpY2UpID09IGZhbHNlKSB7CiAJCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwogCQkJCQkiIEZJUk1XQVJFYkJyYWNoMlNyYW0gZmFpbFxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCiAJCQkJIiBGSVJNV0FSRWJEb3dubG9hZCBmYWlsXG4iKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAKIAlpZiAoIUJCYlZUMzE4NEluaXQocERldmljZSkpIHsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgQkJiVlQzMTg0SW5pdCBmYWlsXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMzQ4LDM3ICszMTQsMzEgQEAKIAlpbml0X2NtZC0+bG9uZ19yZXRyeV9saW1pdCA9IHBEZXZpY2UtPmJ5TG9uZ1JldHJ5TGltaXQ7CiAKIAkvKiBpc3N1ZSBjYXJkX2luaXQgY29tbWFuZCB0byBkZXZpY2UgKi8KLQludFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKKwludFN0YXR1cyA9IHZudF9jb250cm9sX291dChwRGV2aWNlLAogCQlNRVNTQUdFX1RZUEVfQ0FSRElOSVQsIDAsIDAsCiAJCXNpemVvZihzdHJ1Y3Qgdm50X2NtZF9jYXJkX2luaXQpLCAodTggKilpbml0X2NtZCk7CiAJaWYgKG50U3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIElzc3VlIENhcmQgaW5pdCBmYWlsXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCW50U3RhdHVzID0gQ09OVFJPTG5zUmVxdWVzdEluKHBEZXZpY2UsIE1FU1NBR0VfVFlQRV9JTklUX1JTUCwgMCwgMCwKKwludFN0YXR1cyA9IHZudF9jb250cm9sX2luKHBEZXZpY2UsIE1FU1NBR0VfVFlQRV9JTklUX1JTUCwgMCwgMCwKIAkJc2l6ZW9mKHN0cnVjdCB2bnRfcnNwX2NhcmRfaW5pdCksICh1OCAqKWluaXRfcnNwKTsKIAlpZiAobnRTdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwogCQkJIkNhcmRpbml0IHJlcXVlc3QgaW4gc3RhdHVzIGZhaWwhXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIGxvY2FsIElEIGZvciBBRVMgZnVuY3Rpb25zICovCi0JbnRTdGF0dXMgPSBDT05UUk9MbnNSZXF1ZXN0SW4ocERldmljZSwgTUVTU0FHRV9UWVBFX1JFQUQsCisJbnRTdGF0dXMgPSB2bnRfY29udHJvbF9pbihwRGV2aWNlLCBNRVNTQUdFX1RZUEVfUkVBRCwKIAkJTUFDX1JFR19MT0NBTElELCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCAxLAogCQkJJnBEZXZpY2UtPmJ5TG9jYWxJRCk7Ci0JaWYgKG50U3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisJaWYgKG50U3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gZmFsc2U7Ci0JfQogCiAJLyogZG8gTUFDYlNvZnR3YXJlUmVzZXQgaW4gTUFDdkluaXRpYWxpemUgKi8KIAotCS8qIGZvcmNlIENDSyAqLwotCXBEZXZpY2UtPmJDQ0sgPSB0cnVlOwogCXBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IGZhbHNlOwogCS8qIG9ubHkgdXNlZCBpbiAxMWcgdHlwZSwgc3luYyB3aXRoIEVSUCBJRSAqLwogCXBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gZmFsc2U7CkBAIC0zOTYsNyArMzU2LDcgQEAKIAogCXBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSA9IFJBVEVfMjRNOwogCXBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlID0gUkFURV8xTTsKLQlwRGV2aWNlLT5ieVJldklkID0gMDsKKwogCS8qIHRhcmdldCB0byBJRiBwaW4gd2hpbGUgcHJvZ3JhbW1pbmcgdG8gUkYgY2hpcCAqLwogCXBEZXZpY2UtPmJ5Q3VyUHdyID0gMHhGRjsKIApAQCAtNDYxLDEzICs0MjEsNyBAQAogCQkJcERldmljZS0+YnlSeEFudGVubmFNb2RlID0gQU5UX0E7CiAJCWVsc2UKIAkJCXBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSA9IEFOVF9COwotCi0JCWlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04pCi0JCQlwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gdHJ1ZTsKLQkJZWxzZQotCQkJcERldmljZS0+YkRpdmVyc2l0eUVuYWJsZSA9IGZhbHNlOwogCX0gZWxzZSAgewotCQlwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gZmFsc2U7CiAJCXBEZXZpY2UtPmJ5QW50ZW5uYUNvdW50ID0gMTsKIAkJcERldmljZS0+ZHdUeEFudGVubmFTZWwgPSAwOwogCQlwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbCA9IDA7CkBAIC00ODksMjcgKzQ0MywxNCBAQAogCQl9CiAJfQogCi0JcERldmljZS0+dWxEaXZlcnNpdHlOVmFsdWUgPSAxMDAgKiAyNTU7Ci0JcERldmljZS0+dWxEaXZlcnNpdHlNVmFsdWUgPSAxMDAgKiAxNjsKLQlwRGV2aWNlLT5ieVRNYXggPSAxOwotCXBEZXZpY2UtPmJ5VE1heDIgPSA0OwotCXBEZXZpY2UtPnVsU1EzVEggPSAwOwotCXBEZXZpY2UtPmJ5VE1heDMgPSA2NDsKLQogCS8qIGdldCBBdXRvIEZhbGwgQmFjayB0eXBlICovCiAJcERldmljZS0+YnlBdXRvRkJDdHJsID0gQVVUT19GQl8wOwogCi0JLyogc2V0IFNDQU4gVGltZSAqLwotCXBEZXZpY2UtPnVTY2FuVGltZSA9IFdMQU5fU0NBTl9NSU5JVElNRTsKLQogCS8qIGRlZmF1bHQgQXV0byBNb2RlICovCiAJLyogcERldmljZS0+TmV0d29ya1R5cGUgPSBOZGlzODAyXzExQXV0b21vZGU7ICovCiAJcERldmljZS0+ZUNvbmZpZ1BIWU1vZGUgPSBQSFlfVFlQRV9BVVRPOwogCXBEZXZpY2UtPmJ5QkJUeXBlID0gQkJfVFlQRV8xMUc7CiAKLQkvKiBpbml0aWFsaXplIEJCUCByZWdpc3RlcnMgKi8KLQlwRGV2aWNlLT51bFR4UG93ZXIgPSAyNTsKLQogCS8qIGdldCBjaGFubmVsIHJhbmdlICovCiAJcERldmljZS0+YnlNaW5DaGFubmVsID0gMTsKIAlwRGV2aWNlLT5ieU1heENoYW5uZWwgPSBDQl9NQVhfQ0hBTk5FTDsKQEAgLTUxNywxMSArNDU4LDYgQEAKIAkvKiBnZXQgUkZUeXBlICovCiAJcERldmljZS0+YnlSRlR5cGUgPSBpbml0X3JzcC0+cmZfdHlwZTsKIAotCWlmICgocERldmljZS0+YnlSRlR5cGUgJiBSRl9FTVUpICE9IDApIHsKLQkJLyogZm9yY2UgY2hhbmdlIFJldklEIGZvciBWVDMyNTMgZW11ICovCi0JCXBEZXZpY2UtPmJ5UmV2SWQgPSAweDgwOwotCX0KLQogCS8qIGxvYWQgdnQzMjY2IGNhbGlicmF0aW9uIHBhcmFtZXRlcnMgaW4gRUVQUk9NICovCiAJaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX1ZUMzIyNkQwKSB7CiAJCWlmICgocERldmljZS0+YWJ5RUVQUk9NW0VFUF9PRlNfTUFKT1JfVkVSXSA9PSAweDEpICYmCkBAIC01MzIsMjggKzQ2OCwyOCBAQAogCQkJYnlDYWxpYlJYSVEgPSBwRGV2aWNlLT5hYnlFRVBST01bRUVQX09GU19DQUxJQl9SWF9JUV07CiAJCQlpZiAoYnlDYWxpYlRYSVEgfHwgYnlDYWxpYlRYREMgfHwgYnlDYWxpYlJYSVEpIHsKIAkJCS8qIENSMjU1LCBlbmFibGUgVFgvUlggSVEgYW5kIERDIGNvbXBlbnNhdGlvbiBtb2RlICovCi0JCQkJQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwKKwkJCQl2bnRfY29udHJvbF9vdXRfdTgocERldmljZSwKIAkJCQkJTUVTU0FHRV9SRVFVRVNUX0JCUkVHLAogCQkJCQkweGZmLAogCQkJCQkweDAzKTsKIAkJCS8qIENSMjUxLCBUWCBJL1EgSW1iYWxhbmNlIENhbGlicmF0aW9uICovCi0JCQkJQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwKKwkJCQl2bnRfY29udHJvbF9vdXRfdTgocERldmljZSwKIAkJCQkJTUVTU0FHRV9SRVFVRVNUX0JCUkVHLAogCQkJCQkweGZiLAogCQkJCQlieUNhbGliVFhJUSk7CiAJCQkvKiBDUjI1MiwgVFggREMtT2Zmc2V0IENhbGlicmF0aW9uICovCi0JCQkJQ29udHJvbHZXcml0ZUJ5dGUocERldmljZSwKKwkJCQl2bnRfY29udHJvbF9vdXRfdTgocERldmljZSwKIAkJCQkJTUVTU0FHRV9SRVFVRVNUX0JCUkVHLAogCQkJCQkweGZDLAogCQkJCQlieUNhbGliVFhEQyk7CiAJCQkvKiBDUjI1MywgUlggSS9RIEltYmFsYW5jZSBDYWxpYnJhdGlvbiAqLwotCQkJCUNvbnRyb2x2V3JpdGVCeXRlKHBEZXZpY2UsCisJCQkJdm50X2NvbnRyb2xfb3V0X3U4KHBEZXZpY2UsCiAJCQkJCU1FU1NBR0VfUkVRVUVTVF9CQlJFRywKIAkJCQkJMHhmZCwKIAkJCQkJYnlDYWxpYlJYSVEpOwogCQkJfSBlbHNlIHsKIAkJCS8qIENSMjU1LCB0dXJuIG9mZiBCQiBDYWxpYnJhdGlvbiBjb21wZW5zYXRpb24gKi8KLQkJCQlDb250cm9sdldyaXRlQnl0ZShwRGV2aWNlLAorCQkJCXZudF9jb250cm9sX291dF91OChwRGV2aWNlLAogCQkJCQlNRVNTQUdFX1JFUVVFU1RfQkJSRUcsCiAJCQkJCTB4ZmYsCiAJCQkJCTB4MCk7CkBAIC01OTAsMjQgKzUyNiwyMCBAQAogCUJCdlNldFNob3J0U2xvdFRpbWUocERldmljZSk7CiAJQ0FSRHZTZXRCU1NNb2RlKHBEZXZpY2UpOwogCi0JaWYgKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgewotCQlwRGV2aWNlLT5ieUJCVkdBQ3VycmVudCA9IHBEZXZpY2UtPmFieUJCVkdBWzBdOwotCQlwRGV2aWNlLT5ieUJCVkdBTmV3ID0gcERldmljZS0+YnlCQlZHQUN1cnJlbnQ7CisJcERldmljZS0+YnlCQlZHQUN1cnJlbnQgPSBwRGV2aWNlLT5hYnlCQlZHQVswXTsKKwlwRGV2aWNlLT5ieUJCVkdBTmV3ID0gcERldmljZS0+YnlCQlZHQUN1cnJlbnQ7CiAKLQkJQkJ2U2V0VkdBR2Fpbk9mZnNldChwRGV2aWNlLCBwRGV2aWNlLT5hYnlCQlZHQVswXSk7Ci0JfQorCUJCdlNldFZHQUdhaW5PZmZzZXQocERldmljZSwgcERldmljZS0+YWJ5QkJWR0FbMF0pOwogCiAJcERldmljZS0+YnlSYWRpb0N0bCA9IHBEZXZpY2UtPmFieUVFUFJPTVtFRVBfT0ZTX1JBRElPQ1RMXTsKIAlwRGV2aWNlLT5iSFdSYWRpb09mZiA9IGZhbHNlOwogCiAJaWYgKChwRGV2aWNlLT5ieVJhZGlvQ3RsICYgRUVQX1JBRElPQ1RMX0VOQUJMRSkgIT0gMCkgewotCQludFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RJbihwRGV2aWNlLCBNRVNTQUdFX1RZUEVfUkVBRCwKKwkJbnRTdGF0dXMgPSB2bnRfY29udHJvbF9pbihwRGV2aWNlLCBNRVNTQUdFX1RZUEVfUkVBRCwKIAkJCU1BQ19SRUdfR1BJT0NUTDEsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIDEsICZieVRtcCk7CiAKLQkJaWYgKG50U3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCQlpZiAobnRTdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAogCQlpZiAoKGJ5VG1wICYgR1BJTzNfREFUQSkgPT0gMCkgewogCQkJcERldmljZS0+YkhXUmFkaW9PZmYgPSB0cnVlOwpAQCAtNjE5LDExICs1NTEsOSBAQAogCiAJfQogCi0JQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAotCQkJCU1BQ19SRUdfUEFQRURFTEFZLCBMRURTVFNfVE1MRU4sIDB4MzgpOworCXZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfVE1MRU4sIDB4MzgpOwogCi0JQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAotCQkJCU1BQ19SRUdfUEFQRURFTEFZLCBMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CisJdm50X21hY19zZXRfbGVkKHBEZXZpY2UsIExFRFNUU19TVFMsIExFRFNUU19TTE9XKTsKIAogCU1BQ3ZSZWdCaXRzT24ocERldmljZSwgTUFDX1JFR19HUElPQ1RMMCwgMHgwMSk7CiAKQEAgLTYzNCw5ICs1NjQsNiBAQAogCQlDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKIAl9CiAKLQotCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0KIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjwtLS0tSU5JYkluaXRBZGFwdGVyIEV4aXRcbiIpOwogCiAJcmV0dXJuIHRydWU7CkBAIC03MDksMTggKzYzNiwxMyBAQAogCiAJZGV2aWNlX3NldF9vcHRpb25zKHBEZXZpY2UpOwogCXNwaW5fbG9ja19pbml0KCZwRGV2aWNlLT5sb2NrKTsKKwltdXRleF9pbml0KCZwRGV2aWNlLT51c2JfbG9jayk7CisKIAlJTklUX0RFTEFZRURfV09SSygmcERldmljZS0+cnVuX2NvbW1hbmRfd29yaywgdlJ1bkNvbW1hbmQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwRGV2aWNlLT5zZWNvbmRfY2FsbGJhY2tfd29yaywgQlNTdlNlY29uZENhbGxCYWNrKTsKIAlJTklUX1dPUksoJnBEZXZpY2UtPnJlYWRfd29ya19pdGVtLCBSWHZXb3JrSXRlbSk7CiAJSU5JVF9XT1JLKCZwRGV2aWNlLT5yeF9tbmdfd29ya19pdGVtLCBSWHZNbmdXb3JrSXRlbSk7CiAKLQlwRGV2aWNlLT5wQ29udHJvbFVSQiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFwRGV2aWNlLT5wQ29udHJvbFVSQikgewotCQlEQkdfUFJUKE1TR19MRVZFTF9FUlIsIEtFUk5fRVJSIkZhaWxlZCB0byBhbGxvYyBjb250cm9sIHVyYlxuIik7Ci0JCWdvdG8gZXJyX25ldGRldjsKLQl9Ci0KLQlwRGV2aWNlLT50eF84MDIxMSA9IGRldmljZV9kbWEwX3R4XzgwMjExOwogCXBEZXZpY2UtPnZudF9tZ210LnBBZGFwdGVyID0gKHZvaWQgKikgcERldmljZTsKIAogCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZkZXZpY2VfbmV0ZGV2X29wczsKQEAgLTc1Nyw5ICs2NzksOSBAQAogCWZvciAoaWkgPSAwOyBpaSA8IHByaXYtPmNiVEQ7IGlpKyspIHsKIAkJdHhfY29udGV4dCA9IHByaXYtPmFwVERbaWldOwogCQkvKiBkZWFsbG9jYXRlIFVSQnMgKi8KLQkJaWYgKHR4X2NvbnRleHQtPnBVcmIpIHsKLQkJCXVzYl9raWxsX3VyYih0eF9jb250ZXh0LT5wVXJiKTsKLQkJCXVzYl9mcmVlX3VyYih0eF9jb250ZXh0LT5wVXJiKTsKKwkJaWYgKHR4X2NvbnRleHQtPnVyYikgeworCQkJdXNiX2tpbGxfdXJiKHR4X2NvbnRleHQtPnVyYik7CisJCQl1c2JfZnJlZV91cmIodHhfY29udGV4dC0+dXJiKTsKIAkJfQogCiAJCWtmcmVlKHR4X2NvbnRleHQpOwpAQCAtODI1LDE3ICs3NDcsMTcgQEAKIAkJfQogCiAJCXByaXYtPmFwVERbaWldID0gdHhfY29udGV4dDsKLQkJdHhfY29udGV4dC0+cERldmljZSA9IHByaXY7CisJCXR4X2NvbnRleHQtPnByaXYgPSBwcml2OwogCiAJCS8qIGFsbG9jYXRlIFVSQnMgKi8KLQkJdHhfY29udGV4dC0+cFVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JCWlmICh0eF9jb250ZXh0LT5wVXJiID09IE5VTEwpIHsKKwkJdHhfY29udGV4dC0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF0eF9jb250ZXh0LT51cmIpIHsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0VSUiwKIAkJCQlLRVJOX0VSUiAiYWxsb2MgdHggdXJiIGZhaWxlZFxuIik7CiAJCQlnb3RvIGZyZWVfdHg7CiAJCX0KIAotCQl0eF9jb250ZXh0LT5iQm9vbEluVXNlID0gZmFsc2U7CisJCXR4X2NvbnRleHQtPmluX3VzZSA9IGZhbHNlOwogCX0KIAogCS8qIGFsbG9jYXRlIFJDQiBtZW0gKi8KQEAgLTk3Niw4ICs4OTgsNiBAQAogICAgIH0KIAogICAgIE1QX0NMRUFSX0ZMQUcocERldmljZSwgZk1QX0RJU0NPTk5FQ1RFRCk7Ci0gICAgTVBfQ0xFQVJfRkxBRyhwRGV2aWNlLCBmTVBfQ09OVFJPTF9SRUFEUyk7Ci0gICAgTVBfQ0xFQVJfRkxBRyhwRGV2aWNlLCBmTVBfQ09OVFJPTF9XUklURVMpOwogICAgIE1QX1NFVF9GTEFHKHBEZXZpY2UsIGZNUF9QT1NUX1JFQURTKTsKICAgICBNUF9TRVRfRkxBRyhwRGV2aWNlLCBmTVBfUE9TVF9XUklURVMpOwogCkBAIC05OTksOSArOTE5LDYgQEAKICAgICBwRGV2aWNlLT5iUm9hbWluZyA9IGZhbHNlOwogICAgIHBEZXZpY2UtPmJJc1JvYW1pbmcgPSBmYWxzZTsKICAgICBwRGV2aWNlLT5iRW5hYmxlUm9hbWluZyA9IGZhbHNlOwotICAgIGlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04pIHsKLSAgICAgICAgZGV2aWNlX2luaXRfZGl2ZXJzaXR5X3RpbWVyKHBEZXZpY2UpOwotICAgIH0KIAogICAgIHZNZ3JPYmplY3RJbml0KHBEZXZpY2UpOwogCkBAIC0xMDI1LDcgKzk0Miw2IEBACiAKICAgICAvKiBpZiBXRVAga2V5IGFscmVhZHkgc2V0IGJ5IGl3Y29uZmlnIGJ1dCBkZXZpY2Ugbm90IHlldCBvcGVuICovCiAgICAgaWYgKChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSB0cnVlKSAmJiAocERldmljZS0+YlRyYW5zbWl0S2V5ID09IHRydWUpKSB7Ci0gICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgIEtleWJTZXREZWZhdWx0S2V5KCBwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocERldmljZS0+c0tleSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCB8ICgxIDw8IDMxKSwKQEAgLTEwMzQsNyArOTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0NUTF9XRVAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisKICAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKICAgICB9CiAKQEAgLTEwNjYsNyArOTgyLDcgQEAKIHsKIAlzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB2bnRfbWFuYWdlciAqcE1nbXQgPSAmcERldmljZS0+dm50X21nbXQ7Ci0JaW50IHV1OworCXU4IHV1OwogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2Nsb3NlMVxuIik7CiAgICAgaWYgKHBEZXZpY2UgPT0gTlVMTCkKQEAgLTEwODEsMTAgKzk5Nyw5IEBACiAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKICAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBmYWxzZTsKICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCiAJZm9yICh1dSA9IDA7IHV1IDwgTUFYX0tFWV9UQUJMRTsgdXUrKykKICAgICAgICAgICAgICAgICBNQUN2RGlzYWJsZUtleUVudHJ5KHBEZXZpY2UsdXUpOwotCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKICAgICBpZiAoKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX1VOUExVRykgPT0gZmFsc2UpIHsKICAgICAgICAgTUFDYlNodXRkb3duKHBEZXZpY2UpOwpAQCAtMTA5NywxMiArMTAxMiw2IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwRGV2aWNlLT5ydW5fY29tbWFuZF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBEZXZpY2UtPnNlY29uZF9jYWxsYmFja193b3JrKTsKIAotICAgIGlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04pIHsKLSAgICAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgxKTsKLSAgICAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgyKTsKLSAgICAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgzKTsKLSAgICB9Ci0KIAljYW5jZWxfd29ya19zeW5jKCZwRGV2aWNlLT5yeF9tbmdfd29ya19pdGVtKTsKIAljYW5jZWxfd29ya19zeW5jKCZwRGV2aWNlLT5yZWFkX3dvcmtfaXRlbSk7CiAKQEAgLTExNDUsMzYgKzEwNTQsMTcgQEAKIAogCWlmIChkZXZpY2UtPmRldikgewogCQl1bnJlZ2lzdGVyX25ldGRldihkZXZpY2UtPmRldik7Ci0KLQkJdXNiX2tpbGxfdXJiKGRldmljZS0+cENvbnRyb2xVUkIpOwotCQl1c2JfZnJlZV91cmIoZGV2aWNlLT5wQ29udHJvbFVSQik7Ci0KIAkJZnJlZV9uZXRkZXYoZGV2aWNlLT5kZXYpOwogCX0KIH0KIAotc3RhdGljIGludCBkZXZpY2VfZG1hMF90eF84MDIxMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotCWlmICh1bmxpa2VseShwRGV2aWNlLT5iU3RvcFR4MFBrdCkpCi0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JZWxzZQotCQl2RE1BMF90eF84MDIxMShwRGV2aWNlLCBza2IpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotCXJldHVybiBORVRERVZfVFhfT0s7Ci19Ci0KIHN0YXRpYyBpbnQgZGV2aWNlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwRGV2aWNlLT5zdGF0czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtMTE4OSwxMyArMTA3OSwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAobnNETUFfdHhfcGFja2V0KHBEZXZpY2UsIFRZUEVfQUMwRE1BLCBza2IpKSB7CisJaWYgKG5zRE1BX3R4X3BhY2tldChwRGV2aWNlLCBza2IpKSB7CiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCiAJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTM3Nyw3ICsxMjY3LDcgQEAKIAl1OCB0bXAgPSAwOwogCWludCByYzsKIAotCXJjID0gQ09OVFJPTG5zUmVxdWVzdEluKHByaXYsIE1FU1NBR0VfVFlQRV9SRUFELAorCXJjID0gdm50X2NvbnRyb2xfaW4ocHJpdiwgTUVTU0FHRV9UWVBFX1JFQUQsCiAJCU1BQ19SRUdfUkNSLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCAxLCAmdG1wKTsKIAlpZiAocmMgPT0gMCkKIAkJcHJpdi0+YnlSeE1vZGUgPSB0bXA7CkBAIC0xNDE4LDcgKzEzMDgsNyBAQAogCQlwcml2LT5ieVJ4TW9kZSAmPSB+KFJDUl9VTklDQVNUKTsKIAl9CiAKLQlDb250cm9sdldyaXRlQnl0ZShwcml2LCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAorCXZudF9jb250cm9sX291dF91OChwcml2LCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAogCQkJCQlNQUNfUkVHX1JDUiwgcHJpdi0+YnlSeE1vZGUpOwogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwpAQCAtMTQzNCwyMCArMTMyNCw5IEBACiAKIHN0YXRpYyBpbnQgZGV2aWNlX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7Ci0Jc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXdyZXEgKndycSA9IChzdHJ1Y3QgaXdyZXEgKikgcnE7CiAJaW50IHJjID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0KLQljYXNlIElPQ1RMX0NNRF9IT1NUQVBEOgotCi0JCWlmICghKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkpCi0JCQlyYyA9IC1FRkFVTFQ7Ci0KLQkJcmMgPSB2dDY2NTZfaG9zdGFwX2lvY3RsKHBEZXZpY2UsICZ3cnEtPnUuZGF0YSk7Ci0JCWJyZWFrOwotCiAJY2FzZSBTSU9DRVRIVE9PTDoKIAkJcmV0dXJuIGV0aHRvb2xfaW9jdGwoZGV2LCBycSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcG93ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcG93ZXIuYwppbmRleCA0M2RhNTg5Li5kZGJkMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3Bvd2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5jCkBAIC00NCw4ICs0NCw3IEBACiAjaW5jbHVkZSAid2NtZC5oIgogI2luY2x1ZGUgInJ4dHguaCIKICNpbmNsdWRlICJjYXJkLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgotI2luY2x1ZGUgInJuZGlzLmgiCisjaW5jbHVkZSAidXNicGlwZS5oIgogCiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87CiAKQEAgLTEzMCw3ICsxMjksNyBAQAogewogCiAJLyogZGlzYWJsZSBwb3dlciBzYXZpbmcgaHcgZnVuY3Rpb24gKi8KLQlDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsIE1FU1NBR0VfVFlQRV9ESVNBQkxFX1BTLCAwLAorCXZudF9jb250cm9sX291dChwRGV2aWNlLCBNRVNTQUdFX1RZUEVfRElTQUJMRV9QUywgMCwKIAkJCQkJCTAsIDAsIE5VTEwpOwogCiAJLyogY2xlYXIgQXV0b1NsZWVwICovCkBAIC0xNjMsNyArMTYyLDcgQEAKIAl1OCBieURhdGE7CiAKIAkvKiBjaGVjayBpZiBhbHJlYWR5IGluIERvemUgbW9kZSAqLwotCUNvbnRyb2x2UmVhZEJ5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywKKwl2bnRfY29udHJvbF9pbl91OChwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLAogCQkJCQlNQUNfUkVHX1BTQ1RMLCAmYnlEYXRhKTsKIAogCWlmICgoYnlEYXRhICYgUFNDVExfUFMpICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmMKaW5kZXggMWU4ZjY0Yi4uM2Y1NGFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9yZi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcmYuYwpAQCAtMjYsNyArMjYsNyBAQAogICogRGF0ZTogRmViLiAxOSwgMjAwNAogICoKICAqIEZ1bmN0aW9uczoKLSAqICAgICAgSUZSRmJXcml0ZUVtYmVkZGVkICAgICAgLSBFbWJlZGRlZCB3cml0ZSBSRiByZWdpc3RlciB2aWEgTUFDCisgKgl2bnRfcmZfd3JpdGVfZW1iZWRkZWQJLSBFbWJlZGRlZCB3cml0ZSBSRiByZWdpc3RlciB2aWEgTUFDCiAgKgogICogUmV2aXNpb24gSGlzdG9yeToKICAqCVJGX1ZUMzIyNjogUm9iZXJ0WXU6MjAwNTExMTEsIFZUMzIyNkMwIGFuZCBiZWZvcmUKQEAgLTM4LDEyICszOCw5IEBACiAjaW5jbHVkZSAibWFjLmgiCiAjaW5jbHVkZSAicmYuaCIKICNpbmNsdWRlICJiYXNlYmFuZC5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKLSNpbmNsdWRlICJybmRpcy5oIgorI2luY2x1ZGUgInVzYnBpcGUuaCIKICNpbmNsdWRlICJkYXRhcmF0ZS5oIgogCi1zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsKLS8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogI2RlZmluZSBCWV9BTDIyMzBfUkVHX0xFTiAgICAgMjMgLy8yNGJpdAogI2RlZmluZSBDQl9BTDIyMzBfSU5JVF9TRVEgICAgMTUKICNkZWZpbmUgQUwyMjMwX1BXUl9JRFhfTEVOICAgIDY0CkBAIC0zNTUsNyArMzUyLDcgQEAKICAgICB9OwogCiAvLy97e1JvYmVydFl1OjIwMDUxMTExCi1zdGF0aWMgdTggYXQzMjI2X2luaXRfdGFibGVbQ0JfVlQzMjI2X0lOSVRfU0VRXVszXSA9IHsKK3N0YXRpYyB1OCB2dDMyMjZfaW5pdF90YWJsZVtDQl9WVDMyMjZfSU5JVF9TRVFdWzNdID0gewogICAgIHsweDAzLCAweEZGLCAweDgwfSwKICAgICB7MHgwMiwgMHg4MiwgMHhBMX0sCiAgICAgezB4MDMsIDB4QzYsIDB4QTJ9LApAQCAtMzY5LDcgKzM2Niw3IEBACiAgICAgezB4MDIsIDB4MDAsIDB4MkF9CiAgICAgfTsKIAotc3RhdGljIHU4IGF0MzIyNmQwX2luaXRfdGFibGVbQ0JfVlQzMjI2X0lOSVRfU0VRXVszXSA9IHsKK3N0YXRpYyB1OCB2dDMyMjZkMF9pbml0X3RhYmxlW0NCX1ZUMzIyNl9JTklUX1NFUV1bM10gPSB7CiAgICAgezB4MDMsIDB4RkYsIDB4ODB9LAogICAgIHsweDAzLCAweDAyLCAweDIxfSwgLy9Sb2JlcnRZdToyMDA2MDMyNwogICAgIHsweDAzLCAweEM2LCAweEEyfSwKQEAgLTcwNywxNyArNzA0LDE3IEBACiAgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1pbnQgSUZSRmJXcml0ZUVtYmVkZGVkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTMyIGR3RGF0YSkKK2ludCB2bnRfcmZfd3JpdGVfZW1iZWRkZWQoc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1MzIgZGF0YSkKIHsKLQl1OCBwYnlEYXRhWzRdOworCXU4IHJlZ19kYXRhWzRdOwogCi0JcGJ5RGF0YVswXSA9ICh1OClkd0RhdGE7Ci0JcGJ5RGF0YVsxXSA9ICh1OCkoZHdEYXRhID4+IDgpOwotCXBieURhdGFbMl0gPSAodTgpKGR3RGF0YSA+PiAxNik7Ci0JcGJ5RGF0YVszXSA9ICh1OCkoZHdEYXRhID4+IDI0KTsKKwlyZWdfZGF0YVswXSA9ICh1OClkYXRhOworCXJlZ19kYXRhWzFdID0gKHU4KShkYXRhID4+IDgpOworCXJlZ19kYXRhWzJdID0gKHU4KShkYXRhID4+IDE2KTsKKwlyZWdfZGF0YVszXSA9ICh1OCkoZGF0YSA+PiAyNCk7CiAKLQlDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCi0JCU1FU1NBR0VfVFlQRV9XUklURV9JRlJGLCAwLCAwLCA0LCBwYnlEYXRhKTsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFX0lGUkYsCisJCQkJMCwgMCwgQVJSQVlfU0laRShyZWdfZGF0YSksIHJlZ19kYXRhKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtNzM1LDcgKzczMiw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1pbnQgUkZiU2V0UG93ZXIoc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1MzIgcmF0ZSwgdTMyIGNoYW5uZWwpCitpbnQgdm50X3JmX3NldHBvd2VyKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTMyIHJhdGUsIHUzMiBjaGFubmVsKQogewogCWludCByZXQgPSB0cnVlOwogCXU4IHBvd2VyID0gcHJpdi0+YnlDQ0tQd3I7CkBAIC03NjQsMTEgKzc2MSwzNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXQgPSBSRmJSYXdTZXRQb3dlcihwcml2LCBwb3dlciwgcmF0ZSk7CisJcmV0ID0gdm50X3JmX3NldF90eHBvd2VyKHByaXYsIHBvd2VyLCByYXRlKTsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1OCB2bnRfcmZfYWRkcG93ZXIoc3RydWN0IHZudF9wcml2YXRlICpwcml2KQoreworCXMzMiByc3NpID0gLXByaXYtPnVDdXJyUlNTSTsKKworCWlmICghcnNzaSkKKwkJcmV0dXJuIDc7CisKKwlpZiAocHJpdi0+YnlSRlR5cGUgPT0gUkZfVlQzMjI2RDApIHsKKwkJaWYgKHJzc2kgPCAtNzApCisJCQlyZXR1cm4gOTsKKwkJZWxzZSBpZiAocnNzaSA8IC02NSkKKwkJCXJldHVybiA3OworCQllbHNlIGlmIChyc3NpIDwgLTYwKQorCQkJcmV0dXJuIDU7CisJfSBlbHNlIHsKKwkJaWYgKHJzc2kgPCAtODApCisJCQlyZXR1cm4gOTsKKwkJZWxzZSBpZiAocnNzaSA8IC03NSkKKwkJCXJldHVybiA3OworCQllbHNlIGlmIChyc3NpIDwgLTcwKQorCQkJcmV0dXJuIDU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBEZXNjcmlwdGlvbjogU2V0IFR4IHBvd2VyCiAgKgpAQCAtNzgzLDExICs4MDYsMTUgQEAKICAqCiAgKi8KIAotaW50IFJGYlJhd1NldFBvd2VyKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTggcG93ZXIsIHUzMiByYXRlKQoraW50IHZudF9yZl9zZXRfdHhwb3dlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHBvd2VyLCB1MzIgcmF0ZSkKIHsKIAl1MzIgcG93ZXJfc2V0dGluZyA9IDA7CiAJaW50IHJldCA9IHRydWU7CiAKKwlwb3dlciArPSB2bnRfcmZfYWRkcG93ZXIocHJpdik7CisJaWYgKHBvd2VyID4gVk5UX1JGX01BWF9QT1dFUikKKwkJcG93ZXIgPSBWTlRfUkZfTUFYX1BPV0VSOworCiAJaWYgKHByaXYtPmJ5Q3VyUHdyID09IHBvd2VyKQogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtNzk4LDQyICs4MjUsNDIgQEAKIAkJaWYgKHByaXYtPmJ5Q3VyUHdyID49IEFMMjIzMF9QV1JfSURYX0xFTikKIAkJCXJldHVybiBmYWxzZTsKIAotCQlyZXQgJj0gSUZSRmJXcml0ZUVtYmVkZGVkKHByaXYsCisJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwKIAkJCWFsMjIzMF9wb3dlcl90YWJsZVtwcml2LT5ieUN1clB3cl0pOwogCiAJCWlmIChyYXRlIDw9IFJBVEVfMTFNKQotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCAweDAwMDFiNDAwICsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgwMDAxYjQwMCArCiAJCQkJKEJZX0FMMjIzMF9SRUdfTEVOIDw8IDMpICsgSUZSRUdDVExfUkVHVyk7CiAJCWVsc2UKLQkJCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgMHgwMDA1YTQwMCArCisJCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsIDB4MDAwNWE0MDAgKwogCQkJCShCWV9BTDIyMzBfUkVHX0xFTiA8PCAzKSArIElGUkVHQ1RMX1JFR1cpOwogCQlicmVhazsKIAljYXNlIFJGX0FMMjIzMFM6CiAJCWlmIChwcml2LT5ieUN1clB3ciA+PSBBTDIyMzBfUFdSX0lEWF9MRU4pCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LAorCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsCiAJCQlhbDIyMzBfcG93ZXJfdGFibGVbcHJpdi0+YnlDdXJQd3JdKTsKIAogCQlpZiAocmF0ZSA8PSBSQVRFXzExTSkgewotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCAweDA0MGMxNDAwICsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgwNDBjMTQwMCArCiAJCQkJKEJZX0FMMjIzMF9SRUdfTEVOIDw8IDMpICsgSUZSRUdDVExfUkVHVyk7Ci0JCQlyZXQgJj0gSUZSRmJXcml0ZUVtYmVkZGVkKHByaXYsIDB4MDAyOTliMDAgKworCQkJcmV0ICY9IHZudF9yZl93cml0ZV9lbWJlZGRlZChwcml2LCAweDAwMjk5YjAwICsKIAkJCQkoQllfQUwyMjMwX1JFR19MRU4gPDwgMykgKyBJRlJFR0NUTF9SRUdXKTsKIAkJfSBlbHNlIHsKLQkJCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgMHgwMDA1YTQwMCArCisJCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsIDB4MDAwNWE0MDAgKwogCQkJCShCWV9BTDIyMzBfUkVHX0xFTiA8PCAzKSArIElGUkVHQ1RMX1JFR1cpOwotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCAweDAwMDk5YjAwICsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgwMDA5OWIwMCArCiAJCQkJKEJZX0FMMjIzMF9SRUdfTEVOIDw8IDMpICsgSUZSRUdDVExfUkVHVyk7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIFJGX0FJUk9IQTcyMzA6CiAJCWlmIChyYXRlIDw9IFJBVEVfMTFNKQotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCAweDExMWJiOTAwICsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgxMTFiYjkwMCArCiAJCQkJKEJZX0FMNzIzMF9SRUdfTEVOIDw8IDMpK0lGUkVHQ1RMX1JFR1cpOwogCQllbHNlCi0JCQlyZXQgJj0gSUZSRmJXcml0ZUVtYmVkZGVkKHByaXYsIDB4MjIxYmI5MDAgKworCQkJcmV0ICY9IHZudF9yZl93cml0ZV9lbWJlZGRlZChwcml2LCAweDIyMWJiOTAwICsKIAkJCQkoQllfQUw3MjMwX1JFR19MRU4gPDwgMykrSUZSRUdDVExfUkVHVyk7CiAKIAkJaWYgKHByaXYtPmJ5Q3VyUHdyID4gQUw3MjMwX1BXUl9JRFhfTEVOKQpAQCAtODQ2LDcgKzg3Myw3IEBACiAJCXBvd2VyX3NldHRpbmcgPSAweDA4MGMwYjAwIHwgKChwcml2LT5ieUN1clB3cikgPDwgMTIpIHwKIAkJCQkoQllfQUw3MjMwX1JFR19MRU4gPDwgMykgfCBJRlJFR0NUTF9SRUdXOwogCi0JCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgcG93ZXJfc2V0dGluZyk7CisJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgcG93ZXJfc2V0dGluZyk7CiAKIAkJYnJlYWs7CiAKQEAgLTg1Niw3ICs4ODMsNyBAQAogCQlwb3dlcl9zZXR0aW5nID0gKCgweDNmIC0gcHJpdi0+YnlDdXJQd3IpIDw8IDIwKSB8ICgweDE3IDw8IDgpIHwKIAkJCQkoQllfVlQzMjI2X1JFR19MRU4gPDwgMykgfCBJRlJFR0NUTF9SRUdXOwogCi0JCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgcG93ZXJfc2V0dGluZyk7CisJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgcG93ZXJfc2V0dGluZyk7CiAKIAkJYnJlYWs7CiAJY2FzZSBSRl9WVDMyMjZEMDoKQEAgLTg2OCw0MiArODk1LDQyIEBACiAJCQkJKDB4ZTA3IDw8IDgpIHwgKEJZX1ZUMzIyNl9SRUdfTEVOIDw8IDMpIHwKIAkJCQkJCUlGUkVHQ1RMX1JFR1c7CiAKLQkJCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgcG93ZXJfc2V0dGluZyk7Ci0JCQlyZXQgJj0gSUZSRmJXcml0ZUVtYmVkZGVkKHByaXYsIDB4MDNjNmEyMDAgKworCQkJcmV0ICY9IHZudF9yZl93cml0ZV9lbWJlZGRlZChwcml2LCBwb3dlcl9zZXR0aW5nKTsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgwM2M2YTIwMCArCiAJCQkJCShCWV9WVDMyMjZfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyk7CiAKIAkJCWlmIChwcml2LT52bnRfbWdtdC5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKLQkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCi0JCQkJIlJGYlJhd1NldFBvd2VyPiAxMUIgbW9kZSB1Q3VyckNoYW5uZWxbJWRdXG4iLAorCQkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LAorCQkJCSJ2bnRfcmZfc2V0X3R4cG93ZXI+IDExQiBtb2RlIHVDdXJyQ2hhbm5lbFslZF1cbiIsCiAJCQkJCQlwcml2LT52bnRfbWdtdC51U2NhbkNoYW5uZWwpOwotCQkJCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwKKwkJCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsCiAJCQkJCXZ0MzIyNmQwX2xvX2N1cnJlbnRfdGFibGVbcHJpdi0+CiAJCQkJCQl2bnRfbWdtdC51U2NhbkNoYW5uZWwgLSAxXSk7CiAJCQl9IGVsc2UgewotCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCQkiUkZiUmF3U2V0UG93ZXI+IDExQiBtb2RlIHVDdXJyQ2hhbm5lbFslZF1cbiIsCisJCQkJZGV2X2RiZygmcHJpdi0+dXNiLT5kZXYsCisJCQkJInZudF9yZl9zZXRfdHhwb3dlcj4gMTFCIG1vZGUgdUN1cnJDaGFubmVsWyVkXVxuIiwKIAkJCQkJCXByaXYtPnZudF9tZ210LnVDdXJyQ2hhbm5lbCk7Ci0JCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LAorCQkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwKIAkJCQkJdnQzMjI2ZDBfbG9fY3VycmVudF90YWJsZVtwcml2LT4KIAkJCQkJCXZudF9tZ210LnVDdXJyQ2hhbm5lbCAtIDFdKTsKIAkJCX0KIAotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCAweDAxNUMwODAwICsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgwMTVDMDgwMCArCiAJCQkJKEJZX1ZUMzIyNl9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXKTsKIAkJfSBlbHNlIHsKLQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCQkJIkBAQEAgUkZiUmF3U2V0UG93ZXI+IDExRyBtb2RlXG4iKTsKKwkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LAorCQkJCQkiQEBAQCB2bnRfcmZfc2V0X3R4cG93ZXI+IDExRyBtb2RlXG4iKTsKIAogCQkJcG93ZXJfc2V0dGluZyA9ICgoMHgzZi1wcml2LT5ieUN1clB3cikgPDwgMjApIHwKIAkJCQkoMHg3IDw8IDgpIHwgKEJZX1ZUMzIyNl9SRUdfTEVOIDw8IDMpIHwKIAkJCQkJSUZSRUdDVExfUkVHVzsKIAotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCBwb3dlcl9zZXR0aW5nKTsKLQkJCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgMHgwMEM2QTIwMCArCisJCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsIHBvd2VyX3NldHRpbmcpOworCQkJcmV0ICY9IHZudF9yZl93cml0ZV9lbWJlZGRlZChwcml2LCAweDAwQzZBMjAwICsKIAkJCQkoQllfVlQzMjI2X1JFR19MRU4gPDwgMykgKyBJRlJFR0NUTF9SRUdXKTsKLQkJCXJldCAmPSBJRlJGYldyaXRlRW1iZWRkZWQocHJpdiwgMHgwMTZCQzYwMCArCisJCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsIDB4MDE2QkM2MDAgKwogCQkJCQkoQllfVlQzMjI2X1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1cpOwotCQkJcmV0ICY9IElGUkZiV3JpdGVFbWJlZGRlZChwcml2LCAweDAwOTAwODAwICsKKwkJCXJldCAmPSB2bnRfcmZfd3JpdGVfZW1iZWRkZWQocHJpdiwgMHgwMDkwMDgwMCArCiAJCQkJCShCWV9WVDMyMjZfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyk7CiAJCX0KIAkJYnJlYWs7CkBAIC05MTYsNyArOTQzLDcgQEAKIAkJCSgweDI3IDw8IDgpIHwgKEJZX1ZUMzM0Ml9SRUdfTEVOIDw8IDMpIHwKIAkJCQkJSUZSRUdDVExfUkVHVzsKIAotCQlyZXQgJj0gSUZSRmJXcml0ZUVtYmVkZGVkKHByaXYsIHBvd2VyX3NldHRpbmcpOworCQlyZXQgJj0gdm50X3JmX3dyaXRlX2VtYmVkZGVkKHByaXYsIHBvd2VyX3NldHRpbmcpOwogCiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05NDAsNyArOTY3LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKIC0qLwotdm9pZCBSRnZSU1NJVG9kQm0oc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1OCByc3NpLCBsb25nICpkYm0pCit2b2lkIHZudF9yZl9yc3NpX3RvX2RibShzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHJzc2ksIGxvbmcgKmRibSkKIHsKIAl1OCBpZHggPSAoKChyc3NpICYgMHhjMCkgPj4gNikgJiAweDAzKTsKIAlsb25nIGIgPSAocnNzaSAmIDB4M2YpOwpAQCAtOTYzLDcgKzk5MCw3IEBACiAJKmRibSA9IC0xICogKGEgKyBiICogMik7CiB9CiAKLXZvaWQgUkZiUkZUYWJsZURvd25sb2FkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdikKK3ZvaWQgdm50X3JmX3RhYmxlX2Rvd25sb2FkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdikKIHsKIAl1MTYgbGVuZ3RoMSA9IDAsIGxlbmd0aDIgPSAwLCBsZW5ndGgzID0gMDsKIAl1OCAqYWRkcjEgPSBOVUxMLCAqYWRkcjIgPSBOVUxMLCAqYWRkcjMgPSBOVUxMOwpAQCAtOTkyLDcgKzEwMTksNyBAQAogCQlsZW5ndGgxID0gQ0JfVlQzMjI2X0lOSVRfU0VRICogMzsKIAkJbGVuZ3RoMiA9IENCX01BWF9DSEFOTkVMXzI0RyAqIDM7CiAJCWxlbmd0aDMgPSBDQl9NQVhfQ0hBTk5FTF8yNEcgKiAzOwotCQlhZGRyMSA9ICZhdDMyMjZfaW5pdF90YWJsZVswXVswXTsKKwkJYWRkcjEgPSAmdnQzMjI2X2luaXRfdGFibGVbMF1bMF07CiAJCWFkZHIyID0gJnZ0MzIyNl9jaGFubmVsX3RhYmxlMFswXVswXTsKIAkJYWRkcjMgPSAmdnQzMjI2X2NoYW5uZWxfdGFibGUxWzBdWzBdOwogCQlicmVhazsKQEAgLTEwMDAsNyArMTAyNyw3IEBACiAJCWxlbmd0aDEgPSBDQl9WVDMyMjZfSU5JVF9TRVEgKiAzOwogCQlsZW5ndGgyID0gQ0JfTUFYX0NIQU5ORUxfMjRHICogMzsKIAkJbGVuZ3RoMyA9IENCX01BWF9DSEFOTkVMXzI0RyAqIDM7Ci0JCWFkZHIxID0gJmF0MzIyNmQwX2luaXRfdGFibGVbMF1bMF07CisJCWFkZHIxID0gJnZ0MzIyNmQwX2luaXRfdGFibGVbMF1bMF07CiAJCWFkZHIyID0gJnZ0MzIyNl9jaGFubmVsX3RhYmxlMFswXVswXTsKIAkJYWRkcjMgPSAmdnQzMjI2X2NoYW5uZWxfdGFibGUxWzBdWzBdOwogCQlicmVhazsKQEAgLTEwMTcsNyArMTA0NCw3IEBACiAJLyogSW5pdCBUYWJsZSAqLwogCW1lbWNweShhcnJheSwgYWRkcjEsIGxlbmd0aDEpOwogCi0JQ09OVFJPTG5zUmVxdWVzdE91dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsIDAsCisJdm50X2NvbnRyb2xfb3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURSwgMCwKIAkJTUVTU0FHRV9SRVFVRVNUX1JGX0lOSVQsIGxlbmd0aDEsIGFycmF5KTsKIAogCS8qIENoYW5uZWwgVGFibGUgMCAqLwpAQCAtMTAzMCw3ICsxMDU3LDcgQEAKIAogCQltZW1jcHkoYXJyYXksIGFkZHIyLCBsZW5ndGgpOwogCi0JCUNPTlRST0xuc1JlcXVlc3RPdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAorCQl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAogCQkJdmFsdWUsIE1FU1NBR0VfUkVRVUVTVF9SRl9DSDAsIGxlbmd0aCwgYXJyYXkpOwogCiAJCWxlbmd0aDIgLT0gbGVuZ3RoOwpAQCAtMTA0OCw3ICsxMDc1LDcgQEAKIAogCQltZW1jcHkoYXJyYXksIGFkZHIzLCBsZW5ndGgpOwogCi0JCUNPTlRST0xuc1JlcXVlc3RPdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAorCQl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAogCQkJdmFsdWUsIE1FU1NBR0VfUkVRVUVTVF9SRl9DSDEsIGxlbmd0aCwgYXJyYXkpOwogCiAJCWxlbmd0aDMgLT0gbGVuZ3RoOwpAQCAtMTA2NSw3ICsxMDkyLDcgQEAKIAkJbWVtY3B5KGFycmF5LCBhZGRyMSwgbGVuZ3RoMSk7CiAKIAkJLyogSW5pdCBUYWJsZSAyICovCi0JCUNPTlRST0xuc1JlcXVlc3RPdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAorCQl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAogCQkJMCwgTUVTU0FHRV9SRVFVRVNUX1JGX0lOSVQyLCBsZW5ndGgxLCBhcnJheSk7CiAKIAkJLyogQ2hhbm5lbCBUYWJsZSAwICovCkBAIC0xMDc4LDcgKzExMDUsNyBAQAogCiAJCQltZW1jcHkoYXJyYXksIGFkZHIyLCBsZW5ndGgpOwogCi0JCQlDT05UUk9MbnNSZXF1ZXN0T3V0KHByaXYsIE1FU1NBR0VfVFlQRV9XUklURSwKKwkJCXZudF9jb250cm9sX291dChwcml2LCBNRVNTQUdFX1RZUEVfV1JJVEUsCiAJCQkJdmFsdWUsIE1FU1NBR0VfUkVRVUVTVF9SRl9DSDIsIGxlbmd0aCwgYXJyYXkpOwogCiAJCQlsZW5ndGgyIC09IGxlbmd0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcmYuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcmYuaAppbmRleCBkZTVjNjEzLi5jYjMzMTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9yZi5oCkBAIC01MywxMiArNTMsMTQgQEAKICNkZWZpbmUgUkZfRU1VICAgICAgICAgICAgICAweDgwCiAjZGVmaW5lIFJGX01BU0sgICAgICAgICAgICAgMHg3RgogCisjZGVmaW5lIFZOVF9SRl9NQVhfUE9XRVIgICAgMHgzZgorCiBleHRlcm4gY29uc3QgdTggUkZhYnkxMWFDaGFubmVsSW5kZXhbMjAwXTsKIAotaW50IElGUkZiV3JpdGVFbWJlZGRlZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTMyIGR3RGF0YSk7Ci1pbnQgUkZiU2V0UG93ZXIoc3RydWN0IHZudF9wcml2YXRlICosIHUzMiB1UkFURSwgdTMyIHVDSCk7Ci1pbnQgUkZiUmF3U2V0UG93ZXIoc3RydWN0IHZudF9wcml2YXRlICosIHU4IGJ5UHdyLCB1MzIgdVJBVEUpOwotdm9pZCBSRnZSU1NJVG9kQm0oc3RydWN0IHZudF9wcml2YXRlICosIHU4IGJ5Q3VyclJTU0ksIGxvbmcgKnBsZEJtKTsKLXZvaWQgUkZiUkZUYWJsZURvd25sb2FkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSk7CitpbnQgdm50X3JmX3dyaXRlX2VtYmVkZGVkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1MzIpOworaW50IHZudF9yZl9zZXRwb3dlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTMyLCB1MzIpOworaW50IHZudF9yZl9zZXRfdHhwb3dlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTgsIHUzMik7Cit2b2lkIHZudF9yZl9yc3NpX3RvX2RibShzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTgsIGxvbmcgKik7Cit2b2lkIHZudF9yZl90YWJsZV9kb3dubG9hZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKik7CiAKICNlbmRpZiAvKiBfX1JGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ybmRpcy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ybmRpcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjYxZjgyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcm5kaXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqCi0gKiBGaWxlOiBybmRpcy5oCi0gKgotICogUHVycG9zZTogSW50ZXJmYWNlIGJldHdlZW4gZmlybXdhcmUgYW5kIGRyaXZlcgotICoKLSAqIEF1dGhvcjogV2FycmVuIEhzdQotICoKLSAqIERhdGU6IE5vdiAyNCwgMjAwNAotICoKLSAqLwotCi0jaWZuZGVmIF9fUk5ESVNfSF9fCi0jZGVmaW5lIF9fUk5ESVNfSF9fCi0KLSNkZWZpbmUgTUVTU0FHRV9UWVBFX1JFQUQgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIE1FU1NBR0VfVFlQRV9XUklURSAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBNRVNTQUdFX1RZUEVfTE9DS19PUiAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgTUVTU0FHRV9UWVBFX0xPQ0tfQU5EICAgICAgICAgICAweDAzCi0jZGVmaW5lIE1FU1NBR0VfVFlQRV9XUklURV9NQVNLICAgICAgICAgMHgwNAotI2RlZmluZSBNRVNTQUdFX1RZUEVfQ0FSRElOSVQgICAgICAgICAgIDB4MDUKLSNkZWZpbmUgTUVTU0FHRV9UWVBFX0lOSVRfUlNQICAgICAgICAgICAweDA2Ci0jZGVmaW5lIE1FU1NBR0VfVFlQRV9NQUNTSFVURE9XTiAgICAgICAgMHgwNwotI2RlZmluZSBNRVNTQUdFX1RZUEVfU0VUS0VZICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgTUVTU0FHRV9UWVBFX0NMUktFWUVOVFJZICAgICAgICAweDA5Ci0jZGVmaW5lIE1FU1NBR0VfVFlQRV9XUklURV9NSVNDRkYgICAgICAgMHgwQQotI2RlZmluZSBNRVNTQUdFX1RZUEVfU0VUX0FOVE1EICAgICAgICAgIDB4MEIKLSNkZWZpbmUgTUVTU0FHRV9UWVBFX1NFTEVDVF9DSEFOTkxFICAgICAweDBDCi0jZGVmaW5lIE1FU1NBR0VfVFlQRV9TRVRfVFNGVEJUVCAgICAgICAgMHgwRAotI2RlZmluZSBNRVNTQUdFX1RZUEVfU0VUX1NTVElGUyAgICAgICAgIDB4MEUKLSNkZWZpbmUgTUVTU0FHRV9UWVBFX0NIQU5HRV9CQlRZUEUgICAgICAweDBGCi0jZGVmaW5lIE1FU1NBR0VfVFlQRV9ESVNBQkxFX1BTICAgICAgICAgMHgxMAotI2RlZmluZSBNRVNTQUdFX1RZUEVfV1JJVEVfSUZSRiAgICAgICAgIDB4MTEKLQotLy91c2VkIGZvciByZWFkL3dyaXRlKGluZGV4KQotI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfTUVNICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX0JCUkVHICAgICAgICAgICAweDAyCi0jZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcgICAgICAgICAgMHgwMwotI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfRUVQUk9NICAgICAgICAgIDB4MDQKLSNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX1RTRiAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9UQlRUICAgICAgICAgICAgMHgwNgotI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfQkJBR0MgICAgICAgICAgIDB4MDcKLSNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX1ZFUlNJT04gICAgICAgICAweDA4Ci0jZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9SRl9JTklUICAgICAgICAgMHgwOQotI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfUkZfSU5JVDIgICAgICAgIDB4MEEKLSNkZWZpbmUgTUVTU0FHRV9SRVFVRVNUX1JGX0NIMCAgICAgICAgICAweDBCCi0jZGVmaW5lIE1FU1NBR0VfUkVRVUVTVF9SRl9DSDEgICAgICAgICAgMHgwQwotI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfUkZfQ0gyICAgICAgICAgIDB4MEQKLQotI2RlZmluZSBWSUFVU0IyMF9QQUNLRVRfSEVBREVSICAgICAgICAgIDB4MDQKLQotI2RlZmluZSBVU0JfUkVHNAkweDYwNAotCi10eXBlZGVmIHN0cnVjdCBfQ01EX01FU1NBR0UKLXsKLSAgICB1OCAgICAgICAgYnlEYXRhWzI1Nl07Ci19IENNRF9NRVNTQUdFLCAqUENNRF9NRVNTQUdFOwotCi10eXBlZGVmIHN0cnVjdCBfQ01EX1dSSVRFX01BU0sKLXsKLSAgICB1OCAgICAgICAgYnlEYXRhOwotICAgIHU4ICAgICAgICBieU1hc2s7Ci19IENNRF9XUklURV9NQVNLLCAqUENNRF9XUklURV9NQVNLOwotCi1zdHJ1Y3Qgdm50X2NtZF9jYXJkX2luaXQKLXsKLQl1OCBpbml0X2NsYXNzOwotCXU4IGV4aXN0X3N3X25ldF9hZGRyOwotCXU4IHN3X25ldF9hZGRyWzZdOwotCXU4IHNob3J0X3JldHJ5X2xpbWl0OwotCXU4IGxvbmdfcmV0cnlfbGltaXQ7Ci19OwotCi1zdHJ1Y3Qgdm50X3JzcF9jYXJkX2luaXQKLXsKLQl1OCBzdGF0dXM7Ci0JdTggbmV0X2FkZHJbNl07Ci0JdTggcmZfdHlwZTsKLQl1OCBtaW5fY2hhbm5lbDsKLQl1OCBtYXhfY2hhbm5lbDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9DTURfU0VUX0tFWQotewotICAgIHUxNiAgICAgICAgd0tDVEw7Ci0gICAgdTggICAgICAgIGFieU1hY0FkZHJbNl07Ci0gICAgdTggICAgICAgIGFieUtleVsxNl07Ci19IENNRF9TRVRfS0VZLCAqUENNRF9TRVRfS0VZOwotCi10eXBlZGVmIHN0cnVjdCBfQ01EX0NMUktFWV9FTlRSWQotewotICAgIHU4ICAgICAgICBhYnlLZXlFbnRyeVsxMV07Ci19IENNRF9DTFJLRVlfRU5UUlksICpQQ01EX0NMUktFWV9FTlRSWTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0NNRF9XUklURV9NSVNDRkYKLXsKLSAgICB1MzIgICAgICAgYWR3TWlzY0ZGRGF0YVsyMl1bNF07ICAvL2Ega2V5IGVudHJ5IGhhcyBvbmx5IDIyIGR3b3JkcwotfSBDTURfV1JJVEVfTUlTQ0ZGLCAqUENNRF9XUklURV9NSVNDRkY7Ci0KLXR5cGVkZWYgc3RydWN0IF9DTURfU0VUX1RTRlRCVFQKLXsKLSAgICB1OCAgICAgICAgYWJ5VFNGX1RCVFRbOF07Ci19IENNRF9TRVRfVFNGVEJUVCwgKlBDTURfU0VUX1RTRlRCVFQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9DTURfU0VUX1NTVElGUwotewotICAgIHU4ICAgICAgICBieVNJRlM7Ci0gICAgdTggICAgICAgIGJ5RElGUzsKLSAgICB1OCAgICAgICAgYnlFSUZTOwotICAgIHU4ICAgICAgICBieVNsb3RUaW1lOwotICAgIHU4ICAgICAgICBieUN3TWF4X01pbjsKLSAgICB1OCAgICAgICAgYnlCQkNSMTA7Ci19IENNRF9TRVRfU1NUSUZTLCAqUENNRF9TRVRfU1NUSUZTOwotCi10eXBlZGVmIHN0cnVjdCBfQ01EX0NIQU5HRV9CQlRZUEUKLXsKLSAgICB1OCAgICAgICAgYnlTSUZTOwotICAgIHU4ICAgICAgICBieURJRlM7Ci0gICAgdTggICAgICAgIGJ5RUlGUzsKLSAgICB1OCAgICAgICAgYnlTbG90VGltZTsKLSAgICB1OCAgICAgICAgYnlDd01heF9NaW47Ci0gICAgdTggICAgICAgIGJ5QkJDUjEwOwotICAgIHU4ICAgICAgICBieUJCX0JCVHlwZTsgICAgLy9DUjg4Ci0gICAgdTggICAgICAgIGJ5TUFDX0JCVHlwZTsKLSAgICB1MzIgICAgICAgZHdSU1BJTkZfYl8xOwotICAgIHUzMiAgICAgICBkd1JTUElORl9iXzI7Ci0gICAgdTMyICAgICAgIGR3UlNQSU5GX2JfNTU7Ci0gICAgdTMyICAgICAgIGR3UlNQSU5GX2JfMTE7Ci0gICAgdTE2ICAgICAgICB3UlNQSU5GX2FbOV07Ci19IENNRF9DSEFOR0VfQkJUWVBFLCAqUENNRF9DSEFOR0VfQkJUWVBFOwotCi0jZGVmaW5lIEVYQ0hfV09SRCh3KSAoKHUxNikoKHUxNikodyk8PDgpIHwgKHUxNikoKHUxNikodyk+PjgpKQotCi0jZW5kaWYgLyogX1JORElTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCmluZGV4IDM4NDAzMjMuLjcwNGY0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCkBAIC01NCw5ICs1NCw3IEBACiAjaW5jbHVkZSAibWFjLmgiCiAjaW5jbHVkZSAibWljaGFlbC5oIgogI2luY2x1ZGUgInRraXAuaCIKLSNpbmNsdWRlICJ0Y3JjLmgiCiAjaW5jbHVkZSAid2N0bC5oIgotI2luY2x1ZGUgImhvc3RhcC5oIgogI2luY2x1ZGUgInJmLmgiCiAjaW5jbHVkZSAiZGF0YXJhdGUuaCIKICNpbmNsdWRlICJ1c2JwaXBlLmgiCkBAIC0xMDEsMTEgKzk5LDExIEBACiBzdGF0aWMgdTE2IHNfdkdlbmVyYXRlVHhQYXJhbWV0ZXIoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAogCXU4IGJ5UGt0VHlwZSwgdTE2IHdDdXJyZW50UmF0ZSwJc3RydWN0IHZudF90eF9idWZmZXIgKnR4X2J1ZmZlciwKIAlzdHJ1Y3Qgdm50X21pY19oZHIgKiptaWNfaGRyLCB1MzIgbmVlZF9taWMsIHUzMiBjYkZyYW1lU2l6ZSwKLQlpbnQgYk5lZWRBQ0ssIHUzMiB1RE1BSWR4LCBzdHJ1Y3QgZXRoaGRyICpwc0V0aEhlYWRlciwgYm9vbCBuZWVkX3J0cyk7CisJaW50IGJOZWVkQUNLLCBzdHJ1Y3QgZXRoaGRyICpwc0V0aEhlYWRlciwgYm9vbCBuZWVkX3J0cyk7CiAKIHN0YXRpYyB2b2lkIHNfdkdlbmVyYXRlTUFDSGVhZGVyKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwKIAl1OCAqcGJ5QnVmZmVyQWRkciwgdTE2IHdEdXJhdGlvbiwgc3RydWN0IGV0aGhkciAqcHNFdGhIZWFkZXIsCi0JaW50IGJOZWVkRW5jcnlwdCwgdTE2IHdGcmFnVHlwZSwgdTMyIHVETUFJZHgsIHUzMiB1RnJhZ0lkeCk7CisJaW50IGJOZWVkRW5jcnlwdCwgdTE2IHdGcmFnVHlwZSwgdTMyIHVGcmFnSWR4KTsKIAogc3RhdGljIHZvaWQgc192RmlsbFR4S2V5KHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwKIAlzdHJ1Y3Qgdm50X3R4X2ZpZm9faGVhZCAqZmlmb19oZWFkLCB1OCAqcGJ5SVZIZWFkLApAQCAtMTE5LDkgKzExNyw5IEBACiAJdTMyIGNiRnJhbWVMZW5ndGgsIHUxNiB3UmF0ZSwgaW50IGJOZWVkQWNrKTsKIAogc3RhdGljIF9fbGUxNiBzX3VHZXRSVFNDVFNSc3ZUaW1lKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwKLQl1OCByc3ZfdHlwZSwgdTggcGt0X3R5cGUsIHUzMiBmcmFtZV9sZW5naHQsIHUxNiBjdXJyZW50X3JhdGUpOworCXU4IHJzdl90eXBlLCB1OCBwa3RfdHlwZSwgdTMyIGZyYW1lX2xlbmd0aCwgdTE2IGN1cnJlbnRfcmF0ZSk7CiAKLXN0YXRpYyB1MTYgc192RmlsbENUU0hlYWQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1MzIgdURNQUlkeCwKK3N0YXRpYyB1MTYgc192RmlsbENUU0hlYWQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAogCXU4IGJ5UGt0VHlwZSwgdW5pb24gdm50X3R4X2RhdGFfaGVhZCAqaGVhZCwgdTMyIGNiRnJhbWVMZW5ndGgsCiAJaW50IGJOZWVkQWNrLCB1MTYgd0N1cnJlbnRSYXRlLCB1OCBieUZCT3B0aW9uKTsKIApAQCAtMTQ5LDkgKzE0Nyw5IEBACiAJCQlyZXR1cm4gTlVMTDsKIAogCQljb250ZXh0ID0gcHJpdi0+YXBURFtpaV07Ci0JCWlmIChjb250ZXh0LT5iQm9vbEluVXNlID09IGZhbHNlKSB7Ci0JCQljb250ZXh0LT5iQm9vbEluVXNlID0gdHJ1ZTsKLQkJCW1lbXNldChjb250ZXh0LT5EYXRhLCAwLAorCQlpZiAoY29udGV4dC0+aW5fdXNlID09IGZhbHNlKSB7CisJCQljb250ZXh0LT5pbl91c2UgPSB0cnVlOworCQkJbWVtc2V0KGNvbnRleHQtPmRhdGEsIDAsCiAJCQkJCU1BWF9UT1RBTF9TSVpFX1dJVEhfQUxMX0hFQURFUlMpOwogCQkJcmV0dXJuIGNvbnRleHQ7CiAJCX0KQEAgLTE4MSw0MSArMTc5LDQwIEBACiAJc3RydWN0IHZudF9taWNfaGRyICptaWNfaGRyKQogewogCXU4ICpwYnlCdWYgPSAodTggKikmZmlmb19oZWFkLT5hZHdUeEtleVswXTsKLQl1MzIgKnBkd0lWID0gKHUzMiAqKXBieUlWSGVhZDsKLQl1MzIgKnBkd0V4dElWID0gKHUzMiAqKSgodTggKilwYnlJVkhlYWQgKyA0KTsKKwlfX2xlMzIgKnBkd0lWID0gKF9fbGUzMiAqKXBieUlWSGVhZDsKKwlfX2xlMzIgKnBkd0V4dElWID0gKF9fbGUzMiAqKSgodTggKilwYnlJVkhlYWQgKyA0KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcE1BQ0hlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBieUhkckJ1ZjsKLQl1MzIgZHdSZXZJVkNvdW50ZXI7CisJX19sZTMyIHJldl9pdl9jb3VudGVyOwogCiAJLyogRmlsbCBUWEtFWSAqLwogCWlmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZHdSZXZJVkNvdW50ZXIgPSBjcHVfdG9fbGUzMihwRGV2aWNlLT5kd0lWQ291bnRlcik7Ci0JKnBkd0lWID0gcERldmljZS0+ZHdJVkNvdW50ZXI7CisJcmV2X2l2X2NvdW50ZXIgPSBjcHVfdG9fbGUzMihwRGV2aWNlLT5kd0lWQ291bnRlcik7CisJKnBkd0lWID0gY3B1X3RvX2xlMzIocERldmljZS0+ZHdJVkNvdW50ZXIpOwogCXBEZXZpY2UtPmJ5S2V5SW5kZXggPSBwVHJhbnNtaXRLZXktPmR3S2V5SW5kZXggJiAweGY7CiAKIAlzd2l0Y2ggKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSkgewogCWNhc2UgS0VZX0NUTF9XRVA6CiAJCWlmIChwVHJhbnNtaXRLZXktPnVLZXlMZW5ndGggPT0gV0xBTl9XRVAyMzJfS0VZTEVOKSB7Ci0JCQltZW1jcHkocERldmljZS0+YWJ5UFJORywgKHU4ICopJmR3UmV2SVZDb3VudGVyLCAzKTsKKwkJCW1lbWNweShwRGV2aWNlLT5hYnlQUk5HLCAodTggKikmcmV2X2l2X2NvdW50ZXIsIDMpOwogCQkJbWVtY3B5KHBEZXZpY2UtPmFieVBSTkcgKyAzLCBwVHJhbnNtaXRLZXktPmFieUtleSwKIAkJCQkJCXBUcmFuc21pdEtleS0+dUtleUxlbmd0aCk7CiAJCX0gZWxzZSB7Ci0JCQltZW1jcHkocGJ5QnVmLCAodTggKikmZHdSZXZJVkNvdW50ZXIsIDMpOworCQkJbWVtY3B5KHBieUJ1ZiwgKHU4ICopJnJldl9pdl9jb3VudGVyLCAzKTsKIAkJCW1lbWNweShwYnlCdWYgKyAzLCBwVHJhbnNtaXRLZXktPmFieUtleSwKIAkJCQkJCXBUcmFuc21pdEtleS0+dUtleUxlbmd0aCk7CiAJCQlpZiAocFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoID09IFdMQU5fV0VQNDBfS0VZTEVOKSB7Ci0JCQkJbWVtY3B5KHBieUJ1Zis4LCAodTggKikmZHdSZXZJVkNvdW50ZXIsIDMpOwotCQkJbWVtY3B5KHBieUJ1ZisxMSwgcFRyYW5zbWl0S2V5LT5hYnlLZXksCisJCQkJbWVtY3B5KHBieUJ1Zis4LCAodTggKikmcmV2X2l2X2NvdW50ZXIsIDMpOworCQkJCW1lbWNweShwYnlCdWYrMTEsIHBUcmFuc21pdEtleS0+YWJ5S2V5LAogCQkJCQkJcFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoKTsKIAkJCX0KIAogCQkJbWVtY3B5KHBEZXZpY2UtPmFieVBSTkcsIHBieUJ1ZiwgMTYpOwogCQl9CiAJCS8qIEFwcGVuZCBJViBhZnRlciBNYWMgSGVhZGVyICovCi0JCSpwZHdJViAmPSBXRVBfSVZfTUFTSzsKLQkJKnBkd0lWIHw9ICh1MzIpcERldmljZS0+YnlLZXlJbmRleCA8PCAzMDsKLQkJKnBkd0lWID0gY3B1X3RvX2xlMzIoKnBkd0lWKTsKKwkJKnBkd0lWICY9IGNwdV90b19sZTMyKFdFUF9JVl9NQVNLKTsKKwkJKnBkd0lWIHw9IGNwdV90b19sZTMyKCh1MzIpcERldmljZS0+YnlLZXlJbmRleCA8PCAzMCk7CiAKIAkJcERldmljZS0+ZHdJVkNvdW50ZXIrKzsKIAkJaWYgKHBEZXZpY2UtPmR3SVZDb3VudGVyID4gV0VQX0lWX01BU0spCkBAIC0yNTYsNyArMjUzLDcgQEAKIAkJKihwYnlJVkhlYWQrMykgPSAodTgpKCgocERldmljZS0+YnlLZXlJbmRleCA8PCA2KSAmCiAJCQkJCQkJMHhjMCkgfCAweDIwKTsKIAotCQkqcGR3SVYgfD0gY3B1X3RvX2xlMTYoKHUxNikocFRyYW5zbWl0S2V5LT53VFNDMTVfMCkpOworCQkqcGR3SVYgfD0gY3B1X3RvX2xlMzIoKHUzMikocFRyYW5zbWl0S2V5LT53VFNDMTVfMCkpOwogCiAJCS8qIEFwcGVuZCBJViZFeHRJViBhZnRlciBNYWMgSGVhZGVyICovCiAJCSpwZHdFeHRJViA9IGNwdV90b19sZTMyKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNik7CkBAIC0yODMsOSArMjgwLDEwIEBACiAKIAkJLyogTUlDSERSMiAqLwogCQltZW1jcHkobWljX2hkci0+YWRkcjMsIHBNQUNIZWFkZXItPmFkZHIzLCBFVEhfQUxFTik7Ci0JCW1pY19oZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihwTUFDSGVhZGVyLT5mcmFtZV9jb250cm9sCi0JCQkJCQkJCSYgMHhjNzhmKTsKLQkJbWljX2hkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihwTUFDSGVhZGVyLT5zZXFfY3RybCAmIDB4Zik7CisJCW1pY19oZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKKwkJCWxlMTZfdG9fY3B1KHBNQUNIZWFkZXItPmZyYW1lX2NvbnRyb2wpICYgMHhjNzhmKTsKKwkJbWljX2hkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNigKKwkJCQlsZTE2X3RvX2NwdShwTUFDSGVhZGVyLT5zZXFfY3RybCkgJiAweGYpOwogCiAJCWlmIChpZWVlODAyMTFfaGFzX2E0KHBNQUNIZWFkZXItPmZyYW1lX2NvbnRyb2wpKQogCQkJbWVtY3B5KG1pY19oZHItPmFkZHI0LCBwTUFDSGVhZGVyLT5hZGRyNCwgRVRIX0FMRU4pOwpAQCAtMzA1LDcgKzMwMyw3IEBACiAgICAgaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1dFUCkgewogICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgIC8vIEFwcGVuZCBJQ1YgYWZ0ZXIgcGF5bG9hZAotICAgICAgICBkd0lDViA9IENSQ2R3R2V0Q3JjMzJFeChwYnlQYXlsb2FkSGVhZCwgd1BheWxvYWRTaXplLCBkd0lDVik7Ly9JQ1YoUGF5bG9hZCkKKwlkd0lDViA9IGV0aGVyX2NyY19sZSh3UGF5bG9hZFNpemUsIHBieVBheWxvYWRIZWFkKTsKICAgICAgICAgcGR3SUNWID0gKHUzMiAqKShwYnlQYXlsb2FkSGVhZCArIHdQYXlsb2FkU2l6ZSk7CiAgICAgICAgIC8vIGZpbmFsbHksIHdlIG11c3QgaW52ZXJ0IGR3Q1JDIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKICAgICAgICAgKnBkd0lDViA9IGNwdV90b19sZTMyKH5kd0lDVik7CkBAIC0zMTYsNyArMzE0LDcgQEAKICAgICB9IGVsc2UgaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApIHsKICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAvL0FwcGVuZCBJQ1YgYWZ0ZXIgcGF5bG9hZAotICAgICAgICBkd0lDViA9IENSQ2R3R2V0Q3JjMzJFeChwYnlQYXlsb2FkSGVhZCwgd1BheWxvYWRTaXplLCBkd0lDVik7Ly9JQ1YoUGF5bG9hZCkKKwlkd0lDViA9IGV0aGVyX2NyY19sZSh3UGF5bG9hZFNpemUsIHBieVBheWxvYWRIZWFkKTsKICAgICAgICAgcGR3SUNWID0gKHUzMiAqKShwYnlQYXlsb2FkSGVhZCArIHdQYXlsb2FkU2l6ZSk7CiAgICAgICAgIC8vIGZpbmFsbHksIHdlIG11c3QgaW52ZXJ0IGR3Q1JDIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKICAgICAgICAgKnBkd0lDViA9IGNwdV90b19sZTMyKH5kd0lDVik7CkBAIC0zNjgsMTQgKzM2NiwxNCBAQAogCiAvL2J5RnJlcVR5cGU6IDA9PjVHSFogMT0+Mi40R0haCiBzdGF0aWMgX19sZTE2IHNfdUdldFJUU0NUU1JzdlRpbWUoc3RydWN0IHZudF9wcml2YXRlICpwcml2LAotCXU4IHJzdl90eXBlLCB1OCBwa3RfdHlwZSwgdTMyIGZyYW1lX2xlbmdodCwgdTE2IGN1cnJlbnRfcmF0ZSkKKwl1OCByc3ZfdHlwZSwgdTggcGt0X3R5cGUsIHUzMiBmcmFtZV9sZW5ndGgsIHUxNiBjdXJyZW50X3JhdGUpCiB7CiAJdTMyIHJydl90aW1lLCBydHNfdGltZSwgY3RzX3RpbWUsIGFja190aW1lLCBkYXRhX3RpbWU7CiAKIAlycnZfdGltZSA9IHJ0c190aW1lID0gY3RzX3RpbWUgPSBhY2tfdGltZSA9IGRhdGFfdGltZSA9IDA7CiAKIAlkYXRhX3RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocHJpdi0+YnlQcmVhbWJsZVR5cGUsIHBrdF90eXBlLAotCQkJCQkJZnJhbWVfbGVuZ2h0LCBjdXJyZW50X3JhdGUpOworCQkJCQkJZnJhbWVfbGVuZ3RoLCBjdXJyZW50X3JhdGUpOwogCiAJaWYgKHJzdl90eXBlID09IDApIHsKIAkJcnRzX3RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocHJpdi0+YnlQcmVhbWJsZVR5cGUsCkBAIC01NTEsNyArNTQ5LDggQEAKIAkJX19sZTE2IGR1cmF0aW9uKQogewogCXJ0cy0+ZHVyYXRpb24gPSBkdXJhdGlvbjsKLQlydHMtPmZyYW1lX2NvbnRyb2wgPSBUWVBFX0NUTF9SVFM7CisJcnRzLT5mcmFtZV9jb250cm9sID0KKwkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9SVFMpOwogCiAJaWYgKHByaXYtPm9wX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKIAkJCQlwcml2LT5vcF9tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQpAQCAtNzEzLDcgKzcxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgc192RmlsbENUU0hlYWQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1MzIgdURNQUlkeCwKK3N0YXRpYyB1MTYgc192RmlsbENUU0hlYWQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAogCXU4IGJ5UGt0VHlwZSwgdW5pb24gdm50X3R4X2RhdGFfaGVhZCAqaGVhZCwgdTMyIGNiRnJhbWVMZW5ndGgsCiAJaW50IGJOZWVkQWNrLCB1MTYgd0N1cnJlbnRSYXRlLCB1OCBieUZCT3B0aW9uKQogewpAQCAtNzQxLDcgKzc0MCw5IEBACiAJCQlwRGV2aWNlLT50eF9yYXRlX2ZiMSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pOwogCQkvKiBHZXQgQ1RTIEZyYW1lIGJvZHkgKi8KIAkJcEJ1Zi0+ZGF0YS5kdXJhdGlvbiA9IHBCdWYtPmR1cmF0aW9uX2JhOwotCQlwQnVmLT5kYXRhLmZyYW1lX2NvbnRyb2wgPSBUWVBFX0NUTF9DVFM7CisJCXBCdWYtPmRhdGEuZnJhbWVfY29udHJvbCA9CisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX0NUUyk7CisKIAkJbWVtY3B5KHBCdWYtPmRhdGEucmEsIHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyLCBFVEhfQUxFTik7CiAKIAkJcmV0dXJuIHZudF9yeHR4X2RhdGFoZWFkX2dfZmIocERldmljZSwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsCkBAIC03NTcsNyArNzU4LDkgQEAKIAkJCXdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pOwogCQkvKkdldCBDVFMgRnJhbWUgYm9keSovCiAJCXBCdWYtPmRhdGEuZHVyYXRpb24gPSBwQnVmLT5kdXJhdGlvbl9iYTsKLQkJcEJ1Zi0+ZGF0YS5mcmFtZV9jb250cm9sID0gVFlQRV9DVExfQ1RTOworCQlwQnVmLT5kYXRhLmZyYW1lX2NvbnRyb2wgPQorCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9DVFMpOworCiAJCW1lbWNweShwQnVmLT5kYXRhLnJhLCBwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkciwgRVRIX0FMRU4pOwogCiAJCXJldHVybiB2bnRfcnh0eF9kYXRhaGVhZF9nKHBEZXZpY2UsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLApAQCAtNzgyLDcgKzc4NSw2IEBACiAgKiAgICAgIHBDVFMgICAgICAgICAgICAtIENUUyBCdWZmZXIKICAqICAgICAgY2JGcmFtZVNpemUgICAgIC0gVHJhbnNtaXQgRGF0YSBMZW5ndGggKEhkcitQYXlsb2FkK0ZDUykKICAqICAgICAgYk5lZWRBQ0sgICAgICAgIC0gSWYgbmVlZCBBQ0sKLSAqICAgICAgdURNQUlkeCAgICAgICAgIC0gRE1BIEluZGV4CiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgpAQCAtNzkzLDE0ICs3OTUsMTQgQEAKIHN0YXRpYyB1MTYgc192R2VuZXJhdGVUeFBhcmFtZXRlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsCiAJdTggYnlQa3RUeXBlLCB1MTYgd0N1cnJlbnRSYXRlLAlzdHJ1Y3Qgdm50X3R4X2J1ZmZlciAqdHhfYnVmZmVyLAogCXN0cnVjdCB2bnRfbWljX2hkciAqKm1pY19oZHIsIHUzMiBuZWVkX21pYywgdTMyIGNiRnJhbWVTaXplLAotCWludCBiTmVlZEFDSywgdTMyIHVETUFJZHgsIHN0cnVjdCBldGhoZHIgKnBzRXRoSGVhZGVyLCBib29sIG5lZWRfcnRzKQorCWludCBiTmVlZEFDSywgc3RydWN0IGV0aGhkciAqcHNFdGhIZWFkZXIsIGJvb2wgbmVlZF9ydHMpCiB7CiAJc3RydWN0IHZudF90eF9maWZvX2hlYWQgKnBGaWZvSGVhZCA9ICZ0eF9idWZmZXItPmZpZm9faGVhZDsKIAl1bmlvbiB2bnRfdHhfZGF0YV9oZWFkICpoZWFkID0gTlVMTDsKIAl1MTYgd0ZpZm9DdGw7CiAJdTggYnlGQk9wdGlvbiA9IEFVVE9fRkJfTk9ORTsKIAotCXBGaWZvSGVhZC0+d1Jlc2VydmVkID0gd0N1cnJlbnRSYXRlOworCXBGaWZvSGVhZC0+Y3VycmVudF9yYXRlID0gY3B1X3RvX2xlMTYod0N1cnJlbnRSYXRlKTsKIAl3Rmlmb0N0bCA9IHBGaWZvSGVhZC0+d0ZJRk9DdGw7CiAKIAlpZiAod0ZpZm9DdGwgJiBGSUZPQ1RMX0FVVE9fRkJfMCkKQEAgLTgwOCw5ICs4MTAsNiBAQAogCWVsc2UgaWYgKHdGaWZvQ3RsICYgRklGT0NUTF9BVVRPX0ZCXzEpCiAJCWJ5RkJPcHRpb24gPSBBVVRPX0ZCXzE7CiAKLQlpZiAoIXBGaWZvSGVhZCkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQiB8fCBieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdBKSB7CiAJCWlmIChuZWVkX3J0cykgewogCQkJc3RydWN0IHZudF9ycnZfdGltZV9ydHMgKnBCdWYgPQpAQCAtODY0LDcgKzg2Myw3IEBACiAJCQl9CiAKIAkJCS8qIEZpbGwgQ1RTICovCi0JCQlyZXR1cm4gc192RmlsbENUU0hlYWQocERldmljZSwgdURNQUlkeCwgYnlQa3RUeXBlLAorCQkJcmV0dXJuIHNfdkZpbGxDVFNIZWFkKHBEZXZpY2UsIGJ5UGt0VHlwZSwKIAkJCQloZWFkLCBjYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIHdDdXJyZW50UmF0ZSwKIAkJCQkJYnlGQk9wdGlvbik7CiAJCX0KQEAgLTk0OSwxMiArOTQ4LDExIEBACiAKIHN0YXRpYyBpbnQgc19iUGFja2V0VG9XaXJlbGVzc1VzYihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5UGt0VHlwZSwKIAlzdHJ1Y3Qgdm50X3R4X2J1ZmZlciAqdHhfYnVmZmVyLCBpbnQgYk5lZWRFbmNyeXB0aW9uLAotCXUzMiB1U2tiUGFja2V0TGVuLCB1MzIgdURNQUlkeCwJc3RydWN0IGV0aGhkciAqcHNFdGhIZWFkZXIsCisJdTMyIHVTa2JQYWNrZXRMZW4sIHN0cnVjdCBldGhoZHIgKnBzRXRoSGVhZGVyLAogCXU4ICpwUGFja2V0LCBQU0tleUl0ZW0gcFRyYW5zbWl0S2V5LCB1MzIgdU5vZGVJbmRleCwgdTE2IHdDdXJyZW50UmF0ZSwKIAl1MzIgKnBjYkhlYWRlckxlbiwgdTMyICpwY2JUb3RhbExlbikKIHsKIAlzdHJ1Y3Qgdm50X3R4X2ZpZm9faGVhZCAqcFR4QnVmSGVhZCA9ICZ0eF9idWZmZXItPmZpZm9faGVhZDsKLQlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwogCXUzMiBjYkZyYW1lU2l6ZSwgY2JGcmFtZUJvZHlTaXplOwogCXUzMiBjYjgwMl8xX0hfbGVuOwogCXUzMiBjYklWbGVuID0gMCwgY2JJQ1ZsZW4gPSAwLCBjYk1JQ2xlbiA9IDAsIGNiTUFDSGRMZW4gPSAwOwpAQCAtMTAwOCw3ICsxMDA2LDcgQEAKIAkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF9ORUVEQUNLOwogCX0KIAotICAgIHBUeEJ1ZkhlYWQtPndUaW1lU3RhbXAgPSBERUZBVUxUX01TRFVfTElGRVRJTUVfUkVTXzY0dXM7CisgICAgcFR4QnVmSGVhZC0+dGltZV9zdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTVNEVV9MSUZFVElNRV9SRVNfNjR1cyk7CiAKICAgICAvL1NldCBGUkFHQ1RMX01BQ0hEQ05UCiAJY2JNQUNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTjsKQEAgLTExNDUsMjcgKzExNDMsMjEgQEAKICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk5vIEZyYWdtZW50YXRpb24uLi5cbiIpOwogICAgIGJ5RnJhZ1R5cGUgPSBGUkFHQ1RMX05PTkZSQUc7Ci0gICAgLy91RE1BSWR4ID0gVFlQRV9BQzBETUE7CiAgICAgLy9wVHhCdWZIZWFkID0gKFBTVHhCdWZIZWFkKSAmKHBUeEJ1ZkhlYWQtPmFkd1R4S2V5WzBdKTsKIAogCS8qIEZpbGwgRklGTywgUnJ2VGltZSwgUlRTIGFuZCBDVFMgKi8KIAl1RHVyYXRpb24gPSBzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyKHBEZXZpY2UsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLAogCQkJdHhfYnVmZmVyLCAmcE1JQ0hEUiwgY2JNSUNIRFIsCi0JCQljYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIHVETUFJZHgsIHBzRXRoSGVhZGVyLCBiUlRTKTsKKwkJCWNiRnJhbWVTaXplLCBiTmVlZEFDSywgcHNFdGhIZWFkZXIsIGJSVFMpOwogCiAgICAgLy8gR2VuZXJhdGUgVFggTUFDIEhlYWRlcgogICAgIHNfdkdlbmVyYXRlTUFDSGVhZGVyKHBEZXZpY2UsIHBieU1hY0hkciwgKHUxNil1RHVyYXRpb24sIHBzRXRoSGVhZGVyLCBiTmVlZEVuY3J5cHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBieUZyYWdUeXBlLCB1RE1BSWR4LCAwKTsKKwkJYnlGcmFnVHlwZSwgMCk7CiAKICAgICBpZiAoYk5lZWRFbmNyeXB0aW9uID09IHRydWUpIHsKICAgICAgICAgLy9GaWxsIFRYS0VZCiAJc192RmlsbFR4S2V5KHBEZXZpY2UsIHBUeEJ1ZkhlYWQsIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAogCQlwYnlNYWNIZHIsICh1MTYpY2JGcmFtZUJvZHlTaXplLCBwTUlDSERSKTsKLQotICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdUU0M0N18xNiA9IHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNjsKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud1RTQzE1XzAgPSBwVHJhbnNtaXRLZXktPndUU0MxNV8wOwotICAgICAgICB9CiAgICAgfQogCiAJLyogODAyLjFIICovCkBAIC0xMjg3LDcgKzEyNzksNyBAQAogCiBzdGF0aWMgdm9pZCBzX3ZHZW5lcmF0ZU1BQ0hlYWRlcihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsCiAJdTggKnBieUJ1ZmZlckFkZHIsIHUxNiB3RHVyYXRpb24sIHN0cnVjdCBldGhoZHIgKnBzRXRoSGVhZGVyLAotCWludCBiTmVlZEVuY3J5cHQsIHUxNiB3RnJhZ1R5cGUsIHUzMiB1RE1BSWR4LCB1MzIgdUZyYWdJZHgpCisJaW50IGJOZWVkRW5jcnlwdCwgdTE2IHdGcmFnVHlwZSwgdTMyIHVGcmFnSWR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwTUFDSGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGJ5QnVmZmVyQWRkcjsKIApAQCAtMTM4MywzOCArMTM3NSwzOSBAQAogCXUxNiB3VHhCdWZTaXplOwogCXUzMiBjYk1hY0hkTGVuOwogCXUxNiB3Q3VycmVudFJhdGUgPSBSQVRFXzFNOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEpIHsKKwkJd0N1cnJlbnRSYXRlID0gUkFURV82TTsKKwkJYnlQa3RUeXBlID0gUEtfVFlQRV8xMUE7CisJfSBlbHNlIHsKKwkJd0N1cnJlbnRSYXRlID0gUkFURV8xTTsKKwkJYnlQa3RUeXBlID0gUEtfVFlQRV8xMUI7CisJfQorCisJaWYgKHBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpCisJCXZudF9yZl9zZXRwb3dlcihwRGV2aWNlLCB3Q3VycmVudFJhdGUsIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKKwllbHNlCisJCXZudF9yZl9zZXRwb3dlcihwRGV2aWNlLCB3Q3VycmVudFJhdGUsIHBNZ210LT51Q3VyckNoYW5uZWwpOworCisJcERldmljZS0+d0N1cnJlbnRSYXRlID0gd0N1cnJlbnRSYXRlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKIAogCXBDb250ZXh0ID0gc192R2V0RnJlZUNvbnRleHQocERldmljZSk7CisJaWYgKCFwQ29udGV4dCkgeworCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCisJCQkiTWFuYWdlbWVudFNlbmQgVFguLi5OTyBDT05URVhUIVxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIENNRF9TVEFUVVNfUkVTT1VSQ0VTOworCX0KIAotICAgIGlmIChOVUxMID09IHBDb250ZXh0KSB7Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTWFuYWdlbWVudFNlbmQgVFguLi5OTyBDT05URVhUIVxuIik7Ci0gICAgICAgIHJldHVybiBDTURfU1RBVFVTX1JFU09VUkNFUzsKLSAgICB9Ci0KLQlwVFhfQnVmZmVyID0gKHN0cnVjdCB2bnRfdHhfYnVmZmVyICopJnBDb250ZXh0LT5EYXRhWzBdOworCXBUWF9CdWZmZXIgPSAoc3RydWN0IHZudF90eF9idWZmZXIgKikmcENvbnRleHQtPmRhdGFbMF07CiAgICAgY2JGcmFtZUJvZHlTaXplID0gcFBhY2tldC0+Y2JQYXlsb2FkTGVuOwogCXBUeEJ1ZkhlYWQgPSAmcFRYX0J1ZmZlci0+Zmlmb19oZWFkOwogCXBieVR4QnVmZmVyQWRkciA9ICh1OCAqKSZwVHhCdWZIZWFkLT5hZHdUeEtleVswXTsKIAl3VHhCdWZTaXplID0gc2l6ZW9mKHN0cnVjdCB2bnRfdHhfZmlmb19oZWFkKTsKIAotICAgIGlmIChwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkgewotICAgICAgICB3Q3VycmVudFJhdGUgPSBSQVRFXzZNOwotICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExQTsKLSAgICB9IGVsc2UgewotICAgICAgICB3Q3VycmVudFJhdGUgPSBSQVRFXzFNOwotICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExQjsKLSAgICB9Ci0KLSAgICAvLyBTZXRQb3dlciB3aWxsIGNhdXNlIGVycm9yIHBvd2VyIFRYIHN0YXRlIGZvciBPRkRNIERhdGUgcGFja2V0IGluIFRYIGJ1ZmZlci4KLSAgICAvLyAyMDA0LjExLjExIEt5bGUgLS0gVXNpbmcgT0ZETSBwb3dlciB0byB0eCBNbmdQa3Qgd2lsbCBkZWNyZWFzZSB0aGUgY29ubmVjdGlvbiBjYXBhYmlsaXR5LgotICAgIC8vICAgICAgICAgICAgICAgICAgICBBbmQgY21kIHRpbWVyIHdpbGwgd2FpdCBkYXRhIHBrdCBUWCBmaW5pc2ggYmVmb3JlIHNjYW5uaW5nIHNvIGl0J3MgT0sKLSAgICAvLyAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHBvd2VyIGhlcmUuCi0gICAgaWYgKHBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKLSAgICAgICAgUkZiU2V0UG93ZXIocERldmljZSwgd0N1cnJlbnRSYXRlLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkZiU2V0UG93ZXIocERldmljZSwgd0N1cnJlbnRSYXRlLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKLSAgICB9Ci0gICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gd0N1cnJlbnRSYXRlOwogCiAgICAgLy9TZXQgcGFja2V0IHR5cGUKICAgICBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8wMDAwIDAwMDAgMDAwMCAwMDAwCkBAIC0xNDMxLDcgKzE0MjQsNyBAQAogICAgIH0KIAogICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfVE1PRU47Ci0gICAgcFR4QnVmSGVhZC0+d1RpbWVTdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTUdOX0xJRkVUSU1FX1JFU182NHVzKTsKKyAgICBwVHhCdWZIZWFkLT50aW1lX3N0YW1wID0gY3B1X3RvX2xlMTYoREVGQVVMVF9NR05fTElGRVRJTUVfUkVTXzY0dXMpOwogCiAgICAgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBQYWNrZXQtPnA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxKSkgewogICAgICAgICBiTmVlZEFDSyA9IGZhbHNlOwpAQCAtMTUyNyw3ICsxNTIwLDcgQEAKIAkvKiBGaWxsIEZJRk8sUnJ2VGltZSxSVFMsYW5kIENUUyAqLwogCXVEdXJhdGlvbiA9IHNfdkdlbmVyYXRlVHhQYXJhbWV0ZXIocERldmljZSwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsCiAJCXBUWF9CdWZmZXIsICZwTUlDSERSLCAwLAotCQljYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIFRZUEVfVFhETUEwLCAmc0V0aEhlYWRlciwgZmFsc2UpOworCQljYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssICZzRXRoSGVhZGVyLCBmYWxzZSk7CiAKICAgICBwTUFDSGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIChwYnlUeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOwogCkBAIC0xNjA1LDEzICsxNTk4LDEzIEBACiAJfQogICAgIH0KIAotICAgIHBUWF9CdWZmZXItPndUeEJ5dGVDb3VudCA9IGNwdV90b19sZTE2KCh1MTYpKGNiUmVxQ291bnQpKTsKKyAgICBwVFhfQnVmZmVyLT50eF9ieXRlX2NvdW50ID0gY3B1X3RvX2xlMTYoKHUxNikoY2JSZXFDb3VudCkpOwogICAgIHBUWF9CdWZmZXItPmJ5UEtUTk8gPSAodTgpICgoKHdDdXJyZW50UmF0ZTw8NCkgJjB4MDBGMCkgfCAoKHBEZXZpY2UtPndTZXFDb3VudGVyIC0gMSkgJiAweDAwMEYpKTsKICAgICBwVFhfQnVmZmVyLT5ieVR5cGUgPSAweDAwOwogCi0gICAgcENvbnRleHQtPnBQYWNrZXQgPSBOVUxMOwotICAgIHBDb250ZXh0LT50eXBlID0gQ09OVEVYVF9NR01UX1BBQ0tFVDsKLSAgICBwQ29udGV4dC0+dUJ1ZkxlbiA9ICh1MTYpY2JSZXFDb3VudCArIDQ7ICAvL1VTQiBoZWFkZXIKKwlwQ29udGV4dC0+c2tiID0gTlVMTDsKKwlwQ29udGV4dC0+dHlwZSA9IENPTlRFWFRfTUdNVF9QQUNLRVQ7CisJcENvbnRleHQtPmJ1Zl9sZW4gPSAodTE2KWNiUmVxQ291bnQgKyA0OyAvKiBVU0IgaGVhZGVyICovCiAKICAgICBpZiAoV0xBTl9HRVRfRkNfVE9EUyhwTUFDSGVhZGVyLT5mcmFtZV9jb250cm9sKSA9PSAwKSB7CiAJc192U2F2ZVR4UGt0SW5mbyhwRGV2aWNlLCAodTgpKHBUWF9CdWZmZXItPmJ5UEtUTk8gJiAweDBGKSwKQEAgLTE2MjUsNiArMTYxOCw5IEBACiAgICAgfQogCiAgICAgUElQRW5zU2VuZEJ1bGtPdXQocERldmljZSxwQ29udGV4dCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CisKICAgICByZXR1cm4gQ01EX1NUQVRVU19QRU5ESU5HOwogfQogCkBAIC0xNjQ5LDcgKzE2NDUsNyBAQAogICAgICAgICByZXR1cm4gc3RhdHVzIDsKICAgICB9CiAKLQlwVFhfQnVmZmVyID0gKHN0cnVjdCB2bnRfYmVhY29uX2J1ZmZlciAqKSZwQ29udGV4dC0+RGF0YVswXTsKKwlwVFhfQnVmZmVyID0gKHN0cnVjdCB2bnRfYmVhY29uX2J1ZmZlciAqKSZwQ29udGV4dC0+ZGF0YVswXTsKIAlzaG9ydF9oZWFkID0gJnBUWF9CdWZmZXItPnNob3J0X2hlYWQ7CiAKICAgICBjYkZyYW1lQm9keVNpemUgPSBwUGFja2V0LT5jYlBheWxvYWRMZW47CkBAIC0xNjk3LDM3NyArMTY5MywxOSBAQAogCiAgICAgY2JSZXFDb3VudCA9IGNiSGVhZGVyU2l6ZSArIFdMQU5fSERSX0FERFIzX0xFTiArIGNiRnJhbWVCb2R5U2l6ZTsKIAotICAgIHBUWF9CdWZmZXItPndUeEJ5dGVDb3VudCA9ICh1MTYpY2JSZXFDb3VudDsKKyAgICBwVFhfQnVmZmVyLT50eF9ieXRlX2NvdW50ID0gY3B1X3RvX2xlMTYoKHUxNiljYlJlcUNvdW50KTsKICAgICBwVFhfQnVmZmVyLT5ieVBLVE5PID0gKHU4KSAoKCh3Q3VycmVudFJhdGU8PDQpICYweDAwRjApIHwgKChwRGV2aWNlLT53U2VxQ291bnRlciAtIDEpICYgMHgwMDBGKSk7CiAgICAgcFRYX0J1ZmZlci0+YnlUeXBlID0gMHgwMTsKIAotICAgIHBDb250ZXh0LT5wUGFja2V0ID0gTlVMTDsKLSAgICBwQ29udGV4dC0+dHlwZSA9IENPTlRFWFRfTUdNVF9QQUNLRVQ7Ci0gICAgcENvbnRleHQtPnVCdWZMZW4gPSAodTE2KWNiUmVxQ291bnQgKyA0OyAgLy9VU0IgaGVhZGVyCisJcENvbnRleHQtPnNrYiA9IE5VTEw7CisJcENvbnRleHQtPnR5cGUgPSBDT05URVhUX01HTVRfUEFDS0VUOworCXBDb250ZXh0LT5idWZfbGVuID0gKHUxNiljYlJlcUNvdW50ICsgNDsgLyogVVNCIGhlYWRlciAqLwogCiAgICAgUElQRW5zU2VuZEJ1bGtPdXQocERldmljZSxwQ29udGV4dCk7CiAgICAgcmV0dXJuIENNRF9TVEFUVVNfUEVORElORzsKIAogfQogCi12b2lkIHZETUEwX3R4XzgwMjExKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwotCXN0cnVjdCB2bnRfdHhfYnVmZmVyICpwVFhfQnVmZmVyOwotCXN0cnVjdCB2bnRfdHhfZmlmb19oZWFkICpwVHhCdWZIZWFkOwotCXU4IGJ5UGt0VHlwZTsKLQl1OCAqcGJ5VHhCdWZmZXJBZGRyOwotCXUzMiB1RHVyYXRpb24sIGNiUmVxQ291bnQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKnBNQUNIZWFkZXI7Ci0JdTMyIGNiSGVhZGVyU2l6ZSwgY2JGcmFtZUJvZHlTaXplOwotCWludCBiTmVlZEFDSywgYklzUFNQT0xMID0gZmFsc2U7Ci0JdTMyIGNiRnJhbWVTaXplOwotCXUzMiBjYklWbGVuID0gMCwgY2JJQ1ZsZW4gPSAwLCBjYk1JQ2xlbiA9IDAsIGNiRkNTbGVuID0gNDsKLQl1MzIgdVBhZGRpbmcgPSAwOwotCXUzMiBjYk1JQ0hEUiA9IDAsIHVMZW5ndGggPSAwOwotCXUzMiBkd01JQ0tleTAsIGR3TUlDS2V5MTsKLQl1MzIgZHdNSUNfUHJpb3JpdHk7Ci0JdTMyICpwZHdNSUNfTCwgKnBkd01JQ19SOwotCXUxNiB3VHhCdWZTaXplOwotCXUzMiBjYk1hY0hkTGVuOwotCXN0cnVjdCBldGhoZHIgc0V0aEhlYWRlcjsKLQlzdHJ1Y3Qgdm50X21pY19oZHIgKnBNSUNIRFI7Ci0JdTMyIHdDdXJyZW50UmF0ZSA9IFJBVEVfMU07Ci0JUFVXTEFOXzgwMjExSERSICBwODAyMTFIZWFkZXI7Ci0JdTMyIHVOb2RlSW5kZXggPSAwOwotCWludCBiTm9kZUV4aXN0ID0gZmFsc2U7Ci0JU0tleUl0ZW0gU1RlbXBLZXk7Ci0JUFNLZXlJdGVtIHBUcmFuc21pdEtleSA9IE5VTEw7Ci0JdTggKnBieUlWSGVhZCwgKnBieVBheWxvYWRIZWFkLCAqcGJ5TWFjSGRyOwotCXUzMiBjYkV4dFN1cHBSYXRlID0gMDsKLQlzdHJ1Y3Qgdm50X3VzYl9zZW5kX2NvbnRleHQgKnBDb250ZXh0OwotCi0JcE1JQ0hEUiA9IE5VTEw7Ci0KLSAgICBpZihza2ItPmxlbiA8PSBXTEFOX0hEUl9BRERSM19MRU4pIHsKLSAgICAgICBjYkZyYW1lQm9keVNpemUgPSAwOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICBjYkZyYW1lQm9keVNpemUgPSBza2ItPmxlbiAtIFdMQU5fSERSX0FERFIzX0xFTjsKLSAgICB9Ci0gICAgcDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUilza2ItPmRhdGE7Ci0KLQlwQ29udGV4dCA9IHNfdkdldEZyZWVDb250ZXh0KHBEZXZpY2UpOwotCi0gICAgaWYgKE5VTEwgPT0gcENvbnRleHQpIHsKLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJETUEwIFRYLi4uTk8gQ09OVEVYVCFcbiIpOwotICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotICAgICAgICByZXR1cm4gOwotICAgIH0KLQotCXBUWF9CdWZmZXIgPSAoc3RydWN0IHZudF90eF9idWZmZXIgKikmcENvbnRleHQtPkRhdGFbMF07Ci0JcFR4QnVmSGVhZCA9ICZwVFhfQnVmZmVyLT5maWZvX2hlYWQ7Ci0JcGJ5VHhCdWZmZXJBZGRyID0gKHU4ICopJnBUeEJ1ZkhlYWQtPmFkd1R4S2V5WzBdOwotCXdUeEJ1ZlNpemUgPSBzaXplb2Yoc3RydWN0IHZudF90eF9maWZvX2hlYWQpOwotCi0gICAgaWYgKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKSB7Ci0gICAgICAgIHdDdXJyZW50UmF0ZSA9IFJBVEVfNk07Ci0gICAgICAgIGJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFBOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdDdXJyZW50UmF0ZSA9IFJBVEVfMU07Ci0gICAgICAgIGJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFCOwotICAgIH0KLQotICAgIC8vIFNldFBvd2VyIHdpbGwgY2F1c2UgZXJyb3IgcG93ZXIgVFggc3RhdGUgZm9yIE9GRE0gRGF0ZSBwYWNrZXQgaW4gVFggYnVmZmVyLgotICAgIC8vIDIwMDQuMTEuMTEgS3lsZSAtLSBVc2luZyBPRkRNIHBvd2VyIHRvIHR4IE1uZ1BrdCB3aWxsIGRlY3JlYXNlIHRoZSBjb25uZWN0aW9uIGNhcGFiaWxpdHkuCi0gICAgLy8gICAgICAgICAgICAgICAgICAgIEFuZCBjbWQgdGltZXIgd2lsbCB3YWl0IGRhdGEgcGt0IFRYIGZpbmlzaCBiZWZvcmUgc2Nhbm5pbmcgc28gaXQncyBPSwotICAgIC8vICAgICAgICAgICAgICAgICAgICB0byBzZXQgcG93ZXIgaGVyZS4KLSAgICBpZiAocE1nbXQtPmVTY2FuU3RhdGUgIT0gV01BQ19OT19TQ0FOTklORykgewotICAgICAgICBSRmJTZXRQb3dlcihwRGV2aWNlLCB3Q3VycmVudFJhdGUsIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSRmJTZXRQb3dlcihwRGV2aWNlLCB3Q3VycmVudFJhdGUsIHBNZ210LT51Q3VyckNoYW5uZWwpOwotICAgIH0KLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8idkRNQTBfdHhfODAyMTE6IHA4MDIxMUhlYWRlci0+c0EzLndGcmFtZUN0bCA9ICV4IFxuIiwgcDgwMjExSGVhZGVyLT5zQTMud0ZyYW1lQ3RsKTsKLQotICAgIC8vU2V0IHBhY2tldCB0eXBlCi0gICAgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQSkgey8vMDAwMCAwMDAwIDAwMDAgMDAwMAotICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExQikgey8vMDAwMCAwMDAxIDAwMDAgMDAwMAotICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMXzExQjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQikgey8vMDAwMCAwMDEwIDAwMDAgMDAwMAotICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMXzExR0I7Ci0gICAgfQotICAgIGVsc2UgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExR0EpIHsvLzAwMDAgMDAxMSAwMDAwIDAwMDAKLSAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF8xMUdBOwotICAgIH0KLQotICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfVE1PRU47Ci0gICAgcFR4QnVmSGVhZC0+d1RpbWVTdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTUdOX0xJRkVUSU1FX1JFU182NHVzKTsKLQotICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSkpIHsKLSAgICAgICAgYk5lZWRBQ0sgPSBmYWxzZTsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7Ci0gICAgICAgICAgICB1Tm9kZUluZGV4ID0gMDsKLSAgICAgICAgICAgIGJOb2RlRXhpc3QgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKLSAgICAgICAgICAgIGlmIChCU1NiSXNTVEFJbk5vZGVEQihwRGV2aWNlLCAodTggKikocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEpLCAmdU5vZGVJbmRleCkpCi0gICAgICAgICAgICAgICAgYk5vZGVFeGlzdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwotICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7Ci0gICAgfTsKLQotICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB8fAotICAgICAgICAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpICkgewotCi0gICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfTFJFVFJZOwotICAgICAgICAvL1NldCBQcmVhbWJsZSB0eXBlIGFsd2F5cyBsb25nCi0gICAgICAgIC8vcERldmljZS0+YnlQcmVhbWJsZVR5cGUgPSBQUkVBTUJMRV9MT05HOwotCi0gICAgICAgIC8vIHByb2JlLXJlc3BvbnNlIGRvbid0IHJldHJ5Ci0gICAgICAgIC8vaWYgKChwODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwgJiBUWVBFX1NVQlRZUEVfTUFTSykgPT0gVFlQRV9NR01UX1BST0JFX1JTUCkgewotICAgICAgICAvLyAgICAgYk5lZWRBQ0sgPSBmYWxzZTsKLSAgICAgICAgLy8gICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsICAmPSAofkZJRk9DVExfTkVFREFDSyk7Ci0gICAgICAgIC8vfQotICAgIH0KLQotICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IChGSUZPQ1RMX0dFTklOVCB8IEZJRk9DVExfSVNETUEwKTsKLQotICAgIGlmICgocDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsICYgVFlQRV9TVUJUWVBFX01BU0spID09IFRZUEVfQ1RMX1BTUE9MTCkgewotICAgICAgICBiSXNQU1BPTEwgPSB0cnVlOwotICAgICAgICBjYk1hY0hkTGVuID0gV0xBTl9IRFJfQUREUjJfTEVOOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNiTWFjSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47Ci0gICAgfQotCi0gICAgLy8gaG9zdGFwZCBkYWVtb24gZXh0IHN1cHBvcnQgcmF0ZSBwYXRjaAotICAgIGlmIChXTEFOX0dFVF9GQ19GU1RZUEUocDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsKSA9PSBXTEFOX0ZTVFlQRV9BU1NPQ1JFU1ApIHsKLQotICAgICAgICBpZiAoKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzKS0+bGVuICE9IDApIHsKLSAgICAgICAgICAgIGNiRXh0U3VwcFJhdGUgKz0gKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzKS0+bGVuICsgV0xBTl9JRUhEUl9MRU47Ci0gICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcyktPmxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBjYkV4dFN1cHBSYXRlICs9ICgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcyktPmxlbiArIFdMQU5fSUVIRFJfTEVOOwotICAgICAgICAgfQotCi0gICAgICAgICBpZiAoY2JFeHRTdXBwUmF0ZSA+MCkgewotICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplID0gV0xBTl9BU1NPQ1JFU1BfT0ZGX1NVUFBfUkFURVM7Ci0gICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9TZXQgRlJBR0NUTF9NQUNIRENOVAotICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IGNwdV90b19sZTE2KCh1MTYpY2JNYWNIZExlbiA8PCAxMCk7Ci0KLSAgICAvLyBOb3RlczoKLSAgICAvLyBBbHRob3VnaCBzcGVjIHNheXMgTU1QRFUgY2FuIGJlIGZyYWdtZW50ZWQ7IEluIG1vc3QgY2FzZSwKLSAgICAvLyBubyBvbmUgd2lsbCBzZW5kIGEgTU1QRFUgdW5kZXIgZnJhZ21lbnRhdGlvbi4gV2l0aCBSVFMgbWF5IG9jY3VyLgotCi0gICAgaWYgKFdMQU5fR0VUX0ZDX0lTV0VQKHA4MDIxMUhlYWRlci0+c0E0LndGcmFtZUN0bCkgIT0gMCkgewotICAgICAgICBpZiAocERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgewotICAgICAgICAgICAgY2JJVmxlbiA9IDQ7Ci0gICAgICAgICAgICBjYklDVmxlbiA9IDQ7Ci0gICAgCSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBGUkFHQ1RMX0xFR0FDWTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB7Ci0gICAgICAgICAgICBjYklWbGVuID0gODsvL0lWK0V4dElWCi0gICAgICAgICAgICBjYk1JQ2xlbiA9IDg7Ci0gICAgICAgICAgICBjYklDVmxlbiA9IDQ7Ci0gICAgCSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBGUkFHQ1RMX1RLSVA7Ci0gICAgCSAgICAvL1dlIG5lZWQgdG8gZ2V0IHNlZWQgaGVyZSBmb3IgZmlsbGluZyBUeEtleSBlbnRyeS4KLSAgICAgICAgICAgIC8vVEtJUHZNaXhLZXkocFRyYW5zbWl0S2V5LT5hYnlLZXksIHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyLAotICAgICAgICAgICAgLy8gICAgICAgICAgICBwVHJhbnNtaXRLZXktPndUU0MxNV8wLCBwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYsIHBEZXZpY2UtPmFieVBSTkcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKLSAgICAgICAgICAgIGNiSVZsZW4gPSA4Oy8vUlNOIEhlYWRlcgotICAgICAgICAgICAgY2JJQ1ZsZW4gPSA4Oy8vTUlDCi0JICAgIGNiTUlDSERSID0gc2l6ZW9mKHN0cnVjdCB2bnRfbWljX2hkcik7Ci0gICAgICAgICAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBGUkFHQ1RMX0FFUzsKLSAgICAgICAgfQotICAgICAgICAvL01BQyBIZWFkZXIgc2hvdWxkIGJlIHBhZGRpbmcgMCB0byBEVyBhbGlnbm1lbnQuCi0gICAgICAgIHVQYWRkaW5nID0gNCAtIChjYk1hY0hkTGVuJTQpOwotICAgICAgICB1UGFkZGluZyAlPSA0OwotICAgIH0KLQotICAgIGNiRnJhbWVTaXplID0gY2JNYWNIZExlbiArIGNiRnJhbWVCb2R5U2l6ZSArIGNiSVZsZW4gKyBjYk1JQ2xlbiArIGNiSUNWbGVuICsgY2JGQ1NsZW4gKyBjYkV4dFN1cHBSYXRlOwotCi0gICAgLy9TZXQgRklGT0NUTF9HcnBBY2tQb2xpY3kKLSAgICBpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSB0cnVlKSB7Ly8wMDAwIDAxMDAgMDAwMCAwMDAwCi0gICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9CUZJRk9DVExfR1JQQUNLOwotICAgIH0KLSAgICAvL3RoZSByZXN0IG9mIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsOkZyYWdUeXAgd2lsbCBiZSBzZXQgbGF0ZXIgaW4gc192RmlsbEZyYWdQYXJhbWV0ZXIoKQotCi0gICAgaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExR0IgfHwgYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQSkgey8vODAyLjExZyBwYWNrZXQKLQljYkhlYWRlclNpemUgPSB3VHhCdWZTaXplICsgc2l6ZW9mKHN0cnVjdCB2bnRfcnJ2X3RpbWVfY3RzKSArIGNiTUlDSERSICsKLQkJc2l6ZW9mKHN0cnVjdCB2bnRfY3RzKTsKLQotICAgIH0KLSAgICBlbHNlIHsvLzgwMi4xMWEvYiBwYWNrZXQKLQljYkhlYWRlclNpemUgPSB3VHhCdWZTaXplICsgc2l6ZW9mKHN0cnVjdCB2bnRfcnJ2X3RpbWVfYWIpICsgY2JNSUNIRFIgKwotCQkJCQlzaXplb2Yoc3RydWN0IHZudF90eF9kYXRhaGVhZF9hYik7Ci0gICAgfQotICAgIG1lbWNweSgmKHNFdGhIZWFkZXIuaF9kZXN0WzBdKSwKLQkgICAmKHA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxWzBdKSwKLQkgICBFVEhfQUxFTik7Ci0gICAgbWVtY3B5KCYoc0V0aEhlYWRlci5oX3NvdXJjZVswXSksCi0JICAgJihwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMlswXSksCi0JICAgRVRIX0FMRU4pOwotICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIC8vICAgIE5vIEZyYWdtZW50YXRpb24KLSAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSAodTE2KUZSQUdDVExfTk9ORlJBRzsKLQotCS8qIEZpbGwgRklGTyxScnZUaW1lLFJUUyxhbmQgQ1RTICovCi0JdUR1cmF0aW9uID0gc192R2VuZXJhdGVUeFBhcmFtZXRlcihwRGV2aWNlLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwKLQkJcFRYX0J1ZmZlciwgJnBNSUNIRFIsIGNiTUlDSERSLAotCQljYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIFRZUEVfVFhETUEwLCAmc0V0aEhlYWRlciwgZmFsc2UpOwotCi0JcE1BQ0hlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSAocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKLQotICAgIGNiUmVxQ291bnQgPSBjYkhlYWRlclNpemUgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuICsgKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSArIGNiRXh0U3VwcFJhdGU7Ci0KLSAgICBwYnlNYWNIZHIgPSAodTggKikocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKLSAgICBwYnlQYXlsb2FkSGVhZCA9ICh1OCAqKShwYnlNYWNIZHIgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuKTsKLSAgICBwYnlJVkhlYWQgPSAodTggKikocGJ5TWFjSGRyICsgY2JNYWNIZExlbiArIHVQYWRkaW5nKTsKLQotICAgIC8vIENvcHkgdGhlIFBhY2tldCBpbnRvIGEgdHggQnVmZmVyCi0gICAgbWVtY3B5KHBieU1hY0hkciwgc2tiLT5kYXRhLCBjYk1hY0hkTGVuKTsKLQotICAgIC8vIHZlcnNpb24gc2V0IHRvIDAsIHBhdGNoIGZvciBob3N0YXBkIGRlYW1vbgotICAgIHBNQUNIZWFkZXItPmZyYW1lX2NvbnRyb2wgJj0gY3B1X3RvX2xlMTYoMHhmZmZjKTsKLSAgICBtZW1jcHkocGJ5UGF5bG9hZEhlYWQsIChza2ItPmRhdGEgKyBjYk1hY0hkTGVuKSwgY2JGcmFtZUJvZHlTaXplKTsKLQotICAgIC8vIHJlcGxhY2Ugc3VwcG9ydCByYXRlLCBwYXRjaCBmb3IgaG9zdGFwZCBkYWVtb24oIG9ubHkgc3VwcG9ydCAxMU0pCi0gICAgaWYgKFdMQU5fR0VUX0ZDX0ZTVFlQRShwODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwpID09IFdMQU5fRlNUWVBFX0FTU09DUkVTUCkgewotICAgICAgICBpZiAoY2JFeHRTdXBwUmF0ZSAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzKS0+bGVuICE9IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KChwYnlQYXlsb2FkSGVhZCArIGNiRnJhbWVCb2R5U2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcyktPmxlbiArIFdMQU5fSUVIRFJfTEVOCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgaWYgKCgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcyktPmxlbiAhPSAwKQotICAgICAgICAgICAgICAgIG1lbWNweSgocGJ5UGF5bG9hZEhlYWQgKyBjYkZyYW1lQm9keVNpemUpICsgKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzKS0+bGVuICsgV0xBTl9JRUhEUl9MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICgoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcyktPmxlbiArIFdMQU5fSUVIRFJfTEVOCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHdlcAotICAgIGlmIChXTEFOX0dFVF9GQ19JU1dFUChwODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwpICE9IDApIHsKLQotICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleSA9ICZTVGVtcEtleTsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYnlDaXBoZXJTdWl0ZTsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+ZHdLZXlJbmRleCA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdLZXlJbmRleDsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVdlcEtleUxlbmd0aDsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNiA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdUU0M0N18xNjsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+d1RTQzE1XzAgPSBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndUU0MxNV8wOwotICAgICAgICAgICAgbWVtY3B5KHBUcmFuc21pdEtleS0+YWJ5S2V5LAotICAgICAgICAgICAgICAgICZwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmFieVdlcEtleVswXSwKLSAgICAgICAgICAgICAgICBwVHJhbnNtaXRLZXktPnVLZXlMZW5ndGgKLSAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7Ci0KLSAgICAgICAgICAgIGR3TUlDS2V5MCA9ICoodTMyICopKCZwVHJhbnNtaXRLZXktPmFieUtleVsxNl0pOwotICAgICAgICAgICAgZHdNSUNLZXkxID0gKih1MzIgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7Ci0KLSAgICAgICAgICAgIC8vIERPIFNvZnR3YXJlIE1pY2hhZWwKLSAgICAgICAgICAgIE1JQ192SW5pdChkd01JQ0tleTAsIGR3TUlDS2V5MSk7Ci0gICAgICAgICAgICBNSUNfdkFwcGVuZCgodTggKikmKHNFdGhIZWFkZXIuaF9kZXN0WzBdKSwgMTIpOwotICAgICAgICAgICAgZHdNSUNfUHJpb3JpdHkgPSAwOwotICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHU4ICopJmR3TUlDX1ByaW9yaXR5LCA0KTsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJETUEwX3R4XzgwMjE6TUlDIEtFWToiXAotCQkJIiAlWCwgJVhcbiIsIGR3TUlDS2V5MCwgZHdNSUNLZXkxKTsKLQotICAgICAgICAgICAgdUxlbmd0aCA9IGNiSGVhZGVyU2l6ZSArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW47Ci0KLSAgICAgICAgICAgIE1JQ192QXBwZW5kKChwYnlUeEJ1ZmZlckFkZHIgKyB1TGVuZ3RoKSwgY2JGcmFtZUJvZHlTaXplKTsKLQotICAgICAgICAgICAgcGR3TUlDX0wgPSAodTMyICopKHBieVR4QnVmZmVyQWRkciArIHVMZW5ndGggKyBjYkZyYW1lQm9keVNpemUpOwotICAgICAgICAgICAgcGR3TUlDX1IgPSAodTMyICopKHBieVR4QnVmZmVyQWRkciArIHVMZW5ndGggKyBjYkZyYW1lQm9keVNpemUgKyA0KTsKLQotICAgICAgICAgICAgTUlDX3ZHZXRNSUMocGR3TUlDX0wsIHBkd01JQ19SKTsKLSAgICAgICAgICAgIE1JQ192VW5Jbml0KCk7Ci0KLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhNSUNGYWlsID09IHRydWUpIHsKLSAgICAgICAgICAgICAgICAqcGR3TUlDX0wgPSAwOwotICAgICAgICAgICAgICAgICpwZHdNSUNfUiA9IDA7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlR4TUlDRmFpbCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInVMZW5ndGg6ICVkLCAlZFxuIiwgdUxlbmd0aCwgY2JGcmFtZUJvZHlTaXplKTsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iY2JSZXFDb3VudDolZCwgJWQsICVkLCAlZFxuIiwgY2JSZXFDb3VudCwgY2JIZWFkZXJTaXplLCB1UGFkZGluZywgY2JJVmxlbik7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTUlDOiV4LCAleFxuIiwKLQkJCSpwZHdNSUNfTCwgKnBkd01JQ19SKTsKLQotICAgICAgICB9Ci0KLQlzX3ZGaWxsVHhLZXkocERldmljZSwgcFR4QnVmSGVhZCwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCi0JCXBieU1hY0hkciwgKHUxNiljYkZyYW1lQm9keVNpemUsIHBNSUNIRFIpOwotCi0gICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2OwotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53VFNDMTVfMCA9IHBUcmFuc21pdEtleS0+d1RTQzE1XzA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSkgewotICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgcGJ5UGF5bG9hZEhlYWQsICh1MTYpKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwTUFDSGVhZGVyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHBEZXZpY2UtPndTZXFDb3VudGVyIDw8IDQpOwotICAgIHBEZXZpY2UtPndTZXFDb3VudGVyKysgOwotICAgIGlmIChwRGV2aWNlLT53U2VxQ291bnRlciA+IDB4MGZmZikKLSAgICAgICAgcERldmljZS0+d1NlcUNvdW50ZXIgPSAwOwotCi0gICAgaWYgKGJJc1BTUE9MTCkgewotICAgICAgICAvLyBUaGUgTUFDIHdpbGwgYXV0b21hdGljYWxseSByZXBsYWNlIHRoZSBEdXJhdGlvbi1maWVsZCBvZiBNQUMgaGVhZGVyIGJ5IER1cmF0aW9uLWZpZWxkCi0gICAgICAgIC8vIG9mICBGSUZPIGNvbnRyb2wgaGVhZGVyLgotICAgICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgQUlELWZpZWxkIG9mIFBTLVBPTEwgcGFja2V0IGJlIGluY29ycmVjdCAoQmVjYXVzZSBQUy1QT0xMJ3MgQUlEIGZpZWxkIGlzCi0gICAgICAgIC8vIGluIHRoZSBzYW1lIHBsYWNlIG9mIG90aGVyIHBhY2tldCdzIER1cmF0aW9uLWZpZWxkKS4KLSAgICAgICAgLy8gQW5kIGl0IHdpbGwgY2F1c2UgQ2lzY28tQVAgdG8gaXNzdWUgRGlzYXNzb2NpYXRpb24tcGFja2V0Ci0JaWYgKGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExR0IgfHwgYnlQa3RUeXBlID09IFBLX1RZUEVfMTFHQSkgewotCQlzdHJ1Y3Qgdm50X3R4X2RhdGFoZWFkX2cgKmRhdGFfaGVhZCA9ICZwVFhfQnVmZmVyLT50eF9oZWFkLgotCQkJCQkJdHhfY3RzLnR4LmhlYWQuY3RzX2cuZGF0YV9oZWFkOwotCQlkYXRhX2hlYWQtPmR1cmF0aW9uX2EgPQotCQkJY3B1X3RvX2xlMTYocDgwMjExSGVhZGVyLT5zQTIud0R1cmF0aW9uSUQpOwotCQlkYXRhX2hlYWQtPmR1cmF0aW9uX2IgPQotCQkJY3B1X3RvX2xlMTYocDgwMjExSGVhZGVyLT5zQTIud0R1cmF0aW9uSUQpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB2bnRfdHhfZGF0YWhlYWRfYWIgKmRhdGFfaGVhZCA9ICZwVFhfQnVmZmVyLT50eF9oZWFkLgotCQkJCQl0eF9hYi50eC5oZWFkLmRhdGFfaGVhZF9hYjsKLQkJZGF0YV9oZWFkLT5kdXJhdGlvbiA9Ci0JCQljcHVfdG9fbGUxNihwODAyMTFIZWFkZXItPnNBMi53RHVyYXRpb25JRCk7Ci0JfQotICAgIH0KLQotICAgIHBUWF9CdWZmZXItPndUeEJ5dGVDb3VudCA9IGNwdV90b19sZTE2KCh1MTYpKGNiUmVxQ291bnQpKTsKLSAgICBwVFhfQnVmZmVyLT5ieVBLVE5PID0gKHU4KSAoKCh3Q3VycmVudFJhdGU8PDQpICYweDAwRjApIHwgKChwRGV2aWNlLT53U2VxQ291bnRlciAtIDEpICYgMHgwMDBGKSk7Ci0gICAgcFRYX0J1ZmZlci0+YnlUeXBlID0gMHgwMDsKLQotICAgIHBDb250ZXh0LT5wUGFja2V0ID0gc2tiOwotICAgIHBDb250ZXh0LT50eXBlID0gQ09OVEVYVF9NR01UX1BBQ0tFVDsKLSAgICBwQ29udGV4dC0+dUJ1ZkxlbiA9ICh1MTYpY2JSZXFDb3VudCArIDQ7ICAvL1VTQiBoZWFkZXIKLQotICAgIGlmIChXTEFOX0dFVF9GQ19UT0RTKHBNQUNIZWFkZXItPmZyYW1lX2NvbnRyb2wpID09IDApIHsKLQlzX3ZTYXZlVHhQa3RJbmZvKHBEZXZpY2UsICh1OCkocFRYX0J1ZmZlci0+YnlQS1ROTyAmIDB4MEYpLAotCQkJJnBNQUNIZWFkZXItPmFkZHIxWzBdLCAodTE2KWNiRnJhbWVTaXplLAotCQkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwpOwotICAgIH0KLSAgICBlbHNlIHsKLQlzX3ZTYXZlVHhQa3RJbmZvKHBEZXZpY2UsICh1OCkocFRYX0J1ZmZlci0+YnlQS1ROTyAmIDB4MEYpLAotCQkJJnBNQUNIZWFkZXItPmFkZHIzWzBdLCAodTE2KWNiRnJhbWVTaXplLAotCQkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwpOwotICAgIH0KLSAgICBQSVBFbnNTZW5kQnVsa091dChwRGV2aWNlLHBDb250ZXh0KTsKLSAgICByZXR1cm4gOwotCi19Ci0KIC8vVFlQRV9BQzBETUEgZGF0YSB0eAogLyoKICAqIERlc2NyaXB0aW9uOgpAQCAtMjA4Myw4ICsxNzIxLDcgQEAKICAqIFJldHVybiBWYWx1ZTogTlVMTAogICovCiAKLWludCBuc0RNQV90eF9wYWNrZXQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLAotCXUzMiB1RE1BSWR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IG5zRE1BX3R4X3BhY2tldChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBTdGF0cyA9ICZwRGV2aWNlLT5zdGF0czsKIAlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwpAQCAtMjA5Niw3ICsxNzMzLDYgQEAKIAl1OCBieVBrdFR5cGU7CiAJaW50IGJOZWVkRW5jcnlwdGlvbiA9IGZhbHNlOwogCVBTS2V5SXRlbSBwVHJhbnNtaXRLZXkgPSBOVUxMOwotCVNLZXlJdGVtIFNUZW1wS2V5OwogCWludCBpaTsKIAlpbnQgYlRLSVBfVXNlR1RLID0gZmFsc2U7CiAJaW50IGJOZWVkRGVBdXRoID0gZmFsc2U7CkBAIC0yMTczLDE1ICsxODA5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotCXBDb250ZXh0ID0gc192R2V0RnJlZUNvbnRleHQocERldmljZSk7Ci0KLSAgICBpZiAocENvbnRleHQgPT0gTlVMTCkgewotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyIgcENvbnRleHQgPT0gTlVMTFxuIik7Ci0gICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHJldHVybiBTVEFUVVNfUkVTT1VSQ0VTOwotICAgIH0KLQotICAgIG1lbWNweShwRGV2aWNlLT5zVHhFdGhIZWFkZXIuaF9kZXN0LCAodTggKikoc2tiLT5kYXRhKSwgRVRIX0hMRU4pOworCW1lbWNweSgmcERldmljZS0+c1R4RXRoSGVhZGVyLCBza2ItPmRhdGEsIEVUSF9ITEVOKTsKIAogLy9taWtlIGFkZDpzdGF0aW9uIG1vZGUgY2hlY2sgZWFwb2wta2V5IGNoYWxsZW5nZS0tLT4KIHsKQEAgLTIyNjgsMjIgKzE4OTYsNiBAQAogICAgICAgICB9IHdoaWxlKGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fREVCVUciYWNkbWEwOiBTVEEgaW5kZXggJWRcbiIsIHVOb2RlSW5kZXgpOwotICAgICAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gdHJ1ZSkgewotICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gJlNUZW1wS2V5OwotICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5ieUNpcGhlclN1aXRlOwotICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT5kd0tleUluZGV4ID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0tleUluZGV4OwotICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51V2VwS2V5TGVuZ3RoOwotICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2ID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd1RTQzQ3XzE2OwotICAgICAgICAgICAgcFRyYW5zbWl0S2V5LT53VFNDMTVfMCA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud1RTQzE1XzA7Ci0gICAgICAgICAgICBtZW1jcHkocFRyYW5zbWl0S2V5LT5hYnlLZXksCi0gICAgICAgICAgICAgICAgJnBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYWJ5V2VwS2V5WzBdLAotICAgICAgICAgICAgICAgIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aAotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICB9Ci0gICAgfQotCiAgICAgYnlQa3RUeXBlID0gKHU4KXBEZXZpY2UtPmJ5UGFja2V0VHlwZTsKIAogICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSkgewpAQCAtMjM0NiwxMiArMTk1OCwxMCBAQAogCWlmIChwRGV2aWNlLT5zVHhFdGhIZWFkZXIuaF9wcm90byA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSB7CiAJCWlmIChwRGV2aWNlLT5ieUJCVHlwZSAhPSBCQl9UWVBFXzExQSkgewogCQkJcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV8xTTsKLQkJCXBEZXZpY2UtPmJ5QUNLUmF0ZSA9IFJBVEVfMU07CiAJCQlwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07CiAJCQlwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUgPSBSQVRFXzZNOwogCQl9IGVsc2UgewogCQkJcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV82TTsKLQkJCXBEZXZpY2UtPmJ5QUNLUmF0ZSA9IFJBVEVfNk07CiAJCQlwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07CiAJCQlwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUgPSBSQVRFXzZNOwogCQl9CkBAIC0yMzg5LDIxICsxOTk5LDExIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewotICAgICAgICAgICAgICAgIGlmICgodU5vZGVJbmRleCAhPSAwKSAmJgotICAgICAgICAgICAgICAgICAgICAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSkgewotCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJGaW5kIFBUSyBbJVhdXG4iLAotCQkJCXBUcmFuc21pdEtleS0+ZHdLZXlJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAKICAgICAgICAgICAgIGlmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icmV0dXJuIG5vIHR4IGtleVxuIik7Ci0JCXBDb250ZXh0LT5iQm9vbEluVXNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKICAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Ryb3BwZWQrKzsKICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CkBAIC0yNDExLDIxICsyMDExLDI4IEBACiAgICAgICAgIH0KICAgICB9CiAKLQlwVFhfQnVmZmVyID0gKHN0cnVjdCB2bnRfdHhfYnVmZmVyICopJnBDb250ZXh0LT5EYXRhWzBdOworCXBDb250ZXh0ID0gc192R2V0RnJlZUNvbnRleHQocERldmljZSk7CisJaWYgKCFwQ29udGV4dCkgeworCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyIgcENvbnRleHQgPT0gTlVMTFxuIik7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybiBTVEFUVVNfUkVTT1VSQ0VTOworCX0KKworCXBUWF9CdWZmZXIgPSAoc3RydWN0IHZudF90eF9idWZmZXIgKikmcENvbnRleHQtPmRhdGFbMF07CiAKICAgICBmQ29udmVydGVkUGFja2V0ID0gc19iUGFja2V0VG9XaXJlbGVzc1VzYihwRGV2aWNlLCBieVBrdFR5cGUsCiAJCQlwVFhfQnVmZmVyLCBiTmVlZEVuY3J5cHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBza2ItPmxlbiwgdURNQUlkeCwgJnBEZXZpY2UtPnNUeEV0aEhlYWRlciwKKwkJCXNrYi0+bGVuLCAmcERldmljZS0+c1R4RXRoSGVhZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopc2tiLT5kYXRhLCBwVHJhbnNtaXRLZXksIHVOb2RlSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAmdUhlYWRlckxlbiwgJkJ5dGVzVG9Xcml0ZQogICAgICAgICAgICAgICAgICAgICAgICApOwogCi0gICAgaWYgKGZDb252ZXJ0ZWRQYWNrZXQgPT0gZmFsc2UpIHsKLSAgICAgICAgcENvbnRleHQtPmJCb29sSW5Vc2UgPSBmYWxzZTsKLSAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotICAgIH0KKwlpZiAoZkNvbnZlcnRlZFBhY2tldCA9PSBmYWxzZSkgeworCQlwQ29udGV4dC0+aW5fdXNlID0gZmFsc2U7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwl9CiAKICAgICBpZiAoIHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gdHJ1ZSApIHsKICAgICAgICAgaWYgKCAhcERldmljZS0+YlBTTW9kZVR4QnVyc3QgKSB7CkBAIC0yNDM3LDExICsyMDQ0LDExIEBACiAgICAgfQogCiAgICAgcFRYX0J1ZmZlci0+YnlQS1ROTyA9ICh1OCkgKCgocERldmljZS0+d0N1cnJlbnRSYXRlPDw0KSAmMHgwMEYwKSB8ICgocERldmljZS0+d1NlcUNvdW50ZXIgLSAxKSAmIDB4MDAwRikpOwotICAgIHBUWF9CdWZmZXItPndUeEJ5dGVDb3VudCA9ICh1MTYpQnl0ZXNUb1dyaXRlOworICAgIHBUWF9CdWZmZXItPnR4X2J5dGVfY291bnQgPSBjcHVfdG9fbGUxNigodTE2KUJ5dGVzVG9Xcml0ZSk7CiAKLSAgICBwQ29udGV4dC0+cFBhY2tldCA9IHNrYjsKLSAgICBwQ29udGV4dC0+dHlwZSA9IENPTlRFWFRfREFUQV9QQUNLRVQ7Ci0gICAgcENvbnRleHQtPnVCdWZMZW4gPSAodTE2KUJ5dGVzVG9Xcml0ZSArIDQgOyAvL1VTQiBoZWFkZXIKKwlwQ29udGV4dC0+c2tiID0gc2tiOworCXBDb250ZXh0LT50eXBlID0gQ09OVEVYVF9EQVRBX1BBQ0tFVDsKKwlwQ29udGV4dC0+YnVmX2xlbiA9ICh1MTYpQnl0ZXNUb1dyaXRlICsgNCA7IC8qIFVTQiBoZWFkZXIgKi8KIAogICAgIHNfdlNhdmVUeFBrdEluZm8ocERldmljZSwgKHU4KShwVFhfQnVmZmVyLT5ieVBLVE5PICYgMHgwRiksCiAJCQkmcERldmljZS0+c1R4RXRoSGVhZGVyLmhfZGVzdFswXSwKQEAgLTI0NTYsMTU0ICsyMDYzLDEyIEBACiAJYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLCBXTEFOX0NNRF9ERUFVVEgsICh1OCAqKSAmd1JlYXNvbik7CiAgICAgfQogCi0gIGlmKHN0YXR1cyE9U1RBVFVTX1BFTkRJTkcpIHsKLSAgICAgcENvbnRleHQtPmJCb29sSW5Vc2UgPSBmYWxzZTsKLSAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKLSAgfQotICBlbHNlCi0gICAgcmV0dXJuIDA7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfUEVORElORykgeworCQlwQ29udGV4dC0+aW5fdXNlID0gZmFsc2U7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwl9CiAKKworCXJldHVybiAwOwogfQotCi0vKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgIFJlbGF5IHBhY2tldCBzZW5kIChBQzFETUEpIGZyb20gcnggZHBjLgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIHBEZXZpY2UgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIKLSAqICAgICAgcFBhY2tldCAgICAgICAgIC0gUG9pbnRlciB0byByeCBwYWNrZXQKLSAqICAgICAgY2JQYWNrZXRTaXplICAgIC0gcnggZXRoZXJuZXQgZnJhbWUgc2l6ZQotICogIE91dDoKLSAqICAgICAgVFVSRSwgZmFsc2UKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IFJldHVybiB0cnVlIGlmIHBhY2tldCBpcyBjb3B5IHRvIGRtYTE7IG90aGVyd2lzZSBmYWxzZQotICovCi0KLWludCBiUmVsYXlQYWNrZXRTZW5kKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcERldmljZSwgdTggKnBieVNrYkRhdGEsIHUzMiB1RGF0YUxlbiwKLQl1MzIgdU5vZGVJbmRleCkKLXsKLQlzdHJ1Y3Qgdm50X21hbmFnZXIgKnBNZ210ID0gJnBEZXZpY2UtPnZudF9tZ210OwotCXN0cnVjdCB2bnRfdHhfYnVmZmVyICpwVFhfQnVmZmVyOwotCXUzMiBCeXRlc1RvV3JpdGUgPSAwLCB1SGVhZGVyTGVuID0gMDsKLQl1OCBieVBrdFR5cGUgPSBQS19UWVBFXzExQjsKLQlpbnQgYk5lZWRFbmNyeXB0aW9uID0gZmFsc2U7Ci0JU0tleUl0ZW0gU1RlbXBLZXk7Ci0JUFNLZXlJdGVtIHBUcmFuc21pdEtleSA9IE5VTEw7Ci0JdTggKnBieUJTU0lEOwotCXN0cnVjdCB2bnRfdXNiX3NlbmRfY29udGV4dCAqcENvbnRleHQ7Ci0JdTggYnlQa3RUeXA7Ci0JaW50IGZDb252ZXJ0ZWRQYWNrZXQ7Ci0JdTMyIHN0YXR1czsKLQl1MTYgd0tlZXBSYXRlID0gcERldmljZS0+d0N1cnJlbnRSYXRlOwotCi0JcENvbnRleHQgPSBzX3ZHZXRGcmVlQ29udGV4dChwRGV2aWNlKTsKLQotICAgIGlmIChOVUxMID09IHBDb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtZW1jcHkocERldmljZS0+c1R4RXRoSGVhZGVyLmhfZGVzdCwgKHU4ICopcGJ5U2tiRGF0YSwgRVRIX0hMRU4pOwotCi0gICAgaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IHRydWUpIHsKLSAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgLy8gZ2V0IGdyb3VwIGtleQotICAgICAgICBwYnlCU1NJRCA9IHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHI7Ci0gICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewotICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIktFWSBpcyBOVUxMLiBbJWRdXG4iLCBwTWdtdC0+ZUN1cnJNb2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIkdldCBHVEsuXG4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewotICAgICAgICBpZiAodU5vZGVJbmRleCA8IE1BWF9OT0RFX05VTSArIDEpIHsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleSA9ICZTVGVtcEtleTsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYnlDaXBoZXJTdWl0ZTsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+ZHdLZXlJbmRleCA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdLZXlJbmRleDsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVdlcEtleUxlbmd0aDsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNiA9IHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdUU0M0N18xNjsKLSAgICAgICAgICAgIHBUcmFuc21pdEtleS0+d1RTQzE1XzAgPSBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndUU0MxNV8wOwotICAgICAgICAgICAgbWVtY3B5KHBUcmFuc21pdEtleS0+YWJ5S2V5LAotICAgICAgICAgICAgICAgICAgICAmcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5hYnlXZXBLZXlbMF0sCi0gICAgICAgICAgICAgICAgICAgIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aAotICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICggYk5lZWRFbmNyeXB0aW9uICYmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkgKSB7Ci0gICAgICAgIHBDb250ZXh0LT5iQm9vbEluVXNlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBieVBrdFR5cCA9ICh1OClwRGV2aWNlLT5ieVBhY2tldFR5cGU7Ci0KLSAgICBpZiAocERldmljZS0+YkZpeFJhdGUpIHsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFCKSB7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID49IFJBVEVfMTFNKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV8xMU07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1MTYpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUJCVHlwZSA9PSBCQl9UWVBFXzExQSkgJiYKLSAgICAgICAgICAgICAgICAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlIDw9IFJBVEVfNk0pKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV82TTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA+PSBSQVRFXzU0TSkKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV81NE07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAodTE2KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53VHhEYXRhUmF0ZTsKLSAgICB9Ci0KLSAgICBpZiAod0tlZXBSYXRlICE9IHBEZXZpY2UtPndDdXJyZW50UmF0ZSkgewotCWJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwgV0xBTl9DTURfU0VUUE9XRVIsIE5VTEwpOwotICAgIH0KLQotICAgIGlmIChwRGV2aWNlLT53Q3VycmVudFJhdGUgPD0gUkFURV8xMU0pCi0gICAgICAgIGJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFCOwotCi0gICAgQnl0ZXNUb1dyaXRlID0gdURhdGFMZW4gKyBFVEhfRkNTX0xFTjsKLQotICAgIC8vIENvbnZlcnQgdGhlIHBhY2tldCB0byBhbiB1c2IgZnJhbWUgYW5kIGNvcHkgaW50byBvdXIgYnVmZmVyCi0gICAgLy8gYW5kIHNlbmQgdGhlIGlycC4KLQotCXBUWF9CdWZmZXIgPSAoc3RydWN0IHZudF90eF9idWZmZXIgKikmcENvbnRleHQtPkRhdGFbMF07Ci0KLSAgICBmQ29udmVydGVkUGFja2V0ID0gc19iUGFja2V0VG9XaXJlbGVzc1VzYihwRGV2aWNlLCBieVBrdFR5cGUsCi0JCQlwVFhfQnVmZmVyLCBiTmVlZEVuY3J5cHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdURhdGFMZW4sIFRZUEVfQUMwRE1BLCAmcERldmljZS0+c1R4RXRoSGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBieVNrYkRhdGEsIHBUcmFuc21pdEtleSwgdU5vZGVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJnVIZWFkZXJMZW4sICZCeXRlc1RvV3JpdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBpZiAoZkNvbnZlcnRlZFBhY2tldCA9PSBmYWxzZSkgewotICAgICAgICBwQ29udGV4dC0+YkJvb2xJblVzZSA9IGZhbHNlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcFRYX0J1ZmZlci0+YnlQS1ROTyA9ICh1OCkgKCgocERldmljZS0+d0N1cnJlbnRSYXRlPDw0KSAmMHgwMEYwKSB8ICgocERldmljZS0+d1NlcUNvdW50ZXIgLSAxKSAmIDB4MDAwRikpOwotICAgIHBUWF9CdWZmZXItPndUeEJ5dGVDb3VudCA9ICh1MTYpQnl0ZXNUb1dyaXRlOwotCi0gICAgcENvbnRleHQtPnBQYWNrZXQgPSBOVUxMOwotICAgIHBDb250ZXh0LT50eXBlID0gQ09OVEVYVF9EQVRBX1BBQ0tFVDsKLSAgICBwQ29udGV4dC0+dUJ1ZkxlbiA9ICh1MTYpQnl0ZXNUb1dyaXRlICsgNCA7IC8vVVNCIGhlYWRlcgotCi0gICAgc192U2F2ZVR4UGt0SW5mbyhwRGV2aWNlLCAodTgpKHBUWF9CdWZmZXItPmJ5UEtUTk8gJiAweDBGKSwKLQkJJnBEZXZpY2UtPnNUeEV0aEhlYWRlci5oX2Rlc3RbMF0sCi0JCSh1MTYpKEJ5dGVzVG9Xcml0ZSAtIHVIZWFkZXJMZW4pLAotCQlwVFhfQnVmZmVyLT5maWZvX2hlYWQud0ZJRk9DdGwpOwotCi0gICAgc3RhdHVzID0gUElQRW5zU2VuZEJ1bGtPdXQocERldmljZSxwQ29udGV4dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9yeHR4LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguaAppbmRleCA2ZDY1MzlkLi42ZGIzMzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguaApAQCAtMjE3LDE1ICsyMTcsMTUgQEAKIHN0cnVjdCB2bnRfdHhfZmlmb19oZWFkIHsKIAl1MzIgYWR3VHhLZXlbNF07CiAJdTE2IHdGSUZPQ3RsOwotCXUxNiB3VGltZVN0YW1wOworCV9fbGUxNiB0aW1lX3N0YW1wOwogCXUxNiB3RnJhZ0N0bDsKLQl1MTYgd1Jlc2VydmVkOworCV9fbGUxNiBjdXJyZW50X3JhdGU7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgdm50X3R4X2J1ZmZlciB7CiAJdTggYnlUeXBlOwogCXU4IGJ5UEtUTk87Ci0JdTE2IHdUeEJ5dGVDb3VudDsKKwlfX2xlMTYgdHhfYnl0ZV9jb3VudDsKIAlzdHJ1Y3Qgdm50X3R4X2ZpZm9faGVhZCBmaWZvX2hlYWQ7CiAJdW5pb24gdm50X3R4X2hlYWQgdHhfaGVhZDsKIH0gX19wYWNrZWQ7CkBAIC0yNDEsMTYgKzI0MSwxNCBAQAogc3RydWN0IHZudF9iZWFjb25fYnVmZmVyIHsKIAl1OCBieVR5cGU7CiAJdTggYnlQS1ROTzsKLQl1MTYgd1R4Qnl0ZUNvdW50OworCV9fbGUxNiB0eF9ieXRlX2NvdW50OwogCXN0cnVjdCB2bnRfdHhfc2hvcnRfYnVmX2hlYWQgc2hvcnRfaGVhZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7CiB9IF9fcGFja2VkOwogCiB2b2lkIHZETUEwX3R4XzgwMjExKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBuc0RNQV90eF9wYWNrZXQoc3RydWN0IHZudF9wcml2YXRlICosIHUzMiB1RE1BSWR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBuc0RNQV90eF9wYWNrZXQoc3RydWN0IHZudF9wcml2YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOwogQ01EX1NUQVRVUyBjc01nbXRfeG1pdChzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgc3RydWN0IHZudF90eF9tZ210ICopOwogQ01EX1NUQVRVUyBjc0JlYWNvbl94bWl0KHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCBzdHJ1Y3Qgdm50X3R4X21nbXQgKik7Ci1pbnQgYlJlbGF5UGFja2V0U2VuZChzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTggKnBieVNrYkRhdGEsIHUzMiB1RGF0YUxlbiwKLQl1MzIgdU5vZGVJbmRleCk7CiAKICNlbmRpZiAvKiBfX1JYVFhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3Nyb20uaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvc3JvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgxOTJkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvc3JvbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYsIDIwMDMgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoKLSAqIEZpbGU6IHNyb20uaAotICoKLSAqIFB1cnBvc2U6IEltcGxlbWVudCBmdW5jdGlvbnMgdG8gYWNjZXNzIGVlcHJvbQotICoKLSAqIEF1dGhvcjogSmVycnkgQ2hlbgotICoKLSAqIERhdGU6IEphbiAyOSwgMjAwMwotICoKLSAqLwotCi0jaWZuZGVmIF9fU1JPTV9IX18KLSNkZWZpbmUgX19TUk9NX0hfXwotCi0jZGVmaW5lIEVFUF9NQVhfQ09OVEVYVF9TSVpFICAgIDI1NgotCi0jZGVmaW5lIENCX0VFUFJPTV9SRUFEQllURV9XQUlUIDkwMCAgICAgLy91cwotCi0jZGVmaW5lIFdfTUFYX0kyQ1JFVFJZICAgICAgICAgIDB4MGZmZgotCi0vLwotLy8gQ29udGVudHMgaW4gdGhlIEVFUFJPTQotLy8KLSNkZWZpbmUgRUVQX09GU19QQVIgICAgICAgICAweDAwICAgICAgICAvLyBwaHlzaWNhbCBhZGRyZXNzCi0jZGVmaW5lIEVFUF9PRlNfQU5URU5OQSAgICAgMHgxNwotI2RlZmluZSBFRVBfT0ZTX1JBRElPQ1RMICAgIDB4MTgKLSNkZWZpbmUgRUVQX09GU19SRlRZUEUgICAgICAweDFCICAgICAgICAvLyBmb3Igc2VsZWN0IFJGCi0jZGVmaW5lIEVFUF9PRlNfTUlOQ0hBTk5FTCAgMHgxQyAgICAgICAgLy8gTWluIENoYW5uZWwgIwotI2RlZmluZSBFRVBfT0ZTX01BWENIQU5ORUwgIDB4MUQgICAgICAgIC8vIE1heCBDaGFubmVsICMKLSNkZWZpbmUgRUVQX09GU19TSUdOQVRVUkUgICAweDFFICAgICAgICAvLwotI2RlZmluZSBFRVBfT0ZTX1pPTkVUWVBFICAgIDB4MUYgICAgICAgIC8vCi0jZGVmaW5lIEVFUF9PRlNfUkZUQUJMRSAgICAgMHgyMCAgICAgICAgLy8gUkYgUE9XRVIgVEFCTEUKLSNkZWZpbmUgRUVQX09GU19QV1JfQ0NLICAgICAweDIwCi0jZGVmaW5lIEVFUF9PRlNfU0VUUFRfQ0NLICAgMHgyMQotI2RlZmluZSBFRVBfT0ZTX1BXUl9PRkRNRyAgIDB4MjMKLQotI2RlZmluZSBFRVBfT0ZTX0NBTElCX1RYX0lRIDB4MjQKLSNkZWZpbmUgRUVQX09GU19DQUxJQl9UWF9EQyAweDI1Ci0jZGVmaW5lIEVFUF9PRlNfQ0FMSUJfUlhfSVEgMHgyNgotCi0jZGVmaW5lIEVFUF9PRlNfTUFKT1JfVkVSIDB4MkUKLSNkZWZpbmUgRUVQX09GU19NSU5PUl9WRVIgMHgyRgotCi0jZGVmaW5lIEVFUF9PRlNfQ0NLX1BXUl9UQkwgICAgIDB4MzAKLSNkZWZpbmUgRUVQX09GU19PRkRNX1BXUl9UQkwgICAgMHg0MAotI2RlZmluZSBFRVBfT0ZTX09GRE1BX1BXUl9UQkwgICAweDUwCi0KLS8vCi0vLyBCaXRzIGluIEVFUF9PRlNfQU5URU5OQQotLy8KLSNkZWZpbmUgRUVQX0FOVEVOTkFfTUFJTiAgICAweDAxCi0jZGVmaW5lIEVFUF9BTlRFTk5BX0FVWCAgICAgMHgwMgotI2RlZmluZSBFRVBfQU5USU5WICAgICAgICAgIDB4MDQKLQotLy8KLS8vIEJpdHMgaW4gRUVQX09GU19SQURJT0NUTAotLy8KLSNkZWZpbmUgRUVQX1JBRElPQ1RMX0VOQUJMRSAweDgwCi0KLS8vIEFUMjRDMDIgZWVwcm9tIGNvbnRlbnRzCi0vLyAgICAgIDIwNDggYml0cyA9IDI1NiBieXRlcyA9IDEyOCB3b3JkcwotLy8KLXR5cGVkZWYgc3RydWN0IHRhZ1NTcm9tUmVnIHsKLSAgICB1OCAgICBhYnlQQVJbNl07ICAgICAgICAgICAgICAgICAgLy8gMHgwMCAodTE2KQotCi0gICAgdTE2ICAgIHdTVUJfVklEOyAgICAgICAgICAgICAgICAgICAvLyAweDAzICh1MTYpCi0gICAgdTE2ICAgIHdTVUJfU0lEOwotCi0gICAgdTggICAgYnlCQ0ZHMDsgICAgICAgICAgICAgICAgICAgIC8vIDB4MDUgKHUxNikKLSAgICB1OCAgICBieUJDRkcxOwotCi0gICAgdTggICAgYnlGQ1IwOyAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDYgKHUxNikKLSAgICB1OCAgICBieUZDUjE7Ci0gICAgdTggICAgYnlQTUMwOyAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDcgKHUxNikKLSAgICB1OCAgICBieVBNQzE7Ci0gICAgdTggICAgYnlNQVhMQVQ7ICAgICAgICAgICAgICAgICAgIC8vIDB4MDggKHUxNikKLSAgICB1OCAgICBieU1JTkdOVDsKLSAgICB1OCAgICBieUNGRzA7ICAgICAgICAgICAgICAgICAgICAgLy8gMHgwOSAodTE2KQotICAgIHU4ICAgIGJ5Q0ZHMTsKLSAgICB1MTYgICAgd0NJU1BUUjsgICAgICAgICAgICAgICAgICAgIC8vIDB4MEEgKHUxNikKLSAgICB1MTYgICAgd1JzdjA7ICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MEIgKHUxNikKLSAgICB1MTYgICAgd1JzdjE7ICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MEMgKHUxNikKLSAgICB1OCAgICBieUJCUEFJUjsgICAgICAgICAgICAgICAgICAgLy8gMHgwRCAodTE2KQotICAgIHU4ICAgIGJ5UkZUWVBFOwotICAgIHU4ICAgIGJ5TWluQ2hhbm5lbDsgICAgICAgICAgICAgICAvLyAweDBFICh1MTYpCi0gICAgdTggICAgYnlNYXhDaGFubmVsOwotICAgIHU4ICAgIGJ5U2lnbmF0dXJlOyAgICAgICAgICAgICAgICAvLyAweDBGICh1MTYpCi0gICAgdTggICAgYnlDaGVja1N1bTsKLQotICAgIHU4ICAgIGFieVJlc2VydmVkMFs5Nl07ICAgICAgICAgICAvLyAweDEwICh1MTYpCi0gICAgdTggICAgYWJ5Q0lTWzEyOF07ICAgICAgICAgICAgICAgIC8vIDB4ODAgKHUxNikKLX0gU1Nyb21SZWcsICpQU1Nyb21SZWc7Ci0KLSNlbmRpZiAvKiBfX0VFUFJPTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGNyYy5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90Y3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjlmMjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90Y3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBWSUEgTmV0d29ya2luZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoKLSAqIEZpbGU6IHRjcmMuYwotICoKLSAqIFB1cnBvc2U6IEltcGxlbWVudCBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIENSQwotICoKLSAqIEF1dGhvcjogVGV2aW4gQ2hlbgotICoKLSAqIERhdGU6IE1heSAyMSwgMTk5NgotICoKLSAqIEZ1bmN0aW9uczoKLSAqICAgICAgQ1JDZHdDcmMzMiAtCi0gKiAgICAgIENSQ2R3R2V0Q3JjMzIgLQotICogICAgICBDUkNkd0dldENyYzMyRXggLQotICoKLSAqIFJldmlzaW9uIEhpc3Rvcnk6Ci0gKgotICovCi0KLSNpbmNsdWRlICJ0Y3JjLmgiCi0KLS8qIDMyLWJpdCBDUkMgdGFibGUgKi8KLXN0YXRpYyBjb25zdCB1MzIgc19hZHdDcmMzMlRhYmxlWzI1Nl0gPSB7Ci0gICAgMHgwMDAwMDAwMEwsIDB4NzcwNzMwOTZMLCAweEVFMEU2MTJDTCwgMHg5OTA5NTFCQUwsCi0gICAgMHgwNzZEQzQxOUwsIDB4NzA2QUY0OEZMLCAweEU5NjNBNTM1TCwgMHg5RTY0OTVBM0wsCi0gICAgMHgwRURCODgzMkwsIDB4NzlEQ0I4QTRMLCAweEUwRDVFOTFFTCwgMHg5N0QyRDk4OEwsCi0gICAgMHgwOUI2NEMyQkwsIDB4N0VCMTdDQkRMLCAweEU3QjgyRDA3TCwgMHg5MEJGMUQ5MUwsCi0gICAgMHgxREI3MTA2NEwsIDB4NkFCMDIwRjJMLCAweEYzQjk3MTQ4TCwgMHg4NEJFNDFERUwsCi0gICAgMHgxQURBRDQ3REwsIDB4NkREREU0RUJMLCAweEY0RDRCNTUxTCwgMHg4M0QzODVDN0wsCi0gICAgMHgxMzZDOTg1NkwsIDB4NjQ2QkE4QzBMLCAweEZENjJGOTdBTCwgMHg4QTY1QzlFQ0wsCi0gICAgMHgxNDAxNUM0RkwsIDB4NjMwNjZDRDlMLCAweEZBMEYzRDYzTCwgMHg4RDA4MERGNUwsCi0gICAgMHgzQjZFMjBDOEwsIDB4NEM2OTEwNUVMLCAweEQ1NjA0MUU0TCwgMHhBMjY3NzE3MkwsCi0gICAgMHgzQzAzRTREMUwsIDB4NEIwNEQ0NDdMLCAweEQyMEQ4NUZETCwgMHhBNTBBQjU2QkwsCi0gICAgMHgzNUI1QThGQUwsIDB4NDJCMjk4NkNMLCAweERCQkJDOUQ2TCwgMHhBQ0JDRjk0MEwsCi0gICAgMHgzMkQ4NkNFM0wsIDB4NDVERjVDNzVMLCAweERDRDYwRENGTCwgMHhBQkQxM0Q1OUwsCi0gICAgMHgyNkQ5MzBBQ0wsIDB4NTFERTAwM0FMLCAweEM4RDc1MTgwTCwgMHhCRkQwNjExNkwsCi0gICAgMHgyMUI0RjRCNUwsIDB4NTZCM0M0MjNMLCAweENGQkE5NTk5TCwgMHhCOEJEQTUwRkwsCi0gICAgMHgyODAyQjg5RUwsIDB4NUYwNTg4MDhMLCAweEM2MENEOUIyTCwgMHhCMTBCRTkyNEwsCi0gICAgMHgyRjZGN0M4N0wsIDB4NTg2ODRDMTFMLCAweEMxNjExREFCTCwgMHhCNjY2MkQzREwsCi0gICAgMHg3NkRDNDE5MEwsIDB4MDFEQjcxMDZMLCAweDk4RDIyMEJDTCwgMHhFRkQ1MTAyQUwsCi0gICAgMHg3MUIxODU4OUwsIDB4MDZCNkI1MUZMLCAweDlGQkZFNEE1TCwgMHhFOEI4RDQzM0wsCi0gICAgMHg3ODA3QzlBMkwsIDB4MEYwMEY5MzRMLCAweDk2MDlBODhFTCwgMHhFMTBFOTgxOEwsCi0gICAgMHg3RjZBMERCQkwsIDB4MDg2RDNEMkRMLCAweDkxNjQ2Qzk3TCwgMHhFNjYzNUMwMUwsCi0gICAgMHg2QjZCNTFGNEwsIDB4MUM2QzYxNjJMLCAweDg1NjUzMEQ4TCwgMHhGMjYyMDA0RUwsCi0gICAgMHg2QzA2OTVFREwsIDB4MUIwMUE1N0JMLCAweDgyMDhGNEMxTCwgMHhGNTBGQzQ1N0wsCi0gICAgMHg2NUIwRDlDNkwsIDB4MTJCN0U5NTBMLCAweDhCQkVCOEVBTCwgMHhGQ0I5ODg3Q0wsCi0gICAgMHg2MkREMURERkwsIDB4MTVEQTJENDlMLCAweDhDRDM3Q0YzTCwgMHhGQkQ0NEM2NUwsCi0gICAgMHg0REIyNjE1OEwsIDB4M0FCNTUxQ0VMLCAweEEzQkMwMDc0TCwgMHhENEJCMzBFMkwsCi0gICAgMHg0QURGQTU0MUwsIDB4M0REODk1RDdMLCAweEE0RDFDNDZETCwgMHhEM0Q2RjRGQkwsCi0gICAgMHg0MzY5RTk2QUwsIDB4MzQ2RUQ5RkNMLCAweEFENjc4ODQ2TCwgMHhEQTYwQjhEMEwsCi0gICAgMHg0NDA0MkQ3M0wsIDB4MzMwMzFERTVMLCAweEFBMEE0QzVGTCwgMHhERDBEN0NDOUwsCi0gICAgMHg1MDA1NzEzQ0wsIDB4MjcwMjQxQUFMLCAweEJFMEIxMDEwTCwgMHhDOTBDMjA4NkwsCi0gICAgMHg1NzY4QjUyNUwsIDB4MjA2Rjg1QjNMLCAweEI5NjZENDA5TCwgMHhDRTYxRTQ5RkwsCi0gICAgMHg1RURFRjkwRUwsIDB4MjlEOUM5OThMLCAweEIwRDA5ODIyTCwgMHhDN0Q3QThCNEwsCi0gICAgMHg1OUIzM0QxN0wsIDB4MkVCNDBEODFMLCAweEI3QkQ1QzNCTCwgMHhDMEJBNkNBREwsCi0gICAgMHhFREI4ODMyMEwsIDB4OUFCRkIzQjZMLCAweDAzQjZFMjBDTCwgMHg3NEIxRDI5QUwsCi0gICAgMHhFQUQ1NDczOUwsIDB4OUREMjc3QUZMLCAweDA0REIyNjE1TCwgMHg3M0RDMTY4M0wsCi0gICAgMHhFMzYzMEIxMkwsIDB4OTQ2NDNCODRMLCAweDBENkQ2QTNFTCwgMHg3QTZBNUFBOEwsCi0gICAgMHhFNDBFQ0YwQkwsIDB4OTMwOUZGOURMLCAweDBBMDBBRTI3TCwgMHg3RDA3OUVCMUwsCi0gICAgMHhGMDBGOTM0NEwsIDB4ODcwOEEzRDJMLCAweDFFMDFGMjY4TCwgMHg2OTA2QzJGRUwsCi0gICAgMHhGNzYyNTc1REwsIDB4ODA2NTY3Q0JMLCAweDE5NkMzNjcxTCwgMHg2RTZCMDZFN0wsCi0gICAgMHhGRUQ0MUI3NkwsIDB4ODlEMzJCRTBMLCAweDEwREE3QTVBTCwgMHg2N0RENEFDQ0wsCi0gICAgMHhGOUI5REY2RkwsIDB4OEVCRUVGRjlMLCAweDE3QjdCRTQzTCwgMHg2MEIwOEVENUwsCi0gICAgMHhENkQ2QTNFOEwsIDB4QTFEMTkzN0VMLCAweDM4RDhDMkM0TCwgMHg0RkRGRjI1MkwsCi0gICAgMHhEMUJCNjdGMUwsIDB4QTZCQzU3NjdMLCAweDNGQjUwNkRETCwgMHg0OEIyMzY0QkwsCi0gICAgMHhEODBEMkJEQUwsIDB4QUYwQTFCNENMLCAweDM2MDM0QUY2TCwgMHg0MTA0N0E2MEwsCi0gICAgMHhERjYwRUZDM0wsIDB4QTg2N0RGNTVMLCAweDMxNkU4RUVGTCwgMHg0NjY5QkU3OUwsCi0gICAgMHhDQjYxQjM4Q0wsIDB4QkM2NjgzMUFMLCAweDI1NkZEMkEwTCwgMHg1MjY4RTIzNkwsCi0gICAgMHhDQzBDNzc5NUwsIDB4QkIwQjQ3MDNMLCAweDIyMDIxNkI5TCwgMHg1NTA1MjYyRkwsCi0gICAgMHhDNUJBM0JCRUwsIDB4QjJCRDBCMjhMLCAweDJCQjQ1QTkyTCwgMHg1Q0IzNkEwNEwsCi0gICAgMHhDMkQ3RkZBN0wsIDB4QjVEMENGMzFMLCAweDJDRDk5RThCTCwgMHg1QkRFQUUxREwsCi0gICAgMHg5QjY0QzJCMEwsIDB4RUM2M0YyMjZMLCAweDc1NkFBMzlDTCwgMHgwMjZEOTMwQUwsCi0gICAgMHg5QzA5MDZBOUwsIDB4RUIwRTM2M0ZMLCAweDcyMDc2Nzg1TCwgMHgwNTAwNTcxM0wsCi0gICAgMHg5NUJGNEE4MkwsIDB4RTJCODdBMTRMLCAweDdCQjEyQkFFTCwgMHgwQ0I2MUIzOEwsCi0gICAgMHg5MkQyOEU5QkwsIDB4RTVENUJFMERMLCAweDdDRENFRkI3TCwgMHgwQkRCREYyMUwsCi0gICAgMHg4NkQzRDJENEwsIDB4RjFENEUyNDJMLCAweDY4RERCM0Y4TCwgMHgxRkRBODM2RUwsCi0gICAgMHg4MUJFMTZDREwsIDB4RjZCOTI2NUJMLCAweDZGQjA3N0UxTCwgMHgxOEI3NDc3N0wsCi0gICAgMHg4ODA4NUFFNkwsIDB4RkYwRjZBNzBMLCAweDY2MDYzQkNBTCwgMHgxMTAxMEI1Q0wsCi0gICAgMHg4RjY1OUVGRkwsIDB4Rjg2MkFFNjlMLCAweDYxNkJGRkQzTCwgMHgxNjZDQ0Y0NUwsCi0gICAgMHhBMDBBRTI3OEwsIDB4RDcwREQyRUVMLCAweDRFMDQ4MzU0TCwgMHgzOTAzQjNDMkwsCi0gICAgMHhBNzY3MjY2MUwsIDB4RDA2MDE2RjdMLCAweDQ5Njk0NzRETCwgMHgzRTZFNzdEQkwsCi0gICAgMHhBRUQxNkE0QUwsIDB4RDlENjVBRENMLCAweDQwREYwQjY2TCwgMHgzN0Q4M0JGMEwsCi0gICAgMHhBOUJDQUU1M0wsIDB4REVCQjlFQzVMLCAweDQ3QjJDRjdGTCwgMHgzMEI1RkZFOUwsCi0gICAgMHhCREJERjIxQ0wsIDB4Q0FCQUMyOEFMLCAweDUzQjM5MzMwTCwgMHgyNEI0QTNBNkwsCi0gICAgMHhCQUQwMzYwNUwsIDB4Q0RENzA2OTNMLCAweDU0REU1NzI5TCwgMHgyM0Q5NjdCRkwsCi0gICAgMHhCMzY2N0EyRUwsIDB4QzQ2MTRBQjhMLCAweDVENjgxQjAyTCwgMHgyQTZGMkI5NEwsCi0gICAgMHhCNDBCQkUzN0wsIDB4QzMwQzhFQTFMLCAweDVBMDVERjFCTCwgMHgyRDAyRUY4REwKLX07Ci0KLS8qKwotICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgR2VuZXJhdGUgYSBDUkMtMzIgZnJvbSB0aGUgZGF0YSBzdHJlYW0KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwYnlEYXRhICAgICAtIHRoZSBkYXRhIHN0cmVhbQotICogICAgICBjYkJ5dGUgICAgICAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmVhbQotICogICAgICBkd0NyY1NlZWQgICAtIFNlZWQgZm9yIENSQzMyCi0gKiAgT3V0OgotICogICAgICBub25lCi0gKgotICogUmV0dXJuIFZhbHVlOiBDUkMtMzIKLSAqCi0tKi8KLXUzMiBDUkNkd0NyYzMyKHU4ICogcGJ5RGF0YSwgdW5zaWduZWQgaW50IGNiQnl0ZSwgdTMyIGR3Q3JjU2VlZCkKLXsKLQl1MzIgZHdDcmM7Ci0KLQlkd0NyYyA9IGR3Q3JjU2VlZDsKLQl3aGlsZSAoY2JCeXRlLS0pIHsKLQkJZHdDcmMgPSBzX2Fkd0NyYzMyVGFibGVbKHU4KSgoZHdDcmMgXiAoKnBieURhdGEpKSAmIDB4RkYpXSBeCi0JCQkoZHdDcmMgPj4gOCk7Ci0JCXBieURhdGErKzsKLQl9Ci0KLQlyZXR1cm4gZHdDcmM7Ci19Ci0KLS8qKwotICoKLSAqIERlc2NyaXB0aW9uOgotICogVG8gdGVzdCBDUkMgZ2VuZXJhdG9yLCBpbnB1dCA4IGJ5dGVzIHBhY2tldAotICogICAgICAtLSAweGZmIDB4ZmYgMHhmZiAweGZmIDB4MDAgMHgwMCAweDAwIDB4MDAKLSAqIHRoZSBnZW5lcmF0ZWQgQ1JDIHNob3VsZCBiZQotICogICAgICAtLSAweGZmIDB4ZmYgMHhmZiAweGZmCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcGJ5RGF0YSAgICAgLSB0aGUgZGF0YSBzdHJlYW0KLSAqICAgICAgY2JCeXRlICAgICAgLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJlYW0KLSAqICBPdXQ6Ci0gKiAgICAgIG5vbmUKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IENSQy0zMgotICoKLS0qLwotdTMyIENSQ2R3R2V0Q3JjMzIodTggKiBwYnlEYXRhLCB1bnNpZ25lZCBpbnQgY2JCeXRlKQotewotICAgIHJldHVybiB+Q1JDZHdDcmMzMihwYnlEYXRhLCBjYkJ5dGUsIDB4RkZGRkZGRkZMKTsKLX0KLQotLyorCi0gKgotICogRGVzY3JpcHRpb246Ci0gKgotICogTk9URS4uLi4gQmVjYXVzZSBDUkNkd0dldENyYzMyRXgoKSBpcyBhbiBpdGVyYXRpb24gZnVuY3Rpb24sCi0gKiAgICAgICAgICB0aGlzIG1lYW5zIHdlIHdpbGwgdXNlIHRoZSBvdXRwdXQgb2YgQ1JDZHdHZXRDcmMzMkV4KCkKLSAqICAgICAgICAgIHRvIGJlIGEgbmV3IGFyZ3VtZW50IHRvIGRvIG5leHQgQ1JDZHdHZXRDcmMzMkV4KCkgY2FsY3VsYXRpb24uCi0gKiAgICAgICAgICBUaHVzLCB0aGUgZmluYWwgcmVzdWx0IG11c3QgYmUgaW52ZXJ0ZWQgdG8gYmUgdGhlCi0gKiAgICAgICAgICBjb3JyZWN0IGFuc3dlci4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwYnlEYXRhICAgICAtIHRoZSBkYXRhIHN0cmVhbQotICogICAgICBjYkJ5dGUgICAgICAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmVhbQotICogIE91dDoKLSAqICAgICAgbm9uZQotICoKLSAqIFJldHVybiBWYWx1ZTogQ1JDLTMyCi0gKgotLSovCi11MzIgQ1JDZHdHZXRDcmMzMkV4KHU4ICogcGJ5RGF0YSwgdW5zaWduZWQgaW50IGNiQnl0ZSwgdTMyIGR3UHJlQ1JDKQotewotICAgIHJldHVybiBDUkNkd0NyYzMyKHBieURhdGEsIGNiQnl0ZSwgZHdQcmVDUkMpOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RjcmMuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjFmMzY4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBWSUEgTmV0d29ya2luZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoKLSAqIEZpbGU6IHRjcmMuaAotICoKLSAqIFB1cnBvc2U6IEltcGxlbWVudCBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIENSQwotICoKLSAqIEF1dGhvcjogVGV2aW4gQ2hlbgotICoKLSAqIERhdGU6IEphbi4gMjgsIDE5OTcKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1RDUkNfSF9fCi0jZGVmaW5lIF9fVENSQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXUzMiBDUkNkd0NyYzMyKHU4ICogcGJ5RGF0YSwgdW5zaWduZWQgaW50IGNiQnl0ZSwgdTMyIGR3Q3JjU2VlZCk7Ci11MzIgQ1JDZHdHZXRDcmMzMih1OCAqIHBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUpOwotdTMyIENSQ2R3R2V0Q3JjMzJFeCh1OCAqIHBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUsIHUzMiBkd1ByZUNSQyk7Ci0KLSNlbmRpZiAvKiBfX1RDUkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90ZXRoZXIuYwppbmRleCAxZGIxZTg0Li4yZWY1NGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGV0aGVyLmMKQEAgLTMzLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgInRtYWNyby5oIgotI2luY2x1ZGUgInRjcmMuaCIKICNpbmNsdWRlICJ0ZXRoZXIuaCIKIAogLyoKQEAgLTUxLDExICs1MCwxMSBAQAogICovCiBib29sIEVUSGJJc0J1ZmZlckNyYzMyT2sodTggKiBwYnlCdWZmZXIsIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoKQogewotCXUzMiBkd0NSQzsKKwl1MzIgbl9jcmMgPSB+ZXRoZXJfY3JjX2xlKGNiRnJhbWVMZW5ndGggLSA0LCBwYnlCdWZmZXIpOwogCi0JZHdDUkMgPSBDUkNkd0dldENyYzMyKHBieUJ1ZmZlciwgY2JGcmFtZUxlbmd0aCAtIDQpOwotCWlmIChjcHVfdG9fbGUzMigqKCh1MzIgKikocGJ5QnVmZmVyICsgY2JGcmFtZUxlbmd0aCAtIDQpKSkgIT0gZHdDUkMpCisJaWYgKGxlMzJfdG9fY3B1KCooKF9fbGUzMiAqKShwYnlCdWZmZXIgKyBjYkZyYW1lTGVuZ3RoIC0gNCkpKSAhPSBuX2NyYykKIAkJcmV0dXJuIGZhbHNlOworCiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGV0aGVyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5oCmluZGV4IGFlYzZiNTYuLmY1N2ZjZmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGV0aGVyLmgKQEAgLTYwLDggKzYwLDYgQEAKICNkZWZpbmUgVFlQRV9EQVRFX05VTEwgICAgICAweDQ4MDAKIAogI2RlZmluZSBUWVBFX0NUTF9QU1BPTEwgICAgIDB4YTQwMAotI2RlZmluZSBUWVBFX0NUTF9SVFMgICAgICAgIDB4YjQwMAotI2RlZmluZSBUWVBFX0NUTF9DVFMgICAgICAgIDB4YzQwMAogI2RlZmluZSBUWVBFX0NUTF9BQ0sgICAgICAgIDB4ZDQwMAogCiAjZWxzZSAvL2lmIExJVFRMRV9FTkRJQU4KQEAgLTkxLDggKzg5LDYgQEAKICNkZWZpbmUgVFlQRV9EQVRFX05VTEwgICAgICAweDAwNDgKIAogI2RlZmluZSBUWVBFX0NUTF9QU1BPTEwgICAgIDB4MDBhNAotI2RlZmluZSBUWVBFX0NUTF9SVFMgICAgICAgIDB4MDBiNAotI2RlZmluZSBUWVBFX0NUTF9DVFMgICAgICAgIDB4MDBjNAogI2RlZmluZSBUWVBFX0NUTF9BQ0sgICAgICAgIDB4MDBkNAogCiAjZW5kaWYgLy8jaWZkZWYgX19CSUdfRU5ESUFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdXNicGlwZS5jCmluZGV4IGM1ODM4ZDkuLmU0NzUxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdXNicGlwZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdXNicGlwZS5jCkBAIC0yNiwxMCArMjYsMTAgQEAKICAqIERhdGU6IE1hci4gMjksIDIwMDUKICAqCiAgKiBGdW5jdGlvbnM6Ci0gKiAgICAgIENPTlRST0xuc1JlcXVlc3RPdXQgLSBXcml0ZSB2YXJpYWJsZSBsZW5ndGggYnl0ZXMgdG8gTUVNL0JCL01BQy9FRVBST00KLSAqICAgICAgQ09OVFJPTG5zUmVxdWVzdEluIC0gUmVhZCB2YXJpYWJsZSBsZW5ndGggYnl0ZXMgZnJvbSBNRU0vQkIvTUFDL0VFUFJPTQotICogICAgICBDb250cm9sdldyaXRlQnl0ZSAtIFdyaXRlIG9uZSBieXRlIHRvIE1FTS9CQi9NQUMvRUVQUk9NCi0gKiAgICAgIENvbnRyb2x2UmVhZEJ5dGUgLSBSZWFkIG9uZSBieXRlIGZyb20gTUVNL0JCL01BQy9FRVBST00KKyAqCXZudF9jb250cm9sX291dCAtIFdyaXRlIHZhcmlhYmxlIGxlbmd0aCBieXRlcyB0byBNRU0vQkIvTUFDL0VFUFJPTQorICoJdm50X2NvbnRyb2xfaW4gLSBSZWFkIHZhcmlhYmxlIGxlbmd0aCBieXRlcyBmcm9tIE1FTS9CQi9NQUMvRUVQUk9NCisgKgl2bnRfY29udHJvbF9vdXRfdTggLSBXcml0ZSBvbmUgYnl0ZSB0byBNRU0vQkIvTUFDL0VFUFJPTQorICoJdm50X2NvbnRyb2xfaW5fdTggLSBSZWFkIG9uZSBieXRlIGZyb20gTUVNL0JCL01BQy9FRVBST00KICAqICAgICAgQ29udHJvbHZNYXNrQnl0ZSAtIFJlYWQgb25lIGJ5dGUgZnJvbSBNRU0vQkIvTUFDL0VFUFJPTSBhbmQgY2xlYXIvc2V0IHNvbWUgYml0cyBpbiB0aGUgc2FtZSBhZGRyZXNzCiAgKgogICogUmV2aXNpb24gSGlzdG9yeToKQEAgLTQxLDkgKzQxLDkgQEAKICNpbmNsdWRlICJpbnQuaCIKICNpbmNsdWRlICJyeHR4LmgiCiAjaW5jbHVkZSAiZHBjLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImRlc2MuaCIKICNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJ1c2JwaXBlLmgiCiAKIC8vZW5kcG9pbnQgZGVmCiAvL2VuZHBvaW50IDA6IGNvbnRyb2wKQEAgLTUxLDkgKzUxLDYgQEAKIC8vZW5kcG9pbnQgMjogcmVhZCBidWxrCiAvL2VuZHBvaW50IDM6IHdyaXRlIGJ1bGsKIAotLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7Ci1zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsKLQogI2RlZmluZSBVU0JfQ1RMX1dBSVQgICA1MDAgLy9tcwogCiAjaWZuZGVmIFVSQl9BU1lOQ19VTkxJTksKQEAgLTYzLDIyNiArNjAsNjEgQEAKIHN0YXRpYyB2b2lkIHNfbnNJbnRlcnJ1cHRVc2JJb0NvbXBsZXRlUmVhZChzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgc19uc0J1bGtJblVzYklvQ29tcGxldGVSZWFkKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBzX25zQnVsa091dElvQ29tcGxldGVXcml0ZShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgc19uc0NvbnRyb2xJblVzYklvQ29tcGxldGVSZWFkKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZCBzX25zQ29udHJvbEluVXNiSW9Db21wbGV0ZVdyaXRlKHN0cnVjdCB1cmIgKnVyYik7CiAKLWludCBQSVBFbnNDb250cm9sT3V0QXN5bihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5UmVxdWVzdCwKLQl1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LCB1MTYgd0xlbmd0aCwgdTggKnBieUJ1ZmZlcikKK2ludCB2bnRfY29udHJvbF9vdXQoc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsCisJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCwgdTggKmJ1ZmZlcikKIHsKLQlpbnQgbnRTdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAKLSAgICBpZiAocERldmljZS0+RmxhZ3MgJiBmTVBfRElTQ09OTkVDVEVEKQotICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJaWYgKHByaXYtPkZsYWdzICYgZk1QX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCi0gICAgaWYgKHBEZXZpY2UtPkZsYWdzICYgZk1QX0NPTlRST0xfV1JJVEVTKQotICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJbXV0ZXhfbG9jaygmcHJpdi0+dXNiX2xvY2spOwogCi0gICAgaWYgKGluX2ludGVycnVwdCgpKSB7Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iaW5faW50ZXJydXB0IHJldHVybiAuLmJ5UmVxdWVzdCAleFxuIiwgYnlSZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotICAgIH0KKwlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2cocHJpdi0+dXNiLAorCQl1c2Jfc25kY3RybHBpcGUocHJpdi0+dXNiLCAwKSwgcmVxdWVzdCwgMHg0MCwgdmFsdWUsCisJCQlpbmRleCwgYnVmZmVyLCBsZW5ndGgsIFVTQl9DVExfV0FJVCk7CiAKLSAgICBudFN0YXR1cyA9IHVzYl9jb250cm9sX21zZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT51c2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKHBEZXZpY2UtPnVzYiAsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5UmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwLCAvLyBSZXF1ZXN0VHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SW5kZXgsCi0JCQkgICAgKHZvaWQgKikgcGJ5QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSFoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBpZiAobnRTdGF0dXMgPj0gMCkgewotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInVzYl9zbmRjdHJscGlwZSBudFN0YXR1cz0gJWRcbiIsIG50U3RhdHVzKTsKLSAgICAgICAgbnRTdGF0dXMgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8idXNiX3NuZGN0cmxwaXBlIGZhaWwsIG50U3RhdHVzPSAlZFxuIiwgbnRTdGF0dXMpOwotICAgIH0KKwltdXRleF91bmxvY2soJnByaXYtPnVzYl9sb2NrKTsKIAotICAgIHJldHVybiBudFN0YXR1czsKKwlpZiAoc3RhdHVzIDwgKGludClsZW5ndGgpCisJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIAotaW50IFBJUEVuc0NvbnRyb2xPdXQoc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlLCB1OCBieVJlcXVlc3QsIHUxNiB3VmFsdWUsCi0JCXUxNiB3SW5kZXgsIHUxNiB3TGVuZ3RoLCB1OCAqcGJ5QnVmZmVyKQotCQlfX3JlbGVhc2VzKCZwRGV2aWNlLT5sb2NrKQotCQlfX2FjcXVpcmVzKCZwRGV2aWNlLT5sb2NrKQordm9pZCB2bnRfY29udHJvbF9vdXRfdTgoc3RydWN0IHZudF9wcml2YXRlICpwcml2LCB1OCByZWcsIHU4IHJlZ19vZmYsIHU4IGRhdGEpCiB7Ci0JaW50IG50U3RhdHVzID0gMDsKLQlpbnQgaWk7Ci0KLSAgICBpZiAocERldmljZS0+RmxhZ3MgJiBmTVBfRElTQ09OTkVDVEVEKQotICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0KLSAgICBpZiAocERldmljZS0+RmxhZ3MgJiBmTVBfQ09OVFJPTF9XUklURVMpCi0gICAgICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQotCWlmIChwRGV2aWNlLT5GbGFncyAmIGZNUF9DT05UUk9MX1JFQURTKQotCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0KLQlpZiAocERldmljZS0+cENvbnRyb2xVUkItPmhjcHJpdikKLQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCi0JTVBfU0VUX0ZMQUcocERldmljZSwgZk1QX0NPTlRST0xfV1JJVEVTKTsKLQotCXBEZXZpY2UtPnNVc2JDdGxSZXF1ZXN0LmJSZXF1ZXN0VHlwZSA9IDB4NDA7Ci0JcERldmljZS0+c1VzYkN0bFJlcXVlc3QuYlJlcXVlc3QgPSBieVJlcXVlc3Q7Ci0JcERldmljZS0+c1VzYkN0bFJlcXVlc3Qud1ZhbHVlID0gY3B1X3RvX2xlMTZwKCZ3VmFsdWUpOwotCXBEZXZpY2UtPnNVc2JDdGxSZXF1ZXN0LndJbmRleCA9IGNwdV90b19sZTE2cCgmd0luZGV4KTsKLQlwRGV2aWNlLT5zVXNiQ3RsUmVxdWVzdC53TGVuZ3RoID0gY3B1X3RvX2xlMTZwKCZ3TGVuZ3RoKTsKLQlwRGV2aWNlLT5wQ29udHJvbFVSQi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKLSAgICBwRGV2aWNlLT5wQ29udHJvbFVSQi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0gICAgLy8gTm90aWNlLCBwYnlCdWZmZXIgbGltaXRlZCBwb2ludCB0byB2YXJpYWJsZSBidWZmZXIsIGNhbid0IGJlIGNvbnN0YW50LgotICAJdXNiX2ZpbGxfY29udHJvbF91cmIocERldmljZS0+cENvbnRyb2xVUkIsIHBEZXZpY2UtPnVzYiwKLQkJCSB1c2Jfc25kY3RybHBpcGUocERldmljZS0+dXNiICwgMCksIChjaGFyICopICZwRGV2aWNlLT5zVXNiQ3RsUmVxdWVzdCwKLQkJCSBwYnlCdWZmZXIsIHdMZW5ndGgsIHNfbnNDb250cm9sSW5Vc2JJb0NvbXBsZXRlV3JpdGUsIHBEZXZpY2UpOwotCi0JbnRTdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwRGV2aWNlLT5wQ29udHJvbFVSQiwgR0ZQX0FUT01JQyk7Ci0JaWYgKG50U3RhdHVzICE9IDApIHsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJImNvbnRyb2wgc2VuZCByZXF1ZXN0IHN1Ym1pc3Npb24gZmFpbGVkOiAlZFxuIiwKLQkJCQludFN0YXR1cyk7Ci0JCU1QX0NMRUFSX0ZMQUcocERldmljZSwgZk1QX0NPTlRST0xfV1JJVEVTKTsKLQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDw9IFVTQl9DVExfV0FJVDsgaWkgKyspIHsKLQotCWlmIChwRGV2aWNlLT5GbGFncyAmIGZNUF9DT05UUk9MX1dSSVRFUykKLQkJbWRlbGF5KDEpOwotICAgICAgICBlbHNlCi0JCWJyZWFrOwotCi0gICAgICAgIGlmIChpaSA+PSBVU0JfQ1RMX1dBSVQpIHsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsCi0JCQlLRVJOX0lORk8gImNvbnRyb2wgc2VuZCByZXF1ZXN0IHN1Ym1pc3Npb24gdGltZW91dFxuIik7Ci0gICAgICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgICAgIE1QX0NMRUFSX0ZMQUcocERldmljZSwgZk1QX0NPTlRST0xfV1JJVEVTKTsKLSAgICAgICAgICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKLSAgICAgICAgfQotICAgIH0KLQlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKwl2bnRfY29udHJvbF9vdXQocHJpdiwgTUVTU0FHRV9UWVBFX1dSSVRFLAorCQkJCQlyZWdfb2ZmLCByZWcsIHNpemVvZih1OCksICZkYXRhKTsKIH0KIAotaW50IFBJUEVuc0NvbnRyb2xJbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKnBEZXZpY2UsIHU4IGJ5UmVxdWVzdCwgdTE2IHdWYWx1ZSwKLQl1MTYgd0luZGV4LCB1MTYgd0xlbmd0aCwgIHU4ICpwYnlCdWZmZXIpCi0JX19yZWxlYXNlcygmcERldmljZS0+bG9jaykKLQlfX2FjcXVpcmVzKCZwRGV2aWNlLT5sb2NrKQoraW50IHZudF9jb250cm9sX2luKHN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLAorCQl1MTYgaW5kZXgsIHUxNiBsZW5ndGgsIHU4ICpidWZmZXIpCiB7Ci0JaW50IG50U3RhdHVzID0gMDsKLQlpbnQgaWk7CisJaW50IHN0YXR1czsKIAotICAgIGlmIChwRGV2aWNlLT5GbGFncyAmIGZNUF9ESVNDT05ORUNURUQpCi0gICAgICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQotICAgIGlmIChwRGV2aWNlLT5GbGFncyAmIGZNUF9DT05UUk9MX1JFQURTKQotCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQotCWlmIChwRGV2aWNlLT5GbGFncyAmIGZNUF9DT05UUk9MX1dSSVRFUykKKwlpZiAocHJpdi0+RmxhZ3MgJiBmTVBfRElTQ09OTkVDVEVEKQogCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAKLQlpZiAocERldmljZS0+cENvbnRyb2xVUkItPmhjcHJpdikKKwltdXRleF9sb2NrKCZwcml2LT51c2JfbG9jayk7CisKKwlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2cocHJpdi0+dXNiLAorCQl1c2JfcmN2Y3RybHBpcGUocHJpdi0+dXNiLCAwKSwgcmVxdWVzdCwgMHhjMCwgdmFsdWUsCisJCQlpbmRleCwgYnVmZmVyLCBsZW5ndGgsIFVTQl9DVExfV0FJVCk7CisKKwltdXRleF91bmxvY2soJnByaXYtPnVzYl9sb2NrKTsKKworCWlmIChzdGF0dXMgPCAoaW50KWxlbmd0aCkKIAkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCi0JTVBfU0VUX0ZMQUcocERldmljZSwgZk1QX0NPTlRST0xfUkVBRFMpOwotCi0JcERldmljZS0+c1VzYkN0bFJlcXVlc3QuYlJlcXVlc3RUeXBlID0gMHhDMDsKLQlwRGV2aWNlLT5zVXNiQ3RsUmVxdWVzdC5iUmVxdWVzdCA9IGJ5UmVxdWVzdDsKLQlwRGV2aWNlLT5zVXNiQ3RsUmVxdWVzdC53VmFsdWUgPSBjcHVfdG9fbGUxNnAoJndWYWx1ZSk7Ci0JcERldmljZS0+c1VzYkN0bFJlcXVlc3Qud0luZGV4ID0gY3B1X3RvX2xlMTZwKCZ3SW5kZXgpOwotCXBEZXZpY2UtPnNVc2JDdGxSZXF1ZXN0LndMZW5ndGggPSBjcHVfdG9fbGUxNnAoJndMZW5ndGgpOwotCXBEZXZpY2UtPnBDb250cm9sVVJCLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOwotICAgIHBEZXZpY2UtPnBDb250cm9sVVJCLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQl1c2JfZmlsbF9jb250cm9sX3VyYihwRGV2aWNlLT5wQ29udHJvbFVSQiwgcERldmljZS0+dXNiLAotCQkJIHVzYl9yY3ZjdHJscGlwZShwRGV2aWNlLT51c2IgLCAwKSwgKGNoYXIgKikgJnBEZXZpY2UtPnNVc2JDdGxSZXF1ZXN0LAotCQkJIHBieUJ1ZmZlciwgd0xlbmd0aCwgc19uc0NvbnRyb2xJblVzYklvQ29tcGxldGVSZWFkLCBwRGV2aWNlKTsKLQotCW50U3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocERldmljZS0+cENvbnRyb2xVUkIsIEdGUF9BVE9NSUMpOwotCWlmIChudFN0YXR1cyAhPSAwKSB7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCSJjb250cm9sIHJlcXVlc3Qgc3VibWlzc2lvbiBmYWlsZWQ6ICVkXG4iLCBudFN0YXR1cyk7Ci0JCU1QX0NMRUFSX0ZMQUcocERldmljZSwgZk1QX0NPTlRST0xfUkVBRFMpOwotCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICBmb3IgKGlpID0gMDsgaWkgPD0gVVNCX0NUTF9XQUlUOyBpaSArKykgewotCi0JaWYgKHBEZXZpY2UtPkZsYWdzICYgZk1QX0NPTlRST0xfUkVBRFMpCi0JCW1kZWxheSgxKTsKLQllbHNlCi0JCWJyZWFrOwotCi0JaWYgKGlpID49IFVTQl9DVExfV0FJVCkgewotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywKLQkJCUtFUk5fSU5GTyAiY29udHJvbCByY3YgcmVxdWVzdCBzdWJtaXNzaW9uIHRpbWVvdXRcbiIpOwotICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgICAgICBNUF9DTEVBUl9GTEFHKHBEZXZpY2UsIGZNUF9DT05UUk9MX1JFQURTKTsKLSAgICAgICAgICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKLSAgICAgICAgfQotICAgIH0KLQlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotICAgIHJldHVybiBudFN0YXR1czsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lkIHNfbnNDb250cm9sSW5Vc2JJb0NvbXBsZXRlV3JpdGUoc3RydWN0IHVyYiAqdXJiKQordm9pZCB2bnRfY29udHJvbF9pbl91OChzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYsIHU4IHJlZywgdTggcmVnX29mZiwgdTggKmRhdGEpCiB7Ci0Jc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlID0gKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKLQotCXBEZXZpY2UgPSB1cmItPmNvbnRleHQ7Ci0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSAtRUlOUFJPR1JFU1M6Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iY3RybCB3cml0ZSB1cmIgc3RhdHVzIEVJTlBST0dSRVNTJWRcbiIsIHVyYi0+c3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PRU5UOgotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImN0cmwgd3JpdGUgdXJiIHN0YXR1cyBFTk9FTlQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJjdHJsIHdyaXRlIHVyYiBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKLQl9Ci0KLSAgICBNUF9DTEVBUl9GTEFHKHBEZXZpY2UsIGZNUF9DT05UUk9MX1dSSVRFUyk7Ci19Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgQ29tcGxldGUgZnVuY3Rpb24gb2YgdXNiIENvbnRyb2wgY2FsbGJhY2sKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBwRGV2aWNlICAgICAtIFBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIKLSAqCi0gKiAgT3V0OgotICogICAgICBub25lCi0gKgotICogUmV0dXJuIFZhbHVlOiBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBvciByZXN1bHQgb2YgSW9DYWxsRHJpdmVyCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHNfbnNDb250cm9sSW5Vc2JJb0NvbXBsZXRlUmVhZChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IHZudF9wcml2YXRlICpwRGV2aWNlID0gKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCWJyZWFrOwotCWNhc2UgLUVJTlBST0dSRVNTOgotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImN0cmwgcmVhZCB1cmIgc3RhdHVzIEVJTlBST0dSRVNTJWRcbiIsIHVyYi0+c3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PRU5UOgotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImN0cmwgcmVhZCB1cmIgc3RhdHVzID0gRU5PRU5UICVkXG4iLCB1cmItPnN0YXR1cyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iY3RybCByZWFkIHVyYiBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKLQl9Ci0KLSAgICBNUF9DTEVBUl9GTEFHKHBEZXZpY2UsIGZNUF9DT05UUk9MX1JFQURTKTsKKwl2bnRfY29udHJvbF9pbihwcml2LCBNRVNTQUdFX1RZUEVfUkVBRCwKKwkJCXJlZ19vZmYsIHJlZywgc2l6ZW9mKHU4KSwgZGF0YSk7CiB9CiAKIC8qCkBAIC0zMDMsOSArMTM1LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7CiAKLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCi0JCQkiLS0tLT5zX25zU3RhcnRJbnRlcnJ1cHRVc2JSZWFkKClcbiIpOwotCiAJaWYgKHByaXYtPmludF9idWYuaW5fdXNlID09IHRydWUpCiAJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKIApAQCAtMzIyLDE0ICsxNTEsMTAgQEAKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnBJbnRlcnJ1cHRVUkIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJIlN1Ym1pdCBpbnQgVVJCIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJZGV2X2RiZygmcHJpdi0+dXNiLT5kZXYsICJTdWJtaXQgaW50IFVSQiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CiAJCXByaXYtPmludF9idWYuaW5fdXNlID0gZmFsc2U7CiAJfQogCi0JREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkiPC0tLS1zX25zU3RhcnRJbnRlcnJ1cHRVc2JSZWFkIFJldHVybigleClcbiIsIHN0YXR1cyk7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNTMsOSArMTc4LDYgQEAKIAlzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1czsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCSItLS0tPnNfbnNJbnRlcnJ1cHRVc2JJb0NvbXBsZXRlUmVhZFxuIik7Ci0KIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgogCWNhc2UgLUVUSU1FRE9VVDoKQEAgLTM3MSwyMiArMTkzLDE3IEBACiAKIAlzdGF0dXMgPSB1cmItPnN0YXR1czsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJInNfbnNJbnRlcnJ1cHRVc2JJb0NvbXBsZXRlUmVhZCBTdGF0dXMgJWRcbiIsIHN0YXR1cyk7Ci0KIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAJCXByaXYtPmludF9idWYuaW5fdXNlID0gZmFsc2U7CiAKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJIkludFVTQklvQ29tcGxldGVDb250cm9sIFNUQVRVUyA9ICVkXG4iLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwcml2LT51c2ItPmRldiwgIiVzIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAl9IGVsc2UgewogCQlJTlRuc1Byb2Nlc3NEYXRhKHByaXYpOwogCX0KIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnBJbnRlcnJ1cHRVUkIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJIlN1Ym1pdCBpbnQgVVJCIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJZGV2X2RiZygmcHJpdi0+dXNiLT5kZXYsICJTdWJtaXQgaW50IFVSQiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+aW50X2J1Zi5pbl91c2UgPSB0cnVlOwogCX0KQEAgLTQxMywxNCArMjMwLDEyIEBACiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IHVyYiAqdXJiOwogCi0JREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tPnNfbnNTdGFydEJ1bGtJblVzYlJlYWRcbiIpOwotCiAJaWYgKHByaXYtPkZsYWdzICYgZk1QX0RJU0NPTk5FQ1RFRCkKIAkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCiAJdXJiID0gcmNiLT5wVXJiOwogCWlmIChyY2ItPnNrYiA9PSBOVUxMKSB7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icmNiLT5za2IgaXMgbnVsbFxuIik7CisJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAicmNiLT5za2IgaXMgbnVsbFxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC00MzQsOCArMjQ5LDcgQEAKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCQkiU3VibWl0IFJ4IFVSQiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiU3VibWl0IFJ4IFVSQiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBTVEFUVVNfRkFJTFVSRSA7CiAJfQogCkBAIC00NjQsMTAgKzI3OCw5IEBACiB7CiAJc3RydWN0IHZudF9yY2IgKnJjYiA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3Qgdm50X3ByaXZhdGUgKnByaXYgPSByY2ItPnBEZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmVfYWxsb2Nfc2tiID0gZmFsc2U7CiAKLQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0+c19uc0J1bGtJblVzYklvQ29tcGxldGVSZWFkXG4iKTsKLQogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCWJyZWFrOwpAQCAtNDc3LDI5ICsyOTAsMjkgQEAKIAkJcmV0dXJuOwogCWNhc2UgLUVUSU1FRE9VVDoKIAlkZWZhdWx0OgotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCi0JCQkJIkJVTEsgSW4gZmFpbGVkICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiQlVMSyBJbiBmYWlsZWQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAkJYnJlYWs7CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCWlmIChSWGJCdWxrSW5Qcm9jZXNzRGF0YShwcml2LCByY2IsIHVyYi0+YWN0dWFsX2xlbmd0aCkgPT0gdHJ1ZSkKIAkJCXJlX2FsbG9jX3NrYiA9IHRydWU7CiAKLQkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJcmNiLT5SZWYtLTsKIAlpZiAocmNiLT5SZWYgPT0gMCkgewotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlJ4dkZyZWVOb3JtYWwgJWRcbiIsCi0JCQkJCQkJcHJpdi0+TnVtUmVjdkZyZWVMaXN0KTsKLQkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwkJZGV2X2RiZygmcHJpdi0+dXNiLT5kZXYsCisJCQkJIlJ4dkZyZWVOb3JtYWwgJWRcbiIsIHByaXYtPk51bVJlY3ZGcmVlTGlzdCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCQlSWHZGcmVlUkNCKHJjYiwgcmVfYWxsb2Nfc2tiKTsKIAotCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm47CkBAIC01MjcsMjggKzM0MCwyNiBAQAogCiAJcHJpdi0+YlBXQml0T24gPSBmYWxzZTsKIAotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8ic19uc1NlbmRCdWxrT3V0XG4iKTsKLQogCWlmICghKE1QX0lTX1JFQURZKHByaXYpICYmIHByaXYtPkZsYWdzICYgZk1QX1BPU1RfV1JJVEVTKSkgewotCQljb250ZXh0LT5iQm9vbEluVXNlID0gZmFsc2U7CisJCWNvbnRleHQtPmluX3VzZSA9IGZhbHNlOwogCQlyZXR1cm4gU1RBVFVTX1JFU09VUkNFUzsKIAl9CiAKLQl1cmIgPSBjb250ZXh0LT5wVXJiOworCXVyYiA9IGNvbnRleHQtPnVyYjsKIAogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwKIAkJCXByaXYtPnVzYiwKIAkJCXVzYl9zbmRidWxrcGlwZShwcml2LT51c2IsIDMpLAotCQkJY29udGV4dC0+RGF0YSwKLQkJCWNvbnRleHQtPnVCdWZMZW4sCisJCQljb250ZXh0LT5kYXRhLAorCQkJY29udGV4dC0+YnVmX2xlbiwKIAkJCXNfbnNCdWxrT3V0SW9Db21wbGV0ZVdyaXRlLAogCQkJY29udGV4dCk7CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMgIT0gMCkgewotCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPCi0JCQkJIlN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCBzdGF0dXMpOwotCQljb250ZXh0LT5iQm9vbEluVXNlID0gZmFsc2U7CisJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisKKwkJY29udGV4dC0+aW5fdXNlID0gZmFsc2U7CiAJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKIAl9CiAKQEAgLTU4NiwyNSArMzk3LDIxIEBACiBzdGF0aWMgdm9pZCBzX25zQnVsa091dElvQ29tcGxldGVXcml0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHZudF91c2Jfc2VuZF9jb250ZXh0ICpjb250ZXh0ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB2bnRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRleHQtPnBEZXZpY2U7CisJc3RydWN0IHZudF9wcml2YXRlICpwcml2ID0gY29udGV4dC0+cHJpdjsKIAl1OCBjb250ZXh0X3R5cGUgPSBjb250ZXh0LT50eXBlOwogCi0JREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tPnNfbnNCdWxrT3V0SW9Db21wbGV0ZVdyaXRlXG4iKTsKLQogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6Ci0JCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCSJXcml0ZSAlZCBieXRlc1xuIiwgY29udGV4dC0+dUJ1Zkxlbik7CisJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LCAiV3JpdGUgJWQgYnl0ZXNcbiIsIGNvbnRleHQtPmJ1Zl9sZW4pOwogCQlicmVhazsKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FU0hVVERPV046Ci0JCWNvbnRleHQtPmJCb29sSW5Vc2UgPSBmYWxzZTsKKwkJY29udGV4dC0+aW5fdXNlID0gZmFsc2U7CiAJCXJldHVybjsKIAljYXNlIC1FVElNRURPVVQ6CiAJZGVmYXVsdDoKLQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTwotCQkJCSJCVUxLIE91dCBmYWlsZWQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X2RiZygmcHJpdi0+dXNiLT5kZXYsICJCVUxLIE91dCBmYWlsZWQgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02MTIsMTEgKzQxOSwxMSBAQAogCQlyZXR1cm47CiAKIAlpZiAoQ09OVEVYVF9EQVRBX1BBQ0tFVCA9PSBjb250ZXh0X3R5cGUpIHsKLQkJaWYgKGNvbnRleHQtPnBQYWNrZXQgIT0gTlVMTCkgewotCQkJZGV2X2tmcmVlX3NrYl9pcnEoY29udGV4dC0+cFBhY2tldCk7Ci0JCQljb250ZXh0LT5wUGFja2V0ID0gTlVMTDsKLQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8KLQkJCQkidHggICVkIGJ5dGVzXG4iLCBjb250ZXh0LT51QnVmTGVuKTsKKwkJaWYgKGNvbnRleHQtPnNrYiAhPSBOVUxMKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShjb250ZXh0LT5za2IpOworCQkJY29udGV4dC0+c2tiID0gTlVMTDsKKwkJCWRldl9kYmcoJnByaXYtPnVzYi0+ZGV2LAorCQkJCQkidHggICVkIGJ5dGVzXG4iLCBjb250ZXh0LT5idWZfbGVuKTsKIAkJfQogCiAJCXByaXYtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwpAQCAtNjI3LDcgKzQzNCw3IEBACiAJCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CiAJfQogCi0JY29udGV4dC0+YkJvb2xJblVzZSA9IGZhbHNlOworCWNvbnRleHQtPmluX3VzZSA9IGZhbHNlOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuaAppbmRleCBmNTM3NzAzLi5lYTcxNzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuaApAQCAtMzIsMTIgKzMyLDExIEBACiAKICNpbmNsdWRlICJkZXZpY2UuaCIKIAotaW50IFBJUEVuc0NvbnRyb2xPdXQoc3RydWN0IHZudF9wcml2YXRlICosIHU4IGJ5UmVxdWVzdCwgdTE2IHdWYWx1ZSwKLQkJdTE2IHdJbmRleCwgdTE2IHdMZW5ndGgsIHU4ICpwYnlCdWZmZXIpOwotaW50IFBJUEVuc0NvbnRyb2xPdXRBc3luKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1OCBieVJlcXVlc3QsCi0JdTE2IHdWYWx1ZSwgdTE2IHdJbmRleCwgdTE2IHdMZW5ndGgsIHU4ICpwYnlCdWZmZXIpOwotaW50IFBJUEVuc0NvbnRyb2xJbihzdHJ1Y3Qgdm50X3ByaXZhdGUgKiwgdTggYnlSZXF1ZXN0LCB1MTYgd1ZhbHVlLAotCXUxNiB3SW5kZXgsIHUxNiB3TGVuZ3RoLCAgdTggKnBieUJ1ZmZlcik7CitpbnQgdm50X2NvbnRyb2xfb3V0KHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1OCwgdTE2LCB1MTYsIHUxNiwgdTggKik7CitpbnQgdm50X2NvbnRyb2xfaW4oc3RydWN0IHZudF9wcml2YXRlICosIHU4LCB1MTYsIHUxNiwgdTE2LCAgdTggKik7CisKK3ZvaWQgdm50X2NvbnRyb2xfb3V0X3U4KHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCB1OCwgdTgsIHU4KTsKK3ZvaWQgdm50X2NvbnRyb2xfaW5fdTgoc3RydWN0IHZudF9wcml2YXRlICosIHU4LCB1OCwgdTggKik7CiAKIGludCBQSVBFbnNJbnRlcnJ1cHRSZWFkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqKTsKIGludCBQSVBFbnNCdWxrSW5Vc2JSZWFkKHN0cnVjdCB2bnRfcHJpdmF0ZSAqLCBzdHJ1Y3Qgdm50X3JjYiAqcFJDQik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jCmluZGV4IDNjZjNmMjQuLmRhNzJkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jCkBAIC00OCwxMCArNDgsOSBAQAogI2luY2x1ZGUgInBvd2VyLmgiCiAjaW5jbHVkZSAid2N0bC5oIgogI2luY2x1ZGUgImJhc2ViYW5kLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInVzYnBpcGUuaCIKICNpbmNsdWRlICJyeHR4LmgiCiAjaW5jbHVkZSAicmYuaCIKLSNpbmNsdWRlICJybmRpcy5oIgogI2luY2x1ZGUgImNoYW5uZWwuaCIKICNpbmNsdWRlICJpb3dwYS5oIgogCkBAIC0yNzksNiArMjc4LDcgQEAKIAlpbnQgaWk7CiAJdTggYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OwogCXU4IGJ5RGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHBEZXZpY2UtPkZsYWdzICYgZk1QX0RJU0NPTk5FQ1RFRCkKIAkJcmV0dXJuOwpAQCAtMjg2LDggKzI4Niw2IEBACiAJaWYgKHBEZXZpY2UtPmJDbWRSdW5uaW5nICE9IHRydWUpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCiAJc3dpdGNoIChwRGV2aWNlLT5lQ29tbWFuZFN0YXRlKSB7CiAKIAljYXNlIFdMQU5fQ01EX1NDQU5fU1RBUlQ6CkBAIC0zNDYsMTEgKzM0NCwxMCBAQAogCQkJQ0FSRGJTZXRNZWRpYUNoYW5uZWwocERldmljZSwgcE1nbXQtPnVTY2FuQ2hhbm5lbCk7CiAJCQkvLyBTZXQgQmFzZWJhbmQgdG8gYmUgbW9yZSBzZW5zaXRpdmUuCiAKLQkJCWlmIChwRGV2aWNlLT5iVXBkYXRlQkJWR0EpIHsKLQkJCQlCQnZTZXRTaG9ydFNsb3RUaW1lKHBEZXZpY2UpOwotCQkJCUJCdlNldFZHQUdhaW5PZmZzZXQocERldmljZSwgcERldmljZS0+YWJ5QkJWR0FbMF0pOwotCQkJCUJCdlVwZGF0ZVByZUVEVGhyZXNob2xkKHBEZXZpY2UsIHRydWUpOwotCQkJfQorCQkJQkJ2U2V0U2hvcnRTbG90VGltZShwRGV2aWNlKTsKKwkJCUJCdlNldFZHQUdhaW5PZmZzZXQocERldmljZSwgcERldmljZS0+YWJ5QkJWR0FbMF0pOworCQkJQkJ2VXBkYXRlUHJlRURUaHJlc2hvbGQocERldmljZSwgdHJ1ZSk7CisKIAkJCXBNZ210LT51U2NhbkNoYW5uZWwrKzsKIAogCQkJd2hpbGUgKCFDaGFubmVsVmFsaWQocERldmljZS0+Ynlab25lVHlwZSwgcE1nbXQtPnVTY2FuQ2hhbm5lbCkgJiYKQEAgLTM2NSwxMSArMzYyLDkgQEAKIAkJCWlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gZmFsc2UpIHx8CiAJCQkgICAgKHBNZ210LT51U2NhbkNoYW5uZWwgPCBDQl9NQVhfQ0hBTk5FTF8yNEcpKSB7CiAJCQkJc192UHJvYmVDaGFubmVsKHBEZXZpY2UpOwotCQkJCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJCQkJdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKikgcERldmljZSwgMTAwKTsKIAkJCQlyZXR1cm47CiAJCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAJCQkJdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKikgcERldmljZSwgV0NNRF9QQVNTSVZFX1NDQU5fVElNRSk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtMzg1LDExICszODAsOSBAQAogCQkJQ0FSRHZTZXRCU1NNb2RlKHBEZXZpY2UpOwogCQl9CiAKLQkJaWYgKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgewotCQkJQkJ2U2V0U2hvcnRTbG90VGltZShwRGV2aWNlKTsKLQkJCUJCdlNldFZHQUdhaW5PZmZzZXQocERldmljZSwgcERldmljZS0+YnlCQlZHQUN1cnJlbnQpOwotCQkJQkJ2VXBkYXRlUHJlRURUaHJlc2hvbGQocERldmljZSwgZmFsc2UpOwotCQl9CisJCUJCdlNldFNob3J0U2xvdFRpbWUocERldmljZSk7CisJCUJCdlNldFZHQUdhaW5PZmZzZXQocERldmljZSwgcERldmljZS0+YnlCQlZHQUN1cnJlbnQpOworCQlCQnZVcGRhdGVQcmVFRFRocmVzaG9sZChwRGV2aWNlLCBmYWxzZSk7CiAKIAkJLy8gU2V0IGNoYW5uZWwgYmFjawogCQl2QWRIb2NCZWFjb25SZXN0YXJ0KHBEZXZpY2UpOwpAQCAtNDMzLDcgKzQyNiw5IEBACiAJCQkJCSAgICAgKDgpLAogCQkJCQkgICAgICZTdGF0dXMpOwogCQkJcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7Ci0JCQlDb250cm9sdk1hc2tCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIE1BQ19SRUdfUEFQRURFTEFZLCBMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CisKKwkJCXZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CisKIAkJCS8vIHVubG9jayBjb21tYW5kIGJ1c3kKIAkJCXBJdGVtU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlDdXJyU1NJRDsKIAkJCXBJdGVtU1NJRC0+bGVuID0gMDsKQEAgLTQ3OSw3ICs0NzQsOCBAQAogCQkJfQogCQkJbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwogCQkJcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7Ci0JCQlDb250cm9sdk1hc2tCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIE1BQ19SRUdfUEFQRURFTEFZLCBMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CisKKwkJCXZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CiAJCX0KIAkJLy8gc2V0IGluaXRpYWwgc3RhdGUKIAkJcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CkBAIC01MDQsNyArNTAwLDYgQEAKIAkJCQlwRGV2aWNlLT5ieUxpbmtXYWl0Q291bnQgPSAwOwogCQkJCXBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0FVVEhFTlRJQ0FURV9XQUlUOwogCQkJCXZDb21tYW5kVGltZXJXYWl0KCh2b2lkICopIHBEZXZpY2UsIEFVVEhFTlRJQ0FURV9USU1FT1VUKTsKLQkJCQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIFNldCBlQ29tbWFuZFN0YXRlID0gV0xBTl9BVVRIRU5USUNBVEVfV0FJVFxuIik7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNTE1LDcgKzUxMCw5IEBACiAJCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSkKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogCQkJCXBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7Ci0JCQkJQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBNQUNfUkVHX1BBUEVERUxBWSwgTEVEU1RTX1NUUywgTEVEU1RTX0lOVEVSKTsKKworCQkJCXZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLCBMRURTVFNfSU5URVIpOworCiAJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKIAkJCQlwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVJbkFjdGl2ZUNvdW50ID0gMDsKIAkJCX0gZWxzZSB7CkBAIC01NDYsNyArNTQzLDYgQEAKIAkJCQlzX2JDbGVhckJTU0lEX1NDQU4ocERldmljZSk7CiAvKgogCQkJCXBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7Ci0JCQkJQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsTUFDX1JFR19QQVBFREVMQVksTEVEU1RTX1NUUyxMRURTVFNfSU5URVIpOwogCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpewogCQkJCQluZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAJCQkJfQpAQCAtNTc4LDcgKzU3NCw2IEBACiAJCQkJcERldmljZS0+YnlMaW5rV2FpdENvdW50ID0gMDsKIAkJCQlwRGV2aWNlLT5lQ29tbWFuZFN0YXRlID0gV0xBTl9BU1NPQ0lBVEVfV0FJVDsKIAkJCQl2Q29tbWFuZFRpbWVyV2FpdCgodm9pZCAqKSBwRGV2aWNlLCBBU1NPQ0lBVEVfVElNRU9VVCk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0gZWxzZSBpZiAocE1nbXQtPmVDdXJyU3RhdGUgPCBXTUFDX1NUQVRFX0FVVEhQRU5ESU5HKSB7CkBAIC01ODcsNyArNTgyLDYgQEAKIAkJCS8vbWlrZSBhZGQ6d2FpdCBhbm90aGVyIDIgc2VjIGlmIGF1dGhlbnRpY2F0ZWRfZnJhbWUgZGVsYXkhCiAJCQlwRGV2aWNlLT5ieUxpbmtXYWl0Q291bnQrKzsKIAkJCXByaW50aygiV0xBTl9BVVRIRU5USUNBVEVfV0FJVDp3YWl0ICVkIHRpbWVzISFcbiIsIHBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCk7Ci0JCQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQkJdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKikgcERldmljZSwgQVVUSEVOVElDQVRFX1RJTUVPVVQvMik7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTYxMCw3ICs2MDQsOSBAQAogCQkJcERldmljZS0+YnlMaW5rV2FpdENvdW50ID0gMDsKIAkJCXBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKIAkJCXBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7Ci0JCQlDb250cm9sdk1hc2tCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIE1BQ19SRUdfUEFQRURFTEFZLCBMRURTVFNfU1RTLCBMRURTVFNfSU5URVIpOworCisJCQl2bnRfbWFjX3NldF9sZWQocERldmljZSwgTEVEU1RTX1NUUywgTEVEU1RTX0lOVEVSKTsKKwogCQkJc19iQ2xlYXJCU1NJRF9TQ0FOKHBEZXZpY2UpOwogCiAJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKQpAQCAtNjIyLDcgKzYxOCw2IEBACiAJCQkvL21pa2UgYWRkOndhaXQgYW5vdGhlciAyIHNlYyBpZiBhc3NvY2lhdGVkX2ZyYW1lIGRlbGF5IQogCQkJcERldmljZS0+YnlMaW5rV2FpdENvdW50Kys7CiAJCQlwcmludGsoIldMQU5fQVNTT0NJQVRFX1dBSVQ6d2FpdCAlZCB0aW1lcyEhXG4iLCBwRGV2aWNlLT5ieUxpbmtXYWl0Q291bnQpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAkJCXZDb21tYW5kVGltZXJXYWl0KCh2b2lkICopIHBEZXZpY2UsIEFTU09DSUFURV9USU1FT1VULzIpOwogCQkJcmV0dXJuOwogCQl9CkBAIC02MzcsMTEgKzYzMiwxMSBAQAogCQkJcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAJCQlwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX1NUQU5EQlk7CiAJCQlwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKLQkJCUNvbnRyb2x2TWFza0J5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgTUFDX1JFR19QQVBFREVMQVksIExFRFNUU19TVFMsIExFRFNUU19TTE9XKTsKLQkJCWlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9PSB0cnVlKQotCQkJCUJTU3ZDbGVhck5vZGVEQlRhYmxlKHBEZXZpY2UsIDEpOwotCQkJZWxzZQotCQkJCUJTU3ZDbGVhck5vZGVEQlRhYmxlKHBEZXZpY2UsIDApOworCisJCQl2bnRfbWFjX3NldF9sZWQocERldmljZSwgTEVEU1RTX1NUUywgTEVEU1RTX1NMT1cpOworCisJCQlCU1N2Q2xlYXJOb2RlREJUYWJsZShwRGV2aWNlLCAwKTsKKwogCQkJcERldmljZS0+dUFzc29jQ291bnQgPSAwOwogCQkJcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAJCQlwRGV2aWNlLT5iRml4UmF0ZSA9IGZhbHNlOwpAQCAtNjU5LDcgKzY1NCw5IEBACiAJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKQogCQkJCW5ldGlmX3dha2VfcXVldWUocERldmljZS0+ZGV2KTsKIAkJCXBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7Ci0JCQlDb250cm9sdk1hc2tCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIE1BQ19SRUdfUEFQRURFTEFZLCBMRURTVFNfU1RTLCBMRURTVFNfSU5URVIpOworCisJCQl2bnRfbWFjX3NldF9sZWQocERldmljZSwgTEVEU1RTX1NUUywgTEVEU1RTX0lOVEVSKTsKKwogCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwRGV2aWNlLT5zZWNvbmRfY2FsbGJhY2tfd29yaywgSFopOwogCQl9CiAJCWJyZWFrOwpAQCAtNjc1LDkgKzY3MiwxMyBAQAogCQkJCQlwRGV2aWNlLT5iTW9yZURhdGEgPSB0cnVlOwogCQkJCX0KIAotCQkJCWlmIChuc0RNQV90eF9wYWNrZXQocERldmljZSwgVFlQRV9BQzBETUEsIHNrYikgIT0gMCkKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcERldmljZS0+bG9jaywgZmxhZ3MpOworCisJCQkJaWYgKG5zRE1BX3R4X3BhY2tldChwRGV2aWNlLCBza2IpICE9IDApCiAJCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk11bHRpY2FzdCBwcyB0eCBmYWlsXG4iKTsKIAorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKKwogCQkJCXBNZ210LT5zTm9kZURCVGFibGVbMF0ud0VuUXVldWVDbnQtLTsKIAkJCX0KIAkJfQpAQCAtNjk4LDkgKzY5OSwxMyBAQAogCQkJCQkJcERldmljZS0+Yk1vcmVEYXRhID0gdHJ1ZTsKIAkJCQkJfQogCi0JCQkJCWlmIChuc0RNQV90eF9wYWNrZXQocERldmljZSwgVFlQRV9BQzBETUEsIHNrYikgIT0gMCkKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBEZXZpY2UtPmxvY2ssIGZsYWdzKTsKKworCQkJCQlpZiAobnNETUFfdHhfcGFja2V0KHBEZXZpY2UsIHNrYikgIT0gMCkKIAkJCQkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInN0YSBwcyB0eCBmYWlsXG4iKTsKIAorCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CisKIAkJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0ud0VuUXVldWVDbnQtLTsKIAkJCQkJLy8gY2hlY2sgaWYgc3RhIHBzIGVuYWJsZSwgd2FpdCBuZXh0IHBzcG9sbAogCQkJCQkvLyBpZiBzdGEgcHMgZGlzYWJsZSwgc2VuZCBhbGwgcGVuZGluZyBidWZmZXJzLgpAQCAtNzI5LDcgKzczNCw3IEBACiAJCQlpbnQgbnRTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKIAkJCXU4ICAgICAgICAgICAgYnlUbXA7CiAKLQkJCW50U3RhdHVzID0gQ09OVFJPTG5zUmVxdWVzdEluKHBEZXZpY2UsCisJCQludFN0YXR1cyA9IHZudF9jb250cm9sX2luKHBEZXZpY2UsCiAJCQkJCU1FU1NBR0VfVFlQRV9SRUFELAogCQkJCQlNQUNfUkVHX0dQSU9DVEwxLAogCQkJCQlNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLApAQCAtNzUyLDkgKzc1Nyw5IEBACiAKIAkJCQlwRGV2aWNlLT5ieUtleUluZGV4ID0gMDsKIAkJCQlwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBmYWxzZTsKLQkJCQlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCiAJCQkJS2V5dkluaXRUYWJsZShwRGV2aWNlLCAmcERldmljZS0+c0tleSk7Ci0JCQkJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CisKIAkJCQlwTWdtdC0+YnlDU1NQSyA9IEtFWV9DVExfTk9ORTsKIAkJCQlwTWdtdC0+YnlDU1NHSyA9IEtFWV9DVExfTk9ORTsKIApAQCAtNzk1LDE0ICs4MDAsMTcgQEAKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAJCQkJQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwogCQkJCU1BQ3ZSZWdCaXRzT24ocERldmljZSwgTUFDX1JFR19HUElPQ1RMMSwgR1BJTzNfSU5UTUQpOwotCQkJCUNvbnRyb2x2TWFza0J5dGUocERldmljZSwgTUVTU0FHRV9SRVFVRVNUX01BQ1JFRywgTUFDX1JFR19QQVBFREVMQVksIExFRFNUU19TVFMsIExFRFNUU19PRkYpOworCisJCQkJdm50X21hY19zZXRfbGVkKHBEZXZpY2UsIExFRFNUU19TVFMsIExFRFNUU19PRkYpOworCiAJCQkJcERldmljZS0+YkhXUmFkaW9PZmYgPSB0cnVlOwogCQkJfSBlbHNlIHsKIAkJCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBXTEFOX0NNRF9SQURJT19TVEFSVF9PTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuIik7CiAJCQkJcERldmljZS0+YkhXUmFkaW9PZmYgPSBmYWxzZTsKIAkJCQlDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKIAkJCQlNQUN2UmVnQml0c09mZihwRGV2aWNlLCBNQUNfUkVHX0dQSU9DVEwxLCBHUElPM19JTlRNRCk7Ci0JCQkJQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBNQUNfUkVHX1BBUEVERUxBWSwgTEVEU1RTX1NUUywgTEVEU1RTX09OKTsKKworCQkJCXZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLCBMRURTVFNfT04pOwogCQkJfQogCQl9CiAKQEAgLTgyNyw3ICs4MzUsOCBAQAogCiAJY2FzZSBXTEFOX0NNRF9TRVRQT1dFUl9TVEFSVDoKIAotCQlSRmJTZXRQb3dlcihwRGV2aWNlLCBwRGV2aWNlLT53Q3VycmVudFJhdGUsIHBNZ210LT51Q3VyckNoYW5uZWwpOworCQl2bnRfcmZfc2V0cG93ZXIocERldmljZSwgcERldmljZS0+d0N1cnJlbnRSYXRlLAorCQkJCQkJCXBNZ210LT51Q3VyckNoYW5uZWwpOwogCiAJCWJyZWFrOwogCkBAIC04NTMsMTAgKzg2MiwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgV0xBTl9DTURfTUFDX0RJU1BPV0VSU0FWSU5HX1NUQVJUOgotCQlDb250cm9sdlJlYWRCeXRlKHBEZXZpY2UsIE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsIE1BQ19SRUdfUFNDVEwsICZieURhdGEpOworCQl2bnRfY29udHJvbF9pbl91OChwRGV2aWNlLCBNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLCBNQUNfUkVHX1BTQ1RMLCAmYnlEYXRhKTsKIAkJaWYgKChieURhdGEgJiBQU0NUTF9QUykgIT0gMCkgewogCQkJLy8gZGlzYWJsZSBwb3dlciBzYXZpbmcgaHcgZnVuY3Rpb24KLQkJCUNPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKKwkJCXZudF9jb250cm9sX291dChwRGV2aWNlLAogCQkJCQlNRVNTQUdFX1RZUEVfRElTQUJMRV9QUywKIAkJCQkJMCwKIAkJCQkJMCwKQEAgLTg4Miw3ICs4OTEsNiBAQAogCiAJc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y3RsLmMKaW5kZXggODE0MzQyYy4uZWZkYzVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y3RsLmMKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgIHBDYWNoZUVudHJ5ID0gJihwQ2FjaGUtPmFzQ2FjaGVFbnRyeVt1SW5kZXhdKTsKICAgICAgICAgICAgIGlmICgocENhY2hlRW50cnktPndGbVNlcXVlbmNlID09IHBNQUNIZWFkZXItPnNlcV9jdHJsKSAmJgogCQlldGhlcl9hZGRyX2VxdWFsKHBDYWNoZUVudHJ5LT5hYnlBZGRyMiwgcE1BQ0hlYWRlci0+YWRkcjIpICYmCi0gICAgICAgICAgICAgICAgKExPQllURShwQ2FjaGVFbnRyeS0+d0ZyYW1lQ3RsKSA9PSBMT0JZVEUocE1BQ0hlYWRlci0+ZnJhbWVfY29udHJvbCkpCisJCShwQ2FjaGVFbnRyeS0+d0ZyYW1lQ3RsID09IHBNQUNIZWFkZXItPmZyYW1lX2NvbnRyb2wpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgLyogRHVwbGljYXRlIG1hdGNoICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5jCmluZGV4IDBkNjk3MTkuLjE4NzIzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5jCkBAIC03OCw4ICs3OCw3IEBACiAjaW5jbHVkZSAid3BhLmgiCiAjaW5jbHVkZSAicmYuaCIKICNpbmNsdWRlICJpb3dwYS5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKLSNpbmNsdWRlICJybmRpcy5oIgorI2luY2x1ZGUgInVzYnBpcGUuaCIKIAogc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9JTkZPOwogLy9zdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfREVCVUc7CkBAIC01NDEsMTAgKzU0MCw2IEBACiAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcwogICAgICAgICAgICAgICAgICk7CiAgICAgaWYgKHBUeFBhY2tldCAhPSBOVUxMICl7Ci0KLSAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgLyogc2VuZCB0aGUgZnJhbWUgKi8KICAgICAgICAgU3RhdHVzID0gY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KTsKICAgICAgICAgaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKQEAgLTY5MCw5ICs2ODUsNiBAQAogCiAgICAgaWYgKHBUeFBhY2tldCAhPSBOVUxMICl7CiAgICAgICAgIC8qIHNlbmQgdGhlIGZyYW1lICovCi0gICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIFN0YXR1cyA9IGNzTWdtdF94bWl0KHBEZXZpY2UsIHBUeFBhY2tldCk7CiAgICAgICAgIGlmIChTdGF0dXMgIT0gQ01EX1NUQVRVU19QRU5ESU5HKSB7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJNZ3Q6UmVBc3NvYyByZXNwb25zZSB0eCBmYWlsZWRcbiIpOwpAQCAtNzY0LDcgKzc1Niw4IEBACiAgICAgICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIkxpbmsgd2l0aCBBUChTU0lEKTogJXNcbiIsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7CiAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSB0cnVlOwotICAgICAgICAgICAgQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsTUFDX1JFR19QQVBFREVMQVksTEVEU1RTX1NUUyxMRURTVFNfSU5URVIpOworCisJICAgIHZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLCBMRURTVFNfSU5URVIpOwogCiAJLy9pZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IHRydWUpCiAJICAgewpAQCAtMTA3NSw5ICsxMDY4LDYgQEAKICAgICBwVHhQYWNrZXQtPmNiTVBEVUxlbiA9IHNGcmFtZS5sZW47CiAgICAgcFR4UGFja2V0LT5jYlBheWxvYWRMZW4gPSBzRnJhbWUubGVuIC0gV0xBTl9IRFJfQUREUjNfTEVOOwogICAgIC8vIHNlbmQgdGhlIGZyYW1lCi0gICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTWd0OkF1dGhyZXFfcmVwbHkgc2VxdWVuY2VfMSB0eC4uIFxuIik7CiAgICAgaWYgKGNzTWdtdF94bWl0KHBEZXZpY2UsIHBUeFBhY2tldCkgIT0gQ01EX1NUQVRVU19QRU5ESU5HKSB7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk1ndDpBdXRocmVxX3JlcGx5IHNlcXVlbmNlXzEgdHggZmFpbGVkLlxuIik7CkBAIC0xMjU3LDkgKzEyNDcsNiBAQAogICAgIHBUeFBhY2tldC0+Y2JNUERVTGVuID0gc0ZyYW1lLmxlbjsKICAgICBwVHhQYWNrZXQtPmNiUGF5bG9hZExlbiA9IHNGcmFtZS5sZW4gLSBXTEFOX0hEUl9BRERSM19MRU47CiAgICAgLy8gc2VuZCB0aGUgZnJhbWUKLSAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBpZiAoY3NNZ210X3htaXQocERldmljZSwgcFR4UGFja2V0KSAhPSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTWd0OkF1dGhyZXFfcmVwbHkgc2VxdWVuY2VfNCB0eCBmYWlsZWQuXG4iKTsKICAgICB9CkBAIC0xNDEyLDcgKzEzOTksOCBAQAogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgQ29udHJvbHZNYXNrQnl0ZShwRGV2aWNlLE1FU1NBR0VfUkVRVUVTVF9NQUNSRUcsTUFDX1JFR19QQVBFREVMQVksTEVEU1RTX1NUUyxMRURTVFNfU0xPVyk7CisKKwkJICAgIHZudF9tYWNfc2V0X2xlZChwRGV2aWNlLCBMRURTVFNfU1RTLCBMRURTVFNfU0xPVyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xODk3LDcgKzE4ODUsOSBAQAogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkN1cnJlbnQgSUJTUyBTdGF0ZTogW1N0YXJ0ZWRdLi4uLi4uLi50bzogW0pvaW50ZWRdIFxuIik7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0pPSU5URUQ7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBDb250cm9sdk1hc2tCeXRlKHBEZXZpY2UsTUVTU0FHRV9SRVFVRVNUX01BQ1JFRyxNQUNfUkVHX1BBUEVERUxBWSxMRURTVFNfU1RTLExFRFNUU19JTlRFUik7CisKKwkJdm50X21hY19zZXRfbGVkKHBEZXZpY2UsIExFRFNUU19TVFMsIExFRFNUU19JTlRFUik7CisKICAgICAgICAgICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKXsKICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgIH0KQEAgLTI1MDIsNyArMjQ5Miw5IEBACiAgICAgICAgICAgICAvLyBBZG9wdCBCU1Mgc3RhdGUgaW4gQWRhcHRlciBEZXZpY2UgT2JqZWN0CiAJICAgIHBEZXZpY2UtPm9wX21vZGUgPSBOTDgwMjExX0lGVFlQRV9BREhPQzsKICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7Ci0gICAgICAgICAgICBDb250cm9sdk1hc2tCeXRlKHBEZXZpY2UsTUVTU0FHRV9SRVFVRVNUX01BQ1JFRyxNQUNfUkVHX1BBUEVERUxBWSxMRURTVFNfU1RTLExFRFNUU19JTlRFUik7CisKKwkgICAgdm50X21hY19zZXRfbGVkKHBEZXZpY2UsIExFRFNUU19TVFMsIExFRFNUU19JTlRFUik7CisKICAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lELCBXTEFOX0JTU0lEX0xFTik7CiAKIAkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJKb2luIElCU1Mgb2s6JXBNXG4iLApAQCAtMjU3Miw3ICsyNTY0LDYgQEAKICAgICB9CiAKICAgICAvLyBJbml0IHRoZSBCU1MgaW5mb3JtYXRpb25zCi0gICAgcERldmljZS0+YkNDSyA9IHRydWU7CiAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gZmFsc2U7CiAgICAgTUFDdkRpc2FibGVQcm90ZWN0TUQocERldmljZSk7CiAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBmYWxzZTsKQEAgLTI2NTUsOCArMjY0Niw3IEBACiAgICAgcE1nbXQtPnVDdXJyQ2hhbm5lbCA9IHBDdXJyLT51Q2hhbm5lbDsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICI8LS0tLXNfYlN5bmNoQlNTIFNldCBDaGFubmVsIFslZF1cbiIsIHBDdXJyLT51Q2hhbm5lbCk7CiAKLSAgICBpZiAoKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgJiYKLSAgICAgICAgKHBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50ICE9IHBEZXZpY2UtPmFieUJCVkdBWzBdKSkgeworICAgIGlmIChwRGV2aWNlLT5ieUJCVkdBQ3VycmVudCAhPSBwRGV2aWNlLT5hYnlCQlZHQVswXSkgewogICAgICAgICBwRGV2aWNlLT5ieUJCVkdBQ3VycmVudCA9IHBEZXZpY2UtPmFieUJCVkdBWzBdOwogICAgICAgICBCQnZTZXRWR0FHYWluT2Zmc2V0KHBEZXZpY2UsIHBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50KTsKICAgICAgICAgQkJ2U2V0U2hvcnRTbG90VGltZShwRGV2aWNlKTsKQEAgLTI5MzIsMTYgKzI5MjIsNiBAQAogICAgICAgICAgICAgICgoUFdMQU5fSUVfU1VQUF9SQVRFUylwQ3VyckV4dFN1cHBSYXRlcyktPmxlbiArIFdMQU5fSUVIRFJfTEVOCiAgICAgICAgICAgICAgKTsKICAgICB9Ci0gICAgLy8gaG9zdGFwZCB3cGEvd3BhMiBJRQotICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQgPT0gdHJ1ZSkpIHsKLSAgICAgICAgIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQU5PTkUpIHsKLSAgICAgICAgICAgICBpZiAocE1nbXQtPndXUEFJRUxlbiAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgIHNGcmFtZS5wUlNOID0gKFBXTEFOX0lFX1JTTikoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKLSAgICAgICAgICAgICAgICAgbWVtY3B5KHNGcmFtZS5wUlNOLCBwTWdtdC0+YWJ5V1BBSUUsIHBNZ210LT53V1BBSUVMZW4pOwotICAgICAgICAgICAgICAgICBzRnJhbWUubGVuICs9IHBNZ210LT53V1BBSUVMZW47Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgIH0KIAogICAgIC8qIEFkanVzdCB0aGUgbGVuZ3RoIGZpZWxkcyAqLwogICAgIHBUeFBhY2tldC0+Y2JNUERVTGVuID0gc0ZyYW1lLmxlbjsKQEAgLTMwNTIsMTcgKzMwMzIsNiBAQAogICAgICAgICAgICAgICk7CiAgICAgfQogCi0gICAgLy8gaG9zdGFwZCB3cGEvd3BhMiBJRQotICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQgPT0gdHJ1ZSkpIHsKLSAgICAgICAgIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQU5PTkUpIHsKLSAgICAgICAgICAgICBpZiAocE1nbXQtPndXUEFJRUxlbiAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgIHNGcmFtZS5wUlNOID0gKFBXTEFOX0lFX1JTTikoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKLSAgICAgICAgICAgICAgICAgbWVtY3B5KHNGcmFtZS5wUlNOLCBwTWdtdC0+YWJ5V1BBSUUsIHBNZ210LT53V1BBSUVMZW4pOwotICAgICAgICAgICAgICAgICBzRnJhbWUubGVuICs9IHBNZ210LT53V1BBSUVMZW47Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgIH0KLQogICAgIC8vIEFkanVzdCB0aGUgbGVuZ3RoIGZpZWxkcwogICAgIHBUeFBhY2tldC0+Y2JNUERVTGVuID0gc0ZyYW1lLmxlbjsKICAgICBwVHhQYWNrZXQtPmNiUGF5bG9hZExlbiA9IHNGcmFtZS5sZW4gLSBXTEFOX0hEUl9BRERSM19MRU47CkBAIC00MDU4LDE0ICs0MDI3LDE0IEBACiAJc3RydWN0IHZudF9tYW5hZ2VyICpwTWdtdCkKIHsKIAlzdHJ1Y3Qgdm50X3R4X21nbXQgKnBUeFBhY2tldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAvLyAgICBwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPSBmYWxzZTsKLSAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgfHwgcERldmljZS0+YkVuYWJsZTgwMjF4KXsKLSAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19QUklWQUNZKDEpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyAmPSB+V0xBTl9TRVRfQ0FQX0lORk9fUFJJVkFDWSgxKTsKLSAgICB9CisJaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlKQorCQlwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1BSSVZBQ1koMSk7CisJZWxzZQorCQlwTWdtdC0+d0N1cnJDYXBJbmZvICY9IH5XTEFOX1NFVF9DQVBfSU5GT19QUklWQUNZKDEpOworCiAgICAgcFR4UGFja2V0ID0gc19NZ3JNYWtlQmVhY29uCiAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgcERldmljZSwKQEAgLTQwODQsOCArNDA1MywxMyBAQAogICAgICAgICAocE1nbXQtPmFieUN1cnJCU1NJRFswXSA9PSAwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY3NCZWFjb25feG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpOwotICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZSwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CisKKwljc0JlYWNvbl94bWl0KHBEZXZpY2UsIHBUeFBhY2tldCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwRGV2aWNlLT5sb2NrLCBmbGFncyk7CisKKwlNQUN2UmVnQml0c09uKHBEZXZpY2UsIE1BQ19SRUdfVENSLCBUQ1JfQVVUT0JDTlRYKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGFjdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhY3RsLmMKaW5kZXggZjRhOGE1Yy4uMGEwNjcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGFjdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYWN0bC5jCkBAIC0zOCw4ICszOCw3IEBACiAjaW5jbHVkZSAid21nci5oIgogI2luY2x1ZGUgImlvY21kLmgiCiAjaW5jbHVkZSAiaW93cGEuaCIKLSNpbmNsdWRlICJjb250cm9sLmgiCi0jaW5jbHVkZSAicm5kaXMuaCIKKyNpbmNsdWRlICJ1c2JwaXBlLmgiCiAjaW5jbHVkZSAicmYuaCIKIAogc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9JTkZPOwpAQCAtNjcsNyArNjYsNyBAQAogCXU2NCBLZXlSU0M7CiAJdTggYnlLZXlEZWNNb2RlID0gS0VZX0NUTF9XRVA7CiAJaW50IHJldCA9IDA7Ci0JaW50IHV1OworCXU4IHV1OwogCWludCBpaTsKIAogCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID4gV1BBX0FMR19DQ01QKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHguYwppbmRleCA3MDhjNWIwLi44NzBjZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHguYwpAQCAtNDksNyArNDksNyBAQAogCiAJLyogVGhlIFVSQiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQgKi8KIAlpZiAocFdiMzVUeC0+RVA0Vk1fc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKCJVUkIgc3VibWlzc2lvbiBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwVXJiLT5kZXYtPmRldiwgIlVSQiBzdWJtaXNzaW9uIGZhaWxlZFxuIik7CiAJCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fU1RPUDsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC05Niw3ICs5Niw3IEBACiAJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9SVU5OSU5HOwogCXJldHYgPSB1c2Jfc3VibWl0X3VyYihwVXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0diA8IDApIHsKLQkJcHJpbnRrKCJFUDQgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpOworCQlkZXZfZXJyKCZwVXJiLT5kZXYtPmRldiwgIkVQNCBUeCBJcnAgc2VuZGluZyBlcnJvclxuIik7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiAJLyogVGhlIFVyYiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQgKi8KIAlpZiAocFdiMzVUeC0+RVAyVk1fc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKCJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKTsKKwkJZGV2X2VycigmcFVyYi0+ZGV2LT5kZXYsICJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKTsKIAkJcFdiMzVUeC0+RVAydm1fc3RhdGUgPSBWTV9TVE9QOwogCQlnb3RvIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfcy5oCmluZGV4IDcxNWY4N2QuLmRjMTIwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X3MuaApAQCAtMTIsNyArMTIsNyBAQAogLyogSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZSAqLwogc3RydWN0IHdiMzVfdHggewogCS8qIEZvciBUeCBidWZmZXIgKi8KLQl1OAlUeEJ1ZmZlclsgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSIF1bIE1BWF9VU0JfVFhfQlVGRkVSIF07CisJdTgJVHhCdWZmZXJbTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSXVtNQVhfVVNCX1RYX0JVRkZFUl07CiAKIAkvKiBGb3IgSW50ZXJydXB0IHBpcGUgKi8KIAl1OAlFUDJfYnVmW01BWF9JTlRFUlJVUFRfTEVOR1RIXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3ByaXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3ByaXYuYwppbmRleCA0MWYzMzI0Li5hZmY5MjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wcml2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcHJpdi5jCkBAIC0xNzksOCArMTc5LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgd3ZsYW5fdWlsX2Nvbm5lY3Qoc3RydWN0IHVpbHJlcSAqdXJxLCBzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHApCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KIAlpZiAoIShscC0+ZmxhZ3MgJiBXVkxBTjJfVUlMX0NPTk5FQ1RFRCkpIHsKIAkJbHAtPmZsYWdzIHw9IFdWTEFOMl9VSUxfQ09OTkVDVEVEOwogCQl1cnEtPmhjZkN0eCA9ICYobHAtPmhjZkN0eCk7CkBAIC0xOTAsNyArMTg4LDcgQEAKIAkJdXJxLT5yZXN1bHQgPSBVSUxfRVJSX0lOX1VTRTsKIAl9CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfSAvKiB3dmxhbl91aWxfY29ubmVjdCAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMjE4LDggKzIxNiw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IHd2bGFuX3VpbF9kaXNjb25uZWN0KHN0cnVjdCB1aWxyZXEgKnVycSwgc3RydWN0IHdsX3ByaXZhdGUgKmxwKQogewotCWludCByZXN1bHQgPSAwOwotCiAJaWYgKHVycS0+aGNmQ3R4ID09ICYobHAtPmhjZkN0eCkpIHsKIAkJaWYgKGxwLT5mbGFncyAmIFdWTEFOMl9VSUxfQ09OTkVDVEVEKSB7CiAJCQlscC0+ZmxhZ3MgJj0gfldWTEFOMl9VSUxfQ09OTkVDVEVEOwpAQCAtMjM4LDcgKzIzNCw3IEBACiAJCXVycS0+cmVzdWx0ID0gVUlMX0VSUl9XUk9OR19JRkI7CiAJfQogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gMDsKIH0gLyogd3ZsYW5fdWlsX2Rpc2Nvbm5lY3QgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTE1ODAsNyArMTU3Niw2IEBACiB7CiAJc3RydWN0IHdsX3ByaXZhdGUgKmxwID0gd2xfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAKIAl3bF9sb2NrKGxwLCAmZmxhZ3MpOwogCkBAIC0xNTkxLDcgKzE1ODYsNyBAQAogCXdsX2FwcGx5KGxwKTsKIAl3bF91bmxvY2sobHAsICZmbGFncyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfSAvKiB3dmxhbl9zZXRfbmV0bmFtZSAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMTY4Myw3ICsxNjc4LDYgQEAKIAlzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAgPSB3bF9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzaXplX3QgbGVuOwotCWludCAgICAgICAgIHJldCA9IDA7CiAKIAl3bF9sb2NrKGxwLCAmZmxhZ3MpOwogCkBAIC0xNjk1LDcgKzE2ODksNyBAQAogCXdsX2FwcGx5KGxwKTsKIAl3bF91bmxvY2sobHAsICZmbGFncyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfSAvKiB3dmxhbl9zZXRfc3RhdGlvbl9uaWNrbmFtZSAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfd2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfd2V4dC5jCmluZGV4IDQ5ZWVlYWUuLjNhZWZmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3dleHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF93ZXh0LmMKQEAgLTE1OSwxNSArMTU5LDEyIEBACiAvKiBTZXQgdXAgdGhlIExUViB0byBjbGVhciB0aGUgYXBwcm9wcmlhdGUga2V5ICovCiBzdGF0aWMgaW50IGhlcm1lc19jbGVhcl90a2lwX2tleXMobHR2X3QgKmx0diwgdTE2IGtleV9pZHgsIHU4ICphZGRyKQogewotCWludCByZXQ7Ci0KIAlzd2l0Y2ggKGtleV9pZHgpIHsKIAljYXNlIDA6CiAJCWlmICghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpIHsKIAkJCWx0di0+bGVuID0gNzsKIAkJCWx0di0+dHlwID0gQ0ZHX1JFTU9WRV9US0lQX01BUFBFRF9LRVk7CiAJCQltZW1jcHkoJmx0di0+dS51OFswXSwgYWRkciwgRVRIX0FMRU4pOwotCQkJcmV0ID0gMDsKIAkJfQogCQlicmVhazsKIAljYXNlIDE6CkBAIC0xNzgsMTMgKzE3NSwxMiBAQAogCQlsdHYtPnR5cCA9IENGR19SRU1PVkVfVEtJUF9ERUZBVUxUX0tFWTsKIAkJbHR2LT51LnUxNlswXSA9IGNwdV90b19sZTE2KGtleV9pZHgpOwogCi0JCXJldCA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFNldCB0aGUgV0VQIGtleXMgaW4gdGhlIHdsX3ByaXZhdGUgc3RydWN0dXJlICovCkBAIC0zMDI3LDEzICszMDIzLDEwIEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQogCiB7Ci0JaW50ICAgcmV0ID0gMDsKLQogCS8qIFdlIGNhbid0IHdyaXRlIHRoaXMgdG8gdGhlIGNhcmQsIGJ1dCBhcHBhcmVudGx5IHRoaXMKIAkgKiBvcGVyYXRpb24gbmVlZHMgdG8gc3VjY2VlZCAqLwotCXJldCA9IDA7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKaW5kZXggNWI4YjA5NC4uOTgzNDNmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiBzdGF0aWMgdm9pZCB1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAogc3RydWN0IHVzYmN0bHhfY29tcGxldG9yIHsKLQlpbnQgKCpjb21wbGV0ZSkgKHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciAqKTsKKwlpbnQgKCpjb21wbGV0ZSkoc3RydWN0IHVzYmN0bHhfY29tcGxldG9yICopOwogfTsKIAogc3RhdGljIGludApAQCAtMjcyLDcgKzI3Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY3RseHN0cihDVExYX1NUQVRFIHMpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmN0bHhfc3RyW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjdGx4X3N0cltdID0gewogCQkiSW5pdGlhbCBzdGF0ZSIsCiAJCSJDb21wbGV0ZSIsCiAJCSJSZXF1ZXN0IGZhaWxlZCIsCkBAIC0zNTAsMTQgKzM1MCwxNCBAQAogCiAJcmVzdWx0ID0gLUVOT0xJTks7CiAJaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCi0JCQkhdGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkgICAgIXRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCXJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5yeF91cmIsIG1lbWZsYWdzKTsKIAogCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFJYIHBpcGUgKi8KIAkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKIAkJCW5ldGRldl93YXJuKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCQkgICAgICAgIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCQkgICAgIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpCiAJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAkJfQpAQCAtMzk4LDE2ICszOTgsMTUgQEAKIAogCXJlc3VsdCA9IC1FTk9MSU5LOwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQotCQlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQKLQkJICAgICYmICF0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgeworCQlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYKKwkJICAgICF0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgewogCQkJcmVzdWx0ID0gU1VCTUlUX1VSQih0eF91cmIsIG1lbWZsYWdzKTsKIAogCQkJLyogVGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFRYIHBpcGUgKi8KIAkJCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7CiAJCQkJbmV0ZGV2X3dhcm4oaHctPndsYW5kZXYtPm5ldGRldiwKLQkJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCQkJICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJCSAgICBuZXRkZXYtPm5hbWUpOwogCQkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CiAJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKQEAgLTQ1NSwxMSArNDU0LDExIEBACiAJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCQkgICAgICAgIkZhaWxlZCB0byBjbGVhciByeCBwaXBlIGZvciAlczogZXJyPSVkXG4iLAotCQkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKKwkJCQkgICAiRmFpbGVkIHRvIGNsZWFyIHJ4IHBpcGUgZm9yICVzOiBlcnI9JWRcbiIsCisJCQkJICAgbmV0ZGV2LT5uYW1lLCByZXQpOwogCQl9IGVsc2UgewogCQkJbmV0ZGV2X2luZm8oaHctPndsYW5kZXYtPm5ldGRldiwgIiVzIHJ4IHBpcGUgcmVzZXQgY29tcGxldGUuXG4iLAotCQkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQkJICAgIG5ldGRldi0+bmFtZSk7CiAJCQljbGVhcl9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CiAJCQlzZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CiAJCX0KQEAgLTQ3Miw3ICs0NzEsOCBAQAogCQlyZXQgPSBzdWJtaXRfcnhfdXJiKGh3LCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCQkgICAgICAgIkZhaWxlZCB0byByZXN1bWUgJXMgcnggcGlwZS5cbiIsIG5ldGRldi0+bmFtZSk7CisJCQkJICAgIkZhaWxlZCB0byByZXN1bWUgJXMgcnggcGlwZS5cbiIsCisJCQkJICAgbmV0ZGV2LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCWNsZWFyX2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpOwogCQl9CkBAIC00ODYsMTEgKzQ4NiwxMSBAQAogCQlyZXQgPSB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwKLQkJCSAgICAgICAiRmFpbGVkIHRvIGNsZWFyIHR4IHBpcGUgZm9yICVzOiBlcnI9JWRcbiIsCi0JCQkgICAgICAgbmV0ZGV2LT5uYW1lLCByZXQpOworCQkJCSAgICJGYWlsZWQgdG8gY2xlYXIgdHggcGlwZSBmb3IgJXM6IGVycj0lZFxuIiwKKwkJCQkgICBuZXRkZXYtPm5hbWUsIHJldCk7CiAJCX0gZWxzZSB7CiAJCQluZXRkZXZfaW5mbyhody0+d2xhbmRldi0+bmV0ZGV2LCAiJXMgdHggcGlwZSByZXNldCBjb21wbGV0ZS5cbiIsCi0JCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCQkgICAgbmV0ZGV2LT5uYW1lKTsKIAkJCWNsZWFyX2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKIAkJCXNldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKIApAQCAtNjQyLDggKzY0Miw3IEBACiAJcmVzdWx0LT5yZXNwMSA9IGxlMTZfdG9fY3B1KGNtZHJlc3AtPnJlc3AxKTsKIAlyZXN1bHQtPnJlc3AyID0gbGUxNl90b19jcHUoY21kcmVzcC0+cmVzcDIpOwogCi0JcHJfZGVidWcoImNtZHJlc3VsdDpzdGF0dXM9MHglMDR4ICIKLQkJICJyZXNwMD0weCUwNHggcmVzcDE9MHglMDR4IHJlc3AyPTB4JTA0eFxuIiwKKwlwcl9kZWJ1ZygiY21kcmVzdWx0OnN0YXR1cz0weCUwNHggcmVzcDA9MHglMDR4IHJlc3AxPTB4JTA0eCByZXNwMj0weCUwNHhcbiIsCiAJCSByZXN1bHQtPnN0YXR1cywgcmVzdWx0LT5yZXNwMCwgcmVzdWx0LT5yZXNwMSwgcmVzdWx0LT5yZXNwMik7CiAKIAlyZXR1cm4gcmVzdWx0LT5zdGF0dXMgJiBIRkEzODR4X1NUQVRVU19SRVNVTFQ7CkBAIC02NTYsNyArNjU1LDYgQEAKIAlyZXN1bHQtPnJpZCA9IGxlMTZfdG9fY3B1KHJyaWRyZXNwLT5yaWQpOwogCXJlc3VsdC0+cmlkZGF0YSA9IHJyaWRyZXNwLT5kYXRhOwogCXJlc3VsdC0+cmlkZGF0YV9sZW4gPSAoKGxlMTZfdG9fY3B1KHJyaWRyZXNwLT5mcm1sZW4pIC0gMSkgKiAyKTsKLQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY3NSw3ICs2NzMsNyBAQAogewogCXN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgKmNvbXBsZXRlOwogCi0JY29tcGxldGUgPSAoc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciAqKSBoZWFkOworCWNvbXBsZXRlID0gKHN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgKiloZWFkOwogCXJldHVybiB1c2JjdGx4X2dldF9zdGF0dXMoY29tcGxldGUtPmNtZHJlc3AsIGNvbXBsZXRlLT5yZXN1bHQpOwogfQogCkBAIC03MTAsMTUgKzcwOCwxNCBAQAogCXN0cnVjdCB1c2JjdGx4X3JyaWRfY29tcGxldG9yICpjb21wbGV0ZTsKIAloZmEzODR4X3JyaWRyZXN1bHRfdCBycmlkcmVzdWx0OwogCi0JY29tcGxldGUgPSAoc3RydWN0IHVzYmN0bHhfcnJpZF9jb21wbGV0b3IgKikgaGVhZDsKKwljb21wbGV0ZSA9IChzdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvciAqKWhlYWQ7CiAJdXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb21wbGV0ZS0+cnJpZHJlc3AsICZycmlkcmVzdWx0KTsKIAogCS8qIFZhbGlkYXRlIHRoZSBsZW5ndGgsIG5vdGUgYm9keSBsZW4gY2FsY3VsYXRpb24gaW4gYnl0ZXMgKi8KIAlpZiAocnJpZHJlc3VsdC5yaWRkYXRhX2xlbiAhPSBjb21wbGV0ZS0+cmlkZGF0YWxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiUklEIGxlbiBtaXNtYXRjaCwgcmlkPTB4JTA0eCBobGVuPSVkIGZ3bGVuPSVkXG4iLAotCQkgICAgICAgcnJpZHJlc3VsdC5yaWQsCi0JCSAgICAgICBjb21wbGV0ZS0+cmlkZGF0YWxlbiwgcnJpZHJlc3VsdC5yaWRkYXRhX2xlbik7CisJCXByX3dhcm4oIlJJRCBsZW4gbWlzbWF0Y2gsIHJpZD0weCUwNHggaGxlbj0lZCBmd2xlbj0lZFxuIiwKKwkJCXJyaWRyZXN1bHQucmlkLAorCQkJY29tcGxldGUtPnJpZGRhdGFsZW4sIHJyaWRyZXN1bHQucmlkZGF0YV9sZW4pOwogCQlyZXR1cm4gLUVOT0RBVEE7CiAJfQogCkBAIC03NDUsMTQgKzc0MiwxMiBAQAogKiBDb21wbGV0b3Igb2JqZWN0OgogKiBJbnRlcnByZXRzIHRoZSByZXN1bHRzIG9mIGEgc3luY2hyb25vdXMgUklELXdyaXRlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB1c2JjdGx4X3dyaWRfY29tcGxldG9yX3Q7CiAjZGVmaW5lIGluaXRfd3JpZF9jb21wbGV0b3IgIGluaXRfY21kX2NvbXBsZXRvcgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQ29tcGxldG9yIG9iamVjdDoKICogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIG1lbW9yeS13cml0ZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgdXNiY3RseF93bWVtX2NvbXBsZXRvcl90OwogI2RlZmluZSBpbml0X3dtZW1fY29tcGxldG9yICBpbml0X2NtZF9jb21wbGV0b3IKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NjYsMTEgKzc2MSwxMSBAQAogCXZvaWQgKmRhdGE7CiAJdW5zaWduZWQgaW50IGxlbjsKIH07Ci10eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yIHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdDsKIAogc3RhdGljIGludCB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuKHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciAqaGVhZCkKIHsKLQl1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCAqKSBoZWFkOworCXN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yICpjb21wbGV0ZSA9CisJCShzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvciAqKWhlYWQ7CiAKIAlwcl9kZWJ1Zygicm1lbXJlc3A6bGVuPSVkXG4iLCBjb21wbGV0ZS0+cm1lbXJlc3AtPmZybWxlbik7CiAJbWVtY3B5KGNvbXBsZXRlLT5kYXRhLCBjb21wbGV0ZS0+cm1lbXJlc3AtPmRhdGEsIGNvbXBsZXRlLT5sZW4pOwpAQCAtNzc4LDcgKzc3Myw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYmN0bHhfY29tcGxldG9yICppbml0X3JtZW1fY29tcGxldG9yKAotCQkJCQkJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90CisJCQkJCQlzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvcgogCQkJCQkJCSpjb21wbGV0b3IsCiAJCQkJCQloZmEzODR4X3VzYl9ybWVtcmVzcF90CiAJCQkJCQkJKnJtZW1yZXNwLApAQCAtOTkxLDkgKzk4Niw3IEBACiAKIAlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOwogCi0JcHJfZGVidWcoImNtZHJlc3AuaW5pdDogIgotCQkgInN0YXR1cz0weCUwNHgsIHJlc3AwPTB4JTA0eCwgIgotCQkgInJlc3AxPTB4JTA0eCwgcmVzcDI9MHglMDR4XG4iLAorCXByX2RlYnVnKCJjbWRyZXNwLmluaXQ6IHN0YXR1cz0weCUwNHgsIHJlc3AwPTB4JTA0eCwgcmVzcDE9MHglMDR4LCByZXNwMj0weCUwNHhcbiIsCiAJCSBjbWQucmVzdWx0LnN0YXR1cywKIAkJIGNtZC5yZXN1bHQucmVzcDAsIGNtZC5yZXN1bHQucmVzcDEsIGNtZC5yZXN1bHQucmVzcDIpOwogCWlmIChyZXN1bHQgPT0gMCkgewpAQCAtMTIxMiw3ICsxMjA1LDcgQEAKIAlyZXN1bHQgPSB1c2JfcmVzZXRfZGV2aWNlKGh3LT51c2IpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwgInVzYl9yZXNldF9kZXZpY2UoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCi0JCSAgICAgICByZXN1bHQpOworCQkJICAgcmVzdWx0KTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTMxMiw4ICsxMzA1LDggQEAKIAkJCXJlc3VsdCA9IGNvbXBsZXRvci0+Y29tcGxldGUoY29tcGxldG9yKTsKIAkJfSBlbHNlIHsKIAkJCW5ldGRldl93YXJuKGh3LT53bGFuZGV2LT5uZXRkZXYsICJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAotCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQkJICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCQkgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOwogCQkJcmVzdWx0ID0gLUVJTzsKIAkJfQogCkBAIC0xMzgxLDggKzEzNzQsNyBAQAogCiAJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYuY21kcmVxKTsKIAotCXByX2RlYnVnKCJjbWRyZXE6IGNtZD0weCUwNHggIgotCQkgInBhcm0wPTB4JTA0eCBwYXJtMT0weCUwNHggcGFybTI9MHglMDR4XG4iLAorCXByX2RlYnVnKCJjbWRyZXE6IGNtZD0weCUwNHggcGFybTA9MHglMDR4IHBhcm0xPTB4JTA0eCBwYXJtMj0weCUwNHhcbiIsCiAJCSBjbWQtPmNtZCwgY21kLT5wYXJtMCwgY21kLT5wYXJtMSwgY21kLT5wYXJtMik7CiAKIAljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CkBAIC0xNTY2LDcgKzE1NTgsNyBAQAogCWlmIChyZXN1bHQgIT0gMCkgewogCQlrZnJlZShjdGx4KTsKIAl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7Ci0JCXVzYmN0bHhfd3JpZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisJCXN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgY29tcGxldG9yOwogCQloZmEzODR4X2NtZHJlc3VsdF90IHdyaWRyZXN1bHQ7CiAKIAkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsCkBAIC0xNjU4LDcgKzE2NTAsNyBAQAogCWlmIChyZXN1bHQgIT0gMCkgewogCQlrZnJlZShjdGx4KTsKIAl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7Ci0JCXVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisJCXN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yIGNvbXBsZXRvcjsKIAogCQlyZXN1bHQgPQogCQkgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsIGN0bHgsCkBAIC0xNzQ4LDcgKzE3NDAsNyBAQAogCWlmIChyZXN1bHQgIT0gMCkgewogCQlrZnJlZShjdGx4KTsKIAl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7Ci0JCXVzYmN0bHhfd21lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisJCXN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgY29tcGxldG9yOwogCQloZmEzODR4X2NtZHJlc3VsdF90IHdtZW1yZXN1bHQ7CiAKIAkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsCkBAIC0yMDE4LDcgKzIwMTAsOCBAQAogCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW5ldGRldl9pbmZvKGh3LT53bGFuZGV2LT5uZXRkZXYsICJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKwluZXRkZXZfaW5mbyhody0+d2xhbmRldi0+bmV0ZGV2LAorCQkgICAgIkRvd25sb2FkICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOwogCiAJLyogQ29udmVydCB0byBmbGF0IGFkZHJlc3MgZm9yIGFyaXRobWV0aWMgKi8KIAkvKiBOT1RFOiBkbGJ1ZmZlciBSSUQgc3RvcmVzIHRoZSBhZGRyZXNzIGluIEFVWCBmb3JtYXQgKi8KQEAgLTIwMjYsMTEgKzIwMTksNiBAQAogCSAgICBIRkEzODR4X0FERFJfQVVYX01LRkxBVChody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOwogCXByX2RlYnVnKCJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCiAJCSBody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQsIGRsYnVmYWRkcik7Ci0KLSNpZiAwCi0JbmV0ZGV2X3dhcm4oaHctPndsYW5kZXYtPm5ldGRldiwgImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsCi0JICAgICAgIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7Ci0jZW5kaWYKIAkvKiBDYWxjdWxhdGlvbnMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGZpbGxzIG9mIHRoZSBkbGJ1ZmZlciB0byBkbwogCSAqIGFuZCBob3cgbWFueSBVU0Igd21lbXJlcSdzIHRvIGRvIGZvciBlYWNoIGZpbGwuICBBdCB0aGlzIHBvaW50CiAJICogaW4gdGltZSwgdGhlIGRsYnVmZmVyIHNpemUgYW5kIHRoZSB3bWVtcmVxIHNpemUgYXJlIHRoZSBzYW1lLgpAQCAtMjA1NiwxNSArMjA0NCwxNSBAQAogCQlidXJuaGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShidXJuZGFkZHIpOwogCiAJCW5ldGRldl9pbmZvKGh3LT53bGFuZGV2LT5uZXRkZXYsICJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsCi0JCSAgICAgICBidXJubGVuLCBidXJuZGFkZHIpOworCQkJICAgIGJ1cm5sZW4sIGJ1cm5kYWRkcik7CiAKIAkJLyogU2V0IHRoZSBkb3dubG9hZCBtb2RlICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX05WLAogCQkJCQkgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbik7CiAJCWlmIChyZXN1bHQpIHsKLQkJCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwgImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgotCQkJICAgICAgICJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKLQkJCSAgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKKwkJCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwKKwkJCQkgICAiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSBjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQkgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdF9wcm9jOwogCQl9CiAKQEAgLTIwOTUsOSArMjA4Myw4IEBACiAJCQkJCSAgICAgIDAsIDAsIDApOwogCQlpZiAocmVzdWx0KSB7CiAJCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCQkgICAgICAgImRvd25sb2FkKE5WV1JJVEUsbG89JXgsaGk9JXgsbGVuPSV4KSAiCi0JCQkgICAgICAgImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAotCQkJICAgICAgIGJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJCSAgICJkb3dubG9hZChOVldSSVRFLGxvPSV4LGhpPSV4LGxlbj0leCkgY21kIGZhaWxlZCwgcmVzdWx0PSVkLiBBYm9ydGluZyBkL2xcbiIsCisJCQkJICAgYnVybmxvLCBidXJuaGksIGJ1cm5sZW4sIHJlc3VsdCk7CiAJCQlnb3RvIGV4aXRfcHJvYzsKIAkJfQogCkBAIC0yMjgwLDcgKzIyNjcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgewogCQlpZiAoaHctPnBvcnRfZW5hYmxlZFtpXSkgewogCQkJbmV0ZGV2X2Vycihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJICAgICAgICJDYW4ndCBkb3dubG9hZCB3aXRoIGEgbWFjcG9ydCBlbmFibGVkLlxuIik7CisJCQkJICAgIkNhbid0IGRvd25sb2FkIHdpdGggYSBtYWNwb3J0IGVuYWJsZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMjM1Miw3ICsyMzM5LDggQEAKIAlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbmV0ZGV2X2luZm8oaHctPndsYW5kZXYtPm5ldGRldiwgIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCW5ldGRldl9pbmZvKGh3LT53bGFuZGV2LT5uZXRkZXYsICJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLAorCQkgICAgbGVuLCBkYWRkcik7CiAKIAkvKiBIb3cgbWFueSBkb3dtZW0gY2FsbHM/ICAqLwogCW53cml0ZXMgPSBsZW4gLyBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU47CkBAIC0yNDUwLDcgKzI0MzgsOCBAQAogCiAJCWlmIChyZXN1bHQpIHsKIAkJCW5ldGRldl93YXJuKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCQkgICAgICAgIlJlYWQgZnJvbSBpbmRleCAlemQgZmFpbGVkLCBjb250aW51aW5nXG4iLCBpKTsKKwkJCQkgICAgIlJlYWQgZnJvbSBpbmRleCAlemQgZmFpbGVkLCBjb250aW51aW5nXG4iLAorCQkJCSAgICBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTI0NjIsMTQgKzI0NTEsMTUgQEAKIAkJCXBkcmNvZGUgPSBsZTE2X3RvX2NwdShwZGFbY3VycnBkciArIDFdKTsKIAkJCS8qIFRlc3QgdGhlIHJlY29yZCBsZW5ndGggKi8KIAkJCWlmIChwZHJsZW4gPiBIRkEzODR4X1BEUl9MRU5fTUFYIHx8IHBkcmxlbiA9PSAwKSB7Ci0JCQkJbmV0ZGV2X2Vycihody0+d2xhbmRldi0+bmV0ZGV2LCAicGRybGVuIGludmFsaWQ9JWRcbiIsIHBkcmxlbik7CisJCQkJbmV0ZGV2X2Vycihody0+d2xhbmRldi0+bmV0ZGV2LAorCQkJCQkgICAicGRybGVuIGludmFsaWQ9JWRcbiIsIHBkcmxlbik7CiAJCQkJcGRhb2sgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogVGVzdCB0aGUgY29kZSAqLwogCQkJaWYgKCFoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHBkcmNvZGUpKSB7CiAJCQkJbmV0ZGV2X2Vycihody0+d2xhbmRldi0+bmV0ZGV2LCAicGRyY29kZSBpbnZhbGlkPSVkXG4iLAotCQkJCSAgICAgICBwZHJjb2RlKTsKKwkJCQkJICAgcGRyY29kZSk7CiAJCQkJcGRhb2sgPSAwOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjQ4NSwxMyArMjQ3NSwxMyBAQAogCQl9CiAJCWlmIChwZGFvaykgewogCQkJbmV0ZGV2X2luZm8oaHctPndsYW5kZXYtPm5ldGRldiwKLQkJCSAgICAgICAiUERBIFJlYWQgZnJvbSAweCUwOHggaW4gJXMgc3BhY2UuXG4iLAotCQkJICAgICAgIHBkYWxvY1tpXS5jYXJkYWRkciwKLQkJCSAgICAgICBwZGFsb2NbaV0uYXV4Y3RsID09IDAgPyAiRVhURFMiIDoKLQkJCSAgICAgICBwZGFsb2NbaV0uYXV4Y3RsID09IDEgPyAiTlYiIDoKLQkJCSAgICAgICBwZGFsb2NbaV0uYXV4Y3RsID09IDIgPyAiUEhZIiA6Ci0JCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAzID8gIklDU1JBTSIgOgotCQkJICAgICAgICI8Ym9ndXMgYXV4Y3RsPiIpOworCQkJCSAgICAiUERBIFJlYWQgZnJvbSAweCUwOHggaW4gJXMgc3BhY2UuXG4iLAorCQkJCSAgICBwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkJICAgIHBkYWxvY1tpXS5hdXhjdGwgPT0gMCA/ICJFWFREUyIgOgorCQkJCSAgICBwZGFsb2NbaV0uYXV4Y3RsID09IDEgPyAiTlYiIDoKKwkJCQkgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgorCQkJCSAgICBwZGFsb2NbaV0uYXV4Y3RsID09IDMgPyAiSUNTUkFNIiA6CisJCQkJICAgICI8Ym9ndXMgYXV4Y3RsPiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yNTg2LDcgKzI1NzYsOCBAQAogCXJlc3VsdCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCSAgICAgICAiRmF0YWwsIGZhaWxlZCB0byBzdWJtaXQgUlggVVJCLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkgICAiRmF0YWwsIGZhaWxlZCB0byBzdWJtaXQgUlggVVJCLCByZXN1bHQ9JWRcbiIsCisJCQkgICByZXN1bHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0yNjAyLDEyICsyNTkzLDEzIEBACiAJICovCiAJcmVzdWx0MSA9IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOwogCW1zbGVlcCgxMDAwKTsKLQlyZXN1bHQgPSByZXN1bHQyID0gaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisJcmVzdWx0MiA9IHJlc3VsdDsKIAlpZiAocmVzdWx0MSAhPSAwKSB7CiAJCWlmIChyZXN1bHQyICE9IDApIHsKIAkJCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwKLQkJCQkiY21kX2luaXRpYWxpemUoKSBmYWlsZWQgb24gdHdvIGF0dGVtcHRzLCByZXN1bHRzICVkIGFuZCAlZFxuIiwKLQkJCQlyZXN1bHQxLCByZXN1bHQyKTsKKwkJCQkgICAiY21kX2luaXRpYWxpemUoKSBmYWlsZWQgb24gdHdvIGF0dGVtcHRzLCByZXN1bHRzICVkIGFuZCAlZFxuIiwKKwkJCQkgICByZXN1bHQxLCByZXN1bHQyKTsKIAkJCXVzYl9raWxsX3VyYigmaHctPnJ4X3VyYik7CiAJCQlnb3RvIGRvbmU7CiAJCX0gZWxzZSB7CkBAIC0yNjE3LDkgKzI2MDksOSBAQAogCQl9CiAJfSBlbHNlIGlmIChyZXN1bHQyICE9IDApIHsKIAkJbmV0ZGV2X3dhcm4oaHctPndsYW5kZXYtPm5ldGRldiwgIkZpcnN0IGNtZF9pbml0aWFsaXplKCkgc3VjY2VlZGVkLCBidXQgc2Vjb25kIGF0dGVtcHQgZmFpbGVkIChyZXN1bHQ9JWQpXG4iLAotCQkJcmVzdWx0Mik7CisJCQkgICAgcmVzdWx0Mik7CiAJCW5ldGRldl93YXJuKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCSAgICAgICAiTW9zdCBsaWtlbHkgdGhlIGNhcmQgd2lsbCBiZSBmdW5jdGlvbmFsXG4iKTsKKwkJCSAgICAiTW9zdCBsaWtlbHkgdGhlIGNhcmQgd2lsbCBiZSBmdW5jdGlvbmFsXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMjY1MCw3ICsyNjQyLDYgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpCiB7Ci0JaW50IHJlc3VsdCA9IDA7CiAJaW50IGk7CiAKIAltaWdodF9zbGVlcCgpOwpAQCAtMjY3NSw3ICsyNjY2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykKIAkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI3ODQsNyArMjc3NSw4IEBACiAJcmVzdWx0ID0gMTsKIAlyZXQgPSBzdWJtaXRfdHhfdXJiKGh3LCAmaHctPnR4X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwgInN1Ym1pdF90eF91cmIoKSBmYWlsZWQsIGVycm9yPSVkXG4iLCByZXQpOworCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCisJCQkgICAic3VibWl0X3R4X3VyYigpIGZhaWxlZCwgZXJyb3I9JWRcbiIsIHJldCk7CiAJCXJlc3VsdCA9IDM7CiAJfQogCkBAIC0yODI2LDcgKzI4MTgsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKilkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI4NDUsNyArMjgzNyw2IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKLQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4NjQsNyArMjg1NSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKilkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMwMTAsNyArMzAwMSw4IEBACiAKIAlkZWZhdWx0OgogCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsICJDVExYWyVkXSBub3QgaW4gYSB0ZXJtaW5hdGluZyBzdGF0ZSglcylcbiIsCi0JCSAgICAgICBsZTE2X3RvX2NwdShjdGx4LT5vdXRidWYudHlwZSksIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKKwkJCSAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKIAkJYnJlYWs7CiAJfQkJCS8qIHN3aXRjaCAqLwogfQpAQCAtMzA5Miw4ICszMDg0LDggQEAKIAkJCSAqIGFuZCBzY2hlZHVsZSBhIHJlc2V0IC4uLgogCQkJICovCiAJCQluZXRkZXZfd2Fybihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQkJICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOwogCQkJbGlzdF9tb3ZlKCZoZWFkLT5saXN0LCAmaHctPmN0bHhxLnBlbmRpbmcpOwogCQkJc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKIAkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CkBAIC0zMTAyLDEyICszMDk0LDEyIEBACiAKIAkJaWYgKHJlc3VsdCA9PSAtRVNIVVRET1dOKSB7CiAJCQluZXRkZXZfd2Fybihody0+d2xhbmRldi0+bmV0ZGV2LCAiJXMgdXJiIHNodXRkb3duIVxuIiwKLQkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCQkgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQogCiAJCW5ldGRldl9lcnIoaHctPndsYW5kZXYtPm5ldGRldiwgIkZhaWxlZCB0byBzdWJtaXQgQ1RMWFslZF06IGVycm9yPSVkXG4iLAotCQkgICAgICAgbGUxNl90b19jcHUoaGVhZC0+b3V0YnVmLnR5cGUpLCByZXN1bHQpOworCQkJICAgbGUxNl90b19jcHUoaGVhZC0+b3V0YnVmLnR5cGUpLCByZXN1bHQpOwogCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBoZWFkKTsKIAl9CQkJLyogd2hpbGUgKi8KIApAQCAtMzEzNSw3ICszMTI3LDcgQEAKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSB1cmItPmNvbnRleHQ7CiAJaGZhMzg0eF90ICpodzsKLQloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCWludCByZXN1bHQ7CiAJaW50IHVyYl9zdGF0dXM7CkBAIC0zMTc0LDcgKzMxNjYsNyBAQAogCiAJY2FzZSAtRVBJUEU6CiAJCW5ldGRldl93YXJuKGh3LT53bGFuZGV2LT5uZXRkZXYsICIlcyByeCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCSAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkKIAkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CkBAIC0zMjI1LDggKzMyMTcsOCBAQAogCiAJCWlmIChyZXN1bHQgIT0gMCkgewogCQkJbmV0ZGV2X2Vycihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJICAgICAgICJGYXRhbCwgZmFpbGVkIHRvIHJlc3VibWl0IHJ4X3VyYi4gZXJyb3I9JWRcbiIsCi0JCQkgICAgICAgcmVzdWx0KTsKKwkJCQkgICAiRmF0YWwsIGZhaWxlZCB0byByZXN1Ym1pdCByeF91cmIuIGVycm9yPSVkXG4iLAorCQkJCSAgIHJlc3VsdCk7CiAJCX0KIAl9CiAKQEAgLTMzNjEsOSArMzM1Myw5IEBACiAJCSAqLwogCQlpZiAoY3RseC0+b3V0YnVmLnR5cGUgIT0gaW50eXBlKSB7CiAJCQluZXRkZXZfd2Fybihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJICAgICAgICJFeHBlY3RlZCBJTlslZF0sIHJlY2VpdmVkIElOWyVkXSAtIGlnbm9yZWQuXG4iLAotCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICAgICBsZTE2X3RvX2NwdShpbnR5cGUpKTsKKwkJCQkgICAgIkV4cGVjdGVkIElOWyVkXSwgcmVjZWl2ZWQgSU5bJWRdIC0gaWdub3JlZC5cbiIsCisJCQkJICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCQkgICAgbGUxNl90b19jcHUoaW50eXBlKSk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCkBAIC0zMzk3LDEwICszMzg5LDkgQEAKIAkJCSAqIFRocm93IHRoaXMgQ1RMWCBhd2F5IC4uLgogCQkJICovCiAJCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCQkgICAgICAgIk1hdGNoZWQgSU4gVVJCLCBDVExYWyVkXSBpbiBpbnZhbGlkIHN0YXRlKCVzKS4iCi0JCQkgICAgICAgIiBEaXNjYXJkZWQuXG4iLAotCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQkJICAgIk1hdGNoZWQgSU4gVVJCLCBDVExYWyVkXSBpbiBpbnZhbGlkIHN0YXRlKCVzKS4gRGlzY2FyZGVkLlxuIiwKKwkJCQkgICBsZTE2X3RvX2NwdShjdGx4LT5vdXRidWYudHlwZSksCisJCQkJICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOwogCQkJaWYgKHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwKQogCQkJCXJ1bl9xdWV1ZSA9IDE7CiAJCQlicmVhazsKQEAgLTM0NjQsNyArMzQ1NSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWhmYTM4NHhfdXNiaW5fdCAqdXNiaW4gPSAoaGZhMzg0eF91c2Jpbl90ICopIHNrYi0+ZGF0YTsKKwloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKXNrYi0+ZGF0YTsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAlpbnQgaGRybGVuOwogCXN0cnVjdCBwODAyMTFfcnhtZXRhICpyeG1ldGE7CkBAIC0zNTM1LDcgKzM1MjYsOCBAQAogCiAJZGVmYXVsdDoKIAkJbmV0ZGV2X3dhcm4oaHctPndsYW5kZXYtPm5ldGRldiwgIlJlY2VpdmVkIGZyYW1lIG9uIHVuc3VwcG9ydGVkIHBvcnQ9JWRcbiIsCi0JCSAgICAgICBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykpOworCQkJICAgIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQoCisJCQkJICAgIHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykpOwogCQlnb3RvIGRvbmU7CiAJCWJyZWFrOwogCX0KQEAgLTM1OTcsOCArMzU4OSw4IEBACiAJc2tiID0gZGV2X2FsbG9jX3NrYihza2JsZW4pOwogCWlmIChza2IgPT0gTlVMTCkgewogCQluZXRkZXZfZXJyKGh3LT53bGFuZGV2LT5uZXRkZXYsCi0JCSAgICAgICAiYWxsb2Nfc2tiIGZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsCi0JCSAgICAgICBza2JsZW4pOworCQkJICAgImFsbG9jX3NrYiBmYWlsZWQgdHJ5aW5nIHRvIGFsbG9jYXRlICVkIGJ5dGVzXG4iLAorCQkJICAgc2tibGVuKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzYwOCw3ICszNjAwLDcgQEAKIAkJc3RydWN0IHA4MDIxMV9jYXBoZHIgKmNhcGhkcjsKIAkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLwogCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHA4MDIxMV9jYXBoZHIpKTsKLQkJY2FwaGRyID0gKHN0cnVjdCBwODAyMTFfY2FwaGRyICopIGRhdGFwOworCQljYXBoZHIgPSAoc3RydWN0IHA4MDIxMV9jYXBoZHIgKilkYXRhcDsKIAogCQljYXBoZHItPnZlcnNpb24gPSBodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOwogCQljYXBoZHItPmxlbmd0aCA9IGh0b25sKHNpemVvZihzdHJ1Y3QgcDgwMjExX2NhcGhkcikpOwpAQCAtMzcwNSw3ICszNjk3LDYgQEAKICNlbmRpZgogCiAJaWYgKHdsYW5kZXYgJiYgd2xhbmRldi0+bmV0ZGV2KSB7Ci0KIAkJc3dpdGNoICh1cmItPnN0YXR1cykgewogCQljYXNlIDA6CiAJCQloZmEzODR4X3VzYm91dF90eCh3bGFuZGV2LCB1c2JvdXQpOwpAQCAtMzcxNSw4ICszNzA2LDggQEAKIAkJCXsKIAkJCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAkJCQluZXRkZXZfd2Fybihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJCSAgICAgICAiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAotCQkJCSAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJCQkgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkJICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CiAJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0CiAJCQkJICAgIChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkKIAkJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKQEAgLTM3MzEsOCArMzcyMiw4IEBACiAJCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAKIAkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQKLQkJCQkgICAgKFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKLQkJCQkgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkpIHsKKwkJCQkgICAgKFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykgJiYKKwkJCQkgICAgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkpIHsKIAkJCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCiAJCQkJCQkgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKIAkJCQl9CkBAIC0zNzQ4LDcgKzM3MzksNyBAQAogCiAJCWRlZmF1bHQ6CiAJCQluZXRkZXZfaW5mbyh3bGFuZGV2LT5uZXRkZXYsICJ1bmtub3duIHVyYi0+c3RhdHVzPSVkXG4iLAotCQkJICAgICAgIHVyYi0+c3RhdHVzKTsKKwkJCQkgICAgdXJiLT5zdGF0dXMpOwogCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKIAkJCWJyZWFrOwogCQl9CQkvKiBzd2l0Y2ggKi8KQEAgLTM4NDIsOSArMzgzMyw5IEBACiAJCWRlZmF1bHQ6CiAJCQkvKiBUaGlzIGlzIE5PVCBhIHZhbGlkIENUTFggInN1Y2Nlc3MiIHN0YXRlISAqLwogCQkJbmV0ZGV2X2Vycihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJCSJJbGxlZ2FsIENUTFhbJWRdIHN1Y2Nlc3Mgc3RhdGUoJXMsICVkKSBpbiBPVVQgVVJCXG4iLAotCQkJCWxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCQljdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOworCQkJCSAgICJJbGxlZ2FsIENUTFhbJWRdIHN1Y2Nlc3Mgc3RhdGUoJXMsICVkKSBpbiBPVVQgVVJCXG4iLAorCQkJCSAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCQkgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0JCS8qIHN3aXRjaCAqLwogCX0gZWxzZSB7CkBAIC0zODUyLDggKzM4NDMsOCBAQAogCQlpZiAoKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKIAkJICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCQluZXRkZXZfd2Fybihody0+d2xhbmRldi0+bmV0ZGV2LAotCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQkJICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOwogCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAkJfQogCkBAIC0zOTA0LDcgKzM4OTUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMzk2Miw3ICszOTUzLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CkBAIC00MDAxLDcgKzM5OTIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CkBAIC00MTM5LDEzICs0MTMwLDEzIEBACiAJZGVmYXVsdDoKIAkJaWYgKHBkcmNvZGUgPCAweDEwMDApIHsKIAkJCS8qIGNvZGUgaXMgT0ssIGJ1dCB3ZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBpcyAqLwotCQkJcHJfZGVidWcoIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKLQkJCQkgImFzc3VtaW5nIGl0J3Mgb2suXG4iLCBwZHJjb2RlKTsKKwkJCXByX2RlYnVnKCJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCBhc3N1bWluZyBpdCdzIG9rLlxuIiwKKwkJCQkgcGRyY29kZSk7CiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIGJhZCBjb2RlICovCi0JCQlwcl9kZWJ1ZygiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgotCQkJCSAiKD49MHgxMDAwKSwgYXNzdW1pbmcgaXQncyBiYWQuXG4iLCBwZHJjb2RlKTsKKwkJCXByX2RlYnVnKCJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAoPj0weDEwMDApLCBhc3N1bWluZyBpdCdzIGJhZC5cbiIsCisJCQkJIHBkcmNvZGUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKaW5kZXggM2RmNzUzYi4uOTEzNjc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwpAQCAtMTk1LDggKzE5NSw4IEBACiAJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLnNhZGRyLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIkVycm9yOiBDb252ZXJ0aW5nIGV0aCB0byB3bGFuIGluIHVua25vd24gbW9kZS5cbiIpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJFcnJvcjogQ29udmVydGluZyBldGggdG8gd2xhbiBpbiB1bmtub3duIG1vZGUuXG4iKTsKIAkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCX0KQEAgLTIxMyw3ICsyMTMsNyBAQAogCQkJCSAgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCiAJCQkJICBwODAyMTFfd2VwLT5pdiwgcDgwMjExX3dlcC0+aWN2KTsKIAkJaWYgKGZvbykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJbmV0ZGV2X3dhcm4od2xhbmRldi0+bmV0ZGV2LAogCQkJICAgICAgICJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLAogCQkJICAgICAgIGZvbyk7CiAJCQlyZXR1cm4gMjsKQEAgLTMxMCw3ICszMTAsNyBAQAogCX0gZWxzZSB7CiAJCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTRfTEVOOwogCQlpZiAocGF5bG9hZF9sZW5ndGggPCBXTEFOX0hEUl9BNF9MRU4gLSBXTEFOX0hEUl9BM19MRU4pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQTQgZnJhbWUgdG9vIHNob3J0IVxuIik7CisJCQluZXRkZXZfZXJyKG5ldGRldiwgIkE0IGZyYW1lIHRvbyBzaG9ydCFcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJcGF5bG9hZF9sZW5ndGggLT0gKFdMQU5fSERSX0E0X0xFTiAtIFdMQU5fSERSX0EzX0xFTik7CkBAIC0zMjIsOCArMzIyLDggQEAKIAlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiBXTEFOX0dFVF9GQ19JU1dFUChmYykKIAkgICAgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpKSB7CiAJCWlmIChwYXlsb2FkX2xlbmd0aCA8PSA4KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIldFUCBmcmFtZSB0b28gc2hvcnQgKCV1KS5cbiIsCi0JCQkgICAgICAgc2tiLT5sZW4pOworCQkJbmV0ZGV2X2VycihuZXRkZXYsCisJCQkJICAgIldFUCBmcmFtZSB0b28gc2hvcnQgKCV1KS5cbiIsIHNrYi0+bGVuKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWZvbyA9IHdlcF9kZWNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgNCwKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQlpZiAocGF5bG9hZF9sZW5ndGggPiAobmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pKSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gZW5jYXAnZC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiRU5DQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCW5ldGRldl9lcnIobmV0ZGV2LCAiRU5DQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKIAkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTM5Niw3ICszOTYsNyBAQAogCQlpZiAocGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlwcmludGsoS0VSTl9FUlIgIlNOQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCW5ldGRldl9lcnIobmV0ZGV2LCAiU05BUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAogCQkJICAgICAgIHBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCQk+IG5ldGRldi0+bXR1KSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCisJCQluZXRkZXZfZXJyKG5ldGRldiwgIkRJWElJIGZyYW1lIHRvbyBsYXJnZSAoJWxkID4gJWQpXG4iLAogCQkJICAgICAgIChsb25nIGludCkocGF5bG9hZF9sZW5ndGggLQogCQkJCQlzaXplb2Yoc3RydWN0IHdsYW5fbGxjKSAtCiAJCQkJCXNpemVvZihzdHJ1Y3Qgd2xhbl9zbmFwKSksIG5ldGRldi0+bXR1KTsKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCQlpZiAocGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlwcmludGsoS0VSTl9FUlIgIk9USEVSIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQluZXRkZXZfZXJyKG5ldGRldiwgIk9USEVSIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCiAJCQkgICAgICAgcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1KTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC02MDMsOCArNjAzLDggQEAKIAogCS8qIElmIHRoZXNlIGFscmVhZHkgaGF2ZSBtZXRhZGF0YSwgd2UgZXJyb3Igb3V0ISAqLwogCWlmIChQODAyMTFTS0JfUlhNRVRBKHNrYikgIT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSWG1ldGEgYWxyZWFkeSBhdHRhY2hlZCFcbiIsCi0JCSAgICAgICB3bGFuZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiJXM6IFJYbWV0YSBhbHJlYWR5IGF0dGFjaGVkIVxuIiwgd2xhbmRldi0+bmFtZSk7CiAJCXJlc3VsdCA9IDA7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC02MTMsOCArNjEzLDggQEAKIAlyeG1ldGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcDgwMjExX3J4bWV0YSksIEdGUF9BVE9NSUMpOwogCiAJaWYgKHJ4bWV0YSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSByeG1ldGEuXG4iLAotCQkgICAgICAgd2xhbmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcnhtZXRhLlxuIiwgd2xhbmRldi0+bmFtZSk7CiAJCXJlc3VsdCA9IDE7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC02NTYsNiArNjU2LDcgQEAKIAlpZiAobWV0YSAmJiBtZXRhLT5yeCkKIAkJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCmluZGV4IGUzYWU4MDIuLjAwYjE4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC05MCw5ICs5MCw2IEBACiAKICNpbmNsdWRlICJjZmc4MDIxMS5jIgogCi0vKiBTdXBwb3J0IGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgcDgwMjExbmV0ZGV2X3J4X2JoKHVuc2lnbmVkIGxvbmcgYXJnKTsKLQogLyogbmV0ZGV2aWNlIG1ldGhvZCBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9pbml0KG5ldGRldmljZV90ICpuZXRkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKQEAgLTI0MywyNSArMjQwLDU5IEBACiAJdGFza2xldF9zY2hlZHVsZSgmd2xhbmRldi0+cnhfYmgpOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcDgwMjExbmV0ZGV2X3J4X2JoCi0qCi0qIERlZmVycmVkIHByb2Nlc3Npbmcgb2YgYWxsIHJlY2VpdmVkIGZyYW1lcy4KLSoKLSogQXJndW1lbnRzOgotKgl3bGFuZGV2CQlXTEFOIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQotKglza2IJCXNrYnVmZiBjb250YWluaW5nIGEgZnVsbCA4MDIuMTEgZnJhbWUuCi0qIFJldHVybnM6Ci0qCW5vdGhpbmcKLSogU2lkZSBlZmZlY3RzOgotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENPTlZfVE9fRVRIRVJfU0tJUFBFRAkweDAxCisjZGVmaW5lIENPTlZfVE9fRVRIRVJfRkFJTEVECTB4MDIKKworLyoqCisgKiBwODAyMTFfY29udmVydF90b19ldGhlciAtIGNvbnZlcnNpb24gZnJvbSA4MDIuMTEgZnJhbWUgdG8gZXRoZXJuZXQgZnJhbWUKKyAqIEB3bGFuZGV2OiBwb2ludGVyIHRvIFdMQU4gZGV2aWNlCisgKiBAc2tiOiBwb2ludGVyIHRvIHNvY2tldCBidWZmZXIKKyAqCisgKiBSZXR1cm5zOiAwIGlmIGNvbnZlcnNpb24gc3VjY2VlZGVkCisgKgkgICAgQ09OVl9UT19FVEhFUl9GQUlMRUQgaWYgY29udmVyc2lvbiBmYWlsZWQKKyAqCSAgICBDT05WX1RPX0VUSEVSX1NLSVBQRUQgaWYgZnJhbWUgaXMgaWdub3JlZAorICovCitzdGF0aWMgaW50IHA4MDIxMV9jb252ZXJ0X3RvX2V0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDgwMjExX2hkcl9hMyAqaGRyOworCisJaGRyID0gKHN0cnVjdCBwODAyMTFfaGRyX2EzICopIHNrYi0+ZGF0YTsKKwlpZiAocDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXYsIGhkci0+ZmMpKQorCQlyZXR1cm4gQ09OVl9UT19FVEhFUl9TS0lQUEVEOworCisJLyogcGVyZm9ybSBtY2FzdCBmaWx0ZXJpbmc6IGFsbG93IG15IGxvY2FsIGFkZHJlc3MgdGhyb3VnaCBidXQgcmVqZWN0CisJICogYW55dGhpbmcgZWxzZSB0aGF0IGlzbid0IG11bHRpY2FzdAorCSAqLworCWlmICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWlmICghZXRoZXJfYWRkcl9lcXVhbF91bmFsaWduZWQod2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwKKwkJCQkJCWhkci0+YTEpKSB7CisJCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YTEpKQorCQkJCXJldHVybiBDT05WX1RPX0VUSEVSX1NLSVBQRUQ7CisJCX0KKwl9CisKKwlpZiAoc2tiX3A4MDIxMV90b19ldGhlcih3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IpID09IDApIHsKKwkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9wYWNrZXRzKys7CisJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZXRpZl9yeF9uaShza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwluZXRkZXZfZGJnKHdsYW5kZXYtPm5ldGRldiwgInA4MDIxMV9jb252ZXJ0X3RvX2V0aGVyIGZhaWxlZC5cbiIpOworCXJldHVybiBDT05WX1RPX0VUSEVSX0ZBSUxFRDsKK30KKworLyoqCisgKiBwODAyMTFuZXRkZXZfcnhfYmggLSBkZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGFsbCByZWNlaXZlZCBmcmFtZXMKKyAqCisgKiBAYXJnOiBwb2ludGVyIHRvIFdMQU4gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIChjYXN0IHRvIHVuc2lnbmVkIGxvbmcpCisgKi8KIHN0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90ICopIGFyZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAluZXRkZXZpY2VfdCAqZGV2ID0gd2xhbmRldi0+bmV0ZGV2OwotCXN0cnVjdCBwODAyMTFfaGRyX2EzICpoZHI7CiAKIAkvKiBMZXQncyBlbXB0eSBvdXIgb3VyIHF1ZXVlICovCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2xhbmRldi0+bnNkX3J4cSkpKSB7CkBAIC0yODQsMzcgKzMxNSw4IEBACiAJCQkJbmV0aWZfcnhfbmkoc2tiKTsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSB7Ci0JCQkJaGRyID0gKHN0cnVjdCBwODAyMTFfaGRyX2EzICopIHNrYi0+ZGF0YTsKLQkJCQlpZiAocDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXYsIGhkci0+ZmMpKSB7Ci0JCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlpZiAoIXA4MDIxMV9jb252ZXJ0X3RvX2V0aGVyKHdsYW5kZXYsIHNrYikpCiAJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCS8qIHBlcmZvcm0gbWNhc3QgZmlsdGVyaW5nICovCi0JCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJCQkJLyogYWxsb3cgbXkgbG9jYWwgYWRkcmVzcyB0aHJvdWdoICovCi0JCQkJCWlmIChtZW1jbXAKLQkJCQkJICAgIChoZHItPmExLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLAotCQkJCQkgICAgIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCQkJCQkvKiBidXQgcmVqZWN0IGFueXRoaW5nIGVsc2UgdGhhdAotCQkJCQkJICAgaXNuJ3QgbXVsdGljYXN0ICovCi0JCQkJCQlpZiAoIShoZHItPmExWzBdICYgMHgwMSkpIHsKLQkJCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoc2tiX3A4MDIxMV90b19ldGhlcgotCQkJCSAgICAod2xhbmRldiwgd2xhbmRldi0+ZXRoY29udiwgc2tiKSA9PSAwKSB7Ci0JCQkJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfcGFja2V0cysrOwotCQkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9ieXRlcyArPQotCQkJCQkgICAgc2tiLT5sZW47Ci0JCQkJCW5ldGlmX3J4X25pKHNrYik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlwcl9kZWJ1ZygicDgwMjExX3RvX2V0aGVyIGZhaWxlZC5cbiIpOwogCQkJfQogCQl9CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTM2Myw3ICszNjUsNyBAQAogCW1lbXNldCgmcDgwMjExX3dlcCwgMCwgc2l6ZW9mKHN0cnVjdCBwODAyMTFfbWV0YXdlcCkpOwogCiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkgewotCQlwcl9kZWJ1ZygiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOworCQluZXRkZXZfZGJnKG5ldGRldiwgImNhbGxlZCB3aGVuIHF1ZXVlIHN0b3BwZWQuXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMzgzLDggKzM4NSw3IEBACiAJCSAqLwogCQlpZiAoc2tiLT5wcm90b2NvbCAhPSBFVEhfUF84MDIxMV9SQVcpIHsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSAgICAgICAiVHggYXR0ZW1wdCBwcmlvciB0byBhc3NvY2lhdGlvbiwgZnJhbWUgZHJvcHBlZC5cbiIpOworCQkJbmV0ZGV2X25vdGljZShuZXRkZXYsICJUeCBhdHRlbXB0IHByaW9yIHRvIGFzc29jaWF0aW9uLCBmcmFtZSBkcm9wcGVkLlxuIik7CiAJCQl3bGFuZGV2LT5saW51eF9zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXN1bHQgPSAwOwogCQkJZ290byBmYWlsZWQ7CkBAIC00MDYsOCArNDA3LDggQEAKIAkJICAgICh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLAogCQkgICAgICZwODAyMTFfd2VwKSAhPSAwKSB7CiAJCQkvKiBjb252ZXJ0IGZhaWxlZCAqLwotCQkJcHJfZGVidWcoImV0aGVyX3RvXzgwMjExKCVkKSBmYWlsZWQuXG4iLAotCQkJCSB3bGFuZGV2LT5ldGhjb252KTsKKwkJCW5ldGRldl9kYmcobmV0ZGV2LCAiZXRoZXJfdG9fODAyMTEoJWQpIGZhaWxlZC5cbiIsCisJCQkJICAgd2xhbmRldi0+ZXRoY29udik7CiAJCQlyZXN1bHQgPSAxOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KQEAgLTQzMiwxNyArNDMzLDE3IEBACiAJCXJlc3VsdCA9IE5FVERFVl9UWF9PSzsKIAl9IGVsc2UgaWYgKHR4cmVzdWx0ID09IDEpIHsKIAkJLyogc3VjY2Vzcywgbm8gbW9yZSBhdmFpbCAqLwotCQlwcl9kZWJ1ZygidHhmcmFtZSBzdWNjZXNzLCBubyBtb3JlIGJ1ZnNcbiIpOworCQluZXRkZXZfZGJnKG5ldGRldiwgInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKIAkJLyogbmV0ZGV2LT50YnVzeSA9IDE7ICBkb24ndCBzZXQgaGVyZSwgaXJxaGRsciAqLwogCQkvKiAgIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBpdCAqLwogCQlyZXN1bHQgPSBORVRERVZfVFhfT0s7CiAJfSBlbHNlIGlmICh0eHJlc3VsdCA9PSAyKSB7CiAJCS8qIGFsbG9jIGZhaWx1cmUsIGRyb3AgZnJhbWUgKi8KLQkJcHJfZGVidWcoInR4ZnJhbWUgcmV0dXJuZWQgYWxsb2NfZmFpbFxuIik7CisJCW5ldGRldl9kYmcobmV0ZGV2LCAidHhmcmFtZSByZXR1cm5lZCBhbGxvY19mYWlsXG4iKTsKIAkJcmVzdWx0ID0gTkVUREVWX1RYX0JVU1k7CiAJfSBlbHNlIHsKIAkJLyogYnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeSwgZHJvcCBmcmFtZS4gKi8KLQkJcHJfZGVidWcoInR4ZnJhbWUgcmV0dXJuZWQgZnVsbCBvciBidXN5XG4iKTsKKwkJbmV0ZGV2X2RiZyhuZXRkZXYsICJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CiAJCXJlc3VsdCA9IE5FVERFVl9UWF9CVVNZOwogCX0KIApAQCAtNTYyLDcgKzU2Myw3IEBACiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCXU4ICptc2didWY7CiAKLQlwcl9kZWJ1ZygicngnZCBpb2N0bCwgY21kPSVkLCBsZW49JWRcbiIsIGNtZCwgcmVxLT5sZW4pOworCW5ldGRldl9kYmcoZGV2LCAicngnZCBpb2N0bCwgY21kPSVkLCBsZW49JWRcbiIsIGNtZCwgcmVxLT5sZW4pOwogCiAjaWZkZWYgU0lPQ0VUSFRPT0wKIAlpZiAoY21kID09IFNJT0NFVEhUT09MKSB7CkBAIC02ODMsOCArNjg0LDcgQEAKIAkgKiBjaGFuZ2UgdGhlIG5ldGRldiBhZGRyZXNzCiAJICovCiAJaWYgKHJlc3VsdCAhPSAwIHx8IHJlc3VsdGNvZGUtPmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiTG93LWxldmVsIGRyaXZlciBmYWlsZWQgZG90MTFyZXFfbWlic2V0KGRvdDExTUFDQWRkcmVzcykuXG4iKTsKKwkJbmV0ZGV2X2VycihkZXYsICJMb3ctbGV2ZWwgZHJpdmVyIGZhaWxlZCBkb3QxMXJlcV9taWJzZXQoZG90MTFNQUNBZGRyZXNzKS5cbiIpOwogCQlyZXN1bHQgPSAtRUFERFJOT1RBVkFJTDsKIAl9IGVsc2UgewogCQkvKiBldmVyeXRoaW5nJ3Mgb2ssIGNoYW5nZSB0aGUgYWRkciBpbiBuZXRkZXYgKi8KQEAgLTc2Myw3ICs3NjMsNyBAQAogCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB3aXBoeSBzdHJ1Y3QgKi8KIAl3aXBoeSA9IHdsYW5fY3JlYXRlX3dpcGh5KHBoeXNkZXYsIHdsYW5kZXYpOwogCWlmICh3aXBoeSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jIHdpcGh5LlxuIik7CisJCWRldl9lcnIocGh5c2RldiwgIkZhaWxlZCB0byBhbGxvYyB3aXBoeS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTc3MSw3ICs3NzEsNyBAQAogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IHdpcmVsZXNzX2RldiksICJ3bGFuJWQiLAogCQkJCWV0aGVyX3NldHVwKTsKIAlpZiAobmV0ZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2MgbmV0ZGV2LlxuIik7CisJCWRldl9lcnIocGh5c2RldiwgIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKIAkJd2xhbl9mcmVlX3dpcGh5KHdpcGh5KTsKIAkJcmVzdWx0ID0gMTsKIAl9IGVsc2UgewpAQCAtOTQ3LDcgKzk0Nyw4IEBACiAJZnR5cGUgPSBXTEFOX0dFVF9GQ19GVFlQRShmYyk7CiAJZnN0eXBlID0gV0xBTl9HRVRfRkNfRlNUWVBFKGZjKTsKICNpZiAwCi0JcHJfZGVidWcoInJ4X3R5cGVkcm9wIDogZnR5cGU9JWQgZnN0eXBlPSVkLlxuIiwgZnR5cGUsIGZzdHlwZSk7CisJbmV0ZGV2X2RiZyh3bGFuZGV2LT5uZXRkZXYsICJyeF90eXBlZHJvcCA6IGZ0eXBlPSVkIGZzdHlwZT0lZC5cbiIsCisJCSAgIGZ0eXBlLCBmc3R5cGUpOwogI2VuZGlmCiAJc3dpdGNoIChmdHlwZSkgewogCWNhc2UgV0xBTl9GVFlQRV9NR01UOgpAQCAtOTU2LDcgKzk1Nyw3IEBACiAJCQlkcm9wID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JCXByX2RlYnVnKCJyeCdkIG1nbXQ6XG4iKTsKKwkJbmV0ZGV2X2RiZyh3bGFuZGV2LT5uZXRkZXYsICJyeCdkIG1nbXQ6XG4iKTsKIAkJd2xhbmRldi0+cngubWdtdCsrOwogCQlzd2l0Y2ggKGZzdHlwZSkgewogCQljYXNlIFdMQU5fRlNUWVBFX0FTU09DUkVROgpAQCAtMTAxOCw3ICsxMDE5LDcgQEAKIAkJCWRyb3AgPSAxOwogCQkJYnJlYWs7CiAJCX0KLQkJcHJfZGVidWcoInJ4J2QgY3RsOlxuIik7CisJCW5ldGRldl9kYmcod2xhbmRldi0+bmV0ZGV2LCAicngnZCBjdGw6XG4iKTsKIAkJd2xhbmRldi0+cnguY3RsKys7CiAJCXN3aXRjaCAoZnN0eXBlKSB7CiAJCWNhc2UgV0xBTl9GU1RZUEVfUFNQT0xMOgpAQCAtMTA3MCwxOSArMTA3MSwxOSBAQAogCQkJd2xhbmRldi0+cnguZGF0YV9fY2ZhY2tfY2Zwb2xsKys7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9OVUxMOgotCQkJcHJfZGVidWcoInJ4J2QgZGF0YTpudWxsXG4iKTsKKwkJCW5ldGRldl9kYmcod2xhbmRldi0+bmV0ZGV2LCAicngnZCBkYXRhOm51bGxcbiIpOwogCQkJd2xhbmRldi0+cngubnVsbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0s6Ci0JCQlwcl9kZWJ1ZygicngnZCBkYXRhOmNmYWNrXG4iKTsKKwkJCW5ldGRldl9kYmcod2xhbmRldi0+bmV0ZGV2LCAicngnZCBkYXRhOmNmYWNrXG4iKTsKIAkJCXdsYW5kZXYtPnJ4LmNmYWNrKys7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9DRlBPTEw6Ci0JCQlwcl9kZWJ1ZygicngnZCBkYXRhOmNmcG9sbFxuIik7CisJCQluZXRkZXZfZGJnKHdsYW5kZXYtPm5ldGRldiwgInJ4J2QgZGF0YTpjZnBvbGxcbiIpOwogCQkJd2xhbmRldi0+cnguY2Zwb2xsKys7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEw6Ci0JCQlwcl9kZWJ1ZygicngnZCBkYXRhOmNmYWNrX2NmcG9sbFxuIik7CisJCQluZXRkZXZfZGJnKHdsYW5kZXYtPm5ldGRldiwgInJ4J2QgZGF0YTpjZmFja19jZnBvbGxcbiIpOwogCQkJd2xhbmRldi0+cnguY2ZhY2tfY2Zwb2xsKys7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTExMDMsOCArMTEwNCw4IEBACiAJaWYgKHdsYW5kZXYtPnR4X3RpbWVvdXQpIHsKIAkJd2xhbmRldi0+dHhfdGltZW91dCh3bGFuZGV2KTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbXBsZW1lbnQgdHhfdGltZW91dCBmb3IgJXNcbiIsCi0JCSAgICAgICB3bGFuZGV2LT5uc2RuYW1lKTsKKwkJbmV0ZGV2X3dhcm4obmV0ZGV2LCAiSW1wbGVtZW50IHR4X3RpbWVvdXQgZm9yICVzXG4iLAorCQkJICAgIHdsYW5kZXYtPm5zZG5hbWUpOwogCQluZXRpZl93YWtlX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwppbmRleCBjZGZkODA4Li43MjIxMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtOTUsNyArOTUsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICptc2didWYpCiB7Ci0JaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IHA4MDIxMW1zZyAqbXNnID0gKHN0cnVjdCBwODAyMTFtc2cgKikgbXNnYnVmOwogCiAJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBNU0QgaXMgcnVubmluZyAqLwpAQCAtMTA5LDkgKzEwOCw5IEBACiAJLyogQ2hlY2sgUGVybWlzc2lvbnMgKi8KIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikgJiYKIAkobXNnLT5tc2djb2RlICE9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBvbmx5IGRvdDExcmVxX21pYmdldCBhbGxvd2VkIGZvciBub24tcm9vdC5cbiIsCi0JCSAgICAgICB3bGFuZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiJXM6IG9ubHkgZG90MTFyZXFfbWliZ2V0IGFsbG93ZWQgZm9yIG5vbi1yb290LlxuIiwKKwkJCSAgIHdsYW5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIApAQCAtMTI5LDcgKzEyOCw3IEBACiAJCXdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIG1zZyk7CiAKIAljbGVhcl9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKTsKLQlyZXR1cm4gcmVzdWx0OwkvKiBpZiByZXN1bHQ9PTAsIG1zZy0+c3RhdHVzIHN0aWxsIG1heSBjb250YWluIGFuIGVyciAqLworCXJldHVybiAwOwkvKiBpZiByZXN1bHQ9PTAsIG1zZy0+c3RhdHVzIHN0aWxsIG1heSBjb250YWluIGFuIGVyciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCmluZGV4IDJiMGMyMzUuLmY3ODcwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwpAQCAtMjA1LDE5ICsyMDUsMjAgQEAKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKIAotCXByaW50ayhLRVJOX0lORk8gInByaXNtMl91c2I6IENoZWNraW5nIGZvciBmaXJtd2FyZSAlc1xuIiwKKwluZXRkZXZfaW5mbyh3bGFuZGV2LT5uZXRkZXYsICJwcmlzbTJfdXNiOiBDaGVja2luZyBmb3IgZmlybXdhcmUgJXNcbiIsCiAJICAgICAgIFBSSVNNMl9VU0JfRldGSUxFKTsKIAlpZiAocmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmd19lbnRyeSwKIAkJCQkgIFBSSVNNMl9VU0JfRldGSUxFLCAmdWRldi0+ZGV2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KKwkJbmV0ZGV2X2luZm8od2xhbmRldi0+bmV0ZGV2LAogCQkgICAgICAgInByaXNtMl91c2I6IEZpcm13YXJlIG5vdCBhdmFpbGFibGUsIGJ1dCBub3QgZXNzZW50aWFsXG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTworCQluZXRkZXZfaW5mbyh3bGFuZGV2LT5uZXRkZXYsCiAJCSAgICAgICAicHJpc20yX3VzYjogY2FuIGNvbnRpbnVlIHRvIHVzZSBjYXJkIGFueXdheS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJwcmlzbTJfdXNiOiAlcyB3aWxsIGJlIHByb2Nlc3NlZCwgc2l6ZSAlenVcbiIsCi0JICAgICAgIFBSSVNNMl9VU0JfRldGSUxFLCBmd19lbnRyeS0+c2l6ZSk7CisJbmV0ZGV2X2luZm8od2xhbmRldi0+bmV0ZGV2LAorCQkgICAgInByaXNtMl91c2I6ICVzIHdpbGwgYmUgcHJvY2Vzc2VkLCBzaXplICV6dVxuIiwKKwkJICAgIFBSSVNNMl9VU0JfRldGSUxFLCBmd19lbnRyeS0+c2l6ZSk7CiAJcHJpc20yX2Z3YXBwbHkoKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqKWZ3X2VudHJ5LT5kYXRhLCB3bGFuZGV2KTsKIAogCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwpAQCAtMjc1LDcgKzI3Niw3IEBACiAKIAkvKiBCdWlsZCB0aGUgUERBIHdlJ3JlIGdvaW5nIHRvIHVzZS4gKi8KIAlpZiAocmVhZF9jYXJkcGRhKCZwZGEsIHdsYW5kZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibG9hZF9jYXJkcGRhIGZhaWxlZCwgZXhpdGluZy5cbiIpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwgImxvYWRfY2FyZHBkYSBmYWlsZWQsIGV4aXRpbmcuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yOTksNyArMzAwLDcgQEAKIAkvKiBESURtc2dfZG90MTFyZXFfbWliZ2V0ICovCiAJcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsICZnZXRtc2cpOwogCWlmIChnZXRtc2cucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKQotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGZldGNoIFBSSS1TVVAgaW5mb1xuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LCAiQ291bGRuJ3QgZmV0Y2ggUFJJLVNVUCBpbmZvXG4iKTsKIAogCS8qIEFscmVhZHkgaW4gaG9zdCBvcmRlciAqLwogCXByaWlkLnJvbGUgPSAqZGF0YSsrOwpAQCAtMzExLDE5ICszMTIsMjEgQEAKIAkvKiBSZWFkIHRoZSBTMyBmaWxlICovCiAJcmVzdWx0ID0gcmVhZF9md2ZpbGUocmZwdHIpOwogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCB0aGUgZGF0YSBleGl0aW5nLlxuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgIkZhaWxlZCB0byByZWFkIHRoZSBkYXRhIGV4aXRpbmcuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJcmVzdWx0ID0gdmFsaWRhdGVfaWRlbnRpdHkoKTsKIAogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbmNvbXBhdGlibGUgZmlybXdhcmUgaW1hZ2UuXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsICJJbmNvbXBhdGlibGUgZmlybXdhcmUgaW1hZ2UuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKHN0YXJ0YWRkciA9PSAweDAwMDAwMDAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgUkFNIGRvd25sb2FkIGEgRmxhc2ggaW1hZ2UhXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiQ2FuJ3QgUkFNIGRvd25sb2FkIGEgRmxhc2ggaW1hZ2UhXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zMzMsMjAgKzMzNiwyMCBAQAogCS8qIERvIGFueSBwbHVnZ2luZyAqLwogCXJlc3VsdCA9IHBsdWdpbWFnZShmY2h1bmssIG5mY2h1bmtzLCBzM3BsdWcsIG5zM3BsdWcsICZwZGEpOwogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcGx1ZyBkYXRhLlxuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LCAiRmFpbGVkIHRvIHBsdWcgZGF0YS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBJbnNlcnQgYW55IENSQ3MgKi8KIAlpZiAoY3JjaW1hZ2UoZmNodW5rLCBuZmNodW5rcywgczNjcmMsIG5zM2NyYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaW5zZXJ0IGFsbCBDUkNzXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsICJGYWlsZWQgdG8gaW5zZXJ0IGFsbCBDUkNzXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJLyogV3JpdGUgdGhlIGltYWdlICovCiAJcmVzdWx0ID0gd3JpdGVpbWFnZSh3bGFuZGV2LCBmY2h1bmssIG5mY2h1bmtzKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJhbXdyaXRlIGltYWdlIGRhdGEuXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsICJGYWlsZWQgdG8gcmFtd3JpdGUgaW1hZ2UgZGF0YS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTM1NCw3ICszNTcsNyBAQAogCWZyZWVfY2h1bmtzKGZjaHVuaywgJm5mY2h1bmtzKTsKIAlmcmVlX3NyZWNzKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJwcmlzbTJfdXNiOiBmaXJtd2FyZSBsb2FkaW5nIGZpbmlzaGVkLlxuIik7CisJbmV0ZGV2X2luZm8od2xhbmRldi0+bmV0ZGV2LCAicHJpc20yX3VzYjogZmlybXdhcmUgbG9hZGluZyBmaW5pc2hlZC5cbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxMCw4ICs0MTMsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChjID49IG5mY2h1bmtzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiRmFpbGVkIHRvIGZpbmQgY2h1bmsgZm9yICIKKwkJCXByX2VycigiRmFpbGVkIHRvIGZpbmQgY2h1bmsgZm9yICIKIAkJCSAgICAgICAiY3JjcmVjWyVkXSwgYWRkcj0weCUwNnggbGVuPSVkICwgIgogCQkJICAgICAgICJhYm9ydGluZyBjcmMuXG4iLAogCQkJICAgICAgIGksIHMzY3JjW2ldLmFkZHIsIHMzY3JjW2ldLmxlbik7CkBAIC01MzcsOCArNTM5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKmNjbnQ7IGkrKykgewogCQljbGlzdFtpXS5kYXRhID0ga3phbGxvYyhjbGlzdFtpXS5sZW4sIEdGUF9LRVJORUwpOwogCQlpZiAoY2xpc3RbaV0uZGF0YSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlIHNwYWNlLCBleGl0dGluZy5cbiIpOworCQkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2Ugc3BhY2UsIGV4aXR0aW5nLlxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlwcl9kZWJ1ZygiY2h1bmtbJWRdOiBhZGRyPTB4JTA2eCBsZW49JWRcbiIsCkBAIC01NTYsOCArNTU3LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoKCh1bnNpZ25lZCBpbnQpaikgPj0gKCpjY250KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgInMzcmVjKGE9MHglMDZ4LGw9JWQpLCBubyBjaHVuayBtYXRjaCwgZXhpdGluZy5cbiIsCisJCQlwcl9lcnIoInMzcmVjKGE9MHglMDZ4LGw9JWQpLCBubyBjaHVuayBtYXRjaCwgZXhpdGluZy5cbiIsCiAJCQkgICAgICAgczNzdGFydCwgczNkYXRhW2ldLmxlbik7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNjI3LDggKzYyNyw3IEBACiAKIAl9CiAJaWYgKGN1cnJvZmYgPj0gKEhGQTM4NHhfUERBX0xFTl9NQVggLyAyKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJubyBlbmQgcmVjb3JkIGZvdW5kIG9yIGludmFsaWQgbGVuZ3RocyBpbiAiCisJCXByX2Vycigibm8gZW5kIHJlY29yZCBmb3VuZCBvciBpbnZhbGlkIGxlbmd0aHMgaW4gIgogCQkgICAgICAgIlBEUiBkYXRhLCBleGl0aW5nLiAleCAlZFxuIiwgY3Vycm9mZiwgcGRhLT5ucmVjKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNjg1LDggKzY4NCw3IEBACiAJCQlqID0gLTE7CiAJCX0KIAkJaWYgKGogPj0gcGRhLT5ucmVjICYmIGogIT0gLTEpIHsgLyogIGlmIG5vIG1hdGNoaW5nIFBEUiwgZmFpbCAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJ3YXJuaW5nOiBGYWlsZWQgdG8gZmluZCBQRFIgZm9yICIKKwkJCXByX3dhcm4oIndhcm5pbmc6IEZhaWxlZCB0byBmaW5kIFBEUiBmb3IgIgogCQkJICAgICAgICJwbHVncmVjIDB4JTA0eC5cbiIsIHMzcGx1Z1tpXS5pdGVtY29kZSk7CiAJCQljb250aW51ZTsJLyogYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgUERSICovCiAjaWYgMApAQCAtNzA0LDggKzcwMiw3IEBACiAKIAkJLyogVmFsaWRhdGUgcGx1ZyBsZW4gYWdhaW5zdCBQRFIgbGVuICovCiAJCWlmIChqICE9IC0xICYmIHMzcGx1Z1tpXS5sZW4gPCBsZTE2X3RvX2NwdShwZGEtPnJlY1tqXS0+bGVuKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImVycm9yOiBQbHVnIHZzLiBQRFIgbGVuIG1pc21hdGNoIGZvciAiCisJCQlwcl9lcnIoImVycm9yOiBQbHVnIHZzLiBQRFIgbGVuIG1pc21hdGNoIGZvciAiCiAJCQkgICAgICAgInBsdWdyZWMgMHglMDR4LCBhYm9ydCBwbHVnZ2luZy5cbiIsCiAJCQkgICAgICAgczNwbHVnW2ldLml0ZW1jb2RlKTsKIAkJCXJlc3VsdCA9IDE7CkBAIC03MjAsOCArNzE3LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoYyA+PSBuZmNodW5rcykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImVycm9yOiBGYWlsZWQgdG8gZmluZCBpbWFnZSBjaHVuayBmb3IgIgorCQkJcHJfZXJyKCJlcnJvcjogRmFpbGVkIHRvIGZpbmQgaW1hZ2UgY2h1bmsgZm9yICIKIAkJCSAgICAgICAicGx1Z3JlYyAweCUwNHguXG4iLCBzM3BsdWdbaV0uaXRlbWNvZGUpOwogCQkJcmVzdWx0ID0gMTsKIAkJCWNvbnRpbnVlOwpAQCAtODk4LDcgKzg5NCw3IEBACiAKIAkJCW5zM3BsdWcrKzsKIAkJCWlmIChuczNwbHVnID09IFMzUExVR19NQVgpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIlMzIHBsdWdyZWMgbGltaXQgcmVhY2hlZCAtIGFib3J0aW5nXG4iKTsKKwkJCQlwcl9lcnIoIlMzIHBsdWdyZWMgbGltaXQgcmVhY2hlZCAtIGFib3J0aW5nXG4iKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtOTE1LDcgKzkxMSw3IEBACiAJCQkJICAgICAgczNjcmNbbnMzY3JjXS5kb3dyaXRlKTsKIAkJCW5zM2NyYysrOwogCQkJaWYgKG5zM2NyYyA9PSBTM0NSQ19NQVgpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIlMzIGNyY3JlYyBsaW1pdCByZWFjaGVkIC0gYWJvcnRpbmdcbiIpOworCQkJCXByX2VycigiUzMgY3JjcmVjIGxpbWl0IHJlYWNoZWQgLSBhYm9ydGluZ1xuIik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlicmVhazsKQEAgLTkyOSw3ICs5MjUsNyBAQAogCQkJCSAgICAgIHMzaW5mb1tuczNpbmZvXS5sZW4sCiAJCQkJICAgICAgczNpbmZvW25zM2luZm9dLnR5cGUpOwogCQkJaWYgKCgoczNpbmZvW25zM2luZm9dLmxlbiAtIDEpICogc2l6ZW9mKHUxNikpID4gc2l6ZW9mKHMzaW5mb1tuczNpbmZvXS5pbmZvKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiIFMzIGluZm9yZWMgbGVuZ3RoIHRvbyBsb25nIC0gYWJvcnRpbmdcbiIpOworCQkJCXByX2VycigiUzMgaW5mb3JlYyBsZW5ndGggdG9vIGxvbmcgLSBhYm9ydGluZ1xuIik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAKQEAgLTk0Myw3ICs5MzksNyBAQAogCiAJCQluczNpbmZvKys7CiAJCQlpZiAobnMzaW5mbyA9PSBTM0lORk9fTUFYKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJTMyBpbmZvcmVjIGxpbWl0IHJlYWNoZWQgLSBhYm9ydGluZ1xuIik7CisJCQkJcHJfZXJyKCJTMyBpbmZvcmVjIGxpbWl0IHJlYWNoZWQgLSBhYm9ydGluZ1xuIik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlicmVhazsKQEAgLTk1Myw3ICs5NDksNyBAQAogCQkJczNkYXRhW25zM2RhdGFdLmRhdGEgPSAodWludDhfdCAqKSByZWNvcmQtPmRhdGE7CiAJCQluczNkYXRhKys7CiAJCQlpZiAobnMzZGF0YSA9PSBTM0RBVEFfTUFYKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJTMyBkYXRhcmVjIGxpbWl0IHJlYWNoZWQgLSBhYm9ydGluZ1xuIik7CisJCQkJcHJfZXJyKCJTMyBkYXRhcmVjIGxpbWl0IHJlYWNoZWQgLSBhYm9ydGluZ1xuIik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlicmVhazsKQEAgLTk5Nyw5ICs5OTMsOSBAQAogCWlmICghcnN0bXNnIHx8ICFyd3Jtc2cpIHsKIAkJa2ZyZWUocnN0bXNnKTsKIAkJa2ZyZWUocndybXNnKTsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAid3JpdGVpbWFnZTogbm8gbWVtb3J5IGZvciBmaXJtd2FyZSBkb3dubG9hZCwgIgotCQkgICAgICAgImFib3J0aW5nIGRvd25sb2FkXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAid3JpdGVpbWFnZTogbm8gbWVtb3J5IGZvciBmaXJtd2FyZSBkb3dubG9hZCwgIgorCQkJICAgImFib3J0aW5nIGRvd25sb2FkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMDQyLDE2ICsxMDM4LDE2IEBACiAKIAlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIHJzdG1zZyk7CiAJaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJ3cml0ZWltYWdlIHN0YXRlIGVuYWJsZSBmYWlsZWQgdy8gcmVzdWx0PSVkLCAiCi0JCSAgICAgICAiYWJvcnRpbmcgZG93bmxvYWRcbiIsIHJlc3VsdCk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgIndyaXRlaW1hZ2Ugc3RhdGUgZW5hYmxlIGZhaWxlZCB3LyByZXN1bHQ9JWQsICIKKwkJCSAgICJhYm9ydGluZyBkb3dubG9hZFxuIiwgcmVzdWx0KTsKIAkJZ290byBmcmVlX3Jlc3VsdDsKIAl9CiAJcmVzdWx0Y29kZSA9IHJzdG1zZy0+cmVzdWx0Y29kZS5kYXRhOwogCWlmIChyZXN1bHRjb2RlICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIndyaXRlaW1hZ2UoKS0+eHh4ZGxfc3RhdGUgbXNnIGluZGljYXRlcyBmYWlsdXJlLCAiCi0JCSAgICAgICAidy8gcmVzdWx0Y29kZT0lZCwgYWJvcnRpbmcgZG93bmxvYWQuXG4iLCByZXN1bHRjb2RlKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAid3JpdGVpbWFnZSgpLT54eHhkbF9zdGF0ZSBtc2cgaW5kaWNhdGVzIGZhaWx1cmUsICIKKwkJCSAgICJ3LyByZXN1bHRjb2RlPSVkLCBhYm9ydGluZyBkb3dubG9hZC5cbiIsIHJlc3VsdGNvZGUpOwogCQlyZXN1bHQgPSAxOwogCQlnb3RvIGZyZWVfcmVzdWx0OwogCX0KQEAgLTEwODUsMTUgKzEwODEsMTQgQEAKIAogCQkJLyogQ2hlY2sgdGhlIHJlc3VsdHMgKi8KIAkJCWlmIChyZXN1bHQpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIndyaXRlaW1hZ2UgY2h1bmsgd3JpdGUgZmFpbGVkIHcvIHJlc3VsdD0lZCwgIgotCQkJCSAgICAgICAiYWJvcnRpbmcgZG93bmxvYWRcbiIsIHJlc3VsdCk7CisJCQkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkJCSAgICJ3cml0ZWltYWdlIGNodW5rIHdyaXRlIGZhaWxlZCB3LyAiCisJCQkJCSAgICJyZXN1bHQ9JWQsIGFib3J0aW5nIGRvd25sb2FkXG4iLCByZXN1bHQpOwogCQkJCWdvdG8gZnJlZV9yZXN1bHQ7CiAJCQl9CiAJCQlyZXN1bHRjb2RlID0gcnN0bXNnLT5yZXN1bHRjb2RlLmRhdGE7CiAJCQlpZiAocmVzdWx0Y29kZSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAid3JpdGVpbWFnZSgpLT54eHhkbF93cml0ZSBtc2cgaW5kaWNhdGVzIGZhaWx1cmUsICIKKwkJCQlwcl9lcnIoIndyaXRlaW1hZ2UoKS0+eHh4ZGxfd3JpdGUgbXNnIGluZGljYXRlcyBmYWlsdXJlLCAiCiAJCQkJICAgICAgICJ3LyByZXN1bHRjb2RlPSVkLCBhYm9ydGluZyBkb3dubG9hZC5cbiIsCiAJCQkJICAgICAgIHJlc3VsdGNvZGUpOwogCQkJCXJlc3VsdCA9IDE7CkBAIC0xMTEwLDE2ICsxMTA1LDE2IEBACiAKIAlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIHJzdG1zZyk7CiAJaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJ3cml0ZWltYWdlIHN0YXRlIGRpc2FibGUgZmFpbGVkIHcvIHJlc3VsdD0lZCwgIgotCQkgICAgICAgImFib3J0aW5nIGRvd25sb2FkXG4iLCByZXN1bHQpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJ3cml0ZWltYWdlIHN0YXRlIGRpc2FibGUgZmFpbGVkIHcvIHJlc3VsdD0lZCwgIgorCQkJICAgImFib3J0aW5nIGRvd25sb2FkXG4iLCByZXN1bHQpOwogCQlnb3RvIGZyZWVfcmVzdWx0OwogCX0KIAlyZXN1bHRjb2RlID0gcnN0bXNnLT5yZXN1bHRjb2RlLmRhdGE7CiAJaWYgKHJlc3VsdGNvZGUgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAid3JpdGVpbWFnZSgpLT54eHhkbF9zdGF0ZSBtc2cgaW5kaWNhdGVzIGZhaWx1cmUsICIKLQkJICAgICAgICJ3LyByZXN1bHRjb2RlPSVkLCBhYm9ydGluZyBkb3dubG9hZC5cbiIsIHJlc3VsdGNvZGUpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJ3cml0ZWltYWdlKCktPnh4eGRsX3N0YXRlIG1zZyBpbmRpY2F0ZXMgZmFpbHVyZSwgIgorCQkJICAgIncvIHJlc3VsdGNvZGU9JWQsIGFib3J0aW5nIGRvd25sb2FkLlxuIiwgcmVzdWx0Y29kZSk7CiAJCXJlc3VsdCA9IDE7CiAJCWdvdG8gZnJlZV9yZXN1bHQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCmluZGV4IGE5OTA5ZjYuLmQxMTBiMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKQEAgLTEyOSw4ICsxMjksOCBAQAogCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKIAkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAogCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSwgMywgMikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiSG9zdFNjYW4gbm90IHN1cHBvcnRlZCB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKDwxLjMuMikuXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiSG9zdFNjYW4gbm90IHN1cHBvcnRlZCB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKDwxLjMuMikuXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKIAkJZ290byBleGl0OwpAQCAtMTQzLDggKzE0Myw4IEBACiAJCQkJCSAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCiAJCQkJCSAgJnJvYW1pbmdtb2RlKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLQkJICAgICAgIHJlc3VsdCk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgImdldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQlnb3RvIGV4aXQ7CkBAIC0xNTUsOCArMTU1LDggQEAKIAkJCQkJICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKIAkJCQkJICBIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLQkJICAgICAgIHJlc3VsdCk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQlnb3RvIGV4aXQ7CkBAIC0xNzYsOCArMTc2LDkgQEAKIAkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUEFTU0lWRVNDQU5DVFJMLAogCQkJCQkgICAgIHdvcmQpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJQYXNzaXZlIHNjYW4gbm90IHN1cHBvcnRlZCB3aXRoICIKLQkJCSAgICAgICAiY3VycmVudCBmaXJtd2FyZS4gICg8MS41LjEpXG4iKTsKKwkJCW5ldGRldl93YXJuKHdsYW5kZXYtPm5ldGRldiwKKwkJCQkgICAgIlBhc3NpdmUgc2NhbiBub3Qgc3VwcG9ydGVkIHdpdGggIgorCQkJCSAgICAiY3VycmVudCBmaXJtd2FyZS4gICg8MS41LjEpXG4iKTsKIAkJfQogCX0KIApAQCAtMjAzLDggKzIwNCw4IEBACiAJLyogRW5hYmxlIHRoZSBNQUMgcG9ydCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQgICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCAmd29yZCk7CiAJaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIgImdldGNvbmZpZyhQT1JUU1RBVFVTKSBmYWlsZWQuICIKLQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgImdldGNvbmZpZyhQT1JUU1RBVFVTKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCWdvdG8gZXhpdDsKQEAgLTIxNiw5ICsyMTcsOSBAQAogCQkJCQlIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKIAkJCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJzZXRjb25maWcoUk9BTUlOR01PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAotCQkJICAgICAgIHJlc3VsdCk7CisJCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCQkgICAic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJCQkgICByZXN1bHQpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwpAQCAtMjMyLDcgKzIzMyw3IEBACiAJCQkJCQl3b3JkYnVmLAogCQkJCQkJSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgT3duU1NJRC5cbiIpOworCQkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsICJGYWlsZWQgdG8gc2V0IE93blNTSUQuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKQEAgLTI0MSw3ICsyNDIsOCBAQAogCQkJCQkJd29yZGJ1ZiwKIAkJCQkJCUhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CiAJCWlmIChyZXN1bHQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBEZXNpcmVkU1NJRC5cbiIpOworCQkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkJICAgIkZhaWxlZCB0byBzZXQgRGVzaXJlZFNTSUQuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKQEAgLTI1MSw3ICsyNTMsOCBAQAogCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKIAkJCQkJCSAgSEZBMzg0eF9QT1JUVFlQRV9JQlNTKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENORlBPUlRUWVBFLlxuIik7CisJCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCQkgICAiRmFpbGVkIHRvIHNldCBDTkZQT1JUVFlQRS5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwpAQCAtMjYxLDE1ICsyNjQsMTYgQEAKIAkJCQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywKIAkJCQkJSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENSRUFURUlCU1MuXG4iKTsKKwkJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJCSAgICJGYWlsZWQgdG8gc2V0IENSRUFURUlCU1MuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJkcnZyX2VuYWJsZSgwKSBmYWlsZWQuICIKLQkJCSAgICAgICAicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkJICAgImRydnJfZW5hYmxlKDApIGZhaWxlZC4gcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwpAQCAtMjg4LDggKzI5Miw4IEBACiAJCQkJCUhGQTM4NHhfUklEX0hPU1RTQ0FOLCAmc2NhbnJlcSwKIAkJCQkJc2l6ZW9mKGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdCkpOwogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZXRjb25maWcoU0NBTlJFUVVFU1QpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAotCQkgICAgICAgcmVzdWx0KTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAic2V0Y29uZmlnKFNDQU5SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCWdvdG8gZXhpdDsKQEAgLTMxMCw4ICszMTQsOCBAQAogCWlmIChpc3RtcGVuYWJsZSkgewogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZHJ2cl9kaXNhYmxlKDApIGZhaWxlZC4gIgotCQkJICAgICAgICJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCQkgICAiZHJ2cl9kaXNhYmxlKDApIGZhaWxlZC4gcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwpAQCAtMzIyLDggKzMyNiw4IEBACiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKIAkJCQkJICByb2FtaW5nbW9kZSk7CiAJaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIgInNldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCi0JCSAgICAgICByZXN1bHQpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJzZXRjb25maWcoUk9BTU1PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CiAJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJZ290byBleGl0OwpAQCAtMzcyLDggKzM3Niw5IEBACiAJcmVxLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAogCWlmICghaHctPnNjYW5yZXN1bHRzKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3QxMXJlcV9zY2FuLlxuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyICIKKwkJCSAgICJhIHN1Y2Nlc3NmdWwgZG90MTFyZXFfc2Nhbi5cbiIpOwogCQlyZXN1bHQgPSAyOwogCQlyZXEtPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CiAJCWdvdG8gZXhpdDsKQEAgLTU1NSwxNCArNTYwLDE0IEBACiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKIAkJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOwogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENuZk93blNTSURcbiIpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwgIkZhaWxlZCB0byBzZXQgQ25mT3duU1NJRFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKIAkJCQkJYnl0ZWJ1ZiwKIAkJCQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBDbmZEZXNpcmVkU1NJRFxuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LCAiRmFpbGVkIHRvIHNldCBDbmZEZXNpcmVkU1NJRFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNTc0LDcgKzU3OSw4IEBACiAJd29yZCA9IG1zZy0+YmVhY29ucGVyaW9kLmRhdGE7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZBUEJDTmludCwgd29yZCk7CiAJaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgYmVhY29uIHBlcmlvZD0lZC5cbiIsIHdvcmQpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJGYWlsZWQgdG8gc2V0IGJlYWNvbiBwZXJpb2Q9JWQuXG4iLCB3b3JkKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC01ODIsNyArNTg4LDggQEAKIAl3b3JkID0gbXNnLT5kc2NoYW5uZWwuZGF0YTsKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUwsIHdvcmQpOwogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IGNoYW5uZWw9JWQuXG4iLCB3b3JkKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiRmFpbGVkIHRvIHNldCBjaGFubmVsPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAkvKiBCYXNpYyByYXRlcyAqLwpAQCAtNjEwLDcgKzYxNyw4IEBACiAKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIHdvcmQpOwogCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiRmFpbGVkIHRvIHNldCBiYXNpY3JhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNjM5LDEzICs2NDcsMTQgQEAKIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCB3b3JkKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCB3b3JkKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCB3b3JkKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LCAiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNjU5LDcgKzY2OCw4IEBACiAJLyogRW5hYmxlIHRoZSBQb3J0ICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CiAJaWYgKHJlc3VsdCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTcwNCw4ICs3MTQsOCBAQAogCSAqIHN0YXRlLgogCSAqLwogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiUERBIG1heSBvbmx5IGJlIHJlYWQgIiAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJQREEgbWF5IG9ubHkgYmUgcmVhZCBpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNzE3LDkgKzcyNyw5IEBACiAJCQkJCSAgICAgIG1zZy0+cGRhLmRhdGEsCiAJCQkJCSAgICAgIEhGQTM4NHhfUERBX0xFTl9NQVgpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKLQkJCSAgICAgICAicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkJICAgImhmYTM4NHhfZHJ2cl9yZWFkcGRhKCkgZmFpbGVkLCAiCisJCQkJICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwpAQCAtNzY2LDkgKzc3Niw5IEBACiAJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZSAqbXNnID0gbXNncDsKIAogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAicmFtZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKLQkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgInJhbWRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkgICAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CiAJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTgyNSw5ICs4MzUsOSBAQAogCXU4ICpidWY7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgInJhbWRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCi0JCSAgICAgICAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQluZXRkZXZfZXJyKHdsYW5kZXYtPm5ldGRldiwKKwkJCSAgICJyYW1kbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkJICAgImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC04ODUsOSArODk1LDkgQEAKIAlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUgKm1zZyA9IG1zZ3A7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKLQkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJICAgImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJCSAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtOTIwLDggKzkzMCw5IEBACiAJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOwogCQlyZXN1bHQgPSBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkKTsKIAkJaWYgKHJlc3VsdCAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTJzdGFfaWZzdGF0ZShmd2xvYWQpIGZhaWxlZCwiCi0JCQkgICAgICAgIlA4MDIxMUVOVU1fcmVzdWx0Y29kZT0lZFxuIiwgcmVzdWx0KTsKKwkJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LAorCQkJCSAgICJwcmlzbTJzdGFfaWZzdGF0ZShmd2xvYWQpIGZhaWxlZCwiCisJCQkJICAgIlA4MDIxMUVOVU1fcmVzdWx0Y29kZT0lZFxuIiwgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCXJlc3VsdCA9IC0xOwpAQCAtOTU4LDkgKzk2OSw5IEBACiAJdTggKmJ1ZjsKIAogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiZmxhc2hkbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgotCQkgICAgICAgImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJbmV0ZGV2X2Vycih3bGFuZGV2LT5uZXRkZXYsCisJCQkgICAiZmxhc2hkbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkJICAgImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQogCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC0xMTUzLDcgKzExNjQsNyBAQAogCiAJCX0KIAotCQlwcmludGsoS0VSTl9JTkZPICJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOworCQluZXRkZXZfaW5mbyh3bGFuZGV2LT5uZXRkZXYsICJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGV4aXQ7CkBAIC0xMjgyLDcgKzEyOTMsNyBAQAogCQl9CiAKIAkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpCi0JCQlwcmludGsoS0VSTl9JTkZPICJtb25pdG9yIG1vZGUgZW5hYmxlZFxuIik7CisJCQluZXRkZXZfaW5mbyh3bGFuZGV2LT5uZXRkZXYsICJtb25pdG9yIG1vZGUgZW5hYmxlZFxuIik7CiAKIAkJLyogU2V0IHRoZSBkcml2ZXIgc3RhdGUgKi8KIAkJLyogRG8gd2Ugd2FudCB0aGUgcHJpc20yIGhlYWRlcj8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaAppbmRleCAxOTBkMzkwLi5iNjJmZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC0xMDksNCArMTA5LDkgQEAKIHZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOwogdm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKKy8qIEludGVyZmFjZSBjYWxsYmFjayBmdW5jdGlvbnMsIHBhc3NpbmcgZGF0YSBiYWNrIHVwIHRvIHRoZSBjZmc4MDIxMSBsYXllciAqLwordm9pZCBwcmlzbTJfY29ubmVjdF9yZXN1bHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCBmYWlsZWQpOwordm9pZCBwcmlzbTJfZGlzY29ubmVjdGVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHByaXNtMl9yb2FtZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCmluZGV4IDliNWYzYjcuLjBmYjQyZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCkBAIC02NzIsNyArNjcyLDcgQEAKIAogCWlmICghaXNnZXQpCiAJCWlmICgoKnVpbnQzMikgJSAyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJBdHRlbXB0IHRvIHNldCBvZGQgbnVtYmVyICIKKwkJCW5ldGRldl93YXJuKHdsYW5kZXYtPm5ldGRldiwgIkF0dGVtcHQgdG8gc2V0IG9kZCBudW1iZXIgIgogCQkJICAgICAgICJGcmFnbWVudGF0aW9uVGhyZXNob2xkXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KIAkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKQEAgLTc0Miw3ICs3NDIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIlVuaGFuZGxlZCBESUQgMHglMDh4XG4iLCBtaWItPmRpZCk7CisJCW5ldGRldl9lcnIod2xhbmRldi0+bmV0ZGV2LCAiVW5oYW5kbGVkIERJRCAweCUwOHhcbiIsIG1pYi0+ZGlkKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKaW5kZXggZjljY2YyMy4uMjc4YjZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKQEAgLTEyMCwxMCArMTIwLDYgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCi12b2lkIHByaXNtMl9jb25uZWN0X3Jlc3VsdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4IGZhaWxlZCk7Ci12b2lkIHByaXNtMl9kaXNjb25uZWN0ZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXZvaWQgcHJpc20yX3JvYW1lZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotCiBzdGF0aWMgaW50IHByaXNtMnN0YV9vcGVuKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiBzdGF0aWMgaW50IHByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogc3RhdGljIHZvaWQgcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CkBAIC00MDUsOCArNDAxLDkgQEAKIAkJCWJyZWFrOwogCQl9CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBtZ210IHJlcXVlc3QgbWVzc2FnZSAweCUwOHgiLAotCQkgICAgICAgbXNnLT5tc2djb2RlKTsKKwkJbmV0ZGV2X3dhcm4od2xhbmRldi0+bmV0ZGV2LAorCQkJICAgICJVbmtub3duIG1nbXQgcmVxdWVzdCBtZXNzYWdlIDB4JTA4eCIsCisJCQkgICAgbXNnLT5tc2djb2RlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00NjksNyArNDY2LDcgQEAKIAkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9NU0RfUlVOTklORzoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCW5ldGRldl93YXJuKHdsYW5kZXYtPm5ldGRldiwKIAkJCSAgICAgICAiQ2Fubm90IGVudGVyIGZ3bG9hZCBzdGF0ZSBmcm9tIGVuYWJsZSBzdGF0ZSwiCiAJCQkgICAgICAgInlvdSBtdXN0IGRpc2FibGUgZmlyc3QuXG4iKTsKIAkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CkBAIC0xNDMxLDcgKzE0MjgsNyBAQAogCiAJZGVmYXVsdDoKIAkJLyogVGhpcyBpcyBiYWQsIElPIHBvcnQgcHJvYmxlbXM/ICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJbmV0ZGV2X3dhcm4od2xhbmRldi0+bmV0ZGV2LAogCQkgICAgICAgInVua25vd24gbGlua3N0YXR1cz0weCUwMnhcbiIsIGh3LT5saW5rX3N0YXR1cyk7CiAJCXJldHVybjsKIAl9CkBAIC0xNTEzLDcgKzE1MTAsNyBAQAogCiAJaWYgKGkgPj0gaHctPmF1dGhsaXN0LmNudCkgewogCQlpZiAocmVjLmFzc29jc3RhdHVzICE9IEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQluZXRkZXZfd2Fybih3bGFuZGV2LT5uZXRkZXYsCiAJImFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIG5vbi1hdXRoZW50aWNhdGVkIHN0YXRpb24uXG4iKTsKIAl9IGVsc2UgewogCQlody0+YXV0aGxpc3QuYXNzb2NbaV0gPQpAQCAtMTUyMSw3ICsxNTE4LDcgQEAKIAkJICAgICByZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DKTsKIAogCQlpZiAocmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQluZXRkZXZfd2Fybih3bGFuZGV2LT5uZXRkZXYsCiAiYXV0aGZhaWwgYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3IgYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CiAJfQogfQpAQCAtMTc5MSwxNiArMTc4OCwxNiBAQAogCQlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2LCBpbmYpOwogCQlicmVhazsKIAljYXNlIEhGQTM4NHhfSVRfS0VZSURDSEFOR0VEOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmhhbmRsZWQgSVRfS0VZSURDSEFOR0VEXG4iKTsKKwkJbmV0ZGV2X3dhcm4od2xhbmRldi0+bmV0ZGV2LCAiVW5oYW5kbGVkIElUX0tFWUlEQ0hBTkdFRFxuIik7CiAJCWJyZWFrOwogCWNhc2UgSEZBMzg0eF9JVF9BU1NPQ1JFUToKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5oYW5kbGVkIElUX0FTU09DUkVRXG4iKTsKKwkJbmV0ZGV2X3dhcm4od2xhbmRldi0+bmV0ZGV2LCAiVW5oYW5kbGVkIElUX0FTU09DUkVRXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBIRkEzODR4X0lUX01JQ0ZBSUxVUkU6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuaGFuZGxlZCBJVF9NSUNGQUlMVVJFXG4iKTsKKwkJbmV0ZGV2X3dhcm4od2xhbmRldi0+bmV0ZGV2LCAiVW5oYW5kbGVkIElUX01JQ0ZBSUxVUkVcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCW5ldGRldl93YXJuKHdsYW5kZXYtPm5ldGRldiwKIAkJICAgICAgICJVbmtub3duIGluZm8gdHlwZT0weCUwMnhcbiIsIGluZi0+aW5mb3R5cGUpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCmluZGV4IDQ3MzljMTQuLmU5MmJiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCkBAIC00LDEwMyArNCw1OCBAQAogI2luY2x1ZGUgInByaXNtMnN0YS5jIgogI2luY2x1ZGUgInByaXNtMmZ3LmMiCiAKLSNkZWZpbmUgUFJJU01fVVNCX0RFVklDRSh2aWQsIHBpZCwgbmFtZSkJXAotCVVTQl9ERVZJQ0UodmlkLCBwaWQpLAkJCVwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgbmFtZQorI2RlZmluZSBQUklTTV9ERVYodmlkLCBwaWQsIG5hbWUpCQlcCisJeyBVU0JfREVWSUNFKHZpZCwgcGlkKSwJCQlcCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIG5hbWUgfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3ByaXNtX3RibFtdID0gewotCXtQUklTTV9VU0JfREVWSUNFKDB4MDRiYiwgMHgwOTIyLCAiSU9EYXRhIEFpclBvcnQgV04tQjExL1VTQlMiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTIsICJDb3JlZ2EgV2lyZWxlc3MgTEFOIFVTQiBTdGljay0xMSIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA5YWEsIDB4MzY0MiwgIlByaXNtMi54IDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHgxNjY4LCAweDA0MjEsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UKLQkgKDB4MTkxNSwgMHgyMjM2LCAiTGlua3N5cyBXVVNCMTF2My4wIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHgwNjZiLCAweDIyMTMsICJMaW5rc3lzIFdVU0IxMnYxLjEgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UKLQkgKDB4MDY3YywgMHgxMDIyLCAiU2llbWVucyBTcGVlZFN0cmVhbSAxMDIyIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDA0OWYsIDB4MDAzMywKLQkgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHgwNDExLCAweDAwMTYsICJNZWxjbyBXTEktVVNCLVMxMSAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDA4ZGUsIDB4N2EwMSwgIlBSSVNNMjUgSUVFRSA4MDIuMTEgTWluaSBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHg4MDg2LCAweDExMTEsICJJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIgTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDBkOGUsIDB4N2EwMSwgIlBSSVNNMjUgSUVFRSA4MDIuMTEgTWluaSBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHgwNDVlLCAweDAwNmUsICJNaWNyb3NvZnQgTU41MTAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwOTY3LCAweDAyMDQsICJBY2VyIFdhcnBsaW5rIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDBjZGUsIDB4MDAwNSwgIlotQ29tIFhsNzM1IFdpcmVsZXNzIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UKLQkgKDB4NDEzYywgMHg4MTAwLCAiRGVsbCBUcnVlTW9iaWxlIDExODAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UKLQkgKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UKLQkgKDB4MGIzYiwgMHgxNjAyLCAiWnlYRUwgWnlBSVIgQjIwMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHgwYmFmLCAweDAwZWIsICJVU1JvYm90aWNzIFVTUjExMjAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UKLQkgKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDg0NiwgMHg0MTEwLCAiTmV0R2VhciBNQTExMSIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDAzZjMsIDB4MDAyMCwgIkFkYXB0ZWMgQVdOLTgwMjAgVVNCIFdMQU4gQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDI4MjEsIDB4MzMwMCwgIkFTVVMtV0wxNDAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDAsICJEV0wtMTIyIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDIwMDEsIDB4MzcwMiwgIkRXTC0xMjAgUmV2IEYgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHg1MGMyLCAweDQwMTMsICJBdmVyYXRlYyBVU0IgV0xBTiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MmMwMiwgMHgxNGVhLCAiUGxhbmV4IEdXLVVTMTFIIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgxMjRhLCAweDE2OGIsICJBaXJ2YXN0IFBSSVNNMyBXTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDgzYSwgMHgzNTAzLCAiVC1TaW51cyAxMTEgVVNCIFdMQU4gQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDI4MjEsIDB4MzMwMCwgIkhhd2tpbmcgSGlnaERCIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDA0MTEsIDB4MDA0NCwgIk1lbGNvIFdMSS1VU0ItS0IxMSAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MTY2OCwgMHg2MTA2LCAiUk9QRVggRnJlZUxhbiA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDEyNGEsIDB4NDAxNywgIlBoZWVuZXQgV0wtNTAzSUEgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBiYjIsIDB4MDMwMiwgIkFtYml0IE1pY3Jvc3lzdGVtcyBDb3JwLiIpfSwKLQl7UFJJU01fVVNCX0RFVklDRQotCSAoMHg5MDE2LCAweDE4MmQsICJTaXRlY29tIFdMLTAyMiA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFCi0JICgweDA1NDMsIDB4MGYwMSwgIlZpZXdTb25pYyBBaXJzeW5jIFVTQiBBZGFwdGVyIDExTWJwcyAoUHJpc20yLjUpIil9LAotCXsgLyogdGVybWluYXRvciAqLyB9CisJUFJJU01fREVWKDB4MDRiYiwgMHgwOTIyLCAiSU9EYXRhIEFpclBvcnQgV04tQjExL1VTQlMiKSwKKwlQUklTTV9ERVYoMHgwN2FhLCAweDAwMTIsICJDb3JlZ2EgV2lyZWxlc3MgTEFOIFVTQiBTdGljay0xMSIpLAorCVBSSVNNX0RFVigweDA5YWEsIDB4MzY0MiwgIlByaXNtMi54IDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MTY2OCwgMHgwNDA4LCAiQWN0aW9udGVjIFByaXNtMi41IDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MTY2OCwgMHgwNDIxLCAiQWN0aW9udGVjIFByaXNtMi41IDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MTkxNSwgMHgyMjM2LCAiTGlua3N5cyBXVVNCMTF2My4wIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MDY2YiwgMHgyMjEyLCAiTGlua3N5cyBXVVNCMTF2Mi41IDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MDY2YiwgMHgyMjEzLCAiTGlua3N5cyBXVVNCMTJ2MS4xIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MDQxMSwgMHgwMDE2LCAiTWVsY28gV0xJLVVTQi1TMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpLAorCVBSSVNNX0RFVigweDA4ZGUsIDB4N2EwMSwgIlBSSVNNMjUgSUVFRSA4MDIuMTEgTWluaSBVU0IgQWRhcHRlciIpLAorCVBSSVNNX0RFVigweDgwODYsIDB4MTExMSwgIkludGVsIFBSTy9XaXJlbGVzcyAyMDExQiBMQU4gVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwZDhlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwNDVlLCAweDAwNmUsICJNaWNyb3NvZnQgTU41MTAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwOTY3LCAweDAyMDQsICJBY2VyIFdhcnBsaW5rIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MGNkZSwgMHgwMDAyLCAiWi1Db20gNzI1LzcyNiBQcmlzbTIuNSBVU0IvVVNCIEludGVncmF0ZWQiKSwKKwlQUklTTV9ERVYoMHgwY2RlLCAweDAwMDUsICJaLUNvbSBYbDczNSBXaXJlbGVzcyA4MDIuMTFiIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4NDEzYywgMHg4MTAwLCAiRGVsbCBUcnVlTW9iaWxlIDExODAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwYjNiLCAweDE2MDEsICJBTExORVQgMDE5MyAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpLAorCVBSSVNNX0RFVigweDBiM2IsIDB4MTYwMiwgIlp5WEVMIFp5QUlSIEIyMDAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwYmFmLCAweDAwZWIsICJVU1JvYm90aWNzIFVTUjExMjAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwNDExLCAweDAwMjcsICJNZWxjbyBXTEktVVNCLUtTMTFHIDExTWJwcyBXTEFOIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwNGYxLCAweDMwMDksICJKVkMgTVAtWFA3MjUwIEJ1aWx0aW4gVVNCIFdMQU4gQWRhcHRlciIpLAorCVBSSVNNX0RFVigweDA4NDYsIDB4NDExMCwgIk5ldEdlYXIgTUExMTEiKSwKKwlQUklTTV9ERVYoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgyODIxLCAweDMzMDAsICJBU1VTLVdMMTQwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MjAwMSwgMHgzNzAwLCAiRFdMLTEyMiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpLAorCVBSSVNNX0RFVigweDIwMDEsIDB4MzcwMiwgIkRXTC0xMjAgUmV2IEYgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHg1MGMyLCAweDQwMTMsICJBdmVyYXRlYyBVU0IgV0xBTiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MmMwMiwgMHgxNGVhLCAiUGxhbmV4IEdXLVVTMTFIIFdMQU4gVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgxMjRhLCAweDE2OGIsICJBaXJ2YXN0IFBSSVNNMyBXTEFOIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MDgzYSwgMHgzNTAzLCAiVC1TaW51cyAxMTEgVVNCIFdMQU4gQWRhcHRlciIpLAorCVBSSVNNX0RFVigweDI4MjEsIDB4MzMwMCwgIkhhd2tpbmcgSGlnaERCIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MDQxMSwgMHgwMDQ0LCAiTWVsY28gV0xJLVVTQi1LQjExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgxNjY4LCAweDYxMDYsICJST1BFWCBGcmVlTGFuIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgxMjRhLCAweDQwMTcsICJQaGVlbmV0IFdMLTUwM0lBIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwYmIyLCAweDAzMDIsICJBbWJpdCBNaWNyb3N5c3RlbXMgQ29ycC4iKSwKKwlQUklTTV9ERVYoMHg5MDE2LCAweDE4MmQsICJTaXRlY29tIFdMLTAyMiA4MDIuMTFiIFVTQiBBZGFwdGVyIiksCisJUFJJU01fREVWKDB4MDU0MywgMHgwZjAxLAorCQkiVmlld1NvbmljIEFpcnN5bmMgVVNCIEFkYXB0ZXIgMTFNYnBzIChQcmlzbTIuNSkiKSwKKwlQUklTTV9ERVYoMHgwNjdjLCAweDEwMjIsCisJCSJTaWVtZW5zIFNwZWVkU3RyZWFtIDEwMjIgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKSwKKwlQUklTTV9ERVYoMHgwNDlmLCAweDAwMzMsCisJCSJDb21wYXEvSW50ZWwgVzEwMCBQUk8vV2lyZWxlc3MgMTFNYnBzIG11bHRpcG9ydCBXTEFOIEFkYXB0ZXIiKSwKKwl7IH0gLyogdGVybWluYXRvciAqLwogfTsKLQogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9wcmlzbV90YmwpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20yc3RhX3Byb2JlX3VzYgotKgotKiBQcm9iZSByb3V0aW5lIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbS4KLSoKLSogQXJndW1lbnRzOgotKglkZXYJCXB0ciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3QKLSoJaWZudW0JCWludGVyZmFjZSBudW1iZXIgYmVpbmcgb2ZmZXJlZAotKgotKiBSZXR1cm5zOgotKglOVUxMCQktIHdlJ3JlIG5vdCBjbGFpbWluZyB0aGUgZGV2aWNlK2ludGVyZmFjZQotKglub24tTlVMTAktIHdlIGFyZSBjbGFpbWluZyB0aGUgZGV2aWNlK2ludGVyZmFjZSBhbmQKLSoJCQkgIHRoaXMgaXMgYSBwdHIgdG8gdGhlIGRhdGEgd2Ugd2FudCBiYWNrCi0qCQkJICB3aGVuIGRpc2Nvbm5lY3QgaXMgY2FsbGVkLgotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJSSdtIG5vdCBzdXJlLCBhc3N1bWUgaXQncyBpbnRlcnJ1cHQuCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgcHJpc20yc3RhX3Byb2JlX3VzYihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTE0MSw3ICs5Niw4IEBACiAJCQkJCSAgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAwKTsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCQlyZXN1bHQgPSAtRUlPOwotCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIpOworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJImhmYTM4NHhfY29yZXJlc2V0KCkgZmFpbGVkLlxuIik7CiAJCQlnb3RvIGZhaWxlZF9yZXNldDsKIAkJfQogCX0KQEAgLTE3NiwzMSArMTMyLDExIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMnN0YV9kaXNjb25uZWN0X3VzYgotKgotKiBDYWxsZWQgd2hlbiBhIGRldmljZSBwcmV2aW91c2x5IGNsYWltZWQgYnkgcHJvYmUgaXMgcmVtb3ZlZAotKiBmcm9tIHRoZSBVU0IuCi0qCi0qIEFyZ3VtZW50czoKLSoJZGV2CQlwdHIgdG8gdGhlIHVzYl9kZXZpY2Ugc3RydWN0Ci0qCXB0cgkJcHRyIHJldHVybmVkIGJ5IHByb2JlKCkgd2hlbiB0aGUgZGV2aWNlCi0qICAgICAgICAgICAgICAgICAgICAgICB3YXMgY2xhaW1lZC4KLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJcHJvY2VzcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfZGlzY29ubmVjdF91c2Ioc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXY7CiAKIAl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0KIAlpZiAod2xhbmRldiAhPSBOVUxMKSB7CiAJCUxJU1RfSEVBRChjbGVhbmxpc3QpOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKQEAgLTI5Miw2ICsyMjgsNyBAQAogewogCWhmYTM4NHhfdCAqaHcgPSBOVUxMOwogCXdsYW5kZXZpY2VfdCAqd2xhbmRldjsKKwogCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAlpZiAoIXdsYW5kZXYpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzE0LDYgKzI1MSw3IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF90ICpodyA9IE5VTEw7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2OworCiAJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCWlmICghd2xhbmRldikKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9UT0RPCmluZGV4IDM5MmIyOWQuLjdlYjk5MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9UT0RPCkBAIC02LDggKzYsNyBAQAogVE9ETzoKIC0gY2xlYW4gdXBzCiAtIHNvcnQgb3V0IGR1cCBpZHMgd2l0aCBTaVMgZHJpdmVyCi0tIHJlbW92ZSB1c2VsZXNzL3dyb25nL3VudXNlZCAjaWZkZWYvY29kZS8uLi4KLS0gZml4IHByaW50ayB1c2FnZXMKKy0gcmVtb3ZlIHVzZWxlc3Mvd3JvbmcvdW51c2VkIGNvZGUuLi4KIC0gZ2V0IHJpZCBvZiBub24tbGludXggcmVsYXRlZCBzdHVmZgogCiBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW4uaAppbmRleCA5NWNlOTcwLi44NTA3OWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW4uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW4uaApAQCAtNCwxMiArNCw4IEBACiAjaW5jbHVkZSAiWEdJZmIuaCIKICNpbmNsdWRlICJ2Yl9kZWYuaCIKIAotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1hHSV80MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hHSV80MiAgICAgIDB4MDQyCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9YR0lfMjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9YR0lfMjcgICAgICAweDAyNwotI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4Z2lmYl9wY2lfdGFibGVbXSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1hHSSwgUENJX0RFVklDRV9JRF9YR0lfMjApfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfbWFpbl8yNi5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluXzI2LmMKaW5kZXggNDY2ODA0NjguLmY4MmYwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfbWFpbl8yNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfbWFpbl8yNi5jCkBAIC02Niw2ICs2Niw3IEBACiAJdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXggPSAwLCBDbG9ja0luZGV4ID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggPSAwOwogCWludCBDbG9jazsKKwogCUluaXRUbzMzMFBvaW50ZXIoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSwgWEdJX1ByKTsKIAogCVhHSV9TZWFyY2hNb2RlSUQoTW9kZU5vLCAmTW9kZUlkSW5kZXgpOwpAQCAtOTUsNiArOTYsNyBAQAogCXVuc2lnbmVkIHNob3J0IEhSRSwgSEJFLCBIUlMsIEhERTsKIAl1bnNpZ25lZCBjaGFyIHNyX2RhdGEsIGNyX2RhdGEsIGNyX2RhdGEyOwogCWludCBCLCBDLCBELCBGLCB0ZW1wLCBqOworCiAJSW5pdFRvMzMwUG9pbnRlcihId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlLCBYR0lfUHIpOwogCWlmICghWEdJX1NlYXJjaE1vZGVJRChNb2RlTm8sICZNb2RlSWRJbmRleCkpCiAJCXJldHVybiAwOwpAQCAtMjE2LDYgKzIxOCw3IEBACiAJWEdJX1ByLT5QM2M4ID0gQmFzZUFkZHIgKyAweDE4OwogCVhHSV9Qci0+UDNjOSA9IEJhc2VBZGRyICsgMHgxOTsKIAlYR0lfUHItPlAzZGEgPSBCYXNlQWRkciArIDB4MkE7CisJWEdJX1ByLT5QYXJ0MFBvcnQgPSBCYXNlQWRkciArIFhHSV9DUlQyX1BPUlRfMDA7CiAJLyogRGlnaXRhbCB2aWRlbyBpbnRlcmZhY2UgcmVnaXN0ZXJzIChMQ0QpICovCiAJWEdJX1ByLT5QYXJ0MVBvcnQgPSBCYXNlQWRkciArIFNJU19DUlQyX1BPUlRfMDQ7CiAJLyogMzAxIFRWIEVuY29kZXIgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZGVmLmgKaW5kZXggOTQ5ZjBlNS4uNDgxZWIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2RlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9kZWYuaApAQCAtNDQsMTIgKzQ0LDEwIEBACiAjZGVmaW5lIFNldExDRHRvTm9uRXhwYW5kaW5nIDB4MDAxMAogI2RlZmluZSBTZXRMQ0REdWFsTGluayAgICAgICAweDAxMDAKICNkZWZpbmUgU2V0TENETG93UmVzb2x1dGlvbiAgMHgwMjAwCi0jZGVmaW5lIFNldExDRFN0ZE1vZGUgICAgICAgIDB4MDQwMAogCiAvKiBMQ0QgQ2FwYWJpbGl0eSBzaGFtcG9vICovCiAjZGVmaW5lIERlZmF1bHRMQ0RDYXAgICAgICAgIDB4ODBlYQogI2RlZmluZSBFbmFibGVMQ0QyNGJwcCAgICAgICAweDAwMDQgLyogZGVmYXVsdCAqLwotI2RlZmluZSBEaXNhYmxlTENEMjRicHAgICAgICAweDAwMDAKICNkZWZpbmUgTENEUG9sYXJpdHkgICAgICAgICAgMHgwMGMwIC8qIGRlZmF1bHQ6IFN5bmNOTiAqLwogI2RlZmluZSBYR0lfTENERHVhbExpbmsgICAgICAweDAxMDAKICNkZWZpbmUgRW5hYmxlU3BlY3RydW0gICAgICAgMHgwMjAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuYwppbmRleCAyMTU0MTcyLi5mZjIxMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmMKQEAgLTEzMCw2ICsxMzAsNyBAQAogCQkJdW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBQM2Q0ID0gUDNjNCArIDB4MTA7CisKIAlwVkJJbmZvLT5yYW1fdHlwZSA9IFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwogCVhHSU5ld19TZXRNZW1vcnlDbG9jayhwVkJJbmZvKTsKIApAQCAtMzg5LDYgKzM5MCw3IEBACiAJdTggc2hpZnRfZmFjdG9yLCB1OCBtYXNrMSwgdTggbWFzazIpCiB7CiAJdTggajsKKwogCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKIAkJdGVtcDIgfD0gKCgoc2VlZCA+PiAoMiAqIGopKSAmIDB4MDMpIDw8IHNoaWZ0X2ZhY3Rvcik7CiAJCXhnaWZiX3JlZ19zZXQoUDNkNCwgcmVnLCB0ZW1wMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwppbmRleCA0MDBjNzI2Li44Nzk1ZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogCWlmIChDaGlwVHlwZSA9PSBYRzI3KSB7CiAJCXVuc2lnbmVkIGNoYXIgdGVtcDsKKwogCQlwVkJJbmZvLT5NQ0xLRGF0YSA9IFhHSTI3TmV3X01DTEtEYXRhOwogCQlwVkJJbmZvLT5DUjQwID0gWEdJMjdfY3I0MTsKIAkJcFZCSW5mby0+WEdJTmV3X0NSOTcgPSAweGMxOwpAQCAtNTIyMiw2ICs1MjIzLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCB0ZW1wOwogCiAJaW50IGk7CisKIAl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MDUsIDB4ODYpOwogCiAJLyogdG8gZml4IFhHNDIgc2luZ2xlIExDRCBzZW5zZSB0byBDUlQrTENEICovCkBAIC01NDYwLDYgKzU0NjIsNyBAQAogCXVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4OwogCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyBWQklORjsKIAlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8gPSAmVkJJTkY7CisKIAlwVkJJbmZvLT5JRl9ERUZfTFZEUyA9IDA7CiAKIAlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzIwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZnYXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaAppbmRleCAyNjQzNTE0Li42MWZhMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaApAQCAtNSw3ICs1LDYgQEAKICNpbmNsdWRlICIuLi8uLi92aWRlby9mYmRldi9zaXMvdmdhdHlwZXMuaCIKICNpbmNsdWRlICIuLi8uLi92aWRlby9mYmRldi9zaXMvc2lzLmgiCQkvKiBmb3IgTENEX1RZUEUgKi8KIAotI2lmbmRlZiBYR0lfVkJfQ0hJUF9UWVBFCiBlbnVtIFhHSV9WQl9DSElQX1RZUEUgewogCVZCX0NISVBfTGVnYWN5ID0gMCwKIAlWQl9DSElQXzMwMSwKQEAgLTE5LDcgKzE4LDYgQEAKIAlWQl9DSElQX1VOS05PV04sIC8qIG90aGVyIHZpZGVvIGJyaWRnZSBvciBubyB2aWRlbyBicmlkZ2UgKi8KIAlNQVhfVkJfQ0hJUAogfTsKLSNlbmRpZgogCiBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIHVsRXh0ZXJuYWxDaGlwOyAvKiBOTyBWQiBvciBvdGhlciB2aWRlbyBicmlkZ2UqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hpbGx5YnVzL3hpbGx5YnVzLmggYi9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXMuaAppbmRleCBlNWU5MWQ2Li43OGE3NDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXMuaApAQCAtMTE2LDcgKzExNiw2IEBACiAJICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCByZXNvdXJjZSByZXM7IC8qIE9GIGRldmljZXMgb25seSAqLwogCXN0cnVjdCB4aWxseV9lbmRwb2ludF9oYXJkd2FyZSAqZXBodzsKIAogCXN0cnVjdCBsaXN0X2hlYWQgZXBfbGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94aWxseWJ1cy94aWxseWJ1c19jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXNfY29yZS5jCmluZGV4IGIwYTY2OTYuLmZlOGY5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94aWxseWJ1cy94aWxseWJ1c19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hpbGx5YnVzL3hpbGx5YnVzX2NvcmUuYwpAQCAtMjA5NCw3ICsyMDk0LDcgQEAKIHsKIAlzdHJ1Y3QgeGlsbHlfZW5kcG9pbnQgKmVuZHBvaW50OwogCi0JZW5kcG9pbnQgPSBremFsbG9jKHNpemVvZigqZW5kcG9pbnQpLCBHRlBfS0VSTkVMKTsKKwllbmRwb2ludCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZW5kcG9pbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVuZHBvaW50KSB7CiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4gQWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXNfb2YuYyBiL2RyaXZlcnMvc3RhZ2luZy94aWxseWJ1cy94aWxseWJ1c19vZi5jCmluZGV4IDIzYTYwOWIuLjQ2ZWEwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94aWxseWJ1cy94aWxseWJ1c19vZi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94aWxseWJ1cy94aWxseWJ1c19vZi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSAieGlsbHlidXMuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxseWJ1cyBkcml2ZXIgZm9yIE9wZW4gRmlybXdhcmUiKTsKQEAgLTEyMyw2ICsxMjQsNyBAQAogCXN0cnVjdCB4aWxseV9lbmRwb2ludCAqZW5kcG9pbnQ7CiAJaW50IHJjID0gMDsKIAlpbnQgaXJxOworCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJc3RydWN0IHhpbGx5X2VuZHBvaW50X2hhcmR3YXJlICplcGh3ID0gJm9mX2h3OwogCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsICJkbWEtY29oZXJlbnQiKSkKQEAgLTEzNSwzOCArMTM3LDI2IEBACiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBlbmRwb2ludCk7CiAKLQlyYyA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5vZl9ub2RlLCAwLCAmZW5kcG9pbnQtPnJlcyk7CisJcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldi0+b2Zfbm9kZSwgMCwgJnJlcyk7CiAJaWYgKHJjKSB7CiAJCWRldl93YXJuKGVuZHBvaW50LT5kZXYsCiAJCQkgIkZhaWxlZCB0byBvYnRhaW4gZGV2aWNlIHRyZWUgcmVzb3VyY2VcbiIpOwotCQlnb3RvIGZhaWxlZF9yZXF1ZXN0X3JlZ2lvbnM7CisJCXJldHVybiByYzsKIAl9CiAKLQlpZiAgKCFyZXF1ZXN0X21lbV9yZWdpb24oZW5kcG9pbnQtPnJlcy5zdGFydCwKLQkJCQkgcmVzb3VyY2Vfc2l6ZSgmZW5kcG9pbnQtPnJlcyksIHhpbGx5bmFtZSkpIHsKLQkJZGV2X2VycihlbmRwb2ludC0+ZGV2LAotCQkJInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQuIEFib3J0aW5nLlxuIik7Ci0JCXJjID0gLUVCVVNZOwotCQlnb3RvIGZhaWxlZF9yZXF1ZXN0X3JlZ2lvbnM7Ci0JfQorCWVuZHBvaW50LT5yZWdpc3RlcnMgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCAmcmVzKTsKIAotCWVuZHBvaW50LT5yZWdpc3RlcnMgPSBvZl9pb21hcChkZXYtPm9mX25vZGUsIDApOwotCWlmICghZW5kcG9pbnQtPnJlZ2lzdGVycykgewotCQlkZXZfZXJyKGVuZHBvaW50LT5kZXYsCi0JCQkiRmFpbGVkIHRvIG1hcCBJL08gbWVtb3J5LiBBYm9ydGluZy5cbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZmFpbGVkX2lvbWFwMDsKLQl9CisJaWYgKElTX0VSUihlbmRwb2ludC0+cmVnaXN0ZXJzKSkKKwkJcmV0dXJuIFBUUl9FUlIoZW5kcG9pbnQtPnJlZ2lzdGVycyk7CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm9mX25vZGUsIDApOwogCi0JcmMgPSByZXF1ZXN0X2lycShpcnEsIHhpbGx5YnVzX2lzciwgMCwgeGlsbHluYW1lLCBlbmRwb2ludCk7CisJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCB4aWxseWJ1c19pc3IsIDAsIHhpbGx5bmFtZSwgZW5kcG9pbnQpOwogCiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoZW5kcG9pbnQtPmRldiwKIAkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXIuIEFib3J0aW5nLlxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBmYWlsZWRfcmVnaXN0ZXJfaXJxOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyYyA9IHhpbGx5YnVzX2VuZHBvaW50X2Rpc2NvdmVyeShlbmRwb2ludCk7CkBAIC0xNzQsMTggKzE2NCw4IEBACiAJaWYgKCFyYykKIAkJcmV0dXJuIDA7CiAKLQlmcmVlX2lycShpcnEsIGVuZHBvaW50KTsKLQotZmFpbGVkX3JlZ2lzdGVyX2lycToKLQlpb3VubWFwKGVuZHBvaW50LT5yZWdpc3RlcnMpOwotZmFpbGVkX2lvbWFwMDoKLQlyZWxlYXNlX21lbV9yZWdpb24oZW5kcG9pbnQtPnJlcy5zdGFydCwKLQkJCSAgIHJlc291cmNlX3NpemUoJmVuZHBvaW50LT5yZXMpKTsKLQotZmFpbGVkX3JlcXVlc3RfcmVnaW9uczoKIAl4aWxseWJ1c19kb19jbGVhbnVwKCZlbmRwb2ludC0+Y2xlYW51cCwgZW5kcG9pbnQpOwogCi0Ja2ZyZWUoZW5kcG9pbnQpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTkzLDIwICsxNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb3AtPmRldjsKIAlzdHJ1Y3QgeGlsbHlfZW5kcG9pbnQgKmVuZHBvaW50ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+b2Zfbm9kZSwgMCk7CiAKIAl4aWxseWJ1c19lbmRwb2ludF9yZW1vdmUoZW5kcG9pbnQpOwogCi0JZnJlZV9pcnEoaXJxLCBlbmRwb2ludCk7Ci0KLQlpb3VubWFwKGVuZHBvaW50LT5yZWdpc3RlcnMpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihlbmRwb2ludC0+cmVzLnN0YXJ0LAotCQkJICAgcmVzb3VyY2Vfc2l6ZSgmZW5kcG9pbnQtPnJlcykpOwotCiAJeGlsbHlidXNfZG9fY2xlYW51cCgmZW5kcG9pbnQtPmNsZWFudXAsIGVuZHBvaW50KTsKIAotCWtmcmVlKGVuZHBvaW50KTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXNfcGNpZS5jIGIvZHJpdmVycy9zdGFnaW5nL3hpbGx5YnVzL3hpbGx5YnVzX3BjaWUuYwppbmRleCA1MTQyNmQ4Li5hNGZlNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGlsbHlidXMveGlsbHlidXNfcGNpZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94aWxseWJ1cy94aWxseWJ1c19wY2llLmMKQEAgLTE0MSwzOCArMTQxLDMyIEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZW5kcG9pbnQpOwogCi0JcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKKworCWlmIChyYykgeworCQlkZXZfZXJyKGVuZHBvaW50LT5kZXYsCisJCQkicGNpbV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkLiBBYm9ydGluZy5cbiIpOworCQlyZXR1cm4gcmM7CisJfQogCiAJLyogTDBzIGhhcyBjYXVzZWQgcGFja2V0IGRyb3BzLiBObyBwb3dlciBzYXZpbmcsIHRoYW5rIHlvdS4gKi8KIAogCXBjaV9kaXNhYmxlX2xpbmtfc3RhdGUocGRldiwgUENJRV9MSU5LX1NUQVRFX0wwUyk7CiAKLQlpZiAocmMpIHsKLQkJZGV2X2VycihlbmRwb2ludC0+ZGV2LAotCQkJInBjaV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkLiBBYm9ydGluZy5cbiIpOwotCQlnb3RvIG5vX2VuYWJsZTsKLQl9Ci0KIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKIAkJZGV2X2VycihlbmRwb2ludC0+ZGV2LAogCQkJIkluY29ycmVjdCBCQVIgY29uZmlndXJhdGlvbi4gQWJvcnRpbmcuXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGJhZF9iYXI7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCB4aWxseW5hbWUpOworCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDB4MDEsIHhpbGx5bmFtZSk7CiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoZW5kcG9pbnQtPmRldiwKLQkJCSJwY2lfcmVxdWVzdF9yZWdpb25zKCkgZmFpbGVkLiBBYm9ydGluZy5cbiIpOwotCQlnb3RvIGZhaWxlZF9yZXF1ZXN0X3JlZ2lvbnM7CisJCQkicGNpbV9pb21hcF9yZWdpb25zKCkgZmFpbGVkLiBBYm9ydGluZy5cbiIpOworCQlyZXR1cm4gcmM7CiAJfQogCi0JZW5kcG9pbnQtPnJlZ2lzdGVycyA9IHBjaV9pb21hcChwZGV2LCAwLCAxMjgpOwotCWlmICghZW5kcG9pbnQtPnJlZ2lzdGVycykgewotCQlkZXZfZXJyKGVuZHBvaW50LT5kZXYsICJGYWlsZWQgdG8gbWFwIEJBUiAwLiBBYm9ydGluZy5cbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZmFpbGVkX2lvbWFwMDsKLQl9CisJZW5kcG9pbnQtPnJlZ2lzdGVycyA9IHBjaW1faW9tYXBfdGFibGUocGRldilbMF07CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtMTgwLDE2ICsxNzQsMTUgQEAKIAlpZiAocGNpX2VuYWJsZV9tc2kocGRldikpIHsKIAkJZGV2X2VycihlbmRwb2ludC0+ZGV2LAogCQkJIkZhaWxlZCB0byBlbmFibGUgTVNJIGludGVycnVwdHMuIEFib3J0aW5nLlxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBmYWlsZWRfZW5hYmxlX21zaTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCB4aWxseWJ1c19pc3IsIDAsIHhpbGx5bmFtZSwgZW5kcG9pbnQpOworCXJjID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBwZGV2LT5pcnEsIHhpbGx5YnVzX2lzciwgMCwKKwkJCSAgICAgIHhpbGx5bmFtZSwgZW5kcG9pbnQpOwogCiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoZW5kcG9pbnQtPmRldiwKIAkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgTVNJIGhhbmRsZXIuIEFib3J0aW5nLlxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBmYWlsZWRfcmVnaXN0ZXJfbXNpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKgpAQCAtMjAzLDggKzE5Niw3IEBACiAJCWVuZHBvaW50LT5kbWFfdXNpbmdfZGFjID0gMDsKIAllbHNlIHsKIAkJZGV2X2VycihlbmRwb2ludC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBETUEgbWFzay4gQWJvcnRpbmcuXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGZhaWxlZF9kbWFtYXNrOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyYyA9IHhpbGx5YnVzX2VuZHBvaW50X2Rpc2NvdmVyeShlbmRwb2ludCk7CkBAIC0yMTIsMjIgKzIwNCw4IEBACiAJaWYgKCFyYykKIAkJcmV0dXJuIDA7CiAKLWZhaWxlZF9kbWFtYXNrOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgZW5kcG9pbnQpOwotZmFpbGVkX3JlZ2lzdGVyX21zaToKLQlwY2lfZGlzYWJsZV9tc2kocGRldik7Ci1mYWlsZWRfZW5hYmxlX21zaToKLQkvKiBwY2lfY2xlYXJfbWFzdGVyKHBkZXYpOyBOb2JvZHkgZWxzZSBzZWVtcyB0byBkbyB0aGlzICovCi0JcGNpX2lvdW5tYXAocGRldiwgZW5kcG9pbnQtPnJlZ2lzdGVycyk7Ci1mYWlsZWRfaW9tYXAwOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci1mYWlsZWRfcmVxdWVzdF9yZWdpb25zOgotYmFkX2JhcjoKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci1ub19lbmFibGU6CiAJeGlsbHlidXNfZG9fY2xlYW51cCgmZW5kcG9pbnQtPmNsZWFudXAsIGVuZHBvaW50KTsKIAotCWtmcmVlKGVuZHBvaW50KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIzNywxNiArMjE1LDcgQEAKIAogCXhpbGx5YnVzX2VuZHBvaW50X3JlbW92ZShlbmRwb2ludCk7CiAKLQlmcmVlX2lycShwZGV2LT5pcnEsIGVuZHBvaW50KTsKLQotCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKLQlwY2lfaW91bm1hcChwZGV2LCBlbmRwb2ludC0+cmVnaXN0ZXJzKTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQogCXhpbGx5YnVzX2RvX2NsZWFudXAoJmVuZHBvaW50LT5jbGVhbnVwLCBlbmRwb2ludCk7Ci0KLQlrZnJlZShlbmRwb2ludCk7CiB9CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB4aWxseWlkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9sb29wYmFjay90Y21fbG9vcC5jIGIvZHJpdmVycy90YXJnZXQvbG9vcGJhY2svdGNtX2xvb3AuYwppbmRleCBjODg2YWQxLi43M2FiNzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9sb29wYmFjay90Y21fbG9vcC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2xvb3BiYWNrL3RjbV9sb29wLmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogCXN0cnVjdCB0Y21fbG9vcF9oYmEgKnRsX2hiYSA9IHRsX3RwZy0+dGxfaGJhOwogCiAJYXRvbWljX2luYygmdGxfdHBnLT50bF90cGdfcG9ydF9jb3VudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkvKgogCSAqIEFkZCBMaW51eC9TQ1NJIHN0cnVjdCBzY3NpX2RldmljZSBieSBIQ1RMCiAJICovCkBAIC05ODYsNyArOTg2LDcgQEAKIAlzY3NpX2RldmljZV9wdXQoc2QpOwogCiAJYXRvbWljX2RlYygmdGxfdHBnLT50bF90cGdfcG9ydF9jb3VudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCXByX2RlYnVnKCJUQ01fTG9vcF9Db25maWdGUzogUG9ydCBVbmxpbmsgU3VjY2Vzc2Z1bFxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKaW5kZXggZmNiZTYxMi4uMGI3OWI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJCQkJCWNvbnRpbnVlOwogCiAJCQkJYXRvbWljX2luYygmdGdfcHRfZ3AtPnRnX3B0X2dwX3JlZl9jbnQpOwotCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAkJCQlzcGluX3VubG9jaygmZGV2LT50MTBfYWx1YS50Z19wdF9ncHNfbG9jayk7CiAKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAJCQkJc3Bpbl9sb2NrKCZkZXYtPnQxMF9hbHVhLnRnX3B0X2dwc19sb2NrKTsKIAkJCQlhdG9taWNfZGVjKCZ0Z19wdF9ncC0+dGdfcHRfZ3BfcmVmX2NudCk7Ci0JCQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrKCZkZXYtPnQxMF9hbHVhLnRnX3B0X2dwc19sb2NrKTsKQEAgLTk5MCw3ICs5OTAsNyBAQAogCQkgKiBUQVJHRVQgUE9SVCBHUk9VUFMgY29tbWFuZAogCQkgKi8KIAkJYXRvbWljX2luYygmbWVtLT50Z19wdF9ncF9tZW1fcmVmX2NudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQlzcGluX3VubG9jaygmdGdfcHRfZ3AtPnRnX3B0X2dwX2xvY2spOwogCiAJCXNwaW5fbG9ja19iaCgmcG9ydC0+c2VwX2FsdWFfbG9jayk7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogCiAJCXNwaW5fbG9jaygmdGdfcHRfZ3AtPnRnX3B0X2dwX2xvY2spOwogCQlhdG9taWNfZGVjKCZtZW0tPnRnX3B0X2dwX21lbV9yZWZfY250KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJfQogCXNwaW5fdW5sb2NrKCZ0Z19wdF9ncC0+dGdfcHRfZ3BfbG9jayk7CiAJLyoKQEAgLTEwNTQsNyArMTA1NCw3IEBACiAJCWNvcmVfYWx1YV9kdW1wX3N0YXRlKHRnX3B0X2dwLT50Z19wdF9ncF9hbHVhX3BlbmRpbmdfc3RhdGUpKTsKIAlzcGluX2xvY2soJmRldi0+dDEwX2FsdWEudGdfcHRfZ3BzX2xvY2spOwogCWF0b21pY19kZWMoJnRnX3B0X2dwLT50Z19wdF9ncF9yZWZfY250KTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXNwaW5fdW5sb2NrKCZkZXYtPnQxMF9hbHVhLnRnX3B0X2dwc19sb2NrKTsKIAogCWlmICh0Z19wdF9ncC0+dGdfcHRfZ3BfdHJhbnNpdGlvbl9jb21wbGV0ZSkKQEAgLTExMTYsNyArMTExNiw3IEBACiAJICovCiAJc3Bpbl9sb2NrKCZkZXYtPnQxMF9hbHVhLnRnX3B0X2dwc19sb2NrKTsKIAlhdG9taWNfaW5jKCZ0Z19wdF9ncC0+dGdfcHRfZ3BfcmVmX2NudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAlzcGluX3VubG9jaygmZGV2LT50MTBfYWx1YS50Z19wdF9ncHNfbG9jayk7CiAKIAlpZiAoIWV4cGxpY2l0ICYmIHRnX3B0X2dwLT50Z19wdF9ncF9pbXBsaWNpdF90cmFuc19zZWNzKSB7CkBAIC0xMTU5LDcgKzExNTksNyBAQAogCXNwaW5fbG9jaygmbG9jYWxfbHVfZ3BfbWVtLT5sdV9ncF9tZW1fbG9jayk7CiAJbHVfZ3AgPSBsb2NhbF9sdV9ncF9tZW0tPmx1X2dwOwogCWF0b21pY19pbmMoJmx1X2dwLT5sdV9ncF9yZWZfY250KTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXNwaW5fdW5sb2NrKCZsb2NhbF9sdV9ncF9tZW0tPmx1X2dwX21lbV9sb2NrKTsKIAkvKgogCSAqIEZvciBzdG9yYWdlIG9iamVjdHMgdGhhdCBhcmUgbWVtYmVycyBvZiB0aGUgJ2RlZmF1bHRfbHVfZ3AnLApAQCAtMTE3Niw3ICsxMTc2LDcgQEAKIAkJcmMgPSBjb3JlX2FsdWFfZG9fdHJhbnNpdGlvbl90Z19wdChsX3RnX3B0X2dwLAogCQkJCQkJICAgbmV3X3N0YXRlLCBleHBsaWNpdCk7CiAJCWF0b21pY19kZWMoJmx1X2dwLT5sdV9ncF9yZWZfY250KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXJldHVybiByYzsKIAl9CiAJLyoKQEAgLTExOTAsNyArMTE5MCw3IEBACiAKIAkJZGV2ID0gbHVfZ3BfbWVtLT5sdV9ncF9tZW1fZGV2OwogCQlhdG9taWNfaW5jKCZsdV9ncF9tZW0tPmx1X2dwX21lbV9yZWZfY250KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXNwaW5fdW5sb2NrKCZsdV9ncC0+bHVfZ3BfbG9jayk7CiAKIAkJc3Bpbl9sb2NrKCZkZXYtPnQxMF9hbHVhLnRnX3B0X2dwc19sb2NrKTsKQEAgLTEyMTksNyArMTIxOSw3IEBACiAJCQkJdGdfcHRfZ3AtPnRnX3B0X2dwX2FsdWFfbmFjbCA9IE5VTEw7CiAJCQl9CiAJCQlhdG9taWNfaW5jKCZ0Z19wdF9ncC0+dGdfcHRfZ3BfcmVmX2NudCk7Ci0JCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQlzcGluX3VubG9jaygmZGV2LT50MTBfYWx1YS50Z19wdF9ncHNfbG9jayk7CiAJCQkvKgogCQkJICogY29yZV9hbHVhX2RvX3RyYW5zaXRpb25fdGdfcHQoKSB3aWxsIGFsd2F5cyByZXR1cm4KQEAgLTEyMzAsNyArMTIzMCw3IEBACiAKIAkJCXNwaW5fbG9jaygmZGV2LT50MTBfYWx1YS50Z19wdF9ncHNfbG9jayk7CiAJCQlhdG9taWNfZGVjKCZ0Z19wdF9ncC0+dGdfcHRfZ3BfcmVmX2NudCk7Ci0JCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQlpZiAocmMpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTEyMzgsNyArMTIzOCw3IEBACiAKIAkJc3Bpbl9sb2NrKCZsdV9ncC0+bHVfZ3BfbG9jayk7CiAJCWF0b21pY19kZWMoJmx1X2dwX21lbS0+bHVfZ3BfbWVtX3JlZl9jbnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAJc3Bpbl91bmxvY2soJmx1X2dwLT5sdV9ncF9sb2NrKTsKIApAQCAtMTI1Miw3ICsxMjUyLDcgQEAKIAl9CiAKIAlhdG9taWNfZGVjKCZsdV9ncC0+bHVfZ3BfcmVmX2NudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKaW5kZXggMjY0MTZjMS4uMTFkMjZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQkJY29udGludWU7CiAKIAkJYXRvbWljX2luYygmZGV2ZS0+cHJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7CiAKIAkJcmV0dXJuIGRldmU7CkBAIC0xMzk2LDcgKzEzOTYsNyBAQAogCXNwaW5fbG9jaygmbHVuLT5sdW5fYWNsX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmxhY2wtPmxhY2xfbGlzdCwgJmx1bi0+bHVuX2FjbF9saXN0KTsKIAlhdG9taWNfaW5jKCZsdW4tPmx1bl9hY2xfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJc3Bpbl91bmxvY2soJmx1bi0+bHVuX2FjbF9sb2NrKTsKIAogCXByX2RlYnVnKCIlc19UUEdbJWh1XV9MVU5bJXUtPiV1XSAtIEFkZGVkICVzIEFDTCBmb3IgIgpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAlzcGluX2xvY2soJmx1bi0+bHVuX2FjbF9sb2NrKTsKIAlsaXN0X2RlbCgmbGFjbC0+bGFjbF9saXN0KTsKIAlhdG9taWNfZGVjKCZsdW4tPmx1bl9hY2xfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJc3Bpbl91bmxvY2soJmx1bi0+bHVuX2FjbF9sb2NrKTsKIAogCWNvcmVfZGlzYWJsZV9kZXZpY2VfbGlzdF9mb3Jfbm9kZShsdW4sIE5VTEwsIGxhY2wtPm1hcHBlZF9sdW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jCmluZGV4IDllMDIzMmNjLi43ZTZiODU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCSAqIEJ1bXAgdGhlIGliX2Jpb19lcnJfY250IGFuZCByZWxlYXNlIGJpby4KIAkJICovCiAJCWF0b21pY19pbmMoJmlici0+aWJfYmlvX2Vycl9jbnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAKIAliaW9fcHV0KGJpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwppbmRleCAzMDEzMjg3Li5kZjM1Nzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKQEAgLTY3NSw3ICs2NzUsNyBAQAogCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwb3J0X3RtcCwgJmRldi0+ZGV2X3NlcF9saXN0LCBzZXBfbGlzdCkgewogCQlhdG9taWNfaW5jKCZwb3J0LT5zZXBfdGdfcHRfcmVmX2NudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQlzcGluX3VubG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwogCiAJCXNwaW5fbG9ja19iaCgmcG9ydC0+c2VwX2FsdWFfbG9jayk7CkBAIC03MTAsNyArNzEwLDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJYXRvbWljX2luYygmZGV2ZV90bXAtPnByX3JlZl9jb3VudCk7Ci0JCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQlzcGluX3VubG9ja19iaCgmcG9ydC0+c2VwX2FsdWFfbG9jayk7CiAJCQkvKgogCQkJICogR3JhYiBhIGNvbmZpZ2ZzIGdyb3VwIGRlcGVuZGVuY3kgdGhhdCBpcyByZWxlYXNlZApAQCAtNzIzLDkgKzcyMyw5IEBACiAJCQkJcHJfZXJyKCJjb3JlX3Njc2kzX2x1bmFjbF9kZXBlbmQiCiAJCQkJCQkiX2l0ZW0oKSBmYWlsZWRcbiIpOwogCQkJCWF0b21pY19kZWMoJnBvcnQtPnNlcF90Z19wdF9yZWZfY250KTsKLQkJCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkJCWF0b21pY19kZWMoJmRldmVfdG1wLT5wcl9yZWZfY291bnQpOwotCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQkvKgpAQCAtNzQwLDkgKzc0MCw5IEBACiAJCQkJCQlzYV9yZXNfa2V5LCBhbGxfdGdfcHQsIGFwdHBsKTsKIAkJCWlmICghcHJfcmVnX2F0cCkgewogCQkJCWF0b21pY19kZWMoJnBvcnQtPnNlcF90Z19wdF9yZWZfY250KTsKLQkJCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkJCWF0b21pY19kZWMoJmRldmVfdG1wLT5wcl9yZWZfY291bnQpOwotCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQkJY29yZV9zY3NpM19sdW5hY2xfdW5kZXBlbmRfaXRlbShkZXZlX3RtcCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC03NTUsNyArNzU1LDcgQEAKIAogCQlzcGluX2xvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKIAkJYXRvbWljX2RlYygmcG9ydC0+c2VwX3RnX3B0X3JlZl9jbnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAJc3Bpbl91bmxvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKIApAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAkJCQkJY29udGludWU7CiAJCQl9CiAJCQlhdG9taWNfaW5jKCZwcl9yZWctPnByX3Jlc19ob2xkZXJzKTsKLQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJCXNwaW5fdW5sb2NrKCZwcl90bXBsLT5yZWdpc3RyYXRpb25fbG9jayk7CiAJCQlyZXR1cm4gcHJfcmVnOwogCQl9CkBAIC0xMTI1LDcgKzExMjUsNyBAQAogCQkJY29udGludWU7CiAKIAkJYXRvbWljX2luYygmcHJfcmVnLT5wcl9yZXNfaG9sZGVycyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQlzcGluX3VubG9jaygmcHJfdG1wbC0+cmVnaXN0cmF0aW9uX2xvY2spOwogCQlyZXR1cm4gcHJfcmVnOwogCX0KQEAgLTExNTUsNyArMTE1NSw3IEBACiBzdGF0aWMgdm9pZCBjb3JlX3Njc2kzX3B1dF9wcl9yZWcoc3RydWN0IHQxMF9wcl9yZWdpc3RyYXRpb24gKnByX3JlZykKIHsKIAlhdG9taWNfZGVjKCZwcl9yZWctPnByX3Jlc19ob2xkZXJzKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogfQogCiBzdGF0aWMgaW50IGNvcmVfc2NzaTNfY2hlY2tfaW1wbGljaXRfcmVsZWFzZSgKQEAgLTEzNDksNyArMTM0OSw3IEBACiAJCQkmdHBnLT50cGdfZ3JvdXAuY2dfaXRlbSk7CiAKIAlhdG9taWNfZGVjKCZ0cGctPnRwZ19wcl9yZWZfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyBpbnQgY29yZV9zY3NpM19ub2RlYWNsX2RlcGVuZF9pdGVtKHN0cnVjdCBzZV9ub2RlX2FjbCAqbmFjbCkKQEAgLTEzNjksNyArMTM2OSw3IEBACiAKIAlpZiAobmFjbC0+ZHluYW1pY19ub2RlX2FjbCkgewogCQlhdG9taWNfZGVjKCZuYWNsLT5hY2xfcHJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzNzcsNyArMTM3Nyw3IEBACiAJCQkmbmFjbC0+YWNsX2dyb3VwLmNnX2l0ZW0pOwogCiAJYXRvbWljX2RlYygmbmFjbC0+YWNsX3ByX3JlZl9jb3VudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogc3RhdGljIGludCBjb3JlX3Njc2kzX2x1bmFjbF9kZXBlbmRfaXRlbShzdHJ1Y3Qgc2VfZGV2X2VudHJ5ICpzZV9kZXZlKQpAQCAtMTQwOCw3ICsxNDA4LDcgQEAKIAkgKi8KIAlpZiAoIWx1bl9hY2wpIHsKIAkJYXRvbWljX2RlYygmc2VfZGV2ZS0+cHJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXJldHVybjsKIAl9CiAJbmFjbCA9IGx1bl9hY2wtPnNlX2x1bl9uYWNsOwpAQCAtMTQxOCw3ICsxNDE4LDcgQEAKIAkJCSZsdW5fYWNsLT5zZV9sdW5fZ3JvdXAuY2dfaXRlbSk7CiAKIAlhdG9taWNfZGVjKCZzZV9kZXZlLT5wcl9yZWZfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyBzZW5zZV9yZWFzb25fdApAQCAtMTU1MiwxNCArMTU1MiwxNCBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlhdG9taWNfaW5jKCZ0bXBfdHBnLT50cGdfcHJfcmVmX2NvdW50KTsKLQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7CiAKIAkJCWlmIChjb3JlX3Njc2kzX3RwZ19kZXBlbmRfaXRlbSh0bXBfdHBnKSkgewogCQkJCXByX2VycigiIGNvcmVfc2NzaTNfdHBnX2RlcGVuZF9pdGVtKCkiCiAJCQkJCSIgZm9yIHRtcF90cGdcbiIpOwogCQkJCWF0b21pY19kZWMoJnRtcF90cGctPnRwZ19wcl9yZWZfY291bnQpOwotCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQkJcmV0ID0gVENNX0xPR0lDQUxfVU5JVF9DT01NVU5JQ0FUSU9OX0ZBSUxVUkU7CiAJCQkJZ290byBvdXRfdW5tYXA7CiAJCQl9CkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCQkJCQkJdG1wX3RwZywgaV9zdHIpOwogCQkJaWYgKGRlc3Rfbm9kZV9hY2wpIHsKIAkJCQlhdG9taWNfaW5jKCZkZXN0X25vZGVfYWNsLT5hY2xfcHJfcmVmX2NvdW50KTsKLQkJCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxKCZ0bXBfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIApAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJCQlwcl9lcnIoImNvbmZpZ2ZzX2RlcGVuZF9pdGVtKCkgZmFpbGVkIgogCQkJCQkiIGZvciBkZXN0X25vZGVfYWNsLT5hY2xfZ3JvdXBcbiIpOwogCQkJCWF0b21pY19kZWMoJmRlc3Rfbm9kZV9hY2wtPmFjbF9wcl9yZWZfY291bnQpOwotCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQkJY29yZV9zY3NpM190cGdfdW5kZXBlbmRfaXRlbSh0bXBfdHBnKTsKIAkJCQlyZXQgPSBUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKIAkJCQlnb3RvIG91dF91bm1hcDsKQEAgLTE2NDcsNyArMTY0Nyw3IEBACiAJCQlwcl9lcnIoImNvcmVfc2NzaTNfbHVuYWNsX2RlcGVuZF9pdGVtKCkiCiAJCQkJCSIgZmFpbGVkXG4iKTsKIAkJCWF0b21pY19kZWMoJmRlc3Rfc2VfZGV2ZS0+cHJfcmVmX2NvdW50KTsKLQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJCWNvcmVfc2NzaTNfbm9kZWFjbF91bmRlcGVuZF9pdGVtKGRlc3Rfbm9kZV9hY2wpOwogCQkJY29yZV9zY3NpM190cGdfdW5kZXBlbmRfaXRlbShkZXN0X3RwZyk7CiAJCQlyZXQgPSBUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKQEAgLTMxNjgsMTQgKzMxNjgsMTQgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWF0b21pY19pbmMoJmRlc3Rfc2VfdHBnLT50cGdfcHJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7CiAKIAkJaWYgKGNvcmVfc2NzaTNfdHBnX2RlcGVuZF9pdGVtKGRlc3Rfc2VfdHBnKSkgewogCQkJcHJfZXJyKCJjb3JlX3Njc2kzX3RwZ19kZXBlbmRfaXRlbSgpIGZhaWxlZCIKIAkJCQkiIGZvciBkZXN0X3NlX3RwZ1xuIik7CiAJCQlhdG9taWNfZGVjKCZkZXN0X3NlX3RwZy0+dHBnX3ByX3JlZl9jb3VudCk7Ci0JCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQlyZXQgPSBUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKIAkJCWdvdG8gb3V0X3B1dF9wcl9yZWc7CiAJCX0KQEAgLTMyNzMsNyArMzI3Myw3IEBACiAJCQkJaW5pdGlhdG9yX3N0cik7CiAJaWYgKGRlc3Rfbm9kZV9hY2wpIHsKIAkJYXRvbWljX2luYygmZGVzdF9ub2RlX2FjbC0+YWNsX3ByX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmRlc3Rfc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIApAQCAtMzI4OSw3ICszMjg5LDcgQEAKIAkJcHJfZXJyKCJjb3JlX3Njc2kzX25vZGVhY2xfZGVwZW5kX2l0ZW0oKSBmb3IiCiAJCQkiIGRlc3Rfbm9kZV9hY2xcbiIpOwogCQlhdG9taWNfZGVjKCZkZXN0X25vZGVfYWNsLT5hY2xfcHJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCWRlc3Rfbm9kZV9hY2wgPSBOVUxMOwogCQlyZXQgPSBUQ01fSU5WQUxJRF9QQVJBTUVURVJfTElTVDsKIAkJZ290byBvdXQ7CkBAIC0zMzE0LDcgKzMzMTQsNyBAQAogCWlmIChjb3JlX3Njc2kzX2x1bmFjbF9kZXBlbmRfaXRlbShkZXN0X3NlX2RldmUpKSB7CiAJCXByX2VycigiY29yZV9zY3NpM19sdW5hY2xfZGVwZW5kX2l0ZW0oKSBmYWlsZWRcbiIpOwogCQlhdG9taWNfZGVjKCZkZXN0X3NlX2RldmUtPnByX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQlkZXN0X3NlX2RldmUgPSBOVUxMOwogCQlyZXQgPSBUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKIAkJZ290byBvdXQ7CkBAIC0zODgwLDcgKzM4ODAsNyBAQAogCQlhZGRfZGVzY19sZW4gPSAwOwogCiAJCWF0b21pY19pbmMoJnByX3JlZy0+cHJfcmVzX2hvbGRlcnMpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJc3Bpbl91bmxvY2soJnByX3RtcGwtPnJlZ2lzdHJhdGlvbl9sb2NrKTsKIAkJLyoKIAkJICogRGV0ZXJtaW5lIGV4cGVjdGVkIGxlbmd0aCBvZiAkRkFCUklDX01PRCBzcGVjaWZpYwpAQCAtMzg5NCw3ICszODk0LDcgQEAKIAkJCQkiIG91dCBvZiBidWZmZXI6ICVkXG4iLCBjbWQtPmRhdGFfbGVuZ3RoKTsKIAkJCXNwaW5fbG9jaygmcHJfdG1wbC0+cmVnaXN0cmF0aW9uX2xvY2spOwogCQkJYXRvbWljX2RlYygmcHJfcmVnLT5wcl9yZXNfaG9sZGVycyk7Ci0JCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQlicmVhazsKIAkJfQogCQkvKgpAQCAtMzk1Niw3ICszOTU2LDcgQEAKIAogCQlzcGluX2xvY2soJnByX3RtcGwtPnJlZ2lzdHJhdGlvbl9sb2NrKTsKIAkJYXRvbWljX2RlYygmcHJfcmVnLT5wcl9yZXNfaG9sZGVycyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkvKgogCQkgKiBTZXQgdGhlIEFERElUSU9OQUwgREVTQ1JJUFRPUiBMRU5HVEgKIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCmluZGV4IDc4OWFhOWUuLjIxNzlmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCkBAIC03MzYsNyArNzM2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCBjbWRfdG1wLCAmcWZfY21kX2xpc3QsIHNlX3FmX25vZGUpIHsKIAkJbGlzdF9kZWwoJmNtZC0+c2VfcWZfbm9kZSk7CiAJCWF0b21pY19kZWMoJmRldi0+ZGV2X3FmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAkJcHJfZGVidWcoIlByb2Nlc3NpbmcgJXMgY21kOiAlcCBRVUVVRV9GVUxMIGluIHdvcmsgcXVldWUiCiAJCQkiIGNvbnRleHQ6ICVzXG4iLCBjbWQtPnNlX3Rmby0+Z2V0X2ZhYnJpY19uYW1lKCksIGNtZCwKQEAgLTExNDksNyArMTE0OSw3IEBACiAJICogRG9ybWFudCB0byBBY3RpdmUgc3RhdHVzLgogCSAqLwogCWNtZC0+c2Vfb3JkZXJlZF9pZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkZXYtPmRldl9vcmRlcmVkX2lkKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXByX2RlYnVnKCJBbGxvY2F0ZWQgc2Vfb3JkZXJlZF9pZDogJXUgZm9yIFRhc2sgQXR0cjogMHglMDJ4IG9uICVzXG4iLAogCQkJY21kLT5zZV9vcmRlcmVkX2lkLCBjbWQtPnNhbV90YXNrX2F0dHIsCiAJCQlkZXYtPnRyYW5zcG9ydC0+bmFtZSk7CkBAIC0xNzA2LDcgKzE3MDYsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBNU0dfT1JERVJFRF9UQUc6CiAJCWF0b21pY19pbmMoJmRldi0+ZGV2X29yZGVyZWRfc3luYyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJCXByX2RlYnVnKCJBZGRlZCBPUkRFUkVEIGZvciBDREI6IDB4JTAyeCB0byBvcmRlcmVkIGxpc3QsICIKIAkJCSAiIHNlX29yZGVyZWRfaWQ6ICV1XG4iLApAQCAtMTcyNCw3ICsxNzI0LDcgQEAKIAkJICogRm9yIFNJTVBMRSBhbmQgVU5UQUdHRUQgVGFzayBBdHRyaWJ1dGUgY29tbWFuZHMKIAkJICovCiAJCWF0b21pY19pbmMoJmRldi0+c2ltcGxlX2NtZHMpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xODI5LDcgKzE4MjksNyBAQAogCiAJaWYgKGNtZC0+c2FtX3Rhc2tfYXR0ciA9PSBNU0dfU0lNUExFX1RBRykgewogCQlhdG9taWNfZGVjKCZkZXYtPnNpbXBsZV9jbWRzKTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCWRldi0+ZGV2X2N1cl9vcmRlcmVkX2lkKys7CiAJCXByX2RlYnVnKCJJbmNyZW1lbnRlZCBkZXYtPmRldl9jdXJfb3JkZXJlZF9pZDogJXUgZm9yIgogCQkJIiBTSU1QTEU6ICV1XG4iLCBkZXYtPmRldl9jdXJfb3JkZXJlZF9pZCwKQEAgLTE4NDEsNyArMTg0MSw3IEBACiAJCQljbWQtPnNlX29yZGVyZWRfaWQpOwogCX0gZWxzZSBpZiAoY21kLT5zYW1fdGFza19hdHRyID09IE1TR19PUkRFUkVEX1RBRykgewogCQlhdG9taWNfZGVjKCZkZXYtPmRldl9vcmRlcmVkX3N5bmMpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCQlkZXYtPmRldl9jdXJfb3JkZXJlZF9pZCsrOwogCQlwcl9kZWJ1ZygiSW5jcmVtZW50ZWQgZGV2X2N1cl9vcmRlcmVkX2lkOiAldSBmb3IgT1JERVJFRDoiCkBAIC0xOTAwLDcgKzE5MDAsNyBAQAogCXNwaW5fbG9ja19pcnEoJmRldi0+cWZfY21kX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmNtZC0+c2VfcWZfbm9kZSwgJmNtZC0+c2VfZGV2LT5xZl9jbWRfbGlzdCk7CiAJYXRvbWljX2luYygmZGV2LT5kZXZfcWZfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjbWQtPnNlX2Rldi0+cWZfY21kX2xvY2spOwogCiAJc2NoZWR1bGVfd29yaygmY21kLT5zZV9kZXYtPnFmX3dvcmtfcXVldWUpOwpAQCAtMjg3NSw3ICsyODc1LDcgQEAKIAkJaWYgKGNtZC0+c2VfdGZvLT53cml0ZV9wZW5kaW5nX3N0YXR1cyhjbWQpICE9IDApIHsKIAkJCWNtZC0+dHJhbnNwb3J0X3N0YXRlIHw9IENNRF9UX0FCT1JURUQ7CiAJCQljbWQtPnNlX2NtZF9mbGFncyB8PSBTQ0ZfU0VORF9ERUxBWUVEX1RBUzsKLQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJCXJldHVybjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VhLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91YS5jCmluZGV4IDUwNTUxOWIuLjEwMTg1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VhLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdWEuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7CiAKIAkJYXRvbWljX2luYygmZGV2ZS0+dWFfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJcmV0dXJuIDA7CiAJfQogCWxpc3RfYWRkX3RhaWwoJnVhLT51YV9uYWNsX2xpc3QsICZkZXZlLT51YV9saXN0KTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCQlhc2MsIGFzY3EpOwogCiAJYXRvbWljX2luYygmZGV2ZS0+dWFfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQlrbWVtX2NhY2hlX2ZyZWUoc2VfdWFfY2FjaGUsIHVhKTsKIAogCQlhdG9taWNfZGVjKCZkZXZlLT51YV9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCX0KIAlzcGluX3VubG9jaygmZGV2ZS0+dWFfbG9jayk7CiB9CkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJa21lbV9jYWNoZV9mcmVlKHNlX3VhX2NhY2hlLCB1YSk7CiAKIAkJYXRvbWljX2RlYygmZGV2ZS0+dWFfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAJc3Bpbl91bmxvY2soJmRldmUtPnVhX2xvY2spOwogCXNwaW5fdW5sb2NrX2lycSgmbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJa21lbV9jYWNoZV9mcmVlKHNlX3VhX2NhY2hlLCB1YSk7CiAKIAkJYXRvbWljX2RlYygmZGV2ZS0+dWFfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAJc3Bpbl91bmxvY2soJmRldmUtPnVhX2xvY2spOwogCXNwaW5fdW5sb2NrX2lycSgmbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9nb2xkZmlzaC5jIGIvZHJpdmVycy90dHkvZ29sZGZpc2guYwppbmRleCA3NWRjOWQyLi4wOTQ5NWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9nb2xkZmlzaC5jCisrKyBiL2RyaXZlcnMvdHR5L2dvbGRmaXNoLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9nb2xkZmlzaC5oPgogCiBlbnVtIHsKIAlHT0xERklTSF9UVFlfUFVUX0NIQVIgICAgICAgPSAweDAwLApAQCAtMjksNiArMzAsNyBAQAogCiAJR09MREZJU0hfVFRZX0RBVEFfUFRSICAgICAgID0gMHgxMCwKIAlHT0xERklTSF9UVFlfREFUQV9MRU4gICAgICAgPSAweDE0LAorCUdPTERGSVNIX1RUWV9EQVRBX1BUUl9ISUdIICA9IDB4MTgsCiAKIAlHT0xERklTSF9UVFlfQ01EX0lOVF9ESVNBQkxFICAgID0gMCwKIAlHT0xERklTSF9UVFlfQ01EX0lOVF9FTkFCTEUgICAgID0gMSwKQEAgLTU3LDcgKzU5LDggQEAKIAlzdHJ1Y3QgZ29sZGZpc2hfdHR5ICpxdHR5ID0gJmdvbGRmaXNoX3R0eXNbbGluZV07CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gcXR0eS0+YmFzZTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXR0eS0+bG9jaywgaXJxX2ZsYWdzKTsKLQl3cml0ZWwoKHUzMilidWYsIGJhc2UgKyBHT0xERklTSF9UVFlfREFUQV9QVFIpOworCWdmX3dyaXRlNjQoKHU2NClidWYsIGJhc2UgKyBHT0xERklTSF9UVFlfREFUQV9QVFIsCisJCQkJYmFzZSArIEdPTERGSVNIX1RUWV9EQVRBX1BUUl9ISUdIKTsKIAl3cml0ZWwoY291bnQsIGJhc2UgKyBHT0xERklTSF9UVFlfREFUQV9MRU4pOwogCXdyaXRlbChHT0xERklTSF9UVFlfQ01EX1dSSVRFX0JVRkZFUiwgYmFzZSArIEdPTERGSVNIX1RUWV9DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF0dHktPmxvY2ssIGlycV9mbGFncyk7CkBAIC03MywxMiArNzYsMTMgQEAKIAl1MzIgY291bnQ7CiAKIAljb3VudCA9IHJlYWRsKGJhc2UgKyBHT0xERklTSF9UVFlfQllURVNfUkVBRFkpOwotCWlmKGNvdW50ID09IDApCisJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWNvdW50ID0gdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoJnF0dHktPnBvcnQsICZidWYsIGNvdW50KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXR0eS0+bG9jaywgaXJxX2ZsYWdzKTsKLQl3cml0ZWwoKHUzMilidWYsIGJhc2UgKyBHT0xERklTSF9UVFlfREFUQV9QVFIpOworCWdmX3dyaXRlNjQoKHU2NClidWYsIGJhc2UgKyBHT0xERklTSF9UVFlfREFUQV9QVFIsCisJCQkJYmFzZSArIEdPTERGSVNIX1RUWV9EQVRBX1BUUl9ISUdIKTsKIAl3cml0ZWwoY291bnQsIGJhc2UgKyBHT0xERklTSF9UVFlfREFUQV9MRU4pOwogCXdyaXRlbChHT0xERklTSF9UVFlfQ01EX1JFQURfQlVGRkVSLCBiYXNlICsgR09MREZJU0hfVFRZX0NNRCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXR0eS0+bG9jaywgaXJxX2ZsYWdzKTsKQEAgLTg4LDI0ICs5MiwyNiBAQAogCiBzdGF0aWMgaW50IGdvbGRmaXNoX3R0eV9hY3RpdmF0ZShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGdvbGRmaXNoX3R0eSAqcXR0eSA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZ29sZGZpc2hfdHR5LCBwb3J0KTsKKwlzdHJ1Y3QgZ29sZGZpc2hfdHR5ICpxdHR5ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnb2xkZmlzaF90dHksCisJCQkJCQkJCQlwb3J0KTsKIAl3cml0ZWwoR09MREZJU0hfVFRZX0NNRF9JTlRfRU5BQkxFLCBxdHR5LT5iYXNlICsgR09MREZJU0hfVFRZX0NNRCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGdvbGRmaXNoX3R0eV9zaHV0ZG93bihzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGdvbGRmaXNoX3R0eSAqcXR0eSA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZ29sZGZpc2hfdHR5LCBwb3J0KTsKKwlzdHJ1Y3QgZ29sZGZpc2hfdHR5ICpxdHR5ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnb2xkZmlzaF90dHksCisJCQkJCQkJCQlwb3J0KTsKIAl3cml0ZWwoR09MREZJU0hfVFRZX0NNRF9JTlRfRElTQUJMRSwgcXR0eS0+YmFzZSArIEdPTERGSVNIX1RUWV9DTUQpOwogfQogCi1zdGF0aWMgaW50IGdvbGRmaXNoX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgaW50IGdvbGRmaXNoX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBnb2xkZmlzaF90dHkgKnF0dHkgPSAmZ29sZGZpc2hfdHR5c1t0dHktPmluZGV4XTsKIAlyZXR1cm4gdHR5X3BvcnRfb3BlbigmcXR0eS0+cG9ydCwgdHR5LCBmaWxwKTsKIH0KIAotc3RhdGljIHZvaWQgZ29sZGZpc2hfdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgdm9pZCBnb2xkZmlzaF90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJdHR5X3BvcnRfY2xvc2UodHR5LT5wb3J0LCB0dHksIGZpbHApOwogfQpAQCAtMTE1LDcgKzEyMSw4IEBACiAJdHR5X3BvcnRfaGFuZ3VwKHR0eS0+cG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQgZ29sZGZpc2hfdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgZ29sZGZpc2hfdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJCQkJaW50IGNvdW50KQogewogCWdvbGRmaXNoX3R0eV9kb193cml0ZSh0dHktPmluZGV4LCBidWYsIGNvdW50KTsKIAlyZXR1cm4gY291bnQ7CkBAIC0xMzMsMTIgKzE0MCwxNCBAQAogCXJldHVybiByZWFkbChiYXNlICsgR09MREZJU0hfVFRZX0JZVEVTX1JFQURZKTsKIH0KIAotc3RhdGljIHZvaWQgZ29sZGZpc2hfdHR5X2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpiLCB1bnNpZ25lZCBjb3VudCkKK3N0YXRpYyB2b2lkIGdvbGRmaXNoX3R0eV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYiwKKwkJCQkJCQkJdW5zaWduZWQgY291bnQpCiB7CiAJZ29sZGZpc2hfdHR5X2RvX3dyaXRlKGNvLT5pbmRleCwgYiwgY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmdvbGRmaXNoX3R0eV9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqZ29sZGZpc2hfdHR5X2NvbnNvbGVfZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLAorCQkJCQkJCQlpbnQgKmluZGV4KQogewogCSppbmRleCA9IGMtPmluZGV4OwogCXJldHVybiBnb2xkZmlzaF90dHlfZHJpdmVyOwpAQCAtMTQ2LDkgKzE1NSw5IEBACiAKIHN0YXRpYyBpbnQgZ29sZGZpc2hfdHR5X2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQogewotCWlmKCh1bnNpZ25lZCljby0+aW5kZXggPiBnb2xkZmlzaF90dHlfbGluZV9jb3VudCkKKwlpZiAoKHVuc2lnbmVkKWNvLT5pbmRleCA+IGdvbGRmaXNoX3R0eV9saW5lX2NvdW50KQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZihnb2xkZmlzaF90dHlzW2NvLT5pbmRleF0uYmFzZSA9PSAwKQorCWlmIChnb2xkZmlzaF90dHlzW2NvLT5pbmRleF0uYmFzZSA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OCw3ICsxNjcsNyBAQAogCS5zaHV0ZG93biA9IGdvbGRmaXNoX3R0eV9zaHV0ZG93bgogfTsKIAotc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnb2xkZmlzaF90dHlfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnb2xkZmlzaF90dHlfb3BzID0gewogCS5vcGVuID0gZ29sZGZpc2hfdHR5X29wZW4sCiAJLmNsb3NlID0gZ29sZGZpc2hfdHR5X2Nsb3NlLAogCS5oYW5ndXAgPSBnb2xkZmlzaF90dHlfaGFuZ3VwLApAQCAtMTcyLDEzICsxODEsMTQgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCB0dHlfZHJpdmVyICp0dHk7CiAKLQlnb2xkZmlzaF90dHlzID0ga3phbGxvYyhzaXplb2YoKmdvbGRmaXNoX3R0eXMpICogZ29sZGZpc2hfdHR5X2xpbmVfY291bnQsIEdGUF9LRVJORUwpOwotCWlmKGdvbGRmaXNoX3R0eXMgPT0gTlVMTCkgeworCWdvbGRmaXNoX3R0eXMgPSBremFsbG9jKHNpemVvZigqZ29sZGZpc2hfdHR5cykgKgorCQkJCWdvbGRmaXNoX3R0eV9saW5lX2NvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoZ29sZGZpc2hfdHR5cyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jX2dvbGRmaXNoX3R0eXNfZmFpbGVkOwogCX0KIAl0dHkgPSBhbGxvY190dHlfZHJpdmVyKGdvbGRmaXNoX3R0eV9saW5lX2NvdW50KTsKLQlpZih0dHkgPT0gTlVMTCkgeworCWlmICh0dHkgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvY190dHlfZHJpdmVyX2ZhaWxlZDsKIAl9CkBAIC0xODcsMTAgKzE5NywxMSBAQAogCXR0eS0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CiAJdHR5LT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwogCXR0eS0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCXR0eS0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwl0dHktPmZsYWdzID0gVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TIHwgVFRZX0RSSVZFUl9SRUFMX1JBVyB8CisJCQkJCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXR0eV9zZXRfb3BlcmF0aW9ucyh0dHksICZnb2xkZmlzaF90dHlfb3BzKTsKIAlyZXQgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKHR0eSk7Ci0JaWYocmV0KQorCWlmIChyZXQpCiAJCWdvdG8gZXJyX3R0eV9yZWdpc3Rlcl9kcml2ZXJfZmFpbGVkOwogCiAJZ29sZGZpc2hfdHR5X2RyaXZlciA9IHR0eTsKQEAgLTIyNSw3ICsyMzYsNyBAQAogCXUzMiBpcnE7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZihyID09IE5VTEwpCisJaWYgKHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYXNlID0gaW9yZW1hcChyLT5zdGFydCwgMHgxMDAwKTsKQEAgLTIzMywxOCArMjQ0LDE4IEBACiAJCXByX2VycigiZ29sZGZpc2hfdHR5OiB1bmFibGUgdG8gcmVtYXAgYmFzZVxuIik7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKLQlpZihyID09IE5VTEwpCisJaWYgKHIgPT0gTlVMTCkKIAkJZ290byBlcnJfdW5tYXA7CiAKIAlpcnEgPSByLT5zdGFydDsKIAotCWlmKHBkZXYtPmlkID49IGdvbGRmaXNoX3R0eV9saW5lX2NvdW50KQorCWlmIChwZGV2LT5pZCA+PSBnb2xkZmlzaF90dHlfbGluZV9jb3VudCkKIAkJZ290byBlcnJfdW5tYXA7CiAKIAltdXRleF9sb2NrKCZnb2xkZmlzaF90dHlfbG9jayk7Ci0JaWYoZ29sZGZpc2hfdHR5X2N1cnJlbnRfbGluZV9jb3VudCA9PSAwKSB7CisJaWYgKGdvbGRmaXNoX3R0eV9jdXJyZW50X2xpbmVfY291bnQgPT0gMCkgewogCQlyZXQgPSBnb2xkZmlzaF90dHlfY3JlYXRlX2RyaXZlcigpOwotCQlpZihyZXQpCisJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9jcmVhdGVfZHJpdmVyX2ZhaWxlZDsKIAl9CiAJZ29sZGZpc2hfdHR5X2N1cnJlbnRfbGluZV9jb3VudCsrOwpAQCAtMjU4LDE0ICsyNjksMTUgQEAKIAogCXdyaXRlbChHT0xERklTSF9UVFlfQ01EX0lOVF9ESVNBQkxFLCBiYXNlICsgR09MREZJU0hfVFRZX0NNRCk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGdvbGRmaXNoX3R0eV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiZ29sZGZpc2hfdHR5IiwgcGRldik7Ci0JaWYocmV0KQorCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZ29sZGZpc2hfdHR5X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJCQkiZ29sZGZpc2hfdHR5IiwgcGRldik7CisJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9pcnFfZmFpbGVkOwogCiAKIAl0dHlkZXYgPSB0dHlfcG9ydF9yZWdpc3Rlcl9kZXZpY2UoJnF0dHktPnBvcnQsIGdvbGRmaXNoX3R0eV9kcml2ZXIsCiAJCQkJCQkJcGRldi0+aWQsICZwZGV2LT5kZXYpOwotCWlmKElTX0VSUih0dHlkZXYpKSB7CisJaWYgKElTX0VSUih0dHlkZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIodHR5ZGV2KTsKIAkJZ290byBlcnJfdHR5X3JlZ2lzdGVyX2RldmljZV9mYWlsZWQ7CiAJfQpAQCAtMjg2LDcgKzI5OCw3IEBACiAJZnJlZV9pcnEoaXJxLCBwZGV2KTsKIGVycl9yZXF1ZXN0X2lycV9mYWlsZWQ6CiAJZ29sZGZpc2hfdHR5X2N1cnJlbnRfbGluZV9jb3VudC0tOwotCWlmKGdvbGRmaXNoX3R0eV9jdXJyZW50X2xpbmVfY291bnQgPT0gMCkKKwlpZiAoZ29sZGZpc2hfdHR5X2N1cnJlbnRfbGluZV9jb3VudCA9PSAwKQogCQlnb2xkZmlzaF90dHlfZGVsZXRlX2RyaXZlcigpOwogZXJyX2NyZWF0ZV9kcml2ZXJfZmFpbGVkOgogCW11dGV4X3VubG9jaygmZ29sZGZpc2hfdHR5X2xvY2spOwpAQCAtMzA4LDcgKzMyMCw3IEBACiAJcXR0eS0+YmFzZSA9IDA7CiAJZnJlZV9pcnEocXR0eS0+aXJxLCBwZGV2KTsKIAlnb2xkZmlzaF90dHlfY3VycmVudF9saW5lX2NvdW50LS07Ci0JaWYoZ29sZGZpc2hfdHR5X2N1cnJlbnRfbGluZV9jb3VudCA9PSAwKQorCWlmIChnb2xkZmlzaF90dHlfY3VycmVudF9saW5lX2NvdW50ID09IDApCiAJCWdvbGRmaXNoX3R0eV9kZWxldGVfZHJpdmVyKCk7CiAJbXV0ZXhfdW5sb2NrKCZnb2xkZmlzaF90dHlfbG9jayk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfY29uc29sZS5jCmluZGV4IDBmZjdmZGEuLjRmY2VjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfY29uc29sZS5jCkBAIC03NjAsMTAgKzc2MCwxNyBAQAogCQkJaWYgKHBvbGxfbWFzayA9PSAwKQogCQkJCXNjaGVkdWxlKCk7CiAJCQllbHNlIHsKKwkJCQl1bnNpZ25lZCBsb25nIGpfdGltZW91dDsKKwogCQkJCWlmICh0aW1lb3V0IDwgTUFYX1RJTUVPVVQpCiAJCQkJCXRpbWVvdXQgKz0gKHRpbWVvdXQgPj4gNikgKyAxOwogCi0JCQkJbXNsZWVwX2ludGVycnVwdGlibGUodGltZW91dCk7CisJCQkJLyoKKwkJCQkgKiBXZSBkb24ndCB1c2UgbXNsZWVwX2ludGVycnVwdGlibGUgb3RoZXJ3aXNlCisJCQkJICogImtpY2siIHdpbGwgZmFpbCB0byB3YWtlIHVzIHVwCisJCQkJICovCisJCQkJal90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSArIDE7CisJCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGpfdGltZW91dCk7CiAJCQl9CiAJCX0KIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL2h2Y19kY2MuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfZGNjLmMKaW5kZXggMzUwMmE3Yi4uODA5OTIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvaHZjL2h2Y19kY2MuYworKysgYi9kcml2ZXJzL3R0eS9odmMvaHZjX2RjYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8qIENvcHlyaWdodCAoYykgMjAxMCwgMjAxNCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCkBAIC04LDIwICs4LDExIEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorI2luY2x1ZGUgPGFzbS9kY2MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlICJodmNfY29uc29sZS5oIgpAQCAtMzAsMzUgKzIxLDYgQEAKICNkZWZpbmUgRENDX1NUQVRVU19SWAkJKDEgPDwgMzApCiAjZGVmaW5lIERDQ19TVEFUVVNfVFgJCSgxIDw8IDI5KQogCi1zdGF0aWMgaW5saW5lIHUzMiBfX2RjY19nZXRzdGF0dXModm9pZCkKLXsKLQl1MzIgX19yZXQ7Ci0JYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMxLCAwCUAgcmVhZCBjb21tcyBjdHJsIHJlZyIKLQkJOiAiPXIiIChfX3JldCkgOiA6ICJjYyIpOwotCi0JcmV0dXJuIF9fcmV0OwotfQotCi0KLXN0YXRpYyBpbmxpbmUgY2hhciBfX2RjY19nZXRjaGFyKHZvaWQpCi17Ci0JY2hhciBfX2M7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMCwgYzUsIDAJQCByZWFkIGNvbW1zIGRhdGEgcmVnIgotCQk6ICI9ciIgKF9fYykpOwotCWlzYigpOwotCi0JcmV0dXJuIF9fYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZGNjX3B1dGNoYXIoY2hhciBjKQotewotCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMwLCBjNSwgMAlAIHdyaXRlIGEgY2hhciIKLQkJOiAvKiBubyBvdXRwdXQgcmVnaXN0ZXIgKi8KLQkJOiAiciIgKGMpKTsKLQlpc2IoKTsKLX0KLQogc3RhdGljIGludCBodmNfZGNjX3B1dF9jaGFycyh1aW50MzJfdCB2dCwgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2hkbGMuYyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCmluZGV4IDFiMmRiOWEuLjY0NGRkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25faGRsYy5jCisrKyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCkBAIC04NDgsMTMgKzg0OCwxMSBAQAogewogCXN0cnVjdCBuX2hkbGNfYnVmICpidWY7CiAJaW50IGk7Ci0Jc3RydWN0IG5faGRsYyAqbl9oZGxjID0ga21hbGxvYyhzaXplb2YoKm5faGRsYyksIEdGUF9LRVJORUwpOworCXN0cnVjdCBuX2hkbGMgKm5faGRsYyA9IGt6YWxsb2Moc2l6ZW9mKCpuX2hkbGMpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghbl9oZGxjKQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbXNldChuX2hkbGMsIDAsIHNpemVvZigqbl9oZGxjKSk7Ci0KIAluX2hkbGNfYnVmX2xpc3RfaW5pdCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0KTsKIAluX2hkbGNfYnVmX2xpc3RfaW5pdCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KTsKIAluX2hkbGNfYnVmX2xpc3RfaW5pdCgmbl9oZGxjLT5yeF9idWZfbGlzdCk7CkBAIC05NTIsOCArOTUwLDYgQEAKIAlLRVJOX0lORk8gIk5fSERMQyBsaW5lIGRpc2NpcGxpbmUgcmVnaXN0ZXJlZC5cbiI7CiBzdGF0aWMgY2hhciBoZGxjX3JlZ2lzdGVyX2ZhaWxbXSBfX2luaXRkYXRhID0KIAlLRVJOX0VSUiAiZXJyb3IgcmVnaXN0ZXJpbmcgbGluZSBkaXNjaXBsaW5lOiAlZFxuIjsKLXN0YXRpYyBjaGFyIGhkbGNfaW5pdF9mYWlsW10gX19pbml0ZGF0YSA9Ci0JS0VSTl9JTkZPICJOX0hETEM6IGluaXQgZmFpbHVyZSAlZFxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbl9oZGxjX2luaXQodm9pZCkKIHsKQEAgLTk3Myw4ICs5NjksNiBAQAogCWVsc2UKIAkJcHJpbnRrKGhkbGNfcmVnaXN0ZXJfZmFpbCwgc3RhdHVzKTsKIAotCWlmIChzdGF0dXMpCi0JCXByaW50ayhoZGxjX2luaXRfZmFpbCwgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogCQogfQkvKiBlbmQgb2YgaW5pdF9tb2R1bGUoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl90dHkuYyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKaW5kZXggZmU5ZDEyOS4uZjk1NTY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl90dHkuYworKysgYi9kcml2ZXJzL3R0eS9uX3R0eS5jCkBAIC0yMDQxLDcgKzIwNDEsNyBAQAogCiAJaWYgKGZvdW5kKQogCQljbGVhcl9iaXQoZW9sLCBsZGF0YS0+cmVhZF9mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCWxkYXRhLT5yZWFkX3RhaWwgKz0gYzsKIAogCWlmIChmb3VuZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9jb3JlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2NvcmUuYwppbmRleCAyZDRiZDM5Li4yN2Y3YWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2NvcmUuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2NvcmUuYwpAQCAtMTkyNiwxMyArMTkyNiw4IEBACiAJd2FpdF9mb3JfeG1pdHIodXAsIEJPVEhfRU1QVFkpOwogCS8qCiAJICoJU2VuZCB0aGUgY2hhcmFjdGVyIG91dC4KLQkgKglJZiBhIExGLCBhbHNvIGRvIENSLi4uCiAJICovCiAJc2VyaWFsX3BvcnRfb3V0KHBvcnQsIFVBUlRfVFgsIGMpOwotCWlmIChjID09IDEwKSB7Ci0JCXdhaXRfZm9yX3htaXRyKHVwLCBCT1RIX0VNUFRZKTsKLQkJc2VyaWFsX3BvcnRfb3V0KHBvcnQsIFVBUlRfVFgsIDEzKTsKLQl9CiAKIAkvKgogCSAqCUZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQpAQCAtMjMzOCw5ICsyMzMzLDExIEBACiAJICogdGhlIHRyaWdnZXIsIG9yIHRoZSBNQ1IgUlRTIGJpdCBpcyBjbGVhcmVkLiAgSW4gdGhlIGNhc2Ugd2hlcmUKIAkgKiB0aGUgcmVtb3RlIFVBUlQgaXMgbm90IHVzaW5nIENUUyBhdXRvIGZsb3cgY29udHJvbCwgd2UgbXVzdAogCSAqIGhhdmUgc3VmZmljaWVudCBGSUZPIGVudHJpZXMgZm9yIHRoZSBsYXRlbmN5IG9mIHRoZSByZW1vdGUKLQkgKiBVQVJUIHRvIHJlc3BvbmQuICBJT1csIGF0IGxlYXN0IDMyIGJ5dGVzIG9mIEZJRk8uCisJICogVUFSVCB0byByZXNwb25kLiAgSU9XLCBhdCBsZWFzdCAzMiBieXRlcyBvZiBGSUZPLiBBbHNvIGVuYWJsZQorCSAqIEFGRSBpZiBodyBmbG93IGNvbnRyb2wgaXMgc3VwcG9ydGVkCiAJICovCi0JaWYgKHVwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX0NBUF9BRkUgJiYgcG9ydC0+Zmlmb3NpemUgPj0gMzIpIHsKKwlpZiAoKHVwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX0NBUF9BRkUgJiYgKHBvcnQtPmZpZm9zaXplID49IDMyKSkgfHwKKwkgICAgKHBvcnQtPmZsYWdzICYgVVBGX0hBUkRfRkxPVykpIHsKIAkJdXAtPm1jciAmPSB+VUFSVF9NQ1JfQUZFOwogCQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpCiAJCQl1cC0+bWNyIHw9IFVBUlRfTUNSX0FGRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZG1hLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2RtYS5jCmluZGV4IGFiOTA5NmQuLjE0OGZmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZG1hLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9kbWEuYwpAQCAtMTkyLDIxICsxOTIsMjggQEAKIAogCWRtYS0+cnhfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGRtYS0+cnhjaGFuLT5kZXZpY2UtPmRldiwgZG1hLT5yeF9zaXplLAogCQkJCQkmZG1hLT5yeF9hZGRyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRtYS0+cnhfYnVmKSB7Ci0JCWRtYV9yZWxlYXNlX2NoYW5uZWwoZG1hLT5yeGNoYW4pOwotCQlkbWFfcmVsZWFzZV9jaGFubmVsKGRtYS0+dHhjaGFuKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghZG1hLT5yeF9idWYpCisJCWdvdG8gZXJyOwogCiAJLyogVFggYnVmZmVyICovCiAJZG1hLT50eF9hZGRyID0gZG1hX21hcF9zaW5nbGUoZG1hLT50eGNoYW4tPmRldmljZS0+ZGV2LAogCQkJCQlwLT5wb3J0LnN0YXRlLT54bWl0LmJ1ZiwKIAkJCQkJVUFSVF9YTUlUX1NJWkUsCiAJCQkJCURNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkbWEtPnR4Y2hhbi0+ZGV2aWNlLT5kZXYsIGRtYS0+dHhfYWRkcikpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZG1hLT5yeGNoYW4tPmRldmljZS0+ZGV2LCBkbWEtPnJ4X3NpemUsCisJCQkJICBkbWEtPnJ4X2J1ZiwgZG1hLT5yeF9hZGRyKTsKKwkJZ290byBlcnI7CisJfQogCiAJZGV2X2RiZ19yYXRlbGltaXRlZChwLT5wb3J0LmRldiwgImdvdCBib3RoIGRtYSBjaGFubmVsc1xuIik7CiAKIAlyZXR1cm4gMDsKK2VycjoKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGRtYS0+cnhjaGFuKTsKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGRtYS0+dHhjaGFuKTsKKworCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VyaWFsODI1MF9yZXF1ZXN0X2RtYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZHcuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZHcuYwppbmRleCBlZDMxMTM1Li41MWIzMDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2R3LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9kdy5jCkBAIC02Miw2ICs2Miw3MCBAQAogCXN0cnVjdCB1YXJ0XzgyNTBfZG1hCWRtYTsKIH07CiAKK3N0cnVjdCBkdzgyNTBfYWNwaV9kZXNjIHsKKwl2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB1YXJ0X3BvcnQgKnAsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCSAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7Cit9OworCisjZGVmaW5lIEJZVF9QUlZfQ0xLCQkJMHg4MDAKKyNkZWZpbmUgQllUX1BSVl9DTEtfRU4JCQkoMSA8PCAwKQorI2RlZmluZSBCWVRfUFJWX0NMS19NX1ZBTF9TSElGVAkJMQorI2RlZmluZSBCWVRfUFJWX0NMS19OX1ZBTF9TSElGVAkJMTYKKyNkZWZpbmUgQllUX1BSVl9DTEtfVVBEQVRFCQkoMSA8PCAzMSkKKworc3RhdGljIHZvaWQgYnl0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnAsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCSAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwl1bnNpZ25lZCBpbnQgYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0ZXJtaW9zKTsKKwl1bnNpZ25lZCBpbnQgbSwgbjsKKwl1MzIgcmVnOworCisJLyoKKwkqIEZvciBiYXVkIHJhdGVzIDAuNU0sIDFNLCAxLjVNLCAyTSwgMi41TSwgM00sIDMuNU0gYW5kIDRNIHRoZQorCSogZGl2aWRlcnMgbXVzdCBiZSBhZGp1c3RlZC4KKwkqCisJKiB1YXJ0Y2xrID0gKG0gLyBuKSAqIDEwMCBNSHosIHdoZXJlIG0gPD0gbgorCSovCisJc3dpdGNoIChiYXVkKSB7CisJY2FzZSA1MDAwMDA6CisJY2FzZSAxMDAwMDAwOgorCWNhc2UgMjAwMDAwMDoKKwljYXNlIDQwMDAwMDA6CisJCW0gPSA2NDsKKwkJbiA9IDEwMDsKKwkJcC0+dWFydGNsayA9IDY0MDAwMDAwOworCQlicmVhazsKKwljYXNlIDM1MDAwMDA6CisJCW0gPSA1NjsKKwkJbiA9IDEwMDsKKwkJcC0+dWFydGNsayA9IDU2MDAwMDAwOworCQlicmVhazsKKwljYXNlIDE1MDAwMDA6CisJY2FzZSAzMDAwMDAwOgorCQltID0gNDg7CisJCW4gPSAxMDA7CisJCXAtPnVhcnRjbGsgPSA0ODAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSAyNTAwMDAwOgorCQltID0gNDA7CisJCW4gPSAxMDA7CisJCXAtPnVhcnRjbGsgPSA0MDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbSA9IDIzMDQ7CisJCW4gPSAzMTI1OworCQlwLT51YXJ0Y2xrID0gNzM3MjgwMDA7CisJfQorCisJLyogUmVzZXQgdGhlIGNsb2NrICovCisJcmVnID0gKG0gPDwgQllUX1BSVl9DTEtfTV9WQUxfU0hJRlQpIHwgKG4gPDwgQllUX1BSVl9DTEtfTl9WQUxfU0hJRlQpOworCXdyaXRlbChyZWcsIHAtPm1lbWJhc2UgKyBCWVRfUFJWX0NMSyk7CisJcmVnIHw9IEJZVF9QUlZfQ0xLX0VOIHwgQllUX1BSVl9DTEtfVVBEQVRFOworCXdyaXRlbChyZWcsIHAtPm1lbWJhc2UgKyBCWVRfUFJWX0NMSyk7CisKKwlzZXJpYWw4MjUwX2RvX3NldF90ZXJtaW9zKHAsIHRlcm1pb3MsIG9sZCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGR3ODI1MF9tb2RpZnlfbXNyKHN0cnVjdCB1YXJ0X3BvcnQgKnAsIGludCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgZHc4MjUwX2RhdGEgKmQgPSBwLT5wcml2YXRlX2RhdGE7CkBAIC0yNzgsNiArMzQyLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnAgPSAmdXAtPnBvcnQ7CisJc3RydWN0IGR3ODI1MF9hY3BpX2Rlc2MgKmFjcGlfZGVzYzsKIAogCWR3ODI1MF9zZXR1cF9wb3J0KHVwKTsKIApAQCAtMjkwLDE0ICszNTUsMTggQEAKIAlwLT5zZXJpYWxfb3V0ID0gZHc4MjUwX3NlcmlhbF9vdXQzMjsKIAlwLT5yZWdzaGlmdCA9IDI7CiAKLQlpZiAoIXAtPnVhcnRjbGspCi0JCXAtPnVhcnRjbGsgPSAodW5zaWduZWQgaW50KWlkLT5kcml2ZXJfZGF0YTsKLQogCXVwLT5kbWEgPSAmZGF0YS0+ZG1hOwogCiAJdXAtPmRtYS0+cnhjb25mLnNyY19tYXhidXJzdCA9IHAtPmZpZm9zaXplIC8gNDsKIAl1cC0+ZG1hLT50eGNvbmYuZHN0X21heGJ1cnN0ID0gcC0+Zmlmb3NpemUgLyA0OwogCisJYWNwaV9kZXNjID0gKHN0cnVjdCBkdzgyNTBfYWNwaV9kZXNjICopaWQtPmRyaXZlcl9kYXRhOworCWlmICghYWNwaV9kZXNjKQorCQlyZXR1cm4gMDsKKworCWlmIChhY3BpX2Rlc2MtPnNldF90ZXJtaW9zKQorCQlwLT5zZXRfdGVybWlvcyA9IGFjcGlfZGVzYy0+c2V0X3Rlcm1pb3M7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQ1LDEyICs1MTQsMTYgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkdzgyNTBfb2ZfbWF0Y2gpOwogCitzdGF0aWMgc3RydWN0IGR3ODI1MF9hY3BpX2Rlc2MgYnl0XzgyNTBfZGVzYyA9IHsKKwkuc2V0X3Rlcm1pb3MgPSBieXRfc2V0X3Rlcm1pb3MsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGR3ODI1MF9hY3BpX21hdGNoW10gPSB7CiAJeyAiSU5UMzNDNCIsIDAgfSwKIAl7ICJJTlQzM0M1IiwgMCB9LAogCXsgIklOVDM0MzQiLCAwIH0sCiAJeyAiSU5UMzQzNSIsIDAgfSwKLQl7ICI4MDg2MEYwQSIsIDAgfSwKKwl7ICI4MDg2MEYwQSIsIChrZXJuZWxfdWxvbmdfdCkmYnl0XzgyNTBfZGVzY30sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgZHc4MjUwX2FjcGlfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9lYXJseS5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9lYXJseS5jCmluZGV4IGMxMDBkNjMuLmNmZWY4MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZWFybHkuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2Vhcmx5LmMKQEAgLTM1LDE4ICszNSw4IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VyaWFsLmg+Ci0jaWZkZWYgQ09ORklHX0ZJWF9FQVJMWUNPTl9NRU0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNlbmRpZgogCi1zdHJ1Y3QgZWFybHlfc2VyaWFsODI1MF9kZXZpY2UgewotCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKLQljaGFyIG9wdGlvbnNbMTZdOwkJLyogZS5nLiwgMTE1MjAwbjggKi8KLQl1bnNpZ25lZCBpbnQgYmF1ZDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZWFybHlfc2VyaWFsODI1MF9kZXZpY2UgZWFybHlfZGV2aWNlOworc3RhdGljIHN0cnVjdCBlYXJseWNvbl9kZXZpY2UgKmVhcmx5X2RldmljZTsKIAogdW5zaWduZWQgaW50IF9fd2VhayBfX2luaXQgc2VyaWFsODI1MF9lYXJseV9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgb2Zmc2V0KQogewpAQCAtMTAwLDcgKzkwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9zZXJpYWw4MjUwX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb25zb2xlLAogCQkJCQljb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZlYXJseV9kZXZpY2UucG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmVhcmx5X2RldmljZS0+cG9ydDsKIAl1bnNpZ25lZCBpbnQgaWVyOwogCiAJLyogU2F2ZSB0aGUgSUVSIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTEyOSw3ICsxMTksNyBAQAogCXJldHVybiAocG9ydC0+dWFydGNsayAvIDE2KSAvIHF1b3Q7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3BvcnQoc3RydWN0IGVhcmx5X3NlcmlhbDgyNTBfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wb3J0KHN0cnVjdCBlYXJseWNvbl9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmRldmljZS0+cG9ydDsKIAl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKQEAgLTE0OCwxMjggKzEzOCw0MiBAQAogCXNlcmlhbDgyNTBfZWFybHlfb3V0KHBvcnQsIFVBUlRfTENSLCBjICYgflVBUlRfTENSX0RMQUIpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9vcHRpb25zKHN0cnVjdCBlYXJseV9zZXJpYWw4MjUwX2RldmljZSAqZGV2aWNlLAotCQkJCQkJCQljaGFyICpvcHRpb25zKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfc2VyaWFsODI1MF9zZXR1cChzdHJ1Y3QgZWFybHljb25fZGV2aWNlICpkZXZpY2UsCisJCQkJCSBjb25zdCBjaGFyICpvcHRpb25zKQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmZGV2aWNlLT5wb3J0OwotCWludCBtbWlvLCBtbWlvMzIsIGxlbmd0aDsKLQotCWlmICghb3B0aW9ucykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwb3J0LT51YXJ0Y2xrID0gQkFTRV9CQVVEICogMTY7Ci0KLQltbWlvID0gIXN0cm5jbXAob3B0aW9ucywgIm1taW8sIiwgNSk7Ci0JbW1pbzMyID0gIXN0cm5jbXAob3B0aW9ucywgIm1taW8zMiwiLCA3KTsKLQlpZiAobW1pbyB8fCBtbWlvMzIpIHsKLQkJcG9ydC0+aW90eXBlID0gKG1taW8gPyBVUElPX01FTSA6IFVQSU9fTUVNMzIpOwotCQlwb3J0LT5tYXBiYXNlID0gc2ltcGxlX3N0cnRvdWwob3B0aW9ucyArIChtbWlvID8gNSA6IDcpLAotCQkJCQkgICAgICAgJm9wdGlvbnMsIDApOwotCQlpZiAobW1pbzMyKQotCQkJcG9ydC0+cmVnc2hpZnQgPSAyOwotI2lmZGVmIENPTkZJR19GSVhfRUFSTFlDT05fTUVNCi0JCXNldF9maXhtYXBfbm9jYWNoZShGSVhfRUFSTFlDT05fTUVNX0JBU0UsCi0JCQkJCXBvcnQtPm1hcGJhc2UgJiBQQUdFX01BU0spOwotCQlwb3J0LT5tZW1iYXNlID0KLQkJCSh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9FQVJMWUNPTl9NRU1fQkFTRSk7Ci0JCXBvcnQtPm1lbWJhc2UgKz0gcG9ydC0+bWFwYmFzZSAmIH5QQUdFX01BU0s7Ci0jZWxzZQotCQlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHBvcnQtPm1hcGJhc2UsIDY0KTsKLQkJaWYgKCFwb3J0LT5tZW1iYXNlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZG4ndCBpb3JlbWFwIDB4JWxseFxuIiwKLQkJCQlfX2Z1bmNfXywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwb3J0LT5tYXBiYXNlKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0jZW5kaWYKLQl9IGVsc2UgaWYgKCFzdHJuY21wKG9wdGlvbnMsICJpbywiLCAzKSkgewotCQlwb3J0LT5pb3R5cGUgPSBVUElPX1BPUlQ7Ci0JCXBvcnQtPmlvYmFzZSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMgKyAzLCAmb3B0aW9ucywgMCk7Ci0JCW1taW8gPSAwOwotCX0gZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW9wdGlvbnMgPSBzdHJjaHIob3B0aW9ucywgJywnKTsKLQlpZiAob3B0aW9ucykgewotCQlvcHRpb25zKys7Ci0JCWRldmljZS0+YmF1ZCA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsIE5VTEwsIDApOwotCQlsZW5ndGggPSBtaW4oc3RyY3NwbihvcHRpb25zLCAiICIpICsgMSwKLQkJCSAgICAgKHNpemVfdCkoc2l6ZW9mKGRldmljZS0+b3B0aW9ucykpKTsKLQkJc3RybGNweShkZXZpY2UtPm9wdGlvbnMsIG9wdGlvbnMsIGxlbmd0aCk7Ci0JfSBlbHNlIHsKLQkJZGV2aWNlLT5iYXVkID0gcHJvYmVfYmF1ZChwb3J0KTsKLQkJc25wcmludGYoZGV2aWNlLT5vcHRpb25zLCBzaXplb2YoZGV2aWNlLT5vcHRpb25zKSwgIiV1IiwKLQkJCWRldmljZS0+YmF1ZCk7Ci0JfQotCi0JaWYgKG1taW8gfHwgbW1pbzMyKQotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiRWFybHkgc2VyaWFsIGNvbnNvbGUgYXQgTU1JTyVzIDB4JWxseCAob3B0aW9ucyAnJXMnKVxuIiwKLQkJCW1taW8zMiA/ICIzMiIgOiAiIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+bWFwYmFzZSwKLQkJCWRldmljZS0+b3B0aW9ucyk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICJFYXJseSBzZXJpYWwgY29uc29sZSBhdCBJL08gcG9ydCAweCVseCAob3B0aW9ucyAnJXMnKVxuIiwKLQkJCXBvcnQtPmlvYmFzZSwKLQkJCWRldmljZS0+b3B0aW9ucyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X3NlcmlhbDgyNTBfY29uc29sZSBfX2luaXRkYXRhID0gewotCS5uYW1lCT0gInVhcnQiLAotCS53cml0ZQk9IGVhcmx5X3NlcmlhbDgyNTBfd3JpdGUsCi0JLmZsYWdzCT0gQ09OX1BSSU5UQlVGRkVSIHwgQ09OX0JPT1QsCi0JLmluZGV4CT0gLTEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9zZXJpYWw4MjUwX3NldHVwKGNoYXIgKm9wdGlvbnMpCi17Ci0Jc3RydWN0IGVhcmx5X3NlcmlhbDgyNTBfZGV2aWNlICpkZXZpY2UgPSAmZWFybHlfZGV2aWNlOwotCWludCBlcnI7Ci0KLQlpZiAoZGV2aWNlLT5wb3J0Lm1lbWJhc2UgfHwgZGV2aWNlLT5wb3J0LmlvYmFzZSkKKwlpZiAoIShkZXZpY2UtPnBvcnQubWVtYmFzZSB8fCBkZXZpY2UtPnBvcnQuaW9iYXNlKSkKIAkJcmV0dXJuIDA7CiAKLQllcnIgPSBwYXJzZV9vcHRpb25zKGRldmljZSwgb3B0aW9ucyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKCFkZXZpY2UtPmJhdWQpCisJCWRldmljZS0+YmF1ZCA9IHByb2JlX2JhdWQoJmRldmljZS0+cG9ydCk7CiAKIAlpbml0X3BvcnQoZGV2aWNlKTsKKworCWVhcmx5X2RldmljZSA9IGRldmljZTsKKwlkZXZpY2UtPmNvbi0+d3JpdGUgPSBlYXJseV9zZXJpYWw4MjUwX3dyaXRlOwogCXJldHVybiAwOwogfQorRUFSTFlDT05fREVDTEFSRSh1YXJ0ODI1MCwgZWFybHlfc2VyaWFsODI1MF9zZXR1cCk7CitFQVJMWUNPTl9ERUNMQVJFKHVhcnQsIGVhcmx5X3NlcmlhbDgyNTBfc2V0dXApOwogCiBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3NlcmlhbDgyNTBfY29uc29sZShjaGFyICpjbWRsaW5lKQogewotCWNoYXIgKm9wdGlvbnM7Ci0JaW50IGVycjsKKwljaGFyIG1hdGNoW10gPSAidWFydDgyNTAiOwogCi0Jb3B0aW9ucyA9IHN0cnN0cihjbWRsaW5lLCAidWFydDgyNTAsIik7Ci0JaWYgKCFvcHRpb25zKSB7Ci0JCW9wdGlvbnMgPSBzdHJzdHIoY21kbGluZSwgInVhcnQsIik7Ci0JCWlmICghb3B0aW9ucykKLQkJCXJldHVybiAwOwotCX0KKwlpZiAoY21kbGluZSAmJiBjbWRsaW5lWzRdID09ICcsJykKKwkJbWF0Y2hbNF0gPSAnXDAnOwogCi0Jb3B0aW9ucyA9IHN0cmNocihjbWRsaW5lLCAnLCcpICsgMTsKLQllcnIgPSBlYXJseV9zZXJpYWw4MjUwX3NldHVwKG9wdGlvbnMpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JcmVnaXN0ZXJfY29uc29sZSgmZWFybHlfc2VyaWFsODI1MF9jb25zb2xlKTsKLQotCXJldHVybiAwOworCXJldHVybiBzZXR1cF9lYXJseWNvbihjbWRsaW5lLCBtYXRjaCwgZWFybHlfc2VyaWFsODI1MF9zZXR1cCk7CiB9CiAKIGludCBzZXJpYWw4MjUwX2ZpbmRfcG9ydF9mb3JfZWFybHljb24odm9pZCkKIHsKLQlzdHJ1Y3QgZWFybHlfc2VyaWFsODI1MF9kZXZpY2UgKmRldmljZSA9ICZlYXJseV9kZXZpY2U7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZkZXZpY2UtPnBvcnQ7CisJc3RydWN0IGVhcmx5Y29uX2RldmljZSAqZGV2aWNlID0gZWFybHlfZGV2aWNlOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZpY2UgPyAmZGV2aWNlLT5wb3J0IDogTlVMTDsKIAlpbnQgbGluZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFkZXZpY2UtPnBvcnQubWVtYmFzZSAmJiAhZGV2aWNlLT5wb3J0LmlvYmFzZSkKKwlpZiAoIXBvcnQgfHwgKCFwb3J0LT5tZW1iYXNlICYmICFwb3J0LT5pb2Jhc2UpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWxpbmUgPSBzZXJpYWw4MjUwX2ZpbmRfcG9ydChwb3J0KTsKQEAgLTI4NCw1ICsxODgsMyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQotZWFybHlfcGFyYW0oImVhcmx5Y29uIiwgc2V0dXBfZWFybHlfc2VyaWFsODI1MF9jb25zb2xlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX3BjaS5jCmluZGV4IGIxNGJjYmEuLjMzMTM3YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfcGNpLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9wY2kuYwpAQCAtMTc1Myw2ICsxNzUzLDggQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gJCTB4MTNmZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NFNDEwMF9VQVJUIDB4MmU2NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEVkFOVEVDSF9QQ0kzNjIwCTB4MzYyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEVkFOVEVDSF9QQ0kzNjE4CTB4MzYxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEVkFOVEVDSF9QQ0lmNjE4CTB4ZjYxOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzIwMEkJMHg4MDI4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fNDAwSQkweDgwNDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl84MDBJCTB4ODA4OApAQCAtMTc3OCw2ICsxNzgwLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9XQ0hfQ0gzNTJfMlMJMHgzMjUzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0NIX0NIMzUzXzRTCTB4MzQ1MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dDSF9DSDM1M18yUzFQRgkweDUwNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XQ0hfQ0gzNTNfMVMxUAkweDUwNTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9XQ0hfQ0gzNTNfMlMxUAkweDcwNTMKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BR0VTVEFSCQkweDUzNzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BR0VTVEFSXzkzNzUJMHg2ODcyCkBAIC0yNDEwLDYgKzI0MTMsMTQgQEAKIAkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCiAJCS5zZXR1cAkJPSBwY2lfb21lZ2FwY2lfc2V0dXAsCiAJfSwKKwkvKiBXQ0ggQ0gzNTMgMVMxUCBjYXJkICgxNjU1MCBjbG9uZSkgKi8KKwl7CisJCS52ZW5kb3IgICAgICAgICA9IFBDSV9WRU5ET1JfSURfV0NILAorCQkuZGV2aWNlICAgICAgICAgPSBQQ0lfREVWSUNFX0lEX1dDSF9DSDM1M18xUzFQLAorCQkuc3VidmVuZG9yICAgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlICAgICAgPSBQQ0lfQU5ZX0lELAorCQkuc2V0dXAgICAgICAgICAgPSBwY2lfd2NoX2NoMzUzX3NldHVwLAorCX0sCiAJLyogV0NIIENIMzUzIDJTMVAgY2FyZCAoMTY1NTAgY2xvbmUpICovCiAJewogCQkudmVuZG9yICAgICAgICAgPSBQQ0lfVkVORE9SX0lEX1dDSCwKQEAgLTM1MjYsNiArMzUzNyw3IEBACiAKIAkvKiBtdWx0aS1pbyBjYXJkcyBoYW5kbGVkIGJ5IHBhcnBvcnRfc2VyaWFsICovCiAJeyBQQ0lfREVWSUNFKDB4NDM0OCwgMHg3MDUzKSwgfSwgLyogV0NIIENIMzUzIDJTMVAgKi8KKwl7IFBDSV9ERVZJQ0UoMHg0MzQ4LCAweDUwNTMpLCB9LCAvKiBXQ0ggQ0gzNTMgMVMxUCAqLwogfTsKIAogLyoKQEAgLTM4ODAsNiArMzg5MiwxMyBAQAogCXsJUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIFBDSV9ERVZJQ0VfSURfQURWQU5URUNIX1BDSTM2MjAsCiAJCVBDSV9ERVZJQ0VfSURfQURWQU5URUNIX1BDSTM2MjAsIDB4MDAwMSwgMCwgMCwKIAkJcGJuX2IyXzhfOTIxNjAwIH0sCisJLyogQWR2YW50ZWNoIGFsc28gdXNlIDB4MzYxOCBhbmQgMHhmNjE4ICovCisJewlQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgUENJX0RFVklDRV9JRF9BRFZBTlRFQ0hfUENJMzYxOCwKKwkJUENJX0RFVklDRV9JRF9BRFZBTlRFQ0hfUENJMzYxOCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwXzRfOTIxNjAwIH0sCisJewlQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgUENJX0RFVklDRV9JRF9BRFZBTlRFQ0hfUENJZjYxOCwKKwkJUENJX0RFVklDRV9JRF9BRFZBTlRFQ0hfUENJMzYxOCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwXzRfOTIxNjAwIH0sCiAJewlQQ0lfVkVORE9SX0lEX1YzLCBQQ0lfREVWSUNFX0lEX1YzX1Y5NjAsCiAJCVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILAogCQlQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDhfMjMyLCAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwL0tjb25maWcKaW5kZXggMjMzMjk5MS4uMzQ5ZWU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC9LY29uZmlnCkBAIC02MSw2ICs2MSw3IEBACiAJYm9vbCAiQ29uc29sZSBvbiA4MjUwLzE2NTUwIGFuZCBjb21wYXRpYmxlIHNlcmlhbCBwb3J0IgogCWRlcGVuZHMgb24gU0VSSUFMXzgyNTA9eQogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCisJc2VsZWN0IFNFUklBTF9FQVJMWUNPTgogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgWSBoZXJlLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHVzZSBhIHNlcmlhbCBwb3J0IGFzIHRoZQogCSAgc3lzdGVtIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbApAQCAtOTAsMTEgKzkxLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEZJWF9FQVJMWUNPTl9NRU0KLQlib29sCi0JZGVwZW5kcyBvbiBYODYKLQlkZWZhdWx0IHkKLQogY29uZmlnIFNFUklBTF84MjUwX0dTQwogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAmJiBHU0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKaW5kZXggNWQ5YjAxYS4uZmI1NzE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKQEAgLTcsNiArNywxMyBAQAogbWVudSAiU2VyaWFsIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAorY29uZmlnIFNFUklBTF9FQVJMWUNPTgorCWJvb2wKKwloZWxwCisJICBTdXBwb3J0IGZvciBlYXJseSBjb25zb2xlcyB3aXRoIHRoZSBlYXJseWNvbiBwYXJhbWV0ZXIuIFRoaXMgZW5hYmxlcworCSAgdGhlIGNvbnNvbGUgYmVmb3JlIHN0YW5kYXJkIHNlcmlhbCBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgY29uc29sZSBpcworCSAgZW5hYmxlZCB3aGVuIGVhcmx5X3BhcmFtIGlzIHByb2Nlc3NlZC4KKwogc291cmNlICJkcml2ZXJzL3R0eS9zZXJpYWwvODI1MC9LY29uZmlnIgogCiBjb21tZW50ICJOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0IgpAQCAtNTMsNiArNjAsNyBAQAogCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gQU1CQSBzZXJpYWwgcG9ydCIKIAlkZXBlbmRzIG9uIFNFUklBTF9BTUJBX1BMMDExPXkKIAlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCXNlbGVjdCBTRVJJQUxfRUFSTFlDT04KIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSBhbiBBTUJBIFByaW1lQ2VsbCBVQVJUIGFzIHRoZSBzeXN0ZW0KIAkgIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbCBrZXJuZWwKQEAgLTY1LDYgKzczLDE4IEBACiAJICB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlCiAJICBrZXJuZWwgYXQgYm9vdCB0aW1lLikKIAorY29uZmlnIFNFUklBTF9FQVJMWUNPTl9BUk1fU0VNSUhPU1QKKwlib29sICJFYXJseSBjb25zb2xlIHVzaW5nIEFSTSBzZW1paG9zdGluZyIKKwlkZXBlbmRzIG9uIEFSTTY0IHx8IEFSTQorCXNlbGVjdCBTRVJJQUxfQ09SRQorCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCisJc2VsZWN0IFNFUklBTF9FQVJMWUNPTgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGVhcmx5IGRlYnVnIGNvbnNvbGUgdXNpbmcgQVJNIHNlbWlob3N0aW5nLiBUaGlzIGVuYWJsZXMKKwkgIHRoZSBjb25zb2xlIGJlZm9yZSBzdGFuZGFyZCBzZXJpYWwgZHJpdmVyIGlzIHByb2JlZC4gVGhpcyBpcyBlbmFibGVkCisJICB3aXRoICJlYXJseWNvbj1zbWgiIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29uc29sZSBpcworCSAgZW5hYmxlZCB3aGVuIGVhcmx5X3BhcmFtIGlzIHByb2Nlc3NlZC4KKwogY29uZmlnIFNFUklBTF9TQjEyNTBfRFVBUlQKIAl0cmlzdGF0ZSAiQkNNMXh4eCBvbi1jaGlwIERVQVJUIHNlcmlhbCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU0lCWVRFX1NCMXh4eF9TT0M9eQpAQCAtOTcsNiArMTE3LDcgQEAKIAlib29sICJBVDkxIC8gQVQzMiBvbi1jaGlwIHNlcmlhbCBwb3J0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTEgfHwgQVZSMzIKIAlzZWxlY3QgU0VSSUFMX0NPUkUKKwlzZWxlY3QgU0VSSUFMX01DVFJMX0dQSU8KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIG9uLWNoaXAgVUFSVHMgb2YgdGhlIEF0bWVsCiAJICBBVDkxIGFuZCBBVDMyIHByb2Nlc3NvcnMuCkBAIC0xMTYwLDYgKzExODEsMTYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBjb25zb2xlIG9uIFNDQ05YUCBzZXJpYWwgcG9ydHMuCiAKK2NvbmZpZyBTRVJJQUxfU0MxNklTN1hYCisJdHJpc3RhdGUgIlNDMTZJUzd4eCBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBTRVJJQUxfQ09SRQorCXNlbGVjdCBSRUdNQVBfSTJDIGlmIEkyQworCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciBTQzE2SVM3eHggc2VyaWFsIHBvcnRzLgorCSAgU3VwcG9ydGVkIElDcyBhcmUgU0MxNklTNzQwLCBTQzE2SVM3NDEsIFNDMTZJUzc1MCwgU0MxNklTNzUyLAorCSAgU0MxNklTNzYwIGFuZCBTQzE2SVM3NjIuCisKIGNvbmZpZyBTRVJJQUxfQkZJTl9TUE9SVAogCXRyaXN0YXRlICJCbGFja2ZpbiBTUE9SVCBlbXVsYXRlIFVBUlQiCiAJZGVwZW5kcyBvbiBCTEFDS0ZJTgpAQCAtMTMyMyw3ICsxMzU0LDcgQEAKIAogY29uZmlnIFNFUklBTF9QQ0hfVUFSVAogCXRyaXN0YXRlICJJbnRlbCBFRzIwVCBQQ0gvTEFQSVMgU2VtaWNvbiBJT0goTUw3MjEzL01MNzIyMy9NTDc4MzEpIFVBUlQiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiAoWDg2XzMyIHx8IENPTVBJTEVfVEVTVCkKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpcyBmb3IgUENIKFBsYXRmb3JtIGNvbnRyb2xsZXIgSHViKSBVQVJUIG9mIEludGVsIEVHMjBUCkBAIC0xMzY5LDE4ICsxNDAwLDE5IEBACiAJICBFbmFibGUgYSBNWFMgQVVBUlQgcG9ydCB0byBiZSB0aGUgc3lzdGVtIGNvbnNvbGUuCiAKIGNvbmZpZyBTRVJJQUxfWElMSU5YX1BTX1VBUlQKLQl0cmlzdGF0ZSAiWGlsaW54IFBTIFVBUlQgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiQ2FkZW5jZSAoWGlsaW54IFp5bnEpIFVBUlQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFhpbGlueCBQUyBVQVJUIHBvcnQuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBVQVJULiBJdCBpcyBmb3VuZCBlLmcuIGluIFhpbGlueAorCSAgWnlucS4KIAogY29uZmlnIFNFUklBTF9YSUxJTlhfUFNfVUFSVF9DT05TT0xFCi0JYm9vbCAiWGlsaW54IFBTIFVBUlQgY29uc29sZSBzdXBwb3J0IgorCWJvb2wgIkNhZGVuY2UgVUFSVCBjb25zb2xlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTRVJJQUxfWElMSU5YX1BTX1VBUlQ9eQogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCiAJaGVscAotCSAgRW5hYmxlIGEgWGlsaW54IFBTIFVBUlQgcG9ydCB0byBiZSB0aGUgc3lzdGVtIGNvbnNvbGUuCisJICBFbmFibGUgYSBDYWRlbmNlIFVBUlQgcG9ydCB0byBiZSB0aGUgc3lzdGVtIGNvbnNvbGUuCiAKIGNvbmZpZyBTRVJJQUxfQVI5MzNYCiAJdHJpc3RhdGUgIkFSOTMzWCBzZXJpYWwgcG9ydCBzdXBwb3J0IgpAQCAtMTQ3OSw2ICsxNTExLDcgQEAKIAogY29uZmlnIFNFUklBTF9GU0xfTFBVQVJUCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBscHVhcnQgc2VyaWFsIHBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhBU19ETUEKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgb24tY2hpcCBscHVhcnQgb24gc29tZSBGcmVlc2NhbGUgU09Dcy4KQEAgLTE1MDgsNiArMTU0MSwyMCBAQAogCWRlcGVuZHMgb24gU0VSSUFMX1NUX0FTQz15CiAJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKIAorY29uZmlnIFNFUklBTF9NRU5fWjEzNQorCXRyaXN0YXRlICJNRU4gMTZ6MTM1IFN1cHBvcnQiCisJc2VsZWN0IFNFUklBTF9DT1JFCisJZGVwZW5kcyBvbiBNQ0IKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNRU4gMTZ6MTM1IEhpZ2ggU3BlZWQgVUFSVCBJUC1Db3JlCisJICBvbiBhIE1DQiBjYXJyaWVyLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKKwkgIG1lbl96MTM1X3VhcnQua28KKwogZW5kbWVudQogCitjb25maWcgU0VSSUFMX01DVFJMX0dQSU8KKwl0cmlzdGF0ZQorCiBlbmRpZiAjIFRUWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlCmluZGV4IDM2ODA4NTQuLjAwODBjYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKQEAgLTUsNiArNSw5IEBACiBvYmotJChDT05GSUdfU0VSSUFMX0NPUkUpICs9IHNlcmlhbF9jb3JlLm8KIG9iai0kKENPTkZJR19TRVJJQUxfMjEyODUpICs9IDIxMjg1Lm8KIAorb2JqLSQoQ09ORklHX1NFUklBTF9FQVJMWUNPTikgKz0gZWFybHljb24ubworb2JqLSQoQ09ORklHX1NFUklBTF9FQVJMWUNPTl9BUk1fU0VNSUhPU1QpICs9IGVhcmx5Y29uLWFybS1zZW1paG9zdC5vCisKICMgVGhlc2UgU3BhcmMgZHJpdmVycyBoYXZlIHRvIGFwcGVhciBiZWZvcmUgb3RoZXJzIHN1Y2ggYXMgODI1MAogIyB3aGljaCBzaGFyZSB0dHlTeCBtaW5vciBub2RlIHNwYWNlLiAgT3RoZXJ3aXNlIGNvbnNvbGUgZGV2aWNlCiAjIG5hbWVzIGNoYW5nZSBhbmQgb3RoZXIgdW5wbGVzYW50cmllcy4KQEAgLTQ4LDYgKzUxLDcgQEAKIG9iai0kKENPTkZJR19TRVJJQUxfU0IxMjUwX0RVQVJUKSArPSBzYjEyNTAtZHVhcnQubwogb2JqLSQoQ09ORklHX0VUUkFYX1NFUklBTCkgKz0gY3Jpc3YxMC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NDQ05YUCkgKz0gc2NjbnhwLm8KK29iai0kKENPTkZJR19TRVJJQUxfU0MxNklTN1hYKSArPSBzYzE2aXM3eHgubwogb2JqLSQoQ09ORklHX1NFUklBTF9KU00pICs9IGpzbS8KIG9iai0kKENPTkZJR19TRVJJQUxfVFhYOSkgKz0gc2VyaWFsX3R4eDkubwogb2JqLSQoQ09ORklHX1NFUklBTF9WUjQxWFgpICs9IHZyNDF4eF9zaXUubwpAQCAtODcsMyArOTEsNyBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9BUkMpCSs9IGFyY191YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfUlAyKQkrPSBycDIubwogb2JqLSQoQ09ORklHX1NFUklBTF9GU0xfTFBVQVJUKQkrPSBmc2xfbHB1YXJ0Lm8KK29iai0kKENPTkZJR19TRVJJQUxfTUVOX1oxMzUpCSs9IG1lbl96MTM1X3VhcnQubworCisjIEdQSU9MSUIgaGVscGVycyBmb3IgbW9kZW0gY29udHJvbCBsaW5lcworb2JqLSQoQ09ORklHX1NFUklBTF9NQ1RSTF9HUElPKQkrPSBzZXJpYWxfbWN0cmxfZ3Bpby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCBkYWNmMGEwLi5lZTNkODAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCiAJLyogT3B0aW9uYWxseSBtYWtlIHVzZSBvZiBhbiBSWCBjaGFubmVsIGFzIHdlbGwgKi8KIAljaGFuID0gZG1hX3JlcXVlc3Rfc2xhdmVfY2hhbm5lbChkZXYsICJyeCIpOwotCQorCiAJaWYgKCFjaGFuICYmIHBsYXQtPmRtYV9yeF9wYXJhbSkgewogCQljaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBwbGF0LT5kbWFfZmlsdGVyLCBwbGF0LT5kbWFfcnhfcGFyYW0pOwogCkBAIC0yMDQ1LDYgKzIwNDUsMzQgQEAKIH07CiAKICNkZWZpbmUgQU1CQV9DT05TT0xFCSgmYW1iYV9jb25zb2xlKQorCitzdGF0aWMgdm9pZCBwbDAxMV9wdXRjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjKQoreworCXdoaWxlIChyZWFkbChwb3J0LT5tZW1iYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX1RYRkYpCisJCTsKKwl3cml0ZWIoYywgcG9ydC0+bWVtYmFzZSArIFVBUlQwMXhfRFIpOworCXdoaWxlIChyZWFkbChwb3J0LT5tZW1iYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX0JVU1kpCisJCTsKK30KKworc3RhdGljIHZvaWQgcGwwMTFfZWFybHlfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgbikKK3sKKwlzdHJ1Y3QgZWFybHljb25fZGV2aWNlICpkZXYgPSBjb24tPmRhdGE7CisKKwl1YXJ0X2NvbnNvbGVfd3JpdGUoJmRldi0+cG9ydCwgcywgbiwgcGwwMTFfcHV0Yyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMDExX2Vhcmx5X2NvbnNvbGVfc2V0dXAoc3RydWN0IGVhcmx5Y29uX2RldmljZSAqZGV2aWNlLAorCQkJCQkgICAgY29uc3QgY2hhciAqb3B0KQoreworCWlmICghZGV2aWNlLT5wb3J0Lm1lbWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2aWNlLT5jb24tPndyaXRlID0gcGwwMTFfZWFybHlfd3JpdGU7CisJcmV0dXJuIDA7Cit9CitFQVJMWUNPTl9ERUNMQVJFKHBsMDExLCBwbDAxMV9lYXJseV9jb25zb2xlX3NldHVwKTsKKwogI2Vsc2UKICNkZWZpbmUgQU1CQV9DT05TT0xFCU5VTEwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IDUzZWVlYTEuLjNmY2VhZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTQzLDYgKzQzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0bWVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgpAQCAtNTcsNiArNjAsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAorI2luY2x1ZGUgInNlcmlhbF9tY3RybF9ncGlvLmgiCisKIHN0YXRpYyB2b2lkIGF0bWVsX3N0YXJ0X3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgYXRtZWxfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIApAQCAtMTYyLDggKzE2NywxMCBAQAogCXN0cnVjdCBjaXJjX2J1ZgkJcnhfcmluZzsKIAogCXN0cnVjdCBzZXJpYWxfcnM0ODUJcnM0ODU7CQkvKiByczQ4NSBzZXR0aW5ncyAqLwotCWludAkJCXJ0c19ncGlvOwkvKiBvcHRpb25hbCBSVFMgR1BJTyAqLworCXN0cnVjdCBtY3RybF9ncGlvcwkqZ3Bpb3M7CisJaW50CQkJZ3Bpb19pcnFbVUFSVF9HUElPX01BWF07CiAJdW5zaWduZWQgaW50CQl0eF9kb25lX21hc2s7CisJYm9vbAkJCW1zX2lycV9lbmFibGVkOwogCWJvb2wJCQlpc191c2FydDsJLyogdXNhcnQgb3IgdWFydCAqLwogCXN0cnVjdCB0aW1lcl9saXN0CXVhcnRfdGltZXI7CS8qIHVhcnQgdGltZXIgKi8KIAlpbnQgKCpwcmVwYXJlX3J4KShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKQEAgLTIzNyw2ICsyNDQsNTAgQEAKIAlyZXR1cm4gYXRtZWxfcG9ydC0+dXNlX2RtYV9yeDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBhdG1lbF9nZXRfbGluZXNfc3RhdHVzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IHRvX2F0bWVsX3VhcnRfcG9ydChwb3J0KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCByZXQgPSAwOworCisJc3RhdHVzID0gVUFSVF9HRVRfQ1NSKHBvcnQpOworCisJbWN0cmxfZ3Bpb19nZXQoYXRtZWxfcG9ydC0+Z3Bpb3MsICZyZXQpOworCisJaWYgKCFJU19FUlJfT1JfTlVMTChtY3RybF9ncGlvX3RvX2dwaW9kKGF0bWVsX3BvcnQtPmdwaW9zLAorCQkJCQkJVUFSVF9HUElPX0NUUykpKSB7CisJCWlmIChyZXQgJiBUSU9DTV9DVFMpCisJCQlzdGF0dXMgJj0gfkFUTUVMX1VTX0NUUzsKKwkJZWxzZQorCQkJc3RhdHVzIHw9IEFUTUVMX1VTX0NUUzsKKwl9CisKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKG1jdHJsX2dwaW9fdG9fZ3Bpb2QoYXRtZWxfcG9ydC0+Z3Bpb3MsCisJCQkJCQlVQVJUX0dQSU9fRFNSKSkpIHsKKwkJaWYgKHJldCAmIFRJT0NNX0RTUikKKwkJCXN0YXR1cyAmPSB+QVRNRUxfVVNfRFNSOworCQllbHNlCisJCQlzdGF0dXMgfD0gQVRNRUxfVVNfRFNSOworCX0KKworCWlmICghSVNfRVJSX09SX05VTEwobWN0cmxfZ3Bpb190b19ncGlvZChhdG1lbF9wb3J0LT5ncGlvcywKKwkJCQkJCVVBUlRfR1BJT19SSSkpKSB7CisJCWlmIChyZXQgJiBUSU9DTV9SSSkKKwkJCXN0YXR1cyAmPSB+QVRNRUxfVVNfUkk7CisJCWVsc2UKKwkJCXN0YXR1cyB8PSBBVE1FTF9VU19SSTsKKwl9CisKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKG1jdHJsX2dwaW9fdG9fZ3Bpb2QoYXRtZWxfcG9ydC0+Z3Bpb3MsCisJCQkJCQlVQVJUX0dQSU9fRENEKSkpIHsKKwkJaWYgKHJldCAmIFRJT0NNX0NEKQorCQkJc3RhdHVzICY9IH5BVE1FTF9VU19EQ0Q7CisJCWVsc2UKKwkJCXN0YXR1cyB8PSBBVE1FTF9VU19EQ0Q7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKwogLyogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHJzNDg1IHN1cHBvcnQgKi8KIHZvaWQgYXRtZWxfY29uZmlnX3JzNDg1KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfcnM0ODUgKnJzNDg1Y29uZikKIHsKQEAgLTI5NiwxNyArMzQ3LDYgQEAKIAl1bnNpZ25lZCBpbnQgbW9kZTsKIAlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gdG9fYXRtZWxfdWFydF9wb3J0KHBvcnQpOwogCi0JLyoKLQkgKiBBVDkxUk05MjAwIEVycmF0YSAjMzk6IFJUUzAgaXMgbm90IGludGVybmFsbHkgY29ubmVjdGVkCi0JICogdG8gUEEyMS4gV2UgbmVlZCB0byBkcml2ZSB0aGUgcGluIGFzIGEgR1BJTy4KLQkgKi8KLQlpZiAoZ3Bpb19pc192YWxpZChhdG1lbF9wb3J0LT5ydHNfZ3BpbykpIHsKLQkJaWYgKG1jdHJsICYgVElPQ01fUlRTKQotCQkJZ3Bpb19zZXRfdmFsdWUoYXRtZWxfcG9ydC0+cnRzX2dwaW8sIDApOwotCQllbHNlCi0JCQlncGlvX3NldF92YWx1ZShhdG1lbF9wb3J0LT5ydHNfZ3BpbywgMSk7Ci0JfQotCiAJaWYgKG1jdHJsICYgVElPQ01fUlRTKQogCQljb250cm9sIHw9IEFUTUVMX1VTX1JUU0VOOwogCWVsc2UKQEAgLTMxOSw2ICszNTksOCBAQAogCiAJVUFSVF9QVVRfQ1IocG9ydCwgY29udHJvbCk7CiAKKwltY3RybF9ncGlvX3NldChhdG1lbF9wb3J0LT5ncGlvcywgbWN0cmwpOworCiAJLyogTG9jYWwgbG9vcGJhY2sgbW9kZT8gKi8KIAltb2RlID0gVUFSVF9HRVRfTVIocG9ydCkgJiB+QVRNRUxfVVNfQ0hNT0RFOwogCWlmIChtY3RybCAmIFRJT0NNX0xPT1ApCkBAIC0zNDYsNyArMzg4LDggQEAKICAqLwogc3RhdGljIHVfaW50IGF0bWVsX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXVuc2lnbmVkIGludCBzdGF0dXMsIHJldCA9IDA7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IHRvX2F0bWVsX3VhcnRfcG9ydChwb3J0KTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMCwgc3RhdHVzOwogCiAJc3RhdHVzID0gVUFSVF9HRVRfQ1NSKHBvcnQpOwogCkBAIC0zNjIsNyArNDA1LDcgQEAKIAlpZiAoIShzdGF0dXMgJiBBVE1FTF9VU19SSSkpCiAJCXJldCB8PSBUSU9DTV9SSTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIG1jdHJsX2dwaW9fZ2V0KGF0bWVsX3BvcnQtPmdwaW9zLCAmcmV0KTsKIH0KIAogLyoKQEAgLTQ0OSw4ICs0OTIsMzggQEAKICAqLwogc3RhdGljIHZvaWQgYXRtZWxfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JVUFSVF9QVVRfSUVSKHBvcnQsIEFUTUVMX1VTX1JJSUMgfCBBVE1FTF9VU19EU1JJQwotCQkJfCBBVE1FTF9VU19EQ0RJQyB8IEFUTUVMX1VTX0NUU0lDKTsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gdG9fYXRtZWxfdWFydF9wb3J0KHBvcnQpOworCXVpbnQzMl90IGllciA9IDA7CisKKwkvKgorCSAqIEludGVycnVwdCBzaG91bGQgbm90IGJlIGVuYWJsZWQgdHdpY2UKKwkgKi8KKwlpZiAoYXRtZWxfcG9ydC0+bXNfaXJxX2VuYWJsZWQpCisJCXJldHVybjsKKworCWF0bWVsX3BvcnQtPm1zX2lycV9lbmFibGVkID0gdHJ1ZTsKKworCWlmIChhdG1lbF9wb3J0LT5ncGlvX2lycVtVQVJUX0dQSU9fQ1RTXSA+PSAwKQorCQllbmFibGVfaXJxKGF0bWVsX3BvcnQtPmdwaW9faXJxW1VBUlRfR1BJT19DVFNdKTsKKwllbHNlCisJCWllciB8PSBBVE1FTF9VU19DVFNJQzsKKworCWlmIChhdG1lbF9wb3J0LT5ncGlvX2lycVtVQVJUX0dQSU9fRFNSXSA+PSAwKQorCQllbmFibGVfaXJxKGF0bWVsX3BvcnQtPmdwaW9faXJxW1VBUlRfR1BJT19EU1JdKTsKKwllbHNlCisJCWllciB8PSBBVE1FTF9VU19EU1JJQzsKKworCWlmIChhdG1lbF9wb3J0LT5ncGlvX2lycVtVQVJUX0dQSU9fUkldID49IDApCisJCWVuYWJsZV9pcnEoYXRtZWxfcG9ydC0+Z3Bpb19pcnFbVUFSVF9HUElPX1JJXSk7CisJZWxzZQorCQlpZXIgfD0gQVRNRUxfVVNfUklJQzsKKworCWlmIChhdG1lbF9wb3J0LT5ncGlvX2lycVtVQVJUX0dQSU9fRENEXSA+PSAwKQorCQllbmFibGVfaXJxKGF0bWVsX3BvcnQtPmdwaW9faXJxW1VBUlRfR1BJT19EQ0RdKTsKKwllbHNlCisJCWllciB8PSBBVE1FTF9VU19EQ0RJQzsKKworCVVBUlRfUFVUX0lFUihwb3J0LCBpZXIpOwogfQogCiAvKgpAQCAtMTAzOSwxMSArMTExMiwzMSBAQAogc3RhdGljIGlycXJldHVybl90IGF0bWVsX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gdG9fYXRtZWxfdWFydF9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGludCBzdGF0dXMsIHBlbmRpbmcsIHBhc3NfY291bnRlciA9IDA7CisJYm9vbCBncGlvX2hhbmRsZWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJc3RhdHVzID0gVUFSVF9HRVRfQ1NSKHBvcnQpOworCQlzdGF0dXMgPSBhdG1lbF9nZXRfbGluZXNfc3RhdHVzKHBvcnQpOwogCQlwZW5kaW5nID0gc3RhdHVzICYgVUFSVF9HRVRfSU1SKHBvcnQpOworCQlpZiAoIWdwaW9faGFuZGxlZCkgeworCQkJLyoKKwkJCSAqIERlYWxpbmcgd2l0aCBHUElPIGludGVycnVwdAorCQkJICovCisJCQlpZiAoaXJxID09IGF0bWVsX3BvcnQtPmdwaW9faXJxW1VBUlRfR1BJT19DVFNdKQorCQkJCXBlbmRpbmcgfD0gQVRNRUxfVVNfQ1RTSUM7CisKKwkJCWlmIChpcnEgPT0gYXRtZWxfcG9ydC0+Z3Bpb19pcnFbVUFSVF9HUElPX0RTUl0pCisJCQkJcGVuZGluZyB8PSBBVE1FTF9VU19EU1JJQzsKKworCQkJaWYgKGlycSA9PSBhdG1lbF9wb3J0LT5ncGlvX2lycVtVQVJUX0dQSU9fUkldKQorCQkJCXBlbmRpbmcgfD0gQVRNRUxfVVNfUklJQzsKKworCQkJaWYgKGlycSA9PSBhdG1lbF9wb3J0LT5ncGlvX2lycVtVQVJUX0dQSU9fRENEXSkKKwkJCQlwZW5kaW5nIHw9IEFUTUVMX1VTX0RDRElDOworCisJCQlncGlvX2hhbmRsZWQgPSB0cnVlOworCQl9CiAJCWlmICghcGVuZGluZykKIAkJCWJyZWFrOwogCkBAIC0xNTIzLDYgKzE2MTYsNDUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0bWVsX2ZyZWVfZ3Bpb19pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gdG9fYXRtZWxfdWFydF9wb3J0KHBvcnQpOworCWVudW0gbWN0cmxfZ3Bpb19pZHggaTsKKworCWZvciAoaSA9IDA7IGkgPCBVQVJUX0dQSU9fTUFYOyBpKyspCisJCWlmIChhdG1lbF9wb3J0LT5ncGlvX2lycVtpXSA+PSAwKQorCQkJZnJlZV9pcnEoYXRtZWxfcG9ydC0+Z3Bpb19pcnFbaV0sIHBvcnQpOworfQorCitzdGF0aWMgaW50IGF0bWVsX3JlcXVlc3RfZ3Bpb19pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gdG9fYXRtZWxfdWFydF9wb3J0KHBvcnQpOworCWludCAqaXJxID0gYXRtZWxfcG9ydC0+Z3Bpb19pcnE7CisJZW51bSBtY3RybF9ncGlvX2lkeCBpOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgKGkgPCBVQVJUX0dQSU9fTUFYKSAmJiAhZXJyOyBpKyspIHsKKwkJaWYgKGlycVtpXSA8IDApCisJCQljb250aW51ZTsKKworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpcnFbaV0sIElSUV9OT0FVVE9FTik7CisJCWVyciA9IHJlcXVlc3RfaXJxKGlycVtpXSwgYXRtZWxfaW50ZXJydXB0LCBJUlFfVFlQRV9FREdFX0JPVEgsCisJCQkJICAiYXRtZWxfc2VyaWFsIiwgcG9ydCk7CisJCWlmIChlcnIpCisJCQlkZXZfZXJyKHBvcnQtPmRldiwgImF0bWVsX3N0YXJ0dXAgLSBDYW4ndCBnZXQgJWQgaXJxXG4iLAorCQkJCWlycVtpXSk7CisJfQorCisJLyoKKwkgKiBJZiBzb21ldGhpbmcgd2VudCB3cm9uZywgcm9sbGJhY2suCisJICovCisJd2hpbGUgKGVyciAmJiAoLS1pID49IDApKQorCQlpZiAoaXJxW2ldID49IDApCisJCQlmcmVlX2lycShpcnFbaV0sIHBvcnQpOworCisJcmV0dXJuIGVycjsKK30KKwogLyoKICAqIFBlcmZvcm0gaW5pdGlhbGl6YXRpb24gYW5kIGVuYWJsZSBwb3J0IGZvciByZWNlcHRpb24KICAqLwpAQCAtMTUzOSw2ICsxNjcxLDcgQEAKIAkgKiBoYW5kbGUgYW4gdW5leHBlY3RlZCBpbnRlcnJ1cHQKIAkgKi8KIAlVQVJUX1BVVF9JRFIocG9ydCwgLTEpOworCWF0bWVsX3BvcnQtPm1zX2lycV9lbmFibGVkID0gZmFsc2U7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBJUlEKQEAgLTE1NTEsNiArMTY4NCwxMyBAQAogCX0KIAogCS8qCisJICogR2V0IHRoZSBHUElPIGxpbmVzIElSUQorCSAqLworCXJldHZhbCA9IGF0bWVsX3JlcXVlc3RfZ3Bpb19pcnEocG9ydCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmcmVlX2lycTsKKworCS8qCiAJICogSW5pdGlhbGl6ZSBETUEgKGlmIG5lY2Vzc2FyeSkKIAkgKi8KIAlhdG1lbF9pbml0X3Byb3BlcnR5KGF0bWVsX3BvcnQsIHBkZXYpOwpAQCAtMTU2OCw3ICsxNzA4LDcgQEAKIAl9CiAKIAkvKiBTYXZlIGN1cnJlbnQgQ1NSIGZvciBjb21wYXJpc29uIGluIGF0bWVsX3Rhc2tsZXRfZnVuYygpICovCi0JYXRtZWxfcG9ydC0+aXJxX3N0YXR1c19wcmV2ID0gVUFSVF9HRVRfQ1NSKHBvcnQpOworCWF0bWVsX3BvcnQtPmlycV9zdGF0dXNfcHJldiA9IGF0bWVsX2dldF9saW5lc19zdGF0dXMocG9ydCk7CiAJYXRtZWxfcG9ydC0+aXJxX3N0YXR1cyA9IGF0bWVsX3BvcnQtPmlycV9zdGF0dXNfcHJldjsKIAogCS8qCkBAIC0xNjE0LDYgKzE3NTQsMTEgQEAKIAl9CiAKIAlyZXR1cm4gMDsKKworZnJlZV9pcnE6CisJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCkBAIC0xNjYxLDkgKzE4MDYsMTIgQEAKIAlhdG1lbF9wb3J0LT5yeF9yaW5nLnRhaWwgPSAwOwogCiAJLyoKLQkgKiBGcmVlIHRoZSBpbnRlcnJ1cHQKKwkgKiBGcmVlIHRoZSBpbnRlcnJ1cHRzCiAJICovCiAJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKKwlhdG1lbF9mcmVlX2dwaW9faXJxKHBvcnQpOworCisJYXRtZWxfcG9ydC0+bXNfaXJxX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTIzMjQsNiArMjQ3MiwyNiBAQAogI2RlZmluZSBhdG1lbF9zZXJpYWxfcmVzdW1lIE5VTEwKICNlbmRpZgogCitzdGF0aWMgaW50IGF0bWVsX2luaXRfZ3Bpb3Moc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqcCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWVudW0gbWN0cmxfZ3Bpb19pZHggaTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDsKKworCXAtPmdwaW9zID0gbWN0cmxfZ3Bpb19pbml0KGRldiwgMCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKHAtPmdwaW9zKSkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IFVBUlRfR1BJT19NQVg7IGkrKykgeworCQlncGlvZCA9IG1jdHJsX2dwaW9fdG9fZ3Bpb2QocC0+Z3Bpb3MsIGkpOworCQlpZiAoZ3Bpb2QgJiYgKGdwaW9kX2dldF9kaXJlY3Rpb24oZ3Bpb2QpID09IEdQSU9GX0RJUl9JTikpCisJCQlwLT5ncGlvX2lycVtpXSA9IGdwaW9kX3RvX2lycShncGlvZCk7CisJCWVsc2UKKwkJCXAtPmdwaW9faXJxW2ldID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdG1lbF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICpwb3J0OwpAQCAtMjM1OSwyNSArMjUyNywxMSBAQAogCXBvcnQgPSAmYXRtZWxfcG9ydHNbcmV0XTsKIAlwb3J0LT5iYWNrdXBfaW1yID0gMDsKIAlwb3J0LT51YXJ0LmxpbmUgPSByZXQ7Ci0JcG9ydC0+cnRzX2dwaW8gPSAtRUlOVkFMOyAvKiBJbnZhbGlkLCB6ZXJvIGNvdWxkIGJlIHZhbGlkICovCi0JaWYgKHBkYXRhKQotCQlwb3J0LT5ydHNfZ3BpbyA9IHBkYXRhLT5ydHNfZ3BpbzsKLQllbHNlIGlmIChucCkKLQkJcG9ydC0+cnRzX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgInJ0cy1ncGlvcyIsIDApOwogCi0JaWYgKGdwaW9faXNfdmFsaWQocG9ydC0+cnRzX2dwaW8pKSB7Ci0JCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0KCZwZGV2LT5kZXYsIHBvcnQtPnJ0c19ncGlvLCAiUlRTIik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHJlcXVlc3RpbmcgUlRTIEdQSU9cbiIpOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJLyogRGVmYXVsdCB0byAxIGFzIFJUUyBpcyBhY3RpdmUgbG93ICovCi0JCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwb3J0LT5ydHNfZ3BpbywgMSk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHNldHRpbmcgdXAgUlRTIEdQSU9cbiIpOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9CisJcmV0ID0gYXRtZWxfaW5pdF9ncGlvcyhwb3J0LCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMiLAorCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIEdQSU9zLiBUaGUgc2VyaWFsIHBvcnQgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkIik7CiAKIAlyZXQgPSBhdG1lbF9pbml0X3BvcnQocG9ydCwgcGRldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDdkNzYyMTQuLmFhNjBlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtOTcxLDcgKzk3MSw3IEBACiAgKiBOb3RlIHRoYXQgdGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQKICAqLwogc3RhdGljIHZvaWQgY3BtX3VhcnRfZWFybHlfd3JpdGUoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvLAotCQljb25zdCBjaGFyICpzdHJpbmcsIHVfaW50IGNvdW50KQorCQljb25zdCBjaGFyICpzdHJpbmcsIHVfaW50IGNvdW50LCBib29sIGhhbmRsZV9saW5lZmVlZCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAljYmRfdCBfX2lvbWVtICpiZHAsICpiZGJhc2U7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCQkJYmRwKys7CiAKIAkJLyogaWYgYSBMRiwgYWxzbyBkbyBDUi4uLiAqLwotCQlpZiAoKnN0cmluZyA9PSAxMCkgeworCQlpZiAoaGFuZGxlX2xpbmVmZWVkICYmICpzdHJpbmcgPT0gMTApIHsKIAkJCXdoaWxlICgoaW5fYmUxNigmYmRwLT5jYmRfc2MpICYgQkRfU0NfUkVBRFkpICE9IDApCiAJCQkJOwogCkBAIC0xMTExLDcgKzExMTEsNyBAQAogCXN0YXRpYyBjaGFyIGNoWzJdOwogCiAJY2hbMF0gPSAoY2hhciljOwotCWNwbV91YXJ0X2Vhcmx5X3dyaXRlKHBpbmZvLCBjaCwgMSk7CisJY3BtX3VhcnRfZWFybHlfd3JpdGUocGluZm8sIGNoLCAxLCBmYWxzZSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0NPTlNPTEVfUE9MTCAqLwogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGluZm8tPnBvcnQubG9jaywgZmxhZ3MpOwogCX0KIAotCWNwbV91YXJ0X2Vhcmx5X3dyaXRlKHBpbmZvLCBzLCBjb3VudCk7CisJY3BtX3VhcnRfZWFybHlfd3JpdGUocGluZm8sIHMsIGNvdW50LCB0cnVlKTsKIAogCWlmICh1bmxpa2VseShub2xvY2spKSB7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9lYXJseWNvbi1hcm0tc2VtaWhvc3QuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9lYXJseWNvbi1hcm0tc2VtaWhvc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODNkYjEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2Vhcmx5Y29uLWFybS1zZW1paG9zdC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQVJNIEx0ZC4KKyAqIEF1dGhvcjogTWFyYyBaeW5naWVyIDxtYXJjLnp5bmdpZXJAYXJtLmNvbT4KKyAqCisgKiBBZGFwdGVkIGZvciBBUk0gYW5kIGVhcmx5Y29uOgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKiBBdXRob3I6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCisjZGVmaW5lIFNFTUlIT1NUX1NXSQkiMHhhYiIKKyNlbHNlCisjZGVmaW5lIFNFTUlIT1NUX1NXSQkiMHgxMjM0NTYiCisjZW5kaWYKKworLyoKKyAqIFNlbWlob3N0aW5nLWJhc2VkIGRlYnVnIGNvbnNvbGUKKyAqLworc3RhdGljIHZvaWQgc21oX3B1dGMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGMpCit7CisjaWZkZWYgQ09ORklHX0FSTTY0CisJYXNtIHZvbGF0aWxlKCJtb3YgIHgxLCAlMFxuIgorCQkgICAgICJtb3YgIHgwLCAjM1xuIgorCQkgICAgICJobHQgIDB4ZjAwMFxuIgorCQkgICAgIDogOiAiciIgKCZjKSA6ICJ4MCIsICJ4MSIsICJtZW1vcnkiKTsKKyNlbHNlCisJYXNtIHZvbGF0aWxlKCJtb3YgIHIxLCAlMFxuIgorCQkgICAgICJtb3YgIHIwLCAjM1xuIgorCQkgICAgICJzdmMgICIgU0VNSUhPU1RfU1dJICJcbiIKKwkJICAgICA6IDogInIiICgmYykgOiAicjAiLCAicjEiLCAibWVtb3J5Iik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc21oX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIG4pCit7CisJc3RydWN0IGVhcmx5Y29uX2RldmljZSAqZGV2ID0gY29uLT5kYXRhOworCXVhcnRfY29uc29sZV93cml0ZSgmZGV2LT5wb3J0LCBzLCBuLCBzbWhfcHV0Yyk7Cit9CisKK2ludCBfX2luaXQgZWFybHlfc21oX3NldHVwKHN0cnVjdCBlYXJseWNvbl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqb3B0KQoreworCWRldmljZS0+Y29uLT53cml0ZSA9IHNtaF93cml0ZTsKKwlyZXR1cm4gMDsKK30KK0VBUkxZQ09OX0RFQ0xBUkUoc21oLCBlYXJseV9zbWhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2Vhcmx5Y29uLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvZWFybHljb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTJlODMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2Vhcmx5Y29uLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIEx0ZC4KKyAqIEF1dGhvcjogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KKyAqCisgKiBCYXNlZCBvbiA4MjUwIGVhcmx5Y29uOgorICogKGMpIENvcHlyaWdodCAyMDA0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpZmRlZiBDT05GSUdfRklYX0VBUkxZQ09OX01FTQorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgZWFybHlfY29uID0geworCS5uYW1lID0JCSJlYXJseWNvbiIsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSIHwgQ09OX0JPT1QsCisJLmluZGV4ID0JLTEsCit9OworCitzdGF0aWMgc3RydWN0IGVhcmx5Y29uX2RldmljZSBlYXJseV9jb25zb2xlX2RldiA9IHsKKwkuY29uID0gJmVhcmx5X2NvbiwKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBfX2luaXQgZWFybHljb25fbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHNpemVfdCBzaXplKQoreworCXZvaWQgX19pb21lbSAqYmFzZTsKKyNpZmRlZiBDT05GSUdfRklYX0VBUkxZQ09OX01FTQorCXNldF9maXhtYXBfaW8oRklYX0VBUkxZQ09OX01FTV9CQVNFLCBwYWRkciAmIFBBR0VfTUFTSyk7CisJYmFzZSA9ICh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9FQVJMWUNPTl9NRU1fQkFTRSk7CisJYmFzZSArPSBwYWRkciAmIH5QQUdFX01BU0s7CisjZWxzZQorCWJhc2UgPSBpb3JlbWFwKHBhZGRyLCBzaXplKTsKKyNlbmRpZgorCWlmICghYmFzZSkKKwkJcHJfZXJyKCIlczogQ291bGRuJ3QgbWFwIDB4JWxseFxuIiwgX19mdW5jX18sCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBhZGRyKTsKKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9vcHRpb25zKHN0cnVjdCBlYXJseWNvbl9kZXZpY2UgKmRldmljZSwKKwkJCQljaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmZGV2aWNlLT5wb3J0OworCWludCBtbWlvLCBtbWlvMzIsIGxlbmd0aDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoIW9wdGlvbnMpCisJCXJldHVybiAtRU5PREVWOworCisJbW1pbyA9ICFzdHJuY21wKG9wdGlvbnMsICJtbWlvLCIsIDUpOworCW1taW8zMiA9ICFzdHJuY21wKG9wdGlvbnMsICJtbWlvMzIsIiwgNyk7CisJaWYgKG1taW8gfHwgbW1pbzMyKSB7CisJCXBvcnQtPmlvdHlwZSA9IChtbWlvID8gVVBJT19NRU0gOiBVUElPX01FTTMyKTsKKwkJb3B0aW9ucyArPSBtbWlvID8gNSA6IDc7CisJCWFkZHIgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCBOVUxMLCAwKTsKKwkJcG9ydC0+bWFwYmFzZSA9IGFkZHI7CisJCWlmIChtbWlvMzIpCisJCQlwb3J0LT5yZWdzaGlmdCA9IDI7CisJfSBlbHNlIGlmICghc3RybmNtcChvcHRpb25zLCAiaW8sIiwgMykpIHsKKwkJcG9ydC0+aW90eXBlID0gVVBJT19QT1JUOworCQlvcHRpb25zICs9IDM7CisJCWFkZHIgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCBOVUxMLCAwKTsKKwkJcG9ydC0+aW9iYXNlID0gYWRkcjsKKwkJbW1pbyA9IDA7CisJfSBlbHNlIGlmICghc3RybmNtcChvcHRpb25zLCAiMHgiLCAyKSkgeworCQlwb3J0LT5pb3R5cGUgPSBVUElPX01FTTsKKwkJYWRkciA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsIE5VTEwsIDApOworCQlwb3J0LT5tYXBiYXNlID0gYWRkcjsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwb3J0LT51YXJ0Y2xrID0gQkFTRV9CQVVEICogMTY7CisKKwlvcHRpb25zID0gc3RyY2hyKG9wdGlvbnMsICcsJyk7CisJaWYgKG9wdGlvbnMpIHsKKwkJb3B0aW9ucysrOworCQlkZXZpY2UtPmJhdWQgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCBOVUxMLCAwKTsKKwkJbGVuZ3RoID0gbWluKHN0cmNzcG4ob3B0aW9ucywgIiAiKSArIDEsCisJCQkgICAgIChzaXplX3QpKHNpemVvZihkZXZpY2UtPm9wdGlvbnMpKSk7CisJCXN0cmxjcHkoZGV2aWNlLT5vcHRpb25zLCBvcHRpb25zLCBsZW5ndGgpOworCX0KKworCWlmIChtbWlvIHx8IG1taW8zMikKKwkJcHJfaW5mbygiRWFybHkgc2VyaWFsIGNvbnNvbGUgYXQgTU1JTyVzIDB4JWxseCAob3B0aW9ucyAnJXMnKVxuIiwKKwkJCW1taW8zMiA/ICIzMiIgOiAiIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+bWFwYmFzZSwKKwkJCWRldmljZS0+b3B0aW9ucyk7CisJZWxzZQorCQlwcl9pbmZvKCJFYXJseSBzZXJpYWwgY29uc29sZSBhdCBJL08gcG9ydCAweCVseCAob3B0aW9ucyAnJXMnKVxuIiwKKwkJCXBvcnQtPmlvYmFzZSwKKwkJCWRldmljZS0+b3B0aW9ucyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBzZXR1cF9lYXJseWNvbihjaGFyICpidWYsIGNvbnN0IGNoYXIgKm1hdGNoLAorCQkJICBpbnQgKCpzZXR1cCkoc3RydWN0IGVhcmx5Y29uX2RldmljZSAqLCBjb25zdCBjaGFyICopKQoreworCWludCBlcnI7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmVhcmx5X2NvbnNvbGVfZGV2LnBvcnQ7CisKKwlpZiAoIWJ1ZiB8fCAhbWF0Y2ggfHwgIXNldHVwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN0cmxlbihtYXRjaCk7CisJaWYgKHN0cm5jbXAoYnVmLCBtYXRjaCwgbGVuKSkKKwkJcmV0dXJuIDA7CisJaWYgKGJ1ZltsZW5dICYmIChidWZbbGVuXSAhPSAnLCcpKQorCQlyZXR1cm4gMDsKKworCWJ1ZiArPSBsZW4gKyAxOworCisJZXJyID0gcGFyc2Vfb3B0aW9ucygmZWFybHlfY29uc29sZV9kZXYsIGJ1Zik7CisJLyogT24gcGFyc2luZyBlcnJvciwgcGFzcyB0aGUgb3B0aW9ucyBidWYgdG8gdGhlIHNldHVwIGZ1bmN0aW9uICovCisJaWYgKCFlcnIpCisJCWJ1ZiA9IE5VTEw7CisKKwlpZiAocG9ydC0+bWFwYmFzZSkKKwkJcG9ydC0+bWVtYmFzZSA9IGVhcmx5Y29uX21hcChwb3J0LT5tYXBiYXNlLCA2NCk7CisKKwllYXJseV9jb25zb2xlX2Rldi5jb24tPmRhdGEgPSAmZWFybHlfY29uc29sZV9kZXY7CisJZXJyID0gc2V0dXAoJmVhcmx5X2NvbnNvbGVfZGV2LCBidWYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICghZWFybHlfY29uc29sZV9kZXYuY29uLT53cml0ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGVfZGV2LmNvbik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvZWZtMzItdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2VmbTMyLXVhcnQuYwppbmRleCBjMTY3YTcxLi5iMzczZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvZWZtMzItdWFydC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9lZm0zMi11YXJ0LmMKQEAgLTg0Miw2ICs4NDIsNyBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlZm0zMl91YXJ0X2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmZWZtMzJfdWFydF9yZWcpOwogfQorbW9kdWxlX2V4aXQoZWZtMzJfdWFydF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRUZNMzIgVUFSVC9VU0FSVCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYwppbmRleCAzYjZjMWEyLi5lMmY5Mzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICNkZWZpbmUgVUNSM19EU1IJKDE8PDEwKSAvKiBEYXRhIHNldCByZWFkeSAqLwogI2RlZmluZSBVQ1IzX0RDRAkoMTw8OSkJLyogRGF0YSBjYXJyaWVyIGRldGVjdCAqLwogI2RlZmluZSBVQ1IzX1JJCQkoMTw8OCkJLyogUmluZyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUNSM19USU1FT1VURU4JKDE8PDcpCS8qIFRpbWVvdXQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBVQ1IzX0FETklNUAkoMTw8NykJLyogQXV0b2JhdWQgRGV0ZWN0aW9uIE5vdCBJbXByb3ZlZCAqLwogI2RlZmluZSBVQ1IzX1JYRFNFTgkoMTw8NikJLyogUmVjZWl2ZSBzdGF0dXMgaW50ZXJydXB0IGVuYWJsZSAqLwogI2RlZmluZSBVQ1IzX0FJUklOVEVOCSgxPDw1KQkvKiBBc3luYyBJUiB3YWtlIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgVUNSM19BV0FLRU4JKDE8PDQpCS8qIEFzeW5jIHdha2UgaW50ZXJydXB0IGVuYWJsZSAqLwpAQCAtNDQ0LDYgKzQ0NCwxMCBAQAogCiAJdGVtcCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKTsKIAl3cml0ZWwodGVtcCAmIH5VQ1IyX1JYRU4sIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKTsKKworCS8qIGRpc2FibGUgdGhlIGBSZWNlaXZlciBSZWFkeSBJbnRlcnJydXB0YCAqLworCXRlbXAgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMSk7CisJd3JpdGVsKHRlbXAgJiB+VUNSMV9SUkRZRU4sIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IxKTsKIH0KIAogLyoKQEAgLTEwNzAsNyArMTA3NCw3IEBACiBzdGF0aWMgaW50IGlteF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgaW14X3BvcnQgKilwb3J0OwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCwgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB0ZW1wOwogCiAJcmV0dmFsID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNwb3J0LT5jbGtfcGVyKTsKQEAgLTEwOTgsMTcgKzExMDIsMTUgQEAKIAogCXdyaXRlbCh0ZW1wICYgflVDUjRfRFJFTiwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjQpOwogCi0JaWYgKFVTRV9JUkRBKHNwb3J0KSkgewotCQkvKiByZXNldCBmaWZvJ3MgYW5kIHN0YXRlIG1hY2hpbmVzICovCi0JCWludCBpID0gMTAwOwotCQl0ZW1wID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjIpOwotCQl0ZW1wICY9IH5VQ1IyX1NSU1Q7Ci0JCXdyaXRlbCh0ZW1wLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMik7Ci0JCXdoaWxlICghKHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKSAmIFVDUjJfU1JTVCkgJiYKLQkJICAgICgtLWkgPiAwKSkgewotCQkJdWRlbGF5KDEpOwotCQl9Ci0JfQorCS8qIFJlc2V0IGZpZm8ncyBhbmQgc3RhdGUgbWFjaGluZXMgKi8KKwlpID0gMTAwOworCisJdGVtcCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKTsKKwl0ZW1wICY9IH5VQ1IyX1NSU1Q7CisJd3JpdGVsKHRlbXAsIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKTsKKworCXdoaWxlICghKHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKSAmIFVDUjJfU1JTVCkgJiYgKC0taSA+IDApKQorCQl1ZGVsYXkoMSk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBJUlEocykgaS5NWDEgaGFzIHRocmVlIGludGVycnVwdHMgd2hlcmVhcyBsYXRlcgpAQCAtMTE2MywxOCArMTE2NSw5IEBACiAJCXRlbXAgfD0gVUNSMl9JUlRTOwogCXdyaXRlbCh0ZW1wLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMik7CiAKLQlpZiAoVVNFX0lSREEoc3BvcnQpKSB7Ci0JCS8qIGNsZWFyIFJYLUZJRk8gKi8KLQkJaW50IGkgPSA2NDsKLQkJd2hpbGUgKCgtLWkgPiAwKSAmJgotCQkJKHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVUlhEMCkgJiBVUlhEX0NIQVJSRFkpKSB7Ci0JCQliYXJyaWVyKCk7Ci0JCX0KLQl9Ci0KIAlpZiAoIWlzX2lteDFfdWFydChzcG9ydCkpIHsKIAkJdGVtcCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IzKTsKLQkJdGVtcCB8PSBJTVgyMV9VQ1IzX1JYRE1VWFNFTDsKKwkJdGVtcCB8PSBJTVgyMV9VQ1IzX1JYRE1VWFNFTCB8IFVDUjNfQUROSU1QOwogCQl3cml0ZWwodGVtcCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2tnZGJfbm1pLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwva2dkYl9ubWkuYwppbmRleCA1ZjY3M2I3Li5jZmFkZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwva2dkYl9ubWkuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwva2dkYl9ubWkuYwpAQCAtNDQsMTMgKzQ0LDIyIEBACiAKIHN0YXRpYyBib29sIGtnZGJfbm1pX3R0eV9lbmFibGVkOwogCitzdGF0aWMgaW50IGtnZGJfbm1pX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCS8qIFRoZSBOTUkgY29uc29sZSB1c2VzIHRoZSBkYmdfaW9fb3BzIHRvIGlzc3VlIGNvbnNvbGUgbWVzc2FnZXMuIFRvCisJICogYXZvaWQgZHVwbGljYXRlIG1lc3NhZ2VzIGR1cmluZyBrZGIgc2Vzc2lvbnMgd2UgbXVzdCBpbmZvcm0ga2RiJ3MKKwkgKiBJL08gdXRpbGl0aWVzIHRoYXQgbWVzc2FnZXMgc2VudCB0byB0aGUgY29uc29sZSB3aWxsIGF1dG9tYXRpY2FsbHkKKwkgKiBiZSBkaXNwbGF5ZWQgb24gdGhlIGRiZ19pby4KKwkgKi8KKwlkYmdfaW9fb3BzLT5pc19jb25zb2xlID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBrZ2RiX25taV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdWludCBjKQogewogCWludCBpOwogCi0JaWYgKCFrZ2RiX25taV90dHlfZW5hYmxlZCB8fCBhdG9taWNfcmVhZCgma2dkYl9hY3RpdmUpID49IDApCi0JCXJldHVybjsKLQogCWZvciAoaSA9IDA7IGkgPCBjOyBpKyspCiAJCWRiZ19pb19vcHMtPndyaXRlX2NoYXIoc1tpXSk7CiB9CkBAIC02NSw2ICs3NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY29uc29sZSBrZ2RiX25taV9jb25zb2xlID0gewogCS5uYW1lCT0gInR0eU5NSSIsCisJLnNldHVwICA9IGtnZGJfbm1pX2NvbnNvbGVfc2V0dXAsCiAJLndyaXRlCT0ga2dkYl9ubWlfY29uc29sZV93cml0ZSwKIAkuZGV2aWNlCT0ga2dkYl9ubWlfY29uc29sZV9kZXZpY2UsCiAJLmZsYWdzCT0gQ09OX1BSSU5UQlVGRkVSIHwgQ09OX0FOWVRJTUUgfCBDT05fRU5BQkxFRCwKQEAgLTgwLDI5ICs5MCwxMCBAQAogCiBzdHJ1Y3Qga2dkYl9ubWlfdHR5X3ByaXYgewogCXN0cnVjdCB0dHlfcG9ydCBwb3J0OwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bGV0OworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCVNUUlVDVF9LRklGTyhjaGFyLCBLR0RCX05NSV9GSUZPX1NJWkUpIGZpZm87CiB9OwogCi1zdGF0aWMgc3RydWN0IGtnZGJfbm1pX3R0eV9wcml2ICprZ2RiX25taV9wb3J0X3RvX3ByaXYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQotewotCXJldHVybiBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGtnZGJfbm1pX3R0eV9wcml2LCBwb3J0KTsKLX0KLQotLyoKLSAqIE91ciBkZWJ1Z2dpbmcgY29uc29sZSBpcyBwb2xsZWQgaW4gYSB0YXNrbGV0LCBzbyB3ZSdsbCBjaGVjayBmb3IgaW5wdXQKLSAqIGV2ZXJ5IHRpY2suIEluIEhaLWxlc3MgbW9kZSwgd2Ugc2hvdWxkIHByb2dyYW0gdGhlIG5leHQgdGljay4gIFdlIGhhdmUKLSAqIHRvIHVzZSB0aGUgbG93bGV2ZWwgc3R1ZmYgYXMgbm8gbG9ja3Mgc2hvdWxkIGJlIGdyYWJiZWQuCi0gKi8KLSNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCi1zdGF0aWMgdm9pZCBrZ2RiX3R0eV9wb2tlKHZvaWQpCi17Ci0JdGlja19wcm9ncmFtX2V2ZW50KGt0aW1lX2dldCgpLCAwKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQga2dkYl90dHlfcG9rZSh2b2lkKSB7fQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgdHR5X3BvcnQgKmtnZGJfbm1pX3BvcnQ7CiAKIHN0YXRpYyB2b2lkIGtnZGJfdHR5X3JlY3YoaW50IGNoKQpAQCAtMTEzLDE0ICsxMDQsMTMgQEAKIAlpZiAoIWtnZGJfbm1pX3BvcnQgfHwgY2ggPCAwKQogCQlyZXR1cm47CiAJLyoKLQkgKiBDYW4ndCB1c2UgcG9ydC0+dHR5LT5kcml2ZXJfZGF0YSBhcyB0dHkgbWlnaHQgYmUgbm90IHRoZXJlLiBUYXNrbGV0CisJICogQ2FuJ3QgdXNlIHBvcnQtPnR0eS0+ZHJpdmVyX2RhdGEgYXMgdHR5IG1pZ2h0IGJlIG5vdCB0aGVyZS4gVGltZXIKIAkgKiB3aWxsIGNoZWNrIGZvciB0dHkgYW5kIHdpbGwgZ2V0IHRoZSByZWYsIGJ1dCBoZXJlIHdlIGRvbid0IGhhdmUgdG8KIAkgKiBkbyB0aGF0LCBhbmQgYWN0dWFsbHksIHdlIGNhbid0OiB3ZSdyZSBpbiBOTUkgY29udGV4dCwgbm8gbG9ja3MgYXJlCiAJICogcG9zc2libGUuCiAJICovCi0JcHJpdiA9IGtnZGJfbm1pX3BvcnRfdG9fcHJpdihrZ2RiX25taV9wb3J0KTsKKwlwcml2ID0gY29udGFpbmVyX29mKGtnZGJfbm1pX3BvcnQsIHN0cnVjdCBrZ2RiX25taV90dHlfcHJpdiwgcG9ydCk7CiAJa2ZpZm9faW4oJnByaXYtPmZpZm8sICZjLCAxKTsKLQlrZ2RiX3R0eV9wb2tlKCk7CiB9CiAKIHN0YXRpYyBpbnQga2dkYl9ubWlfcG9sbF9vbmVfa25vY2sodm9pZCkKQEAgLTIwNCw3ICsxOTQsOCBAQAogCXN0cnVjdCBrZ2RiX25taV90dHlfcHJpdiAqcHJpdiA9ICh2b2lkICopZGF0YTsKIAljaGFyIGNoOwogCi0JdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+dGxldCk7CisJcHJpdi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoSFovMTAwKTsKKwlhZGRfdGltZXIoJnByaXYtPnRpbWVyKTsKIAogCWlmIChsaWtlbHkoIWtnZGJfbm1pX3R0eV9lbmFibGVkIHx8ICFrZmlmb19sZW4oJnByaXYtPmZpZm8pKSkKIAkJcmV0dXJuOwpAQCAtMjE2LDE4ICsyMDcsMjIgQEAKIAogc3RhdGljIGludCBrZ2RiX25taV90dHlfYWN0aXZhdGUoc3RydWN0IHR0eV9wb3J0ICpwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBrZ2RiX25taV90dHlfcHJpdiAqcHJpdiA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGtnZGJfbm1pX3R0eV9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBrZ2RiX25taV90dHlfcHJpdiwgcG9ydCk7CiAKIAlrZ2RiX25taV9wb3J0ID0gcG9ydDsKLQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT50bGV0KTsKKwlwcml2LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIChIWi8xMDApOworCWFkZF90aW1lcigmcHJpdi0+dGltZXIpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGtnZGJfbm1pX3R0eV9zaHV0ZG93bihzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGtnZGJfbm1pX3R0eV9wcml2ICpwcml2ID0gcG9ydC0+dHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qga2dkYl9ubWlfdHR5X3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGtnZGJfbm1pX3R0eV9wcml2LCBwb3J0KTsKIAotCXRhc2tsZXRfa2lsbCgmcHJpdi0+dGxldCk7CisJZGVsX3RpbWVyKCZwcml2LT50aW1lcik7CiAJa2dkYl9ubWlfcG9ydCA9IE5VTEw7CiB9CiAKQEAgLTI0Niw3ICsyNDEsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCUlOSVRfS0ZJRk8ocHJpdi0+Zmlmbyk7Ci0JdGFza2xldF9pbml0KCZwcml2LT50bGV0LCBrZ2RiX25taV90dHlfcmVjZWl2ZXIsICh1bnNpZ25lZCBsb25nKXByaXYpOworCXNldHVwX3RpbWVyKCZwcml2LT50aW1lciwga2dkYl9ubWlfdHR5X3JlY2VpdmVyLCAodW5zaWduZWQgbG9uZylwcml2KTsKIAl0dHlfcG9ydF9pbml0KCZwcml2LT5wb3J0KTsKIAlwcml2LT5wb3J0Lm9wcyA9ICZrZ2RiX25taV90dHlfcG9ydF9vcHM7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IHByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWVuX3oxMzVfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQxODU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYwpAQCAtMCwwICsxLDg2NyBAQAorLyoKKyAqIE1FTiAxNnoxMzUgSGlnaCBTcGVlZCBVQVJUCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1FTiBNaWtyb2VsZWt0cm9uaWsgR21iSCAod3d3Lm1lbi5kZSkKKyAqIEF1dGhvcjogSm9oYW5uZXMgVGh1bXNoaXJuIDxqb2hhbm5lcy50aHVtc2hpcm5AbWVuLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6IiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21jYi5oPgorCisjZGVmaW5lIE1FTl9aMTM1X01BWF9QT1JUUwkJMTIKKyNkZWZpbmUgTUVOX1oxMzVfQkFTRUNMSwkJMjk0OTEyMDAKKyNkZWZpbmUgTUVOX1oxMzVfRklGT19TSVpFCQkxMDI0CisjZGVmaW5lIE1FTl9aMTM1X05VTV9NU0lfVkVDVE9SUwkyCisjZGVmaW5lIE1FTl9aMTM1X0ZJRk9fV0FURVJNQVJLCQkxMDIwCisKKyNkZWZpbmUgTUVOX1oxMzVfU1RBVF9SRUcJCTB4MAorI2RlZmluZSBNRU5fWjEzNV9SWF9SQU0JCQkweDQKKyNkZWZpbmUgTUVOX1oxMzVfVFhfUkFNCQkJMHg0MDAKKyNkZWZpbmUgTUVOX1oxMzVfUlhfQ1RSTAkJMHg4MDAKKyNkZWZpbmUgTUVOX1oxMzVfVFhfQ1RSTAkJMHg4MDQKKyNkZWZpbmUgTUVOX1oxMzVfQ09ORl9SRUcJCTB4ODA4CisjZGVmaW5lIE1FTl9aMTM1X1VBUlRfRlJFUQkJMHg4MGMKKyNkZWZpbmUgTUVOX1oxMzVfQkFVRF9SRUcJCTB4ODEwCisjZGVmaW5lIE1FTloxMzVfVElNRU9VVAkJCTB4ODE0CisKKyNkZWZpbmUgTUVOX1oxMzVfTUVNX1NJWkUJCTB4ODE4CisKKyNkZWZpbmUgSVNfSVJRKHgpICgoeCkgJiAxKQorI2RlZmluZSBJUlFfSUQoeCkgKCgoeCkgPj4gMSkgJiA3KQorCisjZGVmaW5lIE1FTl9aMTM1X0lFUl9SWENJRU4gQklUKDApCQkvKiBSWCBTcGFjZSBJUlEgKi8KKyNkZWZpbmUgTUVOX1oxMzVfSUVSX1RYQ0lFTiBCSVQoMSkJCS8qIFRYIFNwYWNlIElSUSAqLworI2RlZmluZSBNRU5fWjEzNV9JRVJfUkxTSUVOIEJJVCgyKQkJLyogUmVjZWl2ZXIgTGluZSBTdGF0dXMgSVJRICovCisjZGVmaW5lIE1FTl9aMTM1X0lFUl9NU0lFTiAgQklUKDMpCQkvKiBNb2RlbSBTdGF0dXMgSVJRICovCisjZGVmaW5lIE1FTl9aMTM1X0FMTF9JUlFTIChNRU5fWjEzNV9JRVJfUlhDSUVOCQlcCisJCQkJfCBNRU5fWjEzNV9JRVJfUkxTSUVOCVwKKwkJCQl8IE1FTl9aMTM1X0lFUl9NU0lFTglcCisJCQkJfCBNRU5fWjEzNV9JRVJfVFhDSUVOKQorCisjZGVmaW5lIE1FTl9aMTM1X01DUl9EVFIJQklUKDI0KQorI2RlZmluZSBNRU5fWjEzNV9NQ1JfUlRTCUJJVCgyNSkKKyNkZWZpbmUgTUVOX1oxMzVfTUNSX09VVDEJQklUKDI2KQorI2RlZmluZSBNRU5fWjEzNV9NQ1JfT1VUMglCSVQoMjcpCisjZGVmaW5lIE1FTl9aMTM1X01DUl9MT09QCUJJVCgyOCkKKyNkZWZpbmUgTUVOX1oxMzVfTUNSX1JDRkMJQklUKDI5KQorCisjZGVmaW5lIE1FTl9aMTM1X01TUl9EQ1RTCUJJVCgwKQorI2RlZmluZSBNRU5fWjEzNV9NU1JfRERTUglCSVQoMSkKKyNkZWZpbmUgTUVOX1oxMzVfTVNSX0RSSQlCSVQoMikKKyNkZWZpbmUgTUVOX1oxMzVfTVNSX0REQ0QJQklUKDMpCisjZGVmaW5lIE1FTl9aMTM1X01TUl9DVFMJQklUKDQpCisjZGVmaW5lIE1FTl9aMTM1X01TUl9EU1IJQklUKDUpCisjZGVmaW5lIE1FTl9aMTM1X01TUl9SSQkJQklUKDYpCisjZGVmaW5lIE1FTl9aMTM1X01TUl9EQ0QJQklUKDcpCisKKyNkZWZpbmUgTUVOX1oxMzVfTENSX1NISUZUIDgJLyogTENSIHNoaWZ0IG1hc2sgKi8KKworI2RlZmluZSBNRU5fWjEzNV9XTDUgMAkJLyogQ1M1ICovCisjZGVmaW5lIE1FTl9aMTM1X1dMNiAxCQkvKiBDUzYgKi8KKyNkZWZpbmUgTUVOX1oxMzVfV0w3IDIJCS8qIENTNyAqLworI2RlZmluZSBNRU5fWjEzNV9XTDggMwkJLyogQ1M4ICovCisKKyNkZWZpbmUgTUVOX1oxMzVfU1RCX1NISUZUIDIJLyogU3RvcGJpdHMgKi8KKyNkZWZpbmUgTUVOX1oxMzVfTlNUQjEgMAorI2RlZmluZSBNRU5fWjEzNV9OU1RCMiAxCisKKyNkZWZpbmUgTUVOX1oxMzVfUEVOX1NISUZUIDMJLyogUGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBNRU5fWjEzNV9QQVJfRElTIDAKKyNkZWZpbmUgTUVOX1oxMzVfUEFSX0VOQSAxCisKKyNkZWZpbmUgTUVOX1oxMzVfUFRZX1NISUZUIDQJLyogUGFyaXR5IHR5cGUgKi8KKyNkZWZpbmUgTUVOX1oxMzVfUFRZX09ERCAwCisjZGVmaW5lIE1FTl9aMTM1X1BUWV9FVk4gMQorCisjZGVmaW5lIE1FTl9aMTM1X0xTUl9EUiBCSVQoMCkKKyNkZWZpbmUgTUVOX1oxMzVfTFNSX09FIEJJVCgxKQorI2RlZmluZSBNRU5fWjEzNV9MU1JfUEUgQklUKDIpCisjZGVmaW5lIE1FTl9aMTM1X0xTUl9GRSBCSVQoMykKKyNkZWZpbmUgTUVOX1oxMzVfTFNSX0JJIEJJVCg0KQorI2RlZmluZSBNRU5fWjEzNV9MU1JfVEhFUCBCSVQoNSkKKyNkZWZpbmUgTUVOX1oxMzVfTFNSX1RFWFAgQklUKDYpCisjZGVmaW5lIE1FTl9aMTM1X0xTUl9SWEZJRk9FUlIgQklUKDcpCisKKyNkZWZpbmUgTUVOX1oxMzVfSVJRX0lEX01TVCAwCisjZGVmaW5lIE1FTl9aMTM1X0lSUV9JRF9UU0EgMQorI2RlZmluZSBNRU5fWjEzNV9JUlFfSURfUkRBIDIKKyNkZWZpbmUgTUVOX1oxMzVfSVJRX0lEX1JMUyAzCisjZGVmaW5lIE1FTl9aMTM1X0lSUV9JRF9DVEkgNgorCisjZGVmaW5lIExDUih4KSAoKCh4KSA+PiBNRU5fWjEzNV9MQ1JfU0hJRlQpICYgMHhmZikKKworI2RlZmluZSBCWVRFU19UT19BTElHTih4KSAoKHgpICYgMHgzKQorCitzdGF0aWMgaW50IGxpbmU7CisKK3N0YXRpYyBpbnQgdHhsdmwgPSA1OworbW9kdWxlX3BhcmFtKHR4bHZsLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh0eGx2bCwgIlRYIElSUSB0cmlnZ2VyIGxldmVsIDAtNywgZGVmYXVsdCA1ICgxMjggYnl0ZSkiKTsKKworc3RhdGljIGludCByeGx2bCA9IDY7Cittb2R1bGVfcGFyYW0ocnhsdmwsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4bHZsLCAiUlggSVJRIHRyaWdnZXIgbGV2ZWwgMC03LCBkZWZhdWx0IDYgKDI1NiBieXRlKSIpOworCitzdGF0aWMgaW50IGFsaWduOworbW9kdWxlX3BhcmFtKGFsaWduLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhhbGlnbiwgIktlZXAgaGFyZHdhcmUgRklGTyB3cml0ZSBwb2ludGVyIGFsaWduZWQsIGRlZmF1bHQgMCIpOworCitzdHJ1Y3QgbWVuX3oxMzVfcG9ydCB7CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OworCXN0cnVjdCBtY2JfZGV2aWNlICptZGV2OworCXVuc2lnbmVkIGNoYXIgKnJ4YnVmOworCXUzMiBzdGF0X3JlZzsKKwlzcGlubG9ja190IGxvY2s7Cit9OworI2RlZmluZSB0b19tZW5fejEzNShwb3J0KSBjb250YWluZXJfb2YoKHBvcnQpLCBzdHJ1Y3QgbWVuX3oxMzVfcG9ydCwgcG9ydCkKKworLyoqCisgKiBtZW5fejEzNV9yZWdfc2V0KCkgLSBTZXQgdmFsdWUgaW4gcmVnaXN0ZXIKKyAqIEB1YXJ0OiBUaGUgVUFSVCBwb3J0CisgKiBAYWRkcjogUmVnaXN0ZXIgYWRkcmVzcworICogQHZhbDogdmFsdWUgdG8gc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW5fejEzNV9yZWdfc2V0KHN0cnVjdCBtZW5fejEzNV9wb3J0ICp1YXJ0LAorCQkJCXUzMiBhZGRyLCB1MzIgdmFsKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmdWFydC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWFydC0+bG9jaywgZmxhZ3MpOworCisJcmVnID0gaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIGFkZHIpOworCXJlZyB8PSB2YWw7CisJaW93cml0ZTMyKHJlZywgcG9ydC0+bWVtYmFzZSArIGFkZHIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWFydC0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIG1lbl96MTM1X3JlZ19jbHIoKSAtIFVuc2V0IHZhbHVlIGluIHJlZ2lzdGVyCisgKiBAdWFydDogVGhlIFVBUlQgcG9ydAorICogQGFkZHI6IFJlZ2lzdGVyIGFkZHJlc3MKKyAqIEB2YWw6IHZhbHVlIHRvIGNsZWFyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW5fejEzNV9yZWdfY2xyKHN0cnVjdCBtZW5fejEzNV9wb3J0ICp1YXJ0LAorCQkJCXUzMiBhZGRyLCB1MzIgdmFsKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmdWFydC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWFydC0+bG9jaywgZmxhZ3MpOworCisJcmVnID0gaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIGFkZHIpOworCXJlZyAmPSB+dmFsOworCWlvd3JpdGUzMihyZWcsIHBvcnQtPm1lbWJhc2UgKyBhZGRyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhcnQtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZW5fejEzNV9oYW5kbGVfbW9kZW1fc3RhdHVzKCkgLSBIYW5kbGUgY2hhbmdlIG9mIG1vZGVtIHN0YXR1cworICogQHBvcnQ6IFRoZSBVQVJUIHBvcnQKKyAqCisgKiBIYW5kbGUgY2hhbmdlIG9mIG1vZGVtIHN0YXR1cyByZWdpc3Rlci4gVGhpcyBpcyBkb25lIGJ5IHJlYWRpbmcgdGhlICJkZWx0YSIKKyAqIHZlcnNpb25zIG9mIERDRCAoRGF0YSBDYXJyaWVyIERldGVjdCkgYW5kIENUUyAoQ2xlYXIgVG8gU2VuZCkuCisgKi8KK3N0YXRpYyB2b2lkIG1lbl96MTM1X2hhbmRsZV9tb2RlbV9zdGF0dXMoc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQpCit7CisJaWYgKHVhcnQtPnN0YXRfcmVnICYgTUVOX1oxMzVfTVNSX0REQ0QpCisJCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UoJnVhcnQtPnBvcnQsCisJCQkJdWFydC0+c3RhdF9yZWcgJiB+TUVOX1oxMzVfTVNSX0RDRCk7CisJaWYgKHVhcnQtPnN0YXRfcmVnICYgTUVOX1oxMzVfTVNSX0RDVFMpCisJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVhcnQtPnBvcnQsCisJCQkJdWFydC0+c3RhdF9yZWcgJiB+TUVOX1oxMzVfTVNSX0NUUyk7Cit9CisKK3N0YXRpYyB2b2lkIG1lbl96MTM1X2hhbmRsZV9sc3Ioc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZ1YXJ0LT5wb3J0OworCXU4IGxzcjsKKworCWxzciA9ICh1YXJ0LT5zdGF0X3JlZyA+PiAxNikgJiAweGZmOworCisJaWYgKGxzciAmIE1FTl9aMTM1X0xTUl9PRSkKKwkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwlpZiAobHNyICYgTUVOX1oxMzVfTFNSX1BFKQorCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJaWYgKGxzciAmIE1FTl9aMTM1X0xTUl9GRSkKKwkJcG9ydC0+aWNvdW50LmZyYW1lKys7CisJaWYgKGxzciAmIE1FTl9aMTM1X0xTUl9CSSkgeworCQlwb3J0LT5pY291bnQuYnJrKys7CisJCXVhcnRfaGFuZGxlX2JyZWFrKHBvcnQpOworCX0KK30KKworLyoqCisgKiBnZXRfcnhfZmlmb19jb250ZW50KCkgLSBHZXQgdGhlIG51bWJlciBvZiBieXRlcyBpbiBSWCBGSUZPCisgKiBAdWFydDogVGhlIFVBUlQgcG9ydAorICoKKyAqIFJlYWQgUlhDIHJlZ2lzdGVyIGZyb20gaGFyZHdhcmUgYW5kIHJldHVybiBjdXJyZW50IEZJRk8gZmlsbCBzaXplLgorICovCitzdGF0aWMgdTE2IGdldF9yeF9maWZvX2NvbnRlbnQoc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZ1YXJ0LT5wb3J0OworCXUzMiBzdGF0X3JlZzsKKwl1MTYgcnhjOworCXU4IHJ4Y19sbzsKKwl1OCByeGNfaGk7CisKKwlzdGF0X3JlZyA9IGlvcmVhZDMyKHBvcnQtPm1lbWJhc2UgKyBNRU5fWjEzNV9TVEFUX1JFRyk7CisJcnhjX2xvID0gc3RhdF9yZWcgPj4gMjQ7CisJcnhjX2hpID0gKHN0YXRfcmVnICYgMHhDMCkgPj4gNjsKKworCXJ4YyA9IHJ4Y19sbyB8IChyeGNfaGkgPDwgOCk7CisKKwlyZXR1cm4gcnhjOworfQorCisvKioKKyAqIG1lbl96MTM1X2hhbmRsZV9yeCgpIC0gUlggdGFza2xldCByb3V0aW5lCisgKiBAYXJnOiBQb2ludGVyIHRvIHN0cnVjdCBtZW5fejEzNV9wb3J0CisgKgorICogQ29weSBmcm9tIFJYIEZJRk8gYW5kIGFja25vd2xlZGdlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KK3N0YXRpYyB2b2lkIG1lbl96MTM1X2hhbmRsZV9yeChzdHJ1Y3QgbWVuX3oxMzVfcG9ydCAqdWFydCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnVhcnQtPnBvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICp0cG9ydCA9ICZwb3J0LT5zdGF0ZS0+cG9ydDsKKwlpbnQgY29waWVkOworCXUxNiBzaXplOworCWludCByb29tOworCisJc2l6ZSA9IGdldF9yeF9maWZvX2NvbnRlbnQodWFydCk7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBBdm9pZCBhY2NpZGVudGx5IGFjY2Vzc2luZyBUWCBGSUZPIGluc3RlYWQgb2YgUlggRklGTy4gTGFzdAorCSAqIGxvbmd3b3JkIGluIFJYIEZJRk8gY2Fubm90IGJlIHJlYWQuKDB4MDA0LTB4M0ZGKQorCSAqLworCWlmIChzaXplID4gTUVOX1oxMzVfRklGT19XQVRFUk1BUkspCisJCXNpemUgPSBNRU5fWjEzNV9GSUZPX1dBVEVSTUFSSzsKKworCXJvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0cG9ydCwgc2l6ZSk7CisJaWYgKHJvb20gIT0gc2l6ZSkKKwkJZGV2X3dhcm4oJnVhcnQtPm1kZXYtPmRldiwKKwkJCSJOb3QgZW5vdWdoIHJvb20gaW4gZmxpcCBidWZmZXIsIHRydW5jYXRpbmcgdG8gJWRcbiIsCisJCQlyb29tKTsKKworCWlmIChyb29tID09IDApCisJCXJldHVybjsKKworCW1lbWNweV9mcm9taW8odWFydC0+cnhidWYsIHBvcnQtPm1lbWJhc2UgKyBNRU5fWjEzNV9SWF9SQU0sIHJvb20pOworCS8qIEJlIHN1cmUgdG8gZmlyc3QgY29weSBhbGwgZGF0YSBhbmQgdGhlbiBhY2tub3dsZWRnZSBpdCAqLworCW1iKCk7CisJaW93cml0ZTMyKHJvb20sIHBvcnQtPm1lbWJhc2UgKyAgTUVOX1oxMzVfUlhfQ1RSTCk7CisKKwljb3BpZWQgPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHRwb3J0LCB1YXJ0LT5yeGJ1Ziwgcm9vbSk7CisJaWYgKGNvcGllZCAhPSByb29tKQorCQlkZXZfd2FybigmdWFydC0+bWRldi0+ZGV2LAorCQkJIk9ubHkgY29waWVkICVkIGluc3RlYWQgb2YgJWQgYnl0ZXNcbiIsCisJCQljb3BpZWQsIHJvb20pOworCisJcG9ydC0+aWNvdW50LnJ4ICs9IGNvcGllZDsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHRwb3J0KTsKKworfQorCisvKioKKyAqIG1lbl96MTM1X2hhbmRsZV90eCgpIC0gVFggdGFza2xldCByb3V0aW5lCisgKiBAYXJnOiBQb2ludGVyIHRvIHN0cnVjdCBtZW5fejEzNV9wb3J0CisgKgorICovCitzdGF0aWMgdm9pZCBtZW5fejEzNV9oYW5kbGVfdHgoc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZ1YXJ0LT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKwl1MzIgdHhjOworCXUzMiB3cHRyOworCWludCBxbGVuOworCWludCBuOworCWludCB0eGZyZWU7CisJaW50IGhlYWQ7CisJaW50IHRhaWw7CisJaW50IHM7CisKKwlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQorCQlnb3RvIG91dDsKKworCWlmICh1YXJ0X3R4X3N0b3BwZWQocG9ydCkpCisJCWdvdG8gb3V0OworCisJaWYgKHBvcnQtPnhfY2hhcikKKwkJZ290byBvdXQ7CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCisJLyogY2FsY3VsYXRlIGJ5dGVzIHRvIGNvcHkgKi8KKwlxbGVuID0gdWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCk7CisJaWYgKHFsZW4gPD0gMCkKKwkJZ290byBvdXQ7CisKKwl3cHRyID0gaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIE1FTl9aMTM1X1RYX0NUUkwpOworCXR4YyA9ICh3cHRyID4+IDE2KSAmIDB4M2ZmOworCXdwdHIgJj0gMHgzZmY7CisKKwlpZiAodHhjID4gTUVOX1oxMzVfRklGT19XQVRFUk1BUkspCisJCXR4YyA9IE1FTl9aMTM1X0ZJRk9fV0FURVJNQVJLOworCisJdHhmcmVlID0gTUVOX1oxMzVfRklGT19XQVRFUk1BUksgLSB0eGM7CisJaWYgKHR4ZnJlZSA8PSAwKSB7CisJCXByX2VycigiTm90IGVub3VnaCByb29tIGluIFRYIEZJRk8gaGF2ZSAlZCwgbmVlZCAlZFxuIiwKKwkJCXR4ZnJlZSwgcWxlbik7CisJCWdvdG8gaXJxX2VuOworCX0KKworCS8qIGlmIHdlJ3JlIG5vdCBhbGlnbmVkLCBpdCdzIGJldHRlciB0byBjb3B5IG9ubHkgMSBvciAyIGJ5dGVzIGFuZAorCSAqIHRoZW4gdGhlIHJlc3QuCisJICovCisJaWYgKGFsaWduICYmIHFsZW4gPj0gMyAmJiBCWVRFU19UT19BTElHTih3cHRyKSkKKwkJbiA9IDQgLSBCWVRFU19UT19BTElHTih3cHRyKTsKKwllbHNlIGlmIChxbGVuID4gdHhmcmVlKQorCQluID0gdHhmcmVlOworCWVsc2UKKwkJbiA9IHFsZW47CisKKwlpZiAobiA8PSAwKQorCQlnb3RvIGlycV9lbjsKKworCWhlYWQgPSB4bWl0LT5oZWFkICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJdGFpbCA9IHhtaXQtPnRhaWwgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKworCXMgPSAoKGhlYWQgPj0gdGFpbCkgPyBoZWFkIDogVUFSVF9YTUlUX1NJWkUpIC0gdGFpbDsKKwluID0gbWluKG4sIHMpOworCisJbWVtY3B5X3RvaW8ocG9ydC0+bWVtYmFzZSArIE1FTl9aMTM1X1RYX1JBTSwgJnhtaXQtPmJ1Zlt4bWl0LT50YWlsXSwgbik7CisJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgbikgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwltbWlvd2IoKTsKKworCWlvd3JpdGUzMihuICYgMHgzZmYsIHBvcnQtPm1lbWJhc2UgKyBNRU5fWjEzNV9UWF9DVFJMKTsKKworCXBvcnQtPmljb3VudC50eCArPSBuOworCitpcnFfZW46CisJaWYgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCW1lbl96MTM1X3JlZ19zZXQodWFydCwgTUVOX1oxMzVfQ09ORl9SRUcsIE1FTl9aMTM1X0lFUl9UWENJRU4pOworCWVsc2UKKwkJbWVuX3oxMzVfcmVnX2Nscih1YXJ0LCBNRU5fWjEzNV9DT05GX1JFRywgTUVOX1oxMzVfSUVSX1RYQ0lFTik7CisKK291dDoKKwlyZXR1cm47CisKK30KKworLyoqCisgKiBtZW5fejEzNV9pbnRyKCkgLSBIYW5kbGUgbGVnYWN5IElSUXMKKyAqIEBpcnE6IFRoZSBJUlEgbnVtYmVyCisgKiBAZGF0YTogUG9pbnRlciB0byBVQVJUIHBvcnQKKyAqCisgKiBDaGVjayBJSVIgcmVnaXN0ZXIgdG8gc2VlIHdoaWNoIHRhc2tsZXQgdG8gc3RhcnQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtZW5fejEzNV9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQgPSAoc3RydWN0IG1lbl96MTM1X3BvcnQgKilkYXRhOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmdWFydC0+cG9ydDsKKwlpbnQgaXJxX2lkOworCisJdWFydC0+c3RhdF9yZWcgPSBpb3JlYWQzMihwb3J0LT5tZW1iYXNlICsgTUVOX1oxMzVfU1RBVF9SRUcpOworCS8qIElSUSBwZW5kaW5nIGlzIGxvdyBhY3RpdmUgKi8KKwlpZiAoSVNfSVJRKHVhcnQtPnN0YXRfcmVnKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaXJxX2lkID0gSVJRX0lEKHVhcnQtPnN0YXRfcmVnKTsKKwlzd2l0Y2ggKGlycV9pZCkgeworCWNhc2UgTUVOX1oxMzVfSVJRX0lEX01TVDoKKwkJbWVuX3oxMzVfaGFuZGxlX21vZGVtX3N0YXR1cyh1YXJ0KTsKKwkJYnJlYWs7CisJY2FzZSBNRU5fWjEzNV9JUlFfSURfVFNBOgorCQltZW5fejEzNV9oYW5kbGVfdHgodWFydCk7CisJCWJyZWFrOworCWNhc2UgTUVOX1oxMzVfSVJRX0lEX0NUSToKKwkJZGV2X2RiZygmdWFydC0+bWRldi0+ZGV2LCAiQ2hhcmFjdGVyIFRpbWVvdXQgSW5kaWNhdGlvblxuIik7CisJCS8qIEZhbGx0aHJvdWdoICovCisJY2FzZSBNRU5fWjEzNV9JUlFfSURfUkRBOgorCQkvKiBSZWFkaW5nIGRhdGEgY2xlYXJzIFJYIElSUSAqLworCQltZW5fejEzNV9oYW5kbGVfcngodWFydCk7CisJCWJyZWFrOworCWNhc2UgTUVOX1oxMzVfSVJRX0lEX1JMUzoKKwkJbWVuX3oxMzVfaGFuZGxlX2xzcih1YXJ0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJnVhcnQtPm1kZXYtPmRldiwgIlVua25vd24gSVJRIGlkICVkXG4iLCBpcnFfaWQpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIG1lbl96MTM1X3JlcXVlc3RfaXJxKCkgLSBSZXF1ZXN0IElSUSBmb3IgMTZ6MTM1IGNvcmUKKyAqIEB1YXJ0OiB6MTM1IHByaXZhdGUgdWFydCBwb3J0IHN0cnVjdHVyZQorICoKKyAqIFJlcXVlc3QgYW4gSVJRIGZvciAxNnoxMzUgdG8gdXNlLiBGaXJzdCB0cnkgdXNpbmcgTVNJLCBpZiBpdCBmYWlscworICogZmFsbCBiYWNrIHRvIHVzaW5nIGxlZ2FjeSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgaW50IG1lbl96MTM1X3JlcXVlc3RfaXJxKHN0cnVjdCBtZW5fejEzNV9wb3J0ICp1YXJ0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1YXJ0LT5tZGV2LT5kZXY7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZ1YXJ0LT5wb3J0OworCWludCBlcnIgPSAwOworCisJZXJyID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBtZW5fejEzNV9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSJtZW5fejEzNV9pbnRyIiwgdWFydCk7CisJaWYgKGVycikKKwkJZGV2X2VycihkZXYsICJFcnJvciAlZCBnZXR0aW5nIGludGVycnVwdFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogbWVuX3oxMzVfdHhfZW1wdHkoKSAtIEhhbmRsZSB0eF9lbXB0eSBjYWxsCisgKiBAcG9ydDogVGhlIFVBUlQgcG9ydAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgVFggRklGTyBhbmQgc2hpZnRlciBmb3IgdGhlIHBvcnQKKyAqIGRlc2NyaWJlZCBieSBAcG9ydCBpcyBlbXB0eS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtZW5fejEzNV90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXUzMiB3cHRyOworCXUxNiB0eGM7CisKKwl3cHRyID0gaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIE1FTl9aMTM1X1RYX0NUUkwpOworCXR4YyA9ICh3cHRyID4+IDE2KSAmIDB4M2ZmOworCisJaWYgKHR4YyA9PSAwKQorCQlyZXR1cm4gVElPQ1NFUl9URU1UOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVuX3oxMzVfc2V0X21jdHJsKCkgLSBTZXQgbW9kZW0gY29udHJvbCBsaW5lcworICogQHBvcnQ6IFRoZSBVQVJUIHBvcnQKKyAqIEBtY3RybDogVGhlIG1vZGVtIGNvbnRyb2wgbGluZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1vZGVtIGNvbnRyb2wgbGluZXMgZm9yIGEgcG9ydCBkZXNjcmliZWQgYnkgQHBvcnQKKyAqIHRvIHRoZSBzdGF0ZSBkZXNjcmliZWQgYnkgQG1jdHJsCisgKi8KK3N0YXRpYyB2b2lkIG1lbl96MTM1X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQgPSB0b19tZW5fejEzNShwb3J0KTsKKwl1MzIgY29uZl9yZWcgPSAwOworCisJaWYgKG1jdHJsICYgVElPQ01fUlRTKQorCQljb25mX3JlZyB8PSBNRU5fWjEzNV9NQ1JfUlRTOworCWlmIChtY3RybCAmIFRJT0NNX0RUUikKKwkJY29uZl9yZWcgfD0gTUVOX1oxMzVfTUNSX0RUUjsKKwlpZiAobWN0cmwgJiBUSU9DTV9PVVQxKQorCQljb25mX3JlZyB8PSBNRU5fWjEzNV9NQ1JfT1VUMTsKKwlpZiAobWN0cmwgJiBUSU9DTV9PVVQyKQorCQljb25mX3JlZyB8PSBNRU5fWjEzNV9NQ1JfT1VUMjsKKwlpZiAobWN0cmwgJiBUSU9DTV9MT09QKQorCQljb25mX3JlZyB8PSBNRU5fWjEzNV9NQ1JfTE9PUDsKKworCW1lbl96MTM1X3JlZ19zZXQodWFydCwgTUVOX1oxMzVfQ09ORl9SRUcsIGNvbmZfcmVnKTsKK30KKworLyoqCisgKiBtZW5fejEzNV9nZXRfbWN0cmwoKSAtIEdldCBtb2RlbSBjb250cm9sIGxpbmVzCisgKiBAcG9ydDogVGhlIFVBUlQgcG9ydAorICoKKyAqIFJldHJ1bnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbW9kZW0gY29udHJvbCBpbnB1dHMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWVuX3oxMzVfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IG1jdHJsID0gMDsKKwl1MzIgc3RhdF9yZWc7CisJdTggbXNyOworCisJc3RhdF9yZWcgPSBpb3JlYWQzMihwb3J0LT5tZW1iYXNlICsgTUVOX1oxMzVfU1RBVF9SRUcpOworCisJbXNyID0gfigoc3RhdF9yZWcgPj4gOCkgJiAweGZmKTsKKworCWlmIChtc3IgJiBNRU5fWjEzNV9NU1JfQ1RTKQorCQltY3RybCB8PSBUSU9DTV9DVFM7CisJaWYgKG1zciAmIE1FTl9aMTM1X01TUl9EU1IpCisJCW1jdHJsIHw9IFRJT0NNX0RTUjsKKwlpZiAobXNyICYgTUVOX1oxMzVfTVNSX1JJKQorCQltY3RybCB8PSBUSU9DTV9SSTsKKwlpZiAobXNyICYgTUVOX1oxMzVfTVNSX0RDRCkKKwkJbWN0cmwgfD0gVElPQ01fQ0FSOworCisJcmV0dXJuIG1jdHJsOworfQorCisvKioKKyAqIG1lbl96MTM1X3N0b3BfdHgoKSAtIFN0b3AgdHJhbnNtaXR0aW5nIGNoYXJhY3RlcnMKKyAqIEBwb3J0OiBUaGUgVUFSVCBwb3J0CisgKgorICogU3RvcCB0cmFuc21pdHRpbmcgY2hhcmFjdGVycy4gVGhpcyBtaWdodCBiZSBkdWUgdG8gQ1RTIGxpbmUgYmVjb21taW5nCisgKiBpbmFjdGl2ZSBvciB0aGUgdHR5IGxheWVyIGluZGljYXRpbmcgd2Ugd2FudCB0byBzdG9wIHRyYW5zbWlzc2lvbiBkdWUgdG8KKyAqIGFuIFhPRkYgY2hhcmFjdGVyLgorICovCitzdGF0aWMgdm9pZCBtZW5fejEzNV9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQgPSB0b19tZW5fejEzNShwb3J0KTsKKworCW1lbl96MTM1X3JlZ19jbHIodWFydCwgTUVOX1oxMzVfQ09ORl9SRUcsIE1FTl9aMTM1X0lFUl9UWENJRU4pOworfQorCisvKioKKyAqIG1lbl96MTM1X3N0YXJ0X3R4KCkgLSBTdGFydCB0cmFuc21pdHRpbmcgY2hhcmFjdGVycworICogQHBvcnQ6IFRoZSBVQVJUIHBvcnQKKyAqCisgKiBTdGFydCB0cmFuc21pdHRpbmcgY2hhcmFjdGVyLiBUaGlzIGFjdHVhbGx5IGRvZXNuJ3QgdHJhbnNtaXQgYW55dGhpbmcsIGJ1dAorICogZmlyZXMgb2ZmIHRoZSBUWCB0YXNrbGV0LgorICovCitzdGF0aWMgdm9pZCBtZW5fejEzNV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBtZW5fejEzNV9wb3J0ICp1YXJ0ID0gdG9fbWVuX3oxMzUocG9ydCk7CisKKwltZW5fejEzNV9oYW5kbGVfdHgodWFydCk7Cit9CisKKy8qKgorICogbWVuX3oxMzVfc3RvcF9yeCgpIC0gU3RvcCByZWNlaXZpbmcgY2hhcmFjdGVycworICogQHBvcnQ6IFRoZSBVQVJUIHBvcnQKKyAqCisgKiBTdG9wIHJlY2VpdmluZyBjaGFyYWN0ZXJzOyB0aGUgcG9ydCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjbG9zZWQuCisgKi8KK3N0YXRpYyB2b2lkIG1lbl96MTM1X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbWVuX3oxMzVfcG9ydCAqdWFydCA9IHRvX21lbl96MTM1KHBvcnQpOworCisJbWVuX3oxMzVfcmVnX2Nscih1YXJ0LCBNRU5fWjEzNV9DT05GX1JFRywgTUVOX1oxMzVfSUVSX1JYQ0lFTik7Cit9CisKKy8qKgorICogbWVuX3oxMzVfZW5hYmxlX21zKCkgLSBFbmFibGUgTW9kZW0gU3RhdHVzCisgKiBwb3J0OgorICoKKyAqIEVuYWJsZSBNb2RlbSBTdGF0dXMgSVJRLgorICovCitzdGF0aWMgdm9pZCBtZW5fejEzNV9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbWVuX3oxMzVfcG9ydCAqdWFydCA9IHRvX21lbl96MTM1KHBvcnQpOworCisJbWVuX3oxMzVfcmVnX3NldCh1YXJ0LCBNRU5fWjEzNV9DT05GX1JFRywgTUVOX1oxMzVfSUVSX01TSUVOKTsKK30KKworc3RhdGljIGludCBtZW5fejEzNV9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG1lbl96MTM1X3BvcnQgKnVhcnQgPSB0b19tZW5fejEzNShwb3J0KTsKKwlpbnQgZXJyOworCXUzMiBjb25mX3JlZyA9IDA7CisKKwllcnIgPSBtZW5fejEzNV9yZXF1ZXN0X2lycSh1YXJ0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNvbmZfcmVnID0gaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIE1FTl9aMTM1X0NPTkZfUkVHKTsKKworCS8qIEFjdGl2YXRlIGFsbCBidXQgVFggc3BhY2UgYXZhaWxhYmxlIElSUSAqLworCWNvbmZfcmVnIHw9IE1FTl9aMTM1X0FMTF9JUlFTICYgfk1FTl9aMTM1X0lFUl9UWENJRU47CisJY29uZl9yZWcgJj0gfigweGZmIDw8IDE2KTsKKwljb25mX3JlZyB8PSAodHhsdmwgPDwgMTYpOworCWNvbmZfcmVnIHw9IChyeGx2bCA8PCAyMCk7CisKKwlpb3dyaXRlMzIoY29uZl9yZWcsIHBvcnQtPm1lbWJhc2UgKyBNRU5fWjEzNV9DT05GX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWVuX3oxMzVfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbWVuX3oxMzVfcG9ydCAqdWFydCA9IHRvX21lbl96MTM1KHBvcnQpOworCXUzMiBjb25mX3JlZyA9IDA7CisKKwljb25mX3JlZyB8PSBNRU5fWjEzNV9BTExfSVJRUzsKKworCW1lbl96MTM1X3JlZ19jbHIodWFydCwgTUVOX1oxMzVfQ09ORl9SRUcsIGNvbmZfcmVnKTsKKworCWZyZWVfaXJxKHVhcnQtPnBvcnQuaXJxLCB1YXJ0KTsKK30KKworc3RhdGljIHZvaWQgbWVuX3oxMzVfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJdW5zaWduZWQgaW50IGJhdWQ7CisJdTMyIGNvbmZfcmVnOworCXUzMiBiZF9yZWc7CisJdTMyIHVhcnRfZnJlcTsKKwl1OCBsY3I7CisKKwljb25mX3JlZyA9IGlvcmVhZDMyKHBvcnQtPm1lbWJhc2UgKyBNRU5fWjEzNV9DT05GX1JFRyk7CisJbGNyID0gTENSKGNvbmZfcmVnKTsKKworCS8qIGJ5dGUgc2l6ZSAqLworCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWxjciB8PSBNRU5fWjEzNV9XTDU7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQlsY3IgfD0gTUVOX1oxMzVfV0w2OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJbGNyIHw9IE1FTl9aMTM1X1dMNzsKKwkJYnJlYWs7CisJY2FzZSBDUzg6CisJCWxjciB8PSBNRU5fWjEzNV9XTDg7CisJCWJyZWFrOworCX0KKworCS8qIHN0b3AgYml0cyAqLworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKQorCQlsY3IgfD0gTUVOX1oxMzVfTlNUQjIgPDwgTUVOX1oxMzVfU1RCX1NISUZUOworCisJLyogcGFyaXR5ICovCisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpIHsKKwkJbGNyIHw9IE1FTl9aMTM1X1BBUl9FTkEgPDwgTUVOX1oxMzVfUEVOX1NISUZUOworCisJCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKQorCQkJbGNyIHw9IE1FTl9aMTM1X1BUWV9PREQgPDwgTUVOX1oxMzVfUFRZX1NISUZUOworCQllbHNlCisJCQlsY3IgfD0gTUVOX1oxMzVfUFRZX0VWTiA8PCBNRU5fWjEzNV9QVFlfU0hJRlQ7CisJfSBlbHNlCisJCWxjciB8PSBNRU5fWjEzNV9QQVJfRElTIDw8IE1FTl9aMTM1X1BFTl9TSElGVDsKKworCXRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsgLyogTWFyay9TcGFjZSBwYXJpdHkgaXMgbm90IHN1cHBvcnRlZCAqLworCisJY29uZl9yZWcgfD0gbGNyIDw8IE1FTl9aMTM1X0xDUl9TSElGVDsKKwlpb3dyaXRlMzIoY29uZl9yZWcsIHBvcnQtPm1lbWJhc2UgKyBNRU5fWjEzNV9DT05GX1JFRyk7CisKKwl1YXJ0X2ZyZXEgPSBpb3JlYWQzMihwb3J0LT5tZW1iYXNlICsgTUVOX1oxMzVfVUFSVF9GUkVRKTsKKwlpZiAodWFydF9mcmVxID09IDApCisJCXVhcnRfZnJlcSA9IE1FTl9aMTM1X0JBU0VDTEs7CisKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgdWFydF9mcmVxIC8gMTYpOworCisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKwlpZiAodHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHRlcm1pb3MpKQorCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOworCisJYmRfcmVnID0gdWFydF9mcmVxIC8gKDQgKiBiYXVkKTsKKwlpb3dyaXRlMzIoYmRfcmVnLCBwb3J0LT5tZW1iYXNlICsgTUVOX1oxMzVfQkFVRF9SRUcpOworCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKKwlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptZW5fejEzNV90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIEtCVUlMRF9NT0ROQU1FOworfQorCitzdGF0aWMgdm9pZCBtZW5fejEzNV9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpb3VubWFwKHBvcnQtPm1lbWJhc2UpOworCXBvcnQtPm1lbWJhc2UgPSBOVUxMOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIE1FTl9aMTM1X01FTV9TSVpFKTsKK30KKworc3RhdGljIGludCBtZW5fejEzNV9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc2l6ZSA9IE1FTl9aMTM1X01FTV9TSVpFOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgc2l6ZSwgIm1lbl96MTM1X3BvcnQiKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKHBvcnQtPm1hcGJhc2UsIE1FTl9aMTM1X01FTV9TSVpFKTsKKwlpZiAocG9ydC0+bWVtYmFzZSA9PSBOVUxMKSB7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBNRU5fWjEzNV9NRU1fU0laRSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtZW5fejEzNV9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgdHlwZSkKK3sKKwlwb3J0LT50eXBlID0gUE9SVF9NRU5fWjEzNTsKKwltZW5fejEzNV9yZXF1ZXN0X3BvcnQocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgbWVuX3oxMzVfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyaW5mbykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBtZW5fejEzNV9vcHMgPSB7CisJLnR4X2VtcHR5ID0gbWVuX3oxMzVfdHhfZW1wdHksCisJLnNldF9tY3RybCA9IG1lbl96MTM1X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsID0gbWVuX3oxMzVfZ2V0X21jdHJsLAorCS5zdG9wX3R4ID0gbWVuX3oxMzVfc3RvcF90eCwKKwkuc3RhcnRfdHggPSBtZW5fejEzNV9zdGFydF90eCwKKwkuc3RvcF9yeCA9IG1lbl96MTM1X3N0b3BfcngsCisJLmVuYWJsZV9tcyA9IG1lbl96MTM1X2VuYWJsZV9tcywKKwkuc3RhcnR1cCA9IG1lbl96MTM1X3N0YXJ0dXAsCisJLnNodXRkb3duID0gbWVuX3oxMzVfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zID0gbWVuX3oxMzVfc2V0X3Rlcm1pb3MsCisJLnR5cGUgPSBtZW5fejEzNV90eXBlLAorCS5yZWxlYXNlX3BvcnQgPSBtZW5fejEzNV9yZWxlYXNlX3BvcnQsCisJLnJlcXVlc3RfcG9ydCA9IG1lbl96MTM1X3JlcXVlc3RfcG9ydCwKKwkuY29uZmlnX3BvcnQgPSBtZW5fejEzNV9jb25maWdfcG9ydCwKKwkudmVyaWZ5X3BvcnQgPSBtZW5fejEzNV92ZXJpZnlfcG9ydCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbWVuX3oxMzVfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCS5kZXZfbmFtZSA9ICJ0dHlIU1UiLAorCS5tYWpvciA9IDAsCisJLm1pbm9yID0gMCwKKwkubnIgPSBNRU5fWjEzNV9NQVhfUE9SVFMsCit9OworCisvKioKKyAqIG1lbl96MTM1X3Byb2JlKCkgLSBQcm9iZSBhIHoxMzUgaW5zdGFuY2UKKyAqIEBtZGV2OiBUaGUgTUNCIGRldmljZQorICogQGlkOiBUaGUgTUNCIGRldmljZSBJRAorICoKKyAqIG1lbl96MTM1X3Byb2JlIGRvZXMgdGhlIGJhc2ljIHNldHVwIG9mIGhhcmR3YXJlIHJlc291cmNlcyBhbmQgcmVnaXN0ZXJzIHRoZQorICogbmV3IHVhcnQgcG9ydCB0byB0aGUgdHR5IGxheWVyLgorICovCitzdGF0aWMgaW50IG1lbl96MTM1X3Byb2JlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2LAorCQkJY29uc3Qgc3RydWN0IG1jYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBtZW5fejEzNV9wb3J0ICp1YXJ0OworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgZXJyOworCisJZGV2ID0gJm1kZXYtPmRldjsKKworCXVhcnQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG1lbl96MTM1X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVhcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJdWFydC0+cnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXVhcnQtPnJ4YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9ICZtZGV2LT5tZW07CisKKwltY2Jfc2V0X2RydmRhdGEobWRldiwgdWFydCk7CisKKwl1YXJ0LT5wb3J0LnVhcnRjbGsgPSBNRU5fWjEzNV9CQVNFQ0xLICogMTY7CisJdWFydC0+cG9ydC5maWZvc2l6ZSA9IE1FTl9aMTM1X0ZJRk9fU0laRTsKKwl1YXJ0LT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOworCXVhcnQtPnBvcnQub3BzID0gJm1lbl96MTM1X29wczsKKwl1YXJ0LT5wb3J0LmlycSA9IG1jYl9nZXRfaXJxKG1kZXYpOworCXVhcnQtPnBvcnQuaW90eXBlID0gVVBJT19NRU07CisJdWFydC0+cG9ydC5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0lPUkVNQVA7CisJdWFydC0+cG9ydC5saW5lID0gbGluZSsrOworCXVhcnQtPnBvcnQuZGV2ID0gZGV2OworCXVhcnQtPnBvcnQudHlwZSA9IFBPUlRfTUVOX1oxMzU7CisJdWFydC0+cG9ydC5tYXBiYXNlID0gbWVtLT5zdGFydDsKKwl1YXJ0LT5wb3J0Lm1lbWJhc2UgPSBOVUxMOworCXVhcnQtPm1kZXYgPSBtZGV2OworCisJc3Bpbl9sb2NrX2luaXQoJnVhcnQtPnBvcnQubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnVhcnQtPmxvY2spOworCisJZXJyID0gdWFydF9hZGRfb25lX3BvcnQoJm1lbl96MTM1X2RyaXZlciwgJnVhcnQtPnBvcnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtPnJ4YnVmKTsKKwlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgVUFSVDogJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIG1lbl96MTM1X3JlbW92ZSgpIC0gUmVtb3ZlIGEgejEzNSBpbnN0YW5jZSBmcm9tIHRoZSBzeXN0ZW0KKyAqCisgKiBAbWRldjogVGhlIE1DQiBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgbWVuX3oxMzVfcmVtb3ZlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2KQoreworCXN0cnVjdCBtZW5fejEzNV9wb3J0ICp1YXJ0ID0gbWNiX2dldF9kcnZkYXRhKG1kZXYpOworCisJbGluZS0tOworCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZtZW5fejEzNV9kcml2ZXIsICZ1YXJ0LT5wb3J0KTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtPnJ4YnVmKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtY2JfZGV2aWNlX2lkIG1lbl96MTM1X2lkc1tdID0geworCXsgLmRldmljZSA9IDB4ODcgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG1jYiwgbWVuX3oxMzVfaWRzKTsKKworc3RhdGljIHN0cnVjdCBtY2JfZHJpdmVyIG1jYl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiejEzNS11YXJ0IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBtZW5fejEzNV9wcm9iZSwKKwkucmVtb3ZlID0gbWVuX3oxMzVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG1lbl96MTM1X2lkcywKK307CisKKy8qKgorICogbWVuX3oxMzVfaW5pdCgpIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCisgKgorICogbWVuX3oxMzVfaW5pdCBpcyB0aGUgZmlyc3Qgcm91dGluZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gQWxsIGl0CisgKiBkb2VzIGlzIHJlZ2lzdGVyIHdpdGggdGhlIGxlZ2FjeSBNRU4gQ2hhbWVsZW9uIHN1YnN5c3RlbS4KKyAqLworc3RhdGljIGludCBfX2luaXQgbWVuX3oxMzVfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmbWVuX3oxMzVfZHJpdmVyKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFVBUlQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IG1jYl9yZWdpc3Rlcl9kcml2ZXIoJm1jYl9kcml2ZXIpOworCWlmICAoZXJyKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIE1DQiBkcml2ZXI6ICVkXG4iLCBlcnIpOworCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtZW5fejEzNV9kcml2ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQobWVuX3oxMzVfaW5pdCk7CisKKy8qKgorICogbWVuX3oxMzVfZXhpdCgpIC0gRHJpdmVyIEV4aXQgUm91dGluZQorICoKKyAqIG1lbl96MTM1X2V4aXQgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBkcml2ZXIgaXMgcmVtb3ZlZCBmcm9tIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IG1lbl96MTM1X2V4aXQodm9pZCkKK3sKKwltY2JfdW5yZWdpc3Rlcl9kcml2ZXIoJm1jYl9kcml2ZXIpOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lbl96MTM1X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtZW5fejEzNV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSm9oYW5uZXMgVGh1bXNoaXJuIDxqb2hhbm5lcy50aHVtc2hpcm5AbWVuLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNRU4gMTZ6MTM1IEhpZ2ggU3BlZWQgVUFSVCIpOworTU9EVUxFX0FMSUFTKCJtY2I6MTZ6MTM1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuYwppbmRleCAwNTNiOThlLi43NzhlMzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmMKQEAgLTUyLDcgKzUyLDYgQEAKIAlzdHJ1Y3QgY2xrCQkqY2xrOwogCXN0cnVjdCBjbGsJCSpwY2xrOwogCXVuc2lnbmVkIGludAkJaW1yOwotCXZvaWQgX19pb21lbQkJKmdzYmlfYmFzZTsKIAlpbnQJCQlpc191YXJ0ZG07CiAJdW5zaWduZWQgaW50CQlvbGRfc25hcF9zdGF0ZTsKIH07CkBAIC01OTksOSArNTk4LDcgQEAKIHN0YXRpYyB2b2lkIG1zbV9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHBvcnQtPmRldik7Ci0Jc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwogCXN0cnVjdCByZXNvdXJjZSAqdWFydF9yZXNvdXJjZTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmdzYmlfcmVzb3VyY2U7CiAJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKIAl1YXJ0X3Jlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTYxMiwyOCArNjA5LDEyIEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIHNpemUpOwogCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7CiAJcG9ydC0+bWVtYmFzZSA9IE5VTEw7Ci0KLQlpZiAobXNtX3BvcnQtPmdzYmlfYmFzZSkgewotCQl3cml0ZWxfcmVsYXhlZChHU0JJX1BST1RPQ09MX0lETEUsCi0JCQkJbXNtX3BvcnQtPmdzYmlfYmFzZSArIEdTQklfQ09OVFJPTCk7Ci0KLQkJZ3NiaV9yZXNvdXJjZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JCWlmICh1bmxpa2VseSghZ3NiaV9yZXNvdXJjZSkpCi0JCQlyZXR1cm47Ci0KLQkJc2l6ZSA9IHJlc291cmNlX3NpemUoZ3NiaV9yZXNvdXJjZSk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihnc2JpX3Jlc291cmNlLT5zdGFydCwgc2l6ZSk7Ci0JCWlvdW5tYXAobXNtX3BvcnQtPmdzYmlfYmFzZSk7Ci0JCW1zbV9wb3J0LT5nc2JpX2Jhc2UgPSBOVUxMOwotCX0KIH0KIAogc3RhdGljIGludCBtc21fcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UocG9ydC0+ZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnVhcnRfcmVzb3VyY2U7Ci0Jc3RydWN0IHJlc291cmNlICpnc2JpX3Jlc291cmNlOwogCXJlc291cmNlX3NpemVfdCBzaXplOwogCWludCByZXQ7CiAKQEAgLTY1MiwzMCArNjMzLDggQEAKIAkJZ290byBmYWlsX3JlbGVhc2VfcG9ydDsKIAl9CiAKLQlnc2JpX3Jlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKLQkvKiBJcyB0aGlzIGEgR1NCSS1iYXNlZCBwb3J0PyAqLwotCWlmIChnc2JpX3Jlc291cmNlKSB7Ci0JCXNpemUgPSByZXNvdXJjZV9zaXplKGdzYmlfcmVzb3VyY2UpOwotCi0JCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGdzYmlfcmVzb3VyY2UtPnN0YXJ0LCBzaXplLAotCQkJCQkJICJtc21fc2VyaWFsIikpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gZmFpbF9yZWxlYXNlX3BvcnRfbWVtYmFzZTsKLQkJfQotCi0JCW1zbV9wb3J0LT5nc2JpX2Jhc2UgPSBpb3JlbWFwKGdzYmlfcmVzb3VyY2UtPnN0YXJ0LCBzaXplKTsKLQkJaWYgKCFtc21fcG9ydC0+Z3NiaV9iYXNlKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIGZhaWxfcmVsZWFzZV9nc2JpOwotCQl9Ci0JfQotCiAJcmV0dXJuIDA7CiAKLWZhaWxfcmVsZWFzZV9nc2JpOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihnc2JpX3Jlc291cmNlLT5zdGFydCwgc2l6ZSk7Ci1mYWlsX3JlbGVhc2VfcG9ydF9tZW1iYXNlOgotCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7CiBmYWlsX3JlbGVhc2VfcG9ydDoKIAlyZWxlYXNlX21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgc2l6ZSk7CiAJcmV0dXJuIHJldDsKQEAgLTY4Myw3ICs2NDIsNiBAQAogCiBzdGF0aWMgdm9pZCBtc21fY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQogewotCXN0cnVjdCBtc21fcG9ydCAqbXNtX3BvcnQgPSBVQVJUX1RPX01TTShwb3J0KTsKIAlpbnQgcmV0OwogCWlmIChmbGFncyAmIFVBUlRfQ09ORklHX1RZUEUpIHsKIAkJcG9ydC0+dHlwZSA9IFBPUlRfTVNNOwpAQCAtNjkxLDkgKzY0OSw2IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm47CiAJfQotCWlmIChtc21fcG9ydC0+Z3NiaV9iYXNlKQotCQl3cml0ZWxfcmVsYXhlZChHU0JJX1BST1RPQ09MX1VBUlQsCi0JCQkJbXNtX3BvcnQtPmdzYmlfYmFzZSArIEdTQklfQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyBpbnQgbXNtX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCkBAIC0xMTEwLDYgKzEwNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtc21fcGxhdGZvcm1fZHJpdmVyID0gewogCS5yZW1vdmUgPSBtc21fc2VyaWFsX3JlbW92ZSwKKwkucHJvYmUgPSBtc21fc2VyaWFsX3Byb2JlLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIm1zbV9zZXJpYWwiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTExMjUsNyArMTA4MSw3IEBACiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1zbV9wbGF0Zm9ybV9kcml2ZXIsIG1zbV9zZXJpYWxfcHJvYmUpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1zbV91YXJ0X2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5oCmluZGV4IDFlOWI2OGIuLmQ5OGQ0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuaApAQCAtMTA5LDExICsxMDksNiBAQAogI2RlZmluZSBVQVJUX0lTUgkJMHgwMDE0CiAjZGVmaW5lIFVBUlRfSVNSX1RYX1JFQURZCSgxIDw8IDcpCiAKLSNkZWZpbmUgR1NCSV9DT05UUk9MCQkweDAKLSNkZWZpbmUgR1NCSV9QUk9UT0NPTF9DT0RFCTB4MzAKLSNkZWZpbmUgR1NCSV9QUk9UT0NPTF9VQVJUCTB4NDAKLSNkZWZpbmUgR1NCSV9QUk9UT0NPTF9JRExFCTB4MAotCiAjZGVmaW5lIFVBUlRETV9SWEZTCQkweDUwCiAjZGVmaW5lIFVBUlRETV9SWEZTX0JVRl9TSElGVAkweDcKICNkZWZpbmUgVUFSVERNX1JYRlNfQlVGX01BU0sJMHg3CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXV4LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXV4LmMKaW5kZXggN2ZkNmFhYS4uYmUxMjdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL211eC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tdXguYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vcGFyaXNjLWRldmljZS5oPgogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VWF9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2RlZmluZSBTVVBQT1JUX1NZU1JRCiAjZW5kaWYKQEAgLTYxMyw3ICs2MTMsNyBAQAogewogCS8qIERlbGV0ZSB0aGUgTXV4IHRpbWVyLiAqLwogCWlmKHBvcnRfY250ID4gMCkgewotCQlkZWxfdGltZXIoJm11eF90aW1lcik7CisJCWRlbF90aW1lcl9zeW5jKCZtdXhfdGltZXIpOwogI2lmZGVmIENPTkZJR19TRVJJQUxfTVVYX0NPTlNPTEUKIAkJdW5yZWdpc3Rlcl9jb25zb2xlKCZtdXhfY29uc29sZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9teHMtYXVhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9teHMtYXVhcnQuYwppbmRleCBhYTk3ZmQ4Li40YjViM2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXhzLWF1YXJ0LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL214cy1hdWFydC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAogCS8qIGNsZWFyIHRoZSBiaXQgdXNlZCB0byBzZXJpYWxpemUgdGhlIERNQSB0eC4gKi8KIAljbGVhcl9iaXQoTVhTX0FVQVJUX0RNQV9UWF9TWU5DLCAmcy0+ZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCS8qIHdha2UgdXAgdGhlIHBvc3NpYmxlIHByb2Nlc3Nlcy4gKi8KIAlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCkBAIC0yNzUsNyArMjc1LDcgQEAKIAkJCW14c19hdWFydF9kbWFfdHgocywgaSk7CiAJCX0gZWxzZSB7CiAJCQljbGVhcl9iaXQoTVhTX0FVQVJUX0RNQV9UWF9TWU5DLCAmcy0+ZmxhZ3MpOwotCQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCX0KIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYwppbmRleCA5OTI0NjYwLi42OGQ0NDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvb2Zfc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCkBAIC0xNzMsNiArMTczLDcgQEAKIAl7CiAJCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCBwb3J0ODI1MDsKIAkJbWVtc2V0KCZwb3J0ODI1MCwgMCwgc2l6ZW9mKHBvcnQ4MjUwKSk7CisJCXBvcnQudHlwZSA9IHBvcnRfdHlwZTsKIAkJcG9ydDgyNTAucG9ydCA9IHBvcnQ7CiAKIAkJaWYgKHBvcnQuZmlmb3NpemUpCkBAIC0xODIsNiArMTgzLDEwIEBACiAJCQkJCSAgImF1dG8tZmxvdy1jb250cm9sIikpCiAJCQlwb3J0ODI1MC5jYXBhYmlsaXRpZXMgfD0gVUFSVF9DQVBfQUZFOwogCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2ZkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICJoYXMtaHctZmxvdy1jb250cm9sIikpCisJCQlwb3J0ODI1MC5wb3J0LmZsYWdzIHw9IFVQRl9IQVJEX0ZMT1c7CisKIAkJcmV0ID0gc2VyaWFsODI1MF9yZWdpc3Rlcl84MjUwX3BvcnQoJnBvcnQ4MjUwKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYwppbmRleCAwOGI2Yjk0Li5kMDE3Y2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYwpAQCAtMTYzLDEwICsxNjMsNiBAQAogCXU4CQkJd2FrZXVwc19lbmFibGVkOwogCXUzMgkJCWZlYXR1cmVzOwogCi0JaW50CQkJRFRSX2dwaW87Ci0JaW50CQkJRFRSX2ludmVydGVkOwotCWludAkJCURUUl9hY3RpdmU7Ci0KIAlzdHJ1Y3Qgc2VyaWFsX3JzNDg1CXJzNDg1OwogCWludAkJCXJ0c19ncGlvOwogCkBAIC0xODQsOCArMTgwLDYgQEAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBzZXJpYWxfb21hcF9tZHIxX2VycmF0YXNldChzdHJ1Y3QgdWFydF9vbWFwX3BvcnQgKnVwLCB1OCBtZHIxKTsKIAotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzZXJpYWxfb21hcF91YXJ0X3dxOwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZXJpYWxfaW4oc3RydWN0IHVhcnRfb21hcF9wb3J0ICp1cCwgaW50IG9mZnNldCkKIHsKIAlvZmZzZXQgPDw9IHVwLT5wb3J0LnJlZ3NoaWZ0OwpAQCAtMzk4LDExICszOTIsOCBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAoLS1jb3VudCA+IDApOwogCi0JaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKSB7Ci0JCXNwaW5fdW5sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCiAJCXVhcnRfd3JpdGVfd2FrZXVwKCZ1cC0+cG9ydCk7Ci0JCXNwaW5fbG9jaygmdXAtPnBvcnQubG9jayk7Ci0JfQogCiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKIAkJc2VyaWFsX29tYXBfc3RvcF90eCgmdXAtPnBvcnQpOwpAQCAtNjk3LDE2ICs2ODgsNiBAQAogCXNlcmlhbF9vdXQodXAsIFVBUlRfTUNSLCB1cC0+bWNyKTsKIAlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHVwLT5kZXYpOwogCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHVwLT5kZXYpOwotCi0JaWYgKGdwaW9faXNfdmFsaWQodXAtPkRUUl9ncGlvKSAmJgotCSAgICAhIShtY3RybCAmIFRJT0NNX0RUUikgIT0gdXAtPkRUUl9hY3RpdmUpIHsKLQkJdXAtPkRUUl9hY3RpdmUgPSAhdXAtPkRUUl9hY3RpdmU7Ci0JCWlmIChncGlvX2NhbnNsZWVwKHVwLT5EVFJfZ3BpbykpCi0JCQlzY2hlZHVsZV93b3JrKCZ1cC0+cW9zX3dvcmspOwotCQllbHNlCi0JCQlncGlvX3NldF92YWx1ZSh1cC0+RFRSX2dwaW8sCi0JCQkJICAgICAgIHVwLT5EVFJfYWN0aXZlICE9IHVwLT5EVFJfaW52ZXJ0ZWQpOwotCX0KIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX29tYXBfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKQEAgLTg1MCw5ICs4MzEsNiBAQAogCQkJCQkJcW9zX3dvcmspOwogCiAJcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KCZ1cC0+cG1fcW9zX3JlcXVlc3QsIHVwLT5sYXRlbmN5KTsKLQlpZiAoZ3Bpb19pc192YWxpZCh1cC0+RFRSX2dwaW8pKQotCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh1cC0+RFRSX2dwaW8sCi0JCQkJCXVwLT5EVFJfYWN0aXZlICE9IHVwLT5EVFJfaW52ZXJ0ZWQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQyMCw3ICsxMzk4LDcgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUSU9DU1JTNDg1OgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnJzNDg1Y29uZiwgKHN0cnVjdCBzZXJpYWxfcnM0ODUgKikgYXJnLAorCQlpZiAoY29weV9mcm9tX3VzZXIoJnJzNDg1Y29uZiwgKHZvaWQgX191c2VyICopIGFyZywKIAkJCQkJc2l6ZW9mKHJzNDg1Y29uZikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTE0MjgsNyArMTQwNiw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBUSU9DR1JTNDg1OgotCQlpZiAoY29weV90b191c2VyKChzdHJ1Y3Qgc2VyaWFsX3JzNDg1ICopIGFyZywKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLAogCQkJCQkmKHRvX3VhcnRfb21hcF9wb3J0KHBvcnQpLT5yczQ4NSksCiAJCQkJCXNpemVvZihyczQ4NWNvbmYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTYxNCw3ICsxNTkyLDcgQEAKIAkvKiBjaGVjayBmb3IgdHggZW5hYmxlIGdwaW8gKi8KIAl1cC0+cnRzX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3Bpb19mbGFncyhucCwgInJ0cy1ncGlvIiwgMCwgJmZsYWdzKTsKIAlpZiAoZ3Bpb19pc192YWxpZCh1cC0+cnRzX2dwaW8pKSB7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdCh1cC0+cnRzX2dwaW8sICJvbWFwLXNlcmlhbCIpOworCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdCh1cC0+ZGV2LCB1cC0+cnRzX2dwaW8sICJvbWFwLXNlcmlhbCIpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1cC0+cnRzX2dwaW8sCkBAIC0xNjQ0LDEwICsxNjIyLDEzIEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsX29tYXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgdWFydF9vbWFwX3BvcnQJKnVwOwotCXN0cnVjdCByZXNvdXJjZQkJKm1lbSwgKmlycTsKIAlzdHJ1Y3Qgb21hcF91YXJ0X3BvcnRfaW5mbyAqb21hcF91cF9pbmZvID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKLQlpbnQgcmV0LCB1YXJ0aXJxID0gMCwgd2FrZWlycSA9IDA7CisJc3RydWN0IHVhcnRfb21hcF9wb3J0ICp1cDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHVhcnRpcnEgPSAwOworCWludCB3YWtlaXJxID0gMDsKKwlpbnQgcmV0OwogCiAJLyogVGhlIG9wdGlvbmFsIHdha2VpcnEgbWF5IGJlIHNwZWNpZmllZCBpbiB0aGUgYm9hcmQgZHRzIGZpbGUgKi8KIAlpZiAocGRldi0+ZGV2Lm9mX25vZGUpIHsKQEAgLTE2NTgsNDggKzE2MzksMTkgQEAKIAkJb21hcF91cF9pbmZvID0gb2ZfZ2V0X3VhcnRfcG9ydF9pbmZvKCZwZGV2LT5kZXYpOwogCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IG9tYXBfdXBfaW5mbzsKIAl9IGVsc2UgewotCQlpcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwotCQlpZiAoIWlycSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlP1xuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQl1YXJ0aXJxID0gaXJxLT5zdGFydDsKLQl9Ci0KLQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghbWVtKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbSByZXNvdXJjZT9cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwKLQkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtZW1vcnkgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQob21hcF91cF9pbmZvLT5EVFJfZ3BpbykgJiYKLQkgICAgb21hcF91cF9pbmZvLT5EVFJfcHJlc2VudCkgewotCQlyZXQgPSBncGlvX3JlcXVlc3Qob21hcF91cF9pbmZvLT5EVFJfZ3BpbywgIm9tYXAtc2VyaWFsIik7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG9tYXBfdXBfaW5mby0+RFRSX2dwaW8sCi0JCQkJCSAgICBvbWFwX3VwX2luZm8tPkRUUl9pbnZlcnRlZCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJdWFydGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJCWlmICh1YXJ0aXJxIDwgMCkKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOwogCX0KIAogCXVwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChncGlvX2lzX3ZhbGlkKG9tYXBfdXBfaW5mby0+RFRSX2dwaW8pICYmCi0JICAgIG9tYXBfdXBfaW5mby0+RFRSX3ByZXNlbnQpIHsKLQkJdXAtPkRUUl9ncGlvID0gb21hcF91cF9pbmZvLT5EVFJfZ3BpbzsKLQkJdXAtPkRUUl9pbnZlcnRlZCA9IG9tYXBfdXBfaW5mby0+RFRSX2ludmVydGVkOwotCX0gZWxzZQotCQl1cC0+RFRSX2dwaW8gPSAtRUlOVkFMOwotCXVwLT5EVFJfYWN0aXZlID0gMDsKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKIAogCXVwLT5kZXYgPSAmcGRldi0+ZGV2OwogCXVwLT5wb3J0LmRldiA9ICZwZGV2LT5kZXY7CkBAIC0xNzMzLDE0ICsxNjg1LDcgQEAKIAogCXNwcmludGYodXAtPm5hbWUsICJPTUFQIFVBUlQlZCIsIHVwLT5wb3J0LmxpbmUpOwogCXVwLT5wb3J0Lm1hcGJhc2UgPSBtZW0tPnN0YXJ0OwotCXVwLT5wb3J0Lm1lbWJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgbWVtLT5zdGFydCwKLQkJCQkJCXJlc291cmNlX3NpemUobWVtKSk7Ci0JaWYgKCF1cC0+cG9ydC5tZW1iYXNlKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgVUFSVFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2lvcmVtYXA7Ci0JfQotCisJdXAtPnBvcnQubWVtYmFzZSA9IGJhc2U7CiAJdXAtPnBvcnQuZmxhZ3MgPSBvbWFwX3VwX2luZm8tPmZsYWdzOwogCXVwLT5wb3J0LnVhcnRjbGsgPSBvbWFwX3VwX2luZm8tPnVhcnRjbGs7CiAJaWYgKCF1cC0+cG9ydC51YXJ0Y2xrKSB7CkBAIC0xNzU0LDEyICsxNjk5LDEyIEBACiAJdXAtPmNhbGNfbGF0ZW5jeSA9IFBNX1FPU19DUFVfRE1BX0xBVF9ERUZBVUxUX1ZBTFVFOwogCXBtX3Fvc19hZGRfcmVxdWVzdCgmdXAtPnBtX3Fvc19yZXF1ZXN0LAogCQlQTV9RT1NfQ1BVX0RNQV9MQVRFTkNZLCB1cC0+bGF0ZW5jeSk7Ci0Jc2VyaWFsX29tYXBfdWFydF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHVwLT5uYW1lKTsKIAlJTklUX1dPUksoJnVwLT5xb3Nfd29yaywgc2VyaWFsX29tYXBfdWFydF9xb3Nfd29yayk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB1cCk7CiAJaWYgKG9tYXBfdXBfaW5mby0+YXV0b3N1c3BlbmRfdGltZW91dCA9PSAwKQogCQlvbWFwX3VwX2luZm8tPmF1dG9zdXNwZW5kX3RpbWVvdXQgPSAtMTsKKwogCWRldmljZV9pbml0X3dha2V1cCh1cC0+ZGV2LCB0cnVlKTsKIAlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2LApAQCAtMTc4Niw3ICsxNzMxLDYgQEAKIGVycl9hZGRfcG9ydDoKIAlwbV9ydW50aW1lX3B1dCgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Ci1lcnJfaW9yZW1hcDoKIGVycl9yczQ4NToKIGVycl9wb3J0X2xpbmU6CiAJZGV2X2VycigmcGRldi0+ZGV2LCAiW1VBUlQlZF06IGZhaWx1cmUgWyVzXTogJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCmluZGV4IDA5MzFiM2YuLjBjYjZhOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCkBAIC0yNTcsNiArMjU3LDggQEAKIAlkbWFfYWRkcl90CQkJcnhfYnVmX2RtYTsKIAogCXN0cnVjdCBkZW50cnkJKmRlYnVnZnM7CisjZGVmaW5lIElSUV9OQU1FX1NJWkUgMTcKKwljaGFyCQkJCWlycV9uYW1lW0lSUV9OQU1FX1NJWkVdOwogCiAJLyogcHJvdGVjdCB0aGUgZWcyMHRfcG9ydCBwcml2YXRlIHN0cnVjdHVyZSBhbmQgaW8gYWNjZXNzIHRvIG1lbWJhc2UgKi8KIAlzcGlubG9ja190IGxvY2s7CkBAIC0xMzQzLDcgKzEzNDUsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+cG9ydC5pcnEsIHBjaF91YXJ0X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQlLQlVJTERfTU9ETkFNRSwgcHJpdik7CisJCQlwcml2LT5pcnFfbmFtZSwgcHJpdik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE1ODgsMTMgKzE1OTAsOCBAQAogCXdhaXRfZm9yX3htaXRyKHByaXYsIFVBUlRfTFNSX1RIUkUpOwogCS8qCiAJICogU2VuZCB0aGUgY2hhcmFjdGVyIG91dC4KLQkgKiBJZiBhIExGLCBhbHNvIGRvIENSLi4uCiAJICovCiAJaW93cml0ZTgoYywgcHJpdi0+bWVtYmFzZSArIFBDSF9VQVJUX1RIUik7Ci0JaWYgKGMgPT0gMTApIHsKLQkJd2FpdF9mb3JfeG1pdHIocHJpdiwgVUFSVF9MU1JfVEhSRSk7Ci0JCWlvd3JpdGU4KDEzLCBwcml2LT5tZW1iYXNlICsgUENIX1VBUlRfVEhSKTsKLQl9CiAKIAkvKgogCSAqIEZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQpAQCAtMTgxOCw2ICsxODE1LDEwIEBACiAJcHJpdi0+cG9ydC5saW5lID0gYm9hcmQtPmxpbmVfbm87CiAJcHJpdi0+dHJpZ2dlciA9IFBDSF9VQVJUX0hBTF9UUklHR0VSX007CiAKKwlzbnByaW50Zihwcml2LT5pcnFfbmFtZSwgSVJRX05BTUVfU0laRSwKKwkJIEtCVUlMRF9NT0ROQU1FICI6IiBQQ0hfVUFSVF9EUklWRVJfREVWSUNFICIlZCIsCisJCSBwcml2LT5wb3J0LmxpbmUpOworCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvcnQubG9jayk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcHhhLmMKaW5kZXggZjlmMjBmMy4uOWU3ZWUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9weGEuYwpAQCAtNzExLDEzICs3MTEsOCBAQAogCXdhaXRfZm9yX3htaXRyKHVwKTsKIAkvKgogCSAqCVNlbmQgdGhlIGNoYXJhY3RlciBvdXQuCi0JICoJSWYgYSBMRiwgYWxzbyBkbyBDUi4uLgogCSAqLwogCXNlcmlhbF9vdXQodXAsIFVBUlRfVFgsIGMpOwotCWlmIChjID09IDEwKSB7Ci0JCXdhaXRfZm9yX3htaXRyKHVwKTsKLQkJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgMTMpOwotCX0KIAogCS8qCiAJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYwppbmRleCAxZjU1MDVlLi4zMjkzMzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKQEAgLTUzLDYgKzUzLDI5IEBACiAKICNpbmNsdWRlICJzYW1zdW5nLmgiCiAKKyNpZglkZWZpbmVkKENPTkZJR19TRVJJQUxfU0FNU1VOR19ERUJVRykgJiYJXAorCWRlZmluZWQoQ09ORklHX0RFQlVHX0xMKSAmJgkJXAorCSFkZWZpbmVkKE1PRFVMRSkKKworZXh0ZXJuIHZvaWQgcHJpbnRhc2NpaShjb25zdCBjaGFyICopOworCitfX3ByaW50ZigxLCAyKQorc3RhdGljIHZvaWQgZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdmE7CisJY2hhciBidWZmWzI1Nl07CisKKwl2YV9zdGFydCh2YSwgZm10KTsKKwl2c2NucHJpbnRmKGJ1ZmYsIHNpemVvZihidWYpLCBmbXQsIHZhKTsKKwl2YV9lbmQodmEpOworCisJcHJpbnRhc2NpaShidWZmKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgZGJnKGZtdCwgLi4uKSBkbyB7IGlmICgwKSBub19wcmludGsoZm10LCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKiBVQVJUIG5hbWUgYW5kIGRldmljZSBkZWZpbml0aW9ucyAqLwogCiAjZGVmaW5lIFMzQzI0WFhfU0VSSUFMX05BTUUJInR0eVNBQyIKQEAgLTQ2OCw4ICs0OTEsOCBAQAogCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydCA9IHRvX291cnBvcnQocG9ydCk7CiAJaW50IHJldDsKIAotCWRiZygiczNjMjR4eF9zZXJpYWxfc3RhcnR1cDogcG9ydD0lcCAoJTA4bHgsJXApXG4iLAotCSAgICBwb3J0LT5tYXBiYXNlLCBwb3J0LT5tZW1iYXNlKTsKKwlkYmcoInMzYzI0eHhfc2VyaWFsX3N0YXJ0dXA6IHBvcnQ9JXAgKCUwOGxseCwlcClcbiIsCisJICAgIHBvcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+bWFwYmFzZSwgcG9ydC0+bWVtYmFzZSk7CiAKIAlyeF9lbmFibGVkKHBvcnQpID0gMTsKIApAQCAtNTE0LDggKzUzNyw4IEBACiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gdG9fb3VycG9ydChwb3J0KTsKIAlpbnQgcmV0OwogCi0JZGJnKCJzM2M2NHh4X3NlcmlhbF9zdGFydHVwOiBwb3J0PSVwICglMDhseCwlcClcbiIsCi0JICAgIHBvcnQtPm1hcGJhc2UsIHBvcnQtPm1lbWJhc2UpOworCWRiZygiczNjNjR4eF9zZXJpYWxfc3RhcnR1cDogcG9ydD0lcCAoJTA4bGx4LCVwKVxuIiwKKwkgICAgcG9ydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT5tYXBiYXNlLCBwb3J0LT5tZW1iYXNlKTsKIAogCXdyX3JlZ2wocG9ydCwgUzNDNjRYWF9VSU5UTSwgMHhmKTsKIApAQCAtMTE2MCw3ICsxMTgzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGJnKCJyZXNvdXJjZSAlcCAoJWx4Li4lbHgpXG4iLCByZXMsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwlkYmcoInJlc291cmNlICVwUilcbiIsIHJlcyk7CiAKIAlwb3J0LT5tZW1iYXNlID0gZGV2bV9pb3JlbWFwKHBvcnQtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXBvcnQtPm1lbWJhc2UpIHsKQEAgLTEyMDMsNyArMTIyNiw3IEBACiAJCXdyX3JlZ2wocG9ydCwgUzNDNjRYWF9VSU5UU1AsIDB4Zik7CiAJfQogCi0JZGJnKCJwb3J0OiBtYXA9JTA4eCwgbWVtPSUwOHgsIGlycT0lZCAoJWQsJWQpLCBjbG9jaz0lbGRcbiIsCisJZGJnKCJwb3J0OiBtYXA9JTA4eCwgbWVtPSVwLCBpcnE9JWQgKCVkLCVkKSwgY2xvY2s9JXVcbiIsCiAJICAgIHBvcnQtPm1hcGJhc2UsIHBvcnQtPm1lbWJhc2UsIHBvcnQtPmlycSwKIAkgICAgb3VycG9ydC0+cnhfaXJxLCBvdXJwb3J0LT50eF9pcnEsIHBvcnQtPnVhcnRjbGspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5oIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuaAppbmRleCA4ODI3ZTU0Li5lYjA3MWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5oCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmgKQEAgLTEsMyArMSw2IEBACisjaWZuZGVmIF9fU0FNU1VOR19ICisjZGVmaW5lIF9fU0FNU1VOR19ICisKIC8qCiAgKiBEcml2ZXIgZm9yIFNhbXN1bmcgU29DIG9uYm9hcmQgVUFSVHMuCiAgKgpAQCAtNzcsMjQgKzgwLDQgQEAKICNkZWZpbmUgd3JfcmVnYihwb3J0LCByZWcsIHZhbCkgX19yYXdfd3JpdGViKHZhbCwgcG9ydGFkZHIocG9ydCwgcmVnKSkKICNkZWZpbmUgd3JfcmVnbChwb3J0LCByZWcsIHZhbCkgX19yYXdfd3JpdGVsKHZhbCwgcG9ydGFkZHIocG9ydCwgcmVnKSkKIAotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9TQU1TVU5HX0RFQlVHKSAmJiBcCi0gICAgZGVmaW5lZChDT05GSUdfREVCVUdfTEwpICYmIFwKLSAgICAhZGVmaW5lZChNT0RVTEUpCi0KLWV4dGVybiB2b2lkIHByaW50YXNjaWkoY29uc3QgY2hhciAqKTsKLQotc3RhdGljIHZvaWQgZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgdmE7Ci0JY2hhciBidWZmWzI1Nl07Ci0KLQl2YV9zdGFydCh2YSwgZm10KTsKLQl2c3ByaW50ZihidWZmLCBmbXQsIHZhKTsKLQl2YV9lbmQodmEpOwotCi0JcHJpbnRhc2NpaShidWZmKTsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgZGJnKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NjMTZpczd4eC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NjMTZpczd4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmE3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2MxNmlzN3h4LmMKQEAgLTAsMCArMSwxMjc3IEBACisvKgorICogU0MxNklTN3h4IHR0eSBzZXJpYWwgZHJpdmVyIC0gQ29weXJpZ2h0IChDKSAyMDE0IEdyaWRQb2ludAorICogQXV0aG9yOiBKb24gUmluZ2xlIDxqcmluZ2xlQGdyaWRwb2ludC5jb20+CisgKgorICogIEJhc2VkIG9uIG1heDMxMHguYywgYnkgQWxleGFuZGVyIFNoaXlhbiA8c2hjX3dvcmtAbWFpbC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjZGVmaW5lIFNDMTZJUzdYWF9OQU1FCQkJInNjMTZpczd4eCIKKworLyogU0MxNklTN1hYIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNDMTZJUzdYWF9SSFJfUkVHCQkoMHgwMCkgLyogUlggRklGTyAqLworI2RlZmluZSBTQzE2SVM3WFhfVEhSX1JFRwkJKDB4MDApIC8qIFRYIEZJRk8gKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lFUl9SRUcJCSgweDAxKSAvKiBJbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFNDMTZJUzdYWF9JSVJfUkVHCQkoMHgwMikgLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIFNDMTZJUzdYWF9GQ1JfUkVHCQkoMHgwMikgLyogRklGTyBjb250cm9sICovCisjZGVmaW5lIFNDMTZJUzdYWF9MQ1JfUkVHCQkoMHgwMykgLyogTGluZSBDb250cm9sICovCisjZGVmaW5lIFNDMTZJUzdYWF9NQ1JfUkVHCQkoMHgwNCkgLyogTW9kZW0gQ29udHJvbCAqLworI2RlZmluZSBTQzE2SVM3WFhfTFNSX1JFRwkJKDB4MDUpIC8qIExpbmUgU3RhdHVzICovCisjZGVmaW5lIFNDMTZJUzdYWF9NU1JfUkVHCQkoMHgwNikgLyogTW9kZW0gU3RhdHVzICovCisjZGVmaW5lIFNDMTZJUzdYWF9TUFJfUkVHCQkoMHgwNykgLyogU2NyYXRjaCBQYWQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX1RYTFZMX1JFRwkJKDB4MDgpIC8qIFRYIEZJRk8gbGV2ZWwgKi8KKyNkZWZpbmUgU0MxNklTN1hYX1JYTFZMX1JFRwkJKDB4MDkpIC8qIFJYIEZJRk8gbGV2ZWwgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lPRElSX1JFRwkJKDB4MGEpIC8qIEkvTyBEaXJlY3Rpb24KKwkJCQkJCSogLSBvbmx5IG9uIDc1eC83NngKKwkJCQkJCSovCisjZGVmaW5lIFNDMTZJUzdYWF9JT1NUQVRFX1JFRwkJKDB4MGIpIC8qIEkvTyBTdGF0ZQorCQkJCQkJKiAtIG9ubHkgb24gNzV4Lzc2eAorCQkJCQkJKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lPSU5URU5BX1JFRwkJKDB4MGMpIC8qIEkvTyBJbnRlcnJ1cHQgRW5hYmxlCisJCQkJCQkqIC0gb25seSBvbiA3NXgvNzZ4CisJCQkJCQkqLworI2RlZmluZSBTQzE2SVM3WFhfSU9DT05UUk9MX1JFRwkJKDB4MGUpIC8qIEkvTyBDb250cm9sCisJCQkJCQkqIC0gb25seSBvbiA3NXgvNzZ4CisJCQkJCQkqLworI2RlZmluZSBTQzE2SVM3WFhfRUZDUl9SRUcJCSgweDBmKSAvKiBFeHRyYSBGZWF0dXJlcyBDb250cm9sICovCisKKy8qIFRDUi9UTFIgUmVnaXN0ZXIgc2V0OiBPbmx5IGlmICgoTUNSWzJdID09IDEpICYmIChFRlJbNF0gPT0gMSkpICovCisjZGVmaW5lIFNDMTZJUzdYWF9UQ1JfUkVHCQkoMHgwNikgLyogVHJhbnNtaXQgY29udHJvbCAqLworI2RlZmluZSBTQzE2SVM3WFhfVExSX1JFRwkJKDB4MDcpIC8qIFRyaWdnZXIgbGV2ZWwgKi8KKworLyogU3BlY2lhbCBSZWdpc3RlciBzZXQ6IE9ubHkgaWYgKChMQ1JbN10gPT0gMSkgJiYgKExDUiAhPSAweEJGKSkgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0RMTF9SRUcJCSgweDAwKSAvKiBEaXZpc29yIExhdGNoIExvdyAqLworI2RlZmluZSBTQzE2SVM3WFhfRExIX1JFRwkJKDB4MDEpIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCAqLworCisvKiBFbmhhbmNlZCBSZWdpc3RlciBzZXQ6IE9ubHkgaWYgKExDUiA9PSAweEJGKSAqLworI2RlZmluZSBTQzE2SVM3WFhfRUZSX1JFRwkJKDB4MDIpIC8qIEVuaGFuY2VkIEZlYXR1cmVzICovCisjZGVmaW5lIFNDMTZJUzdYWF9YT04xX1JFRwkJKDB4MDQpIC8qIFhvbjEgd29yZCAqLworI2RlZmluZSBTQzE2SVM3WFhfWE9OMl9SRUcJCSgweDA1KSAvKiBYb24yIHdvcmQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX1hPRkYxX1JFRwkJKDB4MDYpIC8qIFhvZmYxIHdvcmQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX1hPRkYyX1JFRwkJKDB4MDcpIC8qIFhvZmYyIHdvcmQgKi8KKworLyogSUVSIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lFUl9SRElfQklUCQkoMSA8PCAwKSAvKiBFbmFibGUgUlggZGF0YSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lFUl9USFJJX0JJVAkJKDEgPDwgMSkgLyogRW5hYmxlIFRYIGhvbGRpbmcgcmVnaXN0ZXIKKwkJCQkJCSAgKiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lFUl9STFNJX0JJVAkJKDEgPDwgMikgLyogRW5hYmxlIFJYIGxpbmUgc3RhdHVzCisJCQkJCQkgICogaW50ZXJydXB0ICovCisjZGVmaW5lIFNDMTZJUzdYWF9JRVJfTVNJX0JJVAkJKDEgPDwgMykgLyogRW5hYmxlIE1vZGVtIHN0YXR1cworCQkJCQkJICAqIGludGVycnVwdCAqLworCisvKiBJRVIgcmVnaXN0ZXIgYml0cyAtIHdyaXRlIG9ubHkgaWYgKEVGUls0XSA9PSAxKSAqLworI2RlZmluZSBTQzE2SVM3WFhfSUVSX1NMRUVQX0JJVAkJKDEgPDwgNCkgLyogRW5hYmxlIFNsZWVwIG1vZGUgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lFUl9YT0ZGSV9CSVQJCSgxIDw8IDUpIC8qIEVuYWJsZSBYb2ZmIGludGVycnVwdCAqLworI2RlZmluZSBTQzE2SVM3WFhfSUVSX1JUU0lfQklUCQkoMSA8PCA2KSAvKiBFbmFibGUgblJUUyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lFUl9DVFNJX0JJVAkJKDEgPDwgNykgLyogRW5hYmxlIG5DVFMgaW50ZXJydXB0ICovCisKKy8qIEZDUiByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIFNDMTZJUzdYWF9GQ1JfRklGT19CSVQJCSgxIDw8IDApIC8qIEVuYWJsZSBGSUZPICovCisjZGVmaW5lIFNDMTZJUzdYWF9GQ1JfUlhSRVNFVF9CSVQJKDEgPDwgMSkgLyogUmVzZXQgUlggRklGTyAqLworI2RlZmluZSBTQzE2SVM3WFhfRkNSX1RYUkVTRVRfQklUCSgxIDw8IDIpIC8qIFJlc2V0IFRYIEZJRk8gKi8KKyNkZWZpbmUgU0MxNklTN1hYX0ZDUl9SWExWTExfQklUCSgxIDw8IDYpIC8qIFJYIFRyaWdnZXIgbGV2ZWwgTFNCICovCisjZGVmaW5lIFNDMTZJUzdYWF9GQ1JfUlhMVkxIX0JJVAkoMSA8PCA3KSAvKiBSWCBUcmlnZ2VyIGxldmVsIE1TQiAqLworCisvKiBGQ1IgcmVnaXN0ZXIgYml0cyAtIHdyaXRlIG9ubHkgaWYgKEVGUls0XSA9PSAxKSAqLworI2RlZmluZSBTQzE2SVM3WFhfRkNSX1RYTFZMTF9CSVQJKDEgPDwgNCkgLyogVFggVHJpZ2dlciBsZXZlbCBMU0IgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0ZDUl9UWExWTEhfQklUCSgxIDw8IDUpIC8qIFRYIFRyaWdnZXIgbGV2ZWwgTVNCICovCisKKy8qIElJUiByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIFNDMTZJUzdYWF9JSVJfTk9fSU5UX0JJVAkoMSA8PCAwKSAvKiBObyBpbnRlcnJ1cHRzIHBlbmRpbmcgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lJUl9JRF9NQVNLCQkweDNlICAgICAvKiBNYXNrIGZvciB0aGUgaW50ZXJydXB0IElEICovCisjZGVmaW5lIFNDMTZJUzdYWF9JSVJfVEhSSV9TUkMJCTB4MDIgICAgIC8qIFRYIGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lJUl9SRElfU1JDCQkweDA0ICAgICAvKiBSWCBkYXRhIGludGVycnVwdCAqLworI2RlZmluZSBTQzE2SVM3WFhfSUlSX1JMU0VfU1JDCQkweDA2ICAgICAvKiBSWCBsaW5lIHN0YXR1cyBlcnJvciAqLworI2RlZmluZSBTQzE2SVM3WFhfSUlSX1JUT0lfU1JDCQkweDBjICAgICAvKiBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lJUl9NU0lfU1JDCQkweDAwICAgICAvKiBNb2RlbSBzdGF0dXMgaW50ZXJydXB0CisJCQkJCQkgICogLSBvbmx5IG9uIDc1eC83NngKKwkJCQkJCSAgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lJUl9JTlBJTl9TUkMJCTB4MzAgICAgIC8qIElucHV0IHBpbiBjaGFuZ2Ugb2Ygc3RhdGUKKwkJCQkJCSAgKiAtIG9ubHkgb24gNzV4Lzc2eAorCQkJCQkJICAqLworI2RlZmluZSBTQzE2SVM3WFhfSUlSX1hPRkZJX1NSQwkJMHgxMCAgICAgLyogUmVjZWl2ZWQgWG9mZiAqLworI2RlZmluZSBTQzE2SVM3WFhfSUlSX0NUU1JUU19TUkMJMHgyMCAgICAgLyogbkNUUyxuUlRTIGNoYW5nZSBvZiBzdGF0ZQorCQkJCQkJICAqIGZyb20gYWN0aXZlIChMT1cpCisJCQkJCQkgICogdG8gaW5hY3RpdmUgKEhJR0gpCisJCQkJCQkgICovCisvKiBMQ1IgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTQzE2SVM3WFhfTENSX0xFTkdUSDBfQklUCSgxIDw8IDApIC8qIFdvcmQgbGVuZ3RoIGJpdCAwICovCisjZGVmaW5lIFNDMTZJUzdYWF9MQ1JfTEVOR1RIMV9CSVQJKDEgPDwgMSkgLyogV29yZCBsZW5ndGggYml0IDEKKwkJCQkJCSAgKgorCQkJCQkJICAqIFdvcmQgbGVuZ3RoIGJpdHMgdGFibGU6CisJCQkJCQkgICogMDAgLT4gNSBiaXQgd29yZHMKKwkJCQkJCSAgKiAwMSAtPiA2IGJpdCB3b3JkcworCQkJCQkJICAqIDEwIC0+IDcgYml0IHdvcmRzCisJCQkJCQkgICogMTEgLT4gOCBiaXQgd29yZHMKKwkJCQkJCSAgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9TVE9QTEVOX0JJVAkoMSA8PCAyKSAvKiBTVE9QIGxlbmd0aCBiaXQKKwkJCQkJCSAgKgorCQkJCQkJICAqIFNUT1AgbGVuZ3RoIGJpdCB0YWJsZToKKwkJCQkJCSAgKiAwIC0+IDEgc3RvcCBiaXQKKwkJCQkJCSAgKiAxIC0+IDEtMS41IHN0b3AgYml0cyBpZgorCQkJCQkJICAqICAgICAgd29yZCBsZW5ndGggaXMgNSwKKwkJCQkJCSAgKiAgICAgIDIgc3RvcCBiaXRzIG90aGVyd2lzZQorCQkJCQkJICAqLworI2RlZmluZSBTQzE2SVM3WFhfTENSX1BBUklUWV9CSVQJKDEgPDwgMykgLyogUGFyaXR5IGJpdCBlbmFibGUgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9FVkVOUEFSSVRZX0JJVAkoMSA8PCA0KSAvKiBFdmVuIHBhcml0eSBiaXQgZW5hYmxlICovCisjZGVmaW5lIFNDMTZJUzdYWF9MQ1JfRk9SQ0VQQVJJVFlfQklUCSgxIDw8IDUpIC8qIDktYml0IG11bHRpZHJvcCBwYXJpdHkgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9UWEJSRUFLX0JJVAkoMSA8PCA2KSAvKiBUWCBicmVhayBlbmFibGUgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9ETEFCX0JJVAkJKDEgPDwgNykgLyogRGl2aXNvciBMYXRjaCBlbmFibGUgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9XT1JEX0xFTl81CSgweDAwKQorI2RlZmluZSBTQzE2SVM3WFhfTENSX1dPUkRfTEVOXzYJKDB4MDEpCisjZGVmaW5lIFNDMTZJUzdYWF9MQ1JfV09SRF9MRU5fNwkoMHgwMikKKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9XT1JEX0xFTl84CSgweDAzKQorI2RlZmluZSBTQzE2SVM3WFhfTENSX0NPTkZfTU9ERV9BCVNDMTZJUzdYWF9MQ1JfRExBQl9CSVQgLyogU3BlY2lhbAorCQkJCQkJCQkqIHJlZyBzZXQgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xDUl9DT05GX01PREVfQgkweEJGICAgICAgICAgICAgICAgICAgIC8qIEVuaGFuY2VkCisJCQkJCQkJCSogcmVnIHNldCAqLworCisvKiBNQ1IgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTQzE2SVM3WFhfTUNSX0RUUl9CSVQJCSgxIDw8IDApIC8qIERUUiBjb21wbGVtZW50CisJCQkJCQkgICogLSBvbmx5IG9uIDc1eC83NngKKwkJCQkJCSAgKi8KKyNkZWZpbmUgU0MxNklTN1hYX01DUl9SVFNfQklUCQkoMSA8PCAxKSAvKiBSVFMgY29tcGxlbWVudCAqLworI2RlZmluZSBTQzE2SVM3WFhfTUNSX1RDUlRMUl9CSVQJKDEgPDwgMikgLyogVENSL1RMUiByZWdpc3RlciBlbmFibGUgKi8KKyNkZWZpbmUgU0MxNklTN1hYX01DUl9MT09QX0JJVAkJKDEgPDwgNCkgLyogRW5hYmxlIGxvb3BiYWNrIHRlc3QgbW9kZSAqLworI2RlZmluZSBTQzE2SVM3WFhfTUNSX1hPTkFOWV9CSVQJKDEgPDwgNSkgLyogRW5hYmxlIFhvbiBBbnkKKwkJCQkJCSAgKiAtIHdyaXRlIGVuYWJsZWQKKwkJCQkJCSAgKiBpZiAoRUZSWzRdID09IDEpCisJCQkJCQkgICovCisjZGVmaW5lIFNDMTZJUzdYWF9NQ1JfSVJEQV9CSVQJCSgxIDw8IDYpIC8qIEVuYWJsZSBJckRBIG1vZGUKKwkJCQkJCSAgKiAtIHdyaXRlIGVuYWJsZWQKKwkJCQkJCSAgKiBpZiAoRUZSWzRdID09IDEpCisJCQkJCQkgICovCisjZGVmaW5lIFNDMTZJUzdYWF9NQ1JfQ0xLU0VMX0JJVAkoMSA8PCA3KSAvKiBEaXZpZGUgY2xvY2sgYnkgNAorCQkJCQkJICAqIC0gd3JpdGUgZW5hYmxlZAorCQkJCQkJICAqIGlmIChFRlJbNF0gPT0gMSkKKwkJCQkJCSAgKi8KKworLyogTFNSIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xTUl9EUl9CSVQJCSgxIDw8IDApIC8qIFJlY2VpdmVyIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xTUl9PRV9CSVQJCSgxIDw8IDEpIC8qIE92ZXJydW4gRXJyb3IgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xTUl9QRV9CSVQJCSgxIDw8IDIpIC8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBTQzE2SVM3WFhfTFNSX0ZFX0JJVAkJKDEgPDwgMykgLyogRnJhbWUgRXJyb3IgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xTUl9CSV9CSVQJCSgxIDw8IDQpIC8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBTQzE2SVM3WFhfTFNSX0JSS19FUlJPUl9NQVNLCTB4MUUgICAgIC8qIEJJLCBGRSwgUEUsIE9FIGJpdHMgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0xTUl9USFJFX0JJVAkJKDEgPDwgNSkgLyogVFggaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBTQzE2SVM3WFhfTFNSX1RFTVRfQklUCQkoMSA8PCA2KSAvKiBUcmFuc21pdHRlciBlbXB0eSAqLworI2RlZmluZSBTQzE2SVM3WFhfTFNSX0ZJRk9FX0JJVAkJKDEgPDwgNykgLyogRmlmbyBFcnJvciAqLworCisvKiBNU1IgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTQzE2SVM3WFhfTVNSX0RDVFNfQklUCQkoMSA8PCAwKSAvKiBEZWx0YSBDVFMgQ2xlYXIgVG8gU2VuZCAqLworI2RlZmluZSBTQzE2SVM3WFhfTVNSX0REU1JfQklUCQkoMSA8PCAxKSAvKiBEZWx0YSBEU1IgRGF0YSBTZXQgUmVhZHkKKwkJCQkJCSAgKiBvciAoSU80KQorCQkJCQkJICAqIC0gb25seSBvbiA3NXgvNzZ4CisJCQkJCQkgICovCisjZGVmaW5lIFNDMTZJUzdYWF9NU1JfRFJJX0JJVAkJKDEgPDwgMikgLyogRGVsdGEgUkkgUmluZyBJbmRpY2F0b3IKKwkJCQkJCSAgKiBvciAoSU83KQorCQkJCQkJICAqIC0gb25seSBvbiA3NXgvNzZ4CisJCQkJCQkgICovCisjZGVmaW5lIFNDMTZJUzdYWF9NU1JfRENEX0JJVAkJKDEgPDwgMykgLyogRGVsdGEgQ0QgQ2FycmllciBEZXRlY3QKKwkJCQkJCSAgKiBvciAoSU82KQorCQkJCQkJICAqIC0gb25seSBvbiA3NXgvNzZ4CisJCQkJCQkgICovCisjZGVmaW5lIFNDMTZJUzdYWF9NU1JfQ1RTX0JJVAkJKDEgPDwgMCkgLyogQ1RTICovCisjZGVmaW5lIFNDMTZJUzdYWF9NU1JfRFNSX0JJVAkJKDEgPDwgMSkgLyogRFNSIChJTzQpCisJCQkJCQkgICogLSBvbmx5IG9uIDc1eC83NngKKwkJCQkJCSAgKi8KKyNkZWZpbmUgU0MxNklTN1hYX01TUl9SSV9CSVQJCSgxIDw8IDIpIC8qIFJJIChJTzcpCisJCQkJCQkgICogLSBvbmx5IG9uIDc1eC83NngKKwkJCQkJCSAgKi8KKyNkZWZpbmUgU0MxNklTN1hYX01TUl9DRF9CSVQJCSgxIDw8IDMpIC8qIENEIChJTzYpCisJCQkJCQkgICogLSBvbmx5IG9uIDc1eC83NngKKwkJCQkJCSAgKi8KKyNkZWZpbmUgU0MxNklTN1hYX01TUl9ERUxUQV9NQVNLCTB4MEYgICAgIC8qIEFueSBvZiB0aGUgZGVsdGEgYml0cyEgKi8KKworLyoKKyAqIFRDUiByZWdpc3RlciBiaXRzCisgKiBUQ1IgdHJpZ2dlciBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIDAgdG8gNjAgY2hhcmFjdGVycyB3aXRoIGEgZ3JhbnVsYXJpdHkKKyAqIG9mIGZvdXIuCisgKiBUaGUgcHJvZ3JhbW1lciBtdXN0IHByb2dyYW0gdGhlIFRDUiBzdWNoIHRoYXQgVENSWzM6MF0gPiBUQ1JbNzo0XS4gVGhlcmUgaXMKKyAqIG5vIGJ1aWx0LWluIGhhcmR3YXJlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGlzIGNvbmRpdGlvbiBpcyBtZXQuIEFsc28sIHRoZSBUQ1IKKyAqIG11c3QgYmUgcHJvZ3JhbW1lZCB3aXRoIHRoaXMgY29uZGl0aW9uIGJlZm9yZSBhdXRvIFJUUyBvciBzb2Z0d2FyZSBmbG93CisgKiBjb250cm9sIGlzIGVuYWJsZWQgdG8gYXZvaWQgc3B1cmlvdXMgb3BlcmF0aW9uIG9mIHRoZSBkZXZpY2UuCisgKi8KKyNkZWZpbmUgU0MxNklTN1hYX1RDUl9SWF9IQUxUKHdvcmRzKQkoKCgod29yZHMpIC8gNCkgJiAweDBmKSA8PCAwKQorI2RlZmluZSBTQzE2SVM3WFhfVENSX1JYX1JFU1VNRSh3b3JkcykJKCgoKHdvcmRzKSAvIDQpICYgMHgwZikgPDwgNCkKKworLyoKKyAqIFRMUiByZWdpc3RlciBiaXRzCisgKiBJZiBUTFJbMzowXSBvciBUTFJbNzo0XSBhcmUgbG9naWNhbCAwLCB0aGUgc2VsZWN0YWJsZSB0cmlnZ2VyIGxldmVscyB2aWEgdGhlCisgKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKEZDUikgYXJlIHVzZWQgZm9yIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPCisgKiB0cmlnZ2VyIGxldmVscy4gVHJpZ2dlciBsZXZlbHMgZnJvbSA0IGNoYXJhY3RlcnMgdG8gNjAgY2hhcmFjdGVycyBhcmUKKyAqIGF2YWlsYWJsZSB3aXRoIGEgZ3JhbnVsYXJpdHkgb2YgZm91ci4KKyAqCisgKiBXaGVuIHRoZSB0cmlnZ2VyIGxldmVsIHNldHRpbmcgaW4gVExSIGlzIHplcm8sIHRoZSBTQzE2SVM3NDAvNzUwLzc2MCB1c2VzIHRoZQorICogdHJpZ2dlciBsZXZlbCBzZXR0aW5nIGRlZmluZWQgaW4gRkNSLiBJZiBUTFIgaGFzIG5vbi16ZXJvIHRyaWdnZXIgbGV2ZWwgdmFsdWUKKyAqIHRoZSB0cmlnZ2VyIGxldmVsIGRlZmluZWQgaW4gRkNSIGlzIGRpc2NhcmRlZC4gVGhpcyBhcHBsaWVzIHRvIGJvdGggdHJhbnNtaXQKKyAqIEZJRk8gYW5kIHJlY2VpdmUgRklGTyB0cmlnZ2VyIGxldmVsIHNldHRpbmcuCisgKgorICogV2hlbiBUTFIgaXMgdXNlZCBmb3IgUlggdHJpZ2dlciBsZXZlbCBjb250cm9sLCBGQ1JbNzo2XSBzaG91bGQgYmUgbGVmdCBhdCB0aGUKKyAqIGRlZmF1bHQgc3RhdGUsIHRoYXQgaXMsICcwMCcuCisgKi8KKyNkZWZpbmUgU0MxNklTN1hYX1RMUl9UWF9UUklHR0VSKHdvcmRzKQkoKCgod29yZHMpIC8gNCkgJiAweDBmKSA8PCAwKQorI2RlZmluZSBTQzE2SVM3WFhfVExSX1JYX1RSSUdHRVIod29yZHMpCSgoKCh3b3JkcykgLyA0KSAmIDB4MGYpIDw8IDQpCisKKy8qIElPQ29udHJvbCByZWdpc3RlciBiaXRzIChPbmx5IDc1MC83NjApICovCisjZGVmaW5lIFNDMTZJUzdYWF9JT0NPTlRST0xfTEFUQ0hfQklUCSgxIDw8IDApIC8qIEVuYWJsZSBpbnB1dCBsYXRjaGluZyAqLworI2RlZmluZSBTQzE2SVM3WFhfSU9DT05UUk9MX0dQSU9fQklUCSgxIDw8IDEpIC8qIEVuYWJsZSBHUElPWzc6NF0gKi8KKyNkZWZpbmUgU0MxNklTN1hYX0lPQ09OVFJPTF9TUkVTRVRfQklUCSgxIDw8IDMpIC8qIFNvZnR3YXJlIFJlc2V0ICovCisKKy8qIEVGQ1IgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTQzE2SVM3WFhfRUZDUl85QklUX01PREVfQklUCSgxIDw8IDApIC8qIEVuYWJsZSA5LWJpdCBvciBNdWx0aWRyb3AKKwkJCQkJCSAgKiBtb2RlIChSUzQ4NSkgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0VGQ1JfUlhESVNBQkxFX0JJVAkoMSA8PCAxKSAvKiBEaXNhYmxlIHJlY2VpdmVyICovCisjZGVmaW5lIFNDMTZJUzdYWF9FRkNSX1RYRElTQUJMRV9CSVQJKDEgPDwgMikgLyogRGlzYWJsZSB0cmFuc21pdHRlciAqLworI2RlZmluZSBTQzE2SVM3WFhfRUZDUl9BVVRPX1JTNDg1X0JJVAkoMSA8PCA0KSAvKiBBdXRvIFJTNDg1IFJUUyBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgU0MxNklTN1hYX0VGQ1JfUlRTX0lOVkVSVF9CSVQJKDEgPDwgNSkgLyogUlRTIG91dHB1dCBpbnZlcnNpb24gKi8KKyNkZWZpbmUgU0MxNklTN1hYX0VGQ1JfSVJEQV9NT0RFX0JJVAkoMSA8PCA3KSAvKiBJckRBIG1vZGUKKwkJCQkJCSAgKiAwID0gcmF0ZSB1cHRvIDExNS4yIGtiaXQvcworCQkJCQkJICAqICAgLSBPbmx5IDc1MC83NjAKKwkJCQkJCSAgKiAxID0gcmF0ZSB1cHRvIDEuMTUyIE1iaXQvcworCQkJCQkJICAqICAgLSBPbmx5IDc2MAorCQkJCQkJICAqLworCisvKiBFRlIgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTQzE2SVM3WFhfRUZSX0FVVE9SVFNfQklUCSgxIDw8IDYpIC8qIEF1dG8gUlRTIGZsb3cgY3RybCBlbmFibGUgKi8KKyNkZWZpbmUgU0MxNklTN1hYX0VGUl9BVVRPQ1RTX0JJVAkoMSA8PCA3KSAvKiBBdXRvIENUUyBmbG93IGN0cmwgZW5hYmxlICovCisjZGVmaW5lIFNDMTZJUzdYWF9FRlJfWE9GRjJfREVURUNUX0JJVAkoMSA8PCA1KSAvKiBFbmFibGUgWG9mZjIgZGV0ZWN0aW9uICovCisjZGVmaW5lIFNDMTZJUzdYWF9FRlJfRU5BQkxFX0JJVAkoMSA8PCA0KSAvKiBFbmFibGUgZW5oYW5jZWQgZnVuY3Rpb25zCisJCQkJCQkgICogYW5kIHdyaXRpbmcgdG8gSUVSWzc6NF0sCisJCQkJCQkgICogRkNSWzU6NF0sIE1DUls3OjVdCisJCQkJCQkgICovCisjZGVmaW5lIFNDMTZJUzdYWF9FRlJfU1dGTE9XM19CSVQJKDEgPDwgMykgLyogU1dGTE9XIGJpdCAzICovCisjZGVmaW5lIFNDMTZJUzdYWF9FRlJfU1dGTE9XMl9CSVQJKDEgPDwgMikgLyogU1dGTE9XIGJpdCAyCisJCQkJCQkgICoKKwkJCQkJCSAgKiBTV0ZMT1cgYml0cyAzICYgMiB0YWJsZToKKwkJCQkJCSAgKiAwMCAtPiBubyB0cmFuc21pdHRlciBmbG93CisJCQkJCQkgICogICAgICAgY29udHJvbAorCQkJCQkJICAqIDAxIC0+IHRyYW5zbWl0dGVyIGdlbmVyYXRlcworCQkJCQkJICAqICAgICAgIFhPTjIgYW5kIFhPRkYyCisJCQkJCQkgICogMTAgLT4gdHJhbnNtaXR0ZXIgZ2VuZXJhdGVzCisJCQkJCQkgICogICAgICAgWE9OMSBhbmQgWE9GRjEKKwkJCQkJCSAgKiAxMSAtPiB0cmFuc21pdHRlciBnZW5lcmF0ZXMKKwkJCQkJCSAgKiAgICAgICBYT04xLCBYT04yLCBYT0ZGMSBhbmQKKwkJCQkJCSAgKiAgICAgICBYT0ZGMgorCQkJCQkJICAqLworI2RlZmluZSBTQzE2SVM3WFhfRUZSX1NXRkxPVzFfQklUCSgxIDw8IDEpIC8qIFNXRkxPVyBiaXQgMiAqLworI2RlZmluZSBTQzE2SVM3WFhfRUZSX1NXRkxPVzBfQklUCSgxIDw8IDApIC8qIFNXRkxPVyBiaXQgMworCQkJCQkJICAqCisJCQkJCQkgICogU1dGTE9XIGJpdHMgMyAmIDIgdGFibGU6CisJCQkJCQkgICogMDAgLT4gbm8gcmVjZWl2ZWQgZmxvdworCQkJCQkJICAqICAgICAgIGNvbnRyb2wKKwkJCQkJCSAgKiAwMSAtPiByZWNlaXZlciBjb21wYXJlcworCQkJCQkJICAqICAgICAgIFhPTjIgYW5kIFhPRkYyCisJCQkJCQkgICogMTAgLT4gcmVjZWl2ZXIgY29tcGFyZXMKKwkJCQkJCSAgKiAgICAgICBYT04xIGFuZCBYT0ZGMQorCQkJCQkJICAqIDExIC0+IHJlY2VpdmVyIGNvbXBhcmVzCisJCQkJCQkgICogICAgICAgWE9OMSwgWE9OMiwgWE9GRjEgYW5kCisJCQkJCQkgICogICAgICAgWE9GRjIKKwkJCQkJCSAgKi8KKworLyogTWlzYyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTQzE2SVM3WFhfRklGT19TSVpFCQkoNjQpCisjZGVmaW5lIFNDMTZJUzdYWF9SRUdfU0hJRlQJCTIKKworc3RydWN0IHNjMTZpczd4eF9kZXZ0eXBlIHsKKwljaGFyCW5hbWVbMTBdOworCWludAlucl9ncGlvOworCWludAlucl91YXJ0OworfTsKKworc3RydWN0IHNjMTZpczd4eF9vbmUgeworCXN0cnVjdCB1YXJ0X3BvcnQJCXBvcnQ7CisJc3RydWN0IHdvcmtfc3RydWN0CQl0eF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJbWRfd29yazsKKworCXN0cnVjdCBzZXJpYWxfcnM0ODUJCXJzNDg1OworfTsKKworc3RydWN0IHNjMTZpczd4eF9wb3J0IHsKKwlzdHJ1Y3QgdWFydF9kcml2ZXIJCXVhcnQ7CisJc3RydWN0IHNjMTZpczd4eF9kZXZ0eXBlCSpkZXZ0eXBlOworCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOworCXN0cnVjdCBtdXRleAkJCW11dGV4OworCXN0cnVjdCBjbGsJCQkqY2xrOworI2lmZGVmIENPTkZJR19HUElPTElCCisJc3RydWN0IGdwaW9fY2hpcAkJZ3BpbzsKKyNlbmRpZgorCXVuc2lnbmVkIGNoYXIJCQlidWZbU0MxNklTN1hYX0ZJRk9fU0laRV07CisJc3RydWN0IHNjMTZpczd4eF9vbmUJCXBbMF07Cit9OworCisjZGVmaW5lIHRvX3NjMTZpczd4eF9vbmUocCxlKQkoKGNvbnRhaW5lcl9vZigocCksIHN0cnVjdCBzYzE2aXM3eHhfb25lLCBlKSkpCisKK3N0YXRpYyB1OCBzYzE2aXM3eHhfcG9ydF9yZWFkKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHU4IHJlZykKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKnMgPSBkZXZfZ2V0X2RydmRhdGEocG9ydC0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCXJlZ21hcF9yZWFkKHMtPnJlZ21hcCwKKwkJICAgIChyZWcgPDwgU0MxNklTN1hYX1JFR19TSElGVCkgfCBwb3J0LT5saW5lLCAmdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNjMTZpczd4eF9wb3J0X3dyaXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHU4IHJlZywgdTggdmFsKQoreworCXN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqcyA9IGRldl9nZXRfZHJ2ZGF0YShwb3J0LT5kZXYpOworCisJcmVnbWFwX3dyaXRlKHMtPnJlZ21hcCwKKwkJICAgICAocmVnIDw8IFNDMTZJUzdYWF9SRUdfU0hJRlQpIHwgcG9ydC0+bGluZSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X3BvcnRfdXBkYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHU4IHJlZywKKwkJCQkgIHU4IG1hc2ssIHU4IHZhbCkKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKnMgPSBkZXZfZ2V0X2RydmRhdGEocG9ydC0+ZGV2KTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhzLT5yZWdtYXAsCisJCQkgICAocmVnIDw8IFNDMTZJUzdYWF9SRUdfU0hJRlQpIHwgcG9ydC0+bGluZSwKKwkJCSAgIG1hc2ssIHZhbCk7Cit9CisKKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X3Bvd2VyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBvbikKK3sKKwlzYzE2aXM3eHhfcG9ydF91cGRhdGUocG9ydCwgU0MxNklTN1hYX0lFUl9SRUcsCisJCQkgICAgICBTQzE2SVM3WFhfSUVSX1NMRUVQX0JJVCwKKwkJCSAgICAgIG9uID8gMCA6IFNDMTZJUzdYWF9JRVJfU0xFRVBfQklUKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzYzE2aXM3eHhfZGV2dHlwZSBzYzE2aXM3NHhfZGV2dHlwZSA9IHsKKwkubmFtZQkJPSAiU0MxNklTNzRYIiwKKwkubnJfZ3Bpbwk9IDAsCisJLm5yX3VhcnQJPSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzYzE2aXM3eHhfZGV2dHlwZSBzYzE2aXM3NTBfZGV2dHlwZSA9IHsKKwkubmFtZQkJPSAiU0MxNklTNzUwIiwKKwkubnJfZ3Bpbwk9IDgsCisJLm5yX3VhcnQJPSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzYzE2aXM3eHhfZGV2dHlwZSBzYzE2aXM3NTJfZGV2dHlwZSA9IHsKKwkubmFtZQkJPSAiU0MxNklTNzUyIiwKKwkubnJfZ3Bpbwk9IDgsCisJLm5yX3VhcnQJPSAyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzYzE2aXM3eHhfZGV2dHlwZSBzYzE2aXM3NjBfZGV2dHlwZSA9IHsKKwkubmFtZQkJPSAiU0MxNklTNzYwIiwKKwkubnJfZ3Bpbwk9IDgsCisJLm5yX3VhcnQJPSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzYzE2aXM3eHhfZGV2dHlwZSBzYzE2aXM3NjJfZGV2dHlwZSA9IHsKKwkubmFtZQkJPSAiU0MxNklTNzYyIiwKKwkubnJfZ3Bpbwk9IDgsCisJLm5yX3VhcnQJPSAyLAorfTsKKworc3RhdGljIGJvb2wgc2MxNmlzN3h4X3JlZ21hcF92b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcgPj4gU0MxNklTN1hYX1JFR19TSElGVCkgeworCWNhc2UgU0MxNklTN1hYX1JIUl9SRUc6CisJY2FzZSBTQzE2SVM3WFhfSUlSX1JFRzoKKwljYXNlIFNDMTZJUzdYWF9MU1JfUkVHOgorCWNhc2UgU0MxNklTN1hYX01TUl9SRUc6CisJY2FzZSBTQzE2SVM3WFhfVFhMVkxfUkVHOgorCWNhc2UgU0MxNklTN1hYX1JYTFZMX1JFRzoKKwljYXNlIFNDMTZJUzdYWF9JT1NUQVRFX1JFRzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzYzE2aXM3eHhfcmVnbWFwX3ByZWNpb3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZyA+PiBTQzE2SVM3WFhfUkVHX1NISUZUKSB7CisJY2FzZSBTQzE2SVM3WFhfUkhSX1JFRzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHNjMTZpczd4eF9zZXRfYmF1ZChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYmF1ZCkKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKnMgPSBkZXZfZ2V0X2RydmRhdGEocG9ydC0+ZGV2KTsKKwl1OCBsY3I7CisJdTggcHJlc2NhbGVyID0gMDsKKwl1bnNpZ25lZCBsb25nIGNsayA9IHBvcnQtPnVhcnRjbGssIGRpdiA9IGNsayAvIDE2IC8gYmF1ZDsKKworCWlmIChkaXYgPiAweGZmZmYpIHsKKwkJcHJlc2NhbGVyID0gU0MxNklTN1hYX01DUl9DTEtTRUxfQklUOworCQlkaXYgLz0gNDsKKwl9CisKKwlsY3IgPSBzYzE2aXM3eHhfcG9ydF9yZWFkKHBvcnQsIFNDMTZJUzdYWF9MQ1JfUkVHKTsKKworCS8qIE9wZW4gdGhlIExDUiBkaXZpc29ycyBmb3IgY29uZmlndXJhdGlvbiAqLworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9MQ1JfUkVHLAorCQkJICAgICBTQzE2SVM3WFhfTENSX0NPTkZfTU9ERV9CKTsKKworCS8qIEVuYWJsZSBlbmhhbmNlZCBmZWF0dXJlcyAqLworCXJlZ2NhY2hlX2NhY2hlX2J5cGFzcyhzLT5yZWdtYXAsIHRydWUpOworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9FRlJfUkVHLAorCQkJICAgICBTQzE2SVM3WFhfRUZSX0VOQUJMRV9CSVQpOworCXJlZ2NhY2hlX2NhY2hlX2J5cGFzcyhzLT5yZWdtYXAsIGZhbHNlKTsKKworCS8qIFB1dCBMQ1IgYmFjayB0byB0aGUgbm9ybWFsIG1vZGUgKi8KKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfTENSX1JFRywgbGNyKTsKKworCXNjMTZpczd4eF9wb3J0X3VwZGF0ZShwb3J0LCBTQzE2SVM3WFhfTUNSX1JFRywKKwkJCSAgICAgIFNDMTZJUzdYWF9NQ1JfQ0xLU0VMX0JJVCwKKwkJCSAgICAgIHByZXNjYWxlcik7CisKKwkvKiBPcGVuIHRoZSBMQ1IgZGl2aXNvcnMgZm9yIGNvbmZpZ3VyYXRpb24gKi8KKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfTENSX1JFRywKKwkJCSAgICAgU0MxNklTN1hYX0xDUl9DT05GX01PREVfQSk7CisKKwkvKiBXcml0ZSB0aGUgbmV3IGRpdmlzb3IgKi8KKwlyZWdjYWNoZV9jYWNoZV9ieXBhc3Mocy0+cmVnbWFwLCB0cnVlKTsKKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfRExIX1JFRywgZGl2IC8gMjU2KTsKKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfRExMX1JFRywgZGl2ICUgMjU2KTsKKwlyZWdjYWNoZV9jYWNoZV9ieXBhc3Mocy0+cmVnbWFwLCBmYWxzZSk7CisKKwkvKiBQdXQgTENSIGJhY2sgdG8gdGhlIG5vcm1hbCBtb2RlICovCisJc2MxNmlzN3h4X3BvcnRfd3JpdGUocG9ydCwgU0MxNklTN1hYX0xDUl9SRUcsIGxjcik7CisKKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY2xrIC8gMTYsIGRpdik7Cit9CisKK3N0YXRpYyB2b2lkIHNjMTZpczd4eF9oYW5kbGVfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHJ4bGVuLAorCQkJCXVuc2lnbmVkIGludCBpaXIpCit7CisJc3RydWN0IHNjMTZpczd4eF9wb3J0ICpzID0gZGV2X2dldF9kcnZkYXRhKHBvcnQtPmRldik7CisJdW5zaWduZWQgaW50IGxzciA9IDAsIGNoLCBmbGFnLCBieXRlc19yZWFkLCBpOworCWJvb2wgcmVhZF9sc3IgPSAoaWlyID09IFNDMTZJUzdYWF9JSVJfUkxTRV9TUkMpID8gdHJ1ZSA6IGZhbHNlOworCisJaWYgKHVubGlrZWx5KHJ4bGVuID49IHNpemVvZihzLT5idWYpKSkgeworCQlkZXZfd2Fybl9yYXRlbGltaXRlZChwb3J0LT5kZXYsCisJCQkJICAgICAiUG9ydCAlaTogUG9zc2libGUgUlggRklGTyBvdmVycnVuOiAlZFxuIiwKKwkJCQkgICAgIHBvcnQtPmxpbmUsIHJ4bGVuKTsKKwkJcG9ydC0+aWNvdW50LmJ1Zl9vdmVycnVuKys7CisJCS8qIEVuc3VyZSBzYW5pdHkgb2YgUlggbGV2ZWwgKi8KKwkJcnhsZW4gPSBzaXplb2Yocy0+YnVmKTsKKwl9CisKKwl3aGlsZSAocnhsZW4pIHsKKwkJLyogT25seSByZWFkIGxzciBpZiB0aGVyZSBhcmUgcG9zc2libGUgZXJyb3JzIGluIEZJRk8gKi8KKwkJaWYgKHJlYWRfbHNyKSB7CisJCQlsc3IgPSBzYzE2aXM3eHhfcG9ydF9yZWFkKHBvcnQsIFNDMTZJUzdYWF9MU1JfUkVHKTsKKwkJCWlmICghKGxzciAmIFNDMTZJUzdYWF9MU1JfRklGT0VfQklUKSkKKwkJCQlyZWFkX2xzciA9IGZhbHNlOyAvKiBObyBlcnJvcnMgbGVmdCBpbiBGSUZPICovCisJCX0gZWxzZQorCQkJbHNyID0gMDsKKworCQlpZiAocmVhZF9sc3IpIHsKKwkJCXMtPmJ1ZlswXSA9IHNjMTZpczd4eF9wb3J0X3JlYWQocG9ydCwgU0MxNklTN1hYX1JIUl9SRUcpOworCQkJYnl0ZXNfcmVhZCA9IDE7CisJCX0gZWxzZSB7CisJCQlyZWdjYWNoZV9jYWNoZV9ieXBhc3Mocy0+cmVnbWFwLCB0cnVlKTsKKwkJCXJlZ21hcF9yYXdfcmVhZChzLT5yZWdtYXAsIFNDMTZJUzdYWF9SSFJfUkVHLAorCQkJCQlzLT5idWYsIHJ4bGVuKTsKKwkJCXJlZ2NhY2hlX2NhY2hlX2J5cGFzcyhzLT5yZWdtYXAsIGZhbHNlKTsKKwkJCWJ5dGVzX3JlYWQgPSByeGxlbjsKKwkJfQorCisJCWxzciAmPSBTQzE2SVM3WFhfTFNSX0JSS19FUlJPUl9NQVNLOworCisJCXBvcnQtPmljb3VudC5yeCsrOworCQlmbGFnID0gVFRZX05PUk1BTDsKKworCQlpZiAodW5saWtlbHkobHNyKSkgeworCQkJaWYgKGxzciAmIFNDMTZJUzdYWF9MU1JfQklfQklUKSB7CisJCQkJcG9ydC0+aWNvdW50LmJyaysrOworCQkJCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGxzciAmIFNDMTZJUzdYWF9MU1JfUEVfQklUKQorCQkJCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKKwkJCWVsc2UgaWYgKGxzciAmIFNDMTZJUzdYWF9MU1JfRkVfQklUKQorCQkJCXBvcnQtPmljb3VudC5mcmFtZSsrOworCQkJZWxzZSBpZiAobHNyICYgU0MxNklTN1hYX0xTUl9PRV9CSVQpCisJCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKworCQkJbHNyICY9IHBvcnQtPnJlYWRfc3RhdHVzX21hc2s7CisJCQlpZiAobHNyICYgU0MxNklTN1hYX0xTUl9CSV9CSVQpCisJCQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJCWVsc2UgaWYgKGxzciAmIFNDMTZJUzdYWF9MU1JfUEVfQklUKQorCQkJCWZsYWcgPSBUVFlfUEFSSVRZOworCQkJZWxzZSBpZiAobHNyICYgU0MxNklTN1hYX0xTUl9GRV9CSVQpCisJCQkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJCWVsc2UgaWYgKGxzciAmIFNDMTZJUzdYWF9MU1JfT0VfQklUKQorCQkJCWZsYWcgPSBUVFlfT1ZFUlJVTjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBieXRlc19yZWFkOyArK2kpIHsKKwkJCWNoID0gcy0+YnVmW2ldOworCQkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIocG9ydCwgY2gpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobHNyICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrKQorCQkJCWNvbnRpbnVlOworCisJCQl1YXJ0X2luc2VydF9jaGFyKHBvcnQsIGxzciwgU0MxNklTN1hYX0xTUl9PRV9CSVQsIGNoLAorCQkJCQkgZmxhZyk7CisJCX0KKwkJcnhsZW4gLT0gYnl0ZXNfcmVhZDsKKwl9CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCgmcG9ydC0+c3RhdGUtPnBvcnQpOworfQorCitzdGF0aWMgdm9pZCBzYzE2aXM3eHhfaGFuZGxlX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNjMTZpczd4eF9wb3J0ICpzID0gZGV2X2dldF9kcnZkYXRhKHBvcnQtPmRldik7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OworCXVuc2lnbmVkIGludCB0eGxlbiwgdG9fc2VuZCwgaTsKKworCWlmICh1bmxpa2VseShwb3J0LT54X2NoYXIpKSB7CisJCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9USFJfUkVHLCBwb3J0LT54X2NoYXIpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwkJcG9ydC0+eF9jaGFyID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHBvcnQpKQorCQlyZXR1cm47CisKKwkvKiBHZXQgbGVuZ3RoIG9mIGRhdGEgcGVuZGluZyBpbiBjaXJjdWxhciBidWZmZXIgKi8KKwl0b19zZW5kID0gdWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCk7CisJaWYgKGxpa2VseSh0b19zZW5kKSkgeworCQkvKiBMaW1pdCB0byBzaXplIG9mIFRYIEZJRk8gKi8KKwkJdHhsZW4gPSBzYzE2aXM3eHhfcG9ydF9yZWFkKHBvcnQsIFNDMTZJUzdYWF9UWExWTF9SRUcpOworCQl0b19zZW5kID0gKHRvX3NlbmQgPiB0eGxlbikgPyB0eGxlbiA6IHRvX3NlbmQ7CisKKwkJLyogQWRkIGRhdGEgdG8gc2VuZCAqLworCQlwb3J0LT5pY291bnQudHggKz0gdG9fc2VuZDsKKworCQkvKiBDb252ZXJ0IHRvIGxpbmVhciBidWZmZXIgKi8KKwkJZm9yIChpID0gMDsgaSA8IHRvX3NlbmQ7ICsraSkgeworCQkJcy0+YnVmW2ldID0geG1pdC0+YnVmW3htaXQtPnRhaWxdOworCQkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJfQorCQlyZWdjYWNoZV9jYWNoZV9ieXBhc3Mocy0+cmVnbWFwLCB0cnVlKTsKKwkJcmVnbWFwX3Jhd193cml0ZShzLT5yZWdtYXAsIFNDMTZJUzdYWF9USFJfUkVHLCBzLT5idWYsIHRvX3NlbmQpOworCQlyZWdjYWNoZV9jYWNoZV9ieXBhc3Mocy0+cmVnbWFwLCBmYWxzZSk7CisJfQorCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X3BvcnRfaXJxKHN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqcywgaW50IHBvcnRubykKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBbcG9ydG5vXS5wb3J0OworCisJZG8geworCQl1bnNpZ25lZCBpbnQgaWlyLCBtc3IsIHJ4bGVuOworCisJCWlpciA9IHNjMTZpczd4eF9wb3J0X3JlYWQocG9ydCwgU0MxNklTN1hYX0lJUl9SRUcpOworCQlpZiAoaWlyICYgU0MxNklTN1hYX0lJUl9OT19JTlRfQklUKQorCQkJYnJlYWs7CisKKwkJaWlyICY9IFNDMTZJUzdYWF9JSVJfSURfTUFTSzsKKworCQlzd2l0Y2ggKGlpcikgeworCQljYXNlIFNDMTZJUzdYWF9JSVJfUkRJX1NSQzoKKwkJY2FzZSBTQzE2SVM3WFhfSUlSX1JMU0VfU1JDOgorCQljYXNlIFNDMTZJUzdYWF9JSVJfUlRPSV9TUkM6CisJCWNhc2UgU0MxNklTN1hYX0lJUl9YT0ZGSV9TUkM6CisJCQlyeGxlbiA9IHNjMTZpczd4eF9wb3J0X3JlYWQocG9ydCwgU0MxNklTN1hYX1JYTFZMX1JFRyk7CisJCQlpZiAocnhsZW4pCisJCQkJc2MxNmlzN3h4X2hhbmRsZV9yeChwb3J0LCByeGxlbiwgaWlyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0MxNklTN1hYX0lJUl9DVFNSVFNfU1JDOgorCQkJbXNyID0gc2MxNmlzN3h4X3BvcnRfcmVhZChwb3J0LCBTQzE2SVM3WFhfTVNSX1JFRyk7CisJCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKHBvcnQsCisJCQkJCSAgICAgICAhIShtc3IgJiBTQzE2SVM3WFhfTVNSX0NUU19CSVQpKTsKKwkJCWJyZWFrOworCQljYXNlIFNDMTZJUzdYWF9JSVJfVEhSSV9TUkM6CisJCQltdXRleF9sb2NrKCZzLT5tdXRleCk7CisJCQlzYzE2aXM3eHhfaGFuZGxlX3R4KHBvcnQpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocG9ydC0+ZGV2LAorCQkJCQkgICAgIlBvcnQgJWk6IFVuZXhwZWN0ZWQgaW50ZXJydXB0OiAleCIsCisJCQkJCSAgICBwb3J0LT5saW5lLCBpaXIpOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgxKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNjMTZpczd4eF9pc3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqcyA9IChzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKilkZXZfaWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+dWFydC5ucjsgKytpKQorCQlzYzE2aXM3eHhfcG9ydF9pcnEocywgaSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNjMTZpczd4eF93cV9wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHNjMTZpczd4eF9vbmUgKm9uZSA9IHRvX3NjMTZpczd4eF9vbmUod3MsIHR4X3dvcmspOworCXN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqcyA9IGRldl9nZXRfZHJ2ZGF0YShvbmUtPnBvcnQuZGV2KTsKKworCW11dGV4X2xvY2soJnMtPm11dGV4KTsKKwlzYzE2aXM3eHhfaGFuZGxlX3R4KCZvbmUtPnBvcnQpOworCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBzYzE2aXM3eHhfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0KiBwb3J0KQoreworCXN0cnVjdCBzYzE2aXM3eHhfb25lICpvbmUgPSB0b19zYzE2aXM3eHhfb25lKHBvcnQsIHBvcnQpOworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZvbmUtPnBvcnQuc3RhdGUtPnhtaXQ7CisKKwkvKiBoYW5kbGUgcnM0ODUgKi8KKwlpZiAob25lLT5yczQ4NS5mbGFncyAmIFNFUl9SUzQ4NV9FTkFCTEVEKSB7CisJCS8qIGRvIG5vdGhpbmcgaWYgY3VycmVudCB0eCBub3QgeWV0IGNvbXBsZXRlZCAqLworCQlpbnQgbHNyID0gc2MxNmlzN3h4X3BvcnRfcmVhZChwb3J0LCBTQzE2SVM3WFhfTFNSX1JFRyk7CisJCWlmICghKGxzciAmIFNDMTZJUzdYWF9MU1JfVEVNVF9CSVQpKQorCQkJcmV0dXJuOworCisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgJiYKKwkJICAgIChvbmUtPnJzNDg1LmRlbGF5X3J0c19hZnRlcl9zZW5kID4gMCkpCisJCQltZGVsYXkob25lLT5yczQ4NS5kZWxheV9ydHNfYWZ0ZXJfc2VuZCk7CisJfQorCisJc2MxNmlzN3h4X3BvcnRfdXBkYXRlKHBvcnQsIFNDMTZJUzdYWF9JRVJfUkVHLAorCQkJICAgICAgU0MxNklTN1hYX0lFUl9USFJJX0JJVCwKKwkJCSAgICAgIDApOworfQorCitzdGF0aWMgdm9pZCBzYzE2aXM3eHhfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0KiBwb3J0KQoreworCXN0cnVjdCBzYzE2aXM3eHhfb25lICpvbmUgPSB0b19zYzE2aXM3eHhfb25lKHBvcnQsIHBvcnQpOworCisJb25lLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgJj0gflNDMTZJUzdYWF9MU1JfRFJfQklUOworCXNjMTZpczd4eF9wb3J0X3VwZGF0ZShwb3J0LCBTQzE2SVM3WFhfSUVSX1JFRywKKwkJCSAgICAgIFNDMTZJUzdYWF9MU1JfRFJfQklULAorCQkJICAgICAgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjMTZpczd4eF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYzE2aXM3eHhfb25lICpvbmUgPSB0b19zYzE2aXM3eHhfb25lKHBvcnQsIHBvcnQpOworCisJLyogaGFuZGxlIHJzNDg1ICovCisJaWYgKChvbmUtPnJzNDg1LmZsYWdzICYgU0VSX1JTNDg1X0VOQUJMRUQpICYmCisJICAgIChvbmUtPnJzNDg1LmRlbGF5X3J0c19iZWZvcmVfc2VuZCA+IDApKSB7CisJCW1kZWxheShvbmUtPnJzNDg1LmRlbGF5X3J0c19iZWZvcmVfc2VuZCk7CisJfQorCisJaWYgKCF3b3JrX3BlbmRpbmcoJm9uZS0+dHhfd29yaykpCisJCXNjaGVkdWxlX3dvcmsoJm9uZS0+dHhfd29yayk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2MxNmlzN3h4X3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IGx2bCwgbHNyOworCisJbHZsID0gc2MxNmlzN3h4X3BvcnRfcmVhZChwb3J0LCBTQzE2SVM3WFhfVFhMVkxfUkVHKTsKKwlsc3IgPSBzYzE2aXM3eHhfcG9ydF9yZWFkKHBvcnQsIFNDMTZJUzdYWF9MU1JfUkVHKTsKKworCXJldHVybiAoKGxzciAmIFNDMTZJUzdYWF9MU1JfVEhSRV9CSVQpICYmICFsdmwpID8gVElPQ1NFUl9URU1UIDogMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzYzE2aXM3eHhfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJLyogRENEIGFuZCBEU1IgYXJlIG5vdCB3aXJlZCBhbmQgQ1RTL1JUUyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkKKwkgKiBzbyBqdXN0IGluZGljYXRlIERTUiBhbmQgQ0FSIGFzc2VydGVkCisJICovCisJcmV0dXJuIFRJT0NNX0RTUiB8IFRJT0NNX0NBUjsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X21kX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X29uZSAqb25lID0gdG9fc2MxNmlzN3h4X29uZSh3cywgbWRfd29yayk7CisKKwlzYzE2aXM3eHhfcG9ydF91cGRhdGUoJm9uZS0+cG9ydCwgU0MxNklTN1hYX01DUl9SRUcsCisJCQkgICAgICBTQzE2SVM3WFhfTUNSX0xPT1BfQklULAorCQkJICAgICAgKG9uZS0+cG9ydC5tY3RybCAmIFRJT0NNX0xPT1ApID8KKwkJCQkgICAgICBTQzE2SVM3WFhfTUNSX0xPT1BfQklUIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjMTZpczd4eF9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQoreworCXN0cnVjdCBzYzE2aXM3eHhfb25lICpvbmUgPSB0b19zYzE2aXM3eHhfb25lKHBvcnQsIHBvcnQpOworCisJc2NoZWR1bGVfd29yaygmb25lLT5tZF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc2MxNmlzN3h4X3BvcnRfdXBkYXRlKHBvcnQsIFNDMTZJUzdYWF9MQ1JfUkVHLAorCQkJICAgICAgU0MxNklTN1hYX0xDUl9UWEJSRUFLX0JJVCwKKwkJCSAgICAgIGJyZWFrX3N0YXRlID8gU0MxNklTN1hYX0xDUl9UWEJSRUFLX0JJVCA6IDApOworfQorCitzdGF0aWMgdm9pZCBzYzE2aXM3eHhfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqcyA9IGRldl9nZXRfZHJ2ZGF0YShwb3J0LT5kZXYpOworCXVuc2lnbmVkIGludCBsY3IsIGZsb3cgPSAwOworCWludCBiYXVkOworCisJLyogTWFzayB0ZXJtaW9zIGNhcGFiaWxpdGllcyB3ZSBkb24ndCBzdXBwb3J0ICovCisJdGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOworCisJLyogV29yZCBzaXplICovCisJc3dpdGNoICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJbGNyID0gU0MxNklTN1hYX0xDUl9XT1JEX0xFTl81OworCQlicmVhazsKKwljYXNlIENTNjoKKwkJbGNyID0gU0MxNklTN1hYX0xDUl9XT1JEX0xFTl82OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJbGNyID0gU0MxNklTN1hYX0xDUl9XT1JEX0xFTl83OworCQlicmVhazsKKwljYXNlIENTODoKKwkJbGNyID0gU0MxNklTN1hYX0xDUl9XT1JEX0xFTl84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsY3IgPSBTQzE2SVM3WFhfTENSX1dPUkRfTEVOXzg7CisJCXRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNTSVpFOworCQl0ZXJtaW9zLT5jX2NmbGFnIHw9IENTODsKKwkJYnJlYWs7CisJfQorCisJLyogUGFyaXR5ICovCisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpIHsKKwkJbGNyIHw9IFNDMTZJUzdYWF9MQ1JfUEFSSVRZX0JJVDsKKwkJaWYgKCEodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkpCisJCQlsY3IgfD0gU0MxNklTN1hYX0xDUl9FVkVOUEFSSVRZX0JJVDsKKwl9CisKKwkvKiBTdG9wIGJpdHMgKi8KKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENTVE9QQikKKwkJbGNyIHw9IFNDMTZJUzdYWF9MQ1JfU1RPUExFTl9CSVQ7IC8qIDIgc3RvcHMgKi8KKworCS8qIFNldCByZWFkIHN0YXR1cyBtYXNrICovCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IFNDMTZJUzdYWF9MU1JfT0VfQklUOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gU0MxNklTN1hYX0xTUl9QRV9CSVQgfAorCQkJCQkgIFNDMTZJUzdYWF9MU1JfRkVfQklUOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKEJSS0lOVCB8IFBBUk1SSykpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gU0MxNklTN1hYX0xTUl9CSV9CSVQ7CisKKwkvKiBTZXQgc3RhdHVzIGlnbm9yZSBtYXNrICovCisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTkJSSykKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFNDMTZJUzdYWF9MU1JfQklfQklUOworCWlmICghKHRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkpCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBTQzE2SVM3WFhfTFNSX0JSS19FUlJPUl9NQVNLOworCisJc2MxNmlzN3h4X3BvcnRfd3JpdGUocG9ydCwgU0MxNklTN1hYX0xDUl9SRUcsCisJCQkgICAgIFNDMTZJUzdYWF9MQ1JfQ09ORl9NT0RFX0IpOworCisJLyogQ29uZmlndXJlIGZsb3cgY29udHJvbCAqLworCXJlZ2NhY2hlX2NhY2hlX2J5cGFzcyhzLT5yZWdtYXAsIHRydWUpOworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9YT04xX1JFRywgdGVybWlvcy0+Y19jY1tWU1RBUlRdKTsKKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfWE9GRjFfUkVHLCB0ZXJtaW9zLT5jX2NjW1ZTVE9QXSk7CisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKQorCQlmbG93IHw9IFNDMTZJUzdYWF9FRlJfQVVUT0NUU19CSVQgfAorCQkJU0MxNklTN1hYX0VGUl9BVVRPUlRTX0JJVDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElYT04pCisJCWZsb3cgfD0gU0MxNklTN1hYX0VGUl9TV0ZMT1czX0JJVDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElYT0ZGKQorCQlmbG93IHw9IFNDMTZJUzdYWF9FRlJfU1dGTE9XMV9CSVQ7CisKKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfRUZSX1JFRywgZmxvdyk7CisJcmVnY2FjaGVfY2FjaGVfYnlwYXNzKHMtPnJlZ21hcCwgZmFsc2UpOworCisJLyogVXBkYXRlIExDUiByZWdpc3RlciAqLworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9MQ1JfUkVHLCBsY3IpOworCisJLyogR2V0IGJhdWQgcmF0ZSBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiAqLworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLAorCQkJCSAgcG9ydC0+dWFydGNsayAvIDE2IC8gNCAvIDB4ZmZmZiwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAxNik7CisKKwkvKiBTZXR1cCBiYXVkcmF0ZSBnZW5lcmF0b3IgKi8KKwliYXVkID0gc2MxNmlzN3h4X3NldF9iYXVkKHBvcnQsIGJhdWQpOworCisJLyogVXBkYXRlIHRpbWVvdXQgYWNjb3JkaW5nIHRvIG5ldyBiYXVkIHJhdGUgKi8KKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIGJhdWQpOworfQorCisjaWYgZGVmaW5lZChUSU9DU1JTNDg1KSAmJiBkZWZpbmVkKFRJT0NHUlM0ODUpCitzdGF0aWMgdm9pZCBzYzE2aXM3eHhfY29uZmlnX3JzNDg1KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJICAgc3RydWN0IHNlcmlhbF9yczQ4NSAqcnM0ODUpCit7CisJc3RydWN0IHNjMTZpczd4eF9vbmUgKm9uZSA9IHRvX3NjMTZpczd4eF9vbmUocG9ydCwgcG9ydCk7CisKKwlvbmUtPnJzNDg1ID0gKnJzNDg1OworCisJaWYgKG9uZS0+cnM0ODUuZmxhZ3MgJiBTRVJfUlM0ODVfRU5BQkxFRCkgeworCQlzYzE2aXM3eHhfcG9ydF91cGRhdGUocG9ydCwgU0MxNklTN1hYX0VGQ1JfUkVHLAorCQkJCSAgICAgIFNDMTZJUzdYWF9FRkNSX0FVVE9fUlM0ODVfQklULAorCQkJCSAgICAgIFNDMTZJUzdYWF9FRkNSX0FVVE9fUlM0ODVfQklUKTsKKwl9IGVsc2UgeworCQlzYzE2aXM3eHhfcG9ydF91cGRhdGUocG9ydCwgU0MxNklTN1hYX0VGQ1JfUkVHLAorCQkJCSAgICAgIFNDMTZJUzdYWF9FRkNSX0FVVE9fUlM0ODVfQklULAorCQkJCSAgICAgIDApOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNjMTZpczd4eF9pb2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisjaWYgZGVmaW5lZChUSU9DU1JTNDg1KSAmJiBkZWZpbmVkKFRJT0NHUlM0ODUpCisJc3RydWN0IHNlcmlhbF9yczQ4NSByczQ4NTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DU1JTNDg1OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnJzNDg1LCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyczQ4NSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJc2MxNmlzN3h4X2NvbmZpZ19yczQ4NShwb3J0LCAmcnM0ODUpOworCQlyZXR1cm4gMDsKKwljYXNlIFRJT0NHUlM0ODU6CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJCSAmKHRvX3NjMTZpczd4eF9vbmUocG9ydCwgcG9ydCktPnJzNDg1KSwKKwkJCQkgc2l6ZW9mKHJzNDg1KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHNjMTZpczd4eF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNjMTZpczd4eF9wb3J0ICpzID0gZGV2X2dldF9kcnZkYXRhKHBvcnQtPmRldik7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXNjMTZpczd4eF9wb3dlcihwb3J0LCAxKTsKKworCS8qIFJlc2V0IEZJRk9zKi8KKwl2YWwgPSBTQzE2SVM3WFhfRkNSX1JYUkVTRVRfQklUIHwgU0MxNklTN1hYX0ZDUl9UWFJFU0VUX0JJVDsKKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfRkNSX1JFRywgdmFsKTsKKwl1ZGVsYXkoNSk7CisJc2MxNmlzN3h4X3BvcnRfd3JpdGUocG9ydCwgU0MxNklTN1hYX0ZDUl9SRUcsCisJCQkgICAgIFNDMTZJUzdYWF9GQ1JfRklGT19CSVQpOworCisJLyogRW5hYmxlIEVGUiAqLworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9MQ1JfUkVHLAorCQkJICAgICBTQzE2SVM3WFhfTENSX0NPTkZfTU9ERV9CKTsKKworCXJlZ2NhY2hlX2NhY2hlX2J5cGFzcyhzLT5yZWdtYXAsIHRydWUpOworCisJLyogRW5hYmxlIHdyaXRlIGFjY2VzcyB0byBlbmhhbmNlZCBmZWF0dXJlcyBhbmQgaW50ZXJuYWwgY2xvY2sgZGl2ICovCisJc2MxNmlzN3h4X3BvcnRfd3JpdGUocG9ydCwgU0MxNklTN1hYX0VGUl9SRUcsCisJCQkgICAgIFNDMTZJUzdYWF9FRlJfRU5BQkxFX0JJVCk7CisKKwkvKiBFbmFibGUgVENSL1RMUiAqLworCXNjMTZpczd4eF9wb3J0X3VwZGF0ZShwb3J0LCBTQzE2SVM3WFhfTUNSX1JFRywKKwkJCSAgICAgIFNDMTZJUzdYWF9NQ1JfVENSVExSX0JJVCwKKwkJCSAgICAgIFNDMTZJUzdYWF9NQ1JfVENSVExSX0JJVCk7CisKKwkvKiBDb25maWd1cmUgZmxvdyBjb250cm9sIGxldmVscyAqLworCS8qIEZsb3cgY29udHJvbCBoYWx0IGxldmVsIDQ4LCByZXN1bWUgbGV2ZWwgMjQgKi8KKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfVENSX1JFRywKKwkJCSAgICAgU0MxNklTN1hYX1RDUl9SWF9SRVNVTUUoMjQpIHwKKwkJCSAgICAgU0MxNklTN1hYX1RDUl9SWF9IQUxUKDQ4KSk7CisKKwlyZWdjYWNoZV9jYWNoZV9ieXBhc3Mocy0+cmVnbWFwLCBmYWxzZSk7CisKKwkvKiBOb3csIGluaXRpYWxpemUgdGhlIFVBUlQgKi8KKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfTENSX1JFRywgU0MxNklTN1hYX0xDUl9XT1JEX0xFTl84KTsKKworCS8qIEVuYWJsZSB0aGUgUnggYW5kIFR4IEZJRk8gKi8KKwlzYzE2aXM3eHhfcG9ydF91cGRhdGUocG9ydCwgU0MxNklTN1hYX0VGQ1JfUkVHLAorCQkJICAgICAgU0MxNklTN1hYX0VGQ1JfUlhESVNBQkxFX0JJVCB8CisJCQkgICAgICBTQzE2SVM3WFhfRUZDUl9UWERJU0FCTEVfQklULAorCQkJICAgICAgMCk7CisKKwkvKiBFbmFibGUgUlgsIFRYLCBDVFMgY2hhbmdlIGludGVycnVwdHMgKi8KKwl2YWwgPSBTQzE2SVM3WFhfSUVSX1JESV9CSVQgfCBTQzE2SVM3WFhfSUVSX1RIUklfQklUIHwKKwkgICAgICBTQzE2SVM3WFhfSUVSX0NUU0lfQklUOworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9JRVJfUkVHLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNjMTZpczd4eF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlzYzE2aXM3eHhfcG9ydF93cml0ZShwb3J0LCBTQzE2SVM3WFhfSUVSX1JFRywgMCk7CisJLyogRGlzYWJsZSBUWC9SWCAqLworCXNjMTZpczd4eF9wb3J0X3dyaXRlKHBvcnQsIFNDMTZJUzdYWF9FRkNSX1JFRywKKwkJCSAgICAgU0MxNklTN1hYX0VGQ1JfUlhESVNBQkxFX0JJVCB8CisJCQkgICAgIFNDMTZJUzdYWF9FRkNSX1RYRElTQUJMRV9CSVQpOworCisJc2MxNmlzN3h4X3Bvd2VyKHBvcnQsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2MxNmlzN3h4X3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKnMgPSBkZXZfZ2V0X2RydmRhdGEocG9ydC0+ZGV2KTsKKworCXJldHVybiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDMTZJUzdYWCkgPyBzLT5kZXZ0eXBlLT5uYW1lIDogTlVMTDsKK30KKworc3RhdGljIGludCBzYzE2aXM3eHhfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJLyogRG8gbm90aGluZyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzYzE2aXM3eHhfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFVBUlRfQ09ORklHX1RZUEUpCisJCXBvcnQtPnR5cGUgPSBQT1JUX1NDMTZJUzdYWDsKK30KKworc3RhdGljIGludCBzYzE2aXM3eHhfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnMpCit7CisJaWYgKChzLT50eXBlICE9IFBPUlRfVU5LTk9XTikgJiYgKHMtPnR5cGUgIT0gUE9SVF9TQzE2SVM3WFgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocy0+aXJxICE9IHBvcnQtPmlycSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X3BtKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0ZSwKKwkJCSB1bnNpZ25lZCBpbnQgb2xkc3RhdGUpCit7CisJc2MxNmlzN3h4X3Bvd2VyKHBvcnQsIChzdGF0ZSA9PSBVQVJUX1BNX1NUQVRFX09OKSA/IDEgOiAwKTsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X251bGxfdm9pZChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIERvIG5vdGhpbmcgKi8KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1YXJ0X29wcyBzYzE2aXM3eHhfb3BzID0geworCS50eF9lbXB0eQk9IHNjMTZpczd4eF90eF9lbXB0eSwKKwkuc2V0X21jdHJsCT0gc2MxNmlzN3h4X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gc2MxNmlzN3h4X2dldF9tY3RybCwKKwkuc3RvcF90eAk9IHNjMTZpczd4eF9zdG9wX3R4LAorCS5zdGFydF90eAk9IHNjMTZpczd4eF9zdGFydF90eCwKKwkuc3RvcF9yeAk9IHNjMTZpczd4eF9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBzYzE2aXM3eHhfbnVsbF92b2lkLAorCS5icmVha19jdGwJPSBzYzE2aXM3eHhfYnJlYWtfY3RsLAorCS5zdGFydHVwCT0gc2MxNmlzN3h4X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc2MxNmlzN3h4X3NodXRkb3duLAorCS5zZXRfdGVybWlvcwk9IHNjMTZpczd4eF9zZXRfdGVybWlvcywKKwkudHlwZQkJPSBzYzE2aXM3eHhfdHlwZSwKKwkucmVxdWVzdF9wb3J0CT0gc2MxNmlzN3h4X3JlcXVlc3RfcG9ydCwKKwkucmVsZWFzZV9wb3J0CT0gc2MxNmlzN3h4X251bGxfdm9pZCwKKwkuY29uZmlnX3BvcnQJPSBzYzE2aXM3eHhfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gc2MxNmlzN3h4X3ZlcmlmeV9wb3J0LAorCS5pb2N0bAkJPSBzYzE2aXM3eHhfaW9jdGwsCisJLnBtCQk9IHNjMTZpczd4eF9wbSwKK307CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorc3RhdGljIGludCBzYzE2aXM3eHhfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IHNjMTZpczd4eF9wb3J0ICpzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBzYzE2aXM3eHhfcG9ydCwKKwkJCQkJCWdwaW8pOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cFswXS5wb3J0OworCisJdmFsID0gc2MxNmlzN3h4X3BvcnRfcmVhZChwb3J0LCBTQzE2SVM3WFhfSU9TVEFURV9SRUcpOworCisJcmV0dXJuICEhKHZhbCAmIEJJVChvZmZzZXQpKTsKK30KKworc3RhdGljIHZvaWQgc2MxNmlzN3h4X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKnMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHNjMTZpczd4eF9wb3J0LAorCQkJCQkJZ3Bpbyk7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wWzBdLnBvcnQ7CisKKwlzYzE2aXM3eHhfcG9ydF91cGRhdGUocG9ydCwgU0MxNklTN1hYX0lPU1RBVEVfUkVHLCBCSVQob2Zmc2V0KSwKKwkJCSAgICAgIHZhbCA/IEJJVChvZmZzZXQpIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgc2MxNmlzN3h4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCSAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQsCisJCQkJCQlncGlvKTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBbMF0ucG9ydDsKKworCXNjMTZpczd4eF9wb3J0X3VwZGF0ZShwb3J0LCBTQzE2SVM3WFhfSU9ESVJfUkVHLCBCSVQob2Zmc2V0KSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYzE2aXM3eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCSAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc2MxNmlzN3h4X3BvcnQgKnMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHNjMTZpczd4eF9wb3J0LAorCQkJCQkJZ3Bpbyk7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wWzBdLnBvcnQ7CisKKwlzYzE2aXM3eHhfcG9ydF91cGRhdGUocG9ydCwgU0MxNklTN1hYX0lPU1RBVEVfUkVHLCBCSVQob2Zmc2V0KSwKKwkJCSAgICAgIHZhbCA/IEJJVChvZmZzZXQpIDogMCk7CisJc2MxNmlzN3h4X3BvcnRfdXBkYXRlKHBvcnQsIFNDMTZJUzdYWF9JT0RJUl9SRUcsIEJJVChvZmZzZXQpLAorCQkJICAgICAgQklUKG9mZnNldCkpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzYzE2aXM3eHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IHNjMTZpczd4eF9kZXZ0eXBlICpkZXZ0eXBlLAorCQkJICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwLCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgZnJlcSwgKnBmcmVxID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBzYzE2aXM3eHhfcG9ydCAqczsKKworCWlmIChJU19FUlIocmVnbWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVnbWFwKTsKKworCS8qIEFsbG9jIHBvcnQgc3RydWN0dXJlICovCisJcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcykgKworCQkJIHNpemVvZihzdHJ1Y3Qgc2MxNmlzN3h4X29uZSkgKiBkZXZ0eXBlLT5ucl91YXJ0LAorCQkJIEdGUF9LRVJORUwpOworCWlmICghcykgeworCQlkZXZfZXJyKGRldiwgIkVycm9yIGFsbG9jYXRpbmcgcG9ydCBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJaWYgKHBmcmVxKQorCQkJZnJlcSA9ICpwZnJlcTsKKwkJZWxzZQorCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwl9IGVsc2UgeworCQlmcmVxID0gY2xrX2dldF9yYXRlKGNsayk7CisJfQorCisJcy0+cmVnbWFwID0gcmVnbWFwOworCXMtPmRldnR5cGUgPSBkZXZ0eXBlOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHMpOworCisJLyogUmVnaXN0ZXIgVUFSVCBkcml2ZXIgKi8KKwlzLT51YXJ0Lm93bmVyCQk9IFRISVNfTU9EVUxFOworCXMtPnVhcnQuZGV2X25hbWUJPSAidHR5U0MiOworCXMtPnVhcnQubnIJCT0gZGV2dHlwZS0+bnJfdWFydDsKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmcy0+dWFydCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIlJlZ2lzdGVyaW5nIFVBUlQgZHJpdmVyIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0X2NsazsKKwl9CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCWlmIChkZXZ0eXBlLT5ucl9ncGlvKSB7CisJCS8qIFNldHVwIEdQSU8gY290cm9sbGVyICovCisJCXMtPmdwaW8ub3duZXIJCSA9IFRISVNfTU9EVUxFOworCQlzLT5ncGlvLmRldgkJID0gZGV2OworCQlzLT5ncGlvLmxhYmVsCQkgPSBkZXZfbmFtZShkZXYpOworCQlzLT5ncGlvLmRpcmVjdGlvbl9pbnB1dAkgPSBzYzE2aXM3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJCXMtPmdwaW8uZ2V0CQkgPSBzYzE2aXM3eHhfZ3Bpb19nZXQ7CisJCXMtPmdwaW8uZGlyZWN0aW9uX291dHB1dCA9IHNjMTZpczd4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJCXMtPmdwaW8uc2V0CQkgPSBzYzE2aXM3eHhfZ3Bpb19zZXQ7CisJCXMtPmdwaW8uYmFzZQkJID0gLTE7CisJCXMtPmdwaW8ubmdwaW8JCSA9IGRldnR5cGUtPm5yX2dwaW87CisJCXMtPmdwaW8uY2FuX3NsZWVwCSA9IDE7CisJCXJldCA9IGdwaW9jaGlwX2FkZCgmcy0+Z3Bpbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91YXJ0OworCX0KKyNlbmRpZgorCisJbXV0ZXhfaW5pdCgmcy0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IGRldnR5cGUtPm5yX3VhcnQ7ICsraSkgeworCQkvKiBJbml0aWFsaXplIHBvcnQgZGF0YSAqLworCQlzLT5wW2ldLnBvcnQubGluZQk9IGk7CisJCXMtPnBbaV0ucG9ydC5kZXYJPSBkZXY7CisJCXMtPnBbaV0ucG9ydC5pcnEJPSBpcnE7CisJCXMtPnBbaV0ucG9ydC50eXBlCT0gUE9SVF9TQzE2SVM3WFg7CisJCXMtPnBbaV0ucG9ydC5maWZvc2l6ZQk9IFNDMTZJUzdYWF9GSUZPX1NJWkU7CisJCXMtPnBbaV0ucG9ydC5mbGFncwk9IFVQRl9GSVhFRF9UWVBFIHwgVVBGX0xPV19MQVRFTkNZOworCQlzLT5wW2ldLnBvcnQuaW90eXBlCT0gVVBJT19QT1JUOworCQlzLT5wW2ldLnBvcnQudWFydGNsawk9IGZyZXE7CisJCXMtPnBbaV0ucG9ydC5vcHMJPSAmc2MxNmlzN3h4X29wczsKKwkJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQlzYzE2aXM3eHhfcG9ydF93cml0ZSgmcy0+cFtpXS5wb3J0LCBTQzE2SVM3WFhfSUVSX1JFRywgMCk7CisJCS8qIERpc2FibGUgVFgvUlggKi8KKwkJc2MxNmlzN3h4X3BvcnRfd3JpdGUoJnMtPnBbaV0ucG9ydCwgU0MxNklTN1hYX0VGQ1JfUkVHLAorCQkJCSAgICAgU0MxNklTN1hYX0VGQ1JfUlhESVNBQkxFX0JJVCB8CisJCQkJICAgICBTQzE2SVM3WFhfRUZDUl9UWERJU0FCTEVfQklUKTsKKwkJLyogSW5pdGlhbGl6ZSBxdWV1ZSBmb3Igc3RhcnQgVFggKi8KKwkJSU5JVF9XT1JLKCZzLT5wW2ldLnR4X3dvcmssIHNjMTZpczd4eF93cV9wcm9jKTsKKwkJLyogSW5pdGlhbGl6ZSBxdWV1ZSBmb3IgY2hhbmdpbmcgbW9kZSAqLworCQlJTklUX1dPUksoJnMtPnBbaV0ubWRfd29yaywgc2MxNmlzN3h4X21kX3Byb2MpOworCQkvKiBSZWdpc3RlciBwb3J0ICovCisJCXVhcnRfYWRkX29uZV9wb3J0KCZzLT51YXJ0LCAmcy0+cFtpXS5wb3J0KTsKKwkJLyogR28gdG8gc3VzcGVuZCBtb2RlICovCisJCXNjMTZpczd4eF9wb3dlcigmcy0+cFtpXS5wb3J0LCAwKTsKKwl9CisKKwkvKiBTZXR1cCBpbnRlcnJ1cHQgKi8KKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCBOVUxMLCBzYzE2aXM3eHhfaXN0LAorCQkJCQlJUlFGX09ORVNIT1QgfCBmbGFncywgZGV2X25hbWUoZGV2KSwgcyk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJbXV0ZXhfZGVzdHJveSgmcy0+bXV0ZXgpOworCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKwlpZiAoZGV2dHlwZS0+bnJfZ3BpbykKKwkJV0FSTl9PTihncGlvY2hpcF9yZW1vdmUoJnMtPmdwaW8pKTsKKworb3V0X3VhcnQ6CisjZW5kaWYKKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzLT51YXJ0KTsKKworb3V0X2NsazoKKwlpZiAoIUlTX0VSUihzLT5jbGspKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocy0+Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2MxNmlzN3h4X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNjMTZpczd4eF9wb3J0ICpzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGksIHJldCA9IDA7CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCWlmIChzLT5kZXZ0eXBlLT5ucl9ncGlvKSB7CisJCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmcy0+Z3Bpbyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IHMtPnVhcnQubnI7IGkrKykgeworCQljYW5jZWxfd29ya19zeW5jKCZzLT5wW2ldLnR4X3dvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZzLT5wW2ldLm1kX3dvcmspOworCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmcy0+dWFydCwgJnMtPnBbaV0ucG9ydCk7CisJCXNjMTZpczd4eF9wb3dlcigmcy0+cFtpXS5wb3J0LCAwKTsKKwl9CisKKwltdXRleF9kZXN0cm95KCZzLT5tdXRleCk7CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmcy0+dWFydCk7CisJaWYgKCFJU19FUlIocy0+Y2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHMtPmNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBzYzE2aXM3eHhfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzQwIiwJLmRhdGEgPSAmc2MxNmlzNzR4X2RldnR5cGUsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzQxIiwJLmRhdGEgPSAmc2MxNmlzNzR4X2RldnR5cGUsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzUwIiwJLmRhdGEgPSAmc2MxNmlzNzUwX2RldnR5cGUsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzUyIiwJLmRhdGEgPSAmc2MxNmlzNzUyX2RldnR5cGUsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzYwIiwJLmRhdGEgPSAmc2MxNmlzNzYwX2RldnR5cGUsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJueHAsc2MxNmlzNzYyIiwJLmRhdGEgPSAmc2MxNmlzNzYyX2RldnR5cGUsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2MxNmlzN3h4X2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdjZmcgPSB7CisJLnJlZ19iaXRzID0gNywKKwkucGFkX2JpdHMgPSAxLAorCS52YWxfYml0cyA9IDgsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJLnZvbGF0aWxlX3JlZyA9IHNjMTZpczd4eF9yZWdtYXBfdm9sYXRpbGUsCisJLnByZWNpb3VzX3JlZyA9IHNjMTZpczd4eF9yZWdtYXBfcHJlY2lvdXMsCit9OworCitzdGF0aWMgaW50IHNjMTZpczd4eF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNjMTZpczd4eF9kZXZ0eXBlICpkZXZ0eXBlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKworCWlmIChpMmMtPmRldi5vZl9ub2RlKSB7CisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KKwkJCQlvZl9tYXRjaF9kZXZpY2Uoc2MxNmlzN3h4X2R0X2lkcywgJmkyYy0+ZGV2KTsKKworCQlkZXZ0eXBlID0gKHN0cnVjdCBzYzE2aXM3eHhfZGV2dHlwZSAqKW9mX2lkLT5kYXRhOworCX0gZWxzZSB7CisJCWRldnR5cGUgPSAoc3RydWN0IHNjMTZpczd4eF9kZXZ0eXBlICopaWQtPmRyaXZlcl9kYXRhOworCQlmbGFncyA9IElSUUZfVFJJR0dFUl9GQUxMSU5HOworCX0KKworCXJlZ2NmZy5tYXhfcmVnaXN0ZXIgPSAoMHhmIDw8IFNDMTZJUzdYWF9SRUdfU0hJRlQpIHwKKwkJCSAgICAgIChkZXZ0eXBlLT5ucl91YXJ0IC0gMSk7CisJcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmcmVnY2ZnKTsKKworCXJldHVybiBzYzE2aXM3eHhfcHJvYmUoJmkyYy0+ZGV2LCBkZXZ0eXBlLCByZWdtYXAsIGkyYy0+aXJxLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgc2MxNmlzN3h4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gc2MxNmlzN3h4X3JlbW92ZSgmY2xpZW50LT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2MxNmlzN3h4X2kyY19pZF90YWJsZVtdID0geworCXsgInNjMTZpczc0eCIsCShrZXJuZWxfdWxvbmdfdCkmc2MxNmlzNzR4X2RldnR5cGUsIH0sCisJeyAic2MxNmlzNzUwIiwJKGtlcm5lbF91bG9uZ190KSZzYzE2aXM3NTBfZGV2dHlwZSwgfSwKKwl7ICJzYzE2aXM3NTIiLAkoa2VybmVsX3Vsb25nX3QpJnNjMTZpczc1Ml9kZXZ0eXBlLCB9LAorCXsgInNjMTZpczc2MCIsCShrZXJuZWxfdWxvbmdfdCkmc2MxNmlzNzYwX2RldnR5cGUsIH0sCisJeyAic2MxNmlzNzYyIiwJKGtlcm5lbF91bG9uZ190KSZzYzE2aXM3NjJfZGV2dHlwZSwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2MxNmlzN3h4X2kyY19pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzYzE2aXM3eHhfaTJjX3VhcnRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IFNDMTZJUzdYWF9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZQk9IG9mX21hdGNoX3B0cihzYzE2aXM3eHhfZHRfaWRzKSwKKwl9LAorCS5wcm9iZQkJPSBzYzE2aXM3eHhfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gc2MxNmlzN3h4X2kyY19yZW1vdmUsCisJLmlkX3RhYmxlCT0gc2MxNmlzN3h4X2kyY19pZF90YWJsZSwKK307Cittb2R1bGVfaTJjX2RyaXZlcihzYzE2aXM3eHhfaTJjX3VhcnRfZHJpdmVyKTsKK01PRFVMRV9BTElBUygiaTJjOnNjMTZpczd4eCIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb24gUmluZ2xlIDxqcmluZ2xlQGdyaWRwb2ludC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNDMTZJUzdYWCBzZXJpYWwgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2NjbnhwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2NjbnhwLmMKaW5kZXggYTQ0N2Y3MS4uNTQ0M2I0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NjY254cC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zY2NueHAuYwpAQCAtNDc0LDkgKzQ3NCw3IEBACiAJc2NjbnhwX2hhbmRsZV9ldmVudHMocyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCF0aW1lcl9wZW5kaW5nKCZzLT50aW1lcikpCi0JCW1vZF90aW1lcigmcy0+dGltZXIsIGppZmZpZXMgKwotCQkJICB1c2Vjc190b19qaWZmaWVzKHMtPnBkYXRhLnBvbGxfdGltZV91cykpOworCW1vZF90aW1lcigmcy0+dGltZXIsIGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKHMtPnBkYXRhLnBvbGxfdGltZV91cykpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2NjbnhwX2lzdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC02NzQsNiArNjcyLDggQEAKIAlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgPSAwOwogCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOQlJLKQogCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gU1JfQlJLOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gU1JfUEU7CiAJaWYgKCEodGVybWlvcy0+Y19jZmxhZyAmIENSRUFEKSkKIAkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFNSX1BFIHwgU1JfT1ZSIHwgU1JfRkUgfCBTUl9CUks7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggYjY4NTUwZC4uZmJmNmM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTE3NCw4ICsxNzQsMTIgQEAKIAkJCWlmICh0dHktPnRlcm1pb3MuY19jZmxhZyAmIENCQVVEKQogCQkJCXVhcnRfc2V0X21jdHJsKHVwb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOwogCQl9Ci0KLQkJaWYgKHR0eV9wb3J0X2N0c19lbmFibGVkKHBvcnQpKSB7CisJCS8qCisJCSAqIGlmIGh3IHN1cHBvcnQgZmxvdyBjb250cm9sIHdpdGhvdXQgc29mdHdhcmUgaW50ZXJ2ZW50aW9uLAorCQkgKiB0aGVuIHNraXAgdGhlIGJlbG93IGNoZWNrCisJCSAqLworCQlpZiAodHR5X3BvcnRfY3RzX2VuYWJsZWQocG9ydCkgJiYKKwkJICAgICEodXBvcnQtPmZsYWdzICYgVVBGX0hBUkRfRkxPVykpIHsKIAkJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAkJCWlmICghKHVwb3J0LT5vcHMtPmdldF9tY3RybCh1cG9ydCkgJiBUSU9DTV9DVFMpKQogCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CkBAIC0yMjM5LDYgKzIyNDMsOSBAQAogCQlyZXR1cm47CiAKIAlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKworCWlmIChjaCA9PSAnXG4nKQorCQlwb3J0LT5vcHMtPnBvbGxfcHV0X2NoYXIocG9ydCwgJ1xyJyk7CiAJcG9ydC0+b3BzLT5wb2xsX3B1dF9jaGFyKHBvcnQsIGNoKTsKIH0KICNlbmRpZgpAQCAtMjc3Miw3ICsyNzc5LDkgQEAKIAogCXVwb3J0LT5pY291bnQuY3RzKys7CiAKLQlpZiAodHR5X3BvcnRfY3RzX2VuYWJsZWQocG9ydCkpIHsKKwkvKiBza2lwIGJlbG93IGNvZGUgaWYgdGhlIGh3IGZsb3cgY29udHJvbCBpcyBzdXBwb3J0ZWQgKi8KKwlpZiAodHR5X3BvcnRfY3RzX2VuYWJsZWQocG9ydCkgJiYKKwkgICAgISh1cG9ydC0+ZmxhZ3MgJiBVUEZfSEFSRF9GTE9XKSkgewogCQlpZiAodHR5LT5od19zdG9wcGVkKSB7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfbWN0cmxfZ3Bpby5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9tY3RybF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5NTYwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfbWN0cmxfZ3Bpby5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogSGVscGVycyBmb3IgY29udHJvbGxpbmcgbW9kZW0gbGluZXMgdmlhIEdQSU8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUGFyYXRyb25pYyBTLkEuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPHVhcGkvYXNtLWdlbmVyaWMvdGVybWlvcy5oPgorCisjaW5jbHVkZSAic2VyaWFsX21jdHJsX2dwaW8uaCIKKworc3RydWN0IG1jdHJsX2dwaW9zIHsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvW1VBUlRfR1BJT19NQVhdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgbWN0cmw7CisJYm9vbCBkaXJfb3V0OworfSBtY3RybF9ncGlvc19kZXNjW1VBUlRfR1BJT19NQVhdID0geworCXsgImN0cyIsIFRJT0NNX0NUUywgZmFsc2UsIH0sCisJeyAiZHNyIiwgVElPQ01fRFNSLCBmYWxzZSwgfSwKKwl7ICJkY2QiLCBUSU9DTV9DRCwgZmFsc2UsIH0sCisJeyAicm5nIiwgVElPQ01fUk5HLCBmYWxzZSwgfSwKKwl7ICJydHMiLCBUSU9DTV9SVFMsIHRydWUsIH0sCisJeyAiZHRyIiwgVElPQ01fRFRSLCB0cnVlLCB9LAorCXsgIm91dDEiLCBUSU9DTV9PVVQxLCB0cnVlLCB9LAorCXsgIm91dDIiLCBUSU9DTV9PVVQyLCB0cnVlLCB9LAorfTsKKwordm9pZCBtY3RybF9ncGlvX3NldChzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKmdwaW9zLCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJZW51bSBtY3RybF9ncGlvX2lkeCBpOworCisJaWYgKElTX0VSUl9PUl9OVUxMKGdwaW9zKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IFVBUlRfR1BJT19NQVg7IGkrKykKKwkJaWYgKCFJU19FUlJfT1JfTlVMTChncGlvcy0+Z3Bpb1tpXSkgJiYKKwkJICAgIG1jdHJsX2dwaW9zX2Rlc2NbaV0uZGlyX291dCkKKwkJCWdwaW9kX3NldF92YWx1ZShncGlvcy0+Z3Bpb1tpXSwKKwkJCQkJISEobWN0cmwgJiBtY3RybF9ncGlvc19kZXNjW2ldLm1jdHJsKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtY3RybF9ncGlvX3NldCk7CisKK3N0cnVjdCBncGlvX2Rlc2MgKm1jdHJsX2dwaW9fdG9fZ3Bpb2Qoc3RydWN0IG1jdHJsX2dwaW9zICpncGlvcywKKwkJCQkgICAgICBlbnVtIG1jdHJsX2dwaW9faWR4IGdpZHgpCit7CisJaWYgKCFJU19FUlJfT1JfTlVMTChncGlvcykgJiYgIUlTX0VSUl9PUl9OVUxMKGdwaW9zLT5ncGlvW2dpZHhdKSkKKwkJcmV0dXJuIGdwaW9zLT5ncGlvW2dpZHhdOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtY3RybF9ncGlvX3RvX2dwaW9kKTsKKwordW5zaWduZWQgaW50IG1jdHJsX2dwaW9fZ2V0KHN0cnVjdCBtY3RybF9ncGlvcyAqZ3Bpb3MsIHVuc2lnbmVkIGludCAqbWN0cmwpCit7CisJZW51bSBtY3RybF9ncGlvX2lkeCBpOworCisJLyoKKwkgKiByZXR1cm4gaXQgdW5jaGFuZ2VkIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IGFsbG9jYXRlZAorCSAqLworCWlmIChJU19FUlJfT1JfTlVMTChncGlvcykpCisJCXJldHVybiAqbWN0cmw7CisKKwlmb3IgKGkgPSAwOyBpIDwgVUFSVF9HUElPX01BWDsgaSsrKSB7CisJCWlmICghSVNfRVJSX09SX05VTEwoZ3Bpb3MtPmdwaW9baV0pICYmCisJCSAgICAhbWN0cmxfZ3Bpb3NfZGVzY1tpXS5kaXJfb3V0KSB7CisJCQlpZiAoZ3Bpb2RfZ2V0X3ZhbHVlKGdwaW9zLT5ncGlvW2ldKSkKKwkJCQkqbWN0cmwgfD0gbWN0cmxfZ3Bpb3NfZGVzY1tpXS5tY3RybDsKKwkJCWVsc2UKKwkJCQkqbWN0cmwgJj0gfm1jdHJsX2dwaW9zX2Rlc2NbaV0ubWN0cmw7CisJCX0KKwl9CisKKwlyZXR1cm4gKm1jdHJsOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWN0cmxfZ3Bpb19nZXQpOworCitzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKm1jdHJsX2dwaW9faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IG1jdHJsX2dwaW9zICpncGlvczsKKwllbnVtIG1jdHJsX2dwaW9faWR4IGk7CisJaW50IGVycjsKKworCWdwaW9zID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpncGlvcyksIEdGUF9LRVJORUwpOworCWlmICghZ3Bpb3MpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZm9yIChpID0gMDsgaSA8IFVBUlRfR1BJT19NQVg7IGkrKykgeworCQlncGlvcy0+Z3Bpb1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwKKwkJCQkJCSAgICAgIG1jdHJsX2dwaW9zX2Rlc2NbaV0ubmFtZSwKKwkJCQkJCSAgICAgIGlkeCk7CisKKwkJLyoKKwkJICogVGhlIEdQSU9zIGFyZSBtYXliZSBub3QgYWxsIGZpbGxlZCwKKwkJICogdGhpcyBpcyBub3QgYW4gZXJyb3IuCisJCSAqLworCQlpZiAoSVNfRVJSX09SX05VTEwoZ3Bpb3MtPmdwaW9baV0pKQorCQkJY29udGludWU7CisKKwkJaWYgKG1jdHJsX2dwaW9zX2Rlc2NbaV0uZGlyX291dCkKKwkJCWVyciA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb3MtPmdwaW9baV0sIDApOworCQllbHNlCisJCQllcnIgPSBncGlvZF9kaXJlY3Rpb25faW5wdXQoZ3Bpb3MtPmdwaW9baV0pOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZGJnKGRldiwgIlVuYWJsZSB0byBzZXQgZGlyZWN0aW9uIGZvciAlcyBHUElPIiwKKwkJCQltY3RybF9ncGlvc19kZXNjW2ldLm5hbWUpOworCQkJZGV2bV9ncGlvZF9wdXQoZGV2LCBncGlvcy0+Z3Bpb1tpXSk7CisJCQlncGlvcy0+Z3Bpb1tpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gZ3Bpb3M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtY3RybF9ncGlvX2luaXQpOworCit2b2lkIG1jdHJsX2dwaW9fZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtY3RybF9ncGlvcyAqZ3Bpb3MpCit7CisJZW51bSBtY3RybF9ncGlvX2lkeCBpOworCisJaWYgKElTX0VSUl9PUl9OVUxMKGdwaW9zKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IFVBUlRfR1BJT19NQVg7IGkrKykKKwkJaWYgKCFJU19FUlJfT1JfTlVMTChncGlvcy0+Z3Bpb1tpXSkpCisJCQlkZXZtX2dwaW9kX3B1dChkZXYsIGdwaW9zLT5ncGlvW2ldKTsKKwlkZXZtX2tmcmVlKGRldiwgZ3Bpb3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWN0cmxfZ3Bpb19mcmVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfbWN0cmxfZ3Bpby5oIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9tY3RybF9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwYmEwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfbWN0cmxfZ3Bpby5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogSGVscGVycyBmb3IgY29udHJvbGxpbmcgbW9kZW0gbGluZXMgdmlhIEdQSU8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUGFyYXRyb25pYyBTLkEuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fU0VSSUFMX01DVFJMX0dQSU9fXworI2RlZmluZSBfX1NFUklBTF9NQ1RSTF9HUElPX18KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKworZW51bSBtY3RybF9ncGlvX2lkeCB7CisJVUFSVF9HUElPX0NUUywKKwlVQVJUX0dQSU9fRFNSLAorCVVBUlRfR1BJT19EQ0QsCisJVUFSVF9HUElPX1JORywKKwlVQVJUX0dQSU9fUkkgPSBVQVJUX0dQSU9fUk5HLAorCVVBUlRfR1BJT19SVFMsCisJVUFSVF9HUElPX0RUUiwKKwlVQVJUX0dQSU9fT1VUMSwKKwlVQVJUX0dQSU9fT1VUMiwKKwlVQVJUX0dQSU9fTUFYLAorfTsKKworLyoKKyAqIE9wYXF1ZSBkZXNjcmlwdG9yIGZvciBtb2RlbSBsaW5lcyBjb250cm9sbGVkIGJ5IEdQSU9zCisgKi8KK3N0cnVjdCBtY3RybF9ncGlvczsKKworI2lmZGVmIENPTkZJR19HUElPTElCCisKKy8qCisgKiBTZXQgc3RhdGUgb2YgdGhlIG1vZGVtIGNvbnRyb2wgb3V0cHV0IGxpbmVzIHZpYSBHUElPcy4KKyAqLwordm9pZCBtY3RybF9ncGlvX3NldChzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKmdwaW9zLCB1bnNpZ25lZCBpbnQgbWN0cmwpOworCisvKgorICogR2V0IHN0YXRlIG9mIHRoZSBtb2RlbSBjb250cm9sIG91dHB1dCBsaW5lcyBmcm9tIEdQSU9zLgorICogVGhlIG1jdHJsIGZsYWdzIGFyZSB1cGRhdGVkIGFuZCByZXR1cm5lZC4KKyAqLwordW5zaWduZWQgaW50IG1jdHJsX2dwaW9fZ2V0KHN0cnVjdCBtY3RybF9ncGlvcyAqZ3Bpb3MsIHVuc2lnbmVkIGludCAqbWN0cmwpOworCisvKgorICogUmV0dXJucyB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3QgZ3Bpb19kZXNjIHRvIHRoZSBtb2RlbSBsaW5lIGdpZHgKKyAqLworc3RydWN0IGdwaW9fZGVzYyAqbWN0cmxfZ3Bpb190b19ncGlvZChzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKmdwaW9zLAorCQkJCSAgICAgIGVudW0gbWN0cmxfZ3Bpb19pZHggZ2lkeCk7CisKKy8qCisgKiBSZXF1ZXN0IGFuZCBzZXQgZGlyZWN0aW9uIG9mIG1vZGVtIGNvbnRyb2wgbGluZXMgR1BJT3MuCisgKiBkZXZtXyogZnVuY3Rpb25zIGFyZSB1c2VkLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2FsbCBtY3RybF9ncGlvX2ZyZWUoKS4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWN0cmwgc3RydWN0dXJlIGlmIG9rLCAtRU5PTUVNIG9uCisgKiBhbGxvY2F0aW9uIGVycm9yLgorICovCitzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKm1jdHJsX2dwaW9faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZHgpOworCisvKgorICogRnJlZSB0aGUgbWN0cmxfZ3Bpb3Mgc3RydWN0dXJlLgorICogTm9ybWFsbHksIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkLCBhcyB0aGUgR1BJT3Mgd2lsbAorICogYmUgZGlzcG9zZWQgb2YgYnkgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgY29kZS4KKyAqLwordm9pZCBtY3RybF9ncGlvX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKmdwaW9zKTsKKworI2Vsc2UgLyogR1BJT0xJQiAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIG1jdHJsX2dwaW9fc2V0KHN0cnVjdCBtY3RybF9ncGlvcyAqZ3Bpb3MsIHVuc2lnbmVkIGludCBtY3RybCkKK3sKK30KKworc3RhdGljIGlubGluZQordW5zaWduZWQgaW50IG1jdHJsX2dwaW9fZ2V0KHN0cnVjdCBtY3RybF9ncGlvcyAqZ3Bpb3MsIHVuc2lnbmVkIGludCAqbWN0cmwpCit7CisJcmV0dXJuICptY3RybDsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGdwaW9fZGVzYyAqbWN0cmxfZ3Bpb190b19ncGlvZChzdHJ1Y3QgbWN0cmxfZ3Bpb3MgKmdwaW9zLAorCQkJCSAgICAgIGVudW0gbWN0cmxfZ3Bpb19pZHggZ2lkeCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IG1jdHJsX2dwaW9zICptY3RybF9ncGlvX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIG1jdHJsX2dwaW9fZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtY3RybF9ncGlvcyAqZ3Bpb3MpCit7Cit9CisKKyNlbmRpZiAvKiBHUElPTElCICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX3R4eDkuYwppbmRleCA5MGEwODBiLi42MGY0OWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX3R4eDkuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtNTM1LDEzICs1MzUsOCBAQAogCXdhaXRfZm9yX3htaXRyKHVwKTsKIAkvKgogCSAqCVNlbmQgdGhlIGNoYXJhY3RlciBvdXQuCi0JICoJSWYgYSBMRiwgYWxzbyBkbyBDUi4uLgogCSAqLwogCXNpb19vdXQodXAsIFRYWDlfU0lURklGTywgYyk7Ci0JaWYgKGMgPT0gMTApIHsKLQkJd2FpdF9mb3JfeG1pdHIodXApOwotCQlzaW9fb3V0KHVwLCBUWFg5X1NJVEZJRk8sIDEzKTsKLQl9CiAKIAkvKgogCSAqCUZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NpcmZzb2NfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NpcmZzb2NfdWFydC5jCmluZGV4IDY4YjBmZDQuLjFmMmJlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zaXJmc29jX3VhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2lyZnNvY191YXJ0LmMKQEAgLTM1OCw5ICszNTgsMTEgQEAKIHsKIAlzdHJ1Y3Qgc2lyZnNvY191YXJ0X3BvcnQgKnNpcmZwb3J0ID0gKHN0cnVjdCBzaXJmc29jX3VhcnRfcG9ydCAqKWRldl9pZDsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnNpcmZwb3J0LT5wb3J0OworCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CiAJaWYgKGdwaW9faXNfdmFsaWQoc2lyZnBvcnQtPmN0c19ncGlvKSAmJiBzaXJmcG9ydC0+bXNfZW5hYmxlZCkKIAkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZShwb3J0LAogCQkJCSFncGlvX2dldF92YWx1ZShzaXJmcG9ydC0+Y3RzX2dwaW8pKTsKKwlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00MjgsMTAgKzQzMCw2IEBACiAJc2lyZnBvcnQtPnJ4X2lvX2NvdW50ICs9IHJ4X2NvdW50OwogCXBvcnQtPmljb3VudC5yeCArPSByeF9jb3VudDsKIAotCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQl0dHlfZmxpcF9idWZmZXJfcHVzaCgmcG9ydC0+c3RhdGUtPnBvcnQpOwotCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7Ci0KIAlyZXR1cm4gcnhfY291bnQ7CiB9CiAKQEAgLTQ2NSw2ICs0NjMsNyBAQAogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyBzaXJmcG9ydC0+dHJhbnNmZXJfc2l6ZSkgJgogCQkJCShVQVJUX1hNSVRfU0laRSAtIDEpOwogCXBvcnQtPmljb3VudC50eCArPSBzaXJmcG9ydC0+dHJhbnNmZXJfc2l6ZTsKQEAgLTQ3MywxMCArNDcyLDkgQEAKIAlpZiAoc2lyZnBvcnQtPnR4X2RtYV9hZGRyKQogCQlkbWFfdW5tYXBfc2luZ2xlKHBvcnQtPmRldiwgc2lyZnBvcnQtPnR4X2RtYV9hZGRyLAogCQkJCXNpcmZwb3J0LT50cmFuc2Zlcl9zaXplLCBETUFfVE9fREVWSUNFKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2lyZnBvcnQtPnR4X2xvY2ssIGZsYWdzKTsKIAlzaXJmcG9ydC0+dHhfZG1hX3N0YXRlID0gVFhfRE1BX0lETEU7CiAJc2lyZnNvY191YXJ0X3R4X3dpdGhfZG1hKHNpcmZwb3J0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaXJmcG9ydC0+dHhfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2lyZnNvY191YXJ0X2luc2VydF9yeF9idWZfdG9fdHR5KApAQCAtNDg5LDcgKzQ4Nyw2IEBACiAJaW5zZXJ0ZWQgPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHRwb3J0LAogCQlzaXJmcG9ydC0+cnhfZG1hX2l0ZW1zW3NpcmZwb3J0LT5yeF9jb21wbGV0ZWRdLnhtaXQuYnVmLCBjb3VudCk7CiAJcG9ydC0+aWNvdW50LnJ4ICs9IGluc2VydGVkOwotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHRwb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgc2lyZnNvY19yeF9zdWJtaXRfb25lX2RtYV9kZXNjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBpbmRleCkKQEAgLTUyNSw3ICs1MjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGRtYV90eF9zdGF0ZSB0eF9zdGF0ZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzaXJmcG9ydC0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJd2hpbGUgKERNQV9DT01QTEVURSA9PSBkbWFlbmdpbmVfdHhfc3RhdHVzKHNpcmZwb3J0LT5yeF9kbWFfY2hhbiwKIAkJc2lyZnBvcnQtPnJ4X2RtYV9pdGVtc1tzaXJmcG9ydC0+cnhfY29tcGxldGVkXS5jb29raWUsICZ0eF9zdGF0ZSkpIHsKIAkJc2lyZnNvY191YXJ0X2luc2VydF9yeF9idWZfdG9fdHR5KHNpcmZwb3J0LApAQCAtNTQxLDEyICs1MzgsOCBAQAogCXdyX3JlZ2wocG9ydCwgdXJlZy0+c2lyZnNvY19yeF9kbWFfaW9fY3RybCwKIAkJCXJkX3JlZ2wocG9ydCwgdXJlZy0+c2lyZnNvY19yeF9kbWFfaW9fY3RybCkgfAogCQkJU0lSRlVBUlRfSU9fTU9ERSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2lyZnBvcnQtPnJ4X2xvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogCXNpcmZzb2NfdWFydF9waW9fcnhfY2hhcnMocG9ydCwgNCAtIHNpcmZwb3J0LT5yeF9pb19jb3VudCk7Ci0Jc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOwogCWlmIChzaXJmcG9ydC0+cnhfaW9fY291bnQgPT0gNCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2lyZnBvcnQtPnJ4X2xvY2ssIGZsYWdzKTsKIAkJc2lyZnBvcnQtPnJ4X2lvX2NvdW50ID0gMDsKIAkJd3JfcmVnbChwb3J0LCB1cmVnLT5zaXJmc29jX2ludF9zdF9yZWcsCiAJCQkJdWludF9zdC0+c2lyZnNvY19yeF9kb25lKTsKQEAgLTU1NywxMSArNTUwLDggQEAKIAkJZWxzZQogCQkJd3JfcmVnbChwb3J0LCBTSVJGVUFSVF9JTlRfRU5fQ0xSLAogCQkJCQl1aW50X2VuLT5zaXJmc29jX3J4X2RvbmVfZW4pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaXJmcG9ydC0+cnhfbG9jaywgZmxhZ3MpOwotCiAJCXNpcmZzb2NfdWFydF9zdGFydF9uZXh0X3J4X2RtYShwb3J0KTsKIAl9IGVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2lyZnBvcnQtPnJ4X2xvY2ssIGZsYWdzKTsKIAkJd3JfcmVnbChwb3J0LCB1cmVnLT5zaXJmc29jX2ludF9zdF9yZWcsCiAJCQkJdWludF9zdC0+c2lyZnNvY19yeF9kb25lKTsKIAkJaWYgKCFzaXJmcG9ydC0+aXNfbWFyY28pCkBAIC01NzEsOCArNTYxLDkgQEAKIAkJZWxzZQogCQkJd3JfcmVnbChwb3J0LCB1cmVnLT5zaXJmc29jX2ludF9lbl9yZWcsCiAJCQkJCXVpbnRfZW4tPnNpcmZzb2NfcnhfZG9uZV9lbik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNpcmZwb3J0LT5yeF9sb2NrLCBmbGFncyk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCgmcG9ydC0+c3RhdGUtPnBvcnQpOwogfQogCiBzdGF0aWMgdm9pZCBzaXJmc29jX3VhcnRfaGFuZGxlX3J4X3RtbyhzdHJ1Y3Qgc2lyZnNvY191YXJ0X3BvcnQgKnNpcmZwb3J0KQpAQCAtNTgxLDggKzU3Miw2IEBACiAJc3RydWN0IHNpcmZzb2NfcmVnaXN0ZXIgKnVyZWcgPSAmc2lyZnBvcnQtPnVhcnRfcmVnLT51YXJ0X3JlZzsKIAlzdHJ1Y3Qgc2lyZnNvY19pbnRfZW4gKnVpbnRfZW4gPSAmc2lyZnBvcnQtPnVhcnRfcmVnLT51YXJ0X2ludF9lbjsKIAlzdHJ1Y3QgZG1hX3R4X3N0YXRlIHR4X3N0YXRlOwotCXNwaW5fbG9jaygmc2lyZnBvcnQtPnJ4X2xvY2spOwotCiAJZG1hZW5naW5lX3R4X3N0YXR1cyhzaXJmcG9ydC0+cnhfZG1hX2NoYW4sCiAJCXNpcmZwb3J0LT5yeF9kbWFfaXRlbXNbc2lyZnBvcnQtPnJ4X2lzc3VlZF0uY29va2llLCAmdHhfc3RhdGUpOwogCWRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKHNpcmZwb3J0LT5yeF9kbWFfY2hhbik7CkBAIC01OTUsNyArNTg0LDYgQEAKIAllbHNlCiAJCXdyX3JlZ2wocG9ydCwgU0lSRlVBUlRfSU5UX0VOX0NMUiwKIAkJCQl1aW50X2VuLT5zaXJmc29jX3J4X3RpbWVvdXRfZW4pOwotCXNwaW5fdW5sb2NrKCZzaXJmcG9ydC0+cnhfbG9jayk7CiAJdGFza2xldF9zY2hlZHVsZSgmc2lyZnBvcnQtPnJ4X3Rtb19wcm9jZXNzX3Rhc2tsZXQpOwogfQogCkBAIC02NTksNyArNjQ3LDYgQEAKIAkJaW50cl9zdGF0dXMgJj0gcG9ydC0+cmVhZF9zdGF0dXNfbWFzazsKIAkJdWFydF9pbnNlcnRfY2hhcihwb3J0LCBpbnRyX3N0YXR1cywKIAkJCQkJdWludF9lbi0+c2lyZnNvY19yeF9vZmxvd19lbiwgMCwgZmxhZyk7Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKCZzdGF0ZS0+cG9ydCk7CiAJfQogcmVjdl9jaGFyOgogCWlmICgoc2lyZnBvcnQtPnVhcnRfcmVnLT51YXJ0X3R5cGUgPT0gU0lSRl9SRUFMX1VBUlQpICYmCkBAIC02ODQsNiArNjcxLDkgQEAKIAkJCXNpcmZzb2NfdWFydF9waW9fcnhfY2hhcnMocG9ydCwKIAkJCQkJU0lSRlNPQ19VQVJUX0lPX1JYX01BWF9DTlQpOwogCX0KKwlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2goJnN0YXRlLT5wb3J0KTsKKwlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogCWlmIChpbnRyX3N0YXR1cyAmIHVpbnRfc3QtPnNpcmZzb2NfdHhmaWZvX2VtcHR5KSB7CiAJCWlmIChzaXJmcG9ydC0+dHhfZG1hX2NoYW4pCiAJCQlzaXJmc29jX3VhcnRfdHhfd2l0aF9kbWEoc2lyZnBvcnQpOwpAQCAtNzAyLDYgKzY5Miw3IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC03MTMsNyArNzA0LDcgQEAKIAlzdHJ1Y3Qgc2lyZnNvY19pbnRfZW4gKnVpbnRfZW4gPSAmc2lyZnBvcnQtPnVhcnRfcmVnLT51YXJ0X2ludF9lbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBkbWFfdHhfc3RhdGUgdHhfc3RhdGU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNpcmZwb3J0LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAl3aGlsZSAoRE1BX0NPTVBMRVRFID09IGRtYWVuZ2luZV90eF9zdGF0dXMoc2lyZnBvcnQtPnJ4X2RtYV9jaGFuLAogCQkJc2lyZnBvcnQtPnJ4X2RtYV9pdGVtc1tzaXJmcG9ydC0+cnhfY29tcGxldGVkXS5jb29raWUsICZ0eF9zdGF0ZSkpIHsKIAkJc2lyZnNvY191YXJ0X2luc2VydF9yeF9idWZfdG9fdHR5KHNpcmZwb3J0LApAQCAtNzI2LDE3ICs3MTcsMjAgQEAKIAkJCXNpcmZwb3J0LT5yeF9jb21wbGV0ZWQrKzsKIAkJc2lyZnBvcnQtPnJ4X2NvbXBsZXRlZCAlPSBTSVJGU09DX1JYX0xPT1BfQlVGX0NOVDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2lyZnBvcnQtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2goJnBvcnQtPnN0YXRlLT5wb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgc2lyZnNvY191YXJ0X3J4X2RtYV9jb21wbGV0ZV9jYWxsYmFjayh2b2lkICpwYXJhbSkKIHsKIAlzdHJ1Y3Qgc2lyZnNvY191YXJ0X3BvcnQgKnNpcmZwb3J0ID0gKHN0cnVjdCBzaXJmc29jX3VhcnRfcG9ydCAqKXBhcmFtOwotCXNwaW5fbG9jaygmc2lyZnBvcnQtPnJ4X2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2lyZnBvcnQtPnBvcnQubG9jaywgZmxhZ3MpOwogCXNpcmZwb3J0LT5yeF9pc3N1ZWQrKzsKIAlzaXJmcG9ydC0+cnhfaXNzdWVkICU9IFNJUkZTT0NfUlhfTE9PUF9CVUZfQ05UOwotCXNwaW5fdW5sb2NrKCZzaXJmcG9ydC0+cnhfbG9jayk7CiAJdGFza2xldF9zY2hlZHVsZSgmc2lyZnBvcnQtPnJ4X2RtYV9jb21wbGV0ZV90YXNrbGV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaXJmcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CiAKIC8qIHN1Ym1pdCByeCBkbWEgdGFzayBpbnRvIGRtYWVuZ2luZSAqLwpAQCAtNzQ1LDE4ICs3MzksMTQgQEAKIAlzdHJ1Y3Qgc2lyZnNvY191YXJ0X3BvcnQgKnNpcmZwb3J0ID0gdG9fc2lyZnBvcnQocG9ydCk7CiAJc3RydWN0IHNpcmZzb2NfcmVnaXN0ZXIgKnVyZWcgPSAmc2lyZnBvcnQtPnVhcnRfcmVnLT51YXJ0X3JlZzsKIAlzdHJ1Y3Qgc2lyZnNvY19pbnRfZW4gKnVpbnRfZW4gPSAmc2lyZnBvcnQtPnVhcnRfcmVnLT51YXJ0X2ludF9lbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzaXJmcG9ydC0+cnhfbG9jaywgZmxhZ3MpOwogCXNpcmZwb3J0LT5yeF9pb19jb3VudCA9IDA7CiAJd3JfcmVnbChwb3J0LCB1cmVnLT5zaXJmc29jX3J4X2RtYV9pb19jdHJsLAogCQlyZF9yZWdsKHBvcnQsIHVyZWctPnNpcmZzb2NfcnhfZG1hX2lvX2N0cmwpICYKIAkJflNJUkZVQVJUX0lPX01PREUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNpcmZwb3J0LT5yeF9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IFNJUkZTT0NfUlhfTE9PUF9CVUZfQ05UOyBpKyspCiAJCXNpcmZzb2Nfcnhfc3VibWl0X29uZV9kbWFfZGVzYyhwb3J0LCBpKTsKIAlzaXJmcG9ydC0+cnhfY29tcGxldGVkID0gc2lyZnBvcnQtPnJ4X2lzc3VlZCA9IDA7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNpcmZwb3J0LT5yeF9sb2NrLCBmbGFncyk7CiAJaWYgKCFzaXJmcG9ydC0+aXNfbWFyY28pCiAJCXdyX3JlZ2wocG9ydCwgdXJlZy0+c2lyZnNvY19pbnRfZW5fcmVnLAogCQkJCXJkX3JlZ2wocG9ydCwgdXJlZy0+c2lyZnNvY19pbnRfZW5fcmVnKSB8CkBAIC03NjQsNyArNzU0LDYgQEAKIAllbHNlCiAJCXdyX3JlZ2wocG9ydCwgdXJlZy0+c2lyZnNvY19pbnRfZW5fcmVnLAogCQkJU0lSRlVBUlRfUlhfRE1BX0lOVF9FTihwb3J0LCB1aW50X2VuKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2lyZnBvcnQtPnJ4X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2lyZnNvY191YXJ0X3N0YXJ0X3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0xMjI4LDcgKzEyMTcsNyBAQAogCXdoaWxlIChyZF9yZWdsKHBvcnQsCiAJCXVyZWctPnNpcmZzb2NfdHhfZmlmb19zdGF0dXMpICYgdWZpZm9fc3QtPmZmX2Z1bGwocG9ydC0+bGluZSkpCiAJCWNwdV9yZWxheCgpOwotCXdyX3JlZ2IocG9ydCwgdXJlZy0+c2lyZnNvY190eF9maWZvX2RhdGEsIGNoKTsKKwl3cl9yZWdsKHBvcnQsIHVyZWctPnNpcmZzb2NfdHhfZmlmb19kYXRhLCBjaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpcmZzb2NfdWFydF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKQEAgLTEzNjksOCArMTM1OCw2IEBACiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZXJyOwogCX0KLQlzcGluX2xvY2tfaW5pdCgmc2lyZnBvcnQtPnJ4X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZzaXJmcG9ydC0+dHhfbG9jayk7CiAJdGFza2xldF9pbml0KCZzaXJmcG9ydC0+cnhfZG1hX2NvbXBsZXRlX3Rhc2tsZXQsCiAJCQlzaXJmc29jX3VhcnRfcnhfZG1hX2NvbXBsZXRlX3RsLCAodW5zaWduZWQgbG9uZylzaXJmcG9ydCk7CiAJdGFza2xldF9pbml0KCZzaXJmcG9ydC0+cnhfdG1vX3Byb2Nlc3NfdGFza2xldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zaXJmc29jX3VhcnQuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaXJmc29jX3VhcnQuaAppbmRleCA4YTZlZGRhLi42OWE2MmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2lyZnNvY191YXJ0LmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NpcmZzb2NfdWFydC5oCkBAIC00MjQsOCArNDI0LDYgQEAKIAlzdHJ1Y3QgZG1hX2NoYW4JCQkqdHhfZG1hX2NoYW47CiAJZG1hX2FkZHJfdAkJCXR4X2RtYV9hZGRyOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqdHhfZG1hX2Rlc2M7Ci0Jc3BpbmxvY2tfdAkJCXJ4X2xvY2s7Ci0Jc3BpbmxvY2tfdAkJCXR4X2xvY2s7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CQlyeF9kbWFfY29tcGxldGVfdGFza2xldDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJCXJ4X3Rtb19wcm9jZXNzX3Rhc2tsZXQ7CiAJdW5zaWduZWQgaW50CQkJcnhfaW9fY291bnQ7CkBAIC00NDEsOSArNDM5LDcgQEAKIAogLyogUmVnaXN0ZXIgQWNjZXNzIENvbnRyb2wgKi8KICNkZWZpbmUgcG9ydGFkZHIocG9ydCwgcmVnKQkJKChwb3J0KS0+bWVtYmFzZSArIChyZWcpKQotI2RlZmluZSByZF9yZWdiKHBvcnQsIHJlZykJCShfX3Jhd19yZWFkYihwb3J0YWRkcihwb3J0LCByZWcpKSkKICNkZWZpbmUgcmRfcmVnbChwb3J0LCByZWcpCQkoX19yYXdfcmVhZGwocG9ydGFkZHIocG9ydCwgcmVnKSkpCi0jZGVmaW5lIHdyX3JlZ2IocG9ydCwgcmVnLCB2YWwpCQlfX3Jhd193cml0ZWIodmFsLCBwb3J0YWRkcihwb3J0LCByZWcpKQogI2RlZmluZSB3cl9yZWdsKHBvcnQsIHJlZywgdmFsKQkJX19yYXdfd3JpdGVsKHZhbCwgcG9ydGFkZHIocG9ydCwgcmVnKSkKIAogLyogVUFSVCBQb3J0IE1hc2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zdC1hc2MuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdC1hc2MuYwppbmRleCBkZDNhOTZlLi5jN2Y2MWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc3QtYXNjLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3N0LWFzYy5jCkBAIC0xOTQsOSArMTk0LDkgQEAKIAlyZXR1cm4gYXNjX2luKHBvcnQsIEFTQ19TVEEpICYgQVNDX1NUQV9URTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXNjX3R4Zmlmb19pc19mdWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW5saW5lIHUzMiBhc2NfdHhmaWZvX2lzX2hhbGZfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gYXNjX2luKHBvcnQsIEFTQ19TVEEpICYgQVNDX1NUQV9URjsKKwlyZXR1cm4gYXNjX2luKHBvcnQsIEFTQ19TVEEpICYgQVNDX1NUQV9USEU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYXNjX3BvcnRfbmFtZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtNjI4LDcgKzYyOCw3IEBACiAKIHN0YXRpYyB2b2lkIGFzY19wdXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgYykKIHsKLQl3aGlsZSAoYXNjX3R4Zmlmb19pc19mdWxsKHBvcnQpKQorCXdoaWxlICghYXNjX3R4Zmlmb19pc19oYWxmX2VtcHR5KHBvcnQpKQogCQljcHVfcmVsYXgoKTsKIAlhc2Nfb3V0KHBvcnQsIEFTQ19UWEJVRiwgYyk7CiB9CkBAIC03ODMsNyArNzgzLDcgQEAKIAl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDEwMDAwMDA7CiAKIAkvKiBXYWl0IGZvciB1cHRvIDEgc2Vjb25kIGluIGNhc2UgZmxvdyBjb250cm9sIGlzIHN0b3BwaW5nIHVzLiAqLwotCXdoaWxlICgtLXRpbWVvdXQgJiYgYXNjX3R4Zmlmb19pc19mdWxsKHBvcnQpKQorCXdoaWxlICgtLXRpbWVvdXQgJiYgIWFzY190eGZpZm9faXNfaGFsZl9lbXB0eShwb3J0KSkKIAkJdWRlbGF5KDEpOwogCiAJYXNjX291dChwb3J0LCBBU0NfVFhCVUYsIGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC91YXJ0bGl0ZS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3VhcnRsaXRlLmMKaW5kZXggNWY5MGVmMi4uZGNlMjdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3VhcnRsaXRlLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3VhcnRsaXRlLmMKQEAgLTQxOCwxNCArNDE4LDIzIEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9VQVJUTElURV9DT05TT0xFCiBzdGF0aWMgdm9pZCB1bGl0ZV9jb25zb2xlX3dhaXRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlpbnQgaTsKIAl1OCB2YWw7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JLyogU3BpbiB3YWl0aW5nIGZvciBUWCBmaWZvIHRvIGhhdmUgc3BhY2UgYXZhaWxhYmxlICovCi0JZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisJLyoKKwkgKiBTcGluIHdhaXRpbmcgZm9yIFRYIGZpZm8gdG8gaGF2ZSBzcGFjZSBhdmFpbGFibGUuCisJICogV2hlbiB1c2luZyB0aGUgTWljcm9ibGF6ZSBEZWJ1ZyBNb2R1bGUgdGhpcyBjYW4gdGFrZSB1cCB0byAxcworCSAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwl3aGlsZSAoMSkgewogCQl2YWwgPSB1YXJ0X2luMzIoVUxJVEVfU1RBVFVTLCBwb3J0KTsKIAkJaWYgKCh2YWwgJiBVTElURV9TVEFUVVNfVFhGVUxMKSA9PSAwKQogCQkJYnJlYWs7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfd2Fybihwb3J0LT5kZXYsCisJCQkJICJ0aW1lb3V0IHdhaXRpbmcgZm9yIFRYIGJ1ZmZlciBlbXB0eVxuIik7CisJCQlicmVhazsKKwkJfQogCQljcHVfcmVsYXgoKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwveGlsaW54X3VhcnRwcy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3hpbGlueF91YXJ0cHMuYwppbmRleCBmNjE5YWQ1Li44ODA5Nzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwveGlsaW54X3VhcnRwcy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC94aWxpbnhfdWFydHBzLmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogWGlsaW54IFBTIFVBUlQgZHJpdmVyCisgKiBDYWRlbmNlIFVBUlQgZHJpdmVyIChmb3VuZCBpbiBYaWxpbnggWnlucSkKICAqCi0gKiAyMDExIC0gMjAxMyAoQykgWGlsaW54IEluYy4KKyAqIDIwMTEgLSAyMDE0IChDKSBYaWxpbnggSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAogICogYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtOSw2ICs5LDkgQEAKICAqIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CiAgKiBsYXRlciB2ZXJzaW9uLgogICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBvcmlnaW5hbGx5IGJlZW4gcHVzaGVkIGJ5IFhpbGlueCB1c2luZyBhIFp5bnEtYnJhbmRpbmcuIFRoaXMKKyAqIHN0aWxsIHNob3dzIGluIHRoZSBuYW1pbmcgb2YgdGhpcyBmaWxlLCB0aGUga2NvbmZpZyBzeW1ib2xzIGFuZCBzb21lIHN5bWJvbHMKKyAqIGluIHRoZSBjb2RlLgogICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlRfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCkBAIC0yOCwxNiArMzEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jZGVmaW5lIFhVQVJUUFNfVFRZX05BTUUJInR0eVBTIgotI2RlZmluZSBYVUFSVFBTX05BTUUJCSJ4dWFydHBzIgotI2RlZmluZSBYVUFSVFBTX01BSk9SCQkwCS8qIHVzZSBkeW5hbWljIG5vZGUgYWxsb2NhdGlvbiAqLwotI2RlZmluZSBYVUFSVFBTX01JTk9SCQkwCS8qIHdvcmtzIGJlc3Qgd2l0aCBkZXZ0bXBmcyAqLwotI2RlZmluZSBYVUFSVFBTX05SX1BPUlRTCTIKLSNkZWZpbmUgWFVBUlRQU19GSUZPX1NJWkUJNjQJLyogRklGTyBzaXplICovCi0jZGVmaW5lIFhVQVJUUFNfUkVHSVNURVJfU1BBQ0UJMHhGRkYKKyNkZWZpbmUgQ0ROU19VQVJUX1RUWV9OQU1FCSJ0dHlQUyIKKyNkZWZpbmUgQ0ROU19VQVJUX05BTUUJCSJ4dWFydHBzIgorI2RlZmluZSBDRE5TX1VBUlRfTUFKT1IJCTAJLyogdXNlIGR5bmFtaWMgbm9kZSBhbGxvY2F0aW9uICovCisjZGVmaW5lIENETlNfVUFSVF9NSU5PUgkJMAkvKiB3b3JrcyBiZXN0IHdpdGggZGV2dG1wZnMgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX05SX1BPUlRTCTIKKyNkZWZpbmUgQ0ROU19VQVJUX0ZJRk9fU0laRQk2NAkvKiBGSUZPIHNpemUgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX1JFR0lTVEVSX1NQQUNFCTB4RkZGCiAKLSNkZWZpbmUgeHVhcnRwc19yZWFkbChvZmZzZXQpCQlpb3JlYWQzMihwb3J0LT5tZW1iYXNlICsgb2Zmc2V0KQotI2RlZmluZSB4dWFydHBzX3dyaXRlbCh2YWwsIG9mZnNldCkJaW93cml0ZTMyKHZhbCwgcG9ydC0+bWVtYmFzZSArIG9mZnNldCkKKyNkZWZpbmUgY2Ruc191YXJ0X3JlYWRsKG9mZnNldCkJCWlvcmVhZDMyKHBvcnQtPm1lbWJhc2UgKyBvZmZzZXQpCisjZGVmaW5lIGNkbnNfdWFydF93cml0ZWwodmFsLCBvZmZzZXQpCWlvd3JpdGUzMih2YWwsIHBvcnQtPm1lbWJhc2UgKyBvZmZzZXQpCiAKIC8qIFJ4IFRyaWdnZXIgbGV2ZWwgKi8KIHN0YXRpYyBpbnQgcnhfdHJpZ2dlcl9sZXZlbCA9IDU2OwpAQCAtNDksNzcgKzUyLDYyIEBACiBtb2R1bGVfcGFyYW0ocnhfdGltZW91dCwgdWludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHJ4X3RpbWVvdXQsICJSeCB0aW1lb3V0LCAxLTI1NSIpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipSZWdpc3RlciBNYXAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKiBVQVJUCi0gKgotICogUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgdGhlIFVBUlQuCi0gKgotICovCi0jZGVmaW5lIFhVQVJUUFNfQ1JfT0ZGU0VUCTB4MDAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgWzg6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19NUl9PRkZTRVQJMHgwNCAgLyogTW9kZSBSZWdpc3RlciBbMTA6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19JRVJfT0ZGU0VUCTB4MDggIC8qIEludGVycnVwdCBFbmFibGUgWzEwOjBdICovCi0jZGVmaW5lIFhVQVJUUFNfSURSX09GRlNFVAkweDBDICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBbMTA6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19JTVJfT0ZGU0VUCTB4MTAgIC8qIEludGVycnVwdCBNYXNrIFsxMDowXSAqLwotI2RlZmluZSBYVUFSVFBTX0lTUl9PRkZTRVQJMHgxNCAgLyogSW50ZXJydXB0IFN0YXR1cyBbMTA6MF0qLwotI2RlZmluZSBYVUFSVFBTX0JBVURHRU5fT0ZGU0VUCTB4MTggIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgWzE1OjBdICovCi0jZGVmaW5lIFhVQVJUUFNfUlhUT1VUX09GRlNFVAkweDFDICAvKiBSWCBUaW1lb3V0IFs3OjBdICovCi0jZGVmaW5lIFhVQVJUUFNfUlhXTV9PRkZTRVQJMHgyMCAgLyogUlggRklGTyBUcmlnZ2VyIExldmVsIFs1OjBdICovCi0jZGVmaW5lIFhVQVJUUFNfTU9ERU1DUl9PRkZTRVQJMHgyNCAgLyogTW9kZW0gQ29udHJvbCBbNTowXSAqLwotI2RlZmluZSBYVUFSVFBTX01PREVNU1JfT0ZGU0VUCTB4MjggIC8qIE1vZGVtIFN0YXR1cyBbODowXSAqLwotI2RlZmluZSBYVUFSVFBTX1NSX09GRlNFVAkweDJDICAvKiBDaGFubmVsIFN0YXR1cyBbMTE6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19GSUZPX09GRlNFVAkweDMwICAvKiBGSUZPIFsxNTowXSBvciBbNzowXSAqLwotI2RlZmluZSBYVUFSVFBTX0JBVURESVZfT0ZGU0VUCTB4MzQgIC8qIEJhdWQgUmF0ZSBEaXZpZGVyIFs3OjBdICovCi0jZGVmaW5lIFhVQVJUUFNfRkxPV0RFTF9PRkZTRVQJMHgzOCAgLyogRmxvdyBEZWxheSBbMTU6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19JUlJYX1BXSURUSF9PRkZTRVQgMHgzQyAvKiBJUiBNaW5pbXVtIFJlY2VpdmVkIFB1bHNlCi0JCQkJCQlXaWR0aCBbMTU6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19JUlRYX1BXSURUSF9PRkZTRVQgMHg0MCAvKiBJUiBUcmFuc21pdHRlZCBwdWxzZQotCQkJCQkJV2lkdGggWzc6MF0gKi8KLSNkZWZpbmUgWFVBUlRQU19UWFdNX09GRlNFVAkweDQ0ICAvKiBUWCBGSUZPIFRyaWdnZXIgTGV2ZWwgWzU6MF0gKi8KKy8qIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSBVQVJULiAqLworI2RlZmluZSBDRE5TX1VBUlRfQ1JfT0ZGU0VUCQkweDAwICAvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENETlNfVUFSVF9NUl9PRkZTRVQJCTB4MDQgIC8qIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lFUl9PRkZTRVQJCTB4MDggIC8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lEUl9PRkZTRVQJCTB4MEMgIC8qIEludGVycnVwdCBEaXNhYmxlICovCisjZGVmaW5lIENETlNfVUFSVF9JTVJfT0ZGU0VUCQkweDEwICAvKiBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBDRE5TX1VBUlRfSVNSX09GRlNFVAkJMHgxNCAgLyogSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBDRE5TX1VBUlRfQkFVREdFTl9PRkZTRVQJMHgxOCAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciAqLworI2RlZmluZSBDRE5TX1VBUlRfUlhUT1VUX09GRlNFVAkJMHgxQyAgLyogUlggVGltZW91dCAqLworI2RlZmluZSBDRE5TX1VBUlRfUlhXTV9PRkZTRVQJCTB4MjAgIC8qIFJYIEZJRk8gVHJpZ2dlciBMZXZlbCAqLworI2RlZmluZSBDRE5TX1VBUlRfTU9ERU1DUl9PRkZTRVQJMHgyNCAgLyogTW9kZW0gQ29udHJvbCAqLworI2RlZmluZSBDRE5TX1VBUlRfTU9ERU1TUl9PRkZTRVQJMHgyOCAgLyogTW9kZW0gU3RhdHVzICovCisjZGVmaW5lIENETlNfVUFSVF9TUl9PRkZTRVQJCTB4MkMgIC8qIENoYW5uZWwgU3RhdHVzICovCisjZGVmaW5lIENETlNfVUFSVF9GSUZPX09GRlNFVAkJMHgzMCAgLyogRklGTyAqLworI2RlZmluZSBDRE5TX1VBUlRfQkFVRERJVl9PRkZTRVQJMHgzNCAgLyogQmF1ZCBSYXRlIERpdmlkZXIgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0ZMT1dERUxfT0ZGU0VUCTB4MzggIC8qIEZsb3cgRGVsYXkgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lSUlhfUFdJRFRIX09GRlNFVAkweDNDICAvKiBJUiBNaW4gUmVjZWl2ZWQgUHVsc2UgV2lkdGggKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lSVFhfUFdJRFRIX09GRlNFVAkweDQwICAvKiBJUiBUcmFuc21pdHRlZCBwdWxzZSBXaWR0aCAqLworI2RlZmluZSBDRE5TX1VBUlRfVFhXTV9PRkZTRVQJCTB4NDQgIC8qIFRYIEZJRk8gVHJpZ2dlciBMZXZlbCAqLwogCi0vKiogQ29udHJvbCBSZWdpc3RlcgotICoKLSAqIFRoZSBDb250cm9sIHJlZ2lzdGVyIChDUikgY29udHJvbHMgdGhlIG1ham9yIGZ1bmN0aW9ucyBvZiB0aGUgZGV2aWNlLgotICoKLSAqIENvbnRyb2wgUmVnaXN0ZXIgQml0IERlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgWFVBUlRQU19DUl9TVE9QQlJLCTB4MDAwMDAxMDAgIC8qIFN0b3AgVFggYnJlYWsgKi8KLSNkZWZpbmUgWFVBUlRQU19DUl9TVEFSVEJSSwkweDAwMDAwMDgwICAvKiBTZXQgVFggYnJlYWsgKi8KLSNkZWZpbmUgWFVBUlRQU19DUl9UWF9ESVMJMHgwMDAwMDAyMCAgLyogVFggZGlzYWJsZWQuICovCi0jZGVmaW5lIFhVQVJUUFNfQ1JfVFhfRU4JMHgwMDAwMDAxMCAgLyogVFggZW5hYmxlZCAqLwotI2RlZmluZSBYVUFSVFBTX0NSX1JYX0RJUwkweDAwMDAwMDA4ICAvKiBSWCBkaXNhYmxlZC4gKi8KLSNkZWZpbmUgWFVBUlRQU19DUl9SWF9FTgkweDAwMDAwMDA0ICAvKiBSWCBlbmFibGVkICovCi0jZGVmaW5lIFhVQVJUUFNfQ1JfVFhSU1QJMHgwMDAwMDAwMiAgLyogVFggbG9naWMgcmVzZXQgKi8KLSNkZWZpbmUgWFVBUlRQU19DUl9SWFJTVAkweDAwMDAwMDAxICAvKiBSWCBsb2dpYyByZXNldCAqLwotI2RlZmluZSBYVUFSVFBTX0NSX1JTVF9UTwkweDAwMDAwMDQwICAvKiBSZXN0YXJ0IFRpbWVvdXQgQ291bnRlciAqLworLyogQ29udHJvbCBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0NSX1NUT1BCUksJMHgwMDAwMDEwMCAgLyogU3RvcCBUWCBicmVhayAqLworI2RlZmluZSBDRE5TX1VBUlRfQ1JfU1RBUlRCUksJMHgwMDAwMDA4MCAgLyogU2V0IFRYIGJyZWFrICovCisjZGVmaW5lIENETlNfVUFSVF9DUl9UWF9ESVMJMHgwMDAwMDAyMCAgLyogVFggZGlzYWJsZWQuICovCisjZGVmaW5lIENETlNfVUFSVF9DUl9UWF9FTgkweDAwMDAwMDEwICAvKiBUWCBlbmFibGVkICovCisjZGVmaW5lIENETlNfVUFSVF9DUl9SWF9ESVMJMHgwMDAwMDAwOCAgLyogUlggZGlzYWJsZWQuICovCisjZGVmaW5lIENETlNfVUFSVF9DUl9SWF9FTgkweDAwMDAwMDA0ICAvKiBSWCBlbmFibGVkICovCisjZGVmaW5lIENETlNfVUFSVF9DUl9UWFJTVAkweDAwMDAwMDAyICAvKiBUWCBsb2dpYyByZXNldCAqLworI2RlZmluZSBDRE5TX1VBUlRfQ1JfUlhSU1QJMHgwMDAwMDAwMSAgLyogUlggbG9naWMgcmVzZXQgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0NSX1JTVF9UTwkweDAwMDAwMDQwICAvKiBSZXN0YXJ0IFRpbWVvdXQgQ291bnRlciAqLwogCi0vKiogTW9kZSBSZWdpc3RlcgotICoKKy8qCisgKiBNb2RlIFJlZ2lzdGVyOgogICogVGhlIG1vZGUgcmVnaXN0ZXIgKE1SKSBkZWZpbmVzIHRoZSBtb2RlIG9mIHRyYW5zZmVyIGFzIHdlbGwgYXMgdGhlIGRhdGEKICAqIGZvcm1hdC4gSWYgdGhpcyByZWdpc3RlciBpcyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbiwKICAqIGRhdGEgdmFsaWRpdHkgY2Fubm90IGJlIGd1YXJhbnRlZWQuCi0gKgotICogTW9kZSBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMKLSAqCiAgKi8KLSNkZWZpbmUgWFVBUlRQU19NUl9DTEtTRUwJCTB4MDAwMDAwMDEgIC8qIFByZS1zY2FsYXIgc2VsZWN0aW9uICovCi0jZGVmaW5lIFhVQVJUUFNfTVJfQ0hNT0RFX0xfTE9PUAkweDAwMDAwMjAwICAvKiBMb2NhbCBsb29wIGJhY2sgbW9kZSAqLwotI2RlZmluZSBYVUFSVFBTX01SX0NITU9ERV9OT1JNCQkweDAwMDAwMDAwICAvKiBOb3JtYWwgbW9kZSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfQ0xLU0VMCQkweDAwMDAwMDAxICAvKiBQcmUtc2NhbGFyIHNlbGVjdGlvbiAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfQ0hNT0RFX0xfTE9PUAkweDAwMDAwMjAwICAvKiBMb2NhbCBsb29wIGJhY2sgbW9kZSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfQ0hNT0RFX05PUk0JMHgwMDAwMDAwMCAgLyogTm9ybWFsIG1vZGUgKi8KIAotI2RlZmluZSBYVUFSVFBTX01SX1NUT1BNT0RFXzJfQklUCTB4MDAwMDAwODAgIC8qIDIgc3RvcCBiaXRzICovCi0jZGVmaW5lIFhVQVJUUFNfTVJfU1RPUE1PREVfMV9CSVQJMHgwMDAwMDAwMCAgLyogMSBzdG9wIGJpdCAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfU1RPUE1PREVfMl9CSVQJMHgwMDAwMDA4MCAgLyogMiBzdG9wIGJpdHMgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX01SX1NUT1BNT0RFXzFfQklUCTB4MDAwMDAwMDAgIC8qIDEgc3RvcCBiaXQgKi8KIAotI2RlZmluZSBYVUFSVFBTX01SX1BBUklUWV9OT05FCQkweDAwMDAwMDIwICAvKiBObyBwYXJpdHkgbW9kZSAqLwotI2RlZmluZSBYVUFSVFBTX01SX1BBUklUWV9NQVJLCQkweDAwMDAwMDE4ICAvKiBNYXJrIHBhcml0eSBtb2RlICovCi0jZGVmaW5lIFhVQVJUUFNfTVJfUEFSSVRZX1NQQUNFCQkweDAwMDAwMDEwICAvKiBTcGFjZSBwYXJpdHkgbW9kZSAqLwotI2RlZmluZSBYVUFSVFBTX01SX1BBUklUWV9PREQJCTB4MDAwMDAwMDggIC8qIE9kZCBwYXJpdHkgbW9kZSAqLwotI2RlZmluZSBYVUFSVFBTX01SX1BBUklUWV9FVkVOCQkweDAwMDAwMDAwICAvKiBFdmVuIHBhcml0eSBtb2RlICovCisjZGVmaW5lIENETlNfVUFSVF9NUl9QQVJJVFlfTk9ORQkweDAwMDAwMDIwICAvKiBObyBwYXJpdHkgbW9kZSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfUEFSSVRZX01BUksJMHgwMDAwMDAxOCAgLyogTWFyayBwYXJpdHkgbW9kZSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfUEFSSVRZX1NQQUNFCTB4MDAwMDAwMTAgIC8qIFNwYWNlIHBhcml0eSBtb2RlICovCisjZGVmaW5lIENETlNfVUFSVF9NUl9QQVJJVFlfT0RECQkweDAwMDAwMDA4ICAvKiBPZGQgcGFyaXR5IG1vZGUgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX01SX1BBUklUWV9FVkVOCTB4MDAwMDAwMDAgIC8qIEV2ZW4gcGFyaXR5IG1vZGUgKi8KIAotI2RlZmluZSBYVUFSVFBTX01SX0NIQVJMRU5fNl9CSVQJMHgwMDAwMDAwNiAgLyogNiBiaXRzIGRhdGEgKi8KLSNkZWZpbmUgWFVBUlRQU19NUl9DSEFSTEVOXzdfQklUCTB4MDAwMDAwMDQgIC8qIDcgYml0cyBkYXRhICovCi0jZGVmaW5lIFhVQVJUUFNfTVJfQ0hBUkxFTl84X0JJVAkweDAwMDAwMDAwICAvKiA4IGJpdHMgZGF0YSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfQ0hBUkxFTl82X0JJVAkweDAwMDAwMDA2ICAvKiA2IGJpdHMgZGF0YSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfQ0hBUkxFTl83X0JJVAkweDAwMDAwMDA0ICAvKiA3IGJpdHMgZGF0YSAqLworI2RlZmluZSBDRE5TX1VBUlRfTVJfQ0hBUkxFTl84X0JJVAkweDAwMDAwMDAwICAvKiA4IGJpdHMgZGF0YSAqLwogCi0vKiogSW50ZXJydXB0IFJlZ2lzdGVycwotICoKKy8qCisgKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzOgogICogSW50ZXJydXB0IGNvbnRyb2wgbG9naWMgdXNlcyB0aGUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAoSUVSKSBhbmQgdGhlCiAgKiBpbnRlcnJ1cHQgZGlzYWJsZSByZWdpc3RlciAoSURSKSB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBiaXRzIGluIHRoZQogICogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKElNUikuIFRoZSBJTVIgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHBhc3MgYW4KQEAgLTEyNyw2NSArMTE1LDY1IEBACiAgKiBXcml0aW5nIGEgMSB0byBJRVIgRW5hYmxlcyBhbiBpbnRlcnJ1cHQsIHdyaXRpbmcgYSAxIHRvIElEUiBkaXNhYmxlcyBhbgogICogaW50ZXJydXB0LiBJTVIgYW5kIElTUiBhcmUgcmVhZCBvbmx5LCBhbmQgSUVSIGFuZCBJRFIgYXJlIHdyaXRlIG9ubHkuCiAgKiBSZWFkaW5nIGVpdGhlciBJRVIgb3IgSURSIHJldHVybnMgMHgwMC4KLSAqCiAgKiBBbGwgZm91ciByZWdpc3RlcnMgaGF2ZSB0aGUgc2FtZSBiaXQgZGVmaW5pdGlvbnMuCiAgKi8KLSNkZWZpbmUgWFVBUlRQU19JWFJfVE9VVAkweDAwMDAwMTAwIC8qIFJYIFRpbWVvdXQgZXJyb3IgaW50ZXJydXB0ICovCi0jZGVmaW5lIFhVQVJUUFNfSVhSX1BBUklUWQkweDAwMDAwMDgwIC8qIFBhcml0eSBlcnJvciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgWFVBUlRQU19JWFJfRlJBTUlORwkweDAwMDAwMDQwIC8qIEZyYW1pbmcgZXJyb3IgaW50ZXJydXB0ICovCi0jZGVmaW5lIFhVQVJUUFNfSVhSX09WRVJSVU4JMHgwMDAwMDAyMCAvKiBPdmVycnVuIGVycm9yIGludGVycnVwdCAqLwotI2RlZmluZSBYVUFSVFBTX0lYUl9UWEZVTEwJMHgwMDAwMDAxMCAvKiBUWCBGSUZPIEZ1bGwgaW50ZXJydXB0ICovCi0jZGVmaW5lIFhVQVJUUFNfSVhSX1RYRU1QVFkJMHgwMDAwMDAwOCAvKiBUWCBGSUZPIGVtcHR5IGludGVycnVwdCAqLwotI2RlZmluZSBYVUFSVFBTX0lTUl9SWEVNUFRZCTB4MDAwMDAwMDIgLyogUlggRklGTyBlbXB0eSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgWFVBUlRQU19JWFJfUlhUUklHCTB4MDAwMDAwMDEgLyogUlggRklGTyB0cmlnZ2VyIGludGVycnVwdCAqLwotI2RlZmluZSBYVUFSVFBTX0lYUl9SWEZVTEwJMHgwMDAwMDAwNCAvKiBSWCBGSUZPIGZ1bGwgaW50ZXJydXB0LiAqLwotI2RlZmluZSBYVUFSVFBTX0lYUl9SWEVNUFRZCTB4MDAwMDAwMDIgLyogUlggRklGTyBlbXB0eSBpbnRlcnJ1cHQuICovCi0jZGVmaW5lIFhVQVJUUFNfSVhSX01BU0sJMHgwMDAwMUZGRiAvKiBWYWxpZCBiaXQgbWFzayAqLworI2RlZmluZSBDRE5TX1VBUlRfSVhSX1RPVVQJMHgwMDAwMDEwMCAvKiBSWCBUaW1lb3V0IGVycm9yIGludGVycnVwdCAqLworI2RlZmluZSBDRE5TX1VBUlRfSVhSX1BBUklUWQkweDAwMDAwMDgwIC8qIFBhcml0eSBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lYUl9GUkFNSU5HCTB4MDAwMDAwNDAgLyogRnJhbWluZyBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lYUl9PVkVSUlVOCTB4MDAwMDAwMjAgLyogT3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX0lYUl9UWEZVTEwJMHgwMDAwMDAxMCAvKiBUWCBGSUZPIEZ1bGwgaW50ZXJydXB0ICovCisjZGVmaW5lIENETlNfVUFSVF9JWFJfVFhFTVBUWQkweDAwMDAwMDA4IC8qIFRYIEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIENETlNfVUFSVF9JU1JfUlhFTVBUWQkweDAwMDAwMDAyIC8qIFJYIEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIENETlNfVUFSVF9JWFJfUlhUUklHCTB4MDAwMDAwMDEgLyogUlggRklGTyB0cmlnZ2VyIGludGVycnVwdCAqLworI2RlZmluZSBDRE5TX1VBUlRfSVhSX1JYRlVMTAkweDAwMDAwMDA0IC8qIFJYIEZJRk8gZnVsbCBpbnRlcnJ1cHQuICovCisjZGVmaW5lIENETlNfVUFSVF9JWFJfUlhFTVBUWQkweDAwMDAwMDAyIC8qIFJYIEZJRk8gZW1wdHkgaW50ZXJydXB0LiAqLworI2RlZmluZSBDRE5TX1VBUlRfSVhSX01BU0sJMHgwMDAwMUZGRiAvKiBWYWxpZCBiaXQgbWFzayAqLwogCiAvKiBHb2VzIGluIHJlYWRfc3RhdHVzX21hc2sgZm9yIGJyZWFrIGRldGVjdGlvbiBhcyB0aGUgSFcgZG9lc24ndCBkbyBpdCovCi0jZGVmaW5lIFhVQVJUUFNfSVhSX0JSSwkJMHg4MDAwMDAwMAorI2RlZmluZSBDRE5TX1VBUlRfSVhSX0JSSwkweDgwMDAwMDAwCiAKLS8qKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlcgotICoKKy8qCisgKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlcjoKICAqIFRoZSBjaGFubmVsIHN0YXR1cyByZWdpc3RlciAoQ1NSKSBpcyBwcm92aWRlZCB0byBlbmFibGUgdGhlIGNvbnRyb2wgbG9naWMKICAqIHRvIG1vbml0b3IgdGhlIHN0YXR1cyBvZiBiaXRzIGluIHRoZSBjaGFubmVsIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCiAgKiBldmVuIGlmIHRoZXNlIGFyZSBtYXNrZWQgb3V0IGJ5IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3Rlci4KICAqLwotI2RlZmluZSBYVUFSVFBTX1NSX1JYRU1QVFkJMHgwMDAwMDAwMiAvKiBSWCBGSUZPIGVtcHR5ICovCi0jZGVmaW5lIFhVQVJUUFNfU1JfVFhFTVBUWQkweDAwMDAwMDA4IC8qIFRYIEZJRk8gZW1wdHkgKi8KLSNkZWZpbmUgWFVBUlRQU19TUl9UWEZVTEwJMHgwMDAwMDAxMCAvKiBUWCBGSUZPIGZ1bGwgKi8KLSNkZWZpbmUgWFVBUlRQU19TUl9SWFRSSUcJMHgwMDAwMDAwMSAvKiBSeCBUcmlnZ2VyICovCisjZGVmaW5lIENETlNfVUFSVF9TUl9SWEVNUFRZCTB4MDAwMDAwMDIgLyogUlggRklGTyBlbXB0eSAqLworI2RlZmluZSBDRE5TX1VBUlRfU1JfVFhFTVBUWQkweDAwMDAwMDA4IC8qIFRYIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgQ0ROU19VQVJUX1NSX1RYRlVMTAkweDAwMDAwMDEwIC8qIFRYIEZJRk8gZnVsbCAqLworI2RlZmluZSBDRE5TX1VBUlRfU1JfUlhUUklHCTB4MDAwMDAwMDEgLyogUnggVHJpZ2dlciAqLwogCiAvKiBiYXVkIGRpdmlkZXJzIG1pbi9tYXggdmFsdWVzICovCi0jZGVmaW5lIFhVQVJUUFNfQkRJVl9NSU4JNAotI2RlZmluZSBYVUFSVFBTX0JESVZfTUFYCTI1NQotI2RlZmluZSBYVUFSVFBTX0NEX01BWAkJNjU1MzUKKyNkZWZpbmUgQ0ROU19VQVJUX0JESVZfTUlOCTQKKyNkZWZpbmUgQ0ROU19VQVJUX0JESVZfTUFYCTI1NQorI2RlZmluZSBDRE5TX1VBUlRfQ0RfTUFYCTY1NTM1CiAKIC8qKgotICogc3RydWN0IHh1YXJ0cHMgLSBkZXZpY2UgZGF0YQotICogQHBvcnQJCVBvaW50ZXIgdG8gdGhlIFVBUlQgcG9ydAotICogQHJlZmNsawkJUmVmZXJlbmNlIGNsb2NrCi0gKiBAYXBlcmNsawkJQVBCIGNsb2NrCi0gKiBAYmF1ZAkJQ3VycmVudCBiYXVkIHJhdGUKLSAqIEBjbGtfcmF0ZV9jaGFuZ2VfbmIJTm90aWZpZXIgYmxvY2sgZm9yIGNsb2NrIGNoYW5nZXMKKyAqIHN0cnVjdCBjZG5zX3VhcnQgLSBkZXZpY2UgZGF0YQorICogQHBvcnQ6CQlQb2ludGVyIHRvIHRoZSBVQVJUIHBvcnQKKyAqIEB1YXJ0Y2xrOgkJUmVmZXJlbmNlIGNsb2NrCisgKiBAcGNsazoJCUFQQiBjbG9jaworICogQGJhdWQ6CQlDdXJyZW50IGJhdWQgcmF0ZQorICogQGNsa19yYXRlX2NoYW5nZV9uYjoJTm90aWZpZXIgYmxvY2sgZm9yIGNsb2NrIGNoYW5nZXMKICAqLwotc3RydWN0IHh1YXJ0cHMgeworc3RydWN0IGNkbnNfdWFydCB7CiAJc3RydWN0IHVhcnRfcG9ydAkqcG9ydDsKLQlzdHJ1Y3QgY2xrCQkqcmVmY2xrOwotCXN0cnVjdCBjbGsJCSphcGVyY2xrOworCXN0cnVjdCBjbGsJCSp1YXJ0Y2xrOworCXN0cnVjdCBjbGsJCSpwY2xrOwogCXVuc2lnbmVkIGludAkJYmF1ZDsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJY2xrX3JhdGVfY2hhbmdlX25iOwogfTsKLSNkZWZpbmUgdG9feHVhcnRwcyhfbmIpIGNvbnRhaW5lcl9vZihfbmIsIHN0cnVjdCB4dWFydHBzLCBjbGtfcmF0ZV9jaGFuZ2VfbmIpOworI2RlZmluZSB0b19jZG5zX3VhcnQoX25iKSBjb250YWluZXJfb2YoX25iLCBzdHJ1Y3QgY2Ruc191YXJ0LCBcCisJCWNsa19yYXRlX2NoYW5nZV9uYik7CiAKIC8qKgotICogeHVhcnRwc19pc3IgLSBJbnRlcnJ1cHQgaGFuZGxlcgorICogY2Ruc191YXJ0X2lzciAtIEludGVycnVwdCBoYW5kbGVyCiAgKiBAaXJxOiBJcnEgbnVtYmVyCiAgKiBAZGV2X2lkOiBJZCBvZiB0aGUgcG9ydAogICoKLSAqIFJldHVybnMgSVJRSEFORExFRAotICoqLwotc3RhdGljIGlycXJldHVybl90IHh1YXJ0cHNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKKyAqIFJldHVybjogSVJRSEFORExFRAorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgY2Ruc191YXJ0X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopZGV2X2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xOTgsNDMgKzE4Niw0MiBAQAogCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIHdoaWNoCiAJICogaW50ZXJydXB0KHMpIGlzL2FyZSBhY3RpdmUuCiAJICovCi0JaXNyc3RhdHVzID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0lTUl9PRkZTRVQpOworCWlzcnN0YXR1cyA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfSVNSX09GRlNFVCk7CiAKIAkvKgogCSAqIFRoZXJlIGlzIG5vIGhhcmR3YXJlIGJyZWFrIGRldGVjdGlvbiwgc28gd2UgaW50ZXJwcmV0IGZyYW1pbmcKIAkgKiBlcnJvciB3aXRoIGFsbC16ZXJvcyBkYXRhIGFzIGEgYnJlYWsgc2VxdWVuY2UuIE1vc3Qgb2YgdGhlIHRpbWUsCiAJICogdGhlcmUncyBhbm90aGVyIG5vbi16ZXJvIGJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuCiAJICovCi0KLQlpZiAoaXNyc3RhdHVzICYgWFVBUlRQU19JWFJfRlJBTUlORykgewotCQl3aGlsZSAoISh4dWFydHBzX3JlYWRsKFhVQVJUUFNfU1JfT0ZGU0VUKSAmCi0JCQkJCVhVQVJUUFNfU1JfUlhFTVBUWSkpIHsKLQkJCWlmICgheHVhcnRwc19yZWFkbChYVUFSVFBTX0ZJRk9fT0ZGU0VUKSkgewotCQkJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gWFVBUlRQU19JWFJfQlJLOwotCQkJCWlzcnN0YXR1cyAmPSB+WFVBUlRQU19JWFJfRlJBTUlORzsKKwlpZiAoaXNyc3RhdHVzICYgQ0ROU19VQVJUX0lYUl9GUkFNSU5HKSB7CisJCXdoaWxlICghKGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfU1JfT0ZGU0VUKSAmCisJCQkJCUNETlNfVUFSVF9TUl9SWEVNUFRZKSkgeworCQkJaWYgKCFjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX0ZJRk9fT0ZGU0VUKSkgeworCQkJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gQ0ROU19VQVJUX0lYUl9CUks7CisJCQkJaXNyc3RhdHVzICY9IH5DRE5TX1VBUlRfSVhSX0ZSQU1JTkc7CiAJCQl9CiAJCX0KLQkJeHVhcnRwc193cml0ZWwoWFVBUlRQU19JWFJfRlJBTUlORywgWFVBUlRQU19JU1JfT0ZGU0VUKTsKKwkJY2Ruc191YXJ0X3dyaXRlbChDRE5TX1VBUlRfSVhSX0ZSQU1JTkcsIENETlNfVUFSVF9JU1JfT0ZGU0VUKTsKIAl9CiAKIAkvKiBkcm9wIGJ5dGUgd2l0aCBwYXJpdHkgZXJyb3IgaWYgSUdOUEFSIHNwZWNpZmllZCAqLwotCWlmIChpc3JzdGF0dXMgJiBwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJiBYVUFSVFBTX0lYUl9QQVJJVFkpCi0JCWlzcnN0YXR1cyAmPSB+KFhVQVJUUFNfSVhSX1JYVFJJRyB8IFhVQVJUUFNfSVhSX1RPVVQpOworCWlmIChpc3JzdGF0dXMgJiBwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJiBDRE5TX1VBUlRfSVhSX1BBUklUWSkKKwkJaXNyc3RhdHVzICY9IH4oQ0ROU19VQVJUX0lYUl9SWFRSSUcgfCBDRE5TX1VBUlRfSVhSX1RPVVQpOwogCiAJaXNyc3RhdHVzICY9IHBvcnQtPnJlYWRfc3RhdHVzX21hc2s7CiAJaXNyc3RhdHVzICY9IH5wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2s7CiAKLQlpZiAoKGlzcnN0YXR1cyAmIFhVQVJUUFNfSVhSX1RPVVQpIHx8Ci0JCShpc3JzdGF0dXMgJiBYVUFSVFBTX0lYUl9SWFRSSUcpKSB7CisJaWYgKChpc3JzdGF0dXMgJiBDRE5TX1VBUlRfSVhSX1RPVVQpIHx8CisJCShpc3JzdGF0dXMgJiBDRE5TX1VBUlRfSVhSX1JYVFJJRykpIHsKIAkJLyogUmVjZWl2ZSBUaW1lb3V0IEludGVycnVwdCAqLwotCQl3aGlsZSAoKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19TUl9PRkZTRVQpICYKLQkJCVhVQVJUUFNfU1JfUlhFTVBUWSkgIT0gWFVBUlRQU19TUl9SWEVNUFRZKSB7Ci0JCQlkYXRhID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwkJd2hpbGUgKChjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX1NSX09GRlNFVCkgJgorCQkJQ0ROU19VQVJUX1NSX1JYRU1QVFkpICE9IENETlNfVUFSVF9TUl9SWEVNUFRZKSB7CisJCQlkYXRhID0gY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9GSUZPX09GRlNFVCk7CiAKIAkJCS8qIE5vbi1OVUxMIGJ5dGUgYWZ0ZXIgQlJFQUsgaXMgZ2FyYmFnZSAoOTklKSAqLwogCQkJaWYgKGRhdGEgJiYgKHBvcnQtPnJlYWRfc3RhdHVzX21hc2sgJgotCQkJCQkJWFVBUlRQU19JWFJfQlJLKSkgewotCQkJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgJj0gflhVQVJUUFNfSVhSX0JSSzsKKwkJCQkJCUNETlNfVUFSVF9JWFJfQlJLKSkgeworCQkJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgJj0gfkNETlNfVUFSVF9JWFJfQlJLOwogCQkJCXBvcnQtPmljb3VudC5icmsrKzsKIAkJCQlpZiAodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCiAJCQkJCWNvbnRpbnVlOwpAQCAtMjU4LDE2ICsyNDUsMTcgQEAKIAogCQkJcG9ydC0+aWNvdW50LnJ4Kys7CiAKLQkJCWlmIChpc3JzdGF0dXMgJiBYVUFSVFBTX0lYUl9QQVJJVFkpIHsKKwkJCWlmIChpc3JzdGF0dXMgJiBDRE5TX1VBUlRfSVhSX1BBUklUWSkgewogCQkJCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKIAkJCQlzdGF0dXMgPSBUVFlfUEFSSVRZOwotCQkJfSBlbHNlIGlmIChpc3JzdGF0dXMgJiBYVUFSVFBTX0lYUl9GUkFNSU5HKSB7CisJCQl9IGVsc2UgaWYgKGlzcnN0YXR1cyAmIENETlNfVUFSVF9JWFJfRlJBTUlORykgewogCQkJCXBvcnQtPmljb3VudC5mcmFtZSsrOwogCQkJCXN0YXR1cyA9IFRUWV9GUkFNRTsKLQkJCX0gZWxzZSBpZiAoaXNyc3RhdHVzICYgWFVBUlRQU19JWFJfT1ZFUlJVTikKKwkJCX0gZWxzZSBpZiAoaXNyc3RhdHVzICYgQ0ROU19VQVJUX0lYUl9PVkVSUlVOKSB7CiAJCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCX0KIAotCQkJdWFydF9pbnNlcnRfY2hhcihwb3J0LCBpc3JzdGF0dXMsIFhVQVJUUFNfSVhSX09WRVJSVU4sCisJCQl1YXJ0X2luc2VydF9jaGFyKHBvcnQsIGlzcnN0YXR1cywgQ0ROU19VQVJUX0lYUl9PVkVSUlVOLAogCQkJCQlkYXRhLCBzdGF0dXMpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKQEAgLTI3NiwxMCArMjY0LDEwIEBACiAJfQogCiAJLyogRGlzcGF0Y2ggYW4gYXBwcm9wcmlhdGUgaGFuZGxlciAqLwotCWlmICgoaXNyc3RhdHVzICYgWFVBUlRQU19JWFJfVFhFTVBUWSkgPT0gWFVBUlRQU19JWFJfVFhFTVBUWSkgeworCWlmICgoaXNyc3RhdHVzICYgQ0ROU19VQVJUX0lYUl9UWEVNUFRZKSA9PSBDRE5TX1VBUlRfSVhSX1RYRU1QVFkpIHsKIAkJaWYgKHVhcnRfY2lyY19lbXB0eSgmcG9ydC0+c3RhdGUtPnhtaXQpKSB7Ci0JCQl4dWFydHBzX3dyaXRlbChYVUFSVFBTX0lYUl9UWEVNUFRZLAotCQkJCQkJWFVBUlRQU19JRFJfT0ZGU0VUKTsKKwkJCWNkbnNfdWFydF93cml0ZWwoQ0ROU19VQVJUX0lYUl9UWEVNUFRZLAorCQkJCQkJQ0ROU19VQVJUX0lEUl9PRkZTRVQpOwogCQl9IGVsc2UgewogCQkJbnVtYnl0ZXMgPSBwb3J0LT5maWZvc2l6ZTsKIAkJCS8qIEJyZWFrIGlmIG5vIG1vcmUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIFVBUlQgYnVmZmVyICovCkBAIC0yODcsMTIgKzI3NSwxMiBAQAogCQkJCWlmICh1YXJ0X2NpcmNfZW1wdHkoJnBvcnQtPnN0YXRlLT54bWl0KSkKIAkJCQkJYnJlYWs7CiAJCQkJLyogR2V0IHRoZSBkYXRhIGZyb20gdGhlIFVBUlQgY2lyY3VsYXIgYnVmZmVyCi0JCQkJICogYW5kIHdyaXRlIGl0IHRvIHRoZSB4dWFydHBzJ3MgVFhfRklGTworCQkJCSAqIGFuZCB3cml0ZSBpdCB0byB0aGUgY2Ruc191YXJ0J3MgVFhfRklGTwogCQkJCSAqIHJlZ2lzdGVyLgogCQkJCSAqLwotCQkJCXh1YXJ0cHNfd3JpdGVsKAorCQkJCWNkbnNfdWFydF93cml0ZWwoCiAJCQkJCXBvcnQtPnN0YXRlLT54bWl0LmJ1Zltwb3J0LT5zdGF0ZS0+eG1pdC4KLQkJCQkJdGFpbF0sIFhVQVJUUFNfRklGT19PRkZTRVQpOworCQkJCQl0YWlsXSwgQ0ROU19VQVJUX0ZJRk9fT0ZGU0VUKTsKIAogCQkJCXBvcnQtPmljb3VudC50eCsrOwogCkBAIC0zMDAsNyArMjg4LDcgQEAKIAkJCQkgKiB0aGUgYnVmZmVyIGlmIGl0IHJlYWNoZXMgbGltaXQuCiAJCQkJICovCiAJCQkJcG9ydC0+c3RhdGUtPnhtaXQudGFpbCA9Ci0JCQkJCShwb3J0LT5zdGF0ZS0+eG1pdC50YWlsICsgMSkgJiBcCisJCQkJCShwb3J0LT5zdGF0ZS0+eG1pdC50YWlsICsgMSkgJgogCQkJCQkJKFVBUlRfWE1JVF9TSVpFIC0gMSk7CiAJCQl9CiAKQEAgLTMxMCw3ICsyOTgsNyBAQAogCQl9CiAJfQogCi0JeHVhcnRwc193cml0ZWwoaXNyc3RhdHVzLCBYVUFSVFBTX0lTUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwoaXNyc3RhdHVzLCBDRE5TX1VBUlRfSVNSX09GRlNFVCk7CiAKIAkvKiBiZSBzdXJlIHRvIHJlbGVhc2UgdGhlIGxvY2sgYW5kIHR0eSBiZWZvcmUgbGVhdmluZyAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTMxOSwxMyArMzA3LDEzIEBACiB9CiAKIC8qKgotICogeHVhcnRwc19jYWxjX2JhdWRfZGl2cyAtIENhbGN1bGF0ZSBiYXVkIHJhdGUgZGl2aXNvcnMKKyAqIGNkbnNfdWFydF9jYWxjX2JhdWRfZGl2cyAtIENhbGN1bGF0ZSBiYXVkIHJhdGUgZGl2aXNvcnMKICAqIEBjbGs6IFVBUlQgbW9kdWxlIGlucHV0IGNsb2NrCiAgKiBAYmF1ZDogRGVzaXJlZCBiYXVkIHJhdGUKICAqIEByYmRpdjogQkRJViB2YWx1ZSAocmV0dXJuIHZhbHVlKQogICogQHJjZDogQ0QgdmFsdWUgKHJldHVybiB2YWx1ZSkKICAqIEBkaXY4OiBWYWx1ZSBmb3IgY2xrX3NlbCBiaXQgaW4gbW9kIChyZXR1cm4gdmFsdWUpCi0gKiBSZXR1cm5zIGJhdWQgcmF0ZSwgcmVxdWVzdGVkIGJhdWQgd2hlbiBwb3NzaWJsZSwgb3IgYWN0dWFsIGJhdWQgd2hlbiB0aGVyZQorICogUmV0dXJuOiBiYXVkIHJhdGUsIHJlcXVlc3RlZCBiYXVkIHdoZW4gcG9zc2libGUsIG9yIGFjdHVhbCBiYXVkIHdoZW4gdGhlcmUKICAqCXdhcyB0b28gbXVjaCBlcnJvciwgemVybyBpZiBubyB2YWxpZCBkaXZpc29ycyBhcmUgZm91bmQuCiAgKgogICogRm9ybXVsYSB0byBvYnRhaW4gYmF1ZCByYXRlIGlzCkBAIC0zMzgsOCArMzI2LDggQEAKICAqCQkJYmF1ZCByYXRlIGdlbmVyYXRlIHJlZ2lzdGVyCiAgKgkJCWJhdWQgcmF0ZSBjbG9jayBkaXZpc29yIHJlZ2lzdGVyCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeHVhcnRwc19jYWxjX2JhdWRfZGl2cyh1bnNpZ25lZCBpbnQgY2xrLCB1bnNpZ25lZCBpbnQgYmF1ZCwKLQkJdTMyICpyYmRpdiwgdTMyICpyY2QsIGludCAqZGl2OCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2Ruc191YXJ0X2NhbGNfYmF1ZF9kaXZzKHVuc2lnbmVkIGludCBjbGssCisJCXVuc2lnbmVkIGludCBiYXVkLCB1MzIgKnJiZGl2LCB1MzIgKnJjZCwgaW50ICpkaXY4KQogewogCXUzMiBjZCwgYmRpdjsKIAl1bnNpZ25lZCBpbnQgY2FsY19iYXVkOwpAQCAtMzQ3LDE2ICszMzUsMTYgQEAKIAl1bnNpZ25lZCBpbnQgYmF1ZGVycm9yOwogCXVuc2lnbmVkIGludCBiZXN0ZXJyb3IgPSB+MDsKIAotCWlmIChiYXVkIDwgY2xrIC8gKChYVUFSVFBTX0JESVZfTUFYICsgMSkgKiBYVUFSVFBTX0NEX01BWCkpIHsKKwlpZiAoYmF1ZCA8IGNsayAvICgoQ0ROU19VQVJUX0JESVZfTUFYICsgMSkgKiBDRE5TX1VBUlRfQ0RfTUFYKSkgewogCQkqZGl2OCA9IDE7CiAJCWNsayAvPSA4OwogCX0gZWxzZSB7CiAJCSpkaXY4ID0gMDsKIAl9CiAKLQlmb3IgKGJkaXYgPSBYVUFSVFBTX0JESVZfTUlOOyBiZGl2IDw9IFhVQVJUUFNfQkRJVl9NQVg7IGJkaXYrKykgeworCWZvciAoYmRpdiA9IENETlNfVUFSVF9CRElWX01JTjsgYmRpdiA8PSBDRE5TX1VBUlRfQkRJVl9NQVg7IGJkaXYrKykgewogCQljZCA9IERJVl9ST1VORF9DTE9TRVNUKGNsaywgYmF1ZCAqIChiZGl2ICsgMSkpOwotCQlpZiAoY2QgPCAxIHx8IGNkID4gWFVBUlRQU19DRF9NQVgpCisJCWlmIChjZCA8IDEgfHwgY2QgPiBDRE5TX1VBUlRfQ0RfTUFYKQogCQkJY29udGludWU7CiAKIAkJY2FsY19iYXVkID0gY2xrIC8gKGNkICogKGJkaXYgKyAxKSk7CkBAIC0zODEsNDcgKzM2OSw0NyBAQAogfQogCiAvKioKLSAqIHh1YXJ0cHNfc2V0X2JhdWRfcmF0ZSAtIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBiYXVkIHJhdGUKKyAqIGNkbnNfdWFydF9zZXRfYmF1ZF9yYXRlIC0gQ2FsY3VsYXRlIGFuZCBzZXQgdGhlIGJhdWQgcmF0ZQogICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQogICogQGJhdWQ6IEJhdWQgcmF0ZSB0byBzZXQKLSAqIFJldHVybnMgYmF1ZCByYXRlLCByZXF1ZXN0ZWQgYmF1ZCB3aGVuIHBvc3NpYmxlLCBvciBhY3R1YWwgYmF1ZCB3aGVuIHRoZXJlCisgKiBSZXR1cm46IGJhdWQgcmF0ZSwgcmVxdWVzdGVkIGJhdWQgd2hlbiBwb3NzaWJsZSwgb3IgYWN0dWFsIGJhdWQgd2hlbiB0aGVyZQogICoJICAgd2FzIHRvbyBtdWNoIGVycm9yLCB6ZXJvIGlmIG5vIHZhbGlkIGRpdmlzb3JzIGFyZSBmb3VuZC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCB4dWFydHBzX3NldF9iYXVkX3JhdGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2Ruc191YXJ0X3NldF9iYXVkX3JhdGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKIAkJdW5zaWduZWQgaW50IGJhdWQpCiB7CiAJdW5zaWduZWQgaW50IGNhbGNfYmF1ZDsKIAl1MzIgY2QgPSAwLCBiZGl2ID0gMDsKIAl1MzIgbXJlZzsKIAlpbnQgZGl2ODsKLQlzdHJ1Y3QgeHVhcnRwcyAqeHVhcnRwcyA9IHBvcnQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2Ruc191YXJ0ICpjZG5zX3VhcnQgPSBwb3J0LT5wcml2YXRlX2RhdGE7CiAKLQljYWxjX2JhdWQgPSB4dWFydHBzX2NhbGNfYmF1ZF9kaXZzKHBvcnQtPnVhcnRjbGssIGJhdWQsICZiZGl2LCAmY2QsCisJY2FsY19iYXVkID0gY2Ruc191YXJ0X2NhbGNfYmF1ZF9kaXZzKHBvcnQtPnVhcnRjbGssIGJhdWQsICZiZGl2LCAmY2QsCiAJCQkmZGl2OCk7CiAKIAkvKiBXcml0ZSBuZXcgZGl2aXNvcnMgdG8gaGFyZHdhcmUgKi8KLQltcmVnID0geHVhcnRwc19yZWFkbChYVUFSVFBTX01SX09GRlNFVCk7CisJbXJlZyA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfTVJfT0ZGU0VUKTsKIAlpZiAoZGl2OCkKLQkJbXJlZyB8PSBYVUFSVFBTX01SX0NMS1NFTDsKKwkJbXJlZyB8PSBDRE5TX1VBUlRfTVJfQ0xLU0VMOwogCWVsc2UKLQkJbXJlZyAmPSB+WFVBUlRQU19NUl9DTEtTRUw7Ci0JeHVhcnRwc193cml0ZWwobXJlZywgWFVBUlRQU19NUl9PRkZTRVQpOwotCXh1YXJ0cHNfd3JpdGVsKGNkLCBYVUFSVFBTX0JBVURHRU5fT0ZGU0VUKTsKLQl4dWFydHBzX3dyaXRlbChiZGl2LCBYVUFSVFBTX0JBVURESVZfT0ZGU0VUKTsKLQl4dWFydHBzLT5iYXVkID0gYmF1ZDsKKwkJbXJlZyAmPSB+Q0ROU19VQVJUX01SX0NMS1NFTDsKKwljZG5zX3VhcnRfd3JpdGVsKG1yZWcsIENETlNfVUFSVF9NUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwoY2QsIENETlNfVUFSVF9CQVVER0VOX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChiZGl2LCBDRE5TX1VBUlRfQkFVRERJVl9PRkZTRVQpOworCWNkbnNfdWFydC0+YmF1ZCA9IGJhdWQ7CiAKIAlyZXR1cm4gY2FsY19iYXVkOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKIC8qKgotICogeHVhcnRwc19jbGtfbm90aXRpZmVyX2NiIC0gQ2xvY2sgbm90aWZpZXIgY2FsbGJhY2sKKyAqIGNkbnNfdWFydF9jbGtfbm90aXRpZmVyX2NiIC0gQ2xvY2sgbm90aWZpZXIgY2FsbGJhY2sKICAqIEBuYjoJCU5vdGlmaWVyIGJsb2NrCiAgKiBAZXZlbnQ6CU5vdGlmeSBldmVudAogICogQGRhdGE6CU5vdGlmaWVyIGRhdGEKLSAqIFJldHVybnMgTk9USUZZX09LIG9uIHN1Y2Nlc3MsIE5PVElGWV9CQUQgb24gZXJyb3IuCisgKiBSZXR1cm46CU5PVElGWV9PSyBvciBOT1RJRllfRE9ORSBvbiBzdWNjZXNzLCBOT1RJRllfQkFEIG9uIGVycm9yLgogICovCi1zdGF0aWMgaW50IHh1YXJ0cHNfY2xrX25vdGlmaWVyX2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCitzdGF0aWMgaW50IGNkbnNfdWFydF9jbGtfbm90aWZpZXJfY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKIHsKIAl1MzIgY3RybF9yZWc7CkBAIC00MjksMzUgKzQxNywzNiBAQAogCWludCBsb2NrZWQgPSAwOwogCXN0cnVjdCBjbGtfbm90aWZpZXJfZGF0YSAqbmRhdGEgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCXN0cnVjdCB4dWFydHBzICp4dWFydHBzID0gdG9feHVhcnRwcyhuYik7CisJc3RydWN0IGNkbnNfdWFydCAqY2Ruc191YXJ0ID0gdG9fY2Ruc191YXJ0KG5iKTsKIAotCXBvcnQgPSB4dWFydHBzLT5wb3J0OworCXBvcnQgPSBjZG5zX3VhcnQtPnBvcnQ7CiAJaWYgKHBvcnQtPnN1c3BlbmRlZCkKIAkJcmV0dXJuIE5PVElGWV9PSzsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFBSRV9SQVRFX0NIQU5HRToKIAl7Ci0JCXUzMiBiZGl2OwotCQl1MzIgY2Q7CisJCXUzMiBiZGl2LCBjZDsKIAkJaW50IGRpdjg7CiAKIAkJLyoKIAkJICogRmluZCBvdXQgaWYgY3VycmVudCBiYXVkLXJhdGUgY2FuIGJlIGFjaGlldmVkIHdpdGggbmV3IGNsb2NrCiAJCSAqIGZyZXF1ZW5jeS4KIAkJICovCi0JCWlmICgheHVhcnRwc19jYWxjX2JhdWRfZGl2cyhuZGF0YS0+bmV3X3JhdGUsIHh1YXJ0cHMtPmJhdWQsCi0JCQkJCSZiZGl2LCAmY2QsICZkaXY4KSkKKwkJaWYgKCFjZG5zX3VhcnRfY2FsY19iYXVkX2RpdnMobmRhdGEtPm5ld19yYXRlLCBjZG5zX3VhcnQtPmJhdWQsCisJCQkJCSZiZGl2LCAmY2QsICZkaXY4KSkgeworCQkJZGV2X3dhcm4ocG9ydC0+ZGV2LCAiY2xvY2sgcmF0ZSBjaGFuZ2UgcmVqZWN0ZWRcbiIpOwogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCX0KIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmeHVhcnRwcy0+cG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2Ruc191YXJ0LT5wb3J0LT5sb2NrLCBmbGFncyk7CiAKIAkJLyogRGlzYWJsZSB0aGUgVFggYW5kIFJYIHRvIHNldCBiYXVkIHJhdGUgKi8KLQkJeHVhcnRwc193cml0ZWwoeHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCkgfAotCQkJCShYVUFSVFBTX0NSX1RYX0RJUyB8IFhVQVJUUFNfQ1JfUlhfRElTKSwKLQkJCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJCWN0cmxfcmVnID0gY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9DUl9PRkZTRVQpOworCQljdHJsX3JlZyB8PSBDRE5TX1VBUlRfQ1JfVFhfRElTIHwgQ0ROU19VQVJUX0NSX1JYX0RJUzsKKwkJY2Ruc191YXJ0X3dyaXRlbChjdHJsX3JlZywgQ0ROU19VQVJUX0NSX09GRlNFVCk7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeHVhcnRwcy0+cG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZG5zX3VhcnQtPnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCQlyZXR1cm4gTk9USUZZX09LOwogCX0KQEAgLTQ2NywyNSArNDU2LDI1IEBACiAJCSAqIGZyZXF1ZW5jeS4KIAkJICovCiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnh1YXJ0cHMtPnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNkbnNfdWFydC0+cG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJCWxvY2tlZCA9IDE7CiAJCXBvcnQtPnVhcnRjbGsgPSBuZGF0YS0+bmV3X3JhdGU7CiAKLQkJeHVhcnRwcy0+YmF1ZCA9IHh1YXJ0cHNfc2V0X2JhdWRfcmF0ZSh4dWFydHBzLT5wb3J0LAotCQkJCXh1YXJ0cHMtPmJhdWQpOworCQljZG5zX3VhcnQtPmJhdWQgPSBjZG5zX3VhcnRfc2V0X2JhdWRfcmF0ZShjZG5zX3VhcnQtPnBvcnQsCisJCQkJY2Ruc191YXJ0LT5iYXVkKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBQk9SVF9SQVRFX0NIQU5HRToKIAkJaWYgKCFsb2NrZWQpCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmeHVhcnRwcy0+cG9ydC0+bG9jaywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNkbnNfdWFydC0+cG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJCS8qIFNldCBUWC9SWCBSZXNldCAqLwotCQl4dWFydHBzX3dyaXRlbCh4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKSB8Ci0JCQkJKFhVQVJUUFNfQ1JfVFhSU1QgfCBYVUFSVFBTX0NSX1JYUlNUKSwKLQkJCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJCWN0cmxfcmVnID0gY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9DUl9PRkZTRVQpOworCQljdHJsX3JlZyB8PSBDRE5TX1VBUlRfQ1JfVFhSU1QgfCBDRE5TX1VBUlRfQ1JfUlhSU1Q7CisJCWNkbnNfdWFydF93cml0ZWwoY3RybF9yZWcsIENETlNfVUFSVF9DUl9PRkZTRVQpOwogCi0JCXdoaWxlICh4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKSAmCi0JCQkJKFhVQVJUUFNfQ1JfVFhSU1QgfCBYVUFSVFBTX0NSX1JYUlNUKSkKKwkJd2hpbGUgKGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKSAmCisJCQkJKENETlNfVUFSVF9DUl9UWFJTVCB8IENETlNfVUFSVF9DUl9SWFJTVCkpCiAJCQljcHVfcmVsYXgoKTsKIAogCQkvKgpAQCAtNDkzLDE0ICs0ODIsMTMgQEAKIAkJICogZW5hYmxlIGJpdCBhbmQgUlggZW5hYmxlIGJpdCB0byBlbmFibGUgdGhlIHRyYW5zbWl0dGVyIGFuZAogCQkgKiByZWNlaXZlci4KIAkJICovCi0JCXh1YXJ0cHNfd3JpdGVsKHJ4X3RpbWVvdXQsIFhVQVJUUFNfUlhUT1VUX09GRlNFVCk7Ci0JCWN0cmxfcmVnID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCk7Ci0JCXh1YXJ0cHNfd3JpdGVsKAotCQkJKGN0cmxfcmVnICYgfihYVUFSVFBTX0NSX1RYX0RJUyB8IFhVQVJUUFNfQ1JfUlhfRElTKSkgfAotCQkJKFhVQVJUUFNfQ1JfVFhfRU4gfCBYVUFSVFBTX0NSX1JYX0VOKSwKLQkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwkJY2Ruc191YXJ0X3dyaXRlbChyeF90aW1lb3V0LCBDRE5TX1VBUlRfUlhUT1VUX09GRlNFVCk7CisJCWN0cmxfcmVnID0gY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9DUl9PRkZTRVQpOworCQljdHJsX3JlZyAmPSB+KENETlNfVUFSVF9DUl9UWF9ESVMgfCBDRE5TX1VBUlRfQ1JfUlhfRElTKTsKKwkJY3RybF9yZWcgfD0gQ0ROU19VQVJUX0NSX1RYX0VOIHwgQ0ROU19VQVJUX0NSX1JYX0VOOworCQljZG5zX3VhcnRfd3JpdGVsKGN0cmxfcmVnLCBDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4dWFydHBzLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNkbnNfdWFydC0+cG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJCXJldHVybiBOT1RJRllfT0s7CiAJZGVmYXVsdDoKQEAgLTUwOSw0MCArNDk3LDM2IEBACiB9CiAjZW5kaWYKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tVWFydCBPcGVyYXRpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoqCi0gKiB4dWFydHBzX3N0YXJ0X3R4IC0gIFN0YXJ0IHRyYW5zbWl0dGluZyBieXRlcworICogY2Ruc191YXJ0X3N0YXJ0X3R4IC0gIFN0YXJ0IHRyYW5zbWl0dGluZyBieXRlcwogICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQotICoKLSAqKi8KLXN0YXRpYyB2b2lkIHh1YXJ0cHNfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKKyAqLworc3RhdGljIHZvaWQgY2Ruc191YXJ0X3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgbnVtYnl0ZXMgPSBwb3J0LT5maWZvc2l6ZTsKIAogCWlmICh1YXJ0X2NpcmNfZW1wdHkoJnBvcnQtPnN0YXRlLT54bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQocG9ydCkpCiAJCXJldHVybjsKIAotCXN0YXR1cyA9IHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpOworCXN0YXR1cyA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAkvKiBTZXQgdGhlIFRYIGVuYWJsZSBiaXQgYW5kIGNsZWFyIHRoZSBUWCBkaXNhYmxlIGJpdCB0byBlbmFibGUgdGhlCiAJICogdHJhbnNtaXR0ZXIuCiAJICovCi0JeHVhcnRwc193cml0ZWwoKHN0YXR1cyAmIH5YVUFSVFBTX0NSX1RYX0RJUykgfCBYVUFSVFBTX0NSX1RYX0VOLAotCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbCgoc3RhdHVzICYgfkNETlNfVUFSVF9DUl9UWF9ESVMpIHwgQ0ROU19VQVJUX0NSX1RYX0VOLAorCQlDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAotCXdoaWxlIChudW1ieXRlcy0tICYmICgoeHVhcnRwc19yZWFkbChYVUFSVFBTX1NSX09GRlNFVCkKLQkJJiBYVUFSVFBTX1NSX1RYRlVMTCkpICE9IFhVQVJUUFNfU1JfVFhGVUxMKSB7Ci0KKwl3aGlsZSAobnVtYnl0ZXMtLSAmJiAoKGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfU1JfT0ZGU0VUKSAmCisJCQkJQ0ROU19VQVJUX1NSX1RYRlVMTCkpICE9IENETlNfVUFSVF9TUl9UWEZVTEwpIHsKIAkJLyogQnJlYWsgaWYgbm8gbW9yZSBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgVUFSVCBidWZmZXIgKi8KIAkJaWYgKHVhcnRfY2lyY19lbXB0eSgmcG9ydC0+c3RhdGUtPnhtaXQpKQogCQkJYnJlYWs7CiAKIAkJLyogR2V0IHRoZSBkYXRhIGZyb20gdGhlIFVBUlQgY2lyY3VsYXIgYnVmZmVyIGFuZAotCQkgKiB3cml0ZSBpdCB0byB0aGUgeHVhcnRwcydzIFRYX0ZJRk8gcmVnaXN0ZXIuCisJCSAqIHdyaXRlIGl0IHRvIHRoZSBjZG5zX3VhcnQncyBUWF9GSUZPIHJlZ2lzdGVyLgogCQkgKi8KLQkJeHVhcnRwc193cml0ZWwoCisJCWNkbnNfdWFydF93cml0ZWwoCiAJCQlwb3J0LT5zdGF0ZS0+eG1pdC5idWZbcG9ydC0+c3RhdGUtPnhtaXQudGFpbF0sCi0JCQlYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwkJCUNETlNfVUFSVF9GSUZPX09GRlNFVCk7CiAJCXBvcnQtPmljb3VudC50eCsrOwogCiAJCS8qIEFkanVzdCB0aGUgdGFpbCBvZiB0aGUgVUFSVCBidWZmZXIgYW5kIHdyYXAKQEAgLTU1MSw5NCArNTM1LDkwIEBACiAJCXBvcnQtPnN0YXRlLT54bWl0LnRhaWwgPSAocG9ydC0+c3RhdGUtPnhtaXQudGFpbCArIDEpICYKIAkJCQkJKFVBUlRfWE1JVF9TSVpFIC0gMSk7CiAJfQotCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfSVhSX1RYRU1QVFksIFhVQVJUUFNfSVNSX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChDRE5TX1VBUlRfSVhSX1RYRU1QVFksIENETlNfVUFSVF9JU1JfT0ZGU0VUKTsKIAkvKiBFbmFibGUgdGhlIFRYIEVtcHR5IGludGVycnVwdCAqLwotCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfSVhSX1RYRU1QVFksIFhVQVJUUFNfSUVSX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChDRE5TX1VBUlRfSVhSX1RYRU1QVFksIENETlNfVUFSVF9JRVJfT0ZGU0VUKTsKIAogCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmcG9ydC0+c3RhdGUtPnhtaXQpIDwgV0FLRVVQX0NIQVJTKQogCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKIH0KIAogLyoqCi0gKiB4dWFydHBzX3N0b3BfdHggLSBTdG9wIFRYCisgKiBjZG5zX3VhcnRfc3RvcF90eCAtIFN0b3AgVFgKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKLSAqCi0gKiovCi1zdGF0aWMgdm9pZCB4dWFydHBzX3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKKyAqLworc3RhdGljIHZvaWQgY2Ruc191YXJ0X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVndmFsOwogCi0JcmVndmFsID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCk7Ci0JcmVndmFsIHw9IFhVQVJUUFNfQ1JfVFhfRElTOworCXJlZ3ZhbCA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKKwlyZWd2YWwgfD0gQ0ROU19VQVJUX0NSX1RYX0RJUzsKIAkvKiBEaXNhYmxlIHRoZSB0cmFuc21pdHRlciAqLwotCXh1YXJ0cHNfd3JpdGVsKHJlZ3ZhbCwgWFVBUlRQU19DUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwocmVndmFsLCBDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIH0KIAogLyoqCi0gKiB4dWFydHBzX3N0b3BfcnggLSBTdG9wIFJYCisgKiBjZG5zX3VhcnRfc3RvcF9yeCAtIFN0b3AgUlgKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKLSAqCi0gKiovCi1zdGF0aWMgdm9pZCB4dWFydHBzX3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKKyAqLworc3RhdGljIHZvaWQgY2Ruc191YXJ0X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVndmFsOwogCi0JcmVndmFsID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCk7Ci0JcmVndmFsIHw9IFhVQVJUUFNfQ1JfUlhfRElTOworCXJlZ3ZhbCA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKKwlyZWd2YWwgfD0gQ0ROU19VQVJUX0NSX1JYX0RJUzsKIAkvKiBEaXNhYmxlIHRoZSByZWNlaXZlciAqLwotCXh1YXJ0cHNfd3JpdGVsKHJlZ3ZhbCwgWFVBUlRQU19DUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwocmVndmFsLCBDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIH0KIAogLyoqCi0gKiB4dWFydHBzX3R4X2VtcHR5IC0gIENoZWNrIHdoZXRoZXIgVFggaXMgZW1wdHkKKyAqIGNkbnNfdWFydF90eF9lbXB0eSAtICBDaGVjayB3aGV0aGVyIFRYIGlzIGVtcHR5CiAgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCiAgKgotICogUmV0dXJucyBUSU9DU0VSX1RFTVQgb24gc3VjY2VzcywgMCBvdGhlcndpc2UKLSAqKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeHVhcnRwc190eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorICogUmV0dXJuOiBUSU9DU0VSX1RFTVQgb24gc3VjY2VzcywgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjZG5zX3VhcnRfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0lTUl9PRkZTRVQpICYgWFVBUlRQU19JWFJfVFhFTVBUWTsKKwlzdGF0dXMgPSBjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX0lTUl9PRkZTRVQpICYgQ0ROU19VQVJUX0lYUl9UWEVNUFRZOwogCXJldHVybiBzdGF0dXMgPyBUSU9DU0VSX1RFTVQgOiAwOwogfQogCiAvKioKLSAqIHh1YXJ0cHNfYnJlYWtfY3RsIC0gQmFzZWQgb24gdGhlIGlucHV0IGN0bCB3ZSBoYXZlIHRvIHN0YXJ0IG9yIHN0b3AKKyAqIGNkbnNfdWFydF9icmVha19jdGwgLSBCYXNlZCBvbiB0aGUgaW5wdXQgY3RsIHdlIGhhdmUgdG8gc3RhcnQgb3Igc3RvcAogICoJCQl0cmFuc21pdHRpbmcgY2hhciBicmVha3MKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKICAqIEBjdGw6IFZhbHVlIGJhc2VkIG9uIHdoaWNoIHN0YXJ0IG9yIHN0b3AgZGVjaXNpb24gaXMgdGFrZW4KLSAqCi0gKiovCi1zdGF0aWMgdm9pZCB4dWFydHBzX2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY3RsKQorICovCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjdGwpCiB7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAotCXN0YXR1cyA9IHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpOworCXN0YXR1cyA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAogCWlmIChjdGwgPT0gLTEpCi0JCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfQ1JfU1RBUlRCUksgfCBzdGF0dXMsCi0JCQkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwkJY2Ruc191YXJ0X3dyaXRlbChDRE5TX1VBUlRfQ1JfU1RBUlRCUksgfCBzdGF0dXMsCisJCQkJCUNETlNfVUFSVF9DUl9PRkZTRVQpOwogCWVsc2UgewotCQlpZiAoKHN0YXR1cyAmIFhVQVJUUFNfQ1JfU1RPUEJSSykgPT0gMCkKLQkJCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfQ1JfU1RPUEJSSyB8IHN0YXR1cywKLQkJCQkJIFhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwkJaWYgKChzdGF0dXMgJiBDRE5TX1VBUlRfQ1JfU1RPUEJSSykgPT0gMCkKKwkJCWNkbnNfdWFydF93cml0ZWwoQ0ROU19VQVJUX0NSX1NUT1BCUksgfCBzdGF0dXMsCisJCQkJCSBDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHh1YXJ0cHNfc2V0X3Rlcm1pb3MgLSB0ZXJtaW9zIG9wZXJhdGlvbnMsIGhhbmRsaW5nIGRhdGEgbGVuZ3RoLCBwYXJpdHksCisgKiBjZG5zX3VhcnRfc2V0X3Rlcm1pb3MgLSB0ZXJtaW9zIG9wZXJhdGlvbnMsIGhhbmRsaW5nIGRhdGEgbGVuZ3RoLCBwYXJpdHksCiAgKgkJCQlzdG9wIGJpdHMsIGZsb3cgY29udHJvbCwgYmF1ZCByYXRlCiAgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCiAgKiBAdGVybWlvczogSGFuZGxlIHRvIHRoZSBpbnB1dCB0ZXJtaW9zIHN0cnVjdHVyZQogICogQG9sZDogVmFsdWVzIG9mIHRoZSBwcmV2aW91c2x5IHNhdmVkIHRlcm1pb3Mgc3RydWN0dXJlCi0gKgotICoqLwotc3RhdGljIHZvaWQgeHVhcnRwc19zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorICovCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXVuc2lnbmVkIGludCBjdmFsID0gMDsKQEAgLTY0OSw4MSArNjI5LDc5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIEVtcHR5IHRoZSByZWNlaXZlIEZJRk8gMXN0IGJlZm9yZSBtYWtpbmcgY2hhbmdlcyAqLwotCXdoaWxlICgoeHVhcnRwc19yZWFkbChYVUFSVFBTX1NSX09GRlNFVCkgJgotCQkgWFVBUlRQU19TUl9SWEVNUFRZKSAhPSBYVUFSVFBTX1NSX1JYRU1QVFkpIHsKLQkJeHVhcnRwc19yZWFkbChYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwl3aGlsZSAoKGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfU1JfT0ZGU0VUKSAmCisJCSBDRE5TX1VBUlRfU1JfUlhFTVBUWSkgIT0gQ0ROU19VQVJUX1NSX1JYRU1QVFkpIHsKKwkJY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9GSUZPX09GRlNFVCk7CiAJfQogCiAJLyogRGlzYWJsZSB0aGUgVFggYW5kIFJYIHRvIHNldCBiYXVkIHJhdGUgKi8KLQl4dWFydHBzX3dyaXRlbCh4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKSB8Ci0JCQkoWFVBUlRQU19DUl9UWF9ESVMgfCBYVUFSVFBTX0NSX1JYX0RJUyksCi0JCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJY3RybF9yZWcgPSBjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX0NSX09GRlNFVCk7CisJY3RybF9yZWcgfD0gQ0ROU19VQVJUX0NSX1RYX0RJUyB8IENETlNfVUFSVF9DUl9SWF9ESVM7CisJY2Ruc191YXJ0X3dyaXRlbChjdHJsX3JlZywgQ0ROU19VQVJUX0NSX09GRlNFVCk7CiAKIAkvKgogCSAqIE1pbiBiYXVkIHJhdGUgPSA2YnBzIGFuZCBNYXggQmF1ZCBSYXRlIGlzIDEwTWJwcyBmb3IgMTAwTWh6IGNsawogCSAqIG1pbiBhbmQgbWF4IGJhdWQgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgaGVyZSBiYXNlZCBvbiBwb3J0LT51YXJ0Y2xrLgogCSAqIHRoaXMgd2F5IHdlIGdldCBhIHZhbGlkIGJhdWQgYW5kIGNhbiBzYWZlbHkgY2FsbCBzZXRfYmF1ZCgpCiAJICovCi0JbWluYmF1ZCA9IHBvcnQtPnVhcnRjbGsgLyAoKFhVQVJUUFNfQkRJVl9NQVggKyAxKSAqIFhVQVJUUFNfQ0RfTUFYICogOCk7Ci0JbWF4YmF1ZCA9IHBvcnQtPnVhcnRjbGsgLyAoWFVBUlRQU19CRElWX01JTiArIDEpOworCW1pbmJhdWQgPSBwb3J0LT51YXJ0Y2xrIC8KKwkJCSgoQ0ROU19VQVJUX0JESVZfTUFYICsgMSkgKiBDRE5TX1VBUlRfQ0RfTUFYICogOCk7CisJbWF4YmF1ZCA9IHBvcnQtPnVhcnRjbGsgLyAoQ0ROU19VQVJUX0JESVZfTUlOICsgMSk7CiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIG1pbmJhdWQsIG1heGJhdWQpOwotCWJhdWQgPSB4dWFydHBzX3NldF9iYXVkX3JhdGUocG9ydCwgYmF1ZCk7CisJYmF1ZCA9IGNkbnNfdWFydF9zZXRfYmF1ZF9yYXRlKHBvcnQsIGJhdWQpOwogCWlmICh0dHlfdGVybWlvc19iYXVkX3JhdGUodGVybWlvcykpCiAJCXR0eV90ZXJtaW9zX2VuY29kZV9iYXVkX3JhdGUodGVybWlvcywgYmF1ZCwgYmF1ZCk7CiAKLQkvKgotCSAqIFVwZGF0ZSB0aGUgcGVyLXBvcnQgdGltZW91dC4KLQkgKi8KKwkvKiBVcGRhdGUgdGhlIHBlci1wb3J0IHRpbWVvdXQuICovCiAJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKIAogCS8qIFNldCBUWC9SWCBSZXNldCAqLwotCXh1YXJ0cHNfd3JpdGVsKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpIHwKLQkJCShYVUFSVFBTX0NSX1RYUlNUIHwgWFVBUlRQU19DUl9SWFJTVCksCi0JCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJY3RybF9yZWcgPSBjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX0NSX09GRlNFVCk7CisJY3RybF9yZWcgfD0gQ0ROU19VQVJUX0NSX1RYUlNUIHwgQ0ROU19VQVJUX0NSX1JYUlNUOworCWNkbnNfdWFydF93cml0ZWwoY3RybF9yZWcsIENETlNfVUFSVF9DUl9PRkZTRVQpOwogCi0JY3RybF9yZWcgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKTsKLQotCS8qIENsZWFyIHRoZSBSWCBkaXNhYmxlIGFuZCBUWCBkaXNhYmxlIGJpdHMgYW5kIHRoZW4gc2V0IHRoZSBUWCBlbmFibGUKKwkvKgorCSAqIENsZWFyIHRoZSBSWCBkaXNhYmxlIGFuZCBUWCBkaXNhYmxlIGJpdHMgYW5kIHRoZW4gc2V0IHRoZSBUWCBlbmFibGUKIAkgKiBiaXQgYW5kIFJYIGVuYWJsZSBiaXQgdG8gZW5hYmxlIHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIuCiAJICovCi0JeHVhcnRwc193cml0ZWwoCi0JCShjdHJsX3JlZyAmIH4oWFVBUlRQU19DUl9UWF9ESVMgfCBYVUFSVFBTX0NSX1JYX0RJUykpCi0JCQl8IChYVUFSVFBTX0NSX1RYX0VOIHwgWFVBUlRQU19DUl9SWF9FTiksCi0JCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJY3RybF9yZWcgPSBjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX0NSX09GRlNFVCk7CisJY3RybF9yZWcgJj0gfihDRE5TX1VBUlRfQ1JfVFhfRElTIHwgQ0ROU19VQVJUX0NSX1JYX0RJUyk7CisJY3RybF9yZWcgfD0gQ0ROU19VQVJUX0NSX1RYX0VOIHwgQ0ROU19VQVJUX0NSX1JYX0VOOworCWNkbnNfdWFydF93cml0ZWwoY3RybF9yZWcsIENETlNfVUFSVF9DUl9PRkZTRVQpOwogCi0JeHVhcnRwc193cml0ZWwocnhfdGltZW91dCwgWFVBUlRQU19SWFRPVVRfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKHJ4X3RpbWVvdXQsIENETlNfVUFSVF9SWFRPVVRfT0ZGU0VUKTsKIAotCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgPSBYVUFSVFBTX0lYUl9UWEVNUFRZIHwgWFVBUlRQU19JWFJfUlhUUklHIHwKLQkJCVhVQVJUUFNfSVhSX09WRVJSVU4gfCBYVUFSVFBTX0lYUl9UT1VUOworCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgPSBDRE5TX1VBUlRfSVhSX1RYRU1QVFkgfCBDRE5TX1VBUlRfSVhSX1JYVFJJRyB8CisJCQlDRE5TX1VBUlRfSVhSX09WRVJSVU4gfCBDRE5TX1VBUlRfSVhSX1RPVVQ7CiAJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKIAogCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCi0JCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gWFVBUlRQU19JWFJfUEFSSVRZIHwKLQkJWFVBUlRQU19JWFJfRlJBTUlORzsKKwkJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayB8PSBDRE5TX1VBUlRfSVhSX1BBUklUWSB8CisJCUNETlNfVUFSVF9JWFJfRlJBTUlORzsKIAogCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQotCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gWFVBUlRQU19JWFJfUEFSSVRZIHwKLQkJCVhVQVJUUFNfSVhSX0ZSQU1JTkcgfCBYVUFSVFBTX0lYUl9PVkVSUlVOOworCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gQ0ROU19VQVJUX0lYUl9QQVJJVFkgfAorCQkJQ0ROU19VQVJUX0lYUl9GUkFNSU5HIHwgQ0ROU19VQVJUX0lYUl9PVkVSUlVOOwogCiAJLyogaWdub3JlIGFsbCBjaGFyYWN0ZXJzIGlmIENSRUFEIGlzIG5vdCBzZXQgKi8KIAlpZiAoKHRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkgPT0gMCkKLQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFhVQVJUUFNfSVhSX1JYVFJJRyB8Ci0JCQlYVUFSVFBTX0lYUl9UT1VUIHwgWFVBUlRQU19JWFJfUEFSSVRZIHwKLQkJCVhVQVJUUFNfSVhSX0ZSQU1JTkcgfCBYVUFSVFBTX0lYUl9PVkVSUlVOOworCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gQ0ROU19VQVJUX0lYUl9SWFRSSUcgfAorCQkJQ0ROU19VQVJUX0lYUl9UT1VUIHwgQ0ROU19VQVJUX0lYUl9QQVJJVFkgfAorCQkJQ0ROU19VQVJUX0lYUl9GUkFNSU5HIHwgQ0ROU19VQVJUX0lYUl9PVkVSUlVOOwogCi0JbW9kZV9yZWcgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfTVJfT0ZGU0VUKTsKKwltb2RlX3JlZyA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfTVJfT0ZGU0VUKTsKIAogCS8qIEhhbmRsaW5nIERhdGEgU2l6ZSAqLwogCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CiAJY2FzZSBDUzY6Ci0JCWN2YWwgfD0gWFVBUlRQU19NUl9DSEFSTEVOXzZfQklUOworCQljdmFsIHw9IENETlNfVUFSVF9NUl9DSEFSTEVOXzZfQklUOwogCQlicmVhazsKIAljYXNlIENTNzoKLQkJY3ZhbCB8PSBYVUFSVFBTX01SX0NIQVJMRU5fN19CSVQ7CisJCWN2YWwgfD0gQ0ROU19VQVJUX01SX0NIQVJMRU5fN19CSVQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJY2FzZSBDUzg6Ci0JCWN2YWwgfD0gWFVBUlRQU19NUl9DSEFSTEVOXzhfQklUOworCQljdmFsIHw9IENETlNfVUFSVF9NUl9DSEFSTEVOXzhfQklUOwogCQl0ZXJtaW9zLT5jX2NmbGFnICY9IH5DU0laRTsKIAkJdGVybWlvcy0+Y19jZmxhZyB8PSBDUzg7CiAJCWJyZWFrOwpAQCAtNzMxLDEzNCArNzA5LDEzNSBAQAogCiAJLyogSGFuZGxpbmcgUGFyaXR5IGFuZCBTdG9wIEJpdHMgbGVuZ3RoICovCiAJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpCi0JCWN2YWwgfD0gWFVBUlRQU19NUl9TVE9QTU9ERV8yX0JJVDsgLyogMiBTVE9QIGJpdHMgKi8KKwkJY3ZhbCB8PSBDRE5TX1VBUlRfTVJfU1RPUE1PREVfMl9CSVQ7IC8qIDIgU1RPUCBiaXRzICovCiAJZWxzZQotCQljdmFsIHw9IFhVQVJUUFNfTVJfU1RPUE1PREVfMV9CSVQ7IC8qIDEgU1RPUCBiaXQgKi8KKwkJY3ZhbCB8PSBDRE5TX1VBUlRfTVJfU1RPUE1PREVfMV9CSVQ7IC8qIDEgU1RPUCBiaXQgKi8KIAogCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CKSB7CiAJCS8qIE1hcmsgb3IgU3BhY2UgcGFyaXR5ICovCiAJCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ01TUEFSKSB7CiAJCQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkKLQkJCQljdmFsIHw9IFhVQVJUUFNfTVJfUEFSSVRZX01BUks7CisJCQkJY3ZhbCB8PSBDRE5TX1VBUlRfTVJfUEFSSVRZX01BUks7CiAJCQllbHNlCi0JCQkJY3ZhbCB8PSBYVUFSVFBTX01SX1BBUklUWV9TUEFDRTsKKwkJCQljdmFsIHw9IENETlNfVUFSVF9NUl9QQVJJVFlfU1BBQ0U7CiAJCX0gZWxzZSB7CiAJCQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkKLQkJCQljdmFsIHw9IFhVQVJUUFNfTVJfUEFSSVRZX09ERDsKKwkJCQljdmFsIHw9IENETlNfVUFSVF9NUl9QQVJJVFlfT0REOwogCQkJZWxzZQotCQkJCWN2YWwgfD0gWFVBUlRQU19NUl9QQVJJVFlfRVZFTjsKKwkJCQljdmFsIHw9IENETlNfVUFSVF9NUl9QQVJJVFlfRVZFTjsKIAkJfQogCX0gZWxzZSB7Ci0JCWN2YWwgfD0gWFVBUlRQU19NUl9QQVJJVFlfTk9ORTsKKwkJY3ZhbCB8PSBDRE5TX1VBUlRfTVJfUEFSSVRZX05PTkU7CiAJfQogCWN2YWwgfD0gbW9kZV9yZWcgJiAxOwotCXh1YXJ0cHNfd3JpdGVsKGN2YWwsIFhVQVJUUFNfTVJfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKGN2YWwsIENETlNfVUFSVF9NUl9PRkZTRVQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHh1YXJ0cHNfc3RhcnR1cCAtIENhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIG9wZW5zIGEgeHVhcnRwcyBwb3J0CisgKiBjZG5zX3VhcnRfc3RhcnR1cCAtIENhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIG9wZW5zIGEgY2Ruc191YXJ0IHBvcnQKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb3RoZXJ3aXNlCi0gKiovCi1zdGF0aWMgaW50IHh1YXJ0cHNfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGNkbnNfdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgaW50IHJldHZhbCA9IDAsIHN0YXR1cyA9IDA7CiAKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIHh1YXJ0cHNfaXNyLCAwLCBYVUFSVFBTX05BTUUsCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBjZG5zX3VhcnRfaXNyLCAwLCBDRE5TX1VBUlRfTkFNRSwKIAkJCQkJCQkJKHZvaWQgKilwb3J0KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyogRGlzYWJsZSB0aGUgVFggYW5kIFJYICovCi0JeHVhcnRwc193cml0ZWwoWFVBUlRQU19DUl9UWF9ESVMgfCBYVUFSVFBTX0NSX1JYX0RJUywKLQkJCQkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKENETlNfVUFSVF9DUl9UWF9ESVMgfCBDRE5TX1VBUlRfQ1JfUlhfRElTLAorCQkJCQkJQ0ROU19VQVJUX0NSX09GRlNFVCk7CiAKIAkvKiBTZXQgdGhlIENvbnRyb2wgUmVnaXN0ZXIgd2l0aCBUWC9SWCBFbmFibGUsIFRYL1JYIFJlc2V0LAogCSAqIG5vIGJyZWFrIGNoYXJzLgogCSAqLwotCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfQ1JfVFhSU1QgfCBYVUFSVFBTX0NSX1JYUlNULAotCQkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKENETlNfVUFSVF9DUl9UWFJTVCB8IENETlNfVUFSVF9DUl9SWFJTVCwKKwkJCQlDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAotCXN0YXR1cyA9IHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpOworCXN0YXR1cyA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAogCS8qIENsZWFyIHRoZSBSWCBkaXNhYmxlIGFuZCBUWCBkaXNhYmxlIGJpdHMgYW5kIHRoZW4gc2V0IHRoZSBUWCBlbmFibGUKIAkgKiBiaXQgYW5kIFJYIGVuYWJsZSBiaXQgdG8gZW5hYmxlIHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIuCiAJICovCi0JeHVhcnRwc193cml0ZWwoKHN0YXR1cyAmIH4oWFVBUlRQU19DUl9UWF9ESVMgfCBYVUFSVFBTX0NSX1JYX0RJUykpCi0JCQl8IChYVUFSVFBTX0NSX1RYX0VOIHwgWFVBUlRQU19DUl9SWF9FTiB8Ci0JCQlYVUFSVFBTX0NSX1NUT1BCUkspLCBYVUFSVFBTX0NSX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbCgoc3RhdHVzICYgfihDRE5TX1VBUlRfQ1JfVFhfRElTIHwgQ0ROU19VQVJUX0NSX1JYX0RJUykpCisJCQl8IChDRE5TX1VBUlRfQ1JfVFhfRU4gfCBDRE5TX1VBUlRfQ1JfUlhfRU4gfAorCQkJQ0ROU19VQVJUX0NSX1NUT1BCUkspLCBDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAogCS8qIFNldCB0aGUgTW9kZSBSZWdpc3RlciB3aXRoIG5vcm1hbCBtb2RlLDggZGF0YSBiaXRzLDEgc3RvcCBiaXQsCiAJICogbm8gcGFyaXR5LgogCSAqLwotCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfTVJfQ0hNT0RFX05PUk0gfCBYVUFSVFBTX01SX1NUT1BNT0RFXzFfQklUCi0JCXwgWFVBUlRQU19NUl9QQVJJVFlfTk9ORSB8IFhVQVJUUFNfTVJfQ0hBUkxFTl84X0JJVCwKLQkJIFhVQVJUUFNfTVJfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKENETlNfVUFSVF9NUl9DSE1PREVfTk9STSB8IENETlNfVUFSVF9NUl9TVE9QTU9ERV8xX0JJVAorCQl8IENETlNfVUFSVF9NUl9QQVJJVFlfTk9ORSB8IENETlNfVUFSVF9NUl9DSEFSTEVOXzhfQklULAorCQkgQ0ROU19VQVJUX01SX09GRlNFVCk7CiAKIAkvKgogCSAqIFNldCB0aGUgUlggRklGTyBUcmlnZ2VyIGxldmVsIHRvIHVzZSBtb3N0IG9mIHRoZSBGSUZPLCBidXQgaXQKIAkgKiBjYW4gYmUgdHVuZWQgd2l0aCBhIG1vZHVsZSBwYXJhbWV0ZXIKIAkgKi8KLQl4dWFydHBzX3dyaXRlbChyeF90cmlnZ2VyX2xldmVsLCBYVUFSVFBTX1JYV01fT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKHJ4X3RyaWdnZXJfbGV2ZWwsIENETlNfVUFSVF9SWFdNX09GRlNFVCk7CiAKIAkvKgogCSAqIFJlY2VpdmUgVGltZW91dCByZWdpc3RlciBpcyBlbmFibGVkIGJ1dCBpdAogCSAqIGNhbiBiZSB0dW5lZCB3aXRoIGEgbW9kdWxlIHBhcmFtZXRlcgogCSAqLwotCXh1YXJ0cHNfd3JpdGVsKHJ4X3RpbWVvdXQsIFhVQVJUUFNfUlhUT1VUX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChyeF90aW1lb3V0LCBDRE5TX1VBUlRfUlhUT1VUX09GRlNFVCk7CiAKIAkvKiBDbGVhciBvdXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBiZWZvcmUgZW5hYmxpbmcgdGhlbSAqLwotCXh1YXJ0cHNfd3JpdGVsKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19JU1JfT0ZGU0VUKSwgWFVBUlRQU19JU1JfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfSVNSX09GRlNFVCksCisJCQlDRE5TX1VBUlRfSVNSX09GRlNFVCk7CiAKIAkvKiBTZXQgdGhlIEludGVycnVwdCBSZWdpc3RlcnMgd2l0aCBkZXNpcmVkIGludGVycnVwdHMgKi8KLQl4dWFydHBzX3dyaXRlbChYVUFSVFBTX0lYUl9UWEVNUFRZIHwgWFVBUlRQU19JWFJfUEFSSVRZIHwKLQkJWFVBUlRQU19JWFJfRlJBTUlORyB8IFhVQVJUUFNfSVhSX09WRVJSVU4gfAotCQlYVUFSVFBTX0lYUl9SWFRSSUcgfCBYVUFSVFBTX0lYUl9UT1VULCBYVUFSVFBTX0lFUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwoQ0ROU19VQVJUX0lYUl9UWEVNUFRZIHwgQ0ROU19VQVJUX0lYUl9QQVJJVFkgfAorCQlDRE5TX1VBUlRfSVhSX0ZSQU1JTkcgfCBDRE5TX1VBUlRfSVhSX09WRVJSVU4gfAorCQlDRE5TX1VBUlRfSVhSX1JYVFJJRyB8IENETlNfVUFSVF9JWFJfVE9VVCwKKwkJQ0ROU19VQVJUX0lFUl9PRkZTRVQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCi0gKiB4dWFydHBzX3NodXRkb3duIC0gQ2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gY2xvc2VzIGEgeHVhcnRwcyBwb3J0CisgKiBjZG5zX3VhcnRfc2h1dGRvd24gLSBDYWxsZWQgd2hlbiBhbiBhcHBsaWNhdGlvbiBjbG9zZXMgYSBjZG5zX3VhcnQgcG9ydAogICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQotICoKLSAqKi8KLXN0YXRpYyB2b2lkIHh1YXJ0cHNfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKKyAqLworc3RhdGljIHZvaWQgY2Ruc191YXJ0X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IHN0YXR1czsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCXN0YXR1cyA9IHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19JTVJfT0ZGU0VUKTsKLQl4dWFydHBzX3dyaXRlbChzdGF0dXMsIFhVQVJUUFNfSURSX09GRlNFVCk7CisJc3RhdHVzID0gY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9JTVJfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKHN0YXR1cywgQ0ROU19VQVJUX0lEUl9PRkZTRVQpOwogCiAJLyogRGlzYWJsZSB0aGUgVFggYW5kIFJYICovCi0JeHVhcnRwc193cml0ZWwoWFVBUlRQU19DUl9UWF9ESVMgfCBYVUFSVFBTX0NSX1JYX0RJUywKLQkJCQkgWFVBUlRQU19DUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwoQ0ROU19VQVJUX0NSX1RYX0RJUyB8IENETlNfVUFSVF9DUl9SWF9ESVMsCisJCQkJIENETlNfVUFSVF9DUl9PRkZTRVQpOwogCWZyZWVfaXJxKHBvcnQtPmlycSwgcG9ydCk7CiB9CiAKIC8qKgotICogeHVhcnRwc190eXBlIC0gU2V0IFVBUlQgdHlwZSB0byB4dWFydHBzIHBvcnQKKyAqIGNkbnNfdWFydF90eXBlIC0gU2V0IFVBUlQgdHlwZSB0byBjZG5zX3VhcnQgcG9ydAogICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQogICoKLSAqIFJldHVybnMgc3RyaW5nIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlCi0gKiovCi1zdGF0aWMgY29uc3QgY2hhciAqeHVhcnRwc190eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCisgKiBSZXR1cm46IHN0cmluZyBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZQorICovCitzdGF0aWMgY29uc3QgY2hhciAqY2Ruc191YXJ0X3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gcG9ydC0+dHlwZSA9PSBQT1JUX1hVQVJUUFMgPyBYVUFSVFBTX05BTUUgOiBOVUxMOworCXJldHVybiBwb3J0LT50eXBlID09IFBPUlRfWFVBUlRQUyA/IENETlNfVUFSVF9OQU1FIDogTlVMTDsKIH0KIAogLyoqCi0gKiB4dWFydHBzX3ZlcmlmeV9wb3J0IC0gVmVyaWZ5IHRoZSBwb3J0IHBhcmFtcworICogY2Ruc191YXJ0X3ZlcmlmeV9wb3J0IC0gVmVyaWZ5IHRoZSBwb3J0IHBhcmFtcwogICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQogICogQHNlcjogSGFuZGxlIHRvIHRoZSBzdHJ1Y3R1cmUgd2hvc2UgbWVtYmVycyBhcmUgY29tcGFyZWQKICAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2VzcyBvdGhlcndpc2UgLUVJTlZBTAotICoqLwotc3RhdGljIGludCB4dWFydHBzX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGNkbnNfdWFydF92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAogCQkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQogewogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX1hVQVJUUFMpCkBAIC04NzUsMTg3ICs4NTQsMTcwIEBACiB9CiAKIC8qKgotICogeHVhcnRwc19yZXF1ZXN0X3BvcnQgLSBDbGFpbSB0aGUgbWVtb3J5IHJlZ2lvbiBhdHRhY2hlZCB0byB4dWFydHBzIHBvcnQsCi0gKgkJCQljYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGFkZHMgYSB4dWFydHBzIHBvcnQgdmlhCisgKiBjZG5zX3VhcnRfcmVxdWVzdF9wb3J0IC0gQ2xhaW0gdGhlIG1lbW9yeSByZWdpb24gYXR0YWNoZWQgdG8gY2Ruc191YXJ0IHBvcnQsCisgKgkJCQljYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGFkZHMgYSBjZG5zX3VhcnQgcG9ydCB2aWEKICAqCQkJCXVhcnRfYWRkX29uZV9wb3J0KCkKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm5zIDAsIC1FTk9NRU0gaWYgcmVxdWVzdCBmYWlscwotICoqLwotc3RhdGljIGludCB4dWFydHBzX3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBjZG5zX3VhcnRfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgWFVBUlRQU19SRUdJU1RFUl9TUEFDRSwKLQkJCQkJIFhVQVJUUFNfTkFNRSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBDRE5TX1VBUlRfUkVHSVNURVJfU1BBQ0UsCisJCQkJCSBDRE5TX1VBUlRfTkFNRSkpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcG9ydC0+bWVtYmFzZSA9IGlvcmVtYXAocG9ydC0+bWFwYmFzZSwgWFVBUlRQU19SRUdJU1RFUl9TUEFDRSk7CisJcG9ydC0+bWVtYmFzZSA9IGlvcmVtYXAocG9ydC0+bWFwYmFzZSwgQ0ROU19VQVJUX1JFR0lTVEVSX1NQQUNFKTsKIAlpZiAoIXBvcnQtPm1lbWJhc2UpIHsKIAkJZGV2X2Vycihwb3J0LT5kZXYsICJVbmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBYVUFSVFBTX1JFR0lTVEVSX1NQQUNFKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIENETlNfVUFSVF9SRUdJU1RFUl9TUEFDRSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB4dWFydHBzX3JlbGVhc2VfcG9ydCAtIFJlbGVhc2UgdGhlIG1lbW9yeSByZWdpb24gYXR0YWNoZWQgdG8gYSB4dWFydHBzCi0gKgkJCQlwb3J0LCBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIHJlbW92ZXMgYSB4dWFydHBzCi0gKgkJCQlwb3J0IHZpYSB1YXJ0X3JlbW92ZV9vbmVfcG9ydCgpLgorICogY2Ruc191YXJ0X3JlbGVhc2VfcG9ydCAtIFJlbGVhc2UgVUFSVCBwb3J0CiAgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCiAgKgotICoqLwotc3RhdGljIHZvaWQgeHVhcnRwc19yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKKyAqIFJlbGVhc2UgdGhlIG1lbW9yeSByZWdpb24gYXR0YWNoZWQgdG8gYSBjZG5zX3VhcnQgcG9ydC4gQ2FsbGVkIHdoZW4gdGhlCisgKiBkcml2ZXIgcmVtb3ZlcyBhIGNkbnNfdWFydCBwb3J0IHZpYSB1YXJ0X3JlbW92ZV9vbmVfcG9ydCgpLgorICovCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIFhVQVJUUFNfUkVHSVNURVJfU1BBQ0UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBDRE5TX1VBUlRfUkVHSVNURVJfU1BBQ0UpOwogCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7CiAJcG9ydC0+bWVtYmFzZSA9IE5VTEw7CiB9CiAKIC8qKgotICogeHVhcnRwc19jb25maWdfcG9ydCAtIENvbmZpZ3VyZSB4dWFydHBzLCBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGFkZHMgYQotICoJCQkJeHVhcnRwcyBwb3J0CisgKiBjZG5zX3VhcnRfY29uZmlnX3BvcnQgLSBDb25maWd1cmUgVUFSVCBwb3J0CiAgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCiAgKiBAZmxhZ3M6IElmIGFueQotICoKLSAqKi8KLXN0YXRpYyB2b2lkIHh1YXJ0cHNfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQorICovCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQogewotCWlmIChmbGFncyAmIFVBUlRfQ09ORklHX1RZUEUgJiYgeHVhcnRwc19yZXF1ZXN0X3BvcnQocG9ydCkgPT0gMCkKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFICYmIGNkbnNfdWFydF9yZXF1ZXN0X3BvcnQocG9ydCkgPT0gMCkKIAkJcG9ydC0+dHlwZSA9IFBPUlRfWFVBUlRQUzsKIH0KIAogLyoqCi0gKiB4dWFydHBzX2dldF9tY3RybCAtIEdldCB0aGUgbW9kZW0gY29udHJvbCBzdGF0ZQotICoKKyAqIGNkbnNfdWFydF9nZXRfbWN0cmwgLSBHZXQgdGhlIG1vZGVtIGNvbnRyb2wgc3RhdGUKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm5zIHRoZSBtb2RlbSBjb250cm9sIHN0YXRlCi0gKgotICoqLwotc3RhdGljIHVuc2lnbmVkIGludCB4dWFydHBzX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorICogUmV0dXJuOiB0aGUgbW9kZW0gY29udHJvbCBzdGF0ZQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNkbnNfdWFydF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gVElPQ01fQ1RTIHwgVElPQ01fRFNSIHwgVElPQ01fQ0FSOwogfQogCi1zdGF0aWMgdm9pZCB4dWFydHBzX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBtY3RybCkKIHsKIAkvKiBOL0EgKi8KIH0KIAotc3RhdGljIHZvaWQgeHVhcnRwc19lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGNkbnNfdWFydF9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAkvKiBOL0EgKi8KIH0KIAogI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKLXN0YXRpYyBpbnQgeHVhcnRwc19wb2xsX2dldF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IGNkbnNfdWFydF9wb2xsX2dldF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdTMyIGltcjsKIAlpbnQgYzsKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQlpbXIgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfSU1SX09GRlNFVCk7Ci0JeHVhcnRwc193cml0ZWwoaW1yLCBYVUFSVFBTX0lEUl9PRkZTRVQpOworCWltciA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfSU1SX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChpbXIsIENETlNfVUFSVF9JRFJfT0ZGU0VUKTsKIAogCS8qIENoZWNrIGlmIEZJRk8gaXMgZW1wdHkgKi8KLQlpZiAoeHVhcnRwc19yZWFkbChYVUFSVFBTX1NSX09GRlNFVCkgJiBYVUFSVFBTX1NSX1JYRU1QVFkpCisJaWYgKGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfU1JfT0ZGU0VUKSAmIENETlNfVUFSVF9TUl9SWEVNUFRZKQogCQljID0gTk9fUE9MTF9DSEFSOwogCWVsc2UgLyogUmVhZCBhIGNoYXJhY3RlciAqLwotCQljID0gKHVuc2lnbmVkIGNoYXIpIHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19GSUZPX09GRlNFVCk7CisJCWMgPSAodW5zaWduZWQgY2hhcikgY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9GSUZPX09GRlNFVCk7CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwotCXh1YXJ0cHNfd3JpdGVsKGltciwgWFVBUlRQU19JRVJfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKGltciwgQ0ROU19VQVJUX0lFUl9PRkZTRVQpOwogCiAJcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyB2b2lkIHh1YXJ0cHNfcG9sbF9wdXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIGMpCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfcG9sbF9wdXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIGMpCiB7CiAJdTMyIGltcjsKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQlpbXIgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfSU1SX09GRlNFVCk7Ci0JeHVhcnRwc193cml0ZWwoaW1yLCBYVUFSVFBTX0lEUl9PRkZTRVQpOworCWltciA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfSU1SX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChpbXIsIENETlNfVUFSVF9JRFJfT0ZGU0VUKTsKIAogCS8qIFdhaXQgdW50aWwgRklGTyBpcyBlbXB0eSAqLwotCXdoaWxlICghKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19TUl9PRkZTRVQpICYgWFVBUlRQU19TUl9UWEVNUFRZKSkKKwl3aGlsZSAoIShjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX1NSX09GRlNFVCkgJiBDRE5TX1VBUlRfU1JfVFhFTVBUWSkpCiAJCWNwdV9yZWxheCgpOwogCiAJLyogV3JpdGUgYSBjaGFyYWN0ZXIgKi8KLQl4dWFydHBzX3dyaXRlbChjLCBYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKGMsIENETlNfVUFSVF9GSUZPX09GRlNFVCk7CiAKIAkvKiBXYWl0IHVudGlsIEZJRk8gaXMgZW1wdHkgKi8KLQl3aGlsZSAoISh4dWFydHBzX3JlYWRsKFhVQVJUUFNfU1JfT0ZGU0VUKSAmIFhVQVJUUFNfU1JfVFhFTVBUWSkpCisJd2hpbGUgKCEoY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9TUl9PRkZTRVQpICYgQ0ROU19VQVJUX1NSX1RYRU1QVFkpKQogCQljcHVfcmVsYXgoKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCi0JeHVhcnRwc193cml0ZWwoaW1yLCBYVUFSVFBTX0lFUl9PRkZTRVQpOworCWNkbnNfdWFydF93cml0ZWwoaW1yLCBDRE5TX1VBUlRfSUVSX09GRlNFVCk7CiAKIAlyZXR1cm47CiB9CiAjZW5kaWYKIAotLyoqIFRoZSBVQVJUIG9wZXJhdGlvbnMgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgeHVhcnRwc19vcHMgPSB7Ci0JLnNldF9tY3RybAk9IHh1YXJ0cHNfc2V0X21jdHJsLAotCS5nZXRfbWN0cmwJPSB4dWFydHBzX2dldF9tY3RybCwKLQkuZW5hYmxlX21zCT0geHVhcnRwc19lbmFibGVfbXMsCi0KLQkuc3RhcnRfdHgJPSB4dWFydHBzX3N0YXJ0X3R4LAkvKiBTdGFydCB0cmFuc21pdHRpbmcgKi8KLQkuc3RvcF90eAk9IHh1YXJ0cHNfc3RvcF90eCwJLyogU3RvcCB0cmFuc21pc3Npb24gKi8KLQkuc3RvcF9yeAk9IHh1YXJ0cHNfc3RvcF9yeCwJLyogU3RvcCByZWNlcHRpb24gKi8KLQkudHhfZW1wdHkJPSB4dWFydHBzX3R4X2VtcHR5LAkvKiBUcmFuc21pdHRlciBidXN5PyAqLwotCS5icmVha19jdGwJPSB4dWFydHBzX2JyZWFrX2N0bCwJLyogU3RhcnQvc3RvcAotCQkJCQkJICogdHJhbnNtaXR0aW5nIGJyZWFrCi0JCQkJCQkgKi8KLQkuc2V0X3Rlcm1pb3MJPSB4dWFydHBzX3NldF90ZXJtaW9zLAkvKiBTZXQgdGVybWlvcyAqLwotCS5zdGFydHVwCT0geHVhcnRwc19zdGFydHVwLAkvKiBBcHAgb3BlbnMgeHVhcnRwcyAqLwotCS5zaHV0ZG93bgk9IHh1YXJ0cHNfc2h1dGRvd24sCS8qIEFwcCBjbG9zZXMgeHVhcnRwcyAqLwotCS50eXBlCQk9IHh1YXJ0cHNfdHlwZSwJCS8qIFNldCBVQVJUIHR5cGUgKi8KLQkudmVyaWZ5X3BvcnQJPSB4dWFydHBzX3ZlcmlmeV9wb3J0LAkvKiBWZXJpZmljYXRpb24gb2YgcG9ydAotCQkJCQkJICogcGFyYW1zCi0JCQkJCQkgKi8KLQkucmVxdWVzdF9wb3J0CT0geHVhcnRwc19yZXF1ZXN0X3BvcnQsCS8qIENsYWltIHJlc291cmNlcwotCQkJCQkJICogYXNzb2NpYXRlZCB3aXRoIGEKLQkJCQkJCSAqIHh1YXJ0cHMgcG9ydAotCQkJCQkJICovCi0JLnJlbGVhc2VfcG9ydAk9IHh1YXJ0cHNfcmVsZWFzZV9wb3J0LAkvKiBSZWxlYXNlIHJlc291cmNlcwotCQkJCQkJICogYXNzb2NpYXRlZCB3aXRoIGEKLQkJCQkJCSAqIHh1YXJ0cHMgcG9ydAotCQkJCQkJICovCi0JLmNvbmZpZ19wb3J0CT0geHVhcnRwc19jb25maWdfcG9ydCwJLyogQ29uZmlndXJlIHdoZW4gZHJpdmVyCi0JCQkJCQkgKiBhZGRzIGEgeHVhcnRwcyBwb3J0Ci0JCQkJCQkgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgY2Ruc191YXJ0X29wcyA9IHsKKwkuc2V0X21jdHJsCT0gY2Ruc191YXJ0X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gY2Ruc191YXJ0X2dldF9tY3RybCwKKwkuZW5hYmxlX21zCT0gY2Ruc191YXJ0X2VuYWJsZV9tcywKKwkuc3RhcnRfdHgJPSBjZG5zX3VhcnRfc3RhcnRfdHgsCisJLnN0b3BfdHgJPSBjZG5zX3VhcnRfc3RvcF90eCwKKwkuc3RvcF9yeAk9IGNkbnNfdWFydF9zdG9wX3J4LAorCS50eF9lbXB0eQk9IGNkbnNfdWFydF90eF9lbXB0eSwKKwkuYnJlYWtfY3RsCT0gY2Ruc191YXJ0X2JyZWFrX2N0bCwKKwkuc2V0X3Rlcm1pb3MJPSBjZG5zX3VhcnRfc2V0X3Rlcm1pb3MsCisJLnN0YXJ0dXAJPSBjZG5zX3VhcnRfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBjZG5zX3VhcnRfc2h1dGRvd24sCisJLnR5cGUJCT0gY2Ruc191YXJ0X3R5cGUsCisJLnZlcmlmeV9wb3J0CT0gY2Ruc191YXJ0X3ZlcmlmeV9wb3J0LAorCS5yZXF1ZXN0X3BvcnQJPSBjZG5zX3VhcnRfcmVxdWVzdF9wb3J0LAorCS5yZWxlYXNlX3BvcnQJPSBjZG5zX3VhcnRfcmVsZWFzZV9wb3J0LAorCS5jb25maWdfcG9ydAk9IGNkbnNfdWFydF9jb25maWdfcG9ydCwKICNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCi0JLnBvbGxfZ2V0X2NoYXIJPSB4dWFydHBzX3BvbGxfZ2V0X2NoYXIsCi0JLnBvbGxfcHV0X2NoYXIJPSB4dWFydHBzX3BvbGxfcHV0X2NoYXIsCisJLnBvbGxfZ2V0X2NoYXIJPSBjZG5zX3VhcnRfcG9sbF9nZXRfY2hhciwKKwkucG9sbF9wdXRfY2hhcgk9IGNkbnNfdWFydF9wb2xsX3B1dF9jaGFyLAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB4dWFydHBzX3BvcnRbMl07CitzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCBjZG5zX3VhcnRfcG9ydFsyXTsKIAogLyoqCi0gKiB4dWFydHBzX2dldF9wb3J0IC0gQ29uZmlndXJlIHRoZSBwb3J0IGZyb20gdGhlIHBsYXRmb3JtIGRldmljZSByZXNvdXJjZQotICoJCQlpbmZvCisgKiBjZG5zX3VhcnRfZ2V0X3BvcnQgLSBDb25maWd1cmUgdGhlIHBvcnQgZnJvbSBwbGF0Zm9ybSBkZXZpY2UgcmVzb3VyY2UgaW5mbworICogQGlkOiBQb3J0IGlkCiAgKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYSB1YXJ0X3BvcnQgb3IgTlVMTCBmb3IgZmFpbHVyZQotICoqLwotc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgKnh1YXJ0cHNfZ2V0X3BvcnQodm9pZCkKKyAqIFJldHVybjogYSBwb2ludGVyIHRvIGEgdWFydF9wb3J0IG9yIE5VTEwgZm9yIGZhaWx1cmUKKyAqLworc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgKmNkbnNfdWFydF9nZXRfcG9ydChpbnQgaWQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKLQlpbnQgaWQ7CiAKLQkvKiBGaW5kIHRoZSBuZXh0IHVudXNlZCBwb3J0ICovCi0JZm9yIChpZCA9IDA7IGlkIDwgWFVBUlRQU19OUl9QT1JUUzsgaWQrKykKLQkJaWYgKHh1YXJ0cHNfcG9ydFtpZF0ubWFwYmFzZSA9PSAwKQotCQkJYnJlYWs7CisJLyogVHJ5IHRoZSBnaXZlbiBwb3J0IGlkIGlmIGZhaWxlZCB1c2UgZGVmYXVsdCBtZXRob2QgKi8KKwlpZiAoY2Ruc191YXJ0X3BvcnRbaWRdLm1hcGJhc2UgIT0gMCkgeworCQkvKiBGaW5kIHRoZSBuZXh0IHVudXNlZCBwb3J0ICovCisJCWZvciAoaWQgPSAwOyBpZCA8IENETlNfVUFSVF9OUl9QT1JUUzsgaWQrKykKKwkJCWlmIChjZG5zX3VhcnRfcG9ydFtpZF0ubWFwYmFzZSA9PSAwKQorCQkJCWJyZWFrOworCX0KIAotCWlmIChpZCA+PSBYVUFSVFBTX05SX1BPUlRTKQorCWlmIChpZCA+PSBDRE5TX1VBUlRfTlJfUE9SVFMpCiAJCXJldHVybiBOVUxMOwogCi0JcG9ydCA9ICZ4dWFydHBzX3BvcnRbaWRdOworCXBvcnQgPSAmY2Ruc191YXJ0X3BvcnRbaWRdOwogCiAJLyogQXQgdGhpcyBwb2ludCwgd2UndmUgZ290IGFuIGVtcHR5IHVhcnRfcG9ydCBzdHJ1Y3QsIGluaXRpYWxpemUgaXQgKi8KIAlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7CkBAIC0xMDY1LDUwICsxMDI3LDQ2IEBACiAJcG9ydC0+dHlwZQk9IFBPUlRfVU5LTk9XTjsKIAlwb3J0LT5pb3R5cGUJPSBVUElPX01FTTMyOwogCXBvcnQtPmZsYWdzCT0gVVBGX0JPT1RfQVVUT0NPTkY7Ci0JcG9ydC0+b3BzCT0gJnh1YXJ0cHNfb3BzOwotCXBvcnQtPmZpZm9zaXplCT0gWFVBUlRQU19GSUZPX1NJWkU7CisJcG9ydC0+b3BzCT0gJmNkbnNfdWFydF9vcHM7CisJcG9ydC0+Zmlmb3NpemUJPSBDRE5TX1VBUlRfRklGT19TSVpFOwogCXBvcnQtPmxpbmUJPSBpZDsKIAlwb3J0LT5kZXYJPSBOVUxMOwogCXJldHVybiBwb3J0OwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ29uc29sZSBkcml2ZXIgb3BlcmF0aW9ucy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2lmZGVmIENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlRfQ09OU09MRQogLyoqCi0gKiB4dWFydHBzX2NvbnNvbGVfd2FpdF90eCAtIFdhaXQgZm9yIHRoZSBUWCB0byBiZSBmdWxsCisgKiBjZG5zX3VhcnRfY29uc29sZV93YWl0X3R4IC0gV2FpdCBmb3IgdGhlIFRYIHRvIGJlIGZ1bGwKICAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKLSAqCi0gKiovCi1zdGF0aWMgdm9pZCB4dWFydHBzX2NvbnNvbGVfd2FpdF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorICovCitzdGF0aWMgdm9pZCBjZG5zX3VhcnRfY29uc29sZV93YWl0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jd2hpbGUgKCh4dWFydHBzX3JlYWRsKFhVQVJUUFNfU1JfT0ZGU0VUKSAmIFhVQVJUUFNfU1JfVFhFTVBUWSkKLQkJCQkhPSBYVUFSVFBTX1NSX1RYRU1QVFkpCisJd2hpbGUgKChjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX1NSX09GRlNFVCkgJiBDRE5TX1VBUlRfU1JfVFhFTVBUWSkKKwkJCQkhPSBDRE5TX1VBUlRfU1JfVFhFTVBUWSkKIAkJYmFycmllcigpOwogfQogCiAvKioKLSAqIHh1YXJ0cHNfY29uc29sZV9wdXRjaGFyIC0gd3JpdGUgdGhlIGNoYXJhY3RlciB0byB0aGUgRklGTyBidWZmZXIKKyAqIGNkbnNfdWFydF9jb25zb2xlX3B1dGNoYXIgLSB3cml0ZSB0aGUgY2hhcmFjdGVyIHRvIHRoZSBGSUZPIGJ1ZmZlcgogICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQogICogQGNoOiBDaGFyYWN0ZXIgdG8gYmUgd3JpdHRlbgotICoKLSAqKi8KLXN0YXRpYyB2b2lkIHh1YXJ0cHNfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKKyAqLworc3RhdGljIHZvaWQgY2Ruc191YXJ0X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCiB7Ci0JeHVhcnRwc19jb25zb2xlX3dhaXRfdHgocG9ydCk7Ci0JeHVhcnRwc193cml0ZWwoY2gsIFhVQVJUUFNfRklGT19PRkZTRVQpOworCWNkbnNfdWFydF9jb25zb2xlX3dhaXRfdHgocG9ydCk7CisJY2Ruc191YXJ0X3dyaXRlbChjaCwgQ0ROU19VQVJUX0ZJRk9fT0ZGU0VUKTsKIH0KIAogLyoqCi0gKiB4dWFydHBzX2NvbnNvbGVfd3JpdGUgLSBwZXJmb3JtIHdyaXRlIG9wZXJhdGlvbgotICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQorICogY2Ruc191YXJ0X2NvbnNvbGVfd3JpdGUgLSBwZXJmb3JtIHdyaXRlIG9wZXJhdGlvbgorICogQGNvOiBDb25zb2xlIGhhbmRsZQogICogQHM6IFBvaW50ZXIgdG8gY2hhcmFjdGVyIGFycmF5CiAgKiBAY291bnQ6IE5vIG9mIGNoYXJhY3RlcnMKLSAqKi8KLXN0YXRpYyB2b2lkIHh1YXJ0cHNfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisgKi8KK3N0YXRpYyB2b2lkIGNkbnNfdWFydF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKIAkJCQl1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZ4dWFydHBzX3BvcnRbY28tPmluZGV4XTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmNkbnNfdWFydF9wb3J0W2NvLT5pbmRleF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaW1yLCBjdHJsOwogCWludCBsb2NrZWQgPSAxOwpAQCAtMTExOSw0OSArMTA3Nyw0NSBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJLyogc2F2ZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHQgKi8KLQlpbXIgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfSU1SX09GRlNFVCk7Ci0JeHVhcnRwc193cml0ZWwoaW1yLCBYVUFSVFBTX0lEUl9PRkZTRVQpOworCWltciA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfSU1SX09GRlNFVCk7CisJY2Ruc191YXJ0X3dyaXRlbChpbXIsIENETlNfVUFSVF9JRFJfT0ZGU0VUKTsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgdGhlIHR4IHBhcnQgaXMgZW5hYmxlZC4gU2V0IHRoZSBUWCBlbmFibGUgYml0IGFuZAogCSAqIGNsZWFyIHRoZSBUWCBkaXNhYmxlIGJpdCB0byBlbmFibGUgdGhlIHRyYW5zbWl0dGVyLgogCSAqLwotCWN0cmwgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKTsKLQl4dWFydHBzX3dyaXRlbCgoY3RybCAmIH5YVUFSVFBTX0NSX1RYX0RJUykgfCBYVUFSVFBTX0NSX1RYX0VOLAotCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJY3RybCA9IGNkbnNfdWFydF9yZWFkbChDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKChjdHJsICYgfkNETlNfVUFSVF9DUl9UWF9ESVMpIHwgQ0ROU19VQVJUX0NSX1RYX0VOLAorCQlDRE5TX1VBUlRfQ1JfT0ZGU0VUKTsKIAotCXVhcnRfY29uc29sZV93cml0ZShwb3J0LCBzLCBjb3VudCwgeHVhcnRwc19jb25zb2xlX3B1dGNoYXIpOwotCXh1YXJ0cHNfY29uc29sZV93YWl0X3R4KHBvcnQpOworCXVhcnRfY29uc29sZV93cml0ZShwb3J0LCBzLCBjb3VudCwgY2Ruc191YXJ0X2NvbnNvbGVfcHV0Y2hhcik7CisJY2Ruc191YXJ0X2NvbnNvbGVfd2FpdF90eChwb3J0KTsKIAotCXh1YXJ0cHNfd3JpdGVsKGN0cmwsIFhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwljZG5zX3VhcnRfd3JpdGVsKGN0cmwsIENETlNfVUFSVF9DUl9PRkZTRVQpOwogCi0JLyogcmVzdG9yZSBpbnRlcnJ1cHQgc3RhdGUsIGl0IHNlZW1zIGxpa2UgdGhlcmUgbWF5IGJlIGEgaC93IGJ1ZwotCSAqIGluIHRoYXQgdGhlIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgc2hvdWxkIG5vdCBuZWVkIHRvIGJlCi0JICogd3JpdHRlbiBiYXNlZCBvbiB0aGUgZGF0YSBzaGVldAotCSAqLwotCXh1YXJ0cHNfd3JpdGVsKH5pbXIsIFhVQVJUUFNfSURSX09GRlNFVCk7Ci0JeHVhcnRwc193cml0ZWwoaW1yLCBYVUFSVFBTX0lFUl9PRkZTRVQpOworCS8qIHJlc3RvcmUgaW50ZXJydXB0IHN0YXRlICovCisJY2Ruc191YXJ0X3dyaXRlbChpbXIsIENETlNfVUFSVF9JRVJfT0ZGU0VUKTsKIAogCWlmIChsb2NrZWQpCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB4dWFydHBzX2NvbnNvbGVfc2V0dXAgLSBJbml0aWFsaXplIHRoZSB1YXJ0IHRvIGRlZmF1bHQgY29uZmlnCisgKiBjZG5zX3VhcnRfY29uc29sZV9zZXR1cCAtIEluaXRpYWxpemUgdGhlIHVhcnQgdG8gZGVmYXVsdCBjb25maWcKICAqIEBjbzogQ29uc29sZSBoYW5kbGUKICAqIEBvcHRpb25zOiBJbml0aWFsIHNldHRpbmdzIG9mIHVhcnQKICAqCi0gKiBSZXR1cm5zIDAsIC1FTk9ERVYgaWYgbm8gZGV2aWNlCi0gKiovCi1zdGF0aWMgaW50IF9faW5pdCB4dWFydHBzX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgY2Ruc191YXJ0X2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmeHVhcnRwc19wb3J0W2NvLT5pbmRleF07CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZjZG5zX3VhcnRfcG9ydFtjby0+aW5kZXhdOwogCWludCBiYXVkID0gOTYwMDsKIAlpbnQgYml0cyA9IDg7CiAJaW50IHBhcml0eSA9ICduJzsKIAlpbnQgZmxvdyA9ICduJzsKIAotCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBYVUFSVFBTX05SX1BPUlRTKQorCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBDRE5TX1VBUlRfTlJfUE9SVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFwb3J0LT5tYXBiYXNlKSB7CkBAIC0xMTc1LDU1ICsxMTI5LDUzIEBACiAJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgeHVhcnRwc191YXJ0X2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgY2Ruc191YXJ0X3VhcnRfZHJpdmVyOwogCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgeHVhcnRwc19jb25zb2xlID0gewotCS5uYW1lCT0gWFVBUlRQU19UVFlfTkFNRSwKLQkud3JpdGUJPSB4dWFydHBzX2NvbnNvbGVfd3JpdGUsCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgY2Ruc191YXJ0X2NvbnNvbGUgPSB7CisJLm5hbWUJPSBDRE5TX1VBUlRfVFRZX05BTUUsCisJLndyaXRlCT0gY2Ruc191YXJ0X2NvbnNvbGVfd3JpdGUsCiAJLmRldmljZQk9IHVhcnRfY29uc29sZV9kZXZpY2UsCi0JLnNldHVwCT0geHVhcnRwc19jb25zb2xlX3NldHVwLAorCS5zZXR1cAk9IGNkbnNfdWFydF9jb25zb2xlX3NldHVwLAogCS5mbGFncwk9IENPTl9QUklOVEJVRkZFUiwKIAkuaW5kZXgJPSAtMSwgLyogU3BlY2lmaWVkIG9uIHRoZSBjbWRsaW5lIChlLmcuIGNvbnNvbGU9dHR5UFMgKSAqLwotCS5kYXRhCT0gJnh1YXJ0cHNfdWFydF9kcml2ZXIsCisJLmRhdGEJPSAmY2Ruc191YXJ0X3VhcnRfZHJpdmVyLAogfTsKIAogLyoqCi0gKiB4dWFydHBzX2NvbnNvbGVfaW5pdCAtIEluaXRpYWxpemF0aW9uIGNhbGwKKyAqIGNkbnNfdWFydF9jb25zb2xlX2luaXQgLSBJbml0aWFsaXphdGlvbiBjYWxsCiAgKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZQotICoqLwotc3RhdGljIGludCBfX2luaXQgeHVhcnRwc19jb25zb2xlX2luaXQodm9pZCkKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBfX2luaXQgY2Ruc191YXJ0X2NvbnNvbGVfaW5pdCh2b2lkKQogewotCXJlZ2lzdGVyX2NvbnNvbGUoJnh1YXJ0cHNfY29uc29sZSk7CisJcmVnaXN0ZXJfY29uc29sZSgmY2Ruc191YXJ0X2NvbnNvbGUpOwogCXJldHVybiAwOwogfQogCi1jb25zb2xlX2luaXRjYWxsKHh1YXJ0cHNfY29uc29sZV9pbml0KTsKK2NvbnNvbGVfaW5pdGNhbGwoY2Ruc191YXJ0X2NvbnNvbGVfaW5pdCk7CiAKICNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX1hJTElOWF9QU19VQVJUX0NPTlNPTEUgKi8KIAotLyoqIFN0cnVjdHVyZSBEZWZpbml0aW9ucwotICovCi1zdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHh1YXJ0cHNfdWFydF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJLyogT3duZXIgKi8KLQkuZHJpdmVyX25hbWUJPSBYVUFSVFBTX05BTUUsCQkvKiBEcml2ZXIgbmFtZSAqLwotCS5kZXZfbmFtZQk9IFhVQVJUUFNfVFRZX05BTUUsCS8qIE5vZGUgbmFtZSAqLwotCS5tYWpvcgkJPSBYVUFSVFBTX01BSk9SLAkvKiBNYWpvciBudW1iZXIgKi8KLQkubWlub3IJCT0gWFVBUlRQU19NSU5PUiwJLyogTWlub3IgbnVtYmVyICovCi0JLm5yCQk9IFhVQVJUUFNfTlJfUE9SVFMsCS8qIE51bWJlciBvZiBVQVJUIHBvcnRzICovCitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGNkbnNfdWFydF91YXJ0X2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmRyaXZlcl9uYW1lCT0gQ0ROU19VQVJUX05BTUUsCisJLmRldl9uYW1lCT0gQ0ROU19VQVJUX1RUWV9OQU1FLAorCS5tYWpvcgkJPSBDRE5TX1VBUlRfTUFKT1IsCisJLm1pbm9yCQk9IENETlNfVUFSVF9NSU5PUiwKKwkubnIJCT0gQ0ROU19VQVJUX05SX1BPUlRTLAogI2lmZGVmIENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlRfQ09OU09MRQotCS5jb25zCQk9ICZ4dWFydHBzX2NvbnNvbGUsCS8qIENvbnNvbGUgKi8KKwkuY29ucwkJPSAmY2Ruc191YXJ0X2NvbnNvbGUsCiAjZW5kaWYKIH07CiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIC8qKgotICogeHVhcnRwc19zdXNwZW5kIC0gc3VzcGVuZCBldmVudAorICogY2Ruc191YXJ0X3N1c3BlbmQgLSBzdXNwZW5kIGV2ZW50CiAgKiBAZGV2aWNlOiBQb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogUmV0dXJucyAwCisgKiBSZXR1cm46IDAKICAqLwotc3RhdGljIGludCB4dWFydHBzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBjZG5zX3VhcnRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CkBAIC0xMjQyLDIzICsxMTk0LDI0IEBACiAJICogQ2FsbCB0aGUgQVBJIHByb3ZpZGVkIGluIHNlcmlhbF9jb3JlLmMgZmlsZSB3aGljaCBoYW5kbGVzCiAJICogdGhlIHN1c3BlbmQuCiAJICovCi0JdWFydF9zdXNwZW5kX3BvcnQoJnh1YXJ0cHNfdWFydF9kcml2ZXIsIHBvcnQpOworCXVhcnRfc3VzcGVuZF9wb3J0KCZjZG5zX3VhcnRfdWFydF9kcml2ZXIsIHBvcnQpOwogCWlmIChjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCAmJiAhbWF5X3dha2UpIHsKLQkJc3RydWN0IHh1YXJ0cHMgKnh1YXJ0cHMgPSBwb3J0LT5wcml2YXRlX2RhdGE7CisJCXN0cnVjdCBjZG5zX3VhcnQgKmNkbnNfdWFydCA9IHBvcnQtPnByaXZhdGVfZGF0YTsKIAotCQljbGtfZGlzYWJsZSh4dWFydHBzLT5yZWZjbGspOwotCQljbGtfZGlzYWJsZSh4dWFydHBzLT5hcGVyY2xrKTsKKwkJY2xrX2Rpc2FibGUoY2Ruc191YXJ0LT51YXJ0Y2xrKTsKKwkJY2xrX2Rpc2FibGUoY2Ruc191YXJ0LT5wY2xrKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCQkvKiBFbXB0eSB0aGUgcmVjZWl2ZSBGSUZPIDFzdCBiZWZvcmUgbWFraW5nIGNoYW5nZXMgKi8KLQkJd2hpbGUgKCEoeHVhcnRwc19yZWFkbChYVUFSVFBTX1NSX09GRlNFVCkgJiBYVUFSVFBTX1NSX1JYRU1QVFkpKQotCQkJeHVhcnRwc19yZWFkbChYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwkJd2hpbGUgKCEoY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9TUl9PRkZTRVQpICYKKwkJCQkJQ0ROU19VQVJUX1NSX1JYRU1QVFkpKQorCQkJY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9GSUZPX09GRlNFVCk7CiAJCS8qIHNldCBSWCB0cmlnZ2VyIGxldmVsIHRvIDEgKi8KLQkJeHVhcnRwc193cml0ZWwoMSwgWFVBUlRQU19SWFdNX09GRlNFVCk7CisJCWNkbnNfdWFydF93cml0ZWwoMSwgQ0ROU19VQVJUX1JYV01fT0ZGU0VUKTsKIAkJLyogZGlzYWJsZSBSWCB0aW1lb3V0IGludGVycnVwcyAqLwotCQl4dWFydHBzX3dyaXRlbChYVUFSVFBTX0lYUl9UT1VULCBYVUFSVFBTX0lEUl9PRkZTRVQpOworCQljZG5zX3VhcnRfd3JpdGVsKENETlNfVUFSVF9JWFJfVE9VVCwgQ0ROU19VQVJUX0lEUl9PRkZTRVQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJfQogCkBAIC0xMjY2LDEyICsxMjE5LDEyIEBACiB9CiAKIC8qKgotICogeHVhcnRwc19yZXN1bWUgLSBSZXN1bWUgYWZ0ZXIgYSBwcmV2aW91cyBzdXNwZW5kCisgKiBjZG5zX3VhcnRfcmVzdW1lIC0gUmVzdW1lIGFmdGVyIGEgcHJldmlvdXMgc3VzcGVuZAogICogQGRldmljZTogUG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQogICoKLSAqIFJldHVybnMgMAorICogUmV0dXJuOiAwCiAgKi8KLXN0YXRpYyBpbnQgeHVhcnRwc19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBjZG5zX3VhcnRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CkBAIC0xMjg5LDg3ICsxMjQyLDk1IEBACiAJfQogCiAJaWYgKGNvbnNvbGVfc3VzcGVuZF9lbmFibGVkICYmICFtYXlfd2FrZSkgewotCQlzdHJ1Y3QgeHVhcnRwcyAqeHVhcnRwcyA9IHBvcnQtPnByaXZhdGVfZGF0YTsKKwkJc3RydWN0IGNkbnNfdWFydCAqY2Ruc191YXJ0ID0gcG9ydC0+cHJpdmF0ZV9kYXRhOwogCi0JCWNsa19lbmFibGUoeHVhcnRwcy0+YXBlcmNsayk7Ci0JCWNsa19lbmFibGUoeHVhcnRwcy0+cmVmY2xrKTsKKwkJY2xrX2VuYWJsZShjZG5zX3VhcnQtPnBjbGspOworCQljbGtfZW5hYmxlKGNkbnNfdWFydC0+dWFydGNsayk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCQkvKiBTZXQgVFgvUlggUmVzZXQgKi8KLQkJeHVhcnRwc193cml0ZWwoeHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCkgfAotCQkJCShYVUFSVFBTX0NSX1RYUlNUIHwgWFVBUlRQU19DUl9SWFJTVCksCi0JCQkJWFVBUlRQU19DUl9PRkZTRVQpOwotCQl3aGlsZSAoeHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCkgJgotCQkJCShYVUFSVFBTX0NSX1RYUlNUIHwgWFVBUlRQU19DUl9SWFJTVCkpCisJCWN0cmxfcmVnID0gY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9DUl9PRkZTRVQpOworCQljdHJsX3JlZyB8PSBDRE5TX1VBUlRfQ1JfVFhSU1QgfCBDRE5TX1VBUlRfQ1JfUlhSU1Q7CisJCWNkbnNfdWFydF93cml0ZWwoY3RybF9yZWcsIENETlNfVUFSVF9DUl9PRkZTRVQpOworCQl3aGlsZSAoY2Ruc191YXJ0X3JlYWRsKENETlNfVUFSVF9DUl9PRkZTRVQpICYKKwkJCQkoQ0ROU19VQVJUX0NSX1RYUlNUIHwgQ0ROU19VQVJUX0NSX1JYUlNUKSkKIAkJCWNwdV9yZWxheCgpOwogCiAJCS8qIHJlc3RvcmUgcnggdGltZW91dCB2YWx1ZSAqLwotCQl4dWFydHBzX3dyaXRlbChyeF90aW1lb3V0LCBYVUFSVFBTX1JYVE9VVF9PRkZTRVQpOworCQljZG5zX3VhcnRfd3JpdGVsKHJ4X3RpbWVvdXQsIENETlNfVUFSVF9SWFRPVVRfT0ZGU0VUKTsKIAkJLyogRW5hYmxlIFR4L1J4ICovCi0JCWN0cmxfcmVnID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCk7Ci0JCXh1YXJ0cHNfd3JpdGVsKAotCQkJKGN0cmxfcmVnICYgfihYVUFSVFBTX0NSX1RYX0RJUyB8IFhVQVJUUFNfQ1JfUlhfRElTKSkgfAotCQkJKFhVQVJUUFNfQ1JfVFhfRU4gfCBYVUFSVFBTX0NSX1JYX0VOKSwKLQkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwkJY3RybF9yZWcgPSBjZG5zX3VhcnRfcmVhZGwoQ0ROU19VQVJUX0NSX09GRlNFVCk7CisJCWN0cmxfcmVnICY9IH4oQ0ROU19VQVJUX0NSX1RYX0RJUyB8IENETlNfVUFSVF9DUl9SWF9ESVMpOworCQljdHJsX3JlZyB8PSBDRE5TX1VBUlRfQ1JfVFhfRU4gfCBDRE5TX1VBUlRfQ1JfUlhfRU47CisJCWNkbnNfdWFydF93cml0ZWwoY3RybF9yZWcsIENETlNfVUFSVF9DUl9PRkZTRVQpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCQkvKiByZXN0b3JlIG9yaWdpbmFsIHJ4IHRyaWdnZXIgbGV2ZWwgKi8KLQkJeHVhcnRwc193cml0ZWwocnhfdHJpZ2dlcl9sZXZlbCwgWFVBUlRQU19SWFdNX09GRlNFVCk7CisJCWNkbnNfdWFydF93cml0ZWwocnhfdHJpZ2dlcl9sZXZlbCwgQ0ROU19VQVJUX1JYV01fT0ZGU0VUKTsKIAkJLyogZW5hYmxlIFJYIHRpbWVvdXQgaW50ZXJydXB0ICovCi0JCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfSVhSX1RPVVQsIFhVQVJUUFNfSUVSX09GRlNFVCk7CisJCWNkbnNfdWFydF93cml0ZWwoQ0ROU19VQVJUX0lYUl9UT1VULCBDRE5TX1VBUlRfSUVSX09GRlNFVCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gdWFydF9yZXN1bWVfcG9ydCgmeHVhcnRwc191YXJ0X2RyaXZlciwgcG9ydCk7CisJcmV0dXJuIHVhcnRfcmVzdW1lX3BvcnQoJmNkbnNfdWFydF91YXJ0X2RyaXZlciwgcG9ydCk7CiB9CiAjZW5kaWYgLyogISBDT05GSUdfUE1fU0xFRVAgKi8KIAotc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHh1YXJ0cHNfZGV2X3BtX29wcywgeHVhcnRwc19zdXNwZW5kLCB4dWFydHBzX3Jlc3VtZSk7CitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoY2Ruc191YXJ0X2Rldl9wbV9vcHMsIGNkbnNfdWFydF9zdXNwZW5kLAorCQljZG5zX3VhcnRfcmVzdW1lKTsKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQbGF0Zm9ybSBidXMgYmluZGluZwotICovCiAvKioKLSAqIHh1YXJ0cHNfcHJvYmUgLSBQbGF0Zm9ybSBkcml2ZXIgcHJvYmUKKyAqIGNkbnNfdWFydF9wcm9iZSAtIFBsYXRmb3JtIGRyaXZlciBwcm9iZQogICogQHBkZXY6IFBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb3RoZXJ3aXNlCi0gKiovCi1zdGF0aWMgaW50IHh1YXJ0cHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBjZG5zX3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBpZDsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqcmVzMjsKLQlzdHJ1Y3QgeHVhcnRwcyAqeHVhcnRwc19kYXRhOworCXN0cnVjdCBjZG5zX3VhcnQgKmNkbnNfdWFydF9kYXRhOwogCi0JeHVhcnRwc19kYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqeHVhcnRwc19kYXRhKSwKKwljZG5zX3VhcnRfZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmNkbnNfdWFydF9kYXRhKSwKIAkJCUdGUF9LRVJORUwpOwotCWlmICgheHVhcnRwc19kYXRhKQorCWlmICghY2Ruc191YXJ0X2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JeHVhcnRwc19kYXRhLT5hcGVyY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJhcGVyX2NsayIpOwotCWlmIChJU19FUlIoeHVhcnRwc19kYXRhLT5hcGVyY2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhcGVyX2NsayBjbG9jayBub3QgZm91bmQuXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoeHVhcnRwc19kYXRhLT5hcGVyY2xrKTsKKwljZG5zX3VhcnRfZGF0YS0+cGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIoY2Ruc191YXJ0X2RhdGEtPnBjbGspKSB7CisJCWNkbnNfdWFydF9kYXRhLT5wY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJhcGVyX2NsayIpOworCQlpZiAoIUlTX0VSUihjZG5zX3VhcnRfZGF0YS0+cGNsaykpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjbG9jayBuYW1lICdhcGVyX2NsaycgaXMgZGVwcmVjYXRlZC5cbiIpOwogCX0KLQl4dWFydHBzX2RhdGEtPnJlZmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicmVmX2NsayIpOwotCWlmIChJU19FUlIoeHVhcnRwc19kYXRhLT5yZWZjbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZl9jbGsgY2xvY2sgbm90IGZvdW5kLlxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHh1YXJ0cHNfZGF0YS0+cmVmY2xrKTsKKwlpZiAoSVNfRVJSKGNkbnNfdWFydF9kYXRhLT5wY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2xrIGNsb2NrIG5vdCBmb3VuZC5cbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZG5zX3VhcnRfZGF0YS0+cGNsayk7CiAJfQogCi0JcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoeHVhcnRwc19kYXRhLT5hcGVyY2xrKTsKKwljZG5zX3VhcnRfZGF0YS0+dWFydGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAidWFydF9jbGsiKTsKKwlpZiAoSVNfRVJSKGNkbnNfdWFydF9kYXRhLT51YXJ0Y2xrKSkgeworCQljZG5zX3VhcnRfZGF0YS0+dWFydGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicmVmX2NsayIpOworCQlpZiAoIUlTX0VSUihjZG5zX3VhcnRfZGF0YS0+dWFydGNsaykpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjbG9jayBuYW1lICdyZWZfY2xrJyBpcyBkZXByZWNhdGVkLlxuIik7CisJfQorCWlmIChJU19FUlIoY2Ruc191YXJ0X2RhdGEtPnVhcnRjbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVhcnRfY2xrIGNsb2NrIG5vdCBmb3VuZC5cbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZG5zX3VhcnRfZGF0YS0+dWFydGNsayk7CisJfQorCisJcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2Ruc191YXJ0X2RhdGEtPnBjbGspOwogCWlmIChyYykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIEFQRVIgY2xvY2suXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJsZSBwY2xrIGNsb2NrLlxuIik7CiAJCXJldHVybiByYzsKIAl9Ci0JcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoeHVhcnRwc19kYXRhLT5yZWZjbGspOworCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNkbnNfdWFydF9kYXRhLT51YXJ0Y2xrKTsKIAlpZiAocmMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJsZSBkZXZpY2UgY2xvY2suXG4iKTsKLQkJZ290byBlcnJfb3V0X2Nsa19kaXNfYXBlcjsKKwkJZ290byBlcnJfb3V0X2Nsa19kaXNfcGNsazsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtMTM4NSwxNSArMTM0NiwxOSBAQAogCX0KIAogI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCi0JeHVhcnRwc19kYXRhLT5jbGtfcmF0ZV9jaGFuZ2VfbmIubm90aWZpZXJfY2FsbCA9Ci0JCQl4dWFydHBzX2Nsa19ub3RpZmllcl9jYjsKLQlpZiAoY2xrX25vdGlmaWVyX3JlZ2lzdGVyKHh1YXJ0cHNfZGF0YS0+cmVmY2xrLAotCQkJCSZ4dWFydHBzX2RhdGEtPmNsa19yYXRlX2NoYW5nZV9uYikpCisJY2Ruc191YXJ0X2RhdGEtPmNsa19yYXRlX2NoYW5nZV9uYi5ub3RpZmllcl9jYWxsID0KKwkJCWNkbnNfdWFydF9jbGtfbm90aWZpZXJfY2I7CisJaWYgKGNsa19ub3RpZmllcl9yZWdpc3RlcihjZG5zX3VhcnRfZGF0YS0+dWFydGNsaywKKwkJCQkmY2Ruc191YXJ0X2RhdGEtPmNsa19yYXRlX2NoYW5nZV9uYikpCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgY2xvY2sgbm90aWZpZXIuXG4iKTsKICNlbmRpZgorCS8qIExvb2sgZm9yIGEgc2VyaWFsTiBhbGlhcyAqLworCWlkID0gb2ZfYWxpYXNfZ2V0X2lkKHBkZXYtPmRldi5vZl9ub2RlLCAic2VyaWFsIik7CisJaWYgKGlkIDwgMCkKKwkJaWQgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcG9ydCBzdHJ1Y3R1cmUgKi8KLQlwb3J0ID0geHVhcnRwc19nZXRfcG9ydCgpOworCXBvcnQgPSBjZG5zX3VhcnRfZ2V0X3BvcnQoaWQpOwogCiAJaWYgKCFwb3J0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgdWFydF9wb3J0IHN0cnVjdHVyZVxuIik7CkBAIC0xNDA3LDExICsxMzcyLDExIEBACiAJCXBvcnQtPm1hcGJhc2UgPSByZXMtPnN0YXJ0OwogCQlwb3J0LT5pcnEgPSByZXMyLT5zdGFydDsKIAkJcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKLQkJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZSh4dWFydHBzX2RhdGEtPnJlZmNsayk7Ci0JCXBvcnQtPnByaXZhdGVfZGF0YSA9IHh1YXJ0cHNfZGF0YTsKLQkJeHVhcnRwc19kYXRhLT5wb3J0ID0gcG9ydDsKKwkJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZShjZG5zX3VhcnRfZGF0YS0+dWFydGNsayk7CisJCXBvcnQtPnByaXZhdGVfZGF0YSA9IGNkbnNfdWFydF9kYXRhOworCQljZG5zX3VhcnRfZGF0YS0+cG9ydCA9IHBvcnQ7CiAJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBvcnQpOwotCQlyYyA9IHVhcnRfYWRkX29uZV9wb3J0KCZ4dWFydHBzX3VhcnRfZHJpdmVyLCBwb3J0KTsKKwkJcmMgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmY2Ruc191YXJ0X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAkJaWYgKHJjKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkJInVhcnRfYWRkX29uZV9wb3J0KCkgZmFpbGVkOyBlcnI9JWlcbiIsIHJjKTsKQEAgLTE0MjIsMTAzICsxMzg3LDg5IEBACiAKIGVycl9vdXRfbm90aWZfdW5yZWc6CiAjaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKLQljbGtfbm90aWZpZXJfdW5yZWdpc3Rlcih4dWFydHBzX2RhdGEtPnJlZmNsaywKLQkJCSZ4dWFydHBzX2RhdGEtPmNsa19yYXRlX2NoYW5nZV9uYik7CisJY2xrX25vdGlmaWVyX3VucmVnaXN0ZXIoY2Ruc191YXJ0X2RhdGEtPnVhcnRjbGssCisJCQkmY2Ruc191YXJ0X2RhdGEtPmNsa19yYXRlX2NoYW5nZV9uYik7CiAjZW5kaWYKIGVycl9vdXRfY2xrX2Rpc2FibGU6Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHh1YXJ0cHNfZGF0YS0+cmVmY2xrKTsKLWVycl9vdXRfY2xrX2Rpc19hcGVyOgotCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4dWFydHBzX2RhdGEtPmFwZXJjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZG5zX3VhcnRfZGF0YS0+dWFydGNsayk7CitlcnJfb3V0X2Nsa19kaXNfcGNsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2Ruc191YXJ0X2RhdGEtPnBjbGspOwogCiAJcmV0dXJuIHJjOwogfQogCiAvKioKLSAqIHh1YXJ0cHNfcmVtb3ZlIC0gY2FsbGVkIHdoZW4gdGhlIHBsYXRmb3JtIGRyaXZlciBpcyB1bnJlZ2lzdGVyZWQKKyAqIGNkbnNfdWFydF9yZW1vdmUgLSBjYWxsZWQgd2hlbiB0aGUgcGxhdGZvcm0gZHJpdmVyIGlzIHVucmVnaXN0ZXJlZAogICogQHBkZXY6IFBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb3RoZXJ3aXNlCi0gKiovCi1zdGF0aWMgaW50IHh1YXJ0cHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgY2Ruc191YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgeHVhcnRwcyAqeHVhcnRwc19kYXRhID0gcG9ydC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjZG5zX3VhcnQgKmNkbnNfdWFydF9kYXRhID0gcG9ydC0+cHJpdmF0ZV9kYXRhOwogCWludCByYzsKIAotCS8qIFJlbW92ZSB0aGUgeHVhcnRwcyBwb3J0IGZyb20gdGhlIHNlcmlhbCBjb3JlICovCisJLyogUmVtb3ZlIHRoZSBjZG5zX3VhcnQgcG9ydCBmcm9tIHRoZSBzZXJpYWwgY29yZSAqLwogI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCi0JY2xrX25vdGlmaWVyX3VucmVnaXN0ZXIoeHVhcnRwc19kYXRhLT5yZWZjbGssCi0JCQkmeHVhcnRwc19kYXRhLT5jbGtfcmF0ZV9jaGFuZ2VfbmIpOworCWNsa19ub3RpZmllcl91bnJlZ2lzdGVyKGNkbnNfdWFydF9kYXRhLT51YXJ0Y2xrLAorCQkJJmNkbnNfdWFydF9kYXRhLT5jbGtfcmF0ZV9jaGFuZ2VfbmIpOwogI2VuZGlmCi0JcmMgPSB1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmeHVhcnRwc191YXJ0X2RyaXZlciwgcG9ydCk7CisJcmMgPSB1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmY2Ruc191YXJ0X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAlwb3J0LT5tYXBiYXNlID0gMDsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoeHVhcnRwc19kYXRhLT5yZWZjbGspOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4dWFydHBzX2RhdGEtPmFwZXJjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZG5zX3VhcnRfZGF0YS0+dWFydGNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNkbnNfdWFydF9kYXRhLT5wY2xrKTsKIAlyZXR1cm4gcmM7CiB9CiAKIC8qIE1hdGNoIHRhYmxlIGZvciBvZl9wbGF0Zm9ybSBiaW5kaW5nICovCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4dWFydHBzX29mX21hdGNoW10gPSB7CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjZG5zX3VhcnRfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHVhcnRwcyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJjZG5zLHVhcnQtcjFwOCIsIH0sCiAJe30KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4dWFydHBzX29mX21hdGNoKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNkbnNfdWFydF9vZl9tYXRjaCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHh1YXJ0cHNfcGxhdGZvcm1fZHJpdmVyID0gewotCS5wcm9iZSAgID0geHVhcnRwc19wcm9iZSwJCS8qIFByb2JlIG1ldGhvZCAqLwotCS5yZW1vdmUgID0geHVhcnRwc19yZW1vdmUsCQkvKiBEZXRhY2ggbWV0aG9kICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5zX3VhcnRfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSAgID0gY2Ruc191YXJ0X3Byb2JlLAorCS5yZW1vdmUgID0gY2Ruc191YXJ0X3JlbW92ZSwKIAkuZHJpdmVyICA9IHsKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gWFVBUlRQU19OQU1FLAkJLyogRHJpdmVyIG5hbWUgKi8KLQkJLm9mX21hdGNoX3RhYmxlID0geHVhcnRwc19vZl9tYXRjaCwKLQkJLnBtID0gJnh1YXJ0cHNfZGV2X3BtX29wcywKKwkJLm5hbWUgPSBDRE5TX1VBUlRfTkFNRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gY2Ruc191YXJ0X29mX21hdGNoLAorCQkucG0gPSAmY2Ruc191YXJ0X2Rldl9wbV9vcHMsCiAJCX0sCiB9OwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE1vZHVsZSBJbml0IGFuZCBFeGl0Ci0gKi8KLS8qKgotICogeHVhcnRwc19pbml0IC0gSW5pdGlhbCBkcml2ZXIgcmVnaXN0cmF0aW9uIGNhbGwKLSAqCi0gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QKLSAqKi8KLXN0YXRpYyBpbnQgX19pbml0IHh1YXJ0cHNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2Ruc191YXJ0X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAotCS8qIFJlZ2lzdGVyIHRoZSB4dWFydHBzIGRyaXZlciB3aXRoIHRoZSBzZXJpYWwgY29yZSAqLwotCXJldHZhbCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZ4dWFydHBzX3VhcnRfZHJpdmVyKTsKKwkvKiBSZWdpc3RlciB0aGUgY2Ruc191YXJ0IGRyaXZlciB3aXRoIHRoZSBzZXJpYWwgY29yZSAqLworCXJldHZhbCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZjZG5zX3VhcnRfdWFydF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBSZWdpc3RlciB0aGUgcGxhdGZvcm0gZHJpdmVyICovCi0JcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4dWFydHBzX3BsYXRmb3JtX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjZG5zX3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZ4dWFydHBzX3VhcnRfZHJpdmVyKTsKKwkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY2Ruc191YXJ0X3VhcnRfZHJpdmVyKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qKgotICogeHVhcnRwc19leGl0IC0gRHJpdmVyIHVucmVnaXN0cmF0aW9uIGNhbGwKLSAqKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB4dWFydHBzX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjZG5zX3VhcnRfZXhpdCh2b2lkKQogewotCS8qIFRoZSBvcmRlciBvZiB1bnJlZ2lzdHJhdGlvbiBpcyBpbXBvcnRhbnQuIFVucmVnaXN0ZXIgdGhlCi0JICogVUFSVCBkcml2ZXIgYmVmb3JlIHRoZSBwbGF0Zm9ybSBkcml2ZXIgY3Jhc2hlcyB0aGUgc3lzdGVtLgotCSAqLwotCiAJLyogVW5yZWdpc3RlciB0aGUgcGxhdGZvcm0gZHJpdmVyICovCi0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnh1YXJ0cHNfcGxhdGZvcm1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY2Ruc191YXJ0X3BsYXRmb3JtX2RyaXZlcik7CiAKLQkvKiBVbnJlZ2lzdGVyIHRoZSB4dWFydHBzIGRyaXZlciAqLwotCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnh1YXJ0cHNfdWFydF9kcml2ZXIpOworCS8qIFVucmVnaXN0ZXIgdGhlIGNkbnNfdWFydCBkcml2ZXIgKi8KKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZjZG5zX3VhcnRfdWFydF9kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdCh4dWFydHBzX2luaXQpOwotbW9kdWxlX2V4aXQoeHVhcnRwc19leGl0KTsKK21vZHVsZV9pbml0KGNkbnNfdWFydF9pbml0KTsKK21vZHVsZV9leGl0KGNkbnNfdWFydF9leGl0KTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBTIFVBUlQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBDYWRlbmNlIFVBUlQiKTsKIE1PRFVMRV9BVVRIT1IoIlhpbGlueCBJbmMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC9jb25zb2xlbWFwLmMgYi9kcml2ZXJzL3R0eS92dC9jb25zb2xlbWFwLmMKaW5kZXggMjk3OGNhNS4uNjEwYjcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvY29uc29sZW1hcC5jCisrKyBiL2RyaXZlcnMvdHR5L3Z0L2NvbnNvbGVtYXAuYwpAQCAtMTc5LDcgKzE3OSw2IEBACiAJdW5zaWduZWQgbG9uZwlzdW07CiAJdW5zaWduZWQgY2hhcgkqaW52ZXJzZV90cmFuc2xhdGlvbnNbNF07CiAJdTE2CQkqaW52ZXJzZV90cmFuc191bmljb2RlOwotCWludAkJcmVhZG9ubHk7CiB9OwogCiBzdGF0aWMgc3RydWN0IHVuaV9wYWdlZGlyICpkZmx0OwpAQCAtMjYyLDcgKzI2MSw3IEBACiAJaW50IG07CiAJaWYgKGdseXBoIDwgMCB8fCBnbHlwaCA+PSBNQVhfR0xZUEgpCiAJCXJldHVybiAwOwotCWVsc2UgaWYgKCEocCA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKikqY29ucC0+dmNfdW5pX3BhZ2VkaXJfbG9jKSkKKwllbHNlIGlmICghKHAgPSAqY29ucC0+dmNfdW5pX3BhZ2VkaXJfbG9jKSkKIAkJcmV0dXJuIGdseXBoOwogCWVsc2UgaWYgKHVzZV91bmljb2RlKSB7CiAJCWlmICghcC0+aW52ZXJzZV90cmFuc191bmljb2RlKQpAQCAtMjg3LDcgKzI4Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CiAJCWlmICghdmNfY29uc19hbGxvY2F0ZWQoaSkpCiAJCQljb250aW51ZTsKLQkJcCA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKikqdmNfY29uc1tpXS5kLT52Y191bmlfcGFnZWRpcl9sb2M7CisJCXAgPSAqdmNfY29uc1tpXS5kLT52Y191bmlfcGFnZWRpcl9sb2M7CiAJCWlmIChwICYmIHAgIT0gcSkgewogCQkJc2V0X2ludmVyc2VfdHJhbnNsKHZjX2NvbnNbaV0uZCwgcCwgVVNFUl9NQVApOwogCQkJc2V0X2ludmVyc2VfdHJhbnNfdW5pY29kZSh2Y19jb25zW2ldLmQsIHApOwpAQCAtNDE4LDEwICs0MTcsMTAgQEAKIHsKIAlzdHJ1Y3QgdW5pX3BhZ2VkaXIgKnA7CiAKLQlwID0gKHN0cnVjdCB1bmlfcGFnZWRpciAqKSp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOworCXAgPSAqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKIAlpZiAoIXApCiAJCXJldHVybjsKLQkqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9IDA7CisJKnZjLT52Y191bmlfcGFnZWRpcl9sb2MgPSBOVUxMOwogCWlmICgtLXAtPnJlZmNvdW50KQogCQlyZXR1cm47CiAJY29uX3JlbGVhc2VfdW5pbWFwKHApOwpAQCAtNDM2LDcgKzQzNSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CiAJCWlmICghdmNfY29uc19hbGxvY2F0ZWQoaSkpCiAJCQljb250aW51ZTsKLQkJcSA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKikqdmNfY29uc1tpXS5kLT52Y191bmlfcGFnZWRpcl9sb2M7CisJCXEgPSAqdmNfY29uc1tpXS5kLT52Y191bmlfcGFnZWRpcl9sb2M7CiAJCWlmICghcSB8fCBxID09IHAgfHwgcS0+c3VtICE9IHAtPnN1bSkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewpAQCAtNDU5LDcgKzQ1OCw3IEBACiAJCX0KIAkJaWYgKGogPT0gMzIpIHsKIAkJCXEtPnJlZmNvdW50Kys7Ci0JCQkqY29ucC0+dmNfdW5pX3BhZ2VkaXJfbG9jID0gKHVuc2lnbmVkIGxvbmcpcTsKKwkJCSpjb25wLT52Y191bmlfcGFnZWRpcl9sb2MgPSBxOwogCQkJY29uX3JlbGVhc2VfdW5pbWFwKHApOwogCQkJa2ZyZWUocCk7CiAJCQlyZXR1cm4gMTsKQEAgLTUwMCwxMCArNDk5LDcgQEAKIHsKIAlzdHJ1Y3QgdW5pX3BhZ2VkaXIgKnAsICpxOwogCi0JcCA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKikqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKLQlpZiAocCAmJiBwLT5yZWFkb25seSkKLQkJcmV0dXJuIC1FSU87Ci0KKwlwID0gKnZjLT52Y191bmlfcGFnZWRpcl9sb2M7CiAJaWYgKCFwIHx8IC0tcC0+cmVmY291bnQpIHsKIAkJcSA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcSkgewpAQCAtNTEyLDcgKzUwOCw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlxLT5yZWZjb3VudD0xOwotCQkqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9ICh1bnNpZ25lZCBsb25nKXE7CisJCSp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jID0gcTsKIAl9IGVsc2UgewogCQlpZiAocCA9PSBkZmx0KSBkZmx0ID0gTlVMTDsKIAkJcC0+cmVmY291bnQrKzsKQEAgLTUzNiwxOSArNTMyLDEzIEBACiAJaW50IGVyciA9IDAsIGVycjEsIGk7CiAJc3RydWN0IHVuaV9wYWdlZGlyICpwLCAqcTsKIAorCWlmICghY3QpCisJCXJldHVybiAwOworCiAJY29uc29sZV9sb2NrKCk7CiAKIAkvKiBTYXZlIG9yaWdpbmFsIHZjX3VuaXBhZ2Rpcl9sb2MgaW4gY2FzZSB3ZSBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KLQlwID0gKHN0cnVjdCB1bmlfcGFnZWRpciAqKSp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOwotCWlmIChwLT5yZWFkb25seSkgewotCQljb25zb2xlX3VubG9jaygpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JCi0JaWYgKCFjdCkgewotCQljb25zb2xlX3VubG9jaygpOwotCQlyZXR1cm4gMDsKLQl9CisJcCA9ICp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOwogCQogCWlmIChwLT5yZWZjb3VudCA+IDEpIHsKIAkJaW50IGosIGs7CkBAIC01NjQsNyArNTU0LDcgQEAKIAkJICogU2luY2UgcmVmY291bnQgd2FzID4gMSwgY29uX2NsZWFyX3VuaW1hcCgpIGFsbG9jYXRlZCBhCiAJCSAqIGEgbmV3IHVuaV9wYWdlZGlyIGZvciB0aGlzIHZjLiAgUmU6IHAgIT0gcQogCQkgKi8KLQkJcSA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKikqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKKwkJcSA9ICp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOwogCiAJCS8qCiAJCSAqIHVuaV9wZ2RpciBpcyBhIDMyKjMyKjY0IHRhYmxlIHdpdGggcm93cyBhbGxvY2F0ZWQKQEAgLTU4Niw3ICs1NzYsNyBAQAogCQkJCQllcnIxID0gY29uX2luc2VydF91bmlwYWlyKHEsIGwsIHAyW2tdKTsKIAkJCQkJaWYgKGVycjEpIHsKIAkJCQkJCXAtPnJlZmNvdW50Kys7Ci0JCQkJCQkqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9ICh1bnNpZ25lZCBsb25nKXA7CisJCQkJCQkqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9IHA7CiAJCQkJCQljb25fcmVsZWFzZV91bmltYXAocSk7CiAJCQkJCQlrZnJlZShxKTsKIAkJCQkJCWNvbnNvbGVfdW5sb2NrKCk7CkBAIC02NTUsMTIgKzY0NSwxMiBAQAogCXN0cnVjdCB1bmlfcGFnZWRpciAqcDsKIAogCWlmIChkZmx0KSB7Ci0JCXAgPSAoc3RydWN0IHVuaV9wYWdlZGlyICopKnZjLT52Y191bmlfcGFnZWRpcl9sb2M7CisJCXAgPSAqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKIAkJaWYgKHAgPT0gZGZsdCkKIAkJCXJldHVybiAwOwogCiAJCWRmbHQtPnJlZmNvdW50Kys7Ci0JCSp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jID0gKHVuc2lnbmVkIGxvbmcpZGZsdDsKKwkJKnZjLT52Y191bmlfcGFnZWRpcl9sb2MgPSBkZmx0OwogCQlpZiAocCAmJiAhLS1wLT5yZWZjb3VudCkgewogCQkJY29uX3JlbGVhc2VfdW5pbWFwKHApOwogCQkJa2ZyZWUocCk7CkBAIC02NzQsNyArNjY0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogICAgIAotCXAgPSAoc3RydWN0IHVuaV9wYWdlZGlyICopKnZjLT52Y191bmlfcGFnZWRpcl9sb2M7CisJcCA9ICp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOwogCXEgPSBkZm9udF91bml0YWJsZTsKIAkKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCkBAIC02ODUsNyArNjc1LDcgQEAKIAkJfQogCQkJCiAJaWYgKGNvbl91bmlmeV91bmltYXAodmMsIHApKSB7Ci0JCWRmbHQgPSAoc3RydWN0IHVuaV9wYWdlZGlyICopKnZjLT52Y191bmlfcGFnZWRpcl9sb2M7CisJCWRmbHQgPSAqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTcxMyw5ICs3MDMsOSBAQAogCWlmICgqZHN0X3ZjLT52Y191bmlfcGFnZWRpcl9sb2MgPT0gKnNyY192Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jKQogCQlyZXR1cm4gMDsKIAljb25fZnJlZV91bmltYXAoZHN0X3ZjKTsKLQlxID0gKHN0cnVjdCB1bmlfcGFnZWRpciAqKSpzcmNfdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKKwlxID0gKnNyY192Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOwogCXEtPnJlZmNvdW50Kys7Ci0JKmRzdF92Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jID0gKGxvbmcpcTsKKwkqZHN0X3ZjLT52Y191bmlfcGFnZWRpcl9sb2MgPSBxOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChjb25fY29weV91bmltYXApOwpAQCAtNzM3LDcgKzcyNyw3IEBACiAKIAllY3QgPSAwOwogCWlmICgqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYykgewotCQlwID0gKHN0cnVjdCB1bmlfcGFnZWRpciAqKSp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jOworCQlwID0gKnZjLT52Y191bmlfcGFnZWRpcl9sb2M7CiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQogCQlpZiAoKHAxID0gcC0+dW5pX3BnZGlyW2ldKSkKIAkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKQpAQCAtODEwLDcgKzgwMCw3IEBACiAJaWYgKCEqY29ucC0+dmNfdW5pX3BhZ2VkaXJfbG9jKQogCQlyZXR1cm4gLTM7CiAKLQlwID0gKHN0cnVjdCB1bmlfcGFnZWRpciAqKSpjb25wLT52Y191bmlfcGFnZWRpcl9sb2M7ICAKKwlwID0gKmNvbnAtPnZjX3VuaV9wYWdlZGlyX2xvYzsKIAlpZiAoKHAxID0gcC0+dW5pX3BnZGlyW3VjcyA+PiAxMV0pICYmCiAJICAgIChwMiA9IHAxWyh1Y3MgPj4gNikgJiAweDFmXSkgJiYKIAkgICAgKGggPSBwMlt1Y3MgJiAweDNmXSkgPCBNQVhfR0xZUEgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92dC5jIGIvZHJpdmVycy90dHkvdnQvdnQuYwppbmRleCAzYWQwYjYxLi41ZTBmNmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC92dC5jCisrKyBiL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKQEAgLTczNSw3ICs3MzUsNyBAQAogCXZjLT52Y19udW0gPSBudW07CiAJdmMtPnZjX2Rpc3BsYXlfZmcgPSAmbWFzdGVyX2Rpc3BsYXlfZmc7CiAJdmMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9ICZ2Yy0+dmNfdW5pX3BhZ2VkaXI7Ci0JdmMtPnZjX3VuaV9wYWdlZGlyID0gMDsKKwl2Yy0+dmNfdW5pX3BhZ2VkaXIgPSBOVUxMOwogCXZjLT52Y19oaV9mb250X21hc2sgPSAwOwogCXZjLT52Y19jb21wbGVtZW50X21hc2sgPSAwOwogCXZjLT52Y19jYW5fZG9fY29sb3IgPSAwOwpAQCAtMTIzMSw2ICsxMjMxLDUyIEBACiAJdmMtPnZjX2NvbG9yID0gdmMtPnZjX2RlZl9jb2xvcjsKIH0KIAorc3RydWN0IHJnYiB7IHU4IHI7IHU4IGc7IHU4IGI7IH07CisKK3N0cnVjdCByZ2IgcmdiX2Zyb21fMjU2KGludCBpKQoreworCXN0cnVjdCByZ2IgYzsKKwlpZiAoaSA8IDgpIHsgICAgICAgICAgICAvKiBTdGFuZGFyZCBjb2xvdXJzLiAqLworCQljLnIgPSBpJjEgPyAweGFhIDogMHgwMDsKKwkJYy5nID0gaSYyID8gMHhhYSA6IDB4MDA7CisJCWMuYiA9IGkmNCA/IDB4YWEgOiAweDAwOworCX0gZWxzZSBpZiAoaSA8IDE2KSB7CisJCWMuciA9IGkmMSA/IDB4ZmYgOiAweDU1OworCQljLmcgPSBpJjIgPyAweGZmIDogMHg1NTsKKwkJYy5iID0gaSY0ID8gMHhmZiA6IDB4NTU7CisJfSBlbHNlIGlmIChpIDwgMjMyKSB7ICAgLyogNng2eDYgY29sb3VyIGN1YmUuICovCisJCWMuciA9IChpIC0gMTYpIC8gMzYgKiA4NSAvIDI7CisJCWMuZyA9IChpIC0gMTYpIC8gNiAlIDYgKiA4NSAvIDI7CisJCWMuYiA9IChpIC0gMTYpICUgNiAqIDg1IC8gMjsKKwl9IGVsc2UgICAgICAgICAgICAgICAgICAvKiBHcmF5c2NhbGUgcmFtcC4gKi8KKwkJYy5yID0gYy5nID0gYy5iID0gaSAqIDEwIC0gMjMxMjsKKwlyZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQgcmdiX2ZvcmVncm91bmQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgcmdiIGMpCit7CisJdTggaHVlLCBtYXggPSBjLnI7CisJaWYgKGMuZyA+IG1heCkKKwkJbWF4ID0gYy5nOworCWlmIChjLmIgPiBtYXgpCisJCW1heCA9IGMuYjsKKwlodWUgPSAoYy5yID4gbWF4LzIgPyA0IDogMCkKKwkgICAgfCAoYy5nID4gbWF4LzIgPyAyIDogMCkKKwkgICAgfCAoYy5iID4gbWF4LzIgPyAxIDogMCk7CisJaWYgKGh1ZSA9PSA3ICYmIG1heCA8PSAweDU1KQorCQlodWUgPSAwLCB2Yy0+dmNfaW50ZW5zaXR5ID0gMjsKKwllbHNlCisJCXZjLT52Y19pbnRlbnNpdHkgPSAobWF4ID4gMHhhYSkgKyAxOworCXZjLT52Y19jb2xvciA9ICh2Yy0+dmNfY29sb3IgJiAweGYwKSB8IGh1ZTsKK30KKworc3RhdGljIHZvaWQgcmdiX2JhY2tncm91bmQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgcmdiIGMpCit7CisJLyogRm9yIGJhY2tncm91bmRzLCBlcnIgb24gdGhlIGRhcmsgc2lkZS4gKi8KKwl2Yy0+dmNfY29sb3IgPSAodmMtPnZjX2NvbG9yICYgMHgwZikKKwkJfCAoYy5yJjB4ODApID4+IDEgfCAoYy5nJjB4ODApID4+IDIgfCAoYy5iJjB4ODApID4+IDM7Cit9CisKIC8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBjc2lfbShzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CkBAIC0xMzAyLDggKzEzNDgsNyBAQAogCQkJY2FzZSAyNzoKIAkJCQl2Yy0+dmNfcmV2ZXJzZSA9IDA7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIDM4OgotCQkJY2FzZSA0ODogLyogSVRVIFQuNDE2CisJCQljYXNlIDM4OiAvKiBJVFUgVC40MTYKIAkJCQkgICogSGlnaGVyIGNvbG91ciBtb2Rlcy4KIAkJCQkgICogVGhleSBicmVhayB0aGUgdXN1YWwgcHJvcGVydGllcyBvZiBTR1IgY29kZXMKIAkJCQkgICogYW5kIHRodXMgbmVlZCB0byBiZSBkZXRlY3RlZCBhbmQgaWdub3JlZCBieQpAQCAtMTMxNSwxNSArMTM2MCw0MSBAQAogCQkJCWkrKzsKIAkJCQlpZiAoaSA+IHZjLT52Y19ucGFyKQogCQkJCQlicmVhazsKLQkJCQlpZiAodmMtPnZjX3BhcltpXSA9PSA1KSAgICAgIC8qIDI1NiBjb2xvdXJzICovCi0JCQkJCWkrKzsgICAgICAgICAgICAgICAgIC8qIHViaXF1aXRvdXMgKi8KLQkJCQllbHNlIGlmICh2Yy0+dmNfcGFyW2ldID09IDIpIC8qIDI0IGJpdCBjb2xvdXJzICovCi0JCQkJCWkgKz0gMzsgICAgICAgICAgICAgIC8qIGV4dHJlbWVseSByYXJlICovCisJCQkJaWYgKHZjLT52Y19wYXJbaV0gPT0gNSAmJiAgLyogMjU2IGNvbG91cnMgKi8KKwkJCQkgICAgaSA8IHZjLT52Y19ucGFyKSB7ICAgICAvKiB1YmlxdWl0b3VzICovCisJCQkJCWkrKzsKKwkJCQkJcmdiX2ZvcmVncm91bmQodmMsCisJCQkJCQlyZ2JfZnJvbV8yNTYodmMtPnZjX3BhcltpXSkpOworCQkJCX0gZWxzZSBpZiAodmMtPnZjX3BhcltpXSA9PSAyICYmICAvKiAyNCBiaXQgKi8KKwkJCQkgICAgICAgICAgIGkgPD0gdmMtPnZjX25wYXIgKyAzKSB7LyogZXh0cmVtZWx5IHJhcmUgKi8KKwkJCQkJc3RydWN0IHJnYiBjID0ge3I6dmMtPnZjX3BhcltpKzFdLAorCQkJCQkJCWc6dmMtPnZjX3BhcltpKzJdLAorCQkJCQkJCWI6dmMtPnZjX3BhcltpKzNdfTsKKwkJCQkJcmdiX2ZvcmVncm91bmQodmMsIGMpOworCQkJCQlpICs9IDM7CisJCQkJfQogCQkJCS8qIFN1YmNvbW1hbmRzIDMgKENNWSkgYW5kIDQgKENNWUspIGFyZSBzbyBpbnNhbmUKLQkJCQkgKiB0aGF0IGRldGVjdGluZyB0aGVtIGlzIG5vdCB3b3J0aCB0aGUgZmV3IGV4dHJhCi0JCQkJICogYnl0ZXMgb2Yga2VybmVsJ3Mgc2l6ZS4KKwkJCQkgKiB0aGVyZSdzIG5vIHBvaW50IGluIHN1cHBvcnRpbmcgdGhlbS4KIAkJCQkgKi8KIAkJCQlicmVhazsKKwkJCWNhc2UgNDg6CisJCQkJaSsrOworCQkJCWlmIChpID4gdmMtPnZjX25wYXIpCisJCQkJCWJyZWFrOworCQkJCWlmICh2Yy0+dmNfcGFyW2ldID09IDUgJiYgIC8qIDI1NiBjb2xvdXJzICovCisJCQkJICAgIGkgPCB2Yy0+dmNfbnBhcikgeworCQkJCQlpKys7CisJCQkJCXJnYl9iYWNrZ3JvdW5kKHZjLAorCQkJCQkJcmdiX2Zyb21fMjU2KHZjLT52Y19wYXJbaV0pKTsKKwkJCQl9IGVsc2UgaWYgKHZjLT52Y19wYXJbaV0gPT0gMiAmJiAvKiAyNCBiaXQgKi8KKwkJCQkgICAgICAgICAgIGkgPD0gdmMtPnZjX25wYXIgKyAzKSB7CisJCQkJCXN0cnVjdCByZ2IgYyA9IHtyOnZjLT52Y19wYXJbaSsxXSwKKwkJCQkJCQlnOnZjLT52Y19wYXJbaSsyXSwKKwkJCQkJCQliOnZjLT52Y19wYXJbaSszXX07CisJCQkJCXJnYl9iYWNrZ3JvdW5kKHZjLCBjKTsKKwkJCQkJaSArPSAzOworCQkJCX0KKwkJCQlicmVhazsKIAkJCWNhc2UgMzk6CiAJCQkJdmMtPnZjX2NvbG9yID0gKHZjLT52Y19kZWZfY29sb3IgJiAweDBmKSB8ICh2Yy0+dmNfY29sb3IgJiAweGYwKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpby5jIGIvZHJpdmVycy91aW8vdWlvLmMKaW5kZXggYTY3M2U1Yi4uZTM3MWY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvLmMKKysrIGIvZHJpdmVycy91aW8vdWlvLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCiAJaWYgKG1lbS0+YWRkciAmIH5QQUdFX01BU0spCiAJCXJldHVybiAtRU5PREVWOwotCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPiBtZW0tPnNpemUpCisJaWYgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA+IFBBR0VfQUxJR04obWVtLT5zaXplKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2bWEtPnZtX29wcyA9ICZ1aW9fcGh5c2ljYWxfdm1fb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX2RtZW1fZ2VuaXJxLmMgYi9kcml2ZXJzL3Vpby91aW9fZG1lbV9nZW5pcnEuYwppbmRleCAxMjcwZjNiLi44ZDBiYmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW9fZG1lbV9nZW5pcnEuYworKysgYi9kcml2ZXJzL3Vpby91aW9fZG1lbV9nZW5pcnEuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IElSUVxuIik7Ci0JCQlnb3RvIGJhZDA7CisJCQlnb3RvIGJhZDE7CiAJCX0KIAkJdWlvaW5mby0+aXJxID0gcmV0OwogCX0KQEAgLTI3NSw2ICsyNzUsNyBAQAogCXJldCA9IHVpb19yZWdpc3Rlcl9kZXZpY2UoJnBkZXYtPmRldiwgcHJpdi0+dWlvaW5mbyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdWlvIGRldmljZVxuIik7CisJCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAkJZ290byBiYWQxOwogCX0KIApAQCAtMjgyLDcgKzI4Myw2IEBACiAJcmV0dXJuIDA7CiAgYmFkMToKIAlrZnJlZShwcml2KTsKLQlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAgYmFkMDoKIAkvKiBrZnJlZSB1aW9pbmZvIGZvciBPRiAqLwogCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggMWFlMmJmMy4uM2NiYTg5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTI4LDYgKzI4LDcgQEAKIG9iai0kKENPTkZJR19VU0JfRlNMX01QSF9EUl9PRikJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfRlVTQkgyMDBfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9GT1RHMjEwX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfTUFYMzQyMV9IQ0QpCSs9IGhvc3QvCiAKIG9iai0kKENPTkZJR19VU0JfQzY3WDAwX0hDRCkJKz0gYzY3eDAwLwogCkBAIC01OCw0ICs1OSw0IEBACiBvYmotJChDT05GSUdfVVNCX1JFTkVTQVNfVVNCSFMpCSs9IHJlbmVzYXNfdXNiaHMvCiBvYmotJChDT05GSUdfVVNCX0dBREdFVCkJKz0gZ2FkZ2V0LwogCi1vYmotJChDT05GSUdfVVNCX0NPTU1PTikJKz0gdXNiLWNvbW1vbi5vCitvYmotJChDT05GSUdfVVNCX0NPTU1PTikJKz0gY29tbW9uLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9NYWtlZmlsZQppbmRleCA0ODBiZDRkLi4yZjA5OWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIGNpX2hkcmMtJChDT05GSUdfVVNCX0NISVBJREVBX1VEQykJKz0gdWRjLm8KIGNpX2hkcmMtJChDT05GSUdfVVNCX0NISVBJREVBX0hPU1QpCSs9IGhvc3QubwogY2lfaGRyYy0kKENPTkZJR19VU0JfQ0hJUElERUFfREVCVUcpCSs9IGRlYnVnLm8KK2NpX2hkcmMtJChDT05GSUdfVVNCX09UR19GU00pCQkrPSBvdGdfZnNtLm8KIAogIyBHbHVlL0JyaWRnZSBsYXllcnMgZ28gaGVyZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9iaXRzLmggYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9iaXRzLmgKaW5kZXggODNkMDZjMTQ1Li5jYTU3ZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9iaXRzLmgKKysrIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvYml0cy5oCkBAIC00NCw5ICs0NCwxNCBAQAogI2RlZmluZSBERVZJQ0VBRERSX1VTQkFEUiAgICAgKDB4N0ZVTCA8PCAyNSkKIAogLyogUE9SVFNDICovCisjZGVmaW5lIFBPUlRTQ19DQ1MgICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgUE9SVFNDX0NTQyAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBQT1JUU0NfUEVDICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lIFBPUlRTQ19PQ0MgICAgICAgICAgICBCSVQoNSkKICNkZWZpbmUgUE9SVFNDX0ZQUiAgICAgICAgICAgIEJJVCg2KQogI2RlZmluZSBQT1JUU0NfU1VTUCAgICAgICAgICAgQklUKDcpCiAjZGVmaW5lIFBPUlRTQ19IU1AgICAgICAgICAgICBCSVQoOSkKKyNkZWZpbmUgUE9SVFNDX1BQICAgICAgICAgICAgIEJJVCgxMikKICNkZWZpbmUgUE9SVFNDX1BUQyAgICAgICAgICAgICgweDBGVUwgPDwgMTYpCiAjZGVmaW5lIFBPUlRTQ19QSENEKGQpCSAgICAgICgoZCkgPyBCSVQoMjIpIDogQklUKDIzKSkKIC8qIFBUUyBhbmQgUFRXIGZvciBub24gbHBtIHZlcnNpb24gb25seSAqLwpAQCAtNTYsNiArNjEsOSBAQAogI2RlZmluZSBQT1JUU0NfUFRXICAgICAgICAgICAgQklUKDI4KQogI2RlZmluZSBQT1JUU0NfU1RTICAgICAgICAgICAgQklUKDI5KQogCisjZGVmaW5lIFBPUlRTQ19XMUNfQklUUwkJCQkJCVwKKwkoUE9SVFNDX0NTQyB8IFBPUlRTQ19QRUMgfCBQT1JUU0NfT0NDKQorCiAvKiBERVZMQyAqLwogI2RlZmluZSBERVZMQ19QRlNDICAgICAgICAgICAgQklUKDIzKQogI2RlZmluZSBERVZMQ19QU1BEICAgICAgICAgICAgKDB4MDNVTCA8PCAyNSkKQEAgLTcyLDYgKzgwLDggQEAKIAogLyogT1RHU0MgKi8KICNkZWZpbmUgT1RHU0NfSURQVQkgICAgICBCSVQoNSkKKyNkZWZpbmUgT1RHU0NfSEFEUAkgICAgICBCSVQoNikKKyNkZWZpbmUgT1RHU0NfSEFCQQkgICAgICBCSVQoNykKICNkZWZpbmUgT1RHU0NfSUQJICAgICAgQklUKDgpCiAjZGVmaW5lIE9UR1NDX0FWVgkgICAgICBCSVQoOSkKICNkZWZpbmUgT1RHU0NfQVNWCSAgICAgIEJJVCgxMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NpLmggYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaS5oCmluZGV4IGUyMDY0MDYuLjk1NjNjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NpLmgKKysrIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvY2kuaApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLWZzbS5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBERUZJTkUKQEAgLTEzOSw2ICsxNDAsOCBAQAogICogQHJvbGVzOiBhcnJheSBvZiBzdXBwb3J0ZWQgcm9sZXMgZm9yIHRoaXMgY29udHJvbGxlcgogICogQHJvbGU6IGN1cnJlbnQgcm9sZQogICogQGlzX290ZzogaWYgdGhlIGRldmljZSBpcyBvdGctY2FwYWJsZQorICogQGZzbTogb3RnIGZpbml0ZSBzdGF0ZSBtYWNoaW5lCisgKiBAZnNtX3RpbWVyOiBwb2ludGVyIHRvIHRpbWVyIGxpc3Qgb2Ygb3RnIGZzbQogICogQHdvcms6IHdvcmsgZm9yIHJvbGUgY2hhbmdpbmcKICAqIEB3cTogd29ya3F1ZXVlIHRocmVhZAogICogQHFoX3Bvb2w6IGFsbG9jYXRpb24gcG9vbCBmb3IgcXVldWUgaGVhZHMKQEAgLTE3NCw2ICsxNzcsOCBAQAogCXN0cnVjdCBjaV9yb2xlX2RyaXZlcgkJKnJvbGVzW0NJX1JPTEVfRU5EXTsKIAllbnVtIGNpX3JvbGUJCQlyb2xlOwogCWJvb2wJCQkJaXNfb3RnOworCXN0cnVjdCBvdGdfZnNtCQkJZnNtOworCXN0cnVjdCBjaV9vdGdfZnNtX3RpbWVyX2xpc3QJKmZzbV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcms7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJCSp3cTsKIApAQCAtMzE5LDYgKzMyNCwyNCBAQAogCXJldHVybiAodmFsICYgbWFzaykgPj4gX19mZnMobWFzayk7CiB9CiAKKy8qKgorICogY2lfb3RnX2lzX2ZzbV9tb2RlOiBydW50aW1lIGNoZWNrIGlmIG90ZyBjb250cm9sbGVyCisgKiBpcyBpbiBvdGcgZnNtIG1vZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBjaV9vdGdfaXNfZnNtX21vZGUoc3RydWN0IGNpX2hkcmMgKmNpKQoreworI2lmZGVmIENPTkZJR19VU0JfT1RHX0ZTTQorCXJldHVybiBjaS0+aXNfb3RnICYmIGNpLT5yb2xlc1tDSV9ST0xFX0hPU1RdICYmCisJCQkJCWNpLT5yb2xlc1tDSV9ST0xFX0dBREdFVF07CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit1MzIgaHdfcmVhZF9pbnRyX2VuYWJsZShzdHJ1Y3QgY2lfaGRyYyAqY2kpOworCit1MzIgaHdfcmVhZF9pbnRyX3N0YXR1cyhzdHJ1Y3QgY2lfaGRyYyAqY2kpOworCiBpbnQgaHdfZGV2aWNlX3Jlc2V0KHN0cnVjdCBjaV9oZHJjICpjaSwgdTMyIG1vZGUpOwogCiBpbnQgaHdfcG9ydF90ZXN0X3NldChzdHJ1Y3QgY2lfaGRyYyAqY2ksIHU4IG1vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19tc20uYyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NpX2hkcmNfbXNtLmMKaW5kZXggMmQ1MWQ4NS4uZDcyYjlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19tc20uYworKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX21zbS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lfaGRyY19wbGF0Zm9ybV9kYXRhIGNpX2hkcmNfbXNtX3BsYXRkYXRhID0gewogCS5uYW1lCQkJPSAiY2lfaGRyY19tc20iLAorCS5jYXBvZmZzZXQJCT0gREVGX0NBUE9GRlNFVCwKIAkuZmxhZ3MJCQk9IENJX0hEUkNfUkVHU19TSEFSRUQgfAogCQkJCSAgQ0lfSERSQ19SRVFVSVJFX1RSQU5TQ0VJVkVSIHwKIAkJCQkgIENJX0hEUkNfRElTQUJMRV9TVFJFQU1JTkcsCkBAIC01Nyw5ICs1OCwyMSBAQAogc3RhdGljIGludCBjaV9oZHJjX21zbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfY2k7CisJc3RydWN0IHVzYl9waHkgKnBoeTsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgImNpX2hkcmNfbXNtX3Byb2JlXG4iKTsKIAorCS8qCisJICogT1RHKFBIWSkgZHJpdmVyIHRha2VzIGNhcmUgb2YgUEhZIGluaXRpYWxpemF0aW9uLCBjbG9jayBtYW5hZ2VtZW50LAorCSAqIHBvd2VyaW5nIHVwIFZCVVMsIG1hcHBpbmcgb2YgcmVnaXN0ZXJzIGFkZHJlc3Mgc3BhY2UgYW5kIHBvd2VyCisJICogbWFuYWdlbWVudC4KKwkgKi8KKwlwaHkgPSBkZXZtX3VzYl9nZXRfcGh5X2J5X3BoYW5kbGUoJnBkZXYtPmRldiwgInVzYi1waHkiLCAwKTsKKwlpZiAoSVNfRVJSKHBoeSkpCisJCXJldHVybiBQVFJfRVJSKHBoeSk7CisKKwljaV9oZHJjX21zbV9wbGF0ZGF0YS5waHkgPSBwaHk7CisKIAlwbGF0X2NpID0gY2lfaGRyY19hZGRfZGV2aWNlKCZwZGV2LT5kZXYsCiAJCQkJcGRldi0+cmVzb3VyY2UsIHBkZXYtPm51bV9yZXNvdXJjZXMsCiAJCQkJJmNpX2hkcmNfbXNtX3BsYXRkYXRhKTsKQEAgLTg2LDEwICs5OSwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtc21fY2lfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInFjb20sY2ktaGRyYyIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXNtX2NpX2R0X21hdGNoKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2lfaGRyY19tc21fZHJpdmVyID0gewogCS5wcm9iZSA9IGNpX2hkcmNfbXNtX3Byb2JlLAogCS5yZW1vdmUgPSBjaV9oZHJjX21zbV9yZW1vdmUsCi0JLmRyaXZlciA9IHsgLm5hbWUgPSAibXNtX2hzdXNiIiwgfSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtc21faHN1c2IiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtc21fY2lfZHRfbWF0Y2gsCisJfSwKIH07CiAKIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2lfaGRyY19tc21fZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NvcmUuYyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NvcmUuYwppbmRleCAxY2Q1ZDBiLi42MTlkMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvY29yZS5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKiAtIEJVUzogICAgYnVzIGdsdWUgY29kZSwgYnVzIGFic3RyYWN0aW9uIGxheWVyCiAgKgogICogQ29tcGlsZSBPcHRpb25zCi0gKiAtIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTOiBlbmFibGUgZGVidWcgZmFjaWxpdGllcworICogLSBDT05GSUdfVVNCX0NISVBJREVBX0RFQlVHOiBlbmFibGUgZGVidWcgZmFjaWxpdGllcwogICogLSBTVEFMTF9JTjogIG5vbi1lbXB0eSBidWxrLWluIHBpcGVzIGNhbm5vdCBiZSBoYWx0ZWQKICAqICAgICAgICAgICAgICBpZiBkZWZpbmVkIG1hc3Mgc3RvcmFnZSBjb21wbGlhbmNlIHN1Y2NlZWRzIGJ1dCB3aXRoIHdhcm5pbmdzCiAgKiAgICAgICAgICAgICAgPT4gY2FzZSA0OiBIaSA+ICBEbgpAQCAtNDIsMTAgKzQyLDYgQEAKICAqIC0gTm90IFN1cHBvcnRlZDogMTUgJiAxNiAoSVNPKQogICoKICAqIFRPRE8gTGlzdAotICogLSBPVEcKLSAqIC0gSW50ZXJydXB0IFRyYWZmaWMKLSAqIC0gR0VUX1NUQVRVUyhkZXZpY2UpIC0gYWx3YXlzIHJlcG9ydHMgMAotICogLSBHYWRnZXQgQVBJIChtYWpvcml0eSBvZiBvcHRpb25hbCBmZWF0dXJlcykKICAqIC0gU3VzcGVuZCAmIFJlbW90ZSBXYWtldXAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC03NCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiaG9zdC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAib3RnLmgiCisjaW5jbHVkZSAib3RnX2ZzbS5oIgogCiAvKiBDb250cm9sbGVyIHJlZ2lzdGVyIG1hcCAqLwogc3RhdGljIGNvbnN0IHU4IGNpX3JlZ3Nfbm9scG1bXSA9IHsKQEAgLTE0MCw2ICsxMzcsMjYgQEAKIH0KIAogLyoqCisgKiBod19yZWFkX2ludHJfZW5hYmxlOiByZXR1cm5zIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmVnaXN0ZXIgZGF0YQorICovCit1MzIgaHdfcmVhZF9pbnRyX2VuYWJsZShzdHJ1Y3QgY2lfaGRyYyAqY2kpCit7CisJcmV0dXJuIGh3X3JlYWQoY2ksIE9QX1VTQklOVFIsIH4wKTsKK30KKworLyoqCisgKiBod19yZWFkX2ludHJfc3RhdHVzOiByZXR1cm5zIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmVnaXN0ZXIgZGF0YQorICovCit1MzIgaHdfcmVhZF9pbnRyX3N0YXR1cyhzdHJ1Y3QgY2lfaGRyYyAqY2kpCit7CisJcmV0dXJuIGh3X3JlYWQoY2ksIE9QX1VTQlNUUywgfjApOworfQorCisvKioKICAqIGh3X3BvcnRfdGVzdF9zZXQ6IHdyaXRlcyBwb3J0IHRlc3QgbW9kZSAoZXhlY3V0ZSB3aXRob3V0IGludGVycnVwdGlvbikKICAqIEBtb2RlOiBuZXcgdmFsdWUKICAqCkBAIC0xNzksMTEgKzE5NiwxMCBAQAogCQlod193cml0ZShjaSwgcmVnLCBQT1JUU0NfUEhDRChjaS0+aHdfYmFuay5scG0pLAogCQkJCTApOwogCQkvKiAKLQkJICogVGhlIGNvbnRyb2xsZXIgbmVlZHMgYXQgbGVhc3QgMW1zIHRvIHJlZmxlY3QKLQkJICogUEhZJ3Mgc3RhdHVzLCB0aGUgUEhZIGFsc28gbmVlZHMgc29tZSB0aW1lIChsZXNzCisJCSAqIHRoZSBQSFkgbmVlZHMgc29tZSB0aW1lIChsZXNzCiAJCSAqIHRoYW4gMW1zKSB0byBsZWF2ZSBsb3cgcG93ZXIgbW9kZS4KIAkJICovCi0JCXVzbGVlcF9yYW5nZSgxNTAwLCAyMDAwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDExMDApOwogCX0KIH0KIApAQCAtMzkyLDggKzQwOCwxNCBAQAogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCXUzMiBvdGdzYyA9IDA7CiAKLQlpZiAoY2ktPmlzX290ZykKLQkJb3Rnc2MgPSBod19yZWFkKGNpLCBPUF9PVEdTQywgfjApOworCWlmIChjaS0+aXNfb3RnKSB7CisJCW90Z3NjID0gaHdfcmVhZF9vdGdzYyhjaSwgfjApOworCQlpZiAoY2lfb3RnX2lzX2ZzbV9tb2RlKGNpKSkgeworCQkJcmV0ID0gY2lfb3RnX2ZzbV9pcnEoY2kpOworCQkJaWYgKHJldCA9PSBJUlFfSEFORExFRCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQogCiAJLyoKIAkgKiBIYW5kbGUgaWQgY2hhbmdlIGludGVycnVwdCwgaXQgaW5kaWNhdGVzIGRldmljZS9ob3N0IGZ1bmN0aW9uCkBAIC00MDEsOSArNDIzLDkgQEAKIAkgKi8KIAlpZiAoY2ktPmlzX290ZyAmJiAob3Rnc2MgJiBPVEdTQ19JRElFKSAmJiAob3Rnc2MgJiBPVEdTQ19JRElTKSkgewogCQljaS0+aWRfZXZlbnQgPSB0cnVlOwotCQljaV9jbGVhcl9vdGdfaW50ZXJydXB0KGNpLCBPVEdTQ19JRElTKTsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGNpLT5pcnEpOwotCQlxdWV1ZV93b3JrKGNpLT53cSwgJmNpLT53b3JrKTsKKwkJLyogQ2xlYXIgSUQgY2hhbmdlIGlycSBzdGF0dXMgKi8KKwkJaHdfd3JpdGVfb3Rnc2MoY2ksIE9UR1NDX0lESVMsIE9UR1NDX0lESVMpOworCQljaV9vdGdfcXVldWVfd29yayhjaSk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKQEAgLTQxMyw5ICs0MzUsOSBAQAogCSAqLwogCWlmIChjaS0+aXNfb3RnICYmIChvdGdzYyAmIE9UR1NDX0JTVklFKSAmJiAob3Rnc2MgJiBPVEdTQ19CU1ZJUykpIHsKIAkJY2ktPmJfc2Vzc192YWxpZF9ldmVudCA9IHRydWU7Ci0JCWNpX2NsZWFyX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0JTVklTKTsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGNpLT5pcnEpOwotCQlxdWV1ZV93b3JrKGNpLT53cSwgJmNpLT53b3JrKTsKKwkJLyogQ2xlYXIgQlNWIGlycSAqLworCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfQlNWSVMsIE9UR1NDX0JTVklTKTsKKwkJY2lfb3RnX3F1ZXVlX3dvcmsoY2kpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC01MzMsMTEgKzU1NSw4IEBACiAJCWNpLT5pc19vdGcgPSAoaHdfcmVhZChjaSwgQ0FQX0RDQ1BBUkFNUywKIAkJCQlEQ0NQQVJBTVNfREMgfCBEQ0NQQVJBTVNfSEMpCiAJCQkJCT09IChEQ0NQQVJBTVNfREMgfCBEQ0NQQVJBTVNfSEMpKTsKLQlpZiAoY2ktPmlzX290ZykgeworCWlmIChjaS0+aXNfb3RnKQogCQlkZXZfZGJnKGNpLT5kZXYsICJJdCBpcyBPVEcgY2FwYWJsZSBjb250cm9sbGVyXG4iKTsKLQkJY2lfZGlzYWJsZV9vdGdfaW50ZXJydXB0KGNpLCBPVEdTQ19JTlRfRU5fQklUUyk7Ci0JCWNpX2NsZWFyX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0lOVF9TVEFUVVNfQklUUyk7Ci0JfQogfQogCiBzdGF0aWMgaW50IGNpX2hkcmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTU5OSw2ICs2MTgsMTMgQEAKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGluaXQgcGh5OiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQkvKiAKKwkJICogVGhlIGRlbGF5IHRvIHN5bmMgUEhZJ3Mgc3RhdHVzLCB0aGUgbWF4aW11bSBkZWxheSBpcworCQkgKiAybXMgc2luY2UgdGhlIG90Z3NjIHVzZXMgMW1zIHRpbWVyIHRvIGRlYm91bmNlIHRoZQorCQkgKiBQSFkncyBpbnB1dAorCQkgKi8KKwkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOwogCX0KIAogCWNpLT5od19iYW5rLnBoeXMgPSByZXMtPnN0YXJ0OwpAQCAtNjMzLDYgKzY1OSw5IEBACiAJfQogCiAJaWYgKGNpLT5pc19vdGcpIHsKKwkJLyogRGlzYWJsZSBhbmQgY2xlYXIgYWxsIE9URyBpcnEgKi8KKwkJaHdfd3JpdGVfb3Rnc2MoY2ksIE9UR1NDX0lOVF9FTl9CSVRTIHwgT1RHU0NfSU5UX1NUQVRVU19CSVRTLAorCQkJCQkJCU9UR1NDX0lOVF9TVEFUVVNfQklUUyk7CiAJCXJldCA9IGNpX2hkcmNfb3RnX2luaXQoY2kpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldiwgImluaXQgb3RnIGZhaWxzLCByZXQgPSAlZFxuIiwgcmV0KTsKQEAgLTY0MiwxMyArNjcxLDkgQEAKIAogCWlmIChjaS0+cm9sZXNbQ0lfUk9MRV9IT1NUXSAmJiBjaS0+cm9sZXNbQ0lfUk9MRV9HQURHRVRdKSB7CiAJCWlmIChjaS0+aXNfb3RnKSB7Ci0JCQkvKgotCQkJICogSUQgcGluIG5lZWRzIDFtcyBkZWJvdWNlIHRpbWUsCi0JCQkgKiB3ZSBkZWxheSAybXMgZm9yIHNhZmUuCi0JCQkgKi8KLQkJCW1kZWxheSgyKTsKIAkJCWNpLT5yb2xlID0gY2lfb3RnX3JvbGUoY2kpOwotCQkJY2lfZW5hYmxlX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0lESUUpOworCQkJLyogRW5hYmxlIElEIGNoYW5nZSBpcnEgKi8KKwkJCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ19JRElFLCBPVEdTQ19JRElFKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgY29udHJvbGxlciBpcyBub3QgT1RHIGNhcGFibGUsIGJ1dCBzdXBwb3J0CkBAIC02NjcsMTAgKzY5MiwxMyBAQAogCWlmIChjaS0+cm9sZSA9PSBDSV9ST0xFX0dBREdFVCkKIAkJY2lfaGFuZGxlX3ZidXNfY2hhbmdlKGNpKTsKIAotCXJldCA9IGNpX3JvbGVfc3RhcnQoY2ksIGNpLT5yb2xlKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMgcm9sZVxuIiwgY2lfcm9sZShjaSktPm5hbWUpOwotCQlnb3RvIHN0b3A7CisJaWYgKCFjaV9vdGdfaXNfZnNtX21vZGUoY2kpKSB7CisJCXJldCA9IGNpX3JvbGVfc3RhcnQoY2ksIGNpLT5yb2xlKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJjYW4ndCBzdGFydCAlcyByb2xlXG4iLAorCQkJCQkJY2lfcm9sZShjaSktPm5hbWUpOworCQkJZ290byBzdG9wOworCQl9CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2kpOwpAQCAtNjc5LDYgKzcwNyw5IEBACiAJaWYgKHJldCkKIAkJZ290byBzdG9wOwogCisJaWYgKGNpX290Z19pc19mc21fbW9kZShjaSkpCisJCWNpX2hkcmNfb3RnX2ZzbV9zdGFydChjaSk7CisKIAlyZXQgPSBkYmdfY3JlYXRlX2ZpbGVzKGNpKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CkBAIC03MTEsNiArNzQyLDcgQEAKIAkucmVtb3ZlCT0gY2lfaGRyY19yZW1vdmUsCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiY2lfaGRyYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9kZWJ1Zy5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvZGVidWcuYwppbmRleCA5NmQ4OTlhLi43Y2NjYWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2RlYnVnLmMKQEAgLTcsMTEgKzcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGctZnNtLmg+CiAKICNpbmNsdWRlICJjaS5oIgogI2luY2x1ZGUgInVkYy5oIgogI2luY2x1ZGUgImJpdHMuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgIm90Zy5oIgogCiAvKioKICAqIGNpX2RldmljZV9zaG93OiBwcmludHMgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlIGNhcGFiaWxpdGllcyBhbmQgc3RhdHVzCkBAIC0yMDQsNiArMjA4LDgwIEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK2ludCBjaV9vdGdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgY2lfaGRyYyAqY2kgPSBzLT5wcml2YXRlOworCXN0cnVjdCBvdGdfZnNtICpmc207CisKKwlpZiAoIWNpIHx8ICFjaV9vdGdfaXNfZnNtX21vZGUoY2kpKQorCQlyZXR1cm4gMDsKKworCWZzbSA9ICZjaS0+ZnNtOworCisJLyogLS0tLS0tIFN0YXRlIC0tLS0tICovCisJc2VxX3ByaW50ZihzLCAiT1RHIHN0YXRlOiAlc1xuXG4iLAorCQl1c2Jfb3RnX3N0YXRlX3N0cmluZyhjaS0+dHJhbnNjZWl2ZXItPnN0YXRlKSk7CisKKwkvKiAtLS0tLS0gU3RhdGUgTWFjaGluZSBWYXJpYWJsZXMgLS0tLS0gKi8KKwlzZXFfcHJpbnRmKHMsICJhX2J1c19kcm9wOiAlZFxuIiwgZnNtLT5hX2J1c19kcm9wKTsKKworCXNlcV9wcmludGYocywgImFfYnVzX3JlcTogJWRcbiIsIGZzbS0+YV9idXNfcmVxKTsKKworCXNlcV9wcmludGYocywgImFfc3JwX2RldDogJWRcbiIsIGZzbS0+YV9zcnBfZGV0KTsKKworCXNlcV9wcmludGYocywgImFfdmJ1c192bGQ6ICVkXG4iLCBmc20tPmFfdmJ1c192bGQpOworCisJc2VxX3ByaW50ZihzLCAiYl9jb25uOiAlZFxuIiwgZnNtLT5iX2Nvbm4pOworCisJc2VxX3ByaW50ZihzLCAiYWRwX2NoYW5nZTogJWRcbiIsIGZzbS0+YWRwX2NoYW5nZSk7CisKKwlzZXFfcHJpbnRmKHMsICJwb3dlcl91cDogJWRcbiIsIGZzbS0+cG93ZXJfdXApOworCisJc2VxX3ByaW50ZihzLCAiYV9idXNfcmVzdW1lOiAlZFxuIiwgZnNtLT5hX2J1c19yZXN1bWUpOworCisJc2VxX3ByaW50ZihzLCAiYV9idXNfc3VzcGVuZDogJWRcbiIsIGZzbS0+YV9idXNfc3VzcGVuZCk7CisKKwlzZXFfcHJpbnRmKHMsICJhX2Nvbm46ICVkXG4iLCBmc20tPmFfY29ubik7CisKKwlzZXFfcHJpbnRmKHMsICJiX2J1c19yZXE6ICVkXG4iLCBmc20tPmJfYnVzX3JlcSk7CisKKwlzZXFfcHJpbnRmKHMsICJiX2J1c19zdXNwZW5kOiAlZFxuIiwgZnNtLT5iX2J1c19zdXNwZW5kKTsKKworCXNlcV9wcmludGYocywgImJfc2UwX3NycDogJWRcbiIsIGZzbS0+Yl9zZTBfc3JwKTsKKworCXNlcV9wcmludGYocywgImJfc3NlbmRfc3JwOiAlZFxuIiwgZnNtLT5iX3NzZW5kX3NycCk7CisKKwlzZXFfcHJpbnRmKHMsICJiX3Nlc3NfdmxkOiAlZFxuIiwgZnNtLT5iX3Nlc3NfdmxkKTsKKworCXNlcV9wcmludGYocywgImJfc3JwX2RvbmU6ICVkXG4iLCBmc20tPmJfc3JwX2RvbmUpOworCisJc2VxX3ByaW50ZihzLCAiZHJ2X3ZidXM6ICVkXG4iLCBmc20tPmRydl92YnVzKTsKKworCXNlcV9wcmludGYocywgImxvY19jb25uOiAlZFxuIiwgZnNtLT5sb2NfY29ubik7CisKKwlzZXFfcHJpbnRmKHMsICJsb2Nfc29mOiAlZFxuIiwgZnNtLT5sb2Nfc29mKTsKKworCXNlcV9wcmludGYocywgImFkcF9wcmI6ICVkXG4iLCBmc20tPmFkcF9wcmIpOworCisJc2VxX3ByaW50ZihzLCAiaWQ6ICVkXG4iLCBmc20tPmlkKTsKKworCXNlcV9wcmludGYocywgInByb3RvY29sOiAlZFxuIiwgZnNtLT5wcm90b2NvbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaV9vdGdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY2lfb3RnX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaV9vdGdfZm9wcyA9IHsKKwkub3BlbgkJCT0gY2lfb3RnX29wZW4sCisJLnJlYWQJCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQkJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIHN0YXRpYyBpbnQgY2lfcm9sZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY2lfaGRyYyAqY2kgPSBzLT5wcml2YXRlOwpAQCAtMjUzLDYgKzMzMSw1MCBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCitpbnQgY2lfcmVnaXN0ZXJzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGNpX2hkcmMgKmNpID0gcy0+cHJpdmF0ZTsKKwl1MzIgdG1wX3JlZzsKKworCWlmICghY2kpCisJCXJldHVybiAwOworCisJLyogLS0tLS0tIFJlZ2lzdGVycyAtLS0tLSAqLworCXRtcF9yZWcgPSBod19yZWFkX2ludHJfZW5hYmxlKGNpKTsKKwlzZXFfcHJpbnRmKHMsICJVU0JJTlRSIHJlZzogJTA4eFxuIiwgdG1wX3JlZyk7CisKKwl0bXBfcmVnID0gaHdfcmVhZF9pbnRyX3N0YXR1cyhjaSk7CisJc2VxX3ByaW50ZihzLCAiVVNCU1RTIHJlZzogJTA4eFxuIiwgdG1wX3JlZyk7CisKKwl0bXBfcmVnID0gaHdfcmVhZChjaSwgT1BfVVNCTU9ERSwgfjApOworCXNlcV9wcmludGYocywgIlVTQk1PREUgcmVnOiAlMDh4XG4iLCB0bXBfcmVnKTsKKworCXRtcF9yZWcgPSBod19yZWFkKGNpLCBPUF9VU0JDTUQsIH4wKTsKKwlzZXFfcHJpbnRmKHMsICJVU0JDTUQgcmVnOiAlMDh4XG4iLCB0bXBfcmVnKTsKKworCXRtcF9yZWcgPSBod19yZWFkKGNpLCBPUF9QT1JUU0MsIH4wKTsKKwlzZXFfcHJpbnRmKHMsICJQT1JUU0MgcmVnOiAlMDh4XG4iLCB0bXBfcmVnKTsKKworCWlmIChjaS0+aXNfb3RnKSB7CisJCXRtcF9yZWcgPSBod19yZWFkX290Z3NjKGNpLCB+MCk7CisJCXNlcV9wcmludGYocywgIk9UR1NDIHJlZzogJTA4eFxuIiwgdG1wX3JlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2lfcmVnaXN0ZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNpX3JlZ2lzdGVyc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lfcmVnaXN0ZXJzX2ZvcHMgPSB7CisJLm9wZW4JCQk9IGNpX3JlZ2lzdGVyc19vcGVuLAorCS5yZWFkCQkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKioKICAqIGRiZ19jcmVhdGVfZmlsZXM6IGluaXRpYWxpemVzIHRoZSBhdHRyaWJ1dGUgaW50ZXJmYWNlCiAgKiBAY2k6IGRldmljZQpAQCAtMjg3LDggKzQwOSwyMSBAQAogCWlmICghZGVudCkKIAkJZ290byBlcnI7CiAKKwlpZiAoY2lfb3RnX2lzX2ZzbV9tb2RlKGNpKSkgeworCQlkZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZSgib3RnIiwgU19JUlVHTywgY2ktPmRlYnVnZnMsIGNpLAorCQkJCQkmY2lfb3RnX2ZvcHMpOworCQlpZiAoIWRlbnQpCisJCQlnb3RvIGVycjsKKwl9CisKIAlkZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicm9sZSIsIFNfSVJVR08gfCBTX0lXVVNSLCBjaS0+ZGVidWdmcywgY2ksCiAJCQkJICAgJmNpX3JvbGVfZm9wcyk7CisJaWYgKCFkZW50KQorCQlnb3RvIGVycjsKKworCWRlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVUdPLCBjaS0+ZGVidWdmcywgY2ksCisJCQkJJmNpX3JlZ2lzdGVyc19mb3BzKTsKKwogCWlmIChkZW50KQogCQlyZXR1cm4gMDsKIGVycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2hvc3QuYyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2hvc3QuYwppbmRleCBhOGFjNmMxLi5hOTNkOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvaG9zdC5jCkBAIC02Nyw3ICs2NywxMSBAQAogCWVoY2ktPmhhc190ZGlfcGh5X2xwbSA9IGNpLT5od19iYW5rLmxwbTsKIAllaGNpLT5pbXgyOF93cml0ZV9maXggPSBjaS0+aW14Mjhfd3JpdGVfZml4OwogCi0JaWYgKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMpIHsKKwkvKgorCSAqIHZidXMgaXMgYWx3YXlzIG9uIGlmIGhvc3QgaXMgbm90IGluIE9URyBGU00gbW9kZSwKKwkgKiBvdGhlcndpc2Ugc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgT1RHIEZTTQorCSAqLworCWlmIChjaS0+cGxhdGRhdGEtPnJlZ192YnVzICYmICFjaV9vdGdfaXNfZnNtX21vZGUoY2kpKSB7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoY2ktPnBsYXRkYXRhLT5yZWdfdmJ1cyk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoY2ktPmRldiwKQEAgLTc4LDEwICs4MiwxNyBAQAogCX0KIAogCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CiAJCWdvdG8gZGlzYWJsZV9yZWc7Ci0JZWxzZQorCX0gZWxzZSB7CisJCXN0cnVjdCB1c2Jfb3RnICpvdGcgPSBjaS0+dHJhbnNjZWl2ZXItPm90ZzsKKwogCQljaS0+aGNkID0gaGNkOworCQlpZiAob3RnKSB7CisJCQlvdGctPmhvc3QgPSAmaGNkLT5zZWxmOworCQkJaGNkLT5zZWxmLm90Z19wb3J0ID0gMTsKKwkJfQorCX0KIAogCWlmIChjaS0+cGxhdGRhdGEtPmZsYWdzICYgQ0lfSERSQ19ESVNBQkxFX1NUUkVBTUlORykKIAkJaHdfd3JpdGUoY2ksIE9QX1VTQk1PREUsIFVTQk1PREVfQ0lfU0RJUywgVVNCTU9ERV9DSV9TRElTKTsKQEAgLTg5LDcgKzEwMCw3IEBACiAJcmV0dXJuIHJldDsKIAogZGlzYWJsZV9yZWc6Ci0JaWYgKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMpCisJaWYgKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMgJiYgIWNpX290Z19pc19mc21fbW9kZShjaSkpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMpOwogCiBwdXRfaGNkOgpAQCAtMTA1LDcgKzExNiw3IEBACiAJaWYgKGhjZCkgewogCQl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCQl1c2JfcHV0X2hjZChoY2QpOwotCQlpZiAoY2ktPnBsYXRkYXRhLT5yZWdfdmJ1cykKKwkJaWYgKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMgJiYgIWNpX290Z19pc19mc21fbW9kZShjaSkpCiAJCQlyZWd1bGF0b3JfZGlzYWJsZShjaS0+cGxhdGRhdGEtPnJlZ192YnVzKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGcuYyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL290Zy5jCmluZGV4IDM5YmQ3ZWMuLmEwNDhiMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL290Zy5jCkBAIC0xMSw4ICsxMSw4IEBACiAgKi8KIAogLyoKLSAqIFRoaXMgZmlsZSBtYWlubHkgaGFuZGxlcyBvdGdzYyByZWdpc3RlciwgaXQgbWF5IGluY2x1ZGUgT1RHIG9wZXJhdGlvbgotICogaW4gdGhlIGZ1dHVyZS4KKyAqIFRoaXMgZmlsZSBtYWlubHkgaGFuZGxlcyBvdGdzYyByZWdpc3RlciwgT1RHIGZzbSBvcGVyYXRpb25zIGZvciBITlAgYW5kIFNSUAorICogYXJlIGFsc28gaW5jbHVkZWQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KQEAgLTIyLDYgKzIyLDI2IEBACiAjaW5jbHVkZSAiY2kuaCIKICNpbmNsdWRlICJiaXRzLmgiCiAjaW5jbHVkZSAib3RnLmgiCisjaW5jbHVkZSAib3RnX2ZzbS5oIgorCisvKioKKyAqIGh3X3JlYWRfb3Rnc2MgcmV0dXJucyBvdGdzYyByZWdpc3RlciBiaXRzIHZhbHVlLgorICogQG1hc2s6IGJpdGZpZWxkIG1hc2sKKyAqLwordTMyIGh3X3JlYWRfb3Rnc2Moc3RydWN0IGNpX2hkcmMgKmNpLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gaHdfcmVhZChjaSwgT1BfT1RHU0MsIG1hc2spOworfQorCisvKioKKyAqIGh3X3dyaXRlX290Z3NjIHVwZGF0ZXMgdGFyZ2V0IGJpdHMgb2YgT1RHU0MgcmVnaXN0ZXIuCisgKiBAbWFzazogYml0ZmllbGQgbWFzaworICogQGRhdGE6IHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBod193cml0ZV9vdGdzYyhzdHJ1Y3QgY2lfaGRyYyAqY2ksIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3sKKwlod193cml0ZShjaSwgT1BfT1RHU0MsIG1hc2sgfCBPVEdTQ19JTlRfU1RBVFVTX0JJVFMsIGRhdGEpOworfQogCiAvKioKICAqIGNpX290Z19yb2xlIC0gcGljayByb2xlIGJhc2VkIG9uIElEIHBpbiBzdGF0ZQpAQCAtMjksOCArNDksNyBAQAogICovCiBlbnVtIGNpX3JvbGUgY2lfb3RnX3JvbGUoc3RydWN0IGNpX2hkcmMgKmNpKQogewotCXUzMiBzdHMgPSBod19yZWFkKGNpLCBPUF9PVEdTQywgfjApOwotCWVudW0gY2lfcm9sZSByb2xlID0gc3RzICYgT1RHU0NfSUQKKwllbnVtIGNpX3JvbGUgcm9sZSA9IGh3X3JlYWRfb3Rnc2MoY2ksIE9UR1NDX0lEKQogCQk/IENJX1JPTEVfR0FER0VUCiAJCTogQ0lfUk9MRV9IT1NUOwogCkBAIC0zOSwxNCArNTgsMTAgQEAKIAogdm9pZCBjaV9oYW5kbGVfdmJ1c19jaGFuZ2Uoc3RydWN0IGNpX2hkcmMgKmNpKQogewotCXUzMiBvdGdzYzsKLQogCWlmICghY2ktPmlzX290ZykKIAkJcmV0dXJuOwogCi0Jb3Rnc2MgPSBod19yZWFkKGNpLCBPUF9PVEdTQywgfjApOwotCi0JaWYgKG90Z3NjICYgT1RHU0NfQlNWKQorCWlmIChod19yZWFkX290Z3NjKGNpLCBPVEdTQ19CU1YpKQogCQl1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdCgmY2ktPmdhZGdldCk7CiAJZWxzZQogCQl1c2JfZ2FkZ2V0X3ZidXNfZGlzY29ubmVjdCgmY2ktPmdhZGdldCk7CkBAIC03Niw2ICs5MSwxMSBAQAogewogCXN0cnVjdCBjaV9oZHJjICpjaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2lfaGRyYywgd29yayk7CiAKKwlpZiAoY2lfb3RnX2lzX2ZzbV9tb2RlKGNpKSAmJiAhY2lfb3RnX2ZzbV93b3JrKGNpKSkgeworCQllbmFibGVfaXJxKGNpLT5pcnEpOworCQlyZXR1cm47CisJfQorCiAJaWYgKGNpLT5pZF9ldmVudCkgewogCQljaS0+aWRfZXZlbnQgPSBmYWxzZTsKIAkJY2lfaGFuZGxlX2lkX3N3aXRjaChjaSk7CkBAIC0xMDIsNiArMTIyLDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKGNpX290Z19pc19mc21fbW9kZShjaSkpCisJCXJldHVybiBjaV9oZHJjX290Z19mc21faW5pdChjaSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE1LDYgKzEzOCw5IEBACiAJCWZsdXNoX3dvcmtxdWV1ZShjaS0+d3EpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShjaS0+d3EpOwogCX0KLQljaV9kaXNhYmxlX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0lOVF9FTl9CSVRTKTsKLQljaV9jbGVhcl9vdGdfaW50ZXJydXB0KGNpLCBPVEdTQ19JTlRfU1RBVFVTX0JJVFMpOworCS8qIERpc2FibGUgYWxsIE9URyBpcnEgYW5kIGNsZWFyIHN0YXR1cyAqLworCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ19JTlRfRU5fQklUUyB8IE9UR1NDX0lOVF9TVEFUVVNfQklUUywKKwkJCQkJCU9UR1NDX0lOVF9TVEFUVVNfQklUUyk7CisJaWYgKGNpX290Z19pc19mc21fbW9kZShjaSkpCisJCWNpX2hkcmNfb3RnX2ZzbV9yZW1vdmUoY2kpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvb3RnLmggYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGcuaAppbmRleCA0NDliZWUwLi45ZWNiNTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGcuaAorKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGcuaApAQCAtMTEsMjUgKzExLDE2IEBACiAjaWZuZGVmIF9fRFJJVkVSU19VU0JfQ0hJUElERUFfT1RHX0gKICNkZWZpbmUgX19EUklWRVJTX1VTQl9DSElQSURFQV9PVEdfSAogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2lfY2xlYXJfb3RnX2ludGVycnVwdChzdHJ1Y3QgY2lfaGRyYyAqY2ksIHUzMiBiaXRzKQotewotCS8qIE9ubHkgY2xlYXIgcmVxdWVzdCBiaXRzICovCi0JaHdfd3JpdGUoY2ksIE9QX09UR1NDLCBPVEdTQ19JTlRfU1RBVFVTX0JJVFMsIGJpdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2lfZW5hYmxlX290Z19pbnRlcnJ1cHQoc3RydWN0IGNpX2hkcmMgKmNpLCB1MzIgYml0cykKLXsKLQlod193cml0ZShjaSwgT1BfT1RHU0MsIGJpdHMgfCBPVEdTQ19JTlRfU1RBVFVTX0JJVFMsIGJpdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2lfZGlzYWJsZV9vdGdfaW50ZXJydXB0KHN0cnVjdCBjaV9oZHJjICpjaSwgdTMyIGJpdHMpCi17Ci0JaHdfd3JpdGUoY2ksIE9QX09UR1NDLCBiaXRzIHwgT1RHU0NfSU5UX1NUQVRVU19CSVRTLCAwKTsKLX0KLQordTMyIGh3X3JlYWRfb3Rnc2Moc3RydWN0IGNpX2hkcmMgKmNpLCB1MzIgbWFzayk7Cit2b2lkIGh3X3dyaXRlX290Z3NjKHN0cnVjdCBjaV9oZHJjICpjaSwgdTMyIG1hc2ssIHUzMiBkYXRhKTsKIGludCBjaV9oZHJjX290Z19pbml0KHN0cnVjdCBjaV9oZHJjICpjaSk7CiB2b2lkIGNpX2hkcmNfb3RnX2Rlc3Ryb3koc3RydWN0IGNpX2hkcmMgKmNpKTsKIGVudW0gY2lfcm9sZSBjaV9vdGdfcm9sZShzdHJ1Y3QgY2lfaGRyYyAqY2kpOwogdm9pZCBjaV9oYW5kbGVfdmJ1c19jaGFuZ2Uoc3RydWN0IGNpX2hkcmMgKmNpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaV9vdGdfcXVldWVfd29yayhzdHJ1Y3QgY2lfaGRyYyAqY2kpCit7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGNpLT5pcnEpOworCXF1ZXVlX3dvcmsoY2ktPndxLCAmY2ktPndvcmspOworfQogCiAjZW5kaWYgLyogX19EUklWRVJTX1VTQl9DSElQSURFQV9PVEdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvb3RnX2ZzbS5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvb3RnX2ZzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWFiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGdfZnNtLmMKQEAgLTAsMCArMSw4NDIgQEAKKy8qCisgKiBvdGdfZnNtLmMgLSBDaGlwSWRlYSBVU0IgSVAgY29yZSBPVEcgRlNNIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIEF1dGhvcjogSnVuIExpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogVGhpcyBmaWxlIG1haW5seSBoYW5kbGVzIE9URyBmc20sIGl0IGluY2x1ZGVzIE9URyBmc20gb3BlcmF0aW9ucworICogZm9yIEhOUCBhbmQgU1JQLgorICoKKyAqIFRPRE8gTGlzdAorICogLSBBRFAKKyAqIC0gT1RHIHRlc3QgZGV2aWNlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jaGlwaWRlYS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSAiY2kuaCIKKyNpbmNsdWRlICJiaXRzLmgiCisjaW5jbHVkZSAib3RnLmgiCisjaW5jbHVkZSAib3RnX2ZzbS5oIgorCitzdGF0aWMgc3RydWN0IGNpX290Z19mc21fdGltZXIgKm90Z190aW1lcl9pbml0aWFsaXplcgorKHN0cnVjdCBjaV9oZHJjICpjaSwgdm9pZCAoKmZ1bmN0aW9uKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLAorCQkJdW5zaWduZWQgbG9uZyBleHBpcmVzLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGNpX290Z19mc21fdGltZXIgKnRpbWVyOworCisJdGltZXIgPSBkZXZtX2t6YWxsb2MoY2ktPmRldiwgc2l6ZW9mKHN0cnVjdCBjaV9vdGdfZnNtX3RpbWVyKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF0aW1lcikKKwkJcmV0dXJuIE5VTEw7CisJdGltZXItPmZ1bmN0aW9uID0gZnVuY3Rpb247CisJdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOworCXRpbWVyLT5kYXRhID0gZGF0YTsKKwlyZXR1cm4gdGltZXI7Cit9CisKKy8qIEFkZCBmb3Igb3RnOiBpbnRlcmFjdCB3aXRoIHVzZXIgc3BhY2UgYXBwICovCitzdGF0aWMgc3NpemVfdAorZ2V0X2FfYnVzX3JlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJY2hhcgkJKm5leHQ7CisJdW5zaWduZWQJc2l6ZSwgdDsKKwlzdHJ1Y3QgY2lfaGRyYwkqY2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW5leHQgPSBidWY7CisJc2l6ZSA9IFBBR0VfU0laRTsKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICIlZFxuIiwgY2ktPmZzbS5hX2J1c19yZXEpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3QKK3NldF9hX2J1c19yZXEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGNpX2hkcmMgKmNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoY291bnQgPiAyKQorCQlyZXR1cm4gLTE7CisKKwltdXRleF9sb2NrKCZjaS0+ZnNtLmxvY2spOworCWlmIChidWZbMF0gPT0gJzAnKSB7CisJCWNpLT5mc20uYV9idXNfcmVxID0gMDsKKwl9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnMScpIHsKKwkJLyogSWYgYV9idXNfZHJvcCBpcyBUUlVFLCBhX2J1c19yZXEgY2FuJ3QgYmUgc2V0ICovCisJCWlmIChjaS0+ZnNtLmFfYnVzX2Ryb3ApIHsKKwkJCW11dGV4X3VubG9jaygmY2ktPmZzbS5sb2NrKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCQljaS0+ZnNtLmFfYnVzX3JlcSA9IDE7CisJfQorCisJY2lfb3RnX3F1ZXVlX3dvcmsoY2kpOworCW11dGV4X3VubG9jaygmY2ktPmZzbS5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihhX2J1c19yZXEsIFNfSVJVR08gfCBTX0lXVVNSLCBnZXRfYV9idXNfcmVxLCBzZXRfYV9idXNfcmVxKTsKKworc3RhdGljIHNzaXplX3QKK2dldF9hX2J1c19kcm9wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwljaGFyCQkqbmV4dDsKKwl1bnNpZ25lZAlzaXplLCB0OworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIiVkXG4iLCBjaS0+ZnNtLmFfYnVzX2Ryb3ApOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3QKK3NldF9hX2J1c19kcm9wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGNvdW50ID4gMikKKwkJcmV0dXJuIC0xOworCisJbXV0ZXhfbG9jaygmY2ktPmZzbS5sb2NrKTsKKwlpZiAoYnVmWzBdID09ICcwJykgeworCQljaS0+ZnNtLmFfYnVzX2Ryb3AgPSAwOworCX0gZWxzZSBpZiAoYnVmWzBdID09ICcxJykgeworCQljaS0+ZnNtLmFfYnVzX2Ryb3AgPSAxOworCQljaS0+ZnNtLmFfYnVzX3JlcSA9IDA7CisJfQorCisJY2lfb3RnX3F1ZXVlX3dvcmsoY2kpOworCW11dGV4X3VubG9jaygmY2ktPmZzbS5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihhX2J1c19kcm9wLCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X2FfYnVzX2Ryb3AsCisJCQkJCQlzZXRfYV9idXNfZHJvcCk7CisKK3N0YXRpYyBzc2l6ZV90CitnZXRfYl9idXNfcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwljaGFyCQkqbmV4dDsKKwl1bnNpZ25lZAlzaXplLCB0OworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIiVkXG4iLCBjaS0+ZnNtLmJfYnVzX3JlcSk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorCitzdGF0aWMgc3NpemVfdAorc2V0X2JfYnVzX3JlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2lfaGRyYwkqY2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChjb3VudCA+IDIpCisJCXJldHVybiAtMTsKKworCW11dGV4X2xvY2soJmNpLT5mc20ubG9jayk7CisJaWYgKGJ1ZlswXSA9PSAnMCcpCisJCWNpLT5mc20uYl9idXNfcmVxID0gMDsKKwllbHNlIGlmIChidWZbMF0gPT0gJzEnKQorCQljaS0+ZnNtLmJfYnVzX3JlcSA9IDE7CisKKwljaV9vdGdfcXVldWVfd29yayhjaSk7CisJbXV0ZXhfdW5sb2NrKCZjaS0+ZnNtLmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGJfYnVzX3JlcSwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9iX2J1c19yZXEsIHNldF9iX2J1c19yZXEpOworCitzdGF0aWMgc3NpemVfdAorc2V0X2FfY2xyX2VycihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2lfaGRyYwkqY2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChjb3VudCA+IDIpCisJCXJldHVybiAtMTsKKworCW11dGV4X2xvY2soJmNpLT5mc20ubG9jayk7CisJaWYgKGJ1ZlswXSA9PSAnMScpCisJCWNpLT5mc20uYV9jbHJfZXJyID0gMTsKKworCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKKwltdXRleF91bmxvY2soJmNpLT5mc20ubG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYV9jbHJfZXJyLCBTX0lXVVNSLCBOVUxMLCBzZXRfYV9jbHJfZXJyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlucHV0c19hdHRyc1tdID0geworCSZkZXZfYXR0cl9hX2J1c19yZXEuYXR0ciwKKwkmZGV2X2F0dHJfYV9idXNfZHJvcC5hdHRyLAorCSZkZXZfYXR0cl9iX2J1c19yZXEuYXR0ciwKKwkmZGV2X2F0dHJfYV9jbHJfZXJyLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlucHV0c19hdHRyX2dyb3VwID0geworCS5uYW1lID0gImlucHV0cyIsCisJLmF0dHJzID0gaW5wdXRzX2F0dHJzLAorfTsKKworLyoKKyAqIEFkZCB0aW1lciB0byBhY3RpdmUgdGltZXIgbGlzdAorICovCitzdGF0aWMgdm9pZCBjaV9vdGdfYWRkX3RpbWVyKHN0cnVjdCBjaV9oZHJjICpjaSwgZW51bSBjaV9vdGdfZnNtX3RpbWVyX2luZGV4IHQpCit7CisJc3RydWN0IGNpX290Z19mc21fdGltZXIgKnRtcF90aW1lcjsKKwlzdHJ1Y3QgY2lfb3RnX2ZzbV90aW1lciAqdGltZXIgPSBjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W3RdOworCXN0cnVjdCBsaXN0X2hlYWQgKmFjdGl2ZV90aW1lcnMgPSAmY2ktPmZzbV90aW1lci0+YWN0aXZlX3RpbWVyczsKKworCWlmICh0ID49IE5VTV9DSV9PVEdfRlNNX1RJTUVSUykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgdGltZXIgaXMgYWxyZWFkeSBpbiB0aGUgYWN0aXZlIGxpc3QsCisJICogaWYgc28gdXBkYXRlIHRpbWVyIGNvdW50CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfdGltZXIsIGFjdGl2ZV90aW1lcnMsIGxpc3QpCisJCWlmICh0bXBfdGltZXIgPT0gdGltZXIpIHsKKwkJCXRpbWVyLT5jb3VudCA9IHRpbWVyLT5leHBpcmVzOworCQkJcmV0dXJuOworCQl9CisKKwl0aW1lci0+Y291bnQgPSB0aW1lci0+ZXhwaXJlczsKKwlsaXN0X2FkZF90YWlsKCZ0aW1lci0+bGlzdCwgYWN0aXZlX3RpbWVycyk7CisKKwkvKiBFbmFibGUgMW1zIGlycSAqLworCWlmICghKGh3X3JlYWRfb3Rnc2MoY2ksIE9UR1NDXzFNU0lFKSkpCisJCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ18xTVNJRSwgT1RHU0NfMU1TSUUpOworfQorCisvKgorICogUmVtb3ZlIHRpbWVyIGZyb20gYWN0aXZlIHRpbWVyIGxpc3QKKyAqLworc3RhdGljIHZvaWQgY2lfb3RnX2RlbF90aW1lcihzdHJ1Y3QgY2lfaGRyYyAqY2ksIGVudW0gY2lfb3RnX2ZzbV90aW1lcl9pbmRleCB0KQoreworCXN0cnVjdCBjaV9vdGdfZnNtX3RpbWVyICp0bXBfdGltZXIsICpkZWxfdG1wOworCXN0cnVjdCBjaV9vdGdfZnNtX3RpbWVyICp0aW1lciA9IGNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbdF07CisJc3RydWN0IGxpc3RfaGVhZCAqYWN0aXZlX3RpbWVycyA9ICZjaS0+ZnNtX3RpbWVyLT5hY3RpdmVfdGltZXJzOworCisJaWYgKHQgPj0gTlVNX0NJX09UR19GU01fVElNRVJTKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wX3RpbWVyLCBkZWxfdG1wLCBhY3RpdmVfdGltZXJzLCBsaXN0KQorCQlpZiAodG1wX3RpbWVyID09IHRpbWVyKQorCQkJbGlzdF9kZWwoJnRpbWVyLT5saXN0KTsKKworCS8qIERpc2FibGUgMW1zIGlycSBpZiB0aGVyZSBpcyBubyBhbnkgYWN0aXZlIHRpbWVyICovCisJaWYgKGxpc3RfZW1wdHkoYWN0aXZlX3RpbWVycykpCisJCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ18xTVNJRSwgMCk7Cit9CisKKy8qCisgKiBSZWR1Y2UgdGltZXIgY291bnQgYnkgMSwgYW5kIGZpbmQgdGltZW91dCBjb25kaXRpb25zLgorICogQ2FsbGVkIGJ5IG90ZyAxbXMgdGltZXIgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNpX290Z190aWNrX3RpbWVyKHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwlzdHJ1Y3QgY2lfb3RnX2ZzbV90aW1lciAqdG1wX3RpbWVyLCAqZGVsX3RtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICphY3RpdmVfdGltZXJzID0gJmNpLT5mc21fdGltZXItPmFjdGl2ZV90aW1lcnM7CisJaW50IGV4cGlyZWQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcF90aW1lciwgZGVsX3RtcCwgYWN0aXZlX3RpbWVycywgbGlzdCkgeworCQl0bXBfdGltZXItPmNvdW50LS07CisJCS8qIGNoZWNrIGlmIHRpbWVyIGV4cGlyZXMgKi8KKwkJaWYgKCF0bXBfdGltZXItPmNvdW50KSB7CisJCQlsaXN0X2RlbCgmdG1wX3RpbWVyLT5saXN0KTsKKwkJCXRtcF90aW1lci0+ZnVuY3Rpb24oY2ksIHRtcF90aW1lci0+ZGF0YSk7CisJCQlleHBpcmVkID0gMTsKKwkJfQorCX0KKworCS8qIGRpc2FibGUgMW1zIGlycSBpZiB0aGVyZSBpcyBubyBhbnkgdGltZXIgYWN0aXZlICovCisJaWYgKChleHBpcmVkID09IDEpICYmIGxpc3RfZW1wdHkoYWN0aXZlX3RpbWVycykpCisJCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ18xTVNJRSwgMCk7CisKKwlyZXR1cm4gZXhwaXJlZDsKK30KKworLyogVGhlIHRpbWVvdXQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IHRpbWUgb3V0IGJpdCAqLworc3RhdGljIHZvaWQgc2V0X3Rtb3V0KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBpbmRpY2F0b3IpCit7CisJKihpbnQgKilpbmRpY2F0b3IgPSAxOworfQorCitzdGF0aWMgdm9pZCBzZXRfdG1vdXRfYW5kX2ZzbSh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgaW5kaWNhdG9yKQoreworCXN0cnVjdCBjaV9oZHJjICpjaSA9IChzdHJ1Y3QgY2lfaGRyYyAqKXB0cjsKKworCXNldF90bW91dChjaSwgaW5kaWNhdG9yKTsKKworCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKK30KKworc3RhdGljIHZvaWQgYV93YWl0X3ZmYWxsX3Rtb3V0X2Z1bmModm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIGluZGljYXRvcikKK3sKKwlzdHJ1Y3QgY2lfaGRyYyAqY2kgPSAoc3RydWN0IGNpX2hkcmMgKilwdHI7CisKKwlzZXRfdG1vdXQoY2ksIGluZGljYXRvcik7CisJLyogRGlzYWJsZSBwb3J0IHBvd2VyICovCisJaHdfd3JpdGUoY2ksIE9QX1BPUlRTQywgUE9SVFNDX1cxQ19CSVRTIHwgUE9SVFNDX1BQLCAwKTsKKwkvKiBDbGVhciBleHNpdGluZyBEUCBpcnEgKi8KKwlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfRFBJUywgT1RHU0NfRFBJUyk7CisJLyogRW5hYmxlIGRhdGEgcHVsc2UgaXJxICovCisJaHdfd3JpdGVfb3Rnc2MoY2ksIE9UR1NDX0RQSUUsIE9UR1NDX0RQSUUpOworCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKK30KKworc3RhdGljIHZvaWQgYl9hc2UwX2Jyc3RfdG1vdXRfZnVuYyh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgaW5kaWNhdG9yKQoreworCXN0cnVjdCBjaV9oZHJjICpjaSA9IChzdHJ1Y3QgY2lfaGRyYyAqKXB0cjsKKworCXNldF90bW91dChjaSwgaW5kaWNhdG9yKTsKKwlpZiAoIWh3X3JlYWRfb3Rnc2MoY2ksIE9UR1NDX0JTVikpCisJCWNpLT5mc20uYl9zZXNzX3ZsZCA9IDA7CisKKwljaV9vdGdfcXVldWVfd29yayhjaSk7Cit9CisKK3N0YXRpYyB2b2lkIGJfc3NlbmRfc3JwX3Rtb3V0X2Z1bmModm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIGluZGljYXRvcikKK3sKKwlzdHJ1Y3QgY2lfaGRyYyAqY2kgPSAoc3RydWN0IGNpX2hkcmMgKilwdHI7CisKKwlzZXRfdG1vdXQoY2ksIGluZGljYXRvcik7CisKKwkvKiBvbmx5IHZidXMgZmFsbCBiZWxvdyBCX3Nlc3NfdmxkIGluIGJfaWRsZSBzdGF0ZSAqLworCWlmIChjaS0+dHJhbnNjZWl2ZXItPnN0YXRlID09IE9UR19TVEFURV9CX0lETEUpCisJCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKK30KKworc3RhdGljIHZvaWQgYl9zZXNzX3ZsZF90bW91dF9mdW5jKHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBpbmRpY2F0b3IpCit7CisJc3RydWN0IGNpX2hkcmMgKmNpID0gKHN0cnVjdCBjaV9oZHJjICopcHRyOworCisJLyogQ2hlY2sgaWYgQSBkZXRhY2hlZCAqLworCWlmICghKGh3X3JlYWRfb3Rnc2MoY2ksIE9UR1NDX0JTVikpKSB7CisJCWNpLT5mc20uYl9zZXNzX3ZsZCA9IDA7CisJCWNpX290Z19hZGRfdGltZXIoY2ksIEJfU1NFTkRfU1JQKTsKKwkJY2lfb3RnX3F1ZXVlX3dvcmsoY2kpOworCX0KK30KKworc3RhdGljIHZvaWQgYl9kYXRhX3B1bHNlX2VuZCh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgaW5kaWNhdG9yKQoreworCXN0cnVjdCBjaV9oZHJjICpjaSA9IChzdHJ1Y3QgY2lfaGRyYyAqKXB0cjsKKworCWNpLT5mc20uYl9zcnBfZG9uZSA9IDE7CisJY2ktPmZzbS5iX2J1c19yZXEgPSAwOworCWlmIChjaS0+ZnNtLnBvd2VyX3VwKQorCQljaS0+ZnNtLnBvd2VyX3VwID0gMDsKKworCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ19IQUJBLCAwKTsKKworCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aW1lcnMgKi8KK3N0YXRpYyBpbnQgY2lfb3RnX2luaXRfdGltZXJzKHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwlzdHJ1Y3Qgb3RnX2ZzbSAqZnNtID0gJmNpLT5mc207CisKKwkvKiBGU00gdXNlZCB0aW1lcnMgKi8KKwljaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0FfV0FJVF9WUklTRV0gPQorCQlvdGdfdGltZXJfaW5pdGlhbGl6ZXIoY2ksICZzZXRfdG1vdXRfYW5kX2ZzbSwgVEFfV0FJVF9WUklTRSwKKwkJCSh1bnNpZ25lZCBsb25nKSZmc20tPmFfd2FpdF92cmlzZV90bW91dCk7CisJaWYgKGNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQV9XQUlUX1ZSSVNFXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQV9XQUlUX1ZGQUxMXSA9CisJCW90Z190aW1lcl9pbml0aWFsaXplcihjaSwgJmFfd2FpdF92ZmFsbF90bW91dF9mdW5jLAorCQlUQV9XQUlUX1ZGQUxMLCAodW5zaWduZWQgbG9uZykmZnNtLT5hX3dhaXRfdmZhbGxfdG1vdXQpOworCWlmIChjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0FfV0FJVF9WRkFMTF0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0FfV0FJVF9CQ09OXSA9CisJCW90Z190aW1lcl9pbml0aWFsaXplcihjaSwgJnNldF90bW91dF9hbmRfZnNtLCBUQV9XQUlUX0JDT04sCisJCQkJKHVuc2lnbmVkIGxvbmcpJmZzbS0+YV93YWl0X2Jjb25fdG1vdXQpOworCWlmIChjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0FfV0FJVF9CQ09OXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQV9BSURMX0JESVNdID0KKwkJb3RnX3RpbWVyX2luaXRpYWxpemVyKGNpLCAmc2V0X3Rtb3V0X2FuZF9mc20sIFRBX0FJRExfQkRJUywKKwkJCQkodW5zaWduZWQgbG9uZykmZnNtLT5hX2FpZGxfYmRpc190bW91dCk7CisJaWYgKGNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQV9BSURMX0JESVNdID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2ktPmZzbV90aW1lci0+dGltZXJfbGlzdFtBX0JJRExfQURJU10gPQorCQlvdGdfdGltZXJfaW5pdGlhbGl6ZXIoY2ksICZzZXRfdG1vdXRfYW5kX2ZzbSwgVEFfQklETF9BRElTLAorCQkJCSh1bnNpZ25lZCBsb25nKSZmc20tPmFfYmlkbF9hZGlzX3Rtb3V0KTsKKwlpZiAoY2ktPmZzbV90aW1lci0+dGltZXJfbGlzdFtBX0JJRExfQURJU10gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0JfQVNFMF9CUlNUXSA9CisJCW90Z190aW1lcl9pbml0aWFsaXplcihjaSwgJmJfYXNlMF9icnN0X3Rtb3V0X2Z1bmMsIFRCX0FTRTBfQlJTVCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpJmZzbS0+Yl9hc2UwX2Jyc3RfdG1vdXQpOworCWlmIChjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0JfQVNFMF9CUlNUXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQl9TRTBfU1JQXSA9CisJCW90Z190aW1lcl9pbml0aWFsaXplcihjaSwgJnNldF90bW91dF9hbmRfZnNtLCBUQl9TRTBfU1JQLAorCQkJCQkodW5zaWduZWQgbG9uZykmZnNtLT5iX3NlMF9zcnApOworCWlmIChjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0JfU0UwX1NSUF0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0JfU1NFTkRfU1JQXSA9CisJCW90Z190aW1lcl9pbml0aWFsaXplcihjaSwgJmJfc3NlbmRfc3JwX3Rtb3V0X2Z1bmMsIFRCX1NTRU5EX1NSUCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpJmZzbS0+Yl9zc2VuZF9zcnApOworCWlmIChjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0JfU1NFTkRfU1JQXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQl9TUlBfRkFJTF0gPQorCQlvdGdfdGltZXJfaW5pdGlhbGl6ZXIoY2ksICZzZXRfdG1vdXQsIFRCX1NSUF9GQUlMLAorCQkJCSh1bnNpZ25lZCBsb25nKSZmc20tPmJfc3JwX2RvbmUpOworCWlmIChjaS0+ZnNtX3RpbWVyLT50aW1lcl9saXN0W0JfU1JQX0ZBSUxdID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2ktPmZzbV90aW1lci0+dGltZXJfbGlzdFtCX0RBVEFfUExTXSA9CisJCW90Z190aW1lcl9pbml0aWFsaXplcihjaSwgJmJfZGF0YV9wdWxzZV9lbmQsIFRCX0RBVEFfUExTLCAwKTsKKwlpZiAoY2ktPmZzbV90aW1lci0+dGltZXJfbGlzdFtCX0RBVEFfUExTXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNpLT5mc21fdGltZXItPnRpbWVyX2xpc3RbQl9TRVNTX1ZMRF0gPQlvdGdfdGltZXJfaW5pdGlhbGl6ZXIoY2ksCisJCQkJCSZiX3Nlc3NfdmxkX3Rtb3V0X2Z1bmMsIFRCX1NFU1NfVkxELCAwKTsKKwlpZiAoY2ktPmZzbV90aW1lci0+dGltZXJfbGlzdFtCX1NFU1NfVkxEXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE9wZXJhdGlvbnMgdGhhdCB3aWxsIGJlIGNhbGxlZCBmcm9tIE9URyBGaW5pdGUgU3RhdGUgTWFjaGluZSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBjaV9vdGdfZnNtX2FkZF90aW1lcihzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBlbnVtIG90Z19mc21fdGltZXIgdCkKK3sKKwlzdHJ1Y3QgY2lfaGRyYwkqY2kgPSBjb250YWluZXJfb2YoZnNtLCBzdHJ1Y3QgY2lfaGRyYywgZnNtKTsKKworCWlmICh0IDwgTlVNX09UR19GU01fVElNRVJTKQorCQljaV9vdGdfYWRkX3RpbWVyKGNpLCB0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGNpX290Z19mc21fZGVsX3RpbWVyKHN0cnVjdCBvdGdfZnNtICpmc20sIGVudW0gb3RnX2ZzbV90aW1lciB0KQoreworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGNvbnRhaW5lcl9vZihmc20sIHN0cnVjdCBjaV9oZHJjLCBmc20pOworCisJaWYgKHQgPCBOVU1fT1RHX0ZTTV9USU1FUlMpCisJCWNpX290Z19kZWxfdGltZXIoY2ksIHQpOworCXJldHVybjsKK30KKworLyoKKyAqIEEtZGV2aWNlIGRyaXZlIHZidXM6IHR1cm4gb24gdmJ1cyByZWd1bGF0b3IgYW5kIGVuYWJsZSBwb3J0IHBvd2VyCisgKiBEYXRhIHB1bHNlIGlycSBzaG91bGQgYmUgZGlzYWJsZWQgd2hpbGUgdmJ1cyBpcyBvbi4KKyAqLworc3RhdGljIHZvaWQgY2lfb3RnX2Rydl92YnVzKHN0cnVjdCBvdGdfZnNtICpmc20sIGludCBvbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGNvbnRhaW5lcl9vZihmc20sIHN0cnVjdCBjaV9oZHJjLCBmc20pOworCisJaWYgKG9uKSB7CisJCS8qIEVuYWJsZSBwb3dlciBwb3dlciAqLworCQlod193cml0ZShjaSwgT1BfUE9SVFNDLCBQT1JUU0NfVzFDX0JJVFMgfCBQT1JUU0NfUFAsCisJCQkJCQkJUE9SVFNDX1BQKTsKKwkJaWYgKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoY2ktPnBsYXRkYXRhLT5yZWdfdmJ1cyk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2VycihjaS0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHZidXMgcmVndWxhdG9yLCByZXQ9JWRcbiIsCisJCQkJcmV0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJLyogRGlzYWJsZSBkYXRhIHB1bHNlIGlycSAqLworCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfRFBJRSwgMCk7CisKKwkJZnNtLT5hX3NycF9kZXQgPSAwOworCQlmc20tPnBvd2VyX3VwID0gMDsKKwl9IGVsc2UgeworCQlpZiAoY2ktPnBsYXRkYXRhLT5yZWdfdmJ1cykKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGNpLT5wbGF0ZGF0YS0+cmVnX3ZidXMpOworCisJCWZzbS0+YV9idXNfZHJvcCA9IDE7CisJCWZzbS0+YV9idXNfcmVxID0gMDsKKwl9Cit9CisKKy8qCisgKiBDb250cm9sIGRhdGEgbGluZSBieSBSdW4gU3RvcCBiaXQuCisgKi8KK3N0YXRpYyB2b2lkIGNpX290Z19sb2NfY29ubihzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBpbnQgb24pCit7CisJc3RydWN0IGNpX2hkcmMJKmNpID0gY29udGFpbmVyX29mKGZzbSwgc3RydWN0IGNpX2hkcmMsIGZzbSk7CisKKwlpZiAob24pCisJCWh3X3dyaXRlKGNpLCBPUF9VU0JDTUQsIFVTQkNNRF9SUywgVVNCQ01EX1JTKTsKKwllbHNlCisJCWh3X3dyaXRlKGNpLCBPUF9VU0JDTUQsIFVTQkNNRF9SUywgMCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBTT0YgYnkgaG9zdC4KKyAqIFRoaXMgaXMgY29udHJvbGxlZCB0aHJvdWdoIHN1c3BlbmQvcmVzdW1lIHRoZSBwb3J0LgorICogSW4gaG9zdCBtb2RlLCBjb250cm9sbGVyIHdpbGwgYXV0b21hdGljYWxseSBzZW5kIFNPRi4KKyAqIFN1c3BlbmQgd2lsbCBibG9jayB0aGUgZGF0YSBvbiB0aGUgcG9ydC4KKyAqLworc3RhdGljIHZvaWQgY2lfb3RnX2xvY19zb2Yoc3RydWN0IG90Z19mc20gKmZzbSwgaW50IG9uKQoreworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGNvbnRhaW5lcl9vZihmc20sIHN0cnVjdCBjaV9oZHJjLCBmc20pOworCisJaWYgKG9uKQorCQlod193cml0ZShjaSwgT1BfUE9SVFNDLCBQT1JUU0NfVzFDX0JJVFMgfCBQT1JUU0NfRlBSLAorCQkJCQkJCVBPUlRTQ19GUFIpOworCWVsc2UKKwkJaHdfd3JpdGUoY2ksIE9QX1BPUlRTQywgUE9SVFNDX1cxQ19CSVRTIHwgUE9SVFNDX1NVU1AsCisJCQkJCQkJUE9SVFNDX1NVU1ApOworfQorCisvKgorICogU3RhcnQgU1JQIHB1bHNpbmcgYnkgZGF0YS1saW5lIHB1bHNpbmcsCisgKiBubyB2LWJ1cyBwdWxzaW5nIGZvbGxvd2VkCisgKi8KK3N0YXRpYyB2b2lkIGNpX290Z19zdGFydF9wdWxzZShzdHJ1Y3Qgb3RnX2ZzbSAqZnNtKQoreworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGNvbnRhaW5lcl9vZihmc20sIHN0cnVjdCBjaV9oZHJjLCBmc20pOworCisJLyogSGFyZHdhcmUgQXNzaXN0YW50IERhdGEgcHVsc2UgKi8KKwlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfSEFEUCwgT1RHU0NfSEFEUCk7CisKKwljaV9vdGdfYWRkX3RpbWVyKGNpLCBCX0RBVEFfUExTKTsKK30KKworc3RhdGljIGludCBjaV9vdGdfc3RhcnRfaG9zdChzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBpbnQgb24pCit7CisJc3RydWN0IGNpX2hkcmMJKmNpID0gY29udGFpbmVyX29mKGZzbSwgc3RydWN0IGNpX2hkcmMsIGZzbSk7CisKKwltdXRleF91bmxvY2soJmZzbS0+bG9jayk7CisJaWYgKG9uKSB7CisJCWNpX3JvbGVfc3RvcChjaSk7CisJCWNpX3JvbGVfc3RhcnQoY2ksIENJX1JPTEVfSE9TVCk7CisJfSBlbHNlIHsKKwkJY2lfcm9sZV9zdG9wKGNpKTsKKwkJaHdfZGV2aWNlX3Jlc2V0KGNpLCBVU0JNT0RFX0NNX0RDKTsKKwkJY2lfcm9sZV9zdGFydChjaSwgQ0lfUk9MRV9HQURHRVQpOworCX0KKwltdXRleF9sb2NrKCZmc20tPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpX290Z19zdGFydF9nYWRnZXQoc3RydWN0IG90Z19mc20gKmZzbSwgaW50IG9uKQoreworCXN0cnVjdCBjaV9oZHJjCSpjaSA9IGNvbnRhaW5lcl9vZihmc20sIHN0cnVjdCBjaV9oZHJjLCBmc20pOworCisJbXV0ZXhfdW5sb2NrKCZmc20tPmxvY2spOworCWlmIChvbikKKwkJdXNiX2dhZGdldF92YnVzX2Nvbm5lY3QoJmNpLT5nYWRnZXQpOworCWVsc2UKKwkJdXNiX2dhZGdldF92YnVzX2Rpc2Nvbm5lY3QoJmNpLT5nYWRnZXQpOworCW11dGV4X2xvY2soJmZzbS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvdGdfZnNtX29wcyBjaV9vdGdfb3BzID0geworCS5kcnZfdmJ1cyA9IGNpX290Z19kcnZfdmJ1cywKKwkubG9jX2Nvbm4gPSBjaV9vdGdfbG9jX2Nvbm4sCisJLmxvY19zb2YgPSBjaV9vdGdfbG9jX3NvZiwKKwkuc3RhcnRfcHVsc2UgPSBjaV9vdGdfc3RhcnRfcHVsc2UsCisJLmFkZF90aW1lciA9IGNpX290Z19mc21fYWRkX3RpbWVyLAorCS5kZWxfdGltZXIgPSBjaV9vdGdfZnNtX2RlbF90aW1lciwKKwkuc3RhcnRfaG9zdCA9IGNpX290Z19zdGFydF9ob3N0LAorCS5zdGFydF9nYWRnZXQgPSBjaV9vdGdfc3RhcnRfZ2FkZ2V0LAorfTsKKworaW50IGNpX290Z19mc21fd29yayhzdHJ1Y3QgY2lfaGRyYyAqY2kpCit7CisJLyoKKwkgKiBEb24ndCBkbyBmc20gdHJhbnNpdGlvbiBmb3IgQiBkZXZpY2UKKwkgKiB3aGVuIHRoZXJlIGlzIG5vIGdhZGdldCBjbGFzcyBkcml2ZXIKKwkgKi8KKwlpZiAoY2ktPmZzbS5pZCAmJiAhKGNpLT5kcml2ZXIpICYmCisJCWNpLT50cmFuc2NlaXZlci0+c3RhdGUgPCBPVEdfU1RBVEVfQV9JRExFKQorCQlyZXR1cm4gMDsKKworCWlmIChvdGdfc3RhdGVtYWNoaW5lKCZjaS0+ZnNtKSkgeworCQlpZiAoY2ktPnRyYW5zY2VpdmVyLT5zdGF0ZSA9PSBPVEdfU1RBVEVfQV9JRExFKSB7CisJCQkvKgorCQkJICogRnVydGhlciBzdGF0ZSBjaGFuZ2UgZm9yIGNhc2VzOgorCQkJICogYV9pZGxlIHRvIGJfaWRsZTsgb3IKKwkJCSAqIGFfaWRsZSB0byBhX3dhaXRfdnJpc2UgZHVlIHRvIElEIGNoYW5nZSgxLT4wKSwgc28KKwkJCSAqIEItZGV2IGJlY29tZXMgQS1kZXYgY2FuIHRyeSB0byBzdGFydCBuZXcgc2Vzc2lvbgorCQkJICogY29uc2VxdWVudGx5OyBvcgorCQkJICogYV9pZGxlIHRvIGFfd2FpdF92cmlzZSB3aGVuIHBvd2VyIHVwCisJCQkgKi8KKwkJCWlmICgoY2ktPmZzbS5pZCkgfHwgKGNpLT5pZF9ldmVudCkgfHwKKwkJCQkJCShjaS0+ZnNtLnBvd2VyX3VwKSkKKwkJCQljaV9vdGdfcXVldWVfd29yayhjaSk7CisJCQlpZiAoY2ktPmlkX2V2ZW50KQorCQkJCWNpLT5pZF9ldmVudCA9IGZhbHNlOworCQl9IGVsc2UgaWYgKGNpLT50cmFuc2NlaXZlci0+c3RhdGUgPT0gT1RHX1NUQVRFX0JfSURMRSkgeworCQkJaWYgKGNpLT5mc20uYl9zZXNzX3ZsZCkgeworCQkJCWNpLT5mc20ucG93ZXJfdXAgPSAwOworCQkJCS8qCisJCQkJICogRnVydGhlciB0cmFuc2l0ZSB0byBiX3BlcmlwaGVhcmwgc3RhdGUKKwkJCQkgKiB3aGVuIHJlZ2lzdGVyIGdhZGdldCBkcml2ZXIgd2l0aCB2YnVzIG9uCisJCQkJICovCisJCQkJY2lfb3RnX3F1ZXVlX3dvcmsoY2kpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVXBkYXRlIGZzbSB2YXJpYWJsZXMgaW4gZWFjaCBzdGF0ZSBpZiBjYXRjaGluZyBleHBlY3RlZCBpbnRlcnJ1cHRzLAorICogY2FsbGVkIGJ5IG90ZyBmc20gaXNyLgorICovCitzdGF0aWMgdm9pZCBjaV9vdGdfZnNtX2V2ZW50KHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwl1MzIgaW50cl9zdHMsIG90Z19ic2Vzc192bGQsIHBvcnRfY29ubjsKKwlzdHJ1Y3Qgb3RnX2ZzbSAqZnNtID0gJmNpLT5mc207CisKKwlpbnRyX3N0cyA9IGh3X3JlYWRfaW50cl9zdGF0dXMoY2kpOworCW90Z19ic2Vzc192bGQgPSBod19yZWFkX290Z3NjKGNpLCBPVEdTQ19CU1YpOworCXBvcnRfY29ubiA9IGh3X3JlYWQoY2ksIE9QX1BPUlRTQywgUE9SVFNDX0NDUyk7CisKKwlzd2l0Y2ggKGNpLT50cmFuc2NlaXZlci0+c3RhdGUpIHsKKwljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoKKwkJaWYgKHBvcnRfY29ubikgeworCQkJZnNtLT5iX2Nvbm4gPSAxOworCQkJZnNtLT5hX2J1c19yZXEgPSAxOworCQkJY2lfb3RnX3F1ZXVlX3dvcmsoY2kpOworCQl9CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0JfSURMRToKKwkJaWYgKG90Z19ic2Vzc192bGQgJiYgKGludHJfc3RzICYgVVNCaV9QQ0kpICYmIHBvcnRfY29ubikgeworCQkJZnNtLT5iX3Nlc3NfdmxkID0gMTsKKwkJCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCWlmICgoaW50cl9zdHMgJiBVU0JpX1NMSSkgJiYgcG9ydF9jb25uICYmIG90Z19ic2Vzc192bGQpIHsKKwkJCWZzbS0+YV9idXNfc3VzcGVuZCA9IDE7CisJCQljaV9vdGdfcXVldWVfd29yayhjaSk7CisJCX0gZWxzZSBpZiAoaW50cl9zdHMgJiBVU0JpX1BDSSkgeworCQkJaWYgKGZzbS0+YV9idXNfc3VzcGVuZCA9PSAxKQorCQkJCWZzbS0+YV9idXNfc3VzcGVuZCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQl9IT1NUOgorCQlpZiAoKGludHJfc3RzICYgVVNCaV9QQ0kpICYmICFwb3J0X2Nvbm4pIHsKKwkJCWZzbS0+YV9jb25uID0gMDsKKwkJCWZzbS0+Yl9idXNfcmVxID0gMDsKKwkJCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKKwkJCWNpX290Z19hZGRfdGltZXIoY2ksIEJfU0VTU19WTEQpOworCQl9CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKKwkJaWYgKGludHJfc3RzICYgVVNCaV9TTEkpIHsKKwkJCSBmc20tPmJfYnVzX3N1c3BlbmQgPSAxOworCQkJLyoKKwkJCSAqIEluaXQgYSB0aW1lciB0byBrbm93IGhvdyBsb25nIHRoaXMgc3VzcGVuZAorCQkJICogd2lsbCBjb250aW5lLCBpZiB0aW1lIG91dCwgaW5kaWNhdGVzIEIgbm8gbG9uZ2VyCisJCQkgKiB3YW50cyB0byBiZSBob3N0IHJvbGUKKwkJCSAqLworCQkJIGNpX290Z19hZGRfdGltZXIoY2ksIEFfQklETF9BRElTKTsKKwkJfQorCisJCWlmIChpbnRyX3N0cyAmIFVTQmlfVVJJKQorCQkJY2lfb3RnX2RlbF90aW1lcihjaSwgQV9CSURMX0FESVMpOworCisJCWlmIChpbnRyX3N0cyAmIFVTQmlfUENJKSB7CisJCQlpZiAoZnNtLT5iX2J1c19zdXNwZW5kID09IDEpIHsKKwkJCQljaV9vdGdfZGVsX3RpbWVyKGNpLCBBX0JJRExfQURJUyk7CisJCQkJZnNtLT5iX2J1c19zdXNwZW5kID0gMDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CisJCWlmICgoaW50cl9zdHMgJiBVU0JpX1BDSSkgJiYgIXBvcnRfY29ubikgeworCQkJZnNtLT5iX2Nvbm4gPSAwOworCisJCQkvKiBpZiBnYWRnZXQgZHJpdmVyIGlzIGJpbmRlZCAqLworCQkJaWYgKGNpLT5kcml2ZXIpIHsKKwkJCQkvKiBBIGRldmljZSB0byBiZSBwZXJpcGhlcmFsIG1vZGUgKi8KKwkJCQljaS0+Z2FkZ2V0LmlzX2FfcGVyaXBoZXJhbCA9IDE7CisJCQl9CisJCQljaV9vdGdfcXVldWVfd29yayhjaSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQV9IT1NUOgorCQlpZiAoKGludHJfc3RzICYgVVNCaV9QQ0kpICYmICFwb3J0X2Nvbm4pIHsKKwkJCWZzbS0+Yl9jb25uID0gMDsKKwkJCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKKwkJaWYgKChpbnRyX3N0cyAmIFVTQmlfUENJKSAmJiBwb3J0X2Nvbm4pIHsKKwkJCWZzbS0+YV9jb25uID0gMTsKKwkJCWNpX290Z19xdWV1ZV93b3JrKGNpKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBjaV9vdGdfaXJxIC0gb3RnIGZzbSByZWxhdGVkIGlycSBoYW5kbGluZworICogYW5kIGFsc28gdXBkYXRlIG90ZyBmc20gdmFyaWFibGUgYnkgbW9uaXRvcmluZyB1c2IgaG9zdCBhbmQgdWRjCisgKiBzdGF0ZSBjaGFuZ2UgaW50ZXJydXB0cy4KKyAqIEBjaTogY2lfaGRyYworICovCitpcnFyZXR1cm5fdCBjaV9vdGdfZnNtX2lycShzdHJ1Y3QgY2lfaGRyYyAqY2kpCit7CisJaXJxcmV0dXJuX3QgcmV0dmFsID0gIElSUV9OT05FOworCXUzMiBvdGdzYywgb3RnX2ludF9zcmMgPSAwOworCXN0cnVjdCBvdGdfZnNtICpmc20gPSAmY2ktPmZzbTsKKworCW90Z3NjID0gaHdfcmVhZF9vdGdzYyhjaSwgfjApOworCW90Z19pbnRfc3JjID0gb3Rnc2MgJiBPVEdTQ19JTlRfU1RBVFVTX0JJVFMgJiAob3Rnc2MgPj4gOCk7CisJZnNtLT5pZCA9IChvdGdzYyAmIE9UR1NDX0lEKSA/IDEgOiAwOworCisJaWYgKG90Z19pbnRfc3JjKSB7CisJCWlmIChvdGdfaW50X3NyYyAmIE9UR1NDXzFNU0lTKSB7CisJCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfMU1TSVMsIE9UR1NDXzFNU0lTKTsKKwkJCXJldHZhbCA9IGNpX290Z190aWNrX3RpbWVyKGNpKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfSBlbHNlIGlmIChvdGdfaW50X3NyYyAmIE9UR1NDX0RQSVMpIHsKKwkJCWh3X3dyaXRlX290Z3NjKGNpLCBPVEdTQ19EUElTLCBPVEdTQ19EUElTKTsKKwkJCWZzbS0+YV9zcnBfZGV0ID0gMTsKKwkJCWZzbS0+YV9idXNfZHJvcCA9IDA7CisJCX0gZWxzZSBpZiAob3RnX2ludF9zcmMgJiBPVEdTQ19JRElTKSB7CisJCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfSURJUywgT1RHU0NfSURJUyk7CisJCQlpZiAoZnNtLT5pZCA9PSAwKSB7CisJCQkJZnNtLT5hX2J1c19kcm9wID0gMDsKKwkJCQlmc20tPmFfYnVzX3JlcSA9IDE7CisJCQkJY2ktPmlkX2V2ZW50ID0gdHJ1ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChvdGdfaW50X3NyYyAmIE9UR1NDX0JTVklTKSB7CisJCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfQlNWSVMsIE9UR1NDX0JTVklTKTsKKwkJCWlmIChvdGdzYyAmIE9UR1NDX0JTVikgeworCQkJCWZzbS0+Yl9zZXNzX3ZsZCA9IDE7CisJCQkJY2lfb3RnX2RlbF90aW1lcihjaSwgQl9TU0VORF9TUlApOworCQkJCWNpX290Z19kZWxfdGltZXIoY2ksIEJfU1JQX0ZBSUwpOworCQkJCWZzbS0+Yl9zc2VuZF9zcnAgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlmc20tPmJfc2Vzc192bGQgPSAwOworCQkJCWlmIChmc20tPmlkKQorCQkJCQljaV9vdGdfYWRkX3RpbWVyKGNpLCBCX1NTRU5EX1NSUCk7CisJCQl9CisJCX0gZWxzZSBpZiAob3RnX2ludF9zcmMgJiBPVEdTQ19BVlZJUykgeworCQkJaHdfd3JpdGVfb3Rnc2MoY2ksIE9UR1NDX0FWVklTLCBPVEdTQ19BVlZJUyk7CisJCQlpZiAob3Rnc2MgJiBPVEdTQ19BVlYpIHsKKwkJCQlmc20tPmFfdmJ1c192bGQgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlmc20tPmFfdmJ1c192bGQgPSAwOworCQkJCWZzbS0+Yl9jb25uID0gMDsKKwkJCX0KKwkJfQorCQljaV9vdGdfcXVldWVfd29yayhjaSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwljaV9vdGdfZnNtX2V2ZW50KGNpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgY2lfaGRyY19vdGdfZnNtX3N0YXJ0KHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwljaV9vdGdfcXVldWVfd29yayhjaSk7Cit9CisKK2ludCBjaV9oZHJjX290Z19mc21faW5pdChzdHJ1Y3QgY2lfaGRyYyAqY2kpCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHVzYl9vdGcgKm90ZzsKKworCW90ZyA9IGRldm1fa3phbGxvYyhjaS0+ZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCB1c2Jfb3RnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvdGcpIHsKKwkJZGV2X2VycihjaS0+ZGV2LAorCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHVzYl9vdGcgc3RydWN0dXJlIGZvciBjaSBoZHJjIG90ZyFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlvdGctPnBoeSA9IGNpLT50cmFuc2NlaXZlcjsKKwlvdGctPmdhZGdldCA9ICZjaS0+Z2FkZ2V0OworCWNpLT5mc20ub3RnID0gb3RnOworCWNpLT50cmFuc2NlaXZlci0+b3RnID0gY2ktPmZzbS5vdGc7CisJY2ktPmZzbS5wb3dlcl91cCA9IDE7CisJY2ktPmZzbS5pZCA9IGh3X3JlYWRfb3Rnc2MoY2ksIE9UR1NDX0lEKSA/IDEgOiAwOworCWNpLT50cmFuc2NlaXZlci0+c3RhdGUgPSBPVEdfU1RBVEVfVU5ERUZJTkVEOworCWNpLT5mc20ub3BzID0gJmNpX290Z19vcHM7CisKKwltdXRleF9pbml0KCZjaS0+ZnNtLmxvY2spOworCisJY2ktPmZzbV90aW1lciA9IGRldm1fa3phbGxvYyhjaS0+ZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBjaV9vdGdfZnNtX3RpbWVyX2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNpLT5mc21fdGltZXIpIHsKKwkJZGV2X2VycihjaS0+ZGV2LAorCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHRpbWVyIHN0cnVjdHVyZSBmb3IgY2kgaGRyYyBvdGchXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmNpLT5mc21fdGltZXItPmFjdGl2ZV90aW1lcnMpOworCXJldHZhbCA9IGNpX290Z19pbml0X3RpbWVycyhjaSk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKGNpLT5kZXYsICJDb3VsZG4ndCBpbml0IE9URyB0aW1lcnNcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2ktPmRldi0+a29iaiwgJmlucHV0c19hdHRyX2dyb3VwKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZGJnKGNpLT5kZXYsCisJCQkiQ2FuJ3QgcmVnaXN0ZXIgc3lzZnMgYXR0ciBncm91cDogJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogRW5hYmxlIEEgdmJ1cyB2YWxpZCBpcnEgKi8KKwlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfQVZWSUUsIE9UR1NDX0FWVklFKTsKKworCWlmIChjaS0+ZnNtLmlkKSB7CisJCWNpLT5mc20uYl9zc2VuZF9zcnAgPQorCQkJaHdfcmVhZF9vdGdzYyhjaSwgT1RHU0NfQlNWKSA/IDAgOiAxOworCQljaS0+ZnNtLmJfc2Vzc192bGQgPQorCQkJaHdfcmVhZF9vdGdzYyhjaSwgT1RHU0NfQlNWKSA/IDEgOiAwOworCQkvKiBFbmFibGUgQlNWIGlycSAqLworCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfQlNWSUUsIE9UR1NDX0JTVklFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjaV9oZHJjX290Z19mc21fcmVtb3ZlKHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNpLT5kZXYtPmtvYmosICZpbnB1dHNfYXR0cl9ncm91cCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGdfZnNtLmggYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9vdGdfZnNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMDg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL290Z19mc20uaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIEF1dGhvcjogSnVuIExpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fRFJJVkVSU19VU0JfQ0hJUElERUFfT1RHX0ZTTV9ICisjZGVmaW5lIF9fRFJJVkVSU19VU0JfQ0hJUElERUFfT1RHX0ZTTV9ICisKKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLWZzbS5oPgorCisvKgorICogIEEtREVWSUNFIHRpbWluZyAgY29uc3RhbnRzCisgKi8KKworLyogV2FpdCBmb3IgVkJVUyBSaXNlICAqLworI2RlZmluZSBUQV9XQUlUX1ZSSVNFICAgICAgICAoMTAwKQkvKiBhX3dhaXRfdnJpc2U6IHNlY3Rpb24gNy4xLjIKKwkJCQkJICogYV93YWl0X3ZyaXNlX3Rtcjogc2VjdGlvbiA3LjQuNS4xCisJCQkJCSAqIFRBX1ZCVVNfUklTRSA8PSAxMDBtcywgc2VjdGlvbiA0LjQKKwkJCQkJICogVGFibGUgNC0xOiBFbGVjdHJpY2FsIENoYXJhY3RlcmlzdGljcworCQkJCQkgKiAtPkRDIEVsZWN0cmljYWwgVGltaW5nCisJCQkJCSAqLworLyogV2FpdCBmb3IgVkJVUyBGYWxsICAqLworI2RlZmluZSBUQV9XQUlUX1ZGQUxMICAgICAgICAoMTAwMCkJLyogYV93YWl0X3ZmYWxsOiBzZWN0aW9uIDcuMS43CisJCQkJCSAqIGFfd2FpdF92ZmFsbF90bXI6IHNlY3Rpb246IDcuNC41LjIKKwkJCQkJICovCisvKiBXYWl0IGZvciBCLUNvbm5lY3QgKi8KKyNkZWZpbmUgVEFfV0FJVF9CQ09OICAgICAgICAgKDEwMDAwKQkvKiBhX3dhaXRfYmNvbjogc2VjdGlvbiA3LjEuMworCQkJCQkgKiBUQV9XQUlUX0JDT046IHNob3VsZCBiZSBiZXR3ZWVuIDExMDAKKwkJCQkJICogYW5kIDMwMDAwIG1zLCBzZWN0aW9uIDUuNSwgVGFibGUgNS0xCisJCQkJCSAqLworLyogQS1JZGxlIHRvIEItRGlzY29ubmVjdCAqLworI2RlZmluZSBUQV9BSURMX0JESVMgICAgICAgICAoNTAwMCkJLyogYV9zdXNwZW5kIG1pbiAyMDAgbXMsIHNlY3Rpb24gNS4yLjEKKwkJCQkJICogVEFfQUlETF9CRElTOiBzZWN0aW9uIDUuNSwgVGFibGUgNS0xCisJCQkJCSAqLworLyogQi1JZGxlIHRvIEEtRGlzY29ubmVjdCAqLworI2RlZmluZSBUQV9CSURMX0FESVMgICAgICAgICAoNTAwKQkvKiBUQV9CSURMX0FESVM6IHNlY3Rpb24gNS4yLjEKKwkJCQkJICogNTAwbXMgaXMgdXNlZCBmb3IgQiBzd2l0Y2ggdG8gaG9zdAorCQkJCQkgKiBmb3Igc2FmZQorCQkJCQkgKi8KKworLyoKKyAqIEItZGV2aWNlIHRpbWluZyBjb25zdGFudHMKKyAqLworCisvKiBEYXRhLUxpbmUgUHVsc2UgVGltZSovCisjZGVmaW5lIFRCX0RBVEFfUExTICAgICAgICAgICgxMCkJLyogYl9zcnBfaW5pdCxjb250aW51ZSA1fjEwbXMKKwkJCQkJICogc2VjdGlvbjo1LjEuMworCQkJCQkgKi8KKy8qIFNSUCBGYWlsIFRpbWUgICovCisjZGVmaW5lIFRCX1NSUF9GQUlMICAgICAgICAgICg2MDAwKQkvKiBiX3NycF9pbml0LGZhaWwgdGltZSA1fjZzCisJCQkJCSAqIHNlY3Rpb246NS4xLjYKKwkJCQkJICovCisvKiBBLVNFMCB0byBCLVJlc2V0ICAqLworI2RlZmluZSBUQl9BU0UwX0JSU1QgICAgICAgICAoMTU1KQkvKiBtaW5pbXVtIDE1NSBtcywgc2VjdGlvbjo1LjMuMSAqLworLyogU0UwIFRpbWUgQmVmb3JlIFNSUCAqLworI2RlZmluZSBUQl9TRTBfU1JQICAgICAgICAgICAoMTAwMCkJLyogYl9pZGxlLG1pbmltdW0gMXMsIHNlY3Rpb246NS4xLjIgKi8KKy8qIFNTRU5EIHRpbWUgYmVmb3JlIFNSUCAqLworI2RlZmluZSBUQl9TU0VORF9TUlAgICAgICAgICAoMTUwMCkJLyogbWluaW11bSAxLjUgc2VjLCBzZWN0aW9uOjUuMS4yICovCisKKyNkZWZpbmUgVEJfU0VTU19WTEQgICAgICAgICAgKDEwMDApCisKK2VudW0gY2lfb3RnX2ZzbV90aW1lcl9pbmRleCB7CisJLyoKKwkgKiBDSSBzcGVjaWZpYyB0aW1lcnMsIHN0YXJ0IGZyb20gdGhlIGVuZAorCSAqIG9mIHN0YW5kYXJkIGFuZCBhdXhpbGlhcnkgT1RHIHRpbWVycworCSAqLworCUJfREFUQV9QTFMgPSBOVU1fT1RHX0ZTTV9USU1FUlMsCisJQl9TU0VORF9TUlAsCisJQl9TRVNTX1ZMRCwKKworCU5VTV9DSV9PVEdfRlNNX1RJTUVSUywKK307CisKK3N0cnVjdCBjaV9vdGdfZnNtX3RpbWVyIHsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXM7ICAvKiBOdW1iZXIgb2YgY291bnQgaW5jcmVhc2UgdG8gdGltZW91dCAqLworCXVuc2lnbmVkIGxvbmcgY291bnQ7ICAgIC8qIFRpY2sgY291bnRlciAqLworCXZvaWQgKCpmdW5jdGlvbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKTsgICAgICAgIC8qIFRpbWVvdXQgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nIGRhdGE7ICAgICAvKiBEYXRhIHBhc3NlZCB0byBmdW5jdGlvbiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBjaV9vdGdfZnNtX3RpbWVyX2xpc3QgeworCXN0cnVjdCBjaV9vdGdfZnNtX3RpbWVyICp0aW1lcl9saXN0W05VTV9DSV9PVEdfRlNNX1RJTUVSU107CisJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdGltZXJzOworfTsKKworI2lmZGVmIENPTkZJR19VU0JfT1RHX0ZTTQorCitpbnQgY2lfaGRyY19vdGdfZnNtX2luaXQoc3RydWN0IGNpX2hkcmMgKmNpKTsKK2ludCBjaV9vdGdfZnNtX3dvcmsoc3RydWN0IGNpX2hkcmMgKmNpKTsKK2lycXJldHVybl90IGNpX290Z19mc21faXJxKHN0cnVjdCBjaV9oZHJjICpjaSk7Cit2b2lkIGNpX2hkcmNfb3RnX2ZzbV9zdGFydChzdHJ1Y3QgY2lfaGRyYyAqY2kpOwordm9pZCBjaV9oZHJjX290Z19mc21fcmVtb3ZlKHN0cnVjdCBjaV9oZHJjICpjaSk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGNpX2hkcmNfb3RnX2ZzbV9pbml0KHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2lfb3RnX2ZzbV93b3JrKHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwlyZXR1cm4gLUVOWElPOworfQorCitzdGF0aWMgaW5saW5lIGlycXJldHVybl90IGNpX290Z19mc21faXJxKHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaV9oZHJjX290Z19mc21fc3RhcnQoc3RydWN0IGNpX2hkcmMgKmNpKQoreworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaV9oZHJjX290Z19mc21fcmVtb3ZlKHN0cnVjdCBjaV9oZHJjICpjaSkKK3sKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fRFJJVkVSU19VU0JfQ0hJUElERUFfT1RHX0ZTTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jCmluZGV4IDc3MzljNjQuLjY5NDI1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy1mc20uaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2hpcGlkZWEuaD4KIAogI2luY2x1ZGUgImNpLmgiCkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSAiYml0cy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAib3RnLmgiCisjaW5jbHVkZSAib3RnX2ZzbS5oIgogCiAvKiBjb250cm9sIGVuZHBvaW50IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC0yNDIsMjYgKzI0NCw2IEBACiB9CiAKIC8qKgotICogaHdfcmVhZF9pbnRyX2VuYWJsZTogcmV0dXJucyBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJlZ2lzdGVyIGRhdGEKLSAqLwotc3RhdGljIHUzMiBod19yZWFkX2ludHJfZW5hYmxlKHN0cnVjdCBjaV9oZHJjICpjaSkKLXsKLQlyZXR1cm4gaHdfcmVhZChjaSwgT1BfVVNCSU5UUiwgfjApOwotfQotCi0vKioKLSAqIGh3X3JlYWRfaW50cl9zdGF0dXM6IHJldHVybnMgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyByZWdpc3RlciBkYXRhCi0gKi8KLXN0YXRpYyB1MzIgaHdfcmVhZF9pbnRyX3N0YXR1cyhzdHJ1Y3QgY2lfaGRyYyAqY2kpCi17Ci0JcmV0dXJuIGh3X3JlYWQoY2ksIE9QX1VTQlNUUywgfjApOwotfQotCi0vKioKICAqIGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlOiB0ZXN0ICYgY2xlYXIgY29tcGxldGUgc3RhdHVzIChleGVjdXRlIHdpdGhvdXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRpb24pCiAgKiBAbjogZW5kcG9pbnQgbnVtYmVyCkBAIC03MjcsNiArNzA5LDggQEAKIAlpZiAoY2ktPnN0YXR1cyA9PSBOVUxMKQogCQlyZXR2YWwgPSAtRU5PTUVNOwogCisJdXNiX2dhZGdldF9zZXRfc3RhdGUoJmNpLT5nYWRnZXQsIFVTQl9TVEFURV9ERUZBVUxUKTsKKwogZG9uZToKIAlzcGluX2xvY2soJmNpLT5sb2NrKTsKIApAQCAtODQxLDcgKzgyNSw2IEBACiAJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spID09IFVTQl9SRUNJUF9ERVZJQ0UpIHsKIAkJLyogQXNzdW1lIHRoYXQgZGV2aWNlIGlzIGJ1cyBwb3dlcmVkIGZvciBub3cuICovCiAJCSoodTE2ICopcmVxLT5idWYgPSBjaS0+cmVtb3RlX3dha2V1cCA8PCAxOwotCQlyZXR2YWwgPSAwOwogCX0gZWxzZSBpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgXAogCQkgICA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKIAkJZGlyID0gKGxlMTZfdG9fY3B1KHNldHVwLT53SW5kZXgpICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA/CkBAIC04ODMsNiArODY2LDggQEAKIAlpZiAoY2ktPnNldGFkZHIpIHsKIAkJaHdfdXNiX3NldF9hZGRyZXNzKGNpLCBjaS0+YWRkcmVzcyk7CiAJCWNpLT5zZXRhZGRyID0gZmFsc2U7CisJCWlmIChjaS0+YWRkcmVzcykKKwkJCXVzYl9nYWRnZXRfc2V0X3N0YXRlKCZjaS0+Z2FkZ2V0LCBVU0JfU1RBVEVfQUREUkVTUyk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNpLT5sb2NrLCBmbGFncyk7CkBAIC0xMDcyLDYgKzEwNTcsMTQgQEAKIAkJCQlkZWZhdWx0OgogCQkJCQlicmVhazsKIAkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFOgorCQkJCWlmIChjaV9vdGdfaXNfZnNtX21vZGUoY2kpKSB7CisJCQkJCWNpLT5nYWRnZXQuYl9obnBfZW5hYmxlID0gMTsKKwkJCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSgKKwkJCQkJCQljaSk7CisJCQkJfQorCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlnb3RvIGRlbGVnYXRlOwogCQkJfQpAQCAtMTQ3Nyw3ICsxNDcwLDcgQEAKIAkJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJl9nYWRnZXQtPmRldik7CiAJCQlod19kZXZpY2VfcmVzZXQoY2ksIFVTQk1PREVfQ01fREMpOwogCQkJaHdfZGV2aWNlX3N0YXRlKGNpLCBjaS0+ZXAwb3V0LT5xaC5kbWEpOwotCQkJZGV2X2RiZyhjaS0+ZGV2LCAiQ29ubmVjdGVkIHRvIGhvc3RcbiIpOworCQkJdXNiX2dhZGdldF9zZXRfc3RhdGUoX2dhZGdldCwgVVNCX1NUQVRFX1BPV0VSRUQpOwogCQl9IGVsc2UgewogCQkJaWYgKGNpLT5kcml2ZXIpCiAJCQkJY2ktPmRyaXZlci0+ZGlzY29ubmVjdCgmY2ktPmdhZGdldCk7CkBAIC0xNDg3LDcgKzE0ODAsNyBAQAogCQkJCUNJX0hEUkNfQ09OVFJPTExFUl9TVE9QUEVEX0VWRU5UKTsKIAkJCV9nYWRnZXRfc3RvcF9hY3Rpdml0eSgmY2ktPmdhZGdldCk7CiAJCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZfZ2FkZ2V0LT5kZXYpOwotCQkJZGV2X2RiZyhjaS0+ZGV2LCAiRGlzY29ubmVjdGVkIGZyb20gaG9zdFxuIik7CisJCQl1c2JfZ2FkZ2V0X3NldF9zdGF0ZShfZ2FkZ2V0LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwogCQl9CiAJfQogCkBAIC0xNjU1LDYgKzE2NDgsMTMgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAogCWNpLT5kcml2ZXIgPSBkcml2ZXI7CisKKwkvKiBTdGFydCBvdGcgZnNtIGZvciBCLWRldmljZSAqLworCWlmIChjaV9vdGdfaXNfZnNtX21vZGUoY2kpICYmIGNpLT5mc20uaWQpIHsKKwkJY2lfaGRyY19vdGdfZnNtX3N0YXJ0KGNpKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZjaS0+Z2FkZ2V0LmRldik7CiAJaWYgKGNpLT52YnVzX2FjdGl2ZSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2ktPmxvY2ssIGZsYWdzKTsKQEAgLTE3NTMsNiArMTc1Myw4IEBACiAJCQkJY2ktPnN1c3BlbmRlZCA9IDE7CiAJCQkJc3Bpbl91bmxvY2soJmNpLT5sb2NrKTsKIAkJCQljaS0+ZHJpdmVyLT5zdXNwZW5kKCZjaS0+Z2FkZ2V0KTsKKwkJCQl1c2JfZ2FkZ2V0X3NldF9zdGF0ZSgmY2ktPmdhZGdldCwKKwkJCQkJCVVTQl9TVEFURV9TVVNQRU5ERUQpOwogCQkJCXNwaW5fbG9jaygmY2ktPmxvY2spOwogCQkJfQogCQl9CkBAIC0xNzc5LDcgKzE3ODEsNyBAQAogCWNpLT5nYWRnZXQub3BzICAgICAgICAgID0gJnVzYl9nYWRnZXRfb3BzOwogCWNpLT5nYWRnZXQuc3BlZWQgICAgICAgID0gVVNCX1NQRUVEX1VOS05PV047CiAJY2ktPmdhZGdldC5tYXhfc3BlZWQgICAgPSBVU0JfU1BFRURfSElHSDsKLQljaS0+Z2FkZ2V0LmlzX290ZyAgICAgICA9IDA7CisJY2ktPmdhZGdldC5pc19vdGcgICAgICAgPSBjaS0+aXNfb3RnID8gMSA6IDA7CiAJY2ktPmdhZGdldC5uYW1lICAgICAgICAgPSBjaS0+cGxhdGRhdGEtPm5hbWU7CiAKIAlJTklUX0xJU1RfSEVBRCgmY2ktPmdhZGdldC5lcF9saXN0KTsKQEAgLTE4NDMsMjEgKzE4NDUsMjIgQEAKIAogc3RhdGljIGludCB1ZGNfaWRfc3dpdGNoX2Zvcl9kZXZpY2Uoc3RydWN0IGNpX2hkcmMgKmNpKQogewotCWlmIChjaS0+aXNfb3RnKSB7Ci0JCWNpX2NsZWFyX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0JTVklTKTsKLQkJY2lfZW5hYmxlX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0JTVklFKTsKLQl9CisJaWYgKGNpLT5pc19vdGcpCisJCS8qIENsZWFyIGFuZCBlbmFibGUgQlNWIGlycSAqLworCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfQlNWSVMgfCBPVEdTQ19CU1ZJRSwKKwkJCQkJT1RHU0NfQlNWSVMgfCBPVEdTQ19CU1ZJRSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdWRjX2lkX3N3aXRjaF9mb3JfaG9zdChzdHJ1Y3QgY2lfaGRyYyAqY2kpCiB7Ci0JaWYgKGNpLT5pc19vdGcpIHsKLQkJLyogaG9zdCBkb2Vzbid0IGNhcmUgQl9TRVNTSU9OX1ZBTElEIGV2ZW50ICovCi0JCWNpX2NsZWFyX290Z19pbnRlcnJ1cHQoY2ksIE9UR1NDX0JTVklTKTsKLQkJY2lfZGlzYWJsZV9vdGdfaW50ZXJydXB0KGNpLCBPVEdTQ19CU1ZJRSk7Ci0JfQorCS8qCisJICogaG9zdCBkb2Vzbid0IGNhcmUgQl9TRVNTSU9OX1ZBTElEIGV2ZW50CisJICogc28gY2xlYXIgYW5kIGRpc2JhbGUgQlNWIGlycQorCSAqLworCWlmIChjaS0+aXNfb3RnKQorCQlod193cml0ZV9vdGdzYyhjaSwgT1RHU0NfQlNWSUUgfCBPVEdTQ19CU1ZJUywgT1RHU0NfQlNWSVMpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL3VzYm1pc2NfaW14LmMgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS91c2JtaXNjX2lteC5jCmluZGV4IGNkMDYxYWIuLjg1MjkzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL3VzYm1pc2NfaW14LmMKKysrIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvdXNibWlzY19pbXguYwpAQCAtMjEsMTYgKzIxLDM5IEBACiAjZGVmaW5lIE1YMjVfVVNCX1BIWV9DVFJMX09GRlNFVAkweDA4CiAjZGVmaW5lIE1YMjVfQk1fRVhURVJOQUxfVkJVU19ESVZJREVSCUJJVCgyMykKIAorI2RlZmluZSBNWDI1X0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkJKDIgPDwgMCkKKyNkZWZpbmUgTVgyNV9FSENJX0lOVEVSRkFDRV9ESUZGX1VOSQkoMCA8PCAwKQorI2RlZmluZSBNWDI1X0VIQ0lfSU5URVJGQUNFX01BU0sJKDB4ZikKKworI2RlZmluZSBNWDI1X09UR19TSUNfU0hJRlQJCTI5CisjZGVmaW5lIE1YMjVfT1RHX1NJQ19NQVNLCQkoMHgzIDw8IE1YMjVfT1RHX1NJQ19TSElGVCkKKyNkZWZpbmUgTVgyNV9PVEdfUE1fQklUCQkJQklUKDI0KQorI2RlZmluZSBNWDI1X09UR19QUF9CSVQJCQlCSVQoMTEpCisjZGVmaW5lIE1YMjVfT1RHX09DUE9MX0JJVAkJQklUKDMpCisKKyNkZWZpbmUgTVgyNV9IMV9TSUNfU0hJRlQJCTIxCisjZGVmaW5lIE1YMjVfSDFfU0lDX01BU0sJCSgweDMgPDwgTVgyNV9IMV9TSUNfU0hJRlQpCisjZGVmaW5lIE1YMjVfSDFfUFBfQklUCQkJQklUKDE4KQorI2RlZmluZSBNWDI1X0gxX1BNX0JJVAkJCUJJVCgxNikKKyNkZWZpbmUgTVgyNV9IMV9JUFBVRV9VUF9CSVQJCUJJVCg3KQorI2RlZmluZSBNWDI1X0gxX0lQUFVFX0RPV05fQklUCQlCSVQoNikKKyNkZWZpbmUgTVgyNV9IMV9UTExfQklUCQkJQklUKDUpCisjZGVmaW5lIE1YMjVfSDFfVVNCVEVfQklUCQlCSVQoNCkKKyNkZWZpbmUgTVgyNV9IMV9PQ1BPTF9CSVQJCUJJVCgyKQorCiAjZGVmaW5lIE1YMjdfSDFfUE1fQklUCQkJQklUKDgpCiAjZGVmaW5lIE1YMjdfSDJfUE1fQklUCQkJQklUKDE2KQogI2RlZmluZSBNWDI3X09UR19QTV9CSVQJCQlCSVQoMjQpCiAKICNkZWZpbmUgTVg1M19VU0JfT1RHX1BIWV9DVFJMXzBfT0ZGU0VUCTB4MDgKKyNkZWZpbmUgTVg1M19VU0JfT1RHX1BIWV9DVFJMXzFfT0ZGU0VUCTB4MGMKICNkZWZpbmUgTVg1M19VU0JfVUgyX0NUUkxfT0ZGU0VUCTB4MTQKICNkZWZpbmUgTVg1M19VU0JfVUgzX0NUUkxfT0ZGU0VUCTB4MTgKICNkZWZpbmUgTVg1M19CTV9PVkVSX0NVUl9ESVNfSDEJCUJJVCg1KQogI2RlZmluZSBNWDUzX0JNX09WRVJfQ1VSX0RJU19PVEcJQklUKDgpCiAjZGVmaW5lIE1YNTNfQk1fT1ZFUl9DVVJfRElTX1VIeAlCSVQoMzApCisjZGVmaW5lIE1YNTNfVVNCX1BIWUNUUkwxX1BMTERJVl9NQVNLCTB4MworI2RlZmluZSBNWDUzX1VTQl9QTExfRElWXzI0X01IWgkJMHgwMQogCiAjZGVmaW5lIE1YNl9CTV9PVkVSX0NVUl9ESVMJCUJJVCg3KQogCkBAIC01MCw2ICs3MywzOSBAQAogCiBzdGF0aWMgc3RydWN0IGlteF91c2JtaXNjICp1c2JtaXNjOwogCitzdGF0aWMgaW50IHVzYm1pc2NfaW14MjVfaW5pdChzdHJ1Y3QgaW14X3VzYm1pc2NfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWwgPSAwOworCisJaWYgKGRhdGEtPmluZGV4ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNibWlzYy0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAoZGF0YS0+aW5kZXgpIHsKKwljYXNlIDA6CisJCXZhbCA9IHJlYWRsKHVzYm1pc2MtPmJhc2UpOworCQl2YWwgJj0gfihNWDI1X09UR19TSUNfTUFTSyB8IE1YMjVfT1RHX1BQX0JJVCk7CisJCXZhbCB8PSAoTVgyNV9FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSAmIE1YMjVfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgyNV9PVEdfU0lDX1NISUZUOworCQl2YWwgfD0gKE1YMjVfT1RHX1BNX0JJVCB8IE1YMjVfT1RHX09DUE9MX0JJVCk7CisJCXdyaXRlbCh2YWwsIHVzYm1pc2MtPmJhc2UpOworCQlicmVhazsKKwljYXNlIDE6CisJCXZhbCA9IHJlYWRsKHVzYm1pc2MtPmJhc2UpOworCQl2YWwgJj0gfihNWDI1X0gxX1NJQ19NQVNLIHwgTVgyNV9IMV9QUF9CSVQgfCAgTVgyNV9IMV9JUFBVRV9VUF9CSVQpOworCQl2YWwgfD0gKE1YMjVfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSAmIE1YMjVfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgyNV9IMV9TSUNfU0hJRlQ7CisJCXZhbCB8PSAoTVgyNV9IMV9QTV9CSVQgfCBNWDI1X0gxX09DUE9MX0JJVCB8IE1YMjVfSDFfVExMX0JJVCB8CisJCQlNWDI1X0gxX1VTQlRFX0JJVCB8IE1YMjVfSDFfSVBQVUVfRE9XTl9CSVQpOworCisJCXdyaXRlbCh2YWwsIHVzYm1pc2MtPmJhc2UpOworCisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JtaXNjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB1c2JtaXNjX2lteDI1X3Bvc3Qoc3RydWN0IGlteF91c2JtaXNjX2RhdGEgKmRhdGEpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWc7CkBAIC0xMTEsNiArMTY3LDEzIEBACiAJaWYgKGRhdGEtPmluZGV4ID4gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBTZWxlY3QgYSAyNCBNSHogcmVmZXJlbmNlIGNsb2NrIGZvciB0aGUgUEhZICAqLworCXJlZyA9IHVzYm1pc2MtPmJhc2UgKyBNWDUzX1VTQl9PVEdfUEhZX0NUUkxfMV9PRkZTRVQ7CisJdmFsID0gcmVhZGwocmVnKTsKKwl2YWwgJj0gfk1YNTNfVVNCX1BIWUNUUkwxX1BMTERJVl9NQVNLOworCXZhbCB8PSBNWDUzX1VTQl9QTExfRElWXzI0X01IWjsKKwl3cml0ZWwodmFsLCB1c2JtaXNjLT5iYXNlICsgTVg1M19VU0JfT1RHX1BIWV9DVFJMXzFfT0ZGU0VUKTsKKwogCWlmIChkYXRhLT5kaXNhYmxlX29jKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JtaXNjLT5sb2NrLCBmbGFncyk7CiAJCXN3aXRjaCAoZGF0YS0+aW5kZXgpIHsKQEAgLTE1OSw2ICsyMjIsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYm1pc2Nfb3BzIGlteDI1X3VzYm1pc2Nfb3BzID0geworCS5pbml0ID0gdXNibWlzY19pbXgyNV9pbml0LAogCS5wb3N0ID0gdXNibWlzY19pbXgyNV9wb3N0LAogfTsKIApAQCAtMjAwLDYgKzI2NCwxMCBAQAogCQkuZGF0YSA9ICZpbXgyNV91c2JtaXNjX29wcywKIAl9LAogCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLGlteDM1LXVzYm1pc2MiLAorCQkuZGF0YSA9ICZpbXgyNV91c2JtaXNjX29wcywKKwl9LAorCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLGlteDI3LXVzYm1pc2MiLAogCQkuZGF0YSA9ICZpbXgyN191c2JtaXNjX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IDkwNGVmYjYuLmU5MzRlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTEyMiwxMyArMTIyLDIzIEBACiBzdGF0aWMgaW50IGFjbV9jdHJsX21zZyhzdHJ1Y3QgYWNtICphY20sIGludCByZXF1ZXN0LCBpbnQgdmFsdWUsCiAJCQkJCQkJdm9pZCAqYnVmLCBpbnQgbGVuKQogewotCWludCByZXR2YWwgPSB1c2JfY29udHJvbF9tc2coYWNtLT5kZXYsIHVzYl9zbmRjdHJscGlwZShhY20tPmRldiwgMCksCisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coYWNtLT5kZXYsIHVzYl9zbmRjdHJscGlwZShhY20tPmRldiwgMCksCiAJCXJlcXVlc3QsIFVTQl9SVF9BQ00sIHZhbHVlLAogCQlhY20tPmNvbnRyb2wtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAogCQlidWYsIGxlbiwgNTAwMCk7CisKIAlkZXZfZGJnKCZhY20tPmNvbnRyb2wtPmRldiwKIAkJCSIlcyAtIHJxIDB4JTAyeCwgdmFsICUjeCwgbGVuICUjeCwgcmVzdWx0ICVkXG4iLAogCQkJX19mdW5jX18sIHJlcXVlc3QsIHZhbHVlLCBsZW4sIHJldHZhbCk7CisKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKKwogCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKIH0KIApAQCAtNDA2LDE5ICs0MTYsMjEgQEAKIAkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICIlcyAtIGRpc2Nvbm5lY3RlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQotCXVzYl9tYXJrX2xhc3RfYnVzeShhY20tPmRldik7CiAKIAlpZiAodXJiLT5zdGF0dXMpIHsKIAkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICIlcyAtIG5vbi16ZXJvIHVyYiBzdGF0dXM6ICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9CisKKwl1c2JfbWFya19sYXN0X2J1c3koYWNtLT5kZXYpOworCiAJYWNtX3Byb2Nlc3NfcmVhZF91cmIoYWNtLCB1cmIpOwogCiAJLyogdGhyb3R0bGUgZGV2aWNlIGlmIHJlcXVlc3RlZCBieSB0dHkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIAlhY20tPnRocm90dGxlZCA9IGFjbS0+dGhyb3R0bGVfcmVxOwotCWlmICghYWNtLT50aHJvdHRsZWQgJiYgIWFjbS0+c3VzcF9jb3VudCkgeworCWlmICghYWNtLT50aHJvdHRsZWQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJYWNtX3N1Ym1pdF9yZWFkX3VyYihhY20sIHJiLT5pbmRleCwgR0ZQX0FUT01JQyk7CiAJfSBlbHNlIHsKQEAgLTQ5MiwxMCArNTA0LDMwIEBACiAJcmV0dXJuIHR0eV9wb3J0X29wZW4oJmFjbS0+cG9ydCwgdHR5LCBmaWxwKTsKIH0KIAorc3RhdGljIHZvaWQgYWNtX3BvcnRfZHRyX3J0cyhzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIGludCByYWlzZSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGFjbSwgcG9ydCk7CisJaW50IHZhbDsKKwlpbnQgcmVzOworCisJaWYgKHJhaXNlKQorCQl2YWwgPSBBQ01fQ1RSTF9EVFIgfCBBQ01fQ1RSTF9SVFM7CisJZWxzZQorCQl2YWwgPSAwOworCisJLyogRklYTUU6IGFkZCBtaXNzaW5nIGN0cmxvdXQgbG9ja2luZyB0aHJvdWdob3V0IGRyaXZlciAqLworCWFjbS0+Y3RybG91dCA9IHZhbDsKKworCXJlcyA9IGFjbV9zZXRfY29udHJvbChhY20sIHZhbCk7CisJaWYgKHJlcyAmJiAoYWNtLT5jdHJsX2NhcHMgJiBVU0JfQ0RDX0NBUF9MSU5FKSkKKwkJZGV2X2VycigmYWNtLT5jb250cm9sLT5kZXYsICJmYWlsZWQgdG8gc2V0IGR0ci9ydHNcbiIpOworfQorCiBzdGF0aWMgaW50IGFjbV9wb3J0X2FjdGl2YXRlKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgYWNtICphY20gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGFjbSwgcG9ydCk7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJaW50IGk7CiAKIAlkZXZfZGJnKCZhY20tPmNvbnRyb2wtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTUxNSwyMiArNTQ3LDEzIEBACiAJYWNtLT5jb250cm9sLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKIAogCWFjbS0+Y3RybHVyYi0+ZGV2ID0gYWNtLT5kZXY7Ci0JaWYgKHVzYl9zdWJtaXRfdXJiKGFjbS0+Y3RybHVyYiwgR0ZQX0tFUk5FTCkpIHsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihhY20tPmN0cmx1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycigmYWNtLT5jb250cm9sLT5kZXYsCiAJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYihjdHJsIGlycSkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogCQlnb3RvIGVycm9yX3N1Ym1pdF91cmI7CiAJfQogCi0JYWNtLT5jdHJsb3V0ID0gQUNNX0NUUkxfRFRSIHwgQUNNX0NUUkxfUlRTOwotCWlmIChhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQpIDwgMCAmJgotCSAgICAoYWNtLT5jdHJsX2NhcHMgJiBVU0JfQ0RDX0NBUF9MSU5FKSkgewotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKLQkJZ290byBlcnJvcl9zZXRfY29udHJvbDsKLQl9Ci0KLQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKLQogCS8qCiAJICogVW50aHJvdHRsZSBkZXZpY2UgaW4gY2FzZSB0aGUgVFRZIHdhcyBjbG9zZWQgd2hpbGUgdGhyb3R0bGVkLgogCSAqLwpAQCAtNTM5LDIzICs1NjIsMjcgQEAKIAlhY20tPnRocm90dGxlX3JlcSA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CiAKLQlpZiAoYWNtX3N1Ym1pdF9yZWFkX3VyYnMoYWNtLCBHRlBfS0VSTkVMKSkKKwlyZXR2YWwgPSBhY21fc3VibWl0X3JlYWRfdXJicyhhY20sIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3Jfc3VibWl0X3JlYWRfdXJiczsKIAorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOworCiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKIAogCXJldHVybiAwOwogCiBlcnJvcl9zdWJtaXRfcmVhZF91cmJzOgotCWFjbS0+Y3RybG91dCA9IDA7Ci0JYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0KTsKLWVycm9yX3NldF9jb250cm9sOgorCWZvciAoaSA9IDA7IGkgPCBhY20tPnJ4X2J1ZmxpbWl0OyBpKyspCisJCXVzYl9raWxsX3VyYihhY20tPnJlYWRfdXJic1tpXSk7CiAJdXNiX2tpbGxfdXJiKGFjbS0+Y3RybHVyYik7CiBlcnJvcl9zdWJtaXRfdXJiOgorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogZXJyb3JfZ2V0X2ludGVyZmFjZToKIGRpc2Nvbm5lY3RlZDoKIAltdXRleF91bmxvY2soJmFjbS0+bXV0ZXgpOwotCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gdXNiX3RyYW5zbGF0ZV9lcnJvcnMocmV0dmFsKTsKIH0KIAogc3RhdGljIHZvaWQgYWNtX3BvcnRfZGVzdHJ1Y3Qoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQpAQCAtNTczLDIzICs2MDAsMzcgQEAKIHN0YXRpYyB2b2lkIGFjbV9wb3J0X3NodXRkb3duKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgYWNtICphY20gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGFjbSwgcG9ydCk7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBhY21fd2IgKndiOwogCWludCBpOwogCiAJZGV2X2RiZygmYWNtLT5jb250cm9sLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCi0JbXV0ZXhfbG9jaygmYWNtLT5tdXRleCk7Ci0JaWYgKCFhY20tPmRpc2Nvbm5lY3RlZCkgewotCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKLQkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gMCk7Ci0JCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwotCQlmb3IgKGkgPSAwOyBpIDwgQUNNX05XOyBpKyspCi0JCQl1c2Jfa2lsbF91cmIoYWNtLT53YltpXS51cmIpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWNtLT5yeF9idWZsaW1pdDsgaSsrKQotCQkJdXNiX2tpbGxfdXJiKGFjbS0+cmVhZF91cmJzW2ldKTsKLQkJYWNtLT5jb250cm9sLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKLQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7CisJLyoKKwkgKiBOZWVkIHRvIGdyYWIgd3JpdGVfbG9jayB0byBwcmV2ZW50IHJhY2Ugd2l0aCByZXN1bWUsIGJ1dCBubyBuZWVkIHRvCisJICogaG9sZCBpdCBkdWUgdG8gdGhlIHR0eS1wb3J0IGluaXRpYWxpc2VkIGZsYWcuCisJICovCisJc3Bpbl9sb2NrX2lycSgmYWNtLT53cml0ZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7CisKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKGFjbS0+Y29udHJvbCk7CisJYWNtLT5jb250cm9sLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKKworCWZvciAoOzspIHsKKwkJdXJiID0gdXNiX2dldF9mcm9tX2FuY2hvcigmYWNtLT5kZWxheWVkKTsKKwkJaWYgKCF1cmIpCisJCQlicmVhazsKKwkJd2IgPSB1cmItPmNvbnRleHQ7CisJCXdiLT51c2UgPSAwOworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMoYWNtLT5jb250cm9sKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKKworCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOworCWZvciAoaSA9IDA7IGkgPCBBQ01fTlc7IGkrKykKKwkJdXNiX2tpbGxfdXJiKGFjbS0+d2JbaV0udXJiKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWNtLT5yeF9idWZsaW1pdDsgaSsrKQorCQl1c2Jfa2lsbF91cmIoYWNtLT5yZWFkX3VyYnNbaV0pOwogfQogCiBzdGF0aWMgdm9pZCBhY21fdHR5X2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTY0NiwxNiArNjg3LDE4IEBACiAJbWVtY3B5KHdiLT5idWYsIGJ1ZiwgY291bnQpOwogCXdiLT5sZW4gPSBjb3VudDsKIAotCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhhY20tPmNvbnRyb2wpOwotCWlmIChhY20tPnN1c3BfY291bnQpIHsKLQkJaWYgKCFhY20tPmRlbGF5ZWRfd2IpCi0JCQlhY20tPmRlbGF5ZWRfd2IgPSB3YjsKLQkJZWxzZQotCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKGFjbS0+Y29udHJvbCk7CisJc3RhdCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhhY20tPmNvbnRyb2wpOworCWlmIChzdGF0KSB7CisJCXdiLT51c2UgPSAwOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGNvdW50OwkvKiBBIHdoaXRlIGxpZSAqLworCQlyZXR1cm4gc3RhdDsKIAl9Ci0JdXNiX21hcmtfbGFzdF9idXN5KGFjbS0+ZGV2KTsKKworCWlmIChhY20tPnN1c3BfY291bnQpIHsKKwkJdXNiX2FuY2hvcl91cmIod2ItPnVyYiwgJmFjbS0+ZGVsYXllZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+d3JpdGVfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gY291bnQ7CisJfQogCiAJc3RhdCA9IGFjbV9zdGFydF93YihhY20sIHdiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKQEAgLTk1OCw2ICsxMDAxLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIGFjbV9wb3J0X29wcyA9IHsKKwkuZHRyX3J0cyA9IGFjbV9wb3J0X2R0cl9ydHMsCiAJLnNodXRkb3duID0gYWNtX3BvcnRfc2h1dGRvd24sCiAJLmFjdGl2YXRlID0gYWNtX3BvcnRfYWN0aXZhdGUsCiAJLmRlc3RydWN0ID0gYWNtX3BvcnRfZGVzdHJ1Y3QsCkBAIC0xMjY5LDYgKzEzMTMsNyBAQAogCQlhY20tPmJJbnRlcnZhbCA9IGVwcmVhZC0+YkludGVydmFsOwogCXR0eV9wb3J0X2luaXQoJmFjbS0+cG9ydCk7CiAJYWNtLT5wb3J0Lm9wcyA9ICZhY21fcG9ydF9vcHM7CisJaW5pdF91c2JfYW5jaG9yKCZhY20tPmRlbGF5ZWQpOwogCiAJYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KHVzYl9kZXYsIGN0cmxzaXplLCBHRlBfS0VSTkVMLCAmYWNtLT5jdHJsX2RtYSk7CiAJaWYgKCFidWYpIHsKQEAgLTEzOTQsOCArMTQzOSw2IEBACiAKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCAidHR5QUNNJWQ6IFVTQiBBQ00gZGV2aWNlXG4iLCBtaW5vcik7CiAKLQlhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQpOwotCiAJYWNtLT5saW5lLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKDk2MDApOwogCWFjbS0+bGluZS5iRGF0YUJpdHMgPSA4OwogCWFjbV9zZXRfbGluZShhY20sICZhY20tPmxpbmUpOwpAQCAtMTUxNCwyNyArMTU1NywyMCBAQAogCXN0cnVjdCBhY20gKmFjbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJaW50IGNudDsKIAorCXNwaW5fbG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7CiAJaWYgKFBNU0dfSVNfQVVUTyhtZXNzYWdlKSkgewotCQlpbnQgYjsKLQotCQlzcGluX2xvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOwotCQliID0gYWNtLT50cmFuc21pdHRpbmc7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYWNtLT53cml0ZV9sb2NrKTsKLQkJaWYgKGIpCisJCWlmIChhY20tPnRyYW5zbWl0dGluZykgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOwogCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCX0KLQotCXNwaW5fbG9ja19pcnEoJmFjbS0+cmVhZF9sb2NrKTsKLQlzcGluX2xvY2soJmFjbS0+d3JpdGVfbG9jayk7CiAJY250ID0gYWNtLT5zdXNwX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJmFjbS0+d3JpdGVfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOwogCiAJaWYgKGNudCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodGVzdF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmYWNtLT5wb3J0LmZsYWdzKSkKLQkJc3RvcF9kYXRhX3RyYWZmaWMoYWNtKTsKKwlzdG9wX2RhdGFfdHJhZmZpYyhhY20pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTQyLDI5ICsxNTc4LDIzIEBACiBzdGF0aWMgaW50IGFjbV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFjbSAqYWNtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlzdHJ1Y3QgYWNtX3diICp3YjsKKwlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IHJ2ID0gMDsKLQlpbnQgY250OwogCi0Jc3Bpbl9sb2NrX2lycSgmYWNtLT5yZWFkX2xvY2spOwotCWFjbS0+c3VzcF9jb3VudCAtPSAxOwotCWNudCA9IGFjbS0+c3VzcF9jb3VudDsKLQlzcGluX3VubG9ja19pcnEoJmFjbS0+cmVhZF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOwogCi0JaWYgKGNudCkKLQkJcmV0dXJuIDA7CisJaWYgKC0tYWNtLT5zdXNwX2NvdW50KQorCQlnb3RvIG91dDsKIAogCWlmICh0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZhY20tPnBvcnQuZmxhZ3MpKSB7Ci0JCXJ2ID0gdXNiX3N1Ym1pdF91cmIoYWNtLT5jdHJsdXJiLCBHRlBfTk9JTyk7CisJCXJ2ID0gdXNiX3N1Ym1pdF91cmIoYWNtLT5jdHJsdXJiLCBHRlBfQVRPTUlDKTsKIAotCQlzcGluX2xvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOwotCQlpZiAoYWNtLT5kZWxheWVkX3diKSB7Ci0JCQl3YiA9IGFjbS0+ZGVsYXllZF93YjsKLQkJCWFjbS0+ZGVsYXllZF93YiA9IE5VTEw7Ci0JCQlzcGluX3VubG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7Ci0JCQlhY21fc3RhcnRfd2IoYWNtLCB3Yik7Ci0JCX0gZWxzZSB7Ci0JCQlzcGluX3VubG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7CisJCWZvciAoOzspIHsKKwkJCXVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJmFjbS0+ZGVsYXllZCk7CisJCQlpZiAoIXVyYikKKwkJCQlicmVhazsKKworCQkJYWNtX3N0YXJ0X3diKGFjbSwgdXJiLT5jb250ZXh0KTsKIAkJfQogCiAJCS8qCkBAIC0xNTcyLDEyICsxNjAyLDEzIEBACiAJCSAqIGRvIHRoZSB3cml0ZSBwYXRoIGF0IGFsbCBjb3N0CiAJCSAqLwogCQlpZiAocnYgPCAwKQotCQkJZ290byBlcnJfb3V0OworCQkJZ290byBvdXQ7CiAKLQkJcnYgPSBhY21fc3VibWl0X3JlYWRfdXJicyhhY20sIEdGUF9OT0lPKTsKKwkJcnYgPSBhY21fc3VibWl0X3JlYWRfdXJicyhhY20sIEdGUF9BVE9NSUMpOwogCX0KK291dDoKKwlzcGluX3VubG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7CiAKLWVycl9vdXQ6CiAJcmV0dXJuIHJ2OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmggYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKaW5kZXggZTM4ZGM3OC4uZmM3NTY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaApAQCAtMTIwLDE1ICsxMjAsMTUgQEAKIAl1bnNpZ25lZCBpbnQgdGhyb3R0bGVkOjE7CQkJLyogYWN0dWFsbHkgdGhyb3R0bGVkICovCiAJdW5zaWduZWQgaW50IHRocm90dGxlX3JlcToxOwkJCS8qIHRocm90dGxlIHJlcXVlc3RlZCAqLwogCXU4IGJJbnRlcnZhbDsKLQlzdHJ1Y3QgYWNtX3diICpkZWxheWVkX3diOwkJCS8qIHdyaXRlIHF1ZXVlZCBmb3IgYSBkZXZpY2UgYWJvdXQgdG8gYmUgd29rZW4gKi8KKwlzdHJ1Y3QgdXNiX2FuY2hvciBkZWxheWVkOwkJCS8qIHdyaXRlcyBxdWV1ZWQgZm9yIGEgZGV2aWNlIGFib3V0IHRvIGJlIHdva2VuICovCiB9OwogCiAjZGVmaW5lIENEQ19EQVRBX0lOVEVSRkFDRV9UWVBFCTB4MGEKIAogLyogY29uc3RhbnRzIGRlc2NyaWJpbmcgdmFyaW91cyBxdWlya3MgYW5kIGVycm9ycyAqLwotI2RlZmluZSBOT19VTklPTl9OT1JNQUwJCQkxCi0jZGVmaW5lIFNJTkdMRV9SWF9VUkIJCQkyCi0jZGVmaW5lIE5PX0NBUF9MSU5FCQkJNAotI2RlZmluZSBOT1RfQV9NT0RFTQkJCTgKLSNkZWZpbmUgTk9fREFUQV9JTlRFUkZBQ0UJCTE2Ci0jZGVmaW5lIElHTk9SRV9ERVZJQ0UJCQkzMgorI2RlZmluZSBOT19VTklPTl9OT1JNQUwJCQlCSVQoMCkKKyNkZWZpbmUgU0lOR0xFX1JYX1VSQgkJCUJJVCgxKQorI2RlZmluZSBOT19DQVBfTElORQkJCUJJVCgyKQorI2RlZmluZSBOT1RfQV9NT0RFTQkJCUJJVCgzKQorI2RlZmluZSBOT19EQVRBX0lOVEVSRkFDRQkJQklUKDQpCisjZGVmaW5lIElHTk9SRV9ERVZJQ0UJCQlCSVQoNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKaW5kZXggY2ZiZWM5Yy4uMTAzYTZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKQEAgLTM4Myw5ICszODMsMTIgQEAKIHN0YXRpYyBpbnQgc2VuZF9yZXF1ZXN0X2Rldl9kZXBfbXNnX2luKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEsIHNpemVfdCB0cmFuc2Zlcl9zaXplKQogewogCWludCByZXR2YWw7Ci0JdTggYnVmZmVyW1VTQlRNQ19IRUFERVJfU0laRV07CisJdTggKmJ1ZmZlcjsKIAlpbnQgYWN0dWFsOwogCisJYnVmZmVyID0ga21hbGxvYyhVU0JUTUNfSEVBREVSX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKIAkvKiBTZXR1cCBJTyBidWZmZXIgZm9yIFJFUVVFU1RfREVWX0RFUF9NU0dfSU4gbWVzc2FnZQogCSAqIFJlZmVyIHRvIGNsYXNzIHNwZWNzIGZvciBkZXRhaWxzCiAJICovCkBAIC00MTcsNiArNDIwLDcgQEAKIAlpZiAoIWRhdGEtPmJUYWcpCiAJCWRhdGEtPmJUYWcrKzsKIAorCWtmcmVlKGJ1ZmZlcik7CiAJaWYgKHJldHZhbCA8IDApIHsKIAkJZGV2X2VycigmZGF0YS0+aW50Zi0+ZGV2LCAidXNiX2J1bGtfbXNnIGluIHNlbmRfcmVxdWVzdF9kZXZfZGVwX21zZ19pbigpIHJldHVybmVkICVkXG4iLCByZXR2YWwpOwogCQlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29tbW9uL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY29tbW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MjY0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb21tb24vTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgdXNiIGNvbW1vbiBwYXJ0cy4KKyMKKworb2JqLSQoQ09ORklHX1VTQl9DT01NT04pICs9IHVzYi1jb21tb24ubworb2JqLSQoQ09ORklHX1VTQl9PVEdfRlNNKSArPSB1c2Itb3RnLWZzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2ItY29tbW9uLmMgYi9kcml2ZXJzL3VzYi9jb21tb24vdXNiLWNvbW1vbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi91c2ItY29tbW9uLmMKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL2NvbW1vbi91c2ItY29tbW9uLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHktZnNtLXVzYi5jIGIvZHJpdmVycy91c2IvY29tbW9uL3VzYi1vdGctZnNtLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvcGh5L3BoeS1mc20tdXNiLmMKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL2NvbW1vbi91c2Itb3RnLWZzbS5jCmluZGV4IGQwM2ZhZGQuLjk4ZTgzNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHktZnNtLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvbW1vbi91c2Itb3RnLWZzbS5jCkBAIC0zNjQsMyArMzY0LDQgQEAKIAlWREJHKCJxdWl0IHN0YXRlbWFjaGluZSwgY2hhbmdlZCA9ICVkXG4iLCBzdGF0ZV9jaGFuZ2VkKTsKIAlyZXR1cm4gc3RhdGVfY2hhbmdlZDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG90Z19zdGF0ZW1hY2hpbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IGNiOGU5OTEuLjEwNjA2NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTEsMTMgKzEsNiBAQAogIwogIyBVU0IgQ29yZSBjb25maWd1cmF0aW9uCiAjCi1jb25maWcgVVNCX0RFQlVHCi0JYm9vbCAiVVNCIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgVVNCIGNvcmUgJiBodWIgZHJpdmVycyB0byBwcm9kdWNlIGEgYnVuY2gKLQkgIG9mIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzeXN0ZW0gbG9nLiBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIGhhdmluZyBhCi0JICBwcm9ibGVtIHdpdGggVVNCIHN1cHBvcnQgYW5kIHdhbnQgdG8gc2VlIG1vcmUgb2Ygd2hhdCBpcyBnb2luZyBvbi4KLQogY29uZmlnIFVTQl9BTk5PVU5DRV9ORVdfREVWSUNFUwogCWJvb2wgIlVTQiBhbm5vdW5jZSBuZXcgZGV2aWNlcyIKIAloZWxwCkBAIC04OCwzICs4MSwxMiBAQAogCSAgYW5kIHNvZnR3YXJlIGNvc3RzIGJ5IG5vdCBzdXBwb3J0aW5nIGV4dGVybmFsIGh1YnMuICBTbwogCSAgYXJlICJFbWJlZGRlZCBIb3N0cyIgdGhhdCBkb24ndCBvZmZlciBPVEcgc3VwcG9ydC4KIAorY29uZmlnIFVTQl9PVEdfRlNNCisJdHJpc3RhdGUgIlVTQiAyLjAgT1RHIEZTTSBpbXBsZW1lbnRhdGlvbiIKKwlkZXBlbmRzIG9uIFVTQgorCXNlbGVjdCBVU0JfT1RHCisJc2VsZWN0IFVTQl9QSFkKKwloZWxwCisJICBJbXBsZW1lbnRzIE9URyBGaW5pdGUgU3RhdGUgTWFjaGluZSBhcyBzcGVjaWZpZWQgaW4gT24tVGhlLUdvCisJICBhbmQgRW1iZWRkZWQgSG9zdCBTdXBwbGVtZW50IHRvIHRoZSBVU0IgUmV2aXNpb24gMi4wIFNwZWNpZmljYXRpb24uCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggMWYwMmU2NS4uODIwNDRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTE5Miw3ICsxOTIsNiBAQAogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlkZXYtPmN1cnJlbnRfc3RhdGUgPSBQQ0lfRDA7CiAKIAkvKgogCSAqIFRoZSB4SENJIGRyaXZlciBoYXMgaXRzIG93biBpcnEgbWFuYWdlbWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggOWM0ZTI5Mi4uYmVjMzFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC05MTgsNiArOTE4LDcgQEAKIAlidXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQgPSAwOwogCWJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzICA9IDA7CiAJYnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzID0gMDsKKwltdXRleF9pbml0KCZidXMtPnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKIAlJTklUX0xJU1RfSEVBRCAoJmJ1cy0+YnVzX2xpc3QpOwogfQpAQCAtMTUwMiw2ICsxNTAzLDkgQEAKIAkJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCQllbHNlCiAJCQkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0RNQV9NQVBfUEFHRTsKKwkJCX0gZWxzZSBpZiAoaXNfdm1hbGxvY19hZGRyKHVyYi0+dHJhbnNmZXJfYnVmZmVyKSkgeworCQkJCVdBUk5fT05DRSgxLCAidHJhbnNmZXIgYnVmZmVyIG5vdCBkbWEgY2FwYWJsZVxuIik7CisJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCX0gZWxzZSB7CiAJCQkJdXJiLT50cmFuc2Zlcl9kbWEgPSBkbWFfbWFwX3NpbmdsZSgKIAkJCQkJCWhjZC0+c2VsZi5jb250cm9sbGVyLApAQCAtMjI2Myw5ICsyMjY3LDcgQEAKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JfaGNkLCB3YWtldXBfd29yayk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBoY2QtPnNlbGYucm9vdF9odWI7CiAKLQl1c2JfbG9ja19kZXZpY2UodWRldik7CiAJdXNiX3JlbW90ZV93YWtldXAodWRldik7Ci0JdXNiX3VubG9ja19kZXZpY2UodWRldik7CiB9CiAKIC8qKgpAQCAtMjQ1NCwxMSArMjQ1NiwxMyBAQAogCQltdXRleF9pbml0KGhjZC0+YmFuZHdpZHRoX211dGV4KTsKIAkJZGV2X3NldF9kcnZkYXRhKGRldiwgaGNkKTsKIAl9IGVsc2UgeworCQltdXRleF9sb2NrKCZ1c2JfcG9ydF9wZWVyX211dGV4KTsKIAkJaGNkLT5iYW5kd2lkdGhfbXV0ZXggPSBwcmltYXJ5X2hjZC0+YmFuZHdpZHRoX211dGV4OwogCQloY2QtPnByaW1hcnlfaGNkID0gcHJpbWFyeV9oY2Q7CiAJCXByaW1hcnlfaGNkLT5wcmltYXJ5X2hjZCA9IHByaW1hcnlfaGNkOwogCQloY2QtPnNoYXJlZF9oY2QgPSBwcmltYXJ5X2hjZDsKIAkJcHJpbWFyeV9oY2QtPnNoYXJlZF9oY2QgPSBoY2Q7CisJCW11dGV4X3VubG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CiAJfQogCiAJa3JlZl9pbml0KCZoY2QtPmtyZWYpOwpAQCAtMjUxMCwxOCArMjUxNCwyNSBAQAogICogZGVhbGxvY2F0ZWQuCiAgKgogICogTWFrZSBzdXJlIHRvIG9ubHkgZGVhbGxvY2F0ZSB0aGUgYmFuZHdpZHRoX211dGV4IHdoZW4gdGhlIHByaW1hcnkgSENEIGlzCi0gKiBmcmVlZC4gIFdoZW4gaGNkX3JlbGVhc2UoKSBpcyBjYWxsZWQgZm9yIHRoZSBub24tcHJpbWFyeSBIQ0QsIHNldCB0aGUKLSAqIHByaW1hcnlfaGNkJ3Mgc2hhcmVkX2hjZCBwb2ludGVyIHRvIG51bGwgKHNpbmNlIHRoZSBub24tcHJpbWFyeSBIQ0Qgd2lsbCBiZQotICogZnJlZWQgc2hvcnRseSkuCisgKiBmcmVlZC4gIFdoZW4gaGNkX3JlbGVhc2UoKSBpcyBjYWxsZWQgZm9yIGVpdGhlciBoY2QgaW4gYSBwZWVyIHNldAorICogaW52YWxpZGF0ZSB0aGUgcGVlcidzIC0+c2hhcmVkX2hjZCBhbmQgLT5wcmltYXJ5X2hjZCBwb2ludGVycyB0bworICogYmxvY2sgbmV3IHBlZXJpbmcgYXR0ZW1wdHMKICAqLwotc3RhdGljIHZvaWQgaGNkX3JlbGVhc2UgKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgaGNkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGNvbnRhaW5lcl9vZiAoa3JlZiwgc3RydWN0IHVzYl9oY2QsIGtyZWYpOwogCisJbXV0ZXhfbG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CiAJaWYgKHVzYl9oY2RfaXNfcHJpbWFyeV9oY2QoaGNkKSkKIAkJa2ZyZWUoaGNkLT5iYW5kd2lkdGhfbXV0ZXgpOwotCWVsc2UKLQkJaGNkLT5zaGFyZWRfaGNkLT5zaGFyZWRfaGNkID0gTlVMTDsKKwlpZiAoaGNkLT5zaGFyZWRfaGNkKSB7CisJCXN0cnVjdCB1c2JfaGNkICpwZWVyID0gaGNkLT5zaGFyZWRfaGNkOworCisJCXBlZXItPnNoYXJlZF9oY2QgPSBOVUxMOworCQlpZiAocGVlci0+cHJpbWFyeV9oY2QgPT0gaGNkKQorCQkJcGVlci0+cHJpbWFyeV9oY2QgPSBOVUxMOworCX0KKwltdXRleF91bmxvY2soJnVzYl9wb3J0X3BlZXJfbXV0ZXgpOwogCWtmcmVlKGhjZCk7CiB9CiAKQEAgLTI1ODksNiArMjYwMCwyMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQmVmb3JlIHdlIGZyZWUgdGhpcyByb290IGh1YiwgZmx1c2ggaW4tZmxpZ2h0IHBlZXJpbmcgYXR0ZW1wdHMKKyAqIGFuZCBkaXNhYmxlIHBlZXIgbG9va3VwcworICovCitzdGF0aWMgdm9pZCB1c2JfcHV0X2ludmFsaWRhdGVfcmhkZXYoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXY7CisKKwltdXRleF9sb2NrKCZ1c2JfcG9ydF9wZWVyX211dGV4KTsKKwlyaGRldiA9IGhjZC0+c2VsZi5yb290X2h1YjsKKwloY2QtPnNlbGYucm9vdF9odWIgPSBOVUxMOworCW11dGV4X3VubG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CisJdXNiX3B1dF9kZXYocmhkZXYpOworfQorCiAvKioKICAqIHVzYl9hZGRfaGNkIC0gZmluaXNoIGdlbmVyaWMgSENEIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0ZXIKICAqIEBoY2Q6IHRoZSB1c2JfaGNkIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCkBAIC0yNjQ5LDcgKzI2NzUsOSBAQAogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvY2F0ZV9yb290X2h1YjsKIAl9CisJbXV0ZXhfbG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CiAJaGNkLT5zZWxmLnJvb3RfaHViID0gcmhkZXY7CisJbXV0ZXhfdW5sb2NrKCZ1c2JfcG9ydF9wZWVyX211dGV4KTsKIAogCXN3aXRjaCAoaGNkLT5zcGVlZCkgewogCWNhc2UgSENEX1VTQjExOgpAQCAtMjc1OCw3ICsyNzg2LDcgQEAKIGVycl9yZXF1ZXN0X2lycToKIGVycl9oY2RfZHJpdmVyX3NldHVwOgogZXJyX3NldF9yaF9zcGVlZDoKLQl1c2JfcHV0X2RldihoY2QtPnNlbGYucm9vdF9odWIpOworCXVzYl9wdXRfaW52YWxpZGF0ZV9yaGRldihoY2QpOwogZXJyX2FsbG9jYXRlX3Jvb3RfaHViOgogCXVzYl9kZXJlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKTsKIGVycl9yZWdpc3Rlcl9idXM6CkBAIC0yODM4LDcgKzI4NjYsNiBAQAogCQkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CiAJfQogCi0JdXNiX3B1dF9kZXYoaGNkLT5zZWxmLnJvb3RfaHViKTsKIAl1c2JfZGVyZWdpc3Rlcl9idXMoJmhjZC0+c2VsZik7CiAJaGNkX2J1ZmZlcl9kZXN0cm95KGhjZCk7CiAJaWYgKGhjZC0+cmVtb3ZlX3BoeSAmJiBoY2QtPnBoeSkgewpAQCAtMjg0Niw2ICsyODczLDggQEAKIAkJdXNiX3B1dF9waHkoaGNkLT5waHkpOwogCQloY2QtPnBoeSA9IE5VTEw7CiAJfQorCisJdXNiX3B1dF9pbnZhbGlkYXRlX3JoZGV2KGhjZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcmVtb3ZlX2hjZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDA5MDQ2OWUuLmRiNjI4NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMzYsMTEgKzM2LDYgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9HRU5FU1lTX0xPR0lDCQkweDA1ZTMKICNkZWZpbmUgSFVCX1FVSVJLX0NIRUNLX1BPUlRfQVVUT1NVU1BFTkQJMHgwMQogCi1zdGF0aWMgaW5saW5lIGludCBodWJfaXNfc3VwZXJzcGVlZChzdHJ1Y3QgdXNiX2RldmljZSAqaGRldikKLXsKLQlyZXR1cm4gKGhkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sID09IFVTQl9IVUJfUFJfU1MpOwotfQotCiAvKiBQcm90ZWN0IHN0cnVjdCB1c2JfZGV2aWNlLT5zdGF0ZSBhbmQgLT5jaGlsZHJlbiBtZW1iZXJzCiAgKiBOb3RlOiBCb3RoIGFyZSBhbHNvIHByb3RlY3RlZCBieSAtPmRldi5zZW0sIGV4Y2VwdCB0aGF0IC0+c3RhdGUgY2FuCiAgKiBjaGFuZ2UgdG8gVVNCX1NUQVRFX05PVEFUVEFDSEVEIGV2ZW4gd2hlbiB0aGUgc2VtYXBob3JlIGlzbid0IGhlbGQuICovCkBAIC01NSw2ICs1MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtodWJkX3Rhc2s7CiAKKy8qIHN5bmNocm9uaXplIGh1Yi1wb3J0IGFkZC9yZW1vdmUgYW5kIHBlZXJpbmcgb3BlcmF0aW9ucyAqLworREVGSU5FX01VVEVYKHVzYl9wb3J0X3BlZXJfbXV0ZXgpOworCiAvKiBjeWNsZSBsZWRzIG9uIGh1YnMgdGhhdCBhcmVuJ3QgYmxpbmtpbmcgZm9yIGF0dGVudGlvbiAqLwogc3RhdGljIGJvb2wgYmxpbmtlbmxpZ2h0cyA9IDA7CiBtb2R1bGVfcGFyYW0gKGJsaW5rZW5saWdodHMsIGJvb2wsIFNfSVJVR08pOwpAQCAtNDEyLDMwICs0MTAsMzUgQEAKIAkJTlVMTCwgMCwgMTAwMCk7CiB9CiAKK3N0YXRpYyBjaGFyICp0b19sZWRfbmFtZShpbnQgc2VsZWN0b3IpCit7CisJc3dpdGNoIChzZWxlY3RvcikgeworCWNhc2UgSFVCX0xFRF9BTUJFUjoKKwkJcmV0dXJuICJhbWJlciI7CisJY2FzZSBIVUJfTEVEX0dSRUVOOgorCQlyZXR1cm4gImdyZWVuIjsKKwljYXNlIEhVQl9MRURfT0ZGOgorCQlyZXR1cm4gIm9mZiI7CisJY2FzZSBIVUJfTEVEX0FVVE86CisJCXJldHVybiAiYXV0byI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICI/PyI7CisJfQorfQorCiAvKgogICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi43LjEuMTAgYW5kIHRhYmxlIDExLTcKICAqIGZvciBpbmZvIGFib3V0IHVzaW5nIHBvcnQgaW5kaWNhdG9ycwogICovCi1zdGF0aWMgdm9pZCBzZXRfcG9ydF9sZWQoCi0Jc3RydWN0IHVzYl9odWIgKmh1YiwKLQlpbnQgcG9ydDEsCi0JaW50IHNlbGVjdG9yCi0pCitzdGF0aWMgdm9pZCBzZXRfcG9ydF9sZWQoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLCBpbnQgc2VsZWN0b3IpCiB7Ci0JaW50IHN0YXR1cyA9IHNldF9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCAoc2VsZWN0b3IgPDwgOCkgfCBwb3J0MSwKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgKHNlbGVjdG9yIDw8IDgpIHwgcG9ydDEsCiAJCQlVU0JfUE9SVF9GRUFUX0lORElDQVRPUik7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCWRldl9kYmcgKGh1Yi0+aW50ZmRldiwKLQkJCSJwb3J0ICVkIGluZGljYXRvciAlcyBzdGF0dXMgJWRcbiIsCi0JCQlwb3J0MSwKLQkJCSh7IGNoYXIgKnM7IHN3aXRjaCAoc2VsZWN0b3IpIHsKLQkJCWNhc2UgSFVCX0xFRF9BTUJFUjogcyA9ICJhbWJlciI7IGJyZWFrOwotCQkJY2FzZSBIVUJfTEVEX0dSRUVOOiBzID0gImdyZWVuIjsgYnJlYWs7Ci0JCQljYXNlIEhVQl9MRURfT0ZGOiBzID0gIm9mZiI7IGJyZWFrOwotCQkJY2FzZSBIVUJfTEVEX0FVVE86IHMgPSAiYXV0byI7IGJyZWFrOwotCQkJZGVmYXVsdDogcyA9ICI/PyI7IGJyZWFrOwotCQkJfSBzOyB9KSwKLQkJCXN0YXR1cyk7CisJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgImluZGljYXRvciAlcyBzdGF0dXMgJWRcbiIsCisJCXRvX2xlZF9uYW1lKHNlbGVjdG9yKSwgc3RhdHVzKTsKIH0KIAogI2RlZmluZQlMRURfQ1lDTEVfUEVSSU9ECSgoMipIWikvMykKQEAgLTc0MywxNiArNzQ2LDIwIEBACiAJCQkgICBpbnQgcG9ydDEsIGJvb2wgc2V0KQogewogCWludCByZXQ7Ci0Jc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKIAogCWlmIChzZXQpCiAJCXJldCA9IHNldF9wb3J0X2ZlYXR1cmUoaGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCWVsc2UKIAkJcmV0ID0gdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9QT1dFUik7CiAKLQlpZiAoIXJldCkKLQkJcG9ydF9kZXYtPnBvd2VyX2lzX29uID0gc2V0OwotCXJldHVybiByZXQ7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZXQpCisJCXNldF9iaXQocG9ydDEsIGh1Yi0+cG93ZXJfYml0cyk7CisJZWxzZQorCQljbGVhcl9iaXQocG9ydDEsIGh1Yi0+cG93ZXJfYml0cyk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODEwLDE2ICs4MTcsOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2h1Yl9jbGVhcl90dF9idWZmZXIpOwogCi0vKiBJZiBkb19kZWxheSBpcyBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoZSBjYWxsZXIKLSAqIG5lZWRzIHRvIGRlbGF5LgotICovCi1zdGF0aWMgdW5zaWduZWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIsIGJvb2wgZG9fZGVsYXkpCitzdGF0aWMgdm9pZCBodWJfcG93ZXJfb24oc3RydWN0IHVzYl9odWIgKmh1YiwgYm9vbCBkb19kZWxheSkKIHsKIAlpbnQgcG9ydDE7Ci0JdW5zaWduZWQgcGdvb2RfZGVsYXkgPSBodWItPmRlc2NyaXB0b3ItPmJQd3JPbjJQd3JHb29kICogMjsKLQl1bnNpZ25lZCBkZWxheTsKLQl1MTYgd0h1YkNoYXJhY3RlcmlzdGljcyA9Ci0JCQlsZTE2X3RvX2NwdShodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MpOwogCiAJLyogRW5hYmxlIHBvd2VyIG9uIGVhY2ggcG9ydC4gIFNvbWUgaHVicyBoYXZlIHJlc2VydmVkIHZhbHVlcwogCSAqIG9mIExQU00gKD4gMikgaW4gdGhlaXIgZGVzY3JpcHRvcnMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCkBAIC04MjcsMjMgKzgyNywxOSBAQAogCSAqIGJ1dCBvbmx5IGVtdWxhdGUgaXQuICBJbiBhbGwgY2FzZXMsIHRoZSBwb3J0cyB3b24ndCB3b3JrCiAJICogdW5sZXNzIHdlIHNlbmQgdGhlc2UgbWVzc2FnZXMgdG8gdGhlIGh1Yi4KIAkgKi8KLQlpZiAoKHdIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9MUFNNKSA8IDIpCisJaWYgKGh1Yl9pc19wb3J0X3Bvd2VyX3N3aXRjaGFibGUoaHViKSkKIAkJZGV2X2RiZyhodWItPmludGZkZXYsICJlbmFibGluZyBwb3dlciBvbiBhbGwgcG9ydHNcbiIpOwogCWVsc2UKIAkJZGV2X2RiZyhodWItPmludGZkZXYsICJ0cnlpbmcgdG8gZW5hYmxlIHBvcnQgcG93ZXIgb24gIgogCQkJCSJub24tc3dpdGNoYWJsZSBodWJcbiIpOwogCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBodWItPmhkZXYtPm1heGNoaWxkOyBwb3J0MSsrKQotCQlpZiAoaHViLT5wb3J0c1twb3J0MSAtIDFdLT5wb3dlcl9pc19vbikKKwkJaWYgKHRlc3RfYml0KHBvcnQxLCBodWItPnBvd2VyX2JpdHMpKQogCQkJc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKIAkJZWxzZQogCQkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLAogCQkJCQkJVVNCX1BPUlRfRkVBVF9QT1dFUik7Ci0KLQkvKiBXYWl0IGF0IGxlYXN0IDEwMCBtc2VjIGZvciBwb3dlciB0byBiZWNvbWUgc3RhYmxlICovCi0JZGVsYXkgPSBtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKTsKIAlpZiAoZG9fZGVsYXkpCi0JCW1zbGVlcChkZWxheSk7Ci0JcmV0dXJuIGRlbGF5OworCQltc2xlZXAoaHViX3Bvd2VyX29uX2dvb2RfZGVsYXkoaHViKSk7CiB9CiAKIHN0YXRpYyBpbnQgaHViX2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9odWIgKmh1YiwKQEAgLTkxMSwyMCArOTA3LDIwIEBACiAJCW1zbGVlcChIVUJfREVCT1VOQ0VfU1RFUCk7CiAJfQogCWlmICh0b3RhbF90aW1lID49IEhVQl9ERUJPVU5DRV9USU1FT1VUKQotCQlkZXZfd2FybihodWItPmludGZkZXYsICJDb3VsZCBub3QgZGlzYWJsZSBwb3J0ICVkIGFmdGVyICVkIG1zXG4iLAotCQkJCXBvcnQxLCB0b3RhbF90aW1lKTsKKwkJZGV2X3dhcm4oJmh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+ZGV2LAorCQkJCSJDb3VsZCBub3QgZGlzYWJsZSBhZnRlciAlZCBtc1xuIiwgdG90YWxfdGltZSk7CiAKIAlyZXR1cm4gaHViX3NldF9wb3J0X2xpbmtfc3RhdGUoaHViLCBwb3J0MSwgVVNCX1NTX1BPUlRfTFNfUlhfREVURUNUKTsKIH0KIAogc3RhdGljIGludCBodWJfcG9ydF9kaXNhYmxlKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwgaW50IHNldF9zdGF0ZSkKIHsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOwogCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OwogCWludCByZXQgPSAwOwogCi0JaWYgKGh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+Y2hpbGQgJiYgc2V0X3N0YXRlKQotCQl1c2Jfc2V0X2RldmljZV9zdGF0ZShodWItPnBvcnRzW3BvcnQxIC0gMV0tPmNoaWxkLAotCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJaWYgKHBvcnRfZGV2LT5jaGlsZCAmJiBzZXRfc3RhdGUpCisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHBvcnRfZGV2LT5jaGlsZCwgVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKIAlpZiAoIWh1Yi0+ZXJyb3IpIHsKIAkJaWYgKGh1Yl9pc19zdXBlcnNwZWVkKGh1Yi0+aGRldikpCiAJCQlyZXQgPSBodWJfdXNiM19wb3J0X2Rpc2FibGUoaHViLCBwb3J0MSk7CkBAIC05MzMsOCArOTI5LDcgQEAKIAkJCQkJVVNCX1BPUlRfRkVBVF9FTkFCTEUpOwogCX0KIAlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQotCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgImNhbm5vdCBkaXNhYmxlIHBvcnQgJWQgKGVyciA9ICVkKVxuIiwKLQkJCQlwb3J0MSwgcmV0KTsKKwkJZGV2X2VycigmcG9ydF9kZXYtPmRldiwgImNhbm5vdCBkaXNhYmxlIChlcnIgPSAlZClcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTQ1LDcgKzk0MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEpCiB7Ci0JZGV2X2RiZyhodWItPmludGZkZXYsICJsb2dpY2FsIGRpc2Nvbm5lY3Qgb24gcG9ydCAlZFxuIiwgcG9ydDEpOworCWRldl9kYmcoJmh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+ZGV2LCAibG9naWNhbCBkaXNjb25uZWN0XG4iKTsKIAlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDEpOwogCiAJLyogRklYTUUgbGV0IGNhbGxlciBhc2sgdG8gcG93ZXIgZG93biB0aGUgcG9ydDoKQEAgLTEwNDgsNyArMTA0Myw5IEBACiAJCSAqIGZvciBIVUJfUE9TVF9SRVNFVCwgYnV0IGl0J3MgZWFzaWVyIG5vdCB0by4KIAkJICovCiAJCWlmICh0eXBlID09IEhVQl9JTklUKSB7Ci0JCQlkZWxheSA9IGh1Yl9wb3dlcl9vbihodWIsIGZhbHNlKTsKKwkJCXVuc2lnbmVkIGRlbGF5ID0gaHViX3Bvd2VyX29uX2dvb2RfZGVsYXkoaHViKTsKKworCQkJaHViX3Bvd2VyX29uKGh1YiwgZmFsc2UpOwogCQkJSU5JVF9ERUxBWUVEX1dPUksoJmh1Yi0+aW5pdF93b3JrLCBodWJfaW5pdF9mdW5jMik7CiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwKIAkJCQkJJmh1Yi0+aW5pdF93b3JrLApAQCAtMTA4MywyMSArMTA4MCwyMyBAQAogCX0KICBpbml0MjoKIAotCS8qIENoZWNrIGVhY2ggcG9ydCBhbmQgc2V0IGh1Yi0+Y2hhbmdlX2JpdHMgdG8gbGV0IGtodWJkIGtub3cKKwkvKgorCSAqIENoZWNrIGVhY2ggcG9ydCBhbmQgc2V0IGh1Yi0+Y2hhbmdlX2JpdHMgdG8gbGV0IGtodWJkIGtub3cKIAkgKiB3aGljaCBwb3J0cyBuZWVkIGF0dGVudGlvbi4KIAkgKi8KIAlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gaGRldi0+bWF4Y2hpbGQ7ICsrcG9ydDEpIHsKLQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBodWItPnBvcnRzW3BvcnQxIC0gMV0tPmNoaWxkOworCQlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOworCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHBvcnRfZGV2LT5jaGlsZDsKIAkJdTE2IHBvcnRzdGF0dXMsIHBvcnRjaGFuZ2U7CiAKIAkJcG9ydHN0YXR1cyA9IHBvcnRjaGFuZ2UgPSAwOwogCQlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKIAkJaWYgKHVkZXYgfHwgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pKQotCQkJZGV2X2RiZyhodWItPmludGZkZXYsCi0JCQkJCSJwb3J0ICVkOiBzdGF0dXMgJTA0eCBjaGFuZ2UgJTA0eFxuIiwKLQkJCQkJcG9ydDEsIHBvcnRzdGF0dXMsIHBvcnRjaGFuZ2UpOworCQkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgInN0YXR1cyAlMDR4IGNoYW5nZSAlMDR4XG4iLAorCQkJCQlwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlKTsKIAotCQkvKiBBZnRlciBhbnl0aGluZyBvdGhlciB0aGFuIEhVQl9SRVNVTUUgKGkuZS4sIGluaXRpYWxpemF0aW9uCisJCS8qCisJCSAqIEFmdGVyIGFueXRoaW5nIG90aGVyIHRoYW4gSFVCX1JFU1VNRSAoaS5lLiwgaW5pdGlhbGl6YXRpb24KIAkJICogb3IgYW55IHNvcnQgb2YgcmVzZXQpLCBldmVyeSBwb3J0IHNob3VsZCBiZSBkaXNhYmxlZC4KIAkJICogVW5jb25uZWN0ZWQgcG9ydHMgc2hvdWxkIGxpa2V3aXNlIGJlIGRpc2FibGVkIChwYXJhbm9pYSksCiAJCSAqIGFuZCBzbyBzaG91bGQgcG9ydHMgZm9yIHdoaWNoIHdlIGhhdmUgbm8gdXNiX2RldmljZS4KQEAgLTExNzMsMTUgKzExNzIsMTMgQEAKIAkJCQlzZXRfYml0KHBvcnQxLCBodWItPmNoYW5nZV9iaXRzKTsKIAogCQl9IGVsc2UgaWYgKHVkZXYtPnBlcnNpc3RfZW5hYmxlZCkgewotCQkJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKLQogI2lmZGVmIENPTkZJR19QTQogCQkJdWRldi0+cmVzZXRfcmVzdW1lID0gMTsKICNlbmRpZgogCQkJLyogRG9uJ3Qgc2V0IHRoZSBjaGFuZ2VfYml0cyB3aGVuIHRoZSBkZXZpY2UKIAkJCSAqIHdhcyBwb3dlcmVkIG9mZi4KIAkJCSAqLwotCQkJaWYgKHBvcnRfZGV2LT5wb3dlcl9pc19vbikKKwkJCWlmICh0ZXN0X2JpdChwb3J0MSwgaHViLT5wb3dlcl9iaXRzKSkKIAkJCQlzZXRfYml0KHBvcnQxLCBodWItPmNoYW5nZV9iaXRzKTsKIAogCQl9IGVsc2UgewpAQCAtMTI3NiwxMiArMTI3MywyMiBAQAogCQlmbHVzaF93b3JrKCZodWItPnR0LmNsZWFyX3dvcmspOwogfQogCitzdGF0aWMgdm9pZCBodWJfcG1fYmFycmllcl9mb3JfYWxsX3BvcnRzKHN0cnVjdCB1c2JfaHViICpodWIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHViLT5oZGV2LT5tYXhjaGlsZDsgKytpKQorCQlwbV9ydW50aW1lX2JhcnJpZXIoJmh1Yi0+cG9ydHNbaV0tPmRldik7Cit9CisKIC8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBodWIgZGV2aWNlICovCiBzdGF0aWMgaW50IGh1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKIAlodWJfcXVpZXNjZShodWIsIEhVQl9QUkVfUkVTRVQpOworCWh1Yi0+aW5fcmVzZXQgPSAxOworCWh1Yl9wbV9iYXJyaWVyX2Zvcl9hbGxfcG9ydHMoaHViKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI5MCw2ICsxMjk3LDggQEAKIHsKIAlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAorCWh1Yi0+aW5fcmVzZXQgPSAwOworCWh1Yl9wbV9iYXJyaWVyX2Zvcl9hbGxfcG9ydHMoaHViKTsKIAlodWJfYWN0aXZhdGUoaHViLCBIVUJfUE9TVF9SRVNFVCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzA3LDYgKzEzMTYsNyBAQAogCWNoYXIgKm1lc3NhZ2UgPSAib3V0IG9mIG1lbW9yeSI7CiAJdW5zaWduZWQgdW5pdF9sb2FkOwogCXVuc2lnbmVkIGZ1bGxfbG9hZDsKKwl1bnNpZ25lZCBtYXhjaGlsZDsKIAogCWh1Yi0+YnVmZmVyID0ga21hbGxvYyhzaXplb2YoKmh1Yi0+YnVmZmVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFodWItPmJ1ZmZlcikgewpAQCAtMTM0NSwxMiArMTM1NSwxMSBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaGRldi0+bWF4Y2hpbGQgPSBodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0czsKLQlkZXZfaW5mbyAoaHViX2RldiwgIiVkIHBvcnQlcyBkZXRlY3RlZFxuIiwgaGRldi0+bWF4Y2hpbGQsCi0JCShoZGV2LT5tYXhjaGlsZCA9PSAxKSA/ICIiIDogInMiKTsKKwltYXhjaGlsZCA9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOworCWRldl9pbmZvKGh1Yl9kZXYsICIlZCBwb3J0JXMgZGV0ZWN0ZWRcbiIsIG1heGNoaWxkLAorCQkJKG1heGNoaWxkID09IDEpID8gIiIgOiAicyIpOwogCi0JaHViLT5wb3J0cyA9IGt6YWxsb2MoaGRldi0+bWF4Y2hpbGQgKiBzaXplb2Yoc3RydWN0IHVzYl9wb3J0ICopLAotCQkJICAgICBHRlBfS0VSTkVMKTsKKwlodWItPnBvcnRzID0ga3phbGxvYyhtYXhjaGlsZCAqIHNpemVvZihzdHJ1Y3QgdXNiX3BvcnQgKiksIEdGUF9LRVJORUwpOwogCWlmICghaHViLT5wb3J0cykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xMzcxLDExICsxMzgwLDExIEBACiAJCWludAlpOwogCQljaGFyCXBvcnRzdHJbVVNCX01BWENISUxEUkVOICsgMV07CiAKLQkJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBtYXhjaGlsZDsgaSsrKQogCQkJcG9ydHN0cltpXSA9IGh1Yi0+ZGVzY3JpcHRvci0+dS5ocy5EZXZpY2VSZW1vdmFibGUKIAkJCQkgICAgWygoaSArIDEpIC8gOCldICYgKDEgPDwgKChpICsgMSkgJSA4KSkKIAkJCQk/ICdGJyA6ICdSJzsKLQkJcG9ydHN0cltoZGV2LT5tYXhjaGlsZF0gPSAwOworCQlwb3J0c3RyW21heGNoaWxkXSA9IDA7CiAJCWRldl9kYmcoaHViX2RldiwgImNvbXBvdW5kIGRldmljZTsgcG9ydCByZW1vdmFibGUgc3RhdHVzOiAlc1xuIiwgcG9ydHN0cik7CiAJfSBlbHNlCiAJCWRldl9kYmcoaHViX2RldiwgInN0YW5kYWxvbmUgaHViXG4iKTsKQEAgLTE0ODcsNyArMTQ5Niw3IEBACiAJCWlmIChoY2QtPnBvd2VyX2J1ZGdldCA+IDApCiAJCQloZGV2LT5idXNfbUEgPSBoY2QtPnBvd2VyX2J1ZGdldDsKIAkJZWxzZQotCQkJaGRldi0+YnVzX21BID0gZnVsbF9sb2FkICogaGRldi0+bWF4Y2hpbGQ7CisJCQloZGV2LT5idXNfbUEgPSBmdWxsX2xvYWQgKiBtYXhjaGlsZDsKIAkJaWYgKGhkZXYtPmJ1c19tQSA+PSBmdWxsX2xvYWQpCiAJCQlodWItPm1BX3Blcl9wb3J0ID0gZnVsbF9sb2FkOwogCQllbHNlIHsKQEAgLTE1MDIsNyArMTUxMSw3IEBACiAJCQlodWItPmRlc2NyaXB0b3ItPmJIdWJDb250ckN1cnJlbnQpOwogCQlodWItPmxpbWl0ZWRfcG93ZXIgPSAxOwogCi0JCWlmIChyZW1haW5pbmcgPCBoZGV2LT5tYXhjaGlsZCAqIHVuaXRfbG9hZCkKKwkJaWYgKHJlbWFpbmluZyA8IG1heGNoaWxkICogdW5pdF9sb2FkKQogCQkJZGV2X3dhcm4oaHViX2RldiwKIAkJCQkJImluc3VmZmljaWVudCBwb3dlciBhdmFpbGFibGUgIgogCQkJCQkidG8gdXNlIGFsbCBkb3duc3RyZWFtIHBvcnRzXG4iKTsKQEAgLTE1NzAsMTUgKzE1NzksMTkgQEAKIAlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycyAmJiBibGlua2VubGlnaHRzKQogCQlodWItPmluZGljYXRvclswXSA9IElORElDQVRPUl9DWUNMRTsKIAotCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5tYXhjaGlsZDsgaSsrKSB7CisJbXV0ZXhfbG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG1heGNoaWxkOyBpKyspIHsKIAkJcmV0ID0gdXNiX2h1Yl9jcmVhdGVfcG9ydF9kZXZpY2UoaHViLCBpICsgMSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwKIAkJCQkiY291bGRuJ3QgY3JlYXRlIHBvcnQlZCBkZXZpY2UuXG4iLCBpICsgMSk7Ci0JCQloZGV2LT5tYXhjaGlsZCA9IGk7Ci0JCQlnb3RvIGZhaWxfa2VlcF9tYXhjaGlsZDsKKwkJCWJyZWFrOwogCQl9CiAJfQorCWhkZXYtPm1heGNoaWxkID0gaTsKKwltdXRleF91bmxvY2soJnVzYl9wb3J0X3BlZXJfbXV0ZXgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CiAKIAl1c2JfaHViX2FkanVzdF9kZXZpY2VyZW1vdmFibGUoaGRldiwgaHViLT5kZXNjcmlwdG9yKTsKIApAQCAtMTU4Niw4ICsxNTk5LDYgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQloZGV2LT5tYXhjaGlsZCA9IDA7Ci1mYWlsX2tlZXBfbWF4Y2hpbGQ6CiAJZGV2X2VyciAoaHViX2RldiwgImNvbmZpZyBmYWlsZWQsICVzIChlcnIgJWQpXG4iLAogCQkJbWVzc2FnZSwgcmV0KTsKIAkvKiBodWJfZGlzY29ubmVjdCgpIGZyZWVzIHVyYiBhbmQgZGVzY3JpcHRvciAqLwpAQCAtMTYyMyw2ICsxNjM0LDggQEAKIAlodWItPmVycm9yID0gMDsKIAlodWJfcXVpZXNjZShodWIsIEhVQl9ESVNDT05ORUNUKTsKIAorCW11dGV4X2xvY2soJnVzYl9wb3J0X3BlZXJfbXV0ZXgpOworCiAJLyogQXZvaWQgcmFjZXMgd2l0aCByZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKCkgKi8KIAlzcGluX2xvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAJcG9ydDEgPSBoZGV2LT5tYXhjaGlsZDsKQEAgLTE2MzMsNiArMTY0Niw4IEBACiAJZm9yICg7IHBvcnQxID4gMDsgLS1wb3J0MSkKIAkJdXNiX2h1Yl9yZW1vdmVfcG9ydF9kZXZpY2UoaHViLCBwb3J0MSk7CiAKKwltdXRleF91bmxvY2soJnVzYl9wb3J0X3BlZXJfbXV0ZXgpOworCiAJaWYgKGh1Yi0+aGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCWhpZ2hzcGVlZF9odWJzLS07CiAKQEAgLTIwMjQsNiArMjAzOSwxOCBAQAogCQloY2QtPmRyaXZlci0+ZnJlZV9kZXYoaGNkLCB1ZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgaHViX2Rpc2Nvbm5lY3RfY2hpbGRyZW4oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1Yih1ZGV2KTsKKwlpbnQgaTsKKworCS8qIEZyZWUgdXAgYWxsIHRoZSBjaGlsZHJlbiBiZWZvcmUgd2UgcmVtb3ZlIHRoaXMgZGV2aWNlICovCisJZm9yIChpID0gMDsgaSA8IHVkZXYtPm1heGNoaWxkOyBpKyspIHsKKwkJaWYgKGh1Yi0+cG9ydHNbaV0tPmNoaWxkKQorCQkJdXNiX2Rpc2Nvbm5lY3QoJmh1Yi0+cG9ydHNbaV0tPmNoaWxkKTsKKwl9Cit9CisKIC8qKgogICogdXNiX2Rpc2Nvbm5lY3QgLSBkaXNjb25uZWN0IGEgZGV2aWNlICh1c2Jjb3JlLWludGVybmFsKQogICogQHBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIGJlaW5nIGRpc2Nvbm5lY3RlZApAQCAtMjA0Miw5ICsyMDY5LDEwIEBACiAgKi8KIHZvaWQgdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKipwZGV2KQogewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gKnBkZXY7Ci0Jc3RydWN0IHVzYl9odWIJCSpodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIodWRldik7Ci0JaW50CQkJaTsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9ICpwZGV2OworCXN0cnVjdCB1c2JfaHViICpodWI7CisJaW50IHBvcnQxOwogCiAJLyogbWFyayB0aGUgZGV2aWNlIGFzIGluYWN0aXZlLCBzbyBhbnkgZnVydGhlciB1cmIgc3VibWlzc2lvbnMgZm9yCiAJICogdGhpcyBkZXZpY2UgKGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuKSB3aWxsIGZhaWwgaW1tZWRpYXRlbHkuCkBAIC0yMDU2LDExICsyMDg0LDcgQEAKIAogCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKIAotCS8qIEZyZWUgdXAgYWxsIHRoZSBjaGlsZHJlbiBiZWZvcmUgd2UgcmVtb3ZlIHRoaXMgZGV2aWNlICovCi0JZm9yIChpID0gMDsgaSA8IHVkZXYtPm1heGNoaWxkOyBpKyspIHsKLQkJaWYgKGh1Yi0+cG9ydHNbaV0tPmNoaWxkKQotCQkJdXNiX2Rpc2Nvbm5lY3QoJmh1Yi0+cG9ydHNbaV0tPmNoaWxkKTsKLQl9CisJaHViX2Rpc2Nvbm5lY3RfY2hpbGRyZW4odWRldik7CiAKIAkvKiBkZWFsbG9jYXRlIGhjZC9oYXJkd2FyZSBzdGF0ZSAuLi4gbnVraW5nIGFsbCBwZW5kaW5nIHVyYnMgYW5kCiAJICogY2xlYW5pbmcgdXAgYWxsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCkBAIC0yMDcxLDE2ICsyMDk1LDE5IEBACiAJdXNiX2hjZF9zeW5jaHJvbml6ZV91bmxpbmtzKHVkZXYpOwogCiAJaWYgKHVkZXYtPnBhcmVudCkgewotCQlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXNiX2h1Yl90b19zdHJ1Y3RfaHViKHVkZXYtPnBhcmVudCk7Ci0JCXN0cnVjdCB1c2JfcG9ydAkqcG9ydF9kZXYgPSBodWItPnBvcnRzW3VkZXYtPnBvcnRudW0gLSAxXTsKKwkJcG9ydDEgPSB1ZGV2LT5wb3J0bnVtOworCQlodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIodWRldi0+cGFyZW50KTsKKwkJcG9ydF9kZXYgPSBodWItPnBvcnRzW3BvcnQxIC0gMV07CiAKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJnVkZXYtPmRldi5rb2JqLCAicG9ydCIpOwogCQlzeXNmc19yZW1vdmVfbGluaygmcG9ydF9kZXYtPmRldi5rb2JqLCAiZGV2aWNlIik7CiAKLQkJaWYgKCFwb3J0X2Rldi0+ZGlkX3J1bnRpbWVfcHV0KQotCQkJcG1fcnVudGltZV9wdXQoJnBvcnRfZGV2LT5kZXYpOwotCQllbHNlCi0JCQlwb3J0X2Rldi0+ZGlkX3J1bnRpbWVfcHV0ID0gZmFsc2U7CisJCS8qCisJCSAqIEFzIHVzYl9wb3J0X3J1bnRpbWVfcmVzdW1lKCkgZGUtcmVmZXJlbmNlcyB1ZGV2LCBtYWtlCisJCSAqIHN1cmUgbm8gcmVzdW1lcyBvY2N1ciBkdXJpbmcgcmVtb3ZhbAorCQkgKi8KKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnQxLCBodWItPmNoaWxkX3VzYWdlX2JpdHMpKQorCQkJcG1fcnVudGltZV9nZXRfc3luYygmcG9ydF9kZXYtPmRldik7CiAJfQogCiAJdXNiX3JlbW92ZV9lcF9kZXZzKCZ1ZGV2LT5lcDApOwpAQCAtMjEwMiw2ICsyMTI5LDkgQEAKIAkqcGRldiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAKKwlpZiAocG9ydF9kZXYgJiYgdGVzdF9hbmRfY2xlYXJfYml0KHBvcnQxLCBodWItPmNoaWxkX3VzYWdlX2JpdHMpKQorCQlwbV9ydW50aW1lX3B1dCgmcG9ydF9kZXYtPmRldik7CisKIAlodWJfZnJlZV9kZXYodWRldik7CiAKIAlwdXRfZGV2aWNlKCZ1ZGV2LT5kZXYpOwpAQCAtMjI4OSw2ICsyMzE5LDIyIEBACiAJCXVkZXYtPnJlbW92YWJsZSA9IFVTQl9ERVZJQ0VfUkVNT1ZBQkxFOwogCWVsc2UKIAkJdWRldi0+cmVtb3ZhYmxlID0gVVNCX0RFVklDRV9GSVhFRDsKKworCS8qCisJICogUGxhdGZvcm0gZmlybXdhcmUgbWF5IGhhdmUgcG9wdWxhdGVkIGFuIGFsdGVybmF0aXZlIHZhbHVlIGZvcgorCSAqIHJlbW92YWJsZS4gIElmIHRoZSBwYXJlbnQgcG9ydCBoYXMgYSBrbm93biBjb25uZWN0X3R5cGUgdXNlCisJICogdGhhdCBpbnN0ZWFkLgorCSAqLworCXN3aXRjaCAoaHViLT5wb3J0c1t1ZGV2LT5wb3J0bnVtIC0gMV0tPmNvbm5lY3RfdHlwZSkgeworCWNhc2UgVVNCX1BPUlRfQ09OTkVDVF9UWVBFX0hPVF9QTFVHOgorCQl1ZGV2LT5yZW1vdmFibGUgPSBVU0JfREVWSUNFX1JFTU9WQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUE9SVF9DT05ORUNUX1RZUEVfSEFSRF9XSVJFRDoKKwkJdWRldi0+cmVtb3ZhYmxlID0gVVNCX0RFVklDRV9GSVhFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogdXNlIHdoYXQgd2FzIHNldCBhYm92ZSAqLworCQlicmVhazsKKwl9CiB9CiAKIC8qKgpAQCAtMjM1OCwxMSArMjQwNCw3IEBACiAKIAlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnVkZXYtPmRldik7CiAKLQkvKgotCSAqIGNoZWNrIHdoZXRoZXIgdGhlIGh1YiBtYXJrcyB0aGlzIHBvcnQgYXMgbm9uLXJlbW92YWJsZS4gRG8gaXQKLQkgKiBub3cgc28gdGhhdCBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhIGNhbiBvdmVycmlkZSBpdCBpbgotCSAqIGRldmljZV9hZGQoKQotCSAqLworCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGh1YiBvciBmaXJtd2FyZSBtYXJrcyB0aGlzIHBvcnQgYXMgbm9uLXJlbW92YWJsZSAqLwogCWlmICh1ZGV2LT5wYXJlbnQpCiAJCXNldF91c2JfcG9ydF9yZW1vdmFibGUodWRldik7CiAKQEAgLTIzNzksNyArMjQyMSw4IEBACiAJLyogQ3JlYXRlIGxpbmsgZmlsZXMgYmV0d2VlbiBjaGlsZCBkZXZpY2UgYW5kIHVzYiBwb3J0IGRldmljZS4gKi8KIAlpZiAodWRldi0+cGFyZW50KSB7CiAJCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIodWRldi0+cGFyZW50KTsKLQkJc3RydWN0IHVzYl9wb3J0CSpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbdWRldi0+cG9ydG51bSAtIDFdOworCQlpbnQgcG9ydDEgPSB1ZGV2LT5wb3J0bnVtOworCQlzdHJ1Y3QgdXNiX3BvcnQJKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOwogCiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ1ZGV2LT5kZXYua29iaiwKIAkJCQkmcG9ydF9kZXYtPmRldi5rb2JqLCAicG9ydCIpOwpAQCAtMjM5Myw3ICsyNDM2LDggQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCi0JCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBvcnRfZGV2LT5kZXYpOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydDEsIGh1Yi0+Y2hpbGRfdXNhZ2VfYml0cykpCisJCQlwbV9ydW50aW1lX2dldF9zeW5jKCZwb3J0X2Rldi0+ZGV2KTsKIAl9CiAKIAkodm9pZCkgdXNiX2NyZWF0ZV9lcF9kZXZzKCZ1ZGV2LT5kZXYsICZ1ZGV2LT5lcDAsIHVkZXYpOwpAQCAtMjU2MSw5ICsyNjA1LDkgQEAKIAkJaWYgKGRlbGF5X3RpbWUgPj0gMiAqIEhVQl9TSE9SVF9SRVNFVF9USU1FKQogCQkJZGVsYXkgPSBIVUJfTE9OR19SRVNFVF9USU1FOwogCi0JCWRldl9kYmcgKGh1Yi0+aW50ZmRldiwKLQkJCSJwb3J0ICVkIG5vdCAlc3Jlc2V0IHlldCwgd2FpdGluZyAlZG1zXG4iLAotCQkJcG9ydDEsIHdhcm0gPyAid2FybSAiIDogIiIsIGRlbGF5KTsKKwkJZGV2X2RiZygmaHViLT5wb3J0c1twb3J0MSAtIDFdLT5kZXYsCisJCQkJIm5vdCAlc3Jlc2V0IHlldCwgd2FpdGluZyAlZG1zXG4iLAorCQkJCXdhcm0gPyAid2FybSAiIDogIiIsIGRlbGF5KTsKIAl9CiAKIAlpZiAoKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1JFU0VUKSkKQEAgLTI2NDcsNiArMjY5MSw3IEBACiB7CiAJaW50IGksIHN0YXR1czsKIAl1MTYgcG9ydGNoYW5nZSwgcG9ydHN0YXR1czsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOwogCiAJaWYgKCFodWJfaXNfc3VwZXJzcGVlZChodWItPmhkZXYpKSB7CiAJCWlmICh3YXJtKSB7CkBAIC0yNjgwLDkgKzI3MjUsOSBAQAogCQlpZiAoc3RhdHVzID09IC1FTk9ERVYpIHsKIAkJCTsJLyogVGhlIGh1YiBpcyBnb25lICovCiAJCX0gZWxzZSBpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwKLQkJCQkJImNhbm5vdCAlc3Jlc2V0IHBvcnQgJWQgKGVyciA9ICVkKVxuIiwKLQkJCQkJd2FybSA/ICJ3YXJtICIgOiAiIiwgcG9ydDEsIHN0YXR1cyk7CisJCQlkZXZfZXJyKCZwb3J0X2Rldi0+ZGV2LAorCQkJCQkiY2Fubm90ICVzcmVzZXQgKGVyciA9ICVkKVxuIiwKKwkJCQkJd2FybSA/ICJ3YXJtICIgOiAiIiwgc3RhdHVzKTsKIAkJfSBlbHNlIHsKIAkJCXN0YXR1cyA9IGh1Yl9wb3J0X3dhaXRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXksCiAJCQkJCQkJCXdhcm0pOwpAQCAtMjcxNSwyMSArMjc2MCwxOSBAQAogCQkJICogaG90IG9yIHdhcm0gcmVzZXQgZmFpbGVkLiAgVHJ5IGFub3RoZXIgd2FybSByZXNldC4KIAkJCSAqLwogCQkJaWYgKCF3YXJtKSB7Ci0JCQkJZGV2X2RiZyhodWItPmludGZkZXYsICJob3QgcmVzZXQgZmFpbGVkLCB3YXJtIHJlc2V0IHBvcnQgJWRcbiIsCi0JCQkJCQlwb3J0MSk7CisJCQkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwKKwkJCQkJCSJob3QgcmVzZXQgZmFpbGVkLCB3YXJtIHJlc2V0XG4iKTsKIAkJCQl3YXJtID0gdHJ1ZTsKIAkJCX0KIAkJfQogCi0JCWRldl9kYmcgKGh1Yi0+aW50ZmRldiwKLQkJCSJwb3J0ICVkIG5vdCBlbmFibGVkLCB0cnlpbmcgJXNyZXNldCBhZ2Fpbi4uLlxuIiwKLQkJCXBvcnQxLCB3YXJtID8gIndhcm0gIiA6ICIiKTsKKwkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwKKwkJCQkibm90IGVuYWJsZWQsIHRyeWluZyAlc3Jlc2V0IGFnYWluLi4uXG4iLAorCQkJCXdhcm0gPyAid2FybSAiIDogIiIpOwogCQlkZWxheSA9IEhVQl9MT05HX1JFU0VUX1RJTUU7CiAJfQogCi0JZGV2X2VyciAoaHViLT5pbnRmZGV2LAotCQkiQ2Fubm90IGVuYWJsZSBwb3J0ICVpLiAgTWF5YmUgdGhlIFVTQiBjYWJsZSBpcyBiYWQ/XG4iLAotCQlwb3J0MSk7CisJZGV2X2VycigmcG9ydF9kZXYtPmRldiwgIkNhbm5vdCBlbmFibGUuIE1heWJlIHRoZSBVU0IgY2FibGUgaXMgYmFkP1xuIik7CiAKIGRvbmU6CiAJaWYgKCFodWJfaXNfc3VwZXJzcGVlZChodWItPmhkZXYpKQpAQCAtMjc1NCw2ICsyNzk3LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdXNiX2xvY2tfcG9ydChzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2KQorCQlfX2FjcXVpcmVzKCZwb3J0X2Rldi0+c3RhdHVzX2xvY2spCit7CisJbXV0ZXhfbG9jaygmcG9ydF9kZXYtPnN0YXR1c19sb2NrKTsKKwlfX2FjcXVpcmUoJnBvcnRfZGV2LT5zdGF0dXNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl91bmxvY2tfcG9ydChzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2KQorCQlfX3JlbGVhc2VzKCZwb3J0X2Rldi0+c3RhdHVzX2xvY2spCit7CisJbXV0ZXhfdW5sb2NrKCZwb3J0X2Rldi0+c3RhdHVzX2xvY2spOworCV9fcmVsZWFzZSgmcG9ydF9kZXYtPnN0YXR1c19sb2NrKTsKK30KKwogI2lmZGVmCUNPTkZJR19QTQogCiAvKiBDaGVjayBpZiBhIHBvcnQgaXMgc3VzcGVuZGVkKFVTQjIuMCBwb3J0KSBvciBpbiBVMyBzdGF0ZShVU0IzLjAgcG9ydCkgKi8KQEAgLTI3ODAsNiArMjgzNyw4IEBACiAJCXN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwKIAkJaW50IHN0YXR1cywgdW5zaWduZWQgcG9ydGNoYW5nZSwgdW5zaWduZWQgcG9ydHN0YXR1cykKIHsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOworCiAJLyogSXMgdGhlIGRldmljZSBzdGlsbCBwcmVzZW50PyAqLwogCWlmIChzdGF0dXMgfHwgcG9ydF9pc19zdXNwZW5kZWQoaHViLCBwb3J0c3RhdHVzKSB8fAogCQkJIXBvcnRfaXNfcG93ZXJfb24oaHViLCBwb3J0c3RhdHVzKSB8fApAQCAtMjc5OSw5ICsyODU4LDggQEAKIAl9CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9kYmcoaHViLT5pbnRmZGV2LAotCQkJCSJwb3J0ICVkIHN0YXR1cyAlMDR4LiUwNHggYWZ0ZXIgcmVzdW1lLCAlZFxuIiwKLQkJCQlwb3J0MSwgcG9ydGNoYW5nZSwgcG9ydHN0YXR1cywgc3RhdHVzKTsKKwkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgInN0YXR1cyAlMDR4LiUwNHggYWZ0ZXIgcmVzdW1lLCAlZFxuIiwKKwkJCQlwb3J0Y2hhbmdlLCBwb3J0c3RhdHVzLCBzdGF0dXMpOwogCX0gZWxzZSBpZiAodWRldi0+cmVzZXRfcmVzdW1lKSB7CiAKIAkJLyogTGF0ZSBwb3J0IGhhbmRvZmYgY2FuIHNldCBzdGF0dXMtY2hhbmdlIGJpdHMgKi8KQEAgLTI5NzUsNiArMzAzMyw4IEBACiAJaW50CQlzdGF0dXM7CiAJYm9vbAkJcmVhbGx5X3N1c3BlbmQgPSB0cnVlOwogCisJdXNiX2xvY2tfcG9ydChwb3J0X2Rldik7CisKIAkvKiBlbmFibGUgcmVtb3RlIHdha2V1cCB3aGVuIGFwcHJvcHJpYXRlOyB0aGlzIGxldHMgdGhlIGRldmljZQogCSAqIHdha2UgdXAgdGhlIHVwc3RyZWFtIGh1YiAoaW5jbHVkaW5nIG1heWJlIHRoZSByb290IGh1YikuCiAJICoKQEAgLTMwMzIsOCArMzA5Miw3IEBACiAJCXN0YXR1cyA9IDA7CiAJfQogCWlmIChzdGF0dXMpIHsKLQkJZGV2X2RiZyhodWItPmludGZkZXYsICJjYW4ndCBzdXNwZW5kIHBvcnQgJWQsIHN0YXR1cyAlZFxuIiwKLQkJCQlwb3J0MSwgc3RhdHVzKTsKKwkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgImNhbid0IHN1c3BlbmQsIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAogCQkvKiBUcnkgdG8gZW5hYmxlIFVTQjMgTFBNIGFuZCBMVE0gYWdhaW4gKi8KIAkJdXNiX3VubG9ja2VkX2VuYWJsZV9scG0odWRldik7CkBAIC0zMDY0LDEyICszMTIzLDEzIEBACiAJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9TVVNQRU5ERUQpOwogCX0KIAotCWlmIChzdGF0dXMgPT0gMCAmJiAhdWRldi0+ZG9fcmVtb3RlX3dha2V1cCAmJiB1ZGV2LT5wZXJzaXN0X2VuYWJsZWQpIHsKKwlpZiAoc3RhdHVzID09IDAgJiYgIXVkZXYtPmRvX3JlbW90ZV93YWtldXAgJiYgdWRldi0+cGVyc2lzdF9lbmFibGVkCisJCQkmJiB0ZXN0X2FuZF9jbGVhcl9iaXQocG9ydDEsIGh1Yi0+Y2hpbGRfdXNhZ2VfYml0cykpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBvcnRfZGV2LT5kZXYpOwotCQlwb3J0X2Rldi0+ZGlkX3J1bnRpbWVfcHV0ID0gdHJ1ZTsKLQl9CiAKIAl1c2JfbWFya19sYXN0X2J1c3koaHViLT5oZGV2KTsKKworCXVzYl91bmxvY2tfcG9ydChwb3J0X2Rldik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIwOSw5ICszMjY5LDggQEAKIAlpbnQJCXN0YXR1czsKIAl1MTYJCXBvcnRjaGFuZ2UsIHBvcnRzdGF0dXM7CiAKLQlpZiAocG9ydF9kZXYtPmRpZF9ydW50aW1lX3B1dCkgeworCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0MSwgaHViLT5jaGlsZF91c2FnZV9iaXRzKSkgewogCQlzdGF0dXMgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZwb3J0X2Rldi0+ZGV2KTsKLQkJcG9ydF9kZXYtPmRpZF9ydW50aW1lX3B1dCA9IGZhbHNlOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiY2FuJ3QgcmVzdW1lIHVzYiBwb3J0LCBzdGF0dXMgJWRcbiIsCiAJCQkJCXN0YXR1cyk7CkBAIC0zMjE5LDE1ICszMjc4LDEzIEBACiAJCX0KIAl9CiAKKwl1c2JfbG9ja19wb3J0KHBvcnRfZGV2KTsKKwogCS8qIFNraXAgdGhlIGluaXRpYWwgQ2xlYXItU3VzcGVuZCBzdGVwIGZvciBhIHJlbW90ZSB3YWtldXAgKi8KIAlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKIAlpZiAoc3RhdHVzID09IDAgJiYgIXBvcnRfaXNfc3VzcGVuZGVkKGh1YiwgcG9ydHN0YXR1cykpCiAJCWdvdG8gU3VzcGVuZENsZWFyZWQ7CiAKLQkvKiBkZXZfZGJnKGh1Yi0+aW50ZmRldiwgInJlc3VtZSBwb3J0ICVkXG4iLCBwb3J0MSk7ICovCi0KLQlzZXRfYml0KHBvcnQxLCBodWItPmJ1c3lfYml0cyk7Ci0KIAkvKiBzZWUgNy4xLjcuNzsgYWZmZWN0cyBwb3dlciB1c2FnZSwgYnV0IG5vdCBidWRnZXRpbmcgKi8KIAlpZiAoaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkKIAkJc3RhdHVzID0gaHViX3NldF9wb3J0X2xpbmtfc3RhdGUoaHViLCBwb3J0MSwgVVNCX1NTX1BPUlRfTFNfVTApOwpAQCAtMzIzNSw4ICszMjkyLDcgQEAKIAkJc3RhdHVzID0gdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsCiAJCQkJcG9ydDEsIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CiAJaWYgKHN0YXR1cykgewotCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwgImNhbid0IHJlc3VtZSBwb3J0ICVkLCBzdGF0dXMgJWRcbiIsCi0JCQkJcG9ydDEsIHN0YXR1cyk7CisJCWRldl9kYmcoJnBvcnRfZGV2LT5kZXYsICJjYW4ndCByZXN1bWUsIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAl9IGVsc2UgewogCQkvKiBkcml2ZSByZXN1bWUgZm9yIGF0IGxlYXN0IDIwIG1zZWMgKi8KIAkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiICVzcmVzdW1lXG4iLApAQCAtMzI2Nyw4ICszMzIzLDYgQEAKIAkJfQogCX0KIAotCWNsZWFyX2JpdChwb3J0MSwgaHViLT5idXN5X2JpdHMpOwotCiAJc3RhdHVzID0gY2hlY2tfcG9ydF9yZXN1bWVfdHlwZSh1ZGV2LAogCQkJaHViLCBwb3J0MSwgc3RhdHVzLCBwb3J0Y2hhbmdlLCBwb3J0c3RhdHVzKTsKIAlpZiAoc3RhdHVzID09IDApCkBAIC0zMjg2LDE2ICszMzQwLDE4IEBACiAJCXVzYl91bmxvY2tlZF9lbmFibGVfbHBtKHVkZXYpOwogCX0KIAorCXVzYl91bmxvY2tfcG9ydChwb3J0X2Rldik7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAjaWZkZWYJQ09ORklHX1BNX1JVTlRJTUUKIAotLyogY2FsbGVyIGhhcyBsb2NrZWQgdWRldiAqLwogaW50IHVzYl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludAlzdGF0dXMgPSAwOwogCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwogCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CiAJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiAlc3Jlc3VtZVxuIiwgIndha2V1cC0iKTsKIAkJc3RhdHVzID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOwpAQCAtMzMwNCw5ICszMzYwLDU5IEBACiAJCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCQl9CiAJfQorCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qIFJldHVybnMgMSBpZiB0aGVyZSB3YXMgYSByZW1vdGUgd2FrZXVwIGFuZCBhIGNvbm5lY3Qgc3RhdHVzIGNoYW5nZS4gKi8KK3N0YXRpYyBpbnQgaHViX2hhbmRsZV9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfaHViICpodWIsIHVuc2lnbmVkIGludCBwb3J0LAorCQl1MTYgcG9ydHN0YXR1cywgdTE2IHBvcnRjaGFuZ2UpCisJCV9fbXVzdF9ob2xkKCZwb3J0X2Rldi0+c3RhdHVzX2xvY2spCit7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydCAtIDFdOworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCBjb25uZWN0X2NoYW5nZSA9IDA7CisJaW50IHJldDsKKworCWhkZXYgPSBodWItPmhkZXY7CisJdWRldiA9IHBvcnRfZGV2LT5jaGlsZDsKKwlpZiAoIWh1Yl9pc19zdXBlcnNwZWVkKGhkZXYpKSB7CisJCWlmICghKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCkpCisJCQlyZXR1cm4gMDsKKwkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0LCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJfSBlbHNlIHsKKwkJaWYgKCF1ZGV2IHx8IHVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9TVVNQRU5ERUQgfHwKKwkJCQkgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0xJTktfU1RBVEUpICE9CisJCQkJIFVTQl9TU19QT1JUX0xTX1UwKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKHVkZXYpIHsKKwkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KKwkJbXNsZWVwKDEwKTsKKworCQl1c2JfdW5sb2NrX3BvcnQocG9ydF9kZXYpOworCQlyZXQgPSB1c2JfcmVtb3RlX3dha2V1cCh1ZGV2KTsKKwkJdXNiX2xvY2tfcG9ydChwb3J0X2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJY29ubmVjdF9jaGFuZ2UgPSAxOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBwb3J0LCAxKTsKKwl9CisJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgInJlc3VtZSwgc3RhdHVzICVkXG4iLCByZXQpOworCXJldHVybiBjb25uZWN0X2NoYW5nZTsKK30KKworI2Vsc2UKKworc3RhdGljIGludCBodWJfaGFuZGxlX3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9odWIgKmh1YiwgdW5zaWduZWQgaW50IHBvcnQsCisJCXUxNiBwb3J0c3RhdHVzLCB1MTYgcG9ydGNoYW5nZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgY2hlY2tfcG9ydHNfY2hhbmdlZChzdHJ1Y3QgdXNiX2h1YiAqaHViKQpAQCAtMzMzNywxMiArMzQ0MywxMSBAQAogCSAqLwogCWh1Yi0+d2FrZXVwX2VuYWJsZWRfZGVzY2VuZGFudHMgPSAwOwogCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBoZGV2LT5tYXhjaGlsZDsgcG9ydDErKykgewotCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwkJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0X2Rldi0+Y2hpbGQ7CiAKLQkJdWRldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+Y2hpbGQ7CiAJCWlmICh1ZGV2ICYmIHVkZXYtPmNhbl9zdWJtaXQpIHsKLQkJCWRldl93YXJuKCZpbnRmLT5kZXYsICJwb3J0ICVkIG5vdCBzdXNwZW5kZWQgeWV0XG4iLAotCQkJCQlwb3J0MSk7CisJCQlkZXZfd2FybigmcG9ydF9kZXYtPmRldiwgIm5vdCBzdXNwZW5kZWQgeWV0XG4iKTsKIAkJCWlmIChQTVNHX0lTX0FVVE8obXNnKSkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQl9CkBAIC0zODYxLDYgKzM5NjYsMTIgQEAKIHZvaWQgdXNiX2VuYWJsZV9sdG0oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpIHsgfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuYWJsZV9sdG0pOwogCitzdGF0aWMgaW50IGh1Yl9oYW5kbGVfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2h1YiAqaHViLCB1bnNpZ25lZCBpbnQgcG9ydCwKKwkJdTE2IHBvcnRzdGF0dXMsIHUxNiBwb3J0Y2hhbmdlKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIApAQCAtMzg4Miw5ICszOTkzLDEwIEBACiBpbnQgaHViX3BvcnRfZGVib3VuY2Uoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLCBib29sIG11c3RfYmVfY29ubmVjdGVkKQogewogCWludCByZXQ7Ci0JaW50IHRvdGFsX3RpbWUsIHN0YWJsZV90aW1lID0gMDsKIAl1MTYgcG9ydGNoYW5nZSwgcG9ydHN0YXR1czsKIAl1bnNpZ25lZCBjb25uZWN0aW9uID0gMHhmZmZmOworCWludCB0b3RhbF90aW1lLCBzdGFibGVfdGltZSA9IDA7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKIAogCWZvciAodG90YWxfdGltZSA9IDA7IDsgdG90YWxfdGltZSArPSBIVUJfREVCT1VOQ0VfU1RFUCkgewogCQlyZXQgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKQEAgLTM5MTMsOSArNDAyNSw4IEBACiAJCW1zbGVlcChIVUJfREVCT1VOQ0VfU1RFUCk7CiAJfQogCi0JZGV2X2RiZyAoaHViLT5pbnRmZGV2LAotCQkiZGVib3VuY2U6IHBvcnQgJWQ6IHRvdGFsICVkbXMgc3RhYmxlICVkbXMgc3RhdHVzIDB4JXhcbiIsCi0JCXBvcnQxLCB0b3RhbF90aW1lLCBzdGFibGVfdGltZSwgcG9ydHN0YXR1cyk7CisJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgImRlYm91bmNlIHRvdGFsICVkbXMgc3RhYmxlICVkbXMgc3RhdHVzIDB4JXhcbiIsCisJCQl0b3RhbF90aW1lLCBzdGFibGVfdGltZSwgcG9ydHN0YXR1cyk7CiAKIAlpZiAoc3RhYmxlX3RpbWUgPCBIVUJfREVCT1VOQ0VfU1RBQkxFKQogCQlyZXR1cm4gLUVUSU1FRE9VVDsKQEAgLTM5NzQsMTMgKzQwODUsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgaHViX3NldF9pbml0aWFsX3VzYjJfbHBtX3BvbGljeShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQlpbnQgY29ubmVjdF90eXBlOworCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIodWRldi0+cGFyZW50KTsKKwlpbnQgY29ubmVjdF90eXBlID0gVVNCX1BPUlRfQ09OTkVDVF9UWVBFX1VOS05PV047CiAKIAlpZiAoIXVkZXYtPnVzYjJfaHdfbHBtX2NhcGFibGUpCiAJCXJldHVybjsKIAotCWNvbm5lY3RfdHlwZSA9IHVzYl9nZXRfaHViX3BvcnRfY29ubmVjdF90eXBlKHVkZXYtPnBhcmVudCwKLQkJCXVkZXYtPnBvcnRudW0pOworCWlmIChodWIpCisJCWNvbm5lY3RfdHlwZSA9IGh1Yi0+cG9ydHNbdWRldi0+cG9ydG51bSAtIDFdLT5jb25uZWN0X3R5cGU7CiAKIAlpZiAoKHVkZXYtPmJvcy0+ZXh0X2NhcC0+Ym1BdHRyaWJ1dGVzICYgY3B1X3RvX2xlMzIoVVNCX0JFU0xfU1VQUE9SVCkpIHx8CiAJCQljb25uZWN0X3R5cGUgPT0gVVNCX1BPUlRfQ09OTkVDVF9UWVBFX0hBUkRfV0lSRUQpIHsKQEAgLTQwMDgsMTYgKzQxMjAsMTUgQEAKICAqIFJldHVybnMgZGV2aWNlIGluIFVTQl9TVEFURV9BRERSRVNTLCBleGNlcHQgb24gZXJyb3IuCiAgKgogICogSWYgdGhpcyBpcyBjYWxsZWQgZm9yIGFuIGFscmVhZHktZXhpc3RpbmcgZGV2aWNlIChhcyBwYXJ0IG9mCi0gKiB1c2JfcmVzZXRfYW5kX3ZlcmlmeV9kZXZpY2UpLCB0aGUgY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4gIEZvciBhCi0gKiBuZXdseSBkZXRlY3RlZCBkZXZpY2UgdGhhdCBpcyBub3QgYWNjZXNzaWJsZSB0aHJvdWdoIGFueSBnbG9iYWwKLSAqIHBvaW50ZXJzLCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gbG9jayB0aGUgZGV2aWNlLgorICogdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKSwgdGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2sgYW5kCisgKiB0aGUgcG9ydCBsb2NrLiAgRm9yIGEgbmV3bHkgZGV0ZWN0ZWQgZGV2aWNlIHRoYXQgaXMgbm90IGFjY2Vzc2libGUKKyAqIHRocm91Z2ggYW55IGdsb2JhbCBwb2ludGVycywgaXQncyBub3QgbmVjZXNzYXJ5IHRvIGxvY2sgdGhlIGRldmljZSwKKyAqIGJ1dCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gbG9jayB0aGUgcG9ydC4KICAqLwogc3RhdGljIGludAogaHViX3BvcnRfaW5pdCAoc3RydWN0IHVzYl9odWIgKmh1Yiwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBwb3J0MSwKIAkJaW50IHJldHJ5X2NvdW50ZXIpCiB7Ci0Jc3RhdGljIERFRklORV9NVVRFWCh1c2JfYWRkcmVzczBfbXV0ZXgpOwotCiAJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CiAJaW50CQkJaSwgaiwgcmV0dmFsOwpAQCAtNDA0MCw3ICs0MTUxLDcgQEAKIAlpZiAob2xkc3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKIAkJZGVsYXkgPSBIVUJfTE9OR19SRVNFVF9USU1FOwogCi0JbXV0ZXhfbG9jaygmdXNiX2FkZHJlc3MwX211dGV4KTsKKwltdXRleF9sb2NrKCZoZGV2LT5idXMtPnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKIAkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCiAJLyogRklYTUUgYSBVU0IgMi4wIGRldmljZSBtYXkgbW9ycGggaW50byBTdXBlclNwZWVkIG9uIHJlc2V0LiAqLwpAQCAtNDMxNyw3ICs0NDI4LDcgQEAKIAkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAwKTsKIAkJdXBkYXRlX2Rldm51bSh1ZGV2LCBkZXZudW0pOwkvKiBmb3IgZGlzY29ubmVjdCBwcm9jZXNzaW5nICovCiAJfQotCW11dGV4X3VubG9jaygmdXNiX2FkZHJlc3MwX211dGV4KTsKKwltdXRleF91bmxvY2soJmhkZXYtPmJ1cy0+dXNiX2FkZHJlc3MwX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MzU4LDkgKzQ0NjksMTAgQEAKIAogCXJlbWFpbmluZyA9IGhkZXYtPmJ1c19tQSAtIGh1Yi0+ZGVzY3JpcHRvci0+Ykh1YkNvbnRyQ3VycmVudDsKIAlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gaGRldi0+bWF4Y2hpbGQ7ICsrcG9ydDEpIHsKLQkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBodWItPnBvcnRzW3BvcnQxIC0gMV0tPmNoaWxkOwotCQlpbnQJCQlkZWx0YTsKLQkJdW5zaWduZWQJCXVuaXRfbG9hZDsKKwkJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0X2Rldi0+Y2hpbGQ7CisJCXVuc2lnbmVkIHVuaXRfbG9hZDsKKwkJaW50IGRlbHRhOwogCiAJCWlmICghdWRldikKIAkJCWNvbnRpbnVlOwpAQCAtNDM4MCw5ICs0NDkyLDggQEAKIAkJZWxzZQogCQkJZGVsdGEgPSA4OwogCQlpZiAoZGVsdGEgPiBodWItPm1BX3Blcl9wb3J0KQotCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwKLQkJCQkgIiVkbUEgaXMgb3ZlciAldW1BIGJ1ZGdldCBmb3IgcG9ydCAlZCFcbiIsCi0JCQkJIGRlbHRhLCBodWItPm1BX3Blcl9wb3J0LCBwb3J0MSk7CisJCQlkZXZfd2FybigmcG9ydF9kZXYtPmRldiwgIiVkbUEgaXMgb3ZlciAldW1BIGJ1ZGdldCFcbiIsCisJCQkJCWRlbHRhLCBodWItPm1BX3Blcl9wb3J0KTsKIAkJcmVtYWluaW5nIC09IGRlbHRhOwogCX0KIAlpZiAocmVtYWluaW5nIDwgMCkgewpAQCAtNDM5Myw3OCArNDUwNCwyMyBAQAogCXJldHVybiByZW1haW5pbmc7CiB9CiAKLS8qIEhhbmRsZSBwaHlzaWNhbCBvciBsb2dpY2FsIGNvbm5lY3Rpb24gY2hhbmdlIGV2ZW50cy4KLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbjoKLSAqIAlhIHBvcnQgY29ubmVjdGlvbi1jaGFuZ2Ugb2NjdXJzOwotICoJYSBwb3J0IGVuYWJsZS1jaGFuZ2Ugb2NjdXJzIChvZnRlbiBjYXVzZWQgYnkgRU1JKTsKLSAqCXVzYl9yZXNldF9hbmRfdmVyaWZ5X2RldmljZSgpIGVuY291bnRlcnMgY2hhbmdlZCBkZXNjcmlwdG9ycyAoYXMgZnJvbQotICoJCWEgZmlybXdhcmUgZG93bmxvYWQpCi0gKiBjYWxsZXIgYWxyZWFkeSBsb2NrZWQgdGhlIGh1YgotICovCi1zdGF0aWMgdm9pZCBodWJfcG9ydF9jb25uZWN0X2NoYW5nZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCi0JCQkJCXUxNiBwb3J0c3RhdHVzLCB1MTYgcG9ydGNoYW5nZSkKK3N0YXRpYyB2b2lkIGh1Yl9wb3J0X2Nvbm5lY3Qoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLCB1MTYgcG9ydHN0YXR1cywKKwkJdTE2IHBvcnRjaGFuZ2UpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7Ci0Jc3RydWN0IGRldmljZSAqaHViX2RldiA9IGh1Yi0+aW50ZmRldjsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gYnVzX3RvX2hjZChoZGV2LT5idXMpOwotCXVuc2lnbmVkIHdIdWJDaGFyYWN0ZXJpc3RpY3MgPQotCQkJbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlpbnQgc3RhdHVzLCBpOwogCXVuc2lnbmVkIHVuaXRfbG9hZDsKLQotCWRldl9kYmcgKGh1Yl9kZXYsCi0JCSJwb3J0ICVkLCBzdGF0dXMgJTA0eCwgY2hhbmdlICUwNHgsICVzXG4iLAotCQlwb3J0MSwgcG9ydHN0YXR1cywgcG9ydGNoYW5nZSwgcG9ydHNwZWVkKGh1YiwgcG9ydHN0YXR1cykpOwotCi0JaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMpIHsKLQkJc2V0X3BvcnRfbGVkKGh1YiwgcG9ydDEsIEhVQl9MRURfQVVUTyk7Ci0JCWh1Yi0+aW5kaWNhdG9yW3BvcnQxLTFdID0gSU5ESUNBVE9SX0FVVE87Ci0JfQotCi0jaWZkZWYJQ09ORklHX1VTQl9PVEcKLQkvKiBkdXJpbmcgSE5QLCBkb24ndCByZXBlYXQgdGhlIGRlYm91bmNlICovCi0JaWYgKGhkZXYtPmJ1cy0+aXNfYl9ob3N0KQotCQlwb3J0Y2hhbmdlICY9IH4oVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gfAotCQkJCVVTQl9QT1JUX1NUQVRfQ19FTkFCTEUpOwotI2VuZGlmCi0KLQkvKiBUcnkgdG8gcmVzdXNjaXRhdGUgYW4gZXhpc3RpbmcgZGV2aWNlICovCi0JdWRldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+Y2hpbGQ7Ci0JaWYgKChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSAmJiB1ZGV2ICYmCi0JCQl1ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKLQkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwotCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSB7Ci0JCQlzdGF0dXMgPSAwOwkJLyogTm90aGluZyB0byBkbyAqLwotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLQkJfSBlbHNlIGlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEICYmCi0JCQkJdWRldi0+cGVyc2lzdF9lbmFibGVkKSB7Ci0JCQkvKiBGb3IgYSBzdXNwZW5kZWQgZGV2aWNlLCB0cmVhdCB0aGlzIGFzIGEKLQkJCSAqIHJlbW90ZSB3YWtldXAgZXZlbnQuCi0JCQkgKi8KLQkJCXN0YXR1cyA9IHVzYl9yZW1vdGVfd2FrZXVwKHVkZXYpOwotI2VuZGlmCi0KLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IC1FTk9ERVY7CS8qIERvbid0IHJlc3VzY2l0YXRlICovCi0JCX0KLQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7Ci0KLQkJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCQljbGVhcl9iaXQocG9ydDEsIGh1Yi0+Y2hhbmdlX2JpdHMpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQorCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHBvcnRfZGV2LT5jaGlsZDsKIAogCS8qIERpc2Nvbm5lY3QgYW55IGV4aXN0aW5nIGRldmljZXMgdW5kZXIgdGhpcyBwb3J0ICovCiAJaWYgKHVkZXYpIHsKIAkJaWYgKGhjZC0+cGh5ICYmICFoZGV2LT5wYXJlbnQgJiYKIAkJCQkhKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pKQogCQkJdXNiX3BoeV9ub3RpZnlfZGlzY29ubmVjdChoY2QtPnBoeSwgdWRldi0+c3BlZWQpOwotCQl1c2JfZGlzY29ubmVjdCgmaHViLT5wb3J0c1twb3J0MSAtIDFdLT5jaGlsZCk7CisJCXVzYl9kaXNjb25uZWN0KCZwb3J0X2Rldi0+Y2hpbGQpOwogCX0KLQljbGVhcl9iaXQocG9ydDEsIGh1Yi0+Y2hhbmdlX2JpdHMpOwogCiAJLyogV2UgY2FuIGZvcmdldCBhYm91dCBhICJyZW1vdmVkIiBkZXZpY2Ugd2hlbiB0aGVyZSdzIGEgcGh5c2ljYWwKIAkgKiBkaXNjb25uZWN0IG9yIHRoZSBjb25uZWN0IHN0YXR1cyBjaGFuZ2VzLgpAQCAtNDQ3OCw4ICs0NTM0LDggQEAKIAkJc3RhdHVzID0gaHViX3BvcnRfZGVib3VuY2VfYmVfc3RhYmxlKGh1YiwgcG9ydDEpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJaWYgKHN0YXR1cyAhPSAtRU5PREVWICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCQlkZXZfZXJyKGh1Yl9kZXYsICJjb25uZWN0LWRlYm91bmNlIGZhaWxlZCwgIgotCQkJCQkJInBvcnQgJWQgZGlzYWJsZWRcbiIsIHBvcnQxKTsKKwkJCQlkZXZfZXJyKCZwb3J0X2Rldi0+ZGV2LAorCQkJCQkJImNvbm5lY3QtZGVib3VuY2UgZmFpbGVkXG4iKTsKIAkJCXBvcnRzdGF0dXMgJj0gflVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKIAkJfSBlbHNlIHsKIAkJCXBvcnRzdGF0dXMgPSBzdGF0dXM7CkBAIC00NDkzLDcgKzQ1NDksNyBAQAogCQkJdGVzdF9iaXQocG9ydDEsIGh1Yi0+cmVtb3ZlZF9iaXRzKSkgewogCiAJCS8qIG1heWJlIHN3aXRjaCBwb3dlciBiYWNrIG9uIChlLmcuIHJvb3QgaHViIHdhcyByZXNldCkgKi8KLQkJaWYgKCh3SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfTFBTTSkgPCAyCisJCWlmIChodWJfaXNfcG9ydF9wb3dlcl9zd2l0Y2hhYmxlKGh1YikKIAkJCQkmJiAhcG9ydF9pc19wb3dlcl9vbihodWIsIHBvcnRzdGF0dXMpKQogCQkJc2V0X3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9QT1dFUik7CiAKQEAgLTQ1MTQsOSArNDU3MCw4IEBACiAJCSAqLwogCQl1ZGV2ID0gdXNiX2FsbG9jX2RldihoZGV2LCBoZGV2LT5idXMsIHBvcnQxKTsKIAkJaWYgKCF1ZGV2KSB7Ci0JCQlkZXZfZXJyIChodWJfZGV2LAotCQkJCSJjb3VsZG4ndCBhbGxvY2F0ZSBwb3J0ICVkIHVzYl9kZXZpY2VcbiIsCi0JCQkJcG9ydDEpOworCQkJZGV2X2VycigmcG9ydF9kZXYtPmRldiwKKwkJCQkJImNvdWxkbid0IGFsbG9jYXRlIHVzYl9kZXZpY2VcbiIpOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTQ1MzgsNyArNDU5Myw5IEBACiAJCX0KIAogCQkvKiByZXNldCAobm9uLVVTQiAzLjAgZGV2aWNlcykgYW5kIGdldCBkZXNjcmlwdG9yICovCisJCXVzYl9sb2NrX3BvcnQocG9ydF9kZXYpOwogCQlzdGF0dXMgPSBodWJfcG9ydF9pbml0KGh1YiwgdWRldiwgcG9ydDEsIGkpOworCQl1c2JfdW5sb2NrX3BvcnQocG9ydF9kZXYpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gbG9vcDsKIApAQCAtNDU5MCw2ICs0NjQ3LDggQEAKIAkJICovCiAJCXN0YXR1cyA9IDA7CiAKKwkJbXV0ZXhfbG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CisKIAkJLyogV2UgbXVzdG4ndCBhZGQgbmV3IGRldmljZXMgaWYgdGhlIHBhcmVudCBodWIgaGFzCiAJCSAqIGJlZW4gZGlzY29ubmVjdGVkOyB3ZSB3b3VsZCByYWNlIHdpdGggdGhlCiAJCSAqIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoKSByb3V0aW5lLgpAQCAtNDU5OCwxNiArNDY1NywxOSBAQAogCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQogCQkJc3RhdHVzID0gLUVOT1RDT05OOwogCQllbHNlCi0JCQlodWItPnBvcnRzW3BvcnQxIC0gMV0tPmNoaWxkID0gdWRldjsKKwkJCXBvcnRfZGV2LT5jaGlsZCA9IHVkZXY7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCQltdXRleF91bmxvY2soJnVzYl9wb3J0X3BlZXJfbXV0ZXgpOwogCiAJCS8qIFJ1biBpdCB0aHJvdWdoIHRoZSBob29wcyAoZmluZCBhIGRyaXZlciwgZXRjKSAqLwogCQlpZiAoIXN0YXR1cykgewogCQkJc3RhdHVzID0gdXNiX25ld19kZXZpY2UodWRldik7CiAJCQlpZiAoc3RhdHVzKSB7CisJCQkJbXV0ZXhfbG9jaygmdXNiX3BvcnRfcGVlcl9tdXRleCk7CiAJCQkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOwotCQkJCWh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+Y2hpbGQgPSBOVUxMOworCQkJCXBvcnRfZGV2LT5jaGlsZCA9IE5VTEw7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZ1c2JfcG9ydF9wZWVyX211dGV4KTsKIAkJCX0KIAkJfQogCkBAIC00NjE2LDcgKzQ2NzgsNyBAQAogCiAJCXN0YXR1cyA9IGh1Yl9wb3dlcl9yZW1haW5pbmcoaHViKTsKIAkJaWYgKHN0YXR1cykKLQkJCWRldl9kYmcoaHViX2RldiwgIiVkbUEgcG93ZXIgYnVkZ2V0IGxlZnRcbiIsIHN0YXR1cyk7CisJCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwgIiVkbUEgcG93ZXIgYnVkZ2V0IGxlZnRcbiIsIHN0YXR1cyk7CiAKIAkJcmV0dXJuOwogCkBAIC00NjM0LDU2ICs0Njk2LDIwMCBAQAogCQkJIWhjZC0+ZHJpdmVyLT5wb3J0X2hhbmRlZF9vdmVyIHx8CiAJCQkhKGhjZC0+ZHJpdmVyLT5wb3J0X2hhbmRlZF9vdmVyKShoY2QsIHBvcnQxKSkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9UQ09OTiAmJiBzdGF0dXMgIT0gLUVOT0RFVikKLQkJCWRldl9lcnIoaHViX2RldiwgInVuYWJsZSB0byBlbnVtZXJhdGUgVVNCIGRldmljZSBvbiBwb3J0ICVkXG4iLAotCQkJCQlwb3J0MSk7CisJCQlkZXZfZXJyKCZwb3J0X2Rldi0+ZGV2LAorCQkJCQkidW5hYmxlIHRvIGVudW1lcmF0ZSBVU0IgZGV2aWNlXG4iKTsKIAl9CiAKIGRvbmU6CiAJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAxKTsKIAlpZiAoaGNkLT5kcml2ZXItPnJlbGlucXVpc2hfcG9ydCAmJiAhaHViLT5oZGV2LT5wYXJlbnQpCiAJCWhjZC0+ZHJpdmVyLT5yZWxpbnF1aXNoX3BvcnQoaGNkLCBwb3J0MSk7CisKIH0KIAotLyogUmV0dXJucyAxIGlmIHRoZXJlIHdhcyBhIHJlbW90ZSB3YWtldXAgYW5kIGEgY29ubmVjdCBzdGF0dXMgY2hhbmdlLiAqLwotc3RhdGljIGludCBodWJfaGFuZGxlX3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9odWIgKmh1YiwgdW5zaWduZWQgaW50IHBvcnQsCi0JCXUxNiBwb3J0c3RhdHVzLCB1MTYgcG9ydGNoYW5nZSkKKy8qIEhhbmRsZSBwaHlzaWNhbCBvciBsb2dpY2FsIGNvbm5lY3Rpb24gY2hhbmdlIGV2ZW50cy4KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbjoKKyAqCWEgcG9ydCBjb25uZWN0aW9uLWNoYW5nZSBvY2N1cnM7CisgKglhIHBvcnQgZW5hYmxlLWNoYW5nZSBvY2N1cnMgKG9mdGVuIGNhdXNlZCBieSBFTUkpOworICoJdXNiX3Jlc2V0X2FuZF92ZXJpZnlfZGV2aWNlKCkgZW5jb3VudGVycyBjaGFuZ2VkIGRlc2NyaXB0b3JzIChhcyBmcm9tCisgKgkJYSBmaXJtd2FyZSBkb3dubG9hZCkKKyAqIGNhbGxlciBhbHJlYWR5IGxvY2tlZCB0aGUgaHViCisgKi8KK3N0YXRpYyB2b2lkIGh1Yl9wb3J0X2Nvbm5lY3RfY2hhbmdlKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwKKwkJCQkJdTE2IHBvcnRzdGF0dXMsIHUxNiBwb3J0Y2hhbmdlKQorCQlfX211c3RfaG9sZCgmcG9ydF9kZXYtPnN0YXR1c19sb2NrKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCWludCBjb25uZWN0X2NoYW5nZSA9IDA7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcG9ydF9kZXYtPmNoaWxkOworCWludCBzdGF0dXMgPSAtRU5PREVWOwogCi0JaGRldiA9IGh1Yi0+aGRldjsKLQl1ZGV2ID0gaHViLT5wb3J0c1twb3J0IC0gMV0tPmNoaWxkOwotCWlmICghaHViX2lzX3N1cGVyc3BlZWQoaGRldikpIHsKLQkJaWYgKCEocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EKSkKLQkJCXJldHVybiAwOwotCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQsIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKLQl9IGVsc2UgewotCQlpZiAoIXVkZXYgfHwgdWRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRCB8fAotCQkJCSAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfTElOS19TVEFURSkgIT0KLQkJCQkgVVNCX1NTX1BPUlRfTFNfVTApCi0JCQlyZXR1cm4gMDsKKwlkZXZfZGJnKCZwb3J0X2Rldi0+ZGV2LCAic3RhdHVzICUwNHgsIGNoYW5nZSAlMDR4LCAlc1xuIiwgcG9ydHN0YXR1cywKKwkJCXBvcnRjaGFuZ2UsIHBvcnRzcGVlZChodWIsIHBvcnRzdGF0dXMpKTsKKworCWlmIChodWItPmhhc19pbmRpY2F0b3JzKSB7CisJCXNldF9wb3J0X2xlZChodWIsIHBvcnQxLCBIVUJfTEVEX0FVVE8pOworCQlodWItPmluZGljYXRvcltwb3J0MS0xXSA9IElORElDQVRPUl9BVVRPOwogCX0KIAotCWlmICh1ZGV2KSB7Ci0JCS8qIFRSU01SQ1kgPSAxMCBtc2VjICovCi0JCW1zbGVlcCgxMCk7CisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwkvKiBkdXJpbmcgSE5QLCBkb24ndCByZXBlYXQgdGhlIGRlYm91bmNlICovCisJaWYgKGh1Yi0+aGRldi0+YnVzLT5pc19iX2hvc3QpCisJCXBvcnRjaGFuZ2UgJj0gfihVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTiB8CisJCQkJVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSk7CisjZW5kaWYKIAotCQl1c2JfbG9ja19kZXZpY2UodWRldik7Ci0JCXJldCA9IHVzYl9yZW1vdGVfd2FrZXVwKHVkZXYpOwotCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKLQkJaWYgKHJldCA8IDApCi0JCQljb25uZWN0X2NoYW5nZSA9IDE7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQsIDEpOworCS8qIFRyeSB0byByZXN1c2NpdGF0ZSBhbiBleGlzdGluZyBkZXZpY2UgKi8KKwlpZiAoKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pICYmIHVkZXYgJiYKKwkJCXVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkgeworCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSB7CisJCQlzdGF0dXMgPSAwOwkJLyogTm90aGluZyB0byBkbyAqLworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJCX0gZWxzZSBpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCAmJgorCQkJCXVkZXYtPnBlcnNpc3RfZW5hYmxlZCkgeworCQkJLyogRm9yIGEgc3VzcGVuZGVkIGRldmljZSwgdHJlYXQgdGhpcyBhcyBhCisJCQkgKiByZW1vdGUgd2FrZXVwIGV2ZW50LgorCQkJICovCisJCQl1c2JfdW5sb2NrX3BvcnQocG9ydF9kZXYpOworCQkJc3RhdHVzID0gdXNiX3JlbW90ZV93YWtldXAodWRldik7CisJCQl1c2JfbG9ja19wb3J0KHBvcnRfZGV2KTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogRG9uJ3QgcmVzdXNjaXRhdGUgKi87CisJCX0KIAl9Ci0JZGV2X2RiZyhodWItPmludGZkZXYsICJyZXN1bWUgb24gcG9ydCAlZCwgc3RhdHVzICVkXG4iLAotCQkJcG9ydCwgcmV0KTsKLQlyZXR1cm4gY29ubmVjdF9jaGFuZ2U7CisJY2xlYXJfYml0KHBvcnQxLCBodWItPmNoYW5nZV9iaXRzKTsKKworCS8qIHN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCB0aGUgY29ubmVjdGlvbiAqLworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuOworCisJdXNiX3VubG9ja19wb3J0KHBvcnRfZGV2KTsKKwlodWJfcG9ydF9jb25uZWN0KGh1YiwgcG9ydDEsIHBvcnRzdGF0dXMsIHBvcnRjaGFuZ2UpOworCXVzYl9sb2NrX3BvcnQocG9ydF9kZXYpOwogfQogCitzdGF0aWMgdm9pZCBwb3J0X2V2ZW50KHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSkKKwkJX19tdXN0X2hvbGQoJnBvcnRfZGV2LT5zdGF0dXNfbG9jaykKK3sKKwlpbnQgY29ubmVjdF9jaGFuZ2UsIHJlc2V0X2RldmljZSA9IDA7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IGh1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHBvcnRfZGV2LT5jaGlsZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwl1MTYgcG9ydHN0YXR1cywgcG9ydGNoYW5nZTsKKworCWNvbm5lY3RfY2hhbmdlID0gdGVzdF9iaXQocG9ydDEsIGh1Yi0+Y2hhbmdlX2JpdHMpOworCWNsZWFyX2JpdChwb3J0MSwgaHViLT5ldmVudF9iaXRzKTsKKwljbGVhcl9iaXQocG9ydDEsIGh1Yi0+d2FrZXVwX2JpdHMpOworCisJaWYgKGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXR1cywgJnBvcnRjaGFuZ2UpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgeworCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisJCWNvbm5lY3RfY2hhbmdlID0gMTsKKwl9CisKKwlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUpIHsKKwkJaWYgKCFjb25uZWN0X2NoYW5nZSkKKwkJCWRldl9kYmcoJnBvcnRfZGV2LT5kZXYsICJlbmFibGUgY2hhbmdlLCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkJcG9ydHN0YXR1cyk7CisJCXVzYl9jbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUpOworCisJCS8qCisJCSAqIEVNIGludGVyZmVyZW5jZSBzb21ldGltZXMgY2F1c2VzIGJhZGx5IHNoaWVsZGVkIFVTQiBkZXZpY2VzCisJCSAqIHRvIGJlIHNodXRkb3duIGJ5IHRoZSBodWIsIHRoaXMgaGFjayBlbmFibGVzIHRoZW0gYWdhaW4uCisJCSAqIFdvcmtzIGF0IGxlYXN0IHdpdGggbW91c2UgZHJpdmVyLgorCQkgKi8KKwkJaWYgKCEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKQorCQkgICAgJiYgIWNvbm5lY3RfY2hhbmdlICYmIHVkZXYpIHsKKwkJCWRldl9lcnIoJnBvcnRfZGV2LT5kZXYsICJkaXNhYmxlZCBieSBodWIgKEVNST8pLCByZS1lbmFibGluZy4uLlxuIik7CisJCQljb25uZWN0X2NoYW5nZSA9IDE7CisJCX0KKwl9CisKKwlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVCkgeworCQl1MTYgc3RhdHVzID0gMCwgdW51c2VkOworCisJCWRldl9kYmcoJnBvcnRfZGV2LT5kZXYsICJvdmVyLWN1cnJlbnQgY2hhbmdlXG4iKTsKKwkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwKKwkJCQlVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UKTsKKwkJbXNsZWVwKDEwMCk7CS8qIENvb2wgZG93biAqLworCQlodWJfcG93ZXJfb24oaHViLCB0cnVlKTsKKwkJaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsICZzdGF0dXMsICZ1bnVzZWQpOworCQlpZiAoc3RhdHVzICYgVVNCX1BPUlRfU1RBVF9PVkVSQ1VSUkVOVCkKKwkJCWRldl9lcnIoJnBvcnRfZGV2LT5kZXYsICJvdmVyLWN1cnJlbnQgY29uZGl0aW9uXG4iKTsKKwl9CisKKwlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgeworCQlkZXZfZGJnKCZwb3J0X2Rldi0+ZGV2LCAicmVzZXQgY2hhbmdlXG4iKTsKKwkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKwl9CisJaWYgKChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0JIX1JFU0VUKQorCSAgICAmJiBodWJfaXNfc3VwZXJzcGVlZChoZGV2KSkgeworCQlkZXZfZGJnKCZwb3J0X2Rldi0+ZGV2LCAid2FybSByZXNldCBjaGFuZ2VcbiIpOworCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLAorCQkJCVVTQl9QT1JUX0ZFQVRfQ19CSF9QT1JUX1JFU0VUKTsKKwl9CisJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfTElOS19TVEFURSkgeworCQlkZXZfZGJnKCZwb3J0X2Rldi0+ZGV2LCAibGluayBzdGF0ZSBjaGFuZ2VcbiIpOworCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLAorCQkJCVVTQl9QT1JUX0ZFQVRfQ19QT1JUX0xJTktfU1RBVEUpOworCX0KKwlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05GSUdfRVJST1IpIHsKKwkJZGV2X3dhcm4oJnBvcnRfZGV2LT5kZXYsICJjb25maWcgZXJyb3JcbiIpOworCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLAorCQkJCVVTQl9QT1JUX0ZFQVRfQ19QT1JUX0NPTkZJR19FUlJPUik7CisJfQorCisJLyogc2tpcCBwb3J0IGFjdGlvbnMgdGhhdCByZXF1aXJlIHRoZSBwb3J0IHRvIGJlIHBvd2VyZWQgb24gKi8KKwlpZiAoIXBtX3J1bnRpbWVfYWN0aXZlKCZwb3J0X2Rldi0+ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGh1Yl9oYW5kbGVfcmVtb3RlX3dha2V1cChodWIsIHBvcnQxLCBwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlKSkKKwkJY29ubmVjdF9jaGFuZ2UgPSAxOworCisJLyoKKwkgKiBXYXJtIHJlc2V0IGEgVVNCMyBwcm90b2NvbCBwb3J0IGlmIGl0J3MgaW4KKwkgKiBTUy5JbmFjdGl2ZSBzdGF0ZS4KKwkgKi8KKwlpZiAoaHViX3BvcnRfd2FybV9yZXNldF9yZXF1aXJlZChodWIsIHBvcnRzdGF0dXMpKSB7CisJCWRldl9kYmcoJnBvcnRfZGV2LT5kZXYsICJkbyB3YXJtIHJlc2V0XG4iKTsKKwkJaWYgKCF1ZGV2IHx8ICEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikKKwkJCQl8fCB1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKKwkJCWlmIChodWJfcG9ydF9yZXNldChodWIsIHBvcnQxLCBOVUxMLAorCQkJCQlIVUJfQkhfUkVTRVRfVElNRSwgdHJ1ZSkgPCAwKQorCQkJCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBwb3J0MSwgMSk7CisJCX0gZWxzZQorCQkJcmVzZXRfZGV2aWNlID0gMTsKKwl9CisKKwkvKgorCSAqIE9uIGRpc2Nvbm5lY3QgVVNCMyBwcm90b2NvbCBwb3J0cyB0cmFuc2l0IGZyb20gVTAgdG8KKwkgKiBTUy5JbmFjdGl2ZSB0byBSeC5EZXRlY3QuIElmIHRoaXMgaGFwcGVucyBhIHdhcm0tCisJICogcmVzZXQgaXMgbm90IG5lZWRlZCwgYnV0IGEgKHJlKWNvbm5lY3QgbWF5IGhhcHBlbgorCSAqIGJlZm9yZSBraHViZCBydW5zIGFuZCBzZWVzIHRoZSBkaXNjb25uZWN0LCBhbmQgdGhlCisJICogZGV2aWNlIG1heSBiZSBhbiB1bmtub3duIHN0YXRlLgorCSAqCisJICogSWYgdGhlIHBvcnQgd2VudCB0aHJvdWdoIFNTLkluYWN0aXZlIHdpdGhvdXQga2h1YmQKKwkgKiBzZWVpbmcgaXQgdGhlIENfTElOS19TVEFURSBjaGFuZ2UgZmxhZyB3aWxsIGJlIHNldCwKKwkgKiBhbmQgd2UgcmVzZXQgdGhlIGRldiB0byBwdXQgaXQgaW4gYSBrbm93biBzdGF0ZS4KKwkgKi8KKwlpZiAocmVzZXRfZGV2aWNlIHx8ICh1ZGV2ICYmIGh1Yl9pc19zdXBlcnNwZWVkKGh1Yi0+aGRldikKKwkJCQkmJiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19MSU5LX1NUQVRFKQorCQkJCSYmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkpIHsKKwkJdXNiX3VubG9ja19wb3J0KHBvcnRfZGV2KTsKKwkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCQl1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOworCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwkJdXNiX2xvY2tfcG9ydChwb3J0X2Rldik7CisJCWNvbm5lY3RfY2hhbmdlID0gMDsKKwl9CisKKwlpZiAoY29ubmVjdF9jaGFuZ2UpCisJCWh1Yl9wb3J0X2Nvbm5lY3RfY2hhbmdlKGh1YiwgcG9ydDEsIHBvcnRzdGF0dXMsIHBvcnRjaGFuZ2UpOworfQorCisKIHN0YXRpYyB2b2lkIGh1Yl9ldmVudHModm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CkBAIC00NjkzLDEwICs0ODk5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2OwogCXUxNiBodWJzdGF0dXM7CiAJdTE2IGh1YmNoYW5nZTsKLQl1MTYgcG9ydHN0YXR1czsKLQl1MTYgcG9ydGNoYW5nZTsKIAlpbnQgaSwgcmV0OwotCWludCBjb25uZWN0X2NoYW5nZSwgd2FrZXVwX2NoYW5nZTsKIAogCS8qCiAJICogIFdlIHJlc3RhcnQgdGhlIGxpc3QgZXZlcnkgdGltZSB0byBhdm9pZCBhIGRlYWRsb2NrIHdpdGgKQEAgLTQ3NzAsMTQ2ICs0OTczLDI4IEBACiAKIAkJLyogZGVhbCB3aXRoIHBvcnQgc3RhdHVzIGNoYW5nZXMgKi8KIAkJZm9yIChpID0gMTsgaSA8PSBoZGV2LT5tYXhjaGlsZDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGh1Yi0+cG9ydHNbaSAtIDFdLT5jaGlsZDsKKwkJCXN0cnVjdCB1c2JfcG9ydCAqcG9ydF9kZXYgPSBodWItPnBvcnRzW2kgLSAxXTsKIAotCQkJaWYgKHRlc3RfYml0KGksIGh1Yi0+YnVzeV9iaXRzKSkKLQkJCQljb250aW51ZTsKLQkJCWNvbm5lY3RfY2hhbmdlID0gdGVzdF9iaXQoaSwgaHViLT5jaGFuZ2VfYml0cyk7Ci0JCQl3YWtldXBfY2hhbmdlID0gdGVzdF9hbmRfY2xlYXJfYml0KGksIGh1Yi0+d2FrZXVwX2JpdHMpOwotCQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgaHViLT5ldmVudF9iaXRzKSAmJgotCQkJCQkhY29ubmVjdF9jaGFuZ2UgJiYgIXdha2V1cF9jaGFuZ2UpCi0JCQkJY29udGludWU7Ci0KLQkJCXJldCA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIGksCi0JCQkJCSZwb3J0c3RhdHVzLCAmcG9ydGNoYW5nZSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgewotCQkJCXVzYl9jbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKLQkJCQkJVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOwotCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKLQkJCX0KLQotCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFKSB7Ci0JCQkJaWYgKCFjb25uZWN0X2NoYW5nZSkKLQkJCQkJZGV2X2RiZyAoaHViX2RldiwKLQkJCQkJCSJwb3J0ICVkIGVuYWJsZSBjaGFuZ2UsICIKLQkJCQkJCSJzdGF0dXMgJTA4eFxuIiwKLQkJCQkJCWksIHBvcnRzdGF0dXMpOwotCQkJCXVzYl9jbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKLQkJCQkJVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSk7Ci0KKwkJCWlmICh0ZXN0X2JpdChpLCBodWItPmV2ZW50X2JpdHMpCisJCQkJCXx8IHRlc3RfYml0KGksIGh1Yi0+Y2hhbmdlX2JpdHMpCisJCQkJCXx8IHRlc3RfYml0KGksIGh1Yi0+d2FrZXVwX2JpdHMpKSB7CiAJCQkJLyoKLQkJCQkgKiBFTSBpbnRlcmZlcmVuY2Ugc29tZXRpbWVzIGNhdXNlcyBiYWRseQotCQkJCSAqIHNoaWVsZGVkIFVTQiBkZXZpY2VzIHRvIGJlIHNodXRkb3duIGJ5Ci0JCQkJICogdGhlIGh1YiwgdGhpcyBoYWNrIGVuYWJsZXMgdGhlbSBhZ2Fpbi4KLQkJCQkgKiBXb3JrcyBhdCBsZWFzdCB3aXRoIG1vdXNlIGRyaXZlci4KKwkJCQkgKiBUaGUgZ2V0X25vcmVzdW1lIGFuZCBiYXJyaWVyIGVuc3VyZSB0aGF0IGlmCisJCQkJICogdGhlIHBvcnQgd2FzIGluIHRoZSBwcm9jZXNzIG9mIHJlc3VtaW5nLCB3ZQorCQkJCSAqIGZsdXNoIHRoYXQgd29yayBhbmQga2VlcCB0aGUgcG9ydCBhY3RpdmUgZm9yCisJCQkJICogdGhlIGR1cmF0aW9uIG9mIHRoZSBwb3J0X2V2ZW50KCkuICBIb3dldmVyLAorCQkJCSAqIGlmIHRoZSBwb3J0IGlzIHJ1bnRpbWUgcG0gc3VzcGVuZGVkCisJCQkJICogKHBvd2VyZWQtb2ZmKSwgd2UgbGVhdmUgaXQgaW4gdGhhdCBzdGF0ZSwgcnVuCisJCQkJICogYW4gYWJicmV2aWF0ZWQgcG9ydF9ldmVudCgpLCBhbmQgbW92ZSBvbi4KIAkJCQkgKi8KLQkJCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpCi0JCQkJICAgICYmICFjb25uZWN0X2NoYW5nZQotCQkJCSAgICAmJiBodWItPnBvcnRzW2kgLSAxXS0+Y2hpbGQpIHsKLQkJCQkJZGV2X2VyciAoaHViX2RldiwKLQkJCQkJICAgICJwb3J0ICVpICIKLQkJCQkJICAgICJkaXNhYmxlZCBieSBodWIgKEVNST8pLCAiCi0JCQkJCSAgICAicmUtZW5hYmxpbmcuLi5cbiIsCi0JCQkJCQlpKTsKLQkJCQkJY29ubmVjdF9jaGFuZ2UgPSAxOwotCQkJCX0KKwkJCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmcG9ydF9kZXYtPmRldik7CisJCQkJcG1fcnVudGltZV9iYXJyaWVyKCZwb3J0X2Rldi0+ZGV2KTsKKwkJCQl1c2JfbG9ja19wb3J0KHBvcnRfZGV2KTsKKwkJCQlwb3J0X2V2ZW50KGh1YiwgaSk7CisJCQkJdXNiX3VubG9ja19wb3J0KHBvcnRfZGV2KTsKKwkJCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwb3J0X2Rldi0+ZGV2KTsKIAkJCX0KLQotCQkJaWYgKGh1Yl9oYW5kbGVfcmVtb3RlX3dha2V1cChodWIsIGksCi0JCQkJCQlwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlKSkKLQkJCQljb25uZWN0X2NoYW5nZSA9IDE7Ci0KLQkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UKSB7Ci0JCQkJdTE2IHN0YXR1cyA9IDA7Ci0JCQkJdTE2IHVudXNlZDsKLQotCQkJCWRldl9kYmcoaHViX2RldiwgIm92ZXItY3VycmVudCBjaGFuZ2Ugb24gcG9ydCAiCi0JCQkJCSIlZFxuIiwgaSk7Ci0JCQkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAotCQkJCQlVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UKTsKLQkJCQltc2xlZXAoMTAwKTsJLyogQ29vbCBkb3duICovCi0JCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7Ci0JCQkJaHViX3BvcnRfc3RhdHVzKGh1YiwgaSwgJnN0YXR1cywgJnVudXNlZCk7Ci0JCQkJaWYgKHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfT1ZFUkNVUlJFTlQpCi0JCQkJCWRldl9lcnIoaHViX2RldiwgIm92ZXItY3VycmVudCAiCi0JCQkJCQkiY29uZGl0aW9uIG9uIHBvcnQgJWRcbiIsIGkpOwotCQkJfQotCi0JCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgewotCQkJCWRldl9kYmcgKGh1Yl9kZXYsCi0JCQkJCSJyZXNldCBjaGFuZ2Ugb24gcG9ydCAlZFxuIiwKLQkJCQkJaSk7Ci0JCQkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAotCQkJCQlVU0JfUE9SVF9GRUFUX0NfUkVTRVQpOwotCQkJfQotCQkJaWYgKChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0JIX1JFU0VUKSAmJgotCQkJCQlodWJfaXNfc3VwZXJzcGVlZChodWItPmhkZXYpKSB7Ci0JCQkJZGV2X2RiZyhodWJfZGV2LAotCQkJCQkid2FybSByZXNldCBjaGFuZ2Ugb24gcG9ydCAlZFxuIiwKLQkJCQkJaSk7Ci0JCQkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBpLAotCQkJCQlVU0JfUE9SVF9GRUFUX0NfQkhfUE9SVF9SRVNFVCk7Ci0JCQl9Ci0JCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19MSU5LX1NUQVRFKSB7Ci0JCQkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsIGksCi0JCQkJCQlVU0JfUE9SVF9GRUFUX0NfUE9SVF9MSU5LX1NUQVRFKTsKLQkJCX0KLQkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0NPTkZJR19FUlJPUikgewotCQkJCWRldl93YXJuKGh1Yl9kZXYsCi0JCQkJCSJjb25maWcgZXJyb3Igb24gcG9ydCAlZFxuIiwKLQkJCQkJaSk7Ci0JCQkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsIGksCi0JCQkJCQlVU0JfUE9SVF9GRUFUX0NfUE9SVF9DT05GSUdfRVJST1IpOwotCQkJfQotCi0JCQkvKiBXYXJtIHJlc2V0IGEgVVNCMyBwcm90b2NvbCBwb3J0IGlmIGl0J3MgaW4KLQkJCSAqIFNTLkluYWN0aXZlIHN0YXRlLgotCQkJICovCi0JCQlpZiAoaHViX3BvcnRfd2FybV9yZXNldF9yZXF1aXJlZChodWIsIHBvcnRzdGF0dXMpKSB7Ci0JCQkJaW50IHN0YXR1czsKLQotCQkJCWRldl9kYmcoaHViX2RldiwgIndhcm0gcmVzZXQgcG9ydCAlZFxuIiwgaSk7Ci0JCQkJaWYgKCF1ZGV2IHx8Ci0JCQkJICAgICEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikgfHwKLQkJCQkgICAgdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7Ci0JCQkJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc2V0KGh1YiwgaSwKLQkJCQkJCQlOVUxMLCBIVUJfQkhfUkVTRVRfVElNRSwKLQkJCQkJCQl0cnVlKTsKLQkJCQkJaWYgKHN0YXR1cyA8IDApCi0JCQkJCQlodWJfcG9ydF9kaXNhYmxlKGh1YiwgaSwgMSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwotCQkJCQlzdGF0dXMgPSB1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOwotCQkJCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKLQkJCQkJY29ubmVjdF9jaGFuZ2UgPSAwOwotCQkJCX0KLQkJCS8qCi0JCQkgKiBPbiBkaXNjb25uZWN0IFVTQjMgcHJvdG9jb2wgcG9ydHMgdHJhbnNpdCBmcm9tIFUwIHRvCi0JCQkgKiBTUy5JbmFjdGl2ZSB0byBSeC5EZXRlY3QuIElmIHRoaXMgaGFwcGVucyBhIHdhcm0tCi0JCQkgKiByZXNldCBpcyBub3QgbmVlZGVkLCBidXQgYSAocmUpY29ubmVjdCBtYXkgaGFwcGVuCi0JCQkgKiBiZWZvcmUga2h1YmQgcnVucyBhbmQgc2VlcyB0aGUgZGlzY29ubmVjdCwgYW5kIHRoZQotCQkJICogZGV2aWNlIG1heSBiZSBhbiB1bmtub3duIHN0YXRlLgotCQkJICoKLQkJCSAqIElmIHRoZSBwb3J0IHdlbnQgdGhyb3VnaCBTUy5JbmFjdGl2ZSB3aXRob3V0IGtodWJkCi0JCQkgKiBzZWVpbmcgaXQgdGhlIENfTElOS19TVEFURSBjaGFuZ2UgZmxhZyB3aWxsIGJlIHNldCwKLQkJCSAqIGFuZCB3ZSByZXNldCB0aGUgZGV2IHRvIHB1dCBpdCBpbiBhIGtub3duIHN0YXRlLgotCQkJICovCi0JCQl9IGVsc2UgaWYgKHVkZXYgJiYgaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSAmJgotCQkJCSAgIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0xJTktfU1RBVEUpICYmCi0JCQkJICAgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pKSB7Ci0JCQkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwotCQkJCXVzYl9yZXNldF9kZXZpY2UodWRldik7Ci0JCQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7Ci0JCQkJY29ubmVjdF9jaGFuZ2UgPSAwOwotCQkJfQotCi0JCQlpZiAoY29ubmVjdF9jaGFuZ2UpCi0JCQkJaHViX3BvcnRfY29ubmVjdF9jaGFuZ2UoaHViLCBpLAotCQkJCQkJcG9ydHN0YXR1cywgcG9ydGNoYW5nZSk7Ci0JCX0gLyogZW5kIGZvciBpICovCisJCX0KIAogCQkvKiBkZWFsIHdpdGggaHViIHN0YXR1cyBjaGFuZ2VzICovCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgaHViLT5ldmVudF9iaXRzKSA9PSAwKQpAQCAtNTE0NCwxNSArNTIyOSwxOCBAQAogICogaWYgdGhlIHJlc2V0IHdhc24ndCBldmVuIGF0dGVtcHRlZC4KICAqCiAgKiBOb3RlOgotICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suICBGb3IgZXhhbXBsZSwgaXQncyBzYWZlIHRvIHVzZQotICogdGhpcyBmcm9tIGEgZHJpdmVyIHByb2JlKCkgcm91dGluZSBhZnRlciBkb3dubG9hZGluZyBuZXcgZmlybXdhcmUuCi0gKiBGb3IgY2FsbHMgdGhhdCBtaWdodCBub3Qgb2NjdXIgZHVyaW5nIHByb2JlKCksIGRyaXZlcnMgc2hvdWxkIGxvY2sKLSAqIHRoZSBkZXZpY2UgdXNpbmcgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCgpLgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2sgYW5kIHRoZSBwb3J0IGxvY2ssIHRoZSBsYXR0ZXIgaXMKKyAqIHRha2VuIGJ5IHVzYl9yZXNldF9kZXZpY2UoKS4gIEZvciBleGFtcGxlLCBpdCdzIHNhZmUgdG8gdXNlCisgKiB1c2JfcmVzZXRfZGV2aWNlKCkgZnJvbSBhIGRyaXZlciBwcm9iZSgpIHJvdXRpbmUgYWZ0ZXIgZG93bmxvYWRpbmcKKyAqIG5ldyBmaXJtd2FyZS4gIEZvciBjYWxscyB0aGF0IG1pZ2h0IG5vdCBvY2N1ciBkdXJpbmcgcHJvYmUoKSwgZHJpdmVycworICogc2hvdWxkIGxvY2sgdGhlIGRldmljZSB1c2luZyB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KCkuCiAgKgogICogTG9ja2luZyBleGNlcHRpb246IFRoaXMgcm91dGluZSBtYXkgYWxzbyBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4KICAqIGF1dG9yZXN1bWUgaGFuZGxlci4gIFN1Y2ggdXNhZ2Ugd29uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciB0YXNrcwogICogaG9sZGluZyB0aGUgZGV2aWNlIGxvY2sgYmVjYXVzZSB0aGVzZSB0YXNrcyBzaG91bGQgYWx3YXlzIGNhbGwKLSAqIHVzYl9hdXRvcG1fcmVzdW1lX2RldmljZSgpLCB0aGVyZWJ5IHByZXZlbnRpbmcgYW55IHVud2FudGVkIGF1dG9yZXN1bWUuCisgKiB1c2JfYXV0b3BtX3Jlc3VtZV9kZXZpY2UoKSwgdGhlcmVieSBwcmV2ZW50aW5nIGFueSB1bndhbnRlZAorICogYXV0b3Jlc3VtZS4gIFRoZSBhdXRvcmVzdW1lIGhhbmRsZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbHJlYWR5CisgKiBhY3F1aXJlZCB0aGUgcG9ydCBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KICAqLwogc3RhdGljIGludCB1c2JfcmVzZXRfYW5kX3ZlcmlmeV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CkBAIC01MTcxLDExICs1MjU5LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFwYXJlbnRfaGRldikgewotCQkvKiB0aGlzIHJlcXVpcmVzIGhjZC1zcGVjaWZpYyBsb2dpYzsgc2VlIG9oY2lfcmVzdGFydCgpICovCi0JCWRldl9kYmcoJnVkZXYtPmRldiwgIiVzIGZvciByb290IGh1YiFcbiIsIF9fZnVuY19fKTsKKwlpZiAoIXBhcmVudF9oZGV2KQogCQlyZXR1cm4gLUVJU0RJUjsKLQl9CisKIAlwYXJlbnRfaHViID0gdXNiX2h1Yl90b19zdHJ1Y3RfaHViKHBhcmVudF9oZGV2KTsKIAogCS8qIERpc2FibGUgVVNCMiBoYXJkd2FyZSBMUE0uCkBAIC01MjA0LDcgKzUyOTAsNiBAQAogCQlnb3RvIHJlX2VudW1lcmF0ZTsKIAl9CiAKLQlzZXRfYml0KHBvcnQxLCBwYXJlbnRfaHViLT5idXN5X2JpdHMpOwogCWZvciAoaSA9IDA7IGkgPCBTRVRfQ09ORklHX1RSSUVTOyArK2kpIHsKIAogCQkvKiBlcDAgbWF4cGFja2V0IHNpemUgbWF5IGNoYW5nZTsgbGV0IHRoZSBIQ0Qga25vdyBhYm91dCBpdC4KQEAgLTUyMTQsNyArNTI5OSw2IEBACiAJCWlmIChyZXQgPj0gMCB8fCByZXQgPT0gLUVOT1RDT05OIHx8IHJldCA9PSAtRU5PREVWKQogCQkJYnJlYWs7CiAJfQotCWNsZWFyX2JpdChwb3J0MSwgcGFyZW50X2h1Yi0+YnVzeV9iaXRzKTsKIAogCWlmIChyZXQgPCAwKQogCQlnb3RvIHJlX2VudW1lcmF0ZTsKQEAgLTUzMzUsNyArNTQxOSw5IEBACiAJaW50IHJldDsKIAlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgbm9pb19mbGFnOworCXN0cnVjdCB1c2JfcG9ydCAqcG9ydF9kZXY7CiAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnID0gdWRldi0+YWN0Y29uZmlnOworCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIodWRldi0+cGFyZW50KTsKIAogCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwKIAkJCXVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKQEAgLTUzNDQsNiArNTQzMCwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoIXVkZXYtPnBhcmVudCkgeworCQkvKiB0aGlzIHJlcXVpcmVzIGhjZC1zcGVjaWZpYyBsb2dpYzsgc2VlIG9oY2lfcmVzdGFydCgpICovCisJCWRldl9kYmcoJnVkZXYtPmRldiwgIiVzIGZvciByb290IGh1YiFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSVNESVI7CisJfQorCisJcG9ydF9kZXYgPSBodWItPnBvcnRzW3VkZXYtPnBvcnRudW0gLSAxXTsKKwogCS8qCiAJICogRG9uJ3QgYWxsb2NhdGUgbWVtb3J5IHdpdGggR0ZQX0tFUk5FTCBpbiBjdXJyZW50CiAJICogY29udGV4dCB0byBhdm9pZCBwb3NzaWJsZSBkZWFkbG9jayBpZiB1c2IgbWFzcwpAQCAtNTM3Nyw3ICs1NDcxLDkgQEAKIAkJfQogCX0KIAorCXVzYl9sb2NrX3BvcnQocG9ydF9kZXYpOwogCXJldCA9IHVzYl9yZXNldF9hbmRfdmVyaWZ5X2RldmljZSh1ZGV2KTsKKwl1c2JfdW5sb2NrX3BvcnQocG9ydF9kZXYpOwogCiAJaWYgKGNvbmZpZykgewogCQlmb3IgKGkgPSBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgLSAxOyBpID49IDA7IC0taSkgewpAQCAtNTQ3Miw1NiArNTU2OCwyNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2h1Yl9maW5kX2NoaWxkKTsKIAotLyoqCi0gKiB1c2Jfc2V0X2h1Yl9wb3J0X2Nvbm5lY3RfdHlwZSAtIHNldCBodWIgcG9ydCBjb25uZWN0IHR5cGUuCi0gKiBAaGRldjogVVNCIGRldmljZSBiZWxvbmdpbmcgdG8gdGhlIHVzYiBodWIKLSAqIEBwb3J0MTogcG9ydCBudW0gb2YgdGhlIHBvcnQKLSAqIEB0eXBlOiBjb25uZWN0IHR5cGUgb2YgdGhlIHBvcnQKLSAqLwotdm9pZCB1c2Jfc2V0X2h1Yl9wb3J0X2Nvbm5lY3RfdHlwZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgaW50IHBvcnQxLAotCWVudW0gdXNiX3BvcnRfY29ubmVjdF90eXBlIHR5cGUpCi17Ci0Jc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1YihoZGV2KTsKLQotCWlmIChodWIpCi0JCWh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+Y29ubmVjdF90eXBlID0gdHlwZTsKLX0KLQotLyoqCi0gKiB1c2JfZ2V0X2h1Yl9wb3J0X2Nvbm5lY3RfdHlwZSAtIEdldCB0aGUgcG9ydCdzIGNvbm5lY3QgdHlwZQotICogQGhkZXY6IFVTQiBkZXZpY2UgYmVsb25naW5nIHRvIHRoZSB1c2IgaHViCi0gKiBAcG9ydDE6IHBvcnQgbnVtIG9mIHRoZSBwb3J0Ci0gKgotICogUmV0dXJuOiBUaGUgY29ubmVjdCB0eXBlIG9mIHRoZSBwb3J0IGlmIHN1Y2Nlc3NmdWwuIE9yCi0gKiBVU0JfUE9SVF9DT05ORUNUX1RZUEVfVU5LTk9XTiBpZiBpbnB1dCBwYXJhbXMgYXJlIGludmFsaWQuCi0gKi8KLWVudW0gdXNiX3BvcnRfY29ubmVjdF90eXBlCi11c2JfZ2V0X2h1Yl9wb3J0X2Nvbm5lY3RfdHlwZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgaW50IHBvcnQxKQotewotCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIoaGRldik7Ci0KLQlpZiAoIWh1YikKLQkJcmV0dXJuIFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9VTktOT1dOOwotCi0JcmV0dXJuIGh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+Y29ubmVjdF90eXBlOwotfQotCiB2b2lkIHVzYl9odWJfYWRqdXN0X2RldmljZXJlbW92YWJsZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwKIAkJc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKIHsKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXNiX2h1Yl90b19zdHJ1Y3RfaHViKGhkZXYpOwogCWVudW0gdXNiX3BvcnRfY29ubmVjdF90eXBlIGNvbm5lY3RfdHlwZTsKIAlpbnQgaTsKIAorCWlmICghaHViKQorCQlyZXR1cm47CisKIAlpZiAoIWh1Yl9pc19zdXBlcnNwZWVkKGhkZXYpKSB7CiAJCWZvciAoaSA9IDE7IGkgPD0gaGRldi0+bWF4Y2hpbGQ7IGkrKykgewotCQkJY29ubmVjdF90eXBlID0gdXNiX2dldF9odWJfcG9ydF9jb25uZWN0X3R5cGUoaGRldiwgaSk7CisJCQlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1tpIC0gMV07CiAKKwkJCWNvbm5lY3RfdHlwZSA9IHBvcnRfZGV2LT5jb25uZWN0X3R5cGU7CiAJCQlpZiAoY29ubmVjdF90eXBlID09IFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9IQVJEX1dJUkVEKSB7CiAJCQkJdTggbWFzayA9IDEgPDwgKGklOCk7CiAKIAkJCQlpZiAoIShkZXNjLT51LmhzLkRldmljZVJlbW92YWJsZVtpLzhdICYgbWFzaykpIHsKLQkJCQkJZGV2X2RiZygmaGRldi0+ZGV2LCAidXNiIHBvcnQlZCdzIERldmljZVJlbW92YWJsZSBpcyBjaGFuZ2VkIHRvIDEgYWNjb3JkaW5nIHRvIHBsYXRmb3JtIGluZm9ybWF0aW9uLlxuIiwKLQkJCQkJCWkpOworCQkJCQlkZXZfZGJnKCZwb3J0X2Rldi0+ZGV2LCAiRGV2aWNlUmVtb3ZhYmxlIGlzIGNoYW5nZWQgdG8gMSBhY2NvcmRpbmcgdG8gcGxhdGZvcm0gaW5mb3JtYXRpb24uXG4iKTsKIAkJCQkJZGVzYy0+dS5ocy5EZXZpY2VSZW1vdmFibGVbaS84XQl8PSBtYXNrOwogCQkJCX0KIAkJCX0KQEAgLTU1MzAsMTQgKzU1OTYsMTQgQEAKIAkJdTE2IHBvcnRfcmVtb3ZhYmxlID0gbGUxNl90b19jcHUoZGVzYy0+dS5zcy5EZXZpY2VSZW1vdmFibGUpOwogCiAJCWZvciAoaSA9IDE7IGkgPD0gaGRldi0+bWF4Y2hpbGQ7IGkrKykgewotCQkJY29ubmVjdF90eXBlID0gdXNiX2dldF9odWJfcG9ydF9jb25uZWN0X3R5cGUoaGRldiwgaSk7CisJCQlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1tpIC0gMV07CiAKKwkJCWNvbm5lY3RfdHlwZSA9IHBvcnRfZGV2LT5jb25uZWN0X3R5cGU7CiAJCQlpZiAoY29ubmVjdF90eXBlID09IFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9IQVJEX1dJUkVEKSB7CiAJCQkJdTE2IG1hc2sgPSAxIDw8IGk7CiAKIAkJCQlpZiAoIShwb3J0X3JlbW92YWJsZSAmIG1hc2spKSB7Ci0JCQkJCWRldl9kYmcoJmhkZXYtPmRldiwgInVzYiBwb3J0JWQncyBEZXZpY2VSZW1vdmFibGUgaXMgY2hhbmdlZCB0byAxIGFjY29yZGluZyB0byBwbGF0Zm9ybSBpbmZvcm1hdGlvbi5cbiIsCi0JCQkJCQlpKTsKKwkJCQkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgIkRldmljZVJlbW92YWJsZSBpcyBjaGFuZ2VkIHRvIDEgYWNjb3JkaW5nIHRvIHBsYXRmb3JtIGluZm9ybWF0aW9uLlxuIik7CiAJCQkJCXBvcnRfcmVtb3ZhYmxlIHw9IG1hc2s7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmgKaW5kZXggMzNiY2IyYy4uMGE3Y2RjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCkBAIC00NSwxMiArNDUsMTMgQEAKIAl1bnNpZ25lZCBsb25nCQlldmVudF9iaXRzWzFdOwkvKiBzdGF0dXMgY2hhbmdlIGJpdG1hc2sgKi8KIAl1bnNpZ25lZCBsb25nCQljaGFuZ2VfYml0c1sxXTsJLyogcG9ydHMgd2l0aCBsb2dpY2FsIGNvbm5lY3QKIAkJCQkJCQlzdGF0dXMgY2hhbmdlICovCi0JdW5zaWduZWQgbG9uZwkJYnVzeV9iaXRzWzFdOwkvKiBwb3J0cyBiZWluZyByZXNldCBvcgotCQkJCQkJCXJlc3VtZWQgKi8KIAl1bnNpZ25lZCBsb25nCQlyZW1vdmVkX2JpdHNbMV07IC8qIHBvcnRzIHdpdGggYSAicmVtb3ZlZCIKIAkJCQkJCQlkZXZpY2UgcHJlc2VudCAqLwogCXVuc2lnbmVkIGxvbmcJCXdha2V1cF9iaXRzWzFdOwkvKiBwb3J0cyB0aGF0IGhhdmUgc2lnbmFsZWQKIAkJCQkJCQlyZW1vdGUgd2FrZXVwICovCisJdW5zaWduZWQgbG9uZwkJcG93ZXJfYml0c1sxXTsgLyogcG9ydHMgdGhhdCBhcmUgcG93ZXJlZCAqLworCXVuc2lnbmVkIGxvbmcJCWNoaWxkX3VzYWdlX2JpdHNbMV07IC8qIHBvcnRzIHBvd2VyZWQgb24gZm9yCisJCQkJCQkJY2hpbGRyZW4gKi8KICNpZiBVU0JfTUFYQ0hJTERSRU4gPiAzMSAvKiA4KnNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEgKi8KICNlcnJvciBldmVudF9iaXRzW10gaXMgdG9vIHNob3J0IQogI2VuZGlmCkBAIC02Niw2ICs2Nyw3IEBACiAJdW5zaWduZWQJCWxpbWl0ZWRfcG93ZXI6MTsKIAl1bnNpZ25lZAkJcXVpZXNjaW5nOjE7CiAJdW5zaWduZWQJCWRpc2Nvbm5lY3RlZDoxOworCXVuc2lnbmVkCQlpbl9yZXNldDoxOwogCiAJdW5zaWduZWQJCXF1aXJrX2NoZWNrX3BvcnRfYXV0b19zdXNwZW5kOjE7CiAKQEAgLTgxLDE5ICs4MywyMyBAQAogICogQGNoaWxkOiB1c2IgZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBwb3J0CiAgKiBAZGV2OiBnZW5lcmljIGRldmljZSBpbnRlcmZhY2UKICAqIEBwb3J0X293bmVyOiBwb3J0J3Mgb3duZXIKKyAqIEBwZWVyOiByZWxhdGVkIHVzYjIgYW5kIHVzYjMgcG9ydHMgKHNoYXJlIHRoZSBzYW1lIGNvbm5lY3RvcikKICAqIEBjb25uZWN0X3R5cGU6IHBvcnQncyBjb25uZWN0IHR5cGUKKyAqIEBsb2NhdGlvbjogb3BhcXVlIHJlcHJlc2VudGF0aW9uIG9mIHBsYXRmb3JtIGNvbm5lY3RvciBsb2NhdGlvbgorICogQHN0YXR1c19sb2NrOiBzeW5jaHJvbml6ZSBwb3J0X2V2ZW50KCkgdnMgdXNiX3BvcnRfe3N1c3BlbmR8cmVzdW1lfQogICogQHBvcnRudW06IHBvcnQgaW5kZXggbnVtIGJhc2VkIG9uZQotICogQHBvd2VyX2lzX29uOiBwb3J0J3MgcG93ZXIgc3RhdGUKLSAqIEBkaWRfcnVudGltZV9wdXQ6IHBvcnQgaGFzIGRvbmUgcG1fcnVudGltZV9wdXQoKS4KKyAqIEBpc19zdXBlcnNwZWVkIGNhY2hlIHN1cGVyLXNwZWVkIHN0YXR1cwogICovCiBzdHJ1Y3QgdXNiX3BvcnQgewogCXN0cnVjdCB1c2JfZGV2aWNlICpjaGlsZDsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAlzdHJ1Y3QgdXNiX2Rldl9zdGF0ZSAqcG9ydF9vd25lcjsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBlZXI7CiAJZW51bSB1c2JfcG9ydF9jb25uZWN0X3R5cGUgY29ubmVjdF90eXBlOworCXVzYl9wb3J0X2xvY2F0aW9uX3QgbG9jYXRpb247CisJc3RydWN0IG11dGV4IHN0YXR1c19sb2NrOwogCXU4IHBvcnRudW07Ci0JdW5zaWduZWQgcG93ZXJfaXNfb246MTsKLQl1bnNpZ25lZCBkaWRfcnVudGltZV9wdXQ6MTsKKwl1bnNpZ25lZCBpbnQgaXNfc3VwZXJzcGVlZDoxOwogfTsKIAogI2RlZmluZSB0b191c2JfcG9ydChfZGV2KSBcCkBAIC0xMTEsNiArMTE3LDI5IEBACiBleHRlcm4gaW50IHVzYl9jbGVhcl9wb3J0X2ZlYXR1cmUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCiAJCWludCBwb3J0MSwgaW50IGZlYXR1cmUpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaHViX2lzX3BvcnRfcG93ZXJfc3dpdGNoYWJsZShzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCV9fbGUxNiBoY3M7CisKKwlpZiAoIWh1YikKKwkJcmV0dXJuIGZhbHNlOworCWhjcyA9IGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljczsKKwlyZXR1cm4gKGxlMTZfdG9fY3B1KGhjcykgJiBIVUJfQ0hBUl9MUFNNKSA8IEhVQl9DSEFSX05PX0xQU007Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Yl9pc19zdXBlcnNwZWVkKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCXJldHVybiBoZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCA9PSBVU0JfSFVCX1BSX1NTOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGh1Yl9wb3dlcl9vbl9nb29kX2RlbGF5KHN0cnVjdCB1c2JfaHViICpodWIpCit7CisJdW5zaWduZWQgZGVsYXkgPSBodWItPmRlc2NyaXB0b3ItPmJQd3JPbjJQd3JHb29kICogMjsKKworCS8qIFdhaXQgYXQgbGVhc3QgMTAwIG1zZWMgZm9yIHBvd2VyIHRvIGJlY29tZSBzdGFibGUgKi8KKwlyZXR1cm4gbWF4KGRlbGF5LCAxMDBVKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaHViX3BvcnRfZGVib3VuY2VfYmVfY29ubmVjdGVkKHN0cnVjdCB1c2JfaHViICpodWIsCiAJCWludCBwb3J0MSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcG9ydC5jIGIvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKaW5kZXggNTE1NDJmOC4uNjIwMzZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKQEAgLTc2LDE3ICs3NiwyOSBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gdG9fdXNiX2RldmljZShkZXYtPnBhcmVudC0+cGFyZW50KTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2LT5wYXJlbnQpOwogCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIoaGRldik7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0X2Rldi0+Y2hpbGQ7CisJc3RydWN0IHVzYl9wb3J0ICpwZWVyID0gcG9ydF9kZXYtPnBlZXI7CiAJaW50IHBvcnQxID0gcG9ydF9kZXYtPnBvcnRudW07CiAJaW50IHJldHZhbDsKIAogCWlmICghaHViKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaHViLT5pbl9yZXNldCkgeworCQlzZXRfYml0KHBvcnQxLCBodWItPnBvd2VyX2JpdHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFBvd2VyIG9uIG91ciB1c2IzIHBlZXIgYmVmb3JlIHRoaXMgdXNiMiBwb3J0IHRvIHByZXZlbnQgYSB1c2IzCisJICogZGV2aWNlIGZyb20gZGVncmFkaW5nIHRvIGl0cyB1c2IyIGNvbm5lY3Rpb24KKwkgKi8KKwlpZiAoIXBvcnRfZGV2LT5pc19zdXBlcnNwZWVkICYmIHBlZXIpCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBlZXItPmRldik7CiAKIAl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50Zik7Ci0Jc2V0X2JpdChwb3J0MSwgaHViLT5idXN5X2JpdHMpOwotCiAJcmV0dmFsID0gdXNiX2h1Yl9zZXRfcG9ydF9wb3dlcihoZGV2LCBodWIsIHBvcnQxLCB0cnVlKTsKLQlpZiAocG9ydF9kZXYtPmNoaWxkICYmICFyZXR2YWwpIHsKKwltc2xlZXAoaHViX3Bvd2VyX29uX2dvb2RfZGVsYXkoaHViKSk7CisJaWYgKHVkZXYgJiYgIXJldHZhbCkgewogCQkvKgogCQkgKiBBdHRlbXB0IHRvIHdhaXQgZm9yIHVzYiBodWIgcG9ydCB0byBiZSByZWNvbm5lY3RlZCBpbiBvcmRlcgogCQkgKiB0byBtYWtlIHRoZSByZXN1bWUgcHJvY2VkdXJlIHN1Y2Nlc3NmdWwuICBUaGUgZGV2aWNlIG1heSBoYXZlCkBAIC05NywxMiArMTA5LDE3IEBACiAJCWlmIChyZXR2YWwgPCAwKQogCQkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgImNhbid0IGdldCByZWNvbm5lY3Rpb24gYWZ0ZXIgc2V0dGluZyBwb3J0ICBwb3dlciBvbiwgc3RhdHVzICVkXG4iLAogCQkJCQlyZXR2YWwpOwotCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFKTsKIAkJcmV0dmFsID0gMDsKKworCQkvKiBGb3JjZSB0aGUgY2hpbGQgYXdha2UgdG8gcmV2YWxpZGF0ZSBhZnRlciB0aGUgcG93ZXIgbG9zcy4gKi8KKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnQxLCBodWItPmNoaWxkX3VzYWdlX2JpdHMpKSB7CisJCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmcG9ydF9kZXYtPmRldik7CisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmdWRldi0+ZGV2KTsKKwkJfQogCX0KIAotCWNsZWFyX2JpdChwb3J0MSwgaHViLT5idXN5X2JpdHMpOwogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShpbnRmKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTExMiwyMyArMTI5LDM0IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSB0b191c2JfZGV2aWNlKGRldi0+cGFyZW50LT5wYXJlbnQpOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYtPnBhcmVudCk7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1YihoZGV2KTsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBlZXIgPSBwb3J0X2Rldi0+cGVlcjsKIAlpbnQgcG9ydDEgPSBwb3J0X2Rldi0+cG9ydG51bTsKIAlpbnQgcmV0dmFsOwogCiAJaWYgKCFodWIpCiAJCXJldHVybiAtRUlOVkFMOworCWlmIChodWItPmluX3Jlc2V0KQorCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGRldl9wbV9xb3NfZmxhZ3MoJnBvcnRfZGV2LT5kZXYsIFBNX1FPU19GTEFHX05PX1BPV0VSX09GRikKIAkJCT09IFBNX1FPU19GTEFHU19BTEwpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGYpOwotCXNldF9iaXQocG9ydDEsIGh1Yi0+YnVzeV9iaXRzKTsKIAlyZXR2YWwgPSB1c2JfaHViX3NldF9wb3J0X3Bvd2VyKGhkZXYsIGh1YiwgcG9ydDEsIGZhbHNlKTsKIAl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7Ci0JdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwJVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSk7Ci0JY2xlYXJfYml0KHBvcnQxLCBodWItPmJ1c3lfYml0cyk7CisJaWYgKCFwb3J0X2Rldi0+aXNfc3VwZXJzcGVlZCkKKwkJdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSk7CiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGludGYpOworCisJLyoKKwkgKiBPdXIgcGVlciB1c2IzIHBvcnQgbWF5IG5vdyBiZSBhYmxlIHRvIHN1c3BlbmQsIHNvCisJICogYXN5bmNocm9ub3VzbHkgcXVldWUgYSBzdXNwZW5kIHJlcXVlc3QgdG8gb2JzZXJ2ZSB0aGF0IHRoaXMKKwkgKiB1c2IyIHBvcnQgaXMgbm93IG9mZi4KKwkgKi8KKwlpZiAoIXBvcnRfZGV2LT5pc19zdXBlcnNwZWVkICYmIHBlZXIpCisJCXBtX3J1bnRpbWVfcHV0KCZwZWVyLT5kZXYpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KICNlbmRpZgpAQCAtMTQ2LDkgKzE3NCwyMTUgQEAKIAkucG0gPQkJJnVzYl9wb3J0X3BtX29wcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1c2JfcG9ydF9kcml2ZXIgPSB7CisJLm5hbWUgPSAidXNiIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbGlua19wZWVycyhzdHJ1Y3QgdXNiX3BvcnQgKmxlZnQsIHN0cnVjdCB1c2JfcG9ydCAqcmlnaHQpCit7CisJc3RydWN0IHVzYl9wb3J0ICpzc19wb3J0LCAqaHNfcG9ydDsKKwlpbnQgcmM7CisKKwlpZiAobGVmdC0+cGVlciA9PSByaWdodCAmJiByaWdodC0+cGVlciA9PSBsZWZ0KQorCQlyZXR1cm4gMDsKKworCWlmIChsZWZ0LT5wZWVyIHx8IHJpZ2h0LT5wZWVyKSB7CisJCXN0cnVjdCB1c2JfcG9ydCAqbHBlZXIgPSBsZWZ0LT5wZWVyOworCQlzdHJ1Y3QgdXNiX3BvcnQgKnJwZWVyID0gcmlnaHQtPnBlZXI7CisKKwkJV0FSTigxLCAiZmFpbGVkIHRvIHBlZXIgJXMgYW5kICVzICglcyAtPiAlcCkgKCVzIC0+ICVwKVxuIiwKKwkJCWRldl9uYW1lKCZsZWZ0LT5kZXYpLCBkZXZfbmFtZSgmcmlnaHQtPmRldiksCisJCQlkZXZfbmFtZSgmbGVmdC0+ZGV2KSwgbHBlZXIsCisJCQlkZXZfbmFtZSgmcmlnaHQtPmRldiksIHJwZWVyKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZsZWZ0LT5kZXYua29iaiwgJnJpZ2h0LT5kZXYua29iaiwgInBlZXIiKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZyaWdodC0+ZGV2LmtvYmosICZsZWZ0LT5kZXYua29iaiwgInBlZXIiKTsKKwlpZiAocmMpIHsKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmxlZnQtPmRldi5rb2JqLCAicGVlciIpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHdha2UgdGhlIEhpU3BlZWQgcG9ydCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcmFjZQorCSAqIHNldHRpbmcgLT5wZWVyIHdpdGggdXNiX3BvcnRfcnVudGltZV9zdXNwZW5kKCkuICBPdGhlcndpc2Ugd2UKKwkgKiBtYXkgbWlzcyBhIHN1c3BlbmQgZXZlbnQgZm9yIHRoZSBTdXBlclNwZWVkIHBvcnQuCisJICovCisJaWYgKGxlZnQtPmlzX3N1cGVyc3BlZWQpIHsKKwkJc3NfcG9ydCA9IGxlZnQ7CisJCVdBUk5fT04ocmlnaHQtPmlzX3N1cGVyc3BlZWQpOworCQloc19wb3J0ID0gcmlnaHQ7CisJfSBlbHNlIHsKKwkJc3NfcG9ydCA9IHJpZ2h0OworCQlXQVJOX09OKCFyaWdodC0+aXNfc3VwZXJzcGVlZCk7CisJCWhzX3BvcnQgPSBsZWZ0OworCX0KKwlwbV9ydW50aW1lX2dldF9zeW5jKCZoc19wb3J0LT5kZXYpOworCisJbGVmdC0+cGVlciA9IHJpZ2h0OworCXJpZ2h0LT5wZWVyID0gbGVmdDsKKworCS8qCisJICogVGhlIFN1cGVyU3BlZWQgcmVmZXJlbmNlIGlzIGRyb3BwZWQgd2hlbiB0aGUgSGlTcGVlZCBwb3J0IGluCisJICogdGhpcyByZWxhdGlvbnNoaXAgc3VzcGVuZHMsIGkuZS4gd2hlbiBpdCBpcyBzYWZlIHRvIGFsbG93IGEKKwkgKiBTdXBlclNwZWVkIGNvbm5lY3Rpb24gdG8gZHJvcCBzaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIGEKKwkgKiBkZXZpY2UgZGVncmFkaW5nIHRvIGl0cyBwb3dlcmVkLW9mZiBIaVNwZWVkIGNvbm5lY3Rpb24uCisJICoKKwkgKiBBbHNvLCBkcm9wIHRoZSBIaVNwZWVkIHJlZiB0YWtlbiBhYm92ZS4KKwkgKi8KKwlwbV9ydW50aW1lX2dldF9zeW5jKCZzc19wb3J0LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0KCZoc19wb3J0LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtfcGVlcnNfcmVwb3J0KHN0cnVjdCB1c2JfcG9ydCAqbGVmdCwgc3RydWN0IHVzYl9wb3J0ICpyaWdodCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGxpbmtfcGVlcnMobGVmdCwgcmlnaHQpOworCWlmIChyYyA9PSAwKSB7CisJCWRldl9kYmcoJmxlZnQtPmRldiwgInBlZXJlZCB0byAlc1xuIiwgZGV2X25hbWUoJnJpZ2h0LT5kZXYpKTsKKwl9IGVsc2UgeworCQlkZXZfd2FybigmbGVmdC0+ZGV2LCAiZmFpbGVkIHRvIHBlZXIgdG8gJXMgKCVkKVxuIiwKKwkJCQlkZXZfbmFtZSgmcmlnaHQtPmRldiksIHJjKTsKKwkJcHJfd2Fybl9vbmNlKCJ1c2I6IHBvcnQgcG93ZXIgbWFuYWdlbWVudCBtYXkgYmUgdW5yZWxpYWJsZVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfcGVlcnMoc3RydWN0IHVzYl9wb3J0ICpsZWZ0LCBzdHJ1Y3QgdXNiX3BvcnQgKnJpZ2h0KQoreworCXN0cnVjdCB1c2JfcG9ydCAqc3NfcG9ydCwgKmhzX3BvcnQ7CisKKwlXQVJOKHJpZ2h0LT5wZWVyICE9IGxlZnQgfHwgbGVmdC0+cGVlciAhPSByaWdodCwKKwkJCSIlcyBhbmQgJXMgYXJlIG5vdCBwZWVycz9cbiIsCisJCQlkZXZfbmFtZSgmbGVmdC0+ZGV2KSwgZGV2X25hbWUoJnJpZ2h0LT5kZXYpKTsKKworCS8qCisJICogV2Ugd2FrZSB0aGUgSGlTcGVlZCBwb3J0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWNlIGl0cworCSAqIHVzYl9wb3J0X3J1bnRpbWVfcmVzdW1lKCkgZXZlbnQgd2hpY2ggdGFrZXMgYSBTdXBlclNwZWVkIHJlZgorCSAqIHdoZW4gLT5wZWVyIGlzICFOVUxMLgorCSAqLworCWlmIChsZWZ0LT5pc19zdXBlcnNwZWVkKSB7CisJCXNzX3BvcnQgPSBsZWZ0OworCQloc19wb3J0ID0gcmlnaHQ7CisJfSBlbHNlIHsKKwkJc3NfcG9ydCA9IHJpZ2h0OworCQloc19wb3J0ID0gbGVmdDsKKwl9CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZoc19wb3J0LT5kZXYpOworCisJc3lzZnNfcmVtb3ZlX2xpbmsoJmxlZnQtPmRldi5rb2JqLCAicGVlciIpOworCXJpZ2h0LT5wZWVyID0gTlVMTDsKKwlzeXNmc19yZW1vdmVfbGluaygmcmlnaHQtPmRldi5rb2JqLCAicGVlciIpOworCWxlZnQtPnBlZXIgPSBOVUxMOworCisJLyogRHJvcCB0aGUgU3VwZXJTcGVlZCByZWYgaGVsZCBvbiBiZWhhbGYgb2YgdGhlIGFjdGl2ZSBIaVNwZWVkIHBvcnQgKi8KKwlwbV9ydW50aW1lX3B1dCgmc3NfcG9ydC0+ZGV2KTsKKworCS8qIERyb3AgdGhlIHJlZiB0YWtlbiBhYm92ZSAqLworCXBtX3J1bnRpbWVfcHV0KCZoc19wb3J0LT5kZXYpOworfQorCisvKgorICogRm9yIGVhY2ggdXNiIGh1YiBkZXZpY2UgaW4gdGhlIHN5c3RlbSBjaGVjayB0byBzZWUgaWYgaXQgaXMgaW4gdGhlCisgKiBwZWVyIGRvbWFpbiBvZiB0aGUgZ2l2ZW4gcG9ydF9kZXYsIGFuZCBpZiBpdCBpcyBjaGVjayB0byBzZWUgaWYgaXQKKyAqIGhhcyBhIHBvcnQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwb3J0IGJ5IGxvY2F0aW9uCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfbG9jYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnBlZXJfaGRldiwgdm9pZCAqcCkKK3sKKwlpbnQgcG9ydDE7CisJc3RydWN0IHVzYl9oY2QgKmhjZCwgKnBlZXJfaGNkOworCXN0cnVjdCB1c2JfcG9ydCAqcG9ydF9kZXYgPSBwLCAqcGVlcjsKKwlzdHJ1Y3QgdXNiX2h1YiAqcGVlcl9odWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIocGVlcl9oZGV2KTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IHRvX3VzYl9kZXZpY2UocG9ydF9kZXYtPmRldi5wYXJlbnQtPnBhcmVudCk7CisKKwlpZiAoIXBlZXJfaHViKQorCQlyZXR1cm4gMDsKKworCWhjZCA9IGJ1c190b19oY2QoaGRldi0+YnVzKTsKKwlwZWVyX2hjZCA9IGJ1c190b19oY2QocGVlcl9oZGV2LT5idXMpOworCS8qIHBlZXJfaGNkIGlzIHByb3Zpc2lvbmFsIHVudGlsIHdlIHZlcmlmeSBpdCBhZ2FpbnN0IHRoZSBrbm93biBwZWVyICovCisJaWYgKHBlZXJfaGNkICE9IGhjZC0+c2hhcmVkX2hjZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gcGVlcl9oZGV2LT5tYXhjaGlsZDsgcG9ydDErKykgeworCQlwZWVyID0gcGVlcl9odWItPnBvcnRzW3BvcnQxIC0gMV07CisJCWlmIChwZWVyICYmIHBlZXItPmxvY2F0aW9uID09IHBvcnRfZGV2LT5sb2NhdGlvbikgeworCQkJbGlua19wZWVyc19yZXBvcnQocG9ydF9kZXYsIHBlZXIpOworCQkJcmV0dXJuIDE7IC8qIGRvbmUgKi8KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogRmluZCB0aGUgcGVlciBwb3J0IGVpdGhlciB2aWEgZXhwbGljaXQgcGxhdGZvcm0gZmlybXdhcmUgImxvY2F0aW9uIgorICogZGF0YSwgdGhlIHBlZXIgaGNkIGZvciByb290IGh1YnMsIG9yIHRoZSB1cHN0cmVhbSBwZWVyIHJlbGF0aW9uc2hpcAorICogZm9yIGFsbCBvdGhlciBodWJzLgorICovCitzdGF0aWMgdm9pZCBmaW5kX2FuZF9saW5rX3BlZXIoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxKQoreworCXN0cnVjdCB1c2JfcG9ydCAqcG9ydF9kZXYgPSBodWItPnBvcnRzW3BvcnQxIC0gMV0sICpwZWVyOworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpwZWVyX2hkZXY7CisJc3RydWN0IHVzYl9odWIgKnBlZXJfaHViOworCisJLyoKKwkgKiBJZiBsb2NhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZSB0aGVuIHdlIGNhbiBvbmx5IHBlZXIgdGhpcyBwb3J0CisJICogYnkgYSBsb2NhdGlvbiBtYXRjaCwgbm90IHRoZSBkZWZhdWx0IHBlZXIgKGxlc3Qgd2UgY3JlYXRlIGEKKwkgKiBzaXR1YXRpb24gd2hlcmUgd2UgbmVlZCB0byBnbyBiYWNrIGFuZCB1bmRvIGEgZGVmYXVsdCBwZWVyaW5nCisJICogd2hlbiB0aGUgcG9ydCBpcyBsYXRlciBwZWVyZWQgYnkgbG9jYXRpb24gZGF0YSkKKwkgKi8KKwlpZiAocG9ydF9kZXYtPmxvY2F0aW9uKSB7CisJCS8qIHdlIGxpbmsgdGhlIHBlZXIgaW4gbWF0Y2hfbG9jYXRpb24oKSBpZiBmb3VuZCAqLworCQl1c2JfZm9yX2VhY2hfZGV2KHBvcnRfZGV2LCBtYXRjaF9sb2NhdGlvbik7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFoZGV2LT5wYXJlbnQpIHsKKwkJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGJ1c190b19oY2QoaGRldi0+YnVzKTsKKwkJc3RydWN0IHVzYl9oY2QgKnBlZXJfaGNkID0gaGNkLT5zaGFyZWRfaGNkOworCisJCWlmICghcGVlcl9oY2QpCisJCQlyZXR1cm47CisKKwkJcGVlcl9oZGV2ID0gcGVlcl9oY2QtPnNlbGYucm9vdF9odWI7CisJfSBlbHNlIHsKKwkJc3RydWN0IHVzYl9wb3J0ICp1cHN0cmVhbTsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnBhcmVudCA9IGhkZXYtPnBhcmVudDsKKwkJc3RydWN0IHVzYl9odWIgKnBhcmVudF9odWIgPSB1c2JfaHViX3RvX3N0cnVjdF9odWIocGFyZW50KTsKKworCQlpZiAoIXBhcmVudF9odWIpCisJCQlyZXR1cm47CisKKwkJdXBzdHJlYW0gPSBwYXJlbnRfaHViLT5wb3J0c1toZGV2LT5wb3J0bnVtIC0gMV07CisJCWlmICghdXBzdHJlYW0gfHwgIXVwc3RyZWFtLT5wZWVyKQorCQkJcmV0dXJuOworCisJCXBlZXJfaGRldiA9IHVwc3RyZWFtLT5wZWVyLT5jaGlsZDsKKwl9CisKKwlwZWVyX2h1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1YihwZWVyX2hkZXYpOworCWlmICghcGVlcl9odWIgfHwgcG9ydDEgPiBwZWVyX2hkZXYtPm1heGNoaWxkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIHdlIGZvdW5kIGEgdmFsaWQgZGVmYXVsdCBwZWVyLCBsYXN0IGNoZWNrIGlzIHRvIG1ha2Ugc3VyZSBpdAorCSAqIGRvZXMgbm90IGhhdmUgbG9jYXRpb24gZGF0YQorCSAqLworCXBlZXIgPSBwZWVyX2h1Yi0+cG9ydHNbcG9ydDEgLSAxXTsKKwlpZiAocGVlciAmJiBwZWVyLT5sb2NhdGlvbiA9PSAwKQorCQlsaW5rX3BlZXJzX3JlcG9ydChwb3J0X2RldiwgcGVlcik7Cit9CisKIGludCB1c2JfaHViX2NyZWF0ZV9wb3J0X2RldmljZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEpCiB7Ci0Jc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IE5VTEw7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldjsKIAlpbnQgcmV0dmFsOwogCiAJcG9ydF9kZXYgPSBremFsbG9jKHNpemVvZigqcG9ydF9kZXYpLCBHRlBfS0VSTkVMKTsKQEAgLTE1OSwyNCArMzkzLDMzIEBACiAKIAlodWItPnBvcnRzW3BvcnQxIC0gMV0gPSBwb3J0X2RldjsKIAlwb3J0X2Rldi0+cG9ydG51bSA9IHBvcnQxOwotCXBvcnRfZGV2LT5wb3dlcl9pc19vbiA9IHRydWU7CisJc2V0X2JpdChwb3J0MSwgaHViLT5wb3dlcl9iaXRzKTsKIAlwb3J0X2Rldi0+ZGV2LnBhcmVudCA9IGh1Yi0+aW50ZmRldjsKIAlwb3J0X2Rldi0+ZGV2Lmdyb3VwcyA9IHBvcnRfZGV2X2dyb3VwOwogCXBvcnRfZGV2LT5kZXYudHlwZSA9ICZ1c2JfcG9ydF9kZXZpY2VfdHlwZTsKLQlkZXZfc2V0X25hbWUoJnBvcnRfZGV2LT5kZXYsICJwb3J0JWQiLCBwb3J0MSk7Ci0KKwlwb3J0X2Rldi0+ZGV2LmRyaXZlciA9ICZ1c2JfcG9ydF9kcml2ZXI7CisJaWYgKGh1Yl9pc19zdXBlcnNwZWVkKGh1Yi0+aGRldikpCisJCXBvcnRfZGV2LT5pc19zdXBlcnNwZWVkID0gMTsKKwlkZXZfc2V0X25hbWUoJnBvcnRfZGV2LT5kZXYsICIlcy1wb3J0JWQiLCBkZXZfbmFtZSgmaHViLT5oZGV2LT5kZXYpLAorCQkJcG9ydDEpOworCW11dGV4X2luaXQoJnBvcnRfZGV2LT5zdGF0dXNfbG9jayk7CiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZwb3J0X2Rldi0+ZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCisJZmluZF9hbmRfbGlua19wZWVyKGh1YiwgcG9ydDEpOworCiAJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwb3J0X2Rldi0+ZGV2KTsKIAotCS8qIEl0IHdvdWxkIGJlIGRhbmdlcm91cyBpZiB1c2VyIHNwYWNlIGNvdWxkbid0Ci0JICogcHJldmVudCB1c2IgZGV2aWNlIGZyb20gYmVpbmcgcG93ZXJlZCBvZmYuIFNvIGRvbid0Ci0JICogZW5hYmxlIHBvcnQgcnVudGltZSBwbSBpZiBmYWlsZWQgdG8gZXhwb3NlIHBvcnQncyBwbSBxb3MuCisJLyoKKwkgKiBEbyBub3QgZW5hYmxlIHBvcnQgcnVudGltZSBwbSBpZiB0aGUgaHViIGRvZXMgbm90IHN1cHBvcnQKKwkgKiBwb3dlciBzd2l0Y2hpbmcuICBBbHNvLCB1c2Vyc3BhY2UgbXVzdCBoYXZlIGZpbmFsIHNheSBvZgorCSAqIHdoZXRoZXIgYSBwb3J0IGlzIHBlcm1pdHRlZCB0byBwb3dlci1vZmYuICBEbyBub3QgZW5hYmxlCisJICogcnVudGltZSBwbSBpZiB3ZSBmYWlsIHRvIGV4cG9zZSBwbV9xb3Nfbm9fcG93ZXJfb2ZmLgogCSAqLwotCWlmICghZGV2X3BtX3Fvc19leHBvc2VfZmxhZ3MoJnBvcnRfZGV2LT5kZXYsCi0JCQlQTV9RT1NfRkxBR19OT19QT1dFUl9PRkYpKQorCWlmIChodWJfaXNfcG9ydF9wb3dlcl9zd2l0Y2hhYmxlKGh1YikKKwkJCSYmIGRldl9wbV9xb3NfZXhwb3NlX2ZsYWdzKCZwb3J0X2Rldi0+ZGV2LAorCQkJUE1fUU9TX0ZMQUdfTk9fUE9XRVJfT0ZGKSA9PSAwKQogCQlwbV9ydW50aW1lX2VuYWJsZSgmcG9ydF9kZXYtPmRldik7CiAKIAlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnBvcnRfZGV2LT5kZXYpOwpAQCAtMTg4LDkgKzQzMSwxMyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXZvaWQgdXNiX2h1Yl9yZW1vdmVfcG9ydF9kZXZpY2Uoc3RydWN0IHVzYl9odWIgKmh1YiwKLQkJCQkgICAgICAgaW50IHBvcnQxKQordm9pZCB1c2JfaHViX3JlbW92ZV9wb3J0X2RldmljZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEpCiB7Ci0JZGV2aWNlX3VucmVnaXN0ZXIoJmh1Yi0+cG9ydHNbcG9ydDEgLSAxXS0+ZGV2KTsKLX0KKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gaHViLT5wb3J0c1twb3J0MSAtIDFdOworCXN0cnVjdCB1c2JfcG9ydCAqcGVlcjsKIAorCXBlZXIgPSBwb3J0X2Rldi0+cGVlcjsKKwlpZiAocGVlcikKKwkJdW5saW5rX3BlZXJzKHBvcnRfZGV2LCBwZWVyKTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydF9kZXYtPmRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi1hY3BpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi1hY3BpLmMKaW5kZXggNWNhNDA3MC4uMjc3NmNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2ItYWNwaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLWFjcGkuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9oY2QuaD4KIAotI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImh1Yi5oIgogCiAvKioKICAqIHVzYl9hY3BpX3Bvd2VyX21hbmFnZWFibGUgLSBjaGVjayB3aGV0aGVyIHVzYiBwb3J0IGhhcwpAQCAtNTUsMTMgKzU1LDE4IEBACiAgKi8KIGludCB1c2JfYWNwaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIGludCBpbmRleCwgYm9vbCBlbmFibGUpCiB7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1YihoZGV2KTsKKwlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2OwogCWFjcGlfaGFuZGxlIHBvcnRfaGFuZGxlOwogCXVuc2lnbmVkIGNoYXIgc3RhdGU7CiAJaW50IHBvcnQxID0gaW5kZXggKyAxOwogCWludCBlcnJvciA9IC1FSU5WQUw7CiAKLQlwb3J0X2hhbmRsZSA9IChhY3BpX2hhbmRsZSl1c2JfZ2V0X2h1Yl9wb3J0X2FjcGlfaGFuZGxlKGhkZXYsCi0JCXBvcnQxKTsKKwlpZiAoIWh1YikKKwkJcmV0dXJuIC1FTk9ERVY7CisJcG9ydF9kZXYgPSBodWItPnBvcnRzW3BvcnQxIC0gMV07CisKKwlwb3J0X2hhbmRsZSA9IChhY3BpX2hhbmRsZSkgdXNiX2dldF9odWJfcG9ydF9hY3BpX2hhbmRsZShoZGV2LCBwb3J0MSk7CiAJaWYgKCFwb3J0X2hhbmRsZSkKIAkJcmV0dXJuIGVycm9yOwogCkBAIC03MiwyMyArNzcsMjEgQEAKIAogCWVycm9yID0gYWNwaV9idXNfc2V0X3Bvd2VyKHBvcnRfaGFuZGxlLCBzdGF0ZSk7CiAJaWYgKCFlcnJvcikKLQkJZGV2X2RiZygmaGRldi0+ZGV2LCAiVGhlIHBvd2VyIG9mIGh1YiBwb3J0ICVkIHdhcyBzZXQgdG8gJWRcbiIsCi0JCQlwb3J0MSwgZW5hYmxlKTsKKwkJZGV2X2RiZygmcG9ydF9kZXYtPmRldiwgImFjcGk6IHBvd2VyIHdhcyBzZXQgdG8gJWRcbiIsIGVuYWJsZSk7CiAJZWxzZQotCQlkZXZfZGJnKCZoZGV2LT5kZXYsICJUaGUgcG93ZXIgb2YgaHViIHBvcnQgZmFpbGVkIHRvIGJlIHNldFxuIik7CisJCWRldl9kYmcoJnBvcnRfZGV2LT5kZXYsICJhY3BpOiBwb3dlciBmYWlsZWQgdG8gYmUgc2V0XG4iKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hY3BpX3NldF9wb3dlcl9zdGF0ZSk7CiAKLXN0YXRpYyBpbnQgdXNiX2FjcGlfY2hlY2tfcG9ydF9jb25uZWN0X3R5cGUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCi0JYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcG9ydDEpCitzdGF0aWMgZW51bSB1c2JfcG9ydF9jb25uZWN0X3R5cGUgdXNiX2FjcGlfZ2V0X2Nvbm5lY3RfdHlwZShhY3BpX2hhbmRsZSBoYW5kbGUsCisJCXN0cnVjdCBhY3BpX3BsZF9pbmZvICpwbGQpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCWVudW0gdXNiX3BvcnRfY29ubmVjdF90eXBlIGNvbm5lY3RfdHlwZSA9IFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9VTktOT1dOOwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJdW5pb24gYWNwaV9vYmplY3QgKnVwYzsKLQlzdHJ1Y3QgYWNwaV9wbGRfaW5mbyAqcGxkOwotCWludCByZXQgPSAwOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCS8qCiAJICogQWNjb3JkaW5nIHRvIEFDUEkgU3BlYyA5LjEzLiBQTEQgaW5kaWNhdGVzIHdoZXRoZXIgdXNiIHBvcnQgaXMKQEAgLTk4LDM5ICsxMDEsMzcgQEAKIAkgKiBhIHVzYiBkZXZpY2UgaXMgZGlyZWN0bHkgaGFyZC13aXJlZCB0byB0aGUgcG9ydC4gSWYgbm8gdmlzaWJsZSBhbmQKIAkgKiBubyBjb25uZWN0YWJsZSwgdGhlIHBvcnQgd291bGQgYmUgbm90IHVzZWQuCiAJICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlX2xvY2F0aW9uKGhhbmRsZSwgJnBsZCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9VUEMiLCBOVUxMLCAmYnVmZmVyKTsKIAl1cGMgPSBidWZmZXIucG9pbnRlcjsKIAlpZiAoIXVwYyB8fCAodXBjLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKQogCQl8fCB1cGMtPnBhY2thZ2UuY291bnQgIT0gNCkgewotCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAodXBjLT5wYWNrYWdlLmVsZW1lbnRzWzBdLmludGVnZXIudmFsdWUpCiAJCWlmIChwbGQtPnVzZXJfdmlzaWJsZSkKLQkJCXVzYl9zZXRfaHViX3BvcnRfY29ubmVjdF90eXBlKGhkZXYsIHBvcnQxLAotCQkJCVVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9IT1RfUExVRyk7CisJCQljb25uZWN0X3R5cGUgPSBVU0JfUE9SVF9DT05ORUNUX1RZUEVfSE9UX1BMVUc7CiAJCWVsc2UKLQkJCXVzYl9zZXRfaHViX3BvcnRfY29ubmVjdF90eXBlKGhkZXYsIHBvcnQxLAotCQkJCVVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9IQVJEX1dJUkVEKTsKKwkJCWNvbm5lY3RfdHlwZSA9IFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9IQVJEX1dJUkVEOwogCWVsc2UgaWYgKCFwbGQtPnVzZXJfdmlzaWJsZSkKLQkJdXNiX3NldF9odWJfcG9ydF9jb25uZWN0X3R5cGUoaGRldiwgcG9ydDEsIFVTQl9QT1JUX05PVF9VU0VEKTsKLQorCQljb25uZWN0X3R5cGUgPSBVU0JfUE9SVF9OT1RfVVNFRDsKIG91dDoKLQlBQ1BJX0ZSRUUocGxkKTsKIAlrZnJlZSh1cGMpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGNvbm5lY3RfdHlwZTsKIH0KIAorCisvKgorICogUHJpdmF0ZSB0byB1c2ItYWNwaSwgYWxsIHRoZSBjb3JlIG5lZWRzIHRvIGtub3cgaXMgdGhhdAorICogcG9ydF9kZXYtPmxvY2F0aW9uIGlzIG5vbi16ZXJvIHdoZW4gaXQgaGFzIGJlZW4gc2V0IGJ5IHRoZSBmaXJtd2FyZS4KKyAqLworI2RlZmluZSBVU0JfQUNQSV9MT0NBVElPTl9WQUxJRCAoMSA8PCAzMSkKKwogc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqdXNiX2FjcGlfZmluZF9jb21wYW5pb24oc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKIAlhY3BpX2hhbmRsZSAqcGFyZW50X2hhbmRsZTsKLQlpbnQgcG9ydF9udW07CiAKIAkvKgogCSAqIEluIHRoZSBBQ1BJIERTRFQgdGFibGUsIG9ubHkgdXNiIHJvb3QgaHViIGFuZCB1c2IgcG9ydHMgYXJlCkBAIC0xNDcsMzcgKzE0OCwxOSBAQAogCSAqLwogCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKIAkJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKLQkJaWYgKHVkZXYtPnBhcmVudCkgewotCQkJZW51bSB1c2JfcG9ydF9jb25uZWN0X3R5cGUgdHlwZTsKLQotCQkJLyoKLQkJCSAqIEFjY29yZGluZyB1c2IgcG9ydCdzIGNvbm5lY3QgdHlwZSB0byBzZXQgdXNiIGRldmljZSdzCi0JCQkgKiByZW1vdmFiaWxpdHkuCi0JCQkgKi8KLQkJCXR5cGUgPSB1c2JfZ2V0X2h1Yl9wb3J0X2Nvbm5lY3RfdHlwZSh1ZGV2LT5wYXJlbnQsCi0JCQkJdWRldi0+cG9ydG51bSk7Ci0JCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCWNhc2UgVVNCX1BPUlRfQ09OTkVDVF9UWVBFX0hPVF9QTFVHOgotCQkJCXVkZXYtPnJlbW92YWJsZSA9IFVTQl9ERVZJQ0VfUkVNT1ZBQkxFOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfUE9SVF9DT05ORUNUX1RZUEVfSEFSRF9XSVJFRDoKLQkJCQl1ZGV2LT5yZW1vdmFibGUgPSBVU0JfREVWSUNFX0ZJWEVEOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl1ZGV2LT5yZW1vdmFibGUgPSBVU0JfREVWSUNFX1JFTU9WQUJMRV9VTktOT1dOOwotCQkJCWJyZWFrOwotCQkJfQotCisJCWlmICh1ZGV2LT5wYXJlbnQpCiAJCQlyZXR1cm4gTlVMTDsKLQkJfQogCi0JCS8qIHJvb3QgaHViJ3MgcGFyZW50IGlzIHRoZSB1c2IgaGNkLiAqLwotCQlyZXR1cm4gYWNwaV9maW5kX2NoaWxkX2RldmljZShBQ1BJX0NPTVBBTklPTihkZXYtPnBhcmVudCksCi0JCQkJCSAgICAgIHVkZXYtPnBvcnRudW0sIGZhbHNlKTsKKwkJLyogcm9vdCBodWIgaXMgb25seSBjaGlsZCAoX0FEUj0wKSB1bmRlciBpdHMgcGFyZW50LCB0aGUgSEMgKi8KKwkJYWRldiA9IEFDUElfQ09NUEFOSU9OKGRldi0+cGFyZW50KTsKKwkJcmV0dXJuIGFjcGlfZmluZF9jaGlsZF9kZXZpY2UoYWRldiwgMCwgZmFsc2UpOwogCX0gZWxzZSBpZiAoaXNfdXNiX3BvcnQoZGV2KSkgewotCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYgPSBOVUxMOworCQlzdHJ1Y3QgdXNiX3BvcnQgKnBvcnRfZGV2ID0gdG9fdXNiX3BvcnQoZGV2KTsKKwkJaW50IHBvcnQxID0gcG9ydF9kZXYtPnBvcnRudW07CisJCXN0cnVjdCBhY3BpX3BsZF9pbmZvICpwbGQ7CisJCWFjcGlfaGFuZGxlICpoYW5kbGU7CisJCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCQlzc2NhbmYoZGV2X25hbWUoZGV2KSwgInBvcnQlZCIsICZwb3J0X251bSk7CiAJCS8qIEdldCB0aGUgc3RydWN0IHVzYl9kZXZpY2UgcG9pbnQgb2YgcG9ydCdzIGh1YiAqLwogCQl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYtPnBhcmVudC0+cGFyZW50KTsKIApAQCAtMTg4LDEyICsxNzEsMTEgQEAKIAkJICovCiAJCWlmICghdWRldi0+cGFyZW50KSB7CiAJCQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gYnVzX3RvX2hjZCh1ZGV2LT5idXMpOwotCQkJaW50IHJhd19wb3J0X251bTsKKwkJCWludCByYXc7CiAKLQkJCXJhd19wb3J0X251bSA9IHVzYl9oY2RfZmluZF9yYXdfcG9ydF9udW1iZXIoaGNkLAotCQkJCXBvcnRfbnVtKTsKKwkJCXJhdyA9IHVzYl9oY2RfZmluZF9yYXdfcG9ydF9udW1iZXIoaGNkLCBwb3J0MSk7CiAJCQlhZGV2ID0gYWNwaV9maW5kX2NoaWxkX2RldmljZShBQ1BJX0NPTVBBTklPTigmdWRldi0+ZGV2KSwKLQkJCQkJCSAgICAgIHJhd19wb3J0X251bSwgZmFsc2UpOworCQkJCQlyYXcsIGZhbHNlKTsKIAkJCWlmICghYWRldikKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfSBlbHNlIHsKQEAgLTIwNCwxMSArMTg2LDIwIEBACiAJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCWFjcGlfYnVzX2dldF9kZXZpY2UocGFyZW50X2hhbmRsZSwgJmFkZXYpOwotCQkJYWRldiA9IGFjcGlfZmluZF9jaGlsZF9kZXZpY2UoYWRldiwgcG9ydF9udW0sIGZhbHNlKTsKKwkJCWFkZXYgPSBhY3BpX2ZpbmRfY2hpbGRfZGV2aWNlKGFkZXYsIHBvcnQxLCBmYWxzZSk7CiAJCQlpZiAoIWFkZXYpCiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJdXNiX2FjcGlfY2hlY2tfcG9ydF9jb25uZWN0X3R5cGUodWRldiwgYWRldi0+aGFuZGxlLCBwb3J0X251bSk7CisJCWhhbmRsZSA9IGFkZXYtPmhhbmRsZTsKKwkJc3RhdHVzID0gYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlX2xvY2F0aW9uKGhhbmRsZSwgJnBsZCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCAhcGxkKQorCQkJcmV0dXJuIGFkZXY7CisKKwkJcG9ydF9kZXYtPmxvY2F0aW9uID0gVVNCX0FDUElfTE9DQVRJT05fVkFMSUQKKwkJCXwgcGxkLT5ncm91cF90b2tlbiA8PCA4IHwgcGxkLT5ncm91cF9wb3NpdGlvbjsKKwkJcG9ydF9kZXYtPmNvbm5lY3RfdHlwZSA9IHVzYl9hY3BpX2dldF9jb25uZWN0X3R5cGUoaGFuZGxlLCBwbGQpOworCQlBQ1BJX0ZSRUUocGxkKTsKKwogCQlyZXR1cm4gYWRldjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmggYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCmluZGV4IDc1YmY2NDkuLmQ5ZDA4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtMTA3LDExICsxMDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB1c2JfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgdXNiX3NldF91c2IyX2hhcmR3YXJlX2xwbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTExOSw2ICsxMTQsNyBAQAogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCBtdXRleCB1c2JfcG9ydF9wZWVyX211dGV4OwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfZGV2aWNlX3R5cGU7CiBleHRlcm4gc3RydWN0IGRldmljZV90eXBlIHVzYl9pZl9kZXZpY2VfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX3R5cGUgdXNiX2VwX2RldmljZV90eXBlOwpAQCAtMTcwLDE1ICsxNjYsMTcgQEAKIGV4dGVybiBpbnQgdXNiX2RldmlvX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1c2JfZGV2aW9fY2xlYW51cCh2b2lkKTsKIAorLyoKKyAqIEZpcm13YXJlIHNwZWNpZmljIGNvb2tpZSBpZGVudGlmeWluZyBhIHBvcnQncyBsb2NhdGlvbi4gJzAnID09IG5vIGxvY2F0aW9uCisgKiBkYXRhIGF2YWlsYWJsZQorICovCit0eXBlZGVmIHUzMiB1c2JfcG9ydF9sb2NhdGlvbl90OworCiAvKiBpbnRlcm5hbCBub3RpZnkgc3R1ZmYgKi8KIGV4dGVybiB2b2lkIHVzYl9ub3RpZnlfYWRkX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBleHRlcm4gdm9pZCB1c2Jfbm90aWZ5X3JlbW92ZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogZXh0ZXJuIHZvaWQgdXNiX25vdGlmeV9hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICp1YnVzKTsKIGV4dGVybiB2b2lkIHVzYl9ub3RpZnlfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqdWJ1cyk7Ci1leHRlcm4gZW51bSB1c2JfcG9ydF9jb25uZWN0X3R5cGUKLQl1c2JfZ2V0X2h1Yl9wb3J0X2Nvbm5lY3RfdHlwZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgaW50IHBvcnQxKTsKLWV4dGVybiB2b2lkIHVzYl9zZXRfaHViX3BvcnRfY29ubmVjdF90eXBlKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCBpbnQgcG9ydDEsCi0JZW51bSB1c2JfcG9ydF9jb25uZWN0X3R5cGUgdHlwZSk7CiBleHRlcm4gdm9pZCB1c2JfaHViX2FkanVzdF9kZXZpY2VyZW1vdmFibGUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCiAJCXN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL0tjb25maWcgYi9kcml2ZXJzL3VzYi9kd2MyL0tjb25maWcKaW5kZXggYmU5NDdkNi4uZjkzODA3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvS2NvbmZpZwpAQCAtMSwyNSArMSw1OCBAQAogY29uZmlnIFVTQl9EV0MyCi0JdHJpc3RhdGUgIkRlc2lnbldhcmUgVVNCMiBEUkQgQ29yZSBTdXBwb3J0IgorCWJvb2wgIkRlc2lnbldhcmUgVVNCMiBEUkQgQ29yZSBTdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCiAJaGVscAotCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdXIgc3lzdGVtIGhhcyBhIER1YWwgUm9sZSBIaWdoU3BlZWQKLQkgIFVTQiBjb250cm9sbGVyIGJhc2VkIG9uIHRoZSBEZXNpZ25XYXJlIEhTT1RHIElQIENvcmUuCisJICBTYXkgWSBoZXJlIGlmIHlvdXIgc3lzdGVtIGhhcyBhIER1YWwgUm9sZSBIaS1TcGVlZCBVU0IKKwkgIGNvbnRyb2xsZXIgYmFzZWQgb24gdGhlIERlc2lnbldhcmUgSFNPVEcgSVAgQ29yZS4KIAotCSAgSWYgeW91IGNob29zZSB0byBidWlsZCB0aGlzIGRyaXZlciBhcyBkeW5hbWljYWxseSBsaW5rZWQKLQkgIG1vZHVsZXMsIHRoZSBjb3JlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkd2MyLmtvLCB0aGUKLQkgIFBDSSBidXMgaW50ZXJmYWNlIG1vZHVsZSAoaWYgeW91IGhhdmUgYSBQQ0kgYnVzIHN5c3RlbSkKLQkgIHdpbGwgYmUgY2FsbGVkIGR3YzJfcGNpLmtvIGFuZCB0aGUgcGxhdGZvcm0gaW50ZXJmYWNlIG1vZHVsZQotCSAgKGZvciBjb250cm9sbGVycyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIENQVSkgd2lsbCBiZSBjYWxsZWQKLQkgIGR3YzJfcGxhdGZvcm0ua28uCisJICBGb3IgaG9zdCBtb2RlLCBpZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIHRoZSBkcml2ZXIgYXMgZHluYW1pY2FsbHkKKwkgIGxpbmtlZCBtb2R1bGVzLCB0aGUgY29yZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHdjMi5rbywgdGhlIFBDSQorCSAgYnVzIGludGVyZmFjZSBtb2R1bGUgKGlmIHlvdSBoYXZlIGEgUENJIGJ1cyBzeXN0ZW0pIHdpbGwgYmUKKwkgIGNhbGxlZCBkd2MyX3BjaS5rbywgYW5kIHRoZSBwbGF0Zm9ybSBpbnRlcmZhY2UgbW9kdWxlIChmb3IKKwkgIGNvbnRyb2xsZXJzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgQ1BVKSB3aWxsIGJlIGNhbGxlZAorCSAgZHdjMl9wbGF0Zm9ybS5rby4gRm9yIGdhZGdldCBtb2RlLCB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlCisJICBtb2R1bGUgY2FsbGVkIGR3YzJfZ2FkZ2V0LmtvLgogCi0JICBOT1RFOiBUaGlzIGRyaXZlciBhdCBwcmVzZW50IG9ubHkgaW1wbGVtZW50cyB0aGUgSG9zdCBtb2RlCi0JICBvZiB0aGUgY29udHJvbGxlci4gVGhlIGV4aXN0aW5nIHMzYy1oc290ZyBkcml2ZXIgc3VwcG9ydHMKLQkgIFBlcmlwaGVyYWwgbW9kZSwgYnV0IG9ubHkgZm9yIHRoZSBTYW1zdW5nIFMzQyBwbGF0Zm9ybXMuCi0JICBUaGVyZSBhcmUgcGxhbnMgdG8gbWVyZ2UgdGhlIHMzYy1oc290ZyBkcml2ZXIgd2l0aCB0aGlzCi0JICBkcml2ZXIgaW4gdGhlIG5lYXIgZnV0dXJlIHRvIGNyZWF0ZSBhIGR1YWwtcm9sZSBkcml2ZXIuCisJICBOT1RFOiBUaGUgczNjLWhzb3RnIGRyaXZlciBpcyBub3cgcmVuYW1lZCB0byBkd2MyX2dhZGdldC4gVGhlCisJICBob3N0IGFuZCBnYWRnZXQgZHJpdmVycyBhcmUgc3RpbGwgY3VycmVudGx5IHNlcGFyYXRlIGRyaXZlcnMuCisJICBUaGVyZSBhcmUgcGxhbnMgdG8gbWVyZ2UgdGhlIGR3YzJfZ2FkZ2V0IGRyaXZlciB3aXRoIHRoZSBkd2MyCisJICBob3N0IGRyaXZlciBpbiB0aGUgbmVhciBmdXR1cmUgdG8gY3JlYXRlIGEgZHVhbC1yb2xlIGRyaXZlci4KIAogaWYgVVNCX0RXQzIKIAorY29uZmlnIFVTQl9EV0MyX0hPU1QKKwl0cmlzdGF0ZSAiSG9zdCBvbmx5IG1vZGUiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBUaGUgRGVzaWdud2FyZSBVU0IyLjAgaGlnaC1zcGVlZCBob3N0IGNvbnRyb2xsZXIKKwkgIGludGVncmF0ZWQgaW50byBtYW55IFNvQ3MuCisKK2NvbmZpZyBVU0JfRFdDMl9QTEFURk9STQorCWJvb2wgIkRXQzIgUGxhdGZvcm0iCisJZGVwZW5kcyBvbiBVU0JfRFdDMl9IT1NUCisJZGVmYXVsdCBVU0JfRFdDMl9IT1NUCisJaGVscAorCSAgVGhlIERlc2lnbndhcmUgVVNCMi4wIHBsYXRmb3JtIGludGVyZmFjZSBtb2R1bGUgZm9yCisJICBjb250cm9sbGVycyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIENQVS4gVGhpcyBpcyBvbmx5CisJICB1c2VkIGZvciBob3N0IG1vZGUuCisKK2NvbmZpZyBVU0JfRFdDMl9QQ0kKKwlib29sICJEV0MyIFBDSSIKKwlkZXBlbmRzIG9uIFVTQl9EV0MyX0hPU1QgJiYgUENJCisJZGVmYXVsdCBVU0JfRFdDMl9IT1NUCisJaGVscAorCSAgVGhlIERlc2lnbndhcmUgVVNCMi4wIFBDSSBpbnRlcmZhY2UgbW9kdWxlIGZvciBjb250cm9sbGVycworCSAgY29ubmVjdGVkIHRvIGEgUENJIGJ1cy4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGhvc3QgbW9kZS4KKworY29tbWVudCAiR2FkZ2V0IG1vZGUgcmVxdWlyZXMgVVNCIEdhZGdldCBzdXBwb3J0IHRvIGJlIGVuYWJsZWQiCisKK2NvbmZpZyBVU0JfRFdDMl9QRVJJUEhFUkFMCisJdHJpc3RhdGUgIkdhZGdldCBvbmx5IG1vZGUiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUCisJaGVscAorCSAgVGhlIERlc2lnbndhcmUgVVNCMi4wIGhpZ2gtc3BlZWQgZ2FkZ2V0IGNvbnRyb2xsZXIKKwkgIGludGVncmF0ZWQgaW50byBtYW55IFNvQ3MuCisKIGNvbmZpZyBVU0JfRFdDMl9ERUJVRwogCWJvb2wgIkVuYWJsZSBEZWJ1Z2dpbmcgTWVzc2FnZXMiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2R3YzIvTWFrZWZpbGUKaW5kZXggMTE1MjlkMy4uYjczZDJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9kd2MyL01ha2VmaWxlCkBAIC0xLDI1ICsxLDI4IEBACiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9EV0MyX0RFQlVHKQkrPSAtRERFQlVHCiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9EV0MyX1ZFUkJPU0UpCSs9IC1EVkVSQk9TRV9ERUJVRwogCi1vYmotJChDT05GSUdfVVNCX0RXQzIpCQkJKz0gZHdjMi5vCi0KLWR3YzIteQkJCQkJKz0gY29yZS5vIGNvcmVfaW50ci5vCi0KLSMgTk9URTogVGhpcyBkcml2ZXIgYXQgcHJlc2VudCBvbmx5IGltcGxlbWVudHMgdGhlIEhvc3QgbW9kZQotIyBvZiB0aGUgY29udHJvbGxlci4gVGhlIGV4aXN0aW5nIHMzYy1oc290ZyBkcml2ZXIgc3VwcG9ydHMKLSMgUGVyaXBoZXJhbCBtb2RlLCBidXQgb25seSBmb3IgdGhlIFNhbXN1bmcgUzNDIHBsYXRmb3Jtcy4KLSMgVGhlcmUgYXJlIHBsYW5zIHRvIG1lcmdlIHRoZSBzM2MtaHNvdGcgZHJpdmVyIHdpdGggdGhpcwotIyBkcml2ZXIgaW4gdGhlIG5lYXIgZnV0dXJlIHRvIGNyZWF0ZSBhIGR1YWwtcm9sZSBkcml2ZXIuIE9uY2UKLSMgdGhhdCBpcyBkb25lLCBIb3N0IG1vZGUgd2lsbCBiZWNvbWUgYW4gb3B0aW9uYWwgZmVhdHVyZSB0aGF0Ci0jIGlzIHNlbGVjdGVkIHdpdGggYSBjb25maWcgb3B0aW9uLgotCitvYmotJChDT05GSUdfVVNCX0RXQzJfSE9TVCkJCSs9IGR3YzIubworZHdjMi15CQkJCQk6PSBjb3JlLm8gY29yZV9pbnRyLm8KIGR3YzIteQkJCQkJKz0gaGNkLm8gaGNkX2ludHIubwogZHdjMi15CQkJCQkrPSBoY2RfcXVldWUubyBoY2RfZGRtYS5vCiAKLWlmbmVxICgkKENPTkZJR19QQ0kpLCkKLQlvYmotJChDT05GSUdfVVNCX0RXQzIpCQkrPSBkd2MyX3BjaS5vCi1lbmRpZgotb2JqLSQoQ09ORklHX1VTQl9EV0MyKQkJCSs9IGR3YzJfcGxhdGZvcm0ubworIyBOT1RFOiBUaGUgcHJldmlvdXMgczNjLWhzb3RnIHBlcmlwaGVyYWwgbW9kZSBvbmx5IGRyaXZlciBoYXMgYmVlbiBtb3ZlZCB0bworIyB0aGlzIGxvY2F0aW9uIGFuZCByZW5hbWVkIGdhZGdldC5jLiBXaGVuIGJ1aWxkaW5nIGZvciBkeW5hbWljYWxseSBsaW5rZWQKKyMgbW9kdWxlcywgZHdjMl9nYWRnZXQua28gd2lsbCBnZXQgYnVpbHQgZm9yIHBlcmlwaGVyYWwgbW9kZS4gRm9yIGhvc3QgbW9kZSwKKyMgdGhlIGNvcmUgbW9kdWxlIHdpbGwgYmUgZHdjMi5rbywgdGhlIFBDSSBidXMgaW50ZXJmYWNlIG1vZHVsZSB3aWxsIGNhbGxlZAorIyBkd2MyX3BjaS5rbyBhbmQgdGhlIHBsYXRmb3JtIGludGVyZmFjZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHdjMl9wbGF0Zm9ybS5rby4KKyMgQXQgcHJlc2VudCB0aGUgaG9zdCBhbmQgZ2FkZ2V0IGRyaXZlciB3aWxsIGJlIHNlcGFyYXRlIGRyaXZlcnMsIGJ1dCB0aGVyZQorIyBhcmUgcGxhbnMgaW4gdGhlIG5lYXIgZnV0dXJlIHRvIGNyZWF0ZSBhIGR1YWwtcm9sZSBkcml2ZXIuCiAKLWR3YzJfcGNpLXkJCQkJKz0gcGNpLm8KLWR3YzJfcGxhdGZvcm0teQkJCQkrPSBwbGF0Zm9ybS5vCitpZm5lcSAoJChDT05GSUdfVVNCX0RXQzJfUENJKSwpCisJb2JqLSQoQ09ORklHX1VTQl9EV0MyX0hPU1QpCSs9IGR3YzJfcGNpLm8KKwlkd2MyX3BjaS15CQkJOj0gcGNpLm8KK2VuZGlmCisKK2lmbmVxICgkKENPTkZJR19VU0JfRFdDMl9QTEFURk9STSksKQorCW9iai0kKENPTkZJR19VU0JfRFdDMl9IT1NUKQkrPSBkd2MyX3BsYXRmb3JtLm8KKwlkd2MyX3BsYXRmb3JtLXkJCQk6PSBwbGF0Zm9ybS5vCitlbmRpZgorCitvYmotJChDT05GSUdfVVNCX0RXQzJfUEVSSVBIRVJBTCkJKz0gZHdjMl9nYWRnZXQubworZHdjMl9nYWRnZXQteQkJCQk6PSBnYWRnZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9jb3JlLmMgYi9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuYwppbmRleCAxZDEyOTg4Li4yN2QyYzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuYwpAQCAtNTA3LDYgKzUwNyw3MiBAQAogCXdyaXRlbChpbnRtc2ssIGhzb3RnLT5yZWdzICsgR0lOVE1TSyk7CiB9CiAKKy8qCisgKiBkd2MyX2NhbGN1bGF0ZV9keW5hbWljX2ZpZm8oKSAtIENhbGN1bGF0ZXMgdGhlIGRlZmF1bHQgZmlmbyBzaXplCisgKiBGb3Igc3lzdGVtIHRoYXQgaGF2ZSBhIHRvdGFsIGZpZm8gZGVwdGggdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIGRlZmF1bHQKKyAqIFJYICsgVFggZmlmbyBzaXplLgorICoKKyAqIEBoc290ZzogUHJvZ3JhbW1pbmcgdmlldyBvZiBEV0Nfb3RnIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgZHdjMl9jYWxjdWxhdGVfZHluYW1pY19maWZvKHN0cnVjdCBkd2MyX2hzb3RnICpoc290ZykKK3sKKwlzdHJ1Y3QgZHdjMl9jb3JlX3BhcmFtcyAqcGFyYW1zID0gaHNvdGctPmNvcmVfcGFyYW1zOworCXN0cnVjdCBkd2MyX2h3X3BhcmFtcyAqaHcgPSAmaHNvdGctPmh3X3BhcmFtczsKKwl1MzIgcnhmc2l6LCBucHR4ZnNpeiwgcHR4ZnNpeiwgdG90YWxfZmlmb19zaXplOworCisJdG90YWxfZmlmb19zaXplID0gaHctPnRvdGFsX2ZpZm9fc2l6ZTsKKwlyeGZzaXogPSBwYXJhbXMtPmhvc3RfcnhfZmlmb19zaXplOworCW5wdHhmc2l6ID0gcGFyYW1zLT5ob3N0X25wZXJpb190eF9maWZvX3NpemU7CisJcHR4ZnNpeiA9IHBhcmFtcy0+aG9zdF9wZXJpb190eF9maWZvX3NpemU7CisKKwkvKgorCSAqIFdpbGwgdXNlIE1ldGhvZCAyIGRlZmluZWQgaW4gdGhlIERXQzIgc3BlYzogbWluaW11bSBGSUZPIGRlcHRoCisJICogYWxsb2NhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGhpZ2ggYmFuZHdpZHRoIGVuZHBvaW50cy4gU3lub3BzeXMKKwkgKiBkZWZpbmVzIE1QUyhNYXggUGFja2V0IHNpemUpIGZvciBhIHBlcmlvZGljIEVQPTEwMjQsIGFuZCBmb3IKKwkgKiBub24tcGVyaW9kaWMgYXMgNTEyLgorCSAqLworCWlmICh0b3RhbF9maWZvX3NpemUgPCAocnhmc2l6ICsgbnB0eGZzaXogKyBwdHhmc2l6KSkgeworCQkvKgorCQkgKiBGb3IgQnVmZmVyIERNQSBtb2RlL1NjYXR0ZXIgR2F0aGVyIERNQSBtb2RlCisJCSAqIDIgKiAoKExhcmdlc3QgUGFja2V0IHNpemUgLyA0KSArIDEgKyAxKSArIG4KKwkJICogd2l0aCBuID0gbnVtYmVyIG9mIGhvc3QgY2hhbm5lbC4KKwkJICogMiAqICgoMTAyNC80KSArIDIpID0gNTE2CisJCSAqLworCQlyeGZzaXogPSA1MTYgKyBody0+aG9zdF9jaGFubmVsczsKKworCQkvKgorCQkgKiBtaW4gbm9uLXBlcmlvZGljIHR4IGZpZm8gZGVwdGgKKwkJICogMiAqIChsYXJnZXN0IG5vbi1wZXJpb2RpYyBVU0IgcGFja2V0IHVzZWQgLyA0KQorCQkgKiAyICogKDUxMi80KSA9IDI1NgorCQkgKi8KKwkJbnB0eGZzaXogPSAyNTY7CisKKwkJLyoKKwkJICogbWluIHBlcmlvZGljIHR4IGZpZm8gZGVwdGgKKwkJICogKGxhcmdlc3QgcGFja2V0IHNpemUqTUMpLzQKKwkJICogKDEwMjQgKiAzKS80ID0gNzY4CisJCSAqLworCQlwdHhmc2l6ID0gNzY4OworCisJCXBhcmFtcy0+aG9zdF9yeF9maWZvX3NpemUgPSByeGZzaXo7CisJCXBhcmFtcy0+aG9zdF9ucGVyaW9fdHhfZmlmb19zaXplID0gbnB0eGZzaXo7CisJCXBhcmFtcy0+aG9zdF9wZXJpb190eF9maWZvX3NpemUgPSBwdHhmc2l6OworCX0KKworCS8qCisJICogSWYgdGhlIHN1bW1hdGlvbiBvZiBSWCwgTlBUWCBhbmQgUFRYIGZpZm8gc2l6ZXMgaXMgc3RpbGwKKwkgKiBiaWdnZXIgdGhhbiB0aGUgdG90YWxfZmlmb19zaXplLCB0aGVuIHdlIGhhdmUgYSBwcm9ibGVtLgorCSAqCisJICogV2Ugd29uJ3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBhcyBtYW55IGVuZHBvaW50cy4gUmlnaHQgbm93LAorCSAqIHdlJ3JlIGp1c3QgcHJpbnRpbmcgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGlkZWFsbHkgdGhpcyBGSUZPCisJICogYWxsb2NhdGlvbiBhbGdvcml0aG0gd291bGQgYmUgaW1wcm92ZWQgaW4gdGhlIGZ1dHVyZS4KKwkgKgorCSAqIEZJWE1FIGltcHJvdmUgdGhpcyBGSUZPIGFsbG9jYXRpb24gYWxnb3JpdGhtLgorCSAqLworCWlmICh1bmxpa2VseSh0b3RhbF9maWZvX3NpemUgPCAocnhmc2l6ICsgbnB0eGZzaXogKyBwdHhmc2l6KSkpCisJCWRldl9lcnIoaHNvdGctPmRldiwgImludmFsaWQgZmlmbyBzaXplc1xuIik7Cit9CisKIHN0YXRpYyB2b2lkIGR3YzJfY29uZmlnX2ZpZm9zKHN0cnVjdCBkd2MyX2hzb3RnICpoc290ZykKIHsKIAlzdHJ1Y3QgZHdjMl9jb3JlX3BhcmFtcyAqcGFyYW1zID0gaHNvdGctPmNvcmVfcGFyYW1zOwpAQCAtNTE1LDYgKzU4MSw4IEBACiAJaWYgKCFwYXJhbXMtPmVuYWJsZV9keW5hbWljX2ZpZm8pCiAJCXJldHVybjsKIAorCWR3YzJfY2FsY3VsYXRlX2R5bmFtaWNfZmlmbyhoc290Zyk7CisKIAkvKiBSeCBGSUZPICovCiAJZ3J4ZnNpeiA9IHJlYWRsKGhzb3RnLT5yZWdzICsgR1JYRlNJWik7CiAJZGV2X2RiZyhoc290Zy0+ZGV2LCAiaW5pdGlhbCBncnhmc2l6PSUwOHhcbiIsIGdyeGZzaXopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9jb3JlLmggYi9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuaAppbmRleCA2NDg1MTljLi4xZWZkMTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuaApAQCAtMzcsNiArMzcsMTAgQEAKICNpZm5kZWYgX19EV0MyX0NPUkVfSF9fCiAjZGVmaW5lIF9fRFdDMl9DT1JFX0hfXwogCisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3BoeS5oPgogI2luY2x1ZGUgImh3LmgiCiAKQEAgLTU0LDYgKzU4LDE4NCBAQAogLyogTWF4aW11bSBudW1iZXIgb2YgRW5kcG9pbnRzL0hvc3RDaGFubmVscyAqLwogI2RlZmluZSBNQVhfRVBTX0NIQU5ORUxTCTE2CiAKKy8qIHMzYy1oc290ZyBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgczNjX2hzb3RnX3N1cHBseV9uYW1lc1tdID0geworCSJ2dXNiX2QiLCAgICAgICAgICAgICAgIC8qIGRpZ2l0YWwgVVNCIHN1cHBseSwgMS4yViAqLworCSJ2dXNiX2EiLCAgICAgICAgICAgICAgIC8qIGFuYWxvZyBVU0Igc3VwcGx5LCAxLjFWICovCit9OworCisvKgorICogRVAwX01QU19MSU1JVAorICoKKyAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgc2VlbXMgdG8gYmUgYSBsaW1pdCBvZiB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBjYW4KKyAqIGJlIHRyYW5zZmVycmVkIGJ5IElOIHRyYW5zYWN0aW9ucyBvbiBFUDAuIFRoaXMgaXMgZWl0aGVyIDEyNyBieXRlcyBvciAzCisgKiBwYWNrZXRzICh3aGljaCBwcmFjdGljYWxseSBtZWFucyAxIHBhY2tldCBhbmQgNjMgYnl0ZXMgb2YgZGF0YSkgd2hlbiB0aGUKKyAqIE1QUyBpcyBzZXQgdG8gNjQuCisgKgorICogVGhpcyBtZWFucyBpZiB3ZSBhcmUgd2FudGluZyB0byBtb3ZlID4xMjcgYnl0ZXMgb2YgZGF0YSwgd2UgbmVlZCB0bworICogc3BsaXQgdGhlIHRyYW5zYWN0aW9ucyB1cCwgYnV0IGp1c3QgZG9pbmcgb25lIHBhY2tldCBhdCBhIHRpbWUgZG9lcworICogbm90IHdvcmsgKHRoaXMgbWF5IGJlIGFuIGltcGxpY2l0IERBVEEwIFBJRCBvbiBmaXJzdCBwYWNrZXQgb2YgdGhlCisgKiB0cmFuc2FjdGlvbikgYW5kIGRvaW5nIDIgcGFja2V0cyBpcyBvdXRzaWRlIHRoZSBjb250cm9sbGVyJ3MgbGltaXRzLgorICoKKyAqIElmIHdlIHRyeSB0byBsb3dlciB0aGUgTVBTIHNpemUgZm9yIEVQMCwgdGhlbiBubyB0cmFuc2ZlcnMgd29yayBwcm9wZXJseQorICogZm9yIEVQMCwgYW5kIHRoZSBzeXN0ZW0gd2lsbCBmYWlsIGJhc2ljIGVudW1lcmF0aW9uLiBBcyBubyBjYXVzZSBmb3IgdGhpcworICogaGFzIGN1cnJlbnRseSBiZWVuIGZvdW5kLCB3ZSBjYW5ub3Qgc3VwcG9ydCBhbnkgbGFyZ2UgSU4gdHJhbnNmZXJzIGZvcgorICogRVAwLgorICovCisjZGVmaW5lIEVQMF9NUFNfTElNSVQgICA2NAorCitzdHJ1Y3QgczNjX2hzb3RnOworc3RydWN0IHMzY19oc290Z19yZXE7CisKKy8qKgorICogc3RydWN0IHMzY19oc290Z19lcCAtIGRyaXZlciBlbmRwb2ludCBkZWZpbml0aW9uLgorICogQGVwOiBUaGUgZ2FkZ2V0IGxheWVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbmRwb2ludC4KKyAqIEBuYW1lOiBUaGUgZHJpdmVyIGdlbmVyYXRlZCBuYW1lIGZvciB0aGUgZW5kcG9pbnQuCisgKiBAcXVldWU6IFF1ZXVlIG9mIHJlcXVlc3RzIGZvciB0aGlzIGVuZHBvaW50LgorICogQHBhcmVudDogUmVmZXJlbmNlIGJhY2sgdG8gdGhlIHBhcmVudCBkZXZpY2Ugc3RydWN0dXJlLgorICogQHJlcTogVGhlIGN1cnJlbnQgcmVxdWVzdCB0aGF0IHRoZSBlbmRwb2ludCBpcyBwcm9jZXNzaW5nLiBUaGlzIGlzCisgKiAgICAgICB1c2VkIHRvIGluZGljYXRlIGFuIHJlcXVlc3QgaGFzIGJlZW4gbG9hZGVkIG9udG8gdGhlIGVuZHBvaW50CisgKiAgICAgICBhbmQgaGFzIHlldCB0byBiZSBjb21wbGV0ZWQgKG1heWJlIGR1ZSB0byBkYXRhIG1vdmUsIG9yIHNpbXBseQorICogICAgICAgYXdhaXRpbmcgYW4gYWNrIGZyb20gdGhlIGNvcmUgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIGNvbXBsZXRlZCkuCisgKiBAZGVidWdmczogRmlsZSBlbnRyeSBmb3IgZGVidWdmcyBmaWxlIGZvciB0aGlzIGVuZHBvaW50LgorICogQGxvY2s6IFN0YXRlIGxvY2sgdG8gcHJvdGVjdCBjb250ZW50cyBvZiBlbmRwb2ludC4KKyAqIEBkaXJfaW46IFNldCB0byB0cnVlIGlmIHRoaXMgZW5kcG9pbnQgaXMgb2YgdGhlIElOIGRpcmVjdGlvbiwgd2hpY2gKKyAqICAgICAgICAgIG1lYW5zIHRoYXQgaXQgaXMgc2VuZGluZyBkYXRhIHRvIHRoZSBIb3N0LgorICogQGluZGV4OiBUaGUgaW5kZXggZm9yIHRoZSBlbmRwb2ludCByZWdpc3RlcnMuCisgKiBAbWM6IE11bHRpIENvdW50IC0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIgbWljcm9mcmFtZQorICogQGludGVydmFsIC0gSW50ZXJ2YWwgZm9yIHBlcmlvZGljIGVuZHBvaW50cworICogQG5hbWU6IFRoZSBuYW1lIGFycmF5IHBhc3NlZCB0byB0aGUgVVNCIGNvcmUuCisgKiBAaGFsdGVkOiBTZXQgaWYgdGhlIGVuZHBvaW50IGhhcyBiZWVuIGhhbHRlZC4KKyAqIEBwZXJpb2RpYzogU2V0IGlmIHRoaXMgaXMgYSBwZXJpb2RpYyBlcCwgc3VjaCBhcyBJbnRlcnJ1cHQKKyAqIEBpc29jaHJvbm91czogU2V0IGlmIHRoaXMgaXMgYSBpc29jaHJvbm91cyBlcAorICogQHNlbnRfemxwOiBTZXQgaWYgd2UndmUgc2VudCBhIHplcm8tbGVuZ3RoIHBhY2tldC4KKyAqIEB0b3RhbF9kYXRhOiBUaGUgdG90YWwgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgZG9uZS4KKyAqIEBmaWZvX3NpemU6IFRoZSBzaXplIG9mIHRoZSBGSUZPIChmb3IgcGVyaW9kaWMgSU4gZW5kcG9pbnRzKQorICogQGZpZm9fbG9hZDogVGhlIGFtb3VudCBvZiBkYXRhIGxvYWRlZCBpbnRvIHRoZSBGSUZPIChwZXJpb2RpYyBJTikKKyAqIEBsYXN0X2xvYWQ6IFRoZSBvZmZzZXQgb2YgZGF0YSBmb3IgdGhlIGxhc3Qgc3RhcnQgb2YgcmVxdWVzdC4KKyAqIEBzaXplX2xvYWRlZDogVGhlIGxhc3QgbG9hZGVkIHNpemUgZm9yIER4RVBUU0laRSBmb3IgcGVyaW9kaWMgSU4KKyAqCisgKiBUaGlzIGlzIHRoZSBkcml2ZXIncyBzdGF0ZSBmb3IgZWFjaCByZWdpc3RlcmVkIGVucG9pbnQsIGFsbG93aW5nIGl0CisgKiB0byBrZWVwIHRyYWNrIG9mIHRyYW5zYWN0aW9ucyB0aGF0IG5lZWQgZG9pbmcuIEVhY2ggZW5kcG9pbnQgaGFzIGEKKyAqIGxvY2sgdG8gcHJvdGVjdCB0aGUgc3RhdGUsIHRvIHRyeSBhbmQgYXZvaWQgdXNpbmcgYW4gb3ZlcmFsbCBsb2NrCisgKiBmb3IgdGhlIGhvc3QgY29udHJvbGxlciBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICoKKyAqIEZvciBwZXJpb2RpYyBJTiBlbmRwb2ludHMsIHdlIGhhdmUgZmlmb19zaXplIGFuZCBmaWZvX2xvYWQgdG8gdHJ5CisgKiBhbmQga2VlcCB0cmFjayBvZiB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHBlcmlvZGljIEZJRk8gZm9yIGVhY2gKKyAqIG9mIHRoZXNlIGFzIHdlIGRvbid0IGhhdmUgYSBzdGF0dXMgcmVnaXN0ZXIgdGhhdCB0ZWxscyB1cyBob3cgbXVjaAorICogaXMgaW4gZWFjaCBvZiB0aGVtLiAobm90ZSwgdGhpcyBtYXkgYWN0dWFsbHkgYmUgdXNlbGVzcyBpbmZvcm1hdGlvbgorICogYXMgaW4gc2hhcmVkLWZpZm8gbW9kZSBwZXJpb2RpYyBpbiBhY3RzIGxpa2UgYSBzaW5nbGUtZnJhbWUgcGFja2V0CisgKiBidWZmZXIgdGhhbiBhIGZpZm8pCisgKi8KK3N0cnVjdCBzM2NfaHNvdGdfZXAgeworCXN0cnVjdCB1c2JfZXAgICAgICAgICAgIGVwOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHF1ZXVlOworCXN0cnVjdCBzM2NfaHNvdGcgICAgICAgICpwYXJlbnQ7CisJc3RydWN0IHMzY19oc290Z19yZXEgICAgKnJlcTsKKwlzdHJ1Y3QgZGVudHJ5ICAgICAgICAgICAqZGVidWdmczsKKworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIHRvdGFsX2RhdGE7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgc2l6ZV9sb2FkZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgbGFzdF9sb2FkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGZpZm9fbG9hZDsKKwl1bnNpZ25lZCBzaG9ydCAgICAgICAgICBmaWZvX3NpemU7CisKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBkaXJfaW47CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgaW5kZXg7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgbWM7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgaW50ZXJ2YWw7CisKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBoYWx0ZWQ6MTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwZXJpb2RpYzoxOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGlzb2Nocm9ub3VzOjE7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgc2VudF96bHA6MTsKKworCWNoYXIgICAgICAgICAgICAgICAgICAgIG5hbWVbMTBdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2hzb3RnIC0gZHJpdmVyIHN0YXRlLgorICogQGRldjogVGhlIHBhcmVudCBkZXZpY2Ugc3VwcGxpZWQgdG8gdGhlIHByb2JlIGZ1bmN0aW9uCisgKiBAZHJpdmVyOiBVU0IgZ2FkZ2V0IGRyaXZlcgorICogQHBoeTogVGhlIG90ZyBwaHkgdHJhbnNjZWl2ZXIgc3RydWN0dXJlIGZvciBwaHkgY29udHJvbC4KKyAqIEB1cGh5OiBUaGUgb3RnIHBoeSB0cmFuc2NlaXZlciBzdHJ1Y3R1cmUgZm9yIG9sZCBVU0IgcGh5IGNvbnRyb2wuCisgKiBAcGxhdDogVGhlIHBsYXRmb3JtIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGF0YS4gVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlCisgKiBhbGwgU29DcyBzdXBwb3J0IHVzYiB0cmFuc2NlaXZlci4KKyAqIEByZWdzOiBUaGUgbWVtb3J5IGFyZWEgbWFwcGVkIGZvciBhY2Nlc3NpbmcgcmVnaXN0ZXJzLgorICogQGlycTogVGhlIElSUSBudW1iZXIgd2UgYXJlIHVzaW5nCisgKiBAc3VwcGxpZXM6IERlZmluaXRpb24gb2YgVVNCIHBvd2VyIHN1cHBsaWVzCisgKiBAcGh5aWY6IFBIWSBpbnRlcmZhY2Ugd2lkdGgKKyAqIEBkZWRpY2F0ZWRfZmlmb3M6IFNldCBpZiB0aGUgaGFyZHdhcmUgaGFzIGRlZGljYXRlZCBJTi1FUCBmaWZvcy4KKyAqIEBudW1fb2ZfZXBzOiBOdW1iZXIgb2YgYXZhaWxhYmxlIEVQcyAoZXhjbHVkaW5nIEVQMCkKKyAqIEBkZWJ1Z19yb290OiByb290IGRpcmVjdHJvcnkgZm9yIGRlYnVnZnMuCisgKiBAZGVidWdfZmlsZTogbWFpbiBzdGF0dXMgZmlsZSBmb3IgZGVidWdmcy4KKyAqIEBkZWJ1Z19maWZvOiBGSUZPIHN0YXR1cyBmaWxlIGZvciBkZWJ1Z2ZzLgorICogQGVwMF9yZXBseTogUmVxdWVzdCB1c2VkIGZvciBlcDAgcmVwbHkuCisgKiBAZXAwX2J1ZmY6IEJ1ZmZlciBmb3IgRVAwIHJlcGx5IGRhdGEsIGlmIG5lZWRlZC4KKyAqIEBjdHJsX2J1ZmY6IEJ1ZmZlciBmb3IgRVAwIGNvbnRyb2wgcmVxdWVzdHMuCisgKiBAY3RybF9yZXE6IFJlcXVlc3QgZm9yIEVQMCBjb250cm9sIHBhY2tldHMuCisgKiBAc2V0dXA6IE5BSyBtYW5hZ2VtZW50IGZvciBFUDAgU0VUVVAKKyAqIEBsYXN0X3JzdDogVGltZSBvZiBsYXN0IHJlc2V0CisgKiBAZXBzOiBUaGUgZW5kcG9pbnRzIGJlaW5nIHN1cHBsaWVkIHRvIHRoZSBnYWRnZXQgZnJhbWV3b3JrCisgKi8KK3N0cnVjdCBzM2NfaHNvdGcgeworCXN0cnVjdCBkZXZpY2UgICAgICAgICAgICAqZGV2OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBwaHkgICAgICAgICAgICAgICAqcGh5OworCXN0cnVjdCB1c2JfcGh5ICAgICAgICAgICAqdXBoeTsKKwlzdHJ1Y3QgczNjX2hzb3RnX3BsYXQgICAgKnBsYXQ7CisKKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOworCisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgKnJlZ3M7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaXJxOworCXN0cnVjdCBjbGsgICAgICAgICAgICAgICpjbGs7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHMzY19oc290Z19zdXBwbHlfbmFtZXMpXTsKKworCXUzMiAgICAgICAgICAgICAgICAgICAgIHBoeWlmOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGRlZGljYXRlZF9maWZvczoxOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIG51bV9vZl9lcHM7CisKKwlzdHJ1Y3QgZGVudHJ5ICAgICAgICAgICAqZGVidWdfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICAgICAgICAgICAqZGVidWdfZmlsZTsKKwlzdHJ1Y3QgZGVudHJ5ICAgICAgICAgICAqZGVidWdfZmlmbzsKKworCXN0cnVjdCB1c2JfcmVxdWVzdCAgICAgICplcDBfcmVwbHk7CisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgKmN0cmxfcmVxOworCXU4ICAgICAgICAgICAgICAgICAgICAgIGVwMF9idWZmWzhdOworCXU4ICAgICAgICAgICAgICAgICAgICAgIGN0cmxfYnVmZls4XTsKKworCXN0cnVjdCB1c2JfZ2FkZ2V0ICAgICAgIGdhZGdldDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBzZXR1cDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBsYXN0X3JzdDsKKwlzdHJ1Y3QgczNjX2hzb3RnX2VwICAgICAqZXBzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2hzb3RnX3JlcSAtIGRhdGEgdHJhbnNmZXIgcmVxdWVzdAorICogQHJlcTogVGhlIFVTQiBnYWRnZXQgcmVxdWVzdAorICogQHF1ZXVlOiBUaGUgbGlzdCBvZiByZXF1ZXN0cyBmb3IgdGhlIGVuZHBvaW50IHRoaXMgaXMgcXVldWVkIGZvci4KKyAqIEBpbl9wcm9ncmVzczogSGFzIGFscmVhZHkgaGFkIHNpemUvcGFja2V0cyB3cml0dGVuIHRvIGNvcmUKKyAqIEBtYXBwZWQ6IERNQSBidWZmZXIgZm9yIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiBtYXBwZWQgdmlhIGRtYV9tYXBfc2luZ2xlKCkuCisgKi8KK3N0cnVjdCBzM2NfaHNvdGdfcmVxIHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgICAgICByZXE7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgcXVldWU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgaW5fcHJvZ3Jlc3M7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgbWFwcGVkOworfTsKKworI2RlZmluZSBjYWxsX2dhZGdldChfaHMsIF9lbnRyeSkgXAorZG8geyBcCisJaWYgKChfaHMpLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04gJiYgXAorCQkoX2hzKS0+ZHJpdmVyICYmIChfaHMpLT5kcml2ZXItPl9lbnRyeSkgeyBcCisJCXNwaW5fdW5sb2NrKCZfaHMtPmxvY2spOyBcCisJCShfaHMpLT5kcml2ZXItPl9lbnRyeSgmKF9ocyktPmdhZGdldCk7IFwKKwkJc3Bpbl9sb2NrKCZfaHMtPmxvY2spOyBcCisJfSBcCit9IHdoaWxlICgwKQorCiBzdHJ1Y3QgZHdjMl9oc290ZzsKIHN0cnVjdCBkd2MyX2hvc3RfY2hhbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMKaW5kZXggMmE5Y2I2Ny4uZjNjNTZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMKQEAgLTM3LDE3NSArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3MzYy1oc290Zy5oPgogCi0jaW5jbHVkZSAiczNjLWhzb3RnLmgiCi0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgczNjX2hzb3RnX3N1cHBseV9uYW1lc1tdID0gewotCSJ2dXNiX2QiLAkJLyogZGlnaXRhbCBVU0Igc3VwcGx5LCAxLjJWICovCi0JInZ1c2JfYSIsCQkvKiBhbmFsb2cgVVNCIHN1cHBseSwgMS4xViAqLwotfTsKLQotLyoKLSAqIEVQMF9NUFNfTElNSVQKLSAqCi0gKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIHNlZW1zIHRvIGJlIGEgbGltaXQgb2YgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgY2FuCi0gKiBiZSB0cmFuc2ZlcnJlZCBieSBJTiB0cmFuc2FjdGlvbnMgb24gRVAwLiBUaGlzIGlzIGVpdGhlciAxMjcgYnl0ZXMgb3IgMwotICogcGFja2V0cyAod2hpY2ggcHJhY3RpY2FsbHkgbWVhbnMgMSBwYWNrZXQgYW5kIDYzIGJ5dGVzIG9mIGRhdGEpIHdoZW4gdGhlCi0gKiBNUFMgaXMgc2V0IHRvIDY0LgotICoKLSAqIFRoaXMgbWVhbnMgaWYgd2UgYXJlIHdhbnRpbmcgdG8gbW92ZSA+MTI3IGJ5dGVzIG9mIGRhdGEsIHdlIG5lZWQgdG8KLSAqIHNwbGl0IHRoZSB0cmFuc2FjdGlvbnMgdXAsIGJ1dCBqdXN0IGRvaW5nIG9uZSBwYWNrZXQgYXQgYSB0aW1lIGRvZXMKLSAqIG5vdCB3b3JrICh0aGlzIG1heSBiZSBhbiBpbXBsaWNpdCBEQVRBMCBQSUQgb24gZmlyc3QgcGFja2V0IG9mIHRoZQotICogdHJhbnNhY3Rpb24pIGFuZCBkb2luZyAyIHBhY2tldHMgaXMgb3V0c2lkZSB0aGUgY29udHJvbGxlcidzIGxpbWl0cy4KLSAqCi0gKiBJZiB3ZSB0cnkgdG8gbG93ZXIgdGhlIE1QUyBzaXplIGZvciBFUDAsIHRoZW4gbm8gdHJhbnNmZXJzIHdvcmsgcHJvcGVybHkKLSAqIGZvciBFUDAsIGFuZCB0aGUgc3lzdGVtIHdpbGwgZmFpbCBiYXNpYyBlbnVtZXJhdGlvbi4gQXMgbm8gY2F1c2UgZm9yIHRoaXMKLSAqIGhhcyBjdXJyZW50bHkgYmVlbiBmb3VuZCwgd2UgY2Fubm90IHN1cHBvcnQgYW55IGxhcmdlIElOIHRyYW5zZmVycyBmb3IKLSAqIEVQMC4KLSAqLwotI2RlZmluZSBFUDBfTVBTX0xJTUlUCTY0Ci0KLXN0cnVjdCBzM2NfaHNvdGc7Ci1zdHJ1Y3QgczNjX2hzb3RnX3JlcTsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2hzb3RnX2VwIC0gZHJpdmVyIGVuZHBvaW50IGRlZmluaXRpb24uCi0gKiBAZXA6IFRoZSBnYWRnZXQgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVuZHBvaW50LgotICogQG5hbWU6IFRoZSBkcml2ZXIgZ2VuZXJhdGVkIG5hbWUgZm9yIHRoZSBlbmRwb2ludC4KLSAqIEBxdWV1ZTogUXVldWUgb2YgcmVxdWVzdHMgZm9yIHRoaXMgZW5kcG9pbnQuCi0gKiBAcGFyZW50OiBSZWZlcmVuY2UgYmFjayB0byB0aGUgcGFyZW50IGRldmljZSBzdHJ1Y3R1cmUuCi0gKiBAcmVxOiBUaGUgY3VycmVudCByZXF1ZXN0IHRoYXQgdGhlIGVuZHBvaW50IGlzIHByb2Nlc3NpbmcuIFRoaXMgaXMKLSAqICAgICAgIHVzZWQgdG8gaW5kaWNhdGUgYW4gcmVxdWVzdCBoYXMgYmVlbiBsb2FkZWQgb250byB0aGUgZW5kcG9pbnQKLSAqICAgICAgIGFuZCBoYXMgeWV0IHRvIGJlIGNvbXBsZXRlZCAobWF5YmUgZHVlIHRvIGRhdGEgbW92ZSwgb3Igc2ltcGx5Ci0gKgkgYXdhaXRpbmcgYW4gYWNrIGZyb20gdGhlIGNvcmUgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIGNvbXBsZXRlZCkuCi0gKiBAZGVidWdmczogRmlsZSBlbnRyeSBmb3IgZGVidWdmcyBmaWxlIGZvciB0aGlzIGVuZHBvaW50LgotICogQGxvY2s6IFN0YXRlIGxvY2sgdG8gcHJvdGVjdCBjb250ZW50cyBvZiBlbmRwb2ludC4KLSAqIEBkaXJfaW46IFNldCB0byB0cnVlIGlmIHRoaXMgZW5kcG9pbnQgaXMgb2YgdGhlIElOIGRpcmVjdGlvbiwgd2hpY2gKLSAqCSAgICBtZWFucyB0aGF0IGl0IGlzIHNlbmRpbmcgZGF0YSB0byB0aGUgSG9zdC4KLSAqIEBpbmRleDogVGhlIGluZGV4IGZvciB0aGUgZW5kcG9pbnQgcmVnaXN0ZXJzLgotICogQG1jOiBNdWx0aSBDb3VudCAtIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIG1pY3JvZnJhbWUKLSAqIEBpbnRlcnZhbCAtIEludGVydmFsIGZvciBwZXJpb2RpYyBlbmRwb2ludHMKLSAqIEBuYW1lOiBUaGUgbmFtZSBhcnJheSBwYXNzZWQgdG8gdGhlIFVTQiBjb3JlLgotICogQGhhbHRlZDogU2V0IGlmIHRoZSBlbmRwb2ludCBoYXMgYmVlbiBoYWx0ZWQuCi0gKiBAcGVyaW9kaWM6IFNldCBpZiB0aGlzIGlzIGEgcGVyaW9kaWMgZXAsIHN1Y2ggYXMgSW50ZXJydXB0Ci0gKiBAaXNvY2hyb25vdXM6IFNldCBpZiB0aGlzIGlzIGEgaXNvY2hyb25vdXMgZXAKLSAqIEBzZW50X3pscDogU2V0IGlmIHdlJ3ZlIHNlbnQgYSB6ZXJvLWxlbmd0aCBwYWNrZXQuCi0gKiBAdG90YWxfZGF0YTogVGhlIHRvdGFsIG51bWJlciBvZiBkYXRhIGJ5dGVzIGRvbmUuCi0gKiBAZmlmb19zaXplOiBUaGUgc2l6ZSBvZiB0aGUgRklGTyAoZm9yIHBlcmlvZGljIElOIGVuZHBvaW50cykKLSAqIEBmaWZvX2xvYWQ6IFRoZSBhbW91bnQgb2YgZGF0YSBsb2FkZWQgaW50byB0aGUgRklGTyAocGVyaW9kaWMgSU4pCi0gKiBAbGFzdF9sb2FkOiBUaGUgb2Zmc2V0IG9mIGRhdGEgZm9yIHRoZSBsYXN0IHN0YXJ0IG9mIHJlcXVlc3QuCi0gKiBAc2l6ZV9sb2FkZWQ6IFRoZSBsYXN0IGxvYWRlZCBzaXplIGZvciBEeEVQVFNJWkUgZm9yIHBlcmlvZGljIElOCi0gKgotICogVGhpcyBpcyB0aGUgZHJpdmVyJ3Mgc3RhdGUgZm9yIGVhY2ggcmVnaXN0ZXJlZCBlbnBvaW50LCBhbGxvd2luZyBpdAotICogdG8ga2VlcCB0cmFjayBvZiB0cmFuc2FjdGlvbnMgdGhhdCBuZWVkIGRvaW5nLiBFYWNoIGVuZHBvaW50IGhhcyBhCi0gKiBsb2NrIHRvIHByb3RlY3QgdGhlIHN0YXRlLCB0byB0cnkgYW5kIGF2b2lkIHVzaW5nIGFuIG92ZXJhbGwgbG9jawotICogZm9yIHRoZSBob3N0IGNvbnRyb2xsZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLSAqCi0gKiBGb3IgcGVyaW9kaWMgSU4gZW5kcG9pbnRzLCB3ZSBoYXZlIGZpZm9fc2l6ZSBhbmQgZmlmb19sb2FkIHRvIHRyeQotICogYW5kIGtlZXAgdHJhY2sgb2YgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBwZXJpb2RpYyBGSUZPIGZvciBlYWNoCi0gKiBvZiB0aGVzZSBhcyB3ZSBkb24ndCBoYXZlIGEgc3RhdHVzIHJlZ2lzdGVyIHRoYXQgdGVsbHMgdXMgaG93IG11Y2gKLSAqIGlzIGluIGVhY2ggb2YgdGhlbS4gKG5vdGUsIHRoaXMgbWF5IGFjdHVhbGx5IGJlIHVzZWxlc3MgaW5mb3JtYXRpb24KLSAqIGFzIGluIHNoYXJlZC1maWZvIG1vZGUgcGVyaW9kaWMgaW4gYWN0cyBsaWtlIGEgc2luZ2xlLWZyYW1lIHBhY2tldAotICogYnVmZmVyIHRoYW4gYSBmaWZvKQotICovCi1zdHJ1Y3QgczNjX2hzb3RnX2VwIHsKLQlzdHJ1Y3QgdXNiX2VwCQllcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOwotCXN0cnVjdCBzM2NfaHNvdGcJKnBhcmVudDsKLQlzdHJ1Y3QgczNjX2hzb3RnX3JlcQkqcmVxOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzOwotCi0KLQl1bnNpZ25lZCBsb25nCQl0b3RhbF9kYXRhOwotCXVuc2lnbmVkIGludAkJc2l6ZV9sb2FkZWQ7Ci0JdW5zaWduZWQgaW50CQlsYXN0X2xvYWQ7Ci0JdW5zaWduZWQgaW50CQlmaWZvX2xvYWQ7Ci0JdW5zaWduZWQgc2hvcnQJCWZpZm9fc2l6ZTsKLQotCXVuc2lnbmVkIGNoYXIJCWRpcl9pbjsKLQl1bnNpZ25lZCBjaGFyCQlpbmRleDsKLQl1bnNpZ25lZCBjaGFyCQltYzsKLQl1bnNpZ25lZCBjaGFyCQlpbnRlcnZhbDsKLQotCXVuc2lnbmVkIGludAkJaGFsdGVkOjE7Ci0JdW5zaWduZWQgaW50CQlwZXJpb2RpYzoxOwotCXVuc2lnbmVkIGludAkJaXNvY2hyb25vdXM6MTsKLQl1bnNpZ25lZCBpbnQJCXNlbnRfemxwOjE7Ci0KLQljaGFyCQkJbmFtZVsxMF07Ci19OwotCi0vKioKLSAqIHN0cnVjdCBzM2NfaHNvdGcgLSBkcml2ZXIgc3RhdGUuCi0gKiBAZGV2OiBUaGUgcGFyZW50IGRldmljZSBzdXBwbGllZCB0byB0aGUgcHJvYmUgZnVuY3Rpb24KLSAqIEBkcml2ZXI6IFVTQiBnYWRnZXQgZHJpdmVyCi0gKiBAcGh5OiBUaGUgb3RnIHBoeSB0cmFuc2NlaXZlciBzdHJ1Y3R1cmUgZm9yIHBoeSBjb250cm9sLgotICogQHVwaHk6IFRoZSBvdGcgcGh5IHRyYW5zY2VpdmVyIHN0cnVjdHVyZSBmb3Igb2xkIFVTQiBwaHkgY29udHJvbC4KLSAqIEBwbGF0OiBUaGUgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkYXRhLiBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UKLSAqIGFsbCBTb0NzIHN1cHBvcnQgdXNiIHRyYW5zY2VpdmVyLgotICogQHJlZ3M6IFRoZSBtZW1vcnkgYXJlYSBtYXBwZWQgZm9yIGFjY2Vzc2luZyByZWdpc3RlcnMuCi0gKiBAaXJxOiBUaGUgSVJRIG51bWJlciB3ZSBhcmUgdXNpbmcKLSAqIEBzdXBwbGllczogRGVmaW5pdGlvbiBvZiBVU0IgcG93ZXIgc3VwcGxpZXMKLSAqIEBwaHlpZjogUEhZIGludGVyZmFjZSB3aWR0aAotICogQGRlZGljYXRlZF9maWZvczogU2V0IGlmIHRoZSBoYXJkd2FyZSBoYXMgZGVkaWNhdGVkIElOLUVQIGZpZm9zLgotICogQG51bV9vZl9lcHM6IE51bWJlciBvZiBhdmFpbGFibGUgRVBzIChleGNsdWRpbmcgRVAwKQotICogQGRlYnVnX3Jvb3Q6IHJvb3QgZGlyZWN0cm9yeSBmb3IgZGVidWdmcy4KLSAqIEBkZWJ1Z19maWxlOiBtYWluIHN0YXR1cyBmaWxlIGZvciBkZWJ1Z2ZzLgotICogQGRlYnVnX2ZpZm86IEZJRk8gc3RhdHVzIGZpbGUgZm9yIGRlYnVnZnMuCi0gKiBAZXAwX3JlcGx5OiBSZXF1ZXN0IHVzZWQgZm9yIGVwMCByZXBseS4KLSAqIEBlcDBfYnVmZjogQnVmZmVyIGZvciBFUDAgcmVwbHkgZGF0YSwgaWYgbmVlZGVkLgotICogQGN0cmxfYnVmZjogQnVmZmVyIGZvciBFUDAgY29udHJvbCByZXF1ZXN0cy4KLSAqIEBjdHJsX3JlcTogUmVxdWVzdCBmb3IgRVAwIGNvbnRyb2wgcGFja2V0cy4KLSAqIEBzZXR1cDogTkFLIG1hbmFnZW1lbnQgZm9yIEVQMCBTRVRVUAotICogQGxhc3RfcnN0OiBUaW1lIG9mIGxhc3QgcmVzZXQKLSAqIEBlcHM6IFRoZSBlbmRwb2ludHMgYmVpbmcgc3VwcGxpZWQgdG8gdGhlIGdhZGdldCBmcmFtZXdvcmsKLSAqLwotc3RydWN0IHMzY19oc290ZyB7Ci0Jc3RydWN0IGRldmljZQkJICpkZXY7Ci0Jc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7Ci0Jc3RydWN0IHBoeQkJICpwaHk7Ci0Jc3RydWN0IHVzYl9waHkJCSAqdXBoeTsKLQlzdHJ1Y3QgczNjX2hzb3RnX3BsYXQJICpwbGF0OwotCi0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKLQotCXZvaWQgX19pb21lbQkJKnJlZ3M7Ci0JaW50CQkJaXJxOwotCXN0cnVjdCBjbGsJCSpjbGs7Ci0KLQlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHMzY19oc290Z19zdXBwbHlfbmFtZXMpXTsKLQotCXUzMgkJCXBoeWlmOwotCXVuc2lnbmVkIGludAkJZGVkaWNhdGVkX2ZpZm9zOjE7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgbnVtX29mX2VwczsKLQotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19yb290OwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19maWxlOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19maWZvOwotCi0Jc3RydWN0IHVzYl9yZXF1ZXN0CSplcDBfcmVwbHk7Ci0Jc3RydWN0IHVzYl9yZXF1ZXN0CSpjdHJsX3JlcTsKLQl1OAkJCWVwMF9idWZmWzhdOwotCXU4CQkJY3RybF9idWZmWzhdOwotCi0Jc3RydWN0IHVzYl9nYWRnZXQJZ2FkZ2V0OwotCXVuc2lnbmVkIGludAkJc2V0dXA7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgbGFzdF9yc3Q7Ci0Jc3RydWN0IHMzY19oc290Z19lcAkqZXBzOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2hzb3RnX3JlcSAtIGRhdGEgdHJhbnNmZXIgcmVxdWVzdAotICogQHJlcTogVGhlIFVTQiBnYWRnZXQgcmVxdWVzdAotICogQHF1ZXVlOiBUaGUgbGlzdCBvZiByZXF1ZXN0cyBmb3IgdGhlIGVuZHBvaW50IHRoaXMgaXMgcXVldWVkIGZvci4KLSAqIEBpbl9wcm9ncmVzczogSGFzIGFscmVhZHkgaGFkIHNpemUvcGFja2V0cyB3cml0dGVuIHRvIGNvcmUKLSAqIEBtYXBwZWQ6IERNQSBidWZmZXIgZm9yIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiBtYXBwZWQgdmlhIGRtYV9tYXBfc2luZ2xlKCkuCi0gKi8KLXN0cnVjdCBzM2NfaHNvdGdfcmVxIHsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QJcmVxOwotCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7Ci0JdW5zaWduZWQgY2hhcgkJaW5fcHJvZ3Jlc3M7Ci0JdW5zaWduZWQgY2hhcgkJbWFwcGVkOwotfTsKKyNpbmNsdWRlICJjb3JlLmgiCiAKIC8qIGNvbnZlcnNpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfaHNvdGdfcmVxICpvdXJfcmVxKHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpAQCAtMzQwLDkgKzE3Miw4IEBACiAJLyogc2V0IEZJRk8gc2l6ZXMgdG8gMjA0OC8xMDI0ICovCiAKIAl3cml0ZWwoMjA0OCwgaHNvdGctPnJlZ3MgKyBHUlhGU0laKTsKLQl3cml0ZWwoR05QVFhGU0laX05QVHhGU3RBZGRyKDIwNDgpIHwKLQkgICAgICAgR05QVFhGU0laX05QVHhGRGVwKDEwMjQpLAotCSAgICAgICBoc290Zy0+cmVncyArIEdOUFRYRlNJWik7CisJd3JpdGVsKCgyMDQ4IDw8IEZJRk9TSVpFX1NUQVJUQUREUl9TSElGVCkgfAorCQkoMTAyNCA8PCBGSUZPU0laRV9ERVBUSF9TSElGVCksIGhzb3RnLT5yZWdzICsgR05QVFhGU0laKTsKIAogCS8qCiAJICogYXJhbmdlIGFsbCB0aGUgcmVzdCBvZiB0aGUgVFggRklGT3MsIGFzIHNvbWUgdmVyc2lvbnMgb2YgdGhpcwpAQCAtMzYyLDEwICsxOTMsMTAgQEAKIAogCWZvciAoZXAgPSAxOyBlcCA8PSAxNTsgZXArKykgewogCQl2YWwgPSBhZGRyOwotCQl2YWwgfD0gc2l6ZSA8PCBEUFRYRlNJWm5fRFBUeEZTaXplX1NISUZUOworCQl2YWwgfD0gc2l6ZSA8PCBGSUZPU0laRV9ERVBUSF9TSElGVDsKIAkJYWRkciArPSBzaXplOwogCi0JCXdyaXRlbCh2YWwsIGhzb3RnLT5yZWdzICsgRFBUWEZTSVpuKGVwKSk7CisJCXdyaXRlbCh2YWwsIGhzb3RnLT5yZWdzICsgRFBUWEZTSVpOKGVwKSk7CiAJfQogCiAJLyoKQEAgLTM3MywxNSArMjA0LDE1IEBACiAJICogYWxsIGZpZm9zIGFyZSBmbHVzaGVkIGJlZm9yZSBjb250aW51aW5nCiAJICovCiAKLQl3cml0ZWwoR1JTVENUTF9UeEZOdW0oMHgxMCkgfCBHUlNUQ1RMX1R4RkZsc2ggfAotCSAgICAgICBHUlNUQ1RMX1J4RkZsc2gsIGhzb3RnLT5yZWdzICsgR1JTVENUTCk7CisJd3JpdGVsKEdSU1RDVExfVFhGTlVNKDB4MTApIHwgR1JTVENUTF9UWEZGTFNIIHwKKwkgICAgICAgR1JTVENUTF9SWEZGTFNILCBoc290Zy0+cmVncyArIEdSU1RDVEwpOwogCiAJLyogd2FpdCB1bnRpbCB0aGUgZmlmb3MgYXJlIGJvdGggZmx1c2hlZCAqLwogCXRpbWVvdXQgPSAxMDA7CiAJd2hpbGUgKDEpIHsKIAkJdmFsID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBHUlNUQ1RMKTsKIAotCQlpZiAoKHZhbCAmIChHUlNUQ1RMX1R4RkZsc2ggfCBHUlNUQ1RMX1J4RkZsc2gpKSA9PSAwKQorCQlpZiAoKHZhbCAmIChHUlNUQ1RMX1RYRkZMU0ggfCBHUlNUQ1RMX1JYRkZMU0gpKSA9PSAwKQogCQkJYnJlYWs7CiAKIAkJaWYgKC0tdGltZW91dCA9PSAwKSB7CkBAIC00OTUsMTQgKzMyNiwxNCBAQAogCQkgKiBob3cgbXVjaCBkYXRhIGlzIGxlZnQgaW4gdGhlIGZpZm8uCiAJCSAqLwogCi0JCXNpemVfbGVmdCA9IER4RVBUU0laX1hmZXJTaXplX0dFVChlcHNpemUpOworCQlzaXplX2xlZnQgPSBEWEVQVFNJWl9YRkVSU0laRV9HRVQoZXBzaXplKTsKIAogCQkvKgogCQkgKiBpZiBzaGFyZWQgZmlmbywgd2UgY2Fubm90IHdyaXRlIGFueXRoaW5nIHVudGlsIHRoZQogCQkgKiBwcmV2aW91cyBkYXRhIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudC4KIAkJICovCiAJCWlmIChoc19lcC0+Zmlmb19sb2FkICE9IDApIHsKLQkJCXMzY19oc290Z19lbl9nc2ludChoc290ZywgR0lOVFNUU19QVHhGRW1wKTsKKwkJCXMzY19oc290Z19lbl9nc2ludChoc290ZywgR0lOVFNUU19QVFhGRU1QKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAKQEAgLTUyMyw3ICszNTQsNyBAQAogCQkJX19mdW5jX18sIGNhbl93cml0ZSk7CiAKIAkJaWYgKGNhbl93cml0ZSA8PSAwKSB7Ci0JCQlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsIEdJTlRTVFNfUFR4RkVtcCk7CisJCQlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsIEdJTlRTVFNfUFRYRkVNUCk7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCX0gZWxzZSBpZiAoaHNvdGctPmRlZGljYXRlZF9maWZvcyAmJiBoc19lcC0+aW5kZXggIT0gMCkgewpAQCAtNTMyLDE2ICszNjMsMTYgQEAKIAkJY2FuX3dyaXRlICY9IDB4ZmZmZjsKIAkJY2FuX3dyaXRlICo9IDQ7CiAJfSBlbHNlIHsKLQkJaWYgKEdOUFRYU1RTX05QVHhRU3BjQXZhaWxfR0VUKGducHR4c3RzKSA9PSAwKSB7CisJCWlmIChHTlBUWFNUU19OUF9UWFFfU1BDX0FWQUlMX0dFVChnbnB0eHN0cykgPT0gMCkgewogCQkJZGV2X2RiZyhoc290Zy0+ZGV2LAogCQkJCSIlczogbm8gcXVldWUgc2xvdHMgYXZhaWxhYmxlICgweCUwOHgpXG4iLAogCQkJCV9fZnVuY19fLCBnbnB0eHN0cyk7CiAKLQkJCXMzY19oc290Z19lbl9nc2ludChoc290ZywgR0lOVFNUU19OUFR4RkVtcCk7CisJCQlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsIEdJTlRTVFNfTlBUWEZFTVApOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAotCQljYW5fd3JpdGUgPSBHTlBUWFNUU19OUFR4RlNwY0F2YWlsX0dFVChnbnB0eHN0cyk7CisJCWNhbl93cml0ZSA9IEdOUFRYU1RTX05QX1RYRl9TUENfQVZBSUxfR0VUKGducHR4c3RzKTsKIAkJY2FuX3dyaXRlICo9IDQ7CS8qIGZpZm8gc2l6ZSBpcyBpbiAzMmJpdCBxdWFudGl0aWVzLiAqLwogCX0KIApAQCAtNTY5LDggKzQwMCw4IEBACiAJCS8qIGl0J3MgbmVlZGVkIG9ubHkgd2hlbiB3ZSBkbyBub3QgdXNlIGRlZGljYXRlZCBmaWZvcyAqLwogCQlpZiAoIWhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MpCiAJCQlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsCi0JCQkJCSAgIHBlcmlvZGljID8gR0lOVFNUU19QVHhGRW1wIDoKLQkJCQkJICAgR0lOVFNUU19OUFR4RkVtcCk7CisJCQkJCSAgIHBlcmlvZGljID8gR0lOVFNUU19QVFhGRU1QIDoKKwkJCQkJICAgR0lOVFNUU19OUFRYRkVNUCk7CiAJfQogCiAJLyogc2VlIGlmIHdlIGNhbiB3cml0ZSBkYXRhICovCkBAIC01OTgsOCArNDI5LDggQEAKIAkJLyogaXQncyBuZWVkZWQgb25seSB3aGVuIHdlIGRvIG5vdCB1c2UgZGVkaWNhdGVkIGZpZm9zICovCiAJCWlmICghaHNvdGctPmRlZGljYXRlZF9maWZvcykKIAkJCXMzY19oc290Z19lbl9nc2ludChoc290ZywKLQkJCQkJICAgcGVyaW9kaWMgPyBHSU5UU1RTX1BUeEZFbXAgOgotCQkJCQkgICBHSU5UU1RTX05QVHhGRW1wKTsKKwkJCQkJICAgcGVyaW9kaWMgPyBHSU5UU1RTX1BUWEZFTVAgOgorCQkJCQkgICBHSU5UU1RTX05QVFhGRU1QKTsKIAl9CiAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsICJ3cml0ZSAlZC8lZCwgY2FuX3dyaXRlICVkLCBkb25lICVkXG4iLApAQCAtNjM2LDEyICs0NjcsMTIgQEAKIAl1bnNpZ25lZCBtYXhwa3Q7CiAKIAlpZiAoaW5kZXggIT0gMCkgewotCQltYXhzaXplID0gRHhFUFRTSVpfWGZlclNpemVfTElNSVQgKyAxOwotCQltYXhwa3QgPSBEeEVQVFNJWl9Qa3RDbnRfTElNSVQgKyAxOworCQltYXhzaXplID0gRFhFUFRTSVpfWEZFUlNJWkVfTElNSVQgKyAxOworCQltYXhwa3QgPSBEWEVQVFNJWl9QS1RDTlRfTElNSVQgKyAxOwogCX0gZWxzZSB7CiAJCW1heHNpemUgPSA2NCs2NDsKIAkJaWYgKGhzX2VwLT5kaXJfaW4pCi0JCQltYXhwa3QgPSBESUVQVFNJWjBfUGt0Q250X0xJTUlUICsgMTsKKwkJCW1heHBrdCA9IERJRVBUU0laMF9QS1RDTlRfTElNSVQgKyAxOwogCQllbHNlCiAJCQltYXhwa3QgPSAyOwogCX0KQEAgLTcxMCw3ICs1NDEsNyBAQAogCS8qIElmIGVuZHBvaW50IGlzIHN0YWxsZWQsIHdlIHdpbGwgcmVzdGFydCByZXF1ZXN0IGxhdGVyICovCiAJY3RybCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgZXBjdHJsX3JlZyk7CiAKLQlpZiAoY3RybCAmIER4RVBDVExfU3RhbGwpIHsKKwlpZiAoY3RybCAmIERYRVBDVExfU1RBTEwpIHsKIAkJZGV2X3dhcm4oaHNvdGctPmRldiwgIiVzOiBlcCVkIGlzIHN0YWxsZWRcbiIsIF9fZnVuY19fLCBpbmRleCk7CiAJCXJldHVybjsKIAl9CkBAIC03MjAsNyArNTUxLDcgQEAKIAkJdXJlcS0+bGVuZ3RoLCB1cmVxLT5hY3R1YWwpOwogCWlmICgwKQogCQlkZXZfZGJnKGhzb3RnLT5kZXYsCi0JCQkiUkVRIGJ1ZiAlcCBsZW4gJWQgZG1hIDB4JXBhZCBub2k9JWQgenA9JWQgc25vaz0lZFxuIiwKKwkJCSJSRVEgYnVmICVwIGxlbiAlZCBkbWEgJXBhZCBub2k9JWQgenA9JWQgc25vaz0lZFxuIiwKIAkJCXVyZXEtPmJ1ZiwgbGVuZ3RoLCAmdXJlcS0+ZG1hLAogCQkJdXJlcS0+bm9faW50ZXJydXB0LCB1cmVxLT56ZXJvLCB1cmVxLT5zaG9ydF9ub3Rfb2spOwogCkBAIC03NTAsOSArNTgxLDkgQEAKIAogCWlmIChkaXJfaW4gJiYgaW5kZXggIT0gMCkKIAkJaWYgKGhzX2VwLT5pc29jaHJvbm91cykKLQkJCWVwc2l6ZSA9IER4RVBUU0laX01DKHBhY2tldHMpOworCQkJZXBzaXplID0gRFhFUFRTSVpfTUMocGFja2V0cyk7CiAJCWVsc2UKLQkJCWVwc2l6ZSA9IER4RVBUU0laX01DKDEpOworCQkJZXBzaXplID0gRFhFUFRTSVpfTUMoMSk7CiAJZWxzZQogCQllcHNpemUgPSAwOwogCkBAIC03NjYsOCArNTk3LDggQEAKIAkJCXBhY2tldHMrKzsKIAl9CiAKLQllcHNpemUgfD0gRHhFUFRTSVpfUGt0Q250KHBhY2tldHMpOwotCWVwc2l6ZSB8PSBEeEVQVFNJWl9YZmVyU2l6ZShsZW5ndGgpOworCWVwc2l6ZSB8PSBEWEVQVFNJWl9QS1RDTlQocGFja2V0cyk7CisJZXBzaXplIHw9IERYRVBUU0laX1hGRVJTSVpFKGxlbmd0aCk7CiAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogJWRAJWQvJWQsIDB4JTA4eCA9PiAweCUwOHhcbiIsCiAJCV9fZnVuY19fLCBwYWNrZXRzLCBsZW5ndGgsIHVyZXEtPmxlbmd0aCwgZXBzaXplLCBlcHNpemVfcmVnKTsKQEAgLTc4OSwxMiArNjIwLDEyIEBACiAJCWRtYV9yZWcgPSBkaXJfaW4gPyBESUVQRE1BKGluZGV4KSA6IERPRVBETUEoaW5kZXgpOwogCQl3cml0ZWwodXJlcS0+ZG1hLCBoc290Zy0+cmVncyArIGRtYV9yZWcpOwogCi0JCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiAweCVwYWQgPT4gMHglMDh4XG4iLAorCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogJXBhZCA9PiAweCUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgJnVyZXEtPmRtYSwgZG1hX3JlZyk7CiAJfQogCi0JY3RybCB8PSBEeEVQQ1RMX0VQRW5hOwkvKiBlbnN1cmUgZXAgZW5hYmxlZCAqLwotCWN0cmwgfD0gRHhFUENUTF9VU0JBY3RFcDsKKwljdHJsIHw9IERYRVBDVExfRVBFTkE7CS8qIGVuc3VyZSBlcCBlbmFibGVkICovCisJY3RybCB8PSBEWEVQQ1RMX1VTQkFDVEVQOwogCiAJZGV2X2RiZyhoc290Zy0+ZGV2LCAic2V0dXAgcmVxOiVkXG4iLCBoc290Zy0+c2V0dXApOwogCkBAIC04MDIsNyArNjMzLDcgQEAKIAlpZiAoaHNvdGctPnNldHVwICYmIGluZGV4ID09IDApCiAJCWhzb3RnLT5zZXR1cCA9IDA7CiAJZWxzZQotCQljdHJsIHw9IER4RVBDVExfQ05BSzsJLyogY2xlYXIgTkFLIHNldCBieSBjb3JlICovCisJCWN0cmwgfD0gRFhFUENUTF9DTkFLOwkvKiBjbGVhciBOQUsgc2V0IGJ5IGNvcmUgKi8KIAogCiAJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IER4RVBDVEw9MHglMDh4XG4iLCBfX2Z1bmNfXywgY3RybCk7CkBAIC04MjgsNyArNjU5LDcgQEAKIAkgKiB0byBkZWJ1Z2dpbmcgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uCiAJICovCiAJaWYgKGRpcl9pbikKLQkJd3JpdGVsKERJRVBNU0tfSU5Ua25UWEZFbXBNc2ssCisJCXdyaXRlbChESUVQTVNLX0lOVEtOVFhGRU1QTVNLLAogCQkgICAgICAgaHNvdGctPnJlZ3MgKyBESUVQSU5UKGluZGV4KSk7CiAKIAkvKgpAQCAtODM3LDEyICs2NjgsMTIgQEAKIAkgKi8KIAogCS8qIGNoZWNrIGVwIGlzIGVuYWJsZWQgKi8KLQlpZiAoIShyZWFkbChoc290Zy0+cmVncyArIGVwY3RybF9yZWcpICYgRHhFUENUTF9FUEVuYSkpCisJaWYgKCEocmVhZGwoaHNvdGctPnJlZ3MgKyBlcGN0cmxfcmVnKSAmIERYRVBDVExfRVBFTkEpKQogCQlkZXZfd2Fybihoc290Zy0+ZGV2LAotCQkJICJlcCVkOiBmYWlsZWQgdG8gYmVjb21lIGVuYWJsZWQgKER4RVBDVEw9MHglMDh4KT9cbiIsCisJCQkgImVwJWQ6IGZhaWxlZCB0byBiZWNvbWUgZW5hYmxlZCAoRFhFUENUTD0weCUwOHgpP1xuIiwKIAkJCSBpbmRleCwgcmVhZGwoaHNvdGctPnJlZ3MgKyBlcGN0cmxfcmVnKSk7CiAKLQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogRHhFUENUTD0weCUwOHhcbiIsCisJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IERYRVBDVEw9MHglMDh4XG4iLAogCQlfX2Z1bmNfXywgcmVhZGwoaHNvdGctPnJlZ3MgKyBlcGN0cmxfcmVnKSk7CiAKIAkvKiBlbmFibGUgZXAgaW50ZXJydXB0cyAqLwpAQCAtMTIwNSwxMiArMTAzNiwxMiBAQAogCSAqLwogCiAJY3RybCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgcmVnKTsKLQljdHJsIHw9IER4RVBDVExfU3RhbGw7Ci0JY3RybCB8PSBEeEVQQ1RMX0NOQUs7CisJY3RybCB8PSBEWEVQQ1RMX1NUQUxMOworCWN0cmwgfD0gRFhFUENUTF9DTkFLOwogCXdyaXRlbChjdHJsLCBoc290Zy0+cmVncyArIHJlZyk7CiAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsCi0JCSJ3cml0dGVuIER4RVBDVEw9MHglMDh4IHRvICUwOHggKER4RVBDVEw9MHglMDh4KVxuIiwKKwkJIndyaXR0ZW4gRFhFUENUTD0weCUwOHggdG8gJTA4eCAoRFhFUENUTD0weCUwOHgpXG4iLAogCQljdHJsLCByZWcsIHJlYWRsKGhzb3RnLT5yZWdzICsgcmVnKSk7CiAKIAkgLyoKQEAgLTEyNjIsOCArMTA5Myw5IEBACiAJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKIAkJCXMzY19oc290Z19kaXNjb25uZWN0KGhzb3RnKTsKIAkJCWRjZmcgPSByZWFkbChoc290Zy0+cmVncyArIERDRkcpOwotCQkJZGNmZyAmPSB+RENGR19EZXZBZGRyX01BU0s7Ci0JCQlkY2ZnIHw9IGN0cmwtPndWYWx1ZSA8PCBEQ0ZHX0RldkFkZHJfU0hJRlQ7CisJCQlkY2ZnICY9IH5EQ0ZHX0RFVkFERFJfTUFTSzsKKwkJCWRjZmcgfD0gKGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSkgPDwKKwkJCQkgRENGR19ERVZBRERSX1NISUZUKSAmIERDRkdfREVWQUREUl9NQVNLOwogCQkJd3JpdGVsKGRjZmcsIGhzb3RnLT5yZWdzICsgRENGRyk7CiAKIAkJCWRldl9pbmZvKGhzb3RnLT5kZXYsICJuZXcgYWRkcmVzcyAlZFxuIiwgY3RybC0+d1ZhbHVlKTsKQEAgLTE0NTgsNyArMTI5MCw3IEBACiAJCWludCBwdHI7CiAKIAkJZGV2X3dhcm4oaHNvdGctPmRldiwKLQkJCSAiJXM6IEZJRk8gJWQgYnl0ZXMgb24gZXAlZCBidXQgbm8gcmVxIChEeEVQQ1RsPTB4JTA4eClcbiIsCisJCQkgIiVzOiBGSUZPICVkIGJ5dGVzIG9uIGVwJWQgYnV0IG5vIHJlcSAoRFhFUENUbD0weCUwOHgpXG4iLAogCQkJIF9fZnVuY19fLCBzaXplLCBlcF9pZHgsIGVwY3RsKTsKIAogCQkvKiBkdW1wIHRoZSBkYXRhIGZyb20gdGhlIEZJRk8sIHdlJ3ZlIG5vdGhpbmcgd2UgY2FuIGRvICovCkBAIC0xNTMwLDEzICsxMzYyLDEzIEBACiAJZGV2X2RiZyhoc290Zy0+ZGV2LCAic2VuZGluZyB6ZXJvLWxlbmd0aCBwYWNrZXRcbiIpOwogCiAJLyogaXNzdWUgYSB6ZXJvLXNpemVkIHBhY2tldCB0byB0ZXJtaW5hdGUgdGhpcyAqLwotCXdyaXRlbChEeEVQVFNJWl9NQygxKSB8IER4RVBUU0laX1BrdENudCgxKSB8Ci0JICAgICAgIER4RVBUU0laX1hmZXJTaXplKDApLCBoc290Zy0+cmVncyArIERJRVBUU0laKDApKTsKKwl3cml0ZWwoRFhFUFRTSVpfTUMoMSkgfCBEWEVQVFNJWl9QS1RDTlQoMSkgfAorCSAgICAgICBEWEVQVFNJWl9YRkVSU0laRSgwKSwgaHNvdGctPnJlZ3MgKyBESUVQVFNJWigwKSk7CiAKIAljdHJsID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBESUVQQ1RMMCk7Ci0JY3RybCB8PSBEeEVQQ1RMX0NOQUs7ICAvKiBjbGVhciBOQUsgc2V0IGJ5IGNvcmUgKi8KLQljdHJsIHw9IER4RVBDVExfRVBFbmE7IC8qIGVuc3VyZSBlcCBlbmFibGVkICovCi0JY3RybCB8PSBEeEVQQ1RMX1VTQkFjdEVwOworCWN0cmwgfD0gRFhFUENUTF9DTkFLOyAgLyogY2xlYXIgTkFLIHNldCBieSBjb3JlICovCisJY3RybCB8PSBEWEVQQ1RMX0VQRU5BOyAvKiBlbnN1cmUgZXAgZW5hYmxlZCAqLworCWN0cmwgfD0gRFhFUENUTF9VU0JBQ1RFUDsKIAl3cml0ZWwoY3RybCwgaHNvdGctPnJlZ3MgKyBESUVQQ1RMMCk7CiB9CiAKQEAgLTE1NTcsNyArMTM4OSw3IEBACiAJc3RydWN0IHMzY19oc290Z19lcCAqaHNfZXAgPSAmaHNvdGctPmVwc1tlcG51bV07CiAJc3RydWN0IHMzY19oc290Z19yZXEgKmhzX3JlcSA9IGhzX2VwLT5yZXE7CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSAmaHNfcmVxLT5yZXE7Ci0JdW5zaWduZWQgc2l6ZV9sZWZ0ID0gRHhFUFRTSVpfWGZlclNpemVfR0VUKGVwc2l6ZSk7CisJdW5zaWduZWQgc2l6ZV9sZWZ0ID0gRFhFUFRTSVpfWEZFUlNJWkVfR0VUKGVwc2l6ZSk7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAlpZiAoIWhzX3JlcSkgewpAQCAtMTY1NywyNCArMTQ4OSwyMiBAQAogCiAJV0FSTl9PTih1c2luZ19kbWEoaHNvdGcpKTsKIAotCWVwbnVtID0gZ3J4c3RzciAmIEdSWFNUU19FUE51bV9NQVNLOwotCXN0YXR1cyA9IGdyeHN0c3IgJiBHUlhTVFNfUGt0U3RzX01BU0s7CisJZXBudW0gPSBncnhzdHNyICYgR1JYU1RTX0VQTlVNX01BU0s7CisJc3RhdHVzID0gZ3J4c3RzciAmIEdSWFNUU19QS1RTVFNfTUFTSzsKIAotCXNpemUgPSBncnhzdHNyICYgR1JYU1RTX0J5dGVDbnRfTUFTSzsKLQlzaXplID4+PSBHUlhTVFNfQnl0ZUNudF9TSElGVDsKKwlzaXplID0gZ3J4c3RzciAmIEdSWFNUU19CWVRFQ05UX01BU0s7CisJc2l6ZSA+Pj0gR1JYU1RTX0JZVEVDTlRfU0hJRlQ7CiAKIAlpZiAoMSkKIAkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IEdSWFNUU1A9MHglMDh4ICglZEAlZClcbiIsCiAJCQlfX2Z1bmNfXywgZ3J4c3Rzciwgc2l6ZSwgZXBudW0pOwogCi0jZGVmaW5lIF9fc3RhdHVzKHgpICgoeCkgPj4gR1JYU1RTX1BrdFN0c19TSElGVCkKLQotCXN3aXRjaCAoc3RhdHVzID4+IEdSWFNUU19Qa3RTdHNfU0hJRlQpIHsKLQljYXNlIF9fc3RhdHVzKEdSWFNUU19Qa3RTdHNfR2xvYmFsT3V0TkFLKToKLQkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiR2xvYmFsT3V0TkFLXG4iKTsKKwlzd2l0Y2ggKChzdGF0dXMgJiBHUlhTVFNfUEtUU1RTX01BU0spID4+IEdSWFNUU19QS1RTVFNfU0hJRlQpIHsKKwljYXNlIEdSWFNUU19QS1RTVFNfR0xPQkFMT1VUTkFLOgorCQlkZXZfZGJnKGhzb3RnLT5kZXYsICJHTE9CQUxPVVROQUtcbiIpOwogCQlicmVhazsKIAotCWNhc2UgX19zdGF0dXMoR1JYU1RTX1BrdFN0c19PdXREb25lKToKKwljYXNlIEdSWFNUU19QS1RTVFNfT1VURE9ORToKIAkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiT3V0RG9uZSAoRnJhbWU9MHglMDh4KVxuIiwKIAkJCXMzY19oc290Z19yZWFkX2ZyYW1lbm8oaHNvdGcpKTsKIApAQCAtMTY4Miw3ICsxNTEyLDcgQEAKIAkJCXMzY19oc290Z19oYW5kbGVfb3V0ZG9uZShoc290ZywgZXBudW0sIGZhbHNlKTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fc3RhdHVzKEdSWFNUU19Qa3RTdHNfU2V0dXBEb25lKToKKwljYXNlIEdSWFNUU19QS1RTVFNfU0VUVVBET05FOgogCQlkZXZfZGJnKGhzb3RnLT5kZXYsCiAJCQkiU2V0dXBEb25lIChGcmFtZT0weCUwOHgsIERPUEVQQ1RMPTB4JTA4eClcbiIsCiAJCQlzM2NfaHNvdGdfcmVhZF9mcmFtZW5vKGhzb3RnKSwKQEAgLTE2OTEsMTEgKzE1MjEsMTEgQEAKIAkJczNjX2hzb3RnX2hhbmRsZV9vdXRkb25lKGhzb3RnLCBlcG51bSwgdHJ1ZSk7CiAJCWJyZWFrOwogCi0JY2FzZSBfX3N0YXR1cyhHUlhTVFNfUGt0U3RzX091dFJYKToKKwljYXNlIEdSWFNUU19QS1RTVFNfT1VUUlg6CiAJCXMzY19oc290Z19yeF9kYXRhKGhzb3RnLCBlcG51bSwgc2l6ZSk7CiAJCWJyZWFrOwogCi0JY2FzZSBfX3N0YXR1cyhHUlhTVFNfUGt0U3RzX1NldHVwUlgpOgorCWNhc2UgR1JYU1RTX1BLVFNUU19TRVRVUFJYOgogCQlkZXZfZGJnKGhzb3RnLT5kZXYsCiAJCQkiU2V0dXBSWCAoRnJhbWU9MHglMDh4LCBET1BFUENUTD0weCUwOHgpXG4iLAogCQkJczNjX2hzb3RnX3JlYWRfZnJhbWVubyhoc290ZyksCkBAIC0xNzYxLDcgKzE1OTEsNyBAQAogCQloc19lcC0+ZXAubWF4cGFja2V0ID0gbXBzOwogCQloc19lcC0+bWMgPSAxOwogCX0gZWxzZSB7Ci0JCW1wc3ZhbCA9IG1wcyAmIER4RVBDVExfTVBTX01BU0s7CisJCW1wc3ZhbCA9IG1wcyAmIERYRVBDVExfTVBTX01BU0s7CiAJCWlmIChtcHN2YWwgPiAxMDI0KQogCQkJZ290byBiYWRfbXBzOwogCQltY3ZhbCA9ICgobXBzID4+IDExKSAmIDB4MykgKyAxOwpAQCAtMTc3NywxMyArMTYwNywxMyBAQAogCSAqLwogCiAJcmVnID0gcmVhZGwocmVncyArIERJRVBDVEwoZXApKTsKLQlyZWcgJj0gfkR4RVBDVExfTVBTX01BU0s7CisJcmVnICY9IH5EWEVQQ1RMX01QU19NQVNLOwogCXJlZyB8PSBtcHN2YWw7CiAJd3JpdGVsKHJlZywgcmVncyArIERJRVBDVEwoZXApKTsKIAogCWlmIChlcCkgewogCQlyZWcgPSByZWFkbChyZWdzICsgRE9FUENUTChlcCkpOwotCQlyZWcgJj0gfkR4RVBDVExfTVBTX01BU0s7CisJCXJlZyAmPSB+RFhFUENUTF9NUFNfTUFTSzsKIAkJcmVnIHw9IG1wc3ZhbDsKIAkJd3JpdGVsKHJlZywgcmVncyArIERPRVBDVEwoZXApKTsKIAl9CkBAIC0xODA0LDcgKzE2MzQsNyBAQAogCWludCB0aW1lb3V0OwogCWludCB2YWw7CiAKLQl3cml0ZWwoR1JTVENUTF9UeEZOdW0oaWR4KSB8IEdSU1RDVExfVHhGRmxzaCwKKwl3cml0ZWwoR1JTVENUTF9UWEZOVU0oaWR4KSB8IEdSU1RDVExfVFhGRkxTSCwKIAkJaHNvdGctPnJlZ3MgKyBHUlNUQ1RMKTsKIAogCS8qIHdhaXQgdW50aWwgdGhlIGZpZm8gaXMgZmx1c2hlZCAqLwpAQCAtMTgxMyw3ICsxNjQzLDcgQEAKIAl3aGlsZSAoMSkgewogCQl2YWwgPSByZWFkbChoc290Zy0+cmVncyArIEdSU1RDVEwpOwogCi0JCWlmICgodmFsICYgKEdSU1RDVExfVHhGRmxzaCkpID09IDApCisJCWlmICgodmFsICYgKEdSU1RDVExfVFhGRkxTSCkpID09IDApCiAJCQlicmVhazsKIAogCQlpZiAoLS10aW1lb3V0ID09IDApIHsKQEAgLTE4OTYsNyArMTcyNiw3IEBACiAJICogYWxpZ25lZCkuCiAJICovCiAKLQlzaXplX2xlZnQgPSBEeEVQVFNJWl9YZmVyU2l6ZV9HRVQoZXBzaXplKTsKKwlzaXplX2xlZnQgPSBEWEVQVFNJWl9YRkVSU0laRV9HRVQoZXBzaXplKTsKIAogCXNpemVfZG9uZSA9IGhzX2VwLT5zaXplX2xvYWRlZCAtIHNpemVfbGVmdDsKIAlzaXplX2RvbmUgKz0gaHNfZXAtPmxhc3RfbG9hZDsKQEAgLTE5NjMsMTcgKzE3OTMsMTcgQEAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogZXAlZCglcykgRHhFUElOVD0weCUwOHhcbiIsCiAJCV9fZnVuY19fLCBpZHgsIGRpcl9pbiA/ICJpbiIgOiAib3V0IiwgaW50cyk7CiAKLQlpZiAoaW50cyAmIER4RVBJTlRfWGZlckNvbXBsKSB7CisJaWYgKGludHMgJiBEWEVQSU5UX1hGRVJDT01QTCkgewogCQlpZiAoaHNfZXAtPmlzb2Nocm9ub3VzICYmIGhzX2VwLT5pbnRlcnZhbCA9PSAxKSB7Ci0JCQlpZiAoY3RybCAmIER4RVBDVExfRU9Gck51bSkKLQkJCQljdHJsIHw9IER4RVBDVExfU2V0RXZlbkZyOworCQkJaWYgKGN0cmwgJiBEWEVQQ1RMX0VPRlJOVU0pCisJCQkJY3RybCB8PSBEWEVQQ1RMX1NFVEVWRU5GUjsKIAkJCWVsc2UKLQkJCQljdHJsIHw9IER4RVBDVExfU2V0T2RkRnI7CisJCQkJY3RybCB8PSBEWEVQQ1RMX1NFVE9EREZSOwogCQkJd3JpdGVsKGN0cmwsIGhzb3RnLT5yZWdzICsgZXBjdGxfcmVnKTsKIAkJfQogCiAJCWRldl9kYmcoaHNvdGctPmRldiwKLQkJCSIlczogWGZlckNvbXBsOiBEeEVQQ1RMPTB4JTA4eCwgRHhFUFRTSVo9JTA4eFxuIiwKKwkJCSIlczogWGZlckNvbXBsOiBEeEVQQ1RMPTB4JTA4eCwgRFhFUFRTSVo9JTA4eFxuIiwKIAkJCV9fZnVuY19fLCByZWFkbChoc290Zy0+cmVncyArIGVwY3RsX3JlZyksCiAJCQlyZWFkbChoc290Zy0+cmVncyArIGVwc2l6X3JlZykpOwogCkBAIC0xOTk2LDcgKzE4MjYsNyBAQAogCQl9CiAJfQogCi0JaWYgKGludHMgJiBEeEVQSU5UX0VQRGlzYmxkKSB7CisJaWYgKGludHMgJiBEWEVQSU5UX0VQRElTQkxEKSB7CiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBFUERpc2JsZFxuIiwgX19mdW5jX18pOwogCiAJCWlmIChkaXJfaW4pIHsKQEAgLTIwMDQsMjAgKzE4MzQsMjAgQEAKIAogCQkJczNjX2hzb3RnX3R4Zmlmb19mbHVzaChoc290ZywgaWR4KTsKIAotCQkJaWYgKChlcGN0bCAmIER4RVBDVExfU3RhbGwpICYmCi0JCQkJKGVwY3RsICYgRHhFUENUTF9FUFR5cGVfQnVsaykpIHsKKwkJCWlmICgoZXBjdGwgJiBEWEVQQ1RMX1NUQUxMKSAmJgorCQkJCShlcGN0bCAmIERYRVBDVExfRVBUWVBFX0JVTEspKSB7CiAJCQkJaW50IGRjdGwgPSByZWFkbChoc290Zy0+cmVncyArIERDVEwpOwogCi0JCQkJZGN0bCB8PSBEQ1RMX0NHTlBJbk5BSzsKKwkJCQlkY3RsIHw9IERDVExfQ0dOUElOTkFLOwogCQkJCXdyaXRlbChkY3RsLCBoc290Zy0+cmVncyArIERDVEwpOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKGludHMgJiBEeEVQSU5UX0FIQkVycikKKwlpZiAoaW50cyAmIERYRVBJTlRfQUhCRVJSKQogCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogQUhCRXJyXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoaW50cyAmIER4RVBJTlRfU2V0dXApIHsgIC8qIFNldHVwIG9yIFRpbWVvdXQgKi8KKwlpZiAoaW50cyAmIERYRVBJTlRfU0VUVVApIHsgIC8qIFNldHVwIG9yIFRpbWVvdXQgKi8KIAkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IFNldHVwL1RpbWVvdXRcbiIsICBfX2Z1bmNfXyk7CiAKIAkJaWYgKHVzaW5nX2RtYShoc290ZykgJiYgaWR4ID09IDApIHsKQEAgLTIwMzUsMjUgKzE4NjUsMjUgQEAKIAkJfQogCX0KIAotCWlmIChpbnRzICYgRHhFUElOVF9CYWNrMkJhY2tTZXR1cCkKKwlpZiAoaW50cyAmIERYRVBJTlRfQkFDSzJCQUNLU0VUVVApCiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBCMkJTZXR1cC9JTkVQTmFrRWZmXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGlyX2luICYmICFoc19lcC0+aXNvY2hyb25vdXMpIHsKIAkJLyogbm90IHN1cmUgaWYgdGhpcyBpcyBpbXBvcnRhbnQsIGJ1dCB3ZSdsbCBjbGVhciBpdCBhbnl3YXkgKi8KLQkJaWYgKGludHMgJiBESUVQTVNLX0lOVGtuVFhGRW1wTXNrKSB7CisJCWlmIChpbnRzICYgRElFUE1TS19JTlRLTlRYRkVNUE1TSykgewogCQkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IGVwJWQ6IElOVGtuVFhGRW1wTXNrXG4iLAogCQkJCV9fZnVuY19fLCBpZHgpOwogCQl9CiAKIAkJLyogdGhpcyBwcm9iYWJseSBtZWFucyBzb21ldGhpbmcgYmFkIGlzIGhhcHBlbmluZyAqLwotCQlpZiAoaW50cyAmIERJRVBNU0tfSU5Ua25FUE1pc01zaykgeworCQlpZiAoaW50cyAmIERJRVBNU0tfSU5US05FUE1JU01TSykgewogCQkJZGV2X3dhcm4oaHNvdGctPmRldiwgIiVzOiBlcCVkOiBJTlRrbkVQXG4iLAogCQkJCSBfX2Z1bmNfXywgaWR4KTsKIAkJfQogCiAJCS8qIEZJRk8gaGFzIHNwYWNlIG9yIGlzIGVtcHR5IChzZWUgR0FIQkNGRykgKi8KIAkJaWYgKGhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MgJiYKLQkJICAgIGludHMgJiBESUVQTVNLX1R4RklGT0VtcHR5KSB7CisJCSAgICBpbnRzICYgRElFUE1TS19UWEZJRk9FTVBUWSkgewogCQkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IGVwJWQ6IFR4RklGT0VtcHR5XG4iLAogCQkJCV9fZnVuY19fLCBpZHgpOwogCQkJaWYgKCF1c2luZ19kbWEoaHNvdGcpKQpAQCAtMjA4OSwyMSArMTkxOSwyMSBAQAogCSAqLwogCiAJLyogY2F0Y2ggYm90aCBFbnVtU3BkX0ZTIGFuZCBFbnVtU3BkX0ZTNDggKi8KLQlzd2l0Y2ggKGRzdHMgJiBEU1RTX0VudW1TcGRfTUFTSykgewotCWNhc2UgRFNUU19FbnVtU3BkX0ZTOgotCWNhc2UgRFNUU19FbnVtU3BkX0ZTNDg6CisJc3dpdGNoIChkc3RzICYgRFNUU19FTlVNU1BEX01BU0spIHsKKwljYXNlIERTVFNfRU5VTVNQRF9GUzoKKwljYXNlIERTVFNfRU5VTVNQRF9GUzQ4OgogCQloc290Zy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CiAJCWVwMF9tcHMgPSBFUDBfTVBTX0xJTUlUOwogCQllcF9tcHMgPSAxMDIzOwogCQlicmVhazsKIAotCWNhc2UgRFNUU19FbnVtU3BkX0hTOgorCWNhc2UgRFNUU19FTlVNU1BEX0hTOgogCQloc290Zy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CiAJCWVwMF9tcHMgPSBFUDBfTVBTX0xJTUlUOwogCQllcF9tcHMgPSAxMDI0OwogCQlicmVhazsKIAotCWNhc2UgRFNUU19FbnVtU3BkX0xTOgorCWNhc2UgRFNUU19FTlVNU1BEX0xTOgogCQloc290Zy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0xPVzsKIAkJLyoKIAkJICogbm90ZSwgd2UgZG9uJ3QgYWN0dWFsbHkgc3VwcG9ydCBMUyBpbiB0aGlzIGRyaXZlciBhdCB0aGUKQEAgLTIxNjksMTYgKzE5OTksNiBAQAogCQkJczNjX2hzb3RnX3R4Zmlmb19mbHVzaChoc290ZywgZXAtPmluZGV4KTsKIH0KIAotI2RlZmluZSBjYWxsX2dhZGdldChfaHMsIF9lbnRyeSkgXAotZG8geyBcCi0JaWYgKChfaHMpLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04gJiYJXAotCSAgICAoX2hzKS0+ZHJpdmVyICYmIChfaHMpLT5kcml2ZXItPl9lbnRyeSkgeyBcCi0JCXNwaW5fdW5sb2NrKCZfaHMtPmxvY2spOyBcCi0JCShfaHMpLT5kcml2ZXItPl9lbnRyeSgmKF9ocyktPmdhZGdldCk7IFwKLQkJc3Bpbl9sb2NrKCZfaHMtPmxvY2spOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCiAvKioKICAqIHMzY19oc290Z19kaXNjb25uZWN0IC0gZGlzY29ubmVjdCBzZXJ2aWNlCiAgKiBAaHNvdGc6IFRoZSBkZXZpY2Ugc3RhdGUuCkBAIC0yMjI2LDkgKzIwNDYsOSBAQAogfQogCiAvKiBJUlEgZmxhZ3Mgd2hpY2ggd2lsbCB0cmlnZ2VyIGEgcmV0cnkgYXJvdW5kIHRoZSBJUlEgbG9vcCAqLwotI2RlZmluZSBJUlFfUkVUUllfTUFTSyAoR0lOVFNUU19OUFR4RkVtcCB8IFwKLQkJCUdJTlRTVFNfUFR4RkVtcCB8ICBcCi0JCQlHSU5UU1RTX1J4Rkx2bCkKKyNkZWZpbmUgSVJRX1JFVFJZX01BU0sgKEdJTlRTVFNfTlBUWEZFTVAgfCBcCisJCQlHSU5UU1RTX1BUWEZFTVAgfCAgXAorCQkJR0lOVFNUU19SWEZMVkwpCiAKIC8qKgogICogczNjX2hzb3RnX2NvcmVyZXNldCAtIGlzc3VlIHNvZnRyZXNldCB0byB0aGUgY29yZQpAQCAtMjI0NCwxNCArMjA2NCwxNCBAQAogCWRldl9kYmcoaHNvdGctPmRldiwgInJlc2V0dGluZyBjb3JlXG4iKTsKIAogCS8qIGlzc3VlIHNvZnQgcmVzZXQgKi8KLQl3cml0ZWwoR1JTVENUTF9DU2Z0UnN0LCBoc290Zy0+cmVncyArIEdSU1RDVEwpOworCXdyaXRlbChHUlNUQ1RMX0NTRlRSU1QsIGhzb3RnLT5yZWdzICsgR1JTVENUTCk7CiAKIAl0aW1lb3V0ID0gMTAwMDA7CiAJZG8gewogCQlncnN0Y3RsID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBHUlNUQ1RMKTsKLQl9IHdoaWxlICgoZ3JzdGN0bCAmIEdSU1RDVExfQ1NmdFJzdCkgJiYgdGltZW91dC0tID4gMCk7CisJfSB3aGlsZSAoKGdyc3RjdGwgJiBHUlNUQ1RMX0NTRlRSU1QpICYmIHRpbWVvdXQtLSA+IDApOwogCi0JaWYgKGdyc3RjdGwgJiBHUlNUQ1RMX0NTZnRSc3QpIHsKKwlpZiAoZ3JzdGN0bCAmIEdSU1RDVExfQ1NGVFJTVCkgewogCQlkZXZfZXJyKGhzb3RnLT5kZXYsICJGYWlsZWQgdG8gZ2V0IENTZnRSc3QgYXNzZXJ0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjY4LDcgKzIwODgsNyBAQAogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAotCQlpZiAoIShncnN0Y3RsICYgR1JTVENUTF9BSEJJZGxlKSkKKwkJaWYgKCEoZ3JzdGN0bCAmIEdSU1RDVExfQUhCSURMRSkpCiAJCQljb250aW51ZTsKIAogCQlicmVhazsJCS8qIHJlc2V0IGRvbmUgKi8KQEAgLTIyOTQsMTQgKzIxMTQsMTQgQEAKIAkgKi8KIAogCS8qIHNldCB0aGUgUExMIG9uLCByZW1vdmUgdGhlIEhOUC9TUlAgYW5kIHNldCB0aGUgUEhZICovCi0Jd3JpdGVsKGhzb3RnLT5waHlpZiB8IEdVU0JDRkdfVE91dENhbCg3KSB8CisJd3JpdGVsKGhzb3RnLT5waHlpZiB8IEdVU0JDRkdfVE9VVENBTCg3KSB8CiAJICAgICAgICgweDUgPDwgMTApLCBoc290Zy0+cmVncyArIEdVU0JDRkcpOwogCiAJczNjX2hzb3RnX2luaXRfZmlmbyhoc290Zyk7CiAKLQlfX29ycjMyKGhzb3RnLT5yZWdzICsgRENUTCwgRENUTF9TZnREaXNjb24pOworCV9fb3JyMzIoaHNvdGctPnJlZ3MgKyBEQ1RMLCBEQ1RMX1NGVERJU0NPTik7CiAKLQl3cml0ZWwoMSA8PCAxOCB8IERDRkdfRGV2U3BkX0hTLCAgaHNvdGctPnJlZ3MgKyBEQ0ZHKTsKKwl3cml0ZWwoMSA8PCAxOCB8IERDRkdfREVWU1BEX0hTLCAgaHNvdGctPnJlZ3MgKyBEQ0ZHKTsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIE9URyBpbnRlcnJ1cHRzICovCiAJd3JpdGVsKDB4ZmZmZmZmZmYsIGhzb3RnLT5yZWdzICsgR09UR0lOVCk7CkBAIC0yMzA5LDIxICsyMTI5LDIxIEBACiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLwogCXdyaXRlbCgweGZmZmZmZmZmLCBoc290Zy0+cmVncyArIEdJTlRTVFMpOwogCi0Jd3JpdGVsKEdJTlRTVFNfRXJseVN1c3AgfCBHSU5UU1RTX1Nlc3NSZXFJbnQgfAotCSAgICAgICBHSU5UU1RTX0dPVVROYWtFZmYgfCBHSU5UU1RTX0dJTk5ha0VmZiB8Ci0JICAgICAgIEdJTlRTVFNfQ29uSURTdHNDaG5nIHwgR0lOVFNUU19VU0JSc3QgfAotCSAgICAgICBHSU5UU1RTX0VudW1Eb25lIHwgR0lOVFNUU19PVEdJbnQgfAotCSAgICAgICBHSU5UU1RTX1VTQlN1c3AgfCBHSU5UU1RTX1drVXBJbnQsCi0JICAgICAgIGhzb3RnLT5yZWdzICsgR0lOVE1TSyk7CisJd3JpdGVsKEdJTlRTVFNfRVJMWVNVU1AgfCBHSU5UU1RTX1NFU1NSRVFJTlQgfAorCQlHSU5UU1RTX0dPVVROQUtFRkYgfCBHSU5UU1RTX0dJTk5BS0VGRiB8CisJCUdJTlRTVFNfQ09OSURTVFNDSE5HIHwgR0lOVFNUU19VU0JSU1QgfAorCQlHSU5UU1RTX0VOVU1ET05FIHwgR0lOVFNUU19PVEdJTlQgfAorCQlHSU5UU1RTX1VTQlNVU1AgfCBHSU5UU1RTX1dLVVBJTlQsCisJCWhzb3RnLT5yZWdzICsgR0lOVE1TSyk7CiAKIAlpZiAodXNpbmdfZG1hKGhzb3RnKSkKLQkJd3JpdGVsKEdBSEJDRkdfR2xibEludHJFbiB8IEdBSEJDRkdfRE1BRW4gfAotCQkgICAgICAgR0FIQkNGR19IQnN0TGVuX0luY3I0LAorCQl3cml0ZWwoR0FIQkNGR19HTEJMX0lOVFJfRU4gfCBHQUhCQ0ZHX0RNQV9FTiB8CisJCSAgICAgICBHQUhCQ0ZHX0hCU1RMRU5fSU5DUjQsCiAJCSAgICAgICBoc290Zy0+cmVncyArIEdBSEJDRkcpOwogCWVsc2UKLQkJd3JpdGVsKCgoaHNvdGctPmRlZGljYXRlZF9maWZvcykgPyAoR0FIQkNGR19OUFR4RkVtcEx2bCB8Ci0JCQkJCQkgICAgR0FIQkNGR19QVHhGRW1wTHZsKSA6IDApIHwKLQkJICAgICAgIEdBSEJDRkdfR2xibEludHJFbiwKKwkJd3JpdGVsKCgoaHNvdGctPmRlZGljYXRlZF9maWZvcykgPyAoR0FIQkNGR19OUF9UWEZfRU1QX0xWTCB8CisJCQkJCQkgICAgR0FIQkNGR19QX1RYRl9FTVBfTFZMKSA6IDApIHwKKwkJICAgICAgIEdBSEJDRkdfR0xCTF9JTlRSX0VOLAogCQkgICAgICAgaHNvdGctPnJlZ3MgKyBHQUhCQ0ZHKTsKIAogCS8qCkBAIC0yMzMyLDIyICsyMTUyLDIyIEBACiAJICogaW50ZXJydXB0cy4KIAkgKi8KIAotCXdyaXRlbCgoKGhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MpID8gRElFUE1TS19UeEZJRk9FbXB0eSB8Ci0JICAgICAgIERJRVBNU0tfSU5Ua25UWEZFbXBNc2sgOiAwKSB8Ci0JICAgICAgIERJRVBNU0tfRVBEaXNibGRNc2sgfCBESUVQTVNLX1hmZXJDb21wbE1zayB8Ci0JICAgICAgIERJRVBNU0tfVGltZU9VVE1zayB8IERJRVBNU0tfQUhCRXJyTXNrIHwKLQkgICAgICAgRElFUE1TS19JTlRrbkVQTWlzTXNrLAotCSAgICAgICBoc290Zy0+cmVncyArIERJRVBNU0spOworCXdyaXRlbCgoKGhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MpID8gRElFUE1TS19UWEZJRk9FTVBUWSB8CisJCURJRVBNU0tfSU5US05UWEZFTVBNU0sgOiAwKSB8CisJCURJRVBNU0tfRVBESVNCTERNU0sgfCBESUVQTVNLX1hGRVJDT01QTE1TSyB8CisJCURJRVBNU0tfVElNRU9VVE1TSyB8IERJRVBNU0tfQUhCRVJSTVNLIHwKKwkJRElFUE1TS19JTlRLTkVQTUlTTVNLLAorCQloc290Zy0+cmVncyArIERJRVBNU0spOwogCiAJLyoKIAkgKiBkb24ndCBuZWVkIFhmZXJDb21wbCwgd2UgZ2V0IHRoYXQgZnJvbSBSWEZJRk8gaW4gc2xhdmUgbW9kZS4gSW4KIAkgKiBETUEgbW9kZSB3ZSBtYXkgbmVlZCB0aGlzLgogCSAqLwotCXdyaXRlbCgodXNpbmdfZG1hKGhzb3RnKSA/IChESUVQTVNLX1hmZXJDb21wbE1zayB8Ci0JCQkJICAgIERJRVBNU0tfVGltZU9VVE1zaykgOiAwKSB8Ci0JICAgICAgIERPRVBNU0tfRVBEaXNibGRNc2sgfCBET0VQTVNLX0FIQkVyck1zayB8Ci0JICAgICAgIERPRVBNU0tfU2V0dXBNc2ssCi0JICAgICAgIGhzb3RnLT5yZWdzICsgRE9FUE1TSyk7CisJd3JpdGVsKCh1c2luZ19kbWEoaHNvdGcpID8gKERJRVBNU0tfWEZFUkNPTVBMTVNLIHwKKwkJCQkgICAgRElFUE1TS19USU1FT1VUTVNLKSA6IDApIHwKKwkJRE9FUE1TS19FUERJU0JMRE1TSyB8IERPRVBNU0tfQUhCRVJSTVNLIHwKKwkJRE9FUE1TS19TRVRVUE1TSywKKwkJaHNvdGctPnJlZ3MgKyBET0VQTVNLKTsKIAogCXdyaXRlbCgwLCBoc290Zy0+cmVncyArIERBSU5UTVNLKTsKIApAQCAtMjM1Niw3ICsyMTc2LDcgQEAKIAkJcmVhZGwoaHNvdGctPnJlZ3MgKyBET0VQQ1RMMCkpOwogCiAJLyogZW5hYmxlIGluIGFuZCBvdXQgZW5kcG9pbnQgaW50ZXJydXB0cyAqLwotCXMzY19oc290Z19lbl9nc2ludChoc290ZywgR0lOVFNUU19PRVBJbnQgfCBHSU5UU1RTX0lFUEludCk7CisJczNjX2hzb3RnX2VuX2dzaW50KGhzb3RnLCBHSU5UU1RTX09FUElOVCB8IEdJTlRTVFNfSUVQSU5UKTsKIAogCS8qCiAJICogRW5hYmxlIHRoZSBSWEZJRk8gd2hlbiBpbiBzbGF2ZSBtb2RlLCBhcyB0aGlzIGlzIGhvdyB3ZSBjb2xsZWN0CkBAIC0yMzY0LDE1ICsyMTg0LDE1IEBACiAJICogdGhpbmdzIHdlIGNhbm5vdCBwcm9jZXNzLCBzbyBkbyBub3QgdXNlIGl0LgogCSAqLwogCWlmICghdXNpbmdfZG1hKGhzb3RnKSkKLQkJczNjX2hzb3RnX2VuX2dzaW50KGhzb3RnLCBHSU5UU1RTX1J4Rkx2bCk7CisJCXMzY19oc290Z19lbl9nc2ludChoc290ZywgR0lOVFNUU19SWEZMVkwpOwogCiAJLyogRW5hYmxlIGludGVycnVwdHMgZm9yIEVQMCBpbiBhbmQgb3V0ICovCiAJczNjX2hzb3RnX2N0cmxfZXBpbnQoaHNvdGcsIDAsIDAsIDEpOwogCXMzY19oc290Z19jdHJsX2VwaW50KGhzb3RnLCAwLCAxLCAxKTsKIAotCV9fb3JyMzIoaHNvdGctPnJlZ3MgKyBEQ1RMLCBEQ1RMX1BXUk9uUHJnRG9uZSk7CisJX19vcnIzMihoc290Zy0+cmVncyArIERDVEwsIERDVExfUFdST05QUkdET05FKTsKIAl1ZGVsYXkoMTApOyAgLyogc2VlIG9wZW5pYm9vdCAqLwotCV9fYmljMzIoaHNvdGctPnJlZ3MgKyBEQ1RMLCBEQ1RMX1BXUk9uUHJnRG9uZSk7CisJX19iaWMzMihoc290Zy0+cmVncyArIERDVEwsIERDVExfUFdST05QUkdET05FKTsKIAogCWRldl9kYmcoaHNvdGctPmRldiwgIkRDVEw9MHglMDh4XG4iLCByZWFkbChoc290Zy0+cmVncyArIERDVEwpKTsKIApAQCAtMjM4MiwxNyArMjIwMiwxNyBAQAogCSAqLwogCiAJLyogc2V0IHRvIHJlYWQgMSA4Ynl0ZSBwYWNrZXQgKi8KLQl3cml0ZWwoRHhFUFRTSVpfTUMoMSkgfCBEeEVQVFNJWl9Qa3RDbnQoMSkgfAotCSAgICAgICBEeEVQVFNJWl9YZmVyU2l6ZSg4KSwgaHNvdGctPnJlZ3MgKyBET0VQVFNJWjApOworCXdyaXRlbChEWEVQVFNJWl9NQygxKSB8IERYRVBUU0laX1BLVENOVCgxKSB8CisJICAgICAgIERYRVBUU0laX1hGRVJTSVpFKDgpLCBoc290Zy0+cmVncyArIERPRVBUU0laMCk7CiAKIAl3cml0ZWwoczNjX2hzb3RnX2VwMF9tcHMoaHNvdGctPmVwc1swXS5lcC5tYXhwYWNrZXQpIHwKLQkgICAgICAgRHhFUENUTF9DTkFLIHwgRHhFUENUTF9FUEVuYSB8Ci0JICAgICAgIER4RVBDVExfVVNCQWN0RXAsCisJICAgICAgIERYRVBDVExfQ05BSyB8IERYRVBDVExfRVBFTkEgfAorCSAgICAgICBEWEVQQ1RMX1VTQkFDVEVQLAogCSAgICAgICBoc290Zy0+cmVncyArIERPRVBDVEwwKTsKIAogCS8qIGVuYWJsZSwgYnV0IGRvbid0IGFjdGl2YXRlIEVQMGluICovCiAJd3JpdGVsKHMzY19oc290Z19lcDBfbXBzKGhzb3RnLT5lcHNbMF0uZXAubWF4cGFja2V0KSB8Ci0JICAgICAgIER4RVBDVExfVVNCQWN0RXAsIGhzb3RnLT5yZWdzICsgRElFUENUTDApOworCSAgICAgICBEWEVQQ1RMX1VTQkFDVEVQLCBoc290Zy0+cmVncyArIERJRVBDVEwwKTsKIAogCXMzY19oc290Z19lbnF1ZXVlX3NldHVwKGhzb3RnKTsKIApAQCAtMjQwMSwxNCArMjIyMSwxNCBAQAogCQlyZWFkbChoc290Zy0+cmVncyArIERPRVBDVEwwKSk7CiAKIAkvKiBjbGVhciBnbG9iYWwgTkFLcyAqLwotCXdyaXRlbChEQ1RMX0NHT1VUTmFrIHwgRENUTF9DR05QSW5OQUssCisJd3JpdGVsKERDVExfQ0dPVVROQUsgfCBEQ1RMX0NHTlBJTk5BSywKIAkgICAgICAgaHNvdGctPnJlZ3MgKyBEQ1RMKTsKIAogCS8qIG11c3QgYmUgYXQtbGVhc3QgM21zIHRvIGFsbG93IGJ1cyB0byBzZWUgZGlzY29ubmVjdCAqLwogCW1kZWxheSgzKTsKIAogCS8qIHJlbW92ZSB0aGUgc29mdC1kaXNjb25uZWN0IGFuZCBsZXQncyBnbyAqLwotCV9fYmljMzIoaHNvdGctPnJlZ3MgKyBEQ1RMLCBEQ1RMX1NmdERpc2Nvbik7CisJX19iaWMzMihoc290Zy0+cmVncyArIERDVEwsIERDVExfU0ZURElTQ09OKTsKIH0KIAogLyoqCkBAIC0yNDMzLDcgKzIyNTMsNyBAQAogCiAJZ2ludHN0cyAmPSBnaW50bXNrOwogCi0JaWYgKGdpbnRzdHMgJiBHSU5UU1RTX09UR0ludCkgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19PVEdJTlQpIHsKIAkJdTMyIG90Z2ludCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgR09UR0lOVCk7CiAKIAkJZGV2X2luZm8oaHNvdGctPmRldiwgIk9UR0ludDogJTA4eFxuIiwgb3RnaW50KTsKQEAgLTI0NDEsMzQgKzIyNjEsMzQgQEAKIAkJd3JpdGVsKG90Z2ludCwgaHNvdGctPnJlZ3MgKyBHT1RHSU5UKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfU2Vzc1JlcUludCkgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19TRVNTUkVRSU5UKSB7CiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBTZXNzUmVxSW50XG4iLCBfX2Z1bmNfXyk7Ci0JCXdyaXRlbChHSU5UU1RTX1Nlc3NSZXFJbnQsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CisJCXdyaXRlbChHSU5UU1RTX1NFU1NSRVFJTlQsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CiAJfQogCi0JaWYgKGdpbnRzdHMgJiBHSU5UU1RTX0VudW1Eb25lKSB7Ci0JCXdyaXRlbChHSU5UU1RTX0VudW1Eb25lLCBoc290Zy0+cmVncyArIEdJTlRTVFMpOworCWlmIChnaW50c3RzICYgR0lOVFNUU19FTlVNRE9ORSkgeworCQl3cml0ZWwoR0lOVFNUU19FTlVNRE9ORSwgaHNvdGctPnJlZ3MgKyBHSU5UU1RTKTsKIAogCQlzM2NfaHNvdGdfaXJxX2VudW1kb25lKGhzb3RnKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfQ29uSURTdHNDaG5nKSB7CisJaWYgKGdpbnRzdHMgJiBHSU5UU1RTX0NPTklEU1RTQ0hORykgewogCQlkZXZfZGJnKGhzb3RnLT5kZXYsICJDb25JRFN0c0NoZyAoRFNUUz0weCUwOHgsIEdPVENUTD0lMDh4KVxuIiwKIAkJCXJlYWRsKGhzb3RnLT5yZWdzICsgRFNUUyksCiAJCQlyZWFkbChoc290Zy0+cmVncyArIEdPVEdDVEwpKTsKIAotCQl3cml0ZWwoR0lOVFNUU19Db25JRFN0c0NobmcsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CisJCXdyaXRlbChHSU5UU1RTX0NPTklEU1RTQ0hORywgaHNvdGctPnJlZ3MgKyBHSU5UU1RTKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIChHSU5UU1RTX09FUEludCB8IEdJTlRTVFNfSUVQSW50KSkgeworCWlmIChnaW50c3RzICYgKEdJTlRTVFNfT0VQSU5UIHwgR0lOVFNUU19JRVBJTlQpKSB7CiAJCXUzMiBkYWludCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgREFJTlQpOwogCQl1MzIgZGFpbnRtc2sgPSByZWFkbChoc290Zy0+cmVncyArIERBSU5UTVNLKTsKIAkJdTMyIGRhaW50X291dCwgZGFpbnRfaW47CiAJCWludCBlcDsKIAogCQlkYWludCAmPSBkYWludG1zazsKLQkJZGFpbnRfb3V0ID0gZGFpbnQgPj4gREFJTlRfT3V0RVBfU0hJRlQ7Ci0JCWRhaW50X2luID0gZGFpbnQgJiB+KGRhaW50X291dCA8PCBEQUlOVF9PdXRFUF9TSElGVCk7CisJCWRhaW50X291dCA9IGRhaW50ID4+IERBSU5UX09VVEVQX1NISUZUOworCQlkYWludF9pbiA9IGRhaW50ICYgfihkYWludF9vdXQgPDwgREFJTlRfT1VURVBfU0hJRlQpOwogCiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBkYWludD0lMDh4XG4iLCBfX2Z1bmNfXywgZGFpbnQpOwogCkBAIC0yNDgzLDcgKzIzMDMsNyBAQAogCQl9CiAJfQogCi0JaWYgKGdpbnRzdHMgJiBHSU5UU1RTX1VTQlJzdCkgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19VU0JSU1QpIHsKIAogCQl1MzIgdXNiX3N0YXR1cyA9IHJlYWRsKGhzb3RnLT5yZWdzICsgR09UR0NUTCk7CiAKQEAgLTI0OTEsNyArMjMxMSw3IEBACiAJCWRldl9kYmcoaHNvdGctPmRldiwgIkdOUFRYU1RTPSUwOHhcbiIsCiAJCQlyZWFkbChoc290Zy0+cmVncyArIEdOUFRYU1RTKSk7CiAKLQkJd3JpdGVsKEdJTlRTVFNfVVNCUnN0LCBoc290Zy0+cmVncyArIEdJTlRTVFMpOworCQl3cml0ZWwoR0lOVFNUU19VU0JSU1QsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CiAKIAkJaWYgKHVzYl9zdGF0dXMgJiBHT1RHQ1RMX0JTRVNWTEQpIHsKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGhzb3RnLT5sYXN0X3JzdCArCkBAIC0yNTA4LDcgKzIzMjgsNyBAQAogCiAJLyogY2hlY2sgYm90aCBGSUZPcyAqLwogCi0JaWYgKGdpbnRzdHMgJiBHSU5UU1RTX05QVHhGRW1wKSB7CisJaWYgKGdpbnRzdHMgJiBHSU5UU1RTX05QVFhGRU1QKSB7CiAJCWRldl9kYmcoaHNvdGctPmRldiwgIk5QVHhGRW1wXG4iKTsKIAogCQkvKgpAQCAtMjUxNywyMCArMjMzNywyMCBAQAogCQkgKiBpdCBuZWVkcyByZS1lbmFibGluZwogCQkgKi8KIAotCQlzM2NfaHNvdGdfZGlzYWJsZV9nc2ludChoc290ZywgR0lOVFNUU19OUFR4RkVtcCk7CisJCXMzY19oc290Z19kaXNhYmxlX2dzaW50KGhzb3RnLCBHSU5UU1RTX05QVFhGRU1QKTsKIAkJczNjX2hzb3RnX2lycV9maWZvZW1wdHkoaHNvdGcsIGZhbHNlKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfUFR4RkVtcCkgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19QVFhGRU1QKSB7CiAJCWRldl9kYmcoaHNvdGctPmRldiwgIlBUeEZFbXBcbiIpOwogCiAJCS8qIFNlZSBub3RlIGluIEdJTlRTVFNfTlBUeEZFbXAgKi8KIAotCQlzM2NfaHNvdGdfZGlzYWJsZV9nc2ludChoc290ZywgR0lOVFNUU19QVHhGRW1wKTsKKwkJczNjX2hzb3RnX2Rpc2FibGVfZ3NpbnQoaHNvdGcsIEdJTlRTVFNfUFRYRkVNUCk7CiAJCXMzY19oc290Z19pcnFfZmlmb2VtcHR5KGhzb3RnLCB0cnVlKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfUnhGTHZsKSB7CisJaWYgKGdpbnRzdHMgJiBHSU5UU1RTX1JYRkxWTCkgewogCQkvKgogCQkgKiBub3RlLCBzaW5jZSBHSU5UU1RTX1J4Rkx2bCBkb3VibGVzIGFzIEZJRk8tbm90LWVtcHR5LAogCQkgKiB3ZSBuZWVkIHRvIHJldHJ5IHMzY19oc290Z19oYW5kbGVfcnggaWYgdGhpcyBpcyBzdGlsbApAQCAtMjU0MCwyOCArMjM2MCwyOCBAQAogCQlzM2NfaHNvdGdfaGFuZGxlX3J4KGhzb3RnKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfTW9kZU1pcykgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19NT0RFTUlTKSB7CiAJCWRldl93YXJuKGhzb3RnLT5kZXYsICJ3YXJuaW5nLCBtb2RlIG1pc21hdGNoIHRyaWdnZXJlZFxuIik7Ci0JCXdyaXRlbChHSU5UU1RTX01vZGVNaXMsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CisJCXdyaXRlbChHSU5UU1RTX01PREVNSVMsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CiAJfQogCi0JaWYgKGdpbnRzdHMgJiBHSU5UU1RTX1VTQlN1c3ApIHsKKwlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfVVNCU1VTUCkgewogCQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR0lOVFNUU19VU0JTdXNwXG4iKTsKLQkJd3JpdGVsKEdJTlRTVFNfVVNCU3VzcCwgaHNvdGctPnJlZ3MgKyBHSU5UU1RTKTsKKwkJd3JpdGVsKEdJTlRTVFNfVVNCU1VTUCwgaHNvdGctPnJlZ3MgKyBHSU5UU1RTKTsKIAogCQljYWxsX2dhZGdldChoc290Zywgc3VzcGVuZCk7CiAJfQogCi0JaWYgKGdpbnRzdHMgJiBHSU5UU1RTX1drVXBJbnQpIHsKKwlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfV0tVUElOVCkgewogCQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR0lOVFNUU19Xa1VwSW5cbiIpOwotCQl3cml0ZWwoR0lOVFNUU19Xa1VwSW50LCBoc290Zy0+cmVncyArIEdJTlRTVFMpOworCQl3cml0ZWwoR0lOVFNUU19XS1VQSU5ULCBoc290Zy0+cmVncyArIEdJTlRTVFMpOwogCiAJCWNhbGxfZ2FkZ2V0KGhzb3RnLCByZXN1bWUpOwogCX0KIAotCWlmIChnaW50c3RzICYgR0lOVFNUU19Fcmx5U3VzcCkgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19FUkxZU1VTUCkgewogCQlkZXZfZGJnKGhzb3RnLT5kZXYsICJHSU5UU1RTX0VybHlTdXNwXG4iKTsKLQkJd3JpdGVsKEdJTlRTVFNfRXJseVN1c3AsIGhzb3RnLT5yZWdzICsgR0lOVFNUUyk7CisJCXdyaXRlbChHSU5UU1RTX0VSTFlTVVNQLCBoc290Zy0+cmVncyArIEdJTlRTVFMpOwogCX0KIAogCS8qCkBAIC0yNTcwLDE4ICsyMzkwLDE4IEBACiAJICogdGhlIG9jY3VycmVuY2UuCiAJICovCiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfR09VVE5ha0VmZikgeworCWlmIChnaW50c3RzICYgR0lOVFNUU19HT1VUTkFLRUZGKSB7CiAJCWRldl9pbmZvKGhzb3RnLT5kZXYsICJHT1VUTmFrRWZmIHRyaWdnZXJlZFxuIik7CiAKLQkJd3JpdGVsKERDVExfQ0dPVVROYWssIGhzb3RnLT5yZWdzICsgRENUTCk7CisJCXdyaXRlbChEQ1RMX0NHT1VUTkFLLCBoc290Zy0+cmVncyArIERDVEwpOwogCiAJCXMzY19oc290Z19kdW1wKGhzb3RnKTsKIAl9CiAKLQlpZiAoZ2ludHN0cyAmIEdJTlRTVFNfR0lOTmFrRWZmKSB7CisJaWYgKGdpbnRzdHMgJiBHSU5UU1RTX0dJTk5BS0VGRikgewogCQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR0lOTmFrRWZmIHRyaWdnZXJlZFxuIik7CiAKLQkJd3JpdGVsKERDVExfQ0dOUEluTkFLLCBoc290Zy0+cmVncyArIERDVEwpOworCQl3cml0ZWwoRENUTF9DR05QSU5OQUssIGhzb3RnLT5yZWdzICsgRENUTCk7CiAKIAkJczNjX2hzb3RnX2R1bXAoaHNvdGcpOwogCX0KQEAgLTI2NDUsMTQgKzI0NjUsMTQgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoc290Zy0+bG9jaywgZmxhZ3MpOwogCi0JZXBjdHJsICY9IH4oRHhFUENUTF9FUFR5cGVfTUFTSyB8IER4RVBDVExfTVBTX01BU0spOwotCWVwY3RybCB8PSBEeEVQQ1RMX01QUyhtcHMpOworCWVwY3RybCAmPSB+KERYRVBDVExfRVBUWVBFX01BU0sgfCBEWEVQQ1RMX01QU19NQVNLKTsKKwllcGN0cmwgfD0gRFhFUENUTF9NUFMobXBzKTsKIAogCS8qCiAJICogbWFyayB0aGUgZW5kcG9pbnQgYXMgYWN0aXZlLCBvdGhlcndpc2UgdGhlIGNvcmUgbWF5IGlnbm9yZQogCSAqIHRyYW5zYWN0aW9ucyBlbnRpcmVseSBmb3IgdGhpcyBlbmRwb2ludAogCSAqLwotCWVwY3RybCB8PSBEeEVQQ1RMX1VTQkFjdEVwOworCWVwY3RybCB8PSBEWEVQQ1RMX1VTQkFDVEVQOwogCiAJLyoKIAkgKiBzZXQgdGhlIE5BSyBzdGF0dXMgb24gdGhlIGVuZHBvaW50LCBvdGhlcndpc2Ugd2UgbWlnaHQgdHJ5IGFuZApAQCAtMjY2MSw3ICsyNDgxLDcgQEAKIAkgKiBzaXplIHJlZ2lzdGVyIGhhc24ndCBiZWVuIHNldC4KIAkgKi8KIAotCWVwY3RybCB8PSBEeEVQQ1RMX1NOQUs7CisJZXBjdHJsIHw9IERYRVBDVExfU05BSzsKIAogCS8qIHVwZGF0ZSB0aGUgZW5kcG9pbnQgc3RhdGUgKi8KIAlzM2NfaHNvdGdfc2V0X2VwX21heHBhY2tldChoc290ZywgaHNfZXAtPmluZGV4LCBtcHMpOwpAQCAtMjY3NywxNSArMjQ5NywxNSBAQAogCiAJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKLQkJZXBjdHJsIHw9IER4RVBDVExfRVBUeXBlX0lzbzsKLQkJZXBjdHJsIHw9IER4RVBDVExfU2V0RXZlbkZyOworCQllcGN0cmwgfD0gRFhFUENUTF9FUFRZUEVfSVNPOworCQllcGN0cmwgfD0gRFhFUENUTF9TRVRFVkVORlI7CiAJCWhzX2VwLT5pc29jaHJvbm91cyA9IDE7CiAJCWlmIChkaXJfaW4pCiAJCQloc19lcC0+cGVyaW9kaWMgPSAxOwogCQlicmVhazsKIAogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKLQkJZXBjdHJsIHw9IER4RVBDVExfRVBUeXBlX0J1bGs7CisJCWVwY3RybCB8PSBEWEVQQ1RMX0VQVFlQRV9CVUxLOwogCQlicmVhazsKIAogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgpAQCAtMjY5OCwxNCArMjUxOCwxNCBAQAogCQkJICovCiAKIAkJCWhzX2VwLT5wZXJpb2RpYyA9IDE7Ci0JCQllcGN0cmwgfD0gRHhFUENUTF9UeEZOdW0oaW5kZXgpOworCQkJZXBjdHJsIHw9IERYRVBDVExfVFhGTlVNKGluZGV4KTsKIAkJfQogCi0JCWVwY3RybCB8PSBEeEVQQ1RMX0VQVHlwZV9JbnR0ZXJ1cHQ7CisJCWVwY3RybCB8PSBEWEVQQ1RMX0VQVFlQRV9JTlRFUlJVUFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgotCQllcGN0cmwgfD0gRHhFUENUTF9FUFR5cGVfQ29udHJvbDsKKwkJZXBjdHJsIHw9IERYRVBDVExfRVBUWVBFX0NPTlRST0w7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcxNCwxMSArMjUzNCwxMSBAQAogCSAqIGEgdW5pcXVlIHR4LWZpZm8gZXZlbiBpZiBpdCBpcyBub24tcGVyaW9kaWMuCiAJICovCiAJaWYgKGRpcl9pbiAmJiBoc290Zy0+ZGVkaWNhdGVkX2ZpZm9zKQotCQllcGN0cmwgfD0gRHhFUENUTF9UeEZOdW0oaW5kZXgpOworCQllcGN0cmwgfD0gRFhFUENUTF9UWEZOVU0oaW5kZXgpOwogCiAJLyogZm9yIG5vbiBjb250cm9sIGVuZHBvaW50cywgc2V0IFBJRCB0byBEMCAqLwogCWlmIChpbmRleCkKLQkJZXBjdHJsIHw9IER4RVBDVExfU2V0RDBQSUQ7CisJCWVwY3RybCB8PSBEWEVQQ1RMX1NFVEQwUElEOwogCiAJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IHdyaXRlIER4RVBDVEw9MHglMDh4XG4iLAogCQlfX2Z1bmNfXywgZXBjdHJsKTsKQEAgLTI3NjMsOSArMjU4Myw5IEBACiAKIAogCWN0cmwgPSByZWFkbChoc290Zy0+cmVncyArIGVwY3RybF9yZWcpOwotCWN0cmwgJj0gfkR4RVBDVExfRVBFbmE7Ci0JY3RybCAmPSB+RHhFUENUTF9VU0JBY3RFcDsKLQljdHJsIHw9IER4RVBDVExfU05BSzsKKwljdHJsICY9IH5EWEVQQ1RMX0VQRU5BOworCWN0cmwgJj0gfkRYRVBDVExfVVNCQUNURVA7CisJY3RybCB8PSBEWEVQQ1RMX1NOQUs7CiAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogRHhFUENUTD0weCUwOHhcbiIsIF9fZnVuY19fLCBjdHJsKTsKIAl3cml0ZWwoY3RybCwgaHNvdGctPnJlZ3MgKyBlcGN0cmxfcmVnKTsKQEAgLTI4NTIsMTUgKzI2NzIsMTUgQEAKIAllcGN0bCA9IHJlYWRsKGhzLT5yZWdzICsgZXByZWcpOwogCiAJaWYgKHZhbHVlKSB7Ci0JCWVwY3RsIHw9IER4RVBDVExfU3RhbGwgKyBEeEVQQ1RMX1NOQUs7Ci0JCWlmIChlcGN0bCAmIER4RVBDVExfRVBFbmEpCi0JCQllcGN0bCB8PSBEeEVQQ1RMX0VQRGlzOworCQllcGN0bCB8PSBEWEVQQ1RMX1NUQUxMICsgRFhFUENUTF9TTkFLOworCQlpZiAoZXBjdGwgJiBEWEVQQ1RMX0VQRU5BKQorCQkJZXBjdGwgfD0gRFhFUENUTF9FUERJUzsKIAl9IGVsc2UgewotCQllcGN0bCAmPSB+RHhFUENUTF9TdGFsbDsKLQkJeGZlcnR5cGUgPSBlcGN0bCAmIER4RVBDVExfRVBUeXBlX01BU0s7Ci0JCWlmICh4ZmVydHlwZSA9PSBEeEVQQ1RMX0VQVHlwZV9CdWxrIHx8Ci0JCQl4ZmVydHlwZSA9PSBEeEVQQ1RMX0VQVHlwZV9JbnR0ZXJ1cHQpCi0JCQkJZXBjdGwgfD0gRHhFUENUTF9TZXREMFBJRDsKKwkJZXBjdGwgJj0gfkRYRVBDVExfU1RBTEw7CisJCXhmZXJ0eXBlID0gZXBjdGwgJiBEWEVQQ1RMX0VQVFlQRV9NQVNLOworCQlpZiAoeGZlcnR5cGUgPT0gRFhFUENUTF9FUFRZUEVfQlVMSyB8fAorCQkJeGZlcnR5cGUgPT0gRFhFUENUTF9FUFRZUEVfSU5URVJSVVBUKQorCQkJCWVwY3RsIHw9IERYRVBDVExfU0VURDBQSUQ7CiAJfQogCiAJd3JpdGVsKGVwY3RsLCBocy0+cmVncyArIGVwcmVnKTsKQEAgLTI4NjksMTMgKzI2ODksMTMgQEAKIAllcGN0bCA9IHJlYWRsKGhzLT5yZWdzICsgZXByZWcpOwogCiAJaWYgKHZhbHVlKQotCQllcGN0bCB8PSBEeEVQQ1RMX1N0YWxsOworCQllcGN0bCB8PSBEWEVQQ1RMX1NUQUxMOwogCWVsc2UgewotCQllcGN0bCAmPSB+RHhFUENUTF9TdGFsbDsKLQkJeGZlcnR5cGUgPSBlcGN0bCAmIER4RVBDVExfRVBUeXBlX01BU0s7Ci0JCWlmICh4ZmVydHlwZSA9PSBEeEVQQ1RMX0VQVHlwZV9CdWxrIHx8Ci0JCQl4ZmVydHlwZSA9PSBEeEVQQ1RMX0VQVHlwZV9JbnR0ZXJ1cHQpCi0JCQkJZXBjdGwgfD0gRHhFUENUTF9TZXREMFBJRDsKKwkJZXBjdGwgJj0gfkRYRVBDVExfU1RBTEw7CisJCXhmZXJ0eXBlID0gZXBjdGwgJiBEWEVQQ1RMX0VQVFlQRV9NQVNLOworCQlpZiAoeGZlcnR5cGUgPT0gRFhFUENUTF9FUFRZUEVfQlVMSyB8fAorCQkJeGZlcnR5cGUgPT0gRFhFUENUTF9FUFRZUEVfSU5URVJSVVBUKQorCQkJCWVwY3RsIHw9IERYRVBDVExfU0VURDBQSUQ7CiAJfQogCiAJd3JpdGVsKGVwY3RsLCBocy0+cmVncyArIGVwcmVnKTsKQEAgLTI5NjUsMjIgKzI3ODUsMjIgQEAKIHsKIAkvKiB1bm1hc2sgc3Vic2V0IG9mIGVuZHBvaW50IGludGVycnVwdHMgKi8KIAotCXdyaXRlbChESUVQTVNLX1RpbWVPVVRNc2sgfCBESUVQTVNLX0FIQkVyck1zayB8Ci0JICAgICAgIERJRVBNU0tfRVBEaXNibGRNc2sgfCBESUVQTVNLX1hmZXJDb21wbE1zaywKLQkgICAgICAgaHNvdGctPnJlZ3MgKyBESUVQTVNLKTsKKwl3cml0ZWwoRElFUE1TS19USU1FT1VUTVNLIHwgRElFUE1TS19BSEJFUlJNU0sgfAorCQlESUVQTVNLX0VQRElTQkxETVNLIHwgRElFUE1TS19YRkVSQ09NUExNU0ssCisJCWhzb3RnLT5yZWdzICsgRElFUE1TSyk7CiAKLQl3cml0ZWwoRE9FUE1TS19TZXR1cE1zayB8IERPRVBNU0tfQUhCRXJyTXNrIHwKLQkgICAgICAgRE9FUE1TS19FUERpc2JsZE1zayB8IERPRVBNU0tfWGZlckNvbXBsTXNrLAotCSAgICAgICBoc290Zy0+cmVncyArIERPRVBNU0spOworCXdyaXRlbChET0VQTVNLX1NFVFVQTVNLIHwgRE9FUE1TS19BSEJFUlJNU0sgfAorCQlET0VQTVNLX0VQRElTQkxETVNLIHwgRE9FUE1TS19YRkVSQ09NUExNU0ssCisJCWhzb3RnLT5yZWdzICsgRE9FUE1TSyk7CiAKIAl3cml0ZWwoMCwgaHNvdGctPnJlZ3MgKyBEQUlOVE1TSyk7CiAKIAkvKiBCZSBpbiBkaXNjb25uZWN0ZWQgc3RhdGUgdW50aWwgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQgKi8KLQlfX29ycjMyKGhzb3RnLT5yZWdzICsgRENUTCwgRENUTF9TZnREaXNjb24pOworCV9fb3JyMzIoaHNvdGctPnJlZ3MgKyBEQ1RMLCBEQ1RMX1NGVERJU0NPTik7CiAKIAlpZiAoMCkgewogCQkvKiBwb3N0IGdsb2JhbCBuYWsgdW50aWwgd2UncmUgcmVhZHkgKi8KLQkJd3JpdGVsKERDVExfU0dOUEluTkFLIHwgRENUTF9TR09VVE5haywKKwkJd3JpdGVsKERDVExfU0dOUElOTkFLIHwgRENUTF9TR09VVE5BSywKIAkJICAgICAgIGhzb3RnLT5yZWdzICsgRENUTCk7CiAJfQogCkBAIC0yOTkzLDEwICsyODEzLDEwIEBACiAJczNjX2hzb3RnX2luaXRfZmlmbyhoc290Zyk7CiAKIAkvKiBzZXQgdGhlIFBMTCBvbiwgcmVtb3ZlIHRoZSBITlAvU1JQIGFuZCBzZXQgdGhlIFBIWSAqLwotCXdyaXRlbChHVVNCQ0ZHX1BIWUlmMTYgfCBHVVNCQ0ZHX1RPdXRDYWwoNykgfCAoMHg1IDw8IDEwKSwKKwl3cml0ZWwoR1VTQkNGR19QSFlJRjE2IHwgR1VTQkNGR19UT1VUQ0FMKDcpIHwgKDB4NSA8PCAxMCksCiAJICAgICAgIGhzb3RnLT5yZWdzICsgR1VTQkNGRyk7CiAKLQl3cml0ZWwodXNpbmdfZG1hKGhzb3RnKSA/IEdBSEJDRkdfRE1BRW4gOiAweDAsCisJd3JpdGVsKHVzaW5nX2RtYShoc290ZykgPyBHQUhCQ0ZHX0RNQV9FTiA6IDB4MCwKIAkgICAgICAgaHNvdGctPnJlZ3MgKyBHQUhCQ0ZHKTsKIH0KIApAQCAtMzE4Nyw4ICszMDA3LDggQEAKIAkgKiBjb2RlIGlzIGNoYW5nZWQgdG8gbWFrZSBlYWNoIGVuZHBvaW50J3MgZGlyZWN0aW9uIGNoYW5nZWFibGUuCiAJICovCiAKLQlwdHhmaWZvID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBEUFRYRlNJWm4oZXBudW0pKTsKLQloc19lcC0+Zmlmb19zaXplID0gRFBUWEZTSVpuX0RQVHhGU2l6ZV9HRVQocHR4ZmlmbykgKiA0OworCXB0eGZpZm8gPSByZWFkbChoc290Zy0+cmVncyArIERQVFhGU0laTihlcG51bSkpOworCWhzX2VwLT5maWZvX3NpemUgPSBGSUZPU0laRV9ERVBUSF9HRVQocHR4ZmlmbykgKiA0OwogCiAJLyoKIAkgKiBpZiB3ZSdyZSB1c2luZyBkbWEsIHdlIG5lZWQgdG8gc2V0IHRoZSBuZXh0LWVuZHBvaW50IHBvaW50ZXIKQEAgLTMxOTYsNyArMzAxNiw3IEBACiAJICovCiAKIAlpZiAodXNpbmdfZG1hKGhzb3RnKSkgewotCQl1MzIgbmV4dCA9IER4RVBDVExfTmV4dEVwKChlcG51bSArIDEpICUgMTUpOworCQl1MzIgbmV4dCA9IERYRVBDVExfTkVYVEVQKChlcG51bSArIDEpICUgMTUpOwogCQl3cml0ZWwobmV4dCwgaHNvdGctPnJlZ3MgKyBESUVQQ1RMKGVwbnVtKSk7CiAJCXdyaXRlbChuZXh0LCBoc290Zy0+cmVncyArIERPRVBDVEwoZXBudW0pKTsKIAl9CkBAIC0zMjUwLDEwICszMDcwLDEwIEBACiAJLyogc2hvdyBwZXJpb2RpYyBmaWZvIHNldHRpbmdzICovCiAKIAlmb3IgKGlkeCA9IDE7IGlkeCA8PSAxNTsgaWR4KyspIHsKLQkJdmFsID0gcmVhZGwocmVncyArIERQVFhGU0labihpZHgpKTsKKwkJdmFsID0gcmVhZGwocmVncyArIERQVFhGU0laTihpZHgpKTsKIAkJZGV2X2luZm8oZGV2LCAiRFBUeFslZF0gRlNpemU9JWQsIFN0QWRkcj0weCUwOHhcbiIsIGlkeCwKLQkJCSB2YWwgPj4gRFBUWEZTSVpuX0RQVHhGU2l6ZV9TSElGVCwKLQkJCSB2YWwgJiBEUFRYRlNJWm5fRFBUeEZTdEFkZHJfTUFTSyk7CisJCQkgdmFsID4+IEZJRk9TSVpFX0RFUFRIX1NISUZULAorCQkJIHZhbCAmIEZJRk9TSVpFX1NUQVJUQUREUl9NQVNLKTsKIAl9CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDE1OyBpZHgrKykgewpAQCAtMzM2OCwxNyArMzE4OCwxNyBAQAogCiAJdmFsID0gcmVhZGwocmVncyArIEdOUFRYRlNJWik7CiAJc2VxX3ByaW50ZihzZXEsICJOUFRYRklGTzogU2l6ZSAlZCwgU3RhcnQgMHglMDh4XG4iLAotCQkgICB2YWwgPj4gR05QVFhGU0laX05QVHhGRGVwX1NISUZULAotCQkgICB2YWwgJiBHTlBUWEZTSVpfTlBUeEZTdEFkZHJfTUFTSyk7CisJCSAgIHZhbCA+PiBGSUZPU0laRV9ERVBUSF9TSElGVCwKKwkJICAgdmFsICYgRklGT1NJWkVfREVQVEhfTUFTSyk7CiAKIAlzZXFfcHV0cyhzZXEsICJcblBlcmlvZGljIFRYRklGT3M6XG4iKTsKIAogCWZvciAoaWR4ID0gMTsgaWR4IDw9IDE1OyBpZHgrKykgewotCQl2YWwgPSByZWFkbChyZWdzICsgRFBUWEZTSVpuKGlkeCkpOworCQl2YWwgPSByZWFkbChyZWdzICsgRFBUWEZTSVpOKGlkeCkpOwogCiAJCXNlcV9wcmludGYoc2VxLCAiXHREUFRYRklGTyUyZDogU2l6ZSAlZCwgU3RhcnQgMHglMDh4XG4iLCBpZHgsCi0JCQkgICB2YWwgPj4gRFBUWEZTSVpuX0RQVHhGU2l6ZV9TSElGVCwKLQkJCSAgIHZhbCAmIERQVFhGU0labl9EUFR4RlN0QWRkcl9NQVNLKTsKKwkJCSAgIHZhbCA+PiBGSUZPU0laRV9ERVBUSF9TSElGVCwKKwkJCSAgIHZhbCAmIEZJRk9TSVpFX1NUQVJUQUREUl9NQVNLKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM2NjIsMTQgKzM0ODIsMTQgQEAKIAl9CiAKIAkvKiBTZXQgZGVmYXVsdCBVVE1JIHdpZHRoICovCi0JaHNvdGctPnBoeWlmID0gR1VTQkNGR19QSFlJZjE2OworCWhzb3RnLT5waHlpZiA9IEdVU0JDRkdfUEhZSUYxNjsKIAogCS8qCiAJICogSWYgdXNpbmcgdGhlIGdlbmVyaWMgUEhZIGZyYW1ld29yaywgY2hlY2sgaWYgdGhlIFBIWSBidXMKIAkgKiB3aWR0aCBpcyA4LWJpdCBhbmQgc2V0IHRoZSBwaHlpZiBhcHByb3ByaWF0ZWx5LgogCSAqLwogCWlmIChoc290Zy0+cGh5ICYmIChwaHlfZ2V0X2J1c193aWR0aChwaHkpID09IDgpKQotCQloc290Zy0+cGh5aWYgPSBHVVNCQ0ZHX1BIWUlmODsKKwkJaHNvdGctPnBoeWlmID0gR1VTQkNGR19QSFlJRjg7CiAKIAlpZiAoaHNvdGctPnBoeSkKIAkJcGh5X2luaXQoaHNvdGctPnBoeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2h3LmggYi9kcml2ZXJzL3VzYi9kd2MyL2h3LmgKaW5kZXggOWM5MmEzYy4uNTEyNDhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMi9ody5oCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvaHcuaApAQCAtMTA5LDYgKzEwOSw3IEBACiAjZGVmaW5lIEdVU0JDRkdfRlNJTlRGCQkJKDEgPDwgNSkKICNkZWZpbmUgR1VTQkNGR19VTFBJX1VUTUlfU0VMCQkoMSA8PCA0KQogI2RlZmluZSBHVVNCQ0ZHX1BIWUlGMTYJCQkoMSA8PCAzKQorI2RlZmluZSBHVVNCQ0ZHX1BIWUlGOAkJCSgwIDw8IDMpCiAjZGVmaW5lIEdVU0JDRkdfVE9VVENBTF9NQVNLCQkoMHg3IDw8IDApCiAjZGVmaW5lIEdVU0JDRkdfVE9VVENBTF9TSElGVAkJMAogI2RlZmluZSBHVVNCQ0ZHX1RPVVRDQUxfTElNSVQJCTB4NwpAQCAtNDAzLDYgKzQwNCw3IEBACiAjZGVmaW5lIEZJRk9TSVpFX0RFUFRIX1NISUZUCQkxNgogI2RlZmluZSBGSUZPU0laRV9TVEFSVEFERFJfTUFTSwkJKDB4ZmZmZiA8PCAwKQogI2RlZmluZSBGSUZPU0laRV9TVEFSVEFERFJfU0hJRlQJMAorI2RlZmluZSBGSUZPU0laRV9ERVBUSF9HRVQoX3gpCQkoKChfeCkgPj4gMTYpICYgMHhmZmZmKQogCiAvKiBEZXZpY2UgbW9kZSByZWdpc3RlcnMgKi8KIApAQCAtNTE5LDExICs1MjEsMTEgQEAKICNkZWZpbmUgRFhFUENUTF9TVEFMTAkJCSgxIDw8IDIxKQogI2RlZmluZSBEWEVQQ1RMX1NOUAkJCSgxIDw8IDIwKQogI2RlZmluZSBEWEVQQ1RMX0VQVFlQRV9NQVNLCQkoMHgzIDw8IDE4KQotI2RlZmluZSBEWEVQQ1RMX0VQVFlQRV9TSElGVAkJMTgKLSNkZWZpbmUgRFhFUENUTF9FUFRZUEVfQ09OVFJPTAkJMAotI2RlZmluZSBEWEVQQ1RMX0VQVFlQRV9JU08JCTEKLSNkZWZpbmUgRFhFUENUTF9FUFRZUEVfQlVMSwkJMgotI2RlZmluZSBEWEVQQ1RMX0VQVFlQRV9JTlRURVJVUFQJMworI2RlZmluZSBEWEVQQ1RMX0VQVFlQRV9DT05UUk9MCQkoMHgwIDw8IDE4KQorI2RlZmluZSBEWEVQQ1RMX0VQVFlQRV9JU08JCSgweDEgPDwgMTgpCisjZGVmaW5lIERYRVBDVExfRVBUWVBFX0JVTEsJCSgweDIgPDwgMTgpCisjZGVmaW5lIERYRVBDVExfRVBUWVBFX0lOVEVSUlVQVAkoMHgzIDw8IDE4KQorCiAjZGVmaW5lIERYRVBDVExfTkFLU1RTCQkJKDEgPDwgMTcpCiAjZGVmaW5lIERYRVBDVExfRFBJRAkJCSgxIDw8IDE2KQogI2RlZmluZSBEWEVQQ1RMX0VPRlJOVU0JCQkoMSA8PCAxNikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzIvcGxhdGZvcm0uYyBiL2RyaXZlcnMvdXNiL2R3YzIvcGxhdGZvcm0uYwppbmRleCBlYWJhNTQ3Li5hMTBlN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMi9wbGF0Zm9ybS5jCkBAIC0xMzQsNiArMTM0LDEyIEBACiAJCS8qIERlZmF1bHQgYWxsIHBhcmFtcyB0byBhdXRvZGV0ZWN0ICovCiAJCWR3YzJfc2V0X2FsbF9wYXJhbXMoJmRlZnBhcmFtcywgLTEpOwogCQlwYXJhbXMgPSAmZGVmcGFyYW1zOworCisJCS8qCisJCSAqIERpc2FibGUgZGVzY3JpcHRvciBkbWEgbW9kZSBieSBkZWZhdWx0IGFzIHRoZSBIVyBjYW4gc3VwcG9ydAorCQkgKiBpdCwgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQgZm9yIFNQTElUIHRyYW5zYWN0aW9ucy4KKwkJICovCisJCWRlZnBhcmFtcy5kbWFfZGVzY19lbmFibGUgPSAwOwogCX0KIAogCWhzb3RnID0gZGV2bV9remFsbG9jKCZkZXYtPmRldiwgc2l6ZW9mKCpoc290ZyksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnIGIvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCmluZGV4IGUyYzczMGYuLjhlYjk5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogY29uZmlnIFVTQl9EV0MzX09NQVAKIAl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgT01BUDUgYW5kIHNpbWlsYXIgUGxhdGZvcm1zIgotCWRlcGVuZHMgb24gRVhUQ09OCisJZGVwZW5kcyBvbiBFWFRDT04gJiYgKEFSQ0hfT01BUDJQTFVTIHx8IENPTVBJTEVfVEVTVCkKIAlkZWZhdWx0IFVTQl9EV0MzCiAJaGVscAogCSAgU29tZSBwbGF0Zm9ybXMgZnJvbSBUZXhhcyBJbnN0cnVtZW50cyBsaWtlIE9NQVA1LCBEUkE3eHh4IGFuZApAQCAtNTQsNiArNTQsNyBAQAogCiBjb25maWcgVVNCX0RXQzNfRVhZTk9TCiAJdHJpc3RhdGUgIlNhbXN1bmcgRXh5bm9zIFBsYXRmb3JtIgorCWRlcGVuZHMgb24gQVJDSF9FWFlOT1MgfHwgQ09NUElMRV9URVNUCiAJZGVmYXVsdCBVU0JfRFdDMwogCWhlbHAKIAkgIFJlY2VudCBFeHlub3M1IFNvQ3Mgc2hpcCB3aXRoIG9uZSBEZXNpZ25XYXJlIENvcmUgVVNCMyBJUCBpbnNpZGUsCkBAIC03Miw2ICs3Myw3IEBACiAKIGNvbmZpZyBVU0JfRFdDM19LRVlTVE9ORQogCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBLZXlzdG9uZTIgUGxhdGZvcm1zIgorCWRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1QKIAlkZWZhdWx0IFVTQl9EV0MzCiAJaGVscAogCSAgU3VwcG9ydCBvZiBVU0IyLzMgZnVuY3Rpb25hbGl0eSBpbiBUSSBLZXlzdG9uZTIgcGxhdGZvcm1zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYwppbmRleCAxMGFhYWFlLi5lYjY5ZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYwpAQCAtNDg2LDcwICs0ODYsMjAgQEAKIAlwaHlfZXhpdChkd2MtPnVzYjNfZ2VuZXJpY19waHkpOwogfQogCi0jZGVmaW5lIERXQzNfQUxJR05fTUFTSwkJKDE2IC0gMSkKLQotc3RhdGljIGludCBkd2MzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGR3YzNfY29yZV9nZXRfcGh5KHN0cnVjdCBkd2MzICpkd2MpCiB7Ci0Jc3RydWN0IGRldmljZQkJKmRldiA9ICZwZGV2LT5kZXY7Ci0Jc3RydWN0IGR3YzNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CisJc3RydWN0IGRldmljZQkJKmRldiA9IGR3Yy0+ZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbm9kZSA9IGRldi0+b2Zfbm9kZTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7Ci0Jc3RydWN0IGR3YzMJCSpkd2M7Ci0KLQlpbnQJCQlyZXQgPSAtRU5PTUVNOwotCi0Jdm9pZCBfX2lvbWVtCQkqcmVnczsKLQl2b2lkCQkJKm1lbTsKLQotCW1lbSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHdjKSArIERXQzNfQUxJR05fTUFTSywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZW0pIHsKLQkJZGV2X2VycihkZXYsICJub3QgZW5vdWdoIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlkd2MgPSBQVFJfQUxJR04obWVtLCBEV0MzX0FMSUdOX01BU0sgKyAxKTsKLQlkd2MtPm1lbSA9IG1lbTsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycihkZXYsICJtaXNzaW5nIElSUVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlkd2MtPnhoY2lfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gcmVzLT5zdGFydDsKLQlkd2MtPnhoY2lfcmVzb3VyY2VzWzFdLmVuZCA9IHJlcy0+ZW5kOwotCWR3Yy0+eGhjaV9yZXNvdXJjZXNbMV0uZmxhZ3MgPSByZXMtPmZsYWdzOwotCWR3Yy0+eGhjaV9yZXNvdXJjZXNbMV0ubmFtZSA9IHJlcy0+bmFtZTsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycihkZXYsICJtaXNzaW5nIG1lbW9yeSByZXNvdXJjZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlpbnQgcmV0OwogCiAJaWYgKG5vZGUpIHsKLQkJZHdjLT5tYXhpbXVtX3NwZWVkID0gb2ZfdXNiX2dldF9tYXhpbXVtX3NwZWVkKG5vZGUpOwotCiAJCWR3Yy0+dXNiMl9waHkgPSBkZXZtX3VzYl9nZXRfcGh5X2J5X3BoYW5kbGUoZGV2LCAidXNiLXBoeSIsIDApOwogCQlkd2MtPnVzYjNfcGh5ID0gZGV2bV91c2JfZ2V0X3BoeV9ieV9waGFuZGxlKGRldiwgInVzYi1waHkiLCAxKTsKLQotCQlkd2MtPm5lZWRzX2ZpZm9fcmVzaXplID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ0eC1maWZvLXJlc2l6ZSIpOwotCQlkd2MtPmRyX21vZGUgPSBvZl91c2JfZ2V0X2RyX21vZGUobm9kZSk7Ci0JfSBlbHNlIGlmIChwZGF0YSkgewotCQlkd2MtPm1heGltdW1fc3BlZWQgPSBwZGF0YS0+bWF4aW11bV9zcGVlZDsKLQotCQlkd2MtPnVzYjJfcGh5ID0gZGV2bV91c2JfZ2V0X3BoeShkZXYsIFVTQl9QSFlfVFlQRV9VU0IyKTsKLQkJZHdjLT51c2IzX3BoeSA9IGRldm1fdXNiX2dldF9waHkoZGV2LCBVU0JfUEhZX1RZUEVfVVNCMyk7Ci0KLQkJZHdjLT5uZWVkc19maWZvX3Jlc2l6ZSA9IHBkYXRhLT50eF9maWZvX3Jlc2l6ZTsKLQkJZHdjLT5kcl9tb2RlID0gcGRhdGEtPmRyX21vZGU7CiAJfSBlbHNlIHsKIAkJZHdjLT51c2IyX3BoeSA9IGRldm1fdXNiX2dldF9waHkoZGV2LCBVU0JfUEhZX1RZUEVfVVNCMik7CiAJCWR3Yy0+dXNiM19waHkgPSBkZXZtX3VzYl9nZXRfcGh5KGRldiwgVVNCX1BIWV9UWVBFX1VTQjMpOwogCX0KIAotCS8qIGRlZmF1bHQgdG8gc3VwZXJzcGVlZCBpZiBubyBtYXhpbXVtX3NwZWVkIHBhc3NlZCAqLwotCWlmIChkd2MtPm1heGltdW1fc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCi0JCWR3Yy0+bWF4aW11bV9zcGVlZCA9IFVTQl9TUEVFRF9TVVBFUjsKLQogCWlmIChJU19FUlIoZHdjLT51c2IyX3BoeSkpIHsKIAkJcmV0ID0gUFRSX0VSUihkd2MtPnVzYjJfcGh5KTsKIAkJaWYgKHJldCA9PSAtRU5YSU8gfHwgcmV0ID09IC1FTk9ERVYpIHsKQEAgLTYwMCw2ICs1NTAsMTMyIEBACiAJCX0KIAl9CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkd2MzX2NvcmVfaW5pdF9tb2RlKHN0cnVjdCBkd2MzICpkd2MpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHdjLT5kZXY7CisJaW50IHJldDsKKworCXN3aXRjaCAoZHdjLT5kcl9tb2RlKSB7CisJY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOgorCQlkd2MzX3NldF9tb2RlKGR3YywgRFdDM19HQ1RMX1BSVENBUF9ERVZJQ0UpOworCQlyZXQgPSBkd2MzX2dhZGdldF9pbml0KGR3Yyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZ2FkZ2V0XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfRFJfTU9ERV9IT1NUOgorCQlkd2MzX3NldF9tb2RlKGR3YywgRFdDM19HQ1RMX1BSVENBUF9IT1NUKTsKKwkJcmV0ID0gZHdjM19ob3N0X2luaXQoZHdjKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBob3N0XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfRFJfTU9ERV9PVEc6CisJCWR3YzNfc2V0X21vZGUoZHdjLCBEV0MzX0dDVExfUFJUQ0FQX09URyk7CisJCXJldCA9IGR3YzNfaG9zdF9pbml0KGR3Yyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgaG9zdFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gZHdjM19nYWRnZXRfaW5pdChkd2MpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGdhZGdldFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiVW5zdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gJWRcbiIsIGR3Yy0+ZHJfbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkd2MzX2NvcmVfZXhpdF9tb2RlKHN0cnVjdCBkd2MzICpkd2MpCit7CisJc3dpdGNoIChkd2MtPmRyX21vZGUpIHsKKwljYXNlIFVTQl9EUl9NT0RFX1BFUklQSEVSQUw6CisJCWR3YzNfZ2FkZ2V0X2V4aXQoZHdjKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRFJfTU9ERV9IT1NUOgorCQlkd2MzX2hvc3RfZXhpdChkd2MpOworCQlicmVhazsKKwljYXNlIFVTQl9EUl9NT0RFX09URzoKKwkJZHdjM19ob3N0X2V4aXQoZHdjKTsKKwkJZHdjM19nYWRnZXRfZXhpdChkd2MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBkbyBub3RoaW5nICovCisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBEV0MzX0FMSUdOX01BU0sJCSgxNiAtIDEpCisKK3N0YXRpYyBpbnQgZHdjM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkd2MzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisJc3RydWN0IGR3YzMJCSpkd2M7CisKKwlpbnQJCQlyZXQ7CisKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXZvaWQJCQkqbWVtOworCisJbWVtID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkd2MpICsgRFdDM19BTElHTl9NQVNLLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKGRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWR3YyA9IFBUUl9BTElHTihtZW0sIERXQzNfQUxJR05fTUFTSyArIDEpOworCWR3Yy0+bWVtID0gbWVtOworCWR3Yy0+ZGV2ID0gZGV2OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgSVJRXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWR3Yy0+eGhjaV9yZXNvdXJjZXNbMV0uc3RhcnQgPSByZXMtPnN0YXJ0OworCWR3Yy0+eGhjaV9yZXNvdXJjZXNbMV0uZW5kID0gcmVzLT5lbmQ7CisJZHdjLT54aGNpX3Jlc291cmNlc1sxXS5mbGFncyA9IHJlcy0+ZmxhZ3M7CisJZHdjLT54aGNpX3Jlc291cmNlc1sxXS5uYW1lID0gcmVzLT5uYW1lOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG5vZGUpIHsKKwkJZHdjLT5tYXhpbXVtX3NwZWVkID0gb2ZfdXNiX2dldF9tYXhpbXVtX3NwZWVkKG5vZGUpOworCisJCWR3Yy0+bmVlZHNfZmlmb19yZXNpemUgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInR4LWZpZm8tcmVzaXplIik7CisJCWR3Yy0+ZHJfbW9kZSA9IG9mX3VzYl9nZXRfZHJfbW9kZShub2RlKTsKKwl9IGVsc2UgaWYgKHBkYXRhKSB7CisJCWR3Yy0+bWF4aW11bV9zcGVlZCA9IHBkYXRhLT5tYXhpbXVtX3NwZWVkOworCisJCWR3Yy0+bmVlZHNfZmlmb19yZXNpemUgPSBwZGF0YS0+dHhfZmlmb19yZXNpemU7CisJCWR3Yy0+ZHJfbW9kZSA9IHBkYXRhLT5kcl9tb2RlOworCX0KKworCS8qIGRlZmF1bHQgdG8gc3VwZXJzcGVlZCBpZiBubyBtYXhpbXVtX3NwZWVkIHBhc3NlZCAqLworCWlmIChkd2MtPm1heGltdW1fc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWR3Yy0+bWF4aW11bV9zcGVlZCA9IFVTQl9TUEVFRF9TVVBFUjsKKworCXJldCA9IGR3YzNfY29yZV9nZXRfcGh5KGR3Yyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWR3Yy0+eGhjaV9yZXNvdXJjZXNbMF0uc3RhcnQgPSByZXMtPnN0YXJ0OwogCWR3Yy0+eGhjaV9yZXNvdXJjZXNbMF0uZW5kID0gZHdjLT54aGNpX3Jlc291cmNlc1swXS5zdGFydCArCiAJCQkJCURXQzNfWEhDSV9SRUdTX0VORDsKQEAgLTYyMSw3ICs2OTcsNiBAQAogCiAJZHdjLT5yZWdzCT0gcmVnczsKIAlkd2MtPnJlZ3Nfc2l6ZQk9IHJlc291cmNlX3NpemUocmVzKTsKLQlkd2MtPmRldgk9IGRldjsKIAogCWRldi0+ZG1hX21hc2sJPSBkZXYtPnBhcmVudC0+ZG1hX21hc2s7CiAJZGV2LT5kbWFfcGFybXMJPSBkZXYtPnBhcmVudC0+ZG1hX3Bhcm1zOwpAQCAtNjcwLDQxICs3NDUsOSBAQAogCQlnb3RvIGVycl91c2IzcGh5X3Bvd2VyOwogCX0KIAotCXN3aXRjaCAoZHdjLT5kcl9tb2RlKSB7Ci0JY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOgotCQlkd2MzX3NldF9tb2RlKGR3YywgRFdDM19HQ1RMX1BSVENBUF9ERVZJQ0UpOwotCQlyZXQgPSBkd2MzX2dhZGdldF9pbml0KGR3Yyk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZ2FkZ2V0XG4iKTsKLQkJCWdvdG8gZXJyMjsKLQkJfQotCQlicmVhazsKLQljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6Ci0JCWR3YzNfc2V0X21vZGUoZHdjLCBEV0MzX0dDVExfUFJUQ0FQX0hPU1QpOwotCQlyZXQgPSBkd2MzX2hvc3RfaW5pdChkd2MpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGhvc3RcbiIpOwotCQkJZ290byBlcnIyOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVVNCX0RSX01PREVfT1RHOgotCQlkd2MzX3NldF9tb2RlKGR3YywgRFdDM19HQ1RMX1BSVENBUF9PVEcpOwotCQlyZXQgPSBkd2MzX2hvc3RfaW5pdChkd2MpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGhvc3RcbiIpOwotCQkJZ290byBlcnIyOwotCQl9Ci0KLQkJcmV0ID0gZHdjM19nYWRnZXRfaW5pdChkd2MpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGdhZGdldFxuIik7Ci0JCQlnb3RvIGVycjI7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2VycihkZXYsICJVbnN1cHBvcnRlZCBtb2RlIG9mIG9wZXJhdGlvbiAlZFxuIiwgZHdjLT5kcl9tb2RlKTsKKwlyZXQgPSBkd2MzX2NvcmVfaW5pdF9tb2RlKGR3Yyk7CisJaWYgKHJldCkKIAkJZ290byBlcnIyOwotCX0KIAogCXJldCA9IGR3YzNfZGVidWdmc19pbml0KGR3Yyk7CiAJaWYgKHJldCkgewpAQCAtNzE3LDIxICs3NjAsNyBAQAogCXJldHVybiAwOwogCiBlcnIzOgotCXN3aXRjaCAoZHdjLT5kcl9tb2RlKSB7Ci0JY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOgotCQlkd2MzX2dhZGdldF9leGl0KGR3Yyk7Ci0JCWJyZWFrOwotCWNhc2UgVVNCX0RSX01PREVfSE9TVDoKLQkJZHdjM19ob3N0X2V4aXQoZHdjKTsKLQkJYnJlYWs7Ci0JY2FzZSBVU0JfRFJfTU9ERV9PVEc6Ci0JCWR3YzNfaG9zdF9leGl0KGR3Yyk7Ci0JCWR3YzNfZ2FkZ2V0X2V4aXQoZHdjKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogZG8gbm90aGluZyAqLwotCQlicmVhazsKLQl9CisJZHdjM19jb3JlX2V4aXRfbW9kZShkd2MpOwogCiBlcnIyOgogCWR3YzNfZXZlbnRfYnVmZmVyc19jbGVhbnVwKGR3Yyk7CkBAIC03NjYsMjMgKzc5NSw3IEBACiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCiAJZHdjM19kZWJ1Z2ZzX2V4aXQoZHdjKTsKLQotCXN3aXRjaCAoZHdjLT5kcl9tb2RlKSB7Ci0JY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOgotCQlkd2MzX2dhZGdldF9leGl0KGR3Yyk7Ci0JCWJyZWFrOwotCWNhc2UgVVNCX0RSX01PREVfSE9TVDoKLQkJZHdjM19ob3N0X2V4aXQoZHdjKTsKLQkJYnJlYWs7Ci0JY2FzZSBVU0JfRFJfTU9ERV9PVEc6Ci0JCWR3YzNfaG9zdF9leGl0KGR3Yyk7Ci0JCWR3YzNfZ2FkZ2V0X2V4aXQoZHdjKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogZG8gbm90aGluZyAqLwotCQlicmVhazsKLQl9Ci0KKwlkd2MzX2NvcmVfZXhpdF9tb2RlKGR3Yyk7CiAJZHdjM19ldmVudF9idWZmZXJzX2NsZWFudXAoZHdjKTsKIAlkd2MzX2ZyZWVfZXZlbnRfYnVmZmVycyhkd2MpOwogCWR3YzNfY29yZV9leGl0KGR3Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtZXh5bm9zLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtZXh5bm9zLmMKaW5kZXggMjhjOGFkNy4uZjlmYjhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMy9kd2MzLWV4eW5vcy5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1leHlub3MuYwpAQCAtMjQsOSArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiBzdHJ1Y3QgZHdjM19leHlub3MgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnVzYjJfcGh5OwpAQCAtMzQsMTcgKzM1LDE5IEBACiAJc3RydWN0IGRldmljZQkJKmRldjsKIAogCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IHJlZ3VsYXRvcgkqdmRkMzM7CisJc3RydWN0IHJlZ3VsYXRvcgkqdmRkMTA7CiB9OwogCiBzdGF0aWMgaW50IGR3YzNfZXh5bm9zX3JlZ2lzdGVyX3BoeXMoc3RydWN0IGR3YzNfZXh5bm9zICpleHlub3MpCiB7Ci0Jc3RydWN0IHVzYl9waHlfZ2VuX3hjZWl2X3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJc3RydWN0IHVzYl9waHlfZ2VuZXJpY19wbGF0Zm9ybV9kYXRhIHBkYXRhOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJaW50CQkJcmV0OwogCiAJbWVtc2V0KCZwZGF0YSwgMHgwMCwgc2l6ZW9mKHBkYXRhKSk7CiAKLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ1c2JfcGh5X2dlbl94Y2VpdiIsIFBMQVRGT1JNX0RFVklEX0FVVE8pOworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInVzYl9waHlfZ2VuZXJpYyIsIFBMQVRGT1JNX0RFVklEX0FVVE8pOwogCWlmICghcGRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTU2LDcgKzU5LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycjE7CiAKLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ1c2JfcGh5X2dlbl94Y2VpdiIsIFBMQVRGT1JNX0RFVklEX0FVVE8pOworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInVzYl9waHlfZ2VuZXJpYyIsIFBMQVRGT1JNX0RFVklEX0FVVE8pOwogCWlmICghcGRldikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjE7CkBAIC0xMDcsMTIgKzExMCwxMiBAQAogCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbm9kZSA9IGRldi0+b2Zfbm9kZTsKIAotCWludAkJCXJldCA9IC1FTk9NRU07CisJaW50CQkJcmV0OwogCiAJZXh5bm9zID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpleHlub3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWV4eW5vcykgewogCQlkZXZfZXJyKGRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKLQkJZ290byBlcnIxOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKgpAQCAtMTIyLDIxICsxMjUsMjAgQEAKIAkgKi8KIAlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIxOworCQlyZXR1cm4gcmV0OwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZXh5bm9zKTsKIAogCXJldCA9IGR3YzNfZXh5bm9zX3JlZ2lzdGVyX3BoeXMoZXh5bm9zKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgUEhZc1xuIik7Ci0JCWdvdG8gZXJyMTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAljbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAidXNiZHJkMzAiKTsKIAlpZiAoSVNfRVJSKGNsaykpIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZG4ndCBnZXQgY2xvY2tcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycjE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWV4eW5vcy0+ZGV2CT0gZGV2OwpAQCAtMTQ0LDIzICsxNDYsNDggQEAKIAogCWNsa19wcmVwYXJlX2VuYWJsZShleHlub3MtPmNsayk7CiAKKwlleHlub3MtPnZkZDMzID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInZkZDMzIik7CisJaWYgKElTX0VSUihleHlub3MtPnZkZDMzKSkgeworCQlyZXQgPSBQVFJfRVJSKGV4eW5vcy0+dmRkMzMpOworCQlnb3RvIGVycjI7CisJfQorCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZXh5bm9zLT52ZGQzMyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgVkREMzMgc3VwcGx5XG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCWV4eW5vcy0+dmRkMTAgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAidmRkMTAiKTsKKwlpZiAoSVNfRVJSKGV4eW5vcy0+dmRkMTApKSB7CisJCXJldCA9IFBUUl9FUlIoZXh5bm9zLT52ZGQxMCk7CisJCWdvdG8gZXJyMzsKKwl9CisJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShleHlub3MtPnZkZDEwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBWREQxMCBzdXBwbHlcbiIpOworCQlnb3RvIGVycjM7CisJfQorCiAJaWYgKG5vZGUpIHsKIAkJcmV0ID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUobm9kZSwgTlVMTCwgTlVMTCwgZGV2KTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGR3YzMgY29yZVxuIik7Ci0JCQlnb3RvIGVycjI7CisJCQlnb3RvIGVycjQ7CiAJCX0KIAl9IGVsc2UgewogCQlkZXZfZXJyKGRldiwgIm5vIGRldmljZSBub2RlLCBmYWlsZWQgdG8gYWRkIGR3YzMgY29yZVxuIik7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnI0OwogCX0KIAogCXJldHVybiAwOwogCitlcnI0OgorCXJlZ3VsYXRvcl9kaXNhYmxlKGV4eW5vcy0+dmRkMTApOworZXJyMzoKKwlyZWd1bGF0b3JfZGlzYWJsZShleHlub3MtPnZkZDMzKTsKIGVycjI6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7Ci1lcnIxOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE3NCw2ICsyMDEsOSBAQAogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGV4eW5vcy0+Y2xrKTsKIAorCXJlZ3VsYXRvcl9kaXNhYmxlKGV4eW5vcy0+dmRkMzMpOworCXJlZ3VsYXRvcl9kaXNhYmxlKGV4eW5vcy0+dmRkMTApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MiwxMiArMjIyLDI3IEBACiAKIAljbGtfZGlzYWJsZShleHlub3MtPmNsayk7CiAKKwlyZWd1bGF0b3JfZGlzYWJsZShleHlub3MtPnZkZDMzKTsKKwlyZWd1bGF0b3JfZGlzYWJsZShleHlub3MtPnZkZDEwKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGR3YzNfZXh5bm9zX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGR3YzNfZXh5bm9zICpleHlub3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShleHlub3MtPnZkZDMzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBWREQzMyBzdXBwbHlcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGV4eW5vcy0+dmRkMTApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIFZERDEwIHN1cHBseVxuIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJY2xrX2VuYWJsZShleHlub3MtPmNsayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1vbWFwLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtb21hcC5jCmluZGV4IDExNjBmZjQuLjRhZjRjMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLW9tYXAuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJc3RydWN0IGV4dGNvbl9kZXYJKmVkZXY7CiAJc3RydWN0IHJlZ3VsYXRvcgkqdmJ1c19yZWcgPSBOVUxMOwogCi0JaW50CQkJcmV0ID0gLUVOT01FTTsKKwlpbnQJCQlyZXQ7CiAJaW50CQkJaXJxOwogCiAJaW50CQkJdXRtaV9tb2RlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYwppbmRleCBmMzkzYzE4Li5hNjBiYWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLXBjaS5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuX3hjZWl2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oPgogCiAvKiBGSVhNRSBkZWZpbmUgdGhlc2UgaW4gPGxpbnV4L3BjaV9pZHMuaD4gKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TWU5PUFNZUwkJMHgxNmMzCkBAIC00MCwxMyArNDAsMTMgQEAKIAogc3RhdGljIGludCBkd2MzX3BjaV9yZWdpc3Rlcl9waHlzKHN0cnVjdCBkd2MzX3BjaSAqZ2x1ZSkKIHsKLQlzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXZfcGxhdGZvcm1fZGF0YSBwZGF0YTsKKwlzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljX3BsYXRmb3JtX2RhdGEgcGRhdGE7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAlpbnQJCQlyZXQ7CiAKIAltZW1zZXQoJnBkYXRhLCAweDAwLCBzaXplb2YocGRhdGEpKTsKIAotCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInVzYl9waHlfZ2VuX3hjZWl2IiwgMCk7CisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidXNiX3BoeV9nZW5lcmljIiwgMCk7CiAJaWYgKCFwZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNTgsNyArNTgsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyMTsKIAotCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInVzYl9waHlfZ2VuX3hjZWl2IiwgMSk7CisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidXNiX3BoeV9nZW5lcmljIiwgMSk7CiAJaWYgKCFwZGV2KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMTsKQEAgLTk5LDcgKzk5LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UJCXJlc1syXTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpkd2MzOwogCXN0cnVjdCBkd2MzX3BjaQkJKmdsdWU7Ci0JaW50CQkJcmV0ID0gLUVOT01FTTsKKwlpbnQJCQlyZXQ7CiAJc3RydWN0IGRldmljZQkJKmRldiA9ICZwY2ktPmRldjsKIAogCWdsdWUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmdsdWUpLCBHRlBfS0VSTkVMKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAJZ2x1ZS0+ZGV2ID0gZGV2OwogCi0JcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlyZXQgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMjcsOCArMTI3LDcgQEAKIAlkd2MzID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJkd2MzIiwgUExBVEZPUk1fREVWSURfQVVUTyk7CiAJaWYgKCFkd2MzKSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgYWxsb2NhdGUgZHdjMyBkZXZpY2VcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCW1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTsKQEAgLTE0NSw3ICsxNDQsNyBAQAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKGR3YzMsIHJlcywgQVJSQVlfU0laRShyZXMpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgYWRkIHJlc291cmNlcyB0byBkd2MzIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyMTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlwY2lfc2V0X2RydmRhdGEocGNpLCBnbHVlKTsKQEAgLTE2Nyw5ICsxNjYsNiBAQAogCiBlcnIzOgogCXBsYXRmb3JtX2RldmljZV9wdXQoZHdjMyk7Ci1lcnIxOgotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgwLDcgKzE3Niw2IEBACiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2x1ZS0+ZHdjMyk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2x1ZS0+dXNiMl9waHkpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdsdWUtPnVzYjNfcGh5KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGR3YzNfcGNpX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jIGIvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYwppbmRleCA3MDcxNWVlLi45ZDY0ZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMKQEAgLTI5OCwxMSArMjk4LDc2IEBACiAJfQogfQogCitzdGF0aWMgY29uc3QgY2hhciAqZHdjM19nYWRnZXRfZ2VuZXJpY19jbWRfc3RyaW5nKHU4IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRFdDM19ER0NNRF9TRVRfTE1QOgorCQlyZXR1cm4gIlNldCBMTVAiOworCWNhc2UgRFdDM19ER0NNRF9TRVRfUEVSSU9ESUNfUEFSOgorCQlyZXR1cm4gIlNldCBQZXJpb2RpYyBQYXJhbWV0ZXJzIjsKKwljYXNlIERXQzNfREdDTURfWE1JVF9GVU5DVElPTjoKKwkJcmV0dXJuICJUcmFuc21pdCBGdW5jdGlvbiBXYWtlIERldmljZSBOb3RpZmljYXRpb24iOworCWNhc2UgRFdDM19ER0NNRF9TRVRfU0NSQVRDSFBBRF9BRERSX0xPOgorCQlyZXR1cm4gIlNldCBTY3JhdGNocGFkIEJ1ZmZlciBBcnJheSBBZGRyZXNzIExvIjsKKwljYXNlIERXQzNfREdDTURfU0VUX1NDUkFUQ0hQQURfQUREUl9ISToKKwkJcmV0dXJuICJTZXQgU2NyYXRjaHBhZCBCdWZmZXIgQXJyYXkgQWRkcmVzcyBIaSI7CisJY2FzZSBEV0MzX0RHQ01EX1NFTEVDVEVEX0ZJRk9fRkxVU0g6CisJCXJldHVybiAiU2VsZWN0ZWQgRklGTyBGbHVzaCI7CisJY2FzZSBEV0MzX0RHQ01EX0FMTF9GSUZPX0ZMVVNIOgorCQlyZXR1cm4gIkFsbCBGSUZPIEZsdXNoIjsKKwljYXNlIERXQzNfREdDTURfU0VUX0VORFBPSU5UX05SRFk6CisJCXJldHVybiAiU2V0IEVuZHBvaW50IE5SRFkiOworCWNhc2UgRFdDM19ER0NNRF9SVU5fU09DX0JVU19MT09QQkFDSzoKKwkJcmV0dXJuICJSdW4gU29DIEJ1cyBMb29wYmFjayBUZXN0IjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmR3YzNfZ2FkZ2V0X2xpbmtfc3RyaW5nKGVudW0gZHdjM19saW5rX3N0YXRlIGxpbmtfc3RhdGUpCit7CisJc3dpdGNoIChsaW5rX3N0YXRlKSB7CisJY2FzZSBEV0MzX0xJTktfU1RBVEVfVTA6CisJCXJldHVybiAiVTAiOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX1UxOgorCQlyZXR1cm4gIlUxIjsKKwljYXNlIERXQzNfTElOS19TVEFURV9VMjoKKwkJcmV0dXJuICJVMiI7CisJY2FzZSBEV0MzX0xJTktfU1RBVEVfVTM6CisJCXJldHVybiAiVTMiOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX1NTX0RJUzoKKwkJcmV0dXJuICJTUy5EaXNhYmxlZCI7CisJY2FzZSBEV0MzX0xJTktfU1RBVEVfUlhfREVUOgorCQlyZXR1cm4gIlJYLkRldGVjdCI7CisJY2FzZSBEV0MzX0xJTktfU1RBVEVfU1NfSU5BQ1Q6CisJCXJldHVybiAiU1MuSW5hY3RpdmUiOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX1BPTEw6CisJCXJldHVybiAiUG9sbGluZyI7CisJY2FzZSBEV0MzX0xJTktfU1RBVEVfUkVDT1Y6CisJCXJldHVybiAiUmVjb3ZlcnkiOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX0hSRVNFVDoKKwkJcmV0dXJuICJIb3QgUmVzZXQiOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX0NNUExZOgorCQlyZXR1cm4gIkNvbXBsaWFuY2UiOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX0xQQks6CisJCXJldHVybiAiTG9vcGJhY2siOworCWNhc2UgRFdDM19MSU5LX1NUQVRFX1JFU0VUOgorCQlyZXR1cm4gIlJlc2V0IjsKKwljYXNlIERXQzNfTElOS19TVEFURV9SRVNVTUU6CisJCXJldHVybiAiUmVzdW1lIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04gbGluayBzdGF0ZVxuIjsKKwl9Cit9CisKIGludCBkd2MzX3NlbmRfZ2FkZ2V0X2dlbmVyaWNfY29tbWFuZChzdHJ1Y3QgZHdjMyAqZHdjLCBpbnQgY21kLCB1MzIgcGFyYW0pCiB7CiAJdTMyCQl0aW1lb3V0ID0gNTAwOwogCXUzMgkJcmVnOwogCisJZGV2X3ZkYmcoZHdjLT5kZXYsICJnZW5lcmljIGNtZCAnJXMnIFslZF0gcGFyYW0gJTA4eFxuIiwKKwkJCWR3YzNfZ2FkZ2V0X2dlbmVyaWNfY21kX3N0cmluZyhjbWQpLCBjbWQsIHBhcmFtKTsKKwogCWR3YzNfd3JpdGVsKGR3Yy0+cmVncywgRFdDM19ER0NNRFBBUiwgcGFyYW0pOwogCWR3YzNfd3JpdGVsKGR3Yy0+cmVncywgRFdDM19ER0NNRCwgY21kIHwgRFdDM19ER0NNRF9DTURBQ1QpOwogCkBAIC0zMzIsOSArMzk3LDkgQEAKIAl1MzIJCQl0aW1lb3V0ID0gNTAwOwogCXUzMgkJCXJlZzsKIAotCWRldl92ZGJnKGR3Yy0+ZGV2LCAiJXM6IGNtZCAnJXMnIHBhcmFtcyAlMDh4ICUwOHggJTA4eFxuIiwKKwlkZXZfdmRiZyhkd2MtPmRldiwgIiVzOiBjbWQgJyVzJyBbJWRdIHBhcmFtcyAlMDh4ICUwOHggJTA4eFxuIiwKIAkJCWRlcC0+bmFtZSwKLQkJCWR3YzNfZ2FkZ2V0X2VwX2NtZF9zdHJpbmcoY21kKSwgcGFyYW1zLT5wYXJhbTAsCisJCQlkd2MzX2dhZGdldF9lcF9jbWRfc3RyaW5nKGNtZCksIGNtZCwgcGFyYW1zLT5wYXJhbTAsCiAJCQlwYXJhbXMtPnBhcmFtMSwgcGFyYW1zLT5wYXJhbTIpOwogCiAJZHdjM193cml0ZWwoZHdjLT5yZWdzLCBEV0MzX0RFUENNRFBBUjAoZXApLCBwYXJhbXMtPnBhcmFtMCk7CkBAIC01MTUsNyArNTgwLDcgQEAKIHsKIAlzdHJ1Y3QgZHdjMwkJKmR3YyA9IGRlcC0+ZHdjOwogCXUzMgkJCXJlZzsKLQlpbnQJCQlyZXQgPSAtRU5PTUVNOworCWludAkJCXJldDsKIAogCWRldl92ZGJnKGR3Yy0+ZGV2LCAiRW5hYmxpbmcgJXNcbiIsIGRlcC0+bmFtZSk7CiAKQEAgLTYwNCw2ICs2NjksMTAgQEAKIAogCWR3YzNfcmVtb3ZlX3JlcXVlc3RzKGR3YywgZGVwKTsKIAorCS8qIG1ha2Ugc3VyZSBIVyBlbmRwb2ludCBpc24ndCBzdGFsbGVkICovCisJaWYgKGRlcC0+ZmxhZ3MgJiBEV0MzX0VQX1NUQUxMKQorCQlfX2R3YzNfZ2FkZ2V0X2VwX3NldF9oYWx0KGRlcCwgMCk7CisKIAlyZWcgPSBkd2MzX3JlYWRsKGR3Yy0+cmVncywgRFdDM19EQUxFUEVOQSk7CiAJcmVnICY9IH5EV0MzX0RBTEVQRU5BX0VQKGRlcC0+bnVtYmVyKTsKIAlkd2MzX3dyaXRlbChkd2MtPnJlZ3MsIERXQzNfREFMRVBFTkEsIHJlZyk7CkBAIC0yNDQxLDggKzI1MTAsNiBAQAogCQl9CiAJfQogCi0JZHdjLT5saW5rX3N0YXRlID0gbmV4dDsKLQogCXN3aXRjaCAobmV4dCkgewogCWNhc2UgRFdDM19MSU5LX1NUQVRFX1UxOgogCQlpZiAoZHdjLT5zcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpCkBAIC0yNDYwLDcgKzI1MjcsMTEgQEAKIAkJYnJlYWs7CiAJfQogCi0JZGV2X3ZkYmcoZHdjLT5kZXYsICIlcyBsaW5rICVkXG4iLCBfX2Z1bmNfXywgZHdjLT5saW5rX3N0YXRlKTsKKwlkZXZfdmRiZyhkd2MtPmRldiwgImxpbmsgY2hhbmdlOiAlcyBbJWRdIC0+ICVzIFslZF1cbiIsCisJCQlkd2MzX2dhZGdldF9saW5rX3N0cmluZyhkd2MtPmxpbmtfc3RhdGUpLAorCQkJZHdjLT5saW5rX3N0YXRlLCBkd2MzX2dhZGdldF9saW5rX3N0cmluZyhuZXh0KSwgbmV4dCk7CisKKwlkd2MtPmxpbmtfc3RhdGUgPSBuZXh0OwogfQogCiBzdGF0aWMgdm9pZCBkd2MzX2dhZGdldF9oaWJlcm5hdGlvbl9pbnRlcnJ1cHQoc3RydWN0IGR3YzMgKmR3YywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggMzU1N2M3ZS4uYmExOGU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiBjb25maWcgVVNCX0xQQzMyWFgKIAl0cmlzdGF0ZSAiTFBDMzJYWCBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9MUEMzMlhYCisJZGVwZW5kcyBvbiBBUkNIX0xQQzMyWFggJiYgSTJDCiAJc2VsZWN0IFVTQl9JU1AxMzAxCiAJaGVscAogCSAgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIFVTQiBkZXZpY2UgY29udHJvbGxlciBpbiB0aGUgTFBDMzJ4eCBTb0MuCkBAIC0yMjYsNyArMjI2LDcgQEAKIGNvbmZpZyBVU0JfT01BUAogCXRyaXN0YXRlICJPTUFQIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKLQlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKKwlkZXBlbmRzIG9uIElTUDEzMDFfT01BUCB8fCAhKE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMpCiAJaGVscAogCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAogCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKQEAgLTMwMCwxMiArMzAwLDYgQEAKIAkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMjd4X3VkYyIgYW5kIGZvcmNlIGFsbAogCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgogCi1jb25maWcgVVNCX1MzQ19IU09URwotCXRyaXN0YXRlICJEZXNpZ253YXJlL1MzQyBIUy9PdEcgVVNCIERldmljZSBjb250cm9sbGVyIgotCWhlbHAKLQkgIFRoZSBEZXNpZ253YXJlIFVTQjIuMCBoaWdoLXNwZWVkIGdhZGdldCBjb250cm9sbGVyCi0JICBpbnRlZ3JhdGVkIGludG8gbWFueSBTb0NzLgotCiBjb25maWcgVVNCX1MzQzI0MTAKIAl0cmlzdGF0ZSAiUzNDMjQxMCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0WFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCA1ZjE1MGJjLi40OTUxNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC0yNiw3ICsyNiw2IEBACiBvYmotJChDT05GSUdfVVNCX002NjU5MikJKz0gbTY2NTkyLXVkYy5vCiBvYmotJChDT05GSUdfVVNCX1I4QTY2NTk3KQkrPSByOGE2NjU5Ny11ZGMubwogb2JqLSQoQ09ORklHX1VTQl9GU0xfUUUpCSs9IGZzbF9xZV91ZGMubwotb2JqLSQoQ09ORklHX1VTQl9TM0NfSFNPVEcpCSs9IHMzYy1oc290Zy5vCiBvYmotJChDT05GSUdfVVNCX1MzQ19IU1VEQykJKz0gczNjLWhzdWRjLm8KIG9iai0kKENPTkZJR19VU0JfTFBDMzJYWCkJKz0gbHBjMzJ4eF91ZGMubwogb2JqLSQoQ09ORklHX1VTQl9FRzIwVCkJCSs9IHBjaF91ZGMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwppbmRleCA5ZjY1MzI0Li43NjAyM2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwpAQCAtMTY4Niw3ICsxNjg2LDcgQEAKIAkJcmVzZXRfYWxsX2VuZHBvaW50cyh1ZGMpOwogCiAJCWlmICh1ZGMtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgotCQkJCSYmIHVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KSB7CisJCQkJJiYgdWRjLT5kcml2ZXIgJiYgdWRjLT5kcml2ZXItPmRpc2Nvbm5lY3QpIHsKIAkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CiAJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKIAkJCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggZmFiOTA2NC4uZjgwMTUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtMjEsNiArMjEsMjQgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCisjaW5jbHVkZSAidV9vc19kZXNjLmgiCisKKy8qKgorICogc3RydWN0IHVzYl9vc19zdHJpbmcgLSByZXByZXNlbnRzIE9TIFN0cmluZyB0byBiZSByZXBvcnRlZCBieSBhIGdhZGdldAorICogQGJMZW5ndGg6IHRvdGFsIGxlbmd0aCBvZiB0aGUgZW50aXJlIGRlc2NyaXRvciwgYWx3YXlzIDB4MTIKKyAqIEBiRGVzY3JpcHRvclR5cGU6IFVTQl9EVF9TVFJJTkcKKyAqIEBxd1NpZ25hdHVyZTogdGhlIE9TIFN0cmluZyBwcm9wZXIKKyAqIEBiTVNfVmVuZG9yQ29kZTogY29kZSB1c2VkIGJ5IHRoZSBob3N0IGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzCisgKiBAYlBhZDogbm90IHVzZWQsIG11c3QgYmUgemVybworICovCitzdHJ1Y3QgdXNiX29zX3N0cmluZyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJcXdTaWduYXR1cmVbT1NfU1RSSU5HX1FXX1NJR05fTEVOXTsKKwlfX3U4CWJNU19WZW5kb3JDb2RlOworCV9fdTgJYlBhZDsKK30gX19wYWNrZWQ7CisKIC8qCiAgKiBUaGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgdXRpbGl0eSBjb2RlLCB1c2VkIHRvIGJ1aWxkIGEgZ2FkZ2V0IGRyaXZlcgogICogZnJvbSBvbmUgb3IgbW9yZSAiZnVuY3Rpb24iIGRyaXZlcnMsIG9uZSBvciBtb3JlICJjb25maWd1cmF0aW9uIgpAQCAtNDIyLDYgKzQ0MCw3IEBACiB7CiAJc3RydWN0IHVzYl9nYWRnZXQJCSpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CiAJc3RydWN0IHVzYl9jb25maWd1cmF0aW9uCSpjOworCXN0cnVjdCBsaXN0X2hlYWQJCSpwb3M7CiAJdTgJCQkJdHlwZSA9IHdfdmFsdWUgPj4gODsKIAllbnVtIHVzYl9kZXZpY2Vfc3BlZWQJCXNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CiAKQEAgLTQ0MCw3ICs0NTksMjAgQEAKIAogCS8qIFRoaXMgaXMgYSBsb29rdXAgYnkgY29uZmlnICpJTkRFWCogKi8KIAl3X3ZhbHVlICY9IDB4ZmY7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2Rldi0+Y29uZmlncywgbGlzdCkgeworCisJcG9zID0gJmNkZXYtPmNvbmZpZ3M7CisJYyA9IGNkZXYtPm9zX2Rlc2NfY29uZmlnOworCWlmIChjKQorCQlnb3RvIGNoZWNrX2NvbmZpZzsKKworCXdoaWxlICgocG9zID0gcG9zLT5uZXh0KSAhPSAgJmNkZXYtPmNvbmZpZ3MpIHsKKwkJYyA9IGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKmMpLCBsaXN0KTsKKworCQkvKiBza2lwIE9TIERlc2NyaXB0b3JzIGNvbmZpZyB3aGljaCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgKi8KKwkJaWYgKGMgPT0gY2Rldi0+b3NfZGVzY19jb25maWcpCisJCQljb250aW51ZTsKKworY2hlY2tfY29uZmlnOgogCQkvKiBpZ25vcmUgY29uZmlncyB0aGF0IHdvbid0IHdvcmsgYXQgdGhpcyBzcGVlZCAqLwogCQlzd2l0Y2ggKHNwZWVkKSB7CiAJCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgpAQCAtNjM0LDYgKzY2Niw3IEBACiAJaWYgKCFjKQogCQlnb3RvIGRvbmU7CiAKKwl1c2JfZ2FkZ2V0X3NldF9zdGF0ZShnYWRnZXQsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKIAljZGV2LT5jb25maWcgPSBjOwogCiAJLyogSW5pdGlhbGl6ZSBhbGwgaW50ZXJmYWNlcyBieSBzZXR0aW5nIHRoZW0gdG8gYWx0c2V0dGluZyB6ZXJvLiAqLwpAQCAtOTYwLDYgKzk5MywxOSBAQAogCQlyZXR1cm4gcy0+Ykxlbmd0aDsKIAl9CiAKKwlpZiAoY2Rldi0+dXNlX29zX3N0cmluZyAmJiBsYW5ndWFnZSA9PSAwICYmIGlkID09IE9TX1NUUklOR19JRFgpIHsKKwkJc3RydWN0IHVzYl9vc19zdHJpbmcgKmIgPSBidWY7CisJCWItPmJMZW5ndGggPSBzaXplb2YoKmIpOworCQliLT5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfU1RSSU5HOworCQljb21waWxldGltZV9hc3NlcnQoCisJCQlzaXplb2YoYi0+cXdTaWduYXR1cmUpID09IHNpemVvZihjZGV2LT5xd19zaWduKSwKKwkJCSJxd1NpZ25hdHVyZSBzaXplIG11c3QgYmUgZXF1YWwgdG8gcXdfc2lnbiIpOworCQltZW1jcHkoJmItPnF3U2lnbmF0dXJlLCBjZGV2LT5xd19zaWduLCBzaXplb2YoYi0+cXdTaWduYXR1cmUpKTsKKwkJYi0+Yk1TX1ZlbmRvckNvZGUgPSBjZGV2LT5iX3ZlbmRvcl9jb2RlOworCQliLT5iUGFkID0gMDsKKwkJcmV0dXJuIHNpemVvZigqYik7CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh1YywgJmNkZXYtPmdzdHJpbmdzLCBsaXN0KSB7CiAJCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKipzcDsKIApAQCAtMTIwNiw2ICsxMjUyLDE1NiBAQAogCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOwogfQogCitzdGF0aWMgaW50IGNvdW50X2V4dF9jb21wYXQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQoreworCWludCBpLCByZXM7CisKKwlyZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjLT5uZXh0X2ludGVyZmFjZV9pZDsgKytpKSB7CisJCXN0cnVjdCB1c2JfZnVuY3Rpb24gKmY7CisJCWludCBqOworCisJCWYgPSBjLT5pbnRlcmZhY2VbaV07CisJCWZvciAoaiA9IDA7IGogPCBmLT5vc19kZXNjX247ICsraikgeworCQkJc3RydWN0IHVzYl9vc19kZXNjICpkOworCisJCQlpZiAoaSAhPSBmLT5vc19kZXNjX3RhYmxlW2pdLmlmX2lkKQorCQkJCWNvbnRpbnVlOworCQkJZCA9IGYtPm9zX2Rlc2NfdGFibGVbal0ub3NfZGVzYzsKKwkJCWlmIChkICYmIGQtPmV4dF9jb21wYXRfaWQpCisJCQkJKytyZXM7CisJCX0KKwl9CisJQlVHX09OKHJlcyA+IDI1NSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgZmlsbF9leHRfY29tcGF0KHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggKmJ1ZikKK3sKKwlpbnQgaSwgY291bnQ7CisKKwljb3VudCA9IDE2OworCWZvciAoaSA9IDA7IGkgPCBjLT5uZXh0X2ludGVyZmFjZV9pZDsgKytpKSB7CisJCXN0cnVjdCB1c2JfZnVuY3Rpb24gKmY7CisJCWludCBqOworCisJCWYgPSBjLT5pbnRlcmZhY2VbaV07CisJCWZvciAoaiA9IDA7IGogPCBmLT5vc19kZXNjX247ICsraikgeworCQkJc3RydWN0IHVzYl9vc19kZXNjICpkOworCisJCQlpZiAoaSAhPSBmLT5vc19kZXNjX3RhYmxlW2pdLmlmX2lkKQorCQkJCWNvbnRpbnVlOworCQkJZCA9IGYtPm9zX2Rlc2NfdGFibGVbal0ub3NfZGVzYzsKKwkJCWlmIChkICYmIGQtPmV4dF9jb21wYXRfaWQpIHsKKwkJCQkqYnVmKysgPSBpOworCQkJCSpidWYrKyA9IDB4MDE7CisJCQkJbWVtY3B5KGJ1ZiwgZC0+ZXh0X2NvbXBhdF9pZCwgMTYpOworCQkJCWJ1ZiArPSAyMjsKKwkJCX0gZWxzZSB7CisJCQkJKytidWY7CisJCQkJKmJ1ZiA9IDB4MDE7CisJCQkJYnVmICs9IDIzOworCQkJfQorCQkJY291bnQgKz0gMjQ7CisJCQlpZiAoY291bnQgPj0gNDA5NikKKwkJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY291bnRfZXh0X3Byb3Aoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBpbnQgaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZnVuY3Rpb24gKmY7CisJaW50IGo7CisKKwlmID0gYy0+aW50ZXJmYWNlW2ludGVyZmFjZV07CisJZm9yIChqID0gMDsgaiA8IGYtPm9zX2Rlc2NfbjsgKytqKSB7CisJCXN0cnVjdCB1c2Jfb3NfZGVzYyAqZDsKKworCQlpZiAoaW50ZXJmYWNlICE9IGYtPm9zX2Rlc2NfdGFibGVbal0uaWZfaWQpCisJCQljb250aW51ZTsKKwkJZCA9IGYtPm9zX2Rlc2NfdGFibGVbal0ub3NfZGVzYzsKKwkJaWYgKGQgJiYgZC0+ZXh0X2NvbXBhdF9pZCkKKwkJCXJldHVybiBkLT5leHRfcHJvcF9jb3VudDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGVuX2V4dF9wcm9wKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgaW50IGludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmOworCXN0cnVjdCB1c2Jfb3NfZGVzYyAqZDsKKwlpbnQgaiwgcmVzOworCisJcmVzID0gMTA7IC8qIGhlYWRlciBsZW5ndGggKi8KKwlmID0gYy0+aW50ZXJmYWNlW2ludGVyZmFjZV07CisJZm9yIChqID0gMDsgaiA8IGYtPm9zX2Rlc2NfbjsgKytqKSB7CisJCWlmIChpbnRlcmZhY2UgIT0gZi0+b3NfZGVzY190YWJsZVtqXS5pZl9pZCkKKwkJCWNvbnRpbnVlOworCQlkID0gZi0+b3NfZGVzY190YWJsZVtqXS5vc19kZXNjOworCQlpZiAoZCkKKwkJCXJldHVybiBtaW4ocmVzICsgZC0+ZXh0X3Byb3BfbGVuLCA0MDk2KTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBmaWxsX2V4dF9wcm9wKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgaW50IGludGVyZmFjZSwgdTggKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmOworCXN0cnVjdCB1c2Jfb3NfZGVzYyAqZDsKKwlzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3AgKmV4dF9wcm9wOworCWludCBqLCBjb3VudCwgbiwgcmV0OworCXU4ICpzdGFydCA9IGJ1ZjsKKworCWYgPSBjLT5pbnRlcmZhY2VbaW50ZXJmYWNlXTsKKwlmb3IgKGogPSAwOyBqIDwgZi0+b3NfZGVzY19uOyArK2opIHsKKwkJaWYgKGludGVyZmFjZSAhPSBmLT5vc19kZXNjX3RhYmxlW2pdLmlmX2lkKQorCQkJY29udGludWU7CisJCWQgPSBmLT5vc19kZXNjX3RhYmxlW2pdLm9zX2Rlc2M7CisJCWlmIChkKQorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShleHRfcHJvcCwgJmQtPmV4dF9wcm9wLCBlbnRyeSkgeworCQkJCS8qIDRrQiBtaW51cyBoZWFkZXIgbGVuZ3RoICovCisJCQkJbiA9IGJ1ZiAtIHN0YXJ0OworCQkJCWlmIChuID49IDQwODYpCisJCQkJCXJldHVybiAwOworCisJCQkJY291bnQgPSBleHRfcHJvcC0+ZGF0YV9sZW4gKworCQkJCQlleHRfcHJvcC0+bmFtZV9sZW4gKyAxNDsKKwkJCQlpZiAoY291bnQgPiA0MDg2IC0gbikKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJdXNiX2V4dF9wcm9wX3B1dF9zaXplKGJ1ZiwgY291bnQpOworCQkJCXVzYl9leHRfcHJvcF9wdXRfdHlwZShidWYsIGV4dF9wcm9wLT50eXBlKTsKKwkJCQlyZXQgPSB1c2JfZXh0X3Byb3BfcHV0X25hbWUoYnVmLCBleHRfcHJvcC0+bmFtZSwKKwkJCQkJCQkgICAgZXh0X3Byb3AtPm5hbWVfbGVuKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlzd2l0Y2ggKGV4dF9wcm9wLT50eXBlKSB7CisJCQkJY2FzZSBVU0JfRVhUX1BST1BfVU5JQ09ERToKKwkJCQljYXNlIFVTQl9FWFRfUFJPUF9VTklDT0RFX0VOVjoKKwkJCQljYXNlIFVTQl9FWFRfUFJPUF9VTklDT0RFX0xJTks6CisJCQkJCXVzYl9leHRfcHJvcF9wdXRfdW5pY29kZShidWYsIHJldCwKKwkJCQkJCQkgZXh0X3Byb3AtPmRhdGEsCisJCQkJCQkJIGV4dF9wcm9wLT5kYXRhX2xlbik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVVNCX0VYVF9QUk9QX0JJTkFSWToKKwkJCQkJdXNiX2V4dF9wcm9wX3B1dF9iaW5hcnkoYnVmLCByZXQsCisJCQkJCQkJZXh0X3Byb3AtPmRhdGEsCisJCQkJCQkJZXh0X3Byb3AtPmRhdGFfbGVuKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBVU0JfRVhUX1BST1BfTEUzMjoKKwkJCQkJLyogbm90IGltcGxlbWVudGVkICovCisJCQkJY2FzZSBVU0JfRVhUX1BST1BfQkUzMjoKKwkJCQkJLyogbm90IGltcGxlbWVudGVkICovCisJCQkJZGVmYXVsdDoKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJ1ZiArPSBjb3VudDsKKwkJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFRoZSBzZXR1cCgpIGNhbGxiYWNrIGltcGxlbWVudHMgYWxsIHRoZSBlcDAgZnVuY3Rpb25hbGl0eSB0aGF0J3MKICAqIG5vdCBoYW5kbGVkIGxvd2VyIGRvd24sIGluIGhhcmR3YXJlIG9yIHRoZSBoYXJkd2FyZSBkcml2ZXIobGlrZQpAQCAtMTQxNSw2ICsxNjExLDkxIEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiB1bmtub3duOgorCQkvKgorCQkgKiBPUyBkZXNjcmlwdG9ycyBoYW5kbGluZworCQkgKi8KKwkJaWYgKGNkZXYtPnVzZV9vc19zdHJpbmcgJiYgY2Rldi0+b3NfZGVzY19jb25maWcgJiYKKwkJICAgIChjdHJsLT5iUmVxdWVzdCAmIFVTQl9UWVBFX1ZFTkRPUikgJiYKKwkJICAgIGN0cmwtPmJSZXF1ZXN0ID09IGNkZXYtPmJfdmVuZG9yX2NvZGUpIHsKKwkJCXN0cnVjdCB1c2JfcmVxdWVzdAkJKnJlcTsKKwkJCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbgkqb3NfZGVzY19jZmc7CisJCQl1OAkJCQkqYnVmOworCQkJaW50CQkJCWludGVyZmFjZTsKKwkJCWludAkJCQljb3VudCA9IDA7CisKKwkJCXJlcSA9IGNkZXYtPm9zX2Rlc2NfcmVxOworCQkJcmVxLT5jb21wbGV0ZSA9IGNvbXBvc2l0ZV9zZXR1cF9jb21wbGV0ZTsKKwkJCWJ1ZiA9IHJlcS0+YnVmOworCQkJb3NfZGVzY19jZmcgPSBjZGV2LT5vc19kZXNjX2NvbmZpZzsKKwkJCW1lbXNldChidWYsIDAsIHdfbGVuZ3RoKTsKKwkJCWJ1Zls1XSA9IDB4MDE7CisJCQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9SRUNJUF9NQVNLKSB7CisJCQljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CisJCQkJaWYgKHdfaW5kZXggIT0gMHg0IHx8ICh3X3ZhbHVlID4+IDgpKQorCQkJCQlicmVhazsKKwkJCQlidWZbNl0gPSB3X2luZGV4OworCQkJCWlmICh3X2xlbmd0aCA9PSAweDEwKSB7CisJCQkJCS8qIE51bWJlciBvZiBleHQgY29tcGF0IGludGVyZmFjZXMgKi8KKwkJCQkJY291bnQgPSBjb3VudF9leHRfY29tcGF0KG9zX2Rlc2NfY2ZnKTsKKwkJCQkJYnVmWzhdID0gY291bnQ7CisJCQkJCWNvdW50ICo9IDI0OyAvKiAyNCBCL2V4dCBjb21wYXQgZGVzYyAqLworCQkJCQljb3VudCArPSAxNjsgLyogaGVhZGVyICovCisJCQkJCXB1dF91bmFsaWduZWRfbGUzMihjb3VudCwgYnVmKTsKKwkJCQkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiAiZXh0ZW5kZWQgY29tcGF0aWJpbGl0eSBJRCJzICovCisJCQkJCWNvdW50ID0gY291bnRfZXh0X2NvbXBhdChvc19kZXNjX2NmZyk7CisJCQkJCWJ1Zls4XSA9IGNvdW50OworCQkJCQljb3VudCAqPSAyNDsgLyogMjQgQi9leHQgY29tcGF0IGRlc2MgKi8KKwkJCQkJY291bnQgKz0gMTY7IC8qIGhlYWRlciAqLworCQkJCQlwdXRfdW5hbGlnbmVkX2xlMzIoY291bnQsIGJ1Zik7CisJCQkJCWJ1ZiArPSAxNjsKKwkJCQkJZmlsbF9leHRfY29tcGF0KG9zX2Rlc2NfY2ZnLCBidWYpOworCQkJCQl2YWx1ZSA9IHdfbGVuZ3RoOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKKwkJCQlpZiAod19pbmRleCAhPSAweDUgfHwgKHdfdmFsdWUgPj4gOCkpCisJCQkJCWJyZWFrOworCQkJCWludGVyZmFjZSA9IHdfdmFsdWUgJiAweEZGOworCQkJCWJ1Zls2XSA9IHdfaW5kZXg7CisJCQkJaWYgKHdfbGVuZ3RoID09IDB4MEEpIHsKKwkJCQkJY291bnQgPSBjb3VudF9leHRfcHJvcChvc19kZXNjX2NmZywKKwkJCQkJCWludGVyZmFjZSk7CisJCQkJCXB1dF91bmFsaWduZWRfbGUxNihjb3VudCwgYnVmICsgOCk7CisJCQkJCWNvdW50ID0gbGVuX2V4dF9wcm9wKG9zX2Rlc2NfY2ZnLAorCQkJCQkJaW50ZXJmYWNlKTsKKwkJCQkJcHV0X3VuYWxpZ25lZF9sZTMyKGNvdW50LCBidWYpOworCisJCQkJCXZhbHVlID0gd19sZW5ndGg7CisJCQkJfSBlbHNlIHsKKwkJCQkJY291bnQgPSBjb3VudF9leHRfcHJvcChvc19kZXNjX2NmZywKKwkJCQkJCWludGVyZmFjZSk7CisJCQkJCXB1dF91bmFsaWduZWRfbGUxNihjb3VudCwgYnVmICsgOCk7CisJCQkJCWNvdW50ID0gbGVuX2V4dF9wcm9wKG9zX2Rlc2NfY2ZnLAorCQkJCQkJaW50ZXJmYWNlKTsKKwkJCQkJcHV0X3VuYWxpZ25lZF9sZTMyKGNvdW50LCBidWYpOworCQkJCQlidWYgKz0gMTA7CisJCQkJCXZhbHVlID0gZmlsbF9leHRfcHJvcChvc19kZXNjX2NmZywKKwkJCQkJCQkgICAgICBpbnRlcmZhY2UsIGJ1Zik7CisJCQkJCWlmICh2YWx1ZSA8IDApCisJCQkJCQlyZXR1cm4gdmFsdWU7CisKKwkJCQkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXEtPmxlbmd0aCA9IHZhbHVlOworCQkJcmVxLT56ZXJvID0gdmFsdWUgPCB3X2xlbmd0aDsKKwkJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQkJaWYgKHZhbHVlIDwgMCkgeworCQkJCURCRyhjZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQkJcmVxLT5zdGF0dXMgPSAwOworCQkJCWNvbXBvc2l0ZV9zZXR1cF9jb21wbGV0ZShnYWRnZXQtPmVwMCwgcmVxKTsKKwkJCX0KKwkJCXJldHVybiB2YWx1ZTsKKwkJfQorCiAJCVZEQkcoY2RldiwKIAkJCSJub24tY29yZSBjb250cm9sIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCiAJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LApAQCAtMTYzOCw2ICsxOTE5LDI5IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGNvbXBvc2l0ZV9vc19kZXNjX3JlcV9wcmVwYXJlKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwKKwkJCQkgIHN0cnVjdCB1c2JfZXAgKmVwMCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWNkZXYtPm9zX2Rlc2NfcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNkZXYtPm9zX2Rlc2NfcmVxKSB7CisJCXJldCA9IFBUUl9FUlIoY2Rldi0+b3NfZGVzY19yZXEpOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBPUyBmZWF0dXJlIGRlc2NyaXB0b3IgbGVuZ3RoIDw9IDRrQiAqLworCWNkZXYtPm9zX2Rlc2NfcmVxLT5idWYgPSBrbWFsbG9jKDQwOTYsIEdGUF9LRVJORUwpOworCWlmICghY2Rldi0+b3NfZGVzY19yZXEtPmJ1ZikgeworCQlyZXQgPSBQVFJfRVJSKGNkZXYtPm9zX2Rlc2NfcmVxLT5idWYpOworCQlrZnJlZShjZGV2LT5vc19kZXNjX3JlcSk7CisJCWdvdG8gZW5kOworCX0KKwljZGV2LT5vc19kZXNjX3JlcS0+Y29tcGxldGUgPSBjb21wb3NpdGVfc2V0dXBfY29tcGxldGU7CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBjb21wb3NpdGVfZGV2X2NsZWFudXAoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ19jb250YWluZXIgKnVjLCAqdG1wOwpAQCAtMTY0Niw2ICsxOTUwLDEwIEBACiAJCWxpc3RfZGVsKCZ1Yy0+bGlzdCk7CiAJCWtmcmVlKHVjKTsKIAl9CisJaWYgKGNkZXYtPm9zX2Rlc2NfcmVxKSB7CisJCWtmcmVlKGNkZXYtPm9zX2Rlc2NfcmVxLT5idWYpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGNkZXYtPmdhZGdldC0+ZXAwLCBjZGV2LT5vc19kZXNjX3JlcSk7CisJfQogCWlmIChjZGV2LT5yZXEpIHsKIAkJa2ZyZWUoY2Rldi0+cmVxLT5idWYpOwogCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGNkZXYtPmdhZGdldC0+ZXAwLCBjZGV2LT5yZXEpOwpAQCAtMTY4Myw2ICsxOTkxLDEyIEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAorCWlmIChjZGV2LT51c2Vfb3Nfc3RyaW5nKSB7CisJCXN0YXR1cyA9IGNvbXBvc2l0ZV9vc19kZXNjX3JlcV9wcmVwYXJlKGNkZXYsIGdhZGdldC0+ZXAwKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZmFpbDsKKwl9CisKIAl1cGRhdGVfdW5jaGFuZ2VkX2Rldl9kZXNjKCZjZGV2LT5kZXNjLCBjb21wb3NpdGUtPmRldik7CiAKIAkvKiBoYXMgdXNlcnNwYWNlIGZhaWxlZCB0byBwcm92aWRlIGEgc2VyaWFsIG51bWJlcj8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWdmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZ2ZzLmMKaW5kZXggN2QxY2MwMS4uMmRkY2Q2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZ2ZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZ2ZzLmMKQEAgLTIsOSArMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ubHMuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldF9jb25maWdmcy5oPgogI2luY2x1ZGUgImNvbmZpZ2ZzLmgiCisjaW5jbHVkZSAidV9mLmgiCisjaW5jbHVkZSAidV9vc19kZXNjLmgiCiAKIGludCBjaGVja191c2VyX3VzYl9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwKIAkJc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqc3RyaW5ndGFiX2RldikKQEAgLTQzLDcgKzQ2LDggQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwIGZ1bmN0aW9uc19ncm91cDsKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwIGNvbmZpZ3NfZ3JvdXA7CiAJc3RydWN0IGNvbmZpZ19ncm91cCBzdHJpbmdzX2dyb3VwOwotCXN0cnVjdCBjb25maWdfZ3JvdXAgKmRlZmF1bHRfZ3JvdXBzWzRdOworCXN0cnVjdCBjb25maWdfZ3JvdXAgb3NfZGVzY19ncm91cDsKKwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZWZhdWx0X2dyb3Vwc1s1XTsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmdzdHJpbmdzW01BWF9VU0JfU1RSSU5HX0xBTkdTICsgMV07CkBAIC01Niw2ICs2MCw5IEBACiAjZW5kaWYKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgY29tcG9zaXRlOwogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiBjZGV2OworCWJvb2wgdXNlX29zX2Rlc2M7CisJY2hhciBiX3ZlbmRvcl9jb2RlOworCWNoYXIgcXdfc2lnbltPU19TVFJJTkdfUVdfU0lHTl9MRU5dOwogfTsKIAogc3RydWN0IGNvbmZpZ191c2JfY2ZnIHsKQEAgLTc5LDYgKzg2LDEwIEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAorc3RydWN0IG9zX2Rlc2MgeworCXN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7Cit9OworCiBzdHJ1Y3QgZ2FkZ2V0X2NvbmZpZ19uYW1lIHsKIAlzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIHN0cmluZ3RhYl9kZXY7CiAJc3RydWN0IHVzYl9zdHJpbmcgc3RyaW5nczsKQEAgLTczNiw2ICs3NDcsNTI1IEBACiBVU0JfQ09ORklHX1NUUklOR19SV19PUFMoZ2FkZ2V0X3N0cmluZ3MpOwogVVNCX0NPTkZJR19TVFJJTkdTX0xBTkcoZ2FkZ2V0X3N0cmluZ3MsIGdhZGdldF9pbmZvKTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3NfZGVzYyAqdG9fb3NfZGVzYyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksIHN0cnVjdCBvc19kZXNjLCBncm91cCk7Cit9CisKK0NPTkZJR0ZTX0FUVFJfU1RSVUNUKG9zX2Rlc2MpOworQ09ORklHRlNfQVRUUl9PUFMob3NfZGVzYyk7CisKK3N0YXRpYyBzc2l6ZV90IG9zX2Rlc2NfdXNlX3Nob3coc3RydWN0IG9zX2Rlc2MgKm9zX2Rlc2MsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaTsKKworCWdpID0gdG9fZ2FkZ2V0X2luZm8ob3NfZGVzYy0+Z3JvdXAuY2dfaXRlbS5jaV9wYXJlbnQpOworCisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkIiwgZ2ktPnVzZV9vc19kZXNjKTsKK30KKworc3RhdGljIHNzaXplX3Qgb3NfZGVzY191c2Vfc3RvcmUoc3RydWN0IG9zX2Rlc2MgKm9zX2Rlc2MsIGNvbnN0IGNoYXIgKnBhZ2UsCisJCQkJIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaTsKKwlpbnQgcmV0OworCWJvb2wgdXNlOworCisJZ2kgPSB0b19nYWRnZXRfaW5mbyhvc19kZXNjLT5ncm91cC5jZ19pdGVtLmNpX3BhcmVudCk7CisKKwltdXRleF9sb2NrKCZnaS0+bG9jayk7CisJcmV0ID0gc3RydG9ib29sKHBhZ2UsICZ1c2UpOworCWlmICghcmV0KSB7CisJCWdpLT51c2Vfb3NfZGVzYyA9IHVzZTsKKwkJcmV0ID0gbGVuOworCX0KKwltdXRleF91bmxvY2soJmdpLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3NfZGVzY19hdHRyaWJ1dGUgb3NfZGVzY191c2UgPQorCV9fQ09ORklHRlNfQVRUUih1c2UsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJb3NfZGVzY191c2Vfc2hvdywKKwkJCW9zX2Rlc2NfdXNlX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3Qgb3NfZGVzY19iX3ZlbmRvcl9jb2RlX3Nob3coc3RydWN0IG9zX2Rlc2MgKm9zX2Rlc2MsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaTsKKworCWdpID0gdG9fZ2FkZ2V0X2luZm8ob3NfZGVzYy0+Z3JvdXAuY2dfaXRlbS5jaV9wYXJlbnQpOworCisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkIiwgZ2ktPmJfdmVuZG9yX2NvZGUpOworfQorCitzdGF0aWMgc3NpemVfdCBvc19kZXNjX2JfdmVuZG9yX2NvZGVfc3RvcmUoc3RydWN0IG9zX2Rlc2MgKm9zX2Rlc2MsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaTsKKwlpbnQgcmV0OworCXU4IGJfdmVuZG9yX2NvZGU7CisKKwlnaSA9IHRvX2dhZGdldF9pbmZvKG9zX2Rlc2MtPmdyb3VwLmNnX2l0ZW0uY2lfcGFyZW50KTsKKworCW11dGV4X2xvY2soJmdpLT5sb2NrKTsKKwlyZXQgPSBrc3RydG91OChwYWdlLCAwLCAmYl92ZW5kb3JfY29kZSk7CisJaWYgKCFyZXQpIHsKKwkJZ2ktPmJfdmVuZG9yX2NvZGUgPSBiX3ZlbmRvcl9jb2RlOworCQlyZXQgPSBsZW47CisJfQorCW11dGV4X3VubG9jaygmZ2ktPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBvc19kZXNjX2F0dHJpYnV0ZSBvc19kZXNjX2JfdmVuZG9yX2NvZGUgPQorCV9fQ09ORklHRlNfQVRUUihiX3ZlbmRvcl9jb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCW9zX2Rlc2NfYl92ZW5kb3JfY29kZV9zaG93LAorCQkJb3NfZGVzY19iX3ZlbmRvcl9jb2RlX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3Qgb3NfZGVzY19xd19zaWduX3Nob3coc3RydWN0IG9zX2Rlc2MgKm9zX2Rlc2MsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaTsKKworCWdpID0gdG9fZ2FkZ2V0X2luZm8ob3NfZGVzYy0+Z3JvdXAuY2dfaXRlbS5jaV9wYXJlbnQpOworCisJbWVtY3B5KHBhZ2UsIGdpLT5xd19zaWduLCBPU19TVFJJTkdfUVdfU0lHTl9MRU4pOworCisJcmV0dXJuIE9TX1NUUklOR19RV19TSUdOX0xFTjsKK30KKworc3RhdGljIHNzaXplX3Qgb3NfZGVzY19xd19zaWduX3N0b3JlKHN0cnVjdCBvc19kZXNjICpvc19kZXNjLCBjb25zdCBjaGFyICpwYWdlLAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgZ2FkZ2V0X2luZm8gKmdpOworCWludCByZXMsIGw7CisKKwlnaSA9IHRvX2dhZGdldF9pbmZvKG9zX2Rlc2MtPmdyb3VwLmNnX2l0ZW0uY2lfcGFyZW50KTsKKwlsID0gbWluKChpbnQpbGVuLCBPU19TVFJJTkdfUVdfU0lHTl9MRU4gPj4gMSk7CisJaWYgKHBhZ2VbbCAtIDFdID09ICdcbicpCisJCS0tbDsKKworCW11dGV4X2xvY2soJmdpLT5sb2NrKTsKKwlyZXMgPSB1dGY4c190b191dGYxNnMocGFnZSwgbCwKKwkJCSAgICAgIFVURjE2X0xJVFRMRV9FTkRJQU4sICh3Y2hhcl90ICopIGdpLT5xd19zaWduLAorCQkJICAgICAgT1NfU1RSSU5HX1FXX1NJR05fTEVOKTsKKwlpZiAocmVzID4gMCkKKwkJcmVzID0gbGVuOworCW11dGV4X3VubG9jaygmZ2ktPmxvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHN0cnVjdCBvc19kZXNjX2F0dHJpYnV0ZSBvc19kZXNjX3F3X3NpZ24gPQorCV9fQ09ORklHRlNfQVRUUihxd19zaWduLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCW9zX2Rlc2NfcXdfc2lnbl9zaG93LAorCQkJb3NfZGVzY19xd19zaWduX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm9zX2Rlc2NfYXR0cnNbXSA9IHsKKwkmb3NfZGVzY191c2UuYXR0ciwKKwkmb3NfZGVzY19iX3ZlbmRvcl9jb2RlLmF0dHIsCisJJm9zX2Rlc2NfcXdfc2lnbi5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgdm9pZCBvc19kZXNjX2F0dHJfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IG9zX2Rlc2MgKm9zX2Rlc2MgPSB0b19vc19kZXNjKGl0ZW0pOworCWtmcmVlKG9zX2Rlc2MpOworfQorCitzdGF0aWMgaW50IG9zX2Rlc2NfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKm9zX2Rlc2NfY2ksCisJCQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzYl9jZmdfY2kpCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaSA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAob3NfZGVzY19jaSksCisJCQkJCXN0cnVjdCBnYWRnZXRfaW5mbywgb3NfZGVzY19ncm91cCk7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gJmdpLT5jZGV2OworCXN0cnVjdCBjb25maWdfdXNiX2NmZyAqY190YXJnZXQgPQorCQljb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKHVzYl9jZmdfY2kpLAorCQkJICAgICBzdHJ1Y3QgY29uZmlnX3VzYl9jZmcsIGdyb3VwKTsKKwlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmM7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmdpLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjZGV2LT5jb25maWdzLCBsaXN0KSB7CisJCWlmIChjID09ICZjX3RhcmdldC0+YykKKwkJCWJyZWFrOworCX0KKwlpZiAoYyAhPSAmY190YXJnZXQtPmMpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNkZXYtPm9zX2Rlc2NfY29uZmlnKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJY2Rldi0+b3NfZGVzY19jb25maWcgPSAmY190YXJnZXQtPmM7CisJcmV0ID0gMDsKKworb3V0OgorCW11dGV4X3VubG9jaygmZ2ktPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3NfZGVzY191bmxpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpvc19kZXNjX2NpLAorCQkJICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzYl9jZmdfY2kpCit7CisJc3RydWN0IGdhZGdldF9pbmZvICpnaSA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAob3NfZGVzY19jaSksCisJCQkJCXN0cnVjdCBnYWRnZXRfaW5mbywgb3NfZGVzY19ncm91cCk7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gJmdpLT5jZGV2OworCisJbXV0ZXhfbG9jaygmZ2ktPmxvY2spOworCWlmIChnaS0+dWRjX25hbWUpCisJCXVucmVnaXN0ZXJfZ2FkZ2V0KGdpKTsKKwljZGV2LT5vc19kZXNjX2NvbmZpZyA9IE5VTEw7CisJV0FSTl9PTihnaS0+dWRjX25hbWUpOworCW11dGV4X3VubG9jaygmZ2ktPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBvc19kZXNjX29wcyA9IHsKKwkucmVsZWFzZSAgICAgICAgICAgICAgICA9IG9zX2Rlc2NfYXR0cl9yZWxlYXNlLAorCS5zaG93X2F0dHJpYnV0ZSAgICAgICAgID0gb3NfZGVzY19hdHRyX3Nob3csCisJLnN0b3JlX2F0dHJpYnV0ZSAgICAgICAgPSBvc19kZXNjX2F0dHJfc3RvcmUsCisJLmFsbG93X2xpbmsJCT0gb3NfZGVzY19saW5rLAorCS5kcm9wX2xpbmsJCT0gb3NfZGVzY191bmxpbmssCit9OworCitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgb3NfZGVzY190eXBlID0geworCS5jdF9pdGVtX29wcwk9ICZvc19kZXNjX29wcywKKwkuY3RfYXR0cnMJPSBvc19kZXNjX2F0dHJzLAorCS5jdF9vd25lcgk9IFRISVNfTU9EVUxFLAorfTsKKworQ09ORklHRlNfQVRUUl9TVFJVQ1QodXNiX29zX2Rlc2MpOworQ09ORklHRlNfQVRUUl9PUFModXNiX29zX2Rlc2MpOworCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9vc19kZXNjX2V4dF9wcm9wCisqdG9fdXNiX29zX2Rlc2NfZXh0X3Byb3Aoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXJldHVybiBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHVzYl9vc19kZXNjX2V4dF9wcm9wLCBpdGVtKTsKK30KKworQ09ORklHRlNfQVRUUl9TVFJVQ1QodXNiX29zX2Rlc2NfZXh0X3Byb3ApOworQ09ORklHRlNfQVRUUl9PUFModXNiX29zX2Rlc2NfZXh0X3Byb3ApOworCitzdGF0aWMgc3NpemVfdCBleHRfcHJvcF90eXBlX3Nob3coc3RydWN0IHVzYl9vc19kZXNjX2V4dF9wcm9wICpleHRfcHJvcCwKKwkJCQkgIGNoYXIgKnBhZ2UpCit7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkIiwgZXh0X3Byb3AtPnR5cGUpOworfQorCitzdGF0aWMgc3NpemVfdCBleHRfcHJvcF90eXBlX3N0b3JlKHN0cnVjdCB1c2Jfb3NfZGVzY19leHRfcHJvcCAqZXh0X3Byb3AsCisJCQkJICAgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgdXNiX29zX2Rlc2MgKmRlc2MgPSB0b191c2Jfb3NfZGVzYyhleHRfcHJvcC0+aXRlbS5jaV9wYXJlbnQpOworCXU4IHR5cGU7CisJaW50IHJldDsKKworCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF9sb2NrKGRlc2MtPm9wdHNfbXV0ZXgpOworCXJldCA9IGtzdHJ0b3U4KHBhZ2UsIDAsICZ0eXBlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVuZDsKKwlpZiAodHlwZSA8IFVTQl9FWFRfUFJPUF9VTklDT0RFIHx8IHR5cGUgPiBVU0JfRVhUX1BST1BfVU5JQ09ERV9NVUxUSSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAoKGV4dF9wcm9wLT50eXBlID09IFVTQl9FWFRfUFJPUF9CSU5BUlkgfHwKKwkgICAgZXh0X3Byb3AtPnR5cGUgPT0gVVNCX0VYVF9QUk9QX0xFMzIgfHwKKwkgICAgZXh0X3Byb3AtPnR5cGUgPT0gVVNCX0VYVF9QUk9QX0JFMzIpICYmCisJICAgICh0eXBlID09IFVTQl9FWFRfUFJPUF9VTklDT0RFIHx8CisJICAgIHR5cGUgPT0gVVNCX0VYVF9QUk9QX1VOSUNPREVfRU5WIHx8CisJICAgIHR5cGUgPT0gVVNCX0VYVF9QUk9QX1VOSUNPREVfTElOSykpCisJCWV4dF9wcm9wLT5kYXRhX2xlbiA8PD0gMTsKKwllbHNlIGlmICgoZXh0X3Byb3AtPnR5cGUgPT0gVVNCX0VYVF9QUk9QX1VOSUNPREUgfHwKKwkJICAgZXh0X3Byb3AtPnR5cGUgPT0gVVNCX0VYVF9QUk9QX1VOSUNPREVfRU5WIHx8CisJCSAgIGV4dF9wcm9wLT50eXBlID09IFVTQl9FWFRfUFJPUF9VTklDT0RFX0xJTkspICYmCisJCSAgICh0eXBlID09IFVTQl9FWFRfUFJPUF9CSU5BUlkgfHwKKwkJICAgdHlwZSA9PSBVU0JfRVhUX1BST1BfTEUzMiB8fAorCQkgICB0eXBlID09IFVTQl9FWFRfUFJPUF9CRTMyKSkKKwkJZXh0X3Byb3AtPmRhdGFfbGVuID4+PSAxOworCWV4dF9wcm9wLT50eXBlID0gdHlwZTsKKwlyZXQgPSBsZW47CisKK2VuZDoKKwlpZiAoZGVzYy0+b3B0c19tdXRleCkKKwkJbXV0ZXhfdW5sb2NrKGRlc2MtPm9wdHNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV4dF9wcm9wX2RhdGFfc2hvdyhzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3AgKmV4dF9wcm9wLAorCQkJCSAgY2hhciAqcGFnZSkKK3sKKwlpbnQgbGVuID0gZXh0X3Byb3AtPmRhdGFfbGVuOworCisJaWYgKGV4dF9wcm9wLT50eXBlID09IFVTQl9FWFRfUFJPUF9VTklDT0RFIHx8CisJICAgIGV4dF9wcm9wLT50eXBlID09IFVTQl9FWFRfUFJPUF9VTklDT0RFX0VOViB8fAorCSAgICBleHRfcHJvcC0+dHlwZSA9PSBVU0JfRVhUX1BST1BfVU5JQ09ERV9MSU5LKQorCQlsZW4gPj49IDE7CisJbWVtY3B5KHBhZ2UsIGV4dF9wcm9wLT5kYXRhLCBsZW4pOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgZXh0X3Byb3BfZGF0YV9zdG9yZShzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3AgKmV4dF9wcm9wLAorCQkJCSAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHVzYl9vc19kZXNjICpkZXNjID0gdG9fdXNiX29zX2Rlc2MoZXh0X3Byb3AtPml0ZW0uY2lfcGFyZW50KTsKKwljaGFyICpuZXdfZGF0YTsKKwlzaXplX3QgcmV0X2xlbiA9IGxlbjsKKworCWlmIChwYWdlW2xlbiAtIDFdID09ICdcbicgfHwgcGFnZVtsZW4gLSAxXSA9PSAnXDAnKQorCQktLWxlbjsKKwluZXdfZGF0YSA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShuZXdfZGF0YSwgcGFnZSwgbGVuKTsKKworCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF9sb2NrKGRlc2MtPm9wdHNfbXV0ZXgpOworCWtmcmVlKGV4dF9wcm9wLT5kYXRhKTsKKwlleHRfcHJvcC0+ZGF0YSA9IG5ld19kYXRhOworCWRlc2MtPmV4dF9wcm9wX2xlbiAtPSBleHRfcHJvcC0+ZGF0YV9sZW47CisJZXh0X3Byb3AtPmRhdGFfbGVuID0gbGVuOworCWRlc2MtPmV4dF9wcm9wX2xlbiArPSBleHRfcHJvcC0+ZGF0YV9sZW47CisJaWYgKGV4dF9wcm9wLT50eXBlID09IFVTQl9FWFRfUFJPUF9VTklDT0RFIHx8CisJICAgIGV4dF9wcm9wLT50eXBlID09IFVTQl9FWFRfUFJPUF9VTklDT0RFX0VOViB8fAorCSAgICBleHRfcHJvcC0+dHlwZSA9PSBVU0JfRVhUX1BST1BfVU5JQ09ERV9MSU5LKSB7CisJCWRlc2MtPmV4dF9wcm9wX2xlbiAtPSBleHRfcHJvcC0+ZGF0YV9sZW47CisJCWV4dF9wcm9wLT5kYXRhX2xlbiA8PD0gMTsKKwkJZXh0X3Byb3AtPmRhdGFfbGVuICs9IDI7CisJCWRlc2MtPmV4dF9wcm9wX2xlbiArPSBleHRfcHJvcC0+ZGF0YV9sZW47CisJfQorCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF91bmxvY2soZGVzYy0+b3B0c19tdXRleCk7CisJcmV0dXJuIHJldF9sZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3BfYXR0cmlidXRlIGV4dF9wcm9wX3R5cGUgPQorCV9fQ09ORklHRlNfQVRUUih0eXBlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCWV4dF9wcm9wX3R5cGVfc2hvdywgZXh0X3Byb3BfdHlwZV9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3BfYXR0cmlidXRlIGV4dF9wcm9wX2RhdGEgPQorCV9fQ09ORklHRlNfQVRUUihkYXRhLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCWV4dF9wcm9wX2RhdGFfc2hvdywgZXh0X3Byb3BfZGF0YV9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpleHRfcHJvcF9hdHRyc1tdID0geworCSZleHRfcHJvcF90eXBlLmF0dHIsCisJJmV4dF9wcm9wX2RhdGEuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHZvaWQgdXNiX29zX2Rlc2NfZXh0X3Byb3BfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHVzYl9vc19kZXNjX2V4dF9wcm9wICpleHRfcHJvcCA9IHRvX3VzYl9vc19kZXNjX2V4dF9wcm9wKGl0ZW0pOworCisJa2ZyZWUoZXh0X3Byb3ApOyAvKiBmcmVlcyBhIHdob2xlIGNodW5rICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIGV4dF9wcm9wX29wcyA9IHsKKwkucmVsZWFzZQkJPSB1c2Jfb3NfZGVzY19leHRfcHJvcF9yZWxlYXNlLAorCS5zaG93X2F0dHJpYnV0ZQkJPSB1c2Jfb3NfZGVzY19leHRfcHJvcF9hdHRyX3Nob3csCisJLnN0b3JlX2F0dHJpYnV0ZQk9IHVzYl9vc19kZXNjX2V4dF9wcm9wX2F0dHJfc3RvcmUsCit9OworCitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpleHRfcHJvcF9tYWtlKAorCQlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3AgKmV4dF9wcm9wOworCXN0cnVjdCBjb25maWdfaXRlbV90eXBlICpleHRfcHJvcF90eXBlOworCXN0cnVjdCB1c2Jfb3NfZGVzYyAqZGVzYzsKKwljaGFyICp2bGFidWY7CisKKwl2bGFfZ3JvdXAoZGF0YV9jaHVuayk7CisJdmxhX2l0ZW0oZGF0YV9jaHVuaywgc3RydWN0IHVzYl9vc19kZXNjX2V4dF9wcm9wLCBleHRfcHJvcCwgMSk7CisJdmxhX2l0ZW0oZGF0YV9jaHVuaywgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUsIGV4dF9wcm9wX3R5cGUsIDEpOworCisJdmxhYnVmID0ga3phbGxvYyh2bGFfZ3JvdXBfc2l6ZShkYXRhX2NodW5rKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2bGFidWYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZXh0X3Byb3AgPSB2bGFfcHRyKHZsYWJ1ZiwgZGF0YV9jaHVuaywgZXh0X3Byb3ApOworCWV4dF9wcm9wX3R5cGUgPSB2bGFfcHRyKHZsYWJ1ZiwgZGF0YV9jaHVuaywgZXh0X3Byb3BfdHlwZSk7CisKKwlkZXNjID0gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgdXNiX29zX2Rlc2MsIGdyb3VwKTsKKwlleHRfcHJvcF90eXBlLT5jdF9pdGVtX29wcyA9ICZleHRfcHJvcF9vcHM7CisJZXh0X3Byb3BfdHlwZS0+Y3RfYXR0cnMgPSBleHRfcHJvcF9hdHRyczsKKwlleHRfcHJvcF90eXBlLT5jdF9vd25lciA9IGRlc2MtPm93bmVyOworCisJY29uZmlnX2l0ZW1faW5pdF90eXBlX25hbWUoJmV4dF9wcm9wLT5pdGVtLCBuYW1lLCBleHRfcHJvcF90eXBlKTsKKworCWV4dF9wcm9wLT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV4dF9wcm9wLT5uYW1lKSB7CisJCWtmcmVlKHZsYWJ1Zik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwlkZXNjLT5leHRfcHJvcF9sZW4gKz0gMTQ7CisJZXh0X3Byb3AtPm5hbWVfbGVuID0gMiAqIHN0cmxlbihleHRfcHJvcC0+bmFtZSkgKyAyOworCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF9sb2NrKGRlc2MtPm9wdHNfbXV0ZXgpOworCWRlc2MtPmV4dF9wcm9wX2xlbiArPSBleHRfcHJvcC0+bmFtZV9sZW47CisJbGlzdF9hZGRfdGFpbCgmZXh0X3Byb3AtPmVudHJ5LCAmZGVzYy0+ZXh0X3Byb3ApOworCSsrZGVzYy0+ZXh0X3Byb3BfY291bnQ7CisJaWYgKGRlc2MtPm9wdHNfbXV0ZXgpCisJCW11dGV4X3VubG9jayhkZXNjLT5vcHRzX211dGV4KTsKKworCXJldHVybiAmZXh0X3Byb3AtPml0ZW07Cit9CisKK3N0YXRpYyB2b2lkIGV4dF9wcm9wX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3QgdXNiX29zX2Rlc2NfZXh0X3Byb3AgKmV4dF9wcm9wID0gdG9fdXNiX29zX2Rlc2NfZXh0X3Byb3AoaXRlbSk7CisJc3RydWN0IHVzYl9vc19kZXNjICpkZXNjID0gdG9fdXNiX29zX2Rlc2MoJmdyb3VwLT5jZ19pdGVtKTsKKworCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF9sb2NrKGRlc2MtPm9wdHNfbXV0ZXgpOworCWxpc3RfZGVsKCZleHRfcHJvcC0+ZW50cnkpOworCS0tZGVzYy0+ZXh0X3Byb3BfY291bnQ7CisJa2ZyZWUoZXh0X3Byb3AtPm5hbWUpOworCWRlc2MtPmV4dF9wcm9wX2xlbiAtPSAoZXh0X3Byb3AtPm5hbWVfbGVuICsgZXh0X3Byb3AtPmRhdGFfbGVuICsgMTQpOworCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF91bmxvY2soZGVzYy0+b3B0c19tdXRleCk7CisJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOworfQorCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgaW50ZXJmX2dycF9vcHMgPSB7CisJLm1ha2VfaXRlbQk9ICZleHRfcHJvcF9tYWtlLAorCS5kcm9wX2l0ZW0JPSAmZXh0X3Byb3BfZHJvcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIGludGVyZl9pdGVtX29wcyA9IHsKKwkuc2hvd19hdHRyaWJ1dGUJCT0gdXNiX29zX2Rlc2NfYXR0cl9zaG93LAorCS5zdG9yZV9hdHRyaWJ1dGUJPSB1c2Jfb3NfZGVzY19hdHRyX3N0b3JlLAorfTsKKworc3RhdGljIHNzaXplX3Qgcm5kaXNfZ3JwX2NvbXBhdGlibGVfaWRfc2hvdyhzdHJ1Y3QgdXNiX29zX2Rlc2MgKmRlc2MsCisJCQkJCSAgICBjaGFyICpwYWdlKQoreworCW1lbWNweShwYWdlLCBkZXNjLT5leHRfY29tcGF0X2lkLCA4KTsKKwlyZXR1cm4gODsKK30KKworc3RhdGljIHNzaXplX3Qgcm5kaXNfZ3JwX2NvbXBhdGlibGVfaWRfc3RvcmUoc3RydWN0IHVzYl9vc19kZXNjICpkZXNjLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCit7CisJaW50IGw7CisKKwlsID0gbWluX3QoaW50LCA4LCBsZW4pOworCWlmIChwYWdlW2wgLSAxXSA9PSAnXG4nKQorCQktLWw7CisJaWYgKGRlc2MtPm9wdHNfbXV0ZXgpCisJCW11dGV4X2xvY2soZGVzYy0+b3B0c19tdXRleCk7CisJbWVtY3B5KGRlc2MtPmV4dF9jb21wYXRfaWQsIHBhZ2UsIGwpOworCWRlc2MtPmV4dF9jb21wYXRfaWRbbF0gPSAnXDAnOworCisJaWYgKGRlc2MtPm9wdHNfbXV0ZXgpCisJCW11dGV4X3VubG9jayhkZXNjLT5vcHRzX211dGV4KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX29zX2Rlc2NfYXR0cmlidXRlIHJuZGlzX2dycF9hdHRyX2NvbXBhdGlibGVfaWQgPQorCV9fQ09ORklHRlNfQVRUUihjb21wYXRpYmxlX2lkLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXJuZGlzX2dycF9jb21wYXRpYmxlX2lkX3Nob3csCisJCQlybmRpc19ncnBfY29tcGF0aWJsZV9pZF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHJuZGlzX2dycF9zdWJfY29tcGF0aWJsZV9pZF9zaG93KHN0cnVjdCB1c2Jfb3NfZGVzYyAqZGVzYywKKwkJCQkJCWNoYXIgKnBhZ2UpCit7CisJbWVtY3B5KHBhZ2UsIGRlc2MtPmV4dF9jb21wYXRfaWQgKyA4LCA4KTsKKwlyZXR1cm4gODsKK30KKworc3RhdGljIHNzaXplX3Qgcm5kaXNfZ3JwX3N1Yl9jb21wYXRpYmxlX2lkX3N0b3JlKHN0cnVjdCB1c2Jfb3NfZGVzYyAqZGVzYywKKwkJCQkJCSBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQoreworCWludCBsOworCisJbCA9IG1pbl90KGludCwgOCwgbGVuKTsKKwlpZiAocGFnZVtsIC0gMV0gPT0gJ1xuJykKKwkJLS1sOworCWlmIChkZXNjLT5vcHRzX211dGV4KQorCQltdXRleF9sb2NrKGRlc2MtPm9wdHNfbXV0ZXgpOworCW1lbWNweShkZXNjLT5leHRfY29tcGF0X2lkICsgOCwgcGFnZSwgbCk7CisJZGVzYy0+ZXh0X2NvbXBhdF9pZFtsICsgOF0gPSAnXDAnOworCisJaWYgKGRlc2MtPm9wdHNfbXV0ZXgpCisJCW11dGV4X3VubG9jayhkZXNjLT5vcHRzX211dGV4KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX29zX2Rlc2NfYXR0cmlidXRlIHJuZGlzX2dycF9hdHRyX3N1Yl9jb21wYXRpYmxlX2lkID0KKwlfX0NPTkZJR0ZTX0FUVFIoc3ViX2NvbXBhdGlibGVfaWQsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJcm5kaXNfZ3JwX3N1Yl9jb21wYXRpYmxlX2lkX3Nob3csCisJCQlybmRpc19ncnBfc3ViX2NvbXBhdGlibGVfaWRfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqaW50ZXJmX2dycF9hdHRyc1tdID0geworCSZybmRpc19ncnBfYXR0cl9jb21wYXRpYmxlX2lkLmF0dHIsCisJJnJuZGlzX2dycF9hdHRyX3N1Yl9jb21wYXRpYmxlX2lkLmF0dHIsCisJTlVMTAorfTsKKworaW50IHVzYl9vc19kZXNjX3ByZXBhcmVfaW50ZXJmX2RpcihzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnQsCisJCQkJICAgaW50IG5faW50ZXJmLAorCQkJCSAgIHN0cnVjdCB1c2Jfb3NfZGVzYyAqKmRlc2MsCisJCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIpCit7CisJc3RydWN0IGNvbmZpZ19ncm91cCAqKmZfZGVmYXVsdF9ncm91cHMsICpvc19kZXNjX2dyb3VwLAorCQkJCSoqaW50ZXJmYWNlX2dyb3VwczsKKwlzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqb3NfZGVzY190eXBlLCAqaW50ZXJmYWNlX3R5cGU7CisKKwl2bGFfZ3JvdXAoZGF0YV9jaHVuayk7CisJdmxhX2l0ZW0oZGF0YV9jaHVuaywgc3RydWN0IGNvbmZpZ19ncm91cCAqLCBmX2RlZmF1bHRfZ3JvdXBzLCAyKTsKKwl2bGFfaXRlbShkYXRhX2NodW5rLCBzdHJ1Y3QgY29uZmlnX2dyb3VwLCBvc19kZXNjX2dyb3VwLCAxKTsKKwl2bGFfaXRlbShkYXRhX2NodW5rLCBzdHJ1Y3QgY29uZmlnX2dyb3VwICosIGludGVyZmFjZV9ncm91cHMsCisJCSBuX2ludGVyZiArIDEpOworCXZsYV9pdGVtKGRhdGFfY2h1bmssIHN0cnVjdCBjb25maWdfaXRlbV90eXBlLCBvc19kZXNjX3R5cGUsIDEpOworCXZsYV9pdGVtKGRhdGFfY2h1bmssIHN0cnVjdCBjb25maWdfaXRlbV90eXBlLCBpbnRlcmZhY2VfdHlwZSwgMSk7CisKKwljaGFyICp2bGFidWYgPSBremFsbG9jKHZsYV9ncm91cF9zaXplKGRhdGFfY2h1bmspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZsYWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmX2RlZmF1bHRfZ3JvdXBzID0gdmxhX3B0cih2bGFidWYsIGRhdGFfY2h1bmssIGZfZGVmYXVsdF9ncm91cHMpOworCW9zX2Rlc2NfZ3JvdXAgPSB2bGFfcHRyKHZsYWJ1ZiwgZGF0YV9jaHVuaywgb3NfZGVzY19ncm91cCk7CisJb3NfZGVzY190eXBlID0gdmxhX3B0cih2bGFidWYsIGRhdGFfY2h1bmssIG9zX2Rlc2NfdHlwZSk7CisJaW50ZXJmYWNlX2dyb3VwcyA9IHZsYV9wdHIodmxhYnVmLCBkYXRhX2NodW5rLCBpbnRlcmZhY2VfZ3JvdXBzKTsKKwlpbnRlcmZhY2VfdHlwZSA9IHZsYV9wdHIodmxhYnVmLCBkYXRhX2NodW5rLCBpbnRlcmZhY2VfdHlwZSk7CisKKwlwYXJlbnQtPmRlZmF1bHRfZ3JvdXBzID0gZl9kZWZhdWx0X2dyb3VwczsKKwlvc19kZXNjX3R5cGUtPmN0X293bmVyID0gb3duZXI7CisJY29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKG9zX2Rlc2NfZ3JvdXAsICJvc19kZXNjIiwgb3NfZGVzY190eXBlKTsKKwlmX2RlZmF1bHRfZ3JvdXBzWzBdID0gb3NfZGVzY19ncm91cDsKKworCW9zX2Rlc2NfZ3JvdXAtPmRlZmF1bHRfZ3JvdXBzID0gaW50ZXJmYWNlX2dyb3VwczsKKwlpbnRlcmZhY2VfdHlwZS0+Y3RfaXRlbV9vcHMgPSAmaW50ZXJmX2l0ZW1fb3BzOworCWludGVyZmFjZV90eXBlLT5jdF9ncm91cF9vcHMgPSAmaW50ZXJmX2dycF9vcHM7CisJaW50ZXJmYWNlX3R5cGUtPmN0X2F0dHJzID0gaW50ZXJmX2dycF9hdHRyczsKKwlpbnRlcmZhY2VfdHlwZS0+Y3Rfb3duZXIgPSBvd25lcjsKKworCXdoaWxlIChuX2ludGVyZi0tKSB7CisJCXN0cnVjdCB1c2Jfb3NfZGVzYyAqZDsKKworCQlkID0gZGVzY1tuX2ludGVyZl07CisJCWQtPm93bmVyID0gb3duZXI7CisJCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmZC0+Z3JvdXAsICIiLCBpbnRlcmZhY2VfdHlwZSk7CisJCWNvbmZpZ19pdGVtX3NldF9uYW1lKCZkLT5ncm91cC5jZ19pdGVtLCAiaW50ZXJmYWNlLiVkIiwKKwkJCQkgICAgIG5faW50ZXJmKTsKKwkJaW50ZXJmYWNlX2dyb3Vwc1tuX2ludGVyZl0gPSAmZC0+Z3JvdXA7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9vc19kZXNjX3ByZXBhcmVfaW50ZXJmX2Rpcik7CisKIHN0YXRpYyBpbnQgY29uZmlnZnNfZG9fbm90aGluZyhzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CiAJV0FSTl9PTigxKTsKQEAgLTc0NSw2ICsxMjc1LDkgQEAKIGludCBjb21wb3NpdGVfZGV2X3ByZXBhcmUoc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICpjb21wb3NpdGUsCiAJCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqZGV2KTsKIAoraW50IGNvbXBvc2l0ZV9vc19kZXNjX3JlcV9wcmVwYXJlKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwKKwkJCQkgIHN0cnVjdCB1c2JfZXAgKmVwMCk7CisKIHN0YXRpYyB2b2lkIHB1cmdlX2NvbmZpZ3NfZnVuY3Moc3RydWN0IGdhZGdldF9pbmZvICpnaSkKIHsKIAlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24JKmM7CkBAIC03OTMsNyArMTMyNiw3IEBACiAJcmV0ID0gLUVJTlZBTDsKIAogCWlmIChsaXN0X2VtcHR5KCZnaS0+Y2Rldi5jb25maWdzKSkgewotCQlwcl9lcnIoIk5lZWQgYXRsZWFzdCBvbmUgY29uZmlndXJhdGlvbiBpbiAlcy5cbiIsCisJCXByX2VycigiTmVlZCBhdCBsZWFzdCBvbmUgY29uZmlndXJhdGlvbiBpbiAlcy5cbiIsCiAJCQkJZ2ktPmNvbXBvc2l0ZS5uYW1lKTsKIAkJZ290byBlcnJfY29tcF9jbGVhbnVwOwogCX0KQEAgLTgwNCw3ICsxMzM3LDcgQEAKIAogCQljZmcgPSBjb250YWluZXJfb2YoYywgc3RydWN0IGNvbmZpZ191c2JfY2ZnLCBjKTsKIAkJaWYgKGxpc3RfZW1wdHkoJmNmZy0+ZnVuY19saXN0KSkgewotCQkJcHJfZXJyKCJDb25maWcgJXMvJWQgb2YgJXMgbmVlZHMgYXRsZWFzdCBvbmUgZnVuY3Rpb24uXG4iLAorCQkJcHJfZXJyKCJDb25maWcgJXMvJWQgb2YgJXMgbmVlZHMgYXQgbGVhc3Qgb25lIGZ1bmN0aW9uLlxuIiwKIAkJCSAgICAgIGMtPmxhYmVsLCBjLT5iQ29uZmlndXJhdGlvblZhbHVlLAogCQkJICAgICAgZ2ktPmNvbXBvc2l0ZS5uYW1lKTsKIAkJCWdvdG8gZXJyX2NvbXBfY2xlYW51cDsKQEAgLTgzOSw2ICsxMzcyLDEyIEBACiAJCWdpLT5jZGV2LmRlc2MuaVNlcmlhbE51bWJlciA9IHNbVVNCX0dBREdFVF9TRVJJQUxfSURYXS5pZDsKIAl9CiAKKwlpZiAoZ2ktPnVzZV9vc19kZXNjKSB7CisJCWNkZXYtPnVzZV9vc19zdHJpbmcgPSB0cnVlOworCQljZGV2LT5iX3ZlbmRvcl9jb2RlID0gZ2ktPmJfdmVuZG9yX2NvZGU7CisJCW1lbWNweShjZGV2LT5xd19zaWduLCBnaS0+cXdfc2lnbiwgT1NfU1RSSU5HX1FXX1NJR05fTEVOKTsKKwl9CisKIAkvKiBHbyB0aHJvdWdoIGFsbCBjb25maWdzLCBhdHRhY2ggYWxsIGZ1bmN0aW9ucyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmdpLT5jZGV2LmNvbmZpZ3MsIGxpc3QpIHsKIAkJc3RydWN0IGNvbmZpZ191c2JfY2ZnICpjZmc7CkBAIC04NzQsNiArMTQxMywxMiBAQAogCQl9CiAJCXVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0KGNkZXYtPmdhZGdldCk7CiAJfQorCWlmIChjZGV2LT51c2Vfb3Nfc3RyaW5nKSB7CisJCXJldCA9IGNvbXBvc2l0ZV9vc19kZXNjX3JlcV9wcmVwYXJlKGNkZXYsIGdhZGdldC0+ZXAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3B1cmdlX2Z1bmNzOworCX0KKwogCXVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0KGNkZXYtPmdhZGdldCk7CiAJcmV0dXJuIDA7CiAKQEAgLTkyOSw2ICsxNDc0LDcgQEAKIAlnaS0+Z3JvdXAuZGVmYXVsdF9ncm91cHNbMF0gPSAmZ2ktPmZ1bmN0aW9uc19ncm91cDsKIAlnaS0+Z3JvdXAuZGVmYXVsdF9ncm91cHNbMV0gPSAmZ2ktPmNvbmZpZ3NfZ3JvdXA7CiAJZ2ktPmdyb3VwLmRlZmF1bHRfZ3JvdXBzWzJdID0gJmdpLT5zdHJpbmdzX2dyb3VwOworCWdpLT5ncm91cC5kZWZhdWx0X2dyb3Vwc1szXSA9ICZnaS0+b3NfZGVzY19ncm91cDsKIAogCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmZ2ktPmZ1bmN0aW9uc19ncm91cCwgImZ1bmN0aW9ucyIsCiAJCQkmZnVuY3Rpb25zX3R5cGUpOwpAQCAtOTM2LDYgKzE0ODIsOCBAQAogCQkJJmNvbmZpZ19kZXNjX3R5cGUpOwogCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmZ2ktPnN0cmluZ3NfZ3JvdXAsICJzdHJpbmdzIiwKIAkJCSZnYWRnZXRfc3RyaW5nc19zdHJpbmdzX3R5cGUpOworCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmZ2ktPm9zX2Rlc2NfZ3JvdXAsICJvc19kZXNjIiwKKwkJCSZvc19kZXNjX3R5cGUpOwogCiAJZ2ktPmNvbXBvc2l0ZS5iaW5kID0gY29uZmlnZnNfZG9fbm90aGluZzsKIAlnaS0+Y29tcG9zaXRlLnVuYmluZCA9IGNvbmZpZ2ZzX2RvX25vdGhpbmc7CkBAIC0xMDA1LDcgKzE1NTMsNyBAQAogCiAJdW5yZWdpc3Rlcl9nYWRnZXQoZ2kpOwogfQotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2dhZGdldF9pdGVtKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfZ2FkZ2V0X2l0ZW0pOwogCiBzdGF0aWMgaW50IF9faW5pdCBnYWRnZXRfY2ZzX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWdmcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZ2ZzLmgKaW5kZXggYTdiNTY0YS4uYTE0YWM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZ2ZzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbmZpZ2ZzLmgKQEAgLTEsNiArMSwxOCBAQAogI2lmbmRlZiBVU0JfX0dBREdFVF9fQ09ORklHRlNfX0gKICNkZWZpbmUgVVNCX19HQURHRVRfX0NPTkZJR0ZTX19ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWdmcy5oPgorCiB2b2lkIHVucmVnaXN0ZXJfZ2FkZ2V0X2l0ZW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKIAoraW50IHVzYl9vc19kZXNjX3ByZXBhcmVfaW50ZXJmX2RpcihzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnQsCisJCQkJICAgaW50IG5faW50ZXJmLAorCQkJCSAgIHN0cnVjdCB1c2Jfb3NfZGVzYyAqKmRlc2MsCisJCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Jfb3NfZGVzYyAqdG9fdXNiX29zX2Rlc2Moc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXJldHVybiBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLCBzdHJ1Y3QgdXNiX29zX2Rlc2MsIGdyb3VwKTsKK30KKwogI2VuZGlmIC8qICBVU0JfX0dBREdFVF9fQ09ORklHRlNfX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA4YzA2NDMwLi4yYjU0OTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC01NjEsNyArNTYxLDYgQEAKIAlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKIAlzdHJ1Y3QgZHVtbXkJCSpkdW07CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JaW50CQkJcmV0dmFsOwogCiAJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAoX2VwKTsKIAlpZiAoIV9lcCB8fCAhZXAtPmRlc2MgfHwgX2VwLT5uYW1lID09IGVwMG5hbWUpCkBAIC01NzEsMTIgKzU3MCwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkdW0tPmxvY2ssIGZsYWdzKTsKIAllcC0+ZGVzYyA9IE5VTEw7CiAJZXAtPnN0cmVhbV9lbiA9IDA7Ci0JcmV0dmFsID0gMDsKIAludWtlKGR1bSwgZXApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR1bS0+bG9jaywgZmxhZ3MpOwogCiAJZGV2X2RiZyh1ZGNfZGV2KGR1bSksICJkaXNhYmxlZCAlc1xuIiwgX2VwLT5uYW1lKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpkdW1teV9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2ZzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9mcy5jCmluZGV4IDFlMTJiM2UuLjc0MjAyZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2ZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZnMuYwpAQCAtMzMsMzYgKzMzLDExIEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCiAjaW5jbHVkZSAidV9mcy5oIgorI2luY2x1ZGUgInVfZi5oIgogI2luY2x1ZGUgImNvbmZpZ2ZzLmgiCiAKICNkZWZpbmUgRlVOQ1RJT05GU19NQUdJQwkweGE2NDczNjEgLyogQ2hvc2VuIGJ5IGEgaG9uZXN0IGRpY2Ugcm9sbCA7KSAqLwogCi0vKiBWYXJpYWJsZSBMZW5ndGggQXJyYXkgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIHZsYV9ncm91cChncm91cG5hbWUpIHNpemVfdCBncm91cG5hbWUjI19fbmV4dCA9IDAKLSNkZWZpbmUgdmxhX2dyb3VwX3NpemUoZ3JvdXBuYW1lKSBncm91cG5hbWUjI19fbmV4dAotCi0jZGVmaW5lIHZsYV9pdGVtKGdyb3VwbmFtZSwgdHlwZSwgbmFtZSwgbikgXAotCXNpemVfdCBncm91cG5hbWUjI18jI25hbWUjI19fb2Zmc2V0ID0gKHsJCQkgICAgICAgXAotCQlzaXplX3QgYWxpZ25fbWFzayA9IF9fYWxpZ25vZl9fKHR5cGUpIC0gMTsJCSAgICAgICBcCi0JCXNpemVfdCBvZmZzZXQgPSAoZ3JvdXBuYW1lIyNfX25leHQgKyBhbGlnbl9tYXNrKSAmIH5hbGlnbl9tYXNrO1wKLQkJc2l6ZV90IHNpemUgPSAobikgKiBzaXplb2YodHlwZSk7CQkJICAgICAgIFwKLQkJZ3JvdXBuYW1lIyNfX25leHQgPSBvZmZzZXQgKyBzaXplOwkJCSAgICAgICBcCi0JCW9mZnNldDsJCQkJCQkJICAgICAgIFwKLQl9KQotCi0jZGVmaW5lIHZsYV9pdGVtX3dpdGhfc3ooZ3JvdXBuYW1lLCB0eXBlLCBuYW1lLCBuKSBcCi0Jc2l6ZV90IGdyb3VwbmFtZSMjXyMjbmFtZSMjX19zeiA9IChuKSAqIHNpemVvZih0eXBlKTsJCSAgICAgICBcCi0Jc2l6ZV90IGdyb3VwbmFtZSMjXyMjbmFtZSMjX19vZmZzZXQgPSAoewkJCSAgICAgICBcCi0JCXNpemVfdCBhbGlnbl9tYXNrID0gX19hbGlnbm9mX18odHlwZSkgLSAxOwkJICAgICAgIFwKLQkJc2l6ZV90IG9mZnNldCA9IChncm91cG5hbWUjI19fbmV4dCArIGFsaWduX21hc2spICYgfmFsaWduX21hc2s7XAotCQlzaXplX3Qgc2l6ZSA9IGdyb3VwbmFtZSMjXyMjbmFtZSMjX19zejsJCQkgICAgICAgXAotCQlncm91cG5hbWUjI19fbmV4dCA9IG9mZnNldCArIHNpemU7CQkJICAgICAgIFwKLQkJb2Zmc2V0OwkJCQkJCQkgICAgICAgXAotCX0pCi0KLSNkZWZpbmUgdmxhX3B0cihwdHIsIGdyb3VwbmFtZSwgbmFtZSkgXAotCSgodm9pZCAqKSAoKGNoYXIgKilwdHIgKyBncm91cG5hbWUjI18jI25hbWUjI19fb2Zmc2V0KSkKLQogLyogUmVmZXJlbmNlIGNvdW50ZXIgaGFuZGxpbmcgKi8KIHN0YXRpYyB2b2lkIGZmc19kYXRhX2dldChzdHJ1Y3QgZmZzX2RhdGEgKmZmcyk7CiBzdGF0aWMgdm9pZCBmZnNfZGF0YV9wdXQoc3RydWN0IGZmc19kYXRhICpmZnMpOwpAQCAtMTkwLDcgKzE2NSw3IEBACiAvKiBEZXZpY2VzIG1hbmFnZW1lbnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogREVGSU5FX01VVEVYKGZmc19sb2NrKTsKLUVYUE9SVF9TWU1CT0woZmZzX2xvY2spOworRVhQT1JUX1NZTUJPTF9HUEwoZmZzX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGZmc19kZXYgKl9mZnNfZmluZF9kZXYoY29uc3QgY2hhciAqbmFtZSk7CiBzdGF0aWMgc3RydWN0IGZmc19kZXYgKl9mZnNfYWxsb2NfZGV2KHZvaWQpOwpAQCAtMjg4Myw3ICsyODU4LDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGZmc19uYW1lX2Rldik7CitFWFBPUlRfU1lNQk9MX0dQTChmZnNfbmFtZV9kZXYpOwogCiBpbnQgZmZzX3NpbmdsZV9kZXYoc3RydWN0IGZmc19kZXYgKmRldikKIHsKQEAgLTI5MDAsNyArMjg3NSw3IEBACiAJZmZzX2Rldl91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChmZnNfc2luZ2xlX2Rldik7CitFWFBPUlRfU1lNQk9MX0dQTChmZnNfc2luZ2xlX2Rldik7CiAKIC8qCiAgKiBmZnNfbG9jayBtdXN0IGJlIHRha2VuIGJ5IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKaW5kZXggOWE0ZjQ5ZC4uZWVkM2FkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAidV9ldGhlcl9jb25maWdmcy5oIgogI2luY2x1ZGUgInVfcm5kaXMuaCIKICNpbmNsdWRlICJybmRpcy5oIgorI2luY2x1ZGUgImNvbmZpZ2ZzLmgiCiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGFuIFJORElTIEV0aGVybmV0IHBvcnQgLS0gYSBNaWNyb3NvZnQgcHJvdG9jb2wgdGhhdCdzCkBAIC02ODIsNiArNjgzLDE1IEBACiAKIAlybmRpc19vcHRzID0gY29udGFpbmVyX29mKGYtPmZpLCBzdHJ1Y3QgZl9ybmRpc19vcHRzLCBmdW5jX2luc3QpOwogCisJaWYgKGNkZXYtPnVzZV9vc19zdHJpbmcpIHsKKwkJZi0+b3NfZGVzY190YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKCpmLT5vc19kZXNjX3RhYmxlKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghZi0+b3NfZGVzY190YWJsZSkKKwkJCXJldHVybiBQVFJfRVJSKGYtPm9zX2Rlc2NfdGFibGUpOworCQlmLT5vc19kZXNjX24gPSAxOworCQlmLT5vc19kZXNjX3RhYmxlWzBdLm9zX2Rlc2MgPSAmcm5kaXNfb3B0cy0+cm5kaXNfb3NfZGVzYzsKKwl9CisKIAkvKgogCSAqIGluIGRyaXZlcnMvdXNiL2dhZGdldC9jb25maWdmcy5jOmNvbmZpZ2ZzX2NvbXBvc2l0ZV9iaW5kKCkKIAkgKiBjb25maWd1cmF0aW9ucyBhcmUgYm91bmQgaW4gc2VxdWVuY2Ugd2l0aCBsaXN0X2Zvcl9lYWNoX2VudHJ5LApAQCAtNjkzLDE0ICs3MDMsMTYgQEAKIAkJZ2V0aGVyX3NldF9nYWRnZXQocm5kaXNfb3B0cy0+bmV0LCBjZGV2LT5nYWRnZXQpOwogCQlzdGF0dXMgPSBnZXRoZXJfcmVnaXN0ZXJfbmV0ZGV2KHJuZGlzX29wdHMtPm5ldCk7CiAJCWlmIChzdGF0dXMpCi0JCQlyZXR1cm4gc3RhdHVzOworCQkJZ290byBmYWlsOwogCQlybmRpc19vcHRzLT5ib3VuZCA9IHRydWU7CiAJfQogCiAJdXMgPSB1c2JfZ3N0cmluZ3NfYXR0YWNoKGNkZXYsIHJuZGlzX3N0cmluZ3MsCiAJCQkJIEFSUkFZX1NJWkUocm5kaXNfc3RyaW5nX2RlZnMpKTsKLQlpZiAoSVNfRVJSKHVzKSkKLQkJcmV0dXJuIFBUUl9FUlIodXMpOworCWlmIChJU19FUlIodXMpKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIodXMpOworCQlnb3RvIGZhaWw7CisJfQogCXJuZGlzX2NvbnRyb2xfaW50Zi5pSW50ZXJmYWNlID0gdXNbMF0uaWQ7CiAJcm5kaXNfZGF0YV9pbnRmLmlJbnRlcmZhY2UgPSB1c1sxXS5pZDsKIAlybmRpc19pYWRfZGVzY3JpcHRvci5pRnVuY3Rpb24gPSB1c1syXS5pZDsKQEAgLTgwMiw2ICs4MTQsOCBAQAogCXJldHVybiAwOwogCiBmYWlsOgorCWtmcmVlKGYtPm9zX2Rlc2NfdGFibGUpOworCWYtPm9zX2Rlc2NfbiA9IDA7CiAJdXNiX2ZyZWVfYWxsX2Rlc2NyaXB0b3JzKGYpOwogCiAJaWYgKHJuZGlzLT5ub3RpZnlfcmVxKSB7CkBAIC04MzQsNyArODQ4LDcgQEAKIAlvcHRzLT5ib3Jyb3dlZF9uZXQgPSBvcHRzLT5ib3VuZCA9IHRydWU7CiAJb3B0cy0+bmV0ID0gbmV0OwogfQotRVhQT1JUX1NZTUJPTChybmRpc19ib3Jyb3dfbmV0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJuZGlzX2JvcnJvd19uZXQpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmX3JuZGlzX29wdHMgKnRvX2Zfcm5kaXNfb3B0cyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7CkBAIC04ODIsMTYgKzg5NiwyMSBAQAogCQllbHNlCiAJCQlmcmVlX25ldGRldihvcHRzLT5uZXQpOwogCX0KKworCWtmcmVlKG9wdHMtPnJuZGlzX29zX2Rlc2MuZ3JvdXAuZGVmYXVsdF9ncm91cHMpOyAvKiBzaW5nbGUgVkxBIGNodW5rICovCiAJa2ZyZWUob3B0cyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpybmRpc19hbGxvY19pbnN0KHZvaWQpCiB7CiAJc3RydWN0IGZfcm5kaXNfb3B0cyAqb3B0czsKKwlzdHJ1Y3QgdXNiX29zX2Rlc2MgKmRlc2NzWzFdOwogCiAJb3B0cyA9IGt6YWxsb2Moc2l6ZW9mKCpvcHRzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvcHRzKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlvcHRzLT5ybmRpc19vc19kZXNjLmV4dF9jb21wYXRfaWQgPSBvcHRzLT5ybmRpc19leHRfY29tcGF0X2lkOworCiAJbXV0ZXhfaW5pdCgmb3B0cy0+bG9jayk7CiAJb3B0cy0+ZnVuY19pbnN0LmZyZWVfZnVuY19pbnN0ID0gcm5kaXNfZnJlZV9pbnN0OwogCW9wdHMtPm5ldCA9IGdldGhlcl9zZXR1cF9kZWZhdWx0KCk7CkBAIC05MDAsNyArOTE5LDExIEBACiAJCWtmcmVlKG9wdHMpOwogCQlyZXR1cm4gRVJSX0NBU1QobmV0KTsKIAl9CisJSU5JVF9MSVNUX0hFQUQoJm9wdHMtPnJuZGlzX29zX2Rlc2MuZXh0X3Byb3ApOwogCisJZGVzY3NbMF0gPSAmb3B0cy0+cm5kaXNfb3NfZGVzYzsKKwl1c2Jfb3NfZGVzY19wcmVwYXJlX2ludGVyZl9kaXIoJm9wdHMtPmZ1bmNfaW5zdC5ncm91cCwgMSwgZGVzY3MsCisJCQkJICAgICAgIFRISVNfTU9EVUxFKTsKIAljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJm9wdHMtPmZ1bmNfaW5zdC5ncm91cCwgIiIsCiAJCQkJICAgICZybmRpc19mdW5jX3R5cGUpOwogCkBAIC05MjUsNiArOTQ4LDggQEAKIHsKIAlzdHJ1Y3QgZl9ybmRpcwkJKnJuZGlzID0gZnVuY190b19ybmRpcyhmKTsKIAorCWtmcmVlKGYtPm9zX2Rlc2NfdGFibGUpOworCWYtPm9zX2Rlc2NfbiA9IDA7CiAJdXNiX2ZyZWVfYWxsX2Rlc2NyaXB0b3JzKGYpOwogCiAJa2ZyZWUocm5kaXMtPm5vdGlmeV9yZXEtPmJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCmluZGV4IGRmNGEwZGNiLi4xZWE4YmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJfQogCiAJbmV0ID0gZ2V0aGVyX2Nvbm5lY3QoJmdldGgtPnBvcnQpOwotCXJldHVybiBQVFJfUkVUKG5ldCk7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhuZXQpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRoX2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3VhYzIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3VhYzIuYwppbmRleCBiYzIzMDQwLi42MjYxZGI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfdWFjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3VhYzIuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJc3RydWN0IHNuZF91YWMyX2NoaXAgKnVhYzIgPSBwcm0tPnVhYzI7CiAKIAkvKiBpL2Ygc2h1dHRpbmcgZG93biAqLwotCWlmICghcHJtLT5lcF9lbmFibGVkKQorCWlmICghcHJtLT5lcF9lbmFibGVkIHx8IHJlcS0+c3RhdHVzID09IC1FU0hVVERPV04pCiAJCXJldHVybjsKIAogCS8qCkBAIC05NzQsOCArOTc0LDYgQEAKIAlwcm0tPnJidWYgPSBremFsbG9jKHBybS0+bWF4X3BzaXplICogVVNCX1hGRVJTLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBybS0+cmJ1ZikgewogCQlwcm0tPm1heF9wc2l6ZSA9IDA7Ci0JCWRldl9lcnIoJnVhYzItPnBkZXYuZGV2LAotCQkJIiVzOiVkIEVycm9yIVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC05ODQsOCArOTgyLDYgQEAKIAlwcm0tPnJidWYgPSBremFsbG9jKHBybS0+bWF4X3BzaXplICogVVNCX1hGRVJTLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBybS0+cmJ1ZikgewogCQlwcm0tPm1heF9wc2l6ZSA9IDA7Ci0JCWRldl9lcnIoJnVhYzItPnBkZXYuZGV2LAotCQkJIiVzOiVkIEVycm9yIVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0xMjk4LDEwICsxMjk0LDggQEAKIAlpbnQgcmVzOwogCiAJYWdkZXZfZyA9IGt6YWxsb2Moc2l6ZW9mICphZ2Rldl9nLCBHRlBfS0VSTkVMKTsKLQlpZiAoYWdkZXZfZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGF1ZGlvIGdhZGdldFxuIik7CisJaWYgKGFnZGV2X2cgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJcmVzID0gdXNiX3N0cmluZ19pZHNfdGFiKGNmZy0+Y2Rldiwgc3RyaW5nc19mbik7CiAJaWYgKHJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mb3RnMjEwLXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZvdGcyMTAtdWRjLmMKaW5kZXggMmQwMzA1Mi4uZTE0M2Q2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZvdGcyMTAtdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZvdGcyMTAtdWRjLmMKQEAgLTExMTIsMTcgKzExMTIsMTMgQEAKIAogCS8qIGluaXRpYWxpemUgdWRjICovCiAJZm90ZzIxMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3RnMjEwX3VkYyksIEdGUF9LRVJORUwpOwotCWlmIChmb3RnMjEwID09IE5VTEwpIHsKLQkJcHJfZXJyKCJremFsbG9jIGVycm9yXG4iKTsKKwlpZiAoZm90ZzIxMCA9PSBOVUxMKQogCQlnb3RvIGVycl9hbGxvYzsKLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRk9URzIxMF9NQVhfTlVNX0VQOyBpKyspIHsKIAkJX2VwW2ldID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZvdGcyMTBfZXApLCBHRlBfS0VSTkVMKTsKLQkJaWYgKF9lcFtpXSA9PSBOVUxMKSB7Ci0JCQlwcl9lcnIoIl9lcCBremFsbG9jIGVycm9yXG4iKTsKKwkJaWYgKF9lcFtpXSA9PSBOVUxMKQogCQkJZ290byBlcnJfYWxsb2M7Ci0JCX0KIAkJZm90ZzIxMC0+ZXBbaV0gPSBfZXBbaV07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKaW5kZXggYTJmMjZjZC4uMjhlNGZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwpAQCAtMjI1NiwxMCArMjI1Niw4IEBACiAJdWRjLT5waHlfbW9kZSA9IHBkYXRhLT5waHlfbW9kZTsKIAogCXVkYy0+ZXBzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9lcCkgKiB1ZGMtPm1heF9lcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1ZGMtPmVwcykgewotCQlFUlIoIm1hbGxvYyBmc2xfZXAgZmFpbGVkXG4iKTsKKwlpZiAoIXVkYy0+ZXBzKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJLyogaW5pdGlhbGl6ZWQgUUhzLCB0YWtlIGNhcmUgb2YgYWxpZ25tZW50ICovCiAJc2l6ZSA9IHVkYy0+bWF4X2VwICogc2l6ZW9mKHN0cnVjdCBlcF9xdWV1ZV9oZWFkKTsKQEAgLTIzNDIsMTAgKzIzNDAsOCBAQAogCXUzMiBkY2NwYXJhbXM7CiAKIAl1ZGNfY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2xfdWRjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVkY19jb250cm9sbGVyID09IE5VTEwpIHsKLQkJRVJSKCJtYWxsb2MgdWRjIGZhaWxlZFxuIik7CisJaWYgKHVkY19jb250cm9sbGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKIAl1ZGNfY29udHJvbGxlci0+cGRhdGEgPSBwZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdXNiMzAwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMKaW5kZXggNjQyM2YxOC4uM2RlYjRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMKQEAgLTE0MDAsMTcgKzE0MDAsMTMgQEAKIAogCS8qIGluaXRpYWxpemUgdWRjICovCiAJZnVzYjMwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmdXNiMzAwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGZ1c2IzMDAgPT0gTlVMTCkgewotCQlwcl9lcnIoImt6YWxsb2MgZXJyb3JcbiIpOworCWlmIChmdXNiMzAwID09IE5VTEwpCiAJCWdvdG8gY2xlYW5fdXA7Ci0JfQogCiAJZm9yIChpID0gMDsgaSA8IEZVU0IzMDBfTUFYX05VTV9FUDsgaSsrKSB7CiAJCV9lcFtpXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmdXNiMzAwX2VwKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChfZXBbaV0gPT0gTlVMTCkgewotCQkJcHJfZXJyKCJfZXAga3phbGxvYyBlcnJvclxuIik7CisJCWlmIChfZXBbaV0gPT0gTlVMTCkKIAkJCWdvdG8gY2xlYW5fdXA7Ci0JCX0KIAkJZnVzYjMwMC0+ZXBbaV0gPSBfZXBbaV07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ3JfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ3JfdWRjLmMKaW5kZXggZjk4NGVlNy4uOTlhMzdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ncl91ZGMuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJc2VxX3ByaW50ZihzZXEsICIgIHdlZGdlZCA9ICVkXG4iLCBlcC0+d2VkZ2VkKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgY2FsbGJhY2sgPSAlZFxuIiwgZXAtPmNhbGxiYWNrKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgbWF4cGFja2V0ID0gJWRcbiIsIGVwLT5lcC5tYXhwYWNrZXQpOworCXNlcV9wcmludGYoc2VxLCAiICBtYXhwYWNrZXRfbGltaXQgPSAlZFxuIiwgZXAtPmVwLm1heHBhY2tldF9saW1pdCk7CiAJc2VxX3ByaW50ZihzZXEsICIgIGJ5dGVzX3Blcl9idWZmZXIgPSAlZFxuIiwgZXAtPmJ5dGVzX3Blcl9idWZmZXIpOwogCWlmIChtb2RlID09IDEgfHwgbW9kZSA9PSAzKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAgbnQgPSAlZFxuIiwKQEAgLTE1NDEsNiArMTU0MiwxMCBAQAogCX0gZWxzZSBpZiAobWF4ID09IDApIHsKIAkJZGV2X2VycihkZXYtPmRldiwgIk1heCBwYXlsb2FkIGNhbm5vdCBiZSBzZXQgdG8gMFxuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAobWF4ID4gZXAtPmVwLm1heHBhY2tldF9saW1pdCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiUmVxdWVzdGVkIG1heCBwYXlsb2FkICVkID4gbGltaXQgJWRcbiIsCisJCQltYXgsIGVwLT5lcC5tYXhwYWNrZXRfbGltaXQpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlzcGluX2xvY2soJmVwLT5kZXYtPmxvY2spOwpAQCAtMTY3OSw3ICsxNjg0LDcgQEAKIAlpZiAoZXAtPmlzX2luKQogCQlncl9kYmdwcmludF9yZXF1ZXN0KCJFWFRFUk4iLCBlcCwgcmVxKTsKIAotCXJldCA9IGdyX3F1ZXVlKGVwLCByZXEsIGdmcF9mbGFncyk7CisJcmV0ID0gZ3JfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CiAKIAlzcGluX3VubG9jaygmZXAtPmRldi0+bG9jayk7CiAKQEAgLTE5ODUsOCArMTk5MCw4IEBACiAJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CiAKIAlpZiAobnVtID09IDApIHsKLQkJX3JlcSA9IGdyX2FsbG9jX3JlcXVlc3QoJmVwLT5lcCwgR0ZQX0tFUk5FTCk7Ci0JCWJ1ZiA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgUEFHRV9TSVpFLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7CisJCV9yZXEgPSBncl9hbGxvY19yZXF1ZXN0KCZlcC0+ZXAsIEdGUF9BVE9NSUMpOworCQlidWYgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIFBBR0VfU0laRSwgR0ZQX0RNQSB8IEdGUF9BVE9NSUMpOwogCQlpZiAoIV9yZXEgfHwgIWJ1ZikgewogCQkJLyogcG9zc2libGUgX3JlcSBmcmVlZCBieSBncl9wcm9iZSB2aWEgZ3JfcmVtb3ZlICovCiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIwMjAsOSArMjAyNSw3IEBACiAJdTMyIGRtYWN0cmxfdmFsOwogCWludCBpOwogCWludCByZXQgPSAwOwotCXUzMiAqYnVmc2l6ZXM7CiAJdTMyIGJ1ZnNpemU7Ci0JaW50IGxlbjsKIAogCWdyX3NldF9hZGRyZXNzKGRldiwgMCk7CiAKQEAgLTIwMzMsMTkgKzIwMzYsMTcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5lcF9saXN0KTsKIAlncl9zZXRfZXAwc3RhdGUoZGV2LCBHUl9FUDBfRElTQ09OTkVDVCk7CiAKLQlidWZzaXplcyA9ICh1MzIgKilvZl9nZXRfcHJvcGVydHkobnAsICJlcG9idWZzaXplcyIsICZsZW4pOwotCWxlbiAvPSBzaXplb2YodTMyKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uZXBvOyBpKyspIHsKLQkJYnVmc2l6ZSA9IChidWZzaXplcyAmJiBpIDwgbGVuKSA/IGJ1ZnNpemVzW2ldIDogMTAyNDsKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAiZXBvYnVmc2l6ZXMiLCBpLCAmYnVmc2l6ZSkpCisJCQlidWZzaXplID0gMTAyNDsKIAkJcmV0ID0gZ3JfZXBfaW5pdChkZXYsIGksIDAsIGJ1ZnNpemUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlidWZzaXplcyA9ICh1MzIgKilvZl9nZXRfcHJvcGVydHkobnAsICJlcGlidWZzaXplcyIsICZsZW4pOwotCWxlbiAvPSBzaXplb2YodTMyKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uZXBpOyBpKyspIHsKLQkJYnVmc2l6ZSA9IChidWZzaXplcyAmJiBpIDwgbGVuKSA/IGJ1ZnNpemVzW2ldIDogMTAyNDsKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAiZXBpYnVmc2l6ZXMiLCBpLCAmYnVmc2l6ZSkpCisJCQlidWZzaXplID0gMTAyNDsKIAkJcmV0ID0gZ3JfZXBfaW5pdChkZXYsIGksIDEsIGJ1ZnNpemUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTIwNjUsOSArMjA2Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQorc3RhdGljIGludCBncl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZ3JfdWRjICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCXN0cnVjdCBncl91ZGMgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKGRldi0+YWRkZWQpCiAJCXVzYl9kZWxfZ2FkZ2V0X3VkYygmZGV2LT5nYWRnZXQpOyAvKiBTaHV0cyBldmVyeXRoaW5nIGRvd24gKi8KQEAgLTIwNzcsNyArMjA3OCw3IEBACiAJZ3JfZGZzX2RlbGV0ZShkZXYpOwogCWlmIChkZXYtPmRlc2NfcG9vbCkKIAkJZG1hX3Bvb2xfZGVzdHJveShkZXYtPmRlc2NfcG9vbCk7Ci0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWdyX2ZyZWVfcmVxdWVzdCgmZGV2LT5lcGlbMF0uZXAsICZkZXYtPmVwMHJlcWktPnJlcSk7CiAJZ3JfZnJlZV9yZXF1ZXN0KCZkZXYtPmVwb1swXS5lcCwgJmRldi0+ZXAwcmVxby0+cmVxKTsKQEAgLTIwOTAsNyArMjA5MSw3IEBACiAJCQkJCSBJUlFGX1NIQVJFRCwgZHJpdmVyX25hbWUsIGRldik7CiB9CiAKLXN0YXRpYyBpbnQgZ3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCitzdGF0aWMgaW50IGdyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGdyX3VkYyAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMjA5OCwzMCArMjA5OSwzMiBAQAogCWludCByZXR2YWw7CiAJdTMyIHN0YXR1czsKIAotCWRldiA9IGRldm1fa3phbGxvYygmb2ZkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGV2LT5kZXYgPSAmb2ZkZXYtPmRldjsKKwlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uob2ZkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LT5kZXYsIHJlcyk7CiAJaWYgKElTX0VSUihyZWdzKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVncyk7CiAKLQlkZXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+ZGV2LT5vZl9ub2RlLCAwKTsKLQlpZiAoIWRldi0+aXJxKSB7CisJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkZXYtPmlycSA8PSAwKSB7CiAJCWRldl9lcnIoZGV2LT5kZXYsICJObyBpcnEgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBTb21lIGNvcmUgY29uZmlndXJhdGlvbnMgaGFzIHNlcGFyYXRlIGlycXMgZm9yIElOIGFuZCBPVVQgZXZlbnRzICovCi0JZGV2LT5pcnFpID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5kZXYtPm9mX25vZGUsIDEpOwotCWlmIChkZXYtPmlycWkpIHsKLQkJZGV2LT5pcnFvID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5kZXYtPm9mX25vZGUsIDIpOwotCQlpZiAoIWRldi0+aXJxbykgeworCWRldi0+aXJxaSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKGRldi0+aXJxaSA+IDApIHsKKwkJZGV2LT5pcnFvID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKKwkJaWYgKGRldi0+aXJxbyA8PSAwKSB7CiAJCQlkZXZfZXJyKGRldi0+ZGV2LCAiRm91bmQgaXJxaSBidXQgbm90IGlycW9cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KKwl9IGVsc2UgeworCQlkZXYtPmlycWkgPSAwOwogCX0KIAogCWRldi0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKQEAgLTIxMzIsNyArMjEzNSw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CiAJZGV2LT5yZWdzID0gcmVnczsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBlbmRwb2ludHMgYW5kIGRhdGEgaW50ZXJmYWNlIG1vZGUgKi8KIAlzdGF0dXMgPSBncl9yZWFkMzIoJmRldi0+cmVncy0+c3RhdHVzKTsKQEAgLTIyMDQsNyArMjIwNyw3IEBACiAJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CiAKIAlpZiAocmV0dmFsKQotCQlncl9yZW1vdmUob2ZkZXYpOworCQlncl9yZW1vdmUocGRldik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCBhOTI1ZDBjLi5lZTZjMTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMTQ5NCw2ICsxNDk0LDcgQEAKIAkJICovCiAJCWlmICh2YWx1ZSA9PSAwKSB7CiAJCQlJTkZPIChkZXYsICJjb25maWd1cmF0aW9uICMlZFxuIiwgZGV2LT5jdXJyZW50X2NvbmZpZyk7CisJCQl1c2JfZ2FkZ2V0X3NldF9zdGF0ZShnYWRnZXQsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKIAkJCWlmIChkZXYtPnVzZXJtb2RlX3NldHVwKSB7CiAJCQkJZGV2LT5zZXR1cF9jYW5fc3RhbGwgPSAwOwogCQkJCWdvdG8gZGVsZWdhdGU7CkBAIC0xNTAxLDcgKzE1MDIsNyBAQAogCQl9CiAJCWJyZWFrOwogCi0jaWZuZGVmCUNPTkZJR19VU0JfR0FER0VUX1BYQTI1WAorI2lmbmRlZglDT05GSUdfVVNCX1BYQTI1WAogCS8qIFBYQSBhdXRvbWFnaWNhbGx5IGhhbmRsZXMgdGhpcyByZXF1ZXN0IHRvbyAqLwogCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKIAkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAweDgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L202NjU5Mi11ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tNjY1OTItdWRjLmMKaW5kZXggOGNhZTAxZC4uMGQxNzE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L202NjU5Mi11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbTY2NTkyLXVkYy5jCkBAIC0xNTk0LDcgKzE1OTQsNiBAQAogCW02NjU5MiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtNjY1OTIpLCBHRlBfS0VSTkVMKTsKIAlpZiAobTY2NTkyID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJcHJfZXJyKCJremFsbG9jIGVycm9yXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91M2RfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3UzZF9jb3JlLmMKaW5kZXggZDJjYTU5ZS4uMTYyNDg3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3UzZF9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3UzZF9jb3JlLmMKQEAgLTI5NywxMCArMjk3LDggQEAKIAl1M2QgPSByZXEtPmVwLT51M2Q7CiAKIAl0cmIgPSBremFsbG9jKHNpemVvZigqdHJiKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF0cmIpIHsKLQkJZGV2X2Vycih1M2QtPmRldiwgIiVzLCB0cmIgYWxsb2MgZmFpbFxuIiwgX19mdW5jX18pOworCWlmICghdHJiKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAkvKgogCSAqIEJlIGNhcmVmdWwgdGhhdCBubyBfR0ZQX0hJR0hNRU0gaXMgc2V0LApAQCAtNDQ2LDE3ICs0NDQsMTIgQEAKIAkJCXRyYl9udW0rKzsKIAogCQl0cmIgPSBrY2FsbG9jKHRyYl9udW0sIHNpemVvZigqdHJiKSwgR0ZQX0FUT01JQyk7Ci0JCWlmICghdHJiKSB7Ci0JCQlkZXZfZXJyKHUzZC0+ZGV2LAotCQkJCQkiJXMsIHRyYiBhbGxvYyBmYWlsXG4iLCBfX2Z1bmNfXyk7CisJCWlmICghdHJiKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KIAogCQl0cmJfaHcgPSBrY2FsbG9jKHRyYl9udW0sIHNpemVvZigqdHJiX2h3KSwgR0ZQX0FUT01JQyk7CiAJCWlmICghdHJiX2h3KSB7CiAJCQlrZnJlZSh0cmIpOwotCQkJZGV2X2Vycih1M2QtPmRldiwKLQkJCQkJIiVzLCB0cmJfaHcgYWxsb2MgZmFpbFxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIApAQCAtMTgxMSw3ICsxODA0LDYgQEAKIAogCXUzZCA9IGt6YWxsb2Moc2l6ZW9mKCp1M2QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXUzZCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHUzZFxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jX3ByaXZhdGU7CiAJfQpAQCAtMTkwNSw3ICsxODk3LDYgQEAKIAlzaXplID0gdTNkLT5tYXhfZXBzICogc2l6ZW9mKHN0cnVjdCBtdl91M2RfZXApICogMjsKIAl1M2QtPmVwcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1M2QtPmVwcykgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImFsbG9jYXRlIGVwIG1lbW9yeSBmYWlsZWRcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvY19lcHM7CiAJfQpAQCAtMTkxMyw3ICsxOTA0LDYgQEAKIAkvKiBpbml0aWFsaXplIGVwMCBzdGF0dXMgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KIAl1M2QtPnN0YXR1c19yZXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXZfdTNkX3JlcSkgKyA4LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXUzZC0+c3RhdHVzX3JlcSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImFsbG9jYXRlIHN0YXR1c19yZXEgbWVtb3J5IGZhaWxlZFxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jX3N0YXR1c19yZXE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggNDNlNWUyZi4uMzAwYjNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0xOTcyLDcgKzE5NzIsOSBAQAogCWRldmljZV9yZW1vdmVfZmlsZSAoJmRldi0+cGRldi0+ZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOwogCWRldmljZV9yZW1vdmVfZmlsZSAoJmRldi0+cGRldi0+ZGV2LCAmZGV2X2F0dHJfcXVldWVzKTsKIAotCURFQlVHIChkZXYsICJ1bnJlZ2lzdGVyZWQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCURFQlVHKGRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwKKwkJCWRyaXZlciA/IGRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiIik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IGFmZjBhNjcuLmI2OThhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTE5MDQsNyArMTkwNCw2IEBACiAJcjhhNjY1OTcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcjhhNjY1OTcpLCBHRlBfS0VSTkVMKTsKIAlpZiAocjhhNjY1OTcgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGVycm9yXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggN2VkNDUyZC4uOTVkMjMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTc2MSw3ICs3NjEsNyBAQAogCXJldHVybiBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnKGNvbmZpZ05yLAogCQkJCQkgIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUKTsKIH0KLUVYUE9SVF9TWU1CT0wocm5kaXNfc2lnbmFsX2Nvbm5lY3QpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfc2lnbmFsX2Nvbm5lY3QpOwogCiBpbnQgcm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3QoaW50IGNvbmZpZ05yKQogewpAQCAtNzcwLDcgKzc3MCw3IEBACiAJcmV0dXJuIHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2coY29uZmlnTnIsCiAJCQkJCSAgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpOwogfQotRVhQT1JUX1NZTUJPTChybmRpc19zaWduYWxfZGlzY29ubmVjdCk7CitFWFBPUlRfU1lNQk9MX0dQTChybmRpc19zaWduYWxfZGlzY29ubmVjdCk7CiAKIHZvaWQgcm5kaXNfdW5pbml0KGludCBjb25maWdOcikKIHsKQEAgLTc4NSwxMyArNzg1LDEzIEBACiAJd2hpbGUgKChidWYgPSBybmRpc19nZXRfbmV4dF9yZXNwb25zZShjb25maWdOciwgJmxlbmd0aCkpKQogCQlybmRpc19mcmVlX3Jlc3BvbnNlKGNvbmZpZ05yLCBidWYpOwogfQotRVhQT1JUX1NZTUJPTChybmRpc191bmluaXQpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfdW5pbml0KTsKIAogdm9pZCBybmRpc19zZXRfaG9zdF9tYWMoaW50IGNvbmZpZ05yLCBjb25zdCB1OCAqYWRkcikKIHsKIAlybmRpc19wZXJfZGV2X3BhcmFtc1tjb25maWdOcl0uaG9zdF9tYWMgPSBhZGRyOwogfQotRVhQT1JUX1NZTUJPTChybmRpc19zZXRfaG9zdF9tYWMpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfc2V0X2hvc3RfbWFjKTsKIAogLyoKICAqIE1lc3NhZ2UgUGFyc2VyCkBAIC04NzQsNyArODc0LDcgQEAKIAogCXJldHVybiAtRU5PVFNVUFA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJuZGlzX21zZ19wYXJzZXIpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfbXNnX3BhcnNlcik7CiAKIGludCBybmRpc19yZWdpc3Rlcih2b2lkICgqcmVzcF9hdmFpbCkodm9pZCAqdiksIHZvaWQgKnYpCiB7CkBAIC04OTYsNyArODk2LDcgQEAKIAogCXJldHVybiAtRU5PREVWOwogfQotRVhQT1JUX1NZTUJPTChybmRpc19yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTChybmRpc19yZWdpc3Rlcik7CiAKIHZvaWQgcm5kaXNfZGVyZWdpc3RlcihpbnQgY29uZmlnTnIpCiB7CkBAIC05MDUsNyArOTA1LDcgQEAKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybjsKIAlybmRpc19wZXJfZGV2X3BhcmFtc1tjb25maWdOcl0udXNlZCA9IDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJuZGlzX2RlcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfZGVyZWdpc3Rlcik7CiAKIGludCBybmRpc19zZXRfcGFyYW1fZGV2KHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKmNkY19maWx0ZXIpCiB7CkBAIC05MTksNyArOTE5LDcgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChybmRpc19zZXRfcGFyYW1fZGV2KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJuZGlzX3NldF9wYXJhbV9kZXYpOwogCiBpbnQgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvcih1OCBjb25maWdOciwgdTMyIHZlbmRvcklELCBjb25zdCBjaGFyICp2ZW5kb3JEZXNjcikKIHsKQEAgLTkzMiw3ICs5MzIsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJuZGlzX3NldF9wYXJhbV92ZW5kb3IpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfc2V0X3BhcmFtX3ZlbmRvcik7CiAKIGludCBybmRpc19zZXRfcGFyYW1fbWVkaXVtKHU4IGNvbmZpZ05yLCB1MzIgbWVkaXVtLCB1MzIgc3BlZWQpCiB7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChybmRpc19zZXRfcGFyYW1fbWVkaXVtKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJuZGlzX3NldF9wYXJhbV9tZWRpdW0pOwogCiB2b2lkIHJuZGlzX2FkZF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTk1OSw3ICs5NTksNyBAQAogCWhlYWRlci0+RGF0YU9mZnNldCA9IGNwdV90b19sZTMyKDM2KTsKIAloZWFkZXItPkRhdGFMZW5ndGggPSBjcHVfdG9fbGUzMihza2ItPmxlbiAtIHNpemVvZigqaGVhZGVyKSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHJuZGlzX2FkZF9oZHIpOworRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfYWRkX2hkcik7CiAKIHZvaWQgcm5kaXNfZnJlZV9yZXNwb25zZShpbnQgY29uZmlnTnIsIHU4ICpidWYpCiB7CkBAIC05NzYsNyArOTc2LDcgQEAKIAkJfQogCX0KIH0KLUVYUE9SVF9TWU1CT0wocm5kaXNfZnJlZV9yZXNwb25zZSk7CitFWFBPUlRfU1lNQk9MX0dQTChybmRpc19mcmVlX3Jlc3BvbnNlKTsKIAogdTggKnJuZGlzX2dldF9uZXh0X3Jlc3BvbnNlKGludCBjb25maWdOciwgdTMyICpsZW5ndGgpCiB7CkBAIC05OTgsNyArOTk4LDcgQEAKIAogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChybmRpc19nZXRfbmV4dF9yZXNwb25zZSk7CitFWFBPUlRfU1lNQk9MX0dQTChybmRpc19nZXRfbmV4dF9yZXNwb25zZSk7CiAKIHN0YXRpYyBybmRpc19yZXNwX3QgKnJuZGlzX2FkZF9yZXNwb25zZShpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpCiB7CkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogCXNrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYik7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJuZGlzX3JtX2hkcik7CitFWFBPUlRfU1lNQk9MX0dQTChybmRpc19ybV9oZHIpOwogCiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWY1NDlmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKiBkcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBVU0IyLjAgSGlnaHNwZWVkL090RyBTeW5vcHNpcyBEV0MyIGRldmljZSBibG9jayByZWdpc3RlcnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX1JFR1NfVVNCX0hTT1RHX0gKLSNkZWZpbmUgX19SRUdTX1VTQl9IU09UR19IIF9fRklMRV9fCi0KLSNkZWZpbmUgSFNPVEdfUkVHKHgpICh4KQotCi0jZGVmaW5lIEdPVEdDVEwJCQkJSFNPVEdfUkVHKDB4MDAwKQotI2RlZmluZSBHT1RHQ1RMX0JTRVNWTEQJCQkoMSA8PCAxOSkKLSNkZWZpbmUgR09UR0NUTF9BU0VTVkxECQkJKDEgPDwgMTgpCi0jZGVmaW5lIEdPVEdDVExfREJOQ19TSE9SVAkJCSgxIDw8IDE3KQotI2RlZmluZSBHT1RHQ1RMX0NPTklEX0IJCQkoMSA8PCAxNikKLSNkZWZpbmUgR09UR0NUTF9ERVZITlBFTgkJCSgxIDw8IDExKQotI2RlZmluZSBHT1RHQ1RMX0hTU0VUSE5QRU4JCQkoMSA8PCAxMCkKLSNkZWZpbmUgR09UR0NUTF9ITlBSRVEJCQkJKDEgPDwgOSkKLSNkZWZpbmUgR09UR0NUTF9IU1RORUdTQ1MJCQkoMSA8PCA4KQotI2RlZmluZSBHT1RHQ1RMX1NFU1JFUQkJCQkoMSA8PCAxKQotI2RlZmluZSBHT1RHQ1RMX1NFU1JFUVNDUwkJCSgxIDw8IDApCi0KLSNkZWZpbmUgR09UR0lOVAkJCQlIU09UR19SRUcoMHgwMDQpCi0jZGVmaW5lIEdPVEdJTlRfRGJuY2VEb25lCQkJKDEgPDwgMTkpCi0jZGVmaW5lIEdPVEdJTlRfQURldlRPVVRDaGcJCQkoMSA8PCAxOCkKLSNkZWZpbmUgR09UR0lOVF9Ic3ROZWdEZXQJCQkoMSA8PCAxNykKLSNkZWZpbmUgR09UR0lOVF9Ic3RuZWdTdWNTdHNDaG5nCQkoMSA8PCA5KQotI2RlZmluZSBHT1RHSU5UX1Nlc1JlcVN1Y1N0c0NobmcJCSgxIDw8IDgpCi0jZGVmaW5lIEdPVEdJTlRfU2VzRW5kRGV0CQkJKDEgPDwgMikKLQotI2RlZmluZSBHQUhCQ0ZHCQkJCUhTT1RHX1JFRygweDAwOCkKLSNkZWZpbmUgR0FIQkNGR19QVHhGRW1wTHZsCQkJKDEgPDwgOCkKLSNkZWZpbmUgR0FIQkNGR19OUFR4RkVtcEx2bAkJCSgxIDw8IDcpCi0jZGVmaW5lIEdBSEJDRkdfRE1BRW4JCQkJKDEgPDwgNSkKLSNkZWZpbmUgR0FIQkNGR19IQnN0TGVuX01BU0sJCQkoMHhmIDw8IDEpCi0jZGVmaW5lIEdBSEJDRkdfSEJzdExlbl9TSElGVAkJCSgxKQotI2RlZmluZSBHQUhCQ0ZHX0hCc3RMZW5fU2luZ2xlCQkJKDB4MCA8PCAxKQotI2RlZmluZSBHQUhCQ0ZHX0hCc3RMZW5fSW5jcgkJCSgweDEgPDwgMSkKLSNkZWZpbmUgR0FIQkNGR19IQnN0TGVuX0luY3I0CQkJKDB4MyA8PCAxKQotI2RlZmluZSBHQUhCQ0ZHX0hCc3RMZW5fSW5jcjgJCQkoMHg1IDw8IDEpCi0jZGVmaW5lIEdBSEJDRkdfSEJzdExlbl9JbmNyMTYJCQkoMHg3IDw8IDEpCi0jZGVmaW5lIEdBSEJDRkdfR2xibEludHJFbgkJCSgxIDw8IDApCi0KLSNkZWZpbmUgR1VTQkNGRwkJCQlIU09UR19SRUcoMHgwMEMpCi0jZGVmaW5lIEdVU0JDRkdfUEhZTFBDbGtTZWwJCQkoMSA8PCAxNSkKLSNkZWZpbmUgR1VTQkNGR19ITlBDYXAJCQkJKDEgPDwgOSkKLSNkZWZpbmUgR1VTQkNGR19TUlBDYXAJCQkJKDEgPDwgOCkKLSNkZWZpbmUgR1VTQkNGR19QSFlJZjE2CQkJKDEgPDwgMykKLSNkZWZpbmUgR1VTQkNGR19QSFlJZjgJCQkJKDAgPDwgMykKLSNkZWZpbmUgR1VTQkNGR19UT3V0Q2FsX01BU0sJCQkoMHg3IDw8IDApCi0jZGVmaW5lIEdVU0JDRkdfVE91dENhbF9TSElGVAkJCSgwKQotI2RlZmluZSBHVVNCQ0ZHX1RPdXRDYWxfTElNSVQJCQkoMHg3KQotI2RlZmluZSBHVVNCQ0ZHX1RPdXRDYWwoX3gpCQkJKChfeCkgPDwgMCkKLQotI2RlZmluZSBHUlNUQ1RMCQkJCUhTT1RHX1JFRygweDAxMCkKLQotI2RlZmluZSBHUlNUQ1RMX0FIQklkbGUJCQkoMSA8PCAzMSkKLSNkZWZpbmUgR1JTVENUTF9ETUFSZXEJCQkJKDEgPDwgMzApCi0jZGVmaW5lIEdSU1RDVExfVHhGTnVtX01BU0sJCQkoMHgxZiA8PCA2KQotI2RlZmluZSBHUlNUQ1RMX1R4Rk51bV9TSElGVAkJCSg2KQotI2RlZmluZSBHUlNUQ1RMX1R4Rk51bV9MSU1JVAkJCSgweDFmKQotI2RlZmluZSBHUlNUQ1RMX1R4Rk51bShfeCkJCQkoKF94KSA8PCA2KQotI2RlZmluZSBHUlNUQ1RMX1R4RkZsc2gJCQkoMSA8PCA1KQotI2RlZmluZSBHUlNUQ1RMX1J4RkZsc2gJCQkoMSA8PCA0KQotI2RlZmluZSBHUlNUQ1RMX0lOVGtuUUZsc2gJCQkoMSA8PCAzKQotI2RlZmluZSBHUlNUQ1RMX0ZybUNudHJSc3QJCQkoMSA8PCAyKQotI2RlZmluZSBHUlNUQ1RMX0hTZnRSc3QJCQkoMSA8PCAxKQotI2RlZmluZSBHUlNUQ1RMX0NTZnRSc3QJCQkoMSA8PCAwKQotCi0jZGVmaW5lIEdJTlRTVFMJCQkJSFNPVEdfUkVHKDB4MDE0KQotI2RlZmluZSBHSU5UTVNLCQkJCUhTT1RHX1JFRygweDAxOCkKLQotI2RlZmluZSBHSU5UU1RTX1drVXBJbnQJCQkoMSA8PCAzMSkKLSNkZWZpbmUgR0lOVFNUU19TZXNzUmVxSW50CQkJKDEgPDwgMzApCi0jZGVmaW5lIEdJTlRTVFNfRGlzY29ubkludAkJCSgxIDw8IDI5KQotI2RlZmluZSBHSU5UU1RTX0NvbklEU3RzQ2huZwkJCSgxIDw8IDI4KQotI2RlZmluZSBHSU5UU1RTX1BUeEZFbXAJCQkoMSA8PCAyNikKLSNkZWZpbmUgR0lOVFNUU19IQ2hJbnQJCQkJKDEgPDwgMjUpCi0jZGVmaW5lIEdJTlRTVFNfUHJ0SW50CQkJCSgxIDw8IDI0KQotI2RlZmluZSBHSU5UU1RTX0ZldFN1c3AJCQkoMSA8PCAyMikKLSNkZWZpbmUgR0lOVFNUU19pbmNvbXBJUAkJCSgxIDw8IDIxKQotI2RlZmluZSBHSU5UU1RTX0luY29tcGxTT0lOCQkJKDEgPDwgMjApCi0jZGVmaW5lIEdJTlRTVFNfT0VQSW50CQkJCSgxIDw8IDE5KQotI2RlZmluZSBHSU5UU1RTX0lFUEludAkJCQkoMSA8PCAxOCkKLSNkZWZpbmUgR0lOVFNUU19FUE1pcwkJCQkoMSA8PCAxNykKLSNkZWZpbmUgR0lOVFNUU19FT1BGCQkJCSgxIDw8IDE1KQotI2RlZmluZSBHSU5UU1RTX0lTT3V0RHJvcAkJCSgxIDw8IDE0KQotI2RlZmluZSBHSU5UU1RTX0VudW1Eb25lCQkJKDEgPDwgMTMpCi0jZGVmaW5lIEdJTlRTVFNfVVNCUnN0CQkJCSgxIDw8IDEyKQotI2RlZmluZSBHSU5UU1RTX1VTQlN1c3AJCQkoMSA8PCAxMSkKLSNkZWZpbmUgR0lOVFNUU19Fcmx5U3VzcAkJCSgxIDw8IDEwKQotI2RlZmluZSBHSU5UU1RTX0dPVVROYWtFZmYJCQkoMSA8PCA3KQotI2RlZmluZSBHSU5UU1RTX0dJTk5ha0VmZgkJCSgxIDw8IDYpCi0jZGVmaW5lIEdJTlRTVFNfTlBUeEZFbXAJCQkoMSA8PCA1KQotI2RlZmluZSBHSU5UU1RTX1J4Rkx2bAkJCQkoMSA8PCA0KQotI2RlZmluZSBHSU5UU1RTX1NPRgkJCQkoMSA8PCAzKQotI2RlZmluZSBHSU5UU1RTX09UR0ludAkJCQkoMSA8PCAyKQotI2RlZmluZSBHSU5UU1RTX01vZGVNaXMJCQkoMSA8PCAxKQotI2RlZmluZSBHSU5UU1RTX0N1ck1vZF9Ib3N0CQkJKDEgPDwgMCkKLQotI2RlZmluZSBHUlhTVFNSCQkJCUhTT1RHX1JFRygweDAxQykKLSNkZWZpbmUgR1JYU1RTUAkJCQlIU09UR19SRUcoMHgwMjApCi0KLSNkZWZpbmUgR1JYU1RTX0ZOX01BU0sJCQkJKDB4N2YgPDwgMjUpCi0jZGVmaW5lIEdSWFNUU19GTl9TSElGVAkJCSgyNSkKLQotI2RlZmluZSBHUlhTVFNfUGt0U3RzX01BU0sJCQkoMHhmIDw8IDE3KQotI2RlZmluZSBHUlhTVFNfUGt0U3RzX1NISUZUCQkJKDE3KQotI2RlZmluZSBHUlhTVFNfUGt0U3RzX0dsb2JhbE91dE5BSwkJKDB4MSA8PCAxNykKLSNkZWZpbmUgR1JYU1RTX1BrdFN0c19PdXRSWAkJCSgweDIgPDwgMTcpCi0jZGVmaW5lIEdSWFNUU19Qa3RTdHNfT3V0RG9uZQkJCSgweDMgPDwgMTcpCi0jZGVmaW5lIEdSWFNUU19Qa3RTdHNfU2V0dXBEb25lCQkoMHg0IDw8IDE3KQotI2RlZmluZSBHUlhTVFNfUGt0U3RzX1NldHVwUlgJCQkoMHg2IDw8IDE3KQotCi0jZGVmaW5lIEdSWFNUU19EUElEX01BU0sJCQkoMHgzIDw8IDE1KQotI2RlZmluZSBHUlhTVFNfRFBJRF9TSElGVAkJCSgxNSkKLSNkZWZpbmUgR1JYU1RTX0J5dGVDbnRfTUFTSwkJCSgweDdmZiA8PCA0KQotI2RlZmluZSBHUlhTVFNfQnl0ZUNudF9TSElGVAkJCSg0KQotI2RlZmluZSBHUlhTVFNfRVBOdW1fTUFTSwkJCSgweGYgPDwgMCkKLSNkZWZpbmUgR1JYU1RTX0VQTnVtX1NISUZUCQkJKDApCi0KLSNkZWZpbmUgR1JYRlNJWgkJCQlIU09UR19SRUcoMHgwMjQpCi0KLSNkZWZpbmUgR05QVFhGU0laCQkJCUhTT1RHX1JFRygweDAyOCkKLQotI2RlZmluZSBHTlBUWEZTSVpfTlBUeEZEZXBfTUFTSwkJKDB4ZmZmZiA8PCAxNikKLSNkZWZpbmUgR05QVFhGU0laX05QVHhGRGVwX1NISUZUCQkoMTYpCi0jZGVmaW5lIEdOUFRYRlNJWl9OUFR4RkRlcF9MSU1JVAkJKDB4ZmZmZikKLSNkZWZpbmUgR05QVFhGU0laX05QVHhGRGVwKF94KQkJCSgoX3gpIDw8IDE2KQotI2RlZmluZSBHTlBUWEZTSVpfTlBUeEZTdEFkZHJfTUFTSwkJKDB4ZmZmZiA8PCAwKQotI2RlZmluZSBHTlBUWEZTSVpfTlBUeEZTdEFkZHJfU0hJRlQJCSgwKQotI2RlZmluZSBHTlBUWEZTSVpfTlBUeEZTdEFkZHJfTElNSVQJCSgweGZmZmYpCi0jZGVmaW5lIEdOUFRYRlNJWl9OUFR4RlN0QWRkcihfeCkJCSgoX3gpIDw8IDApCi0KLSNkZWZpbmUgR05QVFhTVFMJCQkJSFNPVEdfUkVHKDB4MDJDKQotCi0jZGVmaW5lIEdOUFRYU1RTX05QdHhRVG9wX01BU0sJCQkoMHg3ZiA8PCAyNCkKLSNkZWZpbmUgR05QVFhTVFNfTlB0eFFUb3BfU0hJRlQJCSgyNCkKLQotI2RlZmluZSBHTlBUWFNUU19OUFR4UVNwY0F2YWlsX01BU0sJCSgweGZmIDw8IDE2KQotI2RlZmluZSBHTlBUWFNUU19OUFR4UVNwY0F2YWlsX1NISUZUCQkoMTYpCi0jZGVmaW5lIEdOUFRYU1RTX05QVHhRU3BjQXZhaWxfR0VUKF92KQkJKCgoX3YpID4+IDE2KSAmIDB4ZmYpCi0KLSNkZWZpbmUgR05QVFhTVFNfTlBUeEZTcGNBdmFpbF9NQVNLCQkoMHhmZmZmIDw8IDApCi0jZGVmaW5lIEdOUFRYU1RTX05QVHhGU3BjQXZhaWxfU0hJRlQJCSgwKQotI2RlZmluZSBHTlBUWFNUU19OUFR4RlNwY0F2YWlsX0dFVChfdikJCSgoKF92KSA+PiAwKSAmIDB4ZmZmZikKLQotCi0jZGVmaW5lIEhQVFhGU0laCQkJCUhTT1RHX1JFRygweDEwMCkKLQotI2RlZmluZSBEUFRYRlNJWm4oX2EpCQlIU09UR19SRUcoMHgxMDQgKyAoKChfYSkgLSAxKSAqIDQpKQotCi0jZGVmaW5lIERQVFhGU0labl9EUFR4RlNpemVfTUFTSwkJKDB4ZmZmZiA8PCAxNikKLSNkZWZpbmUgRFBUWEZTSVpuX0RQVHhGU2l6ZV9TSElGVAkJKDE2KQotI2RlZmluZSBEUFRYRlNJWm5fRFBUeEZTaXplX0dFVChfdikJCSgoKF92KSA+PiAxNikgJiAweGZmZmYpCi0jZGVmaW5lIERQVFhGU0labl9EUFR4RlNpemVfTElNSVQJCSgweGZmZmYpCi0jZGVmaW5lIERQVFhGU0labl9EUFR4RlNpemUoX3gpCQkoKF94KSA8PCAxNikKLQotI2RlZmluZSBEUFRYRlNJWm5fRFBUeEZTdEFkZHJfTUFTSwkJKDB4ZmZmZiA8PCAwKQotI2RlZmluZSBEUFRYRlNJWm5fRFBUeEZTdEFkZHJfU0hJRlQJCSgwKQotCi0vKiBEZXZpY2UgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRENGRwkJCQkJSFNPVEdfUkVHKDB4ODAwKQotCi0jZGVmaW5lIERDRkdfRVBNaXNDbnRfTUFTSwkJCSgweDFmIDw8IDE4KQotI2RlZmluZSBEQ0ZHX0VQTWlzQ250X1NISUZUCQkJKDE4KQotI2RlZmluZSBEQ0ZHX0VQTWlzQ250X0xJTUlUCQkJKDB4MWYpCi0jZGVmaW5lIERDRkdfRVBNaXNDbnQoX3gpCQkJKChfeCkgPDwgMTgpCi0KLSNkZWZpbmUgRENGR19QZXJGckludF9NQVNLCQkJKDB4MyA8PCAxMSkKLSNkZWZpbmUgRENGR19QZXJGckludF9TSElGVAkJCSgxMSkKLSNkZWZpbmUgRENGR19QZXJGckludF9MSU1JVAkJCSgweDMpCi0jZGVmaW5lIERDRkdfUGVyRnJJbnQoX3gpCQkJKChfeCkgPDwgMTEpCi0KLSNkZWZpbmUgRENGR19EZXZBZGRyX01BU0sJCQkoMHg3ZiA8PCA0KQotI2RlZmluZSBEQ0ZHX0RldkFkZHJfU0hJRlQJCQkoNCkKLSNkZWZpbmUgRENGR19EZXZBZGRyX0xJTUlUCQkJKDB4N2YpCi0jZGVmaW5lIERDRkdfRGV2QWRkcihfeCkJCQkoKF94KSA8PCA0KQotCi0jZGVmaW5lIERDRkdfTlpTdHNPVVRIU2hrCQkJKDEgPDwgMikKLQotI2RlZmluZSBEQ0ZHX0RldlNwZF9NQVNLCQkJKDB4MyA8PCAwKQotI2RlZmluZSBEQ0ZHX0RldlNwZF9TSElGVAkJCSgwKQotI2RlZmluZSBEQ0ZHX0RldlNwZF9IUwkJCQkoMHgwIDw8IDApCi0jZGVmaW5lIERDRkdfRGV2U3BkX0ZTCQkJCSgweDEgPDwgMCkKLSNkZWZpbmUgRENGR19EZXZTcGRfTFMJCQkJKDB4MiA8PCAwKQotI2RlZmluZSBEQ0ZHX0RldlNwZF9GUzQ4CQkJKDB4MyA8PCAwKQotCi0jZGVmaW5lIERDVEwJCQkJCUhTT1RHX1JFRygweDgwNCkKLQotI2RlZmluZSBEQ1RMX1BXUk9uUHJnRG9uZQkJCSgxIDw8IDExKQotI2RlZmluZSBEQ1RMX0NHT1VUTmFrCQkJCSgxIDw8IDEwKQotI2RlZmluZSBEQ1RMX1NHT1VUTmFrCQkJCSgxIDw8IDkpCi0jZGVmaW5lIERDVExfQ0dOUEluTkFLCQkJCSgxIDw8IDgpCi0jZGVmaW5lIERDVExfU0dOUEluTkFLCQkJCSgxIDw8IDcpCi0jZGVmaW5lIERDVExfVHN0Q3RsX01BU0sJCQkoMHg3IDw8IDQpCi0jZGVmaW5lIERDVExfVHN0Q3RsX1NISUZUCQkJKDQpCi0jZGVmaW5lIERDVExfR09VVE5ha1N0cwkJCSgxIDw8IDMpCi0jZGVmaW5lIERDVExfR05QSU5OYWtTdHMJCQkoMSA8PCAyKQotI2RlZmluZSBEQ1RMX1NmdERpc2NvbgkJCQkoMSA8PCAxKQotI2RlZmluZSBEQ1RMX1JtdFdrVXBTaWcJCQkoMSA8PCAwKQotCi0jZGVmaW5lIERTVFMJCQkJCUhTT1RHX1JFRygweDgwOCkKLQotI2RlZmluZSBEU1RTX1NPRkZOX01BU0sJCQkoMHgzZmZmIDw8IDgpCi0jZGVmaW5lIERTVFNfU09GRk5fU0hJRlQJCQkoOCkKLSNkZWZpbmUgRFNUU19TT0ZGTl9MSU1JVAkJCSgweDNmZmYpCi0jZGVmaW5lIERTVFNfU09GRk4oX3gpCQkJCSgoX3gpIDw8IDgpCi0jZGVmaW5lIERTVFNfRXJyYXRpY0VycgkJCSgxIDw8IDMpCi0jZGVmaW5lIERTVFNfRW51bVNwZF9NQVNLCQkJKDB4MyA8PCAxKQotI2RlZmluZSBEU1RTX0VudW1TcGRfU0hJRlQJCQkoMSkKLSNkZWZpbmUgRFNUU19FbnVtU3BkX0hTCQkJKDB4MCA8PCAxKQotI2RlZmluZSBEU1RTX0VudW1TcGRfRlMJCQkoMHgxIDw8IDEpCi0jZGVmaW5lIERTVFNfRW51bVNwZF9MUwkJCSgweDIgPDwgMSkKLSNkZWZpbmUgRFNUU19FbnVtU3BkX0ZTNDgJCQkoMHgzIDw8IDEpCi0KLSNkZWZpbmUgRFNUU19TdXNwU3RzCQkJCSgxIDw8IDApCi0KLSNkZWZpbmUgRElFUE1TSwkJCQlIU09UR19SRUcoMHg4MTApCi0KLSNkZWZpbmUgRElFUE1TS19UeEZJRk9FbXB0eQkJCSgxIDw8IDcpCi0jZGVmaW5lIERJRVBNU0tfSU5FUE5ha0VmZk1zawkJCSgxIDw8IDYpCi0jZGVmaW5lIERJRVBNU0tfSU5Ua25FUE1pc01zawkJCSgxIDw8IDUpCi0jZGVmaW5lIERJRVBNU0tfSU5Ua25UWEZFbXBNc2sJCQkoMSA8PCA0KQotI2RlZmluZSBESUVQTVNLX1RpbWVPVVRNc2sJCQkoMSA8PCAzKQotI2RlZmluZSBESUVQTVNLX0FIQkVyck1zawkJCSgxIDw8IDIpCi0jZGVmaW5lIERJRVBNU0tfRVBEaXNibGRNc2sJCQkoMSA8PCAxKQotI2RlZmluZSBESUVQTVNLX1hmZXJDb21wbE1zawkJCSgxIDw8IDApCi0KLSNkZWZpbmUgRE9FUE1TSwkJCQlIU09UR19SRUcoMHg4MTQpCi0KLSNkZWZpbmUgRE9FUE1TS19CYWNrMkJhY2tTZXR1cAkJCSgxIDw8IDYpCi0jZGVmaW5lIERPRVBNU0tfT1VUVGtuRVBkaXNNc2sJCQkoMSA8PCA0KQotI2RlZmluZSBET0VQTVNLX1NldHVwTXNrCQkJKDEgPDwgMykKLSNkZWZpbmUgRE9FUE1TS19BSEJFcnJNc2sJCQkoMSA8PCAyKQotI2RlZmluZSBET0VQTVNLX0VQRGlzYmxkTXNrCQkJKDEgPDwgMSkKLSNkZWZpbmUgRE9FUE1TS19YZmVyQ29tcGxNc2sJCQkoMSA8PCAwKQotCi0jZGVmaW5lIERBSU5UCQkJCQlIU09UR19SRUcoMHg4MTgpCi0jZGVmaW5lIERBSU5UTVNLCQkJCUhTT1RHX1JFRygweDgxQykKLQotI2RlZmluZSBEQUlOVF9PdXRFUF9TSElGVAkJCSgxNikKLSNkZWZpbmUgREFJTlRfT3V0RVAoeCkJCQkJKDEgPDwgKCh4KSArIDE2KSkKLSNkZWZpbmUgREFJTlRfSW5FUCh4KQkJCQkoMSA8PCAoeCkpCi0KLSNkZWZpbmUgRFRLTlFSMQkJCQlIU09UR19SRUcoMHg4MjApCi0jZGVmaW5lIERUS05RUjIJCQkJSFNPVEdfUkVHKDB4ODI0KQotI2RlZmluZSBEVEtOUVIzCQkJCUhTT1RHX1JFRygweDgzMCkKLSNkZWZpbmUgRFRLTlFSNAkJCQlIU09UR19SRUcoMHg4MzQpCi0KLSNkZWZpbmUgRFZCVVNESVMJCQkJSFNPVEdfUkVHKDB4ODI4KQotI2RlZmluZSBEVkJVU1BVTFNFCQkJCUhTT1RHX1JFRygweDgyQykKLQotI2RlZmluZSBESUVQQ1RMMAkJCQlIU09UR19SRUcoMHg5MDApCi0jZGVmaW5lIERPRVBDVEwwCQkJCUhTT1RHX1JFRygweEIwMCkKLSNkZWZpbmUgRElFUENUTChfYSkJCQlIU09UR19SRUcoMHg5MDAgKyAoKF9hKSAqIDB4MjApKQotI2RlZmluZSBET0VQQ1RMKF9hKQkJCUhTT1RHX1JFRygweEIwMCArICgoX2EpICogMHgyMCkpCi0KLS8qIEVQMCBzcGVjaWFsbmVzczoKLSAqIGJpdHNbMjkuLjI4XSAtIHJlc2VydmVkIChubyBTZXREMFBJRCwgU2V0RDFQSUQpCi0gKiBiaXRzWzI1Li4yMl0gLSBzaG91bGQgYWx3YXlzIGJlIHplcm8sIHRoaXMgaXNuJ3QgYSBwZXJpb2RpYyBlbmRwb2ludAotICogYml0c1sxMC4uMF0gLSBNUFMgc2V0dGluZyBkaWZmZXJlbmN0IGZvciBFUDAKLSAqLwotI2RlZmluZSBEMEVQQ1RMX01QU19NQVNLCQkJKDB4MyA8PCAwKQotI2RlZmluZSBEMEVQQ1RMX01QU19TSElGVAkJCSgwKQotI2RlZmluZSBEMEVQQ1RMX01QU182NAkJCQkoMHgwIDw8IDApCi0jZGVmaW5lIEQwRVBDVExfTVBTXzMyCQkJCSgweDEgPDwgMCkKLSNkZWZpbmUgRDBFUENUTF9NUFNfMTYJCQkJKDB4MiA8PCAwKQotI2RlZmluZSBEMEVQQ1RMX01QU184CQkJCSgweDMgPDwgMCkKLQotI2RlZmluZSBEeEVQQ1RMX0VQRW5hCQkJCSgxIDw8IDMxKQotI2RlZmluZSBEeEVQQ1RMX0VQRGlzCQkJCSgxIDw8IDMwKQotI2RlZmluZSBEeEVQQ1RMX1NldEQxUElECQkJKDEgPDwgMjkpCi0jZGVmaW5lIER4RVBDVExfU2V0T2RkRnIJCQkoMSA8PCAyOSkKLSNkZWZpbmUgRHhFUENUTF9TZXREMFBJRAkJCSgxIDw8IDI4KQotI2RlZmluZSBEeEVQQ1RMX1NldEV2ZW5GcgkJCSgxIDw8IDI4KQotI2RlZmluZSBEeEVQQ1RMX1NOQUsJCQkJKDEgPDwgMjcpCi0jZGVmaW5lIER4RVBDVExfQ05BSwkJCQkoMSA8PCAyNikKLSNkZWZpbmUgRHhFUENUTF9UeEZOdW1fTUFTSwkJCSgweGYgPDwgMjIpCi0jZGVmaW5lIER4RVBDVExfVHhGTnVtX1NISUZUCQkJKDIyKQotI2RlZmluZSBEeEVQQ1RMX1R4Rk51bV9MSU1JVAkJCSgweGYpCi0jZGVmaW5lIER4RVBDVExfVHhGTnVtKF94KQkJCSgoX3gpIDw8IDIyKQotCi0jZGVmaW5lIER4RVBDVExfU3RhbGwJCQkJKDEgPDwgMjEpCi0jZGVmaW5lIER4RVBDVExfU25wCQkJCSgxIDw8IDIwKQotI2RlZmluZSBEeEVQQ1RMX0VQVHlwZV9NQVNLCQkJKDB4MyA8PCAxOCkKLSNkZWZpbmUgRHhFUENUTF9FUFR5cGVfU0hJRlQJCQkoMTgpCi0jZGVmaW5lIER4RVBDVExfRVBUeXBlX0NvbnRyb2wJCQkoMHgwIDw8IDE4KQotI2RlZmluZSBEeEVQQ1RMX0VQVHlwZV9Jc28JCQkoMHgxIDw8IDE4KQotI2RlZmluZSBEeEVQQ1RMX0VQVHlwZV9CdWxrCQkJKDB4MiA8PCAxOCkKLSNkZWZpbmUgRHhFUENUTF9FUFR5cGVfSW50dGVydXB0CQkoMHgzIDw8IDE4KQotCi0jZGVmaW5lIER4RVBDVExfTkFLc3RzCQkJCSgxIDw8IDE3KQotI2RlZmluZSBEeEVQQ1RMX0RQSUQJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIER4RVBDVExfRU9Gck51bQkJCSgxIDw8IDE2KQotI2RlZmluZSBEeEVQQ1RMX1VTQkFjdEVwCQkJKDEgPDwgMTUpCi0jZGVmaW5lIER4RVBDVExfTmV4dEVwX01BU0sJCQkoMHhmIDw8IDExKQotI2RlZmluZSBEeEVQQ1RMX05leHRFcF9TSElGVAkJCSgxMSkKLSNkZWZpbmUgRHhFUENUTF9OZXh0RXBfTElNSVQJCQkoMHhmKQotI2RlZmluZSBEeEVQQ1RMX05leHRFcChfeCkJCQkoKF94KSA8PCAxMSkKLQotI2RlZmluZSBEeEVQQ1RMX01QU19NQVNLCQkJKDB4N2ZmIDw8IDApCi0jZGVmaW5lIER4RVBDVExfTVBTX1NISUZUCQkJKDApCi0jZGVmaW5lIER4RVBDVExfTVBTX0xJTUlUCQkJKDB4N2ZmKQotI2RlZmluZSBEeEVQQ1RMX01QUyhfeCkJCQkoKF94KSA8PCAwKQotCi0jZGVmaW5lIERJRVBJTlQoX2EpCQkJSFNPVEdfUkVHKDB4OTA4ICsgKChfYSkgKiAweDIwKSkKLSNkZWZpbmUgRE9FUElOVChfYSkJCQlIU09UR19SRUcoMHhCMDggKyAoKF9hKSAqIDB4MjApKQotCi0jZGVmaW5lIER4RVBJTlRfSU5FUE5ha0VmZgkJCSgxIDw8IDYpCi0jZGVmaW5lIER4RVBJTlRfQmFjazJCYWNrU2V0dXAJCQkoMSA8PCA2KQotI2RlZmluZSBEeEVQSU5UX0lOVGtuRVBNaXMJCQkoMSA8PCA1KQotI2RlZmluZSBEeEVQSU5UX0lOVGtuVFhGRW1wCQkJKDEgPDwgNCkKLSNkZWZpbmUgRHhFUElOVF9PVVRUa25FUGRpcwkJCSgxIDw8IDQpCi0jZGVmaW5lIER4RVBJTlRfVGltZW91dAkJCSgxIDw8IDMpCi0jZGVmaW5lIER4RVBJTlRfU2V0dXAJCQkJKDEgPDwgMykKLSNkZWZpbmUgRHhFUElOVF9BSEJFcnIJCQkJKDEgPDwgMikKLSNkZWZpbmUgRHhFUElOVF9FUERpc2JsZAkJCSgxIDw8IDEpCi0jZGVmaW5lIER4RVBJTlRfWGZlckNvbXBsCQkJKDEgPDwgMCkKLQotI2RlZmluZSBESUVQVFNJWjAJCQkJSFNPVEdfUkVHKDB4OTEwKQotCi0jZGVmaW5lIERJRVBUU0laMF9Qa3RDbnRfTUFTSwkJCSgweDMgPDwgMTkpCi0jZGVmaW5lIERJRVBUU0laMF9Qa3RDbnRfU0hJRlQJCQkoMTkpCi0jZGVmaW5lIERJRVBUU0laMF9Qa3RDbnRfTElNSVQJCQkoMHgzKQotI2RlZmluZSBESUVQVFNJWjBfUGt0Q250KF94KQkJCSgoX3gpIDw8IDE5KQotCi0jZGVmaW5lIERJRVBUU0laMF9YZmVyU2l6ZV9NQVNLCQkoMHg3ZiA8PCAwKQotI2RlZmluZSBESUVQVFNJWjBfWGZlclNpemVfU0hJRlQJCSgwKQotI2RlZmluZSBESUVQVFNJWjBfWGZlclNpemVfTElNSVQJCSgweDdmKQotI2RlZmluZSBESUVQVFNJWjBfWGZlclNpemUoX3gpCQkJKChfeCkgPDwgMCkKLQotI2RlZmluZSBET0VQVFNJWjAJCQkJSFNPVEdfUkVHKDB4QjEwKQotI2RlZmluZSBET0VQVFNJWjBfU1VQQ250X01BU0sJCQkoMHgzIDw8IDI5KQotI2RlZmluZSBET0VQVFNJWjBfU1VQQ250X1NISUZUCQkJKDI5KQotI2RlZmluZSBET0VQVFNJWjBfU1VQQ250X0xJTUlUCQkJKDB4MykKLSNkZWZpbmUgRE9FUFRTSVowX1NVUENudChfeCkJCQkoKF94KSA8PCAyOSkKLQotI2RlZmluZSBET0VQVFNJWjBfUGt0Q250CQkJKDEgPDwgMTkpCi0jZGVmaW5lIERPRVBUU0laMF9YZmVyU2l6ZV9NQVNLCQkoMHg3ZiA8PCAwKQotI2RlZmluZSBET0VQVFNJWjBfWGZlclNpemVfU0hJRlQJCSgwKQotCi0jZGVmaW5lIERJRVBUU0laKF9hKQkJCUhTT1RHX1JFRygweDkxMCArICgoX2EpICogMHgyMCkpCi0jZGVmaW5lIERPRVBUU0laKF9hKQkJCUhTT1RHX1JFRygweEIxMCArICgoX2EpICogMHgyMCkpCi0KLSNkZWZpbmUgRHhFUFRTSVpfTUNfTUFTSwkJCSgweDMgPDwgMjkpCi0jZGVmaW5lIER4RVBUU0laX01DX1NISUZUCQkJKDI5KQotI2RlZmluZSBEeEVQVFNJWl9NQ19MSU1JVAkJCSgweDMpCi0jZGVmaW5lIER4RVBUU0laX01DKF94KQkJCSgoX3gpIDw8IDI5KQotCi0jZGVmaW5lIER4RVBUU0laX1BrdENudF9NQVNLCQkJKDB4M2ZmIDw8IDE5KQotI2RlZmluZSBEeEVQVFNJWl9Qa3RDbnRfU0hJRlQJCQkoMTkpCi0jZGVmaW5lIER4RVBUU0laX1BrdENudF9HRVQoX3YpCQkoKChfdikgPj4gMTkpICYgMHgzZmYpCi0jZGVmaW5lIER4RVBUU0laX1BrdENudF9MSU1JVAkJCSgweDNmZikKLSNkZWZpbmUgRHhFUFRTSVpfUGt0Q250KF94KQkJCSgoX3gpIDw8IDE5KQotCi0jZGVmaW5lIER4RVBUU0laX1hmZXJTaXplX01BU0sJCQkoMHg3ZmZmZiA8PCAwKQotI2RlZmluZSBEeEVQVFNJWl9YZmVyU2l6ZV9TSElGVAkJKDApCi0jZGVmaW5lIER4RVBUU0laX1hmZXJTaXplX0dFVChfdikJCSgoKF92KSA+PiAwKSAmIDB4N2ZmZmYpCi0jZGVmaW5lIER4RVBUU0laX1hmZXJTaXplX0xJTUlUCQkoMHg3ZmZmZikKLSNkZWZpbmUgRHhFUFRTSVpfWGZlclNpemUoX3gpCQkJKChfeCkgPDwgMCkKLQotI2RlZmluZSBESUVQRE1BKF9hKQkJCUhTT1RHX1JFRygweDkxNCArICgoX2EpICogMHgyMCkpCi0jZGVmaW5lIERPRVBETUEoX2EpCQkJSFNPVEdfUkVHKDB4QjE0ICsgKChfYSkgKiAweDIwKSkKLSNkZWZpbmUgRFRYRlNUUyhfYSkJCQlIU09UR19SRUcoMHg5MTggKyAoKF9hKSAqIDB4MjApKQotCi0jZGVmaW5lIEVQRklGTyhfYSkJCQlIU09UR19SRUcoMHgxMDAwICsgKChfYSkgKiAweDEwMDApKQotCi0jZW5kaWYgLyogX19SRUdTX1VTQl9IU09UR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCmluZGV4IGRkOTY3OGYuLjc5ODdhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCkBAIC0xMTcsNyArMTE3LDggQEAKIAkJCXNpemVvZihwcmludGtfYnVmKS1sZW4sIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0JcmV0dXJuIHByX2RlYnVnKCIlcyIsIHByaW50a19idWYpOworCXByX2RlYnVnKCIlcyIsIHByaW50a19idWYpOworCXJldHVybiBsZW47CiB9CiAjZWxzZQogc3RhdGljIGludCBkcHJpbnRrKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5jCmluZGV4IGVjMjBhMWYuLmZmMjA1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5jCkBAIC00Myw3ICs0Myw3IEBACiAJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9QUl9CVUxLLAkvKiBBZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5pSW50ZXJmYWNlID0JCUZTR19TVFJJTkdfSU5URVJGQUNFLAogfTsKLUVYUE9SVF9TWU1CT0woZnNnX2ludGZfZGVzYyk7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfaW50Zl9kZXNjKTsKIAogLyoKICAqIFRocmVlIGZ1bGwtc3BlZWQgZW5kcG9pbnQgZGVzY3JpcHRvcnM6IGJ1bGstaW4sIGJ1bGstb3V0LCBhbmQKQEAgLTU4LDcgKzU4LDcgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiAJLyogd01heFBhY2tldFNpemUgc2V0IGJ5IGF1dG9jb25maWd1cmF0aW9uICovCiB9OwotRVhQT1JUX1NZTUJPTChmc2dfZnNfYnVsa19pbl9kZXNjKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGZzZ19mc19idWxrX2luX2Rlc2MpOwogCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2ZzX2J1bGtfb3V0X2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCkBAIC02OCw3ICs2OCw3IEBACiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAogCS8qIHdNYXhQYWNrZXRTaXplIHNldCBieSBhdXRvY29uZmlndXJhdGlvbiAqLwogfTsKLUVYUE9SVF9TWU1CT0woZnNnX2ZzX2J1bGtfb3V0X2Rlc2MpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX2ZzX2J1bGtfb3V0X2Rlc2MpOwogCiBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc2dfZnNfZnVuY3Rpb25bXSA9IHsKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNnX2ludGZfZGVzYywKQEAgLTc2LDcgKzc2LDcgQEAKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNnX2ZzX2J1bGtfb3V0X2Rlc2MsCiAJTlVMTCwKIH07Ci1FWFBPUlRfU1lNQk9MKGZzZ19mc19mdW5jdGlvbik7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfZnNfZnVuY3Rpb24pOwogCiAKIC8qCkBAIC05NSw3ICs5NSw3IEBACiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAogCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwotRVhQT1JUX1NZTUJPTChmc2dfaHNfYnVsa19pbl9kZXNjKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGZzZ19oc19idWxrX2luX2Rlc2MpOwogCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2hzX2J1bGtfb3V0X2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogCS5iSW50ZXJ2YWwgPQkJMSwJLyogTkFLIGV2ZXJ5IDEgdWZyYW1lICovCiB9OwotRVhQT1JUX1NZTUJPTChmc2dfaHNfYnVsa19vdXRfZGVzYyk7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfaHNfYnVsa19vdXRfZGVzYyk7CiAKIAogc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNnX2hzX2Z1bmN0aW9uW10gPSB7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNnX2hzX2J1bGtfb3V0X2Rlc2MsCiAJTlVMTCwKIH07Ci1FWFBPUlRfU1lNQk9MKGZzZ19oc19mdW5jdGlvbik7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfaHNfZnVuY3Rpb24pOwogCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX3NzX2J1bGtfaW5fZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKQEAgLTEyNSw3ICsxMjUsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIAkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNigxMDI0KSwKIH07Ci1FWFBPUlRfU1lNQk9MKGZzZ19zc19idWxrX2luX2Rlc2MpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3NzX2J1bGtfaW5fZGVzYyk7CiAKIHN0cnVjdCB1c2Jfc3NfZXBfY29tcF9kZXNjcmlwdG9yIGZzZ19zc19idWxrX2luX2NvbXBfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YoZnNnX3NzX2J1bGtfaW5fY29tcF9kZXNjKSwKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAJLyouYk1heEJ1cnN0ID0JCURZTkFNSUMsICovCiB9OwotRVhQT1JUX1NZTUJPTChmc2dfc3NfYnVsa19pbl9jb21wX2Rlc2MpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3NzX2J1bGtfaW5fY29tcF9kZXNjKTsKIAogc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzZ19zc19idWxrX291dF9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLApAQCAtMTQzLDcgKzE0Myw3IEBACiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAogCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDEwMjQpLAogfTsKLUVYUE9SVF9TWU1CT0woZnNnX3NzX2J1bGtfb3V0X2Rlc2MpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3NzX2J1bGtfb3V0X2Rlc2MpOwogCiBzdHJ1Y3QgdXNiX3NzX2VwX2NvbXBfZGVzY3JpcHRvciBmc2dfc3NfYnVsa19vdXRfY29tcF9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZihmc2dfc3NfYnVsa19pbl9jb21wX2Rlc2MpLApAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAkvKi5iTWF4QnVyc3QgPQkJRFlOQU1JQywgKi8KIH07Ci1FWFBPUlRfU1lNQk9MKGZzZ19zc19idWxrX291dF9jb21wX2Rlc2MpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3NzX2J1bGtfb3V0X2NvbXBfZGVzYyk7CiAKIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzZ19zc19mdW5jdGlvbltdID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc2dfaW50Zl9kZXNjLApAQCAtMTYxLDcgKzE2MSw3IEBACiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzZ19zc19idWxrX291dF9jb21wX2Rlc2MsCiAJTlVMTCwKIH07Ci1FWFBPUlRfU1lNQk9MKGZzZ19zc19mdW5jdGlvbik7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfc3NfZnVuY3Rpb24pOwogCiAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCWN1cmx1bi0+ZmlscCA9IE5VTEw7CiAJfQogfQotRVhQT1JUX1NZTUJPTChmc2dfbHVuX2Nsb3NlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGZzZ19sdW5fY2xvc2UpOwogCiBpbnQgZnNnX2x1bl9vcGVuKHN0cnVjdCBmc2dfbHVuICpjdXJsdW4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewpAQCAtMjc4LDcgKzI3OCw3IEBACiAJZnB1dChmaWxwKTsKIAlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MKGZzZ19sdW5fb3Blbik7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfbHVuX29wZW4pOwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHZmc19mc3luYyhmaWxwLCAxKTsKIH0KLUVYUE9SVF9TWU1CT0woZnNnX2x1bl9mc3luY19zdWIpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX2x1bl9mc3luY19zdWIpOwogCiB2b2lkIHN0b3JlX2Nkcm9tX2FkZHJlc3ModTggKmRlc3QsIGludCBtc2YsIHUzMiBhZGRyKQogewpAQCAtMzE0LDcgKzMxNCw3IEBACiAJCXB1dF91bmFsaWduZWRfYmUzMihhZGRyLCBkZXN0KTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHN0b3JlX2Nkcm9tX2FkZHJlc3MpOworRVhQT1JUX1NZTUJPTF9HUEwoc3RvcmVfY2Ryb21fYWRkcmVzcyk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTMyNSwxMyArMzI1LDEzIEBACiAJCQkJICA/IGN1cmx1bi0+cm8KIAkJCQkgIDogY3VybHVuLT5pbml0aWFsbHlfcm8pOwogfQotRVhQT1JUX1NZTUJPTChmc2dfc2hvd19ybyk7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfc2hvd19ybyk7CiAKIHNzaXplX3QgZnNnX3Nob3dfbm9mdWEoc3RydWN0IGZzZ19sdW4gKmN1cmx1biwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjdXJsdW4tPm5vZnVhKTsKIH0KLUVYUE9SVF9TWU1CT0woZnNnX3Nob3dfbm9mdWEpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3Nob3dfbm9mdWEpOwogCiBzc2l6ZV90IGZzZ19zaG93X2ZpbGUoc3RydWN0IGZzZ19sdW4gKmN1cmx1biwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqZmlsZXNlbSwKIAkJICAgICAgY2hhciAqYnVmKQpAQCAtMzU3LDE5ICszNTcsMTkgQEAKIAl1cF9yZWFkKGZpbGVzZW0pOwogCXJldHVybiByYzsKIH0KLUVYUE9SVF9TWU1CT0woZnNnX3Nob3dfZmlsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfc2hvd19maWxlKTsKIAogc3NpemVfdCBmc2dfc2hvd19jZHJvbShzdHJ1Y3QgZnNnX2x1biAqY3VybHVuLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGN1cmx1bi0+Y2Ryb20pOwogfQotRVhQT1JUX1NZTUJPTChmc2dfc2hvd19jZHJvbSk7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfc2hvd19jZHJvbSk7CiAKIHNzaXplX3QgZnNnX3Nob3dfcmVtb3ZhYmxlKHN0cnVjdCBmc2dfbHVuICpjdXJsdW4sIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgY3VybHVuLT5yZW1vdmFibGUpOwogfQotRVhQT1JUX1NZTUJPTChmc2dfc2hvd19yZW1vdmFibGUpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3Nob3dfcmVtb3ZhYmxlKTsKIAogLyoKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGZzZy0+ZmlsZXNlbSBmb3IgcmVhZGluZyB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KQEAgLTQxMCw3ICs0MTAsNyBAQAogCiAJcmV0dXJuIHJjOwogfQotRVhQT1JUX1NZTUJPTChmc2dfc3RvcmVfcm8pOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3N0b3JlX3JvKTsKIAogc3NpemVfdCBmc2dfc3RvcmVfbm9mdWEoc3RydWN0IGZzZ19sdW4gKmN1cmx1biwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CkBAIC00MjksNyArNDI5LDcgQEAKIAogCXJldHVybiBjb3VudDsKIH0KLUVYUE9SVF9TWU1CT0woZnNnX3N0b3JlX25vZnVhKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGZzZ19zdG9yZV9ub2Z1YSk7CiAKIHNzaXplX3QgZnNnX3N0b3JlX2ZpbGUoc3RydWN0IGZzZ19sdW4gKmN1cmx1biwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqZmlsZXNlbSwKIAkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJdXBfd3JpdGUoZmlsZXNlbSk7CiAJcmV0dXJuIChyYyA8IDAgPyByYyA6IGNvdW50KTsKIH0KLUVYUE9SVF9TWU1CT0woZnNnX3N0b3JlX2ZpbGUpOworRVhQT1JUX1NZTUJPTF9HUEwoZnNnX3N0b3JlX2ZpbGUpOwogCiBzc2l6ZV90IGZzZ19zdG9yZV9jZHJvbShzdHJ1Y3QgZnNnX2x1biAqY3VybHVuLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmaWxlc2VtLAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC00ODMsNyArNDgzLDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGZzZ19zdG9yZV9jZHJvbSk7CitFWFBPUlRfU1lNQk9MX0dQTChmc2dfc3RvcmVfY2Ryb20pOwogCiBzc2l6ZV90IGZzZ19zdG9yZV9yZW1vdmFibGUoc3RydWN0IGZzZ19sdW4gKmN1cmx1biwgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCkKQEAgLTQ5OSw2ICs0OTksNiBAQAogCiAJcmV0dXJuIGNvdW50OwogfQotRVhQT1JUX1NZTUJPTChmc2dfc3RvcmVfcmVtb3ZhYmxlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGZzZ19zdG9yZV9yZW1vdmFibGUpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdGNtX3VzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC90Y21fdXNiX2dhZGdldC5jCmluZGV4IGYwNThjMDMuLjZjZGI3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC90Y21fdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC90Y21fdXNiX2dhZGdldC5jCkBAIC0xMzgzLDEwICsxMzgzLDggQEAKIAlzdHJ1Y3QgdXNiZ19uYWNsICpuYWNsOwogCiAJbmFjbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JnX25hY2wpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5hY2wpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgc3RydWN0IHVzYmdfbmFjbFxuIik7CisJaWYgKCFuYWNsKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAlyZXR1cm4gJm5hY2wtPnNlX25vZGVfYWNsOwogfQpAQCAtMTU2MSwxMCArMTU1OSw4IEBACiAJfQogCiAJdHBnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmdfdHBnKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cGcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgc3RydWN0IHVzYmdfdHBnIik7CisJaWYgKCF0cGcpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KIAltdXRleF9pbml0KCZ0cGctPnRwZ19tdXRleCk7CiAJYXRvbWljX3NldCgmdHBnLT50cGdfcG9ydF9jb3VudCwgMCk7CiAJdHBnLT53b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoInRjbV91c2JfZ2FkZ2V0IiwgMCwgMSk7CkBAIC0xNjEzLDEwICsxNjA5LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAl0cG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JnX3Rwb3J0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEodHBvcnQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIHN0cnVjdCB1c2JnX3Rwb3J0Iik7CisJaWYgKCEodHBvcnQpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9CiAJdHBvcnQtPnRwb3J0X3d3cG4gPSB3d3BuOwogCXNucHJpbnRmKHRwb3J0LT50cG9ydF9uYW1lLCBzaXplb2YodHBvcnQtPnRwb3J0X25hbWUpLCAiJXMiLCB3bm5fbmFtZSk7CiAJcmV0dXJuICZ0cG9ydC0+dHBvcnRfd3duOwpAQCAtMTcyNywxMCArMTcyMSw4IEBACiAKIAlyZXQgPSAtRU5PTUVNOwogCXR2X25leHVzID0ga3phbGxvYyhzaXplb2YoKnR2X25leHVzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0dl9uZXh1cykgewotCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3QgdGNtX3Zob3N0X25leHVzXG4iKTsKKwlpZiAoIXR2X25leHVzKQogCQlnb3RvIGVycl91bmxvY2s7Ci0JfQogCXR2X25leHVzLT50dm5fc2Vfc2VzcyA9IHRyYW5zcG9ydF9pbml0X3Nlc3Npb24oVEFSR0VUX1BST1RfTk9STUFMKTsKIAlpZiAoSVNfRVJSKHR2X25leHVzLT50dm5fc2Vfc2VzcykpCiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC0xODUxLDcgKzE4NDMsNyBAQAogCXN0cnVjdCB1c2JnX3RwZyAqdHBnID0gY29udGFpbmVyX29mKHNlX3RwZywgc3RydWN0IHVzYmdfdHBnLCBzZV90cGcpOwogCiAJYXRvbWljX2luYygmdHBnLT50cGdfcG9ydF9jb3VudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg2MSw3ICsxODUzLDcgQEAKIAlzdHJ1Y3QgdXNiZ190cGcgKnRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsIHN0cnVjdCB1c2JnX3RwZywgc2VfdHBnKTsKIAogCWF0b21pY19kZWMoJnRwZy0+dHBnX3BvcnRfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyBpbnQgdXNiZ19jaGVja19zdG9wX2ZyZWUoc3RydWN0IHNlX2NtZCAqc2VfY21kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKaW5kZXggYjdkNGY4Mi4uZmUwODgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCkBAIC04MTgsNyArODE4LDcgQEAKIAogCXJldHVybiBkZXY7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9zZXR1cF9uYW1lKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldGhlcl9zZXR1cF9uYW1lKTsKIAogc3RydWN0IG5ldF9kZXZpY2UgKmdldGhlcl9zZXR1cF9uYW1lX2RlZmF1bHQoY29uc3QgY2hhciAqbmV0bmFtZSkKIHsKQEAgLTg1NSw3ICs4NTUsNyBAQAogCiAJcmV0dXJuIG5ldDsKIH0KLUVYUE9SVF9TWU1CT0woZ2V0aGVyX3NldHVwX25hbWVfZGVmYXVsdCk7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfc2V0dXBfbmFtZV9kZWZhdWx0KTsKIAogaW50IGdldGhlcl9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKQEAgLTg5Myw3ICs4OTMsNyBAQAogCiAJcmV0dXJuIHN0YXR1czsKIH0KLUVYUE9SVF9TWU1CT0woZ2V0aGVyX3JlZ2lzdGVyX25ldGRldik7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfcmVnaXN0ZXJfbmV0ZGV2KTsKIAogdm9pZCBnZXRoZXJfc2V0X2dhZGdldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgdXNiX2dhZGdldCAqZykKIHsKQEAgLTkwMyw3ICs5MDMsNyBAQAogCWRldi0+Z2FkZ2V0ID0gZzsKIAlTRVRfTkVUREVWX0RFVihuZXQsICZnLT5kZXYpOwogfQotRVhQT1JUX1NZTUJPTChnZXRoZXJfc2V0X2dhZGdldCk7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfc2V0X2dhZGdldCk7CiAKIGludCBnZXRoZXJfc2V0X2Rldl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGNvbnN0IGNoYXIgKmRldl9hZGRyKQogewpAQCAtOTE2LDcgKzkxNiw3IEBACiAJbWVtY3B5KGRldi0+ZGV2X21hYywgbmV3X2FkZHIsIEVUSF9BTEVOKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZ2V0aGVyX3NldF9kZXZfYWRkcik7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfc2V0X2Rldl9hZGRyKTsKIAogaW50IGdldGhlcl9nZXRfZGV2X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgY2hhciAqZGV2X2FkZHIsIGludCBsZW4pCiB7CkBAIC05MjUsNyArOTI1LDcgQEAKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCXJldHVybiBnZXRfZXRoZXJfYWRkcl9zdHIoZGV2LT5kZXZfbWFjLCBkZXZfYWRkciwgbGVuKTsKIH0KLUVYUE9SVF9TWU1CT0woZ2V0aGVyX2dldF9kZXZfYWRkcik7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfZ2V0X2Rldl9hZGRyKTsKIAogaW50IGdldGhlcl9zZXRfaG9zdF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGNvbnN0IGNoYXIgKmhvc3RfYWRkcikKIHsKQEAgLTkzOCw3ICs5MzgsNyBAQAogCW1lbWNweShkZXYtPmhvc3RfbWFjLCBuZXdfYWRkciwgRVRIX0FMRU4pOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChnZXRoZXJfc2V0X2hvc3RfYWRkcik7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfc2V0X2hvc3RfYWRkcik7CiAKIGludCBnZXRoZXJfZ2V0X2hvc3RfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBjaGFyICpob3N0X2FkZHIsIGludCBsZW4pCiB7CkBAIC05NDcsNyArOTQ3LDcgQEAKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCXJldHVybiBnZXRfZXRoZXJfYWRkcl9zdHIoZGV2LT5ob3N0X21hYywgaG9zdF9hZGRyLCBsZW4pOwogfQotRVhQT1JUX1NZTUJPTChnZXRoZXJfZ2V0X2hvc3RfYWRkcik7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfZ2V0X2hvc3RfYWRkcik7CiAKIGludCBnZXRoZXJfZ2V0X2hvc3RfYWRkcl9jZGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgY2hhciAqaG9zdF9hZGRyLCBpbnQgbGVuKQogewpAQCAtOTYxLDcgKzk2MSw3IEBACiAKIAlyZXR1cm4gc3RybGVuKGhvc3RfYWRkcik7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9nZXRfaG9zdF9hZGRyX2NkYyk7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfZ2V0X2hvc3RfYWRkcl9jZGMpOwogCiB2b2lkIGdldGhlcl9nZXRfaG9zdF9hZGRyX3U4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHU4IGhvc3RfbWFjW0VUSF9BTEVOXSkKIHsKQEAgLTk3MCw3ICs5NzAsNyBAQAogCWRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJbWVtY3B5KGhvc3RfbWFjLCBkZXYtPmhvc3RfbWFjLCBFVEhfQUxFTik7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9nZXRfaG9zdF9hZGRyX3U4KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldGhlcl9nZXRfaG9zdF9hZGRyX3U4KTsKIAogdm9pZCBnZXRoZXJfc2V0X3FtdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHVuc2lnbmVkIHFtdWx0KQogewpAQCAtOTc5LDcgKzk3OSw3IEBACiAJZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlkZXYtPnFtdWx0ID0gcW11bHQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9zZXRfcW11bHQpOworRVhQT1JUX1NZTUJPTF9HUEwoZ2V0aGVyX3NldF9xbXVsdCk7CiAKIHVuc2lnbmVkIGdldGhlcl9nZXRfcW11bHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKQEAgLTk4OCw3ICs5ODgsNyBAQAogCWRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJcmV0dXJuIGRldi0+cW11bHQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9nZXRfcW11bHQpOworRVhQT1JUX1NZTUJPTF9HUEwoZ2V0aGVyX2dldF9xbXVsdCk7CiAKIGludCBnZXRoZXJfZ2V0X2lmbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBjaGFyICpuYW1lLCBpbnQgbGVuKQogewpAQCAtOTk3LDcgKzk5Nyw3IEBACiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gc3RybGVuKG5hbWUpOwogfQotRVhQT1JUX1NZTUJPTChnZXRoZXJfZ2V0X2lmbmFtZSk7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfZ2V0X2lmbmFtZSk7CiAKIC8qKgogICogZ2V0aGVyX2NsZWFudXAgLSByZW1vdmUgRXRoZXJuZXQtb3Zlci1VU0IgZGV2aWNlCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCWZsdXNoX3dvcmsoJmRldi0+d29yayk7CiAJZnJlZV9uZXRkZXYoZGV2LT5uZXQpOwogfQotRVhQT1JUX1NZTUJPTChnZXRoZXJfY2xlYW51cCk7CitFWFBPUlRfU1lNQk9MX0dQTChnZXRoZXJfY2xlYW51cCk7CiAKIC8qKgogICogZ2V0aGVyX2Nvbm5lY3QgLSBub3RpZnkgbmV0d29yayBsYXllciB0aGF0IFVTQiBsaW5rIGlzIGFjdGl2ZQpAQCAtMTA5NSw3ICsxMDk1LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAlyZXR1cm4gZGV2LT5uZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9jb25uZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldGhlcl9jb25uZWN0KTsKIAogLyoqCiAgKiBnZXRoZXJfZGlzY29ubmVjdCAtIG5vdGlmeSBuZXR3b3JrIGxheWVyIHRoYXQgVVNCIGxpbmsgaXMgaW5hY3RpdmUKQEAgLTExNjYsNyArMTE2Niw3IEBACiAJZGV2LT5wb3J0X3VzYiA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdldGhlcl9kaXNjb25uZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldGhlcl9kaXNjb25uZWN0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2YuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2YuYwppbmRleCA2M2I2NjQyLi5jNjI3NmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9mLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZi5jCkBAIC0yOSw0ICsyOSw0IEBACiAJfQogCXJldHVybiByZXE7CiB9Ci1FWFBPUlRfU1lNQk9MKGFsbG9jX2VwX3JlcSk7CitFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19lcF9yZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZi5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZi5oCmluZGV4IDcxMDM0YzAuLjFkNWYwZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2YuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9mLmgKQEAgLTE2LDYgKzE2LDMyIEBACiAjaWZuZGVmIF9fVV9GX0hfXwogI2RlZmluZSBfX1VfRl9IX18KIAorLyogVmFyaWFibGUgTGVuZ3RoIEFycmF5IE1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSB2bGFfZ3JvdXAoZ3JvdXBuYW1lKSBzaXplX3QgZ3JvdXBuYW1lIyNfX25leHQgPSAwCisjZGVmaW5lIHZsYV9ncm91cF9zaXplKGdyb3VwbmFtZSkgZ3JvdXBuYW1lIyNfX25leHQKKworI2RlZmluZSB2bGFfaXRlbShncm91cG5hbWUsIHR5cGUsIG5hbWUsIG4pIFwKKwlzaXplX3QgZ3JvdXBuYW1lIyNfIyNuYW1lIyNfX29mZnNldCA9ICh7CQkJICAgICAgIFwKKwkJc2l6ZV90IGFsaWduX21hc2sgPSBfX2FsaWdub2ZfXyh0eXBlKSAtIDE7CQkgICAgICAgXAorCQlzaXplX3Qgb2Zmc2V0ID0gKGdyb3VwbmFtZSMjX19uZXh0ICsgYWxpZ25fbWFzaykgJiB+YWxpZ25fbWFzaztcCisJCXNpemVfdCBzaXplID0gKG4pICogc2l6ZW9mKHR5cGUpOwkJCSAgICAgICBcCisJCWdyb3VwbmFtZSMjX19uZXh0ID0gb2Zmc2V0ICsgc2l6ZTsJCQkgICAgICAgXAorCQlvZmZzZXQ7CQkJCQkJCSAgICAgICBcCisJfSkKKworI2RlZmluZSB2bGFfaXRlbV93aXRoX3N6KGdyb3VwbmFtZSwgdHlwZSwgbmFtZSwgbikgXAorCXNpemVfdCBncm91cG5hbWUjI18jI25hbWUjI19fc3ogPSAobikgKiBzaXplb2YodHlwZSk7CQkgICAgICAgXAorCXNpemVfdCBncm91cG5hbWUjI18jI25hbWUjI19fb2Zmc2V0ID0gKHsJCQkgICAgICAgXAorCQlzaXplX3QgYWxpZ25fbWFzayA9IF9fYWxpZ25vZl9fKHR5cGUpIC0gMTsJCSAgICAgICBcCisJCXNpemVfdCBvZmZzZXQgPSAoZ3JvdXBuYW1lIyNfX25leHQgKyBhbGlnbl9tYXNrKSAmIH5hbGlnbl9tYXNrO1wKKwkJc2l6ZV90IHNpemUgPSBncm91cG5hbWUjI18jI25hbWUjI19fc3o7CQkJICAgICAgIFwKKwkJZ3JvdXBuYW1lIyNfX25leHQgPSBvZmZzZXQgKyBzaXplOwkJCSAgICAgICBcCisJCW9mZnNldDsJCQkJCQkJICAgICAgIFwKKwl9KQorCisjZGVmaW5lIHZsYV9wdHIocHRyLCBncm91cG5hbWUsIG5hbWUpIFwKKwkoKHZvaWQgKikgKChjaGFyICopcHRyICsgZ3JvdXBuYW1lIyNfIyNuYW1lIyNfX29mZnNldCkpCisKIHN0cnVjdCB1c2JfZXA7CiBzdHJ1Y3QgdXNiX3JlcXVlc3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X29zX2Rlc2MuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91X29zX2Rlc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVjZjhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfb3NfZGVzYy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiB1X29zX2Rlc2MuaAorICoKKyAqIFV0aWxpdHkgZGVmaW5pdGlvbnMgZm9yICJPUyBEZXNjcmlwdG9ycyIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBBdXRob3I6IEFuZHJ6ZWogUGlldHJhc2lld2ljeiA8YW5kcnplai5wQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1VfT1NfREVTQ19IX18KKyNkZWZpbmUgX19VX09TX0RFU0NfSF9fCisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8bGludXgvbmxzLmg+CisKKyNkZWZpbmUgVVNCX0VYVF9QUk9QX0RXX1NJWkUJCQkwCisjZGVmaW5lIFVTQl9FWFRfUFJPUF9EV19QUk9QRVJUWV9EQVRBX1RZUEUJNAorI2RlZmluZSBVU0JfRVhUX1BST1BfV19QUk9QRVJUWV9OQU1FX0xFTkdUSAk4CisjZGVmaW5lIFVTQl9FWFRfUFJPUF9CX1BST1BFUlRZX05BTUUJCTEwCisjZGVmaW5lIFVTQl9FWFRfUFJPUF9EV19QUk9QRVJUWV9EQVRBX0xFTkdUSAkxMAorI2RlZmluZSBVU0JfRVhUX1BST1BfQl9QUk9QRVJUWV9EQVRBCQkxNAorCisjZGVmaW5lIFVTQl9FWFRfUFJPUF9SRVNFUlZFRAkJCTAKKyNkZWZpbmUgVVNCX0VYVF9QUk9QX1VOSUNPREUJCQkxCisjZGVmaW5lIFVTQl9FWFRfUFJPUF9VTklDT0RFX0VOVgkJMgorI2RlZmluZSBVU0JfRVhUX1BST1BfQklOQVJZCQkJMworI2RlZmluZSBVU0JfRVhUX1BST1BfTEUzMgkJCTQKKyNkZWZpbmUgVVNCX0VYVF9QUk9QX0JFMzIJCQk1CisjZGVmaW5lIFVTQl9FWFRfUFJPUF9VTklDT0RFX0xJTksJCTYKKyNkZWZpbmUgVVNCX0VYVF9QUk9QX1VOSUNPREVfTVVMVEkJCTcKKworc3RhdGljIGlubGluZSB2b2lkIHVzYl9leHRfcHJvcF9wdXRfc2l6ZSh1OCAqYnVmLCBpbnQgZHdfc2l6ZSkKK3sKKwlwdXRfdW5hbGlnbmVkX2xlMzIoZHdfc2l6ZSwgJmJ1ZltVU0JfRVhUX1BST1BfRFdfU0laRV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2V4dF9wcm9wX3B1dF90eXBlKHU4ICpidWYsIGludCB0eXBlKQoreworCXB1dF91bmFsaWduZWRfbGUzMih0eXBlLCAmYnVmW1VTQl9FWFRfUFJPUF9EV19QUk9QRVJUWV9EQVRBX1RZUEVdKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdXNiX2V4dF9wcm9wX3B1dF9uYW1lKHU4ICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBwbmwpCit7CisJaW50IHJlc3VsdDsKKworCXB1dF91bmFsaWduZWRfbGUxNihwbmwsICZidWZbVVNCX0VYVF9QUk9QX1dfUFJPUEVSVFlfTkFNRV9MRU5HVEhdKTsKKwlyZXN1bHQgPSB1dGY4c190b191dGYxNnMobmFtZSwgc3RybGVuKG5hbWUpLCBVVEYxNl9MSVRUTEVfRU5ESUFOLAorCQkod2NoYXJfdCAqKSAmYnVmW1VTQl9FWFRfUFJPUF9CX1BST1BFUlRZX05BTUVdLCBwbmwgLSAyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXB1dF91bmFsaWduZWRfbGUxNigwLCAmYnVmW1VTQl9FWFRfUFJPUF9CX1BST1BFUlRZX05BTUUgKyBwbmxdKTsKKworCXJldHVybiBwbmw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZXh0X3Byb3BfcHV0X2JpbmFyeSh1OCAqYnVmLCBpbnQgcG5sLCBjb25zdCB1OCAqZGF0YSwKKwkJCQkJICAgaW50IGRhdGFfbGVuKQoreworCXB1dF91bmFsaWduZWRfbGUzMihkYXRhX2xlbiwKKwkJCSAgICZidWZbVVNCX0VYVF9QUk9QX0RXX1BST1BFUlRZX0RBVEFfTEVOR1RIICsgcG5sXSk7CisJbWVtY3B5KCZidWZbVVNCX0VYVF9QUk9QX0JfUFJPUEVSVFlfREFUQSArIHBubF0sIGRhdGEsIGRhdGFfbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdXNiX2V4dF9wcm9wX3B1dF91bmljb2RlKHU4ICpidWYsIGludCBwbmwsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJCQkJICAgaW50IGRhdGFfbGVuKQoreworCWludCByZXN1bHQ7CisJcHV0X3VuYWxpZ25lZF9sZTMyKGRhdGFfbGVuLAorCQkJJmJ1ZltVU0JfRVhUX1BST1BfRFdfUFJPUEVSVFlfREFUQV9MRU5HVEggKyBwbmxdKTsKKworCXJlc3VsdCA9IHV0ZjhzX3RvX3V0ZjE2cyhzdHJpbmcsIGRhdGFfbGVuID4+IDEsIFVURjE2X0xJVFRMRV9FTkRJQU4sCisJCQkod2NoYXJfdCAqKSAmYnVmW1VTQl9FWFRfUFJPUF9CX1BST1BFUlRZX0RBVEEgKyBwbmxdLAorCQkJZGF0YV9sZW4gLSAyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXB1dF91bmFsaWduZWRfbGUxNigwLAorCQkJJmJ1ZltVU0JfRVhUX1BST1BfQl9QUk9QRVJUWV9EQVRBICsgcG5sICsgZGF0YV9sZW5dKTsKKworCXJldHVybiBkYXRhX2xlbjsKK30KKworI2VuZGlmIC8qIF9fVV9PU19ERVNDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfcm5kaXMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3JuZGlzLmgKaW5kZXggNzI5MWIxNS4uZTkwMmFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfcm5kaXMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ybmRpcy5oCkBAIC0yNiw2ICsyNiw5IEBACiAJYm9vbAkJCQlib3VuZDsKIAlib29sCQkJCWJvcnJvd2VkX25ldDsKIAorCXN0cnVjdCB1c2Jfb3NfZGVzYwkJcm5kaXNfb3NfZGVzYzsKKwljaGFyCQkJCXJuZGlzX2V4dF9jb21wYXRfaWRbMTZdOworCiAJLyoKIAkgKiBSZWFkL3dyaXRlIGFjY2VzcyB0byBjb25maWdmcyBhdHRyaWJ1dGVzIGlzIGhhbmRsZWQgYnkgY29uZmlnZnMuCiAJICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMtY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy1jb3JlLmMKaW5kZXggMjc3NjhhNy4uYjBkOTgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy1jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy1jb3JlLmMKQEAgLTQyOCw2ICs0MjgsOCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkodWRjLCAmdWRjX2xpc3QsIGxpc3QpCiAJCWlmICh1ZGMtPmRyaXZlciA9PSBkcml2ZXIpIHsKIAkJCXVzYl9nYWRnZXRfcmVtb3ZlX2RyaXZlcih1ZGMpOworCQkJdXNiX2dhZGdldF9zZXRfc3RhdGUodWRjLT5nYWRnZXQsCisJCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CiAJCQlyZXQgPSAwOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfcXVldWUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfcXVldWUuYwppbmRleCAwYmI1ZDUwLi4xYzI5YmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3F1ZXVlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3V2Y19xdWV1ZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLXZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInV2Yy5oIgpAQCAtMTM2LDYgKzEzNyw4IEBACiAJcXVldWUtPnF1ZXVlLmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXZjX2J1ZmZlcik7CiAJcXVldWUtPnF1ZXVlLm9wcyA9ICZ1dmNfcXVldWVfcW9wczsKIAlxdWV1ZS0+cXVldWUubWVtX29wcyA9ICZ2YjJfdm1hbGxvY19tZW1vcHM7CisJcXVldWUtPnF1ZXVlLnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQworCQkJCSAgICAgfCBWNEwyX0JVRl9GTEFHX1RTVEFNUF9TUkNfRU9GOwogCXJldCA9IHZiMl9xdWV1ZV9pbml0KCZxdWV1ZS0+cXVldWUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0zNzksMTQgKzM4Miw5IEBACiAJZWxzZQogCQluZXh0YnVmID0gTlVMTDsKIAotCS8qCi0JICogRklYTUU6IHdpdGggdmlkZW9idWYyLCB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRpbWVzdGFtcCBmaWVsZHMKLQkgKiBhcmUgdmFsaWQgb25seSBmb3IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzIGFuZCB0aGUgVVZDIGdhZGdldCB1c3VhbGx5Ci0JICogaXMgYSB2aWRlbyBvdXRwdXQgZGV2aWNlLiBLZWVwaW5nIHRoZXNlIHVudGlsIHRoZSBzcGVjcyBhcmUgY2xlYXIgb24KLQkgKiB0aGlzIGFzcGVjdC4KLQkgKi8KKwlidWYtPmJ1Zi52NGwyX2J1Zi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAlidWYtPmJ1Zi52NGwyX2J1Zi5zZXF1ZW5jZSA9IHF1ZXVlLT5zZXF1ZW5jZSsrOwotCWRvX2dldHRpbWVvZmRheSgmYnVmLT5idWYudjRsMl9idWYudGltZXN0YW1wKTsKKwl2NGwyX2dldF90aW1lc3RhbXAoJmJ1Zi0+YnVmLnY0bDJfYnVmLnRpbWVzdGFtcCk7CiAKIAl2YjJfc2V0X3BsYW5lX3BheWxvYWQoJmJ1Zi0+YnVmLCAwLCBidWYtPmJ5dGVzdXNlZCk7CiAJdmIyX2J1ZmZlcl9kb25lKCZidWYtPmJ1ZiwgVkIyX0JVRl9TVEFURV9ET05FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAzZDllNTQwLi42MWI3ODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0yOSw2ICsyOSwxNCBAQAogY29uZmlnIFVTQl9YSENJX1BMQVRGT1JNCiAJdHJpc3RhdGUKIAorY29uZmlnIFVTQl9YSENJX01WRUJVCisJdHJpc3RhdGUgInhIQ0kgc3VwcG9ydCBmb3IgTWFydmVsbCBBcm1hZGEgMzc1LzM4eCIKKwlzZWxlY3QgVVNCX1hIQ0lfUExBVEZPUk0KKwlkZXBlbmRzIG9uIEFSQ0hfTVZFQlUgfHwgQ09NUElMRV9URVNUCisJLS0taGVscC0tLQorCSAgU2F5ICdZJyB0byBlbmFibGUgdGhlIHN1cHBvcnQgZm9yIHRoZSB4SENJIGhvc3QgY29udHJvbGxlcgorCSAgZm91bmQgaW4gTWFydmVsbCBBcm1hZGEgMzc1LzM4eCBBUk0gU09Dcy4KKwogZW5kaWYgIyBVU0JfWEhDSV9IQ0QKIAogY29uZmlnIFVTQl9FSENJX0hDRApAQCAtMTcwLDcgKzE3OCw2IEBACiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFF1YWxjb21tIFFTRC9NU00gb24tY2hpcCBFSENJIFVTQiBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gQVJDSF9NU00KIAlzZWxlY3QgVVNCX0VIQ0lfUk9PVF9IVUJfVFQKLQlzZWxlY3QgVVNCX01TTV9PVEcKIAktLS1oZWxwLS0tCiAJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBVU0IgSG9zdCBjb250cm9sbGVyIHByZXNlbnQgb24gdGhlCiAJICBRdWFsY29tbSBjaGlwc2V0cy4gUm9vdCBIdWIgaGFzIGluYnVpbHQgVFQuCkBAIC0zNDMsMTAgKzM1MCwxOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZm90ZzIxMC1oY2QuCiAKK2NvbmZpZyBVU0JfTUFYMzQyMV9IQ0QKKwl0cmlzdGF0ZSAiTUFYMzQyMSBIQ0QgKFVTQi1vdmVyLVNQSSkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBTUEkKKwktLS1oZWxwLS0tCisJICBUaGUgTWF4aW0gTUFYMzQyMUUgY2hpcCBzdXBwb3J0cyBzdGFuZGFyZCBVU0IgMi4wLWNvbXBsaWFudAorCSAgZnVsbC1zcGVlZCBkZXZpY2VzIGVpdGhlciBpbiBob3N0IG9yIHBlcmlwaGVyYWwgbW9kZS4gIFRoaXMKKwkgIGRyaXZlciBzdXBwb3J0cyB0aGUgaG9zdC1tb2RlIG9mIHRoZSBNQVgzNDIxRSBvbmx5LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBtYXgzNDIxLWhjZC4KKwogY29uZmlnIFVTQl9PSENJX0hDRAogCXRyaXN0YXRlICJPSENJIEhDRCAoVVNCIDEuMSkgc3VwcG9ydCIKLQlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKLQlkZXBlbmRzIG9uIFVTQl9JU1AxMzAxIHx8ICFBUkNIX0xQQzMyWFgKIAktLS1oZWxwLS0tCiAJICBUaGUgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKSBpcyBhIHN0YW5kYXJkIGZvciBhY2Nlc3NpbmcKIAkgIFVTQiAxLjEgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLiAgSXQgZG9lcyBtb3JlIGluIGhhcmR3YXJlIHRoYW4gSW50ZWwncwpAQCAtMzY1LDYgKzM4MSw3IEBACiBjb25maWcgVVNCX09IQ0lfSENEX09NQVAxCiAJdHJpc3RhdGUgIk9IQ0kgc3VwcG9ydCBmb3IgT01BUDEvMiBjaGlwcyIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKKwlkZXBlbmRzIG9uIElTUDEzMDFfT01BUCB8fCAhKE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMpCiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgT0hDSSBjb250cm9sbGVyIG9uIE9NQVAxLzIgY2hpcHMuCkBAIC0zODgsNiArNDA1LDcgQEAKIGNvbmZpZyBVU0JfT0hDSV9IQ0RfTFBDMzJYWAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBMUEMgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gVVNCX09IQ0lfSENEICYmIEFSQ0hfTFBDMzJYWAorCWRlcGVuZHMgb24gVVNCX0lTUDEzMDEKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAgICAgICAgICAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgb24tY2hpcCBPSENJIGNvbnRyb2xsZXIgb24KQEAgLTQxNyw2ICs0MzUsMTYgQEAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIG9uLWNoaXAgT0hDSSBjb250cm9sbGVyIG9uCiAJICBPTUFQMyBhbmQgbGF0ZXIgY2hpcHMuCiAKK2NvbmZpZyBVU0JfT0hDSV9IQ0RfREFWSU5DSQorCWJvb2wgIk9IQ0kgc3VwcG9ydCBmb3IgVEkgRGFWaW5jaSBEQTh4eCIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9EQThYWAorCWRlcGVuZHMgb24gVVNCX09IQ0lfSENEPXkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBEYVZpbmNpIERBOHh4IGludGVncmF0ZWQgT0hDSQorCSAgY29udHJvbGxlci4gVGhpcyBkcml2ZXIgY2Fubm90IGN1cnJlbnRseSBiZSBhIGxvYWRhYmxlCisJICBtb2R1bGUgYmVjYXVzZSBpdCBsYWNrcyBhIHByb3BlciBQSFkgYWJzdHJhY3Rpb24uCisKIGNvbmZpZyBVU0JfT0hDSV9BVEg3OQogCWJvb2wgIlVTQiBPSENJIHN1cHBvcnQgZm9yIHRoZSBBdGhlcm9zIEFSNzFYWC9BUjcyNDAgU29DcyAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiAoU09DX0FSNzFYWCB8fCBTT0NfQVI3MjRYKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggNzUzMDQ2OC4uYWY4OWE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0xOSw2ICsxOSw5IEBACiAKIGlmbmVxICgkKENPTkZJR19VU0JfWEhDSV9QTEFURk9STSksICkKIAl4aGNpLWhjZC15CQkrPSB4aGNpLXBsYXQubworaWZuZXEgKCQoQ09ORklHX1VTQl9YSENJX01WRUJVKSwgKQorCXhoY2ktaGNkLXkJCSs9IHhoY2ktbXZlYnUubworZW5kaWYKIGVuZGlmCiAKIG9iai0kKENPTkZJR19VU0JfV0hDSV9IQ0QpCSs9IHdoY2kvCkBAIC03MCwzICs3Myw0IEBACiBvYmotJChDT05GSUdfVVNCX0hDRF9TU0IpCSs9IHNzYi1oY2Qubwogb2JqLSQoQ09ORklHX1VTQl9GVVNCSDIwMF9IQ0QpCSs9IGZ1c2JoMjAwLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX0ZPVEcyMTBfSENEKQkrPSBmb3RnMjEwLWhjZC5vCitvYmotJChDT05GSUdfVVNCX01BWDM0MjFfSENEKQkrPSBtYXgzNDIxLWhjZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZXh5bm9zLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZXh5bm9zLmMKaW5kZXggN2Y0MjVhYy4uZDFjNzYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWV4eW5vcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1leHlub3MuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NhbXN1bmdfdXNiX3BoeS5oPgpAQCAtNDIsMTcgKzQzLDEwNiBAQAogc3RhdGljIGNvbnN0IGNoYXIgaGNkX25hbWVbXSA9ICJlaGNpLWV4eW5vcyI7CiBzdGF0aWMgc3RydWN0IGhjX2RyaXZlciBfX3JlYWRfbW9zdGx5IGV4eW5vc19laGNpX2hjX2RyaXZlcjsKIAorI2RlZmluZSBQSFlfTlVNQkVSIDMKKwogc3RydWN0IGV4eW5vc19laGNpX2hjZCB7CiAJc3RydWN0IGNsayAqY2xrOwogCXN0cnVjdCB1c2JfcGh5ICpwaHk7CiAJc3RydWN0IHVzYl9vdGcgKm90ZzsKKwlzdHJ1Y3QgcGh5ICpwaHlfZ1tQSFlfTlVNQkVSXTsKIH07CiAKICNkZWZpbmUgdG9fZXh5bm9zX2VoY2koaGNkKSAoc3RydWN0IGV4eW5vc19laGNpX2hjZCAqKShoY2RfdG9fZWhjaShoY2QpLT5wcml2KQogCi1zdGF0aWMgdm9pZCBleHlub3Nfc2V0dXBfdmJ1c19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGV4eW5vc19laGNpX2dldF9waHkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBleHlub3NfZWhjaV9oY2QgKmV4eW5vc19laGNpKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJaW50IHBoeV9udW1iZXI7CisJaW50IHJldCA9IDA7CisKKwlleHlub3NfZWhjaS0+cGh5ID0gZGV2bV91c2JfZ2V0X3BoeShkZXYsIFVTQl9QSFlfVFlQRV9VU0IyKTsKKwlpZiAoSVNfRVJSKGV4eW5vc19laGNpLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZXh5bm9zX2VoY2ktPnBoeSk7CisJCWlmIChyZXQgIT0gLUVOWElPICYmIHJldCAhPSAtRU5PREVWKSB7CisJCQlkZXZfZXJyKGRldiwgIm5vIHVzYjIgcGh5IGNvbmZpZ3VyZWRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBnZXQgdXNiMiBwaHlcbiIpOworCX0gZWxzZSB7CisJCWV4eW5vc19laGNpLT5vdGcgPSBleHlub3NfZWhjaS0+cGh5LT5vdGc7CisJfQorCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLCBjaGlsZCkgeworCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJlZyIsICZwaHlfbnVtYmVyKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcGFyc2UgZGV2aWNlIHRyZWVcbiIpOworCQkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChwaHlfbnVtYmVyID49IFBIWV9OVU1CRVIpIHsKKwkJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBudW1iZXIgb2YgUEhZc1xuIik7CisJCQlvZl9ub2RlX3B1dChjaGlsZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXBoeSA9IGRldm1fb2ZfcGh5X2dldChkZXYsIGNoaWxkLCAwKTsKKwkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGh5KTsKKwkJCWlmIChyZXQgIT0gLUVOT1NZUyAmJiByZXQgIT0gLUVOT0RFVikgeworCQkJCWRldl9lcnIoZGV2LCAibm8gdXNiMiBwaHkgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWRldl9kYmcoZGV2LCAiRmFpbGVkIHRvIGdldCB1c2IyIHBoeVxuIik7CisJCX0KKwkJZXh5bm9zX2VoY2ktPnBoeV9nW3BoeV9udW1iZXJdID0gcGh5OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX2VoY2lfcGh5X2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBleHlub3NfZWhjaV9oY2QgKmV4eW5vc19laGNpID0gdG9fZXh5bm9zX2VoY2koaGNkKTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghSVNfRVJSKGV4eW5vc19laGNpLT5waHkpKQorCQlyZXR1cm4gdXNiX3BoeV9pbml0KGV4eW5vc19laGNpLT5waHkpOworCisJZm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IFBIWV9OVU1CRVI7IGkrKykKKwkJaWYgKCFJU19FUlIoZXh5bm9zX2VoY2ktPnBoeV9nW2ldKSkKKwkJCXJldCA9IHBoeV9wb3dlcl9vbihleHlub3NfZWhjaS0+cGh5X2dbaV0pOworCWlmIChyZXQpCisJCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJCWlmICghSVNfRVJSKGV4eW5vc19laGNpLT5waHlfZ1tpXSkpCisJCQkJcGh5X3Bvd2VyX29mZihleHlub3NfZWhjaS0+cGh5X2dbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX2VoY2lfcGh5X2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZXh5bm9zX2VoY2lfaGNkICpleHlub3NfZWhjaSA9IHRvX2V4eW5vc19laGNpKGhjZCk7CisJaW50IGk7CisKKwlpZiAoIUlTX0VSUihleHlub3NfZWhjaS0+cGh5KSkgeworCQl1c2JfcGh5X3NodXRkb3duKGV4eW5vc19laGNpLT5waHkpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBIWV9OVU1CRVI7IGkrKykKKwkJaWYgKCFJU19FUlIoZXh5bm9zX2VoY2ktPnBoeV9nW2ldKSkKKwkJCXBoeV9wb3dlcl9vZmYoZXh5bm9zX2VoY2ktPnBoeV9nW2ldKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3NldHVwX3ZidXNfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CiAJaW50IGVycjsKIAlpbnQgZ3BpbzsKIApAQCAtNzUsNyArMTY1LDYgQEAKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgdXNiX3BoeSAqcGh5OwogCWludCBpcnE7CiAJaW50IGVycjsKIApAQCAtODgsNyArMTc3LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZXh5bm9zX3NldHVwX3ZidXNfZ3BpbyhwZGV2KTsKKwlleHlub3Nfc2V0dXBfdmJ1c19ncGlvKCZwZGV2LT5kZXYpOwogCiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmV4eW5vc19laGNpX2hjX2RyaXZlciwKIAkJCSAgICAgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldikpOwpAQCAtMTAyLDE1ICsxOTEsOSBAQAogCQkJCQkic2Ftc3VuZyxleHlub3M1NDQwLWVoY2kiKSkKIAkJZ290byBza2lwX3BoeTsKIAotCXBoeSA9IGRldm1fdXNiX2dldF9waHkoJnBkZXYtPmRldiwgVVNCX1BIWV9UWVBFX1VTQjIpOwotCWlmIChJU19FUlIocGh5KSkgewotCQl1c2JfcHV0X2hjZChoY2QpOwotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBvciB0cmFuc2NlaXZlciBkZWZpbmVkXG4iKTsKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0JfSBlbHNlIHsKLQkJZXh5bm9zX2VoY2ktPnBoeSA9IHBoeTsKLQkJZXh5bm9zX2VoY2ktPm90ZyA9IHBoeS0+b3RnOwotCX0KKwllcnIgPSBleHlub3NfZWhjaV9nZXRfcGh5KCZwZGV2LT5kZXYsIGV4eW5vc19laGNpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfY2xrOwogCiBza2lwX3BoeToKIApAQCAtMTM1LDEwICsyMTgsOSBAQAogCiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKIAloY2QtPnJzcmNfbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwotCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLQlpZiAoIWhjZC0+cmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07CisJaGNkLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihoY2QtPnJlZ3MpKSB7CisJCWVyciA9IFBUUl9FUlIoaGNkLT5yZWdzKTsKIAkJZ290byBmYWlsX2lvOwogCX0KIApAQCAtMTUyLDggKzIzNCwxMSBAQAogCWlmIChleHlub3NfZWhjaS0+b3RnKQogCQlleHlub3NfZWhjaS0+b3RnLT5zZXRfaG9zdChleHlub3NfZWhjaS0+b3RnLCAmaGNkLT5zZWxmKTsKIAotCWlmIChleHlub3NfZWhjaS0+cGh5KQotCQl1c2JfcGh5X2luaXQoZXh5bm9zX2VoY2ktPnBoeSk7CisJZXJyID0gZXh5bm9zX2VoY2lfcGh5X2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgVVNCIHBoeVxuIik7CisJCWdvdG8gZmFpbF9pbzsKKwl9CiAKIAllaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKIAllaGNpLT5jYXBzID0gaGNkLT5yZWdzOwpAQCAtMTczLDggKzI1OCw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWxfYWRkX2hjZDoKLQlpZiAoZXh5bm9zX2VoY2ktPnBoeSkKLQkJdXNiX3BoeV9zaHV0ZG93bihleHlub3NfZWhjaS0+cGh5KTsKKwlleHlub3NfZWhjaV9waHlfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIGZhaWxfaW86CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGV4eW5vc19laGNpLT5jbGspOwogZmFpbF9jbGs6CkBAIC0xOTIsOCArMjc2LDcgQEAKIAlpZiAoZXh5bm9zX2VoY2ktPm90ZykKIAkJZXh5bm9zX2VoY2ktPm90Zy0+c2V0X2hvc3QoZXh5bm9zX2VoY2ktPm90ZywgJmhjZC0+c2VsZik7CiAKLQlpZiAoZXh5bm9zX2VoY2ktPnBoeSkKLQkJdXNiX3BoeV9zaHV0ZG93bihleHlub3NfZWhjaS0+cGh5KTsKKwlleHlub3NfZWhjaV9waHlfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShleHlub3NfZWhjaS0+Y2xrKTsKIApAQCAtMjE4LDggKzMwMSw3IEBACiAJaWYgKGV4eW5vc19laGNpLT5vdGcpCiAJCWV4eW5vc19laGNpLT5vdGctPnNldF9ob3N0KGV4eW5vc19laGNpLT5vdGcsICZoY2QtPnNlbGYpOwogCi0JaWYgKGV4eW5vc19laGNpLT5waHkpCi0JCXVzYl9waHlfc2h1dGRvd24oZXh5bm9zX2VoY2ktPnBoeSk7CisJZXh5bm9zX2VoY2lfcGh5X2Rpc2FibGUoZGV2KTsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShleHlub3NfZWhjaS0+Y2xrKTsKIApAQCAtMjMwLDE0ICszMTIsMTkgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGV4eW5vc19laGNpX2hjZCAqZXh5bm9zX2VoY2kgPSB0b19leHlub3NfZWhjaShoY2QpOworCWludCByZXQ7CiAKIAljbGtfcHJlcGFyZV9lbmFibGUoZXh5bm9zX2VoY2ktPmNsayk7CiAKIAlpZiAoZXh5bm9zX2VoY2ktPm90ZykKIAkJZXh5bm9zX2VoY2ktPm90Zy0+c2V0X2hvc3QoZXh5bm9zX2VoY2ktPm90ZywgJmhjZC0+c2VsZik7CiAKLQlpZiAoZXh5bm9zX2VoY2ktPnBoeSkKLQkJdXNiX3BoeV9pbml0KGV4eW5vc19laGNpLT5waHkpOworCXJldCA9IGV4eW5vc19laGNpX3BoeV9lbmFibGUoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBVU0IgcGh5XG4iKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGV4eW5vc19laGNpLT5jbGspOworCQlyZXR1cm4gcmV0OworCX0KIAogCS8qIERNQSBidXJzdCBFbmFibGUgKi8KIAl3cml0ZWwoRUhDSV9JTlNOUkVHMDBfRU5BQkxFX0RNQV9CVVJTVCwgRUhDSV9JTlNOUkVHMDAoaGNkLT5yZWdzKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggN2FlMGM0ZC4uY2MzMDVjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMzMsMTUgKzMzLDYgQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgaW50IGVoY2lfaHViX2NvbnRyb2woCi0Jc3RydWN0IHVzYl9oY2QJKmhjZCwKLQl1MTYJCXR5cGVSZXEsCi0JdTE2CQl3VmFsdWUsCi0JdTE2CQl3SW5kZXgsCi0JY2hhcgkJKmJ1ZiwKLQl1MTYJCXdMZW5ndGgKLSk7Ci0KIHN0YXRpYyBpbnQgcGVyc2lzdF9lbmFibGVkX29uX2NvbXBhbmlvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdm9pZCAqdW51c2VkKQogewogCXJldHVybiAhdWRldi0+bWF4Y2hpbGQgJiYgdWRldi0+cGVyc2lzdF9lbmFibGVkICYmCkBAIC04NjUsNyArODU2LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfVVNCX0hDRF9URVNUX01PREUgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgZWhjaV9odWJfY29udHJvbCAoCitpbnQgZWhjaV9odWJfY29udHJvbCgKIAlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAogCXUxNgkJdHlwZVJlcSwKIAl1MTYJCXdWYWx1ZSwKQEAgLTEyODUsNiArMTI3Niw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0dmFsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZWhjaV9odWJfY29udHJvbCk7CiAKIHN0YXRpYyB2b2lkIGVoY2lfcmVsaW5xdWlzaF9wb3J0KHN0cnVjdCB1c2JfaGNkICpoY2QsIGludCBwb3J0bnVtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW1zbS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1zbS5jCmluZGV4IGYzNDE2NTEuLjk4MmMwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tc20uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXNtLmMKQEAgLTk2LDEwICs5Niw5IEBACiAKIAloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OwogCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7Ci0JaGNkLT5yZWdzID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7Ci0JaWYgKCFoY2QtPnJlZ3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwotCQlyZXQgPSAtRU5PTUVNOworCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaGNkLT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKGhjZC0+cmVncyk7CiAJCWdvdG8gcHV0X2hjZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tdi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW12LmMKaW5kZXggYmQ2MTYxMi4uMDgxNDdjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW12LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW12LmMKQEAgLTE3NiwxMSArMTc2LDkgQEAKIAkJZ290byBlcnJfcHV0X2hjZDsKIAl9CiAKLQllaGNpX212LT5waHlfcmVncyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByLT5zdGFydCwKLQkJCQkJIHJlc291cmNlX3NpemUocikpOwotCWlmICghZWhjaV9tdi0+cGh5X3JlZ3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBwaHkgSS9PIG1lbW9yeVxuIik7Ci0JCXJldHZhbCA9IC1FRkFVTFQ7CisJZWhjaV9tdi0+cGh5X3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcik7CisJaWYgKElTX0VSUihlaGNpX212LT5waHlfcmVncykpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihlaGNpX212LT5waHlfcmVncyk7CiAJCWdvdG8gZXJyX3B1dF9oY2Q7CiAJfQogCkBAIC0xOTEsMTEgKzE4OSw5IEBACiAJCWdvdG8gZXJyX3B1dF9oY2Q7CiAJfQogCi0JZWhjaV9tdi0+Y2FwX3JlZ3MgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgci0+c3RhcnQsCi0JCQkJCSByZXNvdXJjZV9zaXplKHIpKTsKLQlpZiAoZWhjaV9tdi0+Y2FwX3JlZ3MgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIEkvTyBtZW1vcnlcbiIpOwotCQlyZXR2YWwgPSAtRUZBVUxUOworCWVoY2lfbXYtPmNhcF9yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHIpOworCWlmIChJU19FUlIoZWhjaV9tdi0+Y2FwX3JlZ3MpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoZWhjaV9tdi0+Y2FwX3JlZ3MpOwogCQlnb3RvIGVycl9wdXRfaGNkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYwppbmRleCAzMGQzNWU1Li4yMmUxNWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvdXNiLWVoY2ktb3Jpb24uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KQEAgLTQyLDYgKzQzLDEzIEBACiAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkVIQ0kgb3Jpb24gZHJpdmVyIgogCisjZGVmaW5lIGhjZF90b19vcmlvbl9wcml2KGgpICgoc3RydWN0IG9yaW9uX2VoY2lfaGNkICopaGNkX3RvX2VoY2koaCktPnByaXYpCisKK3N0cnVjdCBvcmlvbl9laGNpX2hjZCB7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBwaHkgKnBoeTsKK307CisKIHN0YXRpYyBjb25zdCBjaGFyIGhjZF9uYW1lW10gPSAiZWhjaS1vcmlvbiI7CiAKIHN0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIF9fcmVhZF9tb3N0bHkgZWhjaV9vcmlvbl9oY19kcml2ZXI7CkBAIC0xMzcsNiArMTQ1LDEwIEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGVoY2lfZHJpdmVyX292ZXJyaWRlcyBvcmlvbl9vdmVycmlkZXMgX19pbml0Y29uc3QgPSB7CisJLmV4dHJhX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb3Jpb25fZWhjaV9oY2QpLAorfTsKKwogc3RhdGljIGludCBlaGNpX29yaW9uX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvcmlvbl9laGNpX2RhdGEgKnBkID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKQEAgLTE0NCwyNiArMTU2LDIzIEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7Ci0Jc3RydWN0IGNsayAqY2xrOwogCXZvaWQgX19pb21lbSAqcmVnczsKIAlpbnQgaXJxLCBlcnI7CiAJZW51bSBvcmlvbl9laGNpX3BoeV92ZXIgcGh5X3ZlcnNpb247CisJc3RydWN0IG9yaW9uX2VoY2lfaGNkICpwcml2OwogCiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByX2RlYnVnKCJJbml0aWFsaXppbmcgT3Jpb24tU29DIFVTQiBIb3N0IENvbnRyb2xsZXJcbiIpOwogCi0JaWYgKHBkZXYtPmRldi5vZl9ub2RlKQotCQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMCk7Ci0JZWxzZQotCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gQ2hlY2sgJXMgc2V0dXAhXG4iLAogCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOwogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyOwogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC0xNzIsNyArMTgxLDcgQEAKIAkJCSJGb3VuZCBIQyB3aXRoIG5vIHJlZ2lzdGVyIGFkZHIuIENoZWNrICVzIHNldHVwIVxuIiwKIAkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycjsKIAl9CiAKIAkvKgpAQCAtMTgyLDI1ICsxOTEsMTkgQEAKIAkgKi8KIAllcnIgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnI7CiAKIAlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CiAJaWYgKElTX0VSUihyZWdzKSkgewogCQllcnIgPSBQVFJfRVJSKHJlZ3MpOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyOwogCX0KIAotCS8qIE5vdCBhbGwgcGxhdGZvcm1zIGNhbiBnYXRlIHRoZSBjbG9jaywgc28gaXQgaXMgbm90Ci0JICAgYW4gZXJyb3IgaWYgdGhlIGNsb2NrIGRvZXMgbm90IGV4aXN0cy4gKi8KLQljbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JaWYgKCFJU19FUlIoY2xrKSkKLQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0KIAloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZWhjaV9vcmlvbl9oY19kcml2ZXIsCiAJCQkmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjsKIAl9CiAKIAloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OwpAQCAtMjExLDYgKzIxNCwyOSBAQAogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKIAloY2QtPmhhc190dCA9IDE7CiAKKwlwcml2ID0gaGNkX3RvX29yaW9uX3ByaXYoaGNkKTsKKwkvKgorCSAqIE5vdCBhbGwgcGxhdGZvcm1zIGNhbiBnYXRlIHRoZSBjbG9jaywgc28gaXQgaXMgbm90IGFuIGVycm9yIGlmCisJICogdGhlIGNsb2NrIGRvZXMgbm90IGV4aXN0cy4KKwkgKi8KKwlwcml2LT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKCFJU19FUlIocHJpdi0+Y2xrKSkKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsayk7CisKKwlwcml2LT5waHkgPSBkZXZtX3BoeV9vcHRpb25hbF9nZXQoJnBkZXYtPmRldiwgInVzYiIpOworCWlmIChJU19FUlIocHJpdi0+cGh5KSkgeworCQllcnIgPSBQVFJfRVJSKHByaXYtPnBoeSk7CisJCWdvdG8gZXJyX3BoeV9nZXQ7CisJfSBlbHNlIHsKKwkJZXJyID0gcGh5X2luaXQocHJpdi0+cGh5KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3BoeV9pbml0OworCisJCWVyciA9IHBoeV9wb3dlcl9vbihwcml2LT5waHkpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfcGh5X3Bvd2VyX29uOworCX0KKwogCS8qCiAJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgogCSAqLwpAQCAtMjQwLDE3ICsyNjYsMjMgQEAKIAogCWVyciA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CiAJaWYgKGVycikKLQkJZ290byBlcnIzOworCQlnb3RvIGVycl9hZGRfaGNkOwogCiAJZGV2aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCXJldHVybiAwOwogCi1lcnIzOgorZXJyX2FkZF9oY2Q6CisJaWYgKCFJU19FUlIocHJpdi0+cGh5KSkKKwkJcGh5X3Bvd2VyX29mZihwcml2LT5waHkpOworZXJyX3BoeV9wb3dlcl9vbjoKKwlpZiAoIUlTX0VSUihwcml2LT5waHkpKQorCQlwaHlfZXhpdChwcml2LT5waHkpOworZXJyX3BoeV9pbml0OgorZXJyX3BoeV9nZXQ6CisJaWYgKCFJU19FUlIocHJpdi0+Y2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKLWVycjI6Ci0JaWYgKCFJU19FUlIoY2xrKSkKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7Ci1lcnIxOgorZXJyOgogCWRldl9lcnIoJnBkZXYtPmRldiwgImluaXQgJXMgZmFpbCwgJWRcbiIsCiAJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBlcnIpOwogCkBAIC0yNjAsMTQgKzI5MiwyMCBAQAogc3RhdGljIGludCBlaGNpX29yaW9uX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBvcmlvbl9laGNpX2hjZCAqcHJpdiA9IGhjZF90b19vcmlvbl9wcml2KGhjZCk7CiAKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJaWYgKCFJU19FUlIocHJpdi0+cGh5KSkgeworCQlwaHlfcG93ZXJfb2ZmKHByaXYtPnBoeSk7CisJCXBoeV9leGl0KHByaXYtPnBoeSk7CisJfQorCisJaWYgKCFJU19FUlIocHJpdi0+Y2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisKIAl1c2JfcHV0X2hjZChoY2QpOwogCi0JY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwotCWlmICghSVNfRVJSKGNsaykpCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOwogCXJldHVybiAwOwogfQogCkBAIC0yOTUsNyArMzMzLDcgQEAKIAogCXByX2luZm8oIiVzOiAiIERSSVZFUl9ERVNDICJcbiIsIGhjZF9uYW1lKTsKIAotCWVoY2lfaW5pdF9kcml2ZXIoJmVoY2lfb3Jpb25faGNfZHJpdmVyLCBOVUxMKTsKKwllaGNpX2luaXRfZHJpdmVyKCZlaGNpX29yaW9uX2hjX2RyaXZlciwgJm9yaW9uX292ZXJyaWRlcyk7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZWhjaV9vcmlvbl9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoZWhjaV9vcmlvbl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wbGF0Zm9ybS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBsYXRmb3JtLmMKaW5kZXggYzdkZDkzYS4uMmY1YjljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBsYXRmb3JtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBsYXRmb3JtLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9oY2QuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZWhjaV9wZHJpdmVyLmg+CkBAIC00MSw2ICs0Miw3IEBACiAKIHN0cnVjdCBlaGNpX3BsYXRmb3JtX3ByaXYgewogCXN0cnVjdCBjbGsgKmNsa3NbRUhDSV9NQVhfQ0xLU107CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKIAlzdHJ1Y3QgcGh5ICpwaHk7CiB9OwogCkBAIC0yMDgsNiArMjEwLDE4IEBACiAJCX0KIAl9CiAKKwlwcml2LT5yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsKCZkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihwcml2LT5yc3QpKSB7CisJCWVyciA9IFBUUl9FUlIocHJpdi0+cnN0KTsKKwkJaWYgKGVyciA9PSAtRVBST0JFX0RFRkVSKQorCQkJZ290byBlcnJfcHV0X2Nsa3M7CisJCXByaXYtPnJzdCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZXJyID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LT5yc3QpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfcHV0X2Nsa3M7CisJfQorCiAJaWYgKHBkYXRhLT5iaWdfZW5kaWFuX2Rlc2MpCiAJCWVoY2ktPmJpZ19lbmRpYW5fZGVzYyA9IDE7CiAJaWYgKHBkYXRhLT5iaWdfZW5kaWFuX21taW8pCkBAIC0yMTgsNyArMjMyLDcgQEAKIAkJZGV2X2VycigmZGV2LT5kZXYsCiAJCQkiRXJyb3I6IENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gbm90IHNldFxuIik7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3B1dF9jbGtzOworCQlnb3RvIGVycl9yZXNldDsKIAl9CiAjZW5kaWYKICNpZm5kZWYgQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fREVTQwpAQCAtMjI2LDE0ICsyNDAsMTQgQEAKIAkJZGV2X2VycigmZGV2LT5kZXYsCiAJCQkiRXJyb3I6IENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX0RFU0Mgbm90IHNldFxuIik7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3B1dF9jbGtzOworCQlnb3RvIGVycl9yZXNldDsKIAl9CiAjZW5kaWYKIAogCWlmIChwZGF0YS0+cG93ZXJfb24pIHsKIAkJZXJyID0gcGRhdGEtPnBvd2VyX29uKGRldik7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJfcHV0X2Nsa3M7CisJCQlnb3RvIGVycl9yZXNldDsKIAl9CiAKIAloY2QtPnJzcmNfc3RhcnQgPSByZXNfbWVtLT5zdGFydDsKQEAgLTI1Niw2ICsyNzAsOSBAQAogZXJyX3Bvd2VyOgogCWlmIChwZGF0YS0+cG93ZXJfb2ZmKQogCQlwZGF0YS0+cG93ZXJfb2ZmKGRldik7CitlcnJfcmVzZXQ6CisJaWYgKHByaXYtPnJzdCkKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cnN0KTsKIGVycl9wdXRfY2xrczoKIAl3aGlsZSAoLS1jbGsgPj0gMCkKIAkJY2xrX3B1dChwcml2LT5jbGtzW2Nsa10pOwpAQCAtMjgwLDYgKzI5Nyw5IEBACiAJaWYgKHBkYXRhLT5wb3dlcl9vZmYpCiAJCXBkYXRhLT5wb3dlcl9vZmYoZGV2KTsKIAorCWlmIChwcml2LT5yc3QpCisJCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtPnJzdCk7CisKIAlmb3IgKGNsayA9IDA7IGNsayA8IEVIQ0lfTUFYX0NMS1MgJiYgcHJpdi0+Y2xrc1tjbGtdOyBjbGsrKykKIAkJY2xrX3B1dChwcml2LT5jbGtzW2Nsa10pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc3BlYXIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zcGVhci5jCmluZGV4IDhiZDkxNWIuLjFkNTk5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zcGVhci5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zcGVhci5jCkBAIC0xMDYsMTYgKzEwNiw5IEBACiAKIAloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OwogCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7Ci0JaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCBoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sCi0JCQkJZHJpdmVyLT5kZXNjcmlwdGlvbikpIHsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycl9wdXRfaGNkOwotCX0KLQotCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCBoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCWlmIChoY2QtPnJlZ3MgPT0gTlVMTCkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBtYXBwaW5nIG1lbW9yeVxuIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07CisJaGNkLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihoY2QtPnJlZ3MpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoaGNkLT5yZWdzKTsKIAkJZ290byBlcnJfcHV0X2hjZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS10ZWdyYS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKaW5kZXggN2VmMDBlYy4uNmZkY2I4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKQEAgLTUxLDEwICs1MSw2IEBACiAJYm9vbCBoYXNfaG9zdHBjOwogfTsKIAotc3RhdGljIGludCAoKm9yaWdfaHViX2NvbnRyb2wpKHN0cnVjdCB1c2JfaGNkICpoY2QsCi0JCQkJdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsIHUxNiB3SW5kZXgsCi0JCQkJY2hhciAqYnVmLCB1MTYgd0xlbmd0aCk7Ci0KIHN0cnVjdCB0ZWdyYV9laGNpX2hjZCB7CiAJc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeTsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0yMzYsNyArMjMyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBIYW5kbGUgdGhlIGh1YiBjb250cm9sIGV2ZW50cyBoZXJlICovCi0JcmV0dXJuIG9yaWdfaHViX2NvbnRyb2woaGNkLCB0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwgYnVmLCB3TGVuZ3RoKTsKKwlyZXR1cm4gZWhjaV9odWJfY29udHJvbChoY2QsIHR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCBidWYsIHdMZW5ndGgpOwogCiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKQEAgLTQxNSwxMCArNDExLDkgQEAKIAl9CiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKIAloY2QtPnJzcmNfbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwotCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghaGNkLT5yZWdzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKLQkJZXJyID0gLUVOT01FTTsKKwloY2QtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGhjZC0+cmVncykpIHsKKwkJZXJyID0gUFRSX0VSUihoY2QtPnJlZ3MpOwogCQlnb3RvIGNsZWFudXBfY2xrX2VuOwogCX0KIAllaGNpLT5jYXBzID0gaGNkLT5yZWdzICsgMHgxMDA7CkBAIC01NTQsOCArNTQ5LDYgQEAKIAkgKiB0b28gZWFzeS4KIAkgKi8KIAotCW9yaWdfaHViX2NvbnRyb2wgPSB0ZWdyYV9laGNpX2hjX2RyaXZlci5odWJfY29udHJvbDsKLQogCXRlZ3JhX2VoY2lfaGNfZHJpdmVyLm1hcF91cmJfZm9yX2RtYSA9IHRlZ3JhX2VoY2lfbWFwX3VyYl9mb3JfZG1hOwogCXRlZ3JhX2VoY2lfaGNfZHJpdmVyLnVubWFwX3VyYl9mb3JfZG1hID0gdGVncmFfZWhjaV91bm1hcF91cmJfZm9yX2RtYTsKIAl0ZWdyYV9laGNpX2hjX2RyaXZlci5odWJfY29udHJvbCA9IHRlZ3JhX2VoY2lfaHViX2NvbnRyb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDlkZmM2YzEuLmVlZTIyOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC04NzIsNCArODcyLDcgQEAKIGV4dGVybiBpbnQJZWhjaV9yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgYm9vbCBoaWJlcm5hdGVkKTsKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAorZXh0ZXJuIGludAllaGNpX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkCSpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLAorCQkJCSB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKTsKKwogI2VuZGlmIC8qIF9fTElOVVhfRUhDSV9IQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9tYXgzNDIxLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9tYXgzNDIxLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGVmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L21heDM0MjEtaGNkLmMKQEAgLTAsMCArMSwxOTU3IEBACisvKgorICogTUFYMzQyMSBIb3N0IENvbnRyb2xsZXIgZHJpdmVyIGZvciBVU0IuCisgKgorICogQXV0aG9yOiBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGVnYXVnZS5uZXQ+CisgKgorICogKEMpIENvcHlyaWdodCAyMDE0IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AZWdhdWdlLm5ldD4KKyAqCisgKiBNQVgzNDIxIGlzIGEgY2hpcCBpbXBsZW1lbnRpbmcgYSBVU0IgMi4wIEZ1bGwtL0xvdy1TcGVlZCBob3N0CisgKiBjb250cm9sbGVyIG9uIGEgU1BJIGJ1cy4KKyAqCisgKiBCYXNlZCBvbjoKKyAqCW8gTUFYMzQyMUUgZGF0YXNoZWV0CisgKgkJaHR0cDovL2RhdGFzaGVldHMubWF4aW1pbnRlZ3JhdGVkLmNvbS9lbi9kcy9NQVgzNDIxRS5wZGYKKyAqCW8gTUFYMzQyMUUgUHJvZ3JhbW1pbmcgR3VpZGUKKyAqCQlodHRwOi8vd3d3LmhkbC5jby5qcC9mdHBkYXRhL3V0bC0wMDEvQU4zNzg1LnBkZgorICoJbyBnYWRnZXQvZHVtbXlfaGNkLmMKKyAqCQlGb3IgVVNCIEhDRCBpbXBsZW1lbnRhdGlvbi4KKyAqCW8gQXJkdWlubyBNQVgzNDIxIGRyaXZlcgorICoJICAgICBodHRwczovL2dpdGh1Yi5jb20vZmVsaXMvVVNCX0hvc3RfU2hpZWxkXzIuMC9ibG9iL21hc3Rlci9Vc2IuY3BwCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwgdjIuCisgKgorICogSW1wb3J0YW50IG5vdGUgb24gd29yc3QtY2FzZSAoZnVsbC1zcGVlZCkgcGFja2V0IHNpemUgY29uc3RyYWludHMKKyAqIChTZWUgVVNCIDIuMCBTZWN0aW9uIDUuNi4zIGFuZCBmb2xsb3dpbmcpOgorICoKKyAqCS0gY29udHJvbDoJICA2NCBieXRlcworICoJLSBpc29jaHJvbm91czoJMTAyMyBieXRlcworICoJLSBpbnRlcnJ1cHQ6CSAgNjQgYnl0ZXMKKyAqCS0gYnVsazoJCSAgNjQgYnl0ZXMKKyAqCisgKiBTaW5jZSB0aGUgTUFYMzQyMSBGSUZPIHNpemUgaXMgNjQgYnl0ZXMsIHdlIGRvIG5vdCBoYXZlIHRvIHdvcmsgYWJvdXQKKyAqIG11bHRpLUZJRk8gd3JpdGVzL3JlYWRzIGZvciBhIHNpbmdsZSBVU0IgcGFja2V0ICpleGNlcHQqIGZvciBpc29jaHJvbm91cworICogdHJhbnNmZXJzLiAgV2UgZG9uJ3Qgc3VwcG9ydCBpc29jaHJvbm91cyB0cmFuc2ZlcnMgYXQgdGhpcyB0aW1lLCBzbyB3ZQorICoganVzdCBhc3N1bWUgdGhhdCBhIFVTQiBwYWNrZXQgYWx3YXlzIGZpdHMgaW50byBhIHNpbmdsZSBGSUZPIGJ1ZmZlci4KKyAqCisgKiBOT1RFOiBUaGUgSnVuZSAyMDA2IHZlcnNpb24gb2YgIk1BWDM0MjFFIFByb2dyYW1taW5nIEd1aWRlIgorICogKEFOMzc4NSkgaGFzIGNvbmZsaWN0aW5nIGluZm8gZm9yIHRoZSBSQ1ZEQVZJUlEgYml0OgorICoKKyAqCVRoZSBkZXNjcmlwdGlvbiBvZiBSQ1ZEQVZJUlEgc2F5cyAiVGhlIENQVSAqbXVzdCogY2xlYXIKKyAqCXRoaXMgSVJRIGJpdCAoYnkgd3JpdGluZyBhIDEgdG8gaXQpIGJlZm9yZSByZWFkaW5nIHRoZQorICoJUkNWRklGTyBkYXRhLgorICoKKyAqIEhvd2V2ZXIsIHRoZSBlYXJsaWVyIHNlY3Rpb24gb24gIlByb2dyYW1taW5nIEJVTEstSU4KKyAqIFRyYW5zZmVycyIgc2F5cyAqIHRoYXQ6CisgKgorICoJQWZ0ZXIgdGhlIENQVSByZXRyaWV2ZXMgdGhlIGRhdGEsIGl0IGNsZWFycyB0aGUKKyAqCVJDVkRBVklSUSBiaXQuCisgKgorICogVGhlIERlY2VtYmVyIDIwMDYgdmVyc2lvbiBoYXMgYmVlbiBjb3JyZWN0ZWQgYW5kIGl0IGNvbnNpc3RlbnRseQorICogc3RhdGVzIHRoZSBzZWNvbmQgYmVoYXZpb3IgaXMgdGhlIGNvcnJlY3Qgb25lLgorICoKKyAqIFN5bmNocm9ub3VzIFNQSSB0cmFuc2FjdGlvbnMgc2xlZXAgc28gd2UgY2FuJ3QgcGVyZm9ybSBhbnkgc3VjaAorICogdHJhbnNhY3Rpb25zIHdoaWxlIGhvbGRpbmcgYSBzcGluLWxvY2sgKGFuZC9vciB3aGlsZSBpbnRlcnJ1cHRzIGFyZQorICogbWFza2VkKS4gIFRvIGFjaGlldmUgdGhpcywgYWxsIFNQSSB0cmFuc2FjdGlvbnMgYXJlIGlzc3VlZCBmcm9tIGEKKyAqIHNpbmdsZSB0aHJlYWQgKG1heDM0MjFfc3BpX3RocmVhZCkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21heDM0MjEtaGNkLmg+CisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIk1BWDM0MjEgVVNCIEhvc3QtQ29udHJvbGxlciBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIxLjAiCisKKy8qIDExLWJpdCBjb3VudGVyIHRoYXQgd3JhcHMgYXJvdW5kIChVU0IgMi4wIFNlY3Rpb24gOC4zLjMpOiAqLworI2RlZmluZSBVU0JfTUFYX0ZSQU1FX05VTUJFUgkweDdmZgorI2RlZmluZSBVU0JfTUFYX1JFVFJJRVMJCTMgLyogIyBvZiByZXRyaWVzIGJlZm9yZSBlcnJvciBpcyByZXBvcnRlZCAqLworCisvKgorICogTWF4LiAjIG9mIHRpbWVzIHdlJ3JlIHdpbGxpbmcgdG8gcmV0cmFuc21pdCBhIHJlcXVlc3QgaW1tZWRpYXRlbHkgaW4KKyAqIHJlc3Bvc25lIHRvIGEgTkFLLiAgQWZ0ZXJ3YXJkcywgd2UgZmFsbCBiYWNrIG9uIHRyeWluZyBvbmNlIGEgZnJhbWUuCisgKi8KKyNkZWZpbmUgTkFLX01BWF9GQVNUX1JFVFJBTlNNSVRTCTIKKworI2RlZmluZSBQT1dFUl9CVURHRVQJNTAwCS8qIGluIG1BOyB1c2UgOCBmb3IgbG93LXBvd2VyIHBvcnQgdGVzdGluZyAqLworCisvKiBQb3J0LWNoYW5nZSBtYXNrOiAqLworI2RlZmluZSBQT1JUX0NfTUFTSwkoKFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OIHwJXAorCQkJICBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFIHwJXAorCQkJICBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCB8CVwKKwkJCSAgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UIHwgXAorCQkJICBVU0JfUE9SVF9TVEFUX0NfUkVTRVQpIDw8IDE2KQorCitlbnVtIG1heDM0MjFfcmhfc3RhdGUgeworCU1BWDM0MjFfUkhfUkVTRVQsCisJTUFYMzQyMV9SSF9TVVNQRU5ERUQsCisJTUFYMzQyMV9SSF9SVU5OSU5HCit9OworCitlbnVtIHBrdF9zdGF0ZSB7CisJUEtUX1NUQVRFX1NFVFVQLAkvKiB3YWl0aW5nIHRvIHNlbmQgc2V0dXAgcGFja2V0IHRvIGN0cmwgcGlwZSAqLworCVBLVF9TVEFURV9UUkFOU0ZFUiwJLyogd2FpdGluZyB0byB4ZmVyIHRyYW5zZmVyX2J1ZmZlciAqLworCVBLVF9TVEFURV9URVJNSU5BVEUJLyogd2FpdGluZyB0byB0ZXJtaW5hdGUgY29udHJvbCB0cmFuc2ZlciAqLworfTsKKworZW51bSBzY2hlZHVsaW5nX3Bhc3MgeworCVNDSEVEX1BBU1NfUEVSSU9ESUMsCisJU0NIRURfUEFTU19OT05fUEVSSU9ESUMsCisJU0NIRURfUEFTU19ET05FCit9OworCitzdHJ1Y3QgbWF4MzQyMV9kbWFfYnVmIHsKKwl1OCBkYXRhWzJdOworfTsKKworc3RydWN0IG1heDM0MjFfaGNkIHsKKwlzcGlubG9ja190IGxvY2s7CisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNwaV90aHJlYWQ7CisKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm5leHQ7CisKKwllbnVtIG1heDM0MjFfcmhfc3RhdGUgcmhfc3RhdGU7CisJLyogbG93ZXIgMTYgYml0cyBjb250YWluIHBvcnQgc3RhdHVzLCB1cHBlciAxNiBiaXRzIHRoZSBjaGFuZ2UgbWFzazogKi8KKwl1MzIgcG9ydF9zdGF0dXM7CisKKwl1bnNpZ25lZCBhY3RpdmU6MTsKKworCXN0cnVjdCBsaXN0X2hlYWQgZXBfbGlzdDsJLyogbGlzdCBvZiBFUCdzIHdpdGggd29yayAqLworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGFyZSBvd25lZCBieSBzcGlfdGhyZWFkIChtYXkgYmUgYWNjZXNzZWQgYnkKKwkgKiBTUEktdGhyZWFkIHdpdGhvdXQgYWNxdWlyaW5nIHRoZSBIQ0QgbG9jazoKKwkgKi8KKwl1OCByZXY7CQkJCS8qIGNoaXAgcmV2aXNpb24gKi8KKwl1MTYgZnJhbWVfbnVtYmVyOworCS8qCisJICoga21hbGxvYydkIGJ1ZmZlcnMgZ3VhcmFudGVlZCB0byBiZSBpbiBzZXBhcmF0ZSAoRE1BKQorCSAqIGNhY2hlLWxpbmVzOgorCSAqLworCXN0cnVjdCBtYXgzNDIxX2RtYV9idWYgKnR4OworCXN0cnVjdCBtYXgzNDIxX2RtYV9idWYgKnJ4OworCS8qCisJICogVVJCIHdlJ3JlIGN1cnJlbnRseSBwcm9jZXNzaW5nLiAgTXVzdCBub3QgYmUgcmVzZXQgdG8gTlVMTAorCSAqIHVubGVzcyBNQVgzNDIxRSBjaGlwIGlzIGlkbGU6CisJICovCisJc3RydWN0IHVyYiAqY3Vycl91cmI7CisJZW51bSBzY2hlZHVsaW5nX3Bhc3Mgc2NoZWRfcGFzczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqbG9hZGVkX2RldjsJLyogZGV2IHRoYXQncyBsb2FkZWQgaW50byB0aGUgY2hpcCAqLworCWludCBsb2FkZWRfZXBudW07CQkvKiBlcG51bSB3aG9zZSB0b2dnbGVzIGFyZSBsb2FkZWQgKi8KKwlpbnQgdXJiX2RvbmU7CQkJLyogPiAwIC0+IG5vIGVycm9ycywgPCAwOiBlcnJubyAqLworCXNpemVfdCBjdXJyX2xlbjsKKwl1OCBoaWVuOworCXU4IG1vZGU7CisJdTggaW9waW5zWzJdOworCXVuc2lnbmVkIGludCBkb19lbmFibGVfaXJxOjE7CisJdW5zaWduZWQgaW50IGRvX3Jlc2V0X2hjZDoxOworCXVuc2lnbmVkIGludCBkb19yZXNldF9wb3J0OjE7CisJdW5zaWduZWQgaW50IGRvX2NoZWNrX3VubGluazoxOworCXVuc2lnbmVkIGludCBkb19pb3Bpbl91cGRhdGU6MTsKKyNpZmRlZiBERUJVRworCXVuc2lnbmVkIGxvbmcgZXJyX3N0YXRbMTZdOworI2VuZGlmCit9OworCitzdHJ1Y3QgbWF4MzQyMV9lcCB7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVwX2xpc3Q7CisJdTMyIG5ha3M7CisJdTE2IGxhc3RfYWN0aXZlOwkJLyogZnJhbWUgIyB0aGlzIGVwIHdhcyBsYXN0IGFjdGl2ZSAqLworCWVudW0gcGt0X3N0YXRlIHBrdF9zdGF0ZTsKKwl1OCByZXRyaWVzOworCXU4IHJldHJhbnNtaXQ7CQkJLyogcGFja2V0IG5lZWRzIHJldHJhbnNtaXNzaW9uICovCit9OworCitzdGF0aWMgc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZF9saXN0OworCisjZGVmaW5lIE1BWDM0MjFfRklGT19TSVpFCTY0CisKKyNkZWZpbmUgTUFYMzQyMV9TUElfRElSX1JECTAJLyogcmVhZCByZWdpc3RlciBmcm9tIE1BWDM0MjEgKi8KKyNkZWZpbmUgTUFYMzQyMV9TUElfRElSX1dSCTEJLyogd3JpdGUgcmVnaXN0ZXIgdG8gTUFYMzQyMSAqLworCisvKiBTUEkgY29tbWFuZHM6ICovCisjZGVmaW5lIE1BWDM0MjFfU1BJX0RJUl9TSElGVAkxCisjZGVmaW5lIE1BWDM0MjFfU1BJX1JFR19TSElGVAkzCisKKyNkZWZpbmUgTUFYMzQyMV9SRUdfUkNWRklGTwkxCisjZGVmaW5lIE1BWDM0MjFfUkVHX1NOREZJRk8JMgorI2RlZmluZSBNQVgzNDIxX1JFR19TVURGSUZPCTQKKyNkZWZpbmUgTUFYMzQyMV9SRUdfUkNWQkMJNgorI2RlZmluZSBNQVgzNDIxX1JFR19TTkRCQwk3CisjZGVmaW5lIE1BWDM0MjFfUkVHX1VTQklSUQkxMworI2RlZmluZSBNQVgzNDIxX1JFR19VU0JJRU4JMTQKKyNkZWZpbmUgTUFYMzQyMV9SRUdfVVNCQ1RMCTE1CisjZGVmaW5lIE1BWDM0MjFfUkVHX0NQVUNUTAkxNgorI2RlZmluZSBNQVgzNDIxX1JFR19QSU5DVEwJMTcKKyNkZWZpbmUgTUFYMzQyMV9SRUdfUkVWSVNJT04JMTgKKyNkZWZpbmUgTUFYMzQyMV9SRUdfSU9QSU5TMQkyMAorI2RlZmluZSBNQVgzNDIxX1JFR19JT1BJTlMyCTIxCisjZGVmaW5lIE1BWDM0MjFfUkVHX0dQSU5JUlEJMjIKKyNkZWZpbmUgTUFYMzQyMV9SRUdfR1BJTklFTgkyMworI2RlZmluZSBNQVgzNDIxX1JFR19HUElOUE9MCTI0CisjZGVmaW5lIE1BWDM0MjFfUkVHX0hJUlEJMjUKKyNkZWZpbmUgTUFYMzQyMV9SRUdfSElFTgkyNgorI2RlZmluZSBNQVgzNDIxX1JFR19NT0RFCTI3CisjZGVmaW5lIE1BWDM0MjFfUkVHX1BFUkFERFIJMjgKKyNkZWZpbmUgTUFYMzQyMV9SRUdfSENUTAkyOQorI2RlZmluZSBNQVgzNDIxX1JFR19IWEZSCTMwCisjZGVmaW5lIE1BWDM0MjFfUkVHX0hSU0wJMzEKKworZW51bSB7CisJTUFYMzQyMV9VU0JJUlFfT1NDT0tJUlFfQklUID0gMCwKKwlNQVgzNDIxX1VTQklSUV9OT1ZCVVNJUlFfQklUID0gNSwKKwlNQVgzNDIxX1VTQklSUV9WQlVTSVJRX0JJVAorfTsKKworZW51bSB7CisJTUFYMzQyMV9DUFVDVExfSUVfQklUID0gMCwKKwlNQVgzNDIxX0NQVUNUTF9QVUxTRVdJRDBfQklUID0gNiwKKwlNQVgzNDIxX0NQVUNUTF9QVUxTRVdJRDFfQklUCit9OworCitlbnVtIHsKKwlNQVgzNDIxX1VTQkNUTF9QV1JET1dOX0JJVCA9IDQsCisJTUFYMzQyMV9VU0JDVExfQ0hJUFJFU19CSVQKK307CisKK2VudW0geworCU1BWDM0MjFfUElOQ1RMX0dQWEFfQklUCT0gMCwKKwlNQVgzNDIxX1BJTkNUTF9HUFhCX0JJVCwKKwlNQVgzNDIxX1BJTkNUTF9QT1NJTlRfQklULAorCU1BWDM0MjFfUElOQ1RMX0lOVExFVkVMX0JJVCwKKwlNQVgzNDIxX1BJTkNUTF9GRFVQU1BJX0JJVCwKKwlNQVgzNDIxX1BJTkNUTF9FUDBJTkFLX0JJVCwKKwlNQVgzNDIxX1BJTkNUTF9FUDJJTkFLX0JJVCwKKwlNQVgzNDIxX1BJTkNUTF9FUDNJTkFLX0JJVCwKK307CisKK2VudW0geworCU1BWDM0MjFfSElfQlVTRVZFTlRfQklUID0gMCwJLyogYnVzLXJlc2V0Ly1yZXN1bWUgKi8KKwlNQVgzNDIxX0hJX1JXVV9CSVQsCQkvKiByZW1vdGUgd2FrZXVwICovCisJTUFYMzQyMV9ISV9SQ1ZEQVZfQklULAkJLyogcmVjZWl2ZSBGSUZPIGRhdGEgYXZhaWxhYmxlICovCisJTUFYMzQyMV9ISV9TTkRCQVZfQklULAkJLyogc2VuZCBidWZmZXIgYXZhaWxhYmxlICovCisJTUFYMzQyMV9ISV9TVVNETl9CSVQsCQkvKiBzdXNwZW5kIG9wZXJhdGlvbiBkb25lICovCisJTUFYMzQyMV9ISV9DT05ERVRfQklULAkJLyogcGVyaXBoZXJhbCBjb25uZWN0L2Rpc2Nvbm5lY3QgKi8KKwlNQVgzNDIxX0hJX0ZSQU1FX0JJVCwJCS8qIGZyYW1lIGdlbmVyYXRvciAqLworCU1BWDM0MjFfSElfSFhGUkROX0JJVCwJCS8qIGhvc3QgdHJhbnNmZXIgZG9uZSAqLworfTsKKworZW51bSB7CisJTUFYMzQyMV9IQ1RMX0JVU1JTVF9CSVQgPSAwLAorCU1BWDM0MjFfSENUTF9GUk1SU1RfQklULAorCU1BWDM0MjFfSENUTF9TQU1QTEVCVVNfQklULAorCU1BWDM0MjFfSENUTF9TSUdSU01fQklULAorCU1BWDM0MjFfSENUTF9SQ1ZUT0cwX0JJVCwKKwlNQVgzNDIxX0hDVExfUkNWVE9HMV9CSVQsCisJTUFYMzQyMV9IQ1RMX1NORFRPRzBfQklULAorCU1BWDM0MjFfSENUTF9TTkRUT0cxX0JJVAorfTsKKworZW51bSB7CisJTUFYMzQyMV9NT0RFX0hPU1RfQklUID0gMCwKKwlNQVgzNDIxX01PREVfTE9XU1BFRURfQklULAorCU1BWDM0MjFfTU9ERV9IVUJQUkVfQklULAorCU1BWDM0MjFfTU9ERV9TT0ZLQUVOQUJfQklULAorCU1BWDM0MjFfTU9ERV9TRVBJUlFfQklULAorCU1BWDM0MjFfTU9ERV9ERUxBWUlTT19CSVQsCisJTUFYMzQyMV9NT0RFX0RNUFVMTEROX0JJVCwKKwlNQVgzNDIxX01PREVfRFBQVUxMRE5fQklUCit9OworCitlbnVtIHsKKwlNQVgzNDIxX0hSU0xfT0sgPSAwLAorCU1BWDM0MjFfSFJTTF9CVVNZLAorCU1BWDM0MjFfSFJTTF9CQURSRVEsCisJTUFYMzQyMV9IUlNMX1VOREVGLAorCU1BWDM0MjFfSFJTTF9OQUssCisJTUFYMzQyMV9IUlNMX1NUQUxMLAorCU1BWDM0MjFfSFJTTF9UT0dFUlIsCisJTUFYMzQyMV9IUlNMX1dST05HUElELAorCU1BWDM0MjFfSFJTTF9CQURCQywKKwlNQVgzNDIxX0hSU0xfUElERVJSLAorCU1BWDM0MjFfSFJTTF9QS1RFUlIsCisJTUFYMzQyMV9IUlNMX0NSQ0VSUiwKKwlNQVgzNDIxX0hSU0xfS0VSUiwKKwlNQVgzNDIxX0hSU0xfSkVSUiwKKwlNQVgzNDIxX0hSU0xfVElNRU9VVCwKKwlNQVgzNDIxX0hSU0xfQkFCQkxFLAorCU1BWDM0MjFfSFJTTF9SRVNVTFRfTUFTSyA9IDB4ZiwKKwlNQVgzNDIxX0hSU0xfUkNWVE9HUkRfQklUID0gNCwKKwlNQVgzNDIxX0hSU0xfU05EVE9HUkRfQklULAorCU1BWDM0MjFfSFJTTF9LU1RBVFVTX0JJVCwKKwlNQVgzNDIxX0hSU0xfSlNUQVRVU19CSVQKK307CisKKy8qIFJldHVybiBzYW1lIGVycm9yLWNvZGVzIGFzIG9oY2kuaDpjY190b19lcnJvcjogKi8KK3N0YXRpYyBjb25zdCBpbnQgaHJzbF90b19lcnJvcltdID0geworCVtNQVgzNDIxX0hSU0xfT0tdID0JCTAsCisJW01BWDM0MjFfSFJTTF9CVVNZXSA9CQktRUlOVkFMLAorCVtNQVgzNDIxX0hSU0xfQkFEUkVRXSA9CQktRUlOVkFMLAorCVtNQVgzNDIxX0hSU0xfVU5ERUZdID0JCS1FSU5WQUwsCisJW01BWDM0MjFfSFJTTF9OQUtdID0JCS1FQUdBSU4sCisJW01BWDM0MjFfSFJTTF9TVEFMTF0gPQkJLUVQSVBFLAorCVtNQVgzNDIxX0hSU0xfVE9HRVJSXSA9CQktRUlMU0VRLAorCVtNQVgzNDIxX0hSU0xfV1JPTkdQSURdID0JLUVQUk9UTywKKwlbTUFYMzQyMV9IUlNMX0JBREJDXSA9CQktRVJFTU9URUlPLAorCVtNQVgzNDIxX0hSU0xfUElERVJSXSA9CQktRVBST1RPLAorCVtNQVgzNDIxX0hSU0xfUEtURVJSXSA9CQktRVBST1RPLAorCVtNQVgzNDIxX0hSU0xfQ1JDRVJSXSA9CQktRUlMU0VRLAorCVtNQVgzNDIxX0hSU0xfS0VSUl0gPQkJLUVJTywKKwlbTUFYMzQyMV9IUlNMX0pFUlJdID0JCS1FSU8sCisJW01BWDM0MjFfSFJTTF9USU1FT1VUXSA9CS1FVElNRSwKKwlbTUFYMzQyMV9IUlNMX0JBQkJMRV0gPQkJLUVPVkVSRkxPVworfTsKKworLyoKKyAqIFNlZSBodHRwOi8vd3d3LmJleW9uZGxvZ2ljLm9yZy91c2JudXRzaGVsbC91c2I0LnNodG1sI0NvbnRyb2wgZm9yIGEKKyAqIHJlYXNvbmFibGUgb3ZlcnZpZXcgb2YgaG93IGNvbnRyb2wgdHJhbnNmZXJzIHVzZSB0aGUgdGhlIElOL09VVAorICogdG9rZW5zLgorICovCisjZGVmaW5lIE1BWDM0MjFfSFhGUl9CVUxLX0lOKGVwKQkoMHgwMCB8IChlcCkpCS8qIGJ1bGsgb3IgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BWDM0MjFfSFhGUl9TRVRVUAkJIDB4MTAKKyNkZWZpbmUgTUFYMzQyMV9IWEZSX0JVTEtfT1VUKGVwKQkoMHgyMCB8IChlcCkpCS8qIGJ1bGsgb3IgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BWDM0MjFfSFhGUl9JU09fSU4oZXApCQkoMHg0MCB8IChlcCkpCisjZGVmaW5lIE1BWDM0MjFfSFhGUl9JU09fT1VUKGVwKQkoMHg2MCB8IChlcCkpCisjZGVmaW5lIE1BWDM0MjFfSFhGUl9IU19JTgkJIDB4ODAJCS8qIGhhbmRzaGFrZSBpbiAqLworI2RlZmluZSBNQVgzNDIxX0hYRlJfSFNfT1VUCQkgMHhhMAkJLyogaGFuZHNoYWtlIG91dCAqLworCisjZGVmaW5lIGZpZWxkKHZhbCwgYml0KQkoKHZhbCkgPDwgKGJpdCkpCisKK3N0YXRpYyBpbmxpbmUgczE2CitmcmFtZV9kaWZmKHUxNiBsZWZ0LCB1MTYgcmlnaHQpCit7CisJcmV0dXJuICgodW5zaWduZWQpIChsZWZ0IC0gcmlnaHQpKSAlIChVU0JfTUFYX0ZSQU1FX05VTUJFUiArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXgzNDIxX2hjZCAqCitoY2RfdG9fbWF4MzQyMShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IG1heDM0MjFfaGNkICopIGhjZC0+aGNkX3ByaXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKgorbWF4MzQyMV90b19oY2Qoc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIG1heDM0MjFfaGNkLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdGF0aWMgdTgKK3NwaV9yZDgoc3RydWN0IHVzYl9oY2QgKmhjZCwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShoY2QtPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0cmFuc2ZlcjsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCisJbWVtc2V0KCZ0cmFuc2ZlciwgMCwgc2l6ZW9mKHRyYW5zZmVyKSk7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCisJbWF4MzQyMV9oY2QtPnR4LT5kYXRhWzBdID0KKwkJKGZpZWxkKHJlZywgTUFYMzQyMV9TUElfUkVHX1NISUZUKSB8CisJCSBmaWVsZChNQVgzNDIxX1NQSV9ESVJfUkQsIE1BWDM0MjFfU1BJX0RJUl9TSElGVCkpOworCisJdHJhbnNmZXIudHhfYnVmID0gbWF4MzQyMV9oY2QtPnR4LT5kYXRhOworCXRyYW5zZmVyLnJ4X2J1ZiA9IG1heDM0MjFfaGNkLT5yeC0+ZGF0YTsKKwl0cmFuc2Zlci5sZW4gPSAyOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRyYW5zZmVyLCAmbXNnKTsKKwlzcGlfc3luYyhzcGksICZtc2cpOworCisJcmV0dXJuIG1heDM0MjFfaGNkLT5yeC0+ZGF0YVsxXTsKK30KKworc3RhdGljIHZvaWQKK3NwaV93cjgoc3RydWN0IHVzYl9oY2QgKmhjZCwgdW5zaWduZWQgaW50IHJlZywgdTggdmFsKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRyYW5zZmVyOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CisKKwltZW1zZXQoJnRyYW5zZmVyLCAwLCBzaXplb2YodHJhbnNmZXIpKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisKKwltYXgzNDIxX2hjZC0+dHgtPmRhdGFbMF0gPQorCQkoZmllbGQocmVnLCBNQVgzNDIxX1NQSV9SRUdfU0hJRlQpIHwKKwkJIGZpZWxkKE1BWDM0MjFfU1BJX0RJUl9XUiwgTUFYMzQyMV9TUElfRElSX1NISUZUKSk7CisJbWF4MzQyMV9oY2QtPnR4LT5kYXRhWzFdID0gdmFsOworCisJdHJhbnNmZXIudHhfYnVmID0gbWF4MzQyMV9oY2QtPnR4LT5kYXRhOworCXRyYW5zZmVyLmxlbiA9IDI7CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdHJhbnNmZXIsICZtc2cpOworCXNwaV9zeW5jKHNwaSwgJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGlfcmRfYnVmKHN0cnVjdCB1c2JfaGNkICpoY2QsIHVuc2lnbmVkIGludCByZWcsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShoY2QtPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCA9IGhjZF90b19tYXgzNDIxKGhjZCk7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0cmFuc2ZlclsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCisJbWVtc2V0KHRyYW5zZmVyLCAwLCBzaXplb2YodHJhbnNmZXIpKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisKKwltYXgzNDIxX2hjZC0+dHgtPmRhdGFbMF0gPQorCQkoZmllbGQocmVnLCBNQVgzNDIxX1NQSV9SRUdfU0hJRlQpIHwKKwkJIGZpZWxkKE1BWDM0MjFfU1BJX0RJUl9SRCwgTUFYMzQyMV9TUElfRElSX1NISUZUKSk7CisJdHJhbnNmZXJbMF0udHhfYnVmID0gbWF4MzQyMV9oY2QtPnR4LT5kYXRhOworCXRyYW5zZmVyWzBdLmxlbiA9IDE7CisKKwl0cmFuc2ZlclsxXS5yeF9idWYgPSBidWY7CisJdHJhbnNmZXJbMV0ubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRyYW5zZmVyWzBdLCAmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdHJhbnNmZXJbMV0sICZtc2cpOworCXNwaV9zeW5jKHNwaSwgJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGlfd3JfYnVmKHN0cnVjdCB1c2JfaGNkICpoY2QsIHVuc2lnbmVkIGludCByZWcsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShoY2QtPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCA9IGhjZF90b19tYXgzNDIxKGhjZCk7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0cmFuc2ZlclsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCisJbWVtc2V0KHRyYW5zZmVyLCAwLCBzaXplb2YodHJhbnNmZXIpKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisKKwltYXgzNDIxX2hjZC0+dHgtPmRhdGFbMF0gPQorCQkoZmllbGQocmVnLCBNQVgzNDIxX1NQSV9SRUdfU0hJRlQpIHwKKwkJIGZpZWxkKE1BWDM0MjFfU1BJX0RJUl9XUiwgTUFYMzQyMV9TUElfRElSX1NISUZUKSk7CisKKwl0cmFuc2ZlclswXS50eF9idWYgPSBtYXgzNDIxX2hjZC0+dHgtPmRhdGE7CisJdHJhbnNmZXJbMF0ubGVuID0gMTsKKworCXRyYW5zZmVyWzFdLnR4X2J1ZiA9IGJ1ZjsKKwl0cmFuc2ZlclsxXS5sZW4gPSBsZW47CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdHJhbnNmZXJbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0cmFuc2ZlclsxXSwgJm1zZyk7CisJc3BpX3N5bmMoc3BpLCAmbXNnKTsKK30KKworLyoKKyAqIEZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2V0dGluZyBmb3IgdGhlIExPV1NQRUVEIGFuZCBIVUJQUkUgbW9kZQorICogYml0cy4gIFRoZSBIVUJQUkUgYml0IG5lZWRzIHRvIGJlIHNldCB3aGVuIE1BWDM0MjFFIG9wZXJhdGVzIGF0CisgKiBmdWxsIHNwZWVkLCBidXQgaXQncyB0YWxraW5nIHRvIGEgbG93LXNwZWVkIGRldmljZSAoaS5lLiwgdGhyb3VnaCBhCisgKiBodWIpLiAgU2V0dGluZyB0aGF0IGJpdCBlbnN1cmVzIHRoYXQgZXZlcnkgbG93LXNwZWVkIHBhY2tldCBpcworICogcHJlY2VkZWQgYnkgYSBmdWxsLXNwZWVkIFBSRSBQSUQuICBQb3NzaWJsZSBjb25maWd1cmF0aW9uczoKKyAqCisgKiBIdWIgc3BlZWQ6CURldmljZSBzcGVlZDoJPT4JTE9XU1BFRUQgYml0OglIVUJQUkUgYml0OgorICoJRlVMTAlGVUxMCQk9PgkwCQkwCisgKglGVUxMCUxPVwkJPT4JMQkJMQorICoJTE9XCUxPVwkJPT4JMQkJMAorICoJTE9XCUZVTEwJCT0+CTEJCTAKKyAqLworc3RhdGljIHZvaWQKK21heDM0MjFfc2V0X3NwZWVkKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCA9IGhjZF90b19tYXgzNDIxKGhjZCk7CisJdTggbW9kZV9sb3dzcGVlZCwgbW9kZV9odWJwcmUsIG1vZGUgPSBtYXgzNDIxX2hjZC0+bW9kZTsKKworCW1vZGVfbG93c3BlZWQgPSBCSVQoTUFYMzQyMV9NT0RFX0xPV1NQRUVEX0JJVCk7CisJbW9kZV9odWJwcmUgICA9IEJJVChNQVgzNDIxX01PREVfSFVCUFJFX0JJVCk7CisJaWYgKG1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyAmIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEKSB7CisJCW1vZGUgfD0gIG1vZGVfbG93c3BlZWQ7CisJCW1vZGUgJj0gfm1vZGVfaHVicHJlOworCX0gZWxzZSBpZiAoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKSB7CisJCW1vZGUgfD0gbW9kZV9sb3dzcGVlZCB8IG1vZGVfaHVicHJlOworCX0gZWxzZSB7CisJCW1vZGUgJj0gfihtb2RlX2xvd3NwZWVkIHwgbW9kZV9odWJwcmUpOworCX0KKwlpZiAobW9kZSAhPSBtYXgzNDIxX2hjZC0+bW9kZSkgeworCQltYXgzNDIxX2hjZC0+bW9kZSA9IG1vZGU7CisJCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19NT0RFLCBtYXgzNDIxX2hjZC0+bW9kZSk7CisJfQorCit9CisKKy8qCisgKiBDYWxsZXIgbXVzdCBOT1QgaG9sZCBIQ0Qgc3BpbmxvY2suCisgKi8KK3N0YXRpYyB2b2lkCittYXgzNDIxX3NldF9hZGRyZXNzKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBlcG51bSwKKwkJICAgIGludCBmb3JjZV90b2dnbGVzKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCWludCBvbGRfZXBudW0sIHNhbWVfZXAsIHJjdnRvZywgc25kdG9nOworCXN0cnVjdCB1c2JfZGV2aWNlICpvbGRfZGV2OworCXU4IGhjdGw7CisKKwlvbGRfZGV2ID0gbWF4MzQyMV9oY2QtPmxvYWRlZF9kZXY7CisJb2xkX2VwbnVtID0gbWF4MzQyMV9oY2QtPmxvYWRlZF9lcG51bTsKKworCXNhbWVfZXAgPSAoZGV2ID09IG9sZF9kZXYgJiYgZXBudW0gPT0gb2xkX2VwbnVtKTsKKwlpZiAoc2FtZV9lcCAmJiAhZm9yY2VfdG9nZ2xlcykKKwkJcmV0dXJuOworCisJaWYgKG9sZF9kZXYgJiYgIXNhbWVfZXApIHsKKwkJLyogc2F2ZSB0aGUgb2xkIGVuZC1wb2ludHMgdG9nZ2xlczogKi8KKwkJdTggaHJzbCA9IHNwaV9yZDgoaGNkLCBNQVgzNDIxX1JFR19IUlNMKTsKKworCQlyY3Z0b2cgPSAoaHJzbCA+PiBNQVgzNDIxX0hSU0xfUkNWVE9HUkRfQklUKSAmIDE7CisJCXNuZHRvZyA9IChocnNsID4+IE1BWDM0MjFfSFJTTF9TTkRUT0dSRF9CSVQpICYgMTsKKworCQkvKiBubyBsb2NraW5nOiBIQ0QgKGkuZS4sIHdlKSBvd24gdG9nZ2xlcywgZG9uJ3Qgd2U/ICovCisJCXVzYl9zZXR0b2dnbGUob2xkX2Rldiwgb2xkX2VwbnVtLCAwLCByY3Z0b2cpOworCQl1c2Jfc2V0dG9nZ2xlKG9sZF9kZXYsIG9sZF9lcG51bSwgMSwgc25kdG9nKTsKKwl9CisJLyogc2V0dXAgbmV3IGVuZHBvaW50J3MgdG9nZ2xlIGJpdHM6ICovCisJcmN2dG9nID0gdXNiX2dldHRvZ2dsZShkZXYsIGVwbnVtLCAwKTsKKwlzbmR0b2cgPSB1c2JfZ2V0dG9nZ2xlKGRldiwgZXBudW0sIDEpOworCWhjdGwgPSAoQklUKHJjdnRvZyArIE1BWDM0MjFfSENUTF9SQ1ZUT0cwX0JJVCkgfAorCQlCSVQoc25kdG9nICsgTUFYMzQyMV9IQ1RMX1NORFRPRzBfQklUKSk7CisKKwltYXgzNDIxX2hjZC0+bG9hZGVkX2VwbnVtID0gZXBudW07CisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0hDVEwsIGhjdGwpOworCisJLyoKKwkgKiBOb3RlOiBkZXZudW0gZm9yIG9uZSBhbmQgdGhlIHNhbWUgZGV2aWNlIGNhbiBjaGFuZ2UgZHVyaW5nCisJICogYWRkcmVzcy1hc3NpZ25tZW50IHNvIGl0J3MgYmVzdCB0byBqdXN0IGFsd2F5cyBsb2FkIHRoZQorCSAqIGFkZHJlc3Mgd2hlbmV2ZXIgdGhlIGVuZC1wb2ludCBjaGFuZ2VkL3dhcyBmb3JjZWQuCisJICovCisJbWF4MzQyMV9oY2QtPmxvYWRlZF9kZXYgPSBkZXY7CisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX1BFUkFERFIsIGRldi0+ZGV2bnVtKTsKK30KKworc3RhdGljIGludAorbWF4MzQyMV9jdHJsX3NldHVwKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzcGlfd3JfYnVmKGhjZCwgTUFYMzQyMV9SRUdfU1VERklGTywgdXJiLT5zZXR1cF9wYWNrZXQsIDgpOworCXJldHVybiBNQVgzNDIxX0hYRlJfU0VUVVA7Cit9CisKK3N0YXRpYyBpbnQKK21heDM0MjFfdHJhbnNmZXJfaW4oc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCWludCBlcG51bSA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKKworCW1heDM0MjFfaGNkLT5jdXJyX2xlbiA9IDA7CisJbWF4MzQyMV9oY2QtPmhpZW4gfD0gQklUKE1BWDM0MjFfSElfUkNWREFWX0JJVCk7CisJcmV0dXJuIE1BWDM0MjFfSFhGUl9CVUxLX0lOKGVwbnVtKTsKK30KKworc3RhdGljIGludAorbWF4MzQyMV90cmFuc2Zlcl9vdXQoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgZmFzdF9yZXRyYW5zbWl0KQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlpbnQgZXBudW0gPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisJdTMyIG1heF9wYWNrZXQ7CisJdm9pZCAqc3JjOworCisJc3JjID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlpZiAoZmFzdF9yZXRyYW5zbWl0KSB7CisJCWlmIChtYXgzNDIxX2hjZC0+cmV2ID09IDB4MTIpIHsKKwkJCS8qIHdvcmsgYXJvdW5kIHJldiAweDEyIGJ1ZzogKi8KKwkJCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19TTkRCQywgMCk7CisJCQlzcGlfd3I4KGhjZCwgTUFYMzQyMV9SRUdfU05ERklGTywgKCh1OCAqKSBzcmMpWzBdKTsKKwkJCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19TTkRCQywgbWF4MzQyMV9oY2QtPmN1cnJfbGVuKTsKKwkJfQorCQlyZXR1cm4gTUFYMzQyMV9IWEZSX0JVTEtfT1VUKGVwbnVtKTsKKwl9CisKKwltYXhfcGFja2V0ID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCAxKTsKKworCWlmIChtYXhfcGFja2V0ID4gTUFYMzQyMV9GSUZPX1NJWkUpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IHN1cHBvcnQgaXNvY2hyb25vdXMgdHJhbnNmZXJzIGF0IHRoaXMKKwkJICogdGltZS4KKwkJICovCisJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJIiVzOiBwYWNrZXQtc2l6ZSBvZiAldSB0b28gYmlnIChsaW1pdCBpcyAldSBieXRlcykiLAorCQkJX19mdW5jX18sIG1heF9wYWNrZXQsIE1BWDM0MjFfRklGT19TSVpFKTsKKwkJbWF4MzQyMV9oY2QtPnVyYl9kb25lID0gLUVNU0dTSVpFOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKwltYXgzNDIxX2hjZC0+Y3Vycl9sZW4gPSBtaW4oKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisJCQkJICAgICB1cmItPmFjdHVhbF9sZW5ndGgpLCBtYXhfcGFja2V0KTsKKworCXNwaV93cl9idWYoaGNkLCBNQVgzNDIxX1JFR19TTkRGSUZPLCBzcmMsIG1heDM0MjFfaGNkLT5jdXJyX2xlbik7CisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX1NOREJDLCBtYXgzNDIxX2hjZC0+Y3Vycl9sZW4pOworCXJldHVybiBNQVgzNDIxX0hYRlJfQlVMS19PVVQoZXBudW0pOworfQorCisvKgorICogSXNzdWUgdGhlIG5leHQgaG9zdC10cmFuc2ZlciBjb21tYW5kLgorICogQ2FsbGVyIG11c3QgTk9UIGhvbGQgSENEIHNwaW5sb2NrLgorICovCitzdGF0aWMgdm9pZAorbWF4MzQyMV9uZXh0X3RyYW5zZmVyKHN0cnVjdCB1c2JfaGNkICpoY2QsIGludCBmYXN0X3JldHJhbnNtaXQpCit7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCA9IGhjZF90b19tYXgzNDIxKGhjZCk7CisJc3RydWN0IHVyYiAqdXJiID0gbWF4MzQyMV9oY2QtPmN1cnJfdXJiOworCXN0cnVjdCBtYXgzNDIxX2VwICptYXgzNDIxX2VwOworCWludCBjbWQgPSAtRUlOVkFMOworCisJaWYgKCF1cmIpCisJCXJldHVybjsJLyogbm90aGluZyB0byBkbyAqLworCisJbWF4MzQyMV9lcCA9IHVyYi0+ZXAtPmhjcHJpdjsKKworCXN3aXRjaCAobWF4MzQyMV9lcC0+cGt0X3N0YXRlKSB7CisJY2FzZSBQS1RfU1RBVEVfU0VUVVA6CisJCWNtZCA9IG1heDM0MjFfY3RybF9zZXR1cChoY2QsIHVyYik7CisJCWJyZWFrOworCisJY2FzZSBQS1RfU1RBVEVfVFJBTlNGRVI6CisJCWlmICh1c2JfdXJiX2Rpcl9pbih1cmIpKQorCQkJY21kID0gbWF4MzQyMV90cmFuc2Zlcl9pbihoY2QsIHVyYik7CisJCWVsc2UKKwkJCWNtZCA9IG1heDM0MjFfdHJhbnNmZXJfb3V0KGhjZCwgdXJiLCBmYXN0X3JldHJhbnNtaXQpOworCQlicmVhazsKKworCWNhc2UgUEtUX1NUQVRFX1RFUk1JTkFURToKKwkJLyoKKwkJICogSU4gdHJhbnNmZXJzIGFyZSB0ZXJtaW5hdGVkIHdpdGggSFNfT1VUIHRva2VuLAorCQkgKiBPVVQgdHJhbnNmZXJzIHdpdGggSFNfSU46CisJCSAqLworCQlpZiAodXNiX3VyYl9kaXJfaW4odXJiKSkKKwkJCWNtZCA9IE1BWDM0MjFfSFhGUl9IU19PVVQ7CisJCWVsc2UKKwkJCWNtZCA9IE1BWDM0MjFfSFhGUl9IU19JTjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNtZCA8IDApCisJCXJldHVybjsKKworCS8qIGlzc3VlIHRoZSBjb21tYW5kIGFuZCB3YWl0IGZvciBob3N0LXhmZXItZG9uZSBpbnRlcnJ1cHQ6ICovCisKKwlzcGlfd3I4KGhjZCwgTUFYMzQyMV9SRUdfSFhGUiwgY21kKTsKKwltYXgzNDIxX2hjZC0+aGllbiB8PSBCSVQoTUFYMzQyMV9ISV9IWEZSRE5fQklUKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIG5leHQgVVJCIHRvIHByb2Nlc3MgYW5kIHN0YXJ0IGl0cyBleGVjdXRpb24uCisgKgorICogQXQgdGhpcyB0aW1lLCB3ZSBkbyBub3QgYW50aWNpcGF0ZSBldmVyIGNvbm5lY3RpbmcgYSBVU0IgaHViIHRvIHRoZQorICogTUFYMzQyMSBjaGlwLCBzbyBhdCBtb3N0IFVTQiBkZXZpY2UgY2FuIGJlIGNvbm5lY3RlZCBhbmQgd2UgY2FuIHVzZQorICogYSBzaW1wbGlzdGljIHNjaGVkdWxlcjogYXQgdGhlIHN0YXJ0IG9mIGEgZnJhbWUsIHNjaGVkdWxlIGFsbAorICogcGVyaW9kaWMgdHJhbnNmZXJzLiAgT25jZSB0aGF0IGlzIGRvbmUsIHVzZSB0aGUgcmVtYWluZGVyIG9mIHRoZQorICogZnJhbWUgdG8gcHJvY2VzcyBub24tcGVyaW9kaWMgKGJ1bGsgJiBjb250cm9sKSB0cmFuc2ZlcnMuCisgKgorICogUHJlY29uZGl0aW9uczoKKyAqIG8gQ2FsbGVyIG11c3QgTk9UIGhvbGQgSENEIHNwaW5sb2NrLgorICogbyBtYXgzNDIxX2hjZC0+Y3Vycl91cmIgTVVTVCBCRSBOVUxMLgorICogbyBNQVgzNDIxRSBjaGlwIG11c3QgYmUgaWRsZS4KKyAqLworc3RhdGljIGludAorbWF4MzQyMV9zZWxlY3RfYW5kX3N0YXJ0X3VyYihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlzdHJ1Y3QgdXJiICp1cmIsICpjdXJyX3VyYiA9IE5VTEw7CisJc3RydWN0IG1heDM0MjFfZXAgKm1heDM0MjFfZXA7CisJaW50IGVwbnVtLCBmb3JjZV90b2dnbGVzID0gMDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKDsKKwkgICAgIG1heDM0MjFfaGNkLT5zY2hlZF9wYXNzIDwgU0NIRURfUEFTU19ET05FOworCSAgICAgKyttYXgzNDIxX2hjZC0+c2NoZWRfcGFzcykKKwkJbGlzdF9mb3JfZWFjaChwb3MsICZtYXgzNDIxX2hjZC0+ZXBfbGlzdCkgeworCQkJdXJiID0gTlVMTDsKKwkJCW1heDM0MjFfZXAgPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3QgbWF4MzQyMV9lcCwKKwkJCQkJCSAgZXBfbGlzdCk7CisJCQllcCA9IG1heDM0MjFfZXAtPmVwOworCisJCQlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKCZlcC0+ZGVzYykpIHsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJCWlmIChtYXgzNDIxX2hjZC0+c2NoZWRfcGFzcyAhPQorCQkJCSAgICBTQ0hFRF9QQVNTX1BFUklPRElDKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQkJCWlmIChtYXgzNDIxX2hjZC0+c2NoZWRfcGFzcyAhPQorCQkJCSAgICBTQ0hFRF9QQVNTX05PTl9QRVJJT0RJQykKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+dXJiX2xpc3QpKQorCQkJCWNvbnRpbnVlOwkvKiBub3RoaW5nIHRvIGRvICovCisJCQl1cmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlcC0+dXJiX2xpc3QsIHN0cnVjdCB1cmIsCisJCQkJCSAgICAgICB1cmJfbGlzdCk7CisJCQlpZiAodXJiLT51bmxpbmtlZCkgeworCQkJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJXM6IFVSQiAlcCB1bmxpbmtlZD0lZCIsCisJCQkJCV9fZnVuY19fLCB1cmIsIHVyYi0+dW5saW5rZWQpOworCQkJCW1heDM0MjFfaGNkLT5jdXJyX3VyYiA9IHVyYjsKKwkJCQltYXgzNDIxX2hjZC0+dXJiX2RvbmUgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1heDM0MjFfaGNkLT5sb2NrLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKworCQkJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZSgmZXAtPmRlc2MpKSB7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CisJCQkJLyoKKwkJCQkgKiBBbGxvdyBvbmUgY29udHJvbCB0cmFuc2FjdGlvbiBwZXIKKwkJCQkgKiBmcmFtZSBwZXIgZW5kcG9pbnQ6CisJCQkJICovCisJCQkJaWYgKGZyYW1lX2RpZmYobWF4MzQyMV9lcC0+bGFzdF9hY3RpdmUsCisJCQkJCSAgICAgICBtYXgzNDIxX2hjZC0+ZnJhbWVfbnVtYmVyKSA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQkJCWlmIChtYXgzNDIxX2VwLT5yZXRyYW5zbWl0CisJCQkJICAgICYmIChmcmFtZV9kaWZmKG1heDM0MjFfZXAtPmxhc3RfYWN0aXZlLAorCQkJCQkJICAgbWF4MzQyMV9oY2QtPmZyYW1lX251bWJlcikKKwkJCQkJPT0gMCkpCisJCQkJCS8qCisJCQkJCSAqIFdlIGFscmVhZHkgdHJpZWQgdGhpcyBFUAorCQkJCQkgKiBkdXJpbmcgdGhpcyBmcmFtZSBhbmQgZ290IGEKKwkJCQkJICogTkFLIG9yIGVycm9yOyB3YWl0IGZvciBuZXh0IGZyYW1lCisJCQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQkJaWYgKGZyYW1lX2RpZmYobWF4MzQyMV9oY2QtPmZyYW1lX251bWJlciwKKwkJCQkJICAgICAgIG1heDM0MjFfZXAtPmxhc3RfYWN0aXZlKQorCQkJCSAgICA8IHVyYi0+aW50ZXJ2YWwpCisJCQkJCS8qCisJCQkJCSAqIFdlIGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMKKwkJCQkJICogZW5kLXBvaW50IGluIHRoZSBjdXJyZW50CisJCQkJCSAqIGZyYW1lCisJCQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogbW92ZSBjdXJyZW50IGVwIHRvIHRhaWw6ICovCisJCQlsaXN0X21vdmVfdGFpbChwb3MsICZtYXgzNDIxX2hjZC0+ZXBfbGlzdCk7CisJCQljdXJyX3VyYiA9IHVyYjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorZG9uZToKKwlpZiAoIWN1cnJfdXJiKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXVyYiA9IG1heDM0MjFfaGNkLT5jdXJyX3VyYiA9IGN1cnJfdXJiOworCWVwbnVtID0gdXNiX2VuZHBvaW50X251bSgmdXJiLT5lcC0+ZGVzYyk7CisJaWYgKG1heDM0MjFfZXAtPnJldHJhbnNtaXQpCisJCS8qIHJlc3RhcnQgKHBhcnQgb2YpIGEgVVNCIHRyYW5zYWN0aW9uOiAqLworCQltYXgzNDIxX2VwLT5yZXRyYW5zbWl0ID0gMDsKKwllbHNlIHsKKwkJLyogc3RhcnQgVVNCIHRyYW5zYWN0aW9uOiAqLworCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmZXAtPmRlc2MpKSB7CisJCQkvKgorCQkJICogU2VlIFVTQiAyLjAgc3BlYyBzZWN0aW9uIDguNi4xCisJCQkgKiBJbml0aWFsaXphdGlvbiB2aWEgU0VUVVAgVG9rZW46CisJCQkgKi8KKwkJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIGVwbnVtLCAwLCAxKTsKKwkJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIGVwbnVtLCAxLCAxKTsKKwkJCW1heDM0MjFfZXAtPnBrdF9zdGF0ZSA9IFBLVF9TVEFURV9TRVRVUDsKKwkJCWZvcmNlX3RvZ2dsZXMgPSAxOworCQl9IGVsc2UKKwkJCW1heDM0MjFfZXAtPnBrdF9zdGF0ZSA9IFBLVF9TVEFURV9UUkFOU0ZFUjsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCisJbWF4MzQyMV9lcC0+bGFzdF9hY3RpdmUgPSBtYXgzNDIxX2hjZC0+ZnJhbWVfbnVtYmVyOworCW1heDM0MjFfc2V0X2FkZHJlc3MoaGNkLCB1cmItPmRldiwgZXBudW0sIGZvcmNlX3RvZ2dsZXMpOworCW1heDM0MjFfc2V0X3NwZWVkKGhjZCwgdXJiLT5kZXYpOworCW1heDM0MjFfbmV4dF90cmFuc2ZlcihoY2QsIDApOworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgYWxsIGVuZHBvaW50cyBmb3IgVVJCcyB0aGF0IGdvdCB1bmxpbmtlZC4KKyAqCisgKiBDYWxsZXIgbXVzdCBOT1QgaG9sZCBIQ0Qgc3BpbmxvY2suCisgKi8KK3N0YXRpYyBpbnQKK21heDM0MjFfY2hlY2tfdW5saW5rKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnVwb3MsICpuZXh0X3Vwb3M7CisJc3RydWN0IG1heDM0MjFfZXAgKm1heDM0MjFfZXA7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2gocG9zLCAmbWF4MzQyMV9oY2QtPmVwX2xpc3QpIHsKKwkJbWF4MzQyMV9lcCA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBtYXgzNDIxX2VwLCBlcF9saXN0KTsKKwkJZXAgPSBtYXgzNDIxX2VwLT5lcDsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHVwb3MsIG5leHRfdXBvcywgJmVwLT51cmJfbGlzdCkgeworCQkJdXJiID0gY29udGFpbmVyX29mKHVwb3MsIHN0cnVjdCB1cmIsIHVyYl9saXN0KTsKKwkJCWlmICh1cmItPnVubGlua2VkKSB7CisJCQkJcmV0dmFsID0gMTsKKwkJCQlkZXZfZGJnKCZzcGktPmRldiwgIiVzOiBVUkIgJXAgdW5saW5rZWQ9JWQiLAorCQkJCQlfX2Z1bmNfXywgdXJiLCB1cmItPnVubGlua2VkKTsKKwkJCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWF4MzQyMV9oY2QtPmxvY2ssCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCAwKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBDYWxsZXIgbXVzdCBOT1QgaG9sZCBIQ0Qgc3BpbmxvY2suCisgKi8KK3N0YXRpYyB2b2lkCittYXgzNDIxX3Nsb3dfcmV0cmFuc21pdChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXN0cnVjdCB1cmIgKnVyYiA9IG1heDM0MjFfaGNkLT5jdXJyX3VyYjsKKwlzdHJ1Y3QgbWF4MzQyMV9lcCAqbWF4MzQyMV9lcDsKKworCW1heDM0MjFfZXAgPSB1cmItPmVwLT5oY3ByaXY7CisJbWF4MzQyMV9lcC0+cmV0cmFuc21pdCA9IDE7CisJbWF4MzQyMV9oY2QtPmN1cnJfdXJiID0gTlVMTDsKK30KKworLyoKKyAqIENhbGxlciBtdXN0IE5PVCBob2xkIEhDRCBzcGlubG9jay4KKyAqLworc3RhdGljIHZvaWQKK21heDM0MjFfcmVjdl9kYXRhX2F2YWlsYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXN0cnVjdCB1cmIgKnVyYiA9IG1heDM0MjFfaGNkLT5jdXJyX3VyYjsKKwlzaXplX3QgcmVtYWluaW5nLCB0cmFuc2Zlcl9zaXplOworCXU4IHJjdmJjOworCisJcmN2YmMgPSBzcGlfcmQ4KGhjZCwgTUFYMzQyMV9SRUdfUkNWQkMpOworCisJaWYgKHJjdmJjID4gTUFYMzQyMV9GSUZPX1NJWkUpCisJCXJjdmJjID0gTUFYMzQyMV9GSUZPX1NJWkU7CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCXJlbWFpbmluZyA9IDA7CisJZWxzZQorCQlyZW1haW5pbmcgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdHJhbnNmZXJfc2l6ZSA9IHJjdmJjOworCWlmICh0cmFuc2Zlcl9zaXplID4gcmVtYWluaW5nKQorCQl0cmFuc2Zlcl9zaXplID0gcmVtYWluaW5nOworCWlmICh0cmFuc2Zlcl9zaXplID4gMCkgeworCQl2b2lkICpkc3QgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCQlzcGlfcmRfYnVmKGhjZCwgTUFYMzQyMV9SRUdfUkNWRklGTywgZHN0LCB0cmFuc2Zlcl9zaXplKTsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IHRyYW5zZmVyX3NpemU7CisJCW1heDM0MjFfaGNkLT5jdXJyX2xlbiA9IHRyYW5zZmVyX3NpemU7CisJfQorCisJLyogYWNrIHRoZSBSQ1ZEQVYgaXJxIG5vdyB0aGF0IHRoZSBGSUZPIGhhcyBiZWVuIHJlYWQ6ICovCisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0hJUlEsIEJJVChNQVgzNDIxX0hJX1JDVkRBVl9CSVQpKTsKK30KKworc3RhdGljIHZvaWQKK21heDM0MjFfaGFuZGxlX2Vycm9yKHN0cnVjdCB1c2JfaGNkICpoY2QsIHU4IGhyc2wpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXU4IHJlc3VsdF9jb2RlID0gaHJzbCAmIE1BWDM0MjFfSFJTTF9SRVNVTFRfTUFTSzsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBtYXgzNDIxX2hjZC0+Y3Vycl91cmI7CisJc3RydWN0IG1heDM0MjFfZXAgKm1heDM0MjFfZXAgPSB1cmItPmVwLT5oY3ByaXY7CisJaW50IHN3aXRjaF9zbmRmaWZvOworCisJLyoKKwkgKiBJZiBhbiBPVVQgY29tbWFuZCByZXN1bHRzIGluIGFueSByZXNwb25zZSBvdGhlciB0aGFuIE9LCisJICogKGkuZS4sIGVycm9yIG9yIE5BSyksIHdlIGhhdmUgdG8gcGVyZm9ybSBhIGR1bW15LXdyaXRlIHRvCisJICogU05EQkMgc28gdGhlIEZJRk8gZ2V0cyBzd2l0Y2hlZCBiYWNrIHRvIHVzLiAgT3RoZXJ3aXNlLCB3ZQorCSAqIGdldCBvdXQgb2Ygc3luYyB3aXRoIHRoZSBTTkRGSUZPIGRvdWJsZSBidWZmZXIuCisJICovCisJc3dpdGNoX3NuZGZpZm8gPSAobWF4MzQyMV9lcC0+cGt0X3N0YXRlID09IFBLVF9TVEFURV9UUkFOU0ZFUiAmJgorCQkJICB1c2JfdXJiX2Rpcl9vdXQodXJiKSk7CisKKwlzd2l0Y2ggKHJlc3VsdF9jb2RlKSB7CisJY2FzZSBNQVgzNDIxX0hSU0xfT0s6CisJCXJldHVybjsJCQkvKiB0aGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KKworCWNhc2UgTUFYMzQyMV9IUlNMX1dST05HUElEOgkvKiByZWNlaXZlZCB3cm9uZyBQSUQgKi8KKwljYXNlIE1BWDM0MjFfSFJTTF9CVVNZOgkJLyogU0lFIGJ1c3kgKi8KKwljYXNlIE1BWDM0MjFfSFJTTF9CQURSRVE6CS8qIGJhZCB2YWwgaW4gSFhGUiAqLworCWNhc2UgTUFYMzQyMV9IUlNMX1VOREVGOgkvKiByZXNlcnZlZCAqLworCWNhc2UgTUFYMzQyMV9IUlNMX0tFUlI6CQkvKiBLLXN0YXRlIGluc3RlYWQgb2YgcmVzcG9uc2UgKi8KKwljYXNlIE1BWDM0MjFfSFJTTF9KRVJSOgkJLyogSi1zdGF0ZSBpbnN0ZWFkIG9mIHJlc3BvbnNlICovCisJCS8qCisJCSAqIHBhY2tldCBleHBlcmllbmNlZCBhbiBlcnJvciB0aGF0IHdlIGNhbm5vdCByZWNvdmVyCisJCSAqIGZyb207IHJlcG9ydCBlcnJvcgorCQkgKi8KKwkJbWF4MzQyMV9oY2QtPnVyYl9kb25lID0gaHJzbF90b19lcnJvcltyZXN1bHRfY29kZV07CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJXM6IHVuZXhwZWN0ZWQgZXJyb3IgSFJTTD0weCUwMngiLAorCQkJX19mdW5jX18sIGhyc2wpOworCQlicmVhazsKKworCWNhc2UgTUFYMzQyMV9IUlNMX1RPR0VSUjoKKwkJaWYgKHVzYl91cmJfZGlyX2luKHVyYikpCisJCQk7IC8qIGRvbid0IGRvIGFueXRoaW5nIChkZXZpY2Ugd2lsbCBzd2l0Y2ggdG9nZ2xlKSAqLworCQllbHNlIHsKKwkJCS8qIGZsaXAgdGhlIHNlbmQgdG9nZ2xlIGJpdDogKi8KKwkJCWludCBzbmR0b2cgPSAoaHJzbCA+PiBNQVgzNDIxX0hSU0xfU05EVE9HUkRfQklUKSAmIDE7CisKKwkJCXNuZHRvZyBePSAxOworCQkJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0hDVEwsCisJCQkJQklUKHNuZHRvZyArIE1BWDM0MjFfSENUTF9TTkRUT0cwX0JJVCkpOworCQl9CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgTUFYMzQyMV9IUlNMX0JBREJDOgkvKiBiYWQgYnl0ZSBjb3VudCAqLworCWNhc2UgTUFYMzQyMV9IUlNMX1BJREVSUjoJLyogcmVjZWl2ZWQgUElEIGlzIGNvcnJ1cHRlZCAqLworCWNhc2UgTUFYMzQyMV9IUlNMX1BLVEVSUjoJLyogcGFja2V0IGVycm9yIChzdHVmZiwgRU9QKSAqLworCWNhc2UgTUFYMzQyMV9IUlNMX0NSQ0VSUjoJLyogQ1JDIGVycm9yICovCisJY2FzZSBNQVgzNDIxX0hSU0xfQkFCQkxFOgkvKiBkZXZpY2UgdGFsa2VkIHRvbyBsb25nICovCisJY2FzZSBNQVgzNDIxX0hSU0xfVElNRU9VVDoKKwkJaWYgKG1heDM0MjFfZXAtPnJldHJpZXMrKyA8IFVTQl9NQVhfUkVUUklFUykKKwkJCS8qIHJldHJ5IHRoZSBwYWNrZXQgYWdhaW4gaW4gdGhlIG5leHQgZnJhbWUgKi8KKwkJCW1heDM0MjFfc2xvd19yZXRyYW5zbWl0KGhjZCk7CisJCWVsc2UgeworCQkJLyogQmFzZWQgb24gb2hjaS5oIGNjX3RvX2VycltdOiAqLworCQkJbWF4MzQyMV9oY2QtPnVyYl9kb25lID0gaHJzbF90b19lcnJvcltyZXN1bHRfY29kZV07CisJCQlkZXZfZGJnKCZzcGktPmRldiwgIiVzOiB1bmV4cGVjdGVkIGVycm9yIEhSU0w9MHglMDJ4IiwKKwkJCQlfX2Z1bmNfXywgaHJzbCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIE1BWDM0MjFfSFJTTF9TVEFMTDoKKwkJZGV2X2RiZygmc3BpLT5kZXYsICIlczogdW5leHBlY3RlZCBlcnJvciBIUlNMPTB4JTAyeCIsCisJCQlfX2Z1bmNfXywgaHJzbCk7CisJCW1heDM0MjFfaGNkLT51cmJfZG9uZSA9IGhyc2xfdG9fZXJyb3JbcmVzdWx0X2NvZGVdOworCQlicmVhazsKKworCWNhc2UgTUFYMzQyMV9IUlNMX05BSzoKKwkJLyoKKwkJICogRGV2aWNlIHdhc24ndCByZWFkeSBmb3IgZGF0YSBvciBoYXMgbm8gZGF0YQorCQkgKiBhdmFpbGFibGU6IHJldHJ5IHRoZSBwYWNrZXQgYWdhaW4uCisJCSAqLworCQlpZiAobWF4MzQyMV9lcC0+bmFrcysrIDwgTkFLX01BWF9GQVNUX1JFVFJBTlNNSVRTKSB7CisJCQltYXgzNDIxX25leHRfdHJhbnNmZXIoaGNkLCAxKTsKKwkJCXN3aXRjaF9zbmRmaWZvID0gMDsKKwkJfSBlbHNlCisJCQltYXgzNDIxX3Nsb3dfcmV0cmFuc21pdChoY2QpOworCQlicmVhazsKKwl9CisJaWYgKHN3aXRjaF9zbmRmaWZvKQorCQlzcGlfd3I4KGhjZCwgTUFYMzQyMV9SRUdfU05EQkMsIDApOworfQorCisvKgorICogQ2FsbGVyIG11c3QgTk9UIGhvbGQgSENEIHNwaW5sb2NrLgorICovCitzdGF0aWMgaW50CittYXgzNDIxX3RyYW5zZmVyX2luX2RvbmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwl1MzIgbWF4X3BhY2tldDsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPj0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlyZXR1cm4gMTsJLyogcmVhZCBpcyBjb21wbGV0ZSwgc28gd2UncmUgZG9uZSAqLworCisJLyoKKwkgKiBVU0IgMi4wIFNlY3Rpb24gNS4zLjIgUGlwZXM6IHBhY2tldHMgbXVzdCBiZSBmdWxsIHNpemUKKwkgKiBleGNlcHQgZm9yIGxhc3Qgb25lLgorCSAqLworCW1heF9wYWNrZXQgPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIDApOworCWlmIChtYXhfcGFja2V0ID4gTUFYMzQyMV9GSUZPX1NJWkUpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IHN1cHBvcnQgaXNvY2hyb25vdXMgdHJhbnNmZXJzIGF0IHRoaXMKKwkJICogdGltZS4uLgorCQkgKi8KKwkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkiJXM6IHBhY2tldC1zaXplIG9mICV1IHRvbyBiaWcgKGxpbWl0IGlzICV1IGJ5dGVzKSIsCisJCQlfX2Z1bmNfXywgbWF4X3BhY2tldCwgTUFYMzQyMV9GSUZPX1NJWkUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobWF4MzQyMV9oY2QtPmN1cnJfbGVuIDwgbWF4X3BhY2tldCkgeworCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spIHsKKwkJCS8qCisJCQkgKiByZW1haW5pbmcgPiAwIGFuZCByZWNlaXZlZCBhbgorCQkJICogdW5leHBlY3RlZCBwYXJ0aWFsIHBhY2tldCAtPgorCQkJICogZXJyb3IKKwkJCSAqLworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0gZWxzZQorCQkJLyogc2hvcnQgcmVhZCwgYnV0IGl0J3MgT0sgKi8KKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsJLyogbm90IGRvbmUgKi8KK30KKworLyoKKyAqIENhbGxlciBtdXN0IE5PVCBob2xkIEhDRCBzcGlubG9jay4KKyAqLworc3RhdGljIGludAorbWF4MzQyMV90cmFuc2Zlcl9vdXRfZG9uZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCA9IGhjZF90b19tYXgzNDIxKGhjZCk7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggKz0gbWF4MzQyMV9oY2QtPmN1cnJfbGVuOworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCXJldHVybiAwOworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKSB7CisJCS8qCisJCSAqIFNvbWUgaGFyZHdhcmUgbmVlZHMgYSB6ZXJvLXNpemUgcGFja2V0IGF0IHRoZSBlbmQKKwkJICogb2YgYSBidWxrLW91dCB0cmFuc2ZlciBpZiB0aGUgbGFzdCB0cmFuc2ZlciB3YXMgYQorCQkgKiBmdWxsLXNpemVkIHBhY2tldCAoaS5lLiwgc3VjaCBoYXJkd2FyZSB1c2UgPAorCQkgKiBtYXhfcGFja2V0IGFzIGFuIGluZGljYXRvciB0aGF0IHRoZSBlbmQgb2YgdGhlCisJCSAqIHBhY2tldCBoYXMgYmVlbiByZWFjaGVkKS4KKwkJICovCisJCXUzMiBtYXhfcGFja2V0ID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCAxKTsKKworCQlpZiAobWF4MzQyMV9oY2QtPmN1cnJfbGVuID09IG1heF9wYWNrZXQpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDYWxsZXIgbXVzdCBOT1QgaG9sZCBIQ0Qgc3BpbmxvY2suCisgKi8KK3N0YXRpYyB2b2lkCittYXgzNDIxX2hvc3RfdHJhbnNmZXJfZG9uZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXN0cnVjdCB1cmIgKnVyYiA9IG1heDM0MjFfaGNkLT5jdXJyX3VyYjsKKwlzdHJ1Y3QgbWF4MzQyMV9lcCAqbWF4MzQyMV9lcDsKKwl1OCByZXN1bHRfY29kZSwgaHJzbDsKKwlpbnQgdXJiX2RvbmUgPSAwOworCisJbWF4MzQyMV9oY2QtPmhpZW4gJj0gfihCSVQoTUFYMzQyMV9ISV9IWEZSRE5fQklUKSB8CisJCQkgICAgICAgQklUKE1BWDM0MjFfSElfUkNWREFWX0JJVCkpOworCisJaHJzbCA9IHNwaV9yZDgoaGNkLCBNQVgzNDIxX1JFR19IUlNMKTsKKwlyZXN1bHRfY29kZSA9IGhyc2wgJiBNQVgzNDIxX0hSU0xfUkVTVUxUX01BU0s7CisKKyNpZmRlZiBERUJVRworCSsrbWF4MzQyMV9oY2QtPmVycl9zdGF0W3Jlc3VsdF9jb2RlXTsKKyNlbmRpZgorCisJbWF4MzQyMV9lcCA9IHVyYi0+ZXAtPmhjcHJpdjsKKworCWlmICh1bmxpa2VseShyZXN1bHRfY29kZSAhPSBNQVgzNDIxX0hSU0xfT0spKSB7CisJCW1heDM0MjFfaGFuZGxlX2Vycm9yKGhjZCwgaHJzbCk7CisJCXJldHVybjsKKwl9CisKKwltYXgzNDIxX2VwLT5uYWtzID0gMDsKKwltYXgzNDIxX2VwLT5yZXRyaWVzID0gMDsKKwlzd2l0Y2ggKG1heDM0MjFfZXAtPnBrdF9zdGF0ZSkgeworCisJY2FzZSBQS1RfU1RBVEVfU0VUVVA6CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKQorCQkJbWF4MzQyMV9lcC0+cGt0X3N0YXRlID0gUEtUX1NUQVRFX1RSQU5TRkVSOworCQllbHNlCisJCQltYXgzNDIxX2VwLT5wa3Rfc3RhdGUgPSBQS1RfU1RBVEVfVEVSTUlOQVRFOworCQlicmVhazsKKworCWNhc2UgUEtUX1NUQVRFX1RSQU5TRkVSOgorCQlpZiAodXNiX3VyYl9kaXJfaW4odXJiKSkKKwkJCXVyYl9kb25lID0gbWF4MzQyMV90cmFuc2Zlcl9pbl9kb25lKGhjZCwgdXJiKTsKKwkJZWxzZQorCQkJdXJiX2RvbmUgPSBtYXgzNDIxX3RyYW5zZmVyX291dF9kb25lKGhjZCwgdXJiKTsKKwkJaWYgKHVyYl9kb25lID4gMCAmJiB1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpIHsKKwkJCS8qCisJCQkgKiBXZSBhcmVuJ3QgcmVhbGx5IGRvbmUgLSB3ZSBzdGlsbCBuZWVkIHRvCisJCQkgKiB0ZXJtaW5hdGUgdGhlIGNvbnRyb2wgdHJhbnNmZXI6CisJCQkgKi8KKwkJCW1heDM0MjFfaGNkLT51cmJfZG9uZSA9IHVyYl9kb25lID0gMDsKKwkJCW1heDM0MjFfZXAtPnBrdF9zdGF0ZSA9IFBLVF9TVEFURV9URVJNSU5BVEU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBLVF9TVEFURV9URVJNSU5BVEU6CisJCXVyYl9kb25lID0gMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHVyYl9kb25lKQorCQltYXgzNDIxX2hjZC0+dXJiX2RvbmUgPSB1cmJfZG9uZTsKKwllbHNlCisJCW1heDM0MjFfbmV4dF90cmFuc2ZlcihoY2QsIDApOworfQorCisvKgorICogQ2FsbGVyIG11c3QgTk9UIGhvbGQgSENEIHNwaW5sb2NrLgorICovCitzdGF0aWMgdm9pZAorbWF4MzQyMV9kZXRlY3RfY29ubihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXVuc2lnbmVkIGludCBqaywgaGF2ZV9jb25uID0gMDsKKwl1MzIgb2xkX3BvcnRfc3RhdHVzLCBjaGc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBocnNsLCBtb2RlOworCisJaHJzbCA9IHNwaV9yZDgoaGNkLCBNQVgzNDIxX1JFR19IUlNMKTsKKworCWprID0gKCgoKGhyc2wgPj4gTUFYMzQyMV9IUlNMX0pTVEFUVVNfQklUKSAmIDEpIDw8IDApIHwKKwkgICAgICAoKChocnNsID4+IE1BWDM0MjFfSFJTTF9LU1RBVFVTX0JJVCkgJiAxKSA8PCAxKSk7CisKKwltb2RlID0gbWF4MzQyMV9oY2QtPm1vZGU7CisKKwlzd2l0Y2ggKGprKSB7CisJY2FzZSAweDA6IC8qIFNFMDogZGlzY29ubmVjdCAqLworCQkvKgorCQkgKiBUdXJuIG9mZiBTT0ZLQUVOQUIgYml0IHRvIGF2b2lkIGdldHRpbmcgaW50ZXJydXB0CisJCSAqIGV2ZXJ5IG1pbGxpLXNlY29uZDoKKwkJICovCisJCW1vZGUgJj0gfkJJVChNQVgzNDIxX01PREVfU09GS0FFTkFCX0JJVCk7CisJCWJyZWFrOworCisJY2FzZSAweDE6IC8qIEo9MCxLPTE6IGxvdy1zcGVlZCAoaW4gZnVsbC1zcGVlZCBvciB2aWNlIHZlcnNhKSAqLworCWNhc2UgMHgyOiAvKiBKPTEsSz0wOiBmdWxsLXNwZWVkIChpbiBmdWxsLXNwZWVkIG9yIHZpY2UgdmVyc2EpICovCisJCWlmIChqayA9PSAweDIpCisJCQkvKiBuZWVkIHRvIHN3aXRjaCB0byB0aGUgb3RoZXIgc3BlZWQ6ICovCisJCQltb2RlIF49IEJJVChNQVgzNDIxX01PREVfTE9XU1BFRURfQklUKTsKKwkJLyogdHVybiBvbiBTT0ZLQUVOQUIgYml0OiAqLworCQltb2RlIHw9IEJJVChNQVgzNDIxX01PREVfU09GS0FFTkFCX0JJVCk7CisJCWhhdmVfY29ubiA9IDE7CisJCWJyZWFrOworCisJY2FzZSAweDM6IC8qIGlsbGVnYWwgKi8KKwkJYnJlYWs7CisJfQorCisJbWF4MzQyMV9oY2QtPm1vZGUgPSBtb2RlOworCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19NT0RFLCBtYXgzNDIxX2hjZC0+bW9kZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKwlvbGRfcG9ydF9zdGF0dXMgPSBtYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXM7CisJaWYgKGhhdmVfY29ubikKKwkJbWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzIHw9ICBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT047CisJZWxzZQorCQltYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXMgJj0gflVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKKwlpZiAobW9kZSAmIEJJVChNQVgzNDIxX01PREVfTE9XU1BFRURfQklUKSkKKwkJbWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzIHw9ICBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKwllbHNlCisJCW1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyAmPSB+VVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJY2hnID0gKG9sZF9wb3J0X3N0YXR1cyBeIG1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyk7CisJbWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzIHw9IGNoZyA8PCAxNjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK21heDM0MjFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfaWQ7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCisJaWYgKG1heDM0MjFfaGNkLT5zcGlfdGhyZWFkICYmCisJICAgIG1heDM0MjFfaGNkLT5zcGlfdGhyZWFkLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCisJCXdha2VfdXBfcHJvY2VzcyhtYXgzNDIxX2hjZC0+c3BpX3RocmVhZCk7CisJaWYgKCFtYXgzNDIxX2hjZC0+ZG9fZW5hYmxlX2lycSkgeworCQltYXgzNDIxX2hjZC0+ZG9fZW5hYmxlX2lycSA9IDE7CisJCWRpc2FibGVfaXJxX25vc3luYyhzcGktPmlycSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIERFQlVHCisKK3N0YXRpYyB2b2lkCitkdW1wX2VwcyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXN0cnVjdCBtYXgzNDIxX2VwICptYXgzNDIxX2VwOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdXBvczsKKwljaGFyIHVidWZbNTEyXSwgKmRwLCAqZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcG51bSwgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChwb3MsICZtYXgzNDIxX2hjZC0+ZXBfbGlzdCkgeworCQltYXgzNDIxX2VwID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IG1heDM0MjFfZXAsIGVwX2xpc3QpOworCQllcCA9IG1heDM0MjFfZXAtPmVwOworCisJCWRwID0gdWJ1ZjsKKwkJZW5kID0gZHAgKyBzaXplb2YodWJ1Zik7CisJCSpkcCA9ICdcMCc7CisJCWxpc3RfZm9yX2VhY2godXBvcywgJmVwLT51cmJfbGlzdCkgeworCQkJdXJiID0gY29udGFpbmVyX29mKHVwb3MsIHN0cnVjdCB1cmIsIHVyYl9saXN0KTsKKwkJCXJldCA9IHNucHJpbnRmKGRwLCBlbmQgLSBkcCwgIiAlcCglZC4lcyAlZC8lZCkiLCB1cmIsCisJCQkJICAgICAgIHVzYl9waXBldHlwZSh1cmItPnBpcGUpLAorCQkJCSAgICAgICB1c2JfdXJiX2Rpcl9pbih1cmIpID8gIklOIiA6ICJPVVQiLAorCQkJCSAgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCQlpZiAocmV0IDwgMCB8fCByZXQgPj0gZW5kIC0gZHApCisJCQkJYnJlYWs7CS8qIGVycm9yIG9yIGJ1ZmZlciBmdWxsICovCisJCQlkcCArPSByZXQ7CisJCX0KKworCQllcG51bSA9IHVzYl9lbmRwb2ludF9udW0oJmVwLT5kZXNjKTsKKwkJcHJfaW5mbygiRVAlMHUgJXUgbHN0ICUwNHUgcnRyICV1IG5hayAlNnUgcnhtdCAldTogJXNcbiIsCisJCQllcG51bSwgbWF4MzQyMV9lcC0+cGt0X3N0YXRlLCBtYXgzNDIxX2VwLT5sYXN0X2FjdGl2ZSwKKwkJCW1heDM0MjFfZXAtPnJldHJpZXMsIG1heDM0MjFfZXAtPm5ha3MsCisJCQltYXgzNDIxX2VwLT5yZXRyYW5zbWl0LCB1YnVmKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKK30KKworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIFJldHVybiB6ZXJvIGlmIG5vIHdvcmsgd2FzIHBlcmZvcm1lZCwgMSBvdGhlcndpc2UuICAqLworc3RhdGljIGludAorbWF4MzQyMV9oYW5kbGVfaXJxcyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXUzMiBjaGcsIG9sZF9wb3J0X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGhpcnE7CisKKwkvKgorCSAqIFJlYWQgYW5kIGFjayBwZW5kaW5nIGludGVycnVwdHMgKENQVSBtdXN0IG5ldmVyCisJICogY2xlYXIgU05EQkFWIGRpcmVjdGx5IGFuZCBSQ1ZEQVYgbXVzdCBiZSBjbGVhcmVkIGJ5CisJICogbWF4MzQyMV9yZWN2X2RhdGFfYXZhaWxhYmxlKCkhKToKKwkgKi8KKwloaXJxID0gc3BpX3JkOChoY2QsIE1BWDM0MjFfUkVHX0hJUlEpOworCWhpcnEgJj0gbWF4MzQyMV9oY2QtPmhpZW47CisJaWYgKCFoaXJxKQorCQlyZXR1cm4gMDsKKworCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19ISVJRLAorCQloaXJxICYgfihCSVQoTUFYMzQyMV9ISV9TTkRCQVZfQklUKSB8CisJCQkgQklUKE1BWDM0MjFfSElfUkNWREFWX0JJVCkpKTsKKworCWlmIChoaXJxICYgQklUKE1BWDM0MjFfSElfRlJBTUVfQklUKSkgeworCQltYXgzNDIxX2hjZC0+ZnJhbWVfbnVtYmVyID0gKChtYXgzNDIxX2hjZC0+ZnJhbWVfbnVtYmVyICsgMSkKKwkJCQkJICAgICAmIFVTQl9NQVhfRlJBTUVfTlVNQkVSKTsKKwkJbWF4MzQyMV9oY2QtPnNjaGVkX3Bhc3MgPSBTQ0hFRF9QQVNTX1BFUklPRElDOworCX0KKworCWlmIChoaXJxICYgQklUKE1BWDM0MjFfSElfUkNWREFWX0JJVCkpCisJCW1heDM0MjFfcmVjdl9kYXRhX2F2YWlsYWJsZShoY2QpOworCisJaWYgKGhpcnEgJiBCSVQoTUFYMzQyMV9ISV9IWEZSRE5fQklUKSkKKwkJbWF4MzQyMV9ob3N0X3RyYW5zZmVyX2RvbmUoaGNkKTsKKworCWlmIChoaXJxICYgQklUKE1BWDM0MjFfSElfQ09OREVUX0JJVCkpCisJCW1heDM0MjFfZGV0ZWN0X2Nvbm4oaGNkKTsKKworCS8qCisJICogTm93IHByb2Nlc3MgaW50ZXJydXB0cyB0aGF0IG1heSBhZmZlY3QgSENEIHN0YXRlCisJICogb3RoZXIgdGhhbiB0aGUgZW5kLXBvaW50czoKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKworCW9sZF9wb3J0X3N0YXR1cyA9IG1heDM0MjFfaGNkLT5wb3J0X3N0YXR1czsKKwlpZiAoaGlycSAmIEJJVChNQVgzNDIxX0hJX0JVU0VWRU5UX0JJVCkpIHsKKwkJaWYgKG1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyAmIFVTQl9QT1JUX1NUQVRfUkVTRVQpIHsKKwkJCS8qIEJVU0VWRU5UIGR1ZSB0byBjb21wbGV0aW9uIG9mIEJ1cyBSZXNldCAqLworCQkJbWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzICY9IH5VU0JfUE9SVF9TVEFUX1JFU0VUOworCQkJbWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzIHw9ICBVU0JfUE9SVF9TVEFUX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCS8qIEJVU0VWRU5UIGR1ZSB0byBjb21wbGV0aW9uIG9mIEJ1cyBSZXN1bWUgKi8KKwkJCXByX2luZm8oIiVzOiBCVVNFVkVOVCBCdXMgUmVzdW1lIERvbmVcbiIsIF9fZnVuY19fKTsKKwkJfQorCX0KKwlpZiAoaGlycSAmIEJJVChNQVgzNDIxX0hJX1JXVV9CSVQpKQorCQlwcl9pbmZvKCIlczogUldVXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGhpcnEgJiBCSVQoTUFYMzQyMV9ISV9TVVNETl9CSVQpKQorCQlwcl9pbmZvKCIlczogU1VTRE5cbiIsIF9fZnVuY19fKTsKKworCWNoZyA9IChvbGRfcG9ydF9zdGF0dXMgXiBtYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXMpOworCW1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyB8PSBjaGcgPDwgMTY7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCisjaWZkZWYgREVCVUcKKwl7CisJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfdGltZTsKKwkJY2hhciBzYnVmWzE2ICogMTZdLCAqZHAsICplbmQ7CisJCWludCBpOworCisJCWlmIChqaWZmaWVzIC0gbGFzdF90aW1lID4gNSpIWikgeworCQkJZHAgPSBzYnVmOworCQkJZW5kID0gc2J1ZiArIHNpemVvZihzYnVmKTsKKwkJCSpkcCA9ICdcMCc7CisJCQlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgeworCQkJCWludCByZXQgPSBzbnByaW50ZihkcCwgZW5kIC0gZHAsICIgJWx1IiwKKwkJCQkJCSAgIG1heDM0MjFfaGNkLT5lcnJfc3RhdFtpXSk7CisJCQkJaWYgKHJldCA8IDAgfHwgcmV0ID49IGVuZCAtIGRwKQorCQkJCQlicmVhazsJLyogZXJyb3Igb3IgYnVmZmVyIGZ1bGwgKi8KKwkJCQlkcCArPSByZXQ7CisJCQl9CisJCQlwcl9pbmZvKCIlczogaHJzbF9zdGF0cyAlc1xuIiwgX19mdW5jX18sIHNidWYpOworCQkJbWVtc2V0KG1heDM0MjFfaGNkLT5lcnJfc3RhdCwgMCwKKwkJCSAgICAgICBzaXplb2YobWF4MzQyMV9oY2QtPmVycl9zdGF0KSk7CisJCQlsYXN0X3RpbWUgPSBqaWZmaWVzOworCisJCQlkdW1wX2VwcyhoY2QpOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21heDM0MjFfcmVzZXRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCWludCB0aW1lb3V0OworCisJLyogcGVyZm9ybSBhIGNoaXAgcmVzZXQgYW5kIHdhaXQgZm9yIE9TQ0lSUSBzaWduYWwgdG8gYXBwZWFyOiAqLworCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19VU0JDVEwsIEJJVChNQVgzNDIxX1VTQkNUTF9DSElQUkVTX0JJVCkpOworCS8qIGNsZWFyIHJlc2V0OiAqLworCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19VU0JDVEwsIDApOworCXRpbWVvdXQgPSAxMDAwOworCXdoaWxlICgxKSB7CisJCWlmIChzcGlfcmQ4KGhjZCwgTUFYMzQyMV9SRUdfVVNCSVJRKQorCQkgICAgJiBCSVQoTUFYMzQyMV9VU0JJUlFfT1NDT0tJUlFfQklUKSkKKwkJCWJyZWFrOworCQlpZiAoLS10aW1lb3V0IDwgMCkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkJInRpbWVkIG91dCB3YWl0aW5nIGZvciBvc2NpbGxhdG9yIE9LIHNpZ25hbCIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCisJLyoKKwkgKiBUdXJuIG9uIGhvc3QgbW9kZSwgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgU09GIHBhY2tldHMsIGFuZAorCSAqIGVuYWJsZSBwdWxsLWRvd24gcmVnaXN0ZXJzIG9uIERNL0RQOgorCSAqLworCW1heDM0MjFfaGNkLT5tb2RlID0gKEJJVChNQVgzNDIxX01PREVfSE9TVF9CSVQpIHwKKwkJCSAgICAgQklUKE1BWDM0MjFfTU9ERV9TT0ZLQUVOQUJfQklUKSB8CisJCQkgICAgIEJJVChNQVgzNDIxX01PREVfRE1QVUxMRE5fQklUKSB8CisJCQkgICAgIEJJVChNQVgzNDIxX01PREVfRFBQVUxMRE5fQklUKSk7CisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX01PREUsIG1heDM0MjFfaGNkLT5tb2RlKTsKKworCS8qIHJlc2V0IGZyYW1lLW51bWJlcjogKi8KKwltYXgzNDIxX2hjZC0+ZnJhbWVfbnVtYmVyID0gVVNCX01BWF9GUkFNRV9OVU1CRVI7CisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0hDVEwsIEJJVChNQVgzNDIxX0hDVExfRlJNUlNUX0JJVCkpOworCisJLyogc2FtcGxlIHRoZSBzdGF0ZSBvZiB0aGUgRCsgYW5kIEQtIGxpbmVzICovCisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0hDVEwsIEJJVChNQVgzNDIxX0hDVExfU0FNUExFQlVTX0JJVCkpOworCW1heDM0MjFfZGV0ZWN0X2Nvbm4oaGNkKTsKKworCS8qIGVuYWJsZSBmcmFtZSwgY29ubmVjdGlvbi1kZXRlY3RlZCwgYW5kIGJ1cy1ldmVudCBpbnRlcnJ1cHRzOiAqLworCW1heDM0MjFfaGNkLT5oaWVuID0gKEJJVChNQVgzNDIxX0hJX0ZSQU1FX0JJVCkgfAorCQkJICAgICBCSVQoTUFYMzQyMV9ISV9DT05ERVRfQklUKSB8CisJCQkgICAgIEJJVChNQVgzNDIxX0hJX0JVU0VWRU5UX0JJVCkpOworCXNwaV93cjgoaGNkLCBNQVgzNDIxX1JFR19ISUVOLCBtYXgzNDIxX2hjZC0+aGllbik7CisKKwkvKiBlbmFibGUgaW50ZXJydXB0czogKi8KKwlzcGlfd3I4KGhjZCwgTUFYMzQyMV9SRUdfQ1BVQ1RMLCBCSVQoTUFYMzQyMV9DUFVDVExfSUVfQklUKSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21heDM0MjFfdXJiX2RvbmUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gbWF4MzQyMV9oY2QtPnVyYl9kb25lOworCW1heDM0MjFfaGNkLT51cmJfZG9uZSA9IDA7CisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IDA7CisJdXJiID0gbWF4MzQyMV9oY2QtPmN1cnJfdXJiOworCWlmICh1cmIpIHsKKwkJbWF4MzQyMV9oY2QtPmN1cnJfdXJiID0gTlVMTDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKworCQkvKiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBIQ0Qgc3BpbmxvY2s6ICovCisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbWF4MzQyMV9zcGlfdGhyZWFkKHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2lkOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlpbnQgaSwgaV93b3JrZWQgPSAxOworCisJLyogc2V0IGZ1bGwtZHVwbGV4IFNQSSBtb2RlLCBsb3ctYWN0aXZlIGludGVycnVwdCBwaW46ICovCisJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX1BJTkNUTCwKKwkJKEJJVChNQVgzNDIxX1BJTkNUTF9GRFVQU1BJX0JJVCkgfAkvKiBmdWxsLWR1cGxleCAqLworCQkgQklUKE1BWDM0MjFfUElOQ1RMX0lOVExFVkVMX0JJVCkpKTsJLyogbG93LWFjdGl2ZSBpcnEgKi8KKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCW1heDM0MjFfaGNkLT5yZXYgPSBzcGlfcmQ4KGhjZCwgTUFYMzQyMV9SRUdfUkVWSVNJT04pOworCQlpZiAobWF4MzQyMV9oY2QtPnJldiA9PSAweDEyIHx8IG1heDM0MjFfaGNkLT5yZXYgPT0gMHgxMykKKwkJCWJyZWFrOworCQlkZXZfZXJyKCZzcGktPmRldiwgImJhZCByZXYgMHglMDJ4IiwgbWF4MzQyMV9oY2QtPnJldik7CisJCW1zbGVlcCgxMDAwMCk7CisJfQorCWRldl9pbmZvKCZzcGktPmRldiwgInJldiAweCV4LCBTUEkgY2xrICVkSHosIGJwdyAldSwgaXJxICVkXG4iLAorCQkgbWF4MzQyMV9oY2QtPnJldiwgc3BpLT5tYXhfc3BlZWRfaHosIHNwaS0+Yml0c19wZXJfd29yZCwKKwkJIHNwaS0+aXJxKTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWlmICghaV93b3JrZWQpIHsKKwkJCS8qCisJCQkgKiBXZSdsbCBiZSB3YWl0aW5nIGZvciB3YWtldXBzIGZyb20gdGhlIGhhcmQKKwkJCSAqIGludGVycnVwdCBoYW5kbGVyLCBzbyBub3cgaXMgYSBnb29kIHRpbWUgdG8KKwkJCSAqIHN5bmMgb3VyIGhpZW4gd2l0aCB0aGUgY2hpcDoKKwkJCSAqLworCQkJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0hJRU4sIG1heDM0MjFfaGNkLT5oaWVuKTsKKworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmIChtYXgzNDIxX2hjZC0+ZG9fZW5hYmxlX2lycSkgeworCQkJCW1heDM0MjFfaGNkLT5kb19lbmFibGVfaXJxID0gMDsKKwkJCQllbmFibGVfaXJxKHNwaS0+aXJxKTsKKwkJCX0KKwkJCXNjaGVkdWxlKCk7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCX0KKworCQlpX3dvcmtlZCA9IDA7CisKKwkJaWYgKG1heDM0MjFfaGNkLT51cmJfZG9uZSkKKwkJCWlfd29ya2VkIHw9IG1heDM0MjFfdXJiX2RvbmUoaGNkKTsKKwkJZWxzZSBpZiAobWF4MzQyMV9oYW5kbGVfaXJxcyhoY2QpKQorCQkJaV93b3JrZWQgPSAxOworCQllbHNlIGlmICghbWF4MzQyMV9oY2QtPmN1cnJfdXJiKQorCQkJaV93b3JrZWQgfD0gbWF4MzQyMV9zZWxlY3RfYW5kX3N0YXJ0X3VyYihoY2QpOworCisJCWlmIChtYXgzNDIxX2hjZC0+ZG9fcmVzZXRfaGNkKSB7CisJCQkvKiByZXNldCB0aGUgSENEOiAqLworCQkJbWF4MzQyMV9oY2QtPmRvX3Jlc2V0X2hjZCA9IDA7CisJCQlpX3dvcmtlZCB8PSBtYXgzNDIxX3Jlc2V0X2hjZChoY2QpOworCQl9CisJCWlmIChtYXgzNDIxX2hjZC0+ZG9fcmVzZXRfcG9ydCkgeworCQkJLyogcGVyZm9ybSBhIFVTQiBidXMgcmVzZXQ6ICovCisJCQltYXgzNDIxX2hjZC0+ZG9fcmVzZXRfcG9ydCA9IDA7CisJCQlzcGlfd3I4KGhjZCwgTUFYMzQyMV9SRUdfSENUTCwKKwkJCQlCSVQoTUFYMzQyMV9IQ1RMX0JVU1JTVF9CSVQpKTsKKwkJCWlfd29ya2VkID0gMTsKKwkJfQorCQlpZiAobWF4MzQyMV9oY2QtPmRvX2NoZWNrX3VubGluaykgeworCQkJbWF4MzQyMV9oY2QtPmRvX2NoZWNrX3VubGluayA9IDA7CisJCQlpX3dvcmtlZCB8PSBtYXgzNDIxX2NoZWNrX3VubGluayhoY2QpOworCQl9CisJCWlmIChtYXgzNDIxX2hjZC0+ZG9faW9waW5fdXBkYXRlKSB7CisJCQkvKgorCQkJICogSU9QSU5TMS9JT1BJTlMyIGRvIG5vdCBhdXRvLWluY3JlbWVudCwgc28gd2UgY2FuJ3QKKwkJCSAqIHVzZSBzcGlfd3JfYnVmKCkuCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1heDM0MjFfaGNkLT5pb3BpbnMpOyArK2kpIHsKKwkJCQl1OCB2YWwgPSBzcGlfcmQ4KGhjZCwgTUFYMzQyMV9SRUdfSU9QSU5TMSk7CisKKwkJCQl2YWwgPSAoKHZhbCAmIDB4ZjApIHwKKwkJCQkgICAgICAgKG1heDM0MjFfaGNkLT5pb3BpbnNbaV0gJiAweDBmKSk7CisJCQkJc3BpX3dyOChoY2QsIE1BWDM0MjFfUkVHX0lPUElOUzEgKyBpLCB2YWwpOworCQkJCW1heDM0MjFfaGNkLT5pb3BpbnNbaV0gPSB2YWw7CisJCQl9CisJCQltYXgzNDIxX2hjZC0+ZG9faW9waW5fdXBkYXRlID0gMDsKKwkJCWlfd29ya2VkID0gMTsKKwkJfQorCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCWRldl9pbmZvKCZzcGktPmRldiwgIlNQSSB0aHJlYWQgZXhpdGluZyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittYXgzNDIxX3Jlc2V0X3BvcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKworCW1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyAmPSB+KFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwKKwkJCQkgICAgICBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCk7CisJbWF4MzQyMV9oY2QtPmRvX3Jlc2V0X3BvcnQgPSAxOworCXdha2VfdXBfcHJvY2VzcyhtYXgzNDIxX2hjZC0+c3BpX3RocmVhZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21heDM0MjFfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKworCWhjZC0+c2VsZi5zZ190YWJsZXNpemUgPSAwOworCWhjZC0+c3BlZWQgPSBIQ0RfVVNCMjsKKwloY2QtPnNlbGYucm9vdF9odWItPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJbWF4MzQyMV9oY2QtPmRvX3Jlc2V0X2hjZCA9IDE7CisJd2FrZV91cF9wcm9jZXNzKG1heDM0MjFfaGNkLT5zcGlfdGhyZWFkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbWF4MzQyMV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCisJc3Bpbl9sb2NrX2luaXQoJm1heDM0MjFfaGNkLT5sb2NrKTsKKwltYXgzNDIxX2hjZC0+cmhfc3RhdGUgPSBNQVgzNDIxX1JIX1JVTk5JTkc7CisKKwlJTklUX0xJU1RfSEVBRCgmbWF4MzQyMV9oY2QtPmVwX2xpc3QpOworCisJaGNkLT5wb3dlcl9idWRnZXQgPSBQT1dFUl9CVURHRVQ7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK21heDM0MjFfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworfQorCitzdGF0aWMgaW50CittYXgzNDIxX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlzdHJ1Y3QgbWF4MzQyMV9lcCAqbWF4MzQyMV9lcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWlmICh1cmItPmludGVydmFsIDwgMCkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkgICIlczogaW50ZXJ2YWw9JWQgZm9yIGludHItL2lzby1waXBlOyBleHBlY3RlZCA+IDBcbiIsCisJCQkJX19mdW5jX18sIHVyYi0+aW50ZXJ2YWwpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKworCW1heDM0MjFfZXAgPSB1cmItPmVwLT5oY3ByaXY7CisJaWYgKCFtYXgzNDIxX2VwKSB7CisJCS8qIGdldHMgZnJlZWQgaW4gbWF4MzQyMV9lbmRwb2ludF9kaXNhYmxlOiAqLworCQltYXgzNDIxX2VwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDM0MjFfZXApLCBtZW1fZmxhZ3MpOworCQlpZiAoIW1heDM0MjFfZXApIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQltYXgzNDIxX2VwLT5lcCA9IHVyYi0+ZXA7CisJCW1heDM0MjFfZXAtPmxhc3RfYWN0aXZlID0gbWF4MzQyMV9oY2QtPmZyYW1lX251bWJlcjsKKwkJdXJiLT5lcC0+aGNwcml2ID0gbWF4MzQyMV9lcDsKKworCQlsaXN0X2FkZF90YWlsKCZtYXgzNDIxX2VwLT5lcF9saXN0LCAmbWF4MzQyMV9oY2QtPmVwX2xpc3QpOworCX0KKworCXJldHZhbCA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAoaGNkLCB1cmIpOworCWlmIChyZXR2YWwgPT0gMCkgeworCQkvKiBTaW5jZSB3ZSBhZGRlZCB0byB0aGUgcXVldWUsIHJlc3RhcnQgc2NoZWR1bGluZzogKi8KKwkJbWF4MzQyMV9oY2QtPnNjaGVkX3Bhc3MgPSBTQ0hFRF9QQVNTX1BFUklPRElDOworCQl3YWtlX3VwX3Byb2Nlc3MobWF4MzQyMV9oY2QtPnNwaV90aHJlYWQpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorbWF4MzQyMV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZCA9IGhjZF90b19tYXgzNDIxKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFRoaXMgd2lsbCBzZXQgdXJiLT51bmxpbmtlZCB3aGljaCBpbiB0dXJuIGNhdXNlcyB0aGUgZW50cnkKKwkgKiB0byBiZSBkcm9wcGVkIGF0IHRoZSBuZXh0IG9wcG9ydHVuaXR5LgorCSAqLworCXJldHZhbCA9IHVzYl9oY2RfY2hlY2tfdW5saW5rX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJbWF4MzQyMV9oY2QtPmRvX2NoZWNrX3VubGluayA9IDE7CisJCXdha2VfdXBfcHJvY2VzcyhtYXgzNDIxX2hjZC0+c3BpX3RocmVhZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK21heDM0MjFfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlcC0+aGNwcml2KSB7CisJCXN0cnVjdCBtYXgzNDIxX2VwICptYXgzNDIxX2VwID0gZXAtPmhjcHJpdjsKKworCQkvKiByZW1vdmUgbXlzZWxmIGZyb20gdGhlIGVwX2xpc3Q6ICovCisJCWlmICghbGlzdF9lbXB0eSgmbWF4MzQyMV9lcC0+ZXBfbGlzdCkpCisJCQlsaXN0X2RlbCgmbWF4MzQyMV9lcC0+ZXBfbGlzdCk7CisJCWtmcmVlKG1heDM0MjFfZXApOworCQllcC0+aGNwcml2ID0gTlVMTDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50CittYXgzNDIxX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlyZXR1cm4gbWF4MzQyMV9oY2QtPmZyYW1lX251bWJlcjsKK30KKworLyoKKyAqIFNob3VsZCByZXR1cm4gYSBub24temVybyB2YWx1ZSB3aGVuIGFueSBwb3J0IGlzIHVuZGVyZ29pbmcgYSByZXN1bWUKKyAqIHRyYW5zaXRpb24gd2hpbGUgdGhlIHJvb3QgaHViIGlzIHN1c3BlbmRlZC4KKyAqLworc3RhdGljIGludAorbWF4MzQyMV9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpCisJCWdvdG8gZG9uZTsKKworCSpidWYgPSAwOworCWlmICgobWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzICYgUE9SVF9DX01BU0spICE9IDApIHsKKwkJKmJ1ZiA9ICgxIDw8IDEpOyAvKiBhIGh1YiBvdmVyLWN1cnJlbnQgY29uZGl0aW9uIGV4aXN0cyAqLworCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJInBvcnQgc3RhdHVzIDB4JTA4eCBoYXMgY2hhbmdlc1xuIiwKKwkJCW1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyk7CisJCXJldHZhbCA9IDE7CisJCWlmIChtYXgzNDIxX2hjZC0+cmhfc3RhdGUgPT0gTUFYMzQyMV9SSF9TVVNQRU5ERUQpCisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOworCX0KK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWF4MzQyMV9oY2QtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2h1Yl9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOworCS8qCisJICogU2VlIFRhYmxlIDExLTEzOiBIdWIgRGVzY3JpcHRvciBpbiBVU0IgMi4wIHNwZWMuCisJICovCisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsJLyogaHViIGRlc2NyaXB0b3IgKi8KKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IGNwdV90b19sZTE2KDB4MDAwMSk7CisJZGVzYy0+Yk5iclBvcnRzID0gMTsKK30KKworLyoKKyAqIFNldCB0aGUgTUFYMzQyMUUgZ2VuZXJhbC1wdXJwb3NlIG91dHB1dCB3aXRoIG51bWJlciBQSU5fTlVNQkVSIHRvCisgKiBWQUxVRSAoMCBvciAxKS4gIFBJTl9OVU1CRVIgbWF5IGJlIGluIHRoZSByYW5nZSBmcm9tIDEtOC4gIEZvcgorICogYW55IG90aGVyIHZhbHVlLCB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYSBuby1vcC4KKyAqLworc3RhdGljIHZvaWQKK21heDM0MjFfZ3BvdXRfc2V0X3ZhbHVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHU4IHBpbl9udW1iZXIsIHU4IHZhbHVlKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBoY2RfdG9fbWF4MzQyMShoY2QpOworCXU4IG1hc2ssIGlkeDsKKworCS0tcGluX251bWJlcjsKKwlpZiAocGluX251bWJlciA+IDcpCisJCXJldHVybjsKKworCW1hc2sgPSAxdSA8PCBwaW5fbnVtYmVyOworCWlkeCA9IHBpbl9udW1iZXIgLyA0OworCisJaWYgKHZhbHVlKQorCQltYXgzNDIxX2hjZC0+aW9waW5zW2lkeF0gfD0gIG1hc2s7CisJZWxzZQorCQltYXgzNDIxX2hjZC0+aW9waW5zW2lkeF0gJj0gfm1hc2s7CisJbWF4MzQyMV9oY2QtPmRvX2lvcGluX3VwZGF0ZSA9IDE7CisJd2FrZV91cF9wcm9jZXNzKG1heDM0MjFfaGNkLT5zcGlfdGhyZWFkKTsKK30KKworc3RhdGljIGludAorbWF4MzQyMV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZV9yZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQkgICAgY2hhciAqYnVmLCB1MTYgbGVuZ3RoKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2QgKm1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwlzdHJ1Y3QgbWF4MzQyMV9oY2RfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCisJcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJc3dpdGNoICh0eXBlX3JlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInBvd2VyLW9mZlxuIik7CisJCQltYXgzNDIxX2dwb3V0X3NldF92YWx1ZShoY2QsIHBkYXRhLT52YnVzX2dwb3V0LAorCQkJCQkJIXBkYXRhLT52YnVzX2FjdGl2ZV9sZXZlbCk7CisJCQkvKiBGQUxMUyBUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQltYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXMgJj0gfigxIDw8IHZhbHVlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCWh1Yl9kZXNjcmlwdG9yKChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBEZXZpY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwljYXNlIEdldFBvcnRFcnJvckNvdW50OgorCWNhc2UgU2V0SHViRGVwdGg6CisJCS8qIFVTQjMgb25seSAqLworCQlnb3RvIGVycm9yOworCisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCSooX19sZTMyICopIGJ1ZiA9IGNwdV90b19sZTMyKDApOworCQlicmVhazsKKworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKGluZGV4ICE9IDEpIHsKKwkJCXJldHZhbCA9IC1FUElQRTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJKChfX2xlMTYgKikgYnVmKVswXSA9IGNwdV90b19sZTE2KG1heDM0MjFfaGNkLT5wb3J0X3N0YXR1cyk7CisJCSgoX19sZTE2ICopIGJ1ZilbMV0gPQorCQkJY3B1X3RvX2xlMTYobWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzID4+IDE2KTsKKwkJYnJlYWs7CisKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCXJldHZhbCA9IC1FUElQRTsKKwkJYnJlYWs7CisKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9MSU5LX1NUQVRFOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfVTFfVElNRU9VVDoKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1UyX1RJTUVPVVQ6CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9CSF9QT1JUX1JFU0VUOgorCQkJZ290byBlcnJvcjsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAobWF4MzQyMV9oY2QtPmFjdGl2ZSkKKwkJCQltYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXMgfD0KKwkJCQkJVVNCX1BPUlRfU1RBVF9TVVNQRU5EOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJwb3dlci1vblxuIik7CisJCQltYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9QT1dFUjsKKwkJCW1heDM0MjFfZ3BvdXRfc2V0X3ZhbHVlKGhjZCwgcGRhdGEtPnZidXNfZ3BvdXQsCisJCQkJCQlwZGF0YS0+dmJ1c19hY3RpdmVfbGV2ZWwpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCW1heDM0MjFfcmVzZXRfcG9ydChoY2QpOworCQkJLyogRkFMTFMgVEhST1VHSCAqLworCQlkZWZhdWx0OgorCQkJaWYgKChtYXgzNDIxX2hjZC0+cG9ydF9zdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1BPV0VSKQorCQkJICAgICE9IDApCisJCQkJbWF4MzQyMV9oY2QtPnBvcnRfc3RhdHVzIHw9ICgxIDw8IHZhbHVlKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCisJCQkiaHViIGNvbnRyb2wgcmVxJTA0eCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCQl0eXBlX3JlcSwgdmFsdWUsIGluZGV4LCBsZW5ndGgpOworZXJyb3I6CQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK21heDM0MjFfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK21heDM0MjFfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoZSBTUEkgZHJpdmVyIGFscmVhZHkgdGFrZXMgY2FyZSBvZiBETUEtbWFwcGluZy91bm1hcHBpbmcsIHNvIG5vCisgKiByZWFzb24gdG8gZG8gaXQgdHdpY2UuCisgKi8KK3N0YXRpYyBpbnQKK21heDM0MjFfbWFwX3VyYl9mb3JfZG1hKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbWF4MzQyMV91bm1hcF91cmJfZm9yX2RtYShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIG1heDM0MjFfaGNkX2Rlc2MgPSB7CisJLmRlc2NyaXB0aW9uID0JCSJtYXgzNDIxIiwKKwkucHJvZHVjdF9kZXNjID0JCURSSVZFUl9ERVNDLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBtYXgzNDIxX2hjZCksCisJLmZsYWdzID0JCUhDRF9VU0IxMSwKKwkucmVzZXQgPQkJbWF4MzQyMV9yZXNldCwKKwkuc3RhcnQgPQkJbWF4MzQyMV9zdGFydCwKKwkuc3RvcCA9CQkJbWF4MzQyMV9zdG9wLAorCS5nZXRfZnJhbWVfbnVtYmVyID0JbWF4MzQyMV9nZXRfZnJhbWVfbnVtYmVyLAorCS51cmJfZW5xdWV1ZSA9CQltYXgzNDIxX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQltYXgzNDIxX3VyYl9kZXF1ZXVlLAorCS5tYXBfdXJiX2Zvcl9kbWEgPQltYXgzNDIxX21hcF91cmJfZm9yX2RtYSwKKwkudW5tYXBfdXJiX2Zvcl9kbWEgPQltYXgzNDIxX3VubWFwX3VyYl9mb3JfZG1hLAorCS5lbmRwb2ludF9kaXNhYmxlID0JbWF4MzQyMV9lbmRwb2ludF9kaXNhYmxlLAorCS5odWJfc3RhdHVzX2RhdGEgPQltYXgzNDIxX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJbWF4MzQyMV9odWJfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQgPQkJbWF4MzQyMV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQltYXgzNDIxX2J1c19yZXN1bWUsCit9OworCitzdGF0aWMgaW50CittYXgzNDIxX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IG1heDM0MjFfaGNkICptYXgzNDIxX2hjZDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWlmIChzcGlfc2V0dXAoc3BpKSA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gc2V0dXAgU1BJIGJ1cyIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmbWF4MzQyMV9oY2RfZGVzYywgJnNwaS0+ZGV2LAorCQkJICAgICBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKKwlpZiAoIWhjZCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBjcmVhdGUgSENEIHN0cnVjdHVyZVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNldF9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOworCW1heDM0MjFfaGNkID0gaGNkX3RvX21heDM0MjEoaGNkKTsKKwltYXgzNDIxX2hjZC0+bmV4dCA9IG1heDM0MjFfaGNkX2xpc3Q7CisJbWF4MzQyMV9oY2RfbGlzdCA9IG1heDM0MjFfaGNkOworCUlOSVRfTElTVF9IRUFEKCZtYXgzNDIxX2hjZC0+ZXBfbGlzdCk7CisKKwltYXgzNDIxX2hjZC0+dHggPSBrbWFsbG9jKHNpemVvZigqbWF4MzQyMV9oY2QtPnR4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXgzNDIxX2hjZC0+dHgpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8ga21hbGxvYyB0eCBidWZmZXJcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwltYXgzNDIxX2hjZC0+cnggPSBrbWFsbG9jKHNpemVvZigqbWF4MzQyMV9oY2QtPnJ4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXgzNDIxX2hjZC0+cngpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8ga21hbGxvYyByeCBidWZmZXJcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCW1heDM0MjFfaGNkLT5zcGlfdGhyZWFkID0ga3RocmVhZF9ydW4obWF4MzQyMV9zcGlfdGhyZWFkLCBoY2QsCisJCQkJCSAgICAgICJtYXgzNDIxX3NwaV90aHJlYWQiKTsKKwlpZiAobWF4MzQyMV9oY2QtPnNwaV90aHJlYWQgPT0gRVJSX1BUUigtRU5PTUVNKSkgeworCQlkZXZfZXJyKCZzcGktPmRldiwKKwkJCSJmYWlsZWQgdG8gY3JlYXRlIFNQSSB0aHJlYWQgKG91dCBvZiBtZW1vcnkpXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIDAsIDApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gYWRkIEhDRFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIG1heDM0MjFfaXJxX2hhbmRsZXIsCisJCQkgICAgIElSUUZfVFJJR0dFUl9MT1csICJtYXgzNDIxIiwgaGNkKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgc3BpLT5pcnEpOworCQlnb3RvIGVycm9yOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKGhjZCkgeworCQlrZnJlZShtYXgzNDIxX2hjZC0+dHgpOworCQlrZnJlZShtYXgzNDIxX2hjZC0+cngpOworCQlpZiAobWF4MzQyMV9oY2QtPnNwaV90aHJlYWQpCisJCQlrdGhyZWFkX3N0b3AobWF4MzQyMV9oY2QtPnNwaV90aHJlYWQpOworCQl1c2JfcHV0X2hjZChoY2QpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CittYXgzNDIxX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtYXgzNDIxX2hjZCAqbWF4MzQyMV9oY2QgPSBOVUxMLCAqKnByZXY7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZvciAocHJldiA9ICZtYXgzNDIxX2hjZF9saXN0OyAqcHJldjsgcHJldiA9ICYoKnByZXYpLT5uZXh0KSB7CisJCW1heDM0MjFfaGNkID0gKnByZXY7CisJCWhjZCA9IG1heDM0MjFfdG9faGNkKG1heDM0MjFfaGNkKTsKKwkJaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyID09ICZzcGktPmRldikKKwkJCWJyZWFrOworCX0KKwlpZiAoIW1heDM0MjFfaGNkKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gTUFYMzQyMSBIQ0QgZm91bmQgZm9yIFNQSSBkZXZpY2UgJXBcbiIsCisJCQlzcGkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1heDM0MjFfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlrdGhyZWFkX3N0b3AobWF4MzQyMV9oY2QtPnNwaV90aHJlYWQpOworCSpwcmV2ID0gbWF4MzQyMV9oY2QtPm5leHQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXgzNDIxX2hjZC0+bG9jaywgZmxhZ3MpOworCisJZnJlZV9pcnEoc3BpLT5pcnEsIGhjZCk7CisKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbWF4MzQyMV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1heDM0MjFfcHJvYmUsCisJLnJlbW92ZQkJPSBtYXgzNDIxX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWF4MzQyMS1oY2QiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworbW9kdWxlX3NwaV9kcml2ZXIobWF4MzQyMV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgTW9zYmVyZ2VyIDxkYXZpZG1AZWdhdWdlLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCmluZGV4IDA5MWFlNDkuLmU0OWViNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwpAQCAtNDYsOSArNDYsNiBAQAogCiBzdGF0aWMgc3RydWN0IGhjX2RyaXZlciBfX3JlYWRfbW9zdGx5IG9oY2lfYXQ5MV9oY19kcml2ZXI7CiBzdGF0aWMgaW50IGNsb2NrZWQ7Ci1zdGF0aWMgaW50ICgqb3JpZ19vaGNpX2h1Yl9jb250cm9sKShzdHJ1Y3QgdXNiX2hjZCAgKmhjZCwgdTE2IHR5cGVSZXEsCi0JCQl1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKTsKLXN0YXRpYyBpbnQgKCpvcmlnX29oY2lfaHViX3N0YXR1c19kYXRhKShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpOwogCiBleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKIApAQCAtMjYyLDcgKzI1OSw3IEBACiBzdGF0aWMgaW50IG9oY2lfYXQ5MV9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQogewogCXN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqcGRhdGEgPSBoY2QtPnNlbGYuY29udHJvbGxlci0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgbGVuZ3RoID0gb3JpZ19vaGNpX2h1Yl9zdGF0dXNfZGF0YShoY2QsIGJ1Zik7CisJaW50IGxlbmd0aCA9IG9oY2lfaHViX3N0YXR1c19kYXRhKGhjZCwgYnVmKTsKIAlpbnQgcG9ydDsKIAogCWF0OTFfZm9yX2VhY2hfcG9ydChwb3J0KSB7CkBAIC0zNDAsOCArMzM3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gb3JpZ19vaGNpX2h1Yl9jb250cm9sKGhjZCwgdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXggKyAxLAotCQkJCWJ1Ziwgd0xlbmd0aCk7CisJcmV0ID0gb2hjaV9odWJfY29udHJvbChoY2QsIHR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4ICsgMSwgYnVmLCB3TGVuZ3RoKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtNjkwLDkgKzY4Niw2IEBACiAJICogdG9vIGVhc3kuCiAJICovCiAKLQlvcmlnX29oY2lfaHViX2NvbnRyb2wgPSBvaGNpX2F0OTFfaGNfZHJpdmVyLmh1Yl9jb250cm9sOwotCW9yaWdfb2hjaV9odWJfc3RhdHVzX2RhdGEgPSBvaGNpX2F0OTFfaGNfZHJpdmVyLmh1Yl9zdGF0dXNfZGF0YTsKLQogCW9oY2lfYXQ5MV9oY19kcml2ZXIuaHViX3N0YXR1c19kYXRhCT0gb2hjaV9hdDkxX2h1Yl9zdGF0dXNfZGF0YTsKIAlvaGNpX2F0OTFfaGNfZHJpdmVyLmh1Yl9jb250cm9sCQk9IG9oY2lfYXQ5MV9odWJfY29udHJvbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWV4eW5vcy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWV4eW5vcy5jCmluZGV4IDY4NTg4ZDguLjA2MGE2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1leHlub3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXh5bm9zLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NhbXN1bmdfdXNiX3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpAQCAtMzMsMjggKzM0LDExMCBAQAogCiAjZGVmaW5lIHRvX2V4eW5vc19vaGNpKGhjZCkgKHN0cnVjdCBleHlub3Nfb2hjaV9oY2QgKikoaGNkX3RvX29oY2koaGNkKS0+cHJpdikKIAorI2RlZmluZSBQSFlfTlVNQkVSIDMKKwogc3RydWN0IGV4eW5vc19vaGNpX2hjZCB7CiAJc3RydWN0IGNsayAqY2xrOwogCXN0cnVjdCB1c2JfcGh5ICpwaHk7CiAJc3RydWN0IHVzYl9vdGcgKm90ZzsKKwlzdHJ1Y3QgcGh5ICpwaHlfZ1tQSFlfTlVNQkVSXTsKIH07CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19vaGNpX3BoeV9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZXh5bm9zX29oY2lfZ2V0X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV4eW5vc19vaGNpX2hjZCAqZXh5bm9zX29oY2kpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBleHlub3Nfb2hjaV9oY2QgKmV4eW5vc19vaGNpID0gdG9fZXh5bm9zX29oY2koaGNkKTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOworCXN0cnVjdCBwaHkgKnBoeTsKKwlpbnQgcGh5X251bWJlcjsKKwlpbnQgcmV0ID0gMDsKIAotCWlmIChleHlub3Nfb2hjaS0+cGh5KQotCQl1c2JfcGh5X2luaXQoZXh5bm9zX29oY2ktPnBoeSk7CisJZXh5bm9zX29oY2ktPnBoeSA9IGRldm1fdXNiX2dldF9waHkoZGV2LCBVU0JfUEhZX1RZUEVfVVNCMik7CisJaWYgKElTX0VSUihleHlub3Nfb2hjaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGV4eW5vc19vaGNpLT5waHkpOworCQlpZiAocmV0ICE9IC1FTlhJTyAmJiByZXQgIT0gLUVOT0RFVikgeworCQkJZGV2X2VycihkZXYsICJubyB1c2IyIHBoeSBjb25maWd1cmVkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2X2RiZyhkZXYsICJGYWlsZWQgdG8gZ2V0IHVzYjIgcGh5XG4iKTsKKwl9IGVsc2UgeworCQlleHlub3Nfb2hjaS0+b3RnID0gZXh5bm9zX29oY2ktPnBoeS0+b3RnOworCX0KKworCS8qCisJICogR2V0dGluZyBnZW5lcmljIHBoeToKKwkgKiBXZSBhcmUga2VlcGluZyBib3RoIHR5cGVzIG9mIHBoeXMgYXMgYSBwYXJ0IG9mIHRyYW5zaXRpbmcgT0hDSQorCSAqIHRvIGdlbmVyaWMgcGh5IGZyYW1ld29yaywgc28gYXMgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbHR5CisJICogd2l0aCBvbGQgRFRCLgorCSAqIElmIHRoZXJlIGFyZSBleGlzdGluZyBkZXZpY2VzIHVzaW5nIERUQiBmaWxlcyBidWlsdCBmcm9tIHRoZW0sCisJICogdG8gcmVtb3ZlIHRoZSBzdXBwb3J0IGZvciBvbGQgYmluZGluZ3MgaW4gdGhpcyBkcml2ZXIsCisJICogd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBzdWNoIGRldmljZXMgaGF2ZSB0aGVpciBEVEJzCisJICogdXBkYXRlZCB0byBvbmVzIGJ1aWx0IGZyb20gbmV3IERUUy4KKwkgKi8KKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUsIGNoaWxkKSB7CisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJnBoeV9udW1iZXIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBwYXJzZSBkZXZpY2UgdHJlZVxuIik7CisJCQlvZl9ub2RlX3B1dChjaGlsZCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWYgKHBoeV9udW1iZXIgPj0gUEhZX05VTUJFUikgeworCQkJZGV2X2VycihkZXYsICJJbnZhbGlkIG51bWJlciBvZiBQSFlzXG4iKTsKKwkJCW9mX25vZGVfcHV0KGNoaWxkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcGh5ID0gZGV2bV9vZl9waHlfZ2V0KGRldiwgY2hpbGQsIDApOworCQlvZl9ub2RlX3B1dChjaGlsZCk7CisJCWlmIChJU19FUlIocGh5KSkgeworCQkJcmV0ID0gUFRSX0VSUihwaHkpOworCQkJaWYgKHJldCAhPSAtRU5PU1lTICYmIHJldCAhPSAtRU5PREVWKSB7CisJCQkJZGV2X2VycihkZXYsICJubyB1c2IyIHBoeSBjb25maWd1cmVkXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJZGV2X2RiZyhkZXYsICJGYWlsZWQgdG8gZ2V0IHVzYjIgcGh5XG4iKTsKKwkJfQorCQlleHlub3Nfb2hjaS0+cGh5X2dbcGh5X251bWJlcl0gPSBwaHk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZXh5bm9zX29oY2lfcGh5X2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZXh5bm9zX29oY2lfcGh5X2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXh5bm9zX29oY2lfaGNkICpleHlub3Nfb2hjaSA9IHRvX2V4eW5vc19vaGNpKGhjZCk7CisJaW50IGk7CisJaW50IHJldCA9IDA7CiAKLQlpZiAoZXh5bm9zX29oY2ktPnBoeSkKKwlpZiAoIUlTX0VSUihleHlub3Nfb2hjaS0+cGh5KSkKKwkJcmV0dXJuIHVzYl9waHlfaW5pdChleHlub3Nfb2hjaS0+cGh5KTsKKworCWZvciAoaSA9IDA7IHJldCA9PSAwICYmIGkgPCBQSFlfTlVNQkVSOyBpKyspCisJCWlmICghSVNfRVJSKGV4eW5vc19vaGNpLT5waHlfZ1tpXSkpCisJCQlyZXQgPSBwaHlfcG93ZXJfb24oZXh5bm9zX29oY2ktPnBoeV9nW2ldKTsKKwlpZiAocmV0KQorCQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCQlpZiAoIUlTX0VSUihleHlub3Nfb2hjaS0+cGh5X2dbaV0pKQorCQkJCXBoeV9wb3dlcl9vZmYoZXh5bm9zX29oY2ktPnBoeV9nW2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGV4eW5vc19vaGNpX2hjZCAqZXh5bm9zX29oY2kgPSB0b19leHlub3Nfb2hjaShoY2QpOworCWludCBpOworCisJaWYgKCFJU19FUlIoZXh5bm9zX29oY2ktPnBoeSkpIHsKIAkJdXNiX3BoeV9zaHV0ZG93bihleHlub3Nfb2hjaS0+cGh5KTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQSFlfTlVNQkVSOyBpKyspCisJCWlmICghSVNfRVJSKGV4eW5vc19vaGNpLT5waHlfZ1tpXSkpCisJCQlwaHlfcG93ZXJfb2ZmKGV4eW5vc19vaGNpLT5waHlfZ1tpXSk7CiB9CiAKIHN0YXRpYyBpbnQgZXh5bm9zX29oY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTYyLDcgKzE0NSw2IEBACiAJc3RydWN0IGV4eW5vc19vaGNpX2hjZCAqZXh5bm9zX29oY2k7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgdXNiX3BoeSAqcGh5OwogCWludCBpcnE7CiAJaW50IGVycjsKIApAQCAtODgsMTUgKzE3MCw5IEBACiAJCQkJCSJzYW1zdW5nLGV4eW5vczU0NDAtb2hjaSIpKQogCQlnb3RvIHNraXBfcGh5OwogCi0JcGh5ID0gZGV2bV91c2JfZ2V0X3BoeSgmcGRldi0+ZGV2LCBVU0JfUEhZX1RZUEVfVVNCMik7Ci0JaWYgKElTX0VSUihwaHkpKSB7Ci0JCXVzYl9wdXRfaGNkKGhjZCk7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIG9yIHRyYW5zY2VpdmVyIGRlZmluZWRcbiIpOwotCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKLQl9IGVsc2UgewotCQlleHlub3Nfb2hjaS0+cGh5ID0gcGh5OwotCQlleHlub3Nfb2hjaS0+b3RnID0gcGh5LT5vdGc7Ci0JfQorCWVyciA9IGV4eW5vc19vaGNpX2dldF9waHkoJnBkZXYtPmRldiwgZXh5bm9zX29oY2kpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9jbGs7CiAKIHNraXBfcGh5OgogCWV4eW5vc19vaGNpLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInVzYmhvc3QiKTsKQEAgLTEyMCwxMCArMTk2LDkgQEAKIAogCWhjZC0+cnNyY19zdGFydCA9IHJlcy0+c3RhcnQ7CiAJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzKTsKLQloY2QtPnJlZ3MgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgaGNkLT5yc3JjX2xlbik7Ci0JaWYgKCFoY2QtPnJlZ3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOwotCQllcnIgPSAtRU5PTUVNOworCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaGNkLT5yZWdzKSkgeworCQllcnIgPSBQVFJfRVJSKGhjZC0+cmVncyk7CiAJCWdvdG8gZmFpbF9pbzsKIAl9CiAKQEAgLTEzOSw3ICsyMTQsMTEgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhjZCk7CiAKLQlleHlub3Nfb2hjaV9waHlfZW5hYmxlKHBkZXYpOworCWVyciA9IGV4eW5vc19vaGNpX3BoeV9lbmFibGUoJnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIFVTQiBwaHlcbiIpOworCQlnb3RvIGZhaWxfaW87CisJfQogCiAJZXJyID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfU0hBUkVEKTsKIAlpZiAoZXJyKSB7CkBAIC0xNTAsNyArMjI5LDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbF9hZGRfaGNkOgotCWV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKHBkZXYpOworCWV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogZmFpbF9pbzoKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoZXh5bm9zX29oY2ktPmNsayk7CiBmYWlsX2NsazoKQEAgLTE2OCw3ICsyNDcsNyBAQAogCWlmIChleHlub3Nfb2hjaS0+b3RnKQogCQlleHlub3Nfb2hjaS0+b3RnLT5zZXRfaG9zdChleHlub3Nfb2hjaS0+b3RnLCAmaGNkLT5zZWxmKTsKIAotCWV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKHBkZXYpOworCWV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGV4eW5vc19vaGNpLT5jbGspOwogCkBAIC0xOTAsMjYgKzI2OSwxOSBAQAogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXh5bm9zX29oY2lfaGNkICpleHlub3Nfb2hjaSA9IHRvX2V4eW5vc19vaGNpKGhjZCk7Ci0Jc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJYm9vbCBkb193YWtldXAgPSBkZXZpY2VfbWF5X3dha2V1cChkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjID0gb2hjaV9zdXNwZW5kKGhjZCwgZG9fd2FrZXVwKTsKIAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKLQogCWlmIChleHlub3Nfb2hjaS0+b3RnKQogCQlleHlub3Nfb2hjaS0+b3RnLT5zZXRfaG9zdChleHlub3Nfb2hjaS0+b3RnLCAmaGNkLT5zZWxmKTsKIAotCWV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKHBkZXYpOworCWV4eW5vc19vaGNpX3BoeV9kaXNhYmxlKGRldik7CiAKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoZXh5bm9zX29oY2ktPmNsayk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE3LDE0ICsyODksMTkgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkCQkJPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXh5bm9zX29oY2lfaGNkICpleHlub3Nfb2hjaQk9IHRvX2V4eW5vc19vaGNpKGhjZCk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldgkJPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQgcmV0OwogCiAJY2xrX3ByZXBhcmVfZW5hYmxlKGV4eW5vc19vaGNpLT5jbGspOwogCiAJaWYgKGV4eW5vc19vaGNpLT5vdGcpCiAJCWV4eW5vc19vaGNpLT5vdGctPnNldF9ob3N0KGV4eW5vc19vaGNpLT5vdGcsICZoY2QtPnNlbGYpOwogCi0JZXh5bm9zX29oY2lfcGh5X2VuYWJsZShwZGV2KTsKKwlyZXQgPSBleHlub3Nfb2hjaV9waHlfZW5hYmxlKGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgVVNCIHBoeVxuIik7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShleHlub3Nfb2hjaS0+Y2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlvaGNpX3Jlc3VtZShoY2QsIGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDM1ODY0NjAuLmY5OGQwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTExNzgsNyArMTE3OCw3IEBACiAjZGVmaW5lIFNBMTExMV9EUklWRVIJCW9oY2lfaGNkX3NhMTExMV9kcml2ZXIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfREFWSU5DSV9EQThYWAorI2lmZGVmIENPTkZJR19VU0JfT0hDSV9IQ0RfREFWSU5DSQogI2luY2x1ZGUgIm9oY2ktZGE4eHguYyIKICNkZWZpbmUgREFWSU5DSV9QTEFURk9STV9EUklWRVIJb2hjaV9oY2RfZGE4eHhfZHJpdmVyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCBjZDg3MWI4Li5iNDk0MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC00NTYsOCArNDU2LDcgQEAKIAogLyogYnVpbGQgInN0YXR1cyBjaGFuZ2UiIHBhY2tldCAob25lIG9yIHR3byBieXRlcykgZnJvbSBIQyByZWdpc3RlcnMgKi8KIAotc3RhdGljIGludAotb2hjaV9odWJfc3RhdHVzX2RhdGEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK2ludCBvaGNpX2h1Yl9zdGF0dXNfZGF0YShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAJaW50CQlpLCBjaGFuZ2VkID0gMCwgbGVuZ3RoID0gMTsKQEAgLTUyMiw2ICs1MjEsNyBAQAogCiAJcmV0dXJuIGNoYW5nZWQgPyBsZW5ndGggOiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob2hjaV9odWJfc3RhdHVzX2RhdGEpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02NjQsNyArNjY0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2h1Yl9jb250cm9sICgKK2ludCBvaGNpX2h1Yl9jb250cm9sKAogCXN0cnVjdCB1c2JfaGNkCSpoY2QsCiAJdTE2CQl0eXBlUmVxLAogCXUxNgkJd1ZhbHVlLApAQCAtNzkwLDQgKzc5MCw0IEBACiAJfQogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKG9oY2lfaHViX2NvbnRyb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBsYXRmb3JtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGxhdGZvcm0uYwppbmRleCBiNjAwMmM5Li40MzY5Mjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGxhdGZvcm0uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vaGNpX3Bkcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CkBAIC0zNiw2ICszNyw3IEBACiAKIHN0cnVjdCBvaGNpX3BsYXRmb3JtX3ByaXYgewogCXN0cnVjdCBjbGsgKmNsa3NbT0hDSV9NQVhfQ0xLU107CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKIAlzdHJ1Y3QgcGh5ICpwaHk7CiB9OwogCkBAIC0xOTEsNiArMTkzLDE5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKworCX0KKworCXByaXYtPnJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWwoJmRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHByaXYtPnJzdCkpIHsKKwkJZXJyID0gUFRSX0VSUihwcml2LT5yc3QpOworCQlpZiAoZXJyID09IC1FUFJPQkVfREVGRVIpCisJCQlnb3RvIGVycl9wdXRfY2xrczsKKwkJcHJpdi0+cnN0ID0gTlVMTDsKKwl9IGVsc2UgeworCQllcnIgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtPnJzdCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9wdXRfY2xrczsKIAl9CiAKIAlpZiAocGRhdGEtPmJpZ19lbmRpYW5fZGVzYykKQEAgLTIwMyw3ICsyMTgsNyBAQAogCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCSJFcnJvcjogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBub3Qgc2V0XG4iKTsKIAkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcHV0X2Nsa3M7CisJCWdvdG8gZXJyX3Jlc2V0OwogCX0KICNlbmRpZgogI2lmbmRlZiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDCkBAIC0yMTEsMTQgKzIyNiwxNCBAQAogCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCSJFcnJvcjogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBub3Qgc2V0XG4iKTsKIAkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcHV0X2Nsa3M7CisJCWdvdG8gZXJyX3Jlc2V0OwogCX0KICNlbmRpZgogCiAJaWYgKHBkYXRhLT5wb3dlcl9vbikgewogCQllcnIgPSBwZGF0YS0+cG93ZXJfb24oZGV2KTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl9wdXRfY2xrczsKKwkJCWdvdG8gZXJyX3Jlc2V0OwogCX0KIAogCWhjZC0+cnNyY19zdGFydCA9IHJlc19tZW0tPnN0YXJ0OwpAQCAtMjQyLDYgKzI1Nyw5IEBACiBlcnJfcG93ZXI6CiAJaWYgKHBkYXRhLT5wb3dlcl9vZmYpCiAJCXBkYXRhLT5wb3dlcl9vZmYoZGV2KTsKK2Vycl9yZXNldDoKKwlpZiAocHJpdi0+cnN0KQorCQlyZXNldF9jb250cm9sX2Fzc2VydChwcml2LT5yc3QpOwogZXJyX3B1dF9jbGtzOgogCXdoaWxlICgtLWNsayA+PSAwKQogCQljbGtfcHV0KHByaXYtPmNsa3NbY2xrXSk7CkBAIC0yNjYsNiArMjg0LDkgQEAKIAlpZiAocGRhdGEtPnBvd2VyX29mZikKIAkJcGRhdGEtPnBvd2VyX29mZihkZXYpOwogCisJaWYgKHByaXYtPnJzdCkKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cnN0KTsKKwogCWZvciAoY2xrID0gMDsgY2xrIDwgT0hDSV9NQVhfQ0xLUyAmJiBwcml2LT5jbGtzW2Nsa107IGNsaysrKQogCQljbGtfcHV0KHByaXYtPmNsa3NbY2xrXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBkMjFkNWZlLi5lNjhmM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS91c2Itb2hjaS1weGEyN3guaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3VzYi1weGEzeHgtdWxwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9oY2QuaD4KQEAgLTEyMCw2ICsxMjEsOCBAQAogc3RydWN0IHB4YTI3eF9vaGNpIHsKIAlzdHJ1Y3QgY2xrCSpjbGs7CiAJdm9pZCBfX2lvbWVtCSptbWlvX2Jhc2U7CisJc3RydWN0IHJlZ3VsYXRvciAqdmJ1c1szXTsKKwlib29sCQl2YnVzX2VuYWJsZWRbM107CiB9OwogCiAjZGVmaW5lIHRvX3B4YTI3eF9vaGNpKGhjZCkJKHN0cnVjdCBweGEyN3hfb2hjaSAqKShoY2RfdG9fb2hjaShoY2QpLT5wcml2KQpAQCAtMTY2LDYgKzE2OSw1MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHB4YTI3eF9vaGNpX3NldF92YnVzX3Bvd2VyKHN0cnVjdCBweGEyN3hfb2hjaSAqcHhhX29oY2ksCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCByZWd1bGF0b3IgKnZidXMgPSBweGFfb2hjaS0+dmJ1c1twb3J0XTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChJU19FUlJfT1JfTlVMTCh2YnVzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW5hYmxlICYmICFweGFfb2hjaS0+dmJ1c19lbmFibGVkW3BvcnRdKQorCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHZidXMpOworCWVsc2UgaWYgKCFlbmFibGUgJiYgcHhhX29oY2ktPnZidXNfZW5hYmxlZFtwb3J0XSkKKwkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUodmJ1cyk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXB4YV9vaGNpLT52YnVzX2VuYWJsZWRbcG9ydF0gPSBlbmFibGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGEyN3hfb2hjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCQkgICB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCXN0cnVjdCBweGEyN3hfb2hjaSAqcHhhX29oY2kgPSB0b19weGEyN3hfb2hjaShoY2QpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gMykKKwkJCXJldHVybiAtRVBJUEU7CisKKwkJaWYgKHdWYWx1ZSAhPSBVU0JfUE9SVF9GRUFUX1BPV0VSKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gcHhhMjd4X29oY2lfc2V0X3ZidXNfcG93ZXIocHhhX29oY2ksIHdJbmRleCAtIDEsCisJCQkJCQkgdHlwZVJlcSA9PSBTZXRQb3J0RmVhdHVyZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb2hjaV9odWJfY29udHJvbChoY2QsIHR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCBidWYsIHdMZW5ndGgpOworfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHB4YTI3eF9zZXR1cF9oYyhzdHJ1Y3QgcHhhMjd4X29oY2kgKnB4YV9vaGNpLApAQCAtMzcyLDYgKzQyMSw3IEBACiAJc3RydWN0IG9oY2lfaGNkICpvaGNpOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlzdHJ1Y3QgY2xrICp1c2JfY2xrOworCXVuc2lnbmVkIGludCBpOwogCiAJcmV0dmFsID0gb2hjaV9weGFfb2ZfaW5pdChwZGV2KTsKIAlpZiAocmV0dmFsKQpAQCAtNDE3LDYgKzQ2NywxNiBAQAogCXB4YV9vaGNpLT5jbGsgPSB1c2JfY2xrOwogCXB4YV9vaGNpLT5tbWlvX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopaGNkLT5yZWdzOwogCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkgeworCQljaGFyIG5hbWVbNl07CisKKwkJaWYgKCEoaW5mLT5mbGFncyAmIChFTkFCTEVfUE9SVDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJc3ByaW50ZihuYW1lLCAidmJ1cyV1IiwgaSArIDEpOworCQlweGFfb2hjaS0+dmJ1c1tpXSA9IGRldm1fcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCBuYW1lKTsKKwl9CisKIAlyZXR2YWwgPSBweGEyN3hfc3RhcnRfaGMocHhhX29oY2ksICZwZGV2LT5kZXYpOwogCWlmIChyZXR2YWwgPCAwKSB7CiAJCXByX2RlYnVnKCJweGEyN3hfc3RhcnRfaGMgZmFpbGVkIik7CkBAIC00NjIsOSArNTIyLDE0IEBACiB2b2lkIHVzYl9oY2RfcHhhMjd4X3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcHhhMjd4X29oY2kgKnB4YV9vaGNpID0gdG9fcHhhMjd4X29oY2koaGNkKTsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAJcHhhMjd4X3N0b3BfaGMocHhhX29oY2ksICZwZGV2LT5kZXYpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkKKwkJcHhhMjd4X29oY2lfc2V0X3ZidXNfcG93ZXIocHhhX29oY2ksIGksIGZhbHNlKTsKKwogCXVzYl9wdXRfaGNkKGhjZCk7CiB9CiAKQEAgLTU2Myw3ICs2MjgsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwcl9pbmZvKCIlczogIiBEUklWRVJfREVTQyAiXG4iLCBoY2RfbmFtZSk7CisKIAlvaGNpX2luaXRfZHJpdmVyKCZvaGNpX3B4YTI3eF9oY19kcml2ZXIsICZweGEyN3hfb3ZlcnJpZGVzKTsKKwlvaGNpX3B4YTI3eF9oY19kcml2ZXIuaHViX2NvbnRyb2wgPSBweGEyN3hfb2hjaV9odWJfY29udHJvbDsKKwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3B4YTI3eF9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQob2hjaV9weGEyN3hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBmZjdjOGYxLi4zZDc1M2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTQ1LDEwICs0NSw2IEBACiAKIC8qIGZvcndhcmQgZGVmaW5pdGlvbnMgKi8KIAotc3RhdGljIGludCAoKm9yaWdfb2hjaV9odWJfY29udHJvbCkoc3RydWN0IHVzYl9oY2QgICpoY2QsIHUxNiB0eXBlUmVxLAotCQkJdTE2IHdWYWx1ZSwgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCk7Ci1zdGF0aWMgaW50ICgqb3JpZ19vaGNpX2h1Yl9zdGF0dXNfZGF0YSkoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKTsKLQogc3RhdGljIHZvaWQgczNjMjQxMF9oY2Rfb2Moc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKmluZm8sIGludCBwb3J0X29jKTsKIAogLyogY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KQEAgLTExMCw3ICsxMDYsNyBAQAogCWludCBvcmlnOwogCWludCBwb3J0bm87CiAKLQlvcmlnID0gb3JpZ19vaGNpX2h1Yl9zdGF0dXNfZGF0YShoY2QsIGJ1Zik7CisJb3JpZyA9IG9oY2lfaHViX3N0YXR1c19kYXRhKGhjZCwgYnVmKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiBvcmlnOwpAQCAtMTgxLDcgKzE3Nyw3IEBACiAJICogcHJvY2VzcyB0aGUgcmVxdWVzdCBzdHJhaWdodCBhd2F5IGFuZCBleGl0ICovCiAKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCXJldCA9IG9yaWdfb2hjaV9odWJfY29udHJvbChoY2QsIHR5cGVSZXEsIHdWYWx1ZSwKKwkJcmV0ID0gb2hjaV9odWJfY29udHJvbChoY2QsIHR5cGVSZXEsIHdWYWx1ZSwKIAkJCQkgICAgICAgd0luZGV4LCBidWYsIHdMZW5ndGgpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMzEsNyArMjI3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gb3JpZ19vaGNpX2h1Yl9jb250cm9sKGhjZCwgdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIGJ1Ziwgd0xlbmd0aCk7CisJcmV0ID0gb2hjaV9odWJfY29udHJvbChoY2QsIHR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCBidWYsIHdMZW5ndGgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCkBAIC00ODksOSArNDg1LDYgQEAKIAkgKiBvdmVycmlkZSB0aGVzZSBmdW5jdGlvbnMgYnkgbWFraW5nIGl0IHRvbyBlYXN5LgogCSAqLwogCi0Jb3JpZ19vaGNpX2h1Yl9jb250cm9sID0gb2hjaV9zM2MyNDEwX2hjX2RyaXZlci5odWJfY29udHJvbDsKLQlvcmlnX29oY2lfaHViX3N0YXR1c19kYXRhID0gb2hjaV9zM2MyNDEwX2hjX2RyaXZlci5odWJfc3RhdHVzX2RhdGE7Ci0KIAlvaGNpX3MzYzI0MTBfaGNfZHJpdmVyLmh1Yl9zdGF0dXNfZGF0YQk9IG9oY2lfczNjMjQxMF9odWJfc3RhdHVzX2RhdGE7CiAJb2hjaV9zM2MyNDEwX2hjX2RyaXZlci5odWJfY29udHJvbAk9IG9oY2lfczNjMjQxMF9odWJfY29udHJvbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAppbmRleCA0NTUwY2UwLi4wNWUwMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaApAQCAtNzI5LDMgKzcyOSw2IEBACiBleHRlcm4gaW50CW9oY2lfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBib29sIGRvX3dha2V1cCk7CiBleHRlcm4gaW50CW9oY2lfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QsIGJvb2wgaGliZXJuYXRlZCk7CiAjZW5kaWYKK2V4dGVybiBpbnQJb2hjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZAkqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCQkgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCk7CitleHRlcm4gaW50CW9oY2lfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuaCBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oCmluZGV4IDYzOGU4OGYuLmM2MjJkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oCkBAIC01LDYgKzUsNyBAQAogdm9pZCB1aGNpX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOwogaW50IHVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOwogaW50IHVzYl9hbWRfZmluZF9jaGlwc2V0X2luZm8odm9pZCk7CitpbnQgdXNiX2hjZF9hbWRfcmVtb3RlX3dha2V1cF9xdWlyayhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBib29sIHVzYl9hbWRfaGFuZ19zeW1wdG9tX3F1aXJrKHZvaWQpOwogYm9vbCB1c2JfYW1kX3ByZWZldGNoX3F1aXJrKHZvaWQpOwogdm9pZCB1c2JfYW1kX2Rldl9wdXQodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKaW5kZXggMWFkNmJjMS4uNjIzMWNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwpAQCAtMjAsNyArMjAsOCBAQAogICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgInhoY2kuaCIKQEAgLTI3MCw3ICsyNzEsNiBAQAogCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldjsKIAlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdGltZWxlZnQ7CiAJaW50IHJldDsKIAlpbnQgaTsKIApAQCAtMjg0LDM0ICsyODQsMzEgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gTEFTVF9FUF9JTkRFWDsgaSA+IDA7IGktLSkgewotCQlpZiAodmlydF9kZXYtPmVwc1tpXS5yaW5nICYmIHZpcnRfZGV2LT5lcHNbaV0ucmluZy0+ZGVxdWV1ZSkKLQkJCXhoY2lfcXVldWVfc3RvcF9lbmRwb2ludCh4aGNpLCBzbG90X2lkLCBpLCBzdXNwZW5kKTsKKwkJaWYgKHZpcnRfZGV2LT5lcHNbaV0ucmluZyAmJiB2aXJ0X2Rldi0+ZXBzW2ldLnJpbmctPmRlcXVldWUpIHsKKwkJCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQ7CisJCQljb21tYW5kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIGZhbHNlLCBmYWxzZSwKKwkJCQkJCSAgICAgR0ZQX05PSU8pOworCQkJaWYgKCFjb21tYW5kKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQkJCXhoY2lfZnJlZV9jb21tYW5kKHhoY2ksIGNtZCk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCX0KKwkJCXhoY2lfcXVldWVfc3RvcF9lbmRwb2ludCh4aGNpLCBjb21tYW5kLCBzbG90X2lkLCBpLAorCQkJCQkJIHN1c3BlbmQpOworCQl9CiAJfQotCWNtZC0+Y29tbWFuZF90cmIgPSB4aGNpX2ZpbmRfbmV4dF9lbnF1ZXVlKHhoY2ktPmNtZF9yaW5nKTsKLQlsaXN0X2FkZF90YWlsKCZjbWQtPmNtZF9saXN0LCAmdmlydF9kZXYtPmNtZF9saXN0KTsKLQl4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoeGhjaSwgc2xvdF9pZCwgMCwgc3VzcGVuZCk7CisJeGhjaV9xdWV1ZV9zdG9wX2VuZHBvaW50KHhoY2ksIGNtZCwgc2xvdF9pZCwgMCwgc3VzcGVuZCk7CiAJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBXYWl0IGZvciBsYXN0IHN0b3AgZW5kcG9pbnQgY29tbWFuZCB0byBmaW5pc2ggKi8KLQl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAotCQkJY21kLT5jb21wbGV0aW9uLAotCQkJWEhDSV9DTURfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAodGltZWxlZnQgPD0gMCkgewotCQl4aGNpX3dhcm4oeGhjaSwgIiVzIHdoaWxlIHdhaXRpbmcgZm9yIHN0b3AgZW5kcG9pbnQgY29tbWFuZFxuIiwKLQkJCQl0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCQkvKiBUaGUgdGltZW91dCBtaWdodCBoYXZlIHJhY2VkIHdpdGggdGhlIGV2ZW50IHJpbmcgaGFuZGxlciwgc28KLQkJICogb25seSBkZWxldGUgZnJvbSB0aGUgbGlzdCBpZiB0aGUgaXRlbSBpc24ndCBwb2lzb25lZC4KLQkJICovCi0JCWlmIChjbWQtPmNtZF9saXN0Lm5leHQgIT0gTElTVF9QT0lTT04xKQotCQkJbGlzdF9kZWwoJmNtZC0+Y21kX2xpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IC1FVElNRTsKLQkJZ290byBjb21tYW5kX2NsZWFudXA7Ci0JfQorCXdhaXRfZm9yX2NvbXBsZXRpb24oY21kLT5jb21wbGV0aW9uKTsKIAotY29tbWFuZF9jbGVhbnVwOgorCWlmIChjbWQtPnN0YXR1cyA9PSBDT01QX0NNRF9BQk9SVCB8fCBjbWQtPnN0YXR1cyA9PSBDT01QX0NNRF9TVE9QKSB7CisJCXhoY2lfd2Fybih4aGNpLCAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBzdG9wIGVuZHBvaW50IGNvbW1hbmRcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJfQogCXhoY2lfZnJlZV9jb21tYW5kKHhoY2ksIGNtZCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCBjMDg5NjY4Li42YTU3ZTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC0xMDIwLDcgKzEwMjAsNiBAQAogCWRldi0+bnVtX3JpbmdzX2NhY2hlZCA9IDA7CiAKIAlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2NvbXBsZXRpb24pOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPmNtZF9saXN0KTsKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCiAJLyogUG9pbnQgdG8gb3V0cHV0IGRldmljZSBjb250ZXh0IGluIGRjYmFhLiAqLwpAQCAtMTc5NCwxMCArMTc5MywxMSBAQAogdm9pZCB4aGNpX21lbV9jbGVhbnVwKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXYgPSB4aGNpX3RvX2hjZCh4aGNpKS0+c2VsZi5jb250cm9sbGVyOwotCXN0cnVjdCB4aGNpX2NkICAqY3VyX2NkLCAqbmV4dF9jZDsKIAlpbnQgc2l6ZTsKIAlpbnQgaSwgaiwgbnVtX3BvcnRzOwogCisJZGVsX3RpbWVyX3N5bmMoJnhoY2ktPmNtZF90aW1lcik7CisKIAkvKiBGcmVlIHRoZSBFdmVudCBSaW5nIFNlZ21lbnQgVGFibGUgYW5kIHRoZSBhY3R1YWwgRXZlbnQgUmluZyAqLwogCXNpemUgPSBzaXplb2Yoc3RydWN0IHhoY2lfZXJzdF9lbnRyeSkqKHhoY2ktPmVyc3QubnVtX2VudHJpZXMpOwogCWlmICh4aGNpLT5lcnN0LmVudHJpZXMpCkBAIC0xODE2LDExICsxODE2LDcgQEAKIAkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgeGhjaS0+Y21kX3JpbmcpOwogCXhoY2ktPmNtZF9yaW5nID0gTlVMTDsKIAl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19pbml0LCAiRnJlZWQgY29tbWFuZCByaW5nIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cl9jZCwgbmV4dF9jZCwKLQkJCSZ4aGNpLT5jYW5jZWxfY21kX2xpc3QsIGNhbmNlbF9jbWRfbGlzdCkgewotCQlsaXN0X2RlbCgmY3VyX2NkLT5jYW5jZWxfY21kX2xpc3QpOwotCQlrZnJlZShjdXJfY2QpOwotCX0KKwl4aGNpX2NsZWFudXBfY29tbWFuZF9xdWV1ZSh4aGNpKTsKIAogCWZvciAoaSA9IDE7IGkgPCBNQVhfSENfU0xPVFM7ICsraSkKIAkJeGhjaV9mcmVlX3ZpcnRfZGV2aWNlKHhoY2ksIGkpOwpAQCAtMjMyMyw3ICsyMzE5LDcgQEAKIAl1MzIgcGFnZV9zaXplLCB0ZW1wOwogCWludCBpOwogCi0JSU5JVF9MSVNUX0hFQUQoJnhoY2ktPmNhbmNlbF9jbWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnhoY2ktPmNtZF9saXN0KTsKIAogCXBhZ2Vfc2l6ZSA9IHJlYWRsKCZ4aGNpLT5vcF9yZWdzLT5wYWdlX3NpemUpOwogCXhoY2lfZGJnX3RyYWNlKHhoY2ksIHRyYWNlX3hoY2lfZGJnX2luaXQsCkBAIC0yNTA5LDYgKzI1MDUsMTEgQEAKIAkJCSJXcm90ZSBFUlNUIGFkZHJlc3MgdG8gaXJfc2V0IDAuIik7CiAJeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgMCk7CiAKKwkvKiBpbml0IGNvbW1hbmQgdGltZW91dCB0aW1lciAqLworCWluaXRfdGltZXIoJnhoY2ktPmNtZF90aW1lcik7CisJeGhjaS0+Y21kX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgeGhjaTsKKwl4aGNpLT5jbWRfdGltZXIuZnVuY3Rpb24gPSB4aGNpX2hhbmRsZV9jb21tYW5kX3RpbWVvdXQ7CisKIAkvKgogCSAqIFhYWDogTWlnaHQgbmVlZCB0byBzZXQgdGhlIEludGVycnVwdGVyIE1vZGVyYXRpb24gUmVnaXN0ZXIgdG8KIAkgKiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAofjFtcyBtaW5pbXVtIGJldHdlZW4gaW50ZXJydXB0cykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXZlYnUuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdmVidS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZWZjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXZlYnUuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwKKyAqIEF1dGhvcjogR3JlZ29yeSBDTEVNRU5UIDxncmVnb3J5LmNsZW1lbnRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ4aGNpLW12ZWJ1LmgiCisKKyNkZWZpbmUgVVNCM19NQVhfV0lORE9XUwk0CisjZGVmaW5lIFVTQjNfV0lOX0NUUkwodykJKDB4MCArICgodykgKiA4KSkKKyNkZWZpbmUgVVNCM19XSU5fQkFTRSh3KQkoMHg0ICsgKCh3KSAqIDgpKQorCitzdGF0aWMgdm9pZCB4aGNpX212ZWJ1X21idXNfY29uZmlnKHZvaWQgX19pb21lbSAqYmFzZSwKKwkJCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW0pCit7CisJaW50IHdpbjsKKworCS8qIENsZWFyIGFsbCBleGlzdGluZyB3aW5kb3dzICovCisJZm9yICh3aW4gPSAwOyB3aW4gPCBVU0IzX01BWF9XSU5ET1dTOyB3aW4rKykgeworCQl3cml0ZWwoMCwgYmFzZSArIFVTQjNfV0lOX0NUUkwod2luKSk7CisJCXdyaXRlbCgwLCBiYXNlICsgVVNCM19XSU5fQkFTRSh3aW4pKTsKKwl9CisKKwkvKiBQcm9ncmFtIGVhY2ggRFJBTSBDUyBpbiBhIHNlcGVyYXRlIHdpbmRvdyAqLworCWZvciAod2luID0gMDsgd2luIDwgZHJhbS0+bnVtX2NzOyB3aW4rKykgeworCQljb25zdCBzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIHdpbjsKKworCQl3cml0ZWwoKChjcy0+c2l6ZSAtIDEpICYgMHhmZmZmMDAwMCkgfCAoY3MtPm1idXNfYXR0ciA8PCA4KSB8CisJCSAgICAgICAoZHJhbS0+bWJ1c19kcmFtX3RhcmdldF9pZCA8PCA0KSB8IDEsCisJCSAgICAgICBiYXNlICsgVVNCM19XSU5fQ1RSTCh3aW4pKTsKKworCQl3cml0ZWwoKGNzLT5iYXNlICYgMHhmZmZmMDAwMCksIGJhc2UgKyBVU0IzX1dJTl9CQVNFKHdpbikpOworCX0KK30KKworaW50IHhoY2lfbXZlYnVfbWJ1c19pbml0X3F1aXJrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIGRldm1faW9yZW1hcCgpIGJlY2F1c2UgdGhpcyBtYXBwaW5nIHNob3VsZAorCSAqIG9ubHkgZXhpc3RzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBwcm9iZSBmdW5jdGlvbi4KKwkgKi8KKwliYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkcmFtID0gbXZfbWJ1c19kcmFtX2luZm8oKTsKKwl4aGNpX212ZWJ1X21idXNfY29uZmlnKGJhc2UsIGRyYW0pOworCisJLyoKKwkgKiBUaGlzIG1lbW9yeSBhcmVhIHdhcyBvbmx5IG5lZWRlZCB0byBjb25maWd1cmUgdGhlIE1CdXMKKwkgKiB3aW5kb3dzLCBhbmQgaXMgdGhlcmVmb3JlIG5vIGxvbmdlciB1c2VmdWwuCisJICovCisJaW91bm1hcChiYXNlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW12ZWJ1LmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXZlYnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWRlOTJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW12ZWJ1LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsCisgKgorICogR3JlZ29yeSBDbGVtZW50IDxncmVnb3J5LmNsZW1lbnRAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9YSENJX01WRUJVX0gKKyNkZWZpbmUgX19MSU5VWF9YSENJX01WRUJVX0gKKyNpZiBJU19FTkFCTEVEKENPTkZJR19VU0JfWEhDSV9NVkVCVSkKK2ludCB4aGNpX212ZWJ1X21idXNfaW5pdF9xdWlyayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB4aGNpX212ZWJ1X21idXNfaW5pdF9xdWlyayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorI2VuZGlmCisjZW5kaWYgLyogX19MSU5VWF9YSENJX01WRUJVX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwppbmRleCAzNWQ0NDc3Li5lMjA1MjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCkBAIC0xMzQsMTQgKzEzNCwxNCBAQAogCQkgKi8KIAkJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9IUCkKIAkJCXhoY2ktPnF1aXJrcyB8PSBYSENJX1NQVVJJT1VTX1dBS0VVUDsKLQorCX0KKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYKKwkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfTFlOWFBPSU5UX0xQX1hIQ0kpIHsKIAkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfU1BVUklPVVNfUkVCT09UOwogCX0KIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfRVRST04gJiYKIAkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FTUk9DS19QNjcpIHsKIAkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfUkVTRVRfT05fUkVTVU1FOwotCQl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19xdWlya3MsCi0JCQkJIlFVSVJLOiBSZXNldHRpbmcgb24gcmVzdW1lIik7CiAJCXhoY2ktPnF1aXJrcyB8PSBYSENJX1RSVVNUX1RYX0xFTkdUSDsKIAl9CiAJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1JFTkVTQVMgJiYKQEAgLTE0OSw2ICsxNDksMTAgQEAKIAkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfUkVTRVRfT05fUkVTVU1FOwogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9WSUEpCiAJCXhoY2ktPnF1aXJrcyB8PSBYSENJX1JFU0VUX09OX1JFU1VNRTsKKworCWlmICh4aGNpLT5xdWlya3MgJiBYSENJX1JFU0VUX09OX1JFU1VNRSkKKwkJeGhjaV9kYmdfdHJhY2UoeGhjaSwgdHJhY2VfeGhjaV9kYmdfcXVpcmtzLAorCQkJCSJRVUlSSzogUmVzZXR0aW5nIG9uIHJlc3VtZSIpOwogfQogCiAvKiBjYWxsZWQgZHVyaW5nIHByb2JlKCkgYWZ0ZXIgY2hpcCByZXNldCBjb21wbGV0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wbGF0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGxhdC5jCmluZGV4IDE1MTkwMWMuLjI5ZDhhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wbGF0LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBsYXQuYwpAQCAtMTEsMTMgKzExLDE1IEBACiAgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJ4aGNpLmgiCisjaW5jbHVkZSAieGhjaS1tdmVidS5oIgogCiBzdGF0aWMgdm9pZCB4aGNpX3BsYXRfcXVpcmtzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewpAQCAtMzUsNiArMzcsMTEgQEAKIAlyZXR1cm4geGhjaV9nZW5fc2V0dXAoaGNkLCB4aGNpX3BsYXRfcXVpcmtzKTsKIH0KIAorc3RhdGljIGludCB4aGNpX3BsYXRfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4geGhjaV9ydW4oaGNkKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgeGhjaV9wbGF0X3hoY2lfZHJpdmVyID0gewogCS5kZXNjcmlwdGlvbiA9CQkieGhjaS1oY2QiLAogCS5wcm9kdWN0X2Rlc2MgPQkJInhIQ0kgSG9zdCBDb250cm9sbGVyIiwKQEAgLTUwLDcgKzU3LDcgQEAKIAkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucwogCSAqLwogCS5yZXNldCA9CQl4aGNpX3BsYXRfc2V0dXAsCi0JLnN0YXJ0ID0JCXhoY2lfcnVuLAorCS5zdGFydCA9CQl4aGNpX3BsYXRfc3RhcnQsCiAJLnN0b3AgPQkJCXhoY2lfc3RvcCwKIAkuc2h1dGRvd24gPQkJeGhjaV9zaHV0ZG93biwKIApAQCAtOTEsNiArOTgsNyBAQAogCXN0cnVjdCB4aGNpX2hjZAkJKnhoY2k7CiAJc3RydWN0IHJlc291cmNlICAgICAgICAgKnJlczsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAqY2xrOwogCWludAkJCXJldDsKIAlpbnQJCQlpcnE7CiAKQEAgLTEwNyw2ICsxMTUsMTUgQEAKIAlpZiAoIXJlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJICAgICJtYXJ2ZWxsLGFybWFkYS0zNzUteGhjaSIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCSAgICAibWFydmVsbCxhcm1hZGEtMzgwLXhoY2kiKSkgeworCQlyZXQgPSB4aGNpX212ZWJ1X21idXNfaW5pdF9xdWlyayhwZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJLyogSW5pdGlhbGl6ZSBkbWFfbWFzayBhbmQgY29oZXJlbnRfZG1hX21hc2sgdG8gMzItYml0cyAqLwogCXJldCA9IGRtYV9zZXRfY29oZXJlbnRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAlpZiAocmV0KQpAQCAtMTM3LDE0ICsxNTQsMjcgQEAKIAkJZ290byByZWxlYXNlX21lbV9yZWdpb247CiAJfQogCisJLyoKKwkgKiBOb3QgYWxsIHBsYXRmb3JtcyBoYXZlIGEgY2xrIHNvIGl0IGlzIG5vdCBhbiBlcnJvciBpZiB0aGUKKwkgKiBjbG9jayBkb2VzIG5vdCBleGlzdHMuCisJICovCisJY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVubWFwX3JlZ2lzdGVyczsKKwl9CisKIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5tYXBfcmVnaXN0ZXJzOworCQlnb3RvIGRpc2FibGVfY2xrOworCiAJZGV2aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCiAJLyogVVNCIDIuMCByb290aHViIGlzIHN0b3JlZCBpbiB0aGUgcGxhdGZvcm1fZGV2aWNlIG5vdy4gKi8KIAloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwl4aGNpLT5jbGsgPSBjbGs7CiAJeGhjaS0+c2hhcmVkX2hjZCA9IHVzYl9jcmVhdGVfc2hhcmVkX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsCiAJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaGNkKTsKIAlpZiAoIXhoY2ktPnNoYXJlZF9oY2QpIHsKQEAgLTE3Myw2ICsyMDMsMTAgQEAKIGRlYWxsb2NfdXNiMl9oY2Q6CiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAorZGlzYWJsZV9jbGs6CisJaWYgKCFJU19FUlIoY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CisKIHVubWFwX3JlZ2lzdGVyczoKIAlpb3VubWFwKGhjZC0+cmVncyk7CiAKQEAgLTE4OSwxMSArMjIzLDE0IEBACiB7CiAJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHhoY2lfaGNkCSp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwlzdHJ1Y3QgY2xrICpjbGsgPSB4aGNpLT5jbGs7CiAKIAl1c2JfcmVtb3ZlX2hjZCh4aGNpLT5zaGFyZWRfaGNkKTsKIAl1c2JfcHV0X2hjZCh4aGNpLT5zaGFyZWRfaGNkKTsKIAogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaWYgKCFJU19FUlIoY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CiAJaW91bm1hcChoY2QtPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCXVzYl9wdXRfaGNkKGhjZCk7CkBAIC0yMDIsNyArMjM5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCB4aGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMjMxLDYgKzI2OCw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB1c2JfeGhjaV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZ2VuZXJpYy14aGNpIiB9LAogCXsgLmNvbXBhdGlibGUgPSAieGhjaS1wbGF0Zm9ybSIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3NS14aGNpIn0sCisJeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zODAteGhjaSJ9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1c2JfeGhjaV9vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCA3YTBlM2M3Li5kNjdmZjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTY5LDEwICs2OSw2IEBACiAjaW5jbHVkZSAieGhjaS5oIgogI2luY2x1ZGUgInhoY2ktdHJhY2UuaCIKIAotc3RhdGljIGludCBoYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3Qoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXYsCi0JCXN0cnVjdCB4aGNpX2V2ZW50X2NtZCAqZXZlbnQpOwotCiAvKgogICogUmV0dXJucyB6ZXJvIGlmIHRoZSBUUkIgaXNuJ3QgaW4gdGhpcyBzZWdtZW50LCBvdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgRE1BCiAgKiBhZGRyZXNzIG9mIHRoZSBUUkIuCkBAIC0xMjMsMTYgKzExOSw2IEBACiAJcmV0dXJuIFRSQl9UWVBFX0xJTktfTEUzMihsaW5rLT5jb250cm9sKTsKIH0KIAotdW5pb24geGhjaV90cmIgKnhoY2lfZmluZF9uZXh0X2VucXVldWUoc3RydWN0IHhoY2lfcmluZyAqcmluZykKLXsKLQkvKiBFbnF1ZXVlIHBvaW50ZXIgY2FuIGJlIGxlZnQgcG9pbnRpbmcgdG8gdGhlIGxpbmsgVFJCLAotCSAqIHdlIG11c3QgaGFuZGxlIHRoYXQKLQkgKi8KLQlpZiAoVFJCX1RZUEVfTElOS19MRTMyKHJpbmctPmVucXVldWUtPmxpbmsuY29udHJvbCkpCi0JCXJldHVybiByaW5nLT5lbnFfc2VnLT5uZXh0LT50cmJzOwotCXJldHVybiByaW5nLT5lbnF1ZXVlOwotfQotCiAvKiBVcGRhdGVzIHRyYiB0byBwb2ludCB0byB0aGUgbmV4dCBUUkIgaW4gdGhlIHJpbmcsIGFuZCB1cGRhdGVzIHNlZyBpZiB0aGUgbmV4dAogICogVFJCIGlzIGluIGEgbmV3IHNlZ21lbnQuICBUaGlzIGRvZXMgbm90IHNraXAgb3ZlciBsaW5rIFRSQnMsIGFuZCBpdCBkb2VzIG5vdAogICogZWZmZWN0IHRoZSByaW5nIGRlcXVldWUgb3IgZW5xdWV1ZSBwb2ludGVycy4KQEAgLTMwMSwxNyArMjg3LDcgQEAKIAogCXhoY2lfZGJnKHhoY2ksICJBYm9ydCBjb21tYW5kIHJpbmdcbiIpOwogCi0JaWYgKCEoeGhjaS0+Y21kX3Jpbmdfc3RhdGUgJiBDTURfUklOR19TVEFURV9SVU5OSU5HKSkgewotCQl4aGNpX2RiZyh4aGNpLCAiVGhlIGNvbW1hbmQgcmluZyBpc24ndCBydW5uaW5nLCAiCi0JCQkJIkhhdmUgdGhlIGNvbW1hbmQgcmluZyBiZWVuIHN0b3BwZWQ/XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJdGVtcF82NCA9IHhoY2lfcmVhZF82NCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+Y21kX3JpbmcpOwotCWlmICghKHRlbXBfNjQgJiBDTURfUklOR19SVU5OSU5HKSkgewotCQl4aGNpX2RiZyh4aGNpLCAiQ29tbWFuZCByaW5nIGhhZCBiZWVuIHN0b3BwZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9CiAJeGhjaS0+Y21kX3Jpbmdfc3RhdGUgPSBDTURfUklOR19TVEFURV9BQk9SVEVEOwogCXhoY2lfd3JpdGVfNjQoeGhjaSwgdGVtcF82NCB8IENNRF9SSU5HX0FCT1JULAogCQkJJnhoY2ktPm9wX3JlZ3MtPmNtZF9yaW5nKTsKQEAgLTMzNyw3MSArMzEzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB4aGNpX3F1ZXVlX2NkKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCwKLQkJdW5pb24geGhjaV90cmIgKmNtZF90cmIpCi17Ci0Jc3RydWN0IHhoY2lfY2QgKmNkOwotCWNkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhoY2lfY2QpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWNkKQotCQlyZXR1cm4gLUVOT01FTTsKLQlJTklUX0xJU1RfSEVBRCgmY2QtPmNhbmNlbF9jbWRfbGlzdCk7Ci0KLQljZC0+Y29tbWFuZCA9IGNvbW1hbmQ7Ci0JY2QtPmNtZF90cmIgPSBjbWRfdHJiOwotCWxpc3RfYWRkX3RhaWwoJmNkLT5jYW5jZWxfY21kX2xpc3QsICZ4aGNpLT5jYW5jZWxfY21kX2xpc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDYW5jZWwgdGhlIGNvbW1hbmQgd2hpY2ggaGFzIGlzc3VlLgotICoKLSAqIFNvbWUgY29tbWFuZHMgbWF5IGhhbmcgZHVlIHRvIHdhaXRpbmcgZm9yIGFja25vd2xlZGdlbWVudCBmcm9tCi0gKiB1c2IgZGV2aWNlLiBJdCBpcyBvdXRzaWRlIG9mIHRoZSB4SEMncyBhYmlsaXR5IHRvIGNvbnRyb2wgYW5kCi0gKiB3aWxsIGNhdXNlIHRoZSBjb21tYW5kIHJpbmcgaXMgYmxvY2tlZC4gV2hlbiBpdCBvY2N1cnMgc29mdHdhcmUKLSAqIHNob3VsZCBpbnRlcnZlbmUgdG8gcmVjb3ZlciB0aGUgY29tbWFuZCByaW5nLgotICogU2VlIFNlY3Rpb24gNC42LjEuMSBhbmQgNC42LjEuMgotICovCi1pbnQgeGhjaV9jYW5jZWxfY21kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCwKLQkJdW5pb24geGhjaV90cmIgKmNtZF90cmIpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgewotCQl4aGNpX3dhcm4oeGhjaSwgIkFib3J0IHRoZSBjb21tYW5kIHJpbmcsIgotCQkJCSIgYnV0IHRoZSB4SENJIGlzIGRlYWQuXG4iKTsKLQkJcmV0dmFsID0gLUVTSFVURE9XTjsKLQkJZ290byBmYWlsOwotCX0KLQotCS8qIHF1ZXVlIHRoZSBjbWQgZGVzcmlwdG9yIHRvIGNhbmNlbF9jbWRfbGlzdCAqLwotCXJldHZhbCA9IHhoY2lfcXVldWVfY2QoeGhjaSwgY29tbWFuZCwgY21kX3RyYik7Ci0JaWYgKHJldHZhbCkgewotCQl4aGNpX3dhcm4oeGhjaSwgIlF1ZXVpbmcgY29tbWFuZCBkZXNjcmlwdG9yIGZhaWxlZC5cbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JLyogYWJvcnQgY29tbWFuZCByaW5nICovCi0JcmV0dmFsID0geGhjaV9hYm9ydF9jbWRfcmluZyh4aGNpKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXhoY2lfZXJyKHhoY2ksICJBYm9ydCBjb21tYW5kIHJpbmcgZmFpbGVkXG4iKTsKLQkJaWYgKHVubGlrZWx5KHJldHZhbCA9PSAtRVNIVVRET1dOKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCQkJdXNiX2hjX2RpZWQoeGhjaV90b19oY2QoeGhjaSktPnByaW1hcnlfaGNkKTsKLQkJCXhoY2lfZGJnKHhoY2ksICJ4SENJIGhvc3QgY29udHJvbGxlciBpcyBkZWFkLlxuIik7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JfQotCi1mYWlsOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCiB2b2lkIHhoY2lfcmluZ19lcF9kb29yYmVsbChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXVuc2lnbmVkIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCkBAIC02ODQsMTIgKzU5NSwxNCBAQAogCX0KIH0KIAotc3RhdGljIGludCBxdWV1ZV9zZXRfdHJfZGVxKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHNsb3RfaWQsCitzdGF0aWMgaW50IHF1ZXVlX3NldF90cl9kZXEoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIHVuc2lnbmVkIGludCBzdHJlYW1faWQsCiAJCXN0cnVjdCB4aGNpX3NlZ21lbnQgKmRlcV9zZWcsCiAJCXVuaW9uIHhoY2lfdHJiICpkZXFfcHRyLCB1MzIgY3ljbGVfc3RhdGUpOwogCiB2b2lkIHhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCiAJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXVuc2lnbmVkIGludCBzdHJlYW1faWQsCiAJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSkKQEAgLTcwNCw3ICs2MTcsNyBAQAogCQkJZGVxX3N0YXRlLT5uZXdfZGVxX3B0ciwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpeGhjaV90cmJfdmlydF90b19kbWEoZGVxX3N0YXRlLT5uZXdfZGVxX3NlZywgZGVxX3N0YXRlLT5uZXdfZGVxX3B0ciksCiAJCQlkZXFfc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7Ci0JcXVldWVfc2V0X3RyX2RlcSh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgc3RyZWFtX2lkLAorCXF1ZXVlX3NldF90cl9kZXEoeGhjaSwgY21kLCBzbG90X2lkLCBlcF9pbmRleCwgc3RyZWFtX2lkLAogCQkJZGVxX3N0YXRlLT5uZXdfZGVxX3NlZywKIAkJCWRlcV9zdGF0ZS0+bmV3X2RlcV9wdHIsCiAJCQkodTMyKSBkZXFfc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7CkBAIC03NzMsNyArNjg2LDYgQEAKIAkJdW5pb24geGhjaV90cmIgKnRyYiwgc3RydWN0IHhoY2lfZXZlbnRfY21kICpldmVudCkKIHsKIAl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7Ci0Jc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2OwogCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CiAJc3RydWN0IHhoY2lfdmlydF9lcCAqZXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CkBAIC03ODMsMTEgKzY5NSw3IEBACiAJc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSBkZXFfc3RhdGU7CiAKIAlpZiAodW5saWtlbHkoVFJCX1RPX1NVU1BFTkRfUE9SVChsZTMyX3RvX2NwdSh0cmItPmdlbmVyaWMuZmllbGRbM10pKSkpIHsKLQkJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwotCQlpZiAodmlydF9kZXYpCi0JCQloYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwgdmlydF9kZXYsCi0JCQkJZXZlbnQpOwotCQllbHNlCisJCWlmICgheGhjaS0+ZGV2c1tzbG90X2lkXSkKIAkJCXhoY2lfd2Fybih4aGNpLCAiU3RvcCBlbmRwb2ludCBjb21tYW5kICIKIAkJCQkiY29tcGxldGlvbiBmb3IgZGlzYWJsZWQgc2xvdCAldVxuIiwKIAkJCQlzbG90X2lkKTsKQEAgLTg1OCw3ICs3NjYsOSBAQAogCiAJLyogSWYgbmVjZXNzYXJ5LCBxdWV1ZSBhIFNldCBUcmFuc2ZlciBSaW5nIERlcXVldWUgUG9pbnRlciBjb21tYW5kICovCiAJaWYgKGRlcV9zdGF0ZS5uZXdfZGVxX3B0ciAmJiBkZXFfc3RhdGUubmV3X2RlcV9zZWcpIHsKLQkJeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOworCQljb21tYW5kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIGZhbHNlLCBmYWxzZSwgR0ZQX0FUT01JQyk7CisJCXhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoeGhjaSwgY29tbWFuZCwKIAkJCQlzbG90X2lkLCBlcF9pbmRleCwKIAkJCQllcC0+c3RvcHBlZF90ZC0+dXJiLT5zdHJlYW1faWQsCiAJCQkJJmRlcV9zdGF0ZSk7CkBAIC0xMjA2LDkgKzExMTYsMTEgQEAKIAkgKiBiZWNhdXNlIHRoZSBIVyBjYW4ndCBoYW5kbGUgdHdvIGNvbW1hbmRzIGJlaW5nIHF1ZXVlZCBpbiBhIHJvdy4KIAkgKi8KIAlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9SRVNFVF9FUF9RVUlSSykgeworCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOworCQljb21tYW5kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIGZhbHNlLCBmYWxzZSwgR0ZQX0FUT01JQyk7CiAJCXhoY2lfZGJnX3RyYWNlKHhoY2ksIHRyYWNlX3hoY2lfZGJnX3F1aXJrcywKIAkJCQkiUXVldWVpbmcgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQiKTsKLQkJeGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwKKwkJeGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgY29tbWFuZCwKIAkJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHgtPmRtYSwgc2xvdF9pZCwKIAkJCQlmYWxzZSk7CiAJCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CkBAIC0xMjE5LDE4NyArMTEzMSw2IEBACiAJfQogfQogCi0vKiBDb21wbGV0ZSB0aGUgY29tbWFuZCBhbmQgZGV0ZWxlIGl0IGZyb20gdGhlIGRldmNpZSdzIGNvbW1hbmQgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIHhoY2lfY29tcGxldGVfY21kX2luX2NtZF93YWl0X2xpc3Qoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kLCB1MzIgc3RhdHVzKQotewotCWNvbW1hbmQtPnN0YXR1cyA9IHN0YXR1czsKLQlsaXN0X2RlbCgmY29tbWFuZC0+Y21kX2xpc3QpOwotCWlmIChjb21tYW5kLT5jb21wbGV0aW9uKQotCQljb21wbGV0ZShjb21tYW5kLT5jb21wbGV0aW9uKTsKLQllbHNlCi0JCXhoY2lfZnJlZV9jb21tYW5kKHhoY2ksIGNvbW1hbmQpOwotfQotCi0KLS8qIENoZWNrIHRvIHNlZSBpZiBhIGNvbW1hbmQgaW4gdGhlIGRldmljZSdzIGNvbW1hbmQgcXVldWUgbWF0Y2hlcyB0aGlzIG9uZS4KLSAqIFNpZ25hbCB0aGUgY29tcGxldGlvbiBvciBmcmVlIHRoZSBjb21tYW5kLCBhbmQgcmV0dXJuIDEuICBSZXR1cm4gMCBpZiB0aGUKLSAqIGNvbXBsZXRlZCBjb21tYW5kIGlzbid0IGF0IHRoZSBoZWFkIG9mIHRoZSBjb21tYW5kIGxpc3QuCi0gKi8KLXN0YXRpYyBpbnQgaGFuZGxlX2NtZF9pbl9jbWRfd2FpdF9saXN0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2LAotCQlzdHJ1Y3QgeGhjaV9ldmVudF9jbWQgKmV2ZW50KQotewotCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQ7Ci0KLQlpZiAobGlzdF9lbXB0eSgmdmlydF9kZXYtPmNtZF9saXN0KSkKLQkJcmV0dXJuIDA7Ci0KLQljb21tYW5kID0gbGlzdF9lbnRyeSh2aXJ0X2Rldi0+Y21kX2xpc3QubmV4dCwKLQkJCXN0cnVjdCB4aGNpX2NvbW1hbmQsIGNtZF9saXN0KTsKLQlpZiAoeGhjaS0+Y21kX3JpbmctPmRlcXVldWUgIT0gY29tbWFuZC0+Y29tbWFuZF90cmIpCi0JCXJldHVybiAwOwotCi0JeGhjaV9jb21wbGV0ZV9jbWRfaW5fY21kX3dhaXRfbGlzdCh4aGNpLCBjb21tYW5kLAotCQkJR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSkpOwotCXJldHVybiAxOwotfQotCi0vKgotICogRmluZGluZyB0aGUgY29tbWFuZCB0cmIgbmVlZCB0byBiZSBjYW5jZWxsZWQgYW5kIG1vZGlmeWluZyBpdCB0bwotICogTk8gT1AgY29tbWFuZC4gQW5kIGlmIHRoZSBjb21tYW5kIGlzIGluIGRldmljZSdzIGNvbW1hbmQgd2FpdAotICogbGlzdCwgZmluaXNoaW5nIGFuZCBmcmVlaW5nIGl0LgotICoKLSAqIElmIHdlIGNhbid0IGZpbmQgdGhlIGNvbW1hbmQgdHJiLCB3ZSB0aGluayBpdCBoYWQgYWxyZWFkeSBiZWVuCi0gKiBleGVjdXRlZC4KLSAqLwotc3RhdGljIHZvaWQgeGhjaV9jbWRfdG9fbm9vcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NkICpjdXJfY2QpCi17Ci0Jc3RydWN0IHhoY2lfc2VnbWVudCAqY3VyX3NlZzsKLQl1bmlvbiB4aGNpX3RyYiAqY21kX3RyYjsKLQl1MzIgY3ljbGVfc3RhdGU7Ci0KLQlpZiAoeGhjaS0+Y21kX3JpbmctPmRlcXVldWUgPT0geGhjaS0+Y21kX3JpbmctPmVucXVldWUpCi0JCXJldHVybjsKLQotCS8qIGZpbmQgdGhlIGN1cnJlbnQgc2VnbWVudCBvZiBjb21tYW5kIHJpbmcgKi8KLQljdXJfc2VnID0gZmluZF90cmJfc2VnKHhoY2ktPmNtZF9yaW5nLT5maXJzdF9zZWcsCi0JCQl4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZSwgJmN5Y2xlX3N0YXRlKTsKLQotCWlmICghY3VyX3NlZykgewotCQl4aGNpX3dhcm4oeGhjaSwgIkNvbW1hbmQgcmluZyBtaXNtYXRjaCwgZGVxdWV1ZSA9ICVwICVsbHggKGRtYSlcbiIsCi0JCQkJeGhjaS0+Y21kX3JpbmctPmRlcXVldWUsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQl4aGNpX3RyYl92aXJ0X3RvX2RtYSh4aGNpLT5jbWRfcmluZy0+ZGVxX3NlZywKLQkJCQkJeGhjaS0+Y21kX3JpbmctPmRlcXVldWUpKTsKLQkJeGhjaV9kZWJ1Z19yaW5nKHhoY2ksIHhoY2ktPmNtZF9yaW5nKTsKLQkJeGhjaV9kYmdfcmluZ19wdHJzKHhoY2ksIHhoY2ktPmNtZF9yaW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGZpbmQgdGhlIGNvbW1hbmQgdHJiIG1hdGNoZWQgYnkgY2QgZnJvbSBjb21tYW5kIHJpbmcgKi8KLQlmb3IgKGNtZF90cmIgPSB4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZTsKLQkJCWNtZF90cmIgIT0geGhjaS0+Y21kX3JpbmctPmVucXVldWU7Ci0JCQluZXh0X3RyYih4aGNpLCB4aGNpLT5jbWRfcmluZywgJmN1cl9zZWcsICZjbWRfdHJiKSkgewotCQkvKiBJZiB0aGUgdHJiIGlzIGxpbmsgdHJiLCBjb250aW51ZSAqLwotCQlpZiAoVFJCX1RZUEVfTElOS19MRTMyKGNtZF90cmItPmdlbmVyaWMuZmllbGRbM10pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGN1cl9jZC0+Y21kX3RyYiA9PSBjbWRfdHJiKSB7Ci0KLQkJCS8qIElmIHRoZSBjb21tYW5kIGluIGRldmljZSdzIGNvbW1hbmQgbGlzdCwgd2Ugc2hvdWxkCi0JCQkgKiBmaW5pc2ggaXQgYW5kIGZyZWUgdGhlIGNvbW1hbmQgc3RydWN0dXJlLgotCQkJICovCi0JCQlpZiAoY3VyX2NkLT5jb21tYW5kKQotCQkJCXhoY2lfY29tcGxldGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwKLQkJCQkJY3VyX2NkLT5jb21tYW5kLCBDT01QX0NNRF9TVE9QKTsKLQotCQkJLyogZ2V0IGN5Y2xlIHN0YXRlIGZyb20gdGhlIG9yaWdpbiBjb21tYW5kIHRyYiAqLwotCQkJY3ljbGVfc3RhdGUgPSBsZTMyX3RvX2NwdShjbWRfdHJiLT5nZW5lcmljLmZpZWxkWzNdKQotCQkJCSYgVFJCX0NZQ0xFOwotCi0JCQkvKiBtb2RpZnkgdGhlIGNvbW1hbmQgdHJiIHRvIE5PIE9QIGNvbW1hbmQgKi8KLQkJCWNtZF90cmItPmdlbmVyaWMuZmllbGRbMF0gPSAwOwotCQkJY21kX3RyYi0+Z2VuZXJpYy5maWVsZFsxXSA9IDA7Ci0JCQljbWRfdHJiLT5nZW5lcmljLmZpZWxkWzJdID0gMDsKLQkJCWNtZF90cmItPmdlbmVyaWMuZmllbGRbM10gPSBjcHVfdG9fbGUzMigKLQkJCQkJVFJCX1RZUEUoVFJCX0NNRF9OT09QKSB8IGN5Y2xlX3N0YXRlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB4aGNpX2NhbmNlbF9jbWRfaW5fY2RfbGlzdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCi17Ci0Jc3RydWN0IHhoY2lfY2QgKmN1cl9jZCwgKm5leHRfY2Q7Ci0KLQlpZiAobGlzdF9lbXB0eSgmeGhjaS0+Y2FuY2VsX2NtZF9saXN0KSkKLQkJcmV0dXJuOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cl9jZCwgbmV4dF9jZCwKLQkJCSZ4aGNpLT5jYW5jZWxfY21kX2xpc3QsIGNhbmNlbF9jbWRfbGlzdCkgewotCQl4aGNpX2NtZF90b19ub29wKHhoY2ksIGN1cl9jZCk7Ci0JCWxpc3RfZGVsKCZjdXJfY2QtPmNhbmNlbF9jbWRfbGlzdCk7Ci0JCWtmcmVlKGN1cl9jZCk7Ci0JfQotfQotCi0vKgotICogdHJhdmVyc2luZyB0aGUgY2FuY2VsX2NtZF9saXN0LiBJZiB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGFjY29yZGluZwotICogdG8gY21kX3RyYiBpcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIGZyZWUgaXQgYW5kIHJldHVybiAxLCBvdGhlcndpc2UKLSAqIHJldHVybiAwLgotICovCi1zdGF0aWMgaW50IHhoY2lfc2VhcmNoX2NtZF90cmJfaW5fY2RfbGlzdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCXVuaW9uIHhoY2lfdHJiICpjbWRfdHJiKQotewotCXN0cnVjdCB4aGNpX2NkICpjdXJfY2QsICpuZXh0X2NkOwotCi0JaWYgKGxpc3RfZW1wdHkoJnhoY2ktPmNhbmNlbF9jbWRfbGlzdCkpCi0JCXJldHVybiAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cl9jZCwgbmV4dF9jZCwKLQkJCSZ4aGNpLT5jYW5jZWxfY21kX2xpc3QsIGNhbmNlbF9jbWRfbGlzdCkgewotCQlpZiAoY3VyX2NkLT5jbWRfdHJiID09IGNtZF90cmIpIHsKLQkJCWlmIChjdXJfY2QtPmNvbW1hbmQpCi0JCQkJeGhjaV9jb21wbGV0ZV9jbWRfaW5fY21kX3dhaXRfbGlzdCh4aGNpLAotCQkJCQljdXJfY2QtPmNvbW1hbmQsIENPTVBfQ01EX1NUT1ApOwotCQkJbGlzdF9kZWwoJmN1cl9jZC0+Y2FuY2VsX2NtZF9saXN0KTsKLQkJCWtmcmVlKGN1cl9jZCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogSWYgdGhlIGNtZF90cmJfY29tcF9jb2RlIGlzIENPTVBfQ01EX0FCT1JULCB3ZSBqdXN0IGNoZWNrIHdoZXRoZXIgdGhlCi0gKiB0cmIgcG9pbnRlZCBieSB0aGUgY29tbWFuZCByaW5nIGRlcXVldWUgcG9pbnRlciBpcyB0aGUgdHJiIHdlIHdhbnQgdG8KLSAqIGNhbmNlbCBvciBub3QuIEFuZCBpZiB0aGUgY21kX3RyYl9jb21wX2NvZGUgaXMgQ09NUF9DTURfU1RPUCwgd2Ugd2lsbAotICogdHJhdmVyc2UgdGhlIGNhbmNlbF9jbWRfbGlzdCB0byB0cnVuIHRoZSBhbGwgb2YgdGhlIGNvbW1hbmRzIGFjY29yZGluZwotICogdG8gY29tbWFuZCBkZXNjcmlwdG9yIHRvIE5PLU9QIHRyYi4KLSAqLwotc3RhdGljIGludCBoYW5kbGVfc3RvcHBlZF9jbWRfcmluZyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCWludCBjbWRfdHJiX2NvbXBfY29kZSkKLXsKLQlpbnQgY3VyX3RyYl9pc19nb29kID0gMDsKLQotCS8qIFNlYXJjaGluZyB0aGUgY21kIHRyYiBwb2ludGVkIGJ5IHRoZSBjb21tYW5kIHJpbmcgZGVxdWV1ZQotCSAqIHBvaW50ZXIgaW4gY29tbWFuZCBkZXNjcmlwdG9yIGxpc3QuIElmIGl0IGlzIGZvdW5kLCBmcmVlIGl0LgotCSAqLwotCWN1cl90cmJfaXNfZ29vZCA9IHhoY2lfc2VhcmNoX2NtZF90cmJfaW5fY2RfbGlzdCh4aGNpLAotCQkJeGhjaS0+Y21kX3JpbmctPmRlcXVldWUpOwotCi0JaWYgKGNtZF90cmJfY29tcF9jb2RlID09IENPTVBfQ01EX0FCT1JUKQotCQl4aGNpLT5jbWRfcmluZ19zdGF0ZSA9IENNRF9SSU5HX1NUQVRFX1NUT1BQRUQ7Ci0JZWxzZSBpZiAoY21kX3RyYl9jb21wX2NvZGUgPT0gQ09NUF9DTURfU1RPUCkgewotCQkvKiB0cmF2ZXJzaW5nIHRoZSBjYW5jZWxfY21kX2xpc3QgYW5kIGNhbmNlbGluZwotCQkgKiB0aGUgY29tbWFuZCBhY2NvcmRpbmcgdG8gY29tbWFuZCBkZXNjcmlwdG9yCi0JCSAqLwotCQl4aGNpX2NhbmNlbF9jbWRfaW5fY2RfbGlzdCh4aGNpKTsKLQotCQl4aGNpLT5jbWRfcmluZ19zdGF0ZSA9IENNRF9SSU5HX1NUQVRFX1JVTk5JTkc7Ci0JCS8qCi0JCSAqIHJpbmcgY29tbWFuZCByaW5nIGRvb3JiZWxsIGFnYWluIHRvIHJlc3RhcnQgdGhlCi0JCSAqIGNvbW1hbmQgcmluZwotCQkgKi8KLQkJaWYgKHhoY2ktPmNtZF9yaW5nLT5kZXF1ZXVlICE9IHhoY2ktPmNtZF9yaW5nLT5lbnF1ZXVlKQotCQkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKLQl9Ci0JcmV0dXJuIGN1cl90cmJfaXNfZ29vZDsKLX0KLQogc3RhdGljIHZvaWQgeGhjaV9oYW5kbGVfY21kX2VuYWJsZV9zbG90KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHNsb3RfaWQsCiAJCXUzMiBjbWRfY29tcF9jb2RlKQogewpAQCAtMTQwNyw3ICsxMTM4LDYgQEAKIAkJeGhjaS0+c2xvdF9pZCA9IHNsb3RfaWQ7CiAJZWxzZQogCQl4aGNpLT5zbG90X2lkID0gMDsKLQljb21wbGV0ZSgmeGhjaS0+YWRkcl9kZXYpOwogfQogCiBzdGF0aWMgdm9pZCB4aGNpX2hhbmRsZV9jbWRfZGlzYWJsZV9zbG90KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHNsb3RfaWQpCkBAIC0xNDMyLDkgKzExNjIsNiBAQAogCXVuc2lnbmVkIGludCBlcF9zdGF0ZTsKIAl1MzIgYWRkX2ZsYWdzLCBkcm9wX2ZsYWdzOwogCi0JdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwotCWlmIChoYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwgdmlydF9kZXYsIGV2ZW50KSkKLQkJcmV0dXJuOwogCS8qCiAJICogQ29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmRzIGNhbiBjb21lIGZyb20gdGhlIFVTQiBjb3JlCiAJICogY29uZmlndXJhdGlvbiBvciBhbHQgc2V0dGluZyBjaGFuZ2VzLCBvciBiZWNhdXNlIHRoZSBIVwpAQCAtMTQ0Myw2ICsxMTcwLDcgQEAKIAkgKiBJZiB0aGUgY29tbWFuZCB3YXMgZm9yIGEgaGFsdGVkIGVuZHBvaW50LCB0aGUgeEhDSSBkcml2ZXIKIAkgKiBpcyBub3Qgd2FpdGluZyBvbiB0aGUgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQuCiAJICovCisJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwogCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgdmlydF9kZXYtPmluX2N0eCk7CiAJaWYgKCFjdHJsX2N0eCkgewogCQl4aGNpX3dhcm4oeGhjaSwgIkNvdWxkIG5vdCBnZXQgaW5wdXQgY29udGV4dCwgYmFkIHR5cGUuXG4iKTsKQEAgLTE0NjUsNyArMTE5Myw3IEBACiAJCQlhZGRfZmxhZ3MgLSBTTE9UX0ZMQUcgPT0gZHJvcF9mbGFncykgewogCQllcF9zdGF0ZSA9IHZpcnRfZGV2LT5lcHNbZXBfaW5kZXhdLmVwX3N0YXRlOwogCQlpZiAoIShlcF9zdGF0ZSAmIEVQX0hBTFRFRCkpCi0JCQlnb3RvIGJhbmR3aWR0aF9jaGFuZ2U7CisJCQlyZXR1cm47CiAJCXhoY2lfZGJnX3RyYWNlKHhoY2ksIHRyYWNlX3hoY2lfZGJnX3F1aXJrcywKIAkJCQkiQ29tcGxldGVkIGNvbmZpZyBlcCBjbWQgLSAiCiAJCQkJImxhc3QgZXAgaW5kZXggPSAlZCwgc3RhdGUgPSAlZCIsCkBAIC0xNDc1LDQzICsxMjAzLDE0IEBACiAJCXJpbmdfZG9vcmJlbGxfZm9yX2FjdGl2ZV9yaW5ncyh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCk7CiAJCXJldHVybjsKIAl9Ci1iYW5kd2lkdGhfY2hhbmdlOgotCXhoY2lfZGJnX3RyYWNlKHhoY2ksICB0cmFjZV94aGNpX2RiZ19jb250ZXh0X2NoYW5nZSwKLQkJCSJDb21wbGV0ZWQgY29uZmlnIGVwIGNtZCIpOwotCXZpcnRfZGV2LT5jbWRfc3RhdHVzID0gY21kX2NvbXBfY29kZTsKLQljb21wbGV0ZSgmdmlydF9kZXYtPmNtZF9jb21wbGV0aW9uKTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHhoY2lfaGFuZGxlX2NtZF9ldmFsX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAotCQlzdHJ1Y3QgeGhjaV9ldmVudF9jbWQgKmV2ZW50LCB1MzIgY21kX2NvbXBfY29kZSkKLXsKLQlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXY7Ci0KLQl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07Ci0JaWYgKGhhbmRsZV9jbWRfaW5fY21kX3dhaXRfbGlzdCh4aGNpLCB2aXJ0X2RldiwgZXZlbnQpKQotCQlyZXR1cm47Ci0JdmlydF9kZXYtPmNtZF9zdGF0dXMgPSBjbWRfY29tcF9jb2RlOwotCWNvbXBsZXRlKCZ2aXJ0X2Rldi0+Y21kX2NvbXBsZXRpb24pOwotfQotCi1zdGF0aWMgdm9pZCB4aGNpX2hhbmRsZV9jbWRfYWRkcl9kZXYoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKLQkJdTMyIGNtZF9jb21wX2NvZGUpCi17Ci0JeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX3N0YXR1cyA9IGNtZF9jb21wX2NvZGU7Ci0JY29tcGxldGUoJnhoY2ktPmFkZHJfZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgeGhjaV9oYW5kbGVfY21kX3Jlc2V0X2RldihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAogCQlzdHJ1Y3QgeGhjaV9ldmVudF9jbWQgKmV2ZW50KQogewotCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldjsKLQogCXhoY2lfZGJnKHhoY2ksICJDb21wbGV0ZWQgcmVzZXQgZGV2aWNlIGNvbW1hbmQuXG4iKTsKLQl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07Ci0JaWYgKHZpcnRfZGV2KQotCQloYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwgdmlydF9kZXYsIGV2ZW50KTsKLQllbHNlCisJaWYgKCF4aGNpLT5kZXZzW3Nsb3RfaWRdKQogCQl4aGNpX3dhcm4oeGhjaSwgIlJlc2V0IGRldmljZSBjb21tYW5kIGNvbXBsZXRpb24gIgogCQkJCSJmb3IgZGlzYWJsZWQgc2xvdCAldVxuIiwgc2xvdF9pZCk7CiB9CkBAIC0xNTI5LDYgKzEyMjgsMTE2IEBACiAJCQlORUNfRldfTUlOT1IobGUzMl90b19jcHUoZXZlbnQtPnN0YXR1cykpKTsKIH0KIAorc3RhdGljIHZvaWQgeGhjaV9jb21wbGV0ZV9kZWxfYW5kX2ZyZWVfY21kKHN0cnVjdCB4aGNpX2NvbW1hbmQgKmNtZCwgdTMyIHN0YXR1cykKK3sKKwlsaXN0X2RlbCgmY21kLT5jbWRfbGlzdCk7CisKKwlpZiAoY21kLT5jb21wbGV0aW9uKSB7CisJCWNtZC0+c3RhdHVzID0gc3RhdHVzOworCQljb21wbGV0ZShjbWQtPmNvbXBsZXRpb24pOworCX0gZWxzZSB7CisJCWtmcmVlKGNtZCk7CisJfQorfQorCit2b2lkIHhoY2lfY2xlYW51cF9jb21tYW5kX3F1ZXVlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKK3sKKwlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjdXJfY21kLCAqdG1wX2NtZDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3VyX2NtZCwgdG1wX2NtZCwgJnhoY2ktPmNtZF9saXN0LCBjbWRfbGlzdCkKKwkJeGhjaV9jb21wbGV0ZV9kZWxfYW5kX2ZyZWVfY21kKGN1cl9jbWQsIENPTVBfQ01EX0FCT1JUKTsKK30KKworLyoKKyAqIFR1cm4gYWxsIGNvbW1hbmRzIG9uIGNvbW1hbmQgcmluZyB3aXRoIHN0YXR1cyBzZXQgdG8gImFib3J0ZWQiIHRvIG5vLW9wIHRyYnMuCisgKiBJZiB0aGVyZSBhcmUgb3RoZXIgY29tbWFuZHMgd2FpdGluZyB0aGVuIHJlc3RhcnQgdGhlIHJpbmcgYW5kIGtpY2sgdGhlIHRpbWVyLgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvbW1hbmQgcmluZyBzdG9wcGVkIGFuZCB4aGNpLT5sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIHhoY2lfaGFuZGxlX3N0b3BwZWRfY21kX3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQkJCQkgc3RydWN0IHhoY2lfY29tbWFuZCAqY3VyX2NtZCkKK3sKKwlzdHJ1Y3QgeGhjaV9jb21tYW5kICppX2NtZCwgKnRtcF9jbWQ7CisJdTMyIGN5Y2xlX3N0YXRlOworCisJLyogVHVybiBhbGwgYWJvcnRlZCBjb21tYW5kcyBpbiBsaXN0IHRvIG5vLW9wcywgdGhlbiByZXN0YXJ0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfY21kLCB0bXBfY21kLCAmeGhjaS0+Y21kX2xpc3QsCisJCQkJIGNtZF9saXN0KSB7CisKKwkJaWYgKGlfY21kLT5zdGF0dXMgIT0gQ09NUF9DTURfQUJPUlQpCisJCQljb250aW51ZTsKKworCQlpX2NtZC0+c3RhdHVzID0gQ09NUF9DTURfU1RPUDsKKworCQl4aGNpX2RiZyh4aGNpLCAiVHVybiBhYm9ydGVkIGNvbW1hbmQgJXAgdG8gbm8tb3BcbiIsCisJCQkgaV9jbWQtPmNvbW1hbmRfdHJiKTsKKwkJLyogZ2V0IGN5Y2xlIHN0YXRlIGZyb20gdGhlIG9yaWdpbmFsIGNtZCB0cmIgKi8KKwkJY3ljbGVfc3RhdGUgPSBsZTMyX3RvX2NwdSgKKwkJCWlfY21kLT5jb21tYW5kX3RyYi0+Z2VuZXJpYy5maWVsZFszXSkgJglUUkJfQ1lDTEU7CisJCS8qIG1vZGlmeSB0aGUgY29tbWFuZCB0cmIgdG8gbm8tb3AgY29tbWFuZCAqLworCQlpX2NtZC0+Y29tbWFuZF90cmItPmdlbmVyaWMuZmllbGRbMF0gPSAwOworCQlpX2NtZC0+Y29tbWFuZF90cmItPmdlbmVyaWMuZmllbGRbMV0gPSAwOworCQlpX2NtZC0+Y29tbWFuZF90cmItPmdlbmVyaWMuZmllbGRbMl0gPSAwOworCQlpX2NtZC0+Y29tbWFuZF90cmItPmdlbmVyaWMuZmllbGRbM10gPSBjcHVfdG9fbGUzMigKKwkJCVRSQl9UWVBFKFRSQl9DTURfTk9PUCkgfCBjeWNsZV9zdGF0ZSk7CisKKwkJLyoKKwkJICogY2FsbGVyIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaXMgY2FsbGVkIHdoZW4gY29tbWFuZAorCQkgKiAgY29tcGxldGlvbiBldmVudCBpcyByZWNlaXZlZCBmb3IgdGhlc2Ugbm8tb3AgY29tbWFuZHMKKwkJICovCisJfQorCisJeGhjaS0+Y21kX3Jpbmdfc3RhdGUgPSBDTURfUklOR19TVEFURV9SVU5OSU5HOworCisJLyogcmluZyBjb21tYW5kIHJpbmcgZG9vcmJlbGwgdG8gcmVzdGFydCB0aGUgY29tbWFuZCByaW5nICovCisJaWYgKCh4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZSAhPSB4aGNpLT5jbWRfcmluZy0+ZW5xdWV1ZSkgJiYKKwkgICAgISh4aGNpLT54aGNfc3RhdGUgJiBYSENJX1NUQVRFX0RZSU5HKSkgeworCQl4aGNpLT5jdXJyZW50X2NtZCA9IGN1cl9jbWQ7CisJCW1vZF90aW1lcigmeGhjaS0+Y21kX3RpbWVyLCBqaWZmaWVzICsgWEhDSV9DTURfREVGQVVMVF9USU1FT1VUKTsKKwkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKKwl9CisJcmV0dXJuOworfQorCisKK3ZvaWQgeGhjaV9oYW5kbGVfY29tbWFuZF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2k7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBod19yaW5nX3N0YXRlOworCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmN1cl9jbWQgPSBOVUxMOworCXhoY2kgPSAoc3RydWN0IHhoY2lfaGNkICopIGRhdGE7CisKKwkvKiBtYXJrIHRoaXMgY29tbWFuZCB0byBiZSBjYW5jZWxsZWQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCWlmICh4aGNpLT5jdXJyZW50X2NtZCkgeworCQljdXJfY21kID0geGhjaS0+Y3VycmVudF9jbWQ7CisJCWN1cl9jbWQtPnN0YXR1cyA9IENPTVBfQ01EX0FCT1JUOworCX0KKworCisJLyogTWFrZSBzdXJlIGNvbW1hbmQgcmluZyBpcyBydW5uaW5nIGJlZm9yZSBhYm9ydGluZyBpdCAqLworCWh3X3Jpbmdfc3RhdGUgPSB4aGNpX3JlYWRfNjQoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPmNtZF9yaW5nKTsKKwlpZiAoKHhoY2ktPmNtZF9yaW5nX3N0YXRlICYgQ01EX1JJTkdfU1RBVEVfUlVOTklORykgJiYKKwkgICAgKGh3X3Jpbmdfc3RhdGUgJiBDTURfUklOR19SVU5OSU5HKSkgIHsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXhoY2lfZGJnKHhoY2ksICJDb21tYW5kIHRpbWVvdXRcbiIpOworCQlyZXQgPSB4aGNpX2Fib3J0X2NtZF9yaW5nKHhoY2kpOworCQlpZiAodW5saWtlbHkocmV0ID09IC1FU0hVVERPV04pKSB7CisJCQl4aGNpX2Vycih4aGNpLCAiQWJvcnQgY29tbWFuZCByaW5nIGZhaWxlZFxuIik7CisJCQl4aGNpX2NsZWFudXBfY29tbWFuZF9xdWV1ZSh4aGNpKTsKKwkJCXVzYl9oY19kaWVkKHhoY2lfdG9faGNkKHhoY2kpLT5wcmltYXJ5X2hjZCk7CisJCQl4aGNpX2RiZyh4aGNpLCAieEhDSSBob3N0IGNvbnRyb2xsZXIgaXMgZGVhZC5cbiIpOworCQl9CisJCXJldHVybjsKKwl9CisJLyogY29tbWFuZCB0aW1lb3V0IG9uIHN0b3BwZWQgcmluZywgcmluZyBjYW4ndCBiZSBhYm9ydGVkICovCisJeGhjaV9kYmcoeGhjaSwgIkNvbW1hbmQgdGltZW91dCBvbiBzdG9wcGVkIHJpbmdcbiIpOworCXhoY2lfaGFuZGxlX3N0b3BwZWRfY21kX3JpbmcoeGhjaSwgeGhjaS0+Y3VycmVudF9jbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKIHN0YXRpYyB2b2lkIGhhbmRsZV9jbWRfY29tcGxldGlvbihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXN0cnVjdCB4aGNpX2V2ZW50X2NtZCAqZXZlbnQpCiB7CkBAIC0xNTM3LDYgKzEzNDYsNyBAQAogCWRtYV9hZGRyX3QgY21kX2RlcXVldWVfZG1hOwogCXUzMiBjbWRfY29tcF9jb2RlOwogCXVuaW9uIHhoY2lfdHJiICpjbWRfdHJiOworCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNtZDsKIAl1MzIgY21kX3R5cGU7CiAKIAljbWRfZG1hID0gbGU2NF90b19jcHUoZXZlbnQtPmNtZF90cmIpOwpAQCAtMTU1NCwyNiArMTM2NCwzNSBAQAogCQlyZXR1cm47CiAJfQogCisJY21kID0gbGlzdF9lbnRyeSh4aGNpLT5jbWRfbGlzdC5uZXh0LCBzdHJ1Y3QgeGhjaV9jb21tYW5kLCBjbWRfbGlzdCk7CisKKwlpZiAoY21kLT5jb21tYW5kX3RyYiAhPSB4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZSkgeworCQl4aGNpX2Vycih4aGNpLAorCQkJICJDb21tYW5kIGNvbXBsZXRpb24gZXZlbnQgZG9lcyBub3QgbWF0Y2ggY29tbWFuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXIoJnhoY2ktPmNtZF90aW1lcik7CisKIAl0cmFjZV94aGNpX2NtZF9jb21wbGV0aW9uKGNtZF90cmIsIChzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiAqKSBldmVudCk7CiAKIAljbWRfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSk7Ci0JaWYgKGNtZF9jb21wX2NvZGUgPT0gQ09NUF9DTURfQUJPUlQgfHwgY21kX2NvbXBfY29kZSA9PSBDT01QX0NNRF9TVE9QKSB7Ci0JCS8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgMCwgd2UgdGhpbmsgdGhlIHRyYiBwb2ludGVkIGJ5Ci0JCSAqIGNvbW1hbmQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgaXMgYSBnb29kIHRyYi4gVGhlIGdvb2QKLQkJICogdHJiIG1lYW5zIHdlIGRvbid0IHdhbnQgdG8gY2FuY2VsIHRoZSB0cmIsIGJ1dCBpdCBoYXZlCi0JCSAqIGJlZW4gc3RvcHBlZCBieSBob3N0LiBTbyB3ZSBzaG91bGQgaGFuZGxlIGl0IG5vcm1hbGx5LgotCQkgKiBPdGhlcndpc2UsIGRyaXZlciBzaG91bGQgaW52b2tlIGluY19kZXEoKSBhbmQgcmV0dXJuLgotCQkgKi8KLQkJaWYgKGhhbmRsZV9zdG9wcGVkX2NtZF9yaW5nKHhoY2ksIGNtZF9jb21wX2NvZGUpKSB7Ci0JCQlpbmNfZGVxKHhoY2ksIHhoY2ktPmNtZF9yaW5nKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBUaGVyZSBpcyBubyBjb21tYW5kIHRvIGhhbmRsZSBpZiB3ZSBnZXQgYSBzdG9wIGV2ZW50IHdoZW4gdGhlCi0JCSAqIGNvbW1hbmQgcmluZyBpcyBlbXB0eSwgZXZlbnQtPmNtZF90cmIgcG9pbnRzIHRvIHRoZSBuZXh0Ci0JCSAqIHVuc2V0IGNvbW1hbmQKLQkJICovCi0JCWlmICh4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZSA9PSB4aGNpLT5jbWRfcmluZy0+ZW5xdWV1ZSkKLQkJCXJldHVybjsKKworCS8qIElmIENNRCByaW5nIHN0b3BwZWQgd2Ugb3duIHRoZSB0cmJzIGJldHdlZW4gZW5xdWV1ZSBhbmQgZGVxdWV1ZSAqLworCWlmIChjbWRfY29tcF9jb2RlID09IENPTVBfQ01EX1NUT1ApIHsKKwkJeGhjaV9oYW5kbGVfc3RvcHBlZF9jbWRfcmluZyh4aGNpLCBjbWQpOworCQlyZXR1cm47CisJfQorCS8qCisJICogSG9zdCBhYm9ydGVkIHRoZSBjb21tYW5kIHJpbmcsIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNvbW1hbmQgd2FzCisJICogc3VwcG9zZWQgdG8gYmUgYWJvcnRlZCwgb3RoZXJ3aXNlIGNvbnRpbnVlIG5vcm1hbGx5LgorCSAqIFRoZSBjb21tYW5kIHJpbmcgaXMgc3RvcHBlZCBub3csIGJ1dCB0aGUgeEhDIHdpbGwgaXNzdWUgYSBDb21tYW5kCisJICogUmluZyBTdG9wcGVkIGV2ZW50IHdoaWNoIHdpbGwgY2F1c2UgdXMgdG8gcmVzdGFydCBpdC4KKwkgKi8KKwlpZiAoY21kX2NvbXBfY29kZSA9PSBDT01QX0NNRF9BQk9SVCkgeworCQl4aGNpLT5jbWRfcmluZ19zdGF0ZSA9IENNRF9SSU5HX1NUQVRFX1NUT1BQRUQ7CisJCWlmIChjbWQtPnN0YXR1cyA9PSBDT01QX0NNRF9BQk9SVCkKKwkJCWdvdG8gZXZlbnRfaGFuZGxlZDsKIAl9CiAKIAljbWRfdHlwZSA9IFRSQl9GSUVMRF9UT19UWVBFKGxlMzJfdG9fY3B1KGNtZF90cmItPmdlbmVyaWMuZmllbGRbM10pKTsKQEAgLTE1ODUsMTMgKzE0MDQsMTMgQEAKIAkJeGhjaV9oYW5kbGVfY21kX2Rpc2FibGVfc2xvdCh4aGNpLCBzbG90X2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBUUkJfQ09ORklHX0VQOgotCQl4aGNpX2hhbmRsZV9jbWRfY29uZmlnX2VwKHhoY2ksIHNsb3RfaWQsIGV2ZW50LCBjbWRfY29tcF9jb2RlKTsKKwkJaWYgKCFjbWQtPmNvbXBsZXRpb24pCisJCQl4aGNpX2hhbmRsZV9jbWRfY29uZmlnX2VwKHhoY2ksIHNsb3RfaWQsIGV2ZW50LAorCQkJCQkJICBjbWRfY29tcF9jb2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBUUkJfRVZBTF9DT05URVhUOgotCQl4aGNpX2hhbmRsZV9jbWRfZXZhbF9jdHgoeGhjaSwgc2xvdF9pZCwgZXZlbnQsIGNtZF9jb21wX2NvZGUpOwogCQlicmVhazsKIAljYXNlIFRSQl9BRERSX0RFVjoKLQkJeGhjaV9oYW5kbGVfY21kX2FkZHJfZGV2KHhoY2ksIHNsb3RfaWQsIGNtZF9jb21wX2NvZGUpOwogCQlicmVhazsKIAljYXNlIFRSQl9TVE9QX1JJTkc6CiAJCVdBUk5fT04oc2xvdF9pZCAhPSBUUkJfVE9fU0xPVF9JRCgKQEAgLTE2MDQsNiArMTQyMyw5IEBACiAJCXhoY2lfaGFuZGxlX2NtZF9zZXRfZGVxKHhoY2ksIHNsb3RfaWQsIGNtZF90cmIsIGNtZF9jb21wX2NvZGUpOwogCQlicmVhazsKIAljYXNlIFRSQl9DTURfTk9PUDoKKwkJLyogSXMgdGhpcyBhbiBhYm9ydGVkIGNvbW1hbmQgdHVybmVkIHRvIE5PLU9QPyAqLworCQlpZiAoY21kLT5zdGF0dXMgPT0gQ09NUF9DTURfU1RPUCkKKwkJCWNtZF9jb21wX2NvZGUgPSBDT01QX0NNRF9TVE9QOwogCQlicmVhazsKIAljYXNlIFRSQl9SRVNFVF9FUDoKIAkJV0FSTl9PTihzbG90X2lkICE9IFRSQl9UT19TTE9UX0lEKApAQCAtMTYyMyw2ICsxNDQ1LDE3IEBACiAJCXhoY2ktPmVycm9yX2JpdG1hc2sgfD0gMSA8PCA2OwogCQlicmVhazsKIAl9CisKKwkvKiByZXN0YXJ0IHRpbWVyIGlmIHRoaXMgd2Fzbid0IHRoZSBsYXN0IGNvbW1hbmQgKi8KKwlpZiAoY21kLT5jbWRfbGlzdC5uZXh0ICE9ICZ4aGNpLT5jbWRfbGlzdCkgeworCQl4aGNpLT5jdXJyZW50X2NtZCA9IGxpc3RfZW50cnkoY21kLT5jbWRfbGlzdC5uZXh0LAorCQkJCQkgICAgICAgc3RydWN0IHhoY2lfY29tbWFuZCwgY21kX2xpc3QpOworCQltb2RfdGltZXIoJnhoY2ktPmNtZF90aW1lciwgamlmZmllcyArIFhIQ0lfQ01EX0RFRkFVTFRfVElNRU9VVCk7CisJfQorCitldmVudF9oYW5kbGVkOgorCXhoY2lfY29tcGxldGVfZGVsX2FuZF9mcmVlX2NtZChjbWQsIGNtZF9jb21wX2NvZGUpOworCiAJaW5jX2RlcSh4aGNpLCB4aGNpLT5jbWRfcmluZyk7CiB9CiAKQEAgLTE5MzgsMTEgKzE3NzEsMTYgQEAKIAkJc3RydWN0IHhoY2lfdGQgKnRkLCB1bmlvbiB4aGNpX3RyYiAqZXZlbnRfdHJiKQogewogCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKKwljb21tYW5kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIGZhbHNlLCBmYWxzZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjb21tYW5kKQorCQlyZXR1cm47CisKIAllcC0+ZXBfc3RhdGUgfD0gRVBfSEFMVEVEOwogCWVwLT5zdG9wcGVkX3RkID0gdGQ7CiAJZXAtPnN0b3BwZWRfc3RyZWFtID0gc3RyZWFtX2lkOwogCi0JeGhjaV9xdWV1ZV9yZXNldF9lcCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCk7CisJeGhjaV9xdWV1ZV9yZXNldF9lcCh4aGNpLCBjb21tYW5kLCBzbG90X2lkLCBlcF9pbmRleCk7CiAJeGhjaV9jbGVhbnVwX3N0YWxsZWRfcmluZyh4aGNpLCB0ZC0+dXJiLT5kZXYsIGVwX2luZGV4KTsKIAogCWVwLT5zdG9wcGVkX3RkID0gTlVMTDsKQEAgLTI2NTQsNyArMjQ5Miw3IEBACiAJCQkJICogc3VjY2Vzc2Z1bCBldmVudCBhZnRlciBhIHNob3J0IHRyYW5zZmVyLgogCQkJCSAqIElnbm9yZSBpdC4KIAkJCQkgKi8KLQkJCQlpZiAoKHhoY2ktPnF1aXJrcyAmIFhIQ0lfU1BVUklPVVNfU1VDQ0VTUykgJiYgCisJCQkJaWYgKCh4aGNpLT5xdWlya3MgJiBYSENJX1NQVVJJT1VTX1NVQ0NFU1MpICYmCiAJCQkJCQllcF9yaW5nLT5sYXN0X3RkX3dhc19zaG9ydCkgewogCQkJCQllcF9yaW5nLT5sYXN0X3RkX3dhc19zaG9ydCA9IGZhbHNlOwogCQkJCQlyZXQgPSAwOwpAQCAtMzk5NiwxMSArMzgzNCwxNCBAQAogICogRG9uJ3QgZGVjcmVtZW50IHhoY2ktPmNtZF9yaW5nX3Jlc2VydmVkX3RyYnMgYWZ0ZXIgd2UndmUgcXVldWVkIHRoZSBUUkIKICAqIGJlY2F1c2UgdGhlIGNvbW1hbmQgZXZlbnQgaGFuZGxlciBtYXkgd2FudCB0byByZXN1Ym1pdCBhIGZhaWxlZCBjb21tYW5kLgogICovCi1zdGF0aWMgaW50IHF1ZXVlX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgZmllbGQxLCB1MzIgZmllbGQyLAotCQl1MzIgZmllbGQzLCB1MzIgZmllbGQ0LCBib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKQorc3RhdGljIGludCBxdWV1ZV9jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29tbWFuZCAqY21kLAorCQkJIHUzMiBmaWVsZDEsIHUzMiBmaWVsZDIsCisJCQkgdTMyIGZpZWxkMywgdTMyIGZpZWxkNCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCkKIHsKIAlpbnQgcmVzZXJ2ZWRfdHJicyA9IHhoY2ktPmNtZF9yaW5nX3Jlc2VydmVkX3RyYnM7CiAJaW50IHJldDsKKwlpZiAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykKKwkJcmV0dXJuIC1FU0hVVERPV047CiAKIAlpZiAoIWNvbW1hbmRfbXVzdF9zdWNjZWVkKQogCQlyZXNlcnZlZF90cmJzKys7CkBAIC00MDE0LDU3ICszODU1LDcxIEBACiAJCQkJCSJ1bmZhaWxhYmxlIGNvbW1hbmRzIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KKworCWNtZC0+Y29tbWFuZF90cmIgPSB4aGNpLT5jbWRfcmluZy0+ZW5xdWV1ZTsKKwlsaXN0X2FkZF90YWlsKCZjbWQtPmNtZF9saXN0LCAmeGhjaS0+Y21kX2xpc3QpOworCisJLyogaWYgdGhlcmUgYXJlIG5vIG90aGVyIGNvbW1hbmRzIHF1ZXVlZCB3ZSBzdGFydCB0aGUgdGltZW91dCB0aW1lciAqLworCWlmICh4aGNpLT5jbWRfbGlzdC5uZXh0ID09ICZjbWQtPmNtZF9saXN0ICYmCisJICAgICF0aW1lcl9wZW5kaW5nKCZ4aGNpLT5jbWRfdGltZXIpKSB7CisJCXhoY2ktPmN1cnJlbnRfY21kID0gY21kOworCQltb2RfdGltZXIoJnhoY2ktPmNtZF90aW1lciwgamlmZmllcyArIFhIQ0lfQ01EX0RFRkFVTFRfVElNRU9VVCk7CisJfQorCiAJcXVldWVfdHJiKHhoY2ksIHhoY2ktPmNtZF9yaW5nLCBmYWxzZSwgZmllbGQxLCBmaWVsZDIsIGZpZWxkMywKIAkJCWZpZWxkNCB8IHhoY2ktPmNtZF9yaW5nLT5jeWNsZV9zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIFF1ZXVlIGEgc2xvdCBlbmFibGUgb3IgZGlzYWJsZSByZXF1ZXN0IG9uIHRoZSBjb21tYW5kIHJpbmcgKi8KLWludCB4aGNpX3F1ZXVlX3Nsb3RfY29udHJvbChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHUzMiB0cmJfdHlwZSwgdTMyIHNsb3RfaWQpCitpbnQgeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCXUzMiB0cmJfdHlwZSwgdTMyIHNsb3RfaWQpCiB7Ci0JcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwKKwlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCBjbWQsIDAsIDAsIDAsCiAJCQlUUkJfVFlQRSh0cmJfdHlwZSkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksIGZhbHNlKTsKIH0KIAogLyogUXVldWUgYW4gYWRkcmVzcyBkZXZpY2UgY29tbWFuZCBUUkIgKi8KLWludCB4aGNpX3F1ZXVlX2FkZHJlc3NfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAotCQkJICAgICAgdTMyIHNsb3RfaWQsIGVudW0geGhjaV9zZXR1cF9kZXYgc2V0dXApCitpbnQgeGhjaV9xdWV1ZV9hZGRyZXNzX2RldmljZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbW1hbmQgKmNtZCwKKwkJZG1hX2FkZHJfdCBpbl9jdHhfcHRyLCB1MzIgc2xvdF9pZCwgZW51bSB4aGNpX3NldHVwX2RldiBzZXR1cCkKIHsKLQlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCBsb3dlcl8zMl9iaXRzKGluX2N0eF9wdHIpLAorCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIGNtZCwgbG93ZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwKIAkJCXVwcGVyXzMyX2JpdHMoaW5fY3R4X3B0ciksIDAsCiAJCQlUUkJfVFlQRShUUkJfQUREUl9ERVYpIHwgU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpCiAJCQl8IChzZXR1cCA9PSBTRVRVUF9DT05URVhUX09OTFkgPyBUUkJfQlNSIDogMCksIGZhbHNlKTsKIH0KIAotaW50IHhoY2lfcXVldWVfdmVuZG9yX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAoraW50IHhoY2lfcXVldWVfdmVuZG9yX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCiAJCXUzMiBmaWVsZDEsIHUzMiBmaWVsZDIsIHUzMiBmaWVsZDMsIHUzMiBmaWVsZDQpCiB7Ci0JcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgZmllbGQxLCBmaWVsZDIsIGZpZWxkMywgZmllbGQ0LCBmYWxzZSk7CisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgY21kLCBmaWVsZDEsIGZpZWxkMiwgZmllbGQzLCBmaWVsZDQsIGZhbHNlKTsKIH0KIAogLyogUXVldWUgYSByZXNldCBkZXZpY2UgY29tbWFuZCBUUkIgKi8KLWludCB4aGNpX3F1ZXVlX3Jlc2V0X2RldmljZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHUzMiBzbG90X2lkKQoraW50IHhoY2lfcXVldWVfcmVzZXRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29tbWFuZCAqY21kLAorCQl1MzIgc2xvdF9pZCkKIHsKLQlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCAwLCAwLCAwLAorCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIGNtZCwgMCwgMCwgMCwKIAkJCVRSQl9UWVBFKFRSQl9SRVNFVF9ERVYpIHwgU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpLAogCQkJZmFsc2UpOwogfQogCiAvKiBRdWV1ZSBhIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIFRSQiAqLwotaW50IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAoraW50IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29tbWFuZCAqY21kLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsCiAJCXUzMiBzbG90X2lkLCBib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKQogewotCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIGxvd2VyXzMyX2JpdHMoaW5fY3R4X3B0ciksCisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgY21kLCBsb3dlcl8zMl9iaXRzKGluX2N0eF9wdHIpLAogCQkJdXBwZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwgMCwKIAkJCVRSQl9UWVBFKFRSQl9DT05GSUdfRVApIHwgU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpLAogCQkJY29tbWFuZF9tdXN0X3N1Y2NlZWQpOwogfQogCiAvKiBRdWV1ZSBhbiBldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmQgVFJCICovCi1pbnQgeGhjaV9xdWV1ZV9ldmFsdWF0ZV9jb250ZXh0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAotCQl1MzIgc2xvdF9pZCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCkKK2ludCB4aGNpX3F1ZXVlX2V2YWx1YXRlX2NvbnRleHQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCWRtYV9hZGRyX3QgaW5fY3R4X3B0ciwgdTMyIHNsb3RfaWQsIGJvb2wgY29tbWFuZF9tdXN0X3N1Y2NlZWQpCiB7Ci0JcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgbG93ZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwKKwlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCBjbWQsIGxvd2VyXzMyX2JpdHMoaW5fY3R4X3B0ciksCiAJCQl1cHBlcl8zMl9iaXRzKGluX2N0eF9wdHIpLCAwLAogCQkJVFJCX1RZUEUoVFJCX0VWQUxfQ09OVEVYVCkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksCiAJCQljb21tYW5kX211c3Rfc3VjY2VlZCk7CkBAIC00MDc0LDI1ICszOTI5LDI2IEBACiAgKiBTdXNwZW5kIGlzIHNldCB0byBpbmRpY2F0ZSAiU3RvcCBFbmRwb2ludCBDb21tYW5kIiBpcyBiZWluZyBpc3N1ZWQgdG8gc3RvcAogICogYWN0aXZpdHkgb24gYW4gZW5kcG9pbnQgdGhhdCBpcyBhYm91dCB0byBiZSBzdXNwZW5kZWQuCiAgKi8KLWludCB4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKLQkJdW5zaWduZWQgaW50IGVwX2luZGV4LCBpbnQgc3VzcGVuZCkKK2ludCB4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCQkgICAgIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIGludCBzdXNwZW5kKQogewogCXUzMiB0cmJfc2xvdF9pZCA9IFNMT1RfSURfRk9SX1RSQihzbG90X2lkKTsKIAl1MzIgdHJiX2VwX2luZGV4ID0gRVBfSURfRk9SX1RSQihlcF9pbmRleCk7CiAJdTMyIHR5cGUgPSBUUkJfVFlQRShUUkJfU1RPUF9SSU5HKTsKIAl1MzIgdHJiX3N1c3BlbmQgPSBTVVNQRU5EX1BPUlRfRk9SX1RSQihzdXNwZW5kKTsKIAotCXJldHVybiBxdWV1ZV9jb21tYW5kKHhoY2ksIDAsIDAsIDAsCisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgY21kLCAwLCAwLCAwLAogCQkJdHJiX3Nsb3RfaWQgfCB0cmJfZXBfaW5kZXggfCB0eXBlIHwgdHJiX3N1c3BlbmQsIGZhbHNlKTsKIH0KIAogLyogU2V0IFRyYW5zZmVyIFJpbmcgRGVxdWV1ZSBQb2ludGVyIGNvbW1hbmQuCiAgKiBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgZW5kcG9pbnRzIHRoYXQgaGF2ZSBzdHJlYW1zIGVuYWJsZWQuCiAgKi8KLXN0YXRpYyBpbnQgcXVldWVfc2V0X3RyX2RlcShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAotCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIHVuc2lnbmVkIGludCBzdHJlYW1faWQsCi0JCXN0cnVjdCB4aGNpX3NlZ21lbnQgKmRlcV9zZWcsCi0JCXVuaW9uIHhoY2lfdHJiICpkZXFfcHRyLCB1MzIgY3ljbGVfc3RhdGUpCitzdGF0aWMgaW50IHF1ZXVlX3NldF90cl9kZXEoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCQlpbnQgc2xvdF9pZCwKKwkJCXVuc2lnbmVkIGludCBlcF9pbmRleCwgdW5zaWduZWQgaW50IHN0cmVhbV9pZCwKKwkJCXN0cnVjdCB4aGNpX3NlZ21lbnQgKmRlcV9zZWcsCisJCQl1bmlvbiB4aGNpX3RyYiAqZGVxX3B0ciwgdTMyIGN5Y2xlX3N0YXRlKQogewogCWRtYV9hZGRyX3QgYWRkcjsKIAl1MzIgdHJiX3Nsb3RfaWQgPSBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCk7CkBAIC00MTE5LDE4ICszOTc1LDE5IEBACiAJZXAtPnF1ZXVlZF9kZXFfcHRyID0gZGVxX3B0cjsKIAlpZiAoc3RyZWFtX2lkKQogCQl0cmJfc2N0ID0gU0NUX0ZPUl9UUkIoU0NUX1BSSV9UUik7Ci0JcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgbG93ZXJfMzJfYml0cyhhZGRyKSB8IHRyYl9zY3QgfCBjeWNsZV9zdGF0ZSwKKwlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCBjbWQsCisJCQlsb3dlcl8zMl9iaXRzKGFkZHIpIHwgdHJiX3NjdCB8IGN5Y2xlX3N0YXRlLAogCQkJdXBwZXJfMzJfYml0cyhhZGRyKSwgdHJiX3N0cmVhbV9pZCwKIAkJCXRyYl9zbG90X2lkIHwgdHJiX2VwX2luZGV4IHwgdHlwZSwgZmFsc2UpOwogfQogCi1pbnQgeGhjaV9xdWV1ZV9yZXNldF9lcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAotCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgpCitpbnQgeGhjaV9xdWV1ZV9yZXNldF9lcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbW1hbmQgKmNtZCwKKwkJCWludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpCiB7CiAJdTMyIHRyYl9zbG90X2lkID0gU0xPVF9JRF9GT1JfVFJCKHNsb3RfaWQpOwogCXUzMiB0cmJfZXBfaW5kZXggPSBFUF9JRF9GT1JfVFJCKGVwX2luZGV4KTsKIAl1MzIgdHlwZSA9IFRSQl9UWVBFKFRSQl9SRVNFVF9FUCk7CiAKLQlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCAwLCAwLCAwLCB0cmJfc2xvdF9pZCB8IHRyYl9lcF9pbmRleCB8IHR5cGUsCi0JCQlmYWxzZSk7CisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgY21kLCAwLCAwLCAwLAorCQkJdHJiX3Nsb3RfaWQgfCB0cmJfZXBfaW5kZXggfCB0eXBlLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IDMwMDgzNjkuLjJiOGQ5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIAkJeGhjaS0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvciA9IDA7CiAJfQogCi0JcmV0ID0gcGNpX2VuYWJsZV9tc2l4KHBkZXYsIHhoY2ktPm1zaXhfZW50cmllcywgeGhjaS0+bXNpeF9jb3VudCk7CisJcmV0ID0gcGNpX2VuYWJsZV9tc2l4X2V4YWN0KHBkZXYsIHhoY2ktPm1zaXhfZW50cmllcywgeGhjaS0+bXNpeF9jb3VudCk7CiAJaWYgKHJldCkgewogCQl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19pbml0LAogCQkJCSJGYWlsZWQgdG8gZW5hYmxlIE1TSS1YIik7CkBAIC02NDEsMTAgKzY0MSwxNCBAQAogCXdyaXRlbChFUl9JUlFfRU5BQkxFKHRlbXApLCAmeGhjaS0+aXJfc2V0LT5pcnFfcGVuZGluZyk7CiAJeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgMCk7CiAKLQlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9ORUNfSE9TVCkKLQkJeGhjaV9xdWV1ZV92ZW5kb3JfY29tbWFuZCh4aGNpLCAwLCAwLCAwLAorCWlmICh4aGNpLT5xdWlya3MgJiBYSENJX05FQ19IT1NUKSB7CisJCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQ7CisJCWNvbW1hbmQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIGZhbHNlLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb21tYW5kKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXhoY2lfcXVldWVfdmVuZG9yX2NvbW1hbmQoeGhjaSwgY29tbWFuZCwgMCwgMCwgMCwKIAkJCQlUUkJfVFlQRShUUkJfTkVDX0dFVF9GVykpOwotCisJfQogCXhoY2lfZGJnX3RyYWNlKHhoY2ksIHRyYWNlX3hoY2lfZGJnX2luaXQsCiAJCQkiRmluaXNoZWQgeGhjaV9ydW4gZm9yIFVTQjIgcm9vdGh1YiIpOwogCXJldHVybiAwOwpAQCAtMTE4NywxMCArMTE5MSwxMCBAQAogc3RhdGljIGludCB4aGNpX2NoZWNrX21heHBhY2tldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHVuc2lnbmVkIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHg7CiAJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqb3V0X2N0eDsKIAlzdHJ1Y3QgeGhjaV9pbnB1dF9jb250cm9sX2N0eCAqY3RybF9jdHg7CiAJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHg7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKIAlpbnQgbWF4X3BhY2tldF9zaXplOwogCWludCBod19tYXhfcGFja2V0X3NpemU7CiAJaW50IHJldCA9IDA7CkBAIC0xMjE1LDE4ICsxMjE5LDI0IEBACiAJCS8qIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgaWYgYSBub24tZGVmYXVsdCBjb250cm9sIGVuZHBvaW50CiAJCSAqIGNoYW5nZXMgbWF4IHBhY2tldCBzaXplcy4KIAkJICovCi0JCWluX2N0eCA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eDsKLQkJY3RybF9jdHggPSB4aGNpX2dldF9pbnB1dF9jb250cm9sX2N0eCh4aGNpLCBpbl9jdHgpOworCisJCWNvbW1hbmQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIHRydWUsIEdGUF9LRVJORUwpOworCQlpZiAoIWNvbW1hbmQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQljb21tYW5kLT5pbl9jdHggPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHg7CisJCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgY29tbWFuZC0+aW5fY3R4KTsKIAkJaWYgKCFjdHJsX2N0eCkgewogCQkJeGhjaV93YXJuKHhoY2ksICIlczogQ291bGQgbm90IGdldCBpbnB1dCBjb250ZXh0LCBiYWQgdHlwZS5cbiIsCiAJCQkJCV9fZnVuY19fKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gY29tbWFuZF9jbGVhbnVwOwogCQl9CiAJCS8qIFNldCB1cCB0aGUgbW9kaWZpZWQgY29udHJvbCBlbmRwb2ludCAwICovCiAJCXhoY2lfZW5kcG9pbnRfY29weSh4aGNpLCB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHgsCiAJCQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+b3V0X2N0eCwgZXBfaW5kZXgpOwogCi0JCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBpbl9jdHgsIGVwX2luZGV4KTsKKwkJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGNvbW1hbmQtPmluX2N0eCwgZXBfaW5kZXgpOwogCQllcF9jdHgtPmVwX2luZm8yICY9IGNwdV90b19sZTMyKH5NQVhfUEFDS0VUX01BU0spOwogCQllcF9jdHgtPmVwX2luZm8yIHw9IGNwdV90b19sZTMyKE1BWF9QQUNLRVQobWF4X3BhY2tldF9zaXplKSk7CiAKQEAgLTEyMzQsMTcgKzEyNDQsMjAgQEAKIAkJY3RybF9jdHgtPmRyb3BfZmxhZ3MgPSAwOwogCiAJCXhoY2lfZGJnKHhoY2ksICJTbG90ICVkIGlucHV0IGNvbnRleHRcbiIsIHNsb3RfaWQpOwotCQl4aGNpX2RiZ19jdHgoeGhjaSwgaW5fY3R4LCBlcF9pbmRleCk7CisJCXhoY2lfZGJnX2N0eCh4aGNpLCBjb21tYW5kLT5pbl9jdHgsIGVwX2luZGV4KTsKIAkJeGhjaV9kYmcoeGhjaSwgIlNsb3QgJWQgb3V0cHV0IGNvbnRleHRcbiIsIHNsb3RfaWQpOwogCQl4aGNpX2RiZ19jdHgoeGhjaSwgb3V0X2N0eCwgZXBfaW5kZXgpOwogCi0JCXJldCA9IHhoY2lfY29uZmlndXJlX2VuZHBvaW50KHhoY2ksIHVyYi0+ZGV2LCBOVUxMLAorCQlyZXQgPSB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludCh4aGNpLCB1cmItPmRldiwgY29tbWFuZCwKIAkJCQl0cnVlLCBmYWxzZSk7CiAKIAkJLyogQ2xlYW4gdXAgdGhlIGlucHV0IGNvbnRleHQgZm9yIGxhdGVyIHVzZSBieSBiYW5kd2lkdGgKIAkJICogZnVuY3Rpb25zLgogCQkgKi8KIAkJY3RybF9jdHgtPmFkZF9mbGFncyA9IGNwdV90b19sZTMyKFNMT1RfRkxBRyk7Citjb21tYW5kX2NsZWFudXA6CisJCWtmcmVlKGNvbW1hbmQtPmNvbXBsZXRpb24pOworCQlrZnJlZShjb21tYW5kKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0NjUsNiArMTQ3OCw3IEBACiAJdW5zaWduZWQgaW50IGVwX2luZGV4OwogCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CiAJc3RydWN0IHhoY2lfdmlydF9lcCAqZXA7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKIAogCXhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xNTM0LDEyICsxNTQ4LDE0IEBACiAJICogdGhlIGZpcnN0IGNhbmNlbGxhdGlvbiB0byBiZSBoYW5kbGVkLgogCSAqLwogCWlmICghKGVwLT5lcF9zdGF0ZSAmIEVQX0hBTFRfUEVORElORykpIHsKKwkJY29tbWFuZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCBmYWxzZSwgZmFsc2UsIEdGUF9BVE9NSUMpOwogCQllcC0+ZXBfc3RhdGUgfD0gRVBfSEFMVF9QRU5ESU5HOwogCQllcC0+c3RvcF9jbWRzX3BlbmRpbmcrKzsKIAkJZXAtPnN0b3BfY21kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKIAkJCVhIQ0lfU1RPUF9FUF9DTURfVElNRU9VVCAqIEhaOwogCQlhZGRfdGltZXIoJmVwLT5zdG9wX2NtZF90aW1lcik7Ci0JCXhoY2lfcXVldWVfc3RvcF9lbmRwb2ludCh4aGNpLCB1cmItPmRldi0+c2xvdF9pZCwgZXBfaW5kZXgsIDApOworCQl4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoeGhjaSwgY29tbWFuZCwgdXJiLT5kZXYtPnNsb3RfaWQsCisJCQkJCSBlcF9pbmRleCwgMCk7CiAJCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CiAJfQogZG9uZToKQEAgLTE4MDQsNiArMTgyMCwxMSBAQAogCWludCByZXQ7CiAKIAlzd2l0Y2ggKCpjbWRfc3RhdHVzKSB7CisJY2FzZSBDT01QX0NNRF9BQk9SVDoKKwljYXNlIENPTVBfQ01EX1NUT1A6CisJCXhoY2lfd2Fybih4aGNpLCAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZFxuIik7CisJCXJldCA9IC1FVElNRTsKKwkJYnJlYWs7CiAJY2FzZSBDT01QX0VOT01FTToKIAkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIk5vdCBlbm91Z2ggaG9zdCBjb250cm9sbGVyIHJlc291cmNlcyAiCiAJCQkJImZvciBuZXcgZGV2aWNlIHN0YXRlLlxuIik7CkBAIC0xODUwLDYgKzE4NzEsMTEgQEAKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXYgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdOwogCiAJc3dpdGNoICgqY21kX3N0YXR1cykgeworCWNhc2UgQ09NUF9DTURfQUJPUlQ6CisJY2FzZSBDT01QX0NNRF9TVE9QOgorCQl4aGNpX3dhcm4oeGhjaSwgIlRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgZXZhbHVhdGUgY29udGV4dCBjb21tYW5kXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlicmVhazsKIAljYXNlIENPTVBfRUlOVkFMOgogCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiV0FSTjogeEhDSSBkcml2ZXIgc2V0dXAgaW52YWxpZCBldmFsdWF0ZSAiCiAJCQkJImNvbnRleHQgY29tbWFuZC5cbiIpOwpAQCAtMjU3NCwyMyArMjYwMCwxNyBAQAogCQlib29sIGN0eF9jaGFuZ2UsIGJvb2wgbXVzdF9zdWNjZWVkKQogewogCWludCByZXQ7Ci0JaW50IHRpbWVsZWZ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqaW5fY3R4OwogCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqY21kX2NvbXBsZXRpb247Ci0JdTMyICpjbWRfc3RhdHVzOwogCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldjsKLQl1bmlvbiB4aGNpX3RyYiAqY21kX3RyYjsKKworCWlmICghY29tbWFuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCXZpcnRfZGV2ID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXTsKIAotCWlmIChjb21tYW5kKQotCQlpbl9jdHggPSBjb21tYW5kLT5pbl9jdHg7Ci0JZWxzZQotCQlpbl9jdHggPSB2aXJ0X2Rldi0+aW5fY3R4OwotCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgaW5fY3R4KTsKKwljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIGNvbW1hbmQtPmluX2N0eCk7CiAJaWYgKCFjdHJsX2N0eCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCXhoY2lfd2Fybih4aGNpLCAiJXM6IENvdWxkIG5vdCBnZXQgaW5wdXQgY29udGV4dCwgYmFkIHR5cGUuXG4iLApAQCAtMjYwNyw3ICsyNjI3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmICgoeGhjaS0+cXVpcmtzICYgWEhDSV9TV19CV19DSEVDS0lORykgJiYKLQkJCXhoY2lfcmVzZXJ2ZV9iYW5kd2lkdGgoeGhjaSwgdmlydF9kZXYsIGluX2N0eCkpIHsKKwkgICAgeGhjaV9yZXNlcnZlX2JhbmR3aWR0aCh4aGNpLCB2aXJ0X2RldiwgY29tbWFuZC0+aW5fY3R4KSkgewogCQlpZiAoKHhoY2ktPnF1aXJrcyAmIFhIQ0lfRVBfTElNSVRfUVVJUkspKQogCQkJeGhjaV9mcmVlX2hvc3RfcmVzb3VyY2VzKHhoY2ksIGN0cmxfY3R4KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMjYxNSwyNyArMjYzNSwxNSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoY29tbWFuZCkgewotCQljbWRfY29tcGxldGlvbiA9IGNvbW1hbmQtPmNvbXBsZXRpb247Ci0JCWNtZF9zdGF0dXMgPSAmY29tbWFuZC0+c3RhdHVzOwotCQljb21tYW5kLT5jb21tYW5kX3RyYiA9IHhoY2lfZmluZF9uZXh0X2VucXVldWUoeGhjaS0+Y21kX3JpbmcpOwotCQlsaXN0X2FkZF90YWlsKCZjb21tYW5kLT5jbWRfbGlzdCwgJnZpcnRfZGV2LT5jbWRfbGlzdCk7Ci0JfSBlbHNlIHsKLQkJY21kX2NvbXBsZXRpb24gPSAmdmlydF9kZXYtPmNtZF9jb21wbGV0aW9uOwotCQljbWRfc3RhdHVzID0gJnZpcnRfZGV2LT5jbWRfc3RhdHVzOwotCX0KLQlpbml0X2NvbXBsZXRpb24oY21kX2NvbXBsZXRpb24pOwotCi0JY21kX3RyYiA9IHhoY2lfZmluZF9uZXh0X2VucXVldWUoeGhjaS0+Y21kX3JpbmcpOwogCWlmICghY3R4X2NoYW5nZSkKLQkJcmV0ID0geGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgaW5fY3R4LT5kbWEsCisJCXJldCA9IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHhoY2ksIGNvbW1hbmQsCisJCQkJY29tbWFuZC0+aW5fY3R4LT5kbWEsCiAJCQkJdWRldi0+c2xvdF9pZCwgbXVzdF9zdWNjZWVkKTsKIAllbHNlCi0JCXJldCA9IHhoY2lfcXVldWVfZXZhbHVhdGVfY29udGV4dCh4aGNpLCBpbl9jdHgtPmRtYSwKKwkJcmV0ID0geGhjaV9xdWV1ZV9ldmFsdWF0ZV9jb250ZXh0KHhoY2ksIGNvbW1hbmQsCisJCQkJY29tbWFuZC0+aW5fY3R4LT5kbWEsCiAJCQkJdWRldi0+c2xvdF9pZCwgbXVzdF9zdWNjZWVkKTsKIAlpZiAocmV0IDwgMCkgewotCQlpZiAoY29tbWFuZCkKLQkJCWxpc3RfZGVsKCZjb21tYW5kLT5jbWRfbGlzdCk7CiAJCWlmICgoeGhjaS0+cXVpcmtzICYgWEhDSV9FUF9MSU1JVF9RVUlSSykpCiAJCQl4aGNpX2ZyZWVfaG9zdF9yZXNvdXJjZXMoeGhjaSwgY3RybF9jdHgpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CkBAIC0yNjQ3LDI2ICsyNjU1LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCiAJLyogV2FpdCBmb3IgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCWNtZF9jb21wbGV0aW9uLAotCQkJWEhDSV9DTURfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAodGltZWxlZnQgPD0gMCkgewotCQl4aGNpX3dhcm4oeGhjaSwgIiVzIHdoaWxlIHdhaXRpbmcgZm9yICVzIGNvbW1hbmRcbiIsCi0JCQkJdGltZWxlZnQgPT0gMCA/ICJUaW1lb3V0IiA6ICJTaWduYWwiLAotCQkJCWN0eF9jaGFuZ2UgPT0gMCA/Ci0JCQkJCSJjb25maWd1cmUgZW5kcG9pbnQiIDoKLQkJCQkJImV2YWx1YXRlIGNvbnRleHQiKTsKLQkJLyogY2FuY2VsIHRoZSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCAqLwotCQlyZXQgPSB4aGNpX2NhbmNlbF9jbWQoeGhjaSwgY29tbWFuZCwgY21kX3RyYik7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJcmV0dXJuIC1FVElNRTsKLQl9CisJd2FpdF9mb3JfY29tcGxldGlvbihjb21tYW5kLT5jb21wbGV0aW9uKTsKIAogCWlmICghY3R4X2NoYW5nZSkKLQkJcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnRfcmVzdWx0KHhoY2ksIHVkZXYsIGNtZF9zdGF0dXMpOworCQlyZXQgPSB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludF9yZXN1bHQoeGhjaSwgdWRldiwKKwkJCQkJCSAgICAgJmNvbW1hbmQtPnN0YXR1cyk7CiAJZWxzZQotCQlyZXQgPSB4aGNpX2V2YWx1YXRlX2NvbnRleHRfcmVzdWx0KHhoY2ksIHVkZXYsIGNtZF9zdGF0dXMpOworCQlyZXQgPSB4aGNpX2V2YWx1YXRlX2NvbnRleHRfcmVzdWx0KHhoY2ksIHVkZXYsCisJCQkJCQkgICAmY29tbWFuZC0+c3RhdHVzKTsKIAogCWlmICgoeGhjaS0+cXVpcmtzICYgWEhDSV9FUF9MSU1JVF9RVUlSSykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKQEAgLTI3MTQsNiArMjcxMCw3IEBACiAJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UJKnZpcnRfZGV2OwogCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKIAlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHg7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKIAogCXJldCA9IHhoY2lfY2hlY2tfYXJncyhoY2QsIHVkZXYsIE5VTEwsIDAsIHRydWUsIF9fZnVuY19fKTsKIAlpZiAocmV0IDw9IDApCkBAIC0yNzI1LDEyICsyNzIyLDE5IEBACiAJeGhjaV9kYmcoeGhjaSwgIiVzIGNhbGxlZCBmb3IgdWRldiAlcFxuIiwgX19mdW5jX18sIHVkZXYpOwogCXZpcnRfZGV2ID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXTsKIAorCWNvbW1hbmQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIHRydWUsIEdGUF9LRVJORUwpOworCWlmICghY29tbWFuZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb21tYW5kLT5pbl9jdHggPSB2aXJ0X2Rldi0+aW5fY3R4OworCiAJLyogU2VlIHNlY3Rpb24gNC42LjYgLSBBMCA9IDE7IEExID0gRDAgPSBEMSA9IDAgKi8KLQljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgpOworCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgY29tbWFuZC0+aW5fY3R4KTsKIAlpZiAoIWN0cmxfY3R4KSB7CiAJCXhoY2lfd2Fybih4aGNpLCAiJXM6IENvdWxkIG5vdCBnZXQgaW5wdXQgY29udGV4dCwgYmFkIHR5cGUuXG4iLAogCQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY29tbWFuZF9jbGVhbnVwOwogCX0KIAljdHJsX2N0eC0+YWRkX2ZsYWdzIHw9IGNwdV90b19sZTMyKFNMT1RfRkxBRyk7CiAJY3RybF9jdHgtPmFkZF9mbGFncyAmPSBjcHVfdG9fbGUzMih+RVAwX0ZMQUcpOwpAQCAtMjczOCwyMCArMjc0MiwyMCBAQAogCiAJLyogRG9uJ3QgaXNzdWUgdGhlIGNvbW1hbmQgaWYgdGhlcmUncyBubyBlbmRwb2ludHMgdG8gdXBkYXRlLiAqLwogCWlmIChjdHJsX2N0eC0+YWRkX2ZsYWdzID09IGNwdV90b19sZTMyKFNMT1RfRkxBRykgJiYKLQkJCWN0cmxfY3R4LT5kcm9wX2ZsYWdzID09IDApCi0JCXJldHVybiAwOwotCisJICAgIGN0cmxfY3R4LT5kcm9wX2ZsYWdzID09IDApIHsKKwkJcmV0ID0gMDsKKwkJZ290byBjb21tYW5kX2NsZWFudXA7CisJfQogCXhoY2lfZGJnKHhoY2ksICJOZXcgSW5wdXQgQ29udHJvbCBDb250ZXh0OlxuIik7CiAJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCB2aXJ0X2Rldi0+aW5fY3R4KTsKIAl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPmluX2N0eCwKIAkJICAgICBMQVNUX0NUWF9UT19FUF9OVU0obGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9pbmZvKSkpOwogCi0JcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgdWRldiwgTlVMTCwKKwlyZXQgPSB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludCh4aGNpLCB1ZGV2LCBjb21tYW5kLAogCQkJZmFsc2UsIGZhbHNlKTsKLQlpZiAocmV0KSB7CisJaWYgKHJldCkKIAkJLyogQ2FsbGVlIHNob3VsZCBjYWxsIHJlc2V0X2JhbmR3aWR0aCgpICovCi0JCXJldHVybiByZXQ7Ci0JfQorCQlnb3RvIGNvbW1hbmRfY2xlYW51cDsKIAogCXhoY2lfZGJnKHhoY2ksICJPdXRwdXQgY29udGV4dCBhZnRlciBzdWNjZXNzZnVsIGNvbmZpZyBlcCBjbWQ6XG4iKTsKIAl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgsCkBAIC0yNzgzLDYgKzI3ODcsOSBAQAogCQl2aXJ0X2Rldi0+ZXBzW2ldLnJpbmcgPSB2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nOwogCQl2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nID0gTlVMTDsKIAl9Citjb21tYW5kX2NsZWFudXA6CisJa2ZyZWUoY29tbWFuZC0+Y29tcGxldGlvbik7CisJa2ZyZWUoY29tbWFuZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjg4NCw5ICsyODkxLDE0IEBACiAJICogaXNzdWUgYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCBsYXRlci4KIAkgKi8KIAlpZiAoISh4aGNpLT5xdWlya3MgJiBYSENJX1JFU0VUX0VQX1FVSVJLKSkgeworCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOworCQkvKiBDYW4ndCBzbGVlcCBpZiB3ZSdyZSBjYWxsZWQgZnJvbSBjbGVhbnVwX2hhbHRlZF9lbmRwb2ludCgpICovCisJCWNvbW1hbmQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIGZhbHNlLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFjb21tYW5kKQorCQkJcmV0dXJuOwogCQl4aGNpX2RiZ190cmFjZSh4aGNpLCB0cmFjZV94aGNpX2RiZ19yZXNldF9lcCwKIAkJCQkiUXVldWVpbmcgbmV3IGRlcXVldWUgc3RhdGUiKTsKLQkJeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLCB1ZGV2LT5zbG90X2lkLAorCQl4aGNpX3F1ZXVlX25ld19kZXF1ZXVlX3N0YXRlKHhoY2ksIGNvbW1hbmQsIHVkZXYtPnNsb3RfaWQsCiAJCQkJZXBfaW5kZXgsIGVwLT5zdG9wcGVkX3N0cmVhbSwgJmRlcV9zdGF0ZSk7CiAJfSBlbHNlIHsKIAkJLyogQmV0dGVyIGhvcGUgbm8gb25lIHVzZXMgdGhlIGlucHV0IGNvbnRleHQgYmV0d2VlbiBub3cgYW5kIHRoZQpAQCAtMjkxNyw2ICsyOTI5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAJc3RydWN0IHhoY2lfdmlydF9lcCAqdmlydF9lcDsKKwlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOwogCiAJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CiAJdWRldiA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKSBlcC0+aGNwcml2OwpAQCAtMjkzOSwxMCArMjk1MiwxNCBAQAogCQlyZXR1cm47CiAJfQogCisJY29tbWFuZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCBmYWxzZSwgZmFsc2UsIEdGUF9BVE9NSUMpOworCWlmICghY29tbWFuZCkKKwkJcmV0dXJuOworCiAJeGhjaV9kYmdfdHJhY2UoeGhjaSwgdHJhY2VfeGhjaV9kYmdfcmVzZXRfZXAsCiAJCQkiUXVldWVpbmcgcmVzZXQgZW5kcG9pbnQgY29tbWFuZCIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0geGhjaV9xdWV1ZV9yZXNldF9lcCh4aGNpLCB1ZGV2LT5zbG90X2lkLCBlcF9pbmRleCk7CisJcmV0ID0geGhjaV9xdWV1ZV9yZXNldF9lcCh4aGNpLCBjb21tYW5kLCB1ZGV2LT5zbG90X2lkLCBlcF9pbmRleCk7CiAJLyoKIAkgKiBDYW4ndCBjaGFuZ2UgdGhlIHJpbmcgZGVxdWV1ZSBwb2ludGVyIHVudGlsIGl0J3MgdHJhbnNpdGlvbmVkIHRvIHRoZQogCSAqIHN0b3BwZWQgc3RhdGUsIHdoaWNoIGlzIG9ubHkgdXBvbiBhIHN1Y2Nlc3NmdWwgcmVzZXQgZW5kcG9pbnQKQEAgLTM0MTYsNyArMzQzMyw2IEBACiAJdW5zaWduZWQgaW50IHNsb3RfaWQ7CiAJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2OwogCXN0cnVjdCB4aGNpX2NvbW1hbmQgKnJlc2V0X2RldmljZV9jbWQ7Ci0JaW50IHRpbWVsZWZ0OwogCWludCBsYXN0X2ZyZWVkX2VuZHBvaW50OwogCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eDsKIAlpbnQgb2xkX2FjdGl2ZV9lcHMgPSAwOwpAQCAtMzQ3MywxMyArMzQ4OSwxMCBAQAogCiAJLyogQXR0ZW1wdCB0byBzdWJtaXQgdGhlIFJlc2V0IERldmljZSBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHJpbmcgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCXJlc2V0X2RldmljZV9jbWQtPmNvbW1hbmRfdHJiID0geGhjaV9maW5kX25leHRfZW5xdWV1ZSh4aGNpLT5jbWRfcmluZyk7CiAKLQlsaXN0X2FkZF90YWlsKCZyZXNldF9kZXZpY2VfY21kLT5jbWRfbGlzdCwgJnZpcnRfZGV2LT5jbWRfbGlzdCk7Ci0JcmV0ID0geGhjaV9xdWV1ZV9yZXNldF9kZXZpY2UoeGhjaSwgc2xvdF9pZCk7CisJcmV0ID0geGhjaV9xdWV1ZV9yZXNldF9kZXZpY2UoeGhjaSwgcmVzZXRfZGV2aWNlX2NtZCwgc2xvdF9pZCk7CiAJaWYgKHJldCkgewogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUU6IGFsbG9jYXRlIGEgY29tbWFuZCByaW5nIHNlZ21lbnRcbiIpOwotCQlsaXN0X2RlbCgmcmVzZXRfZGV2aWNlX2NtZC0+Y21kX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gY29tbWFuZF9jbGVhbnVwOwogCX0KQEAgLTM0ODcsMjIgKzM1MDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAogCS8qIFdhaXQgZm9yIHRoZSBSZXNldCBEZXZpY2UgY29tbWFuZCB0byBmaW5pc2ggKi8KLQl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAotCQkJcmVzZXRfZGV2aWNlX2NtZC0+Y29tcGxldGlvbiwKLQkJCVhIQ0lfQ01EX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKHRpbWVsZWZ0IDw9IDApIHsKLQkJeGhjaV93YXJuKHhoY2ksICIlcyB3aGlsZSB3YWl0aW5nIGZvciByZXNldCBkZXZpY2UgY29tbWFuZFxuIiwKLQkJCQl0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCQkvKiBUaGUgdGltZW91dCBtaWdodCBoYXZlIHJhY2VkIHdpdGggdGhlIGV2ZW50IHJpbmcgaGFuZGxlciwgc28KLQkJICogb25seSBkZWxldGUgZnJvbSB0aGUgbGlzdCBpZiB0aGUgaXRlbSBpc24ndCBwb2lzb25lZC4KLQkJICovCi0JCWlmIChyZXNldF9kZXZpY2VfY21kLT5jbWRfbGlzdC5uZXh0ICE9IExJU1RfUE9JU09OMSkKLQkJCWxpc3RfZGVsKCZyZXNldF9kZXZpY2VfY21kLT5jbWRfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQkJcmV0ID0gLUVUSU1FOwotCQlnb3RvIGNvbW1hbmRfY2xlYW51cDsKLQl9CisJd2FpdF9mb3JfY29tcGxldGlvbihyZXNldF9kZXZpY2VfY21kLT5jb21wbGV0aW9uKTsKIAogCS8qIFRoZSBSZXNldCBEZXZpY2UgY29tbWFuZCBjYW4ndCBmYWlsLCBhY2NvcmRpbmcgdG8gdGhlIDAuOTUvMC45NiBzcGVjLAogCSAqIHVubGVzcyB3ZSB0cmllZCB0byByZXNldCBhIHNsb3QgSUQgdGhhdCB3YXNuJ3QgZW5hYmxlZCwKQEAgLTM1MTAsNiArMzUwOCwxMSBAQAogCSAqLwogCXJldCA9IHJlc2V0X2RldmljZV9jbWQtPnN0YXR1czsKIAlzd2l0Y2ggKHJldCkgeworCWNhc2UgQ09NUF9DTURfQUJPUlQ6CisJY2FzZSBDT01QX0NNRF9TVE9QOgorCQl4aGNpX3dhcm4oeGhjaSwgIlRpbWVvdXQgd2FpdGluZyBmb3IgcmVzZXQgZGV2aWNlIGNvbW1hbmRcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJCWdvdG8gY29tbWFuZF9jbGVhbnVwOwogCWNhc2UgQ09NUF9FQkFEU0xUOiAvKiAwLjk1IGNvbXBsZXRpb24gY29kZSBmb3IgYmFkIHNsb3QgSUQgKi8KIAljYXNlIENPTVBfQ1RYX1NUQVRFOiAvKiAwLjk2IGNvbXBsZXRpb24gY29kZSBmb3Igc2FtZSB0aGluZyAqLwogCQl4aGNpX2RiZyh4aGNpLCAiQ2FuJ3QgcmVzZXQgZGV2aWNlIChzbG90IElEICV1KSBpbiAlcyBzdGF0ZVxuIiwKQEAgLTM1ODksNiArMzU5MiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHN0YXRlOwogCWludCBpLCByZXQ7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKKworCWNvbW1hbmQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIGZhbHNlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbW1hbmQpCisJCXJldHVybjsKIAogI2lmbmRlZiBDT05GSUdfVVNCX0RFRkFVTFRfUEVSU0lTVAogCS8qCkBAIC0zNjA0LDggKzM2MTIsMTAgQEAKIAkvKiBJZiB0aGUgaG9zdCBpcyBoYWx0ZWQgZHVlIHRvIGRyaXZlciB1bmxvYWQsIHdlIHN0aWxsIG5lZWQgdG8gZnJlZSB0aGUKIAkgKiBkZXZpY2UuCiAJICovCi0JaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRU5PREVWKQorCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVOT0RFVikgeworCQlrZnJlZShjb21tYW5kKTsKIAkJcmV0dXJuOworCX0KIAogCXZpcnRfZGV2ID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXTsKIApAQCAtMzYyMiwxNiArMzYzMiwxOSBAQAogCQkJKHhoY2ktPnhoY19zdGF0ZSAmIFhIQ0lfU1RBVEVfSEFMVEVEKSkgewogCQl4aGNpX2ZyZWVfdmlydF9kZXZpY2UoeGhjaSwgdWRldi0+c2xvdF9pZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJa2ZyZWUoY29tbWFuZCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woeGhjaSwgVFJCX0RJU0FCTEVfU0xPVCwgdWRldi0+c2xvdF9pZCkpIHsKKwlpZiAoeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woeGhjaSwgY29tbWFuZCwgVFJCX0RJU0FCTEVfU0xPVCwKKwkJCQkgICAgdWRldi0+c2xvdF9pZCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUU6IGFsbG9jYXRlIGEgY29tbWFuZCByaW5nIHNlZ21lbnRcbiIpOwogCQlyZXR1cm47CiAJfQogCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCiAJLyoKIAkgKiBFdmVudCBjb21tYW5kIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIGZyZWUgYW55IGRhdGEgc3RydWN0dXJlcwogCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2xvdC4gIFhYWCBDYW4gZnJlZSBzbGVlcD8KQEAgLTM2NjksMzMgKzM2ODIsMzMgQEAKIHsKIAlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHRpbWVsZWZ0OwogCWludCByZXQ7Ci0JdW5pb24geGhjaV90cmIgKmNtZF90cmI7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKKworCWNvbW1hbmQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgZmFsc2UsIGZhbHNlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbW1hbmQpCisJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQljbWRfdHJiID0geGhjaV9maW5kX25leHRfZW5xdWV1ZSh4aGNpLT5jbWRfcmluZyk7Ci0JcmV0ID0geGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woeGhjaSwgVFJCX0VOQUJMRV9TTE9ULCAwKTsKKwljb21tYW5kLT5jb21wbGV0aW9uID0gJnhoY2ktPmFkZHJfZGV2OworCXJldCA9IHhoY2lfcXVldWVfc2xvdF9jb250cm9sKHhoY2ksIGNvbW1hbmQsIFRSQl9FTkFCTEVfU0xPVCwgMCk7CiAJaWYgKHJldCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCXhoY2lfZGJnKHhoY2ksICJGSVhNRTogYWxsb2NhdGUgYSBjb21tYW5kIHJpbmcgc2VnbWVudFxuIik7CisJCWtmcmVlKGNvbW1hbmQpOwogCQlyZXR1cm4gMDsKIAl9CiAJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBYWFg6IGhvdyBtdWNoIHRpbWUgZm9yIHhIQyBzbG90IGFzc2lnbm1lbnQ/ICovCi0JdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmeGhjaS0+YWRkcl9kZXYsCi0JCQlYSENJX0NNRF9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICh0aW1lbGVmdCA8PSAwKSB7Ci0JCXhoY2lfd2Fybih4aGNpLCAiJXMgd2hpbGUgd2FpdGluZyBmb3IgYSBzbG90XG4iLAotCQkJCXRpbWVsZWZ0ID09IDAgPyAiVGltZW91dCIgOiAiU2lnbmFsIik7Ci0JCS8qIGNhbmNlbCB0aGUgZW5hYmxlIHNsb3QgcmVxdWVzdCAqLwotCQlyZXR1cm4geGhjaV9jYW5jZWxfY21kKHhoY2ksIE5VTEwsIGNtZF90cmIpOwotCX0KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKGNvbW1hbmQtPmNvbXBsZXRpb24pOwogCi0JaWYgKCF4aGNpLT5zbG90X2lkKSB7CisJaWYgKCF4aGNpLT5zbG90X2lkIHx8IGNvbW1hbmQtPnN0YXR1cyAhPSBDT01QX1NVQ0NFU1MpIHsKIAkJeGhjaV9lcnIoeGhjaSwgIkVycm9yIHdoaWxlIGFzc2lnbmluZyBkZXZpY2Ugc2xvdCBJRFxuIik7CisJCXhoY2lfZXJyKHhoY2ksICJNYXggbnVtYmVyIG9mIGRldmljZXMgdGhpcyB4SENJIGhvc3Qgc3VwcG9ydHMgaXMgJXUuXG4iLAorCQkJCUhDU19NQVhfU0xPVFMoCisJCQkJCXJlYWRsKCZ4aGNpLT5jYXBfcmVncy0+aGNzX3BhcmFtczEpKSk7CisJCWtmcmVlKGNvbW1hbmQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM3MzAsNiArMzc0Myw4IEBACiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKICNlbmRpZgogCisKKwlrZnJlZShjb21tYW5kKTsKIAkvKiBJcyB0aGlzIGEgTFMgb3IgRlMgZGV2aWNlIHVuZGVyIGEgSFMgaHViPyAqLwogCS8qIEh1YiBvciBwZXJpcGhlcmlhbD8gKi8KIAlyZXR1cm4gMTsKQEAgLTM3MzcsNyArMzc1MiwxMCBAQAogZGlzYWJsZV9zbG90OgogCS8qIERpc2FibGUgc2xvdCwgaWYgd2UgY2FuIGRvIGl0IHdpdGhvdXQgbWVtIGFsbG9jICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXhoY2lfcXVldWVfc2xvdF9jb250cm9sKHhoY2ksIFRSQl9ESVNBQkxFX1NMT1QsIHVkZXYtPnNsb3RfaWQpKQorCWNvbW1hbmQtPmNvbXBsZXRpb24gPSBOVUxMOworCWNvbW1hbmQtPnN0YXR1cyA9IDA7CisJaWYgKCF4aGNpX3F1ZXVlX3Nsb3RfY29udHJvbCh4aGNpLCBjb21tYW5kLCBUUkJfRElTQUJMRV9TTE9ULAorCQkJCSAgICAgdWRldi0+c2xvdF9pZCkpCiAJCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMzc1NCwxNCArMzc3MiwxMyBAQAogewogCWNvbnN0IGNoYXIgKmFjdCA9IHNldHVwID09IFNFVFVQX0NPTlRFWFRfT05MWSA/ICJjb250ZXh0IiA6ICJhZGRyZXNzIjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB0aW1lbGVmdDsKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXY7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHg7CiAJc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9jdHggKmN0cmxfY3R4OwogCXU2NCB0ZW1wXzY0OwotCXVuaW9uIHhoY2lfdHJiICpjbWRfdHJiOworCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQ7CiAKIAlpZiAoIXVkZXYtPnNsb3RfaWQpIHsKIAkJeGhjaV9kYmdfdHJhY2UoeGhjaSwgdHJhY2VfeGhjaV9kYmdfYWRkcmVzcywKQEAgLTM3ODIsMTEgKzM3OTksMTkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJY29tbWFuZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCBmYWxzZSwgZmFsc2UsIEdGUF9LRVJORUwpOworCWlmICghY29tbWFuZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb21tYW5kLT5pbl9jdHggPSB2aXJ0X2Rldi0+aW5fY3R4OworCWNvbW1hbmQtPmNvbXBsZXRpb24gPSAmeGhjaS0+YWRkcl9kZXY7CisKIAlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgpOwogCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwgdmlydF9kZXYtPmluX2N0eCk7CiAJaWYgKCFjdHJsX2N0eCkgewogCQl4aGNpX3dhcm4oeGhjaSwgIiVzOiBDb3VsZCBub3QgZ2V0IGlucHV0IGNvbnRleHQsIGJhZCB0eXBlLlxuIiwKIAkJCQlfX2Z1bmNfXyk7CisJCWtmcmVlKGNvbW1hbmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyoKQEAgLTM4MDgsMzYgKzM4MzMsMzEgQEAKIAkJCQlsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X2luZm8pID4+IDI3KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7Ci0JY21kX3RyYiA9IHhoY2lfZmluZF9uZXh0X2VucXVldWUoeGhjaS0+Y21kX3JpbmcpOwotCXJldCA9IHhoY2lfcXVldWVfYWRkcmVzc19kZXZpY2UoeGhjaSwgdmlydF9kZXYtPmluX2N0eC0+ZG1hLAorCXJldCA9IHhoY2lfcXVldWVfYWRkcmVzc19kZXZpY2UoeGhjaSwgY29tbWFuZCwgdmlydF9kZXYtPmluX2N0eC0+ZG1hLAogCQkJCQl1ZGV2LT5zbG90X2lkLCBzZXR1cCk7CiAJaWYgKHJldCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCXhoY2lfZGJnX3RyYWNlKHhoY2ksIHRyYWNlX3hoY2lfZGJnX2FkZHJlc3MsCiAJCQkJIkZJWE1FOiBhbGxvY2F0ZSBhIGNvbW1hbmQgcmluZyBzZWdtZW50Iik7CisJCWtmcmVlKGNvbW1hbmQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAl4aGNpX3JpbmdfY21kX2RiKHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAogCS8qIGN0cmwgdHggY2FuIHRha2UgdXAgdG8gNSBzZWM7IFhYWDogbmVlZCBtb3JlIHRpbWUgZm9yIHhIQz8gKi8KLQl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZ4aGNpLT5hZGRyX2RldiwKLQkJCVhIQ0lfQ01EX0RFRkFVTFRfVElNRU9VVCk7CisJd2FpdF9mb3JfY29tcGxldGlvbihjb21tYW5kLT5jb21wbGV0aW9uKTsKKwogCS8qIEZJWE1FOiBGcm9tIHNlY3Rpb24gNC4zLjQ6ICJTb2Z0d2FyZSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgdGltaW5nCiAJICogdGhlIFNldEFkZHJlc3MoKSAicmVjb3ZlcnkgaW50ZXJ2YWwiIHJlcXVpcmVkIGJ5IFVTQiBhbmQgYWJvcnRpbmcgdGhlCiAJICogY29tbWFuZCBvbiBhIHRpbWVvdXQuCiAJICovCi0JaWYgKHRpbWVsZWZ0IDw9IDApIHsKLQkJeGhjaV93YXJuKHhoY2ksICIlcyB3aGlsZSB3YWl0aW5nIGZvciBzZXR1cCAlcyBjb21tYW5kXG4iLAotCQkJICB0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIsIGFjdCk7Ci0JCS8qIGNhbmNlbCB0aGUgYWRkcmVzcyBkZXZpY2UgY29tbWFuZCAqLwotCQlyZXQgPSB4aGNpX2NhbmNlbF9jbWQoeGhjaSwgTlVMTCwgY21kX3RyYik7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJcmV0dXJuIC1FVElNRTsKLQl9Ci0KLQlzd2l0Y2ggKHZpcnRfZGV2LT5jbWRfc3RhdHVzKSB7CisJc3dpdGNoIChjb21tYW5kLT5zdGF0dXMpIHsKKwljYXNlIENPTVBfQ01EX0FCT1JUOgorCWNhc2UgQ09NUF9DTURfU1RPUDoKKwkJeGhjaV93YXJuKHhoY2ksICJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHNldHVwIGRldmljZSBjb21tYW5kXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlicmVhazsKIAljYXNlIENPTVBfQ1RYX1NUQVRFOgogCWNhc2UgQ09NUF9FQkFEU0xUOgogCQl4aGNpX2Vycih4aGNpLCAiU2V0dXAgRVJST1I6IHNldHVwICVzIGNvbW1hbmQgZm9yIHNsb3QgJWQuXG4iLApAQCAtMzg2MCw3ICszODgwLDcgQEAKIAlkZWZhdWx0OgogCQl4aGNpX2Vycih4aGNpLAogCQkJICJFUlJPUjogdW5leHBlY3RlZCBzZXR1cCAlcyBjb21tYW5kIGNvbXBsZXRpb24gY29kZSAweCV4LlxuIiwKLQkJCSBhY3QsIHZpcnRfZGV2LT5jbWRfc3RhdHVzKTsKKwkJCSBhY3QsIGNvbW1hbmQtPnN0YXR1cyk7CiAJCXhoY2lfZGJnKHhoY2ksICJTbG90IElEICVkIE91dHB1dCBDb250ZXh0OlxuIiwgdWRldi0+c2xvdF9pZCk7CiAJCXhoY2lfZGJnX2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCwgMik7CiAJCXRyYWNlX3hoY2lfYWRkcmVzc19jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgsIDEpOwpAQCAtMzg2OCw2ICszODg4LDcgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChyZXQpIHsKKwkJa2ZyZWUoY29tbWFuZCk7CiAJCXJldHVybiByZXQ7CiAJfQogCXRlbXBfNjQgPSB4aGNpX3JlYWRfNjQoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPmRjYmFhX3B0cik7CkBAIC0zOTAyLDcgKzM5MjMsNyBAQAogCXhoY2lfZGJnX3RyYWNlKHhoY2ksIHRyYWNlX3hoY2lfZGJnX2FkZHJlc3MsCiAJCSAgICAgICAiSW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgPSAlZCIsCiAJCSAgICAgICBsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X3N0YXRlKSAmIERFVl9BRERSX01BU0spOwotCisJa2ZyZWUoY29tbWFuZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwOTIsNyArNDExMyw3IEBACiAJZmllbGQgPSBsZTMyX3RvX2NwdSh1ZGV2LT5ib3MtPmV4dF9jYXAtPmJtQXR0cmlidXRlcyk7CiAKIAl4aGNpX2RiZyh4aGNpLCAiJXMgcG9ydCAlZCBVU0IyIGhhcmR3YXJlIExQTVxuIiwKLQkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLCBwb3J0X251bSk7CisJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwgcG9ydF9udW0gKyAxKTsKIAogCWlmIChlbmFibGUpIHsKIAkJLyogSG9zdCBzdXBwb3J0cyBCRVNMIHRpbWVvdXQgaW5zdGVhZCBvZiBISVJEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCmluZGV4IDQ3NDY4MTYuLjlmZmVjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC05MzcsOSArOTM3LDYgQEAKICNkZWZpbmUJWEhDSV9NQVhfUklOR1NfQ0FDSEVECTMxCiAJc3RydWN0IHhoY2lfdmlydF9lcAkJZXBzWzMxXTsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJY21kX2NvbXBsZXRpb247Ci0JLyogU3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgaXNzdWVkIGZvciB0aGlzIGRldmljZSAqLwotCXUzMgkJCQljbWRfc3RhdHVzOwotCXN0cnVjdCBsaXN0X2hlYWQJCWNtZF9saXN0OwogCXU4CQkJCWZha2VfcG9ydDsKIAl1OAkJCQlyZWFsX3BvcnQ7CiAJc3RydWN0IHhoY2lfaW50ZXJ2YWxfYndfdGFibGUJKmJ3X3RhYmxlOwpAQCAtMTI5OCw3ICsxMjk1LDYgQEAKIAogLyogY29tbWFuZCBkZXNjcmlwdG9yICovCiBzdHJ1Y3QgeGhjaV9jZCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAljYW5jZWxfY21kX2xpc3Q7CiAJc3RydWN0IHhoY2lfY29tbWFuZAkqY29tbWFuZDsKIAl1bmlvbiB4aGNpX3RyYgkJKmNtZF90cmI7CiB9OwpAQCAtMTQ3Niw2ICsxNDcyLDggQEAKIAkvKiBtc2kteCB2ZWN0b3JzICovCiAJaW50CQltc2l4X2NvdW50OwogCXN0cnVjdCBtc2l4X2VudHJ5CSptc2l4X2VudHJpZXM7CisJLyogb3B0aW9uYWwgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrCQkqY2xrOwogCS8qIGRhdGEgc3RydWN0dXJlcyAqLwogCXN0cnVjdCB4aGNpX2RldmljZV9jb250ZXh0X2FycmF5ICpkY2JhYTsKIAlzdHJ1Y3QgeGhjaV9yaW5nCSpjbWRfcmluZzsKQEAgLTE0ODMsOCArMTQ4MSwxMCBAQAogI2RlZmluZSBDTURfUklOR19TVEFURV9SVU5OSU5HICAgICAgICAgKDEgPDwgMCkKICNkZWZpbmUgQ01EX1JJTkdfU1RBVEVfQUJPUlRFRCAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIENNRF9SSU5HX1NUQVRFX1NUT1BQRUQgICAgICAgICAoMSA8PCAyKQotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGNhbmNlbF9jbWRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBjbWRfbGlzdDsKIAl1bnNpZ25lZCBpbnQJCWNtZF9yaW5nX3Jlc2VydmVkX3RyYnM7CisJc3RydWN0IHRpbWVyX2xpc3QJY21kX3RpbWVyOworCXN0cnVjdCB4aGNpX2NvbW1hbmQJKmN1cnJlbnRfY21kOwogCXN0cnVjdCB4aGNpX3JpbmcJKmV2ZW50X3Jpbmc7CiAJc3RydWN0IHhoY2lfZXJzdAllcnN0OwogCS8qIFNjcmF0Y2hwYWQgKi8KQEAgLTE3MzgsOCArMTczOCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgeGhjaV91bnJlZ2lzdGVyX3BjaSh2b2lkKSB7fQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfWEhDSV9QTEFURk9STSkgXAotCXx8IGRlZmluZWQoQ09ORklHX1VTQl9YSENJX1BMQVRGT1JNX01PRFVMRSkKKyNpZiBJU19FTkFCTEVEKENPTkZJR19VU0JfWEhDSV9QTEFURk9STSkKIGludCB4aGNpX3JlZ2lzdGVyX3BsYXQodm9pZCk7CiB2b2lkIHhoY2lfdW5yZWdpc3Rlcl9wbGF0KHZvaWQpOwogI2Vsc2UKQEAgLTE4MDgsMTMgKzE4MDcsMTQgQEAKIAkJZG1hX2FkZHJfdCBzdXNwZWN0X2RtYSk7CiBpbnQgeGhjaV9pc192ZW5kb3JfaW5mb19jb2RlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdW5zaWduZWQgaW50IHRyYl9jb21wX2NvZGUpOwogdm9pZCB4aGNpX3JpbmdfY21kX2RiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7Ci1pbnQgeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgdHJiX3R5cGUsIHUzMiBzbG90X2lkKTsKLWludCB4aGNpX3F1ZXVlX2FkZHJlc3NfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAotCQl1MzIgc2xvdF9pZCwgZW51bSB4aGNpX3NldHVwX2Rldik7Ci1pbnQgeGhjaV9xdWV1ZV92ZW5kb3JfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitpbnQgeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCXUzMiB0cmJfdHlwZSwgdTMyIHNsb3RfaWQpOworaW50IHhoY2lfcXVldWVfYWRkcmVzc19kZXZpY2Uoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCWRtYV9hZGRyX3QgaW5fY3R4X3B0ciwgdTMyIHNsb3RfaWQsIGVudW0geGhjaV9zZXR1cF9kZXYpOworaW50IHhoY2lfcXVldWVfdmVuZG9yX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCiAJCXUzMiBmaWVsZDEsIHUzMiBmaWVsZDIsIHUzMiBmaWVsZDMsIHUzMiBmaWVsZDQpOwotaW50IHhoY2lfcXVldWVfc3RvcF9lbmRwb2ludChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAotCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIGludCBzdXNwZW5kKTsKK2ludCB4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCWludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIGludCBzdXNwZW5kKTsKIGludCB4aGNpX3F1ZXVlX2N0cmxfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsIHN0cnVjdCB1cmIgKnVyYiwKIAkJaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCk7CiBpbnQgeGhjaV9xdWV1ZV9idWxrX3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgbWVtX2ZsYWdzLCBzdHJ1Y3QgdXJiICp1cmIsCkBAIC0xODIzLDE4ICsxODIzLDIxIEBACiAJCWludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwogaW50IHhoY2lfcXVldWVfaXNvY190eF9wcmVwYXJlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgbWVtX2ZsYWdzLAogCQlzdHJ1Y3QgdXJiICp1cmIsIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwotaW50IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAotCQl1MzIgc2xvdF9pZCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCk7Ci1pbnQgeGhjaV9xdWV1ZV9ldmFsdWF0ZV9jb250ZXh0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAotCQl1MzIgc2xvdF9pZCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCk7Ci1pbnQgeGhjaV9xdWV1ZV9yZXNldF9lcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAotCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwotaW50IHhoY2lfcXVldWVfcmVzZXRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdTMyIHNsb3RfaWQpOworaW50IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29tbWFuZCAqY21kLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsIHUzMiBzbG90X2lkLAorCQlib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKTsKK2ludCB4aGNpX3F1ZXVlX2V2YWx1YXRlX2NvbnRleHQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCWRtYV9hZGRyX3QgaW5fY3R4X3B0ciwgdTMyIHNsb3RfaWQsIGJvb2wgY29tbWFuZF9tdXN0X3N1Y2NlZWQpOworaW50IHhoY2lfcXVldWVfcmVzZXRfZXAoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjbWQsCisJCWludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOworaW50IHhoY2lfcXVldWVfcmVzZXRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29tbWFuZCAqY21kLAorCQl1MzIgc2xvdF9pZCk7CiB2b2lkIHhoY2lfZmluZF9uZXdfZGVxdWV1ZV9zdGF0ZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXVuc2lnbmVkIGludCBzdHJlYW1faWQsIHN0cnVjdCB4aGNpX3RkICpjdXJfdGQsCiAJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKnN0YXRlKTsKIHZvaWQgeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNtZCwKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJdW5zaWduZWQgaW50IHN0cmVhbV9pZCwKIAkJc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSAqZGVxX3N0YXRlKTsKQEAgLTE4NDQsMTEgKzE4NDcsMTEgQEAKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSAqZGVxX3N0YXRlKTsKIHZvaWQgeGhjaV9zdG9wX2VuZHBvaW50X2NvbW1hbmRfd2F0Y2hkb2codW5zaWduZWQgbG9uZyBhcmcpOwotaW50IHhoY2lfY2FuY2VsX2NtZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQsCi0JCXVuaW9uIHhoY2lfdHJiICpjbWRfdHJiKTsKK3ZvaWQgeGhjaV9oYW5kbGVfY29tbWFuZF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKIHZvaWQgeGhjaV9yaW5nX2VwX2Rvb3JiZWxsKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdW5zaWduZWQgaW50IHNsb3RfaWQsCiAJCXVuc2lnbmVkIGludCBlcF9pbmRleCwgdW5zaWduZWQgaW50IHN0cmVhbV9pZCk7Ci11bmlvbiB4aGNpX3RyYiAqeGhjaV9maW5kX25leHRfZW5xdWV1ZShzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKTsKK3ZvaWQgeGhjaV9jbGVhbnVwX2NvbW1hbmRfcXVldWUoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIAogLyogeEhDSSByb290aHViIGNvZGUgKi8KIHZvaWQgeGhjaV9zZXRfbGlua19zdGF0ZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIF9fbGUzMiBfX2lvbWVtICoqcG9ydF9hcnJheSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IGJhNmE1ZDYuLmIzZDI0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtODEsNiArODEsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlpbnQgYnV0dG9uX3ByZXNzZWQ7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtdXRleCBzeXNmc2xvY2s7CQkvKiBjb25jdXJyZW50IHJlYWQgYW5kIHdyaXRlICovCiB9OwogCiBzdGF0aWMgYXRvbWljX3QgY291bnRfZGlzcGxheXMgPSBBVE9NSUNfSU5JVCgwKTsKQEAgLTExMCw3ICsxMTEsNyBAQAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgotCQlkZXZfZGJnKGRldiwgIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZC9uIiwKKwkJZGV2X2RiZyhkZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCiAJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTE0NCw2ICsxNDUsNyBAQAogCXN0cnVjdCBhcHBsZWRpc3BsYXkgKnBkYXRhID0gYmxfZ2V0X2RhdGEoYmQpOwogCWludCByZXR2YWw7CiAKKwltdXRleF9sb2NrKCZwZGF0YS0+c3lzZnNsb2NrKTsKIAlwZGF0YS0+bXNnZGF0YVswXSA9IDB4MTA7CiAJcGRhdGEtPm1zZ2RhdGFbMV0gPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIApAQCAtMTU2LDE1ICsxNTgsMTcgQEAKIAkJMCwKIAkJcGRhdGEtPm1zZ2RhdGEsIDIsCiAJCUFDRF9VU0JfVElNRU9VVCk7Ci0KKwltdXRleF91bmxvY2soJnBkYXRhLT5zeXNmc2xvY2spOworCQogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgYXBwbGVkaXNwbGF5X2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlzdHJ1Y3QgYXBwbGVkaXNwbGF5ICpwZGF0YSA9IGJsX2dldF9kYXRhKGJkKTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwsIGJyaWdodG5lc3M7CiAKKwltdXRleF9sb2NrKCZwZGF0YS0+c3lzZnNsb2NrKTsKIAlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coCiAJCXBkYXRhLT51ZGV2LAogCQl1c2JfcmN2Y3RybHBpcGUocGRhdGEtPnVkZXYsIDApLApAQCAtMTc0LDExICsxNzgsMTMgQEAKIAkJMCwKIAkJcGRhdGEtPm1zZ2RhdGEsIDIsCiAJCUFDRF9VU0JfVElNRU9VVCk7CisJYnJpZ2h0bmVzcyA9IHBkYXRhLT5tc2dkYXRhWzFdOworCW11dGV4X3VubG9jaygmcGRhdGEtPnN5c2ZzbG9jayk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAllbHNlCi0JCXJldHVybiBwZGF0YS0+bXNnZGF0YVsxXTsKKwkJcmV0dXJuIGJyaWdodG5lc3M7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhcHBsZWRpc3BsYXlfYmxfZGF0YSA9IHsKQEAgLTI0MSw2ICsyNDcsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5sb2NrKTsKIAlJTklUX0RFTEFZRURfV09SSygmcGRhdGEtPndvcmssIGFwcGxlZGlzcGxheV93b3JrKTsKKwltdXRleF9pbml0KCZwZGF0YS0+c3lzZnNsb2NrKTsKIAogCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgY29udHJvbCBtZXNzYWdlcyAqLwogCXBkYXRhLT5tc2dkYXRhID0ga21hbGxvYyhBQ0RfTVNHX0JVRkZFUl9MRU4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggYTRhM2M3Yy4uOGFiMWY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC0xLDQwICsxLDQzIEBACiAvKgotKiBVU0IgRlRESSBjbGllbnQgZHJpdmVyIGZvciBFbGFuIERpZ2l0YWwgU3lzdGVtcydzIFV4eHggYWRhcHRlcnMKLSoKLSogQ29weXJpZ2h0KEMpIDIwMDYgRWxhbiBEaWdpdGFsIFN5c3RlbXMgTGltaXRlZAotKiBodHRwOi8vd3d3LmVsYW5kaWdpdGFsc3lzdGVtcy5jb20KLSoKLSogQXV0aG9yIGFuZCBNYWludGFpbmVyIC0gVG9ueSBPbGVjaCAtIEVsYW4gRGlnaXRhbCBTeXN0ZW1zCi0qIHRvbnkub2xlY2hAZWxhbmRpZ2l0YWxzeXN0ZW1zLmNvbQotKgotKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTt5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KLSoKLSoKLSogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgVG9ueSBPbGVjaCh0b255Lm9sZWNoQGVsYW5kaWdpdGFsc3lzdGVtcy5jb20pCi0qIGJhc2VkIG9uIHZhcmlvdXMgVVNCIGNsaWVudCBkcml2ZXJzIGluIHRoZSAyLjYuMTUgbGludXgga2VybmVsCi0qIHdpdGggY29uc3RhbnQgcmVmZXJlbmNlIHRvIHRoZSAzcmQgRWRpdGlvbiBvZiBMaW51eCBEZXZpY2UgRHJpdmVycwotKiBwdWJsaXNoZWQgYnkgTydSZWlsbHkKLSoKLSogVGhlIFUxMzIgYWRhcHRlciBpcyBhIFVTQiB0byBDYXJkQnVzIGFkYXB0ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkCi0qIGZvciBQQyBjYXJkcyB0aGF0IGNvbnRhaW4gYW4gT0hDSSBob3N0IGNvbnRyb2xsZXIuIFR5cGljYWwgUEMgY2FyZHMKLSogYXJlIHRoZSBPcmFuZ2UgTW9iaWxlIDNHIE9wdGlvbiBHbG9iZVRyb3R0ZXIgRnVzaW9uIGNhcmQuCi0qCi0qIFRoZSBVMTMyIGFkYXB0ZXIgd2lsbCAqTk9UICp3b3JrIHdpdGggUEMgY2FyZHMgdGhhdCBkbyBub3QgY29udGFpbgotKiBhbiBPSENJIGNvbnRyb2xsZXIuIEEgc2ltcGxlIHdheSB0byB0ZXN0IHdoZXRoZXIgYSBQQyBjYXJkIGhhcyBhbgotKiBPSENJIGNvbnRyb2xsZXIgYXMgYW4gaW50ZXJmYWNlIGlzIHRvIGluc2VydCB0aGUgUEMgY2FyZCBkaXJlY3RseQotKiBpbnRvIGEgbGFwdG9wKG9yIGRlc2t0b3ApIHdpdGggYSBDYXJkQnVzIHNsb3QgYW5kIGlmICJsc3BjaSIgc2hvd3MKLSogYSBuZXcgVVNCIGNvbnRyb2xsZXIgYW5kICJsc3VzYiAtdiIgc2hvd3MgYSBuZXcgT0hDSSBIb3N0IENvbnRyb2xsZXIKLSogdGhlbiB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoYXQgdGhlIFUxMzIgYWRhcHRlciB3aWxsIHN1cHBvcnQgdGhlCi0qIFBDIGNhcmQuKHlvdSBhbHNvIG5lZWQgdGhlIHNwZWNpZmljIGNsaWVudCBkcml2ZXIgZm9yIHRoZSBQQyBjYXJkKQotKgotKiBQbGVhc2UgaW5mb3JtIHRoZSBBdXRob3IgYW5kIE1haW50YWluZXIgYWJvdXQgYW55IFBDIGNhcmRzIHRoYXQKLSogY29udGFpbiBPSENJIEhvc3QgQ29udHJvbGxlciBhbmQgd29yayB3aGVuIGRpcmVjdGx5IGNvbm5lY3RlZCB0bwotKiBhbiBlbWJlZGRlZCBDYXJkQnVzIHNsb3QgYnV0IGRvIG5vdCB3b3JrIHdoZW4gdGhleSBhcmUgY29ubmVjdGVkCi0qIHZpYSBhbiBFTEFOIFUxMzIgYWRhcHRlci4KLSoKLSovCisgKiBVU0IgRlRESSBjbGllbnQgZHJpdmVyIGZvciBFbGFuIERpZ2l0YWwgU3lzdGVtcydzIFV4eHggYWRhcHRlcnMKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwNiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBMaW1pdGVkCisgKiBodHRwOi8vd3d3LmVsYW5kaWdpdGFsc3lzdGVtcy5jb20KKyAqCisgKiBBdXRob3IgYW5kIE1haW50YWluZXIgLSBUb255IE9sZWNoIC0gRWxhbiBEaWdpdGFsIFN5c3RlbXMKKyAqIHRvbnkub2xlY2hAZWxhbmRpZ2l0YWxzeXN0ZW1zLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlO3lvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIGJ5IFRvbnkgT2xlY2godG9ueS5vbGVjaEBlbGFuZGlnaXRhbHN5c3RlbXMuY29tKQorICogYmFzZWQgb24gdmFyaW91cyBVU0IgY2xpZW50IGRyaXZlcnMgaW4gdGhlIDIuNi4xNSBsaW51eCBrZXJuZWwKKyAqIHdpdGggY29uc3RhbnQgcmVmZXJlbmNlIHRvIHRoZSAzcmQgRWRpdGlvbiBvZiBMaW51eCBEZXZpY2UgRHJpdmVycworICogcHVibGlzaGVkIGJ5IE8nUmVpbGx5CisgKgorICogVGhlIFUxMzIgYWRhcHRlciBpcyBhIFVTQiB0byBDYXJkQnVzIGFkYXB0ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkCisgKiBmb3IgUEMgY2FyZHMgdGhhdCBjb250YWluIGFuIE9IQ0kgaG9zdCBjb250cm9sbGVyLiBUeXBpY2FsIFBDIGNhcmRzCisgKiBhcmUgdGhlIE9yYW5nZSBNb2JpbGUgM0cgT3B0aW9uIEdsb2JlVHJvdHRlciBGdXNpb24gY2FyZC4KKyAqCisgKiBUaGUgVTEzMiBhZGFwdGVyIHdpbGwgKk5PVCAqd29yayB3aXRoIFBDIGNhcmRzIHRoYXQgZG8gbm90IGNvbnRhaW4KKyAqIGFuIE9IQ0kgY29udHJvbGxlci4gQSBzaW1wbGUgd2F5IHRvIHRlc3Qgd2hldGhlciBhIFBDIGNhcmQgaGFzIGFuCisgKiBPSENJIGNvbnRyb2xsZXIgYXMgYW4gaW50ZXJmYWNlIGlzIHRvIGluc2VydCB0aGUgUEMgY2FyZCBkaXJlY3RseQorICogaW50byBhIGxhcHRvcChvciBkZXNrdG9wKSB3aXRoIGEgQ2FyZEJ1cyBzbG90IGFuZCBpZiAibHNwY2kiIHNob3dzCisgKiBhIG5ldyBVU0IgY29udHJvbGxlciBhbmQgImxzdXNiIC12IiBzaG93cyBhIG5ldyBPSENJIEhvc3QgQ29udHJvbGxlcgorICogdGhlbiB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoYXQgdGhlIFUxMzIgYWRhcHRlciB3aWxsIHN1cHBvcnQgdGhlCisgKiBQQyBjYXJkLih5b3UgYWxzbyBuZWVkIHRoZSBzcGVjaWZpYyBjbGllbnQgZHJpdmVyIGZvciB0aGUgUEMgY2FyZCkKKyAqCisgKiBQbGVhc2UgaW5mb3JtIHRoZSBBdXRob3IgYW5kIE1haW50YWluZXIgYWJvdXQgYW55IFBDIGNhcmRzIHRoYXQKKyAqIGNvbnRhaW4gT0hDSSBIb3N0IENvbnRyb2xsZXIgYW5kIHdvcmsgd2hlbiBkaXJlY3RseSBjb25uZWN0ZWQgdG8KKyAqIGFuIGVtYmVkZGVkIENhcmRCdXMgc2xvdCBidXQgZG8gbm90IHdvcmsgd2hlbiB0aGV5IGFyZSBjb25uZWN0ZWQKKyAqIHZpYSBhbiBFTEFOIFUxMzIgYWRhcHRlci4KKyAqCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC01NSwzMSArNTgsMzEgQEAKICNkZWZpbmUgSU5UX01PRFVMRV9QQVJNKG4sIHYpIHN0YXRpYyBpbnQgbiA9IHY7bW9kdWxlX3BhcmFtKG4sIGludCwgMDQ0NCkKIHN0YXRpYyBib29sIGRpc3RydXN0X2Zpcm13YXJlID0gMTsKIG1vZHVsZV9wYXJhbShkaXN0cnVzdF9maXJtd2FyZSwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc3RydXN0X2Zpcm13YXJlLCAidHJ1ZSB0byBkaXN0cnVzdCBmaXJtd2FyZSBwb3dlci9vdmVyY3VycmVuIgotICAgICAgICAidCBzZXR1cCIpOworTU9EVUxFX1BBUk1fREVTQyhkaXN0cnVzdF9maXJtd2FyZSwKKwkJICJ0cnVlIHRvIGRpc3RydXN0IGZpcm13YXJlIHBvd2VyL292ZXJjdXJyZW50IHNldHVwIik7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1MTMyX3BsYXRmb3JtX2RyaXZlcjsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3RhdHVzX3F1ZXVlOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjb21tYW5kX3F1ZXVlOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNwb25kX3F1ZXVlOwogLyoKLSogZnRkaV9tb2R1bGVfbG9jayBleGlzdHMgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gZ2xvYmFsIHZhcmlhYmxlcwotKgotKi8KKyAqIGZ0ZGlfbW9kdWxlX2xvY2sgZXhpc3RzIHRvIHByb3RlY3QgYWNjZXNzIHRvIGdsb2JhbCB2YXJpYWJsZXMKKyAqCisgKi8KIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggZnRkaV9tb2R1bGVfbG9jazsKIHN0YXRpYyBpbnQgZnRkaV9pbnN0YW5jZXMgPSAwOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZnRkaV9zdGF0aWNfbGlzdDsKIC8qCi0qIGVuZCBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBwcm90ZWN0ZWQgYnkgZnRkaV9tb2R1bGVfbG9jawotKi8KKyAqIGVuZCBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBwcm90ZWN0ZWQgYnkgZnRkaV9tb2R1bGVfbG9jaworICovCiAjaW5jbHVkZSAidXNiX3UxMzIuaCIKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CiAKLQkvKiBGSVhNRSBvaGNpLmggaXMgT05MWSBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBPSENJIGRyaXZlci4KLQkgKiBJZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHN0dWZmIGxpa2UgdGhpcywgeW91IG5lZWQgdG8gc3BsaXQKLQkgKiBvdXQgc2hhcmVhYmxlIHN0dWZmIChyZWdpc3RlciBkZWNsYXJhdGlvbnM/KSBpbnRvIGl0cyBvd24KLQkgKiBmaWxlLCBtYXliZSBuYW1lIDxsaW51eC91c2Ivb2hjaS5oPgotCSAqLworLyogRklYTUUgb2hjaS5oIGlzIE9OTFkgZm9yIGludGVybmFsIHVzZSBieSB0aGUgT0hDSSBkcml2ZXIuCisgKiBJZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHN0dWZmIGxpa2UgdGhpcywgeW91IG5lZWQgdG8gc3BsaXQKKyAqIG91dCBzaGFyZWFibGUgc3R1ZmYgKHJlZ2lzdGVyIGRlY2xhcmF0aW9ucz8pIGludG8gaXRzIG93bgorICogZmlsZSwgbWF5YmUgbmFtZSA8bGludXgvdXNiL29oY2kuaD4KKyAqLwogCiAjaW5jbHVkZSAiLi4vaG9zdC9vaGNpLmgiCiAvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyovCkBAIC04NywxNDAgKzkwLDE0MCBAQAogI2RlZmluZSBVU0JfRlRESV9FTEFOX1BST0RVQ1RfSUQgMHhkNmVhCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBmdGRpX2VsYW5fdGFibGVbXSA9IHsKLSAgICAgICAge1VTQl9ERVZJQ0UoVVNCX0ZURElfRUxBTl9WRU5ET1JfSUQsIFVTQl9GVERJX0VMQU5fUFJPRFVDVF9JRCl9LAotICAgICAgICB7IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovIH0KKwl7VVNCX0RFVklDRShVU0JfRlRESV9FTEFOX1ZFTkRPUl9JRCwgVVNCX0ZURElfRUxBTl9QUk9EVUNUX0lEKX0sCisJeyAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLyB9CiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZnRkaV9lbGFuX3RhYmxlKTsKIC8qIG9ubHkgdGhlIGp0YWcoZmlybXdhcmUgdXBncmFkZSBkZXZpY2UpIGludGVyZmFjZSByZXF1aXJlcwotKiBhIGRldmljZSBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIG1pbm9yIG51bWJlciwgYnV0IHRoZQotKiBpbnRlcmZhY2UgaXMgY3JlYXRlZCB1bmNvbmRpdGlvbmFsbHkgLSBJIHN1cHBvc2UgaXQgY291bGQKLSogYmUgY29uZmlndXJlZCBvciBub3QgYWNjb3JkaW5nIHRvIGEgbW9kdWxlIHBhcmFtZXRlci4KLSogQnV0IHNpbmNlIHdlKG5vdykgcmVxdWlyZSBvbmUgaW50ZXJmYWNlIHBlciBkZXZpY2UsCi0qIGFuZCBzaW5jZSBpdCB1bmxpa2VseSB0aGF0IGEgbm9ybWFsIGluc3RhbGxhdGlvbiB3b3VsZAotKiByZXF1aXJlIG1vcmUgdGhhbiBhIGNvdXBsZSBvZiBlbGFuLWZ0ZGkgZGV2aWNlcywgOCBzZWVtcwotKiBsaWtlIGEgcmVhc29uYWJsZSBsaW1pdCB0byBoYXZlIGhlcmUsIGFuZCBpZiBzb21lb25lCi0qIHJlYWxseSByZXF1aXJlcyBtb3JlIHRoYW4gOCBkZXZpY2VzLCB0aGVuIHRoZXkgY2FuIGZyaWcgdGhlCi0qIGNvZGUgYW5kIHJlY29tcGlsZQotKi8KKyAqIGEgZGV2aWNlIGZpbGUgYW5kIGNvcnJlc3BvbmRpbmcgbWlub3IgbnVtYmVyLCBidXQgdGhlCisgKiBpbnRlcmZhY2UgaXMgY3JlYXRlZCB1bmNvbmRpdGlvbmFsbHkgLSBJIHN1cHBvc2UgaXQgY291bGQKKyAqIGJlIGNvbmZpZ3VyZWQgb3Igbm90IGFjY29yZGluZyB0byBhIG1vZHVsZSBwYXJhbWV0ZXIuCisgKiBCdXQgc2luY2Ugd2Uobm93KSByZXF1aXJlIG9uZSBpbnRlcmZhY2UgcGVyIGRldmljZSwKKyAqIGFuZCBzaW5jZSBpdCB1bmxpa2VseSB0aGF0IGEgbm9ybWFsIGluc3RhbGxhdGlvbiB3b3VsZAorICogcmVxdWlyZSBtb3JlIHRoYW4gYSBjb3VwbGUgb2YgZWxhbi1mdGRpIGRldmljZXMsIDggc2VlbXMKKyAqIGxpa2UgYSByZWFzb25hYmxlIGxpbWl0IHRvIGhhdmUgaGVyZSwgYW5kIGlmIHNvbWVvbmUKKyAqIHJlYWxseSByZXF1aXJlcyBtb3JlIHRoYW4gOCBkZXZpY2VzLCB0aGVuIHRoZXkgY2FuIGZyaWcgdGhlCisgKiBjb2RlIGFuZCByZWNvbXBpbGUKKyAqLwogI2RlZmluZSBVU0JfRlRESV9FTEFOX01JTk9SX0JBU0UgMTkyCiAjZGVmaW5lIENPTU1BTkRfQklUUyA1CiAjZGVmaW5lIENPTU1BTkRfU0laRSAoMTw8Q09NTUFORF9CSVRTKQogI2RlZmluZSBDT01NQU5EX01BU0sgKENPTU1BTkRfU0laRS0xKQogc3RydWN0IHUxMzJfY29tbWFuZCB7Ci0gICAgICAgIHU4IGhlYWRlcjsKLSAgICAgICAgdTE2IGxlbmd0aDsKLSAgICAgICAgdTggYWRkcmVzczsKLSAgICAgICAgdTggd2lkdGg7Ci0gICAgICAgIHUzMiB2YWx1ZTsKLSAgICAgICAgaW50IGZvbGxvd3M7Ci0gICAgICAgIHZvaWQgKmJ1ZmZlcjsKKwl1OCBoZWFkZXI7CisJdTE2IGxlbmd0aDsKKwl1OCBhZGRyZXNzOworCXU4IHdpZHRoOworCXUzMiB2YWx1ZTsKKwlpbnQgZm9sbG93czsKKwl2b2lkICpidWZmZXI7CiB9OwogI2RlZmluZSBSRVNQT05EX0JJVFMgNQogI2RlZmluZSBSRVNQT05EX1NJWkUgKDE8PFJFU1BPTkRfQklUUykKICNkZWZpbmUgUkVTUE9ORF9NQVNLIChSRVNQT05EX1NJWkUtMSkKIHN0cnVjdCB1MTMyX3Jlc3BvbmQgewotICAgICAgICB1OCBoZWFkZXI7Ci0gICAgICAgIHU4IGFkZHJlc3M7Ci0gICAgICAgIHUzMiAqdmFsdWU7Ci0gICAgICAgIGludCAqcmVzdWx0OwotICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiB3YWl0X2NvbXBsZXRpb247CisJdTggaGVhZGVyOworCXU4IGFkZHJlc3M7CisJdTMyICp2YWx1ZTsKKwlpbnQgKnJlc3VsdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiB3YWl0X2NvbXBsZXRpb247CiB9Owogc3RydWN0IHUxMzJfdGFyZ2V0IHsKLSAgICAgICAgdm9pZCAqZW5kcDsKLSAgICAgICAgc3RydWN0IHVyYiAqdXJiOwotICAgICAgICBpbnQgdG9nZ2xlX2JpdHM7Ci0gICAgICAgIGludCBlcnJvcl9jb3VudDsKLSAgICAgICAgaW50IGNvbmRpdGlvbl9jb2RlOwotICAgICAgICBpbnQgcmVwZWF0X251bWJlcjsKLSAgICAgICAgaW50IGhhbHRlZDsKLSAgICAgICAgaW50IHNraXBwZWQ7Ci0gICAgICAgIGludCBhY3R1YWw7Ci0gICAgICAgIGludCBub25fbnVsbDsKLSAgICAgICAgaW50IGFjdGl2ZTsKLSAgICAgICAgaW50IGFiYW5kb25pbmc7Ci0gICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKLSAgICAgICAgICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLAotICAgICAgICAgICAgICAgIGludCByZXBlYXRfbnVtYmVyLCBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwKLSAgICAgICAgICAgICAgICBpbnQgbm9uX251bGwpOworCXZvaWQgKmVuZHA7CisJc3RydWN0IHVyYiAqdXJiOworCWludCB0b2dnbGVfYml0czsKKwlpbnQgZXJyb3JfY291bnQ7CisJaW50IGNvbmRpdGlvbl9jb2RlOworCWludCByZXBlYXRfbnVtYmVyOworCWludCBoYWx0ZWQ7CisJaW50IHNraXBwZWQ7CisJaW50IGFjdHVhbDsKKwlpbnQgbm9uX251bGw7CisJaW50IGFjdGl2ZTsKKwlpbnQgYWJhbmRvbmluZzsKKwl2b2lkICgqY2FsbGJhY2spKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKwkJCSBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLAorCQkJIGludCByZXBlYXRfbnVtYmVyLCBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwKKwkJCSBpbnQgbm9uX251bGwpOwogfTsKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmKi8KIHN0cnVjdCB1c2JfZnRkaSB7Ci0gICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnRkaV9saXN0OwotICAgICAgICBzdHJ1Y3QgbXV0ZXggdTEzMl9sb2NrOwotICAgICAgICBpbnQgY29tbWFuZF9uZXh0OwotICAgICAgICBpbnQgY29tbWFuZF9oZWFkOwotICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kIGNvbW1hbmRbQ09NTUFORF9TSVpFXTsKLSAgICAgICAgaW50IHJlc3BvbmRfbmV4dDsKLSAgICAgICAgaW50IHJlc3BvbmRfaGVhZDsKLSAgICAgICAgc3RydWN0IHUxMzJfcmVzcG9uZCByZXNwb25kW1JFU1BPTkRfU0laRV07Ci0gICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCB0YXJnZXRbNF07Ci0gICAgICAgIGNoYXIgZGV2aWNlX25hbWVbMTZdOwotICAgICAgICB1bnNpZ25lZCBzeW5jaHJvbml6ZWQ6MTsKLSAgICAgICAgdW5zaWduZWQgZW51bWVyYXRlZDoxOwotICAgICAgICB1bnNpZ25lZCByZWdpc3RlcmVkOjE7Ci0gICAgICAgIHVuc2lnbmVkIGluaXRpYWxpemVkOjE7Ci0gICAgICAgIHVuc2lnbmVkIGNhcmRfZWplY3RlZDoxOwotICAgICAgICBpbnQgZnVuY3Rpb247Ci0gICAgICAgIGludCBzZXF1ZW5jZV9udW07Ci0gICAgICAgIGludCBkaXNjb25uZWN0ZWQ7Ci0gICAgICAgIGludCBnb25lX2F3YXk7Ci0gICAgICAgIGludCBzdHVja19zdGF0dXM7Ci0gICAgICAgIGludCBzdGF0dXNfcXVldWVfZGVsYXk7Ci0gICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc3dfbG9jazsKLSAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0gICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0gICAgICAgIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyICpjbGFzczsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0dXNfd29yazsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayBjb21tYW5kX3dvcms7Ci0gICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgcmVzcG9uZF93b3JrOwotICAgICAgICBzdHJ1Y3QgdTEzMl9wbGF0Zm9ybV9kYXRhIHBsYXRmb3JtX2RhdGE7Ci0gICAgICAgIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNbMF07Ci0gICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGxhdGZvcm1fZGV2OwotICAgICAgICB1bnNpZ25lZCBjaGFyICpidWxrX2luX2J1ZmZlcjsKLSAgICAgICAgc2l6ZV90IGJ1bGtfaW5fc2l6ZTsKLSAgICAgICAgc2l6ZV90IGJ1bGtfaW5fbGFzdDsKLSAgICAgICAgc2l6ZV90IGJ1bGtfaW5fbGVmdDsKLSAgICAgICAgX191OCBidWxrX2luX2VuZHBvaW50QWRkcjsKLSAgICAgICAgX191OCBidWxrX291dF9lbmRwb2ludEFkZHI7Ci0gICAgICAgIHN0cnVjdCBrcmVmIGtyZWY7Ci0gICAgICAgIHUzMiBjb250cm9scmVnOwotICAgICAgICB1OCByZXNwb25zZVs0ICsgMTAyNF07Ci0gICAgICAgIGludCBleHBlY3RlZDsKLSAgICAgICAgaW50IHJlY2VpdmVkOwotICAgICAgICBpbnQgZWRfZm91bmQ7CisJc3RydWN0IGxpc3RfaGVhZCBmdGRpX2xpc3Q7CisJc3RydWN0IG11dGV4IHUxMzJfbG9jazsKKwlpbnQgY29tbWFuZF9uZXh0OworCWludCBjb21tYW5kX2hlYWQ7CisJc3RydWN0IHUxMzJfY29tbWFuZCBjb21tYW5kW0NPTU1BTkRfU0laRV07CisJaW50IHJlc3BvbmRfbmV4dDsKKwlpbnQgcmVzcG9uZF9oZWFkOworCXN0cnVjdCB1MTMyX3Jlc3BvbmQgcmVzcG9uZFtSRVNQT05EX1NJWkVdOworCXN0cnVjdCB1MTMyX3RhcmdldCB0YXJnZXRbNF07CisJY2hhciBkZXZpY2VfbmFtZVsxNl07CisJdW5zaWduZWQgc3luY2hyb25pemVkOjE7CisJdW5zaWduZWQgZW51bWVyYXRlZDoxOworCXVuc2lnbmVkIHJlZ2lzdGVyZWQ6MTsKKwl1bnNpZ25lZCBpbml0aWFsaXplZDoxOworCXVuc2lnbmVkIGNhcmRfZWplY3RlZDoxOworCWludCBmdW5jdGlvbjsKKwlpbnQgc2VxdWVuY2VfbnVtOworCWludCBkaXNjb25uZWN0ZWQ7CisJaW50IGdvbmVfYXdheTsKKwlpbnQgc3R1Y2tfc3RhdHVzOworCWludCBzdGF0dXNfcXVldWVfZGVsYXk7CisJc3RydWN0IHNlbWFwaG9yZSBzd19sb2NrOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzOworCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHVzX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBjb21tYW5kX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayByZXNwb25kX3dvcms7CisJc3RydWN0IHUxMzJfcGxhdGZvcm1fZGF0YSBwbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNbMF07CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwbGF0Zm9ybV9kZXY7CisJdW5zaWduZWQgY2hhciAqYnVsa19pbl9idWZmZXI7CisJc2l6ZV90IGJ1bGtfaW5fc2l6ZTsKKwlzaXplX3QgYnVsa19pbl9sYXN0OworCXNpemVfdCBidWxrX2luX2xlZnQ7CisJX191OCBidWxrX2luX2VuZHBvaW50QWRkcjsKKwlfX3U4IGJ1bGtfb3V0X2VuZHBvaW50QWRkcjsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXUzMiBjb250cm9scmVnOworCXU4IHJlc3BvbnNlWzQgKyAxMDI0XTsKKwlpbnQgZXhwZWN0ZWQ7CisJaW50IHJlY2VpdmVkOworCWludCBlZF9mb3VuZDsKIH07CiAjZGVmaW5lIGtyZWZfdG9fdXNiX2Z0ZGkoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2JfZnRkaSwga3JlZikKICNkZWZpbmUgcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2Z0ZGksIFwKLSAgICAgICAgcGxhdGZvcm1fZGV2KQorCQkJCQkJICAgIHBsYXRmb3JtX2RldikKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmdGRpX2VsYW5fZHJpdmVyOwogc3RhdGljIHZvaWQgZnRkaV9lbGFuX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0ga3JlZl90b191c2JfZnRkaShrcmVmKTsKLSAgICAgICAgZGV2X3dhcm4oJmZ0ZGktPnVkZXYtPmRldiwgIkZSRUVJTkcgZnRkaT0lcFxuIiwgZnRkaSk7Ci0gICAgICAgIHVzYl9wdXRfZGV2KGZ0ZGktPnVkZXYpOwotICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKLSAgICAgICAgbXV0ZXhfbG9jaygmZnRkaV9tb2R1bGVfbG9jayk7Ci0gICAgICAgIGxpc3RfZGVsX2luaXQoJmZ0ZGktPmZ0ZGlfbGlzdCk7Ci0gICAgICAgIGZ0ZGlfaW5zdGFuY2VzIC09IDE7Ci0gICAgICAgIG11dGV4X3VubG9jaygmZnRkaV9tb2R1bGVfbG9jayk7Ci0gICAgICAgIGtmcmVlKGZ0ZGktPmJ1bGtfaW5fYnVmZmVyKTsKLSAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIgPSBOVUxMOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IGtyZWZfdG9fdXNiX2Z0ZGkoa3JlZik7CisJZGV2X3dhcm4oJmZ0ZGktPnVkZXYtPmRldiwgIkZSRUVJTkcgZnRkaT0lcFxuIiwgZnRkaSk7CisJdXNiX3B1dF9kZXYoZnRkaS0+dWRldik7CisJZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7CisJbXV0ZXhfbG9jaygmZnRkaV9tb2R1bGVfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmZnRkaS0+ZnRkaV9saXN0KTsKKwlmdGRpX2luc3RhbmNlcyAtPSAxOworCW11dGV4X3VubG9jaygmZnRkaV9tb2R1bGVfbG9jayk7CisJa2ZyZWUoZnRkaS0+YnVsa19pbl9idWZmZXIpOworCWZ0ZGktPmJ1bGtfaW5fYnVmZmVyID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9lbGFuX3B1dF9rcmVmKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAga3JlZl9wdXQoJmZ0ZGktPmtyZWYsIGZ0ZGlfZWxhbl9kZWxldGUpOworCWtyZWZfcHV0KCZmdGRpLT5rcmVmLCBmdGRpX2VsYW5fZGVsZXRlKTsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9lbGFuX2dldF9rcmVmKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAga3JlZl9nZXQoJmZ0ZGktPmtyZWYpOworCWtyZWZfZ2V0KCZmdGRpLT5rcmVmKTsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9lbGFuX2luaXRfa3JlZihzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIGtyZWZfaW5pdCgmZnRkaS0+a3JlZik7CisJa3JlZl9pbml0KCZmdGRpLT5rcmVmKTsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9zdGF0dXNfcmVxdWV1ZV93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdW5zaWduZWQgaW50IGRlbHRhKQpAQCAtMjM3LDggKzI0MCw4IEBACiAKIHN0YXRpYyB2b2lkIGZ0ZGlfc3RhdHVzX2NhbmNlbF93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAgaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJmZ0ZGktPnN0YXR1c193b3JrKSkKLSAgICAgICAgICAgICAgICBrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7CisJaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJmZ0ZGktPnN0YXR1c193b3JrKSkKKwkJa3JlZl9wdXQoJmZ0ZGktPmtyZWYsIGZ0ZGlfZWxhbl9kZWxldGUpOwogfQogCiBzdGF0aWMgdm9pZCBmdGRpX2NvbW1hbmRfcmVxdWV1ZV93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdW5zaWduZWQgaW50IGRlbHRhKQpAQCAtMjU1LDEyICsyNTgsMTIgQEAKIAogc3RhdGljIHZvaWQgZnRkaV9jb21tYW5kX2NhbmNlbF93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAgaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJmZ0ZGktPmNvbW1hbmRfd29yaykpCi0gICAgICAgICAgICAgICAga3JlZl9wdXQoJmZ0ZGktPmtyZWYsIGZ0ZGlfZWxhbl9kZWxldGUpOworCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZmdGRpLT5jb21tYW5kX3dvcmspKQorCQlrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVzcG9uc2VfcmVxdWV1ZV93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwKLSAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhKQorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVsdGEpCiB7CiAJaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsocmVzcG9uZF9xdWV1ZSwgJmZ0ZGktPnJlc3BvbmRfd29yaywgZGVsdGEpKQogCQlrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7CkBAIC0yNzQsMjYgKzI3NywyNiBAQAogCiBzdGF0aWMgdm9pZCBmdGRpX3Jlc3BvbnNlX2NhbmNlbF93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAgaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJmZ0ZGktPnJlc3BvbmRfd29yaykpCi0gICAgICAgICAgICAgICAga3JlZl9wdXQoJmZ0ZGktPmtyZWYsIGZ0ZGlfZWxhbl9kZWxldGUpOworCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZmdGRpLT5yZXNwb25kX3dvcmspKQorCQlrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7CiB9CiAKIHZvaWQgZnRkaV9lbGFuX2dvbmVfYXdheShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7Ci0gICAgICAgIGZ0ZGktPmdvbmVfYXdheSArPSAxOwotICAgICAgICBmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOworCWZ0ZGktPmdvbmVfYXdheSArPSAxOworCWZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKIH0KIAogCiBFWFBPUlRfU1lNQk9MX0dQTChmdGRpX2VsYW5fZ29uZV9hd2F5KTsKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVsZWFzZV9wbGF0Zm9ybV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewotICAgICAgICBkZXYtPnBhcmVudCA9IE5VTEw7CisJZGV2LT5wYXJlbnQgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBmdGRpX2VsYW5fZG9fY2FsbGJhY2soc3RydWN0IHVzYl9mdGRpICpmdGRpLAotICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCwgdTggKmJ1ZmZlciwgaW50IGxlbmd0aCk7CisJCQkJICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCwgdTggKmJ1ZmZlciwgaW50IGxlbmd0aCk7CiBzdGF0aWMgdm9pZCBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSk7CiBzdGF0aWMgdm9pZCBmdGRpX2VsYW5fa2lja19yZXNwb25kX3F1ZXVlKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSk7CiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zZXR1cE9IQ0koc3RydWN0IHVzYl9mdGRpICpmdGRpKTsKQEAgLTMwNSw0MjEgKzMwOCw0MTYgQEAKIHN0YXRpYyBpbnQgZnRkaV9lbGFuX3Jlc3BvbmRfZW5naW5lKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSk7CiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9oY2RfaW5pdChzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgIGlmIChmdGRpLT5wbGF0Zm9ybV9kZXYuZGV2LnBhcmVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICBmdGRpX2VsYW5fZ2V0X2tyZWYoZnRkaSk7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2RhdGEucG90cGcgPSAxMDA7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2RhdGEucmVzZXQgPSBOVUxMOwotICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kZXYuaWQgPSBmdGRpLT5zZXF1ZW5jZV9udW07Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5yZXNvdXJjZSA9IGZ0ZGktPnJlc291cmNlczsKLSAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGV2Lm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGZ0ZGktPnJlc291cmNlcyk7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucGxhdGZvcm1fZGF0YSA9ICZmdGRpLT5wbGF0Zm9ybV9kYXRhOwotICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kZXYuZGV2LnBhcmVudCA9IE5VTEw7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucmVsZWFzZSA9IGZ0ZGlfcmVsZWFzZV9wbGF0Zm9ybV9kZXY7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYuZG1hX21hc2sgPSBOVUxMOwotICAgICAgICBzbnByaW50ZihmdGRpLT5kZXZpY2VfbmFtZSwgc2l6ZW9mKGZ0ZGktPmRldmljZV9uYW1lKSwgInUxMzJfaGNkIik7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5uYW1lID0gZnRkaS0+ZGV2aWNlX25hbWU7Ci0gICAgICAgIGRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIG1vZHVsZSAnJXMnXG4iLCAidTEzMl9oY2QiKTsKLSAgICAgICAgcmVxdWVzdF9tb2R1bGUoInUxMzJfaGNkIik7Ci0gICAgICAgIGRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJyZWdpc3RlcmluZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5uYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZmdGRpLT5wbGF0Zm9ybV9kZXYpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworCWludCByZXN1bHQ7CisJaWYgKGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucGFyZW50KQorCQlyZXR1cm4gLUVCVVNZOworCWZ0ZGlfZWxhbl9nZXRfa3JlZihmdGRpKTsKKwlmdGRpLT5wbGF0Zm9ybV9kYXRhLnBvdHBnID0gMTAwOworCWZ0ZGktPnBsYXRmb3JtX2RhdGEucmVzZXQgPSBOVUxMOworCWZ0ZGktPnBsYXRmb3JtX2Rldi5pZCA9IGZ0ZGktPnNlcXVlbmNlX251bTsKKwlmdGRpLT5wbGF0Zm9ybV9kZXYucmVzb3VyY2UgPSBmdGRpLT5yZXNvdXJjZXM7CisJZnRkaS0+cGxhdGZvcm1fZGV2Lm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGZ0ZGktPnJlc291cmNlcyk7CisJZnRkaS0+cGxhdGZvcm1fZGV2LmRldi5wbGF0Zm9ybV9kYXRhID0gJmZ0ZGktPnBsYXRmb3JtX2RhdGE7CisJZnRkaS0+cGxhdGZvcm1fZGV2LmRldi5wYXJlbnQgPSBOVUxMOworCWZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucmVsZWFzZSA9IGZ0ZGlfcmVsZWFzZV9wbGF0Zm9ybV9kZXY7CisJZnRkaS0+cGxhdGZvcm1fZGV2LmRldi5kbWFfbWFzayA9IE5VTEw7CisJc25wcmludGYoZnRkaS0+ZGV2aWNlX25hbWUsIHNpemVvZihmdGRpLT5kZXZpY2VfbmFtZSksICJ1MTMyX2hjZCIpOworCWZ0ZGktPnBsYXRmb3JtX2Rldi5uYW1lID0gZnRkaS0+ZGV2aWNlX25hbWU7CisJZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgInJlcXVlc3RpbmcgbW9kdWxlICclcydcbiIsICJ1MTMyX2hjZCIpOworCXJlcXVlc3RfbW9kdWxlKCJ1MTMyX2hjZCIpOworCWRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJyZWdpc3RlcmluZyAnJXMnXG4iLAorCQkgZnRkaS0+cGxhdGZvcm1fZGV2Lm5hbWUpOworCXJlc3VsdCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZnRkaS0+cGxhdGZvcm1fZGV2KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBmdGRpX2VsYW5fYWJhbmRvbl9jb21wbGV0aW9ucyhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgIHdoaWxlIChmdGRpLT5yZXNwb25kX25leHQgPiBmdGRpLT5yZXNwb25kX2hlYWQpIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yZXNwb25kICpyZXNwb25kID0gJmZ0ZGktPnJlc3BvbmRbUkVTUE9ORF9NQVNLICYKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlc3BvbmRfaGVhZCsrXTsKLSAgICAgICAgICAgICAgICAqcmVzcG9uZC0+cmVzdWx0ID0gLUVTSFVURE9XTjsKLSAgICAgICAgICAgICAgICAqcmVzcG9uZC0+dmFsdWUgPSAwOwotICAgICAgICAgICAgICAgIGNvbXBsZXRlKCZyZXNwb25kLT53YWl0X2NvbXBsZXRpb24pOwotICAgICAgICB9IG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCXdoaWxlIChmdGRpLT5yZXNwb25kX25leHQgPiBmdGRpLT5yZXNwb25kX2hlYWQpIHsKKwkJc3RydWN0IHUxMzJfcmVzcG9uZCAqcmVzcG9uZCA9ICZmdGRpLT5yZXNwb25kW1JFU1BPTkRfTUFTSyAmCisJCQkJCQkJICAgICAgZnRkaS0+cmVzcG9uZF9oZWFkKytdOworCQkqcmVzcG9uZC0+cmVzdWx0ID0gLUVTSFVURE9XTjsKKwkJKnJlc3BvbmQtPnZhbHVlID0gMDsKKwkJY29tcGxldGUoJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJfSBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9hYmFuZG9uX3RhcmdldHMoc3RydWN0IHVzYl9mdGRpICpmdGRpKQogewotICAgICAgICBpbnQgZWRfbnVtYmVyID0gNDsKLSAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgd2hpbGUgKGVkX251bWJlci0tID4gMCkgewotICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF9udW1iZXJdOwotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQtPmFjdGl2ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmNvbmRpdGlvbl9jb2RlID0gVERfREVWTk9UUkVTUDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnRkaS0+cmVjZWl2ZWQgPSAwOwotICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQ7Ci0gICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKLSAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCWludCBlZF9udW1iZXIgPSA0OworCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJd2hpbGUgKGVkX251bWJlci0tID4gMCkgeworCQlzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRfbnVtYmVyXTsKKwkJaWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKKwkJCXRhcmdldC0+Y29uZGl0aW9uX2NvZGUgPSBURF9ERVZOT1RSRVNQOworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgTlVMTCwgMCk7CisJCQltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQl9CisJfQorCWZ0ZGktPnJlY2VpdmVkID0gMDsKKwlmdGRpLT5leHBlY3RlZCA9IDQ7CisJZnRkaS0+ZWRfZm91bmQgPSAwOworCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9lbGFuX2ZsdXNoX3RhcmdldHMoc3RydWN0IHVzYl9mdGRpICpmdGRpKQogewotICAgICAgICBpbnQgZWRfbnVtYmVyID0gNDsKLSAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgd2hpbGUgKGVkX251bWJlci0tID4gMCkgewotICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF9udW1iZXJdOwotICAgICAgICAgICAgICAgIHRhcmdldC0+YWJhbmRvbmluZyA9IDE7Ci0gICAgICAgICAgICAgIHdhaXRfMTppZiAodGFyZ2V0LT5hY3RpdmUgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfaGVhZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmhlYWRlciA9IDB4ODAgfCAoZWRfbnVtYmVyIDw8IDUpIHwgMHg0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5hZGRyZXNzID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSAweDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0XzE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB3YWl0XzI6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDkwIHwgKGVkX251bWJlciA8PCA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdF8yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdGRpLT5yZWNlaXZlZCA9IDA7Ci0gICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKLSAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAwOwotICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJaW50IGVkX251bWJlciA9IDQ7CisJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwl3aGlsZSAoZWRfbnVtYmVyLS0gPiAwKSB7CisJCXN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF9udW1iZXJdOworCQl0YXJnZXQtPmFiYW5kb25pbmcgPSAxOworCXdhaXRfMTppZiAodGFyZ2V0LT5hY3RpdmUgPT0gMSkgeworCQkJaW50IGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtCisJCQkJZnRkaS0+Y29tbWFuZF9oZWFkOworCQkJaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworCQkJCXN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKwkJCQkJQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCQljb21tYW5kLT5oZWFkZXIgPSAweDgwIHwgKGVkX251bWJlciA8PCA1KSB8IDB4NDsKKwkJCQljb21tYW5kLT5sZW5ndGggPSAweDAwOworCQkJCWNvbW1hbmQtPmFkZHJlc3MgPSAweDAwOworCQkJCWNvbW1hbmQtPndpZHRoID0gMHgwMDsKKwkJCQljb21tYW5kLT5mb2xsb3dzID0gMDsKKwkJCQljb21tYW5kLT52YWx1ZSA9IDA7CisJCQkJY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworCQkJCWZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworCQkJCWZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisJCQl9IGVsc2UgeworCQkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJCWdvdG8gd2FpdF8xOworCQkJfQorCQl9CisJd2FpdF8yOmlmICh0YXJnZXQtPmFjdGl2ZSA9PSAxKSB7CisJCQlpbnQgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0KKwkJCQlmdGRpLT5jb21tYW5kX2hlYWQ7CisJCQlpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisJCQkJc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworCQkJCQlDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworCQkJCWNvbW1hbmQtPmhlYWRlciA9IDB4OTAgfCAoZWRfbnVtYmVyIDw8IDUpOworCQkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4MDA7CisJCQkJY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7CisJCQkJY29tbWFuZC0+d2lkdGggPSAweDAwOworCQkJCWNvbW1hbmQtPmZvbGxvd3MgPSAwOworCQkJCWNvbW1hbmQtPnZhbHVlID0gMDsKKwkJCQljb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7CisJCQkJZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisJCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCX0gZWxzZSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJCW1zbGVlcCgxMDApOworCQkJCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQkJZ290byB3YWl0XzI7CisJCQl9CisJCX0KKwl9CisJZnRkaS0+cmVjZWl2ZWQgPSAwOworCWZ0ZGktPmV4cGVjdGVkID0gNDsKKwlmdGRpLT5lZF9mb3VuZCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBmdGRpX2VsYW5fY2FuY2VsX3RhcmdldHMoc3RydWN0IHVzYl9mdGRpICpmdGRpKQogewotICAgICAgICBpbnQgZWRfbnVtYmVyID0gNDsKLSAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgd2hpbGUgKGVkX251bWJlci0tID4gMCkgewotICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF9udW1iZXJdOwotICAgICAgICAgICAgICAgIHRhcmdldC0+YWJhbmRvbmluZyA9IDE7Ci0gICAgICAgICAgICAgIHdhaXQ6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgwIHwgKGVkX251bWJlciA8PCA1KSB8IDB4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnRkaS0+cmVjZWl2ZWQgPSAwOwotICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQ7Ci0gICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKLSAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCWludCBlZF9udW1iZXIgPSA0OworCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJd2hpbGUgKGVkX251bWJlci0tID4gMCkgeworCQlzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRfbnVtYmVyXTsKKwkJdGFyZ2V0LT5hYmFuZG9uaW5nID0gMTsKKwl3YWl0OmlmICh0YXJnZXQtPmFjdGl2ZSA9PSAxKSB7CisJCQlpbnQgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0KKwkJCQlmdGRpLT5jb21tYW5kX2hlYWQ7CisJCQlpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisJCQkJc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworCQkJCQlDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworCQkJCWNvbW1hbmQtPmhlYWRlciA9IDB4ODAgfCAoZWRfbnVtYmVyIDw8IDUpIHwgMHg0OworCQkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4MDA7CisJCQkJY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7CisJCQkJY29tbWFuZC0+d2lkdGggPSAweDAwOworCQkJCWNvbW1hbmQtPmZvbGxvd3MgPSAwOworCQkJCWNvbW1hbmQtPnZhbHVlID0gMDsKKwkJCQljb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7CisJCQkJZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisJCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCX0gZWxzZSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJCW1zbGVlcCgxMDApOworCQkJCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQkJZ290byB3YWl0OworCQkJfQorCQl9CisJfQorCWZ0ZGktPnJlY2VpdmVkID0gMDsKKwlmdGRpLT5leHBlY3RlZCA9IDQ7CisJZnRkaS0+ZWRfZm91bmQgPSAwOworCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIGZ0ZGlfY29tbWFuZF9xdWV1ZV93b3JrKGZ0ZGksIDApOworCWZ0ZGlfY29tbWFuZF9xdWV1ZV93b3JrKGZ0ZGksIDApOwogfQogCiBzdGF0aWMgdm9pZCBmdGRpX2VsYW5fY29tbWFuZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0KKwlzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9mdGRpLCBjb21tYW5kX3dvcmsud29yayk7CiAKLSAgICAgICAgaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICBmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSBmdGRpX2VsYW5fY29tbWFuZF9lbmdpbmUoZnRkaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAtRVNIVVRET1dOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRU5PREVWKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvbW1hbmQgZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0gICAgICAgICAgICAgICAgZnRkaV9jb21tYW5kX3JlcXVldWVfd29yayhmdGRpLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisJaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJZnRkaV9lbGFuX3B1dF9rcmVmKGZ0ZGkpOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaW50IHJldHZhbCA9IGZ0ZGlfZWxhbl9jb21tYW5kX2VuZ2luZShmdGRpKTsKKwkJaWYgKHJldHZhbCA9PSAtRVNIVVRET1dOKSB7CisJCQlmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKwkJfSBlbHNlIGlmIChyZXR2YWwgPT0gLUVOT0RFVikgeworCQkJZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7CisJCX0gZWxzZSBpZiAocmV0dmFsKQorCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY29tbWFuZCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJZnRkaV9jb21tYW5kX3JlcXVldWVfd29yayhmdGRpLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisJCXJldHVybjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9raWNrX3Jlc3BvbmRfcXVldWUoc3RydWN0IHVzYl9mdGRpICpmdGRpKQogewotICAgICAgICBmdGRpX3Jlc3BvbmRfcXVldWVfd29yayhmdGRpLCAwKTsKKwlmdGRpX3Jlc3BvbmRfcXVldWVfd29yayhmdGRpLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgZnRkaV9lbGFuX3Jlc3BvbmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JfZnRkaSwgcmVzcG9uZF93b3JrLndvcmspOwotICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IGZ0ZGlfZWxhbl9yZXNwb25kX2VuZ2luZShmdGRpKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVNIVVRET1dOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRU5PREVWKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRUlMU0VRKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJyZXNwb25kIGVycm9yICVkXG4iLCByZXR2YWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2FiYW5kb25fY29tcGxldGlvbnMoZnRkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fYWJhbmRvbl90YXJnZXRzKGZ0ZGkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmdGRpX3Jlc3BvbnNlX3JlcXVldWVfd29yayhmdGRpLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisJaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJZnRkaV9lbGFuX3B1dF9rcmVmKGZ0ZGkpOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaW50IHJldHZhbCA9IGZ0ZGlfZWxhbl9yZXNwb25kX2VuZ2luZShmdGRpKTsKKwkJaWYgKHJldHZhbCA9PSAwKSB7CisJCX0gZWxzZSBpZiAocmV0dmFsID09IC1FU0hVVERPV04pIHsKKwkJCWZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAtRU5PREVWKSB7CisJCQlmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKwkJfSBlbHNlIGlmIChyZXR2YWwgPT0gLUVJTFNFUSkgeworCQkJZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7CisJCX0gZWxzZSB7CisJCQlmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKwkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInJlc3BvbmQgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCX0KKwkJaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJCWZ0ZGlfZWxhbl9hYmFuZG9uX2NvbXBsZXRpb25zKGZ0ZGkpOworCQkJZnRkaV9lbGFuX2FiYW5kb25fdGFyZ2V0cyhmdGRpKTsKKwkJfQorCQlmdGRpX3Jlc3BvbnNlX3JlcXVldWVfd29yayhmdGRpLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisJCXJldHVybjsKKwl9CiB9CiAKIAogLyoKLSogdGhlIHN3X2xvY2sgaXMgaW5pdGlhbGx5IGhlbGQgYW5kIHdpbGwgYmUgZnJlZWQKLSogYWZ0ZXIgdGhlIEZUREkgaGFzIGJlZW4gc3luY2hyb25pemVkCi0qCi0qLworICogdGhlIHN3X2xvY2sgaXMgaW5pdGlhbGx5IGhlbGQgYW5kIHdpbGwgYmUgZnJlZWQKKyAqIGFmdGVyIHRoZSBGVERJIGhhcyBiZWVuIHN5bmNocm9uaXplZAorICoKKyAqLwogc3RhdGljIHZvaWQgZnRkaV9lbGFuX3N0YXR1c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0KKwlzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9mdGRpLCBzdGF0dXNfd29yay53b3JrKTsKLSAgICAgICAgaW50IHdvcmtfZGVsYXlfaW5fbXNlYyA9IDA7Ci0gICAgICAgIGlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZnRkaV9lbGFuX3B1dF9rcmVmKGZ0ZGkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5zeW5jaHJvbml6ZWQgPT0gMCkgewotICAgICAgICAgICAgICAgIGRvd24oJmZ0ZGktPnN3X2xvY2spOwotICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fc3luY2hyb25pemUoZnRkaSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+c3luY2hyb25pemVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfY29tbWFuZF9xdWV1ZV93b3JrKGZ0ZGksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9yZXNwb25kX3F1ZXVlX3dvcmsoZnRkaSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+c3dfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxMDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInN5bmNocm9uaXplIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+c3dfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxMCAqMTAwMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+c3R1Y2tfc3RhdHVzID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fc3R1Y2tfd2FpdGluZyhmdGRpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5zdHVja19zdGF0dXMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+c3luY2hyb25pemVkID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChmdGRpLT5zdHVja19zdGF0dXMrKyAlIDYwKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJXUk9ORyB0eXBlIG9mIGNhcmQgaW5zZXJ0ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSBwbGVhc2UgcmVtb3ZlXG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIldST05HIHR5cGUgb2YgY2FyZCBpbnNlcnRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIGNoZWNrZWQgJWQgdGltZXNcbiIsIGZ0ZGktPnN0dWNrX3N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMTAwOwotICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmVudW1lcmF0ZWQgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fZW51bWVyYXRlUENJKGZ0ZGkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVudW1lcmF0ZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMjUwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMTAwMDsKLSAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0ZGlfZWxhbl9zZXR1cE9IQ0koZnRkaSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+aW5pdGlhbGl6ZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gNTAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJpbml0aWFsaXplZCBmYWlsZWQgLSB0cnlpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWdhaW4gaW4gMTAgc2Vjb25kc1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxICoxMDAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5yZWdpc3RlcmVkID09IDApIHsKLSAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxMDsKLSAgICAgICAgICAgICAgICBpZiAoZnRkaV9lbGFuX2hjZF9pbml0KGZ0ZGkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlZ2lzdGVyZWQgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmVnaXN0ZXIgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAyNTA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0ZGlfZWxhbl9jaGVja2luZ1BDSShmdGRpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAyNTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5jb250cm9scmVnICYgMHgwMDQwMDAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0ZGktPmdvbmVfYXdheSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiUENJIGRldmljZSBlamVjdCBjb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpcm1lZCBwbGF0Zm9ybV9kZXYuZGV2LnBhcmVudD0lcCBwbGF0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtX2Rldi5kZXY9JXBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGV2LmRldi5wYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZnRkaS0+cGxhdGZvcm1fZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGV2LmRldi5wYXJlbnQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZWdpc3RlcmVkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZW51bWVyYXRlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNhcmRfZWplY3RlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmluaXRpYWxpemVkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Z29uZV9hd2F5ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZmx1c2hfdGFyZ2V0cyhmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfZGVsYXlfaW5fbXNlYyA9IDI1MDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiUENJIGRldmljZSBoYXMgZGlzYXBwZWFyZWRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9jYW5jZWxfdGFyZ2V0cyhmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfZGVsYXlfaW5fbXNlYyA9IDUwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVudW1lcmF0ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+aW5pdGlhbGl6ZWQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnRkaV9zdGF0dXNfcmVxdWV1ZV93b3JrKGZ0ZGksCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2Vjc190b19qaWZmaWVzKHdvcmtfZGVsYXlfaW5fbXNlYykpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCWludCB3b3JrX2RlbGF5X2luX21zZWMgPSAwOworCWlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCWZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoZnRkaS0+c3luY2hyb25pemVkID09IDApIHsKKwkJZG93bigmZnRkaS0+c3dfbG9jayk7CisJCWlmIChmdGRpX2VsYW5fc3luY2hyb25pemUoZnRkaSkgPT0gMCkgeworCQkJZnRkaS0+c3luY2hyb25pemVkID0gMTsKKwkJCWZ0ZGlfY29tbWFuZF9xdWV1ZV93b3JrKGZ0ZGksIDEpOworCQkJZnRkaV9yZXNwb25kX3F1ZXVlX3dvcmsoZnRkaSwgMSk7CisJCQl1cCgmZnRkaS0+c3dfbG9jayk7CisJCQl3b3JrX2RlbGF5X2luX21zZWMgPSAxMDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJzeW5jaHJvbml6ZSBmYWlsZWRcbiIpOworCQkJdXAoJmZ0ZGktPnN3X2xvY2spOworCQkJd29ya19kZWxheV9pbl9tc2VjID0gMTAgKjEwMDA7CisJCX0KKwl9IGVsc2UgaWYgKGZ0ZGktPnN0dWNrX3N0YXR1cyA+IDApIHsKKwkJaWYgKGZ0ZGlfZWxhbl9zdHVja193YWl0aW5nKGZ0ZGkpID09IDApIHsKKwkJCWZ0ZGktPnN0dWNrX3N0YXR1cyA9IDA7CisJCQlmdGRpLT5zeW5jaHJvbml6ZWQgPSAwOworCQl9IGVsc2UgaWYgKChmdGRpLT5zdHVja19zdGF0dXMrKyAlIDYwKSA9PSAxKSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJXUk9ORyB0eXBlIG9mIGNhcmQgaW5zZXJ0ZWQgLSBwbGVhc2UgcmVtb3ZlXG4iKTsKKwkJfSBlbHNlCisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJXUk9ORyB0eXBlIG9mIGNhcmQgaW5zZXJ0ZWQgLSBjaGVja2VkICVkIHRpbWVzXG4iLAorCQkJCWZ0ZGktPnN0dWNrX3N0YXR1cyk7CisJCXdvcmtfZGVsYXlfaW5fbXNlYyA9IDEwMDsKKwl9IGVsc2UgaWYgKGZ0ZGktPmVudW1lcmF0ZWQgPT0gMCkgeworCQlpZiAoZnRkaV9lbGFuX2VudW1lcmF0ZVBDSShmdGRpKSA9PSAwKSB7CisJCQlmdGRpLT5lbnVtZXJhdGVkID0gMTsKKwkJCXdvcmtfZGVsYXlfaW5fbXNlYyA9IDI1MDsKKwkJfSBlbHNlCisJCQl3b3JrX2RlbGF5X2luX21zZWMgPSAxMDAwOworCX0gZWxzZSBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgeworCQlpZiAoZnRkaV9lbGFuX3NldHVwT0hDSShmdGRpKSA9PSAwKSB7CisJCQlmdGRpLT5pbml0aWFsaXplZCA9IDE7CisJCQl3b3JrX2RlbGF5X2luX21zZWMgPSA1MDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJpbml0aWFsaXplZCBmYWlsZWQgLSB0cnlpbmcgYWdhaW4gaW4gMTAgc2Vjb25kc1xuIik7CisJCQl3b3JrX2RlbGF5X2luX21zZWMgPSAxICoxMDAwOworCQl9CisJfSBlbHNlIGlmIChmdGRpLT5yZWdpc3RlcmVkID09IDApIHsKKwkJd29ya19kZWxheV9pbl9tc2VjID0gMTA7CisJCWlmIChmdGRpX2VsYW5faGNkX2luaXQoZnRkaSkgPT0gMCkgeworCQkJZnRkaS0+cmVnaXN0ZXJlZCA9IDE7CisJCX0gZWxzZQorCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJd29ya19kZWxheV9pbl9tc2VjID0gMjUwOworCX0gZWxzZSB7CisJCWlmIChmdGRpX2VsYW5fY2hlY2tpbmdQQ0koZnRkaSkgPT0gMCkgeworCQkJd29ya19kZWxheV9pbl9tc2VjID0gMjUwOworCQl9IGVsc2UgaWYgKGZ0ZGktPmNvbnRyb2xyZWcgJiAweDAwNDAwMDAwKSB7CisJCQlpZiAoZnRkaS0+Z29uZV9hd2F5ID4gMCkgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlBDSSBkZXZpY2UgZWplY3QgY29uZmlybWVkIHBsYXRmb3JtX2Rldi5kZXYucGFyZW50PSVwIHBsYXRmb3JtX2Rldi5kZXY9JXBcbiIsCisJCQkJCWZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucGFyZW50LAorCQkJCQkmZnRkaS0+cGxhdGZvcm1fZGV2LmRldik7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmZ0ZGktPnBsYXRmb3JtX2Rldik7CisJCQkJZnRkaS0+cGxhdGZvcm1fZGV2LmRldi5wYXJlbnQgPSBOVUxMOworCQkJCWZ0ZGktPnJlZ2lzdGVyZWQgPSAwOworCQkJCWZ0ZGktPmVudW1lcmF0ZWQgPSAwOworCQkJCWZ0ZGktPmNhcmRfZWplY3RlZCA9IDA7CisJCQkJZnRkaS0+aW5pdGlhbGl6ZWQgPSAwOworCQkJCWZ0ZGktPmdvbmVfYXdheSA9IDA7CisJCQl9IGVsc2UKKwkJCQlmdGRpX2VsYW5fZmx1c2hfdGFyZ2V0cyhmdGRpKTsKKwkJCXdvcmtfZGVsYXlfaW5fbXNlYyA9IDI1MDsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlBDSSBkZXZpY2UgaGFzIGRpc2FwcGVhcmVkXG4iKTsKKwkJCWZ0ZGlfZWxhbl9jYW5jZWxfdGFyZ2V0cyhmdGRpKTsKKwkJCXdvcmtfZGVsYXlfaW5fbXNlYyA9IDUwMDsKKwkJCWZ0ZGktPmVudW1lcmF0ZWQgPSAwOworCQkJZnRkaS0+aW5pdGlhbGl6ZWQgPSAwOworCQl9CisJfQorCWlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCWZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWZ0ZGlfc3RhdHVzX3JlcXVldWVfd29yayhmdGRpLAorCQkJCQkgbXNlY3NfdG9famlmZmllcyh3b3JrX2RlbGF5X2luX21zZWMpKTsKKwkJcmV0dXJuOworCX0KIH0KIAogCiAvKgotKiBmaWxlX29wZXJhdGlvbnMgZm9yIHRoZSBqdGFnIGludGVyZmFjZQotKgotKiB0aGUgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgaXMgaW5jcmVtZW50ZWQgb24gb3BlbigpCi0qIGFuZCBkZWNyZW1lbnRlZCBvbiByZWxlYXNlKCkKLSovCisgKiBmaWxlX29wZXJhdGlvbnMgZm9yIHRoZSBqdGFnIGludGVyZmFjZQorICoKKyAqIHRoZSB1c2FnZSBjb3VudCBmb3IgdGhlIGRldmljZSBpcyBpbmNyZW1lbnRlZCBvbiBvcGVuKCkKKyAqIGFuZCBkZWNyZW1lbnRlZCBvbiByZWxlYXNlKCkKKyAqLwogc3RhdGljIGludCBmdGRpX2VsYW5fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgc3VibWlub3I7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAotICAgICAgICBzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIGludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmZnRkaV9lbGFuX2RyaXZlciwgc3VibWlub3IpOworCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmZ0ZGlfZWxhbl9kcml2ZXIsIHN1Ym1pbm9yKTsKIAotICAgICAgICBpZiAoIWludGVyZmFjZSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLCBzdWJtaW5vcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotICAgICAgICAgICAgICAgIGlmICghZnRkaSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJmZ0ZGktPnN3X2xvY2spKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVFI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZ2V0X2tyZWYoZnRkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IGZ0ZGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmICghaW50ZXJmYWNlKSB7CisJCXByX2VycigiY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLCBzdWJtaW5vcik7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwkJaWYgKCFmdGRpKSB7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmZ0ZGktPnN3X2xvY2spKSB7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0gZWxzZSB7CisJCQkJZnRkaV9lbGFuX2dldF9rcmVmKGZ0ZGkpOworCQkJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZ0ZGk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbnQgZnRkaV9lbGFuX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLSAgICAgICAgaWYgKGZ0ZGkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgdXAoJmZ0ZGktPnN3X2xvY2spOyAgICAgICAgLyogZGVjcmVtZW50IHRoZSBjb3VudCBvbiBvdXIgZGV2aWNlICovCi0gICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKLSAgICAgICAgcmV0dXJuIDA7CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChmdGRpID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXVwKCZmdGRpLT5zd19sb2NrKTsgICAgICAgIC8qIGRlY3JlbWVudCB0aGUgY291bnQgb24gb3VyIGRldmljZSAqLworCWZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKKwlyZXR1cm4gMDsKIH0KIAogCiAvKgotKgotKiBibG9ja2luZyBidWxrIHJlYWRzIGFyZSB1c2VkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZQotKgotKi8KKyAqCisgKiBibG9ja2luZyBidWxrIHJlYWRzIGFyZSB1c2VkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZQorICoKKyAqLwogc3RhdGljIHNzaXplX3QgZnRkaV9lbGFuX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLSAgICAgICAgY2hhciBkYXRhWzMwICozICsgNF07Ci0gICAgICAgIGNoYXIgKmQgPSBkYXRhOwotICAgICAgICBpbnQgbSA9IChzaXplb2YoZGF0YSkgLSAxKSAvIDM7Ci0gICAgICAgIGludCBieXRlc19yZWFkID0gMDsKLSAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7Ci0gICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFbMF0gPSAwOwotICAgICAgaGF2ZTppZiAoZnRkaS0+YnVsa19pbl9sZWZ0ID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChjb3VudC0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcCA9ICsrZnRkaS0+YnVsa19pbl9sYXN0ICsgZnRkaS0+YnVsa19pbl9idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2xlZnQgLT0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc19yZWFkIDwgbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAlMDJYIiwgMHgwMDAwMDBGRiAmICpwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IG0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWZmZXIrKywgcCwgMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19yZWFkICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGF2ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBieXRlc19yZWFkOwotICAgICAgICB9Ci0gICAgICBtb3JlOmlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgcGFja2V0X2J5dGVzID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCA1MCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGVmdCA9IHBhY2tldF9ieXRlcyAtIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2xhc3QgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYXZlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FVElNRURPVVQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzX3JlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBieXRlc19yZWFkOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzX3JlYWQ7CisJY2hhciBkYXRhWzMwICozICsgNF07CisJY2hhciAqZCA9IGRhdGE7CisJaW50IG0gPSAoc2l6ZW9mKGRhdGEpIC0gMSkgLyAzOworCWludCBieXRlc19yZWFkID0gMDsKKwlpbnQgcmV0cnlfb25fZW1wdHkgPSAxMDsKKwlpbnQgcmV0cnlfb25fdGltZW91dCA9IDU7CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYXRhWzBdID0gMDsKK2hhdmU6aWYgKGZ0ZGktPmJ1bGtfaW5fbGVmdCA+IDApIHsKKwkJaWYgKGNvdW50LS0gPiAwKSB7CisJCQljaGFyICpwID0gKytmdGRpLT5idWxrX2luX2xhc3QgKyBmdGRpLT5idWxrX2luX2J1ZmZlcjsKKwkJCWZ0ZGktPmJ1bGtfaW5fbGVmdCAtPSAxOworCQkJaWYgKGJ5dGVzX3JlYWQgPCBtKSB7CisJCQkJZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsIDB4MDAwMDAwRkYgJiAqcCk7CisJCQl9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiBtKSB7CisJCQl9IGVsc2UKKwkJCQlkICs9IHNwcmludGYoZCwgIiAuLiIpOworCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIrKywgcCwgMSkpIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0gZWxzZSB7CisJCQkJYnl0ZXNfcmVhZCArPSAxOworCQkJCWdvdG8gaGF2ZTsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXR1cm4gYnl0ZXNfcmVhZDsKKwl9Cittb3JlOmlmIChjb3VudCA+IDApIHsKKwkJaW50IHBhY2tldF9ieXRlcyA9IDA7CisJCWludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKKwkJCQkJICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCQkgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCisJCQkJCSAgJnBhY2tldF9ieXRlcywgNTApOworCQlpZiAocGFja2V0X2J5dGVzID4gMikgeworCQkJZnRkaS0+YnVsa19pbl9sZWZ0ID0gcGFja2V0X2J5dGVzIC0gMjsKKwkJCWZ0ZGktPmJ1bGtfaW5fbGFzdCA9IDE7CisJCQlnb3RvIGhhdmU7CisJCX0gZWxzZSBpZiAocmV0dmFsID09IC1FVElNRURPVVQpIHsKKwkJCWlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7CisJCQkJZ290byBtb3JlOworCQkJfSBlbHNlIGlmIChieXRlc19yZWFkID4gMCkgeworCQkJCXJldHVybiBieXRlc19yZWFkOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfSBlbHNlIGlmIChyZXR2YWwgPT0gMCkgeworCQkJaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7CisJCQkJZ290byBtb3JlOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIGJ5dGVzX3JlYWQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIHJldHZhbDsKKwl9IGVsc2UKKwkJcmV0dXJuIGJ5dGVzX3JlYWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTcyOCw0NjcgKzcyNiw0NjAgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlpZiAoc3RhdHVzICYmICEoc3RhdHVzID09IC1FTk9FTlQgfHwgc3RhdHVzID09IC1FQ09OTlJFU0VUIHx8Ci0JICAgIHN0YXR1cyA9PSAtRVNIVVRET1dOKSkgewotICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInVyYj0lcCB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJSIKLSAgICAgICAgICAgICAgICAgICAgICAgICJkXG4iLCB1cmIsIHN0YXR1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgdXNiX2ZyZWVfY29oZXJlbnQodXJiLT5kZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworCQkJc3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwKKwkJCSJ1cmI9JXAgd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLCB1cmIsIHN0YXR1cyk7CisJfQorCXVzYl9mcmVlX2NvaGVyZW50KHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CiB9CiAKIHN0YXRpYyBpbnQgZmlsbF9idWZmZXJfd2l0aF9hbGxfcXVldWVkX2NvbW1hbmRzKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwKLSAgICAgICAgY2hhciAqYnVmLCBpbnQgY29tbWFuZF9zaXplLCBpbnQgdG90YWxfc2l6ZSkKKwkJCQkJCWNoYXIgKmJ1ZiwgaW50IGNvbW1hbmRfc2l6ZSwgaW50IHRvdGFsX3NpemUpCiB7Ci0gICAgICAgIGludCBlZF9jb21tYW5kcyA9IDA7Ci0gICAgICAgIGludCBiID0gMDsKLSAgICAgICAgaW50IEkgPSBjb21tYW5kX3NpemU7Ci0gICAgICAgIGludCBpID0gZnRkaS0+Y29tbWFuZF9oZWFkOwotICAgICAgICB3aGlsZSAoSS0tID4gMCkgewotICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFtDT01NQU5EX01BU0sgJgotICAgICAgICAgICAgICAgICAgICAgICAgaSsrXTsKLSAgICAgICAgICAgICAgICBpbnQgRiA9IGNvbW1hbmQtPmZvbGxvd3M7Ci0gICAgICAgICAgICAgICAgdTggKmYgPSBjb21tYW5kLT5idWZmZXI7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQtPmhlYWRlciAmIDB4ODApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVkX2NvbW1hbmRzIHw9IDEgPDwgKDB4MyAmIChjb21tYW5kLT5oZWFkZXIgPj4gNSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBidWZbYisrXSA9IGNvbW1hbmQtPmhlYWRlcjsKLSAgICAgICAgICAgICAgICBidWZbYisrXSA9IChjb21tYW5kLT5sZW5ndGggPj4gMCkgJiAweDAwRkY7Ci0gICAgICAgICAgICAgICAgYnVmW2IrK10gPSAoY29tbWFuZC0+bGVuZ3RoID4+IDgpICYgMHgwMEZGOwotICAgICAgICAgICAgICAgIGJ1ZltiKytdID0gY29tbWFuZC0+YWRkcmVzczsKLSAgICAgICAgICAgICAgICBidWZbYisrXSA9IGNvbW1hbmQtPndpZHRoOwotICAgICAgICAgICAgICAgIHdoaWxlIChGLS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZbYisrXSA9ICpmKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlZF9jb21tYW5kczsKKwlpbnQgZWRfY29tbWFuZHMgPSAwOworCWludCBiID0gMDsKKwlpbnQgSSA9IGNvbW1hbmRfc2l6ZTsKKwlpbnQgaSA9IGZ0ZGktPmNvbW1hbmRfaGVhZDsKKwl3aGlsZSAoSS0tID4gMCkgeworCQlzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbQ09NTUFORF9NQVNLICYKKwkJCQkJCQkgICAgICBpKytdOworCQlpbnQgRiA9IGNvbW1hbmQtPmZvbGxvd3M7CisJCXU4ICpmID0gY29tbWFuZC0+YnVmZmVyOworCQlpZiAoY29tbWFuZC0+aGVhZGVyICYgMHg4MCkgeworCQkJZWRfY29tbWFuZHMgfD0gMSA8PCAoMHgzICYgKGNvbW1hbmQtPmhlYWRlciA+PiA1KSk7CisJCX0KKwkJYnVmW2IrK10gPSBjb21tYW5kLT5oZWFkZXI7CisJCWJ1ZltiKytdID0gKGNvbW1hbmQtPmxlbmd0aCA+PiAwKSAmIDB4MDBGRjsKKwkJYnVmW2IrK10gPSAoY29tbWFuZC0+bGVuZ3RoID4+IDgpICYgMHgwMEZGOworCQlidWZbYisrXSA9IGNvbW1hbmQtPmFkZHJlc3M7CisJCWJ1ZltiKytdID0gY29tbWFuZC0+d2lkdGg7CisJCXdoaWxlIChGLS0gPiAwKSB7CisJCQlidWZbYisrXSA9ICpmKys7CisJCX0KKwl9CisJcmV0dXJuIGVkX2NvbW1hbmRzOwogfQogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl90b3RhbF9jb21tYW5kX3NpemUoc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgY29tbWFuZF9zaXplKQogewotICAgICAgICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0gICAgICAgIGludCBJID0gY29tbWFuZF9zaXplOwotICAgICAgICBpbnQgaSA9IGZ0ZGktPmNvbW1hbmRfaGVhZDsKLSAgICAgICAgd2hpbGUgKEktLSA+IDApIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbQ09NTUFORF9NQVNLICYKLSAgICAgICAgICAgICAgICAgICAgICAgIGkrK107Ci0gICAgICAgICAgICAgICAgdG90YWxfc2l6ZSArPSA1ICsgY29tbWFuZC0+Zm9sbG93czsKLSAgICAgICAgfSByZXR1cm4gdG90YWxfc2l6ZTsKKwlpbnQgdG90YWxfc2l6ZSA9IDA7CisJaW50IEkgPSBjb21tYW5kX3NpemU7CisJaW50IGkgPSBmdGRpLT5jb21tYW5kX2hlYWQ7CisJd2hpbGUgKEktLSA+IDApIHsKKwkJc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kW0NPTU1BTkRfTUFTSyAmCisJCQkJCQkJICAgICAgaSsrXTsKKwkJdG90YWxfc2l6ZSArPSA1ICsgY29tbWFuZC0+Zm9sbG93czsKKwl9IHJldHVybiB0b3RhbF9zaXplOwogfQogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9jb21tYW5kX2VuZ2luZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIGludCByZXR2YWw7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgaW50IGVkX2NvbW1hbmRzOwotICAgICAgICBpbnQgdG90YWxfc2l6ZTsKLSAgICAgICAgc3RydWN0IHVyYiAqdXJiOwotICAgICAgICBpbnQgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOwotICAgICAgICBpZiAoY29tbWFuZF9zaXplID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRvdGFsX3NpemUgPSBmdGRpX2VsYW5fdG90YWxfY29tbWFuZF9zaXplKGZ0ZGksIGNvbW1hbmRfc2l6ZSk7Ci0gICAgICAgIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIGlmICghdXJiKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIHVyYiB0byB3cml0ZSAlZCBjb21tIgotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHMgdG90YWxpbmcgJWQgYnl0ZXMgdG8gdGhlIFV4eHhcbiIsIGNvbW1hbmRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3NpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICB9Ci0gICAgICAgIGJ1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChmdGRpLT51ZGV2LCB0b3RhbF9zaXplLCBHRlBfS0VSTkVMLAotICAgICAgICAgICAgICAgICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0gICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIGJ1ZmZlciB0byB3cml0ZSAlZCBjIgotICAgICAgICAgICAgICAgICAgICAgICAgIm9tbWFuZHMgdG90YWxpbmcgJWQgYnl0ZXMgdG8gdGhlIFV4eHhcbiIsIGNvbW1hbmRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9zaXplKTsKLSAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgfQotICAgICAgICBlZF9jb21tYW5kcyA9IGZpbGxfYnVmZmVyX3dpdGhfYWxsX3F1ZXVlZF9jb21tYW5kcyhmdGRpLCBidWYsCi0gICAgICAgICAgICAgICAgY29tbWFuZF9zaXplLCB0b3RhbF9zaXplKTsKLSAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCBmdGRpLT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUoZnRkaS0+dWRldiwKLSAgICAgICAgICAgICAgICBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIpLCBidWYsIHRvdGFsX3NpemUsCi0gICAgICAgICAgICAgICAgZnRkaV9lbGFuX3dyaXRlX2J1bGtfY2FsbGJhY2ssIGZ0ZGkpOwotICAgICAgICB1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotICAgICAgICBpZiAoZWRfY29tbWFuZHMpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGRpYWdbNDAgKjMgKyA0XTsKLSAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKLSAgICAgICAgICAgICAgICBpbnQgbSA9IHRvdGFsX3NpemU7Ci0gICAgICAgICAgICAgICAgdTggKmMgPSBidWY7Ci0gICAgICAgICAgICAgICAgaW50IHMgPSAoc2l6ZW9mKGRpYWcpIC0gMSkgLyAzOwotICAgICAgICAgICAgICAgIGRpYWdbMF0gPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChzLS0gPiAwICYmIG0tLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID4gMCB8fCBtID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsICpjKyspOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiIC4uIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJmYWlsZWQgJWQgdG8gc3VibWl0IHVyYiAlcCB0byB3cml0ZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiJWQgY29tbWFuZHMgdG90YWxpbmcgJWQgYnl0ZXMgdG8gdGhlIFV4eHhcbiIsIHJldHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVyYiwgY29tbWFuZF9zaXplLCB0b3RhbF9zaXplKTsKLSAgICAgICAgICAgICAgICB1c2JfZnJlZV9jb2hlcmVudChmdGRpLT51ZGV2LCB0b3RhbF9zaXplLCBidWYsIHVyYi0+dHJhbnNmZXJfZG1hKTsKLSAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICB9Ci0gICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOyAgICAgICAgLyogcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoaXMgdXJiLAotICAgICAgICAgICAgICAgIHRoZSBVU0IgY29yZSB3aWxsIGV2ZW50dWFsbHkgZnJlZSBpdCBlbnRpcmVseSAqLwotICAgICAgICBmdGRpLT5jb21tYW5kX2hlYWQgKz0gY29tbWFuZF9zaXplOwotICAgICAgICBmdGRpX2VsYW5fa2lja19yZXNwb25kX3F1ZXVlKGZ0ZGkpOwotICAgICAgICByZXR1cm4gMDsKKwlpbnQgcmV0dmFsOworCWNoYXIgKmJ1ZjsKKwlpbnQgZWRfY29tbWFuZHM7CisJaW50IHRvdGFsX3NpemU7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisJaWYgKGNvbW1hbmRfc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKwl0b3RhbF9zaXplID0gZnRkaV9lbGFuX3RvdGFsX2NvbW1hbmRfc2l6ZShmdGRpLCBjb21tYW5kX3NpemUpOworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIHVyYiB0byB3cml0ZSAlZCBjb21tYW5kcyB0b3RhbGluZyAlZCBieXRlcyB0byB0aGUgVXh4eFxuIiwKKwkJCWNvbW1hbmRfc2l6ZSwgdG90YWxfc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQoZnRkaS0+dWRldiwgdG90YWxfc2l6ZSwgR0ZQX0tFUk5FTCwKKwkJCQkgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGEgYnVmZmVyIHRvIHdyaXRlICVkIGNvbW1hbmRzIHRvdGFsaW5nICVkIGJ5dGVzIHRvIHRoZSBVeHh4XG4iLAorCQkJY29tbWFuZF9zaXplLCB0b3RhbF9zaXplKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwllZF9jb21tYW5kcyA9IGZpbGxfYnVmZmVyX3dpdGhfYWxsX3F1ZXVlZF9jb21tYW5kcyhmdGRpLCBidWYsCisJCQkJCQkJICAgY29tbWFuZF9zaXplLCB0b3RhbF9zaXplKTsKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGZ0ZGktPnVkZXYsIHVzYl9zbmRidWxrcGlwZShmdGRpLT51ZGV2LAorCQkJCQkJCSAgIGZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksIGJ1ZiwgdG90YWxfc2l6ZSwKKwkJCSAgZnRkaV9lbGFuX3dyaXRlX2J1bGtfY2FsbGJhY2ssIGZ0ZGkpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJaWYgKGVkX2NvbW1hbmRzKSB7CisJCWNoYXIgZGlhZ1s0MCAqMyArIDRdOworCQljaGFyICpkID0gZGlhZzsKKwkJaW50IG0gPSB0b3RhbF9zaXplOworCQl1OCAqYyA9IGJ1ZjsKKwkJaW50IHMgPSAoc2l6ZW9mKGRpYWcpIC0gMSkgLyAzOworCQlkaWFnWzBdID0gMDsKKwkJd2hpbGUgKHMtLSA+IDAgJiYgbS0tID4gMCkgeworCQkJaWYgKHMgPiAwIHx8IG0gPT0gMCkgeworCQkJCWQgKz0gc3ByaW50ZihkLCAiICUwMlgiLCAqYysrKTsKKwkJCX0gZWxzZQorCQkJCWQgKz0gc3ByaW50ZihkLCAiIC4uIik7CisJCX0KKwl9CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCAlZCB0byBzdWJtaXQgdXJiICVwIHRvIHdyaXRlICVkIGNvbW1hbmRzIHRvdGFsaW5nICVkIGJ5dGVzIHRvIHRoZSBVeHh4XG4iLAorCQkJcmV0dmFsLCB1cmIsIGNvbW1hbmRfc2l6ZSwgdG90YWxfc2l6ZSk7CisJCXVzYl9mcmVlX2NvaGVyZW50KGZ0ZGktPnVkZXYsIHRvdGFsX3NpemUsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJdXNiX2ZyZWVfdXJiKHVyYik7ICAgICAgICAvKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsCisJCQkJICAgICB0aGUgVVNCIGNvcmUgd2lsbCBldmVudHVhbGx5IGZyZWUgaXQgZW50aXJlbHkgKi8KKwlmdGRpLT5jb21tYW5kX2hlYWQgKz0gY29tbWFuZF9zaXplOworCWZ0ZGlfZWxhbl9raWNrX3Jlc3BvbmRfcXVldWUoZnRkaSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9kb19jYWxsYmFjayhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksCi0gICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0LCB1OCAqYnVmZmVyLCBpbnQgbGVuZ3RoKQorCQkJCSAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQsIHU4ICpidWZmZXIsIGludCBsZW5ndGgpCiB7Ci0gICAgICAgIHN0cnVjdCB1cmIgKnVyYiA9IHRhcmdldC0+dXJiOwotICAgICAgICBpbnQgaGFsdGVkID0gdGFyZ2V0LT5oYWx0ZWQ7Ci0gICAgICAgIGludCBza2lwcGVkID0gdGFyZ2V0LT5za2lwcGVkOwotICAgICAgICBpbnQgYWN0dWFsID0gdGFyZ2V0LT5hY3R1YWw7Ci0gICAgICAgIGludCBub25fbnVsbCA9IHRhcmdldC0+bm9uX251bGw7Ci0gICAgICAgIGludCB0b2dnbGVfYml0cyA9IHRhcmdldC0+dG9nZ2xlX2JpdHM7Ci0gICAgICAgIGludCBlcnJvcl9jb3VudCA9IHRhcmdldC0+ZXJyb3JfY291bnQ7Ci0gICAgICAgIGludCBjb25kaXRpb25fY29kZSA9IHRhcmdldC0+Y29uZGl0aW9uX2NvZGU7Ci0gICAgICAgIGludCByZXBlYXRfbnVtYmVyID0gdGFyZ2V0LT5yZXBlYXRfbnVtYmVyOwotICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICosIHN0cnVjdCB1cmIgKiwgdTggKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCi0gICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50KSA9IHRhcmdldC0+Y2FsbGJhY2s7Ci0gICAgICAgIHRhcmdldC0+YWN0aXZlIC09IDE7Ci0gICAgICAgIHRhcmdldC0+Y2FsbGJhY2sgPSBOVUxMOwotICAgICAgICAoKmNhbGxiYWNrKSAodGFyZ2V0LT5lbmRwLCB1cmIsIGJ1ZmZlciwgbGVuZ3RoLCB0b2dnbGVfYml0cywKLSAgICAgICAgICAgICAgICBlcnJvcl9jb3VudCwgY29uZGl0aW9uX2NvZGUsIHJlcGVhdF9udW1iZXIsIGhhbHRlZCwgc2tpcHBlZCwKLSAgICAgICAgICAgICAgICBhY3R1YWwsIG5vbl9udWxsKTsKKwlzdHJ1Y3QgdXJiICp1cmIgPSB0YXJnZXQtPnVyYjsKKwlpbnQgaGFsdGVkID0gdGFyZ2V0LT5oYWx0ZWQ7CisJaW50IHNraXBwZWQgPSB0YXJnZXQtPnNraXBwZWQ7CisJaW50IGFjdHVhbCA9IHRhcmdldC0+YWN0dWFsOworCWludCBub25fbnVsbCA9IHRhcmdldC0+bm9uX251bGw7CisJaW50IHRvZ2dsZV9iaXRzID0gdGFyZ2V0LT50b2dnbGVfYml0czsKKwlpbnQgZXJyb3JfY291bnQgPSB0YXJnZXQtPmVycm9yX2NvdW50OworCWludCBjb25kaXRpb25fY29kZSA9IHRhcmdldC0+Y29uZGl0aW9uX2NvZGU7CisJaW50IHJlcGVhdF9udW1iZXIgPSB0YXJnZXQtPnJlcGVhdF9udW1iZXI7CisJdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqLCBzdHJ1Y3QgdXJiICosIHU4ICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAorCQkJICBpbnQsIGludCwgaW50LCBpbnQpID0gdGFyZ2V0LT5jYWxsYmFjazsKKwl0YXJnZXQtPmFjdGl2ZSAtPSAxOworCXRhcmdldC0+Y2FsbGJhY2sgPSBOVUxMOworCSgqY2FsbGJhY2spICh0YXJnZXQtPmVuZHAsIHVyYiwgYnVmZmVyLCBsZW5ndGgsIHRvZ2dsZV9iaXRzLAorCQkgICAgIGVycm9yX2NvdW50LCBjb25kaXRpb25fY29kZSwgcmVwZWF0X251bWJlciwgaGFsdGVkLCBza2lwcGVkLAorCQkgICAgIGFjdHVhbCwgbm9uX251bGwpOwogfQogCiBzdGF0aWMgY2hhciAqaGF2ZV9lZF9zZXRfcmVzcG9uc2Uoc3RydWN0IHVzYl9mdGRpICpmdGRpLAotICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCwgdTE2IGVkX2xlbmd0aCwgaW50IGVkX251bWJlciwgaW50IGVkX3R5cGUsCi0gICAgICAgIGNoYXIgKmIpCisJCQkJICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCwgdTE2IGVkX2xlbmd0aCwgaW50IGVkX251bWJlciwgaW50IGVkX3R5cGUsCisJCQkJICBjaGFyICpiKQogewotICAgICAgICBpbnQgcGF5bG9hZCA9IChlZF9sZW5ndGggPj4gMCkgJiAweDA3RkY7Ci0gICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgIHRhcmdldC0+YWN0dWFsID0gMDsKLSAgICAgICAgdGFyZ2V0LT5ub25fbnVsbCA9IChlZF9sZW5ndGggPj4gMTUpICYgMHgwMDAxOwotICAgICAgICB0YXJnZXQtPnJlcGVhdF9udW1iZXIgPSAoZWRfbGVuZ3RoID4+IDExKSAmIDB4MDAwRjsKLSAgICAgICAgaWYgKGVkX3R5cGUgPT0gMHgwMikgewotICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkID09IDAgfHwgdGFyZ2V0LT5hYmFuZG9uaW5nID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIDQgKyBmdGRpLT5yZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZWNlaXZlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnRkaS0+cmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNCArIHBheWxvYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZWRfdHlwZSA9PSAweDAzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgPT0gMCB8fCB0YXJnZXQtPmFiYW5kb25pbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmFiYW5kb25pbmcgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgNCArIGZ0ZGktPnJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlY2VpdmVkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdGRpLT5yZXNwb25zZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0ICsgcGF5bG9hZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChlZF90eXBlID09IDB4MDEpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXQtPmFiYW5kb25pbmcgPSAwOwotICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkKTsKLSAgICAgICAgICAgICAgICBmdGRpLT5yZWNlaXZlZCA9IDA7Ci0gICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OwotICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnRkaS0+cmVzcG9uc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKLSAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgNCArIGZ0ZGktPnJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgZnRkaS0+cmVjZWl2ZWQgPSAwOwotICAgICAgICAgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKLSAgICAgICAgICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ0ZGktPnJlc3BvbnNlOwotICAgICAgICB9CisJaW50IHBheWxvYWQgPSAoZWRfbGVuZ3RoID4+IDApICYgMHgwN0ZGOworCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJdGFyZ2V0LT5hY3R1YWwgPSAwOworCXRhcmdldC0+bm9uX251bGwgPSAoZWRfbGVuZ3RoID4+IDE1KSAmIDB4MDAwMTsKKwl0YXJnZXQtPnJlcGVhdF9udW1iZXIgPSAoZWRfbGVuZ3RoID4+IDExKSAmIDB4MDAwRjsKKwlpZiAoZWRfdHlwZSA9PSAweDAyKSB7CisJCWlmIChwYXlsb2FkID09IDAgfHwgdGFyZ2V0LT5hYmFuZG9uaW5nID4gMCkgeworCQkJdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCWZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIDQgKyBmdGRpLT5yZXNwb25zZSwKKwkJCQkJICAgICAgcGF5bG9hZCk7CisJCQlmdGRpLT5yZWNlaXZlZCA9IDA7CisJCQlmdGRpLT5leHBlY3RlZCA9IDQ7CisJCQlmdGRpLT5lZF9mb3VuZCA9IDA7CisJCQlyZXR1cm4gZnRkaS0+cmVzcG9uc2U7CisJCX0gZWxzZSB7CisJCQlmdGRpLT5leHBlY3RlZCA9IDQgKyBwYXlsb2FkOworCQkJZnRkaS0+ZWRfZm91bmQgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJcmV0dXJuIGI7CisJCX0KKwl9IGVsc2UgaWYgKGVkX3R5cGUgPT0gMHgwMykgeworCQlpZiAocGF5bG9hZCA9PSAwIHx8IHRhcmdldC0+YWJhbmRvbmluZyA+IDApIHsKKwkJCXRhcmdldC0+YWJhbmRvbmluZyA9IDA7CisJCQltdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQlmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCisJCQkJCSAgICAgIHBheWxvYWQpOworCQkJZnRkaS0+cmVjZWl2ZWQgPSAwOworCQkJZnRkaS0+ZXhwZWN0ZWQgPSA0OworCQkJZnRkaS0+ZWRfZm91bmQgPSAwOworCQkJcmV0dXJuIGZ0ZGktPnJlc3BvbnNlOworCQl9IGVsc2UgeworCQkJZnRkaS0+ZXhwZWN0ZWQgPSA0ICsgcGF5bG9hZDsKKwkJCWZ0ZGktPmVkX2ZvdW5kID0gMTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXJldHVybiBiOworCQl9CisJfSBlbHNlIGlmIChlZF90eXBlID09IDB4MDEpIHsKKwkJdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKKwkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQlmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCisJCQkJICAgICAgcGF5bG9hZCk7CisJCWZ0ZGktPnJlY2VpdmVkID0gMDsKKwkJZnRkaS0+ZXhwZWN0ZWQgPSA0OworCQlmdGRpLT5lZF9mb3VuZCA9IDA7CisJCXJldHVybiBmdGRpLT5yZXNwb25zZTsKKwl9IGVsc2UgeworCQl0YXJnZXQtPmFiYW5kb25pbmcgPSAwOworCQltdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCWZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIDQgKyBmdGRpLT5yZXNwb25zZSwKKwkJCQkgICAgICBwYXlsb2FkKTsKKwkJZnRkaS0+cmVjZWl2ZWQgPSAwOworCQlmdGRpLT5leHBlY3RlZCA9IDQ7CisJCWZ0ZGktPmVkX2ZvdW5kID0gMDsKKwkJcmV0dXJuIGZ0ZGktPnJlc3BvbnNlOworCX0KIH0KIAogc3RhdGljIGNoYXIgKmhhdmVfZWRfZ2V0X3Jlc3BvbnNlKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwKLSAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQsIHUxNiBlZF9sZW5ndGgsIGludCBlZF9udW1iZXIsIGludCBlZF90eXBlLAotICAgICAgICBjaGFyICpiKQorCQkJCSAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQsIHUxNiBlZF9sZW5ndGgsIGludCBlZF9udW1iZXIsIGludCBlZF90eXBlLAorCQkJCSAgY2hhciAqYikKIHsKLSAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgdGFyZ2V0LT5jb25kaXRpb25fY29kZSA9IFREX0RFVk5PVFJFU1A7Ci0gICAgICAgIHRhcmdldC0+YWN0dWFsID0gKGVkX2xlbmd0aCA+PiAwKSAmIDB4MDFGRjsKLSAgICAgICAgdGFyZ2V0LT5ub25fbnVsbCA9IChlZF9sZW5ndGggPj4gMTUpICYgMHgwMDAxOwotICAgICAgICB0YXJnZXQtPnJlcGVhdF9udW1iZXIgPSAoZWRfbGVuZ3RoID4+IDExKSAmIDB4MDAwRjsKLSAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICBpZiAodGFyZ2V0LT5hY3RpdmUpCi0gICAgICAgICAgICAgICAgZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgTlVMTCwgMCk7Ci0gICAgICAgIHRhcmdldC0+YWJhbmRvbmluZyA9IDA7Ci0gICAgICAgIGZ0ZGktPnJlY2VpdmVkID0gMDsKLSAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OwotICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDA7Ci0gICAgICAgIHJldHVybiBmdGRpLT5yZXNwb25zZTsKKwltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCXRhcmdldC0+Y29uZGl0aW9uX2NvZGUgPSBURF9ERVZOT1RSRVNQOworCXRhcmdldC0+YWN0dWFsID0gKGVkX2xlbmd0aCA+PiAwKSAmIDB4MDFGRjsKKwl0YXJnZXQtPm5vbl9udWxsID0gKGVkX2xlbmd0aCA+PiAxNSkgJiAweDAwMDE7CisJdGFyZ2V0LT5yZXBlYXRfbnVtYmVyID0gKGVkX2xlbmd0aCA+PiAxMSkgJiAweDAwMEY7CisJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCWlmICh0YXJnZXQtPmFjdGl2ZSkKKwkJZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgTlVMTCwgMCk7CisJdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKKwlmdGRpLT5yZWNlaXZlZCA9IDA7CisJZnRkaS0+ZXhwZWN0ZWQgPSA0OworCWZ0ZGktPmVkX2ZvdW5kID0gMDsKKwlyZXR1cm4gZnRkaS0+cmVzcG9uc2U7CiB9CiAKIAogLyoKLSogVGhlIGVuZ2luZSB0cmllcyB0byBlbXB0eSB0aGUgRlRESSBmaWZvCi0qCi0qIGFsbCByZXNwb25zZXMgZm91bmQgaW4gdGhlIGZpZm8gZGF0YSBhcmUgZGlzcGF0Y2hlZCB0aHVzCi0qIHRoZSByZXNwb25zZSBidWZmZXIgY2FuIG9ubHkgZXZlciBob2xkIGEgbWF4aW11bSBzaXplZAotKiByZXNwb25zZSBmcm9tIHRoZSBVeHh4LgotKgotKi8KKyAqIFRoZSBlbmdpbmUgdHJpZXMgdG8gZW1wdHkgdGhlIEZUREkgZmlmbworICoKKyAqIGFsbCByZXNwb25zZXMgZm91bmQgaW4gdGhlIGZpZm8gZGF0YSBhcmUgZGlzcGF0Y2hlZCB0aHVzCisgKiB0aGUgcmVzcG9uc2UgYnVmZmVyIGNhbiBvbmx5IGV2ZXIgaG9sZCBhIG1heGltdW0gc2l6ZWQKKyAqIHJlc3BvbnNlIGZyb20gdGhlIFV4eHguCisgKgorICovCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9yZXNwb25kX2VuZ2luZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIHU4ICpiID0gZnRkaS0+cmVzcG9uc2UgKyBmdGRpLT5yZWNlaXZlZDsKLSAgICAgICAgaW50IGJ5dGVzX3JlYWQgPSAwOwotICAgICAgICBpbnQgcmV0cnlfb25fZW1wdHkgPSAxOwotICAgICAgICBpbnQgcmV0cnlfb25fdGltZW91dCA9IDM7Ci0gICAgICAgIGludCBlbXB0eV9wYWNrZXRzID0gMDsKLSAgICAgIHJlYWQ6ewotICAgICAgICAgICAgICAgIGludCBwYWNrZXRfYnl0ZXMgPSAwOwotICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZidWxrcGlwZShmdGRpLT51ZGV2LCBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDUwMCk7Ci0gICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07Ci0gICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7Ci0gICAgICAgICAgICAgICAgaW50IG0gPSBwYWNrZXRfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgdTggKmMgPSBmdGRpLT5idWxrX2luX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICBpbnQgcyA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7Ci0gICAgICAgICAgICAgICAgZGlhZ1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHMtLSA+IDAgJiYgbS0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPiAwIHx8IG0gPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAlMDJYIiwgKmMrKyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGVmdCA9IHBhY2tldF9ieXRlcyAtIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2xhc3QgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYXZlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FVElNRURPVVQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCB3aXRoIHBhY2tlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0X2J5dGVzID0gJWQgd2l0aCB0b3RhbCAlZCBieXRlcyVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9ieXRlcywgYnl0ZXNfcmVhZCwgZGlhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiT05MWSAlZCBieXRlcyVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3JlYWQsIGRpYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCB3aXRoIHBhY2tlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0X2J5dGVzID0gJWQgd2l0aCB0b3RhbCAlZCBieXRlcyVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9ieXRlcywgYnl0ZXNfcmVhZCwgZGlhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FSUxTRVEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVycm9yID0gJWQgd2l0aCBwYWNrZXRfYnl0ZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPSAlZCB3aXRoIHRvdGFsICVkIGJ5dGVzJXNcbiIsIHJldHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVycm9yID0gJWQgd2l0aCBwYWNrZXRfYnl0ZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPSAlZCB3aXRoIHRvdGFsICVkIGJ5dGVzJXNcbiIsIHJldHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPT0gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzMCA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzMSA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlfcGFja2V0cyArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMwID09IDB4MzEgJiYgczEgPT0gMHg2MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1vcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzMCA9PSAweDMxICYmIHMxID09IDB4MDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl9lbXB0eS0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIG1vcmU6ewotICAgICAgICAgICAgICAgIGdvdG8gcmVhZDsKLSAgICAgICAgfQotICAgICAgaGF2ZTppZiAoZnRkaS0+YnVsa19pbl9sZWZ0ID4gMCkgewotICAgICAgICAgICAgICAgIHU4IGMgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsrK2Z0ZGktPmJ1bGtfaW5fbGFzdF07Ci0gICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCArPSAxOwotICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGVmdCAtPSAxOwotICAgICAgICAgICAgICAgIGlmIChmdGRpLT5yZWNlaXZlZCA9PSAwICYmIGMgPT0gMHhGRikgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYXZlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKmIrKyA9IGM7Ci0gICAgICAgICAgICAgICAgaWYgKCsrZnRkaS0+cmVjZWl2ZWQgPCBmdGRpLT5leHBlY3RlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYXZlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+ZWRfZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBlZF9udW1iZXIgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gNSkgJiAweDAzOwotICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGVkX2xlbmd0aCA9IChmdGRpLT5yZXNwb25zZVsyXSA8PCA4KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlc3BvbnNlWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkX251bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF5bG9hZCA9IChlZF9sZW5ndGggPj4gMCkgJiAweDA3RkY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG0gPSBwYXlsb2FkOwotICAgICAgICAgICAgICAgICAgICAgICAgdTggKmMgPSA0ICsgZnRkaS0+cmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcyA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzLS0gPiAwICYmIG0tLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPiAwIHx8IG0gPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiICUwMlgiLCAqYysrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIDQgKyBmdGRpLT5yZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZWNlaXZlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gZnRkaS0+cmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5leHBlY3RlZCA9PSA4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1OCBidXNjbWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzcG9uZF9oZWFkID0gZnRkaS0+cmVzcG9uZF9oZWFkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yZXNwb25kICpyZXNwb25kID0gJmZ0ZGktPnJlc3BvbmRbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1BPTkRfTUFTSyAmIHJlc3BvbmRfaGVhZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1MzIgZGF0YSA9IGZ0ZGktPnJlc3BvbnNlWzddOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA8PD0gODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgfD0gZnRkaS0+cmVzcG9uc2VbNl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhIDw8PSA4OwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB8PSBmdGRpLT5yZXNwb25zZVs1XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPDw9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHw9IGZ0ZGktPnJlc3BvbnNlWzRdOwotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3BvbmQtPnZhbHVlID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICpyZXNwb25kLT5yZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZWNlaXZlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gZnRkaS0+cmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBidXNjbWQgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gMCkgJiAweDBGOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1c2NtZCA9PSAweDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1c2NtZCA9PSAweDAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1c2NtZCA9PSAweDA2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1c2NtZCA9PSAweDBBKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiVXh4eCB1bmtub3duKCUwWCkgdmEiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImx1ZSA9ICUwOFhcbiIsIGJ1c2NtZCwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZnRkaS0+cmVzcG9uc2VbMF0gJiAweDgwKSA9PSAweDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYXZlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVkX251bWJlciA9IChmdGRpLT5yZXNwb25zZVswXSA+PiA1KSAmIDB4MDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlZF90eXBlID0gKGZ0ZGktPnJlc3BvbnNlWzBdID4+IDApICYgMHgwMzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGVkX2xlbmd0aCA9IChmdGRpLT5yZXNwb25zZVsyXSA8PCA4KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVzcG9uc2VbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZF9udW1iZXJdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmhhbHRlZCA9IChmdGRpLT5yZXNwb25zZVswXSA+PiAzKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5za2lwcGVkID0gKGZ0ZGktPnJlc3BvbnNlWzBdID4+IDIpICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPnRvZ2dsZV9iaXRzID0gKGZ0ZGktPnJlc3BvbnNlWzNdID4+IDYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAweDAzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmVycm9yX2NvdW50ID0gKGZ0ZGktPnJlc3BvbnNlWzNdID4+IDQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAweDAzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmNvbmRpdGlvbl9jb2RlID0gKGZ0ZGktPnJlc3BvbnNlWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDNdID4+IDApICYgMHgwRjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmdGRpLT5yZXNwb25zZVswXSAmIDB4MTApID09IDB4MDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gaGF2ZV9lZF9zZXRfcmVzcG9uc2UoZnRkaSwgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRfbGVuZ3RoLCBlZF9udW1iZXIsIGVkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGhhdmVfZWRfZ2V0X3Jlc3BvbnNlKGZ0ZGksIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkX2xlbmd0aCwgZWRfbnVtYmVyLCBlZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYXZlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIG1vcmU7CisJdTggKmIgPSBmdGRpLT5yZXNwb25zZSArIGZ0ZGktPnJlY2VpdmVkOworCWludCBieXRlc19yZWFkID0gMDsKKwlpbnQgcmV0cnlfb25fZW1wdHkgPSAxOworCWludCByZXRyeV9vbl90aW1lb3V0ID0gMzsKKwlpbnQgZW1wdHlfcGFja2V0cyA9IDA7CityZWFkOnsKKwkJaW50IHBhY2tldF9ieXRlcyA9IDA7CisJCWludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKKwkJCQkJICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCQkgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCisJCQkJCSAgJnBhY2tldF9ieXRlcywgNTAwKTsKKwkJY2hhciBkaWFnWzMwICozICsgNF07CisJCWNoYXIgKmQgPSBkaWFnOworCQlpbnQgbSA9IHBhY2tldF9ieXRlczsKKwkJdTggKmMgPSBmdGRpLT5idWxrX2luX2J1ZmZlcjsKKwkJaW50IHMgPSAoc2l6ZW9mKGRpYWcpIC0gMSkgLyAzOworCQlkaWFnWzBdID0gMDsKKwkJd2hpbGUgKHMtLSA+IDAgJiYgbS0tID4gMCkgeworCQkJaWYgKHMgPiAwIHx8IG0gPT0gMCkgeworCQkJCWQgKz0gc3ByaW50ZihkLCAiICUwMlgiLCAqYysrKTsKKwkJCX0gZWxzZQorCQkJCWQgKz0gc3ByaW50ZihkLCAiIC4uIik7CisJCX0KKwkJaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKKwkJCWZ0ZGktPmJ1bGtfaW5fbGVmdCA9IHBhY2tldF9ieXRlcyAtIDI7CisJCQlmdGRpLT5idWxrX2luX2xhc3QgPSAxOworCQkJZ290byBoYXZlOworCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7CisJCQlpZiAocmV0cnlfb25fdGltZW91dC0tID4gMCkgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCB3aXRoIHBhY2tldF9ieXRlcyA9ICVkIHdpdGggdG90YWwgJWQgYnl0ZXMlc1xuIiwKKwkJCQkJcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKKwkJCQlnb3RvIG1vcmU7CisJCQl9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiAwKSB7CisJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiT05MWSAlZCBieXRlcyVzXG4iLAorCQkJCQlieXRlc19yZWFkLCBkaWFnKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiVElNRUQgT1VUIHdpdGggcGFja2V0X2J5dGVzID0gJWQgd2l0aCB0b3RhbCAlZCBieXRlcyVzXG4iLAorCQkJCQlwYWNrZXRfYnl0ZXMsIGJ5dGVzX3JlYWQsIGRpYWcpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAtRUlMU0VRKSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkIHdpdGggcGFja2V0X2J5dGVzID0gJWQgd2l0aCB0b3RhbCAlZCBieXRlcyVzXG4iLAorCQkJCXJldHZhbCwgcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0gZWxzZSBpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkIHdpdGggcGFja2V0X2J5dGVzID0gJWQgd2l0aCB0b3RhbCAlZCBieXRlcyVzXG4iLAorCQkJCXJldHZhbCwgcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0gZWxzZSBpZiAocGFja2V0X2J5dGVzID09IDIpIHsKKwkJCXVuc2lnbmVkIGNoYXIgczAgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKKwkJCXVuc2lnbmVkIGNoYXIgczEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKKwkJCWVtcHR5X3BhY2tldHMgKz0gMTsKKwkJCWlmIChzMCA9PSAweDMxICYmIHMxID09IDB4NjApIHsKKwkJCQlpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKwkJCQkJZ290byBtb3JlOworCQkJCX0gZWxzZQorCQkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSBpZiAoczAgPT0gMHgzMSAmJiBzMSA9PSAweDAwKSB7CisJCQkJaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7CisJCQkJCWdvdG8gbW9yZTsKKwkJCQl9IGVsc2UKKwkJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCWlmIChyZXRyeV9vbl9lbXB0eS0tID4gMCkgeworCQkJCQlnb3RvIG1vcmU7CisJCQkJfSBlbHNlCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA9PSAxKSB7CisJCQlpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKwkJCQlnb3RvIG1vcmU7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZXRyeV9vbl9lbXB0eS0tID4gMCkgeworCQkJCWdvdG8gbW9yZTsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAwOworCQl9CisJfQorbW9yZTp7CisJCWdvdG8gcmVhZDsKKwl9CitoYXZlOmlmIChmdGRpLT5idWxrX2luX2xlZnQgPiAwKSB7CisJCXU4IGMgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsrK2Z0ZGktPmJ1bGtfaW5fbGFzdF07CisJCWJ5dGVzX3JlYWQgKz0gMTsKKwkJZnRkaS0+YnVsa19pbl9sZWZ0IC09IDE7CisJCWlmIChmdGRpLT5yZWNlaXZlZCA9PSAwICYmIGMgPT0gMHhGRikgeworCQkJZ290byBoYXZlOworCQl9IGVsc2UKKwkJCSpiKysgPSBjOworCQlpZiAoKytmdGRpLT5yZWNlaXZlZCA8IGZ0ZGktPmV4cGVjdGVkKSB7CisJCQlnb3RvIGhhdmU7CisJCX0gZWxzZSBpZiAoZnRkaS0+ZWRfZm91bmQpIHsKKwkJCWludCBlZF9udW1iZXIgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gNSkgJiAweDAzOworCQkJdTE2IGVkX2xlbmd0aCA9IChmdGRpLT5yZXNwb25zZVsyXSA8PCA4KSB8CisJCQkJZnRkaS0+cmVzcG9uc2VbMV07CisJCQlzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRfbnVtYmVyXTsKKwkJCWludCBwYXlsb2FkID0gKGVkX2xlbmd0aCA+PiAwKSAmIDB4MDdGRjsKKwkJCWNoYXIgZGlhZ1szMCAqMyArIDRdOworCQkJY2hhciAqZCA9IGRpYWc7CisJCQlpbnQgbSA9IHBheWxvYWQ7CisJCQl1OCAqYyA9IDQgKyBmdGRpLT5yZXNwb25zZTsKKwkJCWludCBzID0gKHNpemVvZihkaWFnKSAtIDEpIC8gMzsKKwkJCWRpYWdbMF0gPSAwOworCQkJd2hpbGUgKHMtLSA+IDAgJiYgbS0tID4gMCkgeworCQkJCWlmIChzID4gMCB8fCBtID09IDApIHsKKwkJCQkJZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsICpjKyspOworCQkJCX0gZWxzZQorCQkJCQlkICs9IHNwcmludGYoZCwgIiAuLiIpOworCQkJfQorCQkJZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgNCArIGZ0ZGktPnJlc3BvbnNlLAorCQkJCQkgICAgICBwYXlsb2FkKTsKKwkJCWZ0ZGktPnJlY2VpdmVkID0gMDsKKwkJCWZ0ZGktPmV4cGVjdGVkID0gNDsKKwkJCWZ0ZGktPmVkX2ZvdW5kID0gMDsKKwkJCWIgPSBmdGRpLT5yZXNwb25zZTsKKwkJCWdvdG8gaGF2ZTsKKwkJfSBlbHNlIGlmIChmdGRpLT5leHBlY3RlZCA9PSA4KSB7CisJCQl1OCBidXNjbWQ7CisJCQlpbnQgcmVzcG9uZF9oZWFkID0gZnRkaS0+cmVzcG9uZF9oZWFkKys7CisJCQlzdHJ1Y3QgdTEzMl9yZXNwb25kICpyZXNwb25kID0gJmZ0ZGktPnJlc3BvbmRbCisJCQkJUkVTUE9ORF9NQVNLICYgcmVzcG9uZF9oZWFkXTsKKwkJCXUzMiBkYXRhID0gZnRkaS0+cmVzcG9uc2VbN107CisJCQlkYXRhIDw8PSA4OworCQkJZGF0YSB8PSBmdGRpLT5yZXNwb25zZVs2XTsKKwkJCWRhdGEgPDw9IDg7CisJCQlkYXRhIHw9IGZ0ZGktPnJlc3BvbnNlWzVdOworCQkJZGF0YSA8PD0gODsKKwkJCWRhdGEgfD0gZnRkaS0+cmVzcG9uc2VbNF07CisJCQkqcmVzcG9uZC0+dmFsdWUgPSBkYXRhOworCQkJKnJlc3BvbmQtPnJlc3VsdCA9IDA7CisJCQljb21wbGV0ZSgmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKKwkJCWZ0ZGktPnJlY2VpdmVkID0gMDsKKwkJCWZ0ZGktPmV4cGVjdGVkID0gNDsKKwkJCWZ0ZGktPmVkX2ZvdW5kID0gMDsKKwkJCWIgPSBmdGRpLT5yZXNwb25zZTsKKwkJCWJ1c2NtZCA9IChmdGRpLT5yZXNwb25zZVswXSA+PiAwKSAmIDB4MEY7CisJCQlpZiAoYnVzY21kID09IDB4MDApIHsKKwkJCX0gZWxzZSBpZiAoYnVzY21kID09IDB4MDIpIHsKKwkJCX0gZWxzZSBpZiAoYnVzY21kID09IDB4MDYpIHsKKwkJCX0gZWxzZSBpZiAoYnVzY21kID09IDB4MEEpIHsKKwkJCX0gZWxzZQorCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlV4eHggdW5rbm93biglMFgpIHZhbHVlID0gJTA4WFxuIiwKKwkJCQkJYnVzY21kLCBkYXRhKTsKKwkJCWdvdG8gaGF2ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoZnRkaS0+cmVzcG9uc2VbMF0gJiAweDgwKSA9PSAweDAwKSB7CisJCQkJZnRkaS0+ZXhwZWN0ZWQgPSA4OworCQkJCWdvdG8gaGF2ZTsKKwkJCX0gZWxzZSB7CisJCQkJaW50IGVkX251bWJlciA9IChmdGRpLT5yZXNwb25zZVswXSA+PiA1KSAmIDB4MDM7CisJCQkJaW50IGVkX3R5cGUgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gMCkgJiAweDAzOworCQkJCXUxNiBlZF9sZW5ndGggPSAoZnRkaS0+cmVzcG9uc2VbMl0gPDwgOCkgfAorCQkJCQlmdGRpLT5yZXNwb25zZVsxXTsKKwkJCQlzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbCisJCQkJCWVkX251bWJlcl07CisJCQkJdGFyZ2V0LT5oYWx0ZWQgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gMykgJgorCQkJCQkweDAxOworCQkJCXRhcmdldC0+c2tpcHBlZCA9IChmdGRpLT5yZXNwb25zZVswXSA+PiAyKSAmCisJCQkJCTB4MDE7CisJCQkJdGFyZ2V0LT50b2dnbGVfYml0cyA9IChmdGRpLT5yZXNwb25zZVszXSA+PiA2KQorCQkJCQkmIDB4MDM7CisJCQkJdGFyZ2V0LT5lcnJvcl9jb3VudCA9IChmdGRpLT5yZXNwb25zZVszXSA+PiA0KQorCQkJCQkmIDB4MDM7CisJCQkJdGFyZ2V0LT5jb25kaXRpb25fY29kZSA9IChmdGRpLT5yZXNwb25zZVsKKwkJCQkJCQkJICAzXSA+PiAwKSAmIDB4MEY7CisJCQkJaWYgKChmdGRpLT5yZXNwb25zZVswXSAmIDB4MTApID09IDB4MDApIHsKKwkJCQkJYiA9IGhhdmVfZWRfc2V0X3Jlc3BvbnNlKGZ0ZGksIHRhcmdldCwKKwkJCQkJCQkJIGVkX2xlbmd0aCwgZWRfbnVtYmVyLCBlZF90eXBlLAorCQkJCQkJCQkgYik7CisJCQkJCWdvdG8gaGF2ZTsKKwkJCQl9IGVsc2UgeworCQkJCQliID0gaGF2ZV9lZF9nZXRfcmVzcG9uc2UoZnRkaSwgdGFyZ2V0LAorCQkJCQkJCQkgZWRfbGVuZ3RoLCBlZF9udW1iZXIsIGVkX3R5cGUsCisJCQkJCQkJCSBiKTsKKwkJCQkJZ290byBoYXZlOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZQorCQlnb3RvIG1vcmU7CiB9CiAKIAogLyoKLSogY3JlYXRlIGEgdXJiLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgdXJiCi0qCi0qLworICogY3JlYXRlIGEgdXJiLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgdXJiCisgKgorICovCiBzdGF0aWMgc3NpemVfdCBmdGRpX2VsYW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsCiAJCQkgICAgICAgbG9mZl90ICpwcG9zKQogewotICAgICAgICBpbnQgcmV0dmFsID0gMDsKLSAgICAgICAgc3RydWN0IHVyYiAqdXJiOwotICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJY2hhciAqYnVmOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0gICAgICAgIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIGlmICghdXJiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT01FTTsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yXzE7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGZ0ZGktPnVkZXYsIGNvdW50LCBHRlBfS0VSTkVMLAotICAgICAgICAgICAgICAgICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0gICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT01FTTsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yXzI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWZmZXIsIGNvdW50KSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcl8zOwotICAgICAgICB9Ci0gICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCi0gICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBjb3VudCwKLSAgICAgICAgICAgICAgICBmdGRpX2VsYW5fd3JpdGVfYnVsa19jYWxsYmFjaywgZnRkaSk7Ci0gICAgICAgIHVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0gICAgICAgIHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICUiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZFxuIiwgcmV0dmFsKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yXzM7Ci0gICAgICAgIH0KLSAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7CisJaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChjb3VudCA9PSAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yXzE7CisJfQorCWJ1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChmdGRpLT51ZGV2LCBjb3VudCwgR0ZQX0tFUk5FTCwKKwkJCQkgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yXzI7CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmZmVyLCBjb3VudCkpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcl8zOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGZ0ZGktPnVkZXYsIHVzYl9zbmRidWxrcGlwZShmdGRpLT51ZGV2LAorCQkJCQkJCSAgIGZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksIGJ1ZiwgY291bnQsCisJCQkgIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrLCBmdGRpKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsCisJCQkiZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJZ290byBlcnJvcl8zOworCX0KKwl1c2JfZnJlZV91cmIodXJiKTsKIAogZXhpdDoKLSAgICAgICAgcmV0dXJuIGNvdW50OworCXJldHVybiBjb3VudDsKIGVycm9yXzM6CiAJdXNiX2ZyZWVfY29oZXJlbnQoZnRkaS0+dWRldiwgY291bnQsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOwogZXJyb3JfMjoKQEAgLTExOTgsMjkgKzExODksMjkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRkaV9lbGFuX2ZvcHMgPSB7Ci0gICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAotICAgICAgICAubGxzZWVrID0gbm9fbGxzZWVrLAotICAgICAgICAucmVhZCA9IGZ0ZGlfZWxhbl9yZWFkLAotICAgICAgICAud3JpdGUgPSBmdGRpX2VsYW5fd3JpdGUsCi0gICAgICAgIC5vcGVuID0gZnRkaV9lbGFuX29wZW4sCi0gICAgICAgIC5yZWxlYXNlID0gZnRkaV9lbGFuX3JlbGVhc2UsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkucmVhZCA9IGZ0ZGlfZWxhbl9yZWFkLAorCS53cml0ZSA9IGZ0ZGlfZWxhbl93cml0ZSwKKwkub3BlbiA9IGZ0ZGlfZWxhbl9vcGVuLAorCS5yZWxlYXNlID0gZnRkaV9lbGFuX3JlbGVhc2UsCiB9OwogCiAvKgotKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAotKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZHJpdmVyIGNvcmUKLSovCisgKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAorICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggdGhlIGRyaXZlciBjb3JlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBmdGRpX2VsYW5fanRhZ19jbGFzcyA9IHsKLSAgICAgICAgLm5hbWUgPSAiZnRkaS0lZC1qdGFnIiwKLSAgICAgICAgLmZvcHMgPSAmZnRkaV9lbGFuX2ZvcHMsCi0gICAgICAgIC5taW5vcl9iYXNlID0gVVNCX0ZURElfRUxBTl9NSU5PUl9CQVNFLAorCS5uYW1lID0gImZ0ZGktJWQtanRhZyIsCisJLmZvcHMgPSAmZnRkaV9lbGFuX2ZvcHMsCisJLm1pbm9yX2Jhc2UgPSBVU0JfRlRESV9FTEFOX01JTk9SX0JBU0UsCiB9OwogCiAvKgotKiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgdGhlCi0qIEVMQU4gRlBHQSBzdGF0ZSBtYWNoZ2luZSBwcm9jZXNzb3IgdGhhdAotKiBsaWVzIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBGVERJIGNoaXAKLSovCisgKiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgdGhlCisgKiBFTEFOIEZQR0Egc3RhdGUgbWFjaGdpbmUgcHJvY2Vzc29yIHRoYXQKKyAqIGxpZXMgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIEZUREkgY2hpcAorICovCiAjZGVmaW5lIGNQQ0l1MTMycmQgMHgwCiAjZGVmaW5lIGNQQ0l1MTMyd3IgMHgxCiAjZGVmaW5lIGNQQ0lpb3JkIDB4MgpAQCAtMTI1MSwxNjk0ICsxMjQyLDE2NjMgQEAKICNkZWZpbmUgY0NDbm90YWNjZXNzZWQgMHhGCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl93cml0ZV9yZWcoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1MzIgZGF0YSkKIHsKLSAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOwotICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOwotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmhlYWRlciA9IDB4MDAgfCBjUENJdTEzMndyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSAweDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSAweDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Cit3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCWludCBjb21tYW5kX3NpemU7CisJCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCWNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKwkJaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworCQkJc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworCQkJCUNPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07CisJCQljb21tYW5kLT5oZWFkZXIgPSAweDAwIHwgY1BDSXUxMzJ3cjsKKwkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7CisJCQljb21tYW5kLT5hZGRyZXNzID0gMHgwMDsKKwkJCWNvbW1hbmQtPndpZHRoID0gMHgwMDsKKwkJCWNvbW1hbmQtPmZvbGxvd3MgPSA0OworCQkJY29tbWFuZC0+dmFsdWUgPSBkYXRhOworCQkJY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworCQkJZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisJCQlmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQltdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWdvdG8gd2FpdDsKKwkJfQorCX0KIH0KIAogc3RhdGljIGludCBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgaW50IGNvbmZpZ19vZmZzZXQsCi0gICAgICAgIHU4IHdpZHRoLCB1MzIgZGF0YSkKKwkJCQkgIHU4IHdpZHRoLCB1MzIgZGF0YSkKIHsKLSAgICAgICAgdTggYWRkcmVzc29mcyA9IGNvbmZpZ19vZmZzZXQgLyA0OwotICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemU7Ci0gICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJY2Znd3IgJiAweDBGKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5hZGRyZXNzID0gYWRkcmVzc29mczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMCB8ICh3aWR0aCAmIDB4MEYpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJdTggYWRkcmVzc29mcyA9IGNvbmZpZ19vZmZzZXQgLyA0Oword2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlpbnQgY29tbWFuZF9zaXplOworCQltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQljb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisJCWlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKKwkJCXN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKwkJCQlDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworCQkJY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJY2Znd3IgJiAweDBGKTsKKwkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7CisJCQljb21tYW5kLT5hZGRyZXNzID0gYWRkcmVzc29mczsKKwkJCWNvbW1hbmQtPndpZHRoID0gMHgwMCB8ICh3aWR0aCAmIDB4MEYpOworCQkJY29tbWFuZC0+Zm9sbG93cyA9IDQ7CisJCQljb21tYW5kLT52YWx1ZSA9IGRhdGE7CisJCQljb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7CisJCQlmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKwkJCWZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisJCQltdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCW1zbGVlcCgxMDApOworCQkJZ290byB3YWl0OworCQl9CisJfQogfQogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgbWVtX29mZnNldCwKLSAgICAgICAgdTggd2lkdGgsIHUzMiBkYXRhKQorCQkJCSAgdTggd2lkdGgsIHUzMiBkYXRhKQogewotICAgICAgICB1OCBhZGRyZXNzb2ZzID0gbWVtX29mZnNldCAvIDQ7Ci0gICAgICB3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKLSAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDAwIHwgKGNQQ0ltZW13ciAmIDB4MEYpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSBhZGRyZXNzb2ZzOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSAweDAwIHwgKHdpZHRoICYgMHgwRik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9ICZjb21tYW5kLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl1OCBhZGRyZXNzb2ZzID0gbWVtX29mZnNldCAvIDQ7Cit3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCWludCBjb21tYW5kX3NpemU7CisJCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCWNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKwkJaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworCQkJc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworCQkJCUNPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07CisJCQljb21tYW5kLT5oZWFkZXIgPSAweDAwIHwgKGNQQ0ltZW13ciAmIDB4MEYpOworCQkJY29tbWFuZC0+bGVuZ3RoID0gMHgwNDsKKwkJCWNvbW1hbmQtPmFkZHJlc3MgPSBhZGRyZXNzb2ZzOworCQkJY29tbWFuZC0+d2lkdGggPSAweDAwIHwgKHdpZHRoICYgMHgwRik7CisJCQljb21tYW5kLT5mb2xsb3dzID0gNDsKKwkJCWNvbW1hbmQtPnZhbHVlID0gZGF0YTsKKwkJCWNvbW1hbmQtPmJ1ZmZlciA9ICZjb21tYW5kLT52YWx1ZTsKKwkJCWZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIGludCB1c2JfZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgbWVtX29mZnNldCwKLSAgICAgICAgdTggd2lkdGgsIHUzMiBkYXRhKQorCQkJICAgICAgIHU4IHdpZHRoLCB1MzIgZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOwotICAgICAgICByZXR1cm4gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCBtZW1fb2Zmc2V0LCB3aWR0aCwgZGF0YSk7CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOworCXJldHVybiBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIG1lbV9vZmZzZXQsIHdpZHRoLCBkYXRhKTsKIH0KIAogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZnRkaV9lbGFuX3dyaXRlX3BjaW1lbSk7CiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9yZWFkX3JlZyhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIHUzMiAqZGF0YSkKIHsKLSAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOwotICAgICAgICAgICAgICAgIGludCByZXNwb25kX3NpemU7Ci0gICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgcmVzcG9uZF9zaXplID0gZnRkaS0+cmVzcG9uZF9uZXh0IC0gZnRkaS0+cmVzcG9uZF9oZWFkOwotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmVzcG9uZCAqcmVzcG9uZCA9ICZmdGRpLT5yZXNwb25kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IC1FTk9ERVY7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IGNQQ0l1MTMycmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDA0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+YWRkcmVzcyA9IGNvbW1hbmQtPmFkZHJlc3MgPSBjVTEzMmNtZF9zdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT52YWx1ZSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0X2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlc3BvbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRfZm9yX2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KK3dhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJaW50IGNvbW1hbmRfc2l6ZTsKKwkJaW50IHJlc3BvbmRfc2l6ZTsKKwkJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworCQlyZXNwb25kX3NpemUgPSBmdGRpLT5yZXNwb25kX25leHQgLSBmdGRpLT5yZXNwb25kX2hlYWQ7CisJCWlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQorCQl7CisJCQlzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisJCQkJQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCXN0cnVjdCB1MTMyX3Jlc3BvbmQgKnJlc3BvbmQgPSAmZnRkaS0+cmVzcG9uZFsKKwkJCQlSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOworCQkJaW50IHJlc3VsdCA9IC1FTk9ERVY7CisJCQlyZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OworCQkJcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IGNQQ0l1MTMycmQ7CisJCQljb21tYW5kLT5sZW5ndGggPSAweDA0OworCQkJcmVzcG9uZC0+YWRkcmVzcyA9IGNvbW1hbmQtPmFkZHJlc3MgPSBjVTEzMmNtZF9zdGF0dXM7CisJCQljb21tYW5kLT53aWR0aCA9IDB4MDA7CisJCQljb21tYW5kLT5mb2xsb3dzID0gMDsKKwkJCWNvbW1hbmQtPnZhbHVlID0gMDsKKwkJCWNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7CisJCQlyZXNwb25kLT52YWx1ZSA9IGRhdGE7CisJCQlpbml0X2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJCQlmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKwkJCWZ0ZGktPnJlc3BvbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbnQgZnRkaV9lbGFuX3JlYWRfY29uZmlnKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgaW50IGNvbmZpZ19vZmZzZXQsCi0gICAgICAgIHU4IHdpZHRoLCB1MzIgKmRhdGEpCisJCQkJIHU4IHdpZHRoLCB1MzIgKmRhdGEpCiB7Ci0gICAgICAgIHU4IGFkZHJlc3NvZnMgPSBjb25maWdfb2Zmc2V0IC8gNDsKLSAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOwotICAgICAgICAgICAgICAgIGludCByZXNwb25kX3NpemU7Ci0gICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgcmVzcG9uZF9zaXplID0gZnRkaS0+cmVzcG9uZF9uZXh0IC0gZnRkaS0+cmVzcG9uZF9oZWFkOwotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmVzcG9uZCAqcmVzcG9uZCA9ICZmdGRpLT5yZXNwb25kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IC1FTk9ERVY7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJY2ZncmQgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5hZGRyZXNzID0gY29tbWFuZC0+YWRkcmVzcyA9IGFkZHJlc3NvZnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IDB4MDAgfCAod2lkdGggJiAweDBGKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmQtPnZhbHVlID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfY29tcGxldGlvbigmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVzcG9uZF9uZXh0ICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbigmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXU4IGFkZHJlc3NvZnMgPSBjb25maWdfb2Zmc2V0IC8gNDsKK3dhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJaW50IGNvbW1hbmRfc2l6ZTsKKwkJaW50IHJlc3BvbmRfc2l6ZTsKKwkJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworCQlyZXNwb25kX3NpemUgPSBmdGRpLT5yZXNwb25kX25leHQgLSBmdGRpLT5yZXNwb25kX2hlYWQ7CisJCWlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQorCQl7CisJCQlzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisJCQkJQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCXN0cnVjdCB1MTMyX3Jlc3BvbmQgKnJlc3BvbmQgPSAmZnRkaS0+cmVzcG9uZFsKKwkJCQlSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOworCQkJaW50IHJlc3VsdCA9IC1FTk9ERVY7CisJCQlyZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OworCQkJcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJY2ZncmQgJgorCQkJCQkJCQkgICAgMHgwRik7CisJCQljb21tYW5kLT5sZW5ndGggPSAweDA0OworCQkJcmVzcG9uZC0+YWRkcmVzcyA9IGNvbW1hbmQtPmFkZHJlc3MgPSBhZGRyZXNzb2ZzOworCQkJY29tbWFuZC0+d2lkdGggPSAweDAwIHwgKHdpZHRoICYgMHgwRik7CisJCQljb21tYW5kLT5mb2xsb3dzID0gMDsKKwkJCWNvbW1hbmQtPnZhbHVlID0gMDsKKwkJCWNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7CisJCQlyZXNwb25kLT52YWx1ZSA9IGRhdGE7CisJCQlpbml0X2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJCQlmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKwkJCWZ0ZGktPnJlc3BvbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbnQgZnRkaV9lbGFuX3JlYWRfcGNpbWVtKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgaW50IG1lbV9vZmZzZXQsCi0gICAgICAgIHU4IHdpZHRoLCB1MzIgKmRhdGEpCisJCQkJIHU4IHdpZHRoLCB1MzIgKmRhdGEpCiB7Ci0gICAgICAgIHU4IGFkZHJlc3NvZnMgPSBtZW1fb2Zmc2V0IC8gNDsKLSAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOwotICAgICAgICAgICAgICAgIGludCByZXNwb25kX3NpemU7Ci0gICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgcmVzcG9uZF9zaXplID0gZnRkaS0+cmVzcG9uZF9uZXh0IC0gZnRkaS0+cmVzcG9uZF9oZWFkOwotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmVzcG9uZCAqcmVzcG9uZCA9ICZmdGRpLT5yZXNwb25kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IC1FTk9ERVY7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJbWVtcmQgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5hZGRyZXNzID0gY29tbWFuZC0+YWRkcmVzcyA9IGFkZHJlc3NvZnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IDB4MDAgfCAod2lkdGggJiAweDBGKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmQtPnZhbHVlID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfY29tcGxldGlvbigmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVzcG9uZF9uZXh0ICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbigmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXU4IGFkZHJlc3NvZnMgPSBtZW1fb2Zmc2V0IC8gNDsKK3dhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJaW50IGNvbW1hbmRfc2l6ZTsKKwkJaW50IHJlc3BvbmRfc2l6ZTsKKwkJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworCQlyZXNwb25kX3NpemUgPSBmdGRpLT5yZXNwb25kX25leHQgLSBmdGRpLT5yZXNwb25kX2hlYWQ7CisJCWlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQorCQl7CisJCQlzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisJCQkJQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCXN0cnVjdCB1MTMyX3Jlc3BvbmQgKnJlc3BvbmQgPSAmZnRkaS0+cmVzcG9uZFsKKwkJCQlSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOworCQkJaW50IHJlc3VsdCA9IC1FTk9ERVY7CisJCQlyZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OworCQkJcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJbWVtcmQgJgorCQkJCQkJCQkgICAgMHgwRik7CisJCQljb21tYW5kLT5sZW5ndGggPSAweDA0OworCQkJcmVzcG9uZC0+YWRkcmVzcyA9IGNvbW1hbmQtPmFkZHJlc3MgPSBhZGRyZXNzb2ZzOworCQkJY29tbWFuZC0+d2lkdGggPSAweDAwIHwgKHdpZHRoICYgMHgwRik7CisJCQljb21tYW5kLT5mb2xsb3dzID0gMDsKKwkJCWNvbW1hbmQtPnZhbHVlID0gMDsKKwkJCWNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7CisJCQlyZXNwb25kLT52YWx1ZSA9IGRhdGE7CisJCQlpbml0X2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJCQlmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKwkJCWZ0ZGktPnJlc3BvbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIGludCB1c2JfZnRkaV9lbGFuX3JlYWRfcGNpbWVtKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBtZW1fb2Zmc2V0LAotICAgICAgICB1OCB3aWR0aCwgdTMyICpkYXRhKQorCQkJICAgICAgdTggd2lkdGgsIHUzMiAqZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOwotICAgICAgICBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIG1lbV9vZmZzZXQsIHdpZHRoLCBkYXRhKTsKKwlzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7CisJaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlCisJCXJldHVybiBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgbWVtX29mZnNldCwgd2lkdGgsIGRhdGEpOwogfQogCiAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fcmVhZF9wY2ltZW0pOwogc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfc2V0dXAoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1OCBlZF9udW1iZXIsCi0gICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKLSAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAotICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKLSAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQorCQkJCSB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisJCQkJIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKwkJCQkJCSAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorCQkJCQkJICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCiB7Ci0gICAgICAgIHU4IGVkID0gZWRfbnVtYmVyIC0gMTsKLSAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKLSAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHg4MCB8IChlZCA8PCA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwNzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSAodG9nZ2xlX2JpdHMgPDwgNikgfCAoZXBfbnVtYmVyIDw8IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZHJlc3MgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IHVyYi0+c2V0dXBfcGFja2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5lbmRwID0gZW5kcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+dXJiID0gdXJiOwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5hY3RpdmUgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXU4IGVkID0gZWRfbnVtYmVyIC0gMTsKK3dhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCWludCBjb21tYW5kX3NpemU7CisJCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCWNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKwkJaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworCQkJc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKKwkJCXN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKwkJCQlDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworCQkJY29tbWFuZC0+aGVhZGVyID0gMHg4MCB8IChlZCA8PCA1KTsKKwkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwNzsKKwkJCWNvbW1hbmQtPmFkZHJlc3MgPSAodG9nZ2xlX2JpdHMgPDwgNikgfCAoZXBfbnVtYmVyIDw8IDIpCisJCQkJfCAoYWRkcmVzcyA8PCAwKTsKKwkJCWNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorCQkJCQkJICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQkJY29tbWFuZC0+Zm9sbG93cyA9IDg7CisJCQljb21tYW5kLT52YWx1ZSA9IDA7CisJCQljb21tYW5kLT5idWZmZXIgPSB1cmItPnNldHVwX3BhY2tldDsKKwkJCXRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCXRhcmdldC0+ZW5kcCA9IGVuZHA7CisJCQl0YXJnZXQtPnVyYiA9IHVyYjsKKwkJCXRhcmdldC0+YWN0aXZlID0gMTsKKwkJCWZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIGludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKLSAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAotICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCi0gICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAotICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCisJCQkgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisJCQkgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisJCQkJCQlpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKwkJCQkJCWludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQogewotICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7Ci0gICAgICAgIHJldHVybiBmdGRpX2VsYW5fZWRzZXRfc2V0dXAoZnRkaSwgZWRfbnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKwlyZXR1cm4gZnRkaV9lbGFuX2Vkc2V0X3NldHVwKGZ0ZGksIGVkX251bWJlciwgZW5kcCwgdXJiLCBhZGRyZXNzLAorCQkJCSAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOwogfQogCiAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fZWRzZXRfc2V0dXApOwogc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfaW5wdXQoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1OCBlZF9udW1iZXIsCi0gICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKLSAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAotICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKLSAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQorCQkJCSB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisJCQkJIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKwkJCQkJCSAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorCQkJCQkJICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCiB7Ci0gICAgICAgIHU4IGVkID0gZWRfbnVtYmVyIC0gMTsKLSAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKLSAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgyIHwgKGVkIDw8IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ19sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbWFpbmluZ19sZW5ndGggPiAxMDI0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwMCB8IDEwMjM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgKHJlbWFpbmluZ19sZW5ndGggLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9ICh0b2dnbGVfYml0cyA8PCA2KSB8IChlcF9udW1iZXIgPDwgMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWRkcmVzcyA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+ZW5kcCA9IGVuZHA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPnVyYiA9IHVyYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+YWN0aXZlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl1OCBlZCA9IGVkX251bWJlciAtIDE7Cit3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlpbnQgY29tbWFuZF9zaXplOworCQltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQljb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisJCWlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKKwkJCXN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CisJCQlzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisJCQkJQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCXUzMiByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKwkJCQl1cmItPmFjdHVhbF9sZW5ndGg7CisJCQljb21tYW5kLT5oZWFkZXIgPSAweDgyIHwgKGVkIDw8IDUpOworCQkJaWYgKHJlbWFpbmluZ19sZW5ndGggPT0gMCkgeworCQkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4MDAwMDsKKwkJCX0gZWxzZSBpZiAocmVtYWluaW5nX2xlbmd0aCA+IDEwMjQpIHsKKwkJCQljb21tYW5kLT5sZW5ndGggPSAweDgwMDAgfCAxMDIzOworCQkJfSBlbHNlCisJCQkJY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgKHJlbWFpbmluZ19sZW5ndGggLQorCQkJCQkJCSAgICAxKTsKKwkJCWNvbW1hbmQtPmFkZHJlc3MgPSAodG9nZ2xlX2JpdHMgPDwgNikgfCAoZXBfbnVtYmVyIDw8IDIpCisJCQkJfCAoYWRkcmVzcyA8PCAwKTsKKwkJCWNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorCQkJCQkJICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQkJY29tbWFuZC0+Zm9sbG93cyA9IDA7CisJCQljb21tYW5kLT52YWx1ZSA9IDA7CisJCQljb21tYW5kLT5idWZmZXIgPSBOVUxMOworCQkJdGFyZ2V0LT5jYWxsYmFjayA9IGNhbGxiYWNrOworCQkJdGFyZ2V0LT5lbmRwID0gZW5kcDsKKwkJCXRhcmdldC0+dXJiID0gdXJiOworCQkJdGFyZ2V0LT5hY3RpdmUgPSAxOworCQkJZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisJCQlmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQltdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWdvdG8gd2FpdDsKKwkJfQorCX0KIH0KIAogaW50IHVzYl9mdGRpX2VsYW5fZWRzZXRfaW5wdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTggZWRfbnVtYmVyLAotICAgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCi0gICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKLSAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCi0gICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKKwkJCSAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKwkJCSAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKwkJCQkJCWludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorCQkJCQkJaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKLSAgICAgICAgcmV0dXJuIGZ0ZGlfZWxhbl9lZHNldF9pbnB1dChmdGRpLCBlZF9udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKLSAgICAgICAgICAgICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOworCXJldHVybiBmdGRpX2VsYW5fZWRzZXRfaW5wdXQoZnRkaSwgZWRfbnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisJCQkJICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7CiB9CiAKIAogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Z0ZGlfZWxhbl9lZHNldF9pbnB1dCk7CiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9lZHNldF9lbXB0eShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIHU4IGVkX251bWJlciwKLSAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAotICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCi0gICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAotICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCisJCQkJIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKwkJCQkgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorCQkJCQkJICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisJCQkJCQkgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKIHsKLSAgICAgICAgdTggZWQgPSBlZF9udW1iZXIgLSAxOwotICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOwotICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOwotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgxIHwgKGVkIDw8IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9ICh0b2dnbGVfYml0cyA8PCA2KSB8IChlcF9udW1iZXIgPDwgMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWRkcmVzcyA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+ZW5kcCA9IGVuZHA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPnVyYiA9IHVyYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+YWN0aXZlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl1OCBlZCA9IGVkX251bWJlciAtIDE7Cit3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlpbnQgY29tbWFuZF9zaXplOworCQltdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQljb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisJCWlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKKwkJCXN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CisJCQlzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisJCQkJQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCWNvbW1hbmQtPmhlYWRlciA9IDB4ODEgfCAoZWQgPDwgNSk7CisJCQljb21tYW5kLT5sZW5ndGggPSAweDAwMDA7CisJCQljb21tYW5kLT5hZGRyZXNzID0gKHRvZ2dsZV9iaXRzIDw8IDYpIHwgKGVwX251bWJlciA8PCAyKQorCQkJCXwgKGFkZHJlc3MgPDwgMCk7CisJCQljb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKKwkJCQkJCSAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwkJCWNvbW1hbmQtPmZvbGxvd3MgPSAwOworCQkJY29tbWFuZC0+dmFsdWUgPSAwOworCQkJY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKKwkJCXRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCXRhcmdldC0+ZW5kcCA9IGVuZHA7CisJCQl0YXJnZXQtPnVyYiA9IHVyYjsKKwkJCXRhcmdldC0+YWN0aXZlID0gMTsKKwkJCWZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIGludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X2VtcHR5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKLSAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAotICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCi0gICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAotICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCisJCQkgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisJCQkgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisJCQkJCQlpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKwkJCQkJCWludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQogewotICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7Ci0gICAgICAgIHJldHVybiBmdGRpX2VsYW5fZWRzZXRfZW1wdHkoZnRkaSwgZWRfbnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKwlyZXR1cm4gZnRkaV9lbGFuX2Vkc2V0X2VtcHR5KGZ0ZGksIGVkX251bWJlciwgZW5kcCwgdXJiLCBhZGRyZXNzLAorCQkJCSAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOwogfQogCiAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fZWRzZXRfZW1wdHkpOwogc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfb3V0cHV0KHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdTggZWRfbnVtYmVyLAotICAgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCi0gICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKLSAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCi0gICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKKwkJCQkgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKwkJCQkgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKwkJCQkJCSAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKwkJCQkJCSAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKIHsKLSAgICAgICAgdTggZWQgPSBlZF9udW1iZXIgLSAxOwotICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOwotICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOwotICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpiOwotICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHVyYl9zaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhWzMwICozICsgNF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtID0gKHNpemVvZihkYXRhKSAtIDEpIC8gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgxIHwgKGVkIDw8IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9ICh0b2dnbGVfYml0cyA8PCA2KSB8IChlcF9udW1iZXIgPDwgMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWRkcmVzcyA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSBtaW5fdCh1MzIsIDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwMCB8IChjb21tYW5kLT5mb2xsb3dzIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gY29tbWFuZC0+YnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgdXJiX3NpemUgPSBjb21tYW5kLT5mb2xsb3dzOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodXJiX3NpemUtLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiBtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSsrIDwgbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ID0gc3ByaW50ZihkLCAiICUwMlgiLCAqYisrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSB3OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5lbmRwID0gZW5kcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+dXJiID0gdXJiOwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5hY3RpdmUgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXU4IGVkID0gZWRfbnVtYmVyIC0gMTsKK3dhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCWludCBjb21tYW5kX3NpemU7CisJCW11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCWNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKwkJaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworCQkJdTggKmI7CisJCQl1MTYgdXJiX3NpemU7CisJCQlpbnQgaSA9IDA7CisJCQljaGFyIGRhdGFbMzAgKjMgKyA0XTsKKwkJCWNoYXIgKmQgPSBkYXRhOworCQkJaW50IG0gPSAoc2l6ZW9mKGRhdGEpIC0gMSkgLyAzOworCQkJaW50IGwgPSAwOworCQkJc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKKwkJCXN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKwkJCQlDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworCQkJY29tbWFuZC0+aGVhZGVyID0gMHg4MSB8IChlZCA8PCA1KTsKKwkJCWNvbW1hbmQtPmFkZHJlc3MgPSAodG9nZ2xlX2JpdHMgPDwgNikgfCAoZXBfbnVtYmVyIDw8IDIpCisJCQkJfCAoYWRkcmVzcyA8PCAwKTsKKwkJCWNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorCQkJCQkJICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQkJY29tbWFuZC0+Zm9sbG93cyA9IG1pbl90KHUzMiwgMTAyNCwKKwkJCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQorCQkJCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQljb21tYW5kLT52YWx1ZSA9IDA7CisJCQljb21tYW5kLT5idWZmZXIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgKGNvbW1hbmQtPmZvbGxvd3MgLSAxKTsKKwkJCWIgPSBjb21tYW5kLT5idWZmZXI7CisJCQl1cmJfc2l6ZSA9IGNvbW1hbmQtPmZvbGxvd3M7CisJCQlkYXRhWzBdID0gMDsKKwkJCXdoaWxlICh1cmJfc2l6ZS0tID4gMCkgeworCQkJCWlmIChpID4gbSkgeworCQkJCX0gZWxzZSBpZiAoaSsrIDwgbSkgeworCQkJCQlpbnQgdyA9IHNwcmludGYoZCwgIiAlMDJYIiwgKmIrKyk7CisJCQkJCWQgKz0gdzsKKwkJCQkJbCArPSB3OworCQkJCX0gZWxzZQorCQkJCQlkICs9IHNwcmludGYoZCwgIiAuLiIpOworCQkJfQorCQkJdGFyZ2V0LT5jYWxsYmFjayA9IGNhbGxiYWNrOworCQkJdGFyZ2V0LT5lbmRwID0gZW5kcDsKKwkJCXRhcmdldC0+dXJiID0gdXJiOworCQkJdGFyZ2V0LT5hY3RpdmUgPSAxOworCQkJZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisJCQlmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQltdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWdvdG8gd2FpdDsKKwkJfQorCX0KIH0KIAogaW50IHVzYl9mdGRpX2VsYW5fZWRzZXRfb3V0cHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKLSAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAotICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCi0gICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAotICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCisJCQkgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorCQkJICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKwkJCQkJCSBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKwkJCQkJCSBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKIHsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOwotICAgICAgICByZXR1cm4gZnRkaV9lbGFuX2Vkc2V0X291dHB1dChmdGRpLCBlZF9udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKLSAgICAgICAgICAgICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7CisJc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOworCXJldHVybiBmdGRpX2VsYW5fZWRzZXRfb3V0cHV0KGZ0ZGksIGVkX251bWJlciwgZW5kcCwgdXJiLCBhZGRyZXNzLAorCQkJCSAgICAgIGVwX251bWJlciwgdG9nZ2xlX2JpdHMsIGNhbGxiYWNrKTsKIH0KIAogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZnRkaV9lbGFuX2Vkc2V0X291dHB1dCk7CiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9lZHNldF9zaW5nbGUoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1OCBlZF9udW1iZXIsCi0gICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKLSAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAotICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKLSAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQorCQkJCSAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorCQkJCSAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorCQkJCQkJICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorCQkJCQkJICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQogewotICAgICAgICB1OCBlZCA9IGVkX251bWJlciAtIDE7Ci0gICAgICB3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemU7Ci0gICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHg4MyB8IChlZCA8PCA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdfbGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZW1haW5pbmdfbGVuZ3RoID4gMTAyNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDgwMDAgfCAxMDIzOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwMCB8IChyZW1haW5pbmdfbGVuZ3RoIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSAodG9nZ2xlX2JpdHMgPDwgNikgfCAoZXBfbnVtYmVyIDw8IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZHJlc3MgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmVuZHAgPSBlbmRwOwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT51cmIgPSB1cmI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmFjdGl2ZSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJdTggZWQgPSBlZF9udW1iZXIgLSAxOword2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJaW50IGNvbW1hbmRfc2l6ZTsKKwkJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworCQlpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisJCQl1MzIgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKKwkJCXN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKwkJCQlDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworCQkJY29tbWFuZC0+aGVhZGVyID0gMHg4MyB8IChlZCA8PCA1KTsKKwkJCWlmIChyZW1haW5pbmdfbGVuZ3RoID09IDApIHsKKwkJCQljb21tYW5kLT5sZW5ndGggPSAweDAwMDA7CisJCQl9IGVsc2UgaWYgKHJlbWFpbmluZ19sZW5ndGggPiAxMDI0KSB7CisJCQkJY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgMTAyMzsKKwkJCX0gZWxzZQorCQkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwMCB8IChyZW1haW5pbmdfbGVuZ3RoIC0KKwkJCQkJCQkgICAgMSk7CisJCQljb21tYW5kLT5hZGRyZXNzID0gKHRvZ2dsZV9iaXRzIDw8IDYpIHwgKGVwX251bWJlciA8PCAyKQorCQkJCXwgKGFkZHJlc3MgPDwgMCk7CisJCQljb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKKwkJCQkJCSAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwkJCWNvbW1hbmQtPmZvbGxvd3MgPSAwOworCQkJY29tbWFuZC0+dmFsdWUgPSAwOworCQkJY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKKwkJCXRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCXRhcmdldC0+ZW5kcCA9IGVuZHA7CisJCQl0YXJnZXQtPnVyYiA9IHVyYjsKKwkJCXRhcmdldC0+YWN0aXZlID0gMTsKKwkJCWZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworCQkJZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHdhaXQ7CisJCX0KKwl9CiB9CiAKIGludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X3NpbmdsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCBlZF9udW1iZXIsCi0gICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKLSAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAotICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKLSAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQorCQkJICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKwkJCSAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisJCQkJCQkgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisJCQkJCQkgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKLSAgICAgICAgcmV0dXJuIGZ0ZGlfZWxhbl9lZHNldF9zaW5nbGUoZnRkaSwgZWRfbnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKwlyZXR1cm4gZnRkaV9lbGFuX2Vkc2V0X3NpbmdsZShmdGRpLCBlZF9udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKKwkJCQkgICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7CiB9CiAKIAogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Z0ZGlfZWxhbl9lZHNldF9zaW5nbGUpOwogc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfZmx1c2goc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1OCBlZF9udW1iZXIsCi0gICAgICAgIHZvaWQgKmVuZHApCisJCQkJIHZvaWQgKmVuZHApCiB7Ci0gICAgICAgIHU4IGVkID0gZWRfbnVtYmVyIC0gMTsKLSAgICAgICAgaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKLSAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQtPmFiYW5kb25pbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5hYmFuZG9uaW5nID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICB3YWl0XzE6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9oZWFkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRkaS0+Y29tbWFuZFtDT01NQU5EX01BU0sgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgwIHwgKGVkIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSAweDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0XzE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXU4IGVkID0gZWRfbnVtYmVyIC0gMTsKKwlpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKKwkJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJaWYgKHRhcmdldC0+YWJhbmRvbmluZyA+IDApIHsKKwkJCW11dGV4X3VubG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJdGFyZ2V0LT5hYmFuZG9uaW5nID0gMTsKKwkJd2FpdF8xOmlmICh0YXJnZXQtPmFjdGl2ZSA9PSAxKSB7CisJCQkJaW50IGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtCisJCQkJCWZ0ZGktPmNvbW1hbmRfaGVhZDsKKwkJCQlpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisJCQkJCXN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPQorCQkJCQkJJmZ0ZGktPmNvbW1hbmRbQ09NTUFORF9NQVNLICYKKwkJCQkJCQkgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKwkJCQkJY29tbWFuZC0+aGVhZGVyID0gMHg4MCB8IChlZCA8PCA1KSB8CisJCQkJCQkweDQ7CisJCQkJCWNvbW1hbmQtPmxlbmd0aCA9IDB4MDA7CisJCQkJCWNvbW1hbmQtPmFkZHJlc3MgPSAweDAwOworCQkJCQljb21tYW5kLT53aWR0aCA9IDB4MDA7CisJCQkJCWNvbW1hbmQtPmZvbGxvd3MgPSAwOworCQkJCQljb21tYW5kLT52YWx1ZSA9IDA7CisJCQkJCWNvbW1hbmQtPmJ1ZmZlciA9ICZjb21tYW5kLT52YWx1ZTsKKwkJCQkJZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisJCQkJCWZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJCQltc2xlZXAoMTAwKTsKKwkJCQkJbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKKwkJCQkJZ290byB3YWl0XzE7CisJCQkJfQorCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZmdGRpLT51MTMyX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CiB9CiAKIGludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X2ZsdXNoKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKLSAgICAgICAgdm9pZCAqZW5kcCkKKwkJCSAgICAgIHZvaWQgKmVuZHApCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKLSAgICAgICAgcmV0dXJuIGZ0ZGlfZWxhbl9lZHNldF9mbHVzaChmdGRpLCBlZF9udW1iZXIsIGVuZHApOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKwlyZXR1cm4gZnRkaV9lbGFuX2Vkc2V0X2ZsdXNoKGZ0ZGksIGVkX251bWJlciwgZW5kcCk7CiB9CiAKIAogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Z0ZGlfZWxhbl9lZHNldF9mbHVzaCk7CiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9mbHVzaF9pbnB1dF9maWZvKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7Ci0gICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKLSAgICAgICAgaW50IHJldHJ5X29uX3N0YXR1cyA9IDIwOwotICAgICAgbW9yZTp7Ci0gICAgICAgICAgICAgICAgaW50IHBhY2tldF9ieXRlcyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgMTAwKTsKLSAgICAgICAgICAgICAgICBpZiAocGFja2V0X2J5dGVzID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtID0gKHNpemVvZihkaWFnKSAtIDEpIC8gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmIgPSBmdGRpLT5idWxrX2luX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRlc19yZWFkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdbMF0gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhY2tldF9ieXRlcy0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSAqYisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNfcmVhZCA8IG0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAlMDJYIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYgJiBjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlc19yZWFkID4gbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19yZWFkICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFja2V0X2J5dGVzID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzMSA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzMiA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxID09IDB4MzEgJiYgczIgPT0gMHg2MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0cnlfb25fc3RhdHVzLS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlNUQVRVUyBFUlJPUiByZXRyeSBsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWl0IHJlYWNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYjEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIm9ubHkgb25lIGJ5dGUgZmx1c2hlZCBmcm9tIEYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUREkgPSAlMDJYXG4iLCBiMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fc3RhdHVzLS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlNUQVRVUyBFUlJPUiByZXRyeSBsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWl0IHJlYWNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fdGltZW91dC0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1vcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJUSU1FRCBPVVQgcmV0cnkgbGltaSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidCByZWFjaGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXR2YWwgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVtcHR5IHBhY2tldCByZXRyeSBsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWl0IHJlYWNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZXJyb3IgPSAlZFxuIiwgcmV0dmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKKwlpbnQgcmV0cnlfb25fZW1wdHkgPSAxMDsKKwlpbnQgcmV0cnlfb25fdGltZW91dCA9IDU7CisJaW50IHJldHJ5X29uX3N0YXR1cyA9IDIwOworbW9yZTp7CisJCWludCBwYWNrZXRfYnl0ZXMgPSAwOworCQlpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCisJCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCQkJICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorCQkJCQkgICZwYWNrZXRfYnl0ZXMsIDEwMCk7CisJCWlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CisJCQljaGFyIGRpYWdbMzAgKjMgKyA0XTsKKwkJCWNoYXIgKmQgPSBkaWFnOworCQkJaW50IG0gPSAoc2l6ZW9mKGRpYWcpIC0gMSkgLyAzOworCQkJY2hhciAqYiA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyOworCQkJaW50IGJ5dGVzX3JlYWQgPSAwOworCQkJZGlhZ1swXSA9IDA7CisJCQl3aGlsZSAocGFja2V0X2J5dGVzLS0gPiAwKSB7CisJCQkJY2hhciBjID0gKmIrKzsKKwkJCQlpZiAoYnl0ZXNfcmVhZCA8IG0pIHsKKwkJCQkJZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsCisJCQkJCQkgICAgIDB4MDAwMDAwRkYgJiBjKTsKKwkJCQl9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiBtKSB7CisJCQkJfSBlbHNlCisJCQkJCWQgKz0gc3ByaW50ZihkLCAiIC4uIik7CisJCQkJYnl0ZXNfcmVhZCArPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ290byBtb3JlOworCQl9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA+IDEpIHsKKwkJCWNoYXIgczEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKKwkJCWNoYXIgczIgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKKwkJCWlmIChzMSA9PSAweDMxICYmIHMyID09IDB4NjApIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSBpZiAocmV0cnlfb25fc3RhdHVzLS0gPiAwKSB7CisJCQkJZ290byBtb3JlOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJTVEFUVVMgRVJST1IgcmV0cnkgbGltaXQgcmVhY2hlZFxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0gZWxzZSBpZiAocGFja2V0X2J5dGVzID4gMCkgeworCQkJY2hhciBiMSA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzBdOworCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAib25seSBvbmUgYnl0ZSBmbHVzaGVkIGZyb20gRlRESSA9ICUwMlhcbiIsCisJCQkJYjEpOworCQkJaWYgKHJldHJ5X29uX3N0YXR1cy0tID4gMCkgeworCQkJCWdvdG8gbW9yZTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiU1RBVFVTIEVSUk9SIHJldHJ5IGxpbWl0IHJlYWNoZWRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7CisJCQlpZiAocmV0cnlfb25fdGltZW91dC0tID4gMCkgeworCQkJCWdvdG8gbW9yZTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiVElNRUQgT1VUIHJldHJ5IGxpbWl0IHJlYWNoZWRcbiIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7CisJCQlpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKwkJCQlnb3RvIG1vcmU7CisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVtcHR5IHBhY2tldCByZXRyeSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVycm9yID0gJWRcbiIsIHJldHZhbCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCXJldHVybiAtMTsKIH0KIAogCiAvKgotKiBzZW5kIHRoZSBsb25nIGZsdXNoIHNlcXVlbmNlCi0qCi0qLworICogc2VuZCB0aGUgbG9uZyBmbHVzaCBzZXF1ZW5jZQorICoKKyAqLwogc3RhdGljIGludCBmdGRpX2VsYW5fc3luY2hyb25pemVfZmx1c2goc3RydWN0IHVzYl9mdGRpICpmdGRpKQogewotICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICBzdHJ1Y3QgdXJiICp1cmI7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgaW50IEkgPSAyNTc7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKCF1cmIpIHsKLSAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2MgYSB1cmIgZm9yIGZsdXNoIHNlcXUiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZW5jZVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIH0KLSAgICAgICAgYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGZ0ZGktPnVkZXYsIEksIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0gICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIGJ1ZmZlciBmb3IgZmx1c2ggc2VxIgotICAgICAgICAgICAgICAgICAgICAgICAgInVlbmNlXG4iKTsKLSAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoSS0tID4gMCkKLSAgICAgICAgICAgICAgICBidWZbaSsrXSA9IDB4NTU7Ci0gICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCi0gICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBpLAotICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrLCBmdGRpKTsKLSAgICAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLSAgICAgICAgcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKHJldHZhbCkgewotICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCB0byBzdWJtaXQgdXJiIGNvbnRhaW5pbmcgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJmbHVzaCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgICAgICAgICAgdXNiX2ZyZWVfY29oZXJlbnQoZnRkaS0+dWRldiwgaSwgYnVmLCB1cmItPnRyYW5zZmVyX2RtYSk7Ci0gICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIH0KLSAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7Ci0gICAgICAgIHJldHVybiAwOworCWludCByZXR2YWw7CisJc3RydWN0IHVyYiAqdXJiOworCWNoYXIgKmJ1ZjsKKwlpbnQgSSA9IDI1NzsKKwlpbnQgaSA9IDA7CisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2MgYSB1cmIgZm9yIGZsdXNoIHNlcXVlbmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChmdGRpLT51ZGV2LCBJLCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghYnVmKSB7CisJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgYSBidWZmZXIgZm9yIGZsdXNoIHNlcXVlbmNlXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl3aGlsZSAoSS0tID4gMCkKKwkJYnVmW2krK10gPSAweDU1OworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCisJCQkJCQkJICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBpLAorCQkJICBmdGRpX2VsYW5fd3JpdGVfYnVsa19jYWxsYmFjaywgZnRkaSk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZmFpbGVkIHRvIHN1Ym1pdCB1cmIgY29udGFpbmluZyB0aGUgZmx1c2ggc2VxdWVuY2VcbiIpOworCQl1c2JfZnJlZV9jb2hlcmVudChmdGRpLT51ZGV2LCBpLCBidWYsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gMDsKIH0KIAogCiAvKgotKiBzZW5kIHRoZSByZXNldCBzZXF1ZW5jZQotKgotKi8KKyAqIHNlbmQgdGhlIHJlc2V0IHNlcXVlbmNlCisgKgorICovCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zeW5jaHJvbml6ZV9yZXNldChzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIGludCByZXR2YWw7Ci0gICAgICAgIHN0cnVjdCB1cmIgKnVyYjsKLSAgICAgICAgY2hhciAqYnVmOwotICAgICAgICBpbnQgSSA9IDQ7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKCF1cmIpIHsKLSAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGEgdXJiIGZvciB0aGUgcmVzZXQgc2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAicXVlbmNlXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgfQotICAgICAgICBidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQoZnRkaS0+dWRldiwgSSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKLSAgICAgICAgaWYgKCFidWYpIHsKLSAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGEgYnVmZmVyIGZvciB0aGUgcmVzZXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgfQotICAgICAgICBidWZbaSsrXSA9IDB4NTU7Ci0gICAgICAgIGJ1ZltpKytdID0gMHhBQTsKLSAgICAgICAgYnVmW2krK10gPSAweDVBOwotICAgICAgICBidWZbaSsrXSA9IDB4QTU7Ci0gICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCi0gICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBpLAotICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrLCBmdGRpKTsKLSAgICAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLSAgICAgICAgcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKHJldHZhbCkgewotICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCB0byBzdWJtaXQgdXJiIGNvbnRhaW5pbmcgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXNldCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgICAgICAgICAgdXNiX2ZyZWVfY29oZXJlbnQoZnRkaS0+dWRldiwgaSwgYnVmLCB1cmItPnRyYW5zZmVyX2RtYSk7Ci0gICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIH0KLSAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7Ci0gICAgICAgIHJldHVybiAwOworCWludCByZXR2YWw7CisJc3RydWN0IHVyYiAqdXJiOworCWNoYXIgKmJ1ZjsKKwlpbnQgSSA9IDQ7CisJaW50IGkgPSAwOworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIHVyYiBmb3IgdGhlIHJlc2V0IHNlcXVlbmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChmdGRpLT51ZGV2LCBJLCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghYnVmKSB7CisJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgYSBidWZmZXIgZm9yIHRoZSByZXNldCBzZXF1ZW5jZVxuIik7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYnVmW2krK10gPSAweDU1OworCWJ1ZltpKytdID0gMHhBQTsKKwlidWZbaSsrXSA9IDB4NUE7CisJYnVmW2krK10gPSAweEE1OworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCisJCQkJCQkJICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBpLAorCQkJICBmdGRpX2VsYW5fd3JpdGVfYnVsa19jYWxsYmFjaywgZnRkaSk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZmFpbGVkIHRvIHN1Ym1pdCB1cmIgY29udGFpbmluZyB0aGUgcmVzZXQgc2VxdWVuY2VcbiIpOworCQl1c2JfZnJlZV9jb2hlcmVudChmdGRpLT51ZGV2LCBpLCBidWYsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmdGRpX2VsYW5fc3luY2hyb25pemUoc3RydWN0IHVzYl9mdGRpICpmdGRpKQogewotICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICBpbnQgbG9uZ19zdG9wID0gMTA7Ci0gICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKLSAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7Ci0gICAgICAgIGludCBlcnJfY291bnQgPSAwOwotICAgICAgICByZXR2YWwgPSBmdGRpX2VsYW5fZmx1c2hfaW5wdXRfZmlmbyhmdGRpKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICBmdGRpLT5idWxrX2luX2xlZnQgPSAwOwotICAgICAgICBmdGRpLT5idWxrX2luX2xhc3QgPSAtMTsKLSAgICAgICAgd2hpbGUgKGxvbmdfc3RvcC0tID4gMCkgewotICAgICAgICAgICAgICAgIGludCByZWFkX3N0b3A7Ci0gICAgICAgICAgICAgICAgaW50IHJlYWRfc3R1Y2s7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV9lbGFuX3N5bmNocm9uaXplX2ZsdXNoKGZ0ZGkpOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ0ZGlfZWxhbl9mbHVzaF9pbnB1dF9maWZvKGZ0ZGkpOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICAgICAgICByZXNldDpyZXR2YWwgPSBmdGRpX2VsYW5fc3luY2hyb25pemVfcmVzZXQoZnRkaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgcmVhZF9zdG9wID0gMTAwOwotICAgICAgICAgICAgICAgIHJlYWRfc3R1Y2sgPSAxMDsKLSAgICAgICAgICAgICAgcmVhZDp7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFja2V0X2J5dGVzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCA1MDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmIgPSBmdGRpLT5idWxrX2luX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzX3JlYWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhY2tldF9ieXRlcy0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqYisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc19yZWFkIDwgbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsIGMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IG0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiIC4uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IDB4N0UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAweDU1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVhZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0ciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkgbGltaXQgcmVhY2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFja2V0X2J5dGVzID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHMxID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgczIgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxID09IDB4MzEgJiYgczIgPT0gMHgwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0dWNrLS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMxID09IDB4MzEgJiYgczIgPT0gMHg2MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVhZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0ciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkgbGltaXQgcmVhY2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfc3RvcC0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZWFkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJyZXRyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSBsaW1pdCByZWFjaGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0cnkgbGltaXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZWFkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnkgbGltaXQgcmVhY2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZWFkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVtcHR5IHBhY2tldCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmV0cnkgbGltaXQgcmVhY2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9jb3VudCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0cnkgbGltaXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCB0byBzeW5jaHJvbml6ZVxuIik7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOworCWludCByZXR2YWw7CisJaW50IGxvbmdfc3RvcCA9IDEwOworCWludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKKwlpbnQgcmV0cnlfb25fZW1wdHkgPSAxMDsKKwlpbnQgZXJyX2NvdW50ID0gMDsKKwlyZXR2YWwgPSBmdGRpX2VsYW5fZmx1c2hfaW5wdXRfZmlmbyhmdGRpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWZ0ZGktPmJ1bGtfaW5fbGVmdCA9IDA7CisJZnRkaS0+YnVsa19pbl9sYXN0ID0gLTE7CisJd2hpbGUgKGxvbmdfc3RvcC0tID4gMCkgeworCQlpbnQgcmVhZF9zdG9wOworCQlpbnQgcmVhZF9zdHVjazsKKwkJcmV0dmFsID0gZnRkaV9lbGFuX3N5bmNocm9uaXplX2ZsdXNoKGZ0ZGkpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dmFsID0gZnRkaV9lbGFuX2ZsdXNoX2lucHV0X2ZpZm8oZnRkaSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCXJlc2V0OnJldHZhbCA9IGZ0ZGlfZWxhbl9zeW5jaHJvbml6ZV9yZXNldChmdGRpKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCXJlYWRfc3RvcCA9IDEwMDsKKwkJcmVhZF9zdHVjayA9IDEwOworCXJlYWQ6eworCQkJaW50IHBhY2tldF9ieXRlcyA9IDA7CisJCQlyZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKKwkJCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsCisJCQkJCQkJICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCQkgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorCQkJCQkgICAgICAmcGFja2V0X2J5dGVzLCA1MDApOworCQkJaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKKwkJCQljaGFyIGRpYWdbMzAgKjMgKyA0XTsKKwkJCQljaGFyICpkID0gZGlhZzsKKwkJCQlpbnQgbSA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7CisJCQkJY2hhciAqYiA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyOworCQkJCWludCBieXRlc19yZWFkID0gMDsKKwkJCQl1bnNpZ25lZCBjaGFyIGMgPSAwOworCQkJCWRpYWdbMF0gPSAwOworCQkJCXdoaWxlIChwYWNrZXRfYnl0ZXMtLSA+IDApIHsKKwkJCQkJYyA9ICpiKys7CisJCQkJCWlmIChieXRlc19yZWFkIDwgbSkgeworCQkJCQkJZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsIGMpOworCQkJCQl9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiBtKSB7CisJCQkJCX0gZWxzZQorCQkJCQkJZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKKwkJCQkJYnl0ZXNfcmVhZCArPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGMgPT0gMHg3RSkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoYyA9PSAweDU1KSB7CisJCQkJCQlnb3RvIHJlYWQ7CisJCQkJCX0gZWxzZSBpZiAocmVhZF9zdG9wLS0gPiAwKSB7CisJCQkJCQlnb3RvIHJlYWQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJyZXRyeSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPiAxKSB7CisJCQkJdW5zaWduZWQgY2hhciBzMSA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzBdOworCQkJCXVuc2lnbmVkIGNoYXIgczIgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKKwkJCQlpZiAoczEgPT0gMHgzMSAmJiBzMiA9PSAweDAwKSB7CisJCQkJCWlmIChyZWFkX3N0dWNrLS0gPiAwKSB7CisJCQkJCQlnb3RvIHJlYWQ7CisJCQkJCX0gZWxzZQorCQkJCQkJZ290byByZXNldDsKKwkJCQl9IGVsc2UgaWYgKHMxID09IDB4MzEgJiYgczIgPT0gMHg2MCkgeworCQkJCQlpZiAocmVhZF9zdG9wLS0gPiAwKSB7CisJCQkJCQlnb3RvIHJlYWQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJyZXRyeSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHJlYWRfc3RvcC0tID4gMCkgeworCQkJCQkJZ290byByZWFkOworCQkJCQl9IGVsc2UgeworCQkJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0cnkgbGltaXQgcmVhY2hlZFxuIik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSBpZiAocGFja2V0X2J5dGVzID4gMCkgeworCQkJCWlmIChyZWFkX3N0b3AtLSA+IDApIHsKKwkJCQkJZ290byByZWFkOworCQkJCX0gZWxzZSB7CisJCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInJldHJ5IGxpbWl0IHJlYWNoZWRcbiIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7CisJCQkJaWYgKHJldHJ5X29uX3RpbWVvdXQtLSA+IDApIHsKKwkJCQkJZ290byByZWFkOworCQkJCX0gZWxzZSB7CisJCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZXRyeSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIGlmIChyZXR2YWwgPT0gMCkgeworCQkJCWlmIChyZXRyeV9vbl9lbXB0eS0tID4gMCkgeworCQkJCQlnb3RvIHJlYWQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZW1wdHkgcGFja2V0IHJldHJ5IGxpbWl0IHJlYWNoZWRcbiIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWVycl9jb3VudCArPSAxOworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVycm9yID0gJWRcbiIsCisJCQkJCXJldHZhbCk7CisJCQkJaWYgKHJlYWRfc3RvcC0tID4gMCkgeworCQkJCQlnb3RvIHJlYWQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0cnkgbGltaXQgcmVhY2hlZFxuIik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJmYWlsZWQgdG8gc3luY2hyb25pemVcbiIpOworCXJldHVybiAtRUZBVUxUOwogfQogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zdHVja193YWl0aW5nKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7Ci0gICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKLSAgICAgICAgaW50IHJldHJ5X29uX3N0YXR1cyA9IDUwOwotICAgICAgbW9yZTp7Ci0gICAgICAgICAgICAgICAgaW50IHBhY2tldF9ieXRlcyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgMTAwMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiID0gZnRkaS0+YnVsa19pbl9idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXNfcmVhZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYWNrZXRfYnl0ZXMtLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gKmIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPCBtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGICYgYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IG0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgczEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgczIgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSA9PSAweDMxICYmIHMyID09IDB4NjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHJ5X29uX3N0YXR1cy0tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYjEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIm9ubHkgb25lIGJ5dGUgZmx1c2hlZCBmcm9tIEYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUREkgPSAlMDJYXG4iLCBiMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fc3RhdHVzLS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCg1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiU1RBVFVTIEVSUk9SIHJldHJ5IGwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FVElNRURPVVQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZXRyeSBsaW1pIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0IHJlYWNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZW1wdHkgcGFja2V0IHJldHJ5IGwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkXG4iLCByZXR2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKKwlpbnQgcmV0cnlfb25fZW1wdHkgPSAxMDsKKwlpbnQgcmV0cnlfb25fdGltZW91dCA9IDU7CisJaW50IHJldHJ5X29uX3N0YXR1cyA9IDUwOworbW9yZTp7CisJCWludCBwYWNrZXRfYnl0ZXMgPSAwOworCQlpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCisJCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCQkJICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorCQkJCQkgICZwYWNrZXRfYnl0ZXMsIDEwMDApOworCQlpZiAocGFja2V0X2J5dGVzID4gMikgeworCQkJY2hhciBkaWFnWzMwICozICsgNF07CisJCQljaGFyICpkID0gZGlhZzsKKwkJCWludCBtID0gKHNpemVvZihkaWFnKSAtIDEpIC8gMzsKKwkJCWNoYXIgKmIgPSBmdGRpLT5idWxrX2luX2J1ZmZlcjsKKwkJCWludCBieXRlc19yZWFkID0gMDsKKwkJCWRpYWdbMF0gPSAwOworCQkJd2hpbGUgKHBhY2tldF9ieXRlcy0tID4gMCkgeworCQkJCWNoYXIgYyA9ICpiKys7CisJCQkJaWYgKGJ5dGVzX3JlYWQgPCBtKSB7CisJCQkJCWQgKz0gc3ByaW50ZihkLCAiICUwMlgiLAorCQkJCQkJICAgICAweDAwMDAwMEZGICYgYyk7CisJCQkJfSBlbHNlIGlmIChieXRlc19yZWFkID4gbSkgeworCQkJCX0gZWxzZQorCQkJCQlkICs9IHNwcmludGYoZCwgIiAuLiIpOworCQkJCWJ5dGVzX3JlYWQgKz0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdvdG8gbW9yZTsKKwkJfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPiAxKSB7CisJCQljaGFyIHMxID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMF07CisJCQljaGFyIHMyID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMV07CisJCQlpZiAoczEgPT0gMHgzMSAmJiBzMiA9PSAweDYwKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgaWYgKHJldHJ5X29uX3N0YXR1cy0tID4gMCkgeworCQkJCW1zbGVlcCg1KTsKKwkJCQlnb3RvIG1vcmU7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPiAwKSB7CisJCQljaGFyIGIxID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMF07CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJvbmx5IG9uZSBieXRlIGZsdXNoZWQgZnJvbSBGVERJID0gJTAyWFxuIiwgYjEpOworCQkJaWYgKHJldHJ5X29uX3N0YXR1cy0tID4gMCkgeworCQkJCW1zbGVlcCg1KTsKKwkJCQlnb3RvIG1vcmU7CisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlNUQVRVUyBFUlJPUiByZXRyeSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXR2YWwgPT0gLUVUSU1FRE9VVCkgeworCQkJaWYgKHJldHJ5X29uX3RpbWVvdXQtLSA+IDApIHsKKwkJCQlnb3RvIG1vcmU7CisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZXRyeSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXR2YWwgPT0gMCkgeworCQkJaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7CisJCQkJZ290byBtb3JlOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlbXB0eSBwYWNrZXQgcmV0cnkgbGltaXQgcmVhY2hlZFxuIik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkXG4iLCByZXR2YWwpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9jaGVja2luZ1BDSShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIGludCBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZmdGRpLT5jb250cm9scmVnKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIGlmIChmdGRpLT5jb250cm9scmVnICYgMHgwMDQwMDAwMCkgewotICAgICAgICAgICAgICAgIGlmIChmdGRpLT5jYXJkX2VqZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y2FyZF9lamVjdGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIkNBUkQgRUpFQ1RFRCAtIGNvbnRyb2xyZWcgPSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDhYXG4iLCBmdGRpLT5jb250cm9scmVnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTggZm4gPSBmdGRpLT5mdW5jdGlvbiAtIDE7Ci0gICAgICAgICAgICAgICAgaW50IGFjdGl2ZVBDSWZuID0gZm4gPDwgODsKLSAgICAgICAgICAgICAgICB1MzIgcGNpZGF0YTsKLSAgICAgICAgICAgICAgICB1MzIgcGNpVklEOwotICAgICAgICAgICAgICAgIHUzMiBwY2lQSUQ7Ci0gICAgICAgICAgICAgICAgaW50IHJlZyA9IDA7Ci0gICAgICAgICAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICAgICAgICAgIHBjaVZJRCA9IHBjaWRhdGEgJiAweEZGRkY7Ci0gICAgICAgICAgICAgICAgcGNpUElEID0gKHBjaWRhdGEgPj4gMTYpICYgMHhGRkZGOwotICAgICAgICAgICAgICAgIGlmIChwY2lWSUQgPT0gZnRkaS0+cGxhdGZvcm1fZGF0YS52ZW5kb3IgJiYgcGNpUElEID09Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kYXRhLmRldmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInZlbmRvcj0lMDRYIHBjaVZJRD0lMDRYIGRldmkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZT0lMDRYIHBjaVBJRD0lMDRYXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kYXRhLnZlbmRvciwgcGNpVklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kYXRhLmRldmljZSwgcGNpUElEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWludCBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZmdGRpLT5jb250cm9scmVnKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJaWYgKGZ0ZGktPmNvbnRyb2xyZWcgJiAweDAwNDAwMDAwKSB7CisJCWlmIChmdGRpLT5jYXJkX2VqZWN0ZWQpIHsKKwkJfSBlbHNlIHsKKwkJCWZ0ZGktPmNhcmRfZWplY3RlZCA9IDE7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJDQVJEIEVKRUNURUQgLSBjb250cm9scmVnID0gJTA4WFxuIiwKKwkJCQlmdGRpLT5jb250cm9scmVnKTsKKwkJfQorCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQl1OCBmbiA9IGZ0ZGktPmZ1bmN0aW9uIC0gMTsKKwkJaW50IGFjdGl2ZVBDSWZuID0gZm4gPDwgODsKKwkJdTMyIHBjaWRhdGE7CisJCXUzMiBwY2lWSUQ7CisJCXUzMiBwY2lQSUQ7CisJCWludCByZWcgPSAwOworCQlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorCQkJCQkJICAgJnBjaWRhdGEpOworCQlpZiAoVXh4eFN0YXR1cykKKwkJCXJldHVybiBVeHh4U3RhdHVzOworCQlwY2lWSUQgPSBwY2lkYXRhICYgMHhGRkZGOworCQlwY2lQSUQgPSAocGNpZGF0YSA+PiAxNikgJiAweEZGRkY7CisJCWlmIChwY2lWSUQgPT0gZnRkaS0+cGxhdGZvcm1fZGF0YS52ZW5kb3IgJiYgcGNpUElEID09CisJCSAgICBmdGRpLT5wbGF0Zm9ybV9kYXRhLmRldmljZSkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJ2ZW5kb3I9JTA0WCBwY2lWSUQ9JTA0WCBkZXZpY2U9JTA0WCBwY2lQSUQ9JTA0WFxuIiwKKwkJCQlmdGRpLT5wbGF0Zm9ybV9kYXRhLnZlbmRvciwgcGNpVklELAorCQkJCWZ0ZGktPnBsYXRmb3JtX2RhdGEuZGV2aWNlLCBwY2lQSUQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CiB9CiAKIAogI2RlZmluZSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIG1lbWJlciwgZGF0YSkgZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIFwKLSAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IG9oY2lfcmVncywgbWVtYmVyKSwgMCwgZGF0YSk7CisJCQkJCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBvaGNpX3JlZ3MsIG1lbWJlciksIDAsIGRhdGEpOwogI2RlZmluZSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBtZW1iZXIsIGRhdGEpIGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgXAotICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKKwkJCQkJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKIAogI2RlZmluZSBPSENJX0NPTlRST0xfSU5JVCBPSENJX0NUUkxfQ0JTUgotI2RlZmluZSBPSENJX0lOVFJfSU5JVCAoT0hDSV9JTlRSX01JRSB8IE9IQ0lfSU5UUl9VRSB8IE9IQ0lfSU5UUl9SRCB8IFwKLSAgICAgICAgT0hDSV9JTlRSX1dESCkKKyNkZWZpbmUgT0hDSV9JTlRSX0lOSVQgKE9IQ0lfSU5UUl9NSUUgfCBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfAlcCisJCQlPSENJX0lOVFJfV0RIKQogc3RhdGljIGludCBmdGRpX2VsYW5fY2hlY2tfY29udHJvbGxlcihzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIGludCBxdWlyaykKIHsKLSAgICAgICAgaW50IGRldmljZXMgPSAwOwotICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICB1MzIgaGNfY29udHJvbDsKLSAgICAgICAgaW50IG51bV9wb3J0czsKLSAgICAgICAgdTMyIGNvbnRyb2w7Ci0gICAgICAgIHUzMiByaF9hID0gLTE7Ci0gICAgICAgIHUzMiBzdGF0dXM7Ci0gICAgICAgIHUzMiBmbWludGVydmFsOwotICAgICAgICB1MzIgaGNfZm1pbnRlcnZhbDsKLSAgICAgICAgdTMyIHBlcmlvZGljc3RhcnQ7Ci0gICAgICAgIHUzMiBjbWRzdGF0dXM7Ci0gICAgICAgIHUzMiByb290aHViX2E7Ci0gICAgICAgIGludCBtYXNrID0gT0hDSV9JTlRSX0lOSVQ7Ci0gICAgICAgIGludCBzbGVlcF90aW1lID0gMDsKLSAgICAgICAgaW50IHJlc2V0X3RpbWVvdXQgPSAzMDsgICAgICAgIC8qIC4uLiBhbGxvdyBleHRyYSB0aW1lICovCi0gICAgICAgIGludCB0ZW1wOwotICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyZGlzYWJsZSwgT0hDSV9JTlRSX01JRSk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCByb290aHViLmEsICZyaF9hKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICBudW1fcG9ydHMgPSByaF9hICYgUkhfQV9ORFA7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgZm1pbnRlcnZhbCwgJmhjX2ZtaW50ZXJ2YWwpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIGhjX2ZtaW50ZXJ2YWwgJj0gMHgzZmZmOwotICAgICAgICBpZiAoaGNfZm1pbnRlcnZhbCAhPSBGSSkgewotICAgICAgICB9Ci0gICAgICAgIGhjX2ZtaW50ZXJ2YWwgfD0gRlNNUChoY19mbWludGVydmFsKSA8PCAxNjsKLSAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmaGNfY29udHJvbCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgc3dpdGNoIChoY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpIHsKLSAgICAgICAgY2FzZSBPSENJX1VTQl9PUEVSOgotICAgICAgICAgICAgICAgIHNsZWVwX3RpbWUgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6Ci0gICAgICAgIGNhc2UgT0hDSV9VU0JfUkVTVU1FOgotICAgICAgICAgICAgICAgIGhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKLSAgICAgICAgICAgICAgICBoY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU1VNRTsKLSAgICAgICAgICAgICAgICBzbGVlcF90aW1lID0gMTA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOwotICAgICAgICAgICAgICAgIGhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTRVQ7Ci0gICAgICAgICAgICAgICAgc2xlZXBfdGltZSA9IDUwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsIGhjX2NvbnRyb2wpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY29udHJvbCwgJmNvbnRyb2wpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIG1zbGVlcChzbGVlcF90aW1lKTsKLSAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCByb290aHViLmEsICZyb290aHViX2EpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIGlmICghKHJvb3RodWJfYSAmIFJIX0FfTlBTKSkgeyAgICAgICAgLyogcG93ZXIgZG93biBlYWNoIHBvcnQgKi8KLSAgICAgICAgICAgICAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgbnVtX3BvcnRzOyB0ZW1wKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RodWIucG9ydHN0YXR1c1t0ZW1wXSwgUkhfUFNfTFNEQSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsICZjb250cm9sKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgcmV0cnk6cmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZzdGF0dXMpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGNtZHN0YXR1cywgT0hDSV9IQ1IpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICBleHRyYTp7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZzdGF0dXMpOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICAgICAgICAgIGlmICgwICE9IChzdGF0dXMgJiBPSENJX0hDUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLXJlc2V0X3RpbWVvdXQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJVU0IgSEMgcmVzZXQgdGltZWQgbyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXQhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXh0cmE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWlyayAmIE9IQ0lfUVVJUktfSU5JVFJFU0VUKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY29udHJvbCwgaGNfY29udHJvbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgZWRfY29udHJvbGhlYWQsIDB4MDAwMDAwMDApOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGVkX2J1bGtoZWFkLCAweDExMDAwMDAwKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBoY2NhLCAweDAwMDAwMDAwKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGZtaW50ZXJ2YWwsICZmbWludGVydmFsKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBmbWludGVydmFsLAotICAgICAgICAgICAgICAgICgoZm1pbnRlcnZhbCAmIEZJVCkgXiBGSVQpIHwgaGNfZm1pbnRlcnZhbCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcGVyaW9kaWNzdGFydCwKLSAgICAgICAgICAgICAgICAoKDkgKmhjX2ZtaW50ZXJ2YWwpIC8gMTApICYgMHgzZmZmKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGZtaW50ZXJ2YWwsICZmbWludGVydmFsKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHBlcmlvZGljc3RhcnQsICZwZXJpb2RpY3N0YXJ0KTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICBpZiAoMCA9PSAoZm1pbnRlcnZhbCAmIDB4M2ZmZjAwMDApIHx8IDAgPT0gcGVyaW9kaWNzdGFydCkgewotICAgICAgICAgICAgICAgIGlmICghKHF1aXJrICYgT0hDSV9RVUlSS19JTklUUkVTRVQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxdWlyayB8PSBPSENJX1FVSVJLX0lOSVRSRVNFVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJpbml0IGVyciglMDh4ICUwNHgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbWludGVydmFsLCBwZXJpb2RpY3N0YXJ0KTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGNvbnRyb2xsZXIgb3BlcmF0aW9ucyAqLwotICAgICAgICBoY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7Ci0gICAgICAgIGhjX2NvbnRyb2wgfD0gT0hDSV9DT05UUk9MX0lOSVQgfCBPSENJX0NUUkxfQkxFIHwgT0hDSV9VU0JfT1BFUjsKLSAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY29udHJvbCwgaGNfY29udHJvbCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY21kc3RhdHVzLCBPSENJX0JMRik7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZjbWRzdGF0dXMpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY29udHJvbCwgJmNvbnRyb2wpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIHJvb3RodWIuc3RhdHVzLCBSSF9IU19EUldFKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyc3RhdHVzLCBtYXNrKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyZGlzYWJsZSwKLSAgICAgICAgICAgICAgICBPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX09DIHwgT0hDSV9JTlRSX1JIU0MgfCBPSENJX0lOVFJfRk5PIHwKLSAgICAgICAgICAgICAgICBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfU0YgfCBPSENJX0lOVFJfV0RIIHwKLSAgICAgICAgICAgICAgICBPSENJX0lOVFJfU08pOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7ICAgICAgICAvKiBoYW5kbGUgcm9vdCBodWIgaW5pdCBxdWlya3MgLi4uICovCi0gICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5hLCAmcm9vdGh1Yl9hKTsKLSAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByb290aHViX2EgJj0gfihSSF9BX1BTTSB8IFJIX0FfT0NQTSk7Ci0gICAgICAgIGlmIChxdWlyayAmIE9IQ0lfUVVJUktfU1VQRVJJTykgewotICAgICAgICAgICAgICAgIHJvb3RodWJfYSB8PSBSSF9BX05PQ1A7Ci0gICAgICAgICAgICAgICAgcm9vdGh1Yl9hICY9IH4oUkhfQV9QT1RQR1QgfCBSSF9BX05QUyk7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5hLCByb290aHViX2EpOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICB9IGVsc2UgaWYgKChxdWlyayAmIE9IQ0lfUVVJUktfQU1ENzU2KSB8fCBkaXN0cnVzdF9maXJtd2FyZSkgewotICAgICAgICAgICAgICAgIHJvb3RodWJfYSB8PSBSSF9BX05QUzsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCByb290aHViLmEsIHJvb3RodWJfYSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5zdGF0dXMsIFJIX0hTX0xQU0MpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIHJvb3RodWIuYiwKLSAgICAgICAgICAgICAgICAocm9vdGh1Yl9hICYgUkhfQV9OUFMpID8gMCA6IFJIX0JfUFBDTSk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgbWRlbGF5KChyb290aHViX2EgPj4gMjMpICYgMHgxZmUpOwotICAgICAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgbnVtX3BvcnRzOyB0ZW1wKyspIHsKLSAgICAgICAgICAgICAgICB1MzIgcG9ydHN0YXR1czsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHJvb3RodWIucG9ydHN0YXR1c1t0ZW1wXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwb3J0c3RhdHVzKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgICAgICAgICBpZiAoMSAmIHBvcnRzdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRldmljZXM7CisJaW50IGRldmljZXMgPSAwOworCWludCByZXR2YWw7CisJdTMyIGhjX2NvbnRyb2w7CisJaW50IG51bV9wb3J0czsKKwl1MzIgY29udHJvbDsKKwl1MzIgcmhfYSA9IC0xOworCXUzMiBzdGF0dXM7CisJdTMyIGZtaW50ZXJ2YWw7CisJdTMyIGhjX2ZtaW50ZXJ2YWw7CisJdTMyIHBlcmlvZGljc3RhcnQ7CisJdTMyIGNtZHN0YXR1czsKKwl1MzIgcm9vdGh1Yl9hOworCWludCBtYXNrID0gT0hDSV9JTlRSX0lOSVQ7CisJaW50IHNsZWVwX3RpbWUgPSAwOworCWludCByZXNldF90aW1lb3V0ID0gMzA7ICAgICAgICAvKiAuLi4gYWxsb3cgZXh0cmEgdGltZSAqLworCWludCB0ZW1wOworCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGludHJkaXNhYmxlLCBPSENJX0lOVFJfTUlFKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY29udHJvbCwgJmNvbnRyb2wpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCByb290aHViLmEsICZyaF9hKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW51bV9wb3J0cyA9IHJoX2EgJiBSSF9BX05EUDsKKwlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGZtaW50ZXJ2YWwsICZoY19mbWludGVydmFsKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWhjX2ZtaW50ZXJ2YWwgJj0gMHgzZmZmOworCWlmIChoY19mbWludGVydmFsICE9IEZJKSB7CisJfQorCWhjX2ZtaW50ZXJ2YWwgfD0gRlNNUChoY19mbWludGVydmFsKSA8PCAxNjsKKwlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsICZoY19jb250cm9sKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXN3aXRjaCAoaGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9PUEVSOgorCQlzbGVlcF90aW1lID0gMDsKKwkJYnJlYWs7CisJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCWNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQloY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisJCWhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTVU1FOworCQlzbGVlcF90aW1lID0gMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKwkJaGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNFVDsKKwkJc2xlZXBfdGltZSA9IDUwOworCQlicmVhazsKKwl9CisJcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY29udHJvbCwgaGNfY29udHJvbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsICZjb250cm9sKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1zbGVlcChzbGVlcF90aW1lKTsKKwlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHJvb3RodWIuYSwgJnJvb3RodWJfYSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAoIShyb290aHViX2EgJiBSSF9BX05QUykpIHsgICAgICAgIC8qIHBvd2VyIGRvd24gZWFjaCBwb3J0ICovCisJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBudW1fcG9ydHM7IHRlbXArKykgeworCQkJcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwKKwkJCQkJCSAgIHJvb3RodWIucG9ydHN0YXR1c1t0ZW1wXSwgUkhfUFNfTFNEQSk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKK3JldHJ5OnJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY21kc3RhdHVzLCAmc3RhdHVzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGNtZHN0YXR1cywgT0hDSV9IQ1IpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CitleHRyYTp7CisJCXJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY21kc3RhdHVzLCAmc3RhdHVzKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmICgwICE9IChzdGF0dXMgJiBPSENJX0hDUikpIHsKKwkJCWlmICgtLXJlc2V0X3RpbWVvdXQgPT0gMCkgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBIQyByZXNldCB0aW1lZCBvdXQhXG4iKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0gZWxzZSB7CisJCQkJbXNsZWVwKDUpOworCQkJCWdvdG8gZXh0cmE7CisJCQl9CisJCX0KKwl9CisJaWYgKHF1aXJrICYgT0hDSV9RVUlSS19JTklUUkVTRVQpIHsKKwkJcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY29udHJvbCwgaGNfY29udHJvbCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsICZjb250cm9sKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGVkX2NvbnRyb2xoZWFkLCAweDAwMDAwMDAwKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGVkX2J1bGtoZWFkLCAweDExMDAwMDAwKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGhjY2EsIDB4MDAwMDAwMDApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBmbWludGVydmFsLCAmZm1pbnRlcnZhbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBmbWludGVydmFsLAorCQkJCSAgICgoZm1pbnRlcnZhbCAmIEZJVCkgXiBGSVQpIHwgaGNfZm1pbnRlcnZhbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBwZXJpb2RpY3N0YXJ0LAorCQkJCSAgICgoOSAqaGNfZm1pbnRlcnZhbCkgLyAxMCkgJiAweDNmZmYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBmbWludGVydmFsLCAmZm1pbnRlcnZhbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHBlcmlvZGljc3RhcnQsICZwZXJpb2RpY3N0YXJ0KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmICgwID09IChmbWludGVydmFsICYgMHgzZmZmMDAwMCkgfHwgMCA9PSBwZXJpb2RpY3N0YXJ0KSB7CisJCWlmICghKHF1aXJrICYgT0hDSV9RVUlSS19JTklUUkVTRVQpKSB7CisJCQlxdWlyayB8PSBPSENJX1FVSVJLX0lOSVRSRVNFVDsKKwkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZQorCQkJZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiaW5pdCBlcnIoJTA4eCAlMDR4KVxuIiwKKwkJCQlmbWludGVydmFsLCBwZXJpb2RpY3N0YXJ0KTsKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgY29udHJvbGxlciBvcGVyYXRpb25zICovCisJaGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOworCWhjX2NvbnRyb2wgfD0gT0hDSV9DT05UUk9MX0lOSVQgfCBPSENJX0NUUkxfQkxFIHwgT0hDSV9VU0JfT1BFUjsKKwlyZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBjb250cm9sLCBoY19jb250cm9sKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGNtZHN0YXR1cywgT0hDSV9CTEYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZjbWRzdGF0dXMpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCByb290aHViLnN0YXR1cywgUkhfSFNfRFJXRSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyc3RhdHVzLCBtYXNrKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGludHJkaXNhYmxlLAorCQkJCSAgIE9IQ0lfSU5UUl9NSUUgfCBPSENJX0lOVFJfT0MgfCBPSENJX0lOVFJfUkhTQyB8IE9IQ0lfSU5UUl9GTk8gfAorCQkJCSAgIE9IQ0lfSU5UUl9VRSB8IE9IQ0lfSU5UUl9SRCB8IE9IQ0lfSU5UUl9TRiB8IE9IQ0lfSU5UUl9XREggfAorCQkJCSAgIE9IQ0lfSU5UUl9TTyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsgICAgICAgIC8qIGhhbmRsZSByb290IGh1YiBpbml0IHF1aXJrcyAuLi4gKi8KKwlyZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHJvb3RodWIuYSwgJnJvb3RodWJfYSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyb290aHViX2EgJj0gfihSSF9BX1BTTSB8IFJIX0FfT0NQTSk7CisJaWYgKHF1aXJrICYgT0hDSV9RVUlSS19TVVBFUklPKSB7CisJCXJvb3RodWJfYSB8PSBSSF9BX05PQ1A7CisJCXJvb3RodWJfYSAmPSB+KFJIX0FfUE9UUEdUIHwgUkhfQV9OUFMpOworCQlyZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCByb290aHViLmEsIHJvb3RodWJfYSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0gZWxzZSBpZiAoKHF1aXJrICYgT0hDSV9RVUlSS19BTUQ3NTYpIHx8IGRpc3RydXN0X2Zpcm13YXJlKSB7CisJCXJvb3RodWJfYSB8PSBSSF9BX05QUzsKKwkJcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5hLCByb290aHViX2EpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5zdGF0dXMsIFJIX0hTX0xQU0MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5iLAorCQkJCSAgIChyb290aHViX2EgJiBSSF9BX05QUykgPyAwIDogUkhfQl9QUENNKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY29udHJvbCwgJmNvbnRyb2wpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJbWRlbGF5KChyb290aHViX2EgPj4gMjMpICYgMHgxZmUpOworCWZvciAodGVtcCA9IDA7IHRlbXAgPCBudW1fcG9ydHM7IHRlbXArKykgeworCQl1MzIgcG9ydHN0YXR1czsKKwkJcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCByb290aHViLnBvcnRzdGF0dXNbdGVtcF0sCisJCQkJCSAgJnBvcnRzdGF0dXMpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaWYgKDEgJiBwb3J0c3RhdHVzKQorCQkJZGV2aWNlcyArPSAxOworCX0KKwlyZXR1cm4gZGV2aWNlczsKIH0KIAogc3RhdGljIGludCBmdGRpX2VsYW5fc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIGludCBmbikKIHsKLSAgICAgICAgdTMyIGxhdGVuY2VfdGltZXI7Ci0gICAgICAgIGludCBVeHh4U3RhdHVzOwotICAgICAgICB1MzIgcGNpZGF0YTsKLSAgICAgICAgaW50IHJlZyA9IDA7Ci0gICAgICAgIGludCBhY3RpdmVQQ0lmbiA9IGZuIDw8IDg7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyNUZMIHwgMHgyODAwKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIHJlZyA9IDE2OwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKLSAgICAgICAgICAgICAgICAweEZGRkZGRkZGKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCi0gICAgICAgICAgICAgICAgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCi0gICAgICAgICAgICAgICAgMHhGMDAwMDAwMCk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAotICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIHJlZyA9IDEyOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAotICAgICAgICAgICAgICAgICZsYXRlbmNlX3RpbWVyKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIGxhdGVuY2VfdGltZXIgJj0gMHhGRkZGMDBGRjsKLSAgICAgICAgbGF0ZW5jZV90aW1lciB8PSAweDAwMDAxNjAwOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMHgwMCwKLSAgICAgICAgICAgICAgICBsYXRlbmNlX3RpbWVyKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCi0gICAgICAgICAgICAgICAgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgcmVnID0gNDsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDB4MDAsCi0gICAgICAgICAgICAgICAgMHgwNik7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAotICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIGZvciAocmVnID0gMDsgcmVnIDw9IDB4NTQ7IHJlZyArPSA0KSB7Ci0gICAgICAgICAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOworCXUzMiBsYXRlbmNlX3RpbWVyOworCWludCBVeHh4U3RhdHVzOworCXUzMiBwY2lkYXRhOworCWludCByZWcgPSAwOworCWludCBhY3RpdmVQQ0lmbiA9IGZuIDw8IDg7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDI1RkwgfCAweDI4MDApOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlyZWcgPSAxNjsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKwkJCQkJICAgIDB4RkZGRkZGRkYpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorCQkJCQkgICAmcGNpZGF0YSk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorCQkJCQkgICAgMHhGMDAwMDAwMCk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisJCQkJCSAgICZwY2lkYXRhKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJcmVnID0gMTI7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKwkJCQkJICAgJmxhdGVuY2VfdGltZXIpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlsYXRlbmNlX3RpbWVyICY9IDB4RkZGRjAwRkY7CisJbGF0ZW5jZV90aW1lciB8PSAweDAwMDAxNjAwOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAweDAwLAorCQkJCQkgICAgbGF0ZW5jZV90aW1lcik7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisJCQkJCSAgICZwY2lkYXRhKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJcmVnID0gNDsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMHgwMCwKKwkJCQkJICAgIDB4MDYpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorCQkJCQkgICAmcGNpZGF0YSk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCWZvciAocmVnID0gMDsgcmVnIDw9IDB4NTQ7IHJlZyArPSA0KSB7CisJCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisJCWlmIChVeHh4U3RhdHVzKQorCQkJcmV0dXJuIFV4eHhTdGF0dXM7CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9jbG9zZV9jb250cm9sbGVyKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgaW50IGZuKQogewotICAgICAgICB1MzIgbGF0ZW5jZV90aW1lcjsKLSAgICAgICAgaW50IFV4eHhTdGF0dXM7Ci0gICAgICAgIHUzMiBwY2lkYXRhOwotICAgICAgICBpbnQgcmVnID0gMDsKLSAgICAgICAgaW50IGFjdGl2ZVBDSWZuID0gZm4gPDwgODsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDI1RkwgfCAweDI4MDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgcmVnID0gMTY7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAotICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKLSAgICAgICAgICAgICAgICAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKLSAgICAgICAgICAgICAgICAweDAwMDAwMDAwKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCi0gICAgICAgICAgICAgICAgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgcmVnID0gMTI7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCi0gICAgICAgICAgICAgICAgJmxhdGVuY2VfdGltZXIpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgbGF0ZW5jZV90aW1lciAmPSAweEZGRkYwMEZGOwotICAgICAgICBsYXRlbmNlX3RpbWVyIHw9IDB4MDAwMDE2MDA7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAweDAwLAotICAgICAgICAgICAgICAgIGxhdGVuY2VfdGltZXIpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKLSAgICAgICAgICAgICAgICAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICByZWcgPSA0OwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMHgwMCwKLSAgICAgICAgICAgICAgICAweDAwKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCi0gICAgICAgICAgICAgICAgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgcmV0dXJuIDA7CisJdTMyIGxhdGVuY2VfdGltZXI7CisJaW50IFV4eHhTdGF0dXM7CisJdTMyIHBjaWRhdGE7CisJaW50IHJlZyA9IDA7CisJaW50IGFjdGl2ZVBDSWZuID0gZm4gPDwgODsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjVGTCB8IDB4MjgwMCk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCXJlZyA9IDE2OworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorCQkJCQkgICAgMHhGRkZGRkZGRik7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisJCQkJCSAgICZwY2lkYXRhKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisJCQkJCSAgICAweDAwMDAwMDAwKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKwkJCQkJICAgJnBjaWRhdGEpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlyZWcgPSAxMjsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorCQkJCQkgICAmbGF0ZW5jZV90aW1lcik7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCWxhdGVuY2VfdGltZXIgJj0gMHhGRkZGMDBGRjsKKwlsYXRlbmNlX3RpbWVyIHw9IDB4MDAwMDE2MDA7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDB4MDAsCisJCQkJCSAgICBsYXRlbmNlX3RpbWVyKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKwkJCQkJICAgJnBjaWRhdGEpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlyZWcgPSA0OworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAweDAwLAorCQkJCQkgICAgMHgwMCk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisJCQkJCSAgICZwY2lkYXRhKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgZm4sIGludCBxdWlyaykKIHsKLSAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgaW50IFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fc2V0dXBfY29udHJvbGxlcihmdGRpLCBmbik7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICByZXN1bHQgPSBmdGRpX2VsYW5fY2hlY2tfY29udHJvbGxlcihmdGRpLCBxdWlyayk7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fY2xvc2VfY29udHJvbGxlcihmdGRpLCBmbik7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICByZXR1cm4gcmVzdWx0OworCWludCByZXN1bHQ7CisJaW50IFV4eHhTdGF0dXM7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9zZXR1cF9jb250cm9sbGVyKGZ0ZGksIGZuKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJcmVzdWx0ID0gZnRkaV9lbGFuX2NoZWNrX2NvbnRyb2xsZXIoZnRkaSwgcXVpcmspOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fY2xvc2VfY29udHJvbGxlcihmdGRpLCBmbik7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgZnRkaV9lbGFuX2VudW1lcmF0ZVBDSShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCiB7Ci0gICAgICAgIHUzMiBjb250cm9scmVnOwotICAgICAgICB1OCBzZW5zZWJpdHM7Ci0gICAgICAgIGludCBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZjb250cm9scmVnKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAwMDBMKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIG1zbGVlcCg3NTApOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjAwTCB8IDB4MTAwKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMDBMIHwgMHg1MDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjBDTCB8IDB4MDAwKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMERMIHwgMHgwMDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgbXNsZWVwKDI1MCk7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMEZMIHwgMHgwMDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjVGTCB8IDB4ODAwKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBtc2xlZXAoMTAwMCk7Ci0gICAgICAgIHNlbnNlYml0cyA9IChjb250cm9scmVnID4+IDE2KSAmIDB4MDAwRjsKLSAgICAgICAgaWYgKDB4MEQgPT0gc2Vuc2ViaXRzKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBlbHNlCisJdTMyIGNvbnRyb2xyZWc7CisJdTggc2Vuc2ViaXRzOworCWludCBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMDAwTCk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCW1zbGVlcCg3NTApOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMDBMIHwgMHgxMDApOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjAwTCB8IDB4NTAwKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMENMIHwgMHgwMDApOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjBETCB8IDB4MDAwKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJbXNsZWVwKDI1MCk7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDIwRkwgfCAweDAwMCk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwlVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjVGTCB8IDB4ODAwKTsKKwlpZiAoVXh4eFN0YXR1cykKKwkJcmV0dXJuIFV4eHhTdGF0dXM7CisJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7CisJaWYgKFV4eHhTdGF0dXMpCisJCXJldHVybiBVeHh4U3RhdHVzOworCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworCWlmIChVeHh4U3RhdHVzKQorCQlyZXR1cm4gVXh4eFN0YXR1czsKKwltc2xlZXAoMTAwMCk7CisJc2Vuc2ViaXRzID0gKGNvbnRyb2xyZWcgPj4gMTYpICYgMHgwMDBGOworCWlmICgweDBEID09IHNlbnNlYml0cykKKwkJcmV0dXJuIDA7CisJZWxzZQogCQlyZXR1cm4gLSBFTlhJTzsKIH0KIAogc3RhdGljIGludCBmdGRpX2VsYW5fc2V0dXBPSENJKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKIHsKLSAgICAgICAgaW50IFV4eHhTdGF0dXM7Ci0gICAgICAgIHUzMiBwY2lkYXRhOwotICAgICAgICBpbnQgcmVnID0gMDsKLSAgICAgICAgdTggZm47Ci0gICAgICAgIGludCBhY3RpdmVQQ0lmbiA9IDA7Ci0gICAgICAgIGludCBtYXhfZGV2aWNlcyA9IDA7Ci0gICAgICAgIGludCBjb250cm9sbGVycyA9IDA7Ci0gICAgICAgIGludCB1bnJlY29nbml6ZWQgPSAwOwotICAgICAgICBmdGRpLT5mdW5jdGlvbiA9IDA7Ci0gICAgICAgIGZvciAoZm4gPSAwOyAoZm4gPCA0KTsgZm4rKykgewotICAgICAgICAgICAgICAgIHUzMiBwY2lWSUQgPSAwOwotICAgICAgICAgICAgICAgIHUzMiBwY2lQSUQgPSAwOwotICAgICAgICAgICAgICAgIGludCBkZXZpY2VzID0gMDsKLSAgICAgICAgICAgICAgICBhY3RpdmVQQ0lmbiA9IGZuIDw8IDg7Ci0gICAgICAgICAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICAgICAgICAgIHBjaVZJRCA9IHBjaWRhdGEgJiAweEZGRkY7Ci0gICAgICAgICAgICAgICAgcGNpUElEID0gKHBjaWRhdGEgPj4gMTYpICYgMHhGRkZGOwotICAgICAgICAgICAgICAgIGlmICgocGNpVklEID09IFBDSV9WRU5ET1JfSURfT1BUSSkgJiYgKHBjaVBJRCA9PSAweGM4NjEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzID0gZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoZnRkaSwgZm4sIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcnMgKz0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwY2lWSUQgPT0gUENJX1ZFTkRPUl9JRF9ORUMpICYmIChwY2lQSUQgPT0gMHgwMDM1KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgPSBmdGRpX2VsYW5fZm91bmRfY29udHJvbGxlcihmdGRpLCBmbiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVycyArPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX0FMKSAmJiAocGNpUElEID09IDB4NTIzNykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgPSBmdGRpX2VsYW5fZm91bmRfY29udHJvbGxlcihmdGRpLCBmbiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVycyArPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX0FUVCkgJiYgKHBjaVBJRCA9PSAweDU4MDIpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzICs9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwY2lWSUQgPT0gUENJX1ZFTkRPUl9JRF9BTUQgJiYgcGNpUElEID09IDB4NzQwYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSENJX1FVSVJLX0FNRDc1Nik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVycyArPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGNpVklEID09IFBDSV9WRU5ET1JfSURfQ09NUEFRICYmIHBjaVBJRCA9PSAweGEwZjgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgPSBmdGRpX2VsYW5fZm91bmRfY29udHJvbGxlcihmdGRpLCBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0hDSV9RVUlSS19aRk1JQ1JPKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzICs9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHBjaWRhdGEpIHsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVucmVjb2duaXplZCArPSAxOwotICAgICAgICAgICAgICAgIGlmIChkZXZpY2VzID4gbWF4X2RldmljZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kZXZpY2VzID0gZGV2aWNlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmZ1bmN0aW9uID0gZm4gKyAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS52ZW5kb3IgPSBwY2lWSUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kYXRhLmRldmljZSA9IHBjaVBJRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZ0ZGktPmZ1bmN0aW9uID4gMCkgewotICAgICAgICAgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fc2V0dXBfY29udHJvbGxlcihmdGRpLAotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZnVuY3Rpb24gLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXJzID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgIH0gZWxzZSBpZiAodW5yZWNvZ25pemVkID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnRkaS0+ZW51bWVyYXRlZCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKLSAgICAgICAgfQorCWludCBVeHh4U3RhdHVzOworCXUzMiBwY2lkYXRhOworCWludCByZWcgPSAwOworCXU4IGZuOworCWludCBhY3RpdmVQQ0lmbiA9IDA7CisJaW50IG1heF9kZXZpY2VzID0gMDsKKwlpbnQgY29udHJvbGxlcnMgPSAwOworCWludCB1bnJlY29nbml6ZWQgPSAwOworCWZ0ZGktPmZ1bmN0aW9uID0gMDsKKwlmb3IgKGZuID0gMDsgKGZuIDwgNCk7IGZuKyspIHsKKwkJdTMyIHBjaVZJRCA9IDA7CisJCXUzMiBwY2lQSUQgPSAwOworCQlpbnQgZGV2aWNlcyA9IDA7CisJCWFjdGl2ZVBDSWZuID0gZm4gPDwgODsKKwkJVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKwkJCQkJCSAgICZwY2lkYXRhKTsKKwkJaWYgKFV4eHhTdGF0dXMpCisJCQlyZXR1cm4gVXh4eFN0YXR1czsKKwkJcGNpVklEID0gcGNpZGF0YSAmIDB4RkZGRjsKKwkJcGNpUElEID0gKHBjaWRhdGEgPj4gMTYpICYgMHhGRkZGOworCQlpZiAoKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX09QVEkpICYmIChwY2lQSUQgPT0gMHhjODYxKSkgeworCQkJZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLCAwKTsKKwkJCWNvbnRyb2xsZXJzICs9IDE7CisJCX0gZWxzZSBpZiAoKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX05FQykgJiYgKHBjaVBJRCA9PSAweDAwMzUpKQorCQl7CisJCQlkZXZpY2VzID0gZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoZnRkaSwgZm4sIDApOworCQkJY29udHJvbGxlcnMgKz0gMTsKKwkJfSBlbHNlIGlmICgocGNpVklEID09IFBDSV9WRU5ET1JfSURfQUwpICYmIChwY2lQSUQgPT0gMHg1MjM3KSkgeworCQkJZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLCAwKTsKKwkJCWNvbnRyb2xsZXJzICs9IDE7CisJCX0gZWxzZSBpZiAoKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX0FUVCkgJiYgKHBjaVBJRCA9PSAweDU4MDIpKQorCQl7CisJCQlkZXZpY2VzID0gZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoZnRkaSwgZm4sIDApOworCQkJY29udHJvbGxlcnMgKz0gMTsKKwkJfSBlbHNlIGlmIChwY2lWSUQgPT0gUENJX1ZFTkRPUl9JRF9BTUQgJiYgcGNpUElEID09IDB4NzQwYykgeworCQkJZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLAorCQkJCQkJCSAgICAgT0hDSV9RVUlSS19BTUQ3NTYpOworCQkJY29udHJvbGxlcnMgKz0gMTsKKwkJfSBlbHNlIGlmIChwY2lWSUQgPT0gUENJX1ZFTkRPUl9JRF9DT01QQVEgJiYgcGNpUElEID09IDB4YTBmOCkgeworCQkJZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLAorCQkJCQkJCSAgICAgT0hDSV9RVUlSS19aRk1JQ1JPKTsKKwkJCWNvbnRyb2xsZXJzICs9IDE7CisJCX0gZWxzZSBpZiAoMCA9PSBwY2lkYXRhKSB7CisJCX0gZWxzZQorCQkJdW5yZWNvZ25pemVkICs9IDE7CisJCWlmIChkZXZpY2VzID4gbWF4X2RldmljZXMpIHsKKwkJCW1heF9kZXZpY2VzID0gZGV2aWNlczsKKwkJCWZ0ZGktPmZ1bmN0aW9uID0gZm4gKyAxOworCQkJZnRkaS0+cGxhdGZvcm1fZGF0YS52ZW5kb3IgPSBwY2lWSUQ7CisJCQlmdGRpLT5wbGF0Zm9ybV9kYXRhLmRldmljZSA9IHBjaVBJRDsKKwkJfQorCX0KKwlpZiAoZnRkaS0+ZnVuY3Rpb24gPiAwKSB7CisJCVV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fc2V0dXBfY29udHJvbGxlcihmdGRpLAorCQkJCQkJCWZ0ZGktPmZ1bmN0aW9uIC0gMSk7CisJCWlmIChVeHh4U3RhdHVzKQorCQkJcmV0dXJuIFV4eHhTdGF0dXM7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoY29udHJvbGxlcnMgPiAwKSB7CisJCXJldHVybiAtRU5YSU87CisJfSBlbHNlIGlmICh1bnJlY29nbml6ZWQgPiAwKSB7CisJCXJldHVybiAtRU5YSU87CisJfSBlbHNlIHsKKwkJZnRkaS0+ZW51bWVyYXRlZCA9IDA7CisJCXJldHVybiAtRU5YSU87CisJfQogfQogCiAKIC8qCi0qIHdlIHVzZSBvbmx5IHRoZSBmaXJzdCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHMKLSovCisgKiB3ZSB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzCisgKi8KIHN0YXRpYyBpbnQgZnRkaV9lbGFuX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0gICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLSAgICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKLSAgICAgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLSAgICAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgaW50IHJldHZhbCA9IC1FTk9NRU07Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaTsKIAogCWZ0ZGkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2Z0ZGkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZ0ZGkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIk91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICB9CisJaWYgKCFmdGRpKQorCQlyZXR1cm4gLUVOT01FTTsKIAotICAgICAgICBtdXRleF9sb2NrKCZmdGRpX21vZHVsZV9sb2NrKTsKLSAgICAgICAgbGlzdF9hZGRfdGFpbCgmZnRkaS0+ZnRkaV9saXN0LCAmZnRkaV9zdGF0aWNfbGlzdCk7Ci0gICAgICAgIGZ0ZGktPnNlcXVlbmNlX251bSA9ICsrZnRkaV9pbnN0YW5jZXM7Ci0gICAgICAgIG11dGV4X3VubG9jaygmZnRkaV9tb2R1bGVfbG9jayk7Ci0gICAgICAgIGZ0ZGlfZWxhbl9pbml0X2tyZWYoZnRkaSk7CisJbXV0ZXhfbG9jaygmZnRkaV9tb2R1bGVfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZnRkaS0+ZnRkaV9saXN0LCAmZnRkaV9zdGF0aWNfbGlzdCk7CisJZnRkaS0+c2VxdWVuY2VfbnVtID0gKytmdGRpX2luc3RhbmNlczsKKwltdXRleF91bmxvY2soJmZ0ZGlfbW9kdWxlX2xvY2spOworCWZ0ZGlfZWxhbl9pbml0X2tyZWYoZnRkaSk7CiAJc2VtYV9pbml0KCZmdGRpLT5zd19sb2NrLCAxKTsKLSAgICAgICAgZnRkaS0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7Ci0gICAgICAgIGZ0ZGktPmludGVyZmFjZSA9IGludGVyZmFjZTsKLSAgICAgICAgbXV0ZXhfaW5pdCgmZnRkaS0+dTEzMl9sb2NrKTsKLSAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OwotICAgICAgICBpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKLSAgICAgICAgICAgICAgICBpZiAoIWZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisJZnRkaS0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJZnRkaS0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCW11dGV4X2luaXQoJmZ0ZGktPnUxMzJfbG9jayk7CisJZnRkaS0+ZXhwZWN0ZWQgPSA0OworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQlpZiAoIWZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCiAJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplID0gdXNiX2VuZHBvaW50X21heHAoZW5kcG9pbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnRkaS0+YnVsa19pbl9idWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVsa19pbl9idWZmZXJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSAtRU5PTUVNOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmJgorCQkJYnVmZmVyX3NpemUgPSB1c2JfZW5kcG9pbnRfbWF4cChlbmRwb2ludCk7CisJCQlmdGRpLT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJCWZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlmdGRpLT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFmdGRpLT5idWxrX2luX2J1ZmZlcikgeworCQkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlclxuIik7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9CisJCWlmICghZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYmCiAJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEoZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIgJiYgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSkgewotICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsayIKLSAgICAgICAgICAgICAgICAgICAgICAgICItb3V0IGVuZHBvaW50c1xuIik7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT0RFVjsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJpbnRlcmZhY2UgJWQgaGFzIEk9JTAyWCBPPSUwMlhcbiIsCi0gICAgICAgICAgICAgICAgaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciwKLSAgICAgICAgICAgICAgICBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIpOwotICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZnRkaSk7Ci0gICAgICAgIGlmIChpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPT0gMCAmJgotICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID09IDB4ODEgJiYKLSAgICAgICAgICAgICAgICBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIgPT0gMHgwMikgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmZnRkaV9lbGFuX2p0YWdfY2xhc3MpOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGRldmljZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNsYXNzID0gJmZ0ZGlfZWxhbl9qdGFnX2NsYXNzOwotICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBGRFRJPSVwIEpUQUcgaW50ZXJmYWNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIG5vdyBhdHRhY2hlZCB0byBmdGRpJWRcbiIsIGZ0ZGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5taW5vcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID09IDEgJiYKLSAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciA9PSAweDgzICYmCi0gICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyID09IDB4MDQpIHsKLSAgICAgICAgICAgICAgICBmdGRpLT5jbGFzcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBGRFRJPSVwIEVMQU4gaW50ZXJmYWNlICVkIG5vdyBhIgotICAgICAgICAgICAgICAgICAgICAgICAgImN0aXZhdGVkXG4iLCBmdGRpLCBpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwotICAgICAgICAgICAgICAgIElOSVRfREVMQVlFRF9XT1JLKCZmdGRpLT5zdGF0dXNfd29yaywgZnRkaV9lbGFuX3N0YXR1c193b3JrKTsKLSAgICAgICAgICAgICAgICBJTklUX0RFTEFZRURfV09SSygmZnRkaS0+Y29tbWFuZF93b3JrLCBmdGRpX2VsYW5fY29tbWFuZF93b3JrKTsKLSAgICAgICAgICAgICAgICBJTklUX0RFTEFZRURfV09SSygmZnRkaS0+cmVzcG9uZF93b3JrLCBmdGRpX2VsYW5fcmVzcG9uZF93b3JrKTsKLSAgICAgICAgICAgICAgICBmdGRpX3N0YXR1c19xdWV1ZV93b3JrKGZ0ZGksIG1zZWNzX3RvX2ppZmZpZXMoMyAqMTAwMCkpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBFTEFOJ3MgVTEzMiBkZXZpY2VcbiIpOwotICAgICAgICAgICAgICAgIHJldHZhbCA9IC1FTk9ERVY7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgZXJyb3I6aWYgKGZ0ZGkpIHsKLSAgICAgICAgICAgICAgICBmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldHZhbDsKKwkJCWZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9CisJCQkJZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKwl9CisJaWYgKCEoZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIgJiYgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSkgeworCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50c1xuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJpbnRlcmZhY2UgJWQgaGFzIEk9JTAyWCBPPSUwMlhcbiIsCisJCSBpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyLAorCQkgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZnRkaSk7CisJaWYgKGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAwICYmCisJICAgIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID09IDB4ODEgJiYKKwkgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyID09IDB4MDIpIHsKKwkJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZmdGRpX2VsYW5fanRhZ19jbGFzcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZVxuIik7CisJCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcjsKKwkJfSBlbHNlIHsKKwkJCWZ0ZGktPmNsYXNzID0gJmZ0ZGlfZWxhbl9qdGFnX2NsYXNzOworCQkJZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBGRFRJPSVwIEpUQUcgaW50ZXJmYWNlICVkIG5vdyBhdHRhY2hlZCB0byBmdGRpJWRcbiIsCisJCQkJIGZ0ZGksIGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQkgaW50ZXJmYWNlLT5taW5vcik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSBpZiAoaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID09IDEgJiYKKwkJICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIgPT0gMHg4MyAmJgorCQkgICBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIgPT0gMHgwNCkgeworCQlmdGRpLT5jbGFzcyA9IE5VTEw7CisJCWRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJVU0IgRkRUST0lcCBFTEFOIGludGVyZmFjZSAlZCBub3cgYWN0aXZhdGVkXG4iLAorCQkJIGZ0ZGksIGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCUlOSVRfREVMQVlFRF9XT1JLKCZmdGRpLT5zdGF0dXNfd29yaywgZnRkaV9lbGFuX3N0YXR1c193b3JrKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmZ0ZGktPmNvbW1hbmRfd29yaywgZnRkaV9lbGFuX2NvbW1hbmRfd29yayk7CisJCUlOSVRfREVMQVlFRF9XT1JLKCZmdGRpLT5yZXNwb25kX3dvcmssIGZ0ZGlfZWxhbl9yZXNwb25kX3dvcmspOworCQlmdGRpX3N0YXR1c19xdWV1ZV93b3JrKGZ0ZGksIG1zZWNzX3RvX2ppZmZpZXMoMyAqMTAwMCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IGZpbmQgRUxBTidzIFUxMzIgZGV2aWNlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CitlcnJvcjppZiAoZnRkaSkgeworCQlmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7CisJfQorCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLSAgICAgICAgZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7Ci0gICAgICAgIGlmIChmdGRpLT5jbGFzcykgewotICAgICAgICAgICAgICAgIGludCBtaW5vciA9IGludGVyZmFjZS0+bWlub3I7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzID0gZnRkaS0+Y2xhc3M7Ci0gICAgICAgICAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotICAgICAgICAgICAgICAgIHVzYl9kZXJlZ2lzdGVyX2RldihpbnRlcmZhY2UsIGNsYXNzKTsKLSAgICAgICAgICAgICAgICBkZXZfaW5mbygmZnRkaS0+dWRldi0+ZGV2LCAiVVNCIEZUREkgVTEzMiBqdGFnIGludGVyZmFjZSBvbiBtaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAib3IgJWQgbm93IGRpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZ0ZGlfc3RhdHVzX2NhbmNlbF93b3JrKGZ0ZGkpOwotICAgICAgICAgICAgICAgIGZ0ZGlfY29tbWFuZF9jYW5jZWxfd29yayhmdGRpKTsKLSAgICAgICAgICAgICAgICBmdGRpX3Jlc3BvbnNlX2NhbmNlbF93b3JrKGZ0ZGkpOwotICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9hYmFuZG9uX2NvbXBsZXRpb25zKGZ0ZGkpOwotICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9hYmFuZG9uX3RhcmdldHMoZnRkaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0ZGktPnJlZ2lzdGVyZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZmdGRpLT5wbGF0Zm9ybV9kZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+c3luY2hyb25pemVkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVudW1lcmF0ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+aW5pdGlhbGl6ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVnaXN0ZXJlZCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZsdXNoX3dvcmtxdWV1ZShzdGF0dXNfcXVldWUpOwotICAgICAgICAgICAgICAgIGZsdXNoX3dvcmtxdWV1ZShjb21tYW5kX3F1ZXVlKTsKLSAgICAgICAgICAgICAgICBmbHVzaF93b3JrcXVldWUocmVzcG9uZF9xdWV1ZSk7Ci0gICAgICAgICAgICAgICAgZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7Ci0gICAgICAgICAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotICAgICAgICAgICAgICAgIGRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJVU0IgRlRESSBVMTMyIGhvc3QgY29udHJvbGxlciBpbnRlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICJmYWNlIG5vdyBkaXNjb25uZWN0ZWRcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKKwlzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7CisJaWYgKGZ0ZGktPmNsYXNzKSB7CisJCWludCBtaW5vciA9IGludGVyZmFjZS0+bWlub3I7CisJCXN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyICpjbGFzcyA9IGZ0ZGktPmNsYXNzOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRlcmZhY2UsIGNsYXNzKTsKKwkJZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBGVERJIFUxMzIganRhZyBpbnRlcmZhY2Ugb24gbWlub3IgJWQgbm93IGRpc2Nvbm5lY3RlZFxuIiwKKwkJCSBtaW5vcik7CisJfSBlbHNlIHsKKwkJZnRkaV9zdGF0dXNfY2FuY2VsX3dvcmsoZnRkaSk7CisJCWZ0ZGlfY29tbWFuZF9jYW5jZWxfd29yayhmdGRpKTsKKwkJZnRkaV9yZXNwb25zZV9jYW5jZWxfd29yayhmdGRpKTsKKwkJZnRkaV9lbGFuX2FiYW5kb25fY29tcGxldGlvbnMoZnRkaSk7CisJCWZ0ZGlfZWxhbl9hYmFuZG9uX3RhcmdldHMoZnRkaSk7CisJCWlmIChmdGRpLT5yZWdpc3RlcmVkKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZnRkaS0+cGxhdGZvcm1fZGV2KTsKKwkJCWZ0ZGktPnN5bmNocm9uaXplZCA9IDA7CisJCQlmdGRpLT5lbnVtZXJhdGVkID0gMDsKKwkJCWZ0ZGktPmluaXRpYWxpemVkID0gMDsKKwkJCWZ0ZGktPnJlZ2lzdGVyZWQgPSAwOworCQl9CisJCWZsdXNoX3dvcmtxdWV1ZShzdGF0dXNfcXVldWUpOworCQlmbHVzaF93b3JrcXVldWUoY29tbWFuZF9xdWV1ZSk7CisJCWZsdXNoX3dvcmtxdWV1ZShyZXNwb25kX3F1ZXVlKTsKKwkJZnRkaS0+ZGlzY29ubmVjdGVkICs9IDE7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBGVERJIFUxMzIgaG9zdCBjb250cm9sbGVyIGludGVyZmFjZSBub3cgZGlzY29ubmVjdGVkXG4iKTsKKwl9CisJZnRkaV9lbGFuX3B1dF9rcmVmKGZ0ZGkpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZnRkaV9lbGFuX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgPSAiZnRkaS1lbGFuIiwKLSAgICAgICAgLnByb2JlID0gZnRkaV9lbGFuX3Byb2JlLAotICAgICAgICAuZGlzY29ubmVjdCA9IGZ0ZGlfZWxhbl9kaXNjb25uZWN0LAotICAgICAgICAuaWRfdGFibGUgPSBmdGRpX2VsYW5fdGFibGUsCisJLm5hbWUgPSAiZnRkaS1lbGFuIiwKKwkucHJvYmUgPSBmdGRpX2VsYW5fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBmdGRpX2VsYW5fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBmdGRpX2VsYW5fdGFibGUsCiB9Owogc3RhdGljIGludCBfX2luaXQgZnRkaV9lbGFuX2luaXQodm9pZCkKIHsKLSAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiZHJpdmVyICVzXG4iLCBmdGRpX2VsYW5fZHJpdmVyLm5hbWUpOwotICAgICAgICBtdXRleF9pbml0KCZmdGRpX21vZHVsZV9sb2NrKTsKLSAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmZ0ZGlfc3RhdGljX2xpc3QpOwotICAgICAgICBzdGF0dXNfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZnRkaS1zdGF0dXMtY29udHJvbCIpOworCWludCByZXN1bHQ7CisJcHJfaW5mbygiZHJpdmVyICVzXG4iLCBmdGRpX2VsYW5fZHJpdmVyLm5hbWUpOworCW11dGV4X2luaXQoJmZ0ZGlfbW9kdWxlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZmdGRpX3N0YXRpY19saXN0KTsKKwlzdGF0dXNfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZnRkaS1zdGF0dXMtY29udHJvbCIpOwogCWlmICghc3RhdHVzX3F1ZXVlKQogCQlnb3RvIGVycl9zdGF0dXNfcXVldWU7Ci0gICAgICAgIGNvbW1hbmRfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZnRkaS1jb21tYW5kLWVuZ2luZSIpOworCWNvbW1hbmRfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZnRkaS1jb21tYW5kLWVuZ2luZSIpOwogCWlmICghY29tbWFuZF9xdWV1ZSkKIAkJZ290byBlcnJfY29tbWFuZF9xdWV1ZTsKLSAgICAgICAgcmVzcG9uZF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJmdGRpLXJlc3BvbmQtZW5naW5lIik7CisJcmVzcG9uZF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJmdGRpLXJlc3BvbmQtZW5naW5lIik7CiAJaWYgKCFyZXNwb25kX3F1ZXVlKQogCQlnb3RvIGVycl9yZXNwb25kX3F1ZXVlOwotICAgICAgICByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmZ0ZGlfZWxhbl9kcml2ZXIpOwotICAgICAgICBpZiAocmVzdWx0KSB7CisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZmdGRpX2VsYW5fZHJpdmVyKTsKKwlpZiAocmVzdWx0KSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHN0YXR1c19xdWV1ZSk7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNvbW1hbmRfcXVldWUpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShyZXNwb25kX3F1ZXVlKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZFxuIiwKLQkJICAgICAgIHJlc3VsdCk7CisJCXByX2VycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXN1bHQpOwogCX0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmVzdWx0OwogCi0gZXJyX3Jlc3BvbmRfcXVldWU6CitlcnJfcmVzcG9uZF9xdWV1ZToKIAlkZXN0cm95X3dvcmtxdWV1ZShjb21tYW5kX3F1ZXVlKTsKLSBlcnJfY29tbWFuZF9xdWV1ZToKK2Vycl9jb21tYW5kX3F1ZXVlOgogCWRlc3Ryb3lfd29ya3F1ZXVlKHN0YXR1c19xdWV1ZSk7Ci0gZXJyX3N0YXR1c19xdWV1ZToKLQlwcmludGsoS0VSTl9FUlIgIiVzIGNvdWxkbid0IGNyZWF0ZSB3b3JrcXVldWVcbiIsIGZ0ZGlfZWxhbl9kcml2ZXIubmFtZSk7CitlcnJfc3RhdHVzX3F1ZXVlOgorCXByX2VycigiJXMgY291bGRuJ3QgY3JlYXRlIHdvcmtxdWV1ZVxuIiwgZnRkaV9lbGFuX2RyaXZlci5uYW1lKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZ0ZGlfZWxhbl9leGl0KHZvaWQpCiB7Ci0gICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaTsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICp0ZW1wOwotICAgICAgICB1c2JfZGVyZWdpc3RlcigmZnRkaV9lbGFuX2RyaXZlcik7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gImZ0ZGlfdTEzMiBkcml2ZXIgZGVyZWdpc3RlcmVkXG4iKTsKLSAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0ZGksIHRlbXAsICZmdGRpX3N0YXRpY19saXN0LCBmdGRpX2xpc3QpIHsKLSAgICAgICAgICAgICAgICBmdGRpX3N0YXR1c19jYW5jZWxfd29yayhmdGRpKTsKLSAgICAgICAgICAgICAgICBmdGRpX2NvbW1hbmRfY2FuY2VsX3dvcmsoZnRkaSk7Ci0gICAgICAgICAgICAgICAgZnRkaV9yZXNwb25zZV9jYW5jZWxfd29yayhmdGRpKTsKLSAgICAgICAgfSBmbHVzaF93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKLSAgICAgICAgZGVzdHJveV93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKLSAgICAgICAgc3RhdHVzX3F1ZXVlID0gTlVMTDsKLSAgICAgICAgZmx1c2hfd29ya3F1ZXVlKGNvbW1hbmRfcXVldWUpOwotICAgICAgICBkZXN0cm95X3dvcmtxdWV1ZShjb21tYW5kX3F1ZXVlKTsKLSAgICAgICAgY29tbWFuZF9xdWV1ZSA9IE5VTEw7Ci0gICAgICAgIGZsdXNoX3dvcmtxdWV1ZShyZXNwb25kX3F1ZXVlKTsKLSAgICAgICAgZGVzdHJveV93b3JrcXVldWUocmVzcG9uZF9xdWV1ZSk7Ci0gICAgICAgIHJlc3BvbmRfcXVldWUgPSBOVUxMOworCXN0cnVjdCB1c2JfZnRkaSAqZnRkaTsKKwlzdHJ1Y3QgdXNiX2Z0ZGkgKnRlbXA7CisJdXNiX2RlcmVnaXN0ZXIoJmZ0ZGlfZWxhbl9kcml2ZXIpOworCXByX2luZm8oImZ0ZGlfdTEzMiBkcml2ZXIgZGVyZWdpc3RlcmVkXG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnRkaSwgdGVtcCwgJmZ0ZGlfc3RhdGljX2xpc3QsIGZ0ZGlfbGlzdCkgeworCQlmdGRpX3N0YXR1c19jYW5jZWxfd29yayhmdGRpKTsKKwkJZnRkaV9jb21tYW5kX2NhbmNlbF93b3JrKGZ0ZGkpOworCQlmdGRpX3Jlc3BvbnNlX2NhbmNlbF93b3JrKGZ0ZGkpOworCX0gZmx1c2hfd29ya3F1ZXVlKHN0YXR1c19xdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKKwlzdGF0dXNfcXVldWUgPSBOVUxMOworCWZsdXNoX3dvcmtxdWV1ZShjb21tYW5kX3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShjb21tYW5kX3F1ZXVlKTsKKwljb21tYW5kX3F1ZXVlID0gTlVMTDsKKwlmbHVzaF93b3JrcXVldWUocmVzcG9uZF9xdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUocmVzcG9uZF9xdWV1ZSk7CisJcmVzcG9uZF9xdWV1ZSA9IE5VTEw7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKaW5kZXggMjBiY2ZkZC4uYzZiZmQxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCkBAIC01MSwxOSArNTEsMTIgQEAKICovCiAjZGVmaW5lIE1BWF9XUklURVNfSU5fRkxJR0hUIDQKIAotLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCi0jdW5kZWYgZGJnCi0jZGVmaW5lIGRiZyggZm9ybWF0LCBhcmcuLi4gKSBkbyB7IGlmKCBkZWJ1ZyApIHByaW50ayggS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnICk7IH0gd2hpbGUgKCAwICkKLQogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGlvd2Fycmlvcl9tdXRleCk7Ci1zdGF0aWMgYm9vbCBkZWJ1ZyA9IDA7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnPTEgZW5hYmxlcyBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlvd2Fycmlvcl9kcml2ZXI7CiBzdGF0aWMgREVGSU5FX01VVEVYKGlvd2Fycmlvcl9vcGVuX2Rpc2NfbG9jayk7CkBAIC0yMzUsOCArMjI4LDggQEAKIAlpZiAoc3RhdHVzICYmCiAJICAgICEoc3RhdHVzID09IC1FTk9FTlQgfHwKIAkgICAgICBzdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwgc3RhdHVzID09IC1FU0hVVERPV04pKSB7Ci0JCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2RiZygmZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCSJub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwgc3RhdHVzKTsKIAl9CiAJLyogZnJlZSB1cCBvdXIgYWxsb2NhdGVkIGJ1ZmZlciAqLwogCXVzYl9mcmVlX2NvaGVyZW50KHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yNTEsNyArMjQ0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGlvd2Fycmlvcl9kZWxldGUoc3RydWN0IGlvd2FycmlvciAqZGV2KQogewotCWRiZygiJXMgLSBtaW5vciAlZCIsIF9fZnVuY19fLCBkZXYtPm1pbm9yKTsKKwlkZXZfZGJnKCZkZXYtPmludGVyZmFjZS0+ZGV2LCAibWlub3IgJWRcbiIsIGRldi0+bWlub3IpOwogCWtmcmVlKGRldi0+aW50X2luX2J1ZmZlcik7CiAJdXNiX2ZyZWVfdXJiKGRldi0+aW50X2luX3VyYik7CiAJa2ZyZWUoZGV2LT5yZWFkX3F1ZXVlKTsKQEAgLTI4OCw3ICsyODEsOCBAQAogCWlmIChkZXYgPT0gTlVMTCB8fCAhZGV2LT5wcmVzZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRiZygiJXMgLSBtaW5vciAlZCwgY291bnQgPSAlemQiLCBfX2Z1bmNfXywgZGV2LT5taW5vciwgY291bnQpOworCWRldl9kYmcoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJtaW5vciAlZCwgY291bnQgPSAlemRcbiIsCisJCWRldi0+bWlub3IsIGNvdW50KTsKIAogCS8qIHJlYWQgY291bnQgbXVzdCBiZSBwYWNrZXQgc2l6ZSAoKyB0aW1lIHN0YW1wKSAqLwogCWlmICgoY291bnQgIT0gZGV2LT5yZXBvcnRfc2l6ZSkKQEAgLTM1Niw3ICszNTAsOCBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CiAJfQotCWRiZygiJXMgLSBtaW5vciAlZCwgY291bnQgPSAlemQiLCBfX2Z1bmNfXywgZGV2LT5taW5vciwgY291bnQpOworCWRldl9kYmcoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJtaW5vciAlZCwgY291bnQgPSAlemRcbiIsCisJCWRldi0+bWlub3IsIGNvdW50KTsKIAkvKiBpZiBjb3VudCBpcyAwIHdlJ3JlIGFscmVhZHkgZG9uZSAqLwogCWlmIChjb3VudCA9PSAwKSB7CiAJCXJldHZhbCA9IDA7CkBAIC00MTgsMTQgKzQxMywxNiBAQAogCQlpbnRfb3V0X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaW50X291dF91cmIpIHsKIAkJCXJldHZhbCA9IC1FTk9NRU07Ci0JCQlkYmcoIiVzIFVuYWJsZSB0byBhbGxvY2F0ZSB1cmIgIiwgX19mdW5jX18pOworCQkJZGV2X2RiZygmZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIHVyYlxuIik7CiAJCQlnb3RvIGVycm9yX25vX3VyYjsKIAkJfQogCQlidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQoZGV2LT51ZGV2LCBkZXYtPnJlcG9ydF9zaXplLAogCQkJCQkgR0ZQX0tFUk5FTCwgJmludF9vdXRfdXJiLT50cmFuc2Zlcl9kbWEpOwogCQlpZiAoIWJ1ZikgewogCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCWRiZygiJXMgVW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciAiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZGJnKCZkZXYtPmludGVyZmFjZS0+ZGV2LAorCQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyXG4iKTsKIAkJCWdvdG8gZXJyb3Jfbm9fYnVmZmVyOwogCQl9CiAJCXVzYl9maWxsX2ludF91cmIoaW50X291dF91cmIsIGRldi0+dWRldiwKQEAgLTQ0MSw4ICs0MzgsOSBAQAogCQl9CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGludF9vdXRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJldHZhbCkgewotCQkJZGJnKCIlcyBzdWJtaXQgZXJyb3IgJWQgZm9yIHVyYiBuci4lZCIsIF9fZnVuY19fLAotCQkJICAgIHJldHZhbCwgYXRvbWljX3JlYWQoJmRldi0+d3JpdGVfYnVzeSkpOworCQkJZGV2X2RiZygmZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCQkic3VibWl0IGVycm9yICVkIGZvciB1cmIgbnIuJWRcbiIsCisJCQkJcmV0dmFsLCBhdG9taWNfcmVhZCgmZGV2LT53cml0ZV9idXN5KSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCS8qIHN1Ym1pdCB3YXMgb2sgKi8KQEAgLTUwMiw4ICs1MDAsOCBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKLQlkYmcoIiVzIC0gbWlub3IgJWQsIGNtZCAweCUuNHgsIGFyZyAlbGQiLCBfX2Z1bmNfXywgZGV2LT5taW5vciwgY21kLAotCSAgICBhcmcpOworCWRldl9kYmcoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJtaW5vciAlZCwgY21kIDB4JS40eCwgYXJnICVsZFxuIiwKKwkJZGV2LT5taW5vciwgY21kLCBhcmcpOwogCiAJcmV0dmFsID0gMDsKIAlpb19yZXMgPSAwOwpAQCAtNjAxLDggKzU5OSw2IEBACiAJaW50IHN1Ym1pbm9yOwogCWludCByZXR2YWwgPSAwOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKLQogCW11dGV4X2xvY2soJmlvd2Fycmlvcl9tdXRleCk7CiAJc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOwogCkBAIC02NjIsNyArNjU4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKCIlcyAtIG1pbm9yICVkIiwgX19mdW5jX18sIGRldi0+bWlub3IpOworCWRldl9kYmcoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJtaW5vciAlZFxuIiwgZGV2LT5taW5vcik7CiAKIAkvKiBsb2NrIG91ciBkZXZpY2UgKi8KIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNiMzUwMy5jIGIvZHJpdmVycy91c2IvbWlzYy91c2IzNTAzLmMKaW5kZXggYTMxNjQxZS4uZjQzYzYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2IzNTAzLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2IzNTAzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01NywxMCArNTgsMTIgQEAKIAllbnVtIHVzYjM1MDNfbW9kZQltb2RlOwogCXN0cnVjdCByZWdtYXAJCSpyZWdtYXA7CiAJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgY2xrCQkqY2xrOwogCXU4CXBvcnRfb2ZmX21hc2s7CiAJaW50CWdwaW9faW50bjsKIAlpbnQJZ3Bpb19yZXNldDsKIAlpbnQJZ3Bpb19jb25uZWN0OworCWJvb2wJc2Vjb25kYXJ5X3JlZl9jbGs7CiB9OwogCiBzdGF0aWMgaW50IHVzYjM1MDNfcmVzZXQoc3RydWN0IHVzYjM1MDMgKmh1YiwgaW50IHN0YXRlKQpAQCAtMTg0LDggKzE4Nyw1OCBAQAogCQlodWItPmdwaW9fcmVzZXQJCT0gcGRhdGEtPmdwaW9fcmVzZXQ7CiAJCWh1Yi0+bW9kZQkJPSBwZGF0YS0+aW5pdGlhbF9tb2RlOwogCX0gZWxzZSBpZiAobnApIHsKKwkJc3RydWN0IGNsayAqY2xrOwogCQlodWItPnBvcnRfb2ZmX21hc2sgPSAwOwogCisJCWNsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWZjbGsiKTsKKwkJaWYgKElTX0VSUihjbGspICYmIFBUUl9FUlIoY2xrKSAhPSAtRU5PRU5UKSB7CisJCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZXF1ZXN0IHJlZmNsayAoJWQpXG4iLCBlcnIpOworCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwkJfQorCisJCWlmICghSVNfRVJSKGNsaykpIHsKKwkJCXUzMiByYXRlID0gMDsKKwkJCWh1Yi0+Y2xrID0gY2xrOworCisJCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVmY2xrLWZyZXF1ZW5jeSIsCisJCQkJCQkgJnJhdGUpKSB7CisKKwkJCQlzd2l0Y2ggKHJhdGUpIHsKKwkJCQljYXNlIDM4NDAwMDAwOgorCQkJCWNhc2UgMjYwMDAwMDA6CisJCQkJY2FzZSAxOTIwMDAwMDoKKwkJCQljYXNlIDEyMDAwMDAwOgorCQkJCQlodWItPnNlY29uZGFyeV9yZWZfY2xrID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyNDAwMDAwMDoKKwkJCQljYXNlIDI3MDAwMDAwOgorCQkJCWNhc2UgMjUwMDAwMDA6CisJCQkJY2FzZSA1MDAwMDAwMDoKKwkJCQkJaHViLT5zZWNvbmRhcnlfcmVmX2NsayA9IDE7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWRldl9lcnIoZGV2LAorCQkJCQkJInVuc3VwcG9ydGVkIHJlZmVyZW5jZSBjbG9jayByYXRlICglZClcbiIsCisJCQkJCQkoaW50KSByYXRlKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWVyciA9IGNsa19zZXRfcmF0ZShodWItPmNsaywgcmF0ZSk7CisJCQkJaWYgKGVycikgeworCQkJCQlkZXZfZXJyKGRldiwKKwkJCQkJCSJ1bmFibGUgdG8gc2V0IHJlZmVyZW5jZSBjbG9jayByYXRlIHRvICVkXG4iLAorCQkJCQkJKGludCkgcmF0ZSk7CisJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJfQorCisJCQllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoaHViLT5jbGspOworCQkJaWYgKGVycikgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkidW5hYmxlIHRvIGVuYWJsZSByZWZlcmVuY2UgY2xvY2tcbiIpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwogCQlwcm9wZXJ0eSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRpc2FibGVkLXBvcnRzIiwgJmxlbik7CiAJCWlmIChwcm9wZXJ0eSAmJiAobGVuIC8gc2l6ZW9mKHUzMikpID4gMCkgewogCQkJaW50IGk7CkBAIC0yMTMsOCArMjY2LDEwIEBACiAJCWRldl9lcnIoZGV2LCAiUG9ydHMgZGlzYWJsZWQgd2l0aCBubyBjb250cm9sIGludGVyZmFjZVxuIik7CiAKIAlpZiAoZ3Bpb19pc192YWxpZChodWItPmdwaW9faW50bikpIHsKLQkJZXJyID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKGRldiwgaHViLT5ncGlvX2ludG4sCi0JCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwgInVzYjM1MDMgaW50biIpOworCQlpbnQgdmFsID0gaHViLT5zZWNvbmRhcnlfcmVmX2NsayA/IEdQSU9GX09VVF9JTklUX0xPVyA6CisJCQkJCQkgICBHUElPRl9PVVRfSU5JVF9ISUdIOworCQllcnIgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoZGV2LCBodWItPmdwaW9faW50biwgdmFsLAorCQkJCQkgICAgInVzYjM1MDMgaW50biIpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfZXJyKGRldiwKIAkJCQkidW5hYmxlIHRvIHJlcXVlc3QgR1BJTyAlZCBhcyBjb25uZWN0IHBpbiAoJWQpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCBmNjU2OGI1Li41MWE2ZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMTMyMCw2ICsxMzIwLDExIEBACiAJdXJiLT5jb250ZXh0ID0gJmNvbXBsZXRpb247CiAJdXJiLT5jb21wbGV0ZSA9IHVubGluazFfY2FsbGJhY2s7CiAKKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQlzaW1wbGVfZmlsbF9idWYodXJiKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CisJfQorCiAJLyoga2VlcCB0aGUgZW5kcG9pbnQgYnVzeS4gIHRoZXJlIGFyZSBsb3RzIG9mIGhjL2hjZC1pbnRlcm5hbAogCSAqIHN0YXRlcywgYW5kIHRlc3Rpbmcgc2hvdWxkIGdldCB0byBhbGwgb2YgdGhlbSBvdmVyIHRpbWUuCiAJICoKQEAgLTEzNDAsNiArMTM0NSw5IEBACiAJCXdoaWxlICghY29tcGxldGlvbl9kb25lKCZjb21wbGV0aW9uKSkgewogCQkJcmV0dmFsID0gdXNiX3VubGlua191cmIodXJiKTsKIAorCQkJaWYgKHJldHZhbCA9PSAwICYmIHVzYl9waXBlaW4odXJiLT5waXBlKSkKKwkJCQlyZXR2YWwgPSBzaW1wbGVfY2hlY2tfYnVmKGRldiwgdXJiKTsKKwogCQkJc3dpdGNoIChyZXR2YWwpIHsKIAkJCWNhc2UgLUVCVVNZOgogCQkJY2FzZSAtRUlEUk06CkBAIC0xNDUwLDYgKzE0NTgsMTEgQEAKIAkJCQl1bmxpbmtfcXVldWVkX2NhbGxiYWNrLCAmY3R4KTsKIAkJY3R4LnVyYnNbaV0tPnRyYW5zZmVyX2RtYSA9IGJ1Zl9kbWE7CiAJCWN0eC51cmJzW2ldLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJCWlmICh1c2JfcGlwZW91dChjdHgudXJic1tpXS0+cGlwZSkpIHsKKwkJCXNpbXBsZV9maWxsX2J1ZihjdHgudXJic1tpXSk7CisJCQljdHgudXJic1tpXS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOworCQl9CiAJfQogCiAJLyogU3VibWl0IGFsbCB0aGUgVVJCcyBhbmQgdGhlbiB1bmxpbmsgVVJCcyBudW0gLSA0IGFuZCBudW0gLSAyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy95dXJleC5jIGIvZHJpdmVycy91c2IvbWlzYy95dXJleC5jCmluZGV4IDI0Mjc4MjAuLjE0NzI4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MveXVyZXguYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3l1cmV4LmMKQEAgLTI5Niw2ICsyOTYsNyBAQAogCiAJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCWRldi0+YmJ1ID0gLTE7CiAKIAkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZ5dXJleF9jbGFzcyk7CkBAIC0zMDYsOCArMzA3LDYgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkZXYtPmJidSA9IC0xOwotCiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAogCQkgIlVTQiBZVVJFWCBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFl1cmV4ICMlZFxuIiwKIAkJIGludGVyZmFjZS0+bWlub3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IDhiNzg5NzkyLi4wNmNjNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC03Niw3ICs3Niw3IEBACiAKIGNvbmZpZyBVU0JfTVVTQl9PTUFQMlBMVVMKIAl0cmlzdGF0ZSAiT01BUDI0MzAgYW5kIG9ud2FyZHMiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUworCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMgJiYgVVNCCiAJc2VsZWN0IEdFTkVSSUNfUEhZCiAKIGNvbmZpZyBVU0JfTVVTQl9BTTM1WApAQCAtMTQxLDEwICsxNDEsMTEgQEAKIGNvbmZpZyBVU0JfVElfQ1BQSTQxX0RNQQogCWJvb2wgJ1RJIENQUEkgNC4xIChBTTMzNXgpJwogCWRlcGVuZHMgb24gQVJDSF9PTUFQCisJc2VsZWN0IFRJX0NQUEk0MQogCiBjb25maWcgVVNCX1RVU0JfT01BUF9ETUEKIAlib29sICdUVVNCIDYwMTAnCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9UVVNCNjAxMAorCWRlcGVuZHMgb24gVVNCX01VU0JfVFVTQjYwMTAgPSBVU0JfTVVTQl9IRFJDICMgYm90aCBidWlsdC1pbiBvciBib3RoIG1vZHVsZXMKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUAogCWhlbHAKIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIG9uIFRVU0IgNjAxMCB3aGVuIE9NQVAgRE1BIGlzIGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYW0zNXguYyBiL2RyaXZlcnMvdXNiL211c2IvYW0zNXguYwppbmRleCBiM2FhMDE4Li4wYTM0ZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2FtMzV4LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9hbTM1eC5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JfcGh5X2dlbl94Y2Vpdi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JfcGh5X2dlbmVyaWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3VzYi1vbWFwLmg+CiAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKQEAgLTg1LDYgKzg1LDcgQEAKIHN0cnVjdCBhbTM1eF9nbHVlIHsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm11c2I7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGh5OwogCXN0cnVjdCBjbGsJCSpwaHlfY2xrOwogCXN0cnVjdCBjbGsJCSpjbGs7CiB9OwpAQCAtMzYwLDcgKzM2MSw2IEBACiAJaWYgKCFyZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOwogCW11c2ItPnhjZWl2ID0gdXNiX2dldF9waHkoVVNCX1BIWV9UWVBFX1VTQjIpOwogCWlmIChJU19FUlJfT1JfTlVMTChtdXNiLT54Y2VpdikpCiAJCXJldHVybiAtRVBST0JFX0RFRkVSOwpAQCAtNDAyLDcgKzQwMiw2IEBACiAJCWRhdGEtPnNldF9waHlfcG93ZXIoMCk7CiAKIAl1c2JfcHV0X3BoeShtdXNiLT54Y2Vpdik7Ci0JdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNSw2ICs1MDQsOSBAQAogCiAJcGRhdGEtPnBsYXRmb3JtX29wcwkJPSAmYW0zNXhfb3BzOwogCisJZ2x1ZS0+cGh5ID0gdXNiX3BoeV9nZW5lcmljX3JlZ2lzdGVyKCk7CisJaWYgKElTX0VSUihnbHVlLT5waHkpKQorCQlnb3RvIGVycjc7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2x1ZSk7CiAKIAlwaW5mbyA9IGFtMzV4X2Rldl9pbmZvOwpAQCAtNTE4LDExICs1MjAsMTQgQEAKIAlpZiAoSVNfRVJSKG11c2IpKSB7CiAJCXJldCA9IFBUUl9FUlIobXVzYik7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBtdXNiIGRldmljZTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyNzsKKwkJZ290byBlcnI4OwogCX0KIAogCXJldHVybiAwOwogCitlcnI4OgorCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKGdsdWUtPnBoeSk7CisKIGVycjc6CiAJY2xrX2Rpc2FibGUoY2xrKTsKIApAQCAtNTQ3LDYgKzU1Miw3IEBACiAJc3RydWN0IGFtMzV4X2dsdWUJKmdsdWUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdsdWUtPm11c2IpOworCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKGdsdWUtPnBoeSk7CiAJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKIAljbGtfZGlzYWJsZShnbHVlLT5waHlfY2xrKTsKIAljbGtfcHV0KGdsdWUtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggNzk2Njc3Zi4uZDQwZDVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCkBAIC0yOSw2ICsyOSw3IEBACiBzdHJ1Y3QgYmZpbl9nbHVlIHsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm11c2I7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGh5OwogfTsKICNkZWZpbmUgZ2x1ZV90b19tdXNiKGcpCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShnLT5tdXNiKQogCkBAIC00MDEsNyArNDAyLDYgQEAKIAl9CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG11c2ItPmNvbmZpZy0+Z3Bpb192cnNlbCwgMCk7CiAKLQl1c2Jfbm9wX3hjZWl2X3JlZ2lzdGVyKCk7CiAJbXVzYi0+eGNlaXYgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7CiAJaWYgKElTX0VSUl9PUl9OVUxMKG11c2ItPnhjZWl2KSkgewogCQlncGlvX2ZyZWUobXVzYi0+Y29uZmlnLT5ncGlvX3Zyc2VsKTsKQEAgLTQyNCw5ICs0MjQsOCBAQAogc3RhdGljIGludCBiZmluX211c2JfZXhpdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAlncGlvX2ZyZWUobXVzYi0+Y29uZmlnLT5ncGlvX3Zyc2VsKTsKLQogCXVzYl9wdXRfcGh5KG11c2ItPnhjZWl2KTsKLQl1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NzcsNiArNDc2LDkgQEAKIAogCXBkYXRhLT5wbGF0Zm9ybV9vcHMJCT0gJmJmaW5fb3BzOwogCisJZ2x1ZS0+cGh5ID0gdXNiX3BoeV9nZW5lcmljX3JlZ2lzdGVyKCk7CisJaWYgKElTX0VSUihnbHVlLT5waHkpKQorCQlnb3RvIGVycjI7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2x1ZSk7CiAKIAltZW1zZXQobXVzYl9yZXNvdXJjZXMsIDB4MDAsIHNpemVvZigqbXVzYl9yZXNvdXJjZXMpICoKQEAgLTUxNCw2ICs1MTYsOSBAQAogCXJldHVybiAwOwogCiBlcnIzOgorCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKGdsdWUtPnBoeSk7CisKK2VycjI6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChtdXNiKTsKIAogZXJyMToKQEAgLTUyOCw2ICs1MzMsNyBAQAogCXN0cnVjdCBiZmluX2dsdWUJCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihnbHVlLT5tdXNiKTsKKwl1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcihnbHVlLT5waHkpOwogCWtmcmVlKGdsdWUpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhOHh4LmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhOHh4LmMKaW5kZXggZTM0ODZkZS4uMDU4Nzc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYTh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGE4eHguYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RhOHh4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS91c2ItZGF2aW5jaS5oPgpAQCAtODUsNiArODUsNyBAQAogc3RydWN0IGRhOHh4X2dsdWUgewogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbXVzYjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwaHk7CiAJc3RydWN0IGNsawkJKmNsazsKIH07CiAKQEAgLTQxOCw3ICs0MTksNiBAQAogCWlmICghcmV2KQogCQlnb3RvIGZhaWw7CiAKLQl1c2Jfbm9wX3hjZWl2X3JlZ2lzdGVyKCk7CiAJbXVzYi0+eGNlaXYgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7CiAJaWYgKElTX0VSUl9PUl9OVUxMKG11c2ItPnhjZWl2KSkgewogCQlyZXQgPSAtRVBST0JFX0RFRkVSOwpAQCAtNDUzLDcgKzQ1Myw2IEBACiAJcGh5X29mZigpOwogCiAJdXNiX3B1dF9waHkobXVzYi0+eGNlaXYpOwotCXVzYl9ub3BfeGNlaXZfdW5yZWdpc3RlcigpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTIsNiArNTExLDExIEBACiAKIAlwZGF0YS0+cGxhdGZvcm1fb3BzCQk9ICZkYTh4eF9vcHM7CiAKKwlnbHVlLT5waHkgPSB1c2JfcGh5X2dlbmVyaWNfcmVnaXN0ZXIoKTsKKwlpZiAoSVNfRVJSKGdsdWUtPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihnbHVlLT5waHkpOworCQlnb3RvIGVycjU7CisJfQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdsdWUpOwogCiAJbWVtc2V0KG11c2JfcmVzb3VyY2VzLCAweDAwLCBzaXplb2YoKm11c2JfcmVzb3VyY2VzKSAqCkBAIC01MzgsMTEgKzU0MiwxNCBAQAogCWlmIChJU19FUlIobXVzYikpIHsKIAkJcmV0ID0gUFRSX0VSUihtdXNiKTsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG11c2IgZGV2aWNlOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnI1OworCQlnb3RvIGVycjY7CiAJfQogCiAJcmV0dXJuIDA7CiAKK2VycjY6CisJdXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIoZ2x1ZS0+cGh5KTsKKwogZXJyNToKIAljbGtfZGlzYWJsZShjbGspOwogCkBAIC01NjEsNiArNTY4LDcgQEAKIAlzdHJ1Y3QgZGE4eHhfZ2x1ZQkJKmdsdWUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdsdWUtPm11c2IpOworCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKGdsdWUtPnBoeSk7CiAJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKIAljbGtfcHV0KGdsdWUtPmNsayk7CiAJa2ZyZWUoZ2x1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCmluZGV4IGMyNTlkYWMuLmRlODQ5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuX3hjZWl2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzgxLDcgKzM4MSw2IEBACiAJdTMyCQlyZXZpc2lvbjsKIAlpbnQgCQlyZXQgPSAtRU5PREVWOwogCi0JdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOwogCW11c2ItPnhjZWl2ID0gdXNiX2dldF9waHkoVVNCX1BIWV9UWVBFX1VTQjIpOwogCWlmIChJU19FUlJfT1JfTlVMTChtdXNiLT54Y2VpdikpIHsKIAkJcmV0ID0gLUVQUk9CRV9ERUZFUjsKQEAgLTQzOSw3ICs0MzgsNyBAQAogZmFpbDoKIAl1c2JfcHV0X3BoeShtdXNiLT54Y2Vpdik7CiB1bnJlZ2lzdGVyOgotCXVzYl9ub3BfeGNlaXZfdW5yZWdpc3RlcigpOworCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDg3LDcgKzQ4Niw2IEBACiAJcGh5X29mZigpOwogCiAJdXNiX3B1dF9waHkobXVzYi0+eGNlaXYpOwotCXVzYl9ub3BfeGNlaXZfdW5yZWdpc3RlcigpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDUsNiArNTQzLDcgQEAKIAogCXBkYXRhLT5wbGF0Zm9ybV9vcHMJCT0gJmRhdmluY2lfb3BzOwogCisJdXNiX3BoeV9nZW5lcmljX3JlZ2lzdGVyKCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2x1ZSk7CiAKIAltZW1zZXQobXVzYl9yZXNvdXJjZXMsIDB4MDAsIHNpemVvZigqbXVzYl9yZXNvdXJjZXMpICoKQEAgLTYwMyw2ICs2MDIsNyBAQAogCXN0cnVjdCBkYXZpbmNpX2dsdWUJCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihnbHVlLT5tdXNiKTsKKwl1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcigpOwogCWNsa19kaXNhYmxlKGdsdWUtPmNsayk7CiAJY2xrX3B1dChnbHVlLT5jbGspOwogCWtmcmVlKGdsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggMDc1NzY5MC4uNjFkYTQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC04NDgsNiArODQ4LDEwIEBACiAJCX0KIAl9CiAKKwkvKiBoYW5kbGUgYmFiYmxlIGNvbmRpdGlvbiAqLworCWlmIChpbnRfdXNiICYgTVVTQl9JTlRSX0JBQkJMRSkKKwkJc2NoZWR1bGVfd29yaygmbXVzYi0+cmVjb3Zlcl93b3JrKTsKKwogI2lmIDAKIC8qIFJFVklTSVQgLi4uIHRoaXMgd291bGQgYmUgZm9yIG11bHRpcGxleGluZyBwZXJpb2RpYyBlbmRwb2ludHMsIG9yCiAgKiBzdXBwb3J0aW5nIHRyYW5zZmVyIHBoYXNpbmcgdG8gcHJldmVudCBleGNlZWRpbmcgSVNPIGJhbmR3aWR0aApAQCAtMTc0Niw2ICsxNzUwLDM0IEBACiAJfQogfQogCisvKiBSZWNvdmVyIGZyb20gYmFiYmxlIGludGVycnVwdCBjb25kaXRpb25zICovCitzdGF0aWMgdm9pZCBtdXNiX3JlY292ZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJc3RydWN0IG11c2IgKm11c2IgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IG11c2IsIHJlY292ZXJfd29yayk7CisJaW50IHN0YXR1czsKKworCW11c2JfcGxhdGZvcm1fcmVzZXQobXVzYik7CisKKwl1c2JfcGh5X3ZidXNfb2ZmKG11c2ItPnhjZWl2KTsKKwl1ZGVsYXkoMTAwKTsKKworCXVzYl9waHlfdmJ1c19vbihtdXNiLT54Y2Vpdik7CisJdWRlbGF5KDEwMCk7CisKKwkvKgorCSAqIFdoZW4gYSBiYWJibGUgY29uZGl0aW9uIG9jY3VycywgdGhlIG11c2IgY29udHJvbGxlciByZW1vdmVzIHRoZQorCSAqIHNlc3Npb24gYml0IGFuZCB0aGUgZW5kcG9pbnQgY29uZmlnIGlzIGxvc3QuCisJICovCisJaWYgKG11c2ItPmR5bl9maWZvKQorCQlzdGF0dXMgPSBlcF9jb25maWdfZnJvbV90YWJsZShtdXNiKTsKKwllbHNlCisJCXN0YXR1cyA9IGVwX2NvbmZpZ19mcm9tX2h3KG11c2IpOworCisJLyogc3RhcnQgdGhlIHNlc3Npb24gYWdhaW4gKi8KKwlpZiAoc3RhdHVzID09IDApCisJCW11c2Jfc3RhcnQobXVzYik7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbml0IHN1cHBvcnQKICAqLwpAQCAtMTkxMyw2ICsxOTQ1LDcgQEAKIAogCS8qIEluaXQgSVJRIHdvcmtxdWV1ZSBiZWZvcmUgcmVxdWVzdF9pcnEgKi8KIAlJTklUX1dPUksoJm11c2ItPmlycV93b3JrLCBtdXNiX2lycV93b3JrKTsKKwlJTklUX1dPUksoJm11c2ItPnJlY292ZXJfd29yaywgbXVzYl9yZWNvdmVyX3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZtdXNiLT5kZWFzc2VydF9yZXNldF93b3JrLCBtdXNiX2RlYXNzZXJ0X3Jlc2V0KTsKIAlJTklUX0RFTEFZRURfV09SSygmbXVzYi0+ZmluaXNoX3Jlc3VtZV93b3JrLCBtdXNiX2hvc3RfZmluaXNoX3Jlc3VtZSk7CiAKQEAgLTIwMDgsNiArMjA0MSw3IEBACiAKIGZhaWwzOgogCWNhbmNlbF93b3JrX3N5bmMoJm11c2ItPmlycV93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZtdXNiLT5yZWNvdmVyX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbXVzYi0+ZmluaXNoX3Jlc3VtZV93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm11c2ItPmRlYXNzZXJ0X3Jlc2V0X3dvcmspOwogCWlmIChtdXNiLT5kbWFfY29udHJvbGxlcikKQEAgLTIwNzMsNiArMjEwNyw3IEBACiAJCWRtYV9jb250cm9sbGVyX2Rlc3Ryb3kobXVzYi0+ZG1hX2NvbnRyb2xsZXIpOwogCiAJY2FuY2VsX3dvcmtfc3luYygmbXVzYi0+aXJxX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJm11c2ItPnJlY292ZXJfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtdXNiLT5maW5pc2hfcmVzdW1lX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbXVzYi0+ZGVhc3NlcnRfcmVzZXRfd29yayk7CiAJbXVzYl9mcmVlKG11c2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggNzA4M2U4Mi4uZDE1NWExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC0xOTIsNiArMTkyLDcgQEAKIAogCWludAkoKnNldF9tb2RlKShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggbW9kZSk7CiAJdm9pZAkoKnRyeV9pZGxlKShzdHJ1Y3QgbXVzYiAqbXVzYiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKwl2b2lkCSgqcmVzZXQpKHN0cnVjdCBtdXNiICptdXNiKTsKIAogCWludAkoKnZidXNfc3RhdHVzKShzdHJ1Y3QgbXVzYiAqbXVzYik7CiAJdm9pZAkoKnNldF92YnVzKShzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IG9uKTsKQEAgLTI5Niw2ICsyOTcsNyBAQAogCiAJaXJxcmV0dXJuX3QJCSgqaXNyKShpbnQsIHZvaWQgKik7CiAJc3RydWN0IHdvcmtfc3RydWN0CWlycV93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdAlyZWNvdmVyX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yawlkZWFzc2VydF9yZXNldF93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsJZmluaXNoX3Jlc3VtZV93b3JrOwogCXUxNgkJCWh3dmVyczsKQEAgLTMzNyw2ICszMzksNyBAQAogCWRtYV9hZGRyX3QJCWFzeW5jOwogCWRtYV9hZGRyX3QJCXN5bmM7CiAJdm9pZCBfX2lvbWVtCQkqc3luY192YTsKKwl1OAkJCXR1c2JfcmV2aXNpb247CiAjZW5kaWYKIAogCS8qIHBhc3NlZCBkb3duIGZyb20gY2hpcC9ib2FyZCBzcGVjaWZpYyBpcnEgaGFuZGxlcnMgKi8KQEAgLTU1Miw2ICs1NTUsMTIgQEAKIAkJbXVzYi0+b3BzLT50cnlfaWRsZShtdXNiLCB0aW1lb3V0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG11c2JfcGxhdGZvcm1fcmVzZXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJaWYgKG11c2ItPm9wcy0+cmVzZXQpCisJCW11c2ItPm9wcy0+cmVzZXQobXVzYik7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG11c2JfcGxhdGZvcm1fZ2V0X3ZidXNfc3RhdHVzKHN0cnVjdCBtdXNiICptdXNiKQogewogCWlmICghbXVzYi0+b3BzLT52YnVzX3N0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kc3BzLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZHNwcy5jCmluZGV4IGUyZmQyNjMuLjUxYmViMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kc3BzLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RzcHMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JfcGh5X2dlbl94Y2Vpdi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JfcGh5X2dlbmVyaWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3VzYi1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KIApAQCAtMzI5LDkgKzMyOSwyMSBAQAogCSAqIHZhbHVlIGJ1dCBERVZDVEwuQkRFVklDRSBpcyBpbnZhbGlkIHdpdGhvdXQgREVWQ1RMLlNFU1NJT04gc2V0LgogCSAqIEFsc28sIERSVlZCVVMgcHVsc2VzIGZvciBTUlAgKGJ1dCBub3QgYXQgNVYpIC4uLgogCSAqLwotCWlmIChpc19ob3N0X2FjdGl2ZShtdXNiKSAmJiB1c2JpbnRyICYgTVVTQl9JTlRSX0JBQkJMRSkKKwlpZiAoaXNfaG9zdF9hY3RpdmUobXVzYikgJiYgdXNiaW50ciAmIE1VU0JfSU5UUl9CQUJCTEUpIHsKIAkJcHJfaW5mbygiQ0FVVElPTjogbXVzYjogQmFiYmxlIEludGVycnVwdCBPY2N1cnJlZFxuIik7CiAKKwkJLyoKKwkJICogV2hlbiBhIGJhYmJsZSBjb25kaXRpb24gb2NjdXJzLCB0aGUgbXVzYiBjb250cm9sbGVyIHJlbW92ZXMKKwkJICogdGhlIHNlc3Npb24gYW5kIGlzIG5vIGxvbmdlciBpbiBob3N0IG1vZGUuIEhlbmNlLCBhbGwKKwkJICogZGV2aWNlcyBjb25uZWN0ZWQgdG8gaXRzIHJvb3QgaHViIGdldCBkaXNjb25uZWN0ZWQuCisJCSAqCisJCSAqIEhhbmQgdGhpcyBlcnJvciBkb3duIHRvIHRoZSBtdXNiIGNvcmUgaXNyLCBzbyBpdCBjYW4KKwkJICogcmVjb3Zlci4KKwkJICovCisJCW11c2ItPmludF91c2IgPSBNVVNCX0lOVFJfQkFCQkxFIHwgTVVTQl9JTlRSX0RJU0NPTk5FQ1Q7CisJCW11c2ItPmludF90eCA9IG11c2ItPmludF9yeCA9IDA7CisJfQorCiAJaWYgKHVzYmludHIgJiAoKDEgPDwgd3JwLT5kcnZ2YnVzKSA8PCB3cnAtPnVzYl9zaGlmdCkpIHsKIAkJaW50IGRydnZidXMgPSBkc3BzX3JlYWRsKHJlZ19iYXNlLCB3cnAtPnN0YXR1cyk7CiAJCXZvaWQgX19pb21lbSAqbXJlZ3MgPSBtdXNiLT5tcmVnczsKQEAgLTUyNCw2ICs1MzYsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZHNwc19tdXNiX3Jlc2V0KHN0cnVjdCBtdXNiICptdXNiKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CisJc3RydWN0IGRzcHNfZ2x1ZSAqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7CisJY29uc3Qgc3RydWN0IGRzcHNfbXVzYl93cmFwcGVyICp3cnAgPSBnbHVlLT53cnA7CisKKwlkc3BzX3dyaXRlbChtdXNiLT5jdHJsX2Jhc2UsIHdycC0+Y29udHJvbCwgKDEgPDwgd3JwLT5yZXNldCkpOworCXVkZWxheSgxMDApOworfQorCiBzdGF0aWMgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIGRzcHNfb3BzID0gewogCS5pbml0CQk9IGRzcHNfbXVzYl9pbml0LAogCS5leGl0CQk9IGRzcHNfbXVzYl9leGl0LApAQCAtNTMzLDYgKzU1NSw3IEBACiAKIAkudHJ5X2lkbGUJPSBkc3BzX211c2JfdHJ5X2lkbGUsCiAJLnNldF9tb2RlCT0gZHNwc19tdXNiX3NldF9tb2RlLAorCS5yZXNldAkJPSBkc3BzX211c2JfcmVzZXQsCiB9OwogCiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC03NTAsNyArNzczLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdXNiX2RzcHNfb2ZfbWF0Y2gpOwogCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IGRzcHNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzcHNfZ2x1ZSAqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCmluZGV4IDRlOWZiMWQuLjE1OWVmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKQEAgLTI0LDEzICsyNCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKIAogc3RydWN0IHR1c2I2MDEwX2dsdWUgewogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbXVzYjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwaHk7CiB9OwogCiBzdGF0aWMgdm9pZCB0dXNiX211c2Jfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbik7CkBAIC00Miw3ICs0Myw3IEBACiAgKiBDaGVja3MgdGhlIHJldmlzaW9uLiBXZSBuZWVkIHRvIHVzZSB0aGUgRE1BIHJlZ2lzdGVyIGFzIDMuMCBkb2VzIG5vdAogICogaGF2ZSBjb3JyZWN0IHZlcnNpb25zIGZvciBUVVNCX1BSQ01fUkVWIG9yIFRVU0JfSU5UX0NUUkxfUkVWLgogICovCi11OCB0dXNiX2dldF9yZXZpc2lvbihzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyB1OCB0dXNiX2dldF9yZXZpc2lvbihzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAl2b2lkIF9faW9tZW0JKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMgkJZGllX2lkOwpAQCAtNTgsMTQgKzU5LDEzIEBACiAKIAlyZXR1cm4gcmV2OwogfQotRVhQT1JUX1NZTUJPTF9HUEwodHVzYl9nZXRfcmV2aXNpb24pOwogCi1zdGF0aWMgaW50IHR1c2JfcHJpbnRfcmV2aXNpb24oc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgdm9pZCB0dXNiX3ByaW50X3JldmlzaW9uKHN0cnVjdCBtdXNiICptdXNiKQogewogCXZvaWQgX19pb21lbQkqdGJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAJdTgJCXJldjsKIAotCXJldiA9IHR1c2JfZ2V0X3JldmlzaW9uKG11c2IpOworCXJldiA9IG11c2ItPnR1c2JfcmV2aXNpb247CiAKIAlwcl9pbmZvKCJ0dXNiOiAlcyVpLiVpICVzJWkuJWkgJXMlaS4laSAlcyVpLiVpICVzJWkgJXMlaS4laVxuIiwKIAkJInByY20iLApAQCAtODQsOCArODQsNiBAQAogCQlUVVNCX0RJRFIxX0hJX0NISVBfUkVWKG11c2JfcmVhZGwodGJhc2UsIFRVU0JfRElEUjFfSEkpKSwKIAkJInJldiIsCiAJCVRVU0JfUkVWX01BSk9SKHJldiksIFRVU0JfUkVWX01JTk9SKHJldikpOwotCi0JcmV0dXJuIHR1c2JfZ2V0X3JldmlzaW9uKG11c2IpOwogfQogCiAjZGVmaW5lIFdCVVNfUVVJUktfTUFTSwkoVFVTQl9QSFlfT1RHX0NUUkxfVEVTVE0yIHwgVFVTQl9QSFlfT1RHX0NUUkxfVEVTVE0xIFwKQEAgLTM0OSw3ICszNDcsNyBAQAogCXUzMgkJcmVnOwogCiAJaWYgKCh3YWtldXBfZW5hYmxlcyAmIFRVU0JfUFJDTV9XQlVTKQotCQkJJiYgKHR1c2JfZ2V0X3JldmlzaW9uKG11c2IpID09IFRVU0JfUkVWXzMwKSkKKwkJCSYmIChtdXNiLT50dXNiX3JldmlzaW9uID09IFRVU0JfUkVWXzMwKSkKIAkJdHVzYl93YnVzX3F1aXJrKG11c2IsIDEpOwogCiAJdHVzYl9zZXRfY2xvY2tfc291cmNlKG11c2IsIDApOwpAQCAtNzk3LDcgKzc5NSw3IEBACiAJCXUzMglyZWc7CiAJCXUzMglpOwogCi0JCWlmICh0dXNiX2dldF9yZXZpc2lvbihtdXNiKSA9PSBUVVNCX1JFVl8zMCkKKwkJaWYgKG11c2ItPnR1c2JfcmV2aXNpb24gPT0gVFVTQl9SRVZfMzApCiAJCQl0dXNiX3didXNfcXVpcmsobXVzYiwgMCk7CiAKIAkJLyogdGhlcmUgYXJlIGlzc3VlcyByZS1sb2NraW5nIHRoZSBQTEwgb24gd2FrZXVwIC4uLiAqLwpAQCAtMTAxMSwxMCArMTAwOSwxMSBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlyZXQgPSB0dXNiX3ByaW50X3JldmlzaW9uKG11c2IpOwotCWlmIChyZXQgPCAyKSB7CisJbXVzYi0+dHVzYl9yZXZpc2lvbiA9IHR1c2JfZ2V0X3JldmlzaW9uKG11c2IpOworCXR1c2JfcHJpbnRfcmV2aXNpb24obXVzYik7CisJaWYgKG11c2ItPnR1c2JfcmV2aXNpb24gPCAyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHVzYjogVW5zdXBwb3J0ZWQgVFVTQjYwMTAgcmV2aXNpb24gJWlcbiIsCi0JCQkJcmV0KTsKKwkJCQltdXNiLT50dXNiX3JldmlzaW9uKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0xMDY1LDcgKzEwNjQsNiBAQAogCXZvaWQgX19pb21lbQkJKnN5bmMgPSBOVUxMOwogCWludAkJCXJldDsKIAotCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKIAltdXNiLT54Y2VpdiA9IHVzYl9nZXRfcGh5KFVTQl9QSFlfVFlQRV9VU0IyKTsKIAlpZiAoSVNfRVJSX09SX05VTEwobXVzYi0+eGNlaXYpKQogCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKQEAgLTExMTcsNyArMTExNSw2IEBACiAJCQlpb3VubWFwKHN5bmMpOwogCiAJCXVzYl9wdXRfcGh5KG11c2ItPnhjZWl2KTsKLQkJdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMTMzLDcgKzExMzAsNiBAQAogCWlvdW5tYXAobXVzYi0+c3luY192YSk7CiAKIAl1c2JfcHV0X3BoeShtdXNiLT54Y2Vpdik7Ci0JdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNzYsNiArMTE3Miw3IEBACiAKIAlwZGF0YS0+cGxhdGZvcm1fb3BzCQk9ICZ0dXNiX29wczsKIAorCXVzYl9waHlfZ2VuZXJpY19yZWdpc3RlcigpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdsdWUpOwogCiAJbWVtc2V0KG11c2JfcmVzb3VyY2VzLCAweDAwLCBzaXplb2YoKm11c2JfcmVzb3VyY2VzKSAqCkBAIC0xMjI0LDYgKzEyMjEsNyBAQAogCXN0cnVjdCB0dXNiNjAxMF9nbHVlCQkqZ2x1ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2x1ZS0+bXVzYik7CisJdXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIoZ2x1ZS0+cGh5KTsKIAlrZnJlZShnbHVlKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5oIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5oCmluZGV4IDM1YzkzM2EuLmFlYzg2YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmgKQEAgLTEyLDE0ICsxMiw2IEBACiAjaWZuZGVmIF9fVFVTQjYwMTBfSF9fCiAjZGVmaW5lIF9fVFVTQjYwMTBfSF9fCiAKLWV4dGVybiB1OCB0dXNiX2dldF9yZXZpc2lvbihzdHJ1Y3QgbXVzYiAqbXVzYik7Ci0KLSNpZmRlZiBDT05GSUdfVVNCX1RVU0I2MDEwCi0jZGVmaW5lIG11c2JfaW5fdHVzYigpCQkJMQotI2Vsc2UKLSNkZWZpbmUgbXVzYl9pbl90dXNiKCkJCQkwCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19VU0JfVFVTQl9PTUFQX0RNQQogI2RlZmluZSB0dXNiX2RtYV9vbWFwKCkJCQkxCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYwppbmRleCBlMzNiNmIyLi4zY2UxNTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYwpAQCAtNjc3LDcgKzY3Nyw3IEBACiAJdHVzYl9kbWEtPmNvbnRyb2xsZXIuY2hhbm5lbF9wcm9ncmFtID0gdHVzYl9vbWFwX2RtYV9wcm9ncmFtOwogCXR1c2JfZG1hLT5jb250cm9sbGVyLmNoYW5uZWxfYWJvcnQgPSB0dXNiX29tYXBfZG1hX2Fib3J0OwogCi0JaWYgKHR1c2JfZ2V0X3JldmlzaW9uKG11c2IpID49IFRVU0JfUkVWXzMwKQorCWlmIChtdXNiLT50dXNiX3JldmlzaW9uID49IFRVU0JfUkVWXzMwKQogCQl0dXNiX2RtYS0+bXVsdGljaGFubmVsID0gMTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRE1BUkVROyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnIGIvZHJpdmVycy91c2IvcGh5L0tjb25maWcKaW5kZXggNDE2ZTBjOC4uZTI1M2ZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvcGh5L0tjb25maWcKQEAgLTYsMTUgKzYsNiBAQAogY29uZmlnIFVTQl9QSFkKIAlkZWZfYm9vbCBuCiAKLWNvbmZpZyBVU0JfT1RHX0ZTTQotCXRyaXN0YXRlICJVU0IgMi4wIE9URyBGU00gaW1wbGVtZW50YXRpb24iCi0JZGVwZW5kcyBvbiBVU0IKLQlzZWxlY3QgVVNCX09URwotCXNlbGVjdCBVU0JfUEhZCi0JaGVscAotCSAgSW1wbGVtZW50cyBPVEcgRmluYWwgU3RhdGUgTWFjaGluZSBhcyBzcGVjaWZpZWQgaW4gT24tVGhlLUdvCi0JICBhbmQgRW1iZWRkZWQgSG9zdCBTdXBwbGVtZW50IHRvIHRoZSBVU0IgUmV2aXNpb24gMi4wIFNwZWNpZmljYXRpb24uCi0KICMKICMgVVNCIFRyYW5zY2VpdmVyIERyaXZlcnMKICMKQEAgLTU5LDE0ICs1MCw2IEBACiAJICBpbnRlcmZhY2UgdG8gaW50ZXJhY3Qgd2l0aCBVU0IgMi4wIGFuZCBVU0IgMy4wIFBIWSB0aGF0IGlzIHBhcnQKIAkgIG9mIHRoZSBLZXlzdG9uZSBTT0MuCiAKLWNvbmZpZyBNVl9VM0RfUEhZCi0JYm9vbCAiTWFydmVsbCBVU0IgMy4wIFBIWSBjb250cm9sbGVyIERyaXZlciIKLQlkZXBlbmRzIG9uIENQVV9NTVAzCi0Jc2VsZWN0IFVTQl9QSFkKLQloZWxwCi0JICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IE1hcnZlbGwgVVNCIDMuMCBwaHkgY29udHJvbGxlciBmb3IgTWFydmVsbAotCSAgU29DLgotCiBjb25maWcgTk9QX1VTQl9YQ0VJVgogCXRyaXN0YXRlICJOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlciIKIAlzZWxlY3QgVVNCX1BIWQpAQCAtMTcxLDExICsxNTQsMTIgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaHktaXNwMTMwMS4KIAogY29uZmlnIFVTQl9NU01fT1RHCi0JdHJpc3RhdGUgIk9URyBzdXBwb3J0IGZvciBRdWFsY29tbSBvbi1jaGlwIFVTQiBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKSAmJiBBUkNIX01TTQorCXRyaXN0YXRlICJRdWFsY29tbSBvbi1jaGlwIFVTQiBPVEcgY29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKSAmJiAoQVJDSF9NU00gfHwgQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVCkKKwlkZXBlbmRzIG9uIFJFU0VUX0NPTlRST0xMRVIKIAlzZWxlY3QgVVNCX1BIWQogCWhlbHAKLQkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFVTQiBPVEcgdHJhbnNjZWl2ZXIgb24gTVNNIGNoaXBzLiBJdAorCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBvbiBRdWFsY29tbSBjaGlwcy4gSXQKIAkgIGhhbmRsZXMgUEhZIGluaXRpYWxpemF0aW9uLCBjbG9jayBtYW5hZ2VtZW50LCBhbmQgd29ya2Fyb3VuZHMKIAkgIHJlcXVpcmVkIGFmdGVyIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBldmVuIGZvciBwZXJpcGhlcmFsIG9ubHkgb3IgaG9zdCBvbmx5CkBAIC0yMDgsNiArMTkyLDcgQEAKIGNvbmZpZyBVU0JfUkNBUl9QSFkKIAl0cmlzdGF0ZSAiUmVuZXNhcyBSLUNhciBVU0IgUEhZIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IgfHwgVVNCX0dBREdFVAorCWRlcGVuZHMgb24gQVJDSF9SOEE3Nzc4IHx8IEFSQ0hfUjhBNzc3OSB8fCBDT01QSUxFX1RFU1QKIAlzZWxlY3QgVVNCX1BIWQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBSZW5lc2FzIFItQ2FyIFVTQiBjb21tb24gUEhZIGRyaXZlci4KQEAgLTIzMiw3ICsyMTcsNyBAQAogCiBjb25maWcgVVNCX1VMUEkKIAlib29sICJHZW5lcmljIFVMUEkgVHJhbnNjZWl2ZXIgRHJpdmVyIgotCWRlcGVuZHMgb24gQVJNCisJZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQKIAloZWxwCiAJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IFVMUEkgY29ubmVjdGVkIFVTQiBPVEcgdHJhbnNjZWl2ZXJzIHdoaWNoCiAJICBhcmUgbGlrZWx5IGZvdW5kIG9uIGVtYmVkZGVkIGJvYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZQppbmRleCBmOGZhNzE5Li4yNGE5MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvcGh5L01ha2VmaWxlCkBAIC0zLDE0ICszLDEyIEBACiAjCiBvYmotJChDT05GSUdfVVNCX1BIWSkJCQkrPSBwaHkubwogb2JqLSQoQ09ORklHX09GKQkJCSs9IG9mLm8KLW9iai0kKENPTkZJR19VU0JfT1RHX0ZTTSkJCSs9IHBoeS1mc20tdXNiLm8KIAogIyB0cmFuc2NlaXZlciBkcml2ZXJzLCBrZWVwIHRoZSBsaXN0IHNvcnRlZAogCiBvYmotJChDT05GSUdfQUI4NTAwX1VTQikJCSs9IHBoeS1hYjg1MDAtdXNiLm8KIG9iai0kKENPTkZJR19GU0xfVVNCMl9PVEcpCQkrPSBwaHktZnNsLXVzYi5vCiBvYmotJChDT05GSUdfSVNQMTMwMV9PTUFQKQkJKz0gcGh5LWlzcDEzMDEtb21hcC5vCi1vYmotJChDT05GSUdfTVZfVTNEX1BIWSkJCSs9IHBoeS1tdi11M2QtdXNiLm8KIG9iai0kKENPTkZJR19OT1BfVVNCX1hDRUlWKQkJKz0gcGh5LWdlbmVyaWMubwogb2JqLSQoQ09ORklHX1RBSFZPX1VTQikJCQkrPSBwaHktdGFodm8ubwogb2JqLSQoQ09ORklHX0FNMzM1WF9DT05UUk9MX1VTQikJKz0gcGh5LWFtMzM1eC1jb250cm9sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jCmluZGV4IDEyZmMzNDYuLjU4NWU1MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMKKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgInBoeS1nZW5lcmljLmgiCiAKIHN0cnVjdCBhbTMzNXhfcGh5IHsKLQlzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYgdXNiX3BoeV9nZW47CisJc3RydWN0IHVzYl9waHlfZ2VuZXJpYyB1c2JfcGh5X2dlbjsKIAlzdHJ1Y3QgcGh5X2NvbnRyb2wgKnBoeV9jdHJsOwogCWludCBpZDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jCmluZGV4IGJiMzk0OTguLjc1OTRlNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuX3hjZWl2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KQEAgLTQxLDM0ICs0MSwyNSBAQAogCiAjaW5jbHVkZSAicGh5LWdlbmVyaWMuaCIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOwotCi12b2lkIHVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIodm9pZCkKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYl9waHlfZ2VuZXJpY19yZWdpc3Rlcih2b2lkKQogewotCWlmIChwZCkKLQkJcmV0dXJuOwotCXBkID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgidXNiX3BoeV9nZW5feGNlaXYiLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihwZCkpIHsKLQkJcHJfZXJyKCJVbmFibGUgdG8gcmVnaXN0ZXIgZ2VuZXJpYyB1c2IgdHJhbnNjZWl2ZXJcbiIpOwotCQlwZCA9IE5VTEw7Ci0JCXJldHVybjsKLQl9CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInVzYl9waHlfZ2VuZXJpYyIsCisJCQlQTEFURk9STV9ERVZJRF9BVVRPLCBOVUxMLCAwKTsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX25vcF94Y2Vpdl9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbmVyaWNfcmVnaXN0ZXIpOwogCi12b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKQordm9pZCB1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkKTsKLQlwZCA9IE5VTEw7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCB1c2JfcGh5ICp4LCBpbnQgc3VzcGVuZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbm9wX3Jlc2V0X3NldChzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYgKm5vcCwgaW50IGFzc2VydGVkKQorc3RhdGljIHZvaWQgbm9wX3Jlc2V0X3NldChzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AsIGludCBhc3NlcnRlZCkKIHsKIAlpbnQgdmFsdWU7CiAKQEAgLTg3LDcgKzc4LDcgQEAKIAogaW50IHVzYl9nZW5fcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnBoeSkKIHsKLQlzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYgKm5vcCA9IGRldl9nZXRfZHJ2ZGF0YShwaHktPmRldik7CisJc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHBoeS0+ZGV2KTsKIAogCWlmICghSVNfRVJSKG5vcC0+dmNjKSkgewogCQlpZiAocmVndWxhdG9yX2VuYWJsZShub3AtPnZjYykpCkBAIC0xMDYsNyArOTcsNyBAQAogCiB2b2lkIHVzYl9nZW5fcGh5X3NodXRkb3duKHN0cnVjdCB1c2JfcGh5ICpwaHkpCiB7Ci0Jc3RydWN0IHVzYl9waHlfZ2VuX3hjZWl2ICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LT5kZXYpOworCXN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcCA9IGRldl9nZXRfZHJ2ZGF0YShwaHktPmRldik7CiAKIAkvKiBBc3NlcnQgUkVTRVQgKi8KIAlub3BfcmVzZXRfc2V0KG5vcCwgMSk7CkBAIC0xNTAsOCArMTQxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYgKm5vcCwKLQkJc3RydWN0IHVzYl9waHlfZ2VuX3hjZWl2X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoraW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AsCisJCXN0cnVjdCB1c2JfcGh5X2dlbmVyaWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CiAJZW51bSB1c2JfcGh5X3R5cGUgdHlwZSA9IFVTQl9QSFlfVFlQRV9VU0IyOwogCWludCBlcnI7CkBAIC0yNDUsMTAgKzIzNiwxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZW5fY3JlYXRlX3BoeSk7CiAKLXN0YXRpYyBpbnQgdXNiX3BoeV9nZW5feGNlaXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiX3BoeV9nZW5lcmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYJKm5vcDsKKwlzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljCSpub3A7CiAJaW50IGVycjsKIAogCW5vcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbm9wKSwgR0ZQX0tFUk5FTCk7CkBAIC0yNzQsOSArMjY1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JfcGh5X2dlbl94Y2Vpdl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiX3BoeV9nZW5lcmljX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB1c2JfcGh5X2dlbl94Y2VpdiAqbm9wID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1c2JfcmVtb3ZlX3BoeSgmbm9wLT5waHkpOwogCkBAIC0yOTAsMjkgKzI4MSwyOSBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBub3BfeGNlaXZfZHRfaWRzKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdXNiX3BoeV9nZW5feGNlaXZfZHJpdmVyID0gewotCS5wcm9iZQkJPSB1c2JfcGh5X2dlbl94Y2Vpdl9wcm9iZSwKLQkucmVtb3ZlCQk9IHVzYl9waHlfZ2VuX3hjZWl2X3JlbW92ZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVzYl9waHlfZ2VuZXJpY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHVzYl9waHlfZ2VuZXJpY19wcm9iZSwKKwkucmVtb3ZlCQk9IHVzYl9waHlfZ2VuZXJpY19yZW1vdmUsCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gInVzYl9waHlfZ2VuX3hjZWl2IiwKKwkJLm5hbWUJPSAidXNiX3BoeV9nZW5lcmljIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IG5vcF94Y2Vpdl9kdF9pZHMsCiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHVzYl9waHlfZ2VuX3hjZWl2X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9waHlfZ2VuZXJpY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdXNiX3BoeV9nZW5feGNlaXZfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1c2JfcGh5X2dlbmVyaWNfZHJpdmVyKTsKIH0KLXN1YnN5c19pbml0Y2FsbCh1c2JfcGh5X2dlbl94Y2Vpdl9pbml0KTsKK3N1YnN5c19pbml0Y2FsbCh1c2JfcGh5X2dlbmVyaWNfaW5pdCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB1c2JfcGh5X2dlbl94Y2Vpdl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3BoeV9nZW5lcmljX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdXNiX3BoeV9nZW5feGNlaXZfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdXNiX3BoeV9nZW5lcmljX2RyaXZlcik7CiB9Ci1tb2R1bGVfZXhpdCh1c2JfcGh5X2dlbl94Y2Vpdl9leGl0KTsKK21vZHVsZV9leGl0KHVzYl9waHlfZ2VuZXJpY19leGl0KTsKIAotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp1c2JfcGh5X2dlbl94Y2VpdiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp1c2JfcGh5X2dlbmVyaWMiKTsKIE1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIEluYyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOT1AgVVNCIFRyYW5zY2VpdmVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmggYi9kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaAppbmRleCAzOGE4MWYzLi5kOGZlYWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaAorKysgYi9kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaApAQCAtMSw5ICsxLDkgQEAKICNpZm5kZWYgX1BIWV9HRU5FUklDX0hfCiAjZGVmaW5lIF9QSFlfR0VORVJJQ19IXwogCi0jaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuX3hjZWl2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oPgogCi1zdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYgeworc3RydWN0IHVzYl9waHlfZ2VuZXJpYyB7CiAJc3RydWN0IHVzYl9waHkgcGh5OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0xNSw3ICsxNSw3IEBACiBpbnQgdXNiX2dlbl9waHlfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqcGh5KTsKIHZvaWQgdXNiX2dlbl9waHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSk7CiAKLWludCB1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHVzYl9waHlfZ2VuX3hjZWl2ICpub3AsCi0JCXN0cnVjdCB1c2JfcGh5X2dlbl94Y2Vpdl9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CitpbnQgdXNiX3BoeV9nZW5fY3JlYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcCwKKwkJc3RydWN0IHVzYl9waHlfZ2VuZXJpY19wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS1pc3AxMzAxLW9tYXAuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS1vbWFwLmMKaW5kZXggNmUxNDZkNy4uNjllNDliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS1pc3AxMzAxLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEtb21hcC5jCkBAIC0xMjk1LDcgKzEyOTUsNyBAQAogCQlyZXR1cm4gaXNwMTMwMV9vdGdfZW5hYmxlKGlzcCk7CiAJcmV0dXJuIDA7CiAKLSNlbGlmCSFkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX09NQVApCisjZWxpZiAhSVNfRU5BQkxFRChDT05GSUdfVVNCX09NQVApCiAJLy8gRklYTUUgdXBkYXRlIGl0cyByZWZjb3VudAogCW90Zy0+aG9zdCA9IGhvc3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYwppbmRleCBkNzYyMDAzLi5mNGQ3MjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMKKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIFBIWV9SRUZfU1NQX0VOCQkJQklUKDI5KQogCiBzdHJ1Y3Qga2V5c3RvbmVfdXNicGh5IHsKLQlzdHJ1Y3QgdXNiX3BoeV9nZW5feGNlaXYJdXNiX3BoeV9nZW47CisJc3RydWN0IHVzYl9waHlfZ2VuZXJpYwl1c2JfcGh5X2dlbjsKIAl2b2lkIF9faW9tZW0JCQkqcGh5X2N0cmw7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LW1zbS11c2IuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHktbXNtLXVzYi5jCmluZGV4IDViMzdiODEuLmNlZDM0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHktbXNtLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHktbXNtLXVzYi5jCkBAIC0zMCw5ICszMCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL29mLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgpAQCAtNDQsNiArNDgsNyBAQAogI2RlZmluZSBEUklWRVJfTkFNRQkibXNtX290ZyIKIAogI2RlZmluZSBVTFBJX0lPX1RJTUVPVVRfVVNFQwkoMTAgKiAxMDAwKQorI2RlZmluZSBMSU5LX1JFU0VUX1RJTUVPVVRfVVNFQwkoMjUwICogMTAwMCkKIAogI2RlZmluZSBVU0JfUEhZXzNQM19WT0xfTUlOCTMwNTAwMDAgLyogdVYgKi8KICNkZWZpbmUgVVNCX1BIWV8zUDNfVk9MX01BWAkzMzAwMDAwIC8qIHVWICovCkBAIC01Nyw0OCArNjIsMzggQEAKIAogI2RlZmluZSBVU0JfUEhZX1ZERF9ESUdfVk9MX01JTgkxMDAwMDAwIC8qIHVWICovCiAjZGVmaW5lIFVTQl9QSFlfVkREX0RJR19WT0xfTUFYCTEzMjAwMDAgLyogdVYgKi8KKyNkZWZpbmUgVVNCX1BIWV9TVVNQX0RJR19WT0wJNTAwMDAwICAvKiB1ViAqLwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqaHN1c2JfM3AzOwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKmhzdXNiXzFwODsKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpoc3VzYl92ZGRjeDsKK2VudW0gdmRkX2xldmVscyB7CisJVkREX0xFVkVMX05PTkUgPSAwLAorCVZERF9MRVZFTF9NSU4sCisJVkREX0xFVkVMX01BWCwKK307CiAKIHN0YXRpYyBpbnQgbXNtX2hzdXNiX2luaXRfdmRkY3goc3RydWN0IG1zbV9vdGcgKm1vdGcsIGludCBpbml0KQogewogCWludCByZXQgPSAwOwogCiAJaWYgKGluaXQpIHsKLQkJaHN1c2JfdmRkY3ggPSByZWd1bGF0b3JfZ2V0KG1vdGctPnBoeS5kZXYsICJIU1VTQl9WRERDWCIpOwotCQlpZiAoSVNfRVJSKGhzdXNiX3ZkZGN4KSkgewotCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidW5hYmxlIHRvIGdldCBoc3VzYiB2ZGRjeFxuIik7Ci0JCQlyZXR1cm4gUFRSX0VSUihoc3VzYl92ZGRjeCk7Ci0JCX0KLQotCQlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaHN1c2JfdmRkY3gsCi0JCQkJVVNCX1BIWV9WRERfRElHX1ZPTF9NSU4sCi0JCQkJVVNCX1BIWV9WRERfRElHX1ZPTF9NQVgpOworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UobW90Zy0+dmRkY3gsCisJCQkJbW90Zy0+dmRkX2xldmVsc1tWRERfTEVWRUxfTUlOXSwKKwkJCQltb3RnLT52ZGRfbGV2ZWxzW1ZERF9MRVZFTF9NQVhdKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidW5hYmxlIHRvIHNldCB0aGUgdm9sdGFnZSAiCi0JCQkJCSJmb3IgaHN1c2IgdmRkY3hcbiIpOwotCQkJcmVndWxhdG9yX3B1dChoc3VzYl92ZGRjeCk7CisJCQlkZXZfZXJyKG1vdGctPnBoeS5kZXYsICJDYW5ub3Qgc2V0IHZkZGN4IHZvbHRhZ2VcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoaHN1c2JfdmRkY3gpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKG1vdGctPnBoeS5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIGhzdXNiIHZkZGN4XG4iKTsKLQkJCXJlZ3VsYXRvcl9wdXQoaHN1c2JfdmRkY3gpOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGhzdXNiX3ZkZGN4LCAwLAotCQkJVVNCX1BIWV9WRERfRElHX1ZPTF9NQVgpOworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKG1vdGctPnZkZGN4KTsKIAkJaWYgKHJldCkKLQkJCWRldl9lcnIobW90Zy0+cGh5LmRldiwgInVuYWJsZSB0byBzZXQgdGhlIHZvbHRhZ2UgIgotCQkJCQkiZm9yIGhzdXNiIHZkZGN4XG4iKTsKLQkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUoaHN1c2JfdmRkY3gpOworCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBoc3VzYiB2ZGRjeFxuIik7CisJfSBlbHNlIHsKKwkJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKG1vdGctPnZkZGN4LCAwLAorCQkJCW1vdGctPnZkZF9sZXZlbHNbVkREX0xFVkVMX01BWF0pOworCQlpZiAocmV0KQorCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAiQ2Fubm90IHNldCB2ZGRjeCB2b2x0YWdlXG4iKTsKKwkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUobW90Zy0+dmRkY3gpOwogCQlpZiAocmV0KQogCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidW5hYmxlIHRvIGRpc2FibGUgaHN1c2IgdmRkY3hcbiIpOwotCi0JCXJlZ3VsYXRvcl9wdXQoaHN1c2JfdmRkY3gpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMDksOTggKzEwNCw2NyBAQAogCWludCByYyA9IDA7CiAKIAlpZiAoaW5pdCkgewotCQloc3VzYl8zcDMgPSByZWd1bGF0b3JfZ2V0KG1vdGctPnBoeS5kZXYsICJIU1VTQl8zcDMiKTsKLQkJaWYgKElTX0VSUihoc3VzYl8zcDMpKSB7Ci0JCQlkZXZfZXJyKG1vdGctPnBoeS5kZXYsICJ1bmFibGUgdG8gZ2V0IGhzdXNiIDNwM1xuIik7Ci0JCQlyZXR1cm4gUFRSX0VSUihoc3VzYl8zcDMpOwotCQl9Ci0KLQkJcmMgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaHN1c2JfM3AzLCBVU0JfUEhZXzNQM19WT0xfTUlOLAorCQlyYyA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShtb3RnLT52M3AzLCBVU0JfUEhZXzNQM19WT0xfTUlOLAogCQkJCVVTQl9QSFlfM1AzX1ZPTF9NQVgpOwogCQlpZiAocmMpIHsKLQkJCWRldl9lcnIobW90Zy0+cGh5LmRldiwgInVuYWJsZSB0byBzZXQgdm9sdGFnZSBsZXZlbCAiCi0JCQkJCSJmb3IgaHN1c2IgM3AzXG4iKTsKLQkJCWdvdG8gcHV0XzNwMzsKKwkJCWRldl9lcnIobW90Zy0+cGh5LmRldiwgIkNhbm5vdCBzZXQgdjNwMyB2b2x0YWdlXG4iKTsKKwkJCWdvdG8gZXhpdDsKIAkJfQotCQlyYyA9IHJlZ3VsYXRvcl9lbmFibGUoaHN1c2JfM3AzKTsKKwkJcmMgPSByZWd1bGF0b3JfZW5hYmxlKG1vdGctPnYzcDMpOwogCQlpZiAocmMpIHsKIAkJCWRldl9lcnIobW90Zy0+cGh5LmRldiwgInVuYWJsZSB0byBlbmFibGUgdGhlIGhzdXNiIDNwM1xuIik7Ci0JCQlnb3RvIHB1dF8zcDM7CisJCQlnb3RvIGV4aXQ7CiAJCX0KLQkJaHN1c2JfMXA4ID0gcmVndWxhdG9yX2dldChtb3RnLT5waHkuZGV2LCAiSFNVU0JfMXA4Iik7Ci0JCWlmIChJU19FUlIoaHN1c2JfMXA4KSkgewotCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidW5hYmxlIHRvIGdldCBoc3VzYiAxcDhcbiIpOwotCQkJcmMgPSBQVFJfRVJSKGhzdXNiXzFwOCk7Ci0JCQlnb3RvIGRpc2FibGVfM3AzOwotCQl9Ci0JCXJjID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGhzdXNiXzFwOCwgVVNCX1BIWV8xUDhfVk9MX01JTiwKKwkJcmMgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UobW90Zy0+djFwOCwgVVNCX1BIWV8xUDhfVk9MX01JTiwKIAkJCQlVU0JfUEhZXzFQOF9WT0xfTUFYKTsKIAkJaWYgKHJjKSB7Ci0JCQlkZXZfZXJyKG1vdGctPnBoeS5kZXYsICJ1bmFibGUgdG8gc2V0IHZvbHRhZ2UgbGV2ZWwgIgotCQkJCQkiZm9yIGhzdXNiIDFwOFxuIik7Ci0JCQlnb3RvIHB1dF8xcDg7CisJCQlkZXZfZXJyKG1vdGctPnBoeS5kZXYsICJDYW5ub3Qgc2V0IHYxcDggdm9sdGFnZVxuIik7CisJCQlnb3RvIGRpc2FibGVfM3AzOwogCQl9Ci0JCXJjID0gcmVndWxhdG9yX2VuYWJsZShoc3VzYl8xcDgpOworCQlyYyA9IHJlZ3VsYXRvcl9lbmFibGUobW90Zy0+djFwOCk7CiAJCWlmIChyYykgewogCQkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidW5hYmxlIHRvIGVuYWJsZSB0aGUgaHN1c2IgMXA4XG4iKTsKLQkJCWdvdG8gcHV0XzFwODsKKwkJCWdvdG8gZGlzYWJsZV8zcDM7CiAJCX0KIAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWd1bGF0b3JfZGlzYWJsZShoc3VzYl8xcDgpOwotcHV0XzFwODoKLQlyZWd1bGF0b3JfcHV0KGhzdXNiXzFwOCk7CisJcmVndWxhdG9yX2Rpc2FibGUobW90Zy0+djFwOCk7CiBkaXNhYmxlXzNwMzoKLQlyZWd1bGF0b3JfZGlzYWJsZShoc3VzYl8zcDMpOwotcHV0XzNwMzoKLQlyZWd1bGF0b3JfcHV0KGhzdXNiXzNwMyk7CisJcmVndWxhdG9yX2Rpc2FibGUobW90Zy0+djNwMyk7CitleGl0OgogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtc21faHN1c2JfbGRvX3NldF9tb2RlKGludCBvbikKK3N0YXRpYyBpbnQgbXNtX2hzdXNiX2xkb19zZXRfbW9kZShzdHJ1Y3QgbXNtX290ZyAqbW90ZywgaW50IG9uKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKCFoc3VzYl8xcDggfHwgSVNfRVJSKGhzdXNiXzFwOCkpIHsKLQkJcHJfZXJyKCIlczogSFNVU0JfMXA4IGlzIG5vdCBpbml0aWFsaXplZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoIWhzdXNiXzNwMyB8fCBJU19FUlIoaHN1c2JfM3AzKSkgewotCQlwcl9lcnIoIiVzOiBIU1VTQl8zcDMgaXMgbm90IGluaXRpYWxpemVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCWlmIChvbikgewotCQlyZXQgPSByZWd1bGF0b3Jfc2V0X29wdGltdW1fbW9kZShoc3VzYl8xcDgsCisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKG1vdGctPnYxcDgsCiAJCQkJVVNCX1BIWV8xUDhfSFBNX0xPQUQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIHNldCBIUE0gb2YgdGhlIHJlZ3VsYXRvciAiCi0JCQkJIkhTVVNCXzFwOFxuIiwgX19mdW5jX18pOworCQkJcHJfZXJyKCJDb3VsZCBub3Qgc2V0IEhQTSBmb3IgdjFwOFxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCXJldCA9IHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKGhzdXNiXzNwMywKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9vcHRpbXVtX21vZGUobW90Zy0+djNwMywKIAkJCQlVU0JfUEhZXzNQM19IUE1fTE9BRCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gc2V0IEhQTSBvZiB0aGUgcmVndWxhdG9yICIKLQkJCQkiSFNVU0JfM3AzXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZWd1bGF0b3Jfc2V0X29wdGltdW1fbW9kZShoc3VzYl8xcDgsCisJCQlwcl9lcnIoIkNvdWxkIG5vdCBzZXQgSFBNIGZvciB2M3AzXG4iKTsKKwkJCXJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKG1vdGctPnYxcDgsCiAJCQkJVVNCX1BIWV8xUDhfTFBNX0xPQUQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0gZWxzZSB7Ci0JCXJldCA9IHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKGhzdXNiXzFwOCwKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9vcHRpbXVtX21vZGUobW90Zy0+djFwOCwKIAkJCQlVU0JfUEhZXzFQOF9MUE1fTE9BRCk7CiAJCWlmIChyZXQgPCAwKQotCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIHNldCBMUE0gb2YgdGhlIHJlZ3VsYXRvciAiCi0JCQkJIkhTVVNCXzFwOFxuIiwgX19mdW5jX18pOwotCQlyZXQgPSByZWd1bGF0b3Jfc2V0X29wdGltdW1fbW9kZShoc3VzYl8zcDMsCisJCQlwcl9lcnIoIkNvdWxkIG5vdCBzZXQgTFBNIGZvciB2MXA4XG4iKTsKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9vcHRpbXVtX21vZGUobW90Zy0+djNwMywKIAkJCQlVU0JfUEhZXzNQM19MUE1fTE9BRCk7CiAJCWlmIChyZXQgPCAwKQotCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIHNldCBMUE0gb2YgdGhlIHJlZ3VsYXRvciAiCi0JCQkJIkhTVVNCXzNwM1xuIiwgX19mdW5jX18pOworCQkJcHJfZXJyKCJDb3VsZCBub3Qgc2V0IExQTSBmb3IgdjNwM1xuIik7CiAJfQogCiAJcHJfZGVidWcoInJlZyAoJXMpXG4iLCBvbiA/ICJIUE0iIDogIkxQTSIpOwpAQCAtMjY1LDI3ICsyMjksNDcgQEAKIHN0YXRpYyB2b2lkIHVscGlfaW5pdChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKIHsKIAlzdHJ1Y3QgbXNtX290Z19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG1vdGctPnBkYXRhOwotCWludCAqc2VxID0gcGRhdGEtPnBoeV9pbml0X3NlcTsKKwlpbnQgKnNlcSA9IHBkYXRhLT5waHlfaW5pdF9zZXEsIGlkeDsKKwl1MzIgYWRkciA9IFVMUElfRVhUX1ZFTkRPUl9TUEVDSUZJQzsKIAotCWlmICghc2VxKQotCQlyZXR1cm47CisJZm9yIChpZHggPSAwOyBpZHggPCBwZGF0YS0+cGh5X2luaXRfc3o7IGlkeCsrKSB7CisJCWlmIChzZXFbaWR4XSA9PSAtMSkKKwkJCWNvbnRpbnVlOwogCi0Jd2hpbGUgKHNlcVswXSA+PSAwKSB7CiAJCWRldl92ZGJnKG1vdGctPnBoeS5kZXYsICJ1bHBpOiB3cml0ZSAweCUwMnggdG8gMHglMDJ4XG4iLAotCQkJCXNlcVswXSwgc2VxWzFdKTsKLQkJdWxwaV93cml0ZSgmbW90Zy0+cGh5LCBzZXFbMF0sIHNlcVsxXSk7Ci0JCXNlcSArPSAyOworCQkJCXNlcVtpZHhdLCBhZGRyICsgaWR4KTsKKwkJdWxwaV93cml0ZSgmbW90Zy0+cGh5LCBzZXFbaWR4XSwgYWRkciArIGlkeCk7CiAJfQogfQogCitzdGF0aWMgaW50IG1zbV9waHlfbm90aWZ5X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9waHkgKnBoeSwKKwkJCQkgICBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpCit7CisJaW50IHZhbDsKKworCS8qCisJICogUHV0IHRoZSB0cmFuc2NlaXZlciBpbiBub24tZHJpdmluZyBtb2RlLiBPdGhlcndpc2UgaG9zdAorCSAqIG1heSBub3QgZGV0ZWN0IHNvZnQtZGlzY29ubmVjdGlvbi4KKwkgKi8KKwl2YWwgPSB1bHBpX3JlYWQocGh5LCBVTFBJX0ZVTkNfQ1RSTCk7CisJdmFsICY9IH5VTFBJX0ZVTkNfQ1RSTF9PUE1PREVfTUFTSzsKKwl2YWwgfD0gVUxQSV9GVU5DX0NUUkxfT1BNT0RFX05PTkRSSVZJTkc7CisJdWxwaV93cml0ZShwaHksIHZhbCwgVUxQSV9GVU5DX0NUUkwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbXNtX290Z19saW5rX2Nsa19yZXNldChzdHJ1Y3QgbXNtX290ZyAqbW90ZywgYm9vbCBhc3NlcnQpCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAotCWlmICghbW90Zy0+cGRhdGEtPmxpbmtfY2xrX3Jlc2V0KQotCQlyZXR1cm4gcmV0OworCWlmIChtb3RnLT5wZGF0YS0+bGlua19jbGtfcmVzZXQpCisJCXJldCA9IG1vdGctPnBkYXRhLT5saW5rX2Nsa19yZXNldChtb3RnLT5jbGssIGFzc2VydCk7CisJZWxzZSBpZiAoYXNzZXJ0KQorCQlyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChtb3RnLT5saW5rX3JzdCk7CisJZWxzZQorCQlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KG1vdGctPmxpbmtfcnN0KTsKIAotCXJldCA9IG1vdGctPnBkYXRhLT5saW5rX2Nsa19yZXNldChtb3RnLT5jbGssIGFzc2VydCk7CiAJaWYgKHJldCkKIAkJZGV2X2Vycihtb3RnLT5waHkuZGV2LCAidXNiIGxpbmsgY2xrIHJlc2V0ICVzIGZhaWxlZFxuIiwKIAkJCWFzc2VydCA/ICJhc3NlcnQiIDogImRlYXNzZXJ0Iik7CkBAIC0yOTUsODYgKzI3OSw0OSBAQAogCiBzdGF0aWMgaW50IG1zbV9vdGdfcGh5X2Nsa19yZXNldChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JaWYgKCFtb3RnLT5wZGF0YS0+cGh5X2Nsa19yZXNldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAobW90Zy0+cGRhdGEtPnBoeV9jbGtfcmVzZXQpCisJCXJldCA9IG1vdGctPnBkYXRhLT5waHlfY2xrX3Jlc2V0KG1vdGctPnBoeV9yZXNldF9jbGspOworCWVsc2UKKwkJcmV0ID0gcmVzZXRfY29udHJvbF9yZXNldChtb3RnLT5waHlfcnN0KTsKIAotCXJldCA9IG1vdGctPnBkYXRhLT5waHlfY2xrX3Jlc2V0KG1vdGctPnBoeV9yZXNldF9jbGspOwogCWlmIChyZXQpCiAJCWRldl9lcnIobW90Zy0+cGh5LmRldiwgInVzYiBwaHkgY2xrIHJlc2V0IGZhaWxlZFxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1zbV9vdGdfcGh5X3Jlc2V0KHN0cnVjdCBtc21fb3RnICptb3RnKQorc3RhdGljIGludCBtc21fbGlua19yZXNldChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKIHsKIAl1MzIgdmFsOwogCWludCByZXQ7Ci0JaW50IHJldHJpZXM7CiAKIAlyZXQgPSBtc21fb3RnX2xpbmtfY2xrX3Jlc2V0KG1vdGcsIDEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gbXNtX290Z19waHlfY2xrX3Jlc2V0KG1vdGcpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisKKwkvKiB3YWl0IGZvciAxbXMgZGVsYXkgYXMgc3VnZ2VzdGVkIGluIEhQRy4gKi8KKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTIwMCk7CisKIAlyZXQgPSBtc21fb3RnX2xpbmtfY2xrX3Jlc2V0KG1vdGcsIDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlpZiAobW90Zy0+cGh5X251bWJlcikKKwkJd3JpdGVsKHJlYWRsKFVTQl9QSFlfQ1RSTDIpIHwgQklUKDE2KSwgVVNCX1BIWV9DVFJMMik7CisKKwkvKiBwdXQgdHJhbnNjZWl2ZXIgaW4gc2VyaWFsIG1vZGUgYXMgcGFydCBvZiByZXNldCAqLwogCXZhbCA9IHJlYWRsKFVTQl9QT1JUU0MpICYgflBPUlRTQ19QVFNfTUFTSzsKLQl3cml0ZWwodmFsIHwgUE9SVFNDX1BUU19VTFBJLCBVU0JfUE9SVFNDKTsKKwl3cml0ZWwodmFsIHwgUE9SVFNDX1BUU19TRVJJQUwsIFVTQl9QT1JUU0MpOwogCi0JZm9yIChyZXRyaWVzID0gMzsgcmV0cmllcyA+IDA7IHJldHJpZXMtLSkgewotCQlyZXQgPSB1bHBpX3dyaXRlKCZtb3RnLT5waHksIFVMUElfRlVOQ19DVFJMX1NVU1BFTkRNLAotCQkJCVVMUElfQ0xSKFVMUElfRlVOQ19DVFJMKSk7Ci0JCWlmICghcmV0KQotCQkJYnJlYWs7Ci0JCXJldCA9IG1zbV9vdGdfcGh5X2Nsa19yZXNldChtb3RnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCWlmICghcmV0cmllcykKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0KLQkvKiBUaGlzIHJlc2V0IGNhbGlicmF0ZXMgdGhlIHBoeSwgaWYgdGhlIGFib3ZlIHdyaXRlIHN1Y2NlZWRlZCAqLwotCXJldCA9IG1zbV9vdGdfcGh5X2Nsa19yZXNldChtb3RnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JZm9yIChyZXRyaWVzID0gMzsgcmV0cmllcyA+IDA7IHJldHJpZXMtLSkgewotCQlyZXQgPSB1bHBpX3JlYWQoJm1vdGctPnBoeSwgVUxQSV9ERUJVRyk7Ci0JCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKLQkJCWJyZWFrOwotCQlyZXQgPSBtc21fb3RnX3BoeV9jbGtfcmVzZXQobW90Zyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQlpZiAoIXJldHJpZXMpCi0JCXJldHVybiAtRVRJTUVET1VUOwotCi0JZGV2X2luZm8obW90Zy0+cGh5LmRldiwgInBoeV9yZXNldDogc3VjY2Vzc1xuIik7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTElOS19SRVNFVF9USU1FT1VUX1VTRUMJCSgyNTAgKiAxMDAwKQogc3RhdGljIGludCBtc21fb3RnX3Jlc2V0KHN0cnVjdCB1c2JfcGh5ICpwaHkpCiB7CiAJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBjb250YWluZXJfb2YocGh5LCBzdHJ1Y3QgbXNtX290ZywgcGh5KTsKLQlzdHJ1Y3QgbXNtX290Z19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG1vdGctPnBkYXRhOwogCWludCBjbnQgPSAwOwotCWludCByZXQ7Ci0JdTMyIHZhbCA9IDA7Ci0JdTMyIHVscGlfdmFsID0gMDsKLQotCXJldCA9IG1zbV9vdGdfcGh5X3Jlc2V0KG1vdGcpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihwaHktPmRldiwgInBoeV9yZXNldCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXVscGlfaW5pdChtb3RnKTsKIAogCXdyaXRlbChVU0JDTURfUkVTRVQsIFVTQl9VU0JDTUQpOwogCXdoaWxlIChjbnQgPCBMSU5LX1JFU0VUX1RJTUVPVVRfVVNFQykgewpAQCAtMzg2LDIwICszMzMsOTYgQEAKIAlpZiAoY250ID49IExJTktfUkVTRVRfVElNRU9VVF9VU0VDKQogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAotCS8qIHNlbGVjdCBVTFBJIHBoeSAqLwotCXdyaXRlbCgweDgwMDAwMDAwLCBVU0JfUE9SVFNDKTsKKwkvKiBzZWxlY3QgVUxQSSBwaHkgYW5kIGNsZWFyIG90aGVyIHN0YXR1cy9jb250cm9sIGJpdHMgaW4gUE9SVFNDICovCisJd3JpdGVsKFBPUlRTQ19QVFNfVUxQSSwgVVNCX1BPUlRTQyk7CisKKwl3cml0ZWwoMHgwLCBVU0JfQUhCQlVSU1QpOworCXdyaXRlbCgweDA4LCBVU0JfQUhCTU9ERSk7CisKKwlpZiAobW90Zy0+cGh5X251bWJlcikKKwkJd3JpdGVsKHJlYWRsKFVTQl9QSFlfQ1RSTDIpIHwgQklUKDE2KSwgVVNCX1BIWV9DVFJMMik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9waHlfcmVzZXQoc3RydWN0IG1zbV9vdGcgKm1vdGcpCit7CisJdm9pZCBfX2lvbWVtICphZGRyOworCisJaWYgKG1vdGctPnBkYXRhLT5waHlfdHlwZSAhPSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFkpIHsKKwkJbXNtX290Z19waHlfY2xrX3Jlc2V0KG1vdGcpOworCQlyZXR1cm47CisJfQorCisJYWRkciA9IFVTQl9QSFlfQ1RSTDsKKwlpZiAobW90Zy0+cGh5X251bWJlcikKKwkJYWRkciA9IFVTQl9QSFlfQ1RSTDI7CisKKwkvKiBBc3NlcnQgVVNCIFBIWV9QT1IgKi8KKwl3cml0ZWwocmVhZGwoYWRkcikgfCBQSFlfUE9SX0FTU0VSVCwgYWRkcik7CisKKwkvKgorCSAqIHdhaXQgZm9yIG1pbmltdW0gMTAgbWljcm9zZWNvbmRzIGFzIHN1Z2dlc3RlZCBpbiBIUEcuCisJICogVXNlIGEgc2xpZ2h0bHkgbGFyZ2VyIHZhbHVlIHNpbmNlIHRoZSBleGFjdCB2YWx1ZSBkaWRuJ3QKKwkgKiB3b3JrIDEwMCUgb2YgdGhlIHRpbWUuCisJICovCisJdWRlbGF5KDEyKTsKKworCS8qIERlYXNzZXJ0IFVTQiBQSFlfUE9SICovCisJd3JpdGVsKHJlYWRsKGFkZHIpICYgflBIWV9QT1JfQVNTRVJULCBhZGRyKTsKK30KKworc3RhdGljIGludCBtc21fdXNiX3Jlc2V0KHN0cnVjdCB1c2JfcGh5ICpwaHkpCit7CisJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBjb250YWluZXJfb2YocGh5LCBzdHJ1Y3QgbXNtX290ZywgcGh5KTsKKwlpbnQgcmV0OworCisJaWYgKCFJU19FUlIobW90Zy0+Y29yZV9jbGspKQorCQljbGtfcHJlcGFyZV9lbmFibGUobW90Zy0+Y29yZV9jbGspOworCisJcmV0ID0gbXNtX2xpbmtfcmVzZXQobW90Zyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBoeS0+ZGV2LCAicGh5X3Jlc2V0IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXNtX290Z19yZXNldCgmbW90Zy0+cGh5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocGh5LT5kZXYsICJsaW5rIHJlc2V0IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJbXNsZWVwKDEwMCk7CiAKLQl3cml0ZWwoMHgwLCBVU0JfQUhCQlVSU1QpOwotCXdyaXRlbCgweDAwLCBVU0JfQUhCTU9ERSk7CisJLyogUmVzZXQgVVNCIFBIWSBhZnRlciBwZXJmb3JtaW5nIFVTQiBMaW5rIFJFU0VUICovCisJbXNtX3BoeV9yZXNldChtb3RnKTsKKworCWlmICghSVNfRVJSKG1vdGctPmNvcmVfY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1vdGctPmNvcmVfY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zbV9waHlfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqcGh5KQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gY29udGFpbmVyX29mKHBoeSwgc3RydWN0IG1zbV9vdGcsIHBoeSk7CisJc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBtb3RnLT5wZGF0YTsKKwl1MzIgdmFsLCB1bHBpX3ZhbCA9IDA7CisKKwkvKiBQcm9ncmFtIFVTQiBQSFkgT3ZlcnJpZGUgcmVnaXN0ZXJzLiAqLworCXVscGlfaW5pdChtb3RnKTsKKworCS8qCisJICogSXQgaXMgcmVjb21tZW5kZWQgaW4gSFBHIHRvIHJlc2V0IFVTQiBQSFkgYWZ0ZXIgcHJvZ3JhbW1pbmcKKwkgKiBVU0IgUEhZIE92ZXJyaWRlIHJlZ2lzdGVycy4KKwkgKi8KKwltc21fcGh5X3Jlc2V0KG1vdGcpOwogCiAJaWYgKHBkYXRhLT5vdGdfY29udHJvbCA9PSBPVEdfUEhZX0NPTlRST0wpIHsKIAkJdmFsID0gcmVhZGwoVVNCX09UR1NDKTsKLQkJaWYgKHBkYXRhLT5tb2RlID09IFVTQl9PVEcpIHsKKwkJaWYgKHBkYXRhLT5tb2RlID09IFVTQl9EUl9NT0RFX09URykgewogCQkJdWxwaV92YWwgPSBVTFBJX0lOVF9JREdSRCB8IFVMUElfSU5UX1NFU1NfVkFMSUQ7CiAJCQl2YWwgfD0gT1RHU0NfSURJRSB8IE9UR1NDX0JTVklFOwotCQl9IGVsc2UgaWYgKHBkYXRhLT5tb2RlID09IFVTQl9QRVJJUEhFUkFMKSB7CisJCX0gZWxzZSBpZiAocGRhdGEtPm1vZGUgPT0gVVNCX0RSX01PREVfUEVSSVBIRVJBTCkgewogCQkJdWxwaV92YWwgPSBVTFBJX0lOVF9TRVNTX1ZBTElEOwogCQkJdmFsIHw9IE9UR1NDX0JTVklFOwogCQl9CkBAIC00MDgsNiArNDMxLDkgQEAKIAkJdWxwaV93cml0ZShwaHksIHVscGlfdmFsLCBVTFBJX1VTQl9JTlRfRU5fRkFMTCk7CiAJfQogCisJaWYgKG1vdGctPnBoeV9udW1iZXIpCisJCXdyaXRlbChyZWFkbChVU0JfUEhZX0NUUkwyKSB8IEJJVCgxNiksIFVTQl9QSFlfQ1RSTDIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNiwyMiArNDQyLDIwIEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotI2RlZmluZSBVU0JfUEhZX1NVU1BfRElHX1ZPTCAgNTAwMDAwCi1zdGF0aWMgaW50IG1zbV9oc3VzYl9jb25maWdfdmRkY3goaW50IGhpZ2gpCitzdGF0aWMgaW50IG1zbV9oc3VzYl9jb25maWdfdmRkY3goc3RydWN0IG1zbV9vdGcgKm1vdGcsIGludCBoaWdoKQogewotCWludCBtYXhfdm9sID0gVVNCX1BIWV9WRERfRElHX1ZPTF9NQVg7CisJaW50IG1heF92b2wgPSBtb3RnLT52ZGRfbGV2ZWxzW1ZERF9MRVZFTF9NQVhdOwogCWludCBtaW5fdm9sOwogCWludCByZXQ7CiAKIAlpZiAoaGlnaCkKLQkJbWluX3ZvbCA9IFVTQl9QSFlfVkREX0RJR19WT0xfTUlOOworCQltaW5fdm9sID0gbW90Zy0+dmRkX2xldmVsc1tWRERfTEVWRUxfTUlOXTsKIAllbHNlCi0JCW1pbl92b2wgPSBVU0JfUEhZX1NVU1BfRElHX1ZPTDsKKwkJbWluX3ZvbCA9IG1vdGctPnZkZF9sZXZlbHNbVkREX0xFVkVMX05PTkVdOwogCi0JcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGhzdXNiX3ZkZGN4LCBtaW5fdm9sLCBtYXhfdm9sKTsKKwlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UobW90Zy0+dmRkY3gsIG1pbl92b2wsIG1heF92b2wpOwogCWlmIChyZXQpIHsKLQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIHNldCB0aGUgdm9sdGFnZSBmb3IgcmVndWxhdG9yICIKLQkJCSJIU1VTQl9WRERDWFxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIkNhbm5vdCBzZXQgdmRkY3ggdm9sdGFnZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00NDUsNiArNDY5LDcgQEAKIAlzdHJ1Y3QgdXNiX3BoeSAqcGh5ID0gJm1vdGctPnBoeTsKIAlzdHJ1Y3QgdXNiX2J1cyAqYnVzID0gcGh5LT5vdGctPmhvc3Q7CiAJc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBtb3RnLT5wZGF0YTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CiAJaW50IGNudCA9IDA7CiAKIAlpZiAoYXRvbWljX3JlYWQoJm1vdGctPmluX2xwbSkpCkBAIC01MDQsMjIgKzUyOSwyMyBAQAogCSAqLwogCXdyaXRlbChyZWFkbChVU0JfVVNCQ01EKSB8IEFTWU5DX0lOVFJfQ1RSTCB8IFVMUElfU1RQX0NUUkwsIFVTQl9VU0JDTUQpOwogCisJYWRkciA9IFVTQl9QSFlfQ1RSTDsKKwlpZiAobW90Zy0+cGh5X251bWJlcikKKwkJYWRkciA9IFVTQl9QSFlfQ1RSTDI7CisKIAlpZiAobW90Zy0+cGRhdGEtPnBoeV90eXBlID09IFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWSAmJgogCQkJbW90Zy0+cGRhdGEtPm90Z19jb250cm9sID09IE9UR19QTUlDX0NPTlRST0wpCi0JCXdyaXRlbChyZWFkbChVU0JfUEhZX0NUUkwpIHwgUEhZX1JFVEVOLCBVU0JfUEhZX0NUUkwpOworCQl3cml0ZWwocmVhZGwoYWRkcikgfCBQSFlfUkVURU4sIGFkZHIpOwogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1vdGctPnBjbGspOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShtb3RnLT5jbGspOwotCWlmIChtb3RnLT5jb3JlX2NsaykKKwlpZiAoIUlTX0VSUihtb3RnLT5jb3JlX2NsaykpCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtb3RnLT5jb3JlX2Nsayk7CiAKLQlpZiAoIUlTX0VSUihtb3RnLT5wY2xrX3NyYykpCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShtb3RnLT5wY2xrX3NyYyk7Ci0KIAlpZiAobW90Zy0+cGRhdGEtPnBoeV90eXBlID09IFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWSAmJgogCQkJbW90Zy0+cGRhdGEtPm90Z19jb250cm9sID09IE9UR19QTUlDX0NPTlRST0wpIHsKLQkJbXNtX2hzdXNiX2xkb19zZXRfbW9kZSgwKTsKLQkJbXNtX2hzdXNiX2NvbmZpZ192ZGRjeCgwKTsKKwkJbXNtX2hzdXNiX2xkb19zZXRfbW9kZShtb3RnLCAwKTsKKwkJbXNtX2hzdXNiX2NvbmZpZ192ZGRjeChtb3RnLCAwKTsKIAl9CiAKIAlpZiAoZGV2aWNlX21heV93YWtldXAocGh5LT5kZXYpKQpAQCAtNTM5LDI1ICs1NjUsMjggQEAKIHsKIAlzdHJ1Y3QgdXNiX3BoeSAqcGh5ID0gJm1vdGctPnBoeTsKIAlzdHJ1Y3QgdXNiX2J1cyAqYnVzID0gcGh5LT5vdGctPmhvc3Q7CisJdm9pZCBfX2lvbWVtICphZGRyOwogCWludCBjbnQgPSAwOwogCXVuc2lnbmVkIHRlbXA7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZtb3RnLT5pbl9scG0pKQogCQlyZXR1cm4gMDsKIAotCWlmICghSVNfRVJSKG1vdGctPnBjbGtfc3JjKSkKLQkJY2xrX3ByZXBhcmVfZW5hYmxlKG1vdGctPnBjbGtfc3JjKTsKLQogCWNsa19wcmVwYXJlX2VuYWJsZShtb3RnLT5wY2xrKTsKIAljbGtfcHJlcGFyZV9lbmFibGUobW90Zy0+Y2xrKTsKLQlpZiAobW90Zy0+Y29yZV9jbGspCisJaWYgKCFJU19FUlIobW90Zy0+Y29yZV9jbGspKQogCQljbGtfcHJlcGFyZV9lbmFibGUobW90Zy0+Y29yZV9jbGspOwogCiAJaWYgKG1vdGctPnBkYXRhLT5waHlfdHlwZSA9PSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFkgJiYKIAkJCW1vdGctPnBkYXRhLT5vdGdfY29udHJvbCA9PSBPVEdfUE1JQ19DT05UUk9MKSB7Ci0JCW1zbV9oc3VzYl9sZG9fc2V0X21vZGUoMSk7Ci0JCW1zbV9oc3VzYl9jb25maWdfdmRkY3goMSk7Ci0JCXdyaXRlbChyZWFkbChVU0JfUEhZX0NUUkwpICYgflBIWV9SRVRFTiwgVVNCX1BIWV9DVFJMKTsKKworCQlhZGRyID0gVVNCX1BIWV9DVFJMOworCQlpZiAobW90Zy0+cGh5X251bWJlcikKKwkJCWFkZHIgPSBVU0JfUEhZX0NUUkwyOworCisJCW1zbV9oc3VzYl9sZG9fc2V0X21vZGUobW90ZywgMSk7CisJCW1zbV9oc3VzYl9jb25maWdfdmRkY3gobW90ZywgMSk7CisJCXdyaXRlbChyZWFkbChhZGRyKSAmIH5QSFlfUkVURU4sIGFkZHIpOwogCX0KIAogCXRlbXAgPSByZWFkbChVU0JfVVNCQ01EKTsKQEAgLTU4Niw4ICs2MTUsNyBAQAogCQkgKiBQSFkuIFVTQiBzdGF0ZSBjYW4gbm90IGJlIHJlc3RvcmVkLiBSZS1pbnNlcnRpb24KIAkJICogb2YgVVNCIGNhYmxlIGlzIHRoZSBvbmx5IHdheSB0byBnZXQgVVNCIHdvcmtpbmcuCiAJCSAqLwotCQlkZXZfZXJyKHBoeS0+ZGV2LCAiVW5hYmxlIHRvIHJlc3VtZSBVU0IuIgotCQkJCSJSZS1wbHVnaW4gdGhlIGNhYmxlXG4iKTsKKwkJZGV2X2VycihwaHktPmRldiwgIlVuYWJsZSB0byByZXN1bWUgVVNCLiBSZS1wbHVnaW4gdGhlIGNhYmxlXG4iKTsKIAkJbXNtX290Z19yZXNldChwaHkpOwogCX0KIApAQCAtNjg3LDcgKzcxNSw3IEBACiAJICogRmFpbCBob3N0IHJlZ2lzdHJhdGlvbiBpZiB0aGlzIGJvYXJkIGNhbiBzdXBwb3J0CiAJICogb25seSBwZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24uCiAJICovCi0JaWYgKG1vdGctPnBkYXRhLT5tb2RlID09IFVTQl9QRVJJUEhFUkFMKSB7CisJaWYgKG1vdGctPnBkYXRhLT5tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwpIHsKIAkJZGV2X2luZm8ob3RnLT5waHktPmRldiwgIkhvc3QgbW9kZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNzE2LDcgKzc0NCw3IEBACiAJICogS2ljayB0aGUgc3RhdGUgbWFjaGluZSB3b3JrLCBpZiBwZXJpcGhlcmFsIGlzIG5vdCBzdXBwb3J0ZWQKIAkgKiBvciBwZXJpcGhlcmFsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHVzLgogCSAqLwotCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfSE9TVCB8fCBvdGctPmdhZGdldCkgeworCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfRFJfTU9ERV9IT1NUIHx8IG90Zy0+Z2FkZ2V0KSB7CiAJCXBtX3J1bnRpbWVfZ2V0X3N5bmMob3RnLT5waHktPmRldik7CiAJCXNjaGVkdWxlX3dvcmsoJm1vdGctPnNtX3dvcmspOwogCX0KQEAgLTc2MCw3ICs3ODgsNyBAQAogCSAqIEZhaWwgcGVyaXBoZXJhbCByZWdpc3RyYXRpb24gaWYgdGhpcyBib2FyZCBjYW4gc3VwcG9ydAogCSAqIG9ubHkgaG9zdCBjb25maWd1cmF0aW9uLgogCSAqLwotCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfSE9TVCkgeworCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfRFJfTU9ERV9IT1NUKSB7CiAJCWRldl9pbmZvKG90Zy0+cGh5LT5kZXYsICJQZXJpcGhlcmFsIG1vZGUgaXMgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTc4NSw3ICs4MTMsNyBAQAogCSAqIEtpY2sgdGhlIHN0YXRlIG1hY2hpbmUgd29yaywgaWYgaG9zdCBpcyBub3Qgc3VwcG9ydGVkCiAJICogb3IgaG9zdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCB1cy4KIAkgKi8KLQlpZiAobW90Zy0+cGRhdGEtPm1vZGUgPT0gVVNCX1BFUklQSEVSQUwgfHwgb3RnLT5ob3N0KSB7CisJaWYgKG1vdGctPnBkYXRhLT5tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwgfHwgb3RnLT5ob3N0KSB7CiAJCXBtX3J1bnRpbWVfZ2V0X3N5bmMob3RnLT5waHktPmRldik7CiAJCXNjaGVkdWxlX3dvcmsoJm1vdGctPnNtX3dvcmspOwogCX0KQEAgLTExMDYsNyArMTEzNCw3IEBACiAJdTMyIG90Z3NjID0gcmVhZGwoVVNCX09UR1NDKTsKIAogCXN3aXRjaCAocGRhdGEtPm1vZGUpIHsKLQljYXNlIFVTQl9PVEc6CisJY2FzZSBVU0JfRFJfTU9ERV9PVEc6CiAJCWlmIChwZGF0YS0+b3RnX2NvbnRyb2wgPT0gT1RHX1BIWV9DT05UUk9MKSB7CiAJCQlpZiAob3Rnc2MgJiBPVEdTQ19JRCkKIAkJCQlzZXRfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKQEAgLTExMTgsMjEgKzExNDYsMTQgQEAKIAkJCWVsc2UKIAkJCQljbGVhcl9iaXQoQl9TRVNTX1ZMRCwgJm1vdGctPmlucHV0cyk7CiAJCX0gZWxzZSBpZiAocGRhdGEtPm90Z19jb250cm9sID09IE9UR19VU0VSX0NPTlRST0wpIHsKLQkJCWlmIChwZGF0YS0+ZGVmYXVsdF9tb2RlID09IFVTQl9IT1NUKSB7Ci0JCQkJY2xlYXJfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKLQkJCX0gZWxzZSBpZiAocGRhdGEtPmRlZmF1bHRfbW9kZSA9PSBVU0JfUEVSSVBIRVJBTCkgewotCQkJCXNldF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOwotCQkJCXNldF9iaXQoQl9TRVNTX1ZMRCwgJm1vdGctPmlucHV0cyk7Ci0JCQl9IGVsc2UgewogCQkJCXNldF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOwogCQkJCWNsZWFyX2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKTsKLQkJCX0KIAkJfQogCQlicmVhazsKLQljYXNlIFVTQl9IT1NUOgorCWNhc2UgVVNCX0RSX01PREVfSE9TVDoKIAkJY2xlYXJfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfUEVSSVBIRVJBTDoKKwljYXNlIFVTQl9EUl9NT0RFX1BFUklQSEVSQUw6CiAJCXNldF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOwogCQlpZiAob3Rnc2MgJiBPVEdTQ19CU1YpCiAJCQlzZXRfYml0KEJfU0VTU19WTEQsICZtb3RnLT5pbnB1dHMpOwpAQCAtMTI4MiwxMyArMTMwMywxMyBAQAogCiAJc3dpdGNoIChvdGctPnBoeS0+c3RhdGUpIHsKIAljYXNlIE9UR19TVEFURV9BX0hPU1Q6Ci0JCXNlcV9wcmludGYocywgImhvc3RcbiIpOworCQlzZXFfcHV0cyhzLCAiaG9zdFxuIik7CiAJCWJyZWFrOwogCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKLQkJc2VxX3ByaW50ZihzLCAicGVyaXBoZXJhbFxuIik7CisJCXNlcV9wdXRzKHMsICJwZXJpcGhlcmFsXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc2VxX3ByaW50ZihzLCAibm9uZVxuIik7CisJCXNlcV9wdXRzKHMsICJub25lXG4iKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMzA4LDcgKzEzMjksNyBAQAogCWNoYXIgYnVmWzE2XTsKIAlzdHJ1Y3QgdXNiX290ZyAqb3RnID0gbW90Zy0+cGh5Lm90ZzsKIAlpbnQgc3RhdHVzID0gY291bnQ7Ci0JZW51bSB1c2JfbW9kZV90eXBlIHJlcV9tb2RlOworCWVudW0gdXNiX2RyX21vZGUgcmVxX21vZGU7CiAKIAltZW1zZXQoYnVmLCAweDAwLCBzaXplb2YoYnVmKSk7CiAKQEAgLTEzMTgsMTggKzEzMzksMTggQEAKIAl9CiAKIAlpZiAoIXN0cm5jbXAoYnVmLCAiaG9zdCIsIDQpKSB7Ci0JCXJlcV9tb2RlID0gVVNCX0hPU1Q7CisJCXJlcV9tb2RlID0gVVNCX0RSX01PREVfSE9TVDsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInBlcmlwaGVyYWwiLCAxMCkpIHsKLQkJcmVxX21vZGUgPSBVU0JfUEVSSVBIRVJBTDsKKwkJcmVxX21vZGUgPSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAibm9uZSIsIDQpKSB7Ci0JCXJlcV9tb2RlID0gVVNCX05PTkU7CisJCXJlcV9tb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsKIAl9IGVsc2UgewogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlzd2l0Y2ggKHJlcV9tb2RlKSB7Ci0JY2FzZSBVU0JfTk9ORToKKwljYXNlIFVTQl9EUl9NT0RFX1VOS05PV046CiAJCXN3aXRjaCAob3RnLT5waHktPnN0YXRlKSB7CiAJCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKIAkJY2FzZSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOgpAQCAtMTM0MCw3ICsxMzYxLDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWJyZWFrOwotCWNhc2UgVVNCX1BFUklQSEVSQUw6CisJY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOgogCQlzd2l0Y2ggKG90Zy0+cGh5LT5zdGF0ZSkgewogCQljYXNlIE9UR19TVEFURV9CX0lETEU6CiAJCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKQEAgLTEzNTEsNyArMTM3Miw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQlicmVhazsKLQljYXNlIFVTQl9IT1NUOgorCWNhc2UgVVNCX0RSX01PREVfSE9TVDoKIAkJc3dpdGNoIChvdGctPnBoeS0+c3RhdGUpIHsKIAkJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgogCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CkBAIC0xNDA2LDc0ICsxNDI3LDE1NCBAQAogCWRlYnVnZnNfcmVtb3ZlKG1zbV9vdGdfZGJnX3Jvb3QpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtc21fb3RnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtc21fb3RnX2R0X21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJxY29tLHVzYi1vdGctY2kiLAorCQkuZGF0YSA9ICh2b2lkICopIENJXzQ1Tk1fSU5URUdSQVRFRF9QSFkKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAicWNvbSx1c2Itb3RnLXNucHMiLAorCQkuZGF0YSA9ICh2b2lkICopIFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWQorCX0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXNtX290Z19kdF9tYXRjaCk7CisKK3N0YXRpYyBpbnQgbXNtX290Z19yZWFkX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtc21fb3RnICptb3RnKQogeworCXN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlpbnQgbGVuLCByZXQsIHdvcmRzOworCXUzMiB2YWwsIHRtcFszXTsKKworCXBkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1vdGctPnBkYXRhID0gcGRhdGE7CisKKwlpZCA9IG9mX21hdGNoX2RldmljZShtc21fb3RnX2R0X21hdGNoLCAmcGRldi0+ZGV2KTsKKwlwZGF0YS0+cGh5X3R5cGUgPSAoZW51bSBtc21fdXNiX3BoeV90eXBlKSBpZC0+ZGF0YTsKKworCW1vdGctPmxpbmtfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldCgmcGRldi0+ZGV2LCAibGluayIpOworCWlmIChJU19FUlIobW90Zy0+bGlua19yc3QpKQorCQlyZXR1cm4gUFRSX0VSUihtb3RnLT5saW5rX3JzdCk7CisKKwltb3RnLT5waHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldCgmcGRldi0+ZGV2LCAicGh5Iik7CisJaWYgKElTX0VSUihtb3RnLT5waHlfcnN0KSkKKwkJcmV0dXJuIFBUUl9FUlIobW90Zy0+cGh5X3JzdCk7CisKKwlwZGF0YS0+bW9kZSA9IG9mX3VzYl9nZXRfZHJfbW9kZShub2RlKTsKKwlpZiAocGRhdGEtPm1vZGUgPT0gVVNCX0RSX01PREVfVU5LTk9XTikKKwkJcGRhdGEtPm1vZGUgPSBVU0JfRFJfTU9ERV9PVEc7CisKKwlwZGF0YS0+b3RnX2NvbnRyb2wgPSBPVEdfUEhZX0NPTlRST0w7CisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxvdGctY29udHJvbCIsICZ2YWwpKQorCQlpZiAodmFsID09IE9UR19QTUlDX0NPTlRST0wpCisJCQlwZGF0YS0+b3RnX2NvbnRyb2wgPSB2YWw7CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLHBoeS1udW0iLCAmdmFsKSAmJiB2YWwgPCAyKQorCQltb3RnLT5waHlfbnVtYmVyID0gdmFsOworCisJbW90Zy0+dmRkX2xldmVsc1tWRERfTEVWRUxfTk9ORV0gPSBVU0JfUEhZX1NVU1BfRElHX1ZPTDsKKwltb3RnLT52ZGRfbGV2ZWxzW1ZERF9MRVZFTF9NSU5dID0gVVNCX1BIWV9WRERfRElHX1ZPTF9NSU47CisJbW90Zy0+dmRkX2xldmVsc1tWRERfTEVWRUxfTUFYXSA9IFVTQl9QSFlfVkREX0RJR19WT0xfTUFYOworCisJaWYgKG9mX2dldF9wcm9wZXJ0eShub2RlLCAicWNvbSx2ZGQtbGV2ZWxzIiwgJmxlbikgJiYKKwkgICAgbGVuID09IHNpemVvZih0bXApKSB7CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5vZGUsICJxY29tLHZkZC1sZXZlbHMiLAorCQkJCQkgICB0bXAsIGxlbiAvIHNpemVvZigqdG1wKSk7CisJCW1vdGctPnZkZF9sZXZlbHNbVkREX0xFVkVMX05PTkVdID0gdG1wW1ZERF9MRVZFTF9OT05FXTsKKwkJbW90Zy0+dmRkX2xldmVsc1tWRERfTEVWRUxfTUlOXSA9IHRtcFtWRERfTEVWRUxfTUlOXTsKKwkJbW90Zy0+dmRkX2xldmVsc1tWRERfTEVWRUxfTUFYXSA9IHRtcFtWRERfTEVWRUxfTUFYXTsKKwl9CisKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShub2RlLCAicWNvbSxwaHktaW5pdC1zZXF1ZW5jZSIsICZsZW4pOworCWlmICghcHJvcCB8fCAhbGVuKQorCQlyZXR1cm4gMDsKKworCXdvcmRzID0gbGVuIC8gc2l6ZW9mKHUzMik7CisKKwlpZiAod29yZHMgPj0gVUxQSV9FWFRfVkVORE9SX1NQRUNJRklDKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJUb28gYmlnIFBIWSBpbml0IHNlcXVlbmNlICVkXG4iLCB3b3Jkcyk7CisJCXJldHVybiAwOworCX0KKworCXBkYXRhLT5waHlfaW5pdF9zZXEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhLT5waHlfaW5pdF9zZXEpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIk5vIHNwYWNlIGZvciBQSFkgaW5pdCBzZXF1ZW5jZVxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5vZGUsICJxY29tLHBoeS1pbml0LXNlcXVlbmNlIiwKKwkJCQkJIHBkYXRhLT5waHlfaW5pdF9zZXEsIHdvcmRzKTsKKwlpZiAoIXJldCkKKwkJcGRhdGEtPnBoeV9pbml0X3N6ID0gd29yZHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc21fb3RnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgcmVnc1szXTsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IG1zbV9vdGcgKm1vdGc7CiAJc3RydWN0IHVzYl9waHkgKnBoeTsKKwl2b2lkIF9faW9tZW0gKnBoeV9zZWxlY3Q7CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibXNtX290ZyBwcm9iZVxuIik7Ci0JaWYgKCFkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgZ2l2ZW4uIEJhaWxpbmcgb3V0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbW90ZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc21fb3RnKSwgR0ZQX0tFUk5FTCk7CisJbW90ZyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG1zbV9vdGcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1vdGcpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIG1zbV9vdGdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltb3RnLT5waHkub3RnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9vdGcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vdGctPnBoeS5vdGcpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIG1zbV9vdGdcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbW90ZzsKKwlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJaWYgKCFwZGF0YSkgeworCQlpZiAoIW5wKQorCQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0ID0gbXNtX290Z19yZWFkX2R0KHBkZXYsIG1vdGcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKLQltb3RnLT5wZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJbW90Zy0+cGh5Lm90ZyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHVzYl9vdGcpLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb3RnLT5waHkub3RnKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBtc21fb3RnXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJcGh5ID0gJm1vdGctPnBoeTsKIAlwaHktPmRldiA9ICZwZGV2LT5kZXY7CiAKLQltb3RnLT5waHlfcmVzZXRfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiX3BoeV9jbGsiKTsKKwltb3RnLT5waHlfcmVzZXRfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsCisJCQkJCSAgIG5wID8gInBoeSIgOiAidXNiX3BoeV9jbGsiKTsKIAlpZiAoSVNfRVJSKG1vdGctPnBoeV9yZXNldF9jbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgdXNiX3BoeV9jbGtcbiIpOwotCQlyZXQgPSBQVFJfRVJSKG1vdGctPnBoeV9yZXNldF9jbGspOwotCQlnb3RvIGZyZWVfbW90ZzsKKwkJcmV0dXJuIFBUUl9FUlIobW90Zy0+cGh5X3Jlc2V0X2Nsayk7CiAJfQogCi0JbW90Zy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiX2hzX2NsayIpOworCW1vdGctPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBucCA/ICJjb3JlIiA6ICJ1c2JfaHNfY2xrIik7CiAJaWYgKElTX0VSUihtb3RnLT5jbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgdXNiX2hzX2Nsa1xuIik7Ci0JCXJldCA9IFBUUl9FUlIobW90Zy0+Y2xrKTsKLQkJZ290byBwdXRfcGh5X3Jlc2V0X2NsazsKKwkJcmV0dXJuIFBUUl9FUlIobW90Zy0+Y2xrKTsKIAl9Ci0JY2xrX3NldF9yYXRlKG1vdGctPmNsaywgNjAwMDAwMDApOwogCiAJLyoKIAkgKiBJZiBVU0IgQ29yZSBpcyBydW5uaW5nIGl0cyBwcm90b2NvbCBlbmdpbmUgYmFzZWQgb24gQ09SRSBDTEssCiAJICogQ09SRSBDTEsgIG11c3QgYmUgcnVubmluZyBhdCA+NTVNaHogZm9yIGNvcnJlY3QgSFNVU0IKIAkgKiBvcGVyYXRpb24gYW5kIFVTQiBjb3JlIGNhbm5vdCB0b2xlcmF0ZSBmcmVxdWVuY3kgY2hhbmdlcyBvbgotCSAqIENPUkUgQ0xLLiBGb3Igc3VjaCBVU0IgY29yZXMsIHZvdGUgZm9yIG1heGltdW0gY2xrIGZyZXF1ZW5jeQotCSAqIG9uIHBjbGsgc291cmNlCisJICogQ09SRSBDTEsuCiAJICovCi0JIGlmIChtb3RnLT5wZGF0YS0+cGNsa19zcmNfbmFtZSkgewotCQltb3RnLT5wY2xrX3NyYyA9IGNsa19nZXQoJnBkZXYtPmRldiwKLQkJCW1vdGctPnBkYXRhLT5wY2xrX3NyY19uYW1lKTsKLQkJaWYgKElTX0VSUihtb3RnLT5wY2xrX3NyYykpCi0JCQlnb3RvIHB1dF9jbGs7Ci0JCWNsa19zZXRfcmF0ZShtb3RnLT5wY2xrX3NyYywgSU5UX01BWCk7Ci0JCWNsa19wcmVwYXJlX2VuYWJsZShtb3RnLT5wY2xrX3NyYyk7Ci0JfSBlbHNlCi0JCW1vdGctPnBjbGtfc3JjID0gRVJSX1BUUigtRU5PRU5UKTsKLQotCi0JbW90Zy0+cGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYl9oc19wY2xrIik7CisJbW90Zy0+cGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBucCA/ICJpZmFjZSIgOiAidXNiX2hzX3BjbGsiKTsKIAlpZiAoSVNfRVJSKG1vdGctPnBjbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgdXNiX2hzX3BjbGtcbiIpOwotCQlyZXQgPSBQVFJfRVJSKG1vdGctPnBjbGspOwotCQlnb3RvIHB1dF9wY2xrX3NyYzsKKwkJcmV0dXJuIFBUUl9FUlIobW90Zy0+cGNsayk7CiAJfQogCiAJLyoKQEAgLTE0ODEsNjkgKzE1ODIsOTAgQEAKIAkgKiBjbG9jayBpcyBpbnRyb2R1Y2VkIHRvIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBBWEkKIAkgKiBidXMgZnJlcXVlbmN5LgogCSAqLwotCW1vdGctPmNvcmVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiX2hzX2NvcmVfY2xrIik7Ci0JaWYgKElTX0VSUihtb3RnLT5jb3JlX2NsaykpCi0JCW1vdGctPmNvcmVfY2xrID0gTlVMTDsKKwltb3RnLT5jb3JlX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LAorCQkJCSAgICAgIG5wID8gImFsdF9jb3JlIiA6ICJ1c2JfaHNfY29yZV9jbGsiKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBwbGF0Zm9ybSByZXNvdXJjZSBtZW1cbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIHB1dF9jb3JlX2NsazsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbW90Zy0+cmVncyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbW90Zy0+cmVncykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIE5PVEU6IFRoZSBQSFlzIGNhbiBiZSBtdWx0aXBsZXhlZCBiZXR3ZWVuIHRoZSBjaGlwaWRlYSBjb250cm9sbGVyCisJICogYW5kIHRoZSBkd2MzIGNvbnRyb2xsZXIsIHVzaW5nIGEgc2luZ2xlIGJpdC4gSXQgaXMgaW1wb3J0YW50IHRoYXQKKwkgKiB0aGUgZHdjMyBkcml2ZXIgZG9lcyBub3Qgc2V0IHRoaXMgYml0IGluIGFuIGluY29tcGF0aWJsZSB3YXkuCisJICovCisJaWYgKG1vdGctPnBoeV9udW1iZXIpIHsKKwkJcGh5X3NlbGVjdCA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIFVTQjJfUEhZX1NFTCwgNCk7CisJCWlmIChJU19FUlIocGh5X3NlbGVjdCkpCisJCQlyZXR1cm4gUFRSX0VSUihwaHlfc2VsZWN0KTsKKwkJLyogRW5hYmxlIHNlY29uZCBQSFkgd2l0aCB0aGUgT1RHIHBvcnQgKi8KKwkJd3JpdGVsKDB4MSwgcGh5X3NlbGVjdCk7CiAJfQogCi0JbW90Zy0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQlpZiAoIW1vdGctPnJlZ3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIHB1dF9jb3JlX2NsazsKLQl9CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIk9URyByZWdzID0gJXBcbiIsIG1vdGctPnJlZ3MpOwogCiAJbW90Zy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIW1vdGctPmlycSkgeworCWlmIChtb3RnLT5pcnEgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3JlZ3M7CisJCXJldHVybiBtb3RnLT5pcnE7CiAJfQogCisJcmVnc1swXS5zdXBwbHkgPSAidmRkY3giOworCXJlZ3NbMV0uc3VwcGx5ID0gInYzcDMiOworCXJlZ3NbMl0uc3VwcGx5ID0gInYxcDgiOworCisJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQobW90Zy0+cGh5LmRldiwgQVJSQVlfU0laRShyZWdzKSwgcmVncyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1vdGctPnZkZGN4ID0gcmVnc1swXS5jb25zdW1lcjsKKwltb3RnLT52M3AzICA9IHJlZ3NbMV0uY29uc3VtZXI7CisJbW90Zy0+djFwOCAgPSByZWdzWzJdLmNvbnN1bWVyOworCisJY2xrX3NldF9yYXRlKG1vdGctPmNsaywgNjAwMDAwMDApOworCiAJY2xrX3ByZXBhcmVfZW5hYmxlKG1vdGctPmNsayk7CiAJY2xrX3ByZXBhcmVfZW5hYmxlKG1vdGctPnBjbGspOwogCisJaWYgKCFJU19FUlIobW90Zy0+Y29yZV9jbGspKQorCQljbGtfcHJlcGFyZV9lbmFibGUobW90Zy0+Y29yZV9jbGspOworCiAJcmV0ID0gbXNtX2hzdXNiX2luaXRfdmRkY3gobW90ZywgMSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJoc3VzYiB2ZGRjeCBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9yZWdzOworCQlnb3RvIGRpc2FibGVfY2xrczsKIAl9CiAKIAlyZXQgPSBtc21faHN1c2JfbGRvX2luaXQobW90ZywgMSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJoc3VzYiB2cmVnIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byB2ZGRjeF9leGl0OworCQlnb3RvIGRpc2FibGVfdmRkY3g7CiAJfQotCXJldCA9IG1zbV9oc3VzYl9sZG9fc2V0X21vZGUoMSk7CisJcmV0ID0gbXNtX2hzdXNiX2xkb19zZXRfbW9kZShtb3RnLCAxKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImhzdXNiIHZyZWcgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gbGRvX2V4aXQ7CisJCWdvdG8gZGlzYWJsZV9sZG87CiAJfQogCi0JaWYgKG1vdGctPmNvcmVfY2xrKQotCQljbGtfcHJlcGFyZV9lbmFibGUobW90Zy0+Y29yZV9jbGspOwotCiAJd3JpdGVsKDAsIFVTQl9VU0JJTlRSKTsKIAl3cml0ZWwoMCwgVVNCX09UR1NDKTsKIAogCUlOSVRfV09SSygmbW90Zy0+c21fd29yaywgbXNtX290Z19zbV93b3JrKTsKIAlJTklUX0RFTEFZRURfV09SSygmbW90Zy0+Y2hnX3dvcmssIG1zbV9jaGdfZGV0ZWN0X3dvcmspOwotCXJldCA9IHJlcXVlc3RfaXJxKG1vdGctPmlycSwgbXNtX290Z19pcnEsIElSUUZfU0hBUkVELAorCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgbW90Zy0+aXJxLCBtc21fb3RnX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkJCSJtc21fb3RnIiwgbW90Zyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0IGlycSBmYWlsZWRcbiIpOwotCQlnb3RvIGRpc2FibGVfY2xrczsKKwkJZ290byBkaXNhYmxlX2xkbzsKIAl9CiAKLQlwaHktPmluaXQgPSBtc21fb3RnX3Jlc2V0OworCXBoeS0+aW5pdCA9IG1zbV9waHlfaW5pdDsKIAlwaHktPnNldF9wb3dlciA9IG1zbV9vdGdfc2V0X3Bvd2VyOworCXBoeS0+bm90aWZ5X2Rpc2Nvbm5lY3QgPSBtc21fcGh5X25vdGlmeV9kaXNjb25uZWN0OworCXBoeS0+dHlwZSA9IFVTQl9QSFlfVFlQRV9VU0IyOwogCiAJcGh5LT5pb19vcHMgPSAmbXNtX290Z19pb19vcHM7CiAKQEAgLTE1NTEsNTQgKzE2NzMsMzggQEAKIAlwaHktPm90Zy0+c2V0X2hvc3QgPSBtc21fb3RnX3NldF9ob3N0OwogCXBoeS0+b3RnLT5zZXRfcGVyaXBoZXJhbCA9IG1zbV9vdGdfc2V0X3BlcmlwaGVyYWw7CiAKLQlyZXQgPSB1c2JfYWRkX3BoeSgmbW90Zy0+cGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7CisJbXNtX3VzYl9yZXNldChwaHkpOworCisJcmV0ID0gdXNiX2FkZF9waHlfZGV2KCZtb3RnLT5waHkpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidXNiX2FkZF9waHkgZmFpbGVkXG4iKTsKLQkJZ290byBmcmVlX2lycTsKKwkJZ290byBkaXNhYmxlX2xkbzsKIAl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtb3RnKTsKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAKLQlpZiAobW90Zy0+cGRhdGEtPm1vZGUgPT0gVVNCX09URyAmJgotCQkJbW90Zy0+cGRhdGEtPm90Z19jb250cm9sID09IE9UR19VU0VSX0NPTlRST0wpIHsKKwlpZiAobW90Zy0+cGRhdGEtPm1vZGUgPT0gVVNCX0RSX01PREVfT1RHICYmCisJCW1vdGctPnBkYXRhLT5vdGdfY29udHJvbCA9PSBPVEdfVVNFUl9DT05UUk9MKSB7CiAJCXJldCA9IG1zbV9vdGdfZGVidWdmc19pbml0KG1vdGcpOwogCQlpZiAocmV0KQotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAibW9kZSBkZWJ1Z2ZzIGZpbGUgaXMiCi0JCQkJCSJub3QgYXZhaWxhYmxlXG4iKTsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkNhbiBub3QgY3JlYXRlIG1vZGUgY2hhbmdlIGZpbGVcbiIpOwogCX0KIAogCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAogCXJldHVybiAwOwotZnJlZV9pcnE6Ci0JZnJlZV9pcnEobW90Zy0+aXJxLCBtb3RnKTsKKworZGlzYWJsZV9sZG86CisJbXNtX2hzdXNiX2xkb19pbml0KG1vdGcsIDApOworZGlzYWJsZV92ZGRjeDoKKwltc21faHN1c2JfaW5pdF92ZGRjeChtb3RnLCAwKTsKIGRpc2FibGVfY2xrczoKIAljbGtfZGlzYWJsZV91bnByZXBhcmUobW90Zy0+cGNsayk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1vdGctPmNsayk7Ci1sZG9fZXhpdDoKLQltc21faHN1c2JfbGRvX2luaXQobW90ZywgMCk7Ci12ZGRjeF9leGl0OgotCW1zbV9oc3VzYl9pbml0X3ZkZGN4KG1vdGcsIDApOwotZnJlZV9yZWdzOgotCWlvdW5tYXAobW90Zy0+cmVncyk7Ci1wdXRfY29yZV9jbGs6Ci0JaWYgKG1vdGctPmNvcmVfY2xrKQotCQljbGtfcHV0KG1vdGctPmNvcmVfY2xrKTsKLQljbGtfcHV0KG1vdGctPnBjbGspOwotcHV0X3BjbGtfc3JjOgotCWlmICghSVNfRVJSKG1vdGctPnBjbGtfc3JjKSkgewotCQljbGtfZGlzYWJsZV91bnByZXBhcmUobW90Zy0+cGNsa19zcmMpOwotCQljbGtfcHV0KG1vdGctPnBjbGtfc3JjKTsKLQl9Ci1wdXRfY2xrOgotCWNsa19wdXQobW90Zy0+Y2xrKTsKLXB1dF9waHlfcmVzZXRfY2xrOgotCWNsa19wdXQobW90Zy0+cGh5X3Jlc2V0X2Nsayk7Ci1mcmVlX21vdGc6Ci0Ja2ZyZWUobW90Zy0+cGh5Lm90Zyk7Ci0Ja2ZyZWUobW90Zyk7CisJaWYgKCFJU19FUlIobW90Zy0+Y29yZV9jbGspKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUobW90Zy0+Y29yZV9jbGspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE2MjEsNyArMTcyNyw3IEBACiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCiAJdXNiX3JlbW92ZV9waHkocGh5KTsKLQlmcmVlX2lycShtb3RnLT5pcnEsIG1vdGcpOworCWRpc2FibGVfaXJxKG1vdGctPmlycSk7CiAKIAkvKgogCSAqIFB1dCBQSFkgaW4gbG93IHBvd2VyIG1vZGUuCkBAIC0xNjQxLDI2ICsxNzQ3LDEyIEBACiAKIAljbGtfZGlzYWJsZV91bnByZXBhcmUobW90Zy0+cGNsayk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1vdGctPmNsayk7Ci0JaWYgKG1vdGctPmNvcmVfY2xrKQorCWlmICghSVNfRVJSKG1vdGctPmNvcmVfY2xrKSkKIAkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1vdGctPmNvcmVfY2xrKTsKLQlpZiAoIUlTX0VSUihtb3RnLT5wY2xrX3NyYykpIHsKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1vdGctPnBjbGtfc3JjKTsKLQkJY2xrX3B1dChtb3RnLT5wY2xrX3NyYyk7Ci0JfQogCW1zbV9oc3VzYl9sZG9faW5pdChtb3RnLCAwKTsKIAotCWlvdW5tYXAobW90Zy0+cmVncyk7CiAJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCZwZGV2LT5kZXYpOwogCi0JY2xrX3B1dChtb3RnLT5waHlfcmVzZXRfY2xrKTsKLQljbGtfcHV0KG1vdGctPnBjbGspOwotCWNsa19wdXQobW90Zy0+Y2xrKTsKLQlpZiAobW90Zy0+Y29yZV9jbGspCi0JCWNsa19wdXQobW90Zy0+Y29yZV9jbGspOwotCi0Ja2ZyZWUobW90Zy0+cGh5Lm90Zyk7Ci0Ja2ZyZWUobW90Zyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc0MCwxNSArMTgzMiwxNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXNtX290Z19kcml2ZXIgPSB7CisJLnByb2JlID0gbXNtX290Z19wcm9iZSwKIAkucmVtb3ZlID0gbXNtX290Z19yZW1vdmUsCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBEUklWRVJfTkFNRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5wbSA9ICZtc21fb3RnX2Rldl9wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9IG1zbV9vdGdfZHRfbWF0Y2gsCiAJfSwKIH07CiAKLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJfcHJvYmUobXNtX290Z19kcml2ZXIsIG1zbV9vdGdfcHJvYmUpOworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtc21fb3RnX2RyaXZlcik7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVNNIFVTQiB0cmFuc2NlaXZlciBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHktbXYtdTNkLXVzYi5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS1tdi11M2QtdXNiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMTc5MDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS1tdi11M2QtdXNiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL212X3VzYi5oPgotCi0jaW5jbHVkZSAicGh5LW12LXUzZC11c2IuaCIKLQotLyoKLSAqIHN0cnVjdCBtdl91M2RfcGh5IC0gdHJhbnNjZWl2ZXIgZHJpdmVyIHN0YXRlCi0gKiBAcGh5OiB0cmFuc2NlaXZlciBzdHJ1Y3R1cmUKLSAqIEBkZXY6IFRoZSBwYXJlbnQgZGV2aWNlIHN1cHBsaWVkIHRvIHRoZSBwcm9iZSBmdW5jdGlvbgotICogQGNsazogdXNiIHBoeSBjbG9jawotICogQGJhc2U6IHVzYiBwaHkgcmVnaXN0ZXIgbWVtb3J5IGJhc2UKLSAqLwotc3RydWN0IG12X3UzZF9waHkgewotCXN0cnVjdCB1c2JfcGh5CXBoeTsKLQlzdHJ1Y3QgbXZfdXNiX3BsYXRmb3JtX2RhdGEgKnBsYXQ7Ci0Jc3RydWN0IGRldmljZQkqZGV2OwotCXN0cnVjdCBjbGsJKmNsazsKLQl2b2lkIF9faW9tZW0JKmJhc2U7Ci19OwotCi1zdGF0aWMgdTMyIG12X3UzZF9waHlfcmVhZCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyLCAqZGF0YTsKLQotCWFkZHIgPSBiYXNlOwotCWRhdGEgPSBiYXNlICsgMHg0OwotCi0Jd3JpdGVsX3JlbGF4ZWQocmVnLCBhZGRyKTsKLQlyZXR1cm4gcmVhZGxfcmVsYXhlZChkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgbXZfdTNkX3BoeV9zZXQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyLCAqZGF0YTsKLQl1MzIgdG1wOwotCi0JYWRkciA9IGJhc2U7Ci0JZGF0YSA9IGJhc2UgKyAweDQ7Ci0KLQl3cml0ZWxfcmVsYXhlZChyZWcsIGFkZHIpOwotCXRtcCA9IHJlYWRsX3JlbGF4ZWQoZGF0YSk7Ci0JdG1wIHw9IHZhbHVlOwotCXdyaXRlbF9yZWxheGVkKHRtcCwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG12X3UzZF9waHlfY2xlYXIodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyLCAqZGF0YTsKLQl1MzIgdG1wOwotCi0JYWRkciA9IGJhc2U7Ci0JZGF0YSA9IGJhc2UgKyAweDQ7Ci0KLQl3cml0ZWxfcmVsYXhlZChyZWcsIGFkZHIpOwotCXRtcCA9IHJlYWRsX3JlbGF4ZWQoZGF0YSk7Ci0JdG1wICY9IH52YWx1ZTsKLQl3cml0ZWxfcmVsYXhlZCh0bXAsIGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBtdl91M2RfcGh5X3dyaXRlKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCXZvaWQgX19pb21lbSAqYWRkciwgKmRhdGE7Ci0KLQlhZGRyID0gYmFzZTsKLQlkYXRhID0gYmFzZSArIDB4NDsKLQotCXdyaXRlbF9yZWxheGVkKHJlZywgYWRkcik7Ci0Jd3JpdGVsX3JlbGF4ZWQodmFsdWUsIGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBtdl91M2RfcGh5X3NodXRkb3duKHN0cnVjdCB1c2JfcGh5ICpwaHkpCi17Ci0Jc3RydWN0IG12X3UzZF9waHkgKm12X3UzZF9waHk7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCXUzMiB2YWw7Ci0KLQltdl91M2RfcGh5ID0gY29udGFpbmVyX29mKHBoeSwgc3RydWN0IG12X3UzZF9waHksIHBoeSk7Ci0JYmFzZSA9IG12X3UzZF9waHktPmJhc2U7Ci0KLQkvKiBQb3dlciBkb3duIFJlZmVyZW5jZSBBbmFsb2cgY3VycmVudCwgYml0IDE1Ci0JICogUG93ZXIgZG93biBQTEwsIGJpdCAxNAotCSAqIFBvd2VyIGRvd24gUmVjZWl2ZXIsIGJpdCAxMwotCSAqIFBvd2VyIGRvd24gVHJhbnNtaXR0ZXIsIGJpdCAxMgotCSAqIG9mIFVTQjNfUE9XRVJfUExMX0NPTlRST0wgcmVnaXN0ZXIKLQkgKi8KLQl2YWwgPSBtdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19QT1dFUl9QTExfQ09OVFJPTCk7Ci0JdmFsICY9IH4oVVNCM19QT1dFUl9QTExfQ09OVFJPTF9QVSk7Ci0JbXZfdTNkX3BoeV93cml0ZShiYXNlLCBVU0IzX1BPV0VSX1BMTF9DT05UUk9MLCB2YWwpOwotCi0JaWYgKG12X3UzZF9waHktPmNsaykKLQkJY2xrX2Rpc2FibGUobXZfdTNkX3BoeS0+Y2xrKTsKLX0KLQotc3RhdGljIGludCBtdl91M2RfcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnBoeSkKLXsKLQlzdHJ1Y3QgbXZfdTNkX3BoeSAqbXZfdTNkX3BoeTsKLQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdTMyIHZhbCwgY291bnQ7Ci0KLQkvKiBlbmFibGUgdXNiMyBwaHkgKi8KLQltdl91M2RfcGh5ID0gY29udGFpbmVyX29mKHBoeSwgc3RydWN0IG12X3UzZF9waHksIHBoeSk7Ci0KLQlpZiAobXZfdTNkX3BoeS0+Y2xrKQotCQljbGtfZW5hYmxlKG12X3UzZF9waHktPmNsayk7Ci0KLQliYXNlID0gbXZfdTNkX3BoeS0+YmFzZTsKLQotCXZhbCA9IG12X3UzZF9waHlfcmVhZChiYXNlLCBVU0IzX1BPV0VSX1BMTF9DT05UUk9MKTsKLQl2YWwgJj0gfihVU0IzX1BPV0VSX1BMTF9DT05UUk9MX1BVX01BU0spOwotCXZhbCB8PSAweEYgPDwgVVNCM19QT1dFUl9QTExfQ09OVFJPTF9QVV9TSElGVDsKLQltdl91M2RfcGh5X3dyaXRlKGJhc2UsIFVTQjNfUE9XRVJfUExMX0NPTlRST0wsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQltdl91M2RfcGh5X3dyaXRlKGJhc2UsIFVTQjNfUkVTRVRfQ09OVFJPTCwKLQkJCVVTQjNfUkVTRVRfQ09OVFJPTF9SRVNFVF9QSVBFKTsKLQl1ZGVsYXkoMTAwKTsKLQotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19SRVNFVF9DT05UUk9MLAotCQkJVVNCM19SRVNFVF9DT05UUk9MX1JFU0VUX1BJUEUKLQkJCXwgVVNCM19SRVNFVF9DT05UUk9MX1JFU0VUX1BIWSk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQl2YWwgPSBtdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19QT1dFUl9QTExfQ09OVFJPTCk7Ci0JdmFsICY9IH4oVVNCM19QT1dFUl9QTExfQ09OVFJPTF9SRUZfRlJFRl9TRUxfTUFTSwotCQl8IFVTQjNfUE9XRVJfUExMX0NPTlRST0xfUEhZX01PREVfTUFTSyk7Ci0JdmFsIHw9ICAoVVNCM19QTExfMjVNSFogPDwgVVNCM19QT1dFUl9QTExfQ09OVFJPTF9SRUZfRlJFRl9TRUxfU0hJRlQpCi0JCXwgKDB4NSA8PCBVU0IzX1BPV0VSX1BMTF9DT05UUk9MX1BIWV9NT0RFX1NISUZUKTsKLQltdl91M2RfcGh5X3dyaXRlKGJhc2UsIFVTQjNfUE9XRVJfUExMX0NPTlRST0wsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQltdl91M2RfcGh5X2NsZWFyKGJhc2UsIFVTQjNfS1ZDT19DQUxJX0NPTlRST0wsCi0JCVVTQjNfS1ZDT19DQUxJX0NPTlRST0xfVVNFX01BWF9QTExfUkFURV9NQVNLKTsKLQl1ZGVsYXkoMTAwKTsKLQotCXZhbCA9IG12X3UzZF9waHlfcmVhZChiYXNlLCBVU0IzX1NRVUVMQ0hfRkZFKTsKLQl2YWwgJj0gfihVU0IzX1NRVUVMQ0hfRkZFX0ZGRV9DQVBfU0VMX01BU0sKLQkJfCBVU0IzX1NRVUVMQ0hfRkZFX0ZGRV9SRVNfU0VMX01BU0sKLQkJfCBVU0IzX1NRVUVMQ0hfRkZFX1NRX1RIUkVTSF9JTl9NQVNLKTsKLQl2YWwgfD0gKCgweEQgPDwgVVNCM19TUVVFTENIX0ZGRV9GRkVfQ0FQX1NFTF9TSElGVCkKLQkJfCAoMHg3IDw8IFVTQjNfU1FVRUxDSF9GRkVfRkZFX1JFU19TRUxfU0hJRlQpCi0JCXwgKDB4OCA8PCBVU0IzX1NRVUVMQ0hfRkZFX1NRX1RIUkVTSF9JTl9TSElGVCkpOwotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19TUVVFTENIX0ZGRSwgdmFsKTsKLQl1ZGVsYXkoMTAwKTsKLQotCXZhbCA9IG12X3UzZF9waHlfcmVhZChiYXNlLCBVU0IzX0dFTjFfU0VUMCk7Ci0JdmFsICY9IH5VU0IzX0dFTjFfU0VUMF9HMV9UWF9TTEVXX0NUUkxfRU5fTUFTSzsKLQl2YWwgfD0gMSA8PCBVU0IzX0dFTjFfU0VUMF9HMV9UWF9FTVBIX0VOX1NISUZUOwotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19HRU4xX1NFVDAsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQl2YWwgPSBtdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19HRU4yX1NFVDApOwotCXZhbCAmPSB+KFVTQjNfR0VOMl9TRVQwX0cyX1RYX0FNUF9NQVNLCi0JCXwgVVNCM19HRU4yX1NFVDBfRzJfVFhfRU1QSF9BTVBfTUFTSwotCQl8IFVTQjNfR0VOMl9TRVQwX0cyX1RYX1NMRVdfQ1RSTF9FTl9NQVNLKTsKLQl2YWwgfD0gKCgweDE0IDw8IFVTQjNfR0VOMl9TRVQwX0cyX1RYX0FNUF9TSElGVCkKLQkJfCAoMSA8PCBVU0IzX0dFTjJfU0VUMF9HMl9UWF9BTVBfQURKX1NISUZUKQotCQl8ICgweEEgPDwgVVNCM19HRU4yX1NFVDBfRzJfVFhfRU1QSF9BTVBfU0hJRlQpCi0JCXwgKDEgPDwgVVNCM19HRU4yX1NFVDBfRzJfVFhfRU1QSF9FTl9TSElGVCkpOwotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19HRU4yX1NFVDAsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQltdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19UWF9FTVBQSCk7Ci0JdmFsICY9IH4oVVNCM19UWF9FTVBQSF9BTVBfTUFTSwotCQl8IFVTQjNfVFhfRU1QUEhfRU5fTUFTSwotCQl8IFVTQjNfVFhfRU1QUEhfQU1QX0ZPUkNFX01BU0sKLQkJfCBVU0IzX1RYX0VNUFBIX1BBUjFfTUFTSwotCQl8IFVTQjNfVFhfRU1QUEhfUEFSMl9NQVNLKTsKLQl2YWwgfD0gKCgweEIgPDwgVVNCM19UWF9FTVBQSF9BTVBfU0hJRlQpCi0JCXwgKDEgPDwgVVNCM19UWF9FTVBQSF9FTl9TSElGVCkKLQkJfCAoMSA8PCBVU0IzX1RYX0VNUFBIX0FNUF9GT1JDRV9TSElGVCkKLQkJfCAoMHgxQyA8PCBVU0IzX1RYX0VNUFBIX1BBUjFfU0hJRlQpCi0JCXwgKDEgPDwgVVNCM19UWF9FTVBQSF9QQVIyX1NISUZUKSk7Ci0KLQltdl91M2RfcGh5X3dyaXRlKGJhc2UsIFVTQjNfVFhfRU1QUEgsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQl2YWwgPSBtdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19HRU4yX1NFVDEpOwotCXZhbCAmPSB+KFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VUElfTUFTSwotCQl8IFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VUEZfTUFTSwotCQl8IFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VRklfTUFTSwotCQl8IFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VRkZfTUFTSyk7Ci0JdmFsIHw9ICgoMSA8PCBVU0IzX0dFTjJfU0VUMV9HMl9SWF9TRUxNVVBJX1NISUZUKQotCQl8ICgxIDw8IFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VUEZfU0hJRlQpCi0JCXwgKDEgPDwgVVNCM19HRU4yX1NFVDFfRzJfUlhfU0VMTVVGSV9TSElGVCkKLQkJfCAoMSA8PCBVU0IzX0dFTjJfU0VUMV9HMl9SWF9TRUxNVUZGX1NISUZUKSk7Ci0JbXZfdTNkX3BoeV93cml0ZShiYXNlLCBVU0IzX0dFTjJfU0VUMSwgdmFsKTsKLQl1ZGVsYXkoMTAwKTsKLQotCXZhbCA9IG12X3UzZF9waHlfcmVhZChiYXNlLCBVU0IzX0RJR0lUQUxfTE9PUEJBQ0tfRU4pOwotCXZhbCAmPSB+VVNCM19ESUdJVEFMX0xPT1BCQUNLX0VOX1NFTF9CSVRTX01BU0s7Ci0JdmFsIHw9IDEgPDwgVVNCM19ESUdJVEFMX0xPT1BCQUNLX0VOX1NFTF9CSVRTX1NISUZUOwotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19ESUdJVEFMX0xPT1BCQUNLX0VOLCB2YWwpOwotCXVkZWxheSgxMDApOwotCi0JdmFsID0gbXZfdTNkX3BoeV9yZWFkKGJhc2UsIFVTQjNfSU1QRURBTkNFX1RYX1NTQyk7Ci0JdmFsICY9IH5VU0IzX0lNUEVEQU5DRV9UWF9TU0NfU1NDX0FNUF9NQVNLOwotCXZhbCB8PSAweEMgPDwgVVNCM19JTVBFREFOQ0VfVFhfU1NDX1NTQ19BTVBfU0hJRlQ7Ci0JbXZfdTNkX3BoeV93cml0ZShiYXNlLCBVU0IzX0lNUEVEQU5DRV9UWF9TU0MsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQl2YWwgPSBtdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19JTVBFREFOQ0VfQ0FMSV9DVFJMKTsKLQl2YWwgJj0gflVTQjNfSU1QRURBTkNFX0NBTElfQ1RSTF9JTVBfQ0FMX1RIUl9NQVNLOwotCXZhbCB8PSAweDQgPDwgVVNCM19JTVBFREFOQ0VfQ0FMSV9DVFJMX0lNUF9DQUxfVEhSX1NISUZUOwotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19JTVBFREFOQ0VfQ0FMSV9DVFJMLCB2YWwpOwotCXVkZWxheSgxMDApOwotCi0JdmFsID0gbXZfdTNkX3BoeV9yZWFkKGJhc2UsIFVTQjNfUEhZX0lTT0xBVElPTl9NT0RFKTsKLQl2YWwgJj0gfihVU0IzX1BIWV9JU09MQVRJT05fTU9ERV9QSFlfR0VOX1JYX01BU0sKLQkJfCBVU0IzX1BIWV9JU09MQVRJT05fTU9ERV9QSFlfR0VOX1RYX01BU0sKLQkJfCBVU0IzX1BIWV9JU09MQVRJT05fTU9ERV9UWF9EUlZfSURMRV9NQVNLKTsKLQl2YWwgfD0gKCgxIDw8IFVTQjNfUEhZX0lTT0xBVElPTl9NT0RFX1BIWV9HRU5fUlhfU0hJRlQpCi0JCXwgKDEgPDwgVVNCM19QSFlfSVNPTEFUSU9OX01PREVfUEhZX0dFTl9UWF9TSElGVCkpOwotCW12X3UzZF9waHlfd3JpdGUoYmFzZSwgVVNCM19QSFlfSVNPTEFUSU9OX01PREUsIHZhbCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQl2YWwgPSBtdl91M2RfcGh5X3JlYWQoYmFzZSwgVVNCM19UWERFVFJYKTsKLQl2YWwgJj0gfihVU0IzX1RYREVUUlhfVlRIU0VMX01BU0spOwotCXZhbCB8PSAweDEgPDwgVVNCM19UWERFVFJYX1ZUSFNFTF9TSElGVDsKLQltdl91M2RfcGh5X3dyaXRlKGJhc2UsIFVTQjNfVFhERVRSWCwgdmFsKTsKLQl1ZGVsYXkoMTAwKTsKLQotCWRldl9kYmcobXZfdTNkX3BoeS0+ZGV2LCAic3RhcnQgY2FsaWJyYXRpb25cbiIpOwotCi1jYWxzdGFydDoKLQkvKiBQZXJmb3JtIE1hbnVhbCBDYWxpYnJhdGlvbiAqLwotCW12X3UzZF9waHlfc2V0KGJhc2UsIFVTQjNfS1ZDT19DQUxJX0NPTlRST0wsCi0JCTEgPDwgVVNCM19LVkNPX0NBTElfQ09OVFJPTF9DQUxfU1RBUlRfU0hJRlQpOwotCi0JbWRlbGF5KDEpOwotCi0JY291bnQgPSAwOwotCXdoaWxlICgxKSB7Ci0JCXZhbCA9IG12X3UzZF9waHlfcmVhZChiYXNlLCBVU0IzX0tWQ09fQ0FMSV9DT05UUk9MKTsKLQkJaWYgKHZhbCAmICgxIDw8IFVTQjNfS1ZDT19DQUxJX0NPTlRST0xfQ0FMX0RPTkVfU0hJRlQpKQotCQkJYnJlYWs7Ci0JCWVsc2UgaWYgKGNvdW50ID4gNTApIHsKLQkJCWRldl9kYmcobXZfdTNkX3BoeS0+ZGV2LCAiY2FsaWJyYXRpb24gZmFpbHVyZSwgcmV0cnkuLi5cbiIpOwotCQkJZ290byBjYWxzdGFydDsKLQkJfQotCQljb3VudCsrOwotCQltZGVsYXkoMSk7Ci0JfQotCi0JLyogYWN0aXZlIFBJUEUgaW50ZXJmYWNlICovCi0JbXZfdTNkX3BoeV93cml0ZShiYXNlLCBVU0IzX1BJUEVfU01fQ1RSTCwKLQkJMSA8PCBVU0IzX1BJUEVfU01fQ1RSTF9QSFlfSU5JVF9ET05FKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG12X3UzZF9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgbXZfdTNkX3BoeSAqbXZfdTNkX3BoeTsKLQlzdHJ1Y3QgbXZfdXNiX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jdm9pZCBfX2lvbWVtCSpwaHlfYmFzZTsKLQlpbnQJcmV0OwotCi0JcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwotCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IG5vIHBsYXRmb3JtIGRhdGEgZGVmaW5lZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXBoeV9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKLQlpZiAoSVNfRVJSKHBoeV9iYXNlKSkKLQkJcmV0dXJuIFBUUl9FUlIocGh5X2Jhc2UpOwotCi0JbXZfdTNkX3BoeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXZfdTNkX3BoeSksIEdGUF9LRVJORUwpOwotCWlmICghbXZfdTNkX3BoeSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltdl91M2RfcGh5LT5kZXYJCQk9ICZwZGV2LT5kZXY7Ci0JbXZfdTNkX3BoeS0+cGxhdAkJPSBwZGF0YTsKLQltdl91M2RfcGh5LT5iYXNlCQk9IHBoeV9iYXNlOwotCW12X3UzZF9waHktPnBoeS5kZXYJCT0gbXZfdTNkX3BoeS0+ZGV2OwotCW12X3UzZF9waHktPnBoeS5sYWJlbAkJPSAibXYtdTNkLXBoeSI7Ci0JbXZfdTNkX3BoeS0+cGh5LmluaXQJCT0gbXZfdTNkX3BoeV9pbml0OwotCW12X3UzZF9waHktPnBoeS5zaHV0ZG93bgk9IG12X3UzZF9waHlfc2h1dGRvd247Ci0KLQlyZXQgPSB1c2JfYWRkX3BoeSgmbXZfdTNkX3BoeS0+cGh5LCBVU0JfUEhZX1RZUEVfVVNCMyk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIW12X3UzZF9waHktPmNsaykKLQkJbXZfdTNkX3BoeS0+Y2xrID0gY2xrX2dldChtdl91M2RfcGh5LT5kZXYsICJ1M2RwaHkiKTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG12X3UzZF9waHkpOwotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIkluaXRpYWxpemVkIE1hcnZlbGwgVVNCIDMuMCBQSFlcbiIpOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXZfdTNkX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgbXZfdTNkX3BoeSAqbXZfdTNkX3BoeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JdXNiX3JlbW92ZV9waHkoJm12X3UzZF9waHktPnBoeSk7Ci0KLQlpZiAobXZfdTNkX3BoeS0+Y2xrKSB7Ci0JCWNsa19wdXQobXZfdTNkX3BoeS0+Y2xrKTsKLQkJbXZfdTNkX3BoeS0+Y2xrID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZfdTNkX3BoeV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IG12X3UzZF9waHlfcHJvYmUsCi0JLnJlbW92ZQkJPSBtdl91M2RfcGh5X3JlbW92ZSwKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAibXYtdTNkLXBoeSIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG12X3UzZF9waHlfZHJpdmVyKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCBVU0IgMy4wIFBIWSBjb250cm9sbGVyIik7Ci1NT0RVTEVfQVVUSE9SKCJZdSBYdSA8eXV4dUBtYXJ2ZWxsLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06bXYtdTNkLXBoeSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS1tdi11M2QtdXNiLmggYi9kcml2ZXJzL3VzYi9waHkvcGh5LW12LXUzZC11c2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2NThjYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LW12LXUzZC11c2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19NVl9VM0RfUEhZX0gKLSNkZWZpbmUgX19NVl9VM0RfUEhZX0gKLQotI2RlZmluZSBVU0IzX1BPV0VSX1BMTF9DT05UUk9MCQkweDEKLSNkZWZpbmUgVVNCM19LVkNPX0NBTElfQ09OVFJPTAkJMHgyCi0jZGVmaW5lIFVTQjNfSU1QRURBTkNFX0NBTElfQ1RSTAkweDMKLSNkZWZpbmUgVVNCM19JTVBFREFOQ0VfVFhfU1NDCQkweDQKLSNkZWZpbmUgVVNCM19TUVVFTENIX0ZGRQkJMHg2Ci0jZGVmaW5lIFVTQjNfR0VOMV9TRVQwCQkJMHhECi0jZGVmaW5lIFVTQjNfR0VOMl9TRVQwCQkJMHhGCi0jZGVmaW5lIFVTQjNfR0VOMl9TRVQxCQkJMHgxMAotI2RlZmluZSBVU0IzX0RJR0lUQUxfTE9PUEJBQ0tfRU4JMHgyMwotI2RlZmluZSBVU0IzX1BIWV9JU09MQVRJT05fTU9ERQkJMHgyNgotI2RlZmluZSBVU0IzX1RYREVUUlgJCQkweDQ4Ci0jZGVmaW5lIFVTQjNfVFhfRU1QUEgJCQkweDVFCi0jZGVmaW5lIFVTQjNfUkVTRVRfQ09OVFJPTAkJMHg5MAotI2RlZmluZSBVU0IzX1BJUEVfU01fQ1RSTAkJMHg5MQotCi0jZGVmaW5lIFVTQjNfUkVTRVRfQ09OVFJPTF9SRVNFVF9QSVBFCQkJMHgxCi0jZGVmaW5lIFVTQjNfUkVTRVRfQ09OVFJPTF9SRVNFVF9QSFkJCQkweDIKLQotI2RlZmluZSBVU0IzX1BPV0VSX1BMTF9DT05UUk9MX1JFRl9GUkVGX1NFTF9NQVNLCSgweDFGIDw8IDApCi0jZGVmaW5lIFVTQjNfUE9XRVJfUExMX0NPTlRST0xfUkVGX0ZSRUZfU0VMX1NISUZUCTAKLSNkZWZpbmUgVVNCM19QTExfMjVNSFoJCQkJCTB4MgotI2RlZmluZSBVU0IzX1BMTF8yNk1IWgkJCQkJMHg1Ci0jZGVmaW5lIFVTQjNfUE9XRVJfUExMX0NPTlRST0xfUEhZX01PREVfTUFTSwkJKDB4NyA8PCA1KQotI2RlZmluZSBVU0IzX1BPV0VSX1BMTF9DT05UUk9MX1BIWV9NT0RFX1NISUZUCQk1Ci0jZGVmaW5lIFVTQjNfUE9XRVJfUExMX0NPTlRST0xfUFVfTUFTSwkJCSgweEYgPDwgMTIpCi0jZGVmaW5lIFVTQjNfUE9XRVJfUExMX0NPTlRST0xfUFVfU0hJRlQJCQkxMgotI2RlZmluZSBVU0IzX1BPV0VSX1BMTF9DT05UUk9MX1BVCQkJKDB4RiA8PCAxMikKLQotI2RlZmluZSBVU0IzX0tWQ09fQ0FMSV9DT05UUk9MX1VTRV9NQVhfUExMX1JBVEVfTUFTSwkoMHgxIDw8IDEyKQotI2RlZmluZSBVU0IzX0tWQ09fQ0FMSV9DT05UUk9MX1VTRV9NQVhfUExMX1JBVEVfU0hJRlQJMTIKLSNkZWZpbmUgVVNCM19LVkNPX0NBTElfQ09OVFJPTF9DQUxfRE9ORV9TSElGVAkJMTQKLSNkZWZpbmUgVVNCM19LVkNPX0NBTElfQ09OVFJPTF9DQUxfU1RBUlRfU0hJRlQJCTE1Ci0KLSNkZWZpbmUgVVNCM19TUVVFTENIX0ZGRV9GRkVfQ0FQX1NFTF9NQVNLCQkweEYKLSNkZWZpbmUgVVNCM19TUVVFTENIX0ZGRV9GRkVfQ0FQX1NFTF9TSElGVAkJMAotI2RlZmluZSBVU0IzX1NRVUVMQ0hfRkZFX0ZGRV9SRVNfU0VMX01BU0sJCSgweDcgPDwgNCkKLSNkZWZpbmUgVVNCM19TUVVFTENIX0ZGRV9GRkVfUkVTX1NFTF9TSElGVAkJNAotI2RlZmluZSBVU0IzX1NRVUVMQ0hfRkZFX1NRX1RIUkVTSF9JTl9NQVNLCQkoMHgxRiA8PCA4KQotI2RlZmluZSBVU0IzX1NRVUVMQ0hfRkZFX1NRX1RIUkVTSF9JTl9TSElGVAkJOAotCi0jZGVmaW5lIFVTQjNfR0VOMV9TRVQwX0cxX1RYX1NMRVdfQ1RSTF9FTl9NQVNLCQkoMHgxIDw8IDE1KQotI2RlZmluZSBVU0IzX0dFTjFfU0VUMF9HMV9UWF9FTVBIX0VOX1NISUZUCQkxMQotCi0jZGVmaW5lIFVTQjNfR0VOMl9TRVQwX0cyX1RYX0FNUF9NQVNLCQkJKDB4MUYgPDwgMSkKLSNkZWZpbmUgVVNCM19HRU4yX1NFVDBfRzJfVFhfQU1QX1NISUZUCQkJMQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMF9HMl9UWF9BTVBfQURKX1NISUZUCQk2Ci0jZGVmaW5lIFVTQjNfR0VOMl9TRVQwX0cyX1RYX0VNUEhfQU1QX01BU0sJCSgweEYgPDwgNykKLSNkZWZpbmUgVVNCM19HRU4yX1NFVDBfRzJfVFhfRU1QSF9BTVBfU0hJRlQJCTcKLSNkZWZpbmUgVVNCM19HRU4yX1NFVDBfRzJfVFhfRU1QSF9FTl9NQVNLCQkoMHgxIDw8IDExKQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMF9HMl9UWF9FTVBIX0VOX1NISUZUCQkxMQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMF9HMl9UWF9TTEVXX0NUUkxfRU5fTUFTSwkJKDB4MSA8PCAxNSkKLSNkZWZpbmUgVVNCM19HRU4yX1NFVDBfRzJfVFhfU0xFV19DVFJMX0VOX1NISUZUCQkxNQotCi0jZGVmaW5lIFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VUElfTUFTSwkJKDB4NyA8PCAwKQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMV9HMl9SWF9TRUxNVVBJX1NISUZUCQkwCi0jZGVmaW5lIFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VUEZfTUFTSwkJKDB4NyA8PCAzKQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMV9HMl9SWF9TRUxNVVBGX1NISUZUCQkzCi0jZGVmaW5lIFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VRklfTUFTSwkJKDB4MyA8PCA2KQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMV9HMl9SWF9TRUxNVUZJX1NISUZUCQk2Ci0jZGVmaW5lIFVTQjNfR0VOMl9TRVQxX0cyX1JYX1NFTE1VRkZfTUFTSwkJKDB4MyA8PCA4KQotI2RlZmluZSBVU0IzX0dFTjJfU0VUMV9HMl9SWF9TRUxNVUZGX1NISUZUCQk4Ci0KLSNkZWZpbmUgVVNCM19ESUdJVEFMX0xPT1BCQUNLX0VOX1NFTF9CSVRTX01BU0sJCSgweDMgPDwgMTApCi0jZGVmaW5lIFVTQjNfRElHSVRBTF9MT09QQkFDS19FTl9TRUxfQklUU19TSElGVAkJMTAKLQotI2RlZmluZSBVU0IzX0lNUEVEQU5DRV9DQUxJX0NUUkxfSU1QX0NBTF9USFJfTUFTSwkoMHg3IDw8IDEyKQotI2RlZmluZSBVU0IzX0lNUEVEQU5DRV9DQUxJX0NUUkxfSU1QX0NBTF9USFJfU0hJRlQJMTIKLQotI2RlZmluZSBVU0IzX0lNUEVEQU5DRV9UWF9TU0NfU1NDX0FNUF9NQVNLCQkoMHgzRiA8PCAwKQotI2RlZmluZSBVU0IzX0lNUEVEQU5DRV9UWF9TU0NfU1NDX0FNUF9TSElGVAkJMAotCi0jZGVmaW5lIFVTQjNfUEhZX0lTT0xBVElPTl9NT0RFX1BIWV9HRU5fUlhfTUFTSwkJMHhGCi0jZGVmaW5lIFVTQjNfUEhZX0lTT0xBVElPTl9NT0RFX1BIWV9HRU5fUlhfU0hJRlQJMAotI2RlZmluZSBVU0IzX1BIWV9JU09MQVRJT05fTU9ERV9QSFlfR0VOX1RYX01BU0sJCSgweEYgPDwgNCkKLSNkZWZpbmUgVVNCM19QSFlfSVNPTEFUSU9OX01PREVfUEhZX0dFTl9UWF9TSElGVAk0Ci0jZGVmaW5lIFVTQjNfUEhZX0lTT0xBVElPTl9NT0RFX1RYX0RSVl9JRExFX01BU0sJKDB4MSA8PCA4KQotCi0jZGVmaW5lIFVTQjNfVFhERVRSWF9WVEhTRUxfTUFTSwkJCSgweDMgPDwgNCkKLSNkZWZpbmUgVVNCM19UWERFVFJYX1ZUSFNFTF9TSElGVAkJCTQKLQotI2RlZmluZSBVU0IzX1RYX0VNUFBIX0FNUF9NQVNLCQkJCSgweEYgPDwgMCkKLSNkZWZpbmUgVVNCM19UWF9FTVBQSF9BTVBfU0hJRlQJCQkJMAotI2RlZmluZSBVU0IzX1RYX0VNUFBIX0VOX01BU0sJCQkJKDB4MSA8PCA2KQotI2RlZmluZSBVU0IzX1RYX0VNUFBIX0VOX1NISUZUCQkJCTYKLSNkZWZpbmUgVVNCM19UWF9FTVBQSF9BTVBfRk9SQ0VfTUFTSwkJCSgweDEgPDwgNykKLSNkZWZpbmUgVVNCM19UWF9FTVBQSF9BTVBfRk9SQ0VfU0hJRlQJCQk3Ci0jZGVmaW5lIFVTQjNfVFhfRU1QUEhfUEFSMV9NQVNLCQkJCSgweDFGIDw8IDgpCi0jZGVmaW5lIFVTQjNfVFhfRU1QUEhfUEFSMV9TSElGVAkJCTgKLSNkZWZpbmUgVVNCM19UWF9FTVBQSF9QQVIyX01BU0sJCQkJKDB4MSA8PCAxMykKLSNkZWZpbmUgVVNCM19UWF9FTVBQSF9QQVIyX1NISUZUCQkJMTMKLQotI2RlZmluZSBVU0IzX1BJUEVfU01fQ1RSTF9QSFlfSU5JVF9ET05FCQkJMTUKLQotI2VuZGlmIC8qIF9fTVZfVTNEX1BIWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LXVscGkuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHktdWxwaS5jCmluZGV4IDE3ZWEzZjIuLjRlMzg3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHktdWxwaS5jCisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHktdWxwaS5jCkBAIC00OCw2ICs0OCw3IEBACiAJVUxQSV9JTkZPKFVMUElfSUQoMHgwNGNjLCAweDE1MDQpLCAiTlhQIElTUDE1MDQiKSwKIAlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMXgiKSwKIAlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNyksICJTTVNDIFVTQjMzMjAiKSwKKwlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwOSksICJTTVNDIFVTQjMzNHgiKSwKIAlVTFBJX0lORk8oVUxQSV9JRCgweDA0NTEsIDB4MTUwNyksICJUSSBUVVNCMTIxMCIpLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jCmluZGV4IDM1YTIzNzMuLjkzNzRiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMKQEAgLTk3LDEzICs5NywxOSBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IHJldHZhbCA9IDA7CiAJaW50IG1pbm9yOworCWludCBhdXRvcG1fZXJyOwogCiAJcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBtYWtlIHN1cmUgc3VzcGVuZC9yZXN1bWUgZG9lc24ndCByYWNlIGFnYWluc3QgcG9ydF9yZW1vdmUgKi8KLQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpOworCS8qCisJICogTWFrZSBzdXJlIHN1c3BlbmQvcmVzdW1lIGRvZXNuJ3QgcmFjZSBhZ2FpbnN0IHBvcnRfcmVtb3ZlLgorCSAqCisJICogTm90ZSB0aGF0IG5vIGZ1cnRoZXIgcnVudGltZSBQTSBjYWxsYmFja3Mgd2lsbCBiZSBtYWRlIGlmCisJICogYXV0b3BtX2dldCBmYWlscy4KKwkgKi8KKwlhdXRvcG1fZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKTsKIAogCW1pbm9yID0gcG9ydC0+bWlub3I7CiAJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgbWlub3IpOwpAQCAtMTE3LDcgKzEyMyw5IEBACiAJZGV2X2luZm8oZGV2LCAiJXMgY29udmVydGVyIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0dHlVU0IlZFxuIiwKIAkJIGRyaXZlci0+ZGVzY3JpcHRpb24sIG1pbm9yKTsKIAotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSk7CisJaWYgKCFhdXRvcG1fZXJyKQorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKaW5kZXggZDNhY2FlYS4uOTNjYjdjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCkBAIC0xNTM1LDE0ICsxNTM1LDE0IEBACiAKIAl0aGlzX3VyYiA9IHBfcHJpdi0+b3V0Y29udF91cmI7CiAKLQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIGVuZHBvaW50ICVkXG4iLCBfX2Z1bmNfXywgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSkpOwotCiAJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVyYiB0aGVuIHNlbmQgdGhlIG1lc3NhZ2UgKi8KIAlpZiAodGhpc191cmIgPT0gTlVMTCkgewogCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG9vcHMgbm8gdXJiLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSBlbmRwb2ludCAlZFxuIiwgX19mdW5jX18sIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpKTsKKwogCS8qIFNhdmUgcmVzZXQgcG9ydCB2YWwgZm9yIHJlc2VuZC4KIAkgICBEb24ndCBvdmVyd3JpdGUgcmVzZW5kIGZvciBvcGVuL2Nsb3NlIGNvbmRpdGlvbi4gKi8KIAlpZiAoKHJlc2V0X3BvcnQgKyAxKSA+IHBfcHJpdi0+cmVzZW5kX2NvbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggZmVlMjQyMy4uMDc4ZjllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtMjE1LDEzICsyMTUsMTMgQEAKIAkJCXByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEKSB7CiAJCS8qIFNldHRpbmcgQmF1ZHJhdGUsIFBhcml0eSBhbmQgU3RvcGJpdHMgKi8KIAkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICBTVVNCQ1JlcXVlc3RfU2V0QmF1ZFJhdGVQYXJpdHlBbmRTdG9wQml0cywKIAkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCiAJCQkgIFNVU0JDUl9TQlJfOTYwMCB8IFNVU0JDUl9TUEFTQl9FdmVuUGFyaXR5IHwKIAkJCQkJCQlTVVNCQ1JfU1BBU0JfMVN0b3BCaXQsCiAJCQkgIDAsCi0JCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgTlVMTCwKIAkJCSAgMCwKIAkJCSAgS09CSUxfVElNRU9VVAogCQkpOwpAQCAtMjI5LDEyICsyMjksMTIgQEAKIAogCQkvKiByZXNldCBhbGwgcXVldWVzICovCiAJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgU1VTQkNSZXF1ZXN0X01pc2MsCiAJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAogCQkJICBTVVNCQ1JfTVNDX1Jlc2V0QWxsUXVldWVzLAogCQkJICAwLAotCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkgIE5VTEwsCiAJCQkgIDAsCiAJCQkgIEtPQklMX1RJTUVPVVQKIAkJKTsKQEAgLTQ0NSwxMiArNDQ1LDEyIEBACiAJCWVsc2UKIAkJCWRldl9kYmcoZGV2LCAiJXMgLSBDbGVhcmluZyBEVFJcbiIsIF9fZnVuY19fKTsKIAkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICBTVVNCQ1JlcXVlc3RfU2V0U3RhdHVzTGluZXNPclF1ZXVlcywKIAkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCiAJCQkgICgoZHRyICE9IDApID8gU1VTQkNSX1NTTF9TRVREVFIgOiBTVVNCQ1JfU1NMX0NMUkRUUiksCiAJCQkgIDAsCi0JCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgTlVMTCwKIAkJCSAgMCwKIAkJCSAgS09CSUxfVElNRU9VVCk7CiAJfSBlbHNlIHsKQEAgLTQ1OSwxMiArNDU5LDEyIEBACiAJCWVsc2UKIAkJCWRldl9kYmcoZGV2LCAiJXMgLSBDbGVhcmluZyBSVFNcbiIsIF9fZnVuY19fKTsKIAkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCXVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQlTVVNCQ1JlcXVlc3RfU2V0U3RhdHVzTGluZXNPclF1ZXVlcywKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAogCQkJKChydHMgIT0gMCkgPyBTVVNCQ1JfU1NMX1NFVFJUUyA6IFNVU0JDUl9TU0xfQ0xSUlRTKSwKIAkJCTAsCi0JCQl0cmFuc2Zlcl9idWZmZXIsCisJCQlOVUxMLAogCQkJMCwKIAkJCUtPQklMX1RJTUVPVVQpOwogCX0KQEAgLTUxNCw3ICs1MTQsNyBAQAogCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIAogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKLQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCSAgU1VTQkNSZXF1ZXN0X1NldEJhdWRSYXRlUGFyaXR5QW5kU3RvcEJpdHMsCiAJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCiAJCSAgdXJiX3ZhbCwKQEAgLTU0NiwxMiArNTQ2LDEyIEBACiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAKIAkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICBTVVNCQ1JlcXVlc3RfTWlzYywKIAkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCiAJCQkgIFNVU0JDUl9NU0NfUmVzZXRBbGxRdWV1ZXMsCiAJCQkgIDAsCi0JCQkgIE5VTEwsIC8qIHRyYW5zZmVyX2J1ZmZlciwgKi8KKwkJCSAgTlVMTCwKIAkJCSAgMCwKIAkJCSAgS09CSUxfVElNRU9VVAogCQkJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBmMjEzZWU5Li41MWUzMDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0xNzI5LDcgKzE3MjksNiBAQAogCS53cml0ZSAgICAgICAgICAgICA9IHVzYl93d2FuX3dyaXRlLAogCS53cml0ZV9yb29tICAgICAgICA9IHVzYl93d2FuX3dyaXRlX3Jvb20sCiAJLmNoYXJzX2luX2J1ZmZlciAgID0gdXNiX3d3YW5fY2hhcnNfaW5fYnVmZmVyLAotCS5zZXRfdGVybWlvcyAgICAgICA9IHVzYl93d2FuX3NldF90ZXJtaW9zLAogCS50aW9jbWdldCAgICAgICAgICA9IHVzYl93d2FuX3Rpb2NtZ2V0LAogCS50aW9jbXNldCAgICAgICAgICA9IHVzYl93d2FuX3Rpb2Ntc2V0LAogCS5pb2N0bCAgICAgICAgICAgICA9IHVzYl93d2FuX2lvY3RsLApAQCAtMTkwNCw2ICsxOTAzLDcgQEAKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KIAlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04gJiYgc3RhdHVzICE9IC1FTk9FTlQpIHsKKwkJdXNiX21hcmtfbGFzdF9idXN5KHBvcnQtPnNlcmlhbC0+ZGV2KTsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKIAkJCWRldl9kYmcoZGV2LCAiJXM6IHJlc3VibWl0IGludHIgdXJiIGZhaWxlZC4gKCVkKVxuIiwKQEAgLTE5MjMsNiArMTkyMyw3IEBACiAJc3RydWN0IG9wdGlvbl9wcml2YXRlICpwcml2ID0gaW50ZmRhdGEtPnByaXZhdGU7CiAJc3RydWN0IHVzYl93d2FuX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJaW50IHZhbCA9IDA7CisJaW50IHJlczsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCkBAIC0xOTMxLDkgKzE5MzIsMTcgQEAKIAlpZiAocG9ydGRhdGEtPnJ0c19zdGF0ZSkKIAkJdmFsIHw9IDB4MDI7CiAKLQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCXJlcyA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkweDIyLCAweDIxLCB2YWwsIHByaXYtPmJJbnRlcmZhY2VOdW1iZXIsIE5VTEwsCiAJCQkJMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKworCXJldHVybiByZXM7CiB9CiAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCmluZGV4IDZjMGE1NDIuLmIyYWEwMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCkBAIC0yMiw4ICsyMiwxNyBAQAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJRdWFsY29tbSBJbmMiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJRdWFsY29tbSBVU0IgU2VyaWFsIGRyaXZlciIKIAorLyogc3RhbmRhcmQgZGV2aWNlIGxheW91dHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCitlbnVtIHFjc2VyaWFsX2xheW91dHMgeworCVFDU0VSSUFMX0cySyA9IDAsCS8qIEdvYmkgMjAwMCAqLworCVFDU0VSSUFMX0cxSyA9IDEsCS8qIEdvYmkgMTAwMCAqLworCVFDU0VSSUFMX1NXSSA9IDIsCS8qIFNpZXJyYSBXaXJlbGVzcyAqLworfTsKKwogI2RlZmluZSBERVZJQ0VfRzFLKHYsIHApIFwKLQlVU0JfREVWSUNFKHYsIHApLCAuZHJpdmVyX2luZm8gPSAxCisJVVNCX0RFVklDRSh2LCBwKSwgLmRyaXZlcl9pbmZvID0gUUNTRVJJQUxfRzFLCisjZGVmaW5lIERFVklDRV9TV0kodiwgcCkgXAorCVVTQl9ERVZJQ0UodiwgcCksIC5kcml2ZXJfaW5mbyA9IFFDU0VSSUFMX1NXSQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAkvKiBHb2JpIDEwMDAgZGV2aWNlcyAqLwpAQCAtMTI2LDQ2ICsxMzUsMjcgQEAKIAl7VVNCX0RFVklDRSgweDEyRDEsIDB4MTRGMSl9LAkvKiBTb255IEdvYmkgMzAwMCBDb21wb3NpdGUgKi8KIAl7VVNCX0RFVklDRSgweDBBRjAsIDB4ODEyMCl9LAkvKiBPcHRpb24gR1RNNjgxVyAqLwogCi0JLyogbm9uIEdvYmkgUXVhbGNvbW0gc2VyaWFsIGRldmljZXMgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MGYzZCwgMHg2OGEyLCAwKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzc3MDAgRGV2aWNlIE1hbmFnZW1lbnQgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MGYzZCwgMHg2OGEyLCAyKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzc3MDAgTk1FQSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgwZjNkLCAweDY4YTIsIDMpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzcwMCBNb2RlbSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgxMTRmLCAweDY4YTIsIDApfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzc1MCBEZXZpY2UgTWFuYWdlbWVudCAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgxMTRmLCAweDY4YTIsIDIpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzc1MCBOTUVBICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExNGYsIDB4NjhhMiwgMyl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3NzUwIE1vZGVtICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4NjhhMiwgMCl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3NzEwIERldmljZSBNYW5hZ2VtZW50ICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4NjhhMiwgMil9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3NzEwIE5NRUEgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg2OGEyLCAzKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzc3MTAgTW9kZW0gKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg2OGMwLCAwKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzczeHggRGV2aWNlIE1hbmFnZW1lbnQgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg2OGMwLCAyKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzczeHggTk1FQSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgxMTk5LCAweDY4YzAsIDMpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzN4eCBNb2RlbSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgxMTk5LCAweDkwMWMsIDApfSwJLyogU2llcnJhIFdpcmVsZXNzIEVNNzcwMCBEZXZpY2UgTWFuYWdlbWVudCAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgxMTk5LCAweDkwMWMsIDIpfSwJLyogU2llcnJhIFdpcmVsZXNzIEVNNzcwMCBOTUVBICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4OTAxYywgMyl9LAkvKiBTaWVycmEgV2lyZWxlc3MgRU03NzAwIE1vZGVtICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4OTAxZiwgMCl9LAkvKiBTaWVycmEgV2lyZWxlc3MgRU03MzU1IERldmljZSBNYW5hZ2VtZW50ICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4OTAxZiwgMil9LAkvKiBTaWVycmEgV2lyZWxlc3MgRU03MzU1IE5NRUEgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg5MDFmLCAzKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBFTTczNTUgTW9kZW0gKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg5MDQxLCAwKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzczMDUvTUM3MzU1IERldmljZSBNYW5hZ2VtZW50ICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4OTA0MSwgMil9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3MzA1L01DNzM1NSBOTUVBICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDExOTksIDB4OTA0MSwgMyl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3MzA1L01DNzM1NSBNb2RlbSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgxMTk5LCAweDkwNTEsIDApfSwJLyogTmV0Z2VhciBBaXJDYXJkIDM0MFUgRGV2aWNlIE1hbmFnZW1lbnQgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg5MDUxLCAyKX0sCS8qIE5ldGdlYXIgQWlyQ2FyZCAzNDBVIE5NRUEgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MTE5OSwgMHg5MDUxLCAzKX0sCS8qIE5ldGdlYXIgQWlyQ2FyZCAzNDBVIE1vZGVtICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDQxM2MsIDB4ODFhMiwgMCl9LAkvKiBEZWxsIFdpcmVsZXNzIDU4MDYgR29iaShUTSkgNEcgTFRFIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCBEZXZpY2UgTWFuYWdlbWVudCAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTIsIDIpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA2IEdvYmkoVE0pIDRHIExURSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgTk1FQSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTIsIDMpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA2IEdvYmkoVE0pIDRHIExURSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgTW9kZW0gKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4NDEzYywgMHg4MWEzLCAwKX0sCS8qIERlbGwgV2lyZWxlc3MgNTU3MCBIU1BBKyAoNDJNYnBzKSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgRGV2aWNlIE1hbmFnZW1lbnQgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4NDEzYywgMHg4MWEzLCAyKX0sCS8qIERlbGwgV2lyZWxlc3MgNTU3MCBIU1BBKyAoNDJNYnBzKSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgTk1FQSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTMsIDMpfSwJLyogRGVsbCBXaXJlbGVzcyA1NTcwIEhTUEErICg0Mk1icHMpIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCBNb2RlbSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTQsIDApfSwJLyogRGVsbCBXaXJlbGVzcyA1NTcwZSBIU1BBKyAoNDJNYnBzKSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgRGV2aWNlIE1hbmFnZW1lbnQgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4NDEzYywgMHg4MWE0LCAyKX0sCS8qIERlbGwgV2lyZWxlc3MgNTU3MGUgSFNQQSsgKDQyTWJwcykgTW9iaWxlIEJyb2FkYmFuZCBDYXJkIE5NRUEgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4NDEzYywgMHg4MWE0LCAzKX0sCS8qIERlbGwgV2lyZWxlc3MgNTU3MGUgSFNQQSsgKDQyTWJwcykgTW9iaWxlIEJyb2FkYmFuZCBDYXJkIE1vZGVtICovCi0Je1VTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDQxM2MsIDB4ODFhOCwgMCl9LAkvKiBEZWxsIFdpcmVsZXNzIDU4MDggR29iaShUTSkgNEcgTFRFIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCBEZXZpY2UgTWFuYWdlbWVudCAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTgsIDIpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA4IEdvYmkoVE0pIDRHIExURSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgTk1FQSAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTgsIDMpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA4IEdvYmkoVE0pIDRHIExURSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgTW9kZW0gKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4NDEzYywgMHg4MWE5LCAwKX0sCS8qIERlbGwgV2lyZWxlc3MgNTgwOGUgR29iaShUTSkgNEcgTFRFIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCBEZXZpY2UgTWFuYWdlbWVudCAqLwotCXtVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHg0MTNjLCAweDgxYTksIDIpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA4ZSBHb2JpKFRNKSA0RyBMVEUgTW9iaWxlIEJyb2FkYmFuZCBDYXJkIE5NRUEgKi8KLQl7VVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4NDEzYywgMHg4MWE5LCAzKX0sCS8qIERlbGwgV2lyZWxlc3MgNTgwOGUgR29iaShUTSkgNEcgTFRFIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCBNb2RlbSAqLworCS8qIG5vbi1Hb2JpIFNpZXJyYSBXaXJlbGVzcyBkZXZpY2VzICovCisJe0RFVklDRV9TV0koMHgwZjNkLCAweDY4YTIpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzcwMCAqLworCXtERVZJQ0VfU1dJKDB4MTE0ZiwgMHg2OGEyKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzc3NTAgKi8KKwl7REVWSUNFX1NXSSgweDExOTksIDB4NjhhMil9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3NzEwICovCisJe0RFVklDRV9TV0koMHgxMTk5LCAweDY4YzApfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzN4eCAqLworCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg5MDFjKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBFTTc3MDAgKi8KKwl7REVWSUNFX1NXSSgweDExOTksIDB4OTAxZil9LAkvKiBTaWVycmEgV2lyZWxlc3MgRU03MzU1ICovCisJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwNDApfSwJLyogU2llcnJhIFdpcmVsZXNzIE1vZGVtICovCisJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwNDEpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzMwNS9NQzczNTUgKi8KKwl7REVWSUNFX1NXSSgweDExOTksIDB4OTA1MSl9LAkvKiBOZXRnZWFyIEFpckNhcmQgMzQwVSAqLworCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg5MDUzKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNb2RlbSAqLworCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg5MDU0KX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNb2RlbSAqLworCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg5MDU1KX0sCS8qIE5ldGdlYXIgQWlyQ2FyZCAzNDFVICovCisJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwNTYpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1vZGVtICovCisJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwNjApfSwJLyogU2llcnJhIFdpcmVsZXNzIE1vZGVtICovCisJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwNjEpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1vZGVtICovCisJe0RFVklDRV9TV0koMHg0MTNjLCAweDgxYTIpfSwJLyogRGVsbCBXaXJlbGVzcyA1ODA2IEdvYmkoVE0pIDRHIExURSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgKi8KKwl7REVWSUNFX1NXSSgweDQxM2MsIDB4ODFhMyl9LAkvKiBEZWxsIFdpcmVsZXNzIDU1NzAgSFNQQSsgKDQyTWJwcykgTW9iaWxlIEJyb2FkYmFuZCBDYXJkICovCisJe0RFVklDRV9TV0koMHg0MTNjLCAweDgxYTQpfSwJLyogRGVsbCBXaXJlbGVzcyA1NTcwZSBIU1BBKyAoNDJNYnBzKSBNb2JpbGUgQnJvYWRiYW5kIENhcmQgKi8KKwl7REVWSUNFX1NXSSgweDQxM2MsIDB4ODFhOCl9LAkvKiBEZWxsIFdpcmVsZXNzIDU4MDggR29iaShUTSkgNEcgTFRFIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCAqLworCXtERVZJQ0VfU1dJKDB4NDEzYywgMHg4MWE5KX0sCS8qIERlbGwgV2lyZWxlc3MgNTgwOGUgR29iaShUTSkgNEcgTFRFIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZCAqLwogCiAJeyB9CQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMTc4LDExICsxNjgsOCBAQAogCWludCByZXR2YWwgPSAtRU5PREVWOwogCV9fdTggbmludGY7CiAJX191OCBpZm51bTsKLQlib29sIGlzX2dvYmkxayA9IGlkLT5kcml2ZXJfaW5mbyA/IHRydWUgOiBmYWxzZTsKIAlpbnQgYWx0c2V0dGluZyA9IC0xOwogCi0JZGV2X2RiZyhkZXYsICJJcyBHb2JpIDEwMDAgPSAlZFxuIiwgaXNfZ29iaTFrKTsKLQogCW5pbnRmID0gc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKIAlkZXZfZGJnKGRldiwgIk51bSBJbnRlcmZhY2VzID0gJWRcbiIsIG5pbnRmKTsKIAlpZm51bSA9IGludGYtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKQEAgLTIxMCwzMiArMTk3LDI5IEBACiAKIAl9CiAKLQkvKiBhbGxvdyBhbnkgbnVtYmVyIG9mIGludGVyZmFjZXMgd2hlbiBkb2luZyBkaXJlY3QgaW50ZXJmYWNlIG1hdGNoICovCi0JaWYgKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX05VTUJFUikgewotCQlkZXZfZGJnKGRldiwgIkdlbmVyaWMgUXVhbGNvbW0gc2VyaWFsIGludGVyZmFjZSBmb3VuZFxuIik7Ci0JCWFsdHNldHRpbmcgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKG5pbnRmIDwgMyB8fCBuaW50ZiA+IDQpIHsKLQkJZGV2X2VycihkZXYsICJ1bmtub3duIG51bWJlciBvZiBpbnRlcmZhY2VzOiAlZFxuIiwgbmludGYpOwotCQlnb3RvIGRvbmU7Ci0JfQotCiAJLyogZGVmYXVsdCB0byBlbmFibGluZyBpbnRlcmZhY2UgKi8KIAlhbHRzZXR0aW5nID0gMDsKIAotCS8qIENvbXBvc2l0ZSBtb2RlOyBkb24ndCBiaW5kIHRvIHRoZSBRTUkvbmV0IGludGVyZmFjZSBhcyB0aGF0CisJLyoKKwkgKiBDb21wb3NpdGUgbW9kZTsgZG9uJ3QgYmluZCB0byB0aGUgUU1JL25ldCBpbnRlcmZhY2UgYXMgdGhhdAogCSAqIGdldHMgaGFuZGxlZCBieSBvdGhlciBkcml2ZXJzLgogCSAqLwogCi0JaWYgKGlzX2dvYmkxaykgewotCQkvKiBHb2JpIDFLIFVTQiBsYXlvdXQ6CisJc3dpdGNoIChpZC0+ZHJpdmVyX2luZm8pIHsKKwljYXNlIFFDU0VSSUFMX0cxSzoKKwkJLyoKKwkJICogR29iaSAxSyBVU0IgbGF5b3V0OgogCQkgKiAwOiBETS9ESUFHICh1c2UgbGlicWNkbSBmcm9tIE1vZGVtTWFuYWdlciBmb3IgY29tbXVuaWNhdGlvbikKIAkJICogMTogc2VyaWFsIHBvcnQgKGRvZXNuJ3QgcmVzcG9uZCkKIAkJICogMjogQVQtY2FwYWJsZSBtb2RlbSBwb3J0CiAJCSAqIDM6IFFNSS9uZXQKIAkJICovCisJCWlmIChuaW50ZiA8IDMgfHwgbmludGYgPiA0KSB7CisJCQlkZXZfZXJyKGRldiwgInVua25vd24gbnVtYmVyIG9mIGludGVyZmFjZXM6ICVkXG4iLCBuaW50Zik7CisJCQlhbHRzZXR0aW5nID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwogCQlpZiAoaWZudW0gPT0gMCkgewogCQkJZGV2X2RiZyhkZXYsICJHb2JpIDFLIERNL0RJQUcgaW50ZXJmYWNlIGZvdW5kXG4iKTsKIAkJCWFsdHNldHRpbmcgPSAxOwpAQCAtMjQzLDEzICsyMjcsMjEgQEAKIAkJCWRldl9kYmcoZGV2LCAiTW9kZW0gcG9ydCBmb3VuZFxuIik7CiAJCWVsc2UKIAkJCWFsdHNldHRpbmcgPSAtMTsKLQl9IGVsc2UgewotCQkvKiBHb2JpIDJLKyBVU0IgbGF5b3V0OgorCQlicmVhazsKKwljYXNlIFFDU0VSSUFMX0cySzoKKwkJLyoKKwkJICogR29iaSAySysgVVNCIGxheW91dDoKIAkJICogMDogUU1JL25ldAogCQkgKiAxOiBETS9ESUFHICh1c2UgbGlicWNkbSBmcm9tIE1vZGVtTWFuYWdlciBmb3IgY29tbXVuaWNhdGlvbikKIAkJICogMjogQVQtY2FwYWJsZSBtb2RlbSBwb3J0CiAJCSAqIDM6IE5NRUEKIAkJICovCisJCWlmIChuaW50ZiA8IDMgfHwgbmludGYgPiA0KSB7CisJCQlkZXZfZXJyKGRldiwgInVua25vd24gbnVtYmVyIG9mIGludGVyZmFjZXM6ICVkXG4iLCBuaW50Zik7CisJCQlhbHRzZXR0aW5nID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwogCQlzd2l0Y2ggKGlmbnVtKSB7CiAJCWNhc2UgMDoKIAkJCS8qIERvbid0IGNsYWltIHRoZSBRTUkvbmV0IGludGVyZmFjZSAqLwpAQCAtMjcwLDYgKzI2MiwzNSBAQAogCQkJZGV2X2RiZyhkZXYsICJHb2JpIDJLKyBOTUVBIEdQUyBpbnRlcmZhY2UgZm91bmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KKwkJYnJlYWs7CisJY2FzZSBRQ1NFUklBTF9TV0k6CisJCS8qCisJCSAqIFNpZXJyYSBXaXJlbGVzcyBsYXlvdXQ6CisJCSAqIDA6IERNL0RJQUcgKHVzZSBsaWJxY2RtIGZyb20gTW9kZW1NYW5hZ2VyIGZvciBjb21tdW5pY2F0aW9uKQorCQkgKiAyOiBOTUVBCisJCSAqIDM6IEFULWNhcGFibGUgbW9kZW0gcG9ydAorCQkgKiA4OiBRTUkvbmV0CisJCSAqLworCQlzd2l0Y2ggKGlmbnVtKSB7CisJCWNhc2UgMDoKKwkJCWRldl9kYmcoZGV2LCAiRE0vRElBRyBpbnRlcmZhY2UgZm91bmRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWRldl9kYmcoZGV2LCAiTk1FQSBHUFMgaW50ZXJmYWNlIGZvdW5kXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlkZXZfZGJnKGRldiwgIk1vZGVtIHBvcnQgZm91bmRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBkb24ndCBjbGFpbSBhbnkgdW5zdXBwb3J0ZWQgaW50ZXJmYWNlICovCisJCQlhbHRzZXR0aW5nID0gLTE7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIGRldmljZSBsYXlvdXQgdHlwZTogJWx1XG4iLAorCQkJaWQtPmRyaXZlcl9pbmZvKTsKKwkJYnJlYWs7CiAJfQogCiBkb25lOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDZiMTkyZTYuLjZmN2YwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAlzcGlubG9ja190IHN1c3BfbG9jazsKIAl1bnNpZ25lZCBpbnQgc3VzcGVuZGVkOjE7CiAJaW50IGluX2ZsaWdodDsKKwl1bnNpZ25lZCBpbnQgb3Blbl9wb3J0czsKIH07CiAKIHN0YXRpYyBpbnQgc2llcnJhX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgX191MTYgc3dpU3RhdGUpCkBAIC0zMTUsNyArMzE2LDYgQEAKIAlpbnQgZHNyX3N0YXRlOwogCWludCBkY2Rfc3RhdGU7CiAJaW50IHJpX3N0YXRlOwotCXVuc2lnbmVkIGludCBvcGVuZWQ6MTsKIH07CiAKIHN0YXRpYyBpbnQgc2llcnJhX3NlbmRfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKQEAgLTM2NCwyMCArMzY0LDEzIEBACiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQl0dHlfdGVybWlvc19jb3B5X2h3KCZ0dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKLQlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKLX0KLQogc3RhdGljIGludCBzaWVycmFfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTQxOCw5ICs0MTEsNyBAQAogCiBzdGF0aWMgdm9pZCBzaWVycmFfcmVsZWFzZV91cmIoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaWYgKHVyYikgewotCQlwb3J0ID0gdXJiLT5jb250ZXh0OwogCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KQEAgLTQzMyw3ICs0MjQsNyBAQAogCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICppbnRmZGF0YTsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKLQlpbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwlpbnRmZGF0YSA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAogCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLwogCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKQEAgLTQ3MCw3ICs0NjEsNyBAQAogCQlyZXR1cm4gMDsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOworCWludGZkYXRhID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCiAJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHdyaXRlICglemQgYnl0ZXMpXG4iLCBfX2Z1bmNfXywgd3JpdGVzaXplKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKQEAgLTY3NCw2ICs2NjUsMjMgQEAKIAlyZXR1cm4gMjA0ODsKIH0KIAorc3RhdGljIGludCBzaWVycmFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoYXJzOworCisJLyogTk9URTogVGhpcyBvdmVyY291bnRzIHNvbWV3aGF0LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOworCWNoYXJzID0gcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMgKiBNQVhfVFJBTlNGRVI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKKworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gJWRcbiIsIF9fZnVuY19fLCBjaGFycyk7CisKKwlyZXR1cm4gY2hhcnM7Cit9CisKIHN0YXRpYyB2b2lkIHNpZXJyYV9zdG9wX3J4X3VyYnMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgaTsKQEAgLTcyOSw5ICs3MzcsNiBAQAogCXN0cnVjdCB1cmIJKnVyYjsKIAl1OAkJKmJ1ZjsKIAotCWlmIChlbmRwb2ludCA9PSAtMSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIG1lbV9mbGFncyk7CiAJaWYgKCF1cmIpCiAJCXJldHVybiBOVUxMOwpAQCAtNzU4LDQwICs3NjMsNDggQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKLQlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBwb3J0LT5zZXJpYWwtPnByaXZhdGU7CisJc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB1cmIgKnVyYjsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDA7Ci0JcG9ydGRhdGEtPmR0cl9zdGF0ZSA9IDA7Ci0KLQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKLQkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwotCQkvKiBvZGQgZXJyb3IgaGFuZGxpbmcgZHVlIHRvIHBtIGNvdW50ZXJzICovCi0JCWlmICghdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKSkKLQkJCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwotCQllbHNlCi0JCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKHNlcmlhbC0+aW50ZXJmYWNlKTsKLQotCX0KLQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJLyoKKwkgKiBOZWVkIHRvIHRha2Ugc3VzcF9sb2NrIHRvIG1ha2Ugc3VyZSBwb3J0IGlzIG5vdCBhbHJlYWR5IGJlaW5nCisJICogcmVzdW1lZCwgYnV0IG5vIG5lZWQgdG8gaG9sZCBpdCBkdWUgdG8gQVNZTkNfSU5JVElBTElaRUQuCisJICovCiAJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7Ci0JcG9ydGRhdGEtPm9wZW5lZCA9IDA7CisJaWYgKC0taW50ZmRhdGEtPm9wZW5fcG9ydHMgPT0gMCkKKwkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAKKwlmb3IgKDs7KSB7CisJCXVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJnBvcnRkYXRhLT5kZWxheWVkKTsKKwkJaWYgKCF1cmIpCisJCQlicmVhazsKKwkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwkJc3Bpbl9sb2NrKCZwb3J0ZGF0YS0+bG9jayk7CisJCXBvcnRkYXRhLT5vdXRzdGFuZGluZ191cmJzLS07CisJCXNwaW5fdW5sb2NrKCZwb3J0ZGF0YS0+bG9jayk7CisJfQorCiAJc2llcnJhX3N0b3BfcnhfdXJicyhwb3J0KTsKKwl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKKwogCWZvciAoaSA9IDA7IGkgPCBwb3J0ZGF0YS0+bnVtX2luX3VyYnM7IGkrKykgewogCQlzaWVycmFfcmVsZWFzZV91cmIocG9ydGRhdGEtPmluX3VyYnNbaV0pOwogCQlwb3J0ZGF0YS0+aW5fdXJic1tpXSA9IE5VTEw7CiAJfQorCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZShzZXJpYWwtPmludGVyZmFjZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2llcnJhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CisJc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCWludCBpOwogCWludCBlcnI7CiAJaW50IGVuZHBvaW50OwpAQCAtNzk5LDExICs4MTIsNiBAQAogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQkvKiBTZXQgc29tZSBzYW5lIGRlZmF1bHRzICovCi0JcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDE7Ci0JcG9ydGRhdGEtPmR0cl9zdGF0ZSA9IDE7Ci0KLQogCWVuZHBvaW50ID0gcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CiAJZm9yIChpID0gMDsgaSA8IHBvcnRkYXRhLT5udW1faW5fdXJiczsgaSsrKSB7CiAJCXVyYiA9IHNpZXJyYV9zZXR1cF91cmIoc2VyaWFsLCBlbmRwb2ludCwgVVNCX0RJUl9JTiwgcG9ydCwKQEAgLTgxNiwyMyArODI0LDI2IEBACiAJCQl1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsIGVuZHBvaW50KSB8IFVTQl9ESVJfSU4pOwogCiAJZXJyID0gc2llcnJhX3N1Ym1pdF9yeF91cmJzKHBvcnQsIEdGUF9LRVJORUwpOwotCWlmIChlcnIpIHsKLQkJLyogZ2V0IHJpZCBvZiBldmVyeXRoaW5nIGFzIGluIGNsb3NlICovCi0JCXNpZXJyYV9jbG9zZShwb3J0KTsKLQkJLyogcmVzdG9yZSBiYWxhbmNlIGZvciBhdXRvcG0gKi8KLQkJaWYgKCFzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKLQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N1Ym1pdDsKIAotCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKIAlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKLQlwb3J0ZGF0YS0+b3BlbmVkID0gMTsKKwlpZiAoKytpbnRmZGF0YS0+b3Blbl9wb3J0cyA9PSAxKQorCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9zdWJtaXQ6CisJc2llcnJhX3N0b3BfcnhfdXJicyhwb3J0KTsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0ZGF0YS0+bnVtX2luX3VyYnM7IGkrKykgeworCQlzaWVycmFfcmVsZWFzZV91cmIocG9ydGRhdGEtPmluX3VyYnNbaV0pOworCQlwb3J0ZGF0YS0+aW5fdXJic1tpXSA9IE5VTEw7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogCkBAIC05MjgsNiArOTM5LDcgQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7CiAJa2ZyZWUocG9ydGRhdGEpOwogCiAJcmV0dXJuIDA7CkBAIC05NDQsNiArOTU2LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJaWYgKCFwb3J0ZGF0YSkKKwkJCWNvbnRpbnVlOwogCQlzaWVycmFfc3RvcF9yeF91cmJzKHBvcnQpOwogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKIAl9CkBAIC05NTEsNTggKzk2NSw4NCBAQAogCiBzdGF0aWMgaW50IHNpZXJyYV9zdXNwZW5kKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICppbnRmZGF0YTsKLQlpbnQgYjsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAKKwlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAlpZiAoUE1TR19JU19BVVRPKG1lc3NhZ2UpKSB7Ci0JCWludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOwotCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKLQkJYiA9IGludGZkYXRhLT5pbl9mbGlnaHQ7Ci0KLQkJaWYgKGIpIHsKKwkJaWYgKGludGZkYXRhLT5pbl9mbGlnaHQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwotCQl9IGVsc2UgewotCQkJaW50ZmRhdGEtPnN1c3BlbmRlZCA9IDE7Ci0JCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCQl9CiAJfQorCWludGZkYXRhLT5zdXNwZW5kZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisKIAlzdG9wX3JlYWRfd3JpdGVfdXJicyhzZXJpYWwpOwogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIENhbGxlciBtdXN0IGhvbGQgc3VzcF9sb2NrLiAqLworc3RhdGljIGludCBzaWVycmFfc3VibWl0X2RlbGF5ZWRfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlYyA9IDA7CisJaW50IGVycjsKKworCWludGZkYXRhID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZm9yICg7OykgeworCQl1cmIgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZwb3J0ZGF0YS0+ZGVsYXllZCk7CisJCWlmICghdXJiKQorCQkJYnJlYWs7CisKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmcG9ydGRhdGEtPmFjdGl2ZSk7CisJCWludGZkYXRhLT5pbl9mbGlnaHQrKzsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBzdWJtaXQgdXJiIGZhaWxlZDogJWQiLAorCQkJCQlfX2Z1bmNfXywgZXJyKTsKKwkJCWVjKys7CisJCQlpbnRmZGF0YS0+aW5fZmxpZ2h0LS07CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKworCQkJc3Bpbl9sb2NrKCZwb3J0ZGF0YS0+bG9jayk7CisJCQlwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicy0tOworCQkJc3Bpbl91bmxvY2soJnBvcnRkYXRhLT5sb2NrKTsKKwkJfQorCX0KKworCWlmIChlYykKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzaWVycmFfcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKLQlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7Ci0Jc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwotCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJaW50IGVjID0gMDsKIAlpbnQgaSwgZXJyOwogCiAJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQkJd2hpbGUgKCh1cmIgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZwb3J0ZGF0YS0+ZGVsYXllZCkpKSB7Ci0JCQl1c2JfYW5jaG9yX3VyYih1cmIsICZwb3J0ZGF0YS0+YWN0aXZlKTsKLQkJCWludGZkYXRhLT5pbl9mbGlnaHQrKzsKLQkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoZXJyIDwgMCkgewotCQkJCWludGZkYXRhLT5pbl9mbGlnaHQtLTsKLQkJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Ci0JCQkJdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygmcG9ydGRhdGEtPmRlbGF5ZWQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJCWlmICghdGVzdF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncykpCisJCQljb250aW51ZTsKIAotCQlpZiAocG9ydGRhdGEtPm9wZW5lZCkgewotCQkJZXJyID0gc2llcnJhX3N1Ym1pdF9yeF91cmJzKHBvcnQsIEdGUF9BVE9NSUMpOwotCQkJaWYgKGVycikKLQkJCQllYysrOwotCQl9CisJCWVyciA9IHNpZXJyYV9zdWJtaXRfZGVsYXllZF91cmJzKHBvcnQpOworCQlpZiAoZXJyKQorCQkJZWMrKzsKKworCQllcnIgPSBzaWVycmFfc3VibWl0X3J4X3VyYnMocG9ydCwgR0ZQX0FUT01JQyk7CisJCWlmIChlcnIpCisJCQllYysrOwogCX0KIAlpbnRmZGF0YS0+c3VzcGVuZGVkID0gMDsKIAlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwpAQCAtMTAyOSw3ICsxMDY5LDcgQEAKIAkuZHRyX3J0cwkgICA9IHNpZXJyYV9kdHJfcnRzLAogCS53cml0ZSAgICAgICAgICAgICA9IHNpZXJyYV93cml0ZSwKIAkud3JpdGVfcm9vbSAgICAgICAgPSBzaWVycmFfd3JpdGVfcm9vbSwKLQkuc2V0X3Rlcm1pb3MgICAgICAgPSBzaWVycmFfc2V0X3Rlcm1pb3MsCisJLmNoYXJzX2luX2J1ZmZlciAgID0gc2llcnJhX2NoYXJzX2luX2J1ZmZlciwKIAkudGlvY21nZXQgICAgICAgICAgPSBzaWVycmFfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ICAgICAgICAgID0gc2llcnJhX3Rpb2Ntc2V0LAogCS5hdHRhY2ggICAgICAgICAgICA9IHNpZXJyYV9zdGFydHVwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNmQ0MGQ1Ni4uMDJkZTMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xMDYwLDYgKzEwNjAsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmludGVyZmFjZS0+ZGV2OwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCXVzYl9zZXJpYWxfY29uc29sZV9kaXNjb25uZWN0KHNlcmlhbCk7CiAKQEAgLTEwNzAsMTggKzEwNzEsMTYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmIChwb3J0KSB7Ci0JCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7Ci0JCQlpZiAodHR5KSB7Ci0JCQkJdHR5X3ZoYW5ndXAodHR5KTsKLQkJCQl0dHlfa3JlZl9wdXQodHR5KTsKLQkJCX0KLQkJCXVzYl9zZXJpYWxfcG9ydF9wb2lzb25fdXJicyhwb3J0KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7Ci0JCQljYW5jZWxfd29ya19zeW5jKCZwb3J0LT53b3JrKTsKLQkJCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmcG9ydC0+ZGV2KSkKLQkJCQlkZXZpY2VfZGVsKCZwb3J0LT5kZXYpOworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X3ZoYW5ndXAodHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CisJCXVzYl9zZXJpYWxfcG9ydF9wb2lzb25fdXJicyhwb3J0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0LmRlbHRhX21zcl93YWl0KTsKKwkJY2FuY2VsX3dvcmtfc3luYygmcG9ydC0+d29yayk7CisJCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmcG9ydC0+ZGV2KSkKKwkJCWRldmljZV9kZWwoJnBvcnQtPmRldik7CiAJfQogCWlmIChzZXJpYWwtPnR5cGUtPmRpc2Nvbm5lY3QpCiAJCXNlcmlhbC0+dHlwZS0+ZGlzY29ubmVjdChzZXJpYWwpOwpAQCAtMTA5NCw3ICsxMDkzLDYgQEAKIGludCB1c2Jfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIHIgPSAwOwogCiAJc2VyaWFsLT5zdXNwZW5kaW5nID0gMTsKQEAgLTExMTIsMTIgKzExMTAsOCBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKLQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJaWYgKHBvcnQpCi0JCQl1c2Jfc2VyaWFsX3BvcnRfcG9pc29uX3VyYnMocG9ydCk7Ci0JfQotCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpCisJCXVzYl9zZXJpYWxfcG9ydF9wb2lzb25fdXJicyhzZXJpYWwtPnBvcnRbaV0pOwogZXJyX291dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTExMjUsMTQgKzExMTksMTAgQEAKIAogc3RhdGljIHZvaWQgdXNiX3NlcmlhbF91bnBvaXNvbl9wb3J0X3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKLQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJaWYgKHBvcnQpCi0JCQl1c2Jfc2VyaWFsX3BvcnRfdW5wb2lzb25fdXJicyhwb3J0KTsKLQl9CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpCisJCXVzYl9zZXJpYWxfcG9ydF91bnBvaXNvbl91cmJzKHNlcmlhbC0+cG9ydFtpXSk7CiB9CiAKIGludCB1c2Jfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itd3dhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi13d2FuLmgKaW5kZXggNjg0NzM5Yi4uZjIyZGZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi13d2FuLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi13d2FuLmgKQEAgLTExLDE1ICsxMSwxMSBAQAogZXh0ZXJuIGludCB1c2Jfd3dhbl9wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogZXh0ZXJuIGludCB1c2Jfd3dhbl9wb3J0X3JlbW92ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIGV4dGVybiBpbnQgdXNiX3d3YW5fd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLWV4dGVybiB2b2lkIHVzYl93d2FuX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIGV4dGVybiBpbnQgdXNiX3d3YW5fdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gaW50IHVzYl93d2FuX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiBleHRlcm4gaW50IHVzYl93d2FuX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQgdXNiX3d3YW5fc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIGV4dGVybiBpbnQgdXNiX3d3YW5fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogZXh0ZXJuIGludCB1c2Jfd3dhbl9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CkBAIC0zOSw2ICszNSw3IEBACiAJc3BpbmxvY2tfdCBzdXNwX2xvY2s7CiAJdW5zaWduZWQgaW50IHN1c3BlbmRlZDoxOwogCWludCBpbl9mbGlnaHQ7CisJdW5zaWduZWQgaW50IG9wZW5fcG9ydHM7CiAJaW50ICgqc2VuZF9zZXR1cCkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogCXZvaWQgKnByaXZhdGU7CiB9OwpAQCAtNTEsNyArNDgsNiBAQAogCXN0cnVjdCB1cmIgKm91dF91cmJzW05fT1VUX1VSQl07CiAJdTggKm91dF9idWZmZXJbTl9PVVRfVVJCXTsKIAl1bnNpZ25lZCBsb25nIG91dF9idXN5OwkvKiBCaXQgdmVjdG9yIG9mIFVSQnMgaW4gdXNlICovCi0JaW50IG9wZW5lZDsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBkZWxheWVkOwogCiAJLyogU2V0dGluZ3MgZm9yIHRoZSBwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jCmluZGV4IGIwNzg0NDAuLjJmODA1Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IHVzYl93d2FuX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CiAKLQlpbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwlpbnRmZGF0YSA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAogCWlmICghaW50ZmRhdGEtPnNlbmRfc2V0dXApCiAJCXJldHVybjsKQEAgLTU1LDIwICs1NSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHVzYl93d2FuX2R0cl9ydHMpOwogCi12b2lkIHVzYl93d2FuX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQkgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCi17Ci0Jc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBwb3J0LT5zZXJpYWwtPnByaXZhdGU7Ci0KLQkvKiBEb2Vzbid0IHN1cHBvcnQgb3B0aW9uIHNldHRpbmcgKi8KLQl0dHlfdGVybWlvc19jb3B5X2h3KCZ0dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKLQotCWlmIChpbnRmZGF0YS0+c2VuZF9zZXR1cCkKLQkJaW50ZmRhdGEtPnNlbmRfc2V0dXAocG9ydCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHVzYl93d2FuX3NldF90ZXJtaW9zKTsKLQogaW50IHVzYl93d2FuX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC05Niw3ICs4Miw3IEBACiAJc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwlpbnRmZGF0YSA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAogCWlmICghaW50ZmRhdGEtPnNlbmRfc2V0dXApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTkyLDcgKzE3OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHVzYl93d2FuX2lvY3RsKTsKIAotLyogV3JpdGUgKi8KIGludCB1c2Jfd3dhbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKQEAgLTIwNSw3ICsxOTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwlpbnRmZGF0YSA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB3cml0ZSAoJWQgY2hhcnMpXG4iLCBfX2Z1bmNfXywgY291bnQpOwogCkBAIC0yMjgsOCArMjEzLDEwIEBACiAJCQl1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSwgaSk7CiAKIAkJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKTsKLQkJaWYgKGVyciA8IDApCisJCWlmIChlcnIgPCAwKSB7CisJCQljbGVhcl9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSk7CiAJCQlicmVhazsKKwkJfQogCiAJCS8qIHNlbmQgdGhlIGRhdGEgKi8KIAkJbWVtY3B5KHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgdG9kbyk7CkBAIC0yNDQsOSArMjMxLDkgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKIAkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChlcnIpIHsKLQkJCQlkZXZfZGJnKCZwb3J0LT5kZXYsCi0JCQkJCSJ1c2Jfc3VibWl0X3VyYiAlcCAod3JpdGUgYnVsaykgZmFpbGVkICglZClcbiIsCi0JCQkJCXRoaXNfdXJiLCBlcnIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIiVzOiBzdWJtaXQgdXJiICVkIGZhaWxlZDogJWRcbiIsCisJCQkJCV9fZnVuY19fLCBpLCBlcnIpOwogCQkJCWNsZWFyX2JpdChpLCAmcG9ydGRhdGEtPm91dF9idXN5KTsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50ZmRhdGEtPnN1c3BfbG9jaywgZmxhZ3MpOwogCQkJCWludGZkYXRhLT5pbl9mbGlnaHQtLTsKQEAgLTMxNCw3ICszMDEsNyBAQAogCWludCBpOwogCiAJcG9ydCA9IHVyYi0+Y29udGV4dDsKLQlpbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwlpbnRmZGF0YSA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhwb3J0LT5zZXJpYWwtPmludGVyZmFjZSk7CkBAIC0zMjUsNyArMzEyLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7ICsraSkgewogCQlpZiAocG9ydGRhdGEtPm91dF91cmJzW2ldID09IHVyYikgewotCQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJCWNsZWFyX2JpdChpLCAmcG9ydGRhdGEtPm91dF9idXN5KTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zODQsNyArMzcxLDE1IEBACiAJc3RydWN0IHVyYiAqdXJiOwogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CisJaW50ZmRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisKKwlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IHN1Ym1pdCBpbnQgdXJiIGZhaWxlZDogJWRcbiIsCisJCQkJX19mdW5jX18sIGVycik7CisJCX0KKwl9CiAKIAkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIElOIGVuZHBvaW50ICovCiAJZm9yIChpID0gMDsgaSA8IE5fSU5fVVJCOyBpKyspIHsKQEAgLTM5MywxNyArMzg4LDE1IEBACiAJCQljb250aW51ZTsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHN1Ym1pdCB1cmIgJWQgZmFpbGVkICglZCkgJWRcbiIsCi0JCQkJX19mdW5jX18sIGksIGVyciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXM6IHN1Ym1pdCByZWFkIHVyYiAlZCBmYWlsZWQ6ICVkXG4iLAorCQkJCV9fZnVuY19fLCBpLCBlcnIpOwogCQl9CiAJfQogCi0JaWYgKGludGZkYXRhLT5zZW5kX3NldHVwKQotCQlpbnRmZGF0YS0+c2VuZF9zZXR1cChwb3J0KTsKLQotCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKIAlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKLQlwb3J0ZGF0YS0+b3BlbmVkID0gMTsKKwlpZiAoKytpbnRmZGF0YS0+b3Blbl9wb3J0cyA9PSAxKQorCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAkvKiB0aGlzIGJhbGFuY2VzIGEgZ2V0IGluIHRoZSBnZW5lcmljIFVTQiBzZXJpYWwgY29kZSAqLwogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CkBAIC00MTIsMzIgKzQwNSw1NiBAQAogfQogRVhQT1JUX1NZTUJPTCh1c2Jfd3dhbl9vcGVuKTsKIAorc3RhdGljIHZvaWQgdW5idXN5X3F1ZXVlZF91cmIoc3RydWN0IHVyYiAqdXJiLAorCQkJCQlzdHJ1Y3QgdXNiX3d3YW5fcG9ydF9wcml2YXRlICpwb3J0ZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7IGkrKykgeworCQlpZiAodXJiID09IHBvcnRkYXRhLT5vdXRfdXJic1tpXSkgeworCQkJY2xlYXJfYml0KGksICZwb3J0ZGF0YS0+b3V0X2J1c3kpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKIHZvaWQgdXNiX3d3YW5fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCB1c2Jfd3dhbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwotCXN0cnVjdCB1c2Jfd3dhbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gcG9ydC0+c2VyaWFsLT5wcml2YXRlOworCXN0cnVjdCB1c2Jfd3dhbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB1cmIgKnVyYjsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JLyogU3RvcCByZWFkaW5nL3dyaXRpbmcgdXJicyAqLworCS8qCisJICogTmVlZCB0byB0YWtlIHN1c3BfbG9jayB0byBtYWtlIHN1cmUgcG9ydCBpcyBub3QgYWxyZWFkeSBiZWluZworCSAqIHJlc3VtZWQsIGJ1dCBubyBuZWVkIHRvIGhvbGQgaXQgZHVlIHRvIEFTWU5DX0lOSVRJQUxJWkVELgorCSAqLwogCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwotCXBvcnRkYXRhLT5vcGVuZWQgPSAwOworCWlmICgtLWludGZkYXRhLT5vcGVuX3BvcnRzID09IDApCisJCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCisJZm9yICg7OykgeworCQl1cmIgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZwb3J0ZGF0YS0+ZGVsYXllZCk7CisJCWlmICghdXJiKQorCQkJYnJlYWs7CisJCXVuYnVzeV9xdWV1ZWRfdXJiKHVyYiwgcG9ydGRhdGEpOworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMoc2VyaWFsLT5pbnRlcmZhY2UpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBOX0lOX1VSQjsgaSsrKQogCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbaV0pOwogCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7IGkrKykKIAkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5vdXRfdXJic1tpXSk7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogCi0JLyogYmFsYW5jaW5nIC0gaW1wb3J0YW50IGFzIGFuIGVycm9yIGNhbm5vdCBiZSBoYW5kbGVkKi8KIAl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKHNlcmlhbC0+aW50ZXJmYWNlKTsKLQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl93d2FuX2Nsb3NlKTsKIAotLyogSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHVzYl93d2FuX3NldHVwX3VyYnMgKi8KIHN0YXRpYyBzdHJ1Y3QgdXJiICp1c2Jfd3dhbl9zZXR1cF91cmIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkgICAgICBpbnQgZW5kcG9pbnQsCiAJCQkJICAgICAgaW50IGRpciwgdm9pZCAqY3R4LCBjaGFyICpidWYsIGludCBsZW4sCkBAIC00NTAsNyArNDY3LDYgQEAKIAlpZiAoIXVyYikKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBGaWxsIFVSQiB1c2luZyBzdXBwbGllZCBkYXRhLiAqLwogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCiAJCQkgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgZW5kcG9pbnQpIHwgZGlyLAogCQkJICBidWYsIGxlbiwgY2FsbGJhY2ssIGN0eCk7CkBAIC00NjMsNyArNDc5LDYgQEAKIAlzdHJ1Y3QgdXNiX3d3YW5fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJdTggKmJ1ZmZlcjsKLQlpbnQgZXJyOwogCWludCBpOwogCiAJaWYgKCFwb3J0LT5idWxrX2luX3NpemUgfHwgIXBvcnQtPmJ1bGtfb3V0X3NpemUpCkBAIC01MDMsMTMgKzUxOCw2IEBACiAKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcG9ydGRhdGEpOwogCi0JaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnIpCi0JCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogc3VibWl0IGlycV9pbiB1cmIgZmFpbGVkICVkXG4iLAotCQkJCV9fZnVuY19fLCBlcnIpOwotCX0KLQogCXJldHVybiAwOwogCiBiYWlsX291dF9lcnJvcjI6CkBAIC01MzYsMzIgKzU0NCwyOCBAQAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKIAotCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgYW5kIGZyZWUgdGhlbSAqLwogCWZvciAoaSA9IDA7IGkgPCBOX0lOX1VSQjsgaSsrKSB7Ci0JCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCXVzYl9mcmVlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwb3J0ZGF0YS0+aW5fYnVmZmVyW2ldKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IE5fT1VUX1VSQjsgaSsrKSB7Ci0JCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+b3V0X3VyYnNbaV0pOwogCQl1c2JfZnJlZV91cmIocG9ydGRhdGEtPm91dF91cmJzW2ldKTsKIAkJa2ZyZWUocG9ydGRhdGEtPm91dF9idWZmZXJbaV0pOwogCX0KIAotCS8qIE5vdyBmcmVlIHBvcnQgcHJpdmF0ZSBkYXRhICovCiAJa2ZyZWUocG9ydGRhdGEpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl93d2FuX3BvcnRfcmVtb3ZlKTsKIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIHN0b3BfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHVzYl93d2FuX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKLQkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC01NzEsMTIzICs1NzUsMTE3IEBACiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbal0pOwogCQlmb3IgKGogPSAwOyBqIDwgTl9PVVRfVVJCOyBqKyspCiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPm91dF91cmJzW2pdKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogCX0KIH0KIAogaW50IHVzYl93d2FuX3N1c3BlbmQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7Ci0Jc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7Ci0JaW50IGI7Ci0KLQlpZiAoUE1TR19JU19BVVRPKG1lc3NhZ2UpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwotCQliID0gaW50ZmRhdGEtPmluX2ZsaWdodDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKLQotCQlpZiAoYikKLQkJCXJldHVybiAtRUJVU1k7Ci0JfQorCXN0cnVjdCB1c2Jfd3dhbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCiAJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJaWYgKFBNU0dfSVNfQVVUTyhtZXNzYWdlKSkgeworCQlpZiAoaW50ZmRhdGEtPmluX2ZsaWdodCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CiAJaW50ZmRhdGEtPnN1c3BlbmRlZCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKLQlzdG9wX3JlYWRfd3JpdGVfdXJicyhzZXJpYWwpOworCisJc3RvcF91cmJzKHNlcmlhbCk7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX3d3YW5fc3VzcGVuZCk7CiAKLXN0YXRpYyB2b2lkIHVuYnVzeV9xdWV1ZWRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl93d2FuX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGEpCisvKiBDYWxsZXIgbXVzdCBob2xkIHN1c3BfbG9jay4gKi8KK3N0YXRpYyBpbnQgdXNiX3d3YW5fc3VibWl0X2RlbGF5ZWRfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5fT1VUX1VSQjsgaSsrKSB7Ci0JCWlmICh1cmIgPT0gcG9ydGRhdGEtPm91dF91cmJzW2ldKSB7Ci0JCQljbGVhcl9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgcGxheV9kZWxheWVkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1c2Jfd3dhbl9pbnRmX3ByaXZhdGUgKmRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJc3RydWN0IHVzYl93d2FuX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJc3RydWN0IHVyYiAqdXJiOworCWludCBlcnJfY291bnQgPSAwOwogCWludCBlcnI7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlkYXRhID0gcG9ydC0+c2VyaWFsLT5wcml2YXRlOwotCXdoaWxlICgodXJiID0gdXNiX2dldF9mcm9tX2FuY2hvcigmcG9ydGRhdGEtPmRlbGF5ZWQpKSkgewotCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAoIWVycikgewotCQkJZGF0YS0+aW5fZmxpZ2h0Kys7Ci0JCX0gZWxzZSB7Ci0JCQkvKiB3ZSBoYXZlIHRvIHRocm93IGF3YXkgdGhlIHJlc3QgKi8KLQkJCWRvIHsKLQkJCQl1bmJ1c3lfcXVldWVkX3VyYih1cmIsIHBvcnRkYXRhKTsKLQkJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Vfbm9fc3VzcGVuZChwb3J0LT5zZXJpYWwtPmludGVyZmFjZSk7Ci0JCQl9IHdoaWxlICgodXJiID0gdXNiX2dldF9mcm9tX2FuY2hvcigmcG9ydGRhdGEtPmRlbGF5ZWQpKSk7CisKKwlmb3IgKDs7KSB7CisJCXVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJnBvcnRkYXRhLT5kZWxheWVkKTsKKwkJaWYgKCF1cmIpCiAJCQlicmVhazsKKworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogc3VibWl0IHVyYiBmYWlsZWQ6ICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgZXJyKTsKKwkJCWVycl9jb3VudCsrOworCQkJdW5idXN5X3F1ZXVlZF91cmIodXJiLCBwb3J0ZGF0YSk7CisJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMoc2VyaWFsLT5pbnRlcmZhY2UpOworCQkJY29udGludWU7CiAJCX0KKwkJZGF0YS0+aW5fZmxpZ2h0Kys7CiAJfQorCisJaWYgKGVycl9jb3VudCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYl93d2FuX3Jlc3VtZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CisJc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJc3RydWN0IHVzYl93d2FuX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJc3RydWN0IHVyYiAqdXJiOwotCWludCBlcnIgPSAwOworCWludCBlcnI7CisJaW50IGVycl9jb3VudCA9IDA7CiAKLQkvKiBnZXQgdGhlIGludGVycnVwdCBVUkJzIHJlc3VibWl0dGVkIHVuY29uZGl0aW9uYWxseSAqLworCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgewotCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IE5vIGludGVycnVwdCBVUkIgZm9yIHBvcnRcbiIsIF9fZnVuY19fKTsKKworCQlpZiAoIXRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKQogCQkJY29udGludWU7Ci0JCX0KLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX05PSU8pOwotCQlkZXZfZGJnKCZwb3J0LT5kZXYsICJTdWJtaXR0ZWQgaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAocmVzdWx0ICVkKVxuIiwgZXJyKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiBFcnJvciAlZCBmb3IgaW50ZXJydXB0IFVSQlxuIiwKLQkJCQlfX2Z1bmNfXywgZXJyKTsKLQkJCWdvdG8gZXJyX291dDsKLQkJfQotCX0KIAotCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7Ci0JCS8qIHdhbGsgYWxsIHBvcnRzICovCi0JCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JCS8qIHNraXAgY2xvc2VkIHBvcnRzICovCi0JCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwotCQlpZiAoIXBvcnRkYXRhIHx8ICFwb3J0ZGF0YS0+b3BlbmVkKSB7Ci0JCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwotCQkJY29udGludWU7CisJCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CisJCQllcnIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLAorCQkJCQlHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlczogc3VibWl0IGludCB1cmIgZmFpbGVkOiAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGVycik7CisJCQkJZXJyX2NvdW50Kys7CisJCQl9CiAJCX0KIAorCQllcnIgPSB1c2Jfd3dhbl9zdWJtaXRfZGVsYXllZF91cmJzKHBvcnQpOworCQlpZiAoZXJyKQorCQkJZXJyX2NvdW50Kys7CisKIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKIAkJCXVyYiA9IHBvcnRkYXRhLT5pbl91cmJzW2pdOwogCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IEVycm9yICVkIGZvciBidWxrIFVSQiAlZFxuIiwKLQkJCQkJX19mdW5jX18sIGVyciwgaSk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKLQkJCQlnb3RvIGVycl9vdXQ7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiJXM6IHN1Ym1pdCByZWFkIHVyYiAlZCBmYWlsZWQ6ICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaSwgZXJyKTsKKwkJCQllcnJfY291bnQrKzsKIAkJCX0KIAkJfQotCQlwbGF5X2RlbGF5ZWQocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAJfQotCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCWludGZkYXRhLT5zdXNwZW5kZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7CisKKwlpZiAoZXJyX2NvdW50KQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh1c2Jfd3dhbl9yZXN1bWUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2VuZV91YjYyNTAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jCmluZGV4IDFiZmM5YTYuLmVmNmVmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jCkBAIC0xOTI4LDExICsxOTI4LDEwIEBACiAJCXVzYl9zdG9yX2RiZyh1cywgImxvYWQgZmlybXdhcmUgJXMgZmFpbGVkXG4iLCBmd19uYW1lKTsKIAkJZ290byBub2Z3OwogCX0KLQlidWYgPSBrbWFsbG9jKHNkX2Z3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWVtZHVwKHNkX2Z3LT5kYXRhLCBzZF9mdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlnb3RvIG5vZnc7CiAKLQltZW1jcHkoYnVmLCBzZF9mdy0+ZGF0YSwgc2RfZnctPnNpemUpOwogCW1lbXNldChiY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnVsa19jYl93cmFwKSk7CiAJYmNiLT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU19CVUxLX0NCX1NJR04pOwogCWJjYi0+RGF0YVRyYW5zZmVyTGVuZ3RoID0gc2RfZnctPnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtcnBpcGUuYwppbmRleCA2ZDZkYTEyLi5hODBjNWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMKQEAgLTUyNCw3ICs1MjQsNyBAQAogCQl1MTYgaW5kZXggPSBsZTE2X3RvX2NwdShycGlwZS0+ZGVzY3Iud1JQaXBlSW5kZXgpOwogCiAJCXVzYl9jb250cm9sX21zZygKLQkJCXdhLT51c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAorCQkJd2EtPnVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh3YS0+dXNiX2RldiwgMCksCiAJCQlVU0JfUkVRX1JQSVBFX0FCT1JULAogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9SUElQRSwKIAkJCTAsIGluZGV4LCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CkBAIC01NDUsNyArNTQ1LDcgQEAKIAkJdTE2IGluZGV4ID0gbGUxNl90b19jcHUocnBpcGUtPmRlc2NyLndSUGlwZUluZGV4KTsKIAogCQl1c2JfY29udHJvbF9tc2coCi0JCQl3YS0+dXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHdhLT51c2JfZGV2LCAwKSwKKwkJCXdhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUod2EtPnVzYl9kZXYsIDApLAogCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9SUElQRSwKIAkJCVJQSVBFX1NUQUxMLCBpbmRleCwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvYmVhY29uLmMgYi9kcml2ZXJzL3V3Yi9iZWFjb24uYwppbmRleCA1N2I1ZmY2Li5mNDA3NDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9iZWFjb24uYworKysgYi9kcml2ZXJzL3V3Yi9iZWFjb24uYwpAQCAtMTI1LDggKzEyNSwxMCBAQAogCWVsc2UgewogCQkvKiBjaGFubmVsID49IDAuLi5kYWggKi8KIAkJcmVzdWx0ID0gdXdiX3JjX3N0YXJ0X2JlYWNvbihyYywgYnBzdF9vZmZzZXQsIGNoYW5uZWwpOwotCQlpZiAocmVzdWx0IDwgMCkKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHN0YXJ0IGJlYWNvbmluZzogJWRcbiIsIHJlc3VsdCk7CiAJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJCWlmIChsZTE2X3RvX2NwdShyYy0+aWVzLT53SUVMZW5ndGgpID4gMCkgewogCQkJcmVzdWx0ID0gdXdiX3JjX3NldF9pZShyYywgcmMtPmllcyk7CiAJCQlpZiAocmVzdWx0IDwgMCkgewpAQCAtMzk1LDcgKzM5Nyw2IEBACiAJc3RydWN0IHV3Yl9yY19ldnRfYmVhY29uICpiZTsKIAlzdHJ1Y3QgdXdiX2JlYWNvbl9mcmFtZSAqYmY7CiAJc3RydWN0IHV3Yl9iZWNhX2UgKmJjZTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdHM7CiAKIAlyYyA9IGV2dC0+cmM7CiAJYmUgPSBjb250YWluZXJfb2YoZXZ0LT5ub3RpZi5yY2ViLCBzdHJ1Y3QgdXdiX3JjX2V2dF9iZWFjb24sIHJjZWIpOwpAQCAtNDM5LDggKzQ0MCw2IEBACiAJLyogcHVyZ2Ugb2xkIGJlYWNvbiBkYXRhICovCiAJa2ZyZWUoYmNlLT5iZSk7CiAKLQlsYXN0X3RzID0gYmNlLT50c19qaWZmaWVzOwotCiAJLyogVXBkYXRlIGNvbW1vbmx5IHVzZWQgZmllbGRzICovCiAJYmNlLT50c19qaWZmaWVzID0gZXZ0LT50c19qaWZmaWVzOwogCWJjZS0+YmUgPSBiZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2RycC5jIGIvZHJpdmVycy91d2IvZHJwLmMKaW5kZXggNDY4Yzg5Zi4uMDViN2JkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvZHJwLmMKKysrIGIvZHJpdmVycy91d2IvZHJwLmMKQEAgLTI5LDE5ICsyOSwxOSBAQAogZW51bSB1d2JfZHJwX2NvbmZsaWN0X2FjdGlvbiB7CiAJLyogUmVzZXJ2YXRpb24gaXMgbWFpbnRhaW5lZCwgbm8gYWN0aW9uIG5lZWRlZCAqLwogCVVXQl9EUlBfQ09ORkxJQ1RfTUFOVEFJTiA9IDAsCi0JCisKIAkvKiB0aGUgZGV2aWNlIHNoYWxsIG5vdCB0cmFuc21pdCBmcmFtZXMgaW4gY29uZmxpY3RpbmcgTUFTcyBpbgogCSAqIHRoZSBmb2xsb3dpbmcgc3VwZXJmcmFtZS4gSWYgdGhlIGRldmljZSBpcyB0aGUgcmVzZXJ2YXRpb24KIAkgKiB0YXJnZXQsIGl0IHNoYWxsIGFsc28gc2V0IHRoZSBSZWFzb24gQ29kZSBpbiBpdHMgRFJQIElFIHRvCiAJICogQ29uZmxpY3QgaW4gaXRzIGJlYWNvbiBpbiB0aGUgZm9sbG93aW5nIHN1cGVyZnJhbWUuCiAJICovCiAJVVdCX0RSUF9DT05GTElDVF9BQ1QxLAotCQorCiAJLyogdGhlIGRldmljZSBzaGFsbCBub3Qgc2V0IHRoZSBSZXNlcnZhdGlvbiBTdGF0dXMgYml0IHRvIE9ORQogCSAqIGFuZCBzaGFsbCBub3QgdHJhbnNtaXQgZnJhbWVzIGluIGNvbmZsaWN0aW5nIE1BU3MuIElmIHRoZQogCSAqIGRldmljZSBpcyB0aGUgcmVzZXJ2YXRpb24gdGFyZ2V0LCBpdCBzaGFsbCBhbHNvIHNldCB0aGUKIAkgKiBSZWFzb24gQ29kZSBpbiBpdHMgRFJQIElFIHRvIENvbmZsaWN0LgotCSAqLwkKKwkgKi8KIAlVV0JfRFJQX0NPTkZMSUNUX0FDVDIsCiAKIAkvKiB0aGUgZGV2aWNlIHNoYWxsIG5vdCB0cmFuc21pdCBmcmFtZXMgaW4gY29uZmxpY3RpbmcgTUFTcyBpbgpAQCAtMTE1LDcgKzExNSw4IEBACiAJCQlpZiAodXdiX3Jzdl9oYXNfdHdvX2RycF9pZXMocnN2KSAmJgogCQkJCShyc3YtPm12LmNvbXBhbmlvbl9kcnBfaWUgIT0gTlVMTCkpIHsKIAkJCQltdiA9ICZyc3YtPm12OwotCQkJCW51bV9ieXRlcyArPSBtdi0+Y29tcGFuaW9uX2RycF9pZS0+aGRyLmxlbmd0aCArIDI7CQorCQkJCW51bV9ieXRlcyArPQorCQkJCQltdi0+Y29tcGFuaW9uX2RycF9pZS0+aGRyLmxlbmd0aCArIDI7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMzksMjEgKzE0MCwyMyBAQAogCQkJbWVtY3B5KElFRGF0YXB0ciwgcnN2LT5kcnBfaWUsCiAJCQkgICAgICAgcnN2LT5kcnBfaWUtPmhkci5sZW5ndGggKyAyKTsKIAkJCUlFRGF0YXB0ciArPSByc3YtPmRycF9pZS0+aGRyLmxlbmd0aCArIDI7Ci0JCQkKKwogCQkJaWYgKHV3Yl9yc3ZfaGFzX3R3b19kcnBfaWVzKHJzdikgJiYKIAkJCQkocnN2LT5tdi5jb21wYW5pb25fZHJwX2llICE9IE5VTEwpKSB7CiAJCQkJbXYgPSAmcnN2LT5tdjsKIAkJCQltZW1jcHkoSUVEYXRhcHRyLCBtdi0+Y29tcGFuaW9uX2RycF9pZSwKIAkJCQkgICAgICAgbXYtPmNvbXBhbmlvbl9kcnBfaWUtPmhkci5sZW5ndGggKyAyKTsKLQkJCQlJRURhdGFwdHIgKz0gbXYtPmNvbXBhbmlvbl9kcnBfaWUtPmhkci5sZW5ndGggKyAyOwkKKwkJCQlJRURhdGFwdHIgKz0KKwkJCQkJbXYtPmNvbXBhbmlvbl9kcnBfaWUtPmhkci5sZW5ndGggKyAyOwogCQkJfQogCQl9CiAJfQogCi0JcmVzdWx0ID0gdXdiX3JjX2NtZF9hc3luYyhyYywgIlNFVC1EUlAtSUUiLCAmY21kLT5yY2NiLCBzaXplb2YoKmNtZCkgKyBudW1fYnl0ZXMsCi0JCQkJICBVV0JfUkNfQ0VUX0dFTkVSQUwsIFVXQl9SQ19DTURfU0VUX0RSUF9JRSwKLQkJCQkgIHV3Yl9yY19zZXRfZHJwX2NtZF9kb25lLCBOVUxMKTsKLQkKKwlyZXN1bHQgPSB1d2JfcmNfY21kX2FzeW5jKHJjLCAiU0VULURSUC1JRSIsCisJCQkJJmNtZC0+cmNjYiwgc2l6ZW9mKCpjbWQpICsgbnVtX2J5dGVzLAorCQkJCVVXQl9SQ19DRVRfR0VORVJBTCwgVVdCX1JDX0NNRF9TRVRfRFJQX0lFLAorCQkJCXV3Yl9yY19zZXRfZHJwX2NtZF9kb25lLCBOVUxMKTsKKwogCXJjLT5zZXRfZHJwX2llX3BlbmRpbmcgPSAxOwogCiAJa2ZyZWUoY21kKTsKQEAgLTE3Niw4ICsxNzksOCBAQAogCWludCBleHRfdGllX2JyZWFrZXIgPSB1d2JfaWVfZHJwX3RpZWJyZWFrZXIoZXh0X2RycF9pZSk7CiAJaW50IGV4dF9zdGF0dXMgICAgICA9IHV3Yl9pZV9kcnBfc3RhdHVzKGV4dF9kcnBfaWUpOwogCWludCBleHRfdHlwZSAgICAgICAgPSB1d2JfaWVfZHJwX3R5cGUoZXh0X2RycF9pZSk7Ci0JCi0JCisKKwogCS8qIFtFQ01BLTM2OCAybmQgRWRpdGlvbl0gMTcuNC42ICovCiAJaWYgKGV4dF90eXBlID09IFVXQl9EUlBfVFlQRV9QQ0EgJiYgb3VyX3R5cGUgPT0gVVdCX0RSUF9UWVBFX1BDQSkgewogCQlyZXR1cm4gVVdCX0RSUF9DT05GTElDVF9NQU5UQUlOOwpAQCAtMTg3LDcgKzE5MCw3IEBACiAJaWYgKG91cl90eXBlID09IFVXQl9EUlBfVFlQRV9BTElFTl9CUCkgewogCQlyZXR1cm4gVVdCX0RSUF9DT05GTElDVF9NQU5UQUlOOwogCX0KLQkKKwogCS8qIFtFQ01BLTM2OCAybmQgRWRpdGlvbl0gMTcuNC42LTIgKi8KIAlpZiAoZXh0X3R5cGUgPT0gVVdCX0RSUF9UWVBFX0FMSUVOX0JQKSB7CiAJCS8qIGhlcmUgd2Uga25vdyBvdXJfdHlwZSAhPSBVV0JfRFJQX1RZUEVfQUxJRU5fQlAgKi8KQEAgLTIxNSw3ICsyMTgsNyBAQAogCSAgICBvdXJfYmVhY29uX3Nsb3QgPiAgZXh0X2JlYWNvbl9zbG90KSB7CiAJCXJldHVybiBVV0JfRFJQX0NPTkZMSUNUX01BTlRBSU47CiAJfQotCQorCiAJaWYgKG91cl9zdGF0dXMgPT0gMCkgewogCQlpZiAob3VyX3RpZV9icmVha2VyID09IGV4dF90aWVfYnJlYWtlcikgewogCQkJLyogW0VDTUEtMzY4IDJuZCBFZGl0aW9uXSAxNy40LjYtNmEgKi8KQEAgLTI0NCw5ICsyNDcsOSBAQAogCXJldHVybiBVV0JfRFJQX0NPTkZMSUNUX01BTlRBSU47CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9jb25mbGljdF9ub3JtYWwoc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZSwgCi0JCQkJICAgaW50IGV4dF9iZWFjb25fc2xvdCwgCi0JCQkJICAgc3RydWN0IHV3Yl9yc3YgKnJzdiwgCitzdGF0aWMgdm9pZCBoYW5kbGVfY29uZmxpY3Rfbm9ybWFsKHN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWUsCisJCQkJICAgaW50IGV4dF9iZWFjb25fc2xvdCwKKwkJCQkgICBzdHJ1Y3QgdXdiX3JzdiAqcnN2LAogCQkJCSAgIHN0cnVjdCB1d2JfbWFzX2JtICpjb25mbGljdGluZ19tYXMpCiB7CiAJc3RydWN0IHV3Yl9yYyAqcmMgPSByc3YtPnJjOwpAQCAtMjYzLDcgKzI2Niw3IEBACiAJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19UT19CRV9NT1ZFRCk7CiAJCQlpZiAoYm93LT5jYW5fcmVzZXJ2ZV9leHRyYV9tYXNlcyA9PSBmYWxzZSkKIAkJCQl1d2JfcnN2X2JhY2tvZmZfd2luX2luY3JlbWVudChyYyk7Ci0JCQkKKwogCQkJYnJlYWs7CiAJCWNhc2UgVVdCX0RSUF9DT05GTElDVF9BQ1QzOgogCQkJdXdiX3Jzdl9iYWNrb2ZmX3dpbl9pbmNyZW1lbnQocmMpOwpAQCAtMjc4LDEzICsyODEsMTMgQEAKIAkJc3dpdGNoKGFjdGlvbikgewogCQljYXNlIFVXQl9EUlBfQ09ORkxJQ1RfQUNUMjoKIAkJY2FzZSBVV0JfRFJQX0NPTkZMSUNUX0FDVDM6Ci0JCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfVF9DT05GTElDVCk7CQorCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX1RfQ09ORkxJQ1QpOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAogCX0KLQkKKwogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfY29uZmxpY3RfZXhwYW5kaW5nKHN0cnVjdCB1d2JfaWVfZHJwICpkcnBfaWUsIGludCBleHRfYmVhY29uX3Nsb3QsCkBAIC0yOTUsNyArMjk4LDcgQEAKIAlzdHJ1Y3QgdXdiX2RycF9iYWNrb2ZmX3dpbiAqYm93ID0gJnJjLT5ib3c7CiAJc3RydWN0IHV3Yl9yc3ZfbW92ZSAqbXYgPSAmcnN2LT5tdjsKIAlpbnQgYWN0aW9uOwotCQorCiAJaWYgKGNvbXBhbmlvbl9vbmx5KSB7CiAJCS8qIHN0YXR1cyBvZiBjb21wYW5pb24gaXMgMCBhdCB0aGlzIHBvaW50ICovCiAJCWFjdGlvbiA9IGV2YWx1YXRlX2NvbmZsaWN0X2FjdGlvbihkcnBfaWUsIGV4dF9iZWFjb25fc2xvdCwgcnN2LCAwKTsKQEAgLTMwMywyMSArMzA2LDI0IEBACiAJCQlzd2l0Y2goYWN0aW9uKSB7CiAJCQljYXNlIFVXQl9EUlBfQ09ORkxJQ1RfQUNUMjoKIAkJCWNhc2UgVVdCX0RSUF9DT05GTElDVF9BQ1QzOgotCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX0VTVEFCTElTSEVEKTsKKwkJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsCisJCQkJCQlVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOwogCQkJCXJzdi0+bmVlZHNfcmVsZWFzZV9jb21wYW5pb25fbWFzID0gZmFsc2U7CiAJCQkJaWYgKGJvdy0+Y2FuX3Jlc2VydmVfZXh0cmFfbWFzZXMgPT0gZmFsc2UpCiAJCQkJCXV3Yl9yc3ZfYmFja29mZl93aW5faW5jcmVtZW50KHJjKTsKLQkJCQl1d2JfZHJwX2F2YWlsX3JlbGVhc2UocnN2LT5yYywgJnJzdi0+bXYuY29tcGFuaW9uX21hcyk7CisJCQkJdXdiX2RycF9hdmFpbF9yZWxlYXNlKHJzdi0+cmMsCisJCQkJCQkmcnN2LT5tdi5jb21wYW5pb25fbWFzKTsKIAkJCX0KLQkJfSBlbHNlIHsgLyogcnN2IGlzIHRhcmdldCAqLwkJCQorCQl9IGVsc2UgeyAvKiByc3YgaXMgdGFyZ2V0ICovCiAJCQlzd2l0Y2goYWN0aW9uKSB7CiAJCQljYXNlIFVXQl9EUlBfQ09ORkxJQ1RfQUNUMjoKIAkJCWNhc2UgVVdCX0RSUF9DT05GTElDVF9BQ1QzOgotCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0VYUEFORElOR19DT05GTElDVCk7CisJCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LAorCQkJCQlVV0JfUlNWX1NUQVRFX1RfRVhQQU5ESU5HX0NPTkZMSUNUKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VuZF9kcnBfYXZhaWxfaWUgPSB0cnVlOyAqLwogCQkJfQogCQl9Ci0JfSBlbHNlIHsgLyogYWxzbyBiYXNlIHBhcnQgb2YgdGhlIHJlc2VydmF0aW9uIGlzIGNvbmZsaWN0aW5nICovCQkKKwl9IGVsc2UgeyAvKiBhbHNvIGJhc2UgcGFydCBvZiB0aGUgcmVzZXJ2YXRpb24gaXMgY29uZmxpY3RpbmcgKi8KIAkJaWYgKHV3Yl9yc3ZfaXNfb3duZXIocnN2KSkgewogCQkJdXdiX3Jzdl9iYWNrb2ZmX3dpbl9pbmNyZW1lbnQocmMpOwogCQkJLyogcmVtb3ZlIGNvbXBhbmlvbiBwYXJ0ICovCkBAIC0zMjYsNyArMzMyLDggQEAKIAkJCS8qIGRyb3Agc29tZSBtYXNlcyB3aXRoIHJlYXNvbiBtb2RpZmllZCAqLwogCiAJCQkvKiBwdXQgaW4gdGhlIGNvbXBhbmlvbiB0aGUgbWFzZXMgdG8gYmUgZHJvcHBlZCAqLwotCQkJYml0bWFwX2FuZG5vdChtdi0+Y29tcGFuaW9uX21hcy5ibSwgcnN2LT5tYXMuYm0sIGNvbmZsaWN0aW5nX21hcy0+Ym0sIFVXQl9OVU1fTUFTKTsKKwkJCWJpdG1hcF9hbmRub3QobXYtPmNvbXBhbmlvbl9tYXMuYm0sIHJzdi0+bWFzLmJtLAorCQkJCQljb25mbGljdGluZ19tYXMtPmJtLCBVV0JfTlVNX01BUyk7CiAJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT0RJRklFRCk7CiAJCX0gZWxzZSB7IC8qIGl0IGlzIGEgdGFyZ2V0IHJzdiAqLwogCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX1RfQ09ORkxJQ1QpOwpAQCAtMzM2LDcgKzM0Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHV3Yl9kcnBfaGFuZGxlX2NvbmZsaWN0X3JzdihzdHJ1Y3QgdXdiX3JjICpyYywgc3RydWN0IHV3Yl9yc3YgKnJzdiwKLQkJCQkJc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0LCAKKwkJCQkJc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0LAogCQkJCQlzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llLAogCQkJCQlzdHJ1Y3QgdXdiX21hc19ibSAqY29uZmxpY3RpbmdfbWFzKQogewpAQCAtMzQ1LDgzICszNTIsMTA3IEBACiAJLyogY2hlY2sgaWYgdGhlIGNvbmZsaWN0aW5nIHJlc2VydmF0aW9uIGhhcyB0d28gZHJwX2llcyAqLwogCWlmICh1d2JfcnN2X2hhc190d29fZHJwX2llcyhyc3YpKSB7CiAJCW12ID0gJnJzdi0+bXY7Ci0JCWlmIChiaXRtYXBfaW50ZXJzZWN0cyhyc3YtPm1hcy5ibSwgY29uZmxpY3RpbmdfbWFzLT5ibSwgVVdCX05VTV9NQVMpKSB7Ci0JCQloYW5kbGVfY29uZmxpY3RfZXhwYW5kaW5nKGRycF9pZSwgZHJwX2V2dC0+YmVhY29uX3Nsb3RfbnVtYmVyLAotCQkJCQkJICByc3YsIGZhbHNlLCBjb25mbGljdGluZ19tYXMpOworCQlpZiAoYml0bWFwX2ludGVyc2VjdHMocnN2LT5tYXMuYm0sIGNvbmZsaWN0aW5nX21hcy0+Ym0sCisJCQkJCQkJCVVXQl9OVU1fTUFTKSkgeworCQkJaGFuZGxlX2NvbmZsaWN0X2V4cGFuZGluZyhkcnBfaWUsCisJCQkJCQlkcnBfZXZ0LT5iZWFjb25fc2xvdF9udW1iZXIsCisJCQkJCQlyc3YsIGZhbHNlLCBjb25mbGljdGluZ19tYXMpOwogCQl9IGVsc2UgewotCQkJaWYgKGJpdG1hcF9pbnRlcnNlY3RzKG12LT5jb21wYW5pb25fbWFzLmJtLCBjb25mbGljdGluZ19tYXMtPmJtLCBVV0JfTlVNX01BUykpIHsKLQkJCQloYW5kbGVfY29uZmxpY3RfZXhwYW5kaW5nKGRycF9pZSwgZHJwX2V2dC0+YmVhY29uX3Nsb3RfbnVtYmVyLAotCQkJCQkJCSAgcnN2LCB0cnVlLCBjb25mbGljdGluZ19tYXMpOwkKKwkJCWlmIChiaXRtYXBfaW50ZXJzZWN0cyhtdi0+Y29tcGFuaW9uX21hcy5ibSwKKwkJCQkJY29uZmxpY3RpbmdfbWFzLT5ibSwgVVdCX05VTV9NQVMpKSB7CisJCQkJaGFuZGxlX2NvbmZsaWN0X2V4cGFuZGluZygKKwkJCQkJZHJwX2llLCBkcnBfZXZ0LT5iZWFjb25fc2xvdF9udW1iZXIsCisJCQkJCXJzdiwgdHJ1ZSwgY29uZmxpY3RpbmdfbWFzKTsKIAkJCX0KIAkJfQotCX0gZWxzZSBpZiAoYml0bWFwX2ludGVyc2VjdHMocnN2LT5tYXMuYm0sIGNvbmZsaWN0aW5nX21hcy0+Ym0sIFVXQl9OVU1fTUFTKSkgewotCQloYW5kbGVfY29uZmxpY3Rfbm9ybWFsKGRycF9pZSwgZHJwX2V2dC0+YmVhY29uX3Nsb3RfbnVtYmVyLCByc3YsIGNvbmZsaWN0aW5nX21hcyk7CisJfSBlbHNlIGlmIChiaXRtYXBfaW50ZXJzZWN0cyhyc3YtPm1hcy5ibSwgY29uZmxpY3RpbmdfbWFzLT5ibSwKKwkJCQkJCQlVV0JfTlVNX01BUykpIHsKKwkJaGFuZGxlX2NvbmZsaWN0X25vcm1hbChkcnBfaWUsIGRycF9ldnQtPmJlYWNvbl9zbG90X251bWJlciwKKwkJCQkJcnN2LCBjb25mbGljdGluZ19tYXMpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgdXdiX2RycF9oYW5kbGVfYWxsX2NvbmZsaWN0X3JzdihzdHJ1Y3QgdXdiX3JjICpyYywKLQkJCQkJICAgIHN0cnVjdCB1d2JfcmNfZXZ0X2RycCAqZHJwX2V2dCwgCisJCQkJCSAgICBzdHJ1Y3QgdXdiX3JjX2V2dF9kcnAgKmRycF9ldnQsCiAJCQkJCSAgICBzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llLAogCQkJCQkgICAgc3RydWN0IHV3Yl9tYXNfYm0gKmNvbmZsaWN0aW5nX21hcykKIHsKIAlzdHJ1Y3QgdXdiX3JzdiAqcnN2OwotCQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyc3YsICZyYy0+cmVzZXJ2YXRpb25zLCByY19ub2RlKSB7Ci0JCXV3Yl9kcnBfaGFuZGxlX2NvbmZsaWN0X3JzdihyYywgcnN2LCBkcnBfZXZ0LCBkcnBfaWUsIGNvbmZsaWN0aW5nX21hcyk7CQorCQl1d2JfZHJwX2hhbmRsZV9jb25mbGljdF9yc3YocmMsIHJzdiwgZHJwX2V2dCwgZHJwX2llLAorCQkJCQkJCWNvbmZsaWN0aW5nX21hcyk7CiAJfQogfQotCQorCitzdGF0aWMgdm9pZCB1d2JfZHJwX3Byb2Nlc3NfdGFyZ2V0X2FjY2VwdGVkKHN0cnVjdCB1d2JfcmMgKnJjLAorCXN0cnVjdCB1d2JfcnN2ICpyc3YsIHN0cnVjdCB1d2JfcmNfZXZ0X2RycCAqZHJwX2V2dCwKKwlzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llLCBzdHJ1Y3QgdXdiX21hc19ibSAqbWFzKQoreworCXN0cnVjdCB1d2JfcnN2X21vdmUgKm12ID0gJnJzdi0+bXY7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHV3Yl9pZV9kcnBfc3RhdHVzKGRycF9pZSk7CisKKwlpZiAocnN2LT5zdGF0ZSA9PSBVV0JfUlNWX1NUQVRFX1RfQ09ORkxJQ1QpIHsKKwkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX1RfQ09ORkxJQ1QpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJzdi0+c3RhdGUgPT0gVVdCX1JTVl9TVEFURV9UX0VYUEFORElOR19BQ0NFUFRFRCkgeworCQkvKiBkcnBfaWUgaXMgY29tcGFuaW9uICovCisJCWlmICghYml0bWFwX2VxdWFsKHJzdi0+bWFzLmJtLCBtYXMtPmJtLCBVV0JfTlVNX01BUykpIHsKKwkJCS8qIHN0cm9rZSBjb21wYW5pb24gKi8KKwkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwKKwkJCQlVV0JfUlNWX1NUQVRFX1RfRVhQQU5ESU5HX0FDQ0VQVEVEKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghYml0bWFwX2VxdWFsKHJzdi0+bWFzLmJtLCBtYXMtPmJtLCBVV0JfTlVNX01BUykpIHsKKwkJCWlmICh1d2JfZHJwX2F2YWlsX3Jlc2VydmVfcGVuZGluZyhyYywgbWFzKSA9PSAtRUJVU1kpIHsKKwkJCQkvKiBGSVhNRTogdGhlcmUgaXMgYSBjb25mbGljdCwgZmluZAorCQkJCSAqIHRoZSBjb25mbGljdGluZyByZXNlcnZhdGlvbnMgYW5kCisJCQkJICogdGFrZSBhIHNlbnNpYmxlIGFjdGlvbi4gQ29uc2lkZXIKKwkJCQkgKiB0aGF0IGluIGRycF9pZSB0aGVyZSBpcyB0aGUKKwkJCQkgKiAibmVpZ2hib3VyIiAqLworCQkJCXV3Yl9kcnBfaGFuZGxlX2FsbF9jb25mbGljdF9yc3YocmMsIGRycF9ldnQsCisJCQkJCQlkcnBfaWUsIG1hcyk7CisJCQl9IGVsc2UgeworCQkJCS8qIGFjY2VwdCB0aGUgZXh0cmEgcmVzZXJ2YXRpb24gKi8KKwkJCQliaXRtYXBfY29weShtdi0+Y29tcGFuaW9uX21hcy5ibSwgbWFzLT5ibSwKKwkJCQkJCQkJVVdCX05VTV9NQVMpOworCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwKKwkJCQkJVVdCX1JTVl9TVEFURV9UX0VYUEFORElOR19BQ0NFUFRFRCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LAorCQkJCQkJVVdCX1JTVl9TVEFURV9UX0FDQ0VQVEVEKTsKKwkJCX0KKwkJfQorCisJfQorfQorCiAvKgogICogQmFzZWQgb24gdGhlIERSUCBJRSwgdHJhbnNpdGlvbiBhIHRhcmdldCByZXNlcnZhdGlvbiB0byBhIG5ldwogICogc3RhdGUuCiAgKi8KIHN0YXRpYyB2b2lkIHV3Yl9kcnBfcHJvY2Vzc190YXJnZXQoc3RydWN0IHV3Yl9yYyAqcmMsIHN0cnVjdCB1d2JfcnN2ICpyc3YsCi0JCQkJICAgc3RydWN0IHV3Yl9pZV9kcnAgKmRycF9pZSwgc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0KQorCQkgICBzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llLCBzdHJ1Y3QgdXdiX3JjX2V2dF9kcnAgKmRycF9ldnQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKIAlzdHJ1Y3QgdXdiX3Jzdl9tb3ZlICptdiA9ICZyc3YtPm12OwogCWludCBzdGF0dXM7CiAJZW51bSB1d2JfZHJwX3JlYXNvbiByZWFzb25fY29kZTsKIAlzdHJ1Y3QgdXdiX21hc19ibSBtYXM7Ci0JCisKIAlzdGF0dXMgPSB1d2JfaWVfZHJwX3N0YXR1cyhkcnBfaWUpOwogCXJlYXNvbl9jb2RlID0gdXdiX2llX2RycF9yZWFzb25fY29kZShkcnBfaWUpOwogCXV3Yl9kcnBfaWVfdG9fYm0oJm1hcywgZHJwX2llKTsKIAogCXN3aXRjaCAocmVhc29uX2NvZGUpIHsKIAljYXNlIFVXQl9EUlBfUkVBU09OX0FDQ0VQVEVEOgotCi0JCWlmIChyc3YtPnN0YXRlID09IFVXQl9SU1ZfU1RBVEVfVF9DT05GTElDVCkgewotCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX1RfQ09ORkxJQ1QpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAocnN2LT5zdGF0ZSA9PSBVV0JfUlNWX1NUQVRFX1RfRVhQQU5ESU5HX0FDQ0VQVEVEKSB7Ci0JCQkvKiBkcnBfaWUgaXMgY29tcGFuaW9uICovCi0JCQlpZiAoIWJpdG1hcF9lcXVhbChyc3YtPm1hcy5ibSwgbWFzLmJtLCBVV0JfTlVNX01BUykpCi0JCQkJLyogc3Ryb2tlIGNvbXBhbmlvbiAqLwotCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0VYUEFORElOR19BQ0NFUFRFRCk7CQotCQl9IGVsc2UgewotCQkJaWYgKCFiaXRtYXBfZXF1YWwocnN2LT5tYXMuYm0sIG1hcy5ibSwgVVdCX05VTV9NQVMpKSB7Ci0JCQkJaWYgKHV3Yl9kcnBfYXZhaWxfcmVzZXJ2ZV9wZW5kaW5nKHJjLCAmbWFzKSA9PSAtRUJVU1kpIHsKLQkJCQkJLyogRklYTUU6IHRoZXJlIGlzIGEgY29uZmxpY3QsIGZpbmQKLQkJCQkJICogdGhlIGNvbmZsaWN0aW5nIHJlc2VydmF0aW9ucyBhbmQKLQkJCQkJICogdGFrZSBhIHNlbnNpYmxlIGFjdGlvbi4gQ29uc2lkZXIKLQkJCQkJICogdGhhdCBpbiBkcnBfaWUgdGhlcmUgaXMgdGhlCi0JCQkJCSAqICJuZWlnaGJvdXIiICovCi0JCQkJCXV3Yl9kcnBfaGFuZGxlX2FsbF9jb25mbGljdF9yc3YocmMsIGRycF9ldnQsIGRycF9pZSwgJm1hcyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogYWNjZXB0IHRoZSBleHRyYSByZXNlcnZhdGlvbiAqLwotCQkJCQliaXRtYXBfY29weShtdi0+Y29tcGFuaW9uX21hcy5ibSwgbWFzLmJtLCBVV0JfTlVNX01BUyk7Ci0JCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0VYUEFORElOR19BQ0NFUFRFRCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9UX0FDQ0VQVEVEKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJfQorCQl1d2JfZHJwX3Byb2Nlc3NfdGFyZ2V0X2FjY2VwdGVkKHJjLCByc3YsIGRycF9ldnQsIGRycF9pZSwgJm1hcyk7CiAJCWJyZWFrOwogCiAJY2FzZSBVV0JfRFJQX1JFQVNPTl9NT0RJRklFRDoKQEAgLTQzNCw3ICs0NjUsOCBAQAogCQkvKiBmaW5kIGlmIHRoZSBvd25lciB3YW50cyB0byBleHBhbmQgb3IgcmVkdWNlICovCiAJCWlmIChiaXRtYXBfc3Vic2V0KG1hcy5ibSwgcnN2LT5tYXMuYm0sIFVXQl9OVU1fTUFTKSkgewogCQkJLyogb3duZXIgaXMgcmVkdWNpbmcgKi8KLQkJCWJpdG1hcF9hbmRub3QobXYtPmNvbXBhbmlvbl9tYXMuYm0sIHJzdi0+bWFzLmJtLCBtYXMuYm0sIFVXQl9OVU1fTUFTKTsKKwkJCWJpdG1hcF9hbmRub3QobXYtPmNvbXBhbmlvbl9tYXMuYm0sIHJzdi0+bWFzLmJtLCBtYXMuYm0sCisJCQkJVVdCX05VTV9NQVMpOwogCQkJdXdiX2RycF9hdmFpbF9yZWxlYXNlKHJzdi0+cmMsICZtdi0+Y29tcGFuaW9uX21hcyk7CiAJCX0KIApAQCAtNDQ3LDYgKzQ3OSw0OCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdXdiX2RycF9wcm9jZXNzX293bmVyX2FjY2VwdGVkKHN0cnVjdCB1d2JfcnN2ICpyc3YsCisJCQkJCQlzdHJ1Y3QgdXdiX21hc19ibSAqbWFzKQoreworCXN0cnVjdCB1d2JfcnN2X21vdmUgKm12ID0gJnJzdi0+bXY7CisKKwlzd2l0Y2ggKHJzdi0+c3RhdGUpIHsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19QRU5ESU5HOgorCWNhc2UgVVdCX1JTVl9TVEFURV9PX0lOSVRJQVRFRDoKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRDoKKwkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOworCQlicmVhazsKKwljYXNlIFVXQl9SU1ZfU1RBVEVfT19NT0RJRklFRDoKKwkJaWYgKGJpdG1hcF9lcXVhbChtYXMtPmJtLCByc3YtPm1hcy5ibSwgVVdCX05VTV9NQVMpKQorCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOworCQllbHNlCisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT0RJRklFRCk7CisJCWJyZWFrOworCisJY2FzZSBVV0JfUlNWX1NUQVRFX09fTU9WRV9SRURVQ0lORzogLyogc2hvdWxkbicgdCBiZSBhIHByb2JsZW0gKi8KKwkJaWYgKGJpdG1hcF9lcXVhbChtYXMtPmJtLCByc3YtPm1hcy5ibSwgVVdCX05VTV9NQVMpKQorCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOworCQllbHNlCisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT1ZFX1JFRFVDSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX09fTU9WRV9FWFBBTkRJTkc6CisJCWlmIChiaXRtYXBfZXF1YWwobWFzLT5ibSwgbXYtPmNvbXBhbmlvbl9tYXMuYm0sIFVXQl9OVU1fTUFTKSkgeworCQkJLyogQ29tcGFuaW9uIHJlc2VydmF0aW9uIGFjY2VwdGVkICovCisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT1ZFX0NPTUJJTklORyk7CisJCX0gZWxzZSB7CisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT1ZFX0VYUEFORElORyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVV0JfUlNWX1NUQVRFX09fTU9WRV9DT01CSU5JTkc6CisJCWlmIChiaXRtYXBfZXF1YWwobWFzLT5ibSwgcnN2LT5tYXMuYm0sIFVXQl9OVU1fTUFTKSkKKwkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX01PVkVfUkVEVUNJTkcpOworCQllbHNlCisJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT1ZFX0NPTUJJTklORyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KIC8qCiAgKiBCYXNlZCBvbiB0aGUgRFJQIElFLCB0cmFuc2l0aW9uIGFuIG93bmVyIHJlc2VydmF0aW9uIHRvIGEgbmV3CiAgKiBzdGF0ZS4KQEAgLTQ1Niw3ICs1MzAsNiBAQAogCQkJCSAgc3RydWN0IHV3Yl9yY19ldnRfZHJwICpkcnBfZXZ0KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYy0+dXdiX2Rldi5kZXY7Ci0Jc3RydWN0IHV3Yl9yc3ZfbW92ZSAqbXYgPSAmcnN2LT5tdjsKIAlpbnQgc3RhdHVzOwogCWVudW0gdXdiX2RycF9yZWFzb24gcmVhc29uX2NvZGU7CiAJc3RydWN0IHV3Yl9tYXNfYm0gbWFzOwpAQCAtNDY4LDQ0ICs1NDEsNyBAQAogCWlmIChzdGF0dXMpIHsKIAkJc3dpdGNoIChyZWFzb25fY29kZSkgewogCQljYXNlIFVXQl9EUlBfUkVBU09OX0FDQ0VQVEVEOgotCQkJc3dpdGNoIChyc3YtPnN0YXRlKSB7Ci0JCQljYXNlIFVXQl9SU1ZfU1RBVEVfT19QRU5ESU5HOgotCQkJY2FzZSBVV0JfUlNWX1NUQVRFX09fSU5JVElBVEVEOgotCQkJY2FzZSBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQ6Ci0JCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVV0JfUlNWX1NUQVRFX09fTU9ESUZJRUQ6Ci0JCQkJaWYgKGJpdG1hcF9lcXVhbChtYXMuYm0sIHJzdi0+bWFzLmJtLCBVV0JfTlVNX01BUykpIHsKLQkJCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fRVNUQUJMSVNIRUQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX01PRElGSUVEKTsJCi0JCQkJfQotCQkJCWJyZWFrOwotCQkJCQotCQkJY2FzZSBVV0JfUlNWX1NUQVRFX09fTU9WRV9SRURVQ0lORzogLyogc2hvdWxkbicgdCBiZSBhIHByb2JsZW0gKi8KLQkJCQlpZiAoYml0bWFwX2VxdWFsKG1hcy5ibSwgcnN2LT5tYXMuYm0sIFVXQl9OVU1fTUFTKSkgewotCQkJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19FU1RBQkxJU0hFRCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fTU9WRV9SRURVQ0lORyk7CQotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgVVdCX1JTVl9TVEFURV9PX01PVkVfRVhQQU5ESU5HOgotCQkJCWlmIChiaXRtYXBfZXF1YWwobWFzLmJtLCBtdi0+Y29tcGFuaW9uX21hcy5ibSwgVVdCX05VTV9NQVMpKSB7Ci0JCQkJCS8qIENvbXBhbmlvbiByZXNlcnZhdGlvbiBhY2NlcHRlZCAqLwotCQkJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT1ZFX0NPTUJJTklORyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX09fTU9WRV9FWFBBTkRJTkcpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgVVdCX1JTVl9TVEFURV9PX01PVkVfQ09NQklOSU5HOgotCQkJCWlmIChiaXRtYXBfZXF1YWwobWFzLmJtLCByc3YtPm1hcy5ibSwgVVdCX05VTV9NQVMpKQotCQkJCQl1d2JfcnN2X3NldF9zdGF0ZShyc3YsIFVXQl9SU1ZfU1RBVEVfT19NT1ZFX1JFRFVDSU5HKTsKLQkJCQllbHNlCi0JCQkJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9PX01PVkVfQ09NQklOSU5HKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CQotCQkJfQorCQkJdXdiX2RycF9wcm9jZXNzX293bmVyX2FjY2VwdGVkKHJzdiwgJm1hcyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRldl93YXJuKGRldiwgImlnbm9yaW5nIGludmFsaWQgRFJQIElFIHN0YXRlICglZC8lZClcbiIsCkBAIC01NDUsOSArNTgxLDkgQEAKIAkJCQkJCSAgICAgY25mbHRfdXBkYXRlX3dvcmspOwogCXN0cnVjdCB1d2JfY25mbHRfYWxpZW4gKmM7CiAJc3RydWN0IHV3Yl9yYyAqcmMgPSBjbmZsdC0+cmM7Ci0JCisKIAl1bnNpZ25lZCBsb25nIGRlbGF5X3VzID0gVVdCX01BU19MRU5HVEhfVVMgKiBVV0JfTUFTX1BFUl9aT05FOwotCQorCiAJbXV0ZXhfbG9jaygmcmMtPnJzdnNfbXV0ZXgpOwogCiAJbGlzdF9kZWwoJmNuZmx0LT5yY19ub2RlKTsKQEAgLTU1NiwxMCArNTkyLDEyIEBACiAJYml0bWFwX3plcm8ocmMtPmNuZmx0X2FsaWVuX2JpdG1hcC5ibSwgVVdCX05VTV9NQVMpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcmMtPmNuZmx0X2FsaWVuX2xpc3QsIHJjX25vZGUpIHsKLQkJYml0bWFwX29yKHJjLT5jbmZsdF9hbGllbl9iaXRtYXAuYm0sIHJjLT5jbmZsdF9hbGllbl9iaXRtYXAuYm0sIGMtPm1hcy5ibSwgVVdCX05VTV9NQVMpOwkJCQorCQliaXRtYXBfb3IocmMtPmNuZmx0X2FsaWVuX2JpdG1hcC5ibSwgcmMtPmNuZmx0X2FsaWVuX2JpdG1hcC5ibSwKKwkJCQkJCWMtPm1hcy5ibSwgVVdCX05VTV9NQVMpOwogCX0KLQkKLQlxdWV1ZV9kZWxheWVkX3dvcmsocmMtPnJzdl93b3JrcSwgJnJjLT5yc3ZfYWxpZW5fYnBfd29yaywgdXNlY3NfdG9famlmZmllcyhkZWxheV91cykpOworCisJcXVldWVfZGVsYXllZF93b3JrKHJjLT5yc3Zfd29ya3EsICZyYy0+cnN2X2FsaWVuX2JwX3dvcmssCisJCQkJCXVzZWNzX3RvX2ppZmZpZXMoZGVsYXlfdXMpKTsKIAogCWtmcmVlKGNuZmx0KTsKIAltdXRleF91bmxvY2soJnJjLT5yc3ZzX211dGV4KTsKQEAgLTU4MywxMCArNjIxLDEwIEBACiAJc3RydWN0IHV3Yl9jbmZsdF9hbGllbiAqY25mbHQ7CiAJY2hhciBidWZbNzJdOwogCXVuc2lnbmVkIGxvbmcgZGVsYXlfdXMgPSBVV0JfTUFTX0xFTkdUSF9VUyAqIFVXQl9NQVNfUEVSX1pPTkU7Ci0JCisKIAl1d2JfZHJwX2llX3RvX2JtKCZtYXMsIGRycF9pZSk7CiAJYml0bWFwX3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXMuYm0sIFVXQl9OVU1fTUFTKTsKLQkKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY25mbHQsICZyYy0+Y25mbHRfYWxpZW5fbGlzdCwgcmNfbm9kZSkgewogCQlpZiAoYml0bWFwX2VxdWFsKGNuZmx0LT5tYXMuYm0sIG1hcy5ibSwgVVdCX05VTV9NQVMpKSB7CiAJCQkvKiBFeGlzdGluZyBhbGllbiBCUCByZXNlcnZhdGlvbiBjb25mbGljdGluZwpAQCAtNjEyLDcgKzY1MCw3IEBACiAKIAljbmZsdC0+cmMgPSByYzsKIAlJTklUX1dPUksoJmNuZmx0LT5jbmZsdF91cGRhdGVfd29yaywgdXdiX2NuZmx0X3VwZGF0ZV93b3JrKTsKLQkKKwogCWJpdG1hcF9jb3B5KGNuZmx0LT5tYXMuYm0sIG1hcy5ibSwgVVdCX05VTV9NQVMpOwogCiAJbGlzdF9hZGRfdGFpbCgmY25mbHQtPnJjX25vZGUsICZyYy0+Y25mbHRfYWxpZW5fbGlzdCk7CkBAIC02MjEsMTcgKzY1OSwxNyBAQAogCWJpdG1hcF9vcihyYy0+Y25mbHRfYWxpZW5fYml0bWFwLmJtLCByYy0+Y25mbHRfYWxpZW5fYml0bWFwLmJtLCBtYXMuYm0sIFVXQl9OVU1fTUFTKTsKIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhyYy0+cnN2X3dvcmtxLCAmcmMtPnJzdl9hbGllbl9icF93b3JrLCB1c2Vjc190b19qaWZmaWVzKGRlbGF5X3VzKSk7Ci0JCisKIAkvKiBzdGFydCB0aGUgdGltZXIgKi8KIAl1d2JfY25mbHRfYWxpZW5fc3Ryb2tlX3RpbWVyKGNuZmx0KTsKIH0KIAogc3RhdGljIHZvaWQgdXdiX2RycF9wcm9jZXNzX25vdF9pbnZvbHZlZChzdHJ1Y3QgdXdiX3JjICpyYywKLQkJCQkJIHN0cnVjdCB1d2JfcmNfZXZ0X2RycCAqZHJwX2V2dCwgCisJCQkJCSBzdHJ1Y3QgdXdiX3JjX2V2dF9kcnAgKmRycF9ldnQsCiAJCQkJCSBzdHJ1Y3QgdXdiX2llX2RycCAqZHJwX2llKQogewogCXN0cnVjdCB1d2JfbWFzX2JtIG1hczsKLQkKKwogCXV3Yl9kcnBfaWVfdG9fYm0oJm1hcywgZHJwX2llKTsKIAl1d2JfZHJwX2hhbmRsZV9hbGxfY29uZmxpY3RfcnN2KHJjLCBkcnBfZXZ0LCBkcnBfaWUsICZtYXMpOwogfQpAQCAtNjUxLDcgKzY4OSw3IEBACiAJCSAqLwogCQlyZXR1cm47CiAJfQotCQorCiAJLyoKIAkgKiBEbyBub3RoaW5nIHdpdGggRFJQIElFcyBmb3IgcmVzZXJ2YXRpb25zIHRoYXQgaGF2ZSBiZWVuCiAJICogdGVybWluYXRlZC4KQEAgLTY2MCwxMiArNjk4LDEyIEBACiAJCXV3Yl9yc3Zfc2V0X3N0YXRlKHJzdiwgVVdCX1JTVl9TVEFURV9OT05FKTsKIAkJcmV0dXJuOwogCX0KLQkJCQorCiAJaWYgKHV3Yl9pZV9kcnBfb3duZXIoZHJwX2llKSkKIAkJdXdiX2RycF9wcm9jZXNzX3RhcmdldChyYywgcnN2LCBkcnBfaWUsIGRycF9ldnQpOwogCWVsc2UKIAkJdXdiX2RycF9wcm9jZXNzX293bmVyKHJjLCByc3YsIHNyYywgZHJwX2llLCBkcnBfZXZ0KTsKLQkKKwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2VzdC5jIGIvZHJpdmVycy91d2IvZXN0LmMKaW5kZXggNDU3ZjMxZC4uZjNlMjMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvZXN0LmMKKysrIGIvZHJpdmVycy91d2IvZXN0LmMKQEAgLTI1OCw3ICsyNTgsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaXRyOwotCXUxNiB0eXBlX2V2ZW50X2hpZ2g7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJnV3Yl9lc3RfbG9jaywgZmxhZ3MpOwpAQCAtMjY4LDcgKzI2Nyw2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAJLyogRmluZCB0aGUgcmlnaHQgc3BvdCB0byBpbnNlcnQgaXQgaW4gKi8KLQl0eXBlX2V2ZW50X2hpZ2ggPSB0eXBlIDw8IDggfCBldmVudF9oaWdoOwogCWZvciAoaXRyID0gMDsgaXRyIDwgdXdiX2VzdF91c2VkOyBpdHIrKykKIAkJaWYgKHV3Yl9lc3RbaXRyXS50eXBlX2V2ZW50X2hpZ2ggPCB0eXBlCiAJCSAgICAmJiB1d2JfZXN0W2l0cl0udmVuZG9yIDwgdmVuZG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pZS1yY3YuYyBiL2RyaXZlcnMvdXdiL2llLXJjdi5jCmluZGV4IDkxN2U2ZDcuLjVmYWM1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2llLXJjdi5jCisrKyBiL2RyaXZlcnMvdXdiL2llLXJjdi5jCkBAIC0zMSw3ICszMSw2IEBACiAJaW50IHJlc3VsdCA9IC1FSU5WQUw7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmV2dC0+cmMtPnV3Yl9kZXYuZGV2OwogCXN0cnVjdCB1d2JfcmNfZXZ0X2llX3JjdiAqaWVyY3Y7Ci0Jc2l6ZV90IGllc2l6ZTsKIAogCS8qIElzIHRoZXJlIGVub3VnaCBkYXRhIHRvIGRlY29kZSBpdD8gKi8KIAlpZiAoZXZ0LT5ub3RpZi5zaXplIDwgc2l6ZW9mKCppZXJjdikpIHsKQEAgLTQxLDcgKzQwLDYgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAJaWVyY3YgPSBjb250YWluZXJfb2YoZXZ0LT5ub3RpZi5yY2ViLCBzdHJ1Y3QgdXdiX3JjX2V2dF9pZV9yY3YsIHJjZWIpOwotCWllc2l6ZSA9IGxlMTZfdG9fY3B1KGllcmN2LT53SUVMZW5ndGgpOwogCiAJZGV2X2RiZyhkZXYsICJJRSByZWNlaXZlZCwgZWxlbWVudCBJRD0lZFxuIiwgaWVyY3YtPklFRGF0YVswXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3JhZGlvLmMgYi9kcml2ZXJzL3V3Yi9yYWRpby5jCmluZGV4IGZkMjNkOTguLjI0MjdlOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3JhZGlvLmMKKysrIGIvZHJpdmVycy91d2IvcmFkaW8uYwpAQCAtMTE1LDcgKzExNSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh1d2JfcmFkaW9fc3RhcnQpOwogCiAvKioKLSAqIHV3Yl9yYWRpb19zdG9wIC0gcmVxdWVzdCB0aGEgdGhlIHJhZGlvIGJlIHN0b3BwZWQuCisgKiB1d2JfcmFkaW9fc3RvcCAtIHJlcXVlc3QgdGhhdCB0aGUgcmFkaW8gYmUgc3RvcHBlZC4KICAqIEBwYWw6IHRoZSBQQUwgbWFraW5nIHRoZSByZXF1ZXN0LgogICoKICAqIFN0b3BzIHRoZSByYWRpbyBpZiBubyBvdGhlciBQQUwgaXMgbWFraW5nIHVzZSBvZiBpdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3Jzdi5jIGIvZHJpdmVycy91d2IvcnN2LmMKaW5kZXggM2ZlNjExOS4uMDg4N2FlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvcnN2LmMKKysrIGIvZHJpdmVycy91d2IvcnN2LmMKQEAgLTE2Myw4ICsxNjMsMTAgQEAKIAl9CiAKIAlzdHJlYW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KHN0cmVhbXNfYm0sIFVXQl9OVU1fU1RSRUFNUyk7Ci0JaWYgKHN0cmVhbSA+PSBVV0JfTlVNX1NUUkVBTVMpCisJaWYgKHN0cmVhbSA+PSBVV0JfTlVNX1NUUkVBTVMpIHsKKwkJZGV2X2VycihkZXYsICIlczogbm8gYXZhaWxhYmxlIHN0cmVhbSBmb3VuZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCXJzdi0+c3RyZWFtID0gc3RyZWFtOwogCXNldF9iaXQoc3RyZWFtLCBzdHJlYW1zX2JtKTsKQEAgLTI0OSw3ICsyNTEsOSBAQAogCSAqIHN1cGVyIGZyYW1lIGFuZCBzaG91bGQgbm90IGJlIHRlcm1pbmF0ZWQgaWYgbm8gcmVzcG9uc2UgaXMKIAkgKiByZWNlaXZlZC4KIAkgKi8KLQlpZiAocnN2LT5pc19tdWx0aWNhc3QpIHsKKwlpZiAocnN2LT5zdGF0ZSA9PSBVV0JfUlNWX1NUQVRFX05PTkUpIHsKKwkJc2ZyYW1lcyA9IDA7CisJfSBlbHNlIGlmIChyc3YtPmlzX211bHRpY2FzdCkgewogCQlpZiAocnN2LT5zdGF0ZSA9PSBVV0JfUlNWX1NUQVRFX09fSU5JVElBVEVECiAJCSAgICB8fCByc3YtPnN0YXRlID09IFVXQl9SU1ZfU1RBVEVfT19NT1ZFX0VYUEFORElORwogCQkgICAgfHwgcnN2LT5zdGF0ZSA9PSBVV0JfUlNWX1NUQVRFX09fTU9WRV9DT01CSU5JTkcKQEAgLTMyMiw2ICszMjYsNyBAQAogCXN3aXRjaCAobmV3X3N0YXRlKSB7CiAJY2FzZSBVV0JfUlNWX1NUQVRFX05PTkU6CiAJCXV3Yl9yc3Zfc3RhdGVfdXBkYXRlKHJzdiwgVVdCX1JTVl9TVEFURV9OT05FKTsKKwkJdXdiX3Jzdl9yZW1vdmUocnN2KTsKIAkJdXdiX3Jzdl9jYWxsYmFjayhyc3YpOwogCQlicmVhazsKIAljYXNlIFVXQl9SU1ZfU1RBVEVfT19JTklUSUFURUQ6CkBAIC00NDIsNiArNDQ3LDggQEAKIAkJdXdiX3Jzdl9zZXRfc3RhdGUocnN2LCBVV0JfUlNWX1NUQVRFX1RfQUNDRVBURUQpOwogCQl1d2JfZHJwX2F2YWlsX3JlbGVhc2UocnN2LT5yYywgJnJzdi0+bXYuY29tcGFuaW9uX21hcyk7CiAJCWdvdG8gdW5sb2NrOworCWNhc2UgVVdCX1JTVl9TVEFURV9OT05FOgorCQlnb3RvIHVubG9jazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC01NTAsMTIgKzU1NywxNiBAQAogewogCXN0cnVjdCB1d2JfcmMgKnJjID0gcnN2LT5yYzsKIAlzdHJ1Y3QgdXdiX21hc19ibSBhdmFpbGFibGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJjLT51d2JfZGV2LmRldjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcmMtPnJzdnNfbXV0ZXgpOwogCXJldCA9IHV3Yl9yc3ZfZ2V0X3N0cmVhbShyc3YpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiB1d2JfcnN2X2dldF9zdHJlYW0gZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCQlnb3RvIG91dDsKKwl9CiAKIAlyc3YtPnRpZWJyZWFrZXIgPSBwcmFuZG9tX3UzMigpICYgMTsKIAkvKiBnZXQgYXZhaWxhYmxlIG1hcyBiaXRtYXAgKi8KQEAgLTU2NSwxMiArNTc2LDE2IEBACiAJaWYgKHJldCA9PSBVV0JfUlNWX0FMTE9DX05PVF9GT1VORCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCXV3Yl9yc3ZfcHV0X3N0cmVhbShyc3YpOworCQlkZXZfZXJyKGRldiwgIiVzOiB1d2JfcnN2X2ZpbmRfYmVzdF9hbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmV0ID0gdXdiX2RycF9hdmFpbF9yZXNlcnZlX3BlbmRpbmcocmMsICZyc3YtPm1hcyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXV3Yl9yc3ZfcHV0X3N0cmVhbShyc3YpOworCQlkZXZfZXJyKGRldiwgIiVzOiB1d2JfZHJwX2F2YWlsX3Jlc2VydmVfcGVuZGluZyBmYWlsZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW8uYyBiL2RyaXZlcnMvdmZpby92ZmlvLmMKaW5kZXggNTEyZjQ3OS4uZjAxOGQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uYworKysgYi9kcml2ZXJzL3ZmaW8vdmZpby5jCkBAIC0zNDksNyArMzQ5LDYgQEAKIAkJCQkJICAgICB2b2lkICpkZXZpY2VfZGF0YSkKIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZTsKLQlpbnQgcmV0OwogCiAJZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKmRldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghZGV2aWNlKQpAQCAtMzYwLDEyICszNTksNyBAQAogCWRldmljZS0+Z3JvdXAgPSBncm91cDsKIAlkZXZpY2UtPm9wcyA9IG9wczsKIAlkZXZpY2UtPmRldmljZV9kYXRhID0gZGV2aWNlX2RhdGE7Ci0KLQlyZXQgPSBkZXZfc2V0X2RydmRhdGEoZGV2LCBkZXZpY2UpOwotCWlmIChyZXQpIHsKLQkJa2ZyZWUoZGV2aWNlKTsKLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQl9CisJZGV2X3NldF9kcnZkYXRhKGRldiwgZGV2aWNlKTsKIAogCS8qIE5vIG5lZWQgdG8gZ2V0IGdyb3VwX2xvY2ssIGNhbGxlciBoYXMgZ3JvdXAgcmVmZXJlbmNlICovCiAJdmZpb19ncm91cF9nZXQoZ3JvdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCBjZjUwY2U5Li5hZWI1MTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYworKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtMTI1NSw3ICsxMjU1LDcgQEAKIAkJCXRwZy0+dHZfdHBnX3Zob3N0X2NvdW50Kys7CiAJCQl0cGctPnZob3N0X3Njc2kgPSB2czsKIAkJCXZzX3RwZ1t0cGctPnRwb3J0X3RwZ3RdID0gdHBnOwotCQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQkJbWF0Y2ggPSB0cnVlOwogCQl9CiAJCW11dGV4X3VubG9jaygmdHBnLT50dl90cGdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IDlkOGZlYWMuLmYyNjcyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTg3LDcgKzg3LDggQEAKIHN0YXRpYyBpbnQgdmdhY29uX3Njcm9sbChzdHJ1Y3QgdmNfZGF0YSAqYywgaW50IHQsIGludCBiLCBpbnQgZGlyLAogCQkJIGludCBsaW5lcyk7CiBzdGF0aWMgdm9pZCB2Z2Fjb25faW52ZXJ0X3JlZ2lvbihzdHJ1Y3QgdmNfZGF0YSAqYywgdTE2ICogcCwgaW50IGNvdW50KTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZnYWNvbl91bmlfcGFnZWRpclsyXTsKK3N0YXRpYyBzdHJ1Y3QgdW5pX3BhZ2VkaXIgKnZnYWNvbl91bmlfcGFnZWRpcjsKK3N0YXRpYyBpbnQgdmdhY29uX3JlZmNvdW50OwogCiAvKiBEZXNjcmlwdGlvbiBvZiB0aGUgaGFyZHdhcmUgc2l0dWF0aW9uICovCiBzdGF0aWMgaW50CQl2Z2FfaW5pdF9kb25lCQlfX3JlYWRfbW9zdGx5OwpAQCAtNTUzLDcgKzU1NCw3IEBACiAKIHN0YXRpYyB2b2lkIHZnYWNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICpjLCBpbnQgaW5pdCkKIHsKLQl1bnNpZ25lZCBsb25nIHA7CisJc3RydWN0IHVuaV9wYWdlZGlyICpwOwogCiAJLyoKIAkgKiBXZSBjYW5ub3QgYmUgbG9hZGVkIGFzIGEgbW9kdWxlLCB0aGVyZWZvcmUgaW5pdCBpcyBhbHdheXMgMSwKQEAgLTU3NSwxMiArNTc2LDEyIEBACiAJaWYgKHZnYV81MTJfY2hhcnMpCiAJCWMtPnZjX2hpX2ZvbnRfbWFzayA9IDB4MDgwMDsKIAlwID0gKmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKLQlpZiAoYy0+dmNfdW5pX3BhZ2VkaXJfbG9jID09ICZjLT52Y191bmlfcGFnZWRpciB8fAotCSAgICAhLS1jLT52Y191bmlfcGFnZWRpcl9sb2NbMV0pCisJaWYgKGMtPnZjX3VuaV9wYWdlZGlyX2xvYyAhPSAmdmdhY29uX3VuaV9wYWdlZGlyKSB7CiAJCWNvbl9mcmVlX3VuaW1hcChjKTsKLQljLT52Y191bmlfcGFnZWRpcl9sb2MgPSB2Z2Fjb25fdW5pX3BhZ2VkaXI7Ci0JdmdhY29uX3VuaV9wYWdlZGlyWzFdKys7Ci0JaWYgKCF2Z2Fjb25fdW5pX3BhZ2VkaXJbMF0gJiYgcCkKKwkJYy0+dmNfdW5pX3BhZ2VkaXJfbG9jID0gJnZnYWNvbl91bmlfcGFnZWRpcjsKKwkJdmdhY29uX3JlZmNvdW50Kys7CisJfQorCWlmICghdmdhY29uX3VuaV9wYWdlZGlyICYmIHApCiAJCWNvbl9zZXRfZGVmYXVsdF91bmltYXAoYyk7CiAKIAkvKiBPbmx5IHNldCB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkaWRuJ3QgZGVsaWJlcmF0ZWx5IG92ZXJyaWRlIGl0ICovCkBAIC01OTcsNyArNTk4LDcgQEAKIAkJdmdhX3NldF9tZW1fdG9wKGMpOwogCX0KIAotCWlmICghLS12Z2Fjb25fdW5pX3BhZ2VkaXJbMV0pCisJaWYgKCEtLXZnYWNvbl9yZWZjb3VudCkKIAkJY29uX2ZyZWVfdW5pbWFwKGMpOwogCWMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9ICZjLT52Y191bmlfcGFnZWRpcjsKIAljb25fc2V0X2RlZmF1bHRfdW5pbWFwKGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9hdGFmYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9hdGFmYi5jCmluZGV4IGUyMWQxZjUuLjQ5NTNiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXRhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0YWZiLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogfTsKIAogc3RhdGljIHZvaWQgKnNjcmVlbl9iYXNlOwkvKiBiYXNlIGFkZHJlc3Mgb2Ygc2NyZWVuICovCi1zdGF0aWMgdm9pZCAqcmVhbF9zY3JlZW5fYmFzZTsJLyogKG9ubHkgZm9yIE92ZXJzY2FuKSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c19zY3JlZW5fYmFzZTsJLyogKG9ubHkgZm9yIE92ZXJzY2FuKSAqLwogCiBzdGF0aWMgaW50IHNjcmVlbl9sZW47CiAKQEAgLTIxMyw3ICsyMTMsOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGV4dGVybmFsX2RlcHRoOwogc3RhdGljIGludCBleHRlcm5hbF9wbW9kZTsKLXN0YXRpYyB2b2lkICpleHRlcm5hbF9hZGRyOworc3RhdGljIHZvaWQgKmV4dGVybmFsX3NjcmVlbl9iYXNlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0ZXJuYWxfYWRkcjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2xlbjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX3ZnYWlvYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXh0ZXJuYWxfYml0c3BlcmNvbCA9IDY7CkBAIC01OTIsNyArNTkzLDcgQEAKIAlpbnQgbW9kZTsKIAogCXN0cmNweShmaXgtPmlkLCAiQXRhcmkgQnVpbHRpbiIpOwotCWZpeC0+c21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKXJlYWxfc2NyZWVuX2Jhc2U7CisJZml4LT5zbWVtX3N0YXJ0ID0gcGh5c19zY3JlZW5fYmFzZTsKIAlmaXgtPnNtZW1fbGVuID0gc2NyZWVuX2xlbjsKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUzsKIAlmaXgtPnR5cGVfYXV4ID0gMjsKQEAgLTc5MCw3ICs3OTEsNyBAQAogCWFkZHIgPSAoKHNoaWZ0ZXIuYmFzX2hpICYgMHhmZikgPDwgMTYpIHwKIAkgICAgICAgKChzaGlmdGVyLmJhc19tZCAmIDB4ZmYpIDw8IDgpICB8CiAJICAgICAgICgoc2hpZnRlci5iYXNfbG8gJiAweGZmKSk7Ci0JcGFyLT5zY3JlZW5fYmFzZSA9IHBoeXNfdG9fdmlydChhZGRyKTsKKwlwYXItPnNjcmVlbl9iYXNlID0gYXRhcmlfc3RyYW1fdG9fdmlydChhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgdHRfc2V0X3BhcihzdHJ1Y3QgYXRhZmJfcGFyICpwYXIpCkBAIC04ODgsNyArODg5LDcgQEAKIAkJCSAgICAgc3RydWN0IGF0YWZiX3BhciAqcGFyKQogewogCXN0cmNweShmaXgtPmlkLCAiQXRhcmkgQnVpbHRpbiIpOwotCWZpeC0+c21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKXJlYWxfc2NyZWVuX2Jhc2U7CisJZml4LT5zbWVtX3N0YXJ0ID0gcGh5c19zY3JlZW5fYmFzZTsKIAlmaXgtPnNtZW1fbGVuID0gc2NyZWVuX2xlbjsKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUzsKIAlmaXgtPnR5cGVfYXV4ID0gMjsKQEAgLTE1ODQsNyArMTU4NSw3IEBACiAJYWRkciA9IChzaGlmdGVyLmJhc19oaSAmIDB4ZmYpIDw8IDE2IHwKIAkgICAgICAgKHNoaWZ0ZXIuYmFzX21kICYgMHhmZikgPDwgOCAgfAogCSAgICAgICAoc2hpZnRlci5iYXNfbG8gJiAweGZmKTsKLQlwYXItPnNjcmVlbl9iYXNlID0gcGh5c190b192aXJ0KGFkZHIpOworCXBhci0+c2NyZWVuX2Jhc2UgPSBhdGFyaV9zdHJhbV90b192aXJ0KGFkZHIpOwogCiAJLyogZGVyaXZlZCBwYXJhbWV0ZXJzICovCiAJaHctPnN0ZV9tb2RlID0gKGh3LT5mX3NoaWZ0ICYgMHg1MTApID09IDAgJiYgaHctPnN0X3NoaWZ0ID09IDB4MTAwOwpAQCAtMTgxNCw3ICsxODE1LDcgQEAKIAlpbnQgbW9kZTsKIAogCXN0cmNweShmaXgtPmlkLCAiQXRhcmkgQnVpbHRpbiIpOwotCWZpeC0+c21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKXJlYWxfc2NyZWVuX2Jhc2U7CisJZml4LT5zbWVtX3N0YXJ0ID0gcGh5c19zY3JlZW5fYmFzZTsKIAlmaXgtPnNtZW1fbGVuID0gc2NyZWVuX2xlbjsKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUzsKIAlmaXgtPnR5cGVfYXV4ID0gMjsKQEAgLTE5ODAsNyArMTk4MSw3IEBACiAJICAgICAgICgoc2hpZnRlci5iYXNfbWQgJiAweGZmKSA8PCA4KTsKIAlpZiAoQVRBUklIV19QUkVTRU5UKEVYVERfU0hJRlRFUikpCiAJCWFkZHIgfD0gKHNoaWZ0ZXIuYmFzX2xvICYgMHhmZik7Ci0JcGFyLT5zY3JlZW5fYmFzZSA9IHBoeXNfdG9fdmlydChhZGRyKTsKKwlwYXItPnNjcmVlbl9iYXNlID0gYXRhcmlfc3RyYW1fdG9fdmlydChhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgc3RzdGVfc2V0X3BhcihzdHJ1Y3QgYXRhZmJfcGFyICpwYXIpCkBAIC0yMDM5LDcgKzIwNDAsNyBAQAogc3RhdGljIHZvaWQgc3RzdGVfc2V0X3NjcmVlbl9iYXNlKHZvaWQgKnNfYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JYWRkciA9IHZpcnRfdG9fcGh5cyhzX2Jhc2UpOworCWFkZHIgPSBhdGFyaV9zdHJhbV90b19waHlzKHNfYmFzZSk7CiAJLyogU2V0dXAgU2NyZWVuIE1lbW9yeSAqLwogCXNoaWZ0ZXIuYmFzX2hpID0gKHVuc2lnbmVkIGNoYXIpKChhZGRyICYgMHhmZjAwMDApID4+IDE2KTsKIAlzaGlmdGVyLmJhc19tZCA9ICh1bnNpZ25lZCBjaGFyKSgoYWRkciAmIDB4MDBmZjAwKSA+PiA4KTsKQEAgLTIxMTMsNyArMjExNCw3IEBACiBzdGF0aWMgaW50IGV4dF9lbmNvZGVfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LCBzdHJ1Y3QgYXRhZmJfcGFyICpwYXIpCiB7CiAJc3RyY3B5KGZpeC0+aWQsICJVbmtub3duIEV4dGVybiIpOwotCWZpeC0+c21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWV4dGVybmFsX2FkZHI7CisJZml4LT5zbWVtX3N0YXJ0ID0gZXh0ZXJuYWxfYWRkcjsKIAlmaXgtPnNtZW1fbGVuID0gUEFHRV9BTElHTihleHRlcm5hbF9sZW4pOwogCWlmIChleHRlcm5hbF9kZXB0aCA9PSAxKSB7CiAJCWZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKQEAgLTIyMTMsNyArMjIxNCw3IEBACiAKIHN0YXRpYyB2b2lkIGV4dF9nZXRfcGFyKHN0cnVjdCBhdGFmYl9wYXIgKnBhcikKIHsKLQlwYXItPnNjcmVlbl9iYXNlID0gZXh0ZXJuYWxfYWRkcjsKKwlwYXItPnNjcmVlbl9iYXNlID0gZXh0ZXJuYWxfc2NyZWVuX2Jhc2U7CiB9CiAKIHN0YXRpYyB2b2lkIGV4dF9zZXRfcGFyKHN0cnVjdCBhdGFmYl9wYXIgKnBhcikKQEAgLTIyODYsNyArMjI4Nyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCi0JYWRkciA9IHZpcnRfdG9fcGh5cyhzX2Jhc2UpOworCWFkZHIgPSBhdGFyaV9zdHJhbV90b19waHlzKHNfYmFzZSk7CiAJLyogU2V0dXAgU2NyZWVuIE1lbW9yeSAqLwogCXNoaWZ0ZXIuYmFzX2hpID0gKHVuc2lnbmVkIGNoYXIpKChhZGRyICYgMHhmZjAwMDApID4+IDE2KTsKIAlzaGlmdGVyLmJhc19tZCA9ICh1bnNpZ25lZCBjaGFyKSgoYWRkciAmIDB4MDBmZjAwKSA+PiA4KTsKQEAgLTI0MzMsNyArMjQzNCw5IEBACiAJYXRhZmJfZ2V0X3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKIAlhdGFmYl9nZXRfZml4KCZpbmZvLT5maXgsIGluZm8pOwogCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSAodm9pZCAqKWluZm8tPmZpeC5zbWVtX3N0YXJ0OworCS8qIE5vdGU6IHNtZW1fc3RhcnQgZGVyaXZlcyBmcm9tIHBoeXNfc2NyZWVuX2Jhc2UsIG5vdCBzY3JlZW5fYmFzZSEgKi8KKwlpbmZvLT5zY3JlZW5fYmFzZSA9IChleHRlcm5hbF9hZGRyID8gZXh0ZXJuYWxfc2NyZWVuX2Jhc2UgOgorCQkJCWF0YXJpX3N0cmFtX3RvX3ZpcnQoaW5mby0+Zml4LnNtZW1fc3RhcnQpKTsKIH0KIAogc3RhdGljIGludCBhdGFmYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCkBAIC0yOTA0LDcgKzI5MDcsNyBAQAogCWV4dGVybmFsX3lyZXMgPSB5cmVzOwogCWV4dGVybmFsX2RlcHRoID0gZGVwdGg7CiAJZXh0ZXJuYWxfcG1vZGUgPSBwbGFuZXM7Ci0JZXh0ZXJuYWxfYWRkciA9ICh2b2lkICopYWRkcjsKKwlleHRlcm5hbF9hZGRyID0gYWRkcjsKIAlleHRlcm5hbF9sZW4gPSBsZW47CiAKIAlpZiAoZXh0ZXJuYWxfY2FyZF90eXBlID09IElTX01WMzAwKSB7CkBAIC0zMTY2LDMwICszMTY5LDMwIEBACiAJCW1lbXNldChzY3JlZW5fYmFzZSwgMCwgbWVtX3JlcSk7CiAJCXBhZCA9IC0odW5zaWduZWQgbG9uZylzY3JlZW5fYmFzZSAmIChQQUdFX1NJWkUgLSAxKTsKIAkJc2NyZWVuX2Jhc2UgKz0gcGFkOwotCQlyZWFsX3NjcmVlbl9iYXNlID0gc2NyZWVuX2Jhc2UgKyBvdnNjX29mZnNldDsKKwkJcGh5c19zY3JlZW5fYmFzZSA9IGF0YXJpX3N0cmFtX3RvX3BoeXMoc2NyZWVuX2Jhc2UgKyBvdnNjX29mZnNldCk7CiAJCXNjcmVlbl9sZW4gPSAobWVtX3JlcSAtIHBhZCAtIG92c2Nfb2Zmc2V0KSAmIFBBR0VfTUFTSzsKIAkJc3Rfb3ZzY19zd2l0Y2goKTsKIAkJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CiAJCQkvKiBPbiBhICcwNDArLCB0aGUgY2FjaGUgbW9kZSBvZiB2aWRlbyBSQU0gbXVzdCBiZSBzZXQgdG8KIAkJCSAqIHdyaXRlLXRocm91Z2ggYWxzbyBmb3IgaW50ZXJuYWwgdmlkZW8gaGFyZHdhcmUhICovCi0JCQljYWNoZV9wdXNoKHZpcnRfdG9fcGh5cyhzY3JlZW5fYmFzZSksIHNjcmVlbl9sZW4pOworCQkJY2FjaGVfcHVzaChhdGFyaV9zdHJhbV90b19waHlzKHNjcmVlbl9iYXNlKSwgc2NyZWVuX2xlbik7CiAJCQlrZXJuZWxfc2V0X2NhY2hlbW9kZShzY3JlZW5fYmFzZSwgc2NyZWVuX2xlbiwKIAkJCQkJICAgICBJT01BUF9XUklURVRIUk9VR0gpOwogCQl9Ci0JCXByaW50aygiYXRhZmI6IHNjcmVlbl9iYXNlICVwIHJlYWxfc2NyZWVuX2Jhc2UgJXAgc2NyZWVuX2xlbiAlZFxuIiwKLQkJCXNjcmVlbl9iYXNlLCByZWFsX3NjcmVlbl9iYXNlLCBzY3JlZW5fbGVuKTsKKwkJcHJpbnRrKCJhdGFmYjogc2NyZWVuX2Jhc2UgJXAgcGh5c19zY3JlZW5fYmFzZSAlbHggc2NyZWVuX2xlbiAlZFxuIiwKKwkJCXNjcmVlbl9iYXNlLCBwaHlzX3NjcmVlbl9iYXNlLCBzY3JlZW5fbGVuKTsKICNpZmRlZiBBVEFGQl9FWFQKIAl9IGVsc2UgewogCQkvKiBNYXAgdGhlIHZpZGVvIG1lbW9yeSAocGh5c2ljYWwgYWRkcmVzcyBnaXZlbikgdG8gc29tZXdoZXJlCiAJCSAqIGluIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KIAkJICovCi0JCWV4dGVybmFsX2FkZHIgPSBpb3JlbWFwX3dyaXRldGhyb3VnaCgodW5zaWduZWQgbG9uZylleHRlcm5hbF9hZGRyLAorCQlleHRlcm5hbF9zY3JlZW5fYmFzZSA9IGlvcmVtYXBfd3JpdGV0aHJvdWdoKGV4dGVybmFsX2FkZHIsCiAJCQkJCQkgICAgIGV4dGVybmFsX2xlbik7CiAJCWlmIChleHRlcm5hbF92Z2Fpb2Jhc2UpCiAJCQlleHRlcm5hbF92Z2Fpb2Jhc2UgPQogCQkJICAodW5zaWduZWQgbG9uZylpb3JlbWFwKGV4dGVybmFsX3ZnYWlvYmFzZSwgMHgxMDAwMCk7Ci0JCXNjcmVlbl9iYXNlID0KLQkJcmVhbF9zY3JlZW5fYmFzZSA9IGV4dGVybmFsX2FkZHI7CisJCXNjcmVlbl9iYXNlID0gZXh0ZXJuYWxfc2NyZWVuX2Jhc2U7CisJCXBoeXNfc2NyZWVuX2Jhc2UgPSBleHRlcm5hbF9hZGRyOwogCQlzY3JlZW5fbGVuID0gZXh0ZXJuYWxfbGVuICYgUEFHRV9NQVNLOwogCQltZW1zZXQgKHNjcmVlbl9iYXNlLCAwLCBleHRlcm5hbF9sZW4pOwogCX0KQEAgLTMyMzUsOCArMzIzOCw4IEBACiAJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKSA8IDApIHsKICNpZmRlZiBBVEFGQl9FWFQKIAkJaWYgKGV4dGVybmFsX2FkZHIpIHsKLQkJCWlvdW5tYXAoZXh0ZXJuYWxfYWRkcik7Ci0JCQlleHRlcm5hbF9hZGRyID0gTlVMTDsKKwkJCWlvdW5tYXAoZXh0ZXJuYWxfc2NyZWVuX2Jhc2UpOworCQkJZXh0ZXJuYWxfYWRkciA9IDA7CiAJCX0KIAkJaWYgKGV4dGVybmFsX3ZnYWlvYmFzZSkgewogCQkJaW91bm1hcCgodm9pZCopZXh0ZXJuYWxfdmdhaW9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuYyBiL2RyaXZlcnMvdzEvdzEuYwppbmRleCBmZjUyNjE4Li41ZDczNDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmMKKysrIGIvZHJpdmVycy93MS93MS5jCkBAIC0xMDc4LDYgKzEwNzgsOCBAQAogICogdzFfcHJvY2Vzc19jYWxsYmFja3MoKSAtIGV4ZWN1dGUgZWFjaCBkZXYtPmFzeW5jX2xpc3QgY2FsbGJhY2sgZW50cnkKICAqIEBkZXY6IHcxX21hc3RlciBkZXZpY2UKICAqCisgKiBUaGUgdzEgbWFzdGVyIGxpc3RfbXV0ZXggbXVzdCBiZSBoZWxkLgorICoKICAqIFJldHVybjogMSBpZiB0aGVyZSB3ZXJlIGNvbW1hbmRzIHRvIGV4ZWN1dGVkIDAgb3RoZXJ3aXNlCiAgKi8KIGludCB3MV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgdzFfbWFzdGVyICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxLmggYi9kcml2ZXJzL3cxL3cxLmgKaW5kZXggNzM0ZGFiNy4uNTZhNDliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MS5oCisrKyBiL2RyaXZlcnMvdzEvdzEuaApAQCAtMjAzLDcgKzIwMyw2IEBACiAgKiBAc2VhcmNoX2lkOgkJYWxsb3dzIGNvbnRpbnVpbmcgYSBzZWFyY2gKICAqIEByZWZjbnQ6CQlyZWZlcmVuY2UgY291bnQKICAqIEBwcml2OgkJcHJpdmF0ZSBkYXRhIHN0b3JhZ2UKLSAqIEBwcml2X3NpemU6CQlzaXplIGFsbG9jYXRlZAogICogQGVuYWJsZV9wdWxsdXA6CWFsbG93cyBhIHN0cm9uZyBwdWxsdXAKICAqIEBwdWxsdXBfZHVyYXRpb246CXRpbWUgZm9yIHRoZSBuZXh0IHN0cm9uZyBwdWxsdXAKICAqIEBmbGFnczoJCW9uZSBvZiB3MV9tYXN0ZXJfZmxhZ3MKQEAgLTIxNCw3ICsyMTMsNiBAQAogICogQGRldjoJCXN5c2ZzIGRldmljZQogICogQGJ1c19tYXN0ZXI6CQlpbyBvcGVyYXRpb25zIGF2YWlsYWJsZQogICogQHNlcToJCXNlcXVlbmNlIG51bWJlciB1c2VkIGZvciBuZXRsaW5rIGJyb2FkY2FzdHMKLSAqIEBwb3J0aWQ6CQlkZXN0aW5hdGlvbiBmb3IgdGhlIGN1cnJlbnQgbmV0bGluayBjb21tYW5kCiAgKi8KIHN0cnVjdCB3MV9tYXN0ZXIKIHsKQEAgLTI0MSw3ICsyMzksNiBAQAogCWF0b21pY190CQlyZWZjbnQ7CiAKIAl2b2lkCQkJKnByaXY7Ci0JaW50CQkJcHJpdl9zaXplOwogCiAJLyoqIDVWIHN0cm9uZyBwdWxsdXAgZW5hYmxlZCBmbGFnLCAxIGVuYWJsZWQsIHplcm8gZGlzYWJsZWQuICovCiAJaW50CQkJZW5hYmxlX3B1bGx1cDsKQEAgLTI2MCwxMSArMjU3LDYgQEAKIAlzdHJ1Y3QgdzFfYnVzX21hc3RlcgkqYnVzX21hc3RlcjsKIAogCXUzMgkJCXNlcTsKLQkvKiBwb3J0IGlkIHRvIHNlbmQgbmV0bGluayByZXNwb25zZXMgdG8uICBUaGUgdmFsdWUgaXMgdGVtcG9yYXJpbHkKLQkgKiBzdG9yZWQgaGVyZSB3aGlsZSBwcm9jZXNzaW5nIGEgbWVzc2FnZSwgc2V0IGFmdGVyIGxvY2tpbmcgdGhlCi0JICogbXV0ZXgsIHplcm8gYmVmb3JlIHVubG9ja2luZyB0aGUgbXV0ZXguCi0JICovCi0JdTMyCQkJcG9ydGlkOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jIGIvZHJpdmVycy93MS93MV9mYW1pbHkuYwppbmRleCAzYmZmNmIzLi4zNjUxZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmMKQEAgLTEzOSw5ICsxMzksOSBAQAogCiB2b2lkIF9fdzFfZmFtaWx5X2dldChzdHJ1Y3QgdzFfZmFtaWx5ICpmKQogewotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfaW5jKCZmLT5yZWZjbnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wodzFfdW5yZWdpc3Rlcl9mYW1pbHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9pbnQuYyBiL2RyaXZlcnMvdzEvdzFfaW50LmMKaW5kZXggOWIwODRkYi4uNzI4MDM5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfaW50LmMKKysrIGIvZHJpdmVycy93MS93MV9pbnQuYwpAQCAtMjE5LDkgKzIxOSwxMyBAQAogCiAJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKSkKIAkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CisJCW11dGV4X2xvY2soJmRldi0+bGlzdF9tdXRleCk7CiAJCXcxX3Byb2Nlc3NfY2FsbGJhY2tzKGRldik7CisJCW11dGV4X3VubG9jaygmZGV2LT5saXN0X211dGV4KTsKIAl9CisJbXV0ZXhfbG9jaygmZGV2LT5saXN0X211dGV4KTsKIAl3MV9wcm9jZXNzX2NhbGxiYWNrcyhkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5saXN0X211dGV4KTsKIAogCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CiAJbXNnLmlkLm1zdC5pZCA9IGRldi0+aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYyBiL2RyaXZlcnMvdzEvdzFfbmV0bGluay5jCmluZGV4IGEwMjcwNGEuLjM1MWEyOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfbmV0bGluay5jCisrKyBiL2RyaXZlcnMvdzEvdzFfbmV0bGluay5jCkBAIC0yOSw1MSArMjksMjQ3IEBACiAjaW5jbHVkZSAidzFfbmV0bGluay5oIgogCiAjaWYgZGVmaW5lZChDT05GSUdfVzFfQ09OKSAmJiAoZGVmaW5lZChDT05GSUdfQ09OTkVDVE9SKSB8fCAoZGVmaW5lZChDT05GSUdfQ09OTkVDVE9SX01PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfVzFfTU9EVUxFKSkpCisKKyNkZWZpbmUgTUlOKGEsIGIpICAgICAgICAgICAgICAgICAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworLyogQnVuZGxlIHRvZ2V0aGVyIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgdG8gcHJvY2VzcyBhIHJlcXVlc3QgaW4gb25lIG1lbW9yeQorICogYWxsb2NhdGlvbi4KKyAqLworc3RydWN0IHcxX2NiX2Jsb2NrIHsKKwlhdG9taWNfdCByZWZjbnQ7CisJdTMyIHBvcnRpZDsgLyogU2VuZGluZyBwcm9jZXNzIHBvcnQgSUQgKi8KKwkvKiBtYXhpbXVtIHZhbHVlIGZvciBmaXJzdF9jbi0+bGVuICovCisJdTE2IG1heGxlbjsKKwkvKiBwb2ludGVycyB0byBidWlsZGluZyB1cCB0aGUgcmVwbHkgbWVzc2FnZSAqLworCXN0cnVjdCBjbl9tc2cgKmZpcnN0X2NuOyAvKiBmaXhlZCBvbmNlIHRoZSBzdHJ1Y3R1cmUgaXMgcG9wdWxhdGVkICovCisJc3RydWN0IGNuX21zZyAqY247IC8qIGFkdmFuY2VzIGFzIGNuX21zZyBpcyBhcHBlbmVkZWQgKi8KKwlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKm1zZzsgLyogYWR2YW5jZXMgYXMgdzFfbmV0bGlua19tc2cgaXMgYXBwZW5lZCAqLworCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqY21kOyAvKiBhZHZhbmNlcyBhcyBjbWRzIGFyZSBhcHBlbmVkICovCisJc3RydWN0IHcxX25ldGxpbmtfbXNnICpjdXJfbXNnOyAvKiBjdXJyZW50bHkgbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgKi8KKwkvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGZvbGxvd3MgKi8KKwlzdHJ1Y3QgY25fbXNnIHJlcXVlc3RfY247CisJLyogZm9sbG93ZWQgYnkgdmFyaWFibGUgbGVuZ3RoOgorCSAqIGNuX21zZywgZGF0YSAodzFfbmV0bGlua19tc2cgYW5kIHcxX25ldGxpbmtfY21kKQorCSAqIG9uZSBvciBtb3JlIHN0cnVjdCB3MV9jYl9ub2RlCisJICogcmVwbHkgZmlyc3RfY24sIGRhdGEgKHcxX25ldGxpbmtfbXNnIGFuZCB3MV9uZXRsaW5rX2NtZCkKKwkgKi8KK307CitzdHJ1Y3QgdzFfY2Jfbm9kZSB7CisJc3RydWN0IHcxX2FzeW5jX2NtZCBhc3luYzsKKwkvKiBwb2ludGVycyB3aXRoaW4gdzFfY2JfYmxvY2sgYW5kIGNuIGRhdGEgKi8KKwlzdHJ1Y3QgdzFfY2JfYmxvY2sgKmJsb2NrOworCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqbXNnOworCXN0cnVjdCB3MV9zbGF2ZSAqc2w7CisJc3RydWN0IHcxX21hc3RlciAqZGV2OworfTsKKworLyoqCisgKiB3MV9yZXBseV9sZW4oKSAtIGNhbGN1bGF0ZSBjdXJyZW50IHJlcGx5IGxlbmd0aCwgY29tcGFyZSB0byBtYXhsZW4KKyAqIEBibG9jazogYmxvY2sgdG8gY2FsY3VsYXRlCisgKgorICogQ2FsY3VsYXRlcyB0aGUgY3VycmVudCBtZXNzYWdlIGxlbmd0aCBpbmNsdWRpbmcgcG9zc2libGUgbXVsdGlwbGUKKyAqIGNuX21zZyBhbmQgZGF0YSwgZXhjbHVkZXMgdGhlIGZpcnN0IHNpemVvZihzdHJ1Y3QgY25fbXNnKS4gIERpcmVjbHR5CisgKiBjb21wYXJpYWJsZSB0byBtYXhsZW4gYW5kIHVzYWJsZSB0byBzZW5kIHRoZSBtZXNzYWdlLgorICovCitzdGF0aWMgdTE2IHcxX3JlcGx5X2xlbihzdHJ1Y3QgdzFfY2JfYmxvY2sgKmJsb2NrKQoreworCWlmICghYmxvY2stPmNuKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKHU4ICopYmxvY2stPmNuIC0gKHU4ICopYmxvY2stPmZpcnN0X2NuICsgYmxvY2stPmNuLT5sZW47Cit9CisKK3N0YXRpYyB2b2lkIHcxX3VucmVmX2Jsb2NrKHN0cnVjdCB3MV9jYl9ibG9jayAqYmxvY2spCit7CisJaWYgKGF0b21pY19zdWJfcmV0dXJuKDEsICZibG9jay0+cmVmY250KSA9PSAwKSB7CisJCXUxNiBsZW4gPSB3MV9yZXBseV9sZW4oYmxvY2spOworCQlpZiAobGVuKSB7CisJCQljbl9uZXRsaW5rX3NlbmRfbXVsdChibG9jay0+Zmlyc3RfY24sIGxlbiwKKwkJCQlibG9jay0+cG9ydGlkLCAwLCBHRlBfS0VSTkVMKTsKKwkJfQorCQlrZnJlZShibG9jayk7CisJfQorfQorCisvKioKKyAqIHcxX3JlcGx5X21ha2Vfc3BhY2UoKSAtIHNlbmQgbWVzc2FnZSBpZiBuZWVkZWQgdG8gbWFrZSBzcGFjZQorICogQGJsb2NrOiBibG9jayB0byBtYWtlIHNwYWNlIG9uCisgKiBAc3BhY2U6IGhvdyBtYW55IGJ5dGVzIHJlcXVlc3RlZAorICoKKyAqIFZlcmlmeSB0aGVyZSBpcyBlbm91Z2ggcm9vbSBsZWZ0IGZvciB0aGUgY2FsbGVyIHRvIGFkZCAic3BhY2UiIGJ5dGVzIHRvIHRoZQorICogbWVzc2FnZSwgaWYgdGhlcmUgaXNuJ3Qgc2VuZCB0aGUgbWVzc2FnZSBhbmQgcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHcxX3JlcGx5X21ha2Vfc3BhY2Uoc3RydWN0IHcxX2NiX2Jsb2NrICpibG9jaywgdTE2IHNwYWNlKQoreworCXUxNiBsZW4gPSB3MV9yZXBseV9sZW4oYmxvY2spOworCWlmIChsZW4gKyBzcGFjZSA+PSBibG9jay0+bWF4bGVuKSB7CisJCWNuX25ldGxpbmtfc2VuZF9tdWx0KGJsb2NrLT5maXJzdF9jbiwgbGVuLCBibG9jay0+cG9ydGlkLCAwLCBHRlBfS0VSTkVMKTsKKwkJYmxvY2stPmZpcnN0X2NuLT5sZW4gPSAwOworCQlibG9jay0+Y24gPSBOVUxMOworCQlibG9jay0+bXNnID0gTlVMTDsKKwkJYmxvY2stPmNtZCA9IE5VTEw7CisJfQorfQorCisvKiBFYXJseSBzZW5kIHdoZW4gcmVwbGllcyBhcmVuJ3QgYnVuZGxlZC4gKi8KK3N0YXRpYyB2b2lkIHcxX25ldGxpbmtfY2hlY2tfc2VuZChzdHJ1Y3QgdzFfY2JfYmxvY2sgKmJsb2NrKQoreworCWlmICghKGJsb2NrLT5yZXF1ZXN0X2NuLmZsYWdzICYgVzFfQ05fQlVORExFKSAmJiBibG9jay0+Y24pCisJCXcxX3JlcGx5X21ha2Vfc3BhY2UoYmxvY2ssIGJsb2NrLT5tYXhsZW4pOworfQorCisvKioKKyAqIHcxX25ldGxpbmtfc2V0dXBfbXNnKCkgLSBwcmVwYXJlIHRvIHdyaXRlIGJsb2NrLT5tc2cKKyAqIEBibG9jazogYmxvY2sgdG8gb3BlcmF0ZSBvbgorICogQGFjazogZGV0ZXJtaW5lcyBpZiBjbiBjYW4gYmUgcmV1c2VkCisgKgorICogYmxvY2stPmNuIHdpbGwgYmUgc2V0dXAgd2l0aCB0aGUgY29ycmVjdCBhY2ssIGFkdmFuY2luZyBpZiBuZWVkZWQKKyAqIGJsb2NrLT5jbi0+bGVuIGRvZXMgbm90IGluY2x1ZGUgc3BhY2UgZm9yIGJsb2NrLT5tc2cKKyAqIGJsb2NrLT5tc2cgYWR2YW5jZXMgYnV0IHJlbWFpbnMgdW5pbml0aWFsaXplZAorICovCitzdGF0aWMgdm9pZCB3MV9uZXRsaW5rX3NldHVwX21zZyhzdHJ1Y3QgdzFfY2JfYmxvY2sgKmJsb2NrLCB1MzIgYWNrKQoreworCWlmIChibG9jay0+Y24gJiYgYmxvY2stPmNuLT5hY2sgPT0gYWNrKSB7CisJCWJsb2NrLT5tc2cgPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKGJsb2NrLT5jbi0+ZGF0YSArIGJsb2NrLT5jbi0+bGVuKTsKKwl9IGVsc2UgeworCQkvKiBhZHZhbmNlIG9yIHNldCB0byBkYXRhICovCisJCWlmIChibG9jay0+Y24pCisJCQlibG9jay0+Y24gPSAoc3RydWN0IGNuX21zZyAqKShibG9jay0+Y24tPmRhdGEgKworCQkJCWJsb2NrLT5jbi0+bGVuKTsKKwkJZWxzZQorCQkJYmxvY2stPmNuID0gYmxvY2stPmZpcnN0X2NuOworCisJCW1lbWNweShibG9jay0+Y24sICZibG9jay0+cmVxdWVzdF9jbiwgc2l6ZW9mKCpibG9jay0+Y24pKTsKKwkJYmxvY2stPmNuLT5sZW4gPSAwOworCQlibG9jay0+Y24tPmFjayA9IGFjazsKKwkJYmxvY2stPm1zZyA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKilibG9jay0+Y24tPmRhdGE7CisJfQorfQorCisvKiBBcHBlbmQgY21kIHRvIG1zZywgaW5jbHVkZSBjbWQtPmRhdGEgYXMgd2VsbC4gIFRoaXMgaXMgYmVjYXVzZQorICogYW55IGZvbGxvd2luZyBkYXRhIGdvZXMgd2l0aCB0aGUgY29tbWFuZCBhbmQgaW4gdGhlIGNhc2Ugb2YgYSByZWFkIGlzCisgKiB0aGUgcmVzdWx0cy4KKyAqLworc3RhdGljIHZvaWQgdzFfbmV0bGlua19xdWV1ZV9jbWQoc3RydWN0IHcxX2NiX2Jsb2NrICpibG9jaywKKwlzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNtZCkKK3sKKwl1MzIgc3BhY2U7CisJdzFfcmVwbHlfbWFrZV9zcGFjZShibG9jaywgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpICsKKwkJc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgKyBzaXplb2YoKmNtZCkgKyBjbWQtPmxlbik7CisKKwkvKiBUaGVyZSdzIGEgc3RhdHVzIG1lc3NhZ2Ugc2VudCBhZnRlciBlYWNoIGNvbW1hbmQsIHNvIG5vIHBvaW50CisJICogaW4gdHJ5aW5nIHRvIGJ1bmRsZSB0aGlzIGNtZCBhZnRlciBhbiBleGlzdGluZyBvbmUsIGJlY2F1c2UKKwkgKiB0aGVyZSB3b24ndCBiZSBvbmUuICBBbGxvY2F0ZSBhbmQgY29weSBvdmVyIGEgbmV3IGNuX21zZy4KKwkgKi8KKwl3MV9uZXRsaW5rX3NldHVwX21zZyhibG9jaywgYmxvY2stPnJlcXVlc3RfY24uc2VxICsgMSk7CisJbWVtY3B5KGJsb2NrLT5tc2csIGJsb2NrLT5jdXJfbXNnLCBzaXplb2YoKmJsb2NrLT5tc2cpKTsKKwlibG9jay0+Y24tPmxlbiArPSBzaXplb2YoKmJsb2NrLT5tc2cpOworCWJsb2NrLT5tc2ctPmxlbiA9IDA7CisJYmxvY2stPmNtZCA9IChzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKikoYmxvY2stPm1zZy0+ZGF0YSk7CisKKwlzcGFjZSA9IHNpemVvZigqY21kKSArIGNtZC0+bGVuOworCWlmIChibG9jay0+Y21kICE9IGNtZCkKKwkJbWVtY3B5KGJsb2NrLT5jbWQsIGNtZCwgc3BhY2UpOworCWJsb2NrLT5jbi0+bGVuICs9IHNwYWNlOworCWJsb2NrLT5tc2ctPmxlbiArPSBzcGFjZTsKK30KKworLyogQXBwZW5kIHJlcV9tc2cgYW5kIHJlcV9jbWQsIG5vIG90aGVyIGNvbW1hbmRzIGFuZCBubyBkYXRhIGZyb20gcmVxX2NtZCBhcmUKKyAqIGNvcGllZC4KKyAqLworc3RhdGljIHZvaWQgdzFfbmV0bGlua19xdWV1ZV9zdGF0dXMoc3RydWN0IHcxX2NiX2Jsb2NrICpibG9jaywKKwlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKnJlcV9tc2csIHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqcmVxX2NtZCwKKwlpbnQgZXJyb3IpCit7CisJdTE2IHNwYWNlID0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpICsgc2l6ZW9mKCpyZXFfbXNnKSArIHNpemVvZigqcmVxX2NtZCk7CisJdzFfcmVwbHlfbWFrZV9zcGFjZShibG9jaywgc3BhY2UpOworCXcxX25ldGxpbmtfc2V0dXBfbXNnKGJsb2NrLCBibG9jay0+cmVxdWVzdF9jbi5hY2spOworCisJbWVtY3B5KGJsb2NrLT5tc2csIHJlcV9tc2csIHNpemVvZigqcmVxX21zZykpOworCWJsb2NrLT5jbi0+bGVuICs9IHNpemVvZigqcmVxX21zZyk7CisJYmxvY2stPm1zZy0+bGVuID0gMDsKKwlibG9jay0+bXNnLT5zdGF0dXMgPSAodTgpLWVycm9yOworCWlmIChyZXFfY21kKSB7CisJCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqY21kID0gKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqKWJsb2NrLT5tc2ctPmRhdGE7CisJCW1lbWNweShjbWQsIHJlcV9jbWQsIHNpemVvZigqY21kKSk7CisJCWJsb2NrLT5jbi0+bGVuICs9IHNpemVvZigqY21kKTsKKwkJYmxvY2stPm1zZy0+bGVuICs9IHNpemVvZigqY21kKTsKKwkJY21kLT5sZW4gPSAwOworCX0KKwl3MV9uZXRsaW5rX2NoZWNrX3NlbmQoYmxvY2spOworfQorCisvKioKKyAqIHcxX25ldGxpbmtfc2VuZF9lcnJvcigpIC0gc2VuZHMgdGhlIGVycm9yIG1lc3NhZ2Ugbm93CisgKiBAY246IG9yaWdpbmFsIGNuX21zZworICogQG1zZzogb3JpZ2luYWwgdzFfbmV0bGlua19tc2cKKyAqIEBwb3J0aWQ6IHdoZXJlIHRvIHNlbmQgaXQKKyAqIEBlcnJvcjogZXJyb3Igc3RhdHVzCisgKgorICogVXNlIHdoZW4gYSBibG9jayBpc24ndCBhdmFpbGFibGUgdG8gcXVldWUgdGhlIG1lc3NhZ2UgdG8gYW5kIGNuLCBtc2cKKyAqIG1pZ2h0IG5vdCBiZSBjb250aWd1b3VzLgorICovCitzdGF0aWMgdm9pZCB3MV9uZXRsaW5rX3NlbmRfZXJyb3Ioc3RydWN0IGNuX21zZyAqY24sIHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqbXNnLAorCWludCBwb3J0aWQsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgY25fbXNnIGNuOworCQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOworCX0gcGFja2V0OworCW1lbWNweSgmcGFja2V0LmNuLCBjbiwgc2l6ZW9mKHBhY2tldC5jbikpOworCW1lbWNweSgmcGFja2V0Lm1zZywgbXNnLCBzaXplb2YocGFja2V0Lm1zZykpOworCXBhY2tldC5jbi5sZW4gPSBzaXplb2YocGFja2V0Lm1zZyk7CisJcGFja2V0Lm1zZy5sZW4gPSAwOworCXBhY2tldC5tc2cuc3RhdHVzID0gKHU4KS1lcnJvcjsKKwljbl9uZXRsaW5rX3NlbmQoJnBhY2tldC5jbiwgcG9ydGlkLCAwLCBHRlBfS0VSTkVMKTsKK30KKworLyoqCisgKiB3MV9uZXRsaW5rX3NlbmQoKSAtIHNlbmRzIHcxIG5ldGxpbmsgbm90aWZpY2F0aW9ucworICogQGRldjogdzFfbWFzdGVyIHRoZSBldmVuIGlzIGFzc29jaWF0ZWQgd2l0aCBvciBmb3IKKyAqIEBtc2c6IHcxX25ldGxpbmtfbXNnIG1lc3NhZ2UgdG8gYmUgc2VudAorICoKKyAqIFRoaXMgYXJlIG5vdGlmaWNhdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlIGtlcm5lbC4KKyAqLwogdm9pZCB3MV9uZXRsaW5rX3NlbmQoc3RydWN0IHcxX21hc3RlciAqZGV2LCBzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKm1zZykKIHsKLQljaGFyIGJ1ZltzaXplb2Yoc3RydWN0IGNuX21zZykgKyBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKV07Ci0Jc3RydWN0IGNuX21zZyAqbSA9IChzdHJ1Y3QgY25fbXNnICopYnVmOwotCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqdyA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKikobSsxKTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgY25fbXNnIGNuOworCQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOworCX0gcGFja2V0OworCW1lbXNldCgmcGFja2V0LCAwLCBzaXplb2YocGFja2V0KSk7CiAKLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJcGFja2V0LmNuLmlkLmlkeCA9IENOX1cxX0lEWDsKKwlwYWNrZXQuY24uaWQudmFsID0gQ05fVzFfVkFMOwogCi0JbS0+aWQuaWR4ID0gQ05fVzFfSURYOwotCW0tPmlkLnZhbCA9IENOX1cxX1ZBTDsKKwlwYWNrZXQuY24uc2VxID0gZGV2LT5zZXErKzsKKwlwYWNrZXQuY24ubGVuID0gc2l6ZW9mKCptc2cpOwogCi0JbS0+c2VxID0gZGV2LT5zZXErKzsKLQltLT5sZW4gPSBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKTsKKwltZW1jcHkoJnBhY2tldC5tc2csIG1zZywgc2l6ZW9mKCptc2cpKTsKKwlwYWNrZXQubXNnLmxlbiA9IDA7CiAKLQltZW1jcHkodywgbXNnLCBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSk7Ci0KLQljbl9uZXRsaW5rX3NlbmQobSwgZGV2LT5wb3J0aWQsIDAsIEdGUF9LRVJORUwpOworCWNuX25ldGxpbmtfc2VuZCgmcGFja2V0LmNuLCAwLCAwLCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIHZvaWQgdzFfc2VuZF9zbGF2ZShzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIHU2NCBybikKIHsKLQlzdHJ1Y3QgY25fbXNnICptc2cgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHcxX25ldGxpbmtfbXNnICpoZHIgPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKG1zZyArIDEpOwotCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqY21kID0gKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqKShoZHIgKyAxKTsKLQlpbnQgYXZhaWw7CisJc3RydWN0IHcxX2NiX2Jsb2NrICpibG9jayA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNhY2hlX2NtZCA9IGJsb2NrLT5jbWQ7CiAJdTY0ICpkYXRhOwogCi0JYXZhaWwgPSBkZXYtPnByaXZfc2l6ZSAtIGNtZC0+bGVuOworCXcxX3JlcGx5X21ha2Vfc3BhY2UoYmxvY2ssIHNpemVvZigqZGF0YSkpOwogCi0JaWYgKGF2YWlsIDwgOCkgewotCQltc2ctPmFjaysrOwotCQljbl9uZXRsaW5rX3NlbmQobXNnLCBkZXYtPnBvcnRpZCwgMCwgR0ZQX0tFUk5FTCk7Ci0KLQkJbXNnLT5sZW4gPSBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSArCi0JCQlzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfY21kKTsKLQkJaGRyLT5sZW4gPSBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfY21kKTsKLQkJY21kLT5sZW4gPSAwOworCS8qIEFkZCBjbWQgYmFjayBpZiB0aGUgcGFja2V0IHdhcyBzZW50ICovCisJaWYgKCFibG9jay0+Y21kKSB7CisJCWNhY2hlX2NtZC0+bGVuID0gMDsKKwkJdzFfbmV0bGlua19xdWV1ZV9jbWQoYmxvY2ssIGNhY2hlX2NtZCk7CiAJfQogCi0JZGF0YSA9ICh2b2lkICopKGNtZCArIDEpICsgY21kLT5sZW47CisJZGF0YSA9ICh1NjQgKikoYmxvY2stPmNtZC0+ZGF0YSArIGJsb2NrLT5jbWQtPmxlbik7CiAKIAkqZGF0YSA9IHJuOwotCWNtZC0+bGVuICs9IDg7Ci0JaGRyLT5sZW4gKz0gODsKLQltc2ctPmxlbiArPSA4OworCWJsb2NrLT5jbi0+bGVuICs9IHNpemVvZigqZGF0YSk7CisJYmxvY2stPm1zZy0+bGVuICs9IHNpemVvZigqZGF0YSk7CisJYmxvY2stPmNtZC0+bGVuICs9IHNpemVvZigqZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHcxX2ZvdW5kX3NlbmRfc2xhdmUoc3RydWN0IHcxX21hc3RlciAqZGV2LCB1NjQgcm4pCkBAIC04NSw0MCArMjgxLDE1IEBACiB9CiAKIC8qIEdldCB0aGUgY3VycmVudCBzbGF2ZSBsaXN0LCBvciBzZWFyY2ggKHdpdGggb3Igd2l0aG91dCBhbGFybSkgKi8KLXN0YXRpYyBpbnQgdzFfZ2V0X3NsYXZlcyhzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsCi0JCXN0cnVjdCBjbl9tc2cgKnJlcV9tc2csIHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqcmVxX2hkciwKLQkJc3RydWN0IHcxX25ldGxpbmtfY21kICpyZXFfY21kKQorc3RhdGljIGludCB3MV9nZXRfc2xhdmVzKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgc3RydWN0IHcxX25ldGxpbmtfY21kICpyZXFfY21kKQogewotCXN0cnVjdCBjbl9tc2cgKm1zZzsKLQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKmhkcjsKLQlzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNtZDsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsOwogCi0JbXNnID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghbXNnKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1zZy0+aWQgPSByZXFfbXNnLT5pZDsKLQltc2ctPnNlcSA9IHJlcV9tc2ctPnNlcTsKLQltc2ctPmFjayA9IDA7Ci0JbXNnLT5sZW4gPSBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSArCi0JCXNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19jbWQpOwotCi0JaGRyID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKShtc2cgKyAxKTsKLQljbWQgPSAoc3RydWN0IHcxX25ldGxpbmtfY21kICopKGhkciArIDEpOwotCi0JaGRyLT50eXBlID0gVzFfTUFTVEVSX0NNRDsKLQloZHItPmlkID0gcmVxX2hkci0+aWQ7Ci0JaGRyLT5sZW4gPSBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfY21kKTsKLQotCWNtZC0+Y21kID0gcmVxX2NtZC0+Y21kOwotCWNtZC0+bGVuID0gMDsKLQotCWRldi0+cHJpdiA9IG1zZzsKLQlkZXYtPnByaXZfc2l6ZSA9IFBBR0VfU0laRSAtIG1zZy0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOworCXJlcV9jbWQtPmxlbiA9IDA7CisJdzFfbmV0bGlua19xdWV1ZV9jbWQoZGV2LT5wcml2LCByZXFfY21kKTsKIAogCWlmIChyZXFfY21kLT5jbWQgPT0gVzFfQ01EX0xJU1RfU0xBVkVTKSB7Ci0JCV9fdTY0IHJuOworCQl1NjQgcm47CiAJCW11dGV4X2xvY2soJmRldi0+bGlzdF9tdXRleCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2wsICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgewogCQkJbWVtY3B5KCZybiwgJnNsLT5yZWdfbnVtLCBzaXplb2Yocm4pKTsKQEAgLTEyNiw3MyArMjk3LDI2IEBACiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxpc3RfbXV0ZXgpOwogCX0gZWxzZSB7Ci0JCXcxX3NlYXJjaF9wcm9jZXNzX2NiKGRldiwgY21kLT5jbWQgPT0gVzFfQ01EX0FMQVJNX1NFQVJDSCA/CisJCXcxX3NlYXJjaF9wcm9jZXNzX2NiKGRldiwgcmVxX2NtZC0+Y21kID09IFcxX0NNRF9BTEFSTV9TRUFSQ0ggPwogCQkJVzFfQUxBUk1fU0VBUkNIIDogVzFfU0VBUkNILCB3MV9mb3VuZF9zZW5kX3NsYXZlKTsKIAl9CiAKLQltc2ctPmFjayA9IDA7Ci0JY25fbmV0bGlua19zZW5kKG1zZywgZGV2LT5wb3J0aWQsIDAsIEdGUF9LRVJORUwpOwotCi0JZGV2LT5wcml2ID0gTlVMTDsKLQlkZXYtPnByaXZfc2l6ZSA9IDA7Ci0KLQlrZnJlZShtc2cpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdzFfc2VuZF9yZWFkX3JlcGx5KHN0cnVjdCBjbl9tc2cgKm1zZywgc3RydWN0IHcxX25ldGxpbmtfbXNnICpoZHIsCi0JCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqY21kLCB1MzIgcG9ydGlkKQotewotCXZvaWQgKmRhdGE7Ci0Jc3RydWN0IHcxX25ldGxpbmtfbXNnICpoOwotCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqYzsKLQlzdHJ1Y3QgY25fbXNnICpjbTsKLQlpbnQgZXJyOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbl9tc2cpICsKLQkJCXNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19tc2cpICsKLQkJCXNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19jbWQpICsKLQkJCWNtZC0+bGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY20gPSAoc3RydWN0IGNuX21zZyAqKShkYXRhKTsKLQloID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKShjbSArIDEpOwotCWMgPSAoc3RydWN0IHcxX25ldGxpbmtfY21kICopKGggKyAxKTsKLQotCW1lbWNweShjbSwgbXNnLCBzaXplb2Yoc3RydWN0IGNuX21zZykpOwotCW1lbWNweShoLCBoZHIsIHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19tc2cpKTsKLQltZW1jcHkoYywgY21kLCBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfY21kKSk7Ci0KLQljbS0+YWNrID0gbXNnLT5zZXErMTsKLQljbS0+bGVuID0gc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgKwotCQlzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfY21kKSArIGNtZC0+bGVuOwotCi0JaC0+bGVuID0gc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCkgKyBjbWQtPmxlbjsKLQotCW1lbWNweShjLT5kYXRhLCBjbWQtPmRhdGEsIGMtPmxlbik7Ci0KLQllcnIgPSBjbl9uZXRsaW5rX3NlbmQoY20sIHBvcnRpZCwgMCwgR0ZQX0tFUk5FTCk7Ci0KLQlrZnJlZShkYXRhKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdzFfcHJvY2Vzc19jb21tYW5kX2lvKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgc3RydWN0IGNuX21zZyAqbXNnLAotCQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKmhkciwgc3RydWN0IHcxX25ldGxpbmtfY21kICpjbWQpCitzdGF0aWMgaW50IHcxX3Byb2Nlc3NfY29tbWFuZF9pbyhzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsCisJc3RydWN0IHcxX25ldGxpbmtfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7CiAKIAlzd2l0Y2ggKGNtZC0+Y21kKSB7CiAJY2FzZSBXMV9DTURfVE9VQ0g6CiAJCXcxX3RvdWNoX2Jsb2NrKGRldiwgY21kLT5kYXRhLCBjbWQtPmxlbik7Ci0JCXcxX3NlbmRfcmVhZF9yZXBseShtc2csIGhkciwgY21kLCBkZXYtPnBvcnRpZCk7CisJCXcxX25ldGxpbmtfcXVldWVfY21kKGRldi0+cHJpdiwgY21kKTsKIAkJYnJlYWs7CiAJY2FzZSBXMV9DTURfUkVBRDoKIAkJdzFfcmVhZF9ibG9jayhkZXYsIGNtZC0+ZGF0YSwgY21kLT5sZW4pOwotCQl3MV9zZW5kX3JlYWRfcmVwbHkobXNnLCBoZHIsIGNtZCwgZGV2LT5wb3J0aWQpOworCQl3MV9uZXRsaW5rX3F1ZXVlX2NtZChkZXYtPnByaXYsIGNtZCk7CiAJCWJyZWFrOwogCWNhc2UgVzFfQ01EX1dSSVRFOgogCQl3MV93cml0ZV9ibG9jayhkZXYsIGNtZC0+ZGF0YSwgY21kLT5sZW4pOwpAQCAtMjA2LDE0ICszMzAsMTMgQEAKIH0KIAogc3RhdGljIGludCB3MV9wcm9jZXNzX2NvbW1hbmRfYWRkcmVtb3ZlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwKLQlzdHJ1Y3QgY25fbXNnICptc2csIHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqaGRyLAogCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqY21kKQogewogCXN0cnVjdCB3MV9zbGF2ZSAqc2w7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHcxX3JlZ19udW0gKmlkOwogCi0JaWYgKGNtZC0+bGVuICE9IDgpCisJaWYgKGNtZC0+bGVuICE9IHNpemVvZigqaWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlkID0gKHN0cnVjdCB3MV9yZWdfbnVtICopY21kLT5kYXRhOwpAQCAtMjQxLDcgKzM2NCw2IEBACiB9CiAKIHN0YXRpYyBpbnQgdzFfcHJvY2Vzc19jb21tYW5kX21hc3RlcihzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsCi0Jc3RydWN0IGNuX21zZyAqcmVxX21zZywgc3RydWN0IHcxX25ldGxpbmtfbXNnICpyZXFfaGRyLAogCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqcmVxX2NtZCkKIHsKIAlpbnQgZXJyID0gLUVJTlZBTDsKQEAgLTI1NCwxMyArMzc2LDEzIEBACiAJY2FzZSBXMV9DTURfQUxBUk1fU0VBUkNIOgogCWNhc2UgVzFfQ01EX0xJU1RfU0xBVkVTOgogCQltdXRleF91bmxvY2soJmRldi0+YnVzX211dGV4KTsKLQkJZXJyID0gdzFfZ2V0X3NsYXZlcyhkZXYsIHJlcV9tc2csIHJlcV9oZHIsIHJlcV9jbWQpOworCQllcnIgPSB3MV9nZXRfc2xhdmVzKGRldiwgcmVxX2NtZCk7CiAJCW11dGV4X2xvY2soJmRldi0+YnVzX211dGV4KTsKIAkJYnJlYWs7CiAJY2FzZSBXMV9DTURfUkVBRDoKIAljYXNlIFcxX0NNRF9XUklURToKIAljYXNlIFcxX0NNRF9UT1VDSDoKLQkJZXJyID0gdzFfcHJvY2Vzc19jb21tYW5kX2lvKGRldiwgcmVxX21zZywgcmVxX2hkciwgcmVxX2NtZCk7CisJCWVyciA9IHcxX3Byb2Nlc3NfY29tbWFuZF9pbyhkZXYsIHJlcV9jbWQpOwogCQlicmVhazsKIAljYXNlIFcxX0NNRF9SRVNFVDoKIAkJZXJyID0gdzFfcmVzZXRfYnVzKGRldik7CkBAIC0yNjksOCArMzkxLDcgQEAKIAljYXNlIFcxX0NNRF9TTEFWRV9SRU1PVkU6CiAJCW11dGV4X3VubG9jaygmZGV2LT5idXNfbXV0ZXgpOwogCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQkJZXJyID0gdzFfcHJvY2Vzc19jb21tYW5kX2FkZHJlbW92ZShkZXYsIHJlcV9tc2csIHJlcV9oZHIsCi0JCQlyZXFfY21kKTsKKwkJZXJyID0gdzFfcHJvY2Vzc19jb21tYW5kX2FkZHJlbW92ZShkZXYsIHJlcV9jbWQpOwogCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCQltdXRleF9sb2NrKCZkZXYtPmJ1c19tdXRleCk7CiAJCWJyZWFrOwpAQCAtMjgyLDIyICs0MDMsMjEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHcxX3Byb2Nlc3NfY29tbWFuZF9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsLCBzdHJ1Y3QgY25fbXNnICptc2csCi0JCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqaGRyLCBzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNtZCkKK3N0YXRpYyBpbnQgdzFfcHJvY2Vzc19jb21tYW5kX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wsCisJCXN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqY21kKQogewogCWRldl9kYmcoJnNsLT5tYXN0ZXItPmRldiwgIiVzOiAlMDJ4LiUwMTJsbHguJTAyeDogY21kPSUwMngsIGxlbj0ldS5cbiIsCiAJCV9fZnVuY19fLCBzbC0+cmVnX251bS5mYW1pbHksICh1bnNpZ25lZCBsb25nIGxvbmcpc2wtPnJlZ19udW0uaWQsCiAJCXNsLT5yZWdfbnVtLmNyYywgY21kLT5jbWQsIGNtZC0+bGVuKTsKIAotCXJldHVybiB3MV9wcm9jZXNzX2NvbW1hbmRfaW8oc2wtPm1hc3RlciwgbXNnLCBoZHIsIGNtZCk7CisJcmV0dXJuIHcxX3Byb2Nlc3NfY29tbWFuZF9pbyhzbC0+bWFzdGVyLCBjbWQpOwogfQogCi1zdGF0aWMgaW50IHcxX3Byb2Nlc3NfY29tbWFuZF9yb290KHN0cnVjdCBjbl9tc2cgKm1zZywKLQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKm1jbWQsIHUzMiBwb3J0aWQpCitzdGF0aWMgaW50IHcxX3Byb2Nlc3NfY29tbWFuZF9yb290KHN0cnVjdCBjbl9tc2cgKnJlcV9jbiwgdTMyIHBvcnRpZCkKIHsKLQlzdHJ1Y3QgdzFfbWFzdGVyICptOworCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIAlzdHJ1Y3QgY25fbXNnICpjbjsKLQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKnc7CisJc3RydWN0IHcxX25ldGxpbmtfbXNnICptc2c7CiAJdTMyICppZDsKIAogCWNuID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwpAQCAtMzA3LDMyICs0MjcsMzAgQEAKIAljbi0+aWQuaWR4ID0gQ05fVzFfSURYOwogCWNuLT5pZC52YWwgPSBDTl9XMV9WQUw7CiAKLQljbi0+c2VxID0gbXNnLT5zZXE7Ci0JY24tPmFjayA9IDE7CisJY24tPnNlcSA9IHJlcV9jbi0+c2VxOworCWNuLT5hY2sgPSByZXFfY24tPnNlcSArIDE7CiAJY24tPmxlbiA9IHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19tc2cpOwotCXcgPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKGNuICsgMSk7CisJbXNnID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKWNuLT5kYXRhOwogCi0Jdy0+dHlwZSA9IFcxX0xJU1RfTUFTVEVSUzsKLQl3LT5zdGF0dXMgPSAwOwotCXctPmxlbiA9IDA7Ci0JaWQgPSAodTMyICopKHcgKyAxKTsKKwltc2ctPnR5cGUgPSBXMV9MSVNUX01BU1RFUlM7CisJbXNnLT5zdGF0dXMgPSAwOworCW1zZy0+bGVuID0gMDsKKwlpZCA9ICh1MzIgKiltc2ctPmRhdGE7CiAKIAltdXRleF9sb2NrKCZ3MV9tbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZ3MV9tYXN0ZXJzLCB3MV9tYXN0ZXJfZW50cnkpIHsKIAkJaWYgKGNuLT5sZW4gKyBzaXplb2YoKmlkKSA+IFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKSkgewogCQkJY25fbmV0bGlua19zZW5kKGNuLCBwb3J0aWQsIDAsIEdGUF9LRVJORUwpOwotCQkJY24tPmFjaysrOwogCQkJY24tPmxlbiA9IHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19tc2cpOwotCQkJdy0+bGVuID0gMDsKLQkJCWlkID0gKHUzMiAqKSh3ICsgMSk7CisJCQltc2ctPmxlbiA9IDA7CisJCQlpZCA9ICh1MzIgKiltc2ctPmRhdGE7CiAJCX0KIAotCQkqaWQgPSBtLT5pZDsKLQkJdy0+bGVuICs9IHNpemVvZigqaWQpOworCQkqaWQgPSBkZXYtPmlkOworCQltc2ctPmxlbiArPSBzaXplb2YoKmlkKTsKIAkJY24tPmxlbiArPSBzaXplb2YoKmlkKTsKIAkJaWQrKzsKIAl9Ci0JY24tPmFjayA9IDA7CiAJY25fbmV0bGlua19zZW5kKGNuLCBwb3J0aWQsIDAsIEdGUF9LRVJORUwpOwogCW11dGV4X3VubG9jaygmdzFfbWxvY2spOwogCkBAIC0zNDAsMTAwICs0NTgsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3MV9uZXRsaW5rX3NlbmRfZXJyb3Ioc3RydWN0IGNuX21zZyAqcmNtc2csIHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqcm1zZywKLQkJc3RydWN0IHcxX25ldGxpbmtfY21kICpyY21kLCBpbnQgcG9ydGlkLCBpbnQgZXJyb3IpCi17Ci0Jc3RydWN0IGNuX21zZyAqY21zZzsKLQlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKm1zZzsKLQlzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNtZDsKLQotCWNtc2cgPSBremFsbG9jKHNpemVvZigqbXNnKSArIHNpemVvZigqY21kKSArIHNpemVvZigqY21zZyksIEdGUF9LRVJORUwpOwotCWlmICghY21zZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltc2cgPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKGNtc2cgKyAxKTsKLQljbWQgPSAoc3RydWN0IHcxX25ldGxpbmtfY21kICopKG1zZyArIDEpOwotCi0JbWVtY3B5KGNtc2csIHJjbXNnLCBzaXplb2YoKmNtc2cpKTsKLQljbXNnLT5sZW4gPSBzaXplb2YoKm1zZyk7Ci0KLQltZW1jcHkobXNnLCBybXNnLCBzaXplb2YoKm1zZykpOwotCW1zZy0+bGVuID0gMDsKLQltc2ctPnN0YXR1cyA9IChzaG9ydCktZXJyb3I7Ci0KLQlpZiAocmNtZCkgewotCQltZW1jcHkoY21kLCByY21kLCBzaXplb2YoKmNtZCkpOwotCQljbWQtPmxlbiA9IDA7Ci0JCW1zZy0+bGVuICs9IHNpemVvZigqY21kKTsKLQkJY21zZy0+bGVuICs9IHNpemVvZigqY21kKTsKLQl9Ci0KLQllcnJvciA9IGNuX25ldGxpbmtfc2VuZChjbXNnLCBwb3J0aWQsIDAsIEdGUF9LRVJORUwpOwotCWtmcmVlKGNtc2cpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBCdW5kbGUgdG9nZXRoZXIgYSByZWZlcmVuY2UgY291bnQsIHRoZSBmdWxsIG1lc3NhZ2UsIGFuZCBicm9rZW4gb3V0Ci0gKiBjb21tYW5kcyB0byBiZSBleGVjdXRlZCBvbiBlYWNoIHcxIG1hc3RlciBrdGhyZWFkIGluIG9uZSBtZW1vcnkgYWxsb2NhdGlvbi4KLSAqLwotc3RydWN0IHcxX2NiX2Jsb2NrIHsKLQlhdG9taWNfdCByZWZjbnQ7Ci0JdTMyIHBvcnRpZDsgLyogU2VuZGluZyBwcm9jZXNzIHBvcnQgSUQgKi8KLQlzdHJ1Y3QgY25fbXNnIG1zZzsKLQkvKiBjbl9tc2cgZGF0YSAqLwotCS8qIG9uZSBvciBtb3JlIHZhcmlhYmxlIGxlbmd0aCBzdHJ1Y3QgdzFfY2Jfbm9kZSAqLwotfTsKLXN0cnVjdCB3MV9jYl9ub2RlIHsKLQlzdHJ1Y3QgdzFfYXN5bmNfY21kIGFzeW5jOwotCS8qIHBvaW50ZXJzIHdpdGhpbiB3MV9jYl9ibG9jayBhbmQgbXNnIGRhdGEgKi8KLQlzdHJ1Y3QgdzFfY2JfYmxvY2sgKmJsb2NrOwotCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqbTsKLQlzdHJ1Y3QgdzFfc2xhdmUgKnNsOwotCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKLX07Ci0KIHN0YXRpYyB2b2lkIHcxX3Byb2Nlc3NfY2Ioc3RydWN0IHcxX21hc3RlciAqZGV2LCBzdHJ1Y3QgdzFfYXN5bmNfY21kICphc3luY19jbWQpCiB7CiAJc3RydWN0IHcxX2NiX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoYXN5bmNfY21kLCBzdHJ1Y3QgdzFfY2Jfbm9kZSwKIAkJYXN5bmMpOwotCXUxNiBtbGVuID0gbm9kZS0+bS0+bGVuOwotCXU4ICpjbWRfZGF0YSA9IG5vZGUtPm0tPmRhdGE7CisJdTE2IG1sZW4gPSBub2RlLT5tc2ctPmxlbjsKKwl1MTYgbGVuOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBub2RlLT5zbDsKLQlzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNtZCA9IE5VTEw7CisJc3RydWN0IHcxX25ldGxpbmtfY21kICpjbWQgPSAoc3RydWN0IHcxX25ldGxpbmtfY21kICopbm9kZS0+bXNnLT5kYXRhOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5idXNfbXV0ZXgpOwotCWRldi0+cG9ydGlkID0gbm9kZS0+YmxvY2stPnBvcnRpZDsKKwlkZXYtPnByaXYgPSBub2RlLT5ibG9jazsKIAlpZiAoc2wgJiYgdzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkKIAkJZXJyID0gLUVOT0RFVjsKKwlub2RlLT5ibG9jay0+Y3VyX21zZyA9IG5vZGUtPm1zZzsKIAogCXdoaWxlIChtbGVuICYmICFlcnIpIHsKLQkJY21kID0gKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqKWNtZF9kYXRhOwotCiAJCWlmIChjbWQtPmxlbiArIHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19jbWQpID4gbWxlbikgewogCQkJZXJyID0gLUUyQklHOwogCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoc2wpCi0JCQllcnIgPSB3MV9wcm9jZXNzX2NvbW1hbmRfc2xhdmUoc2wsICZub2RlLT5ibG9jay0+bXNnLAotCQkJCW5vZGUtPm0sIGNtZCk7CisJCQllcnIgPSB3MV9wcm9jZXNzX2NvbW1hbmRfc2xhdmUoc2wsIGNtZCk7CiAJCWVsc2UKLQkJCWVyciA9IHcxX3Byb2Nlc3NfY29tbWFuZF9tYXN0ZXIoZGV2LCAmbm9kZS0+YmxvY2stPm1zZywKLQkJCQlub2RlLT5tLCBjbWQpOworCQkJZXJyID0gdzFfcHJvY2Vzc19jb21tYW5kX21hc3RlcihkZXYsIGNtZCk7CisJCXcxX25ldGxpbmtfY2hlY2tfc2VuZChub2RlLT5ibG9jayk7CiAKLQkJdzFfbmV0bGlua19zZW5kX2Vycm9yKCZub2RlLT5ibG9jay0+bXNnLCBub2RlLT5tLCBjbWQsCi0JCQlub2RlLT5ibG9jay0+cG9ydGlkLCBlcnIpOworCQl3MV9uZXRsaW5rX3F1ZXVlX3N0YXR1cyhub2RlLT5ibG9jaywgbm9kZS0+bXNnLCBjbWQsIGVycik7CiAJCWVyciA9IDA7CiAKLQkJY21kX2RhdGEgKz0gY21kLT5sZW4gKyBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfY21kKTsKLQkJbWxlbiAtPSBjbWQtPmxlbiArIHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19jbWQpOworCQlsZW4gPSBzaXplb2YoKmNtZCkgKyBjbWQtPmxlbjsKKwkJY21kID0gKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqKSgodTggKiljbWQgKyBsZW4pOworCQltbGVuIC09IGxlbjsKIAl9CiAKIAlpZiAoIWNtZCB8fCBlcnIpCi0JCXcxX25ldGxpbmtfc2VuZF9lcnJvcigmbm9kZS0+YmxvY2stPm1zZywgbm9kZS0+bSwgY21kLAotCQkJbm9kZS0+YmxvY2stPnBvcnRpZCwgZXJyKTsKKwkJdzFfbmV0bGlua19xdWV1ZV9zdGF0dXMobm9kZS0+YmxvY2ssIG5vZGUtPm1zZywgY21kLCBlcnIpOwogCiAJLyogcmVmIHRha2VuIGluIHcxX3NlYXJjaF9zbGF2ZSBvciB3MV9zZWFyY2hfbWFzdGVyX2lkIHdoZW4gYnVpbGRpbmcKIAkgKiB0aGUgYmxvY2sKQEAgLTQ0Miw5OSArNTA0LDE4NiBAQAogCQl3MV91bnJlZl9zbGF2ZShzbCk7CiAJZWxzZQogCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7Ci0JZGV2LT5wb3J0aWQgPSAwOworCWRldi0+cHJpdiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmJ1c19tdXRleCk7CiAKIAltdXRleF9sb2NrKCZkZXYtPmxpc3RfbXV0ZXgpOwogCWxpc3RfZGVsKCZhc3luY19jbWQtPmFzeW5jX2VudHJ5KTsKIAltdXRleF91bmxvY2soJmRldi0+bGlzdF9tdXRleCk7CiAKLQlpZiAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgJm5vZGUtPmJsb2NrLT5yZWZjbnQpID09IDApCi0JCWtmcmVlKG5vZGUtPmJsb2NrKTsKKwl3MV91bnJlZl9ibG9jayhub2RlLT5ibG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX2NuX2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZywgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpuc3ApCitzdGF0aWMgdm9pZCB3MV9saXN0X2NvdW50X2NtZHMoc3RydWN0IHcxX25ldGxpbmtfbXNnICptc2csIGludCAqY21kX2NvdW50LAorCXUxNiAqc2xhdmVfbGVuKQogewotCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqbSA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKikobXNnICsgMSk7CisJc3RydWN0IHcxX25ldGxpbmtfY21kICpjbWQgPSAoc3RydWN0IHcxX25ldGxpbmtfY21kICopbXNnLT5kYXRhOworCXUxNiBtbGVuID0gbXNnLT5sZW47CisJdTE2IGxlbjsKKwlpbnQgc2xhdmVfbGlzdCA9IDA7CisJd2hpbGUgKG1sZW4pIHsKKwkJaWYgKGNtZC0+bGVuICsgc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCkgPiBtbGVuKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChjbWQtPmNtZCkgeworCQljYXNlIFcxX0NNRF9TRUFSQ0g6CisJCWNhc2UgVzFfQ01EX0FMQVJNX1NFQVJDSDoKKwkJY2FzZSBXMV9DTURfTElTVF9TTEFWRVM6CisJCQkrK3NsYXZlX2xpc3Q7CisJCX0KKwkJKysqY21kX2NvdW50OworCQlsZW4gPSBzaXplb2YoKmNtZCkgKyBjbWQtPmxlbjsKKwkJY21kID0gKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAqKSgodTggKiljbWQgKyBsZW4pOworCQltbGVuIC09IGxlbjsKKwl9CisKKwlpZiAoc2xhdmVfbGlzdCkgeworCQlzdHJ1Y3QgdzFfbWFzdGVyICpkZXYgPSB3MV9zZWFyY2hfbWFzdGVyX2lkKG1zZy0+aWQubXN0LmlkKTsKKwkJaWYgKGRldikgeworCQkJLyogQnl0ZXMsIGFuZCBsaWtlbHkgYW4gb3ZlcnN0aW1hdGUsIGFuZCBpZiBpdCBpc24ndAorCQkJICogdGhlIHJlc3VsdHMgY2FuIHN0aWxsIGJlIHNwbGl0IGJldHdlZW4gcGFja2V0cy4KKwkJCSAqLworCQkJKnNsYXZlX2xlbiArPSBzaXplb2Yoc3RydWN0IHcxX3JlZ19udW0pICogc2xhdmVfbGlzdCAqCisJCQkJKGRldi0+c2xhdmVfY291bnQgKyBkZXYtPm1heF9zbGF2ZV9jb3VudCk7CisJCQkvKiBzZWFyY2ggaW5jcmVtZW50ZWQgaXQgKi8KKwkJCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdzFfY25fY2FsbGJhY2soc3RydWN0IGNuX21zZyAqY24sIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqbnNwKQoreworCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqbXNnID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKShjbiArIDEpOwogCXN0cnVjdCB3MV9zbGF2ZSAqc2w7CiAJc3RydWN0IHcxX21hc3RlciAqZGV2OwogCXUxNiBtc2dfbGVuOworCXUxNiBzbGF2ZV9sZW4gPSAwOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCB3MV9jYl9ibG9jayAqYmxvY2sgPSBOVUxMOwogCXN0cnVjdCB3MV9jYl9ub2RlICpub2RlID0gTlVMTDsKIAlpbnQgbm9kZV9jb3VudCA9IDA7CisJaW50IGNtZF9jb3VudCA9IDA7CisKKwkvKiBJZiBhbnkgdW5rbm93biBmbGFnIGlzIHNldCBsZXQgdGhlIGFwcGxpY2F0aW9uIGtub3csIHRoYXQgd2F5CisJICogYXBwbGljYXRpb25zIGNhbiBkZXRlY3QgdGhlIGFic2VuY2Ugb2YgZmVhdHVyZXMgaW4ga2VybmVscyB0aGF0CisJICogZG9uJ3Qga25vdyBhYm91dCB0aGVtLiAgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvNTg3NTI3LworCSAqLworCWlmIChjbi0+ZmxhZ3MgJiB+KFcxX0NOX0JVTkRMRSkpIHsKKwkJdzFfbmV0bGlua19zZW5kX2Vycm9yKGNuLCBtc2csIG5zcC0+cG9ydGlkLCAtRUlOVkFMKTsKKwkJcmV0dXJuOworCX0KIAogCS8qIENvdW50IHRoZSBudW1iZXIgb2YgbWFzdGVyIG9yIHNsYXZlIGNvbW1hbmRzIHRoZXJlIGFyZSB0byBhbGxvY2F0ZQogCSAqIHNwYWNlIGZvciBvbmUgY2Jfbm9kZSBlYWNoLgogCSAqLwotCW1zZ19sZW4gPSBtc2ctPmxlbjsKKwltc2dfbGVuID0gY24tPmxlbjsKIAl3aGlsZSAobXNnX2xlbiAmJiAhZXJyKSB7Ci0JCWlmIChtLT5sZW4gKyBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSA+IG1zZ19sZW4pIHsKKwkJaWYgKG1zZy0+bGVuICsgc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgPiBtc2dfbGVuKSB7CiAJCQllcnIgPSAtRTJCSUc7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChtLT50eXBlID09IFcxX01BU1RFUl9DTUQgfHwgbS0+dHlwZSA9PSBXMV9TTEFWRV9DTUQpCisJCS8qIGNvdW50IG1lc3NhZ2VzIGZvciBub2RlcyBhbmQgYWxsb2NhdGUgYW55IGFkZGl0aW9uYWwgc3BhY2UKKwkJICogcmVxdWlyZWQgZm9yIHNsYXZlIGxpc3RzCisJCSAqLworCQlpZiAobXNnLT50eXBlID09IFcxX01BU1RFUl9DTUQgfHwgbXNnLT50eXBlID09IFcxX1NMQVZFX0NNRCkgewogCQkJKytub2RlX2NvdW50OworCQkJdzFfbGlzdF9jb3VudF9jbWRzKG1zZywgJmNtZF9jb3VudCwgJnNsYXZlX2xlbik7CisJCX0KIAotCQltc2dfbGVuIC09IHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19tc2cpICsgbS0+bGVuOwotCQltID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKSgoKHU4ICopbSkgKwotCQkJc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgKyBtLT5sZW4pOworCQltc2dfbGVuIC09IHNpemVvZihzdHJ1Y3QgdzFfbmV0bGlua19tc2cpICsgbXNnLT5sZW47CisJCW1zZyA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKikoKCh1OCAqKW1zZykgKworCQkJc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgKyBtc2ctPmxlbik7CiAJfQotCW0gPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKG1zZyArIDEpOworCW1zZyA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKikoY24gKyAxKTsKIAlpZiAobm9kZV9jb3VudCkgewotCQkvKiBtc2ctPmxlbiBkb2Vzbid0IGluY2x1ZGUgaXRzZWxmICovCi0JCWxvbmcgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdzFfY2JfYmxvY2spICsgbXNnLT5sZW4gKwotCQkJbm9kZV9jb3VudCpzaXplb2Yoc3RydWN0IHcxX2NiX25vZGUpOwotCQlibG9jayA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWludCBzaXplOworCQl1MTYgcmVwbHlfc2l6ZSA9IHNpemVvZigqY24pICsgY24tPmxlbiArIHNsYXZlX2xlbjsKKwkJaWYgKGNuLT5mbGFncyAmIFcxX0NOX0JVTkRMRSkgeworCQkJLyogYnVuZGxpbmcgZHVwbGljYXRzIHNvbWUgb2YgdGhlIG1lc3NhZ2VzICovCisJCQlyZXBseV9zaXplICs9IDIgKiBjbWRfY291bnQgKiAoc2l6ZW9mKHN0cnVjdCBjbl9tc2cpICsKKwkJCQlzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSArCisJCQkJc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX2NtZCkpOworCQl9CisJCXJlcGx5X3NpemUgPSBNSU4oQ09OTkVDVE9SX01BWF9NU0dfU0laRSwgcmVwbHlfc2l6ZSk7CisKKwkJLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBibG9jaywgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXNzYWdlLAorCQkgKiBvbmUgbm9kZSBwZXIgY21kIHRvIHBvaW50IGludG8gdGhlIG9yaWdpbmFsIG1lc3NhZ2UsCisJCSAqIHNwYWNlIGZvciByZXBsaWVzIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHNpemUgcGx1cworCQkgKiBzcGFjZSBmb3IgYW55IGxpc3Qgc2xhdmUgZGF0YSBhbmQgc3RhdHVzIG1lc3NhZ2VzCisJCSAqIGNuLT5sZW4gZG9lc24ndCBpbmNsdWRlIGl0c2VsZiB3aGljaCBpcyBwYXJ0IG9mIHRoZSBibG9jaworCQkgKiAqLworCQlzaXplID0gIC8qIGJsb2NrICsgb3JpZ2luYWwgbWVzc2FnZSAqLworCQkJc2l6ZW9mKHN0cnVjdCB3MV9jYl9ibG9jaykgKyBzaXplb2YoKmNuKSArIGNuLT5sZW4gKworCQkJLyogc3BhY2UgZm9yIG5vZGVzICovCisJCQlub2RlX2NvdW50ICogc2l6ZW9mKHN0cnVjdCB3MV9jYl9ub2RlKSArCisJCQkvKiByZXBsaWVzICovCisJCQlzaXplb2Yoc3RydWN0IGNuX21zZykgKyByZXBseV9zaXplOworCQlibG9jayA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYmxvY2spIHsKLQkJCXcxX25ldGxpbmtfc2VuZF9lcnJvcihtc2csIG0sIE5VTEwsIG5zcC0+cG9ydGlkLAotCQkJCS1FTk9NRU0pOworCQkJLyogaWYgdGhlIHN5c3RlbSBpcyBhbHJlYWR5IG91dCBvZiBtZW1vcnksCisJCQkgKiAoQSkgd2lsbCB0aGlzIHdvcmssIGFuZCAoQikgd291bGQgaXQgYmUgYmV0dGVyCisJCQkgKiB0byBub3QgdHJ5PworCQkJICovCisJCQl3MV9uZXRsaW5rX3NlbmRfZXJyb3IoY24sIG1zZywgbnNwLT5wb3J0aWQsIC1FTk9NRU0pOwogCQkJcmV0dXJuOwogCQl9CiAJCWF0b21pY19zZXQoJmJsb2NrLT5yZWZjbnQsIDEpOwogCQlibG9jay0+cG9ydGlkID0gbnNwLT5wb3J0aWQ7Ci0JCW1lbWNweSgmYmxvY2stPm1zZywgbXNnLCBzaXplb2YoKm1zZykgKyBtc2ctPmxlbik7Ci0JCW5vZGUgPSAoc3RydWN0IHcxX2NiX25vZGUgKikoKHU4ICopYmxvY2stPm1zZy5kYXRhICsgbXNnLT5sZW4pOworCQltZW1jcHkoJmJsb2NrLT5yZXF1ZXN0X2NuLCBjbiwgc2l6ZW9mKCpjbikgKyBjbi0+bGVuKTsKKwkJbm9kZSA9IChzdHJ1Y3QgdzFfY2Jfbm9kZSAqKShibG9jay0+cmVxdWVzdF9jbi5kYXRhICsgY24tPmxlbik7CisKKwkJLyogU25lZWt5LCB3aGVuIG5vdCBidW5kbGluZywgcmVwbHlfc2l6ZSBpcyB0aGUgYWxsb2NhdGVkIHNwYWNlCisJCSAqIHJlcXVpcmVkIGZvciB0aGUgcmVwbHksIGNuX21zZyBpc24ndCBwYXJ0IG9mIG1heGxlbiBzbworCQkgKiBpdCBzaG91bGQgYmUgcmVwbHlfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKSwgaG93ZXZlcgorCQkgKiB3aGVuIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZSwgdzFfcmVwbHlfbWFrZV9zcGFjZQorCQkgKiBpcyBjYWxsZWQgd2l0aCB0aGUgZnVsbCBtZXNzYWdlIHNpemUgaW5jbHVkaW5nIGNuX21zZywKKwkJICogYmVjYXVzZSBpdCBpc24ndCBrbm93biBhdCB0aGF0IHRpbWUgaWYgYW4gYWRkaXRpb25hbCBjbl9tc2cKKwkJICogd2lsbCBuZWVkIHRvIGJlIGFsbG9jYXRlZC4gIFNvIGFuIGV4dHJhIGNuX21zZyBpcyBhZGRlZAorCQkgKiBhYm92ZSBpbiAic2l6ZSIuCisJCSAqLworCQlibG9jay0+bWF4bGVuID0gcmVwbHlfc2l6ZTsKKwkJYmxvY2stPmZpcnN0X2NuID0gKHN0cnVjdCBjbl9tc2cgKikobm9kZSArIG5vZGVfY291bnQpOworCQltZW1zZXQoYmxvY2stPmZpcnN0X2NuLCAwLCBzaXplb2YoKmJsb2NrLT5maXJzdF9jbikpOwogCX0KIAotCW1zZ19sZW4gPSBtc2ctPmxlbjsKKwltc2dfbGVuID0gY24tPmxlbjsKIAl3aGlsZSAobXNnX2xlbiAmJiAhZXJyKSB7CiAKIAkJZGV2ID0gTlVMTDsKIAkJc2wgPSBOVUxMOwogCi0JCWlmIChtLT5sZW4gKyBzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSA+IG1zZ19sZW4pIHsKKwkJaWYgKG1zZy0+bGVuICsgc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgPiBtc2dfbGVuKSB7CiAJCQllcnIgPSAtRTJCSUc7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIGV4ZWN1dGUgb24gdGhpcyB0aHJlYWQsIG5vIG5lZWQgdG8gcHJvY2VzcyBsYXRlciAqLwotCQlpZiAobS0+dHlwZSA9PSBXMV9MSVNUX01BU1RFUlMpIHsKLQkJCWVyciA9IHcxX3Byb2Nlc3NfY29tbWFuZF9yb290KG1zZywgbSwgbnNwLT5wb3J0aWQpOworCQlpZiAobXNnLT50eXBlID09IFcxX0xJU1RfTUFTVEVSUykgeworCQkJZXJyID0gdzFfcHJvY2Vzc19jb21tYW5kX3Jvb3QoY24sIG5zcC0+cG9ydGlkKTsKIAkJCWdvdG8gb3V0X2NvbnQ7CiAJCX0KIAogCQkvKiBBbGwgZm9sbG93aW5nIG1lc3NhZ2UgdHlwZXMgcmVxdWlyZSBhZGRpdGlvbmFsIGRhdGEsCiAJCSAqIGNoZWNrIGhlcmUgYmVmb3JlIHJlZmVyZW5jZXMgYXJlIHRha2VuLgogCQkgKi8KLQkJaWYgKCFtLT5sZW4pIHsKKwkJaWYgKCFtc2ctPmxlbikgewogCQkJZXJyID0gLUVQUk9UTzsKIAkJCWdvdG8gb3V0X2NvbnQ7CiAJCX0KIAotCQkvKiBib3RoIHNlYXJjaCBjYWxscyB0YWtlIHJlZmVyZW5jZSBjb3VudHMgKi8KLQkJaWYgKG0tPnR5cGUgPT0gVzFfTUFTVEVSX0NNRCkgewotCQkJZGV2ID0gdzFfc2VhcmNoX21hc3Rlcl9pZChtLT5pZC5tc3QuaWQpOwotCQl9IGVsc2UgaWYgKG0tPnR5cGUgPT0gVzFfU0xBVkVfQ01EKSB7Ci0JCQlzbCA9IHcxX3NlYXJjaF9zbGF2ZSgoc3RydWN0IHcxX3JlZ19udW0gKiltLT5pZC5pZCk7CisJCS8qIGJvdGggc2VhcmNoIGNhbGxzIHRha2UgcmVmZXJlbmNlcyAqLworCQlpZiAobXNnLT50eXBlID09IFcxX01BU1RFUl9DTUQpIHsKKwkJCWRldiA9IHcxX3NlYXJjaF9tYXN0ZXJfaWQobXNnLT5pZC5tc3QuaWQpOworCQl9IGVsc2UgaWYgKG1zZy0+dHlwZSA9PSBXMV9TTEFWRV9DTUQpIHsKKwkJCXNsID0gdzFfc2VhcmNoX3NsYXZlKChzdHJ1Y3QgdzFfcmVnX251bSAqKW1zZy0+aWQuaWQpOwogCQkJaWYgKHNsKQogCQkJCWRldiA9IHNsLT5tYXN0ZXI7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCQkiJXM6IG1zZzogJXguJXgsIHdyb25nIHR5cGU6ICV1LCBsZW46ICV1LlxuIiwKLQkJCQlfX2Z1bmNfXywgbXNnLT5pZC5pZHgsIG1zZy0+aWQudmFsLAotCQkJCW0tPnR5cGUsIG0tPmxlbik7CisJCQkJIiVzOiBjbjogJXguJXgsIHdyb25nIHR5cGU6ICV1LCBsZW46ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgY24tPmlkLmlkeCwgY24tPmlkLnZhbCwKKwkJCQltc2ctPnR5cGUsIG1zZy0+bGVuKTsKIAkJCWVyciA9IC1FUFJPVE87CiAJCQlnb3RvIG91dF9jb250OwogCQl9CkBAIC01NDksOCArNjk4LDggQEAKIAkJYXRvbWljX2luYygmYmxvY2stPnJlZmNudCk7CiAJCW5vZGUtPmFzeW5jLmNiID0gdzFfcHJvY2Vzc19jYjsKIAkJbm9kZS0+YmxvY2sgPSBibG9jazsKLQkJbm9kZS0+bSA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKikoKHU4ICopJmJsb2NrLT5tc2cgKwotCQkJKHNpemVfdCkoKHU4ICopbSAtICh1OCAqKW1zZykpOworCQlub2RlLT5tc2cgPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKCh1OCAqKSZibG9jay0+cmVxdWVzdF9jbiArCisJCQkoc2l6ZV90KSgodTggKiltc2cgLSAodTggKiljbikpOwogCQlub2RlLT5zbCA9IHNsOwogCQlub2RlLT5kZXYgPSBkZXY7CiAKQEAgLTU2MSwxMSArNzEwLDE1IEBACiAJCSsrbm9kZTsKIAogb3V0X2NvbnQ6CisJCS8qIENhbid0IHF1ZXVlIGJlY2F1c2UgdGhhdCBtb2RpZmllcyBibG9jayBhbmQgYW5vdGhlcgorCQkgKiB0aHJlYWQgY291bGQgYmUgcHJvY2Vzc2luZyB0aGUgbWVzc2FnZXMgYnkgbm93IGFuZAorCQkgKiB0aGVyZSBpc24ndCBhIGxvY2ssIHNlbmQgZGlyZWN0bHkuCisJCSAqLwogCQlpZiAoZXJyKQotCQkJdzFfbmV0bGlua19zZW5kX2Vycm9yKG1zZywgbSwgTlVMTCwgbnNwLT5wb3J0aWQsIGVycik7Ci0JCW1zZ19sZW4gLT0gc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgKyBtLT5sZW47Ci0JCW0gPSAoc3RydWN0IHcxX25ldGxpbmtfbXNnICopKCgodTggKiltKSArCi0JCQlzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSArIG0tPmxlbik7CisJCQl3MV9uZXRsaW5rX3NlbmRfZXJyb3IoY24sIG1zZywgbnNwLT5wb3J0aWQsIGVycik7CisJCW1zZ19sZW4gLT0gc2l6ZW9mKHN0cnVjdCB3MV9uZXRsaW5rX21zZykgKyBtc2ctPmxlbjsKKwkJbXNnID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKSgoKHU4ICopbXNnKSArCisJCQlzaXplb2Yoc3RydWN0IHcxX25ldGxpbmtfbXNnKSArIG1zZy0+bGVuKTsKIAogCQkvKgogCQkgKiBMZXQncyBhbGxvdyByZXF1ZXN0cyBmb3Igbm9uZXhpc3RpbmcgZGV2aWNlcy4KQEAgLTU3Myw4ICs3MjYsOCBAQAogCQlpZiAoZXJyID09IC1FTk9ERVYpCiAJCQllcnIgPSAwOwogCX0KLQlpZiAoYmxvY2sgJiYgYXRvbWljX3N1Yl9yZXR1cm4oMSwgJmJsb2NrLT5yZWZjbnQpID09IDApCi0JCWtmcmVlKGJsb2NrKTsKKwlpZiAoYmxvY2spCisJCXcxX3VucmVmX2Jsb2NrKGJsb2NrKTsKIH0KIAogaW50IHcxX2luaXRfbmV0bGluayh2b2lkKQpAQCAtNTkxLDcgKzc0NCw3IEBACiAJY25fZGVsX2NhbGxiYWNrKCZ3MV9pZCk7CiB9CiAjZWxzZQotdm9pZCB3MV9uZXRsaW5rX3NlbmQoc3RydWN0IHcxX21hc3RlciAqZGV2LCBzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKm1zZykKK3ZvaWQgdzFfbmV0bGlua19zZW5kKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgc3RydWN0IHcxX25ldGxpbmtfbXNnICpjbikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9uZXRsaW5rLmggYi9kcml2ZXJzL3cxL3cxX25ldGxpbmsuaAppbmRleCAxZTk1MDRlLi5jOTlhOWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX25ldGxpbmsuaAorKysgYi9kcml2ZXJzL3cxL3cxX25ldGxpbmsuaApAQCAtMjgsNiArMjgsMTcgQEAKICNpbmNsdWRlICJ3MS5oIgogCiAvKioKKyAqIGVudW0gdzFfY25fbXNnX2ZsYWdzIC0gYml0ZmllbGQgZmxhZ3MgZm9yIHN0cnVjdCBjbl9tc2cuZmxhZ3MKKyAqCisgKiBAVzFfQ05fQlVORExFOiBSZXF1ZXN0IGJ1bmRsaW5nIHJlcGxpZXMgaW50byBmZXdlciBtZXNzYWdzZS4gIEJlIHByZXBhcmVkCisgKiB0byBoYW5kbGUgbXVsdGlwbGUgc3RydWN0IGNuX21zZywgc3RydWN0IHcxX25ldGxpbmtfbXNnLCBhbmQKKyAqIHN0cnVjdCB3MV9uZXRsaW5rX2NtZCBpbiBvbmUgcGFja2V0LgorICovCitlbnVtIHcxX2NuX21zZ19mbGFncyB7CisJVzFfQ05fQlVORExFID0gMSwKK307CisKKy8qKgogICogZW51bSB3MV9uZXRsaW5rX21lc3NhZ2VfdHlwZXMgLSBtZXNzYWdlIHR5cGUKICAqCiAgKiBAVzFfU0xBVkVfQUREOiBub3RpZmljYXRpb24gdGhhdCBhIHNsYXZlIGRldmljZSB3YXMgYWRkZWQKQEAgLTQ5LDYgKzYwLDE5IEBACiAJVzFfTElTVF9NQVNURVJTLAogfTsKIAorLyoqCisgKiBzdHJ1Y3QgdzFfbmV0bGlua19tc2cgLSBob2xkcyB3MSBtZXNzYWdlIHR5cGUsIGlkLCBhbmQgcmVzdWx0CisgKgorICogQHR5cGU6IG9uZSBvZiBlbnVtIHcxX25ldGxpbmtfbWVzc2FnZV90eXBlcworICogQHN0YXR1czoga2VybmVsIGZlZWRiYWNrIGZvciBzdWNjZXNzIDAgb3IgZXJybm8gZmFpbHVyZSB2YWx1ZQorICogQGxlbjogbGVuZ3RoIG9mIGRhdGEgZm9sbG93aW5nIHcxX25ldGxpbmtfbXNnCisgKiBAaWQ6IHVuaW9uIGhvbGRpbmcgbWFzdGVyIGJ1cyBpZCAobXNnLmlkKSBhbmQgc2xhdmUgZGV2aWNlIGlkIChpZFs4XSkuCisgKiBAZGF0YTogc3RhcnQgYWRkcmVzcyBvZiBhbnkgZm9sbG93aW5nIGRhdGEKKyAqCisgKiBUaGUgYmFzZSBtZXNzYWdlIHN0cnVjdHVyZSBmb3IgdzEgbWVzc2FnZXMgb3ZlciBuZXRsaW5rLgorICogVGhlIG5ldGxpbmsgY29ubmVjdG9yIGRhdGEgc2VxdWVuY2UgaXMsIHN0cnVjdCBubG1zZ2hkciwgc3RydWN0IGNuX21zZywKKyAqIHRoZW4gb25lIG9yIG1vcmUgc3RydWN0IHcxX25ldGxpbmtfbXNnIChlYWNoIHdpdGggb3B0aW9uYWwgZGF0YSkuCisgKi8KIHN0cnVjdCB3MV9uZXRsaW5rX21zZwogewogCV9fdTgJCQkJdHlwZTsKQEAgLTY2LDYgKzkwLDcgQEAKIAogLyoqCiAgKiBlbnVtIHcxX2NvbW1hbmRzIC0gY29tbWFuZHMgYXZhaWxhYmxlIGZvciBtYXN0ZXIgb3Igc2xhdmUgb3BlcmF0aW9ucworICoKICAqIEBXMV9DTURfUkVBRDogcmVhZCBsZW4gYnl0ZXMKICAqIEBXMV9DTURfV1JJVEU6IHdyaXRlIGxlbiBieXRlcwogICogQFcxX0NNRF9TRUFSQ0g6IGluaXRpYXRlIGEgc3RhbmRhcmQgc2VhcmNoLCByZXR1cm5zIG9ubHkgdGhlIHNsYXZlCkBAIC05Myw2ICsxMTgsMTcgQEAKIAlXMV9DTURfTUFYCiB9OwogCisvKioKKyAqIHN0cnVjdCB3MV9uZXRsaW5rX2NtZCAtIGhvbGRzIHRoZSBjb21tYW5kIGFuZCBkYXRhCisgKgorICogQGNtZDogb25lIG9mIGVudW0gdzFfY29tbWFuZHMKKyAqIEByZXM6IHJlc2VydmVkCisgKiBAbGVuOiBsZW5ndGggb2YgZGF0YSBmb2xsb3dpbmcgdzFfbmV0bGlua19jbWQKKyAqIEBkYXRhOiBzdGFydCBhZGRyZXNzIG9mIGFueSBmb2xsb3dpbmcgZGF0YQorICoKKyAqIE9uZSBvciBtb3JlIHN0cnVjdCB3MV9uZXRsaW5rX2NtZCBpcyBwbGFjZWQgc3RhcnRpbmcgYXQgdzFfbmV0bGlua19tc2cuZGF0YQorICogZWFjaCB3aXRoIG9wdGlvbmFsIGRhdGEuCisgKi8KIHN0cnVjdCB3MV9uZXRsaW5rX2NtZAogewogCV9fdTgJCQkJY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vbWFuYWdlLmMgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwppbmRleCAzMmY5MjM2Li5jMzY2N2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYworKysgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwpAQCAtNDEsOSArNDEsNiBAQAogCiBzdHJ1Y3Qgc3VzcGVuZF9pbmZvIHsKIAlpbnQgY2FuY2VsbGVkOwotCXVuc2lnbmVkIGxvbmcgYXJnOyAvKiBleHRyYSBoeXBlcmNhbGwgYXJndW1lbnQgKi8KLQl2b2lkICgqcHJlKSh2b2lkKTsKLQl2b2lkICgqcG9zdCkoaW50IGNhbmNlbGxlZCk7CiB9OwogCiBzdGF0aWMgUkFXX05PVElGSUVSX0hFQUQoeGVuX3Jlc3VtZV9ub3RpZmllcik7CkBAIC02MSwyNiArNTgsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3Jlc3VtZV9ub3RpZmllcl91bnJlZ2lzdGVyKTsKIAogI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCi1zdGF0aWMgdm9pZCB4ZW5faHZtX3Bvc3Rfc3VzcGVuZChpbnQgY2FuY2VsbGVkKQotewotCXhlbl9hcmNoX2h2bV9wb3N0X3N1c3BlbmQoY2FuY2VsbGVkKTsKLQlnbnR0YWJfcmVzdW1lKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9wcmVfc3VzcGVuZCh2b2lkKQotewotCXhlbl9tbV9waW5fYWxsKCk7Ci0JZ250dGFiX3N1c3BlbmQoKTsKLQl4ZW5fYXJjaF9wcmVfc3VzcGVuZCgpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fcG9zdF9zdXNwZW5kKGludCBjYW5jZWxsZWQpCi17Ci0JeGVuX2FyY2hfcG9zdF9zdXNwZW5kKGNhbmNlbGxlZCk7Ci0JZ250dGFiX3Jlc3VtZSgpOwotCXhlbl9tbV91bnBpbl9hbGwoKTsKLX0KLQogc3RhdGljIGludCB4ZW5fc3VzcGVuZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBzdXNwZW5kX2luZm8gKnNpID0gZGF0YTsKQEAgLTk0LDE4ICs3MSwyMCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChzaS0+cHJlKQotCQlzaS0+cHJlKCk7CisJZ250dGFiX3N1c3BlbmQoKTsKKwl4ZW5fYXJjaF9wcmVfc3VzcGVuZCgpOwogCiAJLyoKIAkgKiBUaGlzIGh5cGVyY2FsbCByZXR1cm5zIDEgaWYgc3VzcGVuZCB3YXMgY2FuY2VsbGVkCiAJICogb3IgdGhlIGRvbWFpbiB3YXMgbWVyZWx5IGNoZWNrcG9pbnRlZCwgYW5kIDAgaWYgaXQKIAkgKiBpcyByZXN1bWluZyBpbiBhIG5ldyBkb21haW4uCiAJICovCi0Jc2ktPmNhbmNlbGxlZCA9IEhZUEVSVklTT1Jfc3VzcGVuZChzaS0+YXJnKTsKKwlzaS0+Y2FuY2VsbGVkID0gSFlQRVJWSVNPUl9zdXNwZW5kKHhlbl9wdl9kb21haW4oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdmlydF90b19tZm4oeGVuX3N0YXJ0X2luZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKTsKIAotCWlmIChzaS0+cG9zdCkKLQkJc2ktPnBvc3Qoc2ktPmNhbmNlbGxlZCk7CisJeGVuX2FyY2hfcG9zdF9zdXNwZW5kKHNpLT5jYW5jZWxsZWQpOworCWdudHRhYl9yZXN1bWUoKTsKIAogCWlmICghc2ktPmNhbmNlbGxlZCkgewogCQl4ZW5faXJxX3Jlc3VtZSgpOwpAQCAtMTU0LDE2ICsxMzMsNiBAQAogCiAJc2kuY2FuY2VsbGVkID0gMTsKIAotCWlmICh4ZW5faHZtX2RvbWFpbigpKSB7Ci0JCXNpLmFyZyA9IDBVTDsKLQkJc2kucHJlID0gTlVMTDsKLQkJc2kucG9zdCA9ICZ4ZW5faHZtX3Bvc3Rfc3VzcGVuZDsKLQl9IGVsc2UgewotCQlzaS5hcmcgPSB2aXJ0X3RvX21mbih4ZW5fc3RhcnRfaW5mbyk7Ci0JCXNpLnByZSA9ICZ4ZW5fcHJlX3N1c3BlbmQ7Ci0JCXNpLnBvc3QgPSAmeGVuX3Bvc3Rfc3VzcGVuZDsKLQl9Ci0KIAllcnIgPSBzdG9wX21hY2hpbmUoeGVuX3N1c3BlbmQsICZzaSwgY3B1bWFza19vZigwKSk7CiAKIAlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmeGVuX3Jlc3VtZV9ub3RpZmllciwgMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW4tYWNwaS1wcm9jZXNzb3IuYyBiL2RyaXZlcnMveGVuL3hlbi1hY3BpLXByb2Nlc3Nvci5jCmluZGV4IDgyMzU4ZDEuLjU5ZmMxOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbi1hY3BpLXByb2Nlc3Nvci5jCisrKyBiL2RyaXZlcnMveGVuL3hlbi1hY3BpLXByb2Nlc3Nvci5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAkJCXByX2RlYnVnKCIgICAgIEMlZDogJXMgJWQgdVNcbiIsCiAJCQkJIGN4LT50eXBlLCBjeC0+ZGVzYywgKHUzMiljeC0+bGF0ZW5jeSk7CiAJCX0KLQl9IGVsc2UgaWYgKHJldCAhPSAtRUlOVkFMKQorCX0gZWxzZSBpZiAoKHJldCAhPSAtRUlOVkFMKSAmJiAocmV0ICE9IC1FTk9TWVMpKQogCQkvKiBFSU5WQUwgbWVhbnMgdGhlIEFDUEkgSUQgaXMgaW5jb3JyZWN0IC0gbWVhbmluZyB0aGUgQUNQSQogCQkgKiB0YWJsZSBpcyByZWZlcmVuY2luZyBhIG5vbi1leGlzdGluZyBDUFUgLSB3aGljaCBjYW4gaGFwcGVuCiAJCSAqIHdpdGggYnJva2VuIEFDUEkgdGFibGVzLiAqLwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJCQkodTMyKSBwZXJmLT5zdGF0ZXNbaV0ucG93ZXIsCiAJCQkodTMyKSBwZXJmLT5zdGF0ZXNbaV0udHJhbnNpdGlvbl9sYXRlbmN5KTsKIAkJfQotCX0gZWxzZSBpZiAocmV0ICE9IC1FSU5WQUwpCisJfSBlbHNlIGlmICgocmV0ICE9IC1FSU5WQUwpICYmIChyZXQgIT0gLUVOT1NZUykpCiAJCS8qIEVJTlZBTCBtZWFucyB0aGUgQUNQSSBJRCBpcyBpbmNvcnJlY3QgLSBtZWFuaW5nIHRoZSBBQ1BJCiAJCSAqIHRhYmxlIGlzIHJlZmVyZW5jaW5nIGEgbm9uLWV4aXN0aW5nIENQVSAtIHdoaWNoIGNhbiBoYXBwZW4KIAkJICogd2l0aCBicm9rZW4gQUNQSSB0YWJsZXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jIGIvZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYwppbmRleCA2MmZjZDQ4Li5kNTdhMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jCisrKyBiL2RyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMKQEAgLTI0Miw2ICsyNDIsMTUgQEAKIAlyZXR1cm4gZm91bmRfZGV2OwogfQogCisvKgorICogQ2FsbGVkIHdoZW46CisgKiAgLSBYZW5CdXMgc3RhdGUgaGFzIGJlZW4gcmVjb25maWd1cmUgKHBjaSB1bnBsdWcpLiBTZWUgeGVuX3BjaWJrX3JlbW92ZV9kZXZpY2UKKyAqICAtIFhlbkJ1cyBzdGF0ZSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgKGd1ZXN0IHNodXRkb3duKS4gU2VlIHhlbl9wY2lia194ZW5idXNfcmVtb3ZlCisgKiAgLSAnZWNobyBCREYgPiB1bmJpbmQnIG9uIHBjaWJhY2sgbW9kdWxlIHdpdGggbm8gZ3Vlc3QgYXR0YWNoZWQuIFNlZSBwY2lzdHViX3JlbW92ZQorICogIC0gJ2VjaG8gQkRGID4gdW5iaW5kJyB3aXRoIGEgZ3Vlc3Qgc3RpbGwgdXNpbmcgaXQuIFNlZSBwY2lzdHViX3JlbW92ZQorICoKKyAqICBBcyBzdWNoIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bC4KKyAqLwogdm9pZCBwY2lzdHViX3B1dF9wY2lfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaXN0dWJfZGV2aWNlICpwc2RldiwgKmZvdW5kX3BzZGV2ID0gTlVMTDsKQEAgLTI3MiwxNiArMjgxLDE2IEBACiAJICogYW5kIHdhbnQgdG8gaW5oaWJpdCB0aGUgdXNlciBmcm9tIGZpZGRsaW5nIHdpdGggJ3Jlc2V0JwogCSAqLwogCXBjaV9yZXNldF9mdW5jdGlvbihkZXYpOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBzZGV2LT5kZXYpOworCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CiAKIAkvKiBUaGlzIGRpc2FibGVzIHRoZSBkZXZpY2UuICovCi0JeGVuX3BjaWJrX3Jlc2V0X2RldmljZShmb3VuZF9wc2Rldi0+ZGV2KTsKKwl4ZW5fcGNpYmtfcmVzZXRfZGV2aWNlKGRldik7CiAKIAkvKiBBbmQgY2xlYW51cCB1cCBvdXIgZW11bGF0ZWQgZmllbGRzLiAqLwotCXhlbl9wY2lia19jb25maWdfZnJlZV9keW5fZmllbGRzKGZvdW5kX3BzZGV2LT5kZXYpOwotCXhlbl9wY2lia19jb25maWdfcmVzZXRfZGV2KGZvdW5kX3BzZGV2LT5kZXYpOworCXhlbl9wY2lia19jb25maWdfcmVzZXRfZGV2KGRldik7CisJeGVuX3BjaWJrX2NvbmZpZ19mcmVlX2R5bl9maWVsZHMoZGV2KTsKIAotCXhlbl91bnJlZ2lzdGVyX2RldmljZV9kb21haW5fb3duZXIoZm91bmRfcHNkZXYtPmRldik7CisJeGVuX3VucmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihkZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZvdW5kX3BzZGV2LT5sb2NrLCBmbGFncyk7CiAJZm91bmRfcHNkZXYtPnBkZXYgPSBOVUxMOwpAQCAtNDkzLDYgKzUwMiw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyogQ2FsbGVkIHdoZW4gJ2JpbmQnLiBUaGlzIG1lYW5zIHdlIG11c3QgX05PVF8gY2FsbCBwY2lfcmVzZXRfZnVuY3Rpb24gb3IKKyAqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHRha2UgdGhlIHN5c2ZzIGxvY2suICovCiBzdGF0aWMgaW50IHBjaXN0dWJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOwpAQCAtNTIwLDYgKzUzMSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyogQ2FsbGVkIHdoZW4gJ3VuYmluZCcuIFRoaXMgbWVhbnMgd2UgbXVzdCBfTk9UXyBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbiBvcgorICogb3RoZXIgZnVuY3Rpb25zIHRoYXQgdGFrZSB0aGUgc3lzZnMgbG9jay4gKi8KIHN0YXRpYyB2b2lkIHBjaXN0dWJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaXN0dWJfZGV2aWNlICpwc2RldiwgKmZvdW5kX3BzZGV2ID0gTlVMTDsKQEAgLTU1MSw2ICs1NjQsOCBAQAogCQkJcHJfd2FybigiKioqKioqIHNodXRkb3duIGRyaXZlciBkb21haW4gYmVmb3JlIGJpbmRpbmcgZGV2aWNlXG4iKTsKIAkJCXByX3dhcm4oIioqKioqKiB0byBvdGhlciBkcml2ZXJzIG9yIGRvbWFpbnNcbiIpOwogCisJCQkvKiBOLkIuIFRoaXMgZW5kcyB1cCBjYWxsaW5nIHBjaXN0dWJfcHV0X3BjaV9kZXYgd2hpY2ggZW5kcyB1cAorCQkJICogZG9pbmcgdGhlIEZMUi4gKi8KIAkJCXhlbl9wY2lia19yZWxlYXNlX3BjaV9kZXYoZm91bmRfcHNkZXYtPnBkZXYsCiAJCQkJCQlmb3VuZF9wc2Rldi0+ZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpYmFja19vcHMuYyBiL2RyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaWJhY2tfb3BzLmMKaW5kZXggNjA3ZTQxNC4uYzRhMDY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpYmFja19vcHMuYworKysgYi9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2liYWNrX29wcy5jCkBAIC0zNDgsOSArMzQ4LDkgQEAKIAlub3RpZnlfcmVtb3RlX3ZpYV9pcnEocGRldi0+ZXZ0Y2huX2lycSk7CiAKIAkvKiBNYXJrIHRoYXQgd2UncmUgZG9uZS4gKi8KLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgLyogL2FmdGVyLyBjbGVhcmluZyBQQ0lGX2FjdGl2ZSAqLworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAvKiAvYWZ0ZXIvIGNsZWFyaW5nIFBDSUZfYWN0aXZlICovCiAJY2xlYXJfYml0KF9QREVWRl9vcF9hY3RpdmUsICZwZGV2LT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgLyogL2JlZm9yZS8gZmluYWwgY2hlY2sgZm9yIHdvcmsgKi8KKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiAvYmVmb3JlLyBmaW5hbCBjaGVjayBmb3Igd29yayAqLwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBkcml2ZXIgZG9tYWluIHRyaWVkIHRvIHN0YXJ0IGFub3RoZXIgcmVxdWVzdCBpbgogCSAqIGJldHdlZW4gY2xlYXJpbmcgX1hFTl9QQ0lGX2FjdGl2ZSBhbmQgY2xlYXJpbmcgX1BERVZGX29wX2FjdGl2ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbi1wY2liYWNrL3hlbmJ1cy5jIGIvZHJpdmVycy94ZW4veGVuLXBjaWJhY2sveGVuYnVzLmMKaW5kZXggYTllZDg2Ny4uNGE3ZTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuLXBjaWJhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy94ZW4veGVuLXBjaWJhY2sveGVuYnVzLmMKQEAgLTkzLDYgKzkzLDggQEAKIAogCXhlbl9wY2lia19kaXNjb25uZWN0KHBkZXYpOwogCisJLyogTi5CLiBUaGlzIGNhbGxzIHBjaXN0dWJfcHV0X3BjaV9kZXYgd2hpY2ggZG9lcyB0aGUgRkxSIG9uIGFsbAorCSAqIG9mIHRoZSBQQ0llIGRldmljZXMuICovCiAJeGVuX3BjaWJrX3JlbGVhc2VfZGV2aWNlcyhwZGV2KTsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+eGRldi0+ZGV2LCBOVUxMKTsKQEAgLTI4Niw2ICsyODgsOCBAQAogCWRldl9kYmcoJmRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBmb3IgJWRcbiIsIHBkZXYtPnhkZXYtPm90aGVyZW5kX2lkKTsKIAl4ZW5fdW5yZWdpc3Rlcl9kZXZpY2VfZG9tYWluX293bmVyKGRldik7CiAKKwkvKiBOLkIuIFRoaXMgZW5kcyB1cCBjYWxsaW5nIHBjaXN0dWJfcHV0X3BjaV9kZXYgd2hpY2ggZW5kcyB1cAorCSAqIGRvaW5nIHRoZSBGTFIuICovCiAJeGVuX3BjaWJrX3JlbGVhc2VfcGNpX2RldihwZGV2LCBkZXYpOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCBkODIyMzIwLi41OWUzZmUzIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTM1Miw5ICszNTIsNiBAQAogCQlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDAsIC0xKTsKIAl9CiAJLyogQ29udmVydCBmbG9jayB0byBwb3NpeCBsb2NrICovCi0JZmwtPmZsX293bmVyID0gKGZsX293bmVyX3QpZmlscDsKLQlmbC0+Zmxfc3RhcnQgPSAwOwotCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwogCWZsLT5mbF9mbGFncyB8PSBGTF9QT1NJWDsKIAlmbC0+ZmxfZmxhZ3MgXj0gRkxfRkxPQ0s7CiAKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggZjljYjk4Ny4uNDAzMGNiZiAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTE0LDE0ICsxNCwxMyBAQAogCQlzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vCiAKIGlmZXEgKCQoQ09ORklHX0JMT0NLKSx5KQotb2JqLXkgKz0JYnVmZmVyLm8gYmlvLm8gYmxvY2tfZGV2Lm8gZGlyZWN0LWlvLm8gbXBhZ2UubyBpb3ByaW8ubworb2JqLXkgKz0JYnVmZmVyLm8gYmxvY2tfZGV2Lm8gZGlyZWN0LWlvLm8gbXBhZ2UubwogZWxzZQogb2JqLXkgKz0Jbm8tYmxvY2subwogZW5kaWYKIAogb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2NfbmFtZXNwYWNlLm8KIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSArPSBiaW8taW50ZWdyaXR5Lm8KIG9iai15CQkJCSs9IG5vdGlmeS8KIG9iai0kKENPTkZJR19FUE9MTCkJCSs9IGV2ZW50cG9sbC5vCiBvYmotJChDT05GSUdfQU5PTl9JTk9ERVMpCSs9IGFub25faW5vZGVzLm8KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mbG9jay5jIGIvZnMvYWZzL2Zsb2NrLmMKaW5kZXggYThjZjJjZi4uNGJhZjFkMiAxMDA2NDQKLS0tIGEvZnMvYWZzL2Zsb2NrLmMKKysrIGIvZnMvYWZzL2Zsb2NrLmMKQEAgLTU1NSwxMCArNTU1LDYgQEAKIAkJcmV0dXJuIC1FTk9MQ0s7CiAKIAkvKiB3ZSdyZSBzaW11bGF0aW5nIGZsb2NrKCkgbG9ja3MgdXNpbmcgcG9zaXggbG9ja3Mgb24gdGhlIHNlcnZlciAqLwotCWZsLT5mbF9vd25lciA9IChmbF9vd25lcl90KSBmaWxlOwotCWZsLT5mbF9zdGFydCA9IDA7Ci0JZmwtPmZsX2VuZCA9IE9GRlNFVF9NQVg7Ci0KIAlpZiAoZmwtPmZsX3R5cGUgPT0gRl9VTkxDSykKIAkJcmV0dXJuIGFmc19kb191bmxrKGZpbGUsIGZsKTsKIAlyZXR1cm4gYWZzX2RvX3NldGxrKGZpbGUsIGZsKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmggYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCmluZGV4IGM5YTI0NDQuLjIyNTZlOWMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKKysrIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaApAQCAtMjc5LDcgKzI3OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19pbm9kZV9yZXN1bWVfdW5sb2NrZWRfZGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KEJUUkZTX0lOT0RFX1JFQURESU9fTkVFRF9MT0NLLAogCQkgICZCVFJGU19JKGlub2RlKS0+cnVudGltZV9mbGFncyk7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IDM5NTVlNDcuLmYyOWE1NGUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0zNDU4LDcgKzM0NTgsNyBAQAogc3RhdGljIHZvaWQgZW5kX2V4dGVudF9idWZmZXJfd3JpdGViYWNrKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikKIHsKIAljbGVhcl9iaXQoRVhURU5UX0JVRkZFUl9XUklURUJBQ0ssICZlYi0+YmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoJmViLT5iZmxhZ3MsIEVYVEVOVF9CVUZGRVJfV1JJVEVCQUNLKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggNWY4MDViYy4uNWEzYjgzNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC03MTI2LDcgKzcxMjYsNyBAQAogCQkgKiBiZWZvcmUgYXRvbWljIHZhcmlhYmxlIGdvdG8gemVybywgd2UgbXVzdCBtYWtlIHN1cmUKIAkJICogZGlwLT5lcnJvcnMgaXMgcGVyY2VpdmVkIHRvIGJlIHNldC4KIAkJICovCi0JCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJfQogCiAJLyogaWYgdGhlcmUgYXJlIG1vcmUgYmlvcyBzdGlsbCBwZW5kaW5nIGZvciB0aGlzIGRpbywganVzdCBleGl0ICovCkBAIC03MzA2LDcgKzczMDYsNyBAQAogCSAqIGJlZm9yZSBhdG9taWMgdmFyaWFibGUgZ290byB6ZXJvLCB3ZSBtdXN0CiAJICogbWFrZSBzdXJlIGRpcC0+ZXJyb3JzIGlzIHBlcmNlaXZlZCB0byBiZSBzZXQuCiAJICovCi0Jc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkaXAtPnBlbmRpbmdfYmlvcykpCiAJCWJpb19pb19lcnJvcihkaXAtPm9yaWdfYmlvKTsKIApAQCAtNzQ0OSw3ICs3NDQ5LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlhdG9taWNfaW5jKCZpbm9kZS0+aV9kaW9fY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAkvKgogCSAqIFRoZSBnZW5lcmljIHN0dWZmIG9ubHkgZG9lcyBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlLCB3aGljaApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggMmY2ZDdiMS4uM2Y1MmJiNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdG9taWNfaW5jKCZyb290LT53aWxsX2JlX3NuYXBzaG90ZWQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJYnRyZnNfd2FpdF9ub2Nvd193cml0ZShyb290KTsKIAogCXJldCA9IGJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290LCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggOWRkYjlmYy4uNmE4MTEwYyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTc3LDcgKzc3LDcgQEAKIHZvaWQgdW5sb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCWNsZWFyX2JpdF91bmxvY2soQkhfTG9jaywgJmJoLT5iX3N0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoJmJoLT5iX3N0YXRlLCBCSF9Mb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0wodW5sb2NrX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2xvY2tzLmMgYi9mcy9jZXBoL2xvY2tzLmMKaW5kZXggMTkxMzk4OC4uZmJjMzljNCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9sb2Nrcy5jCisrKyBiL2ZzL2NlcGgvbG9ja3MuYwpAQCAtNTMsMTAgKzUzLDcgQEAKIAllbHNlCiAJCWxlbmd0aCA9IGZsLT5mbF9lbmQgLSBmbC0+Zmxfc3RhcnQgKyAxOwogCi0JaWYgKGxvY2tfdHlwZSA9PSBDRVBIX0xPQ0tfRkNOVEwpCi0JCW93bmVyID0gc2VjdXJlX2FkZHIoZmwtPmZsX293bmVyKTsKLQllbHNlCi0JCW93bmVyID0gc2VjdXJlX2FkZHIoZmwtPmZsX2ZpbGUpOworCW93bmVyID0gc2VjdXJlX2FkZHIoZmwtPmZsX293bmVyKTsKIAogCWRvdXQoImNlcGhfbG9ja19tZXNzYWdlOiBydWxlOiAlZCwgb3A6ICVkLCBvd25lcjogJWxseCwgcGlkOiAlbGx1LCAiCiAJICAgICAic3RhcnQ6ICVsbHUsIGxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGU6ICVkIiwgKGludClsb2NrX3R5cGUsCkBAIC0zMTQsMTAgKzMxMSw3IEBACiAJY2VwaGxvY2stPmxlbmd0aCA9IGNwdV90b19sZTY0KGxvY2stPmZsX2VuZCAtIGxvY2stPmZsX3N0YXJ0ICsgMSk7CiAJY2VwaGxvY2stPmNsaWVudCA9IGNwdV90b19sZTY0KDApOwogCWNlcGhsb2NrLT5waWQgPSBjcHVfdG9fbGU2NCgodTY0KWxvY2stPmZsX3BpZCk7Ci0JaWYgKGxvY2stPmZsX2ZsYWdzICYgRkxfUE9TSVgpCi0JCWNlcGhsb2NrLT5vd25lciA9IGNwdV90b19sZTY0KHNlY3VyZV9hZGRyKGxvY2stPmZsX293bmVyKSk7Ci0JZWxzZQotCQljZXBobG9jay0+b3duZXIgPSBjcHVfdG9fbGU2NChzZWN1cmVfYWRkcihsb2NrLT5mbF9maWxlKSk7CisJY2VwaGxvY2stPm93bmVyID0gY3B1X3RvX2xlNjQoc2VjdXJlX2FkZHIobG9jay0+Zmxfb3duZXIpKTsKIAogCXN3aXRjaCAobG9jay0+ZmxfdHlwZSkgewogCWNhc2UgRl9SRExDSzoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jCmluZGV4IGYzYjg0Y2QuLjA4YjNjMTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcmVzaXplLmMKKysrIGIvZnMvZXh0NC9yZXNpemUuYwpAQCAtNDIsNyArNDIsNyBAQAogdm9pZCBleHQ0X3Jlc2l6ZV9lbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAljbGVhcl9iaXRfdW5sb2NrKEVYVDRfUkVTSVpJTkcsICZFWFQ0X1NCKHNiKS0+c19yZXNpemVfZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X21ldGFfYmdfZmlyc3RfZ3JvdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggOTZkNTEzZS4uZjY4MGQyYyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTIzMDQsNyArMjMwNCw2IEBACiAJCXN0cnVjdCBmdXNlX2ZpbGUgKmZmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJCS8qIGVtdWxhdGUgZmxvY2sgd2l0aCBQT1NJWCBsb2NrcyAqLwotCQlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdCkgZmlsZTsKIAkJZmYtPmZsb2NrID0gdHJ1ZTsKIAkJZXJyID0gZnVzZV9zZXRsayhmaWxlLCBmbCwgMSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hb3BzLmMgYi9mcy9nZnMyL2FvcHMuYwppbmRleCBjZTYyZGNhLi41YTQ5YjAzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2FvcHMuYworKysgYi9mcy9nZnMyL2FvcHMuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAKIAlyZXQgPSBnZnMyX3dyaXRlX2NhY2hlX2pkYXRhKG1hcHBpbmcsIHdiYyk7CiAJaWYgKHJldCA9PSAwICYmIHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKHNkcCwgaXAtPmlfZ2wpOworCQlnZnMyX2xvZ19mbHVzaChzZHAsIGlwLT5pX2dsLCBOT1JNQUxfRkxVU0gpOwogCQlyZXQgPSBnZnMyX3dyaXRlX2NhY2hlX2pkYXRhKG1hcHBpbmcsIHdiYyk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2JtYXAuYyBiL2ZzL2dmczIvYm1hcC5jCmluZGV4IGM2MmQ0YjkuLmU2ZWU1YjYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYm1hcC5jCisrKyBiL2ZzL2dmczIvYm1hcC5jCkBAIC03MDcsNyArNzA3LDcgQEAKICAqIEB0b3A6IFRoZSBmaXJzdCBwb2ludGVyIGluIHRoZSBidWZmZXIKICAqIEBib3R0b206IE9uZSBtb3JlIHRoYW4gdGhlIGxhc3QgcG9pbnRlcgogICogQGhlaWdodDogdGhlIGhlaWdodCB0aGlzIGJ1ZmZlciBpcyBhdAotICogQGRhdGE6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBzdHJpcF9taW5lCisgKiBAc206IGEgcG9pbnRlciB0byBhIHN0cnVjdCBzdHJpcF9taW5lCiAgKgogICogUmV0dXJuczogZXJybm8KICAqLwpAQCAtOTkyLDYgKzk5Miw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2RlZmluZSBHRlMyX0pUUlVOQ19SRVZPS0VTIDgxOTIKKwogLyoqCiAgKiBnZnMyX2pvdXJuYWxlZF90cnVuY2F0ZSAtIFdyYXBwZXIgZm9yIHRydW5jYXRlX3BhZ2VjYWNoZSBmb3IgamRhdGEgZmlsZXMKICAqIEBpbm9kZTogVGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZApAQCAtMTAwMyw4ICsxMDA1LDYgQEAKICAqIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgYmVpbmcgdHJ1bmNhdGVkIGdldHMgdG9vIGxhcmdlLgogICovCiAKLSNkZWZpbmUgR0ZTMl9KVFJVTkNfUkVWT0tFUyA4MTkyCi0KIHN0YXRpYyBpbnQgZ2ZzMl9qb3VybmFsZWRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG9sZHNpemUsIHU2NCBuZXdzaXplKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CkBAIC0xMzQ4LDcgKzEzNDgsNyBAQAogICogZ2ZzMl9hZGRfamV4dGVudCAtIEFkZCBvciBtZXJnZSBhIG5ldyBleHRlbnQgdG8gZXh0ZW50IGNhY2hlCiAgKiBAamQ6IFRoZSBqb3VybmFsIGRlc2NyaXB0b3IKICAqIEBsYmxvY2s6IFRoZSBsb2dpY2FsIGJsb2NrIGF0IHN0YXJ0IG9mIG5ldyBleHRlbnQKLSAqIEBwYmxvY2s6IFRoZSBwaHlzaWNhbCBibG9jayBhdCBzdGFydCBvZiBuZXcgZXh0ZW50CisgKiBAZGJsb2NrOiBUaGUgcGh5c2ljYWwgYmxvY2sgYXQgc3RhcnQgb2YgbmV3IGV4dGVudAogICogQGJsb2NrczogU2l6ZSBvZiBleHRlbnQgaW4gZnMgYmxvY2tzCiAgKgogICogUmV0dXJuczogMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZmlsZS5jIGIvZnMvZ2ZzMi9maWxlLmMKaW5kZXggODBkNjcyNS4uNmFiMGNmYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9maWxlLmMKKysrIGIvZnMvZ2ZzMi9maWxlLmMKQEAgLTIwMyw5ICsyMDMsOSBAQAogCQkJICAgICBHRlMyX0RJRl9JTkhFUklUX0pEQVRBKQogCiAvKioKLSAqIGdmczJfc2V0X2ZsYWdzIC0gc2V0IGZsYWdzIG9uIGFuIGlub2RlCi0gKiBAaW5vZGU6IFRoZSBpbm9kZQotICogQGZsYWdzOiBUaGUgZmxhZ3MgdG8gc2V0CisgKiBkb19nZnMyX3NldF9mbGFncyAtIHNldCBmbGFncyBvbiBhbiBpbm9kZQorICogQGZpbHA6IGZpbGUgcG9pbnRlcgorICogQHJlcWZsYWdzOiBUaGUgZmxhZ3MgdG8gc2V0CiAgKiBAbWFzazogSW5kaWNhdGVzIHdoaWNoIGZsYWdzIGFyZSB2YWxpZAogICoKICAqLwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJfQogCWlmICgoZmxhZ3MgXiBuZXdfZmxhZ3MpICYgR0ZTMl9ESUZfSkRBVEEpIHsKIAkJaWYgKGZsYWdzICYgR0ZTMl9ESUZfSkRBVEEpCi0JCQlnZnMyX2xvZ19mbHVzaChzZHAsIGlwLT5pX2dsKTsKKwkJCWdmczJfbG9nX2ZsdXNoKHNkcCwgaXAtPmlfZ2wsIE5PUk1BTF9GTFVTSCk7CiAJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKQEAgLTMxOCw3ICszMTgsNyBAQAogCiAvKioKICAqIGdmczJfc2l6ZV9oaW50IC0gR2l2ZSBhIGhpbnQgdG8gdGhlIHNpemUgb2YgYSB3cml0ZSByZXF1ZXN0Ci0gKiBAZmlsZTogVGhlIHN0cnVjdCBmaWxlCisgKiBAZmlsZXA6IFRoZSBzdHJ1Y3QgZmlsZQogICogQG9mZnNldDogVGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSB3cml0ZQogICogQHNpemU6IFRoZSBsZW5ndGggb2YgdGhlIHdyaXRlCiAgKgpAQCAtMzcxLDcgKzM3MSw3IEBACiAvKioKICAqIGdmczJfcGFnZV9ta3dyaXRlIC0gTWFrZSBhIHNoYXJlZCwgbW1hcCgpZWQsIHBhZ2Ugd3JpdGFibGUKICAqIEB2bWE6IFRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhCi0gKiBAcGFnZTogVGhlIHBhZ2Ugd2hpY2ggaXMgYWJvdXQgdG8gYmVjb21lIHdyaXRhYmxlCisgKiBAdm1mOiBUaGUgdmlydHVhbCBtZW1vcnkgZmF1bHQgY29udGFpbmluZyB0aGUgcGFnZSB0byBiZWNvbWUgd3JpdGFibGUKICAqCiAgKiBXaGVuIHRoZSBwYWdlIGJlY29tZXMgd3JpdGFibGUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQogICogYmxvY2tzIGFsbG9jYXRlZCBvbiBkaXNrIHRvIGJhY2sgdGhhdCBwYWdlLgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5jIGIvZnMvZ2ZzMi9nbG9jay5jCmluZGV4IGFlYzdmNzMuLmMzNTVmNzMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suYworKysgYi9mcy9nZnMyL2dsb2NrLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogc3RhdGljIHZvaWQgZ2ZzMl9ob2xkZXJfd2FrZShzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoKQogewogCWNsZWFyX2JpdChISUZfV0FJVCwgJmdoLT5naF9pZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl3YWtlX3VwX2JpdCgmZ2gtPmdoX2lmbGFncywgSElGX1dBSVQpOwogfQogCkBAIC00MTEsNyArNDExLDcgQEAKIHsKIAlnbC0+Z2xfZGVtb3RlX3N0YXRlID0gTE1fU1RfRVhDTFVTSVZFOwogCWNsZWFyX2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoJmdsLT5nbF9mbGFncywgR0xGX0RFTU9URSk7CiB9CiAKQEAgLTYyMCw3ICs2MjAsNyBAQAogCiBvdXRfc2NoZWQ6CiAJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJZ2wtPmdsX2xvY2tyZWYuY291bnQrKzsKIAlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQogCQlnbC0+Z2xfbG9ja3JlZi5jb3VudC0tOwpAQCAtNjI4LDcgKzYyOCw3IEBACiAKIG91dF91bmxvY2s6CiAJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmMgYi9mcy9nZnMyL2dsb3BzLmMKaW5kZXggNTRiNjY4MDkuLmZjMTEwMDcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTg5LDE4ICs4OSwyMyBAQAogCWlmICghdHIudHJfcmV2b2tlcykKIAkJcmV0dXJuOwogCi0JLyogQSBzaG9ydGVuZWQsIGlubGluZSB2ZXJzaW9uIG9mIGdmczJfdHJhbnNfYmVnaW4oKSAqLworCS8qIEEgc2hvcnRlbmVkLCBpbmxpbmUgdmVyc2lvbiBvZiBnZnMyX3RyYW5zX2JlZ2luKCkKKyAgICAgICAgICogdHItPmFsbG9jZWQgaXMgbm90IHNldCBzaW5jZSB0aGUgdHJhbnNhY3Rpb24gc3RydWN0dXJlIGlzCisgICAgICAgICAqIG9uIHRoZSBzdGFjayAqLwogCXRyLnRyX3Jlc2VydmVkID0gMSArIGdmczJfc3RydWN0MmJsayhzZHAsIHRyLnRyX3Jldm9rZXMsIHNpemVvZih1NjQpKTsKIAl0ci50cl9pcCA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKIAlzYl9zdGFydF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7Ci0JZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKTsKKwlpZiAoZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKSA8IDApIHsKKwkJc2JfZW5kX2ludHdyaXRlKHNkcC0+c2RfdmZzKTsKKwkJcmV0dXJuOworCX0KIAlXQVJOX09OX09OQ0UoY3VycmVudC0+am91cm5hbF9pbmZvKTsKIAljdXJyZW50LT5qb3VybmFsX2luZm8gPSAmdHI7CiAKIAlfX2dmczJfYWlsX2ZsdXNoKGdsLCAwLCB0ci50cl9yZXZva2VzKTsKIAogCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0JZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKKwlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIE5PUk1BTF9GTFVTSCk7CiB9CiAKIHZvaWQgZ2ZzMl9haWxfZmx1c2goc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBib29sIGZzeW5jKQpAQCAtMTIxLDcgKzEyNiw3IEBACiAJCXJldHVybjsKIAlfX2dmczJfYWlsX2ZsdXNoKGdsLCBmc3luYywgbWF4X3Jldm9rZXMpOwogCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0JZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKKwlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIE5PUk1BTF9GTFVTSCk7CiB9CiAKIC8qKgpAQCAtMTQ0LDcgKzE0OSw3IEBACiAJCXJldHVybjsKIAlHTE9DS19CVUdfT04oZ2wsIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOwogCi0JZ2ZzMl9sb2dfZmx1c2goc2RwLCBnbCk7CisJZ2ZzMl9sb2dfZmx1c2goc2RwLCBnbCwgTk9STUFMX0ZMVVNIKTsKIAlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UobWFwcGluZywgZ2wtPmdsX3ZtLnN0YXJ0LCBnbC0+Z2xfdm0uZW5kKTsKIAllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKG1hcHBpbmcsIGdsLT5nbF92bS5zdGFydCwgZ2wtPmdsX3ZtLmVuZCk7CiAJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgZXJyb3IpOwpAQCAtMjA2LDcgKzIxMSw3IEBACiAKIAlHTE9DS19CVUdfT04oZ2wsIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOwogCi0JZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsLCBOT1JNQUxfRkxVU0gpOwogCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CiAJaWYgKGlwKSB7CiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaXAtPmlfaW5vZGUuaV9tYXBwaW5nOwpAQCAtMjIxLDcgKzIyNiw3IEBACiAJICogV3JpdGViYWNrIG9mIHRoZSBkYXRhIG1hcHBpbmcgbWF5IGNhdXNlIHRoZSBkaXJ0eSBmbGFnIHRvIGJlIHNldAogCSAqIHNvIHdlIGhhdmUgdG8gY2xlYXIgaXQgYWdhaW4gaGVyZS4KIAkgKi8KLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKTsKIH0KIApAQCAtMjUzLDcgKzI1OCw3IEBACiAJfQogCiAJaWYgKGlwID09IEdGUzJfSShnbC0+Z2xfc2JkLT5zZF9yaW5kZXgpKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIE5VTEwpOworCQlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBOVUxMLCBOT1JNQUxfRkxVU0gpOwogCQlnbC0+Z2xfc2JkLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAwOwogCX0KIAlpZiAoaXAgJiYgU19JU1JFRyhpcC0+aV9pbm9kZS5pX21vZGUpKQpAQCAtNDU1LDMxICs0NjAsMzkgQEAKIH0KIAogLyoqCi0gKiB0cmFuc19nb19zeW5jIC0gcHJvbW90ZS9kZW1vdGUgdGhlIHRyYW5zYWN0aW9uIGdsb2NrCisgKiBmcmVlemVfZ29fc3luYyAtIHByb21vdGUvZGVtb3RlIHRoZSBmcmVlemUgZ2xvY2sKICAqIEBnbDogdGhlIGdsb2NrCiAgKiBAc3RhdGU6IHRoZSByZXF1ZXN0ZWQgc3RhdGUKICAqIEBmbGFnczoKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgdHJhbnNfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCitzdGF0aWMgdm9pZCBmcmVlemVfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCURFRklORV9XQUlUKHdhaXQpOwogCi0JaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJgorCWlmIChnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfU0hBUkVEICYmCiAJICAgIHRlc3RfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKSkgewotCQlnZnMyX21ldGFfc3luY2ZzKHNkcCk7Ci0JCWdmczJfbG9nX3NodXRkb3duKHNkcCk7CisJCWF0b21pY19zZXQoJnNkcC0+c2RfbG9nX2ZyZWV6ZSwgMSk7CisJCXdha2VfdXAoJnNkcC0+c2RfbG9nZF93YWl0cSk7CisJCWRvIHsKKwkJCXByZXBhcmVfdG9fd2FpdCgmc2RwLT5zZF9sb2dfZnJvemVuX3dhaXQsICZ3YWl0LAorCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2ZyZWV6ZSkpCisJCQkJaW9fc2NoZWR1bGUoKTsKKwkJfSB3aGlsZShhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSk7CisJCWZpbmlzaF93YWl0KCZzZHAtPnNkX2xvZ19mcm96ZW5fd2FpdCwgJndhaXQpOwogCX0KIH0KIAogLyoqCi0gKiB0cmFuc19nb194bW90ZV9iaCAtIEFmdGVyIHByb21vdGluZy9kZW1vdGluZyB0aGUgdHJhbnNhY3Rpb24gZ2xvY2sKKyAqIGZyZWV6ZV9nb194bW90ZV9iaCAtIEFmdGVyIHByb21vdGluZy9kZW1vdGluZyB0aGUgZnJlZXplIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICoKICAqLwogCi1zdGF0aWMgaW50IHRyYW5zX2dvX3htb3RlX2JoKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgc3RydWN0IGdmczJfaG9sZGVyICpnaCkKK3N0YXRpYyBpbnQgZnJlZXplX2dvX3htb3RlX2JoKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgc3RydWN0IGdmczJfaG9sZGVyICpnaCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKHNkcC0+c2RfamRlc2MtPmpkX2lub2RlKTsKQEAgLTUxMiw3ICs1MjUsNyBAQAogICogQWx3YXlzIHJldHVybnMgMAogICovCiAKLXN0YXRpYyBpbnQgdHJhbnNfZ29fZGVtb3RlX29rKGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3N0YXRpYyBpbnQgZnJlZXplX2dvX2RlbW90ZV9vayhjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC01NjMsMTAgKzU3NiwxMCBAQAogCS5nb19mbGFncyA9IEdMT0ZfTFZCLAogfTsKIAotY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3RyYW5zX2dsb3BzID0gewotCS5nb19zeW5jID0gdHJhbnNfZ29fc3luYywKLQkuZ29feG1vdGVfYmggPSB0cmFuc19nb194bW90ZV9iaCwKLQkuZ29fZGVtb3RlX29rID0gdHJhbnNfZ29fZGVtb3RlX29rLAorY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX2ZyZWV6ZV9nbG9wcyA9IHsKKwkuZ29fc3luYyA9IGZyZWV6ZV9nb19zeW5jLAorCS5nb194bW90ZV9iaCA9IGZyZWV6ZV9nb194bW90ZV9iaCwKKwkuZ29fZGVtb3RlX29rID0gZnJlZXplX2dvX2RlbW90ZV9vaywKIAkuZ29fdHlwZSA9IExNX1RZUEVfTk9ORElTSywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuaCBiL2ZzL2dmczIvZ2xvcHMuaAppbmRleCBiZjk1YTJkLi43NDU1ZDI2IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmgKKysrIGIvZnMvZ2ZzMi9nbG9wcy5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX21ldGFfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX2lub2RlX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9yZ3JwX2dsb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl90cmFuc19nbG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfZnJlZXplX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9pb3Blbl9nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfZmxvY2tfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX25vbmRpc2tfZ2xvcHM7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCBiZGY3MGMxLi42N2QzMTBjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTQ2NSw5ICs0NjUsNyBAQAogCXVuc2lnbmVkIGludCB0cl9yZXNlcnZlZDsKIAl1bnNpZ25lZCBpbnQgdHJfdG91Y2hlZDoxOwogCXVuc2lnbmVkIGludCB0cl9hdHRhY2hlZDoxOwotCi0Jc3RydWN0IGdmczJfaG9sZGVyIHRyX3RfZ2g7Ci0KKwl1bnNpZ25lZCBpbnQgdHJfYWxsb2NlZDoxOwogCiAJdW5zaWduZWQgaW50IHRyX251bV9idWZfbmV3OwogCXVuc2lnbmVkIGludCB0cl9udW1fZGF0YWJ1Zl9uZXc7CkBAIC02ODIsNyArNjgwLDcgQEAKIAlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCBzZF9sb2Nrc3RydWN0OwogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9saXZlX2doOwogCXN0cnVjdCBnZnMyX2dsb2NrICpzZF9yZW5hbWVfZ2w7Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKnNkX3RyYW5zX2dsOworCXN0cnVjdCBnZnMyX2dsb2NrICpzZF9mcmVlemVfZ2w7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgc2RfZ2xvY2tfd2FpdDsKIAlhdG9taWNfdCBzZF9nbG9ja19kaXNwb3NhbDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBzZF9sb2NraW5nX2luaXQ7CkBAIC03MzAsNiArNzI4LDggQEAKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2Rfc2NfZ2g7CiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX3FjX2doOwogCisJc3RydWN0IGNvbXBsZXRpb24gc2Rfam91cm5hbF9yZWFkeTsKKwogCS8qIERhZW1vbiBzdHVmZiAqLwogCiAJc3RydWN0IHRhc2tfc3RydWN0ICpzZF9sb2dkX3Byb2Nlc3M7CkBAIC03OTQsNiArNzk0LDEyIEBACiAKIAkvKiBGb3IgcXVpZXNjaW5nIHRoZSBmaWxlc3lzdGVtICovCiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2ZyZWV6ZV9naDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2RfZnJlZXplX3Jvb3RfZ2g7CisJc3RydWN0IGdmczJfaG9sZGVyIHNkX3RoYXdfZ2g7CisJYXRvbWljX3Qgc2RfbG9nX2ZyZWV6ZTsKKwlhdG9taWNfdCBzZF9mcm96ZW5fcm9vdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9mcm96ZW5fcm9vdF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHNkX2xvZ19mcm96ZW5fd2FpdDsKIAogCWNoYXIgc2RfZnNuYW1lW0dGUzJfRlNOQU1FX0xFTl07CiAJY2hhciBzZF90YWJsZV9uYW1lW0dGUzJfRlNOQU1FX0xFTl07CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggMjhjYzdiZi4uZTYyZTU5NCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTYxMywxOCArMTYxMywyNiBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcDsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwogCWludCBlcnJvcjsKIAlpbnQgdW5sb2NrID0gMDsKKwlpbnQgZnJvemVuX3Jvb3QgPSAwOwogCiAKIAlpcCA9IEdGUzJfSShpbm9kZSk7CiAJaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKSB7Ci0JCWlmIChtYXNrICYgTUFZX05PVF9CTE9DSykKLQkJCXJldHVybiAtRUNISUxEOwotCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmlfZ2gpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCXVubG9jayA9IDE7CisJCWlmICh1bmxpa2VseShnZnMyX2dsb2NrX2lzX2hlbGRfZXhjbChzZHAtPnNkX2ZyZWV6ZV9nbCkgJiYKKwkJCSAgICAgaW5vZGUgPT0gc2RwLT5zZF9yb290X2Rpci0+ZF9pbm9kZSAmJgorCQkJICAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZzZHAtPnNkX2Zyb3plbl9yb290KSkpCisJCQlmcm96ZW5fcm9vdCA9IDE7CisJCWVsc2UgeworCQkJaWYgKG1hc2sgJiBNQVlfTk9UX0JMT0NLKQorCQkJCXJldHVybiAtRUNISUxEOworCQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl1bmxvY2sgPSAxOworCQl9CiAJfQogCiAJaWYgKChtYXNrICYgTUFZX1dSSVRFKSAmJiBJU19JTU1VVEFCTEUoaW5vZGUpKQpAQCAtMTYzMyw2ICsxNjQxLDggQEAKIAkJZXJyb3IgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwogCWlmICh1bmxvY2spCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKKwllbHNlIGlmIChmcm96ZW5fcm9vdCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZzZHAtPnNkX2Zyb3plbl9yb290KSkKKwkJd2FrZV91cCgmc2RwLT5zZF9mcm96ZW5fcm9vdF93YWl0KTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE4MDUsMTkgKzE4MTUsMjkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CiAJaW50IGVycm9yOwogCWludCB1bmxvY2sgPSAwOworCWludCBmcm96ZW5fcm9vdCA9IDA7CiAKIAlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IE5VTEwpIHsKLQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJdW5sb2NrID0gMTsKKwkJaWYgKHVubGlrZWx5KGdmczJfZ2xvY2tfaXNfaGVsZF9leGNsKHNkcC0+c2RfZnJlZXplX2dsKSAmJgorCQkJICAgICBpbm9kZSA9PSBzZHAtPnNkX3Jvb3RfZGlyLT5kX2lub2RlICYmCisJCQkgICAgIGF0b21pY19pbmNfbm90X3plcm8oJnNkcC0+c2RfZnJvemVuX3Jvb3QpKSkKKwkJCWZyb3plbl9yb290ID0gMTsKKwkJZWxzZSB7CisJCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl1bmxvY2sgPSAxOworCQl9CiAJfQogCiAJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CiAJaWYgKHVubG9jaykKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKKwllbHNlIGlmIChmcm96ZW5fcm9vdCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZzZHAtPnNkX2Zyb3plbl9yb290KSkKKwkJd2FrZV91cCgmc2RwLT5zZF9mcm96ZW5fcm9vdF93YWl0KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NrX2RsbS5jIGIvZnMvZ2ZzMi9sb2NrX2RsbS5jCmluZGV4IGMxZWI1NTUuLjkxZjI3NGQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9ja19kbG0uYworKysgYi9mcy9nZnMyL2xvY2tfZGxtLmMKQEAgLTExMzQsNyArMTEzNCw3IEBACiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhnZnMyX2NvbnRyb2xfd3EsICZzZHAtPnNkX2NvbnRyb2xfd29yaywgMCk7CiAKIAljbGVhcl9iaXQoREZMX0RMTV9SRUNPVkVSWSwgJmxzLT5sc19yZWNvdmVyX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoJmxzLT5sc19yZWNvdmVyX2ZsYWdzLCBERkxfRExNX1JFQ09WRVJZKTsKIAlzcGluX3VubG9jaygmbHMtPmxzX3JlY292ZXJfc3Bpbik7CiB9CkBAIC0xMjcxLDcgKzEyNzEsNyBAQAogCiAJbHMtPmxzX2ZpcnN0ID0gISF0ZXN0X2JpdChERkxfRklSU1RfTU9VTlQsICZscy0+bHNfcmVjb3Zlcl9mbGFncyk7CiAJY2xlYXJfYml0KFNERl9OT0pPVVJOQUxJRCwgJnNkcC0+c2RfZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl3YWtlX3VwX2JpdCgmc2RwLT5zZF9mbGFncywgU0RGX05PSk9VUk5BTElEKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmMKaW5kZXggNGExNGQ1MC4uMzk2NmZhZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2cuYworKysgYi9mcy9nZnMyL2xvZy5jCkBAIC0zMDEsNiArMzAxLDIzIEBACiB9CiAKIC8qKgorICogZ2ZzMl9sb2dfcmVsZWFzZSAtIFJlbGVhc2UgYSBnaXZlbiBudW1iZXIgb2YgbG9nIGJsb2NrcworICogQHNkcDogVGhlIEdGUzIgc3VwZXJibG9jaworICogQGJsa3M6IFRoZSBudW1iZXIgb2YgYmxvY2tzCisgKgorICovCisKK3ZvaWQgZ2ZzMl9sb2dfcmVsZWFzZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGJsa3MpCit7CisKKwlhdG9taWNfYWRkKGJsa3MsICZzZHAtPnNkX2xvZ19ibGtzX2ZyZWUpOworCXRyYWNlX2dmczJfbG9nX2Jsb2NrcyhzZHAsIGJsa3MpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSkgPD0KKwkJCQkgIHNkcC0+c2RfamRlc2MtPmpkX2Jsb2Nrcyk7CisJdXBfcmVhZCgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7Cit9CisKKy8qKgogICogZ2ZzMl9sb2dfcmVzZXJ2ZSAtIE1ha2UgYSBsb2cgcmVzZXJ2YXRpb24KICAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKICAqIEBibGtzOiBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0byByZXNlcnZlCkBAIC0zNTgsNyArMzc1LDEwIEBACiAJCXdha2VfdXAoJnNkcC0+c2RfbG9nX3dhaXRxKTsKIAogCWRvd25fcmVhZCgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7Ci0KKwlpZiAodW5saWtlbHkoIXRlc3RfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKSkpIHsKKwkJZ2ZzMl9sb2dfcmVsZWFzZShzZHAsIGJsa3MpOworCQlyZXR1cm4gLUVST0ZTOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcxLDcgKzY5MSw4IEBACiAgKgogICovCiAKLXZvaWQgZ2ZzMl9sb2dfZmx1c2goc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3ZvaWQgZ2ZzMl9sb2dfZmx1c2goc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKKwkJICAgIGVudW0gZ2ZzMl9mbHVzaF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IGdmczJfdHJhbnMgKnRyOwogCkBAIC03MjMsNiArNzQ0LDQyIEBACiAJfQogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKIAlnZnMyX2xvZ191bmxvY2soc2RwKTsKKworCWlmIChhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSkKKwkJdHlwZSA9IEZSRUVaRV9GTFVTSDsKKwlpZiAodHlwZSAhPSBOT1JNQUxfRkxVU0gpIHsKKwkJaWYgKCFzZHAtPnNkX2xvZ19pZGxlKSB7CisJCQlmb3IgKDs7KSB7CisJCQkJZ2ZzMl9haWwxX3N0YXJ0KHNkcCk7CisJCQkJZ2ZzMl9haWwxX3dhaXQoc2RwKTsKKwkJCQlpZiAoZ2ZzMl9haWwxX2VtcHR5KHNkcCkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJYXRvbWljX2RlYygmc2RwLT5zZF9sb2dfYmxrc19mcmVlKTsgLyogQWRqdXN0IGZvciB1bnJlc2VydmVkIGJ1ZmZlciAqLworCQkJdHJhY2VfZ2ZzMl9sb2dfYmxvY2tzKHNkcCwgLTEpOworCQkJc2RwLT5zZF9sb2dfZmx1c2hfd3JhcHBlZCA9IDA7CisJCQlsb2dfd3JpdGVfaGVhZGVyKHNkcCwgMCk7CisJCQlzZHAtPnNkX2xvZ19oZWFkID0gc2RwLT5zZF9sb2dfZmx1c2hfaGVhZDsKKwkJfQorCQlpZiAodHlwZSA9PSBTSFVURE9XTl9GTFVTSCB8fCB0eXBlID09IEZSRUVaRV9GTFVTSCkKKwkJCWdmczJfbG9nX3NodXRkb3duKHNkcCk7CisJCWlmICh0eXBlID09IEZSRUVaRV9GTFVTSCkgeworCQkJaW50IGVycm9yOworCisJCQlhdG9taWNfc2V0KCZzZHAtPnNkX2xvZ19mcmVlemUsIDApOworCQkJd2FrZV91cCgmc2RwLT5zZF9sb2dfZnJvemVuX3dhaXQpOworCQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsCisJCQkJCQkgICBMTV9TVF9TSEFSRUQsIDAsCisJCQkJCQkgICAmc2RwLT5zZF90aGF3X2doKTsKKwkJCWlmIChlcnJvcikgeworCQkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNvdWxuJ3QgZ2V0IGZyZWV6ZSBsb2NrIDogJWRcbiIsIGVycm9yKTsKKwkJCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApOworCQkJfQorCQkJZWxzZQorCQkJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX3RoYXdfZ2gpOworCQl9CisJfQorCiAJdHJhY2VfZ2ZzMl9sb2dfZmx1c2goc2RwLCAwKTsKIAl1cF93cml0ZSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7CiAKQEAgLTc2MSw3ICs4MTgsNyBAQAogCWlmIChzZHAtPnNkX2xvZ190cikgewogCQlnZnMyX21lcmdlX3RyYW5zKHNkcC0+c2RfbG9nX3RyLCB0cik7CiAJfSBlbHNlIGlmICh0ci0+dHJfbnVtX2J1Zl9uZXcgfHwgdHItPnRyX251bV9kYXRhYnVmX25ldykgewotCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIHRyLT50cl90X2doLmdoX2dsKTsKKwkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCB0ci0+dHJfYWxsb2NlZCk7CiAJCXNkcC0+c2RfbG9nX3RyID0gdHI7CiAJCXRyLT50cl9hdHRhY2hlZCA9IDE7CiAJfQpAQCAtODEzLDggKzg3MCw2IEBACiAKIHZvaWQgZ2ZzMl9sb2dfc2h1dGRvd24oc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JZG93bl93cml0ZSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7Ci0KIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFzZHAtPnNkX2xvZ19ibGtzX3Jlc2VydmVkKTsKIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFzZHAtPnNkX2xvZ19udW1fcmV2b2tlKTsKIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIGxpc3RfZW1wdHkoJnNkcC0+c2RfYWlsMV9saXN0KSk7CkBAIC04MjQsMzggKzg3OSwxNiBAQAogCiAJbG9nX3dyaXRlX2hlYWRlcihzZHAsIEdGUzJfTE9HX0hFQURfVU5NT1VOVCk7CiAKLQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSkgPT0gc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2dfaGVhZCA9PSBzZHAtPnNkX2xvZ190YWlsKTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgbGlzdF9lbXB0eSgmc2RwLT5zZF9haWwyX2xpc3QpKTsKIAogCXNkcC0+c2RfbG9nX2hlYWQgPSBzZHAtPnNkX2xvZ19mbHVzaF9oZWFkOwogCXNkcC0+c2RfbG9nX3RhaWwgPSBzZHAtPnNkX2xvZ19oZWFkOwotCi0JdXBfd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwotfQotCi0KLS8qKgotICogZ2ZzMl9tZXRhX3N5bmNmcyAtIHN5bmMgYWxsIHRoZSBidWZmZXJzIGluIGEgZmlsZXN5c3RlbQotICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KLSAqCi0gKi8KLQotdm9pZCBnZnMyX21ldGFfc3luY2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7Ci0JZm9yICg7OykgewotCQlnZnMyX2FpbDFfc3RhcnQoc2RwKTsKLQkJZ2ZzMl9haWwxX3dhaXQoc2RwKTsKLQkJaWYgKGdmczJfYWlsMV9lbXB0eShzZHApKQotCQkJYnJlYWs7Ci0JfQotCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdmczJfanJubF9mbHVzaF9yZXFkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCXJldHVybiAoYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX3Bpbm5lZCkgPj0gYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX3RocmVzaDEpKTsKKwlyZXR1cm4gKGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19waW5uZWQpID49IGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ190aHJlc2gxKSB8fCBhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdmczJfYWlsX2ZsdXNoX3JlcWQoc3RydWN0IGdmczJfc2JkICpzZHApCkBAIC04ODIsMTQgKzkxNSwxNCBAQAogCiAJCWlmIChnZnMyX2pybmxfZmx1c2hfcmVxZChzZHApIHx8IHQgPT0gMCkgewogCQkJZ2ZzMl9haWwxX2VtcHR5KHNkcCk7Ci0JCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwpOworCQkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMLCBOT1JNQUxfRkxVU0gpOwogCQl9CiAKIAkJaWYgKGdmczJfYWlsX2ZsdXNoX3JlcWQoc2RwKSkgewogCQkJZ2ZzMl9haWwxX3N0YXJ0KHNkcCk7CiAJCQlnZnMyX2FpbDFfd2FpdChzZHApOwogCQkJZ2ZzMl9haWwxX2VtcHR5KHNkcCk7Ci0JCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwpOworCQkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMLCBOT1JNQUxfRkxVU0gpOwogCQl9CiAKIAkJaWYgKCFnZnMyX2FpbF9mbHVzaF9yZXFkKHNkcCkpCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5oIGIvZnMvZ2ZzMi9sb2cuaAppbmRleCAzNzIxNjYzLi45NDk5YTYwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5oCisrKyBiL2ZzL2dmczIvbG9nLmgKQEAgLTYzLDE0ICs2MywyMSBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBnZnMyX3N0cnVjdDJibGsoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBuc3RydWN0LAogCQkJICAgIHVuc2lnbmVkIGludCBzc2l6ZSk7CiAKK2V4dGVybiB2b2lkIGdmczJfbG9nX3JlbGVhc2Uoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBibGtzKTsKIGV4dGVybiBpbnQgZ2ZzMl9sb2dfcmVzZXJ2ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGJsa3MpOwotZXh0ZXJuIHZvaWQgZ2ZzMl9sb2dfZmx1c2goc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CitlbnVtIGdmczJfZmx1c2hfdHlwZSB7CisJTk9STUFMX0ZMVVNIID0gMCwKKwlTWU5DX0ZMVVNILAorCVNIVVRET1dOX0ZMVVNILAorCUZSRUVaRV9GTFVTSAorfTsKK2V4dGVybiB2b2lkIGdmczJfbG9nX2ZsdXNoKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCisJCQkgICBlbnVtIGdmczJfZmx1c2hfdHlwZSB0eXBlKTsKIGV4dGVybiB2b2lkIGdmczJfbG9nX2NvbW1pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfdHJhbnMgKnRyYW5zKTsKIGV4dGVybiB2b2lkIGdmczJfcmVtb3ZlX2Zyb21fYWlsKHN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkKTsKIGV4dGVybiB2b2lkIGdmczJfYWlsMV9mbHVzaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogCiBleHRlcm4gdm9pZCBnZnMyX2xvZ19zaHV0ZG93bihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci1leHRlcm4gdm9pZCBnZnMyX21ldGFfc3luY2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIGV4dGVybiBpbnQgZ2ZzMl9sb2dkKHZvaWQgKmRhdGEpOwogZXh0ZXJuIHZvaWQgZ2ZzMl9hZGRfcmV2b2tlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCk7CiBleHRlcm4gdm9pZCBnZnMyX3dyaXRlX3Jldm9rZXMoc3RydWN0IGdmczJfc2JkICpzZHApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuYwppbmRleCBhMjk0ZDhkLi4yYzFhZTg2IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvcHMuYworKysgYi9mcy9nZnMyL2xvcHMuYwpAQCAtNzUsNyArNzUsNyBAQAogCXVuc2lnbmVkIGludCBpbmRleCA9IGJkLT5iZF9iaC0+Yl9ibG9ja25yIC0gZ2wtPmdsX25hbWUubG5fbnVtYmVyOwogCXN0cnVjdCBnZnMyX2JpdG1hcCAqYmkgPSByZ2QtPnJkX2JpdHMgKyBpbmRleDsKIAotCWlmIChiaS0+YmlfY2xvbmUgPT0gMCkKKwlpZiAoYmktPmJpX2Nsb25lID09IE5VTEwpCiAJCXJldHVybjsKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQpCiAJCWdmczJfcmdycF9zZW5kX2Rpc2NhcmRzKHNkcCwgcmdkLT5yZF9kYXRhMCwgYmQtPmJkX2JoLCBiaSwgMSwgTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19mc3R5cGUuYyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCmluZGV4IDIyZjk1NDAuLmJjNTY0YzAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCkBAIC05NCw2ICs5NCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfamluZGV4X2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX2ppbmRleF9zcGluKTsKIAltdXRleF9pbml0KCZzZHAtPnNkX2ppbmRleF9tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZzZHAtPnNkX2pvdXJuYWxfcmVhZHkpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAJbXV0ZXhfaW5pdCgmc2RwLT5zZF9xdW90YV9tdXRleCk7CkBAIC0xMjksNiArMTMwLDEwIEBACiAJaW5pdF9yd3NlbSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7CiAJYXRvbWljX3NldCgmc2RwLT5zZF9sb2dfaW5fZmxpZ2h0LCAwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX2xvZ19mbHVzaF93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX2xvZ19mcm96ZW5fd2FpdCk7CisJYXRvbWljX3NldCgmc2RwLT5zZF9sb2dfZnJlZXplLCAwKTsKKwlhdG9taWNfc2V0KCZzZHAtPnNkX2Zyb3plbl9yb290LCAwKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX2Zyb3plbl9yb290X3dhaXQpOwogCiAJcmV0dXJuIHNkcDsKIH0KQEAgLTQxOSw4ICs0MjQsOCBAQAogCQlnb3RvIGZhaWxfbGl2ZTsKIAl9CiAKLQllcnJvciA9IGdmczJfZ2xvY2tfZ2V0KHNkcCwgR0ZTMl9UUkFOU19MT0NLLCAmZ2ZzMl90cmFuc19nbG9wcywKLQkJCSAgICAgICBDUkVBVEUsICZzZHAtPnNkX3RyYW5zX2dsKTsKKwllcnJvciA9IGdmczJfZ2xvY2tfZ2V0KHNkcCwgR0ZTMl9GUkVFWkVfTE9DSywgJmdmczJfZnJlZXplX2dsb3BzLAorCQkJICAgICAgIENSRUFURSwgJnNkcC0+c2RfZnJlZXplX2dsKTsKIAlpZiAoZXJyb3IpIHsKIAkJZnNfZXJyKHNkcCwgImNhbid0IGNyZWF0ZSB0cmFuc2FjdGlvbiBnbG9jazogJWRcbiIsIGVycm9yKTsKIAkJZ290byBmYWlsX3JlbmFtZTsKQEAgLTQyOSw3ICs0MzQsNyBAQAogCXJldHVybiAwOwogCiBmYWlsX3RyYW5zOgotCWdmczJfZ2xvY2tfcHV0KHNkcC0+c2RfdHJhbnNfZ2wpOworCWdmczJfZ2xvY2tfcHV0KHNkcC0+c2RfZnJlZXplX2dsKTsKIGZhaWxfcmVuYW1lOgogCWdmczJfZ2xvY2tfcHV0KHNkcC0+c2RfcmVuYW1lX2dsKTsKIGZhaWxfbGl2ZToKQEAgLTc1NSw3ICs3NjAsMTUgQEAKIAlzZXRfYml0KFNERl9KT1VSTkFMX0NIRUNLRUQsICZzZHAtPnNkX2ZsYWdzKTsKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCWppbmRleCA9IDA7Ci0KKwlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKKwkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsIExNX1NUX1NIQVJFRCwgMCwKKwkJCQkJICAgJnNkcC0+c2RfdGhhd19naCk7CisJCWlmIChlcnJvcikgeworCQkJZnNfZXJyKHNkcCwgImNhbid0IGFjcXVpcmUgZnJlZXplIGdsb2NrOiAlZFxuIiwgZXJyb3IpOworCQkJZ290byBmYWlsX2ppbm9kZV9naDsKKwkJfQorCX0KKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF90aGF3X2doKTsKIAlyZXR1cm4gMDsKIAogZmFpbF9qaW5vZGVfZ2g6CkBAIC03ODQsNiArNzk3LDcgQEAKIAkJZ290byBmYWlsX3Fpbm9kZTsKIAogCWVycm9yID0gaW5pdF9qb3VybmFsKHNkcCwgdW5kbyk7CisJY29tcGxldGVfYWxsKCZzZHAtPnNkX2pvdXJuYWxfcmVhZHkpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCkBAIC0xMjAwLDYgKzEyMTQsNyBAQAogZmFpbF9sb2NraW5nOgogCWluaXRfbG9ja2luZyhzZHAsICZtb3VudF9naCwgVU5ETyk7CiBmYWlsX2xtOgorCWNvbXBsZXRlX2FsbCgmc2RwLT5zZF9qb3VybmFsX3JlYWR5KTsKIAlnZnMyX2dsX2hhc2hfY2xlYXIoc2RwKTsKIAlnZnMyX2xtX3VubW91bnQoc2RwKTsKIGZhaWxfZGVidWc6CkBAIC0xMzgwLDcgKzEzOTUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2ZzMl9tZXRhX3N5bmNmcyhzZHApOworCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCwgU1lOQ19GTFVTSCk7CiAJZHB1dChzZHAtPnNkX3Jvb3RfZGlyKTsKIAlkcHV0KHNkcC0+c2RfbWFzdGVyX2Rpcik7CiAJc2RwLT5zZF9yb290X2RpciA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggYzRlZmZmZi4uNjRiMjlmNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtNzc4LDYgKzc3OCw3IEBACiAJCWlfc2l6ZV93cml0ZShpbm9kZSwgc2l6ZSk7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElNRTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlzZXRfYml0KFFERl9SRUZSRVNILCAmcWQtPnFkX2ZsYWdzKTsKIAlyZXR1cm4gMDsKIAogdW5sb2NrX291dDoKQEAgLTg3OSw3ICs4ODAsNyBAQAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2hzW3F4XSk7CiAJbXV0ZXhfdW5sb2NrKCZpcC0+aV9pbm9kZS5pX211dGV4KTsKIAlrZnJlZShnaHMpOwotCWdmczJfbG9nX2ZsdXNoKGlwLT5pX2dsLT5nbF9zYmQsIGlwLT5pX2dsKTsKKwlnZnMyX2xvZ19mbHVzaChpcC0+aV9nbC0+Z2xfc2JkLCBpcC0+aV9nbCwgTk9STUFMX0ZMVVNIKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmVjb3ZlcnkuYyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwppbmRleCA3YWQ0MDk0Li45NDU1NWQ0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCkBAIC00NTQsNyArNDU0LDcgQEAKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koamQtPmpkX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoamQtPmpkX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9sb2dfaGVhZGVyX2hvc3QgaGVhZDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgal9naCwgamlfZ2gsIHRfZ2g7CisJc3RydWN0IGdmczJfaG9sZGVyIGpfZ2gsIGppX2doLCB0aGF3X2doOwogCXVuc2lnbmVkIGxvbmcgdDsKIAlpbnQgcm8gPSAwOwogCXVuc2lnbmVkIGludCBwYXNzOwpAQCAtNTA4LDExICs1MDgsMTEgQEAKIAogCQl0ID0gamlmZmllczsKIAotCQkvKiBBY3F1aXJlIGEgc2hhcmVkIGhvbGQgb24gdGhlIHRyYW5zYWN0aW9uIGxvY2sgKi8KKwkJLyogQWNxdWlyZSBhIHNoYXJlZCBob2xkIG9uIHRoZSBmcmVlemUgbG9jayAqLwogCi0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfdHJhbnNfZ2wsIExNX1NUX1NIQVJFRCwKLQkJCQkJICAgTE1fRkxBR19OT0VYUCB8IExNX0ZMQUdfUFJJT1JJVFkgfAotCQkJCQkgICBHTF9OT0NBQ0hFLCAmdF9naCk7CisJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLCBMTV9TVF9TSEFSRUQsCisJCQkJCSAgIExNX0ZMQUdfTk9FWFAgfCBMTV9GTEFHX1BSSU9SSVRZLAorCQkJCQkgICAmdGhhd19naCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZmFpbF9ndW5sb2NrX2ppOwogCkBAIC01MzgsNyArNTM4LDcgQEAKIAkJCWZzX3dhcm4oc2RwLCAiamlkPSV1OiBDYW4ndCByZXBsYXk6IHJlYWQtb25seSBibG9jayAiCiAJCQkJImRldmljZVxuIiwgamQtPmpkX2ppZCk7CiAJCQllcnJvciA9IC1FUk9GUzsKLQkJCWdvdG8gZmFpbF9ndW5sb2NrX3RyOworCQkJZ290byBmYWlsX2d1bmxvY2tfdGhhdzsKIAkJfQogCiAJCWZzX2luZm8oc2RwLCAiamlkPSV1OiBSZXBsYXlpbmcgam91cm5hbC4uLlxuIiwgamQtPmpkX2ppZCk7CkBAIC01NDksMTQgKzU0OSwxNCBAQAogCQkJCQkJICAgaGVhZC5saF9ibGtubywgcGFzcyk7CiAJCQlsb3BzX2FmdGVyX3NjYW4oamQsIGVycm9yLCBwYXNzKTsKIAkJCWlmIChlcnJvcikKLQkJCQlnb3RvIGZhaWxfZ3VubG9ja190cjsKKwkJCQlnb3RvIGZhaWxfZ3VubG9ja190aGF3OwogCQl9CiAKIAkJZXJyb3IgPSBjbGVhbl9qb3VybmFsKGpkLCAmaGVhZCk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gZmFpbF9ndW5sb2NrX3RyOworCQkJZ290byBmYWlsX2d1bmxvY2tfdGhhdzsKIAotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmdF9naCk7CisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZ0aGF3X2doKTsKIAkJdCA9IERJVl9ST1VORF9VUChqaWZmaWVzIC0gdCwgSFopOwogCQlmc19pbmZvKHNkcCwgImppZD0ldTogSm91cm5hbCByZXBsYXllZCBpbiAlbHVzXG4iLAogCQkJamQtPmpkX2ppZCwgdCk7CkBAIC01NzIsOCArNTcyLDggQEAKIAlmc19pbmZvKHNkcCwgImppZD0ldTogRG9uZVxuIiwgamQtPmpkX2ppZCk7CiAJZ290byBkb25lOwogCi1mYWlsX2d1bmxvY2tfdHI6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnRfZ2gpOworZmFpbF9ndW5sb2NrX3RoYXc6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnRoYXdfZ2gpOwogZmFpbF9ndW5sb2NrX2ppOgogCWlmIChqbG9ja2VkKSB7CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CkBAIC01ODcsNyArNTg3LDcgQEAKIAlnZnMyX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9HQVZFVVApOwogZG9uZToKIAljbGVhcl9iaXQoSkRGX1JFQ09WRVJZLCAmamQtPmpkX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoJmpkLT5qZF9mbGFncywgSkRGX1JFQ09WRVJZKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCAyODFhNzcxLi5kYjYyOWQxIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtMjAwMSw3ICsyMDAxLDcgQEAKIAkJfQogCQkvKiBGbHVzaGluZyB0aGUgbG9nIG1heSByZWxlYXNlIHNwYWNlICovCiAJCWlmIChsb29wcyA9PSAyKQotCQkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKKwkJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCwgTk9STUFMX0ZMVVNIKTsKIAl9CiAKIAlyZXR1cm4gLUVOT1NQQzsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCBkZThhZmFkLi4xMzE5YjVjIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0zOTksNyArMzk5LDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koc2RwLT5zZF9qZGVzYy0+amRfaW5vZGUpOwogCXN0cnVjdCBnZnMyX2dsb2NrICpqX2dsID0gaXAtPmlfZ2w7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIHRfZ2g7CisJc3RydWN0IGdmczJfaG9sZGVyIHRoYXdfZ2g7CiAJc3RydWN0IGdmczJfbG9nX2hlYWRlcl9ob3N0IGhlYWQ7CiAJaW50IGVycm9yOwogCkBAIC00MDcsNyArNDA3LDggQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfdHJhbnNfZ2wsIExNX1NUX1NIQVJFRCwgMCwgJnRfZ2gpOworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfZnJlZXplX2dsLCBMTV9TVF9TSEFSRUQsIDAsCisJCQkJICAgJnRoYXdfZ2gpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX3RocmVhZHM7CiAKQEAgLTQzMywxMyArNDM0LDEzIEBACiAKIAlzZXRfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKTsKIAotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZ0X2doKTsKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmdGhhd19naCk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQl0X2doLmdoX2ZsYWdzIHw9IEdMX05PQ0FDSEU7Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnRfZ2gpOworCXRoYXdfZ2guZ2hfZmxhZ3MgfD0gR0xfTk9DQUNIRTsKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmdGhhd19naCk7CiBmYWlsX3RocmVhZHM6CiAJa3RocmVhZF9zdG9wKHNkcC0+c2RfcXVvdGFkX3Byb2Nlc3MpOwogCWt0aHJlYWRfc3RvcChzZHAtPnNkX2xvZ2RfcHJvY2Vzcyk7CkBAIC02MzUsMTUgKzYzNiwyMSBAQAogICovCiAKIHN0YXRpYyBpbnQgZ2ZzMl9sb2NrX2ZzX2NoZWNrX2NsZWFuKHN0cnVjdCBnZnMyX3NiZCAqc2RwLAotCQkJCSAgICBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKnRfZ2gpCisJCQkJICAgIHN0cnVjdCBnZnMyX2hvbGRlciAqZnJlZXplX2doKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcDsKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQ7CiAJc3RydWN0IGxmY2MgKmxmY2M7CiAJTElTVF9IRUFEKGxpc3QpOwogCXN0cnVjdCBnZnMyX2xvZ19oZWFkZXJfaG9zdCBsaDsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKHNkcC0+c2Rfcm9vdF9kaXItPmRfaW5vZGUpOwogCWludCBlcnJvcjsKIAorCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGRpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCAwLAorCQkJCSAgICZzZHAtPnNkX2ZyZWV6ZV9yb290X2doKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlhdG9taWNfc2V0KCZzZHAtPnNkX2Zyb3plbl9yb290LCAxKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewogCQlsZmNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxmY2MpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFsZmNjKSB7CkBAIC02NTksOCArNjY2LDggQEAKIAkJbGlzdF9hZGQoJmxmY2MtPmxpc3QsICZsaXN0KTsKIAl9CiAKLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX3RyYW5zX2dsLCBMTV9TVF9ERUZFUlJFRCwKLQkJCQkgICBHTF9OT0NBQ0hFLCB0X2doKTsKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX2ZyZWV6ZV9nbCwgTE1fU1RfRVhDTFVTSVZFLAorCQkJCSAgIEdMX05PQ0FDSEUsIGZyZWV6ZV9naCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewogCQllcnJvciA9IGdmczJfamRlc2NfY2hlY2soamQpOwpAQCAtNjc2LDcgKzY4Myw3IEBACiAJfQogCiAJaWYgKGVycm9yKQotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCh0X2doKTsKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoZnJlZXplX2doKTsKIAogb3V0OgogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKQEAgLTY4NSw2ICs2OTIsMTEgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmxmY2MtPmdoKTsKIAkJa2ZyZWUobGZjYyk7CiAJfQorCWlmIChlcnJvcikgeworCQlhdG9taWNfZGVjKCZzZHAtPnNkX2Zyb3plbl9yb290KTsKKwkJd2FpdF9ldmVudChzZHAtPnNkX2Zyb3plbl9yb290X3dhaXQsIGF0b21pY19yZWFkKCZzZHAtPnNkX2Zyb3plbl9yb290KSA9PSAwKTsKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfZnJlZXplX3Jvb3RfZ2gpOworCX0KIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTc0Miw3ICs3NTQsNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQotCQlnZnMyX2xvZ19mbHVzaChHRlMyX1NCKGlub2RlKSwgaXAtPmlfZ2wpOworCQlnZnMyX2xvZ19mbHVzaChHRlMyX1NCKGlub2RlKSwgaXAtPmlfZ2wsIE5PUk1BTF9GTFVTSCk7CiAJaWYgKGJkaS0+ZGlydHlfZXhjZWVkZWQpCiAJCWdmczJfYWlsMV9mbHVzaChzZHAsIHdiYyk7CiAJZWxzZQpAQCAtODIyLDkgKzgzNCwxOCBAQAogCiBzdGF0aWMgaW50IGdmczJfbWFrZV9mc19ybyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgdF9naDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgdGhhd19naDsKIAlpbnQgZXJyb3I7CiAKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX2ZyZWV6ZV9nbCwgTE1fU1RfU0hBUkVELCBHTF9OT0NBQ0hFLAorCQkJCSAgICZ0aGF3X2doKTsKKwlpZiAoZXJyb3IgJiYgIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQorCQlyZXR1cm4gZXJyb3I7CisKKwlkb3duX3dyaXRlKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKKwljbGVhcl9iaXQoU0RGX0pPVVJOQUxfTElWRSwgJnNkcC0+c2RfZmxhZ3MpOworCXVwX3dyaXRlKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKKwogCWt0aHJlYWRfc3RvcChzZHAtPnNkX3F1b3RhZF9wcm9jZXNzKTsKIAlrdGhyZWFkX3N0b3Aoc2RwLT5zZF9sb2dkX3Byb2Nlc3MpOwogCkBAIC04MzIsMTggKzg1MywxMSBAQAogCWdmczJfcXVvdGFfc3luYyhzZHAtPnNkX3ZmcywgMCk7CiAJZ2ZzMl9zdGF0ZnNfc3luYyhzZHAtPnNkX3ZmcywgMCk7CiAKLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX3RyYW5zX2dsLCBMTV9TVF9TSEFSRUQsIEdMX05PQ0FDSEUsCi0JCQkJICAgJnRfZ2gpOwotCWlmIChlcnJvciAmJiAhdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCi0JCXJldHVybiBlcnJvcjsKKwlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIFNIVVRET1dOX0ZMVVNIKTsKKwlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSkgPT0gc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKIAotCWdmczJfbWV0YV9zeW5jZnMoc2RwKTsKLQlnZnMyX2xvZ19zaHV0ZG93bihzZHApOwotCi0JY2xlYXJfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKTsKLQotCWlmICh0X2doLmdoX2dsKQotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmdF9naCk7CisJaWYgKHRoYXdfZ2guZ2hfZ2wpCisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZ0aGF3X2doKTsKIAogCWdmczJfcXVvdGFfY2xlYW51cChzZHApOwogCkBAIC05MDAsNyArOTE0LDcgQEAKIAlpcHV0KHNkcC0+c2RfcXVvdGFfaW5vZGUpOwogCiAJZ2ZzMl9nbG9ja19wdXQoc2RwLT5zZF9yZW5hbWVfZ2wpOwotCWdmczJfZ2xvY2tfcHV0KHNkcC0+c2RfdHJhbnNfZ2wpOworCWdmczJfZ2xvY2tfcHV0KHNkcC0+c2RfZnJlZXplX2dsKTsKIAogCWlmICghc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikgewogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9qb3VybmFsX2doKTsKQEAgLTkzNSw4ICs5NDksOCBAQAogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKIAogCWdmczJfcXVvdGFfc3luYyhzYiwgLTEpOwotCWlmICh3YWl0ICYmIHNkcCkKLQkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKKwlpZiAod2FpdCAmJiBzZHAgJiYgIWF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19mcmVlemUpKQorCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIE5PUk1BTF9GTFVTSCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4Niw2ICsxMDAwLDkgQEAKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9mcmVlemVfZ2gpOworCWF0b21pY19kZWMoJnNkcC0+c2RfZnJvemVuX3Jvb3QpOworCXdhaXRfZXZlbnQoc2RwLT5zZF9mcm96ZW5fcm9vdF93YWl0LCBhdG9taWNfcmVhZCgmc2RwLT5zZF9mcm96ZW5fcm9vdCkgPT0gMCk7CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfZnJlZXplX3Jvb3RfZ2gpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTI1LDcgKzE1NDIsNyBAQAogCWdvdG8gb3V0X3VubG9jazsKIAogb3V0X3RydW5jYXRlOgotCWdmczJfbG9nX2ZsdXNoKHNkcCwgaXAtPmlfZ2wpOworCWdmczJfbG9nX2ZsdXNoKHNkcCwgaXAtPmlfZ2wsIE5PUk1BTF9GTFVTSCk7CiAJaWYgKHRlc3RfYml0KEdMRl9ESVJUWSwgJmlwLT5pX2dsLT5nbF9mbGFncykpIHsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoaXAtPmlfZ2wpOwogCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWV0YW1hcHBpbmcpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zeXMuYyBiL2ZzL2dmczIvc3lzLmMKaW5kZXggZGUyNWQ1NS4uM2FiNTY2YiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC0yNDAsOCArMjQwLDggQEAKIAogCWlmIChnbHR5cGUgPiBMTV9UWVBFX0pPVVJOQUwpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChnbHR5cGUgPT0gTE1fVFlQRV9OT05ESVNLICYmIGdsbnVtID09IEdGUzJfVFJBTlNfTE9DSykKLQkJZ2xvcHMgPSAmZ2ZzMl90cmFuc19nbG9wczsKKwlpZiAoZ2x0eXBlID09IExNX1RZUEVfTk9ORElTSyAmJiBnbG51bSA9PSBHRlMyX0ZSRUVaRV9MT0NLKQorCQlnbG9wcyA9ICZnZnMyX2ZyZWV6ZV9nbG9wczsKIAllbHNlCiAJCWdsb3BzID0gZ2ZzMl9nbG9wc19saXN0W2dsdHlwZV07CiAJaWYgKGdsb3BzID09IE5VTEwpCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJc2V0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfcmVjb3Zlcl9mbGFncyk7CiAJZWxzZSBpZiAodmFsID09IDApIHsKIAkJY2xlYXJfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19yZWNvdmVyX2ZsYWdzKTsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJZ2ZzMl9nbG9ja190aGF3KHNkcCk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTQwNyw2ICs0MDcsOSBAQAogCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKIAlpbnQgcnY7CiAKKwkvKiBXYWl0IGZvciBvdXIgcHJpbWFyeSBqb3VybmFsIHRvIGJlIGluaXRpYWxpemVkICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmc2RwLT5zZF9qb3VybmFsX3JlYWR5KTsKKwogCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7CiAJcnYgPSAtRUJVU1k7CiAJaWYgKHNkcC0+c2RfamRlc2MtPmpkX2ppZCA9PSBqaWQpCkBAIC00ODIsNyArNDg1LDcgQEAKIAkJcnYgPSBqaWQgPSAtRUlOVkFMOwogCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQgPSBqaWQ7CiAJY2xlYXJfYml0KFNERl9OT0pPVVJOQUxJRCwgJnNkcC0+c2RfZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl3YWtlX3VwX2JpdCgmc2RwLT5zZF9mbGFncywgU0RGX05PSk9VUk5BTElEKTsKIG91dDoKIAlzcGluX3VubG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3RyYW5zLmMgYi9mcy9nZnMyL3RyYW5zLmMKaW5kZXggYmVhZDkwZC4uMDU0NmFiNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi90cmFucy5jCisrKyBiL2ZzL2dmczIvdHJhbnMuYwpAQCAtNDgsNiArNDgsNyBAQAogCXRyLT50cl9ibG9ja3MgPSBibG9ja3M7CiAJdHItPnRyX3Jldm9rZXMgPSByZXZva2VzOwogCXRyLT50cl9yZXNlcnZlZCA9IDE7CisJdHItPnRyX2FsbG9jZWQgPSAxOwogCWlmIChibG9ja3MpCiAJCXRyLT50cl9yZXNlcnZlZCArPSA2ICsgYmxvY2tzOwogCWlmIChyZXZva2VzKQpAQCAtNTcsNDggKzU4LDIyIEBACiAJSU5JVF9MSVNUX0hFQUQoJnRyLT50cl9idWYpOwogCiAJc2Jfc3RhcnRfaW50d3JpdGUoc2RwLT5zZF92ZnMpOwotCWdmczJfaG9sZGVyX2luaXQoc2RwLT5zZF90cmFuc19nbCwgTE1fU1RfU0hBUkVELCAwLCAmdHItPnRyX3RfZ2gpOwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKCZ0ci0+dHJfdF9naCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWxfaG9sZGVyX3VuaW5pdDsKIAogCWVycm9yID0gZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLT50cl9yZXNlcnZlZCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGZhaWxfZ3VubG9jazsKKwkJZ290byBmYWlsOwogCiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gdHI7CiAKIAlyZXR1cm4gMDsKIAotZmFpbF9ndW5sb2NrOgotCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKLQotZmFpbF9ob2xkZXJfdW5pbml0OgorZmFpbDoKIAlzYl9lbmRfaW50d3JpdGUoc2RwLT5zZF92ZnMpOwotCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOwogCWtmcmVlKHRyKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAotLyoqCi0gKiBnZnMyX2xvZ19yZWxlYXNlIC0gUmVsZWFzZSBhIGdpdmVuIG51bWJlciBvZiBsb2cgYmxvY2tzCi0gKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAYmxrczogVGhlIG51bWJlciBvZiBibG9ja3MKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgZ2ZzMl9sb2dfcmVsZWFzZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGJsa3MpCi17Ci0KLQlhdG9taWNfYWRkKGJsa3MsICZzZHAtPnNkX2xvZ19ibGtzX2ZyZWUpOwotCXRyYWNlX2dmczJfbG9nX2Jsb2NrcyhzZHAsIGJsa3MpOwotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSkgPD0KLQkJCQkgIHNkcC0+c2RfamRlc2MtPmpkX2Jsb2Nrcyk7Ci0JdXBfcmVhZCgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdmczJfcHJpbnRfdHJhbnMoY29uc3Qgc3RydWN0IGdmczJfdHJhbnMgKnRyKQogewogCXByX3dhcm4oIlRyYW5zYWN0aW9uIGNyZWF0ZWQgYXQ6ICVwU1JcbiIsICh2b2lkICopdHItPnRyX2lwKTsKQEAgLTExOSwxMSArOTQsOCBAQAogCiAJaWYgKCF0ci0+dHJfdG91Y2hlZCkgewogCQlnZnMyX2xvZ19yZWxlYXNlKHNkcCwgdHItPnRyX3Jlc2VydmVkKTsKLQkJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7Ci0JCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7Ci0JCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKKwkJaWYgKHRyLT50cl9hbGxvY2VkKQogCQkJa2ZyZWUodHIpOwotCQl9CiAJCXNiX2VuZF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzcsMTYgKzEwOSwxMiBAQAogCQlnZnMyX3ByaW50X3RyYW5zKHRyKTsKIAogCWdmczJfbG9nX2NvbW1pdChzZHAsIHRyKTsKLQlpZiAodHItPnRyX3RfZ2guZ2hfZ2wpIHsKLQkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOwotCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKLQkJaWYgKCF0ci0+dHJfYXR0YWNoZWQpCisJaWYgKHRyLT50cl9hbGxvY2VkICYmICF0ci0+dHJfYXR0YWNoZWQpCiAJCQlrZnJlZSh0cik7Ci0JfQogCXVwX3JlYWQoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwogCiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfU1lOQ0hST05PVVMpCi0JCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7CisJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCwgTk9STUFMX0ZMVVNIKTsKIAlzYl9lbmRfaW50d3JpdGUoc2RwLT5zZF92ZnMpOwogfQogCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCA1ZjI2MTM5Li42ZmFjNzQzIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkJY2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAlpZiAob3JpZ19iaCkgewogCQljbGVhcl9iaXRfdW5sb2NrKEJIX1NoYWRvdywgJm9yaWdfYmgtPmJfc3RhdGUpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQl3YWtlX3VwX2JpdCgmb3JpZ19iaC0+Yl9zdGF0ZSwgQkhfU2hhZG93KTsKIAl9CiAJdW5sb2NrX2J1ZmZlcihiaCk7CkBAIC0yMzksNyArMjM5LDcgQEAKIAkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCUpfQVNTRVJUKGppbm9kZS0+aV90cmFuc2FjdGlvbiA9PSBjb21taXRfdHJhbnNhY3Rpb24pOwogCQljbGVhcl9iaXQoX19KSV9DT01NSVRfUlVOTklORywgJmppbm9kZS0+aV9mbGFncyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXdha2VfdXBfYml0KCZqaW5vZGUtPmlfZmxhZ3MsIF9fSklfQ09NTUlUX1JVTk5JTkcpOwogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCX0KIAkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCWNsZWFyX2JpdChfX0pJX0NPTU1JVF9SVU5OSU5HLCAmamlub2RlLT5pX2ZsYWdzKTsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJd2FrZV91cF9iaXQoJmppbm9kZS0+aV9mbGFncywgX19KSV9DT01NSVRfUlVOTklORyk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvYWNsLmMgYi9mcy9qZnMvYWNsLmMKaW5kZXggNWE4ZWExNi4uMGM4Y2E4MyAxMDA2NDQKLS0tIGEvZnMvamZzL2FjbC5jCisrKyBiL2ZzL2pmcy9hY2wuYwpAQCAtODMsMTMgKzgzLDE1IEBACiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CiAJCWVhX25hbWUgPSBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTOwotCQlyYyA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJmlub2RlLT5pX21vZGUpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JCWlmIChyYyA9PSAwKQotCQkJYWNsID0gTlVMTDsKKwkJaWYgKGFjbCkgeworCQkJcmMgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZpbm9kZS0+aV9tb2RlKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJCWlmIChyYyA9PSAwKQorCQkJCWFjbCA9IE5VTEw7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgogCQllYV9uYW1lID0gUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQ7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jCmluZGV4IDM3MGQ3YjYuLjJkNTE0YzcgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZG1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfZG1hcC5jCkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogCQkJCSAqIGJ5IHRoaXMgbGVhZi4KIAkJCQkgKi8KIAkJCQlsMnNpemUgPQotCQkJCSAgICBtaW4oKGludClsZWFmW3dvcmRdLCBOTFNUT0wyQlNaKG53b3JkcykpOworCQkJCSAgICBtaW5fdChpbnQsIGxlYWZbd29yZF0sIE5MU1RPTDJCU1oobndvcmRzKSk7CiAKIAkJCQkvKiBkZXRlcm1pbmUgaG93IG1hbnkgd29yZHMgd2VyZSBoYW5kbGVkLgogCQkJCSAqLwpAQCAtMTkwMiw3ICsxOTAyLDcgQEAKIAogCQkvKiBkZXRlcm1pbmUgaG93IG1hbnkgYmxvY2tzIHRvIGFsbG9jYXRlIGZyb20gdGhpcyBkbWFwLgogCQkgKi8KLQkJbmIgPSBtaW4obiwgKHM2NClCUEVSRE1BUCk7CisJCW5iID0gbWluX3QoczY0LCBuLCBCUEVSRE1BUCk7CiAKIAkJLyogYWxsb2NhdGUgdGhlIGJsb2NrcyBmcm9tIHRoZSBkbWFwLgogCQkgKi8KQEAgLTIyNjAsNyArMjI2MCw4IEBACiAJCQkJICogb2YgYml0cyBiZWluZyBhbGxvY2F0ZWQgYW5kIHRoZSBsMiBudW1iZXIKIAkJCQkgKiBvZiBiaXRzIGN1cnJlbnRseSBkZXNjcmliZWQgYnkgdGhpcyBsZWFmLgogCQkJCSAqLwotCQkJCXNpemUgPSBtaW4oKGludClsZWFmW3dvcmRdLCBOTFNUT0wyQlNaKG53b3JkcykpOworCQkJCXNpemUgPSBtaW5fdChpbnQsIGxlYWZbd29yZF0sCisJCQkJCSAgICAgTkxTVE9MMkJTWihud29yZHMpKTsKIAogCQkJCS8qIHVwZGF0ZSB0aGUgbGVhZiB0byByZWZsZWN0IHRoZSBhbGxvY2F0aW9uLgogCQkJCSAqIGluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIGxlYWYgdmFsdWUgdG8KQEAgLTM1NjMsNyArMzU2NCw3IEBACiAJCQkJCWlmIChtcCA9PSBOVUxMKQogCQkJCQkJZ290byBlcnJvdXQ7CiAKLQkJCQkJbiA9IG1pbihuYmxvY2tzLCAoczY0KUJQRVJETUFQKTsKKwkJCQkJbiA9IG1pbl90KHM2NCwgbmJsb2NrcywgQlBFUkRNQVApOwogCQkJCX0KIAogCQkJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLT5kYXRhOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbm9kZS5jIGIvZnMvamZzL2pmc19pbm9kZS5jCmluZGV4IDdmNDY0YzUuLjZiMGY4MTYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW5vZGUuYworKysgYi9mcy9qZnMvamZzX2lub2RlLmMKQEAgLTI5LDIwICsyOSwyMCBAQAogdm9pZCBqZnNfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gSkZTX0lQKGlub2RlKS0+bW9kZTI7Ci0KLQlpbm9kZS0+aV9mbGFncyAmPSB+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfAotCQlTX05PQVRJTUUgfCBTX0RJUlNZTkMgfCBTX1NZTkMpOworCXVuc2lnbmVkIGludCBuZXdfZmwgPSAwOwogCiAJaWYgKGZsYWdzICYgSkZTX0lNTVVUQUJMRV9GTCkKLQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CisJCW5ld19mbCB8PSBTX0lNTVVUQUJMRTsKIAlpZiAoZmxhZ3MgJiBKRlNfQVBQRU5EX0ZMKQotCQlpbm9kZS0+aV9mbGFncyB8PSBTX0FQUEVORDsKKwkJbmV3X2ZsIHw9IFNfQVBQRU5EOwogCWlmIChmbGFncyAmIEpGU19OT0FUSU1FX0ZMKQotCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PQVRJTUU7CisJCW5ld19mbCB8PSBTX05PQVRJTUU7CiAJaWYgKGZsYWdzICYgSkZTX0RJUlNZTkNfRkwpCi0JCWlub2RlLT5pX2ZsYWdzIHw9IFNfRElSU1lOQzsKKwkJbmV3X2ZsIHw9IFNfRElSU1lOQzsKIAlpZiAoZmxhZ3MgJiBKRlNfU1lOQ19GTCkKLQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19TWU5DOworCQluZXdfZmwgfD0gU19TWU5DOworCWlub2RlX3NldF9mbGFncyhpbm9kZSwgbmV3X2ZsLCBTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19OT0FUSU1FIHwKKwkJCVNfRElSU1lOQyB8IFNfU1lOQyk7CiB9CiAKIHZvaWQgamZzX2dldF9pbm9kZV9mbGFncyhzdHJ1Y3QgamZzX2lub2RlX2luZm8gKmpmc19pcCkKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMgYi9mcy9qZnMvamZzX2xvZ21nci5jCmluZGV4IDhkODExZTAuLjBhY2RkZjYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgKiBHbG9iYWwgbGlzdCBvZiBhY3RpdmUgZXh0ZXJuYWwgam91cm5hbHMKICAqLwogc3RhdGljIExJU1RfSEVBRChqZnNfZXh0ZXJuYWxfbG9ncyk7Ci1zdGF0aWMgc3RydWN0IGpmc19sb2cgKmR1bW15X2xvZyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGpmc19sb2cgKmR1bW15X2xvZzsKIHN0YXRpYyBERUZJTkVfTVVURVgoamZzX2xvZ19tdXRleCk7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IDk3ZjdmZGEuLmFkZjhjYjAgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC01MCwxNCArNTAsMTQgQEAKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlIEJlc3QvRGF2ZSBLbGVpa2FtcC9CYXJyeSBBcm5kdCwgSUJNIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIGpmc19pbm9kZV9jYWNoZXA7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmpmc19pbm9kZV9jYWNoZXA7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBqZnNfc3VwZXJfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgamZzX2V4cG9ydF9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGpmc19mc190eXBlOwogCiAjZGVmaW5lIE1BWF9DT01NSVRfVEhSRUFEUyA2NAotc3RhdGljIGludCBjb21taXRfdGhyZWFkcyA9IDA7CitzdGF0aWMgaW50IGNvbW1pdF90aHJlYWRzOwogbW9kdWxlX3BhcmFtKGNvbW1pdF90aHJlYWRzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhjb21taXRfdGhyZWFkcywgIk51bWJlciBvZiBjb21taXQgdGhyZWFkcyIpOwogCkBAIC04NCw4ICs4NCw3IEBACiAJCXBhbmljKCJKRlMgKGRldmljZSAlcyk6IHBhbmljIGZvcmNlZCBhZnRlciBlcnJvclxuIiwKIAkJCXNiLT5zX2lkKTsKIAllbHNlIGlmIChzYmktPmZsYWcgJiBKRlNfRVJSX1JFTU9VTlRfUk8pIHsKLQkJamZzX2VycigiRVJST1I6IChkZXZpY2UgJXMpOiByZW1vdW50aW5nIGZpbGVzeXN0ZW0gIgotCQkJImFzIHJlYWQtb25seVxuIiwKKwkJamZzX2VycigiRVJST1I6IChkZXZpY2UgJXMpOiByZW1vdW50aW5nIGZpbGVzeXN0ZW0gYXMgcmVhZC1vbmx5XG4iLAogCQkJc2ItPnNfaWQpOwogCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJfQpAQCAtMjczLDcgKzI3MiwxMCBAQAogCQljYXNlIE9wdF9yZXNpemU6CiAJCXsKIAkJCWNoYXIgKnJlc2l6ZSA9IGFyZ3NbMF0uZnJvbTsKLQkJCSpuZXdMVlNpemUgPSBzaW1wbGVfc3RydG91bGwocmVzaXplLCAmcmVzaXplLCAwKTsKKwkJCWludCByYyA9IGtzdHJ0b2xsKHJlc2l6ZSwgMCwgbmV3TFZTaXplKTsKKworCQkJaWYgKHJjKQorCQkJCWdvdG8gY2xlYW51cDsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgT3B0X3Jlc2l6ZV9ub3NpemU6CkBAIC0zMjcsNyArMzI5LDExIEBACiAJCWNhc2UgT3B0X3VpZDoKIAkJewogCQkJY2hhciAqdWlkID0gYXJnc1swXS5mcm9tOwotCQkJdWlkX3QgdmFsID0gc2ltcGxlX3N0cnRvdWwodWlkLCAmdWlkLCAwKTsKKwkJCXVpZF90IHZhbDsKKwkJCWludCByYyA9IGtzdHJ0b3VpbnQodWlkLCAwLCAmdmFsKTsKKworCQkJaWYgKHJjKQorCQkJCWdvdG8gY2xlYW51cDsKIAkJCXNiaS0+dWlkID0gbWFrZV9rdWlkKGN1cnJlbnRfdXNlcl9ucygpLCB2YWwpOwogCQkJaWYgKCF1aWRfdmFsaWQoc2JpLT51aWQpKQogCQkJCWdvdG8gY2xlYW51cDsKQEAgLTMzNyw3ICszNDMsMTEgQEAKIAkJY2FzZSBPcHRfZ2lkOgogCQl7CiAJCQljaGFyICpnaWQgPSBhcmdzWzBdLmZyb207Ci0JCQlnaWRfdCB2YWwgPSBzaW1wbGVfc3RydG91bChnaWQsICZnaWQsIDApOworCQkJZ2lkX3QgdmFsOworCQkJaW50IHJjID0ga3N0cnRvdWludChnaWQsIDAsICZ2YWwpOworCisJCQlpZiAocmMpCisJCQkJZ290byBjbGVhbnVwOwogCQkJc2JpLT5naWQgPSBtYWtlX2tnaWQoY3VycmVudF91c2VyX25zKCksIHZhbCk7CiAJCQlpZiAoIWdpZF92YWxpZChzYmktPmdpZCkpCiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMzQ3LDcgKzM1NywxMCBAQAogCQljYXNlIE9wdF91bWFzazoKIAkJewogCQkJY2hhciAqdW1hc2sgPSBhcmdzWzBdLmZyb207Ci0JCQlzYmktPnVtYXNrID0gc2ltcGxlX3N0cnRvdWwodW1hc2ssICZ1bWFzaywgOCk7CisJCQlpbnQgcmMgPSBrc3RydG91aW50KHVtYXNrLCA4LCAmc2JpLT51bWFzayk7CisKKwkJCWlmIChyYykKKwkJCQlnb3RvIGNsZWFudXA7CiAJCQlpZiAoc2JpLT51bWFzayAmIH4wNzc3KSB7CiAJCQkJcHJfZXJyKCJKRlM6IEludmFsaWQgdmFsdWUgb2YgdW1hc2tcbiIpOwogCQkJCWdvdG8gY2xlYW51cDsKQEAgLTM2MywxMiArMzc2LDEwIEBACiAJCQkgKiAtPiB1c2VyIGhhcyBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgb25saW5lIHRyaW1taW5nCiAJCQkgKi8KIAkJCXNiaS0+bWluYmxrc190cmltID0gNjQ7Ci0JCQlpZiAoYmxrX3F1ZXVlX2Rpc2NhcmQocSkpIHsKKwkJCWlmIChibGtfcXVldWVfZGlzY2FyZChxKSkKIAkJCQkqZmxhZyB8PSBKRlNfRElTQ0FSRDsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJfZXJyKCJKRlM6IGRpc2NhcmQgb3B0aW9uICIgXAotCQkJCQkibm90IHN1cHBvcnRlZCBvbiBkZXZpY2VcbiIpOwotCQkJfQorCQkJZWxzZQorCQkJCXByX2VycigiSkZTOiBkaXNjYXJkIG9wdGlvbiBub3Qgc3VwcG9ydGVkIG9uIGRldmljZVxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zODAsMjAgKzM5MSwyMSBAQAogCQl7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKHNiLT5zX2JkZXYpOwogCQkJY2hhciAqbWluYmxrc190cmltID0gYXJnc1swXS5mcm9tOworCQkJaW50IHJjOwogCQkJaWYgKGJsa19xdWV1ZV9kaXNjYXJkKHEpKSB7CiAJCQkJKmZsYWcgfD0gSkZTX0RJU0NBUkQ7Ci0JCQkJc2JpLT5taW5ibGtzX3RyaW0gPSBzaW1wbGVfc3RydG91bGwoCi0JCQkJCW1pbmJsa3NfdHJpbSwgJm1pbmJsa3NfdHJpbSwgMCk7Ci0JCQl9IGVsc2UgewotCQkJCXByX2VycigiSkZTOiBkaXNjYXJkIG9wdGlvbiAiIFwKLQkJCQkJIm5vdCBzdXBwb3J0ZWQgb24gZGV2aWNlXG4iKTsKLQkJCX0KKwkJCQlyYyA9IGtzdHJ0b3VpbnQobWluYmxrc190cmltLCAwLAorCQkJCQkJJnNiaS0+bWluYmxrc190cmltKTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0gZWxzZQorCQkJCXByX2VycigiSkZTOiBkaXNjYXJkIG9wdGlvbiBub3Qgc3VwcG9ydGVkIG9uIGRldmljZVxuIik7CiAJCQlicmVhazsKIAkJfQogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoImpmczogVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgotCQkJCQkiIG9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOworCQkJcHJpbnRrKCJqZnM6IFVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiIG9yIG1pc3NpbmcgdmFsdWVcbiIsCisJCQkgICAgICAgcCk7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9CkBAIC00MTksMTQgKzQzMSwxMiBAQAogCWludCByZXQ7CiAKIAlzeW5jX2ZpbGVzeXN0ZW0oc2IpOwotCWlmICghcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYiwgJm5ld0xWU2l6ZSwgJmZsYWcpKSB7CisJaWYgKCFwYXJzZV9vcHRpb25zKGRhdGEsIHNiLCAmbmV3TFZTaXplLCAmZmxhZykpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWlmIChuZXdMVlNpemUpIHsKIAkJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCQlwcl9lcnIoIkpGUzogcmVzaXplIHJlcXVpcmVzIHZvbHVtZSIgXAotCQkJCSIgdG8gYmUgbW91bnRlZCByZWFkLXdyaXRlXG4iKTsKKwkJCXByX2VycigiSkZTOiByZXNpemUgcmVxdWlyZXMgdm9sdW1lIHRvIGJlIG1vdW50ZWQgcmVhZC13cml0ZVxuIik7CiAJCQlyZXR1cm4gLUVST0ZTOwogCQl9CiAJCXJjID0gamZzX2V4dGVuZGZzKHNiLCBuZXdMVlNpemUsIDApOwpAQCAtNDUyLDkgKzQ2Miw4IEBACiAJfQogCWlmICgoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpICYmICgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXJjID0gZHF1b3Rfc3VzcGVuZChzYiwgLTEpOwotCQlpZiAocmMgPCAwKSB7CisJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7Ci0JCX0KIAkJcmMgPSBqZnNfdW1vdW50X3J3KHNiKTsKIAkJSkZTX1NCSShzYiktPmZsYWcgPSBmbGFnOwogCQlyZXR1cm4gcmM7CkBAIC00ODcsNyArNDk2LDcgQEAKIAlpZiAoIW5ld192YWxpZF9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQlzYmkgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGpmc19zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGpmc19zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01NDgsOSArNTU3LDggQEAKIAogCXJjID0gamZzX21vdW50KHNiKTsKIAlpZiAocmMpIHsKLQkJaWYgKCFzaWxlbnQpIHsKKwkJaWYgKCFzaWxlbnQpCiAJCQlqZnNfZXJyKCJqZnNfbW91bnQgZmFpbGVkIHcvcmV0dXJuIGNvZGUgPSAlZCIsIHJjKTsKLQkJfQogCQlnb3RvIG91dF9tb3VudF9mYWlsZWQ7CiAJfQogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKQEAgLTU4Nyw3ICs1OTUsOCBAQAogCSAqIFBhZ2UgY2FjaGUgaXMgaW5kZXhlZCBieSBsb25nLgogCSAqIEkgd291bGQgdXNlIE1BWF9MRlNfRklMRVNJWkUsIGJ1dCBpdCdzIG9ubHkgaGFsZiBhcyBiaWcKIAkgKi8KLQlzYi0+c19tYXhieXRlcyA9IG1pbigoKHU2NCkgUEFHRV9DQUNIRV9TSVpFIDw8IDMyKSAtIDEsICh1NjQpc2ItPnNfbWF4Ynl0ZXMpOworCXNiLT5zX21heGJ5dGVzID0gbWluKCgodTY0KSBQQUdFX0NBQ0hFX1NJWkUgPDwgMzIpIC0gMSwKKwkJCSAgICAgKHU2NClzYi0+c19tYXhieXRlcyk7CiAjZW5kaWYKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXJldHVybiAwOwpAQCAtNTk3LDkgKzYwNiw4IEBACiAKIG91dF9ub19ydzoKIAlyYyA9IGpmc191bW91bnQoc2IpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJamZzX2VycigiamZzX3Vtb3VudCBmYWlsZWQgd2l0aCByZXR1cm4gY29kZSAlZCIsIHJjKTsKLQl9CiBvdXRfbW91bnRfZmFpbGVkOgogCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLT5kaXJlY3RfaW5vZGUtPmlfbWFwcGluZyk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoc2JpLT5kaXJlY3RfaW5vZGUtPmlfbWFwcGluZywgMCk7CkBAIC05MjQsNyArOTMyLDggQEAKIAkJY29tbWl0X3RocmVhZHMgPSBNQVhfQ09NTUlUX1RIUkVBRFM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29tbWl0X3RocmVhZHM7IGkrKykgewotCQlqZnNDb21taXRUaHJlYWRbaV0gPSBrdGhyZWFkX3J1bihqZnNfbGF6eWNvbW1pdCwgTlVMTCwgImpmc0NvbW1pdCIpOworCQlqZnNDb21taXRUaHJlYWRbaV0gPSBrdGhyZWFkX3J1bihqZnNfbGF6eWNvbW1pdCwgTlVMTCwKKwkJCQkJCSAiamZzQ29tbWl0Iik7CiAJCWlmIChJU19FUlIoamZzQ29tbWl0VGhyZWFkW2ldKSkgewogCQkJcmMgPSBQVFJfRVJSKGpmc0NvbW1pdFRocmVhZFtpXSk7CiAJCQlqZnNfZXJyKCJpbml0X2pmc19mczogZm9yayBmYWlsZWQgdy9yYyA9ICVkIiwgcmMpOwpkaWZmIC0tZ2l0IGEvZnMva2VybmZzL2Rpci5jIGIvZnMva2VybmZzL2Rpci5jCmluZGV4IGFjMTI3Y2QuLmE2OTNmNWIgMTAwNjQ0Ci0tLSBhL2ZzL2tlcm5mcy9kaXIuYworKysgYi9mcy9rZXJuZnMvZGlyLmMKQEAgLTcxNCw2ICs3MTQsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWlkYV9pbml0KCZyb290LT5pbm9faWRhKTsKKwlJTklUX0xJU1RfSEVBRCgmcm9vdC0+c3VwZXJzKTsKIAogCWtuID0gX19rZXJuZnNfbmV3X25vZGUocm9vdCwgIiIsIFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKIAkJCSAgICAgICBLRVJORlNfRElSKTsKZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9maWxlLmMgYi9mcy9rZXJuZnMvZmlsZS5jCmluZGV4IDVlOWE4MGMuLmUzZDM3ZjYgMTAwNjQ0Ci0tLSBhL2ZzL2tlcm5mcy9maWxlLmMKKysrIGIvZnMva2VybmZzL2ZpbGUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogCiAjaW5jbHVkZSAia2VybmZzLWludGVybmFsLmgiCiAKQEAgLTc5MCwyMCArNzkxLDQ4IEBACiAgKi8KIHZvaWQga2VybmZzX25vdGlmeShzdHJ1Y3Qga2VybmZzX25vZGUgKmtuKQogeworCXN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCA9IGtlcm5mc19yb290KGtuKTsKIAlzdHJ1Y3Qga2VybmZzX29wZW5fbm9kZSAqb247CisJc3RydWN0IGtlcm5mc19zdXBlcl9pbmZvICppbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoV0FSTl9PTihrZXJuZnNfdHlwZShrbikgIT0gS0VSTkZTX0ZJTEUpKQorCQlyZXR1cm47CisKKwkvKiBraWNrIHBvbGwgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgma2VybmZzX29wZW5fbm9kZV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIVdBUk5fT04oa2VybmZzX3R5cGUoa24pICE9IEtFUk5GU19GSUxFKSkgewotCQlvbiA9IGtuLT5hdHRyLm9wZW47Ci0JCWlmIChvbikgewotCQkJYXRvbWljX2luYygmb24tPmV2ZW50KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb24tPnBvbGwpOwotCQl9CisJb24gPSBrbi0+YXR0ci5vcGVuOworCWlmIChvbikgeworCQlhdG9taWNfaW5jKCZvbi0+ZXZlbnQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9uLT5wb2xsKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrZXJuZnNfb3Blbl9ub2RlX2xvY2ssIGZsYWdzKTsKKworCS8qIGtpY2sgZnNub3RpZnkgKi8KKwltdXRleF9sb2NrKCZrZXJuZnNfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmZvLCAmcm9vdC0+c3VwZXJzLCBub2RlKSB7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCQlpbm9kZSA9IGlsb29rdXAoaW5mby0+c2IsIGtuLT5pbm8pOworCQlpZiAoIWlub2RlKQorCQkJY29udGludWU7CisKKwkJZGVudHJ5ID0gZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7CisJCWlmIChkZW50cnkpIHsKKwkJCWZzbm90aWZ5X3BhcmVudChOVUxMLCBkZW50cnksIEZTX01PRElGWSk7CisJCQlmc25vdGlmeShpbm9kZSwgRlNfTU9ESUZZLCBpbm9kZSwgRlNOT1RJRllfRVZFTlRfSU5PREUsCisJCQkJIE5VTEwsIDApOworCQkJZHB1dChkZW50cnkpOworCQl9CisKKwkJaXB1dChpbm9kZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZrZXJuZnNfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa2VybmZzX25vdGlmeSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaCBiL2ZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaAppbmRleCA4YmUxM2IyLi5kYzg0YTNlIDEwMDY0NAotLS0gYS9mcy9rZXJuZnMva2VybmZzLWludGVybmFsLmgKKysrIGIvZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oCkBAIC00OSw2ICs0OSw4IEBACiAgKiBtb3VudC5jCiAgKi8KIHN0cnVjdCBrZXJuZnNfc3VwZXJfaW5mbyB7CisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYjsKKwogCS8qCiAJICogVGhlIHJvb3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VwZXJfYmxvY2suICBFYWNoIHN1cGVyX2Jsb2NrIGlzCiAJICogaWRlbnRpZmllZCBieSB0aGUgcm9vdCBhbmQgbnMgaXQncyBhc3NvY2lhdGVkIHdpdGguCkBAIC02Miw2ICs2NCw5IEBACiAJICogYW4gYXJyYXkgYW5kIGNvbXBhcmUga2VybmZzX25vZGUgdGFnIGFnYWluc3QgZXZlcnkgZW50cnkuCiAJICovCiAJY29uc3Qgdm9pZAkJKm5zOworCisJLyogYW5jaG9yZWQgYXQga2VybmZzX3Jvb3QtPnN1cGVycywgcHJvdGVjdGVkIGJ5IGtlcm5mc19tdXRleCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIH07CiAjZGVmaW5lIGtlcm5mc19pbmZvKFNCKSAoKHN0cnVjdCBrZXJuZnNfc3VwZXJfaW5mbyAqKShTQi0+c19mc19pbmZvKSkKIApkaWZmIC0tZ2l0IGEvZnMva2VybmZzL21vdW50LmMgYi9mcy9rZXJuZnMvbW91bnQuYwppbmRleCA2YTVmMDRhLi5kMTcxYjk4IDEwMDY0NAotLS0gYS9mcy9rZXJuZnMvbW91bnQuYworKysgYi9mcy9rZXJuZnMvbW91bnQuYwpAQCAtNjIsMTUgKzYyLDE2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQga2VybmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3N0YXRpYyBpbnQga2VybmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBtYWdpYykKIHsKIAlzdHJ1Y3Qga2VybmZzX3N1cGVyX2luZm8gKmluZm8gPSBrZXJuZnNfaW5mbyhzYik7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290OwogCisJaW5mby0+c2IgPSBzYjsKIAlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOwotCXNiLT5zX21hZ2ljID0gU1lTRlNfTUFHSUM7CisJc2ItPnNfbWFnaWMgPSBtYWdpYzsKIAlzYi0+c19vcCA9ICZrZXJuZnNfc29wczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCkBAIC0xMzEsNiArMTMyLDcgQEAKICAqIEBmc190eXBlOiBmaWxlX3N5c3RlbV90eXBlIG9mIHRoZSBmcyBiZWluZyBtb3VudGVkCiAgKiBAZmxhZ3M6IG1vdW50IGZsYWdzIHNwZWNpZmllZCBmb3IgdGhlIG1vdW50CiAgKiBAcm9vdDoga2VybmZzX3Jvb3Qgb2YgdGhlIGhpZXJhcmNoeSBiZWluZyBtb3VudGVkCisgKiBAbWFnaWM6IGZpbGUgc3lzdGVtIHNwZWNpZmljIG1hZ2ljIG51bWJlcgogICogQG5ld19zYl9jcmVhdGVkOiB0ZWxsIHRoZSBjYWxsZXIgaWYgd2UgYWxsb2NhdGVkIGEgbmV3IHN1cGVyYmxvY2sKICAqIEBuczogb3B0aW9uYWwgbmFtZXNwYWNlIHRhZyBvZiB0aGUgbW91bnQKICAqCkBAIC0xNDIsOCArMTQ0LDggQEAKICAqIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIHBhc3NlZCB0byB0aGUgdmZzIGxheWVyIHZlcmJhdGltLgogICovCiBzdHJ1Y3QgZGVudHJ5ICprZXJuZnNfbW91bnRfbnMoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJCSAgICAgICBzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QsIGJvb2wgKm5ld19zYl9jcmVhdGVkLAotCQkJICAgICAgIGNvbnN0IHZvaWQgKm5zKQorCQkJCXN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBtYWdpYywKKwkJCQlib29sICpuZXdfc2JfY3JlYXRlZCwgY29uc3Qgdm9pZCAqbnMpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3Qga2VybmZzX3N1cGVyX2luZm8gKmluZm87CkBAIC0xNjYsMTIgKzE2OCwxOCBAQAogCQkqbmV3X3NiX2NyZWF0ZWQgPSAhc2ItPnNfcm9vdDsKIAogCWlmICghc2ItPnNfcm9vdCkgewotCQllcnJvciA9IGtlcm5mc19maWxsX3N1cGVyKHNiKTsKKwkJc3RydWN0IGtlcm5mc19zdXBlcl9pbmZvICppbmZvID0ga2VybmZzX2luZm8oc2IpOworCisJCWVycm9yID0ga2VybmZzX2ZpbGxfc3VwZXIoc2IsIG1hZ2ljKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiAJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJCX0KIAkJc2ItPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOworCisJCW11dGV4X2xvY2soJmtlcm5mc19tdXRleCk7CisJCWxpc3RfYWRkKCZpbmZvLT5ub2RlLCAmcm9vdC0+c3VwZXJzKTsKKwkJbXV0ZXhfdW5sb2NrKCZrZXJuZnNfbXV0ZXgpOwogCX0KIAogCXJldHVybiBkZ2V0KHNiLT5zX3Jvb3QpOwpAQCAtMTkwLDYgKzE5OCwxMCBAQAogCXN0cnVjdCBrZXJuZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGtlcm5mc19pbmZvKHNiKTsKIAlzdHJ1Y3Qga2VybmZzX25vZGUgKnJvb3Rfa24gPSBzYi0+c19yb290LT5kX2ZzZGF0YTsKIAorCW11dGV4X2xvY2soJmtlcm5mc19tdXRleCk7CisJbGlzdF9kZWwoJmluZm8tPm5vZGUpOworCW11dGV4X3VubG9jaygma2VybmZzX211dGV4KTsKKwogCS8qCiAJICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzCiAJICogc28gd2UgY2FuJ3QgZmluZCBpdCwgYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uCmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCBlMzkwYmQ5Li5kYTU3YzliIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTEzMCw2ICsxMzAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2xnbG9jay5oPgogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvZmlsZWxvY2suaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgSVNfUE9TSVgoZmwpCShmbC0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkKQEAgLTMyMiw2ICszMjUsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZsLT5mbF9maWxlID0gZmlscDsKKwlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdClmaWxwOwogCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCWZsLT5mbF9mbGFncyA9IEZMX0ZMT0NLOwogCWZsLT5mbF90eXBlID0gdHlwZTsKQEAgLTQyNyw3ICs0MzEsNyBAQAogCWlmIChhc3NpZ25fdHlwZShmbCwgdHlwZSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmbC0+Zmxfb3duZXIgPSBjdXJyZW50LT5maWxlczsKKwlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdClmaWxwOwogCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCiAJZmwtPmZsX2ZpbGUgPSBmaWxwOwpAQCAtMTI4Niw2ICsxMjkwLDcgQEAKIAogCWJlZm9yZSA9ICZpbm9kZS0+aV9mbG9jazsKIAl3aGlsZSAoKGZsID0gKmJlZm9yZSkgJiYgSVNfTEVBU0UoZmwpICYmIGxlYXNlX2JyZWFraW5nKGZsKSkgeworCQl0cmFjZV90aW1lX291dF9sZWFzZXMoaW5vZGUsIGZsKTsKIAkJaWYgKHBhc3RfdGltZShmbC0+ZmxfZG93bmdyYWRlX3RpbWUpKQogCQkJbGVhc2VfbW9kaWZ5KGJlZm9yZSwgRl9SRExDSyk7CiAJCWlmIChwYXN0X3RpbWUoZmwtPmZsX2JyZWFrX3RpbWUpKQpAQCAtMTM3Myw2ICsxMzc4LDcgQEAKIAl9CiAKIAlpZiAoaV9oYXZlX3RoaXNfbGVhc2UgfHwgKG1vZGUgJiBPX05PTkJMT0NLKSkgeworCQl0cmFjZV9icmVha19sZWFzZV9ub2Jsb2NrKGlub2RlLCBuZXdfZmwpOwogCQllcnJvciA9IC1FV09VTERCTE9DSzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTM4NCwxMCArMTM5MCwxMiBAQAogCWlmIChicmVha190aW1lID09IDApCiAJCWJyZWFrX3RpbWUrKzsKIAlsb2Nrc19pbnNlcnRfYmxvY2soZmxvY2ssIG5ld19mbCk7CisJdHJhY2VfYnJlYWtfbGVhc2VfYmxvY2soaW5vZGUsIG5ld19mbCk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobmV3X2ZsLT5mbF93YWl0LAogCQkJCQkJIW5ld19mbC0+ZmxfbmV4dCwgYnJlYWtfdGltZSk7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl0cmFjZV9icmVha19sZWFzZV91bmJsb2NrKGlub2RlLCBuZXdfZmwpOwogCWxvY2tzX2RlbGV0ZV9ibG9jayhuZXdfZmwpOwogCWlmIChlcnJvciA+PSAwKSB7CiAJCWlmIChlcnJvciA9PSAwKQpAQCAtMTUwOSw2ICsxNTE3LDggQEAKIAlpbnQgZXJyb3I7CiAKIAlsZWFzZSA9ICpmbHA7CisJdHJhY2VfZ2VuZXJpY19hZGRfbGVhc2UoaW5vZGUsIGxlYXNlKTsKKwogCS8qCiAJICogSW4gdGhlIGRlbGVnYXRpb24gY2FzZSB3ZSBuZWVkIG11dHVhbCBleGNsdXNpb24gd2l0aAogCSAqIGEgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdGhhdCB0YWtlIHRoZSBpX211dGV4LiAgV2UgdHJ5bG9jawpAQCAtMTU5OCw2ICsxNjA4LDggQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKKwl0cmFjZV9nZW5lcmljX2RlbGV0ZV9sZWFzZShpbm9kZSwgKmZscCk7CisKIAlmb3IgKGJlZm9yZSA9ICZpbm9kZS0+aV9mbG9jazsKIAkJCSgoZmwgPSAqYmVmb3JlKSAhPSBOVUxMKSAmJiBJU19MRUFTRShmbCk7CiAJCQliZWZvcmUgPSAmZmwtPmZsX25leHQpIHsKQEAgLTIzMTYsNiArMjMyOCw3IEBACiAKIAlpZiAoZmlscC0+Zl9vcC0+ZmxvY2spIHsKIAkJc3RydWN0IGZpbGVfbG9jayBmbCA9IHsKKwkJCS5mbF9vd25lciA9IChmbF9vd25lcl90KWZpbHAsCiAJCQkuZmxfcGlkID0gY3VycmVudC0+dGdpZCwKIAkJCS5mbF9maWxlID0gZmlscCwKIAkJCS5mbF9mbGFncyA9IEZMX0ZMT0NLLApAQCAtMjQyMywzMSArMjQzNiwzMSBAQAogCXNlcV9wcmludGYoZiwgIiVsbGQ6JXMgIiwgaWQsIHBmeCk7CiAJaWYgKElTX1BPU0lYKGZsKSkgewogCQlpZiAoZmwtPmZsX2ZsYWdzICYgRkxfQUNDRVNTKQotCQkJc2VxX3ByaW50ZihmLCAiQUNDRVNTIik7CisJCQlzZXFfcHV0cyhmLCAiQUNDRVNTIik7CiAJCWVsc2UgaWYgKElTX09GRExDSyhmbCkpCi0JCQlzZXFfcHJpbnRmKGYsICJPRkRMQ0siKTsKKwkJCXNlcV9wdXRzKGYsICJPRkRMQ0siKTsKIAkJZWxzZQotCQkJc2VxX3ByaW50ZihmLCAiUE9TSVggIik7CisJCQlzZXFfcHV0cyhmLCAiUE9TSVggIik7CiAKIAkJc2VxX3ByaW50ZihmLCAiICVzICIsCiAJCQkgICAgIChpbm9kZSA9PSBOVUxMKSA/ICIqTk9JTk9ERSoiIDoKIAkJCSAgICAgbWFuZGF0b3J5X2xvY2soaW5vZGUpID8gIk1BTkRBVE9SWSIgOiAiQURWSVNPUlkgIik7CiAJfSBlbHNlIGlmIChJU19GTE9DSyhmbCkpIHsKIAkJaWYgKGZsLT5mbF90eXBlICYgTE9DS19NQU5EKSB7Ci0JCQlzZXFfcHJpbnRmKGYsICJGTE9DSyAgTVNORlMgICAgICIpOworCQkJc2VxX3B1dHMoZiwgIkZMT0NLICBNU05GUyAgICAgIik7CiAJCX0gZWxzZSB7Ci0JCQlzZXFfcHJpbnRmKGYsICJGTE9DSyAgQURWSVNPUlkgICIpOworCQkJc2VxX3B1dHMoZiwgIkZMT0NLICBBRFZJU09SWSAgIik7CiAJCX0KIAl9IGVsc2UgaWYgKElTX0xFQVNFKGZsKSkgewotCQlzZXFfcHJpbnRmKGYsICJMRUFTRSAgIik7CisJCXNlcV9wdXRzKGYsICJMRUFTRSAgIik7CiAJCWlmIChsZWFzZV9icmVha2luZyhmbCkpCi0JCQlzZXFfcHJpbnRmKGYsICJCUkVBS0lORyAgIik7CisJCQlzZXFfcHV0cyhmLCAiQlJFQUtJTkcgICIpOwogCQllbHNlIGlmIChmbC0+ZmxfZmlsZSkKLQkJCXNlcV9wcmludGYoZiwgIkFDVElWRSAgICAiKTsKKwkJCXNlcV9wdXRzKGYsICJBQ1RJVkUgICAgIik7CiAJCWVsc2UKLQkJCXNlcV9wcmludGYoZiwgIkJSRUFLRVIgICAiKTsKKwkJCXNlcV9wdXRzKGYsICJCUkVBS0VSICAgIik7CiAJfSBlbHNlIHsKLQkJc2VxX3ByaW50ZihmLCAiVU5LTk9XTiBVTktOT1dOICAiKTsKKwkJc2VxX3B1dHMoZiwgIlVOS05PV04gVU5LTk9XTiAgIik7CiAJfQogCWlmIChmbC0+ZmxfdHlwZSAmIExPQ0tfTUFORCkgewogCQlzZXFfcHJpbnRmKGYsICIlcyAiLApAQCAtMjQ3OSw3ICsyNDkyLDcgQEAKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihmLCAiJUxkICVMZFxuIiwgZmwtPmZsX3N0YXJ0LCBmbC0+ZmxfZW5kKTsKIAl9IGVsc2UgewotCQlzZXFfcHJpbnRmKGYsICIwIEVPRlxuIik7CisJCXNlcV9wdXRzKGYsICIwIEVPRlxuIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggZDlmM2QwNi4uNGEzZDRlZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMjAzMiw5ICsyMDMyLDkgQEAKIHsKIAlwdXRfcnBjY3JlZChlbnRyeS0+Y3JlZCk7CiAJa2ZyZWUoZW50cnkpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfbG9uZ19kZWMoJm5mc19hY2Nlc3NfbnJfZW50cmllcyk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogc3RhdGljIHZvaWQgbmZzX2FjY2Vzc19mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKQEAgLTIwODIsOSArMjA4Miw5IEBACiAJCWVsc2UgewogcmVtb3ZlX2xydV9lbnRyeToKIAkJCWxpc3RfZGVsX2luaXQoJm5mc2ktPmFjY2Vzc19jYWNoZV9pbm9kZV9scnUpOwotCQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJCWNsZWFyX2JpdChORlNfSU5PX0FDTF9MUlVfU0VULCAmbmZzaS0+ZmxhZ3MpOwotCQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCX0KQEAgLTIyMzIsOSArMjIzMiw5IEBACiAJbmZzX2FjY2Vzc19hZGRfcmJ0cmVlKGlub2RlLCBjYWNoZSk7CiAKIAkvKiBVcGRhdGUgYWNjb3VudGluZyAqLwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfbG9uZ19pbmMoJm5mc19hY2Nlc3NfbnJfZW50cmllcyk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCS8qIEFkZCBpbm9kZSB0byBnbG9iYWwgTFJVIGxpc3QgKi8KIAlpZiAoIXRlc3RfYml0KE5GU19JTk9fQUNMX0xSVV9TRVQsICZORlNfSShpbm9kZSktPmZsYWdzKSkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggMjg0Y2E5MC4uYzFlZGY3MyAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC05MTYsMTAgKzkxNiw2IEBACiAJCWlzX2xvY2FsID0gMTsKIAogCS8qIFdlJ3JlIHNpbXVsYXRpbmcgZmxvY2soKSBsb2NrcyB1c2luZyBwb3NpeCBsb2NrcyBvbiB0aGUgc2VydmVyICovCi0JZmwtPmZsX293bmVyID0gKGZsX293bmVyX3QpZmlscDsKLQlmbC0+Zmxfc3RhcnQgPSAwOwotCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwotCiAJaWYgKGZsLT5mbF90eXBlID09IEZfVU5MQ0spCiAJCXJldHVybiBkb191bmxrKGZpbHAsIGNtZCwgZmwsIGlzX2xvY2FsKTsKIAlyZXR1cm4gZG9fc2V0bGsoZmlscCwgY21kLCBmbCwgaXNfbG9jYWwpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCAwYzQzODk3Li5lNmY3Mzk4IDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAKIAl0cmFjZV9uZnNfaW52YWxpZGF0ZV9tYXBwaW5nX2V4aXQoaW5vZGUsIHJldCk7CiAKIAljbGVhcl9iaXRfdW5sb2NrKE5GU19JTk9fSU5WQUxJREFUSU5HLCBiaXRsb2NrKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoYml0bG9jaywgTkZTX0lOT19JTlZBTElEQVRJTkcpOwogb3V0OgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCmluZGV4IGVmYWM2MDIuLmI5YzYxZWYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCkBAIC03ODksOSArNzg5LDkgQEAKIAogc3RhdGljIHZvaWQgbmZzNF9jbGVhcl9kc19jb25uX2JpdChzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKIHsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoTkZTNERTX0NPTk5FQ1RJTkcsICZkcy0+ZHNfc3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl3YWtlX3VwX2JpdCgmZHMtPmRzX3N0YXRlLCBORlM0RFNfQ09OTkVDVElORyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAyMzQ5NTE4Li5jMDU4M2I5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0xMTQwLDkgKzExNDAsOSBAQAogCiBzdGF0aWMgdm9pZCBuZnM0X2NsZWFyX3N0YXRlX21hbmFnZXJfYml0KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KE5GUzRDTE5UX01BTkFHRVJfUlVOTklORywgJmNscC0+Y2xfc3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl3YWtlX3VwX2JpdCgmY2xwLT5jbF9zdGF0ZSwgTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HKTsKIAlycGNfd2FrZV91cCgmY2xwLT5jbF9ycGN3YWl0cSk7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IDJmZmViZjIuLjAzZWQ5ODQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC05NSw3ICs5NSw3IEBACiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPmlvX2NvdW50KSkgewogCQljbGVhcl9iaXQoTkZTX0lPX0lOUFJPR1JFU1MsICZjLT5mbGFncyk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCXdha2VfdXBfYml0KCZjLT5mbGFncywgTkZTX0lPX0lOUFJPR1JFU1MpOwogCX0KIH0KQEAgLTE5Myw5ICsxOTMsOSBAQAogCQlwcmludGsoS0VSTl9FUlIgIk5GUzogSW52YWxpZCB1bmxvY2sgYXR0ZW1wdGVkXG4iKTsKIAkJQlVHKCk7CiAJfQotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChQR19CVVNZLCAmcmVxLT53Yl9mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXdha2VfdXBfYml0KCZyZXEtPndiX2ZsYWdzLCBQR19CVVNZKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggY2I1M2Q0NS4uZmQ5NTM2ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC0xODEwLDcgKzE4MTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgKmJpdGxvY2sgPSAmTkZTX0koaW5vZGUpLT5mbGFnczsKIAogCWNsZWFyX2JpdF91bmxvY2soTkZTX0lOT19MQVlPVVRDT01NSVRUSU5HLCBiaXRsb2NrKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJd2FrZV91cF9iaXQoYml0bG9jaywgTkZTX0lOT19MQVlPVVRDT01NSVRUSU5HKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuaCBiL2ZzL25mcy9wbmZzLmgKaW5kZXggMDIzNzkzOS4uYzMwNThhMCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuaAorKysgYi9mcy9uZnMvcG5mcy5oCkBAIC0yNzUsNyArMjc1LDcgQEAKIHsKIAlpZiAobHNlZykgewogCQlhdG9taWNfaW5jKCZsc2VnLT5wbHNfcmVmY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9CiAJcmV0dXJuIGxzZWc7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDlhM2I2YTQuLmZmYjk0NTkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC00MDUsNyArNDA1LDcgQEAKIAluZnNfcGFnZWlvX2NvbXBsZXRlKCZwZ2lvKTsKIAogCWNsZWFyX2JpdF91bmxvY2soTkZTX0lOT19GTFVTSElORywgYml0bG9jayk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXdha2VfdXBfYml0KGJpdGxvY2ssIE5GU19JTk9fRkxVU0hJTkcpOwogCiAJaWYgKGVyciA8IDApCkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogc3RhdGljIHZvaWQgbmZzX2NvbW1pdF9jbGVhcl9sb2NrKHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kpCiB7CiAJY2xlYXJfYml0KE5GU19JTk9fQ09NTUlULCAmbmZzaS0+ZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl3YWtlX3VwX2JpdCgmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fQ09NTUlUKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggYmY0ODJkZi4uNzMwMzkyOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0xMTA3LDcgKzExMDcsNyBAQAogCiAJbWxvZyhNTF9IRUFSVEJFQVR8TUxfS1RIUkVBRCwgImhiIHRocmVhZCBydW5uaW5nXG4iKTsKIAotCXNldF91c2VyX25pY2UoY3VycmVudCwgLTIwKTsKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIE1JTl9OSUNFKTsKIAogCS8qIFBpbiBub2RlICovCiAJbzJubV9kZXBlbmRfdGhpc19ub2RlKCk7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9ncm91cC5jIGIvZnMvc3lzZnMvZ3JvdXAuYwppbmRleCBhYTA0MDY4Li43ZDJhODYwIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9ncm91cC5jCisrKyBiL2ZzL3N5c2ZzL2dyb3VwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlICJzeXNmcy5oIgogCiAKLXN0YXRpYyB2b2lkIHJlbW92ZV9maWxlcyhzdHJ1Y3Qga2VybmZzX25vZGUgKnBhcmVudCwgc3RydWN0IGtvYmplY3QgKmtvYmosCitzdGF0aWMgdm9pZCByZW1vdmVfZmlsZXMoc3RydWN0IGtlcm5mc19ub2RlICpwYXJlbnQsCiAJCQkgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwKQogewogCXN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0ICphdHRyOwpAQCAtMjksNyArMjksNyBAQAogCQkJa2VybmZzX3JlbW92ZV9ieV9uYW1lKHBhcmVudCwgKCphdHRyKS0+bmFtZSk7CiAJaWYgKGdycC0+YmluX2F0dHJzKQogCQlmb3IgKGJpbl9hdHRyID0gZ3JwLT5iaW5fYXR0cnM7ICpiaW5fYXR0cjsgYmluX2F0dHIrKykKLQkJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZShrb2JqLCAqYmluX2F0dHIpOworCQkJa2VybmZzX3JlbW92ZV9ieV9uYW1lKHBhcmVudCwgKCpiaW5fYXR0ciktPmF0dHIubmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2ZpbGVzKHN0cnVjdCBrZXJuZnNfbm9kZSAqcGFyZW50LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTYyLDcgKzYyLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoZXJyb3IpIHsKLQkJCXJlbW92ZV9maWxlcyhwYXJlbnQsIGtvYmosIGdycCk7CisJCQlyZW1vdmVfZmlsZXMocGFyZW50LCBncnApOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtNzksNyArNzksNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChlcnJvcikKLQkJCXJlbW92ZV9maWxlcyhwYXJlbnQsIGtvYmosIGdycCk7CisJCQlyZW1vdmVfZmlsZXMocGFyZW50LCBncnApOwogCX0KIGV4aXQ6CiAJcmV0dXJuIGVycm9yOwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCWtlcm5mc19nZXQoa24pOwogCX0KIAotCXJlbW92ZV9maWxlcyhrbiwga29iaiwgZ3JwKTsKKwlyZW1vdmVfZmlsZXMoa24sIGdycCk7CiAJaWYgKGdycC0+bmFtZSkKIAkJa2VybmZzX3JlbW92ZShrbik7CiAKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL21vdW50LmMgYi9mcy9zeXNmcy9tb3VudC5jCmluZGV4IDg3OTQ0MjMuLjhhNDk0ODYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL21vdW50LmMKKysrIGIvZnMvc3lzZnMvbW91bnQuYwpAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBERUJVRwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CkBAIC0zOCw3ICszOSw4IEBACiAJfQogCiAJbnMgPSBrb2JqX25zX2dyYWJfY3VycmVudChLT0JKX05TX1RZUEVfTkVUKTsKLQlyb290ID0ga2VybmZzX21vdW50X25zKGZzX3R5cGUsIGZsYWdzLCBzeXNmc19yb290LCAmbmV3X3NiLCBucyk7CisJcm9vdCA9IGtlcm5mc19tb3VudF9ucyhmc190eXBlLCBmbGFncywgc3lzZnNfcm9vdCwKKwkJCQlTWVNGU19NQUdJQywgJm5ld19zYiwgbnMpOwogCWlmIChJU19FUlIocm9vdCkgfHwgIW5ld19zYikKIAkJa29ial9uc19kcm9wKEtPQkpfTlNfVFlQRV9ORVQsIG5zKTsKIAlyZXR1cm4gcm9vdDsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xwdF9jb21taXQuYyBiL2ZzL3ViaWZzL2xwdF9jb21taXQuYwppbmRleCA0YjgyNmFiLi40NWQ0ZTk2IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9scHRfY29tbWl0LmMKKysrIGIvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCkBAIC00NjAsOSArNDYwLDkgQEAKIAkJICogaW1wb3J0YW50LgogCQkgKi8KIAkJY2xlYXJfYml0KERJUlRZX0NOT0RFLCAmY25vZGUtPmZsYWdzKTsKLQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQljbGVhcl9iaXQoQ09XX0NOT0RFLCAmY25vZGUtPmZsYWdzKTsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJb2ZmcyArPSBsZW47CiAJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGxlbik7CiAJCWNub2RlID0gY25vZGUtPmNuZXh0OwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdG5jX2NvbW1pdC5jIGIvZnMvdWJpZnMvdG5jX2NvbW1pdC5jCmluZGV4IDUyYTY1NTkuLjM2MDA5OTQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuY19jb21taXQuYworKysgYi9mcy91Ymlmcy90bmNfY29tbWl0LmMKQEAgLTg5NSw5ICs4OTUsOSBAQAogCQkgKiB0aGUgcmVhc29uIGZvciB0aGUgc2Vjb25kIGJhcnJpZXIuCiAJCSAqLwogCQljbGVhcl9iaXQoRElSVFlfWk5PREUsICZ6bm9kZS0+ZmxhZ3MpOwotCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCWNsZWFyX2JpdChDT1dfWk5PREUsICZ6bm9kZS0+ZmxhZ3MpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJCS8qCiAJCSAqIFdlIGhhdmUgbWFya2VkIHRoZSB6bm9kZSBhcyBjbGVhbiBidXQgaGF2ZSBub3QgdXBkYXRlZCB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2F0b21pYy5oCmluZGV4IDMzYmQyZGUuLjljNzllNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdG9taWMuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBfX0FTTV9HRU5FUklDX0FUT01JQ19ICiAKICNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAvKiBGb3JjZSBwZW9wbGUgdG8gZGVmaW5lIGNvcmUgYXRvbWljcyAqLwpAQCAtMTgyLDExICsxODMsNSBAQAogfQogI2VuZGlmCiAKLS8qIEFzc3VtZSB0aGF0IGF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fR0VORVJJQ19BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iYXJyaWVyLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JhcnJpZXIuaAppbmRleCA2ZjY5MmY4Li4xNDAyZmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JhcnJpZXIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JhcnJpZXIuaApAQCAtNjIsNiArNjIsMTQgQEAKICNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpICBkbyB7ICh2YXIpID0gKHZhbHVlKTsgbWIoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaWZuZGVmIHNtcF9tYl9fYmVmb3JlX2F0b21pYworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKQlzbXBfbWIoKQorI2VuZGlmCisKKyNpZm5kZWYgc21wX21iX19hZnRlcl9hdG9taWMKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWMoKQlzbXBfbWIoKQorI2VuZGlmCisKICNkZWZpbmUgc21wX3N0b3JlX3JlbGVhc2UocCwgdikJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWNvbXBpbGV0aW1lX2Fzc2VydF9hdG9taWNfdHlwZSgqcCk7CQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCmluZGV4IDI4MGNhN2EuLmRjZGNhY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaApAQCAtMTEsMTQgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyoKLSAqIGNsZWFyX2JpdCBtYXkgbm90IGltcGx5IGEgbWVtb3J5IGJhcnJpZXIKLSAqLwotI2lmbmRlZiBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlzbXBfbWIoKQotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKaW5kZXggOWFlNmMzNC4uNDk2NzM1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKQEAgLTgwLDcgKzgwLDcgQEAKICAqCiAgKiBjbGVhcl9iaXQoKSBpcyBhdG9taWMgYW5kIG1heSBub3QgYmUgcmVvcmRlcmVkLiAgSG93ZXZlciwgaXQgZG9lcwogICogbm90IGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciwgc28gaWYgaXQgaXMgdXNlZCBmb3IgbG9ja2luZyBwdXJwb3NlcywKLSAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2F0b21pYygpCiAgKiBpbiBvcmRlciB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaAppbmRleCAzMDhhOWUyLi5jMzAyNjZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KICNkZWZpbmUgY2xlYXJfYml0X3VubG9jayhuciwgYWRkcikJXAogZG8gewkJCQkJXAotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwlcCisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CVwKIAljbGVhcl9iaXQobnIsIGFkZHIpOwkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLWNvaGVyZW50LmgKaW5kZXggMmJlOGEyZC4uMDI5N2U1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oCkBAIC0xNiwxNiArMTYsMTMgQEAKICAqIFN0YW5kYXJkIGludGVyZmFjZQogICovCiAjZGVmaW5lIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQotZXh0ZXJuIGludAotZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKLQkJCSAgICBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK2ludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsCisJCQkJZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiAKLWV4dGVybiB2b2lkCi1kbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLWV4dGVybiB2b2lkICoKLWRtYV9tYXJrX2RlY2xhcmVkX21lbW9yeV9vY2N1cGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSk7Cit2b2lkICpkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSk7CiAjZWxzZQogI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9jb2hlcmVudChkZXYsIHNpemUsIGhhbmRsZSwgcmV0KSAoMCkKICNkZWZpbmUgZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2JlcmxpbjIuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svYmVybGluMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzA4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2JlcmxpbjIuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQmVybGluMiBCRzIvQkcyQ0QgY2xvY2sgdHJlZSBJRHMKKyAqLworCisjZGVmaW5lIENMS0lEX1NZUwkJMAorI2RlZmluZSBDTEtJRF9DUFUJCTEKKyNkZWZpbmUgQ0xLSURfRFJNRklHTwkJMgorI2RlZmluZSBDTEtJRF9DRkcJCTMKKyNkZWZpbmUgQ0xLSURfR0ZYCQk0CisjZGVmaW5lIENMS0lEX1pTUAkJNQorI2RlZmluZSBDTEtJRF9QRVJJRgkJNgorI2RlZmluZSBDTEtJRF9QQ1VCRQkJNworI2RlZmluZSBDTEtJRF9WU0NPUEUJCTgKKyNkZWZpbmUgQ0xLSURfTkZDX0VDQwkJOQorI2RlZmluZSBDTEtJRF9WUFAJCTEwCisjZGVmaW5lIENMS0lEX0FQUAkJMTEKKyNkZWZpbmUgQ0xLSURfQVVESU8wCQkxMgorI2RlZmluZSBDTEtJRF9BVURJTzIJCTEzCisjZGVmaW5lIENMS0lEX0FVRElPMwkJMTQKKyNkZWZpbmUgQ0xLSURfQVVESU8xCQkxNQorI2RlZmluZSBDTEtJRF9HRlgzRF9DT1JFCTE2CisjZGVmaW5lIENMS0lEX0dGWDNEX1NZUwkJMTcKKyNkZWZpbmUgQ0xLSURfQVJDCQkxOAorI2RlZmluZSBDTEtJRF9WSVAJCTE5CisjZGVmaW5lIENMS0lEX1NESU8wWElOCQkyMAorI2RlZmluZSBDTEtJRF9TRElPMVhJTgkJMjEKKyNkZWZpbmUgQ0xLSURfR0ZYM0RfRVhUUkEJMjIKKyNkZWZpbmUgQ0xLSURfR0MzNjAJCTIzCisjZGVmaW5lIENMS0lEX1NESU9fRExMTVNUCTI0CisjZGVmaW5lIENMS0lEX0dFVEgwCQkyNQorI2RlZmluZSBDTEtJRF9HRVRIMQkJMjYKKyNkZWZpbmUgQ0xLSURfU0FUQQkJMjcKKyNkZWZpbmUgQ0xLSURfQUhCQVBCCQkyOAorI2RlZmluZSBDTEtJRF9VU0IwCQkyOQorI2RlZmluZSBDTEtJRF9VU0IxCQkzMAorI2RlZmluZSBDTEtJRF9QQlJJREdFCQkzMQorI2RlZmluZSBDTEtJRF9TRElPMAkJMzIKKyNkZWZpbmUgQ0xLSURfU0RJTzEJCTMzCisjZGVmaW5lIENMS0lEX05GQwkJMzQKKyNkZWZpbmUgQ0xLSURfU01FTUMJCTM1CisjZGVmaW5lIENMS0lEX0FVRElPSEQJCTM2CisjZGVmaW5lIENMS0lEX1ZJREVPMAkJMzcKKyNkZWZpbmUgQ0xLSURfVklERU8xCQkzOAorI2RlZmluZSBDTEtJRF9WSURFTzIJCTM5CisjZGVmaW5lIENMS0lEX1RXRAkJNDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svYmVybGluMnEuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svYmVybGluMnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdmYzNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9iZXJsaW4ycS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBCZXJsaW4yIEJHMlEgY2xvY2sgdHJlZSBJRHMKKyAqLworCisjZGVmaW5lIENMS0lEX1NZUwkJMAorI2RlZmluZSBDTEtJRF9EUk1GSUdPCQkxCisjZGVmaW5lIENMS0lEX0NGRwkJMgorI2RlZmluZSBDTEtJRF9HRlgyRAkJMworI2RlZmluZSBDTEtJRF9aU1AJCTQKKyNkZWZpbmUgQ0xLSURfUEVSSUYJCTUKKyNkZWZpbmUgQ0xLSURfUENVQkUJCTYKKyNkZWZpbmUgQ0xLSURfVlNDT1BFCQk3CisjZGVmaW5lIENMS0lEX05GQ19FQ0MJCTgKKyNkZWZpbmUgQ0xLSURfVlBQCQk5CisjZGVmaW5lIENMS0lEX0FQUAkJMTAKKyNkZWZpbmUgQ0xLSURfU0RJTzBYSU4JCTExCisjZGVmaW5lIENMS0lEX1NESU8xWElOCQkxMgorI2RlZmluZSBDTEtJRF9HRlgyREFYSQkJMTMKKyNkZWZpbmUgQ0xLSURfR0VUSDAJCTE0CisjZGVmaW5lIENMS0lEX1NBVEEJCTE1CisjZGVmaW5lIENMS0lEX0FIQkFQQgkJMTYKKyNkZWZpbmUgQ0xLSURfVVNCMAkJMTcKKyNkZWZpbmUgQ0xLSURfVVNCMQkJMTgKKyNkZWZpbmUgQ0xLSURfVVNCMgkJMTkKKyNkZWZpbmUgQ0xLSURfVVNCMwkJMjAKKyNkZWZpbmUgQ0xLSURfUEJSSURHRQkJMjEKKyNkZWZpbmUgQ0xLSURfU0RJTwkJMjIKKyNkZWZpbmUgQ0xLSURfTkZDCQkyMworI2RlZmluZSBDTEtJRF9TTUVNQwkJMjQKKyNkZWZpbmUgQ0xLSURfUENJRQkJMjUKKyNkZWZpbmUgQ0xLSURfVFdECQkyNgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3MzMjUwLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vczMyNTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTM1ZTlkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3MzMjUwLmgKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIAlBdXRob3I6IFRvbWFzeiBGaWdhIDx0LmZpZ2FAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEZXZpY2UgVHJlZSBiaW5kaW5nIGNvbnN0YW50cyBmb3IgU2Ftc3VuZyBFeHlub3MzMjUwIGNsb2NrIGNvbnRyb2xsZXJzLgorICovCisKKyNpZm5kZWYgX0RUX0JJTkRJTkdTX0NMT0NLX1NBTVNVTkdfRVhZTk9TMzI1MF9DTE9DS19ICisjZGVmaW5lIF9EVF9CSU5ESU5HU19DTE9DS19TQU1TVU5HX0VYWU5PUzMyNTBfQ0xPQ0tfSAorCisvKgorICogTGV0IGVhY2ggZXhwb3J0ZWQgY2xvY2sgZ2V0IGEgdW5pcXVlIGluZGV4LCB3aGljaCBpcyB1c2VkIG9uIERULWVuYWJsZWQKKyAqIHBsYXRmb3JtcyB0byBsb29rdXAgdGhlIGNsb2NrIGZyb20gYSBjbG9jayBzcGVjaWZpZXIuIFRoZXNlIGluZGljZXMgYXJlCisgKiB0aGVyZWZvcmUgY29uc2lkZXJlZCBhbiBBQkkgYW5kIHNvIG11c3Qgbm90IGJlIGNoYW5nZWQuIFRoaXMgaW1wbGllcworICogdGhhdCBuZXcgY2xvY2tzIHNob3VsZCBiZSBhZGRlZCBlaXRoZXIgaW4gZnJlZSBzcGFjZXMgYmV0d2VlbiBjbG9jayBncm91cHMKKyAqIG9yIGF0IHRoZSBlbmQuCisgKi8KKworCisvKgorICogTWFpbiBDTVUKKyAqLworCisjZGVmaW5lIENMS19PU0NTRUwJCQkxCisjZGVmaW5lIENMS19GSU5fUExMCQkJMgorI2RlZmluZSBDTEtfRk9VVF9BUExMCQkJMworI2RlZmluZSBDTEtfRk9VVF9WUExMCQkJNAorI2RlZmluZSBDTEtfRk9VVF9VUExMCQkJNQorI2RlZmluZSBDTEtfRk9VVF9NUExMCQkJNgorCisvKiBNdXhlcyAqLworI2RlZmluZSBDTEtfTU9VVF9NUExMX1VTRVJfTAkJMTYKKyNkZWZpbmUgQ0xLX01PVVRfR0RMCQkJMTcKKyNkZWZpbmUgQ0xLX01PVVRfTVBMTF9VU0VSX1IJCTE4CisjZGVmaW5lIENMS19NT1VUX0dEUgkJCTE5CisjZGVmaW5lIENMS19NT1VUX0VCSQkJCTIwCisjZGVmaW5lIENMS19NT1VUX0FDTEtfMjAwCQkyMQorI2RlZmluZSBDTEtfTU9VVF9BQ0xLXzE2MAkJMjIKKyNkZWZpbmUgQ0xLX01PVVRfQUNMS18xMDAJCTIzCisjZGVmaW5lIENMS19NT1VUX0FDTEtfMjY2XzEJCTI0CisjZGVmaW5lIENMS19NT1VUX0FDTEtfMjY2XzAJCTI1CisjZGVmaW5lIENMS19NT1VUX0FDTEtfMjY2CQkyNgorI2RlZmluZSBDTEtfTU9VVF9WUExMCQkJMjcKKyNkZWZpbmUgQ0xLX01PVVRfRVBMTF9VU0VSCQkyOAorI2RlZmluZSBDTEtfTU9VVF9FQklfMQkJCTI5CisjZGVmaW5lIENMS19NT1VUX1VQTEwJCQkzMAorI2RlZmluZSBDTEtfTU9VVF9BQ0xLXzQwMF9NQ1VJU1BfU1VCCTMxCisjZGVmaW5lIENMS19NT1VUX01QTEwJCQkzMgorI2RlZmluZSBDTEtfTU9VVF9BQ0xLXzQwMF9NQ1VJU1AJMzMKKyNkZWZpbmUgQ0xLX01PVVRfVlBMTFNSQwkJMzQKKyNkZWZpbmUgQ0xLX01PVVRfQ0FNMQkJCTM1CisjZGVmaW5lIENMS19NT1VUX0NBTV9CTEsJCTM2CisjZGVmaW5lIENMS19NT1VUX01GQwkJCTM3CisjZGVmaW5lIENMS19NT1VUX01GQ18xCQkJMzgKKyNkZWZpbmUgQ0xLX01PVVRfTUZDXzAJCQkzOQorI2RlZmluZSBDTEtfTU9VVF9HM0QJCQk0MAorI2RlZmluZSBDTEtfTU9VVF9HM0RfMQkJCTQxCisjZGVmaW5lIENMS19NT1VUX0czRF8wCQkJNDIKKyNkZWZpbmUgQ0xLX01PVVRfTUlQSTAJCQk0MworI2RlZmluZSBDTEtfTU9VVF9GSU1EMAkJCTQ0CisjZGVmaW5lIENMS19NT1VUX1VBUlRfSVNQCQk0NQorI2RlZmluZSBDTEtfTU9VVF9TUEkxX0lTUAkJNDYKKyNkZWZpbmUgQ0xLX01PVVRfU1BJMF9JU1AJCTQ3CisjZGVmaW5lIENMS19NT1VUX1RTQURDCQkJNDgKKyNkZWZpbmUgQ0xLX01PVVRfTU1DMQkJCTQ5CisjZGVmaW5lIENMS19NT1VUX01NQzAJCQk1MAorI2RlZmluZSBDTEtfTU9VVF9VQVJUMQkJCTUxCisjZGVmaW5lIENMS19NT1VUX1VBUlQwCQkJNTIKKyNkZWZpbmUgQ0xLX01PVVRfU1BJMQkJCTUzCisjZGVmaW5lIENMS19NT1VUX1NQSTAJCQk1NAorI2RlZmluZSBDTEtfTU9VVF9BVURJTwkJCTU1CisjZGVmaW5lIENMS19NT1VUX01QTExfVVNFUl9DCQk1NgorI2RlZmluZSBDTEtfTU9VVF9IUE0JCQk1NworI2RlZmluZSBDTEtfTU9VVF9DT1JFCQkJNTgKKyNkZWZpbmUgQ0xLX01PVVRfQVBMTAkJCTU5CisjZGVmaW5lIENMS19NT1VUX0FDTEtfMjY2X1NVQgkJNjAKKworLyogRGl2aWRlcnMgKi8KKyNkZWZpbmUgQ0xLX0RJVl9HUEwJCQk2NAorI2RlZmluZSBDTEtfRElWX0dETAkJCTY1CisjZGVmaW5lIENMS19ESVZfR1BSCQkJNjYKKyNkZWZpbmUgQ0xLX0RJVl9HRFIJCQk2NworI2RlZmluZSBDTEtfRElWX01QTExfUFJFCQk2OAorI2RlZmluZSBDTEtfRElWX0FDTEtfNDAwX01DVUlTUAkJNjkKKyNkZWZpbmUgQ0xLX0RJVl9FQkkJCQk3MAorI2RlZmluZSBDTEtfRElWX0FDTEtfMjAwCQk3MQorI2RlZmluZSBDTEtfRElWX0FDTEtfMTYwCQk3MgorI2RlZmluZSBDTEtfRElWX0FDTEtfMTAwCQk3MworI2RlZmluZSBDTEtfRElWX0FDTEtfMjY2CQk3NAorI2RlZmluZSBDTEtfRElWX0NBTTEJCQk3NQorI2RlZmluZSBDTEtfRElWX0NBTV9CTEsJCQk3NgorI2RlZmluZSBDTEtfRElWX01GQwkJCTc3CisjZGVmaW5lIENMS19ESVZfRzNECQkJNzgKKyNkZWZpbmUgQ0xLX0RJVl9NSVBJMF9QUkUJCTc5CisjZGVmaW5lIENMS19ESVZfTUlQSTAJCQk4MAorI2RlZmluZSBDTEtfRElWX0ZJTUQwCQkJODEKKyNkZWZpbmUgQ0xLX0RJVl9VQVJUX0lTUAkJODIKKyNkZWZpbmUgQ0xLX0RJVl9TUEkxX0lTUF9QUkUJCTgzCisjZGVmaW5lIENMS19ESVZfU1BJMV9JU1AJCTg0CisjZGVmaW5lIENMS19ESVZfU1BJMF9JU1BfUFJFCQk4NQorI2RlZmluZSBDTEtfRElWX1NQSTBfSVNQCQk4NgorI2RlZmluZSBDTEtfRElWX1RTQURDX1BSRQkJODcKKyNkZWZpbmUgQ0xLX0RJVl9UU0FEQwkJCTg4CisjZGVmaW5lIENMS19ESVZfTU1DMV9QUkUJCTg5CisjZGVmaW5lIENMS19ESVZfTU1DMQkJCTkwCisjZGVmaW5lIENMS19ESVZfTU1DMF9QUkUJCTkxCisjZGVmaW5lIENMS19ESVZfTU1DMAkJCTkyCisjZGVmaW5lIENMS19ESVZfVUFSVDEJCQk5MworI2RlZmluZSBDTEtfRElWX1VBUlQwCQkJOTQKKyNkZWZpbmUgQ0xLX0RJVl9TUEkxX1BSRQkJOTUKKyNkZWZpbmUgQ0xLX0RJVl9TUEkxCQkJOTYKKyNkZWZpbmUgQ0xLX0RJVl9TUEkwX1BSRQkJOTcKKyNkZWZpbmUgQ0xLX0RJVl9TUEkwCQkJOTgKKyNkZWZpbmUgQ0xLX0RJVl9QQ00JCQk5OQorI2RlZmluZSBDTEtfRElWX0FVRElPCQkJMTAwCisjZGVmaW5lIENMS19ESVZfSTJTCQkJMTAxCisjZGVmaW5lIENMS19ESVZfQ09SRTIJCQkxMDIKKyNkZWZpbmUgQ0xLX0RJVl9BUExMCQkJMTAzCisjZGVmaW5lIENMS19ESVZfUENMS19EQkcJCTEwNAorI2RlZmluZSBDTEtfRElWX0FUQgkJCTEwNQorI2RlZmluZSBDTEtfRElWX0NPUkVNCQkJMTA2CisjZGVmaW5lIENMS19ESVZfQ09SRQkJCTEwNworI2RlZmluZSBDTEtfRElWX0hQTQkJCTEwOAorI2RlZmluZSBDTEtfRElWX0NPUFkJCQkxMDkKKworLyogR2F0ZXMgKi8KKyNkZWZpbmUgQ0xLX0FTWU5DX0czRAkJCTEyOAorI2RlZmluZSBDTEtfQVNZTkNfTUZDTAkJCTEyOQorI2RlZmluZSBDTEtfUFBNVUxFRlQJCQkxMzAKKyNkZWZpbmUgQ0xLX0dQSU9fTEVGVAkJCTEzMQorI2RlZmluZSBDTEtfQVNZTkNfSVNQTVgJCQkxMzIKKyNkZWZpbmUgQ0xLX0FTWU5DX0ZTWVNECQkJMTMzCisjZGVmaW5lIENMS19BU1lOQ19MQ0QwWAkJCTEzNAorI2RlZmluZSBDTEtfQVNZTkNfQ0FNWAkJCTEzNQorI2RlZmluZSBDTEtfUFBNVVJJR0hUCQkJMTM2CisjZGVmaW5lIENMS19HUElPX1JJR0hUCQkJMTM3CisjZGVmaW5lIENMS19NT05PQ05UCQkJMTM4CisjZGVmaW5lIENMS19UWlBDNgkJCTEzOQorI2RlZmluZSBDTEtfUFJPVklTSU9OS0VZMQkJMTQwCisjZGVmaW5lIENMS19QUk9WSVNJT05LRVkwCQkxNDEKKyNkZWZpbmUgQ0xLX0NNVV9JU1BQQVJUCQkJMTQyCisjZGVmaW5lIENMS19UTVVfQVBCSUYJCQkxNDMKKyNkZWZpbmUgQ0xLX0tFWUlGCQkJMTQ0CisjZGVmaW5lIENMS19SVEMJCQkJMTQ1CisjZGVmaW5lIENMS19XRFQJCQkJMTQ2CisjZGVmaW5lIENMS19NQ1QJCQkJMTQ3CisjZGVmaW5lIENMS19TRUNLRVkJCQkxNDgKKyNkZWZpbmUgQ0xLX1RaUEM1CQkJMTQ5CisjZGVmaW5lIENMS19UWlBDNAkJCTE1MAorI2RlZmluZSBDTEtfVFpQQzMJCQkxNTEKKyNkZWZpbmUgQ0xLX1RaUEMyCQkJMTUyCisjZGVmaW5lIENMS19UWlBDMQkJCTE1MworI2RlZmluZSBDTEtfVFpQQzAJCQkxNTQKKyNkZWZpbmUgQ0xLX0NNVV9DT1JFUEFSVAkJMTU1CisjZGVmaW5lIENMS19DTVVfVE9QUEFSVAkJCTE1NgorI2RlZmluZSBDTEtfUE1VX0FQQklGCQkJMTU3CisjZGVmaW5lIENMS19TWVNSRUcJCQkxNTgKKyNkZWZpbmUgQ0xLX0NISVBfSUQJCQkxNTkKKyNkZWZpbmUgQ0xLX1FFSlBFRwkJCTE2MAorI2RlZmluZSBDTEtfUElYRUxBU1lOQ00xCQkxNjEKKyNkZWZpbmUgQ0xLX1BJWEVMQVNZTkNNMAkJMTYyCisjZGVmaW5lIENMS19QUE1VQ0FNSUYJCQkxNjMKKyNkZWZpbmUgQ0xLX1FFTTJNU0NBTEVSCQkJMTY0CisjZGVmaW5lIENMS19RRUdTQ0FMRVIxCQkJMTY1CisjZGVmaW5lIENMS19RRUdTQ0FMRVIwCQkJMTY2CisjZGVmaW5lIENMS19TTU1VSlBFRwkJCTE2NworI2RlZmluZSBDTEtfU01NVU0yTTJTQ0FMRVIJCTE2OAorI2RlZmluZSBDTEtfU01NVUdTQ0FMRVIxCQkxNjkKKyNkZWZpbmUgQ0xLX1NNTVVHU0NBTEVSMAkJMTcwCisjZGVmaW5lIENMS19KUEVHCQkJMTcxCisjZGVmaW5lIENMS19NMk1TQ0FMRVIJCQkxNzIKKyNkZWZpbmUgQ0xLX0dTQ0FMRVIxCQkJMTczCisjZGVmaW5lIENMS19HU0NBTEVSMAkJCTE3NAorI2RlZmluZSBDTEtfUUVNRkMJCQkxNzUKKyNkZWZpbmUgQ0xLX1BQTVVNRkNfTAkJCTE3NgorI2RlZmluZSBDTEtfU01NVU1GQ19MCQkJMTc3CisjZGVmaW5lIENMS19NRkMJCQkJMTc4CisjZGVmaW5lIENMS19TTU1VRzNECQkJMTc5CisjZGVmaW5lIENMS19RRUczRAkJCTE4MAorI2RlZmluZSBDTEtfUFBNVUczRAkJCTE4MQorI2RlZmluZSBDTEtfRzNECQkJCTE4MgorI2RlZmluZSBDTEtfUUVfQ0gxX0xDRAkJCTE4MworI2RlZmluZSBDTEtfUUVfQ0gwX0xDRAkJCTE4NAorI2RlZmluZSBDTEtfUFBNVUxDRDAJCQkxODUKKyNkZWZpbmUgQ0xLX1NNTVVGSU1EMAkJCTE4NgorI2RlZmluZSBDTEtfRFNJTTAJCQkxODcKKyNkZWZpbmUgQ0xLX0ZJTUQwCQkJMTg4CisjZGVmaW5lIENMS19DQU0xCQkJMTg5CisjZGVmaW5lIENMS19VQVJUX0lTUF9UT1AJCTE5MAorI2RlZmluZSBDTEtfU1BJMV9JU1BfVE9QCQkxOTEKKyNkZWZpbmUgQ0xLX1NQSTBfSVNQX1RPUAkJMTkyCisjZGVmaW5lIENMS19UU0FEQwkJCTE5MworI2RlZmluZSBDTEtfUFBNVUZJTEUJCQkxOTQKKyNkZWZpbmUgQ0xLX1VTQk9URwkJCTE5NQorI2RlZmluZSBDTEtfVVNCSE9TVAkJCTE5NgorI2RlZmluZSBDTEtfU1JPTUMJCQkxOTcKKyNkZWZpbmUgQ0xLX1NETU1DMQkJCTE5OAorI2RlZmluZSBDTEtfU0RNTUMwCQkJMTk5CisjZGVmaW5lIENMS19QRE1BMQkJCTIwMAorI2RlZmluZSBDTEtfUERNQTAJCQkyMDEKKyNkZWZpbmUgQ0xLX1BXTQkJCQkyMDIKKyNkZWZpbmUgQ0xLX1BDTQkJCQkyMDMKKyNkZWZpbmUgQ0xLX0kyUwkJCQkyMDQKKyNkZWZpbmUgQ0xLX1NQSTEJCQkyMDUKKyNkZWZpbmUgQ0xLX1NQSTAJCQkyMDYKKyNkZWZpbmUgQ0xLX0kyQzcJCQkyMDcKKyNkZWZpbmUgQ0xLX0kyQzYJCQkyMDgKKyNkZWZpbmUgQ0xLX0kyQzUJCQkyMDkKKyNkZWZpbmUgQ0xLX0kyQzQJCQkyMTAKKyNkZWZpbmUgQ0xLX0kyQzMJCQkyMTEKKyNkZWZpbmUgQ0xLX0kyQzIJCQkyMTIKKyNkZWZpbmUgQ0xLX0kyQzEJCQkyMTMKKyNkZWZpbmUgQ0xLX0kyQzAJCQkyMTQKKyNkZWZpbmUgQ0xLX1VBUlQxCQkJMjE1CisjZGVmaW5lIENMS19VQVJUMAkJCTIxNgorI2RlZmluZSBDTEtfQkxPQ0tfTENECQkJMjE3CisjZGVmaW5lIENMS19CTE9DS19HM0QJCQkyMTgKKyNkZWZpbmUgQ0xLX0JMT0NLX01GQwkJCTIxOQorI2RlZmluZSBDTEtfQkxPQ0tfQ0FNCQkJMjIwCisjZGVmaW5lIENMS19TTUlFUwkJCTIyMQorCisvKiBTcGVjaWFsIGNsb2NrcyAqLworI2RlZmluZSBDTEtfU0NMS19KUEVHCQkJMjI0CisjZGVmaW5lIENMS19TQ0xLX00yTVNDQUxFUgkJMjI1CisjZGVmaW5lIENMS19TQ0xLX0dTQ0FMRVIxCQkyMjYKKyNkZWZpbmUgQ0xLX1NDTEtfR1NDQUxFUjAJCTIyNworI2RlZmluZSBDTEtfU0NMS19NRkMJCQkyMjgKKyNkZWZpbmUgQ0xLX1NDTEtfRzNECQkJMjI5CisjZGVmaW5lIENMS19TQ0xLX01JUElEUEhZMkwJCTIzMAorI2RlZmluZSBDTEtfU0NMS19NSVBJMAkJCTIzMQorI2RlZmluZSBDTEtfU0NMS19GSU1EMAkJCTIzMgorI2RlZmluZSBDTEtfU0NMS19DQU0xCQkJMjMzCisjZGVmaW5lIENMS19TQ0xLX1VBUlRfSVNQCQkyMzQKKyNkZWZpbmUgQ0xLX1NDTEtfU1BJMV9JU1AJCTIzNQorI2RlZmluZSBDTEtfU0NMS19TUEkwX0lTUAkJMjM2CisjZGVmaW5lIENMS19TQ0xLX1VQTEwJCQkyMzcKKyNkZWZpbmUgQ0xLX1NDTEtfVFNBREMJCQkyMzgKKyNkZWZpbmUgQ0xLX1NDTEtfRUJJCQkJMjM5CisjZGVmaW5lIENMS19TQ0xLX01NQzEJCQkyNDAKKyNkZWZpbmUgQ0xLX1NDTEtfTU1DMAkJCTI0MQorI2RlZmluZSBDTEtfU0NMS19JMlMJCQkyNDIKKyNkZWZpbmUgQ0xLX1NDTEtfUENNCQkJMjQzCisjZGVmaW5lIENMS19TQ0xLX1NQSTEJCQkyNDQKKyNkZWZpbmUgQ0xLX1NDTEtfU1BJMAkJCTI0NQorI2RlZmluZSBDTEtfU0NMS19VQVJUMQkJCTI0NgorI2RlZmluZSBDTEtfU0NMS19VQVJUMAkJCTI0NworCisvKgorICogVG90YWwgbnVtYmVyIG9mIGNsb2NrcyBvZiBtYWluIENNVS4KKyAqIE5PVEU6IE11c3QgYmUgZXF1YWwgdG8gbGFzdCBjbG9jayBJRCBpbmNyZWFzZWQgYnkgb25lLgorICovCisjZGVmaW5lIENMS19OUl9DTEtTCQkJMjQ4CisKKyNlbmRpZiAvKiBfRFRfQklORElOR1NfQ0xPQ0tfU0FNU1VOR19FWFlOT1MzMjUwX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNC5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M0LmgKaW5kZXggNzVhZmYzMy4uMTEwNmNhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M0LmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M0LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgQ0xLX01PVVRfTVBMTF9VU0VSX0MJMTggLyogRXh5bm9zNHgxMiBvbmx5ICovCiAjZGVmaW5lIENMS19NT1VUX0NPUkUJCTE5CiAjZGVmaW5lIENMS19NT1VUX0FQTEwJCTIwCisjZGVmaW5lIENMS19TQ0xLX0hETUlQSFkJMjIKIAogLyogZ2F0ZSBmb3Igc3BlY2lhbCBjbG9ja3MgKHNjbGspICovCiAjZGVmaW5lIENMS19TQ0xLX0ZJTUMwCQkxMjgKQEAgLTE4MSw3ICsxODIsNiBAQAogI2RlZmluZSBDTEtfS0VZSUYJCTM0NwogI2RlZmluZSBDTEtfQVVEU1MJCTM0OAogI2RlZmluZSBDTEtfTUlQSV9IU0kJCTM0OSAvKiBFeHlub3M0MjEwIG9ubHkgKi8KLSNkZWZpbmUgQ0xLX01ETUEyCQkzNTAgLyogRXh5bm9zNDIxMCBvbmx5ICovCiAjZGVmaW5lIENMS19QSVhFTEFTWU5DTTAJMzUxCiAjZGVmaW5lIENMS19QSVhFTEFTWU5DTTEJMzUyCiAjZGVmaW5lIENMS19GSU1DX0xJVEUwCQkzNTMgLyogRXh5bm9zNHgxMiBvbmx5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vczUyNTAuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTI1MC5oCmluZGV4IDkyMmYyZGMuLmJlNmU5N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTI1MC5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTI1MC5oCkBAIC0xNTAsMTEgKzE1MCwzMCBAQAogI2RlZmluZSBDTEtfRzJECQkJMzQ1CiAjZGVmaW5lIENMS19NRE1BMAkJMzQ2CiAjZGVmaW5lIENMS19TTU1VX01ETUEwCQkzNDcKKyNkZWZpbmUgQ0xLX1NTUwkJCTM0OAorI2RlZmluZSBDTEtfRzNECQkJMzQ5CisjZGVmaW5lIENMS19TTU1VX1RWCQkzNTAKKyNkZWZpbmUgQ0xLX1NNTVVfRklNRDEJCTM1MQorI2RlZmluZSBDTEtfU01NVV8yRAkJMzUyCisjZGVmaW5lIENMS19TTU1VX0ZJTUNfSVNQCTM1MworI2RlZmluZSBDTEtfU01NVV9GSU1DX0RSQwkzNTQKKyNkZWZpbmUgQ0xLX1NNTVVfRklNQ19TQ0MJMzU1CisjZGVmaW5lIENMS19TTU1VX0ZJTUNfU0NQCTM1NgorI2RlZmluZSBDTEtfU01NVV9GSU1DX0ZECTM1NworI2RlZmluZSBDTEtfU01NVV9GSU1DX01DVQkzNTgKKyNkZWZpbmUgQ0xLX1NNTVVfRklNQ19PREMJMzU5CisjZGVmaW5lIENMS19TTU1VX0ZJTUNfRElTMAkzNjAKKyNkZWZpbmUgQ0xLX1NNTVVfRklNQ19ESVMxCTM2MQorI2RlZmluZSBDTEtfU01NVV9GSU1DXzNETlIJMzYyCisjZGVmaW5lIENMS19TTU1VX0ZJTUNfTElURTAJMzYzCisjZGVmaW5lIENMS19TTU1VX0ZJTUNfTElURTEJMzY0CisjZGVmaW5lIENMS19DQU1JRl9UT1AJCTM2NQogCiAvKiBtdXggY2xvY2tzICovCiAjZGVmaW5lIENMS19NT1VUX0hETUkJCTEwMjQKKyNkZWZpbmUgQ0xLX01PVVRfR1BMTAkJMTAyNQogCiAvKiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbWFsIGNsb2NrIGlkICovCi0jZGVmaW5lIENMS19OUl9DTEtTCQkxMDI1CisjZGVmaW5lIENMS19OUl9DTEtTCQkxMDI2CiAKICNlbmRpZiAvKiBfRFRfQklORElOR1NfQ0xPQ0tfRVhZTk9TXzUyNTBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M1MjYwLWNsay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M1MjYwLWNsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YmFjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vczUyNjAtY2xrLmgKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEF1dGhvcjogUmFodWwgU2hhcm1hIDxyYWh1bC5zaGFybWFAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBQcm92aWRlcyBDb25zdGFudHMgZm9yIEV4eW5vczUyNjAgY2xvY2tzLgorKi8KKworI2lmbmRlZiBfRFRfQklORElOR1NfQ0xLX0VYWU5PUzUyNjBfSAorI2RlZmluZSBfRFRfQklORElOR1NfQ0xLX0VYWU5PUzUyNjBfSAorCisvKiBDbG9jayBuYW1lczogPGNtdT48dHlwZT48SVA+ICovCisKKy8qIExpc3QgT2YgQ2xvY2tzIEZvciBDTVVfVE9QICovCisKKyNkZWZpbmUgVE9QX0ZPVVRfRElTUF9QTEwJCQkJMQorI2RlZmluZSBUT1BfRk9VVF9BVURfUExMCQkJCTIKKyNkZWZpbmUgVE9QX01PVVRfQVVEVE9QX1BMTF9VU0VSCQkJMworI2RlZmluZSBUT1BfTU9VVF9BVURfUExMCQkJCTQKKyNkZWZpbmUgVE9QX01PVVRfRElTUF9QTEwJCQkJNQorI2RlZmluZSBUT1BfTU9VVF9CVVNUT1BfUExMX1VTRVIJCQk2CisjZGVmaW5lIFRPUF9NT1VUX01FTVRPUF9QTExfVVNFUgkJCTcKKyNkZWZpbmUgVE9QX01PVVRfTUVESUFUT1BfUExMX1VTRVIJCQk4CisjZGVmaW5lIFRPUF9NT1VUX0RJU1BfRElTUF8zMzMJCQkJOQorI2RlZmluZSBUT1BfTU9VVF9BQ0xLX0RJU1BfMzMzCQkJCTEwCisjZGVmaW5lIFRPUF9NT1VUX0RJU1BfRElTUF8yMjIJCQkJMTEKKyNkZWZpbmUgVE9QX01PVVRfQUNMS19ESVNQXzIyMgkJCQkxMgorI2RlZmluZSBUT1BfTU9VVF9ESVNQX01FRElBX1BJWEVMCQkJMTMKKyNkZWZpbmUgVE9QX01PVVRfRklNRDEJCQkJCTE0CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfUEVSSV9TUEkwX0NMSwkJCTE1CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfUEVSSV9TUEkxX0NMSwkJCTE2CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfUEVSSV9TUEkyX0NMSwkJCTE3CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfUEVSSV9VQVJUMF9VQ0xLCQkJMTgKKyNkZWZpbmUgVE9QX01PVVRfU0NMS19QRVJJX1VBUlQyX1VDTEsJCQkxOQorI2RlZmluZSBUT1BfTU9VVF9TQ0xLX1BFUklfVUFSVDFfVUNMSwkJCTIwCisjZGVmaW5lIFRPUF9NT1VUX0JVUzRfQlVTVE9QXzEwMAkJCTIxCisjZGVmaW5lIFRPUF9NT1VUX0JVUzRfQlVTVE9QXzQwMAkJCTIyCisjZGVmaW5lIFRPUF9NT1VUX0JVUzNfQlVTVE9QXzEwMAkJCTIzCisjZGVmaW5lIFRPUF9NT1VUX0JVUzNfQlVTVE9QXzQwMAkJCTI0CisjZGVmaW5lIFRPUF9NT1VUX0JVUzJfQlVTVE9QXzQwMAkJCTI1CisjZGVmaW5lIFRPUF9NT1VUX0JVUzJfQlVTVE9QXzEwMAkJCTI2CisjZGVmaW5lIFRPUF9NT1VUX0JVUzFfQlVTVE9QXzEwMAkJCTI3CisjZGVmaW5lIFRPUF9NT1VUX0JVUzFfQlVTVE9QXzQwMAkJCTI4CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfRlNZU19VU0IJCQkJMjkKKyNkZWZpbmUgVE9QX01PVVRfU0NMS19GU1lTX01NQzBfU0RDTEtJTl9BCQkzMAorI2RlZmluZSBUT1BfTU9VVF9TQ0xLX0ZTWVNfTU1DMV9TRENMS0lOX0EJCTMxCisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfRlNZU19NTUMyX1NEQ0xLSU5fQQkJMzIKKyNkZWZpbmUgVE9QX01PVVRfU0NMS19GU1lTX01NQzBfU0RDTEtJTl9CCQkzMworI2RlZmluZSBUT1BfTU9VVF9TQ0xLX0ZTWVNfTU1DMV9TRENMS0lOX0IJCTM0CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfRlNZU19NTUMyX1NEQ0xLSU5fQgkJMzUKKyNkZWZpbmUgVE9QX01PVVRfQUNMS19JU1AxXzI2NgkJCQkzNgorI2RlZmluZSBUT1BfTU9VVF9JU1AxX01FRElBXzI2NgkJCQkzNworI2RlZmluZSBUT1BfTU9VVF9BQ0xLX0lTUDFfNDAwCQkJCTM4CisjZGVmaW5lIFRPUF9NT1VUX0lTUDFfTUVESUFfNDAwCQkJCTM5CisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfSVNQMV9TUEkwCQkJCTQwCisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfSVNQMV9TUEkxCQkJCTQxCisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfSVNQMV9VQVJUCQkJCTQyCisjZGVmaW5lIFRPUF9NT1VUX1NDTEtfSVNQMV9TRU5TT1IyCQkJNDMKKyNkZWZpbmUgVE9QX01PVVRfU0NMS19JU1AxX1NFTlNPUjEJCQk0NAorI2RlZmluZSBUT1BfTU9VVF9TQ0xLX0lTUDFfU0VOU09SMAkJCTQ1CisjZGVmaW5lIFRPUF9NT1VUX0FDTEtfTUZDXzMzMwkJCQk0NgorI2RlZmluZSBUT1BfTU9VVF9NRkNfQlVTVE9QXzMzMwkJCQk0NworI2RlZmluZSBUT1BfTU9VVF9BQ0xLX0cyRF8zMzMJCQkJNDgKKyNkZWZpbmUgVE9QX01PVVRfRzJEX0JVU1RPUF8zMzMJCQkJNDkKKyNkZWZpbmUgVE9QX01PVVRfQUNMS19HU0NMX0ZJTUMJCQkJNTAKKyNkZWZpbmUgVE9QX01PVVRfR1NDTF9CVVNUT1BfRklNQwkJCTUxCisjZGVmaW5lIFRPUF9NT1VUX0FDTEtfR1NDTF8zMzMJCQkJNTIKKyNkZWZpbmUgVE9QX01PVVRfR1NDTF9CVVNUT1BfMzMzCQkJNTMKKyNkZWZpbmUgVE9QX01PVVRfQUNMS19HU0NMXzQwMAkJCQk1NAorI2RlZmluZSBUT1BfTU9VVF9NMk1fTUVESUFUT1BfNDAwCQkJNTUKKyNkZWZpbmUgVE9QX0RPVVRfQUNMS19NRkNfMzMzCQkJCTU2CisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfRzJEXzMzMwkJCQk1NworI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0lTUDFfU0VOU09SMl9BCQkJNTgKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19JU1AxX1NFTlNPUjFfQQkJCTU5CisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfSVNQMV9TRU5TT1IwX0EJCQk2MAorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0dTQ0xfRklNQwkJCQk2MQorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0dTQ0xfNDAwCQkJCTYyCisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfR1NDTF8zMzMJCQkJNjMKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19JU1AxX1NQSTBfQgkJCTY0CisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfSVNQMV9TUEkwX0EJCQk2NQorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0lTUDFfNDAwCQkJCTY2CisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfSVNQMV8yNjYJCQkJNjcKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19JU1AxX1VBUlQJCQkJNjgKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19JU1AxX1NQSTFfQgkJCTY5CisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfSVNQMV9TUEkxX0EJCQk3MAorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0lTUDFfU0VOU09SMl9CCQkJNzEKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19JU1AxX1NFTlNPUjFfQgkJCTcyCisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfSVNQMV9TRU5TT1IwX0IJCQk3MworI2RlZmluZSBUT1BfRE9VVFRPUF9fU0NMS19IUE1fVEFSR0VUQ0xLCQkJNzQKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19ESVNQX1BJWEVMCQkJNzUKKyNkZWZpbmUgVE9QX0RPVVRfQUNMS19ESVNQXzIyMgkJCQk3NgorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0RJU1BfMzMzCQkJCTc3CisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfQlVTNF8xMDAJCQkJNzgKKyNkZWZpbmUgVE9QX0RPVVRfQUNMS19CVVM0XzQwMAkJCQk3OQorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0JVUzNfMTAwCQkJCTgwCisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfQlVTM180MDAJCQkJODEKKyNkZWZpbmUgVE9QX0RPVVRfQUNMS19CVVMyXzEwMAkJCQk4MgorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0JVUzJfNDAwCQkJCTgzCisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfQlVTMV8xMDAJCQkJODQKKyNkZWZpbmUgVE9QX0RPVVRfQUNMS19CVVMxXzQwMAkJCQk4NQorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX1BFUklfU1BJMV9CCQkJODYKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19QRVJJX1NQSTFfQQkJCTg3CisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfUEVSSV9TUEkwX0IJCQk4OAorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX1BFUklfU1BJMF9BCQkJODkKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19QRVJJX1VBUlQwCQkJOTAKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19QRVJJX1VBUlQyCQkJOTEKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19QRVJJX1VBUlQxCQkJOTIKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19QRVJJX1NQSTJfQgkJCTkzCisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfUEVSSV9TUEkyX0EJCQk5NAorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX1BFUklfQVVECQkJCTk1CisjZGVmaW5lIFRPUF9ET1VUX0FDTEtfUEVSSV82NgkJCQk5NgorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0ZTWVNfTU1DMF9TRENMS0lOX0IJCTk3CisjZGVmaW5lIFRPUF9ET1VUX1NDTEtfRlNZU19NTUMwX1NEQ0xLSU5fQQkJOTgKKyNkZWZpbmUgVE9QX0RPVVRfU0NMS19GU1lTX1VTQkRSRDMwX1NVU1BFTkRfQ0xLCQk5OQorI2RlZmluZSBUT1BfRE9VVF9BQ0xLX0ZTWVNfMjAwCQkJCTEwMAorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0ZTWVNfTU1DMl9TRENMS0lOX0IJCTEwMQorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0ZTWVNfTU1DMl9TRENMS0lOX0EJCTEwMgorI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0ZTWVNfTU1DMV9TRENMS0lOX0IJCTEwMworI2RlZmluZSBUT1BfRE9VVF9TQ0xLX0ZTWVNfTU1DMV9TRENMS0lOX0EJCTEwNAorI2RlZmluZSBUT1BfU0NMS19GSU1EMQkJCQkJMTA1CisjZGVmaW5lIFRPUF9TQ0xLX01NQzIJCQkJCTEwNgorI2RlZmluZSBUT1BfU0NMS19NTUMxCQkJCQkxMDcKKyNkZWZpbmUgVE9QX1NDTEtfTU1DMAkJCQkJMTA4CisjZGVmaW5lIFBIWUNMS19EUFRYX1BIWV9DSDNfVFhEX0NMSwkJCTEwOQorI2RlZmluZSBQSFlDTEtfRFBUWF9QSFlfQ0gyX1RYRF9DTEsJCQkxMTAKKyNkZWZpbmUgUEhZQ0xLX0RQVFhfUEhZX0NIMV9UWERfQ0xLCQkJMTExCisjZGVmaW5lIFBIWUNMS19EUFRYX1BIWV9DSDBfVFhEX0NMSwkJCTExMgorI2RlZmluZSBwaHljbGtfaGRtaV9waHlfdG1kc19jbGtvCQkJMTEzCisjZGVmaW5lIFBIWUNMS19IRE1JX1BIWV9QSVhFTF9DTEtPCQkJMTE0CisjZGVmaW5lIFBIWUNMS19IRE1JX0xJTktfT19UTURTX0NMS0hJCQkJMTE1CisjZGVmaW5lIFBIWUNMS19NSVBJX0RQSFlfNExfTV9UWEJZVEVDTEtIUwkJMTE2CisjZGVmaW5lIFBIWUNMS19EUFRYX1BIWV9PX1JFRl9DTEtfMjRNCQkJMTE3CisjZGVmaW5lIFBIWUNMS19EUFRYX1BIWV9DTEtfRElWMgkJCTExOAorI2RlZmluZSBQSFlDTEtfTUlQSV9EUEhZXzRMX01fUlhDTEtFU0MwCQkJMTE5CisjZGVmaW5lIFBIWUNMS19VU0JIT1NUMjBfUEhZX1BIWUNMT0NLCQkJMTIwCisjZGVmaW5lIFBIWUNMS19VU0JIT1NUMjBfUEhZX0ZSRUVDTEsJCQkxMjEKKyNkZWZpbmUgUEhZQ0xLX1VTQkhPU1QyMF9QSFlfQ0xLNDhNT0hDSQkJCTEyMgorI2RlZmluZSBQSFlDTEtfVVNCRFJEMzBfVURSRDMwX1BJUEVfUENMSwkJMTIzCisjZGVmaW5lIFBIWUNMS19VU0JEUkQzMF9VRFJEMzBfUEhZQ0xPQ0sJCQkxMjQKKyNkZWZpbmUgVE9QX05SX0NMSwkJCQkJMTI1CisKKworLyogTGlzdCBPZiBDbG9ja3MgRm9yIENNVV9FR0wgKi8KKworI2RlZmluZSBFR0xfRk9VVF9FR0xfUExMCQkJCTEKKyNkZWZpbmUgRUdMX0ZPVVRfRUdMX0RQTEwJCQkJMgorI2RlZmluZSBFR0xfTU9VVF9FR0xfQgkJCQkJMworI2RlZmluZSBFR0xfTU9VVF9FR0xfUExMCQkJCTQKKyNkZWZpbmUgRUdMX0RPVVRfRUdMX1BMTAkJCQk1CisjZGVmaW5lIEVHTF9ET1VUX0VHTF9QQ0xLX0RCRwkJCQk2CisjZGVmaW5lIEVHTF9ET1VUX0VHTF9BVENMSwkJCQk3CisjZGVmaW5lIEVHTF9ET1VUX1BDTEtfRUdMCQkJCTgKKyNkZWZpbmUgRUdMX0RPVVRfQUNMS19FR0wJCQkJOQorI2RlZmluZSBFR0xfRE9VVF9FR0wyCQkJCQkxMAorI2RlZmluZSBFR0xfRE9VVF9FR0wxCQkJCQkxMQorI2RlZmluZSBFR0xfTlJfQ0xLCQkJCQkxMgorCisKKy8qIExpc3QgT2YgQ2xvY2tzIEZvciBDTVVfS0ZDICovCisKKyNkZWZpbmUgS0ZDX0ZPVVRfS0ZDX1BMTAkJCQkxCisjZGVmaW5lIEtGQ19NT1VUX0tGQ19QTEwJCQkJMgorI2RlZmluZSBLRkNfTU9VVF9LRkMJCQkJCTMKKyNkZWZpbmUgS0ZDX0RPVVRfS0ZDX1BMTAkJCQk0CisjZGVmaW5lIEtGQ19ET1VUX1BDTEtfS0ZDCQkJCTUKKyNkZWZpbmUgS0ZDX0RPVVRfQUNMS19LRkMJCQkJNgorI2RlZmluZSBLRkNfRE9VVF9LRkNfUENMS19EQkcJCQkJNworI2RlZmluZSBLRkNfRE9VVF9LRkNfQVRDTEsJCQkJOAorI2RlZmluZSBLRkNfRE9VVF9LRkMyCQkJCQk5CisjZGVmaW5lIEtGQ19ET1VUX0tGQzEJCQkJCTEwCisjZGVmaW5lIEtGQ19OUl9DTEsJCQkJCTExCisKKworLyogTGlzdCBPZiBDbG9ja3MgRm9yIENNVV9NSUYgKi8KKworI2RlZmluZSBNSUZfRk9VVF9NRU1fUExMCQkJCTEKKyNkZWZpbmUgTUlGX0ZPVVRfTUVESUFfUExMCQkJCTIKKyNkZWZpbmUgTUlGX0ZPVVRfQlVTX1BMTAkJCQkzCisjZGVmaW5lIE1JRl9NT1VUX0NMSzJYX1BIWQkJCQk0CisjZGVmaW5lIE1JRl9NT1VUX01JRl9EUkVYMlgJCQkJNQorI2RlZmluZSBNSUZfTU9VVF9DTEtNX1BIWQkJCQk2CisjZGVmaW5lIE1JRl9NT1VUX01JRl9EUkVYCQkJCTcKKyNkZWZpbmUgTUlGX01PVVRfTUVESUFfUExMCQkJCTgKKyNkZWZpbmUgTUlGX01PVVRfQlVTX1BMTAkJCQk5CisjZGVmaW5lIE1JRl9NT1VUX01FTV9QTEwJCQkJMTAKKyNkZWZpbmUgTUlGX0RPVVRfQUNMS19CVVNfMTAwCQkJCTExCisjZGVmaW5lIE1JRl9ET1VUX0FDTEtfQlVTXzIwMAkJCQkxMgorI2RlZmluZSBNSUZfRE9VVF9BQ0xLX01JRl80NjYJCQkJMTMKKyNkZWZpbmUgTUlGX0RPVVRfQ0xLMlhfUEhZCQkJCTE0CisjZGVmaW5lIE1JRl9ET1VUX0NMS01fUEhZCQkJCTE1CisjZGVmaW5lIE1JRl9ET1VUX0JVU19QTEwJCQkJMTYKKyNkZWZpbmUgTUlGX0RPVVRfTUVNX1BMTAkJCQkxNworI2RlZmluZSBNSUZfRE9VVF9NRURJQV9QTEwJCQkJMTgKKyNkZWZpbmUgTUlGX0NMS19MUEREUjNQSFlfV1JBUDEJCQkJMTkKKyNkZWZpbmUgTUlGX0NMS19MUEREUjNQSFlfV1JBUDAJCQkJMjAKKyNkZWZpbmUgTUlGX0NMS19NT05PQ05UCQkJCQkyMQorI2RlZmluZSBNSUZfQ0xLX01JRl9SVEMJCQkJCTIyCisjZGVmaW5lIE1JRl9DTEtfRFJFWDEJCQkJCTIzCisjZGVmaW5lIE1JRl9DTEtfRFJFWDAJCQkJCTI0CisjZGVmaW5lIE1JRl9DTEtfSU5UTUVNCQkJCQkyNQorI2RlZmluZSBNSUZfU0NMS19MUEREUjNQSFlfV1JBUF9VMQkJCTI2CisjZGVmaW5lIE1JRl9TQ0xLX0xQRERSM1BIWV9XUkFQX1UwCQkJMjcKKyNkZWZpbmUgTUlGX05SX0NMSwkJCQkJMjgKKworCisvKiBMaXN0IE9mIENsb2NrcyBGb3IgQ01VX0czRCAqLworCisjZGVmaW5lIEczRF9GT1VUX0czRF9QTEwJCQkJMQorI2RlZmluZSBHM0RfTU9VVF9HM0RfUExMCQkJCTIKKyNkZWZpbmUgRzNEX0RPVVRfUENMS19HM0QJCQkJMworI2RlZmluZSBHM0RfRE9VVF9BQ0xLX0czRAkJCQk0CisjZGVmaW5lIEczRF9DTEtfRzNEX0hQTQkJCQkJNQorI2RlZmluZSBHM0RfQ0xLX0czRAkJCQkJNgorI2RlZmluZSBHM0RfTlJfQ0xLCQkJCQk3CisKKworLyogTGlzdCBPZiBDbG9ja3MgRm9yIENNVV9BVUQgKi8KKworI2RlZmluZSBBVURfTU9VVF9TQ0xLX0FVRF9QQ00JCQkJMQorI2RlZmluZSBBVURfTU9VVF9TQ0xLX0FVRF9JMlMJCQkJMgorI2RlZmluZSBBVURfTU9VVF9BVURfUExMX1VTRVIJCQkJMworI2RlZmluZSBBVURfRE9VVF9BQ0xLX0FVRF8xMzEJCQkJNAorI2RlZmluZSBBVURfRE9VVF9TQ0xLX0FVRF9VQVJUCQkJCTUKKyNkZWZpbmUgQVVEX0RPVVRfU0NMS19BVURfUENNCQkJCTYKKyNkZWZpbmUgQVVEX0RPVVRfU0NMS19BVURfSTJTCQkJCTcKKyNkZWZpbmUgQVVEX0NMS19BVURfVUFSVAkJCQk4CisjZGVmaW5lIEFVRF9DTEtfUENNCQkJCQk5CisjZGVmaW5lIEFVRF9DTEtfSTJTCQkJCQkxMAorI2RlZmluZSBBVURfQ0xLX0RNQUMJCQkJCTExCisjZGVmaW5lIEFVRF9DTEtfU1JBTUMJCQkJCTEyCisjZGVmaW5lIEFVRF9TQ0xLX0FVRF9VQVJUCQkJCTEzCisjZGVmaW5lIEFVRF9TQ0xLX1BDTQkJCQkJMTQKKyNkZWZpbmUgQVVEX1NDTEtfSTJTCQkJCQkxNQorI2RlZmluZSBBVURfTlJfQ0xLCQkJCQkxNgorCisKKy8qIExpc3QgT2YgQ2xvY2tzIEZvciBDTVVfTUZDICovCisKKyNkZWZpbmUgTUZDX01PVVRfQUNMS19NRkNfMzMzX1VTRVIJCQkxCisjZGVmaW5lIE1GQ19ET1VUX1BDTEtfTUZDXzgzCQkJCTIKKyNkZWZpbmUgTUZDX0NMS19NRkMJCQkJCTMKKyNkZWZpbmUgTUZDX0NMS19TTU1VMl9NRkNNMQkJCQk0CisjZGVmaW5lIE1GQ19DTEtfU01NVTJfTUZDTTAJCQkJNQorI2RlZmluZSBNRkNfTlJfQ0xLCQkJCQk2CisKKworLyogTGlzdCBPZiBDbG9ja3MgRm9yIENNVV9HU0NMICovCisKKyNkZWZpbmUgR1NDTF9NT1VUX0FDTEtfQ1NJUwkJCQkxCisjZGVmaW5lIEdTQ0xfTU9VVF9BQ0xLX0dTQ0xfRklNQ19VU0VSCQkJMgorI2RlZmluZSBHU0NMX01PVVRfQUNMS19NMk1fNDAwX1VTRVIJCQkzCisjZGVmaW5lIEdTQ0xfTU9VVF9BQ0xLX0dTQ0xfMzMzX1VTRVIJCQk0CisjZGVmaW5lIEdTQ0xfRE9VVF9BQ0xLX0NTSVNfMjAwCQkJCTUKKyNkZWZpbmUgR1NDTF9ET1VUX1BDTEtfTTJNXzEwMAkJCQk2CisjZGVmaW5lIEdTQ0xfQ0xLX1BJWEVMX0dTQ0wxCQkJCTcKKyNkZWZpbmUgR1NDTF9DTEtfUElYRUxfR1NDTDAJCQkJOAorI2RlZmluZSBHU0NMX0NMS19NU0NMMQkJCQkJOQorI2RlZmluZSBHU0NMX0NMS19NU0NMMAkJCQkJMTAKKyNkZWZpbmUgR1NDTF9DTEtfR1NDTDEJCQkJCTExCisjZGVmaW5lIEdTQ0xfQ0xLX0dTQ0wwCQkJCQkxMgorI2RlZmluZSBHU0NMX0NMS19GSU1DX0xJVEVfRAkJCQkxMworI2RlZmluZSBHU0NMX0NMS19GSU1DX0xJVEVfQgkJCQkxNAorI2RlZmluZSBHU0NMX0NMS19GSU1DX0xJVEVfQQkJCQkxNQorI2RlZmluZSBHU0NMX0NMS19DU0lTMQkJCQkJMTYKKyNkZWZpbmUgR1NDTF9DTEtfQ1NJUzAJCQkJCTE3CisjZGVmaW5lIEdTQ0xfQ0xLX1NNTVUzX0xJVEVfRAkJCQkxOAorI2RlZmluZSBHU0NMX0NMS19TTU1VM19MSVRFX0IJCQkJMTkKKyNkZWZpbmUgR1NDTF9DTEtfU01NVTNfTElURV9BCQkJCTIwCisjZGVmaW5lIEdTQ0xfQ0xLX1NNTVUzX0dTQ0wwCQkJCTIxCisjZGVmaW5lIEdTQ0xfQ0xLX1NNTVUzX0dTQ0wxCQkJCTIyCisjZGVmaW5lIEdTQ0xfQ0xLX1NNTVUzX01TQ0wwCQkJCTIzCisjZGVmaW5lIEdTQ0xfQ0xLX1NNTVUzX01TQ0wxCQkJCTI0CisjZGVmaW5lIEdTQ0xfU0NMS19DU0lTMV9XUkFQCQkJCTI1CisjZGVmaW5lIEdTQ0xfU0NMS19DU0lTMF9XUkFQCQkJCTI2CisjZGVmaW5lIEdTQ0xfTlJfQ0xLCQkJCQkyNworCisKKy8qIExpc3QgT2YgQ2xvY2tzIEZvciBDTVVfRlNZUyAqLworCisjZGVmaW5lIEZTWVNfTU9VVF9QSFlDTEtfVVNCSE9TVDIwX1BIWUNMS19VU0VSCQkxCisjZGVmaW5lIEZTWVNfTU9VVF9QSFlDTEtfVVNCSE9TVDIwX0ZSRUVDTEtfVVNFUgkJMgorI2RlZmluZSBGU1lTX01PVVRfUEhZQ0xLX1VTQkhPU1QyMF9DTEs0OE1PSENJX1VTRVIJMworI2RlZmluZSBGU1lTX01PVVRfUEhZQ0xLX1VTQkRSRDMwX1BJUEVfUENMS19VU0VSCTQKKyNkZWZpbmUgRlNZU19NT1VUX1BIWUNMS19VU0JEUkQzMF9QSFlDTE9DS19VU0VSCQk1CisjZGVmaW5lIEZTWVNfQ0xLX1RTSQkJCQkJNgorI2RlZmluZSBGU1lTX0NMS19VU0JMSU5LCQkJCTcKKyNkZWZpbmUgRlNZU19DTEtfVVNCSE9TVDIwCQkJCTgKKyNkZWZpbmUgRlNZU19DTEtfVVNCRFJEMzAJCQkJOQorI2RlZmluZSBGU1lTX0NMS19TUk9NQwkJCQkJMTAKKyNkZWZpbmUgRlNZU19DTEtfUERNQQkJCQkJMTEKKyNkZWZpbmUgRlNZU19DTEtfTU1DMgkJCQkJMTIKKyNkZWZpbmUgRlNZU19DTEtfTU1DMQkJCQkJMTMKKyNkZWZpbmUgRlNZU19DTEtfTU1DMAkJCQkJMTQKKyNkZWZpbmUgRlNZU19DTEtfUlRJQwkJCQkJMTUKKyNkZWZpbmUgRlNZU19DTEtfU01NVV9SVElDCQkJCTE2CisjZGVmaW5lIEZTWVNfUEhZQ0xLX1VTQkRSRDMwCQkJCTE3CisjZGVmaW5lIEZTWVNfUEhZQ0xLX1VTQkhPU1QyMAkJCQkxOAorI2RlZmluZSBGU1lTX05SX0NMSwkJCQkJMTkKKworCisvKiBMaXN0IE9mIENsb2NrcyBGb3IgQ01VX1BFUkkgKi8KKworI2RlZmluZSBQRVJJX01PVVRfU0NMS19TUERJRgkJCQkxCisjZGVmaW5lIFBFUklfTU9VVF9TQ0xLX0kyU0NPRAkJCQkyCisjZGVmaW5lIFBFUklfTU9VVF9TQ0xLX1BDTQkJCQkzCisjZGVmaW5lIFBFUklfRE9VVF9JMlMJCQkJCTQKKyNkZWZpbmUgUEVSSV9ET1VUX1BDTQkJCQkJNQorI2RlZmluZSBQRVJJX0NMS19XRFRfS0ZDCQkJCTYKKyNkZWZpbmUgUEVSSV9DTEtfV0RUX0VHTAkJCQk3CisjZGVmaW5lIFBFUklfQ0xLX0hTSUMzCQkJCQk4CisjZGVmaW5lIFBFUklfQ0xLX0hTSUMyCQkJCQk5CisjZGVmaW5lIFBFUklfQ0xLX0hTSUMxCQkJCQkxMAorI2RlZmluZSBQRVJJX0NMS19IU0lDMAkJCQkJMTEKKyNkZWZpbmUgUEVSSV9DTEtfUENNCQkJCQkxMgorI2RlZmluZSBQRVJJX0NMS19NQ1QJCQkJCTEzCisjZGVmaW5lIFBFUklfQ0xLX0kyUwkJCQkJMTQKKyNkZWZpbmUgUEVSSV9DTEtfSTJDSERNSQkJCQkxNQorI2RlZmluZSBQRVJJX0NMS19JMkM3CQkJCQkxNgorI2RlZmluZSBQRVJJX0NMS19JMkM2CQkJCQkxNworI2RlZmluZSBQRVJJX0NMS19JMkM1CQkJCQkxOAorI2RlZmluZSBQRVJJX0NMS19JMkM0CQkJCQkxOQorI2RlZmluZSBQRVJJX0NMS19JMkM5CQkJCQkyMAorI2RlZmluZSBQRVJJX0NMS19JMkM4CQkJCQkyMQorI2RlZmluZSBQRVJJX0NMS19JMkMxMQkJCQkJMjIKKyNkZWZpbmUgUEVSSV9DTEtfSTJDMTAJCQkJCTIzCisjZGVmaW5lIFBFUklfQ0xLX0hETUlDRUMJCQkJMjQKKyNkZWZpbmUgUEVSSV9DTEtfRUZVU0VfV1JJVEVSCQkJCTI1CisjZGVmaW5lIFBFUklfQ0xLX0FCQgkJCQkJMjYKKyNkZWZpbmUgUEVSSV9DTEtfVUFSVDIJCQkJCTI3CisjZGVmaW5lIFBFUklfQ0xLX1VBUlQxCQkJCQkyOAorI2RlZmluZSBQRVJJX0NMS19VQVJUMAkJCQkJMjkKKyNkZWZpbmUgUEVSSV9DTEtfQURDCQkJCQkzMAorI2RlZmluZSBQRVJJX0NMS19UTVU0CQkJCQkzMQorI2RlZmluZSBQRVJJX0NMS19UTVUzCQkJCQkzMgorI2RlZmluZSBQRVJJX0NMS19UTVUyCQkJCQkzMworI2RlZmluZSBQRVJJX0NMS19UTVUxCQkJCQkzNAorI2RlZmluZSBQRVJJX0NMS19UTVUwCQkJCQkzNQorI2RlZmluZSBQRVJJX0NMS19TUEkyCQkJCQkzNgorI2RlZmluZSBQRVJJX0NMS19TUEkxCQkJCQkzNworI2RlZmluZSBQRVJJX0NMS19TUEkwCQkJCQkzOAorI2RlZmluZSBQRVJJX0NMS19TUERJRgkJCQkJMzkKKyNkZWZpbmUgUEVSSV9DTEtfUFdNCQkJCQk0MAorI2RlZmluZSBQRVJJX0NMS19VQVJUNAkJCQkJNDEKKyNkZWZpbmUgUEVSSV9DTEtfQ0hJUElECQkJCQk0MgorI2RlZmluZSBQRVJJX0NMS19QUk9WS0VZMAkJCQk0MworI2RlZmluZSBQRVJJX0NMS19QUk9WS0VZMQkJCQk0NAorI2RlZmluZSBQRVJJX0NMS19TRUNLRVkJCQkJCTQ1CisjZGVmaW5lIFBFUklfQ0xLX1RPUF9SVEMJCQkJNDYKKyNkZWZpbmUgUEVSSV9DTEtfVFpQQzEwCQkJCQk0NworI2RlZmluZSBQRVJJX0NMS19UWlBDOQkJCQkJNDgKKyNkZWZpbmUgUEVSSV9DTEtfVFpQQzgJCQkJCTQ5CisjZGVmaW5lIFBFUklfQ0xLX1RaUEM3CQkJCQk1MAorI2RlZmluZSBQRVJJX0NMS19UWlBDNgkJCQkJNTEKKyNkZWZpbmUgUEVSSV9DTEtfVFpQQzUJCQkJCTUyCisjZGVmaW5lIFBFUklfQ0xLX1RaUEM0CQkJCQk1MworI2RlZmluZSBQRVJJX0NMS19UWlBDMwkJCQkJNTQKKyNkZWZpbmUgUEVSSV9DTEtfVFpQQzIJCQkJCTU1CisjZGVmaW5lIFBFUklfQ0xLX1RaUEMxCQkJCQk1NgorI2RlZmluZSBQRVJJX0NMS19UWlBDMAkJCQkJNTcKKyNkZWZpbmUgUEVSSV9TQ0xLX1VBUlQyCQkJCQk1OAorI2RlZmluZSBQRVJJX1NDTEtfVUFSVDEJCQkJCTU5CisjZGVmaW5lIFBFUklfU0NMS19VQVJUMAkJCQkJNjAKKyNkZWZpbmUgUEVSSV9TQ0xLX1NQSTIJCQkJCTYxCisjZGVmaW5lIFBFUklfU0NMS19TUEkxCQkJCQk2MgorI2RlZmluZSBQRVJJX1NDTEtfU1BJMAkJCQkJNjMKKyNkZWZpbmUgUEVSSV9TQ0xLX1NQRElGCQkJCQk2NAorI2RlZmluZSBQRVJJX1NDTEtfSTJTCQkJCQk2NQorI2RlZmluZSBQRVJJX1NDTEtfUENNMQkJCQkJNjYKKyNkZWZpbmUgUEVSSV9OUl9DTEsJCQkJCTY3CisKKworLyogTGlzdCBPZiBDbG9ja3MgRm9yIENNVV9ESVNQICovCisKKyNkZWZpbmUgRElTUF9NT1VUX1NDTEtfSERNSV9TUERJRgkJCTEKKyNkZWZpbmUgRElTUF9NT1VUX1NDTEtfSERNSV9QSVhFTAkJCTIKKyNkZWZpbmUgRElTUF9NT1VUX1BIWUNMS19NSVBJX0RQSFlfNExNUlhDTEtfRVNDMF9VU0VSCTMKKyNkZWZpbmUgRElTUF9NT1VUX1BIWUNMS19IRE1JX1BIWV9UTURTX0NMS09fVVNFUgk0CisjZGVmaW5lIERJU1BfTU9VVF9QSFlDTEtfSERNSV9QSFlfUkVGX0NMS09fVVNFUgkJNQorI2RlZmluZSBESVNQX01PVVRfSERNSV9QSFlfUElYRUwJCQk2CisjZGVmaW5lIERJU1BfTU9VVF9QSFlDTEtfSERNSV9MSU5LX09fVE1EU19DTEtISV9VU0VSCTcKKyNkZWZpbmUgRElTUF9NT1VUX1BIWUNMS19NSVBJX0RQSFlfNExfTV9UWEJZVEVfQ0xLSFMJOAorI2RlZmluZSBESVNQX01PVVRfUEhZQ0xLX0RQVFhfUEhZX09fUkVGX0NMS18yNE1fVVNFUgk5CisjZGVmaW5lIERJU1BfTU9VVF9QSFlDTEtfRFBUWF9QSFlfQ0xLX0RJVjJfVVNFUgkJMTAKKyNkZWZpbmUgRElTUF9NT1VUX1BIWUNMS19EUFRYX1BIWV9DSDNfVFhEX0NMS19VU0VSCTExCisjZGVmaW5lIERJU1BfTU9VVF9QSFlDTEtfRFBUWF9QSFlfQ0gyX1RYRF9DTEtfVVNFUgkxMgorI2RlZmluZSBESVNQX01PVVRfUEhZQ0xLX0RQVFhfUEhZX0NIMV9UWERfQ0xLX1VTRVIJMTMKKyNkZWZpbmUgRElTUF9NT1VUX1BIWUNMS19EUFRYX1BIWV9DSDBfVFhEX0NMS19VU0VSCTE0CisjZGVmaW5lIERJU1BfTU9VVF9BQ0xLX0RJU1BfMjIyX1VTRVIJCQkxNQorI2RlZmluZSBESVNQX01PVVRfU0NMS19ESVNQX1BJWEVMX1VTRVIJCQkxNgorI2RlZmluZSBESVNQX01PVVRfQUNMS19ESVNQXzMzM19VU0VSCQkJMTcKKyNkZWZpbmUgRElTUF9ET1VUX1NDTEtfSERNSV9QSFlfUElYRUxfQ0xLSQkJMTgKKyNkZWZpbmUgRElTUF9ET1VUX1NDTEtfRklNRDFfRVhUQ0xLUExMCQkJMTkKKyNkZWZpbmUgRElTUF9ET1VUX1BDTEtfRElTUF8xMTEJCQkJMjAKKyNkZWZpbmUgRElTUF9DTEtfU01NVV9UVgkJCQkyMQorI2RlZmluZSBESVNQX0NMS19TTU1VX0ZJTUQxTTEJCQkJMjIKKyNkZWZpbmUgRElTUF9DTEtfU01NVV9GSU1EMU0wCQkJCTIzCisjZGVmaW5lIERJU1BfQ0xLX1BJWEVMX01JWEVSCQkJCTI0CisjZGVmaW5lIERJU1BfQ0xLX1BJWEVMX0RJU1AJCQkJMjUKKyNkZWZpbmUgRElTUF9DTEtfTUlYRVIJCQkJCTI2CisjZGVmaW5lIERJU1BfQ0xLX01JUElQSFkJCQkJMjcKKyNkZWZpbmUgRElTUF9DTEtfSERNSVBIWQkJCQkyOAorI2RlZmluZSBESVNQX0NMS19IRE1JCQkJCQkyOQorI2RlZmluZSBESVNQX0NMS19GSU1EMQkJCQkJMzAKKyNkZWZpbmUgRElTUF9DTEtfRFNJTTEJCQkJCTMxCisjZGVmaW5lIERJU1BfQ0xLX0RQUEhZCQkJCQkzMgorI2RlZmluZSBESVNQX0NMS19EUAkJCQkJMzMKKyNkZWZpbmUgRElTUF9TQ0xLX1BJWEVMCQkJCQkzNAorI2RlZmluZSBESVNQX01PVVRfSERNSV9QSFlfUElYRUxfVVNFUgkJCTM1CisjZGVmaW5lIERJU1BfTlJfQ0xLCQkJCQkzNgorCisKKy8qIExpc3QgT2YgQ2xvY2tzIEZvciBDTVVfRzJEICovCisKKyNkZWZpbmUgRzJEX01PVVRfQUNMS19HMkRfMzMzX1VTRVIJCQkxCisjZGVmaW5lIEcyRF9ET1VUX1BDTEtfRzJEXzgzCQkJCTIKKyNkZWZpbmUgRzJEX0NMS19TTU1VM19KUEVHCQkJCTMKKyNkZWZpbmUgRzJEX0NMS19NRE1BCQkJCQk0CisjZGVmaW5lIEcyRF9DTEtfSlBFRwkJCQkJNQorI2RlZmluZSBHMkRfQ0xLX0cyRAkJCQkJNgorI2RlZmluZSBHMkRfQ0xLX1NTUwkJCQkJNworI2RlZmluZSBHMkRfQ0xLX1NMSU1fU1NTCQkJCTgKKyNkZWZpbmUgRzJEX0NMS19TTU1VX1NMSU1fU1NTCQkJCTkKKyNkZWZpbmUgRzJEX0NMS19TTU1VX1NTUwkJCQkxMAorI2RlZmluZSBHMkRfQ0xLX1NNTVVfTURNQQkJCQkxMQorI2RlZmluZSBHMkRfQ0xLX1NNTVUzX0cyRAkJCQkxMgorI2RlZmluZSBHMkRfTlJfQ0xLCQkJCQkxMworCisKKy8qIExpc3QgT2YgQ2xvY2tzIEZvciBDTVVfSVNQICovCisKKyNkZWZpbmUgSVNQX01PVVRfSVNQXzQwMF9VU0VSCQkJCTEKKyNkZWZpbmUgSVNQX01PVVRfSVNQXzI2Nl9VU0VSCQkJCTIKKyNkZWZpbmUgSVNQX0RPVVRfU0NMS19NUFdNCQkJCTMKKyNkZWZpbmUgSVNQX0RPVVRfQ0E1X1BDTEtEQkcJCQkJNAorI2RlZmluZSBJU1BfRE9VVF9DQTVfQVRDTEtJTgkJCQk1CisjZGVmaW5lIElTUF9ET1VUX1BDTEtfSVNQXzEzMwkJCQk2CisjZGVmaW5lIElTUF9ET1VUX1BDTEtfSVNQXzY2CQkJCTcKKyNkZWZpbmUgSVNQX0NMS19HSUMJCQkJCTgKKyNkZWZpbmUgSVNQX0NMS19XRFQJCQkJCTkKKyNkZWZpbmUgSVNQX0NMS19VQVJUCQkJCQkxMAorI2RlZmluZSBJU1BfQ0xLX1NQSTEJCQkJCTExCisjZGVmaW5lIElTUF9DTEtfU1BJMAkJCQkJMTIKKyNkZWZpbmUgSVNQX0NMS19TTU1VX1NDQUxFUlAJCQkJMTMKKyNkZWZpbmUgSVNQX0NMS19TTU1VX1NDQUxFUkMJCQkJMTQKKyNkZWZpbmUgSVNQX0NMS19TTU1VX0lTUENYCQkJCTE1CisjZGVmaW5lIElTUF9DTEtfU01NVV9JU1AJCQkJMTYKKyNkZWZpbmUgSVNQX0NMS19TTU1VX0ZECQkJCQkxNworI2RlZmluZSBJU1BfQ0xLX1NNTVVfRFJDCQkJCTE4CisjZGVmaW5lIElTUF9DTEtfUFdNCQkJCQkxOQorI2RlZmluZSBJU1BfQ0xLX01UQ0FEQwkJCQkJMjAKKyNkZWZpbmUgSVNQX0NMS19NUFdNCQkJCQkyMQorI2RlZmluZSBJU1BfQ0xLX01DVUNUTAkJCQkJMjIKKyNkZWZpbmUgSVNQX0NMS19JMkMxCQkJCQkyMworI2RlZmluZSBJU1BfQ0xLX0kyQzAJCQkJCTI0CisjZGVmaW5lIElTUF9DTEtfRklNQ19TQ0FMRVJQCQkJCTI1CisjZGVmaW5lIElTUF9DTEtfRklNQ19TQ0FMRVJDCQkJCTI2CisjZGVmaW5lIElTUF9DTEtfRklNQwkJCQkJMjcKKyNkZWZpbmUgSVNQX0NMS19GSU1DX0ZECQkJCQkyOAorI2RlZmluZSBJU1BfQ0xLX0ZJTUNfRFJDCQkJCTI5CisjZGVmaW5lIElTUF9DTEtfQ0E1CQkJCQkzMAorI2RlZmluZSBJU1BfU0NMS19TUEkwX0VYVAkJCQkzMQorI2RlZmluZSBJU1BfU0NMS19TUEkxX0VYVAkJCQkzMgorI2RlZmluZSBJU1BfU0NMS19VQVJUX0VYVAkJCQkzMworI2RlZmluZSBJU1BfTlJfQ0xLCQkJCQkzNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTQxMC5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M1NDEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxODBmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTQxMC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX0RUX0JJTkRJTkdTX0NMT0NLX0VYWU5PU181NDEwX0gKKyNkZWZpbmUgX0RUX0JJTkRJTkdTX0NMT0NLX0VYWU5PU181NDEwX0gKKworLyogY29yZSBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX0ZJTl9QTEwgMQorI2RlZmluZSBDTEtfRk9VVF9BUExMIDIKKyNkZWZpbmUgQ0xLX0ZPVVRfQ1BMTCAzCisjZGVmaW5lIENMS19GT1VUX01QTEwgNAorI2RlZmluZSBDTEtfRk9VVF9CUExMIDUKKyNkZWZpbmUgQ0xLX0ZPVVRfS1BMTCA2CisKKy8qIGdhdGUgZm9yIHNwZWNpYWwgY2xvY2tzIChzY2xrKSAqLworI2RlZmluZSBDTEtfU0NMS19VQVJUMCAxMjgKKyNkZWZpbmUgQ0xLX1NDTEtfVUFSVDEgMTI5CisjZGVmaW5lIENMS19TQ0xLX1VBUlQyIDEzMAorI2RlZmluZSBDTEtfU0NMS19VQVJUMyAxMzEKKyNkZWZpbmUgQ0xLX1NDTEtfTU1DMCAxMzIKKyNkZWZpbmUgQ0xLX1NDTEtfTU1DMSAxMzMKKyNkZWZpbmUgQ0xLX1NDTEtfTU1DMiAxMzQKKworLyogZ2F0ZSBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1VBUlQwIDI1NworI2RlZmluZSBDTEtfVUFSVDEgMjU4CisjZGVmaW5lIENMS19VQVJUMiAyNTkKKyNkZWZpbmUgQ0xLX1VBUlQzIDI2MAorI2RlZmluZSBDTEtfTUNUIDMxNQorI2RlZmluZSBDTEtfTU1DMCAzNTEKKyNkZWZpbmUgQ0xLX01NQzEgMzUyCisjZGVmaW5lIENMS19NTUMyIDM1MworCisjZGVmaW5lIENMS19OUl9DTEtTIDUxMgorCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX0NMT0NLX0VYWU5PU181NDEwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNTQyMC5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M1NDIwLmgKaW5kZXggNWVlZmQ4OC4uOTdkY2I4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M1NDIwLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9leHlub3M1NDIwLmgKQEAgLTU4LDYgKzU4LDkgQEAKICNkZWZpbmUgQ0xLX1NDTEtfR1NDTF9XQQkxNTYKICNkZWZpbmUgQ0xLX1NDTEtfR1NDTF9XQgkxNTcKICNkZWZpbmUgQ0xLX1NDTEtfSERNSVBIWQkxNTgKKyNkZWZpbmUgQ0xLX01BVV9FUExMCQkxNTkKKyNkZWZpbmUgQ0xLX1NDTEtfSFNJQ18xMk0JMTYwCisjZGVmaW5lIENMS19TQ0xLX01QSFlfSVhUQUwyNAkxNjEKIAogLyogZ2F0ZSBjbG9ja3MgKi8KICNkZWZpbmUgQ0xLX0FDTEs2Nl9QRVJJQwkyNTYKQEAgLTY5LDEwICs3MiwxMCBAQAogI2RlZmluZSBDTEtfSTJDMQkJMjYyCiAjZGVmaW5lIENMS19JMkMyCQkyNjMKICNkZWZpbmUgQ0xLX0kyQzMJCTI2NAotI2RlZmluZSBDTEtfSTJDNAkJMjY1Ci0jZGVmaW5lIENMS19JMkM1CQkyNjYKLSNkZWZpbmUgQ0xLX0kyQzYJCTI2NwotI2RlZmluZSBDTEtfSTJDNwkJMjY4CisjZGVmaW5lIENMS19VU0kwCQkyNjUKKyNkZWZpbmUgQ0xLX1VTSTEJCTI2NgorI2RlZmluZSBDTEtfVVNJMgkJMjY3CisjZGVmaW5lIENMS19VU0kzCQkyNjgKICNkZWZpbmUgQ0xLX0kyQ19IRE1JCQkyNjkKICNkZWZpbmUgQ0xLX1RTQURDCQkyNzAKICNkZWZpbmUgQ0xLX1NQSTAJCTI3MQpAQCAtODUsOSArODgsOSBAQAogI2RlZmluZSBDTEtfUENNMgkJMjc4CiAjZGVmaW5lIENMS19QV00JCQkyNzkKICNkZWZpbmUgQ0xLX1NQRElGCQkyODAKLSNkZWZpbmUgQ0xLX0kyQzgJCTI4MQotI2RlZmluZSBDTEtfSTJDOQkJMjgyCi0jZGVmaW5lIENMS19JMkMxMAkJMjgzCisjZGVmaW5lIENMS19VU0k0CQkyODEKKyNkZWZpbmUgQ0xLX1VTSTUJCTI4MgorI2RlZmluZSBDTEtfVVNJNgkJMjgzCiAjZGVmaW5lIENMS19BQ0xLNjZfUFNHRU4JMzAwCiAjZGVmaW5lIENMS19DSElQSUQJCTMwMQogI2RlZmluZSBDTEtfU1lTUkVHCQkzMDIKQEAgLTE0MCw3ICsxNDMsOCBAQAogI2RlZmluZSBDTEtfSERNSQkJNDEzCiAjZGVmaW5lIENMS19BQ0xLMzAwX0RJU1AxCTQyMAogI2RlZmluZSBDTEtfRklNRDEJCTQyMQotI2RlZmluZSBDTEtfU01NVV9GSU1EMQkJNDIyCisjZGVmaW5lIENMS19TTU1VX0ZJTUQxTTAJNDIyCisjZGVmaW5lIENMS19TTU1VX0ZJTUQxTTEJNDIzCiAjZGVmaW5lIENMS19BQ0xLMTY2CQk0MzAKICNkZWZpbmUgQ0xLX01JWEVSCQk0MzEKICNkZWZpbmUgQ0xLX0FDTEsyNjYJCTQ0MApAQCAtMTUyLDYgKzE1Niw3IEBACiAjZGVmaW5lIENMS19KUEVHCQk0NTEKICNkZWZpbmUgQ0xLX0pQRUcyCQk0NTIKICNkZWZpbmUgQ0xLX1NNTVVfSlBFRwkJNDUzCisjZGVmaW5lIENMS19TTU1VX0pQRUcyCQk0NTQKICNkZWZpbmUgQ0xLX0FDTEszMDBfR1NDTAk0NjAKICNkZWZpbmUgQ0xLX1NNTVVfR1NDTDAJCTQ2MQogI2RlZmluZSBDTEtfU01NVV9HU0NMMQkJNDYyCkBAIC0xNTksNyArMTY0LDcgQEAKICNkZWZpbmUgQ0xLX0dTQ0xfV0IJCTQ2NAogI2RlZmluZSBDTEtfR1NDTDAJCTQ2NQogI2RlZmluZSBDTEtfR1NDTDEJCTQ2NgotI2RlZmluZSBDTEtfQ0xLXzNBQQkJNDY3CisjZGVmaW5lIENMS19GSU1DXzNBQQkJNDY3CiAjZGVmaW5lIENMS19BQ0xLMjY2X0cyRAkJNDcwCiAjZGVmaW5lIENMS19TU1MJCQk0NzEKICNkZWZpbmUgQ0xLX1NMSU1fU1NTCQk0NzIKQEAgLTE3MiwxMiArMTc3LDMyIEBACiAjZGVmaW5lIENMS19TTU1VX0ZJTUNMMQkJNDkzCiAjZGVmaW5lIENMS19TTU1VX0ZJTUNMMwkJNDk0CiAjZGVmaW5lIENMS19GSU1DX0xJVEUzCQk0OTUKKyNkZWZpbmUgQ0xLX0ZJTUNfTElURTAJCTQ5NgorI2RlZmluZSBDTEtfRklNQ19MSVRFMQkJNDk3CiAjZGVmaW5lIENMS19BQ0xLX0czRAkJNTAwCiAjZGVmaW5lIENMS19HM0QJCQk1MDEKICNkZWZpbmUgQ0xLX1NNTVVfTUlYRVIJCTUwMgorI2RlZmluZSBDTEtfU01NVV9HMkQJCTUwMworI2RlZmluZSBDTEtfU01NVV9NRE1BMAkJNTA0CisjZGVmaW5lIENMS19NQwkJCTUwNQorI2RlZmluZSBDTEtfVE9QX1JUQwkJNTA2CisjZGVmaW5lIENMS19TQ0xLX1VBUlRfSVNQCTUxMAorI2RlZmluZSBDTEtfU0NMS19TUEkwX0lTUAk1MTEKKyNkZWZpbmUgQ0xLX1NDTEtfU1BJMV9JU1AJNTEyCisjZGVmaW5lIENMS19TQ0xLX1BXTV9JU1AJNTEzCisjZGVmaW5lIENMS19TQ0xLX0lTUF9TRU5TT1IwCTUxNAorI2RlZmluZSBDTEtfU0NMS19JU1BfU0VOU09SMQk1MTUKKyNkZWZpbmUgQ0xLX1NDTEtfSVNQX1NFTlNPUjIJNTE2CisjZGVmaW5lIENMS19BQ0xLNDMyX1NDQUxFUgk1MTcKKyNkZWZpbmUgQ0xLX0FDTEs0MzJfQ0FNCQk1MTgKKyNkZWZpbmUgQ0xLX0FDTEtfRkwxNTUwX0NBTQk1MTkKKyNkZWZpbmUgQ0xLX0FDTEs1NTBfQ0FNCQk1MjAKIAogLyogbXV4IGNsb2NrcyAqLwogI2RlZmluZSBDTEtfTU9VVF9IRE1JCQk2NDAKKyNkZWZpbmUgQ0xLX01PVVRfRzNECQk2NDEKKyNkZWZpbmUgQ0xLX01PVVRfVlBMTAkJNjQyCisjZGVmaW5lIENMS19NT1VUX01BVURJTzAJNjQzCiAKIC8qIGRpdmlkZXIgY2xvY2tzICovCiAjZGVmaW5lIENMS19ET1VUX1BJWEVMCQk3NjgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NnN4LWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2lteDZzeC1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMWQ4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2lteDZzeC1jbG9jay5oCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0RUX0JJTkRJTkdTX0NMT0NLX0lNWDZTWF9ICisjZGVmaW5lIF9fRFRfQklORElOR1NfQ0xPQ0tfSU1YNlNYX0gKKworI2RlZmluZSBJTVg2U1hfQ0xLX0RVTU1ZCQkwCisjZGVmaW5lIElNWDZTWF9DTEtfQ0tJTAkJCTEKKyNkZWZpbmUgSU1YNlNYX0NMS19DS0lICQkJMgorI2RlZmluZSBJTVg2U1hfQ0xLX09TQwkJCTMKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEwxX1NZUwkJNAorI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDJfQlVTCQk1CisjZGVmaW5lIElNWDZTWF9DTEtfUExMM19VU0JfT1RHCQk2CisjZGVmaW5lIElNWDZTWF9DTEtfUExMNF9BVURJTwkJNworI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDVfVklERU8JCTgKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEw2X0VORVQJCTkKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEw3X1VTQl9IT1NUCTEwCisjZGVmaW5lIElNWDZTWF9DTEtfVVNCUEhZMQkJMTEKKyNkZWZpbmUgSU1YNlNYX0NMS19VU0JQSFkyCQkxMgorI2RlZmluZSBJTVg2U1hfQ0xLX1VTQlBIWTFfR0FURQkJMTMKKyNkZWZpbmUgSU1YNlNYX0NMS19VU0JQSFkyX0dBVEUJCTE0CisjZGVmaW5lIElNWDZTWF9DTEtfUENJRV9SRUYJCTE1CisjZGVmaW5lIElNWDZTWF9DTEtfUENJRV9SRUZfMTI1TQkxNgorI2RlZmluZSBJTVg2U1hfQ0xLX0VORVRfUkVGCQkxNworI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDJfUEZEMAkJMTgKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEwyX1BGRDEJCTE5CisjZGVmaW5lIElNWDZTWF9DTEtfUExMMl9QRkQyCQkyMAorI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDJfUEZEMwkJMjEKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEwzX1BGRDAJCTIyCisjZGVmaW5lIElNWDZTWF9DTEtfUExMM19QRkQxCQkyMworI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDNfUEZEMgkJMjQKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEwzX1BGRDMJCTI1CisjZGVmaW5lIElNWDZTWF9DTEtfUExMMl8xOThNCQkyNgorI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDNfMTIwTQkJMjcKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEwzXzgwTQkJMjgKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEwzXzYwTQkJMjkKKyNkZWZpbmUgSU1YNlNYX0NMS19UV0QJCQkzMAorI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDRfUE9TVF9ESVYJMzEKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEw0X0FVRElPX0RJVgkzMgorI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDVfUE9TVF9ESVYJMzMKKyNkZWZpbmUgSU1YNlNYX0NMS19QTEw1X1ZJREVPX0RJVgkzNAorI2RlZmluZSBJTVg2U1hfQ0xLX1NURVAJCQkzNQorI2RlZmluZSBJTVg2U1hfQ0xLX1BMTDFfU1cJCTM2CisjZGVmaW5lIElNWDZTWF9DTEtfT0NSQU1fU0VMCQkzNworI2RlZmluZSBJTVg2U1hfQ0xLX1BFUklQSF9QUkUJCTM4CisjZGVmaW5lIElNWDZTWF9DTEtfUEVSSVBIMl9QUkUJCTM5CisjZGVmaW5lIElNWDZTWF9DTEtfUEVSSVBIX0NMSzJfU0VMCTQwCisjZGVmaW5lIElNWDZTWF9DTEtfUEVSSVBIMl9DTEsyX1NFTAk0MQorI2RlZmluZSBJTVg2U1hfQ0xLX1BDSUVfQVhJX1NFTAkJNDIKKyNkZWZpbmUgSU1YNlNYX0NMS19HUFVfQVhJX1NFTAkJNDMKKyNkZWZpbmUgSU1YNlNYX0NMS19HUFVfQ09SRV9TRUwJCTQ0CisjZGVmaW5lIElNWDZTWF9DTEtfRUlNX1NMT1dfU0VMCQk0NQorI2RlZmluZSBJTVg2U1hfQ0xLX1VTREhDMV9TRUwJCTQ2CisjZGVmaW5lIElNWDZTWF9DTEtfVVNESEMyX1NFTAkJNDcKKyNkZWZpbmUgSU1YNlNYX0NMS19VU0RIQzNfU0VMCQk0OAorI2RlZmluZSBJTVg2U1hfQ0xLX1VTREhDNF9TRUwJCTQ5CisjZGVmaW5lIElNWDZTWF9DTEtfU1NJMV9TRUwJCTUwCisjZGVmaW5lIElNWDZTWF9DTEtfU1NJMl9TRUwJCTUxCisjZGVmaW5lIElNWDZTWF9DTEtfU1NJM19TRUwJCTUyCisjZGVmaW5lIElNWDZTWF9DTEtfUVNQSTFfU0VMCQk1MworI2RlZmluZSBJTVg2U1hfQ0xLX1BFUkNMS19TRUwJCTU0CisjZGVmaW5lIElNWDZTWF9DTEtfVklEX1NFTAkJNTUKKyNkZWZpbmUgSU1YNlNYX0NMS19FU0FJX1NFTAkJNTYKKyNkZWZpbmUgSU1YNlNYX0NMS19MREJfREkwX0RJVl9TRUwJNTcKKyNkZWZpbmUgSU1YNlNYX0NMS19MREJfREkxX0RJVl9TRUwJNTgKKyNkZWZpbmUgSU1YNlNYX0NMS19DQU5fU0VMCQk1OQorI2RlZmluZSBJTVg2U1hfQ0xLX1VBUlRfU0VMCQk2MAorI2RlZmluZSBJTVg2U1hfQ0xLX1FTUEkyX1NFTAkJNjEKKyNkZWZpbmUgSU1YNlNYX0NMS19MREJfREkxX1NFTAkJNjIKKyNkZWZpbmUgSU1YNlNYX0NMS19MREJfREkwX1NFTAkJNjMKKyNkZWZpbmUgSU1YNlNYX0NMS19TUERJRl9TRUwJCTY0CisjZGVmaW5lIElNWDZTWF9DTEtfQVVESU9fU0VMCQk2NQorI2RlZmluZSBJTVg2U1hfQ0xLX0VORVRfUFJFX1NFTAkJNjYKKyNkZWZpbmUgSU1YNlNYX0NMS19FTkVUX1NFTAkJNjcKKyNkZWZpbmUgSU1YNlNYX0NMS19NNF9QUkVfU0VMCQk2OAorI2RlZmluZSBJTVg2U1hfQ0xLX000X1NFTAkJNjkKKyNkZWZpbmUgSU1YNlNYX0NMS19FQ1NQSV9TRUwJCTcwCisjZGVmaW5lIElNWDZTWF9DTEtfTENESUYxX1BSRV9TRUwJNzEKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRjJfUFJFX1NFTAk3MgorI2RlZmluZSBJTVg2U1hfQ0xLX0xDRElGMV9TRUwJCTczCisjZGVmaW5lIElNWDZTWF9DTEtfTENESUYyX1NFTAkJNzQKKyNkZWZpbmUgSU1YNlNYX0NMS19ESVNQTEFZX1NFTAkJNzUKKyNkZWZpbmUgSU1YNlNYX0NMS19DU0lfU0VMCQk3NgorI2RlZmluZSBJTVg2U1hfQ0xLX0NLTzFfU0VMCQk3NworI2RlZmluZSBJTVg2U1hfQ0xLX0NLTzJfU0VMCQk3OAorI2RlZmluZSBJTVg2U1hfQ0xLX0NLTwkJCTc5CisjZGVmaW5lIElNWDZTWF9DTEtfUEVSSVBIX0NMSzIJCTgwCisjZGVmaW5lIElNWDZTWF9DTEtfUEVSSVBIMl9DTEsyCQk4MQorI2RlZmluZSBJTVg2U1hfQ0xLX0lQRwkJCTgyCisjZGVmaW5lIElNWDZTWF9DTEtfR1BVX0NPUkVfUE9ERgk4MworI2RlZmluZSBJTVg2U1hfQ0xLX0dQVV9BWElfUE9ERgkJODQKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRjFfUE9ERgkJODUKKyNkZWZpbmUgSU1YNlNYX0NMS19RU1BJMV9QT0RGCQk4NgorI2RlZmluZSBJTVg2U1hfQ0xLX0VJTV9TTE9XX1BPREYJODcKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRjJfUE9ERgkJODgKKyNkZWZpbmUgSU1YNlNYX0NMS19QRVJDTEsJCTg5CisjZGVmaW5lIElNWDZTWF9DTEtfVklEX1BPREYJCTkwCisjZGVmaW5lIElNWDZTWF9DTEtfQ0FOX1BPREYJCTkxCisjZGVmaW5lIElNWDZTWF9DTEtfVVNESEMxX1BPREYJCTkyCisjZGVmaW5lIElNWDZTWF9DTEtfVVNESEMyX1BPREYJCTkzCisjZGVmaW5lIElNWDZTWF9DTEtfVVNESEMzX1BPREYJCTk0CisjZGVmaW5lIElNWDZTWF9DTEtfVVNESEM0X1BPREYJCTk1CisjZGVmaW5lIElNWDZTWF9DTEtfVUFSVF9QT0RGCQk5NgorI2RlZmluZSBJTVg2U1hfQ0xLX0VTQUlfUFJFRAkJOTcKKyNkZWZpbmUgSU1YNlNYX0NMS19FU0FJX1BPREYJCTk4CisjZGVmaW5lIElNWDZTWF9DTEtfU1NJM19QUkVECQk5OQorI2RlZmluZSBJTVg2U1hfQ0xLX1NTSTNfUE9ERgkJMTAwCisjZGVmaW5lIElNWDZTWF9DTEtfU1NJMV9QUkVECQkxMDEKKyNkZWZpbmUgSU1YNlNYX0NMS19TU0kxX1BPREYJCTEwMgorI2RlZmluZSBJTVg2U1hfQ0xLX1FTUEkyX1BSRUQJCTEwMworI2RlZmluZSBJTVg2U1hfQ0xLX1FTUEkyX1BPREYJCTEwNAorI2RlZmluZSBJTVg2U1hfQ0xLX1NTSTJfUFJFRAkJMTA1CisjZGVmaW5lIElNWDZTWF9DTEtfU1NJMl9QT0RGCQkxMDYKKyNkZWZpbmUgSU1YNlNYX0NMS19TUERJRl9QUkVECQkxMDcKKyNkZWZpbmUgSU1YNlNYX0NMS19TUERJRl9QT0RGCQkxMDgKKyNkZWZpbmUgSU1YNlNYX0NMS19BVURJT19QUkVECQkxMDkKKyNkZWZpbmUgSU1YNlNYX0NMS19BVURJT19QT0RGCQkxMTAKKyNkZWZpbmUgSU1YNlNYX0NMS19FTkVUX1BPREYJCTExMQorI2RlZmluZSBJTVg2U1hfQ0xLX000X1BPREYJCTExMgorI2RlZmluZSBJTVg2U1hfQ0xLX0VDU1BJX1BPREYJCTExMworI2RlZmluZSBJTVg2U1hfQ0xLX0xDRElGMV9QUkVECQkxMTQKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRjJfUFJFRAkJMTE1CisjZGVmaW5lIElNWDZTWF9DTEtfRElTUExBWV9QT0RGCQkxMTYKKyNkZWZpbmUgSU1YNlNYX0NMS19DU0lfUE9ERgkJMTE3CisjZGVmaW5lIElNWDZTWF9DTEtfTERCX0RJMF9ESVZfM181CTExOAorI2RlZmluZSBJTVg2U1hfQ0xLX0xEQl9ESTBfRElWXzcJMTE5CisjZGVmaW5lIElNWDZTWF9DTEtfTERCX0RJMV9ESVZfM181CTEyMAorI2RlZmluZSBJTVg2U1hfQ0xLX0xEQl9ESTFfRElWXzcJMTIxCisjZGVmaW5lIElNWDZTWF9DTEtfQ0tPMV9QT0RGCQkxMjIKKyNkZWZpbmUgSU1YNlNYX0NMS19DS08yX1BPREYJCTEyMworI2RlZmluZSBJTVg2U1hfQ0xLX1BFUklQSAkJMTI0CisjZGVmaW5lIElNWDZTWF9DTEtfUEVSSVBIMgkJMTI1CisjZGVmaW5lIElNWDZTWF9DTEtfT0NSQU0JCTEyNgorI2RlZmluZSBJTVg2U1hfQ0xLX0FIQgkJCTEyNworI2RlZmluZSBJTVg2U1hfQ0xLX01NRENfUE9ERgkJMTI4CisjZGVmaW5lIElNWDZTWF9DTEtfQVJNCQkJMTI5CisjZGVmaW5lIElNWDZTWF9DTEtfQUlQU19UWjEJCTEzMAorI2RlZmluZSBJTVg2U1hfQ0xLX0FJUFNfVFoyCQkxMzEKKyNkZWZpbmUgSU1YNlNYX0NMS19BUEJIX0RNQQkJMTMyCisjZGVmaW5lIElNWDZTWF9DTEtfQVNSQ19HQVRFCQkxMzMKKyNkZWZpbmUgSU1YNlNYX0NMS19DQUFNX01FTQkJMTM0CisjZGVmaW5lIElNWDZTWF9DTEtfQ0FBTV9BQ0xLCQkxMzUKKyNkZWZpbmUgSU1YNlNYX0NMS19DQUFNX0lQRwkJMTM2CisjZGVmaW5lIElNWDZTWF9DTEtfQ0FOMV9JUEcJCTEzNworI2RlZmluZSBJTVg2U1hfQ0xLX0NBTjFfU0VSSUFMCQkxMzgKKyNkZWZpbmUgSU1YNlNYX0NMS19DQU4yX0lQRwkJMTM5CisjZGVmaW5lIElNWDZTWF9DTEtfQ0FOMl9TRVJJQUwJCTE0MAorI2RlZmluZSBJTVg2U1hfQ0xLX0NQVV9ERUJVRwkJMTQxCisjZGVmaW5lIElNWDZTWF9DTEtfRENJQzEJCTE0MgorI2RlZmluZSBJTVg2U1hfQ0xLX0RDSUMyCQkxNDMKKyNkZWZpbmUgSU1YNlNYX0NMS19BSVBTX1RaMwkJMTQ0CisjZGVmaW5lIElNWDZTWF9DTEtfRUNTUEkxCQkxNDUKKyNkZWZpbmUgSU1YNlNYX0NMS19FQ1NQSTIJCTE0NgorI2RlZmluZSBJTVg2U1hfQ0xLX0VDU1BJMwkJMTQ3CisjZGVmaW5lIElNWDZTWF9DTEtfRUNTUEk0CQkxNDgKKyNkZWZpbmUgSU1YNlNYX0NMS19FQ1NQSTUJCTE0OQorI2RlZmluZSBJTVg2U1hfQ0xLX0VQSVQxCQkxNTAKKyNkZWZpbmUgSU1YNlNYX0NMS19FUElUMgkJMTUxCisjZGVmaW5lIElNWDZTWF9DTEtfRVNBSV9FWFRBTAkJMTUyCisjZGVmaW5lIElNWDZTWF9DTEtfV0FLRVVQCQkxNTMKKyNkZWZpbmUgSU1YNlNYX0NMS19HUFRfQlVTCQkxNTQKKyNkZWZpbmUgSU1YNlNYX0NMS19HUFRfU0VSSUFMCQkxNTUKKyNkZWZpbmUgSU1YNlNYX0NMS19HUFUJCQkxNTYKKyNkZWZpbmUgSU1YNlNYX0NMS19PQ1JBTV9TCQkxNTcKKyNkZWZpbmUgSU1YNlNYX0NMS19DQU5GRAkJMTU4CisjZGVmaW5lIElNWDZTWF9DTEtfQ1NJCQkJMTU5CisjZGVmaW5lIElNWDZTWF9DTEtfSTJDMQkJCTE2MAorI2RlZmluZSBJTVg2U1hfQ0xLX0kyQzIJCQkxNjEKKyNkZWZpbmUgSU1YNlNYX0NMS19JMkMzCQkJMTYyCisjZGVmaW5lIElNWDZTWF9DTEtfT0NPVFAJCTE2MworI2RlZmluZSBJTVg2U1hfQ0xLX0lPTVVYQwkJMTY0CisjZGVmaW5lIElNWDZTWF9DTEtfSVBNVVgxCQkxNjUKKyNkZWZpbmUgSU1YNlNYX0NMS19JUE1VWDIJCTE2NgorI2RlZmluZSBJTVg2U1hfQ0xLX0lQTVVYMwkJMTY3CisjZGVmaW5lIElNWDZTWF9DTEtfVFpBU0MxCQkxNjgKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRl9BUEIJCTE2OQorI2RlZmluZSBJTVg2U1hfQ0xLX1BYUF9BWEkJCTE3MAorI2RlZmluZSBJTVg2U1hfQ0xLX000CQkJMTcxCisjZGVmaW5lIElNWDZTWF9DTEtfRU5FVAkJCTE3MgorI2RlZmluZSBJTVg2U1hfQ0xLX0RJU1BMQVlfQVhJCQkxNzMKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRjJfUElYCQkxNzQKKyNkZWZpbmUgSU1YNlNYX0NMS19MQ0RJRjFfUElYCQkxNzUKKyNkZWZpbmUgSU1YNlNYX0NMS19MREJfREkwCQkxNzYKKyNkZWZpbmUgSU1YNlNYX0NMS19RU1BJMQkJMTc3CisjZGVmaW5lIElNWDZTWF9DTEtfTUxCCQkJMTc4CisjZGVmaW5lIElNWDZTWF9DTEtfTU1EQ19QMF9GQVNUCQkxNzkKKyNkZWZpbmUgSU1YNlNYX0NMS19NTURDX1AwX0lQRwkJMTgwCisjZGVmaW5lIElNWDZTWF9DTEtfQVhJCQkJMTgxCisjZGVmaW5lIElNWDZTWF9DTEtfUENJRV9BWEkJCTE4MgorI2RlZmluZSBJTVg2U1hfQ0xLX1FTUEkyCQkxODMKKyNkZWZpbmUgSU1YNlNYX0NMS19QRVIxX0JDSAkJMTg0CisjZGVmaW5lIElNWDZTWF9DTEtfUEVSMl9NQUlOCQkxODUKKyNkZWZpbmUgSU1YNlNYX0NMS19QV00xCQkJMTg2CisjZGVmaW5lIElNWDZTWF9DTEtfUFdNMgkJCTE4NworI2RlZmluZSBJTVg2U1hfQ0xLX1BXTTMJCQkxODgKKyNkZWZpbmUgSU1YNlNYX0NMS19QV000CQkJMTg5CisjZGVmaW5lIElNWDZTWF9DTEtfR1BNSV9CQ0hfQVBCCQkxOTAKKyNkZWZpbmUgSU1YNlNYX0NMS19HUE1JX0JDSAkJMTkxCisjZGVmaW5lIElNWDZTWF9DTEtfR1BNSV9JTwkJMTkyCisjZGVmaW5lIElNWDZTWF9DTEtfR1BNSV9BUEIJCTE5MworI2RlZmluZSBJTVg2U1hfQ0xLX1JPTQkJCTE5NAorI2RlZmluZSBJTVg2U1hfQ0xLX1NETUEJCQkxOTUKKyNkZWZpbmUgSU1YNlNYX0NMS19TUEJBCQkJMTk2CisjZGVmaW5lIElNWDZTWF9DTEtfU1BESUYJCTE5NworI2RlZmluZSBJTVg2U1hfQ0xLX1NTSTFfSVBHCQkxOTgKKyNkZWZpbmUgSU1YNlNYX0NMS19TU0kyX0lQRwkJMTk5CisjZGVmaW5lIElNWDZTWF9DTEtfU1NJM19JUEcJCTIwMAorI2RlZmluZSBJTVg2U1hfQ0xLX1NTSTEJCQkyMDEKKyNkZWZpbmUgSU1YNlNYX0NMS19TU0kyCQkJMjAyCisjZGVmaW5lIElNWDZTWF9DTEtfU1NJMwkJCTIwMworI2RlZmluZSBJTVg2U1hfQ0xLX1VBUlRfSVBHCQkyMDQKKyNkZWZpbmUgSU1YNlNYX0NMS19VQVJUX1NFUklBTAkJMjA1CisjZGVmaW5lIElNWDZTWF9DTEtfU0FJMQkJCTIwNgorI2RlZmluZSBJTVg2U1hfQ0xLX1NBSTIJCQkyMDcKKyNkZWZpbmUgSU1YNlNYX0NMS19VU0JPSDMJCTIwOAorI2RlZmluZSBJTVg2U1hfQ0xLX1VTREhDMQkJMjA5CisjZGVmaW5lIElNWDZTWF9DTEtfVVNESEMyCQkyMTAKKyNkZWZpbmUgSU1YNlNYX0NMS19VU0RIQzMJCTIxMQorI2RlZmluZSBJTVg2U1hfQ0xLX1VTREhDNAkJMjEyCisjZGVmaW5lIElNWDZTWF9DTEtfRUlNX1NMT1cJCTIxMworI2RlZmluZSBJTVg2U1hfQ0xLX1BXTTgJCQkyMTQKKyNkZWZpbmUgSU1YNlNYX0NMS19WQURDCQkJMjE1CisjZGVmaW5lIElNWDZTWF9DTEtfR0lTCQkJMjE2CisjZGVmaW5lIElNWDZTWF9DTEtfSTJDNAkJCTIxNworI2RlZmluZSBJTVg2U1hfQ0xLX1BXTTUJCQkyMTgKKyNkZWZpbmUgSU1YNlNYX0NMS19QV002CQkJMjE5CisjZGVmaW5lIElNWDZTWF9DTEtfUFdNNwkJCTIyMAorI2RlZmluZSBJTVg2U1hfQ0xLX0NLTzEJCQkyMjEKKyNkZWZpbmUgSU1YNlNYX0NMS19DS08yCQkJMjIyCisjZGVmaW5lIElNWDZTWF9DTEtfSVBQX0RJMAkJMjIzCisjZGVmaW5lIElNWDZTWF9DTEtfSVBQX0RJMQkJMjI0CisjZGVmaW5lIElNWDZTWF9DTEtfRU5FVF9BSEIJCTIyNQorI2RlZmluZSBJTVg2U1hfQ0xLX09DUkFNX1BPREYJCTIyNgorI2RlZmluZSBJTVg2U1hfQ0xLX0dQVF8zTQkJMjI3CisjZGVmaW5lIElNWDZTWF9DTEtfRU5FVF9QVFAJCTIyOAorI2RlZmluZSBJTVg2U1hfQ0xLX0VORVRfUFRQX1JFRgkJMjI5CisjZGVmaW5lIElNWDZTWF9DTEtfRU5FVDJfUkVGCQkyMzAKKyNkZWZpbmUgSU1YNlNYX0NMS19FTkVUMl9SRUZfMTI1TQkyMzEKKyNkZWZpbmUgSU1YNlNYX0NMS19BVURJTwkJMjMyCisjZGVmaW5lIElNWDZTWF9DTEtfTFZEUzFfU0VMCQkyMzMKKyNkZWZpbmUgSU1YNlNYX0NMS19MVkRTMV9PVVQJCTIzNAorI2RlZmluZSBJTVg2U1hfQ0xLX0FTUkNfSVBHCQkyMzUKKyNkZWZpbmUgSU1YNlNYX0NMS19BU1JDX01FTQkJMjM2CisjZGVmaW5lIElNWDZTWF9DTEtfU0FJMV9JUEcJCTIzNworI2RlZmluZSBJTVg2U1hfQ0xLX1NBSTJfSVBHCQkyMzgKKyNkZWZpbmUgSU1YNlNYX0NMS19FU0FJX0lQRwkJMjM5CisjZGVmaW5lIElNWDZTWF9DTEtfRVNBSV9NRU0JCTI0MAorI2RlZmluZSBJTVg2U1hfQ0xLX0NMS19FTkQJCTI0MQorCisjZW5kaWYgLyogX19EVF9CSU5ESU5HU19DTE9DS19JTVg2U1hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9sc2ksYXhtNTUxNi1jbGtzLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2xzaSxheG01NTE2LWNsa3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI0MWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9sc2ksYXhtNTUxNi1jbGtzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBMU0kgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfQVhNNTUxNl9ICisjZGVmaW5lIF9EVF9CSU5ESU5HU19DTEtfQVhNNTUxNl9ICisKKyNkZWZpbmUgQVhYSUFfQ0xLX0ZBQl9QTEwJMAorI2RlZmluZSBBWFhJQV9DTEtfQ1BVX1BMTAkxCisjZGVmaW5lIEFYWElBX0NMS19TWVNfUExMCTIKKyNkZWZpbmUgQVhYSUFfQ0xLX1NNMF9QTEwJMworI2RlZmluZSBBWFhJQV9DTEtfU00xX1BMTAk0CisjZGVmaW5lIEFYWElBX0NMS19GQUJfRElWCTUKKyNkZWZpbmUgQVhYSUFfQ0xLX1NZU19ESVYJNgorI2RlZmluZSBBWFhJQV9DTEtfTlJDUF9ESVYJNworI2RlZmluZSBBWFhJQV9DTEtfQ1BVMF9ESVYJOAorI2RlZmluZSBBWFhJQV9DTEtfQ1BVMV9ESVYJOQorI2RlZmluZSBBWFhJQV9DTEtfQ1BVMl9ESVYJMTAKKyNkZWZpbmUgQVhYSUFfQ0xLX0NQVTNfRElWCTExCisjZGVmaW5lIEFYWElBX0NMS19QRVJfRElWCTEyCisjZGVmaW5lIEFYWElBX0NMS19NTUNfRElWCTEzCisjZGVmaW5lIEFYWElBX0NMS19GQUIJCTE0CisjZGVmaW5lIEFYWElBX0NMS19TWVMJCTE1CisjZGVmaW5lIEFYWElBX0NMS19OUkNQCQkxNgorI2RlZmluZSBBWFhJQV9DTEtfQ1BVMAkJMTcKKyNkZWZpbmUgQVhYSUFfQ0xLX0NQVTEJCTE4CisjZGVmaW5lIEFYWElBX0NMS19DUFUyCQkxOQorI2RlZmluZSBBWFhJQV9DTEtfQ1BVMwkJMjAKKyNkZWZpbmUgQVhYSUFfQ0xLX1BFUgkJMjEKKyNkZWZpbmUgQVhYSUFfQ0xLX01NQwkJMjIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I3czcyMTAwLWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I3czcyMTAwLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyOGY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjdzNzIxMDAtY2xvY2suaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgV29sZnJhbSBTYW5nLCBTYW5nIEVuZ2luZWVyaW5nIDx3c2FAc2FuZy1lbmdpbmVlcmluZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0RUX0JJTkRJTkdTX0NMT0NLX1I3UzcyMTAwX0hfXworI2RlZmluZSBfX0RUX0JJTkRJTkdTX0NMT0NLX1I3UzcyMTAwX0hfXworCisjZGVmaW5lIFI3UzcyMTAwX0NMS19QTEwJMAorCisvKiBNU1RQMyAqLworI2RlZmluZSBSN1M3MjEwMF9DTEtfTVRVMgkzCisKKy8qIE1TVFA0ICovCisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGMAk3CisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGMQk2CisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGMgk1CisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGMwk0CisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGNAkzCisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGNQkyCisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGNgkxCisjZGVmaW5lIFI3UzcyMTAwX0NMS19TQ0lGNwkwCisKKy8qIE1TVFA5ICovCisjZGVmaW5lIFI3UzcyMTAwX0NMS19JMkMwCTcKKyNkZWZpbmUgUjdTNzIxMDBfQ0xLX0kyQzEJNgorI2RlZmluZSBSN1M3MjEwMF9DTEtfSTJDMgk1CisjZGVmaW5lIFI3UzcyMTAwX0NMS19JMkMzCTQKKworLyogTVNUUDEwICovCisjZGVmaW5lIFI3UzcyMTAwX0NMS19TUEkwCTcKKyNkZWZpbmUgUjdTNzIxMDBfQ0xLX1NQSTEJNgorI2RlZmluZSBSN1M3MjEwMF9DTEtfU1BJMgk1CisjZGVmaW5lIFI3UzcyMTAwX0NMS19TUEkzCTQKKyNkZWZpbmUgUjdTNzIxMDBfQ0xLX1NQSTQJMworCisjZW5kaWYgLyogX19EVF9CSU5ESU5HU19DTE9DS19SN1M3MjEwMF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MC1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKaW5kZXggNjU0OGE1Zi4uMTExOGY3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkwLWNsb2NrLmgKQEAgLTMzLDggKzMzLDggQEAKICNkZWZpbmUgUjhBNzc5MF9DTEtfVE1VMAkJMjUKICNkZWZpbmUgUjhBNzc5MF9DTEtfVlNQMV9EVTEJCTI3CiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1ZTUDFfRFUwCQkyOAotI2RlZmluZSBSOEE3NzkwX0NMS19WU1AxX1JUCQkzMAotI2RlZmluZSBSOEE3NzkwX0NMS19WU1AxX1NZCQkzMQorI2RlZmluZSBSOEE3NzkwX0NMS19WU1AxX1IJCTMwCisjZGVmaW5lIFI4QTc3OTBfQ0xLX1ZTUDFfUwkJMzEKIAogLyogTVNUUDIgKi8KICNkZWZpbmUgUjhBNzc5MF9DTEtfU0NJRkEyCQkyCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1NZU19ETUFDMAkJMTkKIAogLyogTVNUUDMgKi8KKyNkZWZpbmUgUjhBNzc5MF9DTEtfSUlDMgkJMAogI2RlZmluZSBSOEE3NzkwX0NMS19UUFUwCQk0CiAjZGVmaW5lIFI4QTc3OTBfQ0xLX01NQ0lGMQkJNQogI2RlZmluZSBSOEE3NzkwX0NMS19TREhJMwkJMTEKQEAgLTU3LDYgKzU4LDggQEAKICNkZWZpbmUgUjhBNzc5MF9DTEtfU0RISTEJCTEzCiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1NESEkwCQkxNAogI2RlZmluZSBSOEE3NzkwX0NMS19NTUNJRjAJCTE1CisjZGVmaW5lIFI4QTc3OTBfQ0xLX0lJQzAJCTE4CisjZGVmaW5lIFI4QTc3OTBfQ0xLX0lJQzEJCTIzCiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1NTVVNCCQkyOAogI2RlZmluZSBSOEE3NzkwX0NMS19DTVQxCQkyOQogI2RlZmluZSBSOEE3NzkwX0NMS19VU0JETUFDMAkJMzAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MS1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmgKaW5kZXggMzBmODJmMi4uYjA1MGQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNkZWZpbmUgUjhBNzc5MV9DTEtfVE1VMAkJMjUKICNkZWZpbmUgUjhBNzc5MV9DTEtfVlNQMV9EVTEJCTI3CiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1ZTUDFfRFUwCQkyOAotI2RlZmluZSBSOEE3NzkxX0NMS19WU1AxX1NZCQkzMQorI2RlZmluZSBSOEE3NzkxX0NMS19WU1AxX1MJCTMxCiAKIC8qIE1TVFAyICovCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1NDSUZBMgkJMgpAQCAtNDMsNyArNDMsOCBAQAogI2RlZmluZSBSOEE3NzkxX0NMS19TQ0lGQjEJCTcKICNkZWZpbmUgUjhBNzc5MV9DTEtfTVNJT0YxCQk4CiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1NDSUZCMgkJMTYKLSNkZWZpbmUgUjhBNzc5MV9DTEtfRE1BQwkJMTgKKyNkZWZpbmUgUjhBNzc5MV9DTEtfU1lTX0RNQUMxCQkxOAorI2RlZmluZSBSOEE3NzkxX0NMS19TWVNfRE1BQzAJCTE5CiAKIC8qIE1TVFAzICovCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1RQVTAJCTQKQEAgLTUxLDYgKzUyLDggQEAKICNkZWZpbmUgUjhBNzc5MV9DTEtfU0RISTEJCTEyCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1NESEkwCQkxNAogI2RlZmluZSBSOEE3NzkxX0NMS19NTUNJRjAJCTE1CisjZGVmaW5lIFI4QTc3OTFfQ0xLX0lJQzAJCTE4CisjZGVmaW5lIFI4QTc3OTFfQ0xLX0lJQzEJCTIzCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1NTVVNCCQkyOAogI2RlZmluZSBSOEE3NzkxX0NMS19DTVQxCQkyOQogI2RlZmluZSBSOEE3NzkxX0NMS19VU0JETUFDMAkJMzAKQEAgLTYxLDYgKzY0LDcgQEAKICNkZWZpbmUgUjhBNzc5MV9DTEtfUFdNCQkJMjMKIAogLyogTVNUUDcgKi8KKyNkZWZpbmUgUjhBNzc5MV9DTEtfRUhDSQkJMwogI2RlZmluZSBSOEE3NzkxX0NMS19IU1VTQgkJNAogI2RlZmluZSBSOEE3NzkxX0NMS19IU0NJRjIJCTEzCiAjZGVmaW5lIFI4QTc3OTFfQ0xLX1NDSUY1CQkxNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zM2MyNDEwLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3MzYzI0MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJhNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zM2MyNDEwLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogRGV2aWNlIFRyZWUgYmluZGluZyBjb25zdGFudHMgY2xvY2sgY29udHJvbGxlcnMgb2YgU2Ftc3VuZyBTM0MyNDEwIGFuZCBsYXRlci4KKyAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTE9DS19TQU1TVU5HX1MzQzI0MTBfQ0xPQ0tfSAorI2RlZmluZSBfRFRfQklORElOR1NfQ0xPQ0tfU0FNU1VOR19TM0MyNDEwX0NMT0NLX0gKKworLyoKKyAqIExldCBlYWNoIGV4cG9ydGVkIGNsb2NrIGdldCBhIHVuaXF1ZSBpbmRleCwgd2hpY2ggaXMgdXNlZCBvbiBEVC1lbmFibGVkCisgKiBwbGF0Zm9ybXMgdG8gbG9va3VwIHRoZSBjbG9jayBmcm9tIGEgY2xvY2sgc3BlY2lmaWVyLiBUaGVzZSBpbmRpY2VzIGFyZQorICogdGhlcmVmb3JlIGNvbnNpZGVyZWQgYW4gQUJJIGFuZCBzbyBtdXN0IG5vdCBiZSBjaGFuZ2VkLiBUaGlzIGltcGxpZXMKKyAqIHRoYXQgbmV3IGNsb2NrcyBzaG91bGQgYmUgYWRkZWQgZWl0aGVyIGluIGZyZWUgc3BhY2VzIGJldHdlZW4gY2xvY2sgZ3JvdXBzCisgKiBvciBhdCB0aGUgZW5kLgorICovCisKKy8qIENvcmUgY2xvY2tzLiAqLworCisvKiBpZCAxIGlzIHJlc2VydmVkICovCisjZGVmaW5lIE1QTEwJCQkyCisjZGVmaW5lIFVQTEwJCQkzCisjZGVmaW5lIEZDTEsJCQk0CisjZGVmaW5lIEhDTEsJCQk1CisjZGVmaW5lIFBDTEsJCQk2CisjZGVmaW5lIFVDTEsJCQk3CisjZGVmaW5lIEFSTUNMSwkJCTgKKworLyogcGNsay1nYXRlcyAqLworI2RlZmluZSBQQ0xLX1VBUlQwCQkxNgorI2RlZmluZSBQQ0xLX1VBUlQxCQkxNworI2RlZmluZSBQQ0xLX1VBUlQyCQkxOAorI2RlZmluZSBQQ0xLX0kyQwkJMTkKKyNkZWZpbmUgUENMS19TREkJCTIwCisjZGVmaW5lIFBDTEtfU1BJCQkyMQorI2RlZmluZSBQQ0xLX0FEQwkJMjIKKyNkZWZpbmUgUENMS19BQzk3CQkyMworI2RlZmluZSBQQ0xLX0kyUwkJMjQKKyNkZWZpbmUgUENMS19QV00JCTI1CisjZGVmaW5lIFBDTEtfUlRDCQkyNgorI2RlZmluZSBQQ0xLX0dQSU8JCTI3CisKKworLyogaGNsay1nYXRlcyAqLworI2RlZmluZSBIQ0xLX0xDRAkJMzIKKyNkZWZpbmUgSENMS19VU0JICQkzMworI2RlZmluZSBIQ0xLX1VTQkQJCTM0CisjZGVmaW5lIEhDTEtfTkFORAkJMzUKKyNkZWZpbmUgSENMS19DQU0JCTM2CisKKworI2RlZmluZSBDQU1JRgkJCTQwCisKKworLyogVG90YWwgbnVtYmVyIG9mIGNsb2Nrcy4gKi8KKyNkZWZpbmUgTlJfQ0xLUwkJCShDQU1JRiArIDEpCisKKyNlbmRpZiAvKiBfRFRfQklORElOR1NfQ0xPQ0tfU0FNU1VOR19TM0MyNDQzX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svczNjMjQxMi5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zM2MyNDEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjMWRjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svczNjMjQxMi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIERldmljZSBUcmVlIGJpbmRpbmcgY29uc3RhbnRzIGNsb2NrIGNvbnRyb2xsZXJzIG9mIFNhbXN1bmcgUzNDMjQxMi4KKyAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTE9DS19TQU1TVU5HX1MzQzI0MTJfQ0xPQ0tfSAorI2RlZmluZSBfRFRfQklORElOR1NfQ0xPQ0tfU0FNU1VOR19TM0MyNDEyX0NMT0NLX0gKKworLyoKKyAqIExldCBlYWNoIGV4cG9ydGVkIGNsb2NrIGdldCBhIHVuaXF1ZSBpbmRleCwgd2hpY2ggaXMgdXNlZCBvbiBEVC1lbmFibGVkCisgKiBwbGF0Zm9ybXMgdG8gbG9va3VwIHRoZSBjbG9jayBmcm9tIGEgY2xvY2sgc3BlY2lmaWVyLiBUaGVzZSBpbmRpY2VzIGFyZQorICogdGhlcmVmb3JlIGNvbnNpZGVyZWQgYW4gQUJJIGFuZCBzbyBtdXN0IG5vdCBiZSBjaGFuZ2VkLiBUaGlzIGltcGxpZXMKKyAqIHRoYXQgbmV3IGNsb2NrcyBzaG91bGQgYmUgYWRkZWQgZWl0aGVyIGluIGZyZWUgc3BhY2VzIGJldHdlZW4gY2xvY2sgZ3JvdXBzCisgKiBvciBhdCB0aGUgZW5kLgorICovCisKKy8qIENvcmUgY2xvY2tzLiAqLworCisvKiBpZCAxIGlzIHJlc2VydmVkICovCisjZGVmaW5lIE1QTEwJCQkyCisjZGVmaW5lIFVQTEwJCQkzCisjZGVmaW5lIE1ESVZDTEsJCQk0CisjZGVmaW5lIE1TWVNDTEsJCQk1CisjZGVmaW5lIFVTWVNDTEsJCQk2CisjZGVmaW5lIEhDTEsJCQk3CisjZGVmaW5lIFBDTEsJCQk4CisjZGVmaW5lIEFSTURJVgkJCTkKKyNkZWZpbmUgQVJNQ0xLCQkJMTAKKworCisvKiBTcGVjaWFsIGNsb2NrcyAqLworI2RlZmluZSBTQ0xLX0NBTQkJMTYKKyNkZWZpbmUgU0NMS19VQVJUCQkxNworI2RlZmluZSBTQ0xLX0kyUwkJMTgKKyNkZWZpbmUgU0NMS19VU0JECQkxOQorI2RlZmluZSBTQ0xLX1VTQkgJCTIwCisKKy8qIHBjbGstZ2F0ZXMgKi8KKyNkZWZpbmUgUENMS19XRFQJCTMyCisjZGVmaW5lIFBDTEtfU1BJCQkzMworI2RlZmluZSBQQ0xLX0kyUwkJMzQKKyNkZWZpbmUgUENMS19JMkMJCTM1CisjZGVmaW5lIFBDTEtfQURDCQkzNgorI2RlZmluZSBQQ0xLX1JUQwkJMzcKKyNkZWZpbmUgUENMS19HUElPCQkzOAorI2RlZmluZSBQQ0xLX1VBUlQyCQkzOQorI2RlZmluZSBQQ0xLX1VBUlQxCQk0MAorI2RlZmluZSBQQ0xLX1VBUlQwCQk0MQorI2RlZmluZSBQQ0xLX1NESQkJNDIKKyNkZWZpbmUgUENMS19QV00JCTQzCisjZGVmaW5lIFBDTEtfVVNCRAkJNDQKKworLyogaGNsay1nYXRlcyAqLworI2RlZmluZSBIQ0xLX0hBTEYJCTQ4CisjZGVmaW5lIEhDTEtfWDIJCQk0OQorI2RlZmluZSBIQ0xLX1NEUkFNCQk1MAorI2RlZmluZSBIQ0xLX1VTQkgJCTUxCisjZGVmaW5lIEhDTEtfTENECQk1MgorI2RlZmluZSBIQ0xLX05BTkQJCTUzCisjZGVmaW5lIEhDTEtfRE1BMwkJNTQKKyNkZWZpbmUgSENMS19ETUEyCQk1NQorI2RlZmluZSBIQ0xLX0RNQTEJCTU2CisjZGVmaW5lIEhDTEtfRE1BMAkJNTcKKworLyogVG90YWwgbnVtYmVyIG9mIGNsb2Nrcy4gKi8KKyNkZWZpbmUgTlJfQ0xLUwkJCShIQ0xLX0RNQTAgKyAxKQorCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX0NMT0NLX1NBTVNVTkdfUzNDMjQxMl9DTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3MzYzI0NDMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svczNjMjQ0My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTY2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3MzYzI0NDMuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEZXZpY2UgVHJlZSBiaW5kaW5nIGNvbnN0YW50cyBjbG9jayBjb250cm9sbGVycyBvZiBTYW1zdW5nIFMzQzI0NDMgYW5kIGxhdGVyLgorICovCisKKyNpZm5kZWYgX0RUX0JJTkRJTkdTX0NMT0NLX1NBTVNVTkdfUzNDMjQ0M19DTE9DS19ICisjZGVmaW5lIF9EVF9CSU5ESU5HU19DTE9DS19TQU1TVU5HX1MzQzI0NDNfQ0xPQ0tfSAorCisvKgorICogTGV0IGVhY2ggZXhwb3J0ZWQgY2xvY2sgZ2V0IGEgdW5pcXVlIGluZGV4LCB3aGljaCBpcyB1c2VkIG9uIERULWVuYWJsZWQKKyAqIHBsYXRmb3JtcyB0byBsb29rdXAgdGhlIGNsb2NrIGZyb20gYSBjbG9jayBzcGVjaWZpZXIuIFRoZXNlIGluZGljZXMgYXJlCisgKiB0aGVyZWZvcmUgY29uc2lkZXJlZCBhbiBBQkkgYW5kIHNvIG11c3Qgbm90IGJlIGNoYW5nZWQuIFRoaXMgaW1wbGllcworICogdGhhdCBuZXcgY2xvY2tzIHNob3VsZCBiZSBhZGRlZCBlaXRoZXIgaW4gZnJlZSBzcGFjZXMgYmV0d2VlbiBjbG9jayBncm91cHMKKyAqIG9yIGF0IHRoZSBlbmQuCisgKi8KKworLyogQ29yZSBjbG9ja3MuICovCisjZGVmaW5lIE1TWVNDTEsJCQkxCisjZGVmaW5lIEVTWVNDTEsJCQkyCisjZGVmaW5lIEFSTURJVgkJCTMKKyNkZWZpbmUgQVJNQ0xLCQkJNAorI2RlZmluZSBIQ0xLCQkJNQorI2RlZmluZSBQQ0xLCQkJNgorCisvKiBTcGVjaWFsIGNsb2NrcyAqLworI2RlZmluZSBTQ0xLX0hTU1BJMAkJMTYKKyNkZWZpbmUgU0NMS19GSU1ECQkxNworI2RlZmluZSBTQ0xLX0kyUzAJCTE4CisjZGVmaW5lIFNDTEtfSTJTMQkJMTkKKyNkZWZpbmUgU0NMS19IU01NQzEJCTIwCisjZGVmaW5lIFNDTEtfSFNNTUNfRVhUCQkyMQorI2RlZmluZSBTQ0xLX0NBTQkJMjIKKyNkZWZpbmUgU0NMS19VQVJUCQkyMworI2RlZmluZSBTQ0xLX1VTQkgJCTI0CisKKy8qIE11eGVzICovCisjZGVmaW5lIE1VWF9IU1NQSTAJCTMyCisjZGVmaW5lIE1VWF9IU1NQSTEJCTMzCisjZGVmaW5lIE1VWF9IU01NQzAJCTM0CisjZGVmaW5lIE1VWF9IU01NQzEJCTM1CisKKy8qIGhjbGstZ2F0ZXMgKi8KKyNkZWZpbmUgSENMS19ETUEwCQk0OAorI2RlZmluZSBIQ0xLX0RNQTEJCTQ5CisjZGVmaW5lIEhDTEtfRE1BMgkJNTAKKyNkZWZpbmUgSENMS19ETUEzCQk1MQorI2RlZmluZSBIQ0xLX0RNQTQJCTUyCisjZGVmaW5lIEhDTEtfRE1BNQkJNTMKKyNkZWZpbmUgSENMS19ETUE2CQk1NAorI2RlZmluZSBIQ0xLX0RNQTcJCTU1CisjZGVmaW5lIEhDTEtfQ0FNCQk1NgorI2RlZmluZSBIQ0xLX0xDRAkJNTcKKyNkZWZpbmUgSENMS19VU0JICQk1OAorI2RlZmluZSBIQ0xLX1VTQkQJCTU5CisjZGVmaW5lIEhDTEtfSVJPTQkJNjAKKyNkZWZpbmUgSENMS19IU01NQzAJCTYxCisjZGVmaW5lIEhDTEtfSFNNTUMxCQk2MgorI2RlZmluZSBIQ0xLX0NGQwkJNjMKKyNkZWZpbmUgSENMS19TU01DCQk2NAorI2RlZmluZSBIQ0xLX0RSQU0JCTY1CisjZGVmaW5lIEhDTEtfMkQJCQk2NgorCisvKiBwY2xrLWdhdGVzICovCisjZGVmaW5lIFBDTEtfVUFSVDAJCTcyCisjZGVmaW5lIFBDTEtfVUFSVDEJCTczCisjZGVmaW5lIFBDTEtfVUFSVDIJCTc0CisjZGVmaW5lIFBDTEtfVUFSVDMJCTc1CisjZGVmaW5lIFBDTEtfSTJDMAkJNzYKKyNkZWZpbmUgUENMS19TREkJCTc3CisjZGVmaW5lIFBDTEtfU1BJMAkJNzgKKyNkZWZpbmUgUENMS19BREMJCTc5CisjZGVmaW5lIFBDTEtfQUM5NwkJODAKKyNkZWZpbmUgUENMS19JMlMwCQk4MQorI2RlZmluZSBQQ0xLX1BXTQkJODIKKyNkZWZpbmUgUENMS19XRFQJCTgzCisjZGVmaW5lIFBDTEtfUlRDCQk4NAorI2RlZmluZSBQQ0xLX0dQSU8JCTg1CisjZGVmaW5lIFBDTEtfU1BJMQkJODYKKyNkZWZpbmUgUENMS19DSElQSUQJCTg3CisjZGVmaW5lIFBDTEtfSTJDMQkJODgKKyNkZWZpbmUgUENMS19JMlMxCQk4OQorI2RlZmluZSBQQ0xLX1BDTQkJOTAKKworLyogVG90YWwgbnVtYmVyIG9mIGNsb2Nrcy4gKi8KKyNkZWZpbmUgTlJfQ0xLUwkJCShQQ0xLX1BDTSArIDEpCisKKyNlbmRpZiAvKiBfRFRfQklORElOR1NfQ0xPQ0tfU0FNU1VOR19TM0MyNDQzX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svc3RpaDQxNS1jbGtzLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTUtY2xrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmM3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTUtY2xrcy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBwcm92aWRlcyBjb25zdGFudHMgY2xrIGluZGV4IFNUTWljcm9lbGVjdHJvbmljcworICogU1RpSDQxNSBTb0MuCisgKi8KKyNpZm5kZWYgX0NMS19TVElINDE1CisjZGVmaW5lIF9DTEtfU1RJSDQxNQorCisvKiBDTE9DS0dFTiBBMCAqLworI2RlZmluZSBDTEtfSUNOX1JFRwkJMAorI2RlZmluZSBDTEtfRVRIMV9QSFkJCTQKKworLyogQ0xPQ0tHRU4gQTEgKi8KKyNkZWZpbmUgQ0xLX0dNQUMwX1BIWQkJMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svc3RpaDQxNi1jbGtzLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTYtY2xrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmM3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTYtY2xrcy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBwcm92aWRlcyBjb25zdGFudHMgY2xrIGluZGV4IFNUTWljcm9lbGVjdHJvbmljcworICogU1RpSDQxNiBTb0MuCisgKi8KKyNpZm5kZWYgX0NMS19TVElINDE2CisjZGVmaW5lIF9DTEtfU1RJSDQxNgorCisvKiBDTE9DS0dFTiBBMCAqLworI2RlZmluZSBDTEtfSUNOX1JFRwkJMAorI2RlZmluZSBDTEtfRVRIMV9QSFkJCTQKKworLyogQ0xPQ0tHRU4gQTEgKi8KKyNkZWZpbmUgQ0xLX0dNQUMwX1BIWQkJMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcGluY3RybC9vbWFwLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3BpbmN0cmwvb21hcC5oCmluZGV4IGIwNDUyOGMuLjFjNzViOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcGluY3RybC9vbWFwLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9waW5jdHJsL29tYXAuaApAQCAtNjIsMTIgKzYyLDI5IEBACiAjZGVmaW5lIE9NQVAzNjMwX0NPUkUyX0lPUEFEKHBhLCB2YWwpCU9NQVBfSU9QQURfT0ZGU0VUKChwYSksIDB4MjVhMCkgKHZhbCkKICNkZWZpbmUgT01BUDNfV0tVUF9JT1BBRChwYSwgdmFsKQlPTUFQX0lPUEFEX09GRlNFVCgocGEpLCAweDJhMDApICh2YWwpCiAjZGVmaW5lIEFNMzNYWF9JT1BBRChwYSwgdmFsKQkJT01BUF9JT1BBRF9PRkZTRVQoKHBhKSwgMHgwODAwKSAodmFsKQotI2RlZmluZSBPTUFQNF9DT1JFX0lPUEFEKHBhLCB2YWwpCU9NQVBfSU9QQURfT0ZGU0VUKChwYSksIDB4MDA0MCkgKHZhbCkKLSNkZWZpbmUgT01BUDRfV0tVUF9JT1BBRChwYSwgdmFsKQlPTUFQX0lPUEFEX09GRlNFVCgocGEpLCAweGUwNDApICh2YWwpCiAjZGVmaW5lIEFNNDM3Ml9JT1BBRChwYSwgdmFsKQkJT01BUF9JT1BBRF9PRkZTRVQoKHBhKSwgMHgwODAwKSAodmFsKQotI2RlZmluZSBPTUFQNV9DT1JFX0lPUEFEKHBhLCB2YWwpCU9NQVBfSU9QQURfT0ZGU0VUKChwYSksIDB4Mjg0MCkgKHZhbCkKLSNkZWZpbmUgT01BUDVfV0tVUF9JT1BBRChwYSwgdmFsKQlPTUFQX0lPUEFEX09GRlNFVCgocGEpLCAweGM4NDApICh2YWwpCiAjZGVmaW5lIERSQTdYWF9DT1JFX0lPUEFEKHBhLCB2YWwpCU9NQVBfSU9QQURfT0ZGU0VUKChwYSksIDB4MzQwMCkgKHZhbCkKIAorLyoKKyAqIE1hY3JvcyB0byBhbGxvdyB1c2luZyB0aGUgb2Zmc2V0IGZyb20gdGhlIHBhZGNvbmYgcGh5c2ljYWwgYWRkcmVzcworICogaW5zdGVhZCAgb2YgdGhlIG9mZnNldCBmcm9tIHBhZGNvbmYgYmFzZS4KKyAqLworI2RlZmluZSBPTUFQX1BBRENPTkZfT0ZGU0VUKG9mZnNldCwgYmFzZV9vZmZzZXQpCSgob2Zmc2V0KSAtIChiYXNlX29mZnNldCkpCisKKyNkZWZpbmUgT01BUDRfSU9QQUQob2Zmc2V0LCB2YWwpCU9NQVBfUEFEQ09ORl9PRkZTRVQoKG9mZnNldCksIDB4MDA0MCkgKHZhbCkKKyNkZWZpbmUgT01BUDVfSU9QQUQob2Zmc2V0LCB2YWwpCU9NQVBfUEFEQ09ORl9PRkZTRVQoKG9mZnNldCksIDB4MDA0MCkgKHZhbCkKKworLyoKKyAqIERlZmluZSBzb21lIGNvbW1vbmx5IHVzZWQgcGlucyBjb25maWd1cmVkIGJ5IHRoZSBib2FyZHMuCisgKiBOb3RlIHRoYXQgc29tZSBib2FyZHMgdXNlIGFsdGVybmF0aXZlIHBpbnMsIHNvIGNoZWNrCisgKiB0aGUgc2NoZW1hdGljcyBiZWZvcmUgdXNpbmcgdGhlc2UuCisgKi8KKyNkZWZpbmUgT01BUDNfVUFSVDFfUlgJCTB4MTUyCisjZGVmaW5lIE9NQVAzX1VBUlQyX1JYCQkweDE0YQorI2RlZmluZSBPTUFQM19VQVJUM19SWAkJMHgxNmUKKyNkZWZpbmUgT01BUDRfVUFSVDJfUlgJCTB4ZGMKKyNkZWZpbmUgT01BUDRfVUFSVDNfUlgJCTB4MTA0CisjZGVmaW5lIE9NQVA0X1VBUlQ0X1JYCQkweDExYworCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MTUtcmVzZXRzLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQxNS1yZXNldHMuaAppbmRleCBjMmY4YTY2Li5jMjMyOWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQxNS1yZXNldHMuaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQxNS1yZXNldHMuaApAQCAtMjIsNSArMjIsNiBAQAogI2RlZmluZSBTVElINDE1X1VTQjBfU09GVFJFU0VUCQkzCiAjZGVmaW5lIFNUSUg0MTVfVVNCMV9TT0ZUUkVTRVQJCTQKICNkZWZpbmUgU1RJSDQxNV9VU0IyX1NPRlRSRVNFVAkJNQorI2RlZmluZSBTVElINDE1X0tFWVNDQU5fU09GVFJFU0VUCTYKIAogI2VuZGlmIC8qIF9EVF9CSU5ESU5HU19SRVNFVF9DT05UUk9MTEVSX1NUSUg0MTUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQtY29udHJvbGxlci9zdGloNDE2LXJlc2V0cy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MTYtcmVzZXRzLmgKaW5kZXggMjEyNzc0My4uZmNmOWFmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MTYtcmVzZXRzLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MTYtcmVzZXRzLmgKQEAgLTQ2LDUgKzQ2LDYgQEAKICNkZWZpbmUgU1RJSDQxNl9DT01QT19BX1NPRlRSRVNFVAkyNQogI2RlZmluZSBTVElINDE2X1ZQOF9ERUNfU09GVFJFU0VUCTI2CiAjZGVmaW5lIFNUSUg0MTZfVlRHX01BSU5fU09GVFJFU0VUCTI3CisjZGVmaW5lIFNUSUg0MTZfS0VZU0NBTl9TT0ZUUkVTRVQJMjgKIAogI2VuZGlmIC8qIF9EVF9CSU5ESU5HU19SRVNFVF9DT05UUk9MTEVSX1NUSUg0MTYgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQvYWx0cixyc3QtbWdyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0L2FsdHIscnN0LW1nci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDQ5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0L2FsdHIscnN0LW1nci5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFN0ZWZmZW4gVHJ1bXRyYXIgPHMudHJ1bXRyYXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19SRVNFVF9BTFRSX1JTVF9NR1JfSAorI2RlZmluZSBfRFRfQklORElOR1NfUkVTRVRfQUxUUl9SU1RfTUdSX0gKKworLyogTVBVTU9EUlNUICovCisjZGVmaW5lIENQVTBfUkVTRVQJCTAKKyNkZWZpbmUgQ1BVMV9SRVNFVAkJMQorI2RlZmluZSBXRFNfUkVTRVQJCTIKKyNkZWZpbmUgU0NVUEVSX1JFU0VUCQkzCisjZGVmaW5lIEwyX1JFU0VUCQk0CisKKy8qIFBFUk1PRFJTVCAqLworI2RlZmluZSBFTUFDMF9SRVNFVAkJMzIKKyNkZWZpbmUgRU1BQzFfUkVTRVQJCTMzCisjZGVmaW5lIFVTQjBfUkVTRVQJCTM0CisjZGVmaW5lIFVTQjFfUkVTRVQJCTM1CisjZGVmaW5lIE5BTkRfUkVTRVQJCTM2CisjZGVmaW5lIFFTUElfUkVTRVQJCTM3CisjZGVmaW5lIEw0V0QwX1JFU0VUCQkzOAorI2RlZmluZSBMNFdEMV9SRVNFVAkJMzkKKyNkZWZpbmUgT1NDMVRJTUVSMF9SRVNFVAk0MAorI2RlZmluZSBPU0MxVElNRVIxX1JFU0VUCTQxCisjZGVmaW5lIFNQVElNRVIwX1JFU0VUCQk0MgorI2RlZmluZSBTUFRJTUVSMV9SRVNFVAkJNDMKKyNkZWZpbmUgSTJDMF9SRVNFVAkJNDQKKyNkZWZpbmUgSTJDMV9SRVNFVAkJNDUKKyNkZWZpbmUgSTJDMl9SRVNFVAkJNDYKKyNkZWZpbmUgSTJDM19SRVNFVAkJNDcKKyNkZWZpbmUgVUFSVDBfUkVTRVQJCTQ4CisjZGVmaW5lIFVBUlQxX1JFU0VUCQk0OQorI2RlZmluZSBTUElNMF9SRVNFVAkJNTAKKyNkZWZpbmUgU1BJTTFfUkVTRVQJCTUxCisjZGVmaW5lIFNQSVMwX1JFU0VUCQk1MgorI2RlZmluZSBTUElTMV9SRVNFVAkJNTMKKyNkZWZpbmUgU0RNTUNfUkVTRVQJCTU0CisjZGVmaW5lIENBTjBfUkVTRVQJCTU1CisjZGVmaW5lIENBTjFfUkVTRVQJCTU2CisjZGVmaW5lIEdQSU8wX1JFU0VUCQk1NworI2RlZmluZSBHUElPMV9SRVNFVAkJNTgKKyNkZWZpbmUgR1BJTzJfUkVTRVQJCTU5CisjZGVmaW5lIERNQV9SRVNFVAkJNjAKKyNkZWZpbmUgU0RSX1JFU0VUCQk2MQorCisvKiBQRVIyTU9EUlNUICovCisjZGVmaW5lIERNQUlGMF9SRVNFVAkJNjQKKyNkZWZpbmUgRE1BSUYxX1JFU0VUCQk2NQorI2RlZmluZSBETUFJRjJfUkVTRVQJCTY2CisjZGVmaW5lIERNQUlGM19SRVNFVAkJNjcKKyNkZWZpbmUgRE1BSUY0X1JFU0VUCQk2OAorI2RlZmluZSBETUFJRjVfUkVTRVQJCTY5CisjZGVmaW5lIERNQUlGNl9SRVNFVAkJNzAKKyNkZWZpbmUgRE1BSUY3X1JFU0VUCQk3MQorCisvKiBCUkdNT0RSU1QgKi8KKyNkZWZpbmUgSFBTMkZQR0FfUkVTRVQJCTk2CisjZGVmaW5lIExXSFBTMkZQR0FfUkVTRVQJOTcKKyNkZWZpbmUgRlBHQTJIUFNfUkVTRVQJCTk4CisKKy8qIE1JU0NNT0RSU1QqLworI2RlZmluZSBST01fUkVTRVQJCTEyOAorI2RlZmluZSBPQ1JBTV9SRVNFVAkJMTI5CisjZGVmaW5lIFNZU01HUl9SRVNFVAkJMTMwCisjZGVmaW5lIFNZU01HUkNPTERfUkVTRVQJMTMxCisjZGVmaW5lIEZQR0FNR1JfUkVTRVQJCTEzMgorI2RlZmluZSBBQ1BJRE1BUF9SRVNFVAkJMTMzCisjZGVmaW5lIFMyRl9SRVNFVAkJMTM0CisjZGVmaW5lIFMyRkNPTERfUkVTRVQJCTEzNQorI2RlZmluZSBOUlNUUElOX1JFU0VUCQkxMzYKKyNkZWZpbmUgVElNRVNUQU1QQ09MRF9SRVNFVAkxMzcKKyNkZWZpbmUgQ0xLTUdSQ09MRF9SRVNFVAkxMzgKKyNkZWZpbmUgU0NBTk1HUl9SRVNFVAkJMTM5CisjZGVmaW5lIEZSWkNUUkxDT0xEX1JFU0VUCTE0MAorI2RlZmluZSBTWVNEQkdfUkVTRVQJCTE0MQorI2RlZmluZSBEQkdfUkVTRVQJCTE0MgorI2RlZmluZSBUQVBDT0xEX1JFU0VUCQkxNDMKKyNkZWZpbmUgU0RSQ09MRF9SRVNFVAkJMTQ0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9zb2MvcWNvbSxnc2JpLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3NvYy9xY29tLGdzYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWM0MjkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9zb2MvcWNvbSxnc2JpLmgKQEAgLTAsMCArMSwyNiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEzLCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fRFRfQklORElOR1NfUUNPTV9HU0JJX0gKKyNkZWZpbmUgX19EVF9CSU5ESU5HU19RQ09NX0dTQklfSAorCisjZGVmaW5lIEdTQklfUFJPVF9JRExFCQkwCisjZGVmaW5lIEdTQklfUFJPVF9JMkNfVUlNCTEKKyNkZWZpbmUgR1NCSV9QUk9UX0kyQwkJMgorI2RlZmluZSBHU0JJX1BST1RfU1BJCQkzCisjZGVmaW5lIEdTQklfUFJPVF9VQVJUX1dfRkMJNAorI2RlZmluZSBHU0JJX1BST1RfVUlNCQk1CisjZGVmaW5lIEdTQklfUFJPVF9JMkNfVUFSVAk2CisKKyNkZWZpbmUgR1NCSV9DUkNJX1FVUAkJMAorI2RlZmluZSBHU0JJX0NSQ0lfVUFSVAkJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCmluZGV4IDMyYTg5Y2YuLjhjOTgxMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaApAQCAtNiwyOCArNiw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCi0KLS8qCi0gKiBUaGVzZSBkZWZpbmVzIGlzIHBsYWNlcyBoZXJlIGR1ZSB0byBhY2Nlc3MgaXMgbmVlZGVkIGZyb20gbWFjaGluZQotICogY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIFNUIE1pY3JvIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBST0QgYW5kCi0gKiByZXVzZSB0aGUgdm9sdGFnZSByZWdpc3RlcnMgZm9yIGRpcmVjdGlvbiBzZXR0aW5ncy4KLSAqLwotI2RlZmluZSBNQ0lfU1RfREFUQTJESVJFTgkoMSA8PCAyKQotI2RlZmluZSBNQ0lfU1RfQ01ERElSRU4JCSgxIDw8IDMpCi0jZGVmaW5lIE1DSV9TVF9EQVRBMERJUkVOCSgxIDw8IDQpCi0jZGVmaW5lIE1DSV9TVF9EQVRBMzFESVJFTgkoMSA8PCA1KQotI2RlZmluZSBNQ0lfU1RfRkJDTEtFTgkJKDEgPDwgNykKLSNkZWZpbmUgTUNJX1NUX0RBVEE3NERJUkVOCSgxIDw8IDgpCi0KLS8qIEp1c3Qgc29tZSBkdW1teSBmb3J3YXJkaW5nICovCi1zdHJ1Y3QgZG1hX2NoYW47Ci0KIC8qKgogICogc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAtIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNTUNJCiAgKiAoYWxzbyBrbm93biBhcyBQTDE4MCkgYmxvY2suCi0gKiBAZl9tYXg6IHRoZSBtYXhpbXVtIG9wZXJhdGlvbmFsIGZyZXF1ZW5jeSBmb3IgdGhpcyBob3N0IGluIHRoaXMKLSAqIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIFdoZW4gdGhpcyBpcyBzcGVjaWZpZWQgaXQgdGFrZXMgcHJlY2VkZW5jZQotICogb3ZlciB0aGUgbW9kdWxlIHBhcmFtZXRlciBmb3IgdGhlIHNhbWUgZnJlcXVlbmN5LgogICogQG9jcl9tYXNrOiBhdmFpbGFibGUgdm9sdGFnZXMgb24gdGhlIDQgcGlucyBmcm9tIHRoZSBibG9jaywgdGhpcwogICogaXMgaWdub3JlZCBpZiBhIHJlZ3VsYXRvciBpcyB1c2VkLCBzZWUgdGhlIE1NQ19WRERfKiBtYXNrcyBpbgogICogbW1jL2hvc3QuaApAQCAtNDIsMzcgKzIzLDE0IEBACiAgKiBAZ3Bpb193cDogcmVhZCB0aGlzIEdQSU8gcGluIHRvIHNlZSBpZiB0aGUgY2FyZCBpcyB3cml0ZSBwcm90ZWN0ZWQKICAqIEBncGlvX2NkOiByZWFkIHRoaXMgR1BJTyBwaW4gdG8gZGV0ZWN0IGNhcmQgaW5zZXJ0aW9uCiAgKiBAY2RfaW52ZXJ0OiB0cnVlIGlmIHRoZSBncGlvX2NkIHBpbiB2YWx1ZSBpcyBhY3RpdmUgbG93Ci0gKiBAY2FwYWJpbGl0aWVzOiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBibG9jayBhcyBpbXBsZW1lbnRlZCBpbgotICogdGhpcyBwbGF0Zm9ybSwgc2lnbmlmeSBhbnl0aGluZyBNTUNfQ0FQXyogZnJvbSBtbWMvaG9zdC5oCi0gKiBAY2FwYWJpbGl0aWVzMjogbW9yZSBjYXBhYmlsaXRpZXMsIE1NQ19DQVAyXyogZnJvbSBtbWMvaG9zdC5oCi0gKiBAc2lnZGlyOiBhIGJpdCBmaWVsZCBpbmRpY2F0aW5nIGZvciB3aGF0IGJpdHMgaW4gdGhlIE1NQyBidXMgdGhlIGhvc3QKLSAqIHNob3VsZCBlbmFibGUgc2lnbmFsIGRpcmVjdGlvbiBpbmRpY2F0aW9uLgotICogQGRtYV9maWx0ZXI6IGZ1bmN0aW9uIHVzZWQgdG8gc2VsZWN0IGFuIGFwcHJvcHJpYXRlIFJYIGFuZCBUWAotICogRE1BIGNoYW5uZWwgdG8gYmUgdXNlZCBmb3IgRE1BLCBpZiBhbmQgb25seSBpZiB5b3UncmUgZGVwbG95aW5nIHRoZQotICogZ2VuZXJpYyBETUEgZW5naW5lCi0gKiBAZG1hX3J4X3BhcmFtOiBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBETUEgYWxsb2NhdGlvbgotICogZmlsdGVyIGluIG9yZGVyIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBSWCBjaGFubmVsLiBJZgotICogdGhlcmUgaXMgYSBiaWRpcmVjdGlvbmFsIFJYK1RYIGNoYW5uZWwsIHRoZW4ganVzdCBzcGVjaWZ5Ci0gKiB0aGlzIGFuZCBsZWF2ZSBkbWFfdHhfcGFyYW0gc2V0IHRvIE5VTEwKLSAqIEBkbWFfdHhfcGFyYW06IHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIERNQSBhbGxvY2F0aW9uCi0gKiBmaWx0ZXIgaW4gb3JkZXIgdG8gc2VsZWN0IGFuIGFwcHJvcHJpYXRlIFRYIGNoYW5uZWwuIElmIHRoaXMKLSAqIGlzIE5VTEwgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBSWCBjaGFubmVsIGFzIGEKLSAqIGJpZGlyZWN0aW9uYWwgY2hhbm5lbAogICovCiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgZl9tYXg7CiAJdW5zaWduZWQgaW50IG9jcl9tYXNrOwogCWludCAoKmlvc19oYW5kbGVyKShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBtbWNfaW9zICopOwogCXVuc2lnbmVkIGludCAoKnN0YXR1cykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQJZ3Bpb193cDsKIAlpbnQJZ3Bpb19jZDsKIAlib29sCWNkX2ludmVydDsKLQl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsKLQl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczI7Ci0JdTMyIHNpZ2RpcjsKLQlib29sICgqZG1hX2ZpbHRlcikoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpmaWx0ZXJfcGFyYW0pOwotCXZvaWQgKmRtYV9yeF9wYXJhbTsKLQl2b2lkICpkbWFfdHhfcGFyYW07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRvbWljLmggYi9pbmNsdWRlL2xpbnV4L2F0b21pYy5oCmluZGV4IDViMDhhODUuLmZlZjNhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG9taWMuaApAQCAtMyw2ICszLDQyIEBACiAjZGVmaW5lIF9MSU5VWF9BVE9NSUNfSAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAorLyoKKyAqIFByb3ZpZGUgX19kZXByZWNhdGVkIHdyYXBwZXJzIGZvciB0aGUgbmV3IGludGVyZmFjZSwgYXZvaWQgZmxhZyBkYXkgY2hhbmdlcy4KKyAqIFdlIG5lZWQgdGhlIHVnbHkgZXh0ZXJuYWwgZnVuY3Rpb25zIHRvIGJyZWFrIGhlYWRlciByZWN1cnNpb24gaGVsbC4KKyAqLworI2lmbmRlZiBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmModm9pZCkKK3sKKwlleHRlcm4gdm9pZCBfX3NtcF9tYl9fYmVmb3JlX2F0b21pYyh2b2lkKTsKKwlfX3NtcF9tYl9fYmVmb3JlX2F0b21pYygpOworfQorI2VuZGlmCisKKyNpZm5kZWYgc21wX21iX19hZnRlcl9hdG9taWNfaW5jCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYyh2b2lkKQoreworCWV4dGVybiB2b2lkIF9fc21wX21iX19hZnRlcl9hdG9taWModm9pZCk7CisJX19zbXBfbWJfX2FmdGVyX2F0b21pYygpOworfQorI2VuZGlmCisKKyNpZm5kZWYgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKHZvaWQpCit7CisJZXh0ZXJuIHZvaWQgX19zbXBfbWJfX2JlZm9yZV9hdG9taWModm9pZCk7CisJX19zbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWModm9pZCkKK3sKKwlleHRlcm4gdm9pZCBfX3NtcF9tYl9fYWZ0ZXJfYXRvbWljKHZvaWQpOworCV9fc21wX21iX19hZnRlcl9hdG9taWMoKTsKK30KKyNlbmRpZgorCiAvKioKICAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQogICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggYmJhNTUwOC4uNWE2NDU3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC0zMzMsNyArMzMzLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBiaW9fc2V0ICpiaW9zZXRfY3JlYXRlKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGJpb3NldF9mcmVlKHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIG1lbXBvb2xfdCAqYmlvdmVjX2NyZWF0ZV9wb29sKHN0cnVjdCBiaW9fc2V0ICpicywgaW50IHBvb2xfZW50cmllcyk7CitleHRlcm4gbWVtcG9vbF90ICpiaW92ZWNfY3JlYXRlX3Bvb2woaW50IHBvb2xfZW50cmllcyk7CiAKIGV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfYmlvc2V0KGdmcF90LCBpbnQsIHN0cnVjdCBiaW9fc2V0ICopOwogZXh0ZXJuIHZvaWQgYmlvX3B1dChzdHJ1Y3QgYmlvICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggYmU1ZmQzOC4uY2JjNTgzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0zMiw2ICszMiwyNiBAQAogICovCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCisvKgorICogUHJvdmlkZSBfX2RlcHJlY2F0ZWQgd3JhcHBlcnMgZm9yIHRoZSBuZXcgaW50ZXJmYWNlLCBhdm9pZCBmbGFnIGRheSBjaGFuZ2VzLgorICogV2UgbmVlZCB0aGUgdWdseSBleHRlcm5hbCBmdW5jdGlvbnMgdG8gYnJlYWsgaGVhZGVyIHJlY3Vyc2lvbiBoZWxsLgorICovCisjaWZuZGVmIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdAorc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQodm9pZCkKK3sKKwlleHRlcm4gdm9pZCBfX3NtcF9tYl9fYmVmb3JlX2F0b21pYyh2b2lkKTsKKwlfX3NtcF9tYl9fYmVmb3JlX2F0b21pYygpOworfQorI2VuZGlmCisKKyNpZm5kZWYgc21wX21iX19hZnRlcl9jbGVhcl9iaXQKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgc21wX21iX19hZnRlcl9jbGVhcl9iaXQodm9pZCkKK3sKKwlleHRlcm4gdm9pZCBfX3NtcF9tYl9fYWZ0ZXJfYXRvbWljKHZvaWQpOworCV9fc21wX21iX19hZnRlcl9hdG9taWMoKTsKK30KKyNlbmRpZgorCiAjZGVmaW5lIGZvcl9lYWNoX3NldF9iaXQoYml0LCBhZGRyLCBzaXplKSBcCiAJZm9yICgoYml0KSA9IGZpbmRfZmlyc3RfYml0KChhZGRyKSwgKHNpemUpKTsJCVwKIAkgICAgIChiaXQpIDwgKHNpemUpOwkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstbXEuaCBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmgKaW5kZXggMDEyMDQ1MS4uYzE1MTI4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCkBAIC04LDcgKzgsMTMgQEAKIHN0cnVjdCBibGtfbXFfY3B1X25vdGlmaWVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdm9pZCAqZGF0YTsKLQl2b2lkICgqbm90aWZ5KSh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdW5zaWduZWQgaW50IGNwdSk7CisJaW50ICgqbm90aWZ5KSh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdW5zaWduZWQgaW50IGNwdSk7Cit9OworCitzdHJ1Y3QgYmxrX21xX2N0eG1hcCB7CisJdW5zaWduZWQgaW50IG1hcF9zaXplOworCXVuc2lnbmVkIGludCBiaXRzX3Blcl93b3JkOworCXN0cnVjdCBibGtfYWxpZ25fYml0bWFwICptYXA7CiB9OwogCiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCB7CkBAIC0xOCw3ICsyNCwxMSBAQAogCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwkJLyogQkxLX01RX1NfKiBmbGFncyAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsJZGVsYXllZF93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsJcnVuX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yawlkZWxheV93b3JrOworCWNwdW1hc2tfdmFyX3QJCWNwdW1hc2s7CisJaW50CQkJbmV4dF9jcHU7CisJaW50CQkJbmV4dF9jcHVfYmF0Y2g7CiAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEJMS19NUV9GXyogZmxhZ3MgKi8KIApAQCAtMjcsMTMgKzM3LDEzIEBACiAKIAl2b2lkCQkJKmRyaXZlcl9kYXRhOwogCisJc3RydWN0IGJsa19tcV9jdHhtYXAJY3R4X21hcDsKKwogCXVuc2lnbmVkIGludAkJbnJfY3R4OwogCXN0cnVjdCBibGtfbXFfY3R4CSoqY3R4czsKLQl1bnNpZ25lZCBpbnQgCQlucl9jdHhfbWFwOwotCXVuc2lnbmVkIGxvbmcJCSpjdHhfbWFwOwogCi0Jc3RydWN0IHJlcXVlc3QJCSoqcnFzOwotCXN0cnVjdCBsaXN0X2hlYWQJcGFnZV9saXN0OworCXVuc2lnbmVkIGludAkJd2FpdF9pbmRleDsKKwogCXN0cnVjdCBibGtfbXFfdGFncwkqdGFnczsKIAogCXVuc2lnbmVkIGxvbmcJCXF1ZXVlZDsKQEAgLTQxLDMxICs1MSw0MCBAQAogI2RlZmluZSBCTEtfTVFfTUFYX0RJU1BBVENIX09SREVSCTEwCiAJdW5zaWduZWQgbG9uZwkJZGlzcGF0Y2hlZFtCTEtfTVFfTUFYX0RJU1BBVENIX09SREVSXTsKIAotCXVuc2lnbmVkIGludAkJcXVldWVfZGVwdGg7CiAJdW5zaWduZWQgaW50CQludW1hX25vZGU7CiAJdW5zaWduZWQgaW50CQljbWRfc2l6ZTsJLyogcGVyLXJlcXVlc3QgZXh0cmEgZGF0YSAqLwogCisJYXRvbWljX3QJCW5yX2FjdGl2ZTsKKwogCXN0cnVjdCBibGtfbXFfY3B1X25vdGlmaWVyCWNwdV9ub3RpZmllcjsKIAlzdHJ1Y3Qga29iamVjdAkJa29iajsKIH07CiAKLXN0cnVjdCBibGtfbXFfcmVnIHsKK3N0cnVjdCBibGtfbXFfdGFnX3NldCB7CiAJc3RydWN0IGJsa19tcV9vcHMJKm9wczsKIAl1bnNpZ25lZCBpbnQJCW5yX2h3X3F1ZXVlczsKLQl1bnNpZ25lZCBpbnQJCXF1ZXVlX2RlcHRoOworCXVuc2lnbmVkIGludAkJcXVldWVfZGVwdGg7CS8qIG1heCBodyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJCXJlc2VydmVkX3RhZ3M7CiAJdW5zaWduZWQgaW50CQljbWRfc2l6ZTsJLyogcGVyLXJlcXVlc3QgZXh0cmEgZGF0YSAqLwogCWludAkJCW51bWFfbm9kZTsKIAl1bnNpZ25lZCBpbnQJCXRpbWVvdXQ7CiAJdW5zaWduZWQgaW50CQlmbGFnczsJCS8qIEJMS19NUV9GXyogKi8KKwl2b2lkCQkJKmRyaXZlcl9kYXRhOworCisJc3RydWN0IGJsa19tcV90YWdzCSoqdGFnczsKKworCXN0cnVjdCBtdXRleAkJdGFnX2xpc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRhZ19saXN0OwogfTsKIAogdHlwZWRlZiBpbnQgKHF1ZXVlX3JxX2ZuKShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgc3RydWN0IGJsa19tcV9od19jdHggKihtYXBfcXVldWVfZm4pKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGNvbnN0IGludCk7Ci10eXBlZGVmIHN0cnVjdCBibGtfbXFfaHdfY3R4ICooYWxsb2NfaGN0eF9mbikoc3RydWN0IGJsa19tcV9yZWcgKix1bnNpZ25lZCBpbnQpOwotdHlwZWRlZiB2b2lkIChmcmVlX2hjdHhfZm4pKHN0cnVjdCBibGtfbXFfaHdfY3R4ICosIHVuc2lnbmVkIGludCk7CiB0eXBlZGVmIGludCAoaW5pdF9oY3R4X2ZuKShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiB0eXBlZGVmIHZvaWQgKGV4aXRfaGN0eF9mbikoc3RydWN0IGJsa19tcV9od19jdHggKiwgdW5zaWduZWQgaW50KTsKK3R5cGVkZWYgaW50IChpbml0X3JlcXVlc3RfZm4pKHZvaWQgKiwgc3RydWN0IHJlcXVlc3QgKiwgdW5zaWduZWQgaW50LAorCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit0eXBlZGVmIHZvaWQgKGV4aXRfcmVxdWVzdF9mbikodm9pZCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1bnNpZ25lZCBpbnQsCisJCXVuc2lnbmVkIGludCk7CiAKIHN0cnVjdCBibGtfbXFfb3BzIHsKIAkvKgpAQCAtODYsMTggKzEwNSwyMCBAQAogCXNvZnRpcnFfZG9uZV9mbgkJKmNvbXBsZXRlOwogCiAJLyoKLQkgKiBPdmVycmlkZSBmb3IgaGN0eCBhbGxvY2F0aW9ucyAoc2hvdWxkIHByb2JhYmx5IGdvKQotCSAqLwotCWFsbG9jX2hjdHhfZm4JCSphbGxvY19oY3R4OwotCWZyZWVfaGN0eF9mbgkJKmZyZWVfaGN0eDsKLQotCS8qCiAJICogQ2FsbGVkIHdoZW4gdGhlIGJsb2NrIGxheWVyIHNpZGUgb2YgYSBoYXJkd2FyZSBxdWV1ZSBoYXMgYmVlbgogCSAqIHNldCB1cCwgYWxsb3dpbmcgdGhlIGRyaXZlciB0byBhbGxvY2F0ZS9pbml0IG1hdGNoaW5nIHN0cnVjdHVyZXMuCiAJICogRGl0dG8gZm9yIGV4aXQvdGVhcmRvd24uCiAJICovCiAJaW5pdF9oY3R4X2ZuCQkqaW5pdF9oY3R4OwogCWV4aXRfaGN0eF9mbgkJKmV4aXRfaGN0eDsKKworCS8qCisJICogQ2FsbGVkIGZvciBldmVyeSBjb21tYW5kIGFsbG9jYXRlZCBieSB0aGUgYmxvY2sgbGF5ZXIgdG8gYWxsb3cKKwkgKiB0aGUgZHJpdmVyIHRvIHNldCB1cCBkcml2ZXIgc3BlY2lmaWMgZGF0YS4KKwkgKiBEaXR0byBmb3IgZXhpdC90ZWFyZG93bi4KKwkgKi8KKwlpbml0X3JlcXVlc3RfZm4JCSppbml0X3JlcXVlc3Q7CisJZXhpdF9yZXF1ZXN0X2ZuCQkqZXhpdF9yZXF1ZXN0OwogfTsKIAogZW51bSB7CkBAIC0xMDcsMTggKzEyOCwyNCBAQAogCiAJQkxLX01RX0ZfU0hPVUxEX01FUkdFCT0gMSA8PCAwLAogCUJMS19NUV9GX1NIT1VMRF9TT1JUCT0gMSA8PCAxLAotCUJMS19NUV9GX1NIT1VMRF9JUEkJPSAxIDw8IDIsCisJQkxLX01RX0ZfVEFHX1NIQVJFRAk9IDEgPDwgMiwKKwlCTEtfTVFfRl9TR19NRVJHRQk9IDEgPDwgMywKKwlCTEtfTVFfRl9TWVNGU19VUAk9IDEgPDwgNCwKIAogCUJMS19NUV9TX1NUT1BQRUQJPSAwLAorCUJMS19NUV9TX1RBR19BQ1RJVkUJPSAxLAogCiAJQkxLX01RX01BWF9ERVBUSAk9IDIwNDgsCisKKwlCTEtfTVFfQ1BVX1dPUktfQkFUQ0gJPSA4LAogfTsKIAotc3RydWN0IHJlcXVlc3RfcXVldWUgKmJsa19tcV9pbml0X3F1ZXVlKHN0cnVjdCBibGtfbXFfcmVnICosIHZvaWQgKik7CitzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX21xX2luaXRfcXVldWUoc3RydWN0IGJsa19tcV90YWdfc2V0ICopOwogaW50IGJsa19tcV9yZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICopOwogdm9pZCBibGtfbXFfdW5yZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICopOwotaW50IGJsa19tcV9pbml0X2NvbW1hbmRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGludCAoKmluaXQpKHZvaWQgKmRhdGEsIHN0cnVjdCBibGtfbXFfaHdfY3R4ICosIHN0cnVjdCByZXF1ZXN0ICosIHVuc2lnbmVkIGludCksIHZvaWQgKmRhdGEpOwotdm9pZCBibGtfbXFfZnJlZV9jb21tYW5kcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB2b2lkICgqZnJlZSkodm9pZCAqZGF0YSwgc3RydWN0IGJsa19tcV9od19jdHggKiwgc3RydWN0IHJlcXVlc3QgKiwgdW5zaWduZWQgaW50KSwgdm9pZCAqZGF0YSk7CisKK2ludCBibGtfbXFfYWxsb2NfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCk7Cit2b2lkIGJsa19tcV9mcmVlX3RhZ19zZXQoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpOwogCiB2b2lkIGJsa19tcV9mbHVzaF9wbHVnX2xpc3Qoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGZyb21fc2NoZWR1bGUpOwogCkBAIC0xMjYsMjggKzE1MywyOCBAQAogdm9pZCBibGtfbXFfcnVuX3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYyk7CiB2b2lkIGJsa19tcV9mcmVlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTsKIGJvb2wgYmxrX21xX2Nhbl9xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqKTsKLXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHJ3LCBnZnBfdCBnZnApOwotc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXNlcnZlZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgcncsIGdmcF90IGdmcCk7Ci1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX3JxX2Zyb21fdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgdGFnKTsKK3N0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHJ3LAorCQlnZnBfdCBnZnAsIGJvb2wgcmVzZXJ2ZWQpOworc3RydWN0IHJlcXVlc3QgKmJsa19tcV90YWdfdG9fcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHVuc2lnbmVkIGludCB0YWcpOwogCiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqYmxrX21xX21hcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBjb25zdCBpbnQgY3R4X2luZGV4KTsKLXN0cnVjdCBibGtfbXFfaHdfY3R4ICpibGtfbXFfYWxsb2Nfc2luZ2xlX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfcmVnICosIHVuc2lnbmVkIGludCk7Ci12b2lkIGJsa19tcV9mcmVlX3NpbmdsZV9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqLCB1bnNpZ25lZCBpbnQpOworc3RydWN0IGJsa19tcV9od19jdHggKmJsa19tcV9hbGxvY19zaW5nbGVfaHdfcXVldWUoc3RydWN0IGJsa19tcV90YWdfc2V0ICosIHVuc2lnbmVkIGludCwgaW50KTsKIAotYm9vbCBibGtfbXFfZW5kX2lvX3BhcnRpYWwoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IsCi0JCXVuc2lnbmVkIGludCBucl9ieXRlcyk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKLXsKLQlib29sIGRvbmUgPSAhYmxrX21xX2VuZF9pb19wYXJ0aWFsKHJxLCBlcnJvciwgYmxrX3JxX2J5dGVzKHJxKSk7Ci0JQlVHX09OKCFkb25lKTsKLX0KK3ZvaWQgYmxrX21xX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7Cit2b2lkIF9fYmxrX21xX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiAKK3ZvaWQgYmxrX21xX3JlcXVldWVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpOwordm9pZCBibGtfbXFfYWRkX3RvX3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgYXRfaGVhZCk7Cit2b2lkIGJsa19tcV9raWNrX3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiB2b2lkIGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSk7CiAKIHZvaWQgYmxrX21xX3N0b3BfaHdfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpOwogdm9pZCBibGtfbXFfc3RhcnRfaHdfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpOwogdm9pZCBibGtfbXFfc3RvcF9od19xdWV1ZXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwotdm9pZCBibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwordm9pZCBibGtfbXFfc3RhcnRfaHdfcXVldWVzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK3ZvaWQgYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBib29sIGFzeW5jKTsKK3ZvaWQgYmxrX21xX2RlbGF5X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB1bnNpZ25lZCBsb25nIG1zZWNzKTsKK3ZvaWQgYmxrX21xX3RhZ19idXN5X2l0ZXIoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB2b2lkICgqZm4pKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgKiksIHZvaWQgKmRhdGEpOwogCiAvKgogICogRHJpdmVyIGNvbW1hbmQgZGF0YSBpcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVxdWVzdC4gU28gc3VidHJhY3QgcmVxdWVzdApAQCAtMTYyLDEyICsxODksNiBAQAogCXJldHVybiAodm9pZCAqKSBycSArIHNpemVvZigqcnEpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpibGtfbXFfdGFnX3RvX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHRhZykKLXsKLQlyZXR1cm4gaGN0eC0+cnFzW3RhZ107Ci19Ci0KICNkZWZpbmUgcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpCQkJCVwKIAlmb3IgKChpKSA9IDA7IChpKSA8IChxKS0+bnJfaHdfcXVldWVzICYmCQkJXAogCSAgICAgKHsgaGN0eCA9IChxKS0+cXVldWVfaHdfY3R4W2ldOyAxOyB9KTsgKGkpKyspCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAppbmRleCBhYTBlYWEyLi5kOGU0Y2VhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKQEAgLTE5MCw2ICsxOTAsNyBAQAogCV9fUkVRX1BNLAkJLyogcnVudGltZSBwbSByZXF1ZXN0ICovCiAJX19SRVFfRU5ELAkJLyogbGFzdCBvZiBjaGFpbiBvZiByZXF1ZXN0cyAqLwogCV9fUkVRX0hBU0hFRCwJCS8qIG9uIElPIHNjaGVkdWxlciBtZXJnZSBoYXNoICovCisJX19SRVFfTVFfSU5GTElHSFQsCS8qIHRyYWNrIGluZmxpZ2h0IGZvciBNUSAqLwogCV9fUkVRX05SX0JJVFMsCQkvKiBzdG9wcyBoZXJlICovCiB9OwogCkBAIC0yNDMsNSArMjQ0LDYgQEAKICNkZWZpbmUgUkVRX1BNCQkJKDFVTEwgPDwgX19SRVFfUE0pCiAjZGVmaW5lIFJFUV9FTkQJCQkoMVVMTCA8PCBfX1JFUV9FTkQpCiAjZGVmaW5lIFJFUV9IQVNIRUQJCSgxVUxMIDw8IF9fUkVRX0hBU0hFRCkKKyNkZWZpbmUgUkVRX01RX0lORkxJR0hUCQkoMVVMTCA8PCBfX1JFUV9NUV9JTkZMSUdIVCkKIAogI2VuZGlmIC8qIF9fTElOVVhfQkxLX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDBkODQ5ODEuLjhhYmEzNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtOTAsMTUgKzkwLDE1IEBACiAjZGVmaW5lIEJMS19NQVhfQ0RCCTE2CiAKIC8qCi0gKiB0cnkgdG8gcHV0IHRoZSBmaWVsZHMgdGhhdCBhcmUgcmVmZXJlbmNlZCB0b2dldGhlciBpbiB0aGUgc2FtZSBjYWNoZWxpbmUuCi0gKiBpZiB5b3UgbW9kaWZ5IHRoaXMgc3RydWN0dXJlLCBiZSBzdXJlIHRvIGNoZWNrIGJsb2NrL2Jsay1jb3JlLmM6YmxrX3JxX2luaXQoKQotICogYXMgd2VsbCEKKyAqIFRyeSB0byBwdXQgdGhlIGZpZWxkcyB0aGF0IGFyZSByZWZlcmVuY2VkIHRvZ2V0aGVyIGluIHRoZSBzYW1lIGNhY2hlbGluZS4KKyAqCisgKiBJZiB5b3UgbW9kaWZ5IHRoaXMgc3RydWN0dXJlLCBtYWtlIHN1cmUgdG8gdXBkYXRlIGJsa19ycV9pbml0KCkgYW5kCisgKiBlc3BlY2lhbGx5IGJsa19tcV9ycV9jdHhfaW5pdCgpIHRvIHRha2UgY2FyZSBvZiB0aGUgYWRkZWQgZmllbGRzLgogICovCiBzdHJ1Y3QgcmVxdWVzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZWxpc3Q7CiAJdW5pb24gewogCQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSBjc2Q7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdCBtcV9mbHVzaF93b3JrOwogCQl1bnNpZ25lZCBsb25nIGZpZm9fdGltZTsKIAl9OwogCkBAIC0xNzgsNyArMTc4LDYgQEAKIAl1bnNpZ25lZCBzaG9ydCBpb3ByaW87CiAKIAl2b2lkICpzcGVjaWFsOwkJLyogb3BhcXVlIHBvaW50ZXIgYXZhaWxhYmxlIGZvciBMTEQgdXNlICovCi0JY2hhciAqYnVmZmVyOwkJLyoga2FkZHIgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCBpZiBhdmFpbGFibGUgKi8KIAogCWludCB0YWc7CiAJaW50IGVycm9yczsKQEAgLTQ2Myw2ICs0NjIsMTAgQEAKIAlzdHJ1Y3QgcmVxdWVzdAkJKmZsdXNoX3JxOwogCXNwaW5sb2NrX3QJCW1xX2ZsdXNoX2xvY2s7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlcXVldWVfbGlzdDsKKwlzcGlubG9ja190CQlyZXF1ZXVlX2xvY2s7CisJc3RydWN0IHdvcmtfc3RydWN0CXJlcXVldWVfd29yazsKKwogCXN0cnVjdCBtdXRleAkJc3lzZnNfbG9jazsKIAogCWludAkJCWJ5cGFzc19kZXB0aDsKQEAgLTQ4MSw2ICs0ODQsOSBAQAogCXdhaXRfcXVldWVfaGVhZF90CW1xX2ZyZWV6ZV93cTsKIAlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIJbXFfdXNhZ2VfY291bnRlcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFsbF9xX25vZGU7CisKKwlzdHJ1Y3QgYmxrX21xX3RhZ19zZXQJKnRhZ19zZXQ7CisJc3RydWN0IGxpc3RfaGVhZAl0YWdfc2V0X2xpc3Q7CiB9OwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfUVVFVUVECTEJLyogdXNlcyBnZW5lcmljIHRhZyBxdWV1ZWluZyAqLwpAQCAtNTA0LDYgKzUxMCw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfU0FNRV9GT1JDRSAgMTgJLyogZm9yY2UgY29tcGxldGUgb24gc2FtZSBDUFUgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19ERUFEICAgICAgICAxOQkvKiBxdWV1ZSB0ZWFyLWRvd24gZmluaXNoZWQgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19JTklUX0RPTkUgICAyMAkvKiBxdWV1ZSBpcyBpbml0aWFsaXplZCAqLworI2RlZmluZSBRVUVVRV9GTEFHX05PX1NHX01FUkdFIDIxCS8qIGRvbid0IGF0dGVtcHQgdG8gbWVyZ2UgU0cgc2VnbWVudHMqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfU1RBQ0tBQkxFKQl8CVwKQEAgLTYxMyw2ICs2MjAsMTUgQEAKIAogI2RlZmluZSBycV9kYXRhX2RpcihycSkJCSgoKHJxKS0+Y21kX2ZsYWdzICYgMSkgIT0gMCkKIAorLyoKKyAqIERyaXZlciBjYW4gaGFuZGxlIHN0cnVjdCByZXF1ZXN0LCBpZiBpdCBlaXRoZXIgaGFzIGFuIG9sZCBzdHlsZQorICogcmVxdWVzdF9mbiBkZWZpbmVkLCBvciBpcyBibGstbXEgYmFzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9pc19ycV9iYXNlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gcS0+cmVxdWVzdF9mbiB8fCBxLT5tcV9vcHM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19xdWV1ZV9jbHVzdGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXJldHVybiBxLT5saW1pdHMuY2x1c3RlcjsKQEAgLTkzNyw2ICs5NTMsNyBAQAogICovCiBleHRlcm4gYm9vbCBibGtfdXBkYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzKTsKK2V4dGVybiB2b2lkIGJsa19maW5pc2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiBleHRlcm4gYm9vbCBibGtfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IsCiAJCQkgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzKTsKIGV4dGVybiB2b2lkIGJsa19lbmRfcmVxdWVzdF9hbGwoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpOwpAQCAtMTA1Myw3ICsxMDcwLDYgQEAKICAqIHNjaGVkdWxlKCkgd2hlcmUgYmxrX3NjaGVkdWxlX2ZsdXNoX3BsdWcoKSBpcyBjYWxsZWQuCiAgKi8KIHN0cnVjdCBibGtfcGx1ZyB7Ci0JdW5zaWduZWQgbG9uZyBtYWdpYzsgLyogZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgdXNlLWNhc2VzICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiByZXF1ZXN0cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbXFfbGlzdDsgLyogYmxrLW1xIHJlcXVlc3RzICovCiAJc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0OyAvKiBtZCByZXF1aXJlcyBhbiB1bnBsdWcgY2FsbGJhY2sgKi8KQEAgLTExMDIsNyArMTExOCw4IEBACiAvKgogICogdGFnIHN0dWZmCiAgKi8KLSNkZWZpbmUgYmxrX3JxX3RhZ2dlZChycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKQorI2RlZmluZSBibGtfcnFfdGFnZ2VkKHJxKSBcCisJKChycSktPm1xX2N0eCB8fCAoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX1FVRVVFRCkpCiBleHRlcm4gaW50IGJsa19xdWV1ZV9zdGFydF90YWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBleHRlcm4gc3RydWN0IHJlcXVlc3QgKmJsa19xdWV1ZV9maW5kX3RhZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2VuZF90YWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CkBAIC0xMzcwLDggKzEzODcsOSBAQAogfQogCiBzdHJ1Y3Qgd29ya19zdHJ1Y3Q7Ci1pbnQga2Jsb2NrZF9zY2hlZHVsZV93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSk7CitpbnQga2Jsb2NrZF9zY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQga2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpOworaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGludCBjcHUsIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KTsKIAogI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IGM0MDMwMmYuLjdjYmY4MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTI3OCw3ICsyNzgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0gICAgICAgIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKyAgICAgICAgc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAgICAgICAgIGF0b21pY19kZWMoJmJoLT5iX2NvdW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbGsvYXQ5MV9wbWMuaCBiL2luY2x1ZGUvbGludXgvY2xrL2F0OTFfcG1jLmgKaW5kZXggYTY5MTFlYi4uZGU0MjY4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbGsvYXQ5MV9wbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsay9hdDkxX3BtYy5oCkBAIC0xNTUsNiArMTU1LDcgQEAKICNkZWZpbmUJCUFUOTFfUE1DX0xPQ0tCCQkoMSA8PCAgMikJCS8qIFBMTEIgTG9jayAqLwogI2RlZmluZQkJQVQ5MV9QTUNfTUNLUkRZCQkoMSA8PCAgMykJCS8qIE1hc3RlciBDbG9jayAqLwogI2RlZmluZQkJQVQ5MV9QTUNfTE9DS1UJCSgxIDw8ICA2KQkJLyogVVBMTCBMb2NrIFtzb21lIFNBTTldICovCisjZGVmaW5lCQlBVDkxX1BNQ19PU0NTRUwJCSgxIDw8ICA3KQkJLyogU2xvdyBPc2NpbGxhdG9yIFNlbGVjdGlvbiBbc29tZSBTQU05XSAqLwogI2RlZmluZQkJQVQ5MV9QTUNfUENLMFJEWQkoMSA8PCAgOCkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAwICovCiAjZGVmaW5lCQlBVDkxX1BNQ19QQ0sxUkRZCSgxIDw8ICA5KQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDEgKi8KICNkZWZpbmUJCUFUOTFfUE1DX1BDSzJSRFkJKDEgPDwgMTApCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1pbnRlbC5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1pbnRlbC5oCmluZGV4IDU1MjljNTIuLmJhMTQ3YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItaW50ZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWludGVsLmgKQEAgLTEzLDEyICsxMyw5IEBACiAvKiBJbnRlbCBFQ0MgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGdjYyBzcGVjaWZpYyBhc20gc3RtdHMuCiAgKiBJdCB1c2VzIGludHJpbnNpY3MgdG8gZG8gdGhlIGVxdWl2YWxlbnQgdGhpbmdzLgogICovCi0jdW5kZWYgYmFycmllcgogI3VuZGVmIFJFTE9DX0hJREUKICN1bmRlZiBPUFRJTUlaRVJfSElERV9WQVIKIAotI2RlZmluZSBiYXJyaWVyKCkgX19tZW1vcnlfYmFycmllcigpCi0KICNkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikJCQkJCVwKICAgKHsgdW5zaWduZWQgbG9uZyBfX3B0cjsJCQkJCVwKICAgICAgX19wdHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IGJlOWM0NzQ3Li5mOGZlODYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKQEAgLTcxLDYgKzcxLDcgQEAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNuX21zZyAqLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKikpOwogdm9pZCBjbl9kZWxfY2FsbGJhY2soc3RydWN0IGNiX2lkICopOworaW50IGNuX25ldGxpbmtfc2VuZF9tdWx0KHN0cnVjdCBjbl9tc2cgKm1zZywgdTE2IGxlbiwgdTMyIHBvcnRpZCwgdTMyIGdyb3VwLCBnZnBfdCBnZnBfbWFzayk7CiBpbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZywgdTMyIHBvcnRpZCwgdTMyIGdyb3VwLCBnZnBfdCBnZnBfbWFzayk7CiAKIGludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCmluZGV4IDdmMGMzMjkuLmU4NTljOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogc3RydWN0IHZ0X3N0cnVjdDsKK3N0cnVjdCB1bmlfcGFnZWRpcjsKIAogI2RlZmluZSBOUEFSIDE2CiAKQEAgLTEwNCw4ICsxMDUsOCBAQAogCXVuc2lnbmVkIGludAl2Y19iZWxsX3BpdGNoOwkJLyogQ29uc29sZSBiZWxsIHBpdGNoICovCiAJdW5zaWduZWQgaW50CXZjX2JlbGxfZHVyYXRpb247CS8qIENvbnNvbGUgYmVsbCBkdXJhdGlvbiAqLwogCXN0cnVjdCB2Y19kYXRhICoqdmNfZGlzcGxheV9mZzsJCS8qIFshXSBQdHIgdG8gdmFyIGhvbGRpbmcgZmcgY29uc29sZSBmb3IgdGhpcyBkaXNwbGF5ICovCi0JdW5zaWduZWQgbG9uZwl2Y191bmlfcGFnZWRpcjsKLQl1bnNpZ25lZCBsb25nCSp2Y191bmlfcGFnZWRpcl9sb2M7ICAvKiBbIV0gTG9jYXRpb24gb2YgdW5pX3BhZ2VkaXIgdmFyaWFibGUgZm9yIHRoaXMgY29uc29sZSAqLworCXN0cnVjdCB1bmlfcGFnZWRpciAqdmNfdW5pX3BhZ2VkaXI7CisJc3RydWN0IHVuaV9wYWdlZGlyICoqdmNfdW5pX3BhZ2VkaXJfbG9jOyAvKiBbIV0gTG9jYXRpb24gb2YgdW5pX3BhZ2VkaXIgdmFyaWFibGUgZm9yIHRoaXMgY29uc29sZSAqLwogCWJvb2wgdmNfcGFuaWNfZm9yY2Vfd3JpdGU7IC8qIHdoZW4gb29wcy9wYW5pYyB0aGlzIFZDIGNhbiBhY2NlcHQgZm9yY2VkIG91dHB1dC9ibGFua2luZyAqLwogCS8qIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgaW4gdnRfa2Vybi5oICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggZDFkMWMwNS4uNTgwZTNlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC02MjMsNiArNjIzLDEyIEBACiB9CiBleHRlcm4gdm9pZCBkZXZtX2tmcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCk7CiBleHRlcm4gY2hhciAqZGV2bV9rc3RyZHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcywgZ2ZwX3QgZ2ZwKTsKK2V4dGVybiB2b2lkICpkZXZtX2ttZW1kdXAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4sCisJCQkgIGdmcF90IGdmcCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRldm1fZ2V0X2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7CitleHRlcm4gdm9pZCBkZXZtX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIpOwogCiB2b2lkIF9faW9tZW0gKmRldm1faW9yZW1hcF9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIHZvaWQgX19pb21lbSAqZGV2bV9yZXF1ZXN0X2FuZF9pb3JlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTY3Myw2ICs2NzksNyBAQAogICogCQl2YXJpYW50cywgd2hpY2ggR1BJTyBwaW5zIGFjdCBpbiB3aGF0IGFkZGl0aW9uYWwgcm9sZXMsIGFuZCBzbwogICogCQlvbi4gIFRoaXMgc2hyaW5rcyB0aGUgIkJvYXJkIFN1cHBvcnQgUGFja2FnZXMiIChCU1BzKSBhbmQKICAqIAkJbWluaW1pemVzIGJvYXJkLXNwZWNpZmljICNpZmRlZnMgaW4gZHJpdmVycy4KKyAqIEBkcml2ZXJfZGF0YTogUHJpdmF0ZSBwb2ludGVyIGZvciBkcml2ZXIgc3BlY2lmaWMgaW5mby4KICAqIEBwb3dlcjoJRm9yIGRldmljZSBwb3dlciBtYW5hZ2VtZW50LgogICogCQlTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dCBmb3IgZGV0YWlscy4KICAqIEBwbV9kb21haW46CVByb3ZpZGUgY2FsbGJhY2tzIHRoYXQgYXJlIGV4ZWN1dGVkIGR1cmluZyBzeXN0ZW0gc3VzcGVuZCwKQEAgLTczNCw2ICs3NDEsOCBAQAogCQkJCQkgICBkZXZpY2UgKi8KIAl2b2lkCQkqcGxhdGZvcm1fZGF0YTsJLyogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSwgZGV2aWNlCiAJCQkJCSAgIGNvcmUgZG9lc24ndCB0b3VjaCBpdCAqLworCXZvaWQJCSpkcml2ZXJfZGF0YTsJLyogRHJpdmVyIGRhdGEsIHNldCBhbmQgZ2V0IHdpdGgKKwkJCQkJICAgZGV2X3NldC9nZXRfZHJ2ZGF0YSAqLwogCXN0cnVjdCBkZXZfcG1faW5mbwlwb3dlcjsKIAlzdHJ1Y3QgZGV2X3BtX2RvbWFpbgkqcG1fZG9tYWluOwogCkBAIC04MjMsNiArODMyLDE2IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkICpkZXZfZ2V0X2RydmRhdGEoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmRyaXZlcl9kYXRhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2X3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcG1fc3Vic3lzX2RhdGEgKmRldl90b19wc2Qoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBkZXYgPyBkZXYtPnBvd2VyLnN1YnN5c19kYXRhIDogTlVMTDsKQEAgLTkwNyw4ICs5MjYsNiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmRldmljZV9nZXRfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgdW1vZGVfdCAqbW9kZSwga3VpZF90ICp1aWQsIGtnaWRfdCAqZ2lkLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKip0bXApOwotZXh0ZXJuIHZvaWQgKmRldl9nZXRfZHJ2ZGF0YShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBkZXZfc2V0X2RydmRhdGEoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKIAogc3RhdGljIGlubGluZSBib29sIGRldmljZV9zdXBwb3J0c19vZmZsaW5lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCBmZDRhZWUyLi4wYzNlYWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC04LDYgKzgsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtZGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAorLyoKKyAqIEEgZG1hX2FkZHJfdCBjYW4gaG9sZCBhbnkgdmFsaWQgRE1BIG9yIGJ1cyBhZGRyZXNzIGZvciB0aGUgcGxhdGZvcm0uCisgKiBJdCBjYW4gYmUgZ2l2ZW4gdG8gYSBkZXZpY2UgdG8gdXNlIGFzIGEgRE1BIHNvdXJjZSBvciB0YXJnZXQuICBBIENQVSBjYW5ub3QKKyAqIHJlZmVyZW5jZSBhIGRtYV9hZGRyX3QgZGlyZWN0bHkgYmVjYXVzZSB0aGVyZSBtYXkgYmUgdHJhbnNsYXRpb24gYmV0d2VlbgorICogaXRzIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgYW5kIHRoZSBidXMgYWRkcmVzcyBzcGFjZS4KKyAqLwogc3RydWN0IGRtYV9tYXBfb3BzIHsKIAl2b2lkKiAoKmFsbG9jKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCwKQEAgLTE4Niw3ICsxOTIsNyBAQAogCiAjaWZuZGVmIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQogc3RhdGljIGlubGluZSBpbnQKLWRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCitkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsCiAJCQkgICAgZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlyZXR1cm4gMDsKQEAgLTIxNywxMyArMjIzLDE0IEBACiBleHRlcm4gdm9pZCBkbWFtX2ZyZWVfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCiAJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwogI2lmZGVmIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQotZXh0ZXJuIGludCBkbWFtX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKK2V4dGVybiBpbnQgZG1hbV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXBoeXNfYWRkcl90IHBoeXNfYWRkciwKIAkJCQkJZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsCiAJCQkJCWludCBmbGFncyk7CiBleHRlcm4gdm9pZCBkbWFtX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7CiAjZWxzZSAvKiBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRtYW1fZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWRtYV9hZGRyX3QgYnVzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsCisJCQkJcGh5c19hZGRyX3QgcGh5c19hZGRyLCBkbWFfYWRkcl90IGRldmljZV9hZGRyLAogCQkJCXNpemVfdCBzaXplLCBnZnBfdCBnZnApCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dGNvbi5oIGIvaW5jbHVkZS9saW51eC9leHRjb24uaAppbmRleCBmNDg4MTQ1Li4zNmY0OWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dGNvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0Y29uLmgKQEAgLTE4NSw5ICsxODUsMjIgQEAKICAqLwogZXh0ZXJuIGludCBleHRjb25fZGV2X3JlZ2lzdGVyKHN0cnVjdCBleHRjb25fZGV2ICplZGV2KTsKIGV4dGVybiB2b2lkIGV4dGNvbl9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldik7CitleHRlcm4gaW50IGRldm1fZXh0Y29uX2Rldl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBleHRjb25fZGV2ICplZGV2KTsKK2V4dGVybiB2b2lkIGRldm1fZXh0Y29uX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpOwogZXh0ZXJuIHN0cnVjdCBleHRjb25fZGV2ICpleHRjb25fZ2V0X2V4dGNvbl9kZXYoY29uc3QgY2hhciAqZXh0Y29uX25hbWUpOwogCiAvKgorICogRm9sbG93aW5nIEFQSXMgY29udHJvbCB0aGUgbWVtb3J5IG9mIGV4dGNvbiBkZXZpY2UuCisgKi8KK2V4dGVybiBzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uX2Rldl9hbGxvY2F0ZShjb25zdCBjaGFyICoqY2FibGVzKTsKK2V4dGVybiB2b2lkIGV4dGNvbl9kZXZfZnJlZShzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldik7CitleHRlcm4gc3RydWN0IGV4dGNvbl9kZXYgKmRldm1fZXh0Y29uX2Rldl9hbGxvY2F0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICBjb25zdCBjaGFyICoqY2FibGVzKTsKK2V4dGVybiB2b2lkIGRldm1fZXh0Y29uX2Rldl9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpOworCisvKgogICogZ2V0L3NldC91cGRhdGVfc3RhdGUgYWNjZXNzIHRoZSAzMmIgZW5jb2RlZCBzdGF0ZSB2YWx1ZSwgd2hpY2ggcmVwcmVzZW50cwogICogc3RhdGVzIG9mIGFsbCBwb3NzaWJsZSBjYWJsZXMgb2YgdGhlIG11bHRpc3RhdGUgcG9ydC4gRm9yIGV4YW1wbGUsIGlmIG9uZQogICogY2FsbHMgZXh0Y29uX3NldF9zdGF0ZShlZGV2LCAweDcpLCBpdCBtYXkgbWVhbiB0aGF0IGFsbCB0aGUgdGhyZWUgY2FibGVzCkBAIC0yNTQsNiArMjY3LDMwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHRjb25fZGV2X3VucmVnaXN0ZXIoc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpIHsgfQogCitzdGF0aWMgaW5saW5lIGludCBkZXZtX2V4dGNvbl9kZXZfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldm1fZXh0Y29uX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpIHsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHRjb25fZGV2ICpleHRjb25fZGV2X2FsbG9jYXRlKGNvbnN0IGNoYXIgKipjYWJsZXMpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHRjb25fZGV2X2ZyZWUoc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYpIHsgfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHRjb25fZGV2ICpkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJCSAgY29uc3QgY2hhciAqKmNhYmxlcykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldm1fZXh0Y29uX2Rldl9mcmVlKHN0cnVjdCBleHRjb25fZGV2ICplZGV2KSB7IH0KKwogc3RhdGljIGlubGluZSB1MzIgZXh0Y29uX2dldF9zdGF0ZShzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCA5ZjNjMjc1Li5lYzI3NGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC02NDksNyArNjQ5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoZF9zdHJ1Y3RfZ2V0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpCiB7CiAJYXRvbWljX2luYygmcGFydC0+cmVmKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBoZF9zdHJ1Y3RfdHJ5X2dldChzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nb2xkZmlzaC5oIGIvaW5jbHVkZS9saW51eC9nb2xkZmlzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTIzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2dvbGRmaXNoLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX0xJTlVYX0dPTERGSVNIX0gKKyNkZWZpbmUgX19MSU5VWF9HT0xERklTSF9ICisKKy8qIEhlbHBlcnMgZm9yIEdvbGRmaXNoIHZpcnR1YWwgcGxhdGZvcm0gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGdmX3dyaXRlNjQodW5zaWduZWQgbG9uZyBkYXRhLAorCQl2b2lkIF9faW9tZW0gKnBvcnRsLCB2b2lkIF9faW9tZW0gKnBvcnRoKQoreworCXdyaXRlbCgodTMyKWRhdGEsIHBvcnRsKTsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwl3cml0ZWwoZGF0YT4+MzIsIHBvcnRoKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX19MSU5VWF9HT0xERklTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dwaW8vY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvZ3Bpby9jb25zdW1lci5oCmluZGV4IGJlZDEyOGUuLjA1ZTUzY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ3Bpby9jb25zdW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvZ3Bpby9jb25zdW1lci5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfX0xJTlVYX0dQSU9fQ09OU1VNRVJfSAogI2RlZmluZSBfX0xJTlVYX0dQSU9fQ09OU1VNRVJfSAogCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKQEAgLTIzLDYgKzI0LDEyIEBACiBzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sgZ3Bpb2RfZ2V0X2luZGV4KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbl9pZCwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBpZHgpOworc3RydWN0IGdwaW9fZGVzYyAqX19tdXN0X2NoZWNrIGdwaW9kX2dldF9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbl9pZCk7CitzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sgZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCQljb25zdCBjaGFyICpjb25faWQsCisJCQkJCQkJdW5zaWduZWQgaW50IGluZGV4KTsKKwogdm9pZCBncGlvZF9wdXQoc3RydWN0IGdwaW9fZGVzYyAqZGVzYyk7CiAKIHN0cnVjdCBncGlvX2Rlc2MgKl9fbXVzdF9jaGVjayBkZXZtX2dwaW9kX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0zMCw2ICszNywxMiBAQAogc3RydWN0IGdwaW9fZGVzYyAqX19tdXN0X2NoZWNrIGRldm1fZ3Bpb2RfZ2V0X2luZGV4KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJCSAgICBjb25zdCBjaGFyICpjb25faWQsCiAJCQkJCQkgICAgdW5zaWduZWQgaW50IGlkeCk7CitzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sgZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbl9pZCk7CitzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sKK2Rldm1fZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4KTsKKwogdm9pZCBkZXZtX2dwaW9kX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MpOwogCiBpbnQgZ3Bpb2RfZ2V0X2RpcmVjdGlvbihjb25zdCBzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjKTsKQEAgLTczLDYgKzg2LDIwIEBACiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiB9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdwaW9fZGVzYyAqX19tdXN0X2NoZWNrCitncGlvZF9nZXRfb3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdwaW9fZGVzYyAqX19tdXN0X2NoZWNrCitncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQsCisJCQkgdW5zaWduZWQgaW50IGluZGV4KQoreworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb2RfcHV0KHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MpCiB7CiAJbWlnaHRfc2xlZXAoKTsKQEAgLTkzLDYgKzEyMCwyMCBAQAogewogCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2Rlc2MgKl9fbXVzdF9jaGVjaworZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdwaW9fZGVzYyAqX19tdXN0X2NoZWNrCitkZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRldm1fZ3Bpb2RfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGdwaW9fZGVzYyAqZGVzYykKIHsKIAltaWdodF9zbGVlcCgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvL2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9ncGlvL2RyaXZlci5oCmluZGV4IDE4MjdiNDMuLjU3M2U0ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ3Bpby9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW8vZHJpdmVyLmgKQEAgLTUxLDcgKzUxLDEwIEBACiAgKiAgICAgIGZvcm1hdCBzcGVjaWZpZXIgZm9yIGFuIHVuc2lnbmVkIGludC4gIEl0IGlzIHN1YnN0aXR1dGVkIGJ5IHRoZSBhY3R1YWwKICAqICAgICAgbnVtYmVyIG9mIHRoZSBncGlvLgogICogQGNhbl9zbGVlcDogZmxhZyBtdXN0IGJlIHNldCBpZmYgZ2V0KCkvc2V0KCkgbWV0aG9kcyBzbGVlcCwgYXMgdGhleQotICoJbXVzdCB3aGlsZSBhY2Nlc3NpbmcgR1BJTyBleHBhbmRlciBjaGlwcyBvdmVyIEkyQyBvciBTUEkKKyAqCW11c3Qgd2hpbGUgYWNjZXNzaW5nIEdQSU8gZXhwYW5kZXIgY2hpcHMgb3ZlciBJMkMgb3IgU1BJLiBUaGlzCisgKglpbXBsaWVzIHRoYXQgaWYgdGhlIGNoaXAgc3VwcG9ydHMgSVJRcywgdGhlc2UgSVJRcyBuZWVkIHRvIGJlIHRocmVhZGVkCisgKglhcyB0aGUgY2hpcCBhY2Nlc3MgbWF5IHNsZWVwIHdoZW4gZS5nLiByZWFkaW5nIG91dCB0aGUgSVJRIHN0YXR1cworICoJcmVnaXN0ZXJzLgogICogQGV4cG9ydGVkOiBmbGFncyBpZiB0aGUgZ3Bpb2NoaXAgaXMgZXhwb3J0ZWQgZm9yIHVzZSBmcm9tIHN5c2ZzLiBQcml2YXRlLgogICoKICAqIEEgZ3Bpb19jaGlwIGNhbiBoZWxwIHBsYXRmb3JtcyBhYnN0cmFjdCB2YXJpb3VzIHNvdXJjZXMgb2YgR1BJT3Mgc28KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLXNlbnNvci1odWIuaCBiL2luY2x1ZGUvbGludXgvaGlkLXNlbnNvci1odWIuaAppbmRleCBiNzBjZmQ3Li41MWY3Y2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC1zZW5zb3ItaHViLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQtc2Vuc29yLWh1Yi5oCkBAIC0xODksNyArMTg5LDcgQEAKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldjsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXVuc2lnbmVkIHVzYWdlX2lkOwotCWJvb2wgZGF0YV9yZWFkeTsKKwlhdG9taWNfdCBkYXRhX3JlYWR5OwogCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZ2dlcjsKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfYXR0cmlidXRlX2luZm8gcG9sbDsKIAlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfYXR0cmlidXRlX2luZm8gcmVwb3J0X3N0YXRlOwpAQCAtMjIzLDQgKzIyMywxMCBAQAogaW50IGhpZF9zZW5zb3JfZ2V0X3VzYWdlX2luZGV4KHN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9kZXZpY2UgKmhzZGV2LAogCQkJCXUzMiByZXBvcnRfaWQsIGludCBmaWVsZF9pbmRleCwgdTMyIHVzYWdlX2lkKTsKIAoraW50IGhpZF9zZW5zb3JfZm9ybWF0X3NjYWxlKHUzMiB1c2FnZV9pZCwKKwkJCSAgICBzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfYXR0cmlidXRlX2luZm8gKmF0dHJfaW5mbywKKwkJCSAgICBpbnQgKnZhbDAsIGludCAqdmFsMSk7CisKK3MzMiBoaWRfc2Vuc29yX3JlYWRfcG9sbF92YWx1ZShzdHJ1Y3QgaGlkX3NlbnNvcl9jb21tb24gKnN0KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC1zZW5zb3ItaWRzLmggYi9pbmNsdWRlL2xpbnV4L2hpZC1zZW5zb3ItaWRzLmgKaW5kZXggMTRlYWQ5ZS4uMTA5ZjBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQtc2Vuc29yLWlkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLXNlbnNvci1pZHMuaApAQCAtNzYsNiArNzYsNyBAQAogI2RlZmluZSBISURfVVNBR0VfU0VOU09SX09SSUVOVF9USUxUX1kJCQkJMHgyMDA0ODAKICNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9PUklFTlRfVElMVF9aCQkJCTB4MjAwNDgxCiAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9ERVZJQ0VfT1JJRU5UQVRJT04JCQkweDIwMDA4QQogI2RlZmluZSBISURfVVNBR0VfU0VOU09SX09SSUVOVF9ST1RBVElPTl9NQVRSSVgJCQkweDIwMDQ4MgogI2RlZmluZSBISURfVVNBR0VfU0VOU09SX09SSUVOVF9RVUFURVJOSU9OCQkJMHgyMDA0ODMKICNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9PUklFTlRfTUFHTl9GTFVYCQkJMHgyMDA0ODQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IDcyMGUzYTEuLjc3NjMyY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtMjMzLDExICsyMzMsNiBAQAogI2RlZmluZSBISURfREdfQkFSUkVMU1dJVENICTB4MDAwZDAwNDQKICNkZWZpbmUgSElEX0RHX0VSQVNFUgkJMHgwMDBkMDA0NQogI2RlZmluZSBISURfREdfVEFCTEVUUElDSwkweDAwMGQwMDQ2Ci0vKgotICogYXMgb2YgTWF5IDIwLCAyMDA5IHRoZSB1c2FnZXMgYmVsb3cgYXJlIG5vdCB5ZXQgaW4gdGhlIG9mZmljaWFsIFVTQiBzcGVjCi0gKiBidXQgYXJlIGJlaW5nIHB1c2hlZCBieSBNaWNyb3NmdCBhcyBkZXNjcmliZWQgaW4gdGhlaXIgcGFwZXIgIkRpZ2l0aXplcgotICogRHJpdmVycyBmb3IgV2luZG93cyBUb3VjaCBhbmQgUGVuLUJhc2VkIENvbXB1dGVycyIKLSAqLwogI2RlZmluZSBISURfREdfQ09ORklERU5DRQkweDAwMGQwMDQ3CiAjZGVmaW5lIEhJRF9ER19XSURUSAkJMHgwMDBkMDA0OAogI2RlZmluZSBISURfREdfSEVJR0hUCQkweDAwMGQwMDQ5CkBAIC0yNDYsNiArMjQxLDggQEAKICNkZWZpbmUgSElEX0RHX0RFVklDRUlOREVYCTB4MDAwZDAwNTMKICNkZWZpbmUgSElEX0RHX0NPTlRBQ1RDT1VOVAkweDAwMGQwMDU0CiAjZGVmaW5lIEhJRF9ER19DT05UQUNUTUFYCTB4MDAwZDAwNTUKKyNkZWZpbmUgSElEX0RHX0JBUlJFTFNXSVRDSDIJMHgwMDBkMDA1YQorI2RlZmluZSBISURfREdfVE9PTFNFUklBTE5VTUJFUgkweDAwMGQwMDViCiAKIC8qCiAgKiBISUQgcmVwb3J0IHR5cGVzIC0tLSBPdWNoISBISUQgc3BlYyBzYXlzIDEgMiAzIQpAQCAtMjk5LDYgKzI5Niw5IEBACiAKIC8qCiAgKiBISUQgZGV2aWNlIGdyb3VwcworICoKKyAqIE5vdGU6IEhJRF9HUk9VUF9BTlkgaXMgZGVjbGFyZWQgaW4gbGludXgvbW9kX2RldmljZXRhYmxlLmgKKyAqIGFuZCBoYXMgYSB2YWx1ZSBvZiAweDAwMDAKICAqLwogI2RlZmluZSBISURfR1JPVVBfR0VORVJJQwkJCTB4MDAwMQogI2RlZmluZSBISURfR1JPVVBfTVVMVElUT1VDSAkJCTB4MDAwMgpAQCAtMzA2LDYgKzMwNiwxMSBAQAogI2RlZmluZSBISURfR1JPVVBfTVVMVElUT1VDSF9XSU5fOAkJMHgwMDA0CiAKIC8qCisgKiBWZW5kb3Igc3BlY2lmaWMgSElEIGRldmljZSBncm91cHMKKyAqLworI2RlZmluZSBISURfR1JPVVBfUk1JCQkJCTB4MDEwMAorCisvKgogICogVGhpcyBpcyB0aGUgZ2xvYmFsIGVudmlyb25tZW50IG9mIHRoZSBwYXJzZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMKICAqIHBlcnNpc3RlbnQgZm9yIG1haW4taXRlbXMuIFRoZSBnbG9iYWwgZW52aXJvbm1lbnQgY2FuIGJlIHNhdmVkIGFuZAogICogcmVzdG9yZWQgd2l0aCBQVVNIL1BPUCBzdGF0ZW1lbnRzLgpAQCAtNTcwLDYgKzU3NSw4IEBACiAJLmJ1cyA9IEJVU19VU0IsIC52ZW5kb3IgPSAodmVuKSwgLnByb2R1Y3QgPSAocHJvZCkKICNkZWZpbmUgSElEX0JMVUVUT09USF9ERVZJQ0UodmVuLCBwcm9kKQkJCQkJXAogCS5idXMgPSBCVVNfQkxVRVRPT1RILCAudmVuZG9yID0gKHZlbiksIC5wcm9kdWN0ID0gKHByb2QpCisjZGVmaW5lIEhJRF9JMkNfREVWSUNFKHZlbiwgcHJvZCkJCQkJXAorCS5idXMgPSBCVVNfSTJDLCAudmVuZG9yID0gKHZlbiksIC5wcm9kdWN0ID0gKHByb2QpCiAKICNkZWZpbmUgSElEX1JFUE9SVF9JRChyZXApIFwKIAkucmVwb3J0X3R5cGUgPSAocmVwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oc2kvaHNpLmggYi9pbmNsdWRlL2xpbnV4L2hzaS9oc2kuaAppbmRleCAzOWJmZDViLi4zZWMwNjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hzaS9oc2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hzaS9oc2kuaApAQCAtNjgsMTcgKzY4LDMxIEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBoc2lfY2hhbm5lbCAtIGNoYW5uZWwgcmVzb3VyY2UgdXNlZCBieSB0aGUgaHNpIGNsaWVudHMKKyAqIEBpZDogQ2hhbm5lbCBudW1iZXIKKyAqIEBuYW1lOiBDaGFubmVsIG5hbWUKKyAqLworc3RydWN0IGhzaV9jaGFubmVsIHsKKwl1bnNpZ25lZCBpbnQJaWQ7CisJY29uc3QgY2hhcgkqbmFtZTsKK307CisKKy8qKgogICogc3RydWN0IGhzaV9jb25maWcgLSBDb25maWd1cmF0aW9uIGZvciBSWC9UWCBIU0kgbW9kdWxlcwogICogQG1vZGU6IEJpdCB0cmFuc21pc3Npb24gbW9kZSAoU1RSRUFNIG9yIEZSQU1FKQotICogQGNoYW5uZWxzOiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gdXNlIFsxLi4xNl0KKyAqIEBjaGFubmVsczogQ2hhbm5lbCByZXNvdXJjZXMgdXNlZCBieSB0aGUgY2xpZW50CisgKiBAbnVtX2NoYW5uZWxzOiBOdW1iZXIgb2YgY2hhbm5lbCByZXNvdXJjZXMKKyAqIEBudW1faHdfY2hhbm5lbHM6IE51bWJlciBvZiBjaGFubmVscyB0aGUgdHJhbnNjZWl2ZXIgaXMgY29uZmlndXJlZCBmb3IgWzEuLjE2XQogICogQHNwZWVkOiBNYXggYml0IHRyYW5zbWlzc2lvbiBzcGVlZCAoS2JpdC9zKQogICogQGZsb3c6IFJYIGZsb3cgdHlwZSAoU1lOQ0hST05JWkVEIG9yIFBJUEVMSU5FKQogICogQGFyYl9tb2RlOiBBcmJpdHJhdGlvbiBtb2RlIGZvciBUWCBmcmFtZSAoUm91bmQgcm9iaW4sIHByaW9yaXR5KQogICovCiBzdHJ1Y3QgaHNpX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50CW1vZGU7Ci0JdW5zaWduZWQgaW50CWNoYW5uZWxzOwotCXVuc2lnbmVkIGludAlzcGVlZDsKKwl1bnNpZ25lZCBpbnQJCW1vZGU7CisJc3RydWN0IGhzaV9jaGFubmVsCSpjaGFubmVsczsKKwl1bnNpZ25lZCBpbnQJCW51bV9jaGFubmVsczsKKwl1bnNpZ25lZCBpbnQJCW51bV9od19jaGFubmVsczsKKwl1bnNpZ25lZCBpbnQJCXNwZWVkOwogCXVuaW9uIHsKIAkJdW5zaWduZWQgaW50CWZsb3c7CQkvKiBSWCBvbmx5ICovCiAJCXVuc2lnbmVkIGludAlhcmJfbW9kZTsJLyogVFggb25seSAqLwpAQCAtMjgyLDYgKzI5NiwyMSBAQAogdm9pZCBoc2lfcHV0X2NvbnRyb2xsZXIoc3RydWN0IGhzaV9jb250cm9sbGVyICpoc2kpOwogaW50IGhzaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBoc2lfY29udHJvbGxlciAqaHNpKTsKIHZvaWQgaHNpX3VucmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgaHNpX2NvbnRyb2xsZXIgKmhzaSk7CitzdHJ1Y3QgaHNpX2NsaWVudCAqaHNpX25ld19jbGllbnQoc3RydWN0IGhzaV9wb3J0ICpwb3J0LAorCQkJCQkJc3RydWN0IGhzaV9ib2FyZF9pbmZvICppbmZvKTsKK2ludCBoc2lfcmVtb3ZlX2NsaWVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpOwordm9pZCBoc2lfcG9ydF91bnJlZ2lzdGVyX2NsaWVudHMoc3RydWN0IGhzaV9wb3J0ICpwb3J0KTsKKworI2lmZGVmIENPTkZJR19PRgordm9pZCBoc2lfYWRkX2NsaWVudHNfZnJvbV9kdChzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQsCisJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2xpZW50cyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGhzaV9hZGRfY2xpZW50c19mcm9tX2R0KHN0cnVjdCBoc2lfcG9ydCAqcG9ydCwKKwkJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICpjbGllbnRzKQoreworCXJldHVybjsKK30KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHNpX2NvbnRyb2xsZXJfc2V0X2RydmRhdGEoc3RydWN0IGhzaV9jb250cm9sbGVyICpoc2ksCiAJCQkJCQkJCXZvaWQgKmRhdGEpCkBAIC0zMDUsNiArMzM0LDggQEAKICAqLwogaW50IGhzaV9hc3luYyhzdHJ1Y3QgaHNpX2NsaWVudCAqY2wsIHN0cnVjdCBoc2lfbXNnICptc2cpOwogCitpbnQgaHNpX2dldF9jaGFubmVsX2lkX2J5X25hbWUoc3RydWN0IGhzaV9jbGllbnQgKmNsLCBjaGFyICpuYW1lKTsKKwogLyoqCiAgKiBoc2lfaWQgLSBHZXQgSFNJIGNvbnRyb2xsZXIgSUQgYXNzb2NpYXRlZCB0byBhIGNsaWVudAogICogQGNsOiBQb2ludGVyIHRvIGEgSFNJIGNsaWVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oc2kvc3NpX3Byb3RvY29sLmggYi9pbmNsdWRlL2xpbnV4L2hzaS9zc2lfcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDMzNjUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9oc2kvc3NpX3Byb3RvY29sLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIHNzaXBfc2xhdmUuaAorICoKKyAqIFNTSVAgc2xhdmUgc3VwcG9ydCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDb250YWN0OiBDYXJsb3MgQ2hpbmVhIDxjYXJsb3MuY2hpbmVhQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1NTSVBfU0xBVkVfSF9fCisjZGVmaW5lIF9fTElOVVhfU1NJUF9TTEFWRV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2hzaS9oc2kuaD4KKworc3RhdGljIGlubGluZSB2b2lkIHNzaXBfc2xhdmVfcHV0X21hc3RlcihzdHJ1Y3QgaHNpX2NsaWVudCAqbWFzdGVyKQoreworfQorCitzdHJ1Y3QgaHNpX2NsaWVudCAqc3NpcF9zbGF2ZV9nZXRfbWFzdGVyKHN0cnVjdCBoc2lfY2xpZW50ICpzbGF2ZSk7CitpbnQgc3NpcF9zbGF2ZV9zdGFydF90eChzdHJ1Y3QgaHNpX2NsaWVudCAqbWFzdGVyKTsKK2ludCBzc2lwX3NsYXZlX3N0b3BfdHgoc3RydWN0IGhzaV9jbGllbnQgKm1hc3Rlcik7Cit2b2lkIHNzaXBfcmVzZXRfZXZlbnQoc3RydWN0IGhzaV9jbGllbnQgKm1hc3Rlcik7CisKK2ludCBzc2lwX3NsYXZlX3J1bm5pbmcoc3RydWN0IGhzaV9jbGllbnQgKm1hc3Rlcik7CisKKyNlbmRpZiAvKiBfX0xJTlVYX1NTSVBfU0xBVkVfSF9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCmluZGV4IDJkN2I0ZjEuLjA4Y2ZhZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmgKKysrIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaApAQCAtNjk2LDYgKzY5Niw4IEBACiAJICogcHJlc2VydmUgdGhlIGVhcmxpZXIgYmVoYXZpb3IuCiAJICovCiAJdTMyIHRhcmdldF92cDsKKwkvKiBUaGUgY29ycmVzcG9uZGluZyBDUFVJRCBpbiB0aGUgZ3Vlc3QgKi8KKwl1MzIgdGFyZ2V0X2NwdTsKIAkvKgogCSAqIFN1cHBvcnQgZm9yIHN1Yi1jaGFubmVscy4gRm9yIGhpZ2ggcGVyZm9ybWFuY2UgZGV2aWNlcywKIAkgKiBpdCB3aWxsIGJlIHVzZWZ1bCB0byBoYXZlIG11bHRpcGxlIHN1Yi1jaGFubmVscyB0byBzdXBwb3J0CkBAIC03MzIsNiArNzM0LDExIEBACiAJICogU3VwcG9ydCBwZXItY2hhbm5lbCBzdGF0ZSBmb3IgdXNlIGJ5IHZtYnVzIGRyaXZlcnMuCiAJICovCiAJdm9pZCAqcGVyX2NoYW5uZWxfc3RhdGU7CisJLyoKKwkgKiBUbyBzdXBwb3J0IHBlci1jcHUgbG9va3VwIG1hcHBpbmcgb2YgcmVsaWQgdG8gY2hhbm5lbCwKKwkgKiBsaW5rIHVwIGNoYW5uZWxzIGJhc2VkIG9uIHRoZWlyIENQVSBhZmZpbml0eS4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBlcmNwdV9saXN0OwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jaGFubmVsX3JlYWRfc3RhdGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmMsIGJvb2wgc3RhdGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lpby9jb21tb24vc3Rfc2Vuc29ycy5oIGIvaW5jbHVkZS9saW51eC9paW8vY29tbW9uL3N0X3NlbnNvcnMuaAppbmRleCAzYzAwNWViLi45NmY1MWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lpby9jb21tb24vc3Rfc2Vuc29ycy5oCisrKyBiL2luY2x1ZGUvbGludXgvaWlvL2NvbW1vbi9zdF9zZW5zb3JzLmgKQEAgLTI2OSw2ICsyNjksMTAgQEAKIAogaW50IHN0X3NlbnNvcnNfc2V0X2F4aXNfZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHU4IGF4aXNfZW5hYmxlKTsKIAordm9pZCBzdF9zZW5zb3JzX3Bvd2VyX2VuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKKwordm9pZCBzdF9zZW5zb3JzX3Bvd2VyX2Rpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CisKIGludCBzdF9zZW5zb3JzX3NldF9vZHIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgdW5zaWduZWQgaW50IG9kcik7CiAKIGludCBzdF9zZW5zb3JzX3NldF9kYXRhcmVhZHlfaXJxKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWlvL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L2lpby9jb25zdW1lci5oCmluZGV4IDI3NTJiMWYuLjY1MWY5YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWlvL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9paW8vY29uc3VtZXIuaApAQCAtMTIzLDYgKzEyMywxOSBAQAogCQkJIGludCAqdmFsKTsKIAogLyoqCisgKiBpaW9fcmVhZF9jaGFubmVsX2F2ZXJhZ2VfcmF3KCkgLSByZWFkIGZyb20gYSBnaXZlbiBjaGFubmVsCisgKiBAY2hhbjoJCVRoZSBjaGFubmVsIGJlaW5nIHF1ZXJpZWQuCisgKiBAdmFsOgkJVmFsdWUgcmVhZCBiYWNrLgorICoKKyAqIE5vdGUgcmF3IHJlYWRzIGZyb20gaWlvIGNoYW5uZWxzIGFyZSBpbiBhZGMgY291bnRzIGFuZCBoZW5jZQorICogc2NhbGUgd2lsbCBuZWVkIHRvIGJlIGFwcGxpZWQgaWYgc3RhbmRhcmQgdW5pdHMgcmVxdWlyZWQuCisgKgorICogSW4gb3Bwb3NpdCB0byB0aGUgbm9ybWFsIGlpb19yZWFkX2NoYW5uZWxfcmF3IHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgdGhlIGF2ZXJhZ2Ugb2YgbXVsdGlwbGUgcmVhZHMuCisgKi8KK2ludCBpaW9fcmVhZF9jaGFubmVsX2F2ZXJhZ2VfcmF3KHN0cnVjdCBpaW9fY2hhbm5lbCAqY2hhbiwgaW50ICp2YWwpOworCisvKioKICAqIGlpb19yZWFkX2NoYW5uZWxfcHJvY2Vzc2VkKCkgLSByZWFkIHByb2Nlc3NlZCB2YWx1ZSBmcm9tIGEgZ2l2ZW4gY2hhbm5lbAogICogQGNoYW46CQlUaGUgY2hhbm5lbCBiZWluZyBxdWVyaWVkLgogICogQHZhbDoJCVZhbHVlIHJlYWQgYmFjay4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWlvL2lpby5oIGIvaW5jbHVkZS9saW51eC9paW8vaWlvLmgKaW5kZXggNWYyZDAwZS4uY2NkZTkxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9paW8vaWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9paW8vaWlvLmgKQEAgLTE3Nyw2ICsxNzcsMTIgQEAKICAqCQkJc2hpZnQ6CQlTaGlmdCByaWdodCBieSB0aGlzIGJlZm9yZSBtYXNraW5nIG91dAogICoJCQkJCXJlYWxiaXRzLgogICoJCQllbmRpYW5uZXNzOglsaXR0bGUgb3IgYmlnIGVuZGlhbgorICoJCQlyZXBlYXQ6CQlOdW1iZXIgb2YgdGltZXMgcmVhbC9zdG9yYWdlIGJpdHMKKyAqCQkJCQlyZXBlYXRzLiBXaGVuIHRoZSByZXBlYXQgZWxlbWVudCBpcworICoJCQkJCW1vcmUgdGhhbiAxLCB0aGVuIHRoZSB0eXBlIGVsZW1lbnQgaW4KKyAqCQkJCQlzeXNmcyB3aWxsIHNob3cgYSByZXBlYXQgdmFsdWUuCisgKgkJCQkJT3RoZXJ3aXNlLCB0aGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIGlzCisgKgkJCQkJb21pdHRlZC4KICAqIEBpbmZvX21hc2tfc2VwYXJhdGU6IFdoYXQgaW5mb3JtYXRpb24gaXMgdG8gYmUgZXhwb3J0ZWQgdGhhdCBpcyBzcGVjaWZpYyB0bwogICoJCQl0aGlzIGNoYW5uZWwuCiAgKiBAaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlOiBXaGF0IGluZm9ybWF0aW9uIGlzIHRvIGJlIGV4cG9ydGVkIHRoYXQgaXMgc2hhcmVkCkBAIC0yMTksNiArMjI1LDcgQEAKIAkJdTgJcmVhbGJpdHM7CiAJCXU4CXN0b3JhZ2ViaXRzOwogCQl1OAlzaGlmdDsKKwkJdTgJcmVwZWF0OwogCQllbnVtIGlpb19lbmRpYW4gZW5kaWFubmVzczsKIAl9IHNjYW5fdHlwZTsKIAlsb25nCQkJaW5mb19tYXNrX3NlcGFyYXRlOwpAQCAtMjg4LDYgKzI5NSw4IEBACiAjZGVmaW5lIElORElPX0FMTF9CVUZGRVJfTU9ERVMJCQkJCVwKIAkoSU5ESU9fQlVGRkVSX1RSSUdHRVJFRCB8IElORElPX0JVRkZFUl9IQVJEV0FSRSkKIAorI2RlZmluZSBJTkRJT19NQVhfUkFXX0VMRU1FTlRTCQk0CisKIHN0cnVjdCBpaW9fdHJpZ2dlcjsgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RydWN0IGlpb19kZXY7CiAKQEAgLTMwMiw2ICszMTEsMTQgQEAKICAqCQkJdGhlIGNoYW5uZWwgaW4gcXVlc3Rpb24uICBSZXR1cm4gdmFsdWUgd2lsbCBzcGVjaWZ5IHRoZQogICoJCQl0eXBlIG9mIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBkZXZpY2UuIHZhbCBhbmQgdmFsMiB3aWxsCiAgKgkJCWNvbnRhaW4gdGhlIGVsZW1lbnRzIG1ha2luZyB1cCB0aGUgcmV0dXJuZWQgdmFsdWUuCisgKiBAcmVhZF9yYXdfbXVsdGk6CWZ1bmN0aW9uIHRvIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgZGV2aWNlLgorICoJCQltYXNrIHNwZWNpZmllcyB3aGljaCB2YWx1ZS4gTm90ZSAwIG1lYW5zIGEgcmVhZGluZyBvZgorICoJCQl0aGUgY2hhbm5lbCBpbiBxdWVzdGlvbi4gIFJldHVybiB2YWx1ZSB3aWxsIHNwZWNpZnkgdGhlCisgKgkJCXR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGRldmljZS4gdmFscyBwb2ludGVyCisgKgkJCWNvbnRhaW4gdGhlIGVsZW1lbnRzIG1ha2luZyB1cCB0aGUgcmV0dXJuZWQgdmFsdWUuCisgKgkJCW1heF9sZW4gc3BlY2lmaWVzIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzCisgKgkJCXZhbHMgcG9pbnRlciBjYW4gY29udGFpbi4gdmFsX2xlbiBpcyB1c2VkIHRvIHJldHVybgorICoJCQlsZW5ndGggb2YgdmFsaWQgZWxlbWVudHMgaW4gdmFscy4KICAqIEB3cml0ZV9yYXc6CQlmdW5jdGlvbiB0byB3cml0ZSBhIHZhbHVlIHRvIHRoZSBkZXZpY2UuCiAgKgkJCVBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lIGFzIGZvciByZWFkX3Jhdy4KICAqIEB3cml0ZV9yYXdfZ2V0X2ZtdDoJY2FsbGJhY2sgZnVuY3Rpb24gdG8gcXVlcnkgdGhlIGV4cGVjdGVkCkBAIC0zMjgsNiArMzQ1LDEzIEBACiAJCQlpbnQgKnZhbDIsCiAJCQlsb25nIG1hc2spOwogCisJaW50ICgqcmVhZF9yYXdfbXVsdGkpKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQlzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCWludCBtYXhfbGVuLAorCQkJaW50ICp2YWxzLAorCQkJaW50ICp2YWxfbGVuLAorCQkJbG9uZyBtYXNrKTsKKwogCWludCAoKndyaXRlX3Jhdykoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJCSBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKIAkJCSBpbnQgdmFsLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9paW8vdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaWlvL3R5cGVzLmgKaW5kZXggMDg0ZDg4Mi4uZDQ4MDYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9paW8vdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lpby90eXBlcy5oCkBAIC01Myw2ICs1Myw5IEBACiAJSUlPX01PRF9MSUdIVF9SRUQsCiAJSUlPX01PRF9MSUdIVF9HUkVFTiwKIAlJSU9fTU9EX0xJR0hUX0JMVUUsCisJSUlPX01PRF9RVUFURVJOSU9OLAorCUlJT19NT0RfVEVNUF9BTUJJRU5ULAorCUlJT19NT0RfVEVNUF9PQkpFQ1QsCiB9OwogCiBlbnVtIGlpb19ldmVudF90eXBlIHsKQEAgLTc5LDYgKzgyLDcgQEAKICNkZWZpbmUgSUlPX1ZBTF9JTlRfUExVU19NSUNSTyAyCiAjZGVmaW5lIElJT19WQUxfSU5UX1BMVVNfTkFOTyAzCiAjZGVmaW5lIElJT19WQUxfSU5UX1BMVVNfTUlDUk9fREIgNAorI2RlZmluZSBJSU9fVkFMX0lOVF9NVUxUSVBMRSA1CiAjZGVmaW5lIElJT19WQUxfRlJBQ1RJT05BTCAxMAogI2RlZmluZSBJSU9fVkFMX0ZSQUNUSU9OQUxfTE9HMiAxMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IGEzYmEyNzAuLjJkZjhlOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yOTcsMTYgKzI5NywyOCBAQAogCiAjZWxzZSAvKiBNT0RVTEUgKi8KIAotLyogRG9uJ3QgdXNlIHRoZXNlIGluIGxvYWRhYmxlIG1vZHVsZXMsIGJ1dCBzb21lIHBlb3BsZSBkby4uLiAqLworLyoKKyAqIEluIG1vc3QgY2FzZXMgbG9hZGFibGUgbW9kdWxlcyBkbyBub3QgbmVlZCBjdXN0b20KKyAqIGluaXRjYWxsIGxldmVscy4gVGhlcmUgYXJlIHN0aWxsIHNvbWUgdmFsaWQgY2FzZXMgd2hlcmUKKyAqIGEgZHJpdmVyIG1heSBiZSBuZWVkZWQgZWFybHkgaWYgYnVpbHQgaW4sIGFuZCBkb2VzIG5vdAorICogbWF0dGVyIHdoZW4gYnVpbHQgYXMgYSBsb2FkYWJsZSBtb2R1bGUuIExpa2UgYnVzCisgKiBzbm9vcGluZyBkZWJ1ZyBkcml2ZXJzLgorICovCiAjZGVmaW5lIGVhcmx5X2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKKyNkZWZpbmUgY29yZV9pbml0Y2FsbF9zeW5jKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsX3N5bmMoZm4pCW1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBhcmNoX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIHN1YnN5c19pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBzdWJzeXNfaW5pdGNhbGxfc3luYyhmbikJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIGZzX2luaXRjYWxsKGZuKQkJCW1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBmc19pbml0Y2FsbF9zeW5jKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIHJvb3Rmc19pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBkZXZpY2VfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKKyNkZWZpbmUgZGV2aWNlX2luaXRjYWxsX3N5bmMoZm4pCW1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBsYXRlX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIGxhdGVfaW5pdGNhbGxfc3luYyhmbikJCW1vZHVsZV9pbml0KGZuKQogCiAjZGVmaW5lIGNvbnNvbGVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgc2VjdXJpdHlfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDA1MWM4NTAuLmNiMTlmMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNDkxLDcgKzQ5MSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X3VubG9jayhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7IAorCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChUQVNLTEVUX1NUQVRFX1JVTiwgJih0KS0+c3RhdGUpOwogfQogCkBAIC01MzksNyArNTM5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKIHsKIAlhdG9taWNfaW5jKCZ0LT5jb3VudCk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfZGlzYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCkBAIC01NTEsMTMgKzU1MSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9lbmFibGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQogewotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfZGVjKCZ0LT5jb3VudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCiB7Ci0Jc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWF0b21pY19kZWMoJnQtPmNvdW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZnMuaCBiL2luY2x1ZGUvbGludXgva2VybmZzLmgKaW5kZXggY2ExYmU1Yy4uMTdhYTFjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5mcy5oCkBAIC0xNjEsNiArMTYxLDEwIEBACiAJLyogcHJpdmF0ZSBmaWVsZHMsIGRvIG5vdCB1c2Ugb3V0c2lkZSBrZXJuZnMgcHJvcGVyICovCiAJc3RydWN0IGlkYQkJaW5vX2lkYTsKIAlzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzeXNjYWxsX29wczsKKworCS8qIGxpc3Qgb2Yga2VybmZzX3N1cGVyX2luZm8gb2YgdGhpcyByb290LCBwcm90ZWN0ZWQgYnkga2VybmZzX211dGV4ICovCisJc3RydWN0IGxpc3RfaGVhZAlzdXBlcnM7CisKIAl3YWl0X3F1ZXVlX2hlYWRfdAlkZWFjdGl2YXRlX3dhaXRxOwogfTsKIApAQCAtMjk3LDggKzMwMSw4IEBACiAKIGNvbnN0IHZvaWQgKmtlcm5mc19zdXBlcl9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0cnVjdCBkZW50cnkgKmtlcm5mc19tb3VudF9ucyhzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQkJICAgICAgIHN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCwgYm9vbCAqbmV3X3NiX2NyZWF0ZWQsCi0JCQkgICAgICAgY29uc3Qgdm9pZCAqbnMpOworCQkJICAgICAgIHN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBtYWdpYywKKwkJCSAgICAgICBib29sICpuZXdfc2JfY3JlYXRlZCwgY29uc3Qgdm9pZCAqbnMpOwogdm9pZCBrZXJuZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogdm9pZCBrZXJuZnNfaW5pdCh2b2lkKTsKQEAgLTM5MSw3ICszOTUsOCBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKgoga2VybmZzX21vdW50X25zKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCi0JCXN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCwgYm9vbCAqbmV3X3NiX2NyZWF0ZWQsIGNvbnN0IHZvaWQgKm5zKQorCQlzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgbWFnaWMsCisJCWJvb2wgKm5ld19zYl9jcmVhdGVkLCBjb25zdCB2b2lkICpucykKIHsgcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIGtlcm5mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpIHsgfQpAQCAtNDQ5LDkgKzQ1NCwxMSBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKgoga2VybmZzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCi0JICAgICBzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QsIGJvb2wgKm5ld19zYl9jcmVhdGVkKQorCQlzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgbWFnaWMsCisJCWJvb2wgKm5ld19zYl9jcmVhdGVkKQogewotCXJldHVybiBrZXJuZnNfbW91bnRfbnMoZnNfdHlwZSwgZmxhZ3MsIHJvb3QsIG5ld19zYl9jcmVhdGVkLCBOVUxMKTsKKwlyZXR1cm4ga2VybmZzX21vdW50X25zKGZzX3R5cGUsIGZsYWdzLCByb290LAorCQkJCW1hZ2ljLCBuZXdfc2JfY3JlYXRlZCwgTlVMTCk7CiB9CiAKICNlbmRpZgkvKiBfX0xJTlVYX0tFUk5GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaCBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCmluZGV4IGY4OTZhMzMuLjJkNjFiOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC0zMiw4ICszMiwxMCBAQAogI2RlZmluZSBVRVZFTlRfTlVNX0VOVlAJCQkzMgkvKiBudW1iZXIgb2YgZW52IHBvaW50ZXJzICovCiAjZGVmaW5lIFVFVkVOVF9CVUZGRVJfU0laRQkJMjA0OAkvKiBidWZmZXIgZm9yIHRoZSB2YXJpYWJsZXMgKi8KIAorI2lmZGVmIENPTkZJR19VRVZFTlRfSEVMUEVSCiAvKiBwYXRoIHRvIHRoZSB1c2Vyc3BhY2UgaGVscGVyIGV4ZWN1dGVkIG9uIGFuIGV2ZW50ICovCiBleHRlcm4gY2hhciB1ZXZlbnRfaGVscGVyW107CisjZW5kaWYKIAogLyogY291bnRlciB0byB0YWcgdGhlIHVldmVudCwgcmVhZCBvbmx5IGV4Y2VwdCBmb3IgdGhlIGtvYmplY3QgY29yZSAqLwogZXh0ZXJuIHU2NCB1ZXZlbnRfc2VxbnVtOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDdkMjFjZjkuLjk3MGM2ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTEzNCw2ICsxMzQsOCBAQAogI2RlZmluZSBLVk1fUkVRX0VQUl9FWElUICAgICAgICAgIDIwCiAjZGVmaW5lIEtWTV9SRVFfU0NBTl9JT0FQSUMgICAgICAgMjEKICNkZWZpbmUgS1ZNX1JFUV9HTE9CQUxfQ0xPQ0tfVVBEQVRFIDIyCisjZGVmaW5lIEtWTV9SRVFfRU5BQkxFX0lCUyAgICAgICAgMjMKKyNkZWZpbmUgS1ZNX1JFUV9ESVNBQkxFX0lCUyAgICAgICAyNAogCiAjZGVmaW5lIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRAkJMAogI2RlZmluZSBLVk1fSVJRRkRfUkVTQU1QTEVfSVJRX1NPVVJDRV9JRAkxCkBAIC0xNjMsNiArMTY1LDcgQEAKIAlLVk1fTU1JT19CVVMsCiAJS1ZNX1BJT19CVVMsCiAJS1ZNX1ZJUlRJT19DQ1dfTk9USUZZX0JVUywKKwlLVk1fRkFTVF9NTUlPX0JVUywKIAlLVk1fTlJfQlVTRVMKIH07CiAKQEAgLTM2Nyw2ICszNzAsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOyAvKiB1c2Vyc3BhY2UgdGllZCB0byB0aGlzIHZtICovCiAJc3RydWN0IGt2bV9tZW1zbG90cyAqbWVtc2xvdHM7CiAJc3RydWN0IHNyY3Vfc3RydWN0IHNyY3U7CisJc3RydWN0IHNyY3Vfc3RydWN0IGlycV9zcmN1OwogI2lmZGVmIENPTkZJR19LVk1fQVBJQ19BUkNISVRFQ1RVUkUKIAl1MzIgYnNwX3ZjcHVfaWQ7CiAjZW5kaWYKQEAgLTQxMCw5ICs0MTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgbW11X25vdGlmaWVyX3NlcTsKIAlsb25nIG1tdV9ub3RpZmllcl9jb3VudDsKICNlbmRpZgotCS8qIFByb3RlY3RlZCBieSBtbXVfbG9jayAqLwotCWJvb2wgdGxic19kaXJ0eTsKLQorCWxvbmcgdGxic19kaXJ0eTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CiB9OwogCkBAIC04NzksNiArODgxLDEzIEBACiAJcmV0dXJuIChocGFfdClwZm4gPDwgUEFHRV9TSElGVDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGt2bV9pc19lcnJvcl9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpCit7CisJdW5zaWduZWQgbG9uZyBodmEgPSBnZm5fdG9faHZhKGt2bSwgZ3BhX3RvX2dmbihncGEpKTsKKworCXJldHVybiBrdm1faXNfZXJyb3JfaHZhKGh2YSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbWlncmF0ZV90aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXNldF9iaXQoS1ZNX1JFUV9NSUdSQVRFX1RJTUVSLCAmdmNwdS0+cmVxdWVzdHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYnVzLmggYi9pbmNsdWRlL2xpbnV4L21idXMuaAppbmRleCAzNDViOGM1Li41NTBjODhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21idXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21idXMuaApAQCAtNzMsNiArNzMsNiBAQAogaW50IG12ZWJ1X21idXNfaW5pdChjb25zdCBjaGFyICpzb2MsIHBoeXNfYWRkcl90IG1idXNfcGh5c19iYXNlLAogCQkgICAgc2l6ZV90IG1idXNfc2l6ZSwgcGh5c19hZGRyX3Qgc2RyYW1fcGh5c19iYXNlLAogCQkgICAgc2l6ZV90IHNkcmFtX3NpemUpOwotaW50IG12ZWJ1X21idXNfZHRfaW5pdCh2b2lkKTsKK2ludCBtdmVidV9tYnVzX2R0X2luaXQoYm9vbCBpc19jb2hlcmVudCk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX01CVVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tY2IuaCBiL2luY2x1ZGUvbGludXgvbWNiLmgKaW5kZXggMmRiMjg0ZC4uZWQwNmUxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tY2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L21jYi5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAKIHN0cnVjdCBtY2JfZHJpdmVyOworc3RydWN0IG1jYl9kZXZpY2U7CiAKIC8qKgogICogc3RydWN0IG1jYl9idXMgLSBNRU4gQ2hhbWVsZW9uIEJ1cwpAQCAtMjMsMTEgKzI0LDE0IEBACiAgKiBAZGV2OiBwb2ludGVyIHRvIGNhcnJpZXIgZGV2aWNlCiAgKiBAY2hpbGRyZW46IHRoZSBjaGlsZCBidXNzZXMKICAqIEBidXNfbnI6IG1jYiBidXMgbnVtYmVyCisgKiBAZ2V0X2lycTogY2FsbGJhY2sgdG8gZ2V0IElSUSBudW1iZXIKICAqLwogc3RydWN0IG1jYl9idXMgewogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CiAJc3RydWN0IGRldmljZSBkZXY7CisJc3RydWN0IGRldmljZSAqY2FycmllcjsKIAlpbnQgYnVzX25yOworCWludCAoKmdldF9pcnEpKHN0cnVjdCBtY2JfZGV2aWNlICpkZXYpOwogfTsKICNkZWZpbmUgdG9fbWNiX2J1cyhiKSBjb250YWluZXJfb2YoKGIpLCBzdHJ1Y3QgbWNiX2J1cywgZGV2KQogCkBAIC0xMDUsNyArMTA5LDcgQEAKIAltb2R1bGVfZHJpdmVyKF9fbWNiX2RyaXZlciwgbWNiX3JlZ2lzdGVyX2RyaXZlciwgbWNiX3VucmVnaXN0ZXJfZHJpdmVyKTsKIGV4dGVybiB2b2lkIG1jYl9idXNfYWRkX2RldmljZXMoY29uc3Qgc3RydWN0IG1jYl9idXMgKmJ1cyk7CiBleHRlcm4gaW50IG1jYl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1jYl9idXMgKmJ1cywgc3RydWN0IG1jYl9kZXZpY2UgKmRldik7Ci1leHRlcm4gc3RydWN0IG1jYl9idXMgKm1jYl9hbGxvY19idXModm9pZCk7CitleHRlcm4gc3RydWN0IG1jYl9idXMgKm1jYl9hbGxvY19idXMoc3RydWN0IGRldmljZSAqY2Fycmllcik7CiBleHRlcm4gc3RydWN0IG1jYl9idXMgKm1jYl9idXNfZ2V0KHN0cnVjdCBtY2JfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgbWNiX2J1c19wdXQoc3RydWN0IG1jYl9idXMgKmJ1cyk7CiBleHRlcm4gc3RydWN0IG1jYl9kZXZpY2UgKm1jYl9hbGxvY19kZXYoc3RydWN0IG1jYl9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKaW5kZXggOGEyMGE1MS4uNzNkYzM4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNkZWZpbmUgSU5JVF9NRU1CTE9DS19SRUdJT05TCTEyOAorI2RlZmluZSBJTklUX1BIWVNNRU1fUkVHSU9OUwk0CiAKIC8qIERlZmluaXRpb24gb2YgbWVtYmxvY2sgZmxhZ3MuICovCiAjZGVmaW5lIE1FTUJMT0NLX0hPVFBMVUcJMHgxCS8qIGhvdHBsdWdnYWJsZSByZWdpb24gKi8KQEAgLTQzLDYgKzQ0LDkgQEAKIAlwaHlzX2FkZHJfdCBjdXJyZW50X2xpbWl0OwogCXN0cnVjdCBtZW1ibG9ja190eXBlIG1lbW9yeTsKIAlzdHJ1Y3QgbWVtYmxvY2tfdHlwZSByZXNlcnZlZDsKKyNpZmRlZiBDT05GSUdfSEFWRV9NRU1CTE9DS19QSFlTX01BUAorCXN0cnVjdCBtZW1ibG9ja190eXBlIHBoeXNtZW07CisjZW5kaWYKIH07CiAKIGV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7CkBAIC03MSw2ICs3NSw2MyBAQAogdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7CiBpbnQgbWVtYmxvY2tfbWFya19ob3RwbHVnKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogaW50IG1lbWJsb2NrX2NsZWFyX2hvdHBsdWcocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CisKKy8qIExvdyBsZXZlbCBmdW5jdGlvbnMgKi8KK2ludCBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCisJCSAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAorCQkgICAgICAgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK2ludCBtZW1ibG9ja19yZW1vdmVfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCisJCQkgIHBoeXNfYWRkcl90IGJhc2UsCisJCQkgIHBoeXNfYWRkcl90IHNpemUpOworCit2b2lkIF9fbmV4dF9tZW1fcmFuZ2UodTY0ICppZHgsIGludCBuaWQsIHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlX2EsCisJCSAgICAgIHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlX2IsIHBoeXNfYWRkcl90ICpvdXRfc3RhcnQsCisJCSAgICAgIHBoeXNfYWRkcl90ICpvdXRfZW5kLCBpbnQgKm91dF9uaWQpOworCit2b2lkIF9fbmV4dF9tZW1fcmFuZ2VfcmV2KHU2NCAqaWR4LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZV9hLAorCQkJICBzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZV9iLCBwaHlzX2FkZHJfdCAqb3V0X3N0YXJ0LAorCQkJICBwaHlzX2FkZHJfdCAqb3V0X2VuZCwgaW50ICpvdXRfbmlkKTsKKworLyoqCisgKiBmb3JfZWFjaF9tZW1fcmFuZ2UgLSBpdGVyYXRlIHRocm91Z2ggbWVtYmxvY2sgYXJlYXMgZnJvbSB0eXBlX2EgYW5kIG5vdAorICogaW5jbHVkZWQgaW4gdHlwZV9iLiBPciBqdXN0IHR5cGVfYSBpZiB0eXBlX2IgaXMgTlVMTC4KKyAqIEBpOiB1NjQgdXNlZCBhcyBsb29wIHZhcmlhYmxlCisgKiBAdHlwZV9hOiBwdHIgdG8gbWVtYmxvY2tfdHlwZSB0byBpdGVyYXRlCisgKiBAdHlwZV9iOiBwdHIgdG8gbWVtYmxvY2tfdHlwZSB3aGljaCBleGNsdWRlcyBmcm9tIHRoZSBpdGVyYXRpb24KKyAqIEBuaWQ6IG5vZGUgc2VsZWN0b3IsICVOVU1BX05PX05PREUgZm9yIGFsbCBub2RlcworICogQHBfc3RhcnQ6IHB0ciB0byBwaHlzX2FkZHJfdCBmb3Igc3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAorICogQHBfZW5kOiBwdHIgdG8gcGh5c19hZGRyX3QgZm9yIGVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZSwgY2FuIGJlICVOVUxMCisgKiBAcF9uaWQ6IHB0ciB0byBpbnQgZm9yIG5pZCBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAorICovCisjZGVmaW5lIGZvcl9lYWNoX21lbV9yYW5nZShpLCB0eXBlX2EsIHR5cGVfYiwgbmlkLAkJCVwKKwkJCSAgIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkJCQlcCisJZm9yIChpID0gMCwgX19uZXh0X21lbV9yYW5nZSgmaSwgbmlkLCB0eXBlX2EsIHR5cGVfYiwJCVwKKwkJCQkgICAgIHBfc3RhcnQsIHBfZW5kLCBwX25pZCk7CQlcCisJICAgICBpICE9ICh1NjQpVUxMT05HX01BWDsJCQkJCVwKKwkgICAgIF9fbmV4dF9tZW1fcmFuZ2UoJmksIG5pZCwgdHlwZV9hLCB0eXBlX2IsCQkJXAorCQkJICAgICAgcF9zdGFydCwgcF9lbmQsIHBfbmlkKSkKKworLyoqCisgKiBmb3JfZWFjaF9tZW1fcmFuZ2VfcmV2IC0gcmV2ZXJzZSBpdGVyYXRlIHRocm91Z2ggbWVtYmxvY2sgYXJlYXMgZnJvbQorICogdHlwZV9hIGFuZCBub3QgaW5jbHVkZWQgaW4gdHlwZV9iLiBPciBqdXN0IHR5cGVfYSBpZiB0eXBlX2IgaXMgTlVMTC4KKyAqIEBpOiB1NjQgdXNlZCBhcyBsb29wIHZhcmlhYmxlCisgKiBAdHlwZV9hOiBwdHIgdG8gbWVtYmxvY2tfdHlwZSB0byBpdGVyYXRlCisgKiBAdHlwZV9iOiBwdHIgdG8gbWVtYmxvY2tfdHlwZSB3aGljaCBleGNsdWRlcyBmcm9tIHRoZSBpdGVyYXRpb24KKyAqIEBuaWQ6IG5vZGUgc2VsZWN0b3IsICVOVU1BX05PX05PREUgZm9yIGFsbCBub2RlcworICogQHBfc3RhcnQ6IHB0ciB0byBwaHlzX2FkZHJfdCBmb3Igc3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAorICogQHBfZW5kOiBwdHIgdG8gcGh5c19hZGRyX3QgZm9yIGVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZSwgY2FuIGJlICVOVUxMCisgKiBAcF9uaWQ6IHB0ciB0byBpbnQgZm9yIG5pZCBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAorICovCisjZGVmaW5lIGZvcl9lYWNoX21lbV9yYW5nZV9yZXYoaSwgdHlwZV9hLCB0eXBlX2IsIG5pZCwJCQlcCisJCQkgICAgICAgcF9zdGFydCwgcF9lbmQsIHBfbmlkKQkJCVwKKwlmb3IgKGkgPSAodTY0KVVMTE9OR19NQVgsCQkJCQlcCisJCSAgICAgX19uZXh0X21lbV9yYW5nZV9yZXYoJmksIG5pZCwgdHlwZV9hLCB0eXBlX2IsCVwKKwkJCQkJIHBfc3RhcnQsIHBfZW5kLCBwX25pZCk7CVwKKwkgICAgIGkgIT0gKHU2NClVTExPTkdfTUFYOwkJCQkJXAorCSAgICAgX19uZXh0X21lbV9yYW5nZV9yZXYoJmksIG5pZCwgdHlwZV9hLCB0eXBlX2IsCQlcCisJCQkJICBwX3N0YXJ0LCBwX2VuZCwgcF9uaWQpKQorCiAjaWZkZWYgQ09ORklHX01PVkFCTEVfTk9ERQogc3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2hvdHBsdWdnYWJsZShzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKQogewpAQCAtMTEzLDkgKzE3NCw2IEBACiAJICAgICBpID49IDA7IF9fbmV4dF9tZW1fcGZuX3JhbmdlKCZpLCBuaWQsIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkpCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfTUVNQkxPQ0tfTk9ERV9NQVAgKi8KIAotdm9pZCBfX25leHRfZnJlZV9tZW1fcmFuZ2UodTY0ICppZHgsIGludCBuaWQsIHBoeXNfYWRkcl90ICpvdXRfc3RhcnQsCi0JCQkgICBwaHlzX2FkZHJfdCAqb3V0X2VuZCwgaW50ICpvdXRfbmlkKTsKLQogLyoqCiAgKiBmb3JfZWFjaF9mcmVlX21lbV9yYW5nZSAtIGl0ZXJhdGUgdGhyb3VnaCBmcmVlIG1lbWJsb2NrIGFyZWFzCiAgKiBAaTogdTY0IHVzZWQgYXMgbG9vcCB2YXJpYWJsZQpAQCAtMTI4LDEzICsxODYsOCBAQAogICogc29vbiBhcyBtZW1ibG9jayBpcyBpbml0aWFsaXplZC4KICAqLwogI2RlZmluZSBmb3JfZWFjaF9mcmVlX21lbV9yYW5nZShpLCBuaWQsIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkJCVwKLQlmb3IgKGkgPSAwLAkJCQkJCQlcCi0JICAgICBfX25leHRfZnJlZV9tZW1fcmFuZ2UoJmksIG5pZCwgcF9zdGFydCwgcF9lbmQsIHBfbmlkKTsJXAotCSAgICAgaSAhPSAodTY0KVVMTE9OR19NQVg7CQkJCQlcCi0JICAgICBfX25leHRfZnJlZV9tZW1fcmFuZ2UoJmksIG5pZCwgcF9zdGFydCwgcF9lbmQsIHBfbmlkKSkKLQotdm9pZCBfX25leHRfZnJlZV9tZW1fcmFuZ2VfcmV2KHU2NCAqaWR4LCBpbnQgbmlkLCBwaHlzX2FkZHJfdCAqb3V0X3N0YXJ0LAotCQkJICAgICAgIHBoeXNfYWRkcl90ICpvdXRfZW5kLCBpbnQgKm91dF9uaWQpOworCWZvcl9lYWNoX21lbV9yYW5nZShpLCAmbWVtYmxvY2subWVtb3J5LCAmbWVtYmxvY2sucmVzZXJ2ZWQsCVwKKwkJCSAgIG5pZCwgcF9zdGFydCwgcF9lbmQsIHBfbmlkKQogCiAvKioKICAqIGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlX3JldmVyc2UgLSByZXYtaXRlcmF0ZSB0aHJvdWdoIGZyZWUgbWVtYmxvY2sgYXJlYXMKQEAgLTE0OCwxMCArMjAxLDggQEAKICAqIG9yZGVyLiAgQXZhaWxhYmxlIGFzIHNvb24gYXMgbWVtYmxvY2sgaXMgaW5pdGlhbGl6ZWQuCiAgKi8KICNkZWZpbmUgZm9yX2VhY2hfZnJlZV9tZW1fcmFuZ2VfcmV2ZXJzZShpLCBuaWQsIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkJXAotCWZvciAoaSA9ICh1NjQpVUxMT05HX01BWCwJCQkJCVwKLQkgICAgIF9fbmV4dF9mcmVlX21lbV9yYW5nZV9yZXYoJmksIG5pZCwgcF9zdGFydCwgcF9lbmQsIHBfbmlkKTsJXAotCSAgICAgaSAhPSAodTY0KVVMTE9OR19NQVg7CQkJCQlcCi0JICAgICBfX25leHRfZnJlZV9tZW1fcmFuZ2VfcmV2KCZpLCBuaWQsIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkpCisJZm9yX2VhY2hfbWVtX3JhbmdlX3JldihpLCAmbWVtYmxvY2subWVtb3J5LCAmbWVtYmxvY2sucmVzZXJ2ZWQsCVwKKwkJCSAgICAgICBuaWQsIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkKIAogc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9yZWdpb25fZmxhZ3Moc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciwKIAkJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYXJpem9uYS9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL2NvcmUuaAppbmRleCA1Y2Y4YjkxLi42ZDkzNzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL2NvcmUuaApAQCAtMTI0LDQgKzEyNCw3IEBACiBpbnQgd201MTEwX3BhdGNoKHN0cnVjdCBhcml6b25hICphcml6b25hKTsKIGludCB3bTg5OTdfcGF0Y2goc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEpOwogCitleHRlcm4gaW50IGFyaXpvbmFfb2ZfZ2V0X25hbWVkX2dwaW8oc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEsIGNvbnN0IGNoYXIgKnByb3AsCisJCQkJICAgICBib29sIG1hbmRhdG9yeSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYmNtNTkweHguaCBiL2luY2x1ZGUvbGludXgvbWZkL2JjbTU5MHh4LmgKaW5kZXggNDM0ZGYyZC4uMjY3YWVkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYmNtNTkweHguaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9iY201OTB4eC5oCkBAIC0xOSwxMiArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KIAogLyogbWF4IHJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgQkNNNTkwWFhfTUFYX1JFR0lTVEVSCTB4ZTcKKyNkZWZpbmUgQkNNNTkwWFhfTUFYX1JFR0lTVEVSX1BSSQkweGU3CisjZGVmaW5lIEJDTTU5MFhYX01BWF9SRUdJU1RFUl9TRUMJMHhmMAogCiBzdHJ1Y3QgYmNtNTkweHggewogCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGkyY19jbGllbnQgKmkyY19wcmk7CisJc3RydWN0IGkyY19jbGllbnQgKmkyY19zZWM7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwX3ByaTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXBfc2VjOwogCXVuc2lnbmVkIGludCBpZDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaAppbmRleCBiZGJhOGM2Li5mNTQzZGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCkBAIC02Myw3ICs2Myw3IEBACiAJLyogQSBsaXN0IG9mIHJlZ3VsYXRvciBzdXBwbGllcyB0aGF0IHNob3VsZCBiZSBtYXBwZWQgdG8gdGhlIE1GRAogCSAqIGRldmljZSByYXRoZXIgdGhhbiB0aGUgY2hpbGQgZGV2aWNlIHdoZW4gcmVxdWVzdGVkCiAJICovCi0JY29uc3QgY2hhcgkJKipwYXJlbnRfc3VwcGxpZXM7CisJY29uc3QgY2hhciAqIGNvbnN0CSpwYXJlbnRfc3VwcGxpZXM7CiAJaW50CQkJbnVtX3BhcmVudF9zdXBwbGllczsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDE0NTc3LXByaXZhdGUuaCBiL2luY2x1ZGUvbGludXgvbWZkL21heDE0NTc3LXByaXZhdGUuaAppbmRleCBjOWIzMzJmLi40OTkyNTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYXgxNDU3Ny1wcml2YXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4MTQ1NzctcHJpdmF0ZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIG1heDE0NTc3LXByaXZhdGUuaCAtIENvbW1vbiBBUEkgZm9yIHRoZSBNYXhpbSAxNDU3NyBpbnRlcm5hbCBzdWIgY2hpcAorICogbWF4MTQ1NzctcHJpdmF0ZS5oIC0gQ29tbW9uIEFQSSBmb3IgdGhlIE1heGltIDE0NTc3Lzc3ODM2IGludGVybmFsIHN1YiBjaGlwCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Rybm9pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm5vaWNzCiAgKiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KICAqIEtyenlzenRvZiBLb3psb3dza2kgPGsua296bG93c2tpQHNhbXN1bmcuY29tPgogICoKQEAgLTIyLDkgKzIyLDE5IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAKLSNkZWZpbmUgTUFYMTQ1NzdfUkVHX0lOVkFMSUQJCSgweGZmKQorI2RlZmluZSBJMkNfQUREUl9QTUlDCSgweDQ2ID4+IDEpCisjZGVmaW5lIEkyQ19BRERSX01VSUMJKDB4NEEgPj4gMSkKKyNkZWZpbmUgSTJDX0FERFJfRkcJKDB4NkMgPj4gMSkKIAotLyogU2xhdmUgYWRkciA9IDB4NEE6IEludGVycnVwdCAqLworZW51bSBtYXhpbV9kZXZpY2VfdHlwZSB7CisJTUFYSU1fREVWSUNFX1RZUEVfVU5LTk9XTgk9IDAsCisJTUFYSU1fREVWSUNFX1RZUEVfTUFYMTQ1NzcsCisJTUFYSU1fREVWSUNFX1RZUEVfTUFYNzc4MzYsCisKKwlNQVhJTV9ERVZJQ0VfVFlQRV9OVU0sCit9OworCisvKiBTbGF2ZSBhZGRyID0gMHg0QTogTVVJQyBhbmQgQ2hhcmdlciAqLwogZW51bSBtYXgxNDU3N19yZWcgewogCU1BWDE0NTc3X1JFR19ERVZJQ0VJRAkJPSAweDAwLAogCU1BWDE0NTc3X1JFR19JTlQxCQk9IDB4MDEsCkBAIC03NCwyMCArODQsMjIgQEAKIH07CiAKIC8qIE1BWDE0NTc3IGludGVycnVwdHMgKi8KLSNkZWZpbmUgSU5UMV9BRENfTUFTSwkJCSgweDEgPDwgMCkKLSNkZWZpbmUgSU5UMV9BRENMT1dfTUFTSwkJKDB4MSA8PCAxKQotI2RlZmluZSBJTlQxX0FEQ0VSUl9NQVNLCQkoMHgxIDw8IDIpCisjZGVmaW5lIE1BWDE0NTc3X0lOVDFfQURDX01BU0sJCUJJVCgwKQorI2RlZmluZSBNQVgxNDU3N19JTlQxX0FEQ0xPV19NQVNLCUJJVCgxKQorI2RlZmluZSBNQVgxNDU3N19JTlQxX0FEQ0VSUl9NQVNLCUJJVCgyKQorI2RlZmluZSBNQVg3NzgzNl9JTlQxX0FEQzFLX01BU0sJQklUKDMpCiAKLSNkZWZpbmUgSU5UMl9DSEdUWVBfTUFTSwkJKDB4MSA8PCAwKQotI2RlZmluZSBJTlQyX0NIR0RFVFJVTl9NQVNLCQkoMHgxIDw8IDEpCi0jZGVmaW5lIElOVDJfRENEVE1SX01BU0sJCSgweDEgPDwgMikKLSNkZWZpbmUgSU5UMl9EQkNIR19NQVNLCQkJKDB4MSA8PCAzKQotI2RlZmluZSBJTlQyX1ZCVk9MVF9NQVNLCQkoMHgxIDw8IDQpCisjZGVmaW5lIE1BWDE0NTc3X0lOVDJfQ0hHVFlQX01BU0sJQklUKDApCisjZGVmaW5lIE1BWDE0NTc3X0lOVDJfQ0hHREVUUlVOX01BU0sJQklUKDEpCisjZGVmaW5lIE1BWDE0NTc3X0lOVDJfRENEVE1SX01BU0sJQklUKDIpCisjZGVmaW5lIE1BWDE0NTc3X0lOVDJfREJDSEdfTUFTSwlCSVQoMykKKyNkZWZpbmUgTUFYMTQ1NzdfSU5UMl9WQlZPTFRfTUFTSwlCSVQoNCkKKyNkZWZpbmUgTUFYNzc4MzZfSU5UMl9WSURSTV9NQVNLCUJJVCg1KQogCi0jZGVmaW5lIElOVDNfRU9DX01BU0sJCQkoMHgxIDw8IDApCi0jZGVmaW5lIElOVDNfQ0dNQkNfTUFTSwkJCSgweDEgPDwgMSkKLSNkZWZpbmUgSU5UM19PVlBfTUFTSwkJCSgweDEgPDwgMikKLSNkZWZpbmUgSU5UM19NQkNDSEdFUlJfTUFTSwkJKDB4MSA8PCAzKQorI2RlZmluZSBNQVgxNDU3N19JTlQzX0VPQ19NQVNLCQlCSVQoMCkKKyNkZWZpbmUgTUFYMTQ1NzdfSU5UM19DR01CQ19NQVNLCUJJVCgxKQorI2RlZmluZSBNQVgxNDU3N19JTlQzX09WUF9NQVNLCQlCSVQoMikKKyNkZWZpbmUgTUFYMTQ1NzdfSU5UM19NQkNDSEdFUlJfTUFTSwlCSVQoMykKIAogLyogTUFYMTQ1NzcgREVWSUNFIElEIHJlZ2lzdGVyICovCiAjZGVmaW5lIERFVklEX1ZFTkRPUklEX1NISUZUCQkwCkBAIC05OSw5ICsxMTEsMTEgQEAKICNkZWZpbmUgU1RBVFVTMV9BRENfU0hJRlQJCTAKICNkZWZpbmUgU1RBVFVTMV9BRENMT1dfU0hJRlQJCTUKICNkZWZpbmUgU1RBVFVTMV9BRENFUlJfU0hJRlQJCTYKKyNkZWZpbmUgTUFYNzc4MzZfU1RBVFVTMV9BREMxS19TSElGVAk3CiAjZGVmaW5lIFNUQVRVUzFfQURDX01BU0sJCSgweDFmIDw8IFNUQVRVUzFfQURDX1NISUZUKQotI2RlZmluZSBTVEFUVVMxX0FEQ0xPV19NQVNLCQkoMHgxIDw8IFNUQVRVUzFfQURDTE9XX1NISUZUKQotI2RlZmluZSBTVEFUVVMxX0FEQ0VSUl9NQVNLCQkoMHgxIDw8IFNUQVRVUzFfQURDRVJSX1NISUZUKQorI2RlZmluZSBTVEFUVVMxX0FEQ0xPV19NQVNLCQlCSVQoU1RBVFVTMV9BRENMT1dfU0hJRlQpCisjZGVmaW5lIFNUQVRVUzFfQURDRVJSX01BU0sJCUJJVChTVEFUVVMxX0FEQ0VSUl9TSElGVCkKKyNkZWZpbmUgTUFYNzc4MzZfU1RBVFVTMV9BREMxS19NQVNLCUJJVChNQVg3NzgzNl9TVEFUVVMxX0FEQzFLX1NISUZUKQogCiAvKiBNQVgxNDU3NyBTVEFUVVMyIHJlZ2lzdGVyICovCiAjZGVmaW5lIFNUQVRVUzJfQ0hHVFlQX1NISUZUCQkwCkBAIC0xMDksMTEgKzEyMywxMyBAQAogI2RlZmluZSBTVEFUVVMyX0RDRFRNUl9TSElGVAkJNAogI2RlZmluZSBTVEFUVVMyX0RCQ0hHX1NISUZUCQk1CiAjZGVmaW5lIFNUQVRVUzJfVkJWT0xUX1NISUZUCQk2CisjZGVmaW5lIE1BWDc3ODM2X1NUQVRVUzJfVklEUk1fU0hJRlQJNwogI2RlZmluZSBTVEFUVVMyX0NIR1RZUF9NQVNLCQkoMHg3IDw8IFNUQVRVUzJfQ0hHVFlQX1NISUZUKQotI2RlZmluZSBTVEFUVVMyX0NIR0RFVFJVTl9NQVNLCQkoMHgxIDw8IFNUQVRVUzJfQ0hHREVUUlVOX1NISUZUKQotI2RlZmluZSBTVEFUVVMyX0RDRFRNUl9NQVNLCQkoMHgxIDw8IFNUQVRVUzJfRENEVE1SX1NISUZUKQotI2RlZmluZSBTVEFUVVMyX0RCQ0hHX01BU0sJCSgweDEgPDwgU1RBVFVTMl9EQkNIR19TSElGVCkKLSNkZWZpbmUgU1RBVFVTMl9WQlZPTFRfTUFTSwkJKDB4MSA8PCBTVEFUVVMyX1ZCVk9MVF9TSElGVCkKKyNkZWZpbmUgU1RBVFVTMl9DSEdERVRSVU5fTUFTSwkJQklUKFNUQVRVUzJfQ0hHREVUUlVOX1NISUZUKQorI2RlZmluZSBTVEFUVVMyX0RDRFRNUl9NQVNLCQlCSVQoU1RBVFVTMl9EQ0RUTVJfU0hJRlQpCisjZGVmaW5lIFNUQVRVUzJfREJDSEdfTUFTSwkJQklUKFNUQVRVUzJfREJDSEdfU0hJRlQpCisjZGVmaW5lIFNUQVRVUzJfVkJWT0xUX01BU0sJCUJJVChTVEFUVVMyX1ZCVk9MVF9TSElGVCkKKyNkZWZpbmUgTUFYNzc4MzZfU1RBVFVTMl9WSURSTV9NQVNLCUJJVChNQVg3NzgzNl9TVEFUVVMyX1ZJRFJNX1NISUZUKQogCiAvKiBNQVgxNDU3NyBDT05UUk9MMSByZWdpc3RlciAqLwogI2RlZmluZSBDT01OMVNXX1NISUZUCQkJMApAQCAtMTIyLDggKzEzOCw4IEBACiAjZGVmaW5lIElEQkVOX1NISUZUCQkJNwogI2RlZmluZSBDT01OMVNXX01BU0sJCQkoMHg3IDw8IENPTU4xU1dfU0hJRlQpCiAjZGVmaW5lIENPTVAyU1dfTUFTSwkJCSgweDcgPDwgQ09NUDJTV19TSElGVCkKLSNkZWZpbmUgTUlDRU5fTUFTSwkJCSgweDEgPDwgTUlDRU5fU0hJRlQpCi0jZGVmaW5lIElEQkVOX01BU0sJCQkoMHgxIDw8IElEQkVOX1NISUZUKQorI2RlZmluZSBNSUNFTl9NQVNLCQkJQklUKE1JQ0VOX1NISUZUKQorI2RlZmluZSBJREJFTl9NQVNLCQkJQklUKElEQkVOX1NISUZUKQogI2RlZmluZSBDTEVBUl9JREJFTl9NSUNFTl9NQVNLCQkoQ09NTjFTV19NQVNLIHwgQ09NUDJTV19NQVNLKQogI2RlZmluZSBDVFJMMV9TV19VU0IJCQkoKDEgPDwgQ09NUDJTV19TSElGVCkgXAogCQkJCQkJfCAoMSA8PCBDT01OMVNXX1NISUZUKSkKQEAgLTE0MywxNCArMTU5LDE0IEBACiAjZGVmaW5lIENUUkwyX0FDQ0RFVF9TSElGVAkJKDUpCiAjZGVmaW5lIENUUkwyX1VTQkNQSU5UX1NISUZUCQkoNikKICNkZWZpbmUgQ1RSTDJfUkNQU19TSElGVAkJKDcpCi0jZGVmaW5lIENUUkwyX0xPV1BXUl9NQVNLCQkoMHgxIDw8IENUUkwyX0xPV1BXUl9TSElGVCkKLSNkZWZpbmUgQ1RSTDJfQURDRU5fTUFTSwkJKDB4MSA8PCBDVFJMMl9BRENFTl9TSElGVCkKLSNkZWZpbmUgQ1RSTDJfQ1BFTl9NQVNLCQkJKDB4MSA8PCBDVFJMMl9DUEVOX1NISUZUKQotI2RlZmluZSBDVFJMMl9TRk9VVEFTUlRfTUFTSwkJKDB4MSA8PCBDVFJMMl9TRk9VVEFTUlRfU0hJRlQpCi0jZGVmaW5lIENUUkwyX1NGT1VUT1JEX01BU0sJCSgweDEgPDwgQ1RSTDJfU0ZPVVRPUkRfU0hJRlQpCi0jZGVmaW5lIENUUkwyX0FDQ0RFVF9NQVNLCQkoMHgxIDw8IENUUkwyX0FDQ0RFVF9TSElGVCkKLSNkZWZpbmUgQ1RSTDJfVVNCQ1BJTlRfTUFTSwkJKDB4MSA8PCBDVFJMMl9VU0JDUElOVF9TSElGVCkKLSNkZWZpbmUgQ1RSTDJfUkNQU19NQVNLCQkJKDB4MSA8PCBDVFIyX1JDUFNfU0hJRlQpCisjZGVmaW5lIENUUkwyX0xPV1BXUl9NQVNLCQlCSVQoQ1RSTDJfTE9XUFdSX1NISUZUKQorI2RlZmluZSBDVFJMMl9BRENFTl9NQVNLCQlCSVQoQ1RSTDJfQURDRU5fU0hJRlQpCisjZGVmaW5lIENUUkwyX0NQRU5fTUFTSwkJCUJJVChDVFJMMl9DUEVOX1NISUZUKQorI2RlZmluZSBDVFJMMl9TRk9VVEFTUlRfTUFTSwkJQklUKENUUkwyX1NGT1VUQVNSVF9TSElGVCkKKyNkZWZpbmUgQ1RSTDJfU0ZPVVRPUkRfTUFTSwkJQklUKENUUkwyX1NGT1VUT1JEX1NISUZUKQorI2RlZmluZSBDVFJMMl9BQ0NERVRfTUFTSwkJQklUKENUUkwyX0FDQ0RFVF9TSElGVCkKKyNkZWZpbmUgQ1RSTDJfVVNCQ1BJTlRfTUFTSwkJQklUKENUUkwyX1VTQkNQSU5UX1NISUZUKQorI2RlZmluZSBDVFJMMl9SQ1BTX01BU0sJCQlCSVQoQ1RSTDJfUkNQU19TSElGVCkKIAogI2RlZmluZSBDVFJMMl9DUEVOMV9MT1dQV1IwICgoMSA8PCBDVFJMMl9DUEVOX1NISUZUKSB8IFwKIAkJCQkoMCA8PCBDVFJMMl9MT1dQV1JfU0hJRlQpKQpAQCAtMTk4LDE0ICsyMTQsMTQgQEAKICNkZWZpbmUgQ0RFVENUUkwxX0RCRVhJVF9TSElGVAkJNQogI2RlZmluZSBDREVUQ1RSTDFfREJJRExFX1NISUZUCQk2CiAjZGVmaW5lIENERVRDVFJMMV9DRFBERVRfU0hJRlQJCTcKLSNkZWZpbmUgQ0RFVENUUkwxX0NIR0RFVEVOX01BU0sJCSgweDEgPDwgQ0RFVENUUkwxX0NIR0RFVEVOX1NISUZUKQotI2RlZmluZSBDREVUQ1RSTDFfQ0hHVFlQTUFOX01BU0sJKDB4MSA8PCBDREVUQ1RSTDFfQ0hHVFlQTUFOX1NISUZUKQotI2RlZmluZSBDREVUQ1RSTDFfRENERU5fTUFTSwkJKDB4MSA8PCBDREVUQ1RSTDFfRENERU5fU0hJRlQpCi0jZGVmaW5lIENERVRDVFJMMV9EQ0QyU0NUX01BU0sJCSgweDEgPDwgQ0RFVENUUkwxX0RDRDJTQ1RfU0hJRlQpCi0jZGVmaW5lIENERVRDVFJMMV9EQ0hLVE1fTUFTSwkJKDB4MSA8PCBDREVUQ1RSTDFfRENIS1RNX1NISUZUKQotI2RlZmluZSBDREVUQ1RSTDFfREJFWElUX01BU0sJCSgweDEgPDwgQ0RFVENUUkwxX0RCRVhJVF9TSElGVCkKLSNkZWZpbmUgQ0RFVENUUkwxX0RCSURMRV9NQVNLCQkoMHgxIDw8IENERVRDVFJMMV9EQklETEVfU0hJRlQpCi0jZGVmaW5lIENERVRDVFJMMV9DRFBERVRfTUFTSwkJKDB4MSA8PCBDREVUQ1RSTDFfQ0RQREVUX1NISUZUKQorI2RlZmluZSBDREVUQ1RSTDFfQ0hHREVURU5fTUFTSwkJQklUKENERVRDVFJMMV9DSEdERVRFTl9TSElGVCkKKyNkZWZpbmUgQ0RFVENUUkwxX0NIR1RZUE1BTl9NQVNLCUJJVChDREVUQ1RSTDFfQ0hHVFlQTUFOX1NISUZUKQorI2RlZmluZSBDREVUQ1RSTDFfRENERU5fTUFTSwkJQklUKENERVRDVFJMMV9EQ0RFTl9TSElGVCkKKyNkZWZpbmUgQ0RFVENUUkwxX0RDRDJTQ1RfTUFTSwkJQklUKENERVRDVFJMMV9EQ0QyU0NUX1NISUZUKQorI2RlZmluZSBDREVUQ1RSTDFfRENIS1RNX01BU0sJCUJJVChDREVUQ1RSTDFfRENIS1RNX1NISUZUKQorI2RlZmluZSBDREVUQ1RSTDFfREJFWElUX01BU0sJCUJJVChDREVUQ1RSTDFfREJFWElUX1NISUZUKQorI2RlZmluZSBDREVUQ1RSTDFfREJJRExFX01BU0sJCUJJVChDREVUQ1RSTDFfREJJRExFX1NISUZUKQorI2RlZmluZSBDREVUQ1RSTDFfQ0RQREVUX01BU0sJCUJJVChDREVUQ1RSTDFfQ0RQREVUX1NISUZUKQogCiAvKiBNQVgxNDU3NyBDSEdDVFJMMSByZWdpc3RlciAqLwogI2RlZmluZSBDSEdDVFJMMV9UQ0hXX1NISUZUCQk0CkBAIC0yMTMsOSArMjI5LDkgQEAKIAogLyogTUFYMTQ1NzcgQ0hHQ1RSTDIgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ0hHQ1RSTDJfTUJDSE9TVEVOX1NISUZUCTYKLSNkZWZpbmUgQ0hHQ1RSTDJfTUJDSE9TVEVOX01BU0sJCSgweDEgPDwgQ0hHQ1RSTDJfTUJDSE9TVEVOX1NISUZUKQorI2RlZmluZSBDSEdDVFJMMl9NQkNIT1NURU5fTUFTSwkJQklUKENIR0NUUkwyX01CQ0hPU1RFTl9TSElGVCkKICNkZWZpbmUgQ0hHQ1RSTDJfVkNIR1JfUkNfU0hJRlQJCTcKLSNkZWZpbmUgQ0hHQ1RSTDJfVkNIR1JfUkNfTUFTSwkJKDB4MSA8PCBDSEdDVFJMMl9WQ0hHUl9SQ19TSElGVCkKKyNkZWZpbmUgQ0hHQ1RSTDJfVkNIR1JfUkNfTUFTSwkJQklUKENIR0NUUkwyX1ZDSEdSX1JDX1NISUZUKQogCiAvKiBNQVgxNDU3NyBDSEdDVFJMMyByZWdpc3RlciAqLwogI2RlZmluZSBDSEdDVFJMM19NQkNDVldSQ19TSElGVAkJMApAQCAtMjI1LDcgKzI0MSw3IEBACiAjZGVmaW5lIENIR0NUUkw0X01CQ0lDSFdSQ0hfU0hJRlQJMAogI2RlZmluZSBDSEdDVFJMNF9NQkNJQ0hXUkNIX01BU0sJKDB4ZiA8PCBDSEdDVFJMNF9NQkNJQ0hXUkNIX1NISUZUKQogI2RlZmluZSBDSEdDVFJMNF9NQkNJQ0hXUkNMX1NISUZUCTQKLSNkZWZpbmUgQ0hHQ1RSTDRfTUJDSUNIV1JDTF9NQVNLCSgweDEgPDwgQ0hHQ1RSTDRfTUJDSUNIV1JDTF9TSElGVCkKKyNkZWZpbmUgQ0hHQ1RSTDRfTUJDSUNIV1JDTF9NQVNLCUJJVChDSEdDVFJMNF9NQkNJQ0hXUkNMX1NISUZUKQogCiAvKiBNQVgxNDU3NyBDSEdDVFJMNSByZWdpc3RlciAqLwogI2RlZmluZSBDSEdDVFJMNV9FT0NTX1NISUZUCQkwCkBAIC0yMzMsNyArMjQ5LDcgQEAKIAogLyogTUFYMTQ1NzcgQ0hHQ1RSTDYgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ0hHQ1RSTDZfQVVUT1NUT1BfU0hJRlQJCTUKLSNkZWZpbmUgQ0hHQ1RSTDZfQVVUT1NUT1BfTUFTSwkJKDB4MSA8PCBDSEdDVFJMNl9BVVRPU1RPUF9TSElGVCkKKyNkZWZpbmUgQ0hHQ1RSTDZfQVVUT1NUT1BfTUFTSwkJQklUKENIR0NUUkw2X0FVVE9TVE9QX1NISUZUKQogCiAvKiBNQVgxNDU3NyBDSEdDVFJMNyByZWdpc3RlciAqLwogI2RlZmluZSBDSEdDVFJMN19PVFBDR0hDVlNfU0hJRlQJMApAQCAtMjQ1LDE0ICsyNjEsMTExIEBACiAjZGVmaW5lIE1BWDE0NTc3X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RFUAkgNTAwMDAKICNkZWZpbmUgTUFYMTQ1NzdfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUFYCQk5NTAwMDAKIAorLyogTUFYNzc4MzYgcmVndWxhdG9yIGN1cnJlbnQgbGltaXRzIChhcyBpbiBDSEdDVFJMNCByZWdpc3RlciksIHVBICovCisjZGVmaW5lIE1BWDc3ODM2X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX01JTgkJIDQ1MDAwCisjZGVmaW5lIE1BWDc3ODM2X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RBUlQJMTAwMDAwCisjZGVmaW5lIE1BWDc3ODM2X1JFR1VMQVRPUl9DVVJSRU5UX0xJTUlUX0hJR0hfU1RFUAkgMjUwMDAKKyNkZWZpbmUgTUFYNzc4MzZfUkVHVUxBVE9SX0NVUlJFTlRfTElNSVRfTUFYCQk0NzUwMDAKKwogLyogTUFYMTQ1NzcgcmVndWxhdG9yIFNGT1VUIExETyB2b2x0YWdlLCBmaXhlZCwgdVYgKi8KICNkZWZpbmUgTUFYMTQ1NzdfUkVHVUxBVE9SX1NBRkVPVVRfVk9MVEFHRQkJNDkwMDAwMAogCisvKiBNQVg3NzgzNiByZWd1bGF0b3IgTERPeCB2b2x0YWdlLCB1ViAqLworI2RlZmluZSBNQVg3NzgzNl9SRUdVTEFUT1JfTERPX1ZPTFRBR0VfTUlOCQk4MDAwMDAKKyNkZWZpbmUgTUFYNzc4MzZfUkVHVUxBVE9SX0xET19WT0xUQUdFX01BWAkJMzk1MDAwMAorI2RlZmluZSBNQVg3NzgzNl9SRUdVTEFUT1JfTERPX1ZPTFRBR0VfU1RFUAkJNTAwMDAKKyNkZWZpbmUgTUFYNzc4MzZfUkVHVUxBVE9SX0xET19WT0xUQUdFX1NURVBTX05VTQk2NAorCisvKiBTbGF2ZSBhZGRyID0gMHg0NjogUE1JQyAqLworZW51bSBtYXg3NzgzNl9wbWljX3JlZyB7CisJTUFYNzc4MzZfUE1JQ19SRUdfUE1JQ19JRAkJPSAweDIwLAorCU1BWDc3ODM2X1BNSUNfUkVHX1BNSUNfUkVWCQk9IDB4MjEsCisJTUFYNzc4MzZfUE1JQ19SRUdfSU5UU1JDCQk9IDB4MjIsCisJTUFYNzc4MzZfUE1JQ19SRUdfSU5UU1JDX01BU0sJCT0gMHgyMywKKwlNQVg3NzgzNl9QTUlDX1JFR19UT1BTWVNfSU5UCQk9IDB4MjQsCisJTUFYNzc4MzZfUE1JQ19SRUdfVE9QU1lTX0lOVF9NQVNLCT0gMHgyNiwKKwlNQVg3NzgzNl9QTUlDX1JFR19UT1BTWVNfU1RBVAkJPSAweDI4LAorCU1BWDc3ODM2X1BNSUNfUkVHX01SU1RCX0NOVEwJCT0gMHgyQSwKKwlNQVg3NzgzNl9QTUlDX1JFR19MU0NORkcJCT0gMHgyQiwKKworCU1BWDc3ODM2X0xET19SRUdfQ05GRzFfTERPMQkJPSAweDUxLAorCU1BWDc3ODM2X0xET19SRUdfQ05GRzJfTERPMQkJPSAweDUyLAorCU1BWDc3ODM2X0xET19SRUdfQ05GRzFfTERPMgkJPSAweDUzLAorCU1BWDc3ODM2X0xET19SRUdfQ05GRzJfTERPMgkJPSAweDU0LAorCU1BWDc3ODM2X0xET19SRUdfQ05GR19MRE9fQklBUwkJPSAweDU1LAorCisJTUFYNzc4MzZfQ09NUF9SRUdfQ09NUDEJCQk9IDB4NjAsCisKKwlNQVg3NzgzNl9QTUlDX1JFR19FTkQsCit9OworCisjZGVmaW5lIE1BWDc3ODM2X0lOVFNSQ19NQVNLX1RPUF9JTlRfU0hJRlQJMQorI2RlZmluZSBNQVg3NzgzNl9JTlRTUkNfTUFTS19NVUlDX0NIR19JTlRfU0hJRlQJMworI2RlZmluZSBNQVg3NzgzNl9JTlRTUkNfTUFTS19UT1BfSU5UX01BU0sJQklUKE1BWDc3ODM2X0lOVFNSQ19NQVNLX1RPUF9JTlRfU0hJRlQpCisjZGVmaW5lIE1BWDc3ODM2X0lOVFNSQ19NQVNLX01VSUNfQ0hHX0lOVF9NQVNLCUJJVChNQVg3NzgzNl9JTlRTUkNfTUFTS19NVUlDX0NIR19JTlRfU0hJRlQpCisKKy8qIE1BWDc3ODM2IFBNSUMgaW50ZXJydXB0cyAqLworI2RlZmluZSBNQVg3NzgzNl9UT1BTWVNfSU5UX1QxMjBDX1NISUZUCQkwCisjZGVmaW5lIE1BWDc3ODM2X1RPUFNZU19JTlRfVDE0MENfU0hJRlQJCTEKKyNkZWZpbmUgTUFYNzc4MzZfVE9QU1lTX0lOVF9UMTIwQ19NQVNLCQlCSVQoTUFYNzc4MzZfVE9QU1lTX0lOVF9UMTIwQ19TSElGVCkKKyNkZWZpbmUgTUFYNzc4MzZfVE9QU1lTX0lOVF9UMTQwQ19NQVNLCQlCSVQoTUFYNzc4MzZfVE9QU1lTX0lOVF9UMTQwQ19TSElGVCkKKworLyogTERPMS9MRE8yIENPTkZJRzEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUFYNzc4MzZfQ05GRzFfTERPX1BXUk1EX1NISUZUCQk2CisjZGVmaW5lIE1BWDc3ODM2X0NORkcxX0xET19UVl9TSElGVAkJMAorI2RlZmluZSBNQVg3NzgzNl9DTkZHMV9MRE9fUFdSTURfTUFTSwkJKDB4MyA8PCBNQVg3NzgzNl9DTkZHMV9MRE9fUFdSTURfU0hJRlQpCisjZGVmaW5lIE1BWDc3ODM2X0NORkcxX0xET19UVl9NQVNLCQkoMHgzZiA8PCBNQVg3NzgzNl9DTkZHMV9MRE9fVFZfU0hJRlQpCisKKy8qIExETzEvTERPMiBDT05GSUcyIHJlZ2lzdGVyICovCisjZGVmaW5lIE1BWDc3ODM2X0NORkcyX0xET19PVkNMTVBFTl9TSElGVAk3CisjZGVmaW5lIE1BWDc3ODM2X0NORkcyX0xET19BTFBNRU5fU0hJRlQJCTYKKyNkZWZpbmUgTUFYNzc4MzZfQ05GRzJfTERPX0NPTVBfU0hJRlQJCTQKKyNkZWZpbmUgTUFYNzc4MzZfQ05GRzJfTERPX1BPS19TSElGVAkJMworI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fQURFX1NISUZUCQkxCisjZGVmaW5lIE1BWDc3ODM2X0NORkcyX0xET19TU19TSElGVAkJMAorI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fT1ZDTE1QRU5fTUFTSwlCSVQoTUFYNzc4MzZfQ05GRzJfTERPX09WQ0xNUEVOX1NISUZUKQorI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fQUxQTUVOX01BU0sJCUJJVChNQVg3NzgzNl9DTkZHMl9MRE9fQUxQTUVOX1NISUZUKQorI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fQ09NUF9NQVNLCQkoMHgzIDw8IE1BWDc3ODM2X0NORkcyX0xET19DT01QX1NISUZUKQorI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fUE9LX01BU0sJCUJJVChNQVg3NzgzNl9DTkZHMl9MRE9fUE9LX1NISUZUKQorI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fQURFX01BU0sJCUJJVChNQVg3NzgzNl9DTkZHMl9MRE9fQURFX1NISUZUKQorI2RlZmluZSBNQVg3NzgzNl9DTkZHMl9MRE9fU1NfTUFTSwkJQklUKE1BWDc3ODM2X0NORkcyX0xET19TU19TSElGVCkKKworLyogU2xhdmUgYWRkciA9IDB4NkM6IEZ1ZWwtR2F1Z2UvQmF0dGVyeSAqLworZW51bSBtYXg3NzgzNl9mZ19yZWcgeworCU1BWDc3ODM2X0ZHX1JFR19WQ0VMTF9NU0IJPSAweDAyLAorCU1BWDc3ODM2X0ZHX1JFR19WQ0VMTF9MU0IJPSAweDAzLAorCU1BWDc3ODM2X0ZHX1JFR19TT0NfTVNCCQk9IDB4MDQsCisJTUFYNzc4MzZfRkdfUkVHX1NPQ19MU0IJCT0gMHgwNSwKKwlNQVg3NzgzNl9GR19SRUdfTU9ERV9ICQk9IDB4MDYsCisJTUFYNzc4MzZfRkdfUkVHX01PREVfTAkJPSAweDA3LAorCU1BWDc3ODM2X0ZHX1JFR19WRVJTSU9OX01TQgk9IDB4MDgsCisJTUFYNzc4MzZfRkdfUkVHX1ZFUlNJT05fTFNCCT0gMHgwOSwKKwlNQVg3NzgzNl9GR19SRUdfSElCUlRfSAkJPSAweDBBLAorCU1BWDc3ODM2X0ZHX1JFR19ISUJSVF9MCQk9IDB4MEIsCisJTUFYNzc4MzZfRkdfUkVHX0NPTkZJR19ICT0gMHgwQywKKwlNQVg3NzgzNl9GR19SRUdfQ09ORklHX0wJPSAweDBELAorCU1BWDc3ODM2X0ZHX1JFR19WQUxSVF9NSU4JPSAweDE0LAorCU1BWDc3ODM2X0ZHX1JFR19WQUxSVF9NQVgJPSAweDE1LAorCU1BWDc3ODM2X0ZHX1JFR19DUkFURV9NU0IJPSAweDE2LAorCU1BWDc3ODM2X0ZHX1JFR19DUkFURV9MU0IJPSAweDE3LAorCU1BWDc3ODM2X0ZHX1JFR19WUkVTRVQJCT0gMHgxOCwKKwlNQVg3NzgzNl9GR19SRUdfRkdJRAkJPSAweDE5LAorCU1BWDc3ODM2X0ZHX1JFR19TVEFUVVNfSAk9IDB4MUEsCisJTUFYNzc4MzZfRkdfUkVHX1NUQVRVU19MCT0gMHgxQiwKKwkvKgorCSAqIFRPRE86IFRBQkxFIHJlZ2lzdGVycworCSAqIFRPRE86IENNRCByZWdpc3RlcgorCSAqLworCisJTUFYNzc4MzZfRkdfUkVHX0VORCwKK307CisKIGVudW0gbWF4MTQ1NzdfaXJxIHsKIAkvKiBJTlQxICovCiAJTUFYMTQ1NzdfSVJRX0lOVDFfQURDLAogCU1BWDE0NTc3X0lSUV9JTlQxX0FEQ0xPVywKIAlNQVgxNDU3N19JUlFfSU5UMV9BRENFUlIsCisJTUFYNzc4MzZfSVJRX0lOVDFfQURDMUssCiAKIAkvKiBJTlQyICovCiAJTUFYMTQ1NzdfSVJRX0lOVDJfQ0hHVFlQLApAQCAtMjYwLDYgKzM3Myw3IEBACiAJTUFYMTQ1NzdfSVJRX0lOVDJfRENEVE1SLAogCU1BWDE0NTc3X0lSUV9JTlQyX0RCQ0hHLAogCU1BWDE0NTc3X0lSUV9JTlQyX1ZCVk9MVCwKKwlNQVg3NzgzNl9JUlFfSU5UMl9WSURSTSwKIAogCS8qIElOVDMgKi8KIAlNQVgxNDU3N19JUlFfSU5UM19FT0MsCkBAIC0yNjcsMjEgKzM4MSwyNSBAQAogCU1BWDE0NTc3X0lSUV9JTlQzX09WUCwKIAlNQVgxNDU3N19JUlFfSU5UM19NQkNDSEdFUlIsCiAKKwkvKiBUT1BTWVNfSU5ULCBvbmx5IE1BWDc3ODM2ICovCisJTUFYNzc4MzZfSVJRX1RPUFNZU19UMTQwQywKKwlNQVg3NzgzNl9JUlFfVE9QU1lTX1QxMjBDLAorCiAJTUFYMTQ1NzdfSVJRX05VTSwKIH07CiAKIHN0cnVjdCBtYXgxNDU3NyB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7IC8qIFNsYXZlIGFkZHIgPSAweDRBICovCisJc3RydWN0IGkyY19jbGllbnQgKmkyY19wbWljOyAvKiBTbGF2ZSBhZGRyID0gMHg0NiAqLworCWVudW0gbWF4aW1fZGV2aWNlX3R5cGUgZGV2X3R5cGU7CiAKLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOyAvKiBGb3IgTVVJQyBhbmQgQ2hhcmdlciAqLworCXN0cnVjdCByZWdtYXAgKnJlZ21hcF9wbWljOwogCi0Jc3RydWN0IHJlZ21hcF9pcnFfY2hpcF9kYXRhICppcnFfZGF0YTsKKwlzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwX2RhdGEgKmlycV9kYXRhOyAvKiBGb3IgTVVJQyBhbmQgQ2hhcmdlciAqLworCXN0cnVjdCByZWdtYXBfaXJxX2NoaXBfZGF0YSAqaXJxX2RhdGFfcG1pYzsKIAlpbnQgaXJxOwotCi0JLyogRGV2aWNlIElEICovCi0JdTggdmVuZG9yX2lkOwkvKiBWZW5kb3IgSWRlbnRpZmljYXRpb24gKi8KLQl1OCBkZXZpY2VfaWQ7CS8qIENoaXAgVmVyc2lvbiAqLwogfTsKIAogLyogTUFYMTQ1Nzcgc2hhcmVkIHJlZ21hcCBBUEkgZnVuY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDE0NTc3LmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYXgxNDU3Ny5oCmluZGV4IDczNmQzOWMuLmM4M2ZiZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL21heDE0NTc3LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4MTQ1NzcuaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBtYXgxNDU3Ny5oIC0gRHJpdmVyIGZvciB0aGUgTWF4aW0gMTQ1NzcKKyAqIG1heDE0NTc3LmggLSBEcml2ZXIgZm9yIHRoZSBNYXhpbSAxNDU3Ny83NzgzNgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm5vaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJub2ljcwogICogQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+CiAgKiBLcnp5c3p0b2YgS296bG93c2tpIDxrLmtvemxvd3NraUBzYW1zdW5nLmNvbT4KICAqCkBAIC0yMCw2ICsyMCw5IEBACiAgKiBNQVgxNDU3NyBoYXMgTVVJQywgQ2hhcmdlciBkZXZpY2VzLgogICogVGhlIGRldmljZXMgc2hhcmUgdGhlIHNhbWUgSTJDIGJ1cyBhbmQgaW50ZXJydXB0IGxpbmUKICAqIGluY2x1ZGVkIGluIHRoaXMgbWZkIGRyaXZlci4KKyAqCisgKiBNQVg3NzgzNiBoYXMgYWRkaXRpb25hbCBQTUlDIGFuZCBGdWVsLUdhdWdlIG9uIGRpZmZlcmVudCBJMkMgc2xhdmUKKyAqIGFkZHJlc3Nlcy4KICAqLwogCiAjaWZuZGVmIF9fTUFYMTQ1NzdfSF9fCkBAIC0zMiw3ICszNSwxNyBAQAogCU1BWDE0NTc3X1NBRkVPVVQgPSAwLAogCU1BWDE0NTc3X0NIQVJHRVIsCiAKLQlNQVgxNDU3N19SRUdfTUFYLAorCU1BWDE0NTc3X1JFR1VMQVRPUl9OVU0sCit9OworCisvKiBNQVg3NzgzNiByZWd1bGF0b3IgSURzICovCitlbnVtIG1heDc3ODM2X3JlZ3VsYXRvcnMgeworCU1BWDc3ODM2X1NBRkVPVVQgPSAwLAorCU1BWDc3ODM2X0NIQVJHRVIsCisJTUFYNzc4MzZfTERPMSwKKwlNQVg3NzgzNl9MRE8yLAorCisJTUFYNzc4MzZfUkVHVUxBVE9SX05VTSwKIH07CiAKIHN0cnVjdCBtYXgxNDU3N19yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9wYWxtYXMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3BhbG1hcy5oCmluZGV4IDk5NzRlMzguLmI4Zjg3YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3BhbG1hcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3BhbG1hcy5oCkBAIC00MTUsNyArNDE1LDcgQEAKIAlzdHJ1Y3QgcGFsbWFzICpwYWxtYXM7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0Jc3RydWN0IGV4dGNvbl9kZXYgZWRldjsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldjsKIAogCWludCBpZF9vdGdfaXJxOwogCWludCBpZF9pcnE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaCBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxNC5oCmluZGV4IDRiNDQ5YjguLjkwMGNkN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxNC5oCkBAIC0xNDgsNiArMTQ4LDggQEAKICNkZWZpbmUgUzJNUFMxNF9FTkFCTEVfU0hJRlQJCTYKIC8qIE9uL09mZiBjb250cm9sbGVkIGJ5IFBXUkVOICovCiAjZGVmaW5lIFMyTVBTMTRfRU5BQkxFX1NVU1BFTkQJCSgweDAxIDw8IFMyTVBTMTRfRU5BQkxFX1NISUZUKQorLyogT24vT2ZmIGNvbnRyb2xsZWQgYnkgTERPMTBFTiBvciBFTU1DRU4gKi8KKyNkZWZpbmUgUzJNUFMxNF9FTkFCTEVfRVhUX0NPTlRST0wJKDB4MDAgPDwgUzJNUFMxNF9FTkFCTEVfU0hJRlQpCiAjZGVmaW5lIFMyTVBTMTRfTERPX05fVk9MVEFHRVMJCShTMk1QUzE0X0xET19WU0VMX01BU0sgKyAxKQogI2RlZmluZSBTMk1QUzE0X0JVQ0tfTl9WT0xUQUdFUwkJKFMyTVBTMTRfQlVDS19WU0VMX01BU0sgKyAxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24vZXh5bm9zNS1wbXUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9leHlub3M1LXBtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZWYyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24vZXh5bm9zNS1wbXUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogRXh5bm9zNSBTb0Mgc2VyaWVzIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCAoUE1VKSByZWdpc3RlciBvZmZzZXRzCisgKiBhbmQgYml0IGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfTUZEX1NZU0NPTl9QTVVfRVhZTk9TNV9IXworI2RlZmluZSBfTElOVVhfTUZEX1NZU0NPTl9QTVVfRVhZTk9TNV9IXworCisvKiBFeHlub3M1IFBNVSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBFWFlOT1M1X0hETUlfUEhZX0NPTlRST0wJCSgweDcwMCkKKyNkZWZpbmUgRVhZTk9TNV9VU0JEUkRfUEhZX0NPTlRST0wJCSgweDcwNCkKKworLyogRXh5bm9zNTI1MCBzcGVjaWZpYyByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBFWFlOT1M1X1VTQkhPU1RfUEhZX0NPTlRST0wJCSgweDcwOCkKKyNkZWZpbmUgRVhZTk9TNV9FRk5BTkRfUEhZX0NPTlRST0wJCSgweDcwYykKKyNkZWZpbmUgRVhZTk9TNV9NSVBJX1BIWTBfQ09OVFJPTAkJKDB4NzEwKQorI2RlZmluZSBFWFlOT1M1X01JUElfUEhZMV9DT05UUk9MCQkoMHg3MTQpCisjZGVmaW5lIEVYWU5PUzVfQURDX1BIWV9DT05UUk9MCQkJKDB4NzE4KQorI2RlZmluZSBFWFlOT1M1X01UQ0FEQ19QSFlfQ09OVFJPTAkJKDB4NzFjKQorI2RlZmluZSBFWFlOT1M1X0RQVFhfUEhZX0NPTlRST0wJCSgweDcyMCkKKyNkZWZpbmUgRVhZTk9TNV9TQVRBX1BIWV9DT05UUk9MCQkoMHg3MjQpCisKKy8qIEV4eW5vczU0MjAgc3BlY2lmaWMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRVhZTk9TNTQyMF9VU0JEUkQxX1BIWV9DT05UUk9MCQkoMHg3MDgpCisjZGVmaW5lIEVYWU5PUzU0MjBfVVNCSE9TVF9QSFlfQ09OVFJPTAkJKDB4NzBjKQorI2RlZmluZSBFWFlOT1M1NDIwX01JUElfUEhZMF9DT05UUk9MCQkoMHg3MTQpCisjZGVmaW5lIEVYWU5PUzU0MjBfTUlQSV9QSFkxX0NPTlRST0wJCSgweDcxOCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9NSVBJX1BIWTJfQ09OVFJPTAkJKDB4NzFjKQorI2RlZmluZSBFWFlOT1M1NDIwX0FEQ19QSFlfQ09OVFJPTAkJKDB4NzIwKQorI2RlZmluZSBFWFlOT1M1NDIwX01UQ0FEQ19QSFlfQ09OVFJPTAkJKDB4NzI0KQorI2RlZmluZSBFWFlOT1M1NDIwX0RQVFhfUEhZX0NPTlRST0wJCSgweDcyOCkKKworI2RlZmluZSBFWFlOT1M1X1BIWV9FTkFCTEUJCQlCSVQoMCkKKworI2RlZmluZSBFWFlOT1M1X01JUElfUEhZX1NfUkVTRVROCQlCSVQoMSkKKyNkZWZpbmUgRVhZTk9TNV9NSVBJX1BIWV9NX1JFU0VUTgkJQklUKDIpCisKKyNlbmRpZiAvKiBfTElOVVhfTUZEX1NZU0NPTl9QTVVfRVhZTk9TNV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oCmluZGV4IDZiOGUxZmYuLmU2MDg4YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmgKQEAgLTExMSw3ICsxMTEsNiBAQAogI2RlZmluZSBUQzM1ODl4X0lOVF9QT1JJUlEJNwogCiAjZGVmaW5lIFRDMzU4OXhfTlJfSU5URVJOQUxfSVJRUwk4Ci0jZGVmaW5lIFRDMzU4OXhfSU5UX0dQSU8oeCkJKFRDMzU4OXhfTlJfSU5URVJOQUxfSVJRUyArICh4KSkKIAogc3RydWN0IHRjMzU4OXggewogCXN0cnVjdCBtdXRleCBsb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdHBzNjUwOTAuaCBiL2luY2x1ZGUvbGludXgvbWZkL3RwczY1MDkwLmgKaW5kZXggM2Y0MzA2OS4uMGJmMjcwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdHBzNjUwOTAuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTA5MC5oCkBAIC02NCw2ICs2NCwyMCBAQAogCVRQUzY1MDkwX1JFR1VMQVRPUl9NQVgsCiB9OwogCisvKiBSZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgVFBTNjUwOTBfUkVHX0lOVFJfU1RTCTB4MDAKKyNkZWZpbmUgVFBTNjUwOTBfUkVHX0lOVFJfU1RTMgkweDAxCisjZGVmaW5lIFRQUzY1MDkwX1JFR19JTlRSX01BU0sJMHgwMgorI2RlZmluZSBUUFM2NTA5MF9SRUdfSU5UUl9NQVNLMgkweDAzCisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19DVFJMMAkweDA0CisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19DVFJMMQkweDA1CisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19DVFJMMgkweDA2CisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19DVFJMMwkweDA3CisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19DVFJMNAkweDA4CisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19DVFJMNQkweDA5CisjZGVmaW5lIFRQUzY1MDkwX1JFR19DR19TVEFUVVMxCTB4MGEKKyNkZWZpbmUgVFBTNjUwOTBfUkVHX0NHX1NUQVRVUzIJMHgwYgorCiBzdHJ1Y3QgdHBzNjUwOTAgewogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IHJlZ21hcAkJKnJtYXA7CkBAIC03OCwxMSArOTIsMTYgQEAKICAqICAgICBEQ0RDMSwgRENEQzIgYW5kIERDREMzLgogICogQGdwaW86IEdwaW8gbnVtYmVyIGlmIGV4dGVybmFsIGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgY29udHJvbGxlZCB0aHJvdWdoCiAgKiAgICAgZ3Bpby4KKyAqIEBvdmVyY3VycmVudF93YWl0X3ZhbGlkOiBUcnVlIGlmIHRoZSBvdmVyY3VycmVudF93YWl0IHNob3VsZCBiZSBhcHBsaWVkLgorICogQG92ZXJjdXJyZW50X3dhaXQ6IFZhbHVlIHRvIHNldCBhcyB0aGUgb3ZlcmN1cnJlbnQgd2FpdCB0aW1lLiAgVGhpcyBpcyB0aGUKKyAqICAgICBhY3R1YWwgYml0ZmllbGQgdmFsdWUsIG5vdCBhIHRpbWUgaW4gbXMgKHZhbGlkIHZhbHVlIGFyZSAwIC0gMykuCiAgKi8KIHN0cnVjdCB0cHM2NTA5MF9yZWd1bGF0b3JfcGxhdF9kYXRhIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVnX2luaXRfZGF0YTsKIAlib29sIGVuYWJsZV9leHRfY29udHJvbDsKIAlpbnQgZ3BpbzsKKwlib29sIG92ZXJjdXJyZW50X3dhaXRfdmFsaWQ7CisJaW50IG92ZXJjdXJyZW50X3dhaXQ7CiB9OwogCiBzdHJ1Y3QgdHBzNjUwOTBfcGxhdGZvcm1fZGF0YSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTIxNy5oIGIvaW5jbHVkZS9saW51eC9tZmQvdHBzNjUyMTcuaAppbmRleCA1NGI1NDU4Li45NWQ2OTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTIxNy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RwczY1MjE3LmgKQEAgLTI1NCw3ICsyNTQsNiBAQAogCXN0cnVjdCB0cHM2NTIxN19ib2FyZCAqcGRhdGE7CiAJdW5zaWduZWQgbG9uZyBpZDsKIAlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgZGVzY1tUUFM2NTIxN19OVU1fUkVHVUxBVE9SXTsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldltUUFM2NTIxN19OVU1fUkVHVUxBVE9SXTsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTg2eC5oIGIvaW5jbHVkZS9saW51eC9tZmQvdHBzNjU4NnguaAppbmRleCBjYmVjZWMyLi45NjE4N2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTg2eC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RwczY1ODZ4LmgKQEAgLTE3LDYgKzE3LDggQEAKICNkZWZpbmUgVFBTNjU4NjIxQQkweDE1CiAjZGVmaW5lIFRQUzY1ODYyMUNECTB4MmMKICNkZWZpbmUgVFBTNjU4NjIzCTB4MWIKKyNkZWZpbmUgVFBTNjU4NjQwCTB4MDEKKyNkZWZpbmUgVFBTNjU4NjQwdjIJMHgwMgogI2RlZmluZSBUUFM2NTg2NDMJMHgwMwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKaW5kZXggNTFlMjZmMy4uZWU4MGRkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKQEAgLTY0LDcgKzY0LDcgQEAKIAl1bW9kZV90IG1vZGU7CiB9OwogCi1leHRlcm4gaW50IG1pc2NfcmVnaXN0ZXIoc3RydWN0IG1pc2NkZXZpY2UgKiBtaXNjKTsKK2V4dGVybiBpbnQgbWlzY19yZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqbWlzYyk7CiBleHRlcm4gaW50IG1pc2NfZGVyZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqbWlzYyk7CiAKICNkZWZpbmUgTU9EVUxFX0FMSUFTX01JU0NERVYobWlub3IpCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGI0MmQwN2IuLjZjMWFlOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNDkzLDcgKzQ5Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmFwaV9lbmFibGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKQogewogCUJVR19PTighdGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRCwgJm4tPnN0YXRlKSk7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KE5BUElfU1RBVEVfU0NIRUQsICZuLT5zdGF0ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCBlNmYwOTg4Li5mYTM2Mjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC0xMzAsNiArMTMwLDEyIEBACiAJcmV0dXJuIHRlc3RfYml0KGZsYWcsICZuLT5fZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZykKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG9mX25vZGVfc2V0X2ZsYWcoc3RydWN0IGRldmljZV9ub2RlICpuLCB1bnNpZ25lZCBsb25nIGZsYWcpCiB7CiAJc2V0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKQEAgLTE5Nyw2ICsyMDMsNyBAQAogLyogZmxhZyBkZXNjcmlwdGlvbnMgKi8KICNkZWZpbmUgT0ZfRFlOQU1JQwkxIC8qIG5vZGUgYW5kIHByb3BlcnRpZXMgd2VyZSBhbGxvY2F0ZWQgdmlhIGttYWxsb2MgKi8KICNkZWZpbmUgT0ZfREVUQUNIRUQJMiAvKiBub2RlIGhhcyBiZWVuIGRldGFjaGVkIGZyb20gdGhlIGRldmljZSB0cmVlICovCisjZGVmaW5lIE9GX1BPUFVMQVRFRAkzIC8qIGRldmljZSBhbHJlYWR5IGNyZWF0ZWQgZm9yIHRoZSBub2RlICovCiAKICNkZWZpbmUgT0ZfSVNfRFlOQU1JQyh4KSB0ZXN0X2JpdChPRl9EWU5BTUlDLCAmeC0+X2ZsYWdzKQogI2RlZmluZSBPRl9NQVJLX0RZTkFNSUMoeCkgc2V0X2JpdChPRl9EWU5BTUlDLCAmeC0+X2ZsYWdzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaAppbmRleCBmMTQxMjNhLi4zOGZjMDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaApAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgogCiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiAKQEAgLTQ4LDcgKzQ3LDcgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwLCBnYyk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgZ3Bpb19kZXNjICpvZl9nZXRfbmFtZWRfZ3Bpb2RfZmxhZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwKK2V4dGVybiBpbnQgb2ZfZ2V0X25hbWVkX2dwaW9fZmxhZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJY29uc3QgY2hhciAqbGlzdF9uYW1lLCBpbnQgaW5kZXgsIGVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpOwogCiBleHRlcm4gaW50IG9mX21tX2dwaW9jaGlwX2FkZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLApAQCAtNjMsMTAgKzYyLDEwIEBACiAjZWxzZSAvKiBDT05GSUdfT0ZfR1BJTyAqLwogCiAvKiBEcml2ZXJzIG1heSBub3Qgc3RyaWN0bHkgZGVwZW5kIG9uIHRoZSBHUElPIHN1cHBvcnQsIHNvIGxldCB0aGVtIGxpbmsuICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2Rlc2MgKm9mX2dldF9uYW1lZF9ncGlvZF9mbGFncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X25hbWVkX2dwaW9fZmxhZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJY29uc3QgY2hhciAqbGlzdF9uYW1lLCBpbnQgaW5kZXgsIGVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpCiB7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CisJcmV0dXJuIC1FTk9TWVM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBncGlvX2NoaXAgKmdjLApAQCAtODEsMTggKzgwLDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19PRl9HUElPICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9uYW1lZF9ncGlvX2ZsYWdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCWNvbnN0IGNoYXIgKmxpc3RfbmFtZSwgaW50IGluZGV4LCBlbnVtIG9mX2dwaW9fZmxhZ3MgKmZsYWdzKQotewotCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7Ci0JZGVzYyA9IG9mX2dldF9uYW1lZF9ncGlvZF9mbGFncyhucCwgbGlzdF9uYW1lLCBpbmRleCwgZmxhZ3MpOwotCi0JaWYgKElTX0VSUihkZXNjKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGVzYyk7Ci0JZWxzZQotCQlyZXR1cm4gZGVzY190b19ncGlvKGRlc2MpOwotfQotCiAvKioKICAqIG9mX2dwaW9fbmFtZWRfY291bnQoKSAtIENvdW50IEdQSU9zIGZvciBhIGRldmljZQogICogQG5wOgkJZGV2aWNlIG5vZGUgdG8gY291bnQgR1BJT3MgZm9yCkBAIC0xMjksMjIgKzExNiw2IEBACiAJcmV0dXJuIG9mX2dwaW9fbmFtZWRfY291bnQobnAsICJncGlvcyIpOwogfQogCi0vKioKLSAqIG9mX2dldF9ncGlvZF9mbGFncygpIC0gR2V0IGEgR1BJTyBkZXNjcmlwdG9yIGFuZCBmbGFncyB0byB1c2Ugd2l0aCBHUElPIEFQSQotICogQG5wOgkJZGV2aWNlIG5vZGUgdG8gZ2V0IEdQSU8gZnJvbQotICogQGluZGV4OglpbmRleCBvZiB0aGUgR1BJTwotICogQGZsYWdzOglhIGZsYWdzIHBvaW50ZXIgdG8gZmlsbCBpbgotICoKLSAqIFJldHVybnMgR1BJTyBkZXNjcmlwdG9yIHRvIHVzZSB3aXRoIExpbnV4IGdlbmVyaWMgR1BJTyBBUEksIG9yIGEgZXJybm8KLSAqIHZhbHVlIG9uIHRoZSBlcnJvciBjb25kaXRpb24uIElmIEBmbGFncyBpcyBub3QgTlVMTCB0aGUgZnVuY3Rpb24gYWxzbyBmaWxscwotICogaW4gZmxhZ3MgZm9yIHRoZSBHUElPLgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2Rlc2MgKm9mX2dldF9ncGlvZF9mbGFncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCQlpbnQgaW5kZXgsIGVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpCi17Ci0JcmV0dXJuIG9mX2dldF9uYW1lZF9ncGlvZF9mbGFncyhucCwgImdwaW9zIiwgaW5kZXgsIGZsYWdzKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2dwaW9fZmxhZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4LAogCQkgICAgICBlbnVtIG9mX2dwaW9fZmxhZ3MgKmZsYWdzKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9vZl9wbGF0Zm9ybS5oCmluZGV4IDA1Y2I0YTkuLmQ5NmUxYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2ZfcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX3BsYXRmb3JtLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAqIE5vdGU6IFVzaW5nIGFuIGF1eGRhdGEgbG9va3VwIHRhYmxlIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgbGFzdCByZXNvcnQgd2hlbgogICogY29udmVydGluZyBhIHBsYXRmb3JtIHRvIHVzZSB0aGUgRFQuICBOb3JtYWxseSB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKICAqIGRldmljZSBuYW1lIHdpbGwgbm90IG1hdHRlciwgYW5kIGRyaXZlcnMgc2hvdWxkIG9idGFpbiBkYXRhIGZyb20gdGhlIGRldmljZQotICogbm9kZSBpbnN0ZWFkIG9mIGZyb20gYW4gYW5vbnltb3VucyBwbGF0Zm9ybV9kYXRhIHBvaW50ZXIuCisgKiBub2RlIGluc3RlYWQgb2YgZnJvbSBhbiBhbm9ueW1vdXMgcGxhdGZvcm1fZGF0YSBwb2ludGVyLgogICovCiBzdHJ1Y3Qgb2ZfZGV2X2F1eGRhdGEgewogCWNoYXIgKmNvbXBhdGlibGU7CkBAIC03Miw2ICs3Miw3IEBACiAJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywKIAkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2X2F1eGRhdGEgKmxvb2t1cCwKIAkJCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOworZXh0ZXJuIGludCBvZl9wbGF0Zm9ybV9kZXBvcHVsYXRlKHN0cnVjdCBkZXZpY2UgKnBhcmVudCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgb2ZfcGxhdGZvcm1fcG9wdWxhdGUoc3RydWN0IGRldmljZV9ub2RlICpyb290LAogCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLApAQCAtODAsNiArODEsMTAgQEAKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IG9mX3BsYXRmb3JtX2RlcG9wdWxhdGUoc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXJldHVybiAtRU5PREVWOworfQogI2VuZGlmCiAKICNlbmRpZgkvKiBfTElOVVhfT0ZfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggYWFiNTdiNC4uNzFkOTY3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0zNjUsNiArMzY1LDcgQEAKICNlbmRpZgogCXBoeXNfYWRkcl90IHJvbTsgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBST00gaWYgaXQncyBub3QgZnJvbSB0aGUgQkFSICovCiAJc2l6ZV90IHJvbWxlbjsgLyogTGVuZ3RoIG9mIFJPTSBpZiBpdCdzIG5vdCBmcm9tIHRoZSBCQVIgKi8KKwljaGFyICpkcml2ZXJfb3ZlcnJpZGU7IC8qIERyaXZlciBuYW1lIHRvIGZvcmNlIGEgbWF0Y2ggKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9waHlzZm4oc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTQ3Nyw2ICs0NzgsMTkgQEAKIAlyZXR1cm4gIShwYnVzLT5wYXJlbnQpOwogfQogCisvKioKKyAqIHBjaV9pc19icmlkZ2UgLSBjaGVjayBpZiB0aGUgUENJIGRldmljZSBpcyBhIGJyaWRnZQorICogQGRldjogUENJIGRldmljZQorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBQQ0kgZGV2aWNlIGlzIGJyaWRnZSB3aGV0aGVyIGl0IGhhcyBzdWJvcmRpbmF0ZQorICogb3Igbm90LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2lzX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgfHwKKwkJZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX3Vwc3RyZWFtX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWRldiA9IHBjaV9waHlzZm4oZGV2KTsKQEAgLTUxOCw3ICs1MzIsNyBAQAogCWNhc2UgUENJQklPU19GVU5DX05PVF9TVVBQT1JURUQ6CiAJCXJldHVybiAtRU5PRU5UOwogCWNhc2UgUENJQklPU19CQURfVkVORE9SX0lEOgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9UVFk7CiAJY2FzZSBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ6CiAJCXJldHVybiAtRU5PREVWOwogCWNhc2UgUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOgpAQCAtNTI5LDcgKzU0Myw3IEBACiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCXJldHVybiAtRU5PVFRZOworCXJldHVybiAtRVJBTkdFOwogfQogCiAvKiBMb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCByb3V0aW5lcyAqLwpAQCAtNjAzLDYgKzYxNyw5IEBACiAJLyogUENJIHNsb3QgaGFzIGJlZW4gcmVzZXQgKi8KIAlwY2lfZXJzX3Jlc3VsdF90ICgqc2xvdF9yZXNldCkoc3RydWN0IHBjaV9kZXYgKmRldik7CiAKKwkvKiBQQ0kgZnVuY3Rpb24gcmVzZXQgcHJlcGFyZSBvciBjb21wbGV0ZWQgKi8KKwl2b2lkICgqcmVzZXRfbm90aWZ5KShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByZXBhcmUpOworCiAJLyogRGV2aWNlIGRyaXZlciBtYXkgcmVzdW1lIG5vcm1hbCBvcGVyYXRpb25zICovCiAJdm9pZCAoKnJlc3VtZSkoc3RydWN0IHBjaV9kZXYgKmRldik7CiB9OwpAQCAtNjgwLDggKzY5Nyw4IEBACiAKIC8qKgogICogUENJX1ZERVZJQ0UgLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMgcGNpIGRldmljZSBpbiBzaG9ydCBmb3JtCi0gKiBAdmVuZG9yOiB0aGUgdmVuZG9yIG5hbWUKLSAqIEBkZXZpY2U6IHRoZSAxNiBiaXQgUENJIERldmljZSBJRAorICogQHZlbmQ6IHRoZSB2ZW5kb3IgbmFtZQorICogQGRldjogdGhlIDE2IGJpdCBQQ0kgRGV2aWNlIElECiAgKgogICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNyZWF0ZSBhIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRoYXQgbWF0Y2hlcyBhCiAgKiBzcGVjaWZpYyBQQ0kgZGV2aWNlLiAgVGhlIHN1YnZlbmRvciwgYW5kIHN1YmRldmljZSBmaWVsZHMgd2lsbCBiZSBzZXQKQEAgLTY4OSw5ICs3MDYsOSBAQAogICogcHJpdmF0ZSBkYXRhLgogICovCiAKLSNkZWZpbmUgUENJX1ZERVZJQ0UodmVuZG9yLCBkZXZpY2UpCQlcCi0JUENJX1ZFTkRPUl9JRF8jI3ZlbmRvciwgKGRldmljZSksCVwKLQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwCisjZGVmaW5lIFBDSV9WREVWSUNFKHZlbmQsIGRldikgXAorCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEXyMjdmVuZCwgLmRldmljZSA9IChkZXYpLCBcCisJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELCAwLCAwCiAKIC8qIHRoZXNlIGV4dGVybmFsIGZ1bmN0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiBQQ0kgc3VwcG9ydCBpcyBlbmFibGVkICovCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtNzY0LDcgKzc4MSw3IEBACiBzdHJ1Y3QgcGNpX2RldiAqcGNpX3NjYW5fc2luZ2xlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pOwogdm9pZCBwY2lfZGV2aWNlX2FkZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIHVuc2lnbmVkIGludCBwY2lfc2Nhbl9jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7Ci1pbnQgX19tdXN0X2NoZWNrIHBjaV9idXNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3ZvaWQgcGNpX2J1c19hZGRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKTsKIHN0cnVjdCByZXNvdXJjZSAqcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSAgc3RydWN0IHJlc291cmNlICpyZXMpOwpAQCAtMTE1OCw3ICsxMTc1LDYgQEAKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiBpbnQgcGNpX21zaV92ZWNfY291bnQoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1pbnQgcGNpX2VuYWJsZV9tc2lfYmxvY2soc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMpOwogdm9pZCBwY2lfbXNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX21zaXhfdmVjX2NvdW50KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtMTE4OCw4ICsxMjA0LDYgQEAKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2lfbXNpX3ZlY19jb3VudChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAtRU5PU1lTOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX21zaV9ibG9jayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYykKLXsgcmV0dXJuIC1FTk9TWVM7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbXNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9tc2l4X3ZlY19jb3VudChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAtRU5PU1lTOyB9CkBAIC0xMjQ0LDcgKzEyNTgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZWNyY19nZXRfcG9saWN5KGNoYXIgKnN0cikgeyB9CiAjZW5kaWYKIAotI2RlZmluZSBwY2lfZW5hYmxlX21zaShwZGV2KQlwY2lfZW5hYmxlX21zaV9ibG9jayhwZGV2LCAxKQorI2RlZmluZSBwY2lfZW5hYmxlX21zaShwZGV2KQlwY2lfZW5hYmxlX21zaV9leGFjdChwZGV2LCAxKQogCiAjaWZkZWYgQ09ORklHX0hUX0lSUQogLyogVGhlIGZ1bmN0aW9ucyBhIGRyaXZlciBzaG91bGQgY2FsbCAqLwpAQCAtMTU3MiwxMyArMTU4NiwxMyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2hvdHBsdWdfbWVtX3NpemU7CiAKIC8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2ZXJzaW9ucyBtYXkgb3ZlcnJpZGUgdGhlc2UgKHdlYWspICovCi1pbnQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpYmlvc19kaXNhYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaWJpb3Nfc2V0X3BjaWVfcmVzZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgZW51bSBwY2llX3Jlc2V0X3N0YXRlIHN0YXRlKTsKIGludCBwY2liaW9zX2FkZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaWJpb3NfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7Cit2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxLCBpbnQgYWN0aXZlKTsKIAogI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiBleHRlcm4gc3RydWN0IGRldl9wbV9vcHMgcGNpYmlvc19wbV9vcHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGQ0ZGUyNGIuLjdmYTMxNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xNjMxLDggKzE2MzEsNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUVF9WRU5VU19NT0RFTQkweDQ4MAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1BFQ0lBTElYCQkweDExY2IKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfSU84CTB4MjAwMAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9SSU8JMHg4MDAwCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfU1BFQ0lBTElYX1NQRUVENCAweGEwMDQKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FOQUxPR19ERVZJQ0VTCTB4MTFkNApAQCAtMjg3NCw3ICsyODcyLDYgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQ0FMRU1QX1ZTTVBfQ1RMCTB4MTAxMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUFVUT05FCQkweDhlMGUKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QVVRPTkVfSVAyRVgJMHgwMjkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUFVUT05FX1BHCTB4MDMwMgogI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0NPTVBVVE9ORQkweDhlMGUKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT01QVVRPTkVfUEc0CTB4MDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggZTdhMGI5NS4uNDk1YzY1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC02MzksNyArNjM5LDcgQEAKICMgIGRlZmluZSByYXdfY3B1X2FkZF9yZXR1cm5fOChwY3AsIHZhbCkJcmF3X2NwdV9nZW5lcmljX2FkZF9yZXR1cm4ocGNwLCB2YWwpCiAjIGVuZGlmCiAjIGRlZmluZSByYXdfY3B1X2FkZF9yZXR1cm4ocGNwLCB2YWwpCVwKLQlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIocmF3X2FkZF9yZXR1cm5fLCBwY3AsIHZhbCkKKwlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIocmF3X2NwdV9hZGRfcmV0dXJuXywgcGNwLCB2YWwpCiAjZW5kaWYKIAogI2RlZmluZSByYXdfY3B1X3N1Yl9yZXR1cm4ocGNwLCB2YWwpCXJhd19jcHVfYWRkX3JldHVybihwY3AsIC0odHlwZW9mKHBjcCkpKHZhbCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDNlZjZlYTEuLmE5MjA5MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0xNzIsNiArMTcyLDcgQEAKIHN0cnVjdCBwbXUgewogCXN0cnVjdCBsaXN0X2hlYWQJCWVudHJ5OwogCisJc3RydWN0IG1vZHVsZQkJCSptb2R1bGU7CiAJc3RydWN0IGRldmljZQkJCSpkZXY7CiAJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqKmF0dHJfZ3JvdXBzOwogCWNvbnN0IGNoYXIJCQkqbmFtZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmgKaW5kZXggYjNjYTFlOS4uNzgxOWZjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmgKQEAgLTcsMjMgKzcsMTAgQEAKICNpZm5kZWYgX0FUOTFfQURDX0hfCiAjZGVmaW5lIF9BVDkxX0FEQ19IXwogCi0vKioKLSAqIHN0cnVjdCBhdDkxX2FkY19yZWdfZGVzYyAtIFZhcmlvdXMgaW5mb3JtYXRpb25zIHJlbGF0aXZlIHRvIHJlZ2lzdGVycwotICogQGNoYW5uZWxfYmFzZToJQmFzZSBvZmZzZXQgZm9yIHRoZSBjaGFubmVsIGRhdGEgcmVnaXN0ZXJzCi0gKiBAZHJkeV9tYXNrOgkJTWFzayBvZiB0aGUgRFJEWSBmaWVsZCBpbiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzCi0JCQkoSW50ZXJydXB0aW9ucyByZWdpc3RlcnMgbW9zdGx5KQotICogQHN0YXR1c19yZWdpc3RlcjoJT2Zmc2V0IG9mIHRoZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCi0gKiBAdHJpZ2dlcl9yZWdpc3RlcjoJT2Zmc2V0IG9mIHRoZSBUcmlnZ2VyIHNldHVwIHJlZ2lzdGVyCi0gKiBAbXJfcHJlc2NhbF9tYXNrOglNYXNrIG9mIHRoZSBQUkVTQ0FMIGZpZWxkIGluIHRoZSBhZGMgTVIgcmVnaXN0ZXIKLSAqIEBtcl9zdGFydHVwX21hc2s6CU1hc2sgb2YgdGhlIFNUQVJUVVAgZmllbGQgaW4gdGhlIGFkYyBNUiByZWdpc3RlcgotICovCi1zdHJ1Y3QgYXQ5MV9hZGNfcmVnX2Rlc2MgewotCXU4CWNoYW5uZWxfYmFzZTsKLQl1MzIJZHJkeV9tYXNrOwotCXU4CXN0YXR1c19yZWdpc3RlcjsKLQl1OAl0cmlnZ2VyX3JlZ2lzdGVyOwotCXUzMgltcl9wcmVzY2FsX21hc2s7Ci0JdTMyCW1yX3N0YXJ0dXBfbWFzazsKK2VudW0gYXRtZWxfYWRjX3RzX3R5cGUgeworCUFUTUVMX0FEQ19UT1VDSFNDUkVFTl9OT05FID0gMCwKKwlBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUgPSA0LAorCUFUTUVMX0FEQ19UT1VDSFNDUkVFTl81V0lSRSA9IDUsCiB9OwogCiAvKioKQEAgLTQyLDIzICsyOSwyMSBAQAogLyoqCiAgKiBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAtIHBsYXRmb3JtIGRhdGEgZm9yIEFEQyBkcml2ZXIKICAqIEBjaGFubmVsc191c2VkOgkJY2hhbm5lbHMgaW4gdXNlIG9uIHRoZSBib2FyZCBhcyBhIGJpdG1hc2sKLSAqIEBudW1fY2hhbm5lbHM6CQlnbG9iYWwgbnVtYmVyIG9mIGNoYW5uZWxzIGF2YWlsYWJsZSBvbiB0aGUgYm9hcmQKLSAqIEByZWdpc3RlcnM6CQkJUmVnaXN0ZXJzIGRlZmluaXRpb24gb24gdGhlIGJvYXJkCiAgKiBAc3RhcnR1cF90aW1lOgkJc3RhcnR1cCB0aW1lIG9mIHRoZSBBREMgaW4gbWljcm9zZWNvbmRzCiAgKiBAdHJpZ2dlcl9saXN0OgkJVHJpZ2dlcnMgYXZhaWxhYmxlIGluIHRoZSBBREMKICAqIEB0cmlnZ2VyX251bWJlcjoJCU51bWJlciBvZiB0cmlnZ2VycyBhdmFpbGFibGUgaW4gdGhlIEFEQwogICogQHVzZV9leHRlcm5hbF90cmlnZ2VyczoJZG9lcyB0aGUgYm9hcmQgaGFzIGV4dGVybmFsIHRyaWdnZXJzIGF2YWlsYWJsZXMKICAqIEB2cmVmOgkJCVJlZmVyZW5jZSB2b2x0YWdlIGZvciB0aGUgQURDIGluIG1pbGxpdm9sdHMKKyAqIEB0b3VjaHNjcmVlbl90eXBlOgkJSWYgYSB0b3VjaHNjcmVlbiBpcyBjb25uZWN0ZWQsIGl0cyB0eXBlICg0IG9yIDUgd2lyZXMpCiAgKi8KIHN0cnVjdCBhdDkxX2FkY19kYXRhIHsKIAl1bnNpZ25lZCBsb25nCQkJY2hhbm5lbHNfdXNlZDsKLQl1OAkJCQludW1fY2hhbm5lbHM7Ci0Jc3RydWN0IGF0OTFfYWRjX3JlZ19kZXNjCSpyZWdpc3RlcnM7CiAJdTgJCQkJc3RhcnR1cF90aW1lOwogCXN0cnVjdCBhdDkxX2FkY190cmlnZ2VyCQkqdHJpZ2dlcl9saXN0OwogCXU4CQkJCXRyaWdnZXJfbnVtYmVyOwogCWJvb2wJCQkJdXNlX2V4dGVybmFsX3RyaWdnZXJzOwogCXUxNgkJCQl2cmVmOworCWVudW0gYXRtZWxfYWRjX3RzX3R5cGUJCXRvdWNoc2NyZWVuX3R5cGU7CiB9OwogCiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FkYyhzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSAqZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvYXRtZWwuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9hdG1lbC5oCmluZGV4IGUyNmIwYzEuLjRiNDUyYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9hdG1lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9hdG1lbC5oCkBAIC04NCwxNCArODQsNiBAQAogCXNob3J0CQkJdXNlX2RtYV9yeDsJLyogdXNlIHJlY2VpdmUgRE1BPyAqLwogCXZvaWQgX19pb21lbQkJKnJlZ3M7CQkvKiB2aXJ0LiBiYXNlIGFkZHJlc3MsIGlmIGFueSAqLwogCXN0cnVjdCBzZXJpYWxfcnM0ODUJcnM0ODU7CQkvKiByczQ4NSBzZXR0aW5ncyAqLwotCWludAkJCXJ0c19ncGlvOwkvKiBvcHRpb25hbCBSVFMgR1BJTyAqLwotfTsKLQotIC8qIFRvdWNoc2NyZWVuIENvbnRyb2xsZXIgKi8KLXN0cnVjdCBhdDkxX3RzYWRjY19kYXRhIHsKLQl1bnNpZ25lZCBpbnQgICAgYWRjX2Nsb2NrOwotCXU4CQlwZW5kZXRfZGVib3VuY2U7Ci0JdTgJCXRzX3NhbXBsZV9ob2xkX3RpbWU7CiB9OwogCiAvKiBDQU4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9lZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZWRtYS5oCmluZGV4IGY1MDgyMWMuLmViOGQ1NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9lZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2VkbWEuaApAQCAtNDMsMTUgKzQzLDE1IEBACiAKIC8qIFBhUkFNIHNsb3RzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXMgKi8KIHN0cnVjdCBlZG1hY2NfcGFyYW0gewotCXVuc2lnbmVkIGludCBvcHQ7Ci0JdW5zaWduZWQgaW50IHNyYzsKLQl1bnNpZ25lZCBpbnQgYV9iX2NudDsKLQl1bnNpZ25lZCBpbnQgZHN0OwotCXVuc2lnbmVkIGludCBzcmNfZHN0X2JpZHg7Ci0JdW5zaWduZWQgaW50IGxpbmtfYmNudHJsZDsKLQl1bnNpZ25lZCBpbnQgc3JjX2RzdF9jaWR4OwotCXVuc2lnbmVkIGludCBjY250OwotfTsKKwl1MzIgb3B0OworCXUzMiBzcmM7CisJdTMyIGFfYl9jbnQ7CisJdTMyIGRzdDsKKwl1MzIgc3JjX2RzdF9iaWR4OworCXUzMiBsaW5rX2JjbnRybGQ7CisJdTMyIHNyY19kc3RfY2lkeDsKKwl1MzIgY2NudDsKK30gX19wYWNrZWQ7CiAKIC8qIGZpZWxkcyBpbiBlZG1hY2NfcGFyYW0ub3B0ICovCiAjZGVmaW5lIFNBTQkJQklUKDApCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJCQllbnVtIGFkZHJlc3NfbW9kZSBtb2RlLCBlbnVtIGZpZm9fd2lkdGgpOwogdm9pZCBlZG1hX3NldF9kZXN0KHVuc2lnbmVkIHNsb3QsIGRtYV9hZGRyX3QgZGVzdF9wb3J0LAogCQkJCSBlbnVtIGFkZHJlc3NfbW9kZSBtb2RlLCBlbnVtIGZpZm9fd2lkdGgpOwotdm9pZCBlZG1hX2dldF9wb3NpdGlvbih1bnNpZ25lZCBzbG90LCBkbWFfYWRkcl90ICpzcmMsIGRtYV9hZGRyX3QgKmRzdCk7CitkbWFfYWRkcl90IGVkbWFfZ2V0X3Bvc2l0aW9uKHVuc2lnbmVkIHNsb3QsIGJvb2wgZHN0KTsKIHZvaWQgZWRtYV9zZXRfc3JjX2luZGV4KHVuc2lnbmVkIHNsb3QsIHMxNiBzcmNfYmlkeCwgczE2IHNyY19jaWR4KTsKIHZvaWQgZWRtYV9zZXRfZGVzdF9pbmRleCh1bnNpZ25lZCBzbG90LCBzMTYgZGVzdF9iaWR4LCBzMTYgZGVzdF9jaWR4KTsKIHZvaWQgZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKHVuc2lnbmVkIHNsb3QsIHUxNiBhY250LCB1MTYgYmNudCwgdTE2IGNjbnQsCkBAIC0xNTgsMTMgKzE1OCw2IEBACiAKIC8qIHBsYXRmb3JtX2RhdGEgZm9yIEVETUEgZHJpdmVyICovCiBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyB7Ci0KLQkvKiBob3cgbWFueSBkbWEgcmVzb3VyY2VzIG9mIGVhY2ggdHlwZSAqLwotCXVuc2lnbmVkCW5fY2hhbm5lbDsKLQl1bnNpZ25lZAluX3JlZ2lvbjsKLQl1bnNpZ25lZAluX3Nsb3Q7Ci0JdW5zaWduZWQJbl90YzsKLQl1bnNpZ25lZAluX2NjOwogCS8qCiAJICogRGVmYXVsdCBxdWV1ZSBpcyBleHBlY3RlZCB0byBiZSBhIGxvdy1wcmlvcml0eSBxdWV1ZS4KIAkgKiBUaGlzIHdheSwgbG9uZyB0cmFuc2ZlcnMgb24gdGhlIGRlZmF1bHQgcXVldWUgc3RhcnRlZApAQCAtMTc1LDcgKzE2OCw2IEBACiAJLyogUmVzb3VyY2UgcmVzZXJ2YXRpb24gZm9yIG90aGVyIGNvcmVzICovCiAJc3RydWN0IGVkbWFfcnN2X2luZm8JKnJzdjsKIAotCXM4CSgqcXVldWVfdGNfbWFwcGluZylbMl07CiAJczgJKCpxdWV1ZV9wcmlvcml0eV9tYXBwaW5nKVsyXTsKIAljb25zdCBzMTYJKCp4YmFyX2NoYW5zKVsyXTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvbWF4MzQyMS1oY2QuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tYXgzNDIxLWhjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDNkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvbWF4MzQyMS1oY2QuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IGVHYXVnZSBTeXN0ZW1zIExMQworICoJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBlZ2F1Z2UubmV0PgorICoKKyAqIFBsYXRmb3JtLWRhdGEgc3RydWN0dXJlIGZvciBNQVgzNDIxIFVTQiBIQ0QgZHJpdmVyLgorICoKKyAqLworI2lmbmRlZiBNQVgzNDIxX0hDRF9QTEFUX0hfSU5DTFVERUQKKyNkZWZpbmUgTUFYMzQyMV9IQ0RfUExBVF9IX0lOQ0xVREVECisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBtYXBwaW5nIG9mIGNlcnRhaW4gYXV4aWxpYXJ5IGZ1bmN0aW9ucyB0byB0aGUKKyAqIE1BWDM0MjFFIEdQSU8gcGlucy4gIFRoZSBjaGlwIGhhcyBlaWdodCBHUCBpbnB1dHMgYW5kIGVpZ2h0IEdQIG91dHB1dHMuCisgKiBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoYXQgdGhlIHBpbiBpcyBub3QgdXNlZC93aXJlZCB0byBhbnl0aGluZy4KKyAqCisgKiBBdCB0aGlzIHBvaW50LCB0aGUgb25seSBjb250cm9sIHRoZSBtYXgzNDIxLWhjZCBkcml2ZXIgY2FyZXMgYWJvdXQgaXMKKyAqIHRvIGNvbnRyb2wgVmJ1cyAoNVYgdG8gdGhlIHBlcmlwaGVyYWwpLgorICovCitzdHJ1Y3QgbWF4MzQyMV9oY2RfcGxhdGZvcm1fZGF0YSB7CisJdTggdmJ1c19ncG91dDsJCQkvKiBwaW4gY29udHJvbGxpbmcgVmJ1cyAqLworCXU4IHZidXNfYWN0aXZlX2xldmVsOwkJLyogbGV2ZWwgdGhhdCB0dXJucyBvbiBwb3dlciAqLworfTsKKworI2VuZGlmIC8qIE1BWDM0MjFfSENEX1BMQVRfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3N5c2Nvbi5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3N5c2Nvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNTRjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc3lzY29uLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIFBMQVRGT1JNX0RBVEFfU1lTQ09OX0gKKyNkZWZpbmUgUExBVEZPUk1fREFUQV9TWVNDT05fSAorCitzdHJ1Y3Qgc3lzY29uX3BsYXRmb3JtX2RhdGEgeworCWNvbnN0IGNoYXIgKmxhYmVsOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggMDBhN2ZkNi4uNWE3NWQxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkOyAvKiBmb3Igc3lzY3RsICovCkBAIC01MSw3ICs1MiwxNyBAQAogZXh0ZXJuIGludCByY3V0b3J0dXJlX3J1bm5hYmxlOyAvKiBmb3Igc3lzY3RsICovCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUICovCiAKK2VudW0gcmN1dG9ydHVyZV90eXBlIHsKKwlSQ1VfRkxBVk9SLAorCVJDVV9CSF9GTEFWT1IsCisJUkNVX1NDSEVEX0ZMQVZPUiwKKwlTUkNVX0ZMQVZPUiwKKwlJTlZBTElEX1JDVV9GTEFWT1IKK307CisKICNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkKK3ZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShlbnVtIHJjdXRvcnR1cmVfdHlwZSB0ZXN0X3R5cGUsIGludCAqZmxhZ3MsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqZ3BudW0sIHVuc2lnbmVkIGxvbmcgKmNvbXBsZXRlZCk7CiB2b2lkIHJjdXRvcnR1cmVfcmVjb3JkX3Rlc3RfdHJhbnNpdGlvbih2b2lkKTsKIHZvaWQgcmN1dG9ydHVyZV9yZWNvcmRfcHJvZ3Jlc3ModW5zaWduZWQgbG9uZyB2ZXJudW0pOwogdm9pZCBkb190cmFjZV9yY3VfdG9ydHVyZV9yZWFkKGNvbnN0IGNoYXIgKnJjdXRvcnR1cmVuYW1lLApAQCAtNjAsNiArNzEsMTUgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNfb2xkLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYyk7CiAjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJjdXRvcnR1cmVfZ2V0X2dwX2RhdGEoZW51bSByY3V0b3J0dXJlX3R5cGUgdGVzdF90eXBlLAorCQkJCQkgIGludCAqZmxhZ3MsCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqZ3BudW0sCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqY29tcGxldGVkKQoreworCSpmbGFncyA9IDA7CisJKmdwbnVtID0gMDsKKwkqY29tcGxldGVkID0gMDsKK30KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3V0b3J0dXJlX3JlY29yZF90ZXN0X3RyYW5zaXRpb24odm9pZCkKIHsKIH0KQEAgLTIyOCw2ICsyNDgsMTggQEAKIHZvaWQgcmN1X2lycV9lbnRlcih2b2lkKTsKIHZvaWQgcmN1X2lycV9leGl0KHZvaWQpOwogCisjaWZkZWYgQ09ORklHX1JDVV9TVEFMTF9DT01NT04KK3ZvaWQgcmN1X3N5c3JxX3N0YXJ0KHZvaWQpOwordm9pZCByY3Vfc3lzcnFfZW5kKHZvaWQpOworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfU1RBTExfQ09NTU9OICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3N5c3JxX3N0YXJ0KHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3N5c3JxX2VuZCh2b2lkKQoreworfQorI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX1NUQUxMX0NPTU1PTiAqLworCiAjaWZkZWYgQ09ORklHX1JDVV9VU0VSX1FTCiB2b2lkIHJjdV91c2VyX2VudGVyKHZvaWQpOwogdm9pZCByY3VfdXNlcl9leGl0KHZvaWQpOwpAQCAtMjY4LDYgKzMwMCw0MSBAQAogI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLX0FMTE9DKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX1NNUCkgKi8KIAogLyoKKyAqIEhvb2tzIGZvciBjb25kX3Jlc2NoZWQoKSBhbmQgZnJpZW5kcyB0byBhdm9pZCBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzLgorICovCisKKyNkZWZpbmUgUkNVX0NPTkRfUkVTQ0hFRF9MSU0gMjU2CS8qIG1zIHZzLiAxMDBzIG9mIG1zLiAqLworREVDTEFSRV9QRVJfQ1BVKGludCwgcmN1X2NvbmRfcmVzY2hlZF9jb3VudCk7Cit2b2lkIHJjdV9yZXNjaGVkKHZvaWQpOworCisvKgorICogSXMgaXQgdGltZSB0byByZXBvcnQgUkNVIHF1aWVzY2VudCBzdGF0ZXM/CisgKgorICogTm90ZSB1bnN5bmNocm9uaXplZCBhY2Nlc3MgdG8gcmN1X2NvbmRfcmVzY2hlZF9jb3VudC4gIFllcywgd2UgbWlnaHQKKyAqIGluY3JlbWVudCBzb21lIHJhbmRvbSBDUFUncyBjb3VudCwgYW5kIHBvc3NpYmx5IGFsc28gbG9hZCB0aGUgcmVzdWx0IGZyb20KKyAqIHlldCBhbm90aGVyIENQVSdzIGNvdW50LiAgV2UgbWlnaHQgZXZlbiBjbG9iYmVyIHNvbWUgb3RoZXIgQ1BVJ3MgYXR0ZW1wdAorICogdG8gemVybyBpdHMgY291bnRlci4gIFRoaXMgaXMgYWxsIE9LIGJlY2F1c2UgdGhlIGdvYWwgaXMgbm90IHByZWNpc2lvbiwKKyAqIGJ1dCByYXRoZXIgcmVhc29uYWJsZSBhbW9ydGl6YXRpb24gb2YgcmN1X25vdGVfY29udGV4dF9zd2l0Y2goKSBvdmVyaGVhZAorICogYW5kIGV4dHJlbWVseSBoaWdoIHByb2JhYmlsaXR5IG9mIGF2b2lkaW5nIFJDVSBDUFUgc3RhbGwgd2FybmluZ3MuCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgcHJlZW1wdGVkIGluIGp1c3QgdGhlIHdyb25nIHBsYWNlLAorICogbWFueSB0aG91c2FuZHMgb2YgdGltZXMgaW4gYSByb3csIGZvciBhbnl0aGluZyBiYWQgdG8gaGFwcGVuLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcmN1X3Nob3VsZF9yZXNjaGVkKHZvaWQpCit7CisJcmV0dXJuIHJhd19jcHVfaW5jX3JldHVybihyY3VfY29uZF9yZXNjaGVkX2NvdW50KSA+PQorCSAgICAgICBSQ1VfQ09ORF9SRVNDSEVEX0xJTTsKK30KKworLyoKKyAqIFJlcG9ydCBxdWlzY2VudCBzdGF0ZXMgdG8gUkNVIGlmIGl0IGlzIHRpbWUgdG8gZG8gc28uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfY29uZF9yZXNjaGVkKHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHJjdV9zaG91bGRfcmVzY2hlZCgpKSkKKwkJcmN1X3Jlc2NoZWQoKTsKK30KKworLyoKICAqIEluZnJhc3RydWN0dXJlIHRvIGltcGxlbWVudCB0aGUgc3luY2hyb25pemVfKCkgcHJpbWl0aXZlcyBpbgogICogVFJFRV9SQ1UgYW5kIHJjdV9iYXJyaWVyXygpIHByaW1pdGl2ZXMgaW4gVElOWV9SQ1UuCiAgKi8KQEAgLTMyOCw3ICszOTUsNyBAQAogZXh0ZXJuIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfYmhfbG9ja19tYXA7CiBleHRlcm4gc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9zY2hlZF9sb2NrX21hcDsKIGV4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2NhbGxiYWNrX21hcDsKLWV4dGVybiBpbnQgZGVidWdfbG9ja2RlcF9yY3VfZW5hYmxlZCh2b2lkKTsKK2ludCBkZWJ1Z19sb2NrZGVwX3JjdV9lbmFibGVkKHZvaWQpOwogCiAvKioKICAqIHJjdV9yZWFkX2xvY2tfaGVsZCgpIC0gbWlnaHQgd2UgYmUgaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPwpAQCAtOTQ5LDYgKzEwMTYsOSBAQAogICogcG9pbnRlcnMsIGJ1dCB5b3UgbXVzdCB1c2UgcmN1X2Fzc2lnbl9wb2ludGVyKCkgdG8gaW5pdGlhbGl6ZSB0aGUKICAqIGV4dGVybmFsLXRvLXN0cnVjdHVyZSBwb2ludGVyIC1hZnRlci0geW91IGhhdmUgY29tcGxldGVseSBpbml0aWFsaXplZAogICogdGhlIHJlYWRlci1hY2Nlc3NpYmxlIHBvcnRpb25zIG9mIHRoZSBsaW5rZWQgc3RydWN0dXJlLgorICoKKyAqIE5vdGUgdGhhdCB1bmxpa2UgcmN1X2Fzc2lnbl9wb2ludGVyKCksIFJDVV9JTklUX1BPSU5URVIoKSBwcm92aWRlcyBubworICogb3JkZXJpbmcgZ3VhcmFudGVlcyBmb3IgZWl0aGVyIHRoZSBDUFUgb3IgdGhlIGNvbXBpbGVyLgogICovCiAjZGVmaW5lIFJDVV9JTklUX1BPSU5URVIocCwgdikgXAogCWRvIHsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCA0MjVjNjU5Li5kNDBhNmE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtMTE5LDYgKzExOSwxMCBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2hvd19yY3VfZ3Bfa3RocmVhZHModm9pZCkKK3sKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHJjdV9jcHVfc3RhbGxfcmVzZXQodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYTU5Y2EwNS4uM2UyZjVkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTg0LDYgKzg0LDcgQEAKIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCk7CiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKTsKK3ZvaWQgc2hvd19yY3VfZ3Bfa3RocmVhZHModm9pZCk7CiAKIHZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKIHZvaWQgcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVnbWFwLmggYi9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCmluZGV4IDg1NjkxYjkuLjdiMGU0YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVnbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWdtYXAuaApAQCAtMjc2LDYgKzI3NiwxMCBAQAogdHlwZWRlZiBpbnQgKCpyZWdtYXBfaHdfcmVhZCkodm9pZCAqY29udGV4dCwKIAkJCSAgICAgIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfc2l6ZSwKIAkJCSAgICAgIHZvaWQgKnZhbF9idWYsIHNpemVfdCB2YWxfc2l6ZSk7Cit0eXBlZGVmIGludCAoKnJlZ21hcF9od19yZWdfcmVhZCkodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKKwkJCQkgIHVuc2lnbmVkIGludCAqdmFsKTsKK3R5cGVkZWYgaW50ICgqcmVnbWFwX2h3X3JlZ193cml0ZSkodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKKwkJCQkgICB1bnNpZ25lZCBpbnQgdmFsKTsKIHR5cGVkZWYgc3RydWN0IHJlZ21hcF9hc3luYyAqKCpyZWdtYXBfaHdfYXN5bmNfYWxsb2MpKHZvaWQpOwogdHlwZWRlZiB2b2lkICgqcmVnbWFwX2h3X2ZyZWVfY29udGV4dCkodm9pZCAqY29udGV4dCk7CiAKQEAgLTMwOSw3ICszMTMsOSBAQAogCXJlZ21hcF9od193cml0ZSB3cml0ZTsKIAlyZWdtYXBfaHdfZ2F0aGVyX3dyaXRlIGdhdGhlcl93cml0ZTsKIAlyZWdtYXBfaHdfYXN5bmNfd3JpdGUgYXN5bmNfd3JpdGU7CisJcmVnbWFwX2h3X3JlZ193cml0ZSByZWdfd3JpdGU7CiAJcmVnbWFwX2h3X3JlYWQgcmVhZDsKKwlyZWdtYXBfaHdfcmVnX3JlYWQgcmVnX3JlYWQ7CiAJcmVnbWFwX2h3X2ZyZWVfY29udGV4dCBmcmVlX2NvbnRleHQ7CiAJcmVnbWFwX2h3X2FzeW5jX2FsbG9jIGFzeW5jX2FsbG9jOwogCXU4IHJlYWRfZmxhZ19tYXNrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKaW5kZXggMWE0YThjMS4uYTJkOWQ4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCkBAIC0xNTEsMTEgKzE1MSwxMyBAQAogCQkJCSAgICBjb25zdCBjaGFyICphbGlhc19pZCk7CiB2b2lkIHJlZ3VsYXRvcl91bnJlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsKIAotaW50IHJlZ3VsYXRvcl9idWxrX3JlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKippZCwKK2ludCByZWd1bGF0b3JfYnVsa19yZWdpc3Rlcl9zdXBwbHlfYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgY29uc3QgY2hhciAqY29uc3QgKmlkLAogCQkJCQkgc3RydWN0IGRldmljZSAqYWxpYXNfZGV2LAotCQkJCQkgY29uc3QgY2hhciAqKmFsaWFzX2lkLCBpbnQgbnVtX2lkKTsKKwkJCQkJIGNvbnN0IGNoYXIgKmNvbnN0ICphbGlhc19pZCwKKwkJCQkJIGludCBudW1faWQpOwogdm9pZCByZWd1bGF0b3JfYnVsa191bnJlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBjb25zdCBjaGFyICoqaWQsIGludCBudW1faWQpOworCQkJCQkgICAgY29uc3QgY2hhciAqIGNvbnN0ICppZCwgaW50IG51bV9pZCk7CiAKIGludCBkZXZtX3JlZ3VsYXRvcl9yZWdpc3Rlcl9zdXBwbHlfYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCwKIAkJCQkJIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwKQEAgLTE2NCwxMiArMTY2LDEyIEBACiAJCQkJCSAgICBjb25zdCBjaGFyICppZCk7CiAKIGludCBkZXZtX3JlZ3VsYXRvcl9idWxrX3JlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKippZCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmlkLAogCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICphbGlhc19kZXYsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKiphbGlhc19pZCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFsaWFzX2lkLAogCQkJCQkgICAgICBpbnQgbnVtX2lkKTsKIHZvaWQgZGV2bV9yZWd1bGF0b3JfYnVsa191bnJlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQkgY29uc3QgY2hhciAqKmlkLAorCQkJCQkJIGNvbnN0IGNoYXIgKmNvbnN0ICppZCwKIAkJCQkJCSBpbnQgbnVtX2lkKTsKIAogLyogcmVndWxhdG9yIG91dHB1dCBjb250cm9sIGFuZCBzdGF0dXMgKi8KQEAgLTI5MCwxNyArMjkyLDE3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJlZ3VsYXRvcl9idWxrX3JlZ2lzdGVyX3N1cHBseV9hbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQkgICAgICAgY29uc3QgY2hhciAqKmlkLAotCQkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwKLQkJCQkJCSAgICAgICBjb25zdCBjaGFyICoqYWxpYXNfaWQsCi0JCQkJCQkgICAgICAgaW50IG51bV9pZCkKKwkJCQkJCWNvbnN0IGNoYXIgKmNvbnN0ICppZCwKKwkJCQkJCXN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwKKwkJCQkJCWNvbnN0IGNoYXIgKiBjb25zdCAqYWxpYXNfaWQsCisJCQkJCQlpbnQgbnVtX2lkKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVndWxhdG9yX2J1bGtfdW5yZWdpc3Rlcl9zdXBwbHlfYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJCSAgY29uc3QgY2hhciAqKmlkLAotCQkJCQkJCSAgaW50IG51bV9pZCkKKwkJCQkJCWNvbnN0IGNoYXIgKiBjb25zdCAqaWQsCisJCQkJCQlpbnQgbnVtX2lkKQogewogfQogCkBAIC0zMTcsMTUgKzMxOSwxNyBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBkZXZtX3JlZ3VsYXRvcl9idWxrX3JlZ2lzdGVyX3N1cHBseV9hbGlhcygKLQkJc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICoqaWQsIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwKLQkJY29uc3QgY2hhciAqKmFsaWFzX2lkLCBpbnQgbnVtX2lkKQorc3RhdGljIGlubGluZSBpbnQgZGV2bV9yZWd1bGF0b3JfYnVsa19yZWdpc3Rlcl9zdXBwbHlfYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJY29uc3QgY2hhciAqY29uc3QgKmlkLAorCQkJCQkJc3RydWN0IGRldmljZSAqYWxpYXNfZGV2LAorCQkJCQkJY29uc3QgY2hhciAqY29uc3QgKmFsaWFzX2lkLAorCQkJCQkJaW50IG51bV9pZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRldm1fcmVndWxhdG9yX2J1bGtfdW5yZWdpc3Rlcl9zdXBwbHlfYWxpYXMoCi0JCXN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqKmlkLCBpbnQgbnVtX2lkKQorCXN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uc3QgKmlkLCBpbnQgbnVtX2lkKQogewogfQogCkBAIC0zOTcsNiArNDAxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwKKwkJCQkJICAgICBpbnQgb2xkX3VWLCBpbnQgbmV3X3VWKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKQogewogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNldC5oIGIvaW5jbHVkZS9saW51eC9yZXNldC5oCmluZGV4IGMwZWRhNTAuLjM0OWYxNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9SRVNFVF9IXwogCiBzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOwogc3RydWN0IHJlc2V0X2NvbnRyb2w7CiAKICNpZmRlZiBDT05GSUdfUkVTRVRfQ09OVFJPTExFUgpAQCAtMzMsNiArMzQsOSBAQAogCXJldHVybiBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgaWQpOwogfQogCitzdHJ1Y3QgcmVzZXRfY29udHJvbCAqb2ZfcmVzZXRfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgICBjb25zdCBjaGFyICppZCk7CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X2NvbnRyb2xfcmVzZXQoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpCkBAIC03NSw2ICs3OSwxMiBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZXNldF9jb250cm9sICpvZl9yZXNldF9jb250cm9sX2dldCgKKwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKmlkKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOworfQorCiAjZW5kaWYgLyogQ09ORklHX1JFU0VUX0NPTlRST0xMRVIgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMjIxYjJiZC4uNzBmNjdlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtODcwLDYgKzg3MCw3IEBACiAjZGVmaW5lIFNEX0JBTEFOQ0VfV0FLRQkJMHgwMDEwICAvKiBCYWxhbmNlIG9uIHdha2V1cCAqLwogI2RlZmluZSBTRF9XQUtFX0FGRklORQkJMHgwMDIwCS8qIFdha2UgdGFzayB0byB3YWtpbmcgQ1BVICovCiAjZGVmaW5lIFNEX1NIQVJFX0NQVVBPV0VSCTB4MDA4MAkvKiBEb21haW4gbWVtYmVycyBzaGFyZSBjcHUgcG93ZXIgKi8KKyNkZWZpbmUgU0RfU0hBUkVfUE9XRVJET01BSU4JMHgwMTAwCS8qIERvbWFpbiBtZW1iZXJzIHNoYXJlIHBvd2VyIGRvbWFpbiAqLwogI2RlZmluZSBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCTB4MDIwMAkvKiBEb21haW4gbWVtYmVycyBzaGFyZSBjcHUgcGtnIHJlc291cmNlcyAqLwogI2RlZmluZSBTRF9TRVJJQUxJWkUJCTB4MDQwMAkvKiBPbmx5IGEgc2luZ2xlIGxvYWQgYmFsYW5jaW5nIGluc3RhbmNlICovCiAjZGVmaW5lIFNEX0FTWU1fUEFDS0lORwkJMHgwODAwICAvKiBQbGFjZSBidXN5IGdyb3VwcyBlYXJsaWVyIGluIHRoZSBkb21haW4gKi8KQEAgLTg3Nyw3ICs4NzgsMjYgQEAKICNkZWZpbmUgU0RfT1ZFUkxBUAkJMHgyMDAwCS8qIHNjaGVkX2RvbWFpbnMgb2YgdGhpcyBsZXZlbCBvdmVybGFwICovCiAjZGVmaW5lIFNEX05VTUEJCQkweDQwMDAJLyogY3Jvc3Mtbm9kZSBiYWxhbmNpbmcgKi8KIAotZXh0ZXJuIGludCBfX3dlYWsgYXJjaF9zZF9zaWJpbGluZ19hc3ltX3BhY2tpbmcodm9pZCk7CisjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAorc3RhdGljIGlubGluZSBjb25zdCBpbnQgY3B1X3NtdF9mbGFncyh2b2lkKQoreworCXJldHVybiBTRF9TSEFSRV9DUFVQT1dFUiB8IFNEX1NIQVJFX1BLR19SRVNPVVJDRVM7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TQ0hFRF9NQworc3RhdGljIGlubGluZSBjb25zdCBpbnQgY3B1X2NvcmVfZmxhZ3Modm9pZCkKK3sKKwlyZXR1cm4gU0RfU0hBUkVfUEtHX1JFU09VUkNFUzsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05VTUEKK3N0YXRpYyBpbmxpbmUgY29uc3QgaW50IGNwdV9udW1hX2ZsYWdzKHZvaWQpCit7CisJcmV0dXJuIFNEX05VTUE7Cit9CisjZW5kaWYKIAogc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyIHsKIAlpbnQgcmVsYXhfZG9tYWluX2xldmVsOwpAQCAtOTg1LDYgKzEwMDUsMzggQEAKIAogYm9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTsKIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqKCpzY2hlZF9kb21haW5fbWFza19mKShpbnQgY3B1KTsKK3R5cGVkZWYgY29uc3QgaW50ICgqc2NoZWRfZG9tYWluX2ZsYWdzX2YpKHZvaWQpOworCisjZGVmaW5lIFNEVExfT1ZFUkxBUAkweDAxCisKK3N0cnVjdCBzZF9kYXRhIHsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICoqX19wZXJjcHUgc2Q7CisJc3RydWN0IHNjaGVkX2dyb3VwICoqX19wZXJjcHUgc2c7CisJc3RydWN0IHNjaGVkX2dyb3VwX3Bvd2VyICoqX19wZXJjcHUgc2dwOworfTsKKworc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCB7CisJc2NoZWRfZG9tYWluX21hc2tfZiBtYXNrOworCXNjaGVkX2RvbWFpbl9mbGFnc19mIHNkX2ZsYWdzOworCWludAkJICAgIGZsYWdzOworCWludAkJICAgIG51bWFfbGV2ZWw7CisJc3RydWN0IHNkX2RhdGEgICAgICBkYXRhOworI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworCWNoYXIgICAgICAgICAgICAgICAgKm5hbWU7CisjZW5kaWYKK307CisKK2V4dGVybiBzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICpzY2hlZF9kb21haW5fdG9wb2xvZ3k7CisKK2V4dGVybiB2b2lkIHNldF9zY2hlZF90b3BvbG9neShzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bCk7CisKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKKyMgZGVmaW5lIFNEX0lOSVRfTkFNRSh0eXBlKQkJLm5hbWUgPSAjdHlwZQorI2Vsc2UKKyMgZGVmaW5lIFNEX0lOSVRfTkFNRSh0eXBlKQorI2VuZGlmCisKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAogc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyOwpAQCAtMTEyMyw4ICsxMTc1LDggQEAKIAogCS8qCiAJICogT3JpZ2luYWwgc2NoZWR1bGluZyBwYXJhbWV0ZXJzLiBDb3BpZWQgaGVyZSBmcm9tIHNjaGVkX2F0dHIKLQkgKiBkdXJpbmcgc2NoZWRfc2V0c2NoZWR1bGVyMigpLCB0aGV5IHdpbGwgcmVtYWluIHRoZSBzYW1lIHVudGlsCi0JICogdGhlIG5leHQgc2NoZWRfc2V0c2NoZWR1bGVyMigpLgorCSAqIGR1cmluZyBzY2hlZF9zZXRhdHRyKCksIHRoZXkgd2lsbCByZW1haW4gdGhlIHNhbWUgdW50aWwKKwkgKiB0aGUgbmV4dCBzY2hlZF9zZXRhdHRyKCkuCiAJICovCiAJdTY0IGRsX3J1bnRpbWU7CQkvKiBtYXhpbXVtIHJ1bnRpbWUgZm9yIGVhY2ggaW5zdGFuY2UJKi8KIAl1NjQgZGxfZGVhZGxpbmU7CS8qIHJlbGF0aXZlIGRlYWRsaW5lIG9mIGVhY2ggaW5zdGFuY2UJKi8KQEAgLTI3MjMsNTEgKzI3NzUsOSBAQAogCiAvKgogICogSWRsZSB0aHJlYWQgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGUgbmVlZF9yZXNjaGVkCi0gKiBwb2xsaW5nIHN0YXRlLiBXZSBoYXZlIHR3byB2ZXJzaW9ucywgb25lIGJhc2VkIG9uIFRTX1BPTExJTkcgaW4KLSAqIHRocmVhZF9pbmZvLnN0YXR1cyBhbmQgb25lIGJhc2VkIG9uIFRJRl9QT0xMSU5HX05SRkxBRyBpbgotICogdGhyZWFkX2luZm8uZmxhZ3MKKyAqIHBvbGxpbmcgc3RhdGUuCiAgKi8KLSNpZmRlZiBUU19QT0xMSU5HCi1zdGF0aWMgaW5saW5lIGludCB0c2tfaXNfcG9sbGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuIHRhc2tfdGhyZWFkX2luZm8ocCktPnN0YXR1cyAmIFRTX1BPTExJTkc7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19jdXJyZW50X3NldF9wb2xsaW5nKHZvaWQpCi17Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKLX0KLQotc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBjdXJyZW50X3NldF9wb2xsaW5nX2FuZF90ZXN0KHZvaWQpCi17Ci0JX19jdXJyZW50X3NldF9wb2xsaW5nKCk7Ci0KLQkvKgotCSAqIFBvbGxpbmcgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0IE5FRURfUkVTQ0hFRCwKLQkgKiBwYWlyZWQgYnkgcmVzY2hlZF90YXNrKCkKLQkgKi8KLQlzbXBfbWIoKTsKLQotCXJldHVybiB1bmxpa2VseSh0aWZfbmVlZF9yZXNjaGVkKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jdXJyZW50X2Nscl9wb2xsaW5nKHZvaWQpCi17Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgY3VycmVudF9jbHJfcG9sbGluZ19hbmRfdGVzdCh2b2lkKQotewotCV9fY3VycmVudF9jbHJfcG9sbGluZygpOwotCi0JLyoKLQkgKiBQb2xsaW5nIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdCBORUVEX1JFU0NIRUQsCi0JICogcGFpcmVkIGJ5IHJlc2NoZWRfdGFzaygpCi0JICovCi0Jc21wX21iKCk7Ci0KLQlyZXR1cm4gdW5saWtlbHkodGlmX25lZWRfcmVzY2hlZCgpKTsKLX0KLSNlbGlmIGRlZmluZWQoVElGX1BPTExJTkdfTlJGTEFHKQorI2lmZGVmIFRJRl9QT0xMSU5HX05SRkxBRwogc3RhdGljIGlubGluZSBpbnQgdHNrX2lzX3BvbGxpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiB0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfUE9MTElOR19OUkZMQUcpOwpAQCAtMjc4NSwxMCArMjc5NSw4IEBACiAJLyoKIAkgKiBQb2xsaW5nIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdCBORUVEX1JFU0NIRUQsCiAJICogcGFpcmVkIGJ5IHJlc2NoZWRfdGFzaygpCi0JICoKLQkgKiBYWFg6IGFzc3VtZXMgc2V0L2NsZWFyIGJpdCBhcmUgaWRlbnRpY2FsIGJhcnJpZXIgd2lzZS4KIAkgKi8KLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKIAlyZXR1cm4gdW5saWtlbHkodGlmX25lZWRfcmVzY2hlZCgpKTsKIH0KQEAgLTI4MDYsNyArMjgxNCw3IEBACiAJICogUG9sbGluZyBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QgTkVFRF9SRVNDSEVELAogCSAqIHBhaXJlZCBieSByZXNjaGVkX3Rhc2soKQogCSAqLwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCXJldHVybiB1bmxpa2VseSh0aWZfbmVlZF9yZXNjaGVkKCkpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9wcmlvLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3ByaW8uaAppbmRleCBhYzMyMjU4Li5kOWNmNWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3ByaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3ByaW8uaApAQCAtNDEsNCArNDEsMjAgQEAKICNkZWZpbmUgVEFTS19VU0VSX1BSSU8ocCkJVVNFUl9QUklPKChwKS0+c3RhdGljX3ByaW8pCiAjZGVmaW5lIE1BWF9VU0VSX1BSSU8JCShVU0VSX1BSSU8oTUFYX1BSSU8pKQogCisvKgorICogQ29udmVydCBuaWNlIHZhbHVlIFsxOSwtMjBdIHRvIHJsaW1pdCBzdHlsZSB2YWx1ZSBbMSw0MF0uCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBuaWNlX3RvX3JsaW1pdChsb25nIG5pY2UpCit7CisJcmV0dXJuIChNQVhfTklDRSAtIG5pY2UgKyAxKTsKK30KKworLyoKKyAqIENvbnZlcnQgcmxpbWl0IHN0eWxlIHZhbHVlIFsxLDQwXSB0byBuaWNlIHZhbHVlIFstMjAsIDE5XS4KKyAqLworc3RhdGljIGlubGluZSBsb25nIHJsaW1pdF90b19uaWNlKGxvbmcgcHJpbykKK3sKKwlyZXR1cm4gKE1BWF9OSUNFIC0gcHJpbyArIDEpOworfQorCiAjZW5kaWYgLyogX1NDSEVEX1BSSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGY3MjliZTkuLjdhMTViNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTI4NSw2ICsyODUsMjIgQEAKIC8qCiAgKiBDb25zb2xlIGhlbHBlcnMuCiAgKi8KK3N0cnVjdCBlYXJseWNvbl9kZXZpY2UgeworCXN0cnVjdCBjb25zb2xlICpjb247CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OworCWNoYXIgb3B0aW9uc1sxNl07CQkvKiBlLmcuLCAxMTUyMDBuOCAqLworCXVuc2lnbmVkIGludCBiYXVkOworfTsKK2ludCBzZXR1cF9lYXJseWNvbihjaGFyICpidWYsIGNvbnN0IGNoYXIgKm1hdGNoLAorCQkgICBpbnQgKCpzZXR1cCkoc3RydWN0IGVhcmx5Y29uX2RldmljZSAqLCBjb25zdCBjaGFyICopKTsKKworI2RlZmluZSBFQVJMWUNPTl9ERUNMQVJFKG5hbWUsIGZ1bmMpIFwKK3N0YXRpYyBpbnQgX19pbml0IG5hbWUgIyMgX3NldHVwX2Vhcmx5Y29uKGNoYXIgKmJ1ZikgXAoreyBcCisJcmV0dXJuIHNldHVwX2Vhcmx5Y29uKGJ1ZiwgX19zdHJpbmdpZnkobmFtZSksIGZ1bmMpOyBcCit9IFwKK2Vhcmx5X3BhcmFtKCJlYXJseWNvbiIsIG5hbWUgIyMgX3NldHVwX2Vhcmx5Y29uKTsKKwogc3RydWN0IHVhcnRfcG9ydCAqdWFydF9nZXRfY29uc29sZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0cywgaW50IG5yLAogCQkJCSAgIHN0cnVjdCBjb25zb2xlICpjKTsKIHZvaWQgdWFydF9wYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIGludCAqYmF1ZCwgaW50ICpwYXJpdHksIGludCAqYml0cywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfdGltZXIuaCBiL2luY2x1ZGUvbGludXgvc2hfdGltZXIuaAppbmRleCA0ZDlkY2QxLi44ZTFlMDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NoX3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaF90aW1lci5oCkBAIC03LDYgKzcsNyBAQAogCWludCB0aW1lcl9iaXQ7CiAJdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZzsKIAl1bnNpZ25lZCBsb25nIGNsb2Nrc291cmNlX3JhdGluZzsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWFzazsKIH07CiAKICNlbmRpZiAvKiBfX1NIX1RJTUVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NwaTMuaCBiL2luY2x1ZGUvbGludXgvc3BpL2FkaV9zcGkzLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NwaTMuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9zcGkvYWRpX3NwaTMuaAppbmRleCAwOTU3ZTY1YS4uYzg0MTIzYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NwaTMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9hZGlfc3BpMy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEFuYWxvZyBEZXZpY2VzIFNQSTMgY29udHJvbGxlciBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDE0IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTExLDE0ICsxMSwxMCBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9TUElfQ0hBTk5FTF9IXwotI2RlZmluZSBfU1BJX0NIQU5ORUxfSF8KKyNpZm5kZWYgX0FESV9TUEkzX0hfCisjZGVmaW5lIF9BRElfU1BJM19IXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApAQCAtMjA5LDkgKzIwNSw5IEBACiAjZGVmaW5lIFNQSV9JTEFUX0NMUl9URkkgICAgICAgICAgICAweDAwMDAwODAwICAgIC8qIFRyYW5zbWl0IEZpbmlzaCBJbmRpY2F0aW9uICovCiAKIC8qCi0gKiBiZmluIHNwaTMgcmVnaXN0ZXJzIGxheW91dAorICogYWRpIHNwaTMgcmVnaXN0ZXJzIGxheW91dAogICovCi1zdHJ1Y3QgYmZpbl9zcGlfcmVncyB7CitzdHJ1Y3QgYWRpX3NwaV9yZWdzIHsKIAl1MzIgcmV2aWQ7CiAJdTMyIGNvbnRyb2w7CiAJdTMyIHJ4X2NvbnRyb2w7CkBAIC0yNDAsNyArMjM2LDcgQEAKICNkZWZpbmUgTUFYX0NUUkxfQ1MgICAgICAgICAgOCAgLyogY3MgaW4gc3BpIGNvbnRyb2xsZXIgKi8KIAogLyogZGV2aWNlLnBsYXRmb3JtX2RhdGEgZm9yIFNTUCBjb250cm9sbGVyIGRldmljZXMgKi8KLXN0cnVjdCBiZmluX3NwaTNfbWFzdGVyIHsKK3N0cnVjdCBhZGlfc3BpM19tYXN0ZXIgewogCXUxNiBudW1fY2hpcHNlbGVjdDsKIAl1MTYgcGluX3JlcVs3XTsKIH07CkBAIC0yNDgsMTEgKzI0NCwxMSBAQAogLyogc3BpX2JvYXJkX2luZm8uY29udHJvbGxlcl9kYXRhIGZvciBTUEkgc2xhdmUgZGV2aWNlcywKICAqIGNvcGllZCB0byBzcGlfZGV2aWNlLnBsYXRmb3JtX2RhdGEgLi4uIG1vc3RseSBmb3IgZG1hIHR1bmluZwogICovCi1zdHJ1Y3QgYmZpbl9zcGkzX2NoaXAgeworc3RydWN0IGFkaV9zcGkzX2NoaXAgewogCXUzMiBjb250cm9sOwogCXUxNiBjc19jaGdfdWRlbGF5OyAvKiBTb21lIGRldmljZXMgcmVxdWlyZSAxNi1iaXQgZGVsYXlzICovCiAJdTMyIHR4X2R1bW15X3ZhbDsgLyogdHggdmFsdWUgZm9yIHJ4IG9ubHkgdHJhbnNmZXIgKi8KIAlib29sIGVuYWJsZV9kbWE7CiB9OwogCi0jZW5kaWYgLyogX1NQSV9DSEFOTkVMX0hfICovCisjZW5kaWYgLyogX0FESV9TUEkzX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9yc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9yc3BpLmgKaW5kZXggYTI1YmQ2Zi4uZTU0NmIyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvcnNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3JzcGkuaApAQCAtMjUsOCArMjUsNiBAQAogCXVuc2lnbmVkIGludCBkbWFfdHhfaWQ7CiAJdW5zaWduZWQgaW50IGRtYV9yeF9pZDsKIAotCXVuc2lnbmVkIGRtYV93aWR0aF8xNmJpdDoxOwkvKiBETUFDIHJlYWQvd3JpdGUgd2lkdGggPSAxNi1iaXQgKi8KLQogCXUxNiBudW1fY2hpcHNlbGVjdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCmluZGV4IDNhODQ3ZGUuLmFkN2RiZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaApAQCAtMTQyLDE4ICsxNDIsMTggQEAKIAkJCQl0ZXN0X2FuZF9zZXRfYml0KFJQQ19UQVNLX1JVTk5JTkcsICYodCktPnRrX3J1bnN0YXRlKQogI2RlZmluZSBycGNfY2xlYXJfcnVubmluZyh0KQlcCiAJZG8geyBcCi0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyBcCisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyBcCiAJCWNsZWFyX2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSk7IFwKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgXAorCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSUENfSVNfUVVFVUVEKHQpCXRlc3RfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpCiAjZGVmaW5lIHJwY19zZXRfcXVldWVkKHQpCXNldF9iaXQoUlBDX1RBU0tfUVVFVUVELCAmKHQpLT50a19ydW5zdGF0ZSkKICNkZWZpbmUgcnBjX2NsZWFyX3F1ZXVlZCh0KQlcCiAJZG8geyBcCi0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyBcCisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyBcCiAJCWNsZWFyX2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKTsgXAotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyBcCisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJQQ19JU19BQ1RJVkFURUQodCkJdGVzdF9iaXQoUlBDX1RBU0tfQUNUSVZFLCAmKHQpLT50a19ydW5zdGF0ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCAzZTVlZmIyLi4zODc2ZjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC0zNzksOSArMzc5LDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHhwcnRfY2xlYXJfY29ubmVjdGluZyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFhQUlRfQ09OTkVDVElORywgJnhwcnQtPnN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhwcnRfY29ubmVjdGluZyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCkBAIC00MTEsOSArNDExLDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHhwcnRfY2xlYXJfYmluZGluZyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFhQUlRfQklORElORywgJnhwcnQtPnN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhwcnRfdGVzdF9hbmRfc2V0X2JpbmRpbmcoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDVmZmFhMzQuLmY5N2QwZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTQzNyw3ICs0MzcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cikKIHsKLQlyZXR1cm4gc3lzZnNfcmVtb3ZlX2ZpbGVfbnMoa29iaiwgYXR0ciwgTlVMTCk7CisJc3lzZnNfcmVtb3ZlX2ZpbGVfbnMoa29iaiwgYXR0ciwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX3JlbmFtZV9saW5rKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29iamVjdCAqdGFyZ2V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oCmluZGV4IGZkZGJlMjAuLmNiMGNlYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgKQEAgLTEwNCwyMCArMTA0LDYgQEAKICNkZWZpbmUgdGVzdF90aHJlYWRfZmxhZyhmbGFnKSBcCiAJdGVzdF90aV90aHJlYWRfZmxhZyhjdXJyZW50X3RocmVhZF9pbmZvKCksIGZsYWcpCiAKLXN0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkIHZvaWQgc2V0X25lZWRfcmVzY2hlZCh2b2lkKQotewotCS8qCi0JICogVXNlIG9mIHRoaXMgZnVuY3Rpb24gaW4gZGVwcmVjYXRlZC4KLQkgKgotCSAqIEFzIG9mIHRoaXMgd3JpdGluZyB0aGVyZSBhcmUgb25seSBhIGZldyB1c2VycyBpbiB0aGUgRFJNIHRyZWUgbGVmdAotCSAqIGFsbCBvZiB3aGljaCBhcmUgd3JvbmcgYW5kIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgY2F1c2luZyB0b28gbXVjaAotCSAqIGdyaWVmLgotCSAqCi0JICogVGhlIERSTSBwZW9wbGUgYXJlIGF3YXJlIGFuZCBhcmUgd29ya2luZyBvbiByZW1vdmluZyB0aGUgbGFzdCBmZXcKLQkgKiBpbnN0YW5jZXMuCi0JICovCi19Ci0KICNkZWZpbmUgdGlmX25lZWRfcmVzY2hlZCgpIHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkKIAogI2lmIGRlZmluZWQgVElGX1JFU1RPUkVfU0lHTUFTSyAmJiAhZGVmaW5lZCBIQVZFX1NFVF9SRVNUT1JFX1NJR01BU0sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCA3MDYyMzMwLi45NzM2NzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC02NiwxMjEgKzY2LDYgQEAKICNkZWZpbmUgUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVMJKDEpCiAjZW5kaWYKIAotLyoKLSAqIEJlbG93IGFyZSB0aGUgMyBtYWpvciBpbml0aWFsaXplcnMgdXNlZCBpbiBidWlsZGluZyBzY2hlZF9kb21haW5zOgotICogU0RfU0lCTElOR19JTklULCBmb3IgU01UIGRvbWFpbnMKLSAqIFNEX0NQVV9JTklULCBmb3IgU01QIGRvbWFpbnMKLSAqCi0gKiBBbnkgYXJjaGl0ZWN0dXJlIHRoYXQgY2FyZXMgdG8gZG8gYW55IHR1bmluZyB0byB0aGVzZSB2YWx1ZXMgc2hvdWxkIGRvIHNvCi0gKiBieSBkZWZpbmluZyB0aGVpciBvd24gYXJjaC1zcGVjaWZpYyBpbml0aWFsaXplciBpbiBpbmNsdWRlL2FzbS90b3BvbG9neS5oLgotICogQSBkZWZpbml0aW9uIHRoZXJlIHdpbGwgYXV0b21hZ2ljYWxseSBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IGluaXRpYWxpemVycwotICogYW5kIGFsbG93IGFyY2gtc3BlY2lmaWMgcGVyZm9ybWFuY2UgdHVuaW5nIG9mIHNjaGVkX2RvbWFpbnMuCi0gKiAoT25seSBub24temVybyBhbmQgbm9uLW51bGwgZmllbGRzIG5lZWQgYmUgc3BlY2lmaWVkLikKLSAqLwotCi0jaWZkZWYgQ09ORklHX1NDSEVEX1NNVAotLyogTUNEIC0gRG8gd2UgcmVhbGx5IG5lZWQgdGhpcz8gIEl0IGlzIGFsd2F5cyBvbiBpZiBDT05GSUdfU0NIRURfU01UIGlzLAotICogc28gY2FuJ3Qgd2UgZHJvcCB0aGlzIGluIGZhdm9yIG9mIENPTkZJR19TQ0hFRF9TTVQ/Ci0gKi8KLSNkZWZpbmUgQVJDSF9IQVNfU0NIRURfV0FLRV9JRExFCi0vKiBDb21tb24gdmFsdWVzIGZvciBTTVQgc2libGluZ3MgKi8KLSNpZm5kZWYgU0RfU0lCTElOR19JTklUCi0jZGVmaW5lIFNEX1NJQkxJTkdfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJCQlcCi0JLm1pbl9pbnRlcnZhbAkJPSAxLAkJCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gMiwJCQkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gNjQsCQkJCQlcCi0JLmltYmFsYW5jZV9wY3QJCT0gMTEwLAkJCQkJXAotCQkJCQkJCQkJXAotCS5mbGFncwkJCT0gMSpTRF9MT0FEX0JBTEFOQ0UJCQlcCi0JCQkJfCAxKlNEX0JBTEFOQ0VfTkVXSURMRQkJCVwKLQkJCQl8IDEqU0RfQkFMQU5DRV9FWEVDCQkJXAotCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCi0JCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKLQkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCi0JCQkJfCAxKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAotCQkJCXwgMSpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCi0JCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKLQkJCQl8IDAqU0RfUFJFRkVSX1NJQkxJTkcJCQlcCi0JCQkJfCBhcmNoX3NkX3NpYmxpbmdfYXN5bV9wYWNraW5nKCkJXAotCQkJCSwJCQkJCVwKLQkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQkJCVwKLQkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJCQlcCi0JLnNtdF9nYWluCQk9IDExNzgsCS8qIDE1JSAqLwkJCVwKLQkubWF4X25ld2lkbGVfbGJfY29zdAk9IDAsCQkJCQlcCi0JLm5leHRfZGVjYXlfbWF4X2xiX2Nvc3QJPSBqaWZmaWVzLAkJCQlcCi19Ci0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfU0NIRURfU01UICovCi0KLSNpZmRlZiBDT05GSUdfU0NIRURfTUMKLS8qIENvbW1vbiB2YWx1ZXMgZm9yIE1DIHNpYmxpbmdzLiBmb3Igbm93IG1vc3RseSBkZXJpdmVkIGZyb20gU0RfQ1BVX0lOSVQgKi8KLSNpZm5kZWYgU0RfTUNfSU5JVAotI2RlZmluZSBTRF9NQ19JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQkJCVwKLQkubWluX2ludGVydmFsCQk9IDEsCQkJCQlcCi0JLm1heF9pbnRlcnZhbAkJPSA0LAkJCQkJXAotCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQkJCVwKLQkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCQkJXAotCS5idXN5X2lkeAkJPSAyLAkJCQkJXAotCS53YWtlX2lkeAkJPSAwLAkJCQkJXAotCS5mb3JrZXhlY19pZHgJCT0gMCwJCQkJCVwKLQkJCQkJCQkJCVwKLQkuZmxhZ3MJCQk9IDEqU0RfTE9BRF9CQUxBTkNFCQkJXAotCQkJCXwgMSpTRF9CQUxBTkNFX05FV0lETEUJCQlcCi0JCQkJfCAxKlNEX0JBTEFOQ0VfRVhFQwkJCVwKLQkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAotCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCi0JCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKLQkJCQl8IDEqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAotCQkJCXwgMCpTRF9TRVJJQUxJWkUJCQlcCi0JCQkJLAkJCQkJXAotCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQkJCVwKLQkubWF4X25ld2lkbGVfbGJfY29zdAk9IDAsCQkJCQlcCi0JLm5leHRfZGVjYXlfbWF4X2xiX2Nvc3QJPSBqaWZmaWVzLAkJCQlcCi19Ci0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgKi8KLQotLyogQ29tbW9uIHZhbHVlcyBmb3IgQ1BVcyAqLwotI2lmbmRlZiBTRF9DUFVfSU5JVAotI2RlZmluZSBTRF9DUFVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJCQlcCi0JLm1pbl9pbnRlcnZhbAkJPSAxLAkJCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gNCwJCQkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gNjQsCQkJCQlcCi0JLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCQkJXAotCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQkJCVwKLQkuYnVzeV9pZHgJCT0gMiwJCQkJCVwKLQkuaWRsZV9pZHgJCT0gMSwJCQkJCVwKLQkubmV3aWRsZV9pZHgJCT0gMCwJCQkJCVwKLQkud2FrZV9pZHgJCT0gMCwJCQkJCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IDAsCQkJCQlcCi0JCQkJCQkJCQlcCi0JLmZsYWdzCQkJPSAxKlNEX0xPQURfQkFMQU5DRQkJCVwKLQkJCQl8IDEqU0RfQkFMQU5DRV9ORVdJRExFCQkJXAotCQkJCXwgMSpTRF9CQUxBTkNFX0VYRUMJCQlcCi0JCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKLQkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAotCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKLQkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCi0JCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKLQkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfU0lCTElORwkJCVwKLQkJCQksCQkJCQlcCi0JLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJCQlcCi0JLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCQkJXAotCS5tYXhfbmV3aWRsZV9sYl9jb3N0CT0gMCwJCQkJCVwKLQkubmV4dF9kZWNheV9tYXhfbGJfY29zdAk9IGppZmZpZXMsCQkJCVwKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NDSEVEX0JPT0sKLSNpZm5kZWYgU0RfQk9PS19JTklUCi0jZXJyb3IgUGxlYXNlIGRlZmluZSBhbiBhcHByb3ByaWF0ZSBTRF9CT09LX0lOSVQgaW4gaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCEhIQotI2VuZGlmCi0jZW5kaWYgLyogQ09ORklHX1NDSEVEX0JPT0sgKi8KLQogI2lmZGVmIENPTkZJR19VU0VfUEVSQ1BVX05VTUFfTk9ERV9JRAogREVDTEFSRV9QRVJfQ1BVKGludCwgbnVtYV9ub2RlKTsKIApAQCAtMjk1LDQgKzE4MCwxNyBAQAogI2RlZmluZSB0b3BvbG9neV9jb3JlX2NwdW1hc2soY3B1KQkJY3B1bWFza19vZihjcHUpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9zbXRfbWFzayhpbnQgY3B1KQoreworCXJldHVybiB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9jcHVfbWFzayhpbnQgY3B1KQoreworCXJldHVybiBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoY3B1KSk7Cit9CisKKwogI2VuZGlmIC8qIF9MSU5VWF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcnR1cmUuaCBiL2luY2x1ZGUvbGludXgvdG9ydHVyZS5oCmluZGV4IGIyZTJiNDYuLjVjYTU4ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9ydHVyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9ydHVyZS5oCkBAIC00OSwxMiArNDksNiBAQAogI2RlZmluZSBWRVJCT1NFX1RPUk9VVF9FUlJTVFJJTkcocykgXAogCWRvIHsgaWYgKHZlcmJvc2UpIHByX2FsZXJ0KCIlcyIgVE9SVFVSRV9GTEFHICIhISEgJXNcbiIsIHRvcnR1cmVfdHlwZSwgcyk7IH0gd2hpbGUgKDApCiAKLS8qIERlZmluaXRpb25zIGZvciBhIG5vbi1zdHJpbmcgdG9ydHVyZS10ZXN0IG1vZHVsZSBwYXJhbWV0ZXIuICovCi0jZGVmaW5lIHRvcnR1cmVfcGFybSh0eXBlLCBuYW1lLCBpbml0LCBtc2cpIFwKLQlzdGF0aWMgdHlwZSBuYW1lID0gaW5pdDsgXAotCW1vZHVsZV9wYXJhbShuYW1lLCB0eXBlLCAwNDQ0KTsgXAotCU1PRFVMRV9QQVJNX0RFU0MobmFtZSwgbXNnKTsKLQogLyogRGVmaW5pdGlvbnMgZm9yIG9ubGluZS9vZmZsaW5lIGV4ZXJjaXNlci4gKi8KIGludCB0b3J0dXJlX29ub2ZmX2luaXQobG9uZyBvb2hvbGRvZmYsIGxvbmcgb29pbnRlcnZhbCk7CiBjaGFyICp0b3J0dXJlX29ub2ZmX3N0YXRzKGNoYXIgKnBhZ2UpOwpAQCAtODEsNyArNzUsNyBAQAogaW50IHRvcnR1cmVfc3R1dHRlcl9pbml0KGludCBzKTsKIAogLyogSW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAuICovCi12b2lkIHRvcnR1cmVfaW5pdF9iZWdpbihjaGFyICp0dHlwZSwgYm9vbCB2LCBpbnQgKnJ1bm5hYmxlKTsKK2Jvb2wgdG9ydHVyZV9pbml0X2JlZ2luKGNoYXIgKnR0eXBlLCBib29sIHYsIGludCAqcnVubmFibGUpOwogdm9pZCB0b3J0dXJlX2luaXRfZW5kKHZvaWQpOwogYm9vbCB0b3J0dXJlX2NsZWFudXAodm9pZCk7CiBib29sIHRvcnR1cmVfbXVzdF9zdG9wKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKaW5kZXggMWU5OGI1NS4uNmY4YWI3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkgKiBwYWlycyB3aXRoIHRhc2tfd29ya19hZGQoKS0+c2V0X25vdGlmeV9yZXN1bWUoKSBhZnRlcgogCSAqIGhsaXN0X2FkZF9oZWFkKHRhc2stPnRhc2tfd29ya3MpOwogCSAqLwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+dGFza193b3JrcykpCiAJCXRhc2tfd29ya19ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCmluZGV4IGFkZDI2ZGEuLjAwYzlkNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaApAQCAtOTIsNyArOTIsMTAgQEAKICAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBsb3ctbGV2ZWwgdHR5IGRyaXZlciB0byBzaWduYWwKICAqCXRoYXQgbGluZSBkaXNjcGxpbmUgc2hvdWxkIHRyeSB0byBzZW5kIG1vcmUgY2hhcmFjdGVycyB0byB0aGUKICAqCWxvdy1sZXZlbCBkcml2ZXIgZm9yIHRyYW5zbWlzc2lvbi4gIElmIHRoZSBsaW5lIGRpc2NwbGluZSBkb2VzCi0gKglub3QgaGF2ZSBhbnkgbW9yZSBkYXRhIHRvIHNlbmQsIGl0IGNhbiBqdXN0IHJldHVybi4KKyAqCW5vdCBoYXZlIGFueSBtb3JlIGRhdGEgdG8gc2VuZCwgaXQgY2FuIGp1c3QgcmV0dXJuLiBJZiB0aGUgbGluZQorICoJZGlzY2lwbGluZSBkb2VzIGhhdmUgc29tZSBkYXRhIHRvIHNlbmQsIHBsZWFzZSBhcmlzZSBhIHRhc2tsZXQKKyAqCW9yIHdvcmtxdWV1ZSB0byBkbyB0aGUgcmVhbCBkYXRhIHRyYW5zZmVyLiBEbyBub3Qgc2VuZCBkYXRhIGluCisgKgl0aGlzIGhvb2ssIGl0IG1heSBsZWFkcyB0byBhIGRlYWRsb2NrLgogICoKICAqIGludCAoKmhhbmd1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKikKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggNGQxMThiYS4uYTBiYjcwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMTQyLDYgKzE0Miw3IEBACiAjZGVmaW5lIHBnb2ZmX3QgdW5zaWduZWQgbG9uZwogI2VuZGlmCiAKKy8qIEEgZG1hX2FkZHJfdCBjYW4gaG9sZCBhbnkgdmFsaWQgRE1BIG9yIGJ1cyBhZGRyZXNzIGZvciB0aGUgcGxhdGZvcm0gKi8KICNpZmRlZiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUCiB0eXBlZGVmIHU2NCBkbWFfYWRkcl90OwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IDZiN2VjMzcuLmQyNDY1YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMzUyLDYgKzM1Miw4IEBACiAJc3RydWN0IHVzYl9idXMgKmhzX2NvbXBhbmlvbjsJLyogQ29tcGFuaW9uIEVIQ0kgYnVzLCBpZiBhbnkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saXN0OwkvKiBsaXN0IG9mIGJ1c3NlcyAqLwogCisJc3RydWN0IG11dGV4IHVzYl9hZGRyZXNzMF9tdXRleDsgLyogdW5hZGRyZXNzZWQgZGV2aWNlIG11dGV4ICovCisKIAlpbnQgYmFuZHdpZHRoX2FsbG9jYXRlZDsJLyogb24gdGhpcyBidXM6IGhvdyBtdWNoIG9mIHRoZSB0aW1lCiAJCQkJCSAqIHJlc2VydmVkIGZvciBwZXJpb2RpYyAoaW50ci9pc28pCiAJCQkJCSAqIHJlcXVlc3RzIGlzIHVzZWQsIG9uIGF2ZXJhZ2U/CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IGQzY2EzYjUuLjczNzMyMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC01Nyw2ICs1Nyw2MSBAQAogc3RydWN0IHVzYl9jb25maWd1cmF0aW9uOwogCiAvKioKKyAqIHN0cnVjdCB1c2Jfb3NfZGVzY19leHRfcHJvcCAtIGRlc2NyaWJlcyBvbmUgIkV4dGVuZGVkIFByb3BlcnR5IgorICogQGVudHJ5OiB1c2VkIHRvIGtlZXAgYSBsaXN0IG9mIGV4dGVuZGVkIHByb3BlcnRpZXMKKyAqIEB0eXBlOiBFeHRlbmRlZCBQcm9wZXJ0eSB0eXBlCisgKiBAbmFtZV9sZW46IEV4dGVuZGVkIFByb3BlcnR5IHVuaWNvZGUgbmFtZSBsZW5ndGgsIGluY2x1ZGluZyB0ZXJtaW5hdGluZyAnXDAnCisgKiBAbmFtZTogRXh0ZW5kZWQgUHJvcGVydHkgbmFtZQorICogQGRhdGFfbGVuOiBMZW5ndGggb2YgRXh0ZW5kZWQgUHJvcGVydHkgYmxvYiAoZm9yIHVuaWNvZGUgc3RvcmUgZG91YmxlIGxlbikKKyAqIEBkYXRhOiBFeHRlbmRlZCBQcm9wZXJ0eSBibG9iCisgKiBAaXRlbTogUmVwcmVzZW50cyB0aGlzIEV4dGVuZGVkIFByb3BlcnR5IGluIGNvbmZpZ2ZzCisgKi8KK3N0cnVjdCB1c2Jfb3NfZGVzY19leHRfcHJvcCB7CisJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKKwl1OAkJCXR5cGU7CisJaW50CQkJbmFtZV9sZW47CisJY2hhcgkJCSpuYW1lOworCWludAkJCWRhdGFfbGVuOworCWNoYXIJCQkqZGF0YTsKKwlzdHJ1Y3QgY29uZmlnX2l0ZW0JaXRlbTsKK307CisKKy8qKgorICogc3RydWN0IHVzYl9vc19kZXNjIC0gZGVzY3JpYmVzIE9TIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgd2l0aCBvbmUgaW50ZXJmYWNlCisgKiBAZXh0X2NvbXBhdF9pZDogMTYgYnl0ZXMgb2YgIkNvbXBhdGlibGUgSUQiIGFuZCAiU3ViY29tcGF0aWJsZSBJRCIKKyAqIEBleHRfcHJvcDogRXh0ZW5kZWQgUHJvcGVydGllcyBsaXN0CisgKiBAZXh0X3Byb3BfbGVuOiBUb3RhbCBsZW5ndGggb2YgRXh0ZW5kZWQgUHJvcGVydGllcyBibG9icworICogQGV4dF9wcm9wX2NvdW50OiBOdW1iZXIgb2YgRXh0ZW5kZWQgUHJvcGVydGllcworICogQG9wdHNfbXV0ZXg6IE9wdGlvbmFsIG11dGV4IHByb3RlY3RpbmcgY29uZmlnIGRhdGEgb2YgYSB1c2JfZnVuY3Rpb25faW5zdGFuY2UKKyAqIEBncm91cDogUmVwcmVzZW50cyBPUyBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJmYWNlIGluIGNvbmZpZ2ZzCisgKiBAb3duZXI6IE1vZHVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBPUyBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCB1c2Jfb3NfZGVzYyB7CisJY2hhcgkJCSpleHRfY29tcGF0X2lkOworCXN0cnVjdCBsaXN0X2hlYWQJZXh0X3Byb3A7CisJaW50CQkJZXh0X3Byb3BfbGVuOworCWludAkJCWV4dF9wcm9wX2NvdW50OworCXN0cnVjdCBtdXRleAkJKm9wdHNfbXV0ZXg7CisJc3RydWN0IGNvbmZpZ19ncm91cAlncm91cDsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Cit9OworCisvKioKKyAqIHN0cnVjdCB1c2Jfb3NfZGVzY190YWJsZSAtIGRlc2NyaWJlcyBPUyBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHdpdGggb25lCisgKiBpbnRlcmZhY2Ugb2YgYSB1c2JfZnVuY3Rpb24KKyAqIEBpZl9pZDogSW50ZXJmYWNlIGlkCisgKiBAb3NfZGVzYzogIkV4dGVuZGVkIENvbXBhdGliaWxpdHkgSUQiIGFuZCAiRXh0ZW5kZWQgUHJvcGVydGllcyIgb2YgdGhlCisgKglpbnRlcmZhY2UKKyAqCisgKiBFYWNoIGludGVyZmFjZSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSAiRXh0ZW5kZWQgQ29tcGF0aWJpbGl0eSBJRCIgYW5kIGEKKyAqIG51bWJlciBvZiAiRXh0ZW5kZWQgUHJvcGVydGllcyIuCisgKi8KK3N0cnVjdCB1c2Jfb3NfZGVzY190YWJsZSB7CisJaW50CQkJaWZfaWQ7CisJc3RydWN0IHVzYl9vc19kZXNjCSpvc19kZXNjOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgdXNiX2Z1bmN0aW9uIC0gZGVzY3JpYmVzIG9uZSBmdW5jdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24KICAqIEBuYW1lOiBGb3IgZGlhZ25vc3RpY3MsIGlkZW50aWZpZXMgdGhlIGZ1bmN0aW9uLgogICogQHN0cmluZ3M6IHRhYmxlcyBvZiBzdHJpbmdzLCBrZXllZCBieSBpZGVudGlmaWVycyBhc3NpZ25lZCBkdXJpbmcgYmluZCgpCkBAIC03Myw2ICsxMjgsMTAgQEAKICAqCWJlIGF2YWlsYWJsZSBhdCBzdXBlciBzcGVlZC4KICAqIEBjb25maWc6IGFzc2lnbmVkIHdoZW4gQHVzYl9hZGRfZnVuY3Rpb24oKSBpcyBjYWxsZWQ7IHRoaXMgaXMgdGhlCiAgKgljb25maWd1cmF0aW9uIHdpdGggd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBhc3NvY2lhdGVkLgorICogQG9zX2Rlc2NfdGFibGU6IFRhYmxlIG9mIChpbnRlcmZhY2UgaWQsIG9zIGRlc2NyaXB0b3JzKSBwYWlycy4gVGhlIGZ1bmN0aW9uCisgKgljYW4gZXhwb3NlIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlLiBJZiBhbiBpbnRlcmZhY2UgaXMgYSBtZW1iZXIgb2YKKyAqCWFuIElBRCwgb25seSB0aGUgZmlyc3QgaW50ZXJmYWNlIG9mIElBRCBoYXMgaXRzIGVudHJ5IGluIHRoZSB0YWJsZS4KKyAqIEBvc19kZXNjX246IE51bWJlciBvZiBlbnRyaWVzIGluIG9zX2Rlc2NfdGFibGUKICAqIEBiaW5kOiBCZWZvcmUgdGhlIGdhZGdldCBjYW4gcmVnaXN0ZXIsIGFsbCBvZiBpdHMgZnVuY3Rpb25zIGJpbmQoKSB0byB0aGUKICAqCWF2YWlsYWJsZSByZXNvdXJjZXMgaW5jbHVkaW5nIHN0cmluZyBhbmQgaW50ZXJmYWNlIGlkZW50aWZpZXJzIHVzZWQKICAqCWluIGludGVyZmFjZSBvciBjbGFzcyBkZXNjcmlwdG9yczsgZW5kcG9pbnRzOyBJL08gYnVmZmVyczsgYW5kIHNvIG9uLgpAQCAtMTI5LDYgKzE4OCw5IEBACiAKIAlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24JKmNvbmZpZzsKIAorCXN0cnVjdCB1c2Jfb3NfZGVzY190YWJsZQkqb3NfZGVzY190YWJsZTsKKwl1bnNpZ25lZAkJCW9zX2Rlc2NfbjsKKwogCS8qIFJFVklTSVQ6ICBiaW5kKCkgZnVuY3Rpb25zIGNhbiBiZSBtYXJrZWQgX19pbml0LCB3aGljaAogCSAqIG1ha2VzIHRyb3VibGUgZm9yIHNlY3Rpb24gbWlzbWF0Y2ggYW5hbHlzaXMuICBTZWUgaWYKIAkgKiB3ZSBjYW4ndCByZXN0cnVjdHVyZSB0aGluZ3MgdG8gYXZvaWQgbWlzbWF0Y2hpbmcuCkBAIC0zMjcsNiArMzg5LDggQEAKIGV4dGVybiB2b2lkIHVzYl9jb21wb3NpdGVfc2V0dXBfY29udGludWUoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKIGV4dGVybiBpbnQgY29tcG9zaXRlX2Rldl9wcmVwYXJlKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciAqY29tcG9zaXRlLAogCQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOworZXh0ZXJuIGludCBjb21wb3NpdGVfb3NfZGVzY19yZXFfcHJlcGFyZShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCisJCQkJCSBzdHJ1Y3QgdXNiX2VwICplcDApOwogdm9pZCBjb21wb3NpdGVfZGV2X2NsZWFudXAoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgKnRvX2Nkcml2ZXIoCkBAIC0zMzUsMTEgKzM5OSwxOSBAQAogCXJldHVybiBjb250YWluZXJfb2YoZ2Rydiwgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyLCBnYWRnZXRfZHJpdmVyKTsKIH0KIAorI2RlZmluZSBPU19TVFJJTkdfUVdfU0lHTl9MRU4JCTE0CisjZGVmaW5lIE9TX1NUUklOR19JRFgJCQkweEVFCisKIC8qKgogICogc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2aWNlIC0gcmVwcmVzZW50cyBvbmUgY29tcG9zaXRlIHVzYiBnYWRnZXQKICAqIEBnYWRnZXQ6IHJlYWQtb25seSwgYWJzdHJhY3RzIHRoZSBnYWRnZXQncyB1c2IgcGVyaXBoZXJhbCBjb250cm9sbGVyCiAgKiBAcmVxOiB1c2VkIGZvciBjb250cm9sIHJlc3BvbnNlczsgYnVmZmVyIGlzIHByZS1hbGxvY2F0ZWQKKyAqIEBvc19kZXNjX3JlcTogdXNlZCBmb3IgT1MgZGVzY3JpcHRvcnMgcmVzcG9uc2VzOyBidWZmZXIgaXMgcHJlLWFsbG9jYXRlZAogICogQGNvbmZpZzogdGhlIGN1cnJlbnRseSBhY3RpdmUgY29uZmlndXJhdGlvbgorICogQHF3X3NpZ246IHF3U2lnbmF0dXJlIHBhcnQgb2YgdGhlIE9TIHN0cmluZworICogQGJfdmVuZG9yX2NvZGU6IGJNU19WZW5kb3JDb2RlIHBhcnQgb2YgdGhlIE9TIHN0cmluZworICogQHVzZV9vc19zdHJpbmc6IGZhbHNlIGJ5IGRlZmF1bHQsIGludGVyZXN0ZWQgZ2FkZ2V0cyBzZXQgaXQKKyAqIEBvc19kZXNjX2NvbmZpZzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCB3aXRoIE9TIGRlc2NyaXB0b3JzCiAgKgogICogT25lIG9mIHRoZXNlIGRldmljZXMgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdGhlCiAgKiBhc3NvY2lhdGVkIGRldmljZSBkcml2ZXIncyBiaW5kKCkgaXMgY2FsbGVkLgpAQCAtMzY5LDkgKzQ0MSwxNiBAQAogc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2IHsKIAlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldDsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXE7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqb3NfZGVzY19yZXE7CiAKIAlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24JKmNvbmZpZzsKIAorCS8qIE9TIFN0cmluZyBpcyBhIGN1c3RvbSAoeWV0IHBvcHVsYXIpIGV4dGVuc2lvbiB0byB0aGUgVVNCIHN0YW5kYXJkLiAqLworCXU4CQkJCXF3X3NpZ25bT1NfU1RSSU5HX1FXX1NJR05fTEVOXTsKKwl1OAkJCQliX3ZlbmRvcl9jb2RlOworCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbgkqb3NfZGVzY19jb25maWc7CisJdW5zaWduZWQgaW50CQkJdXNlX29zX3N0cmluZzoxOworCiAJLyogcHJpdmF0ZTogKi8KIAkvKiBpbnRlcm5hbHMgKi8KIAl1bnNpZ25lZCBpbnQJCQlzdXNwZW5kZWQ6MTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21zbV9oc3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiLmgKaW5kZXggMzI3NTQ4My4uYjBhMzkyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiLmgKQEAgLTIzLDIxICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKIC8qKgotICogU3VwcG9ydGVkIFVTQiBtb2RlcwotICoKLSAqIFVTQl9QRVJJUEhFUkFMICAgICAgIE9ubHkgcGVyaXBoZXJhbCBtb2RlIGlzIHN1cHBvcnRlZC4KLSAqIFVTQl9IT1NUICAgICAgICAgICAgIE9ubHkgaG9zdCBtb2RlIGlzIHN1cHBvcnRlZC4KLSAqIFVTQl9PVEcgICAgICAgICAgICAgIE9URyBtb2RlIGlzIHN1cHBvcnRlZC4KLSAqCi0gKi8KLWVudW0gdXNiX21vZGVfdHlwZSB7Ci0JVVNCX05PTkUgPSAwLAotCVVTQl9QRVJJUEhFUkFMLAotCVVTQl9IT1NULAotCVVTQl9PVEcsCi19OwotCi0vKioKICAqIE9URyBjb250cm9sCiAgKgogICogT1RHX05PX0NPTlRST0wJSWQvVkJVUyBub3RpZmljYXRpb25zIG5vdCByZXF1aXJlZC4gVXNlZnVsIGluIGhvc3QKQEAgLTExNSwyNyArMTAwLDIzIEBACiAvKioKICAqIHN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybSBkZXZpY2UgZGF0YQogICogICAgICAgICAgICAgIGZvciBtc21fb3RnIGRyaXZlci4KLSAqIEBwaHlfaW5pdF9zZXE6IFBIWSBjb25maWd1cmF0aW9uIHNlcXVlbmNlLiB2YWwsIHJlZyBwYWlycwotICogICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgLTEuCisgKiBAcGh5X2luaXRfc2VxOiBQSFkgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMuIFZhbHVlIG9mIC0xIGlzIHJlc2VydmVkIGFzCisgKiAgICAgICAgICAgICAgImRvIG5vdCBvdmVyd3JpdGUgZGVmYXVsdCB2YXVsZSBhdCB0aGlzIGFkZHJlc3MiLgorICogQHBoeV9pbml0X3N6OiBQSFkgY29uZmlndXJhdGlvbiBzZXF1ZW5jZSBzaXplLgogICogQHZidXNfcG93ZXI6IFZCVVMgcG93ZXIgb24vb2ZmIHJvdXRpbmUuCiAgKiBAcG93ZXJfYnVkZ2V0OiBWQlVTIHBvd2VyIGJ1ZGdldCBpbiBtQSAoMCB3aWxsIGJlIHRyZWF0ZWQgYXMgNTAwbUEpLgogICogQG1vZGU6IFN1cHBvcnRlZCBtb2RlIChPVEcvcGVyaXBoZXJhbC9ob3N0KS4KICAqIEBvdGdfY29udHJvbDogT1RHIHN3aXRjaCBjb250cm9sbGVkIGJ5IHVzZXIvSWQgcGluCi0gKiBAZGVmYXVsdF9tb2RlOiBEZWZhdWx0IG9wZXJhdGlvbmFsIG1vZGUuIEFwcGxpY2FibGUgb25seSBpZgotICogICAgICAgICAgICAgIE9URyBzd2l0Y2ggaXMgY29udHJvbGxlciBieSB1c2VyLgotICogQHBjbGtfc3JjX25hbWU6IHBjbGsgaXMgZGVyaXZlZCBmcm9tIGViaTFfdXNiX2NsayBpbiBjYXNlIG9mIDd4MjcgYW5kIDhrCi0gKiAgICAgICAgICAgICAgZGZhYl91c2JfaHNfY2xrIGluIGNhc2Ugb2YgODY2MCBhbmQgODk2MC4KICAqLwogc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSB7CiAJaW50ICpwaHlfaW5pdF9zZXE7CisJaW50IHBoeV9pbml0X3N6OwogCXZvaWQgKCp2YnVzX3Bvd2VyKShib29sIG9uKTsKIAl1bnNpZ25lZCBwb3dlcl9idWRnZXQ7Ci0JZW51bSB1c2JfbW9kZV90eXBlIG1vZGU7CisJZW51bSB1c2JfZHJfbW9kZSBtb2RlOwogCWVudW0gb3RnX2NvbnRyb2xfdHlwZSBvdGdfY29udHJvbDsKLQllbnVtIHVzYl9tb2RlX3R5cGUgZGVmYXVsdF9tb2RlOwogCWVudW0gbXNtX3VzYl9waHlfdHlwZSBwaHlfdHlwZTsKIAl2b2lkICgqc2V0dXBfZ3BpbykoZW51bSB1c2Jfb3RnX3N0YXRlIHN0YXRlKTsKLQljaGFyICpwY2xrX3NyY19uYW1lOwogCWludCAoKmxpbmtfY2xrX3Jlc2V0KShzdHJ1Y3QgY2xrICpsaW5rX2NsaywgYm9vbCBhc3NlcnQpOwogCWludCAoKnBoeV9jbGtfcmVzZXQpKHN0cnVjdCBjbGsgKnBoeV9jbGspOwogfTsKQEAgLTE0Nyw3ICsxMjgsNiBAQAogICogQGlycTogSVJRIG51bWJlciBhc3NpZ25lZCBmb3IgSFNVU0IgY29udHJvbGxlci4KICAqIEBjbGs6IGNsb2NrIHN0cnVjdCBvZiB1c2JfaHNfY2xrLgogICogQHBjbGs6IGNsb2NrIHN0cnVjdCBvZiB1c2JfaHNfcGNsay4KLSAqIEBwY2xrX3NyYzogcGNsayBzb3VyY2UgZm9yIHZvdGluZy4KICAqIEBwaHlfcmVzZXRfY2xrOiBjbG9jayBzdHJ1Y3Qgb2YgdXNiX3BoeV9jbGsuCiAgKiBAY29yZV9jbGs6IGNsb2NrIHN0cnVjdCBvZiB1c2JfaHNfY29yZV9jbGsuCiAgKiBAcmVnczogaW9yZW1hcHBlZCByZWdpc3RlciBiYXNlIGFkZHJlc3MuCkBAIC0xNjgsNyArMTQ4LDYgQEAKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsazsKIAlzdHJ1Y3QgY2xrICpwY2xrOwotCXN0cnVjdCBjbGsgKnBjbGtfc3JjOwogCXN0cnVjdCBjbGsgKnBoeV9yZXNldF9jbGs7CiAJc3RydWN0IGNsayAqY29yZV9jbGs7CiAJdm9pZCBfX2lvbWVtICpyZWdzOwpAQCAtMTc5LDEwICsxNTgsMTggQEAKIAlhdG9taWNfdCBpbl9scG07CiAJaW50IGFzeW5jX2ludDsKIAl1bnNpZ25lZCBjdXJfcG93ZXI7CisJaW50IHBoeV9udW1iZXI7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjaGdfd29yazsKIAllbnVtIHVzYl9jaGdfc3RhdGUgY2hnX3N0YXRlOwogCWVudW0gdXNiX2NoZ190eXBlIGNoZ190eXBlOwogCXU4IGRjZF9yZXRyaWVzOworCXN0cnVjdCByZWd1bGF0b3IgKnYzcDM7CisJc3RydWN0IHJlZ3VsYXRvciAqdjFwODsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZGRjeDsKKworCXN0cnVjdCByZXNldF9jb250cm9sICpwaHlfcnN0OworCXN0cnVjdCByZXNldF9jb250cm9sICpsaW5rX3JzdDsKKwlpbnQgdmRkX2xldmVsc1szXTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAppbmRleCA2ZTk3YTJkLi5hMjlmNjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaApAQCAtMTYsNiArMTYsOSBAQAogI2lmbmRlZiBfX0xJTlVYX1VTQl9HQURHRVRfTVNNNzJLX1VEQ19IX18KICNkZWZpbmUgX19MSU5VWF9VU0JfR0FER0VUX01TTTcyS19VRENfSF9fCiAKKy8qIFVTQiBwaHkgc2VsZWN0b3IgLSBpbiBUQ1NSIGFkZHJlc3MgcmFuZ2UgKi8KKyNkZWZpbmUgVVNCMl9QSFlfU0VMICAgICAgICAgMHhmZDRhYjAwMAorCiAjZGVmaW5lIFVTQl9BSEJCVVJTVCAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCiAjZGVmaW5lIFVTQl9BSEJNT0RFICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTgpCiAjZGVmaW5lIFVTQl9DQVBMRU5HVEggICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxMDApIC8qIDggYml0ICovCkBAIC0yNSwxMyArMjgsMTUgQEAKICNkZWZpbmUgVVNCX09UR1NDICAgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDFBNCkKICNkZWZpbmUgVVNCX1VTQk1PREUgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDFBOCkKICNkZWZpbmUgVVNCX1BIWV9DVFJMICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDI0MCkKKyNkZWZpbmUgVVNCX1BIWV9DVFJMMiAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDI3OCkKIAogI2RlZmluZSBVU0JDTURfUkVTRVQgICAyCiAjZGVmaW5lIFVTQl9VU0JJTlRSICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxNDgpCiAKICNkZWZpbmUgUE9SVFNDX1BIQ0QgICAgICAgICAgICAoMSA8PCAyMykgLyogcGh5IHN1c3BlbmQgbW9kZSAqLwotI2RlZmluZSBQT1JUU0NfUFRTX01BU0sgICAgICAgICAoMyA8PCAzMCkKLSNkZWZpbmUgUE9SVFNDX1BUU19VTFBJICAgICAgICAgKDMgPDwgMzApCisjZGVmaW5lIFBPUlRTQ19QVFNfTUFTSyAgICAgICAgKDMgPDwgMzApCisjZGVmaW5lIFBPUlRTQ19QVFNfVUxQSSAgICAgICAgKDIgPDwgMzApCisjZGVmaW5lIFBPUlRTQ19QVFNfU0VSSUFMICAgICAgKDMgPDwgMzApCiAKICNkZWZpbmUgVVNCX1VMUElfVklFV1BPUlQgICAgKE1TTV9VU0JfQkFTRSArIDB4MDE3MCkKICNkZWZpbmUgVUxQSV9SVU4gICAgICAgICAgICAgICgxIDw8IDMwKQpAQCAtNDEsOSArNDYsMTQgQEAKICNkZWZpbmUgVUxQSV9EQVRBKG4pICAgICAgICAgICgobikgJiAyNTUpCiAjZGVmaW5lIFVMUElfREFUQV9SRUFEKG4pICAgICAoKChuKSA+PiA4KSAmIDI1NSkKIAorLyogc3lub3BzeXMgMjhubSBwaHkgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVMUElfUFdSX0NMS19NTkdfUkVHCTB4ODgKKyNkZWZpbmUgT1RHX0NPTVBfRElTQUJMRQlCSVQoMCkKKwogI2RlZmluZSBBU1lOQ19JTlRSX0NUUkwgICAgICAgICAoMSA8PCAyOSkgLyogRW5hYmxlIGFzeW5jIGludGVycnVwdCAqLwogI2RlZmluZSBVTFBJX1NUUF9DVFJMICAgICAgICAgICAoMSA8PCAzMCkgLyogQmxvY2sgY29tbXVuaWNhdGlvbiB3aXRoIFBIWSAqLwogI2RlZmluZSBQSFlfUkVURU4gICAgICAgICAgICAgICAoMSA8PCAxKSAvKiBQSFkgcmV0ZW50aW9uIGVuYWJsZS9kaXNhYmxlICovCisjZGVmaW5lIFBIWV9QT1JfQVNTRVJUCQkoMSA8PCAwKSAvKiBVU0IyIDI4bm0gUEhZIFBPUiBBU1NFUlQgKi8KIAogLyogT1RHIGRlZmluaXRpb25zICovCiAjZGVmaW5lIE9UR1NDX0lOVFNUU19NQVNLCSgweDdmIDw8IDE2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYl9waHlfZ2VuX3hjZWl2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOGQ4MTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdXNiX3BoeV9nZW5feGNlaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSNpZm5kZWYgX19MSU5VWF9VU0JfTk9QX1hDRUlWX0gKLSNkZWZpbmUgX19MSU5VWF9VU0JfTk9QX1hDRUlWX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLQotc3RydWN0IHVzYl9waHlfZ2VuX3hjZWl2X3BsYXRmb3JtX2RhdGEgewotCWVudW0gdXNiX3BoeV90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKLQotCS8qIGlmIHNldCBmYWlscyB3aXRoIC1FUFJPQkVfREVGRVIgaWYgY2FuJ3QgZ2V0IHJlZ3VsYXRvciAqLwotCXVuc2lnbmVkIGludCBuZWVkc192Y2M6MTsKLQl1bnNpZ25lZCBpbnQgbmVlZHNfcmVzZXQ6MTsJLyogZGVwcmVjYXRlZCAqLwotCWludCBncGlvX3Jlc2V0OwotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVYpIHx8IChkZWZpbmVkKENPTkZJR19OT1BfVVNCX1hDRUlWX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotLyogc29tZXRpbWVzIHRyYW5zY2VpdmVycyBhcmUgYWNjZXNzZWQgb25seSB0aHJvdWdoIGUuZy4gVUxQSSAqLwotZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKTsKLWV4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fTElOVVhfVVNCX05PUF9YQ0VJVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JfcGh5X2dlbmVyaWMuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWRhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JfcGh5X2dlbmVyaWMuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9fTElOVVhfVVNCX05PUF9YQ0VJVl9ICisjZGVmaW5lIF9fTElOVVhfVVNCX05PUF9YQ0VJVl9ICisKKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisKK3N0cnVjdCB1c2JfcGh5X2dlbmVyaWNfcGxhdGZvcm1fZGF0YSB7CisJZW51bSB1c2JfcGh5X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGNsa19yYXRlOworCisJLyogaWYgc2V0IGZhaWxzIHdpdGggLUVQUk9CRV9ERUZFUiBpZiBjYW4ndCBnZXQgcmVndWxhdG9yICovCisJdW5zaWduZWQgaW50IG5lZWRzX3ZjYzoxOworCXVuc2lnbmVkIGludCBuZWVkc19yZXNldDoxOwkvKiBkZXByZWNhdGVkICovCisJaW50IGdwaW9fcmVzZXQ7Cit9OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfTk9QX1VTQl9YQ0VJVikKKy8qIHNvbWV0aW1lcyB0cmFuc2NlaXZlcnMgYXJlIGFjY2Vzc2VkIG9ubHkgdGhyb3VnaCBlLmcuIFVMUEkgKi8KK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1c2JfcGh5X2dlbmVyaWNfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCB1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiX3BoeV9nZW5lcmljX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9OT1BfWENFSVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZXhwcmVzcy5oIGIvaW5jbHVkZS9saW51eC92ZXhwcmVzcy5oCmluZGV4IDYxN2MwMWIuLmE0Yzk1NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmV4cHJlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZleHByZXNzLmgKQEAgLTE1LDI4ICsxNSwxNSBAQAogI2RlZmluZSBfTElOVVhfVkVYUFJFU1NfSAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAKICNkZWZpbmUgVkVYUFJFU1NfU0lURV9NQgkJMAogI2RlZmluZSBWRVhQUkVTU19TSVRFX0RCMQkJMQogI2RlZmluZSBWRVhQUkVTU19TSVRFX0RCMgkJMgogI2RlZmluZSBWRVhQUkVTU19TSVRFX01BU1RFUgkJMHhmCiAKLSNkZWZpbmUgVkVYUFJFU1NfQ09ORklHX1NUQVRVU19ET05FCTAKLSNkZWZpbmUgVkVYUFJFU1NfQ09ORklHX1NUQVRVU19XQUlUCTEKLQotI2RlZmluZSBWRVhQUkVTU19HUElPX01NQ19DQVJESU4JMAotI2RlZmluZSBWRVhQUkVTU19HUElPX01NQ19XUFJPVAkJMQotI2RlZmluZSBWRVhQUkVTU19HUElPX0ZMQVNIX1dQbgkJMgotI2RlZmluZSBWRVhQUkVTU19HUElPX0xFRDAJCTMKLSNkZWZpbmUgVkVYUFJFU1NfR1BJT19MRUQxCQk0Ci0jZGVmaW5lIFZFWFBSRVNTX0dQSU9fTEVEMgkJNQotI2RlZmluZSBWRVhQUkVTU19HUElPX0xFRDMJCTYKLSNkZWZpbmUgVkVYUFJFU1NfR1BJT19MRUQ0CQk3Ci0jZGVmaW5lIFZFWFBSRVNTX0dQSU9fTEVENQkJOAotI2RlZmluZSBWRVhQUkVTU19HUElPX0xFRDYJCTkKLSNkZWZpbmUgVkVYUFJFU1NfR1BJT19MRUQ3CQkxMAotCiAjZGVmaW5lIFZFWFBSRVNTX1JFU19GVU5DKF9zaXRlLCBfZnVuYykJXAogewkJCQkJXAogCS5zdGFydCA9IChfc2l0ZSksCQlcCkBAIC00NCw4NCArMzEsNDMgQEAKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX0JVUywJXAogfQogCisvKiBDb25maWcgaW5mcmFzdHJ1Y3R1cmUgKi8KKwordm9pZCB2ZXhwcmVzc19jb25maWdfc2V0X21hc3Rlcih1MzIgc2l0ZSk7Cit1MzIgdmV4cHJlc3NfY29uZmlnX2dldF9tYXN0ZXIodm9pZCk7CisKK3ZvaWQgdmV4cHJlc3NfY29uZmlnX2xvY2sodm9pZCAqYXJnKTsKK3ZvaWQgdmV4cHJlc3NfY29uZmlnX3VubG9jayh2b2lkICphcmcpOworCitpbnQgdmV4cHJlc3NfY29uZmlnX2dldF90b3BvKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyICpzaXRlLAorCQl1MzIgKnBvc2l0aW9uLCB1MzIgKmRjYyk7CisKIC8qIENvbmZpZyBicmlkZ2UgQVBJICovCiAKLS8qKgotICogc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2VfaW5mbyAtIGRlc2NyaXB0aW9uIG9mIHRoZSBwbGF0Zm9ybQotICogY29uZmlndXJhdGlvbiBpbmZyYXN0cnVjdHVyZSBicmlkZ2UuCi0gKgotICogQG5hbWU6CUJyaWRnZSBuYW1lCi0gKgotICogQGZ1bmNfZ2V0OglPYnRhaW5zIHBvaW50ZXIgdG8gYSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIGZvciBhIGdpdmVuCi0gKgkJZGV2aWNlIG9yIGEgRGV2aWNlIFRyZWUgbm9kZSwgdG8gYmUgdXNlZCB3aXRoIEBmdW5jX3B1dAotICoJCWFuZCBAZnVuY19leGVjLiBUaGUgbm9kZSBwb2ludGVyIHNob3VsZCB0YWtlIHByZWNlZGVuY2UKLSAqCQlvdmVyIGRldmljZSBwb2ludGVyIHdoZW4gYm90aCBhcmUgcGFzc2VkLgotICoKLSAqIEBmdW5jX3B1dDoJVGVsbHMgdGhlIGJyaWRnZSB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBiZSB1c2VkIGFueQotICoJCW1vcmUsIHNvIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIGNhbiBiZSByZWxlYXNlZC4KLSAqCi0gKiBAZnVuY19leGVjOglFeGVjdXRlcyBhIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uCi0gKgkJVGhlIG9mZnNldCBzZWxlY3RzIGEgMzIgYml0IHdvcmQgb2YgdGhlIHZhbHVlIGFjY2Vzc2VkLgotICoJCU11c3QgcmV0dXJuIFZFWFBSRVNTX0NPTkZJR19TVEFUVVNfRE9ORSB3aGVuIG9wZXJhdGlvbgotICoJCWlzIGZpbmlzaGVkIGltbWVkaWF0ZWx5LCBWRVhQUkVTU19DT05GSUdfU1RBVFVTX1dBSVQgd2hlbgotICoJCXdpbGwgYmUgY29tcGxldGVkIGluIHNvbWUgdGltZSBvciBuZWdhdGl2ZSB2YWx1ZSBpbiBjYXNlCi0gKgkJb2YgZXJyb3IuCi0gKi8KLXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlX2luZm8gewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jdm9pZCAqKCpmdW5jX2dldCkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwotCXZvaWQgKCpmdW5jX3B1dCkodm9pZCAqZnVuYyk7Ci0JaW50ICgqZnVuY19leGVjKSh2b2lkICpmdW5jLCBpbnQgb2Zmc2V0LCBib29sIHdyaXRlLCB1MzIgKmRhdGEpOworc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2Vfb3BzIHsKKwlzdHJ1Y3QgcmVnbWFwICogKCpyZWdtYXBfaW5pdCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjb250ZXh0KTsKKwl2b2lkICgqcmVnbWFwX2V4aXQpKHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgdm9pZCAqY29udGV4dCk7CiB9OwogCi1zdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZTsKK3N0cnVjdCBkZXZpY2UgKnZleHByZXNzX2NvbmZpZ19icmlkZ2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAorCQlzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZV9vcHMgKm9wcywgdm9pZCAqY29udGV4dCk7CiAKLXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlICp2ZXhwcmVzc19jb25maWdfYnJpZGdlX3JlZ2lzdGVyKAotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCXN0cnVjdCB2ZXhwcmVzc19jb25maWdfYnJpZGdlX2luZm8gKmluZm8pOwotdm9pZCB2ZXhwcmVzc19jb25maWdfYnJpZGdlX3VucmVnaXN0ZXIoc3RydWN0IHZleHByZXNzX2NvbmZpZ19icmlkZ2UgKmJyaWRnZSk7CisvKiBDb25maWcgcmVnbWFwIEFQSSAqLwogCi12b2lkIHZleHByZXNzX2NvbmZpZ19jb21wbGV0ZShzdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2JyaWRnZSAqYnJpZGdlLAotCQlpbnQgc3RhdHVzKTsKLQotLyogQ29uZmlnIGZ1bmN0aW9uIEFQSSAqLwotCi1zdHJ1Y3QgdmV4cHJlc3NfY29uZmlnX2Z1bmM7Ci0KLXN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyAqX192ZXhwcmVzc19jb25maWdfZnVuY19nZXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwotI2RlZmluZSB2ZXhwcmVzc19jb25maWdfZnVuY19nZXRfYnlfZGV2KGRldikgXAotCQlfX3ZleHByZXNzX2NvbmZpZ19mdW5jX2dldChkZXYsIE5VTEwpCi0jZGVmaW5lIHZleHByZXNzX2NvbmZpZ19mdW5jX2dldF9ieV9ub2RlKG5vZGUpIFwKLQkJX192ZXhwcmVzc19jb25maWdfZnVuY19nZXQoTlVMTCwgbm9kZSkKLXZvaWQgdmV4cHJlc3NfY29uZmlnX2Z1bmNfcHV0KHN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyAqZnVuYyk7Ci0KLS8qIEJvdGggbWF5IHNsZWVwISAqLwotaW50IHZleHByZXNzX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZXhwcmVzc19jb25maWdfZnVuYyAqZnVuYywgaW50IG9mZnNldCwKLQkJdTMyICpkYXRhKTsKLWludCB2ZXhwcmVzc19jb25maWdfd3JpdGUoc3RydWN0IHZleHByZXNzX2NvbmZpZ19mdW5jICpmdW5jLCBpbnQgb2Zmc2V0LAotCQl1MzIgZGF0YSk7CitzdHJ1Y3QgcmVnbWFwICpkZXZtX3JlZ21hcF9pbml0X3ZleHByZXNzX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKiBQbGF0Zm9ybSBjb250cm9sICovCiAKK3Vuc2lnbmVkIGludCB2ZXhwcmVzc19nZXRfbWNpX2NhcmRpbihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdTMyIHZleHByZXNzX2dldF9wcm9jaWQoaW50IHNpdGUpOwotdTMyIHZleHByZXNzX2dldF9oYmkoaW50IHNpdGUpOwogdm9pZCAqdmV4cHJlc3NfZ2V0XzI0bWh6X2Nsb2NrX2Jhc2Uodm9pZCk7CiB2b2lkIHZleHByZXNzX2ZsYWdzX3NldCh1MzIgZGF0YSk7CiAKLSNkZWZpbmUgdmV4cHJlc3NfZ2V0X3NpdGVfYnlfbm9kZShub2RlKSBfX3ZleHByZXNzX2dldF9zaXRlKE5VTEwsIG5vZGUpCi0jZGVmaW5lIHZleHByZXNzX2dldF9zaXRlX2J5X2RldihkZXYpIF9fdmV4cHJlc3NfZ2V0X3NpdGUoZGV2LCBOVUxMKQotdW5zaWduZWQgX192ZXhwcmVzc19nZXRfc2l0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7Ci0KIHZvaWQgdmV4cHJlc3Nfc3lzcmVnX2Vhcmx5X2luaXQodm9pZCBfX2lvbWVtICpiYXNlKTsKLXZvaWQgdmV4cHJlc3Nfc3lzcmVnX29mX2Vhcmx5X2luaXQodm9pZCk7CitpbnQgdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAogLyogQ2xvY2tzICovCiAKLXN0cnVjdCBjbGsgKnZleHByZXNzX29zY19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotdm9pZCB2ZXhwcmVzc19vc2Nfb2Zfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKLQogdm9pZCB2ZXhwcmVzc19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKnNwODEwX2Jhc2UpOwotdm9pZCB2ZXhwcmVzc19jbGtfb2ZfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA1Njc5ZDkyLi42MjRhOGE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTEyMDQsNyArMTIwNCw3IEBACiAvKiBwdXQgYmFjayB0aGUgY29ubiB3aXRob3V0IHJlc3RhcnRpbmcgaXRzIHRpbWVyICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pcF92c19jb25uX3B1dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiB7Ci0Jc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWF0b21pY19kZWMoJmNwLT5yZWZjbnQpOwogfQogdm9pZCBpcF92c19jb25uX3B1dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApOwpAQCAtMTQwOCw3ICsxNDA4LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Rlc3RfcHV0KHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfZGVjKCZkZXN0LT5yZWZjbnQpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93aW1heC5oIGIvaW5jbHVkZS9uZXQvd2ltYXguaAppbmRleCA5ODQ5OGUxLi5lNTJlZjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93aW1heC5oCisrKyBiL2luY2x1ZGUvbmV0L3dpbWF4LmgKQEAgLTQ4Myw4ICs0ODMsOCBAQAogICogQmUgc3VyZSBub3QgdG8gbW9kaWZ5IHNrYi0+ZGF0YSBpbiB0aGUgbWlkZGxlIChpZTogZG9uJ3QgdXNlCiAgKiBza2JfcHVzaCgpL3NrYl9wdWxsKCkvc2tiX3Jlc2VydmUoKSBvbiB0aGUgc2tiKS4KICAqCi0gKiAicGlwZV9uYW1lIiBpcyBhbnkgc3RyaW5nLCB0aGFuIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSBvZgotICogdGhlIHBpcGUgb3IgZGVzdGluYXRhcnk7IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBpdCBpcyBkcml2ZXIKKyAqICJwaXBlX25hbWUiIGlzIGFueSBzdHJpbmcsIHRoYXQgY2FuIGJlIGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9mCisgKiB0aGUgcGlwZSBvciByZWNpcGllbnQ7IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBpdCBpcyBkcml2ZXIKICAqIHNwZWNpZmljLCBzbyB0aGUgcmVjaXBpZW50IGNhbiBtdWx0aXBsZXggaXQgYXMgd2lzaGVkLiBJdCBjYW4gYmUKICAqIE5VTEwsIGl0IHdvbid0IGJlIHVzZWQgLSBhbiBleGFtcGxlIGlzIHVzaW5nIGEgImRpYWdub3N0aWNzIiB0YWcgdG8KICAqIHNlbmQgZGlhZ25vc3RpY3MgaW5mb3JtYXRpb24gdGhhdCBhIGRldmljZS1zcGVjaWZpYyBkaWFnbm9zdGljcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZmlsZWxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkMTFjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIEV2ZW50cyBmb3IgZmlsZXN5c3RlbSBsb2NrcworICoKKyAqIENvcHlyaWdodCAyMDEzIEplZmYgTGF5dG9uIDxqbGF5dG9uQHBvb2NoaWVyZWRzLm5ldD4KKyAqLworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gZmlsZWxvY2sKKworI2lmICFkZWZpbmVkKF9UUkFDRV9GSUxFTE9DS19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfRklMRUxPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisKKyNkZWZpbmUgc2hvd19mbF9mbGFncyh2YWwpCQkJCQkJXAorCV9fcHJpbnRfZmxhZ3ModmFsLCAifCIsIAkJCQkJXAorCQl7IEZMX1BPU0lYLAkJIkZMX1BPU0lYIiB9LAkJCVwKKwkJeyBGTF9GTE9DSywJCSJGTF9GTE9DSyIgfSwJCQlcCisJCXsgRkxfREVMRUcsCQkiRkxfREVMRUciIH0sCQkJXAorCQl7IEZMX0FDQ0VTUywJCSJGTF9BQ0NFU1MiIH0sCQkJXAorCQl7IEZMX0VYSVNUUywJCSJGTF9FWElTVFMiIH0sCQkJXAorCQl7IEZMX0xFQVNFLAkJIkZMX0xFQVNFIiB9LAkJCVwKKwkJeyBGTF9DTE9TRSwJCSJGTF9DTE9TRSIgfSwJCQlcCisJCXsgRkxfU0xFRVAsCQkiRkxfU0xFRVAiIH0sCQkJXAorCQl7IEZMX0RPV05HUkFERV9QRU5ESU5HLAkiRkxfRE9XTkdSQURFX1BFTkRJTkciIH0sCVwKKwkJeyBGTF9VTkxPQ0tfUEVORElORywJIkZMX1VOTE9DS19QRU5ESU5HIiB9LAkJXAorCQl7IEZMX09GRExDSywJCSJGTF9PRkRMQ0siIH0pCisKKyNkZWZpbmUgc2hvd19mbF90eXBlKHZhbCkJCQkJXAorCV9fcHJpbnRfc3ltYm9saWModmFsLAkJCQlcCisJCQl7IEZfUkRMQ0ssICJGX1JETENLIiB9LAkJXAorCQkJeyBGX1dSTENLLCAiRl9XUkxDSyIgfSwJCVwKKwkJCXsgRl9VTkxDSywgIkZfVU5MQ0siIH0pCisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoZmlsZWxvY2tfbGVhc2UsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCksCisKKwlUUF9BUkdTKGlub2RlLCBmbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBmaWxlX2xvY2sgKiwgZmwpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgaV9pbm8pCisJCV9fZmllbGQoZGV2X3QsIHNfZGV2KQorCQlfX2ZpZWxkKHN0cnVjdCBmaWxlX2xvY2sgKiwgZmxfbmV4dCkKKwkJX19maWVsZChmbF9vd25lcl90LCBmbF9vd25lcikKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIGZsX2ZsYWdzKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIGZsX3R5cGUpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgZmxfYnJlYWtfdGltZSkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBmbF9kb3duZ3JhZGVfdGltZSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmZsID0gZmw7CisJCV9fZW50cnktPnNfZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pX2lubyA9IGlub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+ZmxfbmV4dCA9IGZsLT5mbF9uZXh0OworCQlfX2VudHJ5LT5mbF9vd25lciA9IGZsLT5mbF9vd25lcjsKKwkJX19lbnRyeS0+ZmxfZmxhZ3MgPSBmbC0+ZmxfZmxhZ3M7CisJCV9fZW50cnktPmZsX3R5cGUgPSBmbC0+ZmxfdHlwZTsKKwkJX19lbnRyeS0+ZmxfYnJlYWtfdGltZSA9IGZsLT5mbF9icmVha190aW1lOworCQlfX2VudHJ5LT5mbF9kb3duZ3JhZGVfdGltZSA9IGZsLT5mbF9kb3duZ3JhZGVfdGltZTsKKwkpLAorCisJVFBfcHJpbnRrKCJmbD0weCVwIGRldj0weCV4OjB4JXggaW5vPTB4JWx4IGZsX25leHQ9MHglcCBmbF9vd25lcj0weCVwIGZsX2ZsYWdzPSVzIGZsX3R5cGU9JXMgZmxfYnJlYWtfdGltZT0lbHUgZmxfZG93bmdyYWRlX3RpbWU9JWx1IiwKKwkJX19lbnRyeS0+ZmwsIE1BSk9SKF9fZW50cnktPnNfZGV2KSwgTUlOT1IoX19lbnRyeS0+c19kZXYpLAorCQlfX2VudHJ5LT5pX2lubywgX19lbnRyeS0+ZmxfbmV4dCwgX19lbnRyeS0+Zmxfb3duZXIsCisJCXNob3dfZmxfZmxhZ3MoX19lbnRyeS0+ZmxfZmxhZ3MpLAorCQlzaG93X2ZsX3R5cGUoX19lbnRyeS0+ZmxfdHlwZSksCisJCV9fZW50cnktPmZsX2JyZWFrX3RpbWUsIF9fZW50cnktPmZsX2Rvd25ncmFkZV90aW1lKQorKTsKKworREVGSU5FX0VWRU5UKGZpbGVsb2NrX2xlYXNlLCBicmVha19sZWFzZV9ub2Jsb2NrLCBUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCksCisJCVRQX0FSR1MoaW5vZGUsIGZsKSk7CisKK0RFRklORV9FVkVOVChmaWxlbG9ja19sZWFzZSwgYnJlYWtfbGVhc2VfYmxvY2ssIFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKSwKKwkJVFBfQVJHUyhpbm9kZSwgZmwpKTsKKworREVGSU5FX0VWRU5UKGZpbGVsb2NrX2xlYXNlLCBicmVha19sZWFzZV91bmJsb2NrLCBUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCksCisJCVRQX0FSR1MoaW5vZGUsIGZsKSk7CisKK0RFRklORV9FVkVOVChmaWxlbG9ja19sZWFzZSwgZ2VuZXJpY19hZGRfbGVhc2UsIFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKSwKKwkJVFBfQVJHUyhpbm9kZSwgZmwpKTsKKworREVGSU5FX0VWRU5UKGZpbGVsb2NrX2xlYXNlLCBnZW5lcmljX2RlbGV0ZV9sZWFzZSwgVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpLAorCQlUUF9BUkdTKGlub2RlLCBmbCkpOworCitERUZJTkVfRVZFTlQoZmlsZWxvY2tfbGVhc2UsIHRpbWVfb3V0X2xlYXNlcywgVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpLAorCQlUUF9BUkdTKGlub2RlLCBmbCkpOworCisjZW5kaWYgLyogX1RSQUNFX0ZJTEVMT0NLX0ggKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAppbmRleCA2OTI5NTcxLi4yNGU5MDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKQEAgLTMxNyw2ICszMTcsNyBAQAogaGVhZGVyLXkgKz0gcHBwX2RlZnMuaAogaGVhZGVyLXkgKz0gcHBzLmgKIGhlYWRlci15ICs9IHByY3RsLmgKK2hlYWRlci15ICs9IHBzY2kuaAogaGVhZGVyLXkgKz0gcHRwX2Nsb2NrLmgKIGhlYWRlci15ICs9IHB0cmFjZS5oCiBoZWFkZXIteSArPSBxbng0X2ZzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9nZnMyX29uZGlzay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2dmczJfb25kaXNrLmgKaW5kZXggZGIzZmRkMC4uMWE3NjNlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2dmczJfb25kaXNrLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2dmczJfb25kaXNrLmgKQEAgLTIwLDcgKzIwLDcgQEAKIAogI2RlZmluZSBHRlMyX01PVU5UX0xPQ0sJCTAKICNkZWZpbmUgR0ZTMl9MSVZFX0xPQ0sJCTEKLSNkZWZpbmUgR0ZTMl9UUkFOU19MT0NLCQkyCisjZGVmaW5lIEdGUzJfRlJFRVpFX0xPQ0sJMgogI2RlZmluZSBHRlMyX1JFTkFNRV9MT0NLCTMKICNkZWZpbmUgR0ZTMl9DT05UUk9MX0xPQ0sJNAogI2RlZmluZSBHRlMyX01PVU5URURfTE9DSwk1CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pbnB1dC5oCmluZGV4IGY0ODQ5NTIuLjE5ZGYxOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pbnB1dC5oCkBAIC00NjIsNyArNDYyLDEwIEBACiAjZGVmaW5lIEtFWV9WSURFT19ORVhUCQkyNDEJLyogZHJpdmUgbmV4dCB2aWRlbyBzb3VyY2UgKi8KICNkZWZpbmUgS0VZX1ZJREVPX1BSRVYJCTI0MgkvKiBkcml2ZSBwcmV2aW91cyB2aWRlbyBzb3VyY2UgKi8KICNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfQ1lDTEUJMjQzCS8qIGJyaWdodG5lc3MgdXAsIGFmdGVyIG1heCBpcyBtaW4gKi8KLSNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfWkVSTwkyNDQJLyogYnJpZ2h0bmVzcyBvZmYsIHVzZSBhbWJpZW50ICovCisjZGVmaW5lIEtFWV9CUklHSFRORVNTX0FVVE8JMjQ0CS8qIFNldCBBdXRvIEJyaWdodG5lc3M6IG1hbnVhbAorCQkJCQkgIGJyaWdodG5lc3MgY29udHJvbCBpcyBvZmYsCisJCQkJCSAgcmVseSBvbiBhbWJpZW50ICovCisjZGVmaW5lIEtFWV9CUklHSFRORVNTX1pFUk8JS0VZX0JSSUdIVE5FU1NfQVVUTwogI2RlZmluZSBLRVlfRElTUExBWV9PRkYJCTI0NQkvKiBkaXNwbGF5IGRldmljZSB0byBvZmYgc3RhdGUgKi8KIAogI2RlZmluZSBLRVlfV1dBTgkJMjQ2CS8qIFdpcmVsZXNzIFdBTiAoTFRFLCBVTVRTLCBHU00sIGV0Yy4pICovCkBAIC02MzIsNiArNjM1LDcgQEAKICNkZWZpbmUgS0VZX0FERFJFU1NCT09LCQkweDFhZAkvKiBBTCBDb250YWN0cy9BZGRyZXNzIEJvb2sgKi8KICNkZWZpbmUgS0VZX01FU1NFTkdFUgkJMHgxYWUJLyogQUwgSW5zdGFudCBNZXNzYWdpbmcgKi8KICNkZWZpbmUgS0VZX0RJU1BMQVlUT0dHTEUJMHgxYWYJLyogVHVybiBkaXNwbGF5IChMQ0QpIG9uIGFuZCBvZmYgKi8KKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfVE9HR0xFCUtFWV9ESVNQTEFZVE9HR0xFCiAjZGVmaW5lIEtFWV9TUEVMTENIRUNLCQkweDFiMCAgIC8qIEFMIFNwZWxsIENoZWNrICovCiAjZGVmaW5lIEtFWV9MT0dPRkYJCTB4MWIxICAgLyogQUwgTG9nb2ZmICovCiAKQEAgLTcyMyw2ICs3MjcsMTcgQEAKIAogI2RlZmluZSBLRVlfQUxTX1RPR0dMRQkJMHgyMzAJLyogQW1iaWVudCBsaWdodCBzZW5zb3IgKi8KIAorI2RlZmluZSBLRVlfQlVUVE9OQ09ORklHCQkweDI0MAkvKiBBTCBCdXR0b24gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBLRVlfVEFTS01BTkFHRVIJCTB4MjQxCS8qIEFMIFRhc2svUHJvamVjdCBNYW5hZ2VyICovCisjZGVmaW5lIEtFWV9KT1VSTkFMCQkweDI0MgkvKiBBTCBMb2cvSm91cm5hbC9UaW1lY2FyZCAqLworI2RlZmluZSBLRVlfQ09OVFJPTFBBTkVMCQkweDI0MwkvKiBBTCBDb250cm9sIFBhbmVsICovCisjZGVmaW5lIEtFWV9BUFBTRUxFQ1QJCTB4MjQ0CS8qIEFMIFNlbGVjdCBUYXNrL0FwcGxpY2F0aW9uICovCisjZGVmaW5lIEtFWV9TQ1JFRU5TQVZFUgkJMHgyNDUJLyogQUwgU2NyZWVuIFNhdmVyICovCisjZGVmaW5lIEtFWV9WT0lDRUNPTU1BTkQJCTB4MjQ2CS8qIExpc3RlbmluZyBWb2ljZSBDb21tYW5kICovCisKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfTUlOCQkweDI1MAkvKiBTZXQgQnJpZ2h0bmVzcyB0byBNaW5pbXVtICovCisjZGVmaW5lIEtFWV9CUklHSFRORVNTX01BWAkJMHgyNTEJLyogU2V0IEJyaWdodG5lc3MgdG8gTWF4aW11bSAqLworCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZCQkweDJjMAogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEJCTB4MmMwCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMgkJMHgyYzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCBhOGY0ZWU1Li5lMTFkOGYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCkBAIC0xNzEsNiArMTcxLDcgQEAKICNkZWZpbmUgS1ZNX0VYSVRfV0FUQ0hET0cgICAgICAgICAyMQogI2RlZmluZSBLVk1fRVhJVF9TMzkwX1RTQ0ggICAgICAgIDIyCiAjZGVmaW5lIEtWTV9FWElUX0VQUiAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgS1ZNX0VYSVRfU1lTVEVNX0VWRU5UICAgICAyNAogCiAvKiBGb3IgS1ZNX0VYSVRfSU5URVJOQUxfRVJST1IgKi8KIC8qIEVtdWxhdGUgaW5zdHJ1Y3Rpb24gZmFpbGVkLiAqLwpAQCAtMzAxLDYgKzMwMiwxMyBAQAogCQlzdHJ1Y3QgewogCQkJX191MzIgZXByOwogCQl9IGVwcjsKKwkJLyogS1ZNX0VYSVRfU1lTVEVNX0VWRU5UICovCisJCXN0cnVjdCB7CisjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04gICAgICAgMQorI2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1JFU0VUICAgICAgICAgIDIKKwkJCV9fdTMyIHR5cGU7CisJCQlfX3U2NCBmbGFnczsKKwkJfSBzeXN0ZW1fZXZlbnQ7CiAJCS8qIEZpeCB0aGUgc2l6ZSBvZiB0aGUgdW5pb24uICovCiAJCWNoYXIgcGFkZGluZ1syNTZdOwogCX07CkBAIC00MTYsNiArNDI0LDggQEAKICNkZWZpbmUgS1ZNX1MzOTBfSU5UX1BGQVVMVF9JTklUCTB4ZmZmZTAwMDR1CiAjZGVmaW5lIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORQkweGZmZmUwMDA1dQogI2RlZmluZSBLVk1fUzM5MF9NQ0hLCQkJMHhmZmZlMTAwMHUKKyNkZWZpbmUgS1ZNX1MzOTBfSU5UX0NMT0NLX0NPTVAJCTB4ZmZmZjEwMDR1CisjZGVmaW5lIEtWTV9TMzkwX0lOVF9DUFVfVElNRVIJCTB4ZmZmZjEwMDV1CiAjZGVmaW5lIEtWTV9TMzkwX0lOVF9WSVJUSU8JCTB4ZmZmZjI2MDN1CiAjZGVmaW5lIEtWTV9TMzkwX0lOVF9TRVJWSUNFCQkweGZmZmYyNDAxdQogI2RlZmluZSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZCQkweGZmZmYxMjAxdQpAQCAtNTE1LDYgKzUyNSw3IEBACiAJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX3BpbywKIAlrdm1faW9ldmVudGZkX2ZsYWdfbnJfZGVhc3NpZ24sCiAJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX3ZpcnRpb19jY3dfbm90aWZ5LAorCWt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9mYXN0X21taW8sCiAJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX21heCwKIH07CiAKQEAgLTUyOSw3ICs1NDAsNyBAQAogc3RydWN0IGt2bV9pb2V2ZW50ZmQgewogCV9fdTY0IGRhdGFtYXRjaDsKIAlfX3U2NCBhZGRyOyAgICAgICAgLyogbGVnYWwgcGlvL21taW8gYWRkcmVzcyAqLwotCV9fdTMyIGxlbjsgICAgICAgICAvKiAxLCAyLCA0LCBvciA4IGJ5dGVzICAgICovCisJX191MzIgbGVuOyAgICAgICAgIC8qIDEsIDIsIDQsIG9yIDggYnl0ZXM7IG9yIDAgdG8gaWdub3JlIGxlbmd0aCAqLwogCV9fczMyIGZkOwogCV9fdTMyIGZsYWdzOwogCV9fdTggIHBhZFszNl07CkBAIC03NDMsNiArNzU0LDEwIEBACiAjZGVmaW5lIEtWTV9DQVBfSU9BUElDX1BPTEFSSVRZX0lHTk9SRUQgOTcKICNkZWZpbmUgS1ZNX0NBUF9FTkFCTEVfQ0FQX1ZNIDk4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9JUlFDSElQIDk5CisjZGVmaW5lIEtWTV9DQVBfSU9FVkVOVEZEX05PX0xFTkdUSCAxMDAKKyNkZWZpbmUgS1ZNX0NBUF9WTV9BVFRSSUJVVEVTIDEwMQorI2RlZmluZSBLVk1fQ0FQX0FSTV9QU0NJXzBfMiAxMDIKKyNkZWZpbmUgS1ZNX0NBUF9QUENfRklYVVBfSENBTEwgMTAzCiAKICNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDg1M2JjMWMuLmUzZmM4ZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtNzIyLDEwICs3MjIsMTAgQEAKIAlQRVJGX0NPTlRFWFRfTUFYCQk9IChfX3U2NCktNDA5NSwKIH07CiAKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQCQkoMVUgPDwgMCkKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkJKDFVIDw8IDEpCi0jZGVmaW5lIFBFUkZfRkxBR19QSURfQ0dST1VQCQkoMVUgPDwgMikgLyogcGlkPWNncm91cCBpZCwgcGVyLWNwdSBtb2RlIG9ubHkgKi8KLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX0NMT0VYRUMJCSgxVSA8PCAzKSAvKiBPX0NMT0VYRUMgKi8KKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQCQkoMVVMIDw8IDApCisjZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJCSgxVUwgPDwgMSkKKyNkZWZpbmUgUEVSRl9GTEFHX1BJRF9DR1JPVVAJCSgxVUwgPDwgMikgLyogcGlkPWNncm91cCBpZCwgcGVyLWNwdSBtb2RlIG9ubHkgKi8KKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX0NMT0VYRUMJCSgxVUwgPDwgMykgLyogT19DTE9FWEVDICovCiAKIHVuaW9uIHBlcmZfbWVtX2RhdGFfc3JjIHsKIAlfX3U2NCB2YWw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcHNjaS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BzY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTBkODNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BzY2kuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQVJNIFBvd2VyIFN0YXRlIGFuZCBDb29yZGluYXRpb24gSW50ZXJmYWNlIChQU0NJKSBoZWFkZXIKKyAqCisgKiBUaGlzIGhlYWRlciBob2xkcyBjb21tb24gUFNDSSBkZWZpbmVzIGFuZCBtYWNyb3Mgc2hhcmVkCisgKiBieTogQVJNIGtlcm5lbCwgQVJNNjQga2VybmVsLCBLVk0gQVJNL0FSTTY0IGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkLgorICogQXV0aG9yOiBBbnVwIFBhdGVsIDxhbnVwLnBhdGVsQGxpbmFyby5vcmc+CisgKi8KKworI2lmbmRlZiBfVUFQSV9MSU5VWF9QU0NJX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfUFNDSV9ICisKKy8qCisgKiBQU0NJIHYwLjEgaW50ZXJmYWNlCisgKgorICogVGhlIFBTQ0kgdjAuMSBmdW5jdGlvbiBudW1iZXJzIGFyZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgorICoKKyAqIE9ubHkgUFNDSSByZXR1cm4gdmFsdWVzIHN1Y2ggYXM6IFNVQ0NFU1MsIE5PVF9TVVBQT1JURUQsCisgKiBJTlZBTElEX1BBUkFNUywgYW5kIERFTklFRCBkZWZpbmVkIGJlbG93IGFyZSBhcHBsaWNhYmxlCisgKiB0byBQU0NJIHYwLjEuCisgKi8KKworLyogUFNDSSB2MC4yIGludGVyZmFjZSAqLworI2RlZmluZSBQU0NJXzBfMl9GTl9CQVNFCQkJMHg4NDAwMDAwMAorI2RlZmluZSBQU0NJXzBfMl9GTihuKQkJCQkoUFNDSV8wXzJfRk5fQkFTRSArIChuKSkKKyNkZWZpbmUgUFNDSV8wXzJfNjRCSVQJCQkJMHg0MDAwMDAwMAorI2RlZmluZSBQU0NJXzBfMl9GTjY0X0JBU0UJCQlcCisJCQkJCShQU0NJXzBfMl9GTl9CQVNFICsgUFNDSV8wXzJfNjRCSVQpCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjQobikJCQkoUFNDSV8wXzJfRk42NF9CQVNFICsgKG4pKQorCisjZGVmaW5lIFBTQ0lfMF8yX0ZOX1BTQ0lfVkVSU0lPTgkJUFNDSV8wXzJfRk4oMCkKKyNkZWZpbmUgUFNDSV8wXzJfRk5fQ1BVX1NVU1BFTkQJCQlQU0NJXzBfMl9GTigxKQorI2RlZmluZSBQU0NJXzBfMl9GTl9DUFVfT0ZGCQkJUFNDSV8wXzJfRk4oMikKKyNkZWZpbmUgUFNDSV8wXzJfRk5fQ1BVX09OCQkJUFNDSV8wXzJfRk4oMykKKyNkZWZpbmUgUFNDSV8wXzJfRk5fQUZGSU5JVFlfSU5GTwkJUFNDSV8wXzJfRk4oNCkKKyNkZWZpbmUgUFNDSV8wXzJfRk5fTUlHUkFURQkJCVBTQ0lfMF8yX0ZOKDUpCisjZGVmaW5lIFBTQ0lfMF8yX0ZOX01JR1JBVEVfSU5GT19UWVBFCQlQU0NJXzBfMl9GTig2KQorI2RlZmluZSBQU0NJXzBfMl9GTl9NSUdSQVRFX0lORk9fVVBfQ1BVCQlQU0NJXzBfMl9GTig3KQorI2RlZmluZSBQU0NJXzBfMl9GTl9TWVNURU1fT0ZGCQkJUFNDSV8wXzJfRk4oOCkKKyNkZWZpbmUgUFNDSV8wXzJfRk5fU1lTVEVNX1JFU0VUCQlQU0NJXzBfMl9GTig5KQorCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjRfQ1BVX1NVU1BFTkQJCVBTQ0lfMF8yX0ZONjQoMSkKKyNkZWZpbmUgUFNDSV8wXzJfRk42NF9DUFVfT04JCQlQU0NJXzBfMl9GTjY0KDMpCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjRfQUZGSU5JVFlfSU5GTwkJUFNDSV8wXzJfRk42NCg0KQorI2RlZmluZSBQU0NJXzBfMl9GTjY0X01JR1JBVEUJCQlQU0NJXzBfMl9GTjY0KDUpCisjZGVmaW5lIFBTQ0lfMF8yX0ZONjRfTUlHUkFURV9JTkZPX1VQX0NQVQlQU0NJXzBfMl9GTjY0KDcpCisKKy8qIFBTQ0kgdjAuMiBwb3dlciBzdGF0ZSBlbmNvZGluZyBmb3IgQ1BVX1NVU1BFTkQgZnVuY3Rpb24gKi8KKyNkZWZpbmUgUFNDSV8wXzJfUE9XRVJfU1RBVEVfSURfTUFTSwkJMHhmZmZmCisjZGVmaW5lIFBTQ0lfMF8yX1BPV0VSX1NUQVRFX0lEX1NISUZUCQkwCisjZGVmaW5lIFBTQ0lfMF8yX1BPV0VSX1NUQVRFX1RZUEVfU0hJRlQJCTE2CisjZGVmaW5lIFBTQ0lfMF8yX1BPV0VSX1NUQVRFX1RZUEVfTUFTSwkJXAorCQkJCSgweDEgPDwgUFNDSV8wXzJfUE9XRVJfU1RBVEVfVFlQRV9TSElGVCkKKyNkZWZpbmUgUFNDSV8wXzJfUE9XRVJfU1RBVEVfQUZGTF9TSElGVAkJMjQKKyNkZWZpbmUgUFNDSV8wXzJfUE9XRVJfU1RBVEVfQUZGTF9NQVNLCQlcCisJCQkJKDB4MyA8PCBQU0NJXzBfMl9QT1dFUl9TVEFURV9BRkZMX1NISUZUKQorCisvKiBQU0NJIHYwLjIgYWZmaW5pdHkgbGV2ZWwgc3RhdGUgcmV0dXJuZWQgYnkgQUZGSU5JVFlfSU5GTyAqLworI2RlZmluZSBQU0NJXzBfMl9BRkZJTklUWV9MRVZFTF9PTgkJMAorI2RlZmluZSBQU0NJXzBfMl9BRkZJTklUWV9MRVZFTF9PRkYJCTEKKyNkZWZpbmUgUFNDSV8wXzJfQUZGSU5JVFlfTEVWRUxfT05fUEVORElORwkyCisKKy8qIFBTQ0kgdjAuMiBtdWx0aWNvcmUgc3VwcG9ydCBpbiBUcnVzdGVkIE9TIHJldHVybmVkIGJ5IE1JR1JBVEVfSU5GT19UWVBFICovCisjZGVmaW5lIFBTQ0lfMF8yX1RPU19VUF9NSUdSQVRFCQkJMAorI2RlZmluZSBQU0NJXzBfMl9UT1NfVVBfTk9fTUlHUkFURQkJMQorI2RlZmluZSBQU0NJXzBfMl9UT1NfTVAJCQkJMgorCisvKiBQU0NJIHZlcnNpb24gZGVjb2RpbmcgKGluZGVwZW5kZW50IG9mIFBTQ0kgdmVyc2lvbikgKi8KKyNkZWZpbmUgUFNDSV9WRVJTSU9OX01BSk9SX1NISUZUCQkxNgorI2RlZmluZSBQU0NJX1ZFUlNJT05fTUlOT1JfTUFTSwkJCVwKKwkJKCgxVSA8PCBQU0NJX1ZFUlNJT05fTUFKT1JfU0hJRlQpIC0gMSkKKyNkZWZpbmUgUFNDSV9WRVJTSU9OX01BSk9SX01BU0sJCQl+UFNDSV9WRVJTSU9OX01JTk9SX01BU0sKKyNkZWZpbmUgUFNDSV9WRVJTSU9OX01BSk9SKHZlcikJCQlcCisJCSgoKHZlcikgJiBQU0NJX1ZFUlNJT05fTUFKT1JfTUFTSykgPj4gUFNDSV9WRVJTSU9OX01BSk9SX1NISUZUKQorI2RlZmluZSBQU0NJX1ZFUlNJT05fTUlOT1IodmVyKQkJCVwKKwkJKCh2ZXIpICYgUFNDSV9WRVJTSU9OX01JTk9SX01BU0spCisKKy8qIFBTQ0kgcmV0dXJuIHZhbHVlcyAoaW5jbHVzaXZlIG9mIGFsbCBQU0NJIHZlcnNpb25zKSAqLworI2RlZmluZSBQU0NJX1JFVF9TVUNDRVNTCQkJMAorI2RlZmluZSBQU0NJX1JFVF9OT1RfU1VQUE9SVEVECQkJLTEKKyNkZWZpbmUgUFNDSV9SRVRfSU5WQUxJRF9QQVJBTVMJCQktMgorI2RlZmluZSBQU0NJX1JFVF9ERU5JRUQJCQkJLTMKKyNkZWZpbmUgUFNDSV9SRVRfQUxSRUFEWV9PTgkJCS00CisjZGVmaW5lIFBTQ0lfUkVUX09OX1BFTkRJTkcJCQktNQorI2RlZmluZSBQU0NJX1JFVF9JTlRFUk5BTF9GQUlMVVJFCQktNgorI2RlZmluZSBQU0NJX1JFVF9OT1RfUFJFU0VOVAkJCS03CisjZGVmaW5lIFBTQ0lfUkVUX0RJU0FCTEVECQkJLTgKKworI2VuZGlmIC8qIF9VQVBJX0xJTlVYX1BTQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCBiNDdkYmEyLi41ODIwMjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMjExLDcgKzIxMSw3IEBACiAvKiBWSUEgVlQ4NTAwIFNvQyAqLwogI2RlZmluZSBQT1JUX1ZUODUwMAk5NwogCi0vKiBYaWxpbnggUFNTIFVBUlQgKi8KKy8qIENhZGVuY2UgKFhpbGlueCBaeW5xKSBVQVJUICovCiAjZGVmaW5lIFBPUlRfWFVBUlRQUwk5OAogCiAvKiBBdGhlcm9zIEFSOTMzWCBTb0MgKi8KQEAgLTIzOCw0ICsyMzgsMTAgQEAKIC8qIFRpbGVyYSBUSUxFLUd4IFVBUlQgKi8KICNkZWZpbmUgUE9SVF9USUxFR1gJMTA2CiAKKy8qIE1FTiAxNnoxMzUgVUFSVCAqLworI2RlZmluZSBQT1JUX01FTl9aMTM1CTEwNworCisvKiBTQzE2SVM3NHh4ICovCisjZGVmaW5lIFBPUlRfU0MxNklTN1hYICAgMTA4CisKICNlbmRpZiAvKiBfVUFQSUxJTlVYX1NFUklBTF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9zZXJpYWxfcmVnLmggYi9pbmNsdWRlL3VhcGkvbGludXgvc2VyaWFsX3JlZy5oCmluZGV4IGU2MzIyNjAuLjk5YjQ3MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9zZXJpYWxfcmVnLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3NlcmlhbF9yZWcuaApAQCAtMzIsNyArMzIsNyBAQAogCiAjZGVmaW5lIFVBUlRfSUlSCTIJLyogSW46ICBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UCQkweDAxIC8qIE5vIGludGVycnVwdHMgcGVuZGluZyAqLwotI2RlZmluZSBVQVJUX0lJUl9JRAkJMHgwNiAvKiBNYXNrIGZvciB0aGUgaW50ZXJydXB0IElEICovCisjZGVmaW5lIFVBUlRfSUlSX0lECQkweDBlIC8qIE1hc2sgZm9yIHRoZSBpbnRlcnJ1cHQgSUQgKi8KICNkZWZpbmUgVUFSVF9JSVJfTVNJCQkweDAwIC8qIE1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgVUFSVF9JSVJfVEhSSQkJMHgwMiAvKiBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCiAjZGVmaW5lIFVBUlRfSUlSX1JESQkJMHgwNCAvKiBSZWNlaXZlciBkYXRhIGludGVycnVwdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL2Jsa2lmLmggYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vYmxraWYuaAppbmRleCAzMmVjMDVhLi5jMzNlMWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vYmxraWYuaAorKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vYmxraWYuaApAQCAtODYsNyArODYsNyBAQAogICogICAgIEludGVyZmFjZSUyMG1hbnVhbHMvMTAwMjkzMDY4Yy5wZGYKICAqIFRoZSBiYWNrZW5kIGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgdGhyZWUgZXh0cmEgWGVuQnVzIGF0dHJpYnV0ZXMgdG8KICAqIGZ1cnRoZXIgb3B0aW1pemUgdGhlIGRpc2NhcmQgZnVuY3Rpb25hbGl0eToKLSAqICdkaXNjYXJkLWFsaWdtZW50JyAtIERldmljZXMgdGhhdCBzdXBwb3J0IGRpc2NhcmQgZnVuY3Rpb25hbGl0eSBtYXkKKyAqICdkaXNjYXJkLWFsaWdubWVudCcgLSBEZXZpY2VzIHRoYXQgc3VwcG9ydCBkaXNjYXJkIGZ1bmN0aW9uYWxpdHkgbWF5CiAgKiBpbnRlcm5hbGx5IGFsbG9jYXRlIHNwYWNlIGluIHVuaXRzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIHRoZSBleHBvcnRlZAogICogbG9naWNhbCBibG9jayBzaXplLiBUaGUgZGlzY2FyZC1hbGlnbm1lbnQgcGFyYW1ldGVyIGluZGljYXRlcyBob3cgbWFueSBieXRlcwogICogdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFydGl0aW9uIGlzIG9mZnNldCBmcm9tIHRoZSBpbnRlcm5hbCBhbGxvY2F0aW9uIHVuaXQncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oCmluZGV4IDBjZDVjYTMuLmRlMDgyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaAorKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmgKQEAgLTI3NSw5ICsyNzUsOSBAQAogICogTkIuIFRoZSBmaWVsZHMgYXJlIG5hdHVyYWwgcmVnaXN0ZXIgc2l6ZSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgKi8KIHN0cnVjdCBtdWx0aWNhbGxfZW50cnkgewotICAgIHVuc2lnbmVkIGxvbmcgb3A7Ci0gICAgbG9uZyByZXN1bHQ7Ci0gICAgdW5zaWduZWQgbG9uZyBhcmdzWzZdOworICAgIHhlbl91bG9uZ190IG9wOworICAgIHhlbl9sb25nX3QgcmVzdWx0OworICAgIHhlbl91bG9uZ190IGFyZ3NbNl07CiB9OwogREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QobXVsdGljYWxsX2VudHJ5KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4veGVuLW9wcy5oIGIvaW5jbHVkZS94ZW4veGVuLW9wcy5oCmluZGV4IDJjZjQ3MTcuLjBiMzE0OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL3hlbi1vcHMuaAorKysgYi9pbmNsdWRlL3hlbi94ZW4tb3BzLmgKQEAgLTksMTAgKzksNiBAQAogCiB2b2lkIHhlbl9hcmNoX3ByZV9zdXNwZW5kKHZvaWQpOwogdm9pZCB4ZW5fYXJjaF9wb3N0X3N1c3BlbmQoaW50IHN1c3BlbmRfY2FuY2VsbGVkKTsKLXZvaWQgeGVuX2FyY2hfaHZtX3Bvc3Rfc3VzcGVuZChpbnQgc3VzcGVuZF9jYW5jZWxsZWQpOwotCi12b2lkIHhlbl9tbV9waW5fYWxsKHZvaWQpOwotdm9pZCB4ZW5fbW1fdW5waW5fYWxsKHZvaWQpOwogCiB2b2lkIHhlbl90aW1lcl9yZXN1bWUodm9pZCk7CiB2b2lkIHhlbl9hcmNoX3Jlc3VtZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCAzZjFjYTkzLi5jZWVlMGM1IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CkBAIC0xNjA0LDcgKzE2MDUsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKLQlkZW50cnkgPSBrZXJuZnNfbW91bnQoZnNfdHlwZSwgZmxhZ3MsIHJvb3QtPmtmX3Jvb3QsICZuZXdfc2IpOworCWRlbnRyeSA9IGtlcm5mc19tb3VudChmc190eXBlLCBmbGFncywgcm9vdC0+a2Zfcm9vdCwKKwkJCQlDR1JPVVBfU1VQRVJfTUFHSUMsICZuZXdfc2IpOwogCWlmIChJU19FUlIoZGVudHJ5KSB8fCAhbmV3X3NiKQogCQljZ3JvdXBfcHV0KCZyb290LT5jZ3JwKTsKIAlyZXR1cm4gZGVudHJ5OwpkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYyBiL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMKaW5kZXggMjk1NmM4ZC4uMWFkZjYyYiAxMDA2NDQKLS0tIGEva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYworKysgYi9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jCkBAIC01MzQsNyArNTM0LDcgQEAKIAkJCWtnZGJfaW5mb1tjcHVdLmV4Y2VwdGlvbl9zdGF0ZSAmPQogCQkJCX4oRENQVV9XQU5UX01BU1RFUiB8IERDUFVfSVNfU0xBVkUpOwogCQkJa2dkYl9pbmZvW2NwdV0uZW50ZXJfa2dkYi0tOwotCQkJc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCQlhdG9taWNfZGVjKCZzbGF2ZXNfaW5fa2dkYik7CiAJCQlkYmdfdG91Y2hfd2F0Y2hkb2dzKCk7CiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC02NjIsNyArNjYyLDcgQEAKIAlrZ2RiX2luZm9bY3B1XS5leGNlcHRpb25fc3RhdGUgJj0KIAkJfihEQ1BVX1dBTlRfTUFTVEVSIHwgRENQVV9JU19TTEFWRSk7CiAJa2dkYl9pbmZvW2NwdV0uZW50ZXJfa2dkYi0tOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfZGVjKCZtYXN0ZXJzX2luX2tnZGIpOwogCS8qIEZyZWUga2dkYl9hY3RpdmUgKi8KIAlhdG9taWNfc2V0KCZrZ2RiX2FjdGl2ZSwgLTEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCA0NDBlZWZjLi42ODkyMzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuYworKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMTY3Nyw2ICsxNjc4LDggQEAKIAl1NjQgdHN0YW1wID0gcGVyZl9ldmVudF90aW1lKGV2ZW50KTsKIAlpbnQgcmV0ID0gMDsKIAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmN0eC0+bG9jayk7CisKIAlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQlyZXR1cm4gMDsKIApAQCAtMzI0NCw5ICszMjQ3LDEzIEBACiAJaWYgKGV2ZW50LT5jdHgpCiAJCXB1dF9jdHgoZXZlbnQtPmN0eCk7CiAKKwlpZiAoZXZlbnQtPnBtdSkKKwkJbW9kdWxlX3B1dChldmVudC0+cG11LT5tb2R1bGUpOworCiAJY2FsbF9yY3UoJmV2ZW50LT5yY3VfaGVhZCwgZnJlZV9ldmVudF9yY3UpOwogfQotc3RhdGljIHZvaWQgZnJlZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCisKK3N0YXRpYyB2b2lkIF9mcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlpcnFfd29ya19zeW5jKCZldmVudC0+cGVuZGluZyk7CiAKQEAgLTMyNjcsNDIgKzMyNzQsMzEgQEAKIAlpZiAoaXNfY2dyb3VwX2V2ZW50KGV2ZW50KSkKIAkJcGVyZl9kZXRhY2hfY2dyb3VwKGV2ZW50KTsKIAotCiAJX19mcmVlX2V2ZW50KGV2ZW50KTsKIH0KIAotaW50IHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorLyoKKyAqIFVzZWQgdG8gZnJlZSBldmVudHMgd2hpY2ggaGF2ZSBhIGtub3duIHJlZmNvdW50IG9mIDEsIHN1Y2ggYXMgaW4gZXJyb3IgcGF0aHMKKyAqIHdoZXJlIHRoZSBldmVudCBpc24ndCBleHBvc2VkIHlldCBhbmQgaW5oZXJpdGVkIGV2ZW50cy4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlpZiAoV0FSTihhdG9taWNfbG9uZ19jbXB4Y2hnKCZldmVudC0+cmVmY291bnQsIDEsIDApICE9IDEsCisJCQkJInVuZXhwZWN0ZWQgZXZlbnQgcmVmY291bnQ6ICVsZDsgcHRyPSVwXG4iLAorCQkJCWF0b21pY19sb25nX3JlYWQoJmV2ZW50LT5yZWZjb3VudCksIGV2ZW50KSkgeworCQkvKiBsZWFrIHRvIGF2b2lkIHVzZS1hZnRlci1mcmVlICovCisJCXJldHVybjsKKwl9CiAKLQlXQVJOX09OX09OQ0UoY3R4LT5wYXJlbnRfY3R4KTsKLQkvKgotCSAqIFRoZXJlIGFyZSB0d28gd2F5cyB0aGlzIGFubm90YXRpb24gaXMgdXNlZnVsOgotCSAqCi0JICogIDEpIHRoZXJlIGlzIGEgbG9jayByZWN1cnNpb24gZnJvbSBwZXJmX2V2ZW50X2V4aXRfdGFzawotCSAqICAgICBzZWUgdGhlIGNvbW1lbnQgdGhlcmUuCi0JICoKLQkgKiAgMikgdGhlcmUgaXMgYSBsb2NrLWludmVyc2lvbiB3aXRoIG1tYXBfc2VtIHRocm91Z2gKLQkgKiAgICAgcGVyZl9ldmVudF9yZWFkX2dyb3VwKCksIHdoaWNoIHRha2VzIGZhdWx0cyB3aGlsZQotCSAqICAgICBob2xkaW5nIGN0eC0+bXV0ZXgsIGhvd2V2ZXIgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIKLQkgKiAgICAgdGhlIGxhc3QgZmlsZWRlc2MgZGllZCwgc28gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkKLQkgKiAgICAgdG8gdHJpZ2dlciB0aGUgQUItQkEgY2FzZS4KLQkgKi8KLQltdXRleF9sb2NrX25lc3RlZCgmY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCXBlcmZfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCwgdHJ1ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKLQotCWZyZWVfZXZlbnQoZXZlbnQpOwotCi0JcmV0dXJuIDA7CisJX2ZyZWVfZXZlbnQoZXZlbnQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbCk7CiAKIC8qCiAgKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGZpbGUgaXMgZ29uZS4KICAqLwogc3RhdGljIHZvaWQgcHV0X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXI7CiAKIAlpZiAoIWF0b21pY19sb25nX2RlY19hbmRfdGVzdCgmZXZlbnQtPnJlZmNvdW50KSkKQEAgLTMzNDEsOSArMzMzNywzMyBAQAogCQlwdXRfdGFza19zdHJ1Y3Qob3duZXIpOwogCX0KIAotCXBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoZXZlbnQpOworCVdBUk5fT05fT05DRShjdHgtPnBhcmVudF9jdHgpOworCS8qCisJICogVGhlcmUgYXJlIHR3byB3YXlzIHRoaXMgYW5ub3RhdGlvbiBpcyB1c2VmdWw6CisJICoKKwkgKiAgMSkgdGhlcmUgaXMgYSBsb2NrIHJlY3Vyc2lvbiBmcm9tIHBlcmZfZXZlbnRfZXhpdF90YXNrCisJICogICAgIHNlZSB0aGUgY29tbWVudCB0aGVyZS4KKwkgKgorCSAqICAyKSB0aGVyZSBpcyBhIGxvY2staW52ZXJzaW9uIHdpdGggbW1hcF9zZW0gdGhyb3VnaAorCSAqICAgICBwZXJmX2V2ZW50X3JlYWRfZ3JvdXAoKSwgd2hpY2ggdGFrZXMgZmF1bHRzIHdoaWxlCisJICogICAgIGhvbGRpbmcgY3R4LT5tdXRleCwgaG93ZXZlciB0aGlzIGlzIGNhbGxlZCBhZnRlcgorCSAqICAgICB0aGUgbGFzdCBmaWxlZGVzYyBkaWVkLCBzbyB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eQorCSAqICAgICB0byB0cmlnZ2VyIHRoZSBBQi1CQSBjYXNlLgorCSAqLworCW11dGV4X2xvY2tfbmVzdGVkKCZjdHgtPm11dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJcGVyZl9yZW1vdmVfZnJvbV9jb250ZXh0KGV2ZW50LCB0cnVlKTsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworCisJX2ZyZWVfZXZlbnQoZXZlbnQpOwogfQogCitpbnQgcGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcHV0X2V2ZW50KGV2ZW50KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwpOworCiBzdGF0aWMgaW50IHBlcmZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlwdXRfZXZlbnQoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTY1NzgsNiArNjU5OCw3IEBACiAJZnJlZV9wZXJjcHUocG11LT5wbXVfZGlzYWJsZV9jb3VudCk7CiAJZ290byB1bmxvY2s7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwZXJmX3BtdV9yZWdpc3Rlcik7CiAKIHZvaWQgcGVyZl9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgcG11ICpwbXUpCiB7CkBAIC02NTk5LDYgKzY2MjAsNyBAQAogCXB1dF9kZXZpY2UocG11LT5kZXYpOwogCWZyZWVfcG11X2NvbnRleHQocG11KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfcG11X3VucmVnaXN0ZXIpOwogCiBzdHJ1Y3QgcG11ICpwZXJmX2luaXRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewpAQCAtNjYxMiw2ICs2NjM0LDEwIEBACiAJcG11ID0gaWRyX2ZpbmQoJnBtdV9pZHIsIGV2ZW50LT5hdHRyLnR5cGUpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChwbXUpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChwbXUtPm1vZHVsZSkpIHsKKwkJCXBtdSA9IEVSUl9QVFIoLUVOT0RFVik7CisJCQlnb3RvIHVubG9jazsKKwkJfQogCQlldmVudC0+cG11ID0gcG11OwogCQlyZXQgPSBwbXUtPmV2ZW50X2luaXQoZXZlbnQpOwogCQlpZiAocmV0KQpAQCAtNjYyMCw2ICs2NjQ2LDEwIEBACiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG11LCAmcG11cywgZW50cnkpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChwbXUtPm1vZHVsZSkpIHsKKwkJCXBtdSA9IEVSUl9QVFIoLUVOT0RFVik7CisJCQlnb3RvIHVubG9jazsKKwkJfQogCQlldmVudC0+cG11ID0gcG11OwogCQlyZXQgPSBwbXUtPmV2ZW50X2luaXQoZXZlbnQpOwogCQlpZiAoIXJldCkKQEAgLTY3OTgsNiArNjgyOCw3IEBACiBlcnJfcG11OgogCWlmIChldmVudC0+ZGVzdHJveSkKIAkJZXZlbnQtPmRlc3Ryb3koZXZlbnQpOworCW1vZHVsZV9wdXQocG11LT5tb2R1bGUpOwogZXJyX25zOgogCWlmIChldmVudC0+bnMpCiAJCXB1dF9waWRfbnMoZXZlbnQtPm5zKTsKQEAgLTcwNjcsMjAgKzcwOTgsMjYgQEAKIAkJfQogCX0KIAorCWlmICh0YXNrICYmIGdyb3VwX2xlYWRlciAmJgorCSAgICBncm91cF9sZWFkZXItPmF0dHIuaW5oZXJpdCAhPSBhdHRyLmluaGVyaXQpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfdGFzazsKKwl9CisKIAlnZXRfb25saW5lX2NwdXMoKTsKIAogCWV2ZW50ID0gcGVyZl9ldmVudF9hbGxvYygmYXR0ciwgY3B1LCB0YXNrLCBncm91cF9sZWFkZXIsIE5VTEwsCiAJCQkJIE5VTEwsIE5VTEwpOwogCWlmIChJU19FUlIoZXZlbnQpKSB7CiAJCWVyciA9IFBUUl9FUlIoZXZlbnQpOwotCQlnb3RvIGVycl90YXNrOworCQlnb3RvIGVycl9jcHVzOwogCX0KIAogCWlmIChmbGFncyAmIFBFUkZfRkxBR19QSURfQ0dST1VQKSB7CiAJCWVyciA9IHBlcmZfY2dyb3VwX2Nvbm5lY3QocGlkLCBldmVudCwgJmF0dHIsIGdyb3VwX2xlYWRlcik7CiAJCWlmIChlcnIpIHsKIAkJCV9fZnJlZV9ldmVudChldmVudCk7Ci0JCQlnb3RvIGVycl90YXNrOworCQkJZ290byBlcnJfY3B1czsKIAkJfQogCX0KIApAQCAtNzI0Miw4ICs3Mjc5LDkgQEAKIAlwdXRfY3R4KGN0eCk7CiBlcnJfYWxsb2M6CiAJZnJlZV9ldmVudChldmVudCk7Ci1lcnJfdGFzazoKK2Vycl9jcHVzOgogCXB1dF9vbmxpbmVfY3B1cygpOworZXJyX3Rhc2s6CiAJaWYgKHRhc2spCiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIGVycl9ncm91cF9mZDoKQEAgLTczNzksNyArNzQxNyw3IEBACiAJCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LAogCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0JcGVyZl9yZW1vdmVfZnJvbV9jb250ZXh0KGNoaWxkX2V2ZW50LCAhIWNoaWxkX2V2ZW50LT5wYXJlbnQpOworCXBlcmZfcmVtb3ZlX2Zyb21fY29udGV4dChjaGlsZF9ldmVudCwgdHJ1ZSk7CiAKIAkvKgogCSAqIEl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGV2ZW50cwpAQCAtNzM5NCw3ICs3NDMyLDcgQEAKIAogc3RhdGljIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2tfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgY3R4bikKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQsICp0bXA7CisJc3RydWN0IHBlcmZfZXZlbnQgKmNoaWxkX2V2ZW50OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC03NDQ4LDI0ICs3NDg2LDkgQEAKIAkgKi8KIAltdXRleF9sb2NrKCZjaGlsZF9jdHgtPm11dGV4KTsKIAotYWdhaW46Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkX2V2ZW50LCB0bXAsICZjaGlsZF9jdHgtPnBpbm5lZF9ncm91cHMsCi0JCQkJIGdyb3VwX2VudHJ5KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNoaWxkX2V2ZW50LCAmY2hpbGRfY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkKIAkJX19wZXJmX2V2ZW50X2V4aXRfdGFzayhjaGlsZF9ldmVudCwgY2hpbGRfY3R4LCBjaGlsZCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+ZmxleGlibGVfZ3JvdXBzLAotCQkJCSBncm91cF9lbnRyeSkKLQkJX19wZXJmX2V2ZW50X2V4aXRfdGFzayhjaGlsZF9ldmVudCwgY2hpbGRfY3R4LCBjaGlsZCk7Ci0KLQkvKgotCSAqIElmIHRoZSBsYXN0IGV2ZW50IHdhcyBhIGdyb3VwIGV2ZW50LCBpdCB3aWxsIGhhdmUgYXBwZW5kZWQgYWxsCi0JICogaXRzIHNpYmxpbmdzIHRvIHRoZSBsaXN0LCBidXQgd2Ugb2J0YWluZWQgJ3RtcCcgYmVmb3JlIHRoYXQgd2hpY2gKLQkgKiB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBsaXN0IGhlYWQgdGVybWluYXRpbmcgdGhlIGl0ZXJhdGlvbi4KLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmNoaWxkX2N0eC0+cGlubmVkX2dyb3VwcykgfHwKLQkgICAgIWxpc3RfZW1wdHkoJmNoaWxkX2N0eC0+ZmxleGlibGVfZ3JvdXBzKSkKLQkJZ290byBhZ2FpbjsKLQogCW11dGV4X3VubG9jaygmY2hpbGRfY3R4LT5tdXRleCk7CiAKIAlwdXRfY3R4KGNoaWxkX2N0eCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCmluZGV4IDA0NzA5YjYuLmQxZWRjNWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCisrKyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCkBAIC02MCw4ICs2MCw2IEBACiAKIC8qIEhhdmUgYSBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCiAjZGVmaW5lIFVQUk9CRV9DT1BZX0lOU04JMAotLyogQ2FuIHNraXAgc2luZ2xlc3RlcCAqLwotI2RlZmluZSBVUFJPQkVfU0tJUF9TU1RFUAkxCiAKIHN0cnVjdCB1cHJvYmUgewogCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwkvKiBub2RlIGluIHRoZSByYiB0cmVlICovCkBAIC00OTEsMTIgKzQ4OSw5IEBACiAJdXByb2JlLT5vZmZzZXQgPSBvZmZzZXQ7CiAJaW5pdF9yd3NlbSgmdXByb2JlLT5yZWdpc3Rlcl9yd3NlbSk7CiAJaW5pdF9yd3NlbSgmdXByb2JlLT5jb25zdW1lcl9yd3NlbSk7Ci0JLyogRm9yIG5vdyBhc3N1bWUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gbmVlZCBub3QgYmUgc2luZ2xlLXN0ZXBwZWQgKi8KLQlfX3NldF9iaXQoVVBST0JFX1NLSVBfU1NURVAsICZ1cHJvYmUtPmZsYWdzKTsKIAogCS8qIGFkZCB0byB1cHJvYmVzX3RyZWUsIHNvcnRlZCBvbiBpbm9kZTpvZmZzZXQgKi8KIAljdXJfdXByb2JlID0gaW5zZXJ0X3Vwcm9iZSh1cHJvYmUpOwotCiAJLyogYSB1cHJvYmUgZXhpc3RzIGZvciB0aGlzIGlub2RlOm9mZnNldCBjb21iaW5hdGlvbiAqLwogCWlmIChjdXJfdXByb2JlKSB7CiAJCWtmcmVlKHVwcm9iZSk7CkBAIC0xNjI4LDIwICsxNjIzLDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIEF2b2lkIHNpbmdsZXN0ZXBwaW5nIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBpZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24KLSAqIGlzIGEgTk9QIG9yIGNhbiBiZSBlbXVsYXRlZC4KLSAqLwotc3RhdGljIGJvb2wgY2FuX3NraXBfc3N0ZXAoc3RydWN0IHVwcm9iZSAqdXByb2JlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpZiAodGVzdF9iaXQoVVBST0JFX1NLSVBfU1NURVAsICZ1cHJvYmUtPmZsYWdzKSkgewotCQlpZiAoYXJjaF91cHJvYmVfc2tpcF9zc3RlcCgmdXByb2JlLT5hcmNoLCByZWdzKSkKLQkJCXJldHVybiB0cnVlOwotCQljbGVhcl9iaXQoVVBST0JFX1NLSVBfU1NURVAsICZ1cHJvYmUtPmZsYWdzKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgdm9pZCBtbWZfcmVjYWxjX3Vwcm9iZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0xODY4LDEzICsxODQ5LDEzIEBACiAKIAloYW5kbGVyX2NoYWluKHVwcm9iZSwgcmVncyk7CiAKLQlpZiAoY2FuX3NraXBfc3N0ZXAodXByb2JlLCByZWdzKSkKKwlpZiAoYXJjaF91cHJvYmVfc2tpcF9zc3RlcCgmdXByb2JlLT5hcmNoLCByZWdzKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXByZV9zc291dCh1cHJvYmUsIHJlZ3MsIGJwX3ZhZGRyKSkKIAkJcmV0dXJuOwogCi0JLyogY2FuX3NraXBfc3N0ZXAoKSBzdWNjZWVkZWQsIG9yIHJlc3RhcnQgaWYgY2FuJ3Qgc2luZ2xlc3RlcCAqLworCS8qIGFyY2hfdXByb2JlX3NraXBfc3N0ZXAoKSBzdWNjZWVkZWQsIG9yIHJlc3RhcnQgaWYgY2FuJ3Qgc2luZ2xlc3RlcCAqLwogb3V0OgogCXB1dF91cHJvYmUodXByb2JlKTsKIH0KQEAgLTE4ODYsMTAgKzE4NjcsMTEgQEAKIHN0YXRpYyB2b2lkIGhhbmRsZV9zaW5nbGVzdGVwKHN0cnVjdCB1cHJvYmVfdGFzayAqdXRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB1cHJvYmUgKnVwcm9iZTsKKwlpbnQgZXJyID0gMDsKIAogCXVwcm9iZSA9IHV0YXNrLT5hY3RpdmVfdXByb2JlOwogCWlmICh1dGFzay0+c3RhdGUgPT0gVVRBU0tfU1NURVBfQUNLKQotCQlhcmNoX3Vwcm9iZV9wb3N0X3hvbCgmdXByb2JlLT5hcmNoLCByZWdzKTsKKwkJZXJyID0gYXJjaF91cHJvYmVfcG9zdF94b2woJnVwcm9iZS0+YXJjaCwgcmVncyk7CiAJZWxzZSBpZiAodXRhc2stPnN0YXRlID09IFVUQVNLX1NTVEVQX1RSQVBQRUQpCiAJCWFyY2hfdXByb2JlX2Fib3J0X3hvbCgmdXByb2JlLT5hcmNoLCByZWdzKTsKIAllbHNlCkBAIC0xOTAzLDYgKzE4ODUsMTEgQEAKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlyZWNhbGNfc2lncGVuZGluZygpOyAvKiBzZWUgdXByb2JlX2Rlbnlfc2lnbmFsKCkgKi8KIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJdXByb2JlX3dhcm4oY3VycmVudCwgImV4ZWN1dGUgdGhlIHByb2JlZCBpbnNuLCBzZW5kaW5nIFNJR0lMTC4iKTsKKwkJZm9yY2Vfc2lnX2luZm8oU0lHSUxMLCBTRU5EX1NJR19GT1JDRUQsIGN1cnJlbnQpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggODFkYmU3Ny4uODliYzlkNSAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCSAqIGdldF9mdXRleF9rZXkoKSBpbXBsaWVzIGEgZnVsbCBiYXJyaWVyLiBUaGlzIGlzIHJlbGllZCB1cG9uCiAJICogYXMgZnVsbCBiYXJyaWVyIChCKSwgc2VlIHRoZSBvcmRlcmluZyBjb21tZW50IGFib3ZlLgogCSAqLwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIC8qCkBAIC0yODAsNyArMjgwLDcgQEAKIAkvKgogCSAqIEZ1bGwgYmFycmllciAoQSksIHNlZSB0aGUgb3JkZXJpbmcgY29tbWVudCBhYm92ZS4KIAkgKi8KLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGUwNTAxZmUuLjNhYjI4OTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTAzOSw2ICsxMDM5LDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMpOwogCiAvKioKICAqIGhydGltZXJfc3RhcnRfcmFuZ2VfbnMgLSAocmUpc3RhcnQgYW4gaHJ0aW1lciBvbiB0aGUgY3VycmVudCBDUFUKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDZiMzc1YWYuLjBhYzY3YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiBzdGF0aWMgdm9pZCBoZWxwZXJfbG9jayh2b2lkKQogewogCWF0b21pY19pbmMoJnJ1bm5pbmdfaGVscGVycyk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIH0KIAogc3RhdGljIHZvaWQgaGVscGVyX3VubG9jayh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tzeXNmcy5jIGIva2VybmVsL2tzeXNmcy5jCmluZGV4IDI0OTVhOWIuLjY2ODNjY2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rc3lzZnMuYworKysgYi9rZXJuZWwva3N5c2ZzLmMKQEAgLTM3LDYgKzM3LDcgQEAKIH0KIEtFUk5FTF9BVFRSX1JPKHVldmVudF9zZXFudW0pOwogCisjaWZkZWYgQ09ORklHX1VFVkVOVF9IRUxQRVIKIC8qIHVldmVudCBoZWxwZXIgcHJvZ3JhbSwgdXNlZCBkdXJpbmcgZWFybHkgYm9vdCAqLwogc3RhdGljIHNzaXplX3QgdWV2ZW50X2hlbHBlcl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC01Niw3ICs1Nyw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogS0VSTkVMX0FUVFJfUlcodWV2ZW50X2hlbHBlcik7Ci0KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BST0ZJTElORwogc3RhdGljIHNzaXplX3QgcHJvZmlsaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0xODksNyArMTkwLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICoga2VybmVsX2F0dHJzW10gPSB7CiAJJmZzY2Fwc19hdHRyLmF0dHIsCiAJJnVldmVudF9zZXFudW1fYXR0ci5hdHRyLAorI2lmZGVmIENPTkZJR19VRVZFTlRfSEVMUEVSCiAJJnVldmVudF9oZWxwZXJfYXR0ci5hdHRyLAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BST0ZJTElORwogCSZwcm9maWxpbmdfYXR0ci5hdHRyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwX2ludGVybmFscy5oIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcF9pbnRlcm5hbHMuaAppbmRleCA0ZjU2MGNmLi41MWM0YjI0IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwX2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXBfaW50ZXJuYWxzLmgKQEAgLTU0LDkgKzU0LDkgQEAKICAqIHRhYmxlIChpZiBpdCdzIG5vdCB0aGVyZSB5ZXQpLCBhbmQgd2UgY2hlY2sgaXQgZm9yIGxvY2sgb3JkZXIKICAqIGNvbmZsaWN0cyBhbmQgZGVhZGxvY2tzLgogICovCi0jZGVmaW5lIE1BWF9MT0NLREVQX0VOVFJJRVMJMTYzODRVTAorI2RlZmluZSBNQVhfTE9DS0RFUF9FTlRSSUVTCTMyNzY4VUwKIAotI2RlZmluZSBNQVhfTE9DS0RFUF9DSEFJTlNfQklUUwkxNQorI2RlZmluZSBNQVhfTE9DS0RFUF9DSEFJTlNfQklUUwkxNgogI2RlZmluZSBNQVhfTE9DS0RFUF9DSEFJTlMJKDFVTCA8PCBNQVhfTE9DS0RFUF9DSEFJTlNfQklUUykKIAogI2RlZmluZSBNQVhfTE9DS0RFUF9DSEFJTl9ITE9DS1MgKE1BWF9MT0NLREVQX0NIQUlOUyo1KQpAQCAtNjUsNyArNjUsNyBAQAogICogU3RhY2stdHJhY2U6IHRpZ2h0bHkgcGFja2VkIGFycmF5IG9mIHN0YWNrIGJhY2t0cmFjZQogICogYWRkcmVzc2VzLiBQcm90ZWN0ZWQgYnkgdGhlIGhhc2hfbG9jay4KICAqLwotI2RlZmluZSBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUwkyNjIxNDRVTAorI2RlZmluZSBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUwk1MjQyODhVTAogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhbGxfbG9ja19jbGFzc2VzOwogZXh0ZXJuIHN0cnVjdCBsb2NrX2NoYWluIGxvY2tfY2hhaW5zW107CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jIGIva2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYwppbmRleCBmMjZiMWExLi4wOTU1Yjg4IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jCisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMKQEAgLTgyLDE0ICs4MiwxNCBAQAogfTsKIHN0YXRpYyBzdHJ1Y3QgbG9ja193cml0ZXJfc3RyZXNzX3N0YXRzICpsd3NhOwogCi0jaWYgZGVmaW5lZChNT0RVTEUpIHx8IGRlZmluZWQoQ09ORklHX0xPQ0tfVE9SVFVSRV9URVNUX1JVTk5BQkxFKQorI2lmIGRlZmluZWQoTU9EVUxFKQogI2RlZmluZSBMT0NLVE9SVFVSRV9SVU5OQUJMRV9JTklUIDEKICNlbHNlCiAjZGVmaW5lIExPQ0tUT1JUVVJFX1JVTk5BQkxFX0lOSVQgMAogI2VuZGlmCiBpbnQgbG9ja3RvcnR1cmVfcnVubmFibGUgPSBMT0NLVE9SVFVSRV9SVU5OQUJMRV9JTklUOwogbW9kdWxlX3BhcmFtKGxvY2t0b3J0dXJlX3J1bm5hYmxlLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhsb2NrdG9ydHVyZV9ydW5uYWJsZSwgIlN0YXJ0IGxvY2t0b3J0dXJlIGF0IGJvb3QiKTsKK01PRFVMRV9QQVJNX0RFU0MobG9ja3RvcnR1cmVfcnVubmFibGUsICJTdGFydCBsb2NrdG9ydHVyZSBhdCBtb2R1bGUgaW5pdCIpOwogCiAvKiBGb3J3YXJkIHJlZmVyZW5jZS4gKi8KIHN0YXRpYyB2b2lkIGxvY2tfdG9ydHVyZV9jbGVhbnVwKHZvaWQpOwpAQCAtMjE2LDEwICsyMTYsMTEgQEAKIAlzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NKHJhbmQpOwogCiAJVkVSQk9TRV9UT1JPVVRfU1RSSU5HKCJsb2NrX3RvcnR1cmVfd3JpdGVyIHRhc2sgc3RhcnRlZCIpOwotCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUFYX05JQ0UpOwogCiAJZG8gewotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJaWYgKCh0b3J0dXJlX3JhbmRvbSgmcmFuZCkgJiAweGZmZmZmKSA9PSAwKQorCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJCWN1cl9vcHMtPndyaXRlbG9jaygpOwogCQlpZiAoV0FSTl9PTl9PTkNFKGxvY2tfaXNfd3JpdGVfaGVsZCkpCiAJCQlsd3NwLT5uX3dyaXRlX2xvY2tfZmFpbCsrOwpAQCAtMzU0LDcgKzM1NSw4IEBACiAJCSZsb2NrX2J1c3RlZF9vcHMsICZzcGluX2xvY2tfb3BzLCAmc3Bpbl9sb2NrX2lycV9vcHMsCiAJfTsKIAotCXRvcnR1cmVfaW5pdF9iZWdpbih0b3J0dXJlX3R5cGUsIHZlcmJvc2UsICZsb2NrdG9ydHVyZV9ydW5uYWJsZSk7CisJaWYgKCF0b3J0dXJlX2luaXRfYmVnaW4odG9ydHVyZV90eXBlLCB2ZXJib3NlLCAmbG9ja3RvcnR1cmVfcnVubmFibGUpKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogUHJvY2VzcyBhcmdzIGFuZCB0ZWxsIHRoZSB3b3JsZCB0aGF0IHRoZSB0b3J0dXJlciBpcyBvbiB0aGUgam9iLiAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvcnR1cmVfb3BzKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9yd3NlbS14YWRkLmMgYi9rZXJuZWwvbG9ja2luZy9yd3NlbS14YWRkLmMKaW5kZXggMWQ2NmUwOC4uYjQyMTlmZiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvcndzZW0teGFkZC5jCisrKyBiL2tlcm5lbC9sb2NraW5nL3J3c2VtLXhhZGQuYwpAQCAtMTIsNiArMTIsNTUgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KIAogLyoKKyAqIEd1aWRlIHRvIHRoZSByd19zZW1hcGhvcmUncyBjb3VudCBmaWVsZCBmb3IgY29tbW9uIHZhbHVlcy4KKyAqICgzMi1iaXQgY2FzZSBpbGx1c3RyYXRlZCwgc2ltaWxhciBmb3IgNjQtYml0KQorICoKKyAqIDB4MDAwMDAwMFgJKDEpIFggcmVhZGVycyBhY3RpdmUgb3IgYXR0ZW1wdGluZyBsb2NrLCBubyB3cml0ZXIgd2FpdGluZworICoJCSAgICBYID0gI2FjdGl2ZV9yZWFkZXJzICsgI3JlYWRlcnMgYXR0ZW1wdGluZyB0byBsb2NrCisgKgkJICAgIChYKkFDVElWRV9CSUFTKQorICoKKyAqIDB4MDAwMDAwMDAJcndzZW0gaXMgdW5sb2NrZWQsIGFuZCBubyBvbmUgaXMgd2FpdGluZyBmb3IgdGhlIGxvY2sgb3IKKyAqCQlhdHRlbXB0aW5nIHRvIHJlYWQgbG9jayBvciB3cml0ZSBsb2NrLgorICoKKyAqIDB4ZmZmZjAwMFgJKDEpIFggcmVhZGVycyBhY3RpdmUgb3IgYXR0ZW1wdGluZyBsb2NrLCB3aXRoIHdhaXRlcnMgZm9yIGxvY2sKKyAqCQkgICAgWCA9ICNhY3RpdmUgcmVhZGVycyArICMgcmVhZGVycyBhdHRlbXB0aW5nIGxvY2sKKyAqCQkgICAgKFgqQUNUSVZFX0JJQVMgKyBXQUlUSU5HX0JJQVMpCisgKgkJKDIpIDEgd3JpdGVyIGF0dGVtcHRpbmcgbG9jaywgbm8gd2FpdGVycyBmb3IgbG9jaworICoJCSAgICBYLTEgPSAjYWN0aXZlIHJlYWRlcnMgKyAjcmVhZGVycyBhdHRlbXB0aW5nIGxvY2sKKyAqCQkgICAgKChYLTEpKkFDVElWRV9CSUFTICsgQUNUSVZFX1dSSVRFX0JJQVMpCisgKgkJKDMpIDEgd3JpdGVyIGFjdGl2ZSwgbm8gd2FpdGVycyBmb3IgbG9jaworICoJCSAgICBYLTEgPSAjYWN0aXZlIHJlYWRlcnMgKyAjcmVhZGVycyBhdHRlbXB0aW5nIGxvY2sKKyAqCQkgICAgKChYLTEpKkFDVElWRV9CSUFTICsgQUNUSVZFX1dSSVRFX0JJQVMpCisgKgorICogMHhmZmZmMDAwMQkoMSkgMSByZWFkZXIgYWN0aXZlIG9yIGF0dGVtcHRpbmcgbG9jaywgd2FpdGVycyBmb3IgbG9jaworICoJCSAgICAoV0FJVElOR19CSUFTICsgQUNUSVZFX0JJQVMpCisgKgkJKDIpIDEgd3JpdGVyIGFjdGl2ZSBvciBhdHRlbXB0aW5nIGxvY2ssIG5vIHdhaXRlcnMgZm9yIGxvY2sKKyAqCQkgICAgKEFDVElWRV9XUklURV9CSUFTKQorICoKKyAqIDB4ZmZmZjAwMDAJKDEpIFRoZXJlIGFyZSB3cml0ZXJzIG9yIHJlYWRlcnMgcXVldWVkIGJ1dCBub25lIGFjdGl2ZQorICoJCSAgICBvciBpbiB0aGUgcHJvY2VzcyBvZiBhdHRlbXB0aW5nIGxvY2suCisgKgkJICAgIChXQUlUSU5HX0JJQVMpCisgKgkJTm90ZTogd3JpdGVyIGNhbiBhdHRlbXB0IHRvIHN0ZWFsIGxvY2sgZm9yIHRoaXMgY291bnQgYnkgYWRkaW5nCisgKgkJQUNUSVZFX1dSSVRFX0JJQVMgaW4gY21weGNoZyBhbmQgY2hlY2tpbmcgdGhlIG9sZCBjb3VudAorICoKKyAqIDB4ZmZmZTAwMDEJKDEpIDEgd3JpdGVyIGFjdGl2ZSwgb3IgYXR0ZW1wdGluZyBsb2NrLiBXYWl0ZXJzIG9uIHF1ZXVlLgorICoJCSAgICAoQUNUSVZFX1dSSVRFX0JJQVMgKyBXQUlUSU5HX0JJQVMpCisgKgorICogTm90ZTogUmVhZGVycyBhdHRlbXB0IHRvIGxvY2sgYnkgYWRkaW5nIEFDVElWRV9CSUFTIGluIGRvd25fcmVhZCBhbmQgY2hlY2tpbmcKKyAqCSB0aGUgY291bnQgYmVjb21lcyBtb3JlIHRoYW4gMCBmb3Igc3VjY2Vzc2Z1bCBsb2NrIGFjcXVpc2l0aW9uLAorICoJIGkuZS4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG9ubHkgcmVhZGVycyBvciBub2JvZHkgaGFzIGxvY2suCisgKgkgKDFzdCBhbmQgMm5kIGNhc2UgYWJvdmUpLgorICoKKyAqCSBXcml0ZXJzIGF0dGVtcHQgdG8gbG9jayBieSBhZGRpbmcgQUNUSVZFX1dSSVRFX0JJQVMgaW4gZG93bl93cml0ZSBhbmQKKyAqCSBjaGVja2luZyB0aGUgY291bnQgYmVjb21lcyBBQ1RJVkVfV1JJVEVfQklBUyBmb3Igc3VjY2Vzc2Z1bCBsb2NrCisgKgkgYWNxdWlzaXRpb24gKGkuZS4gbm9ib2R5IGVsc2UgaGFzIGxvY2sgb3IgYXR0ZW1wdHMgbG9jaykuICBJZgorICoJIHVuc3VjY2Vzc2Z1bCwgaW4gcndzZW1fZG93bl93cml0ZV9mYWlsZWQsIHdlJ2xsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZQorICoJIGFyZSBvbmx5IHdhaXRlcnMgYnV0IG5vbmUgYWN0aXZlICg1dGggY2FzZSBhYm92ZSksIGFuZCBhdHRlbXB0IHRvCisgKgkgc3RlYWwgdGhlIGxvY2suCisgKgorICovCisKKy8qCiAgKiBJbml0aWFsaXplIGFuIHJ3c2VtOgogICovCiB2b2lkIF9faW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGNvbnN0IGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay9wcmludGsuYwppbmRleCA3MjI4MjU4Li4yMjEyMjljIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsvcHJpbnRrLmMKQEAgLTI0MTMsNiArMjQxMyw3IEBACiAJaWYgKGNvbnNvbGVfZHJpdmVycyAhPSBOVUxMICYmIGNvbnNvbGUtPmZsYWdzICYgQ09OX0NPTlNERVYpCiAJCWNvbnNvbGVfZHJpdmVycy0+ZmxhZ3MgfD0gQ09OX0NPTlNERVY7CiAKKwljb25zb2xlLT5mbGFncyAmPSB+Q09OX0VOQUJMRUQ7CiAJY29uc29sZV91bmxvY2soKTsKIAljb25zb2xlX3N5c2ZzX25vdGlmeSgpOwogCXJldHVybiByZXM7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCmluZGV4IGJkMzBiYzYuLjdmYTM0ZjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCkBAIC01OCw5ICs1OCwxMSBAQAogCSAgICAgICJEdXJhdGlvbiBvZiBmcXMgYnVyc3RzICh1cyksIDAgdG8gZGlzYWJsZSIpOwogdG9ydHVyZV9wYXJhbShpbnQsIGZxc19ob2xkb2ZmLCAwLCAiSG9sZG9mZiB0aW1lIHdpdGhpbiBmcXMgYnVyc3RzICh1cykiKTsKIHRvcnR1cmVfcGFyYW0oaW50LCBmcXNfc3R1dHRlciwgMywgIldhaXQgdGltZSBiZXR3ZWVuIGZxcyBidXJzdHMgKHMpIik7Cit0b3J0dXJlX3BhcmFtKGJvb2wsIGdwX2NvbmQsIGZhbHNlLCAiVXNlIGNvbmRpdGlvbmFsL2FzeW5jIEdQIHdhaXQgcHJpbWl0aXZlcyIpOwogdG9ydHVyZV9wYXJhbShib29sLCBncF9leHAsIGZhbHNlLCAiVXNlIGV4cGVkaXRlZCBHUCB3YWl0IHByaW1pdGl2ZXMiKTsKIHRvcnR1cmVfcGFyYW0oYm9vbCwgZ3Bfbm9ybWFsLCBmYWxzZSwKIAkgICAgICJVc2Ugbm9ybWFsIChub24tZXhwZWRpdGVkKSBHUCB3YWl0IHByaW1pdGl2ZXMiKTsKK3RvcnR1cmVfcGFyYW0oYm9vbCwgZ3Bfc3luYywgZmFsc2UsICJVc2Ugc3luY2hyb25vdXMgR1Agd2FpdCBwcmltaXRpdmVzIik7CiB0b3J0dXJlX3BhcmFtKGludCwgaXJxcmVhZGVyLCAxLCAiQWxsb3cgUkNVIHJlYWRlcnMgZnJvbSBpcnEgaGFuZGxlcnMiKTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLAogCSAgICAgIiMgb2YgY2FsbGJhY2tzL2t0aHJlYWRzIGZvciBiYXJyaWVyIHRlc3RpbmciKTsKQEAgLTEzOCw2ICsxNDAsMTggQEAKIHN0YXRpYyBsb25nIG5fYmFycmllcl9zdWNjZXNzZXM7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCByY3VfdG9ydHVyZV9yZW1vdmVkOwogCitzdGF0aWMgaW50IHJjdV90b3J0dXJlX3dyaXRlcl9zdGF0ZTsKKyNkZWZpbmUgUlRXU19GSVhFRF9ERUxBWQkwCisjZGVmaW5lIFJUV1NfREVMQVkJCTEKKyNkZWZpbmUgUlRXU19SRVBMQUNFCQkyCisjZGVmaW5lIFJUV1NfREVGX0ZSRUUJCTMKKyNkZWZpbmUgUlRXU19FWFBfU1lOQwkJNAorI2RlZmluZSBSVFdTX0NPTkRfR0VUCQk1CisjZGVmaW5lIFJUV1NfQ09ORF9TWU5DCQk2CisjZGVmaW5lIFJUV1NfU1lOQwkJNworI2RlZmluZSBSVFdTX1NUVVRURVIJCTgKKyNkZWZpbmUgUlRXU19TVE9QUElORwkJOQorCiAjaWYgZGVmaW5lZChNT0RVTEUpIHx8IGRlZmluZWQoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1RfUlVOTkFCTEUpCiAjZGVmaW5lIFJDVVRPUlRVUkVfUlVOTkFCTEVfSU5JVCAxCiAjZWxzZQpAQCAtMjE0LDYgKzIyOCw3IEBACiAgKi8KIAogc3RydWN0IHJjdV90b3J0dXJlX29wcyB7CisJaW50IHR0eXBlOwogCXZvaWQgKCppbml0KSh2b2lkKTsKIAlpbnQgKCpyZWFkbG9jaykodm9pZCk7CiAJdm9pZCAoKnJlYWRfZGVsYXkpKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqcnJzcCk7CkBAIC0yMjIsNiArMjM3LDggQEAKIAl2b2lkICgqZGVmZXJyZWRfZnJlZSkoc3RydWN0IHJjdV90b3J0dXJlICpwKTsKIAl2b2lkICgqc3luYykodm9pZCk7CiAJdm9pZCAoKmV4cF9zeW5jKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3N0YXRlKSh2b2lkKTsKKwl2b2lkICgqY29uZF9zeW5jKSh1bnNpZ25lZCBsb25nIG9sZHN0YXRlKTsKIAl2b2lkICgqY2FsbCkoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKIAl2b2lkICgqY2JfYmFycmllcikodm9pZCk7CiAJdm9pZCAoKmZxcykodm9pZCk7CkBAIC0yNzMsMTAgKzI5MCw0OCBAQAogCXJldHVybiByY3VfYmF0Y2hlc19jb21wbGV0ZWQoKTsKIH0KIAorLyoKKyAqIFVwZGF0ZSBjYWxsYmFjayBpbiB0aGUgcGlwZS4gIFRoaXMgc2hvdWxkIGJlIGludm9rZWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCisgKi8KK3N0YXRpYyBib29sCityY3VfdG9ydHVyZV9waXBlX3VwZGF0ZV9vbmUoc3RydWN0IHJjdV90b3J0dXJlICpycCkKK3sKKwlpbnQgaTsKKworCWkgPSBycC0+cnRvcnRfcGlwZV9jb3VudDsKKwlpZiAoaSA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKQorCQlpID0gUkNVX1RPUlRVUkVfUElQRV9MRU47CisJYXRvbWljX2luYygmcmN1X3RvcnR1cmVfd2NvdW50W2ldKTsKKwlpZiAoKytycC0+cnRvcnRfcGlwZV9jb3VudCA+PSBSQ1VfVE9SVFVSRV9QSVBFX0xFTikgeworCQlycC0+cnRvcnRfbWJ0ZXN0ID0gMDsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFVwZGF0ZSBhbGwgY2FsbGJhY2tzIGluIHRoZSBwaXBlLiAgU3VpdGFibGUgZm9yIHN5bmNocm9ub3VzIGdyYWNlLXBlcmlvZAorICogcHJpbWl0aXZlcy4KKyAqLworc3RhdGljIHZvaWQKK3JjdV90b3J0dXJlX3BpcGVfdXBkYXRlKHN0cnVjdCByY3VfdG9ydHVyZSAqb2xkX3JwKQoreworCXN0cnVjdCByY3VfdG9ydHVyZSAqcnA7CisJc3RydWN0IHJjdV90b3J0dXJlICpycDE7CisKKwlpZiAob2xkX3JwKQorCQlsaXN0X2FkZCgmb2xkX3JwLT5ydG9ydF9mcmVlLCAmcmN1X3RvcnR1cmVfcmVtb3ZlZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJwLCBycDEsICZyY3VfdG9ydHVyZV9yZW1vdmVkLCBydG9ydF9mcmVlKSB7CisJCWlmIChyY3VfdG9ydHVyZV9waXBlX3VwZGF0ZV9vbmUocnApKSB7CisJCQlsaXN0X2RlbCgmcnAtPnJ0b3J0X2ZyZWUpOworCQkJcmN1X3RvcnR1cmVfZnJlZShycCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkCiByY3VfdG9ydHVyZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnApCiB7Ci0JaW50IGk7CiAJc3RydWN0IHJjdV90b3J0dXJlICpycCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcmN1X3RvcnR1cmUsIHJ0b3J0X3JjdSk7CiAKIAlpZiAodG9ydHVyZV9tdXN0X3N0b3BfaXJxKCkpIHsKQEAgLTI4NCwxNiArMzM5LDEwIEBACiAJCS8qIFRoZSBuZXh0IGluaXRpYWxpemF0aW9uIHdpbGwgcGljayB1cCB0aGUgcGllY2VzLiAqLwogCQlyZXR1cm47CiAJfQotCWkgPSBycC0+cnRvcnRfcGlwZV9jb3VudDsKLQlpZiAoaSA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKQotCQlpID0gUkNVX1RPUlRVUkVfUElQRV9MRU47Ci0JYXRvbWljX2luYygmcmN1X3RvcnR1cmVfd2NvdW50W2ldKTsKLQlpZiAoKytycC0+cnRvcnRfcGlwZV9jb3VudCA+PSBSQ1VfVE9SVFVSRV9QSVBFX0xFTikgewotCQlycC0+cnRvcnRfbWJ0ZXN0ID0gMDsKKwlpZiAocmN1X3RvcnR1cmVfcGlwZV91cGRhdGVfb25lKHJwKSkKIAkJcmN1X3RvcnR1cmVfZnJlZShycCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWN1cl9vcHMtPmRlZmVycmVkX2ZyZWUocnApOwotCX0KIH0KIAogc3RhdGljIGludCByY3Vfbm9fY29tcGxldGVkKHZvaWQpCkBAIC0zMTIsNiArMzYxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHsKKwkudHR5cGUJCT0gUkNVX0ZMQVZPUiwKIAkuaW5pdAkJPSByY3Vfc3luY190b3J0dXJlX2luaXQsCiAJLnJlYWRsb2NrCT0gcmN1X3RvcnR1cmVfcmVhZF9sb2NrLAogCS5yZWFkX2RlbGF5CT0gcmN1X3JlYWRfZGVsYXksCkBAIC0zMjAsNiArMzcwLDggQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1LAogCS5leHBfc3luYwk9IHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQsCisJLmdldF9zdGF0ZQk9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UsCisJLmNvbmRfc3luYwk9IGNvbmRfc3luY2hyb25pemVfcmN1LAogCS5jYWxsCQk9IGNhbGxfcmN1LAogCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXIsCiAJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLApAQCAtMzU1LDYgKzQwNyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9iaF9vcHMgPSB7CisJLnR0eXBlCQk9IFJDVV9CSF9GTEFWT1IsCiAJLmluaXQJCT0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAogCS5yZWFkbG9jawk9IHJjdV9iaF90b3J0dXJlX3JlYWRfbG9jaywKIAkucmVhZF9kZWxheQk9IHJjdV9yZWFkX2RlbGF5LCAgLyoganVzdCByZXVzZSByY3UncyB2ZXJzaW9uLiAqLwpAQCAtMzk3LDYgKzQ1MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9idXN0ZWRfb3BzID0geworCS50dHlwZQkJPSBJTlZBTElEX1JDVV9GTEFWT1IsCiAJLmluaXQJCT0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAogCS5yZWFkbG9jawk9IHJjdV90b3J0dXJlX3JlYWRfbG9jaywKIAkucmVhZF9kZWxheQk9IHJjdV9yZWFkX2RlbGF5LCAgLyoganVzdCByZXVzZSByY3UncyB2ZXJzaW9uLiAqLwpAQCAtNDc5LDkgKzUzMywxMSBAQAogCXBhZ2UgKz0gc3ByaW50ZihwYWdlLCAiJXMlcyBwZXItQ1BVKGlkeD0lZCk6IiwKIAkJICAgICAgIHRvcnR1cmVfdHlwZSwgVE9SVFVSRV9GTEFHLCBpZHgpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJcGFnZSArPSBzcHJpbnRmKHBhZ2UsICIgJWQoJWx1LCVsdSkiLCBjcHUsCi0JCQkgICAgICAgcGVyX2NwdV9wdHIoc3JjdV9jdGwucGVyX2NwdV9yZWYsIGNwdSktPmNbIWlkeF0sCi0JCQkgICAgICAgcGVyX2NwdV9wdHIoc3JjdV9jdGwucGVyX2NwdV9yZWYsIGNwdSktPmNbaWR4XSk7CisJCWxvbmcgYzAsIGMxOworCisJCWMwID0gKGxvbmcpcGVyX2NwdV9wdHIoc3JjdV9jdGwucGVyX2NwdV9yZWYsIGNwdSktPmNbIWlkeF07CisJCWMxID0gKGxvbmcpcGVyX2NwdV9wdHIoc3JjdV9jdGwucGVyX2NwdV9yZWYsIGNwdSktPmNbaWR4XTsKKwkJcGFnZSArPSBzcHJpbnRmKHBhZ2UsICIgJWQoJWxkLCVsZCkiLCBjcHUsIGMwLCBjMSk7CiAJfQogCXNwcmludGYocGFnZSwgIlxuIik7CiB9CkBAIC00OTIsNiArNTQ4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7CisJLnR0eXBlCQk9IFNSQ1VfRkxBVk9SLAogCS5pbml0CQk9IHJjdV9zeW5jX3RvcnR1cmVfaW5pdCwKIAkucmVhZGxvY2sJPSBzcmN1X3RvcnR1cmVfcmVhZF9sb2NrLAogCS5yZWFkX2RlbGF5CT0gc3JjdV9yZWFkX2RlbGF5LApAQCAtNTI3LDYgKzU4NCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNjaGVkX29wcyA9IHsKKwkudHR5cGUJCT0gUkNVX1NDSEVEX0ZMQVZPUiwKIAkuaW5pdAkJPSByY3Vfc3luY190b3J0dXJlX2luaXQsCiAJLnJlYWRsb2NrCT0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCiAJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KQEAgLTY4OCwyMyArNzQ2LDU5IEBACiBzdGF0aWMgaW50CiByY3VfdG9ydHVyZV93cml0ZXIodm9pZCAqYXJnKQogewotCWJvb2wgZXhwOworCXVuc2lnbmVkIGxvbmcgZ3Bfc25hcDsKKwlib29sIGdwX2NvbmQxID0gZ3BfY29uZCwgZ3BfZXhwMSA9IGdwX2V4cCwgZ3Bfbm9ybWFsMSA9IGdwX25vcm1hbDsKKwlib29sIGdwX3N5bmMxID0gZ3Bfc3luYzsKIAlpbnQgaTsKIAlzdHJ1Y3QgcmN1X3RvcnR1cmUgKnJwOwotCXN0cnVjdCByY3VfdG9ydHVyZSAqcnAxOwogCXN0cnVjdCByY3VfdG9ydHVyZSAqb2xkX3JwOwogCXN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET00ocmFuZCk7CisJaW50IHN5bmN0eXBlW10gPSB7IFJUV1NfREVGX0ZSRUUsIFJUV1NfRVhQX1NZTkMsCisJCQkgICBSVFdTX0NPTkRfR0VULCBSVFdTX1NZTkMgfTsKKwlpbnQgbnN5bmN0eXBlcyA9IDA7CiAKIAlWRVJCT1NFX1RPUk9VVF9TVFJJTkcoInJjdV90b3J0dXJlX3dyaXRlciB0YXNrIHN0YXJ0ZWQiKTsKLQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIE1BWF9OSUNFKTsKKworCS8qIEluaXRpYWxpemUgc3luY3R5cGVbXSBhcnJheS4gIElmIG5vbmUgc2V0LCB0YWtlIGRlZmF1bHQuICovCisJaWYgKCFncF9jb25kMSAmJiAhZ3BfZXhwMSAmJiAhZ3Bfbm9ybWFsMSAmJiAhZ3Bfc3luYykKKwkJZ3BfY29uZDEgPSBncF9leHAxID0gZ3Bfbm9ybWFsMSA9IGdwX3N5bmMxID0gdHJ1ZTsKKwlpZiAoZ3BfY29uZDEgJiYgY3VyX29wcy0+Z2V0X3N0YXRlICYmIGN1cl9vcHMtPmNvbmRfc3luYykKKwkJc3luY3R5cGVbbnN5bmN0eXBlcysrXSA9IFJUV1NfQ09ORF9HRVQ7CisJZWxzZSBpZiAoZ3BfY29uZCAmJiAoIWN1cl9vcHMtPmdldF9zdGF0ZSB8fCAhY3VyX29wcy0+Y29uZF9zeW5jKSkKKwkJcHJfYWxlcnQoInJjdV90b3J0dXJlX3dyaXRlcjogZ3BfY29uZCB3aXRob3V0IHByaW1pdGl2ZXMuXG4iKTsKKwlpZiAoZ3BfZXhwMSAmJiBjdXJfb3BzLT5leHBfc3luYykKKwkJc3luY3R5cGVbbnN5bmN0eXBlcysrXSA9IFJUV1NfRVhQX1NZTkM7CisJZWxzZSBpZiAoZ3BfZXhwICYmICFjdXJfb3BzLT5leHBfc3luYykKKwkJcHJfYWxlcnQoInJjdV90b3J0dXJlX3dyaXRlcjogZ3BfZXhwIHdpdGhvdXQgcHJpbWl0aXZlcy5cbiIpOworCWlmIChncF9ub3JtYWwxICYmIGN1cl9vcHMtPmRlZmVycmVkX2ZyZWUpCisJCXN5bmN0eXBlW25zeW5jdHlwZXMrK10gPSBSVFdTX0RFRl9GUkVFOworCWVsc2UgaWYgKGdwX25vcm1hbCAmJiAhY3VyX29wcy0+ZGVmZXJyZWRfZnJlZSkKKwkJcHJfYWxlcnQoInJjdV90b3J0dXJlX3dyaXRlcjogZ3Bfbm9ybWFsIHdpdGhvdXQgcHJpbWl0aXZlcy5cbiIpOworCWlmIChncF9zeW5jMSAmJiBjdXJfb3BzLT5zeW5jKQorCQlzeW5jdHlwZVtuc3luY3R5cGVzKytdID0gUlRXU19TWU5DOworCWVsc2UgaWYgKGdwX3N5bmMgJiYgIWN1cl9vcHMtPnN5bmMpCisJCXByX2FsZXJ0KCJyY3VfdG9ydHVyZV93cml0ZXI6IGdwX3N5bmMgd2l0aG91dCBwcmltaXRpdmVzLlxuIik7CisJaWYgKFdBUk5fT05DRShuc3luY3R5cGVzID09IDAsCisJCSAgICAgICJyY3VfdG9ydHVyZV93cml0ZXI6IE5vIHVwZGF0ZS1zaWRlIHByaW1pdGl2ZXMuXG4iKSkgeworCQkvKgorCQkgKiBObyB1cGRhdGVzIHByaW1pdGl2ZXMsIHNvIGRvbid0IHRyeSB1cGRhdGluZy4KKwkJICogVGhlIHJlc3VsdGluZyB0ZXN0IHdvbid0IGJlIHRlc3RpbmcgbXVjaCwgaGVuY2UgdGhlCisJCSAqIGFib3ZlIFdBUk5fT05DRSgpLgorCQkgKi8KKwkJcmN1X3RvcnR1cmVfd3JpdGVyX3N0YXRlID0gUlRXU19TVE9QUElORzsKKwkJdG9ydHVyZV9rdGhyZWFkX3N0b3BwaW5nKCJyY3VfdG9ydHVyZV93cml0ZXIiKTsKKwl9CiAKIAlkbyB7CisJCXJjdV90b3J0dXJlX3dyaXRlcl9zdGF0ZSA9IFJUV1NfRklYRURfREVMQVk7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCQlycCA9IHJjdV90b3J0dXJlX2FsbG9jKCk7CiAJCWlmIChycCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCXJwLT5ydG9ydF9waXBlX2NvdW50ID0gMDsKKwkJcmN1X3RvcnR1cmVfd3JpdGVyX3N0YXRlID0gUlRXU19ERUxBWTsKIAkJdWRlbGF5KHRvcnR1cmVfcmFuZG9tKCZyYW5kKSAmIDB4M2ZmKTsKKwkJcmN1X3RvcnR1cmVfd3JpdGVyX3N0YXRlID0gUlRXU19SRVBMQUNFOwogCQlvbGRfcnAgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2socmN1X3RvcnR1cmVfY3VycmVudCwKIAkJCQkJICAgICAgIGN1cnJlbnQgPT0gd3JpdGVyX3Rhc2spOwogCQlycC0+cnRvcnRfbWJ0ZXN0ID0gMTsKQEAgLTcxNiwzNSArODEwLDQyIEBACiAJCQkJaSA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCQkJYXRvbWljX2luYygmcmN1X3RvcnR1cmVfd2NvdW50W2ldKTsKIAkJCW9sZF9ycC0+cnRvcnRfcGlwZV9jb3VudCsrOwotCQkJaWYgKGdwX25vcm1hbCA9PSBncF9leHApCi0JCQkJZXhwID0gISEodG9ydHVyZV9yYW5kb20oJnJhbmQpICYgMHg4MCk7Ci0JCQllbHNlCi0JCQkJZXhwID0gZ3BfZXhwOwotCQkJaWYgKCFleHApIHsKKwkJCXN3aXRjaCAoc3luY3R5cGVbdG9ydHVyZV9yYW5kb20oJnJhbmQpICUgbnN5bmN0eXBlc10pIHsKKwkJCWNhc2UgUlRXU19ERUZfRlJFRToKKwkJCQlyY3VfdG9ydHVyZV93cml0ZXJfc3RhdGUgPSBSVFdTX0RFRl9GUkVFOwogCQkJCWN1cl9vcHMtPmRlZmVycmVkX2ZyZWUob2xkX3JwKTsKLQkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQljYXNlIFJUV1NfRVhQX1NZTkM6CisJCQkJcmN1X3RvcnR1cmVfd3JpdGVyX3N0YXRlID0gUlRXU19FWFBfU1lOQzsKIAkJCQljdXJfb3BzLT5leHBfc3luYygpOwotCQkJCWxpc3RfYWRkKCZvbGRfcnAtPnJ0b3J0X2ZyZWUsCi0JCQkJCSAmcmN1X3RvcnR1cmVfcmVtb3ZlZCk7Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJwLCBycDEsCi0JCQkJCQkJICZyY3VfdG9ydHVyZV9yZW1vdmVkLAotCQkJCQkJCSBydG9ydF9mcmVlKSB7Ci0JCQkJCWkgPSBycC0+cnRvcnRfcGlwZV9jb3VudDsKLQkJCQkJaWYgKGkgPiBSQ1VfVE9SVFVSRV9QSVBFX0xFTikKLQkJCQkJCWkgPSBSQ1VfVE9SVFVSRV9QSVBFX0xFTjsKLQkJCQkJYXRvbWljX2luYygmcmN1X3RvcnR1cmVfd2NvdW50W2ldKTsKLQkJCQkJaWYgKCsrcnAtPnJ0b3J0X3BpcGVfY291bnQgPj0KLQkJCQkJICAgIFJDVV9UT1JUVVJFX1BJUEVfTEVOKSB7Ci0JCQkJCQlycC0+cnRvcnRfbWJ0ZXN0ID0gMDsKLQkJCQkJCWxpc3RfZGVsKCZycC0+cnRvcnRfZnJlZSk7Ci0JCQkJCQlyY3VfdG9ydHVyZV9mcmVlKHJwKTsKLQkJCQkJfQotCQkJCSB9CisJCQkJcmN1X3RvcnR1cmVfcGlwZV91cGRhdGUob2xkX3JwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUlRXU19DT05EX0dFVDoKKwkJCQlyY3VfdG9ydHVyZV93cml0ZXJfc3RhdGUgPSBSVFdTX0NPTkRfR0VUOworCQkJCWdwX3NuYXAgPSBjdXJfb3BzLT5nZXRfc3RhdGUoKTsKKwkJCQlpID0gdG9ydHVyZV9yYW5kb20oJnJhbmQpICUgMTY7CisJCQkJaWYgKGkgIT0gMCkKKwkJCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGkpOworCQkJCXVkZWxheSh0b3J0dXJlX3JhbmRvbSgmcmFuZCkgJSAxMDAwKTsKKwkJCQlyY3VfdG9ydHVyZV93cml0ZXJfc3RhdGUgPSBSVFdTX0NPTkRfU1lOQzsKKwkJCQljdXJfb3BzLT5jb25kX3N5bmMoZ3Bfc25hcCk7CisJCQkJcmN1X3RvcnR1cmVfcGlwZV91cGRhdGUob2xkX3JwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUlRXU19TWU5DOgorCQkJCXJjdV90b3J0dXJlX3dyaXRlcl9zdGF0ZSA9IFJUV1NfU1lOQzsKKwkJCQljdXJfb3BzLT5zeW5jKCk7CisJCQkJcmN1X3RvcnR1cmVfcGlwZV91cGRhdGUob2xkX3JwKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXJjdXRvcnR1cmVfcmVjb3JkX3Byb2dyZXNzKCsrcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uKTsKKwkJcmN1X3RvcnR1cmVfd3JpdGVyX3N0YXRlID0gUlRXU19TVFVUVEVSOwogCQlzdHV0dGVyX3dhaXQoInJjdV90b3J0dXJlX3dyaXRlciIpOwogCX0gd2hpbGUgKCF0b3J0dXJlX211c3Rfc3RvcCgpKTsKKwlyY3VfdG9ydHVyZV93cml0ZXJfc3RhdGUgPSBSVFdTX1NUT1BQSU5HOwogCXRvcnR1cmVfa3RocmVhZF9zdG9wcGluZygicmN1X3RvcnR1cmVfd3JpdGVyIik7CiAJcmV0dXJuIDA7CiB9CkBAIC03ODQsNyArODg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCByY3V0b3J0dXJlX3RyYWNlX2R1bXAodm9pZCkKK3N0YXRpYyB2b2lkIHJjdXRvcnR1cmVfdHJhY2VfZHVtcCh2b2lkKQogewogCXN0YXRpYyBhdG9taWNfdCBiZWVuaGVyZSA9IEFUT01JQ19JTklUKDApOwogCkBAIC05MTgsMTEgKzEwMTksMTMgQEAKIAkJX190aGlzX2NwdV9pbmMocmN1X3RvcnR1cmVfYmF0Y2hbY29tcGxldGVkXSk7CiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKLQkJc2NoZWR1bGUoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAJCXN0dXR0ZXJfd2FpdCgicmN1X3RvcnR1cmVfcmVhZGVyIik7CiAJfSB3aGlsZSAoIXRvcnR1cmVfbXVzdF9zdG9wKCkpOwotCWlmIChpcnFyZWFkZXIgJiYgY3VyX29wcy0+aXJxX2NhcGFibGUpCisJaWYgKGlycXJlYWRlciAmJiBjdXJfb3BzLT5pcnFfY2FwYWJsZSkgewogCQlkZWxfdGltZXJfc3luYygmdCk7CisJCWRlc3Ryb3lfdGltZXJfb25fc3RhY2soJnQpOworCX0KIAl0b3J0dXJlX2t0aHJlYWRfc3RvcHBpbmcoInJjdV90b3J0dXJlX3JlYWRlciIpOwogCXJldHVybiAwOwogfQpAQCAtOTM3LDYgKzEwNDAsNyBAQAogCWludCBpOwogCWxvbmcgcGlwZXN1bW1hcnlbUkNVX1RPUlRVUkVfUElQRV9MRU4gKyAxXSA9IHsgMCB9OwogCWxvbmcgYmF0Y2hzdW1tYXJ5W1JDVV9UT1JUVVJFX1BJUEVfTEVOICsgMV0gPSB7IDAgfTsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBydGN2X3NuYXAgPSBVTE9OR19NQVg7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBSQ1VfVE9SVFVSRV9QSVBFX0xFTiArIDE7IGkrKykgewpAQCAtOTk3LDYgKzExMDEsMjIgQEAKIAlwYWdlICs9IHNwcmludGYocGFnZSwgIlxuIik7CiAJaWYgKGN1cl9vcHMtPnN0YXRzKQogCQljdXJfb3BzLT5zdGF0cyhwYWdlKTsKKwlpZiAocnRjdl9zbmFwID09IHJjdV90b3J0dXJlX2N1cnJlbnRfdmVyc2lvbiAmJgorCSAgICByY3VfdG9ydHVyZV9jdXJyZW50ICE9IE5VTEwpIHsKKwkJaW50IF9fbWF5YmVfdW51c2VkIGZsYWdzOworCQl1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIGdwbnVtOworCQl1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIGNvbXBsZXRlZDsKKworCQlyY3V0b3J0dXJlX2dldF9ncF9kYXRhKGN1cl9vcHMtPnR0eXBlLAorCQkJCSAgICAgICAmZmxhZ3MsICZncG51bSwgJmNvbXBsZXRlZCk7CisJCXBhZ2UgKz0gc3ByaW50ZihwYWdlLAorCQkJCSI/Pz8gV3JpdGVyIHN0YWxsIHN0YXRlICVkIGclbHUgYyVsdSBmJSN4XG4iLAorCQkJCXJjdV90b3J0dXJlX3dyaXRlcl9zdGF0ZSwKKwkJCQlncG51bSwgY29tcGxldGVkLCBmbGFncyk7CisJCXNob3dfcmN1X2dwX2t0aHJlYWRzKCk7CisJCXJjdXRvcnR1cmVfdHJhY2VfZHVtcCgpOworCX0KKwlydGN2X3NuYXAgPSByY3VfdG9ydHVyZV9jdXJyZW50X3ZlcnNpb247CiB9CiAKIC8qCkBAIC0xMTQ2LDcgKzEyNjYsNyBAQAogfQogCiAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgUkNVIGJhcnJpZXIgdGVzdGluZy4gKi8KLXZvaWQgcmN1X3RvcnR1cmVfYmFycmllcl9jYmYoc3RydWN0IHJjdV9oZWFkICpyY3UpCitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9iYXJyaWVyX2NiZihzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIHsKIAlhdG9taWNfaW5jKCZiYXJyaWVyX2Nic19pbnZva2VkKTsKIH0KQEAgLTE0MTYsNyArMTUzNiw4IEBACiAJCSZyY3Vfb3BzLCAmcmN1X2JoX29wcywgJnJjdV9idXN0ZWRfb3BzLCAmc3JjdV9vcHMsICZzY2hlZF9vcHMsCiAJfTsKIAotCXRvcnR1cmVfaW5pdF9iZWdpbih0b3J0dXJlX3R5cGUsIHZlcmJvc2UsICZyY3V0b3J0dXJlX3J1bm5hYmxlKTsKKwlpZiAoIXRvcnR1cmVfaW5pdF9iZWdpbih0b3J0dXJlX3R5cGUsIHZlcmJvc2UsICZyY3V0b3J0dXJlX3J1bm5hYmxlKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIFByb2Nlc3MgYXJncyBhbmQgdGVsbCB0aGUgd29ybGQgdGhhdCB0aGUgdG9ydHVyZXIgaXMgb24gdGhlIGpvYi4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b3J0dXJlX29wcyk7IGkrKykgewpAQCAtMTQ0MSwxMCArMTU2MiwxMyBAQAogCWlmIChjdXJfb3BzLT5pbml0KQogCQljdXJfb3BzLT5pbml0KCk7IC8qIG5vICJnb3RvIHVud2luZCIgcHJpb3IgdG8gdGhpcyBwb2ludCEhISAqLwogCi0JaWYgKG5yZWFkZXJzID49IDApCisJaWYgKG5yZWFkZXJzID49IDApIHsKIAkJbnJlYWxyZWFkZXJzID0gbnJlYWRlcnM7Ci0JZWxzZQotCQlucmVhbHJlYWRlcnMgPSAyICogbnVtX29ubGluZV9jcHVzKCk7CisJfSBlbHNlIHsKKwkJbnJlYWxyZWFkZXJzID0gbnVtX29ubGluZV9jcHVzKCkgLSAxOworCQlpZiAobnJlYWxyZWFkZXJzIDw9IDApCisJCQlucmVhbHJlYWRlcnMgPSAxOworCX0KIAlyY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoY3VyX29wcywgIlN0YXJ0IG9mIHRlc3QiKTsKIAogCS8qIFNldCB1cCB0aGUgZnJlZWxpc3QuICovCkBAIC0xNTMzLDcgKzE2NTcsOCBAQAogCQlmcXNfZHVyYXRpb24gPSAwOwogCWlmIChmcXNfZHVyYXRpb24pIHsKIAkJLyogQ3JlYXRlIHRoZSBmcXMgdGhyZWFkICovCi0JCXRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfZnFzLCBOVUxMLCBmcXNfdGFzayk7CisJCWZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9mcXMsIE5VTEwsCisJCQkJCQkgIGZxc190YXNrKTsKIAkJaWYgKGZpcnN0ZXJyKQogCQkJZ290byB1bndpbmQ7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90aW55X3BsdWdpbi5oIGIva2VybmVsL3JjdS90aW55X3BsdWdpbi5oCmluZGV4IDQzMTUyODUuLjg1OGM1NjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1L3RpbnlfcGx1Z2luLmgKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlyZXR1cm47CiAJcmNwLT50aWNrc190aGlzX2dwKys7CiAJaiA9IGppZmZpZXM7Ci0JanMgPSByY3AtPmppZmZpZXNfc3RhbGw7CisJanMgPSBBQ0NFU1NfT05DRShyY3AtPmppZmZpZXNfc3RhbGwpOwogCWlmICgqcmNwLT5jdXJ0YWlsICYmIFVMT05HX0NNUF9HRShqLCBqcykpIHsKIAkJcHJfZXJyKCJJTkZPOiAlcyBzdGFsbCBvbiBDUFUgKCVsdSB0aWNrcyB0aGlzIEdQKSBpZGxlPSVsbHggKHQ9JWx1IGppZmZpZXMgcT0lbGQpXG4iLAogCQkgICAgICAgcmNwLT5uYW1lLCByY3AtPnRpY2tzX3RoaXNfZ3AsIHJjdV9keW50aWNrc19uZXN0aW5nLApAQCAtMTUyLDE3ICsxNTIsMTcgQEAKIAkJZHVtcF9zdGFjaygpOwogCX0KIAlpZiAoKnJjcC0+Y3VydGFpbCAmJiBVTE9OR19DTVBfR0UoaiwganMpKQotCQlyY3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsKKwkJQUNDRVNTX09OQ0UocmNwLT5qaWZmaWVzX3N0YWxsKSA9IGppZmZpZXMgKwogCQkJMyAqIHJjdV9qaWZmaWVzX3RpbGxfc3RhbGxfY2hlY2soKSArIDM7CiAJZWxzZSBpZiAoVUxPTkdfQ01QX0dFKGosIGpzKSkKLQkJcmNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIHJjdV9qaWZmaWVzX3RpbGxfc3RhbGxfY2hlY2soKTsKKwkJQUNDRVNTX09OQ0UocmNwLT5qaWZmaWVzX3N0YWxsKSA9IGppZmZpZXMgKyByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlc2V0X2NwdV9zdGFsbF90aWNrcyhzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKIHsKIAlyY3AtPnRpY2tzX3RoaXNfZ3AgPSAwOwogCXJjcC0+Z3Bfc3RhcnQgPSBqaWZmaWVzOwotCXJjcC0+amlmZmllc19zdGFsbCA9IGppZmZpZXMgKyByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCk7CisJQUNDRVNTX09OQ0UocmNwLT5qaWZmaWVzX3N0YWxsKSA9IGppZmZpZXMgKyByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrX2NwdV9zdGFsbHModm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmMKaW5kZXggMGM0N2UzMC4uZjFiYTc3MyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmMKKysrIGIva2VybmVsL3JjdS90cmVlLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9zY2hlZCwgJ3MnLCBjYWxsX3JjdV9zY2hlZCk7CiBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X2JoLCAnYicsIGNhbGxfcmN1X2JoKTsKIAotc3RhdGljIHN0cnVjdCByY3Vfc3RhdGUgKnJjdV9zdGF0ZTsKK3N0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGVfcDsKIExJU1RfSEVBRChyY3Vfc3RydWN0X2ZsYXZvcnMpOwogCiAvKiBJbmNyZWFzZSAoYnV0IG5vdCBkZWNyZWFzZSkgdGhlIENPTkZJR19SQ1VfRkFOT1VUX0xFQUYgYXQgYm9vdCB0aW1lLiAqLwpAQCAtMjQzLDcgKzI0Myw3IEBACiBtb2R1bGVfcGFyYW0oamlmZmllc190aWxsX2ZpcnN0X2ZxcywgdWxvbmcsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGppZmZpZXNfdGlsbF9uZXh0X2ZxcywgdWxvbmcsIDA2NDQpOwogCi1zdGF0aWMgdm9pZCByY3Vfc3RhcnRfZ3BfYWR2YW5jZWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKK3N0YXRpYyBib29sIHJjdV9zdGFydF9ncF9hZHZhbmNlZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJCSAgc3RydWN0IHJjdV9kYXRhICpyZHApOwogc3RhdGljIHZvaWQgZm9yY2VfcXNfcm5wKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKIAkJCSBpbnQgKCpmKShzdHJ1Y3QgcmN1X2RhdGEgKnJzcCwgYm9vbCAqaXNpZGxlLApAQCAtMjcxLDYgKzI3MSwxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKTsKIAogLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlLgorICovCit2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUocmN1X3N0YXRlX3ApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCiAgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVIEJILgogICovCiB2b2lkIHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKQEAgLTI4MCw2ICsyODksMjEgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOwogCiAvKgorICogU2hvdyB0aGUgc3RhdGUgb2YgdGhlIGdyYWNlLXBlcmlvZCBrdGhyZWFkcy4KKyAqLwordm9pZCBzaG93X3JjdV9ncF9rdGhyZWFkcyh2b2lkKQoreworCXN0cnVjdCByY3Vfc3RhdGUgKnJzcDsKKworCWZvcl9lYWNoX3JjdV9mbGF2b3IocnNwKSB7CisJCXByX2luZm8oIiVzOiB3YWl0IHN0YXRlOiAlZCAtPnN0YXRlOiAlI2x4XG4iLAorCQkJcnNwLT5uYW1lLCByc3AtPmdwX3N0YXRlLCByc3AtPmdwX2t0aHJlYWQtPnN0YXRlKTsKKwkJLyogc2NoZWRfc2hvd190YXNrKHJzcC0+Z3Bfa3RocmVhZCk7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc2hvd19yY3VfZ3Bfa3RocmVhZHMpOworCisvKgogICogUmVjb3JkIHRoZSBudW1iZXIgb2YgdGltZXMgcmN1dG9ydHVyZSB0ZXN0cyBoYXZlIGJlZW4gaW5pdGlhdGVkIGFuZAogICogdGVybWluYXRlZC4gIFRoaXMgaW5mb3JtYXRpb24gYWxsb3dzIHRoZSBkZWJ1Z2ZzIHRyYWNpbmcgc3RhdHMgdG8gYmUKICAqIGNvcnJlbGF0ZWQgdG8gdGhlIHJjdXRvcnR1cmUgbWVzc2FnZXMsIGV2ZW4gd2hlbiB0aGUgcmN1dG9ydHVyZSBtb2R1bGUKQEAgLTI5NCw2ICszMTgsMzkgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdXRvcnR1cmVfcmVjb3JkX3Rlc3RfdHJhbnNpdGlvbik7CiAKIC8qCisgKiBTZW5kIGFsb25nIGdyYWNlLXBlcmlvZC1yZWxhdGVkIGRhdGEgZm9yIHJjdXRvcnR1cmUgZGlhZ25vc3RpY3MuCisgKi8KK3ZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShlbnVtIHJjdXRvcnR1cmVfdHlwZSB0ZXN0X3R5cGUsIGludCAqZmxhZ3MsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqZ3BudW0sIHVuc2lnbmVkIGxvbmcgKmNvbXBsZXRlZCkKK3sKKwlzdHJ1Y3QgcmN1X3N0YXRlICpyc3AgPSBOVUxMOworCisJc3dpdGNoICh0ZXN0X3R5cGUpIHsKKwljYXNlIFJDVV9GTEFWT1I6CisJCXJzcCA9IHJjdV9zdGF0ZV9wOworCQlicmVhazsKKwljYXNlIFJDVV9CSF9GTEFWT1I6CisJCXJzcCA9ICZyY3VfYmhfc3RhdGU7CisJCWJyZWFrOworCWNhc2UgUkNVX1NDSEVEX0ZMQVZPUjoKKwkJcnNwID0gJnJjdV9zY2hlZF9zdGF0ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmIChyc3AgIT0gTlVMTCkgeworCQkqZmxhZ3MgPSBBQ0NFU1NfT05DRShyc3AtPmdwX2ZsYWdzKTsKKwkJKmdwbnVtID0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSk7CisJCSpjb21wbGV0ZWQgPSBBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCk7CisJCXJldHVybjsKKwl9CisJKmZsYWdzID0gMDsKKwkqZ3BudW0gPSAwOworCSpjb21wbGV0ZWQgPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1dG9ydHVyZV9nZXRfZ3BfZGF0YSk7CisKKy8qCiAgKiBSZWNvcmQgdGhlIG51bWJlciBvZiB3cml0ZXIgcGFzc2VzIHRocm91Z2ggdGhlIGN1cnJlbnQgcmN1dG9ydHVyZSB0ZXN0LgogICogVGhpcyBpcyBhbHNvIHVzZWQgdG8gY29ycmVsYXRlIGRlYnVnZnMgdHJhY2luZyBzdGF0cyB3aXRoIHRoZSByY3V0b3J0dXJlCiAgKiBtZXNzYWdlcy4KQEAgLTMyNCw2ICszODEsMjggQEAKIH0KIAogLyoKKyAqIFJldHVybiB0aGUgcm9vdCBub2RlIG9mIHRoZSBzcGVjaWZpZWQgcmN1X3N0YXRlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlyZXR1cm4gJnJzcC0+bm9kZVswXTsKK30KKworLyoKKyAqIElzIHRoZXJlIGFueSBuZWVkIGZvciBmdXR1cmUgZ3JhY2UgcGVyaW9kcz8KKyAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4gIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUgcm9vdAorICogcm5wX25vZGUgc3RydWN0dXJlJ3MgLT5sb2NrLCB0aGUgcmVzdWx0cyBhcmUgYWR2aXNvcnkgb25seS4KKyAqLworc3RhdGljIGludCByY3VfZnV0dXJlX25lZWRzX2dwKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCWludCBpZHggPSAoQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpICsgMSkgJiAweDE7CisJaW50ICpmcCA9ICZybnAtPm5lZWRfZnV0dXJlX2dwW2lkeF07CisKKwlyZXR1cm4gQUNDRVNTX09OQ0UoKmZwKTsKK30KKworLyoKICAqIERvZXMgdGhlIGN1cnJlbnQgQ1BVIHJlcXVpcmUgYSBub3QteWV0LXN0YXJ0ZWQgZ3JhY2UgcGVyaW9kPwogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cyB0byBwcmV2ZW50IHJhY2VzIHdpdGgKICAqIG5vcm1hbCBjYWxsYmFjayByZWdpc3RyeS4KQEAgLTMzNSw3ICs0MTQsNyBAQAogCiAJaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQlyZXR1cm4gMDsgIC8qIE5vLCBhIGdyYWNlIHBlcmlvZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLiAqLwotCWlmIChyY3Vfbm9jYl9uZWVkc19ncChyc3ApKQorCWlmIChyY3VfZnV0dXJlX25lZWRzX2dwKHJzcCkpCiAJCXJldHVybiAxOyAgLyogWWVzLCBhIG5vLUNCcyBDUFUgbmVlZHMgb25lLiAqLwogCWlmICghcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdKQogCQlyZXR1cm4gMDsgIC8qIE5vLCB0aGlzIGlzIGEgbm8tQ0JzIChvciBvZmZsaW5lKSBDUFUuICovCkBAIC0zNTAsMTQgKzQyOSw2IEBACiB9CiAKIC8qCi0gKiBSZXR1cm4gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgc3BlY2lmaWVkIHJjdV9zdGF0ZSBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmN1X25vZGUgKnJjdV9nZXRfcm9vdChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci0JcmV0dXJuICZyc3AtPm5vZGVbMF07Ci19Ci0KLS8qCiAgKiByY3VfZXFzX2VudGVyX2NvbW1vbiAtIGN1cnJlbnQgQ1BVIGlzIG1vdmluZyB0b3dhcmRzIGV4dGVuZGVkIHF1aWVzY2VudCBzdGF0ZQogICoKICAqIElmIHRoZSBuZXcgdmFsdWUgb2YgdGhlIC0+ZHludGlja3NfbmVzdGluZyBjb3VudGVyIG5vdyBpcyB6ZXJvLApAQCAtMzg3LDkgKzQ1OCw5IEBACiAJfQogCXJjdV9wcmVwYXJlX2Zvcl9pZGxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJLyogQ1BVcyBzZWVpbmcgYXRvbWljX2luYygpIG11c3Qgc2VlIHByaW9yIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlhdG9taWNfaW5jKCZyZHRwLT5keW50aWNrcyk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7ICAvKiBGb3JjZSBvcmRlcmluZyB3aXRoIG5leHQgc29qb3Vybi4gKi8KKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAgLyogRm9yY2Ugb3JkZXJpbmcgd2l0aCBuZXh0IHNvam91cm4uICovCiAJV0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKCZyZHRwLT5keW50aWNrcykgJiAweDEpOwogCiAJLyoKQEAgLTUwNywxMCArNTc4LDEwIEBACiBzdGF0aWMgdm9pZCByY3VfZXFzX2V4aXRfY29tbW9uKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGxvbmcgbG9uZyBvbGR2YWwsCiAJCQkgICAgICAgaW50IHVzZXIpCiB7Ci0Jc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOyAgLyogRm9yY2Ugb3JkZXJpbmcgdy9wcmV2aW91cyBzb2pvdXJuLiAqLworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAgLyogRm9yY2Ugb3JkZXJpbmcgdy9wcmV2aW91cyBzb2pvdXJuLiAqLwogCWF0b21pY19pbmMoJnJkdHAtPmR5bnRpY2tzKTsKIAkvKiBDUFVzIHNlZWluZyBhdG9taWNfaW5jKCkgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCi0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7ICAvKiBTZWUgYWJvdmUuICovCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlXQVJOX09OX09OQ0UoIShhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3MpICYgMHgxKSk7CiAJcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXRyYWNlX3JjdV9keW50aWNrKFRQUygiRW5kIiksIG9sZHZhbCwgcmR0cC0+ZHludGlja3NfbmVzdGluZyk7CkBAIC02MzUsMTAgKzcwNiwxMCBAQAogCSAgICAoYXRvbWljX3JlYWQoJnJkdHAtPmR5bnRpY2tzKSAmIDB4MSkpCiAJCXJldHVybjsKIAlyZHRwLT5keW50aWNrc19ubWlfbmVzdGluZysrOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsgIC8qIEZvcmNlIGRlbGF5IGZyb20gcHJpb3Igd3JpdGUuICovCisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7ICAvKiBGb3JjZSBkZWxheSBmcm9tIHByaW9yIHdyaXRlLiAqLwogCWF0b21pY19pbmMoJnJkdHAtPmR5bnRpY2tzKTsKIAkvKiBDUFVzIHNlZWluZyBhdG9taWNfaW5jKCkgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCi0Jc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7ICAvKiBTZWUgYWJvdmUuICovCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlXQVJOX09OX09OQ0UoIShhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3MpICYgMHgxKSk7CiB9CiAKQEAgLTY1Nyw5ICs3MjgsOSBAQAogCSAgICAtLXJkdHAtPmR5bnRpY2tzX25taV9uZXN0aW5nICE9IDApCiAJCXJldHVybjsKIAkvKiBDUFVzIHNlZWluZyBhdG9taWNfaW5jKCkgbXVzdCBzZWUgcHJpb3IgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCi0Jc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOyAgLyogU2VlIGFib3ZlLiAqLworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAgLyogU2VlIGFib3ZlLiAqLwogCWF0b21pY19pbmMoJnJkdHAtPmR5bnRpY2tzKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsgIC8qIEZvcmNlIGRlbGF5IHRvIG5leHQgd3JpdGUuICovCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsgIC8qIEZvcmNlIGRlbGF5IHRvIG5leHQgd3JpdGUuICovCiAJV0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKCZyZHRwLT5keW50aWNrcykgJiAweDEpOwogfQogCkBAIC03NTgsNyArODI5LDEyIEBACiB7CiAJcmRwLT5keW50aWNrc19zbmFwID0gYXRvbWljX2FkZF9yZXR1cm4oMCwgJnJkcC0+ZHludGlja3MtPmR5bnRpY2tzKTsKIAlyY3Vfc3lzaWRsZV9jaGVja19jcHUocmRwLCBpc2lkbGUsIG1heGopOwotCXJldHVybiAocmRwLT5keW50aWNrc19zbmFwICYgMHgxKSA9PSAwOworCWlmICgocmRwLT5keW50aWNrc19zbmFwICYgMHgxKSA9PSAwKSB7CisJCXRyYWNlX3JjdV9mcXMocmRwLT5yc3AtPm5hbWUsIHJkcC0+Z3BudW0sIHJkcC0+Y3B1LCBUUFMoImR0aSIpKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQogfQogCiAvKgpAQCAtODM0LDcgKzkxMCw3IEBACiAJICogd2Ugd2lsbCBiZWF0IG9uIHRoZSBmaXJzdCBvbmUgdW50aWwgaXQgZ2V0cyB1bnN0dWNrLCB0aGVuIG1vdmUKIAkgKiB0byB0aGUgbmV4dC4gIE9ubHkgZG8gdGhpcyBmb3IgdGhlIHByaW1hcnkgZmxhdm9yIG9mIFJDVS4KIAkgKi8KLQlpZiAocmRwLT5yc3AgPT0gcmN1X3N0YXRlICYmCisJaWYgKHJkcC0+cnNwID09IHJjdV9zdGF0ZV9wICYmCiAJICAgIFVMT05HX0NNUF9HRShqaWZmaWVzLCByZHAtPnJzcC0+amlmZmllc19yZXNjaGVkKSkgewogCQlyZHAtPnJzcC0+amlmZmllc19yZXNjaGVkICs9IDU7CiAJCXJlc2NoZWRfY3B1KHJkcC0+Y3B1KTsKQEAgLTg1MSw3ICs5MjcsNyBAQAogCXJzcC0+Z3Bfc3RhcnQgPSBqOwogCXNtcF93bWIoKTsgLyogUmVjb3JkIHN0YXJ0IHRpbWUgYmVmb3JlIHN0YWxsIHRpbWUuICovCiAJajEgPSByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCk7Ci0JcnNwLT5qaWZmaWVzX3N0YWxsID0gaiArIGoxOworCUFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19zdGFsbCkgPSBqICsgajE7CiAJcnNwLT5qaWZmaWVzX3Jlc2NoZWQgPSBqICsgajEgLyAyOwogfQogCkBAIC04OTAsMTIgKzk2NiwxMiBAQAogCS8qIE9ubHkgbGV0IG9uZSBDUFUgY29tcGxhaW4gYWJvdXQgb3RoZXJzIHBlciB0aW1lIGludGVydmFsLiAqLwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQlkZWx0YSA9IGppZmZpZXMgLSByc3AtPmppZmZpZXNfc3RhbGw7CisJZGVsdGEgPSBqaWZmaWVzIC0gQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX3N0YWxsKTsKIAlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8ICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JcnNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIDMgKiByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCkgKyAzOworCUFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19zdGFsbCkgPSBqaWZmaWVzICsgMyAqIHJjdV9qaWZmaWVzX3RpbGxfc3RhbGxfY2hlY2soKSArIDM7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJLyoKQEAgLTkzMiw5ICsxMDA4LDkgQEAKIAlwcmludF9jcHVfc3RhbGxfaW5mb19lbmQoKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQl0b3RxbGVuICs9IHBlcl9jcHVfcHRyKHJzcC0+cmRhLCBjcHUpLT5xbGVuOwotCXByX2NvbnQoIihkZXRlY3RlZCBieSAlZCwgdD0lbGQgamlmZmllcywgZz0lbHUsIGM9JWx1LCBxPSVsdSlcbiIsCisJcHJfY29udCgiKGRldGVjdGVkIGJ5ICVkLCB0PSVsZCBqaWZmaWVzLCBnPSVsZCwgYz0lbGQsIHE9JWx1KVxuIiwKIAkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCAobG9uZykoamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpLAotCSAgICAgICByc3AtPmdwbnVtLCByc3AtPmNvbXBsZXRlZCwgdG90cWxlbik7CisJICAgICAgIChsb25nKXJzcC0+Z3BudW0sIChsb25nKXJzcC0+Y29tcGxldGVkLCB0b3RxbGVuKTsKIAlpZiAobmRldGVjdGVkID09IDApCiAJCXByX2VycigiSU5GTzogU3RhbGwgZW5kZWQgYmVmb3JlIHN0YXRlIGR1bXAgc3RhcnRcbiIpOwogCWVsc2UgaWYgKCF0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkpCkBAIC05NDcsMTIgKzEwMjMsNiBAQAogCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3ApOyAgLyogS2ljayB0aGVtIGFsbC4gKi8KIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gcmVhbGx5IGlzbid0IGZvciBwdWJsaWMgY29uc3VtcHRpb24sIGJ1dCBSQ1UgaXMgc3BlY2lhbCBpbgotICogdGhhdCBjb250ZXh0IHN3aXRjaGVzIGNhbiBhbGxvdyB0aGUgc3RhdGUgbWFjaGluZSB0byBtYWtlIHByb2dyZXNzLgotICovCi1leHRlcm4gdm9pZCByZXNjaGVkX2NwdShpbnQgY3B1KTsKLQogc3RhdGljIHZvaWQgcHJpbnRfY3B1X3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKIAlpbnQgY3B1OwpAQCAtOTcxLDE0ICsxMDQxLDE1IEBACiAJcHJpbnRfY3B1X3N0YWxsX2luZm9fZW5kKCk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJdG90cWxlbiArPSBwZXJfY3B1X3B0cihyc3AtPnJkYSwgY3B1KS0+cWxlbjsKLQlwcl9jb250KCIgKHQ9JWx1IGppZmZpZXMgZz0lbHUgYz0lbHUgcT0lbHUpXG4iLAotCQlqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCwgcnNwLT5ncG51bSwgcnNwLT5jb21wbGV0ZWQsIHRvdHFsZW4pOworCXByX2NvbnQoIiAodD0lbHUgamlmZmllcyBnPSVsZCBjPSVsZCBxPSVsdSlcbiIsCisJCWppZmZpZXMgLSByc3AtPmdwX3N0YXJ0LAorCQkobG9uZylyc3AtPmdwbnVtLCAobG9uZylyc3AtPmNvbXBsZXRlZCwgdG90cWxlbik7CiAJaWYgKCF0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkpCiAJCWR1bXBfc3RhY2soKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JaWYgKFVMT05HX0NNUF9HRShqaWZmaWVzLCByc3AtPmppZmZpZXNfc3RhbGwpKQotCQlyc3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsKKwlpZiAoVUxPTkdfQ01QX0dFKGppZmZpZXMsIEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19zdGFsbCkpKQorCQlBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfc3RhbGwpID0gamlmZmllcyArCiAJCQkJICAgICAzICogcmN1X2ppZmZpZXNfdGlsbF9zdGFsbF9jaGVjaygpICsgMzsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAKQEAgLTEwNjIsNyArMTEzMyw3IEBACiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCiAJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApCi0JCXJzcC0+amlmZmllc19zdGFsbCA9IGppZmZpZXMgKyBVTE9OR19NQVggLyAyOworCQlBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfc3RhbGwpID0gamlmZmllcyArIFVMT05HX01BWCAvIDI7CiB9CiAKIC8qCkBAIC0xMTIzLDE1ICsxMTk0LDE4IEBACiAvKgogICogU3RhcnQgc29tZSBmdXR1cmUgZ3JhY2UgcGVyaW9kLCBhcyBuZWVkZWQgdG8gaGFuZGxlIG5ld2x5IGFycml2ZWQKICAqIGNhbGxiYWNrcy4gIFRoZSByZXF1aXJlZCBmdXR1cmUgZ3JhY2UgcGVyaW9kcyBhcmUgcmVjb3JkZWQgaW4gZWFjaAotICogcmN1X25vZGUgc3RydWN0dXJlJ3MgLT5uZWVkX2Z1dHVyZV9ncCBmaWVsZC4KKyAqIHJjdV9ub2RlIHN0cnVjdHVyZSdzIC0+bmVlZF9mdXR1cmVfZ3AgZmllbGQuICBSZXR1cm5zIHRydWUgaWYgdGhlcmUKKyAqIGlzIHJlYXNvbiB0byBhd2FrZW4gdGhlIGdyYWNlLXBlcmlvZCBrdGhyZWFkLgogICoKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlJ3MgLT5sb2NrLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21heWJlX3VudXNlZAotcmN1X3N0YXJ0X2Z1dHVyZV9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCwgc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZAorcmN1X3N0YXJ0X2Z1dHVyZV9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCwgc3RydWN0IHJjdV9kYXRhICpyZHAsCisJCSAgICB1bnNpZ25lZCBsb25nICpjX291dCkKIHsKIAl1bnNpZ25lZCBsb25nIGM7CiAJaW50IGk7CisJYm9vbCByZXQgPSBmYWxzZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJkcC0+cnNwKTsKIAogCS8qCkBAIC0xMTQyLDcgKzEyMTYsNyBAQAogCXRyYWNlX3JjdV9mdXR1cmVfZ3Aocm5wLCByZHAsIGMsIFRQUygiU3RhcnRsZWFmIikpOwogCWlmIChybnAtPm5lZWRfZnV0dXJlX2dwW2MgJiAweDFdKSB7CiAJCXRyYWNlX3JjdV9mdXR1cmVfZ3Aocm5wLCByZHAsIGMsIFRQUygiUHJlc3RhcnRsZWFmIikpOwotCQlyZXR1cm4gYzsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyoKQEAgLTExNTYsNyArMTIzMCw3IEBACiAJICAgIEFDQ0VTU19PTkNFKHJucC0+Z3BudW0pICE9IEFDQ0VTU19PTkNFKHJucC0+Y29tcGxldGVkKSkgewogCQlybnAtPm5lZWRfZnV0dXJlX2dwW2MgJiAweDFdKys7CiAJCXRyYWNlX3JjdV9mdXR1cmVfZ3Aocm5wLCByZHAsIGMsIFRQUygiU3RhcnRlZGxlYWYiKSk7Ci0JCXJldHVybiBjOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKgpAQCAtMTE5NywxMiArMTI3MSwxNSBAQAogCQl0cmFjZV9yY3VfZnV0dXJlX2dwKHJucCwgcmRwLCBjLCBUUFMoIlN0YXJ0ZWRsZWFmcm9vdCIpKTsKIAl9IGVsc2UgewogCQl0cmFjZV9yY3VfZnV0dXJlX2dwKHJucCwgcmRwLCBjLCBUUFMoIlN0YXJ0ZWRyb290IikpOwotCQlyY3Vfc3RhcnRfZ3BfYWR2YW5jZWQocmRwLT5yc3AsIHJucF9yb290LCByZHApOworCQlyZXQgPSByY3Vfc3RhcnRfZ3BfYWR2YW5jZWQocmRwLT5yc3AsIHJucF9yb290LCByZHApOwogCX0KIHVubG9ja19vdXQ6CiAJaWYgKHJucCAhPSBybnBfcm9vdCkKIAkJcmF3X3NwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7Ci0JcmV0dXJuIGM7CitvdXQ6CisJaWYgKGNfb3V0ICE9IE5VTEwpCisJCSpjX291dCA9IGM7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTEyMjYsMjUgKzEzMDMsNDMgQEAKIH0KIAogLyoKKyAqIEF3YWtlbiB0aGUgZ3JhY2UtcGVyaW9kIGt0aHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgZmxhdm9yIG9mIFJDVS4KKyAqIERvbid0IGRvIGEgc2VsZi1hd2FrZW4sIGFuZCBkb24ndCBib3RoZXIgYXdha2VuaW5nIHdoZW4gdGhlcmUgaXMKKyAqIG5vdGhpbmcgZm9yIHRoZSBncmFjZS1wZXJpb2Qga3RocmVhZCB0byBkbyAoYXMgaW4gc2V2ZXJhbCBDUFVzCisgKiByYWNlZCB0byBhd2FrZW4sIGFuZCB3ZSBsb3N0KSwgYW5kIGZpbmFsbHkgZG9uJ3QgdHJ5IHRvIGF3YWtlbgorICogYSBrdGhyZWFkIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCByY3VfZ3Bfa3RocmVhZF93YWtlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlpZiAoY3VycmVudCA9PSByc3AtPmdwX2t0aHJlYWQgfHwKKwkgICAgIUFDQ0VTU19PTkNFKHJzcC0+Z3BfZmxhZ3MpIHx8CisJICAgICFyc3AtPmdwX2t0aHJlYWQpCisJCXJldHVybjsKKwl3YWtlX3VwKCZyc3AtPmdwX3dxKTsKK30KKworLyoKICAqIElmIHRoZXJlIGlzIHJvb20sIGFzc2lnbiBhIC0+Y29tcGxldGVkIG51bWJlciB0byBhbnkgY2FsbGJhY2tzIG9uCiAgKiB0aGlzIENQVSB0aGF0IGhhdmUgbm90IGFscmVhZHkgYmVlbiBhc3NpZ25lZC4gIEFsc28gYWNjZWxlcmF0ZSBhbnkKICAqIGNhbGxiYWNrcyB0aGF0IHdlcmUgcHJldmlvdXNseSBhc3NpZ25lZCBhIC0+Y29tcGxldGVkIG51bWJlciB0aGF0IGhhcwogICogc2luY2UgcHJvdmVuIHRvIGJlIHRvbyBjb25zZXJ2YXRpdmUsIHdoaWNoIGNhbiBoYXBwZW4gaWYgY2FsbGJhY2tzIGdldAogICogYXNzaWduZWQgYSAtPmNvbXBsZXRlZCBudW1iZXIgd2hpbGUgUkNVIGlzIGlkbGUsIGJ1dCB3aXRoIHJlZmVyZW5jZSB0bwogICogYSBub24tcm9vdCByY3Vfbm9kZSBzdHJ1Y3R1cmUuICBUaGlzIGZ1bmN0aW9uIGlzIGlkZW1wb3RlbnQsIHNvIGl0IGRvZXMKLSAqIG5vdCBodXJ0IHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKyAqIG5vdCBodXJ0IHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4gIFJldHVybnMgYW4gZmxhZyBzYXlpbmcgdGhhdCB3ZSBzaG91bGQKKyAqIGF3YWtlbiB0aGUgUkNVIGdyYWNlLXBlcmlvZCBrdGhyZWFkLgogICoKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9hY2NlbGVyYXRlX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorc3RhdGljIGJvb2wgcmN1X2FjY2VsZXJhdGVfY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnAsCiAJCQkgICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJdW5zaWduZWQgbG9uZyBjOwogCWludCBpOworCWJvb2wgcmV0OwogCiAJLyogSWYgdGhlIENQVSBoYXMgbm8gY2FsbGJhY2tzLCBub3RoaW5nIHRvIGRvLiAqLwogCWlmICghcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdIHx8ICEqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogU3RhcnRpbmcgZnJvbSB0aGUgc3VibGlzdCBjb250YWluaW5nIHRoZSBjYWxsYmFja3MgbW9zdApAQCAtMTI3Myw3ICsxMzY4LDcgQEAKIAkgKiBiZSBncm91cGVkIGludG8uCiAJICovCiAJaWYgKCsraSA+PSBSQ1VfTkVYVF9UQUlMKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogQXNzaWduIGFsbCBzdWJzZXF1ZW50IGNhbGxiYWNrcycgLT5jb21wbGV0ZWQgbnVtYmVyIHRvIHRoZSBuZXh0CkBAIC0xMjg1LDEzICsxMzgwLDE0IEBACiAJCXJkcC0+bnh0Y29tcGxldGVkW2ldID0gYzsKIAl9CiAJLyogUmVjb3JkIGFueSBuZWVkZWQgYWRkaXRpb25hbCBncmFjZSBwZXJpb2RzLiAqLwotCXJjdV9zdGFydF9mdXR1cmVfZ3Aocm5wLCByZHApOworCXJldCA9IHJjdV9zdGFydF9mdXR1cmVfZ3Aocm5wLCByZHAsIE5VTEwpOwogCiAJLyogVHJhY2UgZGVwZW5kaW5nIG9uIGhvdyBtdWNoIHdlIHdlcmUgYWJsZSB0byBhY2NlbGVyYXRlLiAqLwogCWlmICghKnJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSkKIAkJdHJhY2VfcmN1X2dyYWNlX3BlcmlvZChyc3AtPm5hbWUsIHJkcC0+Z3BudW0sIFRQUygiQWNjV2FpdENCIikpOwogCWVsc2UKIAkJdHJhY2VfcmN1X2dyYWNlX3BlcmlvZChyc3AtPm5hbWUsIHJkcC0+Z3BudW0sIFRQUygiQWNjUmVhZHlDQiIpKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTMwMCwxNyArMTM5NiwxOCBAQAogICogYXNzaWduIC0+Y29tcGxldGVkIG51bWJlcnMgdG8gYW55IGNhbGxiYWNrcyBpbiB0aGUgUkNVX05FWFRfVEFJTAogICogc3VibGlzdC4gIFRoaXMgZnVuY3Rpb24gaXMgaWRlbXBvdGVudCwgc28gaXQgZG9lcyBub3QgaHVydCB0bwogICogaW52b2tlIGl0IHJlcGVhdGVkbHkuICBBcyBsb25nIGFzIGl0IGlzIG5vdCBpbnZva2VkIC10b28tIG9mdGVuLi4uCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFJDVSBncmFjZS1wZXJpb2Qga3RocmVhZCBuZWVkcyB0byBiZSBhd2FrZW5lZC4KICAqCiAgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBybnAtPmxvY2sgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCi1zdGF0aWMgdm9pZCByY3VfYWR2YW5jZV9jYnMoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKK3N0YXRpYyBib29sIHJjdV9hZHZhbmNlX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWludCBpLCBqOwogCiAJLyogSWYgdGhlIENQVSBoYXMgbm8gY2FsbGJhY2tzLCBub3RoaW5nIHRvIGRvLiAqLwogCWlmICghcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdIHx8ICEqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogRmluZCBhbGwgY2FsbGJhY2tzIHdob3NlIC0+Y29tcGxldGVkIG51bWJlcnMgaW5kaWNhdGUgdGhhdCB0aGV5CkBAIC0xMzM0LDI2ICsxNDMxLDMwIEBACiAJfQogCiAJLyogQ2xhc3NpZnkgYW55IHJlbWFpbmluZyBjYWxsYmFja3MuICovCi0JcmN1X2FjY2VsZXJhdGVfY2JzKHJzcCwgcm5wLCByZHApOworCXJldHVybiByY3VfYWNjZWxlcmF0ZV9jYnMocnNwLCBybnAsIHJkcCk7CiB9CiAKIC8qCiAgKiBVcGRhdGUgQ1BVLWxvY2FsIHJjdV9kYXRhIHN0YXRlIHRvIHJlY29yZCB0aGUgYmVnaW5uaW5ncyBhbmQgZW5kcyBvZgogICogZ3JhY2UgcGVyaW9kcy4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSAtPmxvY2sgb2YgdGhlIGxlYWYgcmN1X25vZGUKICAqIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IENQVSwgYW5kIG11c3QgaGF2ZSBpcnFzIGRpc2FibGVkLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBncmFjZS1wZXJpb2Qga3RocmVhZCBuZWVkcyB0byBiZSBhd2FrZW5lZC4KICAqLwotc3RhdGljIHZvaWQgX19ub3RlX2dwX2NoYW5nZXMoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwgc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgYm9vbCBfX25vdGVfZ3BfY2hhbmdlcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CisJYm9vbCByZXQ7CisKIAkvKiBIYW5kbGUgdGhlIGVuZHMgb2YgYW55IHByZWNlZGluZyBncmFjZSBwZXJpb2RzIGZpcnN0LiAqLwogCWlmIChyZHAtPmNvbXBsZXRlZCA9PSBybnAtPmNvbXBsZXRlZCkgewogCiAJCS8qIE5vIGdyYWNlIHBlcmlvZCBlbmQsIHNvIGp1c3QgYWNjZWxlcmF0ZSByZWNlbnQgY2FsbGJhY2tzLiAqLwotCQlyY3VfYWNjZWxlcmF0ZV9jYnMocnNwLCBybnAsIHJkcCk7CisJCXJldCA9IHJjdV9hY2NlbGVyYXRlX2Nicyhyc3AsIHJucCwgcmRwKTsKIAogCX0gZWxzZSB7CiAKIAkJLyogQWR2YW5jZSBjYWxsYmFja3MuICovCi0JCXJjdV9hZHZhbmNlX2Nicyhyc3AsIHJucCwgcmRwKTsKKwkJcmV0ID0gcmN1X2FkdmFuY2VfY2JzKHJzcCwgcm5wLCByZHApOwogCiAJCS8qIFJlbWVtYmVyIHRoYXQgd2Ugc2F3IHRoaXMgZ3JhY2UtcGVyaW9kIGNvbXBsZXRpb24uICovCiAJCXJkcC0+Y29tcGxldGVkID0gcm5wLT5jb21wbGV0ZWQ7CkBAIC0xMzcyLDExICsxNDczLDEzIEBACiAJCXJkcC0+cXNfcGVuZGluZyA9ICEhKHJucC0+cXNtYXNrICYgcmRwLT5ncnBtYXNrKTsKIAkJemVyb19jcHVfc3RhbGxfdGlja3MocmRwKTsKIAl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgbm90ZV9ncF9jaGFuZ2VzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIG5lZWR3YWtlOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTM4OCw4ICsxNDkxLDEwIEBACiAJCXJldHVybjsKIAl9CiAJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwotCV9fbm90ZV9ncF9jaGFuZ2VzKHJzcCwgcm5wLCByZHApOworCW5lZWR3YWtlID0gX19ub3RlX2dwX2NoYW5nZXMocnNwLCBybnAsIHJkcCk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCWlmIChuZWVkd2FrZSkKKwkJcmN1X2dwX2t0aHJlYWRfd2FrZShyc3ApOwogfQogCiAvKgpAQCAtMTQwMywxMiArMTUwOCwxMiBAQAogCXJjdV9iaW5kX2dwX2t0aHJlYWQoKTsKIAlyYXdfc3Bpbl9sb2NrX2lycSgmcm5wLT5sb2NrKTsKIAlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7Ci0JaWYgKHJzcC0+Z3BfZmxhZ3MgPT0gMCkgeworCWlmICghQUNDRVNTX09OQ0UocnNwLT5ncF9mbGFncykpIHsKIAkJLyogU3B1cmlvdXMgd2FrZXVwLCB0ZWxsIGNhbGxlciB0byBnbyBiYWNrIHRvIHNsZWVwLiAgKi8KIAkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcm5wLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJzcC0+Z3BfZmxhZ3MgPSAwOyAvKiBDbGVhciBhbGwgZmxhZ3M6IE5ldyBncmFjZSBwZXJpb2QuICovCisJQUNDRVNTX09OQ0UocnNwLT5ncF9mbGFncykgPSAwOyAvKiBDbGVhciBhbGwgZmxhZ3M6IE5ldyBncmFjZSBwZXJpb2QuICovCiAKIAlpZiAoV0FSTl9PTl9PTkNFKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSkgewogCQkvKgpAQCAtMTQ1Myw3ICsxNTU4LDcgQEAKIAkJV0FSTl9PTl9PTkNFKHJucC0+Y29tcGxldGVkICE9IHJzcC0+Y29tcGxldGVkKTsKIAkJQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpID0gcnNwLT5jb21wbGV0ZWQ7CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpCi0JCQlfX25vdGVfZ3BfY2hhbmdlcyhyc3AsIHJucCwgcmRwKTsKKwkJCSh2b2lkKV9fbm90ZV9ncF9jaGFuZ2VzKHJzcCwgcm5wLCByZHApOwogCQlyY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncChybnApOwogCQl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kX2luaXQocnNwLT5uYW1lLCBybnAtPmdwbnVtLAogCQkJCQkgICAgcm5wLT5sZXZlbCwgcm5wLT5ncnBsbywKQEAgLTE1MDEsNyArMTYwNiw3IEBACiAJaWYgKEFDQ0VTU19PTkNFKHJzcC0+Z3BfZmxhZ3MpICYgUkNVX0dQX0ZMQUdfRlFTKSB7CiAJCXJhd19zcGluX2xvY2tfaXJxKCZybnAtPmxvY2spOwogCQlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7Ci0JCXJzcC0+Z3BfZmxhZ3MgJj0gflJDVV9HUF9GTEFHX0ZRUzsKKwkJQUNDRVNTX09OQ0UocnNwLT5ncF9mbGFncykgJj0gflJDVV9HUF9GTEFHX0ZRUzsKIAkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcm5wLT5sb2NrKTsKIAl9CiAJcmV0dXJuIGZxc19zdGF0ZTsKQEAgLTE1MTMsNiArMTYxOCw3IEBACiBzdGF0aWMgdm9pZCByY3VfZ3BfY2xlYW51cChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7CiAJdW5zaWduZWQgbG9uZyBncF9kdXJhdGlvbjsKKwlib29sIG5lZWRncCA9IGZhbHNlOwogCWludCBub2NiID0gMDsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwpAQCAtMTU0OCw3ICsxNjU0LDcgQEAKIAkJQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpID0gcnNwLT5ncG51bTsKIAkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkKLQkJCV9fbm90ZV9ncF9jaGFuZ2VzKHJzcCwgcm5wLCByZHApOworCQkJbmVlZGdwID0gX19ub3RlX2dwX2NoYW5nZXMocnNwLCBybnAsIHJkcCkgfHwgbmVlZGdwOwogCQkvKiBzbXBfbWIoKSBwcm92aWRlZCBieSBwcmlvciB1bmxvY2stbG9jayBwYWlyLiAqLwogCQlub2NiICs9IHJjdV9mdXR1cmVfZ3BfY2xlYW51cChyc3AsIHJucCk7CiAJCXJhd19zcGluX3VubG9ja19pcnEoJnJucC0+bG9jayk7CkBAIC0xNTY0LDkgKzE2NzAsMTAgQEAKIAl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kKHJzcC0+bmFtZSwgcnNwLT5jb21wbGV0ZWQsIFRQUygiZW5kIikpOwogCXJzcC0+ZnFzX3N0YXRlID0gUkNVX0dQX0lETEU7CiAJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKLQlyY3VfYWR2YW5jZV9jYnMocnNwLCBybnAsIHJkcCk7ICAvKiBSZWR1Y2UgZmFsc2UgcG9zaXRpdmVzIGJlbG93LiAqLwotCWlmIChjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKLQkJcnNwLT5ncF9mbGFncyA9IFJDVV9HUF9GTEFHX0lOSVQ7CisJLyogQWR2YW5jZSBDQnMgdG8gcmVkdWNlIGZhbHNlIHBvc2l0aXZlcyBiZWxvdy4gKi8KKwluZWVkZ3AgPSByY3VfYWR2YW5jZV9jYnMocnNwLCBybnAsIHJkcCkgfHwgbmVlZGdwOworCWlmIChuZWVkZ3AgfHwgY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKSB7CisJCUFDQ0VTU19PTkNFKHJzcC0+Z3BfZmxhZ3MpID0gUkNVX0dQX0ZMQUdfSU5JVDsKIAkJdHJhY2VfcmN1X2dyYWNlX3BlcmlvZChyc3AtPm5hbWUsCiAJCQkJICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pLAogCQkJCSAgICAgICBUUFMoIm5ld3JlcSIpKTsKQEAgLTE1OTMsNiArMTcwMCw3IEBACiAJCQl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kKHJzcC0+bmFtZSwKIAkJCQkJICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pLAogCQkJCQkgICAgICAgVFBTKCJyZXF3YWl0IikpOworCQkJcnNwLT5ncF9zdGF0ZSA9IFJDVV9HUF9XQUlUX0dQUzsKIAkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShyc3AtPmdwX3dxLAogCQkJCQkJIEFDQ0VTU19PTkNFKHJzcC0+Z3BfZmxhZ3MpICYKIAkJCQkJCSBSQ1VfR1BfRkxBR19JTklUKTsKQEAgLTE2MjAsNiArMTcyOCw3IEBACiAJCQl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kKHJzcC0+bmFtZSwKIAkJCQkJICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pLAogCQkJCQkgICAgICAgVFBTKCJmcXN3YWl0IikpOworCQkJcnNwLT5ncF9zdGF0ZSA9IFJDVV9HUF9XQUlUX0ZRUzsKIAkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHJzcC0+Z3Bfd3EsCiAJCQkJCSgoZ2YgPSBBQ0NFU1NfT05DRShyc3AtPmdwX2ZsYWdzKSkgJgogCQkJCQkgUkNVX0dQX0ZMQUdfRlFTKSB8fApAQCAtMTY2NSwxNCArMTc3NCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCByc3Bfd2FrZXVwKHN0cnVjdCBpcnFfd29yayAqd29yaykKLXsKLQlzdHJ1Y3QgcmN1X3N0YXRlICpyc3AgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJjdV9zdGF0ZSwgd2FrZXVwX3dvcmspOwotCi0JLyogV2FrZSB1cCByY3VfZ3Bfa3RocmVhZCgpIHRvIHN0YXJ0IHRoZSBncmFjZSBwZXJpb2QuICovCi0Jd2FrZV91cCgmcnNwLT5ncF93cSk7Ci19Ci0KIC8qCiAgKiBTdGFydCBhIG5ldyBSQ1UgZ3JhY2UgcGVyaW9kIGlmIHdhcnJhbnRlZCwgcmUtaW5pdGlhbGl6aW5nIHRoZSBoaWVyYXJjaHkKICAqIGluIHByZXBhcmF0aW9uIGZvciBkZXRlY3RpbmcgdGhlIG5leHQgZ3JhY2UgcGVyaW9kLiAgVGhlIGNhbGxlciBtdXN0IGhvbGQKQEAgLTE2ODEsOCArMTc4MiwxMCBAQAogICogTm90ZSB0aGF0IGl0IGlzIGxlZ2FsIGZvciBhIGR5aW5nIENQVSAod2hpY2ggaXMgbWFya2VkIGFzIG9mZmxpbmUpIHRvCiAgKiBpbnZva2UgdGhpcyBmdW5jdGlvbi4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBkeWluZyBDUFUgcmVwb3J0cyBpdHMKICAqIHF1aWVzY2VudCBzdGF0ZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdyYWNlLXBlcmlvZCBrdGhyZWFkIG11c3QgYmUgYXdha2VuZWQuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgYm9vbAogcmN1X3N0YXJ0X2dwX2FkdmFuY2VkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnAsCiAJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewpAQCAtMTY5MywyMCArMTc5NiwxOCBAQAogCQkgKiBvciBhIGdyYWNlIHBlcmlvZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgogCQkgKiBFaXRoZXIgd2F5LCBkb24ndCBzdGFydCBhIG5ldyBncmFjZSBwZXJpb2QuCiAJCSAqLwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9Ci0JcnNwLT5ncF9mbGFncyA9IFJDVV9HUF9GTEFHX0lOSVQ7CisJQUNDRVNTX09OQ0UocnNwLT5ncF9mbGFncykgPSBSQ1VfR1BfRkxBR19JTklUOwogCXRyYWNlX3JjdV9ncmFjZV9wZXJpb2QocnNwLT5uYW1lLCBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSwKIAkJCSAgICAgICBUUFMoIm5ld3JlcSIpKTsKIAogCS8qCiAJICogV2UgY2FuJ3QgZG8gd2FrZXVwcyB3aGlsZSBob2xkaW5nIHRoZSBybnAtPmxvY2ssIGFzIHRoYXQKIAkgKiBjb3VsZCBjYXVzZSBwb3NzaWJsZSBkZWFkbG9ja3Mgd2l0aCB0aGUgcnEtPmxvY2suIERlZmVyCi0JICogdGhlIHdha2V1cCB0byBpbnRlcnJ1cHQgY29udGV4dC4gIEFuZCBkb24ndCBib3RoZXIgd2FraW5nCi0JICogdXAgdGhlIHJ1bm5pbmcga3RocmVhZC4KKwkgKiB0aGUgd2FrZXVwIHRvIG91ciBjYWxsZXIuCiAJICovCi0JaWYgKGN1cnJlbnQgIT0gcnNwLT5ncF9rdGhyZWFkKQotCQlpcnFfd29ya19xdWV1ZSgmcnNwLT53YWtldXBfd29yayk7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xNzE1LDEyICsxODE2LDE0IEBACiAgKiBpcyBpbnZva2VkIGluZGlyZWN0bHkgZnJvbSByY3VfYWR2YW5jZV9jYnMoKSwgd2hpY2ggd291bGQgcmVzdWx0IGluCiAgKiBlbmRsZXNzIHJlY3Vyc2lvbiAtLSBvciB3b3VsZCBkbyBzbyBpZiBpdCB3YXNuJ3QgZm9yIHRoZSBzZWxmLWRlYWRsb2NrCiAgKiB0aGF0IGlzIGVuY291bnRlcmVkIGJlZm9yZWhhbmQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBncmFjZS1wZXJpb2Qga3RocmVhZCBuZWVkcyB0byBiZSBhd2FrZW5lZC4KICAqLwotc3RhdGljIHZvaWQKLXJjdV9zdGFydF9ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCitzdGF0aWMgYm9vbCByY3Vfc3RhcnRfZ3Aoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCWJvb2wgcmV0ID0gZmFsc2U7CiAKIAkvKgogCSAqIElmIHRoZXJlIGlzIG5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcyByaWdodCBub3csIGFueQpAQCAtMTczMCw4ICsxODMzLDkgQEAKIAkgKiByZXN1bHRpbmcgaW4gcG9pbnRsZXNzIGdyYWNlIHBlcmlvZHMuICBTbywgYWR2YW5jZSBjYWxsYmFja3MKIAkgKiB0aGVuIHN0YXJ0IHRoZSBncmFjZSBwZXJpb2QhCiAJICovCi0JcmN1X2FkdmFuY2VfY2JzKHJzcCwgcm5wLCByZHApOwotCXJjdV9zdGFydF9ncF9hZHZhbmNlZChyc3AsIHJucCwgcmRwKTsKKwlyZXQgPSByY3VfYWR2YW5jZV9jYnMocnNwLCBybnAsIHJkcCkgfHwgcmV0OworCXJldCA9IHJjdV9zdGFydF9ncF9hZHZhbmNlZChyc3AsIHJucCwgcmRwKSB8fCByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE4MjAsNiArMTkyNCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CisJYm9vbCBuZWVkd2FrZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCXJucCA9IHJkcC0+bXlub2RlOwpAQCAtMTg0OCw5ICsxOTUzLDExIEBACiAJCSAqIFRoaXMgR1AgY2FuJ3QgZW5kIHVudGlsIGNwdSBjaGVja3MgaW4sIHNvIGFsbCBvZiBvdXIKIAkJICogY2FsbGJhY2tzIGNhbiBiZSBwcm9jZXNzZWQgZHVyaW5nIHRoZSBuZXh0IEdQLgogCQkgKi8KLQkJcmN1X2FjY2VsZXJhdGVfY2JzKHJzcCwgcm5wLCByZHApOworCQluZWVkd2FrZSA9IHJjdV9hY2NlbGVyYXRlX2Nicyhyc3AsIHJucCwgcmRwKTsKIAogCQlyY3VfcmVwb3J0X3FzX3JucChtYXNrLCByc3AsIHJucCwgZmxhZ3MpOyAvKiBybHNlcyBybnAtPmxvY2sgKi8KKwkJaWYgKG5lZWR3YWtlKQorCQkJcmN1X2dwX2t0aHJlYWRfd2FrZShyc3ApOwogCX0KIH0KIApAQCAtMTk1MSw3ICsyMDU4LDcgQEAKIHN0YXRpYyB2b2lkIHJjdV9hZG9wdF9vcnBoYW5fY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IF9fdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJhd19jcHVfcHRyKHJzcC0+cmRhKTsKIAogCS8qIE5vLUNCcyBDUFVzIGFyZSBoYW5kbGVkIHNwZWNpYWxseS4gKi8KIAlpZiAocmN1X25vY2JfYWRvcHRfb3JwaGFuX2Nicyhyc3AsIHJkcCwgZmxhZ3MpKQpAQCAtMjMyMCw3ICsyNDI3LDcgQEAKIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9vbGQtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOyAgLyogU29tZW9uZSBiZWF0IHVzIHRvIGl0LiAqLwogCX0KLQlyc3AtPmdwX2ZsYWdzIHw9IFJDVV9HUF9GTEFHX0ZRUzsKKwlBQ0NFU1NfT05DRShyc3AtPmdwX2ZsYWdzKSB8PSBSQ1VfR1BfRkxBR19GUVM7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9vbGQtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwKCZyc3AtPmdwX3dxKTsgIC8qIE1lbW9yeSBiYXJyaWVyIGltcGxpZWQgYnkgd2FrZV91cCgpIHBhdGguICovCiB9CkBAIC0yMzM0LDcgKzI0NDEsOCBAQAogX19yY3VfcHJvY2Vzc19jYWxsYmFja3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHAgPSBfX3RoaXNfY3B1X3B0cihyc3AtPnJkYSk7CisJYm9vbCBuZWVkd2FrZTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJhd19jcHVfcHRyKHJzcC0+cmRhKTsKIAogCVdBUk5fT05fT05DRShyZHAtPmJlZW5vbmxpbmUgPT0gMCk7CiAKQEAgLTIzNDUsOCArMjQ1MywxMCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlpZiAoY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKSB7CiAJCXJhd19zcGluX2xvY2soJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrKTsgLyogaXJxcyBkaXNhYmxlZC4gKi8KLQkJcmN1X3N0YXJ0X2dwKHJzcCk7CisJCW5lZWR3YWtlID0gcmN1X3N0YXJ0X2dwKHJzcCk7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaywgZmxhZ3MpOworCQlpZiAobmVlZHdha2UpCisJCQlyY3VfZ3Bfa3RocmVhZF93YWtlKHJzcCk7CiAJfSBlbHNlIHsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KQEAgLTI0MDQsNiArMjUxNCw4IEBACiBzdGF0aWMgdm9pZCBfX2NhbGxfcmN1X2NvcmUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCwKIAkJCSAgICBzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJYm9vbCBuZWVkd2FrZTsKKwogCS8qCiAJICogSWYgY2FsbGVkIGZyb20gYW4gZXh0ZW5kZWQgcXVpZXNjZW50IHN0YXRlLCBpbnZva2UgdGhlIFJDVQogCSAqIGNvcmUgaW4gb3JkZXIgdG8gZm9yY2UgYSByZS1ldmFsdWF0aW9uIG9mIFJDVSdzIGlkbGVuZXNzLgpAQCAtMjQzMyw4ICsyNTQ1LDEwIEBACiAKIAkJCXJhd19zcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsKIAkJCXNtcF9tYl9fYWZ0ZXJfdW5sb2NrX2xvY2soKTsKLQkJCXJjdV9zdGFydF9ncChyc3ApOworCQkJbmVlZHdha2UgPSByY3Vfc3RhcnRfZ3AocnNwKTsKIAkJCXJhd19zcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOworCQkJaWYgKG5lZWR3YWtlKQorCQkJCXJjdV9ncF9rdGhyZWFkX3dha2UocnNwKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEdpdmUgdGhlIGdyYWNlIHBlcmlvZCBhIGtpY2suICovCiAJCQlyZHAtPmJsaW1pdCA9IExPTkdfTUFYOwpAQCAtMjUzNyw2ICsyNjUxLDIwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV9iaCk7CiAKIC8qCisgKiBRdWV1ZSBhbiBSQ1UgY2FsbGJhY2sgZm9yIGxhenkgaW52b2NhdGlvbiBhZnRlciBhIGdyYWNlIHBlcmlvZC4KKyAqIFRoaXMgd2lsbCBsaWtlbHkgYmUgbGF0ZXIgbmFtZWQgc29tZXRoaW5nIGxpa2UgImNhbGxfcmN1X2xhenkoKSIsCisgKiBidXQgdGhpcyBjaGFuZ2Ugd2lsbCByZXF1aXJlIHNvbWUgd2F5IG9mIHRhZ2dpbmcgdGhlIGxhenkgUkNVCisgKiBjYWxsYmFja3MgaW4gdGhlIGxpc3Qgb2YgcGVuZGluZyBjYWxsYmFja3MuIFVudGlsIHRoZW4sIHRoaXMKKyAqIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIF9fa2ZyZWVfcmN1KCkuCisgKi8KK3ZvaWQga2ZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSkKK3sKKwlfX2NhbGxfcmN1KGhlYWQsIGZ1bmMsIHJjdV9zdGF0ZV9wLCAtMSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdSk7CisKKy8qCiAgKiBCZWNhdXNlIGEgY29udGV4dCBzd2l0Y2ggaXMgYSBncmFjZSBwZXJpb2QgZm9yIFJDVS1zY2hlZCBhbmQgUkNVLWJoLAogICogYW55IGJsb2NraW5nIGdyYWNlLXBlcmlvZCB3YWl0IGF1dG9tYXRpY2FsbHkgaW1wbGllcyBhIGdyYWNlIHBlcmlvZAogICogaWYgdGhlcmUgaXMgb25seSBvbmUgQ1BVIG9ubGluZSBhdCBhbnkgcG9pbnQgdGltZSBkdXJpbmcgZXhlY3V0aW9uCkBAIC0yNjU5LDcgKzI3ODcsNyBAQAogCSAqIHRpbWUtY29uc3VtaW5nIHdvcmsgYmV0d2VlbiBnZXRfc3RhdGVfc3luY2hyb25pemVfcmN1KCkKIAkgKiBhbmQgY29uZF9zeW5jaHJvbml6ZV9yY3UoKS4KIAkgKi8KLQlyZXR1cm4gc21wX2xvYWRfYWNxdWlyZSgmcmN1X3N0YXRlLT5ncG51bSk7CisJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJnJjdV9zdGF0ZV9wLT5ncG51bSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnZXRfc3RhdGVfc3luY2hyb25pemVfcmN1KTsKIApAQCAtMjY4NSw3ICsyODEzLDcgQEAKIAkgKiBFbnN1cmUgdGhhdCB0aGlzIGxvYWQgaGFwcGVucyBiZWZvcmUgYW55IFJDVS1kZXN0cnVjdGl2ZQogCSAqIGFjdGlvbnMgdGhlIGNhbGxlciBtaWdodCBjYXJyeSBvdXQgYWZ0ZXIgd2UgcmV0dXJuLgogCSAqLwotCW5ld3N0YXRlID0gc21wX2xvYWRfYWNxdWlyZSgmcmN1X3N0YXRlLT5jb21wbGV0ZWQpOworCW5ld3N0YXRlID0gc21wX2xvYWRfYWNxdWlyZSgmcmN1X3N0YXRlX3AtPmNvbXBsZXRlZCk7CiAJaWYgKFVMT05HX0NNUF9HRShvbGRzdGF0ZSwgbmV3c3RhdGUpKQogCQlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KQEAgLTI3OTAsNyArMjkxOCw3IEBACiAJCXMgPSBhdG9taWNfbG9uZ19yZWFkKCZyc3AtPmV4cGVkaXRlZF9kb25lKTsKIAkJaWYgKFVMT05HX0NNUF9HRSgodWxvbmcpcywgKHVsb25nKWZpcnN0c25hcCkpIHsKIAkJCS8qIGVuc3VyZSB0ZXN0IGhhcHBlbnMgYmVmb3JlIGNhbGxlciBrZnJlZSAqLwotCQkJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOyAvKiBeXl4gKi8KKwkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAvKiBeXl4gKi8KIAkJCWF0b21pY19sb25nX2luYygmcnNwLT5leHBlZGl0ZWRfd29ya2RvbmUxKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjgwOCw3ICsyOTM2LDcgQEAKIAkJcyA9IGF0b21pY19sb25nX3JlYWQoJnJzcC0+ZXhwZWRpdGVkX2RvbmUpOwogCQlpZiAoVUxPTkdfQ01QX0dFKCh1bG9uZylzLCAodWxvbmcpZmlyc3RzbmFwKSkgewogCQkJLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCi0JCQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7IC8qIF5eXiAqLworCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7IC8qIF5eXiAqLwogCQkJYXRvbWljX2xvbmdfaW5jKCZyc3AtPmV4cGVkaXRlZF93b3JrZG9uZTIpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yODM3LDcgKzI5NjUsNyBAQAogCQlzID0gYXRvbWljX2xvbmdfcmVhZCgmcnNwLT5leHBlZGl0ZWRfZG9uZSk7CiAJCWlmIChVTE9OR19DTVBfR0UoKHVsb25nKXMsICh1bG9uZylzbmFwKSkgewogCQkJLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCi0JCQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7IC8qIF5eXiAqLworCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7IC8qIF5eXiAqLwogCQkJYXRvbWljX2xvbmdfaW5jKCZyc3AtPmV4cGVkaXRlZF9kb25lX2xvc3QpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI5ODgsNyArMzExNiw3IEBACiBzdGF0aWMgdm9pZCByY3VfYmFycmllcl9mdW5jKHZvaWQgKnR5cGUpCiB7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwID0gdHlwZTsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IF9fdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJhd19jcHVfcHRyKHJzcC0+cmRhKTsKIAogCV9yY3VfYmFycmllcl90cmFjZShyc3AsICJJUlEiLCAtMSwgcnNwLT5uX2JhcnJpZXJfZG9uZSk7CiAJYXRvbWljX2luYygmcnNwLT5iYXJyaWVyX2NwdV9jb3VudCk7CkBAIC0zMTYwLDcgKzMyODgsNyBAQAogICogdGhhdCB0aGlzIENQVSBjYW5ub3QgcG9zc2libHkgaGF2ZSBhbnkgUkNVIGNhbGxiYWNrcyBpbiBmbGlnaHQgeWV0LgogICovCiBzdGF0aWMgdm9pZAotcmN1X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcHJlZW1wdGlibGUpCityY3VfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CkBAIC0zMTczLDcgKzMzMDEsNiBAQAogCS8qIFNldCB1cCBsb2NhbCBzdGF0ZSwgZW5zdXJpbmcgY29uc2lzdGVudCB2aWV3IG9mIGdsb2JhbCBzdGF0ZS4gKi8KIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCXJkcC0+YmVlbm9ubGluZSA9IDE7CSAvKiBXZSBoYXZlIG5vdyBiZWVuIG9ubGluZS4gKi8KLQlyZHAtPnByZWVtcHRpYmxlID0gcHJlZW1wdGlibGU7CiAJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gMDsKIAlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKIAlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKQEAgLTMyMTcsOCArMzM0NCw3IEBACiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCiAJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApCi0JCXJjdV9pbml0X3BlcmNwdV9kYXRhKGNwdSwgcnNwLAotCQkJCSAgICAgc3RyY21wKHJzcC0+bmFtZSwgInJjdV9wcmVlbXB0IikgPT0gMCk7CisJCXJjdV9pbml0X3BlcmNwdV9kYXRhKGNwdSwgcnNwKTsKIH0KIAogLyoKQEAgLTMyMjgsNyArMzM1NCw3IEBACiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBjcHUpOworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocmN1X3N0YXRlX3AtPnJkYSwgY3B1KTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJkcC0+bXlub2RlOwogCXN0cnVjdCByY3Vfc3RhdGUgKnJzcDsKIApAQCAtMzQwMiw4ICszNTI4LDggQEAKIAkJCXJucC0+cXNtYXNraW5pdCA9IDA7CiAJCQlybnAtPmdycGxvID0gaiAqIGNwdXN0cmlkZTsKIAkJCXJucC0+Z3JwaGkgPSAoaiArIDEpICogY3B1c3RyaWRlIC0gMTsKLQkJCWlmIChybnAtPmdycGhpID49IE5SX0NQVVMpCi0JCQkJcm5wLT5ncnBoaSA9IE5SX0NQVVMgLSAxOworCQkJaWYgKHJucC0+Z3JwaGkgPj0gbnJfY3B1X2lkcykKKwkJCQlybnAtPmdycGhpID0gbnJfY3B1X2lkcyAtIDE7CiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJcm5wLT5ncnBudW0gPSAwOwogCQkJCXJucC0+Z3JwbWFzayA9IDA7CkBAIC0zNDIyLDcgKzM1NDgsNiBAQAogCiAJcnNwLT5yZGEgPSByZGE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcnNwLT5ncF93cSk7Ci0JaW5pdF9pcnFfd29yaygmcnNwLT53YWtldXBfd29yaywgcnNwX3dha2V1cCk7CiAJcm5wID0gcnNwLT5sZXZlbFtyY3VfbnVtX2x2bHMgLSAxXTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl3aGlsZSAoaSA+IHJucC0+Z3JwaGkpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oCmluZGV4IDc1ZGMzYzMuLmJmMmMxZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZS5oCisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oCkBAIC0yNTIsNyArMjUyLDYgQEAKIAlib29sCQlwYXNzZWRfcXVpZXNjZTsJLyogVXNlci1tb2RlL2lkbGUgbG9vcCBldGMuICovCiAJYm9vbAkJcXNfcGVuZGluZzsJLyogQ29yZSB3YWl0cyBmb3IgcXVpZXNjIHN0YXRlLiAqLwogCWJvb2wJCWJlZW5vbmxpbmU7CS8qIENQVSBvbmxpbmUgYXQgbGVhc3Qgb25jZS4gKi8KLQlib29sCQlwcmVlbXB0aWJsZTsJLyogUHJlZW1wdGlibGUgUkNVPyAqLwogCXN0cnVjdCByY3Vfbm9kZSAqbXlub2RlOwkvKiBUaGlzIENQVSdzIGxlYWYgb2YgaGllcmFyY2h5ICovCiAJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkJLyogTWFzayB0byBhcHBseSB0byBsZWFmIHFzbWFzay4gKi8KICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPCkBAIC00MDYsNyArNDA1LDggQEAKIAl1bnNpZ25lZCBsb25nIGNvbXBsZXRlZDsJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICpncF9rdGhyZWFkOwkJLyogVGFzayBmb3IgZ3JhY2UgcGVyaW9kcy4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBncF93cTsJCS8qIFdoZXJlIEdQIHRhc2sgd2FpdHMuICovCi0JaW50IGdwX2ZsYWdzOwkJCQkvKiBDb21tYW5kcyBmb3IgR1AgdGFzay4gKi8KKwlzaG9ydCBncF9mbGFnczsJCQkJLyogQ29tbWFuZHMgZm9yIEdQIHRhc2suICovCisJc2hvcnQgZ3Bfc3RhdGU7CQkJCS8qIEdQIGt0aHJlYWQgc2xlZXAgc3RhdGUuICovCiAKIAkvKiBFbmQgb2YgZmllbGRzIGd1YXJkZWQgYnkgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCiAKQEAgLTQ2MiwxMyArNDYyLDE3IEBACiAJY29uc3QgY2hhciAqbmFtZTsJCQkvKiBOYW1lIG9mIHN0cnVjdHVyZS4gKi8KIAljaGFyIGFiYnI7CQkJCS8qIEFiYnJldmlhdGVkIG5hbWUuICovCiAJc3RydWN0IGxpc3RfaGVhZCBmbGF2b3JzOwkJLyogTGlzdCBvZiBSQ1UgZmxhdm9ycy4gKi8KLQlzdHJ1Y3QgaXJxX3dvcmsgd2FrZXVwX3dvcms7CQkvKiBQb3N0cG9uZWQgd2FrZXVwcyAqLwogfTsKIAogLyogVmFsdWVzIGZvciByY3Vfc3RhdGUgc3RydWN0dXJlJ3MgZ3BfZmxhZ3MgZmllbGQuICovCiAjZGVmaW5lIFJDVV9HUF9GTEFHX0lOSVQgMHgxCS8qIE5lZWQgZ3JhY2UtcGVyaW9kIGluaXRpYWxpemF0aW9uLiAqLwogI2RlZmluZSBSQ1VfR1BfRkxBR19GUVMgIDB4MgkvKiBOZWVkIGdyYWNlLXBlcmlvZCBxdWllc2NlbnQtc3RhdGUgZm9yY2luZy4gKi8KIAorLyogVmFsdWVzIGZvciByY3Vfc3RhdGUgc3RydWN0dXJlJ3MgZ3BfZmxhZ3MgZmllbGQuICovCisjZGVmaW5lIFJDVV9HUF9XQUlUX0lOSVQgMAkvKiBJbml0aWFsIHN0YXRlLiAqLworI2RlZmluZSBSQ1VfR1BfV0FJVF9HUFMgIDEJLyogV2FpdCBmb3IgZ3JhY2UtcGVyaW9kIHN0YXJ0LiAqLworI2RlZmluZSBSQ1VfR1BfV0FJVF9GUVMgIDIJLyogV2FpdCBmb3IgZm9yY2UtcXVpZXNjZW50LXN0YXRlIHRpbWUuICovCisKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHJjdV9zdHJ1Y3RfZmxhdm9yczsKIAogLyogU2VxdWVuY2UgdGhyb3VnaCByY3Vfc3RhdGUgc3RydWN0dXJlcyBmb3IgZWFjaCBSQ1UgZmxhdm9yLiAqLwpAQCAtNTQ3LDcgKzU1MSw2IEBACiBzdGF0aWMgdm9pZCBwcmludF9jcHVfc3RhbGxfaW5mb19lbmQodm9pZCk7CiBzdGF0aWMgdm9pZCB6ZXJvX2NwdV9zdGFsbF90aWNrcyhzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiBzdGF0aWMgdm9pZCBpbmNyZW1lbnRfY3B1X3N0YWxsX3RpY2tzKHZvaWQpOwotc3RhdGljIGludCByY3Vfbm9jYl9uZWVkc19ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwogc3RhdGljIHZvaWQgcmN1X25vY2JfZ3Bfc2V0KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBpbnQgbnJxKTsKIHN0YXRpYyB2b2lkIHJjdV9ub2NiX2dwX2NsZWFudXAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiBzdGF0aWMgdm9pZCByY3VfaW5pdF9vbmVfbm9jYihzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmgKaW5kZXggOTYyZDFkNS4uY2JjMmM0NSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3UvdHJlZV9wbHVnaW4uaApAQCAtMTE2LDcgKzExNiw3IEBACiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAogUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9wcmVlbXB0LCAncCcsIGNhbGxfcmN1KTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGUgPSAmcmN1X3ByZWVtcHRfc3RhdGU7CitzdGF0aWMgc3RydWN0IHJjdV9zdGF0ZSAqcmN1X3N0YXRlX3AgPSAmcmN1X3ByZWVtcHRfc3RhdGU7CiAKIHN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAKQEAgLTE0OSwxNSArMTQ5LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7CiAKIC8qCi0gKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgcHJlZW1wdGlibGUgUkNVLgotICovCi12b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKLXsKLQlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9wcmVlbXB0X3N0YXRlKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOwotCi0vKgogICogUmVjb3JkIGEgcHJlZW1wdGlibGUtUkNVIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBDUFUuICBOb3RlCiAgKiB0aGF0IHRoaXMganVzdCBtZWFucyB0aGF0IHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUgaXMKICAqIG5vdCBpbiBhIHF1aWVzY2VudCBzdGF0ZS4gIFRoZXJlIG1pZ2h0IGJlIGFueSBudW1iZXIgb2YgdGFza3MgYmxvY2tlZApAQCAtNjg4LDIwICs2NzksNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwogCi0vKgotICogUXVldWUgYW4gUkNVIGNhbGxiYWNrIGZvciBsYXp5IGludm9jYXRpb24gYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCi0gKiBUaGlzIHdpbGwgbGlrZWx5IGJlIGxhdGVyIG5hbWVkIHNvbWV0aGluZyBsaWtlICJjYWxsX3JjdV9sYXp5KCkiLAotICogYnV0IHRoaXMgY2hhbmdlIHdpbGwgcmVxdWlyZSBzb21lIHdheSBvZiB0YWdnaW5nIHRoZSBsYXp5IFJDVQotICogY2FsbGJhY2tzIGluIHRoZSBsaXN0IG9mIHBlbmRpbmcgY2FsbGJhY2tzLiAgVW50aWwgdGhlbiwgdGhpcwotICogZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gX19rZnJlZV9yY3UoKS4KLSAqLwotdm9pZCBrZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCi0JCSAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKQotewotCV9fY2FsbF9yY3UoaGVhZCwgZnVuYywgJnJjdV9wcmVlbXB0X3N0YXRlLCAtMSwgMSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdSk7Ci0KIC8qKgogICogc3luY2hyb25pemVfcmN1IC0gd2FpdCB1bnRpbCBhIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KICAqCkBAIC05NzAsNyArOTQ3LDcgQEAKIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKLXN0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGUgPSAmcmN1X3NjaGVkX3N0YXRlOworc3RhdGljIHN0cnVjdCByY3Vfc3RhdGUgKnJjdV9zdGF0ZV9wID0gJnJjdV9zY2hlZF9zdGF0ZTsKIAogLyoKICAqIFRlbGwgdGhlbSB3aGF0IFJDVSB0aGV5IGFyZSBydW5uaW5nLgpAQCAtOTkxLDE2ICs5NjgsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKIAogLyoKLSAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1UsIHdoaWNoLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRpYmxlCi0gKiBSQ1UsIGJlY29tZXMgdGhlIHNhbWUgYXMgcmN1LXNjaGVkLgotICovCi12b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKLXsKLQlyY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKLQotLyoKICAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogQ1BVcyBiZWluZyBpbiBxdWllc2NlbnQgc3RhdGVzLgogICovCkBAIC0xMDgwLDIyICsxMDQ3LDYgQEAKIH0KIAogLyoKLSAqIFF1ZXVlIGFuIFJDVSBjYWxsYmFjayBmb3IgbGF6eSBpbnZvY2F0aW9uIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgotICogVGhpcyB3aWxsIGxpa2VseSBiZSBsYXRlciBuYW1lZCBzb21ldGhpbmcgbGlrZSAiY2FsbF9yY3VfbGF6eSgpIiwKLSAqIGJ1dCB0aGlzIGNoYW5nZSB3aWxsIHJlcXVpcmUgc29tZSB3YXkgb2YgdGFnZ2luZyB0aGUgbGF6eSBSQ1UKLSAqIGNhbGxiYWNrcyBpbiB0aGUgbGlzdCBvZiBwZW5kaW5nIGNhbGxiYWNrcy4gIFVudGlsIHRoZW4sIHRoaXMKLSAqIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIF9fa2ZyZWVfcmN1KCkuCi0gKgotICogQmVjYXVzZSB0aGVyZSBpcyBubyBwcmVlbXB0aWJsZSBSQ1UsIHdlIHVzZSBSQ1Utc2NoZWQgaW5zdGVhZC4KLSAqLwotdm9pZCBrZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCi0JCSAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKQotewotCV9fY2FsbF9yY3UoaGVhZCwgZnVuYywgJnJjdV9zY2hlZF9zdGF0ZSwgLTEsIDEpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3UpOwotCi0vKgogICogV2FpdCBmb3IgYW4gcmN1LXByZWVtcHQgZ3JhY2UgcGVyaW9kLCBidXQgbWFrZSBpdCBoYXBwZW4gcXVpY2tseS4KICAqIEJ1dCBiZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgbWFwIHRvIHJjdS1zY2hlZC4KICAqLwpAQCAtMTUxNywxMSArMTQ2OCwxMSBAQAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXBlcl9jcHUocmN1X2NwdV9oYXNfd29yaywgY3B1KSA9IDA7CiAJQlVHX09OKHNtcGJvb3RfcmVnaXN0ZXJfcGVyY3B1X3RocmVhZCgmcmN1X2NwdV90aHJlYWRfc3BlYykpOwotCXJucCA9IHJjdV9nZXRfcm9vdChyY3Vfc3RhdGUpOwotCSh2b2lkKXJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChyY3Vfc3RhdGUsIHJucCk7CisJcm5wID0gcmN1X2dldF9yb290KHJjdV9zdGF0ZV9wKTsKKwkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlX3AsIHJucCk7CiAJaWYgKE5VTV9SQ1VfTk9ERVMgPiAxKSB7Ci0JCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocmN1X3N0YXRlLCBybnApCi0JCQkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlLCBybnApOworCQlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJjdV9zdGF0ZV9wLCBybnApCisJCQkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlX3AsIHJucCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTUyOSwxMiArMTQ4MCwxMiBAQAogCiBzdGF0aWMgdm9pZCByY3VfcHJlcGFyZV9rdGhyZWFkcyhpbnQgY3B1KQogewotCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocmN1X3N0YXRlLT5yZGEsIGNwdSk7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihyY3Vfc3RhdGVfcC0+cmRhLCBjcHUpOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7CiAKIAkvKiBGaXJlIHVwIHRoZSBpbmNvbWluZyBDUFUncyBrdGhyZWFkIGFuZCBsZWFmIHJjdV9ub2RlIGt0aHJlYWQuICovCiAJaWYgKHJjdV9zY2hlZHVsZXJfZnVsbHlfYWN0aXZlKQotCQkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlLCBybnApOworCQkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlX3AsIHJucCk7CiB9CiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCkBAIC0xNzQ0LDYgKzE2OTUsNyBAQAogc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUoaW50IGNwdSkKIHsKICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwKKwlib29sIG5lZWR3YWtlOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CkBAIC0xNzkyLDggKzE3NDQsMTAgQEAKIAkJcm5wID0gcmRwLT5teW5vZGU7CiAJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwotCQlyY3VfYWNjZWxlcmF0ZV9jYnMocnNwLCBybnAsIHJkcCk7CisJCW5lZWR3YWtlID0gcmN1X2FjY2VsZXJhdGVfY2JzKHJzcCwgcm5wLCByZHApOwogCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQlpZiAobmVlZHdha2UpCisJCQlyY3VfZ3Bfa3RocmVhZF93YWtlKHJzcCk7CiAJfQogI2VuZGlmIC8qICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwgKi8KIH0KQEAgLTE4NTUsNyArMTgwOSw3IEBACiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgewotCQlyZHAgPSBfX3RoaXNfY3B1X3B0cihyc3AtPnJkYSk7CisJCXJkcCA9IHJhd19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJaWYgKHJkcC0+cWxlbl9sYXp5ICE9IDApIHsKIAkJCWF0b21pY19pbmMoJm9vbV9jYWxsYmFja19jb3VudCk7CiAJCQlyc3AtPmNhbGwoJnJkcC0+b29tX2hlYWQsIHJjdV9vb21fY2FsbGJhY2spOwpAQCAtMTk5Nyw3ICsxOTUxLDcgQEAKIAlzdHJ1Y3QgcmN1X3N0YXRlICpyc3A7CiAKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkKLQkJX190aGlzX2NwdV9wdHIocnNwLT5yZGEpLT50aWNrc190aGlzX2dwKys7CisJCXJhd19jcHVfaW5jKHJzcC0+cmRhLT50aWNrc190aGlzX2dwKTsKIH0KIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8gKi8KQEAgLTIwNjgsMTkgKzIwMjIsNiBAQAogZWFybHlfcGFyYW0oInJjdV9ub2NiX3BvbGwiLCBwYXJzZV9yY3Vfbm9jYl9wb2xsKTsKIAogLyoKLSAqIERvIGFueSBuby1DQnMgQ1BVcyBuZWVkIGFub3RoZXIgZ3JhY2UgcGVyaW9kPwotICoKLSAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4gIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUgcm9vdAotICogcm5wX25vZGUgc3RydWN0dXJlJ3MgLT5sb2NrLCB0aGUgcmVzdWx0cyBhcmUgYWR2aXNvcnkgb25seS4KLSAqLwotc3RhdGljIGludCByY3Vfbm9jYl9uZWVkc19ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci0Jc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKLQotCXJldHVybiBybnAtPm5lZWRfZnV0dXJlX2dwWyhBQ0NFU1NfT05DRShybnAtPmNvbXBsZXRlZCkgKyAxKSAmIDB4MV07Ci19Ci0KLS8qCiAgKiBXYWtlIHVwIGFueSBuby1DQnMgQ1BVcycga3RocmVhZHMgdGhhdCB3ZXJlIHdhaXRpbmcgb24gdGhlIGp1c3QtZW5kZWQKICAqIGdyYWNlIHBlcmlvZC4KICAqLwpAQCAtMjEwOSw3ICsyMDUwLDcgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTAotLyogSXMgdGhlIHNwZWNpZmllZCBDUFUgYSBuby1DUFVzIENQVT8gKi8KKy8qIElzIHRoZSBzcGVjaWZpZWQgQ1BVIGEgbm8tQ0JzIENQVT8gKi8KIGJvb2wgcmN1X2lzX25vY2JfY3B1KGludCBjcHUpCiB7CiAJaWYgKGhhdmVfcmN1X25vY2JfbWFzaykKQEAgLTIyNDMsMTIgKzIxODQsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGM7CiAJYm9vbCBkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBuZWVkd2FrZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJkcC0+bXlub2RlOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7Ci0JYyA9IHJjdV9zdGFydF9mdXR1cmVfZ3Aocm5wLCByZHApOworCW5lZWR3YWtlID0gcmN1X3N0YXJ0X2Z1dHVyZV9ncChybnAsIHJkcCwgJmMpOwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlpZiAobmVlZHdha2UpCisJCXJjdV9ncF9rdGhyZWFkX3dha2UocmRwLT5yc3ApOwogCiAJLyoKIAkgKiBXYWl0IGZvciB0aGUgZ3JhY2UgcGVyaW9kLiAgRG8gc28gaW50ZXJydXB0aWJseSB0byBhdm9pZCBtZXNzaW5nCkBAIC0yNDAyLDExICsyMzQ2LDYgQEAKIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUgKi8KIAotc3RhdGljIGludCByY3Vfbm9jYl9uZWVkc19ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHJjdV9ub2NiX2dwX2NsZWFudXAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIH0KQEAgLTI1MjMsOSArMjQ2Miw5IEBACiAJLyogUmVjb3JkIHN0YXJ0IG9mIGZ1bGx5IGlkbGUgcGVyaW9kLiAqLwogCWogPSBqaWZmaWVzOwogCUFDQ0VTU19PTkNFKHJkdHAtPmR5bnRpY2tzX2lkbGVfamlmZmllcykgPSBqOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAlhdG9taWNfaW5jKCZyZHRwLT5keW50aWNrc19pZGxlKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCVdBUk5fT05fT05DRShhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3NfaWRsZSkgJiAweDEpOwogfQogCkBAIC0yNTkwLDkgKzI1MjksOSBAQAogCX0KIAogCS8qIFJlY29yZCBlbmQgb2YgaWRsZSBwZXJpb2QuICovCi0Jc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWF0b21pY19pbmMoJnJkdHAtPmR5bnRpY2tzX2lkbGUpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJV0FSTl9PTl9PTkNFKCEoYXRvbWljX3JlYWQoJnJkdHAtPmR5bnRpY2tzX2lkbGUpICYgMHgxKSk7CiAKIAkvKgpAQCAtMjY1NywyMCArMjU5Niw2IEBACiB9CiAKIC8qCi0gKiBCaW5kIHRoZSBncmFjZS1wZXJpb2Qga3RocmVhZCBmb3IgdGhlIHN5c2lkbGUgZmxhdm9yIG9mIFJDVSB0byB0aGUKLSAqIHRpbWVrZWVwaW5nIENQVS4KLSAqLwotc3RhdGljIHZvaWQgcmN1X2JpbmRfZ3Bfa3RocmVhZCh2b2lkKQotewotCWludCBjcHUgPSBBQ0NFU1NfT05DRSh0aWNrX2RvX3RpbWVyX2NwdSk7Ci0KLQlpZiAoY3B1IDwgMCB8fCBjcHUgPj0gbnJfY3B1X2lkcykKLQkJcmV0dXJuOwotCWlmIChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSkKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihjcHUpKTsKLX0KLQotLyoKICAqIFJldHVybiBhIGRlbGF5IGluIGppZmZpZXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBDUFVzLCByY3Vfbm9kZQogICogbGVhZiBmYW5vdXQsIGFuZCBqaWZmaWVzIHRpY2sgcmF0ZS4gIFRoZSBpZGVhIGlzIHRvIGFsbG93IGxhcmdlcgogICogc3lzdGVtcyBtb3JlIHRpbWUgdG8gdHJhbnNpdGlvbiB0byBmdWxsLWlkbGUgc3RhdGUgaW4gb3JkZXIgdG8KQEAgLTI3MzQsNyArMjY1OSw4IEBACiBzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9jYW5jZWwodm9pZCkKIHsKIAlzbXBfbWIoKTsKLQlBQ0NFU1NfT05DRShmdWxsX3N5c2lkbGVfc3RhdGUpID0gUkNVX1NZU0lETEVfTk9UOworCWlmIChmdWxsX3N5c2lkbGVfc3RhdGUgPiBSQ1VfU1lTSURMRV9TSE9SVCkKKwkJQUNDRVNTX09OQ0UoZnVsbF9zeXNpZGxlX3N0YXRlKSA9IFJDVV9TWVNJRExFX05PVDsKIH0KIAogLyoKQEAgLTI4ODAsMTAgKzI4MDYsNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgcmN1X2JpbmRfZ3Bfa3RocmVhZCh2b2lkKQotewotfQotCiBzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9yZXBvcnRfZ3Aoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgaXNpZGxlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBtYXhqKQogewpAQCAtMjkxNCwzICsyODM2LDE5IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWl9GVUxMICovCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBCaW5kIHRoZSBncmFjZS1wZXJpb2Qga3RocmVhZCBmb3IgdGhlIHN5c2lkbGUgZmxhdm9yIG9mIFJDVSB0byB0aGUKKyAqIHRpbWVrZWVwaW5nIENQVS4KKyAqLworc3RhdGljIHZvaWQgcmN1X2JpbmRfZ3Bfa3RocmVhZCh2b2lkKQoreworI2lmZGVmIENPTkZJR19OT19IWl9GVUxMCisJaW50IGNwdSA9IEFDQ0VTU19PTkNFKHRpY2tfZG9fdGltZXJfY3B1KTsKKworCWlmIChjcHUgPCAwIHx8IGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm47CisJaWYgKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgIT0gY3B1KQorCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTCAqLworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmMKaW5kZXggNGMwYTliMC4uYTJhZWI0ZCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS91cGRhdGUuYworKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCkBAIC0zMjAsNiArMzIwLDE4IEBACiAJcmV0dXJuIHRpbGxfc3RhbGxfY2hlY2sgKiBIWiArIFJDVV9TVEFMTF9ERUxBWV9ERUxUQTsKIH0KIAordm9pZCByY3Vfc3lzcnFfc3RhcnQodm9pZCkKK3sKKwlpZiAoIXJjdV9jcHVfc3RhbGxfc3VwcHJlc3MpCisJCXJjdV9jcHVfc3RhbGxfc3VwcHJlc3MgPSAyOworfQorCit2b2lkIHJjdV9zeXNycV9lbmQodm9pZCkKK3sKKwlpZiAocmN1X2NwdV9zdGFsbF9zdXBwcmVzcyA9PSAyKQorCQlyY3VfY3B1X3N0YWxsX3N1cHByZXNzID0gMDsKK30KKwogc3RhdGljIGludCByY3VfcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2LCB2b2lkICpwdHIpCiB7CiAJcmN1X2NwdV9zdGFsbF9zdXBwcmVzcyA9IDE7CkBAIC0zMzgsMyArMzUwLDIxIEBACiBlYXJseV9pbml0Y2FsbChjaGVja19jcHVfc3RhbGxfaW5pdCk7CiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9TVEFMTF9DT01NT04gKi8KKworLyoKKyAqIEhvb2tzIGZvciBjb25kX3Jlc2NoZWQoKSBhbmQgZnJpZW5kcyB0byBhdm9pZCBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzLgorICovCisKK0RFRklORV9QRVJfQ1BVKGludCwgcmN1X2NvbmRfcmVzY2hlZF9jb3VudCk7CisKKy8qCisgKiBSZXBvcnQgYSBzZXQgb2YgUkNVIHF1aWVzY2VudCBzdGF0ZXMsIGZvciB1c2UgYnkgY29uZF9yZXNjaGVkKCkKKyAqIGFuZCBmcmllbmRzLiAgT3V0IG9mIGxpbmUgZHVlIHRvIGJlaW5nIGNhbGxlZCBpbmZyZXF1ZW50bHkuCisgKi8KK3ZvaWQgcmN1X3Jlc2NoZWQodm9pZCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX3RoaXNfY3B1X3dyaXRlKHJjdV9jb25kX3Jlc2NoZWRfY291bnQsIDApOworCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggODk1N2Q2OC4uM2MyMjM3YSAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTEyODgsMTMgKzEyODgsMTAgQEAKIAkJaWYgKHAtPmZsYWdzICYgSU9SRVNPVVJDRV9CVVNZKQogCQkJY29udGludWU7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicmVzb3VyY2UgbWFwIHNhbml0eSBjaGVjayBjb25mbGljdDogIgotCQkgICAgICAgIjB4JWxseCAweCVsbHggMHglbGx4IDB4JWxseCAlc1xuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicmVzb3VyY2Ugc2FuaXR5IGNoZWNrOiByZXF1ZXN0aW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdLCB3aGljaCBzcGFucyBtb3JlIHRoYW4gJXMgJXBSXG4iLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoYWRkciArIHNpemUgLSAxKSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcC0+c3RhcnQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXAtPmVuZCwKLQkJICAgICAgIHAtPm5hbWUpOworCQkgICAgICAgcC0+bmFtZSwgcCk7CiAJCWVyciA9IC0xOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCAwYTcyNTE2Li45MTNjNmQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTkwLDYgKzkwLDIyIEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvc2NoZWQuaD4KIAorI2lmZGVmIHNtcF9tYl9fYmVmb3JlX2F0b21pYwordm9pZCBfX3NtcF9tYl9fYmVmb3JlX2F0b21pYyh2b2lkKQoreworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworfQorRVhQT1JUX1NZTUJPTChfX3NtcF9tYl9fYmVmb3JlX2F0b21pYyk7CisjZW5kaWYKKworI2lmZGVmIHNtcF9tYl9fYWZ0ZXJfYXRvbWljCit2b2lkIF9fc21wX21iX19hZnRlcl9hdG9taWModm9pZCkKK3sKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworfQorRVhQT1JUX1NZTUJPTChfX3NtcF9tYl9fYWZ0ZXJfYXRvbWljKTsKKyNlbmRpZgorCiB2b2lkIHN0YXJ0X2JhbmR3aWR0aF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqcGVyaW9kX3RpbWVyLCBrdGltZV90IHBlcmlvZCkKIHsKIAl1bnNpZ25lZCBsb25nIGRlbHRhOwpAQCAtNTA2LDYgKzUyMiwzOSBAQAogI2VuZGlmCS8qIENPTkZJR19TQ0hFRF9IUlRJQ0sgKi8KIAogLyoKKyAqIGNtcHhjaGcgYmFzZWQgZmV0Y2hfb3IsIG1hY3JvIHNvIGl0IHdvcmtzIGZvciBkaWZmZXJlbnQgaW50ZWdlciB0eXBlcworICovCisjZGVmaW5lIGZldGNoX29yKHB0ciwgdmFsKQkJCQkJCVwKKyh7CXR5cGVvZigqKHB0cikpIF9fb2xkLCBfX3ZhbCA9ICoocHRyKTsJCQkJXAorIAlmb3IgKDs7KSB7CQkJCQkJCVwKKyAJCV9fb2xkID0gY21weGNoZygocHRyKSwgX192YWwsIF9fdmFsIHwgKHZhbCkpOwkJXAorIAkJaWYgKF9fb2xkID09IF9fdmFsKQkJCQkJXAorIAkJCWJyZWFrOwkJCQkJCVwKKyAJCV9fdmFsID0gX19vbGQ7CQkJCQkJXAorIAl9CQkJCQkJCQlcCisgCV9fb2xkOwkJCQkJCQkJXAorfSkKKworI2lmZGVmIFRJRl9QT0xMSU5HX05SRkxBRworLyoKKyAqIEF0b21pY2FsbHkgc2V0IFRJRl9ORUVEX1JFU0NIRUQgYW5kIHRlc3QgZm9yIFRJRl9QT0xMSU5HX05SRkxBRywKKyAqIHRoaXMgYXZvaWRzIGFueSByYWNlcyB3cnQgcG9sbGluZyBzdGF0ZSBjaGFuZ2VzIGFuZCB0aGVyZWJ5IGF2b2lkcworICogc3B1cmlvdXMgSVBJcy4KKyAqLworc3RhdGljIGJvb2wgc2V0X25yX2FuZF9ub3RfcG9sbGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CisJcmV0dXJuICEoZmV0Y2hfb3IoJnRpLT5mbGFncywgX1RJRl9ORUVEX1JFU0NIRUQpICYgX1RJRl9QT0xMSU5HX05SRkxBRyk7Cit9CisjZWxzZQorc3RhdGljIGJvb2wgc2V0X25yX2FuZF9ub3RfcG9sbGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CisJcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworLyoKICAqIHJlc2NoZWRfdGFzayAtIG1hcmsgYSB0YXNrICd0byBiZSByZXNjaGVkdWxlZCBub3cnLgogICoKICAqIE9uIFVQIHRoaXMgbWVhbnMgdGhlIHNldHRpbmcgb2YgdGhlIG5lZWRfcmVzY2hlZCBmbGFnLCBvbiBTTVAgaXQKQEAgLTUyMSwxNyArNTcwLDE1IEBACiAJaWYgKHRlc3RfdHNrX25lZWRfcmVzY2hlZChwKSkKIAkJcmV0dXJuOwogCi0Jc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7Ci0KIAljcHUgPSB0YXNrX2NwdShwKTsKKwogCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOwogCQlzZXRfcHJlZW1wdF9uZWVkX3Jlc2NoZWQoKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIE5FRURfUkVTQ0hFRCBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QgcG9sbGluZyAqLwotCXNtcF9tYigpOwotCWlmICghdHNrX2lzX3BvbGxpbmcocCkpCisJaWYgKHNldF9ucl9hbmRfbm90X3BvbGxpbmcocCkpCiAJCXNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKIH0KIApAQCAtMzAwMiw3ICszMDQ5LDcgQEAKIGludCBjYW5fbmljZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IGludCBuaWNlKQogewogCS8qIGNvbnZlcnQgbmljZSB2YWx1ZSBbMTksLTIwXSB0byBybGltaXQgc3R5bGUgdmFsdWUgWzEsNDBdICovCi0JaW50IG5pY2VfcmxpbSA9IDIwIC0gbmljZTsKKwlpbnQgbmljZV9ybGltID0gbmljZV90b19ybGltaXQobmljZSk7CiAKIAlyZXR1cm4gKG5pY2VfcmxpbSA8PSB0YXNrX3JsaW1pdChwLCBSTElNSVRfTklDRSkgfHwKIAkJY2FwYWJsZShDQVBfU1lTX05JQ0UpKTsKQEAgLTMwMjYsMTcgKzMwNzMsMTAgQEAKIAkgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5LiBDb25jZXB0dWFsbHkgb25lIGNhbGwgb2NjdXJzIGZpcnN0CiAJICogYW5kIHdlIGhhdmUgYSBzaW5nbGUgd2lubmVyLgogCSAqLwotCWlmIChpbmNyZW1lbnQgPCAtNDApCi0JCWluY3JlbWVudCA9IC00MDsKLQlpZiAoaW5jcmVtZW50ID4gNDApCi0JCWluY3JlbWVudCA9IDQwOwotCisJaW5jcmVtZW50ID0gY2xhbXAoaW5jcmVtZW50LCAtTklDRV9XSURUSCwgTklDRV9XSURUSCk7CiAJbmljZSA9IHRhc2tfbmljZShjdXJyZW50KSArIGluY3JlbWVudDsKLQlpZiAobmljZSA8IE1JTl9OSUNFKQotCQluaWNlID0gTUlOX05JQ0U7Ci0JaWYgKG5pY2UgPiBNQVhfTklDRSkKLQkJbmljZSA9IE1BWF9OSUNFOwogCisJbmljZSA9IGNsYW1wX3ZhbChuaWNlLCBNSU5fTklDRSwgTUFYX05JQ0UpOwogCWlmIChpbmNyZW1lbnQgPCAwICYmICFjYW5fbmljZShjdXJyZW50LCBuaWNlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIApAQCAtMzYyNiwxMyArMzY2NiwxMSBAQAogCSAqLwogCWF0dHItPnNjaGVkX25pY2UgPSBjbGFtcChhdHRyLT5zY2hlZF9uaWNlLCBNSU5fTklDRSwgTUFYX05JQ0UpOwogCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogZXJyX3NpemU6CiAJcHV0X3VzZXIoc2l6ZW9mKCphdHRyKSwgJnVhdHRyLT5zaXplKTsKLQlyZXQgPSAtRTJCSUc7Ci0JZ290byBvdXQ7CisJcmV0dXJuIC1FMkJJRzsKIH0KIAogLyoqCkBAIC0zNzkyLDcgKzM4MzAsNyBAQAogCiAJCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyKyspIHsKIAkJCWlmICgqYWRkcikKLQkJCQlnb3RvIGVycl9zaXplOworCQkJCXJldHVybiAtRUZCSUc7CiAJCX0KIAogCQlhdHRyLT5zaXplID0gdXNpemU7CkBAIC0zODAyLDEyICszODQwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVGQVVMVDsKIAotb3V0OgotCXJldHVybiByZXQ7Ci0KLWVycl9zaXplOgotCXJldCA9IC1FMkJJRzsKLQlnb3RvIG91dDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00MDg0LDYgKzQxMTcsNyBAQAogCiBpbnQgX19zY2hlZCBfY29uZF9yZXNjaGVkKHZvaWQpCiB7CisJcmN1X2NvbmRfcmVzY2hlZCgpOwogCWlmIChzaG91bGRfcmVzY2hlZCgpKSB7CiAJCV9fY29uZF9yZXNjaGVkKCk7CiAJCXJldHVybiAxOwpAQCAtNDEwMiwxNSArNDEzNiwxOCBAQAogICovCiBpbnQgX19jb25kX3Jlc2NoZWRfbG9jayhzcGlubG9ja190ICpsb2NrKQogeworCWJvb2wgbmVlZF9yY3VfcmVzY2hlZCA9IHJjdV9zaG91bGRfcmVzY2hlZCgpOwogCWludCByZXNjaGVkID0gc2hvdWxkX3Jlc2NoZWQoKTsKIAlpbnQgcmV0ID0gMDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7CiAKLQlpZiAoc3Bpbl9uZWVkYnJlYWsobG9jaykgfHwgcmVzY2hlZCkgeworCWlmIChzcGluX25lZWRicmVhayhsb2NrKSB8fCByZXNjaGVkIHx8IG5lZWRfcmN1X3Jlc2NoZWQpIHsKIAkJc3Bpbl91bmxvY2sobG9jayk7CiAJCWlmIChyZXNjaGVkKQogCQkJX19jb25kX3Jlc2NoZWQoKTsKKwkJZWxzZSBpZiAodW5saWtlbHkobmVlZF9yY3VfcmVzY2hlZCkpCisJCQlyY3VfcmVzY2hlZCgpOwogCQllbHNlCiAJCQljcHVfcmVsYXgoKTsKIAkJcmV0ID0gMTsKQEAgLTQxMjQsNiArNDE2MSw3IEBACiB7CiAJQlVHX09OKCFpbl9zb2Z0aXJxKCkpOwogCisJcmN1X2NvbmRfcmVzY2hlZCgpOyAgLyogQkggZGlzYWJsZWQgT0ssIGp1c3QgcmVjb3JkaW5nIFFTZXMuICovCiAJaWYgKHNob3VsZF9yZXNjaGVkKCkpIHsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCV9fY29uZF9yZXNjaGVkKCk7CkBAIC01MDcyLDEwICs1MTEwLDIwIEBACiAJLnByaW9yaXR5ID0gQ1BVX1BSSV9NSUdSQVRJT04sCiB9OwogCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc2V0X2NwdV9ycV9zdGFydF90aW1lKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJcnEtPmFnZV9zdGFtcCA9IHNjaGVkX2Nsb2NrX2NwdShjcHUpOworfQorCiBzdGF0aWMgaW50IHNjaGVkX2NwdV9hY3RpdmUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgeworCWNhc2UgQ1BVX1NUQVJUSU5HOgorCQlzZXRfY3B1X3JxX3N0YXJ0X3RpbWUoKTsKKwkJcmV0dXJuIE5PVElGWV9PSzsKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKIAkJc2V0X2NwdV9hY3RpdmUoKGxvbmcpaGNwdSwgdHJ1ZSk7CiAJCXJldHVybiBOT1RJRllfT0s7CkBAIC01Mjg0LDcgKzUzMzIsOCBAQAogCQkJIFNEX0JBTEFOQ0VfRk9SSyB8CiAJCQkgU0RfQkFMQU5DRV9FWEVDIHwKIAkJCSBTRF9TSEFSRV9DUFVQT1dFUiB8Ci0JCQkgU0RfU0hBUkVfUEtHX1JFU09VUkNFUykpIHsKKwkJCSBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTIHwKKwkJCSBTRF9TSEFSRV9QT1dFUkRPTUFJTikpIHsKIAkJaWYgKHNkLT5ncm91cHMgIT0gc2QtPmdyb3Vwcy0+bmV4dCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTUzMTUsNyArNTM2NCw4IEBACiAJCQkJU0RfQkFMQU5DRV9FWEVDIHwKIAkJCQlTRF9TSEFSRV9DUFVQT1dFUiB8CiAJCQkJU0RfU0hBUkVfUEtHX1JFU09VUkNFUyB8Ci0JCQkJU0RfUFJFRkVSX1NJQkxJTkcpOworCQkJCVNEX1BSRUZFUl9TSUJMSU5HIHwKKwkJCQlTRF9TSEFSRV9QT1dFUkRPTUFJTik7CiAJCWlmIChucl9ub2RlX2lkcyA9PSAxKQogCQkJcGZsYWdzICY9IH5TRF9TRVJJQUxJWkU7CiAJfQpAQCAtNTU4OSwxNyArNTYzOSw2IEBACiAKIF9fc2V0dXAoImlzb2xjcHVzPSIsIGlzb2xhdGVkX2NwdV9zZXR1cCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NwdV9tYXNrKGludCBjcHUpCi17Ci0JcmV0dXJuIGNwdW1hc2tfb2Zfbm9kZShjcHVfdG9fbm9kZShjcHUpKTsKLX0KLQotc3RydWN0IHNkX2RhdGEgewotCXN0cnVjdCBzY2hlZF9kb21haW4gKipfX3BlcmNwdSBzZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipfX3BlcmNwdSBzZzsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXBfcG93ZXIgKipfX3BlcmNwdSBzZ3A7Ci19OwotCiBzdHJ1Y3Qgc19kYXRhIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICoqIF9fcGVyY3B1IHNkOwogCXN0cnVjdCByb290X2RvbWFpbgkqcmQ7CkBAIC01NjEyLDIxICs1NjUxLDYgQEAKIAlzYV9ub25lLAogfTsKIAotc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbDsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2NoZWRfZG9tYWluICooKnNjaGVkX2RvbWFpbl9pbml0X2YpKHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsLCBpbnQgY3B1KTsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IGNwdW1hc2sgKigqc2NoZWRfZG9tYWluX21hc2tfZikoaW50IGNwdSk7Ci0KLSNkZWZpbmUgU0RUTF9PVkVSTEFQCTB4MDEKLQotc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCB7Ci0Jc2NoZWRfZG9tYWluX2luaXRfZiBpbml0OwotCXNjaGVkX2RvbWFpbl9tYXNrX2YgbWFzazsKLQlpbnQJCSAgICBmbGFnczsKLQlpbnQJCSAgICBudW1hX2xldmVsOwotCXN0cnVjdCBzZF9kYXRhICAgICAgZGF0YTsKLX07Ci0KIC8qCiAgKiBCdWlsZCBhbiBpdGVyYXRpb24gbWFzayB0aGF0IGNhbiBleGNsdWRlIGNlcnRhaW4gQ1BVcyBmcm9tIHRoZSB1cHdhcmRzCiAgKiBkb21haW4gdHJhdmVyc2FsLgpAQCAtNTc5NCw4ICs1ODE4LDYgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWdyb3VwID0gZ2V0X2dyb3VwKGksIHNkZCwgJnNnKTsKLQkJY3B1bWFza19jbGVhcihzY2hlZF9ncm91cF9jcHVzKHNnKSk7Ci0JCXNnLT5zZ3AtPnBvd2VyID0gMDsKIAkJY3B1bWFza19zZXRhbGwoc2NoZWRfZ3JvdXBfbWFzayhzZykpOwogCiAJCWZvcl9lYWNoX2NwdShqLCBzcGFuKSB7CkBAIC01ODQ1LDQ0ICs1ODY3LDExIEBACiAJYXRvbWljX3NldCgmc2ctPnNncC0+bnJfYnVzeV9jcHVzLCBzZy0+Z3JvdXBfd2VpZ2h0KTsKIH0KIAotaW50IF9fd2VhayBhcmNoX3NkX3NpYmxpbmdfYXN5bV9wYWNraW5nKHZvaWQpCi17Ci0gICAgICAgcmV0dXJuIDAqU0RfQVNZTV9QQUNLSU5HOwotfQotCiAvKgogICogSW5pdGlhbGl6ZXJzIGZvciBzY2hlZHVsZSBkb21haW5zCiAgKiBOb24taW5saW5lZCB0byByZWR1Y2UgYWNjdW11bGF0ZWQgc3RhY2sgcHJlc3N1cmUgaW4gYnVpbGRfc2NoZWRfZG9tYWlucygpCiAgKi8KIAotI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwotIyBkZWZpbmUgU0RfSU5JVF9OQU1FKHNkLCB0eXBlKQkJc2QtPm5hbWUgPSAjdHlwZQotI2Vsc2UKLSMgZGVmaW5lIFNEX0lOSVRfTkFNRShzZCwgdHlwZSkJCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIFNEX0lOSVRfRlVOQyh0eXBlKQkJCQkJCVwKLXN0YXRpYyBub2lubGluZSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICoJCQkJCVwKLXNkX2luaXRfIyN0eXBlKHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsLCBpbnQgY3B1KSAJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9ICpwZXJfY3B1X3B0cih0bC0+ZGF0YS5zZCwgY3B1KTsJXAotCSpzZCA9IFNEXyMjdHlwZSMjX0lOSVQ7CQkJCQkJXAotCVNEX0lOSVRfTkFNRShzZCwgdHlwZSk7CQkJCQkJXAotCXNkLT5wcml2YXRlID0gJnRsLT5kYXRhOwkJCQkJXAotCXJldHVybiBzZDsJCQkJCQkJXAotfQotCi1TRF9JTklUX0ZVTkMoQ1BVKQotI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLSBTRF9JTklUX0ZVTkMoU0lCTElORykKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQ0hFRF9NQwotIFNEX0lOSVRfRlVOQyhNQykKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQ0hFRF9CT09LCi0gU0RfSU5JVF9GVU5DKEJPT0spCi0jZW5kaWYKLQogc3RhdGljIGludCBkZWZhdWx0X3JlbGF4X2RvbWFpbl9sZXZlbCA9IC0xOwogaW50IHNjaGVkX2RvbWFpbl9sZXZlbF9tYXg7CiAKQEAgLTU5NzAsOTkgKzU5NTksMTU0IEBACiAJCSpwZXJfY3B1X3B0cihzZGQtPnNncCwgY3B1KSA9IE5VTEw7CiB9CiAKLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9zbXRfbWFzayhpbnQgY3B1KQotewotCXJldHVybiB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBUb3BvbG9neSBsaXN0LCBib3R0b20tdXAuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsIGRlZmF1bHRfdG9wb2xvZ3lbXSA9IHsKLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi0JeyBzZF9pbml0X1NJQkxJTkcsIGNwdV9zbXRfbWFzaywgfSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQ0hFRF9NQwotCXsgc2RfaW5pdF9NQywgY3B1X2NvcmVncm91cF9tYXNrLCB9LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NDSEVEX0JPT0sKLQl7IHNkX2luaXRfQk9PSywgY3B1X2Jvb2tfbWFzaywgfSwKLSNlbmRpZgotCXsgc2RfaW5pdF9DUFUsIGNwdV9jcHVfbWFzaywgfSwKLQl7IE5VTEwsIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCAqc2NoZWRfZG9tYWluX3RvcG9sb2d5ID0gZGVmYXVsdF90b3BvbG9neTsKLQotI2RlZmluZSBmb3JfZWFjaF9zZF90b3BvbG9neSh0bCkJCQlcCi0JZm9yICh0bCA9IHNjaGVkX2RvbWFpbl90b3BvbG9neTsgdGwtPmluaXQ7IHRsKyspCi0KICNpZmRlZiBDT05GSUdfTlVNQQotCiBzdGF0aWMgaW50IHNjaGVkX2RvbWFpbnNfbnVtYV9sZXZlbHM7CiBzdGF0aWMgaW50ICpzY2hlZF9kb21haW5zX251bWFfZGlzdGFuY2U7CiBzdGF0aWMgc3RydWN0IGNwdW1hc2sgKioqc2NoZWRfZG9tYWluc19udW1hX21hc2tzOwogc3RhdGljIGludCBzY2hlZF9kb21haW5zX2N1cnJfbGV2ZWw7CisjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgc2RfbG9jYWxfZmxhZ3MoaW50IGxldmVsKQotewotCWlmIChzY2hlZF9kb21haW5zX251bWFfZGlzdGFuY2VbbGV2ZWxdID4gUkVDTEFJTV9ESVNUQU5DRSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gU0RfQkFMQU5DRV9FWEVDIHwgU0RfQkFMQU5DRV9GT1JLIHwgU0RfV0FLRV9BRkZJTkU7Ci19CisvKgorICogU0RfZmxhZ3MgYWxsb3dlZCBpbiB0b3BvbG9neSBkZXNjcmlwdGlvbnMuCisgKgorICogU0RfU0hBUkVfQ1BVUE9XRVIgICAgICAtIGRlc2NyaWJlcyBTTVQgdG9wb2xvZ2llcworICogU0RfU0hBUkVfUEtHX1JFU09VUkNFUyAtIGRlc2NyaWJlcyBzaGFyZWQgY2FjaGVzCisgKiBTRF9OVU1BICAgICAgICAgICAgICAgIC0gZGVzY3JpYmVzIE5VTUEgdG9wb2xvZ2llcworICogU0RfU0hBUkVfUE9XRVJET01BSU4gICAtIGRlc2NyaWJlcyBzaGFyZWQgcG93ZXIgZG9tYWluCisgKgorICogT2RkIG9uZSBvdXQ6CisgKiBTRF9BU1lNX1BBQ0tJTkcgICAgICAgIC0gZGVzY3JpYmVzIFNNVCBxdWlya3MKKyAqLworI2RlZmluZSBUT1BPTE9HWV9TRF9GTEFHUwkJXAorCShTRF9TSEFSRV9DUFVQT1dFUiB8CQlcCisJIFNEX1NIQVJFX1BLR19SRVNPVVJDRVMgfAlcCisJIFNEX05VTUEgfAkJCVwKKwkgU0RfQVNZTV9QQUNLSU5HIHwJCVwKKwkgU0RfU0hBUkVfUE9XRVJET01BSU4pCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICoKLXNkX251bWFfaW5pdChzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bCwgaW50IGNwdSkKK3NkX2luaXQoc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCAqdGwsIGludCBjcHUpCiB7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSAqcGVyX2NwdV9wdHIodGwtPmRhdGEuc2QsIGNwdSk7Ci0JaW50IGxldmVsID0gdGwtPm51bWFfbGV2ZWw7Ci0JaW50IHNkX3dlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KAotCQkJc2NoZWRfZG9tYWluc19udW1hX21hc2tzW2xldmVsXVtjcHVfdG9fbm9kZShjcHUpXSk7CisJaW50IHNkX3dlaWdodCwgc2RfZmxhZ3MgPSAwOworCisjaWZkZWYgQ09ORklHX05VTUEKKwkvKgorCSAqIFVnbHkgaGFjayB0byBwYXNzIHN0YXRlIHRvIHNkX251bWFfbWFzaygpLi4uCisJICovCisJc2NoZWRfZG9tYWluc19jdXJyX2xldmVsID0gdGwtPm51bWFfbGV2ZWw7CisjZW5kaWYKKworCXNkX3dlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHRsLT5tYXNrKGNwdSkpOworCisJaWYgKHRsLT5zZF9mbGFncykKKwkJc2RfZmxhZ3MgPSAoKnRsLT5zZF9mbGFncykoKTsKKwlpZiAoV0FSTl9PTkNFKHNkX2ZsYWdzICYgflRPUE9MT0dZX1NEX0ZMQUdTLAorCQkJIndyb25nIHNkX2ZsYWdzIGluIHRvcG9sb2d5IGRlc2NyaXB0aW9uXG4iKSkKKwkJc2RfZmxhZ3MgJj0gflRPUE9MT0dZX1NEX0ZMQUdTOwogCiAJKnNkID0gKHN0cnVjdCBzY2hlZF9kb21haW4pewogCQkubWluX2ludGVydmFsCQk9IHNkX3dlaWdodCwKIAkJLm1heF9pbnRlcnZhbAkJPSAyKnNkX3dlaWdodCwKIAkJLmJ1c3lfZmFjdG9yCQk9IDMyLAogCQkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCi0JCS5jYWNoZV9uaWNlX3RyaWVzCT0gMiwKLQkJLmJ1c3lfaWR4CQk9IDMsCi0JCS5pZGxlX2lkeAkJPSAyLAorCisJCS5jYWNoZV9uaWNlX3RyaWVzCT0gMCwKKwkJLmJ1c3lfaWR4CQk9IDAsCisJCS5pZGxlX2lkeAkJPSAwLAogCQkubmV3aWRsZV9pZHgJCT0gMCwKIAkJLndha2VfaWR4CQk9IDAsCiAJCS5mb3JrZXhlY19pZHgJCT0gMCwKIAogCQkuZmxhZ3MJCQk9IDEqU0RfTE9BRF9CQUxBTkNFCiAJCQkJCXwgMSpTRF9CQUxBTkNFX05FV0lETEUKLQkJCQkJfCAwKlNEX0JBTEFOQ0VfRVhFQwotCQkJCQl8IDAqU0RfQkFMQU5DRV9GT1JLCisJCQkJCXwgMSpTRF9CQUxBTkNFX0VYRUMKKwkJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwogCQkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCi0JCQkJCXwgMCpTRF9XQUtFX0FGRklORQorCQkJCQl8IDEqU0RfV0FLRV9BRkZJTkUKIAkJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCiAJCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCi0JCQkJCXwgMSpTRF9TRVJJQUxJWkUKKwkJCQkJfCAwKlNEX1NFUklBTElaRQogCQkJCQl8IDAqU0RfUFJFRkVSX1NJQkxJTkcKLQkJCQkJfCAxKlNEX05VTUEKLQkJCQkJfCBzZF9sb2NhbF9mbGFncyhsZXZlbCkKKwkJCQkJfCAwKlNEX05VTUEKKwkJCQkJfCBzZF9mbGFncwogCQkJCQksCisKIAkJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAogCQkuYmFsYW5jZV9pbnRlcnZhbAk9IHNkX3dlaWdodCwKKwkJLnNtdF9nYWluCQk9IDAsCiAJCS5tYXhfbmV3aWRsZV9sYl9jb3N0CT0gMCwKIAkJLm5leHRfZGVjYXlfbWF4X2xiX2Nvc3QJPSBqaWZmaWVzLAorI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworCQkubmFtZQkJCT0gdGwtPm5hbWUsCisjZW5kaWYKIAl9OwotCVNEX0lOSVRfTkFNRShzZCwgTlVNQSk7Ci0Jc2QtPnByaXZhdGUgPSAmdGwtPmRhdGE7CiAKIAkvKgotCSAqIFVnbHkgaGFjayB0byBwYXNzIHN0YXRlIHRvIHNkX251bWFfbWFzaygpLi4uCisJICogQ29udmVydCB0b3BvbG9naWNhbCBwcm9wZXJ0aWVzIGludG8gYmVoYXZpb3VyLgogCSAqLwotCXNjaGVkX2RvbWFpbnNfY3Vycl9sZXZlbCA9IHRsLT5udW1hX2xldmVsOworCisJaWYgKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSB7CisJCXNkLT5pbWJhbGFuY2VfcGN0ID0gMTEwOworCQlzZC0+c210X2dhaW4gPSAxMTc4OyAvKiB+MTUlICovCisKKwl9IGVsc2UgaWYgKHNkLT5mbGFncyAmIFNEX1NIQVJFX1BLR19SRVNPVVJDRVMpIHsKKwkJc2QtPmltYmFsYW5jZV9wY3QgPSAxMTc7CisJCXNkLT5jYWNoZV9uaWNlX3RyaWVzID0gMTsKKwkJc2QtPmJ1c3lfaWR4ID0gMjsKKworI2lmZGVmIENPTkZJR19OVU1BCisJfSBlbHNlIGlmIChzZC0+ZmxhZ3MgJiBTRF9OVU1BKSB7CisJCXNkLT5jYWNoZV9uaWNlX3RyaWVzID0gMjsKKwkJc2QtPmJ1c3lfaWR4ID0gMzsKKwkJc2QtPmlkbGVfaWR4ID0gMjsKKworCQlzZC0+ZmxhZ3MgfD0gU0RfU0VSSUFMSVpFOworCQlpZiAoc2NoZWRfZG9tYWluc19udW1hX2Rpc3RhbmNlW3RsLT5udW1hX2xldmVsXSA+IFJFQ0xBSU1fRElTVEFOQ0UpIHsKKwkJCXNkLT5mbGFncyAmPSB+KFNEX0JBTEFOQ0VfRVhFQyB8CisJCQkJICAgICAgIFNEX0JBTEFOQ0VfRk9SSyB8CisJCQkJICAgICAgIFNEX1dBS0VfQUZGSU5FKTsKKwkJfQorCisjZW5kaWYKKwl9IGVsc2UgeworCQlzZC0+ZmxhZ3MgfD0gU0RfUFJFRkVSX1NJQkxJTkc7CisJCXNkLT5jYWNoZV9uaWNlX3RyaWVzID0gMTsKKwkJc2QtPmJ1c3lfaWR4ID0gMjsKKwkJc2QtPmlkbGVfaWR4ID0gMTsKKwl9CisKKwlzZC0+cHJpdmF0ZSA9ICZ0bC0+ZGF0YTsKIAogCXJldHVybiBzZDsKIH0KIAorLyoKKyAqIFRvcG9sb2d5IGxpc3QsIGJvdHRvbS11cC4KKyAqLworc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgZGVmYXVsdF90b3BvbG9neVtdID0geworI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKKwl7IGNwdV9zbXRfbWFzaywgY3B1X3NtdF9mbGFncywgU0RfSU5JVF9OQU1FKFNNVCkgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TQ0hFRF9NQworCXsgY3B1X2NvcmVncm91cF9tYXNrLCBjcHVfY29yZV9mbGFncywgU0RfSU5JVF9OQU1FKE1DKSB9LAorI2VuZGlmCisJeyBjcHVfY3B1X21hc2ssIFNEX0lOSVRfTkFNRShESUUpIH0sCisJeyBOVUxMLCB9LAorfTsKKworc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCAqc2NoZWRfZG9tYWluX3RvcG9sb2d5ID0gZGVmYXVsdF90b3BvbG9neTsKKworI2RlZmluZSBmb3JfZWFjaF9zZF90b3BvbG9neSh0bCkJCQlcCisJZm9yICh0bCA9IHNjaGVkX2RvbWFpbl90b3BvbG9neTsgdGwtPm1hc2s7IHRsKyspCisKK3ZvaWQgc2V0X3NjaGVkX3RvcG9sb2d5KHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsKQoreworCXNjaGVkX2RvbWFpbl90b3BvbG9neSA9IHRsOworfQorCisjaWZkZWYgQ09ORklHX05VTUEKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpzZF9udW1hX21hc2soaW50IGNwdSkKIHsKIAlyZXR1cm4gc2NoZWRfZG9tYWluc19udW1hX21hc2tzW3NjaGVkX2RvbWFpbnNfY3Vycl9sZXZlbF1bY3B1X3RvX25vZGUoY3B1KV07CkBAIC02MjA2LDcgKzYyNTAsMTAgQEAKIAkJfQogCX0KIAotCXRsID0ga3phbGxvYygoQVJSQVlfU0laRShkZWZhdWx0X3RvcG9sb2d5KSArIGxldmVsKSAqCisJLyogQ29tcHV0ZSBkZWZhdWx0IHRvcG9sb2d5IHNpemUgKi8KKwlmb3IgKGkgPSAwOyBzY2hlZF9kb21haW5fdG9wb2xvZ3lbaV0ubWFzazsgaSsrKTsKKworCXRsID0ga3phbGxvYygoaSArIGxldmVsICsgMSkgKgogCQkJc2l6ZW9mKHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRsKQogCQlyZXR1cm47CkBAIC02MjE0LDE4ICs2MjYxLDE5IEBACiAJLyoKIAkgKiBDb3B5IHRoZSBkZWZhdWx0IHRvcG9sb2d5IGJpdHMuLgogCSAqLwotCWZvciAoaSA9IDA7IGRlZmF1bHRfdG9wb2xvZ3lbaV0uaW5pdDsgaSsrKQotCQl0bFtpXSA9IGRlZmF1bHRfdG9wb2xvZ3lbaV07CisJZm9yIChpID0gMDsgc2NoZWRfZG9tYWluX3RvcG9sb2d5W2ldLm1hc2s7IGkrKykKKwkJdGxbaV0gPSBzY2hlZF9kb21haW5fdG9wb2xvZ3lbaV07CiAKIAkvKgogCSAqIC4uIGFuZCBhcHBlbmQgJ2onIGxldmVscyBvZiBOVU1BIGdvb2RuZXNzLgogCSAqLwogCWZvciAoaiA9IDA7IGogPCBsZXZlbDsgaSsrLCBqKyspIHsKIAkJdGxbaV0gPSAoc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCl7Ci0JCQkuaW5pdCA9IHNkX251bWFfaW5pdCwKIAkJCS5tYXNrID0gc2RfbnVtYV9tYXNrLAorCQkJLnNkX2ZsYWdzID0gY3B1X251bWFfZmxhZ3MsCiAJCQkuZmxhZ3MgPSBTRFRMX09WRVJMQVAsCiAJCQkubnVtYV9sZXZlbCA9IGosCisJCQlTRF9JTklUX05BTUUoTlVNQSkKIAkJfTsKIAl9CiAKQEAgLTYzODMsNyArNjQzMSw3IEBACiAJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIsCiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkLCBpbnQgY3B1KQogewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gdGwtPmluaXQodGwsIGNwdSk7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBzZF9pbml0KHRsLCBjcHUpOwogCWlmICghc2QpCiAJCXJldHVybiBjaGlsZDsKIApAQCAtNjk1Myw2ICs3MDAxLDcgQEAKIAlpZiAoY3B1X2lzb2xhdGVkX21hcCA9PSBOVUxMKQogCQl6YWxsb2NfY3B1bWFza192YXIoJmNwdV9pc29sYXRlZF9tYXAsIEdGUF9OT1dBSVQpOwogCWlkbGVfdGhyZWFkX3NldF9ib290X2NwdSgpOworCXNldF9jcHVfcnFfc3RhcnRfdGltZSgpOwogI2VuZGlmCiAJaW5pdF9zY2hlZF9mYWlyX2NsYXNzKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVwcmkuYyBiL2tlcm5lbC9zY2hlZC9jcHVwcmkuYwppbmRleCA4ODM0MjQzLi45ODFmY2Q3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY3B1cHJpLmMKKysrIGIva2VybmVsL3NjaGVkL2NwdXByaS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJICogZG8gYSB3cml0ZSBtZW1vcnkgYmFycmllciwgYW5kIHRoZW4gdXBkYXRlIHRoZSBjb3VudCwgdG8KIAkJICogbWFrZSBzdXJlIHRoZSB2ZWN0b3IgaXMgdmlzaWJsZSB3aGVuIGNvdW50IGlzIHNldC4KIAkJICovCi0JCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCWF0b21pY19pbmMoJih2ZWMpLT5jb3VudCk7CiAJCWRvX21iID0gMTsKIAl9CkBAIC0xODUsMTQgKzE4NSwxNCBAQAogCQkgKiB0aGUgbmV3IHByaW9yaXR5IHZlYy4KIAkJICovCiAJCWlmIChkb19tYikKLQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCQkvKgogCQkgKiBXaGVuIHJlbW92aW5nIGZyb20gdGhlIHZlY3Rvciwgd2UgZGVjcmVtZW50IHRoZSBjb3VudGVyIGZpcnN0CiAJCSAqIGRvIGEgbWVtb3J5IGJhcnJpZXIgYW5kIHRoZW4gY2xlYXIgdGhlIG1hc2suCiAJCSAqLwogCQlhdG9taWNfZGVjKCYodmVjKS0+Y291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB2ZWMtPm1hc2spOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmMgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwppbmRleCA4MDBlOTliLi5mOWNhN2QxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYworKysgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJICogV2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgYSBwb3NzaWJsZSByYWNlcyBoZXJlLiBJbiBmYWN0LCB0aGUKIAkgKiB0YXNrIG1pZ2h0IGhhdmUgY2hhbmdlZCBpdHMgc2NoZWR1bGluZyBwb2xpY3kgdG8gc29tZXRoaW5nCiAJICogZGlmZmVyZW50IGZyb20gU0NIRURfREVBRExJTkUgb3IgY2hhbmdlZCBpdHMgcmVzZXJ2YXRpb24KLQkgKiBwYXJhbWV0ZXJzICh0aHJvdWdoIHNjaGVkX3NldHNjaGVkdWxlcigpKS4KKwkgKiBwYXJhbWV0ZXJzICh0aHJvdWdoIHNjaGVkX3NldGF0dHIoKSkuCiAJICovCiAJaWYgKCFkbF90YXNrKHApIHx8IGRsX3NlLT5kbF9uZXcpCiAJCWdvdG8gdW5sb2NrOwpAQCAtNzQxLDcgKzc0MSw3IEBACiAKIAlXQVJOX09OKCFkbF9wcmlvKHByaW8pKTsKIAlkbF9ycS0+ZGxfbnJfcnVubmluZysrOwotCWluY19ucl9ydW5uaW5nKHJxX29mX2RsX3JxKGRsX3JxKSk7CisJYWRkX25yX3J1bm5pbmcocnFfb2ZfZGxfcnEoZGxfcnEpLCAxKTsKIAogCWluY19kbF9kZWFkbGluZShkbF9ycSwgZGVhZGxpbmUpOwogCWluY19kbF9taWdyYXRpb24oZGxfc2UsIGRsX3JxKTsKQEAgLTc1NSw3ICs3NTUsNyBAQAogCVdBUk5fT04oIWRsX3ByaW8ocHJpbykpOwogCVdBUk5fT04oIWRsX3JxLT5kbF9ucl9ydW5uaW5nKTsKIAlkbF9ycS0+ZGxfbnJfcnVubmluZy0tOwotCWRlY19ucl9ydW5uaW5nKHJxX29mX2RsX3JxKGRsX3JxKSk7CisJc3ViX25yX3J1bm5pbmcocnFfb2ZfZGxfcnEoZGxfcnEpLCAxKTsKIAogCWRlY19kbF9kZWFkbGluZShkbF9ycSwgZGxfc2UtPmRlYWRsaW5lKTsKIAlkZWNfZGxfbWlncmF0aW9uKGRsX3NlLCBkbF9ycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCAwZmRiOTZkLi5jOTYxN2I3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTEwOTUsNiArMTA5NSwzNCBAQAogCWVudi0+YmVzdF9jcHUgPSBlbnYtPmRzdF9jcHU7CiB9CiAKK3N0YXRpYyBib29sIGxvYWRfdG9vX2ltYmFsYW5jZWQobG9uZyBvcmlnX3NyY19sb2FkLCBsb25nIG9yaWdfZHN0X2xvYWQsCisJCQkJbG9uZyBzcmNfbG9hZCwgbG9uZyBkc3RfbG9hZCwKKwkJCQlzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52KQoreworCWxvbmcgaW1iLCBvbGRfaW1iOworCisJLyogV2UgY2FyZSBhYm91dCB0aGUgc2xvcGUgb2YgdGhlIGltYmFsYW5jZSwgbm90IHRoZSBkaXJlY3Rpb24uICovCisJaWYgKGRzdF9sb2FkIDwgc3JjX2xvYWQpCisJCXN3YXAoZHN0X2xvYWQsIHNyY19sb2FkKTsKKworCS8qIElzIHRoZSBkaWZmZXJlbmNlIGJlbG93IHRoZSB0aHJlc2hvbGQ/ICovCisJaW1iID0gZHN0X2xvYWQgKiAxMDAgLSBzcmNfbG9hZCAqIGVudi0+aW1iYWxhbmNlX3BjdDsKKwlpZiAoaW1iIDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogVGhlIGltYmFsYW5jZSBpcyBhYm92ZSB0aGUgYWxsb3dlZCB0aHJlc2hvbGQuCisJICogQ29tcGFyZSBpdCB3aXRoIHRoZSBvbGQgaW1iYWxhbmNlLgorCSAqLworCWlmIChvcmlnX2RzdF9sb2FkIDwgb3JpZ19zcmNfbG9hZCkKKwkJc3dhcChvcmlnX2RzdF9sb2FkLCBvcmlnX3NyY19sb2FkKTsKKworCW9sZF9pbWIgPSBvcmlnX2RzdF9sb2FkICogMTAwIC0gb3JpZ19zcmNfbG9hZCAqIGVudi0+aW1iYWxhbmNlX3BjdDsKKworCS8qIFdvdWxkIHRoaXMgY2hhbmdlIG1ha2UgdGhpbmdzIHdvcnNlPyAqLworCXJldHVybiAob2xkX2ltYiA+IGltYik7Cit9CisKIC8qCiAgKiBUaGlzIGNoZWNrcyBpZiB0aGUgb3ZlcmFsbCBjb21wdXRlIGFuZCBOVU1BIGFjY2Vzc2VzIG9mIHRoZSBzeXN0ZW0gd291bGQKICAqIGJlIGltcHJvdmVkIGlmIHRoZSBzb3VyY2UgdGFza3Mgd2FzIG1pZ3JhdGVkIHRvIHRoZSB0YXJnZXQgZHN0X2NwdSB0YWtpbmcKQEAgLTExMDcsNyArMTEzNSw4IEBACiAJc3RydWN0IHJxICpzcmNfcnEgPSBjcHVfcnEoZW52LT5zcmNfY3B1KTsKIAlzdHJ1Y3QgcnEgKmRzdF9ycSA9IGNwdV9ycShlbnYtPmRzdF9jcHUpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyOwotCWxvbmcgZHN0X2xvYWQsIHNyY19sb2FkOworCWxvbmcgb3JpZ19zcmNfbG9hZCwgc3JjX2xvYWQ7CisJbG9uZyBvcmlnX2RzdF9sb2FkLCBkc3RfbG9hZDsKIAlsb25nIGxvYWQ7CiAJbG9uZyBpbXAgPSAoZ3JvdXBpbXAgPiAwKSA/IGdyb3VwaW1wIDogdGFza2ltcDsKIApAQCAtMTE4MSwxMyArMTIxMCwxMyBAQAogCSAqIEluIHRoZSBvdmVybG9hZGVkIGNhc2UsIHRyeSBhbmQga2VlcCB0aGUgbG9hZCBiYWxhbmNlZC4KIAkgKi8KIGJhbGFuY2U6Ci0JZHN0X2xvYWQgPSBlbnYtPmRzdF9zdGF0cy5sb2FkOwotCXNyY19sb2FkID0gZW52LT5zcmNfc3RhdHMubG9hZDsKKwlvcmlnX2RzdF9sb2FkID0gZW52LT5kc3Rfc3RhdHMubG9hZDsKKwlvcmlnX3NyY19sb2FkID0gZW52LT5zcmNfc3RhdHMubG9hZDsKIAogCS8qIFhYWCBtaXNzaW5nIHBvd2VyIHRlcm1zICovCiAJbG9hZCA9IHRhc2tfaF9sb2FkKGVudi0+cCk7Ci0JZHN0X2xvYWQgKz0gbG9hZDsKLQlzcmNfbG9hZCAtPSBsb2FkOworCWRzdF9sb2FkID0gb3JpZ19kc3RfbG9hZCArIGxvYWQ7CisJc3JjX2xvYWQgPSBvcmlnX3NyY19sb2FkIC0gbG9hZDsKIAogCWlmIChjdXIpIHsKIAkJbG9hZCA9IHRhc2tfaF9sb2FkKGN1cik7CkBAIC0xMTk1LDExICsxMjI0LDggQEAKIAkJc3JjX2xvYWQgKz0gbG9hZDsKIAl9CiAKLQkvKiBtYWtlIHNyY19sb2FkIHRoZSBzbWFsbGVyICovCi0JaWYgKGRzdF9sb2FkIDwgc3JjX2xvYWQpCi0JCXN3YXAoZHN0X2xvYWQsIHNyY19sb2FkKTsKLQotCWlmIChzcmNfbG9hZCAqIGVudi0+aW1iYWxhbmNlX3BjdCA8IGRzdF9sb2FkICogMTAwKQorCWlmIChsb2FkX3Rvb19pbWJhbGFuY2VkKG9yaWdfc3JjX2xvYWQsIG9yaWdfZHN0X2xvYWQsCisJCQkJc3JjX2xvYWQsIGRzdF9sb2FkLCBlbnYpKQogCQlnb3RvIHVubG9jazsKIAogYXNzaWduOgpAQCAtMTMwMSw3ICsxMzI3LDE2IEBACiAJaWYgKGVudi5iZXN0X2NwdSA9PSAtMSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzY2hlZF9zZXRudW1hKHAsIGVudi5kc3RfbmlkKTsKKwkvKgorCSAqIElmIHRoZSB0YXNrIGlzIHBhcnQgb2YgYSB3b3JrbG9hZCB0aGF0IHNwYW5zIG11bHRpcGxlIE5VTUEgbm9kZXMsCisJICogYW5kIGlzIG1pZ3JhdGluZyBpbnRvIG9uZSBvZiB0aGUgd29ya2xvYWQncyBhY3RpdmUgbm9kZXMsIHJlbWVtYmVyCisJICogdGhpcyBub2RlIGFzIHRoZSB0YXNrJ3MgcHJlZmVycmVkIG51bWEgbm9kZSwgc28gdGhlIHdvcmtsb2FkIGNhbgorCSAqIHNldHRsZSBkb3duLgorCSAqIEEgdGFzayB0aGF0IG1pZ3JhdGVkIHRvIGEgc2Vjb25kIGNob2ljZSBub2RlIHdpbGwgYmUgYmV0dGVyIG9mZgorCSAqIHRyeWluZyBmb3IgYSBiZXR0ZXIgb25lIGxhdGVyLiBEbyBub3Qgc2V0IHRoZSBwcmVmZXJyZWQgbm9kZSBoZXJlLgorCSAqLworCWlmIChwLT5udW1hX2dyb3VwICYmIG5vZGVfaXNzZXQoZW52LmRzdF9uaWQsIHAtPm51bWFfZ3JvdXAtPmFjdGl2ZV9ub2RlcykpCisJCXNjaGVkX3NldG51bWEocCwgZW52LmRzdF9uaWQpOwogCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBwZXJpb2QgaWYgdGhlIHRhc2sgaXMgYmVpbmcgcmVzY2hlZHVsZWQgb24gYW4KQEAgLTEzMjYsMTIgKzEzNjEsMTUgQEAKIC8qIEF0dGVtcHQgdG8gbWlncmF0ZSBhIHRhc2sgdG8gYSBDUFUgb24gdGhlIHByZWZlcnJlZCBub2RlLiAqLwogc3RhdGljIHZvaWQgbnVtYV9taWdyYXRlX3ByZWZlcnJlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbCA9IEhaOworCiAJLyogVGhpcyB0YXNrIGhhcyBubyBOVU1BIGZhdWx0IHN0YXRpc3RpY3MgeWV0ICovCiAJaWYgKHVubGlrZWx5KHAtPm51bWFfcHJlZmVycmVkX25pZCA9PSAtMSB8fCAhcC0+bnVtYV9mYXVsdHNfbWVtb3J5KSkKIAkJcmV0dXJuOwogCiAJLyogUGVyaW9kaWNhbGx5IHJldHJ5IG1pZ3JhdGluZyB0aGUgdGFzayB0byB0aGUgcHJlZmVycmVkIG5vZGUgKi8KLQlwLT5udW1hX21pZ3JhdGVfcmV0cnkgPSBqaWZmaWVzICsgSFo7CisJaW50ZXJ2YWwgPSBtaW4oaW50ZXJ2YWwsIG1zZWNzX3RvX2ppZmZpZXMocC0+bnVtYV9zY2FuX3BlcmlvZCkgLyAxNik7CisJcC0+bnVtYV9taWdyYXRlX3JldHJ5ID0gamlmZmllcyArIGludGVydmFsOwogCiAJLyogU3VjY2VzcyBpZiB0YXNrIGlzIGFscmVhZHkgcnVubmluZyBvbiBwcmVmZXJyZWQgQ1BVICovCiAJaWYgKHRhc2tfbm9kZShwKSA9PSBwLT5udW1hX3ByZWZlcnJlZF9uaWQpCkBAIC0xNzM4LDYgKzE3NzYsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQ7CiAJYm9vbCBtaWdyYXRlZCA9IGZsYWdzICYgVE5GX01JR1JBVEVEOwogCWludCBjcHVfbm9kZSA9IHRhc2tfbm9kZShjdXJyZW50KTsKKwlpbnQgbG9jYWwgPSAhIShmbGFncyAmIFRORl9GQVVMVF9MT0NBTCk7CiAJaW50IHByaXY7CiAKIAlpZiAoIW51bWFiYWxhbmNpbmdfZW5hYmxlZCkKQEAgLTE3ODYsNiArMTgyNSwxNyBAQAogCQkJdGFza19udW1hX2dyb3VwKHAsIGxhc3RfY3B1cGlkLCBmbGFncywgJnByaXYpOwogCX0KIAorCS8qCisJICogSWYgYSB3b3JrbG9hZCBzcGFucyBtdWx0aXBsZSBOVU1BIG5vZGVzLCBhIHNoYXJlZCBmYXVsdCB0aGF0CisJICogb2NjdXJzIHdob2xseSB3aXRoaW4gdGhlIHNldCBvZiBub2RlcyB0aGF0IHRoZSB3b3JrbG9hZCBpcworCSAqIGFjdGl2ZWx5IHVzaW5nIHNob3VsZCBiZSBjb3VudGVkIGFzIGxvY2FsLiBUaGlzIGFsbG93cyB0aGUKKwkgKiBzY2FuIHJhdGUgdG8gc2xvdyBkb3duIHdoZW4gYSB3b3JrbG9hZCBoYXMgc2V0dGxlZCBkb3duLgorCSAqLworCWlmICghcHJpdiAmJiAhbG9jYWwgJiYgcC0+bnVtYV9ncm91cCAmJgorCQkJbm9kZV9pc3NldChjcHVfbm9kZSwgcC0+bnVtYV9ncm91cC0+YWN0aXZlX25vZGVzKSAmJgorCQkJbm9kZV9pc3NldChtZW1fbm9kZSwgcC0+bnVtYV9ncm91cC0+YWN0aXZlX25vZGVzKSkKKwkJbG9jYWwgPSAxOworCiAJdGFza19udW1hX3BsYWNlbWVudChwKTsKIAogCS8qCkBAIC0xODAwLDcgKzE4NTAsNyBAQAogCiAJcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeVt0YXNrX2ZhdWx0c19pZHgobWVtX25vZGUsIHByaXYpXSArPSBwYWdlczsKIAlwLT5udW1hX2ZhdWx0c19idWZmZXJfY3B1W3Rhc2tfZmF1bHRzX2lkeChjcHVfbm9kZSwgcHJpdildICs9IHBhZ2VzOwotCXAtPm51bWFfZmF1bHRzX2xvY2FsaXR5WyEhKGZsYWdzICYgVE5GX0ZBVUxUX0xPQ0FMKV0gKz0gcGFnZXM7CisJcC0+bnVtYV9mYXVsdHNfbG9jYWxpdHlbbG9jYWxdICs9IHBhZ2VzOwogfQogCiBzdGF0aWMgdm9pZCByZXNldF9wdGVudW1hX3NjYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMzMwMSw3ICszMzUxLDcgQEAKIAl9CiAKIAlpZiAoIXNlKQotCQlycS0+bnJfcnVubmluZyAtPSB0YXNrX2RlbHRhOworCQlzdWJfbnJfcnVubmluZyhycSwgdGFza19kZWx0YSk7CiAKIAljZnNfcnEtPnRocm90dGxlZCA9IDE7CiAJY2ZzX3JxLT50aHJvdHRsZWRfY2xvY2sgPSBycV9jbG9jayhycSk7CkBAIC0zMzUyLDcgKzM0MDIsNyBAQAogCX0KIAogCWlmICghc2UpCi0JCXJxLT5ucl9ydW5uaW5nICs9IHRhc2tfZGVsdGE7CisJCWFkZF9ucl9ydW5uaW5nKHJxLCB0YXNrX2RlbHRhKTsKIAogCS8qIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gd2FrZSB1cCBwb3RlbnRpYWxseSBpZGxlIGNwdSAqLwogCWlmIChycS0+Y3VyciA9PSBycS0+aWRsZSAmJiBycS0+Y2ZzLm5yX3J1bm5pbmcpCkBAIC0zODg0LDcgKzM5MzQsNyBAQAogCiAJaWYgKCFzZSkgewogCQl1cGRhdGVfcnFfcnVubmFibGVfYXZnKHJxLCBycS0+bnJfcnVubmluZyk7Ci0JCWluY19ucl9ydW5uaW5nKHJxKTsKKwkJYWRkX25yX3J1bm5pbmcocnEsIDEpOwogCX0KIAlocnRpY2tfdXBkYXRlKHJxKTsKIH0KQEAgLTM5NDQsNyArMzk5NCw3IEBACiAJfQogCiAJaWYgKCFzZSkgewotCQlkZWNfbnJfcnVubmluZyhycSk7CisJCXN1Yl9ucl9ydW5uaW5nKHJxLCAxKTsKIAkJdXBkYXRlX3JxX3J1bm5hYmxlX2F2ZyhycSwgMSk7CiAJfQogCWhydGlja191cGRhdGUocnEpOwpAQCAtNDAxNSw3ICs0MDY1LDcgQEAKIAkgKiBhYm91dCB0aGUgbG9zcy4KIAkgKi8KIAlpZiAoamlmZmllcyA+IGN1cnJlbnQtPndha2VlX2ZsaXBfZGVjYXlfdHMgKyBIWikgewotCQljdXJyZW50LT53YWtlZV9mbGlwcyA9IDA7CisJCWN1cnJlbnQtPndha2VlX2ZsaXBzID4+PSAxOwogCQljdXJyZW50LT53YWtlZV9mbGlwX2RlY2F5X3RzID0gamlmZmllczsKIAl9CiAKQEAgLTQ0NDksMTAgKzQ0OTksMTAgQEAKIAkJCXNkID0gdG1wOwogCX0KIAotCWlmIChhZmZpbmVfc2QpIHsKLQkJaWYgKGNwdSAhPSBwcmV2X2NwdSAmJiB3YWtlX2FmZmluZShhZmZpbmVfc2QsIHAsIHN5bmMpKQotCQkJcHJldl9jcHUgPSBjcHU7CisJaWYgKGFmZmluZV9zZCAmJiBjcHUgIT0gcHJldl9jcHUgJiYgd2FrZV9hZmZpbmUoYWZmaW5lX3NkLCBwLCBzeW5jKSkKKwkJcHJldl9jcHUgPSBjcHU7CiAKKwlpZiAoc2RfZmxhZyAmIFNEX0JBTEFOQ0VfV0FLRSkgewogCQluZXdfY3B1ID0gc2VsZWN0X2lkbGVfc2libGluZyhwLCBwcmV2X2NwdSk7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTQ1MjAsNiArNDU3MCw5IEBACiAJCWF0b21pY19sb25nX2FkZChzZS0+YXZnLmxvYWRfYXZnX2NvbnRyaWIsCiAJCQkJCQkmY2ZzX3JxLT5yZW1vdmVkX2xvYWQpOwogCX0KKworCS8qIFdlIGhhdmUgbWlncmF0ZWQsIG5vIGxvbmdlciBjb25zaWRlciB0aGlzIHRhc2sgaG90ICovCisJc2UtPmV4ZWNfc3RhcnQgPSAwOwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApAQCAtNTA3MCw2ICs1MTIzLDcgQEAKIC8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGVzdGluYXRpb24gbm9kZSBoYXMgaW5jdXJyZWQgbW9yZSBmYXVsdHMgKi8KIHN0YXRpYyBib29sIG1pZ3JhdGVfaW1wcm92ZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpCiB7CisJc3RydWN0IG51bWFfZ3JvdXAgKm51bWFfZ3JvdXAgPSByY3VfZGVyZWZlcmVuY2UocC0+bnVtYV9ncm91cCk7CiAJaW50IHNyY19uaWQsIGRzdF9uaWQ7CiAKIAlpZiAoIXNjaGVkX2ZlYXQoTlVNQV9GQVZPVVJfSElHSEVSKSB8fCAhcC0+bnVtYV9mYXVsdHNfbWVtb3J5IHx8CkBAIC01MDgzLDIxICs1MTM3LDI5IEBACiAJaWYgKHNyY19uaWQgPT0gZHN0X25pZCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogQWx3YXlzIGVuY291cmFnZSBtaWdyYXRpb24gdG8gdGhlIHByZWZlcnJlZCBub2RlLiAqLworCWlmIChudW1hX2dyb3VwKSB7CisJCS8qIFRhc2sgaXMgYWxyZWFkeSBpbiB0aGUgZ3JvdXAncyBpbnRlcmxlYXZlIHNldC4gKi8KKwkJaWYgKG5vZGVfaXNzZXQoc3JjX25pZCwgbnVtYV9ncm91cC0+YWN0aXZlX25vZGVzKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKiBUYXNrIGlzIG1vdmluZyBpbnRvIHRoZSBncm91cCdzIGludGVybGVhdmUgc2V0LiAqLworCQlpZiAobm9kZV9pc3NldChkc3RfbmlkLCBudW1hX2dyb3VwLT5hY3RpdmVfbm9kZXMpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJcmV0dXJuIGdyb3VwX2ZhdWx0cyhwLCBkc3RfbmlkKSA+IGdyb3VwX2ZhdWx0cyhwLCBzcmNfbmlkKTsKKwl9CisKKwkvKiBFbmNvdXJhZ2UgbWlncmF0aW9uIHRvIHRoZSBwcmVmZXJyZWQgbm9kZS4gKi8KIAlpZiAoZHN0X25pZCA9PSBwLT5udW1hX3ByZWZlcnJlZF9uaWQpCiAJCXJldHVybiB0cnVlOwogCi0JLyogSWYgYm90aCB0YXNrIGFuZCBncm91cCB3ZWlnaHQgaW1wcm92ZSwgdGhpcyBtb3ZlIGlzIGEgd2lubmVyLiAqLwotCWlmICh0YXNrX3dlaWdodChwLCBkc3RfbmlkKSA+IHRhc2tfd2VpZ2h0KHAsIHNyY19uaWQpICYmCi0JICAgIGdyb3VwX3dlaWdodChwLCBkc3RfbmlkKSA+IGdyb3VwX3dlaWdodChwLCBzcmNfbmlkKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRhc2tfZmF1bHRzKHAsIGRzdF9uaWQpID4gdGFza19mYXVsdHMocCwgc3JjX25pZCk7CiB9CiAKIAogc3RhdGljIGJvb2wgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIHsKKwlzdHJ1Y3QgbnVtYV9ncm91cCAqbnVtYV9ncm91cCA9IHJjdV9kZXJlZmVyZW5jZShwLT5udW1hX2dyb3VwKTsKIAlpbnQgc3JjX25pZCwgZHN0X25pZDsKIAogCWlmICghc2NoZWRfZmVhdChOVU1BKSB8fCAhc2NoZWRfZmVhdChOVU1BX1JFU0lTVF9MT1dFUikpCkBAIC01MTEyLDE2ICs1MTc0LDIzIEBACiAJaWYgKHNyY19uaWQgPT0gZHN0X25pZCkKIAkJcmV0dXJuIGZhbHNlOwogCisJaWYgKG51bWFfZ3JvdXApIHsKKwkJLyogVGFzayBpcyBtb3Zpbmcgd2l0aGluL2ludG8gdGhlIGdyb3VwJ3MgaW50ZXJsZWF2ZSBzZXQuICovCisJCWlmIChub2RlX2lzc2V0KGRzdF9uaWQsIG51bWFfZ3JvdXAtPmFjdGl2ZV9ub2RlcykpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyogVGFzayBpcyBtb3Zpbmcgb3V0IG9mIHRoZSBncm91cCdzIGludGVybGVhdmUgc2V0LiAqLworCQlpZiAobm9kZV9pc3NldChzcmNfbmlkLCBudW1hX2dyb3VwLT5hY3RpdmVfbm9kZXMpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJcmV0dXJuIGdyb3VwX2ZhdWx0cyhwLCBkc3RfbmlkKSA8IGdyb3VwX2ZhdWx0cyhwLCBzcmNfbmlkKTsKKwl9CisKIAkvKiBNaWdyYXRpbmcgYXdheSBmcm9tIHRoZSBwcmVmZXJyZWQgbm9kZSBpcyBhbHdheXMgYmFkLiAqLwogCWlmIChzcmNfbmlkID09IHAtPm51bWFfcHJlZmVycmVkX25pZCkKIAkJcmV0dXJuIHRydWU7CiAKLQkvKiBJZiBlaXRoZXIgdGFzayBvciBncm91cCB3ZWlnaHQgZ2V0IHdvcnNlLCBkb24ndCBkbyBpdC4gKi8KLQlpZiAodGFza193ZWlnaHQocCwgZHN0X25pZCkgPCB0YXNrX3dlaWdodChwLCBzcmNfbmlkKSB8fAotCSAgICBncm91cF93ZWlnaHQocCwgZHN0X25pZCkgPCBncm91cF93ZWlnaHQocCwgc3JjX25pZCkpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiB0YXNrX2ZhdWx0cyhwLCBkc3RfbmlkKSA8IHRhc2tfZmF1bHRzKHAsIHNyY19uaWQpOwogfQogCiAjZWxzZQpAQCAtNTU2NCw2ICs1NjMzLDcgQEAKIHsKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAJdTY0IHRvdGFsLCBhdmFpbGFibGUsIGFnZV9zdGFtcCwgYXZnOworCXM2NCBkZWx0YTsKIAogCS8qCiAJICogU2luY2Ugd2UncmUgcmVhZGluZyB0aGVzZSB2YXJpYWJsZXMgd2l0aG91dCBzZXJpYWxpemF0aW9uIG1ha2Ugc3VyZQpAQCAtNTU3Miw3ICs1NjQyLDExIEBACiAJYWdlX3N0YW1wID0gQUNDRVNTX09OQ0UocnEtPmFnZV9zdGFtcCk7CiAJYXZnID0gQUNDRVNTX09OQ0UocnEtPnJ0X2F2Zyk7CiAKLQl0b3RhbCA9IHNjaGVkX2F2Z19wZXJpb2QoKSArIChycV9jbG9jayhycSkgLSBhZ2Vfc3RhbXApOworCWRlbHRhID0gcnFfY2xvY2socnEpIC0gYWdlX3N0YW1wOworCWlmICh1bmxpa2VseShkZWx0YSA8IDApKQorCQlkZWx0YSA9IDA7CisKKwl0b3RhbCA9IHNjaGVkX2F2Z19wZXJpb2QoKSArIGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHRvdGFsIDwgYXZnKSkgewogCQkvKiBFbnN1cmVzIHRoYXQgcG93ZXIgd29uJ3QgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlICovCkBAIC02NjQwLDE3ICs2NzE0LDQ0IEBACiAJcmV0dXJuIGxkX21vdmVkOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2dldF9zZF9iYWxhbmNlX2ludGVydmFsKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1X2J1c3kpCit7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbCA9IHNkLT5iYWxhbmNlX2ludGVydmFsOworCisJaWYgKGNwdV9idXN5KQorCQlpbnRlcnZhbCAqPSBzZC0+YnVzeV9mYWN0b3I7CisKKwkvKiBzY2FsZSBtcyB0byBqaWZmaWVzICovCisJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKKwlpbnRlcnZhbCA9IGNsYW1wKGludGVydmFsLCAxVUwsIG1heF9sb2FkX2JhbGFuY2VfaW50ZXJ2YWwpOworCisJcmV0dXJuIGludGVydmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3VwZGF0ZV9uZXh0X2JhbGFuY2Uoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHVfYnVzeSwgdW5zaWduZWQgbG9uZyAqbmV4dF9iYWxhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwsIG5leHQ7CisKKwlpbnRlcnZhbCA9IGdldF9zZF9iYWxhbmNlX2ludGVydmFsKHNkLCBjcHVfYnVzeSk7CisJbmV4dCA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKKworCWlmICh0aW1lX2FmdGVyKCpuZXh0X2JhbGFuY2UsIG5leHQpKQorCQkqbmV4dF9iYWxhbmNlID0gbmV4dDsKK30KKwogLyoKICAqIGlkbGVfYmFsYW5jZSBpcyBjYWxsZWQgYnkgc2NoZWR1bGUoKSBpZiB0aGlzX2NwdSBpcyBhYm91dCB0byBiZWNvbWUKICAqIGlkbGUuIEF0dGVtcHRzIHRvIHB1bGwgdGFza3MgZnJvbSBvdGhlciBDUFVzLgogICovCiBzdGF0aWMgaW50IGlkbGVfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEpCiB7CisJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7CisJaW50IHRoaXNfY3B1ID0gdGhpc19ycS0+Y3B1OwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCWludCBwdWxsZWRfdGFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7CiAJdTY0IGN1cnJfY29zdCA9IDA7Ci0JaW50IHRoaXNfY3B1ID0gdGhpc19ycS0+Y3B1OwogCiAJaWRsZV9lbnRlcl9mYWlyKHRoaXNfcnEpOwogCkBAIC02NjYwLDggKzY3NjEsMTUgQEAKIAkgKi8KIAl0aGlzX3JxLT5pZGxlX3N0YW1wID0gcnFfY2xvY2sodGhpc19ycSk7CiAKLQlpZiAodGhpc19ycS0+YXZnX2lkbGUgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpCisJaWYgKHRoaXNfcnEtPmF2Z19pZGxlIDwgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJc2QgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfc2NoZWRfZG9tYWluKHRoaXNfcnEtPnNkKTsKKwkJaWYgKHNkKQorCQkJdXBkYXRlX25leHRfYmFsYW5jZShzZCwgMCwgJm5leHRfYmFsYW5jZSk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogRHJvcCB0aGUgcnEtPmxvY2ssIGJ1dCBrZWVwIElSUS9wcmVlbXB0IGRpc2FibGVkLgpAQCAtNjY3MSwyMCArNjc3OSwyMCBAQAogCXVwZGF0ZV9ibG9ja2VkX2F2ZXJhZ2VzKHRoaXNfY3B1KTsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewotCQl1bnNpZ25lZCBsb25nIGludGVydmFsOwogCQlpbnQgY29udGludWVfYmFsYW5jaW5nID0gMTsKIAkJdTY0IHQwLCBkb21haW5fY29zdDsKIAogCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHRoaXNfcnEtPmF2Z19pZGxlIDwgY3Vycl9jb3N0ICsgc2QtPm1heF9uZXdpZGxlX2xiX2Nvc3QpCisJCWlmICh0aGlzX3JxLT5hdmdfaWRsZSA8IGN1cnJfY29zdCArIHNkLT5tYXhfbmV3aWRsZV9sYl9jb3N0KSB7CisJCQl1cGRhdGVfbmV4dF9iYWxhbmNlKHNkLCAwLCAmbmV4dF9iYWxhbmNlKTsKIAkJCWJyZWFrOworCQl9CiAKIAkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkgewogCQkJdDAgPSBzY2hlZF9jbG9ja19jcHUodGhpc19jcHUpOwogCi0JCQkvKiBJZiB3ZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzdG9wIHNlYXJjaGluZzogKi8KIAkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlKHRoaXNfY3B1LCB0aGlzX3JxLAogCQkJCQkJICAgc2QsIENQVV9ORVdMWV9JRExFLAogCQkJCQkJICAgJmNvbnRpbnVlX2JhbGFuY2luZyk7CkBAIC02Njk2LDEwICs2ODA0LDEzIEBACiAJCQljdXJyX2Nvc3QgKz0gZG9tYWluX2Nvc3Q7CiAJCX0KIAotCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoc2QtPmJhbGFuY2VfaW50ZXJ2YWwpOwotCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpCi0JCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWw7Ci0JCWlmIChwdWxsZWRfdGFzaykKKwkJdXBkYXRlX25leHRfYmFsYW5jZShzZCwgMCwgJm5leHRfYmFsYW5jZSk7CisKKwkJLyoKKwkJICogU3RvcCBzZWFyY2hpbmcgZm9yIHRhc2tzIHRvIHB1bGwgaWYgdGhlcmUgYXJlCisJCSAqIG5vdyBydW5uYWJsZSB0YXNrcyBvbiB0aGlzIHJxLgorCQkgKi8KKwkJaWYgKHB1bGxlZF90YXNrIHx8IHRoaXNfcnEtPm5yX3J1bm5pbmcgPiAwKQogCQkJYnJlYWs7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNjcxNywyMCArNjgyOCwxMyBAQAogCWlmICh0aGlzX3JxLT5jZnMuaF9ucl9ydW5uaW5nICYmICFwdWxsZWRfdGFzaykKIAkJcHVsbGVkX3Rhc2sgPSAxOwogCi0JaWYgKHB1bGxlZF90YXNrIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgdGhpc19ycS0+bmV4dF9iYWxhbmNlKSkgewotCQkvKgotCQkgKiBXZSBhcmUgZ29pbmcgaWRsZS4gbmV4dF9iYWxhbmNlIG1heSBiZSBzZXQgYmFzZWQgb24KLQkJICogYSBidXN5IHByb2Nlc3Nvci4gU28gcmVzZXQgbmV4dF9iYWxhbmNlLgotCQkgKi8KLQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwotCX0KLQogb3V0OgorCS8qIE1vdmUgdGhlIG5leHQgYmFsYW5jZSBmb3J3YXJkICovCisJaWYgKHRpbWVfYWZ0ZXIodGhpc19ycS0+bmV4dF9iYWxhbmNlLCBuZXh0X2JhbGFuY2UpKQorCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CisKIAkvKiBJcyB0aGVyZSBhIHRhc2sgb2YgYSBoaWdoIHByaW9yaXR5IGNsYXNzPyAqLwotCWlmICh0aGlzX3JxLT5ucl9ydW5uaW5nICE9IHRoaXNfcnEtPmNmcy5oX25yX3J1bm5pbmcgJiYKLQkgICAgKCh0aGlzX3JxLT5zdG9wICYmIHRoaXNfcnEtPnN0b3AtPm9uX3JxKSB8fAotCSAgICAgdGhpc19ycS0+ZGwuZGxfbnJfcnVubmluZyB8fAotCSAgICAgKHRoaXNfcnEtPnJ0LnJ0X25yX3J1bm5pbmcgJiYgIXJ0X3JxX3Rocm90dGxlZCgmdGhpc19ycS0+cnQpKSkpCisJaWYgKHRoaXNfcnEtPm5yX3J1bm5pbmcgIT0gdGhpc19ycS0+Y2ZzLmhfbnJfcnVubmluZykKIAkJcHVsbGVkX3Rhc2sgPSAtMTsKIAogCWlmIChwdWxsZWRfdGFzaykgewpAQCAtNzAxMSwxNiArNzExNSw5IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWludGVydmFsID0gc2QtPmJhbGFuY2VfaW50ZXJ2YWw7Ci0JCWlmIChpZGxlICE9IENQVV9JRExFKQotCQkJaW50ZXJ2YWwgKj0gc2QtPmJ1c3lfZmFjdG9yOwotCi0JCS8qIHNjYWxlIG1zIHRvIGppZmZpZXMgKi8KLQkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKLQkJaW50ZXJ2YWwgPSBjbGFtcChpbnRlcnZhbCwgMVVMLCBtYXhfbG9hZF9iYWxhbmNlX2ludGVydmFsKTsKKwkJaW50ZXJ2YWwgPSBnZXRfc2RfYmFsYW5jZV9pbnRlcnZhbChzZCwgaWRsZSAhPSBDUFVfSURMRSk7CiAKIAkJbmVlZF9zZXJpYWxpemUgPSBzZC0+ZmxhZ3MgJiBTRF9TRVJJQUxJWkU7Ci0KIAkJaWYgKG5lZWRfc2VyaWFsaXplKSB7CiAJCQlpZiAoIXNwaW5fdHJ5bG9jaygmYmFsYW5jaW5nKSkKIAkJCQlnb3RvIG91dDsKQEAgLTcwMzYsNiArNzEzMyw3IEBACiAJCQkJaWRsZSA9IGlkbGVfY3B1KGNwdSkgPyBDUFVfSURMRSA6IENQVV9OT1RfSURMRTsKIAkJCX0KIAkJCXNkLT5sYXN0X2JhbGFuY2UgPSBqaWZmaWVzOworCQkJaW50ZXJ2YWwgPSBnZXRfc2RfYmFsYW5jZV9pbnRlcnZhbChzZCwgaWRsZSAhPSBDUFVfSURMRSk7CiAJCX0KIAkJaWYgKG5lZWRfc2VyaWFsaXplKQogCQkJc3Bpbl91bmxvY2soJmJhbGFuY2luZyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvaWRsZS5jIGIva2VybmVsL3NjaGVkL2lkbGUuYwppbmRleCBhOGYxMjI0Li4yNWI5NDIzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvaWRsZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9pZGxlLmMKQEAgLTY3LDI0ICs2NywyMSBAQAogICogY3B1aWRsZV9pZGxlX2NhbGwgLSB0aGUgbWFpbiBpZGxlIGZ1bmN0aW9uCiAgKgogICogTk9URTogbm8gbG9ja3Mgb3Igc2VtYXBob3JlcyBzaG91bGQgYmUgdXNlZCBoZXJlCi0gKiByZXR1cm4gbm9uLXplcm8gb24gZmFpbHVyZQogICovCi1zdGF0aWMgaW50IGNwdWlkbGVfaWRsZV9jYWxsKHZvaWQpCitzdGF0aWMgdm9pZCBjcHVpZGxlX2lkbGVfY2FsbCh2b2lkKQogewogCXN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2ID0gX190aGlzX2NwdV9yZWFkKGNwdWlkbGVfZGV2aWNlcyk7CiAJc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYgPSBjcHVpZGxlX2dldF9jcHVfZHJpdmVyKGRldik7Ci0JaW50IG5leHRfc3RhdGUsIGVudGVyZWRfc3RhdGUsIHJldDsKKwlpbnQgbmV4dF9zdGF0ZSwgZW50ZXJlZF9zdGF0ZTsKIAlib29sIGJyb2FkY2FzdDsKIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIGlkbGUgdGFzayBtdXN0IGJlIHJlc2NoZWR1bGVkLiBJZiBpdCBpcyB0aGUKLQkgKiBjYXNlLCBleGl0IHRoZSBmdW5jdGlvbiBhZnRlciByZS1lbmFibGluZyB0aGUgbG9jYWwgaXJxIGFuZAotCSAqIHNldCBhZ2FpbiB0aGUgcG9sbGluZyBmbGFnCisJICogY2FzZSwgZXhpdCB0aGUgZnVuY3Rpb24gYWZ0ZXIgcmUtZW5hYmxpbmcgdGhlIGxvY2FsIGlycS4KIAkgKi8KLQlpZiAoY3VycmVudF9jbHJfcG9sbGluZ19hbmRfdGVzdCgpKSB7CisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJX19jdXJyZW50X3NldF9wb2xsaW5nKCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTEwMiw4OSArOTksNzggQEAKIAogCS8qCiAJICogQXNrIHRoZSBjcHVpZGxlIGZyYW1ld29yayB0byBjaG9vc2UgYSBjb252ZW5pZW50IGlkbGUgc3RhdGUuCi0JICogRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGFyY2ggc3BlY2lmaWMgaWRsZSBtZXRob2Qgb24gZXJyb3JzLgorCSAqIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBhcmNoIGlkbGUgbWV0aG9kIG9uIGVycm9ycy4KIAkgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9zZWxlY3QoZHJ2LCBkZXYpOwotCi0JcmV0ID0gbmV4dF9zdGF0ZTsKLQlpZiAocmV0ID49IDApIHsKKwlpZiAobmV4dF9zdGF0ZSA8IDApIHsKK3VzZV9kZWZhdWx0OgogCQkvKgotCQkgKiBUaGUgaWRsZSB0YXNrIG11c3QgYmUgc2NoZWR1bGVkLCBpdCBpcyBwb2ludGxlc3MgdG8KLQkJICogZ28gdG8gaWRsZSwganVzdCB1cGRhdGUgbm8gaWRsZSByZXNpZGVuY3kgYW5kIGdldAotCQkgKiBvdXQgb2YgdGhpcyBmdW5jdGlvbgorCQkgKiBXZSBjYW4ndCB1c2UgdGhlIGNwdWlkbGUgZnJhbWV3b3JrLCBsZXQncyB1c2UgdGhlIGRlZmF1bHQKKwkJICogaWRsZSByb3V0aW5lLgogCQkgKi8KLQkJaWYgKGN1cnJlbnRfY2xyX3BvbGxpbmdfYW5kX3Rlc3QoKSkgewotCQkJZGV2LT5sYXN0X3Jlc2lkZW5jeSA9IDA7Ci0JCQllbnRlcmVkX3N0YXRlID0gbmV4dF9zdGF0ZTsKKwkJaWYgKGN1cnJlbnRfY2xyX3BvbGxpbmdfYW5kX3Rlc3QoKSkKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJfSBlbHNlIHsKLQkJCWJyb2FkY2FzdCA9ICEhKGRydi0+c3RhdGVzW25leHRfc3RhdGVdLmZsYWdzICYKLQkJCQkgICAgICAgQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1ApOworCQllbHNlCisJCQlhcmNoX2NwdV9pZGxlKCk7CiAKLQkJCWlmIChicm9hZGNhc3QpCi0JCQkJLyoKLQkJCQkgKiBUZWxsIHRoZSB0aW1lIGZyYW1ld29yayB0byBzd2l0Y2gKLQkJCQkgKiB0byBhIGJyb2FkY2FzdCB0aW1lciBiZWNhdXNlIG91cgotCQkJCSAqIGxvY2FsIHRpbWVyIHdpbGwgYmUgc2h1dGRvd24uIElmIGEKLQkJCQkgKiBsb2NhbCB0aW1lciBpcyB1c2VkIGZyb20gYW5vdGhlcgotCQkJCSAqIGNwdSBhcyBhIGJyb2FkY2FzdCB0aW1lciwgdGhpcyBjYWxsCi0JCQkJICogbWF5IGZhaWwgaWYgaXQgaXMgbm90IGF2YWlsYWJsZQotCQkJCSAqLwotCQkJCXJldCA9IGNsb2NrZXZlbnRzX25vdGlmeSgKLQkJCQkJQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRU5URVIsCi0JCQkJCSZkZXYtPmNwdSk7Ci0KLQkJCWlmIChyZXQgPj0gMCkgewotCQkJCXRyYWNlX2NwdV9pZGxlX3JjdWlkbGUobmV4dF9zdGF0ZSwgZGV2LT5jcHUpOwotCi0JCQkJLyoKLQkJCQkgKiBFbnRlciB0aGUgaWRsZSBzdGF0ZSBwcmV2aW91c2x5Ci0JCQkJICogcmV0dXJuZWQgYnkgdGhlIGdvdmVybm9yCi0JCQkJICogZGVjaXNpb24uIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jawotCQkJCSAqIHVudGlsIGFuIGludGVycnVwdCBvY2N1cnMgYW5kIHdpbGwKLQkJCQkgKiB0YWtlIGNhcmUgb2YgcmUtZW5hYmxpbmcgdGhlIGxvY2FsCi0JCQkJICogaW50ZXJydXB0cwotCQkJCSAqLwotCQkJCWVudGVyZWRfc3RhdGUgPSBjcHVpZGxlX2VudGVyKGRydiwgZGV2LAotCQkJCQkJCSAgICAgIG5leHRfc3RhdGUpOwotCi0JCQkJdHJhY2VfY3B1X2lkbGVfcmN1aWRsZShQV1JfRVZFTlRfRVhJVCwKLQkJCQkJCSAgICAgICBkZXYtPmNwdSk7Ci0KLQkJCQlpZiAoYnJvYWRjYXN0KQotCQkJCQljbG9ja2V2ZW50c19ub3RpZnkoCi0JCQkJCQlDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FWElULAotCQkJCQkJJmRldi0+Y3B1KTsKLQotCQkJCS8qCi0JCQkJICogR2l2ZSB0aGUgZ292ZXJub3IgYW4gb3Bwb3J0dW5pdHkgdG8gcmVmbGVjdCBvbiB0aGUKLQkJCQkgKiBvdXRjb21lCi0JCQkJICovCi0JCQkJY3B1aWRsZV9yZWZsZWN0KGRldiwgZW50ZXJlZF9zdGF0ZSk7Ci0JCQl9Ci0JCX0KKwkJZ290byBleGl0X2lkbGU7CiAJfQogCi0JLyoKLQkgKiBXZSBjYW4ndCB1c2UgdGhlIGNwdWlkbGUgZnJhbWV3b3JrLCBsZXQncyB1c2UgdGhlIGRlZmF1bHQKLQkgKiBpZGxlIHJvdXRpbmUKLQkgKi8KLQlpZiAocmV0IDwgMCkKLQkJYXJjaF9jcHVfaWRsZSgpOwogCisJLyoKKwkgKiBUaGUgaWRsZSB0YXNrIG11c3QgYmUgc2NoZWR1bGVkLCBpdCBpcyBwb2ludGxlc3MgdG8KKwkgKiBnbyB0byBpZGxlLCBqdXN0IHVwZGF0ZSBubyBpZGxlIHJlc2lkZW5jeSBhbmQgZ2V0CisJICogb3V0IG9mIHRoaXMgZnVuY3Rpb24KKwkgKi8KKwlpZiAoY3VycmVudF9jbHJfcG9sbGluZ19hbmRfdGVzdCgpKSB7CisJCWRldi0+bGFzdF9yZXNpZGVuY3kgPSAwOworCQllbnRlcmVkX3N0YXRlID0gbmV4dF9zdGF0ZTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlnb3RvIGV4aXRfaWRsZTsKKwl9CisKKwlicm9hZGNhc3QgPSAhIShkcnYtPnN0YXRlc1tuZXh0X3N0YXRlXS5mbGFncyAmIENQVUlETEVfRkxBR19USU1FUl9TVE9QKTsKKworCS8qCisJICogVGVsbCB0aGUgdGltZSBmcmFtZXdvcmsgdG8gc3dpdGNoIHRvIGEgYnJvYWRjYXN0IHRpbWVyCisJICogYmVjYXVzZSBvdXIgbG9jYWwgdGltZXIgd2lsbCBiZSBzaHV0ZG93bi4gSWYgYSBsb2NhbCB0aW1lcgorCSAqIGlzIHVzZWQgZnJvbSBhbm90aGVyIGNwdSBhcyBhIGJyb2FkY2FzdCB0aW1lciwgdGhpcyBjYWxsIG1heQorCSAqIGZhaWwgaWYgaXQgaXMgbm90IGF2YWlsYWJsZQorCSAqLworCWlmIChicm9hZGNhc3QgJiYKKwkgICAgY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0VOVEVSLCAmZGV2LT5jcHUpKQorCQlnb3RvIHVzZV9kZWZhdWx0OworCisJdHJhY2VfY3B1X2lkbGVfcmN1aWRsZShuZXh0X3N0YXRlLCBkZXYtPmNwdSk7CisKKwkvKgorCSAqIEVudGVyIHRoZSBpZGxlIHN0YXRlIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgdGhlIGdvdmVybm9yIGRlY2lzaW9uLgorCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBhbiBpbnRlcnJ1cHQgb2NjdXJzIGFuZCB3aWxsIHRha2UKKwkgKiBjYXJlIG9mIHJlLWVuYWJsaW5nIHRoZSBsb2NhbCBpbnRlcnJ1cHRzCisJICovCisJZW50ZXJlZF9zdGF0ZSA9IGNwdWlkbGVfZW50ZXIoZHJ2LCBkZXYsIG5leHRfc3RhdGUpOworCisJdHJhY2VfY3B1X2lkbGVfcmN1aWRsZShQV1JfRVZFTlRfRVhJVCwgZGV2LT5jcHUpOworCisJaWYgKGJyb2FkY2FzdCkKKwkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0VYSVQsICZkZXYtPmNwdSk7CisKKwkvKgorCSAqIEdpdmUgdGhlIGdvdmVybm9yIGFuIG9wcG9ydHVuaXR5IHRvIHJlZmxlY3Qgb24gdGhlIG91dGNvbWUKKwkgKi8KKwljcHVpZGxlX3JlZmxlY3QoZGV2LCBlbnRlcmVkX3N0YXRlKTsKKworZXhpdF9pZGxlOgogCV9fY3VycmVudF9zZXRfcG9sbGluZygpOwogCiAJLyoKLQkgKiBJdCBpcyB1cCB0byB0aGUgaWRsZSBmdW5jdGlvbnMgdG8gZW5hYmxlIGJhY2sgdGhlIGxvY2FsCi0JICogaW50ZXJydXB0CisJICogSXQgaXMgdXAgdG8gdGhlIGlkbGUgZnVuY3Rpb25zIHRvIHJlZW5hYmxlIGxvY2FsIGludGVycnVwdHMKIAkgKi8KIAlpZiAoV0FSTl9PTl9PTkNFKGlycXNfZGlzYWJsZWQoKSkpCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCXJjdV9pZGxlX2V4aXQoKTsKIAlzdGFydF9jcml0aWNhbF90aW1pbmdzKCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9ydC5jIGIva2VybmVsL3NjaGVkL3J0LmMKaW5kZXggYmQyMjY3YS4uMGViZmQ3YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3J0LmMKKysrIGIva2VybmVsL3NjaGVkL3J0LmMKQEAgLTc5LDYgKzc5LDggQEAKIAlydF9ycS0+b3ZlcmxvYWRlZCA9IDA7CiAJcGxpc3RfaGVhZF9pbml0KCZydF9ycS0+cHVzaGFibGVfdGFza3MpOwogI2VuZGlmCisJLyogV2Ugc3RhcnQgaXMgZGVxdWV1ZWQgc3RhdGUsIGJlY2F1c2Ugbm8gUlQgdGFza3MgYXJlIHF1ZXVlZCAqLworCXJ0X3JxLT5ydF9xdWV1ZWQgPSAwOwogCiAJcnRfcnEtPnJ0X3RpbWUgPSAwOwogCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAwOwpAQCAtMTEyLDYgKzExNCwxMyBAQAogCXJldHVybiBydF9zZS0+cnRfcnE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gcnRfc2UtPnJ0X3JxOworCisJcmV0dXJuIHJ0X3JxLT5ycTsKK30KKwogdm9pZCBmcmVlX3J0X3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIHsKIAlpbnQgaTsKQEAgLTIxMSwxMCArMjIwLDE2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9ycSwgc3RydWN0IHJxLCBydCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBydF90YXNrX29mKHJ0X3NlKTsKLQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKworCXJldHVybiB0YXNrX3JxKHApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3NlKHJ0X3NlKTsKIAogCXJldHVybiAmcnEtPnJ0OwogfQpAQCAtMzkxLDYgKzQwNiw5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCitzdGF0aWMgdm9pZCBlbnF1ZXVlX3RvcF9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKTsKK3N0YXRpYyB2b2lkIGRlcXVldWVfdG9wX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpOworCiBzdGF0aWMgaW5saW5lIGludCBvbl9ydF9ycShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKIAlyZXR1cm4gIWxpc3RfZW1wdHkoJnJ0X3NlLT5ydW5fbGlzdCk7CkBAIC00NTIsOCArNDcwLDExIEBACiAJcnRfc2UgPSBydF9ycS0+dGctPnJ0X3NlW2NwdV07CiAKIAlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKLQkJaWYgKHJ0X3NlICYmICFvbl9ydF9ycShydF9zZSkpCisJCWlmICghcnRfc2UpCisJCQllbnF1ZXVlX3RvcF9ydF9ycShydF9ycSk7CisJCWVsc2UgaWYgKCFvbl9ydF9ycShydF9zZSkpCiAJCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgZmFsc2UpOworCiAJCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPCBjdXJyLT5wcmlvKQogCQkJcmVzY2hlZF90YXNrKGN1cnIpOwogCX0KQEAgLTQ2NiwxMCArNDg3LDE3IEBACiAKIAlydF9zZSA9IHJ0X3JxLT50Zy0+cnRfc2VbY3B1XTsKIAotCWlmIChydF9zZSAmJiBvbl9ydF9ycShydF9zZSkpCisJaWYgKCFydF9zZSkKKwkJZGVxdWV1ZV90b3BfcnRfcnEocnRfcnEpOworCWVsc2UgaWYgKG9uX3J0X3JxKHJ0X3NlKSkKIAkJZGVxdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBydF9ycV90aHJvdHRsZWQoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlyZXR1cm4gcnRfcnEtPnJ0X3Rocm90dGxlZCAmJiAhcnRfcnEtPnJ0X25yX2Jvb3N0ZWQ7Cit9CisKIHN0YXRpYyBpbnQgcnRfc2VfYm9vc3RlZChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gZ3JvdXBfcnRfcnEocnRfc2UpOwpAQCAtNTMyLDEyICs1NjAsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX3J0X3JxX2VucXVldWUoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpCi0JCXJlc2NoZWRfdGFzayhycV9vZl9ydF9ycShydF9ycSktPmN1cnIpOworCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7CisKKwlpZiAoIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKQorCQlyZXR1cm47CisKKwllbnF1ZXVlX3RvcF9ydF9ycShydF9ycSk7CisJcmVzY2hlZF90YXNrKHJxLT5jdXJyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX3J0X3JxX2RlcXVldWUoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKKwlkZXF1ZXVlX3RvcF9ydF9ycShydF9ycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ0X3JxX3Rocm90dGxlZChzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCXJldHVybiBydF9ycS0+cnRfdGhyb3R0bGVkOwogfQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpzY2hlZF9ydF9wZXJpb2RfbWFzayh2b2lkKQpAQCAtOTIyLDYgKzk2MSwzOCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQKK2RlcXVldWVfdG9wX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKworCUJVR19PTigmcnEtPnJ0ICE9IHJ0X3JxKTsKKworCWlmICghcnRfcnEtPnJ0X3F1ZXVlZCkKKwkJcmV0dXJuOworCisJQlVHX09OKCFycS0+bnJfcnVubmluZyk7CisKKwlzdWJfbnJfcnVubmluZyhycSwgcnRfcnEtPnJ0X25yX3J1bm5pbmcpOworCXJ0X3JxLT5ydF9xdWV1ZWQgPSAwOworfQorCitzdGF0aWMgdm9pZAorZW5xdWV1ZV90b3BfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCisJQlVHX09OKCZycS0+cnQgIT0gcnRfcnEpOworCisJaWYgKHJ0X3JxLT5ydF9xdWV1ZWQpCisJCXJldHVybjsKKwlpZiAocnRfcnFfdGhyb3R0bGVkKHJ0X3JxKSB8fCAhcnRfcnEtPnJ0X25yX3J1bm5pbmcpCisJCXJldHVybjsKKworCWFkZF9ucl9ydW5uaW5nKHJxLCBydF9ycS0+cnRfbnJfcnVubmluZyk7CisJcnRfcnEtPnJ0X3F1ZXVlZCA9IDE7Cit9CisKICNpZiBkZWZpbmVkIENPTkZJR19TTVAKIAogc3RhdGljIHZvaWQKQEAgLTEwNDUsMTIgKzExMTYsMjMgQEAKICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KIAogc3RhdGljIGlubGluZQordW5zaWduZWQgaW50IHJ0X3NlX25yX3J1bm5pbmcoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJc3RydWN0IHJ0X3JxICpncm91cF9ycSA9IGdyb3VwX3J0X3JxKHJ0X3NlKTsKKworCWlmIChncm91cF9ycSkKKwkJcmV0dXJuIGdyb3VwX3JxLT5ydF9ucl9ydW5uaW5nOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUKIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewogCWludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7CiAKIAlXQVJOX09OKCFydF9wcmlvKHByaW8pKTsKLQlydF9ycS0+cnRfbnJfcnVubmluZysrOworCXJ0X3JxLT5ydF9ucl9ydW5uaW5nICs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpOwogCiAJaW5jX3J0X3ByaW8ocnRfcnEsIHByaW8pOwogCWluY19ydF9taWdyYXRpb24ocnRfc2UsIHJ0X3JxKTsKQEAgLTEwNjIsNyArMTE0NCw3IEBACiB7CiAJV0FSTl9PTighcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpOwogCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKTsKLQlydF9ycS0+cnRfbnJfcnVubmluZy0tOworCXJ0X3JxLT5ydF9ucl9ydW5uaW5nIC09IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpOwogCiAJZGVjX3J0X3ByaW8ocnRfcnEsIHJ0X3NlX3ByaW8ocnRfc2UpKTsKIAlkZWNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CkBAIC0xMTE5LDYgKzEyMDEsOCBAQAogCQliYWNrID0gcnRfc2U7CiAJfQogCisJZGVxdWV1ZV90b3BfcnRfcnEocnRfcnFfb2Zfc2UoYmFjaykpOworCiAJZm9yIChydF9zZSA9IGJhY2s7IHJ0X3NlOyBydF9zZSA9IHJ0X3NlLT5iYWNrKSB7CiAJCWlmIChvbl9ydF9ycShydF9zZSkpCiAJCQlfX2RlcXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKQEAgLTExMjcsMTMgKzEyMTEsMTggQEAKIAogc3RhdGljIHZvaWQgZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIGJvb2wgaGVhZCkKIHsKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfc2UocnRfc2UpOworCiAJZGVxdWV1ZV9ydF9zdGFjayhydF9zZSk7CiAJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKQogCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBoZWFkKTsKKwllbnF1ZXVlX3RvcF9ydF9ycSgmcnEtPnJ0KTsKIH0KIAogc3RhdGljIHZvaWQgZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3NlKHJ0X3NlKTsKKwogCWRlcXVldWVfcnRfc3RhY2socnRfc2UpOwogCiAJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSB7CkBAIC0xMTQyLDYgKzEyMzEsNyBAQAogCQlpZiAocnRfcnEgJiYgcnRfcnEtPnJ0X25yX3J1bm5pbmcpCiAJCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBmYWxzZSk7CiAJfQorCWVucXVldWVfdG9wX3J0X3JxKCZycS0+cnQpOwogfQogCiAvKgpAQCAtMTE1OSw4ICsxMjQ5LDYgQEAKIAogCWlmICghdGFza19jdXJyZW50KHJxLCBwKSAmJiBwLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQogCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwotCi0JaW5jX25yX3J1bm5pbmcocnEpOwogfQogCiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rhc2tfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpCkBAIC0xMTcxLDggKzEyNTksNiBAQAogCWRlcXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAogCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7Ci0KLQlkZWNfbnJfcnVubmluZyhycSk7CiB9CiAKIC8qCkBAIC0xMzc3LDEwICsxNDYzLDcgQEAKIAlpZiAocHJldi0+c2NoZWRfY2xhc3MgPT0gJnJ0X3NjaGVkX2NsYXNzKQogCQl1cGRhdGVfY3Vycl9ydChycSk7CiAKLQlpZiAoIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChydF9ycV90aHJvdHRsZWQocnRfcnEpKQorCWlmICghcnRfcnEtPnJ0X3F1ZXVlZCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwdXRfcHJldl90YXNrKHJxLCBwcmV2KTsKQEAgLTE4OTIsOSArMTk3NSw5IEBACiAJICovCiAJaWYgKHAtPm9uX3JxICYmIHJxLT5jdXJyICE9IHApIHsKICNpZmRlZiBDT05GSUdfU01QCi0JCWlmIChycS0+cnQub3ZlcmxvYWRlZCAmJiBwdXNoX3J0X3Rhc2socnEpICYmCisJCWlmIChwLT5ucl9jcHVzX2FsbG93ZWQgPiAxICYmIHJxLT5ydC5vdmVybG9hZGVkICYmCiAJCSAgICAvKiBEb24ndCByZXNjaGVkIGlmIHdlIGNoYW5nZWQgcnVucXVldWVzICovCi0JCSAgICBycSAhPSB0YXNrX3JxKHApKQorCQkgICAgcHVzaF9ydF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQogCQkJY2hlY2tfcmVzY2hlZCA9IDA7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCQlpZiAoY2hlY2tfcmVzY2hlZCAmJiBwLT5wcmlvIDwgcnEtPmN1cnItPnByaW8pCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCmluZGV4IDQ1NmU0OTIuLjYwMGUyMjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oCisrKyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCkBAIC00MDksNiArNDA5LDggQEAKIAlpbnQgb3ZlcmxvYWRlZDsKIAlzdHJ1Y3QgcGxpc3RfaGVhZCBwdXNoYWJsZV90YXNrczsKICNlbmRpZgorCWludCBydF9xdWV1ZWQ7CisKIAlpbnQgcnRfdGhyb3R0bGVkOwogCXU2NCBydF90aW1lOwogCXU2NCBydF9ydW50aW1lOwpAQCAtNDIzLDE4ICs0MjUsNiBAQAogI2VuZGlmCiB9OwogCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi1zdGF0aWMgaW5saW5lIGludCBydF9ycV90aHJvdHRsZWQoc3RydWN0IHJ0X3JxICpydF9ycSkKLXsKLQlyZXR1cm4gcnRfcnEtPnJ0X3Rocm90dGxlZCAmJiAhcnRfcnEtPnJ0X25yX2Jvb3N0ZWQ7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgcnRfcnFfdGhyb3R0bGVkKHN0cnVjdCBydF9ycSAqcnRfcnEpCi17Ci0JcmV0dXJuIHJ0X3JxLT5ydF90aHJvdHRsZWQ7Ci19Ci0jZW5kaWYKLQogLyogRGVhZGxpbmUgY2xhc3MnIHJlbGF0ZWQgZmllbGRzIGluIGEgcnVucXVldWUgKi8KIHN0cnVjdCBkbF9ycSB7CiAJLyogcnVucXVldWUgaXMgYW4gcmJ0cmVlLCBvcmRlcmVkIGJ5IGRlYWRsaW5lICovCkBAIC0xMjE2LDEyICsxMjA2LDE0IEBACiAKIGV4dGVybiB2b2lkIGluaXRfdGFza19ydW5uYWJsZV9hdmVyYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbmNfbnJfcnVubmluZyhzdHJ1Y3QgcnEgKnJxKQorc3RhdGljIGlubGluZSB2b2lkIGFkZF9ucl9ydW5uaW5nKHN0cnVjdCBycSAqcnEsIHVuc2lnbmVkIGNvdW50KQogewotCXJxLT5ucl9ydW5uaW5nKys7CisJdW5zaWduZWQgcHJldl9uciA9IHJxLT5ucl9ydW5uaW5nOworCisJcnEtPm5yX3J1bm5pbmcgPSBwcmV2X25yICsgY291bnQ7CiAKICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTAotCWlmIChycS0+bnJfcnVubmluZyA9PSAyKSB7CisJaWYgKHByZXZfbnIgPCAyICYmIHJxLT5ucl9ydW5uaW5nID49IDIpIHsKIAkJaWYgKHRpY2tfbm9oel9mdWxsX2NwdShycS0+Y3B1KSkgewogCQkJLyogT3JkZXIgcnEtPm5yX3J1bm5pbmcgd3JpdGUgYWdhaW5zdCB0aGUgSVBJICovCiAJCQlzbXBfd21iKCk7CkBAIC0xMjMxLDkgKzEyMjMsOSBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfbnJfcnVubmluZyhzdHJ1Y3QgcnEgKnJxKQorc3RhdGljIGlubGluZSB2b2lkIHN1Yl9ucl9ydW5uaW5nKHN0cnVjdCBycSAqcnEsIHVuc2lnbmVkIGNvdW50KQogewotCXJxLT5ucl9ydW5uaW5nLS07CisJcnEtPm5yX3J1bm5pbmcgLT0gY291bnQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBycV9sYXN0X3RpY2tfcmVzZXQoc3RydWN0IHJxICpycSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zdG9wX3Rhc2suYyBiL2tlcm5lbC9zY2hlZC9zdG9wX3Rhc2suYwppbmRleCBkNmNlNjVkLi5iZmUwZWRhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc3RvcF90YXNrLmMKKysrIGIva2VybmVsL3NjaGVkL3N0b3BfdGFzay5jCkBAIC00MSwxMyArNDEsMTMgQEAKIHN0YXRpYyB2b2lkCiBlbnF1ZXVlX3Rhc2tfc3RvcChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncykKIHsKLQlpbmNfbnJfcnVubmluZyhycSk7CisJYWRkX25yX3J1bm5pbmcocnEsIDEpOwogfQogCiBzdGF0aWMgdm9pZAogZGVxdWV1ZV90YXNrX3N0b3Aoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpCiB7Ci0JZGVjX25yX3J1bm5pbmcocnEpOworCXN1Yl9ucl9ydW5uaW5nKHJxLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgeWllbGRfdGFza19zdG9wKHN0cnVjdCBycSAqcnEpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvd2FpdC5jIGIva2VybmVsL3NjaGVkL3dhaXQuYwppbmRleCA3ZDUwZjc5Li4wZmZhMjBhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvd2FpdC5jCisrKyBiL2tlcm5lbC9zY2hlZC93YWl0LmMKQEAgLTM5NCw3ICszOTQsNyBAQAogICoKICAqIEluIG9yZGVyIGZvciB0aGlzIHRvIGZ1bmN0aW9uIHByb3Blcmx5LCBhcyBpdCB1c2VzIHdhaXRxdWV1ZV9hY3RpdmUoKQogICogaW50ZXJuYWxseSwgc29tZSBraW5kIG9mIG1lbW9yeSBiYXJyaWVyIG11c3QgYmUgZG9uZSBwcmlvciB0byBjYWxsaW5nCi0gKiB0aGlzLiBUeXBpY2FsbHksIHRoaXMgd2lsbCBiZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpLCBidXQgaW4gc29tZQorICogdGhpcy4gVHlwaWNhbGx5LCB0aGlzIHdpbGwgYmUgc21wX21iX19hZnRlcl9hdG9taWMoKSwgYnV0IGluIHNvbWUKICAqIGNhc2VzIHdoZXJlIGJpdGZsYWdzIGFyZSBtYW5pcHVsYXRlZCBub24tYXRvbWljYWxseSB1bmRlciBhIGxvY2ssIG9uZQogICogbWF5IG5lZWQgdG8gdXNlIGEgbGVzcyByZWd1bGFyIGJhcnJpZXIsIHN1Y2ggZnMvaW5vZGUuYydzIHNtcF9tYigpLAogICogYmVjYXVzZSBzcGluX3VubG9jaygpIGRvZXMgbm90IGd1YXJhbnRlZSBhIG1lbW9yeSBiYXJyaWVyLgpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggOTJmMjRmNS4uNTkxOGQyMiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC0yMzIsNyArMjMyLDYgQEAKIAlib29sIGluX2hhcmRpcnE7CiAJX191MzIgcGVuZGluZzsKIAlpbnQgc29mdGlycV9iaXQ7Ci0JaW50IGNwdTsKIAogCS8qCiAJICogTWFzayBvdXQgUEZfTUVNQUxMT0MgcyBjdXJyZW50IHRhc2sgY29udGV4dCBpcyBib3Jyb3dlZCBmb3IgdGhlCkBAIC0yNDcsNyArMjQ2LDYgQEAKIAlfX2xvY2FsX2JoX2Rpc2FibGVfaXAoX1JFVF9JUF8sIFNPRlRJUlFfT0ZGU0VUKTsKIAlpbl9oYXJkaXJxID0gbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KCk7CiAKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiByZXN0YXJ0OgogCS8qIFJlc2V0IHRoZSBwZW5kaW5nIGJpdG1hc2sgYmVmb3JlIGVuYWJsaW5nIGlycXMgKi8KIAlzZXRfc29mdGlycV9wZW5kaW5nKDApOwpAQCAtMjc2LDExICsyNzQsMTEgQEAKIAkJCSAgICAgICBwcmV2X2NvdW50LCBwcmVlbXB0X2NvdW50KCkpOwogCQkJcHJlZW1wdF9jb3VudF9zZXQocHJldl9jb3VudCk7CiAJCX0KLQkJcmN1X2JoX3FzKGNwdSk7CiAJCWgrKzsKIAkJcGVuZGluZyA+Pj0gc29mdGlycV9iaXQ7CiAJfQogCisJcmN1X2JoX3FzKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCXBlbmRpbmcgPSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCBmYmEwZjI5Li42NmE3NTFlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJCWVsc2UKIAkJCQlwID0gY3VycmVudDsKIAkJCWlmIChwKSB7Ci0JCQkJbmljZXZhbCA9IDIwIC0gdGFza19uaWNlKHApOworCQkJCW5pY2V2YWwgPSBuaWNlX3RvX3JsaW1pdCh0YXNrX25pY2UocCkpOwogCQkJCWlmIChuaWNldmFsID4gcmV0dmFsKQogCQkJCQlyZXR2YWwgPSBuaWNldmFsOwogCQkJfQpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCQllbHNlCiAJCQkJcGdycCA9IHRhc2tfcGdycChjdXJyZW50KTsKIAkJCWRvX2VhY2hfcGlkX3RocmVhZChwZ3JwLCBQSURUWVBFX1BHSUQsIHApIHsKLQkJCQluaWNldmFsID0gMjAgLSB0YXNrX25pY2UocCk7CisJCQkJbmljZXZhbCA9IG5pY2VfdG9fcmxpbWl0KHRhc2tfbmljZShwKSk7CiAJCQkJaWYgKG5pY2V2YWwgPiByZXR2YWwpCiAJCQkJCXJldHZhbCA9IG5pY2V2YWw7CiAJCQl9IHdoaWxlX2VhY2hfcGlkX3RocmVhZChwZ3JwLCBQSURUWVBFX1BHSUQsIHApOwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAKIAkJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJCQlpZiAodWlkX2VxKHRhc2tfdWlkKHApLCB1aWQpKSB7Ci0JCQkJCW5pY2V2YWwgPSAyMCAtIHRhc2tfbmljZShwKTsKKwkJCQkJbmljZXZhbCA9IG5pY2VfdG9fcmxpbWl0KHRhc2tfbmljZShwKSk7CiAJCQkJCWlmIChuaWNldmFsID4gcmV0dmFsKQogCQkJCQkJcmV0dmFsID0gbmljZXZhbDsKIAkJCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggNzRmNWI1OC4uYmM5NjZhOCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtNjQzLDcgKzY0Myw3IEBACiAJCS5leHRyYTIJCT0gJm9uZSwKIAl9LAogI2VuZGlmCi0KKyNpZmRlZiBDT05GSUdfVUVWRU5UX0hFTFBFUgogCXsKIAkJLnByb2NuYW1lCT0gImhvdHBsdWciLAogCQkuZGF0YQkJPSAmdWV2ZW50X2hlbHBlciwKQEAgLTY1MSw3ICs2NTEsNyBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3N0cmluZywKIAl9LAotCisjZW5kaWYKICNpZmRlZiBDT05GSUdfQ0hSX0RFVl9TRwogCXsKIAkJLnByb2NuYW1lCT0gInNnLWJpZy1idWZmIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC90b3J0dXJlLmMgYi9rZXJuZWwvdG9ydHVyZS5jCmluZGV4IGFjYzlhZmMuLjQwYmI1MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90b3J0dXJlLmMKKysrIGIva2VybmVsL3RvcnR1cmUuYwpAQCAtMzM1LDEzICszMzUsOCBAQAogCXNodWZmbGVfaWRsZV9jcHUgPSBjcHVtYXNrX25leHQoc2h1ZmZsZV9pZGxlX2NwdSwgc2h1ZmZsZV90bXBfbWFzayk7CiAJaWYgKHNodWZmbGVfaWRsZV9jcHUgPj0gbnJfY3B1X2lkcykKIAkJc2h1ZmZsZV9pZGxlX2NwdSA9IC0xOwotCWlmIChzaHVmZmxlX2lkbGVfY3B1ICE9IC0xKSB7CisJZWxzZQogCQljcHVtYXNrX2NsZWFyX2NwdShzaHVmZmxlX2lkbGVfY3B1LCBzaHVmZmxlX3RtcF9tYXNrKTsKLQkJaWYgKGNwdW1hc2tfZW1wdHkoc2h1ZmZsZV90bXBfbWFzaykpIHsKLQkJCXB1dF9vbmxpbmVfY3B1cygpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQogCiAJbXV0ZXhfbG9jaygmc2h1ZmZsZV90YXNrX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0cCwgJnNodWZmbGVfdGFza19saXN0LCBzdF9sKQpAQCAtNTMzLDcgKzUyOCwxMSBAQAogCXdoaWxlIChBQ0NFU1NfT05DRShzdHV0dGVyX3BhdXNlX3Rlc3QpIHx8CiAJICAgICAgICh0b3J0dXJlX3J1bm5hYmxlICYmICFBQ0NFU1NfT05DRSgqdG9ydHVyZV9ydW5uYWJsZSkpKSB7CiAJCWlmIChzdHV0dGVyX3BhdXNlX3Rlc3QpCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CisJCQlpZiAoQUNDRVNTX09OQ0Uoc3R1dHRlcl9wYXVzZV90ZXN0KSA9PSAxKQorCQkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKKwkJCWVsc2UKKwkJCQl3aGlsZSAoQUNDRVNTX09OQ0Uoc3R1dHRlcl9wYXVzZV90ZXN0KSkKKwkJCQkJY29uZF9yZXNjaGVkKCk7CiAJCWVsc2UKIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShyb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSk7CiAJCXRvcnR1cmVfc2h1dGRvd25fYWJzb3JiKHRpdGxlKTsKQEAgLTU1MCw3ICs1NDksMTEgQEAKIAlWRVJCT1NFX1RPUk9VVF9TVFJJTkcoInRvcnR1cmVfc3R1dHRlciB0YXNrIHN0YXJ0ZWQiKTsKIAlkbyB7CiAJCWlmICghdG9ydHVyZV9tdXN0X3N0b3AoKSkgewotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHN0dXR0ZXIpOworCQkJaWYgKHN0dXR0ZXIgPiAxKSB7CisJCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHN0dXR0ZXIgLSAxKTsKKwkJCQlBQ0NFU1NfT05DRShzdHV0dGVyX3BhdXNlX3Rlc3QpID0gMjsKKwkJCX0KKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIAkJCUFDQ0VTU19PTkNFKHN0dXR0ZXJfcGF1c2VfdGVzdCkgPSAxOwogCQl9CiAJCWlmICghdG9ydHVyZV9tdXN0X3N0b3AoKSkKQEAgLTU5NiwyMSArNTk5LDI3IEBACiAgKiBUaGUgcnVubmFibGUgcGFyYW1ldGVyIHBvaW50cyB0byBhIGZsYWcgdGhhdCBjb250cm9scyB3aGV0aGVyIG9yIG5vdAogICogdGhlIHRlc3QgaXMgY3VycmVudGx5IHJ1bm5hYmxlLiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBmbGFnLCBwYXNzIGluIE5VTEwuCiAgKi8KLXZvaWQgX19pbml0IHRvcnR1cmVfaW5pdF9iZWdpbihjaGFyICp0dHlwZSwgYm9vbCB2LCBpbnQgKnJ1bm5hYmxlKQorYm9vbCB0b3J0dXJlX2luaXRfYmVnaW4oY2hhciAqdHR5cGUsIGJvb2wgdiwgaW50ICpydW5uYWJsZSkKIHsKIAltdXRleF9sb2NrKCZmdWxsc3RvcF9tdXRleCk7CisJaWYgKHRvcnR1cmVfdHlwZSAhPSBOVUxMKSB7CisJCXByX2FsZXJ0KCJ0b3J0dXJlX2luaXRfYmVnaW46IHJlZnVzaW5nICVzIGluaXQ6ICVzIHJ1bm5pbmciLAorCQkJIHR0eXBlLCB0b3J0dXJlX3R5cGUpOworCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAl0b3J0dXJlX3R5cGUgPSB0dHlwZTsKIAl2ZXJib3NlID0gdjsKIAl0b3J0dXJlX3J1bm5hYmxlID0gcnVubmFibGU7CiAJZnVsbHN0b3AgPSBGVUxMU1RPUF9ET05UU1RPUDsKLQorCXJldHVybiB0cnVlOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodG9ydHVyZV9pbml0X2JlZ2luKTsKIAogLyoKICAqIFRlbGwgdGhlIHRvcnR1cmUgbW9kdWxlIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuCiAgKi8KLXZvaWQgX19pbml0IHRvcnR1cmVfaW5pdF9lbmQodm9pZCkKK3ZvaWQgdG9ydHVyZV9pbml0X2VuZCh2b2lkKQogewogCW11dGV4X3VubG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmdG9ydHVyZV9zaHV0ZG93bl9uYik7CkBAIC02NDIsNiArNjUxLDkgQEAKIAl0b3J0dXJlX3NodWZmbGVfY2xlYW51cCgpOwogCXRvcnR1cmVfc3R1dHRlcl9jbGVhbnVwKCk7CiAJdG9ydHVyZV9vbm9mZl9jbGVhbnVwKCk7CisJbXV0ZXhfbG9jaygmZnVsbHN0b3BfbXV0ZXgpOworCXRvcnR1cmVfdHlwZSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CiAJcmV0dXJuIGZhbHNlOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodG9ydHVyZV9jbGVhbnVwKTsKQEAgLTY3NCw4ICs2ODYsMTAgQEAKICAqLwogdm9pZCB0b3J0dXJlX2t0aHJlYWRfc3RvcHBpbmcoY2hhciAqdGl0bGUpCiB7Ci0JaWYgKHZlcmJvc2UpCi0JCVZFUkJPU0VfVE9ST1VUX1NUUklORyh0aXRsZSk7CisJY2hhciBidWZbMTI4XTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJTdG9wcGluZyAlcyIsIHRpdGxlKTsKKwlWRVJCT1NFX1RPUk9VVF9TVFJJTkcoYnVmKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQl0b3J0dXJlX3NodXRkb3duX2Fic29yYih0aXRsZSk7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDhlZGM4NzEuLmE0YmFiNDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTEwMCwxMCArMTAwLDEwIEBACiAKIAkvKgogCSAqIFJlc2N1ZSB3b3JrZXJzIGFyZSB1c2VkIG9ubHkgb24gZW1lcmdlbmNpZXMgYW5kIHNoYXJlZCBieQotCSAqIGFsbCBjcHVzLiAgR2l2ZSAtMjAuCisJICogYWxsIGNwdXMuICBHaXZlIE1JTl9OSUNFLgogCSAqLwotCVJFU0NVRVJfTklDRV9MRVZFTAk9IC0yMCwKLQlISUdIUFJJX05JQ0VfTEVWRUwJPSAtMjAsCisJUkVTQ1VFUl9OSUNFX0xFVkVMCT0gTUlOX05JQ0UsCisJSElHSFBSSV9OSUNFX0xFVkVMCT0gTUlOX05JQ0UsCiAKIAlXUV9OQU1FX0xFTgkJPSAyNCwKIH07CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDgxOWFjNTEuLjk5YzhiZmUgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC01NzUsOCArNTc1LDggQEAKIAlib29sICJIaWdobWVtIGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBISUdITUVNCiAJaGVscAotCSAgVGhpcyBvcHRpb25zIGVuYWJsZXMgYWRkaXRpb24gZXJyb3IgY2hlY2tpbmcgZm9yIGhpZ2ggbWVtb3J5IHN5c3RlbXMuCi0JICBEaXNhYmxlIGZvciBwcm9kdWN0aW9uIHN5c3RlbXMuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGFkZGl0aW9uYWwgZXJyb3IgY2hlY2tpbmcgZm9yIGhpZ2ggbWVtb3J5CisJICBzeXN0ZW1zLiAgRGlzYWJsZSBmb3IgcHJvZHVjdGlvbiBzeXN0ZW1zLgogCiBjb25maWcgSEFWRV9ERUJVR19TVEFDS09WRVJGTE9XCiAJYm9vbApkaWZmIC0tZ2l0IGEvbGliL2RldnJlcy5jIGIvbGliL2RldnJlcy5jCmluZGV4IDJmMTZjMTMuLmY1NjJiZjYgMTAwNjQ0Ci0tLSBhL2xpYi9kZXZyZXMuYworKysgYi9saWIvZGV2cmVzLmMKQEAgLTE1NywxMiArMTU3LDEyIEBACiAgKglpZiAoIWJhc2UpCiAgKgkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogICovCi12b2lkIF9faW9tZW0gKmRldm1fcmVxdWVzdF9hbmRfaW9yZW1hcChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCit2b2lkIF9faW9tZW0gKmRldm1fcmVxdWVzdF9hbmRfaW9yZW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXZvaWQgX19pb21lbSAqZGVzdF9wdHI7CiAKLQlkZXN0X3B0ciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXZpY2UsIHJlcyk7CisJZGVzdF9wdHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwogCWlmIChJU19FUlIoZGVzdF9wdHIpKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTk0LDcgKzE5NCw3IEBACiAgKiBNYW5hZ2VkIGlvcG9ydF9tYXAoKS4gIE1hcCBpcyBhdXRvbWF0aWNhbGx5IHVubWFwcGVkIG9uIGRyaXZlcgogICogZGV0YWNoLgogICovCi12b2lkIF9faW9tZW0gKiBkZXZtX2lvcG9ydF9tYXAoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHBvcnQsCit2b2lkIF9faW9tZW0gKmRldm1faW9wb3J0X21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcG9ydCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJdm9pZCBfX2lvbWVtICoqcHRyLCAqYWRkcjsKQEAgLTI2NSw3ICsyNjUsNyBAQAogICogYmUgc2FmZWx5IGNhbGxlZCB3aXRob3V0IGNvbnRleHQgYW5kIGd1YXJhbnRlZWQgdG8gc3VjY2VkIG9uY2UKICAqIGFsbG9jYXRlZC4KICAqLwotdm9pZCBfX2lvbWVtICogY29uc3QgKiBwY2ltX2lvbWFwX3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQordm9pZCBfX2lvbWVtICogY29uc3QgKnBjaW1faW9tYXBfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaW1faW9tYXBfZGV2cmVzICpkciwgKm5ld19kcjsKIApAQCAtMjkwLDcgKzI5MCw3IEBACiAgKiBNYW5hZ2VkIHBjaV9pb21hcCgpLiAgTWFwIGlzIGF1dG9tYXRpY2FsbHkgdW5tYXBwZWQgb24gZHJpdmVyCiAgKiBkZXRhY2guCiAgKi8KLXZvaWQgX19pb21lbSAqIHBjaW1faW9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuKQordm9pZCBfX2lvbWVtICpwY2ltX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCB1bnNpZ25lZCBsb25nIG1heGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKip0Ymw7CiAKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggNGUzYmQ3MS4uOWViZjllMiAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTI5LDcgKzI5LDkgQEAKIAogCiB1NjQgdWV2ZW50X3NlcW51bTsKKyNpZmRlZiBDT05GSUdfVUVWRU5UX0hFTFBFUgogY2hhciB1ZXZlbnRfaGVscGVyW1VFVkVOVF9IRUxQRVJfUEFUSF9MRU5dID0gQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSDsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19ORVQKIHN0cnVjdCB1ZXZlbnRfc29jayB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMTA5LDYgKzExMSw3IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VRVZFTlRfSEVMUEVSCiBzdGF0aWMgaW50IGtvYmpfdXNlcm1vZGVfZmlsdGVyKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCWNvbnN0IHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyAqb3BzOwpAQCAtMTQ3LDYgKzE1MCw3IEBACiB7CiAJa2ZyZWUoaW5mby0+ZGF0YSk7CiB9CisjZW5kaWYKIAogLyoqCiAgKiBrb2JqZWN0X3VldmVudF9lbnYgLSBzZW5kIGFuIHVldmVudCB3aXRoIGVudmlyb25tZW50YWwgZGF0YQpAQCAtMzIzLDYgKzMyNyw3IEBACiAjZW5kaWYKIAltdXRleF91bmxvY2soJnVldmVudF9zb2NrX211dGV4KTsKIAorI2lmZGVmIENPTkZJR19VRVZFTlRfSEVMUEVSCiAJLyogY2FsbCB1ZXZlbnRfaGVscGVyLCB1c3VhbGx5IG9ubHkgZW5hYmxlZCBkdXJpbmcgZWFybHkgYm9vdCAqLwogCWlmICh1ZXZlbnRfaGVscGVyWzBdICYmICFrb2JqX3VzZXJtb2RlX2ZpbHRlcihrb2JqKSkgewogCQlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvOwpAQCAtMzQ3LDYgKzM1Miw3IEBACiAJCQllbnYgPSBOVUxMOwkvKiBmcmVlZCBieSBjbGVhbnVwX3VldmVudF9lbnYgKi8KIAkJfQogCX0KKyNlbmRpZgogCiBleGl0OgogCWtmcmVlKGRldnBhdGgpOwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMWI1YTk1Zi4uMjhjZWM1MSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0xMzQsNiArMTM0LDkgQEAKIGNvbmZpZyBIQVZFX01FTUJMT0NLX05PREVfTUFQCiAJYm9vbGVhbgogCitjb25maWcgSEFWRV9NRU1CTE9DS19QSFlTX01BUAorCWJvb2xlYW4KKwogY29uZmlnIEFSQ0hfRElTQ0FSRF9NRU1CTE9DSwogCWJvb2xlYW4KIApkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBiNDg0NDUyLi4wMTczOTQwIDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtMzAsNyArMzAsNiBAQAogCiBvYmotJChDT05GSUdfSEFWRV9NRU1CTE9DSykgKz0gbWVtYmxvY2subwogCi1vYmotJChDT05GSUdfQk9VTkNFKQkrPSBib3VuY2Uubwogb2JqLSQoQ09ORklHX1NXQVApCSs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUubwogb2JqLSQoQ09ORklHX0ZST05UU1dBUCkJKz0gZnJvbnRzd2FwLm8KIG9iai0kKENPTkZJR19aU1dBUCkJKz0genN3YXAubwpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggMDlkOTU5MS4uMTcwNmNiYiAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC01NTcsNyArNTU3LDcgQEAKIAliaXQgPSBzeW5jID8gQkRJX3N5bmNfY29uZ2VzdGVkIDogQkRJX2FzeW5jX2Nvbmdlc3RlZDsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgJmJkaS0+c3RhdGUpKQogCQlhdG9taWNfZGVjKCZucl9iZGlfY29uZ2VzdGVkW3N5bmNdKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUod3FoKSkKIAkJd2FrZV91cCh3cWgpOwogfQpkaWZmIC0tZ2l0IGEvbW0vZG1hcG9vbC5jIGIvbW0vZG1hcG9vbC5jCmluZGV4IGM2OTc4MWUuLjgwNThmY2QgMTAwNjQ0Ci0tLSBhL21tL2RtYXBvb2wuYworKysgYi9tbS9kbWFwb29sLmMKQEAgLTM0MSwxMCArMzQxLDEwIEBACiAJCQkJY29udGludWU7CiAJCQlpZiAocG9vbC0+ZGV2KQogCQkJCWRldl9lcnIocG9vbC0+ZGV2LAotCQkJCQkiZG1hX3Bvb2xfYWxsb2MgJXMsICVwIChjb3JydXBlZClcbiIsCisJCQkJCSJkbWFfcG9vbF9hbGxvYyAlcywgJXAgKGNvcnJ1cHRlZClcbiIsCiAJCQkJCXBvb2wtPm5hbWUsIHJldHZhbCk7CiAJCQllbHNlCi0JCQkJcHJfZXJyKCJkbWFfcG9vbF9hbGxvYyAlcywgJXAgKGNvcnJ1cGVkKVxuIiwKKwkJCQlwcl9lcnIoImRtYV9wb29sX2FsbG9jICVzLCAlcCAoY29ycnVwdGVkKVxuIiwKIAkJCQkJcG9vbC0+bmFtZSwgcmV0dmFsKTsKIAogCQkJLyoKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAwODgzNThjLi4wMjEwNTZjIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC03NDIsNyArNzQyLDcgQEAKIHsKIAlWTV9CVUdfT05fUEFHRSghUGFnZUxvY2tlZChwYWdlKSwgcGFnZSk7CiAJY2xlYXJfYml0X3VubG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXdha2VfdXBfcGFnZShwYWdlLCBQR19sb2NrZWQpOwogfQogRVhQT1JUX1NZTUJPTCh1bmxvY2tfcGFnZSk7CkBAIC03NTksNyArNzU5LDcgQEAKIAlpZiAoIXRlc3RfY2xlYXJfcGFnZV93cml0ZWJhY2socGFnZSkpCiAJCUJVRygpOwogCi0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXdha2VfdXBfcGFnZShwYWdlLCBQR193cml0ZWJhY2spOwogfQogRVhQT1JUX1NZTUJPTChlbmRfcGFnZV93cml0ZWJhY2spOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggYjRiMWZlYi4uZDE5OWQyZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNzQwLDcgKzI3NDAsNyBAQAogCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OwogCiAJc2V0X2ZyZWV6YWJsZSgpOwotCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOworCXNldF91c2VyX25pY2UoY3VycmVudCwgTUFYX05JQ0UpOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJa2h1Z2VwYWdlZF9kb19zY2FuKCk7CmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCBlOWQ2Y2E5Li5hODEwYmE5IDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCisrKyBiL21tL21lbWJsb2NrLmMKQEAgLTI3LDYgKzI3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gbWVtYmxvY2tfbWVtb3J5X2luaXRfcmVnaW9uc1tJTklUX01FTUJMT0NLX1JFR0lPTlNdIF9faW5pdGRhdGFfbWVtYmxvY2s7CiBzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiBtZW1ibG9ja19yZXNlcnZlZF9pbml0X3JlZ2lvbnNbSU5JVF9NRU1CTE9DS19SRUdJT05TXSBfX2luaXRkYXRhX21lbWJsb2NrOworI2lmZGVmIENPTkZJR19IQVZFX01FTUJMT0NLX1BIWVNfTUFQCitzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiBtZW1ibG9ja19waHlzbWVtX2luaXRfcmVnaW9uc1tJTklUX1BIWVNNRU1fUkVHSU9OU10gX19pbml0ZGF0YV9tZW1ibG9jazsKKyNlbmRpZgogCiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2sgX19pbml0ZGF0YV9tZW1ibG9jayA9IHsKIAkubWVtb3J5LnJlZ2lvbnMJCT0gbWVtYmxvY2tfbWVtb3J5X2luaXRfcmVnaW9ucywKQEAgLTM3LDYgKzQwLDEyIEBACiAJLnJlc2VydmVkLmNudAkJPSAxLAkvKiBlbXB0eSBkdW1teSBlbnRyeSAqLwogCS5yZXNlcnZlZC5tYXgJCT0gSU5JVF9NRU1CTE9DS19SRUdJT05TLAogCisjaWZkZWYgQ09ORklHX0hBVkVfTUVNQkxPQ0tfUEhZU19NQVAKKwkucGh5c21lbS5yZWdpb25zCT0gbWVtYmxvY2tfcGh5c21lbV9pbml0X3JlZ2lvbnMsCisJLnBoeXNtZW0uY250CQk9IDEsCS8qIGVtcHR5IGR1bW15IGVudHJ5ICovCisJLnBoeXNtZW0ubWF4CQk9IElOSVRfUEhZU01FTV9SRUdJT05TLAorI2VuZGlmCisKIAkuYm90dG9tX3VwCQk9IGZhbHNlLAogCS5jdXJyZW50X2xpbWl0CQk9IE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogfTsKQEAgLTQ3Miw3ICs0ODEsNyBAQAogfQogCiAvKioKLSAqIG1lbWJsb2NrX2FkZF9yZWdpb24gLSBhZGQgbmV3IG1lbWJsb2NrIHJlZ2lvbgorICogbWVtYmxvY2tfYWRkX3JhbmdlIC0gYWRkIG5ldyBtZW1ibG9jayByZWdpb24KICAqIEB0eXBlOiBtZW1ibG9jayB0eXBlIHRvIGFkZCBuZXcgcmVnaW9uIGludG8KICAqIEBiYXNlOiBiYXNlIGFkZHJlc3Mgb2YgdGhlIG5ldyByZWdpb24KICAqIEBzaXplOiBzaXplIG9mIHRoZSBuZXcgcmVnaW9uCkBAIC00ODcsNyArNDk2LDcgQEAKICAqIFJFVFVSTlM6CiAgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAoraW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmFuZ2Uoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJCQkJcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSwKIAkJCQlpbnQgbmlkLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtNTY5LDEyICs1NzgsMTIgQEAKIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX25vZGUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSwKIAkJCQkgICAgICAgaW50IG5pZCkKIHsKLQlyZXR1cm4gbWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCBuaWQsIDApOworCXJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoJm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgbmlkLCAwKTsKIH0KIAogaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKLQlyZXR1cm4gbWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLAorCXJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoJm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwKIAkJCQkgICBNQVhfTlVNTk9ERVMsIDApOwogfQogCkBAIC02NTQsOCArNjYzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgX19tZW1ibG9ja19yZW1vdmUoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCi0JCQkJCSAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKK2ludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JhbmdlKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAorCQkJCQkgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiB7CiAJaW50IHN0YXJ0X3JnbiwgZW5kX3JnbjsKIAlpbnQgaSwgcmV0OwpAQCAtNjcxLDkgKzY4MCwxMCBAQAogCiBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewotCXJldHVybiBfX21lbWJsb2NrX3JlbW92ZSgmbWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplKTsKKwlyZXR1cm4gbWVtYmxvY2tfcmVtb3ZlX3JhbmdlKCZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpOwogfQogCisKIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfZnJlZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewogCW1lbWJsb2NrX2RiZygiICAgbWVtYmxvY2tfZnJlZTogWyUjMDE2bGx4LSUjMDE2bGx4XSAlcEZcbiIsCkBAIC02ODEsNyArNjkxLDcgQEAKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UgKyBzaXplIC0gMSwKIAkJICAgICAodm9pZCAqKV9SRVRfSVBfKTsKIAotCXJldHVybiBfX21lbWJsb2NrX3JlbW92ZSgmbWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworCXJldHVybiBtZW1ibG9ja19yZW1vdmVfcmFuZ2UoJm1lbWJsb2NrLnJlc2VydmVkLCBiYXNlLCBzaXplKTsKIH0KIAogc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVzZXJ2ZV9yZWdpb24ocGh5c19hZGRyX3QgYmFzZSwKQEAgLTY5Niw3ICs3MDYsNyBAQAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZSArIHNpemUgLSAxLAogCQkgICAgIGZsYWdzLCAodm9pZCAqKV9SRVRfSVBfKTsKIAotCXJldHVybiBtZW1ibG9ja19hZGRfcmVnaW9uKF9yZ24sIGJhc2UsIHNpemUsIG5pZCwgZmxhZ3MpOworCXJldHVybiBtZW1ibG9ja19hZGRfcmFuZ2UoX3JnbiwgYmFzZSwgc2l6ZSwgbmlkLCBmbGFncyk7CiB9CiAKIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVzZXJ2ZShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQpAQCAtNzU4LDE3ICs3NjgsMTkgQEAKIH0KIAogLyoqCi0gKiBfX25leHRfZnJlZV9tZW1fcmFuZ2UgLSBuZXh0IGZ1bmN0aW9uIGZvciBmb3JfZWFjaF9mcmVlX21lbV9yYW5nZSgpCisgKiBfX25leHRfX21lbV9yYW5nZSAtIG5leHQgZnVuY3Rpb24gZm9yIGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlKCkgZXRjLgogICogQGlkeDogcG9pbnRlciB0byB1NjQgbG9vcCB2YXJpYWJsZQogICogQG5pZDogbm9kZSBzZWxlY3RvciwgJU5VTUFfTk9fTk9ERSBmb3IgYWxsIG5vZGVzCisgKiBAdHlwZV9hOiBwb2ludGVyIHRvIG1lbWJsb2NrX3R5cGUgZnJvbSB3aGVyZSB0aGUgcmFuZ2UgaXMgdGFrZW4KKyAqIEB0eXBlX2I6IHBvaW50ZXIgdG8gbWVtYmxvY2tfdHlwZSB3aGljaCBleGNsdWRlcyBtZW1vcnkgZnJvbSBiZWluZyB0YWtlbgogICogQG91dF9zdGFydDogcHRyIHRvIHBoeXNfYWRkcl90IGZvciBzdGFydCBhZGRyZXNzIG9mIHRoZSByYW5nZSwgY2FuIGJlICVOVUxMCiAgKiBAb3V0X2VuZDogcHRyIHRvIHBoeXNfYWRkcl90IGZvciBlbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAogICogQG91dF9uaWQ6IHB0ciB0byBpbnQgZm9yIG5pZCBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAogICoKLSAqIEZpbmQgdGhlIGZpcnN0IGZyZWUgYXJlYSBmcm9tICpAaWR4IHdoaWNoIG1hdGNoZXMgQG5pZCwgZmlsbCB0aGUgb3V0CisgKiBGaW5kIHRoZSBmaXJzdCBhcmVhIGZyb20gKkBpZHggd2hpY2ggbWF0Y2hlcyBAbmlkLCBmaWxsIHRoZSBvdXQKICAqIHBhcmFtZXRlcnMsIGFuZCB1cGRhdGUgKkBpZHggZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gIFRoZSBsb3dlciAzMmJpdCBvZgotICogKkBpZHggY29udGFpbnMgaW5kZXggaW50byBtZW1vcnkgcmVnaW9uIGFuZCB0aGUgdXBwZXIgMzJiaXQgaW5kZXhlcyB0aGUKLSAqIGFyZWFzIGJlZm9yZSBlYWNoIHJlc2VydmVkIHJlZ2lvbi4gIEZvciBleGFtcGxlLCBpZiByZXNlcnZlZCByZWdpb25zCisgKiAqQGlkeCBjb250YWlucyBpbmRleCBpbnRvIHR5cGVfYSBhbmQgdGhlIHVwcGVyIDMyYml0IGluZGV4ZXMgdGhlCisgKiBhcmVhcyBiZWZvcmUgZWFjaCByZWdpb24gaW4gdHlwZV9iLglGb3IgZXhhbXBsZSwgaWYgdHlwZV9iIHJlZ2lvbnMKICAqIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nLAogICoKICAqCTA6WzAtMTYpLCAxOlszMi00OCksIDI6WzEyOC0xMzApCkBAIC03ODAsNTMgKzc5Miw3NyBAQAogICogQXMgYm90aCByZWdpb24gYXJyYXlzIGFyZSBzb3J0ZWQsIHRoZSBmdW5jdGlvbiBhZHZhbmNlcyB0aGUgdHdvIGluZGljZXMKICAqIGluIGxvY2tzdGVwIGFuZCByZXR1cm5zIGVhY2ggaW50ZXJzZWN0aW9uLgogICovCi12b2lkIF9faW5pdF9tZW1ibG9jayBfX25leHRfZnJlZV9tZW1fcmFuZ2UodTY0ICppZHgsIGludCBuaWQsCi0JCQkJCSAgIHBoeXNfYWRkcl90ICpvdXRfc3RhcnQsCi0JCQkJCSAgIHBoeXNfYWRkcl90ICpvdXRfZW5kLCBpbnQgKm91dF9uaWQpCit2b2lkIF9faW5pdF9tZW1ibG9jayBfX25leHRfbWVtX3JhbmdlKHU2NCAqaWR4LCBpbnQgbmlkLAorCQkJCSAgICAgIHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlX2EsCisJCQkJICAgICAgc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGVfYiwKKwkJCQkgICAgICBwaHlzX2FkZHJfdCAqb3V0X3N0YXJ0LAorCQkJCSAgICAgIHBoeXNfYWRkcl90ICpvdXRfZW5kLCBpbnQgKm91dF9uaWQpCiB7Ci0Jc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbSA9ICZtZW1ibG9jay5tZW1vcnk7Ci0Jc3RydWN0IG1lbWJsb2NrX3R5cGUgKnJzdiA9ICZtZW1ibG9jay5yZXNlcnZlZDsKLQlpbnQgbWkgPSAqaWR4ICYgMHhmZmZmZmZmZjsKLQlpbnQgcmkgPSAqaWR4ID4+IDMyOworCWludCBpZHhfYSA9ICppZHggJiAweGZmZmZmZmZmOworCWludCBpZHhfYiA9ICppZHggPj4gMzI7CiAKLQlpZiAoV0FSTl9PTkNFKG5pZCA9PSBNQVhfTlVNTk9ERVMsICJVc2FnZSBvZiBNQVhfTlVNTk9ERVMgaXMgZGVwcmVjYXRlZC4gVXNlIE5VTUFfTk9fTk9ERSBpbnN0ZWFkXG4iKSkKKwlpZiAoV0FSTl9PTkNFKG5pZCA9PSBNQVhfTlVNTk9ERVMsCisJIlVzYWdlIG9mIE1BWF9OVU1OT0RFUyBpcyBkZXByZWNhdGVkLiBVc2UgTlVNQV9OT19OT0RFIGluc3RlYWRcbiIpKQogCQluaWQgPSBOVU1BX05PX05PREU7CiAKLQlmb3IgKCA7IG1pIDwgbWVtLT5jbnQ7IG1pKyspIHsKLQkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbSA9ICZtZW0tPnJlZ2lvbnNbbWldOworCWZvciAoOyBpZHhfYSA8IHR5cGVfYS0+Y250OyBpZHhfYSsrKSB7CisJCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0gPSAmdHlwZV9hLT5yZWdpb25zW2lkeF9hXTsKKwogCQlwaHlzX2FkZHJfdCBtX3N0YXJ0ID0gbS0+YmFzZTsKIAkJcGh5c19hZGRyX3QgbV9lbmQgPSBtLT5iYXNlICsgbS0+c2l6ZTsKKwkJaW50CSAgICBtX25pZCA9IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShtKTsKIAogCQkvKiBvbmx5IG1lbW9yeSByZWdpb25zIGFyZSBhc3NvY2lhdGVkIHdpdGggbm9kZXMsIGNoZWNrIGl0ICovCi0JCWlmIChuaWQgIT0gTlVNQV9OT19OT0RFICYmIG5pZCAhPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUobSkpCisJCWlmIChuaWQgIT0gTlVNQV9OT19OT0RFICYmIG5pZCAhPSBtX25pZCkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIHNjYW4gYXJlYXMgYmVmb3JlIGVhY2ggcmVzZXJ2YXRpb24gZm9yIGludGVyc2VjdGlvbiAqLwotCQlmb3IgKCA7IHJpIDwgcnN2LT5jbnQgKyAxOyByaSsrKSB7Ci0JCQlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyID0gJnJzdi0+cmVnaW9uc1tyaV07Ci0JCQlwaHlzX2FkZHJfdCByX3N0YXJ0ID0gcmkgPyByWy0xXS5iYXNlICsgclstMV0uc2l6ZSA6IDA7Ci0JCQlwaHlzX2FkZHJfdCByX2VuZCA9IHJpIDwgcnN2LT5jbnQgPyByLT5iYXNlIDogVUxMT05HX01BWDsKKwkJaWYgKCF0eXBlX2IpIHsKKwkJCWlmIChvdXRfc3RhcnQpCisJCQkJKm91dF9zdGFydCA9IG1fc3RhcnQ7CisJCQlpZiAob3V0X2VuZCkKKwkJCQkqb3V0X2VuZCA9IG1fZW5kOworCQkJaWYgKG91dF9uaWQpCisJCQkJKm91dF9uaWQgPSBtX25pZDsKKwkJCWlkeF9hKys7CisJCQkqaWR4ID0gKHUzMilpZHhfYSB8ICh1NjQpaWR4X2IgPDwgMzI7CisJCQlyZXR1cm47CisJCX0KIAotCQkJLyogaWYgcmkgYWR2YW5jZWQgcGFzdCBtaSwgYnJlYWsgb3V0IHRvIGFkdmFuY2UgbWkgKi8KKwkJLyogc2NhbiBhcmVhcyBiZWZvcmUgZWFjaCByZXNlcnZhdGlvbiAqLworCQlmb3IgKDsgaWR4X2IgPCB0eXBlX2ItPmNudCArIDE7IGlkeF9iKyspIHsKKwkJCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7CisJCQlwaHlzX2FkZHJfdCByX3N0YXJ0OworCQkJcGh5c19hZGRyX3Qgcl9lbmQ7CisKKwkJCXIgPSAmdHlwZV9iLT5yZWdpb25zW2lkeF9iXTsKKwkJCXJfc3RhcnQgPSBpZHhfYiA/IHJbLTFdLmJhc2UgKyByWy0xXS5zaXplIDogMDsKKwkJCXJfZW5kID0gaWR4X2IgPCB0eXBlX2ItPmNudCA/CisJCQkJci0+YmFzZSA6IFVMTE9OR19NQVg7CisKKwkJCS8qCisJCQkgKiBpZiBpZHhfYiBhZHZhbmNlZCBwYXN0IGlkeF9hLAorCQkJICogYnJlYWsgb3V0IHRvIGFkdmFuY2UgaWR4X2EKKwkJCSAqLwogCQkJaWYgKHJfc3RhcnQgPj0gbV9lbmQpCiAJCQkJYnJlYWs7CiAJCQkvKiBpZiB0aGUgdHdvIHJlZ2lvbnMgaW50ZXJzZWN0LCB3ZSdyZSBkb25lICovCiAJCQlpZiAobV9zdGFydCA8IHJfZW5kKSB7CiAJCQkJaWYgKG91dF9zdGFydCkKLQkJCQkJKm91dF9zdGFydCA9IG1heChtX3N0YXJ0LCByX3N0YXJ0KTsKKwkJCQkJKm91dF9zdGFydCA9CisJCQkJCQltYXgobV9zdGFydCwgcl9zdGFydCk7CiAJCQkJaWYgKG91dF9lbmQpCiAJCQkJCSpvdXRfZW5kID0gbWluKG1fZW5kLCByX2VuZCk7CiAJCQkJaWYgKG91dF9uaWQpCi0JCQkJCSpvdXRfbmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKG0pOworCQkJCQkqb3V0X25pZCA9IG1fbmlkOwogCQkJCS8qCi0JCQkJICogVGhlIHJlZ2lvbiB3aGljaCBlbmRzIGZpcnN0IGlzIGFkdmFuY2VkCi0JCQkJICogZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKwkJCQkgKiBUaGUgcmVnaW9uIHdoaWNoIGVuZHMgZmlyc3QgaXMKKwkJCQkgKiBhZHZhbmNlZCBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLgogCQkJCSAqLwogCQkJCWlmIChtX2VuZCA8PSByX2VuZCkKLQkJCQkJbWkrKzsKKwkJCQkJaWR4X2ErKzsKIAkJCQllbHNlCi0JCQkJCXJpKys7Ci0JCQkJKmlkeCA9ICh1MzIpbWkgfCAodTY0KXJpIDw8IDMyOworCQkJCQlpZHhfYisrOworCQkJCSppZHggPSAodTMyKWlkeF9hIHwgKHU2NClpZHhfYiA8PCAzMjsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KQEAgLTgzNyw1NyArODczLDgwIEBACiB9CiAKIC8qKgotICogX19uZXh0X2ZyZWVfbWVtX3JhbmdlX3JldiAtIG5leHQgZnVuY3Rpb24gZm9yIGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlX3JldmVyc2UoKQorICogX19uZXh0X21lbV9yYW5nZV9yZXYgLSBnZW5lcmljIG5leHQgZnVuY3Rpb24gZm9yIGZvcl9lYWNoXypfcmFuZ2VfcmV2KCkKKyAqCisgKiBGaW5kcyB0aGUgbmV4dCByYW5nZSBmcm9tIHR5cGVfYSB3aGljaCBpcyBub3QgbWFya2VkIGFzIHVuc3VpdGFibGUKKyAqIGluIHR5cGVfYi4KKyAqCiAgKiBAaWR4OiBwb2ludGVyIHRvIHU2NCBsb29wIHZhcmlhYmxlCiAgKiBAbmlkOiBuaWQ6IG5vZGUgc2VsZWN0b3IsICVOVU1BX05PX05PREUgZm9yIGFsbCBub2RlcworICogQHR5cGVfYTogcG9pbnRlciB0byBtZW1ibG9ja190eXBlIGZyb20gd2hlcmUgdGhlIHJhbmdlIGlzIHRha2VuCisgKiBAdHlwZV9iOiBwb2ludGVyIHRvIG1lbWJsb2NrX3R5cGUgd2hpY2ggZXhjbHVkZXMgbWVtb3J5IGZyb20gYmVpbmcgdGFrZW4KICAqIEBvdXRfc3RhcnQ6IHB0ciB0byBwaHlzX2FkZHJfdCBmb3Igc3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTAogICogQG91dF9lbmQ6IHB0ciB0byBwaHlzX2FkZHJfdCBmb3IgZW5kIGFkZHJlc3Mgb2YgdGhlIHJhbmdlLCBjYW4gYmUgJU5VTEwKICAqIEBvdXRfbmlkOiBwdHIgdG8gaW50IGZvciBuaWQgb2YgdGhlIHJhbmdlLCBjYW4gYmUgJU5VTEwKICAqCi0gKiBSZXZlcnNlIG9mIF9fbmV4dF9mcmVlX21lbV9yYW5nZSgpLgotICoKLSAqIExpbnV4IGtlcm5lbCBjYW5ub3QgbWlncmF0ZSBwYWdlcyB1c2VkIGJ5IGl0c2VsZi4gTWVtb3J5IGhvdHBsdWcgdXNlcnMgd29uJ3QKLSAqIGJlIGFibGUgdG8gaG90LXJlbW92ZSBob3RwbHVnZ2FibGUgbWVtb3J5IHVzZWQgYnkgdGhlIGtlcm5lbC4gU28gdGhpcwotICogZnVuY3Rpb24gc2tpcCBob3RwbHVnZ2FibGUgcmVnaW9ucyBpZiBuZWVkZWQgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlCi0gKiBrZXJuZWwuCisgKiBSZXZlcnNlIG9mIF9fbmV4dF9tZW1fcmFuZ2UoKS4KICAqLwotdm9pZCBfX2luaXRfbWVtYmxvY2sgX19uZXh0X2ZyZWVfbWVtX3JhbmdlX3Jldih1NjQgKmlkeCwgaW50IG5pZCwKLQkJCQkJICAgcGh5c19hZGRyX3QgKm91dF9zdGFydCwKLQkJCQkJICAgcGh5c19hZGRyX3QgKm91dF9lbmQsIGludCAqb3V0X25pZCkKK3ZvaWQgX19pbml0X21lbWJsb2NrIF9fbmV4dF9tZW1fcmFuZ2VfcmV2KHU2NCAqaWR4LCBpbnQgbmlkLAorCQkJCQkgIHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlX2EsCisJCQkJCSAgc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGVfYiwKKwkJCQkJICBwaHlzX2FkZHJfdCAqb3V0X3N0YXJ0LAorCQkJCQkgIHBoeXNfYWRkcl90ICpvdXRfZW5kLCBpbnQgKm91dF9uaWQpCiB7Ci0Jc3RydWN0IG1lbWJsb2NrX3R5cGUgKm1lbSA9ICZtZW1ibG9jay5tZW1vcnk7Ci0Jc3RydWN0IG1lbWJsb2NrX3R5cGUgKnJzdiA9ICZtZW1ibG9jay5yZXNlcnZlZDsKLQlpbnQgbWkgPSAqaWR4ICYgMHhmZmZmZmZmZjsKLQlpbnQgcmkgPSAqaWR4ID4+IDMyOworCWludCBpZHhfYSA9ICppZHggJiAweGZmZmZmZmZmOworCWludCBpZHhfYiA9ICppZHggPj4gMzI7CiAKIAlpZiAoV0FSTl9PTkNFKG5pZCA9PSBNQVhfTlVNTk9ERVMsICJVc2FnZSBvZiBNQVhfTlVNTk9ERVMgaXMgZGVwcmVjYXRlZC4gVXNlIE5VTUFfTk9fTk9ERSBpbnN0ZWFkXG4iKSkKIAkJbmlkID0gTlVNQV9OT19OT0RFOwogCiAJaWYgKCppZHggPT0gKHU2NClVTExPTkdfTUFYKSB7Ci0JCW1pID0gbWVtLT5jbnQgLSAxOwotCQlyaSA9IHJzdi0+Y250OworCQlpZHhfYSA9IHR5cGVfYS0+Y250IC0gMTsKKwkJaWR4X2IgPSB0eXBlX2ItPmNudDsKIAl9CiAKLQlmb3IgKCA7IG1pID49IDA7IG1pLS0pIHsKLQkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbSA9ICZtZW0tPnJlZ2lvbnNbbWldOworCWZvciAoOyBpZHhfYSA+PSAwOyBpZHhfYS0tKSB7CisJCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0gPSAmdHlwZV9hLT5yZWdpb25zW2lkeF9hXTsKKwogCQlwaHlzX2FkZHJfdCBtX3N0YXJ0ID0gbS0+YmFzZTsKIAkJcGh5c19hZGRyX3QgbV9lbmQgPSBtLT5iYXNlICsgbS0+c2l6ZTsKKwkJaW50IG1fbmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKG0pOwogCiAJCS8qIG9ubHkgbWVtb3J5IHJlZ2lvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBub2RlcywgY2hlY2sgaXQgKi8KLQkJaWYgKG5pZCAhPSBOVU1BX05PX05PREUgJiYgbmlkICE9IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShtKSkKKwkJaWYgKG5pZCAhPSBOVU1BX05PX05PREUgJiYgbmlkICE9IG1fbmlkKQogCQkJY29udGludWU7CiAKIAkJLyogc2tpcCBob3RwbHVnZ2FibGUgbWVtb3J5IHJlZ2lvbnMgaWYgbmVlZGVkICovCiAJCWlmIChtb3ZhYmxlX25vZGVfaXNfZW5hYmxlZCgpICYmIG1lbWJsb2NrX2lzX2hvdHBsdWdnYWJsZShtKSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIHNjYW4gYXJlYXMgYmVmb3JlIGVhY2ggcmVzZXJ2YXRpb24gZm9yIGludGVyc2VjdGlvbiAqLwotCQlmb3IgKCA7IHJpID49IDA7IHJpLS0pIHsKLQkJCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgPSAmcnN2LT5yZWdpb25zW3JpXTsKLQkJCXBoeXNfYWRkcl90IHJfc3RhcnQgPSByaSA/IHJbLTFdLmJhc2UgKyByWy0xXS5zaXplIDogMDsKLQkJCXBoeXNfYWRkcl90IHJfZW5kID0gcmkgPCByc3YtPmNudCA/IHItPmJhc2UgOiBVTExPTkdfTUFYOworCQlpZiAoIXR5cGVfYikgeworCQkJaWYgKG91dF9zdGFydCkKKwkJCQkqb3V0X3N0YXJ0ID0gbV9zdGFydDsKKwkJCWlmIChvdXRfZW5kKQorCQkJCSpvdXRfZW5kID0gbV9lbmQ7CisJCQlpZiAob3V0X25pZCkKKwkJCQkqb3V0X25pZCA9IG1fbmlkOworCQkJaWR4X2ErKzsKKwkJCSppZHggPSAodTMyKWlkeF9hIHwgKHU2NClpZHhfYiA8PCAzMjsKKwkJCXJldHVybjsKKwkJfQogCi0JCQkvKiBpZiByaSBhZHZhbmNlZCBwYXN0IG1pLCBicmVhayBvdXQgdG8gYWR2YW5jZSBtaSAqLworCQkvKiBzY2FuIGFyZWFzIGJlZm9yZSBlYWNoIHJlc2VydmF0aW9uICovCisJCWZvciAoOyBpZHhfYiA+PSAwOyBpZHhfYi0tKSB7CisJCQlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyOworCQkJcGh5c19hZGRyX3Qgcl9zdGFydDsKKwkJCXBoeXNfYWRkcl90IHJfZW5kOworCisJCQlyID0gJnR5cGVfYi0+cmVnaW9uc1tpZHhfYl07CisJCQlyX3N0YXJ0ID0gaWR4X2IgPyByWy0xXS5iYXNlICsgclstMV0uc2l6ZSA6IDA7CisJCQlyX2VuZCA9IGlkeF9iIDwgdHlwZV9iLT5jbnQgPworCQkJCXItPmJhc2UgOiBVTExPTkdfTUFYOworCQkJLyoKKwkJCSAqIGlmIGlkeF9iIGFkdmFuY2VkIHBhc3QgaWR4X2EsCisJCQkgKiBicmVhayBvdXQgdG8gYWR2YW5jZSBpZHhfYQorCQkJICovCisKIAkJCWlmIChyX2VuZCA8PSBtX3N0YXJ0KQogCQkJCWJyZWFrOwogCQkJLyogaWYgdGhlIHR3byByZWdpb25zIGludGVyc2VjdCwgd2UncmUgZG9uZSAqLwpAQCAtODk3LDE4ICs5NTYsMTcgQEAKIAkJCQlpZiAob3V0X2VuZCkKIAkJCQkJKm91dF9lbmQgPSBtaW4obV9lbmQsIHJfZW5kKTsKIAkJCQlpZiAob3V0X25pZCkKLQkJCQkJKm91dF9uaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUobSk7Ci0KKwkJCQkJKm91dF9uaWQgPSBtX25pZDsKIAkJCQlpZiAobV9zdGFydCA+PSByX3N0YXJ0KQotCQkJCQltaS0tOworCQkJCQlpZHhfYS0tOwogCQkJCWVsc2UKLQkJCQkJcmktLTsKLQkJCQkqaWR4ID0gKHUzMiltaSB8ICh1NjQpcmkgPDwgMzI7CisJCQkJCWlkeF9iLS07CisJCQkJKmlkeCA9ICh1MzIpaWR4X2EgfCAodTY0KWlkeF9iIDw8IDMyOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQogCX0KLQorCS8qIHNpZ25hbCBlbmQgb2YgaXRlcmF0aW9uICovCiAJKmlkeCA9IFVMTE9OR19NQVg7CiB9CiAKQEAgLTEyMDEsNyArMTI1OSw3IEBACiAJCSAgICAgX19mdW5jX18sICh1NjQpYmFzZSwgKHU2NCliYXNlICsgc2l6ZSAtIDEsCiAJCSAgICAgKHZvaWQgKilfUkVUX0lQXyk7CiAJa21lbWxlYWtfZnJlZV9wYXJ0KF9fdmEoYmFzZSksIHNpemUpOwotCV9fbWVtYmxvY2tfcmVtb3ZlKCZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7CisJbWVtYmxvY2tfcmVtb3ZlX3JhbmdlKCZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7CiB9CiAKIC8qCkBAIC0xMjg3LDggKzEzNDUsMTAgQEAKIAl9CiAKIAkvKiB0cnVuY2F0ZSBib3RoIG1lbW9yeSBhbmQgcmVzZXJ2ZWQgcmVnaW9ucyAqLwotCV9fbWVtYmxvY2tfcmVtb3ZlKCZtZW1ibG9jay5tZW1vcnksIG1heF9hZGRyLCAocGh5c19hZGRyX3QpVUxMT05HX01BWCk7Ci0JX19tZW1ibG9ja19yZW1vdmUoJm1lbWJsb2NrLnJlc2VydmVkLCBtYXhfYWRkciwgKHBoeXNfYWRkcl90KVVMTE9OR19NQVgpOworCW1lbWJsb2NrX3JlbW92ZV9yYW5nZSgmbWVtYmxvY2subWVtb3J5LCBtYXhfYWRkciwKKwkJCSAgICAgIChwaHlzX2FkZHJfdClVTExPTkdfTUFYKTsKKwltZW1ibG9ja19yZW1vdmVfcmFuZ2UoJm1lbWJsb2NrLnJlc2VydmVkLCBtYXhfYWRkciwKKwkJCSAgICAgIChwaHlzX2FkZHJfdClVTExPTkdfTUFYKTsKIH0KIAogc3RhdGljIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfc2VhcmNoKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLCBwaHlzX2FkZHJfdCBhZGRyKQpAQCAtMTUwMiw2ICsxNTYyLDkgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtZW1vcnkiLCBTX0lSVUdPLCByb290LCAmbWVtYmxvY2subWVtb3J5LCAmbWVtYmxvY2tfZGVidWdfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgicmVzZXJ2ZWQiLCBTX0lSVUdPLCByb290LCAmbWVtYmxvY2sucmVzZXJ2ZWQsICZtZW1ibG9ja19kZWJ1Z19mb3BzKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9NRU1CTE9DS19QSFlTX01BUAorCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBoeXNtZW0iLCBTX0lSVUdPLCByb290LCAmbWVtYmxvY2sucGh5c21lbSwgJm1lbWJsb2NrX2RlYnVnX2ZvcHMpOworI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMDM3YjgxMi4uZTMwMmFlMSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTM5MjAsOSArMzkyMCw2IEBACiAJCX0KIAl9CiAKLQkvKiBUSFAgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGhhbmRsZWQgKi8KLQlCVUdfT04ocG1kX251bWEoKnBtZCkpOwotCiAJLyoKIAkgKiBVc2UgX19wdGVfYWxsb2MgaW5zdGVhZCBvZiBwdGVfYWxsb2NfbWFwLCBiZWNhdXNlIHdlIGNhbid0CiAJICogcnVuIHB0ZV9vZmZzZXRfbWFwIG9uIHRoZSBwbWQsIGlmIGFuIGh1Z2UgcG1kIGNvdWxkCmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jCmluZGV4IDhjOTMyNjcuLmM0ZTA5ODQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHBwb2F0bS5jCisrKyBiL25ldC9hdG0vcHBwb2F0bS5jCkBAIC0yNTIsNyArMjUyLDcgQEAKIAkgKiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGVyZSdzIGEgbWVtb3J5IGJhcnJpZXIgYWZ0ZXIgaXQuIFRoZSBiaXQKIAkgKiAqbXVzdCogYmUgc2V0IGJlZm9yZSB3ZSBkbyB0aGUgYXRvbWljX2luYygpIG9uIHB2Y2MtPmluZmxpZ2h0LgogCSAqIFRoZXJlJ3Mgbm8gc21wX21iX19hZnRlcl9zZXRfYml0KCksIHNvIGl0J3MgdGhpcyBvciBhYnVzZQotCSAqIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkuCisJICogc21wX21iX19hZnRlcl9hdG9taWMoKS4KIAkgKi8KIAl0ZXN0X2FuZF9zZXRfYml0KEJMT0NLRUQsICZwdmNjLT5ibG9ja2VkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggMTUwMTBhMi4uNjgyZjMzYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC00NSw3ICs0NSw3IEBACiAJCXJldHVybjsKIAogCWNsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAvKiB3YWtlX3VwX2JpdCBhZHZpc2VzIGFib3V0IHRoaXMgYmFycmllciAqLworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7IC8qIHdha2VfdXBfYml0IGFkdmlzZXMgYWJvdXQgdGhpcyBiYXJyaWVyICovCiAJd2FrZV91cF9iaXQoJmhkZXYtPmZsYWdzLCBIQ0lfSU5RVUlSWSk7CiAKIAloY2lfY29ubl9jaGVja19wZW5kaW5nKGhkZXYpOwpAQCAtMTc2OCw3ICsxNzY4LDcgQEAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKSkKIAkJcmV0dXJuOwogCi0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgLyogd2FrZV91cF9iaXQgYWR2aXNlcyBhYm91dCB0aGlzIGJhcnJpZXIgKi8KKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiB3YWtlX3VwX2JpdCBhZHZpc2VzIGFib3V0IHRoaXMgYmFycmllciAqLwogCXdha2VfdXBfYml0KCZoZGV2LT5mbGFncywgSENJX0lOUVVJUlkpOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmRldl9mbGFncykpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDlhYmM1MDMuLjhiMDdkYjMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogCQkgKiBkZXYtPnN0b3AoKSB3aWxsIGludm9rZSBuYXBpX2Rpc2FibGUoKSBvbiBhbGwgb2YgaXQncwogCQkgKiBuYXBpX3N0cnVjdCBpbnN0YW5jZXMgb24gdGhpcyBkZXZpY2UuCiAJCSAqLwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqLworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqLwogCX0KIAogCWRldl9kZWFjdGl2YXRlX21hbnkoaGVhZCk7CkBAIC0zMzQxLDcgKzMzNDEsNyBAQAogCiAJCQlyb290X2xvY2sgPSBxZGlzY19sb2NrKHEpOwogCQkJaWYgKHNwaW5fdHJ5bG9jayhyb290X2xvY2spKSB7Ci0JCQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCQkJY2xlYXJfYml0KF9fUURJU0NfU1RBVEVfU0NIRUQsCiAJCQkJCSAgJnEtPnN0YXRlKTsKIAkJCQlxZGlzY19ydW4ocSk7CkBAIC0zMzUxLDcgKzMzNTEsNyBAQAogCQkJCQkgICAgICAmcS0+c3RhdGUpKSB7CiAJCQkJCV9fbmV0aWZfcmVzY2hlZHVsZShxKTsKIAkJCQl9IGVsc2UgewotCQkJCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCQkJCWNsZWFyX2JpdChfX1FESVNDX1NUQVRFX1NDSEVELAogCQkJCQkJICAmcS0+c3RhdGUpOwogCQkJCX0KQEAgLTQyNDMsNyArNDI0Myw3IEBACiAJQlVHX09OKG4tPmdyb19saXN0KTsKIAogCWxpc3RfZGVsKCZuLT5wb2xsX2xpc3QpOwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbi0+c3RhdGUpOwogfQogRVhQT1JUX1NZTUJPTChfX25hcGlfY29tcGxldGUpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbGlua193YXRjaC5jIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCmluZGV4IDljM2E4MzkuLmJkMDc2N2UgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYworKysgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCSAqIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcmVhZCBpcyBjb21wbGV0ZSBzaW5jZSBpdCBjYW4gYmUKIAkgKiByZXdyaXR0ZW4gYXMgc29vbiBhcyB3ZSBjbGVhciB0aGUgYml0IGJlbG93LgogCSAqLwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCiAJLyogV2UgYXJlIGFib3V0IHRvIGhhbmRsZSB0aGlzIGRldmljZSwKIAkgKiBzbyBuZXcgZXZlbnRzIGNhbiBiZSBhY2NlcHRlZApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggNDhmNDI0NC4uNTZjZDQ1OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC01MjIsNyArNTIyLDcgQEAKIHZvaWQgaW5ldF9wdXRwZWVyKHN0cnVjdCBpbmV0X3BlZXIgKnApCiB7CiAJcC0+ZHRpbWUgPSAoX191MzIpamlmZmllczsKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJYXRvbWljX2RlYygmcC0+cmVmY250KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfcHV0cGVlcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggMTJkNjAxNi4uMmQzNDBiZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMTkzMCwxMCArMTkzMCw4IEBACiAJCQkvKiBJdCBpcyBwb3NzaWJsZSBUWCBjb21wbGV0aW9uIGFscmVhZHkgaGFwcGVuZWQKIAkJCSAqIGJlZm9yZSB3ZSBzZXQgVFNRX1RIUk9UVExFRCwgc28gd2UgbXVzdAogCQkJICogdGVzdCBhZ2FpbiB0aGUgY29uZGl0aW9uLgotCQkJICogV2UgYWJ1c2Ugc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKSBiZWNhdXNlCi0JCQkgKiB0aGVyZSBpcyBubyBzbXBfbWJfX2FmdGVyX3NldF9iaXQoKSB5ZXQKIAkJCSAqLwotCQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCQlpZiAoYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA+IGxpbWl0KQogCQkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggNzU0MjFmMi4uMWY0Zjk1NCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtOTE0LDcgKzkxNCw3IEBACiAJbmZfY3RfZXh0X2Rlc3Ryb3koY3QpOwogCW5mX2N0X2V4dF9mcmVlKGN0KTsKIAlrbWVtX2NhY2hlX2ZyZWUobmV0LT5jdC5uZl9jb25udHJhY2tfY2FjaGVwLCBjdCk7Ci0Jc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwppbmRleCBiN2ViZTIzLi5kNjdkZTQ1IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JlY3YuYworKysgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtNTk4LDcgKzU5OCw3IEBACiB7CiAJYXRvbWljNjRfc2V0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKIAlpZiAoYWNrX3JlcXVpcmVkKSB7Ci0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKIAl9CiB9CkBAIC02MDYsNyArNjA2LDcgQEAKIHN0YXRpYyB1NjQgcmRzX2liX2dldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKIHsKIAljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJcmV0dXJuIGF0b21pYzY0X3JlYWQoJmljLT5pX2Fja19uZXh0KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmVjdi5jIGIvbmV0L3Jkcy9pd19yZWN2LmMKaW5kZXggNDUwMzMzNS4uYWE4YmY2NyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19yZWN2LmMKKysrIGIvbmV0L3Jkcy9pd19yZWN2LmMKQEAgLTQyOSw3ICs0MjksNyBAQAogewogCWF0b21pYzY0X3NldCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CiAJaWYgKGFja19yZXF1aXJlZCkgewotCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CiAJfQogfQpAQCAtNDM3LDcgKzQzNyw3IEBACiBzdGF0aWMgdTY0IHJkc19pd19nZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCiB7CiAJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCXJldHVybiBhdG9taWM2NF9yZWFkKCZpYy0+aV9hY2tfbmV4dCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IGE4MmZiNjYuLjIzNzE4MTYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCisrKyBiL25ldC9yZHMvc2VuZC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CiAJY2xlYXJfYml0KFJEU19JTl9YTUlULCAmY29ubi0+Y19mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCS8qCiAJICogV2UgZG9uJ3QgdXNlIHdhaXRfb25fYml0KCkvd2FrZV91cF9iaXQoKSBiZWNhdXNlIG91ciB3YWtpbmcgaXMgaW4gYQogCSAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrCkBAIC02NjEsNyArNjYxLDcgQEAKIAogCS8qIG9yZGVyIGZsYWcgdXBkYXRlcyB3aXRoIHNwaW4gbG9ja3MgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmxpc3QpKQotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CiAKQEAgLTY5MSw3ICs2OTEsNyBAQAogCX0KIAogCS8qIG9yZGVyIGZsYWcgdXBkYXRlcyB3aXRoIHRoZSBycyBsb2NrICovCi0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3Bfc2VuZC5jIGIvbmV0L3Jkcy90Y3Bfc2VuZC5jCmluZGV4IDgxY2Y1YTQuLjUzYjE3Y2EgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwX3NlbmQuYworKysgYi9uZXQvcmRzL3RjcF9zZW5kLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAkJcm0tPm1fYWNrX3NlcSA9IHRjLT50X2xhc3Rfc2VudF9ueHQgKwogCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKwogCQkJCWJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgLSAxOwotCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCXNldF9iaXQoUkRTX01TR19IQVNfQUNLX1NFUSwgJnJtLT5tX2ZsYWdzKTsKIAkJdGMtPnRfbGFzdF9leHBlY3RlZF91bmEgPSBybS0+bV9hY2tfc2VxICsgMTsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCA1Mjg1ZWFkLi4yNDdlOTczIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtMjk2LDcgKzI5Niw3IEBACiBycGNhdXRoX3VuaGFzaF9jcmVkX2xvY2tlZChzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CiAJaGxpc3RfZGVsX3JjdSgmY3JlZC0+Y3JfaGFzaCk7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFJQQ0FVVEhfQ1JFRF9IQVNIRUQsICZjcmVkLT5jcl9mbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCAzNmU0MzFlLi5iNmU0NDBiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlnc3NfZ2V0X2N0eChjdHgpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihnc3NfY3JlZC0+Z2NfY3R4LCBjdHgpOwogCXNldF9iaXQoUlBDQVVUSF9DUkVEX1VQVE9EQVRFLCAmY3JlZC0+Y3JfZmxhZ3MpOwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChSUENBVVRIX0NSRURfTkVXLCAmY3JlZC0+Y3JfZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYyBiL25ldC9zdW5ycGMvYmFja2NoYW5uZWxfcnFzdC5jCmluZGV4IDM1MTNkNTUuLjk3NjFhMGQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYmFja2NoYW5uZWxfcnFzdC5jCisrKyBiL25ldC9zdW5ycGMvYmFja2NoYW5uZWxfcnFzdC5jCkBAIC0yNDQsMTAgKzI0NCwxMCBAQAogCWRwcmludGsoIlJQQzogICAgICAgZnJlZSBiYWNrY2hhbm5lbCByZXE9JXBcbiIsIHJlcSk7CiAKIAlyZXEtPnJxX2Nvbm5lY3RfY29va2llID0geHBydC0+Y29ubmVjdF9jb29raWUgLSAxOwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCVdBUk5fT05fT05DRSghdGVzdF9iaXQoUlBDX0JDX1BBX0lOX1VTRSwgJnJlcS0+cnFfYmNfcGFfc3RhdGUpKTsKIAljbGVhcl9iaXQoUlBDX0JDX1BBX0lOX1VTRSwgJnJlcS0+cnFfYmNfcGFfc3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAogCWlmICgheHBydF9uZWVkX3RvX3JlcXVldWUoeHBydCkpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggZDE3M2Y3OS4uODlkMDUxZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTIzMCw5ICsyMzAsOSBAQAogewogCXhwcnQtPnNuZF90YXNrID0gTlVMTDsKIAlpZiAoIXRlc3RfYml0KFhQUlRfQ0xPU0VfV0FJVCwgJnhwcnQtPnN0YXRlKSkgewotCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJCWNsZWFyX2JpdChYUFJUX0xPQ0tFRCwgJnhwcnQtPnN0YXRlKTsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAl9IGVsc2UKIAkJcXVldWVfd29yayhycGNpb2Rfd29ya3F1ZXVlLCAmeHBydC0+dGFza19jbGVhbnVwKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCAyNWEzZGNmLi40MDJhN2U5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC04OTMsMTEgKzg5MywxMSBAQAogCXhzX3Jlc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpOwogCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPSAwOwogCi0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwgJnhwcnQtPnN0YXRlKTsKIAljbGVhcl9iaXQoWFBSVF9DTE9TRV9XQUlULCAmeHBydC0+c3RhdGUpOwogCWNsZWFyX2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCXhwcnRfZGlzY29ubmVjdF9kb25lKHhwcnQpOwogfQogCkBAIC0xNDk3LDEyICsxNDk3LDEyIEBACiAKIHN0YXRpYyB2b2lkIHhzX3NvY2tfcmVzZXRfY29ubmVjdGlvbl9mbGFncyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwgJnhwcnQtPnN0YXRlKTsKIAljbGVhcl9iaXQoWFBSVF9DT05ORUNUSU9OX0NMT1NFLCAmeHBydC0+c3RhdGUpOwogCWNsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSk7CiAJY2xlYXJfYml0KFhQUlRfQ0xPU0lORywgJnhwcnQtPnN0YXRlKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHhzX3NvY2tfbWFya19jbG9zZWQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQpAQCAtMTU1NiwxMCArMTU1NiwxMCBAQAogCQl4cHJ0LT5jb25uZWN0X2Nvb2tpZSsrOwogCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gMDsKIAkJc2V0X2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7Ci0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJY2xlYXJfYml0KFhQUlRfQ09OTkVDVEVELCAmeHBydC0+c3RhdGUpOwogCQljbGVhcl9iaXQoWFBSVF9DTE9TRV9XQUlULCAmeHBydC0+c3RhdGUpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwogCQl4c190Y3Bfc2NoZWR1bGVfbGluZ2VyX3RpbWVvdXQoeHBydCwgeHNfdGNwX2Zpbl90aW1lb3V0KTsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfQ0xPU0VfV0FJVDoKQEAgLTE1NzgsOSArMTU3OCw5IEBACiAJY2FzZSBUQ1BfTEFTVF9BQ0s6CiAJCXNldF9iaXQoWFBSVF9DTE9TSU5HLCAmeHBydC0+c3RhdGUpOwogCQl4c190Y3Bfc2NoZWR1bGVfbGluZ2VyX3RpbWVvdXQoeHBydCwgeHNfdGNwX2Zpbl90aW1lb3V0KTsKLQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQljbGVhcl9iaXQoWFBSVF9DT05ORUNURUQsICZ4cHJ0LT5zdGF0ZSk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCWJyZWFrOwogCWNhc2UgVENQX0NMT1NFOgogCQl4c190Y3BfY2FuY2VsX2xpbmdlcl90aW1lb3V0KHhwcnQpOwpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGJiN2U4YmEuLjc0OWY4MGMgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJc2stPnNrX3N0YXRlCT0gVENQX0VTVEFCTElTSEVEOwogCXNvY2tfaG9sZChuZXdzayk7CiAKLQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsJLyogc29ja19ob2xkKCkgZG9lcyBhbiBhdG9taWNfaW5jKCkgKi8KKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwkvKiBzb2NrX2hvbGQoKSBkb2VzIGFuIGF0b21pY19pbmMoKSAqLwogCXVuaXhfcGVlcihzaykJPSBuZXdzazsKIAogCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCAwNjYzNTU2Li5lYTdmOTUzIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJCSAgICAgcy0+bW9kdWxlLT5uYW1lLAogCQkJICAgICBpc192bWxpbnV4KHMtPm1vZHVsZS0+bmFtZSkgPyIiOiIua28iKTsKIAkJfSBlbHNlIHsKLQkJCS8qIEluIGNhc2UgTW9kdWxlcy5zeW12ZXJzIHdhcyBvdXQgb2YgZGF0ZSAqLworCQkJLyogSW4gY2FzZSBNb2R1bGUuc3ltdmVycyB3YXMgb3V0IG9mIGRhdGUgKi8KIAkJCXMtPm1vZHVsZSA9IG1vZDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggODU0NjcxMS4uNzA5NTFmZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCiBfZXJyb3I6CiAJY2xlYXJfYml0KDAsICZjaGlwLT5vcGVuZWQpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00NTgsNyArNDU4LDcgQEAKIAogCWNoaXAtPnN1YnN0cmVhbSA9IE5VTEw7CiAJY2xlYXJfYml0KDAsICZjaGlwLT5vcGVuZWQpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwppbmRleCAxNzRiZDU0Li5iYjExNDkxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwpAQCAtNDgsNyArNDgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzMxLmgiCiAjaW5jbHVkZSAiYXRtZWwtcGNtLmgiCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggZmJjNjY2NS4uODg0NjFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtMzUsNCArMzUsNiBAQAogIyBkZWZpbmUgdW5saWtlbHkoeCkJCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApCiAjZW5kaWYKIAorI2RlZmluZSBBQ0NFU1NfT05DRSh4KSAoKih2b2xhdGlsZSB0eXBlb2YoeCkgKikmKHgpKQorCiAjZW5kaWYgLyogX1RPT0xTX0xJTlVYX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZpcnRpby9saW51eC9leHBvcnQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvZXhwb3J0LmgKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gdG9vbHMvdmlydGlvL2xpbnV4L2V4cG9ydC5oCnJlbmFtZSB0byB0b29scy9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCmluZGV4IDczMTFkMzIuLmQwN2U1ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3ZpcnRpby9saW51eC9leHBvcnQuaAorKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCkBAIC0xLDUgKzEsMTAgQEAKKyNpZm5kZWYgX1RPT0xTX0xJTlVYX0VYUE9SVF9IXworI2RlZmluZSBfVE9PTFNfTElOVVhfRVhQT1JUX0hfCisKICNkZWZpbmUgRVhQT1JUX1NZTUJPTChzeW0pCiAjZGVmaW5lIEVYUE9SVF9TWU1CT0xfR1BMKHN5bSkKICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFKHN5bSkKICNkZWZpbmUgRVhQT1JUX1VOVVNFRF9TWU1CT0woc3ltKQogI2RlZmluZSBFWFBPUlRfVU5VU0VEX1NZTUJPTF9HUEwoc3ltKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9sb2NrZGVwL3VpbmNsdWRlL2xpbnV4L3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gdG9vbHMvbGliL2xvY2tkZXAvdWluY2x1ZGUvbGludXgvdHlwZXMuaApyZW5hbWUgdG8gdG9vbHMvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IDkyOTkzOGYuLmI1Y2YyNWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9sb2NrZGVwL3VpbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0xLDggKzEsOSBAQAotI2lmbmRlZiBfTElCTE9DS0RFUF9MSU5VWF9UWVBFU19IXwotI2RlZmluZSBfTElCTE9DS0RFUF9MSU5VWF9UWVBFU19IXworI2lmbmRlZiBfVE9PTFNfTElOVVhfVFlQRVNfSF8KKyNkZWZpbmUgX1RPT0xTX0xJTlVYX1RZUEVTX0hfCiAKICNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fCS8qIEZvciBQUEM2NCwgdG8gZ2V0IExMNjQgdHlwZXMgKi8KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KQEAgLTEwLDEwICsxMSwyMiBAQAogc3RydWN0IHBhZ2U7CiBzdHJ1Y3Qga21lbV9jYWNoZTsKIAotdHlwZWRlZiB1bnNpZ25lZCBnZnBfdDsKK3R5cGVkZWYgZW51bSB7CisJR0ZQX0tFUk5FTCwKKwlHRlBfQVRPTUlDLAorCV9fR0ZQX0hJR0hNRU0sCisJX19HRlBfSElHSAorfSBnZnBfdDsKIAotdHlwZWRlZiBfX3U2NCB1NjQ7Ci10eXBlZGVmIF9fczY0IHM2NDsKKy8qCisgKiBXZSBkZWZpbmUgdTY0IGFzIHVpbnQ2NF90IGZvciBldmVyeSBhcmNoaXRlY3R1cmUKKyAqIHNvIHRoYXQgd2UgY2FuIHByaW50IGl0IHdpdGggIiUiUFJJeDY0IHdpdGhvdXQgZ2V0dGluZyB3YXJuaW5ncy4KKyAqCisgKiB0eXBlZGVmIF9fdTY0IHU2NDsKKyAqIHR5cGVkZWYgX19zNjQgczY0OworICovCit0eXBlZGVmIHVpbnQ2NF90IHU2NDsKK3R5cGVkZWYgaW50NjRfdCBzNjQ7CiAKIHR5cGVkZWYgX191MzIgdTMyOwogdHlwZWRlZiBfX3MzMiBzMzI7CkBAIC0zNSw2ICs0OCwxMCBAQAogI2RlZmluZSBfX2JpdHdpc2UKICNlbmRpZgogCisjZGVmaW5lIF9fZm9yY2UKKyNkZWZpbmUgX191c2VyCisjZGVmaW5lIF9fbXVzdF9jaGVjaworI2RlZmluZSBfX2NvbGQKIAogdHlwZWRlZiBfX3UxNiBfX2JpdHdpc2UgX19sZTE2OwogdHlwZWRlZiBfX3UxNiBfX2JpdHdpc2UgX19iZTE2OwpAQCAtNTUsNCArNzIsNCBAQAogCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0LCAqKnBwcmV2OwogfTsKIAotI2VuZGlmCisjZW5kaWYgLyogX1RPT0xTX0xJTlVYX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS90b29scy9saWIvbG9ja2RlcC9NYWtlZmlsZSBiL3Rvb2xzL2xpYi9sb2NrZGVwL01ha2VmaWxlCmluZGV4IGJiYTJmNTIuLjUyZjkyNzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9sb2NrZGVwL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYi9sb2NrZGVwL01ha2VmaWxlCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogZXhwb3J0IFEgVkVSQk9TRQogCi1JTkNMVURFUyA9IC1JLiAtSS91c3IvbG9jYWwvaW5jbHVkZSAtSS4vdWluY2x1ZGUgLUkuL2luY2x1ZGUgJChDT05GSUdfSU5DTFVERVMpCitJTkNMVURFUyA9IC1JLiAtSS91c3IvbG9jYWwvaW5jbHVkZSAtSS4vdWluY2x1ZGUgLUkuL2luY2x1ZGUgLUkuLi8uLi9pbmNsdWRlICQoQ09ORklHX0lOQ0xVREVTKQogCiAjIFNldCBjb21waWxlIG9wdGlvbiBDRkxBR1MgaWYgbm90IHNldCBlbHNld2hlcmUKIENGTEFHUyA/PSAtZyAtRENPTkZJR19MT0NLREVQIC1EQ09ORklHX1NUQUNLVFJBQ0UgLURDT05GSUdfUFJPVkVfTE9DS0lORyAtREJJVFNfUEVSX0xPTkc9X19XT1JEU0laRSAtRExJQkxPQ0tERVBfVkVSU0lPTj0nIiQoTElCTE9DS0RFUF9WRVJTSU9OKSInIC1yZHluYW1pYyAtTzAgLWcKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9sb2NrZGVwL3VpbmNsdWRlL2xpbnV4L2V4cG9ydC5oIGIvdG9vbHMvbGliL2xvY2tkZXAvdWluY2x1ZGUvbGludXgvZXhwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZGYzNDkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGliL2xvY2tkZXAvdWluY2x1ZGUvbGludXgvZXhwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0xJQkxPQ0tERVBfTElOVVhfRVhQT1JUX0hfCi0jZGVmaW5lIF9MSUJMT0NLREVQX0xJTlVYX0VYUE9SVF9IXwotCi0jZGVmaW5lIEVYUE9SVF9TWU1CT0woc3ltKQotI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChzeW0pCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtZGlmZi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dAppbmRleCBmZGZjZWVlLi5iM2I4YWJhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dApAQCAtMzMsMjEgKzMzLDI1IEBACiAtZDo6CiAtLWRzb3M9OjoKIAlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKLQlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KKwlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4gIFRoaXMgb3B0aW9uIHdpbGwgYWZmZWN0IHRoZSBwZXJjZW50YWdlCisJb2YgdGhlIEJhc2VsaW5lL0RlbHRhIGNvbHVtbi4gIFNlZSAtLXBlcmNlbnRhZ2UgZm9yIG1vcmUgaW5mby4KIAogLUM6OgogLS1jb21tcz06OgogCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKLQlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KKwlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4gIFRoaXMgb3B0aW9uIHdpbGwgYWZmZWN0IHRoZSBwZXJjZW50YWdlCisJb2YgdGhlIEJhc2VsaW5lL0RlbHRhIGNvbHVtbi4gIFNlZSAtLXBlcmNlbnRhZ2UgZm9yIG1vcmUgaW5mby4KIAogLVM6OgogLS1zeW1ib2xzPTo6CiAJT25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzLiBDU1YgdGhhdCB1bmRlcnN0YW5kcwotCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLgorCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLiAgVGhpcyBvcHRpb24gd2lsbCBhZmZlY3QgdGhlIHBlcmNlbnRhZ2UKKwlvZiB0aGUgQmFzZWxpbmUvRGVsdGEgY29sdW1uLiAgU2VlIC0tcGVyY2VudGFnZSBmb3IgbW9yZSBpbmZvLgogCiAtczo6CiAtLXNvcnQ9OjoKLQlTb3J0IGJ5IGtleShzKTogcGlkLCBjb21tLCBkc28sIHN5bWJvbC4KKwlTb3J0IGJ5IGtleShzKTogcGlkLCBjb21tLCBkc28sIHN5bWJvbCwgY3B1LCBwYXJlbnQsIHNyY2xpbmUuCisJUGxlYXNlIHNlZSBkZXNjcmlwdGlvbiBvZiAtLXNvcnQgaW4gdGhlIHBlcmYtcmVwb3J0IG1hbiBwYWdlLgogCiAtdDo6CiAtLWZpZWxkLXNlcGFyYXRvcj06OgpAQCAtODksNiArOTMsMTQgQEAKIC0tb3JkZXI6OgogICAgICAgIFNwZWNpZnkgY29tcHV0ZSBzb3J0aW5nIGNvbHVtbiBudW1iZXIuCiAKKy0tcGVyY2VudGFnZTo6CisJRGV0ZXJtaW5lIGhvdyB0byBkaXNwbGF5IHRoZSBvdmVyaGVhZCBwZXJjZW50YWdlIG9mIGZpbHRlcmVkIGVudHJpZXMuCisJRmlsdGVycyBjYW4gYmUgYXBwbGllZCBieSAtLWNvbW1zLCAtLWRzb3MgYW5kL29yIC0tc3ltYm9scyBvcHRpb25zLgorCisJInJlbGF0aXZlIiBtZWFucyBpdCdzIHJlbGF0aXZlIHRvIGZpbHRlcmVkIGVudHJpZXMgb25seSBzbyB0aGF0IHRoZQorCXN1bSBvZiBzaG93biBlbnRyaWVzIHdpbGwgYmUgYWx3YXlzIDEwMCUuICAiYWJzb2x1dGUiIG1lYW5zIGl0IHJldGFpbnMKKwl0aGUgb3JpZ2luYWwgdmFsdWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgZmlsdGVyIGlzIGFwcGxpZWQuCisKIENPTVBBUklTT04KIC0tLS0tLS0tLS0KIFRoZSBjb21wYXJpc29uIGlzIGdvdmVybmVkIGJ5IHRoZSBiYXNlbGluZSBmaWxlLiBUaGUgYmFzZWxpbmUgcGVyZi5kYXRhCkBAIC0xNTcsNiArMTY5LDEwIEBACiAgIC0gcGVyaW9kX3BlcmNlbnQgYmVpbmcgdGhlICUgb2YgdGhlIGhpc3QgZW50cnkgcGVyaW9kIHZhbHVlIHdpdGhpbgogICAgIHNpbmdsZSBkYXRhIGZpbGUKIAorICAtIHdpdGggZmlsdGVyaW5nIGJ5IC1DLCAtZCBhbmQvb3IgLVMsIHBlcmlvZF9wZXJjZW50IG1pZ2h0IGJlIGNoYW5nZWQKKyAgICByZWxhdGl2ZSB0byBob3cgZW50cmllcyBhcmUgZmlsdGVyZWQuICBVc2UgLS1wZXJjZW50YWdlPWFic29sdXRlIHRvCisgICAgcHJldmVudCBzdWNoIGZsdWN0dWF0aW9uLgorCiByYXRpbwogfn5+fn4KIElmIHNwZWNpZmllZCB0aGUgJ1JhdGlvJyBjb2x1bW4gaXMgZGlzcGxheWVkIHdpdGggdmFsdWUgJ3InIGNvbXB1dGVkIGFzOgpAQCAtMTg3LDQgKzIwMyw0IEBACiAKIFNFRSBBTFNPCiAtLS0tLS0tLQotbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXJlcG9ydFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKaW5kZXggOGVhYjhhNC4uYTFiNTE4NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CkBAIC0yNSwxMCArMjUsNiBAQAogLS12ZXJib3NlOjoKICAgICAgICAgQmUgbW9yZSB2ZXJib3NlLiAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKQogCi0tZDo6Ci0tLWRzb3M9OjoKLQlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKLQlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KIC1uOjoKIC0tc2hvdy1uci1zYW1wbGVzOjoKIAlTaG93IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgZWFjaCBzeW1ib2wKQEAgLTQyLDExICszOCwxOCBAQAogLWM6OgogLS1jb21tcz06OgogCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKLQlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KKwlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4gIFRoaXMgb3B0aW9uIHdpbGwgYWZmZWN0IHRoZSBwZXJjZW50YWdlIG9mCisJdGhlIG92ZXJoZWFkIGNvbHVtbi4gIFNlZSAtLXBlcmNlbnRhZ2UgZm9yIG1vcmUgaW5mby4KKy1kOjoKKy0tZHNvcz06OgorCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBkc29zLiBDU1YgdGhhdCB1bmRlcnN0YW5kcworCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLiAgVGhpcyBvcHRpb24gd2lsbCBhZmZlY3QgdGhlIHBlcmNlbnRhZ2Ugb2YKKwl0aGUgb3ZlcmhlYWQgY29sdW1uLiAgU2VlIC0tcGVyY2VudGFnZSBmb3IgbW9yZSBpbmZvLgogLVM6OgogLS1zeW1ib2xzPTo6CiAJT25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzLiBDU1YgdGhhdCB1bmRlcnN0YW5kcwotCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLgorCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLiAgVGhpcyBvcHRpb24gd2lsbCBhZmZlY3QgdGhlIHBlcmNlbnRhZ2Ugb2YKKwl0aGUgb3ZlcmhlYWQgY29sdW1uLiAgU2VlIC0tcGVyY2VudGFnZSBmb3IgbW9yZSBpbmZvLgogCiAtLXN5bWJvbC1maWx0ZXI9OjoKIAlPbmx5IHNob3cgc3ltYm9scyB0aGF0IG1hdGNoIChwYXJ0aWFsbHkpIHdpdGggdGhpcyBmaWx0ZXIuCkBAIC03Niw2ICs3OSwxNSBAQAogCWFib3J0IGNvc3QuIFRoaXMgaXMgdGhlIGdsb2JhbCB3ZWlnaHQuCiAJLSBsb2NhbF93ZWlnaHQ6IExvY2FsIHdlaWdodCB2ZXJzaW9uIG9mIHRoZSB3ZWlnaHQgYWJvdmUuCiAJLSB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gYWJvcnQgZmxhZ3MuCisJLSBvdmVyaGVhZDogT3ZlcmhlYWQgcGVyY2VudGFnZSBvZiBzYW1wbGUKKwktIG92ZXJoZWFkX3N5czogT3ZlcmhlYWQgcGVyY2VudGFnZSBvZiBzYW1wbGUgcnVubmluZyBpbiBzeXN0ZW0gbW9kZQorCS0gb3ZlcmhlYWRfdXM6IE92ZXJoZWFkIHBlcmNlbnRhZ2Ugb2Ygc2FtcGxlIHJ1bm5pbmcgaW4gdXNlciBtb2RlCisJLSBvdmVyaGVhZF9ndWVzdF9zeXM6IE92ZXJoZWFkIHBlcmNlbnRhZ2Ugb2Ygc2FtcGxlIHJ1bm5pbmcgaW4gc3lzdGVtIG1vZGUKKwlvbiBndWVzdCBtYWNoaW5lCisJLSBvdmVyaGVhZF9ndWVzdF91czogT3ZlcmhlYWQgcGVyY2VudGFnZSBvZiBzYW1wbGUgcnVubmluZyBpbiB1c2VyIG1vZGUgb24KKwlndWVzdCBtYWNoaW5lCisJLSBzYW1wbGU6IE51bWJlciBvZiBzYW1wbGUKKwktIHBlcmlvZDogUmF3IG51bWJlciBvZiBldmVudCBjb3VudCBvZiBzYW1wbGUKIAogCUJ5IGRlZmF1bHQsIGNvbW0sIGRzbyBhbmQgc3ltYm9sIGtleXMgYXJlIHVzZWQuCiAJKGkuZS4gLS1zb3J0IGNvbW0sZHNvLHN5bWJvbCkKQEAgLTk1LDYgKzEwNywxNiBAQAogCUFuZCBkZWZhdWx0IHNvcnQga2V5cyBhcmUgY2hhbmdlZCB0byBjb21tLCBkc29fZnJvbSwgc3ltYm9sX2Zyb20sIGRzb190bwogCWFuZCBzeW1ib2xfdG8sIHNlZSAnLS1icmFuY2gtc3RhY2snLgogCistRjo6CistLWZpZWxkcz06OgorCVNwZWNpZnkgb3V0cHV0IGZpZWxkIC0gbXVsdGlwbGUga2V5cyBjYW4gYmUgc3BlY2lmaWVkIGluIENTViBmb3JtYXQuCisJRm9sbG93aW5nIGZpZWxkcyBhcmUgYXZhaWxhYmxlOgorCW92ZXJoZWFkLCBvdmVyaGVhZF9zeXMsIG92ZXJoZWFkX3VzLCBzYW1wbGUgYW5kIHBlcmlvZC4KKwlBbHNvIGl0IGNhbiBjb250YWluIGFueSBzb3J0IGtleShzKS4KKworCUJ5IGRlZmF1bHQsIGV2ZXJ5IHNvcnQga2V5cyBub3Qgc3BlY2lmaWVkIGluIC1GIHdpbGwgYmUgYXBwZW5kZWQKKwlhdXRvbWF0aWNhbGx5LgorCiAtcDo6CiAtLXBhcmVudD08cmVnZXg+OjoKICAgICAgICAgQSByZWdleCBmaWx0ZXIgdG8gaWRlbnRpZnkgcGFyZW50LiBUaGUgcGFyZW50IGlzIGEgY2FsbGVyIG9mIHRoaXMKQEAgLTIzNyw2ICsyNTksMTUgQEAKIAlEbyBub3Qgc2hvdyBlbnRyaWVzIHdoaWNoIGhhdmUgYW4gb3ZlcmhlYWQgdW5kZXIgdGhhdCBwZXJjZW50LgogCShEZWZhdWx0OiAwKS4KIAorLS1wZXJjZW50YWdlOjoKKwlEZXRlcm1pbmUgaG93IHRvIGRpc3BsYXkgdGhlIG92ZXJoZWFkIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZW50cmllcy4KKwlGaWx0ZXJzIGNhbiBiZSBhcHBsaWVkIGJ5IC0tY29tbXMsIC0tZHNvcyBhbmQvb3IgLS1zeW1ib2xzIG9wdGlvbnMgYW5kCisJWm9vbSBvcGVyYXRpb25zIG9uIHRoZSBUVUkgKHRocmVhZCwgZHNvLCBldGMpLgorCisJInJlbGF0aXZlIiBtZWFucyBpdCdzIHJlbGF0aXZlIHRvIGZpbHRlcmVkIGVudHJpZXMgb25seSBzbyB0aGF0IHRoZQorCXN1bSBvZiBzaG93biBlbnRyaWVzIHdpbGwgYmUgYWx3YXlzIDEwMCUuICAiYWJzb2x1dGUiIG1lYW5zIGl0IHJldGFpbnMKKwl0aGUgb3JpZ2luYWwgdmFsdWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgZmlsdGVyIGlzIGFwcGxpZWQuCisKIC0taGVhZGVyOjoKIAlTaG93IGhlYWRlciBpbmZvcm1hdGlvbiBpbiB0aGUgcGVyZi5kYXRhIGZpbGUuICBUaGlzIGluY2x1ZGVzCiAJdmFyaW91cyBpbmZvcm1hdGlvbiBsaWtlIGhvc3RuYW1lLCBPUyBhbmQgcGVyZiB2ZXJzaW9uLCBjcHUvbWVtCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAppbmRleCA5NzZiMDBjLi5kY2ZhNTRjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKQEAgLTExMyw3ICsxMTMsMTcgQEAKIC1zOjoKIC0tc29ydDo6CiAJU29ydCBieSBrZXkocyk6IHBpZCwgY29tbSwgZHNvLCBzeW1ib2wsIHBhcmVudCwgc3JjbGluZSwgd2VpZ2h0LAotCWxvY2FsX3dlaWdodCwgYWJvcnQsIGluX3R4LCB0cmFuc2FjdGlvbgorCWxvY2FsX3dlaWdodCwgYWJvcnQsIGluX3R4LCB0cmFuc2FjdGlvbiwgb3ZlcmhlYWQsIHNhbXBsZSwgcGVyaW9kLgorCVBsZWFzZSBzZWUgZGVzY3JpcHRpb24gb2YgLS1zb3J0IGluIHRoZSBwZXJmLXJlcG9ydCBtYW4gcGFnZS4KKworLS1maWVsZHM9OjoKKwlTcGVjaWZ5IG91dHB1dCBmaWVsZCAtIG11bHRpcGxlIGtleXMgY2FuIGJlIHNwZWNpZmllZCBpbiBDU1YgZm9ybWF0LgorCUZvbGxvd2luZyBmaWVsZHMgYXJlIGF2YWlsYWJsZToKKwlvdmVyaGVhZCwgb3ZlcmhlYWRfc3lzLCBvdmVyaGVhZF91cywgc2FtcGxlIGFuZCBwZXJpb2QuCisJQWxzbyBpdCBjYW4gY29udGFpbiBhbnkgc29ydCBrZXkocykuCisKKwlCeSBkZWZhdWx0LCBldmVyeSBzb3J0IGtleXMgbm90IHNwZWNpZmllZCBpbiAtLWZpZWxkIHdpbGwgYmUgYXBwZW5kZWQKKwlhdXRvbWF0aWNhbGx5LgogCiAtbjo6CiAtLXNob3ctbnItc2FtcGxlczo6CkBAIC0xMjMsMTMgKzEzMywxNiBAQAogCVNob3cgYSBjb2x1bW4gd2l0aCB0aGUgc3VtIG9mIHBlcmlvZHMuCiAKIC0tZHNvczo6Ci0JT25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MuCisJT25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MuICBUaGlzIG9wdGlvbiB3aWxsIGFmZmVjdCB0aGUKKwlwZXJjZW50YWdlIG9mIHRoZSBvdmVyaGVhZCBjb2x1bW4uICBTZWUgLS1wZXJjZW50YWdlIGZvciBtb3JlIGluZm8uCiAKIC0tY29tbXM6OgotCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcy4KKwlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgY29tbXMuICBUaGlzIG9wdGlvbiB3aWxsIGFmZmVjdCB0aGUKKwlwZXJjZW50YWdlIG9mIHRoZSBvdmVyaGVhZCBjb2x1bW4uICBTZWUgLS1wZXJjZW50YWdlIGZvciBtb3JlIGluZm8uCiAKIC0tc3ltYm9sczo6Ci0JT25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzLgorCU9ubHkgY29uc2lkZXIgdGhlc2Ugc3ltYm9scy4gIFRoaXMgb3B0aW9uIHdpbGwgYWZmZWN0IHRoZQorCXBlcmNlbnRhZ2Ugb2YgdGhlIG92ZXJoZWFkIGNvbHVtbi4gIFNlZSAtLXBlcmNlbnRhZ2UgZm9yIG1vcmUgaW5mby4KIAogLU06OgogLS1kaXNhc3NlbWJsZXItc3R5bGU9OjogU2V0IGRpc2Fzc2VtYmxlciBzdHlsZSBmb3Igb2JqZHVtcC4KQEAgLTE2NSw2ICsxNzgsMTUgQEAKIAlEbyBub3Qgc2hvdyBlbnRyaWVzIHdoaWNoIGhhdmUgYW4gb3ZlcmhlYWQgdW5kZXIgdGhhdCBwZXJjZW50LgogCShEZWZhdWx0OiAwKS4KIAorLS1wZXJjZW50YWdlOjoKKwlEZXRlcm1pbmUgaG93IHRvIGRpc3BsYXkgdGhlIG92ZXJoZWFkIHBlcmNlbnRhZ2Ugb2YgZmlsdGVyZWQgZW50cmllcy4KKwlGaWx0ZXJzIGNhbiBiZSBhcHBsaWVkIGJ5IC0tY29tbXMsIC0tZHNvcyBhbmQvb3IgLS1zeW1ib2xzIG9wdGlvbnMgYW5kCisJWm9vbSBvcGVyYXRpb25zIG9uIHRoZSBUVUkgKHRocmVhZCwgZHNvLCBldGMpLgorCisJInJlbGF0aXZlIiBtZWFucyBpdCdzIHJlbGF0aXZlIHRvIGZpbHRlcmVkIGVudHJpZXMgb25seSBzbyB0aGF0IHRoZQorCXN1bSBvZiBzaG93biBlbnRyaWVzIHdpbGwgYmUgYWx3YXlzIDEwMCUuICJhYnNvbHV0ZSIgbWVhbnMgaXQgcmV0YWlucworCXRoZSBvcmlnaW5hbCB2YWx1ZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBmaWx0ZXIgaXMgYXBwbGllZC4KKwogSU5URVJBQ1RJVkUgUFJPTVBUSU5HIEtFWVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIwMCw0ICsyMjIsNCBAQAogCiBTRUUgQUxTTwogLS0tLS0tLS0KLWxpbmtwZXJmOnBlcmYtc3RhdFsxXSwgbGlua3BlcmY6cGVyZi1saXN0WzFdCitsaW5rcGVyZjpwZXJmLXN0YXRbMV0sIGxpbmtwZXJmOnBlcmYtbGlzdFsxXSwgbGlua3BlcmY6cGVyZi1yZXBvcnRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTUFOSUZFU1QgYi90b29scy9wZXJmL01BTklGRVNUCmluZGV4IGMwYzg3YzguLjQ1ZGEyMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTUFOSUZFU1QKKysrIGIvdG9vbHMvcGVyZi9NQU5JRkVTVApAQCAtNyw2ICs3LDggQEAKIHRvb2xzL2luY2x1ZGUvYXNtL2J1Zy5oCiB0b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKIHRvb2xzL2luY2x1ZGUvbGludXgvaGFzaC5oCit0b29scy9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCit0b29scy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKIGluY2x1ZGUvbGludXgvY29uc3QuaAogaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKIGluY2x1ZGUvbGludXgvcmJ0cmVlLmgKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgppbmRleCA4OTVlZGQzLi4wMmYwYTRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCkBAIC0yMjIsMTIgKzIyMiwxMiBAQAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2N0eXBlLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2xpc3QuaAotTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCitMSUJfSCArPSAuLi9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvcG9pc29uLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9yYnRyZWUuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3JidHJlZV9hdWdtZW50ZWQuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCi1MSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvdHlwZXMuaAorTElCX0ggKz0gLi4vaW5jbHVkZS9saW51eC90eXBlcy5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKIExJQl9IICs9IC4uL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC0yNTIsNyArMjUyLDYgQEAKIExJQl9IICs9IHV0aWwvZXZzZWwuaAogTElCX0ggKz0gdXRpbC9ldmxpc3QuaAogTElCX0ggKz0gdXRpbC9leGVjX2NtZC5oCi1MSUJfSCArPSB1dGlsL3R5cGVzLmgKIExJQl9IICs9IHV0aWwvbGV2ZW5zaHRlaW4uaAogTElCX0ggKz0gdXRpbC9tYWNoaW5lLmgKIExJQl9IICs9IHV0aWwvbWFwLmgKQEAgLTM5Nyw3ICszOTYsMTAgQEAKIExJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL2V2c2VsLXJvdW5kdHJpcC1uYW1lLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL2V2c2VsLXRwLXNjaGVkLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL3BtdS5vCitMSUJfT0JKUyArPSAkKE9VVFBVVCl0ZXN0cy9oaXN0c19jb21tb24ubwogTElCX09CSlMgKz0gJChPVVRQVVQpdGVzdHMvaGlzdHNfbGluay5vCitMSUJfT0JKUyArPSAkKE9VVFBVVCl0ZXN0cy9oaXN0c19maWx0ZXIubworTElCX09CSlMgKz0gJChPVVRQVVQpdGVzdHMvaGlzdHNfb3V0cHV0Lm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL3B5dGhvbi11c2UubwogTElCX09CSlMgKz0gJChPVVRQVVQpdGVzdHMvYnBfc2lnbmFsLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL2JwX3NpZ25hbF9vdmVyZmxvdy5vCkBAIC00MTAsMTAgKzQxMiwxMiBAQAogTElCX09CSlMgKz0gJChPVVRQVVQpdGVzdHMvc2FtcGxlLXBhcnNpbmcubwogTElCX09CSlMgKz0gJChPVVRQVVQpdGVzdHMvcGFyc2Utbm8tc2FtcGxlLWlkLWFsbC5vCiBpZm5kZWYgTk9fRFdBUkZfVU5XSU5ECi1pZmVxICgkKEFSQ0gpLHg4NikKK2lmZXEgKCQoQVJDSCksJChmaWx0ZXIgJChBUkNIKSx4ODYgYXJtKSkKIExJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL2R3YXJmLXVud2luZC5vCiBlbmRpZgogZW5kaWYKK0xJQl9PQkpTICs9ICQoT1VUUFVUKXRlc3RzL21tYXAtdGhyZWFkLWxvb2t1cC5vCitMSUJfT0JKUyArPSAkKE9VVFBVVCl0ZXN0cy90aHJlYWQtbWctc2hhcmUubwogCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi1hbm5vdGF0ZS5vCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi1iZW5jaC5vCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvYXJtL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA2N2U5YjNkLi4wOWQ2MjE1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTUsMyArNSwxMCBAQAogaWZuZGVmIE5PX0xJQlVOV0lORAogTElCX09CSlMgKz0gJChPVVRQVVQpYXJjaC8kKEFSQ0gpL3V0aWwvdW53aW5kLWxpYnVud2luZC5vCiBlbmRpZgoraWZuZGVmIE5PX0xJQkRXX0RXQVJGX1VOV0lORAorTElCX09CSlMgKz0gJChPVVRQVVQpYXJjaC8kKEFSQ0gpL3V0aWwvdW53aW5kLWxpYmR3Lm8KK2VuZGlmCitpZm5kZWYgTk9fRFdBUkZfVU5XSU5ECitMSUJfT0JKUyArPSAkKE9VVFBVVClhcmNoLyQoQVJDSCkvdGVzdHMvcmVnc19sb2FkLm8KK0xJQl9PQkpTICs9ICQoT1VUUFVUKWFyY2gvJChBUkNIKS90ZXN0cy9kd2FyZi11bndpbmQubworZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9hcm0vaW5jbHVkZS9wZXJmX3JlZ3MuaCBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vaW5jbHVkZS9wZXJmX3JlZ3MuaAppbmRleCAyYTFjZmRlLi5mNjE5YzljIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gvYXJtL2luY2x1ZGUvcGVyZl9yZWdzLmgKKysrIGIvdG9vbHMvcGVyZi9hcmNoL2FybS9pbmNsdWRlL3BlcmZfcmVncy5oCkBAIC0yLDEwICsyLDE1IEBACiAjZGVmaW5lIEFSQ0hfUEVSRl9SRUdTX0gKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIi4uLy4uL3V0aWwvdHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJmX3JlZ3MuaD4KIAordm9pZCBwZXJmX3JlZ3NfbG9hZCh1NjQgKnJlZ3MpOworCiAjZGVmaW5lIFBFUkZfUkVHU19NQVNLCSgoMVVMTCA8PCBQRVJGX1JFR19BUk1fTUFYKSAtIDEpCisjZGVmaW5lIFBFUkZfUkVHU19NQVgJUEVSRl9SRUdfQVJNX01BWAorI2RlZmluZSBQRVJGX1NBTVBMRV9SRUdTX0FCSQlQRVJGX1NBTVBMRV9SRUdTX0FCSV8zMgorCiAjZGVmaW5lIFBFUkZfUkVHX0lQCVBFUkZfUkVHX0FSTV9QQwogI2RlZmluZSBQRVJGX1JFR19TUAlQRVJGX1JFR19BUk1fU1AKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9kd2FyZi11bndpbmQuYyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvZHdhcmYtdW53aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NzBkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvZHdhcmYtdW53aW5kLmMKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInBlcmZfcmVncy5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgIm1hcC5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAidGVzdHMvdGVzdHMuaCIKKworI2RlZmluZSBTVEFDS19TSVpFIDgxOTIKKworc3RhdGljIGludCBzYW1wbGVfdXN0YWNrKHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgdTY0ICpyZWdzKQoreworCXN0cnVjdCBzdGFja19kdW1wICpzdGFjayA9ICZzYW1wbGUtPnVzZXJfc3RhY2s7CisJc3RydWN0IG1hcCAqbWFwOworCXVuc2lnbmVkIGxvbmcgc3A7CisJdTY0IHN0YWNrX3NpemUsICpidWY7CisKKwlidWYgPSBtYWxsb2MoU1RBQ0tfU0laRSk7CisJaWYgKCFidWYpIHsKKwkJcHJfZGVidWcoImZhaWxlZCB0byBhbGxvY2F0ZSBzYW1wbGUgdXJlZ3MgZGF0YVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzcCA9ICh1bnNpZ25lZCBsb25nKSByZWdzW1BFUkZfUkVHX0FSTV9TUF07CisKKwltYXAgPSBtYXBfZ3JvdXBzX19maW5kKHRocmVhZC0+bWcsIE1BUF9fVkFSSUFCTEUsICh1NjQpIHNwKTsKKwlpZiAoIW1hcCkgeworCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBzdGFjayBtYXBcbiIpOworCQlmcmVlKGJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdGFja19zaXplID0gbWFwLT5lbmQgLSBzcDsKKwlzdGFja19zaXplID0gc3RhY2tfc2l6ZSA+IFNUQUNLX1NJWkUgPyBTVEFDS19TSVpFIDogc3RhY2tfc2l6ZTsKKworCW1lbWNweShidWYsICh2b2lkICopIHNwLCBzdGFja19zaXplKTsKKwlzdGFjay0+ZGF0YSA9IChjaGFyICopIGJ1ZjsKKwlzdGFjay0+c2l6ZSA9IHN0YWNrX3NpemU7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0ZXN0X19hcmNoX3Vud2luZF9zYW1wbGUoc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgcmVnc19kdW1wICpyZWdzID0gJnNhbXBsZS0+dXNlcl9yZWdzOworCXU2NCAqYnVmOworCisJYnVmID0gY2FsbG9jKDEsIHNpemVvZih1NjQpICogUEVSRl9SRUdTX01BWCk7CisJaWYgKCFidWYpIHsKKwkJcHJfZGVidWcoImZhaWxlZCB0byBhbGxvY2F0ZSBzYW1wbGUgdXJlZ3MgZGF0YVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwZXJmX3JlZ3NfbG9hZChidWYpOworCXJlZ3MtPmFiaSAgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSTsKKwlyZWdzLT5yZWdzID0gYnVmOworCXJlZ3MtPm1hc2sgPSBQRVJGX1JFR1NfTUFTSzsKKworCXJldHVybiBzYW1wbGVfdXN0YWNrKHNhbXBsZSwgdGhyZWFkLCBidWYpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9yZWdzX2xvYWQuUyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvcmVnc19sb2FkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5ZTk4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvcmVnc19sb2FkLlMKQEAgLTAsMCArMSw1OCBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2RlZmluZSBSMCAweDAwCisjZGVmaW5lIFIxIDB4MDgKKyNkZWZpbmUgUjIgMHgxMAorI2RlZmluZSBSMyAweDE4CisjZGVmaW5lIFI0IDB4MjAKKyNkZWZpbmUgUjUgMHgyOAorI2RlZmluZSBSNiAweDMwCisjZGVmaW5lIFI3IDB4MzgKKyNkZWZpbmUgUjggMHg0MAorI2RlZmluZSBSOSAweDQ4CisjZGVmaW5lIFNMIDB4NTAKKyNkZWZpbmUgRlAgMHg1OAorI2RlZmluZSBJUCAweDYwCisjZGVmaW5lIFNQIDB4NjgKKyNkZWZpbmUgTFIgMHg3MAorI2RlZmluZSBQQyAweDc4CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB2b2lkIHBlcmZfcmVnc19sb2FkKHU2NCAqcmVncyk7CisgKgorICogVGhpcyBmdW5jdGlvbnMgZmlsbHMgaW4gdGhlICdyZWdzJyBidWZmZXIgZnJvbSB0aGUgYWN0dWFsIHJlZ2lzdGVycyB2YWx1ZXMsCisgKiBpbiB0aGUgd2F5IHRoZSBwZXJmIGJ1aWx0LWluIHVud2luZGluZyB0ZXN0IGV4cGVjdHMgdGhlbToKKyAqIC0gdGhlIFBDIGF0IHRoZSB0aW1lIGF0IHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uIFNpbmNlIHRoaXMgZnVuY3Rpb24KKyAqICAgaXMgY2FsbGVkIHVzaW5nIGEgYmwgaW5zdHJ1Y3Rpb24sIHRoZSBQQyB2YWx1ZSBpcyB0YWtlbiBmcm9tIExSLgorICogVGhlIGJ1aWx0LWluIHVud2luZGluZyB0ZXN0IHRoZW4gdW53aW5kcyB0aGUgY2FsbCBzdGFjayBmcm9tIHRoZSBkd2FyZgorICogaW5mb3JtYXRpb24gaW4gdW53aW5kX19nZXRfZW50cmllcy4KKyAqCisgKiBOb3RlczoKKyAqIC0gdGhlIDggYnl0ZXMgc3RyaWRlIGluIHRoZSByZWdpc3RlcnMgb2Zmc2V0cyBjb21lcyBmcm9tIHRoZSBmYWN0CisgKiB0aGF0IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBpbiBhbiB1NjQgYXJyYXkgKHU2NCAqcmVncyksCisgKiAtIHRoZSByZWdzIGJ1ZmZlciBuZWVkcyB0byBiZSB6ZXJvZWQgYmVmb3JlIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sCisgKiBpbiB0aGlzIGNhc2UgdXNpbmcgYSBjYWxsb2MgaW4gZHdhcmYtdW53aW5kLmMuCisgKi8KKworLnRleHQKKy50eXBlIHBlcmZfcmVnc19sb2FkLCVmdW5jdGlvbgorRU5UUlkocGVyZl9yZWdzX2xvYWQpCisJc3RyIHIwLCBbcjAsICNSMF0KKwlzdHIgcjEsIFtyMCwgI1IxXQorCXN0ciByMiwgW3IwLCAjUjJdCisJc3RyIHIzLCBbcjAsICNSM10KKwlzdHIgcjQsIFtyMCwgI1I0XQorCXN0ciByNSwgW3IwLCAjUjVdCisJc3RyIHI2LCBbcjAsICNSNl0KKwlzdHIgcjcsIFtyMCwgI1I3XQorCXN0ciByOCwgW3IwLCAjUjhdCisJc3RyIHI5LCBbcjAsICNSOV0KKwlzdHIgc2wsIFtyMCwgI1NMXQorCXN0ciBmcCwgW3IwLCAjRlBdCisJc3RyIGlwLCBbcjAsICNJUF0KKwlzdHIgc3AsIFtyMCwgI1NQXQorCXN0ciBsciwgW3IwLCAjTFJdCisJc3RyIGxyLCBbcjAsICNQQ10JLy8gc3RvcmUgcGMgYXMgbHIgaW4gb3JkZXIgdG8gc2tpcCB0aGUgY2FsbAorCSAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0byB0aGlzIGZ1bmN0aW9uCisJbW92IHBjLCBscgorRU5EUFJPQyhwZXJmX3JlZ3NfbG9hZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGliZHcuYyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGliZHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDE3NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL3Vud2luZC1saWJkdy5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlIDxlbGZ1dGlscy9saWJkd2ZsLmg+CisjaW5jbHVkZSAiLi4vLi4vdXRpbC91bndpbmQtbGliZHcuaCIKKyNpbmNsdWRlICIuLi8uLi91dGlsL3BlcmZfcmVncy5oIgorCitib29sIGxpYmR3X19hcmNoX3NldF9pbml0aWFsX3JlZ2lzdGVycyhEd2ZsX1RocmVhZCAqdGhyZWFkLCB2b2lkICphcmcpCit7CisJc3RydWN0IHVud2luZF9pbmZvICp1aSA9IGFyZzsKKwlzdHJ1Y3QgcmVnc19kdW1wICp1c2VyX3JlZ3MgPSAmdWktPnNhbXBsZS0+dXNlcl9yZWdzOworCUR3YXJmX1dvcmQgZHdhcmZfcmVnc1tQRVJGX1JFR19BUk1fTUFYXTsKKworI2RlZmluZSBSRUcocikgKHsJCQkJCQlcCisJRHdhcmZfV29yZCB2YWwgPSAwOwkJCQkJXAorCXBlcmZfcmVnX3ZhbHVlKCZ2YWwsIHVzZXJfcmVncywgUEVSRl9SRUdfQVJNXyMjcik7CVwKKwl2YWw7CQkJCQkJCVwKK30pCisKKwlkd2FyZl9yZWdzWzBdICA9IFJFRyhSMCk7CisJZHdhcmZfcmVnc1sxXSAgPSBSRUcoUjEpOworCWR3YXJmX3JlZ3NbMl0gID0gUkVHKFIyKTsKKwlkd2FyZl9yZWdzWzNdICA9IFJFRyhSMyk7CisJZHdhcmZfcmVnc1s0XSAgPSBSRUcoUjQpOworCWR3YXJmX3JlZ3NbNV0gID0gUkVHKFI1KTsKKwlkd2FyZl9yZWdzWzZdICA9IFJFRyhSNik7CisJZHdhcmZfcmVnc1s3XSAgPSBSRUcoUjcpOworCWR3YXJmX3JlZ3NbOF0gID0gUkVHKFI4KTsKKwlkd2FyZl9yZWdzWzldICA9IFJFRyhSOSk7CisJZHdhcmZfcmVnc1sxMF0gPSBSRUcoUjEwKTsKKwlkd2FyZl9yZWdzWzExXSA9IFJFRyhGUCk7CisJZHdhcmZfcmVnc1sxMl0gPSBSRUcoSVApOworCWR3YXJmX3JlZ3NbMTNdID0gUkVHKFNQKTsKKwlkd2FyZl9yZWdzWzE0XSA9IFJFRyhMUik7CisJZHdhcmZfcmVnc1sxNV0gPSBSRUcoUEMpOworCisJcmV0dXJuIGR3ZmxfdGhyZWFkX3N0YXRlX3JlZ2lzdGVycyh0aHJlYWQsIDAsIFBFUkZfUkVHX0FSTV9NQVgsCisJCQkJCSAgIGR3YXJmX3JlZ3MpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL2FybTY0L01ha2VmaWxlIGIvdG9vbHMvcGVyZi9hcmNoL2FybTY0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTliM2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2FyY2gvYXJtNjQvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitpZm5kZWYgTk9fRFdBUkYKK1BFUkZfSEFWRV9EV0FSRl9SRUdTIDo9IDEKK0xJQl9PQkpTICs9ICQoT1VUUFVUKWFyY2gvJChBUkNIKS91dGlsL2R3YXJmLXJlZ3MubworZW5kaWYKK2lmbmRlZiBOT19MSUJVTldJTkQKK0xJQl9PQkpTICs9ICQoT1VUUFVUKWFyY2gvJChBUkNIKS91dGlsL3Vud2luZC1saWJ1bndpbmQubworZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9hcm02NC9pbmNsdWRlL3BlcmZfcmVncy5oIGIvdG9vbHMvcGVyZi9hcmNoL2FybTY0L2luY2x1ZGUvcGVyZl9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0NDFiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm02NC9pbmNsdWRlL3BlcmZfcmVncy5oCkBAIC0wLDAgKzEsODggQEAKKyNpZm5kZWYgQVJDSF9QRVJGX1JFR1NfSAorI2RlZmluZSBBUkNIX1BFUkZfUkVHU19ICisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZXJmX3JlZ3MuaD4KKworI2RlZmluZSBQRVJGX1JFR1NfTUFTSwkoKDFVTEwgPDwgUEVSRl9SRUdfQVJNNjRfTUFYKSAtIDEpCisjZGVmaW5lIFBFUkZfUkVHX0lQCVBFUkZfUkVHX0FSTTY0X1BDCisjZGVmaW5lIFBFUkZfUkVHX1NQCVBFUkZfUkVHX0FSTTY0X1NQCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGVyZl9yZWdfbmFtZShpbnQgaWQpCit7CisJc3dpdGNoIChpZCkgeworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDA6CisJCXJldHVybiAieDAiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDE6CisJCXJldHVybiAieDEiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDI6CisJCXJldHVybiAieDIiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDM6CisJCXJldHVybiAieDMiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDQ6CisJCXJldHVybiAieDQiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDU6CisJCXJldHVybiAieDUiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDY6CisJCXJldHVybiAieDYiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDc6CisJCXJldHVybiAieDciOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDg6CisJCXJldHVybiAieDgiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDk6CisJCXJldHVybiAieDkiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDEwOgorCQlyZXR1cm4gIngxMCI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMTE6CisJCXJldHVybiAieDExIjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1gxMjoKKwkJcmV0dXJuICJ4MTIiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDEzOgorCQlyZXR1cm4gIngxMyI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMTQ6CisJCXJldHVybiAieDE0IjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1gxNToKKwkJcmV0dXJuICJ4MTUiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDE2OgorCQlyZXR1cm4gIngxNiI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMTc6CisJCXJldHVybiAieDE3IjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1gxODoKKwkJcmV0dXJuICJ4MTgiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDE5OgorCQlyZXR1cm4gIngxOSI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMjA6CisJCXJldHVybiAieDIwIjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1gyMToKKwkJcmV0dXJuICJ4MjEiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDIyOgorCQlyZXR1cm4gIngyMiI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMjM6CisJCXJldHVybiAieDIzIjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1gyNDoKKwkJcmV0dXJuICJ4MjQiOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDI1OgorCQlyZXR1cm4gIngyNSI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMjY6CisJCXJldHVybiAieDI2IjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1gyNzoKKwkJcmV0dXJuICJ4MjciOworCWNhc2UgUEVSRl9SRUdfQVJNNjRfWDI4OgorCQlyZXR1cm4gIngyOCI7CisJY2FzZSBQRVJGX1JFR19BUk02NF9YMjk6CisJCXJldHVybiAieDI5IjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1NQOgorCQlyZXR1cm4gInNwIjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X0xSOgorCQlyZXR1cm4gImxyIjsKKwljYXNlIFBFUkZfUkVHX0FSTTY0X1BDOgorCQlyZXR1cm4gInBjIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIEFSQ0hfUEVSRl9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9hcm02NC91dGlsL2R3YXJmLXJlZ3MuYyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm02NC91dGlsL2R3YXJmLXJlZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDllZmViOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm02NC91dGlsL2R3YXJmLXJlZ3MuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogTWFwcGluZyBvZiBEV0FSRiBkZWJ1ZyByZWdpc3RlciBudW1iZXJzIGludG8gcmVnaXN0ZXIgbmFtZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFdpbGwgRGVhY29uLCBBUk0gTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGR3YXJmLXJlZ3MuaD4KKworc3RydWN0IHB0X3JlZ3NfZHdhcmZudW0geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGR3YXJmbnVtOworfTsKKworI2RlZmluZSBTVFIocykgI3MKKyNkZWZpbmUgUkVHX0RXQVJGTlVNX05BTUUociwgbnVtKSB7Lm5hbWUgPSByLCAuZHdhcmZudW0gPSBudW19CisjZGVmaW5lIEdQUl9EV0FSRk5VTV9OQU1FKG51bSkgXAorCXsubmFtZSA9IFNUUigleCMjbnVtKSwgLmR3YXJmbnVtID0gbnVtfQorI2RlZmluZSBSRUdfRFdBUkZOVU1fRU5EIHsubmFtZSA9IE5VTEwsIC5kd2FyZm51bSA9IDB9CisKKy8qCisgKiBSZWZlcmVuY2U6CisgKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuaWhpMDA1N2IvSUhJMDA1N0JfYWFkd2FyZjY0LnBkZgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHB0X3JlZ3NfZHdhcmZudW0gcmVnZHdhcmZudW1fdGFibGVbXSA9IHsKKwlHUFJfRFdBUkZOVU1fTkFNRSgwKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgyKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgzKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg0KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg1KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg2KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg3KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg4KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSg5KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxMCksCisJR1BSX0RXQVJGTlVNX05BTUUoMTEpLAorCUdQUl9EV0FSRk5VTV9OQU1FKDEyKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxMyksCisJR1BSX0RXQVJGTlVNX05BTUUoMTQpLAorCUdQUl9EV0FSRk5VTV9OQU1FKDE1KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxNiksCisJR1BSX0RXQVJGTlVNX05BTUUoMTcpLAorCUdQUl9EV0FSRk5VTV9OQU1FKDE4KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgxOSksCisJR1BSX0RXQVJGTlVNX05BTUUoMjApLAorCUdQUl9EV0FSRk5VTV9OQU1FKDIxKSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgyMiksCisJR1BSX0RXQVJGTlVNX05BTUUoMjMpLAorCUdQUl9EV0FSRk5VTV9OQU1FKDI0KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgyNSksCisJR1BSX0RXQVJGTlVNX05BTUUoMjYpLAorCUdQUl9EV0FSRk5VTV9OQU1FKDI3KSwKKwlHUFJfRFdBUkZOVU1fTkFNRSgyOCksCisJR1BSX0RXQVJGTlVNX05BTUUoMjkpLAorCVJFR19EV0FSRk5VTV9OQU1FKCIlbHIiLCAzMCksCisJUkVHX0RXQVJGTlVNX05BTUUoIiVzcCIsIDMxKSwKKwlSRUdfRFdBUkZOVU1fRU5ELAorfTsKKworLyoqCisgKiBnZXRfYXJjaF9yZWdzdHIoKSAtIGxvb2t1cCByZWdpc3RlciBuYW1lIGZyb20gaXQncyBEV0FSRiByZWdpc3RlciBudW1iZXIKKyAqIEBuOgl0aGUgRFdBUkYgcmVnaXN0ZXIgbnVtYmVyCisgKgorICogZ2V0X2FyY2hfcmVnc3RyKCkgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcmVnaXN0ZXIgaW4gc3RydWN0CisgKiByZWdkd2FyZm51bV90YWJsZSBmcm9tIGl0J3MgRFdBUkYgcmVnaXN0ZXIgbnVtYmVyLiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90CisgKiBmb3VuZCBpbiB0aGUgdGFibGUsIHRoaXMgcmV0dXJucyBOVUxMOworICovCitjb25zdCBjaGFyICpnZXRfYXJjaF9yZWdzdHIodW5zaWduZWQgaW50IG4pCit7CisJY29uc3Qgc3RydWN0IHB0X3JlZ3NfZHdhcmZudW0gKnJvZmY7CisJZm9yIChyb2ZmID0gcmVnZHdhcmZudW1fdGFibGU7IHJvZmYtPm5hbWUgIT0gTlVMTDsgcm9mZisrKQorCQlpZiAocm9mZi0+ZHdhcmZudW0gPT0gbikKKwkJCXJldHVybiByb2ZmLT5uYW1lOworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL2FybTY0L3V0aWwvdW53aW5kLWxpYnVud2luZC5jIGIvdG9vbHMvcGVyZi9hcmNoL2FybTY0L3V0aWwvdW53aW5kLWxpYnVud2luZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNmVlNDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2FyY2gvYXJtNjQvdXRpbC91bndpbmQtbGlidW53aW5kLmMKQEAgLTAsMCArMSw4MiBAQAorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKyNpbmNsdWRlICJwZXJmX3JlZ3MuaCIKKyNpbmNsdWRlICIuLi8uLi91dGlsL3Vud2luZC5oIgorCitpbnQgbGlidW53aW5kX19hcmNoX3JlZ19pZChpbnQgcmVnbnVtKQoreworCXN3aXRjaCAocmVnbnVtKSB7CisJY2FzZSBVTldfQUFSQ0g2NF9YMDoKKwkJcmV0dXJuIFBFUkZfUkVHX0FSTTY0X1gwOworCWNhc2UgVU5XX0FBUkNINjRfWDE6CisJCXJldHVybiBQRVJGX1JFR19BUk02NF9YMTsKKwljYXNlIFVOV19BQVJDSDY0X1gyOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI7CisJY2FzZSBVTldfQUFSQ0g2NF9YMzoKKwkJcmV0dXJuIFBFUkZfUkVHX0FSTTY0X1gzOworCWNhc2UgVU5XX0FBUkNINjRfWDQ6CisJCXJldHVybiBQRVJGX1JFR19BUk02NF9YNDsKKwljYXNlIFVOV19BQVJDSDY0X1g1OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDU7CisJY2FzZSBVTldfQUFSQ0g2NF9YNjoKKwkJcmV0dXJuIFBFUkZfUkVHX0FSTTY0X1g2OworCWNhc2UgVU5XX0FBUkNINjRfWDc6CisJCXJldHVybiBQRVJGX1JFR19BUk02NF9YNzsKKwljYXNlIFVOV19BQVJDSDY0X1g4OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDg7CisJY2FzZSBVTldfQUFSQ0g2NF9YOToKKwkJcmV0dXJuIFBFUkZfUkVHX0FSTTY0X1g5OworCWNhc2UgVU5XX0FBUkNINjRfWDEwOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDEwOworCWNhc2UgVU5XX0FBUkNINjRfWDExOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDExOworCWNhc2UgVU5XX0FBUkNINjRfWDEyOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDEyOworCWNhc2UgVU5XX0FBUkNINjRfWDEzOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDEzOworCWNhc2UgVU5XX0FBUkNINjRfWDE0OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDE0OworCWNhc2UgVU5XX0FBUkNINjRfWDE1OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDE1OworCWNhc2UgVU5XX0FBUkNINjRfWDE2OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDE2OworCWNhc2UgVU5XX0FBUkNINjRfWDE3OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDE3OworCWNhc2UgVU5XX0FBUkNINjRfWDE4OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDE4OworCWNhc2UgVU5XX0FBUkNINjRfWDE5OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDE5OworCWNhc2UgVU5XX0FBUkNINjRfWDIwOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDIwOworCWNhc2UgVU5XX0FBUkNINjRfWDIxOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDIxOworCWNhc2UgVU5XX0FBUkNINjRfWDIyOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDIyOworCWNhc2UgVU5XX0FBUkNINjRfWDIzOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDIzOworCWNhc2UgVU5XX0FBUkNINjRfWDI0OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI0OworCWNhc2UgVU5XX0FBUkNINjRfWDI1OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI1OworCWNhc2UgVU5XX0FBUkNINjRfWDI2OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI2OworCWNhc2UgVU5XX0FBUkNINjRfWDI3OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI3OworCWNhc2UgVU5XX0FBUkNINjRfWDI4OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI4OworCWNhc2UgVU5XX0FBUkNINjRfWDI5OgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfWDI5OworCWNhc2UgVU5XX0FBUkNINjRfWDMwOgorCQlyZXR1cm4gUEVSRl9SRUdfQVJNNjRfTFI7CisJY2FzZSBVTldfQUFSQ0g2NF9TUDoKKwkJcmV0dXJuIFBFUkZfUkVHX0FSTTY0X1NQOworCWNhc2UgVU5XX0FBUkNINjRfUEM6CisJCXJldHVybiBQRVJGX1JFR19BUk02NF9QQzsKKwlkZWZhdWx0OgorCQlwcl9lcnIoInVud2luZDogaW52YWxpZCByZWcgaWQgJWRcbiIsIHJlZ251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni9pbmNsdWRlL3BlcmZfcmVncy5oIGIvdG9vbHMvcGVyZi9hcmNoL3g4Ni9pbmNsdWRlL3BlcmZfcmVncy5oCmluZGV4IGZjODE5Y2EuLjdkZjUxN2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvaW5jbHVkZS9wZXJmX3JlZ3MuaAorKysgYi90b29scy9wZXJmL2FyY2gveDg2L2luY2x1ZGUvcGVyZl9yZWdzLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIEFSQ0hfUEVSRl9SRUdTX0gKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIi4uLy4uL3V0aWwvdHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJmX3JlZ3MuaD4KIAogdm9pZCBwZXJmX3JlZ3NfbG9hZCh1NjQgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni90ZXN0cy9kd2FyZi11bndpbmQuYyBiL3Rvb2xzL3BlcmYvYXJjaC94ODYvdGVzdHMvZHdhcmYtdW53aW5kLmMKaW5kZXggODNiYzIzOC4uOWY4OWY4OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni90ZXN0cy9kd2FyZi11bndpbmQuYworKysgYi90b29scy9wZXJmL2FyY2gveDg2L3Rlc3RzL2R3YXJmLXVud2luZC5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIAlzcCA9ICh1bnNpZ25lZCBsb25nKSByZWdzW1BFUkZfUkVHX1g4Nl9TUF07CiAKLQltYXAgPSBtYXBfZ3JvdXBzX19maW5kKCZ0aHJlYWQtPm1nLCBNQVBfX1ZBUklBQkxFLCAodTY0KSBzcCk7CisJbWFwID0gbWFwX2dyb3Vwc19fZmluZCh0aHJlYWQtPm1nLCBNQVBfX1ZBUklBQkxFLCAodTY0KSBzcCk7CiAJaWYgKCFtYXApIHsKIAkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgc3RhY2sgbWFwXG4iKTsKIAkJZnJlZShidWYpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni91dGlsL3RzYy5jIGIvdG9vbHMvcGVyZi9hcmNoL3g4Ni91dGlsL3RzYy5jCmluZGV4IGIyNTE5ZTQuLjQwMDIxZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvdXRpbC90c2MuYworKysgYi90b29scy9wZXJmL2FyY2gveDg2L3V0aWwvdHNjLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgotI2luY2x1ZGUgIi4uLy4uL3V0aWwvdHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgIi4uLy4uL3V0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ0c2MuaCIKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3g4Ni91dGlsL3RzYy5oIGIvdG9vbHMvcGVyZi9hcmNoL3g4Ni91dGlsL3RzYy5oCmluZGV4IGEyNGRlYzguLjJhZmZlMDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYXJjaC94ODYvdXRpbC90c2MuaAorKysgYi90b29scy9wZXJmL2FyY2gveDg2L3V0aWwvdHNjLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIFRPT0xTX1BFUkZfQVJDSF9YODZfVVRJTF9UU0NfSF9fCiAjZGVmaW5lIFRPT0xTX1BFUkZfQVJDSF9YODZfVVRJTF9UU0NfSF9fCiAKLSNpbmNsdWRlICIuLi8uLi91dGlsL3R5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHBlcmZfdHNjX2NvbnZlcnNpb24gewogCXUxNiB0aW1lX3NoaWZ0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCAwZGE2MDNiLi5kMzBkMmMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNDYsNyArNDYsNyBAQAogfTsKIAogc3RhdGljIGludCBwZXJmX2V2c2VsX19hZGRfc2FtcGxlKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQkgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJCSAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUgX19tYXliZV91bnVzZWQsCiAJCQkJICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCiAJCQkJICBzdHJ1Y3QgcGVyZl9hbm5vdGF0ZSAqYW5uKQogewpAQCAtNzAsNyArNzAsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IGhpc3RfZW50cnlfX2luY19hZGRyX3NhbXBsZXMoaGUsIGV2c2VsLT5pZHgsIGFsLT5hZGRyKTsKLQlldnNlbC0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IHNhbXBsZS0+cGVyaW9kOwogCWhpc3RzX19pbmNfbnJfZXZlbnRzKCZldnNlbC0+aGlzdHMsIFBFUkZfUkVDT1JEX1NBTVBMRSk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IDIwNGZmZmUuLjhiZmY1NDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtNjAsNyArNjAsNiBAQAogI2RlZmluZSBkYXRhX19mb3JfZWFjaF9maWxlKGksIGQpIGRhdGFfX2Zvcl9lYWNoX2ZpbGVfc3RhcnQoaSwgZCwgMCkKICNkZWZpbmUgZGF0YV9fZm9yX2VhY2hfZmlsZV9uZXcoaSwgZCkgZGF0YV9fZm9yX2VhY2hfZmlsZV9zdGFydChpLCBkLCAxKQogCi1zdGF0aWMgY2hhciBkaWZmX19kZWZhdWx0X3NvcnRfb3JkZXJbXSA9ICJkc28sc3ltYm9sIjsKIHN0YXRpYyBib29sIGZvcmNlOwogc3RhdGljIGJvb2wgc2hvd19wZXJpb2Q7CiBzdGF0aWMgYm9vbCBzaG93X2Zvcm11bGE7CkBAIC0yMjAsNyArMjE5LDggQEAKIAogc3RhdGljIGRvdWJsZSBwZXJpb2RfcGVyY2VudChzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBwZXJpb2QpCiB7Ci0JdTY0IHRvdGFsID0gaGUtPmhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2Q7CisJdTY0IHRvdGFsID0gaGlzdHNfX3RvdGFsX3BlcmlvZChoZS0+aGlzdHMpOworCiAJcmV0dXJuIChwZXJpb2QgKiAxMDAuMCkgLyB0b3RhbDsKIH0KIApAQCAtMjU5LDExICsyNTksMTggQEAKIHN0YXRpYyBpbnQgZm9ybXVsYV9kZWx0YShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHN0cnVjdCBoaXN0X2VudHJ5ICpwYWlyLAogCQkJIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CisJdTY0IGhlX3RvdGFsID0gaGUtPmhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2Q7CisJdTY0IHBhaXJfdG90YWwgPSBwYWlyLT5oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOworCisJaWYgKHN5bWJvbF9jb25mLmZpbHRlcl9yZWxhdGl2ZSkgeworCQloZV90b3RhbCA9IGhlLT5oaXN0cy0+c3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZDsKKwkJcGFpcl90b3RhbCA9IHBhaXItPmhpc3RzLT5zdGF0cy50b3RhbF9ub25fZmlsdGVyZWRfcGVyaW9kOworCX0KIAlyZXR1cm4gc2NucHJpbnRmKGJ1Ziwgc2l6ZSwKIAkJCSAiKCUiIFBSSXU2NCAiICogMTAwIC8gJSIgUFJJdTY0ICIpIC0gIgogCQkJICIoJSIgUFJJdTY0ICIgKiAxMDAgLyAlIiBQUkl1NjQgIikiLAotCQkJICBwYWlyLT5zdGF0LnBlcmlvZCwgcGFpci0+aGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCwKLQkJCSAgaGUtPnN0YXQucGVyaW9kLCBoZS0+aGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCk7CisJCQkgcGFpci0+c3RhdC5wZXJpb2QsIHBhaXJfdG90YWwsCisJCQkgaGUtPnN0YXQucGVyaW9kLCBoZV90b3RhbCk7CiB9CiAKIHN0YXRpYyBpbnQgZm9ybXVsYV9yYXRpbyhzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHN0cnVjdCBoaXN0X2VudHJ5ICpwYWlyLApAQCAtMzI3LDE2ICszMzQsMjIgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChhbC5maWx0ZXJlZCkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoaGlzdHNfX2FkZF9lbnRyeSgmZXZzZWwtPmhpc3RzLCAmYWwsIHNhbXBsZS0+cGVyaW9kLAogCQkJICAgICBzYW1wbGUtPndlaWdodCwgc2FtcGxlLT50cmFuc2FjdGlvbikpIHsKIAkJcHJfd2FybmluZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIHBlcmlvZCwgc2tpcHBpbmcgZXZlbnRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCisJLyoKKwkgKiBUaGUgdG90YWxfcGVyaW9kIGlzIHVwZGF0ZWQgaGVyZSBiZWZvcmUgZ29pbmcgdG8gdGhlIG91dHB1dAorCSAqIHRyZWUgc2luY2Ugbm9ybWFsbHkgb25seSB0aGUgYmFzZWxpbmUgaGlzdHMgd2lsbCBjYWxsCisJICogaGlzdHNfX291dHB1dF9yZXNvcnQoKSBhbmQgcHJlY29tcHV0ZSBuZWVkcyB0aGUgdG90YWwKKwkgKiBwZXJpb2QgaW4gb3JkZXIgdG8gc29ydCBlbnRyaWVzIGJ5IHBlcmNlbnRhZ2UgZGVsdGEuCisJICovCiAJZXZzZWwtPmhpc3RzLnN0YXRzLnRvdGFsX3BlcmlvZCArPSBzYW1wbGUtPnBlcmlvZDsKKwlpZiAoIWFsLmZpbHRlcmVkKQorCQlldnNlbC0+aGlzdHMuc3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZCArPSBzYW1wbGUtPnBlcmlvZDsKKwogCXJldHVybiAwOwogfQogCkBAIC01NjQsOCArNTc3LDcgQEAKIAloaXN0cy0+ZW50cmllcyA9IFJCX1JPT1Q7CiAJbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOwogCi0JaGlzdHMtPm5yX2VudHJpZXMgPSAwOwotCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgPSAwOworCWhpc3RzX19yZXNldF9zdGF0cyhoaXN0cyk7CiAJaGlzdHNfX3Jlc2V0X2NvbF9sZW4oaGlzdHMpOwogCiAJd2hpbGUgKG5leHQgIT0gTlVMTCkgewpAQCAtNTc1LDcgKzU4NywxMCBAQAogCQluZXh0ID0gcmJfbmV4dCgmaGUtPnJiX25vZGVfaW4pOwogCiAJCWluc2VydF9oaXN0X2VudHJ5X2J5X2NvbXB1dGUoJmhpc3RzLT5lbnRyaWVzLCBoZSwgY29tcHV0ZSk7Ci0JCWhpc3RzX19pbmNfbnJfZW50cmllcyhoaXN0cywgaGUpOworCQloaXN0c19faW5jX3N0YXRzKGhpc3RzLCBoZSk7CisKKwkJaWYgKCFoZS0+ZmlsdGVyZWQpCisJCQloaXN0c19fY2FsY19jb2xfbGVuKGhpc3RzLCBoZSk7CiAJfQogfQogCkBAIC03MjUsMjAgKzc0MCwyNCBAQAogCU9QVF9TVFJJTkcoJ1MnLCAic3ltYm9scyIsICZzeW1ib2xfY29uZi5zeW1fbGlzdF9zdHIsICJzeW1ib2xbLHN5bWJvbC4uLl0iLAogCQkgICAib25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzIiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKLQkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKKwkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQsIGNwdSwgc3JjbGluZSwgLi4uIgorCQkgICAiIFBsZWFzZSByZWZlciB0aGUgbWFuIHBhZ2UgZm9yIHRoZSBjb21wbGV0ZSBsaXN0LiIpLAogCU9QVF9TVFJJTkcoJ3QnLCAiZmllbGQtc2VwYXJhdG9yIiwgJnN5bWJvbF9jb25mLmZpZWxkX3NlcCwgInNlcGFyYXRvciIsCiAJCSAgICJzZXBhcmF0b3IgZm9yIGNvbHVtbnMsIG5vIHNwYWNlcyB3aWxsIGJlIGFkZGVkIGJldHdlZW4gIgogCQkgICAiY29sdW1ucyAnLicgaXMgcmVzZXJ2ZWQuIiksCiAJT1BUX1NUUklORygwLCAic3ltZnMiLCAmc3ltYm9sX2NvbmYuc3ltZnMsICJkaXJlY3RvcnkiLAogCQkgICAgIkxvb2sgZm9yIGZpbGVzIHdpdGggc3ltYm9scyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSIpLAogCU9QVF9VSU5URUdFUignbycsICJvcmRlciIsICZzb3J0X2NvbXB1dGUsICJTcGVjaWZ5IGNvbXB1dGUgc29ydGluZy4iKSwKKwlPUFRfQ0FMTEJBQ0soMCwgInBlcmNlbnRhZ2UiLCBOVUxMLCAicmVsYXRpdmV8YWJzb2x1dGUiLAorCQkgICAgICJIb3cgdG8gZGlzcGxheSBwZXJjZW50YWdlIG9mIGZpbHRlcmVkIGVudHJpZXMiLCBwYXJzZV9maWx0ZXJfcGVyY2VudGFnZSksCiAJT1BUX0VORCgpCiB9OwogCiBzdGF0aWMgZG91YmxlIGJhc2VsaW5lX3BlcmNlbnQoc3RydWN0IGhpc3RfZW50cnkgKmhlKQogewotCXN0cnVjdCBoaXN0cyAqaGlzdHMgPSBoZS0+aGlzdHM7Ci0JcmV0dXJuIDEwMC4wICogaGUtPnN0YXQucGVyaW9kIC8gaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZDsKKwl1NjQgdG90YWwgPSBoaXN0c19fdG90YWxfcGVyaW9kKGhlLT5oaXN0cyk7CisKKwlyZXR1cm4gMTAwLjAgKiBoZS0+c3RhdC5wZXJpb2QgLyB0b3RhbDsKIH0KIAogc3RhdGljIGludCBocHBfX2NvbG9yX2Jhc2VsaW5lKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwKQEAgLTExMjAsNyArMTEzOSw4IEBACiAKIGludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX21heWJlX3VudXNlZCkKIHsKLQlzb3J0X29yZGVyID0gZGlmZl9fZGVmYXVsdF9zb3J0X29yZGVyOworCXBlcmZfY29uZmlnKHBlcmZfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZGlmZl91c2FnZSwgMCk7CiAKIAlpZiAoc3ltYm9sX19pbml0KCkgPCAwKQpAQCAtMTEzMSw2ICsxMTUxLDggQEAKIAogCXVpX2luaXQoKTsKIAorCXNvcnRfX21vZGUgPSBTT1JUX01PREVfX0RJRkY7CisKIAlpZiAoc2V0dXBfc29ydGluZygpIDwgMCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGRpZmZfdXNhZ2UsIG9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKaW5kZXggM2E3Mzg3NS4uNmEzYWYwMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKLQl0aHJlYWQgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBzYW1wbGUtPnBpZCwgc2FtcGxlLT5waWQpOworCXRocmVhZCA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CiAJCXByX2VycigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCSAgICAgICBldmVudC0+aGVhZGVyLnR5cGUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggOTI5NDYyYS4uYmVmMzM3NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGF0YS5oIgorI2luY2x1ZGUgInV0aWwvY3B1bWFwLmgiCiAKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCiAKQEAgLTMxLDkgKzMyLDYgQEAKIAogc3RhdGljIGJvb2wJCQlyYXdfaXA7CiAKLXN0YXRpYyBpbnQJCQkqY3B1bm9kZV9tYXA7Ci1zdGF0aWMgaW50CQkJbWF4X2NwdV9udW07Ci0KIHN0cnVjdCBhbGxvY19zdGF0IHsKIAl1NjQJY2FsbF9zaXRlOwogCXU2NAlwdHI7CkBAIC01NSw3NiArNTMsNiBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfcmVxdWVzdGVkLCB0b3RhbF9hbGxvY2F0ZWQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBucl9hbGxvY3MsIG5yX2Nyb3NzX2FsbG9jczsKIAotI2RlZmluZSBQQVRIX1NZU19OT0RFCSIvc3lzL2RldmljZXMvc3lzdGVtL25vZGUiCi0KLXN0YXRpYyBpbnQgaW5pdF9jcHVub2RlX21hcCh2b2lkKQotewotCUZJTEUgKmZwOwotCWludCBpLCBlcnIgPSAtMTsKLQotCWZwID0gZm9wZW4oIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2tlcm5lbF9tYXgiLCAiciIpOwotCWlmICghZnApIHsKLQkJbWF4X2NwdV9udW0gPSA0MDk2OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZnNjYW5mKGZwLCAiJWQiLCAmbWF4X2NwdV9udW0pIDwgMSkgewotCQlwcl9lcnIoIkZhaWxlZCB0byByZWFkICdrZXJuZWxfbWF4JyBmcm9tIHN5c2ZzIik7Ci0JCWdvdG8gb3V0X2Nsb3NlOwotCX0KLQotCW1heF9jcHVfbnVtKys7Ci0KLQljcHVub2RlX21hcCA9IGNhbGxvYyhtYXhfY3B1X251bSwgc2l6ZW9mKGludCkpOwotCWlmICghY3B1bm9kZV9tYXApIHsKLQkJcHJfZXJyKCIlczogY2FsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2NwdV9udW07IGkrKykKLQkJY3B1bm9kZV9tYXBbaV0gPSAtMTsKLQotCWVyciA9IDA7Ci1vdXRfY2xvc2U6Ci0JZmNsb3NlKGZwKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNldHVwX2NwdW5vZGVfbWFwKHZvaWQpCi17Ci0Jc3RydWN0IGRpcmVudCAqZGVudDEsICpkZW50MjsKLQlESVIgKmRpcjEsICpkaXIyOwotCXVuc2lnbmVkIGludCBjcHUsIG1lbTsKLQljaGFyIGJ1ZltQQVRIX01BWF07Ci0KLQlpZiAoaW5pdF9jcHVub2RlX21hcCgpKQotCQlyZXR1cm4gLTE7Ci0KLQlkaXIxID0gb3BlbmRpcihQQVRIX1NZU19OT0RFKTsKLQlpZiAoIWRpcjEpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKChkZW50MSA9IHJlYWRkaXIoZGlyMSkpICE9IE5VTEwpIHsKLQkJaWYgKGRlbnQxLT5kX3R5cGUgIT0gRFRfRElSIHx8Ci0JCSAgICBzc2NhbmYoZGVudDEtPmRfbmFtZSwgIm5vZGUldSIsICZtZW0pIDwgMSkKLQkJCWNvbnRpbnVlOwotCi0JCXNucHJpbnRmKGJ1ZiwgUEFUSF9NQVgsICIlcy8lcyIsIFBBVEhfU1lTX05PREUsIGRlbnQxLT5kX25hbWUpOwotCQlkaXIyID0gb3BlbmRpcihidWYpOwotCQlpZiAoIWRpcjIpCi0JCQljb250aW51ZTsKLQkJd2hpbGUgKChkZW50MiA9IHJlYWRkaXIoZGlyMikpICE9IE5VTEwpIHsKLQkJCWlmIChkZW50Mi0+ZF90eXBlICE9IERUX0xOSyB8fAotCQkJICAgIHNzY2FuZihkZW50Mi0+ZF9uYW1lLCAiY3B1JXUiLCAmY3B1KSA8IDEpCi0JCQkJY29udGludWU7Ci0JCQljcHVub2RlX21hcFtjcHVdID0gbWVtOwotCQl9Ci0JCWNsb3NlZGlyKGRpcjIpOwotCX0KLQljbG9zZWRpcihkaXIxKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpbnNlcnRfYWxsb2Nfc3RhdCh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwgdW5zaWduZWQgbG9uZyBwdHIsCiAJCQkgICAgIGludCBieXRlc19yZXEsIGludCBieXRlc19hbGxvYywgaW50IGNwdSkKIHsKQEAgLTIzNSw3ICsxNjMsNyBAQAogCWludCByZXQgPSBwZXJmX2V2c2VsX19wcm9jZXNzX2FsbG9jX2V2ZW50KGV2c2VsLCBzYW1wbGUpOwogCiAJaWYgKCFyZXQpIHsKLQkJaW50IG5vZGUxID0gY3B1bm9kZV9tYXBbc2FtcGxlLT5jcHVdLAorCQlpbnQgbm9kZTEgPSBjcHVfX2dldF9ub2RlKHNhbXBsZS0+Y3B1KSwKIAkJICAgIG5vZGUyID0gcGVyZl9ldnNlbF9faW50dmFsKGV2c2VsLCBzYW1wbGUsICJub2RlIik7CiAKIAkJaWYgKG5vZGUxICE9IG5vZGUyKQpAQCAtMzA3LDcgKzIzNSw3IEBACiAJCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwgc2FtcGxlLT5waWQsCi0JCQkJCQkJc2FtcGxlLT5waWQpOworCQkJCQkJCXNhbXBsZS0+dGlkKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCkBAIC03NTYsMTEgKzY4NCwxMyBAQAogCU9QVF9CT09MRUFOKDAsICJyYXctaXAiLCAmcmF3X2lwLCAic2hvdyByYXcgaXAgaW5zdGVhZCBvZiBzeW1ib2wiKSwKIAlPUFRfRU5EKCkKIAl9OwotCWNvbnN0IGNoYXIgKiBjb25zdCBrbWVtX3VzYWdlW10gPSB7Ci0JCSJwZXJmIGttZW0gWzxvcHRpb25zPl0ge3JlY29yZHxzdGF0fSIsCisJY29uc3QgY2hhciAqY29uc3Qga21lbV9zdWJjb21tYW5kc1tdID0geyAicmVjb3JkIiwgInN0YXQiLCBOVUxMIH07CisJY29uc3QgY2hhciAqa21lbV91c2FnZVtdID0geworCQlOVUxMLAogCQlOVUxMCiAJfTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBrbWVtX29wdGlvbnMsIGttZW1fdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX3N1YmNvbW1hbmQoYXJnYywgYXJndiwga21lbV9vcHRpb25zLAorCQkJCQlrbWVtX3N1YmNvbW1hbmRzLCBrbWVtX3VzYWdlLCAwKTsKIAogCWlmICghYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGttZW1fdXNhZ2UsIGttZW1fb3B0aW9ucyk7CkBAIC03NzAsNyArNzAwLDcgQEAKIAlpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7CiAJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzdGF0IikpIHsKLQkJaWYgKHNldHVwX2NwdW5vZGVfbWFwKCkpCisJCWlmIChjcHVfX3NldHVwX2NwdW5vZGVfbWFwKCkpCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmNhbGxlcl9zb3J0KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCmluZGV4IGM4NTJjN2EuLjYxNDhhZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwpAQCAtOTYxLDggKzk2MSwxMCBAQAogCQkicGVyZiBsb2NrIGluZm8gWzxvcHRpb25zPl0iLAogCQlOVUxMCiAJfTsKLQljb25zdCBjaGFyICogY29uc3QgbG9ja191c2FnZVtdID0gewotCQkicGVyZiBsb2NrIFs8b3B0aW9ucz5dIHtyZWNvcmR8cmVwb3J0fHNjcmlwdHxpbmZvfSIsCisJY29uc3QgY2hhciAqY29uc3QgbG9ja19zdWJjb21tYW5kc1tdID0geyAicmVjb3JkIiwgInJlcG9ydCIsICJzY3JpcHQiLAorCQkJCQkJICJpbmZvIiwgTlVMTCB9OworCWNvbnN0IGNoYXIgKmxvY2tfdXNhZ2VbXSA9IHsKKwkJTlVMTCwKIAkJTlVMTAogCX07CiAJY29uc3QgY2hhciAqIGNvbnN0IHJlcG9ydF91c2FnZVtdID0gewpAQCAtOTc2LDggKzk3OCw4IEBACiAJZm9yIChpID0gMDsgaSA8IExPQ0tIQVNIX1NJWkU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQobG9ja2hhc2hfdGFibGUgKyBpKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGxvY2tfb3B0aW9ucywgbG9ja191c2FnZSwKLQkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfc3ViY29tbWFuZChhcmdjLCBhcmd2LCBsb2NrX29wdGlvbnMsIGxvY2tfc3ViY29tbWFuZHMsCisJCQkJCWxvY2tfdXNhZ2UsIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCWlmICghYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxvY2tfdXNhZ2UsIGxvY2tfb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1tZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1tZW0uYwppbmRleCAyZTNhZGU2OS4uNGExYTZjOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLW1lbS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1tZW0uYwpAQCAtMjEsMTEgKzIxLDYgQEAKIAlERUNMQVJFX0JJVE1BUChjcHVfYml0bWFwLCBNQVhfTlJfQ1BVUyk7CiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1lbV91c2FnZVtdID0gewotCSJwZXJmIG1lbSBbPG9wdGlvbnM+XSB7cmVjb3JkIDxjb21tYW5kPiB8cmVwb3J0fSIsCi0JTlVMTAotfTsKLQogc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWludCByZWNfYXJnYywgaSA9IDAsIGo7CkBAIC0yMjAsOSArMjE1LDE1IEBACiAJCSAgICIgYmV0d2VlbiBjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKIAlPUFRfRU5EKCkKIAl9OworCWNvbnN0IGNoYXIgKmNvbnN0IG1lbV9zdWJjb21tYW5kc1tdID0geyAicmVjb3JkIiwgInJlcG9ydCIsIE5VTEwgfTsKKwljb25zdCBjaGFyICptZW1fdXNhZ2VbXSA9IHsKKwkJTlVMTCwKKwkJTlVMTAorCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBtZW1fb3B0aW9ucywgbWVtX3VzYWdlLAotCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX3N1YmNvbW1hbmQoYXJnYywgYXJndiwgbWVtX29wdGlvbnMsIG1lbV9zdWJjb21tYW5kcywKKwkJCQkJbWVtX3VzYWdlLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAogCWlmICghYXJnYyB8fCAhKHN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpIHx8IG1lbV9vcGVyYXRpb24pKQogCQl1c2FnZV93aXRoX29wdGlvbnMobWVtX3VzYWdlLCBtZW1fb3B0aW9ucyk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggOGNlNjJlZi4uZTRjODViOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtMzAsMzcgKzMwLDYgQEAKICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKLSNpZm5kZWYgSEFWRV9PTl9FWElUX1NVUFBPUlQKLSNpZm5kZWYgQVRFWElUX01BWAotI2RlZmluZSBBVEVYSVRfTUFYIDMyCi0jZW5kaWYKLXN0YXRpYyBpbnQgX19vbl9leGl0X2NvdW50ID0gMDsKLXR5cGVkZWYgdm9pZCAoKm9uX2V4aXRfZnVuY190KSAoaW50LCB2b2lkICopOwotc3RhdGljIG9uX2V4aXRfZnVuY190IF9fb25fZXhpdF9mdW5jc1tBVEVYSVRfTUFYXTsKLXN0YXRpYyB2b2lkICpfX29uX2V4aXRfYXJnc1tBVEVYSVRfTUFYXTsKLXN0YXRpYyBpbnQgX19leGl0Y29kZSA9IDA7Ci1zdGF0aWMgdm9pZCBfX2hhbmRsZV9vbl9leGl0X2Z1bmNzKHZvaWQpOwotc3RhdGljIGludCBvbl9leGl0KG9uX2V4aXRfZnVuY190IGZ1bmN0aW9uLCB2b2lkICphcmcpOwotI2RlZmluZSBleGl0KHgpIChleGl0KShfX2V4aXRjb2RlID0gKHgpKQotCi1zdGF0aWMgaW50IG9uX2V4aXQob25fZXhpdF9mdW5jX3QgZnVuY3Rpb24sIHZvaWQgKmFyZykKLXsKLQlpZiAoX19vbl9leGl0X2NvdW50ID09IEFURVhJVF9NQVgpCi0JCXJldHVybiAtRU5PTUVNOwotCWVsc2UgaWYgKF9fb25fZXhpdF9jb3VudCA9PSAwKQotCQlhdGV4aXQoX19oYW5kbGVfb25fZXhpdF9mdW5jcyk7Ci0JX19vbl9leGl0X2Z1bmNzW19fb25fZXhpdF9jb3VudF0gPSBmdW5jdGlvbjsKLQlfX29uX2V4aXRfYXJnc1tfX29uX2V4aXRfY291bnQrK10gPSBhcmc7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faGFuZGxlX29uX2V4aXRfZnVuY3Modm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgX19vbl9leGl0X2NvdW50OyBpKyspCi0JCV9fb25fZXhpdF9mdW5jc1tpXSAoX19leGl0Y29kZSwgX19vbl9leGl0X2FyZ3NbaV0pOwotfQotI2VuZGlmCiAKIHN0cnVjdCByZWNvcmQgewogCXN0cnVjdCBwZXJmX3Rvb2wJdG9vbDsKQEAgLTE0NywyOSArMTE2LDE5IEBACiB7CiAJaWYgKHNpZyA9PSBTSUdDSExEKQogCQljaGlsZF9maW5pc2hlZCA9IDE7CisJZWxzZQorCQlzaWduciA9IHNpZzsKIAogCWRvbmUgPSAxOwotCXNpZ25yID0gc2lnOwogfQogCi1zdGF0aWMgdm9pZCByZWNvcmRfX3NpZ19leGl0KGludCBleGl0X3N0YXR1cyBfX21heWJlX3VudXNlZCwgdm9pZCAqYXJnKQorc3RhdGljIHZvaWQgcmVjb3JkX19zaWdfZXhpdCh2b2lkKQogewotCXN0cnVjdCByZWNvcmQgKnJlYyA9IGFyZzsKLQlpbnQgc3RhdHVzOwotCi0JaWYgKHJlYy0+ZXZsaXN0LT53b3JrbG9hZC5waWQgPiAwKSB7Ci0JCWlmICghY2hpbGRfZmluaXNoZWQpCi0JCQlraWxsKHJlYy0+ZXZsaXN0LT53b3JrbG9hZC5waWQsIFNJR1RFUk0pOwotCi0JCXdhaXQoJnN0YXR1cyk7Ci0JCWlmIChXSUZTSUdOQUxFRChzdGF0dXMpKQotCQkJcHNpZ25hbChXVEVSTVNJRyhzdGF0dXMpLCByZWMtPnByb2duYW1lKTsKLQl9Ci0KLQlpZiAoc2lnbnIgPT0gLTEgfHwgc2lnbnIgPT0gU0lHVVNSMSkKKwlpZiAoc2lnbnIgPT0gLTEpCiAJCXJldHVybjsKIAogCXNpZ25hbChzaWduciwgU0lHX0RGTCk7CisJcmFpc2Uoc2lnbnIpOwogfQogCiBzdGF0aWMgaW50IHJlY29yZF9fb3BlbihzdHJ1Y3QgcmVjb3JkICpyZWMpCkBAIC0yNDMsMjcgKzIwMiw2IEBACiAJCQkJCSAgICAgIHNpemUsICZidWlsZF9pZF9fbWFya19kc29faGl0X29wcyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlY29yZF9fZXhpdChpbnQgc3RhdHVzLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHJlY29yZCAqcmVjID0gYXJnOwotCXN0cnVjdCBwZXJmX2RhdGFfZmlsZSAqZmlsZSA9ICZyZWMtPmZpbGU7Ci0KLQlpZiAoc3RhdHVzICE9IDApCi0JCXJldHVybjsKLQotCWlmICghZmlsZS0+aXNfcGlwZSkgewotCQlyZWMtPnNlc3Npb24tPmhlYWRlci5kYXRhX3NpemUgKz0gcmVjLT5ieXRlc193cml0dGVuOwotCi0JCWlmICghcmVjLT5ub19idWlsZGlkKQotCQkJcHJvY2Vzc19idWlsZGlkcyhyZWMpOwotCQlwZXJmX3Nlc3Npb25fX3dyaXRlX2hlYWRlcihyZWMtPnNlc3Npb24sIHJlYy0+ZXZsaXN0LAotCQkJCQkgICBmaWxlLT5mZCwgdHJ1ZSk7Ci0JCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHJlYy0+c2Vzc2lvbik7Ci0JCXBlcmZfZXZsaXN0X19kZWxldGUocmVjLT5ldmxpc3QpOwotCQlzeW1ib2xfX2V4aXQoKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfZ3Vlc3Rfb3Moc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKQEAgLTM0NCwxOCArMjgyLDE5IEBACiAgKiBpZiB0aGUgZm9yayBmYWlscywgc2luY2Ugd2UgYXNrZWQgYnkgc2V0dGluZyBpdHMKICAqIHdhbnRfc2lnbmFsIHRvIHRydWUuCiAgKi8KLXN0YXRpYyB2b2lkIHdvcmtsb2FkX2V4ZWNfZmFpbGVkX3NpZ25hbChpbnQgc2lnbm8sIHNpZ2luZm9fdCAqaW5mbywKK3N0YXRpYyB2b2lkIHdvcmtsb2FkX2V4ZWNfZmFpbGVkX3NpZ25hbChpbnQgc2lnbm8gX19tYXliZV91bnVzZWQsCisJCQkJCXNpZ2luZm9fdCAqaW5mbywKIAkJCQkJdm9pZCAqdWNvbnRleHQgX19tYXliZV91bnVzZWQpCiB7CiAJd29ya2xvYWRfZXhlY19lcnJubyA9IGluZm8tPnNpX3ZhbHVlLnNpdmFsX2ludDsKIAlkb25lID0gMTsKLQlzaWduciA9IHNpZ25vOwogCWNoaWxkX2ZpbmlzaGVkID0gMTsKIH0KIAogc3RhdGljIGludCBfX2NtZF9yZWNvcmQoc3RydWN0IHJlY29yZCAqcmVjLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGVycjsKKwlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIHdha2luZyA9IDA7CiAJY29uc3QgYm9vbCBmb3JrcyA9IGFyZ2MgPiAwOwogCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lOwpAQCAtMzY3LDcgKzMwNiw3IEBACiAKIAlyZWMtPnByb2duYW1lID0gYXJndlswXTsKIAotCW9uX2V4aXQocmVjb3JkX19zaWdfZXhpdCwgcmVjKTsKKwlhdGV4aXQocmVjb3JkX19zaWdfZXhpdCk7CiAJc2lnbmFsKFNJR0NITEQsIHNpZ19oYW5kbGVyKTsKIAlzaWduYWwoU0lHSU5ULCBzaWdfaGFuZGxlcik7CiAJc2lnbmFsKFNJR1RFUk0sIHNpZ19oYW5kbGVyKTsKQEAgLTM4OCwzMiArMzI3LDI4IEBACiAJCQkJCQkgICAgd29ya2xvYWRfZXhlY19mYWlsZWRfc2lnbmFsKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCXByX2VycigiQ291bGRuJ3QgcnVuIHRoZSB3b3JrbG9hZCFcbiIpOworCQkJc3RhdHVzID0gZXJyOwogCQkJZ290byBvdXRfZGVsZXRlX3Nlc3Npb247CiAJCX0KIAl9CiAKIAlpZiAocmVjb3JkX19vcGVuKHJlYykgIT0gMCkgewogCQllcnIgPSAtMTsKLQkJZ290byBvdXRfZGVsZXRlX3Nlc3Npb247CisJCWdvdG8gb3V0X2NoaWxkOwogCX0KIAogCWlmICghcmVjLT5ldmxpc3QtPm5yX2dyb3VwcykKIAkJcGVyZl9oZWFkZXJfX2NsZWFyX2ZlYXQoJnNlc3Npb24tPmhlYWRlciwgSEVBREVSX0dST1VQX0RFU0MpOwogCi0JLyoKLQkgKiBwZXJmX3Nlc3Npb25fX2RlbGV0ZShzZXNzaW9uKSB3aWxsIGJlIGNhbGxlZCBhdCByZWNvcmRfX2V4aXQoKQotCSAqLwotCW9uX2V4aXQocmVjb3JkX19leGl0LCByZWMpOwotCiAJaWYgKGZpbGUtPmlzX3BpcGUpIHsKIAkJZXJyID0gcGVyZl9oZWFkZXJfX3dyaXRlX3BpcGUoZmlsZS0+ZmQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0X2RlbGV0ZV9zZXNzaW9uOworCQkJZ290byBvdXRfY2hpbGQ7CiAJfSBlbHNlIHsKIAkJZXJyID0gcGVyZl9zZXNzaW9uX193cml0ZV9oZWFkZXIoc2Vzc2lvbiwgcmVjLT5ldmxpc3QsCiAJCQkJCQkgZmlsZS0+ZmQsIGZhbHNlKTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKKwkJCWdvdG8gb3V0X2NoaWxkOwogCX0KIAogCWlmICghcmVjLT5ub19idWlsZGlkCkBAIC00MjEsNyArMzU2LDcgQEAKIAkJcHJfZXJyKCJDb3VsZG4ndCBnZW5lcmF0ZSBidWlsZGlkcy4gIgogCQkgICAgICAgIlVzZSAtLW5vLWJ1aWxkaWQgdG8gcHJvZmlsZSBhbnl3YXkuXG4iKTsKIAkJZXJyID0gLTE7Ci0JCWdvdG8gb3V0X2RlbGV0ZV9zZXNzaW9uOworCQlnb3RvIG91dF9jaGlsZDsKIAl9CiAKIAltYWNoaW5lID0gJnNlc3Npb24tPm1hY2hpbmVzLmhvc3Q7CkBAIC00MzEsNyArMzY2LDcgQEAKIAkJCQkJCSAgIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJfZXJyKCJDb3VsZG4ndCBzeW50aGVzaXplIGF0dHJzLlxuIik7Ci0JCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKKwkJCWdvdG8gb3V0X2NoaWxkOwogCQl9CiAKIAkJaWYgKGhhdmVfdHJhY2Vwb2ludHMoJnJlYy0+ZXZsaXN0LT5lbnRyaWVzKSkgewpAQCAtNDQ3LDcgKzM4Miw3IEBACiAJCQkJCQkJCSAgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCk7CiAJCQlpZiAoZXJyIDw9IDApIHsKIAkJCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCB0cmFjaW5nIGRhdGEuXG4iKTsKLQkJCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKKwkJCQlnb3RvIG91dF9jaGlsZDsKIAkJCX0KIAkJCXJlYy0+Ynl0ZXNfd3JpdHRlbiArPSBlcnI7CiAJCX0KQEAgLTQ3NSw3ICs0MTAsNyBAQAogCWVyciA9IF9fbWFjaGluZV9fc3ludGhlc2l6ZV90aHJlYWRzKG1hY2hpbmUsIHRvb2wsICZvcHRzLT50YXJnZXQsIHJlYy0+ZXZsaXN0LT50aHJlYWRzLAogCQkJCQkgICAgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwgb3B0cy0+c2FtcGxlX2FkZHJlc3MpOwogCWlmIChlcnIgIT0gMCkKLQkJZ290byBvdXRfZGVsZXRlX3Nlc3Npb247CisJCWdvdG8gb3V0X2NoaWxkOwogCiAJaWYgKHJlYy0+cmVhbHRpbWVfcHJpbykgewogCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CkBAIC00ODQsNyArNDE5LDcgQEAKIAkJaWYgKHNjaGVkX3NldHNjaGVkdWxlcigwLCBTQ0hFRF9GSUZPLCAmcGFyYW0pKSB7CiAJCQlwcl9lcnIoIkNvdWxkIG5vdCBzZXQgcmVhbHRpbWUgcHJpb3JpdHkuXG4iKTsKIAkJCWVyciA9IC0xOwotCQkJZ290byBvdXRfZGVsZXRlX3Nlc3Npb247CisJCQlnb3RvIG91dF9jaGlsZDsKIAkJfQogCX0KIApAQCAtNTEyLDEzICs0NDcsMTUgQEAKIAogCQlpZiAocmVjb3JkX19tbWFwX3JlYWRfYWxsKHJlYykgPCAwKSB7CiAJCQllcnIgPSAtMTsKLQkJCWdvdG8gb3V0X2RlbGV0ZV9zZXNzaW9uOworCQkJZ290byBvdXRfY2hpbGQ7CiAJCX0KIAogCQlpZiAoaGl0cyA9PSByZWMtPnNhbXBsZXMpIHsKIAkJCWlmIChkb25lKQogCQkJCWJyZWFrOwogCQkJZXJyID0gcG9sbChyZWMtPmV2bGlzdC0+cG9sbGZkLCByZWMtPmV2bGlzdC0+bnJfZmRzLCAtMSk7CisJCQlpZiAoZXJyIDwgMCAmJiBlcnJubyA9PSBFSU5UUikKKwkJCQllcnIgPSAwOwogCQkJd2FraW5nKys7CiAJCX0KIApAQCAtNTM4LDI4ICs0NzUsNTIgQEAKIAkJY29uc3QgY2hhciAqZW1zZyA9IHN0cmVycm9yX3Iod29ya2xvYWRfZXhlY19lcnJubywgbXNnLCBzaXplb2YobXNnKSk7CiAJCXByX2VycigiV29ya2xvYWQgZmFpbGVkOiAlc1xuIiwgZW1zZyk7CiAJCWVyciA9IC0xOwotCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKKwkJZ290byBvdXRfY2hpbGQ7CiAJfQogCi0JaWYgKHF1aWV0IHx8IHNpZ25yID09IFNJR1VTUjEpCi0JCXJldHVybiAwOworCWlmICghcXVpZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAlbGQgdGltZXMgdG8gd3JpdGUgZGF0YSBdXG4iLCB3YWtpbmcpOwogCi0JZnByaW50ZihzdGRlcnIsICJbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAlbGQgdGltZXMgdG8gd3JpdGUgZGF0YSBdXG4iLCB3YWtpbmcpOworCQkvKgorCQkgKiBBcHByb3hpbWF0ZSBSSVAgZXZlbnQgc2l6ZTogMjQgYnl0ZXMuCisJCSAqLworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyAofiUiIFBSSXU2NCAiIHNhbXBsZXMpIF1cbiIsCisJCQkoZG91YmxlKXJlYy0+Ynl0ZXNfd3JpdHRlbiAvIDEwMjQuMCAvIDEwMjQuMCwKKwkJCWZpbGUtPnBhdGgsCisJCQlyZWMtPmJ5dGVzX3dyaXR0ZW4gLyAyNCk7CisJfQogCi0JLyoKLQkgKiBBcHByb3hpbWF0ZSBSSVAgZXZlbnQgc2l6ZTogMjQgYnl0ZXMuCi0JICovCi0JZnByaW50ZihzdGRlcnIsCi0JCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyAofiUiIFBSSXU2NCAiIHNhbXBsZXMpIF1cbiIsCi0JCShkb3VibGUpcmVjLT5ieXRlc193cml0dGVuIC8gMTAyNC4wIC8gMTAyNC4wLAotCQlmaWxlLT5wYXRoLAotCQlyZWMtPmJ5dGVzX3dyaXR0ZW4gLyAyNCk7CitvdXRfY2hpbGQ6CisJaWYgKGZvcmtzKSB7CisJCWludCBleGl0X3N0YXR1czsKIAotCXJldHVybiAwOworCQlpZiAoIWNoaWxkX2ZpbmlzaGVkKQorCQkJa2lsbChyZWMtPmV2bGlzdC0+d29ya2xvYWQucGlkLCBTSUdURVJNKTsKKworCQl3YWl0KCZleGl0X3N0YXR1cyk7CisKKwkJaWYgKGVyciA8IDApCisJCQlzdGF0dXMgPSBlcnI7CisJCWVsc2UgaWYgKFdJRkVYSVRFRChleGl0X3N0YXR1cykpCisJCQlzdGF0dXMgPSBXRVhJVFNUQVRVUyhleGl0X3N0YXR1cyk7CisJCWVsc2UgaWYgKFdJRlNJR05BTEVEKGV4aXRfc3RhdHVzKSkKKwkJCXNpZ25yID0gV1RFUk1TSUcoZXhpdF9zdGF0dXMpOworCX0gZWxzZQorCQlzdGF0dXMgPSBlcnI7CisKKwlpZiAoIWVyciAmJiAhZmlsZS0+aXNfcGlwZSkgeworCQlyZWMtPnNlc3Npb24tPmhlYWRlci5kYXRhX3NpemUgKz0gcmVjLT5ieXRlc193cml0dGVuOworCisJCWlmICghcmVjLT5ub19idWlsZGlkKQorCQkJcHJvY2Vzc19idWlsZGlkcyhyZWMpOworCQlwZXJmX3Nlc3Npb25fX3dyaXRlX2hlYWRlcihyZWMtPnNlc3Npb24sIHJlYy0+ZXZsaXN0LAorCQkJCQkgICBmaWxlLT5mZCwgdHJ1ZSk7CisJfQogCiBvdXRfZGVsZXRlX3Nlc3Npb246CiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAjZGVmaW5lIEJSQU5DSF9PUFQobiwgbSkgXApAQCAtOTg4LDYgKzk0OSw3IEBACiAKIAllcnIgPSBfX2NtZF9yZWNvcmQoJnJlY29yZCwgYXJnYywgYXJndik7CiBvdXRfc3ltYm9sX2V4aXQ6CisJcGVyZl9ldmxpc3RfX2RlbGV0ZShyZWMtPmV2bGlzdCk7CiAJc3ltYm9sX19leGl0KCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCBjOGYyMTEzLi5iYzBlZWMxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJY29uc3QgY2hhcgkJKmNwdV9saXN0OwogCWNvbnN0IGNoYXIJCSpzeW1ib2xfZmlsdGVyX3N0cjsKIAlmbG9hdAkJCW1pbl9wZXJjZW50OworCXU2NAkJCW5yX2VudHJpZXM7CiAJREVDTEFSRV9CSVRNQVAoY3B1X2JpdG1hcCwgTUFYX05SX0NQVVMpOwogfTsKIApAQCAtNzUsNiArNzYsMjcgQEAKIAlyZXR1cm4gcGVyZl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKK3N0YXRpYyB2b2lkIHJlcG9ydF9faW5jX3N0YXRzKHN0cnVjdCByZXBvcnQgKnJlcCwgc3RydWN0IGhpc3RfZW50cnkgKmhlKQoreworCS8qCisJICogVGhlIEBoZSBpcyBlaXRoZXIgb2YgYSBuZXdseSBjcmVhdGVkIG9uZSBvciBhbiBleGlzdGluZyBvbmUKKwkgKiBtZXJnaW5nIGN1cnJlbnQgc2FtcGxlLiAgV2Ugb25seSB3YW50IHRvIGNvdW50IGEgbmV3IG9uZSBzbworCSAqIGNoZWNraW5nIC0+bnJfZXZlbnRzIGJlaW5nIDEuCisJICovCisJaWYgKGhlLT5zdGF0Lm5yX2V2ZW50cyA9PSAxKQorCQlyZXAtPm5yX2VudHJpZXMrKzsKKworCS8qCisJICogT25seSBjb3VudHMgbnVtYmVyIG9mIHNhbXBsZXMgYXQgdGhpcyBzdGFnZSBhcyBpdCdzIG1vcmUKKwkgKiBuYXR1cmFsIHRvIGRvIGl0IGhlcmUgYW5kIG5vbi1zYW1wbGUgZXZlbnRzIGFyZSBhbHNvCisJICogY291bnRlZCBpbiBwZXJmX3Nlc3Npb25fZGVsaXZlcl9ldmVudCgpLiAgVGhlIGR1bXBfdHJhY2UKKwkgKiByZXF1aXJlcyB0aGlzIGluZm8gaXMgcmVhZHkgYmVmb3JlIGdvaW5nIHRvIHRoZSBvdXRwdXQgdHJlZS4KKwkgKi8KKwloaXN0c19faW5jX25yX2V2ZW50cyhoZS0+aGlzdHMsIFBFUkZfUkVDT1JEX1NBTVBMRSk7CisJaWYgKCFoZS0+ZmlsdGVyZWQpCisJCWhlLT5oaXN0cy0+c3RhdHMubnJfbm9uX2ZpbHRlcmVkX3NhbXBsZXMrKzsKK30KKwogc3RhdGljIGludCByZXBvcnRfX2FkZF9tZW1faGlzdF9lbnRyeShzdHJ1Y3QgcmVwb3J0ICpyZXAsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKIAkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQogewpAQCAtMTIxLDggKzE0Myw4IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlldnNlbC0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IGNvc3Q7Ci0JaGlzdHNfX2luY19ucl9ldmVudHMoJmV2c2VsLT5oaXN0cywgUEVSRl9SRUNPUkRfU0FNUExFKTsKKwlyZXBvcnRfX2luY19zdGF0cyhyZXAsIGhlKTsKKwogCWVyciA9IGhpc3RfZW50cnlfX2FwcGVuZF9jYWxsY2hhaW4oaGUsIHNhbXBsZSk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTE3Myw5ICsxOTUsNyBAQAogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gb3V0OwogCQkJfQotCi0JCQlldnNlbC0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IDE7Ci0JCQloaXN0c19faW5jX25yX2V2ZW50cygmZXZzZWwtPmhpc3RzLCBQRVJGX1JFQ09SRF9TQU1QTEUpOworCQkJcmVwb3J0X19pbmNfc3RhdHMocmVwLCBoZSk7CiAJCX0gZWxzZQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMjA4LDggKzIyOCw4IEBACiAJaWYgKHVpX19oYXNfYW5ub3RhdGlvbigpKQogCQllcnIgPSBoaXN0X2VudHJ5X19pbmNfYWRkcl9zYW1wbGVzKGhlLCBldnNlbC0+aWR4LCBhbC0+YWRkcik7CiAKLQlldnNlbC0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IHNhbXBsZS0+cGVyaW9kOwotCWhpc3RzX19pbmNfbnJfZXZlbnRzKCZldnNlbC0+aGlzdHMsIFBFUkZfUkVDT1JEX1NBTVBMRSk7CisJcmVwb3J0X19pbmNfc3RhdHMocmVwLCBoZSk7CisKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzM3LDYgKzM1NywxMSBAQAogCWNoYXIgYnVmWzUxMl07CiAJc2l6ZV90IHNpemUgPSBzaXplb2YoYnVmKTsKIAorCWlmIChzeW1ib2xfY29uZi5maWx0ZXJfcmVsYXRpdmUpIHsKKwkJbnJfc2FtcGxlcyA9IGhpc3RzLT5zdGF0cy5ucl9ub25fZmlsdGVyZWRfc2FtcGxlczsKKwkJbnJfZXZlbnRzID0gaGlzdHMtPnN0YXRzLnRvdGFsX25vbl9maWx0ZXJlZF9wZXJpb2Q7CisJfQorCiAJaWYgKHBlcmZfZXZzZWxfX2lzX2dyb3VwX2V2ZW50KGV2c2VsKSkgewogCQlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwogCkBAIC0zNDQsOCArMzY5LDEzIEBACiAJCWV2bmFtZSA9IGJ1ZjsKIAogCQlmb3JfZWFjaF9ncm91cF9tZW1iZXIocG9zLCBldnNlbCkgewotCQkJbnJfc2FtcGxlcyArPSBwb3MtPmhpc3RzLnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdOwotCQkJbnJfZXZlbnRzICs9IHBvcy0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kOworCQkJaWYgKHN5bWJvbF9jb25mLmZpbHRlcl9yZWxhdGl2ZSkgeworCQkJCW5yX3NhbXBsZXMgKz0gcG9zLT5oaXN0cy5zdGF0cy5ucl9ub25fZmlsdGVyZWRfc2FtcGxlczsKKwkJCQlucl9ldmVudHMgKz0gcG9zLT5oaXN0cy5zdGF0cy50b3RhbF9ub25fZmlsdGVyZWRfcGVyaW9kOworCQkJfSBlbHNlIHsKKwkJCQlucl9zYW1wbGVzICs9IHBvcy0+aGlzdHMuc3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV07CisJCQkJbnJfZXZlbnRzICs9IHBvcy0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kOworCQkJfQogCQl9CiAJfQogCkBAIC00NzAsMjQgKzUwMCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1NjQgcmVwb3J0X19jb2xsYXBzZV9oaXN0cyhzdHJ1Y3QgcmVwb3J0ICpyZXApCitzdGF0aWMgdm9pZCByZXBvcnRfX2NvbGxhcHNlX2hpc3RzKHN0cnVjdCByZXBvcnQgKnJlcCkKIHsKIAlzdHJ1Y3QgdWlfcHJvZ3Jlc3MgcHJvZzsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwotCXU2NCBucl9zYW1wbGVzID0gMDsKLQkvKgotIAkgKiBDb3VudCBudW1iZXIgb2YgaGlzdG9ncmFtIGVudHJpZXMgdG8gdXNlIHdoZW4gc2hvd2luZyBwcm9ncmVzcywKLSAJICogcmV1c2luZyBucl9zYW1wbGVzIHZhcmlhYmxlLgotIAkgKi8KLQlldmxpc3RfX2Zvcl9lYWNoKHJlcC0+c2Vzc2lvbi0+ZXZsaXN0LCBwb3MpCi0JCW5yX3NhbXBsZXMgKz0gcG9zLT5oaXN0cy5ucl9lbnRyaWVzOwogCi0JdWlfcHJvZ3Jlc3NfX2luaXQoJnByb2csIG5yX3NhbXBsZXMsICJNZXJnaW5nIHJlbGF0ZWQgZXZlbnRzLi4uIik7Ci0JLyoKLQkgKiBDb3VudCB0b3RhbCBudW1iZXIgb2Ygc2FtcGxlcywgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoaXMKLSAJICogc2Vzc2lvbiBoYWQgYW55LgotIAkgKi8KLQlucl9zYW1wbGVzID0gMDsKKwl1aV9wcm9ncmVzc19faW5pdCgmcHJvZywgcmVwLT5ucl9lbnRyaWVzLCAiTWVyZ2luZyByZWxhdGVkIGV2ZW50cy4uLiIpOwogCiAJZXZsaXN0X19mb3JfZWFjaChyZXAtPnNlc3Npb24tPmV2bGlzdCwgcG9zKSB7CiAJCXN0cnVjdCBoaXN0cyAqaGlzdHMgPSAmcG9zLT5oaXN0czsKQEAgLTQ5Niw3ICs1MTQsNiBAQAogCQkJaGlzdHMtPnN5bWJvbF9maWx0ZXJfc3RyID0gcmVwLT5zeW1ib2xfZmlsdGVyX3N0cjsKIAogCQloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCAmcHJvZyk7Ci0JCW5yX3NhbXBsZXMgKz0gaGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdOwogCiAJCS8qIE5vbi1ncm91cCBldmVudHMgYXJlIGNvbnNpZGVyZWQgYXMgbGVhZGVyICovCiAJCWlmIChzeW1ib2xfY29uZi5ldmVudF9ncm91cCAmJgpAQCAtNTA5LDE0ICs1MjYsMTEgQEAKIAl9CiAKIAl1aV9wcm9ncmVzc19fZmluaXNoKCk7Ci0KLQlyZXR1cm4gbnJfc2FtcGxlczsKIH0KIAogc3RhdGljIGludCBfX2NtZF9yZXBvcnQoc3RydWN0IHJlcG9ydCAqcmVwKQogewogCWludCByZXQ7Ci0JdTY0IG5yX3NhbXBsZXM7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHJlcC0+c2Vzc2lvbjsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwogCXN0cnVjdCBwZXJmX2RhdGFfZmlsZSAqZmlsZSA9IHNlc3Npb24tPmZpbGU7CkBAIC01NTYsMTIgKzU3MCwxMiBAQAogCQl9CiAJfQogCi0JbnJfc2FtcGxlcyA9IHJlcG9ydF9fY29sbGFwc2VfaGlzdHMocmVwKTsKKwlyZXBvcnRfX2NvbGxhcHNlX2hpc3RzKHJlcCk7CiAKIAlpZiAoc2Vzc2lvbl9kb25lKCkpCiAJCXJldHVybiAwOwogCi0JaWYgKG5yX3NhbXBsZXMgPT0gMCkgeworCWlmIChyZXAtPm5yX2VudHJpZXMgPT0gMCkgewogCQl1aV9fZXJyb3IoIlRoZSAlcyBmaWxlIGhhcyBubyBzYW1wbGVzIVxuIiwgZmlsZS0+cGF0aCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTU3MywxMSArNTg3LDkgQEAKIH0KIAogc3RhdGljIGludAotcGFyc2VfY2FsbGNoYWluX29wdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQorcmVwb3J0X3BhcnNlX2NhbGxjaGFpbl9vcHQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKIAlzdHJ1Y3QgcmVwb3J0ICpyZXAgPSAoc3RydWN0IHJlcG9ydCAqKW9wdC0+dmFsdWU7Ci0JY2hhciAqdG9rLCAqdG9rMjsKLQljaGFyICplbmRwdHI7CiAKIAkvKgogCSAqIC0tbm8tY2FsbC1ncmFwaApAQCAtNTg3LDgwICs1OTksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKLQotCWlmICghYXJnKQotCQlyZXR1cm4gMDsKLQotCXRvayA9IHN0cnRvaygoY2hhciAqKWFyZywgIiwiKTsKLQlpZiAoIXRvaykKLQkJcmV0dXJuIC0xOwotCi0JLyogZ2V0IHRoZSBvdXRwdXQgbW9kZSAqLwotCWlmICghc3RybmNtcCh0b2ssICJncmFwaCIsIHN0cmxlbihhcmcpKSkKLQkJY2FsbGNoYWluX3BhcmFtLm1vZGUgPSBDSEFJTl9HUkFQSF9BQlM7Ci0KLQllbHNlIGlmICghc3RybmNtcCh0b2ssICJmbGF0Iiwgc3RybGVuKGFyZykpKQotCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX0ZMQVQ7Ci0KLQllbHNlIGlmICghc3RybmNtcCh0b2ssICJmcmFjdGFsIiwgc3RybGVuKGFyZykpKQotCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX0dSQVBIX1JFTDsKLQotCWVsc2UgaWYgKCFzdHJuY21wKHRvaywgIm5vbmUiLCBzdHJsZW4oYXJnKSkpIHsKLQkJY2FsbGNoYWluX3BhcmFtLm1vZGUgPSBDSEFJTl9OT05FOwotCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gZmFsc2U7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JZWxzZQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBnZXQgdGhlIG1pbiBwZXJjZW50YWdlICovCi0JdG9rID0gc3RydG9rKE5VTEwsICIsIik7Ci0JaWYgKCF0b2spCi0JCWdvdG8gc2V0dXA7Ci0KLQljYWxsY2hhaW5fcGFyYW0ubWluX3BlcmNlbnQgPSBzdHJ0b2QodG9rLCAmZW5kcHRyKTsKLQlpZiAodG9rID09IGVuZHB0cikKLQkJcmV0dXJuIC0xOwotCi0JLyogZ2V0IHRoZSBwcmludCBsaW1pdCAqLwotCXRvazIgPSBzdHJ0b2soTlVMTCwgIiwiKTsKLQlpZiAoIXRvazIpCi0JCWdvdG8gc2V0dXA7Ci0KLQlpZiAodG9rMlswXSAhPSAnYycpIHsKLQkJY2FsbGNoYWluX3BhcmFtLnByaW50X2xpbWl0ID0gc3RydG91bCh0b2syLCAmZW5kcHRyLCAwKTsKLQkJdG9rMiA9IHN0cnRvayhOVUxMLCAiLCIpOwotCQlpZiAoIXRvazIpCi0JCQlnb3RvIHNldHVwOwotCX0KLQotCS8qIGdldCB0aGUgY2FsbCBjaGFpbiBvcmRlciAqLwotCWlmICghc3RybmNtcCh0b2syLCAiY2FsbGVyIiwgc3RybGVuKCJjYWxsZXIiKSkpCi0JCWNhbGxjaGFpbl9wYXJhbS5vcmRlciA9IE9SREVSX0NBTExFUjsKLQllbHNlIGlmICghc3RybmNtcCh0b2syLCAiY2FsbGVlIiwgc3RybGVuKCJjYWxsZWUiKSkpCi0JCWNhbGxjaGFpbl9wYXJhbS5vcmRlciA9IE9SREVSX0NBTExFRTsKLQllbHNlCi0JCXJldHVybiAtMTsKLQotCS8qIEdldCB0aGUgc29ydCBrZXkgKi8KLQl0b2syID0gc3RydG9rKE5VTEwsICIsIik7Ci0JaWYgKCF0b2syKQotCQlnb3RvIHNldHVwOwotCWlmICghc3RybmNtcCh0b2syLCAiZnVuY3Rpb24iLCBzdHJsZW4oImZ1bmN0aW9uIikpKQotCQljYWxsY2hhaW5fcGFyYW0ua2V5ID0gQ0NLRVlfRlVOQ1RJT047Ci0JZWxzZSBpZiAoIXN0cm5jbXAodG9rMiwgImFkZHJlc3MiLCBzdHJsZW4oImFkZHJlc3MiKSkpCi0JCWNhbGxjaGFpbl9wYXJhbS5rZXkgPSBDQ0tFWV9BRERSRVNTOwotCWVsc2UKLQkJcmV0dXJuIC0xOwotc2V0dXA6Ci0JaWYgKGNhbGxjaGFpbl9yZWdpc3Rlcl9wYXJhbSgmY2FsbGNoYWluX3BhcmFtKSA8IDApIHsKLQkJcHJfZXJyKCJDYW4ndCByZWdpc3RlciBjYWxsY2hhaW4gcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGFyc2VfY2FsbGNoYWluX3JlcG9ydF9vcHQoYXJnKTsKIH0KIAogaW50CkBAIC03NjAsMTAgKzY5OSwxMCBAQAogCU9QVF9CT09MRUFOKDAsICJoZWFkZXItb25seSIsICZyZXBvcnQuaGVhZGVyX29ubHksCiAJCSAgICAiU2hvdyBvbmx5IGRhdGEgaGVhZGVyLiIpLAogCU9QVF9TVFJJTkcoJ3MnLCAic29ydCIsICZzb3J0X29yZGVyLCAia2V5WyxrZXkyLi4uXSIsCi0JCSAgICJzb3J0IGJ5IGtleShzKTogcGlkLCBjb21tLCBkc28sIHN5bWJvbCwgcGFyZW50LCBjcHUsIHNyY2xpbmUsIgotCQkgICAiIGRzb190bywgZHNvX2Zyb20sIHN5bWJvbF90bywgc3ltYm9sX2Zyb20sIG1pc3ByZWRpY3QsIgotCQkgICAiIHdlaWdodCwgbG9jYWxfd2VpZ2h0LCBtZW0sIHN5bWJvbF9kYWRkciwgZHNvX2RhZGRyLCB0bGIsICIKLQkJICAgInNub29wLCBsb2NrZWQsIGFib3J0LCBpbl90eCwgdHJhbnNhY3Rpb24iKSwKKwkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQsIGNwdSwgc3JjbGluZSwgLi4uIgorCQkgICAiIFBsZWFzZSByZWZlciB0aGUgbWFuIHBhZ2UgZm9yIHRoZSBjb21wbGV0ZSBsaXN0LiIpLAorCU9QVF9TVFJJTkcoJ0YnLCAiZmllbGRzIiwgJmZpZWxkX29yZGVyLCAia2V5WyxrZXlzLi4uXSIsCisJCSAgICJvdXRwdXQgZmllbGQocyk6IG92ZXJoZWFkLCBwZXJpb2QsIHNhbXBsZSBwbHVzIGFsbCBvZiBzb3J0IGtleXMiKSwKIAlPUFRfQk9PTEVBTigwLCAic2hvd2NwdXV0aWxpemF0aW9uIiwgJnN5bWJvbF9jb25mLnNob3dfY3B1X3V0aWxpemF0aW9uLAogCQkgICAgIlNob3cgc2FtcGxlIHBlcmNlbnRhZ2UgZm9yIGRpZmZlcmVudCBjcHUgbW9kZXMiKSwKIAlPUFRfU1RSSU5HKCdwJywgInBhcmVudCIsICZwYXJlbnRfcGF0dGVybiwgInJlZ2V4IiwKQEAgLTc3Miw3ICs3MTEsNyBAQAogCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHdpdGggcGFyZW50LW1hdGNoIiksCiAJT1BUX0NBTExCQUNLX0RFRkFVTFQoJ2cnLCAiY2FsbC1ncmFwaCIsICZyZXBvcnQsICJvdXRwdXRfdHlwZSxtaW5fcGVyY2VudFsscHJpbnRfbGltaXRdLGNhbGxfb3JkZXIiLAogCQkgICAgICJEaXNwbGF5IGNhbGxjaGFpbnMgdXNpbmcgb3V0cHV0X3R5cGUgKGdyYXBoLCBmbGF0LCBmcmFjdGFsLCBvciBub25lKSAsIG1pbiBwZXJjZW50IHRocmVzaG9sZCwgb3B0aW9uYWwgcHJpbnQgbGltaXQsIGNhbGxjaGFpbiBvcmRlciwga2V5IChmdW5jdGlvbiBvciBhZGRyZXNzKS4gIgotCQkgICAgICJEZWZhdWx0OiBmcmFjdGFsLDAuNSxjYWxsZWUsZnVuY3Rpb24iLCAmcGFyc2VfY2FsbGNoYWluX29wdCwgY2FsbGNoYWluX2RlZmF1bHRfb3B0KSwKKwkJICAgICAiRGVmYXVsdDogZnJhY3RhbCwwLjUsY2FsbGVlLGZ1bmN0aW9uIiwgJnJlcG9ydF9wYXJzZV9jYWxsY2hhaW5fb3B0LCBjYWxsY2hhaW5fZGVmYXVsdF9vcHQpLAogCU9QVF9JTlRFR0VSKDAsICJtYXgtc3RhY2siLCAmcmVwb3J0Lm1heF9zdGFjaywKIAkJICAgICJTZXQgdGhlIG1heGltdW0gc3RhY2sgZGVwdGggd2hlbiBwYXJzaW5nIHRoZSBjYWxsY2hhaW4sICIKIAkJICAgICJhbnl0aGluZyBiZXlvbmQgdGhlIHNwZWNpZmllZCBkZXB0aCB3aWxsIGJlIGlnbm9yZWQuICIKQEAgLTgyMyw2ICs3NjIsOCBAQAogCU9QVF9CT09MRUFOKDAsICJtZW0tbW9kZSIsICZyZXBvcnQubWVtX21vZGUsICJtZW0gYWNjZXNzIHByb2ZpbGUiKSwKIAlPUFRfQ0FMTEJBQ0soMCwgInBlcmNlbnQtbGltaXQiLCAmcmVwb3J0LCAicGVyY2VudCIsCiAJCSAgICAgIkRvbid0IHNob3cgZW50cmllcyB1bmRlciB0aGF0IHBlcmNlbnQiLCBwYXJzZV9wZXJjZW50X2xpbWl0KSwKKwlPUFRfQ0FMTEJBQ0soMCwgInBlcmNlbnRhZ2UiLCBOVUxMLCAicmVsYXRpdmV8YWJzb2x1dGUiLAorCQkgICAgICJob3cgdG8gZGlzcGxheSBwZXJjZW50YWdlIG9mIGZpbHRlcmVkIGVudHJpZXMiLCBwYXJzZV9maWx0ZXJfcGVyY2VudGFnZSksCiAJT1BUX0VORCgpCiAJfTsKIAlzdHJ1Y3QgcGVyZl9kYXRhX2ZpbGUgZmlsZSA9IHsKQEAgLTg2Niw1MiArODA3LDMxIEBACiAJaWYgKGJyYW5jaF9tb2RlID09IC0xICYmIGhhc19icl9zdGFjaykKIAkJc29ydF9fbW9kZSA9IFNPUlRfTU9ERV9fQlJBTkNIOwogCi0JLyogc29ydF9fbW9kZSBjb3VsZCBiZSBOT1JNQUwgaWYgLS1uby1icmFuY2gtc3RhY2sgKi8KLQlpZiAoc29ydF9fbW9kZSA9PSBTT1JUX01PREVfX0JSQU5DSCkgewotCQkvKgotCQkgKiBpZiBubyBzb3J0X29yZGVyIGlzIHByb3ZpZGVkLCB0aGVuIHNwZWNpZnkKLQkJICogYnJhbmNoLW1vZGUgc3BlY2lmaWMgb3JkZXIKLQkJICovCi0JCWlmIChzb3J0X29yZGVyID09IGRlZmF1bHRfc29ydF9vcmRlcikKLQkJCXNvcnRfb3JkZXIgPSAiY29tbSxkc29fZnJvbSxzeW1ib2xfZnJvbSwiCi0JCQkJICAgICAiZHNvX3RvLHN5bWJvbF90byI7Ci0KLQl9CiAJaWYgKHJlcG9ydC5tZW1fbW9kZSkgewogCQlpZiAoc29ydF9fbW9kZSA9PSBTT1JUX01PREVfX0JSQU5DSCkgewogCQkJcHJfZXJyKCJicmFuY2ggYW5kIG1lbSBtb2RlIGluY29tcGF0aWJsZVxuIik7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCXNvcnRfX21vZGUgPSBTT1JUX01PREVfX01FTU9SWTsKLQotCQkvKgotCQkgKiBpZiBubyBzb3J0X29yZGVyIGlzIHByb3ZpZGVkLCB0aGVuIHNwZWNpZnkKLQkJICogYnJhbmNoLW1vZGUgc3BlY2lmaWMgb3JkZXIKLQkJICovCi0JCWlmIChzb3J0X29yZGVyID09IGRlZmF1bHRfc29ydF9vcmRlcikKLQkJCXNvcnRfb3JkZXIgPSAibG9jYWxfd2VpZ2h0LG1lbSxzeW0sZHNvLHN5bWJvbF9kYWRkcixkc29fZGFkZHIsc25vb3AsdGxiLGxvY2tlZCI7CiAJfQogCiAJaWYgKHNldHVwX3NvcnRpbmcoKSA8IDApIHsKLQkJcGFyc2Vfb3B0aW9uc191c2FnZShyZXBvcnRfdXNhZ2UsIG9wdGlvbnMsICJzIiwgMSk7CisJCWlmIChzb3J0X29yZGVyKQorCQkJcGFyc2Vfb3B0aW9uc191c2FnZShyZXBvcnRfdXNhZ2UsIG9wdGlvbnMsICJzIiwgMSk7CisJCWlmIChmaWVsZF9vcmRlcikKKwkJCXBhcnNlX29wdGlvbnNfdXNhZ2Uoc29ydF9vcmRlciA/IE5VTEwgOiByZXBvcnRfdXNhZ2UsCisJCQkJCSAgICBvcHRpb25zLCAiRiIsIDEpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChwYXJlbnRfcGF0dGVybiAhPSBkZWZhdWx0X3BhcmVudF9wYXR0ZXJuKSB7Ci0JCWlmIChzb3J0X2RpbWVuc2lvbl9fYWRkKCJwYXJlbnQiKSA8IDApCi0JCQlnb3RvIGVycm9yOwotCX0KLQogCS8qIEZvcmNlIHR0eSBvdXRwdXQgZm9yIGhlYWRlciBvdXRwdXQuICovCiAJaWYgKHJlcG9ydC5oZWFkZXIgfHwgcmVwb3J0LmhlYWRlcl9vbmx5KQogCQl1c2VfYnJvd3NlciA9IDA7CiAKIAlpZiAoc3RyY21wKGlucHV0X25hbWUsICItIikgIT0gMCkKIAkJc2V0dXBfYnJvd3Nlcih0cnVlKTsKLQllbHNlIHsKKwllbHNlCiAJCXVzZV9icm93c2VyID0gMDsKLQkJcGVyZl9ocHBfX2luaXQoKTsKLQl9CiAKIAlpZiAocmVwb3J0LmhlYWRlciB8fCByZXBvcnQuaGVhZGVyX29ubHkpIHsKIAkJcGVyZl9zZXNzaW9uX19mcHJpbnRmX2luZm8oc2Vzc2lvbiwgc3Rkb3V0LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCA5YWMwYTQ5Li5kNzE3NjgzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtNjYsNyArNjYsNyBAQAogCXN0cnVjdCB0YXNrX2Rlc2MJKndha2VlOwogfTsKIAotI2RlZmluZSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSICJSU0RUdFpYIgorI2RlZmluZSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSICJSU0RUdFpYeEtXUCIKIAogZW51bSB0aHJlYWRfc3RhdGUgewogCVRIUkVBRF9TTEVFUElORyA9IDAsCkBAIC0xNDksNyArMTQ5LDYgQEAKIAl1bnNpZ25lZCBsb25nCSBucl9ydW5zOwogCXVuc2lnbmVkIGxvbmcJIG5yX3RpbWVzdGFtcHM7CiAJdW5zaWduZWQgbG9uZwkgbnJfdW5vcmRlcmVkX3RpbWVzdGFtcHM7Ci0JdW5zaWduZWQgbG9uZwkgbnJfc3RhdGVfbWFjaGluZV9idWdzOwogCXVuc2lnbmVkIGxvbmcJIG5yX2NvbnRleHRfc3dpdGNoX2J1Z3M7CiAJdW5zaWduZWQgbG9uZwkgbnJfZXZlbnRzOwogCXVuc2lnbmVkIGxvbmcJIG5yX2xvc3RfY2h1bmtzOwpAQCAtMTAwNywxNyArMTAwNiwxMiBAQAogCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewotCWNvbnN0IHUzMiBwaWQJICA9IHBlcmZfZXZzZWxfX2ludHZhbChldnNlbCwgc2FtcGxlLCAicGlkIiksCi0JCSAgc3VjY2VzcyA9IHBlcmZfZXZzZWxfX2ludHZhbChldnNlbCwgc2FtcGxlLCAic3VjY2VzcyIpOworCWNvbnN0IHUzMiBwaWQJICA9IHBlcmZfZXZzZWxfX2ludHZhbChldnNlbCwgc2FtcGxlLCAicGlkIik7CiAJc3RydWN0IHdvcmtfYXRvbXMgKmF0b21zOwogCXN0cnVjdCB3b3JrX2F0b20gKmF0b207CiAJc3RydWN0IHRocmVhZCAqd2FrZWU7CiAJdTY0IHRpbWVzdGFtcCA9IHNhbXBsZS0+dGltZTsKIAotCS8qIE5vdGUgZm9yIGxhdGVyLCBpdCBtYXkgYmUgaW50ZXJlc3RpbmcgdG8gb2JzZXJ2ZSB0aGUgZmFpbGluZyBjYXNlcyAqLwotCWlmICghc3VjY2VzcykKLQkJcmV0dXJuIDA7Ci0KIAl3YWtlZSA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIDAsIHBpZCk7CiAJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZzY2hlZC0+YXRvbV9yb290LCB3YWtlZSwgJnNjaGVkLT5jbXBfcGlkKTsKIAlpZiAoIWF0b21zKSB7CkBAIC0xMDM3LDEyICsxMDMxLDE4IEBACiAJYXRvbSA9IGxpc3RfZW50cnkoYXRvbXMtPndvcmtfbGlzdC5wcmV2LCBzdHJ1Y3Qgd29ya19hdG9tLCBsaXN0KTsKIAogCS8qCisJICogQXMgd2UgZG8gbm90IGd1YXJhbnRlZSB0aGUgd2FrZXVwIGV2ZW50IGhhcHBlbnMgd2hlbgorCSAqIHRhc2sgaXMgb3V0IG9mIHJ1biBxdWV1ZSwgYWxzbyBtYXkgaGFwcGVuIHdoZW4gdGFzayBpcworCSAqIG9uIHJ1biBxdWV1ZSBhbmQgd2FrZXVwIG9ubHkgY2hhbmdlIC0+c3RhdGUgdG8gVEFTS19SVU5OSU5HLAorCSAqIHRoZW4gd2Ugc2hvdWxkIG5vdCBzZXQgdGhlIC0+d2FrZV91cF90aW1lIHdoZW4gd2FrZSB1cCBhCisJICogdGFzayB3aGljaCBpcyBvbiBydW4gcXVldWUuCisJICoKIAkgKiBZb3UgV0lMTCBiZSBtaXNzaW5nIGV2ZW50cyBpZiB5b3UndmUgcmVjb3JkZWQgb25seQogCSAqIG9uZSBDUFUsIG9yIGFyZSBvbmx5IGxvb2tpbmcgYXQgb25seSBvbmUsIHNvIGRvbid0Ci0JICogbWFrZSB1c2VsZXNzIG5vaXNlLgorCSAqIHNraXAgaW4gdGhpcyBjYXNlLgogCSAqLwogCWlmIChzY2hlZC0+cHJvZmlsZV9jcHUgPT0gLTEgJiYgYXRvbS0+c3RhdGUgIT0gVEhSRUFEX1NMRUVQSU5HKQotCQlzY2hlZC0+bnJfc3RhdGVfbWFjaGluZV9idWdzKys7CisJCXJldHVybiAwOwogCiAJc2NoZWQtPm5yX3RpbWVzdGFtcHMrKzsKIAlpZiAoYXRvbS0+c2NoZWRfb3V0X3RpbWUgPiB0aW1lc3RhbXApIHsKQEAgLTEyNjYsOSArMTI2Niw4IEBACiBzdGF0aWMgaW50IG1hcF9zd2l0Y2hfZXZlbnQoc3RydWN0IHBlcmZfc2NoZWQgKnNjaGVkLCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewotCWNvbnN0IHUzMiBwcmV2X3BpZCA9IHBlcmZfZXZzZWxfX2ludHZhbChldnNlbCwgc2FtcGxlLCAicHJldl9waWQiKSwKLQkJICBuZXh0X3BpZCA9IHBlcmZfZXZzZWxfX2ludHZhbChldnNlbCwgc2FtcGxlLCAibmV4dF9waWQiKTsKLQlzdHJ1Y3QgdGhyZWFkICpzY2hlZF9vdXQgX19tYXliZV91bnVzZWQsICpzY2hlZF9pbjsKKwljb25zdCB1MzIgbmV4dF9waWQgPSBwZXJmX2V2c2VsX19pbnR2YWwoZXZzZWwsIHNhbXBsZSwgIm5leHRfcGlkIik7CisJc3RydWN0IHRocmVhZCAqc2NoZWRfaW47CiAJaW50IG5ld19zaG9ydG5hbWU7CiAJdTY0IHRpbWVzdGFtcDAsIHRpbWVzdGFtcCA9IHNhbXBsZS0+dGltZTsKIAlzNjQgZGVsdGE7CkBAIC0xMjkxLDcgKzEyOTAsNiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0Jc2NoZWRfb3V0ID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwgMCwgcHJldl9waWQpOwogCXNjaGVkX2luID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwgMCwgbmV4dF9waWQpOwogCiAJc2NoZWQtPmN1cnJfdGhyZWFkW3RoaXNfY3B1XSA9IHNjaGVkX2luOwpAQCAtMTMwMCwxNyArMTI5OCwyNSBAQAogCiAJbmV3X3Nob3J0bmFtZSA9IDA7CiAJaWYgKCFzY2hlZF9pbi0+c2hvcnRuYW1lWzBdKSB7Ci0JCXNjaGVkX2luLT5zaG9ydG5hbWVbMF0gPSBzY2hlZC0+bmV4dF9zaG9ydG5hbWUxOwotCQlzY2hlZF9pbi0+c2hvcnRuYW1lWzFdID0gc2NoZWQtPm5leHRfc2hvcnRuYW1lMjsKLQotCQlpZiAoc2NoZWQtPm5leHRfc2hvcnRuYW1lMSA8ICdaJykgewotCQkJc2NoZWQtPm5leHRfc2hvcnRuYW1lMSsrOworCQlpZiAoIXN0cmNtcCh0aHJlYWRfX2NvbW1fc3RyKHNjaGVkX2luKSwgInN3YXBwZXIiKSkgeworCQkJLyoKKwkJCSAqIERvbid0IGFsbG9jYXRlIGEgbGV0dGVyLW51bWJlciBmb3Igc3dhcHBlcjowCisJCQkgKiBhcyBhIHNob3J0bmFtZS4gSW5zdGVhZCwgd2UgdXNlICcuJyBmb3IgaXQuCisJCQkgKi8KKwkJCXNjaGVkX2luLT5zaG9ydG5hbWVbMF0gPSAnLic7CisJCQlzY2hlZF9pbi0+c2hvcnRuYW1lWzFdID0gJyAnOwogCQl9IGVsc2UgewotCQkJc2NoZWQtPm5leHRfc2hvcnRuYW1lMT0nQSc7Ci0JCQlpZiAoc2NoZWQtPm5leHRfc2hvcnRuYW1lMiA8ICc5JykgewotCQkJCXNjaGVkLT5uZXh0X3Nob3J0bmFtZTIrKzsKKwkJCXNjaGVkX2luLT5zaG9ydG5hbWVbMF0gPSBzY2hlZC0+bmV4dF9zaG9ydG5hbWUxOworCQkJc2NoZWRfaW4tPnNob3J0bmFtZVsxXSA9IHNjaGVkLT5uZXh0X3Nob3J0bmFtZTI7CisKKwkJCWlmIChzY2hlZC0+bmV4dF9zaG9ydG5hbWUxIDwgJ1onKSB7CisJCQkJc2NoZWQtPm5leHRfc2hvcnRuYW1lMSsrOwogCQkJfSBlbHNlIHsKLQkJCQlzY2hlZC0+bmV4dF9zaG9ydG5hbWUyPScwJzsKKwkJCQlzY2hlZC0+bmV4dF9zaG9ydG5hbWUxID0gJ0EnOworCQkJCWlmIChzY2hlZC0+bmV4dF9zaG9ydG5hbWUyIDwgJzknKQorCQkJCQlzY2hlZC0+bmV4dF9zaG9ydG5hbWUyKys7CisJCQkJZWxzZQorCQkJCQlzY2hlZC0+bmV4dF9zaG9ydG5hbWUyID0gJzAnOwogCQkJfQogCQl9CiAJCW5ld19zaG9ydG5hbWUgPSAxOwpAQCAtMTMyMiwxMiArMTMyOCw5IEBACiAJCWVsc2UKIAkJCXByaW50ZigiKiIpOwogCi0JCWlmIChzY2hlZC0+Y3Vycl90aHJlYWRbY3B1XSkgewotCQkJaWYgKHNjaGVkLT5jdXJyX3RocmVhZFtjcHVdLT50aWQpCi0JCQkJcHJpbnRmKCIlMnMgIiwgc2NoZWQtPmN1cnJfdGhyZWFkW2NwdV0tPnNob3J0bmFtZSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRmKCIuICAiKTsKLQkJfSBlbHNlCisJCWlmIChzY2hlZC0+Y3Vycl90aHJlYWRbY3B1XSkKKwkJCXByaW50ZigiJTJzICIsIHNjaGVkLT5jdXJyX3RocmVhZFtjcHVdLT5zaG9ydG5hbWUpOworCQllbHNlCiAJCQlwcmludGYoIiAgICIpOwogCX0KIApAQCAtMTQ5NiwxNCArMTQ5OSw2IEBACiAJCQkoZG91YmxlKXNjaGVkLT5ucl9sb3N0X2V2ZW50cy8oZG91YmxlKXNjaGVkLT5ucl9ldmVudHMgKiAxMDAuMCwKIAkJCXNjaGVkLT5ucl9sb3N0X2V2ZW50cywgc2NoZWQtPm5yX2V2ZW50cywgc2NoZWQtPm5yX2xvc3RfY2h1bmtzKTsKIAl9Ci0JaWYgKHNjaGVkLT5ucl9zdGF0ZV9tYWNoaW5lX2J1Z3MgJiYgc2NoZWQtPm5yX3RpbWVzdGFtcHMpIHsKLQkJcHJpbnRmKCIgIElORk86ICUuM2YlJSBzdGF0ZSBtYWNoaW5lIGJ1Z3MgKCVsZCBvdXQgb2YgJWxkKSIsCi0JCQkoZG91YmxlKXNjaGVkLT5ucl9zdGF0ZV9tYWNoaW5lX2J1Z3MvKGRvdWJsZSlzY2hlZC0+bnJfdGltZXN0YW1wcyoxMDAuMCwKLQkJCXNjaGVkLT5ucl9zdGF0ZV9tYWNoaW5lX2J1Z3MsIHNjaGVkLT5ucl90aW1lc3RhbXBzKTsKLQkJaWYgKHNjaGVkLT5ucl9sb3N0X2V2ZW50cykKLQkJCXByaW50ZigiIChkdWUgdG8gbG9zdCBldmVudHM/KSIpOwotCQlwcmludGYoIlxuIik7Ci0JfQogCWlmIChzY2hlZC0+bnJfY29udGV4dF9zd2l0Y2hfYnVncyAmJiBzY2hlZC0+bnJfdGltZXN0YW1wcykgewogCQlwcmludGYoIiAgSU5GTzogJS4zZiUlIGNvbnRleHQgc3dpdGNoIGJ1Z3MgKCVsZCBvdXQgb2YgJWxkKSIsCiAJCQkoZG91YmxlKXNjaGVkLT5ucl9jb250ZXh0X3N3aXRjaF9idWdzLyhkb3VibGUpc2NoZWQtPm5yX3RpbWVzdGFtcHMqMTAwLjAsCkBAIC0xNjM1LDYgKzE2MzAsNyBAQAogCQkiLWUiLCAic2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lIiwKIAkJIi1lIiwgInNjaGVkOnNjaGVkX3Byb2Nlc3NfZm9yayIsCiAJCSItZSIsICJzY2hlZDpzY2hlZF93YWtldXAiLAorCQkiLWUiLCAic2NoZWQ6c2NoZWRfd2FrZXVwX25ldyIsCiAJCSItZSIsICJzY2hlZDpzY2hlZF9taWdyYXRlX3Rhc2siLAogCX07CiAKQEAgLTE3MTMsOCArMTcwOSwxMCBAQAogCQkicGVyZiBzY2hlZCByZXBsYXkgWzxvcHRpb25zPl0iLAogCQlOVUxMCiAJfTsKLQljb25zdCBjaGFyICogY29uc3Qgc2NoZWRfdXNhZ2VbXSA9IHsKLQkJInBlcmYgc2NoZWQgWzxvcHRpb25zPl0ge3JlY29yZHxsYXRlbmN5fG1hcHxyZXBsYXl8c2NyaXB0fSIsCisJY29uc3QgY2hhciAqY29uc3Qgc2NoZWRfc3ViY29tbWFuZHNbXSA9IHsgInJlY29yZCIsICJsYXRlbmN5IiwgIm1hcCIsCisJCQkJCQkgICJyZXBsYXkiLCAic2NyaXB0IiwgTlVMTCB9OworCWNvbnN0IGNoYXIgKnNjaGVkX3VzYWdlW10gPSB7CisJCU5VTEwsCiAJCU5VTEwKIAl9OwogCXN0cnVjdCB0cmFjZV9zY2hlZF9oYW5kbGVyIGxhdF9vcHMgID0gewpAQCAtMTczNiw4ICsxNzM0LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzY2hlZC5jdXJyX3BpZCk7IGkrKykKIAkJc2NoZWQuY3Vycl9waWRbaV0gPSAtMTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHNjaGVkX29wdGlvbnMsIHNjaGVkX3VzYWdlLAotCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19zdWJjb21tYW5kKGFyZ2MsIGFyZ3YsIHNjaGVkX29wdGlvbnMsIHNjaGVkX3N1YmNvbW1hbmRzLAorCQkJCQlzY2hlZF91c2FnZSwgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAJaWYgKCFhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnMoc2NoZWRfdXNhZ2UsIHNjaGVkX29wdGlvbnMpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggNjVhYWE1Yi4uNWIzODljZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtMjUzLDYgKzI1Myw5IEBACiAJCXJldHVybiBOVUxMOwogCiAJaGlzdHNfX2luY19ucl9ldmVudHMoJmV2c2VsLT5oaXN0cywgUEVSRl9SRUNPUkRfU0FNUExFKTsKKwlpZiAoIWhlLT5maWx0ZXJlZCkKKwkJZXZzZWwtPmhpc3RzLnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzKys7CisKIAlyZXR1cm4gaGU7CiB9CiAKQEAgLTY5NCw4ICs2OTcsNyBAQAogCWlmIChldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0VYQUNUX0lQKQogCQl0b3AtPmV4YWN0X3NhbXBsZXMrKzsKIAotCWlmIChwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgbWFjaGluZSwgJmFsLCBzYW1wbGUpIDwgMCB8fAotCSAgICBhbC5maWx0ZXJlZCkKKwlpZiAocGVyZl9ldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIG1hY2hpbmUsICZhbCwgc2FtcGxlKSA8IDApCiAJCXJldHVybjsKIAogCWlmICghdG9wLT5rcHRyX3Jlc3RyaWN0X3dhcm5lZCAmJgpAQCAtMTA4MSw4ICsxMDgzLDEwIEBACiAJT1BUX0lOQ1IoJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBjb3VudGVyIG9wZW4gZXJyb3JzLCBldGMpIiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKLQkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQsIHdlaWdodCwgbG9jYWxfd2VpZ2h0LCIKLQkJICAgIiBhYm9ydCwgaW5fdHgsIHRyYW5zYWN0aW9uIiksCisJCSAgICJzb3J0IGJ5IGtleShzKTogcGlkLCBjb21tLCBkc28sIHN5bWJvbCwgcGFyZW50LCBjcHUsIHNyY2xpbmUsIC4uLiIKKwkJICAgIiBQbGVhc2UgcmVmZXIgdGhlIG1hbiBwYWdlIGZvciB0aGUgY29tcGxldGUgbGlzdC4iKSwKKwlPUFRfU1RSSU5HKDAsICJmaWVsZHMiLCAmZmllbGRfb3JkZXIsICJrZXlbLGtleXMuLi5dIiwKKwkJICAgIm91dHB1dCBmaWVsZChzKTogb3ZlcmhlYWQsIHBlcmlvZCwgc2FtcGxlIHBsdXMgYWxsIG9mIHNvcnQga2V5cyIpLAogCU9QVF9CT09MRUFOKCduJywgInNob3ctbnItc2FtcGxlcyIsICZzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMsCiAJCSAgICAiU2hvdyBhIGNvbHVtbiB3aXRoIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyIpLAogCU9QVF9DQUxMQkFDS19OT09QVCgnZycsIE5VTEwsICZ0b3AucmVjb3JkX29wdHMsCkBAIC0xMTE2LDYgKzExMjAsOCBAQAogCU9QVF9TVFJJTkcoJ3UnLCAidWlkIiwgJnRhcmdldC0+dWlkX3N0ciwgInVzZXIiLCAidXNlciB0byBwcm9maWxlIiksCiAJT1BUX0NBTExCQUNLKDAsICJwZXJjZW50LWxpbWl0IiwgJnRvcCwgInBlcmNlbnQiLAogCQkgICAgICJEb24ndCBzaG93IGVudHJpZXMgdW5kZXIgdGhhdCBwZXJjZW50IiwgcGFyc2VfcGVyY2VudF9saW1pdCksCisJT1BUX0NBTExCQUNLKDAsICJwZXJjZW50YWdlIiwgTlVMTCwgInJlbGF0aXZlfGFic29sdXRlIiwKKwkJICAgICAiSG93IHRvIGRpc3BsYXkgcGVyY2VudGFnZSBvZiBmaWx0ZXJlZCBlbnRyaWVzIiwgcGFyc2VfZmlsdGVyX3BlcmNlbnRhZ2UpLAogCU9QVF9FTkQoKQogCX07CiAJY29uc3QgY2hhciAqIGNvbnN0IHRvcF91c2FnZVtdID0gewpAQCAtMTEzMywxNyArMTEzOSwxOSBAQAogCWlmIChhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnModG9wX3VzYWdlLCBvcHRpb25zKTsKIAotCWlmIChzb3J0X29yZGVyID09IGRlZmF1bHRfc29ydF9vcmRlcikKLQkJc29ydF9vcmRlciA9ICJkc28sc3ltYm9sIjsKLQotCWlmIChzZXR1cF9zb3J0aW5nKCkgPCAwKSB7Ci0JCXBhcnNlX29wdGlvbnNfdXNhZ2UodG9wX3VzYWdlLCBvcHRpb25zLCAicyIsIDEpOwotCQlnb3RvIG91dF9kZWxldGVfZXZsaXN0OwotCX0KLQorCXNvcnRfX21vZGUgPSBTT1JUX01PREVfX1RPUDsKIAkvKiBkaXNwbGF5IHRocmVhZCB3YW50cyBlbnRyaWVzIHRvIGJlIGNvbGxhcHNlZCBpbiBhIGRpZmZlcmVudCB0cmVlICovCiAJc29ydF9fbmVlZF9jb2xsYXBzZSA9IDE7CiAKKwlpZiAoc2V0dXBfc29ydGluZygpIDwgMCkgeworCQlpZiAoc29ydF9vcmRlcikKKwkJCXBhcnNlX29wdGlvbnNfdXNhZ2UodG9wX3VzYWdlLCBvcHRpb25zLCAicyIsIDEpOworCQlpZiAoZmllbGRfb3JkZXIpCisJCQlwYXJzZV9vcHRpb25zX3VzYWdlKHNvcnRfb3JkZXIgPyBOVUxMIDogdG9wX3VzYWdlLAorCQkJCQkgICAgb3B0aW9ucywgImZpZWxkcyIsIDApOworCQlnb3RvIG91dF9kZWxldGVfZXZsaXN0OworCX0KKwogCWlmICh0b3AudXNlX3N0ZGlvKQogCQl1c2VfYnJvd3NlciA9IDA7CiAJZWxzZSBpZiAodG9wLnVzZV90dWkpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCmluZGV4IDgwMmNmNTQ0Li43MjliYmRmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQpAQCAtMjksMTYgKzI5LDIyIEBACiAgIGVuZGlmCiAgIE5PX1BFUkZfUkVHUyA6PSAwCiBlbmRpZgorCiBpZmVxICgkKEFSQ0gpLGFybSkKICAgTk9fUEVSRl9SRUdTIDo9IDAKICAgTElCVU5XSU5EX0xJQlMgPSAtbHVud2luZCAtbHVud2luZC1hcm0KIGVuZGlmCiAKLSMgU28gZmFyIHRoZXJlJ3Mgb25seSB4ODYgbGliZHcgdW53aW5kIHN1cHBvcnQgbWVyZ2VkIGluIHBlcmYuCitpZmVxICgkKEFSQ0gpLGFybTY0KQorICBOT19QRVJGX1JFR1MgOj0gMAorICBMSUJVTldJTkRfTElCUyA9IC1sdW53aW5kIC1sdW53aW5kLWFhcmNoNjQKK2VuZGlmCisKKyMgU28gZmFyIHRoZXJlJ3Mgb25seSB4ODYgYW5kIGFybSBsaWJkdyB1bndpbmQgc3VwcG9ydCBtZXJnZWQgaW4gcGVyZi4KICMgRGlzYWJsZSBpdCBvbiBhbGwgb3RoZXIgYXJjaGl0ZWN0dXJlcyBpbiBjYXNlIGxpYmR3IHVud2luZAogIyBzdXBwb3J0IGlzIGRldGVjdGVkIGluIHN5c3RlbS4gQWRkIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCiAjIHRvIHRoZSBjaGVjay4KLWlmbmVxICgkKEFSQ0gpLHg4NikKK2lmbmVxICgkKEFSQ0gpLCQoZmlsdGVyICQoQVJDSCkseDg2IGFybSkpCiAgIE5PX0xJQkRXX0RXQVJGX1VOV0lORCA6PSAxCiBlbmRpZgogCkBAIC0xNjgsNyArMTc0LDYgQEAKIAlsaWJweXRob24tdmVyc2lvbgkJXAogCWxpYnNsYW5nCQkJXAogCWxpYnVud2luZAkJCVwKLQlvbi1leGl0CQkJCVwKIAlzdGFja3Byb3RlY3Rvci1hbGwJCVwKIAl0aW1lcmZkCQkJCVwKIAlsaWJkdy1kd2FyZi11bndpbmQKQEAgLTE5NCw3ICsxOTksNiBAQAogCWxpYmVsZi1nZXRwaGRybnVtCQlcCiAJbGliZWxmLW1tYXAJCQlcCiAJbGlicHl0aG9uLXZlcnNpb24JCVwKLQlvbi1leGl0CQkJCVwKIAlzdGFja3Byb3RlY3Rvci1hbGwJCVwKIAl0aW1lcmZkCQkJCVwKIAlsaWJ1bndpbmQtZGVidWctZnJhbWUJCVwKQEAgLTM3MCw3ICszNzQsNyBAQAogZW5kaWYKIAogaWZuZGVmIE5PX0xJQlVOV0lORAotICBpZmVxICgkKEFSQ0gpLGFybSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLGFybSBhcm02NCkpCiAgICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssbGlidW53aW5kLWRlYnVnLWZyYW1lKQogICAgIGlmbmVxICgkKGZlYXR1cmUtbGlidW53aW5kLWRlYnVnLWZyYW1lKSwgMSkKICAgICAgIG1zZyA6PSAkKHdhcm5pbmcgTm8gZGVidWdfZnJhbWUgc3VwcG9ydCBmb3VuZCBpbiBsaWJ1bndpbmQpOwpAQCAtNTY1LDEyICs1NjksNiBAQAogICBDRkxBR1MgKz0gLURIQVZFX0xJQkJGRF9TVVBQT1JUCiBlbmRpZgogCi1pZm5kZWYgTk9fT05fRVhJVAotICBpZmVxICgkKGZlYXR1cmUtb24tZXhpdCksIDEpCi0gICAgQ0ZMQUdTICs9IC1ESEFWRV9PTl9FWElUX1NVUFBPUlQKLSAgZW5kaWYKLWVuZGlmCi0KIGlmbmRlZiBOT19CQUNLVFJBQ0UKICAgaWZlcSAoJChmZWF0dXJlLWJhY2t0cmFjZSksIDEpCiAgICAgQ0ZMQUdTICs9IC1ESEFWRV9CQUNLVFJBQ0VfU1VQUE9SVApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQppbmRleCAyZGExMDNjLi42NGM4NGU1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQpAQCAtMjQsNyArMjQsNiBAQAogCXRlc3QtbGlic2xhbmcuYmluCQlcCiAJdGVzdC1saWJ1bndpbmQuYmluCQlcCiAJdGVzdC1saWJ1bndpbmQtZGVidWctZnJhbWUuYmluCVwKLQl0ZXN0LW9uLWV4aXQuYmluCQlcCiAJdGVzdC1zdGFja3Byb3RlY3Rvci1hbGwuYmluCVwKIAl0ZXN0LXRpbWVyZmQuYmluCQlcCiAJdGVzdC1saWJkdy1kd2FyZi11bndpbmQuYmluCkBAIC0xMzMsOSArMTMyLDYgQEAKIHRlc3QtY3BsdXMtZGVtYW5nbGUuYmluOgogCSQoQlVJTEQpIC1saWJlcnR5CiAKLXRlc3Qtb24tZXhpdC5iaW46Ci0JJChCVUlMRCkKLQogdGVzdC1iYWNrdHJhY2UuYmluOgogCSQoQlVJTEQpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWFsbC5jCmluZGV4IGZjMzdlYjMuLmZlNWMxZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1hbGwuYwpAQCAtNjksMTAgKzY5LDYgQEAKICMgaW5jbHVkZSAidGVzdC1saWJiZmQuYyIKICN1bmRlZiBtYWluCiAKLSNkZWZpbmUgbWFpbiBtYWluX3Rlc3Rfb25fZXhpdAotIyBpbmNsdWRlICJ0ZXN0LW9uLWV4aXQuYyIKLSN1bmRlZiBtYWluCi0KICNkZWZpbmUgbWFpbiBtYWluX3Rlc3RfYmFja3RyYWNlCiAjIGluY2x1ZGUgInRlc3QtYmFja3RyYWNlLmMiCiAjdW5kZWYgbWFpbgpAQCAtMTEwLDcgKzEwNiw2IEBACiAJbWFpbl90ZXN0X2d0azIoYXJnYywgYXJndik7CiAJbWFpbl90ZXN0X2d0azJfaW5mb2JhcihhcmdjLCBhcmd2KTsKIAltYWluX3Rlc3RfbGliYmZkKCk7Ci0JbWFpbl90ZXN0X29uX2V4aXQoKTsKIAltYWluX3Rlc3RfYmFja3RyYWNlKCk7CiAJbWFpbl90ZXN0X2xpYm51bWEoKTsKIAltYWluX3Rlc3RfdGltZXJmZCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1vbi1leGl0LmMgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LW9uLWV4aXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4OGIxNi4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LW9uLWV4aXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1zdGF0aWMgdm9pZCBleGl0X2ZuKGludCBzdGF0dXMsIHZvaWQgKl9fZGF0YSkKLXsKLQlwcmludGYoImV4aXQgc3RhdHVzOiAlZCwgZGF0YTogJWRcbiIsIHN0YXR1cywgKihpbnQgKilfX2RhdGEpOwotfQotCi1zdGF0aWMgaW50IGRhdGEgPSAxMjM7Ci0KLWludCBtYWluKHZvaWQpCi17Ci0Jb25fZXhpdChleGl0X2ZuLCAmZGF0YSk7Ci0KLQlyZXR1cm4gMzIxOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLWNvbXBsZXRpb24uc2ggYi90b29scy9wZXJmL3BlcmYtY29tcGxldGlvbi5zaAppbmRleCBhZTNhNTc2Li4zMzU2OTg0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYtY29tcGxldGlvbi5zaAorKysgYi90b29scy9wZXJmL3BlcmYtY29tcGxldGlvbi5zaApAQCAtMTIxLDggKzEyMSw4IEBACiAJZWxpZiBbWyAkcHJldiA9PSAiLWUiICYmICIke3dvcmRzWzFdfSIgPT0gQChyZWNvcmR8c3RhdHx0b3ApIF1dOyB0aGVuCiAJCWV2dHM9JCgkY21kIGxpc3QgLS1yYXctZHVtcCkKIAkJX19wZXJmY29tcF9jb2xvbiAiJGV2dHMiICIkY3VyIgotCSMgTGlzdCBzdWJjb21tYW5kcyBmb3IgJ3BlcmYga3ZtJwotCWVsaWYgW1sgJHByZXYgPT0gImt2bSIgXV07IHRoZW4KKwkjIExpc3Qgc3ViY29tbWFuZHMgZm9yIHBlcmYgY29tbWFuZHMKKwllbGlmIFtbICRwcmV2ID09IEAoa3ZtfGttZW18bWVtfGxvY2t8c2NoZWQpIF1dOyB0aGVuCiAJCXN1YmNtZHM9JCgkY21kICRwcmV2IC0tbGlzdC1jbWRzKQogCQlfX3BlcmZjb21wX2NvbG9uICIkc3ViY21kcyIgIiRjdXIiCiAJIyBMaXN0IGxvbmcgb3B0aW9uIG5hbWVzCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtc3lzLmggYi90b29scy9wZXJmL3BlcmYtc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2OGExNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi1zeXMuaApAQCAtMCwwICsxLDE5MCBAQAorI2lmbmRlZiBfUEVSRl9TWVNfSAorI2RlZmluZSBfUEVSRl9TWVNfSAorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgicmVwOyBub3AiIDo6OiAibWVtb3J5Iik7CisjZGVmaW5lIENQVUlORk9fUFJPQwkibW9kZWwgbmFtZSIKKyNpZm5kZWYgX19OUl9wZXJmX2V2ZW50X29wZW4KKyMgZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuIDMzNgorI2VuZGlmCisjaWZuZGVmIF9fTlJfZnV0ZXgKKyMgZGVmaW5lIF9fTlJfZnV0ZXggMjQwCisjZW5kaWYKKyNpZm5kZWYgX19OUl9nZXR0aWQKKyMgZGVmaW5lIF9fTlJfZ2V0dGlkIDIyNAorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgbWIoKQkJYXNtIHZvbGF0aWxlKCJtZmVuY2UiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgic2ZlbmNlIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoImxmZW5jZSIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoInJlcDsgbm9wIiA6OjogIm1lbW9yeSIpOworI2RlZmluZSBDUFVJTkZPX1BST0MJIm1vZGVsIG5hbWUiCisjaWZuZGVmIF9fTlJfcGVyZl9ldmVudF9vcGVuCisjIGRlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbiAyOTgKKyNlbmRpZgorI2lmbmRlZiBfX05SX2Z1dGV4CisjIGRlZmluZSBfX05SX2Z1dGV4IDIwMgorI2VuZGlmCisjaWZuZGVmIF9fTlJfZ2V0dGlkCisjIGRlZmluZSBfX05SX2dldHRpZCAxODYKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX3Bvd2VycGNfXworI2luY2x1ZGUgIi4uLy4uL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIgorI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIENQVUlORk9fUFJPQwkiY3B1IgorI2VuZGlmCisKKyNpZmRlZiBfX3MzOTBfXworI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoImJjciAxNSwwIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoImJjciAxNSwwIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoImJjciAxNSwwIiA6OjogIm1lbW9yeSIpCisjZW5kaWYKKworI2lmZGVmIF9fc2hfXworI2lmIGRlZmluZWQoX19TSDRBX18pIHx8IGRlZmluZWQoX19TSDVfXykKKyMgZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgic3luY28iIDo6OiAibWVtb3J5IikKKyMgZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoInN5bmNvIiA6OjogIm1lbW9yeSIpCisjIGRlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCJzeW5jbyIgOjo6ICJtZW1vcnkiKQorI2Vsc2UKKyMgZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjIGRlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKKyMgZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorI2VuZGlmCisjZGVmaW5lIENQVUlORk9fUFJPQwkiY3B1IHR5cGUiCisjZW5kaWYKKworI2lmZGVmIF9faHBwYV9fCisjZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgQ1BVSU5GT19QUk9DCSJjcHUiCisjZW5kaWYKKworI2lmZGVmIF9fc3BhcmNfXworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiYmEscHQgJSV4Y2MsIDFmXG4iCVwKKwkJCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZFxuIglcCisJCQkJICAgICAiMTpcbiI6OjoibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorI2VuZGlmCisjZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorI2RlZmluZSBDUFVJTkZPX1BST0MJImNwdSIKKyNlbmRpZgorCisjaWZkZWYgX19hbHBoYV9fCisjZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgibWIiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgid21iIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIm1iIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIENQVUlORk9fUFJPQwkiY3B1IG1vZGVsIgorI2VuZGlmCisKKyNpZmRlZiBfX2lhNjRfXworI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUgKCJtZiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlICgibWYiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSAoIm1mIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSAoImhpbnQgQHBhdXNlIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIENQVUlORk9fUFJPQwkibW9kZWwgbmFtZSIKKyNlbmRpZgorCisjaWZkZWYgX19hcm1fXworLyoKKyAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCisgKiBhcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGluIHRoZSBrZXJuZWwgc291cmNlIGZvciBkZXRhaWxzLgorICovCisjZGVmaW5lIG1iKCkJCSgodm9pZCgqKSh2b2lkKSkweGZmZmYwZmEwKSgpCisjZGVmaW5lIHdtYigpCQkoKHZvaWQoKikodm9pZCkpMHhmZmZmMGZhMCkoKQorI2RlZmluZSBybWIoKQkJKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKKyNkZWZpbmUgQ1BVSU5GT19QUk9DCSJQcm9jZXNzb3IiCisjZW5kaWYKKworI2lmZGVmIF9fYWFyY2g2NF9fCisjZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiZG1iIGlzaCIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCJkbWIgaXNoc3QiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgiZG1iIGlzaGxkIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgieWllbGQiIDo6OiAibWVtb3J5IikKKyNlbmRpZgorCisjaWZkZWYgX19taXBzX18KKyNkZWZpbmUgbWIoKQkJYXNtIHZvbGF0aWxlKAkJCQkJXAorCQkJCSIuc2V0CW1pcHMyXG5cdCIJCQlcCisJCQkJInN5bmNcblx0IgkJCQlcCisJCQkJIi5zZXQJbWlwczAiCQkJCVwKKwkJCQk6IC8qIG5vIG91dHB1dCAqLwkJCVwKKwkJCQk6IC8qIG5vIGlucHV0ICovCQkJXAorCQkJCTogIm1lbW9yeSIpCisjZGVmaW5lIHdtYigpCW1iKCkKKyNkZWZpbmUgcm1iKCkJbWIoKQorI2RlZmluZSBDUFVJTkZPX1BST0MJImNwdSBtb2RlbCIKKyNlbmRpZgorCisjaWZkZWYgX19hcmNfXworI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIENQVUlORk9fUFJPQwkiUHJvY2Vzc29yIgorI2VuZGlmCisKKyNpZmRlZiBfX21ldGFnX18KKyNkZWZpbmUgbWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBDUFVJTkZPX1BST0MJIkNQVSIKKyNlbmRpZgorCisjaWZkZWYgX194dGVuc2FfXworI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoIm1lbXciIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgibWVtdyIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgQ1BVSU5GT19QUk9DCSJjb3JlIElEIgorI2VuZGlmCisKKyNpZmRlZiBfX3RpbGVfXworI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUgKCJtZiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlICgibWYiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSAoIm1mIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSAoIm1mc3ByIHplcm8sIFBBU1MiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgQ1BVSU5GT19QUk9DICAgICJtb2RlbCBuYW1lIgorI2VuZGlmCisKKyNkZWZpbmUgYmFycmllcigpIGFzbSB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKQorCisjaWZuZGVmIGNwdV9yZWxheAorI2RlZmluZSBjcHVfcmVsYXgoKSBiYXJyaWVyKCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorc3lzX3BlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkgICAgICBwaWRfdCBwaWQsIGludCBjcHUsIGludCBncm91cF9mZCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIGF0dHIsIHBpZCwgY3B1LAorCQkgICAgIGdyb3VwX2ZkLCBmbGFncyk7CisKKyNpZmRlZiBIQVZFX0FUVFJfVEVTVAorCWlmICh1bmxpa2VseSh0ZXN0X2F0dHJfX2VuYWJsZWQpKQorCQl0ZXN0X2F0dHJfX29wZW4oYXR0ciwgcGlkLCBjcHUsIGZkLCBncm91cF9mZCwgZmxhZ3MpOworI2VuZGlmCisJcmV0dXJuIGZkOworfQorCisjZW5kaWYgLyogX1BFUkZfU1lTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5oIGIvdG9vbHMvcGVyZi9wZXJmLmgKaW5kZXggNWMxMWVjYS4uNTEwYzY1ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmgKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmgKQEAgLTEsMTgyICsxLDE4IEBACiAjaWZuZGVmIF9QRVJGX1BFUkZfSAogI2RlZmluZSBfUEVSRl9QRVJGX0gKIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLQotI2lmIGRlZmluZWQoX19pMzg2X18pCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCJyZXA7IG5vcCIgOjo6ICJtZW1vcnkiKTsKLSNkZWZpbmUgQ1BVSU5GT19QUk9DCSJtb2RlbCBuYW1lIgotI2lmbmRlZiBfX05SX3BlcmZfZXZlbnRfb3BlbgotIyBkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gMzM2Ci0jZW5kaWYKLSNpZm5kZWYgX19OUl9mdXRleAotIyBkZWZpbmUgX19OUl9mdXRleCAyNDAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgibWZlbmNlIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoInNmZW5jZSIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCJsZmVuY2UiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCJyZXA7IG5vcCIgOjo6ICJtZW1vcnkiKTsKLSNkZWZpbmUgQ1BVSU5GT19QUk9DCSJtb2RlbCBuYW1lIgotI2lmbmRlZiBfX05SX3BlcmZfZXZlbnRfb3BlbgotIyBkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gMjk4Ci0jZW5kaWYKLSNpZm5kZWYgX19OUl9mdXRleAotIyBkZWZpbmUgX19OUl9mdXRleCAyMDIKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBfX3Bvd2VycGNfXwotI2luY2x1ZGUgIi4uLy4uL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIgotI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUgKCJzeW5jIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIENQVUlORk9fUFJPQwkiY3B1IgotI2VuZGlmCi0KLSNpZmRlZiBfX3MzOTBfXwotI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoImJjciAxNSwwIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoImJjciAxNSwwIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoImJjciAxNSwwIiA6OjogIm1lbW9yeSIpCi0jZW5kaWYKLQotI2lmZGVmIF9fc2hfXwotI2lmIGRlZmluZWQoX19TSDRBX18pIHx8IGRlZmluZWQoX19TSDVfXykKLSMgZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgic3luY28iIDo6OiAibWVtb3J5IikKLSMgZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoInN5bmNvIiA6OjogIm1lbW9yeSIpCi0jIGRlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCJzeW5jbyIgOjo6ICJtZW1vcnkiKQotI2Vsc2UKLSMgZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCi0jIGRlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKLSMgZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQotI2VuZGlmCi0jZGVmaW5lIENQVUlORk9fUFJPQwkiY3B1IHR5cGUiCi0jZW5kaWYKLQotI2lmZGVmIF9faHBwYV9fCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgQ1BVSU5GT19QUk9DCSJjcHUiCi0jZW5kaWYKLQotI2lmZGVmIF9fc3BhcmNfXwotI2lmZGVmIF9fTFA2NF9fCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiYmEscHQgJSV4Y2MsIDFmXG4iCVwKLQkJCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZFxuIglcCi0JCQkJICAgICAiMTpcbiI6OjoibWVtb3J5IikKLSNlbHNlCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQotI2VuZGlmCi0jZGVmaW5lIHdtYigpCQlhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQotI2RlZmluZSBDUFVJTkZPX1BST0MJImNwdSIKLSNlbmRpZgotCi0jaWZkZWYgX19hbHBoYV9fCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgibWIiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgid21iIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIm1iIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIENQVUlORk9fUFJPQwkiY3B1IG1vZGVsIgotI2VuZGlmCi0KLSNpZmRlZiBfX2lhNjRfXwotI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUgKCJtZiIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlICgibWYiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSAoIm1mIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSAoImhpbnQgQHBhdXNlIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIENQVUlORk9fUFJPQwkibW9kZWwgbmFtZSIKLSNlbmRpZgotCi0jaWZkZWYgX19hcm1fXwotLyoKLSAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCi0gKiBhcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGluIHRoZSBrZXJuZWwgc291cmNlIGZvciBkZXRhaWxzLgotICovCi0jZGVmaW5lIG1iKCkJCSgodm9pZCgqKSh2b2lkKSkweGZmZmYwZmEwKSgpCi0jZGVmaW5lIHdtYigpCQkoKHZvaWQoKikodm9pZCkpMHhmZmZmMGZhMCkoKQotI2RlZmluZSBybWIoKQkJKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKLSNkZWZpbmUgQ1BVSU5GT19QUk9DCSJQcm9jZXNzb3IiCi0jZW5kaWYKLQotI2lmZGVmIF9fYWFyY2g2NF9fCi0jZGVmaW5lIG1iKCkJCWFzbSB2b2xhdGlsZSgiZG1iIGlzaCIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCJkbWIgaXNoc3QiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgiZG1iIGlzaGxkIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgieWllbGQiIDo6OiAibWVtb3J5IikKLSNlbmRpZgotCi0jaWZkZWYgX19taXBzX18KLSNkZWZpbmUgbWIoKQkJYXNtIHZvbGF0aWxlKAkJCQkJXAotCQkJCSIuc2V0CW1pcHMyXG5cdCIJCQlcCi0JCQkJInN5bmNcblx0IgkJCQlcCi0JCQkJIi5zZXQJbWlwczAiCQkJCVwKLQkJCQk6IC8qIG5vIG91dHB1dCAqLwkJCVwKLQkJCQk6IC8qIG5vIGlucHV0ICovCQkJXAotCQkJCTogIm1lbW9yeSIpCi0jZGVmaW5lIHdtYigpCW1iKCkKLSNkZWZpbmUgcm1iKCkJbWIoKQotI2RlZmluZSBDUFVJTkZPX1BST0MJImNwdSBtb2RlbCIKLSNlbmRpZgotCi0jaWZkZWYgX19hcmNfXwotI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIENQVUlORk9fUFJPQwkiUHJvY2Vzc29yIgotI2VuZGlmCi0KLSNpZmRlZiBfX21ldGFnX18KLSNkZWZpbmUgbWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSBDUFVJTkZPX1BST0MJIkNQVSIKLSNlbmRpZgotCi0jaWZkZWYgX194dGVuc2FfXwotI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoIm1lbXciIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgd21iKCkJCWFzbSB2b2xhdGlsZSgibWVtdyIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgQ1BVSU5GT19QUk9DCSJjb3JlIElEIgotI2VuZGlmCi0KLSNpZmRlZiBfX3RpbGVfXwotI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUgKCJtZiIgOjo6ICJtZW1vcnkiKQotI2RlZmluZSB3bWIoKQkJYXNtIHZvbGF0aWxlICgibWYiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSAoIm1mIiA6OjogIm1lbW9yeSIpCi0jZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSAoIm1mc3ByIHplcm8sIFBBU1MiIDo6OiAibWVtb3J5IikKLSNkZWZpbmUgQ1BVSU5GT19QUk9DICAgICJtb2RlbCBuYW1lIgotI2VuZGlmCi0KLSNkZWZpbmUgYmFycmllcigpIGFzbSB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKQotCi0jaWZuZGVmIGNwdV9yZWxheAotI2RlZmluZSBjcHVfcmVsYXgoKSBiYXJyaWVyKCkKLSNlbmRpZgotCi0jZGVmaW5lIEFDQ0VTU19PTkNFKHgpICgqKHZvbGF0aWxlIHR5cGVvZih4KSAqKSYoeCkpCi0KLQogI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgotCi0jaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgotI2luY2x1ZGUgInV0aWwvdHlwZXMuaCIKICNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKLS8qCi0gKiBwcmN0bChQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUpIHdpbGwgKGNoZWFwbHkpIGRpc2FibGUgYWxsCi0gKiBjb3VudGVycyBpbiB0aGUgY3VycmVudCB0YXNrLgotICovCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9FVkVOVFNfRElTQUJMRSAgIDMxCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFICAgIDMyCitleHRlcm4gYm9vbCB0ZXN0X2F0dHJfX2VuYWJsZWQ7Cit2b2lkIHRlc3RfYXR0cl9faW5pdCh2b2lkKTsKK3ZvaWQgdGVzdF9hdHRyX19vcGVuKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIHBpZF90IHBpZCwgaW50IGNwdSwKKwkJICAgICBpbnQgZmQsIGludCBncm91cF9mZCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKKyNkZWZpbmUgSEFWRV9BVFRSX1RFU1QKKyNpbmNsdWRlICJwZXJmLXN5cy5oIgogCiAjaWZuZGVmIE5TRUNfUEVSX1NFQwogIyBkZWZpbmUgTlNFQ19QRVJfU0VDCQkJMTAwMDAwMDAwMFVMTApAQCAtMTkzLDY3ICsyOSw4IEBACiAJcmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjOwogfQogCi0vKgotICogUGljayB1cCBzb21lIGtlcm5lbCB0eXBlIGNvbnZlbnRpb25zOgotICovCi0jZGVmaW5lIF9fdXNlcgotI2RlZmluZSBhc21saW5rYWdlCi0KLSNkZWZpbmUgdW5saWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKLSNkZWZpbmUgbWluKHgsIHkpICh7CQkJCVwKLQl0eXBlb2YoeCkgX21pbjEgPSAoeCk7CQkJXAotCXR5cGVvZih5KSBfbWluMiA9ICh5KTsJCQlcCi0JKHZvaWQpICgmX21pbjEgPT0gJl9taW4yKTsJCVwKLQlfbWluMSA8IF9taW4yID8gX21pbjEgOiBfbWluMjsgfSkKLQotZXh0ZXJuIGJvb2wgdGVzdF9hdHRyX19lbmFibGVkOwotdm9pZCB0ZXN0X2F0dHJfX2luaXQodm9pZCk7Ci12b2lkIHRlc3RfYXR0cl9fb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLCBwaWRfdCBwaWQsIGludCBjcHUsCi0JCSAgICAgaW50IGZkLCBpbnQgZ3JvdXBfZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotCi1zdGF0aWMgaW5saW5lIGludAotc3lzX3BlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAotCQkgICAgICBwaWRfdCBwaWQsIGludCBjcHUsIGludCBncm91cF9mZCwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlpbnQgZmQ7Ci0KLQlmZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIGF0dHIsIHBpZCwgY3B1LAotCQkgICAgIGdyb3VwX2ZkLCBmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkodGVzdF9hdHRyX19lbmFibGVkKSkKLQkJdGVzdF9hdHRyX19vcGVuKGF0dHIsIHBpZCwgY3B1LCBmZCwgZ3JvdXBfZmQsIGZsYWdzKTsKLQotCXJldHVybiBmZDsKLX0KLQotI2RlZmluZSBNQVhfQ09VTlRFUlMJCQkyNTYKICNkZWZpbmUgTUFYX05SX0NQVVMJCQkyNTYKIAotc3RydWN0IGlwX2NhbGxjaGFpbiB7Ci0JdTY0IG5yOwotCXU2NCBpcHNbMF07Ci19OwotCi1zdHJ1Y3QgYnJhbmNoX2ZsYWdzIHsKLQl1NjQgbWlzcHJlZDoxOwotCXU2NCBwcmVkaWN0ZWQ6MTsKLQl1NjQgaW5fdHg6MTsKLQl1NjQgYWJvcnQ6MTsKLQl1NjQgcmVzZXJ2ZWQ6NjA7Ci19OwotCi1zdHJ1Y3QgYnJhbmNoX2VudHJ5IHsKLQl1NjQJCQkJZnJvbTsKLQl1NjQJCQkJdG87Ci0Jc3RydWN0IGJyYW5jaF9mbGFncyBmbGFnczsKLX07Ci0KLXN0cnVjdCBicmFuY2hfc3RhY2sgewotCXU2NAkJCQlucjsKLQlzdHJ1Y3QgYnJhbmNoX2VudHJ5CWVudHJpZXNbMF07Ci19OwotCiBleHRlcm4gY29uc3QgY2hhciAqaW5wdXRfbmFtZTsKIGV4dGVybiBib29sIHBlcmZfaG9zdCwgcGVyZl9ndWVzdDsKIGV4dGVybiBjb25zdCBjaGFyIHBlcmZfdmVyc2lvbl9zdHJpbmdbXTsKQEAgLTI2MiwxMyArMzksNiBAQAogCiAjaW5jbHVkZSAidXRpbC90YXJnZXQuaCIKIAotZW51bSBwZXJmX2NhbGxfZ3JhcGhfbW9kZSB7Ci0JQ0FMTENIQUlOX05PTkUsCi0JQ0FMTENIQUlOX0ZQLAotCUNBTExDSEFJTl9EV0FSRiwKLQlDQUxMQ0hBSU5fTUFYCi19OwotCiBzdHJ1Y3QgcmVjb3JkX29wdHMgewogCXN0cnVjdCB0YXJnZXQgdGFyZ2V0OwogCWludAkgICAgIGNhbGxfZ3JhcGg7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2F0dHIuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvYXR0ci5jCmluZGV4IDAwMjE4ZjUuLjJkZmM5YWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvYXR0ci5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvYXR0ci5jCkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICogVGhlIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgdGVzdCBzdXBwb3J0LgogICoKQEAgLTE5LDE0ICsxOCw4IEBACiAgKiBwZXJtaXNzaW9ucy4gQWxsIHRoZSBldmVudCB0ZXh0IGZpbGVzIGFyZSBzdG9yZWQgdGhlcmUuCiAgKi8KIAotLyoKLSAqIFBvd2VycGMgbmVlZHMgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIGJlZm9yZSA8bGludXgvdHlwZXMuaD4gdG8gc2VsZWN0Ci0gKiAnaW50LWxsNjQuaCcgYW5kIGF2b2lkIGNvbXBpbGUgd2FybmluZ3Mgd2hlbiBwcmludGluZyBfX3U2NCB3aXRoICVsbHUuCi0gKi8KLSNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSAiLi4vcGVyZi5oIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvYnVpbHRpbi10ZXN0LmMKaW5kZXggYjExYmY4YS4uODMxZjUyYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2J1aWx0aW4tdGVzdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJLmRlc2MgPSAiVGVzdCBwYXJzaW5nIHdpdGggbm8gc2FtcGxlX2lkX2FsbCBiaXQgc2V0IiwKIAkJLmZ1bmMgPSB0ZXN0X19wYXJzZV9ub19zYW1wbGVfaWRfYWxsLAogCX0sCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKQorI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FybV9fKQogI2lmZGVmIEhBVkVfRFdBUkZfVU5XSU5EX1NVUFBPUlQKIAl7CiAJCS5kZXNjID0gIlRlc3QgZHdhcmYgdW53aW5kIiwKQEAgLTEyNCw2ICsxMjQsMjIgQEAKICNlbmRpZgogI2VuZGlmCiAJeworCQkuZGVzYyA9ICJUZXN0IGZpbHRlcmluZyBoaXN0IGVudHJpZXMiLAorCQkuZnVuYyA9IHRlc3RfX2hpc3RzX2ZpbHRlciwKKwl9LAorCXsKKwkJLmRlc2MgPSAiVGVzdCBtbWFwIHRocmVhZCBsb29rdXAiLAorCQkuZnVuYyA9IHRlc3RfX21tYXBfdGhyZWFkX2xvb2t1cCwKKwl9LAorCXsKKwkJLmRlc2MgPSAiVGVzdCB0aHJlYWQgbWcgc2hhcmluZyIsCisJCS5mdW5jID0gdGVzdF9fdGhyZWFkX21nX3NoYXJlLAorCX0sCisJeworCQkuZGVzYyA9ICJUZXN0IG91dHB1dCBzb3J0aW5nIG9mIGhpc3QgZW50cmllcyIsCisJCS5mdW5jID0gdGVzdF9faGlzdHNfb3V0cHV0LAorCX0sCisJewogCQkuZnVuYyA9IE5VTEwsCiAJfSwKIH07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jIGIvdG9vbHMvcGVyZi90ZXN0cy9jb2RlLXJlYWRpbmcuYwppbmRleCBiZmIxODY5Li42N2YyZDYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvY29kZS1yZWFkaW5nLmMKQEAgLTEsOCArMSw3IEBACi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIApAQCAtMjU3LDcgKzI1Niw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQl0aHJlYWQgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBzYW1wbGUucGlkLCBzYW1wbGUucGlkKTsKKwl0aHJlYWQgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBzYW1wbGUucGlkLCBzYW1wbGUudGlkKTsKIAlpZiAoIXRocmVhZCkgewogCQlwcl9kZWJ1ZygibWFjaGluZV9fZmluZG5ld190aHJlYWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9kc28tZGF0YS5jIGIvdG9vbHMvcGVyZi90ZXN0cy9kc28tZGF0YS5jCmluZGV4IDljYzgxYTMuLjNlNmNiMTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvZHNvLWRhdGEuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2Rzby1kYXRhLmMKQEAgLTEsNyArMSw3IEBACiAjaW5jbHVkZSAidXRpbC5oIgogCiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYwppbmRleCBjMDU5ZWU4Li4xMDhmMGNkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvZHdhcmYtdW53aW5kLmMKQEAgLTEsNSArMSw1IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgInRlc3RzLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvZXZzZWwtdHAtc2NoZWQuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvZXZzZWwtdHAtc2NoZWQuYwppbmRleCA0Nzc0ZjdmLi4zNWQ3ZmRiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2V2c2VsLXRwLXNjaGVkLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9ldnNlbC10cC1zY2hlZC5jCkBAIC03NCw5ICs3NCw2IEBACiAJaWYgKHBlcmZfZXZzZWxfX3Rlc3RfZmllbGQoZXZzZWwsICJwcmlvIiwgNCwgdHJ1ZSkpCiAJCXJldCA9IC0xOwogCi0JaWYgKHBlcmZfZXZzZWxfX3Rlc3RfZmllbGQoZXZzZWwsICJzdWNjZXNzIiwgNCwgdHJ1ZSkpCi0JCXJldCA9IC0xOwotCiAJaWYgKHBlcmZfZXZzZWxfX3Rlc3RfZmllbGQoZXZzZWwsICJ0YXJnZXRfY3B1IiwgNCwgdHJ1ZSkpCiAJCXJldCA9IC0xOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2NvbW1vbi5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGUwMWFhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfY29tbW9uLmMKQEAgLTAsMCArMSwyMDUgQEAKKyNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCisjaW5jbHVkZSAidXRpbC9zb3J0LmgiCisjaW5jbHVkZSAidXRpbC9ldnNlbC5oIgorI2luY2x1ZGUgInV0aWwvZXZsaXN0LmgiCisjaW5jbHVkZSAidXRpbC9tYWNoaW5lLmgiCisjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKKyNpbmNsdWRlICJ0ZXN0cy9oaXN0c19jb21tb24uaCIKKworc3RhdGljIHN0cnVjdCB7CisJdTMyIHBpZDsKKwljb25zdCBjaGFyICpjb21tOworfSBmYWtlX3RocmVhZHNbXSA9IHsKKwl7IDEwMCwgInBlcmYiIH0sCisJeyAyMDAsICJwZXJmIiB9LAorCXsgMzAwLCAiYmFzaCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiBwaWQ7CisJdTY0IHN0YXJ0OworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworfSBmYWtlX21tYXBfaW5mb1tdID0geworCXsgMTAwLCAweDQwMDAwLCAicGVyZiIgfSwKKwl7IDEwMCwgMHg1MDAwMCwgImxpYmMiIH0sCisJeyAxMDAsIDB4ZjAwMDAsICJba2VybmVsXSIgfSwKKwl7IDIwMCwgMHg0MDAwMCwgInBlcmYiIH0sCisJeyAyMDAsIDB4NTAwMDAsICJsaWJjIiB9LAorCXsgMjAwLCAweGYwMDAwLCAiW2tlcm5lbF0iIH0sCisJeyAzMDAsIDB4NDAwMDAsICJiYXNoIiB9LAorCXsgMzAwLCAweDUwMDAwLCAibGliYyIgfSwKKwl7IDMwMCwgMHhmMDAwMCwgIltrZXJuZWxdIiB9LAorfTsKKworc3RydWN0IGZha2Vfc3ltIHsKKwl1NjQgc3RhcnQ7CisJdTY0IGxlbmd0aDsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RhdGljIHN0cnVjdCBmYWtlX3N5bSBwZXJmX3N5bXNbXSA9IHsKKwl7IDcwMCwgMTAwLCAibWFpbiIgfSwKKwl7IDgwMCwgMTAwLCAicnVuX2NvbW1hbmQiIH0sCisJeyA5MDAsIDEwMCwgImNtZF9yZWNvcmQiIH0sCit9OworCitzdGF0aWMgc3RydWN0IGZha2Vfc3ltIGJhc2hfc3ltc1tdID0geworCXsgNzAwLCAxMDAsICJtYWluIiB9LAorCXsgODAwLCAxMDAsICJ4bWFsbG9jIiB9LAorCXsgOTAwLCAxMDAsICJ4ZnJlZSIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmFrZV9zeW0gbGliY19zeW1zW10gPSB7CisJeyA3MDAsIDEwMCwgIm1hbGxvYyIgfSwKKwl7IDgwMCwgMTAwLCAiZnJlZSIgfSwKKwl7IDkwMCwgMTAwLCAicmVhbGxvYyIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmFrZV9zeW0ga2VybmVsX3N5bXNbXSA9IHsKKwl7IDcwMCwgMTAwLCAic2NoZWR1bGUiIH0sCisJeyA4MDAsIDEwMCwgInBhZ2VfZmF1bHQiIH0sCisJeyA5MDAsIDEwMCwgInN5c19wZXJmX2V2ZW50X29wZW4iIH0sCit9OworCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpkc29fbmFtZTsKKwlzdHJ1Y3QgZmFrZV9zeW0gKnN5bXM7CisJc2l6ZV90IG5yX3N5bXM7Cit9IGZha2Vfc3ltYm9sc1tdID0geworCXsgInBlcmYiLCBwZXJmX3N5bXMsIEFSUkFZX1NJWkUocGVyZl9zeW1zKSB9LAorCXsgImJhc2giLCBiYXNoX3N5bXMsIEFSUkFZX1NJWkUoYmFzaF9zeW1zKSB9LAorCXsgImxpYmMiLCBsaWJjX3N5bXMsIEFSUkFZX1NJWkUobGliY19zeW1zKSB9LAorCXsgIltrZXJuZWxdIiwga2VybmVsX3N5bXMsIEFSUkFZX1NJWkUoa2VybmVsX3N5bXMpIH0sCit9OworCitzdHJ1Y3QgbWFjaGluZSAqc2V0dXBfZmFrZV9tYWNoaW5lKHN0cnVjdCBtYWNoaW5lcyAqbWFjaGluZXMpCit7CisJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBtYWNoaW5lc19fZmluZChtYWNoaW5lcywgSE9TVF9LRVJORUxfSUQpOworCXNpemVfdCBpOworCisJaWYgKG1hY2hpbmUgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygiTm90IGVub3VnaCBtZW1vcnkgZm9yIG1hY2hpbmUgc2V0dXBcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYWtlX3RocmVhZHMpOyBpKyspIHsKKwkJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCisJCXRocmVhZCA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIGZha2VfdGhyZWFkc1tpXS5waWQsCisJCQkJCQkgZmFrZV90aHJlYWRzW2ldLnBpZCk7CisJCWlmICh0aHJlYWQgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCisJCXRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCBmYWtlX3RocmVhZHNbaV0uY29tbSwgMCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmFrZV9tbWFwX2luZm8pOyBpKyspIHsKKwkJdW5pb24gcGVyZl9ldmVudCBmYWtlX21tYXBfZXZlbnQgPSB7CisJCQkubW1hcCA9IHsKKwkJCQkuaGVhZGVyID0geyAubWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfVVNFUiwgfSwKKwkJCQkucGlkID0gZmFrZV9tbWFwX2luZm9baV0ucGlkLAorCQkJCS50aWQgPSBmYWtlX21tYXBfaW5mb1tpXS5waWQsCisJCQkJLnN0YXJ0ID0gZmFrZV9tbWFwX2luZm9baV0uc3RhcnQsCisJCQkJLmxlbiA9IDB4MTAwMFVMTCwKKwkJCQkucGdvZmYgPSAwVUxMLAorCQkJfSwKKwkJfTsKKworCQlzdHJjcHkoZmFrZV9tbWFwX2V2ZW50Lm1tYXAuZmlsZW5hbWUsCisJCSAgICAgICBmYWtlX21tYXBfaW5mb1tpXS5maWxlbmFtZSk7CisKKwkJbWFjaGluZV9fcHJvY2Vzc19tbWFwX2V2ZW50KG1hY2hpbmUsICZmYWtlX21tYXBfZXZlbnQsIE5VTEwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZha2Vfc3ltYm9scyk7IGkrKykgeworCQlzaXplX3QgazsKKwkJc3RydWN0IGRzbyAqZHNvOworCisJCWRzbyA9IF9fZHNvc19fZmluZG5ldygmbWFjaGluZS0+dXNlcl9kc29zLAorCQkJCSAgICAgIGZha2Vfc3ltYm9sc1tpXS5kc29fbmFtZSk7CisJCWlmIChkc28gPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCisJCS8qIGVtdWxhdGUgZHNvX19sb2FkKCkgKi8KKwkJZHNvX19zZXRfbG9hZGVkKGRzbywgTUFQX19GVU5DVElPTik7CisKKwkJZm9yIChrID0gMDsgayA8IGZha2Vfc3ltYm9sc1tpXS5ucl9zeW1zOyBrKyspIHsKKwkJCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwkJCXN0cnVjdCBmYWtlX3N5bSAqZnN5bSA9ICZmYWtlX3N5bWJvbHNbaV0uc3ltc1trXTsKKworCQkJc3ltID0gc3ltYm9sX19uZXcoZnN5bS0+c3RhcnQsIGZzeW0tPmxlbmd0aCwKKwkJCQkJICBTVEJfR0xPQkFMLCBmc3ltLT5uYW1lKTsKKwkJCWlmIChzeW0gPT0gTlVMTCkKKwkJCQlnb3RvIG91dDsKKworCQkJc3ltYm9sc19faW5zZXJ0KCZkc28tPnN5bWJvbHNbTUFQX19GVU5DVElPTl0sIHN5bSk7CisJCX0KKwl9CisKKwlyZXR1cm4gbWFjaGluZTsKKworb3V0OgorCXByX2RlYnVnKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgbWFjaGluZSBzZXR1cFxuIik7CisJbWFjaGluZV9fZGVsZXRlX3RocmVhZHMobWFjaGluZSk7CisJbWFjaGluZV9fZGVsZXRlKG1hY2hpbmUpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHByaW50X2hpc3RzX2luKHN0cnVjdCBoaXN0cyAqaGlzdHMpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCByYl9yb290ICpyb290OworCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCisJCXJvb3QgPSAmaGlzdHMtPmVudHJpZXNfY29sbGFwc2VkOworCWVsc2UKKwkJcm9vdCA9IGhpc3RzLT5lbnRyaWVzX2luOworCisJcHJfaW5mbygiLS0tLS0gJXMgLS0tLS0tLS1cbiIsIF9fZnVuY19fKTsKKwlub2RlID0gcmJfZmlyc3Qocm9vdCk7CisJd2hpbGUgKG5vZGUpIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKmhlOworCisJCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGVfaW4pOworCisJCWlmICghaGUtPmZpbHRlcmVkKSB7CisJCQlwcl9pbmZvKCIlMmQ6IGVudHJ5OiAlLThzIFslLThzXSAlMjBzOiBwZXJpb2QgPSAlIlBSSXU2NCJcbiIsCisJCQkJaSwgdGhyZWFkX19jb21tX3N0cihoZS0+dGhyZWFkKSwKKwkJCQloZS0+bXMubWFwLT5kc28tPnNob3J0X25hbWUsCisJCQkJaGUtPm1zLnN5bS0+bmFtZSwgaGUtPnN0YXQucGVyaW9kKTsKKwkJfQorCisJCWkrKzsKKwkJbm9kZSA9IHJiX25leHQobm9kZSk7CisJfQorfQorCit2b2lkIHByaW50X2hpc3RzX291dChzdHJ1Y3QgaGlzdHMgKmhpc3RzKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCXJvb3QgPSAmaGlzdHMtPmVudHJpZXM7CisKKwlwcl9pbmZvKCItLS0tLSAlcyAtLS0tLS0tLVxuIiwgX19mdW5jX18pOworCW5vZGUgPSByYl9maXJzdChyb290KTsKKwl3aGlsZSAobm9kZSkgeworCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CisKKwkJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisKKwkJaWYgKCFoZS0+ZmlsdGVyZWQpIHsKKwkJCXByX2luZm8oIiUyZDogZW50cnk6ICU4czolNWQgWyUtOHNdICUyMHM6IHBlcmlvZCA9ICUiUFJJdTY0IlxuIiwKKwkJCQlpLCB0aHJlYWRfX2NvbW1fc3RyKGhlLT50aHJlYWQpLCBoZS0+dGhyZWFkLT50aWQsCisJCQkJaGUtPm1zLm1hcC0+ZHNvLT5zaG9ydF9uYW1lLAorCQkJCWhlLT5tcy5zeW0tPm5hbWUsIGhlLT5zdGF0LnBlcmlvZCk7CisJCX0KKworCQlpKys7CisJCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfY29tbW9uLmggYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTVhZTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2NvbW1vbi5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX19QRVJGX1RFU1RTX19ISVNUU19DT01NT05fSF9fCisjZGVmaW5lIF9fUEVSRl9URVNUU19fSElTVFNfQ09NTU9OX0hfXworCitzdHJ1Y3QgbWFjaGluZTsKK3N0cnVjdCBtYWNoaW5lczsKKworLyoKKyAqIFRoZSBzZXR1cF9mYWtlX21hY2hpbmUoKSBwcm92aWRlcyBhIHRlc3QgZW52aXJvbm1lbnQgd2hpY2ggY29uc2lzdHMKKyAqIG9mIDMgcHJvY2Vzc2VzIHRoYXQgaGF2ZSAzIG1hcHBpbmdzIGFuZCBpbiB0dXJuLCBoYXZlIDMgc3ltYm9scworICogcmVzcGVjdGl2ZWx5LiAgU2VlIGJlbG93IHRhYmxlOgorICoKKyAqIENvbW1hbmQ6ICBQaWQgIFNoYXJlZCBPYmplY3QgICAgICAgICAgICAgICBTeW1ib2wKKyAqIC4uLi4uLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4uLi4uLi4KKyAqICAgIHBlcmY6ICAxMDAgICAgICAgICAgIHBlcmYgIG1haW4KKyAqICAgIHBlcmY6ICAxMDAgICAgICAgICAgIHBlcmYgIHJ1bl9jb21tYW5kCisgKiAgICBwZXJmOiAgMTAwICAgICAgICAgICBwZXJmICBjb21kX3JlY29yZAorICogICAgcGVyZjogIDEwMCAgICAgICAgICAgbGliYyAgbWFsbG9jCisgKiAgICBwZXJmOiAgMTAwICAgICAgICAgICBsaWJjICBmcmVlCisgKiAgICBwZXJmOiAgMTAwICAgICAgICAgICBsaWJjICByZWFsbG9jCisgKiAgICBwZXJmOiAgMTAwICAgICAgIFtrZXJuZWxdICBzY2hlZHVsZQorICogICAgcGVyZjogIDEwMCAgICAgICBba2VybmVsXSAgcGFnZV9mYXVsdAorICogICAgcGVyZjogIDEwMCAgICAgICBba2VybmVsXSAgc3lzX3BlcmZfZXZlbnRfb3BlbgorICogICAgcGVyZjogIDIwMCAgICAgICAgICAgcGVyZiAgbWFpbgorICogICAgcGVyZjogIDIwMCAgICAgICAgICAgcGVyZiAgcnVuX2NvbW1hbmQKKyAqICAgIHBlcmY6ICAyMDAgICAgICAgICAgIHBlcmYgIGNvbWRfcmVjb3JkCisgKiAgICBwZXJmOiAgMjAwICAgICAgICAgICBsaWJjICBtYWxsb2MKKyAqICAgIHBlcmY6ICAyMDAgICAgICAgICAgIGxpYmMgIGZyZWUKKyAqICAgIHBlcmY6ICAyMDAgICAgICAgICAgIGxpYmMgIHJlYWxsb2MKKyAqICAgIHBlcmY6ICAyMDAgICAgICAgW2tlcm5lbF0gIHNjaGVkdWxlCisgKiAgICBwZXJmOiAgMjAwICAgICAgIFtrZXJuZWxdICBwYWdlX2ZhdWx0CisgKiAgICBwZXJmOiAgMjAwICAgICAgIFtrZXJuZWxdICBzeXNfcGVyZl9ldmVudF9vcGVuCisgKiAgICBiYXNoOiAgMzAwICAgICAgICAgICBiYXNoICBtYWluCisgKiAgICBiYXNoOiAgMzAwICAgICAgICAgICBiYXNoICB4bWFsbG9jCisgKiAgICBiYXNoOiAgMzAwICAgICAgICAgICBiYXNoICB4ZnJlZQorICogICAgYmFzaDogIDMwMCAgICAgICAgICAgbGliYyAgbWFsbG9jCisgKiAgICBiYXNoOiAgMzAwICAgICAgICAgICBsaWJjICBmcmVlCisgKiAgICBiYXNoOiAgMzAwICAgICAgICAgICBsaWJjICByZWFsbG9jCisgKiAgICBiYXNoOiAgMzAwICAgICAgIFtrZXJuZWxdICBzY2hlZHVsZQorICogICAgYmFzaDogIDMwMCAgICAgICBba2VybmVsXSAgcGFnZV9mYXVsdAorICogICAgYmFzaDogIDMwMCAgICAgICBba2VybmVsXSAgc3lzX3BlcmZfZXZlbnRfb3BlbgorICovCitzdHJ1Y3QgbWFjaGluZSAqc2V0dXBfZmFrZV9tYWNoaW5lKHN0cnVjdCBtYWNoaW5lcyAqbWFjaGluZXMpOworCit2b2lkIHByaW50X2hpc3RzX2luKHN0cnVjdCBoaXN0cyAqaGlzdHMpOwordm9pZCBwcmludF9oaXN0c19vdXQoc3RydWN0IGhpc3RzICpoaXN0cyk7CisKKyNlbmRpZiAvKiBfX1BFUkZfVEVTVFNfX0hJU1RTX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfZmlsdGVyLmMgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YmE5MjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCkBAIC0wLDAgKzEsMjkwIEBACisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvc29ydC5oIgorI2luY2x1ZGUgInV0aWwvZXZzZWwuaCIKKyNpbmNsdWRlICJ1dGlsL2V2bGlzdC5oIgorI2luY2x1ZGUgInV0aWwvbWFjaGluZS5oIgorI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKKyNpbmNsdWRlICJ0ZXN0cy90ZXN0cy5oIgorI2luY2x1ZGUgInRlc3RzL2hpc3RzX2NvbW1vbi5oIgorCitzdHJ1Y3Qgc2FtcGxlIHsKKwl1MzIgcGlkOworCXU2NCBpcDsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IG1hcCAqbWFwOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKK307CisKKy8qIEZvciB0aGUgbnVtYmVycywgc2VlIGhpc3RzX2NvbW1vbi5jICovCitzdGF0aWMgc3RydWN0IHNhbXBsZSBmYWtlX3NhbXBsZXNbXSA9IHsKKwkvKiBwZXJmIFtrZXJuZWxdIHNjaGVkdWxlKCkgKi8KKwl7IC5waWQgPSAxMDAsIC5pcCA9IDB4ZjAwMDAgKyA3MDAsIH0sCisJLyogcGVyZiBbcGVyZl0gICBtYWluKCkgKi8KKwl7IC5waWQgPSAxMDAsIC5pcCA9IDB4NDAwMDAgKyA3MDAsIH0sCisJLyogcGVyZiBbbGliY10gICBtYWxsb2MoKSAqLworCXsgLnBpZCA9IDEwMCwgLmlwID0gMHg1MDAwMCArIDcwMCwgfSwKKwkvKiBwZXJmIFtwZXJmXSAgIG1haW4oKSAqLworCXsgLnBpZCA9IDIwMCwgLmlwID0gMHg0MDAwMCArIDcwMCwgfSwgLyogd2lsbCBiZSBtZXJnZWQgKi8KKwkvKiBwZXJmIFtwZXJmXSAgIGNtZF9yZWNvcmQoKSAqLworCXsgLnBpZCA9IDIwMCwgLmlwID0gMHg0MDAwMCArIDkwMCwgfSwKKwkvKiBwZXJmIFtrZXJuZWxdIHBhZ2VfZmF1bHQoKSAqLworCXsgLnBpZCA9IDIwMCwgLmlwID0gMHhmMDAwMCArIDgwMCwgfSwKKwkvKiBiYXNoIFtiYXNoXSAgIG1haW4oKSAqLworCXsgLnBpZCA9IDMwMCwgLmlwID0gMHg0MDAwMCArIDcwMCwgfSwKKwkvKiBiYXNoIFtiYXNoXSAgIHhtYWxsb2MoKSAqLworCXsgLnBpZCA9IDMwMCwgLmlwID0gMHg0MDAwMCArIDgwMCwgfSwKKwkvKiBiYXNoIFtsaWJjXSAgIG1hbGxvYygpICovCisJeyAucGlkID0gMzAwLCAuaXAgPSAweDUwMDAwICsgNzAwLCB9LAorCS8qIGJhc2ggW2tlcm5lbF0gcGFnZV9mYXVsdCgpICovCisJeyAucGlkID0gMzAwLCAuaXAgPSAweGYwMDAwICsgODAwLCB9LAorfTsKKworc3RhdGljIGludCBhZGRfaGlzdF9lbnRyaWVzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlOworCXN0cnVjdCBwZXJmX3NhbXBsZSBzYW1wbGUgPSB7IC5jcHUgPSAwLCB9OworCXNpemVfdCBpOworCisJLyoKKwkgKiBlYWNoIGV2c2VsIHdpbGwgaGF2ZSAxMCBzYW1wbGVzIGJ1dCB0aGUgNHRoIHNhbXBsZQorCSAqIChwZXJmIFtwZXJmXSBtYWluKSB3aWxsIGJlIGNvbGxhcHNlZCB0byBhbiBleGlzdGluZyBlbnRyeQorCSAqIHNvIHRvdGFsIDkgZW50cmllcyB3aWxsIGJlIGluIHRoZSB0cmVlLgorCSAqLworCWV2bGlzdF9fZm9yX2VhY2goZXZsaXN0LCBldnNlbCkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYWtlX3NhbXBsZXMpOyBpKyspIHsKKwkJCWNvbnN0IHVuaW9uIHBlcmZfZXZlbnQgZXZlbnQgPSB7CisJCQkJLmhlYWRlciA9IHsKKwkJCQkJLm1pc2MgPSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCisJCQkJfSwKKwkJCX07CisKKwkJCS8qIG1ha2Ugc3VyZSBpdCBoYXMgbm8gZmlsdGVyIGF0IGZpcnN0ICovCisJCQlldnNlbC0+aGlzdHMudGhyZWFkX2ZpbHRlciA9IE5VTEw7CisJCQlldnNlbC0+aGlzdHMuZHNvX2ZpbHRlciA9IE5VTEw7CisJCQlldnNlbC0+aGlzdHMuc3ltYm9sX2ZpbHRlcl9zdHIgPSBOVUxMOworCisJCQlzYW1wbGUucGlkID0gZmFrZV9zYW1wbGVzW2ldLnBpZDsKKwkJCXNhbXBsZS50aWQgPSBmYWtlX3NhbXBsZXNbaV0ucGlkOworCQkJc2FtcGxlLmlwID0gZmFrZV9zYW1wbGVzW2ldLmlwOworCisJCQlpZiAocGVyZl9ldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoJmV2ZW50LCBtYWNoaW5lLCAmYWwsCisJCQkJCQkJICAmc2FtcGxlKSA8IDApCisJCQkJZ290byBvdXQ7CisKKwkJCWhlID0gX19oaXN0c19fYWRkX2VudHJ5KCZldnNlbC0+aGlzdHMsICZhbCwgTlVMTCwKKwkJCQkJCU5VTEwsIE5VTEwsIDEwMCwgMSwgMCk7CisJCQlpZiAoaGUgPT0gTlVMTCkKKwkJCQlnb3RvIG91dDsKKworCQkJZmFrZV9zYW1wbGVzW2ldLnRocmVhZCA9IGFsLnRocmVhZDsKKwkJCWZha2Vfc2FtcGxlc1tpXS5tYXAgPSBhbC5tYXA7CisJCQlmYWtlX3NhbXBsZXNbaV0uc3ltID0gYWwuc3ltOworCisJCQloaXN0c19faW5jX25yX2V2ZW50cyhoZS0+aGlzdHMsIFBFUkZfUkVDT1JEX1NBTVBMRSk7CisJCQlpZiAoIWhlLT5maWx0ZXJlZCkKKwkJCQloZS0+aGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzKys7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCXByX2RlYnVnKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgYWRkaW5nIGEgaGlzdCBlbnRyeVxuIik7CisJcmV0dXJuIFRFU1RfRkFJTDsKK30KKworaW50IHRlc3RfX2hpc3RzX2ZpbHRlcih2b2lkKQoreworCWludCBlcnIgPSBURVNUX0ZBSUw7CisJc3RydWN0IG1hY2hpbmVzIG1hY2hpbmVzOworCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lOworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwlzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCA9IHBlcmZfZXZsaXN0X19uZXcoKTsKKworCVRFU1RfQVNTRVJUX1ZBTCgiTm8gbWVtb3J5IiwgZXZsaXN0KTsKKworCWVyciA9IHBhcnNlX2V2ZW50cyhldmxpc3QsICJjcHUtY2xvY2siKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwllcnIgPSBwYXJzZV9ldmVudHMoZXZsaXN0LCAidGFzay1jbG9jayIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogZGVmYXVsdCBzb3J0IG9yZGVyIChjb21tLGRzbyxzeW0pIHdpbGwgYmUgdXNlZCAqLworCWlmIChzZXR1cF9zb3J0aW5nKCkgPCAwKQorCQlnb3RvIG91dDsKKworCW1hY2hpbmVzX19pbml0KCZtYWNoaW5lcyk7CisKKwkvKiBzZXR1cCB0aHJlYWRzL2Rzby9tYXAvc3ltYm9scyBhbHNvICovCisJbWFjaGluZSA9IHNldHVwX2Zha2VfbWFjaGluZSgmbWFjaGluZXMpOworCWlmICghbWFjaGluZSkKKwkJZ290byBvdXQ7CisKKwlpZiAodmVyYm9zZSA+IDEpCisJCW1hY2hpbmVfX2ZwcmludGYobWFjaGluZSwgc3RkZXJyKTsKKworCS8qIHByb2Nlc3Mgc2FtcGxlIGV2ZW50cyAqLworCWVyciA9IGFkZF9oaXN0X2VudHJpZXMoZXZsaXN0LCBtYWNoaW5lKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpIHsKKwkJc3RydWN0IGhpc3RzICpoaXN0cyA9ICZldnNlbC0+aGlzdHM7CisKKwkJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7CisJCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKworCQlpZiAodmVyYm9zZSA+IDIpIHsKKwkJCXByX2luZm8oIk5vcm1hbCBoaXN0b2dyYW1cbiIpOworCQkJcHJpbnRfaGlzdHNfb3V0KGhpc3RzKTsKKwkJfQorCisJCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBuciBzYW1wbGVzIiwKKwkJCQloaXN0cy0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0gPT0gMTApOworCQlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgbnIgaGlzdCBlbnRyaWVzIiwKKwkJCQloaXN0cy0+bnJfZW50cmllcyA9PSA5KTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIHRvdGFsIHBlcmlvZCIsCisJCQkJaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCA9PSAxMDAwKTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJVbm1hdGNoZWQgbnIgc2FtcGxlcyIsCisJCQkJaGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdID09CisJCQkJaGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzKTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJVbm1hdGNoZWQgbnIgaGlzdCBlbnRyaWVzIiwKKwkJCQloaXN0cy0+bnJfZW50cmllcyA9PSBoaXN0cy0+bnJfbm9uX2ZpbHRlcmVkX2VudHJpZXMpOworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCB0b3RhbCBwZXJpb2QiLAorCQkJCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgPT0KKwkJCQloaXN0cy0+c3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZCk7CisKKwkJLyogbm93IGFwcGx5aW5nIHRocmVhZCBmaWx0ZXIgZm9yICdiYXNoJyAqLworCQlldnNlbC0+aGlzdHMudGhyZWFkX2ZpbHRlciA9IGZha2Vfc2FtcGxlc1s5XS50aHJlYWQ7CisJCWhpc3RzX19maWx0ZXJfYnlfdGhyZWFkKGhpc3RzKTsKKworCQlpZiAodmVyYm9zZSA+IDIpIHsKKwkJCXByX2luZm8oIkhpc3RvZ3JhbSBmb3IgdGhyZWFkIGZpbHRlclxuIik7CisJCQlwcmludF9oaXN0c19vdXQoaGlzdHMpOworCQl9CisKKwkJLyogbm9ybWFsIHN0YXRzIHNob3VsZCBiZSBpbnZhcmlhbnQgKi8KKwkJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIG5yIHNhbXBsZXMiLAorCQkJCWhpc3RzLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXSA9PSAxMCk7CisJCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBuciBoaXN0IGVudHJpZXMiLAorCQkJCWhpc3RzLT5ucl9lbnRyaWVzID09IDkpOworCQlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgdG90YWwgcGVyaW9kIiwKKwkJCQloaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kID09IDEwMDApOworCisJCS8qIGJ1dCBmaWx0ZXIgc3RhdHMgYXJlIGNoYW5nZWQgKi8KKwkJVEVTVF9BU1NFUlRfVkFMKCJVbm1hdGNoZWQgbnIgc2FtcGxlcyBmb3IgdGhyZWFkIGZpbHRlciIsCisJCQkJaGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzID09IDQpOworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCBuciBoaXN0IGVudHJpZXMgZm9yIHRocmVhZCBmaWx0ZXIiLAorCQkJCWhpc3RzLT5ucl9ub25fZmlsdGVyZWRfZW50cmllcyA9PSA0KTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJVbm1hdGNoZWQgdG90YWwgcGVyaW9kIGZvciB0aHJlYWQgZmlsdGVyIiwKKwkJCQloaXN0cy0+c3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZCA9PSA0MDApOworCisJCS8qIHJlbW92ZSB0aHJlYWQgZmlsdGVyIGZpcnN0ICovCisJCWV2c2VsLT5oaXN0cy50aHJlYWRfZmlsdGVyID0gTlVMTDsKKwkJaGlzdHNfX2ZpbHRlcl9ieV90aHJlYWQoaGlzdHMpOworCisJCS8qIG5vdyBhcHBseWluZyBkc28gZmlsdGVyIGZvciAna2VybmVsJyAqLworCQlldnNlbC0+aGlzdHMuZHNvX2ZpbHRlciA9IGZha2Vfc2FtcGxlc1swXS5tYXAtPmRzbzsKKwkJaGlzdHNfX2ZpbHRlcl9ieV9kc28oaGlzdHMpOworCisJCWlmICh2ZXJib3NlID4gMikgeworCQkJcHJfaW5mbygiSGlzdG9ncmFtIGZvciBkc28gZmlsdGVyXG4iKTsKKwkJCXByaW50X2hpc3RzX291dChoaXN0cyk7CisJCX0KKworCQkvKiBub3JtYWwgc3RhdHMgc2hvdWxkIGJlIGludmFyaWFudCAqLworCQlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgbnIgc2FtcGxlcyIsCisJCQkJaGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdID09IDEwKTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIG5yIGhpc3QgZW50cmllcyIsCisJCQkJaGlzdHMtPm5yX2VudHJpZXMgPT0gOSk7CisJCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCB0b3RhbCBwZXJpb2QiLAorCQkJCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgPT0gMTAwMCk7CisKKwkJLyogYnV0IGZpbHRlciBzdGF0cyBhcmUgY2hhbmdlZCAqLworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCBuciBzYW1wbGVzIGZvciBkc28gZmlsdGVyIiwKKwkJCQloaXN0cy0+c3RhdHMubnJfbm9uX2ZpbHRlcmVkX3NhbXBsZXMgPT0gMyk7CisJCVRFU1RfQVNTRVJUX1ZBTCgiVW5tYXRjaGVkIG5yIGhpc3QgZW50cmllcyBmb3IgZHNvIGZpbHRlciIsCisJCQkJaGlzdHMtPm5yX25vbl9maWx0ZXJlZF9lbnRyaWVzID09IDMpOworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCB0b3RhbCBwZXJpb2QgZm9yIGRzbyBmaWx0ZXIiLAorCQkJCWhpc3RzLT5zdGF0cy50b3RhbF9ub25fZmlsdGVyZWRfcGVyaW9kID09IDMwMCk7CisKKwkJLyogcmVtb3ZlIGRzbyBmaWx0ZXIgZmlyc3QgKi8KKwkJZXZzZWwtPmhpc3RzLmRzb19maWx0ZXIgPSBOVUxMOworCQloaXN0c19fZmlsdGVyX2J5X2RzbyhoaXN0cyk7CisKKwkJLyoKKwkJICogbm93IGFwcGx5aW5nIHN5bWJvbCBmaWx0ZXIgZm9yICdtYWluJy4gIEFsc28gbm90ZSB0aGF0CisJCSAqIHRoZXJlJ3MgMyBzYW1wbGVzIHRoYXQgaGF2ZSAnbWFpbicgc3ltYm9sIGJ1dCB0aGUgNHRoCisJCSAqIGVudHJ5IG9mIGZha2Vfc2FtcGxlcyB3YXMgY29sbGFwc2VkIGFscmVhZHkgc28gaXQgd29uJ3QKKwkJICogYmUgY291bnRlZCBhcyBhIHNlcGFyYXRlIGVudHJ5IGJ1dCB0aGUgc2FtcGxlIGNvdW50IGFuZAorCQkgKiB0b3RhbCBwZXJpb2Qgd2lsbCBiZSByZW1haW5lZC4KKwkJICovCisJCWV2c2VsLT5oaXN0cy5zeW1ib2xfZmlsdGVyX3N0ciA9ICJtYWluIjsKKwkJaGlzdHNfX2ZpbHRlcl9ieV9zeW1ib2woaGlzdHMpOworCisJCWlmICh2ZXJib3NlID4gMikgeworCQkJcHJfaW5mbygiSGlzdG9ncmFtIGZvciBzeW1ib2wgZmlsdGVyXG4iKTsKKwkJCXByaW50X2hpc3RzX291dChoaXN0cyk7CisJCX0KKworCQkvKiBub3JtYWwgc3RhdHMgc2hvdWxkIGJlIGludmFyaWFudCAqLworCQlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgbnIgc2FtcGxlcyIsCisJCQkJaGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdID09IDEwKTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIG5yIGhpc3QgZW50cmllcyIsCisJCQkJaGlzdHMtPm5yX2VudHJpZXMgPT0gOSk7CisJCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCB0b3RhbCBwZXJpb2QiLAorCQkJCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgPT0gMTAwMCk7CisKKwkJLyogYnV0IGZpbHRlciBzdGF0cyBhcmUgY2hhbmdlZCAqLworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCBuciBzYW1wbGVzIGZvciBzeW1ib2wgZmlsdGVyIiwKKwkJCQloaXN0cy0+c3RhdHMubnJfbm9uX2ZpbHRlcmVkX3NhbXBsZXMgPT0gMyk7CisJCVRFU1RfQVNTRVJUX1ZBTCgiVW5tYXRjaGVkIG5yIGhpc3QgZW50cmllcyBmb3Igc3ltYm9sIGZpbHRlciIsCisJCQkJaGlzdHMtPm5yX25vbl9maWx0ZXJlZF9lbnRyaWVzID09IDIpOworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCB0b3RhbCBwZXJpb2QgZm9yIHN5bWJvbCBmaWx0ZXIiLAorCQkJCWhpc3RzLT5zdGF0cy50b3RhbF9ub25fZmlsdGVyZWRfcGVyaW9kID09IDMwMCk7CisKKwkJLyogbm93IGFwcGx5aW5nIGFsbCBmaWx0ZXJzIGF0IG9uY2UuICovCisJCWV2c2VsLT5oaXN0cy50aHJlYWRfZmlsdGVyID0gZmFrZV9zYW1wbGVzWzFdLnRocmVhZDsKKwkJZXZzZWwtPmhpc3RzLmRzb19maWx0ZXIgPSBmYWtlX3NhbXBsZXNbMV0ubWFwLT5kc287CisJCWhpc3RzX19maWx0ZXJfYnlfdGhyZWFkKGhpc3RzKTsKKwkJaGlzdHNfX2ZpbHRlcl9ieV9kc28oaGlzdHMpOworCisJCWlmICh2ZXJib3NlID4gMikgeworCQkJcHJfaW5mbygiSGlzdG9ncmFtIGZvciBhbGwgZmlsdGVyc1xuIik7CisJCQlwcmludF9oaXN0c19vdXQoaGlzdHMpOworCQl9CisKKwkJLyogbm9ybWFsIHN0YXRzIHNob3VsZCBiZSBpbnZhcmlhbnQgKi8KKwkJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIG5yIHNhbXBsZXMiLAorCQkJCWhpc3RzLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXSA9PSAxMCk7CisJCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBuciBoaXN0IGVudHJpZXMiLAorCQkJCWhpc3RzLT5ucl9lbnRyaWVzID09IDkpOworCQlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgdG90YWwgcGVyaW9kIiwKKwkJCQloaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kID09IDEwMDApOworCisJCS8qIGJ1dCBmaWx0ZXIgc3RhdHMgYXJlIGNoYW5nZWQgKi8KKwkJVEVTVF9BU1NFUlRfVkFMKCJVbm1hdGNoZWQgbnIgc2FtcGxlcyBmb3IgYWxsIGZpbHRlciIsCisJCQkJaGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzID09IDIpOworCQlURVNUX0FTU0VSVF9WQUwoIlVubWF0Y2hlZCBuciBoaXN0IGVudHJpZXMgZm9yIGFsbCBmaWx0ZXIiLAorCQkJCWhpc3RzLT5ucl9ub25fZmlsdGVyZWRfZW50cmllcyA9PSAxKTsKKwkJVEVTVF9BU1NFUlRfVkFMKCJVbm1hdGNoZWQgdG90YWwgcGVyaW9kIGZvciBhbGwgZmlsdGVyIiwKKwkJCQloaXN0cy0+c3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZCA9PSAyMDApOworCX0KKworCisJZXJyID0gVEVTVF9PSzsKKworb3V0OgorCS8qIHRlYXIgZG93biBldmVyeXRoaW5nICovCisJcGVyZl9ldmxpc3RfX2RlbGV0ZShldmxpc3QpOworCXJlc2V0X291dHB1dF9maWVsZCgpOworCW1hY2hpbmVzX19leGl0KCZtYWNoaW5lcyk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19saW5rLmMgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2xpbmsuYwppbmRleCA3Y2NiYzdiLi41ZmZhMmMzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2xpbmsuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2xpbmsuYwpAQCAtOCwxNDUgKzgsNyBAQAogI2luY2x1ZGUgIm1hY2hpbmUuaCIKICNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIKLQotc3RhdGljIHN0cnVjdCB7Ci0JdTMyIHBpZDsKLQljb25zdCBjaGFyICpjb21tOwotfSBmYWtlX3RocmVhZHNbXSA9IHsKLQl7IDEwMCwgInBlcmYiIH0sCi0JeyAyMDAsICJwZXJmIiB9LAotCXsgMzAwLCAiYmFzaCIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXUzMiBwaWQ7Ci0JdTY0IHN0YXJ0OwotCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwotfSBmYWtlX21tYXBfaW5mb1tdID0gewotCXsgMTAwLCAweDQwMDAwLCAicGVyZiIgfSwKLQl7IDEwMCwgMHg1MDAwMCwgImxpYmMiIH0sCi0JeyAxMDAsIDB4ZjAwMDAsICJba2VybmVsXSIgfSwKLQl7IDIwMCwgMHg0MDAwMCwgInBlcmYiIH0sCi0JeyAyMDAsIDB4NTAwMDAsICJsaWJjIiB9LAotCXsgMjAwLCAweGYwMDAwLCAiW2tlcm5lbF0iIH0sCi0JeyAzMDAsIDB4NDAwMDAsICJiYXNoIiB9LAotCXsgMzAwLCAweDUwMDAwLCAibGliYyIgfSwKLQl7IDMwMCwgMHhmMDAwMCwgIltrZXJuZWxdIiB9LAotfTsKLQotc3RydWN0IGZha2Vfc3ltIHsKLQl1NjQgc3RhcnQ7Ci0JdTY0IGxlbmd0aDsKLQljb25zdCBjaGFyICpuYW1lOwotfTsKLQotc3RhdGljIHN0cnVjdCBmYWtlX3N5bSBwZXJmX3N5bXNbXSA9IHsKLQl7IDcwMCwgMTAwLCAibWFpbiIgfSwKLQl7IDgwMCwgMTAwLCAicnVuX2NvbW1hbmQiIH0sCi0JeyA5MDAsIDEwMCwgImNtZF9yZWNvcmQiIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZha2Vfc3ltIGJhc2hfc3ltc1tdID0gewotCXsgNzAwLCAxMDAsICJtYWluIiB9LAotCXsgODAwLCAxMDAsICJ4bWFsbG9jIiB9LAotCXsgOTAwLCAxMDAsICJ4ZnJlZSIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmFrZV9zeW0gbGliY19zeW1zW10gPSB7Ci0JeyA3MDAsIDEwMCwgIm1hbGxvYyIgfSwKLQl7IDgwMCwgMTAwLCAiZnJlZSIgfSwKLQl7IDkwMCwgMTAwLCAicmVhbGxvYyIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmFrZV9zeW0ga2VybmVsX3N5bXNbXSA9IHsKLQl7IDcwMCwgMTAwLCAic2NoZWR1bGUiIH0sCi0JeyA4MDAsIDEwMCwgInBhZ2VfZmF1bHQiIH0sCi0JeyA5MDAsIDEwMCwgInN5c19wZXJmX2V2ZW50X29wZW4iIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHsKLQljb25zdCBjaGFyICpkc29fbmFtZTsKLQlzdHJ1Y3QgZmFrZV9zeW0gKnN5bXM7Ci0Jc2l6ZV90IG5yX3N5bXM7Ci19IGZha2Vfc3ltYm9sc1tdID0gewotCXsgInBlcmYiLCBwZXJmX3N5bXMsIEFSUkFZX1NJWkUocGVyZl9zeW1zKSB9LAotCXsgImJhc2giLCBiYXNoX3N5bXMsIEFSUkFZX1NJWkUoYmFzaF9zeW1zKSB9LAotCXsgImxpYmMiLCBsaWJjX3N5bXMsIEFSUkFZX1NJWkUobGliY19zeW1zKSB9LAotCXsgIltrZXJuZWxdIiwga2VybmVsX3N5bXMsIEFSUkFZX1NJWkUoa2VybmVsX3N5bXMpIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1hY2hpbmUgKnNldHVwX2Zha2VfbWFjaGluZShzdHJ1Y3QgbWFjaGluZXMgKm1hY2hpbmVzKQotewotCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lID0gbWFjaGluZXNfX2ZpbmQobWFjaGluZXMsIEhPU1RfS0VSTkVMX0lEKTsKLQlzaXplX3QgaTsKLQotCWlmIChtYWNoaW5lID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBtYWNoaW5lIHNldHVwXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmFrZV90aHJlYWRzKTsgaSsrKSB7Ci0JCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKLQotCQl0aHJlYWQgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBmYWtlX3RocmVhZHNbaV0ucGlkLAotCQkJCQkJIGZha2VfdGhyZWFkc1tpXS5waWQpOwotCQlpZiAodGhyZWFkID09IE5VTEwpCi0JCQlnb3RvIG91dDsKLQotCQl0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgZmFrZV90aHJlYWRzW2ldLmNvbW0sIDApOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZha2VfbW1hcF9pbmZvKTsgaSsrKSB7Ci0JCXVuaW9uIHBlcmZfZXZlbnQgZmFrZV9tbWFwX2V2ZW50ID0gewotCQkJLm1tYXAgPSB7Ci0JCQkJLmhlYWRlciA9IHsgLm1pc2MgPSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsIH0sCi0JCQkJLnBpZCA9IGZha2VfbW1hcF9pbmZvW2ldLnBpZCwKLQkJCQkudGlkID0gZmFrZV9tbWFwX2luZm9baV0ucGlkLAotCQkJCS5zdGFydCA9IGZha2VfbW1hcF9pbmZvW2ldLnN0YXJ0LAotCQkJCS5sZW4gPSAweDEwMDBVTEwsCi0JCQkJLnBnb2ZmID0gMFVMTCwKLQkJCX0sCi0JCX07Ci0KLQkJc3RyY3B5KGZha2VfbW1hcF9ldmVudC5tbWFwLmZpbGVuYW1lLAotCQkgICAgICAgZmFrZV9tbWFwX2luZm9baV0uZmlsZW5hbWUpOwotCi0JCW1hY2hpbmVfX3Byb2Nlc3NfbW1hcF9ldmVudChtYWNoaW5lLCAmZmFrZV9tbWFwX2V2ZW50LCBOVUxMKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYWtlX3N5bWJvbHMpOyBpKyspIHsKLQkJc2l6ZV90IGs7Ci0JCXN0cnVjdCBkc28gKmRzbzsKLQotCQlkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoJm1hY2hpbmUtPnVzZXJfZHNvcywKLQkJCQkgICAgICBmYWtlX3N5bWJvbHNbaV0uZHNvX25hbWUpOwotCQlpZiAoZHNvID09IE5VTEwpCi0JCQlnb3RvIG91dDsKLQotCQkvKiBlbXVsYXRlIGRzb19fbG9hZCgpICovCi0JCWRzb19fc2V0X2xvYWRlZChkc28sIE1BUF9fRlVOQ1RJT04pOwotCi0JCWZvciAoayA9IDA7IGsgPCBmYWtlX3N5bWJvbHNbaV0ubnJfc3ltczsgaysrKSB7Ci0JCQlzdHJ1Y3Qgc3ltYm9sICpzeW07Ci0JCQlzdHJ1Y3QgZmFrZV9zeW0gKmZzeW0gPSAmZmFrZV9zeW1ib2xzW2ldLnN5bXNba107Ci0KLQkJCXN5bSA9IHN5bWJvbF9fbmV3KGZzeW0tPnN0YXJ0LCBmc3ltLT5sZW5ndGgsCi0JCQkJCSAgU1RCX0dMT0JBTCwgZnN5bS0+bmFtZSk7Ci0JCQlpZiAoc3ltID09IE5VTEwpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCXN5bWJvbHNfX2luc2VydCgmZHNvLT5zeW1ib2xzW01BUF9fRlVOQ1RJT05dLCBzeW0pOwotCQl9Ci0JfQotCi0JcmV0dXJuIG1hY2hpbmU7Ci0KLW91dDoKLQlwcl9kZWJ1ZygiTm90IGVub3VnaCBtZW1vcnkgZm9yIG1hY2hpbmUgc2V0dXBcbiIpOwotCW1hY2hpbmVfX2RlbGV0ZV90aHJlYWRzKG1hY2hpbmUpOwotCW1hY2hpbmVfX2RlbGV0ZShtYWNoaW5lKTsKLQlyZXR1cm4gTlVMTDsKLX0KKyNpbmNsdWRlICJoaXN0c19jb21tb24uaCIKIAogc3RydWN0IHNhbXBsZSB7CiAJdTMyIHBpZDsKQEAgLTE1Niw2ICsxOCw3IEBACiAJc3RydWN0IHN5bWJvbCAqc3ltOwogfTsKIAorLyogRm9yIHRoZSBudW1iZXJzLCBzZWUgaGlzdHNfY29tbW9uLmMgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2FtcGxlIGZha2VfY29tbW9uX3NhbXBsZXNbXSA9IHsKIAkvKiBwZXJmIFtrZXJuZWxdIHNjaGVkdWxlKCkgKi8KIAl7IC5waWQgPSAxMDAsIC5pcCA9IDB4ZjAwMDAgKyA3MDAsIH0sCkBAIC0yMTgsNiArODEsNyBAQAogCQkJfTsKIAogCQkJc2FtcGxlLnBpZCA9IGZha2VfY29tbW9uX3NhbXBsZXNba10ucGlkOworCQkJc2FtcGxlLnRpZCA9IGZha2VfY29tbW9uX3NhbXBsZXNba10ucGlkOwogCQkJc2FtcGxlLmlwID0gZmFrZV9jb21tb25fc2FtcGxlc1trXS5pcDsKIAkJCWlmIChwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZSgmZXZlbnQsIG1hY2hpbmUsICZhbCwKIAkJCQkJCQkgICZzYW1wbGUpIDwgMCkKQEAgLTI0MSw2ICsxMDUsNyBAQAogCQkJfTsKIAogCQkJc2FtcGxlLnBpZCA9IGZha2Vfc2FtcGxlc1tpXVtrXS5waWQ7CisJCQlzYW1wbGUudGlkID0gZmFrZV9zYW1wbGVzW2ldW2tdLnBpZDsKIAkJCXNhbXBsZS5pcCA9IGZha2Vfc2FtcGxlc1tpXVtrXS5pcDsKIAkJCWlmIChwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZSgmZXZlbnQsIG1hY2hpbmUsICZhbCwKIAkJCQkJCQkgICZzYW1wbGUpIDwgMCkKQEAgLTQwMywzMyArMjY4LDYgQEAKIAlyZXR1cm4gX192YWxpZGF0ZV9saW5rKGxlYWRlciwgMCkgfHwgX192YWxpZGF0ZV9saW5rKG90aGVyLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfaGlzdHMoc3RydWN0IGhpc3RzICpoaXN0cykKLXsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IHJiX3Jvb3QgKnJvb3Q7Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGU7Ci0KLQlpZiAoc29ydF9fbmVlZF9jb2xsYXBzZSkKLQkJcm9vdCA9ICZoaXN0cy0+ZW50cmllc19jb2xsYXBzZWQ7Ci0JZWxzZQotCQlyb290ID0gaGlzdHMtPmVudHJpZXNfaW47Ci0KLQlwcl9pbmZvKCItLS0tLSAlcyAtLS0tLS0tLVxuIiwgX19mdW5jX18pOwotCW5vZGUgPSByYl9maXJzdChyb290KTsKLQl3aGlsZSAobm9kZSkgewotCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7Ci0KLQkJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZV9pbik7Ci0KLQkJcHJfaW5mbygiJTJkOiBlbnRyeTogJS04cyBbJS04c10gJTIwczogcGVyaW9kID0gJSJQUkl1NjQiXG4iLAotCQkJaSwgdGhyZWFkX19jb21tX3N0cihoZS0+dGhyZWFkKSwgaGUtPm1zLm1hcC0+ZHNvLT5zaG9ydF9uYW1lLAotCQkJaGUtPm1zLnN5bS0+bmFtZSwgaGUtPnN0YXQucGVyaW9kKTsKLQotCQlpKys7Ci0JCW5vZGUgPSByYl9uZXh0KG5vZGUpOwotCX0KLX0KLQogaW50IHRlc3RfX2hpc3RzX2xpbmsodm9pZCkKIHsKIAlpbnQgZXJyID0gLTE7CkBAIC00NzEsNyArMzA5LDcgQEAKIAkJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydCgmZXZzZWwtPmhpc3RzLCBOVUxMKTsKIAogCQlpZiAodmVyYm9zZSA+IDIpCi0JCQlwcmludF9oaXN0cygmZXZzZWwtPmhpc3RzKTsKKwkJCXByaW50X2hpc3RzX2luKCZldnNlbC0+aGlzdHMpOwogCX0KIAogCWZpcnN0ID0gcGVyZl9ldmxpc3RfX2ZpcnN0KGV2bGlzdCk7CkBAIC00OTQsNiArMzMyLDcgQEAKIG91dDoKIAkvKiB0ZWFyIGRvd24gZXZlcnl0aGluZyAqLwogCXBlcmZfZXZsaXN0X19kZWxldGUoZXZsaXN0KTsKKwlyZXNldF9vdXRwdXRfZmllbGQoKTsKIAltYWNoaW5lc19fZXhpdCgmbWFjaGluZXMpOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfb3V0cHV0LmMgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjg1MDUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jCkBAIC0wLDAgKzEsNjE4IEBACisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvc29ydC5oIgorI2luY2x1ZGUgInV0aWwvZXZzZWwuaCIKKyNpbmNsdWRlICJ1dGlsL2V2bGlzdC5oIgorI2luY2x1ZGUgInV0aWwvbWFjaGluZS5oIgorI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKKyNpbmNsdWRlICJ0ZXN0cy90ZXN0cy5oIgorI2luY2x1ZGUgInRlc3RzL2hpc3RzX2NvbW1vbi5oIgorCitzdHJ1Y3Qgc2FtcGxlIHsKKwl1MzIgY3B1OworCXUzMiBwaWQ7CisJdTY0IGlwOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgbWFwICptYXA7CisJc3RydWN0IHN5bWJvbCAqc3ltOworfTsKKworLyogRm9yIHRoZSBudW1iZXJzLCBzZWUgaGlzdHNfY29tbW9uLmMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2FtcGxlIGZha2Vfc2FtcGxlc1tdID0geworCS8qIHBlcmYgW2tlcm5lbF0gc2NoZWR1bGUoKSAqLworCXsgLmNwdSA9IDAsIC5waWQgPSAxMDAsIC5pcCA9IDB4ZjAwMDAgKyA3MDAsIH0sCisJLyogcGVyZiBbcGVyZl0gICBtYWluKCkgKi8KKwl7IC5jcHUgPSAxLCAucGlkID0gMTAwLCAuaXAgPSAweDQwMDAwICsgNzAwLCB9LAorCS8qIHBlcmYgW3BlcmZdICAgY21kX3JlY29yZCgpICovCisJeyAuY3B1ID0gMSwgLnBpZCA9IDEwMCwgLmlwID0gMHg0MDAwMCArIDkwMCwgfSwKKwkvKiBwZXJmIFtsaWJjXSAgIG1hbGxvYygpICovCisJeyAuY3B1ID0gMSwgLnBpZCA9IDEwMCwgLmlwID0gMHg1MDAwMCArIDcwMCwgfSwKKwkvKiBwZXJmIFtsaWJjXSAgIGZyZWUoKSAqLworCXsgLmNwdSA9IDIsIC5waWQgPSAxMDAsIC5pcCA9IDB4NTAwMDAgKyA4MDAsIH0sCisJLyogcGVyZiBbcGVyZl0gICBtYWluKCkgKi8KKwl7IC5jcHUgPSAyLCAucGlkID0gMjAwLCAuaXAgPSAweDQwMDAwICsgNzAwLCB9LAorCS8qIHBlcmYgW2tlcm5lbF0gcGFnZV9mYXVsdCgpICovCisJeyAuY3B1ID0gMiwgLnBpZCA9IDIwMCwgLmlwID0gMHhmMDAwMCArIDgwMCwgfSwKKwkvKiBiYXNoIFtiYXNoXSAgIG1haW4oKSAqLworCXsgLmNwdSA9IDMsIC5waWQgPSAzMDAsIC5pcCA9IDB4NDAwMDAgKyA3MDAsIH0sCisJLyogYmFzaCBbYmFzaF0gICB4bWFsbG9jKCkgKi8KKwl7IC5jcHUgPSAwLCAucGlkID0gMzAwLCAuaXAgPSAweDQwMDAwICsgODAwLCB9LAorCS8qIGJhc2ggW2tlcm5lbF0gcGFnZV9mYXVsdCgpICovCisJeyAuY3B1ID0gMSwgLnBpZCA9IDMwMCwgLmlwID0gMHhmMDAwMCArIDgwMCwgfSwKK307CisKK3N0YXRpYyBpbnQgYWRkX2hpc3RfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CisJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZSA9IHsgLnBlcmlvZCA9IDEwMCwgfTsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZha2Vfc2FtcGxlcyk7IGkrKykgeworCQljb25zdCB1bmlvbiBwZXJmX2V2ZW50IGV2ZW50ID0geworCQkJLmhlYWRlciA9IHsKKwkJCQkubWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKKwkJCX0sCisJCX07CisKKwkJc2FtcGxlLmNwdSA9IGZha2Vfc2FtcGxlc1tpXS5jcHU7CisJCXNhbXBsZS5waWQgPSBmYWtlX3NhbXBsZXNbaV0ucGlkOworCQlzYW1wbGUudGlkID0gZmFrZV9zYW1wbGVzW2ldLnBpZDsKKwkJc2FtcGxlLmlwID0gZmFrZV9zYW1wbGVzW2ldLmlwOworCisJCWlmIChwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZSgmZXZlbnQsIG1hY2hpbmUsICZhbCwKKwkJCQkJCSAgJnNhbXBsZSkgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJaGUgPSBfX2hpc3RzX19hZGRfZW50cnkoaGlzdHMsICZhbCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJc2FtcGxlLnBlcmlvZCwgMSwgMCk7CisJCWlmIChoZSA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisKKwkJZmFrZV9zYW1wbGVzW2ldLnRocmVhZCA9IGFsLnRocmVhZDsKKwkJZmFrZV9zYW1wbGVzW2ldLm1hcCA9IGFsLm1hcDsKKwkJZmFrZV9zYW1wbGVzW2ldLnN5bSA9IGFsLnN5bTsKKwl9CisKKwlyZXR1cm4gVEVTVF9PSzsKKworb3V0OgorCXByX2RlYnVnKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgYWRkaW5nIGEgaGlzdCBlbnRyeVxuIik7CisJcmV0dXJuIFRFU1RfRkFJTDsKK30KKworc3RhdGljIHZvaWQgZGVsX2hpc3RfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzKQoreworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdF9pbjsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdF9vdXQ7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlpZiAoc29ydF9fbmVlZF9jb2xsYXBzZSkKKwkJcm9vdF9pbiA9ICZoaXN0cy0+ZW50cmllc19jb2xsYXBzZWQ7CisJZWxzZQorCQlyb290X2luID0gaGlzdHMtPmVudHJpZXNfaW47CisKKwlyb290X291dCA9ICZoaXN0cy0+ZW50cmllczsKKworCXdoaWxlICghUkJfRU1QVFlfUk9PVChyb290X291dCkpIHsKKwkJbm9kZSA9IHJiX2ZpcnN0KHJvb3Rfb3V0KTsKKworCQloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJcmJfZXJhc2Uobm9kZSwgcm9vdF9vdXQpOworCQlyYl9lcmFzZSgmaGUtPnJiX25vZGVfaW4sIHJvb3RfaW4pOworCQloaXN0X2VudHJ5X19mcmVlKGhlKTsKKwl9Cit9CisKK3R5cGVkZWYgaW50ICgqdGVzdF9mbl90KShzdHJ1Y3QgcGVyZl9ldnNlbCAqLCBzdHJ1Y3QgbWFjaGluZSAqKTsKKworI2RlZmluZSBDT01NKGhlKSAgKHRocmVhZF9fY29tbV9zdHIoaGUtPnRocmVhZCkpCisjZGVmaW5lIERTTyhoZSkgICAoaGUtPm1zLm1hcC0+ZHNvLT5zaG9ydF9uYW1lKQorI2RlZmluZSBTWU0oaGUpICAgKGhlLT5tcy5zeW0tPm5hbWUpCisjZGVmaW5lIENQVShoZSkgICAoaGUtPmNwdSkKKyNkZWZpbmUgUElEKGhlKSAgIChoZS0+dGhyZWFkLT50aWQpCisKKy8qIGRlZmF1bHQgc29ydCBrZXlzIChubyBmaWVsZCkgKi8KK3N0YXRpYyBpbnQgdGVzdDEoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBoaXN0cyAqaGlzdHMgPSAmZXZzZWwtPmhpc3RzOworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCWZpZWxkX29yZGVyID0gTlVMTDsKKwlzb3J0X29yZGVyID0gTlVMTDsgLyogZXF1aXZhbGVudCB0byBzb3J0X29yZGVyID0gImNvbW0sZHNvLHN5bSIgKi8KKworCXNldHVwX3NvcnRpbmcoKTsKKworCS8qCisJICogZXhwZWN0ZWQgb3V0cHV0OgorCSAqCisJICogT3ZlcmhlYWQgIENvbW1hbmQgIFNoYXJlZCBPYmplY3QgICAgICAgICAgU3ltYm9sCisJICogPT09PT09PT0gID09PT09PT0gID09PT09PT09PT09PT0gID09PT09PT09PT09PT09CisJICogICAyMC4wMCUgICAgIHBlcmYgIHBlcmYgICAgICAgICAgIFsuXSBtYWluCisJICogICAxMC4wMCUgICAgIGJhc2ggIFtrZXJuZWxdICAgICAgIFtrXSBwYWdlX2ZhdWx0CisJICogICAxMC4wMCUgICAgIGJhc2ggIGJhc2ggICAgICAgICAgIFsuXSBtYWluCisJICogICAxMC4wMCUgICAgIGJhc2ggIGJhc2ggICAgICAgICAgIFsuXSB4bWFsbG9jCisJICogICAxMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBwYWdlX2ZhdWx0CisJICogICAxMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBzY2hlZHVsZQorCSAqICAgMTAuMDAlICAgICBwZXJmICBsaWJjICAgICAgICAgICBbLl0gZnJlZQorCSAqICAgMTAuMDAlICAgICBwZXJmICBsaWJjICAgICAgICAgICBbLl0gbWFsbG9jCisJICogICAxMC4wMCUgICAgIHBlcmYgIHBlcmYgICAgICAgICAgIFsuXSBjbWRfcmVjb3JkCisJICovCisJZXJyID0gYWRkX2hpc3RfZW50cmllcyhoaXN0cywgbWFjaGluZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCisJaWYgKHZlcmJvc2UgPiAyKSB7CisJCXByX2luZm8oIltmaWVsZHMgPSAlcywgc29ydCA9ICVzXVxuIiwgZmllbGRfb3JkZXIsIHNvcnRfb3JkZXIpOworCQlwcmludF9oaXN0c19vdXQoaGlzdHMpOworCX0KKworCXJvb3QgPSAmZXZzZWwtPmhpc3RzLmVudHJpZXM7CisJbm9kZSA9IHJiX2ZpcnN0KHJvb3QpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCSFzdHJjbXAoQ09NTShoZSksICJwZXJmIikgJiYgIXN0cmNtcChEU08oaGUpLCAicGVyZiIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJtYWluIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDIwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKENPTU0oaGUpLCAiYmFzaCIpICYmICFzdHJjbXAoRFNPKGhlKSwgIltrZXJuZWxdIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgInBhZ2VfZmF1bHQiKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCSFzdHJjbXAoQ09NTShoZSksICJiYXNoIikgJiYgIXN0cmNtcChEU08oaGUpLCAiYmFzaCIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJtYWluIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKENPTU0oaGUpLCAiYmFzaCIpICYmICFzdHJjbXAoRFNPKGhlKSwgImJhc2giKSAmJgorCQkJIXN0cmNtcChTWU0oaGUpLCAieG1hbGxvYyIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJba2VybmVsXSIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJwYWdlX2ZhdWx0IikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKENPTU0oaGUpLCAicGVyZiIpICYmICFzdHJjbXAoRFNPKGhlKSwgIltrZXJuZWxdIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgInNjaGVkdWxlIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKENPTU0oaGUpLCAicGVyZiIpICYmICFzdHJjbXAoRFNPKGhlKSwgImxpYmMiKSAmJgorCQkJIXN0cmNtcChTWU0oaGUpLCAiZnJlZSIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJsaWJjIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgIm1hbGxvYyIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJwZXJmIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgImNtZF9yZWNvcmQiKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworb3V0OgorCWRlbF9oaXN0X2VudHJpZXMoaGlzdHMpOworCXJlc2V0X291dHB1dF9maWVsZCgpOworCXJldHVybiBlcnI7Cit9CisKKy8qIG1peGVkIGZpZWxkcyBhbmQgc29ydCBrZXlzICovCitzdGF0aWMgaW50IHRlc3QyKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaGlzdHMgKmhpc3RzID0gJmV2c2VsLT5oaXN0czsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3Q7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlmaWVsZF9vcmRlciA9ICJvdmVyaGVhZCxjcHUiOworCXNvcnRfb3JkZXIgPSAicGlkIjsKKworCXNldHVwX3NvcnRpbmcoKTsKKworCS8qCisJICogZXhwZWN0ZWQgb3V0cHV0OgorCSAqCisJICogT3ZlcmhlYWQgIENQVSAgQ29tbWFuZDogIFBpZAorCSAqID09PT09PT09ICA9PT0gID09PT09PT09PT09PT0KKwkgKiAgIDMwLjAwJSAgICAxICBwZXJmICAgOiAgMTAwCisJICogICAxMC4wMCUgICAgMCAgcGVyZiAgIDogIDEwMAorCSAqICAgMTAuMDAlICAgIDIgIHBlcmYgICA6ICAxMDAKKwkgKiAgIDIwLjAwJSAgICAyICBwZXJmICAgOiAgMjAwCisJICogICAxMC4wMCUgICAgMCAgYmFzaCAgIDogIDMwMAorCSAqICAgMTAuMDAlICAgIDEgIGJhc2ggICA6ICAzMDAKKwkgKiAgIDEwLjAwJSAgICAzICBiYXNoICAgOiAgMzAwCisJICovCisJZXJyID0gYWRkX2hpc3RfZW50cmllcyhoaXN0cywgbWFjaGluZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCisJaWYgKHZlcmJvc2UgPiAyKSB7CisJCXByX2luZm8oIltmaWVsZHMgPSAlcywgc29ydCA9ICVzXVxuIiwgZmllbGRfb3JkZXIsIHNvcnRfb3JkZXIpOworCQlwcmludF9oaXN0c19vdXQoaGlzdHMpOworCX0KKworCXJvb3QgPSAmZXZzZWwtPmhpc3RzLmVudHJpZXM7CisJbm9kZSA9IHJiX2ZpcnN0KHJvb3QpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMSAmJiBQSUQoaGUpID09IDEwMCAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMzAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMCAmJiBQSUQoaGUpID09IDEwMCAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworb3V0OgorCWRlbF9oaXN0X2VudHJpZXMoaGlzdHMpOworCXJlc2V0X291dHB1dF9maWVsZCgpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGZpZWxkcyBvbmx5IChubyBzb3J0IGtleSkgKi8KK3N0YXRpYyBpbnQgdGVzdDMoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBoaXN0cyAqaGlzdHMgPSAmZXZzZWwtPmhpc3RzOworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCWZpZWxkX29yZGVyID0gImNvbW0sb3ZlcmhlYWQsZHNvIjsKKwlzb3J0X29yZGVyID0gTlVMTDsKKworCXNldHVwX3NvcnRpbmcoKTsKKworCS8qCisJICogZXhwZWN0ZWQgb3V0cHV0OgorCSAqCisJICogQ29tbWFuZCAgT3ZlcmhlYWQgIFNoYXJlZCBPYmplY3QKKwkgKiA9PT09PT09ICA9PT09PT09PSAgPT09PT09PT09PT09PQorCSAqICAgIGJhc2ggICAgMjAuMDAlICBiYXNoCisJICogICAgYmFzaCAgICAxMC4wMCUgIFtrZXJuZWxdCisJICogICAgcGVyZiAgICAzMC4wMCUgIHBlcmYKKwkgKiAgICBwZXJmICAgIDIwLjAwJSAgW2tlcm5lbF0KKwkgKiAgICBwZXJmICAgIDIwLjAwJSAgbGliYworCSAqLworCWVyciA9IGFkZF9oaXN0X2VudHJpZXMoaGlzdHMsIG1hY2hpbmUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOworCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKworCWlmICh2ZXJib3NlID4gMikgeworCQlwcl9pbmZvKCJbZmllbGRzID0gJXMsIHNvcnQgPSAlc11cbiIsIGZpZWxkX29yZGVyLCBzb3J0X29yZGVyKTsKKwkJcHJpbnRfaGlzdHNfb3V0KGhpc3RzKTsKKwl9CisKKwlyb290ID0gJmV2c2VsLT5oaXN0cy5lbnRyaWVzOworCW5vZGUgPSByYl9maXJzdChyb290KTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKENPTU0oaGUpLCAiYmFzaCIpICYmICFzdHJjbXAoRFNPKGhlKSwgImJhc2giKSAmJgorCQkJaGUtPnN0YXQucGVyaW9kID09IDIwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKENPTU0oaGUpLCAiYmFzaCIpICYmICFzdHJjbXAoRFNPKGhlKSwgIltrZXJuZWxdIikgJiYKKwkJCWhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJwZXJmIikgJiYKKwkJCWhlLT5zdGF0LnBlcmlvZCA9PSAzMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJba2VybmVsXSIpICYmCisJCQloZS0+c3RhdC5wZXJpb2QgPT0gMjAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCSFzdHJjbXAoQ09NTShoZSksICJwZXJmIikgJiYgIXN0cmNtcChEU08oaGUpLCAibGliYyIpICYmCisJCQloZS0+c3RhdC5wZXJpb2QgPT0gMjAwKTsKKworb3V0OgorCWRlbF9oaXN0X2VudHJpZXMoaGlzdHMpOworCXJlc2V0X291dHB1dF9maWVsZCgpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGhhbmRsZSBkdXBsaWNhdGUgJ2RzbycgZmllbGQgKi8KK3N0YXRpYyBpbnQgdGVzdDQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBoaXN0cyAqaGlzdHMgPSAmZXZzZWwtPmhpc3RzOworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCWZpZWxkX29yZGVyID0gImRzbyxzeW0sY29tbSxvdmVyaGVhZCxkc28iOworCXNvcnRfb3JkZXIgPSAic3ltIjsKKworCXNldHVwX3NvcnRpbmcoKTsKKworCS8qCisJICogZXhwZWN0ZWQgb3V0cHV0OgorCSAqCisJICogU2hhcmVkIE9iamVjdCAgICAgICAgICBTeW1ib2wgIENvbW1hbmQgIE92ZXJoZWFkCisJICogPT09PT09PT09PT09PSAgPT09PT09PT09PT09PT0gID09PT09PT0gID09PT09PT09CisJICogICAgICAgICAgcGVyZiAgWy5dIGNtZF9yZWNvcmQgICAgIHBlcmYgICAgMTAuMDAlCisJICogICAgICAgICAgbGliYyAgWy5dIGZyZWUgICAgICAgICAgIHBlcmYgICAgMTAuMDAlCisJICogICAgICAgICAgYmFzaCAgWy5dIG1haW4gICAgICAgICAgIGJhc2ggICAgMTAuMDAlCisJICogICAgICAgICAgcGVyZiAgWy5dIG1haW4gICAgICAgICAgIHBlcmYgICAgMjAuMDAlCisJICogICAgICAgICAgbGliYyAgWy5dIG1hbGxvYyAgICAgICAgIHBlcmYgICAgMTAuMDAlCisJICogICAgICBba2VybmVsXSAgW2tdIHBhZ2VfZmF1bHQgICAgIGJhc2ggICAgMTAuMDAlCisJICogICAgICBba2VybmVsXSAgW2tdIHBhZ2VfZmF1bHQgICAgIHBlcmYgICAgMTAuMDAlCisJICogICAgICBba2VybmVsXSAgW2tdIHNjaGVkdWxlICAgICAgIHBlcmYgICAgMTAuMDAlCisJICogICAgICAgICAgYmFzaCAgWy5dIHhtYWxsb2MgICAgICAgIGJhc2ggICAgMTAuMDAlCisJICovCisJZXJyID0gYWRkX2hpc3RfZW50cmllcyhoaXN0cywgbWFjaGluZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCisJaWYgKHZlcmJvc2UgPiAyKSB7CisJCXByX2luZm8oIltmaWVsZHMgPSAlcywgc29ydCA9ICVzXVxuIiwgZmllbGRfb3JkZXIsIHNvcnRfb3JkZXIpOworCQlwcmludF9oaXN0c19vdXQoaGlzdHMpOworCX0KKworCXJvb3QgPSAmZXZzZWwtPmhpc3RzLmVudHJpZXM7CisJbm9kZSA9IHJiX2ZpcnN0KHJvb3QpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCSFzdHJjbXAoRFNPKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKFNZTShoZSksICJjbWRfcmVjb3JkIikgJiYKKwkJCSFzdHJjbXAoQ09NTShoZSksICJwZXJmIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKERTTyhoZSksICJsaWJjIikgJiYgIXN0cmNtcChTWU0oaGUpLCAiZnJlZSIpICYmCisJCQkhc3RyY21wKENPTU0oaGUpLCAicGVyZiIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChEU08oaGUpLCAiYmFzaCIpICYmICFzdHJjbXAoU1lNKGhlKSwgIm1haW4iKSAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgImJhc2giKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCSFzdHJjbXAoRFNPKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKFNZTShoZSksICJtYWluIikgJiYKKwkJCSFzdHJjbXAoQ09NTShoZSksICJwZXJmIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDIwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKERTTyhoZSksICJsaWJjIikgJiYgIXN0cmNtcChTWU0oaGUpLCAibWFsbG9jIikgJiYKKwkJCSFzdHJjbXAoQ09NTShoZSksICJwZXJmIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQkhc3RyY21wKERTTyhoZSksICJba2VybmVsXSIpICYmICFzdHJjbXAoU1lNKGhlKSwgInBhZ2VfZmF1bHQiKSAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgImJhc2giKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCSFzdHJjbXAoRFNPKGhlKSwgIltrZXJuZWxdIikgJiYgIXN0cmNtcChTWU0oaGUpLCAicGFnZV9mYXVsdCIpICYmCisJCQkhc3RyY21wKENPTU0oaGUpLCAicGVyZiIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChEU08oaGUpLCAiW2tlcm5lbF0iKSAmJiAhc3RyY21wKFNZTShoZSksICJzY2hlZHVsZSIpICYmCisJCQkhc3RyY21wKENPTU0oaGUpLCAicGVyZiIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJIXN0cmNtcChEU08oaGUpLCAiYmFzaCIpICYmICFzdHJjbXAoU1lNKGhlKSwgInhtYWxsb2MiKSAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgImJhc2giKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworb3V0OgorCWRlbF9oaXN0X2VudHJpZXMoaGlzdHMpOworCXJlc2V0X291dHB1dF9maWVsZCgpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGZ1bGwgc29ydCBrZXlzIHcvbyBvdmVyaGVhZCBmaWVsZCAqLworc3RhdGljIGludCB0ZXN0NShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCWludCBlcnI7CisJc3RydWN0IGhpc3RzICpoaXN0cyA9ICZldnNlbC0+aGlzdHM7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlOworCXN0cnVjdCByYl9yb290ICpyb290OworCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJZmllbGRfb3JkZXIgPSAiY3B1LHBpZCxjb21tLGRzbyxzeW0iOworCXNvcnRfb3JkZXIgPSAiZHNvLHBpZCI7CisKKwlzZXR1cF9zb3J0aW5nKCk7CisKKwkvKgorCSAqIGV4cGVjdGVkIG91dHB1dDoKKwkgKgorCSAqIENQVSAgQ29tbWFuZDogIFBpZCAgQ29tbWFuZCAgU2hhcmVkIE9iamVjdCAgICAgICAgICBTeW1ib2wKKwkgKiA9PT0gID09PT09PT09PT09PT0gID09PT09PT0gID09PT09PT09PT09PT0gID09PT09PT09PT09PT09CisJICogICAwICAgICBwZXJmOiAgMTAwICAgICBwZXJmICAgICAgIFtrZXJuZWxdICBba10gc2NoZWR1bGUKKwkgKiAgIDIgICAgIHBlcmY6ICAyMDAgICAgIHBlcmYgICAgICAgW2tlcm5lbF0gIFtrXSBwYWdlX2ZhdWx0CisJICogICAxICAgICBiYXNoOiAgMzAwICAgICBiYXNoICAgICAgIFtrZXJuZWxdICBba10gcGFnZV9mYXVsdAorCSAqICAgMCAgICAgYmFzaDogIDMwMCAgICAgYmFzaCAgICAgICAgICAgYmFzaCAgWy5dIHhtYWxsb2MKKwkgKiAgIDMgICAgIGJhc2g6ICAzMDAgICAgIGJhc2ggICAgICAgICAgIGJhc2ggIFsuXSBtYWluCisJICogICAxICAgICBwZXJmOiAgMTAwICAgICBwZXJmICAgICAgICAgICBsaWJjICBbLl0gbWFsbG9jCisJICogICAyICAgICBwZXJmOiAgMTAwICAgICBwZXJmICAgICAgICAgICBsaWJjICBbLl0gZnJlZQorCSAqICAgMSAgICAgcGVyZjogIDEwMCAgICAgcGVyZiAgICAgICAgICAgcGVyZiAgWy5dIGNtZF9yZWNvcmQKKwkgKiAgIDEgICAgIHBlcmY6ICAxMDAgICAgIHBlcmYgICAgICAgICAgIHBlcmYgIFsuXSBtYWluCisJICogICAyICAgICBwZXJmOiAgMjAwICAgICBwZXJmICAgICAgICAgICBwZXJmICBbLl0gbWFpbgorCSAqLworCWVyciA9IGFkZF9oaXN0X2VudHJpZXMoaGlzdHMsIG1hY2hpbmUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOworCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKworCWlmICh2ZXJib3NlID4gMikgeworCQlwcl9pbmZvKCJbZmllbGRzID0gJXMsIHNvcnQgPSAlc11cbiIsIGZpZWxkX29yZGVyLCBzb3J0X29yZGVyKTsKKwkJcHJpbnRfaGlzdHNfb3V0KGhpc3RzKTsKKwl9CisKKwlyb290ID0gJmV2c2VsLT5oaXN0cy5lbnRyaWVzOworCW5vZGUgPSByYl9maXJzdChyb290KTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMCAmJiBQSUQoaGUpID09IDEwMCAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJba2VybmVsXSIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJzY2hlZHVsZSIpICYmIGhlLT5zdGF0LnBlcmlvZCA9PSAxMDApOworCisJbm9kZSA9IHJiX25leHQobm9kZSk7CisJaGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJJbnZhbGlkIGhpc3QgZW50cnkiLAorCQkJQ1BVKGhlKSA9PSAyICYmIFBJRChoZSkgPT0gMjAwICYmCisJCQkhc3RyY21wKENPTU0oaGUpLCAicGVyZiIpICYmICFzdHJjbXAoRFNPKGhlKSwgIltrZXJuZWxdIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgInBhZ2VfZmF1bHQiKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMSAmJiBQSUQoaGUpID09IDMwMCAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgImJhc2giKSAmJiAhc3RyY21wKERTTyhoZSksICJba2VybmVsXSIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJwYWdlX2ZhdWx0IikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQlDUFUoaGUpID09IDAgJiYgUElEKGhlKSA9PSAzMDAgJiYKKwkJCSFzdHJjbXAoQ09NTShoZSksICJiYXNoIikgJiYgIXN0cmNtcChEU08oaGUpLCAiYmFzaCIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJ4bWFsbG9jIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQlDUFUoaGUpID09IDMgJiYgUElEKGhlKSA9PSAzMDAgJiYKKwkJCSFzdHJjbXAoQ09NTShoZSksICJiYXNoIikgJiYgIXN0cmNtcChEU08oaGUpLCAiYmFzaCIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJtYWluIikgJiYgaGUtPnN0YXQucGVyaW9kID09IDEwMCk7CisKKwlub2RlID0gcmJfbmV4dChub2RlKTsKKwloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwlURVNUX0FTU0VSVF9WQUwoIkludmFsaWQgaGlzdCBlbnRyeSIsCisJCQlDUFUoaGUpID09IDEgJiYgUElEKGhlKSA9PSAxMDAgJiYKKwkJCSFzdHJjbXAoQ09NTShoZSksICJwZXJmIikgJiYgIXN0cmNtcChEU08oaGUpLCAibGliYyIpICYmCisJCQkhc3RyY21wKFNZTShoZSksICJtYWxsb2MiKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMiAmJiBQSUQoaGUpID09IDEwMCAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJsaWJjIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgImZyZWUiKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMSAmJiBQSUQoaGUpID09IDEwMCAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJwZXJmIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgImNtZF9yZWNvcmQiKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMSAmJiBQSUQoaGUpID09IDEwMCAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJwZXJmIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgIm1haW4iKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCVRFU1RfQVNTRVJUX1ZBTCgiSW52YWxpZCBoaXN0IGVudHJ5IiwKKwkJCUNQVShoZSkgPT0gMiAmJiBQSUQoaGUpID09IDIwMCAmJgorCQkJIXN0cmNtcChDT01NKGhlKSwgInBlcmYiKSAmJiAhc3RyY21wKERTTyhoZSksICJwZXJmIikgJiYKKwkJCSFzdHJjbXAoU1lNKGhlKSwgIm1haW4iKSAmJiBoZS0+c3RhdC5wZXJpb2QgPT0gMTAwKTsKKworb3V0OgorCWRlbF9oaXN0X2VudHJpZXMoaGlzdHMpOworCXJlc2V0X291dHB1dF9maWVsZCgpOworCXJldHVybiBlcnI7Cit9CisKK2ludCB0ZXN0X19oaXN0c19vdXRwdXQodm9pZCkKK3sKKwlpbnQgZXJyID0gVEVTVF9GQUlMOworCXN0cnVjdCBtYWNoaW5lcyBtYWNoaW5lczsKKwlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZTsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgPSBwZXJmX2V2bGlzdF9fbmV3KCk7CisJc2l6ZV90IGk7CisJdGVzdF9mbl90IHRlc3RjYXNlc1tdID0geworCQl0ZXN0MSwKKwkJdGVzdDIsCisJCXRlc3QzLAorCQl0ZXN0NCwKKwkJdGVzdDUsCisJfTsKKworCVRFU1RfQVNTRVJUX1ZBTCgiTm8gbWVtb3J5IiwgZXZsaXN0KTsKKworCWVyciA9IHBhcnNlX2V2ZW50cyhldmxpc3QsICJjcHUtY2xvY2siKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCW1hY2hpbmVzX19pbml0KCZtYWNoaW5lcyk7CisKKwkvKiBzZXR1cCB0aHJlYWRzL2Rzby9tYXAvc3ltYm9scyBhbHNvICovCisJbWFjaGluZSA9IHNldHVwX2Zha2VfbWFjaGluZSgmbWFjaGluZXMpOworCWlmICghbWFjaGluZSkKKwkJZ290byBvdXQ7CisKKwlpZiAodmVyYm9zZSA+IDEpCisJCW1hY2hpbmVfX2ZwcmludGYobWFjaGluZSwgc3RkZXJyKTsKKworCWV2c2VsID0gcGVyZl9ldmxpc3RfX2ZpcnN0KGV2bGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZXN0Y2FzZXMpOyBpKyspIHsKKwkJZXJyID0gdGVzdGNhc2VzW2ldKGV2c2VsLCBtYWNoaW5lKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKwl9CisKK291dDoKKwkvKiB0ZWFyIGRvd24gZXZlcnl0aGluZyAqLworCXBlcmZfZXZsaXN0X19kZWxldGUoZXZsaXN0KTsKKwltYWNoaW5lc19fZXhpdCgmbWFjaGluZXMpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMva2VlcC10cmFja2luZy5jIGIvdG9vbHMvcGVyZi90ZXN0cy9rZWVwLXRyYWNraW5nLmMKaW5kZXggNDk3OTU3Zi4uN2E1YWI3YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9rZWVwLXRyYWNraW5nLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9rZWVwLXRyYWNraW5nLmMKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9tbWFwLXRocmVhZC1sb29rdXAuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvbW1hcC10aHJlYWQtbG9va3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0NTZmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvbW1hcC10aHJlYWQtbG9va3VwLmMKQEAgLTAsMCArMSwyMzMgQEAKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ0ZXN0cy5oIgorI2luY2x1ZGUgIm1hY2hpbmUuaCIKKyNpbmNsdWRlICJ0aHJlYWRfbWFwLmgiCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisKKyNkZWZpbmUgVEhSRUFEUyA0CisKK3N0YXRpYyBpbnQgZ29fYXdheTsKKworc3RydWN0IHRocmVhZF9kYXRhIHsKKwlwdGhyZWFkX3QJcHQ7CisJcGlkX3QJCXRpZDsKKwl2b2lkCQkqbWFwOworCWludAkJcmVhZHlbMl07Cit9OworCitzdGF0aWMgc3RydWN0IHRocmVhZF9kYXRhIHRocmVhZHNbVEhSRUFEU107CisKK3N0YXRpYyBpbnQgdGhyZWFkX2luaXQoc3RydWN0IHRocmVhZF9kYXRhICp0ZCkKK3sKKwl2b2lkICptYXA7CisKKwltYXAgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSwKKwkJICAgUFJPVF9SRUFEfFBST1RfV1JJVEV8UFJPVF9FWEVDLAorCQkgICBNQVBfU0hBUkVEfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKworCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworCQlwZXJyb3IoIm1tYXAgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwl0ZC0+bWFwID0gbWFwOworCXRkLT50aWQgPSBzeXNjYWxsKFNZU19nZXR0aWQpOworCisJcHJfZGVidWcoInRpZCA9ICVkLCBtYXAgPSAlcFxuIiwgdGQtPnRpZCwgbWFwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnRocmVhZF9mbih2b2lkICphcmcpCit7CisJc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9IGFyZzsKKwlzc2l6ZV90IHJldDsKKwlpbnQgZ287CisKKwlpZiAodGhyZWFkX2luaXQodGQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFNpZ25hbCB0aHJlYWRfY3JlYXRlIHRocmVhZCBpcyBpbml0aWFsaXplZC4gKi8KKwlyZXQgPSB3cml0ZSh0ZC0+cmVhZHlbMV0sICZnbywgc2l6ZW9mKGludCkpOworCWlmIChyZXQgIT0gc2l6ZW9mKGludCkpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbm90aWZ5XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJd2hpbGUgKCFnb19hd2F5KSB7CisJCS8qIFdhaXRpbmcgZm9yIG1haW4gdGhyZWFkIHRvIGtpbGwgdXMuICovCisJCXVzbGVlcCgxMDApOworCX0KKworCW11bm1hcCh0ZC0+bWFwLCBwYWdlX3NpemUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jcmVhdGUoaW50IGkpCit7CisJc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9ICZ0aHJlYWRzW2ldOworCWludCBlcnIsIGdvOworCisJaWYgKHBpcGUodGQtPnJlYWR5KSkKKwkJcmV0dXJuIC0xOworCisJZXJyID0gcHRocmVhZF9jcmVhdGUoJnRkLT5wdCwgTlVMTCwgdGhyZWFkX2ZuLCB0ZCk7CisJaWYgKCFlcnIpIHsKKwkJLyogV2FpdCBmb3IgdGhyZWFkIGluaXRpYWxpemF0aW9uLiAqLworCQlzc2l6ZV90IHJldCA9IHJlYWQodGQtPnJlYWR5WzBdLCAmZ28sIHNpemVvZihpbnQpKTsKKwkJZXJyID0gcmV0ICE9IHNpemVvZihpbnQpOworCX0KKworCWNsb3NlKHRkLT5yZWFkeVswXSk7CisJY2xvc2UodGQtPnJlYWR5WzFdKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRocmVhZHNfY3JlYXRlKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9kYXRhICp0ZDAgPSAmdGhyZWFkc1swXTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWdvX2F3YXkgPSAwOworCisJLyogMCBpcyBtYWluIHRocmVhZCAqLworCWlmICh0aHJlYWRfaW5pdCh0ZDApKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAxOyAhZXJyICYmIGkgPCBUSFJFQURTOyBpKyspCisJCWVyciA9IHRocmVhZF9jcmVhdGUoaSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRocmVhZHNfZGVzdHJveSh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfZGF0YSAqdGQwID0gJnRocmVhZHNbMF07CisJaW50IGksIGVyciA9IDA7CisKKwkvKiBjbGVhbnVwIHRoZSBtYWluIHRocmVhZCAqLworCW11bm1hcCh0ZDAtPm1hcCwgcGFnZV9zaXplKTsKKworCWdvX2F3YXkgPSAxOworCisJZm9yIChpID0gMTsgIWVyciAmJiBpIDwgVEhSRUFEUzsgaSsrKQorCQllcnIgPSBwdGhyZWFkX2pvaW4odGhyZWFkc1tpXS5wdCwgTlVMTCk7CisKKwlyZXR1cm4gZXJyOworfQorCit0eXBlZGVmIGludCAoKnN5bnRoX2NiKShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisKK3N0YXRpYyBpbnQgc3ludGhfYWxsKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXJldHVybiBwZXJmX2V2ZW50X19zeW50aGVzaXplX3RocmVhZHMoTlVMTCwKKwkJCQkJICAgICAgcGVyZl9ldmVudF9fcHJvY2VzcywKKwkJCQkJICAgICAgbWFjaGluZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfcHJvY2VzcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX21hcCAqbWFwOworCWludCBlcnI7CisKKwltYXAgPSB0aHJlYWRfbWFwX19uZXdfYnlfcGlkKGdldHBpZCgpKTsKKworCWVyciA9IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcChOVUxMLCBtYXAsCisJCQkJCQlwZXJmX2V2ZW50X19wcm9jZXNzLAorCQkJCQkJbWFjaGluZSwgMCk7CisKKwl0aHJlYWRfbWFwX19kZWxldGUobWFwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1tYXBfZXZlbnRzKHN5bnRoX2NiIHN5bnRoKQoreworCXN0cnVjdCBtYWNoaW5lcyBtYWNoaW5lczsKKwlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZTsKKwlpbnQgZXJyLCBpOworCisJLyoKKwkgKiBUaGUgdGhyZWFkc19jcmVhdGUgd2lsbCBub3QgcmV0dXJuIGJlZm9yZSBhbGwgdGhyZWFkcworCSAqIGFyZSBzcGF3bmVkIGFuZCBhbGwgY3JlYXRlZCBtZW1vcnkgbWFwLgorCSAqCisJICogVGhleSB3aWxsIGxvb3AgdW50aWwgdGhyZWFkc19kZXN0cm95IGlzIGNhbGxlZCwgc28gd2UKKwkgKiBjYW4gc2FmZWx5IHJ1biBzeW50aGVzaXppbmcgZnVuY3Rpb24uCisJICovCisJVEVTVF9BU1NFUlRfVkFMKCJmYWlsZWQgdG8gY3JlYXRlIHRocmVhZHMiLCAhdGhyZWFkc19jcmVhdGUoKSk7CisKKwltYWNoaW5lc19faW5pdCgmbWFjaGluZXMpOworCW1hY2hpbmUgPSAmbWFjaGluZXMuaG9zdDsKKworCWR1bXBfdHJhY2UgPSB2ZXJib3NlID4gMSA/IDEgOiAwOworCisJZXJyID0gc3ludGgobWFjaGluZSk7CisKKwlkdW1wX3RyYWNlID0gMDsKKworCVRFU1RfQVNTRVJUX1ZBTCgiZmFpbGVkIHRvIGRlc3Ryb3kgdGhyZWFkcyIsICF0aHJlYWRzX2Rlc3Ryb3koKSk7CisJVEVTVF9BU1NFUlRfVkFMKCJmYWlsZWQgdG8gc3ludGhlc2l6ZSBtYXBzIiwgIWVycik7CisKKwkvKgorCSAqIEFsbCBkYXRhIGlzIHN5bnRoZXNpemVkLCB0cnkgdG8gZmluZCBtYXAgZm9yIGVhY2gKKwkgKiB0aHJlYWQgb2JqZWN0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBUSFJFQURTOyBpKyspIHsKKwkJc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9ICZ0aHJlYWRzW2ldOworCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKwkJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCisJCXRocmVhZCA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIGdldHBpZCgpLCB0ZC0+dGlkKTsKKworCQlwcl9kZWJ1ZygibG9va2luZyBmb3IgbWFwICVwXG4iLCB0ZC0+bWFwKTsKKworCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLAorCQkJCSAgICAgIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwgTUFQX19GVU5DVElPTiwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZykgKHRkLT5tYXAgKyAxKSwgJmFsKTsKKworCQlpZiAoIWFsLm1hcCkgeworCQkJcHJfZGVidWcoImZhaWxlZCwgY291bGRuJ3QgZmluZCBtYXBcbiIpOworCQkJZXJyID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXByX2RlYnVnKCJtYXAgJXAsIGFkZHIgJSIgUFJJeDY0ICJcbiIsIGFsLm1hcCwgYWwubWFwLT5zdGFydCk7CisJfQorCisJbWFjaGluZV9fZGVsZXRlX3RocmVhZHMobWFjaGluZSk7CisJbWFjaGluZXNfX2V4aXQoJm1hY2hpbmVzKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGhpcyB0ZXN0IGNyZWF0ZXMgJ1RIUkVBRFMnIG51bWJlciBvZiB0aHJlYWRzIChpbmNsdWRpbmcKKyAqIG1haW4gdGhyZWFkKSBhbmQgZWFjaCB0aHJlYWQgY3JlYXRlcyBtZW1vcnkgbWFwLgorICoKKyAqIFdoZW4gdGhyZWFkcyBhcmUgY3JlYXRlZCwgd2Ugc3ludGhlc2l6ZSB0aGVtIHdpdGggYm90aAorICogKHNlcGFyYXRlIHRlc3RzKToKKyAqICAgcGVyZl9ldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwIChwcm9jZXNzIGJhc2VkKQorICogICBwZXJmX2V2ZW50X19zeW50aGVzaXplX3RocmVhZHMgICAgKGdsb2JhbCkKKyAqCisgKiBXZSB0ZXN0IHdlIGNhbiBmaW5kIGFsbCBtZW1vcnkgbWFwcyB2aWE6CisgKiAgIHRocmVhZF9fZmluZF9hZGRyX21hcAorICoKKyAqIGJ5IHVzaW5nIGFsbCB0aHJlYWQgb2JqZWN0cy4KKyAqLworaW50IHRlc3RfX21tYXBfdGhyZWFkX2xvb2t1cCh2b2lkKQoreworCS8qIHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyBzeW50aGVzaXplICovCisJVEVTVF9BU1NFUlRfVkFMKCJmYWlsZWQgd2l0aCBzeXRoZXNpemluZyBhbGwiLAorCQkJIW1tYXBfZXZlbnRzKHN5bnRoX2FsbCkpOworCisJLyogcGVyZl9ldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwIHN5bnRoZXNpemUgKi8KKwlURVNUX0FTU0VSVF9WQUwoImZhaWxlZCB3aXRoIHN5dGhlc2l6aW5nIHByb2Nlc3MiLAorCQkJIW1tYXBfZXZlbnRzKHN5bnRoX3Byb2Nlc3MpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvcGFyc2UtZXZlbnRzLmMKaW5kZXggODYwNWZmNS4uZGViYTY2OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3Rlc3RzL3BhcnNlLWV2ZW50cy5jCkBAIC0xMTc0LDE4OCArMTE3NCwyNDAgQEAKIHN0cnVjdCBldmxpc3RfdGVzdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlfX3UzMiB0eXBlOworCWNvbnN0IGludCBpZDsKIAlpbnQgKCpjaGVjaykoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogfTsKIAogc3RhdGljIHN0cnVjdCBldmxpc3RfdGVzdCB0ZXN0X19ldmVudHNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkubmFtZSAgPSAic3lzY2FsbHM6c3lzX2VudGVyX29wZW4iLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X3RyYWNlcG9pbnQsCisJCS5pZCAgICA9IDAsCiAJfSwKLQlbMV0gPSB7CisJewogCQkubmFtZSAgPSAic3lzY2FsbHM6KiIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfdHJhY2Vwb2ludF9tdWx0aSwKKwkJLmlkICAgID0gMSwKIAl9LAotCVsyXSA9IHsKKwl7CiAJCS5uYW1lICA9ICJyMWEiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X3JhdywKKwkJLmlkICAgID0gMiwKIAl9LAotCVszXSA9IHsKKwl7CiAJCS5uYW1lICA9ICIxOjEiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X251bWVyaWMsCisJCS5pZCAgICA9IDMsCiAJfSwKLQlbNF0gPSB7CisJewogCQkubmFtZSAgPSAiaW5zdHJ1Y3Rpb25zIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9zeW1ib2xpY19uYW1lLAorCQkuaWQgICAgPSA0LAogCX0sCi0JWzVdID0geworCXsKIAkJLm5hbWUgID0gImN5Y2xlcy9wZXJpb2Q9MTAwMDAwLGNvbmZpZzIvIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9zeW1ib2xpY19uYW1lX2NvbmZpZywKKwkJLmlkICAgID0gNSwKIAl9LAotCVs2XSA9IHsKKwl7CiAJCS5uYW1lICA9ICJmYXVsdHMiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X3N5bWJvbGljX2FsaWFzLAorCQkuaWQgICAgPSA2LAogCX0sCi0JWzddID0geworCXsKIAkJLm5hbWUgID0gIkwxLWRjYWNoZS1sb2FkLW1pc3MiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2dlbmh3LAorCQkuaWQgICAgPSA3LAogCX0sCi0JWzhdID0geworCXsKIAkJLm5hbWUgID0gIm1lbTowIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9icmVha3BvaW50LAorCQkuaWQgICAgPSA4LAogCX0sCi0JWzldID0geworCXsKIAkJLm5hbWUgID0gIm1lbTowOngiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfeCwKKwkJLmlkICAgID0gOSwKIAl9LAotCVsxMF0gPSB7CisJewogCQkubmFtZSAgPSAibWVtOjA6ciIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfYnJlYWtwb2ludF9yLAorCQkuaWQgICAgPSAxMCwKIAl9LAotCVsxMV0gPSB7CisJewogCQkubmFtZSAgPSAibWVtOjA6dyIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfYnJlYWtwb2ludF93LAorCQkuaWQgICAgPSAxMSwKIAl9LAotCVsxMl0gPSB7CisJewogCQkubmFtZSAgPSAic3lzY2FsbHM6c3lzX2VudGVyX29wZW46ayIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfdHJhY2Vwb2ludF9tb2RpZmllciwKKwkJLmlkICAgID0gMTIsCiAJfSwKLQlbMTNdID0geworCXsKIAkJLm5hbWUgID0gInN5c2NhbGxzOio6dSIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfdHJhY2Vwb2ludF9tdWx0aV9tb2RpZmllciwKKwkJLmlkICAgID0gMTMsCiAJfSwKLQlbMTRdID0geworCXsKIAkJLm5hbWUgID0gInIxYTprcCIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfcmF3X21vZGlmaWVyLAorCQkuaWQgICAgPSAxNCwKIAl9LAotCVsxNV0gPSB7CisJewogCQkubmFtZSAgPSAiMToxOmhwIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9udW1lcmljX21vZGlmaWVyLAorCQkuaWQgICAgPSAxNSwKIAl9LAotCVsxNl0gPSB7CisJewogCQkubmFtZSAgPSAiaW5zdHJ1Y3Rpb25zOmgiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X3N5bWJvbGljX25hbWVfbW9kaWZpZXIsCisJCS5pZCAgICA9IDE2LAogCX0sCi0JWzE3XSA9IHsKKwl7CiAJCS5uYW1lICA9ICJmYXVsdHM6dSIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfc3ltYm9saWNfYWxpYXNfbW9kaWZpZXIsCisJCS5pZCAgICA9IDE3LAogCX0sCi0JWzE4XSA9IHsKKwl7CiAJCS5uYW1lICA9ICJMMS1kY2FjaGUtbG9hZC1taXNzOmtwIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9nZW5od19tb2RpZmllciwKKwkJLmlkICAgID0gMTgsCiAJfSwKLQlbMTldID0geworCXsKIAkJLm5hbWUgID0gIm1lbTowOnUiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfbW9kaWZpZXIsCisJCS5pZCAgICA9IDE5LAogCX0sCi0JWzIwXSA9IHsKKwl7CiAJCS5uYW1lICA9ICJtZW06MDp4OmsiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfeF9tb2RpZmllciwKKwkJLmlkICAgID0gMjAsCiAJfSwKLQlbMjFdID0geworCXsKIAkJLm5hbWUgID0gIm1lbTowOnI6aHAiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfcl9tb2RpZmllciwKKwkJLmlkICAgID0gMjEsCiAJfSwKLQlbMjJdID0geworCXsKIAkJLm5hbWUgID0gIm1lbTowOnc6dXAiLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfd19tb2RpZmllciwKKwkJLmlkICAgID0gMjIsCiAJfSwKLQlbMjNdID0geworCXsKIAkJLm5hbWUgID0gInIxLHN5c2NhbGxzOnN5c19lbnRlcl9vcGVuOmssMToxOmhwIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9saXN0LAorCQkuaWQgICAgPSAyMywKIAl9LAotCVsyNF0gPSB7CisJewogCQkubmFtZSAgPSAiaW5zdHJ1Y3Rpb25zOkciLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2V4Y2x1ZGVfaG9zdF9tb2RpZmllciwKKwkJLmlkICAgID0gMjQsCiAJfSwKLQlbMjVdID0geworCXsKIAkJLm5hbWUgID0gImluc3RydWN0aW9uczpIIiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9leGNsdWRlX2d1ZXN0X21vZGlmaWVyLAorCQkuaWQgICAgPSAyNSwKIAl9LAotCVsyNl0gPSB7CisJewogCQkubmFtZSAgPSAibWVtOjA6cnciLAogCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfcncsCisJCS5pZCAgICA9IDI2LAogCX0sCi0JWzI3XSA9IHsKKwl7CiAJCS5uYW1lICA9ICJtZW06MDpydzprcCIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfYnJlYWtwb2ludF9yd19tb2RpZmllciwKKwkJLmlkICAgID0gMjcsCiAJfSwKLQlbMjhdID0geworCXsKIAkJLm5hbWUgID0gIntpbnN0cnVjdGlvbnM6ayxjeWNsZXM6dXBwfSIsCiAJCS5jaGVjayA9IHRlc3RfX2dyb3VwMSwKKwkJLmlkICAgID0gMjgsCiAJfSwKLQlbMjldID0geworCXsKIAkJLm5hbWUgID0gIntmYXVsdHM6ayxjYWNoZS1yZWZlcmVuY2VzfTp1LGN5Y2xlczprIiwKIAkJLmNoZWNrID0gdGVzdF9fZ3JvdXAyLAorCQkuaWQgICAgPSAyOSwKIAl9LAotCVszMF0gPSB7CisJewogCQkubmFtZSAgPSAiZ3JvdXAxe3N5c2NhbGxzOnN5c19lbnRlcl9vcGVuOkgsY3ljbGVzOmtwcHB9LGdyb3VwMntjeWNsZXMsMTozfTpHLGluc3RydWN0aW9uczp1IiwKIAkJLmNoZWNrID0gdGVzdF9fZ3JvdXAzLAorCQkuaWQgICAgPSAzMCwKIAl9LAotCVszMV0gPSB7CisJewogCQkubmFtZSAgPSAie2N5Y2xlczp1LGluc3RydWN0aW9uczprcH06cCIsCiAJCS5jaGVjayA9IHRlc3RfX2dyb3VwNCwKKwkJLmlkICAgID0gMzEsCiAJfSwKLQlbMzJdID0geworCXsKIAkJLm5hbWUgID0gIntjeWNsZXMsaW5zdHJ1Y3Rpb25zfTpHLHtjeWNsZXM6RyxpbnN0cnVjdGlvbnM6R30sY3ljbGVzIiwKIAkJLmNoZWNrID0gdGVzdF9fZ3JvdXA1LAorCQkuaWQgICAgPSAzMiwKIAl9LAotCVszM10gPSB7CisJewogCQkubmFtZSAgPSAiKjoqIiwKIAkJLmNoZWNrID0gdGVzdF9fYWxsX3RyYWNlcG9pbnRzLAorCQkuaWQgICAgPSAzMywKIAl9LAotCVszNF0gPSB7CisJewogCQkubmFtZSAgPSAie2N5Y2xlcyxjYWNoZS1taXNzZXM6R306SCIsCiAJCS5jaGVjayA9IHRlc3RfX2dyb3VwX2doMSwKKwkJLmlkICAgID0gMzQsCiAJfSwKLQlbMzVdID0geworCXsKIAkJLm5hbWUgID0gIntjeWNsZXMsY2FjaGUtbWlzc2VzOkh9OkciLAogCQkuY2hlY2sgPSB0ZXN0X19ncm91cF9naDIsCisJCS5pZCAgICA9IDM1LAogCX0sCi0JWzM2XSA9IHsKKwl7CiAJCS5uYW1lICA9ICJ7Y3ljbGVzOkcsY2FjaGUtbWlzc2VzOkh9OnUiLAogCQkuY2hlY2sgPSB0ZXN0X19ncm91cF9naDMsCisJCS5pZCAgICA9IDM2LAogCX0sCi0JWzM3XSA9IHsKKwl7CiAJCS5uYW1lICA9ICJ7Y3ljbGVzOkcsY2FjaGUtbWlzc2VzOkh9OnVHIiwKIAkJLmNoZWNrID0gdGVzdF9fZ3JvdXBfZ2g0LAorCQkuaWQgICAgPSAzNywKIAl9LAotCVszOF0gPSB7CisJewogCQkubmFtZSAgPSAie2N5Y2xlcyxjYWNoZS1taXNzZXMsYnJhbmNoLW1pc3Nlc306UyIsCiAJCS5jaGVjayA9IHRlc3RfX2xlYWRlcl9zYW1wbGUxLAorCQkuaWQgICAgPSAzOCwKIAl9LAotCVszOV0gPSB7CisJewogCQkubmFtZSAgPSAie2luc3RydWN0aW9ucyxicmFuY2gtbWlzc2VzfTpTdSIsCiAJCS5jaGVjayA9IHRlc3RfX2xlYWRlcl9zYW1wbGUyLAorCQkuaWQgICAgPSAzOSwKIAl9LAotCVs0MF0gPSB7CisJewogCQkubmFtZSAgPSAiaW5zdHJ1Y3Rpb25zOnVEcCIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfcGlubmVkX21vZGlmaWVyLAorCQkuaWQgICAgPSA0MCwKIAl9LAotCVs0MV0gPSB7CisJewogCQkubmFtZSAgPSAie2N5Y2xlcyxjYWNoZS1taXNzZXMsYnJhbmNoLW1pc3Nlc306RCIsCiAJCS5jaGVjayA9IHRlc3RfX3Bpbm5lZF9ncm91cCwKKwkJLmlkICAgID0gNDEsCiAJfSwKKyNpZiBkZWZpbmVkKF9fczM5MHhfXykKKwl7CisJCS5uYW1lICA9ICJrdm0tczM5MDprdm1fczM5MF9jcmVhdGVfdm0iLAorCQkuY2hlY2sgPSB0ZXN0X19jaGVja2V2ZW50X3RyYWNlcG9pbnQsCisJCS5pZCAgICA9IDEwMCwKKwl9LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGV2bGlzdF90ZXN0IHRlc3RfX2V2ZW50c19wbXVbXSA9IHsKLQlbMF0gPSB7CisJewogCQkubmFtZSAgPSAiY3B1L2NvbmZpZz0xMCxjb25maWcxLGNvbmZpZzI9MyxwZXJpb2Q9MTAwMC91IiwKIAkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9wbXUsCisJCS5pZCAgICA9IDAsCiAJfSwKLQlbMV0gPSB7CisJewogCQkubmFtZSAgPSAiY3B1L2NvbmZpZz0xLG5hbWU9a3JhdmEvdSxjcHUvY29uZmlnPTIvdSIsCiAJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfcG11X25hbWUsCisJCS5pZCAgICA9IDEsCiAJfSwKIH07CiAKQEAgLTE0MDIsNyArMTQ1NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CiAJCXN0cnVjdCBldmxpc3RfdGVzdCAqZSA9ICZldmVudHNbaV07CiAKLQkJcHJfZGVidWcoInJ1bm5pbmcgdGVzdCAlZCAnJXMnXG4iLCBpLCBlLT5uYW1lKTsKKwkJcHJfZGVidWcoInJ1bm5pbmcgdGVzdCAlZCAnJXMnXG4iLCBlLT5pZCwgZS0+bmFtZSk7CiAJCXJldDEgPSB0ZXN0X2V2ZW50KGUpOwogCQlpZiAocmV0MSkKIAkJCXJldDIgPSByZXQxOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9wYXJzZS1uby1zYW1wbGUtaWQtYWxsLmMgYi90b29scy9wZXJmL3Rlc3RzL3BhcnNlLW5vLXNhbXBsZS1pZC1hbGwuYwppbmRleCBlMTE3YjZjLi45MDUwMTlmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL3BhcnNlLW5vLXNhbXBsZS1pZC1hbGwuYworKysgYi90b29scy9wZXJmL3Rlc3RzL3BhcnNlLW5vLXNhbXBsZS1pZC1hbGwuYwpAQCAtMSw0ICsxLDQgQEAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiAjaW5jbHVkZSAidGVzdHMuaCIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvcGVyZi10aW1lLXRvLXRzYy5jIGIvdG9vbHMvcGVyZi90ZXN0cy9wZXJmLXRpbWUtdG8tdHNjLmMKaW5kZXggNDcxNDZkMy4uM2I3Y2Q0ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9wZXJmLXRpbWUtdG8tdHNjLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9wZXJmLXRpbWUtdG8tdHNjLmMKQEAgLTEsNyArMSw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAKICNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvcmRwbWMuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvcmRwbWMuYwppbmRleCA0NjY0OWMyLi5lNTkxNDNmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL3JkcG1jLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9yZHBtYy5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgInBlcmYuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInRlc3RzLmgiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMgYi90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMKaW5kZXggMDAxNGQzYy4uN2FlOGQxNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9zYW1wbGUtcGFyc2luZy5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvc2FtcGxlLXBhcnNpbmcuYwpAQCAtMSw1ICsxLDUgQEAKICNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImV2ZW50LmgiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL3Rlc3RzLmggYi90b29scy9wZXJmL3Rlc3RzL3Rlc3RzLmgKaW5kZXggYTI0Nzk1Yy4uZDc2YzBlMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy90ZXN0cy5oCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvdGVzdHMuaApAQCAtNDEsOCArNDEsMTIgQEAKIGludCB0ZXN0X19rZWVwX3RyYWNraW5nKHZvaWQpOwogaW50IHRlc3RfX3BhcnNlX25vX3NhbXBsZV9pZF9hbGwodm9pZCk7CiBpbnQgdGVzdF9fZHdhcmZfdW53aW5kKHZvaWQpOworaW50IHRlc3RfX2hpc3RzX2ZpbHRlcih2b2lkKTsKK2ludCB0ZXN0X19tbWFwX3RocmVhZF9sb29rdXAodm9pZCk7CitpbnQgdGVzdF9fdGhyZWFkX21nX3NoYXJlKHZvaWQpOworaW50IHRlc3RfX2hpc3RzX291dHB1dCh2b2lkKTsKIAotI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19hcm1fXykKICNpZmRlZiBIQVZFX0RXQVJGX1VOV0lORF9TVVBQT1JUCiBzdHJ1Y3QgdGhyZWFkOwogc3RydWN0IHBlcmZfc2FtcGxlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy90aHJlYWQtbWctc2hhcmUuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvdGhyZWFkLW1nLXNoYXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyZTBkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvdGhyZWFkLW1nLXNoYXJlLmMKQEAgLTAsMCArMSw5MCBAQAorI2luY2x1ZGUgInRlc3RzLmgiCisjaW5jbHVkZSAibWFjaGluZS5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgIm1hcC5oIgorCitpbnQgdGVzdF9fdGhyZWFkX21nX3NoYXJlKHZvaWQpCit7CisJc3RydWN0IG1hY2hpbmVzIG1hY2hpbmVzOworCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lOworCisJLyogdGhyZWFkIGdyb3VwICovCisJc3RydWN0IHRocmVhZCAqbGVhZGVyOworCXN0cnVjdCB0aHJlYWQgKnQxLCAqdDIsICp0MzsKKwlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWc7CisKKwkvKiBvdGhlciBwcm9jZXNzICovCisJc3RydWN0IHRocmVhZCAqb3RoZXIsICpvdGhlcl9sZWFkZXI7CisJc3RydWN0IG1hcF9ncm91cHMgKm90aGVyX21nOworCisJLyoKKwkgKiBUaGlzIHRlc3QgY3JlYXRlIDIgcHJvY2Vzc2VzIGFic3RyYWN0aW9ucyAoc3RydWN0IHRocmVhZCkKKwkgKiB3aXRoIHNldmVyYWwgdGhyZWFkcyBhbmQgY2hlY2tzIHRoZXkgcHJvcGVybHkgc2hhcmUgYW5kCisJICogbWFpbnRhaW4gbWFwIGdyb3VwcyBpbmZvIChzdHJ1Y3QgbWFwX2dyb3VwcykuCisJICoKKwkgKiB0aHJlYWQgZ3JvdXAgKHBpZDogMCwgdGlkczogMCwgMSwgMiwgMykKKwkgKiBvdGhlciAgZ3JvdXAgKHBpZDogNCwgdGlkczogNCwgNSkKKwkqLworCisJbWFjaGluZXNfX2luaXQoJm1hY2hpbmVzKTsKKwltYWNoaW5lID0gJm1hY2hpbmVzLmhvc3Q7CisKKwkvKiBjcmVhdGUgcHJvY2VzcyB3aXRoIDQgdGhyZWFkcyAqLworCWxlYWRlciA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIDAsIDApOworCXQxICAgICA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIDAsIDEpOworCXQyICAgICA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIDAsIDIpOworCXQzICAgICA9IG1hY2hpbmVfX2ZpbmRuZXdfdGhyZWFkKG1hY2hpbmUsIDAsIDMpOworCisJLyogYW5kIGNyZWF0ZSAxIHNlcGFyYXRlZCBwcm9jZXNzLCB3aXRob3V0IHRocmVhZCBsZWFkZXIgKi8KKwlvdGhlciAgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCA0LCA1KTsKKworCVRFU1RfQVNTRVJUX1ZBTCgiZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWRzIiwKKwkJCWxlYWRlciAmJiB0MSAmJiB0MiAmJiB0MyAmJiBvdGhlcik7CisKKwltZyA9IGxlYWRlci0+bWc7CisJVEVTVF9BU1NFUlRfVkFMKCJ3cm9uZyByZWZjbnQiLCBtZy0+cmVmY250ID09IDQpOworCisJLyogdGVzdCB0aGUgbWFwIGdyb3VwcyBwb2ludGVyIGlzIHNoYXJlZCAqLworCVRFU1RfQVNTRVJUX1ZBTCgibWFwIGdyb3VwcyBkb24ndCBtYXRjaCIsIG1nID09IHQxLT5tZyk7CisJVEVTVF9BU1NFUlRfVkFMKCJtYXAgZ3JvdXBzIGRvbid0IG1hdGNoIiwgbWcgPT0gdDItPm1nKTsKKwlURVNUX0FTU0VSVF9WQUwoIm1hcCBncm91cHMgZG9uJ3QgbWF0Y2giLCBtZyA9PSB0My0+bWcpOworCisJLyoKKwkgKiBWZXJpZnkgdGhlIG90aGVyIGxlYWRlciB3YXMgY3JlYXRlZCBieSBwcmV2aW91cyBjYWxsLgorCSAqIEl0IHNob3VsZCBoYXZlIHNoYXJlZCBtYXAgZ3JvdXBzIHdpdGggbm8gY2hhbmdlIGluCisJICogcmVmY250LgorCSAqLworCW90aGVyX2xlYWRlciA9IG1hY2hpbmVfX2ZpbmRfdGhyZWFkKG1hY2hpbmUsIDQsIDQpOworCVRFU1RfQVNTRVJUX1ZBTCgiZmFpbGVkIHRvIGZpbmQgb3RoZXIgbGVhZGVyIiwgb3RoZXJfbGVhZGVyKTsKKworCW90aGVyX21nID0gb3RoZXItPm1nOworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgcmVmY250Iiwgb3RoZXJfbWctPnJlZmNudCA9PSAyKTsKKworCVRFU1RfQVNTRVJUX1ZBTCgibWFwIGdyb3VwcyBkb24ndCBtYXRjaCIsIG90aGVyX21nID09IG90aGVyX2xlYWRlci0+bWcpOworCisJLyogcmVsZWFzZSB0aHJlYWQgZ3JvdXAgKi8KKwl0aHJlYWRfX2RlbGV0ZShsZWFkZXIpOworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgcmVmY250IiwgbWctPnJlZmNudCA9PSAzKTsKKworCXRocmVhZF9fZGVsZXRlKHQxKTsKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIHJlZmNudCIsIG1nLT5yZWZjbnQgPT0gMik7CisKKwl0aHJlYWRfX2RlbGV0ZSh0Mik7CisJVEVTVF9BU1NFUlRfVkFMKCJ3cm9uZyByZWZjbnQiLCBtZy0+cmVmY250ID09IDEpOworCisJdGhyZWFkX19kZWxldGUodDMpOworCisJLyogcmVsZWFzZSBvdGhlciBncm91cCAgKi8KKwl0aHJlYWRfX2RlbGV0ZShvdGhlcl9sZWFkZXIpOworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgcmVmY250Iiwgb3RoZXJfbWctPnJlZmNudCA9PSAxKTsKKworCXRocmVhZF9fZGVsZXRlKG90aGVyKTsKKworCS8qCisJICogQ2Fubm90IGNhbGwgbWFjaGluZV9fZGVsZXRlX3RocmVhZHMobWFjaGluZSkgbm93LAorCSAqIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSByZWxlYXNlZCBhbGwgdGhlIHRocmVhZHMuCisJICovCisKKwltYWNoaW5lc19fZXhpdCgmbWFjaGluZXMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9icm93c2VyLmggYi90b29scy9wZXJmL3VpL2Jyb3dzZXIuaAppbmRleCAxMThjY2EyLi4wM2Q0ZDYyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2Jyb3dzZXIuaAorKysgYi90b29scy9wZXJmL3VpL2Jyb3dzZXIuaApAQCAtMSw5ICsxLDcgQEAKICNpZm5kZWYgX1BFUkZfVUlfQlJPV1NFUl9IXwogI2RlZmluZSBfUEVSRl9VSV9CUk9XU0VSX0hfIDEKIAotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlICIuLi90eXBlcy5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgSEVfQ09MT1JTRVRfVE9QCQk1MAogI2RlZmluZSBIRV9DT0xPUlNFVF9NRURJVU0JNTEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYwppbmRleCA3ZWM4NzFhLi4xYzMzMWI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCkBAIC0yNiwxMyArMjYsMzYgQEAKIAlpbnQJCSAgICAgcHJpbnRfc2VxOwogCWJvb2wJCSAgICAgc2hvd19kc287CiAJZmxvYXQJCSAgICAgbWluX3BjbnQ7Ci0JdTY0CQkgICAgIG5yX3BjbnRfZW50cmllczsKKwl1NjQJCSAgICAgbnJfbm9uX2ZpbHRlcmVkX2VudHJpZXM7CisJdTY0CQkgICAgIG5yX2NhbGxjaGFpbl9yb3dzOwogfTsKIAogZXh0ZXJuIHZvaWQgaGlzdF9icm93c2VyX19pbml0X2hwcCh2b2lkKTsKIAogc3RhdGljIGludCBoaXN0c19fYnJvd3Nlcl90aXRsZShzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBjaGFyICpiZiwgc2l6ZV90IHNpemUsCiAJCQkJY29uc3QgY2hhciAqZXZfbmFtZSk7CitzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3VwZGF0ZV9ucl9lbnRyaWVzKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKmhiKTsKKworc3RhdGljIHN0cnVjdCByYl9ub2RlICpoaXN0c19fZmlsdGVyX2VudHJpZXMoc3RydWN0IHJiX25vZGUgKm5kLAorCQkJCQkgICAgIHN0cnVjdCBoaXN0cyAqaGlzdHMsCisJCQkJCSAgICAgZmxvYXQgbWluX3BjbnQpOworCitzdGF0aWMgYm9vbCBoaXN0X2Jyb3dzZXJfX2hhc19maWx0ZXIoc3RydWN0IGhpc3RfYnJvd3NlciAqaGIpCit7CisJcmV0dXJuIGhpc3RzX19oYXNfZmlsdGVyKGhiLT5oaXN0cykgfHwgaGItPm1pbl9wY250OworfQorCitzdGF0aWMgdTMyIGhpc3RfYnJvd3Nlcl9fbnJfZW50cmllcyhzdHJ1Y3QgaGlzdF9icm93c2VyICpoYikKK3sKKwl1MzIgbnJfZW50cmllczsKKworCWlmIChoaXN0X2Jyb3dzZXJfX2hhc19maWx0ZXIoaGIpKQorCQlucl9lbnRyaWVzID0gaGItPm5yX25vbl9maWx0ZXJlZF9lbnRyaWVzOworCWVsc2UKKwkJbnJfZW50cmllcyA9IGhiLT5oaXN0cy0+bnJfZW50cmllczsKKworCXJldHVybiBucl9lbnRyaWVzICsgaGItPm5yX2NhbGxjaGFpbl9yb3dzOworfQogCiBzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3JlZnJlc2hfZGltZW5zaW9ucyhzdHJ1Y3QgaGlzdF9icm93c2VyICpicm93c2VyKQogewpAQCAtNDMsNyArNjYsMTQgQEAKIAogc3RhdGljIHZvaWQgaGlzdF9icm93c2VyX19yZXNldChzdHJ1Y3QgaGlzdF9icm93c2VyICpicm93c2VyKQogewotCWJyb3dzZXItPmIubnJfZW50cmllcyA9IGJyb3dzZXItPmhpc3RzLT5ucl9lbnRyaWVzOworCS8qCisJICogVGhlIGhpc3RzX19yZW1vdmVfZW50cnlfZmlsdGVyKCkgYWxyZWFkeSBmb2xkcyBub24tZmlsdGVyZWQKKwkgKiBlbnRyaWVzIHNvIHdlIGNhbiBhc3N1bWUgaXQgaGFzIDAgY2FsbGNoYWluIHJvd3MuCisJICovCisJYnJvd3Nlci0+bnJfY2FsbGNoYWluX3Jvd3MgPSAwOworCisJaGlzdF9icm93c2VyX191cGRhdGVfbnJfZW50cmllcyhicm93c2VyKTsKKwlicm93c2VyLT5iLm5yX2VudHJpZXMgPSBoaXN0X2Jyb3dzZXJfX25yX2VudHJpZXMoYnJvd3Nlcik7CiAJaGlzdF9icm93c2VyX19yZWZyZXNoX2RpbWVuc2lvbnMoYnJvd3Nlcik7CiAJdWlfYnJvd3Nlcl9fcmVzZXRfaW5kZXgoJmJyb3dzZXItPmIpOwogfQpAQCAtMTk4LDE0ICsyMjgsMTYgQEAKIAkJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gYnJvd3Nlci0+aGVfc2VsZWN0aW9uOwogCiAJCWhpc3RfZW50cnlfX2luaXRfaGF2ZV9jaGlsZHJlbihoZSk7Ci0JCWJyb3dzZXItPmhpc3RzLT5ucl9lbnRyaWVzIC09IGhlLT5ucl9yb3dzOworCQlicm93c2VyLT5iLm5yX2VudHJpZXMgLT0gaGUtPm5yX3Jvd3M7CisJCWJyb3dzZXItPm5yX2NhbGxjaGFpbl9yb3dzIC09IGhlLT5ucl9yb3dzOwogCiAJCWlmIChoZS0+bXMudW5mb2xkZWQpCiAJCQloZS0+bnJfcm93cyA9IGNhbGxjaGFpbl9fY291bnRfcm93cygmaGUtPnNvcnRlZF9jaGFpbik7CiAJCWVsc2UKIAkJCWhlLT5ucl9yb3dzID0gMDsKLQkJYnJvd3Nlci0+aGlzdHMtPm5yX2VudHJpZXMgKz0gaGUtPm5yX3Jvd3M7Ci0JCWJyb3dzZXItPmIubnJfZW50cmllcyA9IGJyb3dzZXItPmhpc3RzLT5ucl9lbnRyaWVzOworCisJCWJyb3dzZXItPmIubnJfZW50cmllcyArPSBoZS0+bnJfcm93czsKKwkJYnJvd3Nlci0+bnJfY2FsbGNoYWluX3Jvd3MgKz0gaGUtPm5yX3Jvd3M7CiAKIAkJcmV0dXJuIHRydWU7CiAJfQpAQCAtMjgwLDIzICszMTIsMjcgQEAKIAkJaGUtPm5yX3Jvd3MgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBoaXN0c19fc2V0X2ZvbGRpbmcoc3RydWN0IGhpc3RzICpoaXN0cywgYm9vbCB1bmZvbGQpCitzdGF0aWMgdm9pZAorX19oaXN0X2Jyb3dzZXJfX3NldF9mb2xkaW5nKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKmJyb3dzZXIsIGJvb2wgdW5mb2xkKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKKwlzdHJ1Y3QgaGlzdHMgKmhpc3RzID0gYnJvd3Nlci0+aGlzdHM7CiAKLQloaXN0cy0+bnJfZW50cmllcyA9IDA7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJmhpc3RzLT5lbnRyaWVzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJmhpc3RzLT5lbnRyaWVzKTsKKwkgICAgIChuZCA9IGhpc3RzX19maWx0ZXJfZW50cmllcyhuZCwgaGlzdHMsIGJyb3dzZXItPm1pbl9wY250KSkgIT0gTlVMTDsKKwkgICAgIG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKIAkJaGlzdF9lbnRyeV9fc2V0X2ZvbGRpbmcoaGUsIHVuZm9sZCk7Ci0JCWhpc3RzLT5ucl9lbnRyaWVzICs9IDEgKyBoZS0+bnJfcm93czsKKwkJYnJvd3Nlci0+bnJfY2FsbGNoYWluX3Jvd3MgKz0gaGUtPm5yX3Jvd3M7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3NldF9mb2xkaW5nKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKmJyb3dzZXIsIGJvb2wgdW5mb2xkKQogewotCWhpc3RzX19zZXRfZm9sZGluZyhicm93c2VyLT5oaXN0cywgdW5mb2xkKTsKLQlicm93c2VyLT5iLm5yX2VudHJpZXMgPSBicm93c2VyLT5oaXN0cy0+bnJfZW50cmllczsKKwlicm93c2VyLT5ucl9jYWxsY2hhaW5fcm93cyA9IDA7CisJX19oaXN0X2Jyb3dzZXJfX3NldF9mb2xkaW5nKGJyb3dzZXIsIHVuZm9sZCk7CisKKwlicm93c2VyLT5iLm5yX2VudHJpZXMgPSBoaXN0X2Jyb3dzZXJfX25yX2VudHJpZXMoYnJvd3Nlcik7CiAJLyogR28gdG8gdGhlIHN0YXJ0LCB3ZSBtYXkgYmUgd2F5IGFmdGVyIHZhbGlkIGVudHJpZXMgYWZ0ZXIgYSBjb2xsYXBzZSAqLwogCXVpX2Jyb3dzZXJfX3Jlc2V0X2luZGV4KCZicm93c2VyLT5iKTsKIH0KQEAgLTMxMCw4ICszNDYsNiBAQAogCQkiT3IgcmVkdWNlIHRoZSBzYW1wbGluZyBmcmVxdWVuY3kuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGhpc3RfYnJvd3Nlcl9fdXBkYXRlX3BjbnRfZW50cmllcyhzdHJ1Y3QgaGlzdF9icm93c2VyICpoYik7Ci0KIHN0YXRpYyBpbnQgaGlzdF9icm93c2VyX19ydW4oc3RydWN0IGhpc3RfYnJvd3NlciAqYnJvd3NlciwgY29uc3QgY2hhciAqZXZfbmFtZSwKIAkJCSAgICAgc3RydWN0IGhpc3RfYnJvd3Nlcl90aW1lciAqaGJ0KQogewpAQCAtMzIwLDkgKzM1NCw3IEBACiAJaW50IGRlbGF5X3NlY3MgPSBoYnQgPyBoYnQtPnJlZnJlc2ggOiAwOwogCiAJYnJvd3Nlci0+Yi5lbnRyaWVzID0gJmJyb3dzZXItPmhpc3RzLT5lbnRyaWVzOwotCWJyb3dzZXItPmIubnJfZW50cmllcyA9IGJyb3dzZXItPmhpc3RzLT5ucl9lbnRyaWVzOwotCWlmIChicm93c2VyLT5taW5fcGNudCkKLQkJYnJvd3Nlci0+Yi5ucl9lbnRyaWVzID0gYnJvd3Nlci0+bnJfcGNudF9lbnRyaWVzOworCWJyb3dzZXItPmIubnJfZW50cmllcyA9IGhpc3RfYnJvd3Nlcl9fbnJfZW50cmllcyhicm93c2VyKTsKIAogCWhpc3RfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKGJyb3dzZXIpOwogCWhpc3RzX19icm93c2VyX3RpdGxlKGJyb3dzZXItPmhpc3RzLCB0aXRsZSwgc2l6ZW9mKHRpdGxlKSwgZXZfbmFtZSk7CkBAIC0zMzksMTMgKzM3MSwxMCBAQAogCQkJdTY0IG5yX2VudHJpZXM7CiAJCQloYnQtPnRpbWVyKGhidC0+YXJnKTsKIAotCQkJaWYgKGJyb3dzZXItPm1pbl9wY250KSB7Ci0JCQkJaGlzdF9icm93c2VyX191cGRhdGVfcGNudF9lbnRyaWVzKGJyb3dzZXIpOwotCQkJCW5yX2VudHJpZXMgPSBicm93c2VyLT5ucl9wY250X2VudHJpZXM7Ci0JCQl9IGVsc2UgewotCQkJCW5yX2VudHJpZXMgPSBicm93c2VyLT5oaXN0cy0+bnJfZW50cmllczsKLQkJCX0KKwkJCWlmIChoaXN0X2Jyb3dzZXJfX2hhc19maWx0ZXIoYnJvd3NlcikpCisJCQkJaGlzdF9icm93c2VyX191cGRhdGVfbnJfZW50cmllcyhicm93c2VyKTsKIAorCQkJbnJfZW50cmllcyA9IGhpc3RfYnJvd3Nlcl9fbnJfZW50cmllcyhicm93c2VyKTsKIAkJCXVpX2Jyb3dzZXJfX3VwZGF0ZV9ucl9lbnRyaWVzKCZicm93c2VyLT5iLCBucl9lbnRyaWVzKTsKIAogCQkJaWYgKGJyb3dzZXItPmhpc3RzLT5zdGF0cy5ucl9sb3N0X3dhcm5lZCAhPQpAQCAtNTg3LDM1ICs2MTYsNiBAQAogCWJvb2wgY3VycmVudF9lbnRyeTsKIH07CiAKLXN0YXRpYyBpbnQgX19ocHBfX292ZXJoZWFkX2NhbGxiYWNrKHN0cnVjdCBwZXJmX2hwcCAqaHBwLCBib29sIGZyb250KQotewotCXN0cnVjdCBocHBfYXJnICphcmcgPSBocHAtPnB0cjsKLQotCWlmIChhcmctPmN1cnJlbnRfZW50cnkgJiYgYXJnLT5iLT5uYXZrZXlwcmVzc2VkKQotCQl1aV9icm93c2VyX19zZXRfY29sb3IoYXJnLT5iLCBIRV9DT0xPUlNFVF9TRUxFQ1RFRCk7Ci0JZWxzZQotCQl1aV9icm93c2VyX19zZXRfY29sb3IoYXJnLT5iLCBIRV9DT0xPUlNFVF9OT1JNQUwpOwotCi0JaWYgKGZyb250KSB7Ci0JCWlmICghc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKLQkJCXJldHVybiAwOwotCi0JCXNsc21nX3ByaW50ZigiJWMgIiwgYXJnLT5mb2xkZWRfc2lnbik7Ci0JCXJldHVybiAyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faHBwX19jb2xvcl9jYWxsYmFjayhzdHJ1Y3QgcGVyZl9ocHAgKmhwcCwgYm9vbCBmcm9udCBfX21heWJlX3VudXNlZCkKLXsKLQlzdHJ1Y3QgaHBwX2FyZyAqYXJnID0gaHBwLT5wdHI7Ci0KLQlpZiAoIWFyZy0+Y3VycmVudF9lbnRyeSB8fCAhYXJnLT5iLT5uYXZrZXlwcmVzc2VkKQotCQl1aV9icm93c2VyX19zZXRfY29sb3IoYXJnLT5iLCBIRV9DT0xPUlNFVF9OT1JNQUwpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9faHBwX19zbHNtZ19jb2xvcl9wcmludGYoc3RydWN0IHBlcmZfaHBwICpocHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXN0cnVjdCBocHBfYXJnICphcmcgPSBocHAtPnB0cjsKQEAgLTYzNiw3ICs2MzYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgX19IUFBfQ09MT1JfUEVSQ0VOVF9GTihfdHlwZSwgX2ZpZWxkLCBfY2IpCQkJXAorI2RlZmluZSBfX0hQUF9DT0xPUl9QRVJDRU5UX0ZOKF90eXBlLCBfZmllbGQpCQkJCVwKIHN0YXRpYyB1NjQgX19ocHBfZ2V0XyMjX2ZpZWxkKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkJCQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiBoZS0+c3RhdC5fZmllbGQ7CQkJCQkJXApAQCAtNjQ3LDIyICs2NDcsMjAgQEAKIAkJCQlzdHJ1Y3QgcGVyZl9ocHAgKmhwcCwJCQlcCiAJCQkJc3RydWN0IGhpc3RfZW50cnkgKmhlKQkJCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIF9faHBwX19mbXQoaHBwLCBoZSwgX19ocHBfZ2V0XyMjX2ZpZWxkLCBfY2IsICIgJTYuMmYlJSIsCVwKKwlyZXR1cm4gX19ocHBfX2ZtdChocHAsIGhlLCBfX2hwcF9nZXRfIyNfZmllbGQsICIgJTYuMmYlJSIsCVwKIAkJCSAgX19ocHBfX3Nsc21nX2NvbG9yX3ByaW50ZiwgdHJ1ZSk7CQlcCiB9CiAKLV9fSFBQX0NPTE9SX1BFUkNFTlRfRk4ob3ZlcmhlYWQsIHBlcmlvZCwgX19ocHBfX292ZXJoZWFkX2NhbGxiYWNrKQotX19IUFBfQ09MT1JfUEVSQ0VOVF9GTihvdmVyaGVhZF9zeXMsIHBlcmlvZF9zeXMsIF9faHBwX19jb2xvcl9jYWxsYmFjaykKLV9fSFBQX0NPTE9SX1BFUkNFTlRfRk4ob3ZlcmhlYWRfdXMsIHBlcmlvZF91cywgX19ocHBfX2NvbG9yX2NhbGxiYWNrKQotX19IUFBfQ09MT1JfUEVSQ0VOVF9GTihvdmVyaGVhZF9ndWVzdF9zeXMsIHBlcmlvZF9ndWVzdF9zeXMsIF9faHBwX19jb2xvcl9jYWxsYmFjaykKLV9fSFBQX0NPTE9SX1BFUkNFTlRfRk4ob3ZlcmhlYWRfZ3Vlc3RfdXMsIHBlcmlvZF9ndWVzdF91cywgX19ocHBfX2NvbG9yX2NhbGxiYWNrKQorX19IUFBfQ09MT1JfUEVSQ0VOVF9GTihvdmVyaGVhZCwgcGVyaW9kKQorX19IUFBfQ09MT1JfUEVSQ0VOVF9GTihvdmVyaGVhZF9zeXMsIHBlcmlvZF9zeXMpCitfX0hQUF9DT0xPUl9QRVJDRU5UX0ZOKG92ZXJoZWFkX3VzLCBwZXJpb2RfdXMpCitfX0hQUF9DT0xPUl9QRVJDRU5UX0ZOKG92ZXJoZWFkX2d1ZXN0X3N5cywgcGVyaW9kX2d1ZXN0X3N5cykKK19fSFBQX0NPTE9SX1BFUkNFTlRfRk4ob3ZlcmhlYWRfZ3Vlc3RfdXMsIHBlcmlvZF9ndWVzdF91cykKIAogI3VuZGVmIF9fSFBQX0NPTE9SX1BFUkNFTlRfRk4KIAogdm9pZCBoaXN0X2Jyb3dzZXJfX2luaXRfaHBwKHZvaWQpCiB7Ci0JcGVyZl9ocHBfX2luaXQoKTsKLQogCXBlcmZfaHBwX19mb3JtYXRbUEVSRl9IUFBfX09WRVJIRUFEXS5jb2xvciA9CiAJCQkJaGlzdF9icm93c2VyX19ocHBfY29sb3Jfb3ZlcmhlYWQ7CiAJcGVyZl9ocHBfX2Zvcm1hdFtQRVJGX0hQUF9fT1ZFUkhFQURfU1lTXS5jb2xvciA9CkBAIC03MDAsNyArNjk4LDcgQEAKIAogCWlmIChyb3dfb2Zmc2V0ID09IDApIHsKIAkJc3RydWN0IGhwcF9hcmcgYXJnID0gewotCQkJLmIgCQk9ICZicm93c2VyLT5iLAorCQkJLmIJCT0gJmJyb3dzZXItPmIsCiAJCQkuZm9sZGVkX3NpZ24JPSBmb2xkZWRfc2lnbiwKIAkJCS5jdXJyZW50X2VudHJ5CT0gY3VycmVudF9lbnRyeSwKIAkJfTsKQEAgLTcxMywxMSArNzExLDI3IEBACiAJCXVpX2Jyb3dzZXJfX2dvdG9yYygmYnJvd3Nlci0+Yiwgcm93LCAwKTsKIAogCQlwZXJmX2hwcF9fZm9yX2VhY2hfZm9ybWF0KGZtdCkgewotCQkJaWYgKCFmaXJzdCkgeworCQkJaWYgKHBlcmZfaHBwX19zaG91bGRfc2tpcChmbXQpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoY3VycmVudF9lbnRyeSAmJiBicm93c2VyLT5iLm5hdmtleXByZXNzZWQpIHsKKwkJCQl1aV9icm93c2VyX19zZXRfY29sb3IoJmJyb3dzZXItPmIsCisJCQkJCQkgICAgICBIRV9DT0xPUlNFVF9TRUxFQ1RFRCk7CisJCQl9IGVsc2UgeworCQkJCXVpX2Jyb3dzZXJfX3NldF9jb2xvcigmYnJvd3Nlci0+YiwKKwkJCQkJCSAgICAgIEhFX0NPTE9SU0VUX05PUk1BTCk7CisJCQl9CisKKwkJCWlmIChmaXJzdCkgeworCQkJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CisJCQkJCXNsc21nX3ByaW50ZigiJWMgIiwgZm9sZGVkX3NpZ24pOworCQkJCQl3aWR0aCAtPSAyOworCQkJCX0KKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfSBlbHNlIHsKIAkJCQlzbHNtZ19wcmludGYoIiAgIik7CiAJCQkJd2lkdGggLT0gMjsKIAkJCX0KLQkJCWZpcnN0ID0gZmFsc2U7CiAKIAkJCWlmIChmbXQtPmNvbG9yKSB7CiAJCQkJd2lkdGggLT0gZm10LT5jb2xvcihmbXQsICZocHAsIGVudHJ5KTsKQEAgLTczMSw4ICs3NDUsOCBAQAogCQlpZiAoIWJyb3dzZXItPmIubmF2a2V5cHJlc3NlZCkKIAkJCXdpZHRoICs9IDE7CiAKLQkJaGlzdF9lbnRyeV9fc29ydF9zbnByaW50ZihlbnRyeSwgcywgc2l6ZW9mKHMpLCBicm93c2VyLT5oaXN0cyk7Ci0JCXNsc21nX3dyaXRlX25zdHJpbmcocywgd2lkdGgpOworCQlzbHNtZ193cml0ZV9uc3RyaW5nKCIiLCB3aWR0aCk7CisKIAkJKytyb3c7CiAJCSsrcHJpbnRlZDsKIAl9IGVsc2UKQEAgLTc2OSwxMiArNzgzLDE1IEBACiAKIAlmb3IgKG5kID0gYnJvd3Nlci0+dG9wOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0JCWZsb2F0IHBlcmNlbnQgPSBoLT5zdGF0LnBlcmlvZCAqIDEwMC4wIC8KLQkJCQkJaGItPmhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2Q7CisJCXU2NCB0b3RhbCA9IGhpc3RzX190b3RhbF9wZXJpb2QoaC0+aGlzdHMpOworCQlmbG9hdCBwZXJjZW50ID0gMC4wOwogCiAJCWlmIChoLT5maWx0ZXJlZCkKIAkJCWNvbnRpbnVlOwogCisJCWlmICh0b3RhbCkKKwkJCXBlcmNlbnQgPSBoLT5zdGF0LnBlcmlvZCAqIDEwMC4wIC8gdG90YWw7CisKIAkJaWYgKHBlcmNlbnQgPCBoYi0+bWluX3BjbnQpCiAJCQljb250aW51ZTsKIApAQCAtNzkyLDEzICs4MDksMTMgQEAKIHsKIAl3aGlsZSAobmQgIT0gTlVMTCkgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0JCWZsb2F0IHBlcmNlbnQgPSBoLT5zdGF0LnBlcmlvZCAqIDEwMC4wIC8KLQkJCQkJaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZDsKKwkJdTY0IHRvdGFsID0gaGlzdHNfX3RvdGFsX3BlcmlvZChoaXN0cyk7CisJCWZsb2F0IHBlcmNlbnQgPSAwLjA7CiAKLQkJaWYgKHBlcmNlbnQgPCBtaW5fcGNudCkKLQkJCXJldHVybiBOVUxMOworCQlpZiAodG90YWwpCisJCQlwZXJjZW50ID0gaC0+c3RhdC5wZXJpb2QgKiAxMDAuMCAvIHRvdGFsOwogCi0JCWlmICghaC0+ZmlsdGVyZWQpCisJCWlmICghaC0+ZmlsdGVyZWQgJiYgcGVyY2VudCA+PSBtaW5fcGNudCkKIAkJCXJldHVybiBuZDsKIAogCQluZCA9IHJiX25leHQobmQpOwpAQCAtODEzLDggKzgzMCwxMSBAQAogewogCXdoaWxlIChuZCAhPSBOVUxMKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICpoID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJZmxvYXQgcGVyY2VudCA9IGgtPnN0YXQucGVyaW9kICogMTAwLjAgLwotCQkJCQloaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOworCQl1NjQgdG90YWwgPSBoaXN0c19fdG90YWxfcGVyaW9kKGhpc3RzKTsKKwkJZmxvYXQgcGVyY2VudCA9IDAuMDsKKworCQlpZiAodG90YWwpCisJCQlwZXJjZW50ID0gaC0+c3RhdC5wZXJpb2QgKiAxMDAuMCAvIHRvdGFsOwogCiAJCWlmICghaC0+ZmlsdGVyZWQgJiYgcGVyY2VudCA+PSBtaW5fcGNudCkKIAkJCXJldHVybiBuZDsKQEAgLTEwNjYsMjcgKzEwODYsMzUgQEAKIAkJCQkgICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlLCBGSUxFICpmcCkKIHsKIAljaGFyIHNbODE5Ml07Ci0JZG91YmxlIHBlcmNlbnQ7CiAJaW50IHByaW50ZWQgPSAwOwogCWNoYXIgZm9sZGVkX3NpZ24gPSAnICc7CisJc3RydWN0IHBlcmZfaHBwIGhwcCA9IHsKKwkJLmJ1ZiA9IHMsCisJCS5zaXplID0gc2l6ZW9mKHMpLAorCX07CisJc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10OworCWJvb2wgZmlyc3QgPSB0cnVlOworCWludCByZXQ7CiAKIAlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKIAkJZm9sZGVkX3NpZ24gPSBoaXN0X2VudHJ5X19mb2xkZWQoaGUpOwogCi0JaGlzdF9lbnRyeV9fc29ydF9zbnByaW50ZihoZSwgcywgc2l6ZW9mKHMpLCBicm93c2VyLT5oaXN0cyk7Ci0JcGVyY2VudCA9IChoZS0+c3RhdC5wZXJpb2QgKiAxMDAuMCkgLyBicm93c2VyLT5oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOwotCiAJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCiAJCXByaW50ZWQgKz0gZnByaW50ZihmcCwgIiVjICIsIGZvbGRlZF9zaWduKTsKIAotCXByaW50ZWQgKz0gZnByaW50ZihmcCwgIiAlNS4yZiUlIiwgcGVyY2VudCk7CisJcGVyZl9ocHBfX2Zvcl9lYWNoX2Zvcm1hdChmbXQpIHsKKwkJaWYgKHBlcmZfaHBwX19zaG91bGRfc2tpcChmbXQpKQorCQkJY29udGludWU7CiAKLQlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzKQotCQlwcmludGVkICs9IGZwcmludGYoZnAsICIgJTExdSIsIGhlLT5zdGF0Lm5yX2V2ZW50cyk7CisJCWlmICghZmlyc3QpIHsKKwkJCXJldCA9IHNjbnByaW50ZihocHAuYnVmLCBocHAuc2l6ZSwgIiAgIik7CisJCQlhZHZhbmNlX2hwcCgmaHBwLCByZXQpOworCQl9IGVsc2UKKwkJCWZpcnN0ID0gZmFsc2U7CiAKLQlpZiAoc3ltYm9sX2NvbmYuc2hvd190b3RhbF9wZXJpb2QpCi0JCXByaW50ZWQgKz0gZnByaW50ZihmcCwgIiAlMTIiIFBSSXU2NCwgaGUtPnN0YXQucGVyaW9kKTsKLQorCQlyZXQgPSBmbXQtPmVudHJ5KGZtdCwgJmhwcCwgaGUpOworCQlhZHZhbmNlX2hwcCgmaHBwLCByZXQpOworCX0KIAlwcmludGVkICs9IGZwcmludGYoZnAsICIlc1xuIiwgcnRyaW0ocykpOwogCiAJaWYgKGZvbGRlZF9zaWduID09ICctJykKQEAgLTExODksNiArMTIxNywxMSBAQAogCWNoYXIgYnVmWzUxMl07CiAJc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihidWYpOwogCisJaWYgKHN5bWJvbF9jb25mLmZpbHRlcl9yZWxhdGl2ZSkgeworCQlucl9zYW1wbGVzID0gaGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzOworCQlucl9ldmVudHMgPSBoaXN0cy0+c3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZDsKKwl9CisKIAlpZiAocGVyZl9ldnNlbF9faXNfZ3JvdXBfZXZlbnQoZXZzZWwpKSB7CiAJCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CiAKQEAgLTExOTYsOCArMTIyOSwxMyBAQAogCQlldl9uYW1lID0gYnVmOwogCiAJCWZvcl9lYWNoX2dyb3VwX21lbWJlcihwb3MsIGV2c2VsKSB7Ci0JCQlucl9zYW1wbGVzICs9IHBvcy0+aGlzdHMuc3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV07Ci0JCQlucl9ldmVudHMgKz0gcG9zLT5oaXN0cy5zdGF0cy50b3RhbF9wZXJpb2Q7CisJCQlpZiAoc3ltYm9sX2NvbmYuZmlsdGVyX3JlbGF0aXZlKSB7CisJCQkJbnJfc2FtcGxlcyArPSBwb3MtPmhpc3RzLnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzOworCQkJCW5yX2V2ZW50cyArPSBwb3MtPmhpc3RzLnN0YXRzLnRvdGFsX25vbl9maWx0ZXJlZF9wZXJpb2Q7CisJCQl9IGVsc2UgeworCQkJCW5yX3NhbXBsZXMgKz0gcG9zLT5oaXN0cy5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXTsKKwkJCQlucl9ldmVudHMgKz0gcG9zLT5oaXN0cy5zdGF0cy50b3RhbF9wZXJpb2Q7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTEzMjQsMTggKzEzNjIsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3VwZGF0ZV9wY250X2VudHJpZXMoc3RydWN0IGhpc3RfYnJvd3NlciAqaGIpCitzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3VwZGF0ZV9ucl9lbnRyaWVzKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKmhiKQogewogCXU2NCBucl9lbnRyaWVzID0gMDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQgPSByYl9maXJzdCgmaGItPmhpc3RzLT5lbnRyaWVzKTsKIAotCXdoaWxlIChuZCkgewotCQlucl9lbnRyaWVzKys7Ci0JCW5kID0gaGlzdHNfX2ZpbHRlcl9lbnRyaWVzKHJiX25leHQobmQpLCBoYi0+aGlzdHMsCi0JCQkJCSAgIGhiLT5taW5fcGNudCk7CisJaWYgKGhiLT5taW5fcGNudCA9PSAwKSB7CisJCWhiLT5ucl9ub25fZmlsdGVyZWRfZW50cmllcyA9IGhiLT5oaXN0cy0+bnJfbm9uX2ZpbHRlcmVkX2VudHJpZXM7CisJCXJldHVybjsKIAl9CiAKLQloYi0+bnJfcGNudF9lbnRyaWVzID0gbnJfZW50cmllczsKKwl3aGlsZSAoKG5kID0gaGlzdHNfX2ZpbHRlcl9lbnRyaWVzKG5kLCBoYi0+aGlzdHMsCisJCQkJCSAgIGhiLT5taW5fcGNudCkpICE9IE5VTEwpIHsKKwkJbnJfZW50cmllcysrOworCQluZCA9IHJiX25leHQobmQpOworCX0KKworCWhiLT5ucl9ub25fZmlsdGVyZWRfZW50cmllcyA9IG5yX2VudHJpZXM7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9ldnNlbF9faGlzdHNfYnJvd3NlKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IG5yX2V2ZW50cywKQEAgLTEzNzAsNiArMTQxMyw3IEBACiAJIkMgICAgICAgICAgICAgQ29sbGFwc2UgYWxsIGNhbGxjaGFpbnNcbiIJCQlcCiAJImQgICAgICAgICAgICAgWm9vbSBpbnRvIGN1cnJlbnQgRFNPXG4iCQkJCVwKIAkiRSAgICAgICAgICAgICBFeHBhbmQgYWxsIGNhbGxjaGFpbnNcbiIJCQkJXAorCSJGICAgICAgICAgICAgIFRvZ2dsZSBwZXJjZW50YWdlIG9mIGZpbHRlcmVkIGVudHJpZXNcbiIJCVwKIAogCS8qIGhlbHAgbWVzc2FnZXMgYXJlIHNvcnRlZCBieSBsZXhpY2FsIG9yZGVyIG9mIHRoZSBob3RrZXkgKi8KIAljb25zdCBjaGFyIHJlcG9ydF9oZWxwW10gPSBISVNUX0JST1dTRVJfSEVMUF9DT01NT04KQEAgLTEzOTEsNyArMTQzNSw3IEBACiAKIAlpZiAobWluX3BjbnQpIHsKIAkJYnJvd3Nlci0+bWluX3BjbnQgPSBtaW5fcGNudDsKLQkJaGlzdF9icm93c2VyX191cGRhdGVfcGNudF9lbnRyaWVzKGJyb3dzZXIpOworCQloaXN0X2Jyb3dzZXJfX3VwZGF0ZV9ucl9lbnRyaWVzKGJyb3dzZXIpOwogCX0KIAogCWZzdGFjayA9IHBzdGFja19fbmV3KDIpOwpAQCAtMTQ3NSw2ICsxNTE5LDkgQEAKIAkJCWlmIChlbnYtPmFyY2gpCiAJCQkJdHVpX19oZWFkZXJfd2luZG93KGVudik7CiAJCQljb250aW51ZTsKKwkJY2FzZSAnRic6CisJCQlzeW1ib2xfY29uZi5maWx0ZXJfcmVsYXRpdmUgXj0gMTsKKwkJCWNvbnRpbnVlOwogCQljYXNlIEtfRjE6CiAJCWNhc2UgJ2gnOgogCQljYXNlICc/JzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCmluZGV4IGUzOTVlZjkuLjlkOTA2ODMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYwpAQCAtNDMsNyArNDMsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9ocHAgKmhwcCwJCQlcCiAJCQkJICAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkJCQlcCiB7CQkJCQkJCQkJCVwKLQlyZXR1cm4gX19ocHBfX2ZtdChocHAsIGhlLCBoZV9nZXRfIyNfZmllbGQsIE5VTEwsICIgJTYuMmYlJSIsCQlcCisJcmV0dXJuIF9faHBwX19mbXQoaHBwLCBoZSwgaGVfZ2V0XyMjX2ZpZWxkLCAiICU2LjJmJSUiLAkJCVwKIAkJCSAgX19wZXJjZW50X2NvbG9yX3NucHJpbnRmLCB0cnVlKTsJCQlcCiB9CiAKQEAgLTU4LDggKzU4LDYgQEAKIAogdm9pZCBwZXJmX2d0a19faW5pdF9ocHAodm9pZCkKIHsKLQlwZXJmX2hwcF9faW5pdCgpOwotCiAJcGVyZl9ocHBfX2Zvcm1hdFtQRVJGX0hQUF9fT1ZFUkhFQURdLmNvbG9yID0KIAkJCQlwZXJmX2d0a19faHBwX2NvbG9yX292ZXJoZWFkOwogCXBlcmZfaHBwX19mb3JtYXRbUEVSRl9IUFBfX09WRVJIRUFEX1NZU10uY29sb3IgPQpAQCAtMTUzLDcgKzE1MSw2IEBACiAJc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10OwogCUdUeXBlIGNvbF90eXBlc1tNQVhfQ09MVU1OU107CiAJR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsKLQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7CiAJR3RrVHJlZVN0b3JlICpzdG9yZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAJR3RrV2lkZ2V0ICp2aWV3OwpAQCAtMTcyLDE2ICsxNjksNiBAQAogCXBlcmZfaHBwX19mb3JfZWFjaF9mb3JtYXQoZm10KQogCQljb2xfdHlwZXNbbnJfY29scysrXSA9IEdfVFlQRV9TVFJJTkc7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7Ci0JCWlmIChzZS0+ZWxpZGUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2UgPT0gJnNvcnRfc3ltKQotCQkJc3ltX2NvbCA9IG5yX2NvbHM7Ci0KLQkJY29sX3R5cGVzW25yX2NvbHMrK10gPSBHX1RZUEVfU1RSSU5HOwotCX0KLQogCXN0b3JlID0gZ3RrX3RyZWVfc3RvcmVfbmV3dihucl9jb2xzLCBjb2xfdHlwZXMpOwogCiAJdmlldyA9IGd0a190cmVlX3ZpZXdfbmV3KCk7CkBAIC0xOTEsNiArMTc4LDkgQEAKIAljb2xfaWR4ID0gMDsKIAogCXBlcmZfaHBwX19mb3JfZWFjaF9mb3JtYXQoZm10KSB7CisJCWlmIChwZXJmX2hwcF9fc2hvdWxkX3NraXAoZm10KSkKKwkJCWNvbnRpbnVlOworCiAJCWZtdC0+aGVhZGVyKGZtdCwgJmhwcCwgaGlzdHNfdG9fZXZzZWwoaGlzdHMpKTsKIAogCQlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVcodmlldyksCkBAIC0xOTksMTYgKzE4OSw2IEBACiAJCQkJCQkJICAgIGNvbF9pZHgrKywgTlVMTCk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQlpZiAoc2UtPmVsaWRlKQotCQkJY29udGludWU7Ci0KLQkJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXKHZpZXcpLAotCQkJCQkJCSAgICAtMSwgc2UtPnNlX2hlYWRlciwKLQkJCQkJCQkgICAgcmVuZGVyZXIsICJ0ZXh0IiwKLQkJCQkJCQkgICAgY29sX2lkeCsrLCBOVUxMKTsKLQl9Ci0KIAlmb3IgKGNvbF9pZHggPSAwOyBjb2xfaWR4IDwgbnJfY29sczsgY29sX2lkeCsrKSB7CiAJCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47CiAKQEAgLTIyOCwxMiArMjA4LDE1IEBACiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZoaXN0cy0+ZW50cmllcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICpoID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKIAkJR3RrVHJlZUl0ZXIgaXRlcjsKLQkJZmxvYXQgcGVyY2VudCA9IGgtPnN0YXQucGVyaW9kICogMTAwLjAgLwotCQkJCQloaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOworCQl1NjQgdG90YWwgPSBoaXN0c19fdG90YWxfcGVyaW9kKGgtPmhpc3RzKTsKKwkJZmxvYXQgcGVyY2VudCA9IDAuMDsKIAogCQlpZiAoaC0+ZmlsdGVyZWQpCiAJCQljb250aW51ZTsKIAorCQlpZiAodG90YWwpCisJCQlwZXJjZW50ID0gaC0+c3RhdC5wZXJpb2QgKiAxMDAuMCAvIHRvdGFsOworCiAJCWlmIChwZXJjZW50IDwgbWluX3BjbnQpCiAJCQljb250aW51ZTsKIApAQCAtMjQyLDYgKzIyNSw5IEBACiAJCWNvbF9pZHggPSAwOwogCiAJCXBlcmZfaHBwX19mb3JfZWFjaF9mb3JtYXQoZm10KSB7CisJCQlpZiAocGVyZl9ocHBfX3Nob3VsZF9za2lwKGZtdCkpCisJCQkJY29udGludWU7CisKIAkJCWlmIChmbXQtPmNvbG9yKQogCQkJCWZtdC0+Y29sb3IoZm10LCAmaHBwLCBoKTsKIAkJCWVsc2UKQEAgLTI1MCwyMyArMjM2LDkgQEAKIAkJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJml0ZXIsIGNvbF9pZHgrKywgcywgLTEpOwogCQl9CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQkJaWYgKHNlLT5lbGlkZSkKLQkJCQljb250aW51ZTsKLQotCQkJc2UtPnNlX3NucHJpbnRmKGgsIHMsIEFSUkFZX1NJWkUocyksCi0JCQkJCWhpc3RzX19jb2xfbGVuKGhpc3RzLCBzZS0+c2Vfd2lkdGhfaWR4KSk7Ci0KLQkJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJml0ZXIsIGNvbF9pZHgrKywgcywgLTEpOwotCQl9Ci0KIAkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gJiYgc29ydF9faGFzX3N5bSkgewotCQkJdTY0IHRvdGFsOwotCiAJCQlpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgPT0gQ0hBSU5fR1JBUEhfUkVMKQogCQkJCXRvdGFsID0gaC0+c3RhdC5wZXJpb2Q7Ci0JCQllbHNlCi0JCQkJdG90YWwgPSBoaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOwogCiAJCQlwZXJmX2d0a19fYWRkX2NhbGxjaGFpbigmaC0+c29ydGVkX2NoYWluLCBzdG9yZSwgJml0ZXIsCiAJCQkJCQlzeW1fY29sLCB0b3RhbCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2hpc3QuYyBiL3Rvb2xzL3BlcmYvdWkvaGlzdC5jCmluZGV4IDBmNDAzYjguLjQ0ODRmNWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvaGlzdC5jCkBAIC0xNiwzMCArMTYsMjUgQEAKIH0pCiAKIGludCBfX2hwcF9fZm10KHN0cnVjdCBwZXJmX2hwcCAqaHBwLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsCi0JICAgICAgIGhwcF9maWVsZF9mbiBnZXRfZmllbGQsIGhwcF9jYWxsYmFja19mbiBjYWxsYmFjaywKLQkgICAgICAgY29uc3QgY2hhciAqZm10LCBocHBfc25wcmludF9mbiBwcmludF9mbiwgYm9vbCBmbXRfcGVyY2VudCkKKwkgICAgICAgaHBwX2ZpZWxkX2ZuIGdldF9maWVsZCwgY29uc3QgY2hhciAqZm10LAorCSAgICAgICBocHBfc25wcmludF9mbiBwcmludF9mbiwgYm9vbCBmbXRfcGVyY2VudCkKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCXN0cnVjdCBoaXN0cyAqaGlzdHMgPSBoZS0+aGlzdHM7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsID0gaGlzdHNfdG9fZXZzZWwoaGlzdHMpOwogCWNoYXIgKmJ1ZiA9IGhwcC0+YnVmOwogCXNpemVfdCBzaXplID0gaHBwLT5zaXplOwogCi0JaWYgKGNhbGxiYWNrKSB7Ci0JCXJldCA9IGNhbGxiYWNrKGhwcCwgdHJ1ZSk7Ci0JCWFkdmFuY2VfaHBwKGhwcCwgcmV0KTsKLQl9Ci0KIAlpZiAoZm10X3BlcmNlbnQpIHsKIAkJZG91YmxlIHBlcmNlbnQgPSAwLjA7CisJCXU2NCB0b3RhbCA9IGhpc3RzX190b3RhbF9wZXJpb2QoaGlzdHMpOwogCi0JCWlmIChoaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kKQotCQkJcGVyY2VudCA9IDEwMC4wICogZ2V0X2ZpZWxkKGhlKSAvCi0JCQkJICBoaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOworCQlpZiAodG90YWwpCisJCQlwZXJjZW50ID0gMTAwLjAgKiBnZXRfZmllbGQoaGUpIC8gdG90YWw7CiAKLQkJcmV0ICs9IGhwcF9fY2FsbF9wcmludF9mbihocHAsIHByaW50X2ZuLCBmbXQsIHBlcmNlbnQpOworCQlyZXQgPSBocHBfX2NhbGxfcHJpbnRfZm4oaHBwLCBwcmludF9mbiwgZm10LCBwZXJjZW50KTsKIAl9IGVsc2UKLQkJcmV0ICs9IGhwcF9fY2FsbF9wcmludF9mbihocHAsIHByaW50X2ZuLCBmbXQsIGdldF9maWVsZChoZSkpOworCQlyZXQgPSBocHBfX2NhbGxfcHJpbnRfZm4oaHBwLCBwcmludF9mbiwgZm10LCBnZXRfZmllbGQoaGUpKTsKIAogCWlmIChwZXJmX2V2c2VsX19pc19ncm91cF9ldmVudChldnNlbCkpIHsKIAkJaW50IHByZXZfaWR4LCBpZHhfZGVsdGE7CkBAIC01MCw3ICs0NSw3IEBACiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWlyLCAmaGUtPnBhaXJzLmhlYWQsIHBhaXJzLm5vZGUpIHsKIAkJCXU2NCBwZXJpb2QgPSBnZXRfZmllbGQocGFpcik7Ci0JCQl1NjQgdG90YWwgPSBwYWlyLT5oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOworCQkJdTY0IHRvdGFsID0gaGlzdHNfX3RvdGFsX3BlcmlvZChwYWlyLT5oaXN0cyk7CiAKIAkJCWlmICghdG90YWwpCiAJCQkJY29udGludWU7CkBAIC05OSwxMyArOTQsNiBAQAogCQl9CiAJfQogCi0JaWYgKGNhbGxiYWNrKSB7Ci0JCWludCBfX3JldCA9IGNhbGxiYWNrKGhwcCwgZmFsc2UpOwotCi0JCWFkdmFuY2VfaHBwKGhwcCwgX19yZXQpOwotCQlyZXQgKz0gX19yZXQ7Ci0JfQotCiAJLyoKIAkgKiBSZXN0b3JlIG9yaWdpbmFsIGJ1ZiBhbmQgc2l6ZSBhcyBpdCdzIHdoZXJlIGNhbGxlciBleHBlY3RzCiAJICogdGhlIHJlc3VsdCB3aWxsIGJlIHNhdmVkLgpAQCAtMTE2LDYgKzEwNCw2MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZmllbGRfY21wKHU2NCBmaWVsZF9hLCB1NjQgZmllbGRfYikKK3sKKwlpZiAoZmllbGRfYSA+IGZpZWxkX2IpCisJCXJldHVybiAxOworCWlmIChmaWVsZF9hIDwgZmllbGRfYikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faHBwX19zb3J0KHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYiwKKwkJICAgICAgIGhwcF9maWVsZF9mbiBnZXRfZmllbGQpCit7CisJczY0IHJldDsKKwlpbnQgaSwgbnJfbWVtYmVyczsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJc3RydWN0IGhpc3RfZW50cnkgKnBhaXI7CisJdTY0ICpmaWVsZHNfYSwgKmZpZWxkc19iOworCisJcmV0ID0gZmllbGRfY21wKGdldF9maWVsZChhKSwgZ2V0X2ZpZWxkKGIpKTsKKwlpZiAocmV0IHx8ICFzeW1ib2xfY29uZi5ldmVudF9ncm91cCkKKwkJcmV0dXJuIHJldDsKKworCWV2c2VsID0gaGlzdHNfdG9fZXZzZWwoYS0+aGlzdHMpOworCWlmICghcGVyZl9ldnNlbF9faXNfZ3JvdXBfZXZlbnQoZXZzZWwpKQorCQlyZXR1cm4gcmV0OworCisJbnJfbWVtYmVycyA9IGV2c2VsLT5ucl9tZW1iZXJzOworCWZpZWxkc19hID0gY2FsbG9jKHNpemVvZigqZmllbGRzX2EpLCBucl9tZW1iZXJzKTsKKwlmaWVsZHNfYiA9IGNhbGxvYyhzaXplb2YoKmZpZWxkc19iKSwgbnJfbWVtYmVycyk7CisKKwlpZiAoIWZpZWxkc19hIHx8ICFmaWVsZHNfYikKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhaXIsICZhLT5wYWlycy5oZWFkLCBwYWlycy5ub2RlKSB7CisJCWV2c2VsID0gaGlzdHNfdG9fZXZzZWwocGFpci0+aGlzdHMpOworCQlmaWVsZHNfYVtwZXJmX2V2c2VsX19ncm91cF9pZHgoZXZzZWwpXSA9IGdldF9maWVsZChwYWlyKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhaXIsICZiLT5wYWlycy5oZWFkLCBwYWlycy5ub2RlKSB7CisJCWV2c2VsID0gaGlzdHNfdG9fZXZzZWwocGFpci0+aGlzdHMpOworCQlmaWVsZHNfYltwZXJmX2V2c2VsX19ncm91cF9pZHgoZXZzZWwpXSA9IGdldF9maWVsZChwYWlyKTsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgbnJfbWVtYmVyczsgaSsrKSB7CisJCXJldCA9IGZpZWxkX2NtcChmaWVsZHNfYVtpXSwgZmllbGRzX2JbaV0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCitvdXQ6CisJZnJlZShmaWVsZHNfYSk7CisJZnJlZShmaWVsZHNfYik7CisKKwlyZXR1cm4gcmV0OworfQorCiAjZGVmaW5lIF9fSFBQX0hFQURFUl9GTihfdHlwZSwgX3N0ciwgX21pbl93aWR0aCwgX3VuaXRfd2lkdGgpIAkJXAogc3RhdGljIGludCBocHBfX2hlYWRlcl8jI190eXBlKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCBfX21heWJlX3VudXNlZCwJXAogCQkJICAgICAgIHN0cnVjdCBwZXJmX2hwcCAqaHBwLAkJCVwKQEAgLTE3OSw3ICsyMjMsNyBAQAogc3RhdGljIGludCBocHBfX2NvbG9yXyMjX3R5cGUoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10IF9fbWF5YmVfdW51c2VkLAkJXAogCQkJICAgICAgc3RydWN0IHBlcmZfaHBwICpocHAsIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkgCVwKIHsJCQkJCQkJCQkJXAotCXJldHVybiBfX2hwcF9fZm10KGhwcCwgaGUsIGhlX2dldF8jI19maWVsZCwgTlVMTCwgIiAlNi4yZiUlIiwJCVwKKwlyZXR1cm4gX19ocHBfX2ZtdChocHAsIGhlLCBoZV9nZXRfIyNfZmllbGQsICIgJTYuMmYlJSIsCQkJXAogCQkJICBocHBfY29sb3Jfc2NucHJpbnRmLCB0cnVlKTsJCQkJXAogfQogCkBAIC0xODgsMTAgKzIzMiwxNiBAQAogCQkJICAgICAgc3RydWN0IHBlcmZfaHBwICpocHAsIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkgCVwKIHsJCQkJCQkJCQkJXAogCWNvbnN0IGNoYXIgKmZtdCA9IHN5bWJvbF9jb25mLmZpZWxkX3NlcCA/ICIgJS4yZiIgOiAiICU2LjJmJSUiOwkJXAotCXJldHVybiBfX2hwcF9fZm10KGhwcCwgaGUsIGhlX2dldF8jI19maWVsZCwgTlVMTCwgZm10LAkJCVwKKwlyZXR1cm4gX19ocHBfX2ZtdChocHAsIGhlLCBoZV9nZXRfIyNfZmllbGQsIGZtdCwJCQlcCiAJCQkgIGhwcF9lbnRyeV9zY25wcmludGYsIHRydWUpOwkJCQlcCiB9CiAKKyNkZWZpbmUgX19IUFBfU09SVF9GTihfdHlwZSwgX2ZpZWxkKQkJCQkJCVwKK3N0YXRpYyBpbnQ2NF90IGhwcF9fc29ydF8jI190eXBlKHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYikJXAorewkJCQkJCQkJCQlcCisJcmV0dXJuIF9faHBwX19zb3J0KGEsIGIsIGhlX2dldF8jI19maWVsZCk7CQkJCVwKK30KKwogI2RlZmluZSBfX0hQUF9FTlRSWV9SQVdfRk4oX3R5cGUsIF9maWVsZCkJCQkJCVwKIHN0YXRpYyB1NjQgaGVfZ2V0X3Jhd18jI19maWVsZChzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCQkJCVwKIHsJCQkJCQkJCQkJXApAQCAtMjAyLDIwICsyNTIsMjkgQEAKIAkJCSAgICAgIHN0cnVjdCBwZXJmX2hwcCAqaHBwLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpIAlcCiB7CQkJCQkJCQkJCVwKIAljb25zdCBjaGFyICpmbXQgPSBzeW1ib2xfY29uZi5maWVsZF9zZXAgPyAiICUiUFJJdTY0IDogIiAlMTEiUFJJdTY0OwlcCi0JcmV0dXJuIF9faHBwX19mbXQoaHBwLCBoZSwgaGVfZ2V0X3Jhd18jI19maWVsZCwgTlVMTCwgZm10LAkJXAorCXJldHVybiBfX2hwcF9fZm10KGhwcCwgaGUsIGhlX2dldF9yYXdfIyNfZmllbGQsIGZtdCwJCQlcCiAJCQkgIGhwcF9lbnRyeV9zY25wcmludGYsIGZhbHNlKTsJCQkJXAogfQogCisjZGVmaW5lIF9fSFBQX1NPUlRfUkFXX0ZOKF90eXBlLCBfZmllbGQpCQkJCQlcCitzdGF0aWMgaW50NjRfdCBocHBfX3NvcnRfIyNfdHlwZShzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpCVwKK3sJCQkJCQkJCQkJXAorCXJldHVybiBfX2hwcF9fc29ydChhLCBiLCBoZV9nZXRfcmF3XyMjX2ZpZWxkKTsJCQkJXAorfQorCisKICNkZWZpbmUgSFBQX1BFUkNFTlRfRk5TKF90eXBlLCBfc3RyLCBfZmllbGQsIF9taW5fd2lkdGgsIF91bml0X3dpZHRoKQlcCiBfX0hQUF9IRUFERVJfRk4oX3R5cGUsIF9zdHIsIF9taW5fd2lkdGgsIF91bml0X3dpZHRoKQkJCVwKIF9fSFBQX1dJRFRIX0ZOKF90eXBlLCBfbWluX3dpZHRoLCBfdW5pdF93aWR0aCkJCQkJXAogX19IUFBfQ09MT1JfUEVSQ0VOVF9GTihfdHlwZSwgX2ZpZWxkKQkJCQkJXAotX19IUFBfRU5UUllfUEVSQ0VOVF9GTihfdHlwZSwgX2ZpZWxkKQorX19IUFBfRU5UUllfUEVSQ0VOVF9GTihfdHlwZSwgX2ZpZWxkKQkJCQkJXAorX19IUFBfU09SVF9GTihfdHlwZSwgX2ZpZWxkKQogCiAjZGVmaW5lIEhQUF9SQVdfRk5TKF90eXBlLCBfc3RyLCBfZmllbGQsIF9taW5fd2lkdGgsIF91bml0X3dpZHRoKQlcCiBfX0hQUF9IRUFERVJfRk4oX3R5cGUsIF9zdHIsIF9taW5fd2lkdGgsIF91bml0X3dpZHRoKQkJCVwKIF9fSFBQX1dJRFRIX0ZOKF90eXBlLCBfbWluX3dpZHRoLCBfdW5pdF93aWR0aCkJCQkJXAotX19IUFBfRU5UUllfUkFXX0ZOKF90eXBlLCBfZmllbGQpCitfX0hQUF9FTlRSWV9SQVdfRk4oX3R5cGUsIF9maWVsZCkJCQkJCVwKK19fSFBQX1NPUlRfUkFXX0ZOKF90eXBlLCBfZmllbGQpCiAKIAogSFBQX1BFUkNFTlRfRk5TKG92ZXJoZWFkLCAiT3ZlcmhlYWQiLCBwZXJpb2QsIDgsIDgpCkBAIC0yMjcsMTkgKzI4NiwzMSBAQAogSFBQX1JBV19GTlMoc2FtcGxlcywgIlNhbXBsZXMiLCBucl9ldmVudHMsIDEyLCAxMikKIEhQUF9SQVdfRk5TKHBlcmlvZCwgIlBlcmlvZCIsIHBlcmlvZCwgMTIsIDEyKQogCitzdGF0aWMgaW50NjRfdCBocHBfX25vcF9jbXAoc3RydWN0IGhpc3RfZW50cnkgKmEgX19tYXliZV91bnVzZWQsCisJCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKmIgX19tYXliZV91bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgSFBQX19DT0xPUl9QUklOVF9GTlMoX25hbWUpCQkJXAogCXsJCQkJCQlcCiAJCS5oZWFkZXIJPSBocHBfX2hlYWRlcl8gIyMgX25hbWUsCVwKIAkJLndpZHRoCT0gaHBwX193aWR0aF8gIyMgX25hbWUsCQlcCiAJCS5jb2xvcgk9IGhwcF9fY29sb3JfICMjIF9uYW1lLAkJXAotCQkuZW50cnkJPSBocHBfX2VudHJ5XyAjIyBfbmFtZQkJXAorCQkuZW50cnkJPSBocHBfX2VudHJ5XyAjIyBfbmFtZSwJCVwKKwkJLmNtcAk9IGhwcF9fbm9wX2NtcCwJCQlcCisJCS5jb2xsYXBzZSA9IGhwcF9fbm9wX2NtcCwJCVwKKwkJLnNvcnQJPSBocHBfX3NvcnRfICMjIF9uYW1lLAkJXAogCX0KIAogI2RlZmluZSBIUFBfX1BSSU5UX0ZOUyhfbmFtZSkJCQkJXAogCXsJCQkJCQlcCiAJCS5oZWFkZXIJPSBocHBfX2hlYWRlcl8gIyMgX25hbWUsCVwKIAkJLndpZHRoCT0gaHBwX193aWR0aF8gIyMgX25hbWUsCQlcCi0JCS5lbnRyeQk9IGhwcF9fZW50cnlfICMjIF9uYW1lCQlcCisJCS5lbnRyeQk9IGhwcF9fZW50cnlfICMjIF9uYW1lLAkJXAorCQkuY21wCT0gaHBwX19ub3BfY21wLAkJCVwKKwkJLmNvbGxhcHNlID0gaHBwX19ub3BfY21wLAkJXAorCQkuc29ydAk9IGhwcF9fc29ydF8gIyMgX25hbWUsCQlcCiAJfQogCiBzdHJ1Y3QgcGVyZl9ocHBfZm10IHBlcmZfaHBwX19mb3JtYXRbXSA9IHsKQEAgLTI1Myw2ICszMjQsNyBAQAogfTsKIAogTElTVF9IRUFEKHBlcmZfaHBwX19saXN0KTsKK0xJU1RfSEVBRChwZXJmX2hwcF9fc29ydF9saXN0KTsKIAogCiAjdW5kZWYgSFBQX19DT0xPUl9QUklOVF9GTlMKQEAgLTI3MCw2ICszNDIsMjUgQEAKIAogdm9pZCBwZXJmX2hwcF9faW5pdCh2b2lkKQogeworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEVSRl9IUFBfX01BWF9JTkRFWDsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCA9ICZwZXJmX2hwcF9fZm9ybWF0W2ldOworCisJCUlOSVRfTElTVF9IRUFEKCZmbXQtPmxpc3QpOworCisJCS8qIHNvcnRfbGlzdCBtYXkgYmUgbGlua2VkIGJ5IHNldHVwX3NvcnRpbmcoKSAqLworCQlpZiAoZm10LT5zb3J0X2xpc3QubmV4dCA9PSBOVUxMKQorCQkJSU5JVF9MSVNUX0hFQUQoJmZtdC0+c29ydF9saXN0KTsKKwl9CisKKwkvKgorCSAqIElmIHVzZXIgc3BlY2lmaWVkIGZpZWxkIG9yZGVyLCBubyBuZWVkIHRvIHNldHVwIGRlZmF1bHQgZmllbGRzLgorCSAqLworCWlmIChmaWVsZF9vcmRlcikKKwkJcmV0dXJuOworCiAJcGVyZl9ocHBfX2NvbHVtbl9lbmFibGUoUEVSRl9IUFBfX09WRVJIRUFEKTsKIAogCWlmIChzeW1ib2xfY29uZi5zaG93X2NwdV91dGlsaXphdGlvbikgewpAQCAtMjg3LDYgKzM3OCwxMSBAQAogCiAJaWYgKHN5bWJvbF9jb25mLnNob3dfdG90YWxfcGVyaW9kKQogCQlwZXJmX2hwcF9fY29sdW1uX2VuYWJsZShQRVJGX0hQUF9fUEVSSU9EKTsKKworCS8qIHByZXBlbmQgb3ZlcmhlYWQgZmllbGQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGl0eS4gICovCisJbGlzdCA9ICZwZXJmX2hwcF9fZm9ybWF0W1BFUkZfSFBQX19PVkVSSEVBRF0uc29ydF9saXN0OworCWlmIChsaXN0X2VtcHR5KGxpc3QpKQorCQlsaXN0X2FkZChsaXN0LCAmcGVyZl9ocHBfX3NvcnRfbGlzdCk7CiB9CiAKIHZvaWQgcGVyZl9ocHBfX2NvbHVtbl9yZWdpc3RlcihzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmb3JtYXQpCkBAIC0yOTQsMjkgKzM5MCw5MCBAQAogCWxpc3RfYWRkX3RhaWwoJmZvcm1hdC0+bGlzdCwgJnBlcmZfaHBwX19saXN0KTsKIH0KIAordm9pZCBwZXJmX2hwcF9fcmVnaXN0ZXJfc29ydF9maWVsZChzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmb3JtYXQpCit7CisJbGlzdF9hZGRfdGFpbCgmZm9ybWF0LT5zb3J0X2xpc3QsICZwZXJmX2hwcF9fc29ydF9saXN0KTsKK30KKwogdm9pZCBwZXJmX2hwcF9fY29sdW1uX2VuYWJsZSh1bnNpZ25lZCBjb2wpCiB7CiAJQlVHX09OKGNvbCA+PSBQRVJGX0hQUF9fTUFYX0lOREVYKTsKIAlwZXJmX2hwcF9fY29sdW1uX3JlZ2lzdGVyKCZwZXJmX2hwcF9fZm9ybWF0W2NvbF0pOwogfQogCi1pbnQgaGlzdF9lbnRyeV9fc29ydF9zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIGNoYXIgKnMsIHNpemVfdCBzaXplLAotCQkJICAgICAgc3RydWN0IGhpc3RzICpoaXN0cykKK3ZvaWQgcGVyZl9ocHBfX3NldHVwX291dHB1dF9maWVsZCh2b2lkKQogewotCWNvbnN0IGNoYXIgKnNlcCA9IHN5bWJvbF9jb25mLmZpZWxkX3NlcDsKLQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQlpZiAoc2UtPmVsaWRlKQorCS8qIGFwcGVuZCBzb3J0IGtleXMgdG8gb3V0cHV0IGZpZWxkICovCisJcGVyZl9ocHBfX2Zvcl9lYWNoX3NvcnRfbGlzdChmbXQpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZmbXQtPmxpc3QpKQogCQkJY29udGludWU7CiAKLQkJcmV0ICs9IHNjbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJXMiLCBzZXAgPzogIiAgIik7Ci0JCXJldCArPSBzZS0+c2Vfc25wcmludGYoaGUsIHMgKyByZXQsIHNpemUgLSByZXQsCi0JCQkJICAgICAgIGhpc3RzX19jb2xfbGVuKGhpc3RzLCBzZS0+c2Vfd2lkdGhfaWR4KSk7CisJCS8qCisJCSAqIHNvcnQgZW50cnkgZmllbGRzIGFyZSBkeW5hbWljYWxseSBjcmVhdGVkLAorCQkgKiBzbyB0aGV5IGNhbiBzaGFyZSBhIHNhbWUgc29ydCBrZXkgZXZlbiB0aG91Z2gKKwkJICogdGhlIGxpc3QgaXMgZW1wdHkuCisJCSAqLworCQlpZiAocGVyZl9ocHBfX2lzX3NvcnRfZW50cnkoZm10KSkgeworCQkJc3RydWN0IHBlcmZfaHBwX2ZtdCAqcG9zOworCisJCQlwZXJmX2hwcF9fZm9yX2VhY2hfZm9ybWF0KHBvcykgeworCQkJCWlmIChwZXJmX2hwcF9fc2FtZV9zb3J0X2VudHJ5KHBvcywgZm10KSkKKwkJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisKKwkJcGVyZl9ocHBfX2NvbHVtbl9yZWdpc3RlcihmbXQpOworbmV4dDoKKwkJY29udGludWU7CisJfQorfQorCit2b2lkIHBlcmZfaHBwX19hcHBlbmRfc29ydF9rZXlzKHZvaWQpCit7CisJc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10OworCisJLyogYXBwZW5kIG91dHB1dCBmaWVsZHMgdG8gc29ydCBrZXlzICovCisJcGVyZl9ocHBfX2Zvcl9lYWNoX2Zvcm1hdChmbXQpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZmbXQtPnNvcnRfbGlzdCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBzb3J0IGVudHJ5IGZpZWxkcyBhcmUgZHluYW1pY2FsbHkgY3JlYXRlZCwKKwkJICogc28gdGhleSBjYW4gc2hhcmUgYSBzYW1lIHNvcnQga2V5IGV2ZW4gdGhvdWdoCisJCSAqIHRoZSBsaXN0IGlzIGVtcHR5LgorCQkgKi8KKwkJaWYgKHBlcmZfaHBwX19pc19zb3J0X2VudHJ5KGZtdCkpIHsKKwkJCXN0cnVjdCBwZXJmX2hwcF9mbXQgKnBvczsKKworCQkJcGVyZl9ocHBfX2Zvcl9lYWNoX3NvcnRfbGlzdChwb3MpIHsKKwkJCQlpZiAocGVyZl9ocHBfX3NhbWVfc29ydF9lbnRyeShwb3MsIGZtdCkpCisJCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCisJCXBlcmZfaHBwX19yZWdpc3Rlcl9zb3J0X2ZpZWxkKGZtdCk7CituZXh0OgorCQljb250aW51ZTsKKwl9Cit9CisKK3ZvaWQgcGVyZl9ocHBfX3Jlc2V0X291dHB1dF9maWVsZCh2b2lkKQoreworCXN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwgKnRtcDsKKworCS8qIHJlc2V0IG91dHB1dCBmaWVsZHMgKi8KKwlwZXJmX2hwcF9fZm9yX2VhY2hfZm9ybWF0X3NhZmUoZm10LCB0bXApIHsKKwkJbGlzdF9kZWxfaW5pdCgmZm10LT5saXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmZm10LT5zb3J0X2xpc3QpOwogCX0KIAotCXJldHVybiByZXQ7CisJLyogcmVzZXQgc29ydCBrZXlzICovCisJcGVyZl9ocHBfX2Zvcl9lYWNoX3NvcnRfbGlzdF9zYWZlKGZtdCwgdG1wKSB7CisJCWxpc3RfZGVsX2luaXQoJmZtdC0+bGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmZtdC0+c29ydF9saXN0KTsKKwl9CiB9CiAKIC8qCkBAIC0zMjUsMjIgKzQ4MiwyMyBAQAogdW5zaWduZWQgaW50IGhpc3RzX19zb3J0X2xpc3Rfd2lkdGgoc3RydWN0IGhpc3RzICpoaXN0cykKIHsKIAlzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQ7Ci0Jc3RydWN0IHNvcnRfZW50cnkgKnNlOwotCWludCBpID0gMCwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKIAlzdHJ1Y3QgcGVyZl9ocHAgZHVtbXlfaHBwOwogCiAJcGVyZl9ocHBfX2Zvcl9lYWNoX2Zvcm1hdChmbXQpIHsKLQkJaWYgKGkpCisJCWlmIChwZXJmX2hwcF9fc2hvdWxkX3NraXAoZm10KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKIAkJCXJldCArPSAyOwogCiAJCXJldCArPSBmbXQtPndpZHRoKGZtdCwgJmR1bW15X2hwcCwgaGlzdHNfdG9fZXZzZWwoaGlzdHMpKTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KQotCQlpZiAoIXNlLT5lbGlkZSkKLQkJCXJldCArPSAyICsgaGlzdHNfX2NvbF9sZW4oaGlzdHMsIHNlLT5zZV93aWR0aF9pZHgpOwotCi0JaWYgKHZlcmJvc2UpIC8qIEFkZHIgKyBvcmlnaW4gKi8KKwlpZiAodmVyYm9zZSAmJiBzb3J0X19oYXNfc3ltKSAvKiBBZGRyICsgb3JpZ2luICovCiAJCXJldCArPSAzICsgQklUU19QRVJfTE9ORyAvIDQ7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9wcm9ncmVzcy5oIGIvdG9vbHMvcGVyZi91aS9wcm9ncmVzcy5oCmluZGV4IDI5ZWM4ZWYuLmYzNGY4OWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvcHJvZ3Jlc3MuaAorKysgYi90b29scy9wZXJmL3VpL3Byb2dyZXNzLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9QRVJGX1VJX1BST0dSRVNTX0hfCiAjZGVmaW5lIF9QRVJGX1VJX1BST0dSRVNTX0hfIDEKIAotI2luY2x1ZGUgPC4uL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogdm9pZCB1aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpOwogIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jCmluZGV4IDVkZjUxNDAuLmJhNTFmYTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYworKysgYi90b29scy9wZXJmL3VpL3NldHVwLmMKQEAgLTg2LDggKzg2LDYgQEAKIAkJdXNlX2Jyb3dzZXIgPSAwOwogCQlpZiAoZmFsbGJhY2tfdG9fcGFnZXIpCiAJCQlzZXR1cF9wYWdlcigpOwotCi0JCXBlcmZfaHBwX19pbml0KCk7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvc3RkaW8vaGlzdC5jIGIvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKaW5kZXggZDU5ODkzZS4uOWY1Nzk5MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKQEAgLTE4Myw3ICsxODMsOCBAQAogCQkJICogdGhlIHN5bWJvbC4gTm8gbmVlZCB0byBwcmludCBpdCBvdGhlcndpc2UgaXQgYXBwZWFycyBhcwogCQkJICogZGlzcGxheWVkIHR3aWNlLgogCQkJICovCi0JCQlpZiAoIWkrKyAmJiBzb3J0X19maXJzdF9kaW1lbnNpb24gPT0gU09SVF9TWU0pCisJCQlpZiAoIWkrKyAmJiBmaWVsZF9vcmRlciA9PSBOVUxMICYmCisJCQkgICAgc29ydF9vcmRlciAmJiAhcHJlZml4Y21wKHNvcnRfb3JkZXIsICJzeW0iKSkKIAkJCQljb250aW51ZTsKIAkJCWlmICghcHJpbnRlZCkgewogCQkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKQEAgLTI5NiwxOCArMjk3LDI0IEBACiAJaW50IGxlZnRfbWFyZ2luID0gMDsKIAl1NjQgdG90YWxfcGVyaW9kID0gaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZDsKIAotCWlmIChzb3J0X19maXJzdF9kaW1lbnNpb24gPT0gU09SVF9DT01NKSB7Ci0JCXN0cnVjdCBzb3J0X2VudHJ5ICpzZSA9IGxpc3RfZmlyc3RfZW50cnkoJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwKLQkJCQkJCQkgdHlwZW9mKCpzZSksIGxpc3QpOwotCQlsZWZ0X21hcmdpbiA9IGhpc3RzX19jb2xfbGVuKGhpc3RzLCBzZS0+c2Vfd2lkdGhfaWR4KTsKLQkJbGVmdF9tYXJnaW4gLT0gdGhyZWFkX19jb21tX2xlbihoZS0+dGhyZWFkKTsKLQl9CisJaWYgKGZpZWxkX29yZGVyID09IE5VTEwgJiYgKHNvcnRfb3JkZXIgPT0gTlVMTCB8fAorCQkJCSAgICAhcHJlZml4Y21wKHNvcnRfb3JkZXIsICJjb21tIikpKSB7CisJCXN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdDsKIAorCQlwZXJmX2hwcF9fZm9yX2VhY2hfZm9ybWF0KGZtdCkgeworCQkJaWYgKCFwZXJmX2hwcF9faXNfc29ydF9lbnRyeShmbXQpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtdXN0IGJlICdjb21tJyBzb3J0IGVudHJ5ICovCisJCQlsZWZ0X21hcmdpbiA9IGZtdC0+d2lkdGgoZm10LCBOVUxMLCBoaXN0c190b19ldnNlbChoaXN0cykpOworCQkJbGVmdF9tYXJnaW4gLT0gdGhyZWFkX19jb21tX2xlbihoZS0+dGhyZWFkKTsKKwkJCWJyZWFrOworCQl9CisJfQogCXJldHVybiBoaXN0X2VudHJ5X2NhbGxjaGFpbl9fZnByaW50ZihoZSwgdG90YWxfcGVyaW9kLCBsZWZ0X21hcmdpbiwgZnApOwogfQogCi1zdGF0aWMgaW50IGhpc3RfZW50cnlfX3BlcmlvZF9zbnByaW50ZihzdHJ1Y3QgcGVyZl9ocHAgKmhwcCwKLQkJCQkgICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQorc3RhdGljIGludCBoaXN0X2VudHJ5X19zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHN0cnVjdCBwZXJmX2hwcCAqaHBwKQogewogCWNvbnN0IGNoYXIgKnNlcCA9IHN5bWJvbF9jb25mLmZpZWxkX3NlcDsKIAlzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQ7CkBAIC0zMTksNiArMzI2LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlwZXJmX2hwcF9fZm9yX2VhY2hfZm9ybWF0KGZtdCkgeworCQlpZiAocGVyZl9ocHBfX3Nob3VsZF9za2lwKGZtdCkpCisJCQljb250aW51ZTsKKwogCQkvKgogCQkgKiBJZiB0aGVyZSdzIG5vIGZpZWxkX3NlcCwgd2Ugc3RpbGwgbmVlZAogCQkgKiB0byBkaXNwbGF5IGluaXRpYWwgJyAgJy4KQEAgLTM1Myw4ICszNjMsNyBAQAogCWlmIChzaXplID09IDAgfHwgc2l6ZSA+IGJmc3opCiAJCXNpemUgPSBocHAuc2l6ZSA9IGJmc3o7CiAKLQlyZXQgPSBoaXN0X2VudHJ5X19wZXJpb2Rfc25wcmludGYoJmhwcCwgaGUpOwotCWhpc3RfZW50cnlfX3NvcnRfc25wcmludGYoaGUsIGJmICsgcmV0LCBzaXplIC0gcmV0LCBoaXN0cyk7CisJaGlzdF9lbnRyeV9fc25wcmludGYoaGUsICZocHApOwogCiAJcmV0ID0gZnByaW50ZihmcCwgIiVzXG4iLCBiZik7CiAKQEAgLTM2OCwxMiArMzc3LDEwIEBACiAJCSAgICAgIGludCBtYXhfY29scywgZmxvYXQgbWluX3BjbnQsIEZJTEUgKmZwKQogewogCXN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdDsKLQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7CiAJc3RydWN0IHJiX25vZGUgKm5kOwogCXNpemVfdCByZXQgPSAwOwogCXVuc2lnbmVkIGludCB3aWR0aDsKIAljb25zdCBjaGFyICpzZXAgPSBzeW1ib2xfY29uZi5maWVsZF9zZXA7Ci0JY29uc3QgY2hhciAqY29sX3dpZHRoID0gc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyOwogCWludCBucl9yb3dzID0gMDsKIAljaGFyIGJmWzk2XTsKIAlzdHJ1Y3QgcGVyZl9ocHAgZHVtbXlfaHBwID0gewpAQCAtMzg2LDEyICszOTMsMTkgQEAKIAogCWluaXRfcmVtX2hpdHMoKTsKIAorCisJcGVyZl9ocHBfX2Zvcl9lYWNoX2Zvcm1hdChmbXQpCisJCXBlcmZfaHBwX19yZXNldF93aWR0aChmbXQsIGhpc3RzKTsKKwogCWlmICghc2hvd19oZWFkZXIpCiAJCWdvdG8gcHJpbnRfZW50cmllczsKIAogCWZwcmludGYoZnAsICIjICIpOwogCiAJcGVyZl9ocHBfX2Zvcl9lYWNoX2Zvcm1hdChmbXQpIHsKKwkJaWYgKHBlcmZfaHBwX19zaG91bGRfc2tpcChmbXQpKQorCQkJY29udGludWU7CisKIAkJaWYgKCFmaXJzdCkKIAkJCWZwcmludGYoZnAsICIlcyIsIHNlcCA/OiAiICAiKTsKIAkJZWxzZQpAQCAtNDAxLDI4ICs0MTUsNiBAQAogCQlmcHJpbnRmKGZwLCAiJXMiLCBiZik7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQlpZiAoc2UtPmVsaWRlKQotCQkJY29udGludWU7Ci0JCWlmIChzZXApIHsKLQkJCWZwcmludGYoZnAsICIlYyVzIiwgKnNlcCwgc2UtPnNlX2hlYWRlcik7Ci0JCQljb250aW51ZTsKLQkJfQotCQl3aWR0aCA9IHN0cmxlbihzZS0+c2VfaGVhZGVyKTsKLQkJaWYgKHN5bWJvbF9jb25mLmNvbF93aWR0aF9saXN0X3N0cikgewotCQkJaWYgKGNvbF93aWR0aCkgewotCQkJCWhpc3RzX19zZXRfY29sX2xlbihoaXN0cywgc2UtPnNlX3dpZHRoX2lkeCwKLQkJCQkJCSAgIGF0b2koY29sX3dpZHRoKSk7Ci0JCQkJY29sX3dpZHRoID0gc3RyY2hyKGNvbF93aWR0aCwgJywnKTsKLQkJCQlpZiAoY29sX3dpZHRoKQotCQkJCQkrK2NvbF93aWR0aDsKLQkJCX0KLQkJfQotCQlpZiAoIWhpc3RzX19uZXdfY29sX2xlbihoaXN0cywgc2UtPnNlX3dpZHRoX2lkeCwgd2lkdGgpKQotCQkJd2lkdGggPSBoaXN0c19fY29sX2xlbihoaXN0cywgc2UtPnNlX3dpZHRoX2lkeCk7Ci0JCWZwcmludGYoZnAsICIgICUqcyIsIHdpZHRoLCBzZS0+c2VfaGVhZGVyKTsKLQl9Ci0KIAlmcHJpbnRmKGZwLCAiXG4iKTsKIAlpZiAobWF4X3Jvd3MgJiYgKytucl9yb3dzID49IG1heF9yb3dzKQogCQlnb3RvIG91dDsKQEAgLTQzNyw2ICs0MjksOSBAQAogCXBlcmZfaHBwX19mb3JfZWFjaF9mb3JtYXQoZm10KSB7CiAJCXVuc2lnbmVkIGludCBpOwogCisJCWlmIChwZXJmX2hwcF9fc2hvdWxkX3NraXAoZm10KSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICghZmlyc3QpCiAJCQlmcHJpbnRmKGZwLCAiJXMiLCBzZXAgPzogIiAgIik7CiAJCWVsc2UKQEAgLTQ0NywyMCArNDQyLDYgQEAKIAkJCWZwcmludGYoZnAsICIuIik7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQl1bnNpZ25lZCBpbnQgaTsKLQotCQlpZiAoc2UtPmVsaWRlKQotCQkJY29udGludWU7Ci0KLQkJZnByaW50ZihmcCwgIiAgIik7Ci0JCXdpZHRoID0gaGlzdHNfX2NvbF9sZW4oaGlzdHMsIHNlLT5zZV93aWR0aF9pZHgpOwotCQlpZiAod2lkdGggPT0gMCkKLQkJCXdpZHRoID0gc3RybGVuKHNlLT5zZV9oZWFkZXIpOwotCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykKLQkJCWZwcmludGYoZnAsICIuIik7Ci0JfQotCiAJZnByaW50ZihmcCwgIlxuIik7CiAJaWYgKG1heF9yb3dzICYmICsrbnJfcm93cyA+PSBtYXhfcm93cykKIAkJZ290byBvdXQ7CkBAIC00OTUsNyArNDc2LDcgQEAKIAkJCWJyZWFrOwogCiAJCWlmIChoLT5tcy5tYXAgPT0gTlVMTCAmJiB2ZXJib3NlID4gMSkgewotCQkJX19tYXBfZ3JvdXBzX19mcHJpbnRmX21hcHMoJmgtPnRocmVhZC0+bWcsCisJCQlfX21hcF9ncm91cHNfX2ZwcmludGZfbWFwcyhoLT50aHJlYWQtPm1nLAogCQkJCQkJICAgTUFQX19GVU5DVElPTiwgdmVyYm9zZSwgZnApOwogCQkJZnByaW50ZihmcCwgIiUuMTBzIGVuZFxuIiwgZ3JhcGhfZG90dGVkX2xpbmUpOwogCQl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCmluZGV4IDU2YWQ0ZjUuLjExMmQ2ZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJzeW1ib2wuaCIKICNpbmNsdWRlICJoaXN0LmgiCiAjaW5jbHVkZSAic29ydC5oIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwppbmRleCA2YmFhYmU2Li5hOTA0YTRjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYworKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMjUsNyArMjUsNyBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXU4IGNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIAlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBzYW1wbGUtPnBpZCwKLQkJCQkJCQlzYW1wbGUtPnBpZCk7CisJCQkJCQkJc2FtcGxlLT50aWQpOwogCiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CiAJCXByX2VycigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCmluZGV4IDg0NWVmODYuLmFlMzkyNTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCkBAIC00LDcgKzQsNyBAQAogI2RlZmluZSBCVUlMRF9JRF9TSVpFIDIwCiAKICNpbmNsdWRlICJ0b29sLmgiCi0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBleHRlcm4gc3RydWN0IHBlcmZfdG9vbCBidWlsZF9pZF9fbWFya19kc29faGl0X29wczsKIHN0cnVjdCBkc287CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKaW5kZXggOGQ5ZGI0NS4uOWE0MjM4MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwpAQCAtMjUsNiArMjUsODQgQEAKIAogX190aHJlYWQgc3RydWN0IGNhbGxjaGFpbl9jdXJzb3IgY2FsbGNoYWluX2N1cnNvcjsKIAoraW50CitwYXJzZV9jYWxsY2hhaW5fcmVwb3J0X29wdChjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqdG9rLCAqdG9rMjsKKwljaGFyICplbmRwdHI7CisKKwlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKKworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCXRvayA9IHN0cnRvaygoY2hhciAqKWFyZywgIiwiKTsKKwlpZiAoIXRvaykKKwkJcmV0dXJuIC0xOworCisJLyogZ2V0IHRoZSBvdXRwdXQgbW9kZSAqLworCWlmICghc3RybmNtcCh0b2ssICJncmFwaCIsIHN0cmxlbihhcmcpKSkgeworCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX0dSQVBIX0FCUzsKKworCX0gZWxzZSBpZiAoIXN0cm5jbXAodG9rLCAiZmxhdCIsIHN0cmxlbihhcmcpKSkgeworCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX0ZMQVQ7CisJfSBlbHNlIGlmICghc3RybmNtcCh0b2ssICJmcmFjdGFsIiwgc3RybGVuKGFyZykpKSB7CisJCWNhbGxjaGFpbl9wYXJhbS5tb2RlID0gQ0hBSU5fR1JBUEhfUkVMOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodG9rLCAibm9uZSIsIHN0cmxlbihhcmcpKSkgeworCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX05PTkU7CisJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSBmYWxzZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGdldCB0aGUgbWluIHBlcmNlbnRhZ2UgKi8KKwl0b2sgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKwlpZiAoIXRvaykKKwkJZ290byBzZXR1cDsKKworCWNhbGxjaGFpbl9wYXJhbS5taW5fcGVyY2VudCA9IHN0cnRvZCh0b2ssICZlbmRwdHIpOworCWlmICh0b2sgPT0gZW5kcHRyKQorCQlyZXR1cm4gLTE7CisKKwkvKiBnZXQgdGhlIHByaW50IGxpbWl0ICovCisJdG9rMiA9IHN0cnRvayhOVUxMLCAiLCIpOworCWlmICghdG9rMikKKwkJZ290byBzZXR1cDsKKworCWlmICh0b2syWzBdICE9ICdjJykgeworCQljYWxsY2hhaW5fcGFyYW0ucHJpbnRfbGltaXQgPSBzdHJ0b3VsKHRvazIsICZlbmRwdHIsIDApOworCQl0b2syID0gc3RydG9rKE5VTEwsICIsIik7CisJCWlmICghdG9rMikKKwkJCWdvdG8gc2V0dXA7CisJfQorCisJLyogZ2V0IHRoZSBjYWxsIGNoYWluIG9yZGVyICovCisJaWYgKCFzdHJuY21wKHRvazIsICJjYWxsZXIiLCBzdHJsZW4oImNhbGxlciIpKSkKKwkJY2FsbGNoYWluX3BhcmFtLm9yZGVyID0gT1JERVJfQ0FMTEVSOworCWVsc2UgaWYgKCFzdHJuY21wKHRvazIsICJjYWxsZWUiLCBzdHJsZW4oImNhbGxlZSIpKSkKKwkJY2FsbGNoYWluX3BhcmFtLm9yZGVyID0gT1JERVJfQ0FMTEVFOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJLyogR2V0IHRoZSBzb3J0IGtleSAqLworCXRvazIgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKwlpZiAoIXRvazIpCisJCWdvdG8gc2V0dXA7CisJaWYgKCFzdHJuY21wKHRvazIsICJmdW5jdGlvbiIsIHN0cmxlbigiZnVuY3Rpb24iKSkpCisJCWNhbGxjaGFpbl9wYXJhbS5rZXkgPSBDQ0tFWV9GVU5DVElPTjsKKwllbHNlIGlmICghc3RybmNtcCh0b2syLCAiYWRkcmVzcyIsIHN0cmxlbigiYWRkcmVzcyIpKSkKKwkJY2FsbGNoYWluX3BhcmFtLmtleSA9IENDS0VZX0FERFJFU1M7CisJZWxzZQorCQlyZXR1cm4gLTE7CitzZXR1cDoKKwlpZiAoY2FsbGNoYWluX3JlZ2lzdGVyX3BhcmFtKCZjYWxsY2hhaW5fcGFyYW0pIDwgMCkgeworCQlwcl9lcnIoIkNhbid0IHJlZ2lzdGVyIGNhbGxjaGFpbiBwYXJhbXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogcmJfaW5zZXJ0X2NhbGxjaGFpbihzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGFpbiwKIAkJICAgIGVudW0gY2hhaW5fbW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCmluZGV4IDhhZDk3ZTkuLmJkZTJiMGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaAorKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKQEAgLTcsNiArNywxMyBAQAogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAKK2VudW0gcGVyZl9jYWxsX2dyYXBoX21vZGUgeworCUNBTExDSEFJTl9OT05FLAorCUNBTExDSEFJTl9GUCwKKwlDQUxMQ0hBSU5fRFdBUkYsCisJQ0FMTENIQUlOX01BWAorfTsKKwogZW51bSBjaGFpbl9tb2RlIHsKIAlDSEFJTl9OT05FLAogCUNIQUlOX0ZMQVQsCkBAIC0xNTcsNCArMTY0LDUgQEAKIGludCBoaXN0X2VudHJ5X19hcHBlbmRfY2FsbGNoYWluKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUpOwogCiBleHRlcm4gY29uc3QgY2hhciByZWNvcmRfY2FsbGNoYWluX2hlbHBbXTsKK2ludCBwYXJzZV9jYWxsY2hhaW5fcmVwb3J0X29wdChjb25zdCBjaGFyICphcmcpOwogI2VuZGlmCS8qIF9fUEVSRl9DQUxMQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jIGIvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jCmluZGV4IDNlMGZkZDMuLjI0NTE5ZTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jb25maWcuYworKysgYi90b29scy9wZXJmL3V0aWwvY29uZmlnLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInV0aWwvaGlzdC5oIiAgLyogcGVyZl9oaXN0X2NvbmZpZyAqLwogCiAjZGVmaW5lIE1BWE5BTUUgKDI1NikKIApAQCAtMzU1LDYgKzM1Niw5IEBACiAJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29yZS4iKSkKIAkJcmV0dXJuIHBlcmZfZGVmYXVsdF9jb3JlX2NvbmZpZyh2YXIsIHZhbHVlKTsKIAorCWlmICghcHJlZml4Y21wKHZhciwgImhpc3QuIikpCisJCXJldHVybiBwZXJmX2hpc3RfY29uZmlnKHZhciwgdmFsdWUpOworCiAJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZS4gKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuYwppbmRleCA3ZmU0OTk0Li5jNGU1NWI3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY3B1bWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCkBAIC0zMTcsMyArMzE3LDE2MyBAQAogewogCXJldHVybiBjcHVfbWFwX19idWlsZF9tYXAoY3B1cywgY29yZXAsIGNwdV9tYXBfX2dldF9jb3JlKTsKIH0KKworLyogc2V0dXAgc2ltcGxlIHJvdXRpbmVzIHRvIGVhc2lseSBhY2Nlc3Mgbm9kZSBudW1iZXJzIGdpdmVuIGEgY3B1IG51bWJlciAqLworc3RhdGljIGludCBnZXRfbWF4X251bShjaGFyICpwYXRoLCBpbnQgKm1heCkKK3sKKwlzaXplX3QgbnVtOworCWNoYXIgKmJ1ZjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChmaWxlbmFtZV9fcmVhZF9zdHIocGF0aCwgJmJ1ZiwgJm51bSkpCisJCXJldHVybiAtMTsKKworCWJ1ZltudW1dID0gJ1wwJzsKKworCS8qIHN0YXJ0IG9uIHRoZSByaWdodCwgdG8gZmluZCBoaWdoZXN0IG5vZGUgbnVtICovCisJd2hpbGUgKC0tbnVtKSB7CisJCWlmICgoYnVmW251bV0gPT0gJywnKSB8fCAoYnVmW251bV0gPT0gJy0nKSkgeworCQkJbnVtKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc3NjYW5mKCZidWZbbnVtXSwgIiVkIiwgbWF4KSA8IDEpIHsKKwkJZXJyID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNvbnZlcnQgZnJvbSAwLWJhc2VkIHRvIDEtYmFzZWQgKi8KKwkoKm1heCkrKzsKKworb3V0OgorCWZyZWUoYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBEZXRlcm1pbmUgaGlnaGVzdCBwb3NzaWJsZSBjcHUgaW4gdGhlIHN5c3RlbSBmb3Igc3BhcnNlIGFsbG9jYXRpb24gKi8KK3N0YXRpYyB2b2lkIHNldF9tYXhfY3B1X251bSh2b2lkKQoreworCWNvbnN0IGNoYXIgKm1udDsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWludCByZXQgPSAtMTsKKworCS8qIHNldCB1cCBkZWZhdWx0ICovCisJbWF4X2NwdV9udW0gPSA0MDk2OworCisJbW50ID0gc3lzZnNfX21vdW50cG9pbnQoKTsKKwlpZiAoIW1udCkKKwkJZ290byBvdXQ7CisKKwkvKiBnZXQgdGhlIGhpZ2hlc3QgcG9zc2libGUgY3B1IG51bWJlciBmb3IgYSBzcGFyc2UgYWxsb2NhdGlvbiAqLworCXJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAiJXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlIiwgbW50KTsKKwlpZiAocmV0ID09IFBBVEhfTUFYKSB7CisJCXByX2Vycigic3lzZnMgcGF0aCBjcm9zc2VkIFBBVEhfTUFYKCVkKSBzaXplXG4iLCBQQVRIX01BWCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGdldF9tYXhfbnVtKHBhdGgsICZtYXhfY3B1X251bSk7CisKK291dDoKKwlpZiAocmV0KQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWFkIG1heCBjcHVzLCB1c2luZyBkZWZhdWx0IG9mICVkXG4iLCBtYXhfY3B1X251bSk7Cit9CisKKy8qIERldGVybWluZSBoaWdoZXN0IHBvc3NpYmxlIG5vZGUgaW4gdGhlIHN5c3RlbSBmb3Igc3BhcnNlIGFsbG9jYXRpb24gKi8KK3N0YXRpYyB2b2lkIHNldF9tYXhfbm9kZV9udW0odm9pZCkKK3sKKwljb25zdCBjaGFyICptbnQ7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlpbnQgcmV0ID0gLTE7CisKKwkvKiBzZXQgdXAgZGVmYXVsdCAqLworCW1heF9ub2RlX251bSA9IDg7CisKKwltbnQgPSBzeXNmc19fbW91bnRwb2ludCgpOworCWlmICghbW50KQorCQlnb3RvIG91dDsKKworCS8qIGdldCB0aGUgaGlnaGVzdCBwb3NzaWJsZSBjcHUgbnVtYmVyIGZvciBhIHNwYXJzZSBhbGxvY2F0aW9uICovCisJcmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIlcy9kZXZpY2VzL3N5c3RlbS9ub2RlL3Bvc3NpYmxlIiwgbW50KTsKKwlpZiAocmV0ID09IFBBVEhfTUFYKSB7CisJCXByX2Vycigic3lzZnMgcGF0aCBjcm9zc2VkIFBBVEhfTUFYKCVkKSBzaXplXG4iLCBQQVRIX01BWCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGdldF9tYXhfbnVtKHBhdGgsICZtYXhfbm9kZV9udW0pOworCitvdXQ6CisJaWYgKHJldCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVhZCBtYXggbm9kZXMsIHVzaW5nIGRlZmF1bHQgb2YgJWRcbiIsIG1heF9ub2RlX251bSk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jcHVub2RlX21hcCh2b2lkKQoreworCWludCBpOworCisJc2V0X21heF9jcHVfbnVtKCk7CisJc2V0X21heF9ub2RlX251bSgpOworCisJY3B1bm9kZV9tYXAgPSBjYWxsb2MobWF4X2NwdV9udW0sIHNpemVvZihpbnQpKTsKKwlpZiAoIWNwdW5vZGVfbWFwKSB7CisJCXByX2VycigiJXM6IGNhbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtYXhfY3B1X251bTsgaSsrKQorCQljcHVub2RlX21hcFtpXSA9IC0xOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcHVfX3NldHVwX2NwdW5vZGVfbWFwKHZvaWQpCit7CisJc3RydWN0IGRpcmVudCAqZGVudDEsICpkZW50MjsKKwlESVIgKmRpcjEsICpkaXIyOworCXVuc2lnbmVkIGludCBjcHUsIG1lbTsKKwljaGFyIGJ1ZltQQVRIX01BWF07CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwljb25zdCBjaGFyICptbnQ7CisJaW50IG47CisKKwkvKiBpbml0aWFsaXplIGdsb2JhbHMgKi8KKwlpZiAoaW5pdF9jcHVub2RlX21hcCgpKQorCQlyZXR1cm4gLTE7CisKKwltbnQgPSBzeXNmc19fbW91bnRwb2ludCgpOworCWlmICghbW50KQorCQlyZXR1cm4gMDsKKworCW4gPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgIiVzL2RldmljZXMvc3lzdGVtL25vZGUiLCBtbnQpOworCWlmIChuID09IFBBVEhfTUFYKSB7CisJCXByX2Vycigic3lzZnMgcGF0aCBjcm9zc2VkIFBBVEhfTUFYKCVkKSBzaXplXG4iLCBQQVRIX01BWCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkaXIxID0gb3BlbmRpcihwYXRoKTsKKwlpZiAoIWRpcjEpCisJCXJldHVybiAwOworCisJLyogd2FsayB0cmVlIGFuZCBzZXR1cCBtYXAgKi8KKwl3aGlsZSAoKGRlbnQxID0gcmVhZGRpcihkaXIxKSkgIT0gTlVMTCkgeworCQlpZiAoZGVudDEtPmRfdHlwZSAhPSBEVF9ESVIgfHwgc3NjYW5mKGRlbnQxLT5kX25hbWUsICJub2RlJXUiLCAmbWVtKSA8IDEpCisJCQljb250aW51ZTsKKworCQluID0gc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgcGF0aCwgZGVudDEtPmRfbmFtZSk7CisJCWlmIChuID09IFBBVEhfTUFYKSB7CisJCQlwcl9lcnIoInN5c2ZzIHBhdGggY3Jvc3NlZCBQQVRIX01BWCglZCkgc2l6ZVxuIiwgUEFUSF9NQVgpOworCQkJY29udGludWU7CisJCX0KKworCQlkaXIyID0gb3BlbmRpcihidWYpOworCQlpZiAoIWRpcjIpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKChkZW50MiA9IHJlYWRkaXIoZGlyMikpICE9IE5VTEwpIHsKKwkJCWlmIChkZW50Mi0+ZF90eXBlICE9IERUX0xOSyB8fCBzc2NhbmYoZGVudDItPmRfbmFtZSwgImNwdSV1IiwgJmNwdSkgPCAxKQorCQkJCWNvbnRpbnVlOworCQkJY3B1bm9kZV9tYXBbY3B1XSA9IG1lbTsKKwkJfQorCQljbG9zZWRpcihkaXIyKTsKKwl9CisJY2xvc2VkaXIoZGlyMSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY3B1bWFwLmggYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmgKaW5kZXggYjEyM2JiOS4uNjFhNjU0OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuaApAQCAtNCw2ICs0LDkgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAorI2luY2x1ZGUgInBlcmYuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisKIHN0cnVjdCBjcHVfbWFwIHsKIAlpbnQgbnI7CiAJaW50IG1hcFtdOwpAQCAtNDYsNCArNDksMzYgQEAKIAlyZXR1cm4gbWFwID8gbWFwLT5tYXBbMF0gPT0gLTEgOiB0cnVlOwogfQogCitpbnQgbWF4X2NwdV9udW07CitpbnQgbWF4X25vZGVfbnVtOworaW50ICpjcHVub2RlX21hcDsKKworaW50IGNwdV9fc2V0dXBfY3B1bm9kZV9tYXAodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9fbWF4X25vZGUodm9pZCkKK3sKKwlpZiAodW5saWtlbHkoIW1heF9ub2RlX251bSkpCisJCXByX2RlYnVnKCJjcHVfbWFwIG5vdCBpbml0aWFsaXplZFxuIik7CisKKwlyZXR1cm4gbWF4X25vZGVfbnVtOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfX21heF9jcHUodm9pZCkKK3sKKwlpZiAodW5saWtlbHkoIW1heF9jcHVfbnVtKSkKKwkJcHJfZGVidWcoImNwdV9tYXAgbm90IGluaXRpYWxpemVkXG4iKTsKKworCXJldHVybiBtYXhfY3B1X251bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1X19nZXRfbm9kZShpbnQgY3B1KQoreworCWlmICh1bmxpa2VseShjcHVub2RlX21hcCA9PSBOVUxMKSkgeworCQlwcl9kZWJ1ZygiY3B1X21hcCBub3QgaW5pdGlhbGl6ZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIGNwdW5vZGVfbWFwW2NwdV07Cit9CisKICNlbmRpZiAvKiBfX1BFUkZfQ1BVTUFQX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uaCBiL3Rvb2xzL3BlcmYvdXRpbC9kc28uaAppbmRleCBhYjA2ZjFjLi4zOGVmZTk1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZHNvLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJtYXAuaCIKICNpbmNsdWRlICJidWlsZC1pZC5oIgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCmluZGV4IDlkMTJhYTYuLjY1Nzk1YjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC02OTksNyArNjk5LDcgQEAKIAkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7Ci0Jc3RydWN0IG1hcF9ncm91cHMgKm1nID0gJnRocmVhZC0+bWc7CisJc3RydWN0IG1hcF9ncm91cHMgKm1nID0gdGhyZWFkLT5tZzsKIAlib29sIGxvYWRfbWFwID0gZmFsc2U7CiAKIAlhbC0+bWFjaGluZSA9IG1hY2hpbmU7CkBAIC03ODgsNyArNzg4LDcgQEAKIHsKIAl1OCBjcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwgc2FtcGxlLT5waWQsCi0JCQkJCQkJc2FtcGxlLT5waWQpOworCQkJCQkJCXNhbXBsZS0+dGlkKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCAzODQ1N2Q0Li5kOTcwMjMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTEyLDYgKzExMiwzMCBAQAogCX07CiB9OwogCitzdHJ1Y3QgaXBfY2FsbGNoYWluIHsKKwl1NjQgbnI7CisJdTY0IGlwc1swXTsKK307CisKK3N0cnVjdCBicmFuY2hfZmxhZ3MgeworCXU2NCBtaXNwcmVkOjE7CisJdTY0IHByZWRpY3RlZDoxOworCXU2NCBpbl90eDoxOworCXU2NCBhYm9ydDoxOworCXU2NCByZXNlcnZlZDo2MDsKK307CisKK3N0cnVjdCBicmFuY2hfZW50cnkgeworCXU2NAkJCWZyb207CisJdTY0CQkJdG87CisJc3RydWN0IGJyYW5jaF9mbGFncwlmbGFnczsKK307CisKK3N0cnVjdCBicmFuY2hfc3RhY2sgeworCXU2NAkJCW5yOworCXN0cnVjdCBicmFuY2hfZW50cnkJZW50cmllc1swXTsKK307CisKIHN0cnVjdCBwZXJmX3NhbXBsZSB7CiAJdTY0IGlwOwogCXUzMiBwaWQsIHRpZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKaW5kZXggMGM5OTI2Yy4uYTUyZTlhNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKQEAgLTUsMTIgKzUsMTIgQEAKICNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgotI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJ4eWFycmF5LmgiCiAjaW5jbHVkZSAiY2dyb3VwLmgiCiAjaW5jbHVkZSAiaGlzdC5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgotIAorCiBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC05MSw2ICs5MSwxMSBAQAogCWNoYXIJCQkqZ3JvdXBfbmFtZTsKIH07CiAKK3VuaW9uIHU2NF9zd2FwIHsKKwl1NjQgdmFsNjQ7CisJdTMyIHZhbDMyWzJdOworfTsKKwogI2RlZmluZSBoaXN0c190b19ldnNlbChoKSBjb250YWluZXJfb2YoaCwgc3RydWN0IHBlcmZfZXZzZWwsIGhpc3RzKQogCiBzdHJ1Y3QgY3B1X21hcDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAppbmRleCBhMmQwNDdiLi5kMDhjZmU0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCkBAIC00LDEwICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZXZlbnQuaCIKIAotI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogCiBlbnVtIHsKIAlIRUFERVJfUkVTRVJWRUQJCT0gMCwJLyogYWx3YXlzIGNsZWFyZWQgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCmluZGV4IGYzODU5MGQuLmIyNjJiNDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwpAQCAtMjI1LDE0ICsyMjUsMTggQEAKIHN0YXRpYyBib29sIGhpc3RzX19kZWNheV9lbnRyeShzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCiB7CiAJdTY0IHByZXZfcGVyaW9kID0gaGUtPnN0YXQucGVyaW9kOworCXU2NCBkaWZmOwogCiAJaWYgKHByZXZfcGVyaW9kID09IDApCiAJCXJldHVybiB0cnVlOwogCiAJaGVfc3RhdF9fZGVjYXkoJmhlLT5zdGF0KTsKIAorCWRpZmYgPSBwcmV2X3BlcmlvZCAtIGhlLT5zdGF0LnBlcmlvZDsKKworCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgLT0gZGlmZjsKIAlpZiAoIWhlLT5maWx0ZXJlZCkKLQkJaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCAtPSBwcmV2X3BlcmlvZCAtIGhlLT5zdGF0LnBlcmlvZDsKKwkJaGlzdHMtPnN0YXRzLnRvdGFsX25vbl9maWx0ZXJlZF9wZXJpb2QgLT0gZGlmZjsKIAogCXJldHVybiBoZS0+c3RhdC5wZXJpb2QgPT0gMDsKIH0KQEAgLTI1OSw4ICsyNjMsMTEgQEAKIAkJCWlmIChzb3J0X19uZWVkX2NvbGxhcHNlKQogCQkJCXJiX2VyYXNlKCZuLT5yYl9ub2RlX2luLCAmaGlzdHMtPmVudHJpZXNfY29sbGFwc2VkKTsKIAotCQkJaGlzdF9lbnRyeV9fZnJlZShuKTsKIAkJCS0taGlzdHMtPm5yX2VudHJpZXM7CisJCQlpZiAoIW4tPmZpbHRlcmVkKQorCQkJCS0taGlzdHMtPm5yX25vbl9maWx0ZXJlZF9lbnRyaWVzOworCisJCQloaXN0X2VudHJ5X19mcmVlKG4pOwogCQl9CiAJfQogfQpAQCAtMzE3LDE1ICszMjQsNiBAQAogCXJldHVybiBoZTsKIH0KIAotdm9pZCBoaXN0c19faW5jX25yX2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IGhpc3RfZW50cnkgKmgpCi17Ci0JaWYgKCFoLT5maWx0ZXJlZCkgewotCQloaXN0c19fY2FsY19jb2xfbGVuKGhpc3RzLCBoKTsKLQkJKytoaXN0cy0+bnJfZW50cmllczsKLQkJaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCArPSBoLT5zdGF0LnBlcmlvZDsKLQl9Ci19Ci0KIHN0YXRpYyB1OCBzeW1ib2xfX3BhcmVudF9maWx0ZXIoY29uc3Qgc3RydWN0IHN5bWJvbCAqcGFyZW50KQogewogCWlmIChzeW1ib2xfY29uZi5leGNsdWRlX290aGVyICYmIHBhcmVudCA9PSBOVUxMKQpAQCAtMzkxLDcgKzM4OSw2IEBACiAJaWYgKCFoZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQloaXN0cy0+bnJfZW50cmllcysrOwogCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGVfaW4sIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZV9pbiwgaGlzdHMtPmVudHJpZXNfaW4pOwogb3V0OgpAQCAtNDM1LDExICs0MzIsMTQgQEAKIGludDY0X3QKIGhpc3RfZW50cnlfX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQogewotCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKKwlzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQ7CiAJaW50NjRfdCBjbXAgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQljbXAgPSBzZS0+c2VfY21wKGxlZnQsIHJpZ2h0KTsKKwlwZXJmX2hwcF9fZm9yX2VhY2hfc29ydF9saXN0KGZtdCkgeworCQlpZiAocGVyZl9ocHBfX3Nob3VsZF9za2lwKGZtdCkpCisJCQljb250aW51ZTsKKworCQljbXAgPSBmbXQtPmNtcChsZWZ0LCByaWdodCk7CiAJCWlmIChjbXApCiAJCQlicmVhazsKIAl9CkBAIC00NTAsMTUgKzQ1MCwxNCBAQAogaW50NjRfdAogaGlzdF9lbnRyeV9fY29sbGFwc2Uoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKIHsKLQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7CisJc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10OwogCWludDY0X3QgY21wID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpIHsKLQkJaW50NjRfdCAoKmYpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworCXBlcmZfaHBwX19mb3JfZWFjaF9zb3J0X2xpc3QoZm10KSB7CisJCWlmIChwZXJmX2hwcF9fc2hvdWxkX3NraXAoZm10KSkKKwkJCWNvbnRpbnVlOwogCi0JCWYgPSBzZS0+c2VfY29sbGFwc2UgPzogc2UtPnNlX2NtcDsKLQotCQljbXAgPSBmKGxlZnQsIHJpZ2h0KTsKKwkJY21wID0gZm10LT5jb2xsYXBzZShsZWZ0LCByaWdodCk7CiAJCWlmIChjbXApCiAJCQlicmVhazsKIAl9CkBAIC01NzEsNjQgKzU3MCw1MCBAQAogCX0KIH0KIAotLyoKLSAqIHJldmVyc2UgdGhlIG1hcCwgc29ydCBvbiBwZXJpb2QuCi0gKi8KLQotc3RhdGljIGludCBwZXJpb2RfY21wKHU2NCBwZXJpb2RfYSwgdTY0IHBlcmlvZF9iKQorc3RhdGljIGludCBoaXN0X2VudHJ5X19zb3J0KHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYikKIHsKLQlpZiAocGVyaW9kX2EgPiBwZXJpb2RfYikKLQkJcmV0dXJuIDE7Ci0JaWYgKHBlcmlvZF9hIDwgcGVyaW9kX2IpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQ7CisJaW50NjRfdCBjbXAgPSAwOwogCi1zdGF0aWMgaW50IGhpc3RfZW50cnlfX3NvcnRfb25fcGVyaW9kKHN0cnVjdCBoaXN0X2VudHJ5ICphLAotCQkJCSAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpiKQotewotCWludCByZXQ7Ci0JaW50IGksIG5yX21lbWJlcnM7Ci0Jc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOwotCXN0cnVjdCBoaXN0X2VudHJ5ICpwYWlyOwotCXU2NCAqcGVyaW9kc19hLCAqcGVyaW9kc19iOworCXBlcmZfaHBwX19mb3JfZWFjaF9zb3J0X2xpc3QoZm10KSB7CisJCWlmIChwZXJmX2hwcF9fc2hvdWxkX3NraXAoZm10KSkKKwkJCWNvbnRpbnVlOwogCi0JcmV0ID0gcGVyaW9kX2NtcChhLT5zdGF0LnBlcmlvZCwgYi0+c3RhdC5wZXJpb2QpOwotCWlmIChyZXQgfHwgIXN5bWJvbF9jb25mLmV2ZW50X2dyb3VwKQotCQlyZXR1cm4gcmV0OwotCi0JZXZzZWwgPSBoaXN0c190b19ldnNlbChhLT5oaXN0cyk7Ci0JbnJfbWVtYmVycyA9IGV2c2VsLT5ucl9tZW1iZXJzOwotCWlmIChucl9tZW1iZXJzIDw9IDEpCi0JCXJldHVybiByZXQ7Ci0KLQlwZXJpb2RzX2EgPSB6YWxsb2Moc2l6ZW9mKHBlcmlvZHNfYSkgKiBucl9tZW1iZXJzKTsKLQlwZXJpb2RzX2IgPSB6YWxsb2Moc2l6ZW9mKHBlcmlvZHNfYikgKiBucl9tZW1iZXJzKTsKLQotCWlmICghcGVyaW9kc19hIHx8ICFwZXJpb2RzX2IpCi0JCWdvdG8gb3V0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwYWlyLCAmYS0+cGFpcnMuaGVhZCwgcGFpcnMubm9kZSkgewotCQlldnNlbCA9IGhpc3RzX3RvX2V2c2VsKHBhaXItPmhpc3RzKTsKLQkJcGVyaW9kc19hW3BlcmZfZXZzZWxfX2dyb3VwX2lkeChldnNlbCldID0gcGFpci0+c3RhdC5wZXJpb2Q7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwYWlyLCAmYi0+cGFpcnMuaGVhZCwgcGFpcnMubm9kZSkgewotCQlldnNlbCA9IGhpc3RzX3RvX2V2c2VsKHBhaXItPmhpc3RzKTsKLQkJcGVyaW9kc19iW3BlcmZfZXZzZWxfX2dyb3VwX2lkeChldnNlbCldID0gcGFpci0+c3RhdC5wZXJpb2Q7Ci0JfQotCi0JZm9yIChpID0gMTsgaSA8IG5yX21lbWJlcnM7IGkrKykgewotCQlyZXQgPSBwZXJpb2RfY21wKHBlcmlvZHNfYVtpXSwgcGVyaW9kc19iW2ldKTsKLQkJaWYgKHJldCkKKwkJY21wID0gZm10LT5zb3J0KGEsIGIpOworCQlpZiAoY21wKQogCQkJYnJlYWs7CiAJfQogCi1vdXQ6Ci0JZnJlZShwZXJpb2RzX2EpOwotCWZyZWUocGVyaW9kc19iKTsKKwlyZXR1cm4gY21wOworfQogCi0JcmV0dXJuIHJldDsKK3N0YXRpYyB2b2lkIGhpc3RzX19yZXNldF9maWx0ZXJfc3RhdHMoc3RydWN0IGhpc3RzICpoaXN0cykKK3sKKwloaXN0cy0+bnJfbm9uX2ZpbHRlcmVkX2VudHJpZXMgPSAwOworCWhpc3RzLT5zdGF0cy50b3RhbF9ub25fZmlsdGVyZWRfcGVyaW9kID0gMDsKK30KKwordm9pZCBoaXN0c19fcmVzZXRfc3RhdHMoc3RydWN0IGhpc3RzICpoaXN0cykKK3sKKwloaXN0cy0+bnJfZW50cmllcyA9IDA7CisJaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCA9IDA7CisKKwloaXN0c19fcmVzZXRfZmlsdGVyX3N0YXRzKGhpc3RzKTsKK30KKworc3RhdGljIHZvaWQgaGlzdHNfX2luY19maWx0ZXJfc3RhdHMoc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IGhpc3RfZW50cnkgKmgpCit7CisJaGlzdHMtPm5yX25vbl9maWx0ZXJlZF9lbnRyaWVzKys7CisJaGlzdHMtPnN0YXRzLnRvdGFsX25vbl9maWx0ZXJlZF9wZXJpb2QgKz0gaC0+c3RhdC5wZXJpb2Q7Cit9CisKK3ZvaWQgaGlzdHNfX2luY19zdGF0cyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaCkKK3sKKwlpZiAoIWgtPmZpbHRlcmVkKQorCQloaXN0c19faW5jX2ZpbHRlcl9zdGF0cyhoaXN0cywgaCk7CisKKwloaXN0cy0+bnJfZW50cmllcysrOworCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgKz0gaC0+c3RhdC5wZXJpb2Q7CiB9CiAKIHN0YXRpYyB2b2lkIF9faGlzdHNfX2luc2VydF9vdXRwdXRfZW50cnkoc3RydWN0IHJiX3Jvb3QgKmVudHJpZXMsCkBAIC02NDcsNyArNjMyLDcgQEAKIAkJcGFyZW50ID0gKnA7CiAJCWl0ZXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKIAotCQlpZiAoaGlzdF9lbnRyeV9fc29ydF9vbl9wZXJpb2QoaGUsIGl0ZXIpID4gMCkKKwkJaWYgKGhpc3RfZW50cnlfX3NvcnQoaGUsIGl0ZXIpID4gMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKQEAgLTY3NCw4ICs2NTksNyBAQAogCW5leHQgPSByYl9maXJzdChyb290KTsKIAloaXN0cy0+ZW50cmllcyA9IFJCX1JPT1Q7CiAKLQloaXN0cy0+bnJfZW50cmllcyA9IDA7Ci0JaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCA9IDA7CisJaGlzdHNfX3Jlc2V0X3N0YXRzKGhpc3RzKTsKIAloaXN0c19fcmVzZXRfY29sX2xlbihoaXN0cyk7CiAKIAl3aGlsZSAobmV4dCkgewpAQCAtNjgzLDcgKzY2NywxMCBAQAogCQluZXh0ID0gcmJfbmV4dCgmbi0+cmJfbm9kZV9pbik7CiAKIAkJX19oaXN0c19faW5zZXJ0X291dHB1dF9lbnRyeSgmaGlzdHMtPmVudHJpZXMsIG4sIG1pbl9jYWxsY2hhaW5faGl0cyk7Ci0JCWhpc3RzX19pbmNfbnJfZW50cmllcyhoaXN0cywgbik7CisJCWhpc3RzX19pbmNfc3RhdHMoaGlzdHMsIG4pOworCisJCWlmICghbi0+ZmlsdGVyZWQpCisJCQloaXN0c19fY2FsY19jb2xfbGVuKGhpc3RzLCBuKTsKIAl9CiB9CiAKQEAgLTY5NCwxMyArNjgxLDEzIEBACiAJaWYgKGgtPmZpbHRlcmVkKQogCQlyZXR1cm47CiAKLQkrK2hpc3RzLT5ucl9lbnRyaWVzOwotCWlmIChoLT5tcy51bmZvbGRlZCkKLQkJaGlzdHMtPm5yX2VudHJpZXMgKz0gaC0+bnJfcm93czsKKwkvKiBmb3JjZSBmb2xkIHVuZmlsdGVyZWQgZW50cnkgZm9yIHNpbXBsaWNpdHkgKi8KKwloLT5tcy51bmZvbGRlZCA9IGZhbHNlOwogCWgtPnJvd19vZmZzZXQgPSAwOwotCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgKz0gaC0+c3RhdC5wZXJpb2Q7Ci0JaGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdICs9IGgtPnN0YXQubnJfZXZlbnRzOwogCisJaGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzICs9IGgtPnN0YXQubnJfZXZlbnRzOworCisJaGlzdHNfX2luY19maWx0ZXJfc3RhdHMoaGlzdHMsIGgpOwogCWhpc3RzX19jYWxjX2NvbF9sZW4oaGlzdHMsIGgpOwogfQogCkBAIC03MjEsOCArNzA4LDkgQEAKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAKLQloaXN0cy0+bnJfZW50cmllcyA9IGhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QgPSAwOwotCWhpc3RzLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXSA9IDA7CisJaGlzdHMtPnN0YXRzLm5yX25vbl9maWx0ZXJlZF9zYW1wbGVzID0gMDsKKworCWhpc3RzX19yZXNldF9maWx0ZXJfc3RhdHMoaGlzdHMpOwogCWhpc3RzX19yZXNldF9jb2xfbGVuKGhpc3RzKTsKIAogCWZvciAobmQgPSByYl9maXJzdCgmaGlzdHMtPmVudHJpZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewpAQCAtNzU0LDggKzc0Miw5IEBACiB7CiAJc3RydWN0IHJiX25vZGUgKm5kOwogCi0JaGlzdHMtPm5yX2VudHJpZXMgPSBoaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kID0gMDsKLQloaXN0cy0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0gPSAwOworCWhpc3RzLT5zdGF0cy5ucl9ub25fZmlsdGVyZWRfc2FtcGxlcyA9IDA7CisKKwloaXN0c19fcmVzZXRfZmlsdGVyX3N0YXRzKGhpc3RzKTsKIAloaXN0c19fcmVzZXRfY29sX2xlbihoaXN0cyk7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJmhpc3RzLT5lbnRyaWVzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKQEAgLTc4NSw4ICs3NzQsOSBAQAogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWhpc3RzLT5ucl9lbnRyaWVzID0gaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCA9IDA7Ci0JaGlzdHMtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdID0gMDsKKwloaXN0cy0+c3RhdHMubnJfbm9uX2ZpbHRlcmVkX3NhbXBsZXMgPSAwOworCisJaGlzdHNfX3Jlc2V0X2ZpbHRlcl9zdGF0cyhoaXN0cyk7CiAJaGlzdHNfX3Jlc2V0X2NvbF9sZW4oaGlzdHMpOwogCiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZoaXN0cy0+ZW50cmllcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CkBAIC04NDcsNyArODM3LDcgQEAKIAkJaGUtPmhpc3RzID0gaGlzdHM7CiAJCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGVfaW4sIHBhcmVudCwgcCk7CiAJCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGVfaW4sIHJvb3QpOwotCQloaXN0c19faW5jX25yX2VudHJpZXMoaGlzdHMsIGhlKTsKKwkJaGlzdHNfX2luY19zdGF0cyhoaXN0cywgaGUpOwogCQloZS0+ZHVtbXkgPSB0cnVlOwogCX0KIG91dDoKQEAgLTkzMSwzICs5MjEsMzAgQEAKIAogCXJldHVybiAwOwogfQorCit1NjQgaGlzdHNfX3RvdGFsX3BlcmlvZChzdHJ1Y3QgaGlzdHMgKmhpc3RzKQoreworCXJldHVybiBzeW1ib2xfY29uZi5maWx0ZXJfcmVsYXRpdmUgPyBoaXN0cy0+c3RhdHMudG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZCA6CisJCWhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2Q7Cit9CisKK2ludCBwYXJzZV9maWx0ZXJfcGVyY2VudGFnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX19tYXliZV91bnVzZWQsCisJCQkgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQgX19tYXliZV91bnVzZWQpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAicmVsYXRpdmUiKSkKKwkJc3ltYm9sX2NvbmYuZmlsdGVyX3JlbGF0aXZlID0gdHJ1ZTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImFic29sdXRlIikpCisJCXN5bWJvbF9jb25mLmZpbHRlcl9yZWxhdGl2ZSA9IGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwZXJmX2hpc3RfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiaGlzdC5wZXJjZW50YWdlIikpCisJCXJldHVybiBwYXJzZV9maWx0ZXJfcGVyY2VudGFnZShOVUxMLCB2YWx1ZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmggYi90b29scy9wZXJmL3V0aWwvaGlzdC5oCmluZGV4IDFmMWY1MTMuLmE4NDE4ZDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuaApAQCAtMzcsOSArMzcsMTEgQEAKICAqLwogc3RydWN0IGV2ZW50c19zdGF0cyB7CiAJdTY0IHRvdGFsX3BlcmlvZDsKKwl1NjQgdG90YWxfbm9uX2ZpbHRlcmVkX3BlcmlvZDsKIAl1NjQgdG90YWxfbG9zdDsKIAl1NjQgdG90YWxfaW52YWxpZF9jaGFpbnM7CiAJdTMyIG5yX2V2ZW50c1tQRVJGX1JFQ09SRF9IRUFERVJfTUFYXTsKKwl1MzIgbnJfbm9uX2ZpbHRlcmVkX3NhbXBsZXM7CiAJdTMyIG5yX2xvc3Rfd2FybmVkOwogCXUzMiBucl91bmtub3duX2V2ZW50czsKIAl1MzIgbnJfaW52YWxpZF9jaGFpbnM7CkBAIC04Myw2ICs4NSw3IEBACiAJc3RydWN0IHJiX3Jvb3QJCWVudHJpZXM7CiAJc3RydWN0IHJiX3Jvb3QJCWVudHJpZXNfY29sbGFwc2VkOwogCXU2NAkJCW5yX2VudHJpZXM7CisJdTY0CQkJbnJfbm9uX2ZpbHRlcmVkX2VudHJpZXM7CiAJY29uc3Qgc3RydWN0IHRocmVhZAkqdGhyZWFkX2ZpbHRlcjsKIAljb25zdCBzdHJ1Y3QgZHNvCSpkc29fZmlsdGVyOwogCWNvbnN0IGNoYXIJCSp1aWRfZmlsdGVyX3N0cjsKQEAgLTExMiw3ICsxMTUsOSBAQAogdm9pZCBoaXN0c19fZGVjYXlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBib29sIHphcF91c2VyLCBib29sIHphcF9rZXJuZWwpOwogdm9pZCBoaXN0c19fb3V0cHV0X3JlY2FsY19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqaGlzdHMsIGludCBtYXhfcm93cyk7CiAKLXZvaWQgaGlzdHNfX2luY19ucl9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsIHN0cnVjdCBoaXN0X2VudHJ5ICpoKTsKK3U2NCBoaXN0c19fdG90YWxfcGVyaW9kKHN0cnVjdCBoaXN0cyAqaGlzdHMpOwordm9pZCBoaXN0c19fcmVzZXRfc3RhdHMoc3RydWN0IGhpc3RzICpoaXN0cyk7Cit2b2lkIGhpc3RzX19pbmNfc3RhdHMoc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IGhpc3RfZW50cnkgKmgpOwogdm9pZCBoaXN0c19faW5jX25yX2V2ZW50cyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLCB1MzIgdHlwZSk7CiB2b2lkIGV2ZW50c19zdGF0c19faW5jKHN0cnVjdCBldmVudHNfc3RhdHMgKnN0YXRzLCB1MzIgdHlwZSk7CiBzaXplX3QgZXZlbnRzX3N0YXRzX19mcHJpbnRmKHN0cnVjdCBldmVudHNfc3RhdHMgKnN0YXRzLCBGSUxFICpmcCk7CkBAIC0xMjQsNiArMTI5LDEyIEBACiB2b2lkIGhpc3RzX19maWx0ZXJfYnlfdGhyZWFkKHN0cnVjdCBoaXN0cyAqaGlzdHMpOwogdm9pZCBoaXN0c19fZmlsdGVyX2J5X3N5bWJvbChzdHJ1Y3QgaGlzdHMgKmhpc3RzKTsKIAorc3RhdGljIGlubGluZSBib29sIGhpc3RzX19oYXNfZmlsdGVyKHN0cnVjdCBoaXN0cyAqaGlzdHMpCit7CisJcmV0dXJuIGhpc3RzLT50aHJlYWRfZmlsdGVyIHx8IGhpc3RzLT5kc29fZmlsdGVyIHx8CisJCWhpc3RzLT5zeW1ib2xfZmlsdGVyX3N0cjsKK30KKwogdTE2IGhpc3RzX19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqaGlzdHMsIGVudW0gaGlzdF9jb2x1bW4gY29sKTsKIHZvaWQgaGlzdHNfX3NldF9jb2xfbGVuKHN0cnVjdCBoaXN0cyAqaGlzdHMsIGVudW0gaGlzdF9jb2x1bW4gY29sLCB1MTYgbGVuKTsKIGJvb2wgaGlzdHNfX25ld19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqaGlzdHMsIGVudW0gaGlzdF9jb2x1bW4gY29sLCB1MTYgbGVuKTsKQEAgLTE0OSwxNSArMTYwLDI5IEBACiAJCSAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKTsKIAlpbnQgKCplbnRyeSkoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10LCBzdHJ1Y3QgcGVyZl9ocHAgKmhwcCwKIAkJICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpOworCWludDY0X3QgKCpjbXApKHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYik7CisJaW50NjRfdCAoKmNvbGxhcHNlKShzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpOworCWludDY0X3QgKCpzb3J0KShzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpOwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgc29ydF9saXN0OwogfTsKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcGVyZl9ocHBfX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwZXJmX2hwcF9fc29ydF9saXN0OwogCiAjZGVmaW5lIHBlcmZfaHBwX19mb3JfZWFjaF9mb3JtYXQoZm9ybWF0KSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmb3JtYXQsICZwZXJmX2hwcF9fbGlzdCwgbGlzdCkKIAorI2RlZmluZSBwZXJmX2hwcF9fZm9yX2VhY2hfZm9ybWF0X3NhZmUoZm9ybWF0LCB0bXApCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9ybWF0LCB0bXAsICZwZXJmX2hwcF9fbGlzdCwgbGlzdCkKKworI2RlZmluZSBwZXJmX2hwcF9fZm9yX2VhY2hfc29ydF9saXN0KGZvcm1hdCkgXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoZm9ybWF0LCAmcGVyZl9ocHBfX3NvcnRfbGlzdCwgc29ydF9saXN0KQorCisjZGVmaW5lIHBlcmZfaHBwX19mb3JfZWFjaF9zb3J0X2xpc3Rfc2FmZShmb3JtYXQsIHRtcCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb3JtYXQsIHRtcCwgJnBlcmZfaHBwX19zb3J0X2xpc3QsIHNvcnRfbGlzdCkKKwogZXh0ZXJuIHN0cnVjdCBwZXJmX2hwcF9mbXQgcGVyZl9ocHBfX2Zvcm1hdFtdOwogCiBlbnVtIHsKQEAgLTE3NiwxNCArMjAxLDIzIEBACiB2b2lkIHBlcmZfaHBwX19pbml0KHZvaWQpOwogdm9pZCBwZXJmX2hwcF9fY29sdW1uX3JlZ2lzdGVyKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZvcm1hdCk7CiB2b2lkIHBlcmZfaHBwX19jb2x1bW5fZW5hYmxlKHVuc2lnbmVkIGNvbCk7Cit2b2lkIHBlcmZfaHBwX19yZWdpc3Rlcl9zb3J0X2ZpZWxkKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZvcm1hdCk7Cit2b2lkIHBlcmZfaHBwX19zZXR1cF9vdXRwdXRfZmllbGQodm9pZCk7Cit2b2lkIHBlcmZfaHBwX19yZXNldF9vdXRwdXRfZmllbGQodm9pZCk7Cit2b2lkIHBlcmZfaHBwX19hcHBlbmRfc29ydF9rZXlzKHZvaWQpOworCitib29sIHBlcmZfaHBwX19pc19zb3J0X2VudHJ5KHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZvcm1hdCk7Citib29sIHBlcmZfaHBwX19zYW1lX3NvcnRfZW50cnkoc3RydWN0IHBlcmZfaHBwX2ZtdCAqYSwgc3RydWN0IHBlcmZfaHBwX2ZtdCAqYik7Citib29sIHBlcmZfaHBwX19zaG91bGRfc2tpcChzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmb3JtYXQpOwordm9pZCBwZXJmX2hwcF9fcmVzZXRfd2lkdGgoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzKTsKIAogdHlwZWRlZiB1NjQgKCpocHBfZmllbGRfZm4pKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSk7CiB0eXBlZGVmIGludCAoKmhwcF9jYWxsYmFja19mbikoc3RydWN0IHBlcmZfaHBwICpocHAsIGJvb2wgZnJvbnQpOwogdHlwZWRlZiBpbnQgKCpocHBfc25wcmludF9mbikoc3RydWN0IHBlcmZfaHBwICpocHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogaW50IF9faHBwX19mbXQoc3RydWN0IHBlcmZfaHBwICpocHAsIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwKLQkgICAgICAgaHBwX2ZpZWxkX2ZuIGdldF9maWVsZCwgaHBwX2NhbGxiYWNrX2ZuIGNhbGxiYWNrLAotCSAgICAgICBjb25zdCBjaGFyICpmbXQsIGhwcF9zbnByaW50X2ZuIHByaW50X2ZuLCBib29sIGZtdF9wZXJjZW50KTsKKwkgICAgICAgaHBwX2ZpZWxkX2ZuIGdldF9maWVsZCwgY29uc3QgY2hhciAqZm10LAorCSAgICAgICBocHBfc25wcmludF9mbiBwcmludF9mbiwgYm9vbCBmbXRfcGVyY2VudCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZHZhbmNlX2hwcChzdHJ1Y3QgcGVyZl9ocHAgKmhwcCwgaW50IGluYykKIHsKQEAgLTI1MCw0ICsyODQsMTAgQEAKICNlbmRpZgogCiB1bnNpZ25lZCBpbnQgaGlzdHNfX3NvcnRfbGlzdF93aWR0aChzdHJ1Y3QgaGlzdHMgKmhpc3RzKTsKKworc3RydWN0IG9wdGlvbjsKK2ludCBwYXJzZV9maWx0ZXJfcGVyY2VudGFnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX19tYXliZV91bnVzZWQsCisJCQkgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQgX19tYXliZV91bnVzZWQpOworaW50IHBlcmZfaGlzdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKICNlbmRpZgkvKiBfX1BFUkZfSElTVF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IGJiMTYyZTQuLjAxZmZkMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC00LDYgKzQsOSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCisjZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXAorCXVuc2lnbmVkIGxvbmcgbmFtZVtCSVRTX1RPX0xPTkdTKGJpdHMpXQorCiBpbnQgX19iaXRtYXBfd2VpZ2h0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IGJpdHMpOwogdm9pZCBfX2JpdG1hcF9vcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcDEsCiAJCSBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAyLCBpbnQgYml0cyk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9leHBvcnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDNlMmRjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2V4cG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIFBFUkZfTElOVVhfTU9EVUxFX0gKLSNkZWZpbmUgUEVSRl9MSU5VWF9NT0RVTEVfSAotCi0jZGVmaW5lIEVYUE9SVF9TWU1CT0wobmFtZSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9saXN0LmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggYmZlMGEyYS4uNzZkZGJjNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9saW51eC9saXN0LmgiCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQ2NDc4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9QRVJGX0xJTlVYX1RZUEVTX0hfCi0jZGVmaW5lIF9QRVJGX0xJTlVYX1RZUEVTX0hfCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotI2lmbmRlZiBfX2JpdHdpc2UKLSNkZWZpbmUgX19iaXR3aXNlCi0jZW5kaWYKLQotI2lmbmRlZiBfX2xlMzIKLXR5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fbGUzMjsKLSNlbmRpZgotCi0jZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXAotCXVuc2lnbmVkIGxvbmcgbmFtZVtCSVRTX1RPX0xPTkdTKGJpdHMpXQotCi1zdHJ1Y3QgbGlzdF9oZWFkIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqcHJldjsKLX07Ci0KLXN0cnVjdCBobGlzdF9oZWFkIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7Ci19OwotCi1zdHJ1Y3QgaGxpc3Rfbm9kZSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5leHQsICoqcHByZXY7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCmluZGV4IDI3YzJhNWUuLjc0MDlhYzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYwpAQCAtMzE2LDYgKzMxNiwxNyBAQAogCQlyYl9saW5rX25vZGUoJnRoLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCQlyYl9pbnNlcnRfY29sb3IoJnRoLT5yYl9ub2RlLCAmbWFjaGluZS0+dGhyZWFkcyk7CiAJCW1hY2hpbmUtPmxhc3RfbWF0Y2ggPSB0aDsKKworCQkvKgorCQkgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgbWFwX2dyb3VwcyBzZXBhcmF0ZWx5CisJCSAqIGFmdGVyIHJiIHRyZWUgaXMgdXBkYXRlZC4KKwkJICoKKwkJICogVGhlIHJlYXNvbiBpcyB0aGF0IHdlIGNhbGwgbWFjaGluZV9fZmluZG5ld190aHJlYWQKKwkJICogd2l0aGluIHRocmVhZF9faW5pdF9tYXBfZ3JvdXBzIHRvIGZpbmQgdGhlIHRocmVhZAorCQkgKiBsZWFkZXIgYW5kIHRoYXQgd291bGQgc2NyZXdlZCB0aGUgcmIgdHJlZS4KKwkJICovCisJCWlmICh0aHJlYWRfX2luaXRfbWFwX2dyb3Vwcyh0aCwgbWFjaGluZSkpCisJCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gdGg7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFwLmMgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKaW5kZXggMzljZDJkMC4uOGNjYmIzMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hcC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwpAQCAtMzIsNiArMzIsOTMgQEAKIAkgICAgICAgIXN0cmNtcChmaWxlbmFtZSwgIltoZWFwXSIpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpc19hbmRyb2lkX2xpYihjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlyZXR1cm4gIXN0cm5jbXAoZmlsZW5hbWUsICIvZGF0YS9hcHAtbGliIiwgMTMpIHx8CisJICAgICAgICFzdHJuY21wKGZpbGVuYW1lLCAiL3N5c3RlbS9saWIiLCAxMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCByZXBsYWNlX2FuZHJvaWRfbGliKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpuZXdmaWxlbmFtZSkKK3sKKwljb25zdCBjaGFyICpsaWJuYW1lOworCWNoYXIgKmFwcF9hYmk7CisJc2l6ZV90IGFwcF9hYmlfbGVuZ3RoLCBuZXdfbGVuZ3RoOworCXNpemVfdCBsaWJfbGVuZ3RoID0gMDsKKworCWxpYm5hbWUgID0gc3RycmNocihmaWxlbmFtZSwgJy8nKTsKKwlpZiAobGlibmFtZSkKKwkJbGliX2xlbmd0aCA9IHN0cmxlbihsaWJuYW1lKTsKKworCWFwcF9hYmkgPSBnZXRlbnYoIkFQUF9BQkkiKTsKKwlpZiAoIWFwcF9hYmkpCisJCXJldHVybiBmYWxzZTsKKworCWFwcF9hYmlfbGVuZ3RoID0gc3RybGVuKGFwcF9hYmkpOworCisJaWYgKCFzdHJuY21wKGZpbGVuYW1lLCAiL2RhdGEvYXBwLWxpYiIsIDEzKSkgeworCQljaGFyICphcGtfcGF0aDsKKworCQlpZiAoIWFwcF9hYmlfbGVuZ3RoKQorCQkJcmV0dXJuIGZhbHNlOworCisJCW5ld19sZW5ndGggPSA3ICsgYXBwX2FiaV9sZW5ndGggKyBsaWJfbGVuZ3RoOworCisJCWFwa19wYXRoID0gZ2V0ZW52KCJBUEtfUEFUSCIpOworCQlpZiAoYXBrX3BhdGgpIHsKKwkJCW5ld19sZW5ndGggKz0gc3RybGVuKGFwa19wYXRoKSArIDE7CisJCQlpZiAobmV3X2xlbmd0aCA+IFBBVEhfTUFYKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCXNucHJpbnRmKG5ld2ZpbGVuYW1lLCBuZXdfbGVuZ3RoLAorCQkJCSAiJXMvbGlicy8lcy8lcyIsIGFwa19wYXRoLCBhcHBfYWJpLCBsaWJuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZXdfbGVuZ3RoID4gUEFUSF9NQVgpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJc25wcmludGYobmV3ZmlsZW5hbWUsIG5ld19sZW5ndGgsCisJCQkJICJsaWJzLyVzLyVzIiwgYXBwX2FiaSwgbGlibmFtZSk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKCFzdHJuY21wKGZpbGVuYW1lLCAiL3N5c3RlbS9saWIvIiwgMTEpKSB7CisJCWNoYXIgKm5kaywgKmFwcDsKKwkJY29uc3QgY2hhciAqYXJjaDsKKwkJc2l6ZV90IG5ka19sZW5ndGg7CisJCXNpemVfdCBhcHBfbGVuZ3RoOworCisJCW5kayA9IGdldGVudigiTkRLX1JPT1QiKTsKKwkJYXBwID0gZ2V0ZW52KCJBUFBfUExBVEZPUk0iKTsKKworCQlpZiAoIShuZGsgJiYgYXBwKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQluZGtfbGVuZ3RoID0gc3RybGVuKG5kayk7CisJCWFwcF9sZW5ndGggPSBzdHJsZW4oYXBwKTsKKworCQlpZiAoIShuZGtfbGVuZ3RoICYmIGFwcF9sZW5ndGggJiYgYXBwX2FiaV9sZW5ndGgpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWFyY2ggPSAhc3RybmNtcChhcHBfYWJpLCAiYXJtIiwgMykgPyAiYXJtIiA6CisJCSAgICAgICAhc3RybmNtcChhcHBfYWJpLCAibWlwcyIsIDQpID8gIm1pcHMiIDoKKwkJICAgICAgICFzdHJuY21wKGFwcF9hYmksICJ4ODYiLCAzKSA/ICJ4ODYiIDogTlVMTDsKKworCQlpZiAoIWFyY2gpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJbmV3X2xlbmd0aCA9IDI3ICsgbmRrX2xlbmd0aCArCisJCQkgICAgIGFwcF9sZW5ndGggKyBsaWJfbGVuZ3RoCisJCQkgICArIHN0cmxlbihhcmNoKTsKKworCQlpZiAobmV3X2xlbmd0aCA+IFBBVEhfTUFYKQorCQkJcmV0dXJuIGZhbHNlOworCQlzbnByaW50ZihuZXdmaWxlbmFtZSwgbmV3X2xlbmd0aCwKKwkJCSIlcy9wbGF0Zm9ybXMvJXMvYXJjaC0lcy91c3IvbGliLyVzIiwKKwkJCW5kaywgYXBwLCBhcmNoLCBsaWJuYW1lKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICptYXAsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgcGdvZmYsIHN0cnVjdCBkc28gKmRzbykKIHsKQEAgLTU5LDggKzE0Niw5IEBACiAJaWYgKG1hcCAhPSBOVUxMKSB7CiAJCWNoYXIgbmV3ZmlsZW5hbWVbUEFUSF9NQVhdOwogCQlzdHJ1Y3QgZHNvICpkc287Ci0JCWludCBhbm9uLCBub19kc28sIHZkc287CisJCWludCBhbm9uLCBub19kc28sIHZkc28sIGFuZHJvaWQ7CiAKKwkJYW5kcm9pZCA9IGlzX2FuZHJvaWRfbGliKGZpbGVuYW1lKTsKIAkJYW5vbiA9IGlzX2Fub25fbWVtb3J5KGZpbGVuYW1lKTsKIAkJdmRzbyA9IGlzX3Zkc29fbWFwKGZpbGVuYW1lKTsKIAkJbm9fZHNvID0gaXNfbm9fZHNvX21lbW9yeShmaWxlbmFtZSk7CkBAIC03NSw2ICsxNjMsMTEgQEAKIAkJCWZpbGVuYW1lID0gbmV3ZmlsZW5hbWU7CiAJCX0KIAorCQlpZiAoYW5kcm9pZCkgeworCQkJaWYgKHJlcGxhY2VfYW5kcm9pZF9saWIoZmlsZW5hbWUsIG5ld2ZpbGVuYW1lKSkKKwkJCQlmaWxlbmFtZSA9IG5ld2ZpbGVuYW1lOworCQl9CisKIAkJaWYgKHZkc28pIHsKIAkJCXBnb2ZmID0gMDsKIAkJCWRzbyA9IHZkc29fX2Rzb19maW5kbmV3KGRzb3NfX2xpc3QpOwpAQCAtMzIzLDYgKzQxNiw3IEBACiAJCUlOSVRfTElTVF9IRUFEKCZtZy0+cmVtb3ZlZF9tYXBzW2ldKTsKIAl9CiAJbWctPm1hY2hpbmUgPSBOVUxMOworCW1nLT5yZWZjbnQgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBtYXBzX19kZWxldGUoc3RydWN0IHJiX3Jvb3QgKm1hcHMpCkBAIC0zNTgsNiArNDUyLDI4IEBACiAJfQogfQogCitzdHJ1Y3QgbWFwX2dyb3VwcyAqbWFwX2dyb3Vwc19fbmV3KHZvaWQpCit7CisJc3RydWN0IG1hcF9ncm91cHMgKm1nID0gbWFsbG9jKHNpemVvZigqbWcpKTsKKworCWlmIChtZyAhPSBOVUxMKQorCQltYXBfZ3JvdXBzX19pbml0KG1nKTsKKworCXJldHVybiBtZzsKK30KKwordm9pZCBtYXBfZ3JvdXBzX19kZWxldGUoc3RydWN0IG1hcF9ncm91cHMgKm1nKQoreworCW1hcF9ncm91cHNfX2V4aXQobWcpOworCWZyZWUobWcpOworfQorCit2b2lkIG1hcF9ncm91cHNfX3B1dChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcpCit7CisJaWYgKC0tbWctPnJlZmNudCA9PSAwKQorCQltYXBfZ3JvdXBzX19kZWxldGUobWcpOworfQorCiB2b2lkIG1hcF9ncm91cHNfX2ZsdXNoKHN0cnVjdCBtYXBfZ3JvdXBzICptZykKIHsKIAlpbnQgdHlwZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAppbmRleCBmMDBmMDU4Li5hZTJkNDUxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogZW51bSBtYXBfdHlwZSB7CiAJTUFQX19GVU5DVElPTiA9IDAsCkBAIC01OSw4ICs1OSwyMCBAQAogCXN0cnVjdCByYl9yb290CSBtYXBzW01BUF9fTlJfVFlQRVNdOwogCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlZF9tYXBzW01BUF9fTlJfVFlQRVNdOwogCXN0cnVjdCBtYWNoaW5lCSAqbWFjaGluZTsKKwlpbnQJCSByZWZjbnQ7CiB9OwogCitzdHJ1Y3QgbWFwX2dyb3VwcyAqbWFwX2dyb3Vwc19fbmV3KHZvaWQpOwordm9pZCBtYXBfZ3JvdXBzX19kZWxldGUoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwX2dyb3VwcyAqbWFwX2dyb3Vwc19fZ2V0KHN0cnVjdCBtYXBfZ3JvdXBzICptZykKK3sKKwkrK21nLT5yZWZjbnQ7CisJcmV0dXJuIG1nOworfQorCit2b2lkIG1hcF9ncm91cHNfX3B1dChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWFwICptYXBfX2ttYXAoc3RydWN0IG1hcCAqbWFwKQogewogCXJldHVybiAoc3RydWN0IGttYXAgKikobWFwICsgMSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFnZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYWdlci5jCmluZGV4IDMzMjJiODQuLjMxZWUwMmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYWdlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYWdlci5jCkBAIC01NywxMyArNTcsMTMgQEAKIAl9CiAJaWYgKCFwYWdlcikKIAkJcGFnZXIgPSBnZXRlbnYoIlBBR0VSIik7Ci0JaWYgKCFwYWdlcikgewotCQlpZiAoIWFjY2VzcygiL3Vzci9iaW4vcGFnZXIiLCBYX09LKSkKLQkJCXBhZ2VyID0gIi91c3IvYmluL3BhZ2VyIjsKLQl9CisJaWYgKCEocGFnZXIgfHwgYWNjZXNzKCIvdXNyL2Jpbi9wYWdlciIsIFhfT0spKSkKKwkJcGFnZXIgPSAiL3Vzci9iaW4vcGFnZXIiOworCWlmICghKHBhZ2VyIHx8IGFjY2VzcygiL3Vzci9iaW4vbGVzcyIsIFhfT0spKSkKKwkJcGFnZXIgPSAiL3Vzci9iaW4vbGVzcyI7CiAJaWYgKCFwYWdlcikKLQkJcGFnZXIgPSAibGVzcyI7Ci0JZWxzZSBpZiAoISpwYWdlciB8fCAhc3RyY21wKHBhZ2VyLCAiY2F0IikpCisJCXBhZ2VyID0gImNhdCI7CisJaWYgKCEqcGFnZXIgfHwgIXN0cmNtcChwYWdlciwgImNhdCIpKQogCQlyZXR1cm47CiAKIAlzcGF3bmVkX3BhZ2VyID0gMTsgLyogbWVhbnMgd2UgYXJlIGVtaXR0aW5nIHRvIHRlcm1pbmFsICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmggYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKaW5kZXggZjFjYjRjNC4uZGYwOTRiNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaApAQCAtNiw5ICs2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KLSNpbmNsdWRlICJ0eXBlcy5oIgogCiBzdHJ1Y3QgbGlzdF9oZWFkOwogc3RydWN0IHBlcmZfZXZzZWw7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLnkgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLnkKaW5kZXggNGViNjdlYy4uMGJjODdiYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy55CisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMueQpAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAicGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAicGFyc2UtZXZlbnRzLWJpc29uLmgiCkBAIC0yOTksNiArMjk5LDE4IEBACiB9CiAKIGV2ZW50X2xlZ2FjeV90cmFjZXBvaW50OgorUEVfTkFNRSAnLScgUEVfTkFNRSAnOicgUEVfTkFNRQoreworCXN0cnVjdCBwYXJzZV9ldmVudHNfZXZsaXN0ICpkYXRhID0gX2RhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwljaGFyIHN5c19uYW1lWzEyOF07CisJc25wcmludGYoJnN5c19uYW1lLCAxMjgsICIlcy0lcyIsICQxLCAkMyk7CisKKwlBTExPQ19MSVNUKGxpc3QpOworCUFCT1JUX09OKHBhcnNlX2V2ZW50c19hZGRfdHJhY2Vwb2ludChsaXN0LCAmZGF0YS0+aWR4LCAmc3lzX25hbWUsICQ1KSk7CisJJCQgPSBsaXN0OworfQorfAogUEVfTkFNRSAnOicgUEVfTkFNRQogewogCXN0cnVjdCBwYXJzZV9ldmVudHNfZXZsaXN0ICpkYXRhID0gX2RhdGE7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGVyZl9yZWdzLmggYi90b29scy9wZXJmL3V0aWwvcGVyZl9yZWdzLmgKaW5kZXggZDZlOGI2YS4uNzljNzhmNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BlcmZfcmVncy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wZXJmX3JlZ3MuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19QRVJGX1JFR1NfSAogI2RlZmluZSBfX1BFUkZfUkVHU19ICiAKLSNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZXZlbnQuaCIKIAogI2lmZGVmIEhBVkVfUEVSRl9SRUdTX1NVUFBPUlQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYwppbmRleCAwMGE3ZGNiLi43YTgxMWViIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcG11LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5jCkBAIC0yODQsMTcgKzI4NCwxNyBAQAogc3RhdGljIGludCBwbXVfYWxpYXNfdGVybXMoc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhcywKIAkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnRlcm1zKQogewotCXN0cnVjdCBwYXJzZV9ldmVudHNfdGVybSAqdGVybSwgKmNsb25lOworCXN0cnVjdCBwYXJzZV9ldmVudHNfdGVybSAqdGVybSwgKmNsb25lZDsKIAlMSVNUX0hFQUQobGlzdCk7CiAJaW50IHJldDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodGVybSwgJmFsaWFzLT50ZXJtcywgbGlzdCkgewotCQlyZXQgPSBwYXJzZV9ldmVudHNfdGVybV9fY2xvbmUoJmNsb25lLCB0ZXJtKTsKKwkJcmV0ID0gcGFyc2VfZXZlbnRzX3Rlcm1fX2Nsb25lKCZjbG9uZWQsIHRlcm0pOwogCQlpZiAocmV0KSB7CiAJCQlwYXJzZV9ldmVudHNfX2ZyZWVfdGVybXMoJmxpc3QpOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlsaXN0X2FkZF90YWlsKCZjbG9uZS0+bGlzdCwgJmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZjbG9uZWQtPmxpc3QsICZsaXN0KTsKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsIHRlcm1zKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuaAppbmRleCA4YjY0MTI1Li5jMTRhNTQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcG11LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX1BNVV9ICiAjZGVmaW5lIF9fUE1VX0gKIAotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IDU1OTYwZjIuLjY0YTE4NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMTYyNSwxMyArMTYyNSwxNCBAQAogdm9pZCBwZXJmX3Nlc3Npb25fX2ZwcmludGZfaW5mbyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBGSUxFICpmcCwKIAkJCQlib29sIGZ1bGwpCiB7Ci0JaW50IGZkID0gcGVyZl9kYXRhX2ZpbGVfX2ZkKHNlc3Npb24tPmZpbGUpOwogCXN0cnVjdCBzdGF0IHN0OwotCWludCByZXQ7CisJaW50IGZkLCByZXQ7CiAKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMIHx8IGZwID09IE5VTEwpCiAJCXJldHVybjsKIAorCWZkID0gcGVyZl9kYXRhX2ZpbGVfX2ZkKHNlc3Npb24tPmZpbGUpOworCiAJcmV0ID0gZnN0YXQoZmQsICZzdCk7CiAJaWYgKHJldCA9PSAtMSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKaW5kZXggNjM1Y2Q4Zi4uOTAxYjliZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYworKysgYi90b29scy9wZXJmL3V0aWwvc29ydC5jCkBAIC0yLDEyICsyLDE4IEBACiAjaW5jbHVkZSAiaGlzdC5oIgogI2luY2x1ZGUgImNvbW0uaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJldnNlbC5oIgogCiByZWdleF90CQlwYXJlbnRfcmVnZXg7CiBjb25zdCBjaGFyCWRlZmF1bHRfcGFyZW50X3BhdHRlcm5bXSA9ICJec3lzX3xeZG9fcGFnZV9mYXVsdCI7CiBjb25zdCBjaGFyCSpwYXJlbnRfcGF0dGVybiA9IGRlZmF1bHRfcGFyZW50X3BhdHRlcm47CiBjb25zdCBjaGFyCWRlZmF1bHRfc29ydF9vcmRlcltdID0gImNvbW0sZHNvLHN5bWJvbCI7Ci1jb25zdCBjaGFyCSpzb3J0X29yZGVyID0gZGVmYXVsdF9zb3J0X29yZGVyOworY29uc3QgY2hhcglkZWZhdWx0X2JyYW5jaF9zb3J0X29yZGVyW10gPSAiY29tbSxkc29fZnJvbSxzeW1ib2xfZnJvbSxkc29fdG8sc3ltYm9sX3RvIjsKK2NvbnN0IGNoYXIJZGVmYXVsdF9tZW1fc29ydF9vcmRlcltdID0gImxvY2FsX3dlaWdodCxtZW0sc3ltLGRzbyxzeW1ib2xfZGFkZHIsZHNvX2RhZGRyLHNub29wLHRsYixsb2NrZWQiOworY29uc3QgY2hhcglkZWZhdWx0X3RvcF9zb3J0X29yZGVyW10gPSAiZHNvLHN5bWJvbCI7Citjb25zdCBjaGFyCWRlZmF1bHRfZGlmZl9zb3J0X29yZGVyW10gPSAiZHNvLHN5bWJvbCI7Citjb25zdCBjaGFyCSpzb3J0X29yZGVyOworY29uc3QgY2hhcgkqZmllbGRfb3JkZXI7CiByZWdleF90CQlpZ25vcmVfY2FsbGVlc19yZWdleDsKIGludAkJaGF2ZV9pZ25vcmVfY2FsbGVlcyA9IDA7CiBpbnQJCXNvcnRfX25lZWRfY29sbGFwc2UgPSAwOwpAQCAtMTYsOSArMjIsNiBAQAogaW50CQlzb3J0X19oYXNfZHNvID0gMDsKIGVudW0gc29ydF9tb2RlCXNvcnRfX21vZGUgPSBTT1JUX01PREVfX05PUk1BTDsKIAotZW51bSBzb3J0X3R5cGUJc29ydF9fZmlyc3RfZGltZW5zaW9uOwotCi1MSVNUX0hFQUQoaGlzdF9lbnRyeV9fc29ydF9saXN0KTsKIAogc3RhdGljIGludCByZXBzZXBfc25wcmludGYoY2hhciAqYmYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKQEAgLTkzLDYgKzk2LDEyIEBACiAJcmV0dXJuIGNvbW1fX3N0cihyaWdodC0+Y29tbSkgLSBjb21tX19zdHIobGVmdC0+Y29tbSk7CiB9CiAKK3N0YXRpYyBpbnQ2NF90Citzb3J0X19jb21tX3NvcnQoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlyZXR1cm4gc3RyY21wKGNvbW1fX3N0cihyaWdodC0+Y29tbSksIGNvbW1fX3N0cihsZWZ0LT5jb21tKSk7Cit9CisKIHN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fY29tbV9zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIGNoYXIgKmJmLAogCQkJCSAgICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCB3aWR0aCkKIHsKQEAgLTEwMyw2ICsxMTIsNyBAQAogCS5zZV9oZWFkZXIJPSAiQ29tbWFuZCIsCiAJLnNlX2NtcAkJPSBzb3J0X19jb21tX2NtcCwKIAkuc2VfY29sbGFwc2UJPSBzb3J0X19jb21tX2NvbGxhcHNlLAorCS5zZV9zb3J0CT0gc29ydF9fY29tbV9zb3J0LAogCS5zZV9zbnByaW50Zgk9IGhpc3RfZW50cnlfX2NvbW1fc25wcmludGYsCiAJLnNlX3dpZHRoX2lkeAk9IEhJU1RDX0NPTU0sCiB9OwpAQCAtMTE2LDcgKzEyNiw3IEBACiAJY29uc3QgY2hhciAqZHNvX25hbWVfbCwgKmRzb19uYW1lX3I7CiAKIAlpZiAoIWRzb19sIHx8ICFkc29fcikKLQkJcmV0dXJuIGNtcF9udWxsKGRzb19sLCBkc29fcik7CisJCXJldHVybiBjbXBfbnVsbChkc29fciwgZHNvX2wpOwogCiAJaWYgKHZlcmJvc2UpIHsKIAkJZHNvX25hbWVfbCA9IGRzb19sLT5sb25nX25hbWU7CkBAIC0xMzIsNyArMTQyLDcgQEAKIHN0YXRpYyBpbnQ2NF90CiBzb3J0X19kc29fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCiB7Ci0JcmV0dXJuIF9zb3J0X19kc29fY21wKGxlZnQtPm1zLm1hcCwgcmlnaHQtPm1zLm1hcCk7CisJcmV0dXJuIF9zb3J0X19kc29fY21wKHJpZ2h0LT5tcy5tYXAsIGxlZnQtPm1zLm1hcCk7CiB9CiAKIHN0YXRpYyBpbnQgX2hpc3RfZW50cnlfX2Rzb19zbnByaW50ZihzdHJ1Y3QgbWFwICptYXAsIGNoYXIgKmJmLApAQCAtMjA0LDYgKzIxNCwxNSBAQAogCXJldHVybiBfc29ydF9fc3ltX2NtcChsZWZ0LT5tcy5zeW0sIHJpZ2h0LT5tcy5zeW0pOwogfQogCitzdGF0aWMgaW50NjRfdAorc29ydF9fc3ltX3NvcnQoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlpZiAoIWxlZnQtPm1zLnN5bSB8fCAhcmlnaHQtPm1zLnN5bSkKKwkJcmV0dXJuIGNtcF9udWxsKGxlZnQtPm1zLnN5bSwgcmlnaHQtPm1zLnN5bSk7CisKKwlyZXR1cm4gc3RyY21wKHJpZ2h0LT5tcy5zeW0tPm5hbWUsIGxlZnQtPm1zLnN5bS0+bmFtZSk7Cit9CisKIHN0YXRpYyBpbnQgX2hpc3RfZW50cnlfX3N5bV9zbnByaW50ZihzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBzeW1ib2wgKnN5bSwKIAkJCQkgICAgIHU2NCBpcCwgY2hhciBsZXZlbCwgY2hhciAqYmYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHdpZHRoKQpAQCAtMjUwLDYgKzI2OSw3IEBACiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3N5bSA9IHsKIAkuc2VfaGVhZGVyCT0gIlN5bWJvbCIsCiAJLnNlX2NtcAkJPSBzb3J0X19zeW1fY21wLAorCS5zZV9zb3J0CT0gc29ydF9fc3ltX3NvcnQsCiAJLnNlX3NucHJpbnRmCT0gaGlzdF9lbnRyeV9fc3ltX3NucHJpbnRmLAogCS5zZV93aWR0aF9pZHgJPSBISVNUQ19TWU1CT0wsCiB9OwpAQCAtMjc3LDcgKzI5Nyw3IEBACiAJCQkJCSAgICBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHJpZ2h0LT5pcCkpOwogCQl9CiAJfQotCXJldHVybiBzdHJjbXAobGVmdC0+c3JjbGluZSwgcmlnaHQtPnNyY2xpbmUpOworCXJldHVybiBzdHJjbXAocmlnaHQtPnNyY2xpbmUsIGxlZnQtPnNyY2xpbmUpOwogfQogCiBzdGF0aWMgaW50IGhpc3RfZW50cnlfX3NyY2xpbmVfc25wcmludGYoc3RydWN0IGhpc3RfZW50cnkgKmhlLCBjaGFyICpiZiwKQEAgLTMwNSw3ICszMjUsNyBAQAogCWlmICghc3ltX2wgfHwgIXN5bV9yKQogCQlyZXR1cm4gY21wX251bGwoc3ltX2wsIHN5bV9yKTsKIAotCXJldHVybiBzdHJjbXAoc3ltX2wtPm5hbWUsIHN5bV9yLT5uYW1lKTsKKwlyZXR1cm4gc3RyY21wKHN5bV9yLT5uYW1lLCBzeW1fbC0+bmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fcGFyZW50X3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgY2hhciAqYmYsCkBAIC0xMDI3LDE5ICsxMDQ3LDE5MiBAQAogCiAjdW5kZWYgRElNCiAKLXN0YXRpYyB2b2lkIF9fc29ydF9kaW1lbnNpb25fX2FkZChzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gKnNkLCBlbnVtIHNvcnRfdHlwZSBpZHgpCitzdHJ1Y3QgaHBwX2RpbWVuc2lvbiB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IHBlcmZfaHBwX2ZtdAkqZm10OworCWludAkJCXRha2VuOworfTsKKworI2RlZmluZSBESU0oZCwgbikgeyAubmFtZSA9IG4sIC5mbXQgPSAmcGVyZl9ocHBfX2Zvcm1hdFtkXSwgfQorCitzdGF0aWMgc3RydWN0IGhwcF9kaW1lbnNpb24gaHBwX3NvcnRfZGltZW5zaW9uc1tdID0geworCURJTShQRVJGX0hQUF9fT1ZFUkhFQUQsICJvdmVyaGVhZCIpLAorCURJTShQRVJGX0hQUF9fT1ZFUkhFQURfU1lTLCAib3ZlcmhlYWRfc3lzIiksCisJRElNKFBFUkZfSFBQX19PVkVSSEVBRF9VUywgIm92ZXJoZWFkX3VzIiksCisJRElNKFBFUkZfSFBQX19PVkVSSEVBRF9HVUVTVF9TWVMsICJvdmVyaGVhZF9ndWVzdF9zeXMiKSwKKwlESU0oUEVSRl9IUFBfX09WRVJIRUFEX0dVRVNUX1VTLCAib3ZlcmhlYWRfZ3Vlc3RfdXMiKSwKKwlESU0oUEVSRl9IUFBfX1NBTVBMRVMsICJzYW1wbGUiKSwKKwlESU0oUEVSRl9IUFBfX1BFUklPRCwgInBlcmlvZCIpLAorfTsKKworI3VuZGVmIERJTQorCitzdHJ1Y3QgaHBwX3NvcnRfZW50cnkgeworCXN0cnVjdCBwZXJmX2hwcF9mbXQgaHBwOworCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKK307CisKK2Jvb2wgcGVyZl9ocHBfX3NhbWVfc29ydF9lbnRyeShzdHJ1Y3QgcGVyZl9ocHBfZm10ICphLCBzdHJ1Y3QgcGVyZl9ocHBfZm10ICpiKQoreworCXN0cnVjdCBocHBfc29ydF9lbnRyeSAqaHNlX2E7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2VfYjsKKworCWlmICghcGVyZl9ocHBfX2lzX3NvcnRfZW50cnkoYSkgfHwgIXBlcmZfaHBwX19pc19zb3J0X2VudHJ5KGIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwloc2VfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgaHBwX3NvcnRfZW50cnksIGhwcCk7CisJaHNlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IGhwcF9zb3J0X2VudHJ5LCBocHApOworCisJcmV0dXJuIGhzZV9hLT5zZSA9PSBoc2VfYi0+c2U7Cit9CisKK3ZvaWQgcGVyZl9ocHBfX3Jlc2V0X3dpZHRoKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwgc3RydWN0IGhpc3RzICpoaXN0cykKK3sKKwlzdHJ1Y3QgaHBwX3NvcnRfZW50cnkgKmhzZTsKKworCWlmICghcGVyZl9ocHBfX2lzX3NvcnRfZW50cnkoZm10KSkKKwkJcmV0dXJuOworCisJaHNlID0gY29udGFpbmVyX29mKGZtdCwgc3RydWN0IGhwcF9zb3J0X2VudHJ5LCBocHApOworCWhpc3RzX19uZXdfY29sX2xlbihoaXN0cywgaHNlLT5zZS0+c2Vfd2lkdGhfaWR4LAorCQkJICAgc3RybGVuKGhzZS0+c2UtPnNlX2hlYWRlcikpOworfQorCitzdGF0aWMgaW50IF9fc29ydF9faHBwX2hlYWRlcihzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsIHN0cnVjdCBwZXJmX2hwcCAqaHBwLAorCQkJICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCXN0cnVjdCBocHBfc29ydF9lbnRyeSAqaHNlOworCXNpemVfdCBsZW47CisKKwloc2UgPSBjb250YWluZXJfb2YoZm10LCBzdHJ1Y3QgaHBwX3NvcnRfZW50cnksIGhwcCk7CisJbGVuID0gaGlzdHNfX2NvbF9sZW4oJmV2c2VsLT5oaXN0cywgaHNlLT5zZS0+c2Vfd2lkdGhfaWR4KTsKKworCXJldHVybiBzY25wcmludGYoaHBwLT5idWYsIGhwcC0+c2l6ZSwgIiUqcyIsIGxlbiwgaHNlLT5zZS0+c2VfaGVhZGVyKTsKK30KKworc3RhdGljIGludCBfX3NvcnRfX2hwcF93aWR0aChzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsCisJCQkgICAgIHN0cnVjdCBwZXJmX2hwcCAqaHBwIF9fbWF5YmVfdW51c2VkLAorCQkJICAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCit7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2U7CisKKwloc2UgPSBjb250YWluZXJfb2YoZm10LCBzdHJ1Y3QgaHBwX3NvcnRfZW50cnksIGhwcCk7CisKKwlyZXR1cm4gaGlzdHNfX2NvbF9sZW4oJmV2c2VsLT5oaXN0cywgaHNlLT5zZS0+c2Vfd2lkdGhfaWR4KTsKK30KKworc3RhdGljIGludCBfX3NvcnRfX2hwcF9lbnRyeShzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsIHN0cnVjdCBwZXJmX2hwcCAqaHBwLAorCQkJICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCit7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2U7CisJc2l6ZV90IGxlbjsKKworCWhzZSA9IGNvbnRhaW5lcl9vZihmbXQsIHN0cnVjdCBocHBfc29ydF9lbnRyeSwgaHBwKTsKKwlsZW4gPSBoaXN0c19fY29sX2xlbihoZS0+aGlzdHMsIGhzZS0+c2UtPnNlX3dpZHRoX2lkeCk7CisKKwlyZXR1cm4gaHNlLT5zZS0+c2Vfc25wcmludGYoaGUsIGhwcC0+YnVmLCBocHAtPnNpemUsIGxlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHBwX3NvcnRfZW50cnkgKgorX19zb3J0X2RpbWVuc2lvbl9fYWxsb2NfaHBwKHN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QpCit7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2U7CisKKwloc2UgPSBtYWxsb2Moc2l6ZW9mKCpoc2UpKTsKKwlpZiAoaHNlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwloc2UtPnNlID0gc2QtPmVudHJ5OworCWhzZS0+aHBwLmhlYWRlciA9IF9fc29ydF9faHBwX2hlYWRlcjsKKwloc2UtPmhwcC53aWR0aCA9IF9fc29ydF9faHBwX3dpZHRoOworCWhzZS0+aHBwLmVudHJ5ID0gX19zb3J0X19ocHBfZW50cnk7CisJaHNlLT5ocHAuY29sb3IgPSBOVUxMOworCisJaHNlLT5ocHAuY21wID0gc2QtPmVudHJ5LT5zZV9jbXA7CisJaHNlLT5ocHAuY29sbGFwc2UgPSBzZC0+ZW50cnktPnNlX2NvbGxhcHNlID8gOiBzZC0+ZW50cnktPnNlX2NtcDsKKwloc2UtPmhwcC5zb3J0ID0gc2QtPmVudHJ5LT5zZV9zb3J0ID8gOiBoc2UtPmhwcC5jb2xsYXBzZTsKKworCUlOSVRfTElTVF9IRUFEKCZoc2UtPmhwcC5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaHNlLT5ocHAuc29ydF9saXN0KTsKKworCXJldHVybiBoc2U7Cit9CisKK2Jvb2wgcGVyZl9ocHBfX2lzX3NvcnRfZW50cnkoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm9ybWF0KQoreworCXJldHVybiBmb3JtYXQtPmhlYWRlciA9PSBfX3NvcnRfX2hwcF9oZWFkZXI7Cit9CisKK3N0YXRpYyBpbnQgX19zb3J0X2RpbWVuc2lvbl9fYWRkX2hwcF9zb3J0KHN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QpCit7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2UgPSBfX3NvcnRfZGltZW5zaW9uX19hbGxvY19ocHAoc2QpOworCisJaWYgKGhzZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlwZXJmX2hwcF9fcmVnaXN0ZXJfc29ydF9maWVsZCgmaHNlLT5ocHApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fc29ydF9kaW1lbnNpb25fX2FkZF9ocHBfb3V0cHV0KHN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QpCit7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2UgPSBfX3NvcnRfZGltZW5zaW9uX19hbGxvY19ocHAoc2QpOworCisJaWYgKGhzZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlwZXJmX2hwcF9fY29sdW1uX3JlZ2lzdGVyKCZoc2UtPmhwcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19zb3J0X2RpbWVuc2lvbl9fYWRkKHN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QpCiB7CiAJaWYgKHNkLT50YWtlbikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKKworCWlmIChfX3NvcnRfZGltZW5zaW9uX19hZGRfaHBwX3NvcnQoc2QpIDwgMCkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKHNkLT5lbnRyeS0+c2VfY29sbGFwc2UpCiAJCXNvcnRfX25lZWRfY29sbGFwc2UgPSAxOwogCi0JaWYgKGxpc3RfZW1wdHkoJmhpc3RfZW50cnlfX3NvcnRfbGlzdCkpCi0JCXNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9IGlkeDsKLQotCWxpc3RfYWRkX3RhaWwoJnNkLT5lbnRyeS0+bGlzdCwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCk7CiAJc2QtPnRha2VuID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faHBwX2RpbWVuc2lvbl9fYWRkKHN0cnVjdCBocHBfZGltZW5zaW9uICpoZCkKK3sKKwlpZiAoIWhkLT50YWtlbikgeworCQloZC0+dGFrZW4gPSAxOworCisJCXBlcmZfaHBwX19yZWdpc3Rlcl9zb3J0X2ZpZWxkKGhkLT5mbXQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3NvcnRfZGltZW5zaW9uX19hZGRfb3V0cHV0KHN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QpCit7CisJaWYgKHNkLT50YWtlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoX19zb3J0X2RpbWVuc2lvbl9fYWRkX2hwcF9vdXRwdXQoc2QpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc2QtPnRha2VuID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2hwcF9kaW1lbnNpb25fX2FkZF9vdXRwdXQoc3RydWN0IGhwcF9kaW1lbnNpb24gKmhkKQoreworCWlmICghaGQtPnRha2VuKSB7CisJCWhkLT50YWtlbiA9IDE7CisKKwkJcGVyZl9ocHBfX2NvbHVtbl9yZWdpc3RlcihoZC0+Zm10KTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNvbnN0IGNoYXIgKnRvaykKQEAgLTEwNjgsOCArMTI2MSwxNiBAQAogCQkJc29ydF9faGFzX2RzbyA9IDE7CiAJCX0KIAotCQlfX3NvcnRfZGltZW5zaW9uX19hZGQoc2QsIGkpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIF9fc29ydF9kaW1lbnNpb25fX2FkZChzZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHBwX3NvcnRfZGltZW5zaW9ucyk7IGkrKykgeworCQlzdHJ1Y3QgaHBwX2RpbWVuc2lvbiAqaGQgPSAmaHBwX3NvcnRfZGltZW5zaW9uc1tpXTsKKworCQlpZiAoc3RybmNhc2VjbXAodG9rLCBoZC0+bmFtZSwgc3RybGVuKHRvaykpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIF9faHBwX2RpbWVuc2lvbl9fYWRkKGhkKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShic3RhY2tfc29ydF9kaW1lbnNpb25zKTsgaSsrKSB7CkBAIC0xMDg0LDcgKzEyODUsNyBAQAogCQlpZiAoc2QtPmVudHJ5ID09ICZzb3J0X3N5bV9mcm9tIHx8IHNkLT5lbnRyeSA9PSAmc29ydF9zeW1fdG8pCiAJCQlzb3J0X19oYXNfc3ltID0gMTsKIAotCQlfX3NvcnRfZGltZW5zaW9uX19hZGQoc2QsIGkgKyBfX1NPUlRfQlJBTkNIX1NUQUNLKTsKKwkJX19zb3J0X2RpbWVuc2lvbl9fYWRkKHNkKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTAwLDE4ICsxMzAxLDQ3IEBACiAJCWlmIChzZC0+ZW50cnkgPT0gJnNvcnRfbWVtX2RhZGRyX3N5bSkKIAkJCXNvcnRfX2hhc19zeW0gPSAxOwogCi0JCV9fc29ydF9kaW1lbnNpb25fX2FkZChzZCwgaSArIF9fU09SVF9NRU1PUllfTU9ERSk7CisJCV9fc29ydF9kaW1lbnNpb25fX2FkZChzZCk7CiAJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRVNSQ0g7CiB9CiAKLWludCBzZXR1cF9zb3J0aW5nKHZvaWQpCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2RlZmF1bHRfc29ydF9vcmRlcih2b2lkKQogewotCWNoYXIgKnRtcCwgKnRvaywgKnN0ciA9IHN0cmR1cChzb3J0X29yZGVyKTsKKwljb25zdCBjaGFyICpkZWZhdWx0X3NvcnRfb3JkZXJzW10gPSB7CisJCWRlZmF1bHRfc29ydF9vcmRlciwKKwkJZGVmYXVsdF9icmFuY2hfc29ydF9vcmRlciwKKwkJZGVmYXVsdF9tZW1fc29ydF9vcmRlciwKKwkJZGVmYXVsdF90b3Bfc29ydF9vcmRlciwKKwkJZGVmYXVsdF9kaWZmX3NvcnRfb3JkZXIsCisJfTsKKworCUJVR19PTihzb3J0X19tb2RlID49IEFSUkFZX1NJWkUoZGVmYXVsdF9zb3J0X29yZGVycykpOworCisJcmV0dXJuIGRlZmF1bHRfc29ydF9vcmRlcnNbc29ydF9fbW9kZV07Cit9CisKK3N0YXRpYyBpbnQgX19zZXR1cF9zb3J0aW5nKHZvaWQpCit7CisJY2hhciAqdG1wLCAqdG9rLCAqc3RyOworCWNvbnN0IGNoYXIgKnNvcnRfa2V5cyA9IHNvcnRfb3JkZXI7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoc29ydF9rZXlzID09IE5VTEwpIHsKKwkJaWYgKGZpZWxkX29yZGVyKSB7CisJCQkvKgorCQkJICogSWYgdXNlciBzcGVjaWZpZWQgZmllbGQgb3JkZXIgYnV0IG5vIHNvcnQgb3JkZXIsCisJCQkgKiB3ZSdsbCBob25vciBpdCBhbmQgbm90IGFkZCBkZWZhdWx0IHNvcnQgb3JkZXJzLgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXNvcnRfa2V5cyA9IGdldF9kZWZhdWx0X3NvcnRfb3JkZXIoKTsKKwl9CisKKwlzdHIgPSBzdHJkdXAoc29ydF9rZXlzKTsKIAlpZiAoc3RyID09IE5VTEwpIHsKIAkJZXJyb3IoIk5vdCBlbm91Z2ggbWVtb3J5IHRvIHNldHVwIHNvcnQga2V5cyIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExMzMsNiArMTM2MywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK2Jvb2wgcGVyZl9ocHBfX3Nob3VsZF9za2lwKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZvcm1hdCkKK3sKKwlpZiAocGVyZl9ocHBfX2lzX3NvcnRfZW50cnkoZm9ybWF0KSkgeworCQlzdHJ1Y3QgaHBwX3NvcnRfZW50cnkgKmhzZTsKKworCQloc2UgPSBjb250YWluZXJfb2YoZm9ybWF0LCBzdHJ1Y3QgaHBwX3NvcnRfZW50cnksIGhwcCk7CisJCXJldHVybiBoc2UtPnNlLT5lbGlkZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdm9pZCBzb3J0X2VudHJ5X19zZXR1cF9lbGlkZShzdHJ1Y3Qgc29ydF9lbnRyeSAqc2UsCiAJCQkJICAgIHN0cnVjdCBzdHJsaXN0ICpsaXN0LAogCQkJCSAgICBjb25zdCBjaGFyICpsaXN0X25hbWUsIEZJTEUgKmZwKQpAQCAtMTE0Nyw3ICsxMzg4LDggQEAKIAogdm9pZCBzb3J0X19zZXR1cF9lbGlkZShGSUxFICpvdXRwdXQpCiB7Ci0Jc3RydWN0IHNvcnRfZW50cnkgKnNlOworCXN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdDsKKwlzdHJ1Y3QgaHBwX3NvcnRfZW50cnkgKmhzZTsKIAogCXNvcnRfZW50cnlfX3NldHVwX2VsaWRlKCZzb3J0X2Rzbywgc3ltYm9sX2NvbmYuZHNvX2xpc3QsCiAJCQkJImRzbyIsIG91dHB1dCk7CkBAIC0xMTg4LDExICsxNDMwLDE1NyBAQAogCSAqIEl0IG1ha2VzIG5vIHNlbnNlIHRvIGVsaWRlIGFsbCBvZiBzb3J0IGVudHJpZXMuCiAJICogSnVzdCByZXZlcnQgdGhlbSB0byBzaG93IHVwIGFnYWluLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzZS0+ZWxpZGUpCisJcGVyZl9ocHBfX2Zvcl9lYWNoX2Zvcm1hdChmbXQpIHsKKwkJaWYgKCFwZXJmX2hwcF9faXNfc29ydF9lbnRyeShmbXQpKQorCQkJY29udGludWU7CisKKwkJaHNlID0gY29udGFpbmVyX29mKGZtdCwgc3RydWN0IGhwcF9zb3J0X2VudHJ5LCBocHApOworCQlpZiAoIWhzZS0+c2UtPmVsaWRlKQogCQkJcmV0dXJuOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpCi0JCXNlLT5lbGlkZSA9IGZhbHNlOworCXBlcmZfaHBwX19mb3JfZWFjaF9mb3JtYXQoZm10KSB7CisJCWlmICghcGVyZl9ocHBfX2lzX3NvcnRfZW50cnkoZm10KSkKKwkJCWNvbnRpbnVlOworCisJCWhzZSA9IGNvbnRhaW5lcl9vZihmbXQsIHN0cnVjdCBocHBfc29ydF9lbnRyeSwgaHBwKTsKKwkJaHNlLT5zZS0+ZWxpZGUgPSBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgb3V0cHV0X2ZpZWxkX2FkZChjaGFyICp0b2spCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fc29ydF9kaW1lbnNpb25zKTsgaSsrKSB7CisJCXN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QgPSAmY29tbW9uX3NvcnRfZGltZW5zaW9uc1tpXTsKKworCQlpZiAoc3RybmNhc2VjbXAodG9rLCBzZC0+bmFtZSwgc3RybGVuKHRvaykpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIF9fc29ydF9kaW1lbnNpb25fX2FkZF9vdXRwdXQoc2QpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhwcF9zb3J0X2RpbWVuc2lvbnMpOyBpKyspIHsKKwkJc3RydWN0IGhwcF9kaW1lbnNpb24gKmhkID0gJmhwcF9zb3J0X2RpbWVuc2lvbnNbaV07CisKKwkJaWYgKHN0cm5jYXNlY21wKHRvaywgaGQtPm5hbWUsIHN0cmxlbih0b2spKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBfX2hwcF9kaW1lbnNpb25fX2FkZF9vdXRwdXQoaGQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJzdGFja19zb3J0X2RpbWVuc2lvbnMpOyBpKyspIHsKKwkJc3RydWN0IHNvcnRfZGltZW5zaW9uICpzZCA9ICZic3RhY2tfc29ydF9kaW1lbnNpb25zW2ldOworCisJCWlmIChzdHJuY2FzZWNtcCh0b2ssIHNkLT5uYW1lLCBzdHJsZW4odG9rKSkpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gX19zb3J0X2RpbWVuc2lvbl9fYWRkX291dHB1dChzZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVtb3J5X3NvcnRfZGltZW5zaW9ucyk7IGkrKykgeworCQlzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gKnNkID0gJm1lbW9yeV9zb3J0X2RpbWVuc2lvbnNbaV07CisKKwkJaWYgKHN0cm5jYXNlY21wKHRvaywgc2QtPm5hbWUsIHN0cmxlbih0b2spKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBfX3NvcnRfZGltZW5zaW9uX19hZGRfb3V0cHV0KHNkKTsKKwl9CisKKwlyZXR1cm4gLUVTUkNIOworfQorCitzdGF0aWMgdm9pZCByZXNldF9kaW1lbnNpb25zKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fc29ydF9kaW1lbnNpb25zKTsgaSsrKQorCQljb21tb25fc29ydF9kaW1lbnNpb25zW2ldLnRha2VuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhwcF9zb3J0X2RpbWVuc2lvbnMpOyBpKyspCisJCWhwcF9zb3J0X2RpbWVuc2lvbnNbaV0udGFrZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnN0YWNrX3NvcnRfZGltZW5zaW9ucyk7IGkrKykKKwkJYnN0YWNrX3NvcnRfZGltZW5zaW9uc1tpXS50YWtlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1vcnlfc29ydF9kaW1lbnNpb25zKTsgaSsrKQorCQltZW1vcnlfc29ydF9kaW1lbnNpb25zW2ldLnRha2VuID0gMDsKK30KKworc3RhdGljIGludCBfX3NldHVwX291dHB1dF9maWVsZCh2b2lkKQoreworCWNoYXIgKnRtcCwgKnRvaywgKnN0cjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChmaWVsZF9vcmRlciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJlc2V0X2RpbWVuc2lvbnMoKTsKKworCXN0ciA9IHN0cmR1cChmaWVsZF9vcmRlcik7CisJaWYgKHN0ciA9PSBOVUxMKSB7CisJCWVycm9yKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBzZXR1cCBvdXRwdXQgZmllbGRzIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAodG9rID0gc3RydG9rX3Ioc3RyLCAiLCAiLCAmdG1wKTsKKwkJCXRvazsgdG9rID0gc3RydG9rX3IoTlVMTCwgIiwgIiwgJnRtcCkpIHsKKwkJcmV0ID0gb3V0cHV0X2ZpZWxkX2FkZCh0b2spOworCQlpZiAocmV0ID09IC1FSU5WQUwpIHsKKwkJCWVycm9yKCJJbnZhbGlkIC0tZmllbGRzIGtleTogYCVzJyIsIHRvayk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChyZXQgPT0gLUVTUkNIKSB7CisJCQllcnJvcigiVW5rbm93biAtLWZpZWxkcyBrZXk6IGAlcyciLCB0b2spOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmcmVlKHN0cik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNldHVwX3NvcnRpbmcodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gX19zZXR1cF9zb3J0aW5nKCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAocGFyZW50X3BhdHRlcm4gIT0gZGVmYXVsdF9wYXJlbnRfcGF0dGVybikgeworCQllcnIgPSBzb3J0X2RpbWVuc2lvbl9fYWRkKCJwYXJlbnQiKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJlc2V0X2RpbWVuc2lvbnMoKTsKKworCS8qCisJICogcGVyZiBkaWZmIGRvZXNuJ3QgdXNlIGRlZmF1bHQgaHBwIG91dHB1dCBmaWVsZHMuCisJICovCisJaWYgKHNvcnRfX21vZGUgIT0gU09SVF9NT0RFX19ESUZGKQorCQlwZXJmX2hwcF9faW5pdCgpOworCisJZXJyID0gX19zZXR1cF9vdXRwdXRfZmllbGQoKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIGNvcHkgc29ydCBrZXlzIHRvIG91dHB1dCBmaWVsZHMgKi8KKwlwZXJmX2hwcF9fc2V0dXBfb3V0cHV0X2ZpZWxkKCk7CisJLyogYW5kIHRoZW4gY29weSBvdXRwdXQgZmllbGRzIHRvIHNvcnQga2V5cyAqLworCXBlcmZfaHBwX19hcHBlbmRfc29ydF9rZXlzKCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZXNldF9vdXRwdXRfZmllbGQodm9pZCkKK3sKKwlzb3J0X19uZWVkX2NvbGxhcHNlID0gMDsKKwlzb3J0X19oYXNfcGFyZW50ID0gMDsKKwlzb3J0X19oYXNfc3ltID0gMDsKKwlzb3J0X19oYXNfZHNvID0gMDsKKworCXJlc2V0X2RpbWVuc2lvbnMoKTsKKwlwZXJmX2hwcF9fcmVzZXRfb3V0cHV0X2ZpZWxkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5oIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuaAppbmRleCA0M2U1ZmY0Li41ZjM4ZDkyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc29ydC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogZXh0ZXJuIHJlZ2V4X3QgcGFyZW50X3JlZ2V4OwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNvcnRfb3JkZXI7CitleHRlcm4gY29uc3QgY2hhciAqZmllbGRfb3JkZXI7CiBleHRlcm4gY29uc3QgY2hhciBkZWZhdWx0X3BhcmVudF9wYXR0ZXJuW107CiBleHRlcm4gY29uc3QgY2hhciAqcGFyZW50X3BhdHRlcm47CiBleHRlcm4gY29uc3QgY2hhciBkZWZhdWx0X3NvcnRfb3JkZXJbXTsKQEAgLTEzMyw2ICsxMzQsOCBAQAogCVNPUlRfTU9ERV9fTk9STUFMLAogCVNPUlRfTU9ERV9fQlJBTkNILAogCVNPUlRfTU9ERV9fTUVNT1JZLAorCVNPUlRfTU9ERV9fVE9QLAorCVNPUlRfTU9ERV9fRElGRiwKIH07CiAKIGVudW0gc29ydF90eXBlIHsKQEAgLTE3OSw2ICsxODIsNyBAQAogCiAJaW50NjRfdCAoKnNlX2NtcCkoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CiAJaW50NjRfdCAoKnNlX2NvbGxhcHNlKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKKwlpbnQ2NF90CSgqc2Vfc29ydCkoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CiAJaW50CSgqc2Vfc25wcmludGYpKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgY2hhciAqYmYsIHNpemVfdCBzaXplLAogCQkJICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCk7CiAJdTgJc2Vfd2lkdGhfaWR4OwpAQCAtMTg5LDYgKzE5Myw4IEBACiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBoaXN0X2VudHJ5X19zb3J0X2xpc3Q7CiAKIGludCBzZXR1cF9zb3J0aW5nKHZvaWQpOworaW50IHNldHVwX291dHB1dF9maWVsZCh2b2lkKTsKK3ZvaWQgcmVzZXRfb3V0cHV0X2ZpZWxkKHZvaWQpOwogZXh0ZXJuIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNvbnN0IGNoYXIgKik7CiB2b2lkIHNvcnRfX3NldHVwX2VsaWRlKEZJTEUgKmZwKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N0YXQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zdGF0LmgKaW5kZXggYWU4Y2NkNy4uNTY2N2ZjMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0YXQuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3RhdC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX1BFUkZfU1RBVFNfSAogI2RlZmluZSBfX1BFUkZfU1RBVFNfSAogCi0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3Qgc3RhdHMKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwppbmRleCA0MzI2MmI4Li42YTBhMTNkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKICNpbmNsdWRlICJwZXJmLmgiCiAjaW5jbHVkZSAic3ZnaGVscGVyLmgiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmggYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmgKaW5kZXggZjdiNGQ2ZS4uZTNhZmY1MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19QRVJGX1NWR0hFTFBFUl9ICiAjZGVmaW5lIF9fUEVSRl9TVkdIRUxQRVJfSAogCi0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBleHRlcm4gdm9pZCBvcGVuX3N2Zyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNwdXMsIGludCByb3dzLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwogZXh0ZXJuIHZvaWQgc3ZnX2JveChpbnQgWXNsb3QsIHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNTAxZTRlNy4uMzNlZGU1MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAjaW5jbHVkZSA8bGliZ2VuLmg+CiAjaW5jbHVkZSAiYnVpbGQtaWQuaCIKKyNpbmNsdWRlICJldmVudC5oIgogCiAjaWZkZWYgSEFWRV9MSUJFTEZfU1VQUE9SVAogI2luY2x1ZGUgPGxpYmVsZi5oPgpAQCAtMTE1LDcgKzExNiw4IEBACiAJCQlhbm5vdGF0ZV9hc21fcmF3LAogCQkJYW5ub3RhdGVfc3JjLAogCQkJZXZlbnRfZ3JvdXAsCi0JCQlkZW1hbmdsZTsKKwkJCWRlbWFuZ2xlLAorCQkJZmlsdGVyX3JlbGF0aXZlOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKIAkJCSprYWxsc3ltc19uYW1lLAogCQkJKnNvdXJjZV9wcmVmaXgsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKaW5kZXggM2NlMDQ5OC4uMmZkZTBkNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwpAQCAtOCw2ICs4LDIyIEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJjb21tLmgiCiAKK2ludCB0aHJlYWRfX2luaXRfbWFwX2dyb3VwcyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXN0cnVjdCB0aHJlYWQgKmxlYWRlcjsKKwlwaWRfdCBwaWQgPSB0aHJlYWQtPnBpZF87CisKKwlpZiAocGlkID09IHRocmVhZC0+dGlkKSB7CisJCXRocmVhZC0+bWcgPSBtYXBfZ3JvdXBzX19uZXcoKTsKKwl9IGVsc2UgeworCQlsZWFkZXIgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBwaWQsIHBpZCk7CisJCWlmIChsZWFkZXIpCisJCQl0aHJlYWQtPm1nID0gbWFwX2dyb3Vwc19fZ2V0KGxlYWRlci0+bWcpOworCX0KKworCXJldHVybiB0aHJlYWQtPm1nID8gMCA6IC0xOworfQorCiBzdHJ1Y3QgdGhyZWFkICp0aHJlYWRfX25ldyhwaWRfdCBwaWQsIHBpZF90IHRpZCkKIHsKIAljaGFyICpjb21tX3N0cjsKQEAgLTE1LDcgKzMxLDYgQEAKIAlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB6YWxsb2Moc2l6ZW9mKCp0aHJlYWQpKTsKIAogCWlmICh0aHJlYWQgIT0gTlVMTCkgewotCQltYXBfZ3JvdXBzX19pbml0KCZ0aHJlYWQtPm1nKTsKIAkJdGhyZWFkLT5waWRfID0gcGlkOwogCQl0aHJlYWQtPnRpZCA9IHRpZDsKIAkJdGhyZWFkLT5wcGlkID0gLTE7CkBAIC00NSw3ICs2MCw4IEBACiB7CiAJc3RydWN0IGNvbW0gKmNvbW0sICp0bXA7CiAKLQltYXBfZ3JvdXBzX19leGl0KCZ0aHJlYWQtPm1nKTsKKwltYXBfZ3JvdXBzX19wdXQodGhyZWFkLT5tZyk7CisJdGhyZWFkLT5tZyA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbW0sIHRtcCwgJnRocmVhZC0+Y29tbV9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZjb21tLT5saXN0KTsKIAkJY29tbV9fZnJlZShjb21tKTsKQEAgLTExMSwxOCArMTI3LDM1IEBACiBzaXplX3QgdGhyZWFkX19mcHJpbnRmKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgRklMRSAqZnApCiB7CiAJcmV0dXJuIGZwcmludGYoZnAsICJUaHJlYWQgJWQgJXNcbiIsIHRocmVhZC0+dGlkLCB0aHJlYWRfX2NvbW1fc3RyKHRocmVhZCkpICsKLQkgICAgICAgbWFwX2dyb3Vwc19fZnByaW50ZigmdGhyZWFkLT5tZywgdmVyYm9zZSwgZnApOworCSAgICAgICBtYXBfZ3JvdXBzX19mcHJpbnRmKHRocmVhZC0+bWcsIHZlcmJvc2UsIGZwKTsKIH0KIAogdm9pZCB0aHJlYWRfX2luc2VydF9tYXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFwICptYXApCiB7Ci0JbWFwX2dyb3Vwc19fZml4dXBfb3ZlcmxhcHBpbmdzKCZ0aHJlYWQtPm1nLCBtYXAsIHZlcmJvc2UsIHN0ZGVycik7Ci0JbWFwX2dyb3Vwc19faW5zZXJ0KCZ0aHJlYWQtPm1nLCBtYXApOworCW1hcF9ncm91cHNfX2ZpeHVwX292ZXJsYXBwaW5ncyh0aHJlYWQtPm1nLCBtYXAsIHZlcmJvc2UsIHN0ZGVycik7CisJbWFwX2dyb3Vwc19faW5zZXJ0KHRocmVhZC0+bWcsIG1hcCk7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX19jbG9uZV9tYXBfZ3JvdXBzKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkgICAgc3RydWN0IHRocmVhZCAqcGFyZW50KQoreworCWludCBpOworCisJLyogVGhpcyBpcyBuZXcgdGhyZWFkLCB3ZSBzaGFyZSBtYXAgZ3JvdXBzIGZvciBwcm9jZXNzLiAqLworCWlmICh0aHJlYWQtPnBpZF8gPT0gcGFyZW50LT5waWRfKQorCQlyZXR1cm4gMDsKKworCS8qIEJ1dCB0aGlzIG9uZSBpcyBuZXcgcHJvY2VzcywgY29weSBtYXBzLiAqLworCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCisJCWlmIChtYXBfZ3JvdXBzX19jbG9uZSh0aHJlYWQtPm1nLCBwYXJlbnQtPm1nLCBpKSA8IDApCisJCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOwogfQogCiBpbnQgdGhyZWFkX19mb3JrKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHRocmVhZCAqcGFyZW50LCB1NjQgdGltZXN0YW1wKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCWlmIChwYXJlbnQtPmNvbW1fc2V0KSB7CiAJCWNvbnN0IGNoYXIgKmNvbW0gPSB0aHJlYWRfX2NvbW1fc3RyKHBhcmVudCk7CkBAIC0xMzQsMTMgKzE2Nyw4IEBACiAJCXRocmVhZC0+Y29tbV9zZXQgPSB0cnVlOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCi0JCWlmIChtYXBfZ3JvdXBzX19jbG9uZSgmdGhyZWFkLT5tZywgJnBhcmVudC0+bWcsIGkpIDwgMCkKLQkJCXJldHVybiAtRU5PTUVNOwotCiAJdGhyZWFkLT5wcGlkID0gcGFyZW50LT50aWQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdGhyZWFkX19jbG9uZV9tYXBfZ3JvdXBzKHRocmVhZCwgcGFyZW50KTsKIH0KIAogdm9pZCB0aHJlYWRfX2ZpbmRfY3B1bW9kZV9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAppbmRleCA5YjI5ZjA4Li4zYzBjMjcyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCkBAIC0xMyw3ICsxMyw3IEBACiAJCXN0cnVjdCByYl9ub2RlCSByYl9ub2RlOwogCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJfTsKLQlzdHJ1Y3QgbWFwX2dyb3VwcwltZzsKKwlzdHJ1Y3QgbWFwX2dyb3VwcwkqbWc7CiAJcGlkX3QJCQlwaWRfOyAvKiBOb3QgYWxsIHRvb2xzIHVwZGF0ZSB0aGlzICovCiAJcGlkX3QJCQl0aWQ7CiAJcGlkX3QJCQlwcGlkOwpAQCAtMzAsNiArMzAsNyBAQAogc3RydWN0IGNvbW07CiAKIHN0cnVjdCB0aHJlYWQgKnRocmVhZF9fbmV3KHBpZF90IHBpZCwgcGlkX3QgdGlkKTsKK2ludCB0aHJlYWRfX2luaXRfbWFwX2dyb3VwcyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKIHZvaWQgdGhyZWFkX19kZWxldGUoc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aHJlYWRfX2V4aXRlZChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdG9wLmggYi90b29scy9wZXJmL3V0aWwvdG9wLmgKaW5kZXggZGFiMTRkMC4uZjkyYzM3YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RvcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90b3AuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19QRVJGX1RPUF9IIDEKIAogI2luY2x1ZGUgInRvb2wuaCIKLSNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90eXBlcy5oIGIvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MWZhNmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIF9fUEVSRl9UWVBFU19ICi0jZGVmaW5lIF9fUEVSRl9UWVBFU19ICi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotLyoKLSAqIFdlIGRlZmluZSB1NjQgYXMgdWludDY0X3QgZm9yIGV2ZXJ5IGFyY2hpdGVjdHVyZQotICogc28gdGhhdCB3ZSBjYW4gcHJpbnQgaXQgd2l0aCAiJSJQUkl4NjQgd2l0aG91dCBnZXR0aW5nIHdhcm5pbmdzLgotICovCi10eXBlZGVmIHVpbnQ2NF90CSAgIHU2NDsKLXR5cGVkZWYgaW50NjRfdAkJICAgczY0OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJICAgdTMyOwotdHlwZWRlZiBzaWduZWQgaW50CSAgIHMzMjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgdTE2OwotdHlwZWRlZiBzaWduZWQgc2hvcnQJICAgczE2OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyCSAgIHU4OwotdHlwZWRlZiBzaWduZWQgY2hhcgkgICBzODsKLQotdW5pb24gdTY0X3N3YXAgewotCXU2NCB2YWw2NDsKLQl1MzIgdmFsMzJbMl07Ci19OwotCi0jZW5kaWYgLyogX19QRVJGX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYwppbmRleCA2N2RiNzNlLi41ZWM4MGE1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYmR3LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJkdy5jCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgInVud2luZC1saWJkdy5oIgogI2luY2x1ZGUgIm1hY2hpbmUuaCIKICNpbmNsdWRlICJ0aHJlYWQuaCIKLSNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJwZXJmX3JlZ3MuaCIKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC5oIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC5oCmluZGV4IGIwMzEzMTYuLmYwMzA2MTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fVU5XSU5EX0gKICNkZWZpbmUgX19VTldJTkRfSAogCi0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMgYi90b29scy9wZXJmL3V0aWwvdXRpbC5jCmluZGV4IDlmNjY1NDkuLjdmZmY2YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuYwpAQCAtMTY2LDYgKzE2Niw4IEBACiAJCXNzaXplX3QgcmV0ID0gaXNfcmVhZCA/IHJlYWQoZmQsIGJ1ZiwgbGVmdCkgOgogCQkJCQl3cml0ZShmZCwgYnVmLCBsZWZ0KTsKIAorCQlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOwogCQlpZiAocmV0IDw9IDApCiAJCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5oIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAppbmRleCA2OTk1ZDY2Li5iMDNkYTQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdXRpbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKQEAgLTY5LDcgKzY5LDcgQEAKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+Ci0jaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgogI2luY2x1ZGUgPGFwaS9mcy9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8dGVybWlvcy5oPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5oIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5oCmluZGV4IDJmYTk2N2UuLmIyMWE4MGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuaAorKysgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fUEVSRl9WQUxVRVNfSAogI2RlZmluZSBfX1BFUkZfVkFMVUVTX0gKIAotI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgewogCWludCB0aHJlYWRzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vY29uZmlnaW5pdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2NvbmZpZ2luaXQuc2gKaW5kZXggYTFiZTZlNi4uOWMzZjNkMyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vY29uZmlnaW5pdC5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9jb25maWdpbml0LnNoCkBAIC02Miw3ICs2Miw3IEBACiBlY2hvICJjYXQgLSAkYyIgPj4gJFQvdXBkLnNoCiBtYWtlIG1ycHJvcGVyCiBtYWtlICRidWlsZGxvYyBkaXN0Y2xlYW4gPiAkYnVpbGRkaXIvTWFrZS5kaXN0Y2xlYW4gMj4mMQotbWFrZSAkYnVpbGRsb2MgZGVmY29uZmlnID4gJGJ1aWxkZGlyL01ha2UuZGVmY29uZmlnLm91dCAyPiYxCittYWtlICRidWlsZGxvYyAkVE9SVFVSRV9ERUZDT05GSUcgPiAkYnVpbGRkaXIvTWFrZS5kZWZjb25maWcub3V0IDI+JjEKIG12ICRidWlsZGRpci8uY29uZmlnICRidWlsZGRpci8uY29uZmlnLnNhdgogc2ggJFQvdXBkLnNoIDwgJGJ1aWxkZGlyLy5jb25maWcuc2F2ID4gJGJ1aWxkZGlyLy5jb25maWcKIGNwICRidWlsZGRpci8uY29uZmlnICRidWlsZGRpci8uY29uZmlnLm5ldwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vZnVuY3Rpb25zLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vZnVuY3Rpb25zLnNoCmluZGV4IDliMTdlODEuLmQwMWI4NjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2Z1bmN0aW9ucy5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9mdW5jdGlvbnMuc2gKQEAgLTc2LDE1ICs3NiwzOSBAQAogCWdyZXAgLXEgJ15DT05GSUdfSE9UUExVR19DUFU9eSQnICIkMSIKIH0KIAorIyBpZGVudGlmeV9ib290X2ltYWdlIHFlbXUtY21kCisjCisjIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIGtlcm5lbCBidWlsZCBpbWFnZS4gIFRoaXMgd2lsbCBiZQorIyBhcmNoLzxhcmNoPi9ib290L2J6SW1hZ2UgdW5sZXNzIG92ZXJyaWRkZW4gd2l0aCB0aGUgVE9SVFVSRV9CT09UX0lNQUdFCisjIGVudmlyb25tZW50IHZhcmlhYmxlLgoraWRlbnRpZnlfYm9vdF9pbWFnZSAoKSB7CisJaWYgdGVzdCAtbiAiJFRPUlRVUkVfQk9PVF9JTUFHRSIKKwl0aGVuCisJCWVjaG8gJFRPUlRVUkVfQk9PVF9JTUFHRQorCWVsc2UKKwkJY2FzZSAiJDEiIGluCisJCXFlbXUtc3lzdGVtLXg4Nl82NHxxZW11LXN5c3RlbS1pMzg2KQorCQkJZWNobyBhcmNoL3g4Ni9ib290L2J6SW1hZ2UKKwkJCTs7CisJCXFlbXUtc3lzdGVtLXBwYzY0KQorCQkJZWNobyBhcmNoL3Bvd2VycGMvYm9vdC9iekltYWdlCisJCQk7OworCQkqKQorCQkJZWNobyAiIgorCQkJOzsKKwkJZXNhYworCWZpCit9CisKICMgaWRlbnRpZnlfcWVtdSBidWlsZGRpcgogIwogIyBSZXR1cm5zIG91ciBiZXN0IGd1ZXNzIGFzIHRvIHdoaWNoIHFlbXUgY29tbWFuZCBpcyBhcHByb3ByaWF0ZSBmb3IKLSMgdGhlIGtlcm5lbCBhdCBoYW5kLiAgT3ZlcnJpZGUgd2l0aCB0aGUgUkNVX1FFTVVfQ01EIGVudmlyb25tZW50IHZhcmlhYmxlLgorIyB0aGUga2VybmVsIGF0IGhhbmQuICBPdmVycmlkZSB3aXRoIHRoZSBUT1JUVVJFX1FFTVVfQ01EIGVudmlyb25tZW50IHZhcmlhYmxlLgogaWRlbnRpZnlfcWVtdSAoKSB7CiAJbG9jYWwgdT0iYGZpbGUgIiQxImAiCi0JaWYgdGVzdCAtbiAiJFJDVV9RRU1VX0NNRCIKKwlpZiB0ZXN0IC1uICIkVE9SVFVSRV9RRU1VX0NNRCIKIAl0aGVuCi0JCWVjaG8gJFJDVV9RRU1VX0NNRAorCQllY2hvICRUT1JUVVJFX1FFTVVfQ01ECiAJZWxpZiBlY2hvICR1IHwgZ3JlcCAtcSB4ODYtNjQKIAl0aGVuCiAJCWVjaG8gcWVtdS1zeXN0ZW0teDg2XzY0CkBAIC05OCw3ICsxMjIsNyBAQAogCQllY2hvIENhbm5vdCBmaWd1cmUgb3V0IHdoYXQgcWVtdSBjb21tYW5kIHRvIHVzZSEgMT4mMgogCQllY2hvIGZpbGUgJDEgb3V0cHV0OiAkdQogCQkjIFVzdWFsbHkgdGhpcyB3aWxsIGJlIG9uZSBvZiAvdXNyL2Jpbi9xZW11LXN5c3RlbS0qCi0JCSMgVXNlIFJDVV9RRU1VX0NNRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBhcHByb3ByaWF0ZQorCQkjIFVzZSBUT1JUVVJFX1FFTVVfQ01EIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGFwcHJvcHJpYXRlCiAJCSMgYXJndW1lbnQgdG8gdG9wLWxldmVsIHNjcmlwdC4KIAkJZXhpdCAxCiAJZmkKQEAgLTEwNywxNCArMTMxLDE0IEBACiAjIGlkZW50aWZ5X3FlbXVfYXBwZW5kIHFlbXUtY21kCiAjCiAjIE91dHB1dCBhcmd1bWVudHMgZm9yIHRoZSBxZW11ICItYXBwZW5kIiBzdHJpbmcgYmFzZWQgb24gQ1BVIHR5cGUKLSMgYW5kIHRoZSBSQ1VfUUVNVV9JTlRFUkFDVElWRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyMgYW5kIHRoZSBUT1JUVVJFX1FFTVVfSU5URVJBQ1RJVkUgZW52aXJvbm1lbnQgdmFyaWFibGUuCiBpZGVudGlmeV9xZW11X2FwcGVuZCAoKSB7CiAJY2FzZSAiJDEiIGluCiAJcWVtdS1zeXN0ZW0teDg2XzY0fHFlbXUtc3lzdGVtLWkzODYpCiAJCWVjaG8gbm9hcGljIHNlbGludXg9MCBpbml0Y2FsbF9kZWJ1ZyBkZWJ1ZwogCQk7OwogCWVzYWMKLQlpZiB0ZXN0IC1uICIkUkNVX1FFTVVfSU5URVJBQ1RJVkUiCisJaWYgdGVzdCAtbiAiJFRPUlRVUkVfUUVNVV9JTlRFUkFDVElWRSIKIAl0aGVuCiAJCWVjaG8gcm9vdD0vZGV2L3NkYQogCWVsc2UKQEAgLTEyNCw4ICsxNDgsOCBAQAogCiAjIGlkZW50aWZ5X3FlbXVfYXJncyBxZW11LWNtZCBzZXJpYWwtZmlsZQogIwotIyBPdXRwdXQgYXJndW1lbnRzIGZvciBxZW11IGFyZ3VtZW50cyBiYXNlZCBvbiB0aGUgUkNVX1FFTVVfTUFDCi0jIGFuZCBSQ1VfUUVNVV9JTlRFUkFDVElWRSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisjIE91dHB1dCBhcmd1bWVudHMgZm9yIHFlbXUgYXJndW1lbnRzIGJhc2VkIG9uIHRoZSBUT1JUVVJFX1FFTVVfTUFDCisjIGFuZCBUT1JUVVJFX1FFTVVfSU5URVJBQ1RJVkUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogaWRlbnRpZnlfcWVtdV9hcmdzICgpIHsKIAljYXNlICIkMSIgaW4KIAlxZW11LXN5c3RlbS14ODZfNjR8cWVtdS1zeXN0ZW0taTM4NikKQEAgLTEzMywxNyArMTU3LDE3IEBACiAJcWVtdS1zeXN0ZW0tcHBjNjQpCiAJCWVjaG8gLWVuYWJsZS1rdm0gLU0gcHNlcmllcyAtY3B1IFBPV0VSNyAtbm9kZWZhdWx0cwogCQllY2hvIC1kZXZpY2Ugc3BhcHItdnNjc2kKLQkJaWYgdGVzdCAtbiAiJFJDVV9RRU1VX0lOVEVSQUNUSVZFIiAtYSAtbiAiJFJDVV9RRU1VX01BQyIKKwkJaWYgdGVzdCAtbiAiJFRPUlRVUkVfUUVNVV9JTlRFUkFDVElWRSIgLWEgLW4gIiRUT1JUVVJFX1FFTVVfTUFDIgogCQl0aGVuCi0JCQllY2hvIC1kZXZpY2Ugc3BhcHItdmxhbixuZXRkZXY9bmV0MCxtYWM9JFJDVV9RRU1VX01BQworCQkJZWNobyAtZGV2aWNlIHNwYXByLXZsYW4sbmV0ZGV2PW5ldDAsbWFjPSRUT1JUVVJFX1FFTVVfTUFDCiAJCQllY2hvIC1uZXRkZXYgYnJpZGdlLGJyPWJyMCxpZD1uZXQwCi0JCWVsaWYgdGVzdCAtbiAiJFJDVV9RRU1VX0lOVEVSQUNUSVZFIgorCQllbGlmIHRlc3QgLW4gIiRUT1JUVVJFX1FFTVVfSU5URVJBQ1RJVkUiCiAJCXRoZW4KIAkJCWVjaG8gLW5ldCBuaWMgLW5ldCB1c2VyCiAJCWZpCiAJCTs7CiAJZXNhYwotCWlmIHRlc3QgLW4gIiRSQ1VfUUVNVV9JTlRFUkFDVElWRSIKKwlpZiB0ZXN0IC1uICIkVE9SVFVSRV9RRU1VX0lOVEVSQUNUSVZFIgogCXRoZW4KIAkJZWNobyAtbW9uaXRvciBzdGRpbyAtc2VyaWFsIHB0eSAtUwogCWVsc2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1idWlsZC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1idWlsZC5zaAppbmRleCAxOTc5MDFlLi43YzFlNTZiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tYnVpbGQuc2gKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLWJ1aWxkLnNoCkBAIC00NSw5ICs0NSw5IEBACiB0cmFwICdybSAtcmYgJFQnIDAKIG1rZGlyICRUCiAKLWNhdCAke2NvbmZpZ190ZW1wbGF0ZX0gfCBncmVwIC12IENPTkZJR19SQ1VfVE9SVFVSRV9URVNUID4gJFQvY29uZmlnCitncmVwIC12ICdDT05GSUdfW0EtWl0qX1RPUlRVUkVfVEVTVCcgPCAke2NvbmZpZ190ZW1wbGF0ZX0gPiAkVC9jb25maWcKIGNhdCA8PCBfX19FT0ZfX18gPj4gJFQvY29uZmlnCi1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iJFJDVV9JTklUUkQiCitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iJFRPUlRVUkVfSU5JVFJEIgogQ09ORklHX1ZJUlRJT19QQ0k9eQogQ09ORklHX1ZJUlRJT19DT05TT0xFPXkKIF9fX0VPRl9fXwpAQCAtNjAsNyArNjAsNyBAQAogCWV4aXQgMgogZmkKIG5jcHVzPWBjcHVzMnVzZS5zaGAKLW1ha2UgTz0kYnVpbGRkaXIgLWokbmNwdXMgJFJDVV9LTUFLRV9BUkcgPiAkYnVpbGRkaXIvTWFrZS5vdXQgMj4mMQorbWFrZSBPPSRidWlsZGRpciAtaiRuY3B1cyAkVE9SVFVSRV9LTUFLRV9BUkcgPiAkYnVpbGRkaXIvTWFrZS5vdXQgMj4mMQogcmV0dmFsPSQ/CiBpZiB0ZXN0ICRyZXR2YWwgLW5lIDAgfHwgZ3JlcCAicmN1W14vXSoiOiA8ICRidWlsZGRpci9NYWtlLm91dCB8IGVncmVwIC1xICJTdG9wfEVycm9yfGVycm9yOnx3YXJuaW5nOiIgfHwgZWdyZXAgLXEgIlN0b3B8RXJyb3J8ZXJyb3I6IiA8ICRidWlsZGRpci9NYWtlLm91dAogdGhlbgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXJlY2hlY2stbG9jay5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLWxvY2suc2gKaW5kZXggODI5MTg2ZS4uN2YxZmYxYSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXJlY2hlY2stbG9jay5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tcmVjaGVjay1sb2NrLnNoCkBAIC0zNSw3ICszNSw3IEBACiBuY3M9YGdyZXAgIldyaXRlczogIFRvdGFsOiIgJGkvY29uc29sZS5sb2cgMj4gL2Rldi9udWxsIHwgdGFpbCAtMSB8IHNlZCAtZSAncy9eLiogVG90YWw6IC8vJyAtZSAncy8gLiokLy8nYAogaWYgdGVzdCAteiAiJG5jcyIKIHRoZW4KLQllY2hvICRjb25maWdmaWxlCisJZWNobyAiJGNvbmZpZ2ZpbGUgLS0tLS0tLSIKIGVsc2UKIAl0aXRsZT0iJGNvbmZpZ2ZpbGUgLS0tLS0tLSAkbmNzIGFjcXVpc2l0aW9ucy9yZWxlYXNlcyIKIAlkdXI9YHNlZCAtZSAncy9eLiogbG9ja3RvcnR1cmUuc2h1dGRvd25fc2Vjcz0vLycgLWUgJ3MvIC4qJC8vJyA8ICRpL3FlbXUtY21kIDI+IC9kZXYvbnVsbGAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLXJjdS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLXJjdS5zaAppbmRleCBkNzViMWRjNS4uMzA3YzRiOSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXJlY2hlY2stcmN1LnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLXJjdS5zaApAQCAtMzUsNyArMzUsNyBAQAogbmdwcz1gZ3JlcCB2ZXI6ICRpL2NvbnNvbGUubG9nIDI+IC9kZXYvbnVsbCB8IHRhaWwgLTEgfCBzZWQgLWUgJ3MvXi4qIHZlcjogLy8nIC1lICdzLyAuKiQvLydgCiBpZiB0ZXN0IC16ICIkbmdwcyIKIHRoZW4KLQllY2hvICRjb25maWdmaWxlCisJZWNobyAiJGNvbmZpZ2ZpbGUgLS0tLS0tLSIKIGVsc2UKIAl0aXRsZT0iJGNvbmZpZ2ZpbGUgLS0tLS0tLSAkbmdwcyBncmFjZSBwZXJpb2RzIgogCWR1cj1gc2VkIC1lICdzL14uKiByY3V0b3J0dXJlLnNodXRkb3duX3NlY3M9Ly8nIC1lICdzLyAuKiQvLycgPCAkaS9xZW11LWNtZCAyPiAvZGV2L251bGxgCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tcmVjaGVjay5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLnNoCmluZGV4IGE0NGRhYWEuLmVlMWY2Y2EgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLnNoCkBAIC0yNSw2ICsyNSw3IEBACiAjIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogCiBQQVRIPWBwd2RgL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluOiRQQVRIOyBleHBvcnQgUEFUSAorLiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9mdW5jdGlvbnMuc2gKIGZvciByZCBpbiAiJEAiCiBkbwogCWZpcnN0dGltZT0xCkBAIC0zOSwxMyArNDAsMjQgQEAKIAkJZmkKIAkJVE9SVFVSRV9TVUlURT0iYGNhdCAkaS8uLi9UT1JUVVJFX1NVSVRFYCIKIAkJa3ZtLXJlY2hlY2stJHtUT1JUVVJFX1NVSVRFfS5zaCAkaQotCQljb25maWdjaGVjay5zaCAkaS8uY29uZmlnICRpL0NvbmZpZ0ZyYWdtZW50Ci0JCXBhcnNlLWJ1aWxkLnNoICRpL01ha2Uub3V0ICRjb25maWdmaWxlCi0JCXBhcnNlLXJjdXRvcnR1cmUuc2ggJGkvY29uc29sZS5sb2cgJGNvbmZpZ2ZpbGUKLQkJcGFyc2UtY29uc29sZS5zaCAkaS9jb25zb2xlLmxvZyAkY29uZmlnZmlsZQotCQlpZiB0ZXN0IC1yICRpL1dhcm5pbmdzCisJCWlmIHRlc3QgLWYgIiRpL2NvbnNvbGUubG9nIgogCQl0aGVuCi0JCQljYXQgJGkvV2FybmluZ3MKKwkJCWNvbmZpZ2NoZWNrLnNoICRpLy5jb25maWcgJGkvQ29uZmlnRnJhZ21lbnQKKwkJCXBhcnNlLWJ1aWxkLnNoICRpL01ha2Uub3V0ICRjb25maWdmaWxlCisJCQlwYXJzZS10b3J0dXJlLnNoICRpL2NvbnNvbGUubG9nICRjb25maWdmaWxlCisJCQlwYXJzZS1jb25zb2xlLnNoICRpL2NvbnNvbGUubG9nICRjb25maWdmaWxlCisJCQlpZiB0ZXN0IC1yICRpL1dhcm5pbmdzCisJCQl0aGVuCisJCQkJY2F0ICRpL1dhcm5pbmdzCisJCQlmaQorCQllbHNlCisJCQlpZiB0ZXN0IC1mICIkaS9xZW11LWNtZCIKKwkJCXRoZW4KKwkJCQlwcmludF9idWcgcWVtdSBmYWlsZWQKKwkJCWVsc2UKKwkJCQlwcmludF9idWcgQnVpbGQgZmFpbGVkCisJCQlmaQorCQkJZWNobyAiICAgJGkiCiAJCWZpCiAJZG9uZQogZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAppbmRleCA5NGIyOGJiLi4yN2U1NDRlIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaApAQCAtOTQsOSArOTQsMTcgQEAKICMgQ09ORklHX1lFTlRBPW4KIGlmIGt2bS1idWlsZC5zaCAkY29uZmlnX3RlbXBsYXRlICRidWlsZGRpciAkVAogdGhlbgorCVFFTVU9ImBpZGVudGlmeV9xZW11ICRidWlsZGRpci92bWxpbnV4YCIKKwlCT09UX0lNQUdFPSJgaWRlbnRpZnlfYm9vdF9pbWFnZSAkUUVNVWAiCiAJY3AgJGJ1aWxkZGlyL01ha2UqLm91dCAkcmVzZGlyCiAJY3AgJGJ1aWxkZGlyLy5jb25maWcgJHJlc2RpcgotCWNwICRidWlsZGRpci9hcmNoL3g4Ni9ib290L2J6SW1hZ2UgJHJlc2RpcgorCWlmIHRlc3QgLW4gIiRCT09UX0lNQUdFIgorCXRoZW4KKwkJY3AgJGJ1aWxkZGlyLyRCT09UX0lNQUdFICRyZXNkaXIKKwllbHNlCisJCWVjaG8gTm8gaWRlbnRpZmlhYmxlIGJvb3QgaW1hZ2UsIG5vdCBydW5uaW5nIEtWTSwgc2VlICRyZXNkaXIuCisJCWVjaG8gRG8gdGhlIHRvcnR1cmUgc2NyaXB0cyBrbm93IGFib3V0IHlvdXIgYXJjaGl0ZWN0dXJlPworCWZpCiAJcGFyc2UtYnVpbGQuc2ggJHJlc2Rpci9NYWtlLm91dCAkdGl0bGUKIAlpZiB0ZXN0IC1mICRidWlsZGRpci53YWl0CiAJdGhlbgpAQCAtMTA0LDYgKzExMiw3IEBACiAJZmkKIGVsc2UKIAljcCAkYnVpbGRkaXIvTWFrZSoub3V0ICRyZXNkaXIKKwljcCAkYnVpbGRkaXIvLmNvbmZpZyAkcmVzZGlyIHx8IDoKIAllY2hvIEJ1aWxkIGZhaWxlZCwgbm90IHJ1bm5pbmcgS1ZNLCBzZWUgJHJlc2Rpci4KIAlpZiB0ZXN0IC1mICRidWlsZGRpci53YWl0CiAJdGhlbgpAQCAtMTI0LDkgKzEzMyw2IEBACiBrc3RhcnR0aW1lPWBhd2sgJ0JFR0lOIHsgcHJpbnQgc3lzdGltZSgpIH0nIDwgL2Rldi9udWxsYAogZWNobyAnIC0tLScgYGRhdGVgOiBTdGFydGluZyBrZXJuZWwKIAotIyBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZsYXZvciBvZiBxZW11IGNvbW1hbmQuCi1RRU1VPSJgaWRlbnRpZnlfcWVtdSAkYnVpbGRkaXIvdm1saW51eGAiCi0KICMgR2VuZXJhdGUgLXNtcCBxZW11IGFyZ3VtZW50LgogcWVtdV9hcmdzPSItbm9ncmFwaGljICRxZW11X2FyZ3MiCiBjcHVfY291bnQ9YGNvbmZpZ05SX0NQVVMuc2ggJGNvbmZpZ190ZW1wbGF0ZWAKQEAgLTE1MSwyNyArMTU3LDM4IEBACiAjIEdlbmVyYXRlIGtlcm5lbC12ZXJzaW9uLXNwZWNpZmljIGJvb3QgcGFyYW1ldGVycwogYm9vdF9hcmdzPSJgcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgIiRib290X2FyZ3MiICRidWlsZGRpci8uY29uZmlnICRzZWNvbmRzYCIKIAotZWNobyAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRidWlsZGRpci9hcmNoL3g4Ni9ib290L2J6SW1hZ2UgLWFwcGVuZCBcIiRxZW11X2FwcGVuZCAkYm9vdF9hcmdzXCIgPiAkcmVzZGlyL3FlbXUtY21kCi1pZiB0ZXN0IC1uICIkUkNVX0JVSUxET05MWSIKK2VjaG8gJFFFTVUgJHFlbXVfYXJncyAtbSA1MTIgLWtlcm5lbCAkYnVpbGRkaXIvJEJPT1RfSU1BR0UgLWFwcGVuZCBcIiRxZW11X2FwcGVuZCAkYm9vdF9hcmdzXCIgPiAkcmVzZGlyL3FlbXUtY21kCitpZiB0ZXN0IC1uICIkVE9SVFVSRV9CVUlMRE9OTFkiCiB0aGVuCiAJZWNobyBCdWlsZC1vbmx5IHJ1biBzcGVjaWZpZWQsIGJvb3QvdGVzdCBvbWl0dGVkLgogCWV4aXQgMAogZmkKLSRRRU1VICRxZW11X2FyZ3MgLW0gNTEyIC1rZXJuZWwgJGJ1aWxkZGlyL2FyY2gveDg2L2Jvb3QvYnpJbWFnZSAtYXBwZW5kICIkcWVtdV9hcHBlbmQgJGJvb3RfYXJncyIgJgorKCAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRidWlsZGRpci8kQk9PVF9JTUFHRSAtYXBwZW5kICIkcWVtdV9hcHBlbmQgJGJvb3RfYXJncyI7IGVjaG8gJD8gPiAkcmVzZGlyL3FlbXUtcmV0dmFsICkgJgogcWVtdV9waWQ9JCEKIGNvbW1hbmRjb21wbGV0ZWQ9MAogZWNobyBNb25pdG9yaW5nIHFlbXUgam9iIGF0IHBpZCAkcWVtdV9waWQKLWZvciAoKGk9MDtpPCRzZWNvbmRzO2krKykpCit3aGlsZSA6CiBkbworCWtydW50aW1lPWBhd2sgJ0JFR0lOIHsgcHJpbnQgc3lzdGltZSgpIC0gJyIka3N0YXJ0dGltZSInIH0nIDwgL2Rldi9udWxsYAogCWlmIGtpbGwgLTAgJHFlbXVfcGlkID4gL2Rldi9udWxsIDI+JjEKIAl0aGVuCisJCWlmIHRlc3QgJGtydW50aW1lIC1nZSAkc2Vjb25kcworCQl0aGVuCisJCQlicmVhazsKKwkJZmkKIAkJc2xlZXAgMQogCWVsc2UKIAkJY29tbWFuZGNvbXBsZXRlZD0xCi0JCWtydW50aW1lPWBhd2sgJ0JFR0lOIHsgcHJpbnQgc3lzdGltZSgpIC0gJyIka3N0YXJ0dGltZSInIH0nIDwgL2Rldi9udWxsYAogCQlpZiB0ZXN0ICRrcnVudGltZSAtbHQgJHNlY29uZHMKIAkJdGhlbgogCQkJZWNobyBDb21wbGV0ZWQgaW4gJGtydW50aW1lIHZzLiAkc2Vjb25kcyA+PiAkcmVzZGlyL1dhcm5pbmdzIDI+JjEKKwkJCWdyZXAgIl4ocWVtdSkgcWVtdToiICRyZXNkaXIva3ZtLXRlc3QtMS1ydW4uc2gub3V0ID4+ICRyZXNkaXIvV2FybmluZ3MgMj4mMQorCQkJa2lsbHBpZD0iYHNlZCAtbiAicy9eKHFlbXUpIHFlbXU6IHRlcm1pbmF0aW5nIG9uIHNpZ25hbCBbMC05XSogZnJvbSBwaWQgXChbMC05XSpcKS4qJC9cMS9wIiAkcmVzZGlyL1dhcm5pbmdzYCIKKwkJCWlmIHRlc3QgLW4gIiRraWxscGlkIgorCQkJdGhlbgorCQkJCWVjaG8gInBzIC1mcCAka2lsbHBpZCIgPj4gJHJlc2Rpci9XYXJuaW5ncyAyPiYxCisJCQkJcHMgLWZwICRraWxscGlkID4+ICRyZXNkaXIvV2FybmluZ3MgMj4mMQorCQkJZmkKIAkJZWxzZQogCQkJZWNobyAnIC0tLScgYGRhdGVgOiBLZXJuZWwgZG9uZQogCQlmaQpAQCAtMTgxLDIzICsxOTgsMjUgQEAKIGlmIHRlc3QgJGNvbW1hbmRjb21wbGV0ZWQgLWVxIDAKIHRoZW4KIAllY2hvIEdyYWNlIHBlcmlvZCBmb3IgcWVtdSBqb2IgYXQgcGlkICRxZW11X3BpZAotCWZvciAoKGk9MDtpPD0kZ3JhY2U7aSsrKSkKKwl3aGlsZSA6CiAJZG8KKwkJa3J1bnRpbWU9YGF3ayAnQkVHSU4geyBwcmludCBzeXN0aW1lKCkgLSAnIiRrc3RhcnR0aW1lIicgfScgPCAvZGV2L251bGxgCiAJCWlmIGtpbGwgLTAgJHFlbXVfcGlkID4gL2Rldi9udWxsIDI+JjEKIAkJdGhlbgotCQkJc2xlZXAgMQorCQkJOgogCQllbHNlCiAJCQlicmVhawogCQlmaQotCQlpZiB0ZXN0ICRpIC1lcSAkZ3JhY2UKKwkJaWYgdGVzdCAka3J1bnRpbWUgLWdlICQoKHNlY29uZHMgKyBncmFjZSkpCiAJCXRoZW4KLQkJCWtydW50aW1lPWBhd2sgJ0JFR0lOIHsgcHJpbnQgc3lzdGltZSgpIC0gJyIka3N0YXJ0dGltZSInIH0nYAogCQkJZWNobyAiISEhIEhhbmcgYXQgJGtydW50aW1lIHZzLiAkc2Vjb25kcyBzZWNvbmRzIiA+PiAkcmVzZGlyL1dhcm5pbmdzIDI+JjEKIAkJCWtpbGwgLUtJTEwgJHFlbXVfcGlkCisJCQlicmVhawogCQlmaQorCQlzbGVlcCAxCiAJZG9uZQogZmkKIAogY3AgJGJ1aWxkZGlyL2NvbnNvbGUubG9nICRyZXNkaXIKLXBhcnNlLSR7VE9SVFVSRV9TVUlURX10b3J0dXJlLnNoICRyZXNkaXIvY29uc29sZS5sb2cgJHRpdGxlCitwYXJzZS10b3J0dXJlLnNoICRyZXNkaXIvY29uc29sZS5sb2cgJHRpdGxlCiBwYXJzZS1jb25zb2xlLnNoICRyZXNkaXIvY29uc29sZS5sb2cgJHRpdGxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2gKaW5kZXggNWE3OGNiZi4uNDAyODVjNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS5zaApAQCAtMzgsOSArMzgsMTAgQEAKIGRyeXJ1bj0iIgogS1ZNPSJgcHdkYC90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlIjsgZXhwb3J0IEtWTQogUEFUSD0ke0tWTX0vYmluOiRQQVRIOyBleHBvcnQgUEFUSAotYnVpbGRkaXI9IiR7S1ZNfS9iMSIKLVJDVV9JTklUUkQ9IiRLVk0vaW5pdHJkIjsgZXhwb3J0IFJDVV9JTklUUkQKLVJDVV9LTUFLRV9BUkc9IiI7IGV4cG9ydCBSQ1VfS01BS0VfQVJHCitUT1JUVVJFX0RFRkNPTkZJRz1kZWZjb25maWcKK1RPUlRVUkVfQk9PVF9JTUFHRT0iIgorVE9SVFVSRV9JTklUUkQ9IiRLVk0vaW5pdHJkIjsgZXhwb3J0IFRPUlRVUkVfSU5JVFJECitUT1JUVVJFX0tNQUtFX0FSRz0iIgogVE9SVFVSRV9TVUlURT1yY3UKIHJlc2Rpcj0iIgogY29uZmlncz0iIgpAQCAtNTMsMTEgKzU0LDEyIEBACiB1c2FnZSAoKSB7CiAJZWNobyAiVXNhZ2U6ICRzY3JpcHRuYW1lIG9wdGlvbmFsIGFyZ3VtZW50czoiCiAJZWNobyAiICAgICAgIC0tYm9vdGFyZ3Mga2VybmVsLWJvb3QtYXJndW1lbnRzIgotCWVjaG8gIiAgICAgICAtLWJ1aWxkZGlyIGFic29sdXRlLXBhdGhuYW1lIgorCWVjaG8gIiAgICAgICAtLWJvb3RpbWFnZSByZWxhdGl2ZS1wYXRoLXRvLWtlcm5lbC1ib290LWltYWdlIgogCWVjaG8gIiAgICAgICAtLWJ1aWxkb25seSIKIAllY2hvICIgICAgICAgLS1jb25maWdzIFwiY29uZmlnLWZpbGUgbGlzdFwiIgogCWVjaG8gIiAgICAgICAtLWNwdXMgTiIKIAllY2hvICIgICAgICAgLS1kYXRlc3RhbXAgc3RyaW5nIgorCWVjaG8gIiAgICAgICAtLWRlZmNvbmZpZyBzdHJpbmciCiAJZWNobyAiICAgICAgIC0tZHJ5cnVuIHNjaGVkfHNjcmlwdCIKIAllY2hvICIgICAgICAgLS1kdXJhdGlvbiBtaW51dGVzIgogCWVjaG8gIiAgICAgICAtLWludGVyYWN0aXZlIgpAQCAtNjcsNyArNjksNiBAQAogCWVjaG8gIiAgICAgICAtLW5vLWluaXRyZCIKIAllY2hvICIgICAgICAgLS1xZW11LWFyZ3MgcWVtdS1zeXN0ZW0tLi4uIgogCWVjaG8gIiAgICAgICAtLXFlbXUtY21kIHFlbXUtc3lzdGVtLS4uLiIKLQllY2hvICIgICAgICAgLS1yZWxidWlsZGRpciByZWxhdGl2ZS1wYXRobmFtZSIKIAllY2hvICIgICAgICAgLS1yZXN1bHRzIGFic29sdXRlLXBhdGhuYW1lIgogCWVjaG8gIiAgICAgICAtLXRvcnR1cmUgcmN1IgogCWV4aXQgMQpAQCAtNzgsMTcgKzc5LDE2IEBACiAJY2FzZSAiJDEiIGluCiAJLS1ib290YXJncykKIAkJY2hlY2thcmcgLS1ib290YXJncyAiKGxpc3Qgb2Yga2VybmVsIGJvb3QgYXJndW1lbnRzKSIgIiQjIiAiJDIiICcuKicgJ14tLScKLQkJUkNVX0JPT1RBUkdTPSIkMiIKKwkJVE9SVFVSRV9CT09UQVJHUz0iJDIiCiAJCXNoaWZ0CiAJCTs7Ci0JLS1idWlsZGRpcikKLQkJY2hlY2thcmcgLS1idWlsZGRpciAiKGFic29sdXRlIHBhdGhuYW1lKSIgIiQjIiAiJDIiICdeLycgJ15lcnJvcicKLQkJYnVpbGRkaXI9JDIKLQkJZ290YnVpbGRkaXI9MQorCS0tYm9vdGltYWdlKQorCQljaGVja2FyZyAtLWJvb3RpbWFnZSAiKHJlbGF0aXZlIHBhdGggdG8ga2VybmVsIGJvb3QgaW1hZ2UpIiAiJCMiICIkMiIgJ1thLXpBLVowLTldW2EtekEtWjAtOV9dKicgJ14tLScKKwkJVE9SVFVSRV9CT09UX0lNQUdFPSIkMiIKIAkJc2hpZnQKIAkJOzsKIAktLWJ1aWxkb25seSkKLQkJUkNVX0JVSUxET05MWT0xOyBleHBvcnQgUkNVX0JVSUxET05MWQorCQlUT1JUVVJFX0JVSUxET05MWT0xCiAJCTs7CiAJLS1jb25maWdzKQogCQljaGVja2FyZyAtLWNvbmZpZ3MgIihsaXN0IG9mIGNvbmZpZyBmaWxlcykiICIkIyIgIiQyIiAnXlteL10qJCcgJ14tLScKQEAgLTEwNSw2ICsxMDUsMTEgQEAKIAkJZHM9JDIKIAkJc2hpZnQKIAkJOzsKKwktLWRlZmNvbmZpZykKKwkJY2hlY2thcmcgLS1kZWZjb25maWcgImRlZmNvbmZpZ3R5cGUiICIkIyIgIiQyIiAnXlteL11bXi9dKiQnICdeLS0nCisJCVRPUlRVUkVfREVGQ09ORklHPSQyCisJCXNoaWZ0CisJCTs7CiAJLS1kcnlydW4pCiAJCWNoZWNrYXJnIC0tZHJ5cnVuICJzY2hlZHxzY3JpcHQiICQjICIkMiIgJ3NjaGVkXHxzY3JpcHQnICdeLS0nCiAJCWRyeXJ1bj0kMgpAQCAtMTE2LDExICsxMjEsMTEgQEAKIAkJc2hpZnQKIAkJOzsKIAktLWludGVyYWN0aXZlKQotCQlSQ1VfUUVNVV9JTlRFUkFDVElWRT0xOyBleHBvcnQgUkNVX1FFTVVfSU5URVJBQ1RJVkUKKwkJVE9SVFVSRV9RRU1VX0lOVEVSQUNUSVZFPTE7IGV4cG9ydCBUT1JUVVJFX1FFTVVfSU5URVJBQ1RJVkUKIAkJOzsKIAktLWttYWtlLWFyZykKIAkJY2hlY2thcmcgLS1rbWFrZS1hcmcgIihrZXJuZWwgbWFrZSBhcmd1bWVudHMpIiAkIyAiJDIiICcuKicgJ15lcnJvciQnCi0JCVJDVV9LTUFLRV9BUkc9IiQyIjsgZXhwb3J0IFJDVV9LTUFLRV9BUkcKKwkJVE9SVFVSRV9LTUFLRV9BUkc9IiQyIgogCQlzaGlmdAogCQk7OwogCS0ta3ZlcnNpb24pCkBAIC0xMzAsMjcgKzEzNSwyMCBAQAogCQk7OwogCS0tbWFjKQogCQljaGVja2FyZyAtLW1hYyAiKE1BQyBhZGRyZXNzKSIgJCMgIiQyIiAnXlwoWzAtOWEtZkEtRl1cezJcfTpcKVx7NVx9WzAtOWEtZkEtRl1cezJcfSQnIGVycm9yCi0JCVJDVV9RRU1VX01BQz0kMjsgZXhwb3J0IFJDVV9RRU1VX01BQworCQlUT1JUVVJFX1FFTVVfTUFDPSQyCiAJCXNoaWZ0CiAJCTs7CiAJLS1uby1pbml0cmQpCi0JCVJDVV9JTklUUkQ9IiI7IGV4cG9ydCBSQ1VfSU5JVFJECisJCVRPUlRVUkVfSU5JVFJEPSIiOyBleHBvcnQgVE9SVFVSRV9JTklUUkQKIAkJOzsKIAktLXFlbXUtYXJncykKIAkJY2hlY2thcmcgLS1xZW11LWFyZ3MgIi1xZW11IGFyZ3MiICQjICIkMiIgJ14tJyAnXmVycm9yJwotCQlSQ1VfUUVNVV9BUkc9IiQyIgorCQlUT1JUVVJFX1FFTVVfQVJHPSIkMiIKIAkJc2hpZnQKIAkJOzsKIAktLXFlbXUtY21kKQogCQljaGVja2FyZyAtLXFlbXUtY21kICIocWVtdS1zeXN0ZW0tLi4uKSIgJCMgIiQyIiAncWVtdS1zeXN0ZW0tJyAnXi0tJwotCQlSQ1VfUUVNVV9DTUQ9IiQyIjsgZXhwb3J0IFJDVV9RRU1VX0NNRAotCQlzaGlmdAotCQk7OwotCS0tcmVsYnVpbGRkaXIpCi0JCWNoZWNrYXJnIC0tcmVsYnVpbGRkaXIgIihyZWxhdGl2ZSBwYXRobmFtZSkiICIkIyIgIiQyIiAnXlteL10qJCcgJ14tLScKLQkJcmVsYnVpbGRkaXI9JDIKLQkJZ290cmVsYnVpbGRkaXI9MQotCQlidWlsZGRpcj0ke0tWTX0vJHtyZWxidWlsZGRpcn0KKwkJVE9SVFVSRV9RRU1VX0NNRD0iJDIiCiAJCXNoaWZ0CiAJCTs7CiAJLS1yZXN1bHRzKQpAQCAtMTg0LDMwICsxODIsNiBAQAogCXJlc2Rpcj0kS1ZNL3JlcwogZmkKIAotaWYgdGVzdCAiJGRyeXJ1biIgPSAiIgotdGhlbgotCWlmICEgdGVzdCAtZSAkcmVzZGlyCi0JdGhlbgotCQlta2RpciAtcCAiJHJlc2RpciIgfHwgOgotCWZpCi0JbWtkaXIgJHJlc2Rpci8kZHMKLQotCSMgQmUgbm9pc3kgb25seSBpZiBydW5uaW5nIHRoZSBzY3JpcHQuCi0JZWNobyBSZXN1bHRzIGRpcmVjdG9yeTogJHJlc2Rpci8kZHMKLQllY2hvICRzY3JpcHRuYW1lICRhcmdzCi0KLQl0b3VjaCAkcmVzZGlyLyRkcy9sb2cKLQllY2hvICRzY3JpcHRuYW1lICRhcmdzID4+ICRyZXNkaXIvJGRzL2xvZwotCWVjaG8gJHtUT1JUVVJFX1NVSVRFfSA+ICRyZXNkaXIvJGRzL1RPUlRVUkVfU1VJVEUKLQotCXB3ZCA+ICRyZXNkaXIvJGRzL3Rlc3RpZC50eHQKLQlpZiB0ZXN0IC1kIC5naXQKLQl0aGVuCi0JCWdpdCBzdGF0dXMgPj4gJHJlc2Rpci8kZHMvdGVzdGlkLnR4dAotCQlnaXQgcmV2LXBhcnNlIEhFQUQgPj4gJHJlc2Rpci8kZHMvdGVzdGlkLnR4dAotCWZpCi1maQotCiAjIENyZWF0ZSBhIGZpbGUgb2YgdGVzdC1uYW1lLyNjcHVzIHBhaXJzLCBzb3J0ZWQgYnkgZGVjcmVhc2luZyAjY3B1cy4KIHRvdWNoICRUL2NmZ2NwdQogZm9yIENGIGluICRjb25maWdzCkBAIC0yNzQsNyArMjQ4LDM5IEBACiAKICMgR2VuZXJhdGUgYSBzY3JpcHQgdG8gZXhlY3V0ZSB0aGUgdGVzdHMgaW4gYXBwcm9wcmlhdGUgYmF0Y2hlcy4KIGNhdCA8PCBfX19FT0ZfX18gPiAkVC9zY3JpcHQKK0NPTkZJR0ZSQUc9IiRDT05GSUdGUkFHIjsgZXhwb3J0IENPTkZJR0ZSQUcKK0tWTT0iJEtWTSI7IGV4cG9ydCBLVk0KK0tWUEFUSD0iJEtWUEFUSCI7IGV4cG9ydCBLVlBBVEgKK1BBVEg9IiRQQVRIIjsgZXhwb3J0IFBBVEgKK1RPUlRVUkVfQk9PVF9JTUFHRT0iJFRPUlRVUkVfQk9PVF9JTUFHRSI7IGV4cG9ydCBUT1JUVVJFX0JPT1RfSU1BR0UKK1RPUlRVUkVfQlVJTERPTkxZPSIkVE9SVFVSRV9CVUlMRE9OTFkiOyBleHBvcnQgVE9SVFVSRV9CVUlMRE9OTFkKK1RPUlRVUkVfREVGQ09ORklHPSIkVE9SVFVSRV9ERUZDT05GSUciOyBleHBvcnQgVE9SVFVSRV9ERUZDT05GSUcKK1RPUlRVUkVfSU5JVFJEPSIkVE9SVFVSRV9JTklUUkQiOyBleHBvcnQgVE9SVFVSRV9JTklUUkQKK1RPUlRVUkVfS01BS0VfQVJHPSIkVE9SVFVSRV9LTUFLRV9BUkciOyBleHBvcnQgVE9SVFVSRV9LTUFLRV9BUkcKK1RPUlRVUkVfUUVNVV9DTUQ9IiRUT1JUVVJFX1FFTVVfQ01EIjsgZXhwb3J0IFRPUlRVUkVfUUVNVV9DTUQKK1RPUlRVUkVfUUVNVV9JTlRFUkFDVElWRT0iJFRPUlRVUkVfUUVNVV9JTlRFUkFDVElWRSI7IGV4cG9ydCBUT1JUVVJFX1FFTVVfSU5URVJBQ1RJVkUKK1RPUlRVUkVfUUVNVV9NQUM9IiRUT1JUVVJFX1FFTVVfTUFDIjsgZXhwb3J0IFRPUlRVUkVfUUVNVV9NQUMKIFRPUlRVUkVfU1VJVEU9IiRUT1JUVVJFX1NVSVRFIjsgZXhwb3J0IFRPUlRVUkVfU1VJVEUKK2lmICEgdGVzdCAtZSAkcmVzZGlyCit0aGVuCisJbWtkaXIgLXAgIiRyZXNkaXIiIHx8IDoKK2ZpCitta2RpciAkcmVzZGlyLyRkcworZWNobyBSZXN1bHRzIGRpcmVjdG9yeTogJHJlc2Rpci8kZHMKK2VjaG8gJHNjcmlwdG5hbWUgJGFyZ3MKK3RvdWNoICRyZXNkaXIvJGRzL2xvZworZWNobyAkc2NyaXB0bmFtZSAkYXJncyA+PiAkcmVzZGlyLyRkcy9sb2cKK2VjaG8gJHtUT1JUVVJFX1NVSVRFfSA+ICRyZXNkaXIvJGRzL1RPUlRVUkVfU1VJVEUKK3B3ZCA+ICRyZXNkaXIvJGRzL3Rlc3RpZC50eHQKK2lmIHRlc3QgLWQgLmdpdAordGhlbgorCWdpdCBzdGF0dXMgPj4gJHJlc2Rpci8kZHMvdGVzdGlkLnR4dAorCWdpdCByZXYtcGFyc2UgSEVBRCA+PiAkcmVzZGlyLyRkcy90ZXN0aWQudHh0CisJaWYgISBnaXQgZGlmZiBIRUFEID4gJFQvZ2l0LWRpZmYgMj4mMQorCXRoZW4KKwkJY3AgJFQvZ2l0LWRpZmYgJHJlc2Rpci8kZHMKKwlmaQorZmkKIF9fX0VPRl9fXwogYXdrIDwgJFQvY2ZnY3B1LnBhY2sgXAogCS12IENPTkZJR0RJUj0iJENPTkZJR0ZSQUcvJGt2ZXJzaW9uLyIgXApAQCAtMjgyLDggKzI4OCw4IEBACiAJLXYgbmNwdXM9JGNwdXMgXAogCS12IHJkPSRyZXNkaXIvJGRzLyBcCiAJLXYgZHVyPSRkdXIgXAotCS12IFJDVV9RRU1VX0FSRz0kUkNVX1FFTVVfQVJHIFwKLQktdiBSQ1VfQk9PVEFSR1M9JFJDVV9CT09UQVJHUyBcCisJLXYgVE9SVFVSRV9RRU1VX0FSRz0iJFRPUlRVUkVfUUVNVV9BUkciIFwKKwktdiBUT1JUVVJFX0JPT1RBUkdTPSIkVE9SVFVSRV9CT09UQVJHUyIgXAogJ0JFR0lOIHsKIAlpID0gMDsKIH0KQEAgLTMyMCw3ICszMjYsNyBAQAogCQlwcmludCAidG91Y2ggIiBidWlsZGRpciAiLndhaXQiOwogCQlwcmludCAibWtkaXIgIiBidWlsZGRpciAiID4gL2Rldi9udWxsIDI+JjEgfHwgOiI7CiAJCXByaW50ICJta2RpciAiIHJkIGNmcltqbl0gIiB8fCA6IjsKLQkJcHJpbnQgImt2bS10ZXN0LTEtcnVuLnNoICIgQ09ORklHRElSIGNmW2pdLCBidWlsZGRpciwgcmQgY2ZyW2puXSwgZHVyICIgXCIiIFJDVV9RRU1VX0FSRyAiXCIgXCIiIFJDVV9CT09UQVJHUyAiXCIgPiAiIHJkIGNmcltqbl0gICIva3ZtLXRlc3QtMS1ydW4uc2gub3V0IDI+JjEgJiIKKwkJcHJpbnQgImt2bS10ZXN0LTEtcnVuLnNoICIgQ09ORklHRElSIGNmW2pdLCBidWlsZGRpciwgcmQgY2ZyW2puXSwgZHVyICIgXCIiIFRPUlRVUkVfUUVNVV9BUkcgIlwiIFwiIiBUT1JUVVJFX0JPT1RBUkdTICJcIiA+ICIgcmQgY2ZyW2puXSAgIi9rdm0tdGVzdC0xLXJ1bi5zaC5vdXQgMj4mMSAmIgogCQlwcmludCAiZWNobyAiLCBjZnJbam5dLCBjcHVzcltqbl0gb3ZmICI6IFdhaXRpbmcgZm9yIGJ1aWxkIHRvIGNvbXBsZXRlLiBgZGF0ZWAiOwogCQlwcmludCAiZWNobyAiLCBjZnJbam5dLCBjcHVzcltqbl0gb3ZmICI6IFdhaXRpbmcgZm9yIGJ1aWxkIHRvIGNvbXBsZXRlLiBgZGF0ZWAgPj4gIiByZCAiL2xvZyI7CiAJCXByaW50ICJ3aGlsZSB0ZXN0IC1mICIgYnVpbGRkaXIgIi53YWl0IgpAQCAtMzc0LDI4ICszODAsMjYgQEAKIAkJZHVtcChmaXJzdCwgaSk7CiB9JyA+PiAkVC9zY3JpcHQKIAorY2F0IDw8IF9fX0VPRl9fXyA+PiAkVC9zY3JpcHQKK2VjaG8KK2VjaG8KK2VjaG8gIiAtLS0gYGRhdGVgIFRlc3Qgc3VtbWFyeToiCitlY2hvIFJlc3VsdHMgZGlyZWN0b3J5OiAkcmVzZGlyLyRkcworaWYgdGVzdCAteiAiJFRPUlRVUkVfQlVJTERPTkxZIgordGhlbgorCWt2bS1yZWNoZWNrLnNoICRyZXNkaXIvJGRzCitmaQorX19fRU9GX19fCisKIGlmIHRlc3QgIiRkcnlydW4iID0gc2NyaXB0CiB0aGVuCi0JIyBEdW1wIG91dCB0aGUgc2NyaXB0LCBidXQgZGVmaW5lIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdAotCSMgaXQgbmVlZHMgdG8gcnVuIHN0YW5kYWxvbmUuCi0JZWNobyBDT05GSUdGUkFHPSIkQ09ORklHRlJBRzsgZXhwb3J0IENPTkZJR0ZSQUciCi0JZWNobyBLVk09IiRLVk07IGV4cG9ydCBLVk0iCi0JZWNobyBLVlBBVEg9IiRLVlBBVEg7IGV4cG9ydCBLVlBBVEgiCi0JZWNobyBQQVRIPSIkUEFUSDsgZXhwb3J0IFBBVEgiCi0JZWNobyBSQ1VfQlVJTERPTkxZPSIkUkNVX0JVSUxET05MWTsgZXhwb3J0IFJDVV9CVUlMRE9OTFkiCi0JZWNobyBSQ1VfSU5JVFJEPSIkUkNVX0lOSVRSRDsgZXhwb3J0IFJDVV9JTklUUkQiCi0JZWNobyBSQ1VfS01BS0VfQVJHPSIkUkNVX0tNQUtFX0FSRzsgZXhwb3J0IFJDVV9LTUFLRV9BUkciCi0JZWNobyBSQ1VfUUVNVV9DTUQ9IiRSQ1VfUUVNVV9DTUQ7IGV4cG9ydCBSQ1VfUUVNVV9DTUQiCi0JZWNobyBSQ1VfUUVNVV9JTlRFUkFDVElWRT0iJFJDVV9RRU1VX0lOVEVSQUNUSVZFOyBleHBvcnQgUkNVX1FFTVVfSU5URVJBQ1RJVkUiCi0JZWNobyBSQ1VfUUVNVV9NQUM9IiRSQ1VfUUVNVV9NQUM7IGV4cG9ydCBSQ1VfUUVNVV9NQUMiCi0JZWNobyAibWtkaXIgLXAgIiRyZXNkaXIiIHx8IDoiCi0JZWNobyAibWtkaXIgJHJlc2Rpci8kZHMiCiAJY2F0ICRUL3NjcmlwdAogCWV4aXQgMAogZWxpZiB0ZXN0ICIkZHJ5cnVuIiA9IHNjaGVkCiB0aGVuCiAJIyBFeHRyYWN0IHRoZSB0ZXN0IHJ1biBzY2hlZHVsZSBmcm9tIHRoZSBzY3JpcHQuCi0JZWdyZXAgJ3N0YXJ0IGJhdGNofFN0YXJ0aW5nIGJ1aWxkXC4nICRUL3NjcmlwdCB8CisJZWdyZXAgJ1N0YXJ0IGJhdGNofFN0YXJ0aW5nIGJ1aWxkXC4nICRUL3NjcmlwdCB8CisJCWdyZXAgLXYgIj4+IiB8CiAJCXNlZCAtZSAncy86LiokLy8nIC1lICdzL15lY2hvIC8vJwogCWV4aXQgMAogZWxzZQpAQCAtNDA0LDkgKzQwOCwzIEBACiBmaQogCiAjIFRyYWNpbmc6IHRyYWNlX2V2ZW50PXJjdTpyY3VfZ3JhY2VfcGVyaW9kLHJjdTpyY3VfZnV0dXJlX2dyYWNlX3BlcmlvZCxyY3U6cmN1X2dyYWNlX3BlcmlvZF9pbml0LHJjdTpyY3Vfbm9jYl93YWtlLHJjdTpyY3VfcHJlZW1wdF90YXNrLHJjdTpyY3VfdW5sb2NrX3ByZWVtcHRlZF90YXNrLHJjdTpyY3VfcXVpZXNjZW50X3N0YXRlX3JlcG9ydCxyY3U6cmN1X2ZxcyxyY3U6cmN1X2NhbGxiYWNrLHJjdTpyY3Vfa2ZyZWVfY2FsbGJhY2sscmN1OnJjdV9iYXRjaF9zdGFydCxyY3U6cmN1X2ludm9rZV9jYWxsYmFjayxyY3U6cmN1X2ludm9rZV9rZnJlZV9jYWxsYmFjayxyY3U6cmN1X2JhdGNoX2VuZCxyY3U6cmN1X3RvcnR1cmVfcmVhZCxyY3U6cmN1X2JhcnJpZXIKLQotZWNobwotZWNobwotZWNobyAiIC0tLSBgZGF0ZWAgVGVzdCBzdW1tYXJ5OiIKLWVjaG8gUmVzdWx0cyBkaXJlY3Rvcnk6ICRyZXNkaXIvJGRzCi1rdm0tcmVjaGVjay5zaCAkcmVzZGlyLyRkcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vcGFyc2UtcmN1dG9ydHVyZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL3BhcnNlLXRvcnR1cmUuc2gKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vcGFyc2UtcmN1dG9ydHVyZS5zaApyZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vcGFyc2UtdG9ydHVyZS5zaAppbmRleCBkZDBhMjc1Li4zNDU1NTYwIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9wYXJzZS1yY3V0b3J0dXJlLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL3BhcnNlLXRvcnR1cmUuc2gKQEAgLTEsMTQgKzEsMTQgQEAKICMhL2Jpbi9zaAogIwotIyBDaGVjayB0aGUgY29uc29sZSBvdXRwdXQgZnJvbSBhbiByY3V0b3J0dXJlIHJ1biBmb3IgZ29vZG5lc3MuCisjIENoZWNrIHRoZSBjb25zb2xlIG91dHB1dCBmcm9tIGEgdG9ydHVyZSBydW4gZm9yIGdvb2RuZXNzLgogIyBUaGUgImZpbGUiIGlzIGEgcGF0aG5hbWUgb24gdGhlIGxvY2FsIHN5c3RlbSwgYW5kICJ0aXRsZSIgaXMKICMgYSB0ZXh0IHN0cmluZyBmb3IgZXJyb3ItbWVzc2FnZSBwdXJwb3Nlcy4KICMKLSMgVGhlIGZpbGUgbXVzdCBjb250YWluIHJjdXRvcnR1cmUgb3V0cHV0LCBidXQgY2FuIGJlIGludGVyc3BlcnNlZAotIyB3aXRoIG90aGVyIGRtZXNnIHRleHQuCisjIFRoZSBmaWxlIG11c3QgY29udGFpbiB0b3J0dXJlIG91dHB1dCwgYnV0IGNhbiBiZSBpbnRlcnNwZXJzZWQKKyMgd2l0aCBvdGhlciBkbWVzZyB0ZXh0LCBhcyBpbiBjb25zb2xlLWxvZyBvdXRwdXQuCiAjCiAjIFVzYWdlOgotIwlzaCBwYXJzZS1yY3V0b3J0dXJlLnNoIGZpbGUgdGl0bGUKKyMJc2ggcGFyc2UtdG9ydHVyZS5zaCBmaWxlIHRpdGxlCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOCw3ICsyOCw3IEBACiAjCiAjIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogCi1UPS90bXAvcGFyc2UtcmN1dG9ydHVyZS5zaC4kJAorVD0vdG1wL3BhcnNlLXRvcnR1cmUuc2guJCQKIGZpbGU9IiQxIgogdGl0bGU9IiQyIgogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogLiBmdW5jdGlvbnMuc2gKIAotIyBjaGVjayBmb3IgcHJlc2VuY2Ugb2YgcmN1dG9ydHVyZS50eHQgZmlsZQorIyBjaGVjayBmb3IgcHJlc2VuY2Ugb2YgdG9ydHVyZSBvdXRwdXQgZmlsZS4KIAogaWYgdGVzdCAtZiAiJGZpbGUiIC1hIC1yICIkZmlsZSIKIHRoZW4KIAk6CiBlbHNlCi0JZWNobyAkdGl0bGUgdW5yZWFkYWJsZSByY3V0b3J0dXJlLnR4dCBmaWxlOiAkZmlsZQorCWVjaG8gJHRpdGxlIHVucmVhZGFibGUgdG9ydHVyZSBvdXRwdXQgZmlsZTogJGZpbGUKIAlleGl0IDEKIGZpCiAKQEAgLTc2LDkgKzc2LDkgQEAKIEVORAl7CiAJaWYgKGJhZHNlcSkgewogCQlpZiAoYmFkc2Vxbm8xID09IGJhZHNlcW5vMiAmJiBiYWRzZXFubzIgPT0gdmVyKQotCQkJcHJpbnQgIlJDVSBHUCBIQU5HIGF0ICIgdmVyICIgcmN1dG9ydHVyZSBzdGF0ICIgYmFkc2VxbnI7CisJCQlwcmludCAiR1AgSEFORyBhdCAiIHZlciAiIHRvcnR1cmUgc3RhdCAiIGJhZHNlcW5yOwogCQllbHNlCi0JCQlwcmludCAiQkFEIFNFUSAiIGJhZHNlcW5vMSAiOiIgYmFkc2Vxbm8yICIgbGFzdDoiIHZlciAiIFJDVSB2ZXJzaW9uICIgYmFkc2VxbnI7CisJCQlwcmludCAiQkFEIFNFUSAiIGJhZHNlcW5vMSAiOiIgYmFkc2Vxbm8yICIgbGFzdDoiIHZlciAiIHZlcnNpb24gIiBiYWRzZXFucjsKIAl9CiAJfScgPiAkVC5zZXEKIApAQCAtOTEsMTMgKzkxLDEzIEBACiAJCWV4aXQgMgogCWZpCiBlbHNlCi0JaWYgZ3JlcCAtcSBSQ1VfSE9UUExVRyAkZmlsZQorCWlmIGdyZXAgLXEgIl9IT1RQTFVHOiIgJGZpbGUKIAl0aGVuCiAJCXByaW50X3dhcm5pbmcgSE9UUExVRyBGQUlMVVJFUyAkdGl0bGUgYGNhdCAkVC5zZXFgCiAJCWVjaG8gIiAgICIgJGZpbGUKIAkJZXhpdCAzCiAJZmkKLQllY2hvICR0aXRsZSBubyBzdWNjZXNzIG1lc3NhZ2UsIGBncmVwIC0tYmluYXJ5LWZpbGVzPXRleHQgJ3ZlcjonICRmaWxlIHwgd2MgLWxgIHN1Y2Nlc3NmdWwgUkNVIHZlcnNpb24gbWVzc2FnZXMKKwllY2hvICR0aXRsZSBubyBzdWNjZXNzIG1lc3NhZ2UsIGBncmVwIC0tYmluYXJ5LWZpbGVzPXRleHQgJ3ZlcjonICRmaWxlIHwgd2MgLWxgIHN1Y2Nlc3NmdWwgdmVyc2lvbiBtZXNzYWdlcwogCWlmIHRlc3QgLXMgJFQuc2VxCiAJdGhlbgogCQlwcmludF93YXJuaW5nICR0aXRsZSBgY2F0ICRULnNlcWAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAyLVQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzhkOWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UCkBAIC0wLDAgKzEsMjUgQEAKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9OAorQ09ORklHX1BSRUVNUFRfTk9ORT1uCitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgorQ09ORklHX1BSRUVNUFQ9eQorI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19IWl9QRVJJT0RJQz1uCitDT05GSUdfTk9fSFpfSURMRT15CitDT05GSUdfTk9fSFpfRlVMTD1uCitDT05GSUdfUkNVX0ZBU1RfTk9fSFo9bgorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfSE9UUExVR19DUFU9bgorQ09ORklHX1NVU1BFTkQ9bgorQ09ORklHX0hJQkVSTkFUSU9OPW4KK0NPTkZJR19SQ1VfRkFOT1VUPTMKK0NPTkZJR19SQ1VfRkFOT1VUX0xFQUY9MworQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgorQ09ORklHX1JDVV9OT0NCX0NQVT1uCitDT05GSUdfREVCVUdfTE9DS19BTExPQz15CitDT05GSUdfUFJPVkVfTE9DS0lORz1uCitDT05GSUdfUFJPVkVfUkNVX0RFTEFZPW4KK0NPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgorQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT15CitDT05GSUdfUkNVX0JPT1NUPW4KK0NPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LmJvb3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDJiOGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC5ib290CkBAIC0wLDAgKzEgQEAKK3JjdXRvcnR1cmUudG9ydHVyZV90eXBlPXNjaGVkCmRpZmYgLS1naXQgYS90b29scy91c2IvZmZzLWFpby1leGFtcGxlL211bHRpYnVmZi9kZXZpY2VfYXBwL2Fpb19tdWx0aWJ1ZmYuYyBiL3Rvb2xzL3VzYi9mZnMtYWlvLWV4YW1wbGUvbXVsdGlidWZmL2RldmljZV9hcHAvYWlvX211bHRpYnVmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjE2YTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy91c2IvZmZzLWFpby1leGFtcGxlL211bHRpYnVmZi9kZXZpY2VfYXBwL2Fpb19tdWx0aWJ1ZmYuYwpAQCAtMCwwICsxLDM0OSBAQAorI2RlZmluZSBfQlNEX1NPVVJDRSAvKiBmb3IgZW5kaWFuLmggKi8KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KKworI2luY2x1ZGUgImxpYmFpby5oIgorI2RlZmluZSBJT0NCX0ZMQUdfUkVTRkQgICAgICAgICAoMSA8PCAwKQorCisjaW5jbHVkZSA8bGludXgvdXNiL2Z1bmN0aW9uZnMuaD4KKworI2RlZmluZSBCVUZfTEVOCQk4MTkyCisjZGVmaW5lIEJVRlNfTUFYCTEyOAorI2RlZmluZSBBSU9fTUFYCQkoQlVGU19NQVgqMikKKworLyoqKioqKioqKioqKioqKioqKioqIERlc2NyaXB0b3JzIGFuZCBTdHJpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXN0cnVjdCB1c2JfZnVuY3Rpb25mc19kZXNjc19oZWFkIGhlYWRlcjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGludGY7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcl9ub19hdWRpbyBidWxrX3Npbms7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcl9ub19hdWRpbyBidWxrX3NvdXJjZTsKKwl9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgZnNfZGVzY3MsIGhzX2Rlc2NzOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIGRlc2NyaXB0b3JzID0geworCS5oZWFkZXIgPSB7CisJCS5tYWdpYyA9IGh0b2xlMzIoRlVOQ1RJT05GU19ERVNDUklQVE9SU19NQUdJQyksCisJCS5sZW5ndGggPSBodG9sZTMyKHNpemVvZihkZXNjcmlwdG9ycykpLAorCQkuZnNfY291bnQgPSAzLAorCQkuaHNfY291bnQgPSAzLAorCX0sCisJLmZzX2Rlc2NzID0geworCQkuaW50ZiA9IHsKKwkJCS5iTGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3JzLmZzX2Rlc2NzLmludGYpLAorCQkJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9JTlRFUkZBQ0UsCisJCQkuYk51bUVuZHBvaW50cyA9IDIsCisJCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCQkJLmlJbnRlcmZhY2UgPSAxLAorCQl9LAorCQkuYnVsa19zaW5rID0geworCQkJLmJMZW5ndGggPSBzaXplb2YoZGVzY3JpcHRvcnMuZnNfZGVzY3MuYnVsa19zaW5rKSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IDEgfCBVU0JfRElSX0lOLAorCQkJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCX0sCisJCS5idWxrX3NvdXJjZSA9IHsKKwkJCS5iTGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3JzLmZzX2Rlc2NzLmJ1bGtfc291cmNlKSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IDIgfCBVU0JfRElSX09VVCwKKwkJCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQl9LAorCX0sCisJLmhzX2Rlc2NzID0geworCQkuaW50ZiA9IHsKKwkJCS5iTGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3JzLmhzX2Rlc2NzLmludGYpLAorCQkJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9JTlRFUkZBQ0UsCisJCQkuYk51bUVuZHBvaW50cyA9IDIsCisJCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCQkJLmlJbnRlcmZhY2UgPSAxLAorCQl9LAorCQkuYnVsa19zaW5rID0geworCQkJLmJMZW5ndGggPSBzaXplb2YoZGVzY3JpcHRvcnMuaHNfZGVzY3MuYnVsa19zaW5rKSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IDEgfCBVU0JfRElSX0lOLAorCQkJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCQkud01heFBhY2tldFNpemUgPSBodG9sZTE2KDUxMiksCisJCX0sCisJCS5idWxrX3NvdXJjZSA9IHsKKwkJCS5iTGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3JzLmhzX2Rlc2NzLmJ1bGtfc291cmNlKSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJCQkuYkVuZHBvaW50QWRkcmVzcyA9IDIgfCBVU0JfRElSX09VVCwKKwkJCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkJLndNYXhQYWNrZXRTaXplID0gaHRvbGUxNig1MTIpLAorCQl9LAorCX0sCit9OworCisjZGVmaW5lIFNUUl9JTlRFUkZBQ0UgIkFJTyBUZXN0IgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uZnNfc3RyaW5nc19oZWFkIGhlYWRlcjsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgY29kZTsKKwkJY29uc3QgY2hhciBzdHIxW3NpemVvZihTVFJfSU5URVJGQUNFKV07CisJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIGxhbmcwOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHN0cmluZ3MgPSB7CisJLmhlYWRlciA9IHsKKwkJLm1hZ2ljID0gaHRvbGUzMihGVU5DVElPTkZTX1NUUklOR1NfTUFHSUMpLAorCQkubGVuZ3RoID0gaHRvbGUzMihzaXplb2Yoc3RyaW5ncykpLAorCQkuc3RyX2NvdW50ID0gaHRvbGUzMigxKSwKKwkJLmxhbmdfY291bnQgPSBodG9sZTMyKDEpLAorCX0sCisJLmxhbmcwID0geworCQlodG9sZTE2KDB4MDQwOSksIC8qIGVuLXVzICovCisJCVNUUl9JTlRFUkZBQ0UsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqIEJ1ZmZlciBzdHJ1Y3R1cmUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGlvX2J1ZmZlciB7CisJc3RydWN0IGlvY2IgKippb2NiOworCXVuc2lnbmVkIGNoYXIgKipidWY7CisJdW5zaWduZWQgY250OworCXVuc2lnbmVkIGxlbjsKKwl1bnNpZ25lZCByZXF1ZXN0ZWQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKiogRW5kcG9pbnRzIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfZXZlbnQoc3RydWN0IHVzYl9mdW5jdGlvbmZzX2V2ZW50ICpldmVudCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJW0ZVTkNUSU9ORlNfQklORF0gPSAiQklORCIsCisJCVtGVU5DVElPTkZTX1VOQklORF0gPSAiVU5CSU5EIiwKKwkJW0ZVTkNUSU9ORlNfRU5BQkxFXSA9ICJFTkFCTEUiLAorCQlbRlVOQ1RJT05GU19ESVNBQkxFXSA9ICJESVNBQkxFIiwKKwkJW0ZVTkNUSU9ORlNfU0VUVVBdID0gIlNFVFVQIiwKKwkJW0ZVTkNUSU9ORlNfU1VTUEVORF0gPSAiU1VTUEVORCIsCisJCVtGVU5DVElPTkZTX1JFU1VNRV0gPSAiUkVTVU1FIiwKKwl9OworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIEZVTkNUSU9ORlNfQklORDoKKwljYXNlIEZVTkNUSU9ORlNfVU5CSU5EOgorCWNhc2UgRlVOQ1RJT05GU19FTkFCTEU6CisJY2FzZSBGVU5DVElPTkZTX0RJU0FCTEU6CisJY2FzZSBGVU5DVElPTkZTX1NFVFVQOgorCWNhc2UgRlVOQ1RJT05GU19TVVNQRU5EOgorCWNhc2UgRlVOQ1RJT05GU19SRVNVTUU6CisJCXByaW50ZigiRXZlbnQgJXNcbiIsIG5hbWVzW2V2ZW50LT50eXBlXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZXAwKGludCBlcDAsIGJvb2wgKnJlYWR5KQoreworCWludCByZXQ7CisJc3RydWN0IHVzYl9mdW5jdGlvbmZzX2V2ZW50IGV2ZW50OworCisJcmV0ID0gcmVhZChlcDAsICZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJaWYgKCFyZXQpIHsKKwkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBldmVudCBmcm9tIGVwMCIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfZXZlbnQoJmV2ZW50KTsKKwlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKwljYXNlIEZVTkNUSU9ORlNfU0VUVVA6CisJCWlmIChldmVudC51LnNldHVwLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pCisJCQl3cml0ZShlcDAsIE5VTEwsIDApOworCQllbHNlCisJCQlyZWFkKGVwMCwgTlVMTCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBGVU5DVElPTkZTX0VOQUJMRToKKwkJKnJlYWR5ID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIEZVTkNUSU9ORlNfRElTQUJMRToKKwkJKnJlYWR5ID0gZmFsc2U7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIGluaXRfYnVmcyhzdHJ1Y3QgaW9fYnVmZmVyICppb2J1ZiwgdW5zaWduZWQgbiwgdW5zaWduZWQgbGVuKQoreworCXVuc2lnbmVkIGk7CisJaW9idWYtPmJ1ZiA9IG1hbGxvYyhuKnNpemVvZigqaW9idWYtPmJ1ZikpOworCWlvYnVmLT5pb2NiID0gbWFsbG9jKG4qc2l6ZW9mKCppb2J1Zi0+aW9jYikpOworCWlvYnVmLT5jbnQgPSBuOworCWlvYnVmLT5sZW4gPSBsZW47CisJaW9idWYtPnJlcXVlc3RlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworCQlpb2J1Zi0+YnVmW2ldID0gbWFsbG9jKGxlbipzaXplb2YoKippb2J1Zi0+YnVmKSk7CisJCWlvYnVmLT5pb2NiW2ldID0gbWFsbG9jKHNpemVvZigqKmlvYnVmLT5pb2NiKSk7CisJfQorCWlvYnVmLT5jbnQgPSBuOworfQorCit2b2lkIGRlbGV0ZV9idWZzKHN0cnVjdCBpb19idWZmZXIgKmlvYnVmKQoreworCXVuc2lnbmVkIGk7CisJZm9yIChpID0gMDsgaSA8IGlvYnVmLT5jbnQ7ICsraSkgeworCQlmcmVlKGlvYnVmLT5idWZbaV0pOworCQlmcmVlKGlvYnVmLT5pb2NiW2ldKTsKKwl9CisJZnJlZShpb2J1Zi0+YnVmKTsKKwlmcmVlKGlvYnVmLT5pb2NiKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGksIGo7CisJY2hhciAqZXBfcGF0aDsKKworCWludCBlcDAsIGVwMTsKKworCWlvX2NvbnRleHRfdCBjdHg7CisKKwlpbnQgZXZmZDsKKwlmZF9zZXQgcmZkczsKKworCXN0cnVjdCBpb19idWZmZXIgaW9idWZbMl07CisJaW50IGFjdHVhbCA9IDA7CisJYm9vbCByZWFkeTsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJcHJpbnRmKCJmZnMgZGlyZWN0b3J5IG5vdCBzcGVjaWZpZWQhXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZXBfcGF0aCA9IG1hbGxvYyhzdHJsZW4oYXJndlsxXSkgKyA0IC8qICIvZXAjIiAqLyArIDEgLyogJ1wwJyAqLyk7CisJaWYgKCFlcF9wYXRoKSB7CisJCXBlcnJvcigibWFsbG9jIik7CisJCXJldHVybiAxOworCX0KKworCS8qIG9wZW4gZW5kcG9pbnQgZmlsZXMgKi8KKwlzcHJpbnRmKGVwX3BhdGgsICIlcy9lcDAiLCBhcmd2WzFdKTsKKwllcDAgPSBvcGVuKGVwX3BhdGgsIE9fUkRXUik7CisJaWYgKGVwMCA8IDApIHsKKwkJcGVycm9yKCJ1bmFibGUgdG8gb3BlbiBlcDAiKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICh3cml0ZShlcDAsICZkZXNjcmlwdG9ycywgc2l6ZW9mKGRlc2NyaXB0b3JzKSkgPCAwKSB7CisJCXBlcnJvcigidW5hYmxlIGRvIHdyaXRlIGRlc2NyaXB0b3JzIik7CisJCXJldHVybiAxOworCX0KKwlpZiAod3JpdGUoZXAwLCAmc3RyaW5ncywgc2l6ZW9mKHN0cmluZ3MpKSA8IDApIHsKKwkJcGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgc3RyaW5ncyIpOworCQlyZXR1cm4gMTsKKwl9CisJc3ByaW50ZihlcF9wYXRoLCAiJXMvZXAxIiwgYXJndlsxXSk7CisJZXAxID0gb3BlbihlcF9wYXRoLCBPX1JEV1IpOworCWlmIChlcDEgPCAwKSB7CisJCXBlcnJvcigidW5hYmxlIHRvIG9wZW4gZXAxIik7CisJCXJldHVybiAxOworCX0KKworCWZyZWUoZXBfcGF0aCk7CisKKwltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOworCS8qIHNldHVwIGFpbyBjb250ZXh0IHRvIGhhbmRsZSB1cCB0byBBSU9fTUFYIHJlcXVlc3RzICovCisJaWYgKGlvX3NldHVwKEFJT19NQVgsICZjdHgpIDwgMCkgeworCQlwZXJyb3IoInVuYWJsZSB0byBzZXR1cCBhaW8iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZXZmZCA9IGV2ZW50ZmQoMCwgMCk7CisJaWYgKGV2ZmQgPCAwKSB7CisJCXBlcnJvcigidW5hYmxlIHRvIG9wZW4gZXZlbnRmZCIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlvYnVmKS9zaXplb2YoKmlvYnVmKTsgKytpKQorCQlpbml0X2J1ZnMoJmlvYnVmW2ldLCBCVUZTX01BWCwgQlVGX0xFTik7CisKKwl3aGlsZSAoMSkgeworCQlGRF9aRVJPKCZyZmRzKTsKKwkJRkRfU0VUKGVwMCwgJnJmZHMpOworCQlGRF9TRVQoZXZmZCwgJnJmZHMpOworCisJCXJldCA9IHNlbGVjdCgoKGVwMCA+IGV2ZmQpID8gZXAwIDogZXZmZCkrMSwKKwkJCSAgICAgJnJmZHMsIE5VTEwsIE5VTEwsIE5VTEwpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJzZWxlY3QiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKEZEX0lTU0VUKGVwMCwgJnJmZHMpKQorCQkJaGFuZGxlX2VwMChlcDAsICZyZWFkeSk7CisKKwkJLyogd2UgYXJlIHdhaXRpbmcgZm9yIGZ1bmN0aW9uIEVOQUJMRSAqLworCQlpZiAoIXJlYWR5KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogd2hlbiB3ZSdyZSBwcmVwYXJpbmcgbmV3IGRhdGEgdG8gc3VibWl0LAorCQkgKiBzZWNvbmQgYnVmZmVyIGJlaW5nIHRyYW5zbWl0dGVkCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlvYnVmKS9zaXplb2YoKmlvYnVmKTsgKytpKSB7CisJCQlpZiAoaW9idWZbaV0ucmVxdWVzdGVkKQorCQkJCWNvbnRpbnVlOworCQkJLyogcHJlcGFyZSByZXF1ZXN0cyAqLworCQkJZm9yIChqID0gMDsgaiA8IGlvYnVmW2ldLmNudDsgKytqKSB7CisJCQkJaW9fcHJlcF9wd3JpdGUoaW9idWZbaV0uaW9jYltqXSwgZXAxLAorCQkJCQkgICAgICAgaW9idWZbaV0uYnVmW2pdLAorCQkJCQkgICAgICAgaW9idWZbaV0ubGVuLCAwKTsKKwkJCQkvKiBlbmFibGUgZXZlbnRmZCBub3RpZmljYXRpb24gKi8KKwkJCQlpb2J1ZltpXS5pb2NiW2pdLT51LmMuZmxhZ3MgfD0gSU9DQl9GTEFHX1JFU0ZEOworCQkJCWlvYnVmW2ldLmlvY2Jbal0tPnUuYy5yZXNmZCA9IGV2ZmQ7CisJCQl9CisJCQkvKiBzdWJtaXQgdGFibGUgb2YgcmVxdWVzdHMgKi8KKwkJCXJldCA9IGlvX3N1Ym1pdChjdHgsIGlvYnVmW2ldLmNudCwgaW9idWZbaV0uaW9jYik7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQlpb2J1ZltpXS5yZXF1ZXN0ZWQgPSByZXQ7CisJCQkJcHJpbnRmKCJzdWJtaXQ6ICVkIHJlcXVlc3RzIGJ1ZjogJWRcbiIsIHJldCwgaSk7CisJCQl9IGVsc2UKKwkJCQlwZXJyb3IoInVuYWJsZSB0byBzdWJtaXQgcmVxZXN0cyIpOworCQl9CisKKwkJLyogaWYgZXZlbnQgaXMgcmVhZHkgdG8gcmVhZCAqLworCQlpZiAoIUZEX0lTU0VUKGV2ZmQsICZyZmRzKSkKKwkJCWNvbnRpbnVlOworCisJCXVpbnQ2NF90IGV2X2NudDsKKwkJcmV0ID0gcmVhZChldmZkLCAmZXZfY250LCBzaXplb2YoZXZfY250KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIGV2ZW50ZmQiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3RydWN0IGlvX2V2ZW50IGVbQlVGU19NQVhdOworCQkvKiB3ZSByZWFkIGFpbyBldmVudHMgKi8KKwkJcmV0ID0gaW9fZ2V0ZXZlbnRzKGN0eCwgMSwgQlVGU19NQVgsIGUsIE5VTEwpOworCQlpZiAocmV0ID4gMCkgLyogaWYgd2UgZ290IGV2ZW50cyAqLworCQkJaW9idWZbYWN0dWFsXS5yZXF1ZXN0ZWQgLT0gcmV0OworCisJCS8qIGlmIGFsbCByZXEncyBmcm9tIGlvY2IgY29tcGxldGVkICovCisJCWlmICghaW9idWZbYWN0dWFsXS5yZXF1ZXN0ZWQpCisJCQlhY3R1YWwgPSAoYWN0dWFsICsgMSklKHNpemVvZihpb2J1Zikvc2l6ZW9mKCppb2J1ZikpOworCX0KKworCS8qIGZyZWUgcmVzb3VyY2VzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlvYnVmKS9zaXplb2YoKmlvYnVmKTsgKytpKQorCQlkZWxldGVfYnVmcygmaW9idWZbaV0pOworCWlvX2Rlc3Ryb3koY3R4KTsKKworCWNsb3NlKGVwMSk7CisJY2xvc2UoZXAwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdXNiL2Zmcy1haW8tZXhhbXBsZS9tdWx0aWJ1ZmYvaG9zdF9hcHAvTWFrZWZpbGUgYi90b29scy91c2IvZmZzLWFpby1leGFtcGxlL211bHRpYnVmZi9ob3N0X2FwcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRhNmYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdXNiL2Zmcy1haW8tZXhhbXBsZS9tdWx0aWJ1ZmYvaG9zdF9hcHAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorQ0MgPSBnY2MKK0xJQlVTQl9DRkxBR1MgPSAkKHNoZWxsIHBrZy1jb25maWcgLS1jZmxhZ3MgbGlidXNiLTEuMCkKK0xJQlVTQl9MSUJTID0gJChzaGVsbCBwa2ctY29uZmlnIC0tbGlicyBsaWJ1c2ItMS4wKQorV0FSTklOR1MgPSAtV2FsbCAtV2V4dHJhCitDRkxBR1MgPSAkKExJQlVTQl9DRkxBR1MpICQoV0FSTklOR1MpCitMREZMQUdTID0gJChMSUJVU0JfTElCUykKKworYWxsOiB0ZXN0CislOiAlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKQorCitjbGVhbjoKKwkkKFJNKSB0ZXN0CmRpZmYgLS1naXQgYS90b29scy91c2IvZmZzLWFpby1leGFtcGxlL211bHRpYnVmZi9ob3N0X2FwcC90ZXN0LmMgYi90b29scy91c2IvZmZzLWFpby1leGFtcGxlL211bHRpYnVmZi9ob3N0X2FwcC90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhZDg3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3VzYi9mZnMtYWlvLWV4YW1wbGUvbXVsdGlidWZmL2hvc3RfYXBwL3Rlc3QuYwpAQCAtMCwwICsxLDE0NiBAQAorI2luY2x1ZGUgPGxpYnVzYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgVkVORE9SCTB4MWQ2YgorI2RlZmluZSBQUk9EVUNUCTB4MDEwNQorCisvKiBlbmRwb2ludHMgaW5kZXhlcyAqLworCisjZGVmaW5lIEVQX0JVTEtfSU4JKDEgfCBMSUJVU0JfRU5EUE9JTlRfSU4pCisjZGVmaW5lIEVQX0JVTEtfT1VUCSgyIHwgTElCVVNCX0VORFBPSU5UX09VVCkKKworI2RlZmluZSBCVUZfTEVOCQk4MTkyCisKKy8qCisgKiBzdHJ1Y3QgdGVzdF9zdGF0ZSAtIGRlc2NyaWJlcyB0ZXN0IHByb2dyYW0gc3RhdGUKKyAqIEBsaXN0OiBsaXN0IG9mIGRldmljZXMgcmV0dXJuZWQgYnkgbGlidXNiX2dldF9kZXZpY2VfbGlzdCBmdW5jdGlvbgorICogQGZvdW5kOiBwb2ludGVyIHRvIHN0cnVjdCBkZXNjcmliaW5nIHRlc3RlZCBkZXZpY2UKKyAqIEBjdHg6IGNvbnRleHQsIHNldCB0byBOVUxMCisgKiBAaGFuZGxlOiBoYW5kbGUgb2YgdGVzdGVkIGRldmljZQorICogQGF0dGFjaGVkOiBpbmRpY2F0ZXMgdGhhdCBkZXZpY2Ugd2FzIGF0dGFjaGVkIHRvIGtlcm5lbCwgYW5kIGhhcyB0byBiZQorICogICAgICAgICAgICByZWF0dGFjaGVkIGF0IHRoZSBlbmQgb2YgdGVzdCBwcm9ncmFtCisgKi8KKworc3RydWN0IHRlc3Rfc3RhdGUgeworCWxpYnVzYl9kZXZpY2UgKmZvdW5kOworCWxpYnVzYl9jb250ZXh0ICpjdHg7CisJbGlidXNiX2RldmljZV9oYW5kbGUgKmhhbmRsZTsKKwlpbnQgYXR0YWNoZWQ7Cit9OworCisvKgorICogdGVzdF9pbml0IC0gaW5pdGlhbGl6ZSB0ZXN0IHByb2dyYW0KKyAqLworCitpbnQgdGVzdF9pbml0KHN0cnVjdCB0ZXN0X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaSwgcmV0OworCXNzaXplX3QgY250OworCWxpYnVzYl9kZXZpY2UgKipsaXN0OworCisJc3RhdGUtPmZvdW5kID0gTlVMTDsKKwlzdGF0ZS0+Y3R4ID0gTlVMTDsKKwlzdGF0ZS0+aGFuZGxlID0gTlVMTDsKKwlzdGF0ZS0+YXR0YWNoZWQgPSAwOworCisJcmV0ID0gbGlidXNiX2luaXQoJnN0YXRlLT5jdHgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJjYW5ub3QgaW5pdCBsaWJ1c2I6ICVzXG4iLCBsaWJ1c2JfZXJyb3JfbmFtZShyZXQpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY250ID0gbGlidXNiX2dldF9kZXZpY2VfbGlzdChzdGF0ZS0+Y3R4LCAmbGlzdCk7CisJaWYgKGNudCA8PSAwKSB7CisJCXByaW50Zigibm8gZGV2aWNlcyBmb3VuZFxuIik7CisJCWdvdG8gZXJyb3IxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7ICsraSkgeworCQlsaWJ1c2JfZGV2aWNlICpkZXYgPSBsaXN0W2ldOworCQlzdHJ1Y3QgbGlidXNiX2RldmljZV9kZXNjcmlwdG9yIGRlc2M7CisJCXJldCA9IGxpYnVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IoZGV2LCAmZGVzYyk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ZigidW5hYmxlIHRvIGdldCBkZXZpY2UgZGVzY3JpcHRvcjogJXNcbiIsCisJCQkgICAgICAgbGlidXNiX2Vycm9yX25hbWUocmV0KSk7CisJCQlnb3RvIGVycm9yMjsKKwkJfQorCQlpZiAoZGVzYy5pZFZlbmRvciA9PSBWRU5ET1IgJiYgZGVzYy5pZFByb2R1Y3QgPT0gUFJPRFVDVCkgeworCQkJc3RhdGUtPmZvdW5kID0gZGV2OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXN0YXRlLT5mb3VuZCkgeworCQlwcmludGYoIm5vIGRldmljZXMgZm91bmRcbiIpOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwlyZXQgPSBsaWJ1c2Jfb3BlbihzdGF0ZS0+Zm91bmQsICZzdGF0ZS0+aGFuZGxlKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiY2Fubm90IG9wZW4gZGV2aWNlOiAlc1xuIiwgbGlidXNiX2Vycm9yX25hbWUocmV0KSk7CisJCWdvdG8gZXJyb3IyOworCX0KKworCWlmIChsaWJ1c2JfY2xhaW1faW50ZXJmYWNlKHN0YXRlLT5oYW5kbGUsIDApKSB7CisJCXJldCA9IGxpYnVzYl9kZXRhY2hfa2VybmVsX2RyaXZlcihzdGF0ZS0+aGFuZGxlLCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRmKCJ1bmFibGUgdG8gZGV0YWNoIGtlcm5lbCBkcml2ZXI6ICVzXG4iLAorCQkJICAgICAgIGxpYnVzYl9lcnJvcl9uYW1lKHJldCkpOworCQkJZ290byBlcnJvcjM7CisJCX0KKwkJc3RhdGUtPmF0dGFjaGVkID0gMTsKKwkJcmV0ID0gbGlidXNiX2NsYWltX2ludGVyZmFjZShzdGF0ZS0+aGFuZGxlLCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRmKCJjYW5ub3QgY2xhaW0gaW50ZXJmYWNlOiAlc1xuIiwKKwkJCSAgICAgICBsaWJ1c2JfZXJyb3JfbmFtZShyZXQpKTsKKwkJCWdvdG8gZXJyb3I0OworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yNDoKKwlpZiAoc3RhdGUtPmF0dGFjaGVkID09IDEpCisJCWxpYnVzYl9hdHRhY2hfa2VybmVsX2RyaXZlcihzdGF0ZS0+aGFuZGxlLCAwKTsKKworZXJyb3IzOgorCWxpYnVzYl9jbG9zZShzdGF0ZS0+aGFuZGxlKTsKKworZXJyb3IyOgorCWxpYnVzYl9mcmVlX2RldmljZV9saXN0KGxpc3QsIDEpOworCitlcnJvcjE6CisJbGlidXNiX2V4aXQoc3RhdGUtPmN0eCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiB0ZXN0X2V4aXQgLSBjbGVhbnVwIHRlc3QgcHJvZ3JhbQorICovCisKK3ZvaWQgdGVzdF9leGl0KHN0cnVjdCB0ZXN0X3N0YXRlICpzdGF0ZSkKK3sKKwlsaWJ1c2JfcmVsZWFzZV9pbnRlcmZhY2Uoc3RhdGUtPmhhbmRsZSwgMCk7CisJaWYgKHN0YXRlLT5hdHRhY2hlZCA9PSAxKQorCQlsaWJ1c2JfYXR0YWNoX2tlcm5lbF9kcml2ZXIoc3RhdGUtPmhhbmRsZSwgMCk7CisJbGlidXNiX2Nsb3NlKHN0YXRlLT5oYW5kbGUpOworCWxpYnVzYl9leGl0KHN0YXRlLT5jdHgpOworfQorCitpbnQgbWFpbih2b2lkKQoreworCXN0cnVjdCB0ZXN0X3N0YXRlIHN0YXRlOworCisJaWYgKHRlc3RfaW5pdCgmc3RhdGUpKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgxKSB7CisJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltCVUZfTEVOXTsKKwkJaW50IGJ5dGVzOworCQlsaWJ1c2JfYnVsa190cmFuc2ZlcihzdGF0ZS5oYW5kbGUsIEVQX0JVTEtfSU4sIGJ1ZmZlciwgQlVGX0xFTiwKKwkJCQkgICAgICZieXRlcywgNTAwKTsKKwl9CisJdGVzdF9leGl0KCZzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS90b29scy91c2IvZmZzLWFpby1leGFtcGxlL3NpbXBsZS9kZXZpY2VfYXBwL2Fpb19zaW1wbGUuYyBiL3Rvb2xzL3VzYi9mZnMtYWlvLWV4YW1wbGUvc2ltcGxlL2RldmljZV9hcHAvYWlvX3NpbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTg2NjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy91c2IvZmZzLWFpby1leGFtcGxlL3NpbXBsZS9kZXZpY2VfYXBwL2Fpb19zaW1wbGUuYwpAQCAtMCwwICsxLDMzNSBAQAorI2RlZmluZSBfQlNEX1NPVVJDRSAvKiBmb3IgZW5kaWFuLmggKi8KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KKworI2luY2x1ZGUgImxpYmFpby5oIgorI2RlZmluZSBJT0NCX0ZMQUdfUkVTRkQgICAgICAgICAoMSA8PCAwKQorCisjaW5jbHVkZSA8bGludXgvdXNiL2Z1bmN0aW9uZnMuaD4KKworI2RlZmluZSBCVUZfTEVOCQk4MTkyCisKKy8qKioqKioqKioqKioqKioqKioqKiBEZXNjcmlwdG9ycyBhbmQgU3RyaW5ncyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uZnNfZGVzY3NfaGVhZCBoZWFkZXI7CisJc3RydWN0IHsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBpbnRmOworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Jfbm9fYXVkaW8gYnVsa19zaW5rOworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Jfbm9fYXVkaW8gYnVsa19zb3VyY2U7CisJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIGZzX2Rlc2NzLCBoc19kZXNjczsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBkZXNjcmlwdG9ycyA9IHsKKwkuaGVhZGVyID0geworCQkubWFnaWMgPSBodG9sZTMyKEZVTkNUSU9ORlNfREVTQ1JJUFRPUlNfTUFHSUMpLAorCQkubGVuZ3RoID0gaHRvbGUzMihzaXplb2YoZGVzY3JpcHRvcnMpKSwKKwkJLmZzX2NvdW50ID0gMywKKwkJLmhzX2NvdW50ID0gMywKKwl9LAorCS5mc19kZXNjcyA9IHsKKwkJLmludGYgPSB7CisJCQkuYkxlbmd0aCA9IHNpemVvZihkZXNjcmlwdG9ycy5mc19kZXNjcy5pbnRmKSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfSU5URVJGQUNFLAorCQkJLmJOdW1FbmRwb2ludHMgPSAyLAorCQkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywKKwkJCS5pSW50ZXJmYWNlID0gMSwKKwkJfSwKKwkJLmJ1bGtfc2luayA9IHsKKwkJCS5iTGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3JzLmZzX2Rlc2NzLmJ1bGtfc2luayksCisJCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCQkJLmJFbmRwb2ludEFkZHJlc3MgPSAxIHwgVVNCX0RJUl9JTiwKKwkJCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQl9LAorCQkuYnVsa19zb3VyY2UgPSB7CisJCQkuYkxlbmd0aCA9IHNpemVvZihkZXNjcmlwdG9ycy5mc19kZXNjcy5idWxrX3NvdXJjZSksCisJCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCQkJLmJFbmRwb2ludEFkZHJlc3MgPSAyIHwgVVNCX0RJUl9PVVQsCisJCQkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJfSwKKwl9LAorCS5oc19kZXNjcyA9IHsKKwkJLmludGYgPSB7CisJCQkuYkxlbmd0aCA9IHNpemVvZihkZXNjcmlwdG9ycy5oc19kZXNjcy5pbnRmKSwKKwkJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfSU5URVJGQUNFLAorCQkJLmJOdW1FbmRwb2ludHMgPSAyLAorCQkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywKKwkJCS5pSW50ZXJmYWNlID0gMSwKKwkJfSwKKwkJLmJ1bGtfc2luayA9IHsKKwkJCS5iTGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3JzLmhzX2Rlc2NzLmJ1bGtfc2luayksCisJCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCQkJLmJFbmRwb2ludEFkZHJlc3MgPSAxIHwgVVNCX0RJUl9JTiwKKwkJCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQl9LAorCQkuYnVsa19zb3VyY2UgPSB7CisJCQkuYkxlbmd0aCA9IHNpemVvZihkZXNjcmlwdG9ycy5oc19kZXNjcy5idWxrX3NvdXJjZSksCisJCQkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCQkJLmJFbmRwb2ludEFkZHJlc3MgPSAyIHwgVVNCX0RJUl9PVVQsCisJCQkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJfSwKKwl9LAorfTsKKworI2RlZmluZSBTVFJfSU5URVJGQUNFICJBSU8gVGVzdCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJc3RydWN0IHVzYl9mdW5jdGlvbmZzX3N0cmluZ3NfaGVhZCBoZWFkZXI7CisJc3RydWN0IHsKKwkJX19sZTE2IGNvZGU7CisJCWNvbnN0IGNoYXIgc3RyMVtzaXplb2YoU1RSX0lOVEVSRkFDRSldOworCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBsYW5nMDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBzdHJpbmdzID0geworCS5oZWFkZXIgPSB7CisJCS5tYWdpYyA9IGh0b2xlMzIoRlVOQ1RJT05GU19TVFJJTkdTX01BR0lDKSwKKwkJLmxlbmd0aCA9IGh0b2xlMzIoc2l6ZW9mKHN0cmluZ3MpKSwKKwkJLnN0cl9jb3VudCA9IGh0b2xlMzIoMSksCisJCS5sYW5nX2NvdW50ID0gaHRvbGUzMigxKSwKKwl9LAorCS5sYW5nMCA9IHsKKwkJaHRvbGUxNigweDA0MDkpLCAvKiBlbi11cyAqLworCQlTVFJfSU5URVJGQUNFLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKiogRW5kcG9pbnRzIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfZXZlbnQoc3RydWN0IHVzYl9mdW5jdGlvbmZzX2V2ZW50ICpldmVudCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJW0ZVTkNUSU9ORlNfQklORF0gPSAiQklORCIsCisJCVtGVU5DVElPTkZTX1VOQklORF0gPSAiVU5CSU5EIiwKKwkJW0ZVTkNUSU9ORlNfRU5BQkxFXSA9ICJFTkFCTEUiLAorCQlbRlVOQ1RJT05GU19ESVNBQkxFXSA9ICJESVNBQkxFIiwKKwkJW0ZVTkNUSU9ORlNfU0VUVVBdID0gIlNFVFVQIiwKKwkJW0ZVTkNUSU9ORlNfU1VTUEVORF0gPSAiU1VTUEVORCIsCisJCVtGVU5DVElPTkZTX1JFU1VNRV0gPSAiUkVTVU1FIiwKKwl9OworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIEZVTkNUSU9ORlNfQklORDoKKwljYXNlIEZVTkNUSU9ORlNfVU5CSU5EOgorCWNhc2UgRlVOQ1RJT05GU19FTkFCTEU6CisJY2FzZSBGVU5DVElPTkZTX0RJU0FCTEU6CisJY2FzZSBGVU5DVElPTkZTX1NFVFVQOgorCWNhc2UgRlVOQ1RJT05GU19TVVNQRU5EOgorCWNhc2UgRlVOQ1RJT05GU19SRVNVTUU6CisJCXByaW50ZigiRXZlbnQgJXNcbiIsIG5hbWVzW2V2ZW50LT50eXBlXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZXAwKGludCBlcDAsIGJvb2wgKnJlYWR5KQoreworCXN0cnVjdCB1c2JfZnVuY3Rpb25mc19ldmVudCBldmVudDsKKwlpbnQgcmV0OworCisJc3RydWN0IHBvbGxmZCBwZmRzWzFdOworCXBmZHNbMF0uZmQgPSBlcDA7CisJcGZkc1swXS5ldmVudHMgPSBQT0xMSU47CisKKwlyZXQgPSBwb2xsKHBmZHMsIDEsIDApOworCisJaWYgKHJldCAmJiAocGZkc1swXS5yZXZlbnRzICYgUE9MTElOKSkgeworCQlyZXQgPSByZWFkKGVwMCwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgZXZlbnQgZnJvbSBlcDAiKTsKKwkJCXJldHVybjsKKwkJfQorCQlkaXNwbGF5X2V2ZW50KCZldmVudCk7CisJCXN3aXRjaCAoZXZlbnQudHlwZSkgeworCQljYXNlIEZVTkNUSU9ORlNfU0VUVVA6CisJCQlpZiAoZXZlbnQudS5zZXR1cC5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKQorCQkJCXdyaXRlKGVwMCwgTlVMTCwgMCk7CisJCQllbHNlCisJCQkJcmVhZChlcDAsIE5VTEwsIDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBGVU5DVElPTkZTX0VOQUJMRToKKwkJCSpyZWFkeSA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEZVTkNUSU9ORlNfRElTQUJMRToKKwkJCSpyZWFkeSA9IGZhbHNlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBpLCByZXQ7CisJY2hhciAqZXBfcGF0aDsKKworCWludCBlcDA7CisJaW50IGVwWzJdOworCisJaW9fY29udGV4dF90IGN0eDsKKworCWludCBldmZkOworCWZkX3NldCByZmRzOworCisJY2hhciAqYnVmX2luLCAqYnVmX291dDsKKwlzdHJ1Y3QgaW9jYiAqaW9jYl9pbiwgKmlvY2Jfb3V0OworCWludCByZXFfaW4gPSAwLCByZXFfb3V0ID0gMDsKKwlib29sIHJlYWR5OworCisJaWYgKGFyZ2MgIT0gMikgeworCQlwcmludGYoImZmcyBkaXJlY3Rvcnkgbm90IHNwZWNpZmllZCFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwllcF9wYXRoID0gbWFsbG9jKHN0cmxlbihhcmd2WzFdKSArIDQgLyogIi9lcCMiICovICsgMSAvKiAnXDAnICovKTsKKwlpZiAoIWVwX3BhdGgpIHsKKwkJcGVycm9yKCJtYWxsb2MiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogb3BlbiBlbmRwb2ludCBmaWxlcyAqLworCXNwcmludGYoZXBfcGF0aCwgIiVzL2VwMCIsIGFyZ3ZbMV0pOworCWVwMCA9IG9wZW4oZXBfcGF0aCwgT19SRFdSKTsKKwlpZiAoZXAwIDwgMCkgeworCQlwZXJyb3IoInVuYWJsZSB0byBvcGVuIGVwMCIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKHdyaXRlKGVwMCwgJmRlc2NyaXB0b3JzLCBzaXplb2YoZGVzY3JpcHRvcnMpKSA8IDApIHsKKwkJcGVycm9yKCJ1bmFibGUgZG8gd3JpdGUgZGVzY3JpcHRvcnMiKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICh3cml0ZShlcDAsICZzdHJpbmdzLCBzaXplb2Yoc3RyaW5ncykpIDwgMCkgeworCQlwZXJyb3IoInVuYWJsZSB0byB3cml0ZSBzdHJpbmdzIik7CisJCXJldHVybiAxOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisJCXNwcmludGYoZXBfcGF0aCwgIiVzL2VwJWQiLCBhcmd2WzFdLCBpKzEpOworCQllcFtpXSA9IG9wZW4oZXBfcGF0aCwgT19SRFdSKTsKKwkJaWYgKGVwW2ldIDwgMCkgeworCQkJcHJpbnRmKCJ1bmFibGUgdG8gb3BlbiBlcCVkOiAlc1xuIiwgaSsxLAorCQkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWZyZWUoZXBfcGF0aCk7CisKKwltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOworCS8qIHNldHVwIGFpbyBjb250ZXh0IHRvIGhhbmRsZSB1cCB0byAyIHJlcXVlc3RzICovCisJaWYgKGlvX3NldHVwKDIsICZjdHgpIDwgMCkgeworCQlwZXJyb3IoInVuYWJsZSB0byBzZXR1cCBhaW8iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZXZmZCA9IGV2ZW50ZmQoMCwgMCk7CisJaWYgKGV2ZmQgPCAwKSB7CisJCXBlcnJvcigidW5hYmxlIHRvIG9wZW4gZXZlbnRmZCIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBhbGxvYyBidWZmZXJzIGFuZCByZXF1ZXN0cyAqLworCWJ1Zl9pbiA9IG1hbGxvYyhCVUZfTEVOKTsKKwlidWZfb3V0ID0gbWFsbG9jKEJVRl9MRU4pOworCWlvY2JfaW4gPSBtYWxsb2Moc2l6ZW9mKCppb2NiX2luKSk7CisJaW9jYl9vdXQgPSBtYWxsb2Moc2l6ZW9mKCppb2NiX291dCkpOworCisJd2hpbGUgKDEpIHsKKwkJRkRfWkVSTygmcmZkcyk7CisJCUZEX1NFVChlcDAsICZyZmRzKTsKKwkJRkRfU0VUKGV2ZmQsICZyZmRzKTsKKworCQlyZXQgPSBzZWxlY3QoKChlcDAgPiBldmZkKSA/IGVwMCA6IGV2ZmQpKzEsCisJCQkgICAgICZyZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCXBlcnJvcigic2VsZWN0Iik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChGRF9JU1NFVChlcDAsICZyZmRzKSkKKwkJCWhhbmRsZV9lcDAoZXAwLCAmcmVhZHkpOworCisJCS8qIHdlIGFyZSB3YWl0aW5nIGZvciBmdW5jdGlvbiBFTkFCTEUgKi8KKwkJaWYgKCFyZWFkeSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGlmIHNvbWV0aGluZyB3YXMgc3VibWl0dGVkIHdlIHdhaXQgZm9yIGV2ZW50ICovCisJCWlmIChGRF9JU1NFVChldmZkLCAmcmZkcykpIHsKKwkJCXVpbnQ2NF90IGV2X2NudDsKKwkJCXJldCA9IHJlYWQoZXZmZCwgJmV2X2NudCwgc2l6ZW9mKGV2X2NudCkpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIGV2ZW50ZmQiKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc3RydWN0IGlvX2V2ZW50IGVbMl07CisJCQkvKiB3ZSB3YWl0IGZvciBvbmUgZXZlbnQgKi8KKwkJCXJldCA9IGlvX2dldGV2ZW50cyhjdHgsIDEsIDIsIGUsIE5VTEwpOworCQkJLyogaWYgd2UgZ290IGV2ZW50ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyArK2kpIHsKKwkJCQlpZiAoZVtpXS5vYmotPmFpb19maWxkZXMgPT0gZXBbMF0pIHsKKwkJCQkJcHJpbnRmKCJldj1pbjsgcmV0PSVsdVxuIiwgZVtpXS5yZXMpOworCQkJCQlyZXFfaW4gPSAwOworCQkJCX0gZWxzZSBpZiAoZVtpXS5vYmotPmFpb19maWxkZXMgPT0gZXBbMV0pIHsKKwkJCQkJcHJpbnRmKCJldj1vdXQ7IHJldD0lbHVcbiIsIGVbaV0ucmVzKTsKKwkJCQkJcmVxX291dCA9IDA7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKCFyZXFfaW4pIHsgLyogaWYgSU4gdHJhbnNmZXIgbm90IHJlcXVlc3RlZCovCisJCQkvKiBwcmVwYXJlIHdyaXRlIHJlcXVlc3QgKi8KKwkJCWlvX3ByZXBfcHdyaXRlKGlvY2JfaW4sIGVwWzBdLCBidWZfaW4sIEJVRl9MRU4sIDApOworCQkJLyogZW5hYmxlIGV2ZW50ZmQgbm90aWZpY2F0aW9uICovCisJCQlpb2NiX2luLT51LmMuZmxhZ3MgfD0gSU9DQl9GTEFHX1JFU0ZEOworCQkJaW9jYl9pbi0+dS5jLnJlc2ZkID0gZXZmZDsKKwkJCS8qIHN1Ym1pdCB0YWJsZSBvZiByZXF1ZXN0cyAqLworCQkJcmV0ID0gaW9fc3VibWl0KGN0eCwgMSwgJmlvY2JfaW4pOworCQkJaWYgKHJldCA+PSAwKSB7IC8qIGlmIHJldCA+IDAgcmVxdWVzdCBpcyBxdWV1ZWQgKi8KKwkJCQlyZXFfaW4gPSAxOworCQkJCXByaW50Zigic3VibWl0OiBpblxuIik7CisJCQl9IGVsc2UKKwkJCQlwZXJyb3IoInVuYWJsZSB0byBzdWJtaXQgcmVxdWVzdCIpOworCQl9CisJCWlmICghcmVxX291dCkgeyAvKiBpZiBPVVQgdHJhbnNmZXIgbm90IHJlcXVlc3RlZCAqLworCQkJLyogcHJlcGFyZSByZWFkIHJlcXVlc3QgKi8KKwkJCWlvX3ByZXBfcHJlYWQoaW9jYl9vdXQsIGVwWzFdLCBidWZfb3V0LCBCVUZfTEVOLCAwKTsKKwkJCS8qIGVuYWJsZSBldmVudGZzIG5vdGlmaWNhdGlvbiAqLworCQkJaW9jYl9vdXQtPnUuYy5mbGFncyB8PSBJT0NCX0ZMQUdfUkVTRkQ7CisJCQlpb2NiX291dC0+dS5jLnJlc2ZkID0gZXZmZDsKKwkJCS8qIHN1Ym1pdCB0YWJsZSBvZiByZXF1ZXN0cyAqLworCQkJcmV0ID0gaW9fc3VibWl0KGN0eCwgMSwgJmlvY2Jfb3V0KTsKKwkJCWlmIChyZXQgPj0gMCkgeyAvKiBpZiByZXQgPiAwIHJlcXVlc3QgaXMgcXVldWVkICovCisJCQkJcmVxX291dCA9IDE7CisJCQkJcHJpbnRmKCJzdWJtaXQ6IG91dFxuIik7CisJCQl9IGVsc2UKKwkJCQlwZXJyb3IoInVuYWJsZSB0byBzdWJtaXQgcmVxdWVzdCIpOworCQl9CisJfQorCisJLyogZnJlZSByZXNvdXJjZXMgKi8KKworCWlvX2Rlc3Ryb3koY3R4KTsKKworCWZyZWUoYnVmX2luKTsKKwlmcmVlKGJ1Zl9vdXQpOworCWZyZWUoaW9jYl9pbik7CisJZnJlZShpb2NiX291dCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCQljbG9zZShlcFtpXSk7CisJY2xvc2UoZXAwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdXNiL2Zmcy1haW8tZXhhbXBsZS9zaW1wbGUvaG9zdF9hcHAvTWFrZWZpbGUgYi90b29scy91c2IvZmZzLWFpby1leGFtcGxlL3NpbXBsZS9ob3N0X2FwcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRhNmYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdXNiL2Zmcy1haW8tZXhhbXBsZS9zaW1wbGUvaG9zdF9hcHAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorQ0MgPSBnY2MKK0xJQlVTQl9DRkxBR1MgPSAkKHNoZWxsIHBrZy1jb25maWcgLS1jZmxhZ3MgbGlidXNiLTEuMCkKK0xJQlVTQl9MSUJTID0gJChzaGVsbCBwa2ctY29uZmlnIC0tbGlicyBsaWJ1c2ItMS4wKQorV0FSTklOR1MgPSAtV2FsbCAtV2V4dHJhCitDRkxBR1MgPSAkKExJQlVTQl9DRkxBR1MpICQoV0FSTklOR1MpCitMREZMQUdTID0gJChMSUJVU0JfTElCUykKKworYWxsOiB0ZXN0CislOiAlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKQorCitjbGVhbjoKKwkkKFJNKSB0ZXN0CmRpZmYgLS1naXQgYS90b29scy91c2IvZmZzLWFpby1leGFtcGxlL3NpbXBsZS9ob3N0X2FwcC90ZXN0LmMgYi90b29scy91c2IvZmZzLWFpby1leGFtcGxlL3NpbXBsZS9ob3N0X2FwcC90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiNmE1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3VzYi9mZnMtYWlvLWV4YW1wbGUvc2ltcGxlL2hvc3RfYXBwL3Rlc3QuYwpAQCAtMCwwICsxLDE0OCBAQAorI2luY2x1ZGUgPGxpYnVzYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgVkVORE9SCTB4MWQ2YgorI2RlZmluZSBQUk9EVUNUCTB4MDEwNQorCisvKiBlbmRwb2ludHMgaW5kZXhlcyAqLworCisjZGVmaW5lIEVQX0JVTEtfSU4JKDEgfCBMSUJVU0JfRU5EUE9JTlRfSU4pCisjZGVmaW5lIEVQX0JVTEtfT1VUCSgyIHwgTElCVVNCX0VORFBPSU5UX09VVCkKKworI2RlZmluZSBCVUZfTEVOCQk4MTkyCisKKy8qCisgKiBzdHJ1Y3QgdGVzdF9zdGF0ZSAtIGRlc2NyaWJlcyB0ZXN0IHByb2dyYW0gc3RhdGUKKyAqIEBsaXN0OiBsaXN0IG9mIGRldmljZXMgcmV0dXJuZWQgYnkgbGlidXNiX2dldF9kZXZpY2VfbGlzdCBmdW5jdGlvbgorICogQGZvdW5kOiBwb2ludGVyIHRvIHN0cnVjdCBkZXNjcmliaW5nIHRlc3RlZCBkZXZpY2UKKyAqIEBjdHg6IGNvbnRleHQsIHNldCB0byBOVUxMCisgKiBAaGFuZGxlOiBoYW5kbGUgb2YgdGVzdGVkIGRldmljZQorICogQGF0dGFjaGVkOiBpbmRpY2F0ZXMgdGhhdCBkZXZpY2Ugd2FzIGF0dGFjaGVkIHRvIGtlcm5lbCwgYW5kIGhhcyB0byBiZQorICogICAgICAgICAgICByZWF0dGFjaGVkIGF0IHRoZSBlbmQgb2YgdGVzdCBwcm9ncmFtCisgKi8KKworc3RydWN0IHRlc3Rfc3RhdGUgeworCWxpYnVzYl9kZXZpY2UgKmZvdW5kOworCWxpYnVzYl9jb250ZXh0ICpjdHg7CisJbGlidXNiX2RldmljZV9oYW5kbGUgKmhhbmRsZTsKKwlpbnQgYXR0YWNoZWQ7Cit9OworCisvKgorICogdGVzdF9pbml0IC0gaW5pdGlhbGl6ZSB0ZXN0IHByb2dyYW0KKyAqLworCitpbnQgdGVzdF9pbml0KHN0cnVjdCB0ZXN0X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaSwgcmV0OworCXNzaXplX3QgY250OworCWxpYnVzYl9kZXZpY2UgKipsaXN0OworCisJc3RhdGUtPmZvdW5kID0gTlVMTDsKKwlzdGF0ZS0+Y3R4ID0gTlVMTDsKKwlzdGF0ZS0+aGFuZGxlID0gTlVMTDsKKwlzdGF0ZS0+YXR0YWNoZWQgPSAwOworCisJcmV0ID0gbGlidXNiX2luaXQoJnN0YXRlLT5jdHgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJjYW5ub3QgaW5pdCBsaWJ1c2I6ICVzXG4iLCBsaWJ1c2JfZXJyb3JfbmFtZShyZXQpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY250ID0gbGlidXNiX2dldF9kZXZpY2VfbGlzdChzdGF0ZS0+Y3R4LCAmbGlzdCk7CisJaWYgKGNudCA8PSAwKSB7CisJCXByaW50Zigibm8gZGV2aWNlcyBmb3VuZFxuIik7CisJCWdvdG8gZXJyb3IxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7ICsraSkgeworCQlsaWJ1c2JfZGV2aWNlICpkZXYgPSBsaXN0W2ldOworCQlzdHJ1Y3QgbGlidXNiX2RldmljZV9kZXNjcmlwdG9yIGRlc2M7CisJCXJldCA9IGxpYnVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IoZGV2LCAmZGVzYyk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ZigidW5hYmxlIHRvIGdldCBkZXZpY2UgZGVzY3JpcHRvcjogJXNcbiIsCisJCQkgICAgICAgbGlidXNiX2Vycm9yX25hbWUocmV0KSk7CisJCQlnb3RvIGVycm9yMjsKKwkJfQorCQlpZiAoZGVzYy5pZFZlbmRvciA9PSBWRU5ET1IgJiYgZGVzYy5pZFByb2R1Y3QgPT0gUFJPRFVDVCkgeworCQkJc3RhdGUtPmZvdW5kID0gZGV2OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXN0YXRlLT5mb3VuZCkgeworCQlwcmludGYoIm5vIGRldmljZXMgZm91bmRcbiIpOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwlyZXQgPSBsaWJ1c2Jfb3BlbihzdGF0ZS0+Zm91bmQsICZzdGF0ZS0+aGFuZGxlKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiY2Fubm90IG9wZW4gZGV2aWNlOiAlc1xuIiwgbGlidXNiX2Vycm9yX25hbWUocmV0KSk7CisJCWdvdG8gZXJyb3IyOworCX0KKworCWlmIChsaWJ1c2JfY2xhaW1faW50ZXJmYWNlKHN0YXRlLT5oYW5kbGUsIDApKSB7CisJCXJldCA9IGxpYnVzYl9kZXRhY2hfa2VybmVsX2RyaXZlcihzdGF0ZS0+aGFuZGxlLCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRmKCJ1bmFibGUgdG8gZGV0YWNoIGtlcm5lbCBkcml2ZXI6ICVzXG4iLAorCQkJICAgICAgIGxpYnVzYl9lcnJvcl9uYW1lKHJldCkpOworCQkJZ290byBlcnJvcjM7CisJCX0KKwkJc3RhdGUtPmF0dGFjaGVkID0gMTsKKwkJcmV0ID0gbGlidXNiX2NsYWltX2ludGVyZmFjZShzdGF0ZS0+aGFuZGxlLCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRmKCJjYW5ub3QgY2xhaW0gaW50ZXJmYWNlOiAlc1xuIiwKKwkJCSAgICAgICBsaWJ1c2JfZXJyb3JfbmFtZShyZXQpKTsKKwkJCWdvdG8gZXJyb3I0OworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yNDoKKwlpZiAoc3RhdGUtPmF0dGFjaGVkID09IDEpCisJCWxpYnVzYl9hdHRhY2hfa2VybmVsX2RyaXZlcihzdGF0ZS0+aGFuZGxlLCAwKTsKKworZXJyb3IzOgorCWxpYnVzYl9jbG9zZShzdGF0ZS0+aGFuZGxlKTsKKworZXJyb3IyOgorCWxpYnVzYl9mcmVlX2RldmljZV9saXN0KGxpc3QsIDEpOworCitlcnJvcjE6CisJbGlidXNiX2V4aXQoc3RhdGUtPmN0eCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiB0ZXN0X2V4aXQgLSBjbGVhbnVwIHRlc3QgcHJvZ3JhbQorICovCisKK3ZvaWQgdGVzdF9leGl0KHN0cnVjdCB0ZXN0X3N0YXRlICpzdGF0ZSkKK3sKKwlsaWJ1c2JfcmVsZWFzZV9pbnRlcmZhY2Uoc3RhdGUtPmhhbmRsZSwgMCk7CisJaWYgKHN0YXRlLT5hdHRhY2hlZCA9PSAxKQorCQlsaWJ1c2JfYXR0YWNoX2tlcm5lbF9kcml2ZXIoc3RhdGUtPmhhbmRsZSwgMCk7CisJbGlidXNiX2Nsb3NlKHN0YXRlLT5oYW5kbGUpOworCWxpYnVzYl9leGl0KHN0YXRlLT5jdHgpOworfQorCitpbnQgbWFpbih2b2lkKQoreworCXN0cnVjdCB0ZXN0X3N0YXRlIHN0YXRlOworCisJaWYgKHRlc3RfaW5pdCgmc3RhdGUpKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgxKSB7CisJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltCVUZfTEVOXTsKKwkJaW50IGJ5dGVzOworCQlsaWJ1c2JfYnVsa190cmFuc2ZlcihzdGF0ZS5oYW5kbGUsIEVQX0JVTEtfSU4sIGJ1ZmZlciwgQlVGX0xFTiwKKwkJCQkgICAgICZieXRlcywgNTAwKTsKKwkJbGlidXNiX2J1bGtfdHJhbnNmZXIoc3RhdGUuaGFuZGxlLCBFUF9CVUxLX09VVCwgYnVmZmVyLCBCVUZfTEVOLAorCQkJCSAgICAgJmJ5dGVzLCA1MDApOworCX0KKwl0ZXN0X2V4aXQoJnN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZpcnRpby9NYWtlZmlsZSBiL3Rvb2xzL3ZpcnRpby9NYWtlZmlsZQppbmRleCAzMTg3YzYyLi45MzI1ZjQ2IDEwMDY0NAotLS0gYS90b29scy92aXJ0aW8vTWFrZWZpbGUKKysrIGIvdG9vbHMvdmlydGlvL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogdmlydGlvX3Rlc3Q6IHZpcnRpb19yaW5nLm8gdmlydGlvX3Rlc3QubwogdnJpbmdoX3Rlc3Q6IHZyaW5naF90ZXN0Lm8gdnJpbmdoLm8gdmlydGlvX3JpbmcubwogCi1DRkxBR1MgKz0gLWcgLU8yIC1XYWxsIC1JLiAtSSAuLi8uLi91c3IvaW5jbHVkZS8gLVduby1wb2ludGVyLXNpZ24gLWZuby1zdHJpY3Qtb3ZlcmZsb3cgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gLU1NRCAtVV9GT1JUSUZZX1NPVVJDRQorQ0ZMQUdTICs9IC1nIC1PMiAtV2FsbCAtSS4gLUkuLi9pbmNsdWRlLyAtSSAuLi8uLi91c3IvaW5jbHVkZS8gLVduby1wb2ludGVyLXNpZ24gLWZuby1zdHJpY3Qtb3ZlcmZsb3cgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gLU1NRCAtVV9GT1JUSUZZX1NPVVJDRQogdnBhdGggJS5jIC4uLy4uL2RyaXZlcnMvdmlydGlvIC4uLy4uL2RyaXZlcnMvdmhvc3QKIG1vZDoKIAkke01BS0V9IC1DIGBwd2RgLy4uLy4uIE09YHB3ZGAvdmhvc3RfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oIGIvdG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oCmluZGV4IGZiYTcwNTkuLjFlOGNlNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaAorKysgYi90b29scy92aXJ0aW8vbGludXgva2VybmVsLmgKQEAgLTM4LDEzICszOCw2IEBACiAKICNkZWZpbmUgX19wcmludGYoYSxiKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLGEsYikpKQogCi10eXBlZGVmIGVudW0gewotCUdGUF9LRVJORUwsCi0JR0ZQX0FUT01JQywKLQlfX0dGUF9ISUdITUVNLAotCV9fR0ZQX0hJR0gKLX0gZ2ZwX3Q7Ci0KICNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKIAogZXh0ZXJuIHZvaWQgKl9fa21hbGxvY19mYWtlLCAqX19rZnJlZV9pZ25vcmVfc3RhcnQsICpfX2tmcmVlX2lnbm9yZV9lbmQ7CmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vbGludXgvdHlwZXMuaCBiL3Rvb2xzL3ZpcnRpby9saW51eC90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGViYjlhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ZpcnRpby9saW51eC90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotI2lmbmRlZiBUWVBFU19ICi0jZGVmaW5lIFRZUEVTX0gKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2RlZmluZSBfX2ZvcmNlCi0jZGVmaW5lIF9fdXNlcgotI2RlZmluZSBfX211c3RfY2hlY2sKLSNkZWZpbmUgX19jb2xkCi0KLXR5cGVkZWYgdWludDY0X3QgdTY0OwotdHlwZWRlZiBpbnQ2NF90IHM2NDsKLXR5cGVkZWYgdWludDMyX3QgdTMyOwotdHlwZWRlZiBpbnQzMl90IHMzMjsKLXR5cGVkZWYgdWludDE2X3QgdTE2OwotdHlwZWRlZiBpbnQxNl90IHMxNjsKLXR5cGVkZWYgdWludDhfdCB1ODsKLXR5cGVkZWYgaW50OF90IHM4OwotCi10eXBlZGVmIHVpbnQ2NF90IF9fdTY0OwotdHlwZWRlZiBpbnQ2NF90IF9fczY0OwotdHlwZWRlZiB1aW50MzJfdCBfX3UzMjsKLXR5cGVkZWYgaW50MzJfdCBfX3MzMjsKLXR5cGVkZWYgdWludDE2X3QgX191MTY7Ci10eXBlZGVmIGludDE2X3QgX19zMTY7Ci10eXBlZGVmIHVpbnQ4X3QgX191ODsKLXR5cGVkZWYgaW50OF90IF9fczg7Ci0KLSNlbmRpZiAvKiBUWVBFU19IICovCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9hc3luY19wZi5jIGIvdmlydC9rdm0vYXN5bmNfcGYuYwppbmRleCAwNmU2NDAxLi5kNmEzZDA5IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9hc3luY19wZi5jCisrKyBiL3ZpcnQva3ZtL2FzeW5jX3BmLmMKQEAgLTgwLDEyICs4MCwxMCBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCXVzZV9tbShtbSk7CiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBhZGRyLCAxLCAxLCAwLCBOVUxMLCBOVUxMKTsKKwlnZXRfdXNlcl9wYWdlcyhOVUxMLCBtbSwgYWRkciwgMSwgMSwgMCwgTlVMTCwgTlVMTCk7CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlrdm1fYXN5bmNfcGFnZV9wcmVzZW50X3N5bmModmNwdSwgYXBmKTsKLQl1bnVzZV9tbShtbSk7CiAKIAlzcGluX2xvY2soJnZjcHUtPmFzeW5jX3BmLmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJmFwZi0+bGluaywgJnZjcHUtPmFzeW5jX3BmLmRvbmUpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZXZlbnRmZC5jIGIvdmlydC9rdm0vZXZlbnRmZC5jCmluZGV4IDI5YzJhMDQuLjIwYzNhZjcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2V2ZW50ZmQuYworKysgYi92aXJ0L2t2bS9ldmVudGZkLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXZlbnRmZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpb2Rldi5oIgpAQCAtMTE4LDE5ICsxMTksMjIgQEAKIGlycWZkX3Jlc2FtcGxlcl9hY2soc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQogewogCXN0cnVjdCBfaXJxZmRfcmVzYW1wbGVyICpyZXNhbXBsZXI7CisJc3RydWN0IGt2bSAqa3ZtOwogCXN0cnVjdCBfaXJxZmQgKmlycWZkOworCWludCBpZHg7CiAKIAlyZXNhbXBsZXIgPSBjb250YWluZXJfb2Yoa2lhbiwgc3RydWN0IF9pcnFmZF9yZXNhbXBsZXIsIG5vdGlmaWVyKTsKKwlrdm0gPSByZXNhbXBsZXItPmt2bTsKIAotCWt2bV9zZXRfaXJxKHJlc2FtcGxlci0+a3ZtLCBLVk1fSVJRRkRfUkVTQU1QTEVfSVJRX1NPVVJDRV9JRCwKKwlrdm1fc2V0X2lycShrdm0sIEtWTV9JUlFGRF9SRVNBTVBMRV9JUlFfU09VUkNFX0lELAogCQkgICAgcmVzYW1wbGVyLT5ub3RpZmllci5nc2ksIDAsIGZhbHNlKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5pcnFfc3JjdSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpcnFmZCwgJnJlc2FtcGxlci0+bGlzdCwgcmVzYW1wbGVyX2xpbmspCiAJCWV2ZW50ZmRfc2lnbmFsKGlycWZkLT5yZXNhbXBsZWZkLCAxKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOworCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+aXJxX3NyY3UsIGlkeCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNDIsNyArMTQ2LDcgQEAKIAltdXRleF9sb2NrKCZrdm0tPmlycWZkcy5yZXNhbXBsZXJfbG9jayk7CiAKIAlsaXN0X2RlbF9yY3UoJmlycWZkLT5yZXNhbXBsZXJfbGluayk7Ci0Jc3luY2hyb25pemVfcmN1KCk7CisJc3luY2hyb25pemVfc3JjdSgma3ZtLT5pcnFfc3JjdSk7CiAKIAlpZiAobGlzdF9lbXB0eSgmcmVzYW1wbGVyLT5saXN0KSkgewogCQlsaXN0X2RlbCgmcmVzYW1wbGVyLT5saW5rKTsKQEAgLTIyMSwxNyArMjI1LDE4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncyA9ICh1bnNpZ25lZCBsb25nKWtleTsKIAlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqaXJxOwogCXN0cnVjdCBrdm0gKmt2bSA9IGlycWZkLT5rdm07CisJaW50IGlkeDsKIAogCWlmIChmbGFncyAmIFBPTExJTikgewotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWlycSA9IHJjdV9kZXJlZmVyZW5jZShpcnFmZC0+aXJxX2VudHJ5KTsKKwkJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+aXJxX3NyY3UpOworCQlpcnEgPSBzcmN1X2RlcmVmZXJlbmNlKGlycWZkLT5pcnFfZW50cnksICZrdm0tPmlycV9zcmN1KTsKIAkJLyogQW4gZXZlbnQgaGFzIGJlZW4gc2lnbmFsZWQsIGluamVjdCBhbiBpbnRlcnJ1cHQgKi8KIAkJaWYgKGlycSkKIAkJCWt2bV9zZXRfbXNpKGlycSwga3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsIDEsCiAJCQkJCWZhbHNlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmaXJxZmQtPmluamVjdCk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCQlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPmlycV9zcmN1LCBpZHgpOwogCX0KIAogCWlmIChmbGFncyAmIFBPTExIVVApIHsKQEAgLTM2Myw3ICszNjgsNyBAQAogCQl9CiAKIAkJbGlzdF9hZGRfcmN1KCZpcnFmZC0+cmVzYW1wbGVyX2xpbmssICZpcnFmZC0+cmVzYW1wbGVyLT5saXN0KTsKLQkJc3luY2hyb25pemVfcmN1KCk7CisJCXN5bmNocm9uaXplX3NyY3UoJmt2bS0+aXJxX3NyY3UpOwogCiAJCW11dGV4X3VubG9jaygma3ZtLT5pcnFmZHMucmVzYW1wbGVyX2xvY2spOwogCX0KQEAgLTQ2NSw3ICs0NzAsNyBAQAogCQkJICogYW5vdGhlciB0aHJlYWQgY2FsbHMga3ZtX2lycV9yb3V0aW5nX3VwZGF0ZSBiZWZvcmUKIAkJCSAqIHdlIGZsdXNoIHdvcmtxdWV1ZSBiZWxvdyAod2Ugc3luY2hyb25pemUgd2l0aAogCQkJICoga3ZtX2lycV9yb3V0aW5nX3VwZGF0ZSB1c2luZyBpcnFmZHMubG9jaykuCi0JCQkgKiBJdCBpcyBwYWlyZWQgd2l0aCBzeW5jaHJvbml6ZV9yY3UgZG9uZSBieSBjYWxsZXIKKwkJCSAqIEl0IGlzIHBhaXJlZCB3aXRoIHN5bmNocm9uaXplX3NyY3UgZG9uZSBieSBjYWxsZXIKIAkJCSAqIG9mIHRoYXQgZnVuY3Rpb24uCiAJCQkgKi8KIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihpcnFmZC0+aXJxX2VudHJ5LCBOVUxMKTsKQEAgLTUyNCw3ICs1MjksNyBAQAogCiAvKgogICogQ2hhbmdlIGlycV9yb3V0aW5nIGFuZCBpcnFmZC4KLSAqIENhbGxlciBtdXN0IGludm9rZSBzeW5jaHJvbml6ZV9yY3UgYWZ0ZXJ3YXJkcy4KKyAqIENhbGxlciBtdXN0IGludm9rZSBzeW5jaHJvbml6ZV9zcmN1KCZrdm0tPmlycV9zcmN1KSBhZnRlcndhcmRzLgogICovCiB2b2lkIGt2bV9pcnFfcm91dGluZ191cGRhdGUoc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfdGFibGUgKmlycV9ydCkKQEAgLTYwMCw3ICs2MDUsMTUgQEAKIHsKIAl1NjQgX3ZhbDsKIAotCWlmICghKGFkZHIgPT0gcC0+YWRkciAmJiBsZW4gPT0gcC0+bGVuZ3RoKSkKKwlpZiAoYWRkciAhPSBwLT5hZGRyKQorCQkvKiBhZGRyZXNzIG11c3QgYmUgcHJlY2lzZSBmb3IgYSBoaXQgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFwLT5sZW5ndGgpCisJCS8qIGxlbmd0aCA9IDAgbWVhbnMgb25seSBsb29rIGF0IHRoZSBhZGRyZXNzLCBzbyBhbHdheXMgYSBoaXQgKi8KKwkJcmV0dXJuIHRydWU7CisKKwlpZiAobGVuICE9IHAtPmxlbmd0aCkKIAkJLyogYWRkcmVzcy1yYW5nZSBtdXN0IGJlIHByZWNpc2UgZm9yIGEgaGl0ICovCiAJCXJldHVybiBmYWxzZTsKIApAQCAtNjcxLDkgKzY4NCwxMSBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfcCwgJmt2bS0+aW9ldmVudGZkcywgbGlzdCkKIAkJaWYgKF9wLT5idXNfaWR4ID09IHAtPmJ1c19pZHggJiYKLQkJICAgIF9wLT5hZGRyID09IHAtPmFkZHIgJiYgX3AtPmxlbmd0aCA9PSBwLT5sZW5ndGggJiYKLQkJICAgIChfcC0+d2lsZGNhcmQgfHwgcC0+d2lsZGNhcmQgfHwKLQkJICAgICBfcC0+ZGF0YW1hdGNoID09IHAtPmRhdGFtYXRjaCkpCisJCSAgICBfcC0+YWRkciA9PSBwLT5hZGRyICYmCisJCSAgICAoIV9wLT5sZW5ndGggfHwgIXAtPmxlbmd0aCB8fAorCQkgICAgIChfcC0+bGVuZ3RoID09IHAtPmxlbmd0aCAmJgorCQkgICAgICAoX3AtPndpbGRjYXJkIHx8IHAtPndpbGRjYXJkIHx8CisJCSAgICAgICBfcC0+ZGF0YW1hdGNoID09IHAtPmRhdGFtYXRjaCkpKSkKIAkJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtNjk3LDggKzcxMiw5IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICByZXQ7CiAKIAlidXNfaWR4ID0gaW9ldmVudGZkX2J1c19mcm9tX2ZsYWdzKGFyZ3MtPmZsYWdzKTsKLQkvKiBtdXN0IGJlIG5hdHVyYWwtd29yZCBzaXplZCAqLworCS8qIG11c3QgYmUgbmF0dXJhbC13b3JkIHNpemVkLCBvciAwIHRvIGlnbm9yZSBsZW5ndGggKi8KIAlzd2l0Y2ggKGFyZ3MtPmxlbikgeworCWNhc2UgMDoKIAljYXNlIDE6CiAJY2FzZSAyOgogCWNhc2UgNDoKQEAgLTcxNiw2ICs3MzIsMTIgQEAKIAlpZiAoYXJncy0+ZmxhZ3MgJiB+S1ZNX0lPRVZFTlRGRF9WQUxJRF9GTEFHX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogaW9ldmVudGZkIHdpdGggbm8gbGVuZ3RoIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggREFUQU1BVENIICovCisJaWYgKCFhcmdzLT5sZW4gJiYKKwkgICAgYXJncy0+ZmxhZ3MgJiAoS1ZNX0lPRVZFTlRGRF9GTEFHX1BJTyB8CisJCQkgICBLVk1fSU9FVkVOVEZEX0ZMQUdfREFUQU1BVENIKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoYXJncy0+ZmQpOwogCWlmIChJU19FUlIoZXZlbnRmZCkpCiAJCXJldHVybiBQVFJfRVJSKGV2ZW50ZmQpOwpAQCAtNzUzLDYgKzc3NSwxNiBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIHVubG9ja19mYWlsOwogCisJLyogV2hlbiBsZW5ndGggaXMgaWdub3JlZCwgTU1JTyBpcyBhbHNvIHB1dCBvbiBhIHNlcGFyYXRlIGJ1cywgZm9yCisJICogZmFzdGVyIGxvb2t1cHMuCisJICovCisJaWYgKCFhcmdzLT5sZW4gJiYgIShhcmdzLT5mbGFncyAmIEtWTV9JT0VWRU5URkRfRkxBR19QSU8pKSB7CisJCXJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX0ZBU1RfTU1JT19CVVMsCisJCQkJCSAgICAgIHAtPmFkZHIsIDAsICZwLT5kZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcmVnaXN0ZXJfZmFpbDsKKwl9CisKIAlrdm0tPmJ1c2VzW2J1c19pZHhdLT5pb2V2ZW50ZmRfY291bnQrKzsKIAlsaXN0X2FkZF90YWlsKCZwLT5saXN0LCAma3ZtLT5pb2V2ZW50ZmRzKTsKIApAQCAtNzYwLDYgKzc5Miw4IEBACiAKIAlyZXR1cm4gMDsKIAorcmVnaXN0ZXJfZmFpbDoKKwlrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KGt2bSwgYnVzX2lkeCwgJnAtPmRldik7CiB1bmxvY2tfZmFpbDoKIAltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAKQEAgLTc5OSw2ICs4MzMsMTAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoa3ZtLCBidXNfaWR4LCAmcC0+ZGV2KTsKKwkJaWYgKCFwLT5sZW5ndGgpIHsKKwkJCWt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fRkFTVF9NTUlPX0JVUywKKwkJCQkJCSAgJnAtPmRldik7CisJCX0KIAkJa3ZtLT5idXNlc1tidXNfaWR4XS0+aW9ldmVudGZkX2NvdW50LS07CiAJCWlvZXZlbnRmZF9yZWxlYXNlKHApOwogCQlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaXJxX2NvbW0uYyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKaW5kZXggZTJlNmI0NC4uY2VkNGE1NCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaXJxX2NvbW0uYworKysgYi92aXJ0L2t2bS9pcnFfY29tbS5jCkBAIC0xNjMsNiArMTYzLDcgQEAKIAlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3RhYmxlICppcnFfcnQ7CisJaW50IGlkeDsKIAogCXRyYWNlX2t2bV9zZXRfaXJxKGlycSwgbGV2ZWwsIGlycV9zb3VyY2VfaWQpOwogCkBAIC0xNzQsOCArMTc1LDggQEAKIAkgKiBTaW5jZSB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGRvIHRoaXMsIHdlIG9ubHkgc3VwcG9ydCBpbmplY3RpbmcgTVNJCiAJICogd2hpY2ggaXMgbGltaXRlZCB0byAxOjEgR1NJIG1hcHBpbmcuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWlycV9ydCA9IHJjdV9kZXJlZmVyZW5jZShrdm0tPmlycV9yb3V0aW5nKTsKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5pcnFfc3JjdSk7CisJaXJxX3J0ID0gc3JjdV9kZXJlZmVyZW5jZShrdm0tPmlycV9yb3V0aW5nLCAma3ZtLT5pcnFfc3JjdSk7CiAJaWYgKGlycSA8IGlycV9ydC0+bnJfcnRfZW50cmllcykKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmlycV9ydC0+bWFwW2lycV0sIGxpbmspIHsKIAkJCWlmIChsaWtlbHkoZS0+dHlwZSA9PSBLVk1fSVJRX1JPVVRJTkdfTVNJKSkKQEAgLTE4NCw3ICsxODUsNyBAQAogCQkJCXJldCA9IC1FV09VTERCTE9DSzsKIAkJCWJyZWFrOwogCQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5pcnFfc3JjdSwgaWR4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNTMsMjIgKzI1NCwyMiBAQAogCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCWhsaXN0X2RlbF9yY3UoJmtpbW4tPmxpbmspOwogCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7Ci0Jc3luY2hyb25pemVfcmN1KCk7CisJc3luY2hyb25pemVfc3JjdSgma3ZtLT5pcnFfc3JjdSk7CiB9CiAKIHZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4sCiAJCQkgICAgIGJvb2wgbWFzaykKIHsKIAlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uOwotCWludCBnc2k7CisJaW50IGlkeCwgZ3NpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWdzaSA9IHJjdV9kZXJlZmVyZW5jZShrdm0tPmlycV9yb3V0aW5nKS0+Y2hpcFtpcnFjaGlwXVtwaW5dOworCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPmlycV9zcmN1KTsKKwlnc2kgPSBzcmN1X2RlcmVmZXJlbmNlKGt2bS0+aXJxX3JvdXRpbmcsICZrdm0tPmlycV9zcmN1KS0+Y2hpcFtpcnFjaGlwXVtwaW5dOwogCWlmIChnc2kgIT0gLTEpCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShraW1uLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QsIGxpbmspCiAJCQlpZiAoa2ltbi0+aXJxID09IGdzaSkKIAkJCQlraW1uLT5mdW5jKGtpbW4sIG1hc2spOwotCXJjdV9yZWFkX3VubG9jaygpOworCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+aXJxX3NyY3UsIGlkeCk7CiB9CiAKIGludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bV9pcnFfcm91dGluZ190YWJsZSAqcnQsCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFjaGlwLmMgYi92aXJ0L2t2bS9pcnFjaGlwLmMKaW5kZXggMjBkYzllNC4uYjQzYzI3NSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaXJxY2hpcC5jCisrKyBiL3ZpcnQva3ZtL2lycWNoaXAuYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3JjdS5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm0uaD4KICNpbmNsdWRlICJpcnEuaCIKQEAgLTMzLDE5ICszNCwxOSBAQAogYm9vbCBrdm1faXJxX2hhc19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbikKIHsKIAlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW47Ci0JaW50IGdzaTsKKwlpbnQgZ3NpLCBpZHg7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZ3NpID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+aXJxX3JvdXRpbmcpLT5jaGlwW2lycWNoaXBdW3Bpbl07CisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+aXJxX3NyY3UpOworCWdzaSA9IHNyY3VfZGVyZWZlcmVuY2Uoa3ZtLT5pcnFfcm91dGluZywgJmt2bS0+aXJxX3NyY3UpLT5jaGlwW2lycWNoaXBdW3Bpbl07CiAJaWYgKGdzaSAhPSAtMSkKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtpYW4sICZrdm0tPmlycV9hY2tfbm90aWZpZXJfbGlzdCwKIAkJCQkJIGxpbmspCiAJCQlpZiAoa2lhbi0+Z3NpID09IGdzaSkgewotCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+aXJxX3NyY3UsIGlkeCk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPmlycV9zcmN1LCBpZHgpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtNTQsMTggKzU1LDE4IEBACiB2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKQogewogCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbjsKLQlpbnQgZ3NpOworCWludCBnc2ksIGlkeDsKIAogCXRyYWNlX2t2bV9hY2tfaXJxKGlycWNoaXAsIHBpbik7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZ3NpID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+aXJxX3JvdXRpbmcpLT5jaGlwW2lycWNoaXBdW3Bpbl07CisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+aXJxX3NyY3UpOworCWdzaSA9IHNyY3VfZGVyZWZlcmVuY2Uoa3ZtLT5pcnFfcm91dGluZywgJmt2bS0+aXJxX3NyY3UpLT5jaGlwW2lycWNoaXBdW3Bpbl07CiAJaWYgKGdzaSAhPSAtMSkKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtpYW4sICZrdm0tPmlycV9hY2tfbm90aWZpZXJfbGlzdCwKIAkJCQkJIGxpbmspCiAJCQlpZiAoa2lhbi0+Z3NpID09IGdzaSkKIAkJCQlraWFuLT5pcnFfYWNrZWQoa2lhbik7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5pcnFfc3JjdSwgaWR4KTsKIH0KIAogdm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCkBAIC04NSw3ICs4Niw3IEBACiAJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJaGxpc3RfZGVsX2luaXRfcmN1KCZraWFuLT5saW5rKTsKIAltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwotCXN5bmNocm9uaXplX3JjdSgpOworCXN5bmNocm9uaXplX3NyY3UoJmt2bS0+aXJxX3NyY3UpOwogI2lmZGVmIF9fS1ZNX0hBVkVfSU9BUElDCiAJa3ZtX3ZjcHVfcmVxdWVzdF9zY2FuX2lvYXBpYyhrdm0pOwogI2VuZGlmCkBAIC0xMTUsNyArMTE2LDcgQEAKIAkJYm9vbCBsaW5lX3N0YXR1cykKIHsKIAlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgaXJxX3NldFtLVk1fTlJfSVJRQ0hJUFNdOwotCWludCByZXQgPSAtMSwgaSA9IDA7CisJaW50IHJldCA9IC0xLCBpID0gMCwgaWR4OwogCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfdGFibGUgKmlycV9ydDsKIAogCXRyYWNlX2t2bV9zZXRfaXJxKGlycSwgbGV2ZWwsIGlycV9zb3VyY2VfaWQpOwpAQCAtMTI0LDEyICsxMjUsMTIgQEAKIAkgKiBJT0FQSUMuICBTbyBzZXQgdGhlIGJpdCBpbiBib3RoLiBUaGUgZ3Vlc3Qgd2lsbCBpZ25vcmUKIAkgKiB3cml0ZXMgdG8gdGhlIHVudXNlZCBvbmUuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWlycV9ydCA9IHJjdV9kZXJlZmVyZW5jZShrdm0tPmlycV9yb3V0aW5nKTsKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5pcnFfc3JjdSk7CisJaXJxX3J0ID0gc3JjdV9kZXJlZmVyZW5jZShrdm0tPmlycV9yb3V0aW5nLCAma3ZtLT5pcnFfc3JjdSk7CiAJaWYgKGlycSA8IGlycV9ydC0+bnJfcnRfZW50cmllcykKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmlycV9ydC0+bWFwW2lycV0sIGxpbmspCiAJCQlpcnFfc2V0W2krK10gPSAqZTsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPmlycV9zcmN1LCBpZHgpOwogCiAJd2hpbGUoaS0tKSB7CiAJCWludCByOwpAQCAtMjI2LDcgKzIyNyw3IEBACiAJa3ZtX2lycV9yb3V0aW5nX3VwZGF0ZShrdm0sIG5ldyk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAotCXN5bmNocm9uaXplX3JjdSgpOworCXN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCZrdm0tPmlycV9zcmN1KTsKIAogCW5ldyA9IG9sZDsKIAlyID0gMDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDU2YmFhZTguLmM4NmJlMGYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTg2LDkgKzE4NiwxMiBAQAogCiB2b2lkIGt2bV9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pCiB7CisJbG9uZyBkaXJ0eV9jb3VudCA9IGt2bS0+dGxic19kaXJ0eTsKKworCXNtcF9tYigpOwogCWlmIChtYWtlX2FsbF9jcHVzX3JlcXVlc3Qoa3ZtLCBLVk1fUkVRX1RMQl9GTFVTSCkpCiAJCSsra3ZtLT5zdGF0LnJlbW90ZV90bGJfZmx1c2g7Ci0Ja3ZtLT50bGJzX2RpcnR5ID0gZmFsc2U7CisJY21weGNoZygma3ZtLT50bGJzX2RpcnR5LCBkaXJ0eV9jb3VudCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZmx1c2hfcmVtb3RlX3RsYnMpOwogCkBAIC00NTQsMTEgKzQ1NywxMSBAQAogCiAJciA9IGt2bV9hcmNoX2luaXRfdm0oa3ZtLCB0eXBlKTsKIAlpZiAocikKLQkJZ290byBvdXRfZXJyX25vZGlzYWJsZTsKKwkJZ290byBvdXRfZXJyX25vX2Rpc2FibGU7CiAKIAlyID0gaGFyZHdhcmVfZW5hYmxlX2FsbCgpOwogCWlmIChyKQotCQlnb3RvIG91dF9lcnJfbm9kaXNhYmxlOworCQlnb3RvIG91dF9lcnJfbm9fZGlzYWJsZTsKIAogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCiAJSU5JVF9ITElTVF9IRUFEKCZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7CkBAIC00NzAsMTAgKzQ3MywxMiBAQAogCXIgPSAtRU5PTUVNOwogCWt2bS0+bWVtc2xvdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX21lbXNsb3RzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrdm0tPm1lbXNsb3RzKQotCQlnb3RvIG91dF9lcnJfbm9zcmN1OworCQlnb3RvIG91dF9lcnJfbm9fc3JjdTsKIAlrdm1faW5pdF9tZW1zbG90c19pZChrdm0pOwogCWlmIChpbml0X3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpKQotCQlnb3RvIG91dF9lcnJfbm9zcmN1OworCQlnb3RvIG91dF9lcnJfbm9fc3JjdTsKKwlpZiAoaW5pdF9zcmN1X3N0cnVjdCgma3ZtLT5pcnFfc3JjdSkpCisJCWdvdG8gb3V0X2Vycl9ub19pcnFfc3JjdTsKIAlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0JVU0VTOyBpKyspIHsKIAkJa3ZtLT5idXNlc1tpXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faW9fYnVzKSwKIAkJCQkJR0ZQX0tFUk5FTCk7CkBAIC01MDIsMTAgKzUwNywxMiBAQAogCXJldHVybiBrdm07CiAKIG91dF9lcnI6CisJY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5pcnFfc3JjdSk7CitvdXRfZXJyX25vX2lycV9zcmN1OgogCWNsZWFudXBfc3JjdV9zdHJ1Y3QoJmt2bS0+c3JjdSk7Ci1vdXRfZXJyX25vc3JjdToKK291dF9lcnJfbm9fc3JjdToKIAloYXJkd2FyZV9kaXNhYmxlX2FsbCgpOwotb3V0X2Vycl9ub2Rpc2FibGU6CitvdXRfZXJyX25vX2Rpc2FibGU6CiAJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9CVVNFUzsgaSsrKQogCQlrZnJlZShrdm0tPmJ1c2VzW2ldKTsKIAlrZnJlZShrdm0tPm1lbXNsb3RzKTsKQEAgLTYwMSw2ICs2MDgsNyBAQAogCWt2bV9hcmNoX2Rlc3Ryb3lfdm0oa3ZtKTsKIAlrdm1fZGVzdHJveV9kZXZpY2VzKGt2bSk7CiAJa3ZtX2ZyZWVfcGh5c21lbShrdm0pOworCWNsZWFudXBfc3JjdV9zdHJ1Y3QoJmt2bS0+aXJxX3NyY3UpOwogCWNsZWFudXBfc3JjdV9zdHJ1Y3QoJmt2bS0+c3JjdSk7CiAJa3ZtX2FyY2hfZnJlZV92bShrdm0pOwogCWhhcmR3YXJlX2Rpc2FibGVfYWxsKCk7CkBAIC02MzcsMTQgKzY0NSwxMiBAQAogICovCiBzdGF0aWMgaW50IGt2bV9jcmVhdGVfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpCiB7Ci0jaWZuZGVmIENPTkZJR19TMzkwCiAJdW5zaWduZWQgbG9uZyBkaXJ0eV9ieXRlcyA9IDIgKiBrdm1fZGlydHlfYml0bWFwX2J5dGVzKG1lbXNsb3QpOwogCiAJbWVtc2xvdC0+ZGlydHlfYml0bWFwID0ga3ZtX2t2emFsbG9jKGRpcnR5X2J5dGVzKTsKIAlpZiAoIW1lbXNsb3QtPmRpcnR5X2JpdG1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLSNlbmRpZiAvKiAhQ09ORklHX1MzOTAgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkyMiw2ICsyOTI4LDcgQEAKIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9pb19idXNfd3JpdGUpOwogCiAvKiBrdm1faW9fYnVzX3JlYWQgLSBjYWxsZWQgdW5kZXIga3ZtLT5zbG90c19sb2NrICovCiBpbnQga3ZtX2lvX2J1c19yZWFkKHN0cnVjdCBrdm0gKmt2bSwgZW51bSBrdm1fYnVzIGJ1c19pZHgsIGdwYV90IGFkZHIsCg==